[
  {
    "path": ".flake8",
    "content": "[flake8]\nignore = E203, E266, E501, W503, F403, F401\nmax-line-length = 200\n"
  },
  {
    "path": ".gitattributes",
    "content": "# Ignore all differences in line endings\r\n*        -crlf"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\nko_fi: ralim\ncustom: https://paypal.me/RalimTek\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: Ralim\n\n---\n\n**Describe the bug**\n<!-- A clear and concise description of what the bug is. -->\n\n**To Reproduce**\n<!-- Steps to reproduce the behavior:\n1. Go to '...'\n2. Click on '...'\n3. Scroll down to '...'\n4. See error -->\n\n**Expected behavior**\n<!-- A clear and concise description of what you expected to happen. -->\n\n\n**Details of your device:**\n <!-- You can get these from the debug menu by holding the rear button down and then using the front one to cycle through -->\n - Device: [e.g. TS80/Pinecil etc]\n - Release: [eg 2.15.40087E6]\n - Power adapter being used:\n - If this is an accelerometer related issue, please include its model number here:\n\n**Additional context**\n<!-- Add any other context about the problem here. -->\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/everything-else--questions--notes-etc-.md",
    "content": "---\nname: Everything else (Questions, notes etc)\nabout: For remarking questions or notes\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n<!-- **Questions are preferred to be kept to the discussions tab where possible, but otherwise go for it. be polite and as clear as possible.** -->\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: enhancement\nassignees: Ralim\n\n---\n\n**Is your feature request related to a problem? Please describe.**\n<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->\n\n**Describe the solution you'd like**\n<!-- A clear and concise description of what you want to happen. -->\n\n**Describe alternatives you've considered**\n<!-- A clear and concise description of any alternative solutions or features you've considered. -->\n\n**Additional context**\n<!-- Add any other context or screenshots about the feature request here. -->\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      # Check for updates to GitHub Actions every weekday\n      interval: \"weekly\"\n    open-pull-requests-limit: 10\n    commit-message:\n      prefix: chore\n      include: scope\n"
  },
  {
    "path": ".github/pull_request_template.md",
    "content": "\n<!-- Please try and fill out this template where possible, not all fields are required and can be removed. -->\n\n* **Please check if the PR fulfills these requirements**\n- [] The changes have been tested locally\n- [] There are no breaking changes\n\n* **What kind of change does this PR introduce?**\n<!-- (Bug fix, feature, docs update, ...) -->\n\n\n\n* **What is the current behavior?**\n<!-- (You can also just link to an open issue here) -->\n\n* **What is the new behavior (if this is a feature change)?**\n\n* **Other information**:\n"
  },
  {
    "path": ".github/security.md",
    "content": "# Security Policy\n\n## Supported Versions\n\nUse this section to tell people about which versions of your project are\ncurrently being supported with security updates.\n\n| Version | Supported          |\n| ------- | ------------------ |\n| Latest Release   | :white_check_mark: |\n| master   | :white_check_mark:                |\n\n## Reporting a Vulnerability\n\n1. Report in an issue please and tag @ralim\n2. All issues are read within 1 working week in general; often within 24 hours\n3. Issue shall recieve a comment within 14 days; but goal is < 2.\n4. Issue will be open until the vulnerability is closed in all supported versions\n"
  },
  {
    "path": ".github/workflows/docs.yml",
    "content": "name: Docs\n\n# Controls when the workflow will run\non:\n  # Triggers the workflow on push or pull request\n  push:\n    branches: [dev, docs]\n\n  # Allows you to run this workflow manually from the Actions tab\n  workflow_dispatch:\n\n# Allow one concurrent deployment\nconcurrency:\n  group: \"pages\"\n  cancel-in-progress: true\n\njobs:\n  deploy-docs:\n    # The type of runner that the job will run on\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n      - uses: actions/setup-python@v6\n        with:\n          python-version: '3.12.3'\n\n      - run: |\n          pip install --upgrade pip &&\n          pip install mkdocs mkdocs-gen-files pymdown-extensions \\\n              mkdocs-git-revision-date-plugin mkdocs-autolinks-plugin \\\n              mkdocs-awesome-pages-plugin\n\n      - run: git config user.name 'github-actions[bot]' && git config user.email 'github-actions[bot]@users.noreply.github.com'\n\n      - name: Publish docs\n        run: mkdocs gh-deploy -f scripts/IronOS-mkdocs.yml -d ../site\n"
  },
  {
    "path": ".github/workflows/push.yml",
    "content": "name: CI\n\non:\n  push:\n  pull_request:\n    branches:\n      - master\n      - dev\n      - main\n\njobs:\n  build:\n    runs-on: ubuntu-24.04\n    container:\n      image: alpine:3.21\n    strategy:\n      matrix:\n        model:\n          [\n            \"TS100\",\n            \"TS80\",\n            \"TS80P\",\n            \"Pinecil\",\n            \"MHP30\",\n            \"Pinecilv2\",\n            \"S60\",\n            \"S60P\",\n            \"T55\",\n            \"TS101\",\n          ]\n      fail-fast: true\n\n    steps:\n      - name: Install dependencies (apk)\n        run: apk add --no-cache gcc-riscv-none-elf g++-riscv-none-elf gcc-arm-none-eabi g++-arm-none-eabi newlib-riscv-none-elf newlib-arm-none-eabi findutils python3 py3-pip make git bash\n\n      - name: Install dependencies (python)\n        run: python3 -m pip install --break-system-packages bdflib\n\n      - uses: actions/checkout@v6\n        with:\n          submodules: true\n\n      - name: Git ownership exception\n        run: git config --global --add safe.directory /__w/IronOS/IronOS && git config --global safe.directory \"$GITHUB_WORKSPACE\"\n\n      - name: Git meta info\n        run: echo \"GITHUB_CI_PR_SHA=${{github.event.pull_request.head.sha}}\" >> \"${GITHUB_ENV}\"\n\n      - name: Build ${{ matrix.model }}\n        run: cd source && ./build.sh -m ${{ matrix.model }}\n\n      - name: Copy license files\n        run: cp LICENSE scripts/LICENSE_RELEASE.md  source/Hexfile/\n\n      - name: Generate json index file\n        run: ./source/metadata.py ${{ matrix.model }}.json\n\n      - name: Archive ${{ matrix.model }} artifacts\n        uses: actions/upload-artifact@v5\n        with:\n          name: ${{ matrix.model }}\n          path: |\n            source/Hexfile/${{ matrix.model }}_*.hex\n            source/Hexfile/${{ matrix.model }}_*.dfu\n            source/Hexfile/${{ matrix.model }}_*.bin\n            source/Hexfile/${{ matrix.model }}.json\n            source/Hexfile/LICENSE\n            source/Hexfile/LICENSE_RELEASE.md\n          if-no-files-found: error\n\n  build_multi-lang:\n    runs-on: ubuntu-24.04\n    container:\n      image: alpine:3.21\n    strategy:\n      matrix:\n        model: [\"Pinecil\", \"Pinecilv2\"]\n      fail-fast: true\n\n    steps:\n      - name: Install dependencies (apk)\n        run: apk add --no-cache gcc-riscv-none-elf g++-riscv-none-elf gcc-arm-none-eabi g++-arm-none-eabi newlib-riscv-none-elf newlib-arm-none-eabi findutils python3 py3-pip make git bash musl-dev\n      - name: Install dependencies (python)\n        run: python3 -m pip install --break-system-packages bdflib\n\n      - uses: actions/checkout@v6\n        with:\n          submodules: true\n\n      - name: Git ownership exception\n        run: git config --global --add safe.directory /__w/IronOS/IronOS && git config --global safe.directory \"$GITHUB_WORKSPACE\"\n\n      - name: Git meta info\n        run: echo \"GITHUB_CI_PR_SHA=${{github.event.pull_request.head.sha}}\" >> \"${GITHUB_ENV}\"\n\n      - name: Build ${{ matrix.model }}\n        run: make -C source/ -j$(nproc) model=\"${{ matrix.model }}\" firmware-multi_compressed_European firmware-multi_compressed_Belarusian+Bulgarian+Russian+Serbian+Ukrainian firmware-multi_Chinese+Japanese\n\n      - name: Copy license files\n        run: cp LICENSE scripts/LICENSE_RELEASE.md  source/Hexfile/\n\n      - name: Generate json index file\n        run: ./source/metadata.py ${{ matrix.model }}_multi-lang.json\n\n      - name: Archive ${{ matrix.model }} artifacts\n        uses: actions/upload-artifact@v5\n        with:\n          name: ${{ matrix.model }}_multi-lang\n          path: |\n            source/Hexfile/${{ matrix.model }}_*.hex\n            source/Hexfile/${{ matrix.model }}_*.dfu\n            source/Hexfile/${{ matrix.model }}_*.bin\n            source/Hexfile/${{ matrix.model }}_multi-lang.json\n            source/Hexfile/LICENSE\n            source/Hexfile/LICENSE_RELEASE.md\n          if-no-files-found: error\n\n  upload_metadata:\n    needs: [build, build_multi-lang]\n    runs-on: ubuntu-24.04\n\n    steps:\n      - name: Download all prebuilts\n        uses: actions/download-artifact@v6\n        with:\n          path: source/Hexfile/\n          merge-multiple: true\n      - run: ls -R source/Hexfile\n\n      - name: Upload JSONs in bulk as metadata\n        uses: actions/upload-artifact@v5\n        with:\n          name: metadata\n          path: source/Hexfile/*.json\n          if-no-files-found: error\n\n  tests:\n    runs-on: ubuntu-24.04\n    container:\n      image: alpine:3.21\n\n    steps:\n      - name: Install dependencies (apk)\n        run: apk add --no-cache python3 py3-pip make git bash findutils gcc musl-dev\n\n      - uses: actions/checkout@v6\n        with:\n          submodules: true\n\n      - name: Install dependencies (python)\n        run: python3 -m pip install --break-system-packages bdflib\n\n      - name: Run python tests\n        run: ./Translations/make_translation_test.py\n\n      - name: Run BriefLZ tests\n        run: make  -C source/  Objects/host/brieflz/libbrieflz.so && ./Translations/brieflz_test.py\n\n  check_c-cpp:\n    runs-on: ubuntu-24.04\n    container:\n      image: alpine:3.21\n\n    steps:\n      - name: Install dependencies (apk)\n        run: apk add --no-cache make git diffutils findutils clang-extra-tools bash\n\n      - uses: actions/checkout@v6\n        with:\n          submodules: true\n\n      - name: Check format style with clang-format\n        run: make  clean  check-style\n\n  check-settings-docs:\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@v6\n      - name: Run the menu docs generator\n        run: python Translations/gen_menu_docs.py\n      - name: Check that Documentation/Settings.md didn't change\n        run: git diff --exit-code\n\n  check_python:\n    runs-on: ubuntu-24.04\n    container:\n      image: alpine:3.21\n\n    steps:\n      - name: Install dependencies (apk)\n        run: apk add --no-cache python3 py3-pip make git black\n\n      - uses: actions/checkout@v6\n        with:\n          submodules: true\n\n      - name: Install dependencies (python)\n        run: python3 -m pip install --break-system-packages bdflib flake8\n\n      - name: Check python formatting with black\n        run: black --diff --check Translations\n\n      - name: Check python with flake8\n        run: flake8 Translations\n\n  check_shell:\n    name: check_shell\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@v6\n      - name: shellcheck\n        uses: reviewdog/action-shellcheck@v1\n        with:\n          github_token: ${{ secrets.github_token }}\n          reporter: github-pr-review # Change reporter.\n          exclude: \"./.git/*\" # Optional.\n          check_all_files_with_shebangs: \"false\" # Optional.\n\n  check_docs:\n    runs-on: ubuntu-24.04\n    container:\n      image: alpine:3.21\n\n    steps:\n      - name: Install dependencies (apk)\n        run: apk add --no-cache git bash grep\n\n      - uses: actions/checkout@v6\n        with:\n          submodules: true\n          fetch-tags: true\n          fetch-depth: 0\n\n      - name: Git ownership exception\n        run: git config --global --add safe.directory /__w/IronOS/IronOS && git config --global safe.directory \"$GITHUB_WORKSPACE\"\n\n      - name: Check and verify documentation\n        run: ./scripts/deploy.sh docs\n"
  },
  {
    "path": ".gitignore",
    "content": "#### Generic ####\r\n\r\n# Object files\r\n*.o\r\n*.ko\r\n*.obj\r\n*.elf\r\n*.d\r\n*.DS_Store\r\n\r\n# Precompiled Headers\r\n*.gch\r\n*.pch\r\n\r\n# Libraries\r\n*.lib\r\n*.a\r\n*.la\r\n*.lo\r\n\r\n# Shared objects (inc. Windows DLLs)\r\n*.dll\r\n*.so\r\n*.so.*\r\n*.dylib\r\n\r\n# Executables\r\n*.exe\r\n*.out\r\n*.app\r\n*.i*86\r\n*.x86_64\r\n\r\n# Debug files\r\n*.dSYM/\r\n*.su\r\n\r\n# Custom scripts & misc. files\r\n*.pyc\r\n*.lst\r\n*.mk\r\n*.list\r\n\r\n# Auto generated files\r\n*.cache\r\ncodeship.aes\r\nCoreCompileInputs.cache\r\n\r\n# IDE configs\r\n.vs/*\r\n.settings/*\r\n.cproject.swp\r\n\r\n# Visual Studios\r\n.vscode/*\r\n!.vscode/settings.json\r\n!.vscode/tasks.json\r\n!.vscode/launch.json\r\n!.vscode/extensions.json\r\n.vscode/settings.json\r\n\r\n# Eclipse\r\n.metadata\r\nbin/\r\ntmp/\r\n*.tmp\r\n*.bak\r\n*.swp\r\n*~.nib\r\nlocal.properties\r\n.settings/\r\n.loadpath\r\n.recommenders\r\n\r\n# External tool builders\r\n.externalToolBuilders/\r\n\r\n# Locally stored \"Eclipse launch configurations\"\r\n*.launch\r\n\r\n# PyDev specific (Python IDE for Eclipse)\r\n*.pydevproject\r\n\r\n# CDT- autotools\r\n.autotools\r\n\r\n# Java annotation processor (APT)\r\n.factorypath\r\n\r\n# PDT-specific (PHP Development Tools)\r\n.buildpath\r\n\r\n# sbteclipse plugin\r\n.target\r\n\r\n# Tern plugin\r\n.tern-project\r\n\r\n# TeXlipse plugin\r\n.texlipse\r\n\r\n# STS (Spring Tool Suite)\r\n.springBeans\r\n\r\n# Code Recommenders\r\n.recommenders/\r\n\r\n# Annotation Processing\r\n.apt_generated/\r\n\r\n# Scala IDE specific (Scala & Java development for Eclipse)\r\n.cache-main\r\n.scala_dependencies\r\n.worksheet\r\n\r\n# source code tagging systems (GNU Global, ctags, cscope)\r\nGPATH\r\nGRTAGS\r\nGTAGS\r\n*tags\r\n*tags/\r\n.*tags\r\n.*tags/\r\ncscope.*\r\ncscope/\r\n.cscope/\r\n\r\n\r\n#### Jetbrains: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm ####\r\n# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839\r\n\r\n# User-specific stuff\r\n.idea/\r\n.idea/**/workspace.xml\r\n.idea/**/tasks.xml\r\n.idea/**/usage.statistics.xml\r\n.idea/**/dictionaries\r\n.idea/**/shelf\r\n\r\n# Sensitive or high-churn files\r\n.idea/**/dataSources/\r\n.idea/**/dataSources.ids\r\n.idea/**/dataSources.local.xml\r\n.idea/**/sqlDataSources.xml\r\n.idea/**/dynamic.xml\r\n.idea/**/uiDesigner.xml\r\n.idea/**/dbnavigator.xml\r\n\r\n# Gradle\r\n.idea/**/gradle.xml\r\n.idea/**/libraries\r\n\r\n# CMake\r\ncmake-build-*/\r\n\r\n# Mongo Explorer plugin\r\n.idea/**/mongoSettings.xml\r\n\r\n# File-based project format\r\n*.iws\r\n\r\n# IntelliJ\r\nout/\r\n\r\n# mpeltonen/sbt-idea plugin\r\n.idea_modules/\r\n\r\n# JIRA plugin\r\natlassian-ide-plugin.xml\r\n\r\n# Cursive Clojure plugin\r\n.idea/replstate.xml\r\n\r\n# Crashlytics plugin (for Android Studio and IntelliJ)\r\ncom_crashlytics_export_strings.xml\r\ncrashlytics.properties\r\ncrashlytics-build.properties\r\nfabric.properties\r\n\r\n# Editor-based Rest Client\r\n.idea/httpRequests\r\n\r\n\r\n#### IronOS project specific files ####\r\n\r\n# Binaries\r\nsource/Hexfile/\r\nsource/Objects/\r\nBUILDS/\r\n\r\n# Autogenerated\r\nsource/Core/Gen/\r\nsource/Core/Inc/unit.h\r\n\r\n# Deploy\r\nscripts/ci/artefacts/\r\nscripts/ci/secrets/unencrypted/\r\n\r\n# Generated static local docs\r\nsite/\r\n\r\n# Translations\r\nTranslations/__pycache__/\r\nTranslation Editor/__pycache__/\r\nTranslation Editor/.vscode/\r\n\r\n# misc.\r\nsource/compile_commands.json\r\nsource/.metadata/*\r\n\r\n# TS100 related\r\nTS100/KiCad/TS100.bak\r\nLogo GUI/TS100 Logo Editor/TS100 Logo Editor/obj/\r\nLogo GUI/TS100 Logo Editor/TS100 Logo Editor/bin/\r\n\r\n# Tests/linters/sanitizers\r\nsource/check-style.log\r\n.ash_history\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"source/Core/Drivers/usb-pd\"]\n\tpath = source/Core/Drivers/usb-pd\n\turl = https://github.com/Ralim/usb-pd.git\n"
  },
  {
    "path": "Development Resources/TS100/KiCad/MCU_SubBoard.sch",
    "content": "EESchema Schematic File Version 2\nLIBS:power\nLIBS:device\nLIBS:transistors\nLIBS:conn\nLIBS:linear\nLIBS:regul\nLIBS:74xx\nLIBS:cmos4000\nLIBS:adc-dac\nLIBS:memory\nLIBS:xilinx\nLIBS:microcontrollers\nLIBS:dsp\nLIBS:microchip\nLIBS:analog_switches\nLIBS:motorola\nLIBS:texas\nLIBS:intel\nLIBS:audio\nLIBS:interface\nLIBS:digital-audio\nLIBS:philips\nLIBS:display\nLIBS:cypress\nLIBS:siliconi\nLIBS:opto\nLIBS:atmel\nLIBS:contrib\nLIBS:valves\nLIBS:stm32\nLIBS:mma8652fc\nLIBS:switches\nLIBS:TS100-cache\nEELAYER 25 0\nEELAYER END\n$Descr A4 11693 8268\nencoding utf-8\nSheet 2 2\nTitle \"TS100 Soldering Iron Schematic\"\nDate \"\"\nRev \"2.46\"\nComp \"\"\nComment1 \"\"\nComment2 \"\"\nComment3 \"Converted by Ben V. Brown\"\nComment4 \"KiCad port of published schematic\"\n$EndDescr\n$Comp\nL STM32F103T8Ux U4\nU 1 1 591D59BB\nP 5600 3550\nF 0 \"U4\" H 3200 4675 50  0000 L BNN\nF 1 \"STM32F103T8Ux\" H 8000 4675 50  0000 R BNN\nF 2 \"Housings_DFN_QFN:QFN-36-1EP_6x6mm_Pitch0.5mm\" H 8000 4625 50  0001 R TNN\nF 3 \"\" H 5600 3550 50  0001 C CNN\nF 4 \"-\" H 5600 3550 60  0001 C CNN \"bom_partno\"\n\t1    5600 3550\n\t1    0    0    -1  \n$EndComp\n$Comp\nL GND #PWR206\nU 1 1 591D5AD3\nP 5600 4850\nF 0 \"#PWR206\" H 5600 4600 50  0001 C CNN\nF 1 \"GND\" H 5600 4700 50  0000 C CNN\nF 2 \"\" H 5600 4850 50  0001 C CNN\nF 3 \"\" H 5600 4850 50  0001 C CNN\n\t1    5600 4850\n\t1    0    0    -1  \n$EndComp\n$Comp\nL C C30\nU 1 1 591D5BA8\nP 1450 4700\nF 0 \"C30\" H 1475 4800 50  0000 L CNN\nF 1 \"103\" H 1475 4600 50  0000 L CNN\nF 2 \"\" H 1488 4550 50  0001 C CNN\nF 3 \"\" H 1450 4700 50  0001 C CNN\n\t1    1450 4700\n\t1    0    0    -1  \n$EndComp\n$Comp\nL R R23\nU 1 1 591D5BDF\nP 1700 4700\nF 0 \"R23\" V 1780 4700 50  0000 C CNN\nF 1 \"15K\" V 1700 4700 50  0000 C CNN\nF 2 \"\" V 1630 4700 50  0001 C CNN\nF 3 \"\" H 1700 4700 50  0001 C CNN\n\t1    1700 4700\n\t1    0    0    -1  \n$EndComp\nWire Wire Line\n\t5800 4850 5800 4650\nWire Wire Line\n\t5600 4850 5600 4650\nWire Wire Line\n\t5700 4650 5700 4850\nConnection ~ 5700 4850\nWire Wire Line\n\t5500 4850 5500 4650\nConnection ~ 5600 4850\nWire Wire Line\n\t5400 4850 5400 4650\nConnection ~ 5500 4850\nWire Wire Line\n\t3100 2950 1350 2950\nWire Wire Line\n\t1350 2950 1350 4850\nConnection ~ 5400 4850\nWire Wire Line\n\t1450 4550 1450 3550\nWire Wire Line\n\t1450 3550 3100 3550\nWire Wire Line\n\t1350 4850 9000 4850\nConnection ~ 1450 4850\nText HLabel 8100 4050 2    60   Input ~ 0\nSWDIO\nText HLabel 8100 4150 2    60   Input ~ 0\nSWCLK\nText HLabel 8100 3850 2    60   Input ~ 0\nUSB_D-\nText HLabel 8100 3950 2    60   Input ~ 0\nUSB_D+\nWire Wire Line\n\t1700 4550 1700 3750\nWire Wire Line\n\t1700 3750 3100 3750\nConnection ~ 1700 4850\nText HLabel 8100 3650 2    60   Input ~ 0\nK1\nText HLabel 8100 3550 2    60   Input ~ 0\nnCR\nText HLabel 9000 3450 2    60   Input ~ 0\nTMP36\nWire Wire Line\n\t5400 2350 5700 2350\nConnection ~ 5500 2350\nConnection ~ 5600 2350\n$Comp\nL VDD #PWR205\nU 1 1 591D5F85\nP 5550 2350\nF 0 \"#PWR205\" H 5550 2200 50  0001 C CNN\nF 1 \"VDD\" H 5550 2500 50  0000 C CNN\nF 2 \"\" H 5550 2350 50  0001 C CNN\nF 3 \"\" H 5550 2350 50  0001 C CNN\n\t1    5550 2350\n\t1    0    0    -1  \n$EndComp\nConnection ~ 5550 2350\nText HLabel 8100 3350 2    60   Input ~ 0\nK2\n$Comp\nL C C29\nU 1 1 591D61F5\nP 9000 4700\nF 0 \"C29\" H 9025 4800 50  0000 L CNN\nF 1 \"103\" H 9025 4600 50  0000 L CNN\nF 2 \"\" H 9038 4550 50  0001 C CNN\nF 3 \"\" H 9000 4700 50  0001 C CNN\n\t1    9000 4700\n\t1    0    0    -1  \n$EndComp\nConnection ~ 5800 4850\nWire Wire Line\n\t9000 4550 9000 3450\nWire Wire Line\n\t9000 3450 8100 3450\nText HLabel 3100 4150 0    60   Input ~ 0\nSCL\nText HLabel 3100 4250 0    60   Input ~ 0\nSDA\nText HLabel 3100 3950 0    60   Input ~ 0\nPo\nText HLabel 3100 3650 0    60   Input ~ 0\nVb\n$Comp\nL R R25\nU 1 1 591D65E3\nP 1950 2600\nF 0 \"R25\" V 2030 2600 50  0000 C CNN\nF 1 \"15K\" V 1950 2600 50  0000 C CNN\nF 2 \"\" V 1880 2600 50  0001 C CNN\nF 3 \"\" H 1950 2600 50  0001 C CNN\n\t1    1950 2600\n\t1    0    0    -1  \n$EndComp\n$Comp\nL C C17\nU 1 1 591D663E\nP 1950 4700\nF 0 \"C17\" H 1975 4800 50  0000 L CNN\nF 1 \"105\" H 1975 4600 50  0000 L CNN\nF 2 \"\" H 1988 4550 50  0001 C CNN\nF 3 \"\" H 1950 4700 50  0001 C CNN\n\t1    1950 4700\n\t1    0    0    -1  \n$EndComp\nWire Wire Line\n\t1950 4550 1950 2750\nWire Wire Line\n\t1950 2750 3100 2750\n$Comp\nL VDD #PWR201\nU 1 1 591D66BF\nP 1950 2450\nF 0 \"#PWR201\" H 1950 2300 50  0001 C CNN\nF 1 \"VDD\" H 1950 2600 50  0000 C CNN\nF 2 \"\" H 1950 2450 50  0001 C CNN\nF 3 \"\" H 1950 2450 50  0001 C CNN\n\t1    1950 2450\n\t1    0    0    -1  \n$EndComp\n$Comp\nL MMA8652FC U3\nU 1 1 591D6A94\nP 3750 6350\nF 0 \"U3\" H 3400 5950 60  0000 C CNN\nF 1 \"MMA8652FC\" H 3950 5950 60  0000 C CNN\nF 2 \"\" H 3550 6100 60  0001 C CNN\nF 3 \"\" H 3550 6100 60  0000 C CNN\n\t1    3750 6350\n\t1    0    0    -1  \n$EndComp\n$Comp\nL GND #PWR204\nU 1 1 591D6B9E\nP 4650 6700\nF 0 \"#PWR204\" H 4650 6450 50  0001 C CNN\nF 1 \"GND\" H 4650 6550 50  0000 C CNN\nF 2 \"\" H 4650 6700 50  0001 C CNN\nF 3 \"\" H 4650 6700 50  0001 C CNN\n\t1    4650 6700\n\t1    0    0    -1  \n$EndComp\nWire Wire Line\n\t4500 6600 4650 6600\nWire Wire Line\n\t4650 6400 4650 6700\nWire Wire Line\n\t4500 6400 4650 6400\nConnection ~ 4650 6600\nWire Wire Line\n\t4500 6500 4650 6500\nConnection ~ 4650 6500\n$Comp\nL VDD #PWR203\nU 1 1 591D6DA1\nP 4650 5900\nF 0 \"#PWR203\" H 4650 5750 50  0001 C CNN\nF 1 \"VDD\" H 4650 6050 50  0000 C CNN\nF 2 \"\" H 4650 5900 50  0001 C CNN\nF 3 \"\" H 4650 5900 50  0001 C CNN\n\t1    4650 5900\n\t1    0    0    -1  \n$EndComp\nWire Wire Line\n\t4650 5900 4650 6200\nWire Wire Line\n\t4650 6100 4500 6100\nWire Wire Line\n\t4650 6200 4500 6200\nConnection ~ 4650 6100\n$Comp\nL C C22\nU 1 1 591D70DB\nP 2250 6550\nF 0 \"C22\" H 2275 6650 50  0000 L CNN\nF 1 \"104\" H 2275 6450 50  0000 L CNN\nF 2 \"\" H 2288 6400 50  0001 C CNN\nF 3 \"\" H 2250 6550 50  0001 C CNN\n\t1    2250 6550\n\t1    0    0    -1  \n$EndComp\nText HLabel 3050 6350 0    60   Input ~ 0\nSDA\nText HLabel 3050 6250 0    60   Input ~ 0\nSCL\nWire Wire Line\n\t2250 6400 2250 6100\nWire Wire Line\n\t2250 6100 3050 6100\n$Comp\nL GND #PWR202\nU 1 1 591D735E\nP 2250 6700\nF 0 \"#PWR202\" H 2250 6450 50  0001 C CNN\nF 1 \"GND\" H 2250 6550 50  0000 C CNN\nF 2 \"\" H 2250 6700 50  0001 C CNN\nF 3 \"\" H 2250 6700 50  0001 C CNN\n\t1    2250 6700\n\t1    0    0    -1  \n$EndComp\n$Comp\nL C C18\nU 1 1 591D7528\nP 8200 5800\nF 0 \"C18\" H 8225 5900 50  0000 L CNN\nF 1 \"105\" H 8225 5700 50  0000 L CNN\nF 2 \"\" H 8238 5650 50  0001 C CNN\nF 3 \"\" H 8200 5800 50  0001 C CNN\n\t1    8200 5800\n\t1    0    0    -1  \n$EndComp\n$Comp\nL C C19\nU 1 1 591D75B9\nP 8500 5800\nF 0 \"C19\" H 8525 5900 50  0000 L CNN\nF 1 \"105\" H 8525 5700 50  0000 L CNN\nF 2 \"\" H 8538 5650 50  0001 C CNN\nF 3 \"\" H 8500 5800 50  0001 C CNN\n\t1    8500 5800\n\t1    0    0    -1  \n$EndComp\n$Comp\nL C C20\nU 1 1 591D75EF\nP 8800 5800\nF 0 \"C20\" H 8825 5900 50  0000 L CNN\nF 1 \"105\" H 8825 5700 50  0000 L CNN\nF 2 \"\" H 8838 5650 50  0001 C CNN\nF 3 \"\" H 8800 5800 50  0001 C CNN\n\t1    8800 5800\n\t1    0    0    -1  \n$EndComp\n$Comp\nL C C25\nU 1 1 591D7626\nP 9100 5800\nF 0 \"C25\" H 9125 5900 50  0000 L CNN\nF 1 \"104\" H 9125 5700 50  0000 L CNN\nF 2 \"\" H 9138 5650 50  0001 C CNN\nF 3 \"\" H 9100 5800 50  0001 C CNN\n\t1    9100 5800\n\t1    0    0    -1  \n$EndComp\n$Comp\nL C C21\nU 1 1 591D7668\nP 9400 5800\nF 0 \"C21\" H 9425 5900 50  0000 L CNN\nF 1 \"105\" H 9425 5700 50  0000 L CNN\nF 2 \"\" H 9438 5650 50  0001 C CNN\nF 3 \"\" H 9400 5800 50  0001 C CNN\n\t1    9400 5800\n\t1    0    0    -1  \n$EndComp\nWire Wire Line\n\t8200 5950 9400 5950\nConnection ~ 8500 5950\nConnection ~ 8800 5950\nConnection ~ 9100 5950\nWire Wire Line\n\t8200 5650 9400 5650\nConnection ~ 9100 5650\nConnection ~ 8800 5650\nConnection ~ 8500 5650\n$Comp\nL GND #PWR208\nU 1 1 591D78AD\nP 8800 5950\nF 0 \"#PWR208\" H 8800 5700 50  0001 C CNN\nF 1 \"GND\" H 8800 5800 50  0000 C CNN\nF 2 \"\" H 8800 5950 50  0001 C CNN\nF 3 \"\" H 8800 5950 50  0001 C CNN\n\t1    8800 5950\n\t1    0    0    -1  \n$EndComp\n$Comp\nL VDD #PWR207\nU 1 1 591D78DF\nP 8800 5650\nF 0 \"#PWR207\" H 8800 5500 50  0001 C CNN\nF 1 \"VDD\" H 8800 5800 50  0000 C CNN\nF 2 \"\" H 8800 5650 50  0001 C CNN\nF 3 \"\" H 8800 5650 50  0001 C CNN\n\t1    8800 5650\n\t1    0    0    -1  \n$EndComp\nText Label 3050 6600 2    60   ~ 0\nACC_INT2\nText Label 3050 6500 2    60   ~ 0\nACC_INT1\nText Label 3100 3850 2    60   ~ 0\nACC_INT2\nText Label 3100 4050 2    60   ~ 0\nACC_INT1\n$EndSCHEMATC\n"
  },
  {
    "path": "Development Resources/TS100/KiCad/TS100.pro",
    "content": "update=18/05/2017 9:29:06 PM\nversion=1\nlast_client=kicad\n[pcbnew]\nversion=1\nLastNetListRead=\nUseCmpFile=1\nPadDrill=0.600000000000\nPadDrillOvalY=0.600000000000\nPadSizeH=1.500000000000\nPadSizeV=1.500000000000\nPcbTextSizeV=1.500000000000\nPcbTextSizeH=1.500000000000\nPcbTextThickness=0.300000000000\nModuleTextSizeV=1.000000000000\nModuleTextSizeH=1.000000000000\nModuleTextSizeThickness=0.150000000000\nSolderMaskClearance=0.000000000000\nSolderMaskMinWidth=0.000000000000\nDrawSegmentWidth=0.200000000000\nBoardOutlineThickness=0.100000000000\nModuleOutlineThickness=0.150000000000\n[cvpcb]\nversion=1\nNetIExt=net\n[general]\nversion=1\n[eeschema]\nversion=1\nLibDir=\n[eeschema/libraries]\nLibName1=power\nLibName2=device\nLibName3=transistors\nLibName4=conn\nLibName5=linear\nLibName6=regul\nLibName7=74xx\nLibName8=cmos4000\nLibName9=adc-dac\nLibName10=memory\nLibName11=xilinx\nLibName12=microcontrollers\nLibName13=dsp\nLibName14=microchip\nLibName15=analog_switches\nLibName16=motorola\nLibName17=texas\nLibName18=intel\nLibName19=audio\nLibName20=interface\nLibName21=digital-audio\nLibName22=philips\nLibName23=display\nLibName24=cypress\nLibName25=siliconi\nLibName26=opto\nLibName27=atmel\nLibName28=contrib\nLibName29=valves\nLibName30=stm32\nLibName31=mma8652fc\nLibName32=switches\n"
  },
  {
    "path": "Development Resources/TS100/KiCad/TS100.sch",
    "content": "EESchema Schematic File Version 2\nLIBS:power\nLIBS:device\nLIBS:transistors\nLIBS:conn\nLIBS:linear\nLIBS:regul\nLIBS:74xx\nLIBS:cmos4000\nLIBS:adc-dac\nLIBS:memory\nLIBS:xilinx\nLIBS:microcontrollers\nLIBS:dsp\nLIBS:microchip\nLIBS:analog_switches\nLIBS:motorola\nLIBS:texas\nLIBS:intel\nLIBS:audio\nLIBS:interface\nLIBS:digital-audio\nLIBS:philips\nLIBS:display\nLIBS:cypress\nLIBS:siliconi\nLIBS:opto\nLIBS:atmel\nLIBS:contrib\nLIBS:valves\nLIBS:stm32\nLIBS:mma8652fc\nLIBS:switches\nLIBS:TS100-cache\nEELAYER 25 0\nEELAYER END\n$Descr A4 11693 8268\nencoding utf-8\nSheet 1 2\nTitle \"TS100 Soldering Iron Schematic\"\nDate \"2017-05-18\"\nRev \"2.46\"\nComp \"\"\nComment1 \"\"\nComment2 \"\"\nComment3 \"Converted by Ben V. Brown\"\nComment4 \"KiCad port of published schematic\"\n$EndDescr\n$Sheet\nS 1450 1000 1450 1850\nU 591D5966\nF0 \"STM32 & Accel Sub Board\" 60\nF1 \"MCU_SubBoard.sch\" 60\nF2 \"SWDIO\" I R 2900 1100 60 \nF3 \"SWCLK\" I R 2900 1200 60 \nF4 \"USB_D-\" I R 2900 1350 60 \nF5 \"USB_D+\" I R 2900 1450 60 \nF6 \"K1\" I R 2900 1650 60 \nF7 \"nCR\" I R 2900 2150 60 \nF8 \"TMP36\" I R 2900 2250 60 \nF9 \"K2\" I R 2900 1750 60 \nF10 \"SCL\" I R 2900 2550 60 \nF11 \"SDA\" I R 2900 2650 60 \nF12 \"Po\" I R 2900 2050 60 \nF13 \"Vb\" I R 2900 1950 60 \n$EndSheet\n$Comp\nL BARREL_JACK J101\nU 1 1 591D8B75\nP 1600 3600\nF 0 \"J101\" H 1600 3795 50  0000 C CNN\nF 1 \"BARREL_JACK\" H 1600 3445 50  0000 C CNN\nF 2 \"\" H 1600 3600 50  0001 C CNN\nF 3 \"\" H 1600 3600 50  0001 C CNN\n\t1    1600 3600\n\t1    0    0    -1  \n$EndComp\nText Label 1900 3500 0    60   ~ 0\nVIN\n$Comp\nL GND #PWR103\nU 1 1 591D8F24\nP 2000 3800\nF 0 \"#PWR103\" H 2000 3550 50  0001 C CNN\nF 1 \"GND\" H 2000 3650 50  0000 C CNN\nF 2 \"\" H 2000 3800 50  0001 C CNN\nF 3 \"\" H 2000 3800 50  0001 C CNN\n\t1    2000 3800\n\t1    0    0    -1  \n$EndComp\nWire Wire Line\n\t1900 3600 2000 3600\nWire Wire Line\n\t2000 3600 2000 3800\nWire Wire Line\n\t1900 3700 2000 3700\nConnection ~ 2000 3700\n$Comp\nL SW_Push SW1\nU 1 1 591D9BC6\nP 1400 4550\nF 0 \"SW1\" H 1450 4650 50  0000 L CNN\nF 1 \"SW_Push\" H 1400 4490 50  0000 C CNN\nF 2 \"\" H 1400 4750 50  0001 C CNN\nF 3 \"\" H 1400 4750 50  0001 C CNN\nF 4 \"-\" H 1400 4550 60  0001 C CNN \"bom_partno\"\n\t1    1400 4550\n\t0    1    1    0   \n$EndComp\n$Comp\nL SW_Push SW101\nU 1 1 591DA371\nP 1700 4550\nF 0 \"SW101\" H 1750 4650 50  0000 L CNN\nF 1 \"SW_Push\" H 1700 4490 50  0000 C CNN\nF 2 \"\" H 1700 4750 50  0001 C CNN\nF 3 \"\" H 1700 4750 50  0001 C CNN\n\t1    1700 4550\n\t0    1    1    0   \n$EndComp\n$Comp\nL GND #PWR102\nU 1 1 591DA3DA\nP 1700 4750\nF 0 \"#PWR102\" H 1700 4500 50  0001 C CNN\nF 1 \"GND\" H 1700 4600 50  0000 C CNN\nF 2 \"\" H 1700 4750 50  0001 C CNN\nF 3 \"\" H 1700 4750 50  0001 C CNN\n\t1    1700 4750\n\t1    0    0    -1  \n$EndComp\n$Comp\nL GND #PWR101\nU 1 1 591DA436\nP 1400 4750\nF 0 \"#PWR101\" H 1400 4500 50  0001 C CNN\nF 1 \"GND\" H 1400 4600 50  0000 C CNN\nF 2 \"\" H 1400 4750 50  0001 C CNN\nF 3 \"\" H 1400 4750 50  0001 C CNN\n\t1    1400 4750\n\t1    0    0    -1  \n$EndComp\nText Label 1400 4350 0    60   ~ 0\nK1\nText Label 1700 4350 0    60   ~ 0\nK2\nText Label 2900 1750 0    60   ~ 0\nK2\nText Label 2900 1650 0    60   ~ 0\nK1\n$EndSCHEMATC\n"
  },
  {
    "path": "Development Resources/TS100/TS100.ioc",
    "content": "#MicroXplorer Configuration settings - do not modify\nADC1.Channel-0\\#ChannelRegularConversion=ADC_CHANNEL_7\nADC1.Channel-1\\#ChannelRegularConversion=ADC_CHANNEL_9\nADC1.Channel-2\\#ChannelInjectedConversion=ADC_CHANNEL_8\nADC1.Channel-3\\#ChannelInjectedConversion=ADC_CHANNEL_8\nADC1.Channel-4\\#ChannelInjectedConversion=ADC_CHANNEL_8\nADC1.Channel-5\\#ChannelInjectedConversion=ADC_CHANNEL_8\nADC1.ContinuousConvMode=ENABLE\nADC1.DataAlign=ADC_DATAALIGN_RIGHT\nADC1.DiscontinuousConvMode=DISABLE\nADC1.EnableAnalogWatchDog=false\nADC1.EnableRegularConversion=ENABLE\nADC1.ExternalTrigConv=ADC_SOFTWARE_START\nADC1.ExternalTrigInjecConv=ADC_EXTERNALTRIGINJECCONV_T2_CC1\nADC1.IPParameters=Rank-0\\#ChannelRegularConversion,Channel-0\\#ChannelRegularConversion,SamplingTime-0\\#ChannelRegularConversion,NbrOfConversionFlag,DataAlign,ScanConvMode,ContinuousConvMode,DiscontinuousConvMode,EnableRegularConversion,NbrOfConversion,ExternalTrigConv,InjNumberOfConversion,EnableAnalogWatchDog,Rank-1\\#ChannelRegularConversion,Channel-1\\#ChannelRegularConversion,SamplingTime-1\\#ChannelRegularConversion,master,Rank-2\\#ChannelInjectedConversion,Channel-2\\#ChannelInjectedConversion,SamplingTime-2\\#ChannelInjectedConversion,InjectedOffset-2\\#ChannelInjectedConversion,Rank-3\\#ChannelInjectedConversion,Channel-3\\#ChannelInjectedConversion,SamplingTime-3\\#ChannelInjectedConversion,InjectedOffset-3\\#ChannelInjectedConversion,Rank-4\\#ChannelInjectedConversion,Channel-4\\#ChannelInjectedConversion,SamplingTime-4\\#ChannelInjectedConversion,InjectedOffset-4\\#ChannelInjectedConversion,Rank-5\\#ChannelInjectedConversion,Channel-5\\#ChannelInjectedConversion,SamplingTime-5\\#ChannelInjectedConversion,InjectedOffset-5\\#ChannelInjectedConversion,ExternalTrigInjecConv,InjectedConvMode,Mode\nADC1.InjNumberOfConversion=4\nADC1.InjectedConvMode=None\nADC1.InjectedOffset-2\\#ChannelInjectedConversion=0\nADC1.InjectedOffset-3\\#ChannelInjectedConversion=0\nADC1.InjectedOffset-4\\#ChannelInjectedConversion=0\nADC1.InjectedOffset-5\\#ChannelInjectedConversion=0\nADC1.Mode=ADC_DUALMODE_REGSIMULT_INJECSIMULT\nADC1.NbrOfConversion=2\nADC1.NbrOfConversionFlag=1\nADC1.Rank-0\\#ChannelRegularConversion=1\nADC1.Rank-1\\#ChannelRegularConversion=2\nADC1.Rank-2\\#ChannelInjectedConversion=1\nADC1.Rank-3\\#ChannelInjectedConversion=2\nADC1.Rank-4\\#ChannelInjectedConversion=3\nADC1.Rank-5\\#ChannelInjectedConversion=4\nADC1.SamplingTime-0\\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5\nADC1.SamplingTime-1\\#ChannelRegularConversion=ADC_SAMPLETIME_239CYCLES_5\nADC1.SamplingTime-2\\#ChannelInjectedConversion=ADC_SAMPLETIME_239CYCLES_5\nADC1.SamplingTime-3\\#ChannelInjectedConversion=ADC_SAMPLETIME_71CYCLES_5\nADC1.SamplingTime-4\\#ChannelInjectedConversion=ADC_SAMPLETIME_239CYCLES_5\nADC1.SamplingTime-5\\#ChannelInjectedConversion=ADC_SAMPLETIME_71CYCLES_5\nADC1.ScanConvMode=ADC_SCAN_ENABLE\nADC1.master=1\nADC2.Channel-0\\#ChannelRegularConversion=ADC_CHANNEL_8\nADC2.Channel-1\\#ChannelInjectedConversion=ADC_CHANNEL_8\nADC2.Channel-2\\#ChannelInjectedConversion=ADC_CHANNEL_8\nADC2.Channel-3\\#ChannelInjectedConversion=ADC_CHANNEL_8\nADC2.Channel-4\\#ChannelInjectedConversion=ADC_CHANNEL_8\nADC2.ContinuousConvMode=DISABLE\nADC2.DataAlign=ADC_DATAALIGN_RIGHT\nADC2.DiscontinuousConvMode=DISABLE\nADC2.EnableAnalogWatchDog=false\nADC2.EnableRegularConversion=ENABLE\nADC2.IPParameters=Rank-0\\#ChannelRegularConversion,Channel-0\\#ChannelRegularConversion,SamplingTime-0\\#ChannelRegularConversion,NbrOfConversionFlag,Rank-1\\#ChannelInjectedConversion,Channel-1\\#ChannelInjectedConversion,SamplingTime-1\\#ChannelInjectedConversion,InjectedOffset-1\\#ChannelInjectedConversion,Rank-2\\#ChannelInjectedConversion,Channel-2\\#ChannelInjectedConversion,SamplingTime-2\\#ChannelInjectedConversion,InjectedOffset-2\\#ChannelInjectedConversion,Rank-3\\#ChannelInjectedConversion,Channel-3\\#ChannelInjectedConversion,SamplingTime-3\\#ChannelInjectedConversion,InjectedOffset-3\\#ChannelInjectedConversion,Rank-4\\#ChannelInjectedConversion,Channel-4\\#ChannelInjectedConversion,SamplingTime-4\\#ChannelInjectedConversion,InjectedOffset-4\\#ChannelInjectedConversion,InjNumberOfConversion,Mode,DataAlign,ScanConvMode,ContinuousConvMode,DiscontinuousConvMode,EnableRegularConversion,NbrOfConversion,InjectedConvMode,EnableAnalogWatchDog\nADC2.InjNumberOfConversion=4\nADC2.InjectedConvMode=None\nADC2.InjectedOffset-1\\#ChannelInjectedConversion=0\nADC2.InjectedOffset-2\\#ChannelInjectedConversion=0\nADC2.InjectedOffset-3\\#ChannelInjectedConversion=0\nADC2.InjectedOffset-4\\#ChannelInjectedConversion=0\nADC2.Mode=ADC_DUALMODE_REGSIMULT_INJECSIMULT\nADC2.NbrOfConversion=1\nADC2.NbrOfConversionFlag=1\nADC2.Rank-0\\#ChannelRegularConversion=1\nADC2.Rank-1\\#ChannelInjectedConversion=1\nADC2.Rank-2\\#ChannelInjectedConversion=2\nADC2.Rank-3\\#ChannelInjectedConversion=3\nADC2.Rank-4\\#ChannelInjectedConversion=4\nADC2.SamplingTime-0\\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5\nADC2.SamplingTime-1\\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5\nADC2.SamplingTime-2\\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5\nADC2.SamplingTime-3\\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5\nADC2.SamplingTime-4\\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5\nADC2.ScanConvMode=ADC_SCAN_ENABLE\nDma.ADC1.2.Direction=DMA_PERIPH_TO_MEMORY\nDma.ADC1.2.Instance=DMA1_Channel1\nDma.ADC1.2.MemDataAlignment=DMA_MDATAALIGN_HALFWORD\nDma.ADC1.2.MemInc=DMA_MINC_ENABLE\nDma.ADC1.2.Mode=DMA_CIRCULAR\nDma.ADC1.2.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD\nDma.ADC1.2.PeriphInc=DMA_PINC_DISABLE\nDma.ADC1.2.Priority=DMA_PRIORITY_VERY_HIGH\nDma.ADC1.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority\nDma.I2C1_RX.0.Direction=DMA_PERIPH_TO_MEMORY\nDma.I2C1_RX.0.Instance=DMA1_Channel7\nDma.I2C1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE\nDma.I2C1_RX.0.MemInc=DMA_MINC_ENABLE\nDma.I2C1_RX.0.Mode=DMA_NORMAL\nDma.I2C1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE\nDma.I2C1_RX.0.PeriphInc=DMA_PINC_DISABLE\nDma.I2C1_RX.0.Priority=DMA_PRIORITY_MEDIUM\nDma.I2C1_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority\nDma.I2C1_TX.1.Direction=DMA_MEMORY_TO_PERIPH\nDma.I2C1_TX.1.Instance=DMA1_Channel6\nDma.I2C1_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE\nDma.I2C1_TX.1.MemInc=DMA_MINC_ENABLE\nDma.I2C1_TX.1.Mode=DMA_NORMAL\nDma.I2C1_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE\nDma.I2C1_TX.1.PeriphInc=DMA_PINC_DISABLE\nDma.I2C1_TX.1.Priority=DMA_PRIORITY_MEDIUM\nDma.I2C1_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority\nDma.Request0=I2C1_RX\nDma.Request1=I2C1_TX\nDma.Request2=ADC1\nDma.RequestsNb=3\nFREERTOS.FootprintOK=true\nFREERTOS.INCLUDE_vTaskDelete=0\nFREERTOS.IPParameters=Tasks01,configTICK_RATE_HZ,configMAX_PRIORITIES,configMINIMAL_STACK_SIZE,configTOTAL_HEAP_SIZE,INCLUDE_vTaskDelete,FootprintOK\nFREERTOS.Tasks01=GUITask,0,512,StartGUITask,Default,NULL,Dynamic,NULL,NULL;PIDTask,0,256,StartPIDTask,Default,NULL,Dynamic,NULL,NULL;ROTTask,-2,256,StartRotationTask,Default,NULL,Dynamic,NULL,NULL\nFREERTOS.configMAX_PRIORITIES=4\nFREERTOS.configMINIMAL_STACK_SIZE=256\nFREERTOS.configTICK_RATE_HZ=100\nFREERTOS.configTOTAL_HEAP_SIZE=10240\nFile.Version=6\nI2C1.DutyCycle=I2C_DUTYCYCLE_2\nI2C1.I2C_Mode=I2C_Fast\nI2C1.IPParameters=I2C_Mode,DutyCycle\nIWDG.IPParameters=Prescaler\nIWDG.Prescaler=IWDG_PRESCALER_256\nKeepUserPlacement=false\nMcu.Family=STM32F1\nMcu.IP0=ADC1\nMcu.IP1=ADC2\nMcu.IP10=TIM3\nMcu.IP2=DMA\nMcu.IP3=FREERTOS\nMcu.IP4=I2C1\nMcu.IP5=IWDG\nMcu.IP6=NVIC\nMcu.IP7=RCC\nMcu.IP8=SYS\nMcu.IP9=TIM2\nMcu.IPNb=11\nMcu.Name=STM32F103T(8-B)Ux\nMcu.Package=VFQFPN36\nMcu.Pin0=PA6\nMcu.Pin1=PA7\nMcu.Pin10=PB5\nMcu.Pin11=PB6\nMcu.Pin12=PB7\nMcu.Pin13=VP_FREERTOS_VS_ENABLE\nMcu.Pin14=VP_IWDG_VS_IWDG\nMcu.Pin15=VP_SYS_VS_tim1\nMcu.Pin16=VP_TIM2_VS_ClockSourceINT\nMcu.Pin17=VP_TIM2_VS_no_output1\nMcu.Pin18=VP_TIM2_VS_no_output3\nMcu.Pin19=VP_TIM3_VS_ClockSourceINT\nMcu.Pin2=PB0\nMcu.Pin20=VP_TIM3_VS_no_output4\nMcu.Pin3=PB1\nMcu.Pin4=PA8\nMcu.Pin5=PA9\nMcu.Pin6=PA13\nMcu.Pin7=PA14\nMcu.Pin8=PB3\nMcu.Pin9=PB4\nMcu.PinsNb=21\nMcu.ThirdPartyNb=0\nMcu.UserConstants=\nMcu.UserName=STM32F103T8Ux\nMxCube.Version=4.26.0\nMxDb.Version=DB.4.0.260\nNVIC.ADC1_2_IRQn=true\\:5\\:0\\:false\\:false\\:true\\:true\\:true\nNVIC.BusFault_IRQn=true\\:0\\:0\\:false\\:false\\:true\\:false\\:true\nNVIC.DMA1_Channel1_IRQn=true\\:5\\:0\\:false\\:false\\:true\\:true\\:true\nNVIC.DMA1_Channel6_IRQn=true\\:5\\:0\\:false\\:false\\:true\\:true\\:true\nNVIC.DMA1_Channel7_IRQn=true\\:5\\:0\\:false\\:false\\:true\\:true\\:true\nNVIC.DebugMonitor_IRQn=true\\:0\\:0\\:false\\:false\\:true\\:false\\:true\nNVIC.HardFault_IRQn=true\\:0\\:0\\:false\\:false\\:true\\:false\\:true\nNVIC.I2C1_ER_IRQn=true\\:5\\:0\\:false\\:false\\:true\\:true\\:true\nNVIC.I2C1_EV_IRQn=true\\:5\\:0\\:false\\:false\\:true\\:true\\:true\nNVIC.MemoryManagement_IRQn=true\\:0\\:0\\:false\\:false\\:true\\:false\\:true\nNVIC.NonMaskableInt_IRQn=true\\:0\\:0\\:false\\:false\\:true\\:false\\:true\nNVIC.PendSV_IRQn=true\\:15\\:0\\:false\\:false\\:false\\:true\\:true\nNVIC.PriorityGroup=NVIC_PRIORITYGROUP_4\nNVIC.SVCall_IRQn=true\\:0\\:0\\:false\\:false\\:false\\:false\\:true\nNVIC.SysTick_IRQn=true\\:15\\:0\\:false\\:false\\:true\\:true\\:true\nNVIC.TIM1_UP_IRQn=true\\:0\\:0\\:false\\:false\\:true\\:false\\:true\nNVIC.TimeBase=TIM1_UP_IRQn\nNVIC.TimeBaseIP=TIM1\nNVIC.UsageFault_IRQn=true\\:0\\:0\\:false\\:false\\:true\\:false\\:true\nPA13.Locked=true\nPA13.Mode=Serial_Wire\nPA13.Signal=SYS_JTMS-SWDIO\nPA14.Locked=true\nPA14.Mode=Serial_Wire\nPA14.Signal=SYS_JTCK-SWCLK\nPA6.GPIOParameters=GPIO_Label\nPA6.GPIO_Label=KEY_B\nPA6.Locked=true\nPA6.Signal=GPIO_Input\nPA7.GPIOParameters=GPIO_Label\nPA7.GPIO_Label=TMP36_INPUT\nPA7.Locked=true\nPA7.Signal=ADCx_IN7\nPA8.GPIOParameters=GPIO_Label\nPA8.GPIO_Label=OLED_RESET\nPA8.Locked=true\nPA8.Signal=GPIO_Output\nPA9.GPIOParameters=GPIO_Label\nPA9.GPIO_Label=KEY_A\nPA9.Locked=true\nPA9.Signal=GPIO_Input\nPB0.GPIOParameters=GPIO_Label\nPB0.GPIO_Label=TIP_TEMP\nPB0.Locked=true\nPB0.Signal=ADCx_IN8\nPB1.GPIOParameters=GPIO_Label\nPB1.GPIO_Label=VIN\nPB1.Locked=true\nPB1.Signal=ADCx_IN9\nPB3.GPIOParameters=GPIO_Label\nPB3.GPIO_Label=INT_Orientation\nPB3.Locked=true\nPB3.Signal=GPXTI3\nPB4.GPIOParameters=GPIO_Label\nPB4.GPIO_Label=PWM Out\nPB4.Locked=true\nPB4.Signal=S_TIM3_CH1\nPB5.GPIOParameters=GPIO_Label\nPB5.GPIO_Label=INT_Movement\nPB5.Locked=true\nPB5.Signal=GPXTI5\nPB6.GPIOParameters=GPIO_Label\nPB6.GPIO_Label=SCL\nPB6.Mode=I2C\nPB6.Signal=I2C1_SCL\nPB7.GPIOParameters=GPIO_Label\nPB7.GPIO_Label=SDA\nPB7.Mode=I2C\nPB7.Signal=I2C1_SDA\nPCC.Checker=false\nPCC.Line=STM32F103\nPCC.MCU=STM32F103T(8-B)Ux\nPCC.PartNumber=STM32F103T8Ux\nPCC.Seq0=0\nPCC.Series=STM32F1\nPCC.Temperature=25\nPCC.Vdd=3.3\nPinOutPanel.RotationAngle=0\nProjectManager.AskForMigrate=true\nProjectManager.BackupPrevious=false\nProjectManager.CompilerOptimize=3\nProjectManager.ComputerToolchain=false\nProjectManager.CoupleFile=false\nProjectManager.CustomerFirmwarePackage=\nProjectManager.DefaultFWLocation=true\nProjectManager.DeletePrevious=true\nProjectManager.DeviceId=STM32F103T8Ux\nProjectManager.FirmwarePackage=STM32Cube FW_F1 V1.6.1\nProjectManager.FreePins=true\nProjectManager.HalAssertFull=false\nProjectManager.HeapSize=0x200\nProjectManager.KeepUserCode=true\nProjectManager.LastFirmware=true\nProjectManager.LibraryCopy=1\nProjectManager.MainLocation=Src\nProjectManager.PreviousToolchain=TrueSTUDIO\nProjectManager.ProjectBuild=false\nProjectManager.ProjectFileName=TS100.ioc\nProjectManager.ProjectName=TS100\nProjectManager.StackSize=0x400\nProjectManager.TargetToolchain=TrueSTUDIO\nProjectManager.ToolChainLocation=\nProjectManager.UnderRoot=true\nProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-MX_I2C1_Init-I2C1-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-SystemClock_Config-RCC-false-HAL-true,6-MX_TIM3_Init-TIM3-false-HAL-true,7-MX_IWDG_Init-IWDG-false-HAL-true,8-MX_TIM2_Init-TIM2-false-HAL-true,9-MX_ADC2_Init-ADC2-false-HAL-true\nRCC.ADCFreqValue=8000000\nRCC.ADCPresc=RCC_ADCPCLK2_DIV8\nRCC.AHBFreq_Value=64000000\nRCC.APB1CLKDivider=RCC_HCLK_DIV16\nRCC.APB1Freq_Value=4000000\nRCC.APB1TimFreq_Value=8000000\nRCC.APB2Freq_Value=64000000\nRCC.APB2TimFreq_Value=64000000\nRCC.FCLKCortexFreq_Value=64000000\nRCC.FamilyName=M\nRCC.HCLKFreq_Value=64000000\nRCC.IPParameters=ADCFreqValue,ADCPresc,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,USBPrescaler\nRCC.MCOFreq_Value=64000000\nRCC.PLLCLKFreq_Value=64000000\nRCC.PLLMCOFreq_Value=32000000\nRCC.PLLMUL=RCC_PLL_MUL16\nRCC.PLLSourceVirtual=RCC_PLLSOURCE_HSI_DIV2\nRCC.SYSCLKFreq_VALUE=64000000\nRCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK\nRCC.TimSysFreq_Value=64000000\nRCC.USBFreq_Value=42666666.666666664\nRCC.USBPrescaler=RCC_USBCLKSOURCE_PLL_DIV1_5\nSH.ADCx_IN7.0=ADC1_IN7,IN7\nSH.ADCx_IN7.ConfNb=1\nSH.ADCx_IN8.0=ADC1_IN8,IN8\nSH.ADCx_IN8.1=ADC2_IN8,IN8\nSH.ADCx_IN8.ConfNb=2\nSH.ADCx_IN9.0=ADC2_IN9\nSH.ADCx_IN9.1=ADC1_IN9,IN9\nSH.ADCx_IN9.ConfNb=2\nSH.GPXTI3.0=GPIO_EXTI3\nSH.GPXTI3.ConfNb=1\nSH.GPXTI5.0=GPIO_EXTI5\nSH.GPXTI5.ConfNb=1\nSH.S_TIM3_CH1.0=TIM3_CH1,PWM Generation1 CH1\nSH.S_TIM3_CH1.ConfNb=1\nTIM2.Channel-PWM\\ Generation1\\ No\\ Output=TIM_CHANNEL_1\nTIM2.Channel-PWM\\ Generation3\\ No\\ Output=TIM_CHANNEL_3\nTIM2.IPParameters=Channel-PWM Generation1 No Output,Channel-PWM Generation3 No Output\nTIM3.Channel-Output\\ Compare4\\ No\\ Output=TIM_CHANNEL_4\nTIM3.Channel-PWM\\ Generation1\\ CH1=TIM_CHANNEL_1\nTIM3.ClockDivision=TIM_CLOCKDIVISION_DIV4\nTIM3.IPParameters=Channel-PWM Generation1 CH1,OCFastMode_PWM-PWM Generation1 CH1,ClockDivision,Prescaler,Period,Channel-Output Compare4 No Output,OCMode_4,Pulse-Output Compare4 No Output\nTIM3.OCFastMode_PWM-PWM\\ Generation1\\ CH1=TIM_OCFAST_ENABLE\nTIM3.OCMode_4=TIM_OCMODE_ACTIVE\nTIM3.Period=65535\nTIM3.Prescaler=2000\nTIM3.Pulse-Output\\ Compare4\\ No\\ Output=65000\nVP_FREERTOS_VS_ENABLE.Mode=Enabled\nVP_FREERTOS_VS_ENABLE.Signal=FREERTOS_VS_ENABLE\nVP_IWDG_VS_IWDG.Mode=IWDG_Activate\nVP_IWDG_VS_IWDG.Signal=IWDG_VS_IWDG\nVP_SYS_VS_tim1.Mode=TIM1\nVP_SYS_VS_tim1.Signal=SYS_VS_tim1\nVP_TIM2_VS_ClockSourceINT.Mode=Internal\nVP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT\nVP_TIM2_VS_no_output1.Mode=PWM Generation1 No Output\nVP_TIM2_VS_no_output1.Signal=TIM2_VS_no_output1\nVP_TIM2_VS_no_output3.Mode=PWM Generation3 No Output\nVP_TIM2_VS_no_output3.Signal=TIM2_VS_no_output3\nVP_TIM3_VS_ClockSourceINT.Mode=Internal\nVP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT\nVP_TIM3_VS_no_output4.Mode=Output Compare4 No Output\nVP_TIM3_VS_no_output4.Signal=TIM3_VS_no_output4\nboard=TS100\n"
  },
  {
    "path": "Development Resources/TS80/TS80-Bootloader.hex",
    "content": ":020000040800F2\n:2000000020310020E52E00088D2E00088F2E0008912E0008932E0008952E00080000000071\n:20002000000000000000000000000000972E0008992E0008000000009B2E00089D2E000880\n:20004000252F0008292F00082D2F0008312F0008352F0008392F00083D2F0008412F000850\n:20006000452F0008492F00084D2F0008512F0008552F0008592F00085D2F0008612F000830\n:20008000652F0008692F00086D2F0008712F00089F2E0008792F00087D2F0008812F0008E7\n:2000A000852F0008892F00088D2F0008912F0008952F0008992F00089D2F0008A12F0008F0\n:2000C000A52F0008A92F0008AD2F0008B12F0008B52F0008B92F0008BD2F0008C12F0008D0\n:2000E000C52F0008C92F0008CD2F0008D12F0008D52F0008D92F0008DD2F0008E12F0008B0\n:20010000E52F0008E92F0008ED2F0008F12F0008F52F0008F92F0008FD2F0008013000088E\n:2001200005300008093000080D3000081130000870B500F08FFEDFF8144804F510553C350F\n:200140000146284600F016FC4FF40051204600F0D1FE04F200464FF4B0720FF650213046A2\n:2001600000F0F2FE0B222946304600F0EDFE0FF6CC4518222946204600F0E6FE1822294610\n:2001800004F5007000F0E0FEDFF8C407C4F81604A0220FF6783104F5C06000F0D5FE5022F2\n:2001A0000FF6084104F5006000F0CEFE40220FF64C4104F5206000F0C7FE42F20C20011940\n:2001C0000022CA760A774A7602518A600A61CA6070BD70B50C46DFF87467B4F5805F03D1F8\n:2001E00000F044F830460EE0B4F5205F04D100F03DF806F5007006E0B4F5804F07D100F0BC\n:2002000035F806F58060BDE8704000F08DBEB4F51A4F2AD300F02AF806F5C06000F084FE98\n:200220004FF40072314606F508503C3000F08CFE42F2272085196978B9B9DFF81817098856\n:20024000825D32B9B4F52A4F00D271B100F0A2F90AE0012A09D111B1B4F51C4F02D2B4F5F1\n:200260002C4F02D300F08BFA687070BD4FF400720146704710B50446080004D14FF4007260\n:200280000FF228713DE0DFF8C416B0F5805F08BF4FF4007235D0B0F5205F04D14FF4007243\n:2002A00001F500712DE0B0F5804F04D14FF4007201F5806125E0B0F5004F05D100F02DF811\n:2002C000A0220FF648211CE0B0F5024F05D100F024F850220FF6D42113E06FF402421218EA\n:2002E00041F2FF739A4205D200F017F840220FF60C3106E0B0F51A4F08D34FF4007201F589\n:20030000C0612046BDE8104000F00EBE4FF400712046BDE8104000F053BE4FF4007120467B\n:2003200000F04EBE2DE9F84F4FF02008DFF81C5642F227277C194FF4085908EB050000F20F\n:200340000046002030733078E52818BF002800F0E580F07A202840F0E180307A482826D137\n:20036000707A452804BFB07A582840F0D08000F0DDF800207855607820B102280DD00428AB\n:2003800006D010E05220307244207072592009E0452030725220707204E04E2030724F201D\n:2003A00070725420B072F07D401CF075B4E041285AD1707A442804BFB07A52285BD100F096\n:2003C000B5F800207855607049F805004FF0020A95F80006302804BF95F8010678281ED151\n:2003E0000AEB050090F80006A0F13001C9B20A2922BFA0F14101C9B2062922BFA0F16101D3\n:20040000C9B206290BD259F805104FEA011B49F805B000F0DAF9584449F8050003E0607844\n:2004200040F0040060700AF1010ABAF10A0FCFDB6078A0B959F80500DFF81C15884202D316\n:2004400000F00FFD18B94E2030724F2004E001207855532030724520707254205BE045200E\n:2004600030725220707256E0422820D1707A492804BFB07A4E284AD100F058F8785D28B926\n:200480004E2030724F207072542004E052203072442070725920B072785D022804BF0020CC\n:2004A0007855785D012837D10220785534E053280DD1707A452804BFB07A542827D1785D80\n:2004C00060BB5520307253207072452023E0522805D1707A44281AD1B07A59280EE0552886\n:2004E00005D1707A532812D1B07A452806E0452806D1707A52280AD1B07A522807D10DE075\n:200500004E2801BF707A4F28B07A542806D04520307252207072B0720320607008F1200837\n:20052000B8F5007FFFF609AFBDE8F18FB07EF17E00EB01200005000DDFF8181408804FF434\n:200540007A7000F041BD70B542F20C25DFF8FC63AC19207F03281BD100F0F5FD0028FBD1B2\n:2005600000F03FFD4FF4C87000F02EFD012000F038FD00F0F5FD002020776076A060A8510B\n:20058000DFF8D00300210180E07E022808BFE17670BD00002DE9F04742F20424DFF8AC53BD\n:2005A00066190020F060306900EB0509F068401942F2242A0AEB050742F2292879780E29D9\n:2005C00056D8DFE801F0080C131B1F2C324146595F757B838A0090F800063A2874E000F006\n:2005E000CBF80001B0770020306173E096F81E8000F0C2F84044B077B07F5DE000F0BCF87B\n:2006000000010AE054F8058000F0B6F8404460516059F17F4118F177000260515AE000F084\n:20062000ABF800010AF8050054E01AF8058000F0A3F840440AF8050060591AF8051008182E\n:200640006051F07F081837E000F096F80001707740E096F81D8000F08FF840447077F07F41\n:20066000717F0818F0777878401C7870B07F002876D17878801C72E000F07EF8000108F8EC\n:20068000090027E018F809A000F076F8504408F809003069F17F421918F802205118F1772F\n:2006A000401C3061B17F884214D27878401E56E000F060F808EB0010F0770BE000F05AF80A\n:2006C0004044F077F07F002846D103E090F800060D2841D17878401C41E090F800060A289C\n:2006E0003AD10020F870707F042805D17879B979090401EB00607060707F012837D068BBE8\n:2007000060597168081860519349884201D202202EE0002001E03069801C30613069B17F3D\n:2007200088421BD26159401800F03BFD31694A1960590818491CB37F994218F8021008BF97\n:2007400041F47F4104D04244527801EB022189B200F016FD0428DED0042009E00020787044\n:20076000F068401CF060B0F5007FFFF41CAF0020BDE8F08796F81F8090F8000625E0F8B5EA\n:200780000024724D05F508564FF408577859F168081800F006FD601990F8001690F8010699\n:2007A00001EB002189B27859F268101800F0E8FCF168891CF160042801D00420F2BDA41CEB\n:2007C000B4F5007FE2D30020F2BD10B585B0044600A80FF2C411112200F0B6FBA4F16100E1\n:2007E000C0B21A2838BF203C002000A9415CE4B2A14204D0401CC0B21028F6D3002005B09B\n:2008000010BD2DE9F04142F21824504D6619534F327A2AB940023860480278600120307248\n:20082000307A012831D1605978B905F5005839684046FFF71FFD40229821404600F0C6FC1B\n:200840004FF4E070605140200CE040229821B868401900F5005000F0B9FC605940386051A8\n:20086000B8684030B8604021012000F05AFD3021012000F0E0FC38684030386078684038C9\n:2008800078603748816840398160786838B96051B860386033480321017000203072BDE815\n:2008A000F0812DE9F04142F21C24284D6259403266192D4F33792BB94002386048027860E3\n:2008C00001203071307901282FD1002027490AE05B1903F5005310F801C083F800C0401CEB\n:2008E00063595B1C635163599342F1D3DFF88080B8F800003968411839607A68101A7860BE\n:20090000C00507D100206051A1F5007105F50050FFF75FFC12488168B8F80020891A816030\n:200920004FF44051022000F097FC786800281EBF0C480078042806D100206051012100F0A7\n:2009400057FE00203071BDE8F0810000EC010020188DDD40102D002000400008D82C0020D3\n:20096000C82C0020942C0020E42C0020342C0020962C00201C2221FA02F303F00F030A2B69\n:20098000ACBF3733303300F8013B121F53B2002BF1D50021017070473031323334353637DF\n:2009A000383941424344454600000000EB3C904D53444F53352E3000020108000200020052\n:2009C00010F80C00010001000000000000000000000029A298E46C4E4F204E414D45202030\n:2009E0002020464154313220202033C98ED1BCF07B8ED9B800208EC0FCBD007C384E247DAE\n:200A0000248BC199E83C01721C83EB3A66A11C7C26663B07268A57FC750680CA028856025B\n:200A200080C31073EB33C98A461098F7661603461C13561E03460E13D18B7611608946FCBA\n:200A40008956FEB82000F7E68B5E0B03C348F7F30146FC114EFE61BF0000E8E600723926B9\n:200A6000382D741760B10BBEA17DF3A66174324E740983C7203BFB72E6EBDCA0FB7DB47D1B\n:200A80008BF0AC9840740C487413B40EBB0700CD10EBEFA0FD7DEBE6A0FC7DEBE1CD16CD4D\n:200AA00019268B551A52B001BB0000E83B0072E85B8A5624BE0B7C8BFCC746F03D7DC746D3\n:200AC000F4297D8CD9894EF2894EF6C606967DCBEA030000200FB6C8668B46F86603461C43\n:200AE000668BD066C1EA10EB5E0FB6C84A4A8A460D32E4F7E20346FC1356FEEB4A52500655\n:200B0000536A016A10918B4618969233D2F7F691F7F64287CAF7761A8AF28AE8C0CC020AEB\n:200B2000CCB80102807E020E7504B4428BF48A5624CD136161720B40750142035E0B4975ED\n:200B400006F8C341BB000060666A00EBB04E544C44522020202020200D0A52656D6F766544\n:200B6000206469736B73206F72206F74686572206D656469612EFF0D0A4469736B2065720E\n:200B8000726F72FF0D0A507265737320616E79206B657920746F20726573746172740D0ACF\n:200BA00000000000000000ACCBD855AA4446552056335F34325F44080000000000000000EF\n:200BC00000008A5A794500000000000042200049006E0066006F000F007272006D006100C4\n:200BE000740069006F0000006E00000001530079007300740065000F00726D0020005600BE\n:200C00006F006C00750000006D00650053595354454D7E3120202016005E63705D455D4533\n:200C2000000064705D45020000000000412E005F002E00540072000F007F610073006800B0\n:200C40006500730000000000FFFFFFFF7E3120202020202054524122004A8A5A794579459E\n:200C600000008A5A7945050000100000E552415348457E3145464D1200478A5A7945794525\n:200C800000008A5A7945040000000000412E0054007200610073000F002568006500730031\n:200CA0000000FFFFFFFF0000FFFFFFFF5452415348457E312020201200478A5A79457945AD\n:200CC00000008A5A7945040000000000412E0066007300650076000F00DA65006E0074001B\n:200CE0007300640000000000FFFFFFFF46534556454E7E3120202012004D8A5A794579458C\n:200D000000008A5A79450D00000000002E2020202020202020202010005E63705D455D4531\n:200D2000000064705D450200000000002E2E20202020202020202010005E63705D455D453A\n:200D4000000064705D4500000000000042470075006900640000000F00FFFFFFFFFFFFFF4A\n:200D6000FFFFFFFFFFFF0000FFFFFFFF0149006E006400650078000F00FF65007200560049\n:200D80006F006C00750000006D006500494E444558457E3120202020007263705D455D45BC\n:200DA000000064705D4503004C0000007B00380031004200320031003700330033002D001B\n:200DC00036003800440039002D0034003000350039002D0041003500370033002D004500AA\n:200DE000410030004400320033003200450039003300320031007D00000000002E20202088\n:200E0000202020202020203200478A5A7945794500008A5A79450400000000002E2E2020D7\n:200E2000202020202020201000478A5A7945794500008A5A7945000000000000F8FFFFFF84\n:200E4000FFFFFF6F0007800009A0000BC000FFFFFFFF0F00234801684268511880684018F9\n:200E6000704710B5FFF7F6FF1F490C6800F006F8844201D1012010BD002010BD0A231B4A3C\n:200E800001461B48FFE7F0B503F11506C3F14304C3F151050A330EE0C0EB40105F1003EB86\n:200EA00097774FEAA70CA3EB8C07FF0021FA07F7FFB238185B1C1BB2B342EDDB0DE0C0EB65\n:200EC0004010631004EB93739B10A4EB8301C90022FA01F1C9B20818641C24B2AC42EEDB1D\n:200EE000F0BD0000E8F7FF1FFC3F0008011020D502DEC0DE002200F0BDBB10B450F8041BCC\n:200F000081B102681218001D50F8043BDC0744BFA9F10104E31852F8044B43F8044B091F9C\n:200F2000F9D1EBE710BC704762B38B0708D0521E11F8013B00F8013B00F024808B07F6D13D\n:200F4000830740F0208000BF103A07D330B4B1E83810103AA0E83810F9D230BC530724BF81\n:200F6000B1E80810A0E8081044BF51F8043B40F8043BD20724BF31F8022B20F8022B44BFC4\n:200F80000B7803707047083A07D3B1E80810083A40F8043B40F804CBF7D25307E4E750F8E1\n:200FA000041B61B150F8042BD30744BFA9F101039A18002342F8043B091FFAD1EFE7704740\n:200FC000002200F071BB000000214FF6FF7302E04D4A1360491C40F2DC5242439142F7D328\n:200FE00070474A494FF400620A614FF480520A61002808680AD120F4404040F440500860E4\n:20100000086820F4402040F4403009E020F4804040F430400860086820F4802040F43020D7\n:201020000860704780F308887047704738B500F06BFB102000F0E0FB354C207820B10220D6\n:2010400000F0D4FB082502E000F0D0FB002531484168314A11434160016841F08071016064\n:20106000012000F06AFB012000F06AFB392000F094FB0028FAD0207800B1022000F063FB01\n:2010800000F068FBA842FBD10121142000F06AFB012140F20C6000F06EFB01214FF400001E\n:2010A00000F072FB207820B10120BDE8324000F056BB31BD80B501464FF0006000F047FCF5\n:2010C0004FF4A06000F012FC14208DF8000002208DF8010000208DF8020001208DF803001E\n:2010E00000A800F008FC01BD0C484FF6FF71C1600B4A02600B4A42600B48C1600B49016095\n:201100004FF08831416070470C10014004080140E8010020001002400A846800000801403B\n:201120008888880884B4BB8B000C0140884883440948012101600021016041604FF4E05142\n:20114000064A118005E0044801210160002141600321016000207047405C0040142D00209F\n:201160000448C0610221017203490162034A426208680047A02C0020D800002030010020E0\n:2011800038B504460D46104800F0A0FB05281CBF342000F07AFB29462046BDE8344000F043\n:2011A0005BBB10B50446A0050CD1074800F08EFB05281CBF342000F068FB2046BDE81040B6\n:2011C00000F02EBB10BD0000A086010010B5490001F1804101F5C041521C521009E010F8C9\n:2011E000013B10F8014B43EA042321F8023B891C521EF4D110BD490001F1804101F5C0411B\n:20120000521C521004E051F8043B20F8023B521EF9D170474FF6F8710840DFF89011086076\n:20122000704710B5DFF8882152F8203048F68F142340194324E010B5DFF8742152F82030A9\n:2012400048F6BF742340CC0648BF83F01003890648BF83F020030FE010B5DFF8542152F8E5\n:2012600020304BF68F742340CC0448BF83F48053890448BF83F4005343F4004141F08001CE\n:2012800042F8201010BDDFF8281151F820204BF68F731A4082F4405242F4004209E0DFF8A1\n:2012A000101151F8202048F68F631A4042F40042FFE742F0800241F820207047DFF8F010E1\n:2012C00051F8202052040AD551F8202048F68F731A4042F4404242F0800241F82020704791\n:2012E000334951F8202052060AD551F8202048F68F731A4042F4004242F0C00241F82020AA\n:20130000704738E0294A126892B202EBC000294A37E03BE02549096889B201EBC000254947\n:201320003AE0224A126892B202EBC000224A2AE01E4A126892B202EBC000204A02EB4000DC\n:201340003F2909D34A091F23194208BF521E1204910941F4004105E04A08C90748BF521C80\n:2013600012049109016070471049096889B201EBC000124914E00D4A126892B202EBC000E3\n:201380000F4A4908490042F8101070470749096889B201EBC0000A4951F8100080B270470C\n:2013A00051F810008005800D70470000505C0040005C004008600040046000400C6000408B\n:2013C000006000400106090C41EA10207047000080B5964890F82010022909D018D3042958\n:2013E00002D00ED3052913D1002180F820100CE0C17B28290CD1816A406ABDE8044000F09B\n:20140000FEBA0121002000F0F3F84FF440512BE101BD38B5854CE57B0220FFF7A5FF60849B\n:201420000246D8218248FFF7E6FE94F8200010B1012803D00AE0BDE8314013E02A2D06D13D\n:20144000A16A606ABDE8344000F003BB022000F0F9F82421052000F0CDFA00210220BDE8E4\n:201460003440C5E010B5714C628C1AB170492046FFF76AFD6F4861684160A1688160608CA5\n:201480001F2806D0022000F0DDF8002020601A218DE0E27B282A18BF2A2A0FD1607CA17C4D\n:2014A000090441EA0060E17C40EA0120217D08436062A07DE17D41EA0020A06220685E494A\n:2014C000884270D15D480068617B884204D3A07B401EC0B2102804D3022000F0B3F824217B\n:2014E00065E0606AA16A002A49D0032A2BD0082A18BF0A2A53D0122A29D0152A4FD01A2A30\n:201500002DD01B2A27D01D2A49D01E2A23D0232A2DD0252A2FD0282A35D02A2A37D02F2A54\n:2015200039D0552A3BD05A2A1DD0882A18BF8A2A35D08F2A18BF9E2A31D0A82A1CBFAA2A8B\n:20154000AF2A2CD02FE0BDE8104000F04BBABDE8104000F011BABDE8104000F04FBABDE87A\n:20156000104000F037BABDE8104000F037BABDE8104000F010BABDE8104000F01BBABDE856\n:20158000104000F0A5BABDE8104000F038BABDE8104000F05EBABDE8104000F083BABDE811\n:2015A000104000F09ABA022000F04CF82021052000F020FA00210120BDE8104018E010B5DD\n:2015C0000C4622469821FFF701FE21460120FFF7A8FE30210120FFF72EFE1448032180F8F3\n:2015E000201014488168091B81600021017310BD10B50C460F4B1249196018730D22982157\n:201600001846FFF7E3FD0D210120FFF78AFE0748052180F8201044B1042180F82010302199\n:201620000120BDE81040FFF706BE10BD742C0020342C0020C82C002055534243002D00203F\n:201640005553425380B518B1022807D00AD301BD10210120BDE80440FFF7EDBD1021012086\n:20166000FFF7E9FD4FF480510220BDE80440FFF7F3BD000000B500BF130096469446103943\n:2016800028BFA0E80C50FAD85FEA417C28BF0CC048BF40F8042BC90728BF20F8022B48BF83\n:2016A00000F8012B00BD0000401810F0030308D0C91A1FD3DB0748BF00F8012D28BF20F830\n:2016C000022D130030B414461546103928BF20E93C00FAD8490728BF20E90C0048BF40F85D\n:2016E000042D890028BF20F8022D48BF00F8012D30BC7047C91818BF00F8012DCB0728BF9B\n:2017000000F8012D704700002E48016841F00101016041682C4A1140416001682B4A114039\n:201720000160016821F480210160416821F4FE0141604FF41F0181607047254908607047E2\n:2017400025490860704723490A68920850EA8200086070471F48006800F00C0070471F49BF\n:20176000086070471E4A0029116814BF084321EA0000106070471B4A0029116814BF0843CB\n:2017800021EA000010607047174A0029116814BF084321EA00001060704700214209094B04\n:2017A000012A08BF1A6803D0022A0CBF1A6A5A6A012300F01F0003FA00F0024218BF012146\n:2017C00008467047001002400000FFF8FFFFF6FE000042420410024060004242D8004242AF\n:2017E00014100240181002401C100240DFF8C4100A6802F0380206E0DFF8B8100A6822F059\n:2018000010020A600A68104308607047FFE7DFF8A800DFF8A8100160DFF8A4100160704770\n:2018200038B5054600F015F804280DD1DFF89440206840F002002060656000F006F8216848\n:2018400041F6FD721140216032BD206840F0400020604FF4302039E070B504460D4600F04B\n:2018600011F804280CD1174E306840F001003060258000F007F8316841F6FE7211403160E2\n:2018800070BD08804FF4005020E00F490860704704200D490A68D20701D5012070470A68A4\n:2018A000520701D5022070470968C90648BF03207047000000200240042002402301674567\n:2018C000AB89EFCD102002400C20024010B5FFE70446FFF7DDFF03E02CB1FFF7D9FF641E61\n:2018E0000128F9D004B9052010BD00001B4908431B490860704770B503781A460121C478B7\n:20190000ECB1174B1B6803F4E063C3F5E0631B0A4478C3F10405AC4085780F2626FA03F33E\n:201920002B4023431B010F4C1355007842110E4B00F01F0001FA00F043F8220070BD5011EE\n:201940000A4A03F01F03994042F8201070BD084A1140084307490860704700000000FA0552\n:201960000CED00E000E400E000E100E080E100E080FFFF1F08ED00E07449087CC00702D577\n:201980007348052105E00FF2E410C97C252928BF2421FFF714BE6F48002181800221817117\n:2019A0000021C1714172022181720021C1720C21FFF705BE6848002101800F218170FF213E\n:2019C000C17000218180022181710021C1710821FFF7F5BD04216148FFF7F1BD0821604838\n:2019E000FFF7EDBD5948C17C132928BF12215D48FFF7E5BD5B4A90701173704769E070B588\n:201A000004460D46584E3078C0B92A462146282000F076F8C8B14D48007B000603D502205C\n:201A2000307029460CE00220FFF70CFE00F00EF801210120BDE87040FFF7DABD022804D16F\n:201A40002046BDE87040FEF7DCBE70BD24210520D0E710B5444C2278EAB90A4601462A207B\n:201A600000F04EF8E8B13948007B000608D4012020704FF440510220BDE81040FFF7ECBB80\n:201A80000020FFF7DFFDFFF7E1FF00210120BDE81040FFF7ADBD012A04BFBDE81040FEF70F\n:201AA00000BF10BD80B52948816829B9007C400702D40121002006E00220FFF7C3FDFFF79A\n:201AC000C5FF00210120FFE7BDE80440FFF790BD00BF01210020FFF78BBD80B51B4881682E\n:201AE00009B9002004E0007B00064CBF00200220FFF7A8FD2021FFF7AAFF00210120E3E7CB\n:201B000080B55118B1F5805F09D92A2804BF0220FFF798FD0020FFF795FD21210BE00B49D5\n:201B20008968B1EB422F0ED02A280CBF02200020FFF788FD2421FFF78AFF00210120FFF7F3\n:201B400057FD002002BD012002BD0000742C0020EC2C0020BC010020F42C0020E401002058\n:201B6000D8010020A8010020942C002000800202200000005669727475616C204446552019\n:201B80004469736B20202020202020202020202010B5DFF8884700B92BE000F096F8006825\n:201BA000804720680A3010BD80B5DFF870070068C178DFF86C2752788A420CD38278002AA8\n:201BC00004BF8288002A06D1817200F07EF840688047002002BD022002BD10B5DFF83C4790\n:201BE00000B906E000F071F88068804720680C3010BD206801210182002010BD10B5DFF8F7\n:201C00001C472068C1784079DFF8182712689269904721688A7A92B1002804BF0879002821\n:201C20000DD1887858B900F050F8C068804720684179C1722068C1780173002010BD0220D5\n:201C400010BD1CB5DFF8D416096810B90220088239E0DFF8D44600202080087800227F2331\n:201C6000184215D1487A81064CBF42F0020102F0FD0121702178400654BF01F0FE0041F008\n:201C80000100207000F021F800698047204616BD00F07F03012BF9D000F07F00022812D15E\n:201CA000487900F00F0142F0010200F088FA05D500F030001028E5D12270E3E700F44050F4\n:201CC000B0F5805FF7E7002016BDDFF8600600687047F8B5DFF844060068017811F07F0123\n:201CE00004D1417A01F0DF0141724FE0022901BF41880029017900294AD1417921F08005B6\n:201D0000DFF82C460A0654F825204CBF02F0300202F44052DFF808361B789D4238D2002A67\n:201D20001CBF807A002833D0080654F825000BD500F03000102825D12846FFF7D1FA302176\n:201D40002846FFF778FA1DE000F44050B0F5805F18D148F280064BF68F7745B900F0BDFA13\n:201D60002068384080F44050304320600AE02846FFF7A4FA54F82500384080F44050304320\n:201D800044F82500FFF7A1FF406980470020F2BD0220F2BD38B5DFF884050268537923F0A6\n:201DA0008000DFF88C151C0651F820404CBF04F0300404F44054DFF868552D78A84206D2A6\n:201DC000558825B9002C1CBF927A002A01D1022032BD48F280021B0651F8203005D548F69A\n:201DE000BF74234083F0100304E04BF68F74234083F480531A4341F82020FFF766FF8069D8\n:201E00008047002032BD80B5DFF810050068417A41F020014172FFF758FFC0698047002046\n:201E200002BDDFF8F8241268538A20B98888C01A108200207047086818187047F8B5DFF892\n:201E4000DC54286800F110042688A168080018BF002E14D0A088864288BF0646304688474D\n:201E600007462088801B20806088301860800020FFF750FA324601463846FFF7BCF9DFF803\n:201E8000B464208850B1DFF8B0044FF44051018000210020FFF745FA3020308028682188F2\n:201EA000A288914228BF032101D211B105210172F1BD06210172DFF88404006880B2DFF8D4\n:201EC0008014002241F8102030203080F1BD2DE9F843DFF84844206800F110063188DFF862\n:201EE0005454002904BF007A042816D1DFF85404017801290DD1DFF84414096889B2DFF85F\n:201F00004024002342F8113030212980042703702CE007271020288028E0B6F8048088450E\n:201F200005D30427414588BF4146884600E002274046B168884781460020FFF7EAF94246BD\n:201F400001464846FFF742F941460020FFF7E9F93088A0EB08003080708840447080302045\n:201F60002880DFF8D4034FF44051018020680772BDE8F18338B5DFF8A44320684578017833\n:201F80007F22114238D1092D02D1FFF70DFE47E0052D1BD1C17880294FD28178002901BF10\n:201FA00081880029807A002847D10620DFF88C13096889B2DFF88823002342F81130DFF876\n:201FC000741330220A802168087231BD032D08D1C178012904BF8088002823D1FFF713FF52\n:201FE0001EE0012D04BFC17801291BD18188C9B9407A80060DD415E001F07F00012804D194\n:020000040800F2\n:202000000B2D0FD1FFF7FAFD0AE002280AD1012D02D1FFF75EFE03E0032D03D1FFF7BAFEE4\n:202020000028C2D02846BF49096849698847032808BF0920C7D00028B7D00820C3E738B55E\n:20204000B64D28684178B74C062913D101787F2211422AD18078012802D12068C16968E0C8\n:20206000022802D12068016A63E003281DD12068416A5EE000293DD14188002904BFC1886E\n:20208000022912D1017981B901787F22114204BF8288002A2CD001F07F02012A10D100F0B0\n:2020A00089F810B92868807A10BB28684078216809698847032845D128680921017231BD13\n:2020C00001F07F010229F0D1407900F00F0100F0700200F074F84CBF00F0300000F440507D\n:2020E0008F4B1B789942E0D2002ADED10028DCD095491EE0082905D100787F210842D4D14F\n:20210000924916E00A2902BF017801F07F010129CBD1817A0029C8D04188002901BF017962\n:202120000029C1880129C0D100F044F80028BCD187490800B9D028680022428281610020B8\n:202140008847002029680A8A4FF6FF739A4208BF092004D0022818BF002A02D10820087274\n:2021600031BD087800061ED5C88800902368009C944202D2009808820FE082420DD293F808\n:202180002C00704C824238BF002005D392FBF0F500FB152008B90120207093F82C008882CF\n:2021A000BDE8314093E60320087263484FF44051018031BD002140792268926910475C4BA8\n:2021C000000653F82100704738B55C48006880B2604931F81000400000F1804000F5C040E3\n:2021E0004E4C21680A7A092A14D010F8012B0A70216810F8012B4A70851C35F8040BFFF729\n:20220000E1F8216848802888FFF7DCF821688880A888C8802068012101722068C08810B95B\n:20222000FFF7A8FE01E0FFF70AFFBDE831403EE010B53A4C2068017A022918BF042904D19C\n:20224000FFF745FE2068007A14E0062911D14178052902BF01787F22114206D1C07800F02A\n:2022600042F8FFF732FD006A80472E48006880688047082017E010B5284C2068007A0228BD\n:2022800018BF04280ED0032818BF052804D1FFF7D5FD2068007A06E0072803D121480068D5\n:2022A000C0688047082021680872BDE8104080B500F013F819480068017A082906D11E492C\n:2022C0004FF480520A801B4910220A80007A092801D1012002BD002002BD1F4890F82C10D8\n:2022E0000020FFF725B870B50D4909780022104B48F68F760BE0D4B253F824503540254322\n:2023000045F4004545F0800543F82450521C8A42F1D340F080001149086070BDBC2C002031\n:20232000E0010020C02C0020082D0020C42C0020005C00400E2D00200C2D0020505C0040EF\n:2023400004600040172D0020431C0008911B0008DB1B000808600040D80000204C5C0040D4\n:2023600070470000F8B58478303CE4B20A2C38BF2246C478303CE4B20A2C38BF234600781A\n:202380003038C0B20A2838BF01460024534818250FF2A016271805FB014C1CF806C087F85B\n:2023A00060C005FB024C1CF806C087F890C005FB034C1CF806C087F8A8C0641C182CE9DB6E\n:2023C00000240C2201460C206043C0B200F004F8641C082CF5DBF1BD70B504460D461646E7\n:2023E000002100F04BF8761C2946F0B200F035F805460121204600F041F82946F0B2BDE817\n:2024000070402AE03749086037483C2202700968C9B2334800F09AB910B58CB000A80FF277\n:20242000DC013022FEF790FD2E2200F03CF82F4C4FF48071204600F006FA0220FEF7C4FD9A\n:202440004FF48071204600F0FCF90220FEF7BCFD2E20FFF7D7FF0CB010BD10B50C4620490A\n:2024600040220A70012203E014F8013B5354521C8242F9DBFFF7C6FF204610BD30B583B07F\n:2024800000AA0FF2A80330CB30C28DF80500012904BFB1208DF80100082200F004F80820ED\n:2024A000FFF7B0FF37BD00A90D48FEF73DBD10B500212020FFF7E2FF094C00F019F88020A3\n:2024C000FFF7A0FF01212020FFF7D8FF00F010F88020BDE8104095E700000000000000200F\n:2024E00034260020FC2C0020162D002000080140402020707F21601CFEF762BD80AE80D5CB\n:20250000805280A8800F80C880D38000804080A1808D801480DA8002808180E080D980F18E\n:2025200080DB803080A480A680AF000080B080218020807F00E010080810E00000000000B7\n:20254000000F102020100F0000000000001010F800000000000000000020203F2020000026\n:2025600000000000007008080888700000000000003028242221300000000000003008882C\n:2025800088483000000000000018202020110E00000000000000C02010F8000000000000BC\n:2025A00000070424243F24000000000000F8088888080800000000000019212020110E00AC\n:2025C0000000000000E010888818000000000000000F112020110E0000000000003808081C\n:2025E000C8380800000000000000003F000000000000000000708808088870000000000094\n:20260000001C222121221C000000000000E010080810E000000000000000312222110F0077\n:20262000000000000000000000000000000000000030300000000000000000007047424AF7\n:20264000012903D10146104600F0FBB819B90146104600F0F8B8704780B501210820FFF701\n:202660008AF8C020ADF8000014208DF8030003208DF8020000A9344800F07EF800F00EF86C\n:2026800000F055F800F056F800F057F8002100F04FF800F052F800F001F801BD00214020C6\n:2026A000CDE780B5FFF7FAFF002100F041F800F044F800F03FF800F040F800F038F800F06D\n:2026C0003CF8FFF7EBFF0520BDE80240B6E738B50446082508E000F02BF800F02EF800F0D8\n:2026E00029F800F02AF864002846451EC0B230B1FFF7D4FF20064CBF01210021EBE7FFF71A\n:20270000CDFF00F014F8FF2400F017F800F017F848B900F00FF800F010F8FFF7BFFF00F03C\n:202720000CF8012032BD641EEED1002032BD0121802084E70121402081E705207EE78021F3\n:20274000014800F077B80000000C014070B504460D461646FFF780FF7000C0B201E014F862\n:20276000010BFFF7B4FF2846451EC0B20028F6D1BDE8704095E700002DE9F0410022CC78F4\n:2027800004F00F03E40644BF8C7823430C8801250F26E7B217B3D0F800C005FA02F7BE4606\n:2027A0000EEA0408F04514D14FEA820E06FA0EF82CEA080C03FA0EFE4EEA0C0C91F803E03D\n:2027C000BEF1280F08BF476103D0BEF1480F08BF0761521C082AE0D3C0F800C0B4F5807F29\n:2027E00026D3D0F804C0002202F1080705FA07F7BE460EEA0408F04515D14FEA820E06FA47\n:202800000EF82CEA080C03FA0EFE4EEA0C0C91F803E0BEF1280F08BF476191F803E0BEF153\n:20282000480F08BF0761521C082ADDD3C0F804C0BDE8F08100228068084218BF012210468C\n:2028400070470161704741617047000080B500F0F8F88B48006800218172FEF769FC8948C0\n:20286000002141604FF40441874A1180016087480021016001BD10B58548002181728048CE\n:2028800000688449C97941720020FEF7C3FC4FF400710020FEF7C5FC20210020FEF7CBFC93\n:2028A00018210020FEF72EFD7B4C00F042F858210020FEF726FD0020FEF7F1FC0020FEF7E6\n:2028C000E2FC00210120FEF7ACFC98210120FEF718FD20210120FEF7AEFC00210120FEF71F\n:2028E000BBFC00210220FEF79CFCD8210220FEF709FD94F82C100220FEF71AFD4FF4405171\n:202900000220FEF7A9FC00210220FEF794FC00F010F80020FEF7B7FC0020FFF7E4FC5B48DA\n:20292000012101605D485E4901605E480021017010BD94F82C100020FEF7FABC50480068CF\n:20294000807A00B9704780B55048052101600120FEF7C6FC0220FEF7B1FC524800210170F1\n:2029600001BD4E4800684E4988421CBF0220FEF769BE704745480421016070477047704732\n:2029800080B53F4909680A7802F07F02212A08BFFE280BD14888002801BF88880028C888C0\n:2029A000012803D10FF28900020001D1022002BD88610020488200F03BF8002002BD80B5D1\n:2029C0002F4909680A7802F07F02212A08BFFF2815D14888002804BF888800280FD1C888D7\n:2029E00068B90120FEF77CFC0220FEF767FC2B482B4901602B4800210170002002BD022060\n:202A000002BD00290CBF0028022070472649FFF708BA2649FFF705BA19490968C978062974\n:202A200001DB00207047224A02EBC101FFF7F9B928B91348006801210182002070471D489B\n:202A400070471D4801684268806801B9704710B51A4B99700C0A1C710C0C9C71090E197251\n:202A60009A72110A1973110C9973110E19749874010A1975010C9975000E187610BD0000A5\n:202A8000BC2C0020405C0040142D0020042D0020A02C0020E42C0008D8000020742C0020E4\n:202AA00055534243942C0020C8010020D001002008010020002D0020E8F7FF1F5401002047\n:202AC0002DE9F84F0020ADF8000040F68F7848F60F7B48F28006444F444CDFF81491DFF899\n:202AE00014A14BF6BF7525E054F82010ADF80010BDF8001009040BD554F8201008EA010154\n:202B000044F820103C4901EB800050F8040C8047BDF8000000060DD599F8000054F820108F\n:202B20000BEA010144F82010344901EB800050F8040C8047606CAAF80000000452D5BAF8DF\n:202B4000000010F00F0089F80000CDD120683880388800F030007880388800F44050388033\n:202B60002068284080F4005080F0200030432060BAF80000C006206805D40BEA00002060D0\n:202B8000FFF756FB16E0ADF80000BDF80000000506D5206808EA00002060FFF715FB09E0D5\n:202BA000BDF800000004C5D5206808EA00002060FFF761FB206828403988C90448BF80F47D\n:202BC00080503988890448BF80F400507988C90648BF80F010007988890648BF80F020008E\n:202BE00030432060BDE8F18F0C2D0020005C0040182D0020122D00208C01002070010020C6\n:202C00002E48016841F00101016041682C4A1140416001682B4A11400160016821F4802181\n:202C20000160416821F4FE0141604FF41F0181600021026842F4803202600268491C920358\n:202C400002D4B1F5A06FF8D10168890330D51E490A6842F010020A600A68920892000A6097\n:202C60000A6842F002020A604168416041684160416841F480614160416821F47C11416062\n:202C8000416841F4E8114160016841F08071016001688901FCD541688908890041604168FF\n:202CA00041F002014160416801F00C010829FAD106484FF000610160704700000010024044\n:202CC0000000FFF8FFFFF6FE0020024008ED00E0120100020000004083042057000201027C\n:202CE0000301000009022000010100C0320904000002080650040705810240000007050263\n:202D000002400000040309042603530054004D006900630072006F0065006C0065006300FA\n:202D2000740072006F006E0069006300730000002603530054004D003300320020004D00A2\n:202D40006100730073002000530074006F007200610067006500000010035300540020005D\n:202D60004D00610073007300FEF760F9FEF7BCF91A48006880070ED5FEF773F8184801686A\n:202D8000184A1140B1F1005F04D144680068FEF749F9A047FEE70A20FEF716F90020FEF750\n:202DA00020F9C820FEF710F90120FEF71AF90020FEF780F9FEF7D4F9FDF7BAF9FFF72CFBD7\n:202DC000FFF775FB0FF22000FFF7CCFAFEF71EFDFDF7A8FAFDF7B7FBF8E70000080C014030\n:202DE000004000080000FF2F332E34350000000070B50D4C0D4D286820800D4E20883188CF\n:202E00000840400505D50B48406880474FF6FF302860208831880840000444BFBDE8704088\n:202E2000FFF74EBE70BD0000122D0020445C0040142D0020D8000020FEF7CABAFEF7E9BABA\n:202E400010B5074979441831064C7C44163404E0081D0A68511888470146A142F8D110BD88\n:202E6000080000002800000037E1FFFF302B0000EC0100200000000083E0FFFFEC01000056\n:202E80009401000000000020000000007047FEE7FEE7FEE7FEE77047704770477047FFF760\n:202EA000A7BF000000F009F8002801D0FFF7C8FF0020FFF759FF00F002F80120704700F0E5\n:202EC00001B800000746384600F002F8FBE70000C046C046024A11001820ABBEFBE700BFF7\n:202EE000260002000148804701480047012C0008F52E0008C046C046C046C046FFF7D2FFCB\n:202F0000FFF7C4BFFFF7C3BFFFF7C2BFFFF7C1BFFFF7C0BFFFF7BFBFFFF7BEBFFFF7BDBF05\n:202F2000FFF7BCBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF3B\n:202F4000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFD9\n:202F6000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF793BFFFF7FEBFFFF7FEBF24\n:202F8000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF99\n:202FA000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF79\n:202FC000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF59\n:202FE000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF39\n:20300000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF04FC040404040C0810E000001D\n:20302000407F404040406020180F000004FC8484848484E40C100000407F40000000000394\n:203040000000000004FC04000000000004FC0400001F204040404040201F000000000000AA\n:20306000606000000000000000000000606000000000000000780404040404887800000044\n:20308000006050484442414070000000000000000000000000000000006060000000000001\n:2030A0000000000000E018080404040818E00000000F302040404020300F0000000000087E\n:2030C00008FC00000000000000000040407F4040400000000000000000000000000000002D\n:2030E0000000000000000000000000004D280008772800087D2900087F290008812900089C\n:20310000BF290008032A00080D2A0008132A0008192A00080000000040000000042D000842\n:2031200004000000082D000826000000302D000826000000540100201A000000582D000881\n:2031400010000000612300083D2900086123000861230008612300086329000861230008A1\n:2031600061230008752900081A03530054004D003300320031003000000000000000000046\n:2031800000000000392E000861230008612300086123000861230008612300086123000878\n:2031A000612300083D2E0008612300086123000861230008612300086123000870000000E4\n:2031C0000000000A000000000000000000000000000000080000000002000000D02C0008D7\n:2031E00012000000E42C000820000000000600000000000003010000030000000100000077\n:20320000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE\n:20322000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE\n:20324000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E\n:20326000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E\n:20328000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E\n:2032A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E\n:2032C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E\n:2032E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE\n:20330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD\n:20332000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD\n:20334000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D\n:20336000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D\n:20338000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D\n:2033A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D\n:2033C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D\n:2033E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED\n:20340000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCC\n:20342000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAC\n:20344000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C\n:20346000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C\n:20348000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C\n:2034A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C\n:2034C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C\n:2034E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC\n:20350000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCB\n:20352000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAB\n:20354000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B\n:20356000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B\n:20358000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B\n:2035A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B\n:2035C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B\n:2035E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEB\n:20360000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCA\n:20362000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAA\n:20364000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A\n:20366000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A\n:20368000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A\n:2036A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A\n:2036C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A\n:2036E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA\n:20370000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9\n:20372000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9\n:20374000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF89\n:20376000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF69\n:20378000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF49\n:2037A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF29\n:2037C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09\n:2037E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9\n:20380000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8\n:20382000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8\n:20384000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF88\n:20386000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68\n:20388000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF48\n:2038A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF28\n:2038C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08\n:2038E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8\n:20390000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7\n:20392000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7\n:20394000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87\n:20396000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67\n:20398000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47\n:2039A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27\n:2039C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07\n:2039E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7\n:203A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6\n:203A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6\n:203A4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF86\n:203A6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF66\n:203A8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46\n:203AA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF26\n:203AC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06\n:203AE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6\n:203B0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5\n:203B2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5\n:203B4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85\n:203B6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF65\n:203B8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF45\n:203BA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25\n:203BC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF05\n:203BE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5\n:203C0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4\n:203C2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4\n:203C4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF84\n:203C6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF64\n:203C8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF44\n:203CA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF24\n:203CC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04\n:203CE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4\n:203D0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3\n:203D2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3\n:203D4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF83\n:203D6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63\n:203D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43\n:203DA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23\n:203DC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03\n:203DE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3\n:203E0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2\n:203E2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2\n:203E4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF82\n:203E6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF62\n:203E8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF42\n:203EA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22\n:203EC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF02\n:203EE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2\n:203F0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1\n:203F2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1\n:203F4000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81\n:203F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF61\n:203F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF41\n:203FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21\n:203FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF01\n:203FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1\n:00000001FF\n"
  },
  {
    "path": "Development Resources/TS80/TS80.ioc",
    "content": "#MicroXplorer Configuration settings - do not modify\nADC1.Channel-31\\#ChannelRegularConversion=ADC_CHANNEL_4\nADC1.Channel-32\\#ChannelInjectedConversion=ADC_CHANNEL_2\nADC1.Channel-33\\#ChannelInjectedConversion=ADC_CHANNEL_2\nADC1.Channel-34\\#ChannelInjectedConversion=ADC_CHANNEL_2\nADC1.Channel-35\\#ChannelInjectedConversion=ADC_CHANNEL_2\nADC1.ContinuousConvMode=DISABLE\nADC1.DataAlign=ADC_DATAALIGN_RIGHT\nADC1.DiscontinuousConvMode=DISABLE\nADC1.EnableAnalogWatchDog=false\nADC1.EnableRegularConversion=ENABLE\nADC1.ExternalTrigConv=ADC_SOFTWARE_START\nADC1.ExternalTrigInjecConv=ADC_INJECTED_SOFTWARE_START\nADC1.IPParameters=Rank-31\\#ChannelRegularConversion,Channel-31\\#ChannelRegularConversion,SamplingTime-31\\#ChannelRegularConversion,NbrOfConversionFlag,master,Rank-32\\#ChannelInjectedConversion,Channel-32\\#ChannelInjectedConversion,SamplingTime-32\\#ChannelInjectedConversion,InjectedOffset-32\\#ChannelInjectedConversion,Rank-33\\#ChannelInjectedConversion,Channel-33\\#ChannelInjectedConversion,SamplingTime-33\\#ChannelInjectedConversion,InjectedOffset-33\\#ChannelInjectedConversion,Rank-34\\#ChannelInjectedConversion,Channel-34\\#ChannelInjectedConversion,SamplingTime-34\\#ChannelInjectedConversion,InjectedOffset-34\\#ChannelInjectedConversion,Rank-35\\#ChannelInjectedConversion,Channel-35\\#ChannelInjectedConversion,SamplingTime-35\\#ChannelInjectedConversion,InjectedOffset-35\\#ChannelInjectedConversion,InjNumberOfConversion,DataAlign,ScanConvMode,ContinuousConvMode,DiscontinuousConvMode,EnableRegularConversion,NbrOfConversion,ExternalTrigConv,ExternalTrigInjecConv,InjectedConvMode,EnableAnalogWatchDog\nADC1.InjNumberOfConversion=4\nADC1.InjectedConvMode=None\nADC1.InjectedOffset-32\\#ChannelInjectedConversion=0\nADC1.InjectedOffset-33\\#ChannelInjectedConversion=0\nADC1.InjectedOffset-34\\#ChannelInjectedConversion=0\nADC1.InjectedOffset-35\\#ChannelInjectedConversion=0\nADC1.NbrOfConversion=1\nADC1.NbrOfConversionFlag=1\nADC1.Rank-31\\#ChannelRegularConversion=1\nADC1.Rank-32\\#ChannelInjectedConversion=1\nADC1.Rank-33\\#ChannelInjectedConversion=2\nADC1.Rank-34\\#ChannelInjectedConversion=3\nADC1.Rank-35\\#ChannelInjectedConversion=4\nADC1.SamplingTime-31\\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5\nADC1.SamplingTime-32\\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5\nADC1.SamplingTime-33\\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5\nADC1.SamplingTime-34\\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5\nADC1.SamplingTime-35\\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5\nADC1.ScanConvMode=ADC_SCAN_ENABLE\nADC1.master=1\nADC2.Channel-0\\#ChannelRegularConversion=ADC_CHANNEL_3\nADC2.Channel-1\\#ChannelInjectedConversion=ADC_CHANNEL_3\nADC2.Channel-2\\#ChannelInjectedConversion=ADC_CHANNEL_3\nADC2.Channel-3\\#ChannelInjectedConversion=ADC_CHANNEL_3\nADC2.Channel-4\\#ChannelInjectedConversion=ADC_CHANNEL_3\nADC2.ContinuousConvMode=DISABLE\nADC2.DataAlign=ADC_DATAALIGN_RIGHT\nADC2.DiscontinuousConvMode=DISABLE\nADC2.EnableAnalogWatchDog=false\nADC2.EnableRegularConversion=ENABLE\nADC2.ExternalTrigConv=ADC_SOFTWARE_START\nADC2.IPParameters=Rank-0\\#ChannelRegularConversion,Channel-0\\#ChannelRegularConversion,SamplingTime-0\\#ChannelRegularConversion,NbrOfConversionFlag,Rank-1\\#ChannelInjectedConversion,Channel-1\\#ChannelInjectedConversion,SamplingTime-1\\#ChannelInjectedConversion,InjectedOffset-1\\#ChannelInjectedConversion,Rank-2\\#ChannelInjectedConversion,Channel-2\\#ChannelInjectedConversion,SamplingTime-2\\#ChannelInjectedConversion,InjectedOffset-2\\#ChannelInjectedConversion,Rank-3\\#ChannelInjectedConversion,Channel-3\\#ChannelInjectedConversion,SamplingTime-3\\#ChannelInjectedConversion,InjectedOffset-3\\#ChannelInjectedConversion,Rank-4\\#ChannelInjectedConversion,Channel-4\\#ChannelInjectedConversion,SamplingTime-4\\#ChannelInjectedConversion,InjectedOffset-4\\#ChannelInjectedConversion,InjNumberOfConversion,DataAlign,ScanConvMode,ContinuousConvMode,DiscontinuousConvMode,EnableRegularConversion,NbrOfConversion,ExternalTrigConv,EnableAnalogWatchDog\nADC2.InjNumberOfConversion=0\nADC2.InjectedOffset-1\\#ChannelInjectedConversion=0\nADC2.InjectedOffset-2\\#ChannelInjectedConversion=0\nADC2.InjectedOffset-3\\#ChannelInjectedConversion=0\nADC2.InjectedOffset-4\\#ChannelInjectedConversion=0\nADC2.NbrOfConversion=1\nADC2.NbrOfConversionFlag=1\nADC2.Rank-0\\#ChannelRegularConversion=1\nADC2.Rank-1\\#ChannelInjectedConversion=1\nADC2.Rank-2\\#ChannelInjectedConversion=2\nADC2.Rank-3\\#ChannelInjectedConversion=3\nADC2.Rank-4\\#ChannelInjectedConversion=4\nADC2.SamplingTime-0\\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5\nADC2.SamplingTime-1\\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5\nADC2.SamplingTime-2\\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5\nADC2.SamplingTime-3\\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5\nADC2.SamplingTime-4\\#ChannelInjectedConversion=ADC_SAMPLETIME_1CYCLE_5\nADC2.ScanConvMode=ADC_SCAN_DISABLE\nDma.I2C1_RX.0.Direction=DMA_PERIPH_TO_MEMORY\nDma.I2C1_RX.0.Instance=DMA1_Channel7\nDma.I2C1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE\nDma.I2C1_RX.0.MemInc=DMA_MINC_ENABLE\nDma.I2C1_RX.0.Mode=DMA_NORMAL\nDma.I2C1_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE\nDma.I2C1_RX.0.PeriphInc=DMA_PINC_DISABLE\nDma.I2C1_RX.0.Priority=DMA_PRIORITY_MEDIUM\nDma.I2C1_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority\nDma.I2C1_TX.1.Direction=DMA_MEMORY_TO_PERIPH\nDma.I2C1_TX.1.Instance=DMA1_Channel6\nDma.I2C1_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE\nDma.I2C1_TX.1.MemInc=DMA_MINC_ENABLE\nDma.I2C1_TX.1.Mode=DMA_NORMAL\nDma.I2C1_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE\nDma.I2C1_TX.1.PeriphInc=DMA_PINC_DISABLE\nDma.I2C1_TX.1.Priority=DMA_PRIORITY_MEDIUM\nDma.I2C1_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority\nDma.Request0=I2C1_RX\nDma.Request1=I2C1_TX\nDma.RequestsNb=2\nFREERTOS.FootprintOK=true\nFREERTOS.INCLUDE_vTaskDelete=0\nFREERTOS.IPParameters=Tasks01,configTICK_RATE_HZ,configMAX_PRIORITIES,configMINIMAL_STACK_SIZE,configTOTAL_HEAP_SIZE,INCLUDE_vTaskDelete,FootprintOK\nFREERTOS.Tasks01=GUITask,0,512,StartGUITask,Default,NULL,Dynamic,NULL,NULL;PIDTask,0,256,StartPIDTask,Default,NULL,Dynamic,NULL,NULL;ROTTask,-2,256,StartRotationTask,Default,NULL,Dynamic,NULL,NULL\nFREERTOS.configMAX_PRIORITIES=4\nFREERTOS.configMINIMAL_STACK_SIZE=256\nFREERTOS.configTICK_RATE_HZ=100\nFREERTOS.configTOTAL_HEAP_SIZE=10240\nFile.Version=6\nI2C1.DutyCycle=I2C_DUTYCYCLE_2\nI2C1.I2C_Mode=I2C_Fast\nI2C1.IPParameters=I2C_Mode,DutyCycle\nIWDG.IPParameters=Prescaler\nIWDG.Prescaler=IWDG_PRESCALER_256\nKeepUserPlacement=false\nMcu.Family=STM32F1\nMcu.IP0=ADC1\nMcu.IP1=ADC2\nMcu.IP10=TIM3\nMcu.IP2=DMA\nMcu.IP3=FREERTOS\nMcu.IP4=I2C1\nMcu.IP5=IWDG\nMcu.IP6=NVIC\nMcu.IP7=RCC\nMcu.IP8=SYS\nMcu.IP9=TIM2\nMcu.IPNb=11\nMcu.Name=STM32F103T(8-B)Ux\nMcu.Package=VFQFPN36\nMcu.Pin0=PA0-WKUP\nMcu.Pin1=PA2\nMcu.Pin10=PA11\nMcu.Pin11=PA12\nMcu.Pin12=PA13\nMcu.Pin13=PA14\nMcu.Pin14=PA15\nMcu.Pin15=PB3\nMcu.Pin16=PB4\nMcu.Pin17=PB5\nMcu.Pin18=PB6\nMcu.Pin19=PB7\nMcu.Pin2=PA3\nMcu.Pin20=VP_FREERTOS_VS_ENABLE\nMcu.Pin21=VP_IWDG_VS_IWDG\nMcu.Pin22=VP_SYS_VS_ND\nMcu.Pin23=VP_SYS_VS_tim1\nMcu.Pin24=VP_TIM2_VS_ClockSourceINT\nMcu.Pin25=VP_TIM2_VS_no_output1\nMcu.Pin26=VP_TIM2_VS_no_output3\nMcu.Pin27=VP_TIM3_VS_ClockSourceINT\nMcu.Pin28=VP_TIM3_VS_no_output4\nMcu.Pin3=PA4\nMcu.Pin4=PA6\nMcu.Pin5=PB0\nMcu.Pin6=PB1\nMcu.Pin7=PA8\nMcu.Pin8=PA9\nMcu.Pin9=PA10\nMcu.PinsNb=29\nMcu.ThirdPartyNb=0\nMcu.UserConstants=\nMcu.UserName=STM32F103T8Ux\nMxCube.Version=4.26.0\nMxDb.Version=DB.4.0.260\nNVIC.BusFault_IRQn=true\\:0\\:0\\:false\\:false\\:true\\:false\\:true\nNVIC.DMA1_Channel6_IRQn=true\\:5\\:0\\:false\\:false\\:true\\:true\\:true\nNVIC.DMA1_Channel7_IRQn=true\\:5\\:0\\:false\\:false\\:true\\:true\\:true\nNVIC.DebugMonitor_IRQn=true\\:0\\:0\\:false\\:false\\:true\\:false\\:true\nNVIC.HardFault_IRQn=true\\:0\\:0\\:false\\:false\\:true\\:false\\:true\nNVIC.I2C1_ER_IRQn=true\\:5\\:0\\:false\\:false\\:true\\:true\\:true\nNVIC.I2C1_EV_IRQn=true\\:5\\:0\\:false\\:false\\:true\\:true\\:true\nNVIC.MemoryManagement_IRQn=true\\:0\\:0\\:false\\:false\\:true\\:false\\:true\nNVIC.NonMaskableInt_IRQn=true\\:0\\:0\\:false\\:false\\:true\\:false\\:true\nNVIC.PendSV_IRQn=true\\:15\\:0\\:false\\:false\\:false\\:true\\:true\nNVIC.PriorityGroup=NVIC_PRIORITYGROUP_4\nNVIC.SVCall_IRQn=true\\:0\\:0\\:false\\:false\\:false\\:false\\:true\nNVIC.SysTick_IRQn=true\\:15\\:0\\:false\\:false\\:true\\:true\\:true\nNVIC.TIM1_UP_IRQn=true\\:0\\:0\\:false\\:false\\:true\\:false\\:true\nNVIC.TimeBase=TIM1_UP_IRQn\nNVIC.TimeBaseIP=TIM1\nNVIC.UsageFault_IRQn=true\\:0\\:0\\:false\\:false\\:true\\:false\\:true\nPA0-WKUP.GPIOParameters=GPIO_Label\nPA0-WKUP.GPIO_Label=RM\nPA0-WKUP.Locked=true\nPA0-WKUP.Signal=GPIO_Output\nPA10.GPIOParameters=GPIO_Label\nPA10.GPIO_Label=QC_DM_11K\nPA10.Locked=true\nPA10.Signal=GPIO_Output\nPA11.GPIOParameters=GPIO_Label\nPA11.GPIO_Label=USB_DM\nPA11.Locked=true\nPA11.Signal=GPIO_Analog\nPA12.GPIOParameters=GPIO_Label\nPA12.GPIO_Label=USB_DP\nPA12.Locked=true\nPA12.Signal=GPIO_Analog\nPA13.GPIOParameters=GPIO_Label\nPA13.GPIO_Label=QC_DP_SENSE\nPA13.Locked=true\nPA13.Signal=GPIO_Input\nPA14.GPIOParameters=GPIO_Label\nPA14.GPIO_Label=QC_DM_SENSE\nPA14.Locked=true\nPA14.Signal=GPIO_Input\nPA15.GPIOParameters=GPIO_Label\nPA15.GPIO_Label=OLED_RESET\nPA15.Locked=true\nPA15.Signal=GPIO_Output\nPA2.GPIOParameters=GPIO_Label\nPA2.GPIO_Label=ADC_VIN\nPA2.Locked=true\nPA2.Signal=ADCx_IN2\nPA3.GPIOParameters=GPIO_Label\nPA3.GPIO_Label=ADC_TIP\nPA3.Locked=true\nPA3.Signal=ADCx_IN3\nPA4.GPIOParameters=GPIO_Label\nPA4.GPIO_Label=ADC_TMP36\nPA4.Locked=true\nPA4.Signal=ADCx_IN4\nPA6.GPIOParameters=GPIO_Label\nPA6.GPIO_Label=PWM Out\nPA6.Locked=true\nPA6.Signal=S_TIM3_CH1\nPA8.GPIOParameters=GPIO_Label\nPA8.GPIO_Label=QC_DM_3K\nPA8.Locked=true\nPA8.Signal=GPIO_Output\nPA9.GPIOParameters=GPIO_Label\nPA9.GPIO_Label=MODEL_SEL\nPA9.Locked=true\nPA9.Signal=GPIO_Input\nPB0.GPIOParameters=GPIO_Label\nPB0.GPIO_Label=KEY_A\nPB0.Locked=true\nPB0.Signal=GPIO_Input\nPB1.GPIOParameters=GPIO_Label\nPB1.GPIO_Label=KEY_B\nPB1.Locked=true\nPB1.Signal=GPIO_Input\nPB3.GPIOParameters=GPIO_Label\nPB3.GPIO_Label=QC_DP_3K\nPB3.Locked=true\nPB3.Signal=GPIO_Output\nPB4.GPIOParameters=GPIO_Label\nPB4.GPIO_Label=IMU_INT2\nPB4.Locked=true\nPB4.Signal=GPXTI4\nPB5.GPIOParameters=GPIO_Label\nPB5.GPIO_Label=IMU_INT1\nPB5.Locked=true\nPB5.Signal=GPXTI5\nPB6.GPIOParameters=GPIO_Label\nPB6.GPIO_Label=SCL\nPB6.Mode=I2C\nPB6.Signal=I2C1_SCL\nPB7.GPIOParameters=GPIO_Label\nPB7.GPIO_Label=SDA\nPB7.Mode=I2C\nPB7.Signal=I2C1_SDA\nPCC.Checker=false\nPCC.Line=STM32F103\nPCC.MCU=STM32F103T(8-B)Ux\nPCC.PartNumber=STM32F103T8Ux\nPCC.Seq0=0\nPCC.Series=STM32F1\nPCC.Temperature=25\nPCC.Vdd=3.3\nPinOutPanel.RotationAngle=0\nProjectManager.AskForMigrate=true\nProjectManager.BackupPrevious=false\nProjectManager.CompilerOptimize=3\nProjectManager.ComputerToolchain=false\nProjectManager.CoupleFile=false\nProjectManager.CustomerFirmwarePackage=\nProjectManager.DefaultFWLocation=true\nProjectManager.DeletePrevious=true\nProjectManager.DeviceId=STM32F103T8Ux\nProjectManager.FirmwarePackage=STM32Cube FW_F1 V1.6.1\nProjectManager.FreePins=true\nProjectManager.HalAssertFull=false\nProjectManager.HeapSize=0x200\nProjectManager.KeepUserCode=true\nProjectManager.LastFirmware=true\nProjectManager.LibraryCopy=1\nProjectManager.MainLocation=Src\nProjectManager.PreviousToolchain=SW4STM32\nProjectManager.ProjectBuild=false\nProjectManager.ProjectFileName=TS80.ioc\nProjectManager.ProjectName=TS80\nProjectManager.StackSize=0x400\nProjectManager.TargetToolchain=SW4STM32\nProjectManager.ToolChainLocation=\nProjectManager.UnderRoot=false\nProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-MX_I2C1_Init-I2C1-false-HAL-true,4-SystemClock_Config-RCC-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_IWDG_Init-IWDG-false-HAL-true,7-MX_TIM2_Init-TIM2-false-HAL-true,8-MX_ADC1_Init-ADC1-false-HAL-true,9-MX_ADC2_Init-ADC2-false-HAL-true\nRCC.ADCFreqValue=8000000\nRCC.ADCPresc=RCC_ADCPCLK2_DIV8\nRCC.AHBFreq_Value=64000000\nRCC.APB1CLKDivider=RCC_HCLK_DIV16\nRCC.APB1Freq_Value=4000000\nRCC.APB1TimFreq_Value=8000000\nRCC.APB2Freq_Value=64000000\nRCC.APB2TimFreq_Value=64000000\nRCC.FCLKCortexFreq_Value=64000000\nRCC.FamilyName=M\nRCC.HCLKFreq_Value=64000000\nRCC.IPParameters=ADCFreqValue,ADCPresc,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,USBPrescaler\nRCC.MCOFreq_Value=64000000\nRCC.PLLCLKFreq_Value=64000000\nRCC.PLLMCOFreq_Value=32000000\nRCC.PLLMUL=RCC_PLL_MUL16\nRCC.PLLSourceVirtual=RCC_PLLSOURCE_HSI_DIV2\nRCC.SYSCLKFreq_VALUE=64000000\nRCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK\nRCC.TimSysFreq_Value=64000000\nRCC.USBFreq_Value=42666666.666666664\nRCC.USBPrescaler=RCC_USBCLKSOURCE_PLL_DIV1_5\nSH.ADCx_IN2.0=ADC1_IN2,IN2\nSH.ADCx_IN2.ConfNb=1\nSH.ADCx_IN3.0=ADC1_IN3,IN3\nSH.ADCx_IN3.1=ADC2_IN3,IN3\nSH.ADCx_IN3.ConfNb=2\nSH.ADCx_IN4.0=ADC1_IN4,IN4\nSH.ADCx_IN4.ConfNb=1\nSH.GPXTI4.0=GPIO_EXTI4\nSH.GPXTI4.ConfNb=1\nSH.GPXTI5.0=GPIO_EXTI5\nSH.GPXTI5.ConfNb=1\nSH.S_TIM3_CH1.0=TIM3_CH1,PWM Generation1 CH1\nSH.S_TIM3_CH1.ConfNb=1\nTIM2.Channel-PWM\\ Generation1\\ No\\ Output=TIM_CHANNEL_1\nTIM2.Channel-PWM\\ Generation3\\ No\\ Output=TIM_CHANNEL_3\nTIM2.IPParameters=Channel-PWM Generation1 No Output,Channel-PWM Generation3 No Output\nTIM3.Channel-Output\\ Compare4\\ No\\ Output=TIM_CHANNEL_4\nTIM3.Channel-PWM\\ Generation1\\ CH1=TIM_CHANNEL_1\nTIM3.ClockDivision=TIM_CLOCKDIVISION_DIV4\nTIM3.IPParameters=Channel-PWM Generation1 CH1,OCFastMode_PWM-PWM Generation1 CH1,ClockDivision,Prescaler,Period,Channel-Output Compare4 No Output,OCMode_4,Pulse-Output Compare4 No Output\nTIM3.OCFastMode_PWM-PWM\\ Generation1\\ CH1=TIM_OCFAST_ENABLE\nTIM3.OCMode_4=TIM_OCMODE_ACTIVE\nTIM3.Period=65535\nTIM3.Prescaler=2000\nTIM3.Pulse-Output\\ Compare4\\ No\\ Output=65000\nVP_FREERTOS_VS_ENABLE.Mode=Enabled\nVP_FREERTOS_VS_ENABLE.Signal=FREERTOS_VS_ENABLE\nVP_IWDG_VS_IWDG.Mode=IWDG_Activate\nVP_IWDG_VS_IWDG.Signal=IWDG_VS_IWDG\nVP_SYS_VS_ND.Mode=No_Debug\nVP_SYS_VS_ND.Signal=SYS_VS_ND\nVP_SYS_VS_tim1.Mode=TIM1\nVP_SYS_VS_tim1.Signal=SYS_VS_tim1\nVP_TIM2_VS_ClockSourceINT.Mode=Internal\nVP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT\nVP_TIM2_VS_no_output1.Mode=PWM Generation1 No Output\nVP_TIM2_VS_no_output1.Signal=TIM2_VS_no_output1\nVP_TIM2_VS_no_output3.Mode=PWM Generation3 No Output\nVP_TIM2_VS_no_output3.Signal=TIM2_VS_no_output3\nVP_TIM3_VS_ClockSourceINT.Mode=Internal\nVP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT\nVP_TIM3_VS_no_output4.Mode=Output Compare4 No Output\nVP_TIM3_VS_no_output4.Signal=TIM3_VS_no_output4\nboard=TS100\n"
  },
  {
    "path": "Documentation/Bluetooth.md",
    "content": "# Bluetooth Low Energy\n\nThe Pinecilv2 has hardware support for Bluetooth Low Energy (BLE). This protocol allows reading and writing of parameters to the Pinecil during runtime.\n\nThe BLE interface advertises three services, these provide access to live telemetry as well as the ability to read/write settings.\nThese are outlined in more detail below.\n\nPinecil devices advertise themselves on BLE as `Pinecil-XXXXXXX`.\nThey also include the UUID `9eae1000-9d0d-48c5-AA55-33e27f9bc533` in the advertisement packet to allow for filtering.\n\nUnless otherwise noted, all data is sent and received as Little-Endian.\n\nAs of the time of writing this, notifications are not fully implemented so data will need to be polled. Notification/Indication support will come when there is time to implement it.\n\n## Using the BLE Interface\n\nIt is advised to follow the below points when first implementing a BLE integration. Of course once the integration is working feel free to deviate from these. These are just _suggested_ ideas to help kickstart.\n\n1. When filtering for devices, its preferable to filter by the UUID `9eae1000-9d0d-48c5-AA55-33e27f9bc533`, rather than by the device name if possible.\n2. Upon first collection check if the three expected services exist; if they don't the user may have selected an incorrect device.\n3. It's best to read the live bulk endpoint over the live service when its easy to do so (one read vs ~15).\n   1. However if you are just updating one or two line items it may be more efficient to just read these on the live service.\n   2. Feel free to test both and decide.\n4. When reading settings from the device; the association of number <-> setting is fixed, but you may see settings you don't yet know about, make sure you can handle these.\n5. You probably don't want to show unknown setting's to the user though.\n6. Read the device firmware revision and ensure you can decode it. If BLE is revised it may be essential for handling versions cleanly.\n7. It's advisable to keep an eye on the IronOS repository or at least setup the Github watch for release notifications.\n   1. Future releases may revise some BLE aspects or add new settings for example.\n\n## Services\n\nBelow is a description of each service. Note that the exact settings are not listed for brevity; it's best to refer to [the uuid lists](https://github.com/Ralim/IronOS/blob/dev/source/Core/BSP/Pinecilv2/ble_characteristics.h) and the [handlers](https://github.com/Ralim/IronOS/blob/dev/source/Core/BSP/Pinecilv2/ble_handlers.cpp) alongside this.\n\n### Live\n\n`UUID: d85ef000-168e-4a71-AA55-33e27f9bc533`\n\nThe live services has one characteristic per reading. The readings (in order) are:\nWhen implementing these; the ones that are not obvious are generally found in the debugging menu. Values are encoded as an unsigned 32 bit number for all results.\n\n1. Live temperature (In C)\n2. Live set point\n3. DC input voltage\n4. Handle temperature (In C)\n5. Power level\n6. Power source\n7. Tip resistance\n8. uptime\n9. Time of last movement\n10. Maximum temperature settable\n11. Raw tip reading\n12. Hall sensor\n13. Operating mode\n14. Estimated wattage\n\n### Settings\n\n`UUID: f6d80000-5a10-4eba-AA55-33e27f9bc533`\n\nThe settings service has two special entries; for saving and resetting settings.\nOtherwise all settings are enumerated using UUID's of the format : `f6d7ZZZZ-5a10-4eba-AA55-33e27f9bc533))` where `ZZZZ` is the setting number as matched from [Settings.h](https://github.com/Ralim/IronOS/blob/dev/source/Core/Inc/Settings.h#L16).\n\nAll data is read and written in fixed unsigned 16 bit numbers.\n\n#### Settings save\n\nTo save the settings write a `0x0001` to `f6d7FFFF-5a10-4eba-AA55-33e27f9bc533`.\nIts advised to not save settings on each change but instead to give the user a save button _or_ save after a timeout. This is just to reduce write cycles on the internal flash.\n\n#### Settings reset\n\nTo reset all settings to defaults; write a `0x0001` to  `f6d7FFFE-5a10-4eba-AA55-33e27f9bc533`.\nThis will reset settings immediately.\n\n### Bulk\n\n`UUID: 9eae1000-9d0d-48c5-AA55-33e27f9bc533`\n\nThe bulk endpoint is where extra data is located with varying read sizes.\n\n#### Live data\n\nThe bulk live data endpoint provides all of the data provided in the live endpoint, as one large single-read binary blob. This is designed for applications that are showing large amounts of data as this is more efficient for reading.\n\n#### Accelerometer Name\n\n_Not yet implemented_\n\n#### Build ID\n\nThis encodes the current build ID to allow viewing and handling when the BLE format changes.\n\n#### Device Serial Number\n\nThis is generally the device CPU serial number. For most devices this can be used as an ID. On PinecilV2 its the MAC address.\n\n#### Device Unique ID\n\nThis is only relevant on the PinecilV2. This is a random ID that is burned in at the factory. This is used by the online authenticity checker tool.\n"
  },
  {
    "path": "Documentation/DebugMenu.md",
    "content": "# Debugging Menu\r\n\r\nIn this firmware there is extra debugging information in a hidden sub-menu.\r\nThis menu is meant to be simple, so it has no fancy GUI animations.\r\n\r\n- Access it by pressing and holding the rear button (`-/B`) on the iron while it is on the home screen.\r\n- Use the front button (`+/A`) to scroll through the menu.\r\n- To exit, use the rear button (`-/B`) again.\r\n\r\n## Menu items\r\n\r\nItems are shown in the menu on a single line, so they use short codes.\r\n\r\n### Version\r\n\r\nThere is a static line on top which is presented on every sub-screen and reflects exact version of firmware. Version line on top has the following format - `vX.YYN.[ZZZZZZZZ]`:\r\n\r\n- X: major version\r\n- Y: minor version\r\n- N: build type:\r\n  - R - git-related **r**elease tag vXX.YY\r\n  - T - git-related release **t**ag but version is not vXX.YY !\r\n  - D - git-related **d**ev branch\r\n  - B - git-related custom **b**ranch\r\n  - E - git-related from d**e**tached commit\r\n  - G - neither above but **g**it-related\r\n  - C - build from github **C**I during _pull request_\r\n  - H - build outside of a git tree (i.e. release tarball or **h**omebrew customization without git)\r\n  - S - something **s**pecial[^ERR]\r\n  - V - something **v**ery special[^ERR]\r\n[^ERR]: `S` and `V` are reserved letters for cases when source of firmware is having very unique origin & configuration\r\n- Z: short commit ID hash with 8 digits generated automatically from git (for git-related build types only)\r\n\r\nI.e.:\r\n- `v2.22H` means firmware built locally from tarball with release version of `2.22`\r\n- `v2.22D.1A2B3C4D` means firmware with development version of `2.22` from git `dev` branch & with commit ID `1A2B3C4D` (so it can be traced for debug purposes)\r\n- `v2.22R.5E6F7G8H` means firmware with official release version of `2.22` and it's properly tagged with `v2.22` git tag & with commit ID `5E6F7G8H`'\r\n\r\n---\r\n\r\n**Additional scroll-able items appear in this order**:\r\n\r\n### Timestamp\r\n\r\n- This is a timestamp of firmware compilation and it has the following format: `YYYYMMDD HHMMSS` (i.e., `20230701 213456` means it has been built in July, 1st, 2023 at 9:34:56 pm)\r\n\r\n### ID\r\n\r\n- This is used by Irons that have an ID and serial number to help check if the iron is authentic. All Pinecil V1 show the same ID number as this is the number programmed into the MCU.\r\n- The new Pinecil V2 released Aug. 2, 2022 now uses MCU BL706, which enables generating a unique ID/Serial number to every iron. This can be used to verify your [Pinecil authenticity here](https://pinecil.pine64.org/).\r\n\r\n### ACC\r\n\r\nThis indicates the accelerometer that is fitted inside the unit.\r\n\r\n- MMA8652\r\n- LIS2DH12\r\n- BMA223\r\n- MSA301\r\n- SC7A20\r\n- None -> running in fallback without movement detection\r\n- Scanning -> Still searching I2C for one\r\n\r\n### PWR\r\n\r\nThis indicates the current power source for the iron.\r\nThis may change during power up as the sources are negotiated in turn.\r\n\r\n- **DC** input (dumb)\r\n- **QC** input (We used QC2/3 negotiation for current supply)\r\n- **PD W. VBus** input (PD subsystem is used to negotiate for current supply); and VBus is connected to your input power source\r\n- **PD No VBus** input (PD subsystem is used to negotiate for current supply); and VBus is **NOT** connected to your input power source. If it is Not required or possible to do a special mod of your PCB (i.e. late model V1, some early Green PCB models) then [PD No VBus] displays on-screen ([see details and PD Debug section below](https://ralim.github.io/IronOS/DebugMenu/#pd-debug-menu)).\r\n\r\n### Vin\r\n\r\nThe input voltage as read by the internal ADC. Can be used to sanity check it is being read correctly.\r\n\r\n### Tip C\r\n\r\nThis is the tip temperature in °C.\r\nThis can be used with RTip for assessing temperature processing performance.\r\n\r\n### Han C\r\n\r\nThis is the handle temperature or more accurately the reading of the Cold Junction Compensation (CJC) temperature sensor. This is expressed in °C. Range of 20-40 °C is normal depending on how hot/cold the room is and how long power has been plugged in which warms the PCB further.\r\nThis is used for CJC of the tip temperature.\r\n > If CHan is extremely high, this indicates the temperature sensor isn't reading correctly ([see Troubleshooting](https://ralim.github.io/IronOS/Troubleshooting/))\r\n\r\n### Max C\r\n\r\nThis indicates the max temperature in °C that the system estimates it can measure the tip reliably to.\r\nThis is dependent on a few factors including the handle temperature so it can move around during use. As you use the iron, the Max increases to a point.\r\n\r\n### UpTime\r\n\r\nThis shows how many deciseconds the unit has been powered for (600 ds = 1 minute).\r\n\r\n### Move\r\n\r\nThis is the last timestamp of movement. When the iron is moved, this should update to match the Time field (previous menu item).\r\nThis can be used for checking performance of the movement detection code.\r\n\r\n### Tip Res\r\n\r\nThis indicates the tip resistance that the device is currently using. For devices with multiple possible values to choose from (Pinecil V2), the appropriate value is automatically detected at every boot-up. Tip should be installed before boot-up or reading can not be done.\r\n\r\n### Tip R\r\n\r\nThis is the raw tip reading in μV. Tip must be installed or reading will be high/inaccurate. At cool, the range of 700-1000 is normal for larger tips and ~1500 for smaller tips (TS80). This is used to evaluate the calibration routines.\r\n\r\n### Tip O\r\n\r\nThis is the offset resulting from the *'Cold Junction Compensation Calibration'*.\r\n\r\n### HW G\r\n\r\nThis indicates the high water mark for the stack for the GUI thread. The smaller this number is, the less headroom we have in the stack.\r\nAs this is a high-water mater, you should only trust this once you have walked through all GUI options to \"hit\" the worst one.\r\n\r\n### HW M\r\n\r\nThis indicates the high-water mark for the stack for the movement detection thread. The smaller this number is, the less headroom we have in the stack.\r\n\r\n### HW P\r\n\r\nThis indicates the high-water mark for the stack for the PID thread. The smaller this number is, the less headroom we have in the stack.\r\n\r\n### Hall\r\n\r\nThis appears if your device is capable of having a hall effect sensor installed (Pinecil).\r\nThis shows the current magnetic field strength reading from the sensor. It is used to check if the sensor is operational, and for diagnostics and optimal placement of magnets on a stand (higher number is better/stronger). [See Hall Sensor for details](https://ralim.github.io/IronOS/HallSensor/). \r\n\r\n# PD Debug menu\r\n\r\nOn the Pinecil; if the iron is booted up while long holding the front button (`+`); it will show an extra hidden menu for inspecting USB-PD power adapters. We can also connect to any PD USB power to check Vbus status, even some cell phones with a USB-C port will work if it is PD. It will not show PD messages when Pinecil is powered by DC port, QC, or USB 5V (non-PD). For example, if you connect to a QC charger, you may simply see \"PD State 6\" which indicates \"waiting for source\" as no PD messages will be ever be sent and you will not be able to use (`+`) to scroll through PD negotiated messages.\r\n\r\nPressing (`+`) cycles through elements, and (`-`) or unplugging will exit the menu.\r\n\r\nThe first page shows the PD negotiation stage number; which can be used for diagnosing if PD is not working. Once negotiation is complete; use (`+`) button to advance to other screens which show the different proposals advertised for voltage and current (State 12 means all is good with the PD charger).\r\n\r\n#### Below is a method for user modification to convert some early models of Pinecil V1 to safely support 24V on the DC5525 barrel.\r\n\r\n⚠️ Warning: do this at your own risk, read everything in this document, and go to the [Pine64 community chat](https://wiki.pine64.org/wiki/Pinecil#Community_links) if you desire advice. An incorrect cut of the trace could render the Pinecil non-working.\r\n\r\nBackground: a simple user modification to the PCB on _some models_ of original V1 allows it to safely use DC barrel 24V by cutting a trace line to the Vbus which held it back to 21V. You can check whether your Pinecil V1 needs the update or can benefit from it by using a hidden trick in the PD debug menu.\r\n\r\n- Follow instructions above to enter the PD Debug menu.\r\n- After a few seconds or after PD negotiates (state above 5) it will show `[PD No VBus]` if it is not needed (i.e., late model V1). Alternately, if it shows `[VBus]`, then the mod has not been done and there is still a connection to the Vbus (the Vbus connection limits you to 21V until you do the mod).\r\n- If you need to do the mod, then follow the instructions/links below which have photos. Careful to only cut the trace and nothing else.\r\n- Then use the PD debug menu again to check for `[PD No Vbus]` before attaching any 24V PSU to the DC barrel. If you do not get the message, then try cutting the trace a little deeper or using alcohol to clear the gap of copper dust. Then check PD messages again. If you need advice/tips, join the Pine64 chat room. \r\n\r\nThe mod method is shown in the [February 2022 PINE64 community updates](https://www.pine64.org/2022/02/15/february-update-chat-with-the-machine/). Early Pinecil V1 models required cutting a trace to achieve 24V safety with DC barrel PSU. Late model V1 made sometime in 2022 came with `[No Vbus]` already displayed, and no mod is required.\r\n\r\n| Pinecil V2 model released Aug. 2, 2022 is an overhaul of the PCB with all relevant components capable of 28V. V2 requires no mods to support the use of 24V DC Barrel jack charger. |\r\n:--------\r\n\r\n\r\n\r\n"
  },
  {
    "path": "Documentation/DebuggingPD.md",
    "content": "# Debugging PD\n\nWhen using many of these soldering irons, the recommended power source is to use a USB-PD power supply.\n\nOccasionally, issues are run into where the iron reboots or appears to not boot when connected to this supply.\n\nThere are generally a few different reasons for this to occur, the first is of course a bug or incompatibility in the IronOS PD-stack / firmware, but there are also power adapters that either have issues or try to be _smart_ to the detriment of compatibility.\n\nIt also helps to remember that driving a soldering iron is not like a normal load that these power supplies are designed for. Normally a laptop or phone will gently ramp the power draw up and down. Where as the soldering iron will rapidly go from 0 to full power, and then back to 0 again. This can cause issues with some power supplies tripping out.\n\nIn general, a normal, boring 60-100W PD supply is recommended. Watch out for adapters with multiple ports that are used by marketing to advertise a higher number. It's somewhat common to see 65W adapters being pushed that have two ports, one of which is 45W and one that is 20W. These cannot support 65W output on one typically.\n\nSmarter chargers that try to implement every known protocol can come with quirks. Often slight shortcuts are taken in the PD implementation that can cause hard to debug issues.\n\n\n## If the unit doesn't power up at all\n\nThis can be the most frustrating one to diagnose.\n\nFirst, test the device powers up when powered by a USB-A -> USB-C cable. Or a DC power supply. This can rule out other issues that cause the device to appear off (bad flashing).\n\n### No power\nIf your device won't power up on any other supply type, look into if you can boot into the bootloader. This is usually done by holding down a button while connecting it to a computer and then checking if it's detected.\n\nIf the device shows up to a computer, but doesn't operate when powered up normally, the two most likely causes are a bad flash/firmware OR a non-functioning display.\n\nTesting alternative firmware builds or trying to heat the unit (pressing the front button) can be ways to test this.\n\n### Powers up on other supplies\n\nIf the device powers up on other supplies, but not on the USB-PD supply, it could be a problem with the USB-PD supply itself. Try using a different USB-PD supply to see if the issue persists.\n\nIf the unit does not power on any PD supplies it could be damage to the PD PHY or the USB connector. USB-PD uses the CC pins on the connector, which are not used for normal data so a USB-A adapter for example doesn't use these at all.\n\n## If the unit powers up but keeps rebooting\n\nThere are two causes of this:\n1. If the reboot occurs when the unit starts to heat up, then it is the power supply being unable to supply the power requested.\n2. The unit reboots frequently even without any buttons being pressed.\n\nIf this is the issue that you are seeing, then the problem is that something during the PD initialisation is failing.\n\nThe _best_ way to resolve this is to be able to capture the USB PD traffic. This is the only way to know what is **really** going on and why the two devices can't negotiate.\n\nTo capture PD traffic requires a device that can capture this data. A logic analyser can be used on the CC pins, though note that the signalling voltage is < 3.3V so it will require a logic analyser that can handle this or buffering.\n\nAlternatively, a lot of the higher-end USB power meter units can capture the packets. It doesn't matter if it only shows these on screen or if it can save these out to a file (ideally a file though).\n\n**Without a traffic capture, all debugging is guessing**\n\nOn firmwares 2.23+ there is a toggle in advanced settings to change the PD mode. This will adjust how the firmware negotiates with the PD supply slightly. This can enable/disable the PPS and EPR modes (dynamic voltage negotiation).\n\nPPS is known to be incorrectly implemented on some supplies, so turning off these features can improve compatibility.\n\nIf the device is _sometimes_ stable, you can on Pinecil devices boot while holding the front button to enter the PD debug menu. This will show what voltages & power levels are being advertised by the device. This can be used to cross-check with what is printed on the adapter. Take into consideration that non e-marked cables will be limited to 3A and that EPR requires specifically marked cables.\n\nIf you take the tip out of the iron, it will result in most devices not negotiating a PD profile (the irons wait to know what kind of tip is installed). This can be used to stop the failing negotiations in some situations to allow viewing this menu.\n\n\nBefore filing a support request, please try testing other power adapters & cables to try and narrow down the possibilities of the issue being a one-off.\nIf you have the capability to capture the PD traffic, that makes the problem exponentially easier to rectify.\n"
  },
  {
    "path": "Documentation/Development.md",
    "content": "# Development\n\nBuilding this software can be performed two ways: using the STM32CubeIDE or using command line tools.\n\n## STM32CubeIDE\n\nThe easiest way to start working with the STM32CubeIDE is to create a new project for the STM32F103RCTx.\nOnce this is created, remove the auto-generated source code.\nNext, drag the contents of the `source` folder into the project and choose to link to files.\nYou will need to update the build settings for include paths and point to the new `.ld` linker file.\n\n## Command line tools and building a release\n\nIn the `source` folder there is a `Makefile` that can be used to build the repository using command line tools.\nWhen running the `make` command, specify which model of the device and the language(s) you would like to use.\n\n### Windows (MSYS2 environment)\n\n1. Download `msys2` install package from the [official website](https://msys2.org) and install it according to the instruction there;\n2. Install requried packages (here and for the future commands use **`mingw64.exe`** terminal):\n```\n$ pacman -S mingw-w64-x86_64-arm-none-eabi-gcc mingw-w64-x86_64-libwinpthread-git python3 python3-pip make unzip git\n```\n3. Download _3rd party RISC-V toolchain_ `xpack-riscv-none-elf-gcc-...-win32-x64.zip` from [this repository](https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases);\n4. Move downloaded `xpack-riscv-none-elf-gcc-...-win32-x64.zip` to `msys64` _Windows_ directory (e.g., `C:\\msys64\\`);\n5. Extract files from `xpack-riscv-none-elf-gcc-...-win32-x64.zip` and go back to _home_ directory:\n```\n$ cd /\n$ unzip xpack-riscv-none-elf-gcc-...-win32-x64.zip\n$ cd ~\n```\n6. Permanently set `PATH` environment variable, so all required toolchains could be available for `make` and for other build scripts:\n```\n$ echo 'export PATH=/xpack-riscv-none-elf-gcc-.../bin:${PATH}' >> ~/.bashrc\n$ source ~/.bashrc\n```\n7. Additionally, `OpenOCD` and/or `ST-Link` can be installed as well to help with flashing:\n```\n$ pacman -S mingw-w64-x86_64-openocd\n$ pacman -S mingw-w64-x86_64-stlink\n```\n8. Clone _IronOS_ repo:\n```\n$ git clone --recursive https://github.com/Ralim/IronOS.git\n$ cd IronOS\n```\n9. Follow steps _4-8_ from [macOS section](#macos);\n10. `pip` can be updated inside `venv` only:\n```\n$ python3 -m pip install --upgrade pip\n```\n\n### macOS\n\nUse the following steps to set up a build environment for IronOS on the command line (in Terminal).\n\n1. [Follow steps 1 – 3 here to install the toolchain](https://github.com/glegrain/STM32-with-macOS#0---installing-the-toolchain) needed to compile for STM32 microcontrollers.\n2. Install `python`:\n\n```\nbrew install python\n```\n\n3. (Optional) Update `pip` so it doesn't warn you about being out-of-date:\n\n```\npython3 -m pip install --upgrade pip\n```\n\n4. Change to the `source` directory:\n\n```\ncd source\n```\n\n5. Create a Python virtual environment for IronOS named `ironos-venv` to keep your Python installation clean:\n\n```\npython3 -m venv ironos-venv\n```\n\n6. Activate the Python virtual environment:\n\n```\nsource ironos-venv/bin/activate\n```\n\n7. Install the dependencies required to run `make-translation.py`:\n\n```\npip install bdflib\n```\n\n8. All done! See some examples below for how you can build your own IronOS.\n\n### Examples\n\nTo build a single language Simplified Chinese firmware for the TS80P with 8 simultaneous jobs:\n\n```\nmake -j8 model=TS80P firmware-ZH_CN\n```\n\nTo build a European multi-language firmware for the Pinecil with as many simultaneous jobs as there are logical processors on Linux:\n\n```\nmake -j$(nproc) model=Pinecil firmware-multi_European\n```\n\nTo build a Cyrillic compressed multi-language firmware for the Pinecil with as many simultaneous jobs as there are logical processors on macOS:\n\n```\nmake -j$(sysctl -n hw.logicalcpu) model=Pinecil firmware-multi_compressed_Belarusian+Bulgarian+Russian+Serbian+Ukrainian\n```\n\nTo build a custom multi-language firmware including English and Simplified Chinese for the TS80:\n\n```\nmake -j8 model=TS80 custom_multi_langs=\"EN ZH_CN\" firmware-multi_Custom\n```\n\nTo build a custom compressed multi-language firmware including German, Spanish, and French for the TS100 (note if `model` is unspecified, it will default to `TS100`):\n\n```\nmake -j8 custom_multi_langs=\"DE ES FR\" firmware-multi_compressed_Custom\n```\n\nTo build a release instead, run the `build.sh` script. This will update translations and also build every language for all device models. For macOS users, replace `make -j$(nproc)` in the script with `make -j$(sysctl -n hw.logicalcpu)` before running.\n\n## Updating languages\n\nTo update the language translation files and their associated font maps, execute the `make_translation.py` code from the `Translations` directory.\nIf you edit the translation definitions or the English translation, please also run `gen_menu_docs.py` to update the settings menu documentation automatically.\n\n## Building Pinecil V1\n\nI highly recommend using the command line tools and using Docker to run the compiler.\nIt's a bit fussier on setup than the STM tooling, and this is by far the easiest way.\nIf you _need_ an IDE I have used [Nuclei's IDE](https://nucleisys.com/download.php).\nFollow the same idea as the STM Cube IDE notes above.\n\n## Building Pinecil V2\n\nTo build the Pinecil V2 firmware, you can use a Docker container that provides a consistent development environment across different operating systems, including Windows with WSL2. Here's how to do it:\n\n### Prerequisites\n\nDocker Desktop: Install the latest version of Docker Desktop for your operating system from the official website.\n\nOn Windows follow the instructions on the official documentation to install 'Windows Subsystem for Linux' (WSL2).\n\n### Building Steps\n\n1. Clone the repository, initialize and update submodules:\n\n    ```sh\n    git clone --recurse-submodules https://github.com/Ralim/IronOS.git\n    ```\n\n2. Start the Docker container with the development environment:\n\n    ```sh\n    cd IronOS\n    ./scripts/deploy.sh\n    ```\n\n    This script will build a Docker image and run a container with the necessary tools to build the firmware.\n\n3. Build the firmware for Pinecil V2:\n\n    ```sh\n    cd source/\n    ./build.sh -l EN -m Pinecilv2\n    ```\n\n    This command will compile the firmware with English language support for Pinecil V2 board.\n\n4. Find the firmware artifacts:\n    After the build completes successfully, you can find the firmware artifacts in the `source/Hexfile` directory.\n"
  },
  {
    "path": "Documentation/Flashing/MHP30.md",
    "content": "# Flashing / Upgrading your iron\n\n## Downloading source file\n\nIn the development of this firmware, there are three _types_ of firmware released.\nThese are the \"Main\" stable releases, which generally have high confidence in being bug free.\nRelease candidates are released slightly more often, and these are generally perfectly fine for everyday use. These are released early to allow for translation checking and for wonderful people to help spot bugs and regressions.\nFinally, there are the \"mainline\" builds, which are built from the main git branch.\nThese are built on every change and can be found on the Actions tab (see below).\n\n### Main release\n\nMain releases are made to the [releases page](https://github.com/Ralim/IronOS/releases).\nDownload the zip file that matches your model of soldering iron and extract it.\nSelect the appropriate file type for your unit, in general Miniware devices need `.hex` and Pinecil needs `.dfu`.\nFlash according to details below\n\n### Bleeding edge / latest\n\nFor the _latest_ code, you will need to download the zip file from the artifacts page on the build for what you want.\nHead to the [Actions](https://github.com/Ralim/IronOS/actions) page and then select the run for the appropriate branch you would like.\nIn general you probably want `master`.\n\nOnce you click on a run, scroll down to the \"Artifacts\" section and then click on your model to download a zip file.\nThen this works the same as a production release (use the correct file).\n\n# MHP30\n\nThis is completely safe, but if it goes wrong just put the corresponding `.hex` file from [the official website](https://e-design.com.cn/en/NewsDetail/4203645.html) ([mirror backup](https://github.com/Ralim/IronOS-Meta/tree/main/Firmware/Miniware)) onto the unit and you're back to the old firmware. Downloads for the `.hex` files to flash are available on the [releases page.](https://github.com/Ralim/IronOS/releases) The file you want is called MHP30.zip. Inside the zip file (make sure to extract the file before flashing with it) will be a file called `MHP30_{Language-Code}.hex`.\n\nOfficially the bootloader on the devices only works under Windows (use the built-in File Explorer, as alternative file managers or copy handlers like Teracopy will fail). However, users have reported that it does work under [Mac](#mac), and can be made to work under [Linux](#linux) _sometimes_ (look for details below).\n\n1. Hold the button closest to the tip (MHP30 the left button on the back), and plug in the USB to the computer.\n2. The unit will appear as a USB drive. (Screen will say `DFU` on it.)\n3. Drag the `.hex` file onto the USB drive.\n4. The unit will disconnect and reconnect.\n5. The filename will have changed to end in _.RDY_ or _.ERR_\n6. If it ends with _.RDY_ you're done! Otherwise, something went wrong.\n7. If it didn't work the first time, try copying the file again without disconnecting the device, often it will work on the second shot.\n8. Disconnect the USB and power up the device. You're good to go.\n\nFor the more adventurous out there, you can also load this firmware onto the device using an SWD programmer, for easier installation follow the guide at the end of this document.\n\nOn the USB-C port, `USB_D+` is shorted to `SWDIO` and `USB_D-` is shorted to `SWCLK` so debugging works without disassembly (attach while staying in the bootloader). Installing [IronOS-dfu](https://github.com/Ralim/IronOS-dfu) is recommended as it allows reliable flashing of binary files with [dfu-util](http://dfu-util.sourceforge.net/).\n\nNoting that for the MHP30 the stock firmware checks a checksum at the end of the first 8k that has to be valid or else it goes into \"demo mode\".\n\n## Mac\n\nsgr1ff1n (Shane) commented in [issue 11](https://github.com/Ralim/IronOS/issues/11) that upgrading worked on their Mac as per normal:\n\n> I just wanted to say that I was able to update the firmware on my ts100 from the stock version to 1.08 found in this repository using my Mac. I simply followed the same steps however through Finder. I have a MacBook Pro (13-inch, Mid 2012) running Sierra 10.12.4 (16E195).\n\n## Linux\n\nWhile in the past there were reports of unreliable upgrades, the consensus in [issue 11](https://github.com/Ralim/IronOS/issues/11) is that things work mostly as expected in Linux.\n\n@awigen has contributed a script [flash_ts100_linux.sh](https://raw.githubusercontent.com/Ralim/IronOS/dev/scripts/flash_ts100_linux.sh) that works on Ubuntu 16.04 as well as other distros.\n\nIf you want to do it manually (or if the script does not work for some reason) the general procedure is the same as for Windows, the differences are in the way to mount the unit and copy the firmware.\nRemember that after flashing, the firmware filename will have changed to end in `.RDY` or `.ERR` or `.NOT` and only `.RDY` means the flashing was successful!\n\n- The unit has to be mounted as `msdos` type (thanks @balrog-kun for having spotted it). You may disable automount, but unmounting the automounted drive and remounting as `msdos` works fine. You do not need to turn off automounting, but you do need to unmount the device with `umount`.\n- It is recommended to use an all-caps filename for the firmware, even if successful flashing were done with lower case names.\n- Avoid USB hubs, plug directly in your computer.\n- If it fails, try again several times without unplugging. Just let it remount.\n\nExample, to be run as root, once the unit has been plugged in DFU mode and auto-mounted:\n\n```bash\nFW=ts100.hex\nunset NAME\neval $(lsblk -P -p -d --output NAME,MODEL|grep \"DFU[ _]Disk\")\n[ -z ${NAME+x} ] && exit 1  # Could not find DFU device\numount \"$NAME\"\nmkdir /tmp/mntdfu\nmount -t msdos \"$NAME\" /tmp/mntdfu\ncp \"$FW\" \"/tmp/mntdfu/$(basename $FW|tr a-z A-Z)\"\nsync\numount /tmp/mntdfu\nrmdir /tmp/mntdfu\n```\n\nDevice will reboot and automount will rerun if not disabled.\nCheck the extension of your firmware, it should be `.RDY` now.\n\n## FAQ\n\n#### The file is showing up with the extension `.ERR`\n\nThis can occur during the programming process if any of the checks in the bootloader fail. This is often triggered by anti-virus software or using a non-Windows host OS.\n\nFirst, try just copying the file a second time.\n\n1. Attach the iron in DFU mode.\n2. Copy the `.hex` file to the device.\n3. The device disconnects and connects with the `.ERR` file.\n4. Copy the same `.hex` file again **⛔ DO NOT TRY AND DELETE THE OLD ONE ⛔**.\n5. The device will disconnect and reconnect again.\n6. The device _should_ now have the `.RDY` file.\n7. You're done.\n\nIf this fails and you are on Mac or Linux reading the wiki page about programming can help. There is also a very long issue thread going through all of the different attempts around this too.\n\nIf you are on Windows, it's often best to try another computer (friends, work, partners etc.).\n\n#### Device randomly disconnects or does not show up in DFU mode\n\n1. Check if the USB cable you are using has the data pins; test it on another device. There are a surprisingly large number of micro-USB cables that are power _only_.\n\n2. Try other USB ports. Often different USB controllers will interact with the units differently due to design quirks in the Miniware design.\n\n### Alternative bootloader\n\nIf you are an advanced user, and you have used `usb-dfu` tools before, or you would like to learn; there is an alternative bootloader for these irons.\nThis will **NOT** show up as a USB storage drive, but instead show up using a standard DFU protocol device. You can then use dfu tools or GUIs to upgrade the iron using the `.bin` files that are posted to the releases page.\n\nTo install this alternative bootloader, follow the instructions [here](https://github.com/Ralim/IronOS-dfu/blob/mainline/docs/Bootloader.md).\n\nNote that this is only recommended for users who know what they are doing. If you don't understand how this works, please don't flash this.\n"
  },
  {
    "path": "Documentation/Flashing/Pinecil V1.md",
    "content": "# Flashing / Upgrading your iron\n\n## Downloading source file\n\nIn the development of this firmware, there are three _types_ of firmware released.\nThese are the \"Main\" stable releases, which generally have high confidence in being bug free.\nRelease candidates are released slightly more often, and these are generally perfectly fine for everyday use. These are released early to allow for translation checking and for wonderful people to help spot bugs and regressions.\nFinally, there are the \"mainline\" builds, which are built from the main git branch.\nThese are built on every change and can be found on the Actions tab (see below).\n\n### Main release\n\nMain releases are made to the [releases page](https://github.com/Ralim/IronOS/releases).\nDownload the zip file that matches your model of soldering iron and extract it.\nSelect the appropriate file type for your unit, in general Miniware devices need `.hex`, Pinecil V1 needs `.dfu`, and Pinecil V2 needs `.bin`.\nFlash according to details below.\n\n### Bleeding edge / latest\n\nFor the _latest_ code, you will need to download the zip file from the artifacts page on the build for what you want.\nHead to the [Actions](https://github.com/Ralim/IronOS/actions) page and then select the run for the appropriate branch you would like.\nIn general you probably want `master`.\n\nOnce you click on a run, scroll down to the \"Artifacts\" section and then click on your model to download a zip file.\nThen this works the same as a production release (use the correct file).\n\n# Pinecil V1\n\n- The MCU used in Pinecil supports usb-dfu. Reference [Pinecil Wiki](https://wiki.pine64.org/wiki/Pinecil) for hardware and firmware instructions.\n- Recommended Updater for Windows/MacOS: [Pine64 Updater](https://github.com/pine64/pine64_updater) is an easy-to-use GUI app. It is fast and automatically fetches the newest stable version of IronOS from GitHub. It can also be used to load custom boot logo art.\n- Recommended Updater for Linux/MacOS: [PineFlash](https://github.com/Spagett1/PineFlash) is an easy-to-use GUI app. It is fast and automatically fetches the newest stable version of IronOS from Github. It can also be used to load custom boot logo art.\n\n- Troubleshooting: if you have issues using the Pine64 Updater or your install fails, please go to troubleshooting tips below.\n- The [Pinecil Wiki](https://wiki.pine64.org/wiki/Pinecil) is a great resource for all things Pinecil.\n- Community chat: if troubleshooting doesn't work, then join the Pine64 > Pinecil channel [here](https://wiki.pine64.org/wiki/Pinecil#Live_Community_Chat). There are knowledgeable members in Discord/Telegram/Matrix. Discord has a bridge bot connection to Telegram and Matrix so that all pine64 volunteers/members can see advice for Pinecil and related items or just get tips on which power supply to purchase.\n- One advantage of Pinecil is that you cannot permanently damage it doing a firmware update (because DFU is in ROM); an update could render Pinecil temporarily inoperable if you flash an invalid firmware. But no worries, simply re-flashing with a working firmware copy will fix everything.\n- USB-C cable is required to do an update. Generally, all USB controllers work, but some hubs have issues, so it is preferred to avoid USB hubs for updates.\n- Alternate Update Methods: if your OS is not currently supported by the [Pine64 Updater](https://github.com/pine64/pine64_updater) or it does not meet your needs, i.e., you want to install a beta version, the below manual methods may be used.\n\n## Linux and Mac\n\n### Steps\n\n⛔ Do not use the DC barrel jack while updating firmware or you may destroy your PC. ⛔\n\n1. Highly recommend updating `dfu-util` to the newest version before starting.\n2. Download and extract the firmware package from GitHub [IronOS Releases](https://github.com/Ralim/IronOS/releases).\n3. Enter DFU mode: press and hold (`-`) button at the back of the iron before you connect the USB-C cable.\n4. Connect USB to PC, and USB-C to back of Pinecil, keep holding (`-`) button down.\n5. Once the USB cable is connected at two ends, wait ~10 seconds more, then release the (`-`) button.\n6. The screen will stay **black/off** to indicate the Pinecil is in DFU mode. This is normal.\n7. Using `dfu-util` you can flash the firmware using a command line like this:\n\n```\ndfu-util -D Pinecil_EN.dfu\n```\n\nChoose the file name from the folder with the appropriate 2-letter country code for your chosen language (i.e., EN = English).\n\n### Troubleshooting:\n\n- If you get a message stating that `More than one DFU capable USB device found!` when running the above command you probably have an old version of `dfu-util` installed. Might be worth updating. You can still install on the old version, but you will have to specify which DFU interface to flash to. Running the command `dfu-util -l` will show you if there are several DFU devices detected. Example:\n\n```\nFound DFU: [28e9:0189] ver=0100, devnum=48, cfg=1, intf=0, path=\"1-1\", alt=1, name=\"@Option Bytes  /0x1FFFF800/01*016Be\", serial=\"??\"\nFound DFU: [28e9:0189] ver=0100, devnum=48, cfg=1, intf=0, path=\"1-1\", alt=0, name=\"@Internal Flash  /0x08000000/128*001Kg\", serial=\"??\"\n```\n\nIn this example we see that more than one part of the Pinecil is detected as a DFU interface and we need to specify which one we want to flash to. We want the `Internal Flash` so in this case we can use `alt=0` to identify which interface to target. The command would then look like this:\n\n```\ndfu-util -D Pinecil_EN.dfu -a 0\n```\n\n- Note: if you use an older release of `dfu-util` and do not see `alt=0, name=\"@Internal Flash /0x08000000/128*001Kg\"` when running `dfu-util -l` you likely will not be able to update without first updating 'dfu-util'.\n- If your update is crashing part-way into the update, there is sometimes an issue with older/fussy USB controllers (they can show up/disappear/then show up again)\n  - Try a direct connection to the USB port, do not use a USB hub, and use shorter cable. If possible, pick a port connected to the main board.\n  - Switch to a different PC/Laptop and use different ports. USB-C ports are recommended but some have also reported having a fussy C port.\n  - Hold down the (-) button for the entire firmware update, do not release until near the end.\n- `DC Low` message: a pc/laptop cannot fully power Pinecil, it generally can only get 5 V (non-PD) to communicate for firmware updates and Pinecil will report 'DC Low'. This is normal.\n- If `dfu-util` aborts with an error like\n  ```\n  dfu-util: Cannot open DFU device 28e9:0189 found on devnum 42 (LIBUSB_ERROR_IO)\n  ```\n  and `dmesg` reports USB errors like these\n  ```\n  kernel: usb 1-1: reset full-speed USB device number 42 using xhci_hcd\n  kernel: usb 1-1: device descriptor read/64, error -71\n  kernel: usb 1-1: device descriptor read/64, error -71\n  kernel: usb 1-1: reset full-speed USB device number 42 using xhci_hcd\n  kernel: usb 1-1: device descriptor read/64, error -71\n  kernel: usb 1-1: device descriptor read/64, error -71\n  kernel: usb 1-1: reset full-speed USB device number 42 using xhci_hcd\n  kernel: usb 1-1: Device not responding to setup address.\n  kernel: usb 1-1: Device not responding to setup address.\n  kernel: usb 1-1: device not accepting address 42, error -71\n  ```\n  then try to disable USB autosuspend.\n  This can be done with a set of udev rules specifically for the Pinecil:\n  ```udev\n  SUBSYSTEM==\"usb\", ATTR{idVendor}==\"28e9\", ATTR{idProduct}==\"0189\", MODE:=\"0660\"\n  SUBSYSTEM==\"usb\", ATTR{idVendor}==\"28e9\", ATTR{idProduct}==\"0189\", GROUP=\"plugdev\"\n  SUBSYSTEM==\"usb\", ATTR{idVendor}==\"28e9\", ATTR{idProduct}==\"0189\", TEST==\"power/control\", ATTR{power/control}=\"on\"\n  ```\n\n## Windows\n\nTwo Options for Windows\n\n### Option 1: use command line\n\n### Steps\n\n⛔ Do not use the DC barrel jack while updating firmware or you may destroy your PC. ⛔\n\n1. Using command line `dfu-util` is similar to above for Linux / Mac.\n2. Highly recommend updating `dfu-util` to the newest version.\n3. Download and extract the firmware package from GitHub [IronOS Releases](https://github.com/Ralim/IronOS/releases).\n4. Enter DFU mode: press and hold (-) button at the back of the iron (do not release).\n5. Connect USB to PC, and USB-C to the back of Pinecil, keep holding (-) button down.\n6. Screen will stay **black/off** to indicate the Pinecil is in DFU mode. This is normal.\n7. After the USB cable is connected at both ends, wait ~10 seconds more, then release the (-) button.\n8. Open PowerShell or Command window.\n9. Change to the directory of the unzipped firmware files\n10. Using `dfu-util,` flash the firmware using a command like this:\n\n```\ndfu-util -D Pinecil_EN.dfu\n```\n\n- If you have errors, see Troubleshooting above.\n\n### Option 2: use the GUI tool from chip vendor\n\n### Steps\n\n⛔ Do not use the DC barrel jack while updating firmware or you may destroy your PC. ⛔\n\n1. If you are uncomfortable with the command line, then this chip vendor supplied GUI tool/drivers is an option.\n2. Download and extract the firmware package from GitHub [IronOS Releases](https://github.com/Ralim/IronOS/releases).\n3. Download both the `GD32 MCU DFU TOOL` and the `GD32 Dfu Drivers`.\n   - GD32 DFU Tool [here](http://www.gd32mcu.com/en/download?kw=GD32+MCU+Dfu+Tool&lan=en). If the link breaks, search for \"GD32 MCU Dfu Tool\" at this [link](http://www.gd32mcu.com/en/download/).\n   - GD32 DFU Drivers [here](http://www.gd32mcu.com/en/download?kw=GD32+Dfu+Drivers&lan=en). If the link breaks, search for \"GD32 Dfu Drivers\" at this [link](http://www.gd32mcu.com/en/download/).\n   - Check properties of both downloads, tick Unblock if needed, then Unzip\n4. Install the drivers and the GD32 DFU tool (ignore prompts to update the tool).\n5. Enter DFU mode: press and hold (`-`) button at the back of Pinecil (do not release).\n6. Connect Pinecil to a PC via USB cable (do not release the (`-`) yet).\n7. Screen will stay **black/off** to indicate the Pinecil is in DFU mode. This is normal.\n8. You may hear a beep from Windows as it connects to Pinecil in DFU mode.\n9. If you see windows notification that it `does not recognize USB device`, then you didn't connect, repeat step 3-8.\n10. Open the GD32 DFU Tool (ignore prompts to update tool).\n11. At the top of the DFU tool, you should see `GD DFU DEVICE 1` appear if you successfully connected Pinecil.\n12. If DFU Device box at top is blank, then Pinecil is not connected in DFU mode, repeat steps 3-11.\n13. If it has been more than 10 seconds since you connected the USB cable, Release the (`-`) button. (don't use Upload from Device section)\n14. Select `Download to device` > Open > Browse to folder you unzipped in step 2.\n15. Select the `hex` file for language. English is Pinecil_EN.hex , tick `Verify after download`.\n16. Click `OK` at bottom. After a few minutes you will see 0-100%, Download successfully! Click `Leave DFU` at the top.\n17. Disconnect Pinecil cable from PC, plug it into a power supply.\n18. Do not need to press any buttons, a new screen should appear.\n19. To confirm upgrade, hold the minus (`-`) button down for a few seconds, it then shows new firmware version v2.xx.x....date\n\n- If you have errors, see Troubleshooting above.\n"
  },
  {
    "path": "Documentation/Flashing/Pinecil V2.md",
    "content": "# Flashing / Upgrading your iron\n\n## Downloading source file\n\nIn the development of this firmware, there are three _types_ of firmware released.\nThese are the \"Main\" stable releases, which generally have high confidence in being bug free.\nRelease candidates are released slightly more often, and these are generally perfectly fine for everyday use. These are released early to allow for translation checking and for wonderful people to help spot bugs and regressions.\nFinally, there are the \"mainline\" builds, which are built from the main git branch.\nThese are built on every change and can be found on the Actions tab (see below).\n\n### Main release\n\nMain releases are made to the [releases page](https://github.com/Ralim/IronOS/releases).\nDownload the zip file that matches your model of soldering iron and extract it.\nSelect the appropriate file type for your unit, in general Miniware devices need `.hex`, Pinecil V1 needs `.dfu`, and Pinecil V2 needs `.bin`.\nFlash according to details below.\n\n### Bleeding edge / latest\n\nFor the _latest_ code, you need to download the zip file from the artifacts page for the build that you want.\nHead to the [Actions](https://github.com/Ralim/IronOS/actions) page and then select the run for the appropriate branch and beta you would like.\nIn general you probably want `master`.\n\nOnce you click on a run, scroll down to the \"Artifacts\" section and then click on your device model name to download a zip file.\nThen this works the same as a production release (use the correct file).\n\n## Pinecil V2\n\n- The MCU in Pinecil V2 is Bouffalo BL706 and does _not_ use usb-dfu for flashing as the previous Pinecil V1 MCU did.\n- See the Pinecil Wiki page [here](https://wiki.pine64.org/wiki/Pinecil#Firmware_&_Updates) for instructions.\n- The V2 uses the [BLISP flasher](https://github.com/pine64/blisp) to upload the firmware to the MCU.\n- The [Pinecil Wiki](https://wiki.pine64.org/wiki/Pinecil) is a great resource for all things Pinecil.\n- Community chat: if there are issues updating, then join the Pine64 > Pinecil channel [here](https://wiki.pine64.org/wiki/Pinecil#Live_Community_Chat). There are knowledgeable members in Discord/Telegram/Matrix. Discord has a bridge bot connection to Telegram and Matrix so that all pine64 volunteers/members can see advice for Pinecil and related items or just get tips on which power supply to purchase.\n- One advantage of Pinecil is that you cannot permanently damage it doing a firmware update (because BIN is in ROM); an update could render Pinecil temporarily inoperable if you flash an invalid firmware. But no worries, simply re-flashing with a working firmware copy will fix everything.\n- USB-C cable is required to do an update. Generally, all USB controllers work, but some hubs have issues, so it is preferred to avoid USB hubs for updates.\n- Background on the [BL706 chipset](https://lupyuen.github.io/articles/bl706)\n\n### Troubleshooting\n\nIf you are running into issues such as timeouts during the programming or bootloader errors, the BL702 has a not-amazing USB PHY built in. This can cause problems on cheap cables (especially \"thin\" ones that tend not to have shielding). One of the authors (Ralim) has found this especially common on the cables supplied with Apple chargers when used with newer Ryzen processor ports.\n\nIt is _strongly_ reccomended to use a good quality cable, ideally _short_.\nAlso try other USB ports, as on some devices they can use different hub's or lengths of signalling, and this can fix the issue.\n\nBy the PinecilV2's design, by default some of the internal buses are exposed on the USB3 pins, to enable hacking/debugging/mods. This is suspected it _may_ play poorly on some chipsets. Try using a USB2.0 cable. Others have had luck with chaining USB-C->USB-A->USB-C. This may be due to this, as a lot of these adaptors are USB2 or only USB3 5gbps (half USB3 pins).\n\nAnother workaround is to put a USB hub somewhere in the chain, as these will re-form the signal and can work around the issue.\n\n_Finally_, some users have reported issues under Windows that were fixed by changing OS (Typically to a Linux live cd).\n"
  },
  {
    "path": "Documentation/Flashing/TS100.md",
    "content": "# Flashing / Upgrading your iron\n\n## Downloading source file\n\nIn the development of this firmware, there are three _types_ of firmware released.\nThese are the \"Main\" stable releases, which generally have high confidence in being bug free.\nRelease candidates are released slightly more often, and these are generally perfectly fine for everyday use. These are released early to allow for translation checking and for wonderful people to help spot bugs and regressions.\nFinally, there are the \"mainline\" builds, which are built from the main git branch.\nThese are built on every change and can be found on the Actions tab (see below).\n\n### Main release\n\nMain releases are made to the [releases page](https://github.com/Ralim/IronOS/releases).\nDownload the zip file that matches your model of soldering iron and extract it.\nSelect the appropriate file type for your unit, in general Miniware devices need `.hex` and Pinecil needs `.dfu`.\nFlash according to details below\n\n### Bleeding edge / latest\n\nFor the _latest_ code, you will need to download the zip file from the artifacts page on the build for what you want.\nHead to the [Actions](https://github.com/Ralim/IronOS/actions) page and then select the run for the appropriate branch you would like.\nIn general you probably want `master`.\n\nOnce you click on a run, scroll down to the \"Artifacts\" section and then click on your model to download a zip file.\nThen this works the same as a production release (use the correct file).\n\n# TS100\n\nThis is completely safe, but if it goes wrong just put the corresponding `.hex` file from [the official website](https://e-design.com.cn/en/NewsDetail/4203645.html) ([mirror backup](https://github.com/Ralim/IronOS-Meta/tree/main/Firmware/Miniware)) onto the unit and you're back to the old firmware. Downloads for the `.hex` files to flash are available on the [releases page.](https://github.com/Ralim/IronOS/releases) The file you want is called TS100.zip. Inside the zip file (make sure to extract the file before flashing with it) will be a file called `TS100_{Language-Code}.hex`.\n\nOfficially the bootloader on the devices only works under Windows (use the built-in File Explorer, as alternative file managers or copy handlers like Teracopy will fail). However, users have reported that it does work under [Mac](#mac), and can be made to work under [Linux](#linux) _sometimes_ (look for details below).\n\n1. Hold the button closest to the tip (MHP30 the left button on the back), and plug in the USB to the computer.\n2. The unit will appear as a USB drive. (Screen will say `DFU` on it.)\n3. Drag the `.hex` file onto the USB drive.\n4. The unit will disconnect and reconnect.\n5. The filename will have changed to end in _.RDY_ or _.ERR_\n6. If it ends with _.RDY_ you're done! Otherwise, something went wrong.\n7. If it didn't work the first time, try copying the file again without disconnecting the device, often it will work on the second shot.\n8. Disconnect the USB and power up the device. You're good to go.\n\nFor the more adventurous out there, you can also load this firmware onto the device using an SWD programmer, for easier installation follow the guide at the end of this document.\n\nOn the bottom of the MCU riser PCB, there are 4 pads for programming. On v2.51A PCB revision `USB_D+` is shorted to `SWDIO` and `USB_D-` is shorted to `SWCLK` so debugging works without disassembly (attach while staying in the bootloader). Installing [IronOS-dfu](https://github.com/Ralim/IronOS-dfu) is recommended as it allows reliable flashing of binary files with [dfu-util](http://dfu-util.sourceforge.net/).\n\nOn some newer TS100 units, the SWD pins are wired up to the USB pins, on older ones they are not sadly.\n\n## Mac\n\nsgr1ff1n (Shane) commented in [issue 11](https://github.com/Ralim/IronOS/issues/11) that upgrading worked on their Mac as per normal:\n\n> I just wanted to say that I was able to update the firmware on my ts100 from the stock version to 1.08 found in this repository using my Mac. I simply followed the same steps however through Finder. I have a MacBook Pro (13-inch, Mid 2012) running Sierra 10.12.4 (16E195).\n\n## Linux\n\nWhile in the past there were reports of unreliable upgrades, the consensus in [issue 11](https://github.com/Ralim/IronOS/issues/11) is that things work mostly as expected in Linux.\n\n@awigen has contributed a script [flash_ts10X_linux.sh](https://raw.githubusercontent.com/Ralim/IronOS/dev/scripts/flash_ts10X_linux.sh) that works on Ubuntu 16.04 as well as other distros.\n\nIf you want to do it manually (or if the script does not work for some reason) the general procedure is the same as for Windows, the differences are in the way to mount the unit and copy the firmware.\nRemember that after flashing, the firmware filename will have changed to end in `.RDY` or `.ERR` or `.NOT` and only `.RDY` means the flashing was successful!\n\n- The unit has to be mounted as `msdos` type (thanks @balrog-kun for having spotted it). You may disable automount, but unmounting the automounted drive and remounting as `msdos` works fine. You do not need to turn off automounting, but you do need to unmount the device with `umount`.\n- It is recommended to use an all-caps filename for the firmware, even if successful flashing were done with lower case names.\n- Avoid USB hubs, plug directly in your computer.\n- If it fails, try again several times without unplugging. Just let it remount.\n\nExample, to be run as root, once the unit has been plugged in DFU mode and auto-mounted:\n\n```bash\nFW=ts100.hex\nunset NAME\neval $(lsblk -P -p -d --output NAME,MODEL|grep \"DFU[ _]Disk\")\n[ -z ${NAME+x} ] && exit 1  # Could not find DFU device\numount \"$NAME\"\nmkdir /tmp/mntdfu\nmount -t msdos \"$NAME\" /tmp/mntdfu\ncp \"$FW\" \"/tmp/mntdfu/$(basename $FW|tr a-z A-Z)\"\nsync\numount /tmp/mntdfu\nrmdir /tmp/mntdfu\n```\n\nDevice will reboot and automount will rerun if not disabled.\nCheck the extension of your firmware, it should be `.RDY` now.\n\n## FAQ\n\n#### The file is showing up with the extension `.ERR`\n\nThis can occur during the programming process if any of the checks in the bootloader fail. This is often triggered by anti-virus software or using a non-Windows host OS.\n\nFirst, try just copying the file a second time.\n\n1. Attach the iron in DFU mode.\n2. Copy the `.hex` file to the device.\n3. The device disconnects and connects with the `.ERR` file.\n4. Copy the same `.hex` file again **⛔ DO NOT TRY AND DELETE THE OLD ONE ⛔**.\n5. The device will disconnect and reconnect again.\n6. The device _should_ now have the `.RDY` file.\n7. You're done.\n\nIf this fails and you are on Mac or Linux reading the wiki page about programming can help. There is also a very long issue thread going through all of the different attempts around this too.\n\nIf you are on Windows, it's often best to try another computer (friends, work, partners etc.).\n\n#### Device randomly disconnects or does not show up in DFU mode\n\n1. Check if the USB cable you are using has the data pins; test it on another device. There are a surprisingly large number of micro-USB cables that are power _only_.\n\n2. Try other USB ports. Often different USB controllers will interact with the units differently due to design quirks in the Miniware design.\n\n### Alternative bootloader\n\nIf you are an advanced user, and you have used `usb-dfu` tools before, or you would like to learn; there is an alternative bootloader for these irons.\nThis will **NOT** show up as a USB storage drive, but instead show up using a standard DFU protocol device. You can then use dfu tools or GUIs to upgrade the iron using the `.bin` files that are posted to the releases page.\n\nTo install this alternative bootloader, follow the instructions [here](https://github.com/Ralim/IronOS-dfu/blob/mainline/docs/Bootloader.md).\n\nNote that this is only recommended for users who know what they are doing. If you don't understand how this works, please don't flash this.\n"
  },
  {
    "path": "Documentation/Flashing/TS80(P).md",
    "content": "# Flashing / Upgrading your iron\n\n## Downloading source file\n\nIn the development of this firmware, there are three _types_ of firmware released.\nThese are the \"Main\" stable releases, which generally have high confidence in being bug free.\nRelease candidates are released slightly more often, and these are generally perfectly fine for everyday use. These are released early to allow for translation checking and for wonderful people to help spot bugs and regressions.\nFinally, there are the \"mainline\" builds, which are built from the main git branch.\nThese are built on every change and can be found on the Actions tab (see below).\n\n### Main release\n\nMain releases are made to the [releases page](https://github.com/Ralim/IronOS/releases).\nDownload the zip file that matches your model of soldering iron and extract it.\nSelect the appropriate file type for your unit, in general Miniware devices need `.hex` and Pinecil needs `.dfu`.\nFlash according to details below\n\n### Bleeding edge / latest\n\nFor the _latest_ code, you will need to download the zip file from the artifacts page on the build for what you want.\nHead to the [Actions](https://github.com/Ralim/IronOS/actions) page and then select the run for the appropriate branch you would like.\nIn general you probably want `master`.\n\nOnce you click on a run, scroll down to the \"Artifacts\" section and then click on your model to download a zip file.\nThen this works the same as a production release (use the correct file).\n\n# TS80 / TS80P\n\nThis is completely safe, but if it goes wrong just put the corresponding `.hex` file from [the official website](https://e-design.com.cn/en/NewsDetail/4203645.html) ([mirror backup](https://github.com/Ralim/IronOS-Meta/tree/main/Firmware/Miniware)) onto the unit and you're back to the old firmware. Downloads for the `.hex` files to flash are available on the [releases page.](https://github.com/Ralim/IronOS/releases) The file you want is called TS80.zip or TS80P.zip. Inside the zip file (make sure to extract the file before flashing with it) will be a file called `TS80_{Language-Code}.hex`/`TS80P_{Language-Code}.hex`.\n\nOfficially the bootloader on the devices only works under Windows (use the built-in File Explorer, as alternative file managers or copy handlers like Teracopy will fail). However, users have reported that it does work under [Mac](#mac), and can be made to work under [Linux](#linux) _sometimes_ (look for details below).\n\n1. Hold the button closest to the tip (MHP30 the left button on the back), and plug in the USB to the computer.\n2. The unit will appear as a USB drive. (Screen will say `DFU` on it.)\n3. Drag the `.hex` file onto the USB drive.\n4. The unit will disconnect and reconnect.\n5. The filename will have changed to end in _.RDY_ or _.ERR_\n6. If it ends with _.RDY_ you're done! Otherwise, something went wrong.\n7. If it didn't work the first time, try copying the file again without disconnecting the device, often it will work on the second shot.\n8. Disconnect the USB and power up the device. You're good to go.\n\nIf you get a message when copying: \"Are you sure you want to move this file without its properties?\" then this can cause an issue where the iron thinks that the file has finished copying before it actually has and can cause a .ERR file. Since this dialog prompt is caused by copying a file from NTFS to FAT (the iron's filesystem) in windows, you can fix this by formatting a thumbdrive as FAT32 and then storing the hex file on that before copying the file to the iron. As there will be no NTFS properties on the file when stored on a FAT32 filesystem, there will be no prompt, and the copy will then proceed normally.\n\nFor the more adventurous out there, you can also load this firmware onto the device using an SWD programmer, for easier installation follow the guide at the end of this document.\n\nOn the USB port, `USB_D+` is shorted to `SWDIO` and `USB_D-` is shorted to `SWCLK` so debugging works without disassembly (attach while staying in the bootloader). Installing [IronOS-dfu](https://github.com/Ralim/IronOS-dfu) is recommended as it allows reliable flashing of binary files with [dfu-util](http://dfu-util.sourceforge.net/).\n\n## Mac\n\nsgr1ff1n (Shane) commented in [issue 11](https://github.com/Ralim/IronOS/issues/11) that upgrading worked on their Mac as per normal:\n\n> I just wanted to say that I was able to update the firmware on my TS100 from the stock version to 1.08 found in this repository using my Mac. I simply followed the same steps however through Finder. I have a MacBook Pro (13-inch, Mid 2012) running Sierra 10.12.4 (16E195).\n\n## Linux\n\nWhile in the past there were reports of unreliable upgrades, the consensus in [issue 11](https://github.com/Ralim/IronOS/issues/11) is that things work mostly as expected in Linux.\n\n@awigen has contributed a script [flash_TS100_linux.sh](https://raw.githubusercontent.com/Ralim/IronOS/master/Flashing/flash_TS100_linux.sh) that works on Ubuntu 16.04 as well as other distros.\n\nIf you want to do it manually (or if the script does not work for some reason) the general procedure is the same as for Windows, the differences are in the way to mount the unit and copy the firmware.\nRemember that after flashing, the firmware filename will have changed to end in `.RDY` or `.ERR` or `.NOT` and only `.RDY` means the flashing was successful!\n\n- The unit has to be mounted as `msdos` type (thanks @balrog-kun for having spotted it). You may disable automount, but unmounting the automounted drive and remounting as `msdos` works fine. You do not need to turn off automounting, but you do need to unmount the device with `umount`.\n- It is recommended to use an all-caps filename for the firmware, even if successful flashing were done with lower case names.\n- Avoid USB hubs, plug directly in your computer.\n- If it fails, try again several times without unplugging. Just let it remount.\n\nExample, to be run as root, once the unit has been plugged in DFU mode and auto-mounted:\n\n```bash\nFW=TS80.hex\nunset NAME\neval $(lsblk -P -p -d --output NAME,MODEL|grep \"DFU[ _]Disk\")\n[ -z ${NAME+x} ] && exit 1  # Could not find DFU device\numount \"$NAME\"\nmkdir /tmp/mntdfu\nmount -t msdos \"$NAME\" /tmp/mntdfu\ncp \"$FW\" \"/tmp/mntdfu/$(basename $FW|tr a-z A-Z)\"\nsync\numount /tmp/mntdfu\nrmdir /tmp/mntdfu\n```\n\nDevice will reboot and automount will rerun if not disabled.\nCheck the extension of your firmware, it should be `.RDY` now.\n\n## FAQ\n\n#### The file is showing up with the extension `.ERR`\n\nThis can occur during the programming process if any of the checks in the bootloader fail. This is often triggered by anti-virus software or using a non-Windows host OS.\n\nFirst, try just copying the file a second time.\n\n1. Attach the iron in DFU mode.\n2. Copy the `.hex` file to the device.\n3. The device disconnects and connects with the `.ERR` file.\n4. Copy the same `.hex` file again **⛔ DO NOT TRY AND DELETE THE OLD ONE ⛔**.\n5. The device will disconnect and reconnect again.\n6. The device _should_ now have the `.RDY` file.\n7. You're done.\n\nIf this fails and you are on Mac or Linux reading the wiki page about programming can help. There is also a very long issue thread going through all of the different attempts around this too.\n\nIf you are on Windows, it's often best to try another computer (friends, work, partners etc.).\n\n#### Device randomly disconnects or does not show up in DFU mode\n\n1. Check if the USB cable you are using has the data pins; test it on another device. There are a surprisingly large number of micro-USB cables that are power _only_.\n\n2. Try other USB ports. Often different USB controllers will interact with the units differently due to design quirks in the Miniware design.\n\n### Alternative bootloader\n\nIf you are an advanced user, and you have used `usb-dfu` tools before, or you would like to learn; there is an alternative bootloader for these irons.\nThis will **NOT** show up as a USB storage drive, but instead show up using a standard DFU protocol device. You can then use dfu tools or GUIs to upgrade the iron using the `.bin` files that are posted to the releases page.\n\nTo install this alternative bootloader, follow the instructions [here](https://github.com/Ralim/IronOS-dfu/blob/mainline/docs/Bootloader.md).\n\nNote that this is only recommended for users who know what they are doing. If you don't understand how this works, please don't flash this.\n"
  },
  {
    "path": "Documentation/GettingStarted.md",
    "content": "# Getting Started\n\nGetting started with IronOS on your Pinecil/TS80/TS80P/TS100.\nIf your device did not come with IronOS already installed, or if you need to update to the latest version; please see the flashing guide for your device:\n\n- [MHP30](https://ralim.github.io/IronOS/Flashing/MHP30)\n- [Pinecil V1](https://ralim.github.io/IronOS/Flashing/Pinecil%20V1/)\n- [Pinecil V2](https://ralim.github.io/IronOS/Flashing/Pinecil%20V2/)\n- [TS80 / TS80P](https://ralim.github.io/IronOS/Flashing/TS80%28P%29/)\n- [TS100](https://ralim.github.io/IronOS/Flashing/TS100)\n\nIt is recommended to update to the newest stable release when you first receive your device to ensure you are up to date.\n\nOnce your Iron has been flashed, on first power on it _may_ warn you about the system settings being reset.\n_Do not panic_; this is 100% completely normal. This is here to note to you that they have been reset to handle the internal structure changing.\n\nIf you receive a warning about the accelerometer or USB-PD not being detected, please see [here](https://ralim.github.io/IronOS/HardwareIssues/).\n\n## The Home screen (or idle screen)\n\nThis is the landing page of the firmware, from here you can choose to either go into the [settings menu](#Settings-Menu) or go into [soldering mode](#Soldering-Mode).\n\nBy default this will show a screen similar to the one below:\n\n![Home Screen](https://raw.githubusercontent.com/Ralim/IronOS/dev/Documentation/images/HomeScreen.png)\n\nNote that this may be drawn mirrored depending on the orientation of your screen (detailed mode shows a different home screen).\n\nThe soldering iron symbol on the screen will appear near the tip. This is here to indicate that pressing the button closest to the front of the iron will enter soldering mode.\n\nAnd naturally, the slider controls icon (or spanner icon in older versions) represents that pressing the button near the rear of the soldering iron will enter the settings menu.\n\nIn the settings, you can turn on a detailed idle screen instead. The buttons still function the same, however, the image will be swapped for a text telling you the current status of the iron with extra details.\n\nDepending on how your device is being powered, at right side of the screen, the firmware will either show the voltage your unit is being provided with, a battery icon (if battery mode is enabled) or a power plug icon.\n\nIf you see an (**X**) where the soldering iron should be, this indicates that the firmware can't see the tip connected. This could indicate a problem with the iron or tip. First, try removing the tip screw and tip and gently reinstalling both; ensure that the tip is seated all the way back. If the issue persists please see the [hardware issues section](https://ralim.github.io/IronOS/HardwareIssues/).\n\nThis OLED screen features burn-in protection; if no buttons or movement have been detected for a while it will automatically blank the screen to reduce burn-in when the iron is left unattended. Any movement or button press will wake the screen.\n\n### Hidden Extras\n\nAdditionally to the two icons shown, there are two \"hidden\" actions that can be performed on this menu.\n\nOn devices that do not support profile mode, if you press and hold the button near the tip (`+/A`), this enters the temperature adjustment screen. Normally this is not required; but if you would like to adjust the set temperature _before_ the tip starts to heat, this can be useful.\n\nIf you press and hold the button near the rear of the iron (`-/B`), it will take you into the [debug menu](https://ralim.github.io/IronOS/DebugMenu/).\n\n## Soldering Mode\n\nWhen you press the button to enter the soldering mode, the iron will instantly start to heat up the tip.\n\nThe firmware defaults to 320 °C as the set point for the soldering mode, however on this screen you can enter into the adjustment screen by pressing either button.\n\nPressing and holding the button near the tip will enter **Boost** mode. This allows a temporary override of the set temperature to a higher (or lower) value. This can be useful as a way to force the tip to a higher temperature to drive more wattage into a large joint when the thermal connection is not ideal.\n\nPressing and holding the rear button will exit soldering mode and land you back at the home screen. You can also do this by pressing both buttons at once and this will also work, this is a bit harder to do but is kept for compatibility with the Miniware firmware.\n\nPressing and holding **both** buttons at once will enter locked mode, which will prevent the buttons from doing anything. You can in the settings allow boost mode in locked mode optionally. This can be useful if you find yourself hitting the buttons and entering into the temperature adjustment screen by accident.\n\n### Idle Sleep\n\nIf the iron detects a period of time without any significant movement, it will enter sleep mode. This is indicated with a screen graphic similar to Zzzz (or text in detailed mode).\n\nIn Sleep mode, the temperature of the iron automatically lowers to 150 °C (default), which is just below the melting point of the solder. This helps reduce rate of oxidation and damage to the iron tip. In general, when not using the iron, unplug it or let it sleep to increase the longevity of replaceable tips. The default sleep temperature can be customized.\n\nSimply picking up or moving the iron will wake it back up into soldering mode. You can also press any button and this will also wake the iron up.\n\n#### Optional Hall Effect Feature (Pinecil only):\n\nPinecil has an unpopulated footprint (U14) for a hall effect sensor (Si7210-B-00-IV). Adding the sensor and placing a neodymium magnet on the holder stand will trigger Pinecil to sleep after it enters the stand, and Zzzz will appear on-screen. The magnet is positioned on the stand in proximity to the sensor/handle which then activates one of 10 user defined settings (0=off, 1=lowest sensitivity, 9=highest sensitivity). Read the Hall Sensor document for [details on installation](https://ralim.github.io/IronOS/HallSensor/).\n\n### Idle Shutdown\n\nIf, after entering sleep mode, the iron still does not see movement for a much longer time (default=10 minutes); it will shut down and return to the home screen.\n\n## Profile Mode (MHP30 only)\n\nOn devices that support it, a long press on `(+/A)` takes you into profile mode, which initiates the profile selected in the relevant settings.\n\nProfile mode plays out as follows:\n\n1. Check if the temperature is below 55C. If not, you will get a warning and cannot enter profile mode.\n2. Preheat by raising the target temperature to the configured preheat temperature with the configured preheat speed.\n3. Wait for the device to reach the preheat temperature.\n4. Gradually move the target temperature to the configured end temperature of the first phase over the configured duration. \n5. Wait for the device to reach the end temperature. \n6. Repeat steps 4 and 5 for the next phases until there are no more phases configured.\n7. Cool down by lowering the target temperature to 0 with the configured cooldown speed. \n8. Once the temperature is below 55C, sound the buzzer (if available) and exit profile mode. \n\nYou can manually exit profile mode manually in the same way as the soldering mode, by pressing and holding the rear button or pressing both buttons at once.\n\n## Settings Menu\n\nThe settings menu is the most evolving aspect of the firmware, so each option is not documented here. However, do not panic, as every menu option has an on-screen description so you don't _need_ to come back here to figure them all out.\n\nTo navigate the menu, the two buttons act separately.\nThe rear button (`-/B`) is pressed to enter the menu and scrolls down the main options, and the other front button (`+/A`) will enter and change the current option.\n\nTo see a description of an option, just wait, and after a few seconds, it will scroll across the screen.\n\nThe menu is comprised of a 'main menu' of categories and then sub-items that allow you to adjust parameters.\n\nYou can long hold buttons to change through options faster, and there is some acceleration when holding the buttons.\n\nThere is a small scrollbar that appears along the right edge of the screen to indicate how far through the current list you are (looks like a dot).\n\nAdditionally, this scrollbar will blink rapidly when you are on the last value in a range of a sub-menu. For example, if you are in Motion Sensitivity, which has a range of 0 - 9, it will blink when you are at 9.\n\nI highly recommend taking a few minutes to go through all of the options in the menu to get a feel for what you can change, almost every aspect of the internal system is adjustable to suit your needs.\n\nIf you want to start over, simply go to Advanced settings > Restore default settings, confirm using the front (`+/A`) button. This sets all menu items to defaults, and keeps the same version firmware.\n"
  },
  {
    "path": "Documentation/HallSensor.md",
    "content": "# Hall Effect Sensor\n\n## Sleep Mode Menu\n\nIn sleep mode, the iron automatically lowers the temperature to 150°C (default). This default setting was chosen as it is just below the melting point of a wide range of solders. A lower standby temperature helps reduce the oxidation rate and prevent damage to the soldering tips. As a general rule, when not in use, unplug the unit or let it go into sleep mode to extend the life of the replaceable tips. The default sleep temperature can be adjusted to your preference.\n\nSimply moving the iron or pressing any button will wake it back up into soldering mode. The sensitivity is adjustable. It is recommended to adjust this to suit your environment so that it reliably stays in sleep mode when not in use, but does not go into sleep mode when in use. (This may vary depending on the amount of movement during soldering.)\n\n### Optional Hall Effect Feature (Pinecil (v1/v2) only):\n\nInside the [Sleep Menu](https://ralim.github.io/IronOS/Settings/#setting-sleep-temp) is an additional type of sleep setting. Pinecil has an unpopulated footprint (**U14**) for a hall effect sensor, Silicon Labs **Si7210-B-00-IV**. After installing the hall effect sensor (HES), it is possible to auto-trigger Pinecil to enter sleep mode when it enters the stand, and _Zzzz_ will appear (or text in detailed mode). This could be a fun enhancement for any Pinecil and adds a feature typically only found in more expensive high-end irons. The HES is available at many electronic stores for ~$2-$6.\n\nAfter installing the HES on the PCB, place a magnet on the stand close enough to the sensor to activate one of ten user selectable settings.\n\n- 0=off, 1=1000, 2=750, 3=500, 4=250, 5=150, 6=100, 7=75, 8=50, 9=25 (9 has the highest sensitivity to magnets)\n- Setting of 1 might be used if you solder on PCBs with magnets and do not wish Pinecil to auto-sleep constantly. A very strong/large magnet would be required on the stand to activate the sleep mode if you use setting 1.\n- Setting of 9 would be useful if you only had a small magnet and are not concerned about Pinecil falsely triggering sleep mode near magnetized items/tools.\n- Actively watch the _hall_ number change while you slowly move the magnet around to seek the best locations & whether you have too many or too few magnets. Position the magnet(s) where you have the highest hall number will ensure consistent sleep mode when you place the iron in the stand. This requires some experimenting.\n- [See debug menu for how to display the _Hall_ number](https://ralim.github.io/IronOS/DebugMenu/)\n- Note that the sensor is physically located near the copper contacts for the tip at the front of the handle. [Reference Schematics U14](https://files.pine64.org/doc/Pinecil/Pinecil_schematic_v1.0a_20201120.pdf).\n- Neodymium magnets are recommended. If using small magnets, 2-3 may be required, but too many could also be detrimental.\n- Positioning/type/quantity of magnets is important for best results. Sometimes too many magnets breaks the effect by distorting the magnetic field **[as seen in this demo video](https://www.youtube.com/shorts/afkqKwCX00I)**. The video shows magnets at the top of the stand, and the pinecil goes correctly into Zzzz with _only_ those magnets. When more magnets are added at the side, the Pinecil did not go to sleep, which is contrary to the goal. See the PDF below for details on magnetic fields with SI7210-B.\n- Orientation of North and South faces of magnets is important to increase reaction of the hall sensor [see data sheet SI7210-B-00-IV](https://www.silabs.com/documents/public/application-notes/an1018-si72xx-sensors.pdf).\n"
  },
  {
    "path": "Documentation/Hardware.md",
    "content": "## Notes on the various supported hardware\n\nBelow are short summaries / notes around the hardware. This is not an in-depth comparison of the features of the units. Please do your own research before purchasing.\n\nDue to descisions out of our control, Miniware no longer provides source-code/schematics/support for any open source firmware on their devices. This does mean that only (TS100/TS80/TS80P) are \"open\" to any extent. TS80P is pushing that as it was never open at all but just happens to be very close to the TS80. While this generally shouldn't affect the performance of the device, it does mean that their newer products can be slow to be supported or some issues are harder to resolve.\n\nSequre has so far been supportive of the S60 by providing schematics.\n\nThe Pine64 units (Pinecil) are schematics-available (i.e you can download them on the Pine64 Wiki). They are currently the only vendor that has provided financial support of the project. They are also the only vendor that allows contact directly to the engineering teams for hardware issues. This results in generally better support for these devices. It does **not** mean that this firmware is designed around them, but it does help however that they are designed with this firmware in mind as Ralim talks to them. Where possible features are designed to work across all devices but the time for support may vary depending on the hardware and its quirks.\n\n\n## A quick note on power supplies\n\nFor all devices listed **except** the MHP30:\n\nThese soldering irons do *NOT* contain DC/DC converters.\nThis means that your power at the tip is a function of the supplied voltage. Just because the iron \"supports\" running at a wide range of voltages, you should always use a voltage near the upper limit where possible.\nIt is highly recommended to use a PD adapter where possible as this allows the iron to _know_ the limitations of your supply.\nThe marked irons can only turn the tip on and off in software, this means that they can't control the maximum power drawn from the supply. This is why when using PD the iron may select a lower voltage than your power supplies maximum. This is to prevent your power supply failing from over current. For more information about power management underhood, please, [see the related documentation section](https://ralim.github.io/IronOS/Power/).\n\nFor the MHP30, it contains a buck DC/DC, which means it can utilise most power supplies fairly well, but you should still aim for highest voltage that is reasonable to use.\n\n\n### TS100\n\nThe TS100 was the first supported soldering iron, and is generally a very capable device.\nIts now generally not reccomended to buy new as other devices have all of its features and more, and can often be the same price or cheaper. It's still fully supported though, nothing will be taken away from it.\n\n- can run from 9-25V DC;\n- provides a power range that is determined by the input voltage;\n- voltages below 12V don't overly work well for any substantial mass;\n- the original firmware can be found [here](https://e-design.com.cn/en/NewsDetail/4203645.html)([mirror backup](https://github.com/Ralim/IronOS-Meta/tree/main/Firmware/Miniware)).\n\n![](https://brushlesswhoop.com/images/ts100-og.jpg)\n\n### TS101\n\nThe TS101 is the direct replacement of the TS100 with the same tip compatibility.\nIt adds a spring pressure tip holding mechanism instead of using a screw so tips are easier to swap on the fly (But are held less securely and can pull out depending on the use case). It adds USB-C PD support and the hardware is compatible with 28V EPR power supplies (under both IronOS and official firmware).\n\nIt unfortunately uses an STM32 clone MCU with quirks, so performance of the screen isn't as good as it could be but its perfectly usable. The bootloader for programming is the biggest weakness of this device and programming can be a pain. Fortunately, IronOS is relatively stable feature wise, so you shouldn't need to update the device often.\n\nThe Miniware bootup logo is burned into their bootloader, so IronOS cant remove this. IronOS can show your own logo when it starts however. There are quirks to loading a logo on this device, so be sure to read the documentation if you are coming from other devices.\n\n### TS80\n\nTS80 is a successor to TS100, it moves to custom smaller tips that perform better at lower wattages. It is optimised for a 9V/2A Quick Charge 3.0 power supply. This is commonly found on older power banks on the USB-A port.\nIt does **not** support USB-PD and will not work when powered from a USB-C power supply in most cases.\n\n- uses _Quick Charge 3.0_ / _QC3_ capable charger only (18W max);\n- doesn't support PD as it is not designed on the hardware level;\n- the original firmware can be found [here](https://e-design.com.cn/en/NewsDetail/4203645.html)([mirror backup](https://github.com/Ralim/IronOS-Meta/tree/main/Firmware/Miniware)).\n\n![Image of TS80](https://core-electronics.com.au/media/catalog/product/4/2/4244-01.jpg)\n\n\n### TS80P\n\nThe TS80P is the direct successor to the TS80 and essentially what the TS80 should have been from its debut. It is nearly identical except it adds USB-PD support for far better compatibility with modern power banks as well as a faster tip removal method.\n\n- supports _Quick Charge 3.0_ (_QC3_: 9V/2A,12V/1.5A 18W max);\n- supports _Power Delivery_ (_PD_: 9V/3A & 12V/3A, 30W max)\\*\\*;\n- the original firmware can be found [here](https://e-design.com.cn/en/NewsDetail/4203645.html)([mirror backup](https://github.com/Ralim/IronOS-Meta/tree/main/Firmware/Miniware)).\n\n\\*\\*: use valid PD device that supports 12V/3A as power source to get full 30W potential, otherwise the iron will fall back to 9V/18W power mode.\n\n![](https://static.eleshop.nl/mage/media/catalog/product/cache/10/image/800x/040ec09b1e35df139433887a97daa66f/s/-/s-l1600_5.jpg)\n\n\n### MHP30\n\nMHP30 is a **M**ini **H**ot **P**late:\n\n- accelerometer is the MSA301, this is mounted roughly in the middle of the unit;\n- USB-PD is using the FUSB302;\n- the hardware I2C bus on PB6/7 is used for the MSA301 and FUSB302;\n- the OLED is the same SSD1306 as everything else, but it’s on a bit-banged bus;\n- the original firmware can be found [here](https://e-design.com.cn/en/NewsDetail/4203645.html)([mirror backup](https://github.com/Ralim/IronOS-Meta/tree/main/Firmware/Miniware)).\n\n\n### Pinecil\n\nPincecil:\n\n- first model of soldering iron from PINE64;\n- the default firmware can be found [here](https://files.pine64.org/os/Pinecil/Pinecil_firmware_20201115.zip).\n\n![](https://pine64.com/wp-content/uploads/2020/11/pinecil-bb2-04.jpg?v=0446c16e2e66)\n\n\n"
  },
  {
    "path": "Documentation/HardwareIssues.md",
    "content": "# Hardware Issues\n\nWhile we would love everything to work perfectly, sometimes that just doesn't happen.\nPlease do not email maintainers directly, these will generally be ignored.\nKeep issue discussions to GitHub issues or the discussions page so that the whole community can help and work together.\n\n## No Accelerometer detected\n\nIf your iron was previously working, this could be a bug (and we are very sorry). Please check the currently open and recently closed issues to check if anyone else has run into this. You can try going back to a release on the firmware to test if this is a new issue before opening an issue.\n\nIf this is a new iron, also feel free to open an issue if you don't see any; a vendor _could_ have changed the model of the accelerometer on us without warning _again_. In which case, support should come shortly.\n\nIf your iron is new, there is a slim chance your accelerometer may be DOA and need replacement.\n\n**Note this warning will only be shown the first few times until settings are reset**\n\n## No USB-PD IC detected\n\nGenerally, this means either something went very awry in the firmware, or the chip is not answering as would normally be expected. Try rolling back to an earlier release to confirm if the issue still persists then the device may need repair. If you have some form of seller protection/support, you most likely want to reach out to this to be safe. If you don't, you can always attempt to replace the IC yourself. As of writing both the TS80P and Pinecil use the FUSB302.\n\n**Note this warning will only be shown the first few times until settings are reset**\n\n## No tip detected\n\nIf your tip is not being detected, the most likely cause is that the heater element inside the tip has been damaged from over-temperature, being dropped or bad luck. As the heater coil is part of the temperature measurement circuit neither will work if it's damaged.\n\nThe best way to see if this is the case is to measure the resistance across the contacts to the tip using a multimeter.\nyou are expecting to see measurements in the range of 4-10 ohms. Anything higher than 10 ohms is _generally_ an issue.\n\n## Iron will not heat up and displays a high temperature\nCheck the Rtip and CHan numbers ([see debug menu](https://ralim.github.io/IronOS/DebugMenu/)). Extremly high CHan is suspect to a problem with the cold junction compensation temperature sensor.\n\nFor Pinecil V1, inspect near U10 which is the TMP36 sensor ([see issue here](https://github.com/Ralim/IronOS/issues/1234)). You may be able to reflow/resolder the TMP36 chip at U10 to correct a weak solder joint.\n\nIf it worked on older firmware, but not on 2.16+, weak solder joints are suspect. The newer firmware runs the ADC a bit faster to keep tighter control of the tip temperature. Normally this wont cause an issue as the output from the TMP36 is powerful enough to keep up without any issue. But if you have a weak or cold solder joint this could cause issues.\n\nIf the CHan is extremely high, and reflowing the temperature sensor does not resolve the issue; inspect the pins in the main MCU, possibly try giving them a light squeeze to the board while watching CHan.\n\nIf you have a different device, follow the same logic and locate the temperature sensor on your device.\n"
  },
  {
    "path": "Documentation/History.md",
    "content": "# Version Changes\n\n## v2.23\n\n\n### High level changes\n\n- Miniware I2C changed to bit-bang for improved compatibility with newer devices with STM32 clone IC's\n- Looping Boot Logo option (loops until button press)\n- More fixes for GD32 clones with Miniware devices\n- Bluetooth BLE is off by default (security)\n- Large internal code refactoring to make the screen drawing more flexible for larger OLEDs\n- Further improvements to drawing on larger screen resolutions\n- 4 Ohm tip support on Pinecil 1/2 + TS10x (Note this is at your own risk, not all hardware is designed for this)\n- Fixes for PPS mode on some USB-PD supplies\n- Rework of thermal runaway detection\n- Fixes to the ID numbers used for operating modes over BLE\n- Rework of the I2C on PinecilV2 to remove issues with temperature regulation and screen glitching\n- Default for USB-PD negotiation changed to use \"safe\" profile, to be conservative in selecting voltages.\n- Fixes for USB-PD to implement device capabilites. This should fix unit reboot issues with some laptops\n- Looots of translation & documentation updates ❤️\n- Fixes for RTOS issues / updated FreeRTOS version\n- Multiple fixes for _MHP30_ to help with clone STM32's\n- Share missing settings over _BLE_ for _Pinecil V2_\n- Add code for `ws2812b` LED mod for _Pinecil V2_ (Must be hand compiled).\n- Add option to swap A/B buttons in Settings menu\n- Disable _\"double slide\"_ animation between home and soldering screens if detailed view is set for both modes.\n\n\n## v2.22\n\n### New Hardware Support\n\n#### Sequre S60\n\nThe [Sequre S60](https://sequremall.com/products/sequre-s60-nano-electric-soldering-iron-support-pd-qc-power-supply-compatible-with-c210-soldering-iron-tips-precision-electronic-mobile-phone-repair-tool-anti-static-soldering-pen?variant=42361945096380) uses JBC tips, which makes it quite useful for the smaller tip types and extra options available.\n\n#### TS101\n\nThe TS101 is the evolution of the TS100, picking up USB-PD.\nIt has otherwise similar tip support to the TS100/Pinecil/PinecilV2.\n\nAbsolutely massive kudos goes to @VioletEternity for her work on the reverse engineering of this. If you at all are helped by IronOS running on this device more credit goes to her than to I. Also big thanks to @whitequark for organising + supporting + magic.\n\n### Features & changes\n\n#### PinecilV2 notes\n\n1. BLE is fixed on all devices.\n2. Bootup Logo support is finalised and working.\n3. Improved the tip control, improving accuracy and remove most oscillations.\n\n#### Profile heating mode for MHP30\n\nThis lets you define a heat profile and run this profile akin to a proper reflow device.\nThis can be used on the MHP30 by long-holding the A button (aka start button).\nProfile can be edited in settings.\n\n#### Note on newer OLED's\n\nTo prevent this release being held up forever, the TS101 and S60 are being released with a limitation on the OLED screen.\nThe current code will only draw to the upper left corner of the screen.\nAssets have been made for rendering this at full size, but the code is not complete yet.\n\n#### Smaller updates\n\n- Filtering added to MHP tilt-exit to make it less sensitive\n- Warning if a tip is detected to be shorted (TS101 + PinecilV2)\n- Translation updates ❤️\n- Documentation updates\n- Lots of tooling and code cleanups\n\n\n## v2.21\n\n### Features & changes\n\n- Bluetooth Low Energy support for PinecilV2\n- Large cleanup of translation files; and refactor of how we handle fonts for translations\n- Fixes for I2C corruption on PinecilV2\n- Option for using adjustable profiles on USB-PD or not\n- Cleanups and improvements to the generated [documents website](https://ralim.github.io/IronOS)\n\n### PinecilV2 notes\n\nFor Pinecil V2 users blisp is currently my recommended CLI tool for updating the device. It is built for all main OS's automatically. This does not apply to V1 devices. If your iron came with a blue grip, its a V1 and update the same as always. If your device came with a green silicone grip its a V2 device.\n\nAlternatively you can use Spagett1's PineFlash tool that should provide a GUI interface for PinecilV1 & PinecilV2.\n\nFor a small number of V2 Pinecil devices there appears to be an interference issue between the Bluetooth Low Energy and some devices; more information here. If this occurs to you, please let us know in the issue and rollback to 2.20 for now.\n\n\n## v2.20\n\n- First \"full\" release for PinecilV2\n- Loots of documentation updates\n- Documentation is [now nicely readable as a site](https://ralim.github.io/IronOS/GettingStarted)\n- A fair collection of bugfixes for PinecilV2\n- Cold Junction Calibration was reworked and now occurs _at next boot_ to make it easier to perform when the device is cold\n\n\n## v2.19\n\n- Bug-fix Infinite Boot Logo\n- Shutdown settings for MHP30\n- Accelerometer sensitivity for MHP30\n- Allow showing unique device ID\n- Bug-fix chance of a power pulse at device boot\n- Updated translations\n- Improved documents, added features table\n\n\n## v2.18\n\n- Support for animated bootup logo's\n- Bootup logo's moved to their own IronOS-Meta repo\n- New Vietnamese translation (limited due to screen size)\n- Fixes for SC7A20 in TS80(P)\n- Updated translations\n- Better Instructions/documents\n\n\n## v2.17\n\n### Features & changes\n\n- Indicate status of VBus for modding Pinecil (debug menu)\n- Better hall effect sensor sensitivity adjustment (larger range with more steps)\n- Temperature increment will \"round\" to nearest multiple of increase amount\n- Build setup migrated to Alpine (You can now build in docker easily, and on PinePhone/PinePhonePro)\n- -> Removed proprietary compiler for Pinecil RISCV now all uses normal gcc\n- -> Removed using the arm specific build of gcc for the one that alpine ships (Miniware devices)\n- Logo generator python script creates `.dfu` files for ease of use with Pinecil\n- Upgrades to translations\n- Support for new GD32103 based TS100 units turning up on the market\n- Raw hall effect reading now shows in the Pinecil debug menu\n- Fixed automatic orientation for newer TS80P's with the SC7 accelerometer\n- User interface slight changes\n- New `metadata.zip` file to allow the Pine Updater to automatically fetch information on releases\n\n### Notes\n\n- VBus mod detection may not play well with all PPS chargers. If your iron reboots when you view this in the debug menu its not a fault. ([#1226](https://github.com/Ralim/IronOS/issues/1226))\n- `metadata.zip` is only designed for use by automatic software, ignore it for normal use\n- More details on Pinecil VBus mod coming via other channels.\n- Hall effect sensor is not fitted to Pinecil's by default, you have to fit this yourself if you want the feature\n- Tweaks to the Accelerometer code means the drivers are slightly more fussy. If you run into any issues let us know in the discussion or issues.\n- -> Release has been updated to build `e065be3` after one bug with the BMA223 was found.\n\n\n## v2.16\n\n- Overhaul of the Timer+ADC setup with help from @sandmanRO\n- Overhaul of the PID with help from @sandmanRO\n- Settings _should_ now upgrade in place to future versions, with resets only happening to new/changed settings\n- Shows error if tip runaway (failed temperature sensor) is detected\n- USB-PD now has a timeout, to allow forcing QC3 negotiation to start faster\n- QC3 Voltages are now adjustable to user desired setpoint\n- Added a small tolerance to allow \"overvoltage\" on QC3 above unit specifications.\n    - Please note: Doing this is entirely at your own risk!\n- New Advanced view that is much nicer to use and a very good daily driver option from @Mel-kior\n- OLED brightness and contrast thanks to @alvinhochun\n- Scrollbar is fixed so it doesnt jump around when menus are shown/hidden\n- Moved to `.dfu` files from `.bin` to make flashing commands easier\n- Every language had translation updates I believe\n- Romanian language added\n\n\n## v2.15\n\n### Features & changes\n\n- MHP30 support\n- Multi-lingual firmware combinations now exist for Pinecil\n- More fine grained voltage controlled options\n- USB-PD improvements (version one and two)\n- More configuration options for power pulse\n- All font / character encoding has been very reworked\n- More translation updates than one can count\n- More languages 😱\n\n### MHP30 support\n\nThe MHP30 is a small reflow station from Miniware.\nThanks to a massive amount of help from @g3gg0 this firmware brings the beginnings of support for this unit.\nAlso kudo's to @Vinigas  and @GoJian for helping with testing.\nThis is not a _final_ version I'm sure, but this is a working, usable version of firmware support.\nPrograms the same as any one Miniware unit using drag and drop.\n**Note: The boot logo scripts will need updates for this unit, so not supported yet.**\n\nThe flood doors are now open for feature requests for this unit :)\n\n\n## v2.14\n\n- Fixing auto rotation bug in the LIS accelerometer in the TS80/TS80P\n- Adds support for two new accelerometers\n  -- SC7A20 (Future Pinecil batch) #786\n  -- MSA301 (Newer TS80P) #761\n- Add warnings if accelerometer or USB-PD IC's are not detected #752\n  -- Only shows for first few boots, to help catch unsupported models\n- Fixed cooling down blink to be sane speed #769\n- Cleanup of threads and slightly faster power negotiation #790\n\n- Updates to flashing scripts #775\n- Documentation updates all over the place (and the wiki was given a cleanup)|\n- Updates to makefile #792 #787\n- Cleanup the folder name of the source code #800\n- clang-format spec setup #801\n\n\n## v2.13\n\n- First _official_ Pinecil release\n- All of the wire for Pinecil releases added\n- Updated Translations\n- Delay accelerometer to help with entering sleep on startup\n- Dual speed PWM to help with power limit control\n- Improve heat up time\n- Adds locking mode\n- Improved docs all over the place\n- Repo rename occured TS100 -> IronOS\n- Hall effect sensor support added (not fitted in Pinecil but optional)\n- QC 20V support for Pinecil\n- CI upgrades for faster builds\n- Fixed bug with accelerometer model on Pinecil\n- Rework of all of the temperature curves for better accuracy\n\n\n## v2.12\n\n- Only released as pre-release\n- [TS80P] Improvements to the PD negotiation to handle a few more adapters cleanly\n- Pause on the last item in a list\n- Clean up the menu (removed both enables and settings, so that you can turn things off easier)\n- Removing the very old single line menu style.\n\n\n## v2.11\n\n- First TS80P support\n- Added in a USB-PD driver stack for the FUSB302\n- Fixed some graphical glitches\n\n\n## v2.10\n\n- GUI polish (animations and scroll bars)\n- Power pulse to keep power supplies alive\n- Adjustable tip response gain\n\n\n## v2.09\n\n- Adjustable steps in temperature adjustment\n- Git hash now in build string\n- Adjustable language to set if US units are available or not\n- Some minor QC3 improvements\n\n\n## v2.08\n\n- Fixes auto start in sleep mode\n- Power limiters\n\n\n## v2.07\n\n- QC fixes\n- Cosmetic fixes for leading 0's\n\n\n## v2.06\n\n- Warning on settings reset\n- Temp temp re-write\n- Display calibration offset\n- Hide some leading 0's\n- Menu timeouts\n\n\n## v2.05\n\n- Language updates\n\n\n## v2.04\n\n- GUI updates\n\n\n## v2.03\n\n- Support for new accelerometers\n\n\n## v2.02\n\n- Adds small font\n\n\n## v2.01\n\n- Newer settings menu\n\n\n## v2.00\n\n- Complete re-write of the low layer system to use the STM32 HAL for easier development\n- This allowed easier setup for the new ADC auto measuring system\n- Better tip PWM control\n- Moved to FreeRTOS for scheduling\n- Complete re-write from blank\n- Added detailed screen views\n- Added smaller font for said screen views\n\n\n## v1.17\n\n- Added blinking cooldown display\n- Allowed smaller sleep timeout values\n- New font!\n- Automatic startup option\n\n\n## v1.16\n\n- Added automatic rotation support\n- Added power display graph\n\n\n## v1.15\n\n- Added support for a custom bootup logo to be programmed via the DFU bootloader\n\n\n## v1.14\n\n- Changed input voltage cutoff to be based on cell count rather than voltage\n\n\n## v1.13\n\n- Swapped buttons for menu to prevent accidentally changing first menu item\n- Added auto key repeat\n\n\n## v1.12\n\n- Increases sensitivity options to be 1\\*9 with 0 off state\n- Fixes issue where going from COOL \\*> soldering can leave screen off\n\n\n## v1.11\n\n- Boost mode\n- Change sensitivity options to be 1\\*8\n\n\n## v1.10\n\n- Adds help text to settings\n- Improves settings for the display update rate\n\n\n## v1.09\n\n- Adds display modes, for slowing down or simplifying the display\n\n\n## v1.08\n\n- Fix settings menu not showing flip display\n\n\n## v1.07\n\n- Adds shutdown time to automatically shutdown the iron after inactivity\n\n\n## v1.06\n\n- Changes H and C when the iron is heating to the minidso chevron like images\n\n\n## v1.05\n\n- Adds ability to calibrate the input voltage measurement\n\n\n## v1.04\n\n- Increased accuracy of the temperature control\n- Improved PID response slightly\n- Allows temperature offset calibration\n- Nicer idle screen\n\n\n## v1.03\n\n- Improved Button handling\n- Ability to set motion sensitivity\n- DC voltmeter page shows input voltage\n\n\n## v1.02\n\n- Adds hold both buttons on IDLE to access the therometer mode\n- Changes the exit soldering mode to be holding both buttons (Like original firmware)\n"
  },
  {
    "path": "Documentation/Logo.md",
    "content": "# Startup Logo / Animation\n\nWhen the device starts, you can have it optionally show either a static image or an animation. You can also set if these should stay on the screen or dismiss after some amount of time.\nThese can be an elegant way to personalise your device or just mark it as your one at a meetup where there may be multiple.\n\nAll devices supported by IronOS support this logo, and follow a similar process for setting one up. Please read the below general information as well as any model specific notes.\n\nBootup logos are stored at the end of the flash storage in the Iron; next to the user settings. By locating them at the end of storage they are not erased during the normal firmware upgrade process. Once a logo is set it should stay (unless we need to change things in the main firmware); so to erase your logo you will also find that we generate an erase file. Alternatively your method of flashing _may_ support doing a full erase flash which will also work for this.\n\n## Generating the Logo files\n\nBecause logos are stored at a fixed location in the device's internal flash; we can use the same method to flash these as you would normal firmware.\nThis does also mean that we need to convert the image/animation file into the format that IronOS understands.\n\nIronOS uses a pre-processed file format to dramatically reduce the amount of space required to store the image; allowing for animations and saving space.\n\nIn the [IronOS-Meta](https://github.com/Ralim/IronOS-Meta) repository is a `python` script to convert images into this pre-processed file format.\nAdditionally, memebers of the community have contributed back their logo images as well. We provide these pre-converted for all models and ready to use in [IronOS-Meta/releases](https://github.com/Ralim/IronOS-Meta/releases).\nDownload the zip for Pinecil or Miniware and then install using the instructions in the Flashing section below.\n\nIf you want to make custom art then it needs to be converted with the Python script.\nYou can checkout the repository or use the download-as-zip button in the Github web interface to download the code.\n\nInside the download code is a `Boot Logos` folder, inside here is the python script required for logo conversion.\nIt is easiest if you copy your logo file to be converted into this folder too, in order to keep commands shorter.\n\nThe image can be in color and any size, but it will be resized and converted to 1-bit color. However, it looks best if you create a 96x16 image (`png` or `bmp`) in any image editor and color the pixels black & white manually. The thresholding used for converting colour to B&W may not always work as well as one would hope.\n\nThe converter requires at least Python3 and Pillow apps as well as the IntelHex library for Python. Follow online instructions for installing Python, Pillow, and IntelHex on your machine. Any reasonably recent version should work well.\n\nWhen running the script on the Windows operating system it is recommended to use `Powershell` rather than the old `Command Prompt`.\n\nFor installing pillow, you can install it via your package manager (Debian and similar distros) or via pip. To install via pip the command should be `python -m pip install pillow`.\n\nFor installing IntelHex you can use the same pip command as above but replace `pillow` with `intelhex` so that it becomes `python -m pip install intelhex`.\n\nIn your shell you can now execute `python img2logo.py input.png out -m ${model}` to convert the file `input.png` and create output files in the folder `out`.\nThe model should be replaced by one of the following options:\n\n- `miniware` for older Miniware Irons -> TS100, TS80, TS80P\n- `pinecilv1` for the Pinecil V1\n- `pinecilv2` for the Pinecil V2\n- `ts101` for the Miniware TS101 [^1] [^2]\n- `s60` for the Sequre S60 [^1]\n- `mhp30` for the Miniware MHP30\n\nDifferent models are used for different flash locations for the image storage.\nThis means that files are **not** interchangeable between devices. If you are flashing multiple devices you will need to create a different file for different models.\n\nAfter processing its expected to have a `.hex` and `.dfu` file created to be used. Which one to use will depend on your device.\n\nNote: make sure your image file is in the same folder as script files (img2logo.py, output_dfu.py, output_hex.py).\n\n[^1] Note that these devices have larger resolution screens that the logo system supports right now. Fixes are coming for this soon, roughly scheduled for 2.23.\n[^2] The TS101 requires extra steps, see below.\n\n### TS101 Quirks\n\nWhen Miniware designed the TS101 they cut cost by using an STM32 clone with some odd quirks. They also re-wrote their USB bootloader, which has introduced new bugs for us to deal with.\nTheir bootloader appears to have kept the existing limit of not being able to flash small hex files, but they no longer fall for the older \"just repeat the content\" trick and instead reject the file.\nAdditionally, while the MCU in use has 128K of flash, their bootloader (at least for me) fails to write to anything above 99K. It _looks_ like a watchdog reset or hard crash. Unsure.\n\nThis has flow on effects, where the settings can still be located in the upper ~28K of flash, but it cant be used for anything we flash over USB.\nOf that 100K we can use, they waste 32K of it for their bootloader (Old bootloaders were 16K).\nThis means the main \"app\" of IronOS is limited to around 67K (100K-32K for bootloader, -1K for logo).\n\nFor this device the Logo is not located at the end of flash but instead at the last writable page (99K).\n\nAdditionally, as we need to do a large write, to avoid having to waste more flash space; the logo is merged with the normal firmware. This means that the firmware and logo are flashed together once.\nFuture updates can be done without merging as it will leave the logo data there as normal firmware doesnt touch that area of flash.\n\nTo do this, download the latest version of IronOS and merge it with the logo using the `--merge` command line argument.\n\nTo create the logo file for a TS101 the full command looks like `python3 img2logo.py <image file path> <output folder path> -m ts101 --merge <Path to main firmware>`.\n\nFor this reason, there are no TS101 logo's generated by the IronOS-Meta repo.\n\n## Flashing the Logo\n\n### Upload via virtual disk (TS100,TS101,TS80,TS80P,S60,MHP30)\n\nIf you normally update your firmware by having your device show up as a flash drive this is the method for you.\nThis applies to all Miniware + S60 devices running the stock DFU bootloader.\n\nPlace your device into update mode (usually by holding the B button when connecting your device to your pc via USB).\nUpload the `.hex` file you created earlier as if it was a firmware update. Do any normal tricks required for firmware flashing if any are required.\nAfterwards the firmware should indicate that it has worked (often by creating a `.rdy` file).\n\nAt this point unplug your iron and re-connect it to power to start normally and the logo should welcome you.\n\n### Upload via GUI flash tool (PinecilV1/V2)\n\nIf you normally upload your firmware using a helper application, they should accept the files from the bootlogo the same as the normal firmware.\nTry the `.dfu` file first and then the `.hex`. If neither work then the application may not be updated to be able to handle boot logos. And you may need to use a different/newer tool.\n\n### Upload via dfu-util (PinecilV1/IronOS-DFU)\n\nFor the PinecilV1 and for any devices that have been converted to use `IronOS-DFU` as the bootloader you can flash these via the `dfu-util` command line tool.\nFor these flash as per usual using the `.dfu` file. Afterwards power cycle and the logo should show up.\n\n### Upload via blisp (PinecilV2)\n\nFor the PinecilV2 we suggest `blisp` as the command line tool to use if you are not using a GUI tool. `blisp` has been updated to accept `.dfu` files as well as the `.bin` files it historically used. As such you use the `.dfu` file for the logo and flash as per normal otherwise and it will work and reboot at the end. It should show you your new logo after flashing.\n"
  },
  {
    "path": "Documentation/Menu.md",
    "content": "# Menu System\n\nIn this firmware for these soldering irons, all settings are adjustable on the device itself. This means a computer is **not** required to change any setting.\n\n## Soldering mode\n\nIn this mode the iron works as you would expect, pressing either button will take you to a temperature change screen.\n- Use each button to go up/down in temperature. Pressing both buttons exits the temperature menu (or wait 3 seconds and it will time out).\n- Pressing both buttons or holding the rear button (`-/B`) will exit Soldering Mode.\n- Holding the front button (`+/A`) will enter [Boost mode](https://ralim.github.io/IronOS/Menu/#boost-mode) (if enabled).\n\n## Profile mode (MHP30 only)\n\nIn this mode, accessible by long pressing `(+/A)`, the configured profile will be initiated.\n- You cannot adjust the temperature or enter boost mode.\n- Pressing both buttons or holding the rear button (`-/B`) will exit Profile Mode as well.\n\n## Settings mode\n\nThis mode allows you to cycle through all the options and set custom values.\nThe menu is arranged so that the most often used settings are first.\n\n- The rear button (`-/B`) cycles through the main options. (declines i.e. Additional warning to proceed.)\n- The front button (`+/A`) either enters a submenu or changes the selected option. (accepts i.e. Additional warning to proceed.)\n- If the device is unplugged before exiting the main menu settings will not be saved.\n- To exit the menu, either continue to press (`-/B`) or hold it until the idle screen is reached. Alternatively, you could press (`-/A`) & (`-/B`) simultaneously to exit the submenu and once more to exit the main menu.\n- If you idle on a setting (i.e., don't press any buttons), after 3 seconds, the screen scrolls a brief description (mini help guide).\n- Enter submenus using the front button (`+/A`) if you are going to change it or wish to view it.\n- Scrolling through the all options of a submenu will return you back to its entry location.\n\n### Calibrating input voltage\n\nDue to the tolerance on the resistors used for the input voltage divider, some irons can be up to 0.6 V out on the voltage measurement.\nPlease calibrate your iron if you have any issues with the cutoff voltage. This calibration is not required if you have no issues.\nNote that cutoff messages can also be triggered by using a power supply that is too weak and fails under the load of the iron.\n\nTo calibrate your iron:\n\n1. Measure the input voltage with a multimeter and note it down.\n2. Connect the input to your iron.\n3. Enter the settings menu\n4. Under the Advanced submenu\n5. Select the calibrate voltage option\n6. Use the front and back buttons to adjust the displayed voltage to minimize the error to your original measurement\n7. Press both buttons at the same time to Save and Exit to the menu\n\n### Calibrate Tip CJC\nThis calibrates the [Cold Junction Compensation](https://ralim.github.io/IronOS/Temperature/) *(CJC)* for the tip. This is normally not needed unless you have an issue with tip temperature or your tips are wearing out prematurely. Changing tip lengths does not necessarily mean a calibration is needed. Check first that your tips are not defective and measured resistance is close to specifications *[Pinecil / TS100 short tips **6.2 Ω**, long tips **8 Ω**, TS80/P ~**4.5 Ω**]*.\n\nWhat this is for:<br>\nSome tips have an offset on their readings which causes issues, i.e. The actual temperature of the tip is much higher than displayed. Follow the steps below to calibrate this.\n\nCaution:<br>\nIf the method below is not followed, the iron could be worse than before calibration. If you need to repeat the method, first unplug and let the handle/PCB cool down to room temperature.\n\n1. Connect power to your device.\n2. Go to **`Advanced Settings`** using (`-/B`) and press (`+/A`) to select it. Use (`-/B`) to scroll to **`Calibrate CJC at next boot`** and confirm with (`+/A`).\n3. Accept the *'warning text'* with (`+/A`).\n3. Exit the settings menu as usual by pressing and holding (`-/B`).\n4. Unplug you device.\n5. **Critical: Make sure a tip is attached & wait until the tip & handle are at room temperature.** (Wait a reasonable amount of time after having used the device.)\n6. Power the device and ideally keep it out of your hands (You know it might get warm.).\n7. The display shows **`calibrating ....`** for a short time while the device measures and compares the tip and handle voltages.\n8. **`Calibration done!`** is displayed for 3 seconds. The new offset value can later be viewed in the **`Debug menu`**.\n9. Calibration is done and the device proceeds booting.\n\nNote: offsets are dependant on your tip, temperature sensor, and the MCU. It's the culmination of tolerances at rest. Typical values are 700-1000 range. This is only designed to be used at boot while cold (ambient / room temperature), as temperatures drift apart as soon as power is connected. Doing this reading repeatedly could result in wide varience of the offset number and/or incorrect calibration.\n\n### Boost mode\n\nThis allows you to change the front button (`+/A`) to become a boost button when you hold it for > 2 seconds. A boost button changes the soldering temperature for short periods. For example, when soldering a big joint and you need a much higher temperature, hold the (`+/A`) button down and it will temporarily increase the temperature to your 'boost' setting. When you release the button, the temperature will gradually go back to the normal set temperature.\n\nThe boost temperature is set in Soldering settings.\n"
  },
  {
    "path": "Documentation/PortingToNewDevice.md",
    "content": "# Requesting support for a new device\n\nIronOS is largely designed to run on devices that are using _fairly_ modern microcontrollers at their core. Generally this means an ARM Cortex or RISC-V processor.\nAt this point in time it is not planned to support 8051 or similar cored devices. This is largely due to the reliance on FreeRTOS at the moment.\n\nWhen requesting a port for a new device, please try and find out if the hardware meets the below requirements.\n\nThe feature list's below are organised into three categories; Hard requirements that as of current must be met, soft requirements that _should_ be met for full featured performance and the final category of planned _but not yet implemented_ features; which can be implemented but can result in delays as these are not yet implemented.\n\nAside from the below, keep in mind IronOS is really designed for soldering irons. This has expanded out into hot-plates as they are exceptionally similar devices.\n\n## Hard requirements\n\n1. Supported processor (Arm Cortex or RISC-V). (Though generally anything that has an existing FreeRTOS port is possible).\n2. 64K of flash or larger (See note A)\n3. 16K of ram or larger\n4. Device has one or more heating elements that can be controlled by a main temperature sensor\n5. If the main temperature sensor is a thermocouple, a reference temperature sensor for cold junction compensation must exist and be close to the sensor contacts\n6. Means of the user updating the device without opening\n7. Known pinmap for the microcontroller. (see note B)\n\n## Soft requirements\n\n1. USB-PD is strongly preferred over Quick Charge; Quick Charge only devices are considered legacy and will likely not be prioritiesd.\n2. Open source or at the least schematics available is **strongly** preferred and will prioritise the device.\n3. Likewise friendly vendors will help dramatically with support, due to both questions and also appearances to help the community.\n4. Hardware PWM wired up to the tip control is nice to have but not essential\n5. Very strong preference against devices that use the endless sea of STM32 clones.\n\n## Planned features\n\nThese features are planned for eventual support, but will likely not be done until devices need them.\n\n- Colour screens\n- More than 2 buttons for input, or encoder inputs\n- WiFi/Zigbee/ any other networking\n\n## Notes\n\n### Note A - Flash storage space\n\n64KB is generally the minimum recommended size for the hardware to have.\nLarger is _definitely_ preferred as it enables more features or the multi-pack language firmwares.\nKeep in mind that on some devices we loose space to a USB DFU bootloader (Older STM32F1's) so the firmware _can_ work with less. But it can come at the cost of features.\n128KB or larger is **great**.\nFor devices that have BLE or WiFi or other features, often code requirements are significantly larger. These are considered non essential features so will be ignored if we run into size issues.\n\n### Note B - Pinmap for the microcontroller\n\nIn order to be able to write the interfacing code to communicate with the hardware, we need to know what pins on the microcontroller go to what hardware.\nIt is also loosely required to have an understanding of the rest of the device, we do not need details on a lot of the boring aspects,but if for example a USB-PD interface IC is used we would want to know which one.\n\n## Example request for adding a new device\n\nDevice Name:\nDevice Type:\nApproximate Price:\nExample purchase locations:\n\n### Hardware details\n\nMicrocontroller version: `STM32F103C8Tx`\nFlash size (If external to the MCU):`N/A`\nMicrocontroller Pinout: <!-- Either link to manufacturer information, a forum documenting this or a discussion where the pinout has been roughly figured out already-->\nDevice type: <!-- Soldering Iron/Hot Plate/ Reflow oven etc-->\nDevice meets hard requirements list []\nDevice meets soft requirements list []\n\nDevice features USB-PD []\nDevice features USB-QC []\nDevice features DC Input []\nDevice features BLE []\n"
  },
  {
    "path": "Documentation/Power.md",
    "content": "# Power & Performance\n\nAll of the irons are [PWM controlled](https://www.digikey.com/en/blog/pulse-width-modulation#) resistive heating elements.\nThis means that the electronics in the handle can only turn the heating element on and off.\nThis *means* that the power provided in the tip is 100% controlled by the supply voltage used (higher voltage PSU = higher performance).\n\nIrons at their simplest are just a resistor (Ω) connected to your power source via a switch.\n\n- When the switch is on, the power in the resistor is: *`P(watts) = V(volts) \\times\\ I(current=amps)`*\n- Current through the resistor is:  *`I(amps) = V(volts) ÷ Ω (resistance)`*\n- Combining these gives some common equations for Power\n\n   *`P(watts) = V(volts) * I(amps)`* or *`P = V^2 ÷ Ω`*\n\nThe resistance of the tip is a fixed constant in ohms (Ω):\n\n- 6.2 Ω  Pine64 short tip\n- 8.0 Ω  TS100/Pinecil long tip\n- 4.5 Ω  TS80(P)\n\nThis means the power delivered to the soldering tip is proportional to the voltage squared.\nTherefore the Pinecil and TS100 perform poorly when run off 12V power supplies and may issue a `Thermal Runaway` message (weak power supply).\n\n\n\n#### Use an [Ohm calculator](https://www.rapidtables.com/calc/electric/power-calculator.html#dc) to quickly derive watts.\n\n| Type       | Volts| / | Tip Ω | = |  Amps | * | Volts | = | Watts |\n| :--------: | :--: |:-:| :---: |:-:|:-----:|:-:| :---: |:-:|:-----:|\n| USB QC3.0  | 9V   | / | 4.5 Ω | = |  2.0A | * |  9V   | = |  18W  |\n| USB-C PD   | 12V  | / | 4.5 Ω | = |  3.0A | * |  12V  | = |  32W  |\n| USB-C PD   | 20V  | / | 8.0 Ω | = |  2.5A | * |  20V  | = |  50W  |\n| USB-C PD   | 20V  | / | 6.2 Ω | = |  3.2A | * |  20V  | = |  64W  |\n| DC Barrel  | 24V  | / | 8.0 Ω | = |  3.0A | * |  24V  | = |  72W  |\n| DC Barrel  | 24V  | / | 6.2 Ω | = |  3.8A | * |  24V  | = |  92W  |\n| EPR PD3.1  | 28V  | / | 8.0 Ω | = |  3.5A | * |  28V  | = |  98W  |\n| EPR PD3.1  | 28V  | / | 6.2 Ω | = |  4.5A | * |  28V  | = |  126W |\n\n\n\n## Output Control & Regulation\n\nThese soldering irons use a FET to switch the power to the soldering iron tip. This is a P-MOSFET and its controlled via a small transistor circuit, which in turn is controlled via the MCU (i.e., STM32). The MCU controls this PWM output proportional to the output from the PID control loop running in the software.\n\nTo measure the tip temperature in the iron, the iron has a small op-amp connected across the terminals at the cold end of the tip. This is setup to measure the voltage across the same terminals that are used to power the tip. In order to read the very small voltage generated by the [thermocouple cold junction](https://ralim.github.io/IronOS/Temperature/), the iron's output must be turned off for a moment.\n                                                                                                                                                                                                             \nOnce the output is turned off (via the FET), the system has a recovery time as the tip capacitance discharges and the op-amp exits saturation. After this delay period, the MCU's ADC (analog-to-digital converter) samples the output of the op-amp 8 times quickly and then sets a flag to turn the PWM output back on.\nThis enforces a small dead time in the output signal while this occurs, so there is a balance between sampling the temperature often to maintain a stable tip temperature control and sampling less often to increase the maximum power deliverable to the tip ([see Complexity of measurement](https://ralim.github.io/IronOS/Temperature/#complexity-of-measurement)).\n\n\n\n## Power sources\n\nSupported by IronOS hardware may use different power sources (chargers/powerbanks/battery packs) with different standards & protocols (QC/PD/etc). For more information collected by the community on that, please, [see the related documentation section](https://ralim.github.io/IronOS/PowerSources/).\n"
  },
  {
    "path": "Documentation/PowerSources.md",
    "content": "# Power sources\n\nSupported by IronOS hardware may use different power sources (chargers/powerbanks/battery packs) with different standards & protocols (QC/PD/etc). This document contains information collected by the community with tested power sources.\n\nThis is not ads but first hands-on experience results from real users since some chargers/powerbanks regardless labels on the box may not fully support what's declared!\n\n\n## QC(3)\n\n\n### Compatible Devices (QuickCharge for TS80/P)\n\nThe following table is the list of compatible device and remarks when powering up the TS80 through it for both stock firmware from MiniDso and IronOS. The list of devices below are primarily taken from [#349](https://github.com/Ralim/ts100/issues/349#issuecomment-449559806)\n\n| Device Name | Stock FW | IronOS FW |\n|-------------|:--------:|:---------:|\n| Anker PowerCore II Slim 10000 Powerbank | Not Working | Good |\n| [Aukey 26.5/30 Ah Powerbank (PB-Y3)](https://www.aukey.com/products/30000mah-power-bank-with-quick-charge-3-0/) | OK\\*\\* (15sec t/o) | OK\\*\\* (15sec t/o) |\n| Aukey QC3 Charger | Good | Only 5V |\n| [Aukey QC3 Charging Station (PA-T11)](https://www.aukey.com/products/6-port-charging-station-with-quick-charge-3-0-pa-t11/) | Good | Good |\n| Besiter 20000mah QC3 | Not Working | Only 5V |\n| BlitzWolf BW-P5 | Not Working\\* | Unknown |\n| BlitzWolf BW-PF2 | OK\\*\\* (10sec t/o) | OK\\*\\* (10sec t/o) |\n| BlitzWolf BW-PL3 | Low Voltage | OK |\n| BlitzWolf BW-PL4 | Unknown | Not Working |\n| BlitzWolf BW-S6 | Unknown | OK |\n| Charmast 20800 mAh QC 3.0 | Low Voltage\\* | Good |\n| Clas Ohlson Powerbank USB-C 10050 mAh, Clas Ohlson | Unknown | OK\\*\\* |\n| [Cygnett 20,000mAh USB-C](https://www.cygnett.com/products/20-000mah-usb-c-power-bank-in-black)| Not Working | Good |\n| [HAME H13D](https://www.amazon.com/dp/B07GWMFW82) 10000mAh PD/QC3.0 Power Bank | OK\\*\\* (30sec t/o) | OK\\*\\* (30sec t/o?) |\n| HIPER 10000 mAh 18W PD+QC3.0 (MPX10000) | Low Voltage | OK\\*\\* (30sec t/o) |\n| [iMuto Portable Charger 30000mAh](https://www.amazon.com/gp/product/B01MXCMGB8/ref=ppx_yo_dt_b_asin_title_o05_s00) | Low Voltage | Good |\n| ISDT BG-8S | Good | Good |\n| [iVoler Quick Charge 3.0 USB C 30W 2-Port USB](https://www.amazon.de/dp/B077P8ZZB8/) | Good | Good |\n| [imuto X6L Pro 30000 mah](https://www.amazon.com/dp/B01MXCMGB8) | Not Working | Bad |\n| Interstep 10000 mAh 18W PD+QC3.0+FCP+AFC (MPX10000) | Good | OK\\*\\* (30sec t/o) |\n| Jackery Black 420 | Low Voltage | Good |\n| Kogan Premium 80W 5 Port USB Charger| Low Voltage | Good |\n| Nokia AD-18WE | Unknown | OK |\n| [Omars 2000mAh USB-C PD+QC3.0 (OMPB20KBUPLT / OMPB20KPLT)](https://www.amazon.com/dp/B07CMLVR6C) | OK\\*\\* (20sec t/o) | Unknown |\n| Polaroid PS100 Powerbank (https://polaroid.com/products/ps100) | Good | Good |\n| Xiaomi 10000mAh Mi Power Bank Pro (PLM03ZM) | Good | Unknown |\n| Xiaomi 10000mAh Mi Power Bank 2i (PLM09ZM) | Good | Good |\n| Xiaomi 20000mAh Mi Power Bank 3 (PLM07ZM) | Unknown | Good Type A, Bad Type C |\n| [ZeroLemon ToughJuice](https://www.amazon.com/dp/B01CZR3LT2/) 30000mAh PD/QC2.0 Power Bank | OK\\*\\* (20sec t/o) | OK\\*\\* (20sec t/o?) |\n| [URUAV XT-60 to USB module](https://www.banggood.com/URUAV-XT-60-to-USB-Charger-Converter-Support-3S-6S-LiPo-Battery-10_5V-32V-Input-3V-20V-Output-45W-Max-Fast-Charging-Adapter-For-RC-Racing-Drone-p-1475876.html) | Unknown | Good |\n\n\n\\* Need further tests on newer firmware\n\n\\*\\* Most Power Banks shut down if current draw drops below 50mA, assuming that charging is complete and avoiding overcharging. Custom firmware is designed to avoid this until it enters Zzzz mode.\n\n\n### DIY QC3.0\n\nYou may also build your own QC3.0 power source that requires this little [thing](https://www.tindie.com/products/soubitos/qualcomm-qc2-3-diy-8-32vin-36-12vout-3a-max/) and have at least 3S lithium packs or any input voltage from 8 to 32V.\n\nYou can also go for an [alternate module](https://www.banggood.com/DC-Buck-Module-12V24V-to-QC3_0-Single-USB-Mobile-Charging-Board-p-1310585.html) which has at least one good review of it.\n\n**DISCLAIMER:** _**We do not hold any responsibility for accidents that happen when building your own QC3.0 power source!!!**_\n\n\n## PD\n\nThe following additional table is the list of devices compatible with hardware which requires Power Delivery support (>= 30W). Devices from the list have been successfully tested & used with TS80P in PD mode. Please, keep in mind that:\n\n- PD can be provided only through usb-c <-> usb-c cable;\n- not only a charger but a cable itself should be capable to carry higher wattages.\n\n\n### Compatible Devices (PowerDelivery for TS80P)\n\n| Device Name | IronOS FW |\n|-------------|:---------:|\n| Traver Charger QC09 (45W max)\\* | OK |\n| Xiaomi AD65GEU Mi 65W Fast Charger with GaN Tech (AD65GEU, 65W max) | OK |\n\n\\* Comes as an _option_ for extra price in the package with TS80P from [official store](https://aliexpress.com/item/4000764937427.html) or from [NovelLife store separately](https://aliexpress.com/item/4001316262433.html) on AliExpress.\n\nPlease, DO NOT BUY cheap \"fast chargers with QC/PD support\" for a few dollars online (i.e., less than ~10$): if you check reviews, then you see that they are phonies - even if you get lucky, you probably get 5V/1A max from them.\n"
  },
  {
    "path": "Documentation/README.md",
    "content": "\n<!-- THIS FILE IS AUTOGENERATED by \"scripts/deploy.sh docs_readme\" based on nav section in scripts/IronOS-mkdocs.yml config -->\n<!-- THIS FILE IS NOT SUPPOSED TO BE EDITED MANUALLY -->\n\n#### This is autogenerated README for brief navigation through github over official documentation for IronOS project\n#### This documentation is also available [here online](https://ralim.github.io/IronOS)\n\n  - [Home](../Documentation/index.md)\n  - [Getting Started](../Documentation/GettingStarted.md)\n  - Flashing the firmware\n      - [MHP30](../Documentation/Flashing/MHP30.md)\n      - [Pinecil V1](../Documentation/Flashing/Pinecil%20V1.md)\n      - [Pinecil V2](../Documentation/Flashing/Pinecil%20V2.md)\n      - [TS80(P)](../Documentation/Flashing/TS80(P).md)\n      - [TS100](../Documentation/Flashing/TS100.md)\n  - Operation\n      - [Main Menu](../Documentation/Menu.md)\n      - [Settings](../Documentation/Settings.md)\n      - [Debug Menu](../Documentation/DebugMenu.md)\n      - [Power](../Documentation/Power.md)\n      - [Temperature](../Documentation/Temperature.md)\n  - [Startup Logo](../Documentation/Logo.md)\n  - Hardware\n      - [Bluetooth (Pinecil V2)](../Documentation/Bluetooth.md)\n      - [Debugging USB-PD](../Documentation/DebuggingPD.md)\n      - [Hall Sensor (Pinecil)](../Documentation/HallSensor.md)\n      - [Hardware Notes](../Documentation/Hardware.md)\n      - [Known Hardware Issues](../Documentation/HardwareIssues.md)\n      - [New Hardware Requirements](../Documentation/PortingToNewDevice.md)\n      - [Power sources](../Documentation/PowerSources.md)\n      - [Troubleshooting](../Documentation/Troubleshooting.md)\n      - [WS2812B RGB Modding (Pinecil V2)](../Documentation/WS2812BModding.md)\n  - [Translations](../Documentation/Translation.md)\n  - [Development](../Documentation/Development.md)\n  - [Changelog](../Documentation/History.md)\n"
  },
  {
    "path": "Documentation/Settings.md",
    "content": "<!-- This is an automatically generated file. DO NOT EDIT. Edit gen_menu_docs.py instead -->\n\n# IronOS Settings Menu\n\nThe below breaks down the menu's and what each setting means.\n    \n## Menu Categories\n\nIn the menu there are a few main categories that are used to keep the list manageable.\n\n### Category: Power settings\n\nMenu for settings related to power. Main settings to do with the input voltage.\n\n### Category: Soldering settings\n\nSettings for soldering mode, such as boost temps, the increment used when pressing buttons and if button locking is enabled.\n\n### Category: Sleep mode\n\nSettings to do with power saving, such as sleep mode, sleep temps, and shutdown modes.\n\n### Category: User interface\n\nUser interface related settings, such as units.\n\n### Category: Advanced settings\n\nAdvanced settings. Misc catchall for settings that don't fit anywhere else or settings that require some thought before use.\n\n## Settings\n\nThese are all of the settings possible in the menu.\n**Not all settings are visible for all devices.**\nFor example, the TS100 does not have USB-PD settings.\n\nWhen using the device, if unsure you can pause (press nothing) on a setting and after a short delay help text will scroll across the screen.\nThis is the \"on device help text\".\n\n### Setting: Power source\n\nWhen the device is powered by a battery, this adjusts the low voltage threshold for when the unit should turn off the heater to protect the battery.\n\nOn device help text:\n\nSet cutoff voltage to prevent battery overdischarge (DC=10V) (S=3.3V per cell, disable PWR limit)\n\n### Setting: Minimum voltage\n\nWhen powered by a battery, this adjusts the minimum voltage per cell before shutdown. (This is multiplied by the cell count.)\n\nOn device help text:\n\nMinimum allowed voltage per battery cell (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\n\n### Setting: QC voltage\n\nThis adjusts the maximum voltage the QC negotiation will adjust to. Does NOT affect USB-PD. Should be set safely based on the current rating of your power supply.\n\nOn device help text:\n\nMax QC voltage the iron should negotiate for\n\n### Setting: PD timeout\n\nHow long until firmware stops trying to negotiate for USB-PD and tries QC instead. Longer times may help dodgy / old PD adapters, faster times move onto PD quickly. Units of 100ms. Recommended to keep small values.\n\nOn device help text:\n\nPD negotiation timeout in 100ms steps for compatibility with some QC chargers\n\n### Setting: PD Mode\n\nAdjusts how the USB-PD Logic selects the voltage. No Dynamic disables EPR & PPS protocols, Safe mode does not use padding resistance (will select a slightly lower voltage).\n\nOn device help text:\n\nNo Dynamic disables EPR & PPS, Safe mode does not use padding resistance\n\n### Setting: Boost temp\n\nWhen the unit is in soldering mode. You can hold down the button at the front of the device to temporarily override the soldering temperature to this value. This SETS the temperature, it does not ADD to it.\n\nOn device help text:\n\nTip temperature used in \"boost mode\"\n\n### Setting: Start-up behavior\n\nWhen the device powers up, should it enter into a special mode. These settings set it to either start into soldering mode, sleeping mode or auto mode (Enters into soldering mode on the first movement).\n\nOn device help text:\n\nS=heat to soldering temp | Z=standby at sleep temp until moved | R=standby without heating until moved\n\n### Setting: Temp change short\n\nFactor by which the temperature is changed with a quick press of the buttons.\n\nOn device help text:\n\nTemperature-change-increment on short button press\n\n### Setting: Temp change long\n\nFactor by which the temperature is changed with a hold of the buttons.\n\nOn device help text:\n\nTemperature-change-increment on long button press\n\n### Setting: Allow locking buttons\n\nIf locking the buttons against accidental presses is enabled.\n\nOn device help text:\n\nWhile soldering, hold down both buttons to toggle locking them (B=boost mode only | F=full locking)\n\n### Setting: Profile Phases\n\nset the number of phases for profile mode.\n\nOn device help text:\n\nNumber of phases in profile mode\n\n### Setting: Preheat Temp\n\nPreheat to this temperature at the start of profile mode.\n\nOn device help text:\n\nPreheat to this temperature at the start of profile mode\n\n### Setting: Preheat Speed\n\nHow fast the temperature is allowed to rise during the preheat phase at the start of profile mode.\n\nOn device help text:\n\nPreheat at this rate (degrees per second)\n\n### Setting: Phase 1 Temp\n\nTarget temperature for the end of phase 1 of profile mode.\n\nOn device help text:\n\nTarget temperature for the end of this phase\n\n### Setting: Phase 1 Duration\n\nDuration of phase 1 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature.\n\nOn device help text:\n\nTarget duration of this phase (seconds)\n\n### Setting: Phase 2 Temp\n\nTarget temperature for the end of phase 2 of profile mode.\n\nOn device help text:\n\n\n\n### Setting: Phase 2 Duration\n\nDuration of phase 2 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature.\n\nOn device help text:\n\n\n\n### Setting: Phase 3 Temp\n\nTarget temperature for the end of phase 3 of profile mode.\n\nOn device help text:\n\n\n\n### Setting: Phase 3 Duration\n\nDuration of phase 3 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature.\n\nOn device help text:\n\n\n\n### Setting: Phase 4 Temp\n\nTarget temperature for the end of phase 5 of profile mode.\n\nOn device help text:\n\n\n\n### Setting: Phase 4 Duration\n\nDuration of phase 5 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature.\n\nOn device help text:\n\n\n\n### Setting: Phase 5 Temp\n\nTarget temperature for the end of phase 5 of profile mode.\n\nOn device help text:\n\n\n\n### Setting: Phase 5 Duration\n\nDuration of phase 5 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature.\n\nOn device help text:\n\n\n\n### Setting: Cooldown Speed\n\nHow fast the temperature is allowed to drop during the cooldown phase at the end of profile mode.\n\nOn device help text:\n\nCooldown at this rate at the end of profile mode (degrees per second)\n\n### Setting: Motion sensitivity\n\nScale of how sensitive the device is to movement. Higher numbers == more sensitive. 0 == motion detection turned off.\n\nOn device help text:\n\n1=least sensitive | ... | 9=most sensitive\n\n### Setting: Sleep temp\n\nTemperature the device will drop down to while asleep. Typically around halfway between off and soldering temperature.\n\nOn device help text:\n\nTip temperature while in \"sleep mode\"\n\n### Setting: Sleep timeout\n\nHow long of a period without movement / button-pressing is required before the device drops down to the sleep temperature.\n\nOn device help text:\n\nInterval before \"sleep mode\" starts (s=seconds | m=minutes)\n\n### Setting: Shutdown timeout\n\nHow long of a period without movement / button-pressing is required before the device turns off the tip heater completely and returns to the main idle screen.\n\nOn device help text:\n\nInterval before the iron shuts down (m=minutes)\n\n### Setting: Hall sensor sensitivity\n\nIf the unit has a hall effect sensor (Pinecil), this adjusts how sensitive it is at detecting a magnet to put the device into sleep mode.\n\nOn device help text:\n\nSensitivity to magnets (1=least sensitive | ... | 9=most sensitive)\n\n### Setting: HallSensor SleepTime\n\nIf the unit has a hall effect sensor (Pinecil), this adjusts how long the device takes before it drops down to the sleep temperature when hall sensor is over threshold.\n\nOn device help text:\n\nInterval before \"sleep mode\" starts when hall effect is above threshold\n\n### Setting: Temperature unit\n\nIf the device shows temperatures in °C or °F.\n\nOn device help text:\n\nC=°Celsius | F=°Fahrenheit\n\n### Setting: Display orientation\n\nIf the display should rotate automatically or if it should be fixed for left- or right-handed mode.\n\nOn device help text:\n\nR=right-handed | L=left-handed | A=automatic\n\n### Setting: Cooldown flashing\n\nIf the idle screen should blink the tip temperature for attention while the tip is over 50°C. Intended as a 'tip is still hot' warning.\n\nOn device help text:\n\nFlash temp reading at idle while tip is hot\n\n### Setting: Scrolling speed\n\nHow fast the description text scrolls when hovering on a menu. Faster speeds may induce tearing, but allow reading the whole description faster.\n\nOn device help text:\n\nScrolling speed of info text (S=slow | F=fast)\n\n### Setting: Swap + - keys\n\nSwaps which button increments and decrements on temperature change screens.\n\nOn device help text:\n\nReverse assignment of buttons for temperature adjustment\n\n### Setting: Swap A B keys\n\nSwaps which button is used as Enter/Change and as Scroll/Back in Settings menu.\n\nOn device help text:\n\nReverse assignment of buttons for Settings menu\n\n### Setting: Anim. speed\n\nHow fast should the menu animations loop, or if they should not loop at all.\n\nOn device help text:\n\nPace of icon animations in menu (S=slow | M=medium | F=fast)\n\n### Setting: Anim. loop\n\nShould the menu animations loop. Only visible if the animation speed is not set to \"Off\"\n\nOn device help text:\n\nLoop icon animations in main menu\n\n### Setting: Screen brightness\n\nDisplay brightness. Higher values age the OLED faster due to burn-in. (However, it is notable that most of these screens die from other causes first.)\n\nOn device help text:\n\nAdjust the OLED screen brightness\n\n### Setting: Invert screen\n\nInverts the entire OLED.\n\nOn device help text:\n\nInvert the OLED screen colors\n\n### Setting: Boot logo duration\n\nSets the duration for the boot logo (s=seconds).\n\nOn device help text:\n\nSet boot logo duration (s=seconds)\n\n### Setting: Detailed idle screen\n\nShould the device show an 'advanced' view on the idle screen. The advanced view uses text to show more details than the typical icons.\n\nOn device help text:\n\nDisplay detailed info in a smaller font on idle screen\n\n### Setting: Detailed solder screen\n\nShould the device show an 'advanced' soldering view. This is a text-based view that shows more information at the cost of no nice graphics.\n\nOn device help text:\n\nDisplay detailed info in a smaller font on soldering screen\n\n### Setting: Bluetooth \n\nShould BLE be enabled at boot time.\n\nOn device help text:\n\nEnables BLE\n\n### Setting: Power limit\n\nAllows setting a custom wattage for the device to aim to keep the AVERAGE power below. The unit can't control its peak power no matter how you set this. (Except for MHP30 which will regulate nicely to this). If USB-PD is in use, the limit will be set to the lower of this and the supplies advertised wattage.\n\nOn device help text:\n\nAverage maximum power the iron can use (W=watt)\n\n### Setting: Calibrate CJC at next boot\n\nNote:\r\nIf the difference between the target temperature and the measured temperature is less than 5°C, **calibration is NOT required at all**.\r\n\r\nThis is used to calibrate the offset between ADC and Op-amp of the tip **at next boot** (Ideally it has to be done at boot, before internal components get warm.). If the checkbox is set, the calibration will only be performed at the next boot. After a successful calibration the checkbox will be unchecked again! If you need to repeat the calibration however, you have to set the checkbox *again*, unplug your device and let it cool down to room/ambient temperature & power it up, ideally while it sits on the desk.\r\n\r\n\r\nAlso, the calibration will only take place if both of the following conditions are met:\r\n- The tip must be installed.\r\n- The temperature difference between tip and handle must be less than 10°C. (~ ambient / room temperature)\r\n\r\nOtherwise, the calibration will be performed the next time the device is started and both conditions are met, unless the corresponding checkbox is unchecked.\r\nHence, never repeat the calibration in quick succession!\n\nOn device help text:\n\nCalibrate Cold Junction Compensation at next boot (not required if Delta T is < 5°C)\n\n### Setting: Calibrate input voltage\n\nEnters an adjustment mode where you can gradually adjust the measured voltage to compensate for any unit-to-unit variance in the voltage sense resistors.\n\nOn device help text:\n\nStart VIN calibration (long press to exit)\n\n### Setting: Power pulse\n\nEnables and sets the wattage of the power pulse. Power pulse causes the device to briefly turn on the heater to draw power to avoid power banks going to sleep.\n\nOn device help text:\n\nIntensity of power of keep-awake-pulse (W=watt)\n\n### Setting: Power pulse delay\n\nAdjusts the time interval between power pulses. Longer gaps reduce undesired heating of the tip, but needs to be fast enough to keep your power bank awake.\n\nOn device help text:\n\nDelay before keep-awake-pulse is triggered (x 2.5s)\n\n### Setting: Power pulse duration\n\nHow long should the power pulse go for. Some power banks require seeing the power draw be sustained for a certain duration to keep awake. Should be kept as short as possible to avoid wasting power / undesired heating of the tip.\n\nOn device help text:\n\nKeep-awake-pulse duration (x 250ms)\n\n### Setting: Restore default settings\n\nResets all settings and calibrations to factory defaults. Does NOT erase custom user boot up logo's.\n\nOn device help text:\n\nReset all settings to default\n\n### Setting: Language:  EN     English\n\nChanges the device language on multi-lingual builds.\n\nOn device help text:\n\n\n\n### Setting: Soldering Tip Type\n\nFor manually selecting the type of tip fitted\n\nOn device help text:\n\nSelect the tip type fitted\n"
  },
  {
    "path": "Documentation/Temperature.md",
    "content": "# Tip temperature measurement\n\nThe soldering irons use a modified N-type thermocouple in the tip to measure the tip temperature.\nThis is constructed for free by using a different type of metal to join one of the rings to the heating coil. This effectively creates a free temperature sensor for very low cost and construction difficulty.\n\nThe downsides of this are twofold; one, it is made using non-optimal metals and has a non-constant temperature response; and two, as this uses the same connections as the heating current, you can't measure the temperature while you are heating the tip.\n\n\n\n##  How a thermocouple works (brief)\n\n[Thermocouples use a junction of two dissimilar metals](https://www.youtube.com/watch?v=v7NUi88Lxi8) to create a very small amount of power (microvolts). This can then be measured and used with a known transfer function to derive the temperature of the junction.\nThis has some fairly large limitations, but it also has the benefit of being extremely cheap.\n\nConventionally a thermocouple is created using two dissimilar metals that join, and then the other ends of these metals are terminated to copper contacts. These copper contacts are also part of the construction of the thermocouple and are referred to as the cold junction.\nAs there are these extra two joins between the thermocouple wires and the copper; these also have properties of their own in their reactions with temperature.\n\nIf the cold junction is held at 0 degrees Celsius, then their effect is considered to be null, and so they can be ignored. However, in the real world the joins to copper are often at room temperature, and as such the measured voltage from the thermocouple must be compensated to remove the influence of these joints. This process is often called cold junction compensation.\n\nEvery time in the circuit there is a join between two different metals, then a small thermocouple is created, this means that _every_ soldered connection is also one. \n\n\n## How these irons implement the temperature reading\n\nIf you analyse one of the open circuit schematics (Pinecil, TS100, TS80) they all use the same approximate formula.\nThis consists of an op-amp that is connected directly across the heating connections to the tip, and a separate handle temperature sensor.\n\nWhen the iron is **not** heating the tip, the microcontroller uses the ADC to read the output from the op-amp. This produces a voltage that _should_ be linear to the temperature of (tip-handle). This value is then offset compensated (to remove ADC+op-amp offsets), and then converted into a temperature delta in °C/K. This temperature delta can then be added to the handle temperature to derive the tip temperature in degrees Celsius.\n\nDepending on the construction of the tip, the lookup values used for converting the tip reading in µV into °C/K varies. It is worth noting, however, that TS100 and Pinecil tips are approximately the same as the Hakko T12 tips. (In @Ralim's testing, to within measurement error). This makes sense as the T12 tips are an excellent and cheap design for Miniware to mimic in making the TS100 in the first place.\n\n## Implications of this\n\n### Reading accuracy vs Heating performance tradeoff\n\nBecause the tip can only be measured when the unit is not heating, the more often the tip is measured (for finer temperature control) the less time the unit can spend heating up the tip. This means that for fast heat up and fine temperature control the firmware now implements two speeds to the controller loop. During heating up the system runs fewer temperature measurements and instead allows the tip to spend more time burning power. Once the unit is up to temperature, the rate of taking temperature readings is doubled to allow for faster reaction times.\n\n### Tip heat up lag time\n\nAs the temperature sensor is a part of the heater coil inside of the tip (or very close by, not entirely certain); the temperature reading is of the _inside_ of the tip, rather than the outside. The outside temperature is the most critical for the user as this is where the solder is actually melting and performing work.\n\nThe PID controller in the firmware is tuned to be slightly underdamped and thus more \"jumpy\" than some people would expect. This is based on the theory that if the inside of the tip is seeing the temperature drop; the outside temperature has dropped more and so we should overcompensate until they equalise.\n\nThis is why sometimes the temperature may flick around a little during use but the tip temperature itself is quite stable. The thermal mass of the tip smooths these small amounts out nicely for the user. Though seeing larger jumps on some tips than others _may_ indicate that the tip does not have optimal internal thermal bonding between the heater coil and the tip itself.\n\nThe firmware uses the theory that these irons are aimed more to the power users territory than most, so it tries to _not_ hide the actual temperature. Some soldering iron controllers hide the actual measurement once you are within a certain tolerance of this. For example, on a digital Weller unit that Ralim has, if set to 350 °C, it will regulate to within around +/- 3°C but not indicate you are outside of the margin of error until you exceed +/- 5°C. This gives the illusion that it's holding the temperature perfectly when in actuality it's moving around as well.\n\nGiven enough time (3-5 seconds) with no external cooling, the inside and outside temperatures of the tip will be equal. When testing the tip temperature accuracy try to allow time for the system to stabilise.\n\n### Complexity of measurement\n\nThe firmware in these irons does a *best-effort* of calculating an accurate temperature. As always there is a tradeoff between perfect accuracy and firmware complexity and setup. These irons are built down to a cost; expecting accuracy greater than 1% is not really an option as the voltage reference is only 1% accurate at best. So _all_ measurements are affected by its accuracy. The low-cost chips used in the irons do not come calibrated from the factory so we do not have an internal calibration we can use to try and measure this inaccuracy.\n\nThe firmware only accounts for [cold junction compensation](https://www.tegam.com/what-exactly-is-cold-junction-compensation/) and then treats the remaining error as being a constant offset. \nWhile the error is small, it is actually composed of both a constant offset as well as an offset that is linear to the handle temperature.\nThis offset that is linear to handle temperature is as of current not modelled into the firmware and is assumed to be constant. This is generally *close enough* as once the unit is in use, the handle temperature is usually within 10 °C as the components inside warm-up from use. This means that this error is \"relatively\" constant once the unit is being used. \n\n`However, this can cause odd behaviour when the tip temperature ~= room temperature. It can cause some jumping and movement in the readings when attempting to control the tip to sub 100 °C.`\n\nThis is a known tradeoff that is made as the irons intended use case means that it will spend most of its time above 150 °C, at which point these errors are no longer the dominant error sources in the system.\n"
  },
  {
    "path": "Documentation/Translation.md",
    "content": "# Translation\n\nAt the present time the main way of performing translations is to open a PR to this repository.\nAll translations are stored as `json` files in the repository. Currently there is ongoing work to look into a more user friendly method of editing translations than these but for now these are reliable.\n\nYou can create a pull request with the new / updated json configuration file, and this will include this language into the new builds for the firmware.\n\nFor testing you can build locally and test of course; but if you dont want to figure out the build environment; you can just open a PR and github will build the firmware for you using the _actions_ feature.\n\nThis means that once you have a github account you can perform all of your edits inside Github should this be desired.\n\nTranslations are _NOT_ accepted via issues/discussions or email.\n"
  },
  {
    "path": "Documentation/Troubleshooting.md",
    "content": "# Troubleshooting\n\nIf your device is not operating as expected; and you are within the manufacturer support window, please first contact your manufacturer and RMA / warranty your device.\n\nIf your iron is not working as expected, [the Debug menu](https://ralim.github.io/IronOS/DebugMenu/) exposes internal measurements to help you narrow down the root cause of the issue.\n\nAlongside all of these, issues with the soldering of the main MCU could cause all of these as well; and should always be checked.\n\nThe tip is important for the operation of your iron. T100 and Pinecil tips are around 8 ohms, and TS80(P) tips are around 4.5 ohms.\n\nYou are welcome to open discussions about issues as well, or if you bought your Pinecil from an official store; use the [Pinecil community chat](https://wiki.pine64.org/wiki/Pinecil#Community_links) for support.\nBut it is helpful to do some basic diagnostics first just in case the issue is easily fixed.\n\nThe **VAST** majority of issues are poor soldering or cold solder joints.\nIf you can open up your iron, give it a good look at all the connection points, and use another iron to reflow any suspicious ones, this can fix most issues.\n\n## Tip Shorted warning\n\nIf you are powering up a device that supports tip resistance detection (TS101 and Pinecilv2 as of present), the firmware checks the readings of the raw tip resistance and sorts these into three \"bins\". `8 ohm tips`, `6.2 ohm tips` and `tip-shorted`. The tip resistance is used when negotiating USB-PD and in thermal calculations.\nThe `tip-shorted` option is selected if your tip is measured to be abnormally small. This could indicate a failed driver mosfet or a failed tip.\n\nWhen this warning is shown; heating will be disabled to protect from damage. As trying to heat a shorted tip can damage the iron itself.\n\nIt is best to take out your tip and manually measure and verify the tip's resistance. It should be 6-8 ohms (depending on tip type). When measuring resistances this small some multimeters can struggle. If you have access to a current limited bench power supply, you can try doing a 4 wire measurement by measuring the voltage drop on the tip while applying a known current. `(R=V/I)`.\n\nIf the tip measures correctly you may have a damaged driver mosfet; it would be ideal to open your iron and test the mosfet is operating correctly.\nIf after both of these checks everything looks as expected, feel free to open a discussion on IronOS to talk about the issue (Or for Pinecil the community chat can be a much faster response).\n\n## High tip temp reading when the tip is cool\n\nIf you are finding the tip is reading high; the first fields to check in the Debug menu are `RTip` and `CHan`.\n\n- `RTip` is the raw tip reading in μV; at cool this should be around 700-1000 for larger tips and ~1500 for smaller tips (TS80's)\n- `CHan` is the temperature of the temperature sensor on the PCB in degrees Celsius \\* 10. So 29 °C ambient should read as 290\n\n### RTip is out of spec\n\n`RTip` will over-read on bad contacts or no tip inserted.\n\nIf `RTip` is overreading, you may have one of the following:\n\n- Partially stuck on main MOSFET\n- Slow reacting main MOSFET driver transistor\n- Damaged Op-Amp\n- Poor soldering on the Op-Amp circuitry\n- No tip inserted or tip that is not connecting correctly\n\nIf `RTip` is under-reading you most likely have issues with the Op-Amp or the tip. The signal should be pulled high by hardware (reading hot), so this often means the MCU is not reading the signal correctly. Check MCU soldering.\n\n### CHan is out of spec\n\nCHan reading comes directly from the cold junction compensation temperature sensor.\nThis is usually a TMP36 (Pinecil V1), or an NTC thermistor (MHP30, TS80P, Pinecil V2).\n\nIf `CHan` is reading low:\n\n- Check the connection from the MCU to the handle temperature sensor.\n- Check the power pin connection on the TMP36\n- Check pullup resistor on the NTC thermistor\n- Check no bridged pins or weak shorts on the signal to nearby pins on MCU or temperature sensor\n- Reflow/resolder the aforementioned components\n\nIf `CHan` is reading higher\n\n- Check ground connections on the sensors\n- Check no bridged pins or weak shorts on the signal to nearby pins on MCU or temperature sensor\n- Reflow/resolder the aforementioned components\n\n## No display OR dots on the display\n\nIf when you power up your iron you get no display, the first test is to (carefully) attempt to heat the tip.\nPress the front button (`+/A`) on your device and check if the tip heats up.\nIf the tip does not heat up, it is worth trying to reflash the firmware first in case it is corrupted.\n\nThe main failure mode of the OLED display module is usually poor soldering on the OLED display cable to the main PCB.\nAs this is soldered by hand generally, it's the most prone to failures.\n\nIf you have a poor connection or a floating pin, you can end up with a state where the screen works _sometimes_ and then freezes or only works on some power cycles. It might work on very old versions of IronOS but not the newest ones. You could try to reflow the pins for the OLED. On 96x16 screens, carefully peel it back from the adhesive and reflow the solder on the pins.\n\nAs the OLED runs on an I2C bus, there are pull up resistors on the SDA and SCL pins. It is worth checking these as well, while they don't often fail, issues with these can cause _weird_ display issues.\n\nIf after all of the checks OLED is still blank, or screen works but pixels are barely visible, although soldering iron itself is working (i.e., you can safely check that it's turning on, heating up & melting solder successfully), then it means that _most likely_ OLED is dead. But it can be relatively easily replaced. Models like `TS100`, `TS80`, and `TS80P` share the same OLED screen which can be bought online and used for replacement. To do so:\n\n- find & buy at electronics shop [of your choice] display with the following spec line:  \n```OLED 0.69 inch / 14 pins / 96 x 16 pixels / **9616TSWC** / I2C IIC```\n\n- disassemble your soldering iron;\n- desolder old OLED and solder back new one;\n- assemble your soldering iron back.\n\nThere are a few youtube videos how to do it like [this one for `TS100`](https://www.youtube.com/watch?v=HlWAY0oYPFI).\n\nUnfortunately, this is a well-known issue of screens with OLED technology: sooner or later the brightness is starting to _\"fade out\"_ until complete off. Usually common recommendations to prolong its lifetime are: reduce brightness & reduce too often updates (i.e., disable animations). But your results may vary since there were reports when users couldn't see anything after turning on soldering irons which were just laying in a box for a few months after buying. And there are users with first `TS100` models not having any issues with display at all.\n\n## Tip heats when not in heating mode\n\n⚠️ DISCONNECT YOUR TIP ⚠️\n\nMost likely you have either a blown MOSFET or shorted pin.\nCheck the MOSFET and also its driver transistor.\nThe firmware will not enable the tip until you are in soldering mode.\n\n## Accelerometer not detected\n\nYour Iron may have a new accelerometer that is not supported yet (happens every year or so) OR there is a soldering issue with the accelerometer (reflow/resolder).\n"
  },
  {
    "path": "Documentation/WS2812BModding.md",
    "content": "# WS2812B RGB Modding (Pinecil V2)\n\n## What is it?\n\nThe idea of this mod is to bring the RGB feature of the MHP30 to the Pinecil V2.\nUse a transparent shell for a better effect.\n\nPinecil V2 has a free GPIO_12 accessible through TP10, which is along the screen, cf [Pinecil PCB placement v2.0](https://files.pine64.org/doc/Pinecil/Pinecil_PCB_placement_v2.0_20220608.pdf) page 3. (TP9 (GPIO_14) is also available but hidden below the screen. If you want to use it, change `WS2812B_Pin` in `source/Core/BSP/Pinecilv2/Pins.h`.)\n\nWe'll using it to drive a WS2812B and let the color logic already present for the MHP30 do its magic:\n\n- green when temperature is safe (< 55°C)\n- pulsing red when heating\n- solid red when desired temperature is reached\n- orange when cooling down\n\n## Electrical considerations\n\nWS2812B requires a Vdd between 3.5 and 5.3V and Vih (high level of input signal) must be at least 0.7*Vdd.\nPinecil V2 GPIO levels are 3.3V and the 5V rail is actually max 4.6V.\nSo we can directly power the WS2812B on the 5V rail and command it with the GPIO without need for a level shifter, or for a Zener diode to clamp Vdd.\n\n## How to wire it?\n\n- WS2812B pin 1 (Vdd) is connected to the \"5V\" rail, e.g. on the C8 capacitor as illustrated [here](https://github.com/Ralim/IronOS/issues/1410#issuecomment-1296064392).\n- WS2812B pin 3 (Vss) is connected to the Pinecil GND, e.g. on the U10 pad at the back of the PCB, below R35, as illustrated [here](https://github.com/Ralim/IronOS/issues/1410#issuecomment-1296064392).\n- WS2812B pin 4 (Din) is connected to TP10.\n\nYou can use e.g. 0.1-mm enameled wire and isolate connections with UV glue to avoid any shortcut.\n\n## How to enable it in the code?\n\n`make firmware-EN model=Pinecilv2 ws2812b_enable=1`\n"
  },
  {
    "path": "Documentation/index.md",
    "content": "# IronOS - Flexible Soldering iron control Firmware\n\nThe firmware implements all of the standard features of a 'smart' soldering iron, with lots of little extras and tweaks.\nI highly recommend reading the installation guide fully when installing on your iron. And after install just explore the settings menu.\n\nFor soldering irons that are designed to be powered by 'smart' power sources (PD and QC), the firmware supports settings around the negotiated power and voltage.\nFor soldering irons that are designed to be powered by batteries (TS100 & Pinecil), settings for a cutoff voltage for battery protection are supported.\n\nCurrently **31** languages are supported. When downloading the firmware for your soldering iron, take note of the language code in the file name.\n\nThis project is considered stable & feature complete for everyday use with a supported device, _so please suggest any feature improvements you would like!_\n\n_This firmware does **NOT** support the USB port while running for changing settings. This is done through the onscreen menu only. Logos are edited on a computer and flashed like firmware._\n\n|   Device   | DC  | QC  | PD  | EPR | BLE | Battery | Recommended |\n| :--------: | :-: | :-: | :-: | :-: | :-: | :-----: | :---------: |\n|   MHP30    | ❌  | ❌  | ✔️  | ❌  | ❌  |   ❌    |     ✔️      |\n| Pinecil V1 | ✔️  | ✔️  | ✔️  | ❌  | ❌  |   ✔️    |     ❌      |\n| Pinecil V2 | ✔️  | ✔️  | ✔️  | ✔️  | ✔️  |   ✔️    |     ✔️      |\n|   TS80P    | ❌  | ✔️  | ✔️  | ❌  | ❌  |   ✔️    |     ✔️      |\n|   TS100    | ✔️  | ❌  | ❌  | ❌  | ❌  |   ✔️    |     ❌      |\n|    TS80    | ❌  | ✔️  | ❌  | ❌  | ❌  |   ✔️    |     ❌      |\n\n\\*Please note that Miniware started shipping TS100's using cloned STM32 Chips. While these do work with IronOS, their DFU bootloader works terribly, and it is hard to get it to successfully flash larger firmware images like IronOS without timing out. This is the main reason why the TS100 is **_no longer recommended_**.\n\n## Getting Started\n\nTo get started with IronOS firmware, please jump to [Getting Started Guide](https://ralim.github.io/IronOS/GettingStarted/).\nBut the [TL;DR](https://www.merriam-webster.com/dictionary/TL%3BDR) is to press the button near the front of the iron to heat up. Use the button near the back of the iron to enter the settings menu.\nLong hold the rear button in soldering mode to exit back to the start screen.\n\n## Installation\n\nFor notes on installation for your device, please refer to the flashing guide for your device:\n\n- [MHP30](https://ralim.github.io/IronOS/Flashing/MHP30)\n- [Pinecil V1](https://ralim.github.io/IronOS/Flashing/Pinecil%20V1/)\n- [Pinecil V2](https://ralim.github.io/IronOS/Flashing/Pinecil%20V2/)\n- [TS80 / TS80P](https://ralim.github.io/IronOS/Flashing/TS80%28P%29/)\n- [TS100](https://ralim.github.io/IronOS/Flashing/TS100)\n\nBut the _generic_ [TL;DR](https://www.merriam-webster.com/dictionary/TL%3BDR) is to:\n\n- [download firmware from here](https://github.com/Ralim/IronOS/releases) for the correct model with suitable language support;\n- put a device into DFU/bootloader mode (usually by keep holding A/+/front button while connecting a device to power source to power device on);\n- flash the firmware by drag-n-drop the firmware file using a file manager of your OS **or** using a separate flashing tool.\n\n## Key Features\n\n- PID style iron temperature control\n- Automatic sleep with selectable sensitivity\n- Motion wake support\n- All settings exposed in the intuitive menu\n- (TS100) Set a voltage lower limit for Lithium batteries so you don't kill your battery pack\n- (TS80) Set 18 W or 24 W settings for your power bank\n- (TS80P) Automatically negotiates appropriate PD and falls back to QC mode like TS80\n- (Pinecil) Supports all 3 power modes (PD, QC, DC In).\n- (Pinecilv2) Supports USB-PD EPR for 28V operation.\n- Improved readability Fonts, supporting multiple languages\n- Use hardware features to improve reliability\n- Can disable movement detection if desired\n- Boost mode lets you temporarily change the temperature when soldering (i.e. raise the temperature for short periods)\n- (TS100/Pinecil) Battery charge level indicator if power source set to a lipo cell count\n- (TS80/TS80P/Pinecil) Power bank operating voltage is displayed\n- [Custom boot up logo support](https://ralim.github.io/IronOS/Logo/)\n- Automatic LCD rotation based on the orientation\n\n## Menu System\n\nThis new firmware uses a new menu system to allow access to the settings on the device.\nWhen on the main screen and having the tip plugged in, the unit shows a pair of prompts for the two most common operations.\n\n- Pressing the button near the tip enters the _soldering mode_\n- Pressing the button near the USB end enters the _settings menu_\n- When not in _soldering mode_, holding down the button near the tip will enter _soldering temperature adjust mode_ (This is the same as the one in the _soldering mode_, but allows to adjust the temperature before heating up), in _soldering mode_ however this will activate _boost mode_ as long as you hold down the button.\n- Holding down the button near the USB end will show the _[debug menu](https://ralim.github.io/IronOS/DebugMenu/)._ In _soldering mode_ this ends the heating.\n\nOperation details are over in the [Menu information.](https://ralim.github.io/IronOS/Menu/)\n\n## Feedback\n\nIf you would like to:\n\n- report any issue related to IronOS\n- request a feature\n- provide some suggestion\n\nthen you can [fill this form](https://github.com/Ralim/IronOS/issues/new/choose) using github account\\*.\n\nAnd if you would like to:\n\n- ask more generic question about IronOS/supported hardware/something you're curious about/etc.\n- reach out community to chat with\n- share your soldering & DIY skills\n- share some interesting finding\n- share useful related hardware/software with others\n\nor _anything_ like that, then you can use forum-like [Discussions here](https://github.com/Ralim/IronOS/discussions).\n\n\\*: You may need to create it first if you don't have one - it's free of charge.\n"
  },
  {
    "path": "Env.yml",
    "content": "name: \"ironos\"\r\nservices:\r\n  builder:\r\n    stdin_open: true\r\n    tty: true\r\n    build:\r\n      context: .\r\n      dockerfile: scripts/IronOS.Dockerfile\r\n    command: /bin/sh\r\n    volumes:\r\n      - ./:/build/ironos:Z\r\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n"
  },
  {
    "path": "Makefile",
    "content": "#!/usr/bin/env make\r\nINFO:=top-level Makefile for IronOS - Soldering Iron Open Source Firmware Project.\r\n\r\n\r\n### global adjustable variables\r\n\r\n# command for \"docker compose\" from DOCKER env. var.\r\nifdef DOCKER\r\nDOCKER_BIN:=$(DOCKER)\r\nelse\r\nDOCKER_BIN:=\r\nendif\r\n\r\n# detect availability of docker\r\nifndef DOCKER_BIN\r\nDOCKER_COMPOSE:=$(shell command -v docker-compose 2>/dev/null)\r\nDOCKER_TOOL:=$(shell command -v docker 2>/dev/null)\r\nifdef DOCKER_COMPOSE\r\nDOCKER_BIN:=$(DOCKER_COMPOSE)\r\nelse ifdef DOCKER_TOOL\r\nDOCKER_BIN:=$(DOCKER_TOOL) compose\r\nendif # DOCKER_* checks\r\nendif # DOCKER_BIN\r\n\r\n# command for python-based mkdocs tool\r\nifndef MKDOCS\r\nMKDOCS:=mkdocs\r\nendif\r\n\r\n# build output related directories\r\nifdef OUT\r\nOUT_DIR=$(OUT)\r\nelse\r\nOUT_DIR=$(CURDIR)/BUILDS\r\nendif\r\nOUT_HEX=$(CURDIR)/source/Hexfile\r\n\r\n\r\n### global static variables\r\n\r\n# docker-related files\r\nDOCKER_YML=$(CURDIR)/Env.yml\r\nDOCKER_FILE=$(CURDIR)/scripts/IronOS.Dockerfile\r\n\r\n# docker dependencies\r\nDOCKER_DEPS=$(DOCKER_YML) $(DOCKER_FILE)\r\n\r\n# compose docker-compose command\r\nDOCKER_CMD=$(DOCKER_BIN)  -f $(DOCKER_YML)  run  --rm  builder\r\n\r\n# MkDocs config\r\nMKDOCS_YML=$(CURDIR)/scripts/IronOS-mkdocs.yml\r\n\r\n# supported models\r\nMODELS=TS100 TS80 TS80P Pinecil MHP30 Pinecilv2 S60 TS101 S60P T55 # target names & dir names\r\nMODELS_ML=Pinecil  Pinecilv2 # target names\r\nMODELS_MULTILANG=Pinecil_multi-lang  Pinecilv2_multi-lang # dir names\r\n\r\n# zip command (to pack artifacts)\r\nZIP=zip -q -j -r\r\n\r\n\r\n### targets\r\n\r\n# default target to show help\r\nhelp:\r\n\t@echo\r\n\t@echo \"Welcome!\"\r\n\t@echo \"This is $(INFO)\"\r\n\t@echo \"To read more about supported commands (aka \\\"targets\\\"), type \\\"make list\\\".\"\r\n\t@echo \"But if you're impatient then just type \\\"make docker-build\\\" - it will:\"\r\n\t@echo \"  * download, configure & start docker container\"\r\n\t@echo \"  * compile builds of IronOS firmware for all supported models inside that container\"\r\n\t@echo \"  * export generated binaries to \\\"scripts/ci/artefacts/\\\" local directory\"\r\n\t@echo \"Patches are welcome. Happy Hacking!\"\r\n\t@echo\r\n\r\n# target to list supported targets with additional info\r\nlist:\r\n\t@echo\r\n\t@echo \"Supported top-level targets:\"\r\n\t@echo \"  * help               - shows short basic help\"\r\n\t@echo \"  * list               - this output\"\r\n\t@echo \"  * docker-shell       - start docker container with shell inside to work on IronOS with all tools needed\"\r\n\t@echo \"  * docker-build       - compile builds of IronOS for supported models inside docker container and place them to $(OUT_DIR) (set OUT env var to override: OUT=/path/to/dir make ...)\"\r\n\t@echo \"  * docker-clean       - delete created docker image for IronOS & its build cache objects (to free a lot of space)\"\r\n\t@echo \"  * docker-clean-cache - delete build cache objects of IronOS docker image EXCEPT the image itself\"\r\n\t@echo \"  * docker-clean-image - delete docker image for IronOS EXCEPT its build cache objects\"\r\n\t@echo \"  * docs               - generate \\\"site\\\"/ directory with documentation in a form of static html files using ReadTheDocs framework and $(MKDOCS_YML) local config file\"\r\n\t@echo \"  * docs-deploy        - generate & deploy docs online to gh-pages branch of current github repo\"\r\n\t@echo \"  * tests              - run set of checks, linters & tests (equivalent of github CI IronOS project settings for push trigger)\"\r\n\t@echo \"  * clean-build        - delete generated files & dirs produced during builds EXCEPT docker image & its build cache\"\r\n\t@echo \"  * clean-full         - delete generated files & dirs produced during builds INCLUDING docker image & its build cache\"\r\n\t@echo \"\"\r\n\t@echo \"NOTES on supported pass-trough targets:\"\r\n\t@echo \"  * main Makefile is located in source/ directory and used to build the firmware itself;\"\r\n\t@echo \"  * this top-level Makefile supports to call targets from source/Makefile;\"\r\n\t@echo \"  * if you set up development environment right on your host, then to build firmware locally, you can just type right from here:\"\r\n\t@echo\r\n\t@echo \" $$ make firmware-LANG_ID model=MODEL_ID\"\r\n\t@echo\r\n\t@echo \"Full list of current supported IDs:\"\r\n\t@echo \"  * LANG_ID: $(shell echo \"`ls Translations/ | grep -e \"^translation_.*.json$$\" | sed -e 's,^translation_,,g; s,\\.json$$,,g; ' | tr '\\n' ' '`\")\"\r\n\t@echo \"  * MODEL_ID: $(MODELS)\"\r\n\t@echo\r\n\t@echo \"For example, to make a local build of IronOS firmware for TS100 with English language, just type:\"\r\n\t@echo\r\n\t@echo \" $$ make firmware-EN model=TS100\"\r\n\t@echo\r\n\r\n# detect availability of docker\r\ndocker-check:\r\nifeq ($(DOCKER_BIN),)\r\n\t@echo \"ERROR: Can't find docker-compose nor docker tool. Please, install docker and try again\"\r\n\t@exit 1\r\nelse\r\n\t@true\r\nendif\r\n\r\n# former start_dev.sh\r\ndocker-shell: docker-check  $(DOCKER_DEPS)\r\n\t$(DOCKER_CMD)\r\n\r\n# former build.sh\r\ndocker-build: docker-check  $(DOCKER_DEPS)\r\n\t$(DOCKER_CMD)  make  build-all\r\n\r\n# delete docker image\r\ndocker-clean-image:\r\n\t-docker  rmi  ironos-builder:latest\r\n\r\n# delete docker build cache objects\r\ndocker-clean-cache:\r\n\t-docker  system  prune  --filter label=ironos-builder:latest  --force\r\n\r\n# delete docker image & cache related to IronOS container\r\ndocker-clean: docker-clean-image  docker-clean-cache\r\n\r\n# generate docs in site/ directory (DIR for -d is relative to mkdocs.yml file location, hence use default name/location site by setting up ../site)\r\ndocs: $(MKDOCS_YML)  Documentation/*  Documentation/Flashing/*  Documentation/images/*\r\n\t$(MKDOCS)  build  -f $(MKDOCS_YML)  -d ../site\r\n\r\n# deploy docs to gh-pages branch of current repo automagically using ReadTheDocs framework\r\ndocs-deploy: $(MKDOCS_YML)  Documentation/*  Documentation/Flashing/*  Documentation/images/*\r\n\t$(MKDOCS)  gh-deploy  -f $(MKDOCS_YML)  -d ../site\r\n\r\n# routine check to verify documentation\r\ntest-md:\r\n\t@echo \"\"\r\n\t@echo \"---- Checking documentation... ----\"\r\n\t@echo \"\"\r\n\t@./scripts/deploy.sh  docs\r\n\r\n# shell style & linter check (github CI version of shellcheck is more recent than alpine one so the latter may not catch some policies)\r\ntest-sh:\r\n\t@echo \"\"\r\n\t@echo \"---- Checking shell scripts... ----\"\r\n\t@echo \"\"\r\n\t@for f in `find  ./scripts  -type f  -iname \"*.sh\"  ! -name \"flash_ts100_linux.sh\"` ; do shellcheck \"$${f}\"; done;\r\n\r\n# python-related tests & checks\r\ntest-py:\r\n\t@echo \"\"\r\n\t@echo \"---- Checking python code... ----\"\r\n\t@echo \"\"\r\n\tflake8  Translations\r\n\tblack  --diff  --check  Translations\r\n\t@$(MAKE)  -C source/  Objects/host/brieflz/libbrieflz.so\r\n\t./Translations/brieflz_test.py\r\n\t./Translations/make_translation_test.py\r\n\r\n# clang-format check for C/C++ code style\r\ntest-ccpp:\r\n\t@echo \"\"\r\n\t@echo \"---- Checking C/C++ code... ----\"\r\n\t@echo \"\"\r\n\t$(MAKE)  -C source/  clean  check-style\r\n\r\n# meta target for tests & checks based on .github/workflows/push\r\ntests: test-md  test-sh  test-py  test-ccpp\r\n\t@echo \"\"\r\n\t@echo \"All tests & checks have been completed successfully.\"\r\n\t@echo \"\"\r\n\r\n# former scripts/ci/buildAll.sh - all in one to build all firmware & place the produced binaries into one output directory\r\nbuild-all:\r\n\t@mkdir  -p  $(OUT_DIR)\r\n\t@chmod  0777  $(OUT_DIR)\r\n\tcd  source  &&  bash  ./build.sh\r\n\t@echo \"All Firmware built\"\r\n\t@for model in $(MODELS); do \\\r\n\t\tmkdir  -p  $(OUT_DIR)/$${model} ; \\\r\n\t\tcp  -r  $(OUT_HEX)/$${model}_*.bin  $(OUT_DIR)/$${model}/ ; \\\r\n\t\tcp  -r  $(OUT_HEX)/$${model}_*.hex  $(OUT_DIR)/$${model}/ ; \\\r\n\t\tcp  -r  $(OUT_HEX)/$${model}_*.dfu  $(OUT_DIR)/$${model}/ ; \\\r\n\tdone;\r\n\t@echo \"Resulting output directory: $(OUT_DIR)\"\r\n\r\n# target to build multilang supported builds for Pinecil & PinecilV2\r\nbuild-multilang:\r\n\t@for modelml in $(MODELS_ML); do \\\r\n\t\t$(MAKE)  -C source/  -j2  model=$${modelml}  firmware-multi_compressed_European  firmware-multi_compressed_Belarusian+Bulgarian+Russian+Serbian+Ukrainian  firmware-multi_Chinese+Japanese ; \\\r\n\t\tmkdir  -p  $(OUT_DIR)/$${modelml}_multi-lang ; \\\r\n\t\tcp  $(OUT_HEX)/$${modelml}_multi_*.bin   $(OUT_DIR)/$${modelml}_multi-lang ; \\\r\n\t\tcp  $(OUT_HEX)/$${modelml}_multi_*.hex   $(OUT_DIR)/$${modelml}_multi-lang ; \\\r\n\t\tcp  $(OUT_HEX)/$${modelml}_multi_*.dfu   $(OUT_DIR)/$${modelml}_multi-lang ; \\\r\n\tdone;\r\n\t@echo \"Resulting output directory: $(OUT_DIR)\"\r\n\r\n# target to reproduce zips according to github CI settings; artifacts will be in $(OUT_DIR)/CI/*.zip\r\nci: tests  build-all  build-multilang\r\n\t@mkdir  -p  $(OUT_DIR)/metadata;\r\n\t@for m in $(MODELS) $(MODELS_MULTILANG); do \\\r\n\t\tcp LICENSE scripts/LICENSE_RELEASE.md  $(OUT_DIR)/$${m}/ ; \\\r\n\t\t$(ZIP)  $(OUT_DIR)/$${m}.zip  $(OUT_DIR)/$${m} ;           \\\r\n\t\t./source/metadata.py  $${m}.json  $${m};                   \\\r\n\t\tcp  $(OUT_HEX)/$${m}.json  $(OUT_DIR)/metadata;            \\\r\n\tdone;\r\n\t@$(ZIP)  $(OUT_DIR)/metadata.zip  $(OUT_DIR)/metadata\r\n\t@mkdir -p  $(OUT_DIR)/CI\r\n\t@mv        $(OUT_DIR)/*.zip       $(OUT_DIR)/CI\r\n\t@chmod  0777  $(OUT_DIR)/CI\r\n\t@chmod  0666  $(OUT_DIR)/CI/*.zip\r\n\t@echo \"Resulting artifacts directory: $(OUT_DIR)/CI\"\r\n\r\n# pass-through target for Makefile inside source/ dir\r\n%:\r\n\t$(MAKE)  -C source/  $@\r\n\r\n# global clean-up target for produced/generated files inside tree\r\nclean-build:\r\n\t$(MAKE)  -C source/  clean-all\r\n\trm  -Rf  site\r\n\trm  -Rf  $(OUT_DIR)\r\n\r\n# global clean-up target\r\nclean-full: clean-build  docker-clean\r\n\r\n# phony targets\r\n.PHONY:  help  list\r\n.PHONY:  docker-check  docker-shell  docker-build  docker-clean-image  docker-clean-cache  docker-clean\r\n.PHONY:  docs  docs-deploy\r\n.PHONY:  test-md  test-sh  test-py  test-ccpp  tests\r\n.PHONY:  build-all  build-multilang  ci\r\n.PHONY:  clean-build  clean-full\r\n"
  },
  {
    "path": "README.md",
    "content": "[![CI Build](https://github.com/Ralim/IronOS/actions/workflows/push.yml/badge.svg)](https://github.com/Ralim/IronOS/actions/workflows/push.yml)\n[![Total Downloads](https://img.shields.io/github/downloads/ralim/IronOS/total)](https://github.com/Ralim/IronOS)\n[![Contributors](https://img.shields.io/github/contributors-anon/ralim/ironos?color=blue&style=flat)](https://github.com/Ralim/IronOS/graphs/contributors)\n[![Latest Release](https://img.shields.io/github/v/release/ralim/IronOS)](https://github.com/Ralim/IronOS/releases/latest)\n\n# IronOS - Open Source Flexible Firmware for Soldering Hardware\n\n_This repository was formerly known as TS100, it's the same great code. Just with more supported devices._\n\nOriginally conceived as an alternative firmware for the _TS100_, this firmware has evolved into a complex soldering hardware control firmware.\n\nThe firmware implements all of the standard features of a _smart_ soldering hardware, with lots of little extras and tweaks.\nI highly recommend reading the installation guide fully when installing on your device. And after install just explore the settings menu.\n\nFor soldering hardware that is designed to be powered by _smart_ power sources such as _PD_ or _QC_, the firmware supports settings around the negotiated power and voltage.\nFor soldering hardware that is designed to be powered by batteries (_TS100_ & _Pinecil_), settings for a cutoff voltage for battery protection are supported.\n\nCurrently **31** languages are supported. When downloading the firmware for your soldering hardware, take note of the _language code_ in the file name.\n\nThis project is considered feature complete for use on a daily basis, _so please suggest any feature improvements you would like!_\n\n_This firmware does **NOT** support the USB port while running for changing settings (this is done through the onscreen menu only). Custom logos are edited on a computer and flashed in the same manner as firmware._\n\n## Supported Hardware\n\n|     Device     | DC  | QC  | PD  | EPR\\*\\*\\*\\* | BLE | Tip Sense | Recommended Purchase |                  Notes                  |\n| :------------: | :-: | :-: | :-: | :-: | :-: | :-------: | :------------------: | :-------------------------------------: |\n| Miniware MHP30 | ❌  | ❌  | ✔️  | ❌  | ❌  |    ✔️     |          ✔️          |                                         |\n|   Pinecil V1   | ✔️  | ✔️  | ✔️  | ❌  | ❌  |    ❌     |        ❌ \\*         |                                         |\n|   Pinecil V2   | ✔️  | ✔️  | ✔️  | ✔️  | ✔️  |    ✔️     |          ✔️          |                                         |\n| Miniware TS101 | ✔️  | ❌  | ✔️  | ✔️  | ❌  |    ✔️     |     ✔️ \\*\\*\\*\\*\\*    | Full OLED resolution not yet supported. |\n|   Sequre S60   | ❌  | ❌  | ✔️  | ❌  | ❌  |    ❌     |          ✔️          | Full OLED resolution not yet supported. |\n|  Sequre S60P   | ❌  | ❌  | ✔️  | ❌  | ❌  |    ❌     |          ✔️          | Full OLED resolution not yet supported. |\n|   Sequre T55   | ❌  | ❌  | ✔️  | ❌  | ❌  |    N/A    |          ✔️          | Full OLED resolution not yet supported. |\n| Miniware TS80P | ❌  | ✔️  | ✔️  | ❌  | ❌  |    N/A    |          ✔️          |                                         |\n| Miniware TS100 | ✔️  | ❌  | ❌  | ❌  | ❌  |    ❌     |        ❌\\*\\*        |                                         |\n| Miniware TS80  | ❌  | ✔️  | ❌  | ❌  | ❌  |    N/A    |       ❌\\*\\*\\*       |                                         |\n\n_Tip Sense_ refers to the device being able to choose between the _\"regular\"_ _TS100_ or _Hakko T12 style_ tips and _Pine64_'s custom shorter tips which have lower resistance and allow for more power. This is N/A for _TS80(P)_ as there is only one model of tip for them.\n\n_Recommended Purchase_ is only referring to if you are buying a **new** device. Of course all the devices listed are supported and will work excellently for years to come.\n\nThe _TS101_ & _S60(P)_ irons and _MHP30_ & _T55_ plates feature a higher resolution OLED than other devices. Work is ongoing to support this fully, for now a cropped view is usable.\n\n\\* _PinecilV1_ stopped being manufactured a long time ago now, all models for sale online are generally clones (or old stock). Vendors are trying to sell these for more than _Pine64_ sells the _V2_ for now. Thus the _V1_ is **_no longer recommended_**.\n\n\\*\\* Please note that _Miniware_ started shipping _TS100_'s using **cloned STM32 chips**. While these do work with _IronOS_, their **DFU bootloader** works terribly, and it is hard to get it to successfully flash larger firmware images like _IronOS_ without timing out. This is the main reason why the _TS100_ is **_no longer recommended_**.\n\n\\*\\*\\* _TS80_ is replaced by _TS80P_. Production ramped down a long time ago and it's just existing stock clearing the system. It's marked not recommended being optimistic that people might pause and buy the far superior _TS80P_ instead. This is the main reason why the _TS80_ is **_no longer recommended_**.\n\n\\*\\*\\*\\* **EPR/PPS with 28V support** is _**disabled by default**_ due to [safety concerns](https://github.com/Ralim/IronOS/pull/2073), but to turn it back on set\n_PD Mode_ option in _Power settings_ submenu to _Safe_ or _Default_.\n\n\\*\\*\\*\\*\\* Some users confirm that there is a version of newer _TS101_ revision with another OLED screen model, which is not supported yet at all by _IronOS_ unfortunately. See [this bug report](https://github.com/Ralim/IronOS/issues/2063) for more information.\n\n## Getting Started\n\nTo get started with _IronOS firmware_, please jump to [Getting Started Guide](https://ralim.github.io/IronOS/GettingStarted/).\n\n## Installation\n\nFor notes on installation for your device, please refer to the flashing guide for your device:\n\n- [MHP30](https://ralim.github.io/IronOS/Flashing/MHP30)\n- [Pinecil V1](https://ralim.github.io/IronOS/Flashing/Pinecil%20V1/)\n- [Pinecil V2](https://ralim.github.io/IronOS/Flashing/Pinecil%20V2/)\n- [TS80 / TS80P](https://ralim.github.io/IronOS/Flashing/TS80%28P%29/)\n- [TS100](https://ralim.github.io/IronOS/Flashing/TS100)\n\n## Builds\n\nThe links in the table below allow to download available builds directly:\n- current _Stable Release_ is **`v2.22`**;\n- _Development Build_ **dynamically** provides _**the latest successful build**_ from **`dev`** branch.\n\n|        Device         | Stable Release | Development Build |\n|:---------------------:|:--------------:|:-----------------:|\n| Pinecil  V1           | [Pinecil.zip](https://github.com/Ralim/IronOS/releases/download/v2.23/Pinecil.zip)                           | [Pinecil.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/Pinecil.zip)                           |\n| Pinecil  V1/multilang | [Pinecil_multi-lang.zip](https://github.com/Ralim/IronOS/releases/download/v2.23/Pinecil_multi-lang.zip)     | [Pinecil_multi-lang.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/Pinecil_multi-lang.zip)     |\n| Pinecil  V2           | [PinecilV2.zip](https://github.com/Ralim/IronOS/releases/download/v2.23/PinecilV2.zip)                       | [PinecilV2.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/Pinecilv2.zip)                       |\n| Pinecil  V2/multilang | [PinecilV2_multi-lang.zip](https://github.com/Ralim/IronOS/releases/download/v2.23/PinecilV2_multi-lang.zip) | [PinecilV2_multi-lang.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/Pinecilv2_multi-lang.zip) |\n| Miniware TS100        | [TS100.zip](https://github.com/Ralim/IronOS/releases/download/v2.23/TS100.zip)                               | [TS100.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/TS100.zip)                               |\n| Miniware TS101        | [TS101.zip](https://github.com/Ralim/IronOS/releases/download/v2.23/TS101.zip)                               | [TS101.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/TS101.zip)                               |\n| Miniware TS80         | [TS80.zip](https://github.com/Ralim/IronOS/releases/download/v2.23/TS80.zip)                                 | [TS80.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/TS80.zip)                                 |\n| Miniware TS80P        | [TS80P.zip](https://github.com/Ralim/IronOS/releases/download/v2.23/TS80P.zip)                               | [TS80P.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/TS80P.zip)                               |\n| Miniware MHP30        | [MHP30.zip](https://github.com/Ralim/IronOS/releases/download/v2.23/MHP30.zip)                               | [MHP30.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/MHP30.zip)                               |\n| Sequre   S60          | [S60.zip](https://github.com/Ralim/IronOS/releases/download/v2.23/S60.zip)                                   | [S60.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/S60.zip)                                   |\n| Sequre   S60P         | Not Released                                                                                                 | [S60P.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/S60P.zip)                                 |\n| Sequre   T55          | Not Released                                                                                                 | [T55.zip](https://nightly.link/Ralim/IronOS/workflows/push/dev/T55.zip)                                   |\n\n## Key Features\n\n- PID style iron temperature control;\n- automatic sleep with selectable sensitivity;\n- adjustable & tweakable motion wake support;\n- all settings exposed in the intuitive menu;\n- (_TS100_) set a voltage lower limit for Lithium batteries so you don't kill your battery pack;\n- (_TS80_) set 18W or 24W settings for your power bank;\n- (_TS80P_) automatically negotiates appropriate PD and falls back to QC mode like _TS80_;\n- (_Pinecil_) supports all 3 power modes (PD, QC, DC In);\n- (_Pinecilv2_) supports _USB-PD EPR_ for **28V** operation;\n- improved readability Fonts, supporting multiple languages;\n- use hardware features to improve reliability;\n- boost mode lets you temporarily change the temperature when soldering (i.e. raise the temperature for short periods);\n- (_TS100_/_Pinecil_) battery charge level indicator if power source set to a LiPo cell count;\n- (_TS80_/_TS80P_/_Pinecil_) power bank operating voltage is displayed;\n- [custom boot up logo support](https://ralim.github.io/IronOS/Logo/)[^bootlogo];\n- automatic LCD rotation based on the orientation;\n- ... and many many other cool & hackable features![^changelog]\n\n[^bootlogo]:\n    **BOOTUP LOGO NOTICE**:\n    IronOS supports both a bootup logo _AND_ bootup animations.\n    However, _**they are no longer included in this repo**_.\n    **Please, [read the docs](https://ralim.github.io/IronOS/Logo/) for more information**.\n\n[^changelog]:\n    [See the full changelog here](https://ralim.github.io/IronOS/History).\n\n## Basic Control\n\nSupported device is controlled by two buttons which can be pressed in the following ways:\n - short: ~1 second or so;\n - long: more than 1 second;\n - both (press & hold both of them together).\n\nAvailable buttons are:\n - `+/A` button: near the front closer to the tip (for irons) or on the left side of the device (for plates);\n - `-/B` button: near the back far from the tip (for irons) or on the right side of the device (for plates).\n\nAfter powering on the device for the first time with _IronOS_ installed and having the tip/plate plugged in, on the main menu in _standby mode_ the unit shows a pair of prompts for the two most common operations:\n- pressing the `+/A` button enters the _soldering mode_;\n- pressing the `-/B` button enters the _settings menu_;\n- in _soldering mode_:\n  - short press of `+/A` / `-/B` buttons changes the soldering temperature;\n  - long press of the `+/A` button enables _boost mode_ (increasing soldering temperature to the adjustable setting as long as the button is pressed);\n  - long press of the `-/B` button enters _standby mode_ and stops heating;\n- in _standby mode_:\n  - long press of the `+/A` button enters _soldering temperature adjust mode_ (the same as the one in the _soldering mode_, but allows to adjust the temperature before heating up);\n  - long hold of the `-/B` button enters the [_debug menu_](https://ralim.github.io/IronOS/DebugMenu/);\n- in _menu mode_ (to make it short here):\n  - `-/B` scrolls & cycles through menus and submenus;\n  - `+/A` enters to menu & submenu settings or changes their values if they are activated already.\n\nAdditional details are described in the [menu information](https://ralim.github.io/IronOS/Menu/).\n\n## Remote Control\n\n### Pinecil V2 only\n\nPinecil V2 has [_Bluetooth Low Energy_ module](https://ralim.github.io/IronOS/Bluetooth), which is supported by _IronOS_ since `2.21` release to control some of the settings using additional tools like [PineSAM](https://github.com/builder555/PineSAM) or [PineTool](https://github.com/lachlanbell/PineTool). In `2.21` and `2.22` releases the module was _on_ by default. However, **_Bluetooth_ is turned off in the settings by default in current `dev` builds and for 2.23+** [due to security concerns](#1856).[^ble]\n\nTo enable _Bluetooth_ back:\n- go to _Settings_ menu;\n- press `-/B` button four times to scroll the menu for `Advanced settings`;\n- press `+/A` button to open submenu;\n- press `+/A` button to toggle/enable _Bluetooth_ feature;\n- press `-/B` **and hold it** for just more than five seconds to exit from the _Settings_ menu.\n\n[^ble]:\n    This is related only to situations when a user restores default settings using menu, or when _IronOS_ update is taking place on a new device or on a device with a previous firmware version.\n\n## Translations\n\nIs your preferred language missing localisation of some of the text?\nTranslations are stored as `json` files in the `Translations` folder.\n_Pull requests_ are loved and accepted to enhance the firmware.\n\n## Thanks\n\nIf you love this firmware and want to continue my caffeine addiction, you can do so [here](https://paypal.me/RalimTek) (or email me for other options).\nI also want to give a shout out to all of the [Fantastic Contributors](https://github.com/Ralim/IronOS/graphs/contributors).\n\nEspecially to the following users, who have helped in various ways that are massively appreciated:\n\n- [Dhiltonp](https://github.com/dhiltonp)\n- [Mrkvozrout](https://github.com/Mrkvozrout)\n- [JonnieZG](https://github.com/jonnieZG)\n- [Federck](https://github.com/federck)\n- [Jvitkauskas](https://github.com/jvitkauskas)\n- [Doegox](https://github.com/doegox)\n- [Perillamint](https://github.com/perillamint)\n- [GeminiServer](https://github.com/GeminiServer)\n- [Patrick Horlebein](https://github.com/PixelPirate)\n- [Firebie](https://github.com/Firebie)\n- [Agatti](https://github.com/agatti)\n- [Discip](https://github.com/discip)\n- [Paul Fertser](https://github.com/paulfertser)\n\nPlus the huge number of people who have contributed translations, your effort is massively appreciated.\n\n## License\n\nThe code created by the community is covered by the [GNU GPLv3](https://www.gnu.org/licenses/gpl-3.0.html#license-text) license **unless noted elsewhere**.\nOther components such as _FreeRTOS_ and _USB-PD_ have their own licenses.\n\n## Commercial Use\n\nThis software is provided _**\"AS IS\"**_, so I cannot provide any commercial support for the firmware.\nHowever, you are more than welcome to distribute links to the firmware or provide hardware with this firmware.\n**Please do not re-host the files, but rather link to this page, so that there are no old versions of the firmware scattered around**.\n"
  },
  {
    "path": "Translations/BitmapEditor.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <script src=\"https://cdn.jsdelivr.net/npm/vue/dist/vue.js\"></script>\n    <script src=\"translations_commons.js\"></script>\n    <title>TS100 Bitmap Editor</title>\n    <style id=\"styles\">\n      .matrix {\n        display: inline-block;\n        padding: 0px 0px 1px 1px;\n        background-color: #666;\n        margin-top: 1em;\n        margin-bottom: 1em;\n      }\n\n      .matrix * {\n        font-size: 0;\n      }\n      .r {\n        white-space: nowrap;\n      }\n      .c {\n        margin: 1px 1px 0px 0px;\n        display: inline-block;\n        background-color: #fff;\n        height: 10px;\n        width: 10px;\n      }\n\n      .x {\n        background-color: #000;\n      }\n\n      .header {\n      }\n\n      .data input,\n      .data textarea {\n        margin-top: 1em;\n        width: 100%;\n      }\n\n      .actions {\n      }\n    </style>\n    <script>\n      var ink, pressed, ev;\n      function mousedown(e) {\n        c = window.event.target;\n        classes = c.className.split(\" \");\n        if (classes.indexOf(\"c\") < 0) {\n          return;\n        }\n        ink = classes.indexOf(\"x\") < 0;\n        pressed = true;\n        ev = e;\n        enter(e);\n      }\n\n      function mouseup(e) {\n        ev = e;\n        pressed = false;\n      }\n\n      function enter(e) {\n        if (!pressed) {\n          return;\n        }\n        ev = e;\n        c = window.event.target;\n        paint(c, ink);\n        stringFromMatrix();\n      }\n\n      function paint(c, ink) {\n        var cellInk = isInk(c);\n        if (ink) {\n          if (!cellInk) {\n            c.className += \" x\";\n          }\n        } else {\n          if (cellInk) {\n            c.className = \"c\";\n          }\n        }\n      }\n\n      function isInk(c) {\n        try {\n          var classes = c.className.split(\" \");\n          return classes.indexOf(\"x\") >= 0;\n        } catch (e) {\n          return false;\n        }\n      }\n\n      function getMatrix() {\n        return document.getElementById(\"matrix\");\n      }\n\n      function getCoordinatesFromId(str) {\n        i = str.indexOf(\"_\");\n        return {\n          row: parseInt(str.substring(1, i)),\n          col: parseInt(str.substring(i + 1)),\n        };\n      }\n\n      function clearMatrix() {\n        for (var r = 0; r < app.matrix.rows; r++) {\n          for (var c = 0; c < app.matrix.cols; c++) {\n            paint(getCell(r, c), false);\n          }\n        }\n      }\n\n      function invertMatrix() {\n        for (var r = 0; r < app.matrix.rows; r++) {\n          for (var c = 0; c < app.matrix.cols; c++) {\n            cell = getCell(r, c);\n            if (isInk(cell) == true) paint(cell, false);\n            else paint(cell, true);\n          }\n        }\n        stringFromMatrix();\n      }\n\n      function getCell(row, col) {\n        return document.getElementById(\"C\" + row + \"_\" + col);\n      }\n\n      function toMatrix(str) {\n        app.encodedData = str;\n        clearMatrix();\n        var strs = str.split(/[ ,]/);\n        var pair = false;\n        var c = 0;\n        var rs = 7;\n        for (var i = 0; i < strs.length; i++) {\n          var d = strs[i];\n          if (d.length > 0) {\n            if (startsWith(d, \"0x\")) {\n              v = parseInt(d.substring(2), 16);\n            } else {\n              v = parseInt(d);\n            }\n            sv = padLeft(v.toString(2), \"0\", 8);\n            for (r = 0; r < 8; r++) {\n              paint(getCell(rs - r, c), sv.charAt(r) == \"1\");\n            }\n            c++;\n            if (c >= app.matrix.cols) {\n              c = 0;\n              rs += 8;\n            }\n          }\n        }\n        stringFromMatrix(true, false);\n      }\n\n      function escapedToMatrix(str) {\n        app.encodedEscapeSequence = str;\n        clearMatrix();\n        var strs = str.split(\"\\\\x\");\n        var c = 0;\n        var rs = 7;\n        for (var i = 0; i < strs.length; i++) {\n          var d = strs[i];\n          if (d.length > 0) {\n            v = parseInt(d, 16);\n            sv = padLeft(v.toString(2), \"0\", 8);\n            for (r = 0; r < 8; r++) {\n              paint(getCell(rs - r, c), sv.charAt(r) == \"1\");\n            }\n            c++;\n            if (c >= app.matrix.cols) {\n              c = 0;\n              rs += 8;\n            }\n          }\n        }\n        stringFromMatrix(false, true);\n      }\n\n      // Rather than trying to figure these crazy cells/matrix, we just\n      // slurp up the encoded string at the end. It's updated on every\n      // pixl change, redraw, and load so just slipping into\n      // stringFromMatrix is tacky, but seemss to catch all our refreshes.\n      //\n      // The string is CSV hex, with the first byte being the first column,\n      // and bit zero being the UL corner. Second byte is second column, etc.\n      // app.matrix.{cols,rows} is set by the drawing code to size the\n      // image for a character, an icon, or the full screen image. This\n      // code adapts resizing from that.\n      // INVERT is handled by the code above us, our fill/clearRect handles\n      // that.\n      function updateCanvas(buf) {\n        // Number of squared canvas pixels to image pixels;\n        var scale = 1;\n\n        var c = document.getElementById(\"myCanvas\");\n        var context = c.getContext(\"2d\");\n        context.fillRect(0, 0, c.width, c.height);\n\n        if (c.width != app.matrix.cols || c.height != app.matrix.rows) {\n          c.width = app.matrix.cols * scale;\n          c.height = app.matrix.rows * scale;\n        }\n        context.clearRect(0, 0, c.width, c.height);\n\n        var a = buf.split(\",\");\n        var x = 0;\n        var y = 0;\n\n        for (var e = 0; e < a.length; e++) {\n          byte = parseInt(a[e], 16);\n          for (var bit = 0; bit < 8; bit++) {\n            // debug.innerHTML+= e + \": \" + x + \"/\" +  y + \" \" + a.length + \"</br>\";\n            // debug.innerHTML+= app.matrix.cols + \"</br>\";\n            if (x > c.cols) {\n              throw \"write past right of canvas\";\n            }\n            if (x > c.rows) {\n              throw \"write past bottom of canvas\";\n            }\n            if (byte & (1 << bit)) {\n              // FillRect give better B&W image\n              if (scale > 1) {\n                context.moveTo(x, y);\n                context.lineWidth = scale;\n                context.lineTo(x + scale, y);\n              } else {\n                context.beginPath();\n                context.fillRect(x, y, 1, 1);\n                context.fill();\n              }\n            }\n            y += scale;\n          }\n          y -= 8 * scale;\n          x += scale;\n          if (x == app.matrix.cols * scale) {\n            x = 0;\n            y = 8 * scale;\n          }\n          // debug.innerHTML+= x + \" \" + x/app.matrix.cols + \" \" + y + \"</br>\";\n          // debug.innerHTML+=byte + \"</br>\";\n        }\n\n        context.strokeStyle = \"black\";\n        context.stroke();\n        return c;\n      }\n\n      function makePNG() {\n        var canvas = document.getElementById(\"myCanvas\");\n        //var context = c.getContext(\"2d\");\n        //window.location = canvas.toDataURL(\"image/png\");\n        ///var image = canvas.toDataURL(\"image/png\");\n        //\tdocument.write('<img src=\"'+image+'\"/>');\n        var image = canvas\n          .toDataURL(\"image/png\")\n          .replace(\"image/png\", \"image/octet-stream\");\n        window.location.href = image;\n      }\n\n      function stringFromMatrix(skipEncodedData, skipEncodedEscapeSequence) {\n        var str = \"\";\n        var strEscaped = \"\";\n        var delim = \"\";\n        var blocks = app.matrix.rows / 8;\n        var rs = 7;\n        for (var block = 0; block < blocks; block++) {\n          for (var c = 0; c < app.matrix.cols; c++) {\n            var b = 0;\n            for (var r = 0; r < 8; r++) {\n              var cell = document.getElementById(\"C\" + (rs - r) + \"_\" + c);\n              if (isInk(cell)) {\n                b |= 1 << (7 - r);\n              }\n            }\n            str += delim + \"0x\" + padLeft(b.toString(16).toUpperCase(), \"0\", 2);\n            strEscaped += \"\\\\x\" + padLeft(b.toString(16).toUpperCase(), \"0\", 2);\n            delim = \",\";\n          }\n          rs += 8;\n        }\n        if (!skipEncodedData) {\n          app.encodedData = str;\n        }\n        if (!skipEncodedEscapeSequence) {\n          app.encodedEscapeSequence = strEscaped;\n        }\n        updateCanvas(str);\n        return str;\n      }\n\n      function start() {\n        app = new Vue({\n          el: \"#app\",\n          data: {\n            matrix: {\n              cols: 12,\n              rows: 16,\n            },\n            type: \"big\",\n            encodedData: \"\",\n            encodedEscapeSequence: \"\",\n          },\n          methods: {\n            VtoMatrix: function (val) {\n              toMatrix(val);\n            },\n            escapedToMatrix: function (val) {\n              escapedToMatrix(val);\n            },\n\n            VchangeSize: function () {\n              if (app.type == \"big\") {\n                app.matrix.cols = 12;\n                app.matrix.rows = 16;\n              } else if (app.type == \"small\") {\n                app.matrix.cols = 6;\n                app.matrix.rows = 8;\n              } else if (app.type == \"icon\") {\n                app.matrix.cols = 16;\n                app.matrix.rows = 16;\n              } else if (app.type == \"icon24\") {\n                app.matrix.cols = 24;\n                app.matrix.rows = 16;\n              } else if (app.type == \"screen\") {\n                app.matrix.cols = 84;\n                app.matrix.rows = 16;\n              } else if (app.type == \"fullscreen\") {\n                app.matrix.cols = 96;\n                app.matrix.rows = 16;\n              }\n              stringFromMatrix();\n            },\n          },\n        });\n        toMatrix(\n          \"0x00,0xF0,0x08,0x0E,0x02,0x02,0x02,0x02,0x0E,0x08,0xF0,0x00,0x00,0x3F,0x40,0x5C,0x5C,0x5C,0x5C,0x5C,0x5C,0x40,0x3F,0x00\"\n        );\n      }\n\n      var margins = 1;\n\n      function changesize(x) {\n        var cursize = x;\n        var mg;\n        if (x < 6) mg = 0;\n        else mg = 1;\n        //\t\tvar elements = document.getElementsByClassName('c');\n        //\t\tfor (var i=0; i<elements.length;i++){\n        //\t\t\telements.item(i).style=\"height: \"+x+\"px; width: \"+x+\"px;\"+mg;\n        //\t\t}\n        styles.sheet.rules[3].style.height = x + \"px\";\n        styles.sheet.rules[3].style.width = x + \"px\";\n        styles.sheet.rules[3].style.marginRight = mg + \"px\";\n        styles.sheet.rules[3].style.marginTop = mg + \"px\";\n        styles.sheet.rules[0].style.paddingLeft = mg + \"px\";\n        styles.sheet.rules[0].style.paddingBottom = mg + \"px\";\n      }\n\n      function importFile() {\n        var input, file, fr;\n        input = document.getElementById(\"fileinput\");\n        if (input.files[0]) {\n          file = input.files[0];\n          fr = new FileReader();\n          fr.onload = processData;\n          fr.readAsBinaryString(file);\n        }\n        function processData() {\n          var pushy, data, aB, bS;\n          pushy = [];\n          //\t\t\tbodyAppend(\"p\",\"processing data\");\n          data = fr.result;\n          for (i = 297; i < 297 + 192; i += 2) {\n            aB = data.charCodeAt(i + 1);\n            bS = aB.toString(16);\n            if (bS.length < 2) bS = \"0\" + bS;\n            pushy.push(bS);\n            aB = data.charCodeAt(i);\n            bS = aB.toString(16);\n            if (bS.length < 2) bS = \"0\" + bS;\n            pushy.push(bS);\n          }\n          escapedToMatrix(\"\\\\x\" + pushy.join(\"\\\\x\"));\n          //\t\t\tbodyAppend(\"p\",\"\\\\x\"+pushy.join(\"\\\\x\"));\n        }\n      }\n      function bodyAppend(tagName, innerHTML) {\n        var elm;\n\n        elm = document.createElement(tagName);\n        elm.innerHTML = innerHTML;\n        document.body.appendChild(elm);\n      }\n\n      window.onload = start;\n    </script>\n  </head>\n  <body>\n    <div id=\"app\">\n      <div class=\"header\">\n        <select v-model=\"type\" v-on:change=\"VchangeSize()\">\n          <option value=\"small\">Small Font (6x8)</option>\n          <option value=\"big\">Big Font (12x16)</option>\n          <option value=\"icon\">Icon (16x16)</option>\n          <option value=\"icon24\">Icon (24x16)</option>\n          <option value=\"screen\">Screen (84x16)</option>\n          <option value=\"fullscreen\">Full Screen (96x16)</option>\n        </select>\n        <a href=\"#\" onclick=\"changesize(1);\">1x</a>\n        <a href=\"#\" onclick=\"changesize(2);\">2x</a>\n        <a href=\"#\" onclick=\"changesize(4);\">4x</a>\n        <a href=\"#\" onclick=\"changesize(8);\">8x</a>\n        <a href=\"#\" onclick=\"changesize(10);\">10x</a>\n        <a href=\"#\" onclick=\"changesize(12);\">12x</a>\n        <a href=\"#\" onclick=\"changesize(16);\">16x</a>\n        <a href=\"#\" onclick=\"changesize(32);\">32x</a>\n        <a href=\"#\" onclick=\"invertMatrix();\">INVERT!</a>\n      </div>\n      <div\n        id=\"matrix\"\n        class=\"matrix\"\n        onmousedown=\"mousedown(this)\"\n        onmouseup=\"mouseup(this)\"\n        ondragstart=\"return false\"\n      >\n        <div :id=\"'R'+(r-1)\" class=\"r\" v-for=\"r in matrix.rows\">\n          <div\n            :id=\"'C'+(r-1)+'_'+(c-1)\"\n            class=\"c\"\n            onmouseenter=\"enter(this)\"\n            v-for=\"c in matrix.cols\"\n          ></div>\n        </div>\n      </div>\n      <div class=\"actions\">\n        <input\n          type=\"button\"\n          value=\"Clear\"\n          onclick=\"clearMatrix();stringFromMatrix()\"\n        />\n      </div>\n      <div class=\"data\">\n        <textarea\n          v-model=\"encodedData\"\n          style=\"width: 100%\"\n          v-on:change=\"VtoMatrix(encodedData)\"\n          rows=\"5\"\n        ></textarea>\n        <textarea\n          v-model=\"encodedEscapeSequence\"\n          style=\"width: 100%\"\n          v-on:change=\"escapedToMatrix(encodedEscapeSequence)\"\n          rows=\"5\"\n        ></textarea>\n      </div>\n\n      <form action=\"#\" onsubmit=\"return false;\">\n        <input type=\"file\" id=\"fileinput\" />\n        <input\n          type=\"button\"\n          id=\"btnLoad\"\n          value=\"Import\"\n          onclick=\"importFile();\"\n        />\n        (Remember to set correct canvas size before importing)\n      </form>\n      <br />\n\n      <canvas\n        id=\"myCanvas\"\n        width=\"96\"\n        height=\"16\"\n        style=\"border: 1px dotted #000000; padding: 10px\"\n      >\n      </canvas>\n\n      <form>\n        <input type=\"button\" value=\"Make PNG\" onclick=\"makePNG();\" />\n      </form>\n\n      <div id=\"debug\"></div>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "Translations/README.md",
    "content": "### CJK Notes\n\nUnlike Latin and Cyrillic scripts, CJK Unified Ideographs cannot be legibly\ndisplayed using the small font, which is only 6x8px in size. Therefore, Hanzi,\nKanji and Hanja can only be displayed using the 12x16px large font.\n\nBy default, menu items are shown using two lines of text with the small font.\nWhen translating such items for CJK, leave the first line empty and put the\ntranslated text on the second line. This way, the firmware will automatically\nknow to display the text using the large font. This also applies to the\n`SettingsResetMessage` text -- just start the message with `\\n`.\n"
  },
  {
    "path": "Translations/brieflz.py",
    "content": "import ctypes\nimport functools\nimport os\nfrom pathlib import Path\n\nHERE = Path(__file__).resolve().parent\n\n\n@functools.lru_cache(maxsize=None)\ndef _libbrieflz():\n    so_path = os.path.join(HERE, \"../source/Objects/host/brieflz/libbrieflz.so\")\n    libbrieflz = ctypes.cdll.LoadLibrary(so_path)\n    return libbrieflz\n\n\n@functools.lru_cache(maxsize=None)\ndef _fn_blz_max_packed_size():\n    \"\"\"Returns the blz_max_packed_size C function.\n    ::\n\n        /**\n        * Get bound on compressed data size.\n        *\n        * @see blz_pack\n        *\n        * @param src_size number of bytes to compress\n        * @return maximum size of compressed data\n        */\n        BLZ_API size_t\n        blz_max_packed_size(size_t src_size);\n    \"\"\"\n\n    fn = _libbrieflz().blz_max_packed_size\n    fn.argtype = [\n        ctypes.c_size_t,\n    ]\n    fn.restype = ctypes.c_size_t\n    return fn\n\n\ndef blz_max_packed_size(src_size: int) -> int:\n    \"\"\"Get bound on compressed data size.\"\"\"\n    fn_blz_max_packed_size = _fn_blz_max_packed_size()\n    return int(fn_blz_max_packed_size(src_size))\n\n\n@functools.lru_cache(maxsize=None)\ndef _fn_blz_workmem_size_level():\n    \"\"\"Returns the blz_workmem_size_level C function.\n    ::\n\n        /**\n        * Get required size of `workmem` buffer.\n        *\n        * @see blz_pack_level\n        *\n        * @param src_size number of bytes to compress\n        * @param level compression level\n        * @return required size in bytes of `workmem` buffer\n        */\n        BLZ_API size_t\n        blz_workmem_size_level(size_t src_size, int level);\n    \"\"\"\n\n    fn = _libbrieflz().blz_workmem_size_level\n    fn.argtype = [\n        ctypes.c_size_t,\n        ctypes.c_int,\n    ]\n    fn.restype = ctypes.c_size_t\n    return fn\n\n\ndef blz_workmem_size_level(src_size: int, level: int) -> int:\n    \"\"\"Get required size of `workmem` buffer.\"\"\"\n    fn_blz_workmem_size_level = _fn_blz_workmem_size_level()\n    return int(fn_blz_workmem_size_level(src_size, level))\n\n\n@functools.lru_cache(maxsize=None)\ndef _fn_blz_pack_level():\n    \"\"\"Returns the blz_pack_level C function.\n    ::\n\n        /**\n        * Compress `src_size` bytes of data from `src` to `dst`.\n        *\n        * Compression levels between 1 and 9 offer a trade-off between\n        * time/space and ratio. Level 10 is optimal but very slow.\n        *\n        * @param src pointer to data\n        * @param dst pointer to where to place compressed data\n        * @param src_size number of bytes to compress\n        * @param workmem pointer to memory for temporary use\n        * @param level compression level\n        * @return size of compressed data\n        */\n        BLZ_API unsigned long\n        blz_pack_level(const void *src, void *dst, unsigned long src_size,\n                       void *workmem, int level);\n    \"\"\"\n\n    fn = _libbrieflz().blz_pack_level\n    fn.argtype = [\n        ctypes.c_char_p,\n        ctypes.c_char_p,\n        ctypes.c_ulong,\n        ctypes.c_char_p,\n        ctypes.c_int,\n    ]\n    fn.restype = ctypes.c_ulong\n    return fn\n\n\ndef compress(data: bytes) -> bytes:\n    \"\"\"Returns a bytes object of the brieflz-compressed data.\"\"\"\n\n    fn_blz_pack_level = _fn_blz_pack_level()\n\n    output_buffer_len = blz_max_packed_size(len(data))\n\n    src = data\n    dst = ctypes.create_string_buffer(output_buffer_len)\n    src_size = len(src)\n    workmem = ctypes.create_string_buffer(blz_workmem_size_level(len(data), 10))\n    level = 10\n\n    res = fn_blz_pack_level(src, dst, src_size, workmem, level)\n\n    if res == 0:\n        raise BriefLZError()\n    else:\n        return bytes(dst[:res])  # type: ignore\n\n\n@functools.lru_cache(maxsize=None)\ndef _fn_blz_depack_srcsize():\n    \"\"\"Returns the blz_depack_srcsize C function.\n    ::\n\n        /**\n        * Decompress `src_size` bytes of data from `src` to `dst`.\n        *\n        * This function is unsafe. If the provided data is malformed, it may\n        * read more than `src_size` from the `src` buffer.\n        *\n        * @param src pointer to compressed data\n        * @param dst pointer to where to place decompressed data\n        * @param src_size size of the compressed data\n        * @return size of decompressed data\n        */\n        BLZ_API unsigned long\n        blz_depack_srcsize(const void *src, void *dst, unsigned long src_size);\n    \"\"\"\n\n    fn = _libbrieflz().blz_depack_srcsize\n    fn.argtype = [\n        ctypes.c_char_p,\n        ctypes.c_char_p,\n        ctypes.c_ulong,\n    ]\n    fn.restype = ctypes.c_ulong\n    return fn\n\n\ndef depack_srcsize(data: bytes, expected_depack_size: int) -> bytes:\n    \"\"\"Returns a bytes object of the uncompressed data.\"\"\"\n\n    fn_blz_depack_srcsize = _fn_blz_depack_srcsize()\n\n    output_buffer_len = expected_depack_size * 2\n\n    src = data\n    dst = ctypes.create_string_buffer(output_buffer_len)\n    src_size = len(src)\n\n    res = fn_blz_depack_srcsize(src, dst, src_size)\n\n    if res == 0:\n        raise BriefLZError()\n    else:\n        return bytes(dst[:res])  # type: ignore\n\n\nclass BriefLZError(Exception):\n    \"\"\"Exception raised for brieflz compression or decompression error.\"\"\"\n\n    def __init__(self):\n        pass\n"
  },
  {
    "path": "Translations/brieflz_test.py",
    "content": "#!/usr/bin/env python3\nimport brieflz\nimport unittest\n\n\nTEST_DATA = (\n    b\"Lorem ipsum dolor sit amet, consectetur adipiscing elit. \"\n    b\"Ut consequat mattis orci ac laoreet. Duis ac turpis tempus, varius lacus non, dignissim lectus. \"\n    b\"Curabitur quis metus luctus, sollicitudin ipsum at, dictum metus. \"\n    b\"Cras sed est nec ex tempor tincidunt in at ante. Vivamus laoreet urna eget lectus euismod feugiat. \"\n    b\"Duis a massa ac metus pellentesque interdum. Nunc congue, est faucibus convallis commodo, justo nibh sagittis augue, sed tristique urna neque vitae urna. \"\n    b\"Donec quis orci et purus imperdiet sollicitudin.\"\n)\n\n\nclass TestBriefLZ(unittest.TestCase):\n    def test_roundtrip(self):\n        packed = brieflz.compress(TEST_DATA)\n        depacked = brieflz.depack_srcsize(packed, len(TEST_DATA))\n        self.assertEqual(depacked, TEST_DATA)\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "Translations/font_tables.py",
    "content": "from typing import Dict, Final, Tuple\n\n\ndef get_font_map_ascii_basic() -> Dict[str, bytes]:\n    font = {\n        # U+0000..U+007F Basic Latin\n        \" \": b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"!\": b\"\\x00\\x00\\x00\\x00\\x7C\\xFF\\xFF\\x7C\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x33\\x33\\x00\\x00\\x00\\x00\\x00\",\n        '\"': b\"\\x00\\x00\\x00\\x3C\\x3C\\x00\\x00\\x3C\\x3C\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"#\": b\"\\x00\\x00\\x10\\x90\\xF0\\x7E\\x1E\\x90\\xF0\\x7E\\x1E\\x10\\x00\\x02\\x1E\\x1F\\x03\\x02\\x1E\\x1F\\x03\\x02\\x00\\x00\",\n        \"$\": b\"\\x00\\x00\\x78\\xFC\\xCC\\xFF\\xFF\\xCC\\xCC\\x88\\x00\\x00\\x00\\x00\\x04\\x0C\\x0C\\x3F\\x3F\\x0C\\x0F\\x07\\x00\\x00\",\n        \"%\": b\"\\x00\\x00\\x38\\x38\\x38\\x00\\x80\\xC0\\xE0\\x70\\x38\\x1C\\x00\\x30\\x38\\x1C\\x0E\\x07\\x03\\x01\\x38\\x38\\x38\\x00\",\n        \"&\": b\"\\x00\\x00\\x00\\xB8\\xFC\\xC6\\xE2\\x3E\\x1C\\x00\\x00\\x00\\x00\\x00\\x1F\\x3F\\x31\\x21\\x37\\x1E\\x1C\\x36\\x22\\x00\",\n        \"'\": b\"\\x00\\x00\\x00\\x00\\x27\\x3F\\x1F\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"(\": b\"\\x00\\x00\\x00\\xF0\\xFC\\xFE\\x07\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x0F\\x1F\\x38\\x20\\x20\\x00\\x00\\x00\",\n        \")\": b\"\\x00\\x00\\x00\\x01\\x01\\x07\\xFE\\xFC\\xF0\\x00\\x00\\x00\\x00\\x00\\x00\\x20\\x20\\x38\\x1F\\x0F\\x03\\x00\\x00\\x00\",\n        \"*\": b\"\\x00\\x00\\x98\\xB8\\xE0\\xF8\\xF8\\xE0\\xB8\\x98\\x00\\x00\\x00\\x00\\x0C\\x0E\\x03\\x0F\\x0F\\x03\\x0E\\x0C\\x00\\x00\",\n        \"+\": b\"\\x00\\x00\\x80\\x80\\x80\\xF0\\xF0\\x80\\x80\\x80\\x00\\x00\\x00\\x00\\x01\\x01\\x01\\x0F\\x0F\\x01\\x01\\x01\\x00\\x00\",\n        \",\": b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xB8\\xF8\\x78\\x00\\x00\\x00\\x00\\x00\",\n        \"-\": b\"\\x00\\x00\\x80\\x80\\x80\\x80\\x80\\x80\\x80\\x80\\x00\\x00\\x00\\x00\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x00\\x00\",\n        \".\": b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x38\\x38\\x38\\x00\\x00\\x00\\x00\\x00\",\n        \"/\": b\"\\x00\\x00\\x00\\x00\\x00\\x80\\xC0\\xE0\\x70\\x38\\x1C\\x0E\\x00\\x18\\x1C\\x0E\\x07\\x03\\x01\\x00\\x00\\x00\\x00\\x00\",\n        \"0\": b\"\\x00\\xF8\\xFE\\x06\\x03\\x83\\xC3\\x63\\x33\\x1E\\xFE\\xF8\\x00\\x07\\x1F\\x1E\\x33\\x31\\x30\\x30\\x30\\x18\\x1F\\x07\",\n        \"1\": b\"\\x00\\x00\\x00\\x0C\\x0C\\x0E\\xFF\\xFF\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x30\\x3F\\x3F\\x30\\x30\\x30\\x00\",\n        \"2\": b\"\\x00\\x1C\\x1E\\x07\\x03\\x03\\x83\\xC3\\xE3\\x77\\x3E\\x1C\\x00\\x30\\x38\\x3C\\x3E\\x37\\x33\\x31\\x30\\x30\\x30\\x30\",\n        \"3\": b\"\\x00\\x0C\\x0E\\x07\\xC3\\xC3\\xC3\\xC3\\xC3\\xE7\\x7E\\x3C\\x00\\x0C\\x1C\\x38\\x30\\x30\\x30\\x30\\x30\\x39\\x1F\\x0E\",\n        \"4\": b\"\\x00\\xC0\\xE0\\x70\\x38\\x1C\\x0E\\x07\\xFF\\xFF\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x3F\\x3F\\x03\\x03\",\n        \"5\": b\"\\x00\\x3F\\x7F\\x63\\x63\\x63\\x63\\x63\\x63\\xE3\\xC3\\x83\\x00\\x0C\\x1C\\x38\\x30\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\",\n        \"6\": b\"\\x00\\xC0\\xF0\\xF8\\xDC\\xCE\\xC7\\xC3\\xC3\\xC3\\x80\\x00\\x00\\x0F\\x1F\\x39\\x30\\x30\\x30\\x30\\x30\\x39\\x1F\\x0F\",\n        \"7\": b\"\\x00\\x03\\x03\\x03\\x03\\x03\\x03\\xC3\\xF3\\x3F\\x0F\\x03\\x00\\x00\\x00\\x00\\x30\\x3C\\x0F\\x03\\x00\\x00\\x00\\x00\",\n        \"8\": b\"\\x00\\x00\\xBC\\xFE\\xE7\\xC3\\xC3\\xC3\\xE7\\xFE\\xBC\\x00\\x00\\x0F\\x1F\\x39\\x30\\x30\\x30\\x30\\x30\\x39\\x1F\\x0F\",\n        \"9\": b\"\\x00\\x3C\\x7E\\xE7\\xC3\\xC3\\xC3\\xC3\\xC3\\xE7\\xFE\\xFC\\x00\\x00\\x00\\x30\\x30\\x30\\x38\\x1C\\x0E\\x07\\x03\\x00\",\n        \":\": b\"\\x00\\x00\\x00\\x00\\x70\\x70\\x70\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x1C\\x1C\\x1C\\x00\\x00\\x00\\x00\\x00\",\n        \";\": b\"\\x00\\x00\\x00\\x00\\x70\\x70\\x70\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x9C\\xFC\\x7C\\x00\\x00\\x00\\x00\\x00\",\n        \"<\": b\"\\x00\\x00\\xC0\\xE0\\xF0\\x38\\x1C\\x0E\\x07\\x03\\x00\\x00\\x00\\x00\\x00\\x01\\x03\\x07\\x0E\\x1C\\x38\\x30\\x00\\x00\",\n        \"=\": b\"\\x00\\x00\\x60\\x60\\x60\\x60\\x60\\x60\\x60\\x60\\x60\\x00\\x00\\x00\\x06\\x06\\x06\\x06\\x06\\x06\\x06\\x06\\x06\\x00\",\n        \">\": b\"\\x00\\x00\\x03\\x07\\x0E\\x1C\\x38\\xF0\\xE0\\xC0\\x00\\x00\\x00\\x00\\x30\\x38\\x1C\\x0E\\x07\\x03\\x01\\x00\\x00\\x00\",\n        \"?\": b\"\\x00\\x1C\\x1E\\x07\\x03\\x83\\xC3\\xE3\\x77\\x3E\\x1C\\x00\\x00\\x00\\x00\\x00\\x00\\x37\\x37\\x00\\x00\\x00\\x00\\x00\",\n        \"@\": b\"\\x00\\xF8\\xFE\\x07\\xF3\\xFB\\x1B\\xFB\\xFB\\x07\\xFE\\xF8\\x00\\x0F\\x1F\\x18\\x33\\x37\\x36\\x37\\x37\\x36\\x03\\x01\",\n        \"A\": b\"\\x00\\x00\\x00\\xE0\\xFC\\x1F\\x1F\\xFC\\xE0\\x00\\x00\\x00\\x00\\x38\\x3F\\x07\\x06\\x06\\x06\\x06\\x07\\x3F\\x38\\x00\",\n        \"B\": b\"\\x00\\xFF\\xFF\\xC3\\xC3\\xC3\\xC3\\xE7\\xFE\\xBC\\x00\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x39\\x1F\\x0F\\x00\",\n        \"C\": b\"\\x00\\xF0\\xFC\\x0E\\x07\\x03\\x03\\x03\\x07\\x0E\\x0C\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x30\\x30\\x38\\x1C\\x0C\\x00\",\n        \"D\": b\"\\x00\\xFF\\xFF\\x03\\x03\\x03\\x03\\x07\\x0E\\xFC\\xF0\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x38\\x1C\\x0F\\x03\\x00\",\n        \"E\": b\"\\x00\\xFF\\xFF\\xC3\\xC3\\xC3\\xC3\\xC3\\xC3\\x03\\x03\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x00\",\n        \"F\": b\"\\x00\\xFF\\xFF\\xC3\\xC3\\xC3\\xC3\\xC3\\xC3\\x03\\x03\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"G\": b\"\\x00\\xF0\\xFC\\x0E\\x07\\x03\\xC3\\xC3\\xC3\\xC7\\xC6\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x30\\x30\\x30\\x3F\\x3F\\x00\",\n        \"H\": b\"\\x00\\xFF\\xFF\\xC0\\xC0\\xC0\\xC0\\xC0\\xC0\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"I\": b\"\\x00\\x00\\x00\\x03\\x03\\xFF\\xFF\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"J\": b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xFF\\xFF\\x00\\x00\\x0E\\x1E\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x07\\x00\",\n        \"K\": b\"\\x00\\xFF\\xFF\\xC0\\xE0\\xF0\\x38\\x1C\\x0E\\x07\\x03\\x00\\x00\\x3F\\x3F\\x00\\x01\\x03\\x07\\x0E\\x1C\\x38\\x30\\x00\",\n        \"L\": b\"\\x00\\xFF\\xFF\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x00\",\n        \"M\": b\"\\x00\\xFF\\xFF\\x1E\\x78\\xE0\\xE0\\x78\\x1E\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x00\\x00\\x01\\x01\\x00\\x00\\x3F\\x3F\\x00\",\n        \"N\": b\"\\x00\\xFF\\xFF\\x0E\\x38\\xF0\\xC0\\x00\\x00\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x03\\x07\\x1C\\x3F\\x3F\\x00\",\n        \"O\": b\"\\x00\\xF0\\xFC\\x0E\\x07\\x03\\x03\\x07\\x0E\\xFC\\xF0\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x30\\x38\\x1C\\x0F\\x03\\x00\",\n        \"P\": b\"\\x00\\xFF\\xFF\\x83\\x83\\x83\\x83\\x83\\xC7\\xFE\\x7C\\x00\\x00\\x3F\\x3F\\x01\\x01\\x01\\x01\\x01\\x01\\x00\\x00\\x00\",\n        \"Q\": b\"\\x00\\xF0\\xFC\\x0E\\x07\\x03\\x03\\x07\\x0E\\xFC\\xF0\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x36\\x3E\\x1C\\x3F\\x33\\x00\",\n        \"R\": b\"\\x00\\xFF\\xFF\\x83\\x83\\x83\\x83\\x83\\xC7\\xFE\\x7C\\x00\\x00\\x3F\\x3F\\x01\\x01\\x03\\x07\\x0F\\x1D\\x38\\x30\\x00\",\n        \"S\": b\"\\x00\\x3C\\x7E\\xE7\\xC3\\xC3\\xC3\\xC3\\xC7\\x8E\\x0C\\x00\\x00\\x0C\\x1C\\x38\\x30\\x30\\x30\\x30\\x39\\x1F\\x0F\\x00\",\n        \"T\": b\"\\x00\\x00\\x03\\x03\\x03\\xFF\\xFF\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\",\n        \"U\": b\"\\x00\\xFF\\xFF\\x00\\x00\\x00\\x00\\x00\\x00\\xFF\\xFF\\x00\\x00\\x07\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x07\\x00\",\n        \"V\": b\"\\x00\\x07\\x3F\\xF8\\xC0\\x00\\x00\\xC0\\xF8\\x3F\\x07\\x00\\x00\\x00\\x00\\x01\\x0F\\x3E\\x3E\\x0F\\x01\\x00\\x00\\x00\",\n        \"W\": b\"\\x00\\xFF\\xFF\\x00\\x00\\x80\\x80\\x00\\x00\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x1C\\x06\\x03\\x03\\x06\\x1C\\x3F\\x3F\\x00\",\n        \"X\": b\"\\x00\\x03\\x0F\\x1C\\x30\\xE0\\xE0\\x30\\x1C\\x0F\\x03\\x00\\x00\\x30\\x3C\\x0E\\x03\\x01\\x01\\x03\\x0E\\x3C\\x30\\x00\",\n        \"Y\": b\"\\x00\\x03\\x0F\\x3C\\xF0\\xC0\\xC0\\xF0\\x3C\\x0F\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\",\n        \"Z\": b\"\\x00\\x03\\x03\\x03\\x03\\xC3\\xE3\\x33\\x1F\\x0F\\x03\\x00\\x00\\x30\\x3C\\x3E\\x33\\x31\\x30\\x30\\x30\\x30\\x30\\x00\",\n        \"[\": b\"\\x00\\x00\\x00\\xFF\\xFF\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x00\\x00\\x00\",\n        \"\\\\\": b\"\\x00\\x0E\\x1C\\x38\\x70\\xE0\\xC0\\x80\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x03\\x07\\x0E\\x1C\\x18\",\n        \"]\": b\"\\x00\\x00\\x00\\x03\\x03\\x03\\x03\\xFF\\xFF\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x30\\x30\\x3F\\x3F\\x00\\x00\\x00\",\n        \"^\": b\"\\x00\\x60\\x70\\x38\\x1C\\x0E\\x07\\x0E\\x1C\\x38\\x70\\x60\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"_\": b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xC0\\xC0\\xC0\\xC0\\xC0\\xC0\\xC0\\xC0\\xC0\\xC0\\xC0\",\n        \"`\": b\"\\x00\\x00\\x00\\x00\\x00\\x3E\\x7E\\x4E\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"a\": b\"\\x00\\x00\\x40\\x60\\x60\\x60\\x60\\x60\\x60\\xE0\\xC0\\x00\\x00\\x1C\\x3E\\x33\\x33\\x33\\x33\\x33\\x33\\x3F\\x3F\\x00\",\n        \"b\": b\"\\x00\\xFF\\xFF\\xC0\\x60\\x60\\x60\\x60\\xE0\\xC0\\x80\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"c\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x60\\x60\\x60\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x30\\x18\\x08\\x00\",\n        \"d\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x60\\xE0\\xC0\\xFF\\xFF\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x30\\x3F\\x3F\\x00\",\n        \"e\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x60\\x60\\x60\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x3B\\x33\\x33\\x33\\x33\\x33\\x13\\x01\\x00\",\n        \"f\": b\"\\x00\\xC0\\xC0\\xFC\\xFE\\xC7\\xC3\\xC3\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"g\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x60\\x60\\x60\\xE0\\xE0\\x00\\x00\\x03\\xC7\\xCE\\xCC\\xCC\\xCC\\xCC\\xE6\\x7F\\x3F\\x00\",\n        \"h\": b\"\\x00\\xFF\\xFF\\xC0\\x60\\x60\\x60\\xE0\\xC0\\x80\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\",\n        \"i\": b\"\\x00\\x00\\x00\\x00\\x60\\xEC\\xEC\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"j\": b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x60\\xEC\\xEC\\x00\\x00\\x00\\x00\\x00\\x00\\x60\\xE0\\xC0\\xC0\\xFF\\x7F\\x00\\x00\\x00\",\n        \"k\": b\"\\x00\\x00\\xFF\\xFF\\x00\\x80\\xC0\\xE0\\x60\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x03\\x07\\x0F\\x1C\\x38\\x30\\x00\\x00\",\n        \"l\": b\"\\x00\\x00\\x00\\x00\\x03\\xFF\\xFF\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"m\": b\"\\x00\\xE0\\xC0\\xE0\\xE0\\xC0\\xC0\\xE0\\xE0\\xC0\\x80\\x00\\x00\\x3F\\x3F\\x00\\x00\\x3F\\x3F\\x00\\x00\\x3F\\x3F\\x00\",\n        \"n\": b\"\\x00\\x00\\xE0\\xE0\\x60\\x60\\x60\\x60\\xE0\\xC0\\x80\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"o\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x60\\x60\\xE0\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"p\": b\"\\x00\\xE0\\xE0\\x60\\x60\\x60\\x60\\x60\\xE0\\xC0\\x80\\x00\\x00\\xFF\\xFF\\x0C\\x18\\x18\\x18\\x18\\x1C\\x0F\\x07\\x00\",\n        \"q\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x60\\x60\\x60\\xE0\\xE0\\x00\\x00\\x07\\x0F\\x1C\\x18\\x18\\x18\\x18\\x0C\\xFF\\xFF\\x00\",\n        \"r\": b\"\\x00\\x00\\xE0\\xE0\\xC0\\x60\\x60\\x60\\x60\\xE0\\xC0\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"s\": b\"\\x00\\xC0\\xE0\\x60\\x60\\x60\\x60\\x60\\x40\\x00\\x00\\x00\\x00\\x11\\x33\\x33\\x33\\x33\\x33\\x3F\\x1E\\x00\\x00\\x00\",\n        \"t\": b\"\\x00\\x60\\x60\\xFE\\xFE\\x60\\x60\\x60\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x1F\\x3F\\x30\\x30\\x30\\x30\\x00\\x00\\x00\",\n        \"u\": b\"\\x00\\xE0\\xE0\\x00\\x00\\x00\\x00\\x00\\x00\\xE0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x18\\x3F\\x3F\\x00\",\n        \"v\": b\"\\x00\\x60\\xE0\\x80\\x00\\x00\\x00\\x00\\x80\\xE0\\x60\\x00\\x00\\x00\\x01\\x07\\x1E\\x38\\x38\\x1E\\x07\\x01\\x00\\x00\",\n        \"w\": b\"\\x00\\xE0\\xE0\\x00\\x00\\xE0\\xE0\\x00\\x00\\xE0\\xE0\\x00\\x00\\x07\\x1F\\x38\\x1C\\x0F\\x0F\\x1C\\x38\\x1F\\x07\\x00\",\n        \"x\": b\"\\x00\\x60\\xE0\\xC0\\x80\\x00\\x80\\xC0\\xE0\\x60\\x00\\x00\\x00\\x30\\x38\\x1D\\x0F\\x07\\x0F\\x1D\\x38\\x30\\x00\\x00\",\n        \"y\": b\"\\x00\\x00\\x60\\xE0\\x80\\x00\\x00\\x80\\xE0\\x60\\x00\\x00\\x00\\x00\\x00\\x81\\xE7\\x7E\\x1E\\x07\\x01\\x00\\x00\\x00\",\n        \"z\": b\"\\x00\\x60\\x60\\x60\\x60\\x60\\xE0\\xE0\\x60\\x20\\x00\\x00\\x00\\x30\\x38\\x3C\\x36\\x33\\x31\\x30\\x30\\x30\\x00\\x00\",\n        \"{\": b\"\\x00\\x00\\x80\\xC0\\xFC\\x7E\\x07\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x01\\x1F\\x3F\\x70\\x60\\x60\\x60\\x00\\x00\",\n        \"|\": b\"\\x00\\x00\\x00\\x00\\x00\\xFF\\xFF\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\",\n        \"}\": b\"\\x00\\x00\\x03\\x03\\x03\\x07\\x7E\\xFC\\xC0\\x80\\x00\\x00\\x00\\x00\\x60\\x60\\x60\\x70\\x3F\\x1F\\x01\\x00\\x00\\x00\",\n        \"~\": b\"\\x00\\x10\\x18\\x0C\\x04\\x0C\\x18\\x10\\x18\\x0C\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n    }\n    return font\n\n\ndef get_font_map_latin_extended() -> Dict[str, bytes]:\n    font = {\n        # U+0080..U+00FF Latin-1 Supplement\n        \"¡\": b\"\\x00\\x00\\x00\\x00\\x80\\xF3\\xF3\\x80\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x0F\\x3F\\x3F\\x0F\\x00\\x00\\x00\\x00\",\n        \"¢\": b\"\\x00\\x00\\xE0\\xF0\\x38\\xFE\\xFE\\x18\\x38\\x30\\x00\\x00\\x00\\x00\\x03\\x07\\x0E\\x3F\\x3F\\x0C\\x0E\\x06\\x00\\x00\",\n        \"£\": b\"\\x00\\x00\\x00\\x80\\xF8\\xFC\\x8C\\x8C\\x1C\\x18\\x00\\x00\\x00\\x00\\x18\\x1C\\x1F\\x0B\\x18\\x18\\x18\\x18\\x08\\x00\",\n        \"¤\": b\"\\x00\\xF6\\xFE\\x18\\x0C\\x0C\\x0C\\x0C\\x18\\xFE\\xF6\\x00\\x00\\x1B\\x1F\\x06\\x0C\\x0C\\x0C\\x0C\\x06\\x1F\\x1B\\x00\",\n        \"¥\": b\"\\x00\\x03\\x0F\\x3C\\xF0\\xC0\\xC0\\xF0\\x3C\\x0F\\x03\\x00\\x00\\x00\\x0A\\x0A\\x0A\\x3F\\x3F\\x0A\\x0A\\x0A\\x00\\x00\",\n        \"¦\": b\"\\x00\\x00\\x00\\x00\\x00\\x1F\\x1F\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\",\n        \"§\": b\"\\x00\\x00\\xDC\\xFE\\x22\\x22\\x22\\x22\\xE6\\xC4\\x00\\x00\\x00\\x00\\x08\\x19\\x11\\x11\\x11\\x11\\x1F\\x0E\\x00\\x00\",\n        \"¨\": b\"\\x00\\x00\\x00\\x03\\x03\\x00\\x00\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"©\": b\"\\x00\\xF0\\xF8\\x1C\\xCC\\xEC\\x2C\\x6C\\x4C\\x1C\\xF8\\xF0\\x00\\x07\\x0F\\x1C\\x19\\x1B\\x1A\\x1B\\x19\\x1C\\x0F\\x07\",\n        \"«\": b\"\\x00\\x80\\xC0\\x60\\x20\\x00\\x80\\xC0\\x60\\x20\\x00\\x00\\x00\\x00\\x01\\x03\\x02\\x00\\x00\\x01\\x03\\x02\\x00\\x00\",\n        \"¬\": b\"\\x18\\x18\\x18\\x18\\x18\\x18\\x18\\x18\\x18\\xF8\\xF8\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x00\",\n        \"®\": b\"\\x00\\xF0\\xF8\\x1C\\xEC\\xEC\\xAC\\xEC\\x4C\\x1C\\xF8\\xF0\\x00\\x07\\x0F\\x1C\\x1B\\x1B\\x18\\x1B\\x1B\\x1C\\x0F\\x07\",\n        \"¯\": b\"\\x00\\x00\\x00\\x00\\x00\\x0C\\x0C\\x0C\\x0C\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"°\": b\"\\x00\\x00\\x00\\x1E\\x3F\\x33\\x33\\x3F\\x1E\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"±\": b\"\\x00\\x00\\x00\\xC0\\xC0\\xF0\\xF0\\xC0\\xC0\\x00\\x00\\x00\\x00\\x00\\x00\\x18\\x18\\x1B\\x1B\\x18\\x18\\x00\\x00\\x00\",\n        \"²\": b\"\\x00\\x00\\x19\\x1D\\x15\\x17\\x12\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"³\": b\"\\x00\\x00\\x11\\x15\\x15\\x1F\\x0A\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"´\": b\"\\x00\\x00\\x00\\x00\\x04\\x06\\x03\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"µ\": b\"\\x00\\xF0\\xF0\\x00\\x00\\x00\\x00\\x00\\xF0\\xF0\\x00\\x00\\x00\\xFF\\xFF\\x0E\\x0C\\x0C\\x0C\\x06\\x0F\\x0F\\x00\\x00\",\n        \"¶\": b\"\\x00\\x38\\x7C\\xC6\\x82\\xFE\\xFE\\x02\\xFE\\xFE\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x3F\\x3F\\x00\\x00\",\n        \"¹\": b\"\\x00\\x00\\x12\\x1F\\x1F\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"»\": b\"\\x00\\x20\\x60\\xC0\\x80\\x00\\x20\\x60\\xC0\\x80\\x00\\x00\\x00\\x02\\x03\\x01\\x00\\x00\\x02\\x03\\x01\\x00\\x00\\x00\",\n        \"¼\": b\"\\x00\\x48\\x7C\\x7C\\x40\\x80\\xC0\\x60\\x30\\x10\\x00\\x00\\x00\\x00\\x04\\x06\\x03\\x01\\x06\\x07\\x04\\x1F\\x1F\\x00\",\n        \"½\": b\"\\x00\\x48\\x7C\\x7C\\x40\\x80\\xC0\\x60\\x30\\x10\\x00\\x00\\x00\\x00\\x04\\x06\\x03\\x01\\x00\\x19\\x1D\\x17\\x12\\x00\",\n        \"¾\": b\"\\x00\\x44\\x54\\x7C\\x28\\x80\\xC0\\x60\\x30\\x10\\x00\\x00\\x00\\x00\\x04\\x06\\x03\\x01\\x06\\x07\\x04\\x1F\\x1F\\x00\",\n        \"¿\": b\"\\x00\\x00\\x00\\x80\\xC0\\xFB\\x7B\\x00\\x00\\x00\\x00\\x00\\x00\\x0E\\x1F\\x3B\\x31\\x30\\x30\\x30\\x38\\x1E\\x0E\\x00\",\n        \"À\": b\"\\x00\\x00\\x00\\x80\\xE1\\x7B\\x7E\\xE4\\x80\\x00\\x00\\x00\\x00\\x38\\x3E\\x0F\\x0D\\x0C\\x0C\\x0D\\x0F\\x3E\\x38\\x00\",\n        \"Á\": b\"\\x00\\x00\\x00\\x80\\xE4\\x7E\\x7B\\xE1\\x80\\x00\\x00\\x00\\x00\\x38\\x3E\\x0F\\x0D\\x0C\\x0C\\x0D\\x0F\\x3E\\x38\\x00\",\n        \"Â\": b\"\\x00\\x00\\x00\\x84\\xE6\\x7B\\x7B\\xE6\\x84\\x00\\x00\\x00\\x00\\x38\\x3E\\x0F\\x0D\\x0C\\x0C\\x0D\\x0F\\x3E\\x38\\x00\",\n        \"Ã\": b\"\\x00\\x00\\x00\\x82\\xE3\\x79\\x7B\\xE2\\x83\\x01\\x00\\x00\\x00\\x38\\x3E\\x0F\\x0D\\x0C\\x0C\\x0D\\x0F\\x3E\\x38\\x00\",\n        \"Ä\": b\"\\x00\\x00\\x00\\x83\\xE3\\x78\\x78\\xE3\\x83\\x00\\x00\\x00\\x00\\x38\\x3E\\x0F\\x0D\\x0C\\x0C\\x0D\\x0F\\x3E\\x38\\x00\",\n        \"Å\": b\"\\x00\\x00\\x00\\x80\\xE2\\x75\\x75\\xE2\\x80\\x00\\x00\\x00\\x00\\x38\\x3E\\x0F\\x0D\\x0C\\x0C\\x0D\\x0F\\x3E\\x38\\x00\",\n        \"Æ\": b\"\\x00\\x00\\x80\\xF0\\x7C\\x1F\\xFF\\xFF\\xC3\\xC3\\x03\\x00\\x00\\x3C\\x3F\\x07\\x06\\x06\\x3F\\x3F\\x30\\x30\\x30\\x00\",\n        \"Ç\": b\"\\x00\\xF0\\xFC\\x0E\\x07\\x03\\x03\\x03\\x07\\x1E\\x1C\\x00\\x00\\x01\\x07\\xCE\\xDC\\xF8\\xF8\\x18\\x1C\\x0E\\x06\\x00\",\n        \"È\": b\"\\x00\\xF8\\xF8\\x99\\x9B\\x9E\\x9C\\x98\\x98\\x18\\x18\\x00\\x00\\x3F\\x3F\\x31\\x31\\x31\\x31\\x31\\x31\\x30\\x30\\x00\",\n        \"É\": b\"\\x00\\xF8\\xF8\\x98\\x98\\x9C\\x9E\\x9B\\x99\\x18\\x18\\x00\\x00\\x3F\\x3F\\x31\\x31\\x31\\x31\\x31\\x31\\x30\\x30\\x00\",\n        \"Ê\": b\"\\x00\\xF8\\xF8\\x9C\\x9E\\x9B\\x9B\\x9E\\x9C\\x18\\x18\\x00\\x00\\x3F\\x3F\\x31\\x31\\x31\\x31\\x31\\x31\\x30\\x30\\x00\",\n        \"Ë\": b\"\\x00\\xF8\\xF8\\x9B\\x9B\\x98\\x98\\x9B\\x9B\\x18\\x18\\x00\\x00\\x3F\\x3F\\x31\\x31\\x31\\x31\\x31\\x31\\x30\\x30\\x00\",\n        \"Ì\": b\"\\x00\\x00\\x00\\x19\\x1B\\xFE\\xFC\\x18\\x18\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"Í\": b\"\\x00\\x00\\x00\\x18\\x18\\xFC\\xFE\\x1B\\x19\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"Î\": b\"\\x00\\x00\\x00\\x1C\\x1E\\xFB\\xFB\\x1E\\x1C\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"Ï\": b\"\\x00\\x00\\x00\\x1B\\x1B\\xF8\\xF8\\x1B\\x1B\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"Ð\": b\"\\x00\\xC0\\xFF\\xFF\\xC3\\x03\\x03\\x07\\x0E\\xFC\\xF0\\x00\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x38\\x1C\\x0F\\x03\\x00\",\n        \"Ñ\": b\"\\x00\\xF8\\xF8\\x72\\xE3\\xC1\\x83\\x02\\x03\\xF9\\xF8\\x00\\x00\\x3F\\x3F\\x00\\x00\\x01\\x03\\x07\\x0E\\x3F\\x3F\\x00\",\n        \"Ò\": b\"\\x00\\xE0\\xF0\\x39\\x1B\\x1E\\x1C\\x18\\x38\\xF0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"Ó\": b\"\\x00\\xE0\\xF0\\x38\\x18\\x1C\\x1E\\x1B\\x39\\xF0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"Ô\": b\"\\x00\\xE0\\xF0\\x3C\\x1E\\x1B\\x1B\\x1E\\x3C\\xF0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"Õ\": b\"\\x00\\xE0\\xF0\\x3A\\x1B\\x19\\x1B\\x1A\\x3B\\xF1\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"Ö\": b\"\\x00\\xE0\\xF0\\x3B\\x1B\\x18\\x18\\x1B\\x3B\\xF0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"×\": b\"\\x00\\xF0\\xF8\\x1C\\x0C\\x8C\\xEC\\x7C\\x18\\xFC\\xF4\\x00\\x00\\x2F\\x3F\\x18\\x3E\\x37\\x31\\x30\\x38\\x1F\\x0F\\x00\",\n        \"Ù\": b\"\\x00\\xF8\\xF8\\x01\\x03\\x06\\x04\\x00\\x00\\xF8\\xF8\\x00\\x00\\x07\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x07\\x00\",\n        \"Ú\": b\"\\x00\\xF8\\xF8\\x00\\x00\\x04\\x06\\x03\\x01\\xF8\\xF8\\x00\\x00\\x07\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x07\\x00\",\n        \"Û\": b\"\\x00\\xF8\\xF8\\x04\\x06\\x03\\x03\\x06\\x04\\xF8\\xF8\\x00\\x00\\x07\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x07\\x00\",\n        \"Ü\": b\"\\x00\\xF8\\xF8\\x03\\x03\\x00\\x00\\x03\\x03\\xF8\\xF8\\x00\\x00\\x07\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x07\\x00\",\n        \"Ý\": b\"\\x00\\x08\\x18\\x30\\x60\\xC4\\xC6\\x63\\x31\\x18\\x08\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\",\n        \"ß\": b\"\\x00\\x00\\xC0\\xE0\\x30\\x10\\x10\\x30\\xE0\\xC0\\x00\\x00\\x00\\x00\\xFF\\xFF\\x21\\x21\\x21\\x33\\x3F\\x1E\\x00\\x00\",\n        \"à\": b\"\\x00\\x00\\x40\\x60\\x62\\x66\\x6C\\x68\\x60\\xE0\\xC0\\x00\\x00\\x1C\\x3E\\x33\\x33\\x33\\x33\\x33\\x33\\x3F\\x3F\\x00\",\n        \"á\": b\"\\x00\\x00\\x40\\x60\\x68\\x6C\\x66\\x62\\x60\\xE0\\xC0\\x00\\x00\\x1C\\x3E\\x33\\x33\\x33\\x33\\x33\\x33\\x3F\\x3F\\x00\",\n        \"â\": b\"\\x00\\x00\\x40\\x68\\x6C\\x66\\x66\\x6C\\x68\\xE0\\xC0\\x00\\x00\\x1C\\x3E\\x33\\x33\\x33\\x33\\x33\\x33\\x3F\\x3F\\x00\",\n        \"ã\": b\"\\x00\\x00\\x40\\x68\\x6C\\x64\\x6C\\x68\\x6C\\xE4\\xC0\\x00\\x00\\x1C\\x3E\\x33\\x33\\x33\\x33\\x33\\x33\\x3F\\x3F\\x00\",\n        \"ä\": b\"\\x00\\x00\\x40\\x6C\\x6C\\x60\\x60\\x6C\\x6C\\xE0\\xC0\\x00\\x00\\x1C\\x3E\\x33\\x33\\x33\\x33\\x33\\x33\\x3F\\x3F\\x00\",\n        \"å\": b\"\\x00\\x00\\x40\\x60\\x64\\x6A\\x6A\\x64\\x60\\xE0\\xC0\\x00\\x00\\x1C\\x3E\\x33\\x33\\x33\\x33\\x33\\x33\\x3F\\x3F\\x00\",\n        \"æ\": b\"\\x00\\x80\\xC0\\x40\\x40\\xC0\\x80\\x40\\x40\\xC0\\x80\\x00\\x00\\x1C\\x3E\\x22\\x22\\x1F\\x3F\\x22\\x22\\x33\\x11\\x00\",\n        \"ç\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x60\\x60\\xE0\\xC0\\x80\\x00\\x00\\x0F\\x1F\\xB8\\xB0\\xF0\\xF0\\x30\\x38\\x18\\x08\\x00\",\n        \"è\": b\"\\x00\\x80\\xC0\\xE0\\x62\\x66\\x6C\\x68\\x60\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x33\\x33\\x33\\x33\\x33\\x33\\x13\\x03\\x00\",\n        \"é\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x68\\x6C\\x66\\x62\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x3B\\x33\\x33\\x33\\x33\\x33\\x13\\x03\\x00\",\n        \"ê\": b\"\\x00\\x80\\xC0\\xE8\\x6C\\x66\\x66\\x6C\\x68\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x33\\x33\\x33\\x33\\x33\\x33\\x13\\x03\\x00\",\n        \"ë\": b\"\\x00\\x80\\xC0\\xEC\\x6C\\x60\\x60\\x6C\\x6C\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x33\\x33\\x33\\x33\\x33\\x33\\x13\\x03\\x00\",\n        \"ì\": b\"\\x00\\x00\\x00\\x00\\x62\\xE6\\xEC\\x08\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"í\": b\"\\x00\\x00\\x00\\x00\\x68\\xEC\\xE6\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"î\": b\"\\x00\\x00\\x00\\x08\\x6C\\xE6\\xE6\\x0C\\x08\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"ï\": b\"\\x00\\x00\\x00\\x0C\\x6C\\xE0\\xEC\\x0C\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"ñ\": b\"\\x00\\x00\\xE0\\xE8\\x6C\\x64\\x6C\\x68\\xEC\\xC4\\x80\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"ò\": b\"\\x00\\x80\\xC0\\xE0\\x62\\x66\\x6C\\x68\\xE0\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"ó\": b\"\\x00\\x80\\xC0\\xE0\\x68\\x6C\\x66\\x62\\xE0\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"ô\": b\"\\x00\\x80\\xC0\\xE8\\x6C\\x66\\x66\\x6C\\xE8\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"õ\": b\"\\x00\\x80\\xC8\\xEC\\x64\\x6C\\x68\\x6C\\xE4\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"ö\": b\"\\x00\\x80\\xC0\\xEC\\x6C\\x60\\x60\\x6C\\xEC\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"÷\": b\"\\x00\\x00\\x80\\x80\\x80\\xB0\\xB0\\x80\\x80\\x80\\x00\\x00\\x00\\x00\\x01\\x01\\x01\\x0D\\x0D\\x01\\x01\\x01\\x00\\x00\",\n        \"ø\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x60\\xE0\\xC0\\xE0\\xA0\\x00\\x00\\x2F\\x3F\\x18\\x3C\\x36\\x33\\x31\\x38\\x1F\\x0F\\x00\",\n        \"ù\": b\"\\x00\\xE0\\xE0\\x00\\x02\\x06\\x0C\\x08\\x00\\xE0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x18\\x3F\\x3F\\x00\",\n        \"ú\": b\"\\x00\\xE0\\xE0\\x00\\x08\\x0C\\x06\\x02\\x00\\xE0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x18\\x3F\\x3F\\x00\",\n        \"û\": b\"\\x00\\xE0\\xE0\\x08\\x0C\\x06\\x06\\x0C\\x08\\xE0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x18\\x3F\\x3F\\x00\",\n        \"ü\": b\"\\x00\\xE0\\xE0\\x0C\\x0C\\x00\\x00\\x0C\\x0C\\xE0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x18\\x3F\\x3F\\x00\",\n        \"ý\": b\"\\x00\\x00\\x60\\xE0\\x80\\x10\\x18\\x8C\\xE4\\x60\\x00\\x00\\x00\\x00\\x00\\x81\\xE7\\x7E\\x1E\\x07\\x01\\x00\\x00\\x00\",\n        \"þ\": b\"\\x00\\x00\\x03\\xFF\\xFF\\x1B\\x18\\x18\\xF8\\xF0\\x00\\x00\\x00\\x00\\x30\\x3F\\x3F\\x36\\x06\\x06\\x07\\x03\\x00\\x00\",\n        \"ÿ\": b\"\\x00\\x00\\x60\\xEC\\x8C\\x00\\x00\\x8C\\xEC\\x60\\x00\\x00\\x00\\x00\\x00\\x81\\xE7\\x7E\\x1E\\x07\\x01\\x00\\x00\\x00\",\n        # U+0100..U+017F Latin Extended A\n        \"Ā\": b\"\\x00\\x00\\x00\\xE0\\xF9\\x1D\\x1D\\xF9\\xE0\\x00\\x00\\x00\\x00\\x38\\x3F\\x07\\x06\\x06\\x06\\x06\\x07\\x3F\\x38\\x00\",\n        \"ā\": b\"\\x00\\x00\\x40\\x60\\x68\\x68\\x68\\x68\\x68\\xE0\\xC0\\x00\\x00\\x1C\\x3E\\x33\\x33\\x33\\x33\\x33\\x33\\x3F\\x3F\\x00\",\n        \"Ă\": b\"\\x00\\x00\\x00\\xE0\\xF9\\x1A\\x1A\\xF9\\xE0\\x00\\x00\\x00\\x00\\x38\\x3F\\x07\\x06\\x06\\x06\\x06\\x07\\x3F\\x38\\x00\",\n        \"ă\": b\"\\x00\\x00\\x40\\x60\\x64\\x68\\x68\\x68\\x64\\xE0\\xC0\\x00\\x00\\x1C\\x3E\\x33\\x33\\x33\\x33\\x33\\x33\\x3F\\x3F\\x00\",\n        \"Ą\": b\"\\x00\\x00\\x00\\xE0\\xFC\\x1F\\x1F\\xFC\\xE0\\x00\\x00\\x00\\x00\\x38\\x3F\\x07\\x06\\x06\\x06\\x06\\x67\\xBF\\xB8\\x00\",\n        \"ą\": b\"\\x00\\x00\\x40\\x60\\x60\\x60\\x60\\x60\\x60\\xE0\\xC0\\x00\\x00\\x1C\\x3E\\x33\\x33\\x33\\x33\\x33\\x73\\xBF\\xBF\\x00\",\n        \"Ć\": b\"\\x00\\x80\\xE0\\x70\\x38\\x18\\x1A\\x1B\\x39\\x70\\x60\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x30\\x30\\x38\\x1C\\x0C\\x00\",\n        \"ć\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x68\\x6C\\x64\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x30\\x18\\x08\\x00\",\n        \"Ĉ\": b\"\\x00\\x80\\xE0\\x70\\x3A\\x1B\\x19\\x1B\\x3A\\x70\\x60\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x30\\x30\\x38\\x1C\\x0C\\x00\",\n        \"ĉ\": b\"\\x00\\x80\\xC0\\xE0\\x68\\x6C\\x64\\x6C\\x68\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x30\\x18\\x08\\x00\",\n        \"Ċ\": b\"\\x00\\x80\\xE0\\x70\\x38\\x18\\x1A\\x18\\x38\\x70\\x60\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x30\\x30\\x38\\x1C\\x0C\\x00\",\n        \"ċ\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x68\\x60\\x60\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x30\\x18\\x08\\x00\",\n        \"Č\": b\"\\x00\\x80\\xE0\\x70\\x39\\x1B\\x1A\\x1B\\x39\\x70\\x60\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x30\\x30\\x38\\x1C\\x0C\\x00\",\n        \"č\": b\"\\x00\\x80\\xC0\\xE0\\x64\\x6C\\x68\\x6C\\x64\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x30\\x18\\x08\\x00\",\n        \"Ď\": b\"\\x00\\xF8\\xF8\\x19\\x1B\\x1A\\x1B\\x39\\x70\\xE0\\x80\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x38\\x1C\\x0F\\x03\\x00\",\n        \"ď\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\xE0\\xFF\\xFF\\x00\\x05\\x03\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x3F\\x3F\\x00\\x00\\x00\",\n        \"Đ\": b\"\\xC0\\xFF\\xFF\\xC3\\xC3\\x03\\x03\\x07\\x0E\\xFC\\xF0\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x38\\x1C\\x0F\\x03\\x00\",\n        \"đ\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x60\\xE4\\xC4\\xFF\\xFF\\x04\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x30\\x3F\\x3F\\x00\",\n        \"Ē\": b\"\\x00\\xFC\\xFC\\x8C\\x8D\\x8D\\x8D\\x8D\\x8C\\x0C\\x0C\\x00\\x00\\x3F\\x3F\\x31\\x31\\x31\\x31\\x31\\x31\\x30\\x30\\x00\",\n        \"ē\": b\"\\x00\\x80\\xC0\\xE0\\x68\\x68\\x68\\x68\\x68\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x3B\\x33\\x33\\x33\\x33\\x33\\x13\\x01\\x00\",\n        \"Ĕ\": b\"\\x00\\xF8\\xF8\\x98\\x99\\x9A\\x9A\\x99\\x98\\x18\\x18\\x00\\x00\\x3F\\x3F\\x31\\x31\\x31\\x31\\x31\\x31\\x30\\x30\\x00\",\n        \"ĕ\": b\"\\x00\\x80\\xC0\\xE0\\x64\\x68\\x68\\x68\\x64\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x3B\\x33\\x33\\x33\\x33\\x33\\x13\\x01\\x00\",\n        \"Ė\": b\"\\x00\\xF8\\xF8\\x98\\x98\\x98\\x9A\\x98\\x98\\x18\\x18\\x00\\x00\\x3F\\x3F\\x31\\x31\\x31\\x31\\x31\\x31\\x30\\x30\\x00\",\n        \"ė\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x68\\x60\\x60\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x3B\\x33\\x33\\x33\\x33\\x33\\x13\\x01\\x00\",\n        \"Ę\": b\"\\x00\\xFF\\xFF\\xC3\\xC3\\xC3\\xC3\\xC3\\xC3\\x03\\x03\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x70\\xB0\\xB0\\x00\",\n        \"ę\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x60\\x60\\x60\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x3B\\x33\\x33\\x73\\xB3\\xB3\\x13\\x01\\x00\",\n        \"Ě\": b\"\\x00\\xF8\\xF8\\x98\\x99\\x9B\\x9A\\x9B\\x99\\x18\\x18\\x00\\x00\\x3F\\x3F\\x31\\x31\\x31\\x31\\x31\\x31\\x30\\x30\\x00\",\n        \"ě\": b\"\\x00\\x80\\xC0\\xE0\\x64\\x6C\\x68\\x6C\\x64\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x3B\\x33\\x33\\x33\\x33\\x33\\x13\\x01\\x00\",\n        \"Ĝ\": b\"\\x00\\x80\\xE0\\x70\\x1A\\x1B\\x19\\x1B\\x1A\\x38\\x30\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x33\\x33\\x33\\x3F\\x3F\\x00\",\n        \"ĝ\": b\"\\x00\\x80\\xC0\\xE0\\x68\\x6C\\x64\\x6C\\x68\\xE0\\xE0\\x00\\x00\\x03\\xC7\\xCE\\xCC\\xCC\\xCC\\xCC\\xE6\\x7F\\x3F\\x00\",\n        \"Ğ\": b\"\\x00\\x80\\xE0\\x70\\x1A\\x19\\x19\\x19\\x1A\\x38\\x30\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x33\\x33\\x33\\x3F\\x3F\\x00\",\n        \"ğ\": b\"\\x00\\x80\\xC0\\xE0\\x68\\x64\\x64\\x64\\x68\\xE0\\xE0\\x00\\x00\\x03\\xC7\\xCE\\xCC\\xCC\\xCC\\xCC\\xE6\\x7F\\x3F\\x00\",\n        \"Ġ\": b\"\\x00\\x80\\xE0\\x70\\x18\\x18\\x1A\\x18\\x18\\x38\\x30\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x33\\x33\\x33\\x3F\\x3F\\x00\",\n        \"ġ\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x68\\x60\\x60\\xE0\\xE0\\x00\\x00\\x03\\xC7\\xCE\\xCC\\xCC\\xCC\\xCC\\xE6\\x7F\\x3F\\x00\",\n        \"Ģ\": b\"\\x00\\xF0\\xFC\\x0E\\x07\\x03\\xC3\\xC3\\xC3\\xC7\\xC6\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\xB0\\x70\\x30\\x3F\\x3F\\x00\",\n        \"ģ\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x6C\\x6A\\x60\\xE0\\xE0\\x00\\x00\\x03\\xC7\\xCE\\xCC\\xCC\\xCC\\xCC\\xE6\\x7F\\x3F\\x00\",\n        \"Ĥ\": b\"\\x00\\xFC\\xFC\\x80\\x82\\x81\\x81\\x82\\x80\\xFC\\xFC\\x00\\x00\\x3F\\x3F\\x01\\x01\\x01\\x01\\x01\\x01\\x3F\\x3F\\x00\",\n        \"ĥ\": b\"\\x00\\xFE\\xFE\\xC0\\x62\\x63\\x61\\xE3\\xC2\\x80\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\",\n        \"Ħ\": b\"\\x02\\xFF\\xFF\\xC2\\xC2\\xC2\\xC2\\xC2\\xC2\\xFF\\xFF\\x02\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"ħ\": b\"\\x04\\xFF\\xFF\\xC4\\x64\\x60\\x60\\xE0\\xC0\\x80\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\",\n        \"Ĩ\": b\"\\x00\\x00\\x00\\x1A\\x19\\xFB\\xFB\\x1A\\x19\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"ĩ\": b\"\\x00\\x00\\x00\\x08\\x64\\xEC\\xE8\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"Ī\": b\"\\x00\\x00\\x00\\x0C\\x0D\\xFD\\xFD\\x0D\\x0C\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"ī\": b\"\\x00\\x00\\x00\\x08\\x68\\xE8\\xE8\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"Ĭ\": b\"\\x00\\x00\\x00\\x18\\x19\\xFA\\xFA\\x19\\x18\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"ĭ\": b\"\\x00\\x00\\x00\\x00\\x64\\xE8\\xE8\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"Į\": b\"\\x00\\x00\\x00\\x03\\x03\\xFF\\xFF\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x7F\\xBF\\xB0\\x30\\x00\\x00\\x00\",\n        \"į\": b\"\\x00\\x00\\x00\\x00\\x60\\xEC\\xEC\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x7F\\xBF\\xB0\\x30\\x00\\x00\\x00\",\n        \"İ\": b\"\\x00\\x00\\x00\\x18\\x18\\xF8\\xFA\\x18\\x18\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"ı\": b\"\\x00\\x00\\x00\\x00\\x60\\xE0\\xE0\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"Ĳ\": b\"\\x00\\x03\\xFF\\xFF\\x03\\x00\\x00\\x00\\x03\\xFF\\xFF\\x00\\x00\\x30\\x3F\\x3F\\x30\\x0C\\x1C\\x30\\x30\\x3F\\x1F\\x00\",\n        \"ĳ\": b\"\\x00\\x00\\x20\\xEC\\xEC\\x00\\x00\\x20\\xEC\\xEC\\x00\\x00\\x00\\x00\\x30\\x3F\\x3F\\x70\\xC0\\xC0\\xFF\\x7F\\x00\\x00\",\n        \"Ĵ\": b\"\\x00\\x00\\x00\\x00\\x02\\x03\\x01\\x03\\x02\\xF8\\xF8\\x00\\x00\\x0E\\x1E\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x07\\x00\",\n        \"ĵ\": b\"\\x00\\x00\\x00\\x00\\x00\\x08\\x6C\\xE4\\xEC\\x08\\x00\\x00\\x00\\x00\\x00\\x60\\xE0\\xC0\\xC0\\xFF\\x7F\\x00\\x00\\x00\",\n        \"Ķ\": b\"\\x00\\xFF\\xFF\\xC0\\xE0\\xF0\\x38\\x1C\\x0E\\x07\\x03\\x00\\x00\\x3F\\x3F\\x00\\x01\\xA3\\x67\\x0E\\x1C\\x38\\x30\\x00\",\n        \"ķ\": b\"\\x00\\x00\\xFF\\xFF\\x00\\x80\\xC0\\xE0\\x60\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x03\\xA7\\x6F\\x1C\\x38\\x30\\x00\\x00\",\n        \"ĸ\": b\"\\x00\\x00\\xE0\\xE0\\x00\\x80\\xC0\\xE0\\x60\\x20\\x00\\x00\\x00\\x00\\x3F\\x3F\\x03\\x07\\x0F\\x1C\\x38\\x30\\x00\\x00\",\n        \"Ĺ\": b\"\\x00\\xF8\\xFA\\x03\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x00\",\n        \"ĺ\": b\"\\x00\\x00\\x00\\x00\\x18\\xFA\\xFB\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"Ļ\": b\"\\x00\\xFF\\xFF\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x30\\x30\\xB0\\x70\\x30\\x30\\x30\\x30\\x00\",\n        \"ļ\": b\"\\x00\\x00\\x00\\x00\\x03\\xFF\\xFF\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\xBF\\x7F\\x30\\x30\\x00\\x00\\x00\",\n        \"Ľ\": b\"\\x00\\xFF\\xFF\\x00\\x00\\x05\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x00\",\n        \"ľ\": b\"\\x00\\x00\\x00\\x00\\x03\\xFF\\xFF\\x00\\x05\\x03\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"Ŀ\": b\"\\x00\\xFF\\xFF\\x00\\x00\\x00\\x20\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x00\",\n        \"ŀ\": b\"\\x00\\x00\\x00\\x00\\x03\\xFF\\xFF\\x00\\x40\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"Ł\": b\"\\x80\\xFF\\xFF\\x20\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x00\",\n        \"ł\": b\"\\x00\\x00\\x00\\x00\\x83\\xFF\\xFF\\x20\\x10\\x00\\x00\\x00\\x00\\x00\\x00\\x31\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"Ń\": b\"\\x00\\xFF\\xFF\\x0E\\x38\\xF2\\xC3\\x01\\x00\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x03\\x07\\x1C\\x3F\\x3F\\x00\",\n        \"ń\": b\"\\x00\\x00\\xE0\\xE0\\x60\\x68\\x6C\\x64\\xE0\\xC0\\x80\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"Ņ\": b\"\\x00\\xFF\\xFF\\x0E\\x38\\xF0\\xC0\\x00\\x00\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x00\\x00\\xA0\\x63\\x07\\x1C\\x3F\\x3F\\x00\",\n        \"ņ\": b\"\\x00\\x00\\xE0\\xE0\\x60\\x60\\x60\\x60\\xE0\\xC0\\x80\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\xA0\\x60\\x00\\x3F\\x3F\\x00\",\n        \"Ň\": b\"\\x00\\xFF\\xFF\\x0E\\x38\\xF1\\xC2\\x01\\x00\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x03\\x07\\x1C\\x3F\\x3F\\x00\",\n        \"ň\": b\"\\x00\\x00\\xE0\\xE0\\x64\\x6C\\x68\\x6C\\xE4\\xC0\\x80\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"ŉ\": b\"\\x00\\x0A\\xE6\\xE0\\x60\\x60\\x60\\x60\\xE0\\xC0\\x80\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"Ŋ\": b\"\\x00\\x00\\xFF\\xFF\\x06\\x03\\x03\\x03\\x07\\xFE\\xFC\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x20\\x20\\x30\\x1F\\x0F\\x00\",\n        \"ŋ\": b\"\\x00\\x00\\xE0\\xE0\\x60\\x60\\x60\\x60\\xE0\\xC0\\x80\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\xC0\\xC0\\xFF\\x7F\\x00\",\n        \"Ō\": b\"\\x00\\xC0\\xF0\\x38\\x1D\\x0D\\x0D\\x1D\\x38\\xF0\\xC0\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x30\\x38\\x1C\\x0F\\x03\\x00\",\n        \"ō\": b\"\\x00\\x80\\xC0\\xE0\\x68\\x68\\x68\\x68\\xE0\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"Ŏ\": b\"\\x00\\x80\\xE0\\x70\\x39\\x1A\\x1A\\x39\\x70\\xE0\\x80\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x30\\x38\\x1C\\x0F\\x03\\x00\",\n        \"ŏ\": b\"\\x00\\x80\\xC0\\xE0\\x64\\x68\\x68\\x64\\xE0\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"Ő\": b\"\\x00\\x80\\xE0\\x70\\x3A\\x19\\x1A\\x39\\x70\\xE0\\x80\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x30\\x38\\x1C\\x0F\\x03\\x00\",\n        \"ő\": b\"\\x00\\x80\\xC0\\xE0\\x68\\x64\\x68\\x64\\xE0\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"Œ\": b\"\\xF0\\xFC\\x0E\\x03\\x03\\x07\\xFE\\xFF\\xC3\\xC3\\xC3\\x00\\x03\\x0F\\x1C\\x30\\x30\\x38\\x1F\\x3F\\x30\\x30\\x30\\x00\",\n        \"œ\": b\"\\x80\\xC0\\xE0\\x60\\x60\\xE0\\xC0\\x60\\x60\\x60\\x40\\x80\\x0F\\x1F\\x38\\x30\\x30\\x1F\\x1F\\x3B\\x33\\x33\\x1B\\x09\",\n        \"Ŕ\": b\"\\x00\\xF8\\xF8\\x98\\x98\\x9A\\x9B\\x99\\xF8\\xF0\\x60\\x00\\x00\\x3F\\x3F\\x01\\x01\\x03\\x07\\x0F\\x1D\\x38\\x30\\x00\",\n        \"ŕ\": b\"\\x00\\x00\\xE0\\xE0\\xC0\\x60\\x68\\x6C\\x64\\xE0\\xC0\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"Ŗ\": b\"\\x00\\xFF\\xFF\\x83\\x83\\x83\\x83\\x83\\xC7\\xFE\\x7C\\x00\\x00\\x3F\\x3F\\x01\\x01\\xA3\\x67\\x0F\\x1D\\x38\\x30\\x00\",\n        \"ŗ\": b\"\\x00\\x00\\xE0\\xE0\\xC0\\x60\\x60\\x60\\x60\\xE0\\xC0\\x00\\x00\\x00\\x3F\\x3F\\x00\\xA0\\x60\\x00\\x00\\x00\\x00\\x00\",\n        \"Ř\": b\"\\x00\\xF8\\xF8\\x99\\x9B\\x9A\\x9B\\x99\\xF8\\xF0\\x60\\x00\\x00\\x3F\\x3F\\x01\\x01\\x03\\x07\\x0F\\x1D\\x38\\x30\\x00\",\n        \"ř\": b\"\\x00\\x00\\xE0\\xE0\\xC4\\x6C\\x68\\x6C\\x64\\xE0\\xC0\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"Ś\": b\"\\x00\\x60\\xF0\\xF8\\x98\\x9A\\x9B\\x99\\x98\\x30\\x20\\x00\\x00\\x0C\\x1C\\x39\\x31\\x31\\x31\\x31\\x3B\\x1F\\x0E\\x00\",\n        \"ś\": b\"\\x00\\xC0\\xE0\\x60\\x68\\x6C\\x64\\x60\\x40\\x00\\x00\\x00\\x00\\x11\\x33\\x33\\x33\\x33\\x33\\x3F\\x1E\\x00\\x00\\x00\",\n        \"Ŝ\": b\"\\x00\\x60\\xF0\\xF8\\x9A\\x9B\\x99\\x9B\\x9A\\x30\\x20\\x00\\x00\\x0C\\x1C\\x39\\x31\\x31\\x31\\x31\\x3B\\x1F\\x0E\\x00\",\n        \"ŝ\": b\"\\x00\\xC0\\xE0\\x68\\x6C\\x64\\x6C\\x68\\x40\\x00\\x00\\x00\\x00\\x11\\x33\\x33\\x33\\x33\\x33\\x3F\\x1E\\x00\\x00\\x00\",\n        \"Ş\": b\"\\x00\\x3C\\x7E\\xE7\\xC3\\xC3\\xC3\\xC3\\xC7\\x8E\\x0C\\x00\\x00\\x0C\\x1C\\x38\\x30\\xB0\\xF0\\x30\\x39\\x1F\\x0F\\x00\",\n        \"ş\": b\"\\x00\\xC0\\xE0\\x60\\x60\\x60\\x60\\x60\\x40\\x00\\x00\\x00\\x00\\x11\\x33\\x33\\xB3\\xF3\\x33\\x3F\\x1E\\x00\\x00\\x00\",\n        \"Š\": b\"\\x00\\x60\\xF0\\xF8\\x99\\x9B\\x9A\\x9B\\x99\\x30\\x20\\x00\\x00\\x0C\\x1C\\x39\\x31\\x31\\x31\\x31\\x3B\\x1F\\x0E\\x00\",\n        \"š\": b\"\\x00\\xC0\\xE0\\x64\\x6C\\x68\\x6C\\x64\\x40\\x00\\x00\\x00\\x00\\x11\\x33\\x33\\x33\\x33\\x33\\x3F\\x1E\\x00\\x00\\x00\",\n        \"Ţ\": b\"\\x00\\x00\\x03\\x03\\x03\\xFF\\xFF\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xBF\\xBF\\x60\\x00\\x00\\x00\\x00\",\n        \"ţ\": b\"\\x00\\x60\\x60\\xFE\\xFE\\x60\\x60\\x60\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x1F\\x3F\\xB0\\xB0\\xF0\\x30\\x00\\x00\\x00\",\n        \"Ť\": b\"\\x00\\x00\\x18\\x19\\x1B\\xFA\\xFA\\x1B\\x19\\x18\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\",\n        \"ť\": b\"\\x00\\x60\\x60\\xFE\\xFE\\x60\\x65\\x63\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x1F\\x3F\\x30\\x30\\x30\\x30\\x00\\x00\\x00\",\n        \"Ŧ\": b\"\\x00\\x00\\x03\\xC3\\xC3\\xFF\\xFF\\xC3\\xC3\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\",\n        \"ŧ\": b\"\\x00\\x30\\x30\\xFE\\xFE\\x30\\x30\\x30\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x1F\\x3F\\x33\\x33\\x30\\x30\\x00\\x00\\x00\",\n        \"Ũ\": b\"\\x00\\xF8\\xF8\\x02\\x01\\x03\\x03\\x02\\x01\\xF8\\xF8\\x00\\x00\\x07\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x07\\x00\",\n        \"ũ\": b\"\\x00\\xE0\\xE0\\x08\\x04\\x0C\\x0C\\x08\\x04\\xE0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x18\\x3F\\x3F\\x00\",\n        \"Ū\": b\"\\x00\\xFC\\xFC\\x00\\x01\\x01\\x01\\x01\\x00\\xFC\\xFC\\x00\\x00\\x07\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x07\\x00\",\n        \"ū\": b\"\\x00\\xE0\\xE0\\x00\\x08\\x08\\x08\\x08\\x00\\xE0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x18\\x3F\\x3F\\x00\",\n        \"Ŭ\": b\"\\x00\\xFC\\xFC\\x00\\x01\\x02\\x02\\x01\\x00\\xFC\\xFC\\x00\\x00\\x07\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x07\\x00\",\n        \"ŭ\": b\"\\x00\\xE0\\xE0\\x00\\x04\\x08\\x08\\x04\\x00\\xE0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x18\\x3F\\x3F\\x00\",\n        \"Ů\": b\"\\x00\\xF8\\xF8\\x00\\x06\\x09\\x09\\x06\\x00\\xF8\\xF8\\x00\\x00\\x07\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x07\\x00\",\n        \"ů\": b\"\\x00\\xE0\\xE0\\x00\\x0C\\x12\\x12\\x0C\\x00\\xE0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x18\\x3F\\x3F\\x00\",\n        \"Ű\": b\"\\x00\\xF8\\xF8\\x00\\x02\\x01\\x02\\x01\\x00\\xF8\\xF8\\x00\\x00\\x07\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x07\\x00\",\n        \"ű\": b\"\\x00\\xE0\\xE0\\x00\\x08\\x04\\x08\\x04\\x00\\xE0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x18\\x3F\\x3F\\x00\",\n        \"Ų\": b\"\\x00\\xFF\\xFF\\x00\\x00\\x00\\x00\\x00\\x00\\xFF\\xFF\\x00\\x00\\x07\\x1F\\x38\\x30\\xF0\\xB0\\xB0\\x38\\x1F\\x07\\x00\",\n        \"ų\": b\"\\x00\\xE0\\xE0\\x00\\x00\\x00\\x00\\x00\\x00\\xE0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\xF0\\xB0\\xB0\\x18\\x3F\\x3F\\x00\",\n        \"Ŵ\": b\"\\x00\\xFC\\xFC\\x00\\x02\\x81\\x81\\x02\\x00\\xFC\\xFC\\x00\\x00\\x3F\\x3F\\x1C\\x06\\x03\\x03\\x06\\x1C\\x3F\\x3F\\x00\",\n        \"ŵ\": b\"\\x00\\xE0\\xE0\\x00\\x04\\xE8\\xE8\\x04\\x00\\xE0\\xE0\\x00\\x00\\x07\\x1F\\x38\\x1C\\x0F\\x0F\\x1C\\x38\\x1F\\x07\\x00\",\n        \"Ŷ\": b\"\\x00\\x02\\x0E\\x3C\\xF2\\xC1\\xC1\\xF2\\x3C\\x0E\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\",\n        \"ŷ\": b\"\\x00\\x00\\x60\\xE0\\x88\\x04\\x04\\x88\\xE0\\x60\\x00\\x00\\x00\\x00\\x00\\x81\\xE7\\x7E\\x1E\\x07\\x01\\x00\\x00\\x00\",\n        \"Ÿ\": b\"\\x00\\x02\\x0E\\x3C\\xF1\\xC0\\xC0\\xF1\\x3C\\x0E\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\",\n        \"Ź\": b\"\\x00\\x18\\x18\\x18\\x18\\x1A\\x9B\\xD9\\xF8\\x78\\x38\\x00\\x00\\x30\\x38\\x3C\\x3E\\x37\\x33\\x31\\x30\\x30\\x30\\x00\",\n        \"ź\": b\"\\x00\\x60\\x60\\x60\\x68\\x6C\\xE4\\xE0\\x60\\x20\\x00\\x00\\x00\\x30\\x38\\x3C\\x36\\x33\\x31\\x30\\x30\\x30\\x00\\x00\",\n        \"Ż\": b\"\\x00\\x18\\x18\\x18\\x18\\x18\\x9A\\xD8\\xF8\\x78\\x38\\x00\\x00\\x30\\x38\\x3C\\x3E\\x37\\x33\\x31\\x30\\x30\\x30\\x00\",\n        \"ż\": b\"\\x00\\x60\\x60\\x60\\x60\\x68\\xE0\\xE0\\x60\\x20\\x00\\x00\\x00\\x30\\x38\\x3C\\x36\\x33\\x31\\x30\\x30\\x30\\x00\\x00\",\n        \"Ž\": b\"\\x00\\x18\\x18\\x18\\x19\\x1B\\x9A\\xDB\\xF9\\x78\\x38\\x00\\x00\\x30\\x38\\x3C\\x3E\\x37\\x33\\x31\\x30\\x30\\x30\\x00\",\n        \"ž\": b\"\\x00\\x60\\x60\\x64\\x6C\\x68\\xEC\\xE4\\x60\\x20\\x00\\x00\\x00\\x30\\x38\\x3C\\x36\\x33\\x31\\x30\\x30\\x30\\x00\\x00\",\n        \"ſ\": b\"\\x00\\x00\\x00\\x00\\xFC\\xFE\\x06\\x06\\x0E\\x0C\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x00\\x00\\x00\\x00\\x00\",\n    }\n    return font\n\n\ndef get_font_map_greek() -> Dict[str, bytes]:\n    font = {\n        # U+0370..U+03FF Greek and Coptic\n        \"Έ\": b\"\\x06\\xFC\\xFC\\x8C\\x8C\\x8C\\x8C\\x8C\\x8C\\x0C\\x0C\\x00\\x00\\x3F\\x3F\\x31\\x31\\x31\\x31\\x31\\x31\\x30\\x30\\x00\",\n        \"Α\": b\"\\x00\\x00\\x00\\xE0\\xFC\\x1F\\x1F\\xFC\\xE0\\x00\\x00\\x00\\x00\\x38\\x3F\\x07\\x06\\x06\\x06\\x06\\x07\\x3F\\x38\\x00\",\n        \"Β\": b\"\\x00\\xFF\\xFF\\xC3\\xC3\\xC3\\xC3\\xE7\\xFE\\xBC\\x00\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x39\\x1F\\x0F\\x00\",\n        \"Γ\": b\"\\x00\\xFF\\xFF\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"Δ\": b\"\\x00\\x00\\x00\\xE0\\xFC\\x1F\\x1F\\xFC\\xE0\\x00\\x00\\x00\\x00\\x38\\x3F\\x37\\x30\\x30\\x30\\x30\\x37\\x3F\\x38\\x00\",\n        \"Ε\": b\"\\x00\\xFF\\xFF\\xC3\\xC3\\xC3\\xC3\\xC3\\xC3\\x03\\x03\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x00\",\n        \"Ζ\": b\"\\x00\\x03\\x03\\x03\\x03\\xC3\\xE3\\x33\\x1F\\x0F\\x03\\x00\\x00\\x30\\x3C\\x3E\\x33\\x31\\x30\\x30\\x30\\x30\\x30\\x00\",\n        \"Η\": b\"\\x00\\xFF\\xFF\\xC0\\xC0\\xC0\\xC0\\xC0\\xC0\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"Θ\": b\"\\x00\\xF0\\xFC\\x0E\\xC7\\xC3\\xC3\\xC7\\x0E\\xFC\\xF0\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x30\\x38\\x1C\\x0F\\x03\\x00\",\n        \"Ι\": b\"\\x00\\x00\\x00\\x03\\x03\\xFF\\xFF\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"Κ\": b\"\\x00\\xFF\\xFF\\xC0\\xE0\\xF0\\x38\\x1C\\x0E\\x07\\x03\\x00\\x00\\x3F\\x3F\\x00\\x01\\x03\\x07\\x0E\\x1C\\x38\\x30\\x00\",\n        \"Λ\": b\"\\x00\\x00\\x00\\xE0\\xFC\\x1F\\x1F\\xFC\\xE0\\x00\\x00\\x00\\x00\\x38\\x3F\\x07\\x00\\x00\\x00\\x00\\x07\\x3F\\x38\\x00\",\n        \"Μ\": b\"\\x00\\xFF\\xFF\\x1E\\x78\\xE0\\xE0\\x78\\x1E\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x00\\x00\\x01\\x01\\x00\\x00\\x3F\\x3F\\x00\",\n        \"Ν\": b\"\\x00\\xFF\\xFF\\x0E\\x38\\xF0\\xC0\\x00\\x00\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x03\\x07\\x1C\\x3F\\x3F\\x00\",\n        \"Ξ\": b\"\\x00\\x03\\x03\\xC3\\xC3\\xC3\\xC3\\xC3\\xC3\\x03\\x03\\x00\\x00\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x00\",\n        \"Ο\": b\"\\x00\\xF0\\xFC\\x0E\\x07\\x03\\x03\\x07\\x0E\\xFC\\xF0\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x30\\x38\\x1C\\x0F\\x03\\x00\",\n        \"Π\": b\"\\x00\\xFF\\xFF\\x03\\x03\\x03\\x03\\x03\\x03\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"Ρ\": b\"\\x00\\xFF\\xFF\\x83\\x83\\x83\\x83\\x83\\xC7\\xFE\\x7C\\x00\\x00\\x3F\\x3F\\x01\\x01\\x01\\x01\\x01\\x01\\x00\\x00\\x00\",\n        \"Σ\": b\"\\x00\\x03\\x0F\\x1F\\x33\\xE3\\xE3\\x03\\x03\\x03\\x03\\x00\\x00\\x30\\x3C\\x3E\\x33\\x31\\x30\\x30\\x30\\x30\\x30\\x00\",\n        \"Τ\": b\"\\x00\\x03\\x03\\x03\\x03\\xFF\\xFF\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\",\n        \"Υ\": b\"\\x00\\x03\\x0F\\x3C\\xF0\\xC0\\xC0\\xF0\\x3C\\x0F\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\",\n        \"Φ\": b\"\\x00\\xF8\\xFC\\x0E\\x06\\xFF\\xFF\\x06\\x0E\\xFC\\xF8\\x00\\x00\\x03\\x07\\x0E\\x0C\\x3F\\x3F\\x0C\\x0E\\x07\\x03\\x00\",\n        \"Χ\": b\"\\x00\\x03\\x0F\\x3C\\xF0\\xC0\\xC0\\xF0\\x3C\\x0F\\x03\\x00\\x00\\x30\\x3C\\x0F\\x03\\x00\\x00\\x03\\x0F\\x3C\\x30\\x00\",\n        \"Ψ\": b\"\\x00\\x3F\\x7F\\xE0\\xC0\\xFF\\xFF\\xC0\\xE0\\x7F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\",\n        \"Ω\": b\"\\x00\\xF0\\xFC\\x0E\\x07\\x03\\x03\\x07\\x0E\\xFC\\xF0\\x00\\x00\\x63\\x6F\\x7C\\x70\\x00\\x00\\x70\\x7C\\x6F\\x63\\x00\",\n        \"ά\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x6C\\x6E\\x66\\xC0\\xE0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x18\\x3F\\x3F\\x20\",\n        \"έ\": b\"\\x00\\xE0\\xF0\\x30\\x30\\x36\\x37\\x33\\x30\\x70\\x60\\x00\\x00\\x1D\\x3F\\x33\\x33\\x33\\x33\\x33\\x33\\x38\\x18\\x00\",\n        \"ή\": b\"\\x00\\xE0\\xE0\\xC0\\x60\\x6C\\x6E\\xE6\\xE0\\xC0\\x00\\x00\\x00\\x1F\\x1F\\x00\\x00\\x00\\x00\\x00\\x7F\\x7F\\x00\\x00\",\n        \"ί\": b\"\\x00\\x00\\x00\\xEC\\xEE\\x06\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x1F\\x3F\\x30\\x30\\x30\\x00\\x00\\x00\\x00\",\n        \"α\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x60\\x60\\xC0\\xE0\\xE0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x18\\x3F\\x3F\\x20\",\n        \"β\": b\"\\x00\\x00\\xC0\\xE0\\x30\\x10\\x10\\x30\\xE0\\xC0\\x00\\x00\\x00\\x00\\xFF\\xFF\\x21\\x21\\x21\\x33\\x3F\\x1E\\x00\\x00\",\n        \"γ\": b\"\\x00\\x60\\xE0\\x80\\x00\\x00\\x00\\x00\\x80\\xE0\\x60\\x00\\x00\\x00\\x01\\x07\\x1E\\xF8\\xF8\\x1E\\x07\\x01\\x00\\x00\",\n        \"δ\": b\"\\x00\\x83\\xC7\\xEF\\x7F\\x7B\\x73\\x63\\xE3\\xC3\\x83\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"ε\": b\"\\x00\\xE0\\xF0\\x30\\x30\\x30\\x30\\x30\\x30\\x70\\x60\\x00\\x00\\x1D\\x3F\\x33\\x33\\x33\\x33\\x33\\x33\\x38\\x18\\x00\",\n        \"ζ\": b\"\\x00\\x83\\xC3\\xE3\\x63\\x63\\x63\\x73\\x3F\\x1F\\x00\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\xF0\\xE0\\x00\\x00\\x00\",\n        \"η\": b\"\\x00\\xE0\\xE0\\xC0\\x60\\x60\\x60\\xE0\\xE0\\xC0\\x00\\x00\\x00\\x1F\\x1F\\x00\\x00\\x00\\x00\\x00\\x7F\\x7F\\x00\\x00\",\n        \"θ\": b\"\\x00\\xF0\\xF8\\x1C\\x8C\\x8C\\x8C\\x8C\\x1C\\xF8\\xF0\\x00\\x00\\x0F\\x1F\\x38\\x31\\x31\\x31\\x31\\x38\\x1F\\x0F\\x00\",\n        \"ι\": b\"\\x00\\x00\\x00\\xE0\\xE0\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x1F\\x3F\\x30\\x30\\x30\\x00\\x00\\x00\\x00\",\n        \"κ\": b\"\\x00\\x00\\xC0\\xC0\\x00\\x00\\x80\\xC0\\xC0\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x06\\x0F\\x1F\\x39\\x30\\x00\\x00\\x00\",\n        \"λ\": b\"\\x00\\x00\\x00\\x00\\xC0\\xE0\\xE0\\xC0\\x00\\x00\\x00\\x00\\x00\\x30\\x3C\\x0F\\x03\\x00\\x00\\x03\\x0F\\x3C\\x30\\x00\",\n        \"μ\": b\"\\x00\\xF0\\xF0\\x00\\x00\\x00\\x00\\x00\\xF0\\xF0\\x00\\x00\\x00\\xFF\\xFF\\x0E\\x0C\\x0C\\x0C\\x06\\x0F\\x0F\\x00\\x00\",\n        \"ν\": b\"\\x00\\x60\\xE0\\x80\\x00\\x00\\x00\\x00\\x80\\xE0\\x60\\x00\\x00\\x00\\x01\\x07\\x1E\\x38\\x38\\x1E\\x07\\x01\\x00\\x00\",\n        \"ξ\": b\"\\x00\\x3C\\xFE\\xE7\\xC3\\xC3\\xC3\\xC3\\x00\\x00\\x00\\x00\\x00\\x0F\\x1F\\x39\\x30\\x30\\xF0\\xE0\\x00\\x00\\x00\\x00\",\n        \"ο\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x60\\x60\\xE0\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"π\": b\"\\x00\\x60\\xE0\\xE0\\x60\\x60\\x60\\xE0\\xE0\\x60\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x3F\\x3F\\x30\\x00\\x00\",\n        \"ρ\": b\"\\x00\\xE0\\xE0\\x60\\x60\\x60\\x60\\x60\\xE0\\xC0\\x80\\x00\\x00\\xFF\\xFF\\x0C\\x18\\x18\\x18\\x18\\x1C\\x0F\\x07\\x00\",\n        \"ς\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x60\\xE0\\xC0\\x80\\x00\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\xF0\\xE0\\x03\\x03\\x00\\x00\",\n        \"σ\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x60\\x60\\xE0\\xE0\\xE0\\x60\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\\x00\",\n        \"τ\": b\"\\x00\\x60\\x60\\xE0\\xE0\\x60\\x60\\x60\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x1F\\x3F\\x30\\x30\\x30\\x00\\x00\\x00\\x00\",\n        \"υ\": b\"\\x00\\xE0\\xE0\\x00\\x00\\x00\\x00\\x00\\xE0\\xE0\\x00\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\\x00\",\n        \"φ\": b\"\\x00\\xC0\\xE0\\x70\\x30\\xF8\\xF8\\x30\\x70\\xE0\\xC0\\x00\\x00\\x07\\x0F\\x1C\\x18\\x7F\\x7F\\x18\\x1C\\x0F\\x07\\x00\",\n        \"χ\": b\"\\x00\\x70\\xF0\\xC0\\x80\\x00\\x80\\xC0\\xF0\\x70\\x00\\x00\\x00\\x70\\x78\\x1D\\x0F\\x07\\x0F\\x1D\\x78\\x70\\x00\\x00\",\n        \"ψ\": b\"\\x00\\xE0\\xE0\\x00\\x00\\xE0\\xE0\\x00\\x00\\xE0\\xE0\\x00\\x00\\x07\\x0F\\x1C\\x18\\x7F\\x7F\\x18\\x1C\\x0F\\x07\\x00\",\n        \"ω\": b\"\\x00\\xC0\\xE0\\x00\\x00\\x00\\x00\\x00\\x00\\xE0\\xC0\\x00\\x00\\x0F\\x1F\\x38\\x38\\x1E\\x1E\\x38\\x38\\x1F\\x0F\\x00\",\n        \"ό\": b\"\\x00\\x80\\xC0\\xE0\\x60\\x6C\\x6E\\x66\\xE0\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"ύ\": b\"\\x00\\xE0\\xE0\\x00\\x00\\x0C\\x0E\\x06\\xE0\\xE0\\x00\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\\x00\",\n        \"ώ\": b\"\\x00\\xC0\\xE0\\x00\\x00\\x18\\x1C\\x0C\\x00\\xE0\\xC0\\x00\\x00\\x0F\\x1F\\x38\\x38\\x1E\\x1E\\x38\\x38\\x1F\\x0F\\x00\",\n    }\n    return font\n\n\ndef get_font_map_cyrillic() -> Dict[str, bytes]:\n    font = {\n        # U+0400..U+04FF Cyrillic\n        \"Ѐ\": b\"\\x00\\xFC\\xFC\\x8D\\x8F\\x8E\\x8C\\x8C\\x8C\\x0C\\x0C\\x00\\x00\\x3F\\x3F\\x31\\x31\\x31\\x31\\x31\\x31\\x30\\x30\\x00\",\n        \"Ё\": b\"\\x00\\xFE\\xFE\\xC7\\xC7\\xC6\\xC6\\xC7\\xC7\\x06\\x06\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x00\",\n        \"Ђ\": b\"\\x00\\x03\\xFF\\xFF\\x83\\xC3\\xC3\\xC3\\xC0\\x80\\x00\\x00\\x00\\x00\\x3F\\x3F\\x01\\x00\\x30\\x30\\x39\\x1F\\x0F\\x00\",\n        \"Ѓ\": b\"\\x00\\xFC\\xFC\\x0C\\x0C\\x0C\\x0E\\x0F\\x0D\\x0C\\x0C\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"Є\": b\"\\x00\\xF8\\xFC\\xCE\\xC7\\xC3\\xC3\\xC3\\x07\\x0E\\x0C\\x00\\x00\\x07\\x0F\\x1C\\x38\\x30\\x30\\x30\\x38\\x1C\\x0C\\x00\",\n        \"Ѕ\": b\"\\x00\\x3C\\x7E\\x67\\xE3\\xC3\\xC3\\xC3\\x87\\x8E\\x0C\\x00\\x00\\x0C\\x1C\\x38\\x30\\x30\\x30\\x31\\x39\\x1F\\x0F\\x00\",\n        \"І\": b\"\\x00\\x00\\x00\\x03\\x03\\xFF\\xFF\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"Ї\": b\"\\x00\\x00\\x00\\x0D\\x0D\\xFC\\xFC\\x0D\\x0D\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"Ј\": b\"\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x03\\xFF\\xFF\\x00\\x00\\x0E\\x1E\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"Љ\": b\"\\x00\\x00\\xFE\\xFF\\x03\\x03\\xFF\\xFF\\xC0\\xC0\\x80\\x00\\x00\\x30\\x3F\\x1F\\x00\\x00\\x3F\\x3F\\x30\\x39\\x1F\\x0F\",\n        \"Њ\": b\"\\x00\\xFF\\xFF\\xC0\\xC0\\xC0\\xFF\\xFF\\xC0\\xC0\\x80\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x3F\\x3F\\x30\\x39\\x1F\\x0F\",\n        \"Ћ\": b\"\\x00\\x03\\xFF\\xFF\\xC3\\xC3\\xC3\\xC3\\xC0\\x80\\x00\\x00\\x00\\x00\\x3F\\x3F\\x01\\x00\\x00\\x00\\x01\\x3F\\x3F\\x00\",\n        \"Ќ\": b\"\\x00\\xFF\\xFF\\xC0\\xE2\\xF3\\x39\\x1C\\x0E\\x07\\x03\\x00\\x00\\x3F\\x3F\\x00\\x01\\x03\\x07\\x0E\\x1C\\x38\\x30\\x00\",\n        \"Ѝ\": b\"\\x00\\xFF\\xFF\\x00\\x01\\xC3\\xF2\\x38\\x0E\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x1C\\x07\\x03\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"Ў\": b\"\\x00\\x07\\x1F\\x7C\\xF1\\xC1\\xC1\\xF1\\x7C\\x1F\\x07\\x00\\x00\\x00\\x30\\x30\\x3C\\x0F\\x07\\x01\\x00\\x00\\x00\\x00\",\n        \"Џ\": b\"\\x00\\xFF\\xFF\\x00\\x00\\x00\\x00\\x00\\x00\\xFF\\xFF\\x00\\x00\\x1F\\x1F\\x18\\x18\\x78\\x78\\x18\\x18\\x1F\\x1F\\x00\",\n        \"А\": b\"\\x00\\x00\\x00\\xE0\\xFC\\x1F\\x1F\\xFC\\xE0\\x00\\x00\\x00\\x00\\x38\\x3F\\x07\\x06\\x06\\x06\\x06\\x07\\x3F\\x38\\x00\",\n        \"Б\": b\"\\x00\\xFF\\xFF\\xC3\\xC3\\xC3\\xC3\\xC3\\xC3\\x83\\x00\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x39\\x1F\\x0F\\x00\",\n        \"В\": b\"\\x00\\xFF\\xFF\\xC3\\xC3\\xC3\\xC3\\xE7\\xFE\\xBC\\x00\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x39\\x1F\\x0F\\x00\",\n        \"Г\": b\"\\x00\\xFF\\xFF\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"Ґ\": b\"\\x00\\xFC\\xFC\\x0C\\x0C\\x0C\\x0C\\x0C\\x0C\\x0F\\x0F\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"Д\": b\"\\x00\\x00\\xF8\\xFE\\x0F\\x03\\x03\\x03\\xFF\\xFF\\x00\\x00\\x00\\x70\\x7F\\x1F\\x18\\x18\\x18\\x18\\x1F\\x7F\\x70\\x00\",\n        \"Е\": b\"\\x00\\xFF\\xFF\\xC3\\xC3\\xC3\\xC3\\xC3\\xC3\\x03\\x03\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x00\",\n        \"Ж\": b\"\\x00\\x03\\x0F\\xFC\\xE0\\xFF\\xFF\\xE0\\xFC\\x0F\\x03\\x00\\x00\\x38\\x3F\\x07\\x00\\x3F\\x3F\\x00\\x07\\x3F\\x38\\x00\",\n        \"З\": b\"\\x0C\\x0E\\x07\\x03\\xC3\\xC3\\xC3\\xC3\\xC3\\xE7\\x7E\\x3C\\x0C\\x1C\\x38\\x30\\x30\\x30\\x30\\x30\\x30\\x39\\x1F\\x0E\",\n        \"И\": b\"\\x00\\xFF\\xFF\\x00\\x00\\xC0\\xF0\\x38\\x0E\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x1C\\x07\\x03\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"Й\": b\"\\x00\\xFF\\xFF\\x00\\x02\\xC3\\xF1\\x38\\x0E\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x1C\\x07\\x03\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"К\": b\"\\x00\\xFF\\xFF\\xC0\\xE0\\xF0\\x38\\x1C\\x0E\\x07\\x03\\x00\\x00\\x3F\\x3F\\x00\\x01\\x03\\x07\\x0E\\x1C\\x38\\x30\\x00\",\n        \"Л\": b\"\\x00\\x00\\xF0\\xFC\\x1E\\x07\\x03\\x03\\x03\\xFF\\xFF\\x00\\x00\\x30\\x3F\\x1F\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"М\": b\"\\x00\\xFF\\xFF\\x1E\\x78\\xE0\\xE0\\x78\\x1E\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x00\\x00\\x01\\x01\\x00\\x00\\x3F\\x3F\\x00\",\n        \"Н\": b\"\\x00\\xFF\\xFF\\xC0\\xC0\\xC0\\xC0\\xC0\\xC0\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"О\": b\"\\x00\\xF0\\xFC\\x0E\\x07\\x03\\x03\\x07\\x0E\\xFC\\xF0\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x30\\x38\\x1C\\x0F\\x03\\x00\",\n        \"П\": b\"\\x00\\xFF\\xFF\\x03\\x03\\x03\\x03\\x03\\x03\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"Р\": b\"\\x00\\xFF\\xFF\\x83\\x83\\x83\\x83\\x83\\xC7\\xFE\\x7C\\x00\\x00\\x3F\\x3F\\x01\\x01\\x01\\x01\\x01\\x01\\x00\\x00\\x00\",\n        \"С\": b\"\\x00\\xF0\\xFC\\x0E\\x07\\x03\\x03\\x03\\x07\\x0E\\x0C\\x00\\x00\\x03\\x0F\\x1C\\x38\\x30\\x30\\x30\\x38\\x1C\\x0C\\x00\",\n        \"Т\": b\"\\x00\\x03\\x03\\x03\\x03\\xFF\\xFF\\x03\\x03\\x03\\x03\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\",\n        \"У\": b\"\\x00\\x07\\x1F\\x7C\\xF0\\xC0\\xC0\\xF0\\x7C\\x1F\\x07\\x00\\x00\\x00\\x30\\x30\\x3C\\x0F\\x07\\x01\\x00\\x00\\x00\\x00\",\n        \"Ф\": b\"\\x00\\xF8\\xFC\\x0E\\x06\\xFF\\xFF\\x06\\x0E\\xFC\\xF8\\x00\\x00\\x03\\x07\\x0E\\x0C\\x3F\\x3F\\x0C\\x0E\\x07\\x03\\x00\",\n        \"Х\": b\"\\x00\\x03\\x0F\\x3C\\xF0\\xC0\\xC0\\xF0\\x3C\\x0F\\x03\\x00\\x00\\x30\\x3C\\x0F\\x03\\x00\\x00\\x03\\x0F\\x3C\\x30\\x00\",\n        \"Ц\": b\"\\x00\\xFF\\xFF\\x00\\x00\\x00\\x00\\x00\\xFF\\xFF\\x00\\x00\\x00\\x1F\\x1F\\x18\\x18\\x18\\x18\\x18\\x1F\\x7F\\x78\\x00\",\n        \"Ч\": b\"\\x00\\x7F\\xFF\\xC0\\xC0\\xC0\\xC0\\xC0\\xC0\\xFF\\xFF\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"Ш\": b\"\\x00\\xFF\\xFF\\x00\\x00\\xFF\\xFF\\x00\\x00\\xFF\\xFF\\x00\\x00\\x3F\\x3F\\x30\\x30\\x3F\\x3F\\x30\\x30\\x3F\\x3F\\x00\",\n        \"Щ\": b\"\\x00\\xFF\\xFF\\x00\\x00\\xFF\\xFF\\x00\\x00\\xFF\\xFF\\x00\\x00\\x1F\\x1F\\x18\\x18\\x1F\\x1F\\x18\\x18\\x1F\\x7F\\x70\",\n        \"Ъ\": b\"\\x03\\x03\\xFF\\xFF\\xC0\\xC0\\xC0\\xC0\\xC0\\x80\\x00\\x00\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x39\\x1F\\x0F\\x00\",\n        \"Ы\": b\"\\x00\\xFF\\xFF\\xC0\\xC0\\xC0\\xC0\\x80\\x00\\x00\\xFF\\xFF\\x00\\x3F\\x3F\\x30\\x30\\x30\\x39\\x1F\\x0F\\x00\\x3F\\x3F\",\n        \"Ь\": b\"\\x00\\xFF\\xFF\\xC0\\xC0\\xC0\\xC0\\xC0\\xC0\\x80\\x00\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x39\\x1F\\x0F\\x00\",\n        \"Э\": b\"\\x00\\x0C\\x0E\\x07\\xC3\\xC3\\xC3\\xC7\\xCE\\xFC\\xF8\\x00\\x00\\x0C\\x1C\\x38\\x30\\x30\\x30\\x38\\x1C\\x0F\\x07\\x00\",\n        \"Ю\": b\"\\x00\\xFF\\xFF\\xC0\\xFC\\xFE\\x07\\x03\\x07\\xFE\\xFC\\x00\\x00\\x3F\\x3F\\x00\\x0F\\x1F\\x38\\x30\\x38\\x1F\\x0F\\x00\",\n        \"Я\": b\"\\x00\\x7C\\xFE\\xC7\\x83\\x83\\x83\\x83\\x83\\xFF\\xFF\\x00\\x00\\x30\\x38\\x1D\\x0F\\x07\\x03\\x01\\x01\\x3F\\x3F\\x00\",\n        \"а\": b\"\\x00\\x00\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\xF0\\xE0\\x00\\x00\\x1E\\x3F\\x33\\x33\\x33\\x33\\x33\\x33\\x3F\\x3F\\x00\",\n        \"б\": b\"\\x00\\xE0\\xF0\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x00\\x00\\x00\\x1F\\x3F\\x33\\x33\\x33\\x33\\x33\\x33\\x3F\\x1E\\x00\",\n        \"в\": b\"\\x00\\xF0\\xF0\\x30\\x30\\x30\\x30\\x30\\xF0\\xE0\\x00\\x00\\x00\\x3F\\x3F\\x33\\x33\\x33\\x33\\x33\\x33\\x3F\\x1E\\x00\",\n        \"г\": b\"\\x00\\xF0\\xF0\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x30\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"ґ\": b\"\\x00\\xF0\\xF0\\x30\\x30\\x30\\x30\\x30\\x30\\x3C\\x3C\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"д\": b\"\\x00\\x00\\xC0\\xE0\\x70\\x30\\x30\\x30\\xF0\\xF0\\x00\\x00\\x00\\x60\\x7F\\x3F\\x30\\x30\\x30\\x30\\x3F\\x7F\\x60\\x00\",\n        \"е\": b\"\\x00\\xE0\\xF0\\x30\\x30\\x30\\x30\\x30\\x30\\xF0\\xE0\\x00\\x00\\x1F\\x3F\\x33\\x33\\x33\\x33\\x33\\x33\\x33\\x33\\x00\",\n        \"ж\": b\"\\x00\\x30\\xF0\\xC0\\x00\\xF0\\xF0\\x00\\xC0\\xF0\\x30\\x00\\x00\\x30\\x3C\\x0F\\x03\\x3F\\x3F\\x03\\x0F\\x3C\\x30\\x00\",\n        \"з\": b\"\\x00\\x60\\x70\\x30\\x30\\x30\\x30\\x30\\x30\\xF0\\xE0\\x00\\x00\\x18\\x38\\x30\\x33\\x33\\x33\\x33\\x33\\x3F\\x1D\\x00\",\n        \"и\": b\"\\x00\\xF0\\xF0\\x00\\x00\\x00\\x80\\xC0\\xE0\\xF0\\xF0\\x00\\x00\\x3F\\x3F\\x1C\\x0E\\x07\\x03\\x01\\x00\\x3F\\x3F\\x00\",\n        \"й\": b\"\\x00\\xF0\\xF0\\x00\\x04\\x08\\x88\\xC4\\xE0\\xF0\\xF0\\x00\\x00\\x3F\\x3F\\x1C\\x0E\\x07\\x03\\x01\\x00\\x3F\\x3F\\x00\",\n        \"к\": b\"\\x00\\xF0\\xF0\\x80\\x80\\xC0\\xE0\\x70\\x30\\x10\\x00\\x00\\x00\\x3F\\x3F\\x03\\x03\\x07\\x0E\\x1C\\x38\\x30\\x20\\x00\",\n        \"л\": b\"\\x00\\x00\\xC0\\xE0\\x70\\x30\\x30\\x30\\x30\\xF0\\xF0\\x00\\x00\\x30\\x3F\\x1F\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"м\": b\"\\x00\\xF0\\xF0\\xE0\\xC0\\x80\\x80\\xC0\\xE0\\xF0\\xF0\\x00\\x00\\x3F\\x3F\\x00\\x01\\x03\\x03\\x01\\x00\\x3F\\x3F\\x00\",\n        \"н\": b\"\\x00\\xF0\\xF0\\x00\\x00\\x00\\x00\\x00\\x00\\xF0\\xF0\\x00\\x00\\x3F\\x3F\\x03\\x03\\x03\\x03\\x03\\x03\\x3F\\x3F\\x00\",\n        \"о\": b\"\\x00\\xC0\\xE0\\x70\\x30\\x30\\x30\\x30\\x70\\xE0\\xC0\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x1F\\x0F\\x00\",\n        \"п\": b\"\\x00\\xF0\\xF0\\x30\\x30\\x30\\x30\\x30\\x30\\xF0\\xF0\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\",\n        \"р\": b\"\\x00\\xF0\\xF0\\x30\\x30\\x30\\x30\\x30\\x70\\xE0\\xC0\\x00\\x00\\xFF\\xFF\\x0C\\x0C\\x0C\\x0C\\x0C\\x0E\\x07\\x03\\x00\",\n        \"с\": b\"\\x00\\xC0\\xE0\\x70\\x30\\x30\\x30\\x30\\x70\\x60\\x40\\x00\\x00\\x0F\\x1F\\x38\\x30\\x30\\x30\\x30\\x38\\x18\\x08\\x00\",\n        \"т\": b\"\\x00\\x30\\x30\\x30\\x30\\xF0\\xF0\\x30\\x30\\x30\\x30\\x00\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\",\n        \"у\": b\"\\x00\\x30\\xF0\\xC0\\x00\\x00\\x00\\x00\\xC0\\xF0\\x30\\x00\\x00\\x60\\xE0\\xC3\\xE7\\x7C\\x3C\\x0F\\x03\\x00\\x00\\x00\",\n        \"ф\": b\"\\x00\\x80\\xC0\\x60\\x60\\xF0\\xF0\\x60\\x60\\xC0\\x80\\x00\\x00\\x0F\\x1F\\x30\\x30\\xFF\\xFF\\x30\\x30\\x1F\\x0F\\x00\",\n        \"х\": b\"\\x00\\x30\\x70\\xC0\\x80\\x00\\x00\\x80\\xC0\\x70\\x30\\x00\\x00\\x30\\x38\\x0C\\x07\\x03\\x03\\x07\\x0C\\x38\\x30\\x00\",\n        \"ц\": b\"\\x00\\xF0\\xF0\\x00\\x00\\x00\\x00\\x00\\xF0\\xF0\\x00\\x00\\x00\\x3F\\x3F\\x30\\x30\\x30\\x30\\x30\\x3F\\xFF\\xF0\\x00\",\n        \"ч\": b\"\\x00\\xF0\\xF0\\x00\\x00\\x00\\x00\\x00\\x00\\xF0\\xF0\\x00\\x00\\x01\\x03\\x03\\x03\\x03\\x03\\x03\\x03\\x3F\\x3F\\x00\",\n        \"ш\": b\"\\x00\\xF0\\xF0\\x00\\x00\\xE0\\xE0\\x00\\x00\\xF0\\xF0\\x00\\x00\\x3F\\x3F\\x30\\x30\\x3F\\x3F\\x30\\x30\\x3F\\x3F\\x00\",\n        \"щ\": b\"\\x00\\xF0\\xF0\\x00\\x00\\xF0\\xF0\\x00\\x00\\xF0\\xF0\\x00\\x00\\x3F\\x3F\\x30\\x30\\x3F\\x3F\\x30\\x30\\x3F\\xFF\\xE0\",\n        \"ъ\": b\"\\x30\\x30\\xF0\\xF0\\x80\\x80\\x80\\x80\\x80\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x31\\x31\\x31\\x31\\x3B\\x1F\\x0E\\x00\",\n        \"ы\": b\"\\x00\\xF0\\xF0\\x80\\x80\\x80\\x00\\x00\\x00\\xF0\\xF0\\x00\\x00\\x3F\\x3F\\x31\\x31\\x3B\\x1F\\x0E\\x00\\x3F\\x3F\\x00\",\n        \"ь\": b\"\\x00\\xF0\\xF0\\x80\\x80\\x80\\x80\\x80\\x80\\x00\\x00\\x00\\x00\\x3F\\x3F\\x31\\x31\\x31\\x31\\x31\\x3B\\x1F\\x0E\\x00\",\n        \"э\": b\"\\x00\\x40\\x60\\x70\\x30\\x30\\x30\\x30\\x70\\xE0\\xC0\\x00\\x00\\x08\\x18\\x38\\x30\\x33\\x33\\x33\\x3B\\x1F\\x0F\\x00\",\n        \"ю\": b\"\\x00\\xF0\\xF0\\x00\\xE0\\xF0\\x30\\x30\\x30\\xF0\\xE0\\x00\\x00\\x3F\\x3F\\x03\\x1F\\x3F\\x30\\x30\\x30\\x3F\\x1F\\x00\",\n        \"я\": b\"\\x00\\xC0\\xE0\\x70\\x30\\x30\\x30\\x30\\x30\\xF0\\xF0\\x00\\x00\\x21\\x33\\x3B\\x1E\\x0E\\x06\\x06\\x06\\x3F\\x3F\\x00\",\n        \"ѐ\": b\"\\x00\\xE0\\xF0\\x32\\x36\\x36\\x34\\x30\\x30\\xF0\\xE0\\x00\\x00\\x1F\\x3F\\x33\\x33\\x33\\x33\\x33\\x33\\x33\\x33\\x00\",\n        \"ё\": b\"\\x00\\xE0\\xF0\\x34\\x34\\x30\\x30\\x34\\x34\\xF0\\xE0\\x00\\x00\\x1F\\x3F\\x33\\x33\\x33\\x33\\x33\\x33\\x33\\x33\\x00\",\n        \"ђ\": b\"\\x00\\x30\\xFC\\xFC\\x30\\xB0\\xB0\\xB0\\x80\\x80\\x00\\x00\\x00\\x00\\x3F\\x3F\\x07\\x03\\x01\\x01\\xC1\\xFF\\x3F\\x00\",\n        \"ѓ\": b\"\\x00\\xF0\\xF0\\x30\\x30\\x34\\x36\\x32\\x30\\x30\\x30\\x00\\x00\\x3F\\x3F\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"є\": b\"\\x00\\xC0\\xE0\\x70\\x30\\x30\\x30\\x30\\x70\\x60\\x40\\x00\\x00\\x0F\\x1F\\x3B\\x33\\x33\\x33\\x30\\x38\\x18\\x08\\x00\",\n        \"ѕ\": b\"\\x00\\xE0\\xF0\\xB0\\xB0\\x30\\x30\\x30\\x30\\x70\\x60\\x00\\x00\\x18\\x39\\x31\\x33\\x33\\x33\\x37\\x36\\x3E\\x1C\\x00\",\n        \"і\": b\"\\x00\\x00\\x00\\x00\\x30\\xF6\\xF6\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"ї\": b\"\\x00\\x00\\x00\\x04\\x34\\xF0\\xF4\\x04\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\x3F\\x3F\\x30\\x30\\x00\\x00\\x00\",\n        \"ј\": b\"\\x00\\x00\\x00\\x00\\x00\\x30\\x30\\xF6\\xF6\\x00\\x00\\x00\\x00\\x00\\x00\\x60\\xE0\\xC0\\xC0\\xFF\\x7F\\x00\\x00\\x00\",\n        \"љ\": b\"\\x00\\x00\\xE0\\xF0\\x30\\x30\\xF0\\xF0\\x00\\x00\\x00\\x00\\x00\\x30\\x3F\\x1F\\x00\\x00\\x3F\\x3F\\x33\\x33\\x1E\\x0C\",\n        \"њ\": b\"\\x00\\xF0\\xF0\\x00\\x00\\x00\\xF0\\xF0\\x00\\x00\\x00\\x00\\x00\\x3F\\x3F\\x03\\x03\\x03\\x3F\\x3F\\x33\\x33\\x1E\\x0C\",\n        \"ћ\": b\"\\x00\\x30\\xFC\\xFC\\xB0\\xB0\\xB0\\xB0\\x80\\x80\\x00\\x00\\x00\\x00\\x3F\\x3F\\x01\\x01\\x01\\x01\\x01\\x3F\\x3F\\x00\",\n        \"ќ\": b\"\\x00\\xF0\\xF0\\x80\\x88\\xCC\\xE4\\x70\\x30\\x10\\x00\\x00\\x00\\x3F\\x3F\\x03\\x03\\x07\\x0E\\x1C\\x38\\x30\\x20\\x00\",\n        \"ѝ\": b\"\\x00\\xF0\\xF0\\x00\\x06\\x0C\\x88\\xC0\\xE0\\xF0\\xF0\\x00\\x00\\x3F\\x3F\\x1C\\x0E\\x07\\x03\\x01\\x00\\x3F\\x3F\\x00\",\n        \"ў\": b\"\\x00\\x30\\xF0\\xC0\\x04\\x08\\x08\\x04\\xC0\\xF0\\x30\\x00\\x00\\x60\\xE0\\xC3\\xE7\\x7C\\x3C\\x0F\\x03\\x00\\x00\\x00\",\n        \"џ\": b\"\\x00\\xF0\\xF0\\x00\\x00\\x00\\x00\\x00\\x00\\xF0\\xF0\\x00\\x00\\x3F\\x3F\\x30\\x30\\xF0\\xF0\\x30\\x30\\x3F\\x3F\\x00\",\n    }\n    return font\n\n\ndef get_small_font_map_ascii_basic() -> Dict[str, bytes]:\n    font = {\n        # U+0000..U+007F Basic Latin\n        \" \": b\"\\x00\\x00\\x00\\x00\\x00\\x00\",\n        \"!\": b\"\\x00\\x00\\x4f\\x00\\x00\\x00\",\n        '\"': b\"\\x00\\x07\\x00\\x07\\x00\\x00\",\n        \"#\": b\"\\x14\\x7f\\x14\\x7f\\x14\\x00\",\n        \"$\": b\"\\x24\\x2a\\x7f\\x2a\\x12\\x00\",\n        \"%\": b\"\\x23\\x13\\x08\\x64\\x62\\x00\",\n        \"&\": b\"\\x36\\x49\\x56\\x20\\x58\\x00\",\n        \"'\": b\"\\x00\\x05\\x03\\x00\\x00\\x00\",\n        \"(\": b\"\\x00\\x1c\\x22\\x41\\x00\\x00\",\n        \")\": b\"\\x00\\x41\\x22\\x1c\\x00\\x00\",\n        \"*\": b\"\\x14\\x08\\x3e\\x08\\x14\\x00\",\n        \"+\": b\"\\x08\\x08\\x3e\\x08\\x08\\x00\",\n        \",\": b\"\\x00\\x50\\x30\\x00\\x00\\x00\",\n        \"-\": b\"\\x08\\x08\\x08\\x08\\x08\\x00\",\n        \".\": b\"\\x00\\x60\\x60\\x00\\x00\\x00\",\n        \"/\": b\"\\x20\\x10\\x08\\x04\\x02\\x00\",\n        \"0\": b\"\\x3e\\x51\\x49\\x45\\x3e\\x00\",\n        \"1\": b\"\\x00\\x42\\x7f\\x40\\x00\\x00\",\n        \"2\": b\"\\x42\\x61\\x51\\x49\\x46\\x00\",\n        \"3\": b\"\\x21\\x41\\x45\\x4b\\x31\\x00\",\n        \"4\": b\"\\x18\\x14\\x12\\x7f\\x10\\x00\",\n        \"5\": b\"\\x27\\x45\\x45\\x45\\x39\\x00\",\n        \"6\": b\"\\x3c\\x4a\\x49\\x49\\x30\\x00\",\n        \"7\": b\"\\x01\\x71\\x09\\x05\\x03\\x00\",\n        \"8\": b\"\\x36\\x49\\x49\\x49\\x36\\x00\",\n        \"9\": b\"\\x06\\x49\\x49\\x29\\x1e\\x00\",\n        \":\": b\"\\x00\\x36\\x36\\x00\\x00\\x00\",\n        \";\": b\"\\x00\\x56\\x36\\x00\\x00\\x00\",\n        \"<\": b\"\\x08\\x14\\x22\\x41\\x00\\x00\",\n        \"=\": b\"\\x14\\x14\\x14\\x14\\x14\\x00\",\n        \">\": b\"\\x00\\x41\\x22\\x14\\x08\\x00\",\n        \"?\": b\"\\x02\\x01\\x51\\x09\\x06\\x00\",\n        \"@\": b\"\\x32\\x49\\x79\\x41\\x3e\\x00\",\n        \"A\": b\"\\x7e\\x09\\x09\\x09\\x7e\\x00\",\n        \"B\": b\"\\x7f\\x49\\x49\\x49\\x36\\x00\",\n        \"C\": b\"\\x3e\\x41\\x41\\x41\\x22\\x00\",\n        \"D\": b\"\\x7f\\x41\\x41\\x22\\x1c\\x00\",\n        \"E\": b\"\\x7f\\x49\\x49\\x49\\x41\\x00\",\n        \"F\": b\"\\x7f\\x09\\x09\\x09\\x01\\x00\",\n        \"G\": b\"\\x3e\\x41\\x41\\x49\\x7a\\x00\",\n        \"H\": b\"\\x7f\\x08\\x08\\x08\\x7f\\x00\",\n        \"I\": b\"\\x00\\x41\\x7f\\x41\\x00\\x00\",\n        \"J\": b\"\\x20\\x40\\x41\\x3f\\x01\\x00\",\n        \"K\": b\"\\x7f\\x08\\x14\\x22\\x41\\x00\",\n        \"L\": b\"\\x7f\\x40\\x40\\x40\\x40\\x00\",\n        \"M\": b\"\\x7f\\x02\\x0c\\x02\\x7f\\x00\",\n        \"N\": b\"\\x7f\\x04\\x08\\x10\\x7f\\x00\",\n        \"O\": b\"\\x3e\\x41\\x41\\x41\\x3e\\x00\",\n        \"P\": b\"\\x7f\\x09\\x09\\x09\\x06\\x00\",\n        \"Q\": b\"\\x3e\\x41\\x51\\x21\\x5e\\x00\",\n        \"R\": b\"\\x7f\\x09\\x19\\x29\\x46\\x00\",\n        \"S\": b\"\\x26\\x49\\x49\\x49\\x32\\x00\",\n        \"T\": b\"\\x01\\x01\\x7f\\x01\\x01\\x00\",\n        \"U\": b\"\\x3f\\x40\\x40\\x40\\x3f\\x00\",\n        \"V\": b\"\\x1f\\x20\\x40\\x20\\x1f\\x00\",\n        \"W\": b\"\\x3f\\x40\\x38\\x40\\x3f\\x00\",\n        \"X\": b\"\\x63\\x14\\x08\\x14\\x63\\x00\",\n        \"Y\": b\"\\x07\\x08\\x70\\x08\\x07\\x00\",\n        \"Z\": b\"\\x61\\x51\\x49\\x45\\x43\\x00\",\n        \"[\": b\"\\x00\\x7f\\x41\\x41\\x00\\x00\",\n        \"\\\\\": b\"\\x02\\x04\\x08\\x10\\x20\\x00\",\n        \"]\": b\"\\x00\\x41\\x41\\x7f\\x00\\x00\",\n        \"^\": b\"\\x04\\x02\\x01\\x02\\x04\\x00\",\n        \"_\": b\"\\x40\\x40\\x40\\x40\\x40\\x00\",\n        \"`\": b\"\\x00\\x03\\x05\\x00\\x00\\x00\",\n        \"a\": b\"\\x20\\x54\\x54\\x54\\x78\\x00\",\n        \"b\": b\"\\x7f\\x48\\x44\\x44\\x38\\x00\",\n        \"c\": b\"\\x38\\x44\\x44\\x44\\x20\\x00\",\n        \"d\": b\"\\x38\\x44\\x44\\x48\\x7f\\x00\",\n        \"e\": b\"\\x38\\x54\\x54\\x54\\x18\\x00\",\n        \"f\": b\"\\x00\\x04\\x7e\\x05\\x01\\x00\",\n        \"g\": b\"\\x08\\x54\\x54\\x54\\x3c\\x00\",\n        \"h\": b\"\\x7f\\x08\\x04\\x04\\x78\\x00\",\n        \"i\": b\"\\x00\\x44\\x7d\\x40\\x00\\x00\",\n        \"j\": b\"\\x20\\x40\\x44\\x3d\\x00\\x00\",\n        \"k\": b\"\\x00\\x7f\\x10\\x28\\x44\\x00\",\n        \"l\": b\"\\x00\\x41\\x7f\\x40\\x00\\x00\",\n        \"m\": b\"\\x7c\\x04\\x78\\x04\\x78\\x00\",\n        \"n\": b\"\\x7c\\x08\\x04\\x04\\x78\\x00\",\n        \"o\": b\"\\x38\\x44\\x44\\x44\\x38\\x00\",\n        \"p\": b\"\\x7c\\x14\\x14\\x14\\x08\\x00\",\n        \"q\": b\"\\x08\\x14\\x14\\x14\\x7c\\x00\",\n        \"r\": b\"\\x7c\\x08\\x04\\x04\\x08\\x00\",\n        \"s\": b\"\\x48\\x54\\x54\\x54\\x24\\x00\",\n        \"t\": b\"\\x04\\x3e\\x44\\x40\\x20\\x00\",\n        \"u\": b\"\\x3c\\x40\\x40\\x20\\x7c\\x00\",\n        \"v\": b\"\\x0c\\x30\\x40\\x30\\x0c\\x00\",\n        \"w\": b\"\\x3c\\x40\\x30\\x40\\x3c\\x00\",\n        \"x\": b\"\\x44\\x24\\x38\\x48\\x44\\x00\",\n        \"y\": b\"\\x44\\x48\\x30\\x10\\x0c\\x00\",\n        \"z\": b\"\\x44\\x64\\x54\\x4c\\x44\\x00\",\n        \"{\": b\"\\x08\\x36\\x41\\x00\\x00\\x00\",\n        \"|\": b\"\\x00\\x00\\x77\\x00\\x00\\x00\",\n        \"}\": b\"\\x00\\x00\\x41\\x36\\x08\\x00\",\n        \"~\": b\"\\x02\\x01\\x02\\x04\\x02\\x00\",\n    }\n    return font\n\n\ndef get_small_font_map_latin_extended() -> Dict[str, bytes]:\n    font = {\n        # U+0080..U+00FF Latin-1 Supplement\n        \"¡\": b\"\\x00\\x00\\x79\\x00\\x00\\x00\",\n        \"¢\": b\"\\x1c\\x22\\x7f\\x22\\x10\\x00\",\n        \"£\": b\"\\x50\\x7e\\x51\\x41\\x42\\x00\",\n        \"¤\": b\"\\x22\\x1c\\x14\\x1c\\x22\\x00\",\n        \"¥\": b\"\\x15\\x16\\x7c\\x16\\x15\\x00\",\n        \"¦\": b\"\\x00\\x00\\x77\\x00\\x00\\x00\",\n        \"§\": b\"\\x4a\\x55\\x55\\x55\\x29\\x00\",\n        \"¨\": b\"\\x00\\x01\\x00\\x01\\x00\\x00\",\n        \"©\": b\"\\x00\\x18\\x24\\x24\\x00\\x00\",\n        \"«\": b\"\\x08\\x14\\x00\\x08\\x14\\x00\",\n        \"¬\": b\"\\x08\\x08\\x08\\x08\\x38\\x00\",\n        \"­\": b\"\\x08\\x08\\x08\\x08\\x08\\x00\",\n        \"¯\": b\"\\x00\\x01\\x01\\x01\\x00\\x00\",\n        \"°\": b\"\\x00\\x00\\x07\\x05\\x07\\x00\",\n        \"±\": b\"\\x44\\x44\\x5f\\x44\\x44\\x00\",\n        \"²\": b\"\\x1d\\x15\\x17\\x00\\x00\\x00\",\n        \"³\": b\"\\x15\\x15\\x1f\\x00\\x00\\x00\",\n        \"´\": b\"\\x00\\x04\\x02\\x01\\x00\\x00\",\n        \"µ\": b\"\\x7c\\x10\\x10\\x0c\\x10\\x00\",\n        \"¶\": b\"\\x02\\x07\\x7f\\x01\\x7f\\x00\",\n        \"·\": b\"\\x00\\x00\\x08\\x00\\x00\\x00\",\n        \"¸\": b\"\\x00\\x40\\x60\\x00\\x00\\x00\",\n        \"¹\": b\"\\x12\\x1f\\x10\\x00\\x00\\x00\",\n        \"º\": b\"\\x07\\x05\\x07\\x00\\x00\\x00\",\n        \"»\": b\"\\x14\\x08\\x00\\x14\\x08\\x00\",\n        \"¼\": b\"\\x21\\x17\\x38\\x24\\x72\\x00\",\n        \"½\": b\"\\x21\\x17\\x78\\x54\\x5e\\x00\",\n        \"¿\": b\"\\x30\\x48\\x45\\x40\\x20\\x00\",\n        \"À\": b\"\\x78\\x15\\x16\\x14\\x78\\x00\",\n        \"Á\": b\"\\x78\\x14\\x16\\x15\\x78\\x00\",\n        \"Â\": b\"\\x78\\x16\\x15\\x16\\x78\\x00\",\n        \"Ã\": b\"\\x7a\\x29\\x2a\\x79\\x00\\x00\",\n        \"Ä\": b\"\\x78\\x15\\x14\\x15\\x78\\x00\",\n        \"Å\": b\"\\x78\\x14\\x15\\x14\\x78\\x00\",\n        \"Æ\": b\"\\x7e\\x09\\x7f\\x49\\x49\\x00\",\n        \"Ç\": b\"\\x0e\\x51\\x71\\x11\\x08\\x00\",\n        \"È\": b\"\\x7c\\x55\\x56\\x44\\x44\\x00\",\n        \"É\": b\"\\x7c\\x54\\x56\\x45\\x44\\x00\",\n        \"Ê\": b\"\\x7c\\x56\\x55\\x46\\x44\\x00\",\n        \"Ë\": b\"\\x7c\\x55\\x54\\x45\\x44\\x00\",\n        \"Ì\": b\"\\x00\\x49\\x7a\\x48\\x00\\x00\",\n        \"Í\": b\"\\x00\\x48\\x7a\\x49\\x00\\x00\",\n        \"Î\": b\"\\x00\\x4a\\x79\\x4a\\x00\\x00\",\n        \"Ï\": b\"\\x44\\x45\\x7c\\x45\\x44\\x00\",\n        \"Ð\": b\"\\x08\\x7f\\x49\\x22\\x1c\\x00\",\n        \"Ñ\": b\"\\x7a\\x11\\x22\\x79\\x00\\x00\",\n        \"Ò\": b\"\\x38\\x45\\x46\\x44\\x38\\x00\",\n        \"Ó\": b\"\\x38\\x44\\x46\\x45\\x38\\x00\",\n        \"Ô\": b\"\\x38\\x46\\x45\\x46\\x38\\x00\",\n        \"Õ\": b\"\\x32\\x49\\x4a\\x31\\x00\\x00\",\n        \"Ö\": b\"\\x38\\x45\\x44\\x45\\x38\\x00\",\n        \"×\": b\"\\x22\\x14\\x08\\x14\\x22\\x00\",\n        \"Ø\": b\"\\x58\\x24\\x54\\x48\\x34\\x00\",\n        \"Ù\": b\"\\x38\\x41\\x42\\x40\\x38\\x00\",\n        \"Ú\": b\"\\x38\\x40\\x42\\x41\\x38\\x00\",\n        \"Û\": b\"\\x38\\x42\\x41\\x42\\x38\\x00\",\n        \"Ü\": b\"\\x3c\\x41\\x40\\x41\\x3c\\x00\",\n        \"Ý\": b\"\\x04\\x08\\x72\\x09\\x04\\x00\",\n        \"Þ\": b\"\\x7f\\x22\\x22\\x22\\x1c\\x00\",\n        \"ß\": b\"\\x7e\\x11\\x25\\x25\\x1a\\x00\",\n        \"à\": b\"\\x20\\x55\\x56\\x54\\x78\\x00\",\n        \"á\": b\"\\x20\\x54\\x56\\x55\\x78\\x00\",\n        \"â\": b\"\\x20\\x56\\x55\\x56\\x78\\x00\",\n        \"ã\": b\"\\x22\\x55\\x56\\x55\\x78\\x00\",\n        \"ä\": b\"\\x20\\x55\\x54\\x55\\x78\\x00\",\n        \"å\": b\"\\x20\\x54\\x55\\x54\\x78\\x00\",\n        \"æ\": b\"\\x24\\x54\\x7c\\x54\\x48\\x00\",\n        \"ç\": b\"\\x1c\\x22\\x62\\x22\\x10\\x00\",\n        \"è\": b\"\\x38\\x55\\x56\\x54\\x08\\x00\",\n        \"é\": b\"\\x38\\x54\\x56\\x55\\x08\\x00\",\n        \"ê\": b\"\\x38\\x56\\x55\\x56\\x08\\x00\",\n        \"ë\": b\"\\x38\\x55\\x54\\x55\\x08\\x00\",\n        \"ì\": b\"\\x00\\x45\\x7e\\x40\\x00\\x00\",\n        \"í\": b\"\\x00\\x44\\x7e\\x41\\x00\\x00\",\n        \"î\": b\"\\x00\\x46\\x7d\\x42\\x00\\x00\",\n        \"ï\": b\"\\x00\\x45\\x7c\\x41\\x00\\x00\",\n        \"ñ\": b\"\\x78\\x12\\x09\\x0a\\x71\\x00\",\n        \"ò\": b\"\\x38\\x45\\x46\\x44\\x38\\x00\",\n        \"ó\": b\"\\x38\\x44\\x46\\x45\\x38\\x00\",\n        \"ô\": b\"\\x38\\x46\\x45\\x46\\x38\\x00\",\n        \"õ\": b\"\\x32\\x49\\x4a\\x31\\x00\\x00\",\n        \"ö\": b\"\\x38\\x45\\x44\\x45\\x38\\x00\",\n        \"÷\": b\"\\x08\\x08\\x2a\\x08\\x08\\x00\",\n        \"ø\": b\"\\x58\\x24\\x54\\x48\\x34\\x00\",\n        \"ù\": b\"\\x3c\\x41\\x42\\x20\\x7c\\x00\",\n        \"ú\": b\"\\x3c\\x40\\x42\\x21\\x7c\\x00\",\n        \"û\": b\"\\x3c\\x42\\x41\\x22\\x7c\\x00\",\n        \"ü\": b\"\\x3c\\x41\\x40\\x21\\x5c\\x00\",\n        \"ű\": b\"\\x3c\\x41\\x40\\x21\\x5c\\x00\",\n        \"ų\": b\"\\x3C\\x40\\x40\\x20\\xDC\\x80\",\n        \"ý\": b\"\\x44\\x48\\x32\\x11\\x0c\\x00\",\n        \"þ\": b\"\\x7c\\x28\\x28\\x10\\x00\\x00\",\n        \"ÿ\": b\"\\x44\\x49\\x30\\x11\\x0c\\x00\",\n        # U+0100..U+017F Latin Extended A\n        \"Ā\": b\"\\x78\\x15\\x15\\x15\\x78\\x00\",\n        \"ā\": b\"\\x20\\x55\\x55\\x55\\x78\\x00\",\n        \"Ă\": b\"\\x78\\x15\\x16\\x15\\x78\\x00\",\n        \"ă\": b\"\\x20\\x55\\x56\\x55\\x78\\x00\",\n        \"Ą\": b\"\\x7e\\x09\\x09\\x49\\xbe\\x00\",\n        \"ą\": b\"\\x20\\x54\\x54\\xd4\\x78\\x00\",\n        \"Ć\": b\"\\x38\\x44\\x46\\x45\\x28\\x00\",\n        \"ć\": b\"\\x38\\x44\\x46\\x45\\x20\\x00\",\n        \"Ĉ\": b\"\\x38\\x46\\x45\\x46\\x28\\x00\",\n        \"ĉ\": b\"\\x38\\x46\\x45\\x46\\x20\\x00\",\n        \"Ċ\": b\"\\x38\\x44\\x45\\x44\\x28\\x00\",\n        \"ċ\": b\"\\x38\\x44\\x45\\x44\\x20\\x00\",\n        \"Č\": b\"\\x38\\x45\\x46\\x45\\x28\\x00\",\n        \"č\": b\"\\x38\\x45\\x46\\x45\\x20\\x00\",\n        \"Ď\": b\"\\x7c\\x45\\x46\\x29\\x10\\x00\",\n        \"ď\": b\"\\x38\\x44\\x44\\x4A\\x7F\\x00\",\n        \"Đ\": b\"\\x08\\x7f\\x49\\x22\\x1c\\x00\",\n        \"đ\": b\"\\x38\\x44\\x44\\x4A\\x7F\\x00\",\n        \"Ē\": b\"\\x7c\\x55\\x55\\x55\\x44\\x00\",\n        \"ē\": b\"\\x38\\x55\\x55\\x55\\x08\\x00\",\n        \"Ĕ\": b\"\\x7c\\x55\\x56\\x55\\x44\\x00\",\n        \"ĕ\": b\"\\x38\\x55\\x56\\x55\\x08\\x00\",\n        \"Ė\": b\"\\x7c\\x54\\x55\\x54\\x44\\x00\",\n        \"ė\": b\"\\x38\\x54\\x55\\x54\\x08\\x00\",\n        \"Ę\": b\"\\x7f\\x49\\x49\\xc9\\x41\\x00\",\n        \"ę\": b\"\\x38\\x54\\x54\\xd4\\x18\\x00\",\n        \"Ě\": b\"\\x7c\\x55\\x56\\x55\\x44\\x00\",\n        \"ě\": b\"\\x38\\x55\\x56\\x55\\x08\\x00\",\n        \"Ĝ\": b\"\\x38\\x46\\x55\\x56\\x70\\x00\",\n        \"ĝ\": b\"\\x08\\x56\\x55\\x56\\x3c\\x00\",\n        \"Ğ\": b\"\\x38\\x45\\x56\\x55\\x30\\x00\",\n        \"ğ\": b\"\\x08\\x55\\x56\\x55\\x3c\\x00\",\n        \"Ġ\": b\"\\x38\\x44\\x55\\x54\\x30\\x00\",\n        \"ġ\": b\"\\x08\\x54\\x55\\x54\\x3c\\x00\",\n        \"Ģ\": b\"\\x0e\\x51\\x35\\x15\\x1c\\x00\",\n        \"Ĥ\": b\"\\x7c\\x12\\x11\\x12\\x7c\\x00\",\n        \"ĥ\": b\"\\x02\\x79\\x22\\x10\\x60\\x00\",\n        \"Ħ\": b\"\\x02\\x7f\\x0a\\x7f\\x02\\x00\",\n        \"ħ\": b\"\\x02\\x7f\\x12\\x08\\x70\\x00\",\n        \"Ĩ\": b\"\\x4a\\x49\\x7a\\x49\\x48\\x00\",\n        \"ĩ\": b\"\\x02\\x49\\x7a\\x41\\x00\\x00\",\n        \"Ī\": b\"\\x44\\x45\\x7d\\x45\\x44\\x00\",\n        \"ī\": b\"\\x00\\x45\\x7d\\x41\\x00\\x00\",\n        \"Ĭ\": b\"\\x44\\x45\\x7e\\x45\\x44\\x00\",\n        \"ĭ\": b\"\\x00\\x45\\x7e\\x41\\x00\\x00\",\n        \"Į\": b\"\\x00\\x41\\x7f\\xc1\\x00\\x00\",\n        \"į\": b\"\\x00\\x44\\x7d\\xc0\\x00\\x00\",\n        \"İ\": b\"\\x44\\x44\\x7d\\x44\\x44\\x00\",\n        \"ı\": b\"\\x00\\x44\\x7c\\x40\\x00\\x00\",\n        \"ĳ\": b\"\\x44\\x7d\\x40\\x44\\x3d\\x00\",\n        \"Ĵ\": b\"\\x20\\x40\\x46\\x3d\\x06\\x00\",\n        \"ĵ\": b\"\\x00\\x20\\x46\\x3d\\x02\\x00\",\n        \"Ķ\": b\"\\x1f\\x44\\x2a\\x11\\x00\\x00\",\n        \"ķ\": b\"\\x1f\\x44\\x2a\\x11\\x00\\x00\",\n        \"ĸ\": b\"\\x7c\\x10\\x28\\x44\\x00\\x00\",\n        \"Ĺ\": b\"\\x7c\\x40\\x42\\x41\\x40\\x00\",\n        \"Ľ\": b\"\\x7c\\x40\\x42\\x41\\x40\\x00\",\n        \"ĺ\": b\"\\x00\\x44\\x7e\\x41\\x00\\x00\",\n        \"Ļ\": b\"\\x1f\\x50\\x30\\x10\\x10\\x00\",\n        \"ļ\": b\"\\x00\\x51\\x3f\\x10\\x00\\x00\",\n        \"ľ\": b\"\\x00\\x41\\x7f\\x40\\x03\\x00\",\n        \"Ŀ\": b\"\\x7f\\x40\\x40\\x48\\x40\\x00\",\n        \"ŀ\": b\"\\x00\\x41\\x7f\\x40\\x08\\x00\",\n        \"Ł\": b\"\\x10\\x7F\\x48\\x44\\x40\\x00\",\n        \"ł\": b\"\\x00\\x49\\x7F\\x44\\x00\\x00\",\n        \"Ń\": b\"\\x7c\\x08\\x12\\x21\\x7c\\x00\",\n        \"ń\": b\"\\x7c\\x08\\x06\\x05\\x78\\x00\",\n        \"Ņ\": b\"\\x1f\\x42\\x24\\x08\\x1f\\x00\",\n        \"ņ\": b\"\\x1f\\x42\\x21\\x01\\x1e\\x00\",\n        \"Ň\": b\"\\x7c\\x09\\x12\\x21\\x7c\\x00\",\n        \"ň\": b\"\\x7c\\x09\\x06\\x05\\x78\\x00\",\n        \"Ō\": b\"\\x38\\x45\\x45\\x45\\x38\\x00\",\n        \"ō\": b\"\\x38\\x45\\x45\\x45\\x38\\x00\",\n        \"Ŏ\": b\"\\x38\\x45\\x46\\x45\\x38\\x00\",\n        \"ŏ\": b\"\\x38\\x45\\x46\\x45\\x38\\x00\",\n        \"ő\": b\"\\x38\\x45\\x44\\x45\\x38\\x00\",\n        \"Œ\": b\"\\x3e\\x41\\x7f\\x49\\x49\\x00\",\n        \"œ\": b\"\\x38\\x44\\x7c\\x54\\x58\\x00\",\n        \"Ŕ\": b\"\\x7c\\x14\\x16\\x15\\x68\\x00\",\n        \"ŕ\": b\"\\x7c\\x08\\x06\\x05\\x08\\x00\",\n        \"Ŗ\": b\"\\x1f\\x45\\x25\\x05\\x1a\\x00\",\n        \"ŗ\": b\"\\x1f\\x42\\x21\\x01\\x02\\x00\",\n        \"Ř\": b\"\\x7c\\x15\\x16\\x15\\x68\\x00\",\n        \"ř\": b\"\\x7c\\x09\\x06\\x05\\x08\\x00\",\n        \"Ś\": b\"\\x08\\x54\\x56\\x55\\x20\\x00\",\n        \"ś\": b\"\\x48\\x54\\x56\\x55\\x24\\x00\",\n        \"Ŝ\": b\"\\x08\\x56\\x55\\x56\\x20\\x00\",\n        \"ŝ\": b\"\\x48\\x56\\x55\\x56\\x24\\x00\",\n        \"Ş\": b\"\\x02\\x55\\x35\\x15\\x08\\x00\",\n        \"ş\": b\"\\x12\\x55\\x35\\x15\\x09\\x00\",\n        \"Š\": b\"\\x08\\x55\\x56\\x55\\x20\\x00\",\n        \"š\": b\"\\x48\\x55\\x56\\x55\\x24\\x00\",\n        \"Ţ\": b\"\\x01\\x41\\x3f\\x01\\x01\\x00\",\n        \"ţ\": b\"\\x02\\x4f\\x32\\x10\\x08\\x00\",\n        \"Ť\": b\"\\x04\\x05\\x7e\\x05\\x04\\x00\",\n        \"ť\": b\"\\x04\\x3e\\x44\\x40\\x23\\x00\",\n        \"Ŧ\": b\"\\x01\\x09\\x7f\\x09\\x01\\x00\",\n        \"ŧ\": b\"\\x14\\x3e\\x54\\x40\\x20\\x00\",\n        \"Ū\": b\"\\x3c\\x41\\x41\\x41\\x3c\\x00\",\n        \"ū\": b\"\\x3c\\x41\\x41\\x21\\x7c\\x00\",\n        \"Ŭ\": b\"\\x3c\\x41\\x42\\x41\\x3c\\x00\",\n        \"ŭ\": b\"\\x3c\\x41\\x41\\x21\\x7c\\x00\",\n        \"Ů\": b\"\\x3c\\x40\\x41\\x40\\x3c\\x00\",\n        \"ů\": b\"\\x3c\\x41\\x41\\x21\\x7c\\x00\",\n        \"Ŵ\": b\"\\x3c\\x42\\x39\\x42\\x3c\\x00\",\n        \"ŵ\": b\"\\x3c\\x42\\x31\\x42\\x3c\\x00\",\n        \"Ŷ\": b\"\\x04\\x0a\\x71\\x0a\\x04\\x00\",\n        \"ŷ\": b\"\\x04\\x4a\\x31\\x12\\x0c\\x00\",\n        \"Ÿ\": b\"\\x04\\x09\\x70\\x09\\x04\\x00\",\n        \"Ź\": b\"\\x44\\x64\\x56\\x4d\\x44\\x00\",\n        \"ź\": b\"\\x44\\x64\\x56\\x4d\\x44\\x00\",\n        \"Ż\": b\"\\x44\\x64\\x55\\x4c\\x44\\x00\",\n        \"ż\": b\"\\x44\\x64\\x55\\x4c\\x44\\x00\",\n        \"Ž\": b\"\\x44\\x65\\x56\\x4d\\x44\\x00\",\n        \"ž\": b\"\\x44\\x65\\x56\\x4d\\x44\\x00\",\n        \"ſ\": b\"\\x00\\x04\\x7e\\x01\\x01\\x00\",\n    }\n    return font\n\n\ndef get_small_font_map_greek() -> Dict[str, bytes]:\n    font = {\n        # U+0370..U+03FF Greek and Coptic\n        \"Έ\": b\"\\x03\\x7F\\x49\\x49\\x49\\x41\",\n        \"Α\": b\"\\x7e\\x09\\x09\\x09\\x7e\\x00\",\n        \"Β\": b\"\\x7f\\x49\\x49\\x49\\x36\\x00\",\n        \"Γ\": b\"\\x7f\\x01\\x01\\x01\\x01\\x00\",\n        \"Δ\": b\"\\x70\\x4C\\x43\\x4C\\x70\\x00\",\n        \"Ε\": b\"\\x7f\\x49\\x49\\x49\\x41\\x00\",\n        \"Ζ\": b\"\\x61\\x51\\x49\\x45\\x43\\x00\",\n        \"Η\": b\"\\x7f\\x08\\x08\\x08\\x7f\\x00\",\n        \"Θ\": b\"\\x3E\\x49\\x49\\x49\\x3E\\x00\",\n        \"Ι\": b\"\\x00\\x41\\x7f\\x41\\x00\\x00\",\n        \"Κ\": b\"\\x7f\\x08\\x14\\x22\\x41\\x00\",\n        \"Λ\": b\"\\x70\\x0C\\x03\\x0C\\x70\\x00\",\n        \"Μ\": b\"\\x7f\\x02\\x0c\\x02\\x7f\\x00\",\n        \"Ν\": b\"\\x7f\\x04\\x08\\x10\\x7f\\x00\",\n        \"Ξ\": b\"\\x41\\x49\\x49\\x49\\x41\\x00\",\n        \"Ο\": b\"\\x3e\\x41\\x41\\x41\\x3e\\x00\",\n        \"Π\": b\"\\x7F\\x01\\x01\\x01\\x7F\\x00\",\n        \"Ρ\": b\"\\x7f\\x09\\x09\\x09\\x06\\x00\",\n        \"Σ\": b\"\\x63\\x55\\x49\\x41\\x41\\x00\",\n        \"Τ\": b\"\\x01\\x01\\x7f\\x01\\x01\\x00\",\n        \"Υ\": b\"\\x07\\x08\\x70\\x08\\x07\\x00\",\n        \"Φ\": b\"\\x0c\\x12\\x7f\\x12\\x0c\\x00\",\n        \"Χ\": b\"\\x63\\x14\\x08\\x14\\x63\\x00\",\n        \"Ψ\": b\"\\x07\\x08\\x7F\\x08\\x07\\x00\",\n        \"Ω\": b\"\\x5E\\x61\\x01\\x61\\x5E\\x00\",\n        \"ά\": b\"\\x38\\x45\\x45\\x38\\x7C\\x40\",\n        \"έ\": b\"\\x28\\x55\\x55\\x44\\x28\\x00\",\n        \"ή\": b\"\\x04\\x79\\x05\\x04\\xF8\\x00\",\n        \"ί\": b\"\\x04\\x3D\\x41\\x40\\x00\\x00\",\n        \"α\": b\"\\x38\\x44\\x44\\x38\\x7C\\x40\",\n        \"β\": b\"\\x7E\\x21\\x25\\x25\\x1A\\x00\",\n        \"γ\": b\"\\x0C\\x10\\x60\\x10\\x0C\\x00\",\n        \"δ\": b\"\\x30\\x4B\\x45\\x49\\x30\\x00\",\n        \"ε\": b\"\\x28\\x54\\x54\\x44\\x28\\x00\",\n        \"ζ\": b\"\\x00\\x31\\x49\\x45\\xC3\\x00\",\n        \"η\": b\"\\x04\\x78\\x04\\x04\\xF8\\x00\",\n        \"θ\": b\"\\x3E\\x49\\x49\\x49\\x3E\\x00\",\n        \"ι\": b\"\\x04\\x3C\\x40\\x40\\x00\\x00\",\n        \"κ\": b\"\\x00\\x7C\\x10\\x28\\x44\\x00\",\n        \"λ\": b\"\\x70\\x0A\\x04\\x08\\x70\\x00\",\n        \"μ\": b\"\\xFC\\x10\\x10\\x3C\\x20\\x00\",\n        \"ν\": b\"\\x1C\\x20\\x40\\x20\\x1C\\x00\",\n        \"ξ\": b\"\\x36\\x49\\x49\\xC9\\x00\\x00\",\n        \"ο\": b\"\\x38\\x44\\x44\\x44\\x38\\x00\",\n        \"π\": b\"\\x04\\x7C\\x04\\x7C\\x44\\x00\",\n        \"ρ\": b\"\\xF8\\x24\\x24\\x24\\x18\\x00\",\n        \"ς\": b\"\\x38\\x44\\x44\\xC4\\x04\\x00\",\n        \"σ\": b\"\\x38\\x44\\x44\\x44\\x3C\\x04\",\n        \"τ\": b\"\\x04\\x3C\\x44\\x44\\x00\\x00\",\n        \"υ\": b\"\\x3C\\x40\\x40\\x40\\x3C\\x00\",\n        \"φ\": b\"\\x18\\x24\\x7e\\x24\\x18\\x00\",\n        \"χ\": b\"\\x44\\x24\\x38\\x48\\x44\\x00\",\n        \"ψ\": b\"\\x1C\\x20\\x7C\\x20\\x1C\\x00\",\n        \"ω\": b\"\\x38\\x44\\x30\\x44\\x38\\x00\",\n        \"ό\": b\"\\x38\\x45\\x45\\x44\\x38\\x00\",\n        \"ύ\": b\"\\x3C\\x41\\x41\\x40\\x3C\\x00\",\n        \"ώ\": b\"\\x38\\x45\\x31\\x44\\x38\\x00\",\n    }\n    return font\n\n\ndef get_small_font_map_cyrillic() -> Dict[str, bytes]:\n    font = {\n        # U+0400..U+04FF Cyrillic\n        \"Ѐ\": b\"\\x7c\\x55\\x56\\x44\\x44\\x00\",\n        \"Ё\": b\"\\x7c\\x55\\x54\\x45\\x44\\x00\",\n        \"Ђ\": b\"\\x01\\x7f\\x09\\x49\\x31\\x00\",\n        \"Ѓ\": b\"\\x7c\\x04\\x06\\x05\\x04\\x00\",\n        \"Є\": b\"\\x3e\\x49\\x49\\x41\\x00\\x00\",\n        \"Ѕ\": b\"\\x06\\x49\\x49\\x49\\x30\\x00\",\n        \"І\": b\"\\x41\\x41\\x7f\\x41\\x41\\x00\",\n        \"Ї\": b\"\\x44\\x45\\x7c\\x45\\x44\\x00\",\n        \"Ј\": b\"\\x20\\x40\\x41\\x3f\\x01\\x00\",\n        \"Љ\": b\"\\x7f\\x01\\x7f\\x48\\x30\\x00\",\n        \"Њ\": b\"\\x7f\\x08\\x7f\\x48\\x30\\x00\",\n        \"Ћ\": b\"\\x01\\x01\\x7f\\x09\\x71\\x00\",\n        \"Ќ\": b\"\\x7c\\x12\\x29\\x44\\x00\\x00\",\n        \"Ѝ\": b\"\\x7c\\x21\\x12\\x08\\x7c\\x00\",\n        \"Ў\": b\"\\x44\\x49\\x32\\x09\\x04\\x00\",\n        \"Џ\": b\"\\x3f\\x20\\x60\\x20\\x3f\\x00\",\n        \"А\": b\"\\x7e\\x09\\x09\\x09\\x7e\\x00\",\n        \"Б\": b\"\\x7f\\x49\\x49\\x49\\x31\\x00\",\n        \"В\": b\"\\x7f\\x49\\x49\\x49\\x36\\x00\",\n        \"Г\": b\"\\x7f\\x01\\x01\\x01\\x01\\x00\",\n        \"Ґ\": b\"\\x7E\\x02\\x02\\x02\\x03\\x00\",\n        \"Д\": b\"\\x60\\x3f\\x21\\x3f\\x60\\x00\",\n        \"Е\": b\"\\x7f\\x49\\x49\\x49\\x41\\x00\",\n        \"Ж\": b\"\\x77\\x08\\x7f\\x08\\x77\\x00\",\n        \"З\": b\"\\x00\\x41\\x49\\x49\\x36\\x00\",\n        \"И\": b\"\\x7f\\x10\\x08\\x04\\x7f\\x00\",\n        \"Й\": b\"\\x7c\\x21\\x12\\x09\\x7c\\x00\",\n        \"К\": b\"\\x7f\\x08\\x14\\x22\\x41\\x00\",\n        \"Л\": b\"\\x40\\x3f\\x01\\x01\\x7f\\x00\",\n        \"М\": b\"\\x7f\\x02\\x04\\x02\\x7f\\x00\",\n        \"Н\": b\"\\x7f\\x08\\x08\\x08\\x7f\\x00\",\n        \"О\": b\"\\x3e\\x41\\x41\\x41\\x3e\\x00\",\n        \"П\": b\"\\x7f\\x01\\x01\\x01\\x7f\\x00\",\n        \"Р\": b\"\\x7f\\x09\\x09\\x09\\x06\\x00\",\n        \"С\": b\"\\x3e\\x41\\x41\\x41\\x22\\x00\",\n        \"Т\": b\"\\x01\\x01\\x7f\\x01\\x01\\x00\",\n        \"У\": b\"\\x47\\x48\\x30\\x08\\x07\\x00\",\n        \"Ф\": b\"\\x0c\\x12\\x7f\\x12\\x0c\\x00\",\n        \"Х\": b\"\\x63\\x14\\x08\\x14\\x63\\x00\",\n        \"Ц\": b\"\\x3f\\x20\\x20\\x3f\\x60\\x00\",\n        \"Ч\": b\"\\x07\\x08\\x08\\x08\\x7f\\x00\",\n        \"Ш\": b\"\\x7F\\x40\\x7F\\x40\\x7F\\x00\",\n        \"Щ\": b\"\\x7F\\x40\\x7F\\x40\\x7F\\xC0\",\n        \"Ъ\": b\"\\x01\\x7f\\x48\\x48\\x30\\x00\",\n        \"Ы\": b\"\\x7f\\x48\\x30\\x00\\x7f\\x00\",\n        \"Ь\": b\"\\x00\\x7f\\x48\\x48\\x30\\x00\",\n        \"Э\": b\"\\x22\\x49\\x49\\x2a\\x1c\\x00\",\n        \"Ю\": b\"\\x7f\\x08\\x3e\\x41\\x3e\\x00\",\n        \"Я\": b\"\\x46\\x29\\x19\\x09\\x7f\\x00\",\n        \"а\": b\"\\x20\\x54\\x54\\x54\\x78\\x00\",\n        \"б\": b\"\\x3c\\x4a\\x4a\\x4a\\x30\\x00\",\n        \"в\": b\"\\x7c\\x54\\x54\\x54\\x28\\x00\",\n        \"г\": b\"\\x7c\\x04\\x04\\x04\\x04\\x00\",\n        \"ґ\": b\"\\x7C\\x04\\x04\\x04\\x06\\x00\",\n        \"д\": b\"\\x40\\x3c\\x24\\x3c\\x60\\x00\",\n        \"е\": b\"\\x38\\x54\\x54\\x54\\x18\\x00\",\n        \"ж\": b\"\\x6c\\x10\\x7c\\x10\\x6c\\x00\",\n        \"з\": b\"\\x28\\x44\\x54\\x54\\x28\\x00\",\n        \"и\": b\"\\x7c\\x20\\x10\\x08\\x7c\\x00\",\n        \"й\": b\"\\x7c\\x21\\x12\\x09\\x7c\\x00\",\n        \"к\": b\"\\x7c\\x10\\x28\\x44\\x00\\x00\",\n        \"л\": b\"\\x40\\x3c\\x04\\x04\\x7c\\x00\",\n        \"м\": b\"\\x7c\\x08\\x10\\x08\\x7c\\x00\",\n        \"н\": b\"\\x7c\\x10\\x10\\x10\\x7c\\x00\",\n        \"о\": b\"\\x38\\x44\\x44\\x44\\x38\\x00\",\n        \"п\": b\"\\x7c\\x04\\x04\\x04\\x7c\\x00\",\n        \"р\": b\"\\x7c\\x14\\x14\\x14\\x08\\x00\",\n        \"с\": b\"\\x38\\x44\\x44\\x44\\x20\\x00\",\n        \"т\": b\"\\x04\\x04\\x7c\\x04\\x04\\x00\",\n        \"у\": b\"\\x4c\\x50\\x20\\x10\\x0c\\x00\",\n        \"ф\": b\"\\x18\\x24\\x7e\\x24\\x18\\x00\",\n        \"х\": b\"\\x44\\x28\\x10\\x28\\x44\\x00\",\n        \"ц\": b\"\\x3c\\x20\\x20\\x3c\\x60\\x00\",\n        \"ч\": b\"\\x0c\\x10\\x10\\x10\\x7c\\x00\",\n        \"ш\": b\"\\x7C\\x40\\x7C\\x40\\x7C\\x00\",\n        \"щ\": b\"\\x7C\\x40\\x7C\\x40\\xFC\\x00\",\n        \"ъ\": b\"\\x04\\x7c\\x50\\x20\\x00\\x00\",\n        \"ы\": b\"\\x7c\\x50\\x20\\x00\\x7c\\x00\",\n        \"ь\": b\"\\x00\\x7c\\x50\\x20\\x00\\x00\",\n        \"э\": b\"\\x28\\x44\\x54\\x54\\x28\\x00\",\n        \"ю\": b\"\\x7c\\x10\\x38\\x44\\x38\\x00\",\n        \"я\": b\"\\x48\\x34\\x14\\x14\\x7c\\x00\",\n        \"ѐ\": b\"\\x38\\x55\\x56\\x54\\x08\\x00\",\n        \"ё\": b\"\\x38\\x55\\x54\\x55\\x08\\x00\",\n        \"ђ\": b\"\\x02\\x3f\\x12\\x48\\x30\\x00\",\n        \"ѓ\": b\"\\x7c\\x04\\x06\\x05\\x04\\x00\",\n        \"є\": b\"\\x38\\x54\\x54\\x44\\x28\\x00\",\n        \"ѕ\": b\"\\x08\\x54\\x54\\x54\\x20\\x00\",\n        \"і\": b\"\\x00\\x44\\x7d\\x40\\x00\\x00\",\n        \"ї\": b\"\\x00\\x45\\x7c\\x41\\x00\\x00\",\n        \"ј\": b\"\\x20\\x40\\x44\\x3d\\x00\\x00\",\n        \"љ\": b\"\\x7c\\x04\\x7c\\x50\\x20\\x00\",\n        \"њ\": b\"\\x7c\\x10\\x7c\\x50\\x20\\x00\",\n        \"ћ\": b\"\\x04\\x7e\\x14\\x10\\x60\\x00\",\n        \"ќ\": b\"\\x7c\\x12\\x29\\x44\\x00\\x00\",\n        \"ѝ\": b\"\\x7c\\x21\\x12\\x08\\x7c\\x00\",\n        \"ў\": b\"\\x4c\\x51\\x22\\x11\\x0c\\x00\",\n        \"џ\": b\"\\x3c\\x20\\x60\\x20\\x3c\\x00\",\n    }\n    return font\n\n\nNAME_ASCII_BASIC: Final = \"ascii_basic\"\nNAME_LATIN_EXTENDED: Final = \"latin_extended\"\nNAME_CYRILLIC: Final = \"cyrillic\"\nNAME_CJK: Final = \"cjk\"\nNAME_GREEK: Final = \"greek\"\n\nALL_FONTS = [\n    NAME_ASCII_BASIC,\n    NAME_LATIN_EXTENDED,\n    NAME_CYRILLIC,\n    NAME_GREEK,\n    NAME_CJK,  # CJK must come last\n]\nALL_PRE_RENDERED_FONTS = [\n    NAME_ASCII_BASIC,\n    NAME_LATIN_EXTENDED,\n    NAME_CYRILLIC,\n    NAME_GREEK,\n]\n\n\ndef get_font_maps_for_name(\n    font_name: str,\n) -> Tuple[Dict[str, bytes], Dict[str, bytes]]:\n    if font_name == NAME_ASCII_BASIC:\n        return get_font_map_ascii_basic(), get_small_font_map_ascii_basic()\n    elif font_name == NAME_LATIN_EXTENDED:\n        return get_font_map_latin_extended(), get_small_font_map_latin_extended()\n    elif font_name == NAME_CYRILLIC:\n        return get_font_map_cyrillic(), get_small_font_map_cyrillic()\n    elif font_name == NAME_GREEK:\n        return get_font_map_greek(), get_small_font_map_greek()\n    else:\n        raise ValueError(\"Invalid font name\")\n"
  },
  {
    "path": "Translations/gen_menu_docs.py",
    "content": "#!/usr/bin/env python3\n\nimport json\nimport logging\nimport os\nimport sys\nfrom pathlib import Path\n\n\nlogging.basicConfig(stream=sys.stdout, level=logging.DEBUG)\n\n\nHERE = Path(__file__).resolve().parent\nTRANSLATION_DEFS_PATH = os.path.join(HERE, \"translations_definitions.json\")\nENGLISH_TRANSLATION_PATH = os.path.join(HERE, \"translation_EN.json\")\nMENU_DOCS_FILE_PATH = os.path.join(HERE.parent, \"Documentation/Settings.md\")\n\n# Loading a single JSON file\n\n\ndef load_json(filename: str, skip_first_line: bool) -> dict:\n    with open(filename) as f:\n        if skip_first_line:\n            f.readline()\n        return json.loads(f.read())\n\n\ndef write_header(filep):\n    \"\"\"\n    Writes the markdown constant header area out\n    \"\"\"\n    constant_header = \"\"\"<!-- This is an automatically generated file. DO NOT EDIT. Edit gen_menu_docs.py instead -->\n\n# IronOS Settings Menu\n\nThe below breaks down the menu's and what each setting means.\n    \"\"\"\n    filep.write(constant_header)\n\n\ndef write_menu_categories(filep, defs, translation_data):\n    \"\"\"\n    Writes the menu categories section out\n    \"\"\"\n    menu_cat_pretense = \"\"\"\n## Menu Categories\n\nIn the menu there are a few main categories that are used to keep the list manageable.\n\"\"\"\n    filep.write(menu_cat_pretense)\n    for menu in defs.get(\"menuGroups\", {}):\n        menu_id = menu.get(\"id\", \"\")\n        entry = translation_data.get(\"menuGroups\", {}).get(menu_id, \"\")\n        name = \" \".join(entry.get(\"displayText\").split(\"\\n\"))\n        desc = menu.get(\"description\", \"\")\n        section = f\"\"\"\n### Category: {name}\n\n{desc}\n\"\"\"\n        filep.write(section)\n\n\ndef write_menu_entries(filep, defs, translation_data):\n    \"\"\"\n    Writes the menu entries section out\n    \"\"\"\n\n    menu_entries_pretense = \"\"\"\n## Settings\n\nThese are all of the settings possible in the menu.\n**Not all settings are visible for all devices.**\nFor example, the TS100 does not have USB-PD settings.\n\nWhen using the device, if unsure you can pause (press nothing) on a setting and after a short delay help text will scroll across the screen.\nThis is the \"on device help text\".\n\"\"\"\n    filep.write(menu_entries_pretense)\n    for menu in defs.get(\"menuOptions\", {}):\n        menu_id = menu.get(\"id\", \"\")\n        entry = translation_data.get(\"menuOptions\", {}).get(menu_id, \"\")\n        name = \" \".join(entry.get(\"displayText\").split(\"\\n\"))\n        desc = menu.get(\"description\", \"\")\n        on_device_desc = entry.get(\"description\", \"\")\n        section = f\"\"\"\n### Setting: {name}\n\n{desc}\n\nOn device help text:\n\n{on_device_desc}\n\"\"\"\n        filep.write(section)\n\n\ndef main() -> None:\n    json_dir = HERE\n    print(json_dir)\n    logging.info(\"Loading translation definitions\")\n    defs = load_json(TRANSLATION_DEFS_PATH, False)\n    eng_translation = load_json(ENGLISH_TRANSLATION_PATH, False)\n    with open(MENU_DOCS_FILE_PATH, \"w\") as outputf:\n        write_header(outputf)\n        write_menu_categories(outputf, defs, eng_translation)\n        write_menu_entries(outputf, defs, eng_translation)\n    logging.info(\"Done\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "Translations/make_translation.py",
    "content": "#!/usr/bin/env python3\n\nimport argparse\nimport functools\nimport json\nimport hashlib\nimport logging\nimport os\nimport pickle\nimport re\nimport subprocess\nimport sys\nimport time\nfrom pathlib import Path\nfrom typing import Dict, List, Optional, TextIO, Tuple, Union\nfrom dataclasses import dataclass\n\nfrom bdflib import reader as bdfreader\nfrom bdflib.model import Font, Glyph\n\nimport font_tables\nimport brieflz\nimport objcopy\n\nlogging.basicConfig(stream=sys.stdout, level=logging.DEBUG)\n\nHERE = Path(__file__).resolve().parent\n\n\n@functools.lru_cache(maxsize=None)\ndef cjk_font() -> Font:\n    with open(os.path.join(HERE, \"wqy-bitmapsong/wenquanyi_9pt.bdf\"), \"rb\") as f:\n        return bdfreader.read_bdf(f)\n\n\n# Loading a single JSON file\ndef load_json(filename: str) -> dict:\n    with open(filename) as f:\n        return json.loads(f.read())\n\n\ndef get_language_unqiue_id(language_ascii_name: str):\n    \"\"\"\n    Given a language code, it will return a unique (enough) uint16_t id code\n    When we have a collision here we can tweak this, but language list should be fairly stable from now on\n    \"\"\"\n    return (\n        int(hashlib.sha1(language_ascii_name.encode(\"utf-8\")).hexdigest(), 16) % 0xFFFF\n    )\n\n\ndef read_translation(json_root: Union[str, Path], lang_code: str) -> dict:\n    filename = f\"translation_{lang_code}.json\"\n\n    file_with_path = os.path.join(json_root, filename)\n\n    try:\n        lang = load_json(file_with_path)\n    except json.decoder.JSONDecodeError as e:\n        logging.error(f\"Failed to decode {filename}\")\n        logging.exception(str(e))\n        sys.exit(2)\n\n    validate_langcode_matches_content(filename, lang)\n\n    return lang\n\n\ndef filter_translation(lang: dict, defs: dict, macros: frozenset):\n    def check_excluded(record):\n        if \"include\" in record and not any(m in macros for m in record[\"include\"]):\n            return True\n\n        if \"exclude\" in record and any(m in macros for m in record[\"exclude\"]):\n            return True\n\n        return False\n\n    for category in (\"menuOptions\", \"menuGroups\", \"menuValues\"):\n        for _, record in enumerate(defs[category]):\n            if check_excluded(record):\n                lang[category][record[\"id\"]][\"displayText\"] = \"\"\n                lang[category][record[\"id\"]][\"description\"] = \"\"\n\n    for _, record in enumerate(defs[\"messagesWarn\"]):\n        if check_excluded(record):\n            lang[\"messagesWarn\"][record[\"id\"]][\"message\"] = \"\"\n\n    return lang\n\n\ndef validate_langcode_matches_content(filename: str, content: dict) -> None:\n    # Extract lang code from file name\n    lang_code = filename[12:-5].upper()\n    # ...and the one specified in the JSON file...\n    try:\n        lang_code_from_json = content[\"languageCode\"]\n    except KeyError:\n        lang_code_from_json = \"(missing)\"\n\n    # ...cause they should be the same!\n    if lang_code != lang_code_from_json:\n        raise ValueError(\n            f\"Invalid languageCode {lang_code_from_json} in file {filename}\"\n        )\n\n\ndef write_start(f: TextIO):\n    f.write(\n        \"// WARNING: THIS FILE WAS AUTO GENERATED BY make_translation.py. PLEASE DO NOT EDIT.\\n\"\n    )\n    f.write(\"\\n\")\n    f.write('#include \"Translation.h\"\\n')\n\n\ndef get_constants() -> List[Tuple[str, str]]:\n    # Extra constants that are used in the firmware that are shared across all languages\n    return [\n        (\"LargeSymbolPlus\", \"+\"),\n        (\"SmallSymbolPlus\", \"+\"),\n        (\"LargeSymbolMinus\", \"-\"),\n        (\"SmallSymbolMinus\", \"-\"),\n        (\"LargeSymbolSpace\", \" \"),\n        (\"SmallSymbolSpace\", \" \"),\n        (\"LargeSymbolDot\", \".\"),\n        (\"SmallSymbolDot\", \".\"),\n        (\"SmallSymbolSlash\", \"/\"),\n        (\"SmallSymbolColon\", \":\"),\n        (\"LargeSymbolDegC\", \"C\"),\n        (\"SmallSymbolDegC\", \"C\"),\n        (\"LargeSymbolDegF\", \"F\"),\n        (\"SmallSymbolDegF\", \"F\"),\n        (\"LargeSymbolMinutes\", \"m\"),\n        (\"SmallSymbolMinutes\", \"m\"),\n        (\"LargeSymbolSeconds\", \"s\"),\n        (\"SmallSymbolSeconds\", \"s\"),\n        (\"LargeSymbolWatts\", \"W\"),\n        (\"SmallSymbolWatts\", \"W\"),\n        (\"LargeSymbolVolts\", \"V\"),\n        (\"SmallSymbolVolts\", \"V\"),\n        (\"SmallSymbolAmps\", \"A\"),\n        (\"LargeSymbolDC\", \"DC\"),\n        (\"LargeSymbolCellCount\", \"S\"),\n        (\"SmallSymbolVersionNumber\", read_version()),\n        (\"SmallSymbolPDDebug\", \"PD Debug\"),\n        (\"SmallSymbolState\", \"State\"),\n        (\"SmallSymbolNoVBus\", \"No VBus\"),\n        (\"SmallSymbolVBus\", \"VBus\"),\n        (\"LargeSymbolSleep\", \"Zzz \"),\n    ]\n\n\ndef get_debug_menu() -> List[str]:\n    return [\n        time.strftime(\n            \"%Y%m%d %H%M%S\",\n            time.gmtime(int(os.environ.get(\"SOURCE_DATE_EPOCH\", time.time()))),\n        ),\n        \"ID \",\n        \"ACC   \",\n        \"PWR   \",\n        \"Vin        \",\n        \"Tip C  \",\n        \"Han C  \",\n        \"Max C  \",\n        \"UpTime \",\n        \"Move   \",\n        \"Tip Res\",\n        \"Tip R  \",\n        \"Tip O  \",\n        \"HW G   \",\n        \"HW M   \",\n        \"HW P   \",\n        \"Hall   \",\n    ]\n\n\ndef get_accel_names_list() -> List[str]:\n    return [\n        \"Scanning\",\n        \"None\",\n        \"MMA8652FC\",\n        \"LIS2DH12\",\n        \"BMA223\",\n        \"MSA301\",\n        \"SC7A20\",\n        \"GPIO\",\n        \"LIS2 CLONE\",\n    ]\n\n\ndef get_power_source_list() -> List[str]:\n    return [\n        \"DC\",\n        \"QC\",\n        \"PV:PDwVBus\",\n        \"PD:No VBus\",\n    ]\n\n\ndef test_is_small_font(msg: str) -> bool:\n    return \"\\n\" in msg and msg[0] != \"\\n\"\n\n\ndef get_letter_counts(defs: dict, lang: dict, build_version: str) -> Dict:\n    \"\"\"From the source definitions, language file and build version; calculates the ranked symbol list\n\n    Args:\n        defs (dict): Definitions\n        lang (dict): Language lookup\n        build_version (str): The build version id to ensure its letters are included\n\n    Returns:\n        Dict: _description_\n    \"\"\"\n    big_font_messages = []\n    small_font_messages = []\n\n    # iterate over all strings\n\n    obj = lang[\"messagesWarn\"]\n    for mod in defs[\"messagesWarn\"]:\n        eid = mod[\"id\"]\n        msg = obj[eid][\"message\"]\n        if test_is_small_font(msg):\n            small_font_messages.append(msg)\n        else:\n            big_font_messages.append(msg)\n\n    obj = lang[\"characters\"]\n\n    for mod in defs[\"characters\"]:\n        eid = mod[\"id\"]\n        msg = obj[eid]\n        if test_is_small_font(msg):\n            small_font_messages.append(msg)\n        else:\n            big_font_messages.append(msg)\n\n    obj = lang[\"menuOptions\"]\n    for mod in defs[\"menuOptions\"]:\n        eid = mod[\"id\"]\n        msg = obj[eid][\"displayText\"]\n        if test_is_small_font(msg):\n            small_font_messages.append(msg)\n        else:\n            big_font_messages.append(msg)\n\n    obj = lang[\"menuOptions\"]\n    for mod in defs[\"menuOptions\"]:\n        eid = mod[\"id\"]\n        msg = obj[eid][\"description\"]\n        big_font_messages.append(msg)\n\n    obj = lang[\"menuValues\"]\n    for mod in defs[\"menuValues\"]:\n        eid = mod[\"id\"]\n        msg = obj[eid][\"displayText\"]\n        if test_is_small_font(msg):\n            small_font_messages.append(msg)\n        else:\n            big_font_messages.append(msg)\n\n    obj = lang[\"menuGroups\"]\n    for mod in defs[\"menuGroups\"]:\n        eid = mod[\"id\"]\n        msg = obj[eid][\"displayText\"]\n        if test_is_small_font(msg):\n            small_font_messages.append(msg)\n        else:\n            big_font_messages.append(msg)\n\n    obj = lang[\"menuGroups\"]\n    for mod in defs[\"menuGroups\"]:\n        eid = mod[\"id\"]\n        msg = obj[eid][\"description\"]\n        big_font_messages.append(msg)\n\n    constants = get_constants()\n    for x in constants:\n        if x[0].startswith(\"Small\"):\n            small_font_messages.append(x[1])\n        else:\n            big_font_messages.append(x[1])\n\n    small_font_messages.extend(get_debug_menu())\n    small_font_messages.extend(get_accel_names_list())\n    small_font_messages.extend(get_power_source_list())\n\n    # collapse all strings down into the composite letters and store totals for these\n    # Doing this seperately for small and big font\n    def sort_and_count(list_in: List[str]):\n        symbol_counts: dict[str, int] = {}\n        for line in list_in:\n            line = line.replace(\"\\n\", \"\").replace(\"\\r\", \"\")\n            line = line.replace(\"\\\\n\", \"\").replace(\"\\\\r\", \"\")\n            if line:\n                for letter in line:\n                    symbol_counts[letter] = symbol_counts.get(letter, 0) + 1\n        # swap to Big -> little sort order\n\n        return symbol_counts\n\n    small_symbol_counts = sort_and_count(small_font_messages)\n    big_symbol_counts = sort_and_count(big_font_messages)\n\n    return {\n        \"smallFontCounts\": small_symbol_counts,\n        \"bigFontCounts\": big_symbol_counts,\n    }\n\n\ndef convert_letter_counts_to_ranked_symbols_with_forced(\n    symbol_dict: Dict[str, int]\n) -> List[str]:\n    # Add in forced symbols first\n    ranked_symbols = []\n    ranked_symbols.extend(get_forced_first_symbols())\n    # Now add in all the others based on letter count\n    symbols_by_occurrence = [\n        x[0]\n        for x in sorted(\n            symbol_dict.items(), key=lambda kv: (kv[1], kv[0]), reverse=True\n        )\n    ]\n    ranked_symbols.extend([x for x in symbols_by_occurrence if x not in ranked_symbols])\n    return ranked_symbols\n\n\ndef merge_letter_count_info(a: Dict, b: Dict) -> Dict:\n    \"\"\"Merge the results from get_letter_counts\n    Combining the ranked symbols lists\n\n    Args:\n        a (Dict): get_letter_counts\n        b (Dict): get_letter_counts\n\n    Returns:\n        Dict: get_letter_counts\n    \"\"\"\n    smallFontCounts = {}\n    bigFontCounts = {}\n    for x in a.get(\"smallFontCounts\", []):\n        old = smallFontCounts.get(x, 0)\n        old += a[\"smallFontCounts\"][x]\n        smallFontCounts[x] = old\n    for x in a.get(\"bigFontCounts\", []):\n        old = bigFontCounts.get(x, 0)\n        old += a[\"bigFontCounts\"][x]\n        bigFontCounts[x] = old\n    for x in b.get(\"smallFontCounts\", []):\n        old = smallFontCounts.get(x, 0)\n        old += b[\"smallFontCounts\"][x]\n        smallFontCounts[x] = old\n    for x in b.get(\"bigFontCounts\", []):\n        old = bigFontCounts.get(x, 0)\n        old += b[\"bigFontCounts\"][x]\n        bigFontCounts[x] = old\n    return {\n        \"smallFontCounts\": smallFontCounts,\n        \"bigFontCounts\": bigFontCounts,\n    }\n\n\ndef get_cjk_glyph(sym: str) -> Optional[bytes]:\n    try:\n        glyph: Glyph = cjk_font()[ord(sym)]\n    except KeyError:\n        return None\n    data = glyph.data\n    src_left, src_bottom, src_w, src_h = glyph.get_bounding_box()\n    dst_w = 12\n    dst_h = 16\n\n    # The source data is a per-row list of ints. The first item is the bottom-\n    # most row. For each row, the LSB is the right-most pixel.\n    # Here, (x, y) is the coordinates with origin at the top-left.\n    def get_cell(x: int, y: int) -> bool:\n        # Adjust x coordinates by actual bounding box.\n        adj_x = x - src_left\n        if adj_x < 0 or adj_x >= src_w:\n            return False\n        # Adjust y coordinates by actual bounding box, then place the glyph\n        # baseline 3px above the bottom edge to make it centre-ish.\n        # This metric is optimized for WenQuanYi Bitmap Song 9pt and assumes\n        # each glyph is to be placed in a 12x12px box.\n        adj_y = y - (dst_h - src_h - src_bottom - 3)\n        if adj_y < 0 or adj_y >= src_h:\n            return False\n        if data[src_h - adj_y - 1] & (1 << (src_w - adj_x - 1)):\n            return True\n        else:\n            return False\n\n    # A glyph in the font table is divided into upper and lower parts, each by\n    # 8px high. Each byte represents half if a column, with the LSB being the\n    # top-most pixel. The data goes from the left-most to the right-most column\n    # of the top half, then from the left-most to the right-most column of the\n    # bottom half.\n    bs = bytearray()\n    for block in range(2):\n        for c in range(dst_w):\n            b = 0\n            for r in range(8):\n                if get_cell(c, r + 8 * block):\n                    b |= 0x01 << r\n            bs.append(b)\n    return bytes(bs)\n\n\ndef get_bytes_from_font_index(index: int) -> bytes:\n    \"\"\"\n    Converts the font table index into its corresponding bytes\n    \"\"\"\n\n    # We want to be able to use more than 254 symbols (excluding \\x00 null\n    # terminator and \\x01 new-line) in the font table but without making all\n    # the chars take 2 bytes. To do this, we use \\xF1 to \\xFF as lead bytes\n    # to designate double-byte chars, and leave the remaining as single-byte\n    # chars.\n    #\n    # For the sake of sanity, \\x00 always means the end of string, so we skip\n    # \\xF1\\x00 and others in the mapping.\n    #\n    # Mapping example:\n    #\n    # 0x02 => 2\n    # 0x03 => 3\n    # ...\n    # 0xEF => 239\n    # 0xF0 => 240\n    # 0xF1 0x01 => 1 * 0xFF - 15 + 1 = 241\n    # 0xF1 0x02 => 1 * 0xFF - 15 + 2 = 242\n    # ...\n    # 0xF1 0xFF => 1 * 0xFF - 15 + 255 = 495\n    # 0xF2 0x01 => 2 * 0xFF - 15 + 1 = 496\n    # ...\n    # 0xF2 0xFF => 2 * 0xFF - 15 + 255 = 750\n    # 0xF3 0x01 => 3 * 0xFF - 15 + 1 = 751\n    # ...\n    # 0xFF 0xFF => 15 * 0xFF - 15 + 255 = 4065\n\n    if index < 0:\n        raise ValueError(\"index must be positive\")\n    page = (index + 0x0E) // 0xFF\n    if page > 0x0F:\n        raise ValueError(\"page value out of range\")\n    if page == 0:\n        return bytes([index])\n    else:\n        # Into extended range\n        # Leader is 0xFz where z is the page number\n        # Following char is the remainder\n        leader = page + 0xF0\n        value = ((index + 0x0E) % 0xFF) + 0x01\n\n        if leader > 0xFF or value > 0xFF:\n            raise ValueError(\"value is out of range\")\n        return bytes([leader, value])\n\n\ndef bytes_to_escaped(b: bytes) -> str:\n    return \"\".join((f\"\\\\x{i:02X}\" for i in b))\n\n\ndef bytes_to_c_hex(b: bytes) -> str:\n    return \", \".join((f\"0x{i:02X}\" for i in b)) + \",\"\n\n\n@dataclass\nclass FontMapsPerFont:\n    font12_symbols_ordered: List[str]\n    font12_maps: Dict[str, Dict[str, bytes]]\n    font06_symbols_ordered: List[str]\n    font06_maps: Dict[str, Dict[str, bytes]]\n\n\ndef get_font_map_per_font(\n    text_list_small_font: List[str], text_list_large_font: List[str]\n) -> FontMapsPerFont:\n    pending_small_symbols = set(text_list_small_font)\n    pending_large_symbols = set(text_list_large_font)\n\n    if len(pending_small_symbols) != len(text_list_small_font):\n        raise ValueError(\"`text_list_small_font` contains duplicated symbols\")\n    if len(pending_large_symbols) != len(text_list_large_font):\n        raise ValueError(\"`text_list_large_font` contains duplicated symbols\")\n\n    total_symbol_count_small = len(pending_small_symbols)\n    # \\x00 is for NULL termination and \\x01 is for newline, so the maximum\n    # number of symbols allowed is as follow (see also the comments in\n    # `get_bytes_from_font_index`):\n    if total_symbol_count_small > (0x10 * 0xFF - 15) - 2:  # 4063\n        raise ValueError(\n            f\"Error, too many used symbols for this version (total {total_symbol_count_small})\"\n        )\n    logging.info(f\"Generating fonts for {total_symbol_count_small} symbols\")\n\n    total_symbol_count_large = len(pending_large_symbols)\n    # \\x00 is for NULL termination and \\x01 is for newline, so the maximum\n    # number of symbols allowed is as follow (see also the comments in\n    # `get_bytes_from_font_index`):\n    if total_symbol_count_large > (0x10 * 0xFF - 15) - 2:  # 4063\n        raise ValueError(\n            f\"Error, too many used symbols for this version (total {total_symbol_count_large})\"\n        )\n    logging.info(f\"Generating fonts for {total_symbol_count_large} symbols\")\n\n    # Build the full font maps\n\n    font12_map: Dict[str, bytes] = {}\n    font06_map: Dict[str, bytes] = {}\n\n    # First we go through and do all of the CJK characters that are in the large font to have them removed\n    for sym in text_list_large_font:\n        font12_line = get_cjk_glyph(sym)\n        if font12_line is None:\n            continue\n        font12_map[sym] = font12_line\n        pending_large_symbols.remove(sym)\n    # Now that all CJK characters are done, we next have to fill out all of the small and large fonts from the remainders\n\n    # This creates our superset of characters to reference off that are pre-rendered ones (non CJK)\n    # Collect font bitmaps by the defined font order:\n    for font in font_tables.ALL_PRE_RENDERED_FONTS:\n        font12, font06 = font_tables.get_font_maps_for_name(font)\n        font12_map.update(font12)\n        font06_map.update(font06)\n\n    # LARGE FONT\n    for sym in text_list_large_font:\n        if sym in pending_large_symbols:\n            font_data = font12_map.get(sym, None)\n            if font_data is None:\n                raise KeyError(f\"Symbol |{sym}| is missing in large font set\")\n            font12_map[sym] = font_data\n            pending_large_symbols.remove(sym)\n\n    if len(pending_large_symbols) > 0:\n        raise KeyError(\n            f\"Missing large font symbols for {len(pending_large_symbols)} characters: {pending_large_symbols}\"\n        )\n\n    # SMALL FONT\n    for sym in text_list_small_font:\n        if sym in pending_small_symbols:\n            font_data = font06_map.get(sym, None)\n            if font_data is None:\n                raise KeyError(f\"Symbol |{sym}| is missing in small font set\")\n            font06_map[sym] = font_data\n            pending_small_symbols.remove(sym)\n\n    if len(pending_small_symbols) > 0:\n        raise KeyError(\n            f\"Missing small font symbols for {len(pending_small_symbols)} characters: {pending_small_symbols}\"\n        )\n\n    return FontMapsPerFont(\n        text_list_large_font, font12_map, text_list_small_font, font06_map\n    )\n\n\ndef get_forced_first_symbols() -> List[str]:\n    \"\"\"Get the list of symbols that must always occur at start of small and large fonts\n    Used by firmware for displaying numbers and hex strings\n\n    Returns:\n        List[str]: List of single character strings that must be the first N entries in a font table\n    \"\"\"\n    forced_first_symbols = [\n        \"0\",\n        \"1\",\n        \"2\",\n        \"3\",\n        \"4\",\n        \"5\",\n        \"6\",\n        \"7\",\n        \"8\",\n        \"9\",\n        \"a\",\n        \"b\",\n        \"c\",\n        \"d\",\n        \"e\",\n        \"f\",\n        \" \",  # We lock these to ease printing functions; and they are always included due to constants\n        \"-\",\n        \"+\",\n    ]\n    return forced_first_symbols\n\n\ndef build_symbol_conversion_map(sym_list: List[str]) -> Dict[str, bytes]:\n    forced_first_symbols = get_forced_first_symbols()\n    if sym_list[: len(forced_first_symbols)] != forced_first_symbols:\n        raise ValueError(\"Symbol list does not start with forced_first_symbols.\")\n\n    # the text list is sorted\n    # allocate out these in their order as number codes\n    symbol_map: Dict[str, bytes] = {\"\\n\": bytes([1])}\n    index = 2  # start at 2, as 0= null terminator,1 = new line\n\n    # Assign symbol bytes by font index\n    for index, sym in enumerate(sym_list, index):\n        assert sym not in symbol_map\n        symbol_map[sym] = get_bytes_from_font_index(index)\n\n    return symbol_map\n\n\ndef make_font_table_cpp(\n    small_font_sym_list: List[str],\n    large_font_sym_list: List[str],\n    font_map: FontMapsPerFont,\n    small_symbol_map: Dict[str, bytes],\n    large_symbol_map: Dict[str, bytes],\n) -> str:\n    output_table = make_font_table_named_cpp(\n        \"USER_FONT_12\", large_font_sym_list, font_map.font12_maps\n    )\n    output_table += make_font_table_06_cpp(small_font_sym_list, font_map)\n    return output_table\n\n\ndef make_font_table_named_cpp(\n    name: Optional[str],\n    sym_list: List[str],\n    font_map: Dict[str, bytes],\n) -> str:\n    output_table = \"\"\n    if name:\n        output_table = f\"const uint8_t {name}[] = {{\\n\"\n    for i, sym in enumerate(sym_list):\n        output_table += f\"{bytes_to_c_hex(font_map[sym])}//0x{i + 2:X} -> {sym}\\n\"\n    if name:\n        output_table += f\"}}; // {name}\\n\"\n    return output_table\n\n\ndef make_font_table_06_cpp(sym_list: List[str], font_map: FontMapsPerFont) -> str:\n    output_table = \"const uint8_t USER_FONT_6x8[] = {\\n\"\n    for i, sym in enumerate(sym_list):\n        font_bytes = font_map.font06_maps[sym]\n        if font_bytes:\n            font_line = bytes_to_c_hex(font_bytes)\n        else:\n            font_line = \"//                                 \"  # placeholder\n        output_table += f\"{font_line}//0x{i + 2:X} -> {sym}\\n\"\n    output_table += \"};\\n\"\n    return output_table\n\n\ndef convert_string_bytes(symbol_conversion_table: Dict[str, bytes], text: str) -> bytes:\n    # convert all of the symbols from the string into bytes for their content\n    output_string = b\"\"\n    for c in text.replace(\"\\\\r\", \"\").replace(\"\\\\n\", \"\\n\"):\n        if c not in symbol_conversion_table:\n            print(symbol_conversion_table)\n            logging.error(f\"Missing font definition for {c}\")\n            raise KeyError(f\"Missing font definition for {c}\")\n        else:\n            output_string += symbol_conversion_table[c]\n    return output_string\n\n\ndef convert_string(symbol_conversion_table: Dict[str, bytes], text: str) -> str:\n    # convert all of the symbols from the string into escapes for their content\n    return bytes_to_escaped(convert_string_bytes(symbol_conversion_table, text))\n\n\ndef escape(string: str) -> str:\n    return json.dumps(string, ensure_ascii=False)\n\n\ndef write_bytes_as_c_array(\n    f: TextIO, name: str, data: bytes, indent: int = 2, bytes_per_line: int = 16\n) -> None:\n    f.write(f\"const uint8_t {name}[] = {{\\n\")\n    for i in range(0, len(data), bytes_per_line):\n        f.write(\" \" * indent)\n        f.write(\", \".join((f\"0x{b:02X}\" for b in data[i : i + bytes_per_line])))\n        f.write(\",\\n\")\n    f.write(f\"}}; // {name}\\n\\n\")\n\n\n@dataclass\nclass LanguageData:\n    langs: List[dict]\n    defs: dict\n    build_version: str\n    small_text_symbols: List[str]\n    large_text_symbols: List[str]\n    font_map: FontMapsPerFont\n\n\ndef prepare_language(lang: dict, defs: dict, build_version: str) -> LanguageData:\n    language_code: str = lang[\"languageCode\"]\n    logging.info(f\"Preparing language data for {language_code}\")\n    # Iterate over all of the text to build up the symbols & counts\n    letter_count_data = get_letter_counts(defs, lang, build_version)\n    small_font_symbols = convert_letter_counts_to_ranked_symbols_with_forced(\n        letter_count_data[\"smallFontCounts\"]\n    )\n    large_font_symbols = convert_letter_counts_to_ranked_symbols_with_forced(\n        letter_count_data[\"bigFontCounts\"]\n    )\n\n    # From the letter counts, need to make a symbol index and matching font index\n\n    font_data = get_font_map_per_font(small_font_symbols, large_font_symbols)\n\n    return LanguageData(\n        [lang],\n        defs,\n        build_version,\n        small_font_symbols,\n        large_font_symbols,\n        font_data,\n    )\n\n\ndef prepare_languages(\n    langs: List[dict], defs: dict, build_version: str\n) -> LanguageData:\n    language_codes: List[str] = [lang[\"languageCode\"] for lang in langs]\n    logging.info(f\"Preparing language data for {language_codes}\")\n\n    # Build the full font maps\n    total_symbol_counts: Dict[str, Dict[str, int]] = {}\n    for lang in langs:\n        letter_count_data = get_letter_counts(defs, lang, build_version)\n        total_symbol_counts = merge_letter_count_info(\n            total_symbol_counts, letter_count_data\n        )\n\n    small_font_symbols = convert_letter_counts_to_ranked_symbols_with_forced(\n        total_symbol_counts[\"smallFontCounts\"]\n    )\n    large_font_symbols = convert_letter_counts_to_ranked_symbols_with_forced(\n        total_symbol_counts[\"bigFontCounts\"]\n    )\n    font_data = get_font_map_per_font(small_font_symbols, large_font_symbols)\n\n    return LanguageData(\n        langs,\n        defs,\n        build_version,\n        small_font_symbols,\n        large_font_symbols,\n        font_data,\n    )\n\n\ndef render_font_block(data: LanguageData, f: TextIO, compress_font: bool = False):\n    font_map = data.font_map\n\n    small_font_symbol_conversion_table = build_symbol_conversion_map(\n        data.small_text_symbols\n    )\n    large_font_symbol_conversion_table = build_symbol_conversion_map(\n        data.large_text_symbols\n    )\n\n    if not compress_font:\n        font_table_text = make_font_table_cpp(\n            data.small_text_symbols,\n            data.large_text_symbols,\n            font_map,\n            small_font_symbol_conversion_table,\n            large_font_symbol_conversion_table,\n        )\n        f.write(font_table_text)\n        f.write(\n            \"const FontSection FontSectionInfo = {\\n\"\n            \"    .font12_start_ptr = USER_FONT_12,\\n\"\n            \"    .font06_start_ptr = USER_FONT_6x8,\\n\"\n            \"    .font12_decompressed_size = 0,\\n\"\n            \"    .font06_decompressed_size = 0,\\n\"\n            \"    .font12_compressed_source = 0,\\n\"\n            \"    .font06_compressed_source = 0,\\n\"\n            \"};\\n\"\n        )\n    else:\n        font12_uncompressed = bytearray()\n        for sym in data.large_text_symbols:\n            font12_uncompressed.extend(font_map.font12_maps[sym])\n        font12_compressed = brieflz.compress(bytes(font12_uncompressed))\n        logging.info(\n            f\"Font table 12x16 compressed from {len(font12_uncompressed)} to {len(font12_compressed)} bytes (ratio {len(font12_compressed) / len(font12_uncompressed):.3})\"\n        )\n\n        write_bytes_as_c_array(f, \"font_12x16_brieflz\", font12_compressed)\n        font06_uncompressed = bytearray()\n        for sym in data.small_text_symbols:\n            font06_uncompressed.extend(font_map.font06_maps[sym])\n        font06_compressed = brieflz.compress(bytes(font06_uncompressed))\n        logging.info(\n            f\"Font table 06x08 compressed from {len(font06_uncompressed)} to {len(font06_compressed)} bytes (ratio {len(font06_compressed) / len(font06_uncompressed):.3})\"\n        )\n\n        write_bytes_as_c_array(f, \"font_06x08_brieflz\", font06_compressed)\n\n        f.write(\n            f\"static uint8_t font12_out_buffer[{len(font12_uncompressed)}];\\n\"\n            f\"static uint8_t font06_out_buffer[{len(font06_uncompressed)}];\\n\"\n            \"const FontSection FontSectionInfo = {\\n\"\n            \"    .font12_start_ptr = font12_out_buffer,\\n\"\n            \"    .font06_start_ptr = font06_out_buffer,\\n\"\n            f\"    .font12_decompressed_size = {len(font12_uncompressed)},\\n\"\n            f\"    .font06_decompressed_size = {len(font06_uncompressed)},\\n\"\n            \"    .font12_compressed_source = font_12x16_brieflz,\\n\"\n            \"    .font06_compressed_source = font_06x08_brieflz,\\n\"\n            \"};\\n\"\n        )\n\n\ndef write_language(\n    data: LanguageData,\n    f: TextIO,\n    strings_bin: Optional[bytes] = None,\n    compress_font: bool = False,\n) -> None:\n    if len(data.langs) > 1:\n        raise ValueError(\"More than 1 languages are provided\")\n    lang = data.langs[0]\n    defs = data.defs\n\n    small_font_symbol_conversion_table = build_symbol_conversion_map(\n        data.small_text_symbols\n    )\n    large_font_symbol_conversion_table = build_symbol_conversion_map(\n        data.large_text_symbols\n    )\n\n    language_code: str = lang[\"languageCode\"]\n    logging.info(f\"Generating block for {language_code}\")\n\n    try:\n        lang_name = lang[\"languageLocalName\"]\n    except KeyError:\n        lang_name = language_code\n\n    if strings_bin or compress_font:\n        f.write('#include \"brieflz.h\"\\n')\n\n    f.write(f\"\\n// ---- {lang_name} ----\\n\\n\")\n\n    render_font_block(data, f, compress_font)\n\n    f.write(f\"\\n// ---- {lang_name} ----\\n\\n\")\n\n    translation_common_text = get_translation_common_text(\n        small_font_symbol_conversion_table, large_font_symbol_conversion_table\n    )\n    f.write(translation_common_text)\n    f.write(\n        f\"const bool HasFahrenheit = {('true' if lang.get('tempUnitFahrenheit', True) else 'false')};\\n\\n\"\n    )\n\n    if not strings_bin:\n        translation_strings_and_indices_text = get_translation_strings_and_indices_text(\n            lang,\n            defs,\n            small_font_symbol_conversion_table,\n            large_font_symbol_conversion_table,\n        )\n        f.write(translation_strings_and_indices_text)\n        f.write(\n            \"const TranslationIndexTable *Tr = &translation.indices;\\n\"\n            \"const char *TranslationStrings = translation.strings;\\n\\n\"\n        )\n    else:\n        compressed = brieflz.compress(strings_bin)\n        logging.info(\n            f\"Strings compressed from {len(strings_bin)} to {len(compressed)} bytes (ratio {len(compressed) / len(strings_bin):.3})\"\n        )\n        write_bytes_as_c_array(f, \"translation_data_brieflz\", compressed)\n        f.write(\n            f\"static uint8_t translation_data_out_buffer[{len(strings_bin)}] __attribute__((__aligned__(2)));\\n\\n\"\n            \"const TranslationIndexTable *Tr = reinterpret_cast<const TranslationIndexTable *>(translation_data_out_buffer);\\n\"\n            \"const char *TranslationStrings = reinterpret_cast<const char *>(translation_data_out_buffer) + sizeof(TranslationIndexTable);\\n\\n\"\n        )\n\n    if not strings_bin and not compress_font:\n        f.write(\"void prepareTranslations() {}\\n\\n\")\n    else:\n        f.write(\"void prepareTranslations() {\\n\")\n        if compress_font:\n            f.write(\n                \"  blz_depack_srcsize(font_12x16_brieflz, font_out_buffer, sizeof(font_12x16_brieflz));\\n\"\n            )\n        if strings_bin:\n            f.write(\n                \"  blz_depack_srcsize(translation_data_brieflz, translation_data_out_buffer, sizeof(translation_data_brieflz));\\n\"\n            )\n        f.write(\"}\\n\\n\")\n\n    sanity_checks_text = get_translation_sanity_checks_text(defs)\n    f.write(sanity_checks_text)\n\n\ndef write_languages(\n    data: LanguageData,\n    f: TextIO,\n    strings_obj_path: Optional[str] = None,\n    compress_font: bool = False,\n) -> None:\n    defs = data.defs\n\n    small_font_symbol_conversion_table = build_symbol_conversion_map(\n        data.small_text_symbols\n    )\n    large_font_symbol_conversion_table = build_symbol_conversion_map(\n        data.large_text_symbols\n    )\n\n    language_codes: List[str] = [lang[\"languageCode\"] for lang in data.langs]\n    logging.info(f\"Generating block for {language_codes}\")\n\n    lang_names = [\n        lang.get(\"languageLocalName\", lang[\"languageCode\"]) for lang in data.langs\n    ]\n\n    f.write('#include \"Translation_multi.h\"')\n\n    f.write(f\"\\n// ---- {lang_names} ----\\n\\n\")\n\n    render_font_block(data, f, compress_font)\n\n    f.write(f\"\\n// ---- {lang_names} ----\\n\\n\")\n\n    translation_common_text = get_translation_common_text(\n        small_font_symbol_conversion_table, large_font_symbol_conversion_table\n    )\n    f.write(translation_common_text)\n\n    f.write(\n        f\"const bool HasFahrenheit = {('true' if any([lang.get('tempUnitFahrenheit', True) for lang in data.langs]) else 'false')};\\n\\n\"\n    )\n\n    max_decompressed_translation_size = 0\n    if not strings_obj_path:\n        for lang in data.langs:\n            lang_code = lang[\"languageCode\"]\n            translation_strings_and_indices_text = (\n                get_translation_strings_and_indices_text(\n                    lang,\n                    defs,\n                    small_font_symbol_conversion_table,\n                    large_font_symbol_conversion_table,\n                    suffix=f\"_{lang_code}\",\n                )\n            )\n            f.write(translation_strings_and_indices_text)\n        f.write(\"const LanguageMeta LanguageMetas[] = {\\n\")\n        for lang in data.langs:\n            lang_code = lang[\"languageCode\"]\n            lang_id = get_language_unqiue_id(lang_code)\n            f.write(\n                \"  {\\n\"\n                f\"    .uniqueID = {lang_id},\\n\"\n                f\"    .translation_data = reinterpret_cast<const uint8_t *>(&translation_{lang_code}),\\n\"\n                f\"    .translation_size = sizeof(translation_{lang_code}),\\n\"\n                f\"    .translation_is_compressed = false,\\n\"\n                \"  },\\n\"\n            )\n        f.write(\"};\\n\")\n    else:\n        for lang in data.langs:\n            lang_code = lang[\"languageCode\"]\n            sym_name = objcopy.cpp_var_to_section_name(f\"translation_{lang_code}\")\n            strings_bin = objcopy.get_binary_from_obj(strings_obj_path, sym_name)\n            if len(strings_bin) == 0:\n                raise ValueError(f\"Output for {sym_name} is empty\")\n            max_decompressed_translation_size = max(\n                max_decompressed_translation_size, len(strings_bin)\n            )\n            compressed = brieflz.compress(strings_bin)\n            logging.info(\n                f\"Strings for {lang_code} compressed from {len(strings_bin)} to {len(compressed)} bytes (ratio {len(compressed) / len(strings_bin):.3})\"\n            )\n            write_bytes_as_c_array(\n                f, f\"translation_data_brieflz_{lang_code}\", compressed\n            )\n        f.write(\"const LanguageMeta LanguageMetas[] = {\\n\")\n        for lang in data.langs:\n            lang_code = lang[\"languageCode\"]\n            lang_id = get_language_unqiue_id(lang_code)\n            f.write(\n                \"  {\\n\"\n                f\"    .uniqueID = {lang_id},\\n\"\n                f\"    .translation_data = translation_data_brieflz_{lang_code},\\n\"\n                f\"    .translation_size = sizeof(translation_data_brieflz_{lang_code}),\\n\"\n                f\"    .translation_is_compressed = true,\\n\"\n                \"  },\\n\"\n            )\n        f.write(\"};\\n\")\n    f.write(\n        \"const uint8_t LanguageCount = sizeof(LanguageMetas) / sizeof(LanguageMetas[0]);\\n\\n\"\n        f\"alignas(TranslationData) uint8_t translation_data_out_buffer[{max_decompressed_translation_size}];\\n\"\n        \"const uint16_t translation_data_out_buffer_size = sizeof(translation_data_out_buffer);\\n\\n\"\n    )\n\n    sanity_checks_text = get_translation_sanity_checks_text(defs)\n    f.write(sanity_checks_text)\n\n\ndef get_translation_common_text(\n    small_symbol_conversion_table: Dict[str, bytes],\n    large_symbol_conversion_table: Dict[str, bytes],\n) -> str:\n    translation_common_text = \"\"\n\n    # Write out firmware constant options\n    constants = get_constants()\n    for x in constants:\n        if x[0].startswith(\"Small\"):\n            translation_common_text += f'const char* {x[0]} = \"{convert_string(small_symbol_conversion_table, x[1])}\";//{x[1]} \\n'\n        elif x[0].startswith(\"Large\"):\n            str = x[1]\n            translation_common_text += f'const char* {x[0]} = \"{convert_string(large_symbol_conversion_table, str)}\";//{x[1]} \\n'\n        else:\n            raise ValueError(f\"Constant {x} is not size encoded\")\n    translation_common_text += \"\\n\"\n\n    # Debug Menu\n    translation_common_text += \"const char* DebugMenu[] = {\\n\"\n\n    for c in get_debug_menu():\n        translation_common_text += (\n            f'\\t \"{convert_string(small_symbol_conversion_table, c)}\",//\"{c}\" \\n'\n        )\n    translation_common_text += \"};\\n\\n\"\n\n    # accel names\n    translation_common_text += \"const char* AccelTypeNames[] = {\\n\"\n\n    for c in get_accel_names_list():\n        translation_common_text += (\n            f'\\t \"{convert_string(small_symbol_conversion_table, c)}\",//{c} \\n'\n        )\n    translation_common_text += \"};\\n\\n\"\n\n    # power source types\n    translation_common_text += \"const char* PowerSourceNames[] = {\\n\"\n\n    for c in get_power_source_list():\n        translation_common_text += (\n            f'\\t \"{convert_string(small_symbol_conversion_table, c)}\",//{c} \\n'\n        )\n    translation_common_text += \"};\\n\\n\"\n\n    return translation_common_text\n\n\n@dataclass\nclass TranslationItem:\n    info: str\n    str_index: int\n\n\ndef get_translation_strings_and_indices_text(\n    lang: dict,\n    defs: dict,\n    small_font_symbol_conversion_table: Dict[str, bytes],\n    large_font_symbol_conversion_table: Dict[str, bytes],\n    suffix: str = \"\",\n) -> str:\n    # For all strings; we want to convert them to their byte encoded form (using font index lookups)\n    # Then we want to sort by their reversed format to see if we can remove any duplicates by combining the tails (last n bytes;n>0)\n    # Finally we look for any that are contained inside one another, and if they are we update them to point to this\n\n    # _OR_ we can be lazy and abuse cpu power and just make python search for our substring each time we append\n\n    byte_encoded_strings: List[bytes] = []  # List of byte arrays of encoded strings\n    byte_encoded_strings_unencoded_reference: List[str] = []\n\n    @dataclass\n    class TranslatedStringLocation:\n        byte_encoded_translation_index: int = 0\n        str_start_offset: int = 0\n\n    translated_string_lookups: Dict[str, TranslatedStringLocation] = {}\n\n    # We do the collapse on the encoded strings; since we are doing different fonts, this avoids needing to track fonts\n    # Also means if things line up nicely for us; we can do it across fonts (rare)\n    def add_encoded_string(\n        unencoded_string: str, encoded_string: bytes, translation_id: str\n    ):\n        for i, byte_data in enumerate(byte_encoded_strings):\n            if byte_data.endswith(encoded_string):\n                logging.info(f\"Collapsing {translation_id}\")\n                record = TranslatedStringLocation(\n                    i, len(byte_data) - len(encoded_string)\n                )\n                translated_string_lookups[translation_id] = record\n                return\n        byte_encoded_strings.append(encoded_string)\n        byte_encoded_strings_unencoded_reference.append(unencoded_string)\n        record = TranslatedStringLocation(len(byte_encoded_strings) - 1, 0)\n        translated_string_lookups[translation_id] = record\n\n    def encode_string_and_add(\n        message: str, translation_id: str, force_large_text: bool = False\n    ):\n        encoded_data: bytes\n        if force_large_text is False and test_is_small_font(message):\n            encoded_data = convert_string_bytes(\n                small_font_symbol_conversion_table, message\n            )\n        else:\n            if force_large_text is False:\n                message = \"\\n\" + message\n            encoded_data = convert_string_bytes(\n                large_font_symbol_conversion_table, message\n            )\n        add_encoded_string(message, encoded_data, translation_id)\n\n    for index, record in enumerate(defs[\"menuOptions\"]):\n        lang_data = lang[\"menuOptions\"][record[\"id\"]]\n        # Add to translations the menu text and the description\n        encode_string_and_add(\n            lang_data[\"description\"], \"menuOptions\" + record[\"id\"] + \"description\", True\n        )\n        encode_string_and_add(\n            lang_data[\"displayText\"], \"menuOptions\" + record[\"id\"] + \"displayText\"\n        )\n    for index, record in enumerate(defs[\"menuValues\"]):\n        lang_data = lang[\"menuValues\"][record[\"id\"]]\n        # Add to translations the menu text and the description\n        encode_string_and_add(\n            lang_data[\"displayText\"], \"menuValues\" + record[\"id\"] + \"displayText\"\n        )\n\n    for index, record in enumerate(defs[\"menuGroups\"]):\n        lang_data = lang[\"menuGroups\"][record[\"id\"]]\n        # Add to translations the menu text and the description\n        encode_string_and_add(\n            lang_data[\"description\"], \"menuGroups\" + record[\"id\"] + \"description\", True\n        )\n        encode_string_and_add(\n            lang_data[\"displayText\"], \"menuGroups\" + record[\"id\"] + \"displayText\"\n        )\n\n    for index, record in enumerate(defs[\"messagesWarn\"]):\n        lang_data = lang[\"messagesWarn\"][record[\"id\"]]\n        # Add to translations the menu text and the description\n        encode_string_and_add(\n            lang_data[\"message\"], \"messagesWarn\" + record[\"id\"] + \"Message\"\n        )\n\n    for index, record in enumerate(defs[\"characters\"]):\n        lang_data = lang[\"characters\"][record[\"id\"]]\n        # Add to translations the menu text and the description\n        encode_string_and_add(lang_data, \"characters\" + record[\"id\"] + \"Message\", True)\n\n    # ----- Write the string table:\n    offset = 0\n    # NOTE: Cannot specify C99 designator here due to GCC (g++) bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55227\n    translation_strings_text = \"  /* .strings = */ {\\n\"\n\n    for i, encoded_bytes in enumerate(byte_encoded_strings):\n        if i > 0:\n            translation_strings_text += ' \"\\\\0\"\\n'\n\n        # Write a comment of what it is\n        translation_strings_text += f\"    // {offset: >4}: {escape(byte_encoded_strings_unencoded_reference[i])}\\n\"\n        # Write the actual data\n        translation_strings_text += f'    \"{bytes_to_escaped(encoded_bytes)}\"'\n        offset += len(encoded_bytes) + 1\n\n    translation_strings_text += \"\\n  }, // .strings\\n\\n\"\n\n    str_total_bytes = offset\n    ################# Part 2: Emit all the string offsets\n\n    string_index_commulative_lengths = []\n    position = 0\n    for string in byte_encoded_strings:\n        string_index_commulative_lengths.append(position)\n        position += len(string) + 1\n\n    translation_indices_text = \"  .indices = {\\n\"\n\n    # Write out the constant strings (ones we reference directly)\n\n    for _, record in enumerate(defs[\"messagesWarn\"]):\n        # Add to translations the menu text and the description\n        lang_data = lang[\"messagesWarn\"][record[\"id\"]]\n        key = \"messagesWarn\" + record[\"id\"] + \"Message\"\n        translated_index = translated_string_lookups[key]\n        string_index = translated_index.byte_encoded_translation_index\n        start_index = (\n            string_index_commulative_lengths[string_index]\n            + translated_index.str_start_offset\n        )\n\n        translation_indices_text += (\n            f\"    .{record['id']} = {start_index}, // {escape(lang_data['message'])}\\n\"\n        )\n\n    translation_indices_text += \"\\n\"\n\n    # Constant short values we use in settings menu\n\n    for _, record in enumerate(defs[\"characters\"]):\n        # Add to translations the menu text and the description\n        lang_data = lang[\"characters\"][record[\"id\"]]\n        key = \"characters\" + record[\"id\"] + \"Message\"\n        translated_index = translated_string_lookups[key]\n        string_index = translated_index.byte_encoded_translation_index\n        start_index = (\n            string_index_commulative_lengths[string_index]\n            + translated_index.str_start_offset\n        )\n\n        translation_indices_text += (\n            f\"    .{record['id']} = {start_index}, // {escape(lang_data)}\\n\"\n        )\n\n    for _, record in enumerate(defs[\"menuValues\"]):\n        # Add to translations the menu text and the description\n        lang_data = lang[\"menuValues\"][record[\"id\"]]\n        key = \"menuValues\" + record[\"id\"] + \"displayText\"\n        translated_index = translated_string_lookups[key]\n        string_index = translated_index.byte_encoded_translation_index\n        start_index = (\n            string_index_commulative_lengths[string_index]\n            + translated_index.str_start_offset\n        )\n\n        translation_indices_text += (\n            f\"    .{record['id']} = {start_index}, // {escape(lang_data)}\\n\"\n        )\n\n    translation_indices_text += \"\\n\"\n\n    # Now for the fun ones, where they are nested and ordered\n\n    def write_grouped_indexes(output_text: str, name: str, mainKey: str, subKey: str):\n        max_len = 30\n        output_text += f\"    .{name} = {{\\n\"\n        for index, record in enumerate(defs[mainKey]):\n            lang_data = lang[mainKey][record[\"id\"]]\n            key = mainKey + record[\"id\"] + subKey\n            raw_string = lang_data[subKey]\n            translated_index = translated_string_lookups[key]\n            string_index = translated_index.byte_encoded_translation_index\n            start_index = (\n                string_index_commulative_lengths[string_index]\n                + translated_index.str_start_offset\n            )\n\n            output_text += f\"      /* {record['id'].ljust(max_len)[:max_len]} */ {start_index}, // {escape(raw_string)}\\n\"\n\n        output_text += f\"    }}, // {name}\\n\\n\"\n        return output_text\n\n    translation_indices_text = write_grouped_indexes(\n        translation_indices_text, \"SettingsDescriptions\", \"menuOptions\", \"description\"\n    )\n    translation_indices_text = write_grouped_indexes(\n        translation_indices_text, \"SettingsShortNames\", \"menuOptions\", \"displayText\"\n    )\n\n    translation_indices_text = write_grouped_indexes(\n        translation_indices_text,\n        \"SettingsMenuEntriesDescriptions\",\n        \"menuGroups\",\n        \"description\",\n    )\n    translation_indices_text = write_grouped_indexes(\n        translation_indices_text, \"SettingsMenuEntries\", \"menuGroups\", \"displayText\"\n    )\n\n    translation_indices_text += \"  }, // .indices\\n\\n\"\n\n    return (\n        \"struct {\\n\"\n        \"  TranslationIndexTable indices;\\n\"\n        f\"  char strings[{str_total_bytes}];\\n\"\n        f\"}} const translation{suffix} = {{\\n\"\n        + translation_indices_text\n        + translation_strings_text\n        + f\"}}; // translation{suffix}\\n\\n\"\n    )\n\n\ndef get_translation_sanity_checks_text(defs: dict) -> str:\n    sanity_checks_text = \"\\n// Verify SettingsItemIndex values:\\n\"\n    for i, mod in enumerate(defs[\"menuOptions\"]):\n        eid = mod[\"id\"]\n        sanity_checks_text += (\n            f\"static_assert(static_cast<uint8_t>(SettingsItemIndex::{eid}) == {i});\\n\"\n        )\n    sanity_checks_text += f\"static_assert(static_cast<uint8_t>(SettingsItemIndex::NUM_ITEMS) == {len(defs['menuOptions'])});\\n\"\n    return sanity_checks_text\n\n\ndef get_version_suffix(ver) -> str:\n    # Check env var from push.yml first:\n    # - if it's pull request then use vX.YY + C.ID for version line as in *C*I with proper tag instead of merge tag for detached tree\n    if os.environ.get(\"GITHUB_CI_PR_SHA\", \"\") != \"\":\n        return \"C\" + \".\" + os.environ[\"GITHUB_CI_PR_SHA\"][:8].upper()\n    # - no github PR SHA ID, hence keep checking\n\n    suffix = str(\"\")\n\n    try:\n        # Use commands _hoping_ they won't be too new for one environments nor deprecated for another ones:\n        ## - get commit id; --short=8 - the shorted hash with 8 digits (increase/decrease if needed!)\n        sha_id = f\"{subprocess.check_output(['git', 'rev-parse', '--short=8', 'HEAD']).strip().decode('ascii').upper()}\"\n        ## - if the exact commit relates to tag, then this command should return one-line tag name:\n        tag = f\"{subprocess.check_output(['git', 'tag', '--points-at', '%s' % sha_id]).strip().decode('ascii')}\"\n        if (\n            f\"{subprocess.check_output(['git', 'rev-parse', '--symbolic-full-name', '--short', 'HEAD']).strip().decode('ascii')}\"\n            == \"HEAD\"\n        ):\n            return \"E\" + \".\" + sha_id\n        else:\n            ## - get short \"traditional\" branch name (as in `git branch` for that one with asterisk):\n            branch = f\"{subprocess.check_output(['git', 'symbolic-ref', '--short', 'HEAD']).strip().decode('ascii')}\"\n        if tag and \"\" != tag:\n            # _Speculate_ on tag that it's Release...\n            if ver == tag:\n                # ... but only if double-check for tag is matched\n                suffix = \"R\"\n            else:\n                # ... otherwise it's tagged but not a release version!\n                suffix = \"T\"\n        elif branch and \"\" != branch:\n            # _Hardcoded_ current main development branch...\n            if \"dev\" == branch:\n                suffix = \"D\"\n            # ... or some other branch\n            else:\n                suffix = \"B\"\n        else:\n            # Something else but from Git\n            suffix = \"G\"\n        # Attach SHA commit to ID a build since it's from git anyway\n        suffix += \".\" + sha_id\n    except subprocess.CalledProcessError:\n        # No git tree so _probably_ Homebrew build from source\n        suffix = \"H\"\n    except OSError:\n        # Something _special_?\n        suffix = \"S\"\n\n    if \"\" == suffix:\n        # Something _very_ special!\n        suffix = \"V\"\n\n    return suffix\n\n\ndef read_version() -> str:\n    with open(HERE.parent / \"source\" / \"version.h\") as version_file:\n        for line in version_file:\n            if re.findall(r\"^.*(?<=(#define)).*(?<=(BUILD_VERSION))\", line):\n                matches = re.findall(r\"\\\"(.+?)\\\"\", line)\n                if matches:\n                    version = matches[0]\n                    version += get_version_suffix(version)\n    return version\n\n\ndef parse_args() -> argparse.Namespace:\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\n        \"--output-pickled\",\n        help=\"Write pickled language data for later reuse\",\n        type=argparse.FileType(\"wb\"),\n        required=False,\n        dest=\"output_pickled\",\n    )\n    parser.add_argument(\n        \"--input-pickled\",\n        help=\"Use previously generated pickled language data\",\n        type=argparse.FileType(\"rb\"),\n        required=False,\n        dest=\"input_pickled\",\n    )\n    parser.add_argument(\n        \"--strings-obj\",\n        help=\"Use generated TranslationData by extracting from object file\",\n        type=argparse.FileType(\"rb\"),\n        required=False,\n        dest=\"strings_obj\",\n    )\n    parser.add_argument(\n        \"--compress-font\",\n        help=\"Compress the font table\",\n        action=\"store_true\",\n        required=False,\n        dest=\"compress_font\",\n    )\n    parser.add_argument(\n        \"--macros\",\n        help=\"Extracted macros to filter translation strings by\",\n        type=argparse.FileType(\"r\"),\n        required=True,\n        dest=\"macros\",\n    )\n    parser.add_argument(\n        \"--output\", \"-o\", help=\"Target file\", type=argparse.FileType(\"w\"), required=True\n    )\n    parser.add_argument(\n        \"languageCodes\",\n        metavar=\"languageCode\",\n        nargs=\"+\",\n        help=\"Language(s) to generate\",\n    )\n    return parser.parse_args()\n\n\ndef main() -> None:\n    json_dir = HERE\n\n    args = parse_args()\n    if args.input_pickled and args.output_pickled:\n        logging.error(\"error: Both --output-pickled and --input-pickled are specified\")\n        sys.exit(1)\n\n    macros = (\n        frozenset(re.findall(r\"#define ([^ ]+)\", args.macros.read()))\n        if args.macros\n        else frozenset()\n    )\n\n    language_data: LanguageData\n    if args.input_pickled:\n        logging.info(f\"Reading pickled language data from {args.input_pickled.name}...\")\n        language_data = pickle.load(args.input_pickled)\n        language_codes = [lang[\"languageCode\"] for lang in language_data.langs]\n        if language_codes != args.languageCodes:\n            logging.error(\n                f\"error: languageCode {args.languageCode} does not match language data {language_codes}\"\n            )\n            sys.exit(1)\n        logging.info(f\"Read language data for {language_codes}\")\n        logging.info(f\"Build version: {language_data.build_version}\")\n    else:\n        try:\n            build_version = read_version()\n        except FileNotFoundError:\n            logging.error(\"error: Could not find version info \")\n            sys.exit(1)\n\n        logging.info(f\"Build version: {build_version}\")\n        logging.info(f\"Making {args.languageCodes} from {json_dir}\")\n\n        defs_ = load_json(os.path.join(json_dir, \"translations_definitions.json\"))\n        if len(args.languageCodes) == 1:\n            lang_ = filter_translation(\n                read_translation(json_dir, args.languageCodes[0]), defs_, macros\n            )\n            language_data = prepare_language(lang_, defs_, build_version)\n        else:\n            langs_ = [\n                filter_translation(read_translation(json_dir, lang_code), defs_, macros)\n                for lang_code in args.languageCodes\n            ]\n            language_data = prepare_languages(langs_, defs_, build_version)\n\n    out_ = args.output\n    write_start(out_)\n    if len(language_data.langs) == 1:\n        if args.strings_obj:\n            sym_name = objcopy.cpp_var_to_section_name(\"translation\")\n            strings_bin = objcopy.get_binary_from_obj(args.strings_obj.name, sym_name)\n            if len(strings_bin) == 0:\n                raise ValueError(f\"Output for {sym_name} is empty\")\n            write_language(\n                language_data,\n                out_,\n                strings_bin=strings_bin,\n                compress_font=args.compress_font,\n            )\n        else:\n            write_language(language_data, out_, compress_font=args.compress_font)\n    else:\n        if args.strings_obj:\n            write_languages(\n                language_data,\n                out_,\n                strings_obj_path=args.strings_obj.name,\n                compress_font=args.compress_font,\n            )\n        else:\n            write_languages(language_data, out_, compress_font=args.compress_font)\n\n    if args.output_pickled:\n        logging.info(f\"Writing pickled data to {args.output_pickled.name}\")\n        pickle.dump(language_data, args.output_pickled)\n\n    logging.info(\"Done\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "Translations/make_translation_test.py",
    "content": "#!/usr/bin/env python3\nimport json\nimport os\nimport unittest\n\n\nclass TestMakeTranslation(unittest.TestCase):\n    def test_get_bytes_from_font_index(self):\n        from make_translation import get_bytes_from_font_index\n\n        self.assertEqual(get_bytes_from_font_index(2), b\"\\x02\")\n        self.assertEqual(get_bytes_from_font_index(239), b\"\\xEF\")\n        self.assertEqual(get_bytes_from_font_index(240), b\"\\xF0\")\n        self.assertEqual(get_bytes_from_font_index(241), b\"\\xF1\\x01\")\n        self.assertEqual(get_bytes_from_font_index(495), b\"\\xF1\\xFF\")\n        self.assertEqual(get_bytes_from_font_index(496), b\"\\xF2\\x01\")\n        self.assertEqual(get_bytes_from_font_index(750), b\"\\xF2\\xFF\")\n        self.assertEqual(get_bytes_from_font_index(751), b\"\\xF3\\x01\")\n        self.assertEqual(get_bytes_from_font_index(0x10 * 0xFF - 15), b\"\\xFF\\xFF\")\n        with self.assertRaises(ValueError):\n            get_bytes_from_font_index(0x10 * 0xFF - 14)\n\n    def test_bytes_to_escaped(self):\n        from make_translation import bytes_to_escaped\n\n        self.assertEqual(bytes_to_escaped(b\"\\x00\"), \"\\\\x00\")\n        self.assertEqual(bytes_to_escaped(b\"\\xF1\\xAB\"), \"\\\\xF1\\\\xAB\")\n\n    def test_bytes_to_c_hex(self):\n        from make_translation import bytes_to_c_hex\n\n        self.assertEqual(bytes_to_c_hex(b\"\\x00\"), \"0x00,\")\n        self.assertEqual(bytes_to_c_hex(b\"\\xF1\\xAB\"), \"0xF1, 0xAB,\")\n\n    def test_no_language_id_collisions(self):\n        \"\"\"\n        Asserting that we have no language collisions and that the has works ok\n        \"\"\"\n        from make_translation import get_language_unqiue_id\n\n        seen_ids = []\n        for filename in os.listdir(\".\"):\n            if filename.endswith(\".json\") and filename.startswith(\"translation_\"):\n                with open(filename) as f:\n                    data = json.loads(f.read())\n                    lang_code = data.get(\"languageCode\")\n                    self.assertNotEqual(lang_code, None)\n                    id = get_language_unqiue_id(lang_code)\n                    self.assertFalse(id in seen_ids)\n                    seen_ids.append(id)\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "Translations/migrate.py",
    "content": "#!/usr/bin/env python3\n\nimport json\nimport os\nimport sys\n\n# Migrate json files to use \"\\n\" encoding rather than []\n\n\ndef load_json(filename: str) -> dict:\n    with open(filename, \"r\", encoding=\"utf8\") as f:\n        return json.loads(f.read())\n\n\ndef save_json(filename: str, data: dict):\n    with open(filename, \"w\", encoding=\"utf8\") as f:\n        json.dump(data, f, indent=4, ensure_ascii=False)\n\n\nfile_name = sys.argv[1]\nprint(file_name)\n\ndata = load_json(file_name)\n\n# Migrate messages to be delimited\nfor key in data[\"messagesWarn\"]:\n    old_message = data[\"messagesWarn\"][key]\n    if isinstance(old_message, list):\n        print(old_message)\n        new_message = \"\\n\".join(old_message)\n        data[\"messagesWarn\"][key] = {\"message\": new_message}\n    else:\n        data[\"messagesWarn\"][key] = {\"message\": old_message}\n\nfor key in data[\"messages\"]:\n    old_message = data[\"messages\"][key]\n    if isinstance(old_message, list):\n        print(old_message)\n        new_message = \"\\n\".join(old_message)\n        data[\"messagesWarn\"][key] = {\"message\": new_message}\n    else:\n        data[\"messagesWarn\"][key] = {\"message\": old_message}\n\ndel data[\"messages\"]\nprint(\"Part 2\")\n# for menu-groups break out the text2 field\nfor key in data[\"menuGroups\"]:\n    old_data = data[\"menuGroups\"][key]\n    if isinstance(old_data.get(\"text2\", \"\"), list):\n        new_data = \"\\n\".join(old_data[\"text2\"])\n        data[\"menuGroups\"][key][\"displayText\"] = new_data\n        del data[\"menuGroups\"][key][\"text2\"]\n    else:\n        data[\"menuGroups\"][key][\"displayText\"] = old_data[\"text2\"].replace(\"\\n\", \"\")\n        del data[\"menuGroups\"][key][\"text2\"]\n    data[\"menuGroups\"][key][\"description\"] = data[\"menuGroups\"][key][\"desc\"]\n    del data[\"menuGroups\"][key][\"desc\"]\n\n\nprint(\"Part 3\")\n# for menu-groups break out the text2 field\nfor key in data[\"menuOptions\"]:\n    old_data = data[\"menuOptions\"][key]\n    if isinstance(old_data.get(\"text2\", \"\"), list):\n        new_data = \"\\n\".join(old_data[\"text2\"])\n        data[\"menuOptions\"][key][\"displayText\"] = new_data\n        del data[\"menuOptions\"][key][\"text2\"]\n    else:\n        data[\"menuOptions\"][key][\"displayText\"] = old_data[\"text2\"].replace(\"\\n\", \"\")\n        del data[\"menuOptions\"][key][\"text2\"]\n    data[\"menuOptions\"][key][\"description\"] = data[\"menuOptions\"][key][\"desc\"]\n    del data[\"menuOptions\"][key][\"desc\"]\n\n\nsave_json(file_name, data)\n"
  },
  {
    "path": "Translations/objcopy.py",
    "content": "import os\nimport subprocess\nimport tempfile\n\n\nif \"OBJCOPY\" in os.environ:\n    OBJCOPY = os.environ[\"OBJCOPY\"]\nelse:\n    OBJCOPY = \"objcopy\"\n\n\ndef get_binary_from_obj(objfile_path: str, section_name: str) -> bytes:\n    tmpfd, tmpfile = tempfile.mkstemp()\n    result = subprocess.run(\n        [OBJCOPY, \"-O\", \"binary\", \"-j\", section_name, objfile_path, tmpfile]\n    )\n    result.check_returncode()\n    with open(tmpfd, \"rb\") as f:\n        bin: bytes = f.read()\n    os.remove(tmpfile)\n    return bin\n\n\ndef cpp_var_to_section_name(var_name: str) -> str:\n    return f\".rodata._ZL{len(var_name)}{var_name}\"\n"
  },
  {
    "path": "Translations/translation_BE.json",
    "content": "{\n  \"languageCode\": \"BE\",\n  \"languageLocalName\": \"Беларуская\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Каліброўка\\nзроблена!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Скід OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Налады\\nскінуты!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Акселерометр\\nне выяўлены!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"USB-PD\\nне выяўлены!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"ЗАБЛАК.\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"АДБЛАК.\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!ЗАБЛАК.!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Некантралюемае\\nразаграванне\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Кароткае замыканне на джале!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Пераканайцеся, што пры наступнай загрузцы наканечнік і ручка маюць пакаёвую тэмпературу!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"каліброўка\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Вы ўпэннены, што жадаеце скінуць налады да першапачатковых значэнняў?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"НІЗК. НАПР.\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Нізк. напр.\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Увах. напр.: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Чаканне...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Джала: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Разагрэць\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Астудзіць\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Ваша прылада, хутчэй за ўсё, падробка!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Занадта горача,\\nкаб запусціць профіль\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"П\",\n    \"SettingLeftChar\": \"Л\",\n    \"SettingAutoChar\": \"А\",\n    \"SettingSlowChar\": \"М\",\n    \"SettingMediumChar\": \"С\",\n    \"SettingFastChar\": \"Х\",\n    \"SettingStartSolderingChar\": \"П\",\n    \"SettingStartSleepChar\": \"Ч\",\n    \"SettingStartSleepOffChar\": \"Х\",\n    \"SettingLockBoostChar\": \"Т\",\n    \"SettingLockFullChar\": \"П\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Налады\\nсілкавання\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Налады\\nпайкі\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Рэжым\\nчакання\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Налады\\nінтэрфейсу\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Дадатковыя\\nналады\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Звыч.\\nрэжым\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"Без\\nдынамікі\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Бяспечны\\nрэжым\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Аўта\\n\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Крыніца\\nсілкавання\",\n      \"description\": \"Вызначыць напруджанне адсечкі для прадухілення глыбокай разрадкі (DC=10В) (S=3,3В на ячэйку, без абмежавання магутнасці)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Мін.\\nнапр.\",\n      \"description\": \"Мінімальнае дазволеннае напруджанне на ячэйку (3S: 3 - 3,7В | 4S: 2,4 - 3,7В)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Напрудж.\\nQC\",\n      \"description\": \"Максімальнае напруджанне, узгадняемае па пратаколу QC\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"Затрымка\\nPD\",\n      \"description\": \"Затрымка з крокам 100 мс перад ўзгадненем PD для сумяшчальнасці з некаторымі зараднымі прыладамі QC\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"Рэжым\\nPD\",\n      \"description\": \"«Без дынамікі» адключае EPR і PPS, «Бяспечны рэжым» не выкарыстоўвае карэкціровачнае супраціўленне\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"T° турба\\nрэжыму\",\n      \"description\": \"Тэмпература джала ў турба-рэжыме\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Стартавы\\nрэжым\",\n      \"description\": \"П=нагрэў да тэмп. пайкі | Ч=чаканне | Х=чаканне без нагрэву\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Крок T°\\nкароткі\",\n      \"description\": \"Крок вымярэння тэмпературы пры кароткім націсканні кнопак\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Крок T°\\nдоўгі\",\n      \"description\": \"Крок вымярэння тэмпературы пры доўгім націсканні кнопак\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Дазволіць\\nблок кнопак\",\n      \"description\": \"Падчас пайкі падоўжаны націск дзьвюх кнопак блакуе іх (Т=Толькі турба | П=Поўная блакіроўка)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Фазы\\nпрофілю\",\n      \"description\": \"Колькасць фаз у профільным рэжыме\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"T°\\nразагр.\",\n      \"description\": \"Разаграваць да гэтай тэмпературы ў пачатку профільнага рэжыму\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Хуткасть\\nразагр.\",\n      \"description\": \"Разаграваць з гэтай хуткасцю (градусы на секунду)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Фаза 1\\nтэмпература\",\n      \"description\": \"Мэтавая тэмпература ў канцы гэтай фазы\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Фаза 1\\nпрацягласць\",\n      \"description\": \"Мэтавая працягласць гэтай фазы (секунды)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Фаза 2\\nтэмпература\",\n      \"description\": \"Мэтавая тэмпература ў канцы гэтай фазы\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Фаза 2\\nпрацягласць\",\n      \"description\": \"Мэтавая працягласць гэтай фазы (секунды)\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Фаза 3\\nтэмпература\",\n      \"description\": \"Мэтавая тэмпература ў канцы гэтай фазы\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Фаза 3\\nпрацягласць\",\n      \"description\": \"Мэтавая працягласць гэтай фазы (секунды)\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Фаза 4\\nтэмпература\",\n      \"description\": \"Мэтавая тэмпература ў канцы гэтай фазы\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Фаза 4\\nпрацягласць\",\n      \"description\": \"Мэтавая працягласць гэтай фазы (секунды)\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Фаза 5\\nтэмпература\",\n      \"description\": \"Мэтавая тэмпература ў канцы гэтай фазы\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Фаза 5\\nпрацягласць\",\n      \"description\": \"Мэтавая працягласць гэтай фазы (секунды)\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Хуткасць\\nастывання\",\n      \"description\": \"Астуджаць з гэтай хуткасцю ў канцы профільнага рэжыму (градусы на секунду)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Адчувальн.\\nакселерометра\",\n      \"description\": \"Адчувальнасць акселерометра (1=Мін. | ... | 9=Макс.)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"T°\\nчакання\",\n      \"description\": \"Тэмпература рэжыму чакання\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Таймаўт\\nчакання\",\n      \"description\": \"Час да пераходу ў рэжым чакання (у секундах або хвілінах)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Таймаут\\nадкл.\",\n      \"description\": \"Час да адключэння паяльніка (у хвілінах)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Датчык Хола\\nадчувальнасць\",\n      \"description\": \"Адчувальнасць датчыка Хола да магнітаў (1=Мін. | ... | 9=Макс.)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"Датчык Хола\\nчас чакання\",\n      \"description\": \"Час перад рэжымам чакання, калі эфект Хола перавышае парог\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Адзінкі\\nтэмпературы\",\n      \"description\": \"Адзінкі вымярэння тэмпературы\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Арыентацыя\\nэкрана\",\n      \"description\": \"П=Правая рука | Л=Левая рука | А=Аўта\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Мігценне T°\\nпры астудж.\",\n      \"description\": \"Мігцець паказаннямі тэмпературы, пакуль джала яшчэ гарачае\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Хуткацсь\\nтексту\",\n      \"description\": \"Хуткасць гартання тэксту (М=марудна | Х=хутка)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Памяняць\\n+ і -\",\n      \"description\": \"Памяняць месцамі кнопкі вызначэння тэмпературы\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Памяняць\\nA і B\",\n      \"description\": \"Памяняць месцамі кнопкі навігацыі ў наладах\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Хуткасць\\nанімацыі\",\n      \"description\": \"Хуткасць анімацыі значкоў у галоўным меню (Н=Нізкая | С=Сярэдняя | В=Высокая)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Зацыкліць\\nанімацыю\",\n      \"description\": \"Зацыкліць анімацыю значкоў у галоўным меню\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Экран\\nЯркасць\",\n      \"description\": \"Рэгуляцыя яркасці OLED-экрана\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Экран\\nІнверсія\",\n      \"description\": \"Інверсія колераў OLED-экрана\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Працягл.\\nлагатыпа\",\n      \"description\": \"Усталяваць працягласць лагатыпа загрузкі (у секундах)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Падрабязны\\nрэжым чакання\",\n      \"description\": \"Адлюстроўваць дэталёвую інфармацыю паменьшаным шрыфтом на экране чакання\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Падрабязны\\nэкран пайкі\",\n      \"description\": \"Паказваць дэталёвую інформацыю паменьшаным шрыфтом на экране пайкі\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Уключыць BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Межы\\nмагутн.\",\n      \"description\": \"Сярэдняя максімальная магутнасць, якую можа выкарыстоўваць паяльнік (у ватах)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Калібр. CJC\\nпры наст. укл.\",\n      \"description\": \"Каліброўка тэмпературы (Cold Junction Compensation) пры наступным уключэнні (не патрабуецца, калі розніца тэмператур меньш за 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Калібр. увах.\\nнапруджання\",\n      \"description\": \"Каліброўка ўваходнага напруджання (доўгае націсканне для выхаду)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Імп. сілк.\\nМоц\",\n      \"description\": \"Моц імпульса, які ўтрымлівае ад сну крыніцу сілкавання (у ватах)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Імп. сілк.\\nЗатрымка\",\n      \"description\": \"Затрымка перад падачай імпульсу, які ўтрымлівае крыніцу сілкавання ад сну (x 2.5с)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Імп. сілк.\\nПрацягласць\",\n      \"description\": \"Працягласць імпульсу, які ўтрымлівае крыніцу сілкавання ад сну (x 250мс)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Скід\\nналад\",\n      \"description\": \"Скід налад да першапачатковых значэнняў\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Мова:\\n BE  Беларуская\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Тып\\nджала\",\n      \"description\": \"Абярыце тып усталяванага джала\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_BG.json",
    "content": "{\n  \"languageCode\": \"BG\",\n  \"languageLocalName\": \"Български\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Калибрирането\\nе завършено!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Нулиране\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Настройките бяха\\nнулирани!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Не е открит\\nакселерометър!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"Не е открито\\nUSB-PD захранване!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"ЗАКЛЮЧ\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"ОТКЛЮЧ\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!ЗАКЛЮЧ!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Неконтролируемо\\nпрегряване\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!КС на човка!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Преди рестартиране се уверете, че човка и дръжката са на стайна температурата!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"калибриране\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Сигурни ли сте, че искате да върнете фабричните настройки?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"НИС.НАПР.\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Ниско напрежение\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Входно V: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Сън...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Човка:\\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Загряване\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Охлаждане\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Вероятно, устройство е фалшификат!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Твърде горещо за\\nстартиране на профила\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"Д\",\n    \"SettingLeftChar\": \"Л\",\n    \"SettingAutoChar\": \"А\",\n    \"SettingSlowChar\": \"Н\",\n    \"SettingMediumChar\": \"С\",\n    \"SettingFastChar\": \"В\",\n    \"SettingStartSolderingChar\": \"З\",\n    \"SettingStartSleepChar\": \"С\",\n    \"SettingStartSleepOffChar\": \"П\",\n    \"SettingLockBoostChar\": \"Т\",\n    \"SettingLockFullChar\": \"П\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Настройки на\\nзахранването\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Настройки на\\nзапояване\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Авто\\nизключване\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Интерфейс\\n\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Допълнителни\\nнастройки\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Вкл.\\nPPSиERP\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"Изкл.\\n\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Вкл.без\\nискане\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Гранично\\nнапрежение\",\n      \"description\": \"Минимално напрежение, за да не се изтощи батерията (DC 10V) (S 3,3V за клетка)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Мин.\\nнапрежение\",\n      \"description\": \"Минимално допустимо напрежение на акумулаторна клетка (3S: 3 - 3,7V | 4-6S: 2,4 - 3,7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Напреж.\\nна QC\",\n      \"description\": \"Максимална напрежение с QC захранвания\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\nинтервал\",\n      \"description\": \"PD интервал за договаряне на захранването на стъпки от 100 мс за съвместимост с някои QC захранвания (0=Изкл.)\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nрежим\",\n      \"description\": \"Вкл.без искане: включи PPS и EPR без да искате повече мощност\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Турбо\\nтемп.\",\n      \"description\": \"Температурата за \\\"турбо\\\" режим\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Автоматичен\\nработен режим\",\n      \"description\": \"Режим на поялника при включване на захранването (З=Запояване | С=Сън | П=Покой на стайна температурата)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Промяна T\\nбързо\",\n      \"description\": \"Промяна на температурата при бързо натискане на бутон\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Промяна Т\\nзадържане\",\n      \"description\": \"Промяна на температурата при задържане на бутон\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Бутони за\\nзаключване\",\n      \"description\": \"Докато запоявате, задръжте двата бутона, за да превключите заключването им (Т=Турбо режим | П=Пълно)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Брой\\nетапи\",\n      \"description\": \"Броят на етапите в режим на термичен профил\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Температурата\\nна загряване\",\n      \"description\": \"Температурата на загряване в началото на режим на термичен профил\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Скорост на\\nзагряване\",\n      \"description\": \"Скорост на предварително загряване (градуси в секунда)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Етап 1\\nТемпературата\",\n      \"description\": \"Температурата в края на този етап\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Етап 1\\nПродължителност\",\n      \"description\": \"Продължителност на този етап (в секунди)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Етап 2\\nТемпературата\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Етап 2\\nПродължителност\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Етап 3\\nТемпературата\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Етап 3\\nПродължителност\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Етап 4\\nТемпературата\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Етап 4\\nПродължителност\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Етап 5\\nТемпературата\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Етап 5\\nПродължителност\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Скорост на\\nохлаждане\",\n      \"description\": \"Скорост на охлаждане в края на режим на термичен профил (градуси в секунда)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Чувствител.\\nна движение\",\n      \"description\": \"Чувствителност на движение на акселерометър (1=Слабо | ... | 9=Силно)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Темп.\\nсън\",\n      \"description\": \"Температурата при режим \\\"сън\\\"\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Време\\nсън\",\n      \"description\": \"Включване в режим \\\"сън\\\" (секунди | минути)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Време\\nизкл.\",\n      \"description\": \"Изключване след (минути)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Датчик\\nна Хол\",\n      \"description\": \"Чувствителност на сензора към магнитно поле (1=Слабо | ... | 9=Силно)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Интервалът преди началото на \\\"режим на заспиване\\\", когато ефектът на Хол надвиши прага\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Единици за\\nтемпературата\",\n      \"description\": \"Единици за температурата (C=Целзии | F=Фаренхайт)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Ориентация\\nна дисплея\",\n      \"description\": \"Ориентация на дисплея (Д=Дясна ръка | Л=Лява ръка | А=Авто)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Мигай при\\nтопъл поялник\",\n      \"description\": \"След изключване от работен режим, индикатора за температурата да мига докато човката на поялника все още е топла\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Скорост\\nна текста\",\n      \"description\": \"Скорост на движение на този текст (Н=Ниска | B=Висока)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Размяна\\nбутони +/-\",\n      \"description\": \"Обръщане на бутоните + и - за промяна на температурата на човка на поялника\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Скорост на\\nанимацията\",\n      \"description\": \"Скорост на анимация на иконата в главното меню (Н=Ниска | C=Средна | B=Висока)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Анимац.\\nцикъл\",\n      \"description\": \"Зациклена анимация на иконите в главното меню\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Яркост\\nна екрана\",\n      \"description\": \"Регулирайте яркостта на екрана\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Инвертиране\\nна екрана\",\n      \"description\": \"Инверсия на пикселите на екрана\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Продължит.\\nлогото\",\n      \"description\": \"Продължителност на логото за стартиране (в секунди)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Детайлен\\nекран в покой\",\n      \"description\": \"Покажи детайлна информация със ситен шрифт на екрана в режим на покой\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Детайлен\\nработен екран\",\n      \"description\": \"Детайлна информация в работен режим при запояване\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Включи BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Лимит на\\nмощност\",\n      \"description\": \"Максимална мощност на поялника (вати)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Калибриране\\nна темп.\",\n      \"description\": \"Калибриране на температурата (CJC) при следващо включване (не се изисква, ако разликата е по-малка от 5 °С)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Калибриране\\nнапрежение\",\n      \"description\": \"Калибриране на входното напрежение (задръжте бутонa за изход)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Захранващ\\nимпулс\",\n      \"description\": \"Поддържане на интензивност на захранващия импулс (вати)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Закъснение\\nна импулса\",\n      \"description\": \"Пауза между импулсите, които предпазват захранването от автоматично изключване (x 2,5 с)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Продължит.\\nна импулса\",\n      \"description\": \"Дължината на импулса, който предпазва захранването от автоматично изключване (x 250 мс)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Фабрични\\nнастройки\",\n      \"description\": \"Връщане на фабрични настройки\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Език:\\n BG   Български\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_CS.json",
    "content": "{\n  \"languageCode\": \"CS\",\n  \"languageLocalName\": \"Český\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Kalibrace\\ndokončena!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Reset OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Nějaká nastavení\\nbyla změněna!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Akcelerometr\\nnebyl detekován!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"Žádný IO USB-PD\\nnebyl detekován!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"ZAMČENO\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"ODEMČENO\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"ZAMČENO!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Teplotní\\nOchrana\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Zkrat na hrotu!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Před restartem se ujistěte, že hrot a držák mají pokojovou teplotu!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"kalibrování\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Opravdu chcete resetovat zařízení do továrního nastavení?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"Nízké DC\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Nízké napětí\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Napětí: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Režim spánku...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Hrot: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Předehřívání\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Zchlazování\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Vaše zařízení je pravěpodobně padělek!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Teplota příliš vysoká pro start profilu\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"P\",\n    \"SettingLeftChar\": \"L\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"P\",\n    \"SettingMediumChar\": \"S\",\n    \"SettingFastChar\": \"R\",\n    \"SettingStartSolderingChar\": \"P\",\n    \"SettingStartSleepChar\": \"S\",\n    \"SettingStartSleepOffChar\": \"M\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"U\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Napájecí\\nnastavení\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Pájecí\\nnastavení\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Režim\\nspánku\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Uživatelské\\nrozhraní\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Pokročilá\\nnastavení\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Zdroj\\nnapájení\",\n      \"description\": \"Při nižším napětí ukončit pájení (DC 10V)  (S 3,3V na článek, zakázat omezení napájení).\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimální\\nnapětí\",\n      \"description\": \"Minimální dovolené napětí po článku (3S: 3 - 3,7V | 4-6S: 2,4 - 3,7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Napětí\\nQC\",\n      \"description\": \"Maximální napětí QC pro jednání páječkou\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\ntimeout\",\n      \"description\": \"Maximální prodleva při jednání PD ve 100ms krocích pro kompatibilitu s některými QC nabíječkami\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"Povoluje režimy PPS & EPR\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Teplota\\nboostu\",\n      \"description\": \"Teplota hrotu v \\\"režimu boost\\\"\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Chování\\npři startu\",\n      \"description\": \"P=pájecí teplota | S=spánková teplota | M=zahřát hrot po pohybu\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Krok teploty\\nkrátký?\",\n      \"description\": \"Velikost přídavku při změně teploty krátkým stiskem tlačítka\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Krok teploty\\ndlouhý?\",\n      \"description\": \"Velikost přídavku při změně teploty dlouhým stiskem tlačítka\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Povolit zamč.\\ntlačítek\",\n      \"description\": \"Při pájení podržte obě tlačítka pro jejich zamčení (B=pouze v režimu boost | U=úplné zamčení)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profilové\\nFáze\",\n      \"description\": \"Počet fází v profilovém režimu\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Teplota\\nPředehřátí\",\n      \"description\": \"Teplota na kterou předehřát na začátku profilového režimu\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Rychlost\\nPředehřívání\",\n      \"description\": \"Rychlost předehřívání (stupně za sekundu)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Teplota\\nFáze 1\",\n      \"description\": \"Cílová teplota na konci této fáze\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Trvání\\nFáze 1\",\n      \"description\": \"Doba trvání této fáze (sekundy)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Teplota\\nFáze 2\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Trvání\\nFáze 2\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Teplota\\nFáze 3\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Trvání\\nFáze 3\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Teplota\\nFáze 4\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Trvání\\nFáze 4\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Teplota\\nFáze 5\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Trvání\\nFáze 5\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Rychlost\\nochlazování\",\n      \"description\": \"Rychlost ochlazování na konci profilového režimu (stupně za sekundu)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Citlivost\\nna pohyb\",\n      \"description\": \"1=nejméně citlivé | ... | 9=nejvíce citlivé\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Teplota\\nve spánku\",\n      \"description\": \"Teplota hrotu v režimu spánku.\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Čas\\ndo spánku\",\n      \"description\": \"\\\"Režim spánku\\\" naběhne v (s=sekundách | m=minutách)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Čas do\\nvypnutí\",\n      \"description\": \"Interval automatického vypnutí (m=minut)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Citlivost\\nHall. čidla\",\n      \"description\": \"Citlivost Hallova čidla pro detekci spánku (1=nejméně citlivé | ... | 9=nejvíce citlivé)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Interval před začátkem \\\"režimu spánku\\\", kdy Hallův efekt překročí práh\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Jednotka\\nteploty\",\n      \"description\": \"C=Celsius | F=Fahrenheit\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Orientace\\nobrazovky\",\n      \"description\": \"P=pravák | L=levák | A=automaticky\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Blikáni při\\nchladnutí\",\n      \"description\": \"Blikat teplotou při chladnutí dokud je hrot horký\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Rychlost\\nposouvání\",\n      \"description\": \"Rychlost posouvání popisků podobných tomuto (P=pomalu | R=rychle)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Prohodit\\ntl. +-?\",\n      \"description\": \"Prohodit tlačítka pro změnu teploty\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Anim.\\nrychlost\",\n      \"description\": \"Tempo animace ikon v menu (P=pomalu | S=středně | R=rychle)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Anim.\\nsmyčka\",\n      \"description\": \"Animovat ikony hlavního menu ve smyčce\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Jas\\nobrazovky\",\n      \"description\": \"Upravit jas OLED\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Invertovat\\nobrazovku\",\n      \"description\": \"Invertovat barvy na OLED\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Trvání\\nboot loga\",\n      \"description\": \"Nastavení doby trvání boot loga (s=sekundy)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Podrobná obr.\\nnečinnosti\",\n      \"description\": \"Zobrazit detailní informace malým fontem na obrazovce nečinnosti\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Podrobná obr.\\npájení\",\n      \"description\": \"Zobrazit detailní informace malým fontem na obrazovce pájení\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Povoluje BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Omezení\\nVýkonu\",\n      \"description\": \"Maximální příkon páječky (W=watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Kalibrovat CJC\\npři příštím startu\",\n      \"description\": \"Při příštím startu bude kalibrována kompenzace studeného spoje (není třeba pokud Delta T je < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Kalibrovat\\nvstupní napětí?\",\n      \"description\": \"Začít kalibraci vstupního napětí (dlouhý stisk pro ukončení)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Napájecí\\npulz\",\n      \"description\": \"Intenzita výkonu pulzu pro udržení páječky vzhůru (watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Prodleva\\nnapáj. pulzu\",\n      \"description\": \"Prodleva než je spuštěn pulz pro udržení páječky vzhůru pulzu pro udržení páječky vzhůru (x 2,5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Délka\\nnapáj. pulzu\",\n      \"description\": \"Délka pulzu pro udržení páječky vzhůru (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Obnovit tovární\\nnastavení?\",\n      \"description\": \"Obnovit všechna nastavení na výchozí\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Jazyk:\\n CS       Český\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_DA.json",
    "content": "{\n  \"languageCode\": \"DA\",\n  \"languageLocalName\": \"Dansk\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Kalibrering\\nFærdig!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Nulstil OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Visse indstillinger\\nEr blevet ændret!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"ingen accelerometer\\nfundet!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"ingen USB-PD IC\\nFundet!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"LÅST\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"ULÅST\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!LÅST!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Termisk\\nRunaway\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Tip Kortsluttet!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Før genstart, skal du sørge for, at tip & håndtag er ved stuetemperatur!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"kalibrering\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Er du sikker du vil resette indstillingerne til standard?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"Lav Volt\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Undervolt\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Input V: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Dvale...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Tip: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Forvarmning\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Nedkøling\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Din enhed er højst sandsyneligt en Kopivare!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"For varm til\\nat starte profil\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"H\",\n    \"SettingLeftChar\": \"V\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"S\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"F\",\n    \"SettingStartSolderingChar\": \"L\",\n    \"SettingStartSleepChar\": \"D\",\n    \"SettingStartSleepOffChar\": \"R\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"F\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Strøm\\nIndstillinger\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Lodde\\nIndstillinger\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Dvale\\nmode\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Bruger\\nGrændseflade\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Advancerede\\nIndstillinger\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Standard\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"Ingen\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Sikker\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nOpdag\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLang\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nKort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Strøm\\nKilde\",\n      \"description\": \"Strømforsyning. Indstil Cutoff Spændingen. (DC 10V) (S 3,3V per celle)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimum\\nSpænding\",\n      \"description\": \"Minimum tilladt spænding pr. celle (3S: 3 - 3,7V | 4-6S: 2,4 - 3,7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC\\nSpænding\",\n      \"description\": \"Max QC spænding Loddekolben skal forhandle sig til\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\ntimeout\",\n      \"description\": \"PD-forhandlingstimeout i trin på 100 ms for kompatibilitet med nogle QC-opladere\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"Ingen dynamisk deaktiverer EPR & PPS, sikker tilstand bruger ikke pad modstand\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Boost\\ntemp\",\n      \"description\": \"Temperatur i \\\"boost mode\\\"\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Start-up\\nOpførsel\",\n      \"description\": \"Start automatisk med lodning når strøm sættes til. (L=Lodning | D=Dvale tilstand | R=Dvale tilstand rumtemperatur)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Temp ændring\\nkort\",\n      \"description\": \"Temperatur-ændring-stigning ved kort tryk på knappen\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Temp ændring\\nlang\",\n      \"description\": \"Temperatur-ændring-stigning ved lang tryk på knappen\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Tillad låsning\\naf knapperne\",\n      \"description\": \"Hold begge knapper nede under lodning for at låse dem (B=kun boost-tilstand | F=fuld låsning)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profil\\nFaser\",\n      \"description\": \"Antal faser i profiltilstand\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Forvarmnings\\nTemp\",\n      \"description\": \"Forvarm til denne temperatur ved starten af profiltilstand\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Forvarmnings\\nHastighed\",\n      \"description\": \"Forvarm med denne hastighed (grader pr. sekund)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Fase 1\\nTemp\",\n      \"description\": \"Måltemperatur for slutningen af denne fase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Fase 1\\nVarighed\",\n      \"description\": \"Målvarigheden af denne fase (sekunder)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Fase 2\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Fase 2\\nVarighed\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Fase 3\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Fase 3\\nVarighed\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Fase 4\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Fase 4\\nVarighed\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Fase 5\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Fase 5\\nVarighed\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Nedkølings\\nHastighed\",\n      \"description\": \"Nedkøl med denne hastighed i slutningen af profiltilstand (grader pr. sekund)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Bevægelses\\nfølsomhed\",\n      \"description\": \"Bevægelsesfølsomhed (1=Mindst følsom | ... | 9=Mest følsom)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Dvale\\ntemp\",\n      \"description\": \"Dvale Temperatur (C)\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Dvale\\ntimeout\",\n      \"description\": \"Dvale Timeout (Minutter | Sekunder)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Sluknings\\ntimeout\",\n      \"description\": \"sluknings Timeout (Minutter)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Hall føler\\nfølsomhed\",\n      \"description\": \"følsomhed overfor magneten (1=Mindst følsom | ... | 9=Mest følsom)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"Hall føler\\nSovetid\",\n      \"description\": \"Intervallet før starten af \\\"dvaletilstand\\\", når Hall føleren overskrider tærsklen\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Temperatur\\nEnhed\",\n      \"description\": \"Temperatur Enhed (C=Celsius | F=Fahrenheit)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Skærm\\nOrientering\",\n      \"description\": \"Skærm Orientering (H=Højre Håndet | V=Venstre Håndet | A=Automatisk)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Køl ned\\nBlinkning\",\n      \"description\": \"Blink temperaturen på skærmen, mens spidsen stadig er varm.\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Scrolling\\nHastighed\",\n      \"description\": \"Hastigheden infotekst ruller forbi med (S=Langsom | F=Hurtigt)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Skift\\n+ - tasterne\",\n      \"description\": \"Skift tildeling af knapper til temperaturjustering\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Skift\\nA B keys\",\n      \"description\": \"Skift tildeling af knapper til indstillingsmenuen\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Anim.\\nHastighed\",\n      \"description\": \"Hastigheden for ikonanimationer i menuen (S=langsomt | M=medium | F=hurtigt)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Anim.\\nsløfe\",\n      \"description\": \"ikonanimation sløfe i hovedmenuen\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Skærm\\nlysstyrke\",\n      \"description\": \"Juster lysstyrken på OLED-skærmen\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"spejlvende\\nskærm\",\n      \"description\": \"spejlvende farverne på OLED-skærmen\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"opstartslogo\\nvarighed\",\n      \"description\": \"Indstiller varigheden for opstartslogoet (s=sekunder)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Detaljeret\\nStandby skærm\",\n      \"description\": \"Vis detialieret information med en mindre skriftstørrelse på standby skærmen.\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Detaljeret\\nloddeskærm\",\n      \"description\": \"Vis detaljeret information mens der loddes\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Aktivere BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Strøm\\nbegrænsning\",\n      \"description\": \"Maksimal effekt Loddekolben kan bruge (W=watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"kalibrere CJK\\nunder næste opstart\",\n      \"description\": \"Ved næste opstart vil tip Cold Junction Kompensation blive kalibreret (ikke påkrævet, hvis Delta T er < 5°C))\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Kalibrere\\ninput spændingen?\",\n      \"description\": \"VIN kalibrering. Knapperne justere, Lang tryk for at gå ud\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Strøm\\npuls\",\n      \"description\": \"Intensiteten af strøm for hold-vågen-puls (watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Strøm puls\\nForsinkelse\",\n      \"description\": \"Forsinkelse før hold-vågen-puls udløses (x 2,5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Strøm puls\\nvarighed\",\n      \"description\": \"Hold-vågen-pulsvarighed (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Gendan fabriks\\nIndstillinger\",\n      \"description\": \"Gendan alle indstillinger\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Sprog:\\n DA       Dansk\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Lodde\\nTip Typen\",\n      \"description\": \"Vælg den type tip der er monteret\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_DE.json",
    "content": "{\n  \"languageCode\": \"DE\",\n  \"languageLocalName\": \"Deutsch\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Erfolgreich\\nkalibriert!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Reset OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Einstellungen\\nzurückgesetzt!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Bewegungssensor\\nnicht erkannt!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"USB-PD IC\\nnicht erkannt!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"GESPERRT\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"ENTSPERRT\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!GESPERRT!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Thermal\\nRunaway\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Lötspitze\\nkurzgeschlossen!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Vor dem Neustart bitte sicherstellen, dass Lötspitze & Gerät Raumtemperatur haben!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"kalibriere\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Sicher, dass alle Werte zurückgesetzt werden sollen?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"V niedr.\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Unterspannung\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"V Eingang: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Ruhemodus...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Temp: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Vorwärmen\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Abkühlen\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Höchstwahrscheinlich ist das Gerät eine Fälschung!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Zu heiß für\\nProfilstart!\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"R\",\n    \"SettingLeftChar\": \"L\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"L\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"S\",\n    \"SettingStartSolderingChar\": \"L\",\n    \"SettingStartSleepChar\": \"R\",\n    \"SettingStartSleepOffChar\": \"K\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"V\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Energie-\\neinstellungen\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Löt-\\neinstellungen\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Ruhe-\\nmodus\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Anzeige-\\neinstellungen\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Erweiterte\\nEinstellungen\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Spannungs-\\nquelle\",\n      \"description\": \"Spannungsquelle (Abschaltspannung) (DC=10V | nS=n*3.3V für n LiIon-Zellen)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimale\\nSpannung\",\n      \"description\": \"Minimal zulässige Spannung pro Zelle (3S: 3 - 3,7V | 4-6S: 2,4 - 3,7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Spannungs-\\nmaximum\",\n      \"description\": \"Maximal zulässige Spannung der verwendeten Spannungsversorgung (V=Volt)\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\ntimeout\",\n      \"description\": \"PD Abfragedauer in 100ms Schritten (Kompatibilität mit best. QC-Ladegeräten)\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"Aktiviert PPS & EPR\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Boost-\\ntemperatur\",\n      \"description\": \"Temperatur der Lötspitze im Boostmodus\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Start im\\nLötmodus\",\n      \"description\": \"Heizverhalten beim Einschalten der Spannungsversorgung (L=Lötmodus | R=Ruhemodus | K=Ruhemodus mit kalter Spitze)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Temp-Schritt\\nDruck kurz\",\n      \"description\": \"Schrittweite für Temperaturänderung bei kurzem Tastendruck\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Temp-Schritt\\nDruck lang\",\n      \"description\": \"Schrittweite für Temperaturänderung bei langem Tastendruck\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Tasten-\\nsperre\",\n      \"description\": \"Langes Drücken beider Tasten im Lötmodus sperrt diese (B=nur Boost | V=vollständig)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile\\nPhasen\",\n      \"description\": \"Anzahl an Phasen im Profilmodus\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Vorheiz-\\ntemperatur\",\n      \"description\": \"Zu Beginn des Profilmodus auf diese Temperatur vorheizen\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Vorheiz-\\nrate\",\n      \"description\": \"Mit dieser Geschwindigkeit vorheizen (Grad pro Sekunde)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Phase 1\\nTemperatur\",\n      \"description\": \"Zieltemperatur zum Ende dieser Phase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Phase 1\\nDauer\",\n      \"description\": \"Dauer dieser Phase (Sekunden)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Phase 2\\nTemperatur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Phase 2\\nDauer\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Phase 3\\nTemperatur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Phase 3\\nDauer\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Phase 4\\nTemperatur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Phase 4\\nDauer\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Phase 5\\nTemperatur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Phase 5\\nDauer\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Abkühl-\\nrate\",\n      \"description\": \"Am Ende des Profilmodus mit dieser Geschwindigkeit abkühlen (Grad pro Sekunde)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Bewegungs-\\nempfindlichk.\",\n      \"description\": \"1=minimal | ... | 9=maximal\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Ruhe-\\ntemperatur\",\n      \"description\": \"Ruhetemperatur der Lötspitze\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Ruhever-\\nzögerung\",\n      \"description\": \"Dauer vor Übergang in den Ruhemodus (s=Sekunden | m=Minuten)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Abschalt-\\nverzög.\",\n      \"description\": \"Dauer vor automatischer Abschaltung (m=Minuten)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Empfindlichkeit\\nder Hall-Sonde\",\n      \"description\": \"Empfindlichkeit der Hall-Sonde um den Ruhemodus auszulösen (1=minimal | ... | 9=maximal)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Dauer vor dem Wechsel in den \\\"Ruhemodus\\\", nachdem die Hall-Sonde auslöst\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Temperatur-\\neinheit\",\n      \"description\": \"C=°Celsius | F=°Fahrenheit\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Anzeige-\\nausrichtung\",\n      \"description\": \"R=rechtshändig | L=linkshändig | A=automatisch\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Abkühl-\\nblinken\",\n      \"description\": \"Temperaturanzeige blinkt beim Abkühlen, solange Spitze heiß ist\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Scroll-\\ngeschw.\",\n      \"description\": \"Scrollgeschwindigkeit der Erläuterungen (L=langsam | S=schnell)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"+- Tasten\\numkehren\",\n      \"description\": \"Tastenbelegung zur Temperaturänderung umkehren\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"A B Tasten\\nvertauschen\",\n      \"description\": \"Umgekehrte Belegung der Tasten für das Einstellungsmenü\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Anim.\\nGeschw.\",\n      \"description\": \"Geschwindigkeit der Icon-Animationen im Menü (L=langsam | M=mittel | S=schnell)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Anim.\\nSchleife\",\n      \"description\": \"Icon-Animationen im Hauptmenü wiederholen\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Bildschirm-\\nhelligkeit\",\n      \"description\": \"Verändert die Helligkeit des OLED-Displays\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Farben\\numkehren\",\n      \"description\": \"Invertiert die Farben des OLED-Displays\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Startlogo-\\ndauer\",\n      \"description\": \"Legt die Dauer der Anzeige des Startlogos fest (s=Sekunden)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Detaillierte\\nRuheansicht\",\n      \"description\": \"Detaillierte Anzeige im Ruhemodus\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Detaillierte\\nLötansicht\",\n      \"description\": \"Detaillierte Anzeige im Lötmodus\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Aktiviert Bluetooth LE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Leistungs-\\nmaximum\",\n      \"description\": \"Durchschnittliche maximal zulässige Leistungsaufnahme des Lötkolbens (W=Watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Temperatur\\nkalibrieren\",\n      \"description\": \"Beim nächsten Start wird die Kaltstellenkompensation kalibriert (nicht nötig wenn Delta T < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Eingangsspannung\\nkalibrieren\",\n      \"description\": \"Kalibrierung der Eingangsspannung (Langer Tastendruck zum Verlassen)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Leistungs-\\nimpuls\",\n      \"description\": \"Powerbank mit einem Impuls wach halten (Watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Impuls-\\nverzögerung\",\n      \"description\": \"Dauer vor Abgabe von Wachhalteimpulsen (x 2,5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Impuls-\\ndauer\",\n      \"description\": \"Dauer des Wachhalteimpulses (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Einstellungen\\nzurücksetzen\",\n      \"description\": \"Werte auf Werkseinstellungen zurücksetzen\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Sprache:\\n DE     Deutsch\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Löt-\\nspitzentyp\",\n      \"description\": \"Wählen Sie den Typ der eingesetzten Spitze\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_EL.json",
    "content": "{\n  \"languageCode\": \"EL\",\n  \"languageLocalName\": \"Greek\",\n  \"tempUnitFahrenheit\": true,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Βαθμονόμηση\\nολοκληρώθηκε!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Επαν. OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Κάποιες ρυθμ.\\nάλλαξαν\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Δεν εντοπίστηκε\\nεπιταχυνσιόμετρο\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"Δεν εντοπίστηκε\\nκύκλωμα USB-PD\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"ΚΛΕΙΔ.\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"ΞΕΚΛΕΙΔ.\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"ΚΛΕΙΔΩΜΕΝΑ\\nΠΛΗΚΤΡΑ!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Θερμική\\nΦυγή\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Tip Shorted!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Πριν την επανεκκίνηση, βεβαιωθείτε ότι η μύτη και η συσκ. είναι σε θερμ. δωματίου!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"βαθμονόμηση\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Σίγουρα θέλετε επαναφορά αρχικών ρυθμίσεων;\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"Χαμηλ DC\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Υπόταση\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Είσοδος V: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Υπνος...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Μύτη: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Preheat\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Cooldown\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Η συσκευή σας ίσως να μην είναι αυθεντική!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Too hot to\\nstart profile\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"R\",\n    \"SettingLeftChar\": \"L\",\n    \"SettingAutoChar\": \"Α\",\n    \"SettingSlowChar\": \"Α\",\n    \"SettingMediumChar\": \"Μ\",\n    \"SettingFastChar\": \"Γ\",\n    \"SettingStartSolderingChar\": \"Κ\",\n    \"SettingStartSleepChar\": \"Ζ\",\n    \"SettingStartSleepOffChar\": \"Υ\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"Π\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Ρυθμίσεις\\nενέργειας\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Ρυθμίσεις\\nκόλλησης\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Λειτουργία\\nύπνου\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Διεπαφή\\nχρήστη\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Προηγμένες\\nρυθμίσεις\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Πηγή\\nενέργειας\",\n      \"description\": \"Πηγή ενέργειας. Oρισμός τάσης απενεργοποίησης. (DC 10V) (S 3.3V ανα μπαταρία, απενεργοποίηση ενεργειακού ορίου)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Ελάχιστη\\nτάση\",\n      \"description\": \"Ελάχιστη επιτρεπτή τάση ανα μπαταρία (3 σε σειρά: 3 - 3.7V | 4-6 σε σειρά: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Τάση\\nQC\",\n      \"description\": \"Μέγιστη τάση QC που να ζητείται από το τροφοδοτικό\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"χρονικό όριο\\nPD\",\n      \"description\": \"Χρονικό όριο διαπραγμάτευσης PD σε βήματα 100ms για συμβατότητα με κάποιους φορτιστές QC\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"Ενεργοποιεί λειτουργίες PPS & EPR.\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Θερμοκ.\\nboost\",\n      \"description\": \"Θερμοκρασία στη \\\"λειτουργία boost\\\"\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Ζέσταμα\\nκατά την εν.\",\n      \"description\": \"Κ=θερμ. κόλλησης | Z=αναμονή σε θερμοκρασία ύπνου μέχρι την κίνηση | Υ=αναμονή χωρίς ζέσταμα μέχρι την κίνηση\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Αλλαγή θερμοκ.\\nστιγμιαίο\",\n      \"description\": \"Βήμα αλλαγής θερμοκρασίας σε στιγμιαίο πάτημα πλήκτρου\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Αλλαγή θερμοκ.\\nπαρατεταμένο\",\n      \"description\": \"Βήμα αλλαγής θερμοκρασίας σε παρατεταμένο πάτημα πλήκτρου\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Κλείδωμα\\nπλήκτρων\",\n      \"description\": \"Κατά την κόλληση, κρατήστε και τα δύο πλήκτρα για κλείδωμα (B=μόνο λειτ. boost | Π=πλήρες κλείδωμα)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile\\nPhases\",\n      \"description\": \"Number of phases in profile mode\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Preheat\\nTemp\",\n      \"description\": \"Preheat to this temperature at the start of profile mode\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Preheat\\nSpeed\",\n      \"description\": \"Preheat at this rate (degrees per second)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Phase 1\\nTemp\",\n      \"description\": \"Target temperature for the end of this phase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Phase 1\\nDuration\",\n      \"description\": \"Target duration of this phase (seconds)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Phase 2\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Phase 2\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Phase 3\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Phase 3\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Phase 4\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Phase 4\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Phase 5\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Phase 5\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Cooldown\\nSpeed\",\n      \"description\": \"Cooldown at this rate at the end of profile mode (degrees per second)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Ευαισθησία\\nκίνησης\",\n      \"description\": \"1=λιγότερο ευαίσθητο | ... | 9=περισσότερο ευαίσθητο\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Θερμοκρ.\\nύπνου\",\n      \"description\": \"Θερμοκρασία μύτης σε λειτ. ύπνου\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Έναρξη\\nύπνου\",\n      \"description\": \"Χρονικό διάστημα πρίν την ενεργοποίηση λειτουργίας ύπνου (Δ=δευτ. | Λ=λεπτά)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Έναρξη\\nαπενεργ.\",\n      \"description\": \"Χρονικό διάστημα πρίν την απενεργοποίηση του κολλητηριού (Λ=λεπτά)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Ευαισθ. αισθ. \\nφαιν. Hall\",\n      \"description\": \"Ευαισθησία του αισθητήρα φαινομένου Hall για εντοπισμό αδράνειας (1=λιγότερο ευαίσθητο | ... | 9=περισσότερο ευαίσθητο)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Το διάστημα πριν από την \\\"λειτουργία ύπνου\\\" ξεκινά όταν το εφέ αίθουσας είναι πάνω από το όριο\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Μονάδες\\nθερμοκρασίας\",\n      \"description\": \"C=Κελσίου | F=Φαρενάιτ\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Διάταξη\\nοθόνης\",\n      \"description\": \"R=δεξιόχειρες | L=αριστερόχειρες | Α=αυτόματο\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Αναβοσβήσιμο\\nψύξης\",\n      \"description\": \"Αναβοσβήσιμο της ενδειξης θερμοκρασίας κατά την παύση θέρμανσης όταν η μύτη είναι ακόμα καυτή\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Ταχύτητα\\nκύλισης\",\n      \"description\": \"Ταχύτητα κύλισης κειμένου (Α=αργά | Γ=γρήγορα)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Αντιστροφή\\nπλήκτρων + -\",\n      \"description\": \"Αντιστροφή διάταξης πλήκτρων στη ρύθμιση θερμοκρασίας\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Ταχύτητα\\nκιν. εικονιδ.\",\n      \"description\": \"Ρυθμός κίνησης εικονιδίων στο μενού (Α=αργός | Μ=μέτριος | Γ=γρήγορος)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Επανάληψη\\nκιν. εικονιδ.\",\n      \"description\": \"Επανάληψη κίνησης εικονιδίων στο αρχικό μενού\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Αντίθεση\\nοθόνης\",\n      \"description\": \"Ρύθμιση φωτεινότητας οθόνης OLED\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Αντιστροφή\\nχρωμάτων\",\n      \"description\": \"Αντιστροφή χρωμάτων οθόνης OLED\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Διάρκεια\\nlogo εκκίνησης\",\n      \"description\": \"Διάρκεια εμφάνισης της εικόνας εκκίνησης (s=seconds)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Λεπτομερής\\nοθ. αδράνειας\",\n      \"description\": \"Προβολή λεπτομερών πληροφοριών σε μικρότερη γραμματοσειρά στην οθόνη αδράνειας\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Λεπτομερής\\nοθ. κόλλησης\",\n      \"description\": \"Προβολή λεπτομερών πληροφοριών σε μικρότερη γραμματοσειρά στην οθόνη κόλλησης\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Enables BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Ενεργειακό\\nόριο\",\n      \"description\": \"Μέγιστη ενέργεια που μπορεί να χρησιμοποιεί το κολλητήρι (W=watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Βαθμονόμηση CJC\\nσε επόμενη έναρξη\",\n      \"description\": \"Στην επόμενη εκκίνηση θα γίνει βαθμονόμηση θερμοκρασίας (δεν απαιτείται αν Δθερμ < 5 C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Βαθμονόμηση\\nτάσης εισόδου;\",\n      \"description\": \"Έναρξη βαθμονόμησης τάσης εισόδου (κράτημα για έξοδο)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Παλμός\\nενέργειας\",\n      \"description\": \"Ένταση ενέργειας παλμού διατήρησης λειτουργίας (W=watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Καθυστέρηση\\nπαλμού ενέργ.\",\n      \"description\": \"Καθυστέρηση πριν την ενεργοποίση παλμού διατήρησης λειτουργίας (x 2.5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Διάρκεια\\nπαλμού ενέργ.\",\n      \"description\": \"Διάρκεια παλμού διατήρησης ενέργειας (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Επαναφορά\\nεργ. ρυθμίσεων;\",\n      \"description\": \"Επαναφορά στις προεπιλεγμένες ρυθμίσεις\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Γλώσσα:\\n EL    Ελληνικά\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_EN.json",
    "content": "{\n  \"languageCode\": \"EN\",\n  \"languageLocalName\": \"English\",\n  \"tempUnitFahrenheit\": true,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Calibration\\ndone!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Reset OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Certain settings\\nchanged!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"No accelerometer\\ndetected!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"No USB-PD IC\\ndetected!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"LOCKED\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"UNLOCKED\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!LOCKED!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Thermal\\nRunaway\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Tip Shorted!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Before rebooting, make sure tip & handle are at room temperature!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"calibrating\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Are you sure you want to restore default settings?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"DC LOW\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Undervoltage\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Input V: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Sleeping...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Tip: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Preheat\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Cooldown\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Your device is most likely a counterfeit!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Too hot to\\nstart profile\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"R\",\n    \"SettingLeftChar\": \"L\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"S\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"F\",\n    \"SettingStartSolderingChar\": \"S\",\n    \"SettingStartSleepChar\": \"Z\",\n    \"SettingStartSleepOffChar\": \"R\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"F\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Power\\nsettings\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Soldering\\nsettings\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Sleep\\nmode\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"User\\ninterface\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Advanced\\nsettings\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Power\\nsource\",\n      \"description\": \"Set cutoff voltage to prevent battery overdischarge (DC=10V) (S=3.3V per cell, disable PWR limit)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimum\\nvoltage\",\n      \"description\": \"Minimum allowed voltage per battery cell (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC\\nvoltage\",\n      \"description\": \"Max QC voltage the iron should negotiate for\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\ntimeout\",\n      \"description\": \"PD negotiation timeout in 100ms steps for compatibility with some QC chargers\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"No Dynamic disables EPR & PPS, Safe mode does not use padding resistance\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Boost\\ntemp\",\n      \"description\": \"Tip temperature used in \\\"boost mode\\\"\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Start-up\\nbehavior\",\n      \"description\": \"S=heat to soldering temp | Z=standby at sleep temp until moved | R=standby without heating until moved\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Temp change\\nshort\",\n      \"description\": \"Temperature-change-increment on short button press\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Temp change\\nlong\",\n      \"description\": \"Temperature-change-increment on long button press\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Allow locking\\nbuttons\",\n      \"description\": \"While soldering, hold down both buttons to toggle locking them (B=boost mode only | F=full locking)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile\\nPhases\",\n      \"description\": \"Number of phases in profile mode\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Preheat\\nTemp\",\n      \"description\": \"Preheat to this temperature at the start of profile mode\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Preheat\\nSpeed\",\n      \"description\": \"Preheat at this rate (degrees per second)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Phase 1\\nTemp\",\n      \"description\": \"Target temperature for the end of this phase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Phase 1\\nDuration\",\n      \"description\": \"Target duration of this phase (seconds)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Phase 2\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Phase 2\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Phase 3\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Phase 3\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Phase 4\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Phase 4\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Phase 5\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Phase 5\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Cooldown\\nSpeed\",\n      \"description\": \"Cooldown at this rate at the end of profile mode (degrees per second)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Motion\\nsensitivity\",\n      \"description\": \"1=least sensitive | ... | 9=most sensitive\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Sleep\\ntemp\",\n      \"description\": \"Tip temperature while in \\\"sleep mode\\\"\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Sleep\\ntimeout\",\n      \"description\": \"Interval before \\\"sleep mode\\\" starts (s=seconds | m=minutes)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Shutdown\\ntimeout\",\n      \"description\": \"Interval before the iron shuts down (m=minutes)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Hall sensor\\nsensitivity\",\n      \"description\": \"Sensitivity to magnets (1=least sensitive | ... | 9=most sensitive)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Interval before \\\"sleep mode\\\" starts when hall effect is above threshold\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Temperature\\nunit\",\n      \"description\": \"C=°Celsius | F=°Fahrenheit\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Display\\norientation\",\n      \"description\": \"R=right-handed | L=left-handed | A=automatic\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Cooldown\\nflashing\",\n      \"description\": \"Flash temp reading at idle while tip is hot\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Scrolling\\nspeed\",\n      \"description\": \"Scrolling speed of info text (S=slow | F=fast)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Swap\\n+ - keys\",\n      \"description\": \"Reverse assignment of buttons for temperature adjustment\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Anim.\\nspeed\",\n      \"description\": \"Pace of icon animations in menu (S=slow | M=medium | F=fast)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Anim.\\nloop\",\n      \"description\": \"Loop icon animations in main menu\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Screen\\nbrightness\",\n      \"description\": \"Adjust the OLED screen brightness\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Invert\\nscreen\",\n      \"description\": \"Invert the OLED screen colors\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Boot logo\\nduration\",\n      \"description\": \"Set boot logo duration (s=seconds)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Detailed\\nidle screen\",\n      \"description\": \"Display detailed info in a smaller font on idle screen\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Detailed\\nsolder screen\",\n      \"description\": \"Display detailed info in a smaller font on soldering screen\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Enables BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Power\\nlimit\",\n      \"description\": \"Average maximum power the iron can use (W=watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Calibrate CJC\\nat next boot\",\n      \"description\": \"Calibrate Cold Junction Compensation at next boot (not required if Delta T is < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Calibrate\\ninput voltage\",\n      \"description\": \"Start VIN calibration (long press to exit)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Power\\npulse\",\n      \"description\": \"Intensity of power of keep-awake-pulse (W=watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Power pulse\\ndelay\",\n      \"description\": \"Delay before keep-awake-pulse is triggered (x 2.5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Power pulse\\nduration\",\n      \"description\": \"Keep-awake-pulse duration (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Restore default\\nsettings\",\n      \"description\": \"Reset all settings to default\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Language:\\n EN     English\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_ES.json",
    "content": "{\n  \"languageCode\": \"ES\",\n  \"languageLocalName\": \"Castellano\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"¡Calibracion\\nlista!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Listo\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"¡Ajustes\\nReiniciados!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"¡Acelerómetro no \\nDetectado!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"¡USB-PD no \\nDetectado!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"BLOQUEADO\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"DESBLOQUEADO\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"¡BLOQUEADO!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Térmico\\nFuera de control\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"¡Punta en cortocircuito!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"¡Antes de reiniciar, asegúrese de que la punta y el mango estén a temperatura ambiente!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"Calibrando\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"¿Quieres restablecer los ajustes?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"CC BAJA\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Voltaje bajo\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Voltaje: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"En reposo...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Punta: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Precalentado\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Enfriado\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"¡Es probable que su dispositivo sea falso!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Muy caliente para \\nempezar perfil\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"D\",\n    \"SettingLeftChar\": \"I\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"L\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"R\",\n    \"SettingStartSolderingChar\": \"S\",\n    \"SettingStartSleepChar\": \"R\",\n    \"SettingStartSleepOffChar\": \"F\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"F\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Potencia\\najustes\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Soldadura\\najustes\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Modos de\\nreposo\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Interfaz\\nde usuario\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Ajustes\\navanzados\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Modo por\\nDefecto\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"Dinámico\\nNo\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Modo\\nSeguro\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Fuente\\nde energía\",\n      \"description\": \"Elige el tipo de fuente para limitar el voltaje (DC 10V) (S 3,3V por pila, ilimitado)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Mínimo\\nvoltaje\",\n      \"description\": \"Voltaje mínimo permitido por célula (3S: 3 - 3,7V | 4-6S: 2,4 - 3,7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Potencia de\\nentrada\",\n      \"description\": \"Potencia en vatios del adaptador de corriente utilizado\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\ntiempo de espera\",\n      \"description\": \"Tiempo de espera de negociación de PD en pasos de 100ms para compatibilidad con algunos cargadores QC (0: apagado)\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"Permite modos PPS & EPR\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Ajustar la\\ntemp. extra\",\n      \"description\": \"Temperatura de la punta de \\\"modo boost\\\"\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Calentar\\nal enchufar\",\n      \"description\": \"Calentado automático al iniciar (S=entrar en modo soldar | R=solo entrar en reposo | F=en reposo pero mantiene la punta fría)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Cambio temp.\\npuls. cortas\",\n      \"description\": \"Aumento de la temperatura al pulsar brevemente un botón\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Cambio temp.\\npuls. largas\",\n      \"description\": \"Aumento de la temperatura al pulsar prolongadamente un botón\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Permitir botones\\nbloqueo\",\n      \"description\": \"Mientras suelda, mantenga pulsados ambos botones para alternar su bloqueo (B=sólo modo boost | F=bloqueo total)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Fases de\\nPerfil\",\n      \"description\": \"Numero de fases en modo perfil\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Temp de \\n precalentado\",\n      \"description\": \"Precalentar a esta temperatura al inicio del modo perfil\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Velocidad de \\nPrecalentado\",\n      \"description\": \"Precalentar a esta velocidad (grados por segundo)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Fase 1\\nTemp\",\n      \"description\": \"Temperatura objetivo al final de esta fase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Fase 1\\nDuración\",\n      \"description\": \"Duración objetivo de esta fase (segundos)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Fase 2\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Fase 2\\nDuración\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Fase 3\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Fase 3\\nDuración\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Fase 4\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Fase 4\\nDuración\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Fase 5\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Fase 5\\nDuración\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Velocidad de\\nEnfriamineto\",\n      \"description\": \"Enfriar a esta velocidad al final del modo perfil (grados por segundo)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Detección de\\nmovimiento\",\n      \"description\": \"Tiempo de reacción al agarrar (1=menos sensible | ... | 9=más sensible)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Temperatura\\nen reposo\",\n      \"description\": \"Temperatura de la punta en \\\"reposo\\\"\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Entrar\\nen reposo\",\n      \"description\": \"Tiempo de inactividad para entrar en reposo (min | seg)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Tiempo de\\napagado\",\n      \"description\": \"Tiempo de inactividad para apagarse (en minutos)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Hall Eff\\nSensibilidad\",\n      \"description\": \"Sensibilidad del sensor de efecto Hall en la detección de reposo (1=menos sensible | ... | 9=más sensible)\"\n    },\n    \"HallEffSleepTimeout\": {                                           \n      \"displayText\": \"Tiempo reposo\\nSensor Hall\", \n      \"description\": \"Intervalo antes de que \\\"modo resposo\\\" empiece cuando sensorhall supera límite\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Unidad de\\ntemperatura\",\n      \"description\": \"Unidad de temperatura (C=Centígrados | F=Fahrenheit)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Orientación\\nde pantalla\",\n      \"description\": \"Orientación de la pantalla (D=diestro | I=zurdo | A=automático)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Parpadear\\nal enfriar\",\n      \"description\": \"Parpadear texto en inactivo cuando la punta este caliente\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Velocidad\\ndel texto\",\n      \"description\": \"Velocidad de desplazamiento del texto (R=rápida | L=lenta)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Invertir\\nbotones +/-\",\n      \"description\": \"Invertir botones de ajuste de temperatura\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Cambiar\\nteclas A B\",\n      \"description\": \"Asignación inversa de botonos para el menú de configuración\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Anim.\\nvelocidad\",\n      \"description\": \"Velocidad de animaciones de iconos en el menú (L=baja | M=media | R=alta)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Anim.\\nbucle\",\n      \"description\": \"Bucle de animaciones del menú principal\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Pantalla\\nbrillo\",\n      \"description\": \"Ajusta el brillo de la pantalla OLED\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Invertir\\npantalla\",\n      \"description\": \"Invertir la pantalla OLED\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Logo inicial\\nduración\",\n      \"description\": \"Duración de la animación del logo inicial (s=segundos)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Info extra en\\nmodo reposo\",\n      \"description\": \"Mostrar información detallada en tamaño pequeño en la pantalla de reposo\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Info extra\\nal soldar\",\n      \"description\": \"Mostrar información detallada en tamaño pequeño en la pantalla de soldadura\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Habilitar BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Potencia\\nlímite\",\n      \"description\": \"Elige el límite de potencia máxima del soldador (en vatios)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Calibrar CJC\\nen el próximo inicio\",\n      \"description\": \"Al siguinte inicio la compensación de referencia será calibrada (no requerido si el Delta T es < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Calibrar voltaje\\nde entrada\",\n      \"description\": \"Iniciar calibración VIN (pulsación larga para salir)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Pulsos bat.\\nconstantes\",\n      \"description\": \"Intensidad de la potencia del pulso para mantener encendido (W=Vatio)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Tiempo entre\\n pulso de energia\",\n      \"description\": \"Tiempo de espera del pulso para mantener encendido (x 2,5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Duración de\\n pulso de energia\",\n      \"description\": \"Duración del pulso para mantener encendido (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Volver a ajustes\\nde fábrica\",\n      \"description\": \"Restablecer todos los ajustes por defecto\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Idioma:\\n ES  Castellano\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Tipo de\\nTpunta\",\n      \"description\": \"Selecciona la punta montada\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_ET.json",
    "content": "{\n  \"languageCode\": \"ET\",\n  \"languageLocalName\": \"Eesti\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Kalibreerimine\\ntehtud!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Vaikesätted\\ntaastatud\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Osad seadistused\\non muutunud!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Kiirendusandurit\\nei tuvastatud!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"USB-PD IC\\nei tuvastatud!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"LUKUS\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"AVATUD\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!LUKUS!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Termiline\\närajooks\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Otsik lühises!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Enne taaskäivitamist veenduge, et otsik ja käepide on toatemperatuuril!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"kalibreerimine\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Kas olete kindel, et soovite taastada vaikesätted?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"DC MADAL\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Alapinge\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Sisend V: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Unerežiim...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Otsik: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Eelkuumutus\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Jahtumine\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Teie seade on tõenäoliselt võltsing!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Liiga kuum,\\net alustada profiili\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"P\",\n    \"SettingLeftChar\": \"V\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"A\",\n    \"SettingMediumChar\": \"K\",\n    \"SettingFastChar\": \"T\",\n    \"SettingStartSolderingChar\": \"J\",\n    \"SettingStartSleepChar\": \"Z\",\n    \"SettingStartSleepOffChar\": \"P\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"T\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Toiteseaded\\n\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Jootmise\\nseaded\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Unerežiimi\\nseaded\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Kasutaja-\\nliides\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Täpsemad\\nseaded\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Toiteallikas\\nDC\",\n      \"description\": \"Määrab katkestuspinge, et vältida aku liigset tühjenemist. (DC 10V) (S=3,3V elemendi kohta, eemaldab voolupiirangud)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimaalne\\npinge\",\n      \"description\": \"Minimaalne lubatud pinge akuelemendi kohta (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC\\npinge\",\n      \"description\": \"Maks. QC pinge, mida jootekolb läbirääkima peaks\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\naegumine\",\n      \"description\": \"PD läbirääkimise aegumine 100ms sammudena, et tagada ühilduvus osade QC laadijatega\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"Võimaldab PPS- ja EPR-režiimi\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Boost\\ntemp\",\n      \"description\": \"Kolviotsiku temperatuur \\\"boost režiimis\\\"\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Käitumine\\nkäivitusel\",\n      \"description\": \"J=kuumuta jootmistemperatuurini | Z=unerežiim, kuni seadet liigutatakse | P=unerežiim toatemperatuuril, kuni seadet liigutatakse\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Temp. muut\\nlühike\",\n      \"description\": \"Temperatuuri muutmine lühikese vajutusega\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Temp. muut\\npikk\",\n      \"description\": \"Temperatuuri muutmine pika vajutusega\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Luba nuppude\\nlukustamine\",\n      \"description\": \"Hoidke jootmise ajal mõlemad nupud all, et lülitada nende lukustamist (B=ainult boostrežiimis | T=täielik lukustamine).\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profiil\\nfaasid\",\n      \"description\": \"Faaside arv profiilirežiimis\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Eelkuumutus\\ntemp.\",\n      \"description\": \"Eelkuumuta sellele temperatuurile profiilirežiimi alguses\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Eelkuumutus\\nkiirus\",\n      \"description\": \"Eelkuumuta sellise kiirusega (kraadi sekundis).\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Faas 1\\ntemp.\",\n      \"description\": \"Selle faasi lõpu sihttemperatuur\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Faas 1\\nkestus\",\n      \"description\": \"Selle faasi sihtkestus (sekundites)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Faas 2\\ntemp.\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Faas 2\\nkestus\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Faas 3\\ntemp.\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Faas 3\\nkestus\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Faas 4\\ntemp.\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Faas 4\\nkestus\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Faas 5\\ntemp.\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Faas 5\\nkestus\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Jahtumise\\nkiirus\",\n      \"description\": \"Jahtumine selle kiirusega profiilirežiimi lõpus (kraadi sekundis)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Liikumise\\ntundlikkus\",\n      \"description\": \"1=vähetundlikuim | ... | 9=kõige tundlikum\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Unerežiimi\\ntemp\",\n      \"description\": \"Kolviotsiku temperatuur \\\"unerežiimis\\\"\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Unerežiimi\\nviide\",\n      \"description\": \"Aeg enne \\\"unerežiimi\\\" algust (s=sekundid | m=minutid)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Seiskumise\\nviide\",\n      \"description\": \"Aeg enne jootekolvi välja lülitamist (m=minutid)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Halli anduri\\ntundlikkus\",\n      \"description\": \"Tundlikkus magnetite suhtes (1=vähetundlikum | ... | 9=kõige tundlikum)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Intervall enne \\\"unerežiimi\\\" käivitub, kui saaliefekt on üle läve\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Temperatuuri\\nühik\",\n      \"description\": \"C=°Celsius | F=°Fahrenheit\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Ekraani\\norienteeritus\",\n      \"description\": \"P=paremakäeline | V=vasakukäeline | A=automaatne\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Jahtumisel\\nvilkumine\",\n      \"description\": \"Vilguta otsiku temperatuuri, kui see jahtub ja on veel ohtlikult kuum\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Kerimise\\nkiirus\",\n      \"description\": \"Infoteksti kerimise kiirus (A = aeglane | K = kiire)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Vaheta\\n+ - nupud\",\n      \"description\": \"Temperatuurinuppude asukohtade vahetus\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Anim.\\nkiirus\",\n      \"description\": \"Menüüikoonide animatsiooni kiirus (A=aeglane | K=keskmine | T=tempokas)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Pidevad\\nanim.\",\n      \"description\": \"Esitage menüüs pidevalt animatsioone\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Ekraani\\nheledus\",\n      \"description\": \"Seadista OLED ekraani heledust\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Ekraani\\ninverteerimine\",\n      \"description\": \"Inverteeri OLED ekraani värvid\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Alguslogo\\nkestus\",\n      \"description\": \"Aeg, mille jooksul näidatakse logo peale kolvi käivitamist (s=sekundites)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Andmed\\npuhkeolekus\",\n      \"description\": \"Näita unerežiimis üksikasjalikumat teavet väiksemas kirjas\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Andmed\\njootmisel\",\n      \"description\": \"Näita jootmisel üksikasjalikumat teavet väiksemas kirjas\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Luba BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Võimsus-\\npiirang\",\n      \"description\": \"Suurim lubatud võimsus mida kolb võib kasutada (W=vatti)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Kalibr. CJC\\ntuleval käivit.\",\n      \"description\": \"Kalibreeri külmaühenduse kompensatsioon (CJC) järgmisel käivitamisel (ei ole vajalik, kui Delta T on < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Kalibreeri\\nsisendpinge\",\n      \"description\": \"Sisendpinge (VIN) kalibreerimine (väljumiseks vajutage pikalt)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Impulsi\\ntugevus\",\n      \"description\": \"Ärkvelolekuimpulsi tugevus (vattides). Vajalik, vältimaks akupanga uinumist.\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Impulsi\\nviivitus\",\n      \"description\": \"Viivitus enne ärkvelolekuimpulsi käivitumist (x 2,5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Impulsi\\nkestus\",\n      \"description\": \"Ärkvelolekuimpulsi kestus (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Taasta\\nvaikesätted\",\n      \"description\": \"Nulli kõik seadistused vaikesätetele\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Keel:\\n ET     Eesti\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_FI.json",
    "content": "{\n  \"languageCode\": \"FI\",\n  \"languageLocalName\": \"Suomi\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Kalibrointi\\nvalmis!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Tehdasasetukset\\npalautettu!\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Tehdasasetukset\\npalautettu!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Kiihtyvyysanturi\\npuuttuu!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"USB-PD IC\\npuuttuu!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"Näppäinlukko\\nkäytössä.\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"Näppäimet\\nkäytössä.\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!Näppäimet\\nlukittu!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"!Lämmönsäätelyn\\nhäiriö!\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Kärki\\noikosulussa!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Varmista laitteen ja kärjen huoneenlämpöisyys ennen uudelleenkäynnistystä!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"Kalibroidaan\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Haluatko varmasti palauttaa oletusarvot?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"DC jännite alhainen.\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Alijännite.\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Jännite: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Lepotila...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Kärki: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Esilämmitetään\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Jäähtyy\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Laite saattaa olla väärennös!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Lämpötila liian korkea\\nprofiilin aloitukseen!\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"O\",\n    \"SettingLeftChar\": \"V\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"A\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"S\",\n    \"SettingStartSolderingChar\": \"J\",\n    \"SettingStartSleepChar\": \"L\",\n    \"SettingStartSleepOffChar\": \"H\",\n    \"SettingLockBoostChar\": \"V\",\n    \"SettingLockFullChar\": \"K\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Virta-\\nasetukset\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Juotos-\\nasetukset\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Lepotilan\\nasetukset\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Käyttö-\\nliittymä\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Lisä-\\nasetukset\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"USB-PD\\noletus-t\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"USB-PD\\nvakaa-ti\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"USB-PD\\nturva-ti\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Virtalähde\\nDC\",\n      \"description\": \"Virtalähde. Asettaa katkaisujännitteen. (DC 10V) (S 3.3V per kenno, poistaa virtarajoitukset)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Pienin\\njännite\",\n      \"description\": \"Pienin sallittu jännite per kenno (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC\\njännite\",\n      \"description\": \"Ensisijainen maksimi QC jännite.\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\naikakatkais\",\n      \"description\": \"PD neuvottelun aikakatkaisu 100ms askelin joitakin QC-latureita varten.\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\ntila\",\n      \"description\": \"Vakaa tila ei käytä EPR & PPS, turva-tila ei käytä vastuksen pehmustusta.\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Tehostus-\\nlämpötila\",\n      \"description\": \"Tehostustilan lämpötila.\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Autom.\\nkäynnistys\",\n      \"description\": \"Käynnistää virrat kytkettäessä juotostilan automaattisesti. (J=juotostila | L=Lepotila | H=Lepotila huoneenlämpö)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Lämmön muutos\\nlyhyt painal.\",\n      \"description\": \"Lämpötilan muutos lyhyellä painalluksella.\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Lämmön muutos\\npitkä painal.\",\n      \"description\": \"Lämpötilan muutos pitkällä painalluksella.\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Salli nappien\\nlukitus\",\n      \"description\": \"Kolvatessa paina molempia näppäimiä lukitaksesi ne (V=vain tehostus | K=kaikki)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profiili\\nvaiheet\",\n      \"description\": \"Vaiheiden määrä profiilitilassa.\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Esilämmityksen\\nlämpötila\",\n      \"description\": \"Esilämmittää tähän lämpötilaan profiilitilan alussa.\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Esilämmityksen\\nnopeus\",\n      \"description\": \"Esilämmityksen nopeus (asteita/sekunti)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Vaiheen 1\\nTemp\",\n      \"description\": \"Kohdelämpötila tämän vaiheen lopussa.\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Vaiheen 1\\nkesto\",\n      \"description\": \"Tämän vaiheen ajankäyttö (sekunteina) Saattaa kestää kauemmin jos lämmitys hitaampaa.\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Vaiheen 2\\nlämpötila\",\n      \"description\": \"Kohdelämpötila tämän vaiheen lopussa.\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Vaiheen 2\\nkesto\",\n      \"description\": \"Tämän vaiheen ajankäyttö (sekunteina) Saattaa kestää kauemmin jos lämmitys hitaampaa.\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Vaiheen 3\\nlämpötila\",\n      \"description\": \"Kohdelämpötila tämän vaiheen lopussa.\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Vaiheen 3\\nkesto\",\n      \"description\": \"Tämän vaiheen ajankäyttö (sekunteina) Saattaa kestää kauemmin jos lämmitys hitaampaa.\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Vaiheen 4\\nlämpötila\",\n      \"description\": \"Kohdelämpötila tämän vaiheen lopussa.\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Vaiheen 4\\nkesto\",\n      \"description\": \"Tämän vaiheen ajankäyttö (sekunteina) Saattaa kestää kauemmin jos lämmitys hitaampaa.\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Vaiheen 5\\nlämpötila\",\n      \"description\": \"Kohdelämpötila tämän vaiheen lopussa.\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Vaiheen 5\\nkesto\",\n      \"description\": \"Tämän vaiheen ajankäyttö (sekunteina) Saattaa kestää kauemmin jos lämmitys hitaampaa.\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Jäähtymis\\nnopeus\",\n      \"description\": \"Jäähtymisnopeus profiilitilan lopussa (asteita sekunnissa)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Liikkeen\\nherkkyys\",\n      \"description\": \"1=vähäinen herkkyys | ... | 9=suurin herkkyys\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Lepotilan\\nlämpötila\",\n      \"description\": \"Kärjen lämpötila \\\"lepotilassa\\\"\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Lepotilan\\nviive\",\n      \"description\": \"\\\"Lepotilan\\\" ajastus (s=sekuntia | m=minuuttia)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Sammutus\\nviive\",\n      \"description\": \"Automaattisen sammutuksen ajastus (m=minuuttia)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Hall-\\nherk.\",\n      \"description\": \"Hall-efektianturin herkkyys lepotilan tunnistuksessa (1=vähäinen herkkyys | ... | 9=suurin herkkyys)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Aikaväli ennen \\\"lepotilaa\\\" alkaa, kun hall-efekti ylittää kynnyksen\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Lämpötilan\\nyksikkö\",\n      \"description\": \"C=celsius, F=fahrenheit\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Näytön\\nkierto\",\n      \"description\": \"O=oikeakätinen | V=vasenkätinen | A=automaattinen\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Jäähdytyksen\\nvilkutus\",\n      \"description\": \"Vilkuttaa jäähtyessä juotoskärjen lämpötilaa sen ollessa vielä vaarallisen kuuma\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Selityksien\\nnopeus\",\n      \"description\": \"Selityksien vieritysnopeus (H=hidas | N=nopea)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Suunnanvaihto\\n+ - näppäimille\",\n      \"description\": \"Lämpötilapainikkeiden suunnan vaihtaminen\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Animaation\\nnopeus\",\n      \"description\": \"Animaatioiden nopeus valikossa (A=alhainen | K=keskiverto | S=suuri)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Animaation\\ntoistaminen\",\n      \"description\": \"Toista animaatiot valikossa.\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Näytön\\nkirkkaus\",\n      \"description\": \"Säädä OLED-näytön kirkkautta.\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Käänteiset\\nvärit\",\n      \"description\": \"Asettaa käänteiset värit OLED-näyttöön.\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Käynnistysl\\naika näytöllä\",\n      \"description\": \"Aseta käynnistyslogon aika näytöllä (s=sekunteja)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Tiedot\\nlepotilassa\",\n      \"description\": \"Näyttää yksityiskohtaisemmat tiedot pienellä fontilla lepotilassa.\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Tarkempi\\njuotosnäyttö\",\n      \"description\": \"Näyttää yksityiskohtaisemmat tiedot pienellä fontilla juotostilassa\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"BLE käyttöön.\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Tehon-\\nrajoitus\",\n      \"description\": \"Suurin sallittu teho (Watti)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Kalibroi CJC\\nensi käynnist\",\n      \"description\": \"Ensi käynnistyksessä kärjen Cold Junction Compensation kalibroidaan (ei tarpeellista jos Delta T on < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Kalibroi\\ntulojännite?\",\n      \"description\": \"Tulojännitteen kalibrointi (VIN) (paina pitkään poistuaksesi)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Herätyspulssin\\nvoimakkuus\",\n      \"description\": \"Herätyspulssin voimakkuus (Watteina)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Pulssin\\nodotusaika\",\n      \"description\": \"Odotusaika herätyspulssin lähetykseen (x 2.5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Pulssin\\nkesto\",\n      \"description\": \"Herätyspulssin kesto (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Palauta\\ntehdasasetukset?\",\n      \"description\": \"Palauta kaikki asetukset oletusarvoihin\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Kieli:\\n FI       Suomi\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_FR.json",
    "content": "{\n  \"languageCode\": \"FR\",\n  \"languageLocalName\": \"Français\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Étalonnage\\nterminé !\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Réin. OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Réglages\\nréinitialisés !\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Accéléromètre\\nnon détecté !\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"USB-PD\\nnon détecté !\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"Verr.\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"Déverr.\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"! VERR. !\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Surchauffe\\ncritique\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Court-circuit Panne!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Avant de redémarrer, assurez-vous que la panne et la poignée sont à température ambiante !\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"Étalonnage\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Voulez-vous vraiment réinitialiser les paramètres aux valeurs par défaut ?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"DC FAIBLE\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Sous-tension\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Tension:\\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"En veille...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Panne:\\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Préchauffage\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Refroidissement\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Votre appareil semble être une contrefaçon !\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Trop chaud pour\\nactiver le profile\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"D\",\n    \"SettingLeftChar\": \"G\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"L\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"R\",\n    \"SettingStartSolderingChar\": \"A\",\n    \"SettingStartSleepChar\": \"V\",\n    \"SettingStartSleepOffChar\": \"O\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"V\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Paramètres\\nd'alim.\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Paramètres\\nde soudure\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Mode\\nveille\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Interface\\nutilisateur\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Options\\navancées\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Mode\\npar Défaut\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"Non\\nDynamique\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Mode\\nSécurisé\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Détéction\\nAuto.\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nCourt\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Source\\nd'alim.\",\n      \"description\": \"Source d'alimentation. Définit la tension de coupure (DC 10V) (S 3.3V par cellule, désactive la limite de puissance)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Tension\\nminimale\",\n      \"description\": \"Tension minimale autorisée par cellule (3S : 3 - 3.7V | 4-6S : 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Tension\\nQC\",\n      \"description\": \"Tension maximale désirée avec une alimentation QC\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"Délai\\nexpir. PD\",\n      \"description\": \"Délai de négociation PD par paliers de 100ms pour la compatibilité avec certains chargeurs QC\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"Mode\\nPD\",\n      \"description\": \"Le mode Non Dynamique désactive EPR & PPS, le mode Sécurisé n'utilise pas de résistance à la protection\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Temp.\\nboost\",\n      \"description\": \"Température utilisée en \\\"mode boost\\\"\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Chauffer\\nau démarrage\",\n      \"description\": \"A=activé | V=mode veille | O=mode veille à température ambiante\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Incrément\\nappui court\",\n      \"description\": \"Incrément de changement de température sur appui court\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Incrément\\nappui long\",\n      \"description\": \"Incrément de changement de température sur appui long\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Verrouiller\\nles boutons\",\n      \"description\": \"Pendant la soudure, appuyer sur les deux boutons pour les verrouiller (B=boost seulement | V=verr. total)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile\\nPhases\",\n      \"description\": \"Nombre de phases dans le mode de profile\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Temp.\\nPréchauffage\",\n      \"description\": \"Préchauffer à cette température au début du mode de profile\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Vitesse\\nPréchauffage\",\n      \"description\": \"Préchauffer à cette vitesse (degrés par seconde)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Temp.\\nPhase 1\",\n      \"description\": \"Température séléctionnée pour la fin de cette phase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Durée\\nPhase 1\",\n      \"description\": \"Durée séléctionnée pour cette phase (secondes)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Phase 2\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Phase 2\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Phase 3\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Phase 3\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Phase 4\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Phase 4\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Phase 5\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Phase 5\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Vitesse de\\nRefroidissement\",\n      \"description\": \"Refroidissement à ce rythme à la fin du mode profil (degrés par seconde)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Sensibilité\\nau mouvement\",\n      \"description\": \"1=très peu sensible | ... | 9=extrêmement sensible\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Temp.\\nveille\",\n      \"description\": \"Température de la panne en \\\"mode veille\\\"\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Délai\\nveille\",\n      \"description\": \"Délai avant mise en veille (s=secondes | m=minutes)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Délai\\narrêt\",\n      \"description\": \"Délai avant l'arrêt du fer à souder (m=minutes)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Sensibilité capteur\\neffet hall\",\n      \"description\": \"Sensibilité du capteur à effet Hall pour la mise en veille (1=peu sensible | ... | 9=très sensible)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"Temps de veille\\ncapteur effet hall\",\n      \"description\": \"Intervalle avant le démarrage du \\\"mode veille\\\" lorsque l'effet Hall est supérieur au seuil\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Unité de\\ntempérature\",\n      \"description\": \"C=Celsius | F=Fahrenheit\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Orientation\\nde l'écran\",\n      \"description\": \"D=droitier | G=gaucher | A=automatique\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Refroidir en\\nclignotant\",\n      \"description\": \"Faire clignoter la température lors du refroidissement tant que la panne est chaude\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Vitesse\\nde défilement\",\n      \"description\": \"Vitesse de défilement du texte (R=rapide | L=lent)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Inverser les\\ntouches + -\",\n      \"description\": \"Inverser les boutons d'ajustement de température\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Inverser les\\ntouches A B\",\n      \"description\": \"Inverser les boutons pour le menu Paramètres\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Vitesse\\nanim. icônes\",\n      \"description\": \"Vitesse des animations des icônes dans le menu (L=lente | M=moyenne | R=rapide)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Rejouer\\nanim. icônes\",\n      \"description\": \"Rejouer en boucle les animations des icônes dans le menu principal\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Luminosité\\nde l'écran\",\n      \"description\": \"Ajuster la luminosité de l'écran OLED\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Inverser\\nles couleurs\",\n      \"description\": \"Inverser les couleurs de l'écran OLED\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Durée logo\\ndémarrage\",\n      \"description\": \"Définit la durée d'affichage du logo au démarrage (s=secondes)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Écran veille\\ndétaillé\",\n      \"description\": \"Afficher les informations détaillées sur l'écran de veille\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Écran soudure\\ndétaillé\",\n      \"description\": \"Afficher les informations détaillées sur l'écran de soudure\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Activer le bluetooth basse consommation\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Limite de\\npuissance\",\n      \"description\": \"Puissance maximale utilisable (W=watts)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Étalonner CJC\\nau reboot\",\n      \"description\": \"Au prochain démarrage, la compensation de soudure froide (CJC) sera calibrée (non nécessaire si Delta T est < 5°C).\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Étalonner\\ntension d'entrée\",\n      \"description\": \"Étalonner tension d'entrée (appui long pour quitter)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Puissance\\nimpulsions\",\n      \"description\": \"Puissance des impulsions pour éviter la mise en veille des batteries (watts)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Délai entre\\nles impulsions\",\n      \"description\": \"Délai entre chaque impulsion pour empêcher la mise en veille (x 2.5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Durée des\\nimpulsions\",\n      \"description\": \"Durée des impulsions pour empêcher la mise en veille (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Réinitialisation\\nd'usine\",\n      \"description\": \"Réinitialiser tous les réglages\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Langue:\\n FR    Français\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Type\\nde panne\",\n      \"description\": \"Séléctionner le type de panne utilisé\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_HR.json",
    "content": "{\n  \"languageCode\": \"HR\",\n  \"languageLocalName\": \"Hrvatski\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Kalibracija\\ndovršena!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Reset OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Neke postavke\\nsu izmijenjene!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Akcelerometar\\nnije pronađen!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"USB-PD IC\\nnije pronađen!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"ZAKLJUČ\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"OTKLJUČ\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"ZAKLJUČ!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Neispravan\\ngrijač\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Tip Shorted!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Prije restarta provjerite da su vrh i ručka na sobnoj temperaturi!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"kalibriram\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Jeste li sigurni da želite sve postavke vratiti na tvorničke vrijednosti?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"BAT!!!\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"PRENIZAK NAPON\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Napon V: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"SPAVAM...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Vrh: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Preheat\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Cooldown\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Vaš uređaj je najvjerojatnije krivotvoren!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Too hot to\\nstart profile\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"D\",\n    \"SettingLeftChar\": \"L\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"S\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"B\",\n    \"SettingStartSolderingChar\": \"L\",\n    \"SettingStartSleepChar\": \"T\",\n    \"SettingStartSleepOffChar\": \"H\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"Z\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Postavke\\nnapajanja\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Postavke\\nlemljenja\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Ušteda\\nenergije\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Korisničko\\nsučelje\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Napredne\\nopcije\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Izvor\\nnapajanja\",\n      \"description\": \"Izvor napajanja. Postavlja napon isključivanja. (DC 10V) (S 3.3V po ćeliji)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Najniži\\nnapon\",\n      \"description\": \"Najniži dozvoljeni napon po ćeliji baterije (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Snaga\\nnapajanja\",\n      \"description\": \"Snaga modula za napajanje\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"USB-PD\\ntimeout\",\n      \"description\": \"Timeout za USB-Power Delivery u koracima od 100ms za kompatibilnost s nekim QC punjačima\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"No Dynamic disables EPR & PPS, Safe mode does not use padding resistance\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Boost\\ntemp\",\n      \"description\": \"Temperatura u pojačanom (Boost) načinu.\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Auto\\nstart\",\n      \"description\": \"Ako je aktivno, lemilica po uključivanju napajanja odmah počinje grijati. (L=lemljenje | T=spavanje toplo | H=spavanje hladno)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Korak temp\\nkratki pritisak\",\n      \"description\": \"Korak temperature pri kratkom pritisku tipke\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Korak temp\\ndugi pritisak\",\n      \"description\": \"Korak temperature pri dugačkom pritisku tipke\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Zaključavanje\\ntipki\",\n      \"description\": \"Tokom lemljenja, držite obje tipke kako biste ih zaključali ili otključali (B=zaključan boost | Z=zaključano sve)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile\\nPhases\",\n      \"description\": \"Number of phases in profile mode\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Preheat\\nTemp\",\n      \"description\": \"Preheat to this temperature at the start of profile mode\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Preheat\\nSpeed\",\n      \"description\": \"Preheat at this rate (degrees per second)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Phase 1\\nTemp\",\n      \"description\": \"Target temperature for the end of this phase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Phase 1\\nDuration\",\n      \"description\": \"Target duration of this phase (seconds)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Phase 2\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Phase 2\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Phase 3\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Phase 3\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Phase 4\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Phase 4\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Phase 5\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Phase 5\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Cooldown\\nSpeed\",\n      \"description\": \"Cooldown at this rate at the end of profile mode (degrees per second)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Osjetljivost\\npokreta\",\n      \"description\": \"Osjetljivost prepoznavanja pokreta. (1=najmanje osjetljivo | ... | 9=najosjetljivije)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Temp\\nspavanja\",\n      \"description\": \"Temperatura na koju se spušta lemilica nakon određenog vremena mirovanja (C | F)\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Vrijeme\\nspavanja\",\n      \"description\": \"Vrijeme mirovanja nakon kojega lemilica spušta temperaturu. (Minute | Sekunde)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Vrijeme\\ngašenja\",\n      \"description\": \"Vrijeme mirovanja nakon kojega će se lemilica ugasiti (Minute)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Osjetljivost\\nHall senzora\",\n      \"description\": \"Osjetljivost senzora magnetskog polja za detekciju spavanja (N=Najmanja | S=Srednja | V=Visoka)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Interval prije pokretanja \\\"načina mirovanja\\\" kada je Hall efekt iznad praga\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Jedinica\\ntemperature\",\n      \"description\": \"Jedinica temperature (C=Celzij | F=Fahrenheit)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Rotacija\\nekrana\",\n      \"description\": \"Orijentacija ekrana (D=desnoruki | L=ljevoruki | A=automatski)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Upozorenje\\npri hlađenju\",\n      \"description\": \"Bljeskanje temperature prilikom hlađenja, ako je lemilica vruća\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Brzina\\nporuka\",\n      \"description\": \"Brzina kretanja dugačkih poruka (B=brzo | S=sporo)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Zamjena\\n+ - tipki\",\n      \"description\": \"Zamjenjuje funkciju gornje i donje tipke za podešavanje temperature\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Brzina\\nanimacije\",\n      \"description\": \"Brzina animacije ikona u menijima (S=sporo | M=srednje | B=brzo)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Ponavljanje\\nanimacije\",\n      \"description\": \"Hoće li se animacije menija vrtiti u petlji - samo ako brzina animacije nije na \\\"Ugašeno\\\"\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Svjetlina\\nekrana\",\n      \"description\": \"Podešavanje svjetline OLED ekrana. Veća svjetlina može dugotrajno dovesti do pojave duhova na ekranu.\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Inverzija\\nekrana\",\n      \"description\": \"Inverzan prikaz slike na ekranu\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Trajanje\\nboot logotipa\",\n      \"description\": \"Trajanje prikaza boot logotipa (s=seconds)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Detalji\\npri čekanju\",\n      \"description\": \"Prikazivanje detaljnih informacija tijekom čekanja\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Detalji\\npri lemljenju\",\n      \"description\": \"Prikazivanje detaljnih informacija tijekom lemljenja\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Enables BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Ograničenje\\nsnage\",\n      \"description\": \"Najveća snaga koju lemilica smije vući iz napajanja (W=watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Kalibracija kod\\nsljed. starta\",\n      \"description\": \"Kod sljedećeg starta izvršit će se kalibracija (nije potrebno ako je pogreška manja od 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Kalibracija\\nnapajanja\",\n      \"description\": \"Kalibracija ulaznog napona napajanja (Podešavanje tipkama, dugački pritisak za kraj)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Snaga period.\\npulsa napajanja\",\n      \"description\": \"Intenzitet periodičkog pulsa kojega lemilica povlači kako se USB napajanje ne bi ugasilo (W=watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Interval per.\\npulsa nap.\",\n      \"description\": \"Razmak periodičkih pulseva koje lemilica povlači kako se USB napajanje ne bi ugasilo (x 2.5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Trajanje per.\\npulsa nap.\",\n      \"description\": \"Trajanje periodičkog pulsa kojega lemilica povlači kako se USB napajanje ne bi ugasilo (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Tvorničke\\npostavke\",\n      \"description\": \"Vraćanje svih postavki na tvorničke vrijednosti\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Jezik:\\n HR    Hrvatski\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_HU.json",
    "content": "{\n  \"languageCode\": \"HU\",\n  \"languageLocalName\": \"Magyar\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Kalibráció\\nkész!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Törlés OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Beállítások\\nvisszaállítva!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Nincs\\ngyorsulásmérő!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"Nincs\\nUSB-PD IC!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"LEZÁRVA\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"FELOLDVA\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!LEZÁRVA!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Kontrollálatlan\\nhőmérséklet!\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Tip Shorted!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Újraindítás előtt a hegy és az eszköz legyen szobahőmérsékletű!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"Kalibrálás\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Biztos visszaállítja a beállításokat alapértékekre?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"DC túl alacsony\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Alulfeszültség\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Bemenet V: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Alvás...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Hegy: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Preheat\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Cooldown\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Az eszköz valószínűleg nem eredeti!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Too hot to\\nstart profile\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"J\",\n    \"SettingLeftChar\": \"B\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"L\",\n    \"SettingMediumChar\": \"K\",\n    \"SettingFastChar\": \"Gy\",\n    \"SettingStartSolderingChar\": \"F\",\n    \"SettingStartSleepChar\": \"A\",\n    \"SettingStartSleepOffChar\": \"Sz\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"T\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Táp\\nbeállítások\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Forrasztási\\nbeállítások\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Alvási\\nmódok\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Felhasználói\\nfelület\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Haladó\\nbeállítások\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Áram\\nforrás\",\n      \"description\": \"Kikapcsolási feszültség beállítása (DC:10V | S:3.3V/LiPo cella | ki)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimum\\nfeszültség\",\n      \"description\": \"Minimális engedélyezett cellafeszültség (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Max. USB\\nfeszültség\",\n      \"description\": \"Maximális USB feszültség (QuickCharge)\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\nidőtúllépés\",\n      \"description\": \"PD egyeztetés időkerete (kompatibilitás QC töltőkkel) (x 100ms)\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"No Dynamic disables EPR & PPS, Safe mode does not use padding resistance\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Boost\\nhőmérséklet\",\n      \"description\": \"Hőmérséklet \\\"boost\\\" módban\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Automatikus\\nindítás\",\n      \"description\": \"Bekapcsolás után automatikusan lépjen forrasztás módba (F=forrasztás | A=alvó mód | Sz=szobahőmérséklet)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Hőm. állítás\\nrövid\",\n      \"description\": \"Hőmérséklet állítás rövid gombnyomásra (C | F)\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Hőm. állítás\\nhosszú\",\n      \"description\": \"Hőmérséklet állítás hosszú gombnyomásra (C | F)\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Lezárás\\nengedélyezés\",\n      \"description\": \"Forrasztás közben mindkét gombot hosszan lenyomva lezárja a kezelést (B=csak \\\"boost\\\" módban | T=teljes lezárás)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile\\nPhases\",\n      \"description\": \"Number of phases in profile mode\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Preheat\\nTemp\",\n      \"description\": \"Preheat to this temperature at the start of profile mode\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Preheat\\nSpeed\",\n      \"description\": \"Preheat at this rate (degrees per second)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Phase 1\\nTemp\",\n      \"description\": \"Target temperature for the end of this phase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Phase 1\\nDuration\",\n      \"description\": \"Target duration of this phase (seconds)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Phase 2\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Phase 2\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Phase 3\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Phase 3\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Phase 4\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Phase 4\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Phase 5\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Phase 5\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Cooldown\\nSpeed\",\n      \"description\": \"Cooldown at this rate at the end of profile mode (degrees per second)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Mozgás\\nérzékenység\",\n      \"description\": \"Mozgás érzékenység beállítása (1=legkevésbé érzékeny | ... | 9=legérzékenyebb)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Alvási\\nhőmérséklet\",\n      \"description\": \"Hőmérséklet alvó módban (C | F)\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Alvás\\nidőzítő\",\n      \"description\": \"Alvási időzítő (perc | másodperc)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Kikapcsolás\\nidőzítő\",\n      \"description\": \"Kikapcsolási időzítő (perc)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Alvásérzékelő\\nérzékenység\",\n      \"description\": \"Alvásérzékelő gyorsulásmérő érzékenysége (1=legkevésbé érzékeny | ... | 9=legérzékenyebb)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Az \\\"alvó üzemmód\\\" előtti intervallum akkor kezdődik, amikor a hall-effektus meghaladja a küszöbértéket\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Hőmérséklet\\nmértékegysége\",\n      \"description\": \"Hőmérséklet mértékegysége (C=Celsius | F=Fahrenheit)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Kijelző\\ntájolása\",\n      \"description\": \"Kijelző tájolása (J=jobbkezes | B=balkezes | A=automatikus)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Villogás\\nhűléskor\",\n      \"description\": \"Villogjon a hőmérséklet kijelzése hűlés közben, amíg a forrasztó hegy forró\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Görgetés\\nsebessége\",\n      \"description\": \"Szöveggörgetés sebessége\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"+/- gomb\\nmegfordítása\",\n      \"description\": \"Forrasztó hegy hőmérsékletállító gombok felcserélése\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Animáció\\nsebessége\",\n      \"description\": \"Menüikonok animációjának sebessége (L=lassú | K=közepes | Gy=gyors)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Folytonos\\nanimáció\",\n      \"description\": \"Főmenü ikonjainak folytonos animációja\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Képernyő\\nkontraszt\",\n      \"description\": \"Képernyő kontrasztjának állítása\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Képernyő\\ninvertálás\",\n      \"description\": \"Képernyő színeinek invertálása\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Boot logo\\nmegjelenítés\",\n      \"description\": \"Boot logo megjelenítési idejének beállítása (s=seconds)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Részletes\\nkészenlét\",\n      \"description\": \"Részletes információk megjelenítése kisebb betűméretben a készenléti képernyőn\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Részletes\\nforrasztás infó\",\n      \"description\": \"Részletes információk megjelenítése forrasztás közben\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Enables BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Teljesítmény\\nmaximum\",\n      \"description\": \"Maximális felvett teljesitmény beállitása\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Calibrate CJC\\nköv. indításnál\",\n      \"description\": \"Következő indításnál a hegy Cold Junction Compensation kalibrálása (nem szükséges ha Delta T kisebb mint 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Bemeneti fesz.\\nkalibrálása?\",\n      \"description\": \"Bemeneti feszültség kalibrálása (hosszan nyomva kilép)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Ébr. pulzus\\nnagysága\",\n      \"description\": \"Powerbankot ébrentartó áramfelvételi pulzusok nagysága (W)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Ébr. pulzus\\nidőköze\",\n      \"description\": \"Powerbankot ébrentartó áramfelvételi pulzusok időköze (x 2.5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Ébr. pulzus\\nidőtartama\",\n      \"description\": \"Powerbankot ébrentartó áramfelvételi pulzusok időtartama (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Gyári\\nbeállítások?\",\n      \"description\": \"Beállítások alaphelyzetbe állítása\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Nyelv:\\n HU      Magyar\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_IT.json",
    "content": "{\n  \"languageCode\": \"IT\",\n  \"languageLocalName\": \"Italiano\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Calibrazione\\ncompletata!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Reset OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Impostazioni\\nripristinate\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Accelerometro\\nnon rilevato\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"USB PD\\nnon rilevato\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"Blocc.\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"Sblocc.\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"BLOCCATO\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Temperatura\\nfuori controllo\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"Punta in cortocircuito!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Prima di riavviare assicurati che la punta e l'impugnatura siano a temperatura ambiente!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"Calibrazione in corso\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Ripristinare le impostazioni predefinite?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"DC BASSA\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"DC INSUFFICIENTE\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"V in: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Riposo\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Punta: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Preriscaldamento\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Raffreddamento\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"È probabile che questo dispositivo sia contraffatto!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Troppo caldo\\nper il profilo\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"D\",\n    \"SettingLeftChar\": \"S\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"L\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"V\",\n    \"SettingStartSolderingChar\": \"S\",\n    \"SettingStartSleepChar\": \"R\",\n    \"SettingStartSleepOffChar\": \"A\",\n    \"SettingLockBoostChar\": \"T\",\n    \"SettingLockFullChar\": \"C\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Opzioni\\nalimentaz\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Opzioni\\nsaldatura\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Risparmio\\nenergetico\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Interfaccia\\nutente\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Opzioni\\navanzate\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Modalità\\npredefinita\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"Modalità\\nstatica\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Modalità\\nsicura\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Rilevaz.\\nauto\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nlunga\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\ncorta\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Sorgente\\nalimentaz\",\n      \"description\": \"Imposta una tensione minima di alimentazione attraverso la selezione di una sorgente [DC: 10 V; 3S/4S/5S/6S: 3,3 V per cella]\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Tensione\\nmin celle\",\n      \"description\": \"Modifica la tensione di minima carica delle celle di una batteria Li-Po [3S: 3,0-3,7 V; 4S/5S/6S: 2,4-3,7 V]\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Tensione\\nQC\",\n      \"description\": \"Imposta la massima tensione negoziabile con un alimentatore Quick Charge [volt]\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"Abilitazione\\nUSB PD\",\n      \"description\": \"Imposta il tempo di negoziazione del protocollo USB Power Delivery con alimentatori compatibili [0: disattiva; multipli di 100 ms]\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"Modalità\\nUSB PD\",\n      \"description\": \"Abilita le modalità Power Delivery PPS ed EPR\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Temp\\nturbo\",\n      \"description\": \"Imposta la temperatura della funzione turbo [°C/°F]\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Avvio\\nautomatico\",\n      \"description\": \"Attiva automaticamente il saldatore quando viene alimentato [S: saldatura; R: riposo; A: temperatura ambiente]\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Temp passo\\nbreve\",\n      \"description\": \"Imposta il passo dei valori di temperatura per una breve pressione dei tasti\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Temp passo\\nlungo\",\n      \"description\": \"Imposta il passo dei valori di temperatura per una lunga pressione dei tasti\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Blocco\\ntasti\",\n      \"description\": \"Blocca i tasti durante la modalità saldatura; tieni premuto entrambi per bloccare o sbloccare [T: consenti Turbo; C: blocco completo]\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Fasi modalità\\nprofilo\",\n      \"description\": \"Imposta il numero di fasi da implementare per un profilo di riscaldamento personalizzato\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Temperatura\\npreriscaldamento\",\n      \"description\": \"Imposta la temperatura di preriscaldamento da raggiungere all'inizio del profilo di riscaldamento\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Velocità\\npreriscaldamento\",\n      \"description\": \"Imposta la velocità di preriscaldamento [°C/s]\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Temperatura\\nfase 1\",\n      \"description\": \"Imposta la temperatura da raggiungere alla fine di questa fase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Durata\\nfase 1\",\n      \"description\": \"Imposta la durata di questa fase [secondi]\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Temperatura\\nfase 2\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Durata\\nfase 2\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Temperatura\\nfase 3\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Durata\\nfase 3\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Temperatura\\nfase 4\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Durata\\nfase 4\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Temperatura\\nfase 5\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Durata\\nfase 5\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Velocità\\nraffreddamento\",\n      \"description\": \"Imposta la velocità di raffreddamento al termine del profilo di riscaldamento [°C/s]\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Sensibilità\\nal movimento\",\n      \"description\": \"Imposta la sensibilità al movimento per uscire dalla modalità riposo [1: minima; 9: massima]\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Temperatura\\nriposo\",\n      \"description\": \"Imposta la temperatura da mantenere in modalità riposo [°C/°F]\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Timer\\nriposo\",\n      \"description\": \"Imposta un timer per entrare in modalità riposo [secondi/minuti]\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Timer\\nspegnimento\",\n      \"description\": \"Imposta un timer per lo spegnimento [minuti]\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Sensore\\nHall\",\n      \"description\": \"Regola la sensibilità del sensore ad effetto Hall per entrare in modalità riposo [1: minima; 9: massima]\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"Timer\\nHall\",\n      \"description\": \"Imposta un timer per entrare in modalità riposo quando il sensore ad effetto Hall è al di sopra della soglia di attivazione [secondi]\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Unità di\\ntemperatura\",\n      \"description\": \"Scegli l'unità di misura per la temperatura [C: grado Celsius; F: grado Farenheit]\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Orientamento\\nschermo\",\n      \"description\": \"Imposta l'orientamento dello schermo [D: mano destra; S: mano sinistra; A: automatico]\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Avviso\\npunta calda\",\n      \"description\": \"Evidenzia il valore di temperatura durante il raffreddamento se la punta è ancora calda\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Velocità\\ntesto\",\n      \"description\": \"Imposta la velocità di scorrimento del testo [L: lenta; V: veloce]\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Inversione\\ntasti\",\n      \"description\": \"Inverti i tasti per aumentare o diminuire la temperatura della punta\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Inversione\\ntasti A/B\",\n      \"description\": \"Inverti il funzionamento dei tasti del saldatore all'interno del menù principale\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Velocità\\nanimazioni\",\n      \"description\": \"Imposta la velocità di riproduzione delle animazioni del menù principale [L: lenta; M: media; V: veloce]\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Ciclo\\nanimazioni\",\n      \"description\": \"Abilita la riproduzione ciclica delle animazioni del menù principale\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Luminosità\\nschermo\",\n      \"description\": \"Regola la luminosità dello schermo [1: minimo; 10: massimo]\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Inverti\\ncolori\",\n      \"description\": \"Inverti i colori dello schermo\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Durata\\nlogo\",\n      \"description\": \"Imposta la permanenza sullo schermo del logo iniziale [secondi]\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Interfaccia\\ntestuale\",\n      \"description\": \"Mostra informazioni dettagliate all'interno della schermata principale\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Dettagli\\nsaldatura\",\n      \"description\": \"Mostra informazioni dettagliate durante la modalità saldatura\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Abilita BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Limite\\npotenza\",\n      \"description\": \"Imposta il valore di potenza massima erogabile al saldatore [watt]\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Calibra T\\nall'avvio\",\n      \"description\": \"Calibra le rilevazioni di temperatura al prossimo riavvio (non necessario se lo scarto di temperatura è minore di 5 °C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Calibrazione\\ntensione\",\n      \"description\": \"Calibra la tensione in ingresso; regola con entrambi i tasti, tieni premuto il tasto superiore per uscire\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Potenza\\nimpulso\",\n      \"description\": \"Regola la potenza di un segnale di attività per prevenire lo standby eventuale dell'alimentatore [watt]\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Distanza\\nimpulsi\",\n      \"description\": \"Imposta il tempo che deve intercorrere tra un segnale di attività e il successivo [multipli di 2,5 s]\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Durata\\nimpulso\",\n      \"description\": \"Regola la durata del segnale di attività [multipli di 250 ms]\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Ripristino\\nimpostazioni\",\n      \"description\": \"Ripristina le impostazioni predefinite\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Lingua:\\n IT    Italiano\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Tipo di\\npunta\",\n      \"description\": \"Seleziona il modello della punta in uso\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_JA_JP.json",
    "content": "{\n  \"languageCode\": \"JA_JP\",\n  \"languageLocalName\": \"日本語\",\n  \"tempUnitFahrenheit\": true,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Calibration done!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"リセットOK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"初期化されました\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"加速度計未検出\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"PD IC未検出\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"ボタンロック\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"ロックを解除\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!入力ロック中!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"過熱\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Tip Shorted!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Before rebooting, make sure tip & handle are at room temperature!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"calibrating\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"設定をリセットしますか？\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"電圧が低すぎます\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Undervoltage\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Input V: \"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Sleeping...\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Tip: \"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Preheat\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Cooldown\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"このデバイスはおそらく偽造品です\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Too hot to start profile\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"右\",\n    \"SettingLeftChar\": \"左\",\n    \"SettingAutoChar\": \"自\",\n    \"SettingSlowChar\": \"遅\",\n    \"SettingMediumChar\": \"中\",\n    \"SettingFastChar\": \"速\",\n    \"SettingStartSolderingChar\": \"熱\",\n    \"SettingStartSleepChar\": \"待\",\n    \"SettingStartSleepOffChar\": \"室\",\n    \"SettingLockBoostChar\": \"ブ\",\n    \"SettingLockFullChar\": \"全\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"電源設定\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"半田付け設定\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"待機設定\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"UI設定\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"高度な設定\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"下限電圧\",\n      \"description\": \"下限電圧を指定する <DC=10V | S=セルあたり3.3V、電力制限を無効化>\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"最低電圧\",\n      \"description\": \"セルあたりの最低電圧 <ボルト> <3S: 3.0V - 3.7V, 4/5/6S: 2.4V - 3.7V>\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC電圧\",\n      \"description\": \"QC電源使用時に要求する目標電圧\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\ntimeout\",\n      \"description\": \"一部のQC電源との互換性のため、PDネゴシエーションをタイムアウトする時間 <x100ms（ミリ秒）>\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD VPDO\",\n      \"description\": \"No Dynamic disables EPR & PPS, Safe mode does not use padding resistance\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"ブースト温度\",\n      \"description\": \"ブーストモードで使用される温度\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"自動加熱\",\n      \"description\": \"電源投入時に自動的に加熱する <熱=半田付けモード | 待=スタンバイモード | 室=室温スタンバイモード>\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"温度変化 短\",\n      \"description\": \"ボタンを短く押した時の温度変化値\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"温度変化 長\",\n      \"description\": \"ボタンを長押しした時の温度変化値\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"ボタンロック\",\n      \"description\": \"半田付けモード時に両方のボタンを長押しし、ボタンロックする <ブ=ブーストのみ許可 | 全=すべてをロック>\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile Phases\",\n      \"description\": \"Number of phases in profile mode\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Preheat Temp\",\n      \"description\": \"Preheat to this temperature at the start of profile mode\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Preheat Speed\",\n      \"description\": \"Preheat at this rate (degrees per second)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Phase 1 Temp\",\n      \"description\": \"Target temperature for the end of this phase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Phase 1 Duration\",\n      \"description\": \"Target duration of this phase (seconds)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Phase 2 Temp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Phase 2 Duration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Phase 3 Temp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Phase 3 Duration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Phase 4 Temp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Phase 4 Duration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Phase 5 Temp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Phase 5 Duration\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Cooldown Speed\",\n      \"description\": \"Cooldown at this rate at the end of profile mode (degrees per second)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"動きの感度\",\n      \"description\": \"1=最低感度 | ... | 9=最高感度\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"待機温度\",\n      \"description\": \"スタンバイ時のコテ先温度\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"待機遅延\",\n      \"description\": \"スタンバイモードに入るまでの待機時間 <s=秒 | m=分>\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"自動オフ\",\n      \"description\": \"自動電源オフまでの待機時間 <m=分>\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"磁界感度\",\n      \"description\": \"スタンバイモードに入るのに使用される磁場センサーの感度 <1=最低感度 | ... | 9=最高感度>\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"ホール効果が閾値を超えたときに\\\"「スリープモード」\\\"が開始されるまでの間隔\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"温度単位\",\n      \"description\": \"C=摂氏 | F=華氏\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"画面の向き\",\n      \"description\": \"右=右利き | 左=左利き | 自=自動\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"冷却中に点滅\",\n      \"description\": \"加熱の停止後、コテ先が熱い間は温度表示を点滅する\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"スクロール速度\",\n      \"description\": \"テキストをスクロールする速さ <遅=遅い | 速=速い>\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"キー入れ替え\",\n      \"description\": \"温度設定時に+ボタンと-ボタンを入れ替える\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"動画の速度\",\n      \"description\": \"メニューアイコンのアニメーションの速さ <遅=低速 | 中=中速 | 速=高速>\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"動画をループ\",\n      \"description\": \"メニューアイコンのアニメーションをループする\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"画面輝度\",\n      \"description\": \"画面の明るさ・コントラストを変更する\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"色反転\",\n      \"description\": \"画面の色を反転する\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"起動画面\",\n      \"description\": \"起動画面の表示時間を設定する\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"詳細な待受画面\",\n      \"description\": \"待ち受け画面に詳細情報を表示する\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"詳細な作業画面\",\n      \"description\": \"半田付け画面に詳細情報を表示する\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\",\n      \"description\": \"Enables BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"電力制限\",\n      \"description\": \"最大電力を制限する <W=ワット>\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Calibrate CJC\",\n      \"description\": \"At next boot tip Cold Junction Compensation will be calibrated (not required if Delta T is < 5 C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"電圧校正\",\n      \"description\": \"入力電圧(VIN)の校正を開始する <長押しで終了>\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"電力パルス\",\n      \"description\": \"電源をオンに保つための電力パルス <ワット>\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"パルス間隔\",\n      \"description\": \"電源をオンに保つための電力パルスの時間間隔 <x2.5s（秒）>\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"パルス時間長\",\n      \"description\": \"電源をオンに保つための電力パルスの時間長 <x250ms（ミリ秒）>\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"設定をリセット\",\n      \"description\": \"すべての設定を初期化する\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"言語： 日本語\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_LT.json",
    "content": "{\n  \"languageCode\": \"LT\",\n  \"languageLocalName\": \"Lietuvių\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Kalibravimas\\natliktas!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Atstatyta\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Nust. \\natstatyti!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Nerastas\\nakselerometras!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"Nerastas\\nUSB-PD IC!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"UŽRAKIN\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"ATRAKIN\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!UŽRAK!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Perkaitimo\\npavojus\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Tip Shorted!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Before rebooting, make sure tip & handle are at room temperature!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"Kalibruojama\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Ar norite atstatyti nustatymus į numatytas reikšmes?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"MAŽ VOLT\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Žema įtampa\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Įvestis V: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Miegu...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Antg: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Preheat\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Cooldown\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Your device is most likely a counterfeit!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Too hot to\\nstart profile\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"D\",\n    \"SettingLeftChar\": \"K\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"L\",\n    \"SettingMediumChar\": \"V\",\n    \"SettingFastChar\": \"G\",\n    \"SettingStartSolderingChar\": \"T\",\n    \"SettingStartSleepChar\": \"M\",\n    \"SettingStartSleepOffChar\": \"K\",\n    \"SettingLockBoostChar\": \"T\",\n    \"SettingLockFullChar\": \"V\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Maitinimo\\nnustatymai\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Litavimo\\nnustatymai\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Miego\\nrežimai\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Naudotojo\\nsąsaja\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Išplėsti.\\nnustatymai\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Maitinimo\\nšaltinis\",\n      \"description\": \"Išjungimo įtampa. (DC 10V) (arba celių [S] kiekis [3.3V per celę])\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimalus\\nvoltažas\",\n      \"description\": \"Minimalus voltažas, kuris yra leidžiamas kiekvienam baterijos elementui (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC mait.\\nįtampa\",\n      \"description\": \"Maksimali QC maitinimo bloko įtampa\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\nlaikas\",\n      \"description\": \"PD suderinimo laikas žingsniais po 100ms suderinamumui su kai kuriais QC įkrovikliais\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"No Dynamic disables EPR & PPS, Safe mode does not use padding resistance\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Turbo\\ntemperat.\",\n      \"description\": \"Temperatūra turbo režimu\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Automatinis\\npaleidimas\",\n      \"description\": \"Ar pradėti kaitininti iš karto įjungus lituoklį (T=Taip | M=Miegas | K=Miegoti kambario temperatūroje)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Temp.keitim.\\ntrump.spust.\",\n      \"description\": \"Temperatūros keitimo žingsnis trumpai spustėlėjus mygtuką\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Temp.keitim.\\nilgas pasp.\",\n      \"description\": \"Temperatūros keitimo žingsnis ilgai paspaudus mygtuką\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Mygtukų\\nužraktas\",\n      \"description\": \"Lituodami, ilgai paspauskite abu mygtukus, kad juos užrakintumėte (T=leidžiamas tik Turbo režimas | V=Visiškas užrakinimas)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile\\nPhases\",\n      \"description\": \"Number of phases in profile mode\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Preheat\\nTemp\",\n      \"description\": \"Preheat to this temperature at the start of profile mode\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Preheat\\nSpeed\",\n      \"description\": \"Preheat at this rate (degrees per second)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Phase 1\\nTemp\",\n      \"description\": \"Target temperature for the end of this phase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Phase 1\\nDuration\",\n      \"description\": \"Target duration of this phase (seconds)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Phase 2\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Phase 2\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Phase 3\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Phase 3\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Phase 4\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Phase 4\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Phase 5\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Phase 5\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Cooldown\\nSpeed\",\n      \"description\": \"Cooldown at this rate at the end of profile mode (degrees per second)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Judesio\\njautrumas\",\n      \"description\": \"Judesio jautrumas (1=Mažiausias | ... | 9=Didžiausias)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Miego\\ntemperat.\",\n      \"description\": \"Antgalio temperatūra miego režimu\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Miego\\nlaikas\",\n      \"description\": \"Užmigimo laikas (sekundės | minutės)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Išjungimo\\nlaikas\",\n      \"description\": \"Išjungimo laikas (minutės)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Holo\\njutiklis\",\n      \"description\": \"Holo jutiklio jautrumas nustatant miegą (1=Mažiausias | ... | 9=Didžiausias)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Intervalas prieš \\\"miego režimą\\\" prasideda, kai salės efektas viršija slenkstį\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Temperatūros\\nvienetai\",\n      \"description\": \"Temperatūros vienetai (C=Celsijus | F=Farenheitas)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Ekrano\\norientacija\",\n      \"description\": \"Ekrano orientacija (D=Dešiniarankiams | K=Kairiarankiams | A=Automatinė)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Atvėsimo\\nmirksėjimas\",\n      \"description\": \"Ar mirksėti temperatūrą ekrane kol vėstantis antgalis vis dar karštas?\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Aprašymo\\ngreitis\",\n      \"description\": \"Greitis, kuriuo šis tekstas slenka\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Sukeisti + -\\nmygtukus?\",\n      \"description\": \"Sukeisti + - temperatūros keitimo mygtukus vietomis\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Sukeisti A B\\nmygtukus?\",\n      \"description\": \"Sukeisti nustatymų meniu mygtukus vietomis\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Animacijų\\ngreitis\",\n      \"description\": \"Paveiksliukų animacijų greitis meniu punktuose (L=Lėtas | V=Vidutinis | G=Greitas)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Animacijų\\npakartojimas\",\n      \"description\": \"Leidžia kartoti animacijas be sustojimo pagrindiniame meniu\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Ekrano\\nšviesumas\",\n      \"description\": \"Nustato OLED ekrano kontrastą/šviesumą.\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Ekrano\\ninvertavimas\",\n      \"description\": \"Invertuoja OLED ekrano spalvas\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Įkrovos logotipo\\ntrukmė\",\n      \"description\": \"Nustatykite įkrovos logotipo trukmę (s=sekundės)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Detalus lau-\\nkimo ekranas\",\n      \"description\": \"Ar rodyti papildomą informaciją mažesniu šriftu laukimo ekrane\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Detalus lita-\\nvimo ekranas\",\n      \"description\": \"Ar rodyti išsamią informaciją lituojant\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Enables BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Galios\\nriba\",\n      \"description\": \"Didžiausia galia, kurią gali naudoti lituoklis (Vatai)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Calibrate CJC\\nat next boot\",\n      \"description\": \"At next boot tip Cold Junction Compensation will be calibrated (not required if Delta T is < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Kalibruoti\\nįvesties įtampą?\",\n      \"description\": \"Įvesties įtampos kalibravimas. Trumpai paspauskite, norėdami nustatyti, ilgai paspauskite, kad išeitumėte.\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Galios\\npulso W\",\n      \"description\": \"Periodinis galios pulso intensyvumas maitinblokiui, neleidžiantis jam užmigti.\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Galios pulso\\ndažnumas\",\n      \"description\": \"Pasikartojantis laiko intervalas (x 2.5s), ties kuriuo kartojamas galios pulsas maitinblokiui, neleidžiantis jam užmigti\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Galios pulso\\ntrukmė\",\n      \"description\": \"Galios pulso aktyvioji trukmė (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Atstatyti\\nnustatymus?\",\n      \"description\": \"Nustato nustatymus į numatytuosius\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Kalba:\\n LT    Lietuvių\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_NB.json",
    "content": "{\n  \"languageCode\": \"NB\",\n  \"languageLocalName\": \"Norsk bokmål\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Calibration\\ndone!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Tilbakestilling OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Noen innstillinger\\nble endret!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Ingen akselerometer\\nfunnet!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"Ingen USB-PD IC\\nfunnet!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"LÅST\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"ÅPNET\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!LÅST!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Termisk\\nrømling\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Tip Shorted!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Before rebooting, make sure tip & handle are at room temperature!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"calibrating\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Er du sikker på at du vil tilbakestille til standardinnstillinger?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"Lavspenn\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Underspenning\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Innspenn.: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Dvale...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Spiss: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Preheat\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Cooldown\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Enheten din er sannsynligvis en forfalskning!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Too hot to\\nstart profile\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"H\",\n    \"SettingLeftChar\": \"V\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"S\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"F\",\n    \"SettingStartSolderingChar\": \"L\",\n    \"SettingStartSleepChar\": \"D\",\n    \"SettingStartSleepOffChar\": \"R\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"F\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Effekt-\\ninnst.\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Lodde-\\ninnst.\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Dvale-\\ninnst.\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Bruker-\\ngrensesn.\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Avanserte\\nvalg\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Kilde\\n\",\n      \"description\": \"Strømforsyning. Sett nedre spenning for automatisk nedstenging. (DC 10V) (S 3.3V per celle)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimum\\nspenning\",\n      \"description\": \"Minimum tillatt spenning per celle (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC-\\nspenning\",\n      \"description\": \"Maks QC-spenning bolten skal forhandle om\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD-\\ntidsavb.\",\n      \"description\": \"PD-forhandlingstidsavbrudd i steg på 100 ms for kompatibilitet med noen QC-ladere\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"No Dynamic disables EPR & PPS, Safe mode does not use padding resistance\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"KTmp\\n\",\n      \"description\": \"Temperatur i \\\"kraft-modus\\\"\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"AStart\\n\",\n      \"description\": \"Start automatisk med lodding når strøm kobles til. (L=Lodding | D=Dvale | R=Dvale romtemperatur)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Temp-endring\\nkort\",\n      \"description\": \"Hvor mye temperaturen skal endres ved kort trykk på knapp\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Temp-endring\\nlang\",\n      \"description\": \"Hvor mye temperaturen skal endres ved langt trykk på knapp\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Tillat å låse\\nknapper\",\n      \"description\": \"Mens du lodder, hold nede begge knapper for å bytte mellom låsemodus (B=kun boost | F=full lås)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile\\nPhases\",\n      \"description\": \"Number of phases in profile mode\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Preheat\\nTemp\",\n      \"description\": \"Preheat to this temperature at the start of profile mode\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Preheat\\nSpeed\",\n      \"description\": \"Preheat at this rate (degrees per second)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Phase 1\\nTemp\",\n      \"description\": \"Target temperature for the end of this phase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Phase 1\\nDuration\",\n      \"description\": \"Target duration of this phase (seconds)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Phase 2\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Phase 2\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Phase 3\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Phase 3\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Phase 4\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Phase 4\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Phase 5\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Phase 5\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Cooldown\\nSpeed\",\n      \"description\": \"Cooldown at this rate at the end of profile mode (degrees per second)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"BSensr\\n\",\n      \"description\": \"Bevegelsesfølsomhet (1=Minst følsom | ... | 9=Mest følsom)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"DTmp\\n\",\n      \"description\": \"Dvaletemperatur (C)\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"DTid\\n\",\n      \"description\": \"Tid før dvale (Minutter | Sekunder)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"AvTid\\n\",\n      \"description\": \"Tid før automatisk nedstenging (Minutter)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Hall-sensor\\nfølsomhet\",\n      \"description\": \"Sensitiviteten til Hall-effekt-sensoren for å detektere inaktivitet (1=Minst følsom | ... | 9=Mest følsom)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Intervall før \\\"dvalemodus\\\" starter når halleffekten er over terskelen\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"TmpEnh\\n\",\n      \"description\": \"Temperaturskala (C=Celsius | F=Fahrenheit)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"SkRetn\\n\",\n      \"description\": \"Skjermretning (H=Høyrehendt | V=Venstrehendt | A=Automatisk)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"KjBlnk\\n\",\n      \"description\": \"Blink temperaturen på skjermen mens spissen fortsatt er varm.\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"RullHa\\n\",\n      \"description\": \"Hastigheten på rulletekst\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Bytt\\n+ - kn.\",\n      \"description\": \"Bytt om på knappene for å stille temperatur\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Anim.\\nhastighet\",\n      \"description\": \"Hastigheten til animasjonene i menyen (S=slow | M=medium | F=fast)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Anim.\\nloop\",\n      \"description\": \"Loop ikon-animasjoner i hovedmenyen\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Skjerm-\\nlysstyrke\",\n      \"description\": \"Juster lysstyrken til OLED-skjermen\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Inverter\\nskjerm\",\n      \"description\": \"Inverter fargene på OLED-skjermen\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Oppstartlogo\\nvarighet\",\n      \"description\": \"Setter varigheten til oppstartlogoen (s=sekunder)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"AvDvSk\\n\",\n      \"description\": \"Vis detaljert informasjon med liten skrift på dvaleskjermen.\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"AvLdSk\\n\",\n      \"description\": \"Vis detaljert informasjon ved lodding\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Enables BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Effekt-\\ngrense\",\n      \"description\": \"Maks effekt jernet kan bruke (W=watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"TempKal?\\n\",\n      \"description\": \"At next boot tip Cold Junction Compensation will be calibrated (not required if Delta T is < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"KalSpIn?\\n\",\n      \"description\": \"Kalibrer spenning. Knappene justerer. Langt trykk for å gå ut\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Effekt-\\npuls\",\n      \"description\": \"Hvor høy effekt pulsen for å holde laderen våken skal ha (watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Effektpuls\\nforsink.\",\n      \"description\": \"Forsinkelse før effektpulsen utløses (x 2.5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Effektpuls\\nvarighet\",\n      \"description\": \"Hvor lenge holde-våken-pulsen varer (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"TilbStl?\\n\",\n      \"description\": \"Tilbakestill alle innstillinger\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Språk:\\n NB    Norsk bm\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_NL.json",
    "content": "{\n  \"languageCode\": \"NL\",\n  \"languageLocalName\": \"Nederlands\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Kalibratie\\nklaar!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Reset OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Sommige instellingen\\nzijn veranderd!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Geen accelerometer\\ngedetecteerd!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"Geen USB-PD IC\\ngedetecteerd!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"GEBLOKKEERD\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"VRIJ\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!GEBLOKKEERD!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Thermisch\\nop hol geslagen\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Kortgesloten Soldeerpunt!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Voordat je opnieuw opstart: zorg dat de soldeerpunt op kamertemperatuur is!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"Kalibreren\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Weet je zeker dat je de fabrieksinstellingen terug wilt zetten?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"DC Laag\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Te lage spanning\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Ingangs spanning: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Slaapt...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Punt: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Voorverwarmen\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Afkoelen\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Jou apparaat is waarschijnlijk een namaak!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Te warm om\\nprofiel te starten\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"R\",\n    \"SettingLeftChar\": \"L\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"L\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"S\",\n    \"SettingStartSolderingChar\": \"T\",\n    \"SettingStartSleepChar\": \"S\",\n    \"SettingStartSleepOffChar\": \"Z\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"V\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Energie-\\ninstellingen\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Soldeer\\ninstellingen\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Slaap-\\nstand\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Gebruiker-\\nsomgeving\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Geavanceerde\\ninstellingen\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Vermogens\\nbron\",\n      \"description\": \"Minimale spanning om de batterij te beschermen tegen te ver ontladen (DC 10V) (S=3,3V per cell, zet PWR limiet uit)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimum\\nspanning\",\n      \"description\": \"Minimale toegelaten voltage per cel (3S: 3 - 3,7V | 4-6S: 2,4 - 3,7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC\\nspanning\",\n      \"description\": \"Maximale QC spanning de soldeerbout zou moeten aanvragen\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD ver-\\nloop tijd\",\n      \"description\": \"PD onderhandelings verlooptijd, afstemmingsduur in stappen van 100 ms (voor compatibiliteit met sommige QC laders)\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"Zet PPS & EPR modes aan\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Boost\\ntemp\",\n      \"description\": \"Tip temperatuur tijdens \\\"boost-modus\\\"\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"start-\\ngedrag\",\n      \"description\": \"T=verwarm naar soldeer temp | S=standby op slaap temp tot bewogen | Z=standby zonder verwarmen tot bewogen\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"temp veran-\\ndering kort\",\n      \"description\": \"Temperatuur veranderings stap bij korte druk op de knop\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"temp veran-\\ndering lang\",\n      \"description\": \"Temperatuur veranderings stap bij lange druk op de knop\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Vergrendel-\\nings knoppen\",\n      \"description\": \"Houd tijdens het solderen beide knoppen ingedrukt om de vergrendeling in of uit te schakelen (B=alleen boost-modus | V=volledige vergrendeling)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profiel\\nfases\",\n      \"description\": \"Nummer van fases in profiel modus\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Voorverwarm\\ntemperatuur\",\n      \"description\": \"Voorverwarm naar deze temperatuur op de start van profiel modus\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Voorverwarm\\nsnelheid\",\n      \"description\": \"Voorverwarm op deze snelheid (graden per seconden)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Fase 1\\ntemperatuur\",\n      \"description\": \"Doel temperatuur op het einde van deze fase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Fase\\nduur\",\n      \"description\": \"Doel tijdsduur van deze fase (in seconden)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Fase 2\\ntemperatuur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Fase 2\\nduur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Fase 3\\ntemperatuur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Fase 3\\nduur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Fase 4\\ntemperatuur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Fase 4\\nduur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Fase 5\\ntemperatuur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Fase 5\\nduur\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Afkoel\\nsnelheid\",\n      \"description\": \"De snelheid van afkoelen op het eind van profiel modus (graden per seconden)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Bewegings-\\ngevoeligheid\",\n      \"description\": \"Bewegingsgevoeligheid (1=minst gevoelig | ... | 9=meest gevoelig)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Slaap\\ntemp\",\n      \"description\": \"Temperatuur in slaapstand (°C)\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Slaap ver-\\ntraging\",\n      \"description\": \"Interval voor \\\"slaap stand\\\" start (Minuten | Seconden)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Uitschakel\\nna\",\n      \"description\": \"Automatisch afsluiten na (Minuten)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Hall sensor\\ngevoeligheid\",\n      \"description\": \"Gevoeligheid naar de magneten (1=minst gevoelig | ... | 9=meest gevoelig)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Interval voordat de \\\"slaapmodus\\\" start wanneer het Hall-effect boven de drempelwaarde komt\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Temperatuur\\neenheid\",\n      \"description\": \"C=°Celsius | F=°Fahrenheit\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Scherm-\\noriëntatie\",\n      \"description\": \"R=Rechtshandig | L=Linkshandig | A=Automatisch\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Afkoel\\nknipper\",\n      \"description\": \"Temperatuur knippert in hoofdmenu tijdens afkoeling\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Scroll\\nsnelheid\",\n      \"description\": \"Scrollsnelheid van de tekst. (Langzaam | Snel)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Wissel\\n+ - knoppen\",\n      \"description\": \"Wissel de knoppen voor temperatuur controle om\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Anim.\\nsnelheid\",\n      \"description\": \"Snelheid van de icoon animaties in het menu (Langzaam | Middel | Snel)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Anim.\\nherhaling\",\n      \"description\": \"Herhaal icoon animaties in hoofdmenu\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Scherm\\nhelderheid\",\n      \"description\": \"Verander de helderheid van het OLED scherm\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Inverteer\\nscherm\",\n      \"description\": \"Keer de kleuren van het OLED scherm om\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Opstart\\nlogo duur\",\n      \"description\": \"Zet het duur van het opstart logo (s=seconden)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Detail\\nslaapscherm\",\n      \"description\": \"Gedetailleerde informatie in een kleiner lettertype in het slaapscherm\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Detail\\nsoldeerscherm\",\n      \"description\": \"Gedetailleerde informatie in kleiner lettertype in soldeerscherm\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Blue-\\ntooth\",\n      \"description\": \"Zet Bluetooth aan\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"P\\nlimiet\",\n      \"description\": \"Gemiddelde maximale vermogen dat de soldeerbout mag gebruiken (W=watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Kalibreer CJC\\nbij opstart\",\n      \"description\": \"Bij de volgende opstart tip \\\"Cold Junction Compensation\\\" wordt gekalibreerd (niet nodig als Delta T < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Kalibreer vo-\\nedingsspanning\",\n      \"description\": \"VIN Kalibreren (lang in te drukken om te annuleren)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Power\\npuls\",\n      \"description\": \"Power van de aanhoud puls (W=watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Energie pulse\\nvertraging\",\n      \"description\": \"Vertraging voordat de aanhoud puls wordt geactiveerd (x 2,5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Power pulse\\nduur\",\n      \"description\": \"Aanhoud pulse duur (x 250 ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Instellingen\\nresetten?\",\n      \"description\": \"Alle instellingen terug zetten naar fabrieksinstellingen\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Taal:\\n NL  Nederlands\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_NL_BE.json",
    "content": "{\n  \"languageCode\": \"NL_BE\",\n  \"languageLocalName\": \"Vlaams\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Calibratie\\ngedaan!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Reset OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Sommige settings\\nzijn veranderd!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Geen accelerometer\\ngedectecteerd!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"Geen USB-PD IC\\ngedetecteerd!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"LOCKED\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"UNLOCKED\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!LOCKED!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Thermisch\\nop hol geslagen\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Soldeerpunt kortgesloten!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Voordat je opnieuw opstart: stel zeker dat de soldeerpunt op kamertemperatuur is!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"Calibreren\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Weet je zeker dat je de fabrieksinstellingen terug wilt zetten?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"Onderspanning\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Onderspanning\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Voedingsspanning: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Slaapstand...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Punt: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Preheat\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Cooldown\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Jou apparaat is waarschijnlijk namaak!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Te warm om\\nprofiel te starten!\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"R\",\n    \"SettingLeftChar\": \"L\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"T\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"S\",\n    \"SettingStartSolderingChar\": \"T\",\n    \"SettingStartSleepChar\": \"S\",\n    \"SettingStartSleepOffChar\": \"K\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"F\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Vermogens-\\ninstellingen\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Soldeer\\ninstellingen\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Slaap-\\nstanden\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Gebruikers-\\ninterface\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Geavanceerde\\ninstellingen\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Spannings-\\nbron\",\n      \"description\": \"Minimale toegelate voltage\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimum\\nvoltage\",\n      \"description\": \"Minimale toegelaten voltage per cel (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Vermogen\\nwatt\",\n      \"description\": \"Vermogen van de adapter\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\ntimeout\",\n      \"description\": \"PD afstemmingsduur in stappen van 100ms (voor compatibiliteit met sommige QC laders)\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"Zet PPS & EPR modes aan\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Verhog\\nings temp\",\n      \"description\": \"Verhogingstemperatuur\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"start-\\ntemperatuur\",\n      \"description\": \"Breng de soldeerbout op temperatuur bij het opstarten. (T=Soldeertemperatuur | S=Slaapstand-temperatuur | K=Slaapstand kamertemperatuur)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"temp veran\\ndering kort\",\n      \"description\": \"Temperatuurveranderingsstap bij korte druk op de knop\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"temp veran\\ndering lang\",\n      \"description\": \"Temperatuurveranderingsstap bij lange druk op de knop\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Vergrendel-\\ning knoppen\",\n      \"description\": \"Houd tijdens het solderen beide knoppen ingedrukt om de vergrendeling in of uit te schakelen (B=alleen boost-modus | F=volledige vergrendeling)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profiel\\nfases\",\n      \"description\": \"Nummer van fases in profiel modus\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Voorverwarm\\ntemperatuur\",\n      \"description\": \"Voorverwarm naar deze temperatuur op de start van profiel modus\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Voorverwarm\\nsnelheid\",\n      \"description\": \"Voorverwarm op deze snelheid (graden per seconden)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Fase 1\\ntemperatuur\",\n      \"description\": \"Doel temperatuur op het einde van deze fase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Fase\\nduur\",\n      \"description\": \"Doel tijdsduur van deze fase (in seconden)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Fase 2\\ntemperatuur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Fase 2\\nduur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Fase 3\\ntemperatuur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Fase 3\\nduur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Fase 4\\ntemperatuur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Fase 4\\nduur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Fase 5\\ntemperatuur\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Fase 5\\nduur\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Afkoel\\nsnelheid\",\n      \"description\": \"De snelheid van afkoelen op het eind van profiel modus (graden per seconden)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Bewegings-\\ngevoeligheid\",\n      \"description\": \"Bewegingsgevoeligheid (1=minst gevoelig | ... | 9=meest gevoelig)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Slaap\\ntemp\",\n      \"description\": \"Temperatuur in slaapstand (°C)\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Slaap\\ntime-out\",\n      \"description\": \"Slaapstand time-out (Minuten | Seconden)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Uitschakel\\ntime-out\",\n      \"description\": \"Automatisch afsluiten time-out (Minuten)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Hall sensor\\ngevoeligheid\",\n      \"description\": \"Gevoeligheid naar de magneten (1=minst gevoelig | ... | 9=meest gevoelig)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Interval voordat de \\\"slaapmodus\\\" start wanneer het Hall-effect boven de drempelwaarde komt\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Temperatuur\\nschaal\",\n      \"description\": \"Temperatuurschaal (°C=Celsius | °F=Fahrenheit)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Scherm-\\noriëntatie\",\n      \"description\": \"Schermoriëntatie (R=Rechtshandig | L=Linkshandig | A=Automatisch)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Afkoel\\nknipper\",\n      \"description\": \"Temperatuur knippert in hoofdmenu tijdens afkoeling.\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Scroll\\nsnelheid\",\n      \"description\": \"Scrollsnelheid van de tekst.\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Wissel\\n+ - knoppen\",\n      \"description\": \"Wissel de knoppen voor temperatuur controle\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Anim.\\nsnelheid\",\n      \"description\": \"Snelheid van de icoon animaties in het menu (T=sloom | M=middel | S=snel)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Anim.\\nherhaling\",\n      \"description\": \"Herhaal icoon animaties in hoofdmenu\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Scherm\\nhelderheid\",\n      \"description\": \"Verander de helderheid van het OLED scherm\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Omkeer\\nscherm\",\n      \"description\": \"Omkeer de kleuren van het OLED scherm\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Opstart\\nlogo lengte\",\n      \"description\": \"Zet het lengte van het opstart logo (s=seconden)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Gedetailleerd\\nslaapscherm\",\n      \"description\": \"Gedetailleerde informatie in een kleiner lettertype in het slaapscherm\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Gedetailleerd\\nsoldeerscherm\",\n      \"description\": \"Gedetailleerde informatie in kleiner lettertype in soldeerscherm\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Zet Bluetooth aan\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Power\\nlimit\",\n      \"description\": \"Gemiddelde maximale power dat de soldeerbout mag gebruiken (W=watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Calibreer CJC\\nbij opstart\",\n      \"description\": \"Bij de volgende opstart tip Cold Junction Compensation wordt gecalibreerd (niet nodig als Delta T < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Calibreervo-\\nedingsspanning?\",\n      \"description\": \"VIN Calibreren. Bevestigen door knoppen lang in te drukken.\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Power\\npuls\",\n      \"description\": \"Power van de wakker-houd-puls (W=watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Power pulse\\nvertraging\",\n      \"description\": \"Vertraging voordat de wakker-houd-puls wordt geactiveerd (x 2,5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Power pulse\\nduur\",\n      \"description\": \"Keep-awake-pulse duration (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Instellingen\\nresetten?\",\n      \"description\": \"Alle instellingen resetten\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Spraak:\\n NL_BE   Vlaams\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_PL.json",
    "content": "{\n  \"languageCode\": \"PL\",\n  \"languageLocalName\": \"Polski\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Skalibrowano!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Reset OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Ust. \\nzresetowane\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Nie rozpoznano\\nakcelerometru!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"Nie rozpoznano\\nkont. USB-PD IC!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"ZABLOK.\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"ODBLOK.\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!ZABLOK!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Ucieczka\\ntermiczna\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Zwarty grot!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Upewnij się, że końcówka i uchwyt mają temperaturę pokojową podczas następnego rozruchu!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"kalibracja\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Czy na pewno chcesz przywrócić ustawienia fabryczne?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"NIS. NAP\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Zbyt niskie nap.\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Nap. wej.: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Tr. uśpienia\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Grot: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Rozgrzewanie\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Schładzanie\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Twoje urządzenie jest najprawdopodobniej podróbką!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Zbyt gorące, aby\\nuruchomić profil\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"P\",\n    \"SettingLeftChar\": \"L\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"W\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"S\",\n    \"SettingStartSolderingChar\": \"T\",\n    \"SettingStartSleepChar\": \"Z\",\n    \"SettingStartSleepOffChar\": \"O\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"P\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Ustawienia\\nzasilania\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Lutowanie\\n\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Oszcz.\\nenergii\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Interfejs\\nużytkownika\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Ustawienia\\nzaawans.\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Tryb\\ndomyślny\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"Nie\\ndynamiczny\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Tryb\\nbezpieczny\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nwykrycie\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"Długi\\nTS100\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Krótki\\nPine\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Źródło\\nzasilania\",\n      \"description\": \"Źródło zasilania. Ustaw napięcie odcięcia. (DC 10V) (S=3.3V dla ogniw Li, wyłącz limit mocy)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimalne\\nnapięcie\",\n      \"description\": \"Minimalne dozwolone napięcie na komórkę (3S: 3 - 3,7V | 4-6S: 2,4 - 3,7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Napięcie QC\",\n      \"description\": \"Maksymalne napięcie, które lutownica będzie próbowała wynegocjować z ładowarką Quick Charge (V)\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"Limit czasu\\nPD\",\n      \"description\": \"Limit czasu negocjacji PD w krokach co 100ms dla zgodności z niektórymi ładowarkami QC (0: wyłączone)\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"Tryb PD\",\n      \"description\": \"Włącza tryby PPS & EPR.\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Temp.\\nboost\",\n      \"description\": \"Temp. w trybie \\\"boost\\\" \"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Aut. uruch.\\ntr. lutowania\",\n      \"description\": \"Automatyczne uruchamianie trybu lutowania po włączeniu zasilania. (T: lutowanie | Z: uśpienie | O: uśpienie w temp. pokojowej)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Zm. temp.\\nkr. przyc.\",\n      \"description\": \"Wartość zmiany temperatury, po krótkim przyciśnięciu (°C)\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Zm. temp.\\ndł. przyc.\",\n      \"description\": \"Wartość zmiany temperatury, po długim przyciśnięciu (°C)\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Blokada\\nprzycisków\",\n      \"description\": \"W trybie lutowania, wciśnij oba przyciski aby je zablokować (B=tylko Boost | P=pełna blokada)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Fazy\\nprofilu\",\n      \"description\": \"Liczba faz w trybie profilu\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Temp.\\nrozgrzewania\",\n      \"description\": \"Rozgrzanie do tej temp. na początku trybu profilu\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Prędk.\\nrozgrzewania\",\n      \"description\": \"Tempo rozgrzewania (stopnie na sekundę)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Temp.\\nfazy 1\",\n      \"description\": \"Docelowa temp. na koniec tej fazy\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Dług.\\nfazy 1\",\n      \"description\": \"Docelowy czas trwania tej fazy (sekundy)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Temp.\\nfazy 2\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Dług.\\nfazy 2\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Temp.\\nfazy 3\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Dług.\\nfazy 3\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Temp.\\nfazy 4\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Dług.\\nfazy 4\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Temp.\\nfazy 5\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Dług.\\nfazy 5\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Prędk.\\nschładzania\",\n      \"description\": \"Tempo schładzania na koniec trybu profilu (stopnie na sekundę)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Czułość\\nwykr. ruchu\",\n      \"description\": \"Czułość wykrywania ruchu (1: Minimalna | ... | 9: Maksymalna)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Temp.\\nuśpienia\",\n      \"description\": \"Temperatura w trybie uśpienia (°C)\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Czas do\\nuśpienia\",\n      \"description\": \"Czas do przejścia w tryb uśpienia (minuty | sekundy)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Czas do\\nwyłączenia\",\n      \"description\": \"Czas do wyłączenia (minuty)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Czułość\\ncz. Halla\",\n      \"description\": \"Czułość czujnika Halla, używanego do przechodznia w tryb uśpienia (1: Minimalna | ... | 9: Maksymalna)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Odstęp przed rozpoczęciem \\\"trybu uśpienia\\\", gdy efekt Halla przekracza próg\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Jednostka\\ntemperatury\",\n      \"description\": \"Jednostka temperatury (C: Celciusz | F: Fahrenheit)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Obrót\\nekranu\",\n      \"description\": \"Obrót ekranu (P: dla praworęcznych | L: dla leworęcznych | A: automatycznie)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Mig. podczas\\nschładzania\",\n      \"description\": \"Temperatura miga podczas schładzania, gdy grot jest wciąż gorący\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Sz. przew.\\ntekstu\",\n      \"description\": \"Szybkość przewijania tekstu\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Zamień przyc.\\n+ -\",\n      \"description\": \"Zamienia działanie przycisków zmiany temperatury grotu\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Zamień\\nklawisze A i B\",\n      \"description\": \"Odwrotne przypisanie przycisków dla menu Ustawienia\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Prędkosć\\nanimacji\",\n      \"description\": \"Prędkość animacji ikon w menu (W: mała | M: średnia | S: duża)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Zapętlona\\nanimacja\",\n      \"description\": \"Zapętla animację ikon w menu głównym\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Jasność\\nwyświetlacza\",\n      \"description\": \"Regulacja kontrastu/jasności wyświetlacza OLED\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Odwrócenie\\nkolorów\",\n      \"description\": \"Odwrócenie kolorów wyświetlacza OLED\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Długość wyś.\\nloga\",\n      \"description\": \"Ustawia czas wyświetlania loga podczas uruchamiania (s=sekund)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Szczegółowy\\nekran bezczyn.\",\n      \"description\": \"Wyświetla szczegółowe informacje za pomocą mniejszej czcionki na ekranie bezczynności\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Sz. inf. w\\ntr. lutowania\",\n      \"description\": \"Wyświetl szczegółowe informacje w trybie lutowania\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Włącza Bluetooth Low Energy\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Ogr.\\nmocy\",\n      \"description\": \"Maksymalna moc (W), jakiej może użyć lutownica\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Kalibracja temperatury\\nprzy następnym uruchomieniu\",\n      \"description\": \"Kalibracja temperatury przy następnym włączeniu (nie jest wymagana, jeśli różnica temperatur jest mniejsza niż 5°C\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Kalibracja\\nnapięcia\",\n      \"description\": \"Kalibracja napięcia wejściowego. Krótkie naciśnięcie, aby ustawić, długie naciśnięcie, aby wyjść.\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Moc\\nimpulsu\",\n      \"description\": \"W przypadku używania powerbanku, utrzymuj moc na poziomie (W) aby nie uśpić powerbanku\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Czas między\\nimp. mocy\",\n      \"description\": \"Czas między kolejnymi impulsami mocy zapobiegającymi usypianiu powerbanku (x2,5 s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Długość\\nimpulsu mocy\",\n      \"description\": \"Długość impulsu mocy zapobiegającego usypianiu powerbanku (x250 ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Ustawienia\\nfabryczne\",\n      \"description\": \"Resetuje wszystkie ustawienia\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Język:\\n PL      Polski\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Typ grotu\",\n      \"description\": \"Wybierz typ zamontowanego grotu\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_PT.json",
    "content": "{\n  \"languageCode\": \"PT\",\n  \"languageLocalName\": \"Português\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Calibração\\nfeita!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Reset OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Algumas configurações\\nforam alteradas!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Acelerómetro não\\ndetetado!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"USB-PD IC não\\ndetetado!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"Bloqueado\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"Desbloqueado\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!Bloqueado!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Avalanche\\nTérmica\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Tip Shorted!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Antes de reiniciar certifique-se que o ferro está à temperatura ambiente!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"a calibrar\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Definições de fábrica?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"DC BAIXO\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Subtensão\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Tensão: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Repouso...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Ponta: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Pré-Aquecer\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Arrefecer\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"O seu dispositivo provavelmente é falsificado!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Demasiado quente para\\niniciar perfil\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"D\",\n    \"SettingLeftChar\": \"C\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"S\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"F\",\n    \"SettingStartSolderingChar\": \"S\",\n    \"SettingStartSleepChar\": \"H\",\n    \"SettingStartSleepOffChar\": \"A\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"F\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Opções de\\nEnergia\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Opções de\\nSolda\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Modo de\\nRepouso\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Interface\\nUtilizador\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Opções\\nAvançadas\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Fonte\\nalimentação\",\n      \"description\": \"Fonte de alimentação. Define a tensão de corte. (DC=10V) (S=3.3V/célula)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Tensão\\nmínima\",\n      \"description\": \"Tensão mínima permitida por célula de bateria (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Potência\\nFonte\",\n      \"description\": \"Potência da fonte usada (Watt)\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD tempo\\nlimite\",\n      \"description\": \"Tempo limite de negoiciação de PD de 100ms para compatibilidade com alguns carregadores é (0: disabled)\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"Activa o modo PPS & EPR\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Temp.\\nModo Turbo\",\n      \"description\": \"Ajuste de temperatura do \\\"modo turbo\\\"\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Aquecimento\\nautomático\",\n      \"description\": \"Aquece a ponta automaticamente ao ligar (S=soldagem | H=hibernar | A=hibernar temp. ambiente)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Mudança temp.\\ncurta\",\n      \"description\": \"A temperatura será aumentada com um click curto\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Mudança temp.\\nlonga\",\n      \"description\": \"A temperatura será aumentada com um click longo\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Permitir bloq.\\nbotões\",\n      \"description\": \"Durante a solda premir os dois botões para alternar entre (B=modo turbo | F=bloqueio total)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile\\nPhases\",\n      \"description\": \"Number of phases in profile mode\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Temperatura\\nPré-aquecimento\",\n      \"description\": \"Pré-aquecer a esta temperatura quando o perfil é selecionado\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Velocidade\\nPré-aquecimento\",\n      \"description\": \"Ritmo de pré-aquecimento (graus por segundo)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Temp.\\nFase 1\",\n      \"description\": \"Temperatura alvo no final desta fase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Duração\\nFase 1\",\n      \"description\": \"Duração alvo desta fase (segundos)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Temp.\\nFase 2\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Duração\\nFase 2\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Temp.\\nFase 3\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Duração\\nFase 3\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Temp.\\nFase 4\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Duração\\nFase 4\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Temp.\\nFase 5\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Duração\\nFase 5\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Velocidade\\nArrefecimento\",\n      \"description\": \"Arrefecer a este ritmo após sair do perfil selecionado (graus por segundo)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Sensibilidade\\nmovimento\",\n      \"description\": \"Sensibilidade ao movimento (1=Menor | ... | 9=Maior)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Temperatura\\nrepouso\",\n      \"description\": \"Temperatura de repouso (C)\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Tempo\\nrepouso\",\n      \"description\": \"Tempo para repouso (Minutos | Segundos)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Tempo\\ndesligar\",\n      \"description\": \"Tempo para desligar (Minutos)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Sensibilidade de\\nmagnetismo\",\n      \"description\": \"Sensibilidade de magnetismo (1=Menor | ... | 9=Maior)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Intervalo antes do início do \\\"modo de suspensão\\\" quando o efeito Hall está acima do limite\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Unidade\\ntemperatura\",\n      \"description\": \"Unidade de temperatura (C=Celsius | F=Fahrenheit)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Orientação\\necrã\",\n      \"description\": \"Orientação do ecrã (D=estro | C=anhoto | A=utomática)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Piscar ao\\narrefecer\",\n      \"description\": \"Faz o valor da temperatura piscar durante o arrefecimento\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Velocidade\\ntexto ajuda\",\n      \"description\": \"Velocidade a que o texto de ajuda é apresentado\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Trocar\\nbotões + -\",\n      \"description\": \"Inverte o funcionamento dos botões de ajuste da temperatura\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Velocidade\\nde animação\",\n      \"description\": \"Velocidade das animações no menu (S=lenta | M=média | F=rápida)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Repetir\\nanimações\",\n      \"description\": \"Repete animações de ícones no menu principal\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Brilho\\ndo ecrã\",\n      \"description\": \"Ajusta o brilho do ecrã OLED\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Inverter\\necrã\",\n      \"description\": \"Inverte as cores do ecrã OLED\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Tempo img.\\nno arranque\",\n      \"description\": \"Define a duração do logotipo no arranque em (s=segundos)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Ecrã repouso\\navançado\",\n      \"description\": \"Mostra informações avançadas quando em repouso\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Ecrã solda\\navançado\",\n      \"description\": \"Mostra informações avançadas durante a solda\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Ativa o Bluetooth Low Energy (BLE)\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Limite\\npotência\",\n      \"description\": \"Potência máxima a usar (W=watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Calibrar CJC\\nno próximo arranque\",\n      \"description\": \"No próximo arranque CJC será calibrada  (não será necessário caso o Delta T seja < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Calibrar\\ntensão\",\n      \"description\": \"Calibra a tensão de alimentação. Use os botões para ajustar o valor. Mantenha pressionado para sair\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Potência\\ndo pulso\",\n      \"description\": \"Intensidade de potência de arranque (W=watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Espera do\\npulso\",\n      \"description\": \"Espera entre o acordar e o envio da rectivação (x 2.5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Duração\\npulso\",\n      \"description\": \"Manter os inplosus de rectivação em (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Reset de\\nfábrica?\",\n      \"description\": \"Repôe todos os ajustes\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Idioma:\\n PT   Português\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_RO.json",
    "content": "{\n  \"languageCode\": \"RO\",\n  \"languageLocalName\": \"Română\",\n  \"tempUnitFahrenheit\": true,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Calibration\\ndone!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Reset OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Setările au fost\\nresetate!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Fără accelerometru\\ndetectat!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"Fără USB-PD IC\\ndetectat!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"BLOCAT\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"DEBLOCAT\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!BLOCAT!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Încălzire\\nEşuată\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Tip Shorted!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Înainte de repornire, asiguraţi-vă că vârful şi mânerul sunt la temperatura camerei!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"calibrare\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Sigur doriţi să restauraţi la setările implicite?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"DC SCĂZUT\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Voltaj scăzut\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Intrare V: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Adormit...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Tip: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Preheat\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Cooldown\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Dispozitivul dvs. este cel mai probabil un fals!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Too hot to\\nstart profile\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"D\",\n    \"SettingLeftChar\": \"S\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"Î\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"R\",\n    \"SettingStartSolderingChar\": \"S\",\n    \"SettingStartSleepChar\": \"Z\",\n    \"SettingStartSleepOffChar\": \"R\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"F\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Setări de\\nalimentare\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Setări de\\nlipire\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Modul\\nrepaus\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Interfaţă\\nutilizator\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Opţiuni\\navansate\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Sursa de\\nalimentare\",\n      \"description\": \"Sursa de alimentare. Setează tensiunea de întrerupere. (DC 10V) (S 3.3V per celulă, dezactivaţi limita de alimentare)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Voltaj\\nminim\",\n      \"description\": \"Tensiunea minimă admisă pe celulă (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC\\nvoltaj\",\n      \"description\": \"Tensiunea maximă QC dorită pentru care negociază letconul\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\ntimeout\",\n      \"description\": \"Timp limită de negociere pentru tranzacţia PD, în paşi de 100ms, pentru compatibilitate cu alimentatoarele QC\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"No Dynamic disables EPR & PPS, Safe mode does not use padding resistance\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Modifică\\ntemp. impuls\",\n      \"description\": \"Temperatura utilizată în \\\"modul de impuls\\\"\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Auto\\nstart\",\n      \"description\": \"Start letcon în modul de lipire la pornire (S=lipire | Z=repaus | R=repaus la temperatura camerei)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Schimbare temp.\\napăsare scută\",\n      \"description\": \"Schimbarea temperaturii la apăsarea scurtă a butonului\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Schimbare temp.\\napăsare lungă\",\n      \"description\": \"Schimbarea temperaturii la apăsarea lungă a butonului\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Blocare\\nbutoane\",\n      \"description\": \"Când lipiţi, apăsaţi lung ambele butoane, pentru a le bloca (B=numai \\\"modul boost\\\" | F=blocare completă)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile\\nPhases\",\n      \"description\": \"Number of phases in profile mode\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Preheat\\nTemp\",\n      \"description\": \"Preheat to this temperature at the start of profile mode\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Preheat\\nSpeed\",\n      \"description\": \"Preheat at this rate (degrees per second)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Phase 1\\nTemp\",\n      \"description\": \"Target temperature for the end of this phase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Phase 1\\nDuration\",\n      \"description\": \"Target duration of this phase (seconds)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Phase 2\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Phase 2\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Phase 3\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Phase 3\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Phase 4\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Phase 4\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Phase 5\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Phase 5\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Cooldown\\nSpeed\",\n      \"description\": \"Cooldown at this rate at the end of profile mode (degrees per second)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Sensibilitate\\nla miscare\",\n      \"description\": \"Sensibilitate senzor miscare (1=puţin sensibil | ... | 9=cel mai sensibil)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Temp\\nrepaus\",\n      \"description\": \"Temperatura vârfului în \\\"modul repaus\\\"\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Expirare\\nrepaus\",\n      \"description\": \"Interval înainte de lansarea \\\"modului de repaus\\\" în (s=secunde | m=minute)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Expirare\\noprire\",\n      \"description\": \"Interval înainte ca letconul să se oprească (m=minute)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Sensibilitate\\nsenzor Hall\",\n      \"description\": \"Sensibilitate senzor cu efect Hall pentru a detecta repausul (1=putin sensibil | ... | 9=cel mai sensibil)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Intervalul înainte de începerea \\\"modului de repaus\\\" când efectul de sală este peste prag\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Unitate de\\ntemperatură\",\n      \"description\": \"C=Celsius | F=Fahrenheit\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Orientare\\necran\",\n      \"description\": \"R=dreptaci | L=stângaci | A=auto\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Clipeşte\\nla răcire\",\n      \"description\": \"Clipeşte temperatura după oprirea încălzirii, în timp ce vârful este încă fierbinte\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Viteză\\nderulare\",\n      \"description\": \"Viteză derulare text cu informatii la (S=lent | F=rapid)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Inversare\\n+ - butoane\",\n      \"description\": \"Inversarea butoanelor de reglare a temperaturii\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Animaţii\\nviteză\",\n      \"description\": \"Ritmul animaţiilor pictogramei din meniu (Î=încet | M=mediu | R=rapid)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Animaţii\\nbuclă\",\n      \"description\": \"Animaţii de pictograme în meniul principal\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Ecranului\\nluminozitatea\",\n      \"description\": \"Ajusteaza luminozitatea ecranului\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Inversează\\nculoarea\",\n      \"description\": \"Inversează culoarea ecranului\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Durată\\nlogo încărcare\",\n      \"description\": \"Setaţi durată logo de pornire (s=secunde)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Detalii,\\necran inactiv\",\n      \"description\": \"Afisaţi informaţii detaliate într-un font mai mic pe ecranul de repaus\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Detalii\\necran lipire\",\n      \"description\": \"Afisaţi informaţii detaliate într-un font mai mic pe ecranul de lipire\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Activează BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Putere\\nlimită\",\n      \"description\": \"Puterea maximă pe care letconul o poate folosi (W=watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Calibrare CJC\\nla următoarea pornire\",\n      \"description\": \"La următorul vârf de pornire, compensarea joncţiunii reci va fi calibrată (nu este necesară dacă Delta T este < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Calibrare tens.\\nde intrare?\",\n      \"description\": \"Porniţi calibrarea VIN (apăsaţi lung pentru a ieşi)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Putere\\npuls\",\n      \"description\": \"Puterea pulsului de menţinere activă a blocului de alimentare (watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Întârziere\\npuls putere\",\n      \"description\": \"Perioada pulsului de mentinere (x 2.5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Durată\\npuls putere\",\n      \"description\": \"Durata pulsului de menţinere (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Setări\\ndin fabrică\",\n      \"description\": \"Reveniţi la setările din fabrică\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Limbă:\\n RO      Română\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_RU.json",
    "content": "{\n  \"languageCode\": \"RU\",\n  \"languageLocalName\": \"Русский\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Калибровка\\nзавершена!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Готово!\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Настройки\\nсброшены!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Акселерометр\\nне обнаружен!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"Питание по USB-PD\\nне обнаружено\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"ЗАБЛОК\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"РАЗБЛОК\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!ЗАБЛОК!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Неуправляемый\\nразогрев\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!КЗ на жале!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Пожалуйста, убедитесь, что жало и корпус имеют комнатную температуру при следующей загрузке!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"калибровка\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Вы уверены, что хотите сбросить настройки к значениям по умолчанию?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"НИЗ.НАПР\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Низ. напряжение\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Питание(В):\\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Сон...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Жало: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Преднагрев\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Остывание\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Вероятно, это поддельное устройство!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Слишком горячо для\\nстарта профиля\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"П\",\n    \"SettingLeftChar\": \"Л\",\n    \"SettingAutoChar\": \"А\",\n    \"SettingSlowChar\": \"М\",\n    \"SettingMediumChar\": \"С\",\n    \"SettingFastChar\": \"Б\",\n    \"SettingStartSolderingChar\": \"П\",\n    \"SettingStartSleepChar\": \"С\",\n    \"SettingStartSleepOffChar\": \"К\",\n    \"SettingLockBoostChar\": \"Т\",\n    \"SettingLockFullChar\": \"П\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Настройки\\nпитания\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Настройки\\nпайки\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Авто\\nвыключение\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Интерфейс\\n\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Доп.\\nнастройки\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Вкл.\\nPPSиEPR\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"Откл.\\n\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Вкл.без\\nзапроса\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Авто\\nопред-е\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nстанд.\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nкоротк.\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80(P)\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Предельное\\nнапряжение\",\n      \"description\": \"Установка минимально предельного напряжения от аккумулятора для предотвращения глубокого разряда (DC 10В | S 3,3В на ячейку, без ограничения мощности)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Мин.\\nнапряжение\",\n      \"description\": \"Минимально разрешённое напряжение на ячейку (3S: 3 - 3,7В | 4S-6S: 2,4 - 3,7В)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Напр-е\\nдля QC\",\n      \"description\": \"Максимальное напряжение для согласования с источником питания по QC\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"Интервал\\nPD\",\n      \"description\": \"Интервал согласования питания по Power Delivery с шагом 100 мс для совместимости с некоторыми источниками питания по QC (0=Откл.)\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"Режим\\nPD\",\n      \"description\": \"Вкл.без запроса: включить PPS и EPR без запроса большей мощности\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"t° турбо\\nрежима\",\n      \"description\": \"Температура жала в турбо-режиме\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Режим при\\nвключении\",\n      \"description\": \"Режим, в котором включается паяльник (П=Пайка | С=Сон | К=Ожидание при комн. темп.)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Шаг t° при\\nкор.наж-ии\",\n      \"description\": \"Шаг изменения температуры при коротком нажатии кнопок\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Шаг t° при\\nдол.наж-ии\",\n      \"description\": \"Шаг изменения температуры при долгом нажатии кнопок\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Разрешить\\nблок. кнопок\",\n      \"description\": \"Блокировать кнопки при их долгом нажатии в режиме пайки (Т=Только турбо | П=Полная блокировка)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Этапы\\nпрофиля\",\n      \"description\": \"Количество этапов в режиме профиля\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Температура\\nпреднагрева\",\n      \"description\": \"Температура предварительного нагрева в начале режима термопрофиля\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Скорость\\nпреднагрева\",\n      \"description\": \"Скорость предварительного нагрева в начале режима термопрофиля (в градусах в секунду)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Температура\\n1-го этапа\",\n      \"description\": \"Необходимая температура в конце 1-го этапа\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Длительность\\n1-го этапа\",\n      \"description\": \"Необходимая длительность 1-го этапа (в секундах)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Температура\\n2-го этапа\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Длительность\\n2-го этапа\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Температура\\n3-го этапа\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Длительность\\n3-го этапа\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Температура\\n4-го этапа\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Длительность\\n4-го этапа\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Температура\\n5-го этапа\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Длительность\\n5-го этапа\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Скорость\\nостывания\",\n      \"description\": \"Скорость остывания в конце режима термопрофиля (в градусах в секунду)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Чувствительн.\\nакселерометра\",\n      \"description\": \"Чувствительность акселерометра (1=мин. | ... | 9=макс.)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"t° при\\nсне\",\n      \"description\": \"Температура жала в режиме сна\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Интервал\\nсна\",\n      \"description\": \"Время до перехода в режим сна (секунды | минуты)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Интервал\\nотключ-я\",\n      \"description\": \"Время до выключения паяльника (в минутах)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Датчик\\nХолла\",\n      \"description\": \"Чувствительность датчика Холла к магнитному полю (1=мин. | ... | 9=макс.)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"Интервал\\nдатчика Холла\",\n      \"description\": \"Время между превышением датчиком Холла порогового значения и режимом сна\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Единицы\\nизмерения\",\n      \"description\": \"Единицы измерения температуры (C=°Цельcия | F=°Фаренгейта)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Поворот\\nэкрана\",\n      \"description\": \"Поворот экрана (П=Правша | Л=Левша | А=Авто)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Мигание t°\\nпри остывании\",\n      \"description\": \"Мигать температурой на экране при остывании, пока жало ещё горячее\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Скорость\\nтекста\",\n      \"description\": \"Скорость прокрутки текста (М=Медленная | Б=Быстрая)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Поменять\\nкнопки +/-\",\n      \"description\": \"Поменять кнопки изменения температуры\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Поменять\\nкнопки A/B\",\n      \"description\": \"Поменять назначение кнопок A/B в меню настроек\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Скорость\\nанимации\",\n      \"description\": \"Скорость анимации иконок в главном меню (М=Медленная| С=Средняя | Б=Быстрая)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Зацикленная\\nанимация\",\n      \"description\": \"Зацикленная анимация иконок в главном меню\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Яркость\\nэкрана\",\n      \"description\": \"Уровень яркости пикселей на экране\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Инверсия\\nэкрана\",\n      \"description\": \"Инвертировать пиксели на экране\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Длит-ть\\nлоготипа\",\n      \"description\": \"Длительность отображения логотипа (в секундах)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Подробный\\nэкран ожидания\",\n      \"description\": \"Показывать дополнительную информацию на экране ожидания уменьшенным шрифтом\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Подробный\\nэкран пайки\",\n      \"description\": \"Показывать дополнительную информацию на экране пайки уменьшенным шрифтом\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Включить BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Предел\\nмощ-ти\",\n      \"description\": \"Максимальная мощность, которую может использовать паяльник (в ваттах)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Калибровка\\nтемпературы\",\n      \"description\": \"Калибровка температуры (CJC) при следующем включении (не требуется при разнице менее 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Калибровка\\nнапряжения\",\n      \"description\": \"Калибровка входного напряжения (долгое нажатие для выхода)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Сила имп.\\nпитания\",\n      \"description\": \"Сила импульса, удерживающего от автовыключения источник питания (в ваттах)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Пауза имп.\\nпитания (К)\",\n      \"description\": \"Коэффициент паузы между импульсами, удерживающими от автовыключения источник питания (К x 2,5 с)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Длина имп.\\nпитания (К)\",\n      \"description\": \"Коэффициент длины импульса, удерживающего от автовыключения источник питания (К x 250 мс)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Сброс\\nнастроек\",\n      \"description\": \"Сброс настроек к значениям по умолчанию\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Язык:\\n RU     Русский\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Тип\\nжала\",\n      \"description\": \"Выбор типа установленного жала\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_SK.json",
    "content": "{\n  \"languageCode\": \"SK\",\n  \"languageLocalName\": \"Slovenčina\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Kalibrácia\\ndokončená!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Reset OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Nastavenia\\nresetované\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Bez pohybového\\nsenzora!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"Chýba čip\\nUSB-PD!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"ZABLOK.\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"ODBLOK.\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!ZABLOK!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Únik\\nTepla\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Skrat hrotu!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Pred reštartovaním sa uistite, že hrot a rúčka sú v izbovej teplote!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"kalibrovanie\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Naozaj chcete obnoviť továrenské nastavenia?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"Nízke U!\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Nízke napätie\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Vstupné U: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Pokojový režim.\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Hrot: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Predhrievanie\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Schladzovanie\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Vaše zariadenie je pravdepodobne falzifikát!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Teplota príliš vysoká pre štart profilu\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"P\",\n    \"SettingLeftChar\": \"L\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"P\",\n    \"SettingMediumChar\": \"S\",\n    \"SettingFastChar\": \"R\",\n    \"SettingStartSolderingChar\": \"Z\",\n    \"SettingStartSleepChar\": \"S\",\n    \"SettingStartSleepOffChar\": \"I\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"P\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Nastavenie\\nvýkonu\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Nastavenie\\nspájkovania\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Úsporný\\nrežim\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Nastavenie\\nzobrazenia\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Pokročilé\\nnastavenia\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Zdroj\\nnapätia\",\n      \"description\": \"Zdroj napätia. Nastavenie napätia pre vypnutie (cutoff)  (DC=10V | nS=n*3.3V pre LiIon články)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimálne\\nnapätie\",\n      \"description\": \"Minimálne napätie povolené na jeden článok (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Obmedzenie QC\\nnapätia\",\n      \"description\": \"Maximálne QC napätie ktoré si má systém vyžiadať\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"Čas vypršania\\nPower Delivery\",\n      \"description\": \"Čas vyjednávania Power Delivery v 100ms krokoch pre kompatibilitu s niektorými QC nabíjačkami (0: vypnuté)\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"Zapína PPS & EPR režimy\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Boost\\nteplota\",\n      \"description\": \"Cieľová teplota pre prudký náhrev (v nastavených jednotkách)\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Automatické\\nspustenie\",\n      \"description\": \"Pri štarte spustiť režim spájkovania (Z=Spájkovanie | S=Spanok | I=Spanok izbová teplota)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Malý krok\\nteploty\",\n      \"description\": \"Zmena teploty pri krátkom stlačení tlačidla\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Veľký krok\\nteploty\",\n      \"description\": \"Zmena teploty pri držaní tlačidla\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Povoliť zámok\\ntlačidiel\",\n      \"description\": \"Zamknutie tlačidiel - dlhé stlačenie oboch naraz počas spájkovania (B=Okrem boost | P=Plné zamknutie)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profilové\\nFázy\",\n      \"description\": \"Počet fáz v profilovóm režime\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Teplota\\nPredhriatia\",\n      \"description\": \"Teplota na ktorú sa má predohriať na začiatku profilového režimu\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Rýchlosť\\nPredhriatia\",\n      \"description\": \"Rýchlosť predhrievania (stupňe za sekundu)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Teplota\\nFáza 1\",\n      \"description\": \"Cieľová teplota na konci tejto fázy\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Trvanie\\nFáza 1\",\n      \"description\": \"Doba trvania tejto fázy (sekundy)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Teplota\\nFáza 2\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Trvanie\\nFáza 2\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Teplota\\nFáza 3\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Trvanie\\nFáza 3\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Teplota\\nFáza 4\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Trvanie\\nFáza 4\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Teplota\\nFáza 5\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Trvanie\\nFáza 5\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Rýchlosť\\nochladzovania\",\n      \"description\": \"Rýchlosť ochladzovania na konci profilového režimu (stupne za sekundu)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Citlivosť\\npohybu\",\n      \"description\": \"Citlivosť detekcie pohybu (1=Min | ... | 9=Max)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Pokojová\\nteplota\",\n      \"description\": \"Pokojová teplota (v nastavených jednotkách)\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Pokojový\\nrežim po\",\n      \"description\": \"Pokojový režim po (s=sekundách | m=minútach)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Vypnutie\\npo\",\n      \"description\": \"Čas na vypnutie (minúty)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Citliv.\\nHall\",\n      \"description\": \"Citlivosť Hallovho senzora pre detekciu spánku (1=Min | ... | 9=Max)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Interval pred spustením \\\"režimu spánku\\\" keď je hall efekt nad prahovou hodnotou\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Jednotka\\nteploty\",\n      \"description\": \"Jednotky merania teploty (C=stupne Celzia | F=stupne Fahrenheita)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Orientácia\\ndispleja\",\n      \"description\": \"Orientácia displeja (P=Pravák | L=Ľavák | A=Auto)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Blikanie pri\\nchladnutí\",\n      \"description\": \"Blikanie ukazovateľa teploty počas chladnutia hrotu\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Rýchlosť\\nskrolovania\",\n      \"description\": \"Rýchlosť pohybu tohto textu\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Otočenie\\ntlačidiel +/-\",\n      \"description\": \"Prehodenie tlačidiel na nastavovanie teploty\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Rýchlosť\\nanimácií\",\n      \"description\": \"Rýchlosť animácií ikoniek v menu (P=pomaly | S=stredne | R=rýchlo)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Opakovanie\\nanimácií\",\n      \"description\": \"Opakovanie animácií ikoniek v hlavnom menu\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Jas\\nobrazovky\",\n      \"description\": \"Mení jas/kontrast OLED displeja\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Invertovať\\nobrazovku\",\n      \"description\": \"Invertovať farby OLED displeja\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Trvanie\\nboot loga\",\n      \"description\": \"Doba trvania boot loga (s=sekundy)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Detaily v\\npokoj. režime\",\n      \"description\": \"Zobraziť detailné informácie v pokojovom režime (T=Zap | F=Vyp)\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Detaily počas\\nspájkovania\",\n      \"description\": \"Zobrazenie detailov počas spájkovania\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Zapne BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Obmedzenie\\nvýkonu\",\n      \"description\": \"Obmedzenie výkonu podľa použitého zdroja (watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Kalibrácia CJC\\npri nasledujúcom štarte\",\n      \"description\": \"Pri nasledujúcom štarte bude kalibrovaná kompenzácia studeného spoja (nie je potrebné ak Delta T je < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Kalibrácia\\nnap. napätia\",\n      \"description\": \"Kalibrácia napájacieho napätia. Krátke stlačenie mení nastavenie, dlhé stlačenie pre návrat\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Intenzita\\nimpulzu\",\n      \"description\": \"Impulz udržujúci napájací zdroj zapnutý (power banky) (watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Interval\\nimpulzu\",\n      \"description\": \"Interval medzi impulzami udržujúcimi napájací zdroj zapnutý (x 2.5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Dĺžka\\nimpulzu\",\n      \"description\": \"Dĺžka impulzu udržujúci napájací zdroj zapnutý (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Obnovenie\\nnastavení\",\n      \"description\": \"Obnovenie nastavení na pôvodné hodnoty\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Jazyk:\\n SK  Slovenčina\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_SL.json",
    "content": "{\n  \"languageCode\": \"SL\",\n  \"languageLocalName\": \"Slovenščina\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Calibration\\ndone!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Reset OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Nastavitve \\nOK!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Ni \\npospeševalnik\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"Ni USB-PD \\nčipa!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"ZAKLENJ.\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"ODKLENJ.\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"ZAKLENJ.\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Thermal\\nRunaway\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Tip Shorted!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Before rebooting, make sure tip & handle are at room temperature!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"calibrating\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Res želite ponastaviti na privzete nastavitve?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"NIZKA U\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Nizka napetost\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Vhodna U: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Spim...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Konica \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Preheat\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Cooldown\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Your device is most likely a counterfeit!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Too hot to\\nstart profile\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"D\",\n    \"SettingLeftChar\": \"L\",\n    \"SettingAutoChar\": \"S\",\n    \"SettingSlowChar\": \"P\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"H\",\n    \"SettingStartSolderingChar\": \"S\",\n    \"SettingStartSleepChar\": \"Z\",\n    \"SettingStartSleepOffChar\": \"V\",\n    \"SettingLockBoostChar\": \"L\",\n    \"SettingLockFullChar\": \"P\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Power\\nsettings\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Nastavitve\\nspajkanja\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Način\\nspanja\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Uporabniški\\nvmesnik\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Napredne\\nmožnosti\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Vir\\nnapajanja\",\n      \"description\": \"Vir napajanja. Nastavi napetost izklopa. (DC 10V) (S 3.3V na celico)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimum\\nvoltage\",\n      \"description\": \"Minimum allowed voltage per battery cell (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC\\nnapetost\",\n      \"description\": \"Moč napajalnega vira v vatih [W]\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\ntimeout\",\n      \"description\": \"PD negotiation timeout in 100ms steps for compatibility with some QC chargers\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"No Dynamic disables EPR & PPS, Safe mode does not use padding resistance\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Pospešena\\ntemp.\",\n      \"description\": \"Temperatura v pospešenem načinu\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Samodejni\\nzagon\",\n      \"description\": \"Samodejno gretje konice ob vklopu (S=spajkanje | Z=spanje | V=spanje na sobni temperaturi)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Kratka sprememba\\ntemperature?\",\n      \"description\": \"Temperatura se spremeni ob kratkem pritisku na gumb.\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Dolga sprememba\\ntemperature?\",\n      \"description\": \"Temperatura se spremeni ob dolgem pritisku na gumb.\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Omogoči\\nzaklep gumbov\",\n      \"description\": \"Za zaklep med spajkanjem drži oba gumba (L=le pospešeno | P=polno)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile\\nPhases\",\n      \"description\": \"Number of phases in profile mode\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Preheat\\nTemp\",\n      \"description\": \"Preheat to this temperature at the start of profile mode\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Preheat\\nSpeed\",\n      \"description\": \"Preheat at this rate (degrees per second)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Phase 1\\nTemp\",\n      \"description\": \"Target temperature for the end of this phase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Phase 1\\nDuration\",\n      \"description\": \"Target duration of this phase (seconds)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Phase 2\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Phase 2\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Phase 3\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Phase 3\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Phase 4\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Phase 4\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Phase 5\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Phase 5\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Cooldown\\nSpeed\",\n      \"description\": \"Cooldown at this rate at the end of profile mode (degrees per second)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Občutljivost\\npremikanja\",\n      \"description\": \"1=najmanjša | ... | 9=največja\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Temp. med\\nspanjem\",\n      \"description\": \"Temperatura med spanjem\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Čas do\\nspanja\",\n      \"description\": \"Čas pred spanjem (s=sekunde | m=minute)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Čas do\\nizklopa\",\n      \"description\": \"Čas do izklopa (m=minute)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Občut.\\nHall son\",\n      \"description\": \"Občutljivost Hallove sonde za zaznavanje spanja (1=najmanjša | ... | 9=največja)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Interval pred začetkom \\\"načina mirovanja\\\", ko je Hallov učinek nad pragom\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Enota za\\ntemperaturo\",\n      \"description\": \"Enota za temperaturo (C=celzij | F=fahrenheit)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Orientacija\\nzaslona\",\n      \"description\": \"D=desničar | L=levičar | S=samodejno\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Utripanje med\\nhlajenjem\",\n      \"description\": \"Ko je konica še vroča, utripaj prikaz temperature med hlajenjem.\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Hitrost\\nbesedila\",\n      \"description\": \"Hitrost, s katero se prikazuje besedilo (P=počasi | H=hitro)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Obrni\\ntipki + -?\",\n      \"description\": \"Zamenjaj funkciji gumbov.\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Anim.\\nspeed\",\n      \"description\": \"Pace of icon animations in menu (P=slow | M=medium | H=fast)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Anim.\\nloop\",\n      \"description\": \"Loop icon animations in main menu\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Screen\\nbrightness\",\n      \"description\": \"Adjust the OLED screen brightness\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Invert\\nscreen\",\n      \"description\": \"Invert the OLED screen colors\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Boot logo\\nduration\",\n      \"description\": \"Set boot logo duration (s=seconds)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Več info. na\\nmir. zaslonu\",\n      \"description\": \"Prikaži več informacij z manjšo pisavo na mirovalnem zaslonu.\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Več info na\\nzaslonu spaj.\",\n      \"description\": \"Prikaže več informacij z manjšo pisavo na zaslonu med spajkanjem.\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Enables BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Meja\\nmoči\",\n      \"description\": \"Največja dovoljena moč v vatih [W]\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Calibrate CJC\\nat next boot\",\n      \"description\": \"At next boot tip Cold Junction Compensation will be calibrated (not required if Delta T is < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Kalibriram\\nvhodno napetost?\",\n      \"description\": \"Kalibracija VIN (nastavitve z gumbi, dolg pritisk za izhod)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Pulz\\nmoči\",\n      \"description\": \"Velikost moči za vzdrževanje budnosti.\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Power pulse\\ndelay\",\n      \"description\": \"Delay before keep-awake-pulse is triggered (x 2.5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Power pulse\\nduration\",\n      \"description\": \"Keep-awake-pulse duration (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Tovarniške\\nnastavitve?\",\n      \"description\": \"Ponastavitev vseh nastavitev\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Jezik:\\n SL Slovenščina\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_SR_CYRL.json",
    "content": "{\n  \"languageCode\": \"SR_CYRL\",\n  \"languageLocalName\": \"Српски\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Calibration\\ndone!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Reset OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Certain settings\\nwere changed!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"No accelerometer\\ndetected!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"No USB-PD IC\\ndetected!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"LOCKED\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"UNLOCKED\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!LOCKED!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Thermal\\nRunaway\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Tip Shorted!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Before rebooting, make sure tip & handle are at room temperature!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"calibrating\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Да ли заиста желите да вратите поставке на фабричке вредности?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"НИЗ.НАП.\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"ПРЕНИЗАК НАПОН\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Ул. напон: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Спавање...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Врх: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Preheat\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Cooldown\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Your device is most likely a counterfeit!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Too hot to\\nstart profile\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"Д\",\n    \"SettingLeftChar\": \"Л\",\n    \"SettingAutoChar\": \"А\",\n    \"SettingSlowChar\": \"С\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"Б\",\n    \"SettingStartSolderingChar\": \"Л\",\n    \"SettingStartSleepChar\": \"С\",\n    \"SettingStartSleepOffChar\": \"X\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"F\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Power\\nsettings\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Поставке\\nлемљења\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Уштеда\\nенергије\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Корисничко\\nсучеље\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Напредне\\nпоставке\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Врста\\nнапајања\",\n      \"description\": \"Тип напајања; одређује најнижи радни напон. (DC=адаптер [10V] | S=батерија [3,3V по ћелији])\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimum\\nvoltage\",\n      \"description\": \"Minimum allowed voltage per battery cell (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Улазна\\nснага\",\n      \"description\": \"Снага напајања у ватима.\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\ntimeout\",\n      \"description\": \"PD negotiation timeout in 100ms steps for compatibility with some QC chargers\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"No Dynamic disables EPR & PPS, Safe mode does not use padding resistance\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Темп.\\nпојачања\",\n      \"description\": \"Температура врха лемилице у току појачања.\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Врући\\nстарт\",\n      \"description\": \"Лемилица одмах по покретању прелази у режим лемљења и греје се. (Л=лемљење | С=спавати | X=спавати собна температура)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Temp change\\nshort\",\n      \"description\": \"Temperature-change-increment on short button press\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Temp change\\nlong\",\n      \"description\": \"Temperature-change-increment on long button press\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Allow locking\\nbuttons\",\n      \"description\": \"While soldering, hold down both buttons to toggle locking them (B=boost mode only | F=full locking)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile\\nPhases\",\n      \"description\": \"Number of phases in profile mode\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Preheat\\nTemp\",\n      \"description\": \"Preheat to this temperature at the start of profile mode\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Preheat\\nSpeed\",\n      \"description\": \"Preheat at this rate (degrees per second)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Phase 1\\nTemp\",\n      \"description\": \"Target temperature for the end of this phase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Phase 1\\nDuration\",\n      \"description\": \"Target duration of this phase (seconds)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Phase 2\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Phase 2\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Phase 3\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Phase 3\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Phase 4\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Phase 4\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Phase 5\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Phase 5\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Cooldown\\nSpeed\",\n      \"description\": \"Cooldown at this rate at the end of profile mode (degrees per second)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Осетљивост\\nна покрет\",\n      \"description\": \"Осетљивост сензора покрета. (1=најмање осетљиво | ... | 9=најосетљивије)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Темп.\\nспавања\",\n      \"description\": \"Температура на коју се спушта лемилица након одређеног времена мировања. (C | F)\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Време до\\nспавања\",\n      \"description\": \"Време мировања након кога лемилица спушта температуру. (m=минути | s=секунде)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Време до\\nгашења\",\n      \"description\": \"Време мировања након кога се лемилица гаси. (m=минути)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Hall sensor\\nsensitivity\",\n      \"description\": \"Sensitivity to magnets (1=најмање осетљиво | ... | 9=најосетљивије)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Интервал пре почетка \\\"режима спавања\\\" када је ефекат Хола изнад прага\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Јединица\\nтемпературе\",\n      \"description\": \"Јединице у којима се приказује температура. (C=целзијус | F=фаренхајт)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Оријентација\\nекрана\",\n      \"description\": \"Како је окренут екран. (Д=за десноруке | Л=за леворуке | А=аутоматски)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Упозорење\\nпри хлађењу\",\n      \"description\": \"Приказ температуре трепће приликом хлађења докле год је врх и даље врућ.\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Брзина\\nпорука\",\n      \"description\": \"Брзина кретања описних порука попут ове. (С=споро | Б=брзо)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Swap\\n+ - keys\",\n      \"description\": \"Reverse assignment of buttons for temperature adjustment\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Anim.\\nspeed\",\n      \"description\": \"Pace of icon animations in menu (С=slow | M=medium | Б=fast)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Anim.\\nloop\",\n      \"description\": \"Loop icon animations in main menu\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Screen\\nbrightness\",\n      \"description\": \"Adjust the OLED screen brightness\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Invert\\nscreen\",\n      \"description\": \"Invert the OLED screen colors\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Boot logo\\nduration\",\n      \"description\": \"Set boot logo duration (s=seconds)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Детаљи током\\nмировања\",\n      \"description\": \"Приказивање детаљних информација на екрану током мировања.\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Детаљи током\\nлемљења\",\n      \"description\": \"Приказивање детаљних информација на екрану током лемљења.\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Enables BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Power\\nlimit\",\n      \"description\": \"Average maximum power the iron can use (W=watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Calibrate CJC\\nat next boot\",\n      \"description\": \"At next boot tip Cold Junction Compensation will be calibrated (not required if Delta T is < 5 C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Калибрација\\nулазног напона\",\n      \"description\": \"Калибрисање улазног напона. Подешава се на тастере; дуги притисак за крај.\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Power\\npulse\",\n      \"description\": \"Intensity of power of keep-awake-pulse (W=watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Power pulse\\ndelay\",\n      \"description\": \"Delay before keep-awake-pulse is triggered (x 2.5с)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Power pulse\\nduration\",\n      \"description\": \"Keep-awake-pulse duration (x 250мс)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Фабричке\\nпоставке\",\n      \"description\": \"Враћање свих поставки на фабричке вредности.\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Jезик:\\n SR      Српски\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_SR_LATN.json",
    "content": "{\n  \"languageCode\": \"SR_LATN\",\n  \"languageLocalName\": \"Srpski\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Calibration\\ndone!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Reset OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Certain settings\\nwere changed!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"No accelerometer\\ndetected!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"No USB-PD IC\\ndetected!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"LOCKED\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"UNLOCKED\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!LOCKED!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Thermal\\nRunaway\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Tip Shorted!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Before rebooting, make sure tip & handle are at room temperature!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"calibrating\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Da li zaista želite da vratite postavke na fabričke vrednosti?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"NIZ.NAP.\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"PRENIZAK NAPON\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Ul. napon: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Spavanje...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Vrh: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Preheat\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Cooldown\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Your device is most likely a counterfeit!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Too hot to\\nstart profile\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"D\",\n    \"SettingLeftChar\": \"L\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"S\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"B\",\n    \"SettingStartSolderingChar\": \"L\",\n    \"SettingStartSleepChar\": \"S\",\n    \"SettingStartSleepOffChar\": \"X\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"F\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Power\\nsettings\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Postavke\\nlemljenja\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Ušteda\\nenergije\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Korisničko\\nsučelje\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Napredne\\npostavke\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Vrsta\\nnapajanja\",\n      \"description\": \"Tip napajanja; određuje najniži radni napon. (DC=adapter [10V], S=baterija [3,3V po ćeliji])\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimum\\nvoltage\",\n      \"description\": \"Minimum allowed voltage per battery cell (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Ulazna\\nsnaga\",\n      \"description\": \"Snaga napajanja u vatima.\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\ntimeout\",\n      \"description\": \"PD negotiation timeout in 100ms steps for compatibility with some QC chargers\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"No Dynamic disables EPR & PPS, Safe mode does not use padding resistance\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Temp.\\npojačanja\",\n      \"description\": \"Temperatura vrha lemilice u toku pojačanja.\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Vrući\\nstart\",\n      \"description\": \"Lemilica odmah po pokretanju prelazi u režim lemljenja i greje se. (L=lemljenje | S=spavati | X=spavati sobna temperatura)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Temp change\\nshort\",\n      \"description\": \"Temperature-change-increment on short button press\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Temp change\\nlong\",\n      \"description\": \"Temperature-change-increment on long button press\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Allow locking\\nbuttons\",\n      \"description\": \"While soldering, hold down both buttons to toggle locking them (B=boost mode only | F=full locking)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile\\nPhases\",\n      \"description\": \"Number of phases in profile mode\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Preheat\\nTemp\",\n      \"description\": \"Preheat to this temperature at the start of profile mode\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Preheat\\nSpeed\",\n      \"description\": \"Preheat at this rate (degrees per second)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Phase 1\\nTemp\",\n      \"description\": \"Target temperature for the end of this phase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Phase 1\\nDuration\",\n      \"description\": \"Target duration of this phase (seconds)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Phase 2\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Phase 2\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Phase 3\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Phase 3\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Phase 4\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Phase 4\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Phase 5\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Phase 5\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Cooldown\\nSpeed\",\n      \"description\": \"Cooldown at this rate at the end of profile mode (degrees per second)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Osetljivost\\nna pokret\",\n      \"description\": \"Osetljivost senzora pokreta. (1=najmanje osetljivo | ... | 9=najosetljivije)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Temp.\\nspavanja\",\n      \"description\": \"Temperatura na koju se spušta lemilica nakon određenog vremena mirovanja. (C | F)\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Vreme do\\nspavanja\",\n      \"description\": \"Vreme mirovanja nakon koga lemilica spušta temperaturu. (m=minuti | s=sekunde)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Vreme do\\ngašenja\",\n      \"description\": \"Vreme mirovanja nakon koga se lemilica gasi. (m=minuti)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Hall sensor\\nsensitivity\",\n      \"description\": \"Sensitivity to magnets (1=najmanje osetljivo | ... | 9=najosetljivije)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Interval before \\\"sleep mode\\\" starts when hall effect is above threshold\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Jedinica\\ntemperature\",\n      \"description\": \"Jedinice u kojima se prikazuje temperatura. (C=celzijus | F=farenhajt)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Orijentacija\\nekrana\",\n      \"description\": \"Kako je okrenut ekran. (D=za desnoruke | L=za levoruke | A=automatski)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Upozorenje\\npri hlađenju\",\n      \"description\": \"Prikaz temperature trepće prilikom hlađenja dokle god je vrh i dalje vruć.\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Brzina\\nporuka\",\n      \"description\": \"Brzina kretanja opisnih poruka poput ove. (S=sporo | B=brzo)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Swap\\n+ - keys\",\n      \"description\": \"Reverse assignment of buttons for temperature adjustment\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Anim.\\nspeed\",\n      \"description\": \"Pace of icon animations in menu (S=slow | M=medium | B=fast)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Anim.\\nloop\",\n      \"description\": \"Loop icon animations in main menu\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Screen\\nbrightness\",\n      \"description\": \"Adjust the OLED screen brightness\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Invert\\nscreen\",\n      \"description\": \"Invert the OLED screen colors\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Boot logo\\nduration\",\n      \"description\": \"Set boot logo duration (s=seconds)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Detalji tokom\\nmirovanja\",\n      \"description\": \"Prikazivanje detaljnih informacija na ekranu tokom mirovanja.\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Detalji tokom\\nlemljenja\",\n      \"description\": \"Prikazivanje detaljnih informacija na ekranu tokom lemljenja.\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Enables BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Power\\nlimit\",\n      \"description\": \"Average maximum power the iron can use (W=watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Calibrate CJC\\nat next boot\",\n      \"description\": \"At next boot tip Cold Junction Compensation will be calibrated (not required if Delta T is < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Kalibracija\\nulaznog napona\",\n      \"description\": \"Kalibrisanje ulaznog napona. Podešava se na tastere; dugi pritisak za kraj.\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Power\\npulse\",\n      \"description\": \"Intensity of power of keep-awake-pulse (W=watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Power pulse\\ndelay\",\n      \"description\": \"Delay before keep-awake-pulse is triggered (x 2.5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Power pulse\\nduration\",\n      \"description\": \"Keep-awake-pulse duration (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Fabričke\\npostavke\",\n      \"description\": \"Vraćanje svih postavki na fabričke vrednosti.\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Jezik:\\n SR      Srpski\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_SV.json",
    "content": "{\n  \"languageCode\": \"SV\",\n  \"languageLocalName\": \"Svenska\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Kalibrering\\nfärdig!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Återställning\\nOK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Inställningar\\nåterställda\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Ingen\\naccelerometer\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"Ingen USB-PD IC\\nhittades!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"LÅST\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"UPPLÅST\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!LÅST!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Termisk\\nFlykt\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Spets Kortsluten!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Före omstart, säkerställ att spetsen och handtaget är i rumstemperatur!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"kalibrerar\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Är du säker på att du vill återställa inställningarna?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"DC LÅG\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Underspänning\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Inspän. V: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Viloläge...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Spets: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Förvärmning\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Nedkyldning\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Din enhet är sannerligen oäkta!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"För varm för att\\nstarta profilen!\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"H\",\n    \"SettingLeftChar\": \"V\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"L\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"S\",\n    \"SettingStartSolderingChar\": \"L\",\n    \"SettingStartSleepChar\": \"V\",\n    \"SettingStartSleepOffChar\": \"R\",\n    \"SettingLockBoostChar\": \"T\",\n    \"SettingLockFullChar\": \"F\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Effekt-\\ninställning\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Lödnings-\\ninställning\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Vilo-\\nläge\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Användar-\\ngränssnitt\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Avancerade\\nalternativ\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Ström-\\nkälla\",\n      \"description\": \"Strömkälla. Anger lägsta spänning. (DC 10V) (S 3.3V per cell)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimim-\\nspänning\",\n      \"description\": \"Minimumspänning per cell (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC\\nspänning\",\n      \"description\": \"Maximal QC-spänning enheten skall efterfråga\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\npauser\",\n      \"description\": \"PD förhandlings pauser i 100ms steg för kompatibilitet med vissa PD laddare\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"Slår på PPS & EPR lägen\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Turbo-\\ntemp\",\n      \"description\": \"Temperatur i \\\"turbo-läge\\\"\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Auto\\nstart\",\n      \"description\": \"Startar automatiskt lödpennan vid uppstart. (L=Lödning | V=Viloläge | R=Viloläge Rumstemperatur)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Temp.just\\nkorttryck\",\n      \"description\": \"Temperaturjustering vid kort knapptryckning\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Temp.just\\nlångtryck\",\n      \"description\": \"Temperaturjustering vid lång knapptryckning\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Tillåt lås\\nvia knappar\",\n      \"description\": \"Vid lödning, håll nere bägge knappar för att slå på lås (T=Bara turbo | F=Fullt lås)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profil-\\nfaser\",\n      \"description\": \"Antal faser i profil läge\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Förvärmnings-\\ntemp\",\n      \"description\": \"Förvärm till denna temperatur i början av provil läget\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Förvärmnings-\\nhastighet\",\n      \"description\": \"Förvärm enligt denna hastighet (grader per sekund)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Fas 1\\nTemp\",\n      \"description\": \"Måltemperatur i slutet av denna fas\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Fas 1\\nTidslängd\",\n      \"description\": \"Mållängd av denna fasen (sekunder)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Fas 2\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Fas 2\\nTidslängd\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Fas 3\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Fas 3\\nTidslängd\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Fas 4\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Fas 4\\nTidslängd\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Fas 5\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Fas 5\\nTidslängd\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Nedkylnings-\\nhastighet\",\n      \"description\": \"Kyl ned i denna hastighet i slutet av profilen (grader per sekund)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Rörelse-\\nkänslighet\",\n      \"description\": \"Rörelsekänslighet (1=minst känslig | ... | 9=mest känslig)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Vilo-\\ntemp\",\n      \"description\": \"Vilotemperatur (C)\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Vilo-\\ntimeout\",\n      \"description\": \"Vilo-timeout (m=Minuter | s=Sekunder)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Avstängn.\\ntimeout\",\n      \"description\": \"Avstängnings-timeout (Minuter)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Sensor-\\nkänslght\",\n      \"description\": \"Känslighet för halleffekt-sensorn för viloläges-detektering (1=minst känslig | ... | 9=mest känslig)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Interval before \\\"sleep mode\\\" starts when hall effect is above threshold\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Temperatur-\\nenheter\",\n      \"description\": \"Temperaturenhet (C=Celsius | F=Fahrenheit)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Visnings\\nläge\",\n      \"description\": \"Visningsläge (H=Högerhänt | V=Vänsterhänt | A=Automatisk)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Nedkylnings-\\nblink\",\n      \"description\": \"Blinka temperaturen medan spetsen kyls av och fortfarande är varm.\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Beskrivning\\nrullhast.\",\n      \"description\": \"Hastighet som den här texten rullar i\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Omvända\\n+- knappar\",\n      \"description\": \"Omvänd ordning för temperaturjustering via plus/minus knapparna\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Anim.-\\nhastighet\",\n      \"description\": \"Animationshastighet för ikoner i menyer (L=långsam | M=medel | S=snabb)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Anim.\\nloop\",\n      \"description\": \"Loopa animationer i huvudmeny\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Skärmens\\nLjusstyrka\",\n      \"description\": \"Justera OLED skärmens ljusstyrka\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Invertera\\nskärm\",\n      \"description\": \"Invertera OLED skärmens färger\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Start logo\\nTidslängd\",\n      \"description\": \"Sätt uppstartslogotypens tidslängd (s=sekunder)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Detaljerad\\nvid inaktiv\",\n      \"description\": \"Visa detaljerad information i mindre typsnitt när inaktiv.\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Detaljerad\\nlödng.skärm\",\n      \"description\": \"Visa detaljerad information vid lödning\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Tillåter BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Max-\\neffekt\",\n      \"description\": \"Maximal effekt som enheten kan använda (Watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Kalibrera CJC\\nnästa uppstart\",\n      \"description\": \"Vid nästa uppstart kommer spets Cold Junction Compensation kalibreras (ej nödvändigt om Delta T är < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Kalibrera\\ninspänning?\",\n      \"description\": \"Inspänningskalibrering. Knapparna justerar, håll inne för avslut\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Effekt\\npuls\",\n      \"description\": \"Intensiteten av effekt för håll-vaken-puls (W=watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Effekt puls\\nfördröjning\",\n      \"description\": \"Fördröjning innan håll-vaken-pulsen skickas (x 2.5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Effekt puls\\ntidsmängd\",\n      \"description\": \"Håll-vaken-puls varaktighet (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Fabriks-\\ninställ?\",\n      \"description\": \"Återställ alla inställningar\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Språk:\\n SV     Svenska\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_TR.json",
    "content": "{\n  \"languageCode\": \"TR\",\n  \"languageLocalName\": \"Türkçe\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Kalibrasyon\\ntamam!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Sıfırlama Tamam\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Ayarlar\\nSıfırlandı\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"İvme sensörü\\ntespit edilmedi!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"USB-PD IC\\ntespit edilmedi!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"KİLİTLİ\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"KİLİT AÇIK\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!KİLİTLİ!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Termal\\nKaçak\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Uç Kısa Devre!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Yeniden başlatmadan önce uç ve sapın oda sıcaklığında olduğundan emin olun!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"kalibre ediliyor\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Ayarları varsayılan değerlere sıfırlamak istediğinizden emin misiniz?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"Güç Az\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Düşük Voltaj\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Giriş V: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Bekleme Modu...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Uç: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Ön Isıtma\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Soğuma\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Cihazınız büyük olasılıkla sahte!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Profil başlatmak için\\nçok sıcak\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"R\",\n    \"SettingLeftChar\": \"L\",\n    \"SettingAutoChar\": \"O\",\n    \"SettingSlowChar\": \"Y\",\n    \"SettingMediumChar\": \"O\",\n    \"SettingFastChar\": \"H\",\n    \"SettingStartSolderingChar\": \"L\",\n    \"SettingStartSleepChar\": \"U\",\n    \"SettingStartSleepOffChar\": \"S\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"F\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Güç\\nAyarları\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Lehimleme\\nAyarları\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Uyku\\nModları\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Kullanıcı\\nArayüzü\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Gelişmiş\\nAyarlar\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"GÇKYN\\n\",\n      \"description\": \"\\\"Güç Kaynağı\\\". En düşük çalışma voltajını ayarlar. (DC 10V) (S 3.3V hücre başına)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimum\\nVoltaj\",\n      \"description\": \"Pil hücresi başına izin verilen minimum voltaj (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC\\nvoltajı\",\n      \"description\": \"Max istenecek QC voltajı\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\nTimeout\",\n      \"description\": \"Bazı QC şarj cihazlarıyla uyumluluk için 100ms adımlarında PD pazarlık zaman aşımı\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"PPS & EPR modlarını etkinleştirir\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"YKSC\\n\",\n      \"description\": \"Yüksek Performans Modu Sıcaklığı\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"OTOBAŞ\\n\",\n      \"description\": \"Güç verildiğinde otomatik olarak lehimleme modunda başlat. (L=Lehimleme Modu | U=Uyku Modu | S=Uyku Modu Oda Sıcaklığı)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Sıcaklık değişimi\\nkısa\",\n      \"description\": \"Kısa basışlardaki sıcaklık derecesi atlama oranı\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Sıcaklık değişimi\\nuzun\",\n      \"description\": \"Uzun başışlardaki sıcaklık derecesi atlama oranı\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Kilitleme\\nİzni\",\n      \"description\": \"Lehimleme sırasında, her iki düğmeye basılı tutarak kilitleme modunu değiştirin (B=Sadece performans modu | F=tam kilit)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profil\\nAşamaları\",\n      \"description\": \"Profil modundaki aşamaların sayısı\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Ön Isıtma\\nSıcaklık\",\n      \"description\": \"Profil modunun başlangıcında bu sıcaklığa kadar ön ısıtma yapar\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Ön Isıtma\\nHızı\",\n      \"description\": \"Bu hızda ön ısıtma yapın (saniye başına derece)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Aşama 1\\nSıcaklık\",\n      \"description\": \"Bu aşamanın sonunda hedeflenen sıcaklık\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Aşama 1\\nSüre\",\n      \"description\": \"Bu aşamanın hedef süresi (saniye)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Aşama 2\\nSıcaklık\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Aşama 2\\nSüre\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Aşama 3\\nSıcaklık\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Aşama 3\\nSüre\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Aşama 4\\nSıcaklık\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Aşama 4\\nSüre\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Aşama 5\\nSıcaklık\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Aşama 5\\nSüre\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Soğuma\\nHızı\",\n      \"description\": \"Profil modunun sonunda bu hızda soğuma yapın (saniye başına derece)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"HARHAS\\n\",\n      \"description\": \"Hareket Hassasiyeti (1=En az duyarlı | ... | 9=En duyarlı)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"BKSC\\n\",\n      \"description\": \"Bekleme Modu Sıcaklığı (C)\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"BMZA\\n\",\n      \"description\": \"Bekleme Modu Zaman Aşımı (Dakika | Saniye)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"KPTZA\\n\",\n      \"description\": \"Kapatma Zaman Aşımı (Dakika)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Hall Sensör\\nHassasiyeti\",\n      \"description\": \"Mıknatıslara duyarlılık (1=En az duyarlı | ... | 9=En duyarlı)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Hall etkisi eşiğin üzerinde olduğunda \\\"uyku modu\\\" başlamadan önceki aralık\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"SCKBRM\\n\",\n      \"description\": \"Sıcaklık Birimi (C=Celsius | F=Fahrenheit)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"GRNYÖN\\n\",\n      \"description\": \"Görüntü Yönlendirme (R=Sağlak | L=Solak | O=Otomatik)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"SĞGÖST\\n\",\n      \"description\": \"Soğutma ekranında uç hala sıcakken derece gösterilsin.\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"YZKYHZ\\n\",\n      \"description\": \"Bu yazının kayma hızı (Y=Yavaş | H=Hızlı)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Düğme Yerleri\\nRotasyonu\",\n      \"description\": \"\\\"Düğme Yerleri Rotasyonu\\\" Sıcaklık ayar düğmelerinin yerini değiştirin\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Animasyon\\nHızı\",\n      \"description\": \"Menüdeki simge animasyonlarının hızı (Y=Yavaş | O=Orta | H=Hızlı)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Animasyon\\nDöngüsü\",\n      \"description\": \"Ana menüde simge animasyonlarının döngüsü\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Ekran\\nparlaklığı\",\n      \"description\": \"OLED ekran parlaklığını ayarlar\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Ekran\\nRenkleri\",\n      \"description\": \"OLED ekran renklerini ters çevir\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Boot Logo\\nSüresi\",\n      \"description\": \"Boot logo süresi (s=saniye)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"AYRBİL\\n\",\n      \"description\": \"Boş ekranda ayrıntılı bilgileri daha küçük bir yazı tipi ile göster.\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"GELLHM\\n\",\n      \"description\": \"\\\"Gelişmiş Lehimleme\\\" Lehimleme yaparken detaylı bilgi göster\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Bluetooth LE'yi etkinleştirir\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Güç\\nlimiti\",\n      \"description\": \"Havyanın kullanacağı en yüksek güç (W=Watts)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"CJC Kalibrasyonu\\nSonraki Boot'ta\",\n      \"description\": \"Sonraki boot'ta uç Soğuk Nokta Kompansasyonu kalibre edilecek (Delta T < 5°C ise gerekmez)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"VOL KAL?\\n\",\n      \"description\": \"Voltaj Girişi Kalibrasyonu. Düğmeler ayarlar, çıkmak için uzun bas.\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Güç\\nDarbeleri\",\n      \"description\": \"Güç girişi voltajı ölçüm yoğunluğunu sık tut.\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Güç Darbesi\\nGecikmesi\",\n      \"description\": \"Uyanık tutma darbesinin tetiklenmeden önceki gecikme süresi (x 2.5s)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Güç Darbesi\\nSüresi\",\n      \"description\": \"Uyanık tutma darbesi süresi (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"SIFIRLA?\\n\",\n      \"description\": \"Bütün ayarları sıfırlar\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Dil:\\n TR      Türkçe\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_UK.json",
    "content": "{\n  \"languageCode\": \"UK\",\n  \"languageLocalName\": \"Українська\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"КХС\\nвідкалібровано!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Скид. OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Налаштування\\nскинуті!\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Акселерометр\\nне виявлено!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"USB-PD IC\\nне виявлено!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"ЗАБЛОК.\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"РОЗБЛОК.\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!ЗАБЛОК!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Некерований\\nрозігрів\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Жало закорочено!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Під час наступного завантаження переконайтеся, що жало і ручка мають кімнатну температуру!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"калібрування\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Ви дійсно хочете скинути налаштування до значень за замовчуванням? (A=Так, В=Ні)\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"АККУМ--\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Низька напруга\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Жив.(B): \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Сон...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Жало: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Попередній\\nрозігрів\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Охолодження\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Вірогідно ваш пристрій підробний!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Занадто гараче для\\nзміни профілів\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"П\",\n    \"SettingLeftChar\": \"Л\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"Н\",\n    \"SettingMediumChar\": \"С\",\n    \"SettingFastChar\": \"М\",\n    \"SettingStartSolderingChar\": \"П\",\n    \"SettingStartSleepChar\": \"С\",\n    \"SettingStartSleepOffChar\": \"К\",\n    \"SettingLockBoostChar\": \"Т\",\n    \"SettingLockFullChar\": \"П\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Параметри\\nживлення\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Параметри\\nпайки\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Режим сну\\n\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Параметри\\nінтерфейсу\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Додаткові\\nпараметри\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Режим\\nЗамовчуванню\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"Без\\nДинамічного\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Безпечний\\nРежим\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Авто\\nВизначення\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nДовге\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nКоротке\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Джерело\\nживлення\",\n      \"description\": \"Встановлює напругу відсічки. (DC - 10V) (3S - 9.9V | 4S - 13.2V | 5S - 16.5V | 6S - 19.8V)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Мін.\\nнапруга\",\n      \"description\": \"Мінімальна дозволена напруга на комірку (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"Потужність\\nдж. живлення\",\n      \"description\": \"Потужність ДЖ в Ватах\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\nЗатримка\",\n      \"description\": \"Затримка у 100мс інкрементах для PD для сумісності з деякими версіями QC (0: вимкнена)\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nРежим\",\n      \"description\": \"Вмикає режими PPS & EPR.\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Темпер.\\nТурбо\",\n      \"description\": \"Температура \\\"Турбо\\\" режиму\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Гарячий\\nстарт\",\n      \"description\": \"Режим запуску паяльника (П=Пайка | С=Сон | К=Сон при кімн. темп.)\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Зміна темп.\\nкоротким\",\n      \"description\": \"Зміна температуру при короткому натисканні!\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Зміна темп.\\nдовгим\",\n      \"description\": \"Зміна температуру при довгому натисканні!\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Дозволити\\nблок. кнопок\",\n      \"description\": \"Під час пайки тривале натискання обох кнопок заблокує їх (Т=Тільки турбо | П=Повне)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Етапи\\nпрофілів\",\n      \"description\": \"Кількість етапів в режимі профілів\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Температура\\nПоп.Розігріву\",\n      \"description\": \"Попередньо розігріти до цієї температури на початку режимку профілів\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Швидкість\\nПоп.Розігріву\",\n      \"description\": \"Розігрівати з швидкістю (t° у сек)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Етап 1\\nТемпература\",\n      \"description\": \"Температура на кінці цього етапу\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Етап 1\\nТривалість\",\n      \"description\": \"Тривалість цього етапу (сек)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Етап 2\\nТемпература\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Етап 2\\nТривалість\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Етап 3\\nТемпература\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Етап 3\\nТривалість\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Етап 4\\nТемпература\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Етап 4\\nТривалість\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Етап 5\\nТемпература\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Етап 5\\nТривалість\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Швидкість\\nОхолодження\",\n      \"description\": \"Швидкість охолодження на кінці режиму профілів (t° у сек)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Чутливість\\nдатчику руху\",\n      \"description\": \"Акселерометр (1=мін. чутливості | ... | 9=макс. чутливість)\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Темпер.\\nсну\",\n      \"description\": \"Температура режиму сну (C° | F°)\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Тайм-аут\\nсну\",\n      \"description\": \"Час до переходу до сну (Хв | Сек)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Часу до\\nвимкнення\",\n      \"description\": \"Час до вимкнення (Хв)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Чутливість\\nДатчику Холла\",\n      \"description\": \"Чутливість датчика Холла при виявленні сну (1=мін. чутливість | ... | 9=макс. чутливість)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"Датчик Холла\\nЧас сну\",\n      \"description\": \"Проміжок часу до \\\"часу сну\\\" за умови спрацювання датчику Холла\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Формат темпе-\\nратури(C°/F°)\",\n      \"description\": \"Одиниця виміру температури (C=Цельсій | F=Фаренгейт)\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Обертання\\nекрану\",\n      \"description\": \"Орієнтація екрану (П=Правша | Л=Лівша | A=Автооберт.)\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Показ t° при\\nохолодженні\",\n      \"description\": \"Показувати температуру на екрані охолодження, поки жало залишається гарячим, при цьому екран мерехтить\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Швидкість\\nтексту\",\n      \"description\": \"Швидкість прокрутки тексту (Н=Низькa | М=Максимальна)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Інвертувати\\nкнопки +-?\",\n      \"description\": \"Інвертувати кнопки зміни температури.\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Поміняти\\nклавіші A і B\",\n      \"description\": \"Зворотне призначення кнопок для меню Налаштування\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Швидкість\\nанімації\",\n      \"description\": \"Швидкість анімації іконок у меню (Н=Низькa | С=Середня | М=Максимальна)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Циклічна\\nанімація\",\n      \"description\": \"Циклічна анімація іконок у меню\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Яскравість\\nекрану\",\n      \"description\": \"Налаштування контрасту/яскравості OLED екрану\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Інверт\\nекрану\",\n      \"description\": \"Інвертувати кольори на OLED екрані\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Тривалість\\nлоготипу при запуску\",\n      \"description\": \"Поточна тривалість показу лого при запуску (сек)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Детальний ре-\\nжим очікуван.\",\n      \"description\": \"Показувати детальну інформацію маленьким шрифтом на домашньому екрані\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Детальний\\nрежим пайки\",\n      \"description\": \"Показувати детальну інформацію при пайці.\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Увімкнути BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Макс.\\nпотуж.\",\n      \"description\": \"Макс. потужність, яку може використовувати паяльник (Ватт)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Калібрувати КХС\\nпри наступному запуску\",\n      \"description\": \"При наступному запуску буде відкалібровано Компенсацію Холодного Спаю жала (непотрібне при різниці температур < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Калібрування\\nнапруги\",\n      \"description\": \"Калібрування напруги входу. Налаштувати кнопками, натиснути і утримати щоб завершити.\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Пульс.\\nНавантаж.\",\n      \"description\": \"Деякі PowerBank-и з часом вимк. живлення, якщо пристрій споживає дуже мало енергії)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Час між імп.\\nнапруги\",\n      \"description\": \"Час між імпульсами напруги яка не дає PowerBank-у заснути (x 2.5с)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Тривалість\\nімп. напруги\",\n      \"description\": \"Тривалість імпульсу напруги яка не дає PowerBank-у заснути (x 250мс)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Скинути всі\\nналаштування?\",\n      \"description\": \"Скидання всіх параметрів до стандартних значень.\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Мова:\\n UK  Українська\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Тип Жала\",\n      \"description\": \"Оберіть відповідний тип жала\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_UZ.json",
    "content": "{\n  \"languageCode\": \"UZ\",\n  \"languageLocalName\": \"O'zbek\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Kalibrovka\\nyakunlandi!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Sozlamalar\\ntiklandi\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Ayrim sozlamalar\\no'zgartirildi\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Akselerometr\\ntopilmadi!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"USB-PD IC\\ntopilmadi!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"QULFLANDI\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"QULF OCHILDI\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!QULFLANGAN!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Issiqlik\\nqochishi\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Uchida qisqa tutashuv!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Qayta yuklashdan oldin, uchi va tutqich xona haroratida ekanligiga ishonch hosil qiling!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"Kalibrovka\\nqilinmoqda\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Sozlamalarni standart holatga qaytarishni istaysizmi?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"DC PAST\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Past kuchlanish\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Kirish kuchlanishi: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Uyqu holati...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Uch: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Qizdirish\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Sovutish\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Qurilmangiz soxta bo'lishi mumkin!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Profilni boshlash uchun\\njuda issiq\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"O\",\n    \"SettingLeftChar\": \"C\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"S\",\n    \"SettingMediumChar\": \"O\",\n    \"SettingFastChar\": \"T\",\n    \"SettingStartSolderingChar\": \"P\",\n    \"SettingStartSleepChar\": \"U\",\n    \"SettingStartSleepOffChar\": \"X\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"T\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Quvvat\\nsozlamalari\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Paylash\\nsozlamalari\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Uyqu\\nrejimi\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Foydalanuvchi\\ninterfeysi\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Kengaytirilgan\\nsozlamalar\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Quvvat\\nmanbai\",\n      \"description\": \"Batareya haddan tashqari zaryadsizlanishini oldini olish uchun kuchlanish chegarasini o'rnatish (DC 10V) (S=3.3V har bir yacheyka uchun, quvvat PWR chegarasini o'chirish)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Minimal\\nkuchlanish\",\n      \"description\": \"Batareya yacheyka uchun minimal ruxsat etilgan kuchlanish (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)\"   \n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC\\nvoltage\",\n      \"description\": \"Max QC voltage the iron should negotiate for\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\ntimeout\",\n      \"description\": \"PD negotiation timeout in 100ms steps for compatibility with some QC chargers\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"No Dynamic disables EPR & PPS, Safe mode does not use padding resistance\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Kuchaytirish\\nharorati\",\n      \"description\": \"\\\"Boost mode\\\" rejimida uch harorati\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Boshlash\\nholati\",\n      \"description\": \"P=paylash temperaturasigacha qizdirish | U=qo'zg'atilmagunicha uyqu rejimida ushlash | X=qo'zg'atilmagunicha qizdirilmagan holda ushlash\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Tugmaning qisqa\\nbosilishi\",\n      \"description\": \"Qisqa bosilgandagi harorat o'zgarishi-oshirish\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Tugmaning uzoqroq\\nbosilishi\",\n      \"description\": \"Uzoqroq bosilgandagi harorat o'zgarishi-oshirish\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Tugmalarni qulflashni\\nfaollashtirish\",\n      \"description\": \"Qulflash uchun paylash davomida ikkala tugmani bosib turing (B=faqat boost mode uchun | T=to'liq qulflash)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profil\\nbosqichlari\",\n      \"description\": \"Profil rejimlarida bosqichlar soni\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Dastlabgi\\nHarorat\",\n      \"description\": \"Profil rejimida dastlab ushbu haroratga qizdirish\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Qizdirish\\nTezligi\",\n      \"description\": \"Ushbu tezlikda qizdirish (1 sekundda shuncha daraja)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"1-faza\\nHarorati\",\n      \"description\": \"Bu fazaning oxirida mo'ljallangan harorat\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"1-faza\\nDavomiyligi\",\n      \"description\": \"Ushbu fazaning davomiyligi (sekund)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"2-faza\\nHarorati\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"2-faza\\nDavomiyligi\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"3-faza\\nHarorati\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"3-faza\\nDavomiyligi\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"4-faza\\nHarorati\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"4-faza\\nDavomiyligi\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"5-faza\\nHarorati\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"5-faza\\nDavomiyligi\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Sovutish\\ntezligi\",\n      \"description\": \"Profil rejimi oxirida bu tezlikda sovutish (1 sekundda shuncha daraja)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Harakat\\nsezgirligi\",\n      \"description\": \"1=quyi sezgirlik | ... | 9=eng yuqori sezgirlik\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Uyqu\\nharorati\",\n      \"description\": \"\\\"Uyqu holati\\\"dagi uch harorati\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Uyquga ketish\\nvaqti\",\n      \"description\": \"\\\"Uyqu holati\\\" boshlanishidan oldingi interval sleep mode (s=sekund | m=minut)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"O'chish\\nvaqti\",\n      \"description\": \"Temirni o'chirishdan oldingi interval (m=minut)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Hall sensori\\nsezgirligi\",\n      \"description\": \"Magnitlarga nisbatan sezgirlik darajasi (1=quyi sezgirlik | ... | 9=eng yuqori sezgirlik)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Interval before \\\"sleep mode\\\" starts when hall effect is above threshold\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Harorat o'lchov\\nbirligi\",\n      \"description\": \"C=°Selsiy | F=°Fahrenheit\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Ekran\\nyo'nalishi\",\n      \"description\": \"O=o'ng qo'l | C=chap qo'l | A=avtomatik\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Sovutish\\nindikatori\",\n      \"description\": \"Uchi qizigan bo'sh turgan holatida harorat o'lchovini yangilab turish\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Matn aylanish\\ntezligi\",\n      \"description\": \"Matn aylanish tezligini sozlash (S=sekin | T=tez)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"(+) va (-) tugmalarni\\nalmashtirish\",\n      \"description\": \"Harorat o'zgarishi uchun tugmachalarni vazifasini almashish\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Anim.\\ntezligi\",\n      \"description\": \"Menyudagi ikonka animatsiyalari tezligini sozlash (S=sekin | O=o'rtacha | T=tez)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Anim.\\nqaytarilishi\",\n      \"description\": \"Bosh menyudagi ikonka anim. qaytarilishi\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Ekran\\nyorqinligi\",\n      \"description\": \"OLED ekran yorqinligini sozlash\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Ranglarni\\ninvert qilish\",\n      \"description\": \"OLED ekran ranglarini teskari qilish\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Yuklanish logosi\\ndavomiyligi\",\n      \"description\": \"Yuklanish logosi davomiyligini o'rnatish (s=sekund)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Batafsil\\nbo'sh turgandagi ekran\",\n      \"description\": \"B'sh turgandagi ekranda kichik shriftda batafsil ma’lumotni ko'rsatish\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Batafsil\\npayvandlash ekrani\",\n      \"description\": \"Payvandlash ekrani uchun kichik shrift bilan batafsil ma’lumotni ko'rsatish\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Faollashtirish BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Quvvat\\nchegarasi\",\n      \"description\": \"Temir foydalanishi mumkin bo'lgan o'rtacha maksimal quvvat (W=watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Keyingi yuklashda\\nCJC kalibrovkasi\",\n      \"description\": \"Keyingi yuklashda Sovuq Tugun Kompensatsiyasini (CJC) kalibrlash (Delta T < 5°C bo'lsa, talab qilinmaydi)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Kirish kuchlanishini\\nkalibrlash\",\n      \"description\": \"VIN kalibrovkasini boshlash (chiqish uchun uzoq bosib turing)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Quvvat\\npulsi\",\n      \"description\": \"Uxlashdan saqlash pulsining quvvat intensivligi (W=watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Quvvat pulsi\\nkechikishi\",\n      \"description\": \"Uxlashdan saqlash pulsi boshlanishigacha bo'lgan kechikish (x 2.5 soniya)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Quvvat pulsi\\ndavomiyligi\",\n      \"description\": \"Uxlashdan saqlash pulsi davomiyligi (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Sozlamalarni\\nqayta tiklash\",\n      \"description\": \"Barcha sozlamalarni odatiy holatga qaytarish\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Til:\\n UZ   O'zbek tili\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_VI.json",
    "content": "{\n  \"languageCode\": \"VI\",\n  \"languageLocalName\": \"Tieng Viet\",\n  \"tempUnitFahrenheit\": false,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Calibration\\ndone!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"Reset OK\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"Mot so cài đat\\nđã thay đoi\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"Không phát hien\\ngia toc ke!\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"Không phát hien\\nUSB-PD IC!\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"Đã khóa\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"Mo khóa\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"Đã khóa!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"Nhiet\\nTat gia nhiet\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Tip Shorted!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Before rebooting, make sure tip & handle are at room temperature!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"calibrating\\n\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"Ban chac chan muon khôi phuc tat ca cài đat ve mac đinh?\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"DC thap\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Đien áp thap\\n\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Đau vào V: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Đang ngu...\\n\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Meo: \\n\"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Preheat\\n\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Cooldown\\n\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"Your device is most likely a counterfeit!\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Too hot to\\nstart profile\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"R\",\n    \"SettingLeftChar\": \"L\",\n    \"SettingAutoChar\": \"A\",\n    \"SettingSlowChar\": \"S\",\n    \"SettingMediumChar\": \"M\",\n    \"SettingFastChar\": \"F\",\n    \"SettingStartSolderingChar\": \"S\",\n    \"SettingStartSleepChar\": \"Z\",\n    \"SettingStartSleepOffChar\": \"R\",\n    \"SettingLockBoostChar\": \"B\",\n    \"SettingLockFullChar\": \"F\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"Cài đat\\nnguon đien\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"Cài đat\\ntay hàn\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"Che đo\\nngu\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"Giao dien\\nnguoi dùng\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"Cài đat\\nnâng cao\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"Nguon\\nđien\",\n      \"description\": \"Nguon đien, đat đien áp giam. (DC 10V) (S 3.3V moi cell, tat gioi han công suat)\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"Voltage\\ntoi thieu\",\n      \"description\": \"Đien áp toi thieu cho phép trên moi cell (3S: 3 - 3,7V | 4-6S: 2,4 - 3,7V)\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC\\nvoltage\",\n      \"description\": \"Đien áp QC toi đa mà tay hàn yêu cau\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD\\nsau\",\n      \"description\": \"Thoi gian cho đàm phán PD trong các buoc 100ms đe tuong thích voi mot so bo sac QC\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nMode\",\n      \"description\": \"No Dynamic disables EPR & PPS, Safe mode does not use padding resistance\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"Tăng\\nnhiet đo\",\n      \"description\": \"Nhiet đo dùng trong che đo \\\"tăng cuong\\\"\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"Nhiet đo\\nđang tăng\",\n      \"description\": \"S=nhiet đo hàn | Z=cho o nhiet đo ngu đen khi cu đong | R=cho mà không gia nhiet đen khi cu đong\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"Thay đoi n.đo\\nan nút nhanh\",\n      \"description\": \"Biên đo tăng/giam nhiet đo khi an nút nhanh\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"Thay đoi n.đo\\nan nút lâu\",\n      \"description\": \"Biên đo tăng/giam nhiet đo khi an nút lâu\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"Cho phép khóa\\ncác nút\",\n      \"description\": \"Trong khi hàn, giu ca 2 nút đe khóa (B=chi che đo tăng cuong | F=khóa hoàn toàn)\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile\\nPhases\",\n      \"description\": \"Number of phases in profile mode\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Preheat\\nTemp\",\n      \"description\": \"Preheat to this temperature at the start of profile mode\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Preheat\\nSpeed\",\n      \"description\": \"Preheat at this rate (degrees per second)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Phase 1\\nTemp\",\n      \"description\": \"Target temperature for the end of this phase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Phase 1\\nDuration\",\n      \"description\": \"Target duration of this phase (seconds)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Phase 2\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Phase 2\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Phase 3\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Phase 3\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Phase 4\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Phase 4\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Phase 5\\nTemp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Phase 5\\nDuration\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Cooldown\\nSpeed\",\n      \"description\": \"Cooldown at this rate at the end of profile mode (degrees per second)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"Cam bien\\ncu đong\",\n      \"description\": \"1=đo nhay thap nhat| ... | 9=đo nhay cao nhat\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"Nhiet đo\\nkhi ngu\",\n      \"description\": \"Giam nhiet đo khi o \\\"Che đo ngu\\\"\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"Ngu\\nsau\",\n      \"description\": \"thoi gian truoc khi \\\"Che đo ngu\\\" bat đau (s=giây | m=phút)\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"Tat\\nsau\",\n      \"description\": \"khoang thoi gian truoc khi tay hàn tat (m=phút)\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"Hall\\nđo nhay\",\n      \"description\": \"Đo nhay cam bien Hall đe phát hien che đo ngu (1=ít nhay nhat |...| 9=nhay nhat)\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Interval before \\\"sleep mode\\\" starts when hall effect is above threshold\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"Đon vi\\nnhiet đo\",\n      \"description\": \"C= Đo C | F= Đo F\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"Huong\\nhien thi\",\n      \"description\": \"R=huong tay phai | L=huong tay trái | A=tu đong\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"Nguoi đi\\nchop mat\",\n      \"description\": \"Nhap nháy nhiet đo sau khi viec gia nhiet tam dung trong khi mui hàn van nóng\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"Toc đo\\ncuon\",\n      \"description\": \"Toc đo cuon văn ban(S=cham | F=nhanh)\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"Đao nguoc\\nnút + -\",\n      \"description\": \"Đao nguoc chuc năng các nút đieu chinh nhiet đo\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"Toc đo\\nhoat anh\",\n      \"description\": \"Toc đo cua hoat anh menu (S=cham | M=trung bình | F=nhanh)\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"Hoat anh\\nlap lai\",\n      \"description\": \"Lap lai các hoat anh trong màn hình chính\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"Đo tuong phan\\nmàn hình\",\n      \"description\": \"Đieu chinh đo sáng màn hình OLED\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"Đao nguoc màu\\nmàn hình\",\n      \"description\": \"Đao nguoc màu màn hình OLED\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"Boot logo\\nduration\",\n      \"description\": \"Set boot logo duration (s=seconds)\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"Chi tiet\\nmàn hình cho\",\n      \"description\": \"hien thi thông tin chi tiet bang phông chu nho hon trên màn hình cho\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"Chi tiet\\nmàn hình hàn\",\n      \"description\": \"Hien thi thông tin bang phông chu nho hon trên màn hình hàn\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\\n\",\n      \"description\": \"Enables BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"Công suat\\ngioi han\",\n      \"description\": \"Công suat toi đa mà tay hàn có the su dung (W=watt)\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"Calibrate CJC\\nat next boot\",\n      \"description\": \"Calbrate Cold Junction Compensation at next boot (not required if Delta T is < 5°C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"Hieu chinh\\nđien áp đau vào?\",\n      \"description\": \"bat đau hieu chuan VIN (nhan và giu đe thoát)\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"Công suat\\nkích nguon\",\n      \"description\": \"Cuong đo công suat kích nguon (watt)\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"Trì hoãn\\nđien áp kích\",\n      \"description\": \"Trì hoãn truoc khi kích hoat kích nguon(x 2,5 giây)\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"Thoi luong\\nkích nguon\",\n      \"description\": \"thoi luong kích nguon (x 250ms)\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"Khôi phuc\\ncài đat goc?\",\n      \"description\": \"đat lai tat ca cài đat ve mac đinh\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"Ngôn ngu:\\n VI  Tieng Viet\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_YUE_HK.json",
    "content": "{\n  \"languageCode\": \"YUE_HK\",\n  \"languageLocalName\": \"廣東話 (香港)\",\n  \"tempUnitFahrenheit\": true,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"Calibration done!\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"已重設！\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"設定已被重設！\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"未能偵測加速度計\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"未能偵測PD晶片\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"已鎖定\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"已解除鎖定\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!撳掣鎖定!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"加熱失控\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!Tip Shorted!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"Before rebooting, make sure tip & handle are at room temperature!\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"calibrating\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"你係咪確定要將全部設定重設到預設值？\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"電壓過低\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Undervoltage\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Input V: \"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Sleeping...\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Tip: \"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Preheat\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Cooldown\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"依支焫雞好有可能係冒牌貨！\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Too hot to start profile\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"右\",\n    \"SettingLeftChar\": \"左\",\n    \"SettingAutoChar\": \"自\",\n    \"SettingSlowChar\": \"慢\",\n    \"SettingMediumChar\": \"中\",\n    \"SettingFastChar\": \"快\",\n    \"SettingStartSolderingChar\": \"焊\",\n    \"SettingStartSleepChar\": \"待\",\n    \"SettingStartSleepOffChar\": \"室\",\n    \"SettingLockBoostChar\": \"增\",\n    \"SettingLockFullChar\": \"全\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"電源設定\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"焊接設定\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"待機設定\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"使用者介面\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"進階設定\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"電源\",\n      \"description\": \"輸入電源；設定自動停機電壓 <DC 10V> <S 鋰電池，以每粒3.3V計算；依個設定會停用功率限制>\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"最低電壓\",\n      \"description\": \"每粒電池嘅最低可用電壓 <伏特> <3S: 3.0V - 3.7V, 4/5/6S: 2.4V - 3.7V>\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC電壓\",\n      \"description\": \"使用QC電源時請求嘅最高目標電壓\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD逾時\",\n      \"description\": \"設定USB PD協定交涉嘅逾時時限；為兼容某啲QC電源而設 <x100ms（亳秒）>\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD VPDO\",\n      \"description\": \"No Dynamic disables EPR & PPS, Safe mode does not use padding resistance\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"增熱温度\",\n      \"description\": \"喺增熱模式時使用嘅温度\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"自動啓用\",\n      \"description\": \"開機時自動啓用 <焊=焊接模式 | 待=待機模式 | 室=室温待機>\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"温度調整 短\",\n      \"description\": \"調校温度時短撳一下嘅温度變幅\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"温度調整 長\",\n      \"description\": \"調校温度時長撳嘅温度變幅\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"撳掣鎖定\",\n      \"description\": \"喺焊接模式時，同時長撳兩粒掣啓用撳掣鎖定 <增=淨係容許增熱模式 | 全=鎖定全部>\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile Phases\",\n      \"description\": \"Number of phases in profile mode\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Preheat Temp\",\n      \"description\": \"Preheat to this temperature at the start of profile mode\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Preheat Speed\",\n      \"description\": \"Preheat at this rate (degrees per second)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Phase 1 Temp\",\n      \"description\": \"Target temperature for the end of this phase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Phase 1 Duration\",\n      \"description\": \"Target duration of this phase (seconds)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Phase 2 Temp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Phase 2 Duration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Phase 3 Temp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Phase 3 Duration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Phase 4 Temp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Phase 4 Duration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Phase 5 Temp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Phase 5 Duration\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Cooldown Speed\",\n      \"description\": \"Cooldown at this rate at the end of profile mode (degrees per second)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"動作敏感度\",\n      \"description\": \"1=最低敏感度 | ... | 9=最高敏感度\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"待機温度\",\n      \"description\": \"喺待機模式時嘅焫雞咀温度\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"待機延時\",\n      \"description\": \"自動進入待機模式前嘅閒置等候時間 <s=秒 | m=分鐘>\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"自動熄機\",\n      \"description\": \"自動熄機前嘅閒置等候時間 <m=分鐘>\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"磁場敏感度\",\n      \"description\": \"磁場感應器用嚟啓動待機模式嘅敏感度 <1=最低敏感度 | ... | 9=最高敏感度>\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Interval before \\\"sleep mode\\\" starts when hall effect is above threshold\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"温度單位\",\n      \"description\": \"C=攝氏 | F=華氏\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"畫面方向\",\n      \"description\": \"右=使用右手 | 左=使用左手 | 自=自動\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"降温時閃爍\",\n      \"description\": \"停止加熱之後，當焫雞咀仲係熱嗰陣閃爍畫面\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"捲動速度\",\n      \"description\": \"解說文字嘅捲動速度\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"反轉加減掣\",\n      \"description\": \"反轉調校温度時加減掣嘅方向\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"動畫速度\",\n      \"description\": \"功能表圖示動畫嘅速度 <慢=慢速 | 中=中速 | 快=快速>\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"動畫循環\",\n      \"description\": \"循環顯示功能表圖示動畫\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"熒幕亮度\",\n      \"description\": \"設定OLED熒幕嘅亮度\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"熒幕反轉色\",\n      \"description\": \"反轉OLED熒幕嘅黑白色\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"開機畫面\",\n      \"description\": \"設定開機畫面顯示時長 <s=秒>\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"詳細閒置畫面\",\n      \"description\": \"喺閒置畫面以英文細字顯示詳細嘅資料\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"詳細焊接畫面\",\n      \"description\": \"喺焊接模式畫面以英文細字顯示詳細嘅資料\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"Bluetooth\",\n      \"description\": \"Enables BLE\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"功率限制\",\n      \"description\": \"限制焫雞可用嘅最大功率 <W=watt（火）>\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"校正CJC\",\n      \"description\": \"At next boot tip Cold Junction Compensation will be calibrated (not required if Delta T is < 5 C)\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"輸入電壓校正？\",\n      \"description\": \"開始校正VIN輸入電壓 <長撳以退出>\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"電源脈衝\",\n      \"description\": \"為保持電源喚醒而通電所用嘅功率 <watt（火）>\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"電源脈衝間隔\",\n      \"description\": \"為保持電源喚醒，每次通電之間嘅間隔時間 <x2.5s（秒）>\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"電源脈衝時長\",\n      \"description\": \"為保持電源喚醒，每次通電脈衝嘅時間長度 <x250ms（亳秒）>\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"全部重設？\",\n      \"description\": \"將所有設定重設到預設值\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"語言： 廣東話\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_ZH_CN.json",
    "content": "{\n  \"languageCode\": \"ZH_CN\",\n  \"languageLocalName\": \"简体中文\",\n  \"tempUnitFahrenheit\": true,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"校正完成！\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"已重置！\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"设定已被重置！\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"未检测到加速度计\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"未检测到PD电路\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"已锁定\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"已解锁\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!按键锁定!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"加热失控\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!烙铁头短路!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"在重启前请确认烙铁头及本体已完全冷却！\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"校正中\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"你是否确定要将全部设定重置为默认值？\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"电压过低\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"欠压\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"VIN: \\n\"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Zzzz...\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"<--- \"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"预热中\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"冷却\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"这支电烙铁很有可能是冒牌货！\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"设备过热\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"右\",\n    \"SettingLeftChar\": \"左\",\n    \"SettingAutoChar\": \"自\",\n    \"SettingSlowChar\": \"慢\",\n    \"SettingMediumChar\": \"中\",\n    \"SettingFastChar\": \"快\",\n    \"SettingStartSolderingChar\": \"焊\",\n    \"SettingStartSleepChar\": \"待\",\n    \"SettingStartSleepOffChar\": \"室\",\n    \"SettingLockBoostChar\": \"增\",\n    \"SettingLockFullChar\": \"全\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"电源设置\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"焊接设置\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"待机设置\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"用户界面\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"高级设置\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"默认模式\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"安全模式\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"自动检测\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"下限电压\",\n      \"description\": \"设置自动停机电压 <DC=10V | S=（串）每节锂电池3.3V；此设置会禁用功率限制>\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"最低电压\",\n      \"description\": \"每节电池的最低允许电压 <V（伏特）> <3S: 3.0V - 3.7V, 4/5/6S: 2.4V - 3.7V>\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC电压\",\n      \"description\": \"使用QC电源时请求的最高目标电压\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD超时\",\n      \"description\": \"设定USB-PD协议交涉的超时时限；为兼容某些QC电源而设 <x100ms（亳秒）>\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD\\nVPDO\",\n      \"description\": \"启用PPS和EPR快充支持\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"增热温度\",\n      \"description\": \"增热模式时使用的温度\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"自动启动\",\n      \"description\": \"开机时自动启动 <焊=焊接模式 | 待=待机模式 | 室=室温待机>\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"短按温度调整\",\n      \"description\": \"调校温度时短按按键的温度变幅\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"长按温度调整\",\n      \"description\": \"调校温度时长按按键的温度变幅\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"按键锁定\",\n      \"description\": \"焊接模式时，同时长按两个按键启用按键锁定 <增=只容许增热模式 | 全=完全锁定>\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"配置阶数\",\n      \"description\": \"配置模式下的阶段数量\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"预热温度\",\n      \"description\": \"配置开始时的目标温度\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"预热速度\",\n      \"description\": \"将以此速度进行预热 (度/秒)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"阶段1温度\",\n      \"description\": \"此阶段结束时的目标温度\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"阶段1时间\",\n      \"description\": \"此阶段的目标持续时间（秒）\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"阶段2温度\",\n      \"description\": \"此阶段结束时的目标温度\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"阶段2时间\",\n      \"description\": \"此阶段的目标持续时间（秒）\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"阶段3温度\",\n      \"description\": \"此阶段结束时的目标温度\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"阶段3时间\",\n      \"description\": \"此阶段的目标持续时间（秒）\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"阶段4温度\",\n      \"description\": \"此阶段结束时的目标温度\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"阶段4时间\",\n      \"description\": \"此阶段的目标持续时间（秒）\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"阶段5温度\",\n      \"description\": \"此阶段结束时的目标温度\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"阶段5时间\",\n      \"description\": \"此阶段的目标持续时间（秒）\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"冷却速度\",\n      \"description\": \"在配置模式结束时以此速度进行冷却（度/秒）\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"动作灵敏度\",\n      \"description\": \"1=最低灵敏度 | ... | 9=最高灵敏度\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"待机温度\",\n      \"description\": \"待机模式时的烙铁头温度\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"待机超时\",\n      \"description\": \"自动进入待机模式前的等候时间 <s=秒 | m=分钟>\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"自动关机\",\n      \"description\": \"自动关机前的等候时间 <m=分钟>\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"磁场灵敏度\",\n      \"description\": \"霍尔效应传感器用作启动待机模式的灵敏度 <1=最低灵敏度 | ... | 9=最高灵敏度>\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"霍尔传感器休眠时间\",\n      \"description\": \"当霍尔传感器检测值高于阈值时，进入“睡眠模式”前的间隔时间\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"温度单位\",\n      \"description\": \"C=摄氏 | F=华氏\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"显示方向\",\n      \"description\": \"右=右手 | 左=左手 | 自=自动\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"降温时闪显\",\n      \"description\": \"停止加热之后，闪动温度显示提醒烙铁头仍处于高温状态\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"滚动速度\",\n      \"description\": \"解说文字的滚动速度\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"调换加减键\",\n      \"description\": \"调校温度时更换加减键的方向\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"动画速度\",\n      \"description\": \"主菜单中功能图标动画的播放速度 <慢=慢速 | 中=中速 | 快=快速>\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"动画循环\",\n      \"description\": \"主菜单中循环播放功能图标动画\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"屏幕亮度\",\n      \"description\": \"调整OLED屏幕的亮度\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"反转屏幕颜色\",\n      \"description\": \"反转OLED黑/白屏幕\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"开机画面\",\n      \"description\": \"设定开机画面显示时长 <s=秒>\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"闲置画面详情\",\n      \"description\": \"闲置画面以英语小字体显示详情\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"焊接画面详情\",\n      \"description\": \"焊接模式画面以英语小字体显示详请\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"蓝牙\",\n      \"description\": \"启用蓝牙支持\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"功率限制\",\n      \"description\": \"限制烙铁可用的最大功率 <W=瓦特>\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"校正CJC\",\n      \"description\": \"在下次重启时校正烙铁头热电偶冷接点补偿值（CJC）（温差小于5摄氏度时无需校正）\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"输入电压校正\",\n      \"description\": \"开始校正输入电压（VIN）<长按以退出>\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"电源脉冲\",\n      \"description\": \"为保持电源处于唤醒状态所用的功率 <Watt（瓦特）>\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"电源脉冲间隔\",\n      \"description\": \"为保持电源处于唤醒状态，每次通电之间的间隔时间 <x2.5s（秒）>\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"电源脉冲时长\",\n      \"description\": \"为保持电源处于唤醒状态，每次通电脉冲的时间长度 <x250ms（亳秒）>\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"全部重置\",\n      \"description\": \"将所有设定重置为默认值\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"语言：简体中文\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"焊接头类型\",\n      \"description\": \"选择安装合适的尖端类型\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translation_ZH_TW.json",
    "content": "{\n  \"languageCode\": \"ZH_TW\",\n  \"languageLocalName\": \"正體中文\",\n  \"tempUnitFahrenheit\": true,\n  \"messagesWarn\": {\n    \"CalibrationDone\": {\n      \"message\": \"校正完成！\"\n    },\n    \"ResetOKMessage\": {\n      \"message\": \"已重設！\"\n    },\n    \"SettingsResetMessage\": {\n      \"message\": \"設定已被重設！\"\n    },\n    \"NoAccelerometerMessage\": {\n      \"message\": \"未能偵測加速度計\"\n    },\n    \"NoPowerDeliveryMessage\": {\n      \"message\": \"未能偵測PD晶片\"\n    },\n    \"LockingKeysString\": {\n      \"message\": \"已鎖定\"\n    },\n    \"UnlockingKeysString\": {\n      \"message\": \"已解除鎖定\"\n    },\n    \"WarningKeysLockedString\": {\n      \"message\": \"!按鍵鎖定!\"\n    },\n    \"WarningThermalRunaway\": {\n      \"message\": \"加熱失控\"\n    },\n    \"WarningTipShorted\": {\n      \"message\": \"!烙鐵頭短路!\"\n    },\n    \"SettingsCalibrationWarning\": {\n      \"message\": \"在重啟前請確認烙鐵頭及本體已完全冷卻！\"\n    },\n    \"CJCCalibrating\": {\n      \"message\": \"校正中\"\n    },\n    \"SettingsResetWarning\": {\n      \"message\": \"你是否確定要將全部設定重設到預設值？\"\n    },\n    \"UVLOWarningString\": {\n      \"message\": \"電壓過低\"\n    },\n    \"UndervoltageString\": {\n      \"message\": \"Undervoltage\"\n    },\n    \"InputVoltageString\": {\n      \"message\": \"Input V: \"\n    },\n    \"SleepingAdvancedString\": {\n      \"message\": \"Sleeping...\"\n    },\n    \"SleepingTipAdvancedString\": {\n      \"message\": \"Tip: \"\n    },\n    \"ProfilePreheatString\": {\n      \"message\": \"Preheat\"\n    },\n    \"ProfileCooldownString\": {\n      \"message\": \"Cooldown\"\n    },\n    \"DeviceFailedValidationWarning\": {\n      \"message\": \"這支電烙鐵很有可能是冒牌貨！\"\n    },\n    \"TooHotToStartProfileWarning\": {\n      \"message\": \"Too hot to start profile\"\n    }\n  },\n  \"characters\": {\n    \"SettingRightChar\": \"右\",\n    \"SettingLeftChar\": \"左\",\n    \"SettingAutoChar\": \"自\",\n    \"SettingSlowChar\": \"慢\",\n    \"SettingMediumChar\": \"中\",\n    \"SettingFastChar\": \"快\",\n    \"SettingStartSolderingChar\": \"焊\",\n    \"SettingStartSleepChar\": \"待\",\n    \"SettingStartSleepOffChar\": \"室\",\n    \"SettingLockBoostChar\": \"增\",\n    \"SettingLockFullChar\": \"全\"\n  },\n  \"menuGroups\": {\n    \"PowerMenu\": {\n      \"displayText\": \"電源設定\",\n      \"description\": \"\"\n    },\n    \"SolderingMenu\": {\n      \"displayText\": \"焊接設定\",\n      \"description\": \"\"\n    },\n    \"PowerSavingMenu\": {\n      \"displayText\": \"待機設定\",\n      \"description\": \"\"\n    },\n    \"UIMenu\": {\n      \"displayText\": \"使用者介面\",\n      \"description\": \"\"\n    },\n    \"AdvancedMenu\": {\n      \"displayText\": \"進階設定\",\n      \"description\": \"\"\n    }\n  },\n  \"menuValues\": {\n    \"USBPDModeDefault\": {\n      \"displayText\": \"Default\\nMode\"\n    },\n    \"USBPDModeNoDynamic\": {\n      \"displayText\": \"No\\nDynamic\"\n    },\n    \"USBPDModeSafe\": {\n      \"displayText\": \"Safe\\nMode\"\n    },\n    \"TipTypeAuto\": {\n      \"displayText\": \"Auto\\nSense\"\n    },\n    \"TipTypeT12Long\": {\n      \"displayText\": \"TS100\\nLong\"\n    },\n    \"TipTypeT12Short\": {\n      \"displayText\": \"Pine\\nShort\"\n    },\n    \"TipTypeT12PTS\": {\n      \"displayText\": \"PTS\\n200\"\n    },\n    \"TipTypeTS80\": {\n      \"displayText\": \"TS80\\n\"\n    },\n    \"TipTypeJBCC210\": {\n      \"displayText\": \"JBC\\nC210\"\n    }\n  },\n  \"menuOptions\": {\n    \"DCInCutoff\": {\n      \"displayText\": \"電源\",\n      \"description\": \"輸入電源；設定自動停機電壓 <DC 10V> <S 鋰電池，以每顆3.3V計算；此設定會停用功率限制>\"\n    },\n    \"MinVolCell\": {\n      \"displayText\": \"最低電壓\",\n      \"description\": \"每顆電池的最低可用電壓 <伏特> <3S: 3.0V - 3.7V, 4/5/6S: 2.4V - 3.7V>\"\n    },\n    \"QCMaxVoltage\": {\n      \"displayText\": \"QC電壓\",\n      \"description\": \"使用QC電源時請求的最高目標電壓\"\n    },\n    \"PDNegTimeout\": {\n      \"displayText\": \"PD逾時\",\n      \"description\": \"設定USB PD協定交涉的逾時時限；為兼容某些QC電源而設 <x100ms（亳秒）>\"\n    },\n    \"USBPDMode\": {\n      \"displayText\": \"PD VPDO\",\n      \"description\": \"開啟PPS及EPR支援\"\n    },\n    \"BoostTemperature\": {\n      \"displayText\": \"增熱溫度\",\n      \"description\": \"於增熱模式時使用的溫度\"\n    },\n    \"AutoStart\": {\n      \"displayText\": \"自動啟用\",\n      \"description\": \"開機時自動啟用 <焊=焊接模式 | 待=待機模式 | 室=室溫待機>\"\n    },\n    \"TempChangeShortStep\": {\n      \"displayText\": \"溫度調整 短\",\n      \"description\": \"調校溫度時短按一下的溫度變幅\"\n    },\n    \"TempChangeLongStep\": {\n      \"displayText\": \"溫度調整 長\",\n      \"description\": \"調校溫度時長按按鍵的溫度變幅\"\n    },\n    \"LockingMode\": {\n      \"displayText\": \"按鍵鎖定\",\n      \"description\": \"於焊接模式時，同時長按兩個按鍵啟用按鍵鎖定 <增=只容許增熱模式 | 全=鎖定全部>\"\n    },\n    \"ProfilePhases\": {\n      \"displayText\": \"Profile Phases\",\n      \"description\": \"Number of phases in profile mode\"\n    },\n    \"ProfilePreheatTemp\": {\n      \"displayText\": \"Preheat Temp\",\n      \"description\": \"Preheat to this temperature at the start of profile mode\"\n    },\n    \"ProfilePreheatSpeed\": {\n      \"displayText\": \"Preheat Speed\",\n      \"description\": \"Preheat at this rate (degrees per second)\"\n    },\n    \"ProfilePhase1Temp\": {\n      \"displayText\": \"Phase 1 Temp\",\n      \"description\": \"Target temperature for the end of this phase\"\n    },\n    \"ProfilePhase1Duration\": {\n      \"displayText\": \"Phase 1 Duration\",\n      \"description\": \"Target duration of this phase (seconds)\"\n    },\n    \"ProfilePhase2Temp\": {\n      \"displayText\": \"Phase 2 Temp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase2Duration\": {\n      \"displayText\": \"Phase 2 Duration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Temp\": {\n      \"displayText\": \"Phase 3 Temp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase3Duration\": {\n      \"displayText\": \"Phase 3 Duration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Temp\": {\n      \"displayText\": \"Phase 4 Temp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase4Duration\": {\n      \"displayText\": \"Phase 4 Duration\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Temp\": {\n      \"displayText\": \"Phase 5 Temp\",\n      \"description\": \"\"\n    },\n    \"ProfilePhase5Duration\": {\n      \"displayText\": \"Phase 5 Duration\",\n      \"description\": \"\"\n    },\n    \"ProfileCooldownSpeed\": {\n      \"displayText\": \"Cooldown Speed\",\n      \"description\": \"Cooldown at this rate at the end of profile mode (degrees per second)\"\n    },\n    \"MotionSensitivity\": {\n      \"displayText\": \"動作敏感度\",\n      \"description\": \"1=最低敏感度 | ... | 9=最高敏感度\"\n    },\n    \"SleepTemperature\": {\n      \"displayText\": \"待機溫度\",\n      \"description\": \"於待機模式時的烙鐵頭溫度\"\n    },\n    \"SleepTimeout\": {\n      \"displayText\": \"待機延時\",\n      \"description\": \"自動進入待機模式前的閒置等候時間 <s=秒 | m=分鐘>\"\n    },\n    \"ShutdownTimeout\": {\n      \"displayText\": \"自動關機\",\n      \"description\": \"自動關機前的閒置等候時間 <m=分鐘>\"\n    },\n    \"HallEffSensitivity\": {\n      \"displayText\": \"磁場敏感度\",\n      \"description\": \"磁場感應器用作啟動待機模式的敏感度 <1=最低敏感度 | ... | 9=最高敏感度>\"\n    },\n    \"HallEffSleepTimeout\": {\n      \"displayText\": \"HallSensor\\nSleepTime\",\n      \"description\": \"Interval before \\\"sleep mode\\\" starts when hall effect is above threshold\"\n    },\n    \"TemperatureUnit\": {\n      \"displayText\": \"溫標\",\n      \"description\": \"C=攝氏 | F=華氏\"\n    },\n    \"DisplayRotation\": {\n      \"displayText\": \"畫面方向\",\n      \"description\": \"右=使用右手 | 左=使用左手 | 自=自動\"\n    },\n    \"CooldownBlink\": {\n      \"displayText\": \"降溫時閃爍\",\n      \"description\": \"停止加熱之後，當烙鐵頭仍處於高溫時閃爍畫面\"\n    },\n    \"ScrollingSpeed\": {\n      \"displayText\": \"捲動速度\",\n      \"description\": \"解說文字的捲動速度\"\n    },\n    \"ReverseButtonTempChange\": {\n      \"displayText\": \"調換加減鍵\",\n      \"description\": \"調校溫度時調換加減鍵的方向\"\n    },\n    \"ReverseButtonSettings\": {\n      \"displayText\": \"Swap\\nA B keys\",\n      \"description\": \"Reverse assignment of buttons for Settings menu\"\n    },\n    \"AnimSpeed\": {\n      \"displayText\": \"動畫速度\",\n      \"description\": \"功能表圖示動畫的速度 <慢=慢速 | 中=中速 | 快=快速>\"\n    },\n    \"AnimLoop\": {\n      \"displayText\": \"動畫循環\",\n      \"description\": \"循環顯示功能表圖示動畫\"\n    },\n    \"Brightness\": {\n      \"displayText\": \"螢幕亮度\",\n      \"description\": \"設定OLED螢幕的亮度\"\n    },\n    \"ColourInversion\": {\n      \"displayText\": \"螢幕反轉色\",\n      \"description\": \"反轉OLED螢幕的黑白色彩\"\n    },\n    \"LOGOTime\": {\n      \"displayText\": \"開機畫面\",\n      \"description\": \"設定開機畫面顯示時長 <s=秒>\"\n    },\n    \"AdvancedIdle\": {\n      \"displayText\": \"詳細閒置畫面\",\n      \"description\": \"於閒置畫面以英文小字型顯示詳細資料\"\n    },\n    \"AdvancedSoldering\": {\n      \"displayText\": \"詳細焊接畫面\",\n      \"description\": \"於焊接模式畫面以英文小字型顯示詳細資料\"\n    },\n    \"BluetoothLE\": {\n      \"displayText\": \"藍牙\",\n      \"description\": \"開啟藍牙支援\"\n    },\n    \"PowerLimit\": {\n      \"displayText\": \"功率限制\",\n      \"description\": \"限制烙鐵可用的最大功率 <W=watt（瓦特）>\"\n    },\n    \"CalibrateCJC\": {\n      \"displayText\": \"校正CJC\",\n      \"description\": \"在下次重啟時校正烙鐵頭熱電偶冷接點補償值（CJC）（溫差小於5攝氏度時無需校正）\"\n    },\n    \"VoltageCalibration\": {\n      \"displayText\": \"輸入電壓校正？\",\n      \"description\": \"開始校正VIN輸入電壓 <長按以退出>\"\n    },\n    \"PowerPulsePower\": {\n      \"displayText\": \"電源脈衝\",\n      \"description\": \"為保持電源喚醒而通電所用的功率 <watt（瓦特）>\"\n    },\n    \"PowerPulseWait\": {\n      \"displayText\": \"電源脈衝間隔\",\n      \"description\": \"為保持電源喚醒，每次通電之間的間隔時間 <x2.5s（秒）>\"\n    },\n    \"PowerPulseDuration\": {\n      \"displayText\": \"電源脈衝時長\",\n      \"description\": \"為保持電源喚醒，每次通電脈衝的時間長度 <x250ms（亳秒）>\"\n    },\n    \"SettingsReset\": {\n      \"displayText\": \"全部重設？\",\n      \"description\": \"將所有設定重設到預設值\"\n    },\n    \"LanguageSwitch\": {\n      \"displayText\": \"語言：正體中文\",\n      \"description\": \"\"\n    },\n    \"SolderingTipType\": {\n      \"displayText\": \"Soldering\\nTip Type\",\n      \"description\": \"Select the tip type fitted\"\n    }\n  }\n}\n"
  },
  {
    "path": "Translations/translations_definitions.json",
    "content": "{\n  \"messagesWarn\": [\n    {\n      \"id\": \"CalibrationDone\",\n      \"description\": \"Confirmation message indicating calibration is complete.\"\n    },\n    {\n      \"id\": \"ResetOKMessage\",\n      \"description\": \"Shown when the settings are reset to factory defaults by the user.\"\n    },\n    {\n      \"id\": \"SettingsResetMessage\",\n      \"description\": \"Shown when certain settings are reset to factory defaults due to incompatible firmware changes.\"\n    },\n    {\n      \"id\": \"NoAccelerometerMessage\",\n      \"description\": \"No accelerometer could be communicated with. This means that either the device's accelerometer is broken or unknown to IronOS. All motion-based settings are disabled and motion-based features will not work.\"\n    },\n    {\n      \"id\": \"NoPowerDeliveryMessage\",\n      \"include\": [\"POW_PD\"],\n      \"description\": \"The IC required for USB-PD could not be communicated with. This is an error warning that USB-PD WILL NOT FUNCTION. Generally indicative of either a hardware or software issues.\"\n    },\n    {\n      \"id\": \"LockingKeysString\",\n      \"description\": \"Shown when keys are locked\"\n    },\n    {\n      \"id\": \"UnlockingKeysString\",\n      \"description\": \"Shown when keys are unlocked\"\n    },\n    {\n      \"id\": \"WarningKeysLockedString\",\n      \"description\": \"Warning that is shown when input is ignored due to the key lock being on\"\n    },\n    {\n      \"id\": \"WarningThermalRunaway\",\n      \"description\": \"Warning text shown when the software has disabled the heater as a safety precaution as the temperature reading didn't react as expected.\"\n    },\n    {\n      \"id\": \"WarningTipShorted\",\n      \"description\": \"Warning text shown when the software has detected that the users tip is likely shorted.\"\n    },\n    {\n      \"id\": \"SettingsCalibrationWarning\",\n      \"description\": \"Confirmation message shown before performing an offset calibration. Should warn the user to make sure tip and handle are at the same temperature.\"\n    },\n    {\n      \"id\": \"CJCCalibrating\",\n      \"description\": \"Message indicating CJC is being calibrated.\"\n    },\n    {\n      \"id\": \"SettingsResetWarning\",\n      \"description\": \"Confirmation message shown before confirming a settings reset.\"\n    },\n    {\n      \"id\": \"UVLOWarningString\",\n      \"maxLen\": 8,\n      \"include\": [\"POW_DC\"],\n      \"description\": \"Warning text shown when the unit turns off due to undervoltage in simple mode.\"\n    },\n    {\n      \"id\": \"UndervoltageString\",\n      \"maxLen\": 15,\n      \"include\": [\"POW_DC\"],\n      \"description\": \"Warning text shown when the unit turns off due to undervoltage in advanced mode.\"\n    },\n    {\n      \"id\": \"InputVoltageString\",\n      \"maxLen\": 11,\n      \"note\": \"Preferably end with a space\",\n      \"include\": [\"POW_DC\"],\n      \"description\": \"Prefix text for 'Input Voltage' shown before showing the input voltage reading.\"\n    },\n    {\n      \"id\": \"ProfilePreheatString\",\n      \"maxLen\": 9,\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"Shown in profile mode while preheating\"\n    },\n    {\n      \"id\": \"ProfileCooldownString\",\n      \"maxLen\": 9,\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"Shown in profile mode while cooling down\"\n    },\n    {\n      \"id\": \"SleepingAdvancedString\",\n      \"maxLen\": 15,\n      \"exclude\": [\"NO_SLEEP_MODE\"],\n      \"description\": \"The text shown to indicate the unit is in sleep mode when the advanced view is turned on.\"\n    },\n    {\n      \"id\": \"SleepingTipAdvancedString\",\n      \"maxLen\": 6,\n      \"exclude\": [\"NO_SLEEP_MODE\"],\n      \"description\": \"The prefix text shown before tip temperature when the unit is sleeping with advanced view on.\"\n    },\n    {\n      \"id\": \"DeviceFailedValidationWarning\",\n      \"default\": \"Device may be\\ncounterfeit\",\n      \"description\": \"Warning shown if the device may be a clone or counterfeit unit.\"\n    },\n    {\n      \"id\": \"TooHotToStartProfileWarning\",\n      \"default\": \"Too hot to\\nstart profile\",\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"Shown when profile mode is started while the device is too hot.\"\n    }\n  ],\n  \"characters\": [\n    {\n      \"id\": \"SettingRightChar\",\n      \"len\": 1,\n      \"description\": \"Shown for fixed Right-handed display rotation.\"\n    },\n    {\n      \"id\": \"SettingLeftChar\",\n      \"len\": 1,\n      \"description\": \"Shown for fixed Left-handed display rotation.\"\n    },\n    {\n      \"id\": \"SettingAutoChar\",\n      \"len\": 1,\n      \"description\": \"Shown for automatic display rotation.\"\n    },\n    {\n      \"id\": \"SettingSlowChar\",\n      \"len\": 1,\n      \"description\": \"Shown when a setting is set to a slow value i.e. animation speed\"\n    },\n    {\n      \"id\": \"SettingMediumChar\",\n      \"len\": 1,\n      \"description\": \"Shown when a setting is set to a medium value i.e. animation speed\"\n    },\n    {\n      \"id\": \"SettingFastChar\",\n      \"len\": 1,\n      \"description\": \"Shown when a setting is set to a fast value i.e. animation speed\"\n    },\n    {\n      \"id\": \"SettingStartSolderingChar\",\n      \"len\": 1,\n      \"description\": \"Shown when the auto start mode is set to go straight to soldering.\"\n    },\n    {\n      \"id\": \"SettingStartSleepChar\",\n      \"len\": 1,\n      \"description\": \"Shown when the auto start mode is set to start in sleep mode.\"\n    },\n    {\n      \"id\": \"SettingStartSleepOffChar\",\n      \"len\": 1,\n      \"description\": \"Shown when the auto start state is set to go to an off state, but on movement wake into soldering mode.\"\n    },\n    {\n      \"id\": \"SettingLockBoostChar\",\n      \"len\": 1,\n      \"default\": \"B\",\n      \"description\": \"Shown when the locking mode is set to lock all buttons except for boost mode.\"\n    },\n    {\n      \"id\": \"SettingLockFullChar\",\n      \"len\": 1,\n      \"default\": \"F\",\n      \"description\": \"Shown when the locking mode is set to lock all buttons.\"\n    }\n  ],\n  \"menuGroups\": [\n    {\n      \"id\": \"PowerMenu\",\n      \"maxLen\": 5,\n      \"maxLen2\": 11,\n      \"include\": [\"POW_DC\", \"POW_PD\", \"POW_QC\"],\n      \"description\": \"Menu for settings related to power. Main settings to do with the input voltage.\"\n    },\n    {\n      \"id\": \"SolderingMenu\",\n      \"maxLen\": 5,\n      \"maxLen2\": 11,\n      \"description\": \"Settings for soldering mode, such as boost temps, the increment used when pressing buttons and if button locking is enabled.\"\n    },\n    {\n      \"id\": \"PowerSavingMenu\",\n      \"maxLen\": 5,\n      \"maxLen2\": 11,\n      \"description\": \"Settings to do with power saving, such as sleep mode, sleep temps, and shutdown modes.\"\n    },\n    {\n      \"id\": \"UIMenu\",\n      \"maxLen\": 5,\n      \"maxLen2\": 11,\n      \"description\": \"User interface related settings, such as units.\"\n    },\n    {\n      \"id\": \"AdvancedMenu\",\n      \"maxLen\": 5,\n      \"maxLen2\": 11,\n      \"description\": \"Advanced settings. Misc catchall for settings that don't fit anywhere else or settings that require some thought before use.\"\n    }\n  ],\n  \"menuValues\": [\n    {\n      \"id\": \"USBPDModeDefault\",\n      \"description\": \"When in this mode we enable all PD features, and we pad resistance slightly to account for cable and PCB trace loss\"\n    },\n    {\n      \"id\": \"USBPDModeNoDynamic\",\n      \"description\": \"When in this mode we only enable fixed voltage USB-PD options, and we pad resistance slightly to account for cable and PCB trace loss\"\n    },\n    {\n      \"id\": \"USBPDModeSafe\",\n      \"description\": \"When in this mode we enable all PD features, but we don't pad resistance slightly to account for cable and PCB trace loss\"\n    },\n    {\n      \"id\": \"TipTypeAuto\",\n      \"description\": \"This is for automatic best-effort tip selection based on resistance\"\n    },\n    {\n      \"id\": \"TipTypeT12Long\",\n      \"description\": \"Hakko T12 or older (long) TS100 tips\"\n    },\n    {\n      \"id\": \"TipTypeT12Short\",\n      \"description\": \"Pine 6.2 ohm short TS100 style tips\"\n    },\n    {\n      \"id\": \"TipTypeT12PTS\",\n      \"description\": \"PTS200 4 ohm short TS100 style tips\"\n    },\n    {\n      \"id\": \"TipTypeTS80\",\n      \"description\": \"Miniware TS80(P) tips\"\n    },\n    {\n      \"id\": \"TipTypeJBCC210\",\n      \"description\": \"JBC (or clone) tips\"\n    }\n  ],\n  \"menuOptions\": [\n    {\n      \"id\": \"DCInCutoff\",\n      \"maxLen\": 5,\n      \"maxLen2\": 11,\n      \"include\": [\"POW_DC\"],\n      \"description\": \"When the device is powered by a battery, this adjusts the low voltage threshold for when the unit should turn off the heater to protect the battery.\"\n    },\n    {\n      \"id\": \"MinVolCell\",\n      \"maxLen\": 4,\n      \"maxLen2\": 9,\n      \"include\": [\"POW_DC\"],\n      \"description\": \"When powered by a battery, this adjusts the minimum voltage per cell before shutdown. (This is multiplied by the cell count.)\"\n    },\n    {\n      \"id\": \"QCMaxVoltage\",\n      \"maxLen\": 8,\n      \"maxLen2\": 15,\n      \"include\": [\"POW_QC\"],\n      \"description\": \"This adjusts the maximum voltage the QC negotiation will adjust to. Does NOT affect USB-PD. Should be set safely based on the current rating of your power supply.\"\n    },\n    {\n      \"id\": \"PDNegTimeout\",\n      \"maxLen\": 8,\n      \"maxLen2\": 15,\n      \"include\": [\"POW_PD\"],\n      \"description\": \"How long until firmware stops trying to negotiate for USB-PD and tries QC instead. Longer times may help dodgy / old PD adapters, faster times move onto PD quickly. Units of 100ms. Recommended to keep small values.\"\n    },\n    {\n      \"id\": \"USBPDMode\",\n      \"maxLen\": 7,\n      \"maxLen2\": 15,\n      \"include\": [\"POW_PD\"],\n      \"description\": \"Adjusts how the USB-PD Logic selects the voltage. No Dynamic disables EPR & PPS protocols, Safe mode does not use padding resistance (will select a slightly lower voltage).\"\n    },\n    {\n      \"id\": \"BoostTemperature\",\n      \"maxLen\": 4,\n      \"maxLen2\": 9,\n      \"description\": \"When the unit is in soldering mode. You can hold down the button at the front of the device to temporarily override the soldering temperature to this value. This SETS the temperature, it does not ADD to it.\"\n    },\n    {\n      \"id\": \"AutoStart\",\n      \"maxLen\": 6,\n      \"maxLen2\": 13,\n      \"description\": \"When the device powers up, should it enter into a special mode. These settings set it to either start into soldering mode, sleeping mode or auto mode (Enters into soldering mode on the first movement).\"\n    },\n    {\n      \"id\": \"TempChangeShortStep\",\n      \"maxLen\": 8,\n      \"maxLen2\": 15,\n      \"description\": \"Factor by which the temperature is changed with a quick press of the buttons.\"\n    },\n    {\n      \"id\": \"TempChangeLongStep\",\n      \"maxLen\": 6,\n      \"maxLen2\": 15,\n      \"description\": \"Factor by which the temperature is changed with a hold of the buttons.\"\n    },\n    {\n      \"id\": \"LockingMode\",\n      \"maxLen\": 6,\n      \"maxLen2\": 13,\n      \"description\": \"If locking the buttons against accidental presses is enabled.\"\n    },\n    {\n      \"id\": \"ProfilePhases\",\n      \"maxLen\": 6,\n      \"maxLen2\": 13,\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"set the number of phases for profile mode.\"\n    },\n    {\n      \"id\": \"ProfilePreheatTemp\",\n      \"maxLen\": 4,\n      \"maxLen2\": 9,\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"Preheat to this temperature at the start of profile mode.\"\n    },\n    {\n      \"id\": \"ProfilePreheatSpeed\",\n      \"maxLen\": 5,\n      \"maxLen2\": 11,\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"How fast the temperature is allowed to rise during the preheat phase at the start of profile mode.\"\n    },\n    {\n      \"id\": \"ProfilePhase1Temp\",\n      \"maxLen\": 4,\n      \"maxLen2\": 9,\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"Target temperature for the end of phase 1 of profile mode.\"\n    },\n    {\n      \"id\": \"ProfilePhase1Duration\",\n      \"maxLen\": 4,\n      \"maxLen2\": 9,\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"Duration of phase 1 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature.\"\n    },\n    {\n      \"id\": \"ProfilePhase2Temp\",\n      \"maxLen\": 4,\n      \"maxLen2\": 9,\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"Target temperature for the end of phase 2 of profile mode.\"\n    },\n    {\n      \"id\": \"ProfilePhase2Duration\",\n      \"maxLen\": 4,\n      \"maxLen2\": 9,\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"Duration of phase 2 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature.\"\n    },\n    {\n      \"id\": \"ProfilePhase3Temp\",\n      \"maxLen\": 4,\n      \"maxLen2\": 9,\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"Target temperature for the end of phase 3 of profile mode.\"\n    },\n    {\n      \"id\": \"ProfilePhase3Duration\",\n      \"maxLen\": 4,\n      \"maxLen2\": 9,\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"Duration of phase 3 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature.\"\n    },\n    {\n      \"id\": \"ProfilePhase4Temp\",\n      \"maxLen\": 4,\n      \"maxLen2\": 9,\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"Target temperature for the end of phase 5 of profile mode.\"\n    },\n    {\n      \"id\": \"ProfilePhase4Duration\",\n      \"maxLen\": 4,\n      \"maxLen2\": 9,\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"Duration of phase 5 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature.\"\n    },\n    {\n      \"id\": \"ProfilePhase5Temp\",\n      \"maxLen\": 4,\n      \"maxLen2\": 9,\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"Target temperature for the end of phase 5 of profile mode.\"\n    },\n    {\n      \"id\": \"ProfilePhase5Duration\",\n      \"maxLen\": 4,\n      \"maxLen2\": 9,\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"Duration of phase 5 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature.\"\n    },\n    {\n      \"id\": \"ProfileCooldownSpeed\",\n      \"maxLen\": 5,\n      \"maxLen2\": 11,\n      \"include\": [\"PROFILE_SUPPORT\"],\n      \"description\": \"How fast the temperature is allowed to drop during the cooldown phase at the end of profile mode.\"\n    },\n    {\n      \"id\": \"MotionSensitivity\",\n      \"maxLen\": 6,\n      \"maxLen2\": 13,\n      \"description\": \"Scale of how sensitive the device is to movement. Higher numbers == more sensitive. 0 == motion detection turned off.\"\n    },\n    {\n      \"id\": \"SleepTemperature\",\n      \"maxLen\": 4,\n      \"maxLen2\": 9,\n      \"exclude\": [\"NO_SLEEP_MODE\"],\n      \"description\": \"Temperature the device will drop down to while asleep. Typically around halfway between off and soldering temperature.\"\n    },\n    {\n      \"id\": \"SleepTimeout\",\n      \"maxLen\": 4,\n      \"maxLen2\": 9,\n      \"exclude\": [\"NO_SLEEP_MODE\"],\n      \"description\": \"How long of a period without movement / button-pressing is required before the device drops down to the sleep temperature.\"\n    },\n    {\n      \"id\": \"ShutdownTimeout\",\n      \"maxLen\": 5,\n      \"maxLen2\": 11,\n      \"description\": \"How long of a period without movement / button-pressing is required before the device turns off the tip heater completely and returns to the main idle screen.\"\n    },\n    {\n      \"id\": \"HallEffSensitivity\",\n      \"maxLen\": 6,\n      \"maxLen2\": 13,\n      \"include\": [\"HALL_SENSOR\"],\n      \"description\": \"If the unit has a hall effect sensor (Pinecil), this adjusts how sensitive it is at detecting a magnet to put the device into sleep mode.\"\n    },\n    {\n      \"id\": \"HallEffSleepTimeout\",\n      \"maxLen\": 10,\n      \"maxLen2\": 10,\n      \"include\": [\"HALL_SENSOR\"],\n      \"description\": \"If the unit has a hall effect sensor (Pinecil), this adjusts how long the device takes before it drops down to the sleep temperature when hall sensor is over threshold.\"\n    },\n    {\n      \"id\": \"TemperatureUnit\",\n      \"maxLen\": 6,\n      \"maxLen2\": 13,\n      \"description\": \"If the device shows temperatures in °C or °F.\"\n    },\n    {\n      \"id\": \"DisplayRotation\",\n      \"maxLen\": 6,\n      \"maxLen2\": 13,\n      \"exclude\": [\"NO_DISPLAY_ROTATE\"],\n      \"description\": \"If the display should rotate automatically or if it should be fixed for left- or right-handed mode.\"\n    },\n    {\n      \"id\": \"CooldownBlink\",\n      \"maxLen\": 6,\n      \"maxLen2\": 13,\n      \"description\": \"If the idle screen should blink the tip temperature for attention while the tip is over 50°C. Intended as a 'tip is still hot' warning.\"\n    },\n    {\n      \"id\": \"ScrollingSpeed\",\n      \"maxLen\": 6,\n      \"maxLen2\": 11,\n      \"description\": \"How fast the description text scrolls when hovering on a menu. Faster speeds may induce tearing, but allow reading the whole description faster.\"\n    },\n    {\n      \"id\": \"ReverseButtonTempChange\",\n      \"maxLen\": 6,\n      \"maxLen2\": 15,\n      \"description\": \"Swaps which button increments and decrements on temperature change screens.\"\n    },\n    {\n      \"id\": \"ReverseButtonSettings\",\n      \"maxLen\": 6,\n      \"maxLen2\": 15,\n      \"description\": \"Swaps which button is used as Enter/Change and as Scroll/Back in Settings menu.\"\n    },\n    {\n      \"id\": \"AnimSpeed\",\n      \"maxLen\": 6,\n      \"maxLen2\": 13,\n      \"description\": \"How fast should the menu animations loop, or if they should not loop at all.\"\n    },\n    {\n      \"id\": \"AnimLoop\",\n      \"maxLen\": 6,\n      \"maxLen2\": 13,\n      \"description\": \"Should the menu animations loop. Only visible if the animation speed is not set to \\\"Off\\\"\"\n    },\n    {\n      \"id\": \"Brightness\",\n      \"maxLen\": 7,\n      \"maxLen2\": 15,\n      \"description\": \"Display brightness. Higher values age the OLED faster due to burn-in. (However, it is notable that most of these screens die from other causes first.)\"\n    },\n    {\n      \"id\": \"ColourInversion\",\n      \"maxLen\": 7,\n      \"maxLen2\": 15,\n      \"description\": \"Inverts the entire OLED.\"\n    },\n    {\n      \"id\": \"LOGOTime\",\n      \"maxLen\": 7,\n      \"maxLen2\": 15,\n      \"description\": \"Sets the duration for the boot logo (s=seconds).\"\n    },\n    {\n      \"id\": \"AdvancedIdle\",\n      \"maxLen\": 6,\n      \"maxLen2\": 13,\n      \"description\": \"Should the device show an 'advanced' view on the idle screen. The advanced view uses text to show more details than the typical icons.\"\n    },\n    {\n      \"id\": \"AdvancedSoldering\",\n      \"maxLen\": 6,\n      \"maxLen2\": 13,\n      \"description\": \"Should the device show an 'advanced' soldering view. This is a text-based view that shows more information at the cost of no nice graphics.\"\n    },\n    {\n      \"id\": \"BluetoothLE\",\n      \"maxLen\": 7,\n      \"maxLen2\": 15,\n      \"include\": [\"BLE_ENABLED\"],\n      \"description\": \"Should BLE be enabled at boot time.\"\n    },\n    {\n      \"id\": \"PowerLimit\",\n      \"maxLen\": 5,\n      \"maxLen2\": 11,\n      \"description\": \"Allows setting a custom wattage for the device to aim to keep the AVERAGE power below. The unit can't control its peak power no matter how you set this. (Except for MHP30 which will regulate nicely to this). If USB-PD is in use, the limit will be set to the lower of this and the supplies advertised wattage.\"\n    },\n    {\n      \"id\": \"CalibrateCJC\",\n      \"maxLen\": 8,\n      \"maxLen2\": 15,\n      \"description\": \"Note:\\r\\nIf the difference between the target temperature and the measured temperature is less than 5°C, **calibration is NOT required at all**.\\r\\n\\r\\nThis is used to calibrate the offset between ADC and Op-amp of the tip **at next boot** (Ideally it has to be done at boot, before internal components get warm.). If the checkbox is set, the calibration will only be performed at the next boot. After a successful calibration the checkbox will be unchecked again! If you need to repeat the calibration however, you have to set the checkbox *again*, unplug your device and let it cool down to room/ambient temperature & power it up, ideally while it sits on the desk.\\r\\n\\r\\n\\r\\nAlso, the calibration will only take place if both of the following conditions are met:\\r\\n- The tip must be installed.\\r\\n- The temperature difference between tip and handle must be less than 10°C. (~ ambient / room temperature)\\r\\n\\r\\nOtherwise, the calibration will be performed the next time the device is started and both conditions are met, unless the corresponding checkbox is unchecked.\\r\\nHence, never repeat the calibration in quick succession!\"\n    },\n    {\n      \"id\": \"VoltageCalibration\",\n      \"maxLen\": 8,\n      \"maxLen2\": 15,\n      \"description\": \"Enters an adjustment mode where you can gradually adjust the measured voltage to compensate for any unit-to-unit variance in the voltage sense resistors.\"\n    },\n    {\n      \"id\": \"PowerPulsePower\",\n      \"maxLen\": 6,\n      \"maxLen2\": 15,\n      \"description\": \"Enables and sets the wattage of the power pulse. Power pulse causes the device to briefly turn on the heater to draw power to avoid power banks going to sleep.\"\n    },\n    {\n      \"id\": \"PowerPulseWait\",\n      \"maxLen\": 6,\n      \"maxLen2\": 13,\n      \"description\": \"Adjusts the time interval between power pulses. Longer gaps reduce undesired heating of the tip, but needs to be fast enough to keep your power bank awake.\"\n    },\n    {\n      \"id\": \"PowerPulseDuration\",\n      \"maxLen\": 6,\n      \"maxLen2\": 13,\n      \"description\": \"How long should the power pulse go for. Some power banks require seeing the power draw be sustained for a certain duration to keep awake. Should be kept as short as possible to avoid wasting power / undesired heating of the tip.\"\n    },\n    {\n      \"id\": \"SettingsReset\",\n      \"maxLen\": 8,\n      \"maxLen2\": 15,\n      \"description\": \"Resets all settings and calibrations to factory defaults. Does NOT erase custom user boot up logo's.\"\n    },\n    {\n      \"id\": \"LanguageSwitch\",\n      \"maxLen\": 7,\n      \"maxLen2\": 15,\n      \"description\": \"Changes the device language on multi-lingual builds.\"\n    },\n    {\n      \"id\": \"SolderingTipType\",\n      \"maxLen\": 7,\n      \"maxLen2\": 15,\n      \"description\": \"For manually selecting the type of tip fitted\"\n    }\n  ]\n}\n"
  },
  {
    "path": "Translations/wqy-bitmapsong/AUTHORS",
    "content": "========================================================== \n\n          Wen Quan Yi Bitmap Song CJK Fonts\n\n               Contributors and Credits\n\n----------------------------------------------------------\nEmail confusers:\n   replace \" #\" to \"@\" , replace \" _\" to \".\"\n----------------------------------------------------------\n\nSummary: \n\n  This font package is copyrighted by the WenQuanYi Board of \n  Trustees 2004-2010 http://wenq.org/index.cgi?WQYBOT\n----------------------------------------------------------\n\nTable of Content\n\n I.  Pevious Work\n II. WenQuanYi Bitmap Font developers\n III.Authors for CJK Bitmap Glyphs (CJK Basic)\n IV. Authors for CJK Extension A Glyphs\n V.  Authors for CJK Basic glyphs standard verfication\n VI. Other resources\n\n----------------------------------------------------------\n\n I. Previous Work:\n\n   firefly     firefly #firefly _idv _tw\n               provided multi-size Big5/GB2312 glyphs\n               http://www.study-area.org/apt/firefly-font/\n\n   Chinese National Standard GB19966-2005\n               provided all 12pt face CJK glyphs between U3400-U9FA5\n               http://www.standardcn.com/standard_plan/\n                  list_standard_content.asp?stand_id=GB@19966-2005\n\n----------------------------------------------------------\n\n II .WenQuanYi Bitmap Font developers\n\n1. Core members\n\n   Qianqian Fang[FangQ] (fangq #nmr _mgh _harvard _edu)\n\n                     project founder and maintainer, wiki developer,\n                     release manager, software programer, \n                     major font developer and reviewer\n\n                     http://nmr.mgh.harvard.edu/~fangq/\n                     http://bbs.dartmouth.edu/~fangq/blog/\n\n   Hong Wang     (hongclean #gmail _com)\n\n                     key contributor, major reviewer\n\n   Kefu Chai[tchaikov]    (tchaikov #sjtu _edu _cn)\n\n                     web development, major reviewer\n\n\n   ailantian*             (ailantian #email _jlu _edu _cn)\n\n                     key developer for vector Chinese project\n                     http://ailantian.blogchina.com\n\n   Haitao Han[niqiu]*     (chenniqiu #gmail _com)\n\n                     key developer for vector Chinese project\n                     http://www.livejournal.com/~niqiu/\n\n   Qian Cai[caiqian]*    (caiqian #gmail _com)\n\n                     creator of WenQuanYi bitmap font standard\n\n   Funda Wang[fundawang]*(fundawang #linux _net _cn)\n\n                     key developer, technical support\n                     http://my.opera.com/fundawang/\n\n   Qing Lei[fiag]*        (fiag.hit #gmail _com)\n\n                     key developer for vector Chinese project\n\n   Nicolas Wang[ZaiJianQingRen]*  (abcxyz54321 #163 _com)\n\n                     key contributor, major reviewer\n\n   * the status is inactive\n\n\n2. Team B members\n\n   activeion   (jizh #cnst _pku _edu _cn)\n   amadeoh     (zh217 #cam _ac _uk)\n   BabyPBC     (babypbc #etang _com)           [Baochuan Pang]\n   BenBear     (cxj26424 #163 _com)            [Xiongjie Chen]\n   brep        (brep #163 _com)\n   chaoslawful (wangxz00 #mails _tsinghua _edu _cn) [Xiaozhe Wang]\n   DannyZeng\n   eka         (ekapie #googlemail _com) (key contributor for glyph fine-tunning)\n   keykeen     (kaleasy #21cn _com)\n   liyi        (liyi79 #gmail _com)            [Yi Li]\n   lucifer     (xinjibo #163 _com)             [Jibo Xin]\n   nilarcs     (nilarcs #163 _com)             [Jun Zhang]\n   pangwa      (pangwa #gmail _com)            [Guang Han]\n   pathfinder  (pathfinder_name #hotmail _com) [Wei Yao]\n   pinker      (pinker #pku _edu _cn) \n   PONY        (yangxcmail-linux #yahoo _com _cn)\n   pupilzeng   \n   shhky       \n   stid        xuxiaodong #tsinghua _org _cn   http://stid.blogchina.com/\n   wuler.lv    (wuler.lv #gmail _com)          [Wuler Lv]\n   xnuxmwx     (xnuxmwx #gmail _com)           [Man Xu]     http://www.tanvy.com/\n   namespace #yeah _net\n   leftstand #chinaacc _com\n\nThe following contributors had contributed for the development of \nCJK Extension A bitmaps:\n\n   MarkLam     (mark.jlam#gmail_com)\n   twang467    (twang467#21cn_com)             [Qiang Wang]\n   buick       (weiyiwei#gmail_com)            [Yiwei Wei]\n   liqian      \n   qinling     (qin_ling#sohu_com)             http://qinling.bokee.com\n   Seeker      (seeker#yeah_net)\n   xiaoma      (mayueping#gmail_com)\n   SiCengXiangShi (liyulongmen#yahoo_com_cn)\n   the_owl     (weitao1979#gmail_com )\n   whppc       (lyons.chang#gmail_com)\n   eka         (ekapie#googlemail_com)\n   failsafe    (simon.youngest#gmail_com) MSN:failsafenow@hotmail.com\n   musiccow    (blkatbyhh#gmail_com)      http://my.opera.com/musiccow\n   Blueelf     (yshen#fas_harvard_edu) http://bbs.dartmouth.edu/web/yinghua/\n   lenovox     (lenovox#126_com) \n   fourbrow    (fourbrow#163_com)\n   udi         (udisaar#gmail_com)\n   leal        (linxiao.li#gmail_com)     http://www.leal.cn\n   soicer      (soicer#gmail_com)         http://www.qianxinlei.com\n   xuande      (liu.i3655#gmail_com)       [liu bei]\n   lrobinson   (lrobinson#126_com)\n   zhouyingxin (yingxinzhou#gmail_com)    [Yingxin Zhou]\n   chenzhipeter(chenzhipeter#126_com)     \n   havas       (zhihua.tan#gmail_com)     [Zhihua Tan]\n\nThe following contributors helped in developing non-CJK characters\n\n   hzhsun      (zhuang1 #cs _uml _edu)         [Zhonghong Huang]\n   weitao      (weitao1979 #gmail _com)        [Wei Tao]\n\n\nIf your name is missing, please send an email to\nfangqq<at>nmr.mgh.harvard.edu, we will add you to the list \nfor all subsequent releases.\n\n3. Donation Providers\n\n   We sincerely appreciate the generous donations from many friends. \nTheir donations not only support the project to grow healthily, \nbut also encourage all the developers. A list of supporters can \nbe found at\n\n   http://wenq.org/index.cgi?Donation\n\n----------------------------------------------------------\n\n\n III. Authors for CJK Bitmap Glyphs (CJK Basic)\n\n* Project proceeded between 10/2004-04/2005\n* Original project record: \n  http://wenq.org/?UNICODE_U19968-U40869\n  http://wenq.org/index.cgi?offline\n* Progress log:\n  http://wenq.org/index.cgi?CJK_TeamB_Progress\n\n\n--------------------------------------------------\n  Group         Author           Level Reviewer\n--------------------------------------------------\nU+4E00~U+4E64   :anonymous:        L3  FangQ     \nU+4E65~U+4EC9   :anonymous:        L3  FangQ     \nU+4ECA~U+4F2E   niqiu              L3  FangQ     \nU+4F2F~U+4F93   FangQ              L3  FangQ     \nU+4F94~U+4FF8   pupilzeng          L3  FangQ     \nU+4FF9~U+505D   niqiu              L3  FangQ     \nU+505E~U+50C2   nilarcs            L3  FangQ     \nU+50C3~U+5127   achaoge/FangQ      L3  FangQ     \nU+5128~U+518C   anonyous           L3  tchaikov  \nU+518D~U+51F1   FangQ              L3  tchaikov  \nU+51F2~U+5256   fundawang          L3  FangQ     \nU+5257~U+52BB   FangQ/shhky        L3  Caiqian   \nU+52BC~U+5320   :anonymous:        L3  Caiqian   \nU+5321~U+5385   FangQ              L3  tchaikov  \nU+5386~U+53EA   FangQ              L3  tchaikov  \nU+53EB~U+544F   amadeoh/FangQ      L3  wanghong  \nU+5450~U+54B4   :anonymous:        L3  tchaikov  \nU+54B5~U+5519   FangQ              L3  tchaikov  \nU+551A~U+557E   :anonymous:        L3  FangQ     \nU+557F~U+55E3   FangQ              L3  FangQ     \nU+55E4~U+5648   :anonymous:        L3  wanghong  \nU+5649~U+56AD   FangQ              L3  wanghong  \nU+56AE~U+5712   vertex/FangQ       L3  FangQ     \nU+5713~U+5777   xnuxmwx            L3  FangQ     \nU+5778~U+57DC   wanghong           L3  FangQ     \nU+57DD~U+5841   FangQ              L3  tchaikov  \nU+5842~U+58A6   fundawang          L3  tchaikov  \nU+58A7~U+590B   :anonymous:        L1  FangQ     \nU+590C~U+5970   FangQ              L1  FangQ     \nU+5971~U+59D5   wanghong           L1  FangQ     \nU+59D6~U+5A3A   :anonymous:        L1  FangQ     \nU+5A3B~U+5A9F   brep)              L3  FangQ     \nU+5AA0~U+5B04   :anonymous:        L1  FangQ     \nU+5B05~U+5B69   pinker)            L1  FangQ     \nU+5B6A~U+5BCE   fundawang          L1  FangQ     \nU+5BCF~U+5C33   fundawang)         L3  FangQ     \nU+5C34~U+5C98   fundawang)         L3  FangQ     \nU+5C99~U+5CFD   ailantian          L3  FangQ     \nU+5CFE~U+5D62   :anonymous:        L1  FangQ     \nU+5D63~U+5DC7   :anonymous:        L1  FangQ     \nU+5DC8~U+5E2C   :anonymous:        L1  FangQ     \nU+5E2D~U+5E91   chaoslawful        L3  FangQ     \nU+5E92~U+5EF6   brep               L3  FangQ     \nU+5EF7~U+5F5B   xnuxmwx            L3  FangQ     \nU+5F5C~U+5FC0   FangQ              L3  wanghong  \nU+5FC1~U+6025   keykeen            L3  wanghong  \nU+6026~U+608A   pangwa             L3  tchaikov  \nU+608B~U+60EF   :anonymous:        L3  tchaikov  \nU+60F0~U+6154   :anonymous:        L3  wanghong  \nU+6155~U+61B9   :anonymous:        L3  wanghong  \nU+61BA~U+621E   wanghong           L3  wanghong  \nU+621F~U+6283   FangQ              L3  wanghong  \nU+6284~U+62E8   brep               L3  tchaikov  \nU+62E9~U+634D   brep               L3  FangQ     \nU+634E~U+63B2   FangQ              L3  tchaikov  \nU+63B3~U+6417   :anonymous:        L3  tchaikov  \nU+6418~U+647C   :anonymous:        L1  FangQ     \nU+647D~U+64E1   wanghong           L1  FangQ     \nU+64E2~U+6546   wanghong           L1  FangQ     \nU+6547~U+65AB   :anonymous:        L1  FangQ     \nU+65AC~U+6610   keykeen            L1  FangQ     \nU+6611~U+6675   FangQ              L1  FangQ     \nU+6676~U+66DA   FangQ              L1  FangQ     \nU+66DB~U+673F   FangQ              L1  FangQ     \nU+6740~U+67A4   FangQ              L1  FangQ     \nU+67A5~U+6809   FangQ              L1  FangQ     \nU+680A~U+686E   activeion          L1  FangQ     \nU+686F~U+68D3   FangQ              L1  FangQ     \nU+68D4~U+6938   wanghong           L1  FangQ     \nU+6939~U+699D   wanghong           L1  FangQ     \nU+699E~U+6A02   wanghong           L1  FangQ     \nU+6A03~U+6A67   wanghong           L1  FangQ     \nU+6A68~U+6ACC   pinker             L1  FangQ     \nU+6ACD~U+6B31   FangQ              L1  FangQ     \nU+6B32~U+6B96   wanghong           L1  FangQ     \nU+6B97~U+6BFB   FangQ              L1  FangQ     \nU+6BFC~U+6C60   FangQ              L1  FangQ     \nU+6C61~U+6CC5   wuler.lv           L3  wanghong  \nU+6CC6~U+6D2A   wuler.lv           L3  wanghong  \nU+6D2B~U+6D8F   wanghong           L1  FangQ     \nU+6D90~U+6DF4   wanghong           L1  FangQ     \nU+6DF5~U+6E59   wanghong           L1  FangQ     \nU+6E5A~U+6EBE   wanghong           L1  FangQ     \nU+6EBF~U+6F23   wanghong           L1  FangQ     \nU+6F24~U+6F88   wanghong           L2  wanghong  \nU+6F89~U+6FED   wanghong           L3  tchaikov  \nU+6FEE~U+7052   wanghong           L3  tchaikov  \nU+7053~U+70B7   wanghong           L3  tchaikov  \nU+70B8~U+711C   wanghong           L3  wanghong  \nU+711D~U+7181   wanghong           L3  wanghong  \nU+7182~U+71E6   wanghong           L3  tchaikov  \nU+71E7~U+724B   wanghong           L3  tchaikov  \nU+724C~U+72B0   wanghong           L3  tchaikov  \nU+72B1~U+7315   wanghong           L3  tchaikov  \nU+7316~U+737A   wanghong           L3  tchaikov  \nU+737B~U+73DF   wanghong           L3  tchaikov  \nU+73E0~U+7444   wanghong           L3  tchaikov  \nU+7445~U+74A9   wanghong           L3  tchaikov  \nU+74AA~U+750E   wanghong           L3  tchaikov  \nU+750F~U+7573   wanghong           L3  tchaikov  \nU+7574~U+75D8   wanghong           L3  tchaikov  \nU+75D9~U+763D   wanghong           L3  tchaikov  \nU+763E~U+76A2   wanghong           L3  tchaikov  \nU+76A3~U+7707   wanghong           L3  tchaikov  \nU+7708~U+776C   wanghong           L3  tchaikov  \nU+776D~U+77D1   wanghong           L3  tchaikov  \nU+77D2~U+7836   keykeen            L3  tchaikov  \nU+7837~U+789B   keykeen            L3  tchaikov  \nU+789C~U+7900   keykeen            L3  tchaikov  \nU+7901~U+7965   keykeen            ??  tchaikov  \nU+7966~U+79CA   keykeen            ??  tchaikov  \nU+79CB~U+7A2F   pathfinder         ??  tchaikov  \nU+7A30~U+7A94   wanghong           ??  tchaikov  \nU+7A95~U+7AF9   wanghong           (not done yet)\nU+7AFA~U+7B5E   xnuxmwx            (not done yet)\nU+7B5F~U+7BC3   keykeen            (not done yet)\nU+7BC4~U+7C28   keykeen/FangQ      (not done yet)\nU+7C29~U+7C8D   FangQ              (not done yet)\nU+7C8E~U+7CF2   FangQ/LiuQingyan   (not done yet)\nU+7CF3~U+7D57   keykeen            (not done yet)\nU+7D58~U+7DBC   chaoslawful        (not done yet)\nU+7DBD~U+7E21   tchaikov           (not done yet)\nU+7E22~U+7E86   liyi               (not done yet)\nU+7E87~U+7EEB   brep               (not done yet)\nU+7EEC~U+7F50   FangQ              (not done yet)\nU+7F51~U+7FB5   FangQ              (not done yet)\nU+7FB6~U+801A   brep               (not done yet)\nU+801B~U+807F   liyi               (not done yet)\nU+8080~U+80E4   tchaikov           (not done yet)\nU+80E5~U+8149   ailantian          (not done yet)\nU+814A~U+81AE   lucifer            (not done yet)\nU+81AF~U+8213   keykeen            (not done yet)\nU+8214~U+8278   keykeen            (not done yet)\nU+8279~U+82DD   caiqian            (not done yet)\nU+82DE~U+8342   wanghong           (not done yet)\nU+8343~U+83A7   keykeen            (not done yet)\nU+83A8~U+840C   keykeen            (not done yet)\nU+840D~U+8471   keykeen            (not done yet)\nU+8472~U+84D6   wanghong           (not done yet)\nU+84D7~U+853B   BabyPBC            (not done yet)\nU+853C~U+85A0   BabyPBC            (not done yet)\nU+85A1~U+8605   FangQ              (not done yet)\nU+8606~U+866A   tchaikov           (not done yet)\nU+866B~U+86CF   keykeen            (not done yet)\nU+86D0~U+8734   ailantian          (not done yet)\nU+8735~U+8799   wanghong           (not done yet)\nU+879A~U+87FE   chaoslawful        (not done yet)\nU+87FF~U+8863   wanghong           (not done yet)\nU+8864~U+88C8   lucifer            (not done yet)\nU+88C9~U+892D   lucifer            (not done yet)\nU+892E~U+8992   wanghong           (not done yet)\nU+8993~U+89F7   wanghong           (not done yet)\nU+89F8~U+8A5C   ailantian          (not done yet)\nU+8A5D~U+8AC1   ailantian          (not done yet)\nU+8AC2~U+8B26   ailantian          (not done yet)\nU+8B27~U+8B8B   wanghong           (not done yet)\nU+8B8C~U+8BF0   stid               (not done yet)\nU+8BF1~U+8C55   wanghong           (not done yet)\nU+8C56~U+8CBA   wanghong           (not done yet)\nU+8CBB~U+8D1F   pinker             (not done yet)\nU+8D20~U+8D84   brep               (not done yet)\nU+8D85~U+8DE9   ailantian          (not done yet)\nU+8DEA~U+8E4E   ailantian          (not done yet)\nU+8E4F~U+8EB3   tchaikov           (not done yet)\nU+8EB4~U+8F18   wanghong           (not done yet)\nU+8F19~U+8F7D   wanghong           L3  FangQ     \nU+8F7E~U+8FE2   chaoslawful        L3  FangQ     \nU+8FE3~U+9047   keykeen            L3  FangQ     \nU+9048~U+90AC   keykeen            L3  FangQ     \nU+90AD~U+9111   wanghong           L3  FangQ     \nU+9112~U+9176   nilarcs            L3  wanghong  \nU+9177~U+91DB   wanghong           L3  wanghong  \nU+91DC~U+9240   wanghong           L3  wanghong  \nU+9241~U+92A5   lucifer            ??  wanghong  \nU+92A6~U+930A   FangQ              ??  wanghong  \nU+930B~U+936F   FangQ              ??  wanghong  \nU+9370~U+93D4   wanghong           ??  wanghong  \nU+93D5~U+9439   FangQ              (not done yet)\nU+943A~U+949E   chaoslawful        (not done yet)\nU+949F~U+9503   wanghong           (not done yet)\nU+9504~U+9568   wanghong           (not done yet)\nU+9569~U+95CD   Yei                (not done yet)\nU+95CE~U+9632   FangQ              (not done yet)\nU+9633~U+9697   wanghong           (not done yet)\nU+9698~U+96FC   wanghong           (not done yet)\nU+96FD~U+9761   wanghong           (not done yet)\nU+9762~U+97C6   wanghong           (not done yet)\nU+97C7~U+982B   wanghong           (not done yet)\nU+982C~U+9890   wanghong           (not done yet)\nU+9891~U+98F5   wanghong           (not done yet)\nU+98F6~U+995A   FangQ              (not done yet)\nU+995B~U+99BF   wanghong           (not done yet)\nU+99C0~U+9A24   wanghong           (not done yet)\nU+9A25~U+9A89   wanghong           (not done yet)\nU+9A8A~U+9AEE   wanghong           (not done yet)\nU+9AEF~U+9B53   wanghong           (not done yet)\nU+9B54~U+9BB8   FangQ              L3  wanghong  \nU+9BB9~U+9C1D   FangQ              L3  wanghong  \nU+9C1E~U+9C82   FangQ              ??  wanghong  \nU+9C83~U+9CE7   wanghong           L1  wanghong  \nU+9CE8~U+9D4C   wanghong           L3  wanghong  \nU+9D4D~U+9DB1   FangQ              L2  wanghong  \nU+9DB2~U+9E16   wanghong           L3  wanghong  \nU+9E17~U+9E7B   wanghong           L3  wanghong  \nU+9E7C~U+9EE0   wanghong           L1  wanghong  \nU+9EE1~U+9F45   wanghong           L3  wanghong  \nU+9F46~U+9FAA   albert liu/FangQ   L3  wanghong  \n----------------------------------------------------------\n\n IV. Authors for CJK Extension A Glyphs\n\n* Project proceeded between 04/2005 to 07/2006\n* Original project record: \n  http://wenq.org/?CJKExtA_Index\n  http://wenq.org/index.cgi?offline_ExtA\n* Progress log:\n  http://wenq.org/index.cgi?CJKExtA_TeamB_Progress\n\n----------------------------------------------------------\n  Unicode       Author\n----------------------------------------------------------\nU3400 BLOCK by FangQ\nU3410 BLOCK by fundawang\nU3420 BLOCK by fundawang\nU3430 BLOCK by fundawang\nU3440 BLOCK by fundawang\nU3450 BLOCK by fundawang\nU3460 BLOCK by fundawang\nU3470 BLOCK by fundawang\nU3480 BLOCK by fundawang\nU3490 BLOCK by fundawang\nU34A0 BLOCK by fiag\nU34B0 BLOCK by :anonymous:\nU34C0 BLOCK by fundawang\nU34D0 BLOCK by fundawang\nU34E0 BLOCK by :anonymous:\nU34F0 BLOCK by :anonymous:\nU3500 BLOCK by fundawang,buick\nU3510 BLOCK by :anonymous:\nU3520 BLOCK by fundawang\nU3530 BLOCK by :anonymous:\nU3540 BLOCK by :anonymous:\nU3550 BLOCK by :anonymous:\nU3560 BLOCK by :anonymous:\nU3570 BLOCK by :anonymous:\nU3580 BLOCK by fundawang\nU3590 BLOCK by :anonymous:\nU35A0 BLOCK by qinling\nU35B0 BLOCK by :anonymous:\nU35C0 BLOCK by :anonymous:\nU35D0 BLOCK by qinling\nU35E0 BLOCK by fundawang\nU35F0 BLOCK by :anonymous:\nU3600 BLOCK by :anonymous:\nU3610 BLOCK by :anonymous:\nU3620 BLOCK by :anonymous:\nU3630 BLOCK by fundawang\nU3640 BLOCK by :anonymous:\nU3650 BLOCK by :anonymous:\nU3660 BLOCK by ZJQR\nU3670 BLOCK by ZJQR\nU3680 BLOCK by ZJQR\nU3690 BLOCK by MarkLam\nU36A0 BLOCK by MarkLam\nU36B0 BLOCK by MarkLam\nU36C0 BLOCK by MarkLam\nU36D0 BLOCK by MarkLam\nU36E0 BLOCK by MarkLam\nU36F0 BLOCK by MarkLam\nU3700 BLOCK by ZJQR\nU3710 BLOCK by ZJQR\nU3720 BLOCK by ZJQR\nU3730 BLOCK by ZJQR\nU3740 BLOCK by ZJQR\nU3750 BLOCK by ailantian\nU3760 BLOCK by ZJQR,ailantian\nU3770 BLOCK by ZJQR\nU3780 BLOCK by ZJQR\nU3790 BLOCK by ZJQR\nU37A0 BLOCK by MarkLam\nU37B0 BLOCK by MarkLam\nU37C0 BLOCK by MarkLam\nU37D0 BLOCK by MarkLam\nU37E0 BLOCK by MarkLam\nU37F0 BLOCK by MarkLam\nU3800 BLOCK by MarkLam\nU3810 BLOCK by ZJQR\nU3820 BLOCK by ZJQR\nU3830 BLOCK by FangQ\nU3840 BLOCK by ZJQR\nU3850 BLOCK by ZJQR\nU3860 BLOCK by ZJQR\nU3870 BLOCK by ZJQR,fundawang\nU3880 BLOCK by musiccow\nU3890 BLOCK by ZJQR,FangQ\nU38A0 BLOCK by ZJQR\nU38B0 BLOCK by :anonymous:\nU38C0 BLOCK by :anonymous:\nU38D0 BLOCK by :anonymous:\nU38E0 BLOCK by whppc\nU38F0 BLOCK by whppc\nU3900 BLOCK by PONY\nU3910 BLOCK by PONY\nU3920 BLOCK by PONY\nU3930 BLOCK by PONY\nU3940 BLOCK by ZJQR\nU3950 BLOCK by ZJQR\nU3960 BLOCK by fiag\nU3970 BLOCK by ZJQR\nU3980 BLOCK by fiag\nU3990 BLOCK by ZJQR\nU39A0 BLOCK by LeeZJQR\nU39B0 BLOCK by :anonymous:\nU39C0 BLOCK by PONY\nU39D0 BLOCK by PONY\nU39E0 BLOCK by PONY\nU39F0 BLOCK by PONY\nU3A00 BLOCK by PONY\nU3A10 BLOCK by PONY\nU3A20 BLOCK by PONY\nU3A30 BLOCK by :anonymous:\nU3A40 BLOCK by zhouyingxin\nU3A50 BLOCK by ZJQR\nU3A60 BLOCK by chenzhipeter\nU3A70 BLOCK by :anonymous:\nU3A80 BLOCK by PONY\nU3A90 BLOCK by PONY\nU3AA0 BLOCK by PONY\nU3AB0 BLOCK by :anonymous:\nU3AC0 BLOCK by :anonymous:\nU3AD0 BLOCK by failsafe\nU3AE0 BLOCK by failsafe\nU3AF0 BLOCK by failsafe\nU3B00 BLOCK by :anonymous:,fourbrow\nU3B10 BLOCK by :anonymous:\nU3B20 BLOCK by ZJQR\nU3B30 BLOCK by lenovox\nU3B40 BLOCK by lenovox\nU3B50 BLOCK by udi\nU3B60 BLOCK by :anonymous:\nU3B70 BLOCK by :anonymous:\nU3B80 BLOCK by :anonymous:\nU3B90 BLOCK by lenovox\nU3BA0 BLOCK by :anonymous:\nU3BB0 BLOCK by lrobinson\nU3BC0 BLOCK by :anonymous:\nU3BD0 BLOCK by chenzhipeter,ZJQR\nU3BE0 BLOCK by :anonymous:\nU3BF0 BLOCK by :anonymous:\nU3C00 BLOCK by :anonymous:\nU3C10 BLOCK by gsyZJQR\nU3C20 BLOCK by ZJQR\nU3C30 BLOCK by ZJQR\nU3C40 BLOCK by ZJQR\nU3C50 BLOCK by ZJQR\nU3C60 BLOCK by ZJQR\nU3C70 BLOCK by ZJQR\nU3C80 BLOCK by ZJQR\nU3C90 BLOCK by ZJQR\nU3CA0 BLOCK by ZJQR\nU3CB0 BLOCK by ZJQR\nU3CC0 BLOCK by udi\nU3CD0 BLOCK by :anonymous:\nU3CE0 BLOCK by :anonymous:\nU3CF0 BLOCK by ZJQR\nU3D00 BLOCK by leal\nU3D10 BLOCK by :anonymous:\nU3D20 BLOCK by ZJQR\nU3D30 BLOCK by ZJQR\nU3D40 BLOCK by ZJQR\nU3D50 BLOCK by ZJQR\nU3D60 BLOCK by ZJQR\nU3D70 BLOCK by ZJQR\nU3D80 BLOCK by ZJQR\nU3D90 BLOCK by ZJQR\nU3DA0 BLOCK by ZJQR\nU3DB0 BLOCK by ZJQR\nU3DC0 BLOCK by ZJQR\nU3DD0 BLOCK by ZJQR\nU3DE0 BLOCK by ZJQR\nU3DF0 BLOCK by ZJQR\nU3E00 BLOCK by ZJQR\nU3E10 BLOCK by ZJQR\nU3E20 BLOCK by ZJQR\nU3E30 BLOCK by ZJQR\nU3E40 BLOCK by ZJQR\nU3E50 BLOCK by ZJQR\nU3E60 BLOCK by ZJQR\nU3E70 BLOCK by ZJQR\nU3E80 BLOCK by ZJQR\nU3E90 BLOCK by ZJQR\nU3EA0 BLOCK by ZJQR\nU3EB0 BLOCK by udi,ZJQR\nU3EC0 BLOCK by :anonymous:\nU3ED0 BLOCK by :anonymous:\nU3EE0 BLOCK by :anonymous:\nU3EF0 BLOCK by :anonymous:\nU3F00 BLOCK by ZJQR\nU3F10 BLOCK by ZJQR\nU3F20 BLOCK by ZJQR\nU3F30 BLOCK by ZJQR\nU3F40 BLOCK by ZJQR\nU3F50 BLOCK by soicer\nU3F60 BLOCK by ZJQR\nU3F70 BLOCK by PONY\nU3F80 BLOCK by PONY\nU3F90 BLOCK by PONY\nU3FA0 BLOCK by PONY\nU3FB0 BLOCK by ZJQR\nU3FC0 BLOCK by ZJQR\nU3FD0 BLOCK by ZJQR\nU3FE0 BLOCK by ZJQR\nU3FF0 BLOCK by niqiu\nU4000 BLOCK by FangQ\nU4010 BLOCK by FangQ\nU4020 BLOCK by FangQ\nU4030 BLOCK by niqiu\nU4040 BLOCK by niqiu\nU4050 BLOCK by niqiu\nU4060 BLOCK by niqiu\nU4070 BLOCK by niqiu\nU4080 BLOCK by niqiu,FangQ\nU4090 BLOCK by niqiu,FangQ\nU40A0 BLOCK by niqiu,FangQ\nU40B0 BLOCK by niqiu,FangQ\nU40C0 BLOCK by buick\nU40D0 BLOCK by niqiu,FangQ\nU40E0 BLOCK by ZJQR\nU40F0 BLOCK by ZJQR\nU4100 BLOCK by buick\nU4110 BLOCK by xiaoma\nU4120 BLOCK by ZJQR\nU4130 BLOCK by ailantian\nU4140 BLOCK by ZJQR\nU4150 BLOCK by ZJQR\nU4160 BLOCK by ZJQR\nU4170 BLOCK by ZJQR\nU4180 BLOCK by ZJQR\nU4190 BLOCK by ZJQR\nU41A0 BLOCK by ZJQR\nU41B0 BLOCK by ZJQR\nU41C0 BLOCK by ZJQR\nU41D0 BLOCK by ZJQR\nU41E0 BLOCK by ZJQR\nU41F0 BLOCK by ZJQR\nU4200 BLOCK by ZJQR\nU4210 BLOCK by ZJQR\nU4220 BLOCK by ZJQR\nU4230 BLOCK by FangQ\nU4240 BLOCK by FangQ\nU4250 BLOCK by ZJQR\nU4260 BLOCK by ZJQR\nU4270 BLOCK by ZJQR\nU4280 BLOCK by ZJQR\nU4290 BLOCK by ZJQR\nU42A0 BLOCK by ZJQR\nU42B0 BLOCK by ZJQR\nU42C0 BLOCK by ZJQR\nU42D0 BLOCK by Seeker\nU42E0 BLOCK by twang467\nU42F0 BLOCK by twang467\nU4300 BLOCK by twang467\nU4310 BLOCK by twang467\nU4320 BLOCK by twang467\nU4330 BLOCK by twang467\nU4340 BLOCK by twang467\nU4350 BLOCK by twang467\nU4360 BLOCK by twang467\nU4370 BLOCK by twang467\nU4380 BLOCK by Blueelf\nU4390 BLOCK by twang467\nU43A0 BLOCK by twang467\nU43B0 BLOCK by twang467\nU43C0 BLOCK by twang467\nU43D0 BLOCK by twang467\nU43E0 BLOCK by ZJQR\nU43F0 BLOCK by ZJQR\nU4400 BLOCK by ZJQR\nU4410 BLOCK by ZJQR\nU4420 BLOCK by ZJQR\nU4430 BLOCK by ZJQR\nU4440 BLOCK by whppc\nU4450 BLOCK by ZJQR\nU4460 BLOCK by ZJQR\nU4470 BLOCK by ZJQR\nU4480 BLOCK by ZJQR\nU4490 BLOCK by ZJQR\nU44A0 BLOCK by ZJQR\nU44B0 BLOCK by ZJQR\nU44C0 BLOCK by ZJQR\nU44D0 BLOCK by ZJQR\nU44E0 BLOCK by ZJQR\nU44F0 BLOCK by ZJQR\nU4500 BLOCK by :anonymous:\nU4510 BLOCK by ZJQR\nU4520 BLOCK by ZJQR\nU4530 BLOCK by ZJQR\nU4540 BLOCK by ZJQR\nU4550 BLOCK by ZJQR\nU4560 BLOCK by ZJQR\nU4570 BLOCK by ZJQR\nU4580 BLOCK by ZJQR\nU4590 BLOCK by ZJQR\nU45A0 BLOCK by ZJQR\nU45B0 BLOCK by ZJQR\nU45C0 BLOCK by ZJQR\nU45D0 BLOCK by ZJQR\nU45E0 BLOCK by ZJQR\nU45F0 BLOCK by havas\nU4600 BLOCK by havas\nU4610 BLOCK by ZJQR\nU4620 BLOCK by ZJQR\nU4630 BLOCK by ZJQR\nU4640 BLOCK by ZJQR\nU4650 BLOCK by ZJQR\nU4660 BLOCK by tchaikov\nU4670 BLOCK by ZJQR\nU4680 BLOCK by eka\nU4690 BLOCK by eka\nU46A0 BLOCK by ZJQR\nU46B0 BLOCK by ZJQR\nU46C0 BLOCK by xuande\nU46D0 BLOCK by ZJQR\nU46E0 BLOCK by tchaikov\nU46F0 BLOCK by tchaikov\nU4700 BLOCK by tchaikov\nU4710 BLOCK by tchaikov\nU4720 BLOCK by tchaikov\nU4730 BLOCK by tchaikov\nU4740 BLOCK by ZJQR\nU4750 BLOCK by ZJQR\nU4760 BLOCK by ZJQR\nU4770 BLOCK by ZJQR\nU4780 BLOCK by ZJQR\nU4790 BLOCK by wanghong\nU47A0 BLOCK by wanghong\nU47B0 BLOCK by wanghong\nU47C0 BLOCK by wanghong\nU47D0 BLOCK by buick\nU47E0 BLOCK by buick\nU47F0 BLOCK by PONY\nU4800 BLOCK by :anonymous:\nU4810 BLOCK by SCXS\nU4820 BLOCK by SCXS\nU4830 BLOCK by :anonymous:\nU4840 BLOCK by SCXS\nU4850 BLOCK by SCXS\nU4860 BLOCK by fiag\nU4870 BLOCK by fiag\nU4880 BLOCK by ZJQR\nU4890 BLOCK by ZJQR\nU48A0 BLOCK by ZJQR\nU48B0 BLOCK by ZJQR\nU48C0 BLOCK by :anonymous:\nU48D0 BLOCK by ZJQR\nU48E0 BLOCK by :anonymous:\nU48F0 BLOCK by :anonymous:\nU4900 BLOCK by ZJQR\nU4910 BLOCK by ZJQR\nU4920 BLOCK by musiccow\nU4930 BLOCK by musiccow\nU4940 BLOCK by musiccow\nU4950 BLOCK by ZJQR\nU4960 BLOCK by ZJQR\nU4970 BLOCK by ZJQR\nU4980 BLOCK by ZJQR\nU4990 BLOCK by ZJQR\nU49A0 BLOCK by ZJQR\nU49B0 BLOCK by ZJQR\nU49C0 BLOCK by ZJQR\nU49D0 BLOCK by eka\nU49E0 BLOCK by eka\nU49F0 BLOCK by :anonymous:\nU4A00 BLOCK by :anonymous:\nU4A10 BLOCK by :anonymous:\nU4A20 BLOCK by :anonymous:\nU4A30 BLOCK by :anonymous:\nU4A40 BLOCK by :anonymous:\nU4A50 BLOCK by :anonymous:\nU4A60 BLOCK by :anonymous:\nU4A70 BLOCK by :anonymous:\nU4A80 BLOCK by :anonymous:\nU4A90 BLOCK by :anonymous:\nU4AA0 BLOCK by :anonymous:\nU4AB0 BLOCK by :anonymous:\nU4AC0 BLOCK by :anonymous:\nU4AD0 BLOCK by :anonymous:\nU4AE0 BLOCK by :anonymous:\nU4AF0 BLOCK by :anonymous:\nU4B00 BLOCK by :anonymous:\nU4B10 BLOCK by :anonymous:\nU4B20 BLOCK by :anonymous:\nU4B30 BLOCK by :anonymous:\nU4B40 BLOCK by :anonymous:\nU4B50 BLOCK by :anonymous:\nU4B60 BLOCK by :anonymous:\nU4B70 BLOCK by :anonymous:\nU4B80 BLOCK by :anonymous:\nU4B90 BLOCK by :anonymous:\nU4BA0 BLOCK by :anonymous:\nU4BB0 BLOCK by :anonymous:\nU4BC0 BLOCK by :anonymous:\nU4BD0 BLOCK by :anonymous:\nU4BE0 BLOCK by :anonymous:\nU4BF0 BLOCK by :anonymous:\nU4C00 BLOCK by FangQ\nU4C10 BLOCK by :anonymous:\nU4C20 BLOCK by :anonymous:\nU4C30 BLOCK by :anonymous:\nU4C40 BLOCK by :anonymous:\nU4C50 BLOCK by :anonymous:\nU4C60 BLOCK by :anonymous:\nU4C70 BLOCK by :anonymous:\nU4C80 BLOCK by :anonymous:\nU4C90 BLOCK by :anonymous:\nU4CA0 BLOCK by :anonymous:\nU4CB0 BLOCK by :anonymous:\nU4CC0 BLOCK by :anonymous:\nU4CD0 BLOCK by :anonymous:\nU4CE0 BLOCK by :anonymous:\nU4CF0 BLOCK by :anonymous:\nU4D00 BLOCK by :anonymous:\nU4D10 BLOCK by :anonymous:\nU4D20 BLOCK by :anonymous:\nU4D30 BLOCK by :anonymous:\nU4D40 BLOCK by :anonymous:\nU4D50 BLOCK by :anonymous:\nU4D60 BLOCK by :anonymous:\nU4D70 BLOCK by :anonymous:\nU4D80 BLOCK by :anonymous:\nU4D90 BLOCK by :anonymous:\nU4DA0 BLOCK by :anonymous:\n\n*note: ZJQR for ZaiJianQingRen, SCXS for ShiCengXiangShi\n\n----------------------------------------------------------\n\n V.  Authors for CJK Basic glyphs standard verfication\n\n*original project record: \n  http://wenq.org/index.cgi?ProjectTotem\n----------------------------------------------------------\n   Unicode       Reviewer\n----------------------------------------------------------\nU+4E00~U+4E64 by FangQ\nU+4E65~U+4EC9 by FangQ\nU+4ECA~U+4F2E by FangQ\nU+4F2F~U+4F93 by mumchristmas\nU+4F94~U+4FF8 by mumchristmas\nU+4FF9~U+505D by mumchristmas\nU+505E~U+50C2 by mumchristmas\nU+50C3~U+5127 by mumchristmas\nU+5128~U+518C by lsz\nU+518D~U+51F1 by lsz\nU+51F2~U+5256 by lsz\nU+5257~U+52BB by fundawang\nU+52BC~U+5320 by fundawang\nU+5321~U+5385 by :anonymous:\nU+5386~U+53EA by tchaikov\nU+53EB~U+544F by tchaikov\nU+5450~U+54B4 by tchaikov\nU+54B5~U+5519 by tchaikov\nU+551A~U+557E by tchaikov\nU+557F~U+55E3 by tchaikov\nU+55E4~U+5648 by tchaikov\nU+5649~U+56AD by nihui\nU+56AE~U+5712 by tchaikov\nU+5713~U+5777 by tchaikov\nU+5778~U+57DC by tchaikov\nU+57DD~U+5841 by pem\nU+5842~U+58A6 by nihui\nU+58A7~U+590B by dblobster\nU+590C~U+5970 by tchaikov\nU+5971~U+59D5 by tchaikov\nU+59D6~U+5A3A by tchaikov\nU+5A3B~U+5A9F by tchaikov\nU+5AA0~U+5B04 by tchaikov\nU+5B05~U+5B69 by tchaikov\nU+5B6A~U+5BCE by tchaikov\nU+5BCF~U+5C33 by tchaikov\nU+5C34~U+5C98 by tchaikov\nU+5C99~U+5CFD by tchaikov\nU+5CFE~U+5D62 by tchaikov\nU+5D63~U+5DC7 by tchaikov\nU+5DC8~U+5E2C by tchaikov\nU+5E2D~U+5E91 by tchaikov\nU+5E92~U+5EF6 by tchaikov\nU+5EF7~U+5F5B by tchaikov\nU+5F5C~U+5FC0 by tchaikov\nU+5FC1~U+6025 by tchaikov\nU+6026~U+608A by tchaikov\nU+608B~U+60EF by tchaikov\nU+60F0~U+6154 by tchaikov\nU+6155~U+61B9 by tchaikov\nU+61BA~U+621E by tchaikov\nU+621F~U+6283 by tchaikov\nU+6284~U+62E8 by tchaikov\nU+62E9~U+634D by tchaikov\nU+634E~U+63B2 by tchaikov\nU+63B3~U+6417 by tchaikov\nU+6418~U+647C by tchaikov\nU+647D~U+64E1 by tchaikov\nU+64E2~U+6546 by tchaikov\nU+6547~U+65AB by tchaikov\nU+65AC~U+6610 by tchaikov\nU+6611~U+6675 by tchaikov\nU+6676~U+66DA by tchaikov\nU+66DB~U+673F by tchaikov\nU+6740~U+67A4 by wanghong\nU+67A5~U+6809 by wanghong\nU+680A~U+686E by wanghong\nU+686F~U+68D3 by wanghong\nU+68D4~U+6938 by wanghong\nU+6939~U+699D by wanghong\nU+699E~U+6A02 by wanghong\nU+6A03~U+6A67 by wanghong\nU+6A68~U+6ACC by wanghong\nU+6ACD~U+6B31 by wanghong\nU+6B32~U+6B96 by wanghong\nU+6B97~U+6BFB by wanghong\nU+6BFC~U+6C60 by wanghong\nU+6C61~U+6CC5 by wanghong\nU+6CC6~U+6D2A by wanghong\nU+6D2B~U+6D8F by wanghong\nU+6D90~U+6DF4 by wanghong\nU+6DF5~U+6E59 by wanghong\nU+6E5A~U+6EBE by wanghong\nU+6EBF~U+6F23 by wanghong\nU+6F24~U+6F88 by wanghong\nU+6F89~U+6FED by wanghong\nU+6FEE~U+7052 by wanghong\nU+7053~U+70B7 by wanghong\nU+70B8~U+711C by wanghong\nU+711D~U+7181 by wanghong\nU+7182~U+71E6 by wanghong\nU+71E7~U+724B by wanghong\nU+724C~U+72B0 by wanghong\nU+72B1~U+7315 by wanghong\nU+7316~U+737A by wanghong\nU+737B~U+73DF by wanghong\nU+73E0~U+7444 by wanghong\nU+7445~U+74A9 by tchaikov\nU+74AA~U+750E by lsz\nU+750F~U+7573 by lsz\nU+7574~U+75D8 by lsz\nU+75D9~U+763D by lsz\nU+763E~U+76A2 by lsz\nU+76A3~U+7707 by lsz\nU+7708~U+776C by lsz\nU+776D~U+77D1 by lsz\nU+77D2~U+7836 by lsz\nU+7837~U+789B by lsz\nU+789C~U+7900 by lsz\nU+7901~U+7965 by tchaikov\nU+7966~U+79CA by tchaikov\nU+79CB~U+7A2F by tchaikov\nU+7A30~U+7A94 by tchaikov\nU+7A95~U+7AF9 by tchaikov\nU+7AFA~U+7B5E by tchaikov\nU+7B5F~U+7BC3 by tchaikov\nU+7BC4~U+7C28 by tchaikov\nU+7C29~U+7C8D by tchaikov\nU+7C8E~U+7CF2 by tchaikov\nU+7CF3~U+7D57 by the_owl\nU+7D58~U+7DBC by the_owl\nU+7DBD~U+7E21 by wanghong\nU+7E22~U+7E86 by wanghong\nU+7E87~U+7EEB by wanghong\nU+7EEC~U+7F50 by wanghong\nU+7F51~U+7FB5 by wanghong\nU+7FB6~U+801A by wanghong\nU+801B~U+807F by wanghong\nU+8080~U+80E4 by wanghong\nU+80E5~U+8149 by wanghong\nU+814A~U+81AE by wanghong\nU+81AF~U+8213 by wanghong\nU+8214~U+8278 by wanghong\nU+8279~U+82DD by wanghong\nU+82DE~U+8342 by wanghong\nU+8343~U+83A7 by wanghong\nU+83A8~U+840C by wanghong\nU+840D~U+8471 by tchaikov\nU+8472~U+84D6 by tchaikov\nU+84D7~U+853B by FangQ\nU+853C~U+85A0 by FangQ\nU+85A1~U+8605 by FangQ\nU+8606~U+866A by FangQ\nU+866B~U+86CF by FangQ\nU+86D0~U+8734 by FangQ\nU+8735~U+8799 by FangQ\nU+879A~U+87FE by wanghong\nU+87FF~U+8863 by wanghong\nU+8864~U+88C8 by wanghong\nU+88C9~U+892D by wanghong\nU+892E~U+8992 by wanghong\nU+8993~U+89F7 by wanghong\nU+89F8~U+8A5C by wanghong\nU+8A5D~U+8AC1 by wanghong\nU+8AC2~U+8B26 by wanghong\nU+8B27~U+8B8B by wanghong\nU+8B8C~U+8BF0 by wanghong\nU+8BF1~U+8C55 by wanghong\nU+8C56~U+8CBA by wanghong\nU+8CBB~U+8D1F by FangQ\nU+8D20~U+8D84 by FangQ\nU+8D85~U+8DE9 by wanghong\nU+8DEA~U+8E4E by wanghong\nU+8E4F~U+8EB3 by wanghong\nU+8EB4~U+8F18 by wanghong\nU+8F19~U+8F7D by wanghong\nU+8F7E~U+8FE2 by wanghong\nU+8FE3~U+9047 by wanghong\nU+9048~U+90AC by wanghong\nU+90AD~U+9111 by wanghong\nU+9112~U+9176 by wanghong\nU+9177~U+91DB by FangQ\nU+91DC~U+9240 by FangQ\nU+9241~U+92A5 by FangQ\nU+92A6~U+930A by FangQ\nU+930B~U+936F by FangQ\nU+9370~U+93D4 by FangQ\nU+93D5~U+9439 by FangQ\nU+943A~U+949E by FangQ\nU+949F~U+9503 by FangQ\nU+9504~U+9568 by FangQ\nU+9569~U+95CD by FangQ\nU+95CE~U+9632 by FangQ\nU+9633~U+9697 by FangQ\nU+9698~U+96FC by FangQ\nU+96FD~U+9761 by FangQ\nU+9762~U+97C6 by FangQ\nU+97C7~U+982B by FangQ\nU+982C~U+9890 by FangQ\nU+9891~U+98F5 by FangQ\nU+98F6~U+995A by FangQ\nU+995B~U+99BF by FangQ\nU+99C0~U+9A24 by FangQ\nU+9A25~U+9A89 by FangQ\nU+9A8A~U+9AEE by FangQ\nU+9AEF~U+9B53 by FangQ\nU+9B54~U+9BB8 by FangQ\nU+9BB9~U+9C1D by FangQ\nU+9C1E~U+9C82 by wanghong\nU+9C83~U+9CE7 by wanghong\nU+9CE8~U+9D4C by wanghong\nU+9D4D~U+9DB1 by wanghong\nU+9DB2~U+9E16 by wanghong\nU+9E17~U+9E7B by wanghong\nU+9E7C~U+9EE0 by FangQ\nU+9EE1~U+9F45 by wanghong\nU+9F46~U+9FAA by FangQ\n\n----------------------------------------------------------\n\n VI. Other resources\n\nWebspace provider:\n\n     Sourceforge provided free webspace and great tools to help\n                   the development: http://sf.net/\n\nWiki development:\n\n     Qianqian Fang developed the WenQuanYi wiki software\n     (Habitat wiki: http://wenq.org/habitat/) \n     based on UseModWiki written by Clifford Adams.\n\n     The Javascript font editor \n     (Pixel: http://wenq.org/index.cgi?Pixel) was writen by \n     Qianqian Fang.\n\n     The font editor previewer was written by Chai Kov\n     (tchaikov #sjtu _edu _cn)\n\n========================================================== \n"
  },
  {
    "path": "Translations/wqy-bitmapsong/COPYING",
    "content": "\t\t    GNU GENERAL PUBLIC LICENSE\n\t\t       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\t\t\t    Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Library General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n\t\t    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n\t\t\t    NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n\t\t     END OF TERMS AND CONDITIONS\n\n\t    How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation; either version 2 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Library General\nPublic License instead of this License.\n\n"
  },
  {
    "path": "Translations/wqy-bitmapsong/README.md",
    "content": "This directory contains files included from the WenQuanYi Bitmap Song font\nrelease, obtainable on the project's [SourceForge download page][wqy-sf].\n\nThe project author, Fang QianQian, kindly agreed to provide the font using the\n\"GPLv2 or later\" license in order to be compatible with IronOS, which is\nlicensed under GPLv3. The release package with the changed license was made\navailable via the project's SourceForge page on 2021-02-03 with the file name\n[`wqy-bitmapsong-bdf-1.0.0-RC1_GPLv2+.tar.gz`][wqy-sf-dl].\n\n[wqy-sf]: https://sourceforge.net/projects/wqy/files/wqy-bitmapfont/1.0.0-RC1/\n[wqy-sf-dl]: https://sourceforge.net/projects/wqy/files/wqy-bitmapfont/1.0.0-RC1/wqy-bitmapsong-bdf-1.0.0-RC1_GPLv2%2B.tar.gz/download.\n"
  },
  {
    "path": "Translations/wqy-bitmapsong/README_original",
    "content": "========================================================== \n\n           Wen Quan Yi Bitmap Song CJK Fonts\n\n                    Release Notes\n\n----------------------------------------------------------\n\nDedication: \n\n\n----------------------------------------------------------\nSummary:\n\n    Authors  : WenQuanYi Contributors\n    Webpage  : http://wenq.org/en/\n    Font Name: WenQuanYi Bitmap Song\n    Version  : 1.0 (Hero) RC1 (0.9.9.8)\n    Release  : 8\n    Copyright:  2004-2010, The WenQuanYi Project \n               Board of Trustees and Qianqian Fang\n    License  : GPL v2 or later version (with font embedding exception **)\n----------------------------------------------------------\n\n          May the Font be with you, forever!\n\n----------------------------------------------------------\n\nLegal Disclaimer:\n\nCopyright (c) 2004-2010, The WenQuanYi Project \n              Board of Trustees and Qianqian Fang\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n\n----------------------------------------------------------\n\nTable of Content\n\n I.   Introduction\n II.  Installation\n III. About \"The WenQuanYi Project\"\n IV.  Links to Open-source CJK font resources\n\n----------------------------------------------------------\n\n I. Introduction\n\nWenQuanYi bitmap fonts include all 20,932 Unicode 5.2 \nCJK Unified Ideographs (U4E00 - U9FA5) and 6,582 \nCJK Extension A characters (U3400 - U4DB5) at \n5 different pixel sizes (9pt-12X12, 10pt-13X13, \n10.5pt-14x14, 11pt-15X15 and 12pt-16x16 pixel).\nUse of this bitmap font for on-screen display of Chinese \n(traditional and simplified) in web pages and elsewhere \neliminates the annoying \"blurring\" problems caused by \ninsufficient \"hinting\" of anti-aliased vector CJK fonts. \nIn addition, Latin characters, Japanese Kanas and \nKorean Hangul glyphs (U+AC00~U+D7A3) are also included.\n\nThis font was built upon the previous works by firefly\n(firefly[at]firefly(dot)idv(dot)tw)[2]. The 12pt bitmap\nglyphs between U3400-U9FA5 were derived from Chinese \nnational standard GB19966-2005 [3].\n\nWe release this font to the public as an open-source \nsoftware in terms of GNU General Public License version 2. \nYou are free to copy, distribute, and/or modify this \nfont as long as you pass the freedoms to the users\nof the derived work.\n\nWe hope you find this font useful. Please direct your \nfeedback and bug-reports to our forum at\n\n  http://wenq.org/forum/\n\nIn addition to bitmap font development, we also develop\nvector fonts and other CJK-related resources at WenQuanYi.\nPlease join us by visiting our website at\n\n  http://wenq.org/en/\n\nWe also welcome donations if you found this font to be \nuseful to you.\n\n----------------------------------------------------------\n\n II. Installation Guide\n\n    Please refer to INSTALL for details.\n\n----------------------------------------------------------\n\n III. About The WenQuanYi Project\n\nThe Wen Quan Yi Project was founded by Qianqian Fang[5] in \nOct. 2004. The goal of this project is to develop CJK \nrelated open-source software and resources. The initial \neffots of the project focused on creating high quality \nbitmap character glyphs and outline fonts for all \n70,000+ CJK characters currently encoded by the \nUnicode Consortium [4]. \n\nThe contributors of the Wen Quan Yi Project use wiki[1] \nas the primary development tool for glyph creation, documentation\nand coordinations. The Wen Quan Yi wiki (Habitat wiki: \nhttp://wenq.org/habitat/ ) was developed by Qianqian Fang\nbased on UseModWiki v1.0.\n\nFor commercial use, please contact the project\nmaintainer (Qianqian Fang) or consult copyright law firms to\nmake sure your plan is compliant with the font licenses.\nCommercial licenses are also available upon request.  \n\n----------------------------------------------------------\n\n IV. Links to Open-source CJK font resources\n\n\n[1] The WenQuanYi Project Homepage\n      http://wenq.org/            (Chinese version)\n      http://wenq.org/en/         (English version)\n      http://wenq.org/forum/      (User forum)\n\n[2] Firefly bitmap font\n      http://www.study-area.org/apt/firefly-font/\n\n[3] Chinese National Standard GB19966-2005 (mandatory)\n      http://www.standardcn.com/standard_plan/list_standard_content.asp?\n             stand_id=GB@19966-2005\n\n[4] The Unicode Consortium\n      http://www.unicode.org/\n\n[5] Qianqian Fang homepage\n      http://nmr.mgh.harvard.edu/~fangq/\n\n\n** GPL v2.0 license with font embedding exception:\n\nAs a special exception, if you create a document which uses this\nfont, and embed this font or unaltered portions of this font into \nthe document, this font does not by itself cause the resulting \ndocument to be covered by the GNU General Public License. This \nexception does not however invalidate any other reasons why the \ndocument might be covered by the GNU General Public License. If you \nmodify this font, you may extend this exception to your version of \nthe font, but you are not obligated to do so. If you do not wish to \ndo so, delete this exception statement from your version.\n\n\n========================================================== \n"
  },
  {
    "path": "Translations/wqy-bitmapsong/wenquanyi_9pt.bdf",
    "content": "STARTFONT 2.1\nFONT -wenquanyi-wenquanyi bitmap song-medium-r-normal--12-120-75-75-P-119-ISO10646-1\nCOMMENT ========================================================== \nCOMMENT                Wen Quan Yi Bitmap Song \nCOMMENT ----------------------------------------------------------\nCOMMENT Summary:\nCOMMENT \nCOMMENT     \tAuthors  : WenQuanYi Contributors\nCOMMENT     \tWebpage  : http://wenq.org/en/\nCOMMENT     \tFont Name: WenQuanYi Bitmap Song\nCOMMENT     \tVersion  : 0.9.9.8\nCOMMENT     \tRelease  : 8\nCOMMENT     \tCopyright: (C)2004-2010, WenQuanYi Project \nCOMMENT     \t\t   Board of Trustees and Qianqian Fang\nCOMMENT     \tLicense  : GPL v2 or later versions (with font embedding exception)\nCOMMENT \nCOMMENT           May the Font be with you, forever!\nCOMMENT ----------------------------------------------------------\nCOMMENT WenQuanYi bitmap fonts include all 20,932 Unicode 5.2 \nCOMMENT CJK Unified Ideographs (U4E00 - U9FA5) and 6,582 \nCOMMENT CJK Extension A characters (U3400 - U4DB5) at \nCOMMENT 5 different pixel sizes (9pt-12X12, 10pt-13X13, \nCOMMENT 10.5pt-14x14, 11pt-15X15 and 12pt-16x16 pixel).\nCOMMENT Use of this bitmap font for on-screen display of Chinese \nCOMMENT (traditional and simplified) in web pages and elsewhere \nCOMMENT eliminates the annoying \"blurring\" problems caused by \nCOMMENT insufficient \"hinting\" of anti-aliased vector CJK fonts. \nCOMMENT In addition, Latin characters, Japanese Kanas and \nCOMMENT Korean Hangul glyphs (U+AC00~U+D7A3) are also included.\nCOMMENT ----------------------------------------------------------\nCOMMENT WenQuanYi Contributors:\nCOMMENT \nCOMMENT Project Maintainer: Qianqian Fang(fangq<at>nmr.mgh.harvard.edu)\nCOMMENT\nCOMMENT Major contributors: wanghong, tchaikov,ailantian,niqiu,fiag\nCOMMENT                     caiqian,fundawang\nCOMMENT Other contributors: activeion,amadeoh,BabyPBC,BenBear,  \nCOMMENT                     brep,chaoslawful,DannyZeng,farm,fiag,keykeen,\nCOMMENT                     liyi,lucifer,nilarcs,niqiu,pangwa,pathfinder,\nCOMMENT                     pinker,PONY,pupilzeng,shhky,stid,wuler.lv,\nCOMMENT                     xnuxmwx,namespace,leftstand,MarkLam,buick,\nCOMMENT                     liqian,qinling,Seeker,xiaoma,ZaiJianQingRen,\nCOMMENT \t\t    SiCengXiangShi,the_owl,whppc,eka,failsafe,\nCOMMENT                     musiccow,Blueelf,lenovox,udi,leal\nCOMMENT ----------------------------------------------------------\nCOMMENT This file: WenQuanYi Bitmap Song 9pt medium\nCOMMENT Created by Qianqian Fang (fangq<at>nmr.mgh.harvard.edu)\nCOMMENT ----------------------------------------------------------\nSIZE 12 75 75\nFONTBOUNDINGBOX 12 14 0 -3\nSTARTPROPERTIES 27\nFONT_NAME \"WenQuanYi Bitmap Song\"\nFONT_ASCENT 12\nFONT_DESCENT 3\nUNDERLINE_POSITION -3\nUNDERLINE_THICKNESS 1\nQUAD_WIDTH 12\nX_HEIGHT 5\nCAP_HEIGHT 7\nFONTNAME_REGISTRY \"\"\nFAMILY_NAME \"WenQuanYi Bitmap Song\"\nFOUNDRY \"WenQuanYi\"\nWEIGHT_NAME \"Medium\"\nSETWIDTH_NAME \"Normal\"\nSLANT \"R\"\nADD_STYLE_NAME \"\"\nFONT_VERSION \"000.998\"\nPIXEL_SIZE 12\nPOINT_SIZE 120\nDEFAULT_CHAR 0\nRESOLUTION_X 75\nRESOLUTION_Y 75\nRESOLUTION 75\nSPACING \"P\"\nAVERAGE_WIDTH 119\nCHARSET_REGISTRY \"ISO10646\"\nCHARSET_ENCODING \"1\"\nCHARSET_COLLECTIONS \"ASCII ISO8859-5 GB2312.1980 BIG5-0 KSC5601.1989-0 JISX0208.1997 ISO10646-1\"\nENDPROPERTIES\nCHARS 30503\nSTARTCHAR nounicode-3-1-c\nENCODING 12\nSWIDTH 333 0\nDWIDTH 6 0\nBBX 1 1 0 0\nBITMAP\n00\nENDCHAR\nSTARTCHAR nounicode-3-1-d\nENCODING 13\nSWIDTH 333 0\nDWIDTH 4 0\nBBX 1 1 3 -1\nBITMAP\n00\nENDCHAR\nSTARTCHAR U_0020\nENCODING 32\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 1 1 0 0\nBITMAP\n00\nENDCHAR\nSTARTCHAR exclam\nENCODING 33\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 1 9 2 0\nBITMAP\n80\n80\n80\n80\n80\n80\n00\n00\n80\nENDCHAR\nSTARTCHAR quotedbl\nENCODING 34\nSWIDTH 583 0\nDWIDTH 6 0\nBBX 4 3 1 7\nBITMAP\n90\n90\n90\nENDCHAR\nSTARTCHAR numbersign\nENCODING 35\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 9 0 0\nBITMAP\n48\n48\nFC\n48\n48\n48\nFC\n48\n48\nENDCHAR\nSTARTCHAR dollar\nENCODING 36\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 10 0 -1\nBITMAP\n20\n70\nA8\nA0\n60\n30\n28\nA8\n70\n20\nENDCHAR\nSTARTCHAR percent\nENCODING 37\nSWIDTH 416 0\nDWIDTH 6 0\nBBX 6 9 0 -1\nBITMAP\n48\nA8\nB0\n50\n20\n28\n54\n54\n88\nENDCHAR\nSTARTCHAR ampersand\nENCODING 38\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\n20\n50\n50\n20\n58\n90\n90\n68\nENDCHAR\nSTARTCHAR quotesingle\nENCODING 39\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 1 3 2 7\nBITMAP\n80\n80\n80\nENDCHAR\nSTARTCHAR parenleft\nENCODING 40\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 3 11 1 -1\nBITMAP\n20\n40\n40\n80\n80\n80\n80\n80\n40\n40\n20\nENDCHAR\nSTARTCHAR parenright\nENCODING 41\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 3 11 1 -1\nBITMAP\n80\n40\n40\n20\n20\n20\n20\n20\n40\n40\n80\nENDCHAR\nSTARTCHAR asterisk\nENCODING 42\nSWIDTH 666 0\nDWIDTH 6 0\nBBX 5 7 0 0\nBITMAP\n20\nA8\n70\nF8\n70\nA8\n20\nENDCHAR\nSTARTCHAR plus\nENCODING 43\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 7 0 0\nBITMAP\n10\n10\n10\nFE\n10\n10\n10\nENDCHAR\nSTARTCHAR comma\nENCODING 44\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 2 3 2 -1\nBITMAP\nC0\n40\n80\nENDCHAR\nSTARTCHAR hyphen\nENCODING 45\nSWIDTH 416 0\nDWIDTH 6 0\nBBX 5 1 0 4\nBITMAP\nF8\nENDCHAR\nSTARTCHAR period\nENCODING 46\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 1 2 2 0\nBITMAP\n80\n80\nENDCHAR\nSTARTCHAR U_002F\nENCODING 47\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 4 12 0 -1\nBITMAP\n10\n10\n10\n20\n20\n20\n40\n40\n40\n80\n80\n80\nENDCHAR\nSTARTCHAR zero\nENCODING 48\nSWIDTH 636 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\n70\n88\n88\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR one\nENCODING 49\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\nE0\n20\n20\n20\n20\n20\n20\nF8\nENDCHAR\nSTARTCHAR two\nENCODING 50\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\n70\n88\n08\n08\n10\n20\n40\nF8\nENDCHAR\nSTARTCHAR three\nENCODING 51\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\nF0\n08\n08\n70\n08\n08\n08\nF0\nENDCHAR\nSTARTCHAR four\nENCODING 52\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 8 0 0\nBITMAP\n18\n28\n48\n48\n88\nFC\n08\n08\nENDCHAR\nSTARTCHAR five\nENCODING 53\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\nF0\n80\n80\nF0\n08\n08\n08\nF0\nENDCHAR\nSTARTCHAR six\nENCODING 54\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\n70\n80\n80\nF0\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR seven\nENCODING 55\nSWIDTH 666 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\nF8\n08\n08\n10\n10\n20\n20\n20\nENDCHAR\nSTARTCHAR eight\nENCODING 56\nSWIDTH 684 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\n70\n88\n88\n70\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR nine\nENCODING 57\nSWIDTH 686 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\n70\n88\n88\n88\n78\n08\n88\n70\nENDCHAR\nSTARTCHAR U_003A\nENCODING 58\nSWIDTH 500 0\nDWIDTH 2 0\nBBX 1 7 0 0\nBITMAP\n00\n80\n80\n00\n00\n80\n80\nENDCHAR\nSTARTCHAR semicolon\nENCODING 59\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 2 8 2 -1\nBITMAP\nC0\nC0\n00\n00\n00\nC0\n40\n80\nENDCHAR\nSTARTCHAR less\nENCODING 60\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 9 0 0\nBITMAP\n08\n10\n20\n40\n80\n40\n20\n10\n08\nENDCHAR\nSTARTCHAR equal\nENCODING 61\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 3 0 3\nBITMAP\nF8\n00\nF8\nENDCHAR\nSTARTCHAR greater\nENCODING 62\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 9 0 0\nBITMAP\n80\n40\n20\n10\n08\n10\n20\n40\n80\nENDCHAR\nSTARTCHAR question\nENCODING 63\nSWIDTH 583 0\nDWIDTH 6 0\nBBX 5 9 0 0\nBITMAP\n70\n88\n88\n08\n30\n20\n00\n20\n20\nENDCHAR\nSTARTCHAR at\nENCODING 64\nSWIDTH 333 0\nDWIDTH 8 0\nBBX 7 10 0 -1\nBITMAP\n38\n44\nB2\n8A\n9A\nAA\nAA\n96\n44\n38\nENDCHAR\nSTARTCHAR A\nENCODING 65\nSWIDTH 294 0\nDWIDTH 8 0\nBBX 7 8 0 0\nBITMAP\n10\n10\n28\n28\n44\n7C\n82\n82\nENDCHAR\nSTARTCHAR B\nENCODING 66\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 8 0 0\nBITMAP\nF8\n84\n84\nF8\n84\n84\n84\nF8\nENDCHAR\nSTARTCHAR C\nENCODING 67\nSWIDTH 557 0\nDWIDTH 7 0\nBBX 6 8 0 0\nBITMAP\n78\n84\n80\n80\n80\n80\n84\n78\nENDCHAR\nSTARTCHAR D\nENCODING 68\nSWIDTH 666 0\nDWIDTH 8 0\nBBX 7 8 0 0\nBITMAP\nF8\n84\n82\n82\n82\n82\n84\nF8\nENDCHAR\nSTARTCHAR E\nENCODING 69\nSWIDTH 583 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\nF8\n80\n80\nF8\n80\n80\n80\nF8\nENDCHAR\nSTARTCHAR F\nENCODING 70\nSWIDTH 666 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\nF8\n80\n80\nF0\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR G\nENCODING 71\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 8 0 0\nBITMAP\n78\n84\n80\n80\n8C\n84\n84\n7C\nENDCHAR\nSTARTCHAR H\nENCODING 72\nSWIDTH 666 0\nDWIDTH 7 0\nBBX 6 8 0 0\nBITMAP\n84\n84\n84\nFC\n84\n84\n84\n84\nENDCHAR\nSTARTCHAR I\nENCODING 73\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 8 0 0\nBITMAP\nE0\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR J\nENCODING 74\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 10 0 -2\nBITMAP\n20\n20\n20\n20\n20\n20\n20\n20\n20\nC0\nENDCHAR\nSTARTCHAR K\nENCODING 75\nSWIDTH 610 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\n88\n90\nA0\nC0\nC0\nA0\n90\n88\nENDCHAR\nSTARTCHAR L\nENCODING 76\nSWIDTH 583 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\n80\n80\n80\n80\n80\n80\n80\nF8\nENDCHAR\nSTARTCHAR M\nENCODING 77\nSWIDTH 666 0\nDWIDTH 8 0\nBBX 7 8 0 0\nBITMAP\nC6\nC6\nAA\nAA\n92\n92\n82\n82\nENDCHAR\nSTARTCHAR N\nENCODING 78\nSWIDTH 833 0\nDWIDTH 7 0\nBBX 6 8 0 0\nBITMAP\n84\nC4\nA4\n94\n8C\n84\n84\n84\nENDCHAR\nSTARTCHAR O\nENCODING 79\nSWIDTH 583 0\nDWIDTH 8 0\nBBX 7 8 0 0\nBITMAP\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR P\nENCODING 80\nSWIDTH 666 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\nF0\n88\n88\n88\nF0\n80\n80\n80\nENDCHAR\nSTARTCHAR Q\nENCODING 81\nSWIDTH 666 0\nDWIDTH 8 0\nBBX 7 9 0 -1\nBITMAP\n38\n44\n82\n82\n82\n82\n44\n38\n04\nENDCHAR\nSTARTCHAR R\nENCODING 82\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 8 0 0\nBITMAP\nF0\n88\n88\n88\nF0\n90\n88\n84\nENDCHAR\nSTARTCHAR S\nENCODING 83\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\n78\n80\n80\n70\n08\n08\n08\nF0\nENDCHAR\nSTARTCHAR T\nENCODING 84\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 8 0 0\nBITMAP\nFE\n10\n10\n10\n10\n10\n10\n10\nENDCHAR\nSTARTCHAR U\nENCODING 85\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 8 0 0\nBITMAP\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR V\nENCODING 86\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 8 0 0\nBITMAP\n82\n82\n44\n44\n28\n28\n10\n10\nENDCHAR\nSTARTCHAR W\nENCODING 87\nSWIDTH 500 0\nDWIDTH 10 0\nBBX 9 8 0 0\nBITMAP\n8880\n8880\n8880\n5500\n5500\n5500\n2200\n2200\nENDCHAR\nSTARTCHAR X\nENCODING 88\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 8 0 0\nBITMAP\n84\n84\n48\n30\n48\n48\n84\n84\nENDCHAR\nSTARTCHAR Y\nENCODING 89\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 8 0 0\nBITMAP\n82\n44\n28\n10\n10\n10\n10\n10\nENDCHAR\nSTARTCHAR Z\nENCODING 90\nSWIDTH 416 0\nDWIDTH 8 0\nBBX 7 8 0 0\nBITMAP\nFE\n04\n08\n10\n20\n40\n80\nFE\nENDCHAR\nSTARTCHAR bracketleft\nENCODING 91\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 3 11 2 -1\nBITMAP\nE0\n80\n80\n80\n80\n80\n80\n80\n80\n80\nE0\nENDCHAR\nSTARTCHAR backslash\nENCODING 92\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 10 0 -1\nBITMAP\n80\n80\n40\n40\n20\n20\n10\n10\n08\n08\nENDCHAR\nSTARTCHAR bracketright\nENCODING 93\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 3 11 1 -1\nBITMAP\nE0\n20\n20\n20\n20\n20\n20\n20\n20\n20\nE0\nENDCHAR\nSTARTCHAR asciicircum\nENCODING 94\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 3 0 6\nBITMAP\n20\n50\n88\nENDCHAR\nSTARTCHAR underscore\nENCODING 95\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 1 0 -1\nBITMAP\nF8\nENDCHAR\nSTARTCHAR U_0060\nENCODING 96\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 2 3 1 7\nBITMAP\n80\n80\n40\nENDCHAR\nSTARTCHAR a\nENCODING 97\nSWIDTH 277 0\nDWIDTH 6 0\nBBX 5 6 0 0\nBITMAP\n70\n88\n78\n88\n88\n78\nENDCHAR\nSTARTCHAR b\nENCODING 98\nSWIDTH 416 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\n80\n80\nF0\n88\n88\n88\n88\nF0\nENDCHAR\nSTARTCHAR c\nENCODING 99\nSWIDTH 166 0\nDWIDTH 5 0\nBBX 4 6 0 0\nBITMAP\n70\n80\n80\n80\n80\n70\nENDCHAR\nSTARTCHAR d\nENCODING 100\nSWIDTH 833 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\n08\n08\n78\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR e\nENCODING 101\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 6 0 0\nBITMAP\n70\n88\nF8\n80\n80\n78\nENDCHAR\nSTARTCHAR f\nENCODING 102\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 8 0 0\nBITMAP\n60\n80\nE0\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR g\nENCODING 103\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 8 0 -2\nBITMAP\n78\n88\n88\n88\n88\n78\n08\n70\nENDCHAR\nSTARTCHAR h\nENCODING 104\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\n80\n80\nF0\n88\n88\n88\n88\n88\nENDCHAR\nSTARTCHAR i\nENCODING 105\nSWIDTH 333 0\nDWIDTH 2 0\nBBX 1 8 0 0\nBITMAP\n80\n00\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR j\nENCODING 106\nSWIDTH 520 0\nDWIDTH 3 0\nBBX 2 10 0 -2\nBITMAP\n40\n00\n40\n40\n40\n40\n40\n40\n40\nC0\nENDCHAR\nSTARTCHAR k\nENCODING 107\nSWIDTH 416 0\nDWIDTH 6 0\nBBX 5 8 0 0\nBITMAP\n80\n80\n90\nA0\nC0\nA0\n90\n88\nENDCHAR\nSTARTCHAR l\nENCODING 108\nSWIDTH 500 0\nDWIDTH 2 0\nBBX 1 8 0 0\nBITMAP\n80\n80\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR m\nENCODING 109\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 6 0 0\nBITMAP\nEC\n92\n92\n92\n92\n92\nENDCHAR\nSTARTCHAR n\nENCODING 110\nSWIDTH 666 0\nDWIDTH 6 0\nBBX 5 6 0 0\nBITMAP\nF0\n88\n88\n88\n88\n88\nENDCHAR\nSTARTCHAR o\nENCODING 111\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 6 0 0\nBITMAP\n70\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR p\nENCODING 112\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 8 0 -2\nBITMAP\nF0\n88\n88\n88\n88\nF0\n80\n80\nENDCHAR\nSTARTCHAR q\nENCODING 113\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 8 0 -2\nBITMAP\n78\n88\n88\n88\n88\n78\n08\n08\nENDCHAR\nSTARTCHAR r\nENCODING 114\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 6 0 0\nBITMAP\nE0\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR s\nENCODING 115\nSWIDTH 416 0\nDWIDTH 6 0\nBBX 5 6 0 0\nBITMAP\n70\n88\n60\n10\n88\n70\nENDCHAR\nSTARTCHAR t\nENCODING 116\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 8 0 0\nBITMAP\n80\n80\nE0\n80\n80\n80\n80\n60\nENDCHAR\nSTARTCHAR u\nENCODING 117\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 6 0 0\nBITMAP\n88\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR v\nENCODING 118\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 6 0 0\nBITMAP\n88\n88\n50\n50\n20\n20\nENDCHAR\nSTARTCHAR w\nENCODING 119\nSWIDTH 636 0\nDWIDTH 8 0\nBBX 7 6 0 0\nBITMAP\n92\n92\nAA\nAA\n44\n44\nENDCHAR\nSTARTCHAR x\nENCODING 120\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 6 0 0\nBITMAP\n88\n50\n20\n50\n88\n88\nENDCHAR\nSTARTCHAR y\nENCODING 121\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 8 0 -2\nBITMAP\n88\n88\n50\n50\n20\n20\n40\n40\nENDCHAR\nSTARTCHAR z\nENCODING 122\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 6 0 0\nBITMAP\nF8\n08\n10\n20\n40\nF8\nENDCHAR\nSTARTCHAR U_007B\nENCODING 123\nSWIDTH 416 0\nDWIDTH 4 0\nBBX 3 11 0 -1\nBITMAP\n00\n20\n40\n40\n40\n80\n40\n40\n40\n40\n20\nENDCHAR\nSTARTCHAR bar\nENCODING 124\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 1 11 2 -1\nBITMAP\n80\n80\n80\n80\n80\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_007D\nENCODING 125\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 11 0 -1\nBITMAP\n00\n80\n40\n40\n40\n20\n40\n40\n40\n40\n80\nENDCHAR\nSTARTCHAR U_007E\nENCODING 126\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 2 0 3\nBITMAP\n64\n98\nENDCHAR\nSTARTCHAR nounicode-3-1-80\nENCODING 128\nSWIDTH 636 0\nDWIDTH 6 0\nBBX 5 9 0 0\nBITMAP\n30\n48\n40\nF0\n40\nF0\n40\n48\n30\nENDCHAR\nSTARTCHAR nonbreakingspace\nENCODING 160\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 1 1 0 0\nBITMAP\n00\nENDCHAR\nSTARTCHAR U_00A1\nENCODING 161\nSWIDTH 500 0\nDWIDTH 2 0\nBBX 1 9 0 0\nBITMAP\n00\n80\n00\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_00A2\nENCODING 162\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 9 0 0\nBITMAP\n00\n20\n78\nA0\nA0\nA0\nA0\n78\n20\nENDCHAR\nSTARTCHAR U_00A3\nENCODING 163\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 9 0 0\nBITMAP\n00\n38\n40\n40\n40\nF8\n20\n40\nF8\nENDCHAR\nSTARTCHAR U_00A4\nENCODING 164\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 1\nBITMAP\n00\n00\n00\n00\n00\n00\n84\n78\n48\n48\n78\n84\nENDCHAR\nSTARTCHAR U_00A5\nENCODING 165\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 7 9 0 0\nBITMAP\n82\n44\n28\n10\nFE\n10\nFE\n10\n10\nENDCHAR\nSTARTCHAR U_00A6\nENCODING 166\nSWIDTH 500 0\nDWIDTH 2 0\nBBX 1 10 0 -1\nBITMAP\n80\n80\n80\n80\n00\n00\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_00A7\nENCODING 167\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 11 0 -2\nBITMAP\n00\n78\n80\n80\n70\n88\n88\n70\n08\n08\nF0\nENDCHAR\nSTARTCHAR U_00A8\nENCODING 168\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 1 0 8\nBITMAP\nA0\nENDCHAR\nSTARTCHAR U_00A9\nENCODING 169\nSWIDTH 750 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n00\n00\n3C\n42\n99\nA1\nA1\n99\n42\n3C\nENDCHAR\nSTARTCHAR U_00AA\nENCODING 170\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 6 0 3\nBITMAP\n00\n60\n10\n70\n90\n70\nENDCHAR\nSTARTCHAR U_00AB\nENCODING 171\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 5 0 1\nBITMAP\n28\n50\nA0\n50\n28\nENDCHAR\nSTARTCHAR U_00AC\nENCODING 172\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 3 0 0\nBITMAP\nF8\n08\n08\nENDCHAR\nSTARTCHAR U_00AD\nENCODING 173\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 1 0 3\nBITMAP\nE0\nENDCHAR\nSTARTCHAR U_00AE\nENCODING 174\nSWIDTH 750 0\nDWIDTH 9 0\nBBX 8 10 0 0\nBITMAP\n00\n00\n3C\n42\nB9\nA5\nB9\nA5\n42\n3C\nENDCHAR\nSTARTCHAR U_00AF\nENCODING 175\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 1 0 9\nBITMAP\nF8\nENDCHAR\nSTARTCHAR U_00B0\nENCODING 176\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 4 0 4\nBITMAP\n60\n90\n90\n60\nENDCHAR\nSTARTCHAR U_00B1\nENCODING 177\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 7 0 1\nBITMAP\n20\n20\nF8\n20\n20\n00\nF8\nENDCHAR\nSTARTCHAR U_00B2\nENCODING 178\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 6 0 3\nBITMAP\n00\nC0\n20\n20\n40\nE0\nENDCHAR\nSTARTCHAR U_00B3\nENCODING 179\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 6 0 3\nBITMAP\n00\nC0\n20\n40\n20\nC0\nENDCHAR\nSTARTCHAR U_00B4\nENCODING 180\nSWIDTH 500 0\nDWIDTH 3 0\nBBX 2 2 0 8\nBITMAP\n40\n80\nENDCHAR\nSTARTCHAR U_00B5\nENCODING 181\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n00\n00\n88\n88\n88\n88\n98\nE8\n80\n80\nENDCHAR\nSTARTCHAR U_00B6\nENCODING 182\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n78\nE8\nE8\nE8\n68\n28\n28\n28\n28\n28\nENDCHAR\nSTARTCHAR U_00B7\nENCODING 183\nSWIDTH 500 0\nDWIDTH 2 0\nBBX 1 1 0 5\nBITMAP\n80\nENDCHAR\nSTARTCHAR U_00B8\nENCODING 184\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 2 0 -2\nBITMAP\n20\nC0\nENDCHAR\nSTARTCHAR U_00B9\nENCODING 185\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 6 0 3\nBITMAP\n00\n40\nC0\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_00BA\nENCODING 186\nSWIDTH 1000 0\nDWIDTH 5 0\nBBX 4 6 0 3\nBITMAP\n00\n60\n90\n90\n60\n00\nENDCHAR\nSTARTCHAR U_00BB\nENCODING 187\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 5 0 1\nBITMAP\nA0\n50\n28\n50\nA0\nENDCHAR\nSTARTCHAR U_00BC\nENCODING 188\nSWIDTH 500 0\nDWIDTH 9 0\nBBX 8 9 0 0\nBITMAP\n00\n44\nC8\n48\n52\n56\n2A\n2F\n42\nENDCHAR\nSTARTCHAR U_00BD\nENCODING 189\nSWIDTH 500 0\nDWIDTH 9 0\nBBX 8 9 0 0\nBITMAP\n00\n44\nC8\n48\n56\n51\n22\n24\n47\nENDCHAR\nSTARTCHAR U_00BE\nENCODING 190\nSWIDTH 500 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n00\n00\nC4\n24\n48\n2A\nD6\n2A\n2F\n42\nENDCHAR\nSTARTCHAR U_00BF\nENCODING 191\nSWIDTH 1000 0\nDWIDTH 5 0\nBBX 4 10 0 0\nBITMAP\n00\n00\n20\n00\n20\n20\n40\n80\n80\n70\nENDCHAR\nSTARTCHAR U_00C0\nENCODING 192\nSWIDTH 1000 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n20\n10\n00\n10\n10\n28\n28\n44\n7C\n82\n82\nENDCHAR\nSTARTCHAR U_00C1\nENCODING 193\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n08\n10\n00\n10\n10\n28\n28\n44\n7C\n82\n82\nENDCHAR\nSTARTCHAR U_00C2\nENCODING 194\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n10\n28\n00\n10\n10\n28\n28\n44\n7C\n82\n82\nENDCHAR\nSTARTCHAR U_00C3\nENCODING 195\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n34\n48\n00\n10\n10\n28\n28\n44\n7C\n82\n82\nENDCHAR\nSTARTCHAR U_00C4\nENCODING 196\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n28\n00\n10\n10\n28\n28\n44\n7C\n82\n82\nENDCHAR\nSTARTCHAR U_00C5\nENCODING 197\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n10\n28\n10\n00\n10\n10\n28\n28\n44\n7C\n82\n82\nENDCHAR\nSTARTCHAR U_00C6\nENCODING 198\nSWIDTH 500 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n00\n00\n1F\n28\n28\n4F\n78\n88\n88\n8F\nENDCHAR\nSTARTCHAR U_00C7\nENCODING 199\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 -2\nBITMAP\n00\n00\n3C\n40\n80\n80\n80\n80\n40\n3C\n08\n70\nENDCHAR\nSTARTCHAR U_00C8\nENCODING 200\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n40\n20\n00\nF8\n80\n80\nF8\n80\n80\n80\nF8\nENDCHAR\nSTARTCHAR U_00C9\nENCODING 201\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n10\n20\n00\nF8\n80\n80\nF8\n80\n80\n80\nF8\nENDCHAR\nSTARTCHAR U_00CA\nENCODING 202\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n20\n50\n00\nF8\n80\n80\nF8\n80\n80\n80\nF8\nENDCHAR\nSTARTCHAR U_00CB\nENCODING 203\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n50\n00\nF8\n80\n80\n80\nF8\n80\n80\n80\nF8\nENDCHAR\nSTARTCHAR U_00CC\nENCODING 204\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n80\n40\n00\nE0\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_00CD\nENCODING 205\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n20\n40\n00\nE0\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_00CE\nENCODING 206\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n40\nA0\n00\nE0\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_00CF\nENCODING 207\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n00\nA0\n00\nE0\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_00D0\nENCODING 208\nSWIDTH 500 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n00\n00\n7C\n42\n41\nF1\n41\n41\n42\n7C\nENDCHAR\nSTARTCHAR U_00D1\nENCODING 209\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n64\n98\n00\nC4\nC4\nA4\nA4\n94\n94\n8C\n8C\nENDCHAR\nSTARTCHAR U_00D2\nENCODING 210\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n20\n10\n00\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_00D3\nENCODING 211\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n08\n10\n00\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_00D4\nENCODING 212\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n10\n28\n00\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_00D5\nENCODING 213\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n34\n48\n00\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_00D6\nENCODING 214\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n28\n00\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_00D7\nENCODING 215\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 1\nBITMAP\n00\n00\n00\n00\n00\n00\n00\n88\n50\n20\n50\n88\nENDCHAR\nSTARTCHAR U_00D8\nENCODING 216\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n00\n00\n34\n48\n94\n94\nA4\nA4\n48\nB0\nENDCHAR\nSTARTCHAR U_00D9\nENCODING 217\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n20\n10\n00\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_00DA\nENCODING 218\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n10\n20\n00\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_00DB\nENCODING 219\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n30\n48\n00\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_00DC\nENCODING 220\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n48\n00\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_00DD\nENCODING 221\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n10\n20\n00\n88\n88\n50\n50\n20\n20\n20\n20\nENDCHAR\nSTARTCHAR U_00DE\nENCODING 222\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n80\n80\nF0\n88\n88\nF0\n80\n80\nENDCHAR\nSTARTCHAR U_00DF\nENCODING 223\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n60\n90\n90\nA0\n90\n88\n88\n90\nENDCHAR\nSTARTCHAR U_00E0\nENCODING 224\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n40\n20\n00\n70\n08\n78\n88\n88\n78\nENDCHAR\nSTARTCHAR U_00E1\nENCODING 225\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n10\n20\n00\n70\n08\n78\n88\n88\n78\nENDCHAR\nSTARTCHAR U_00E2\nENCODING 226\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n20\n50\n00\n70\n08\n78\n88\n88\n78\nENDCHAR\nSTARTCHAR U_00E3\nENCODING 227\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n68\n90\n00\n70\n08\n78\n88\n88\n78\nENDCHAR\nSTARTCHAR U_00E4\nENCODING 228\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n50\n00\n70\n08\n78\n88\n88\n78\nENDCHAR\nSTARTCHAR U_00E5\nENCODING 229\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n20\n50\n20\n00\n70\n08\n78\n88\n88\n78\nENDCHAR\nSTARTCHAR U_00E6\nENCODING 230\nSWIDTH 800 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n00\n00\n00\n00\nEC\n12\n7C\n90\n90\n6E\nENDCHAR\nSTARTCHAR U_00E7\nENCODING 231\nSWIDTH 277 0\nDWIDTH 5 0\nBBX 4 12 0 -2\nBITMAP\n00\n00\n00\n00\n70\n80\n80\n80\n80\n70\n20\nC0\nENDCHAR\nSTARTCHAR U_00E8\nENCODING 232\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n40\n20\n00\n70\n88\nF8\n80\n80\n78\nENDCHAR\nSTARTCHAR U_00E9\nENCODING 233\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n10\n20\n00\n70\n88\nF8\n80\n80\n78\nENDCHAR\nSTARTCHAR U_00EA\nENCODING 234\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n20\n50\n00\n70\n88\nF8\n80\n80\n78\nENDCHAR\nSTARTCHAR U_00EB\nENCODING 235\nSWIDTH 277 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n50\n00\n70\n88\nF8\n80\n80\n78\nENDCHAR\nSTARTCHAR U_00EC\nENCODING 236\nSWIDTH 1000 0\nDWIDTH 3 0\nBBX 2 10 0 0\nBITMAP\n00\n80\n40\n00\n40\n40\n40\n40\n40\n40\nENDCHAR\nSTARTCHAR U_00ED\nENCODING 237\nSWIDTH 1000 0\nDWIDTH 3 0\nBBX 2 10 0 0\nBITMAP\n00\n40\n80\n00\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_00EE\nENCODING 238\nSWIDTH 277 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n00\n00\n40\nA0\n00\n40\n40\n40\n40\n40\n40\nENDCHAR\nSTARTCHAR U_00EF\nENCODING 239\nSWIDTH 277 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n00\n00\n00\nA0\n00\n40\n40\n40\n40\n40\n40\nENDCHAR\nSTARTCHAR U_00F0\nENCODING 240\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n50\n20\n50\n08\n78\n88\n88\n70\nENDCHAR\nSTARTCHAR U_00F1\nENCODING 241\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n68\n90\n00\nF0\n88\n88\n88\n88\n88\nENDCHAR\nSTARTCHAR U_00F2\nENCODING 242\nSWIDTH 1000 0\nDWIDTH 5 0\nBBX 4 10 0 0\nBITMAP\n00\n40\n20\n00\n70\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_00F3\nENCODING 243\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n10\n20\n00\n70\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_00F4\nENCODING 244\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n20\n50\n00\n70\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_00F5\nENCODING 245\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n64\n98\n00\n78\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_00F6\nENCODING 246\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n50\n00\n70\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_00F7\nENCODING 247\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 7 0 1\nBITMAP\n00\n00\n20\n00\nF8\n00\n20\nENDCHAR\nSTARTCHAR U_00F8\nENCODING 248\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n08\n70\n98\nA8\nA8\nC8\n70\n80\nENDCHAR\nSTARTCHAR U_00F9\nENCODING 249\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n40\n20\n00\n88\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_00FA\nENCODING 250\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n10\n20\n00\n88\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_00FB\nENCODING 251\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n20\n50\n00\n88\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_00FC\nENCODING 252\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 9 0 0\nBITMAP\n00\n50\n00\n88\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_00FD\nENCODING 253\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n10\n20\n00\n88\n88\n50\n50\n20\n20\n40\n40\nENDCHAR\nSTARTCHAR U_00FE\nENCODING 254\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n80\n80\nF0\n88\n88\n88\n88\nF0\n80\n80\nENDCHAR\nSTARTCHAR U_00FF\nENCODING 255\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n50\n00\n88\n88\n50\n50\n20\n20\n40\n40\nENDCHAR\nSTARTCHAR U_0100\nENCODING 256\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n7C\n00\n10\n10\n28\n28\n44\n7C\n82\n82\nENDCHAR\nSTARTCHAR U_0101\nENCODING 257\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n00\n70\n00\n70\n08\n78\n88\n88\n78\nENDCHAR\nSTARTCHAR U_0102\nENCODING 258\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n44\n38\n00\n10\n10\n28\n28\n44\n7C\n82\n82\nENDCHAR\nSTARTCHAR U_0103\nENCODING 259\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n88\n70\n00\n70\n08\n78\n88\n88\n78\nENDCHAR\nSTARTCHAR U_0104\nENCODING 260\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 8 12 0 -2\nBITMAP\n00\n00\n10\n10\n28\n28\n44\n7E\n82\n82\n04\n03\nENDCHAR\nSTARTCHAR U_0105\nENCODING 261\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 6 12 0 -2\nBITMAP\n00\n00\n00\n00\n70\n08\n78\n88\n88\n78\n08\n0C\nENDCHAR\nSTARTCHAR U_0106\nENCODING 262\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n08\n10\n00\n3C\n40\n80\n80\n80\n80\n40\n3C\nENDCHAR\nSTARTCHAR U_0107\nENCODING 263\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 12 0 0\nBITMAP\n00\n00\n00\n10\n20\n00\n70\n80\n80\n80\n80\n70\nENDCHAR\nSTARTCHAR U_0108\nENCODING 264\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n10\n28\n00\n3C\n40\n80\n80\n80\n80\n40\n3C\nENDCHAR\nSTARTCHAR U_0109\nENCODING 265\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 12 0 0\nBITMAP\n00\n00\n00\n20\n50\n00\n70\n80\n80\n80\n80\n70\nENDCHAR\nSTARTCHAR U_010A\nENCODING 266\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n10\n00\n3C\n40\n80\n80\n80\n80\n40\n3C\nENDCHAR\nSTARTCHAR U_010B\nENCODING 267\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 12 0 0\nBITMAP\n00\n00\n00\n00\n20\n00\n70\n80\n80\n80\n80\n70\nENDCHAR\nSTARTCHAR U_010C\nENCODING 268\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n28\n10\n00\n3C\n40\n80\n80\n80\n80\n40\n3C\nENDCHAR\nSTARTCHAR U_010D\nENCODING 269\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 12 0 0\nBITMAP\n00\n00\n00\n50\n20\n00\n70\n80\n80\n80\n80\n70\nENDCHAR\nSTARTCHAR U_010E\nENCODING 270\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n48\n30\n00\nF8\n84\n82\n82\n82\n82\n84\nF8\nENDCHAR\nSTARTCHAR U_010F\nENCODING 271\nSWIDTH 500 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n00\n00\n09\n0A\n78\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_0110\nENCODING 272\nSWIDTH 500 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n00\n00\n7C\n42\n41\nF1\n41\n41\n42\n7C\nENDCHAR\nSTARTCHAR U_0111\nENCODING 273\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n00\n00\n1C\n08\n78\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_0112\nENCODING 274\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n70\n00\nF8\n80\n80\nF8\n80\n80\n80\nF8\nENDCHAR\nSTARTCHAR U_0113\nENCODING 275\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n00\n70\n00\n70\n88\nF8\n80\n80\n78\nENDCHAR\nSTARTCHAR U_0114\nENCODING 276\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n88\n70\n00\nF8\n80\n80\nF8\n80\n80\n80\nF8\nENDCHAR\nSTARTCHAR U_0115\nENCODING 277\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n88\n70\n00\n70\n88\nF8\n80\n80\n78\nENDCHAR\nSTARTCHAR U_0116\nENCODING 278\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n20\n00\nF8\n80\n80\nF8\n80\n80\n80\nF8\nENDCHAR\nSTARTCHAR U_0117\nENCODING 279\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n20\n00\n70\n88\nF8\n80\n80\n78\nENDCHAR\nSTARTCHAR U_0118\nENCODING 280\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\nF8\n80\n80\nF8\n80\n80\n80\nF8\n20\n18\nENDCHAR\nSTARTCHAR U_0119\nENCODING 281\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n00\n00\n70\n88\nF8\n80\n80\n78\n20\n18\nENDCHAR\nSTARTCHAR U_011A\nENCODING 282\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n50\n20\n00\nF8\n80\n80\nF8\n80\n80\n80\nF8\nENDCHAR\nSTARTCHAR U_011B\nENCODING 283\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n50\n20\n00\n70\n88\nF8\n80\n80\n78\nENDCHAR\nSTARTCHAR U_011C\nENCODING 284\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n10\n28\n00\n38\n44\n80\n80\n8C\n84\n44\n3C\nENDCHAR\nSTARTCHAR U_011D\nENCODING 285\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n20\n50\n00\n78\n88\n88\n88\n88\n78\n08\n70\nENDCHAR\nSTARTCHAR U_011E\nENCODING 286\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n44\n38\n00\n38\n44\n80\n80\n8C\n84\n44\n3C\nENDCHAR\nSTARTCHAR U_011F\nENCODING 287\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n88\n70\n00\n78\n88\n88\n88\n88\n78\n08\n70\nENDCHAR\nSTARTCHAR U_0120\nENCODING 288\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n10\n00\n38\n44\n80\n80\n8C\n84\n44\n3C\nENDCHAR\nSTARTCHAR U_0121\nENCODING 289\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n20\n00\n78\n88\n88\n88\n88\n78\n08\n70\nENDCHAR\nSTARTCHAR U_0122\nENCODING 290\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 -2\nBITMAP\n00\n00\n38\n44\n80\n80\n8C\n84\n44\n3C\n10\n60\nENDCHAR\nSTARTCHAR U_0123\nENCODING 291\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n10\n20\n00\n78\n88\n88\n88\n88\n78\n08\n70\nENDCHAR\nSTARTCHAR U_0124\nENCODING 292\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n30\n48\n00\n84\n84\n84\nFC\n84\n84\n84\n84\nENDCHAR\nSTARTCHAR U_0125\nENCODING 293\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n20\n50\n00\n80\n80\nF0\n88\n88\n88\n88\n88\nENDCHAR\nSTARTCHAR U_0126\nENCODING 294\nSWIDTH 500 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n00\n00\n42\nFF\n42\n7E\n42\n42\n42\n42\nENDCHAR\nSTARTCHAR U_0127\nENCODING 295\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n00\n00\nE0\n40\n78\n44\n44\n44\n44\n44\nENDCHAR\nSTARTCHAR U_0128\nENCODING 296\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 4 12 0 0\nBITMAP\n00\n50\nA0\n00\nE0\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_0129\nENCODING 297\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 12 0 0\nBITMAP\n00\n00\n00\n50\nA0\n00\n40\n40\n40\n40\n40\n40\nENDCHAR\nSTARTCHAR U_012A\nENCODING 298\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n00\nE0\n00\nE0\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_012B\nENCODING 299\nSWIDTH 1000 0\nDWIDTH 4 0\nBBX 3 10 0 0\nBITMAP\n00\n00\nE0\n00\n40\n40\n40\n40\n40\n40\nENDCHAR\nSTARTCHAR U_012C\nENCODING 300\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\nA0\nE0\n00\nE0\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_012D\nENCODING 301\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n00\n00\nA0\nE0\n00\n40\n40\n40\n40\n40\n40\nENDCHAR\nSTARTCHAR U_012E\nENCODING 302\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 12 0 -2\nBITMAP\n00\n00\nE0\n40\n40\n40\n40\n40\n40\nE0\n40\n60\nENDCHAR\nSTARTCHAR U_012F\nENCODING 303\nSWIDTH 500 0\nDWIDTH 2 0\nBBX 2 12 0 -2\nBITMAP\n00\n00\n80\n00\n80\n80\n80\n80\n80\n80\n80\n40\nENDCHAR\nSTARTCHAR U_0130\nENCODING 304\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n00\n40\n00\nE0\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_0131\nENCODING 305\nSWIDTH 500 0\nDWIDTH 2 0\nBBX 1 12 0 0\nBITMAP\n00\n00\n00\n00\n00\n00\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_0132\nENCODING 306\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n00\n00\nEE\n42\n42\n42\n42\n42\n42\nEC\nENDCHAR\nSTARTCHAR U_0133\nENCODING 307\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 12 0 -2\nBITMAP\n00\n00\n90\n00\n90\n90\n90\n90\n90\n90\n10\n20\nENDCHAR\nSTARTCHAR U_0134\nENCODING 308\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 12 0 0\nBITMAP\n00\n20\n50\n00\n30\n10\n10\n10\n10\n10\n10\nE0\nENDCHAR\nSTARTCHAR U_0135\nENCODING 309\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 12 0 -2\nBITMAP\n00\n40\nA0\n00\n40\n40\n40\n40\n40\n40\n40\n80\nENDCHAR\nSTARTCHAR U_0136\nENCODING 310\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n88\n90\nA0\nC0\nC0\nA0\n90\n88\n20\nC0\nENDCHAR\nSTARTCHAR U_0137\nENCODING 311\nSWIDTH 557 0\nDWIDTH 5 0\nBBX 4 12 0 -2\nBITMAP\n00\n00\n80\n80\n90\nA0\nC0\nC0\nA0\n90\n20\nC0\nENDCHAR\nSTARTCHAR U_0138\nENCODING 312\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n88\n90\nA0\nC0\nC0\nA0\n90\n88\nENDCHAR\nSTARTCHAR U_0139\nENCODING 313\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n20\n40\n00\n80\n80\n80\n80\n80\n80\n80\nF8\nENDCHAR\nSTARTCHAR U_013A\nENCODING 314\nSWIDTH 557 0\nDWIDTH 2 0\nBBX 2 12 0 0\nBITMAP\n00\n40\n80\n00\n80\n80\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_013B\nENCODING 315\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n80\n80\n80\n80\n80\n80\n80\nF8\n20\nC0\nENDCHAR\nSTARTCHAR U_013C\nENCODING 316\nSWIDTH 557 0\nDWIDTH 4 0\nBBX 3 12 0 -2\nBITMAP\n00\n00\n40\n40\n40\n40\n40\n40\n40\n40\n20\nC0\nENDCHAR\nSTARTCHAR U_013D\nENCODING 317\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n88\n90\n80\n80\n80\n80\n80\nF8\nENDCHAR\nSTARTCHAR U_013E\nENCODING 318\nSWIDTH 557 0\nDWIDTH 5 0\nBBX 4 12 0 0\nBITMAP\n00\n00\n00\n00\n90\nA0\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_013F\nENCODING 319\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n80\n80\n80\n80\n80\n90\n80\nF8\nENDCHAR\nSTARTCHAR U_0140\nENCODING 320\nSWIDTH 557 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n00\n00\n00\n80\n80\n80\nA0\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_0141\nENCODING 321\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n40\n40\n50\n60\n40\nC0\n40\n78\nENDCHAR\nSTARTCHAR U_0142\nENCODING 322\nSWIDTH 557 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n00\n00\n00\n40\n40\n40\n60\nC0\n40\n40\n40\nENDCHAR\nSTARTCHAR U_0143\nENCODING 323\nSWIDTH 557 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n10\n20\n00\nC4\nC4\nA4\nA4\n94\n94\n8C\n8C\nENDCHAR\nSTARTCHAR U_0144\nENCODING 324\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 11 0 0\nBITMAP\n00\n00\n10\n20\n00\nF0\n88\n88\n88\n88\n88\nENDCHAR\nSTARTCHAR U_0145\nENCODING 325\nSWIDTH 557 0\nDWIDTH 7 0\nBBX 6 12 0 -2\nBITMAP\n00\n00\nC4\nC4\nA4\nA4\n94\n94\n8C\n8C\n20\nC0\nENDCHAR\nSTARTCHAR U_0146\nENCODING 326\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n00\n00\nF0\n88\n88\n88\n88\n88\n20\nC0\nENDCHAR\nSTARTCHAR U_0147\nENCODING 327\nSWIDTH 557 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n48\n30\n00\nC4\nC4\nA4\nA4\n94\n94\n8C\n8C\nENDCHAR\nSTARTCHAR U_0148\nENCODING 328\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 11 0 0\nBITMAP\n00\n00\n50\n20\n00\nF0\n88\n88\n88\n88\n88\nENDCHAR\nSTARTCHAR U_0149\nENCODING 329\nSWIDTH 557 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n00\n40\n80\n00\n78\n44\n44\n44\n44\n44\nENDCHAR\nSTARTCHAR U_014A\nENCODING 330\nSWIDTH 557 0\nDWIDTH 7 0\nBBX 6 12 0 -2\nBITMAP\n00\n00\nC4\nC4\nA4\nA4\n94\n94\n8C\n8C\n04\n38\nENDCHAR\nSTARTCHAR U_014B\nENCODING 331\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n00\n00\nB0\nC8\n88\n88\n88\n88\n08\n30\nENDCHAR\nSTARTCHAR U_014C\nENCODING 332\nSWIDTH 557 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n38\n00\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_014D\nENCODING 333\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n00\n70\n00\n70\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_014E\nENCODING 334\nSWIDTH 557 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n44\n38\n00\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_014F\nENCODING 335\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n88\n70\n00\n70\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_0150\nENCODING 336\nSWIDTH 557 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n12\n24\n00\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_0151\nENCODING 337\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n28\n50\n00\n70\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_0152\nENCODING 338\nSWIDTH 557 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n00\n00\n3F\n48\n88\n8F\n88\n88\n48\n3F\nENDCHAR\nSTARTCHAR U_0153\nENCODING 339\nSWIDTH 557 0\nDWIDTH 10 0\nBBX 9 12 0 0\nBITMAP\n0000\n0000\n0000\n0000\n0000\n0000\n7700\n8880\n8F80\n8800\n8800\n7780\nENDCHAR\nSTARTCHAR U_0154\nENCODING 340\nSWIDTH 557 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n10\n20\n00\nF0\n88\n88\n88\nF0\n90\n88\n84\nENDCHAR\nSTARTCHAR U_0155\nENCODING 341\nSWIDTH 557 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n00\n00\n20\n40\n00\nE0\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_0156\nENCODING 342\nSWIDTH 557 0\nDWIDTH 7 0\nBBX 6 12 0 -2\nBITMAP\n00\n00\nF0\n88\n88\n88\nF0\n90\n88\n84\n10\n60\nENDCHAR\nSTARTCHAR U_0157\nENCODING 343\nSWIDTH 557 0\nDWIDTH 5 0\nBBX 4 12 0 -2\nBITMAP\n00\n00\n00\n00\n70\n40\n40\n40\n40\n40\n20\nC0\nENDCHAR\nSTARTCHAR U_0158\nENCODING 344\nSWIDTH 557 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n50\n20\n00\nF0\n88\n88\n88\nF0\n90\n88\n84\nENDCHAR\nSTARTCHAR U_0159\nENCODING 345\nSWIDTH 557 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n00\n00\nA0\n40\n00\nE0\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_015A\nENCODING 346\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n10\n20\n00\n78\n80\n80\n70\n08\n08\n08\nF0\nENDCHAR\nSTARTCHAR U_015B\nENCODING 347\nSWIDTH 416 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n10\n20\n00\n70\n88\n60\n10\n88\n70\nENDCHAR\nSTARTCHAR U_015C\nENCODING 348\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n20\n50\n00\n78\n80\n80\n70\n08\n08\n08\nF0\nENDCHAR\nSTARTCHAR U_015D\nENCODING 349\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n20\n50\n00\n70\n88\n60\n10\n88\n70\nENDCHAR\nSTARTCHAR U_015E\nENCODING 350\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n78\n80\n80\n70\n08\n08\n08\nF0\n20\nC0\nENDCHAR\nSTARTCHAR U_015F\nENCODING 351\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n00\n00\n70\n88\n60\n10\n88\n70\n10\n60\nENDCHAR\nSTARTCHAR U_0160\nENCODING 352\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n50\n20\n00\n78\n80\n80\n70\n08\n08\n08\nF0\nENDCHAR\nSTARTCHAR U_0161\nENCODING 353\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n50\n20\n00\n70\n88\n60\n10\n88\n70\nENDCHAR\nSTARTCHAR U_0162\nENCODING 354\nSWIDTH 557 0\nDWIDTH 8 0\nBBX 7 12 0 -2\nBITMAP\n00\n00\nFE\n10\n10\n10\n10\n10\n10\n10\n08\n30\nENDCHAR\nSTARTCHAR U_0163\nENCODING 355\nSWIDTH 557 0\nDWIDTH 5 0\nBBX 4 12 0 -2\nBITMAP\n00\n00\n40\n40\nF0\n40\n40\n40\n40\n30\n20\nC0\nENDCHAR\nSTARTCHAR U_0164\nENCODING 356\nSWIDTH 557 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n28\n10\n00\nFE\n10\n10\n10\n10\n10\n10\n10\nENDCHAR\nSTARTCHAR U_0165\nENCODING 357\nSWIDTH 557 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n08\n50\n40\nF0\n40\n40\n40\n40\n30\nENDCHAR\nSTARTCHAR U_0166\nENCODING 358\nSWIDTH 557 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n00\n00\nFE\n10\n10\n7C\n10\n10\n10\n10\nENDCHAR\nSTARTCHAR U_0167\nENCODING 359\nSWIDTH 557 0\nDWIDTH 5 0\nBBX 4 12 0 0\nBITMAP\n00\n00\n00\n00\n40\n40\nF0\n40\nE0\n40\n40\n30\nENDCHAR\nSTARTCHAR U_0168\nENCODING 360\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n64\n98\n00\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_0169\nENCODING 361\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n68\n90\n00\n88\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_016A\nENCODING 362\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n78\n00\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_016B\nENCODING 363\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n00\n70\n00\n88\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_016C\nENCODING 364\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n84\n78\n00\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_016D\nENCODING 365\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n88\n70\n00\n88\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_016E\nENCODING 366\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n30\n48\n48\n30\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_016F\nENCODING 367\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n20\n50\n20\n88\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_0170\nENCODING 368\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n24\n48\n00\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_0171\nENCODING 369\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n48\n90\n00\n88\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_0172\nENCODING 370\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 -2\nBITMAP\n00\n00\n84\n84\n84\n84\n84\n84\n84\n78\n10\n0C\nENDCHAR\nSTARTCHAR U_0173\nENCODING 371\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n00\n00\n88\n88\n88\n88\n88\n78\n10\n18\nENDCHAR\nSTARTCHAR U_0174\nENCODING 372\nSWIDTH 583 0\nDWIDTH 10 0\nBBX 9 12 0 0\nBITMAP\n0800\n1400\n2200\n0000\n8880\n8880\n8880\n5500\n5500\n5500\n2200\n2200\nENDCHAR\nSTARTCHAR U_0175\nENCODING 373\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n10\n28\n44\n00\n92\n92\nAA\nAA\n44\n44\nENDCHAR\nSTARTCHAR U_0176\nENCODING 374\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n20\n50\n00\n88\n88\n50\n50\n20\n20\n20\n20\nENDCHAR\nSTARTCHAR U_0177\nENCODING 375\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n20\n50\n00\n88\n88\n50\n50\n20\n20\n40\n40\nENDCHAR\nSTARTCHAR U_0178\nENCODING 376\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n50\n00\n88\n88\n50\n50\n20\n20\n20\n20\nENDCHAR\nSTARTCHAR U_0179\nENCODING 377\nSWIDTH 1000 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n08\n10\n00\nFE\n04\n08\n10\n20\n40\n80\nFE\nENDCHAR\nSTARTCHAR U_017A\nENCODING 378\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n10\n20\n00\nF8\n08\n10\n20\n40\nF8\nENDCHAR\nSTARTCHAR U_017B\nENCODING 379\nSWIDTH 1000 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n10\n00\nFE\n04\n08\n10\n20\n40\n80\nFE\nENDCHAR\nSTARTCHAR U_017C\nENCODING 380\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n20\n00\nF8\n08\n10\n20\n40\nF8\nENDCHAR\nSTARTCHAR U_017D\nENCODING 381\nSWIDTH 1000 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n24\n18\n00\nFE\n04\n08\n10\n20\n40\n80\nFE\nENDCHAR\nSTARTCHAR U_017E\nENCODING 382\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n50\n20\n00\nF8\n08\n10\n20\n40\nF8\nENDCHAR\nSTARTCHAR U_017F\nENCODING 383\nSWIDTH 416 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n00\n00\n60\n80\n80\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_0180\nENCODING 384\nSWIDTH 416 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n00\n00\nE0\n40\n78\n44\n44\n44\n44\n78\nENDCHAR\nSTARTCHAR U_0181\nENCODING 385\nSWIDTH 416 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n00\n00\n7E\nA1\n21\n3E\n21\n21\n21\n3E\nENDCHAR\nSTARTCHAR U_0182\nENCODING 386\nSWIDTH 416 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n00\n00\nFC\n84\n80\nF8\n84\n84\n84\nF8\nENDCHAR\nSTARTCHAR U_0183\nENCODING 387\nSWIDTH 416 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\nF8\n88\n80\nF0\n88\n88\n88\nF0\nENDCHAR\nSTARTCHAR U_0184\nENCODING 388\nSWIDTH 416 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n00\n00\n40\nC0\n40\n7C\n42\n42\n42\nFC\nENDCHAR\nSTARTCHAR U_0185\nENCODING 389\nSWIDTH 416 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n00\n00\n40\nC0\n78\n44\n44\n44\n44\nF8\nENDCHAR\nSTARTCHAR U_0186\nENCODING 390\nSWIDTH 416 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n00\n00\nF0\n08\n04\n04\n04\n04\n08\nF0\nENDCHAR\nSTARTCHAR U_0187\nENCODING 391\nSWIDTH 416 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n02\n05\n3C\n40\n80\n80\n80\n80\n40\n3C\nENDCHAR\nSTARTCHAR U_0188\nENCODING 392\nSWIDTH 416 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n00\n00\n08\n14\n70\n80\n80\n80\n80\n70\nENDCHAR\nSTARTCHAR U_0189\nENCODING 393\nSWIDTH 583 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n00\n00\n7C\n42\n41\nF1\n41\n41\n42\n7C\nENDCHAR\nSTARTCHAR U_018A\nENCODING 394\nSWIDTH 583 0\nDWIDTH 10 0\nBBX 9 12 0 0\nBITMAP\n0000\n0000\n0000\n0000\n7E00\nA100\nA080\n2080\n2080\n2080\n2100\n3E00\nENDCHAR\nSTARTCHAR U_018B\nENCODING 395\nSWIDTH 583 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n00\n00\nFC\n84\n04\n7C\n84\n84\n84\n7C\nENDCHAR\nSTARTCHAR U_018C\nENCODING 396\nSWIDTH 583 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\nF8\n88\n08\n78\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_018D\nENCODING 397\nSWIDTH 583 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n00\n00\n70\n88\n88\n88\n88\n70\n08\n70\nENDCHAR\nSTARTCHAR U_018E\nENCODING 398\nSWIDTH 583 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\nF8\n08\n08\nF8\n08\n08\n08\nF8\nENDCHAR\nSTARTCHAR U_018F\nENCODING 399\nSWIDTH 583 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n00\n00\n78\n04\n02\nFE\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_0190\nENCODING 400\nSWIDTH 583 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n70\n88\n80\n60\n80\n80\n88\n70\nENDCHAR\nSTARTCHAR U_0191\nENCODING 401\nSWIDTH 583 0\nDWIDTH 8 0\nBBX 7 12 0 -2\nBITMAP\n00\n00\n3E\n20\n20\n3C\n20\n20\n20\n20\n20\nC0\nENDCHAR\nSTARTCHAR U_0192\nENCODING 402\nSWIDTH 583 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n18\n20\n70\n20\n20\n20\n20\n20\n20\nC0\nENDCHAR\nSTARTCHAR U_0193\nENCODING 403\nSWIDTH 583 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n00\n02\n3D\n40\n80\n80\n8C\n84\n44\n3C\nENDCHAR\nSTARTCHAR U_0194\nENCODING 404\nSWIDTH 583 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n00\n00\n84\n84\n48\n30\n30\n48\n48\n30\nENDCHAR\nSTARTCHAR U_0195\nENCODING 405\nSWIDTH 583 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n00\n00\n80\n80\nF0\n88\n89\n89\n89\n86\nENDCHAR\nSTARTCHAR U_0196\nENCODING 406\nSWIDTH 583 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n00\n00\n00\nE0\n40\n40\n40\n40\n40\n40\n60\nENDCHAR\nSTARTCHAR U_0197\nENCODING 407\nSWIDTH 583 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n00\n00\n00\nE0\n40\n40\nE0\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_0198\nENCODING 408\nSWIDTH 583 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n00\n00\n8E\n92\nA0\nC0\nC0\nA0\n90\n88\nENDCHAR\nSTARTCHAR U_0199\nENCODING 409\nSWIDTH 583 0\nDWIDTH 5 0\nBBX 4 12 0 0\nBITMAP\n00\n00\n00\n60\n90\n80\n80\n90\nA0\nC0\nA0\n90\nENDCHAR\nSTARTCHAR U_019A\nENCODING 410\nSWIDTH 583 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n00\n00\n00\nC0\n40\n40\nE0\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_019B\nENCODING 411\nSWIDTH 583 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n80\n60\n40\nA0\n20\n50\n50\n88\n88\nENDCHAR\nSTARTCHAR U_019C\nENCODING 412\nSWIDTH 583 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n00\n00\n92\n92\n92\n92\n92\n92\n92\n6E\nENDCHAR\nSTARTCHAR U_019D\nENCODING 413\nSWIDTH 583 0\nDWIDTH 8 0\nBBX 7 12 0 -2\nBITMAP\n00\n00\n62\n62\n52\n52\n4A\n4A\n46\n46\n40\nC0\nENDCHAR\nSTARTCHAR U_019E\nENCODING 414\nSWIDTH 583 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n00\n00\nF0\n88\n88\n88\n88\n88\n08\n08\nENDCHAR\nSTARTCHAR U_019F\nENCODING 415\nSWIDTH 583 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n00\n00\n38\n44\n82\nFE\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_01A0\nENCODING 416\nSWIDTH 583 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n00\n00\n39\n45\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_01A1\nENCODING 417\nSWIDTH 583 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n00\n00\n00\n04\n74\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_01A2\nENCODING 418\nSWIDTH 583 0\nDWIDTH 10 0\nBBX 9 12 0 0\nBITMAP\n0000\n0000\n0000\n0000\n3B00\n4480\n8280\n8280\n8280\n8280\n4480\n3880\nENDCHAR\nSTARTCHAR U_01A3\nENCODING 419\nSWIDTH 583 0\nDWIDTH 8 0\nBBX 7 12 0 -2\nBITMAP\n00\n00\n00\n00\n74\n8A\n8A\n8A\n8A\n72\n02\n02\nENDCHAR\nSTARTCHAR U_01A4\nENCODING 420\nSWIDTH 583 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n00\n00\nFC\nA2\n22\n22\n3C\n20\n20\n20\nENDCHAR\nSTARTCHAR U_01A5\nENCODING 421\nSWIDTH 583 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n60\n80\nF0\n88\n88\n88\n88\nF0\n80\n80\nENDCHAR\nSTARTCHAR U_01A6\nENCODING 422\nSWIDTH 583 0\nDWIDTH 7 0\nBBX 6 12 0 -2\nBITMAP\n00\n00\n80\n80\nF0\n88\n88\nF0\nA0\n90\n10\n0C\nENDCHAR\nSTARTCHAR U_01A7\nENCODING 423\nSWIDTH 583 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\nF0\n08\n08\n70\n80\n80\n80\n78\nENDCHAR\nSTARTCHAR U_01A8\nENCODING 424\nSWIDTH 583 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n00\n00\n70\n88\n30\n40\n88\n70\nENDCHAR\nSTARTCHAR U_01A9\nENCODING 425\nSWIDTH 583 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\nF8\n88\n40\n20\n20\n40\n88\nF8\nENDCHAR\nSTARTCHAR U_01AA\nENCODING 426\nSWIDTH 583 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n68\n90\n90\n70\n10\n10\n10\n10\n10\n18\nENDCHAR\nSTARTCHAR U_01AB\nENCODING 427\nSWIDTH 583 0\nDWIDTH 5 0\nBBX 4 12 0 -2\nBITMAP\n00\n00\n40\n40\nF0\n40\n40\n40\n40\n30\n10\n60\nENDCHAR\nSTARTCHAR U_01AC\nENCODING 428\nSWIDTH 583 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n00\n00\n7E\n90\n10\n10\n10\n10\n10\n10\nENDCHAR\nSTARTCHAR U_01AD\nENCODING 429\nSWIDTH 583 0\nDWIDTH 5 0\nBBX 4 12 0 0\nBITMAP\n00\n00\n00\n30\n40\n40\nF0\n40\n40\n40\n40\n30\nENDCHAR\nSTARTCHAR U_01AE\nENCODING 430\nSWIDTH 583 0\nDWIDTH 8 0\nBBX 7 12 0 -2\nBITMAP\n00\n00\nFE\n10\n10\n10\n10\n10\n10\n10\n10\n0E\nENDCHAR\nSTARTCHAR U_01AF\nENCODING 431\nSWIDTH 500 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n01\n01\n86\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_01B0\nENCODING 432\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n00\n02\n02\n8C\n88\n88\n88\n88\n78\n00\nENDCHAR\nSTARTCHAR U_01B1\nENCODING 433\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n00\n00\nEE\n28\n44\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_01B2\nENCODING 434\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n00\n00\n90\n88\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_01B3\nENCODING 435\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n00\n00\n42\nA2\n14\n14\n08\n08\n08\n08\nENDCHAR\nSTARTCHAR U_01B4\nENCODING 436\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 -2\nBITMAP\n00\n00\n00\n00\n86\n88\n50\n50\n20\n20\n40\n40\nENDCHAR\nSTARTCHAR U_01B5\nENCODING 437\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n00\n00\nFC\n04\n08\n7C\n20\n40\n80\nFC\nENDCHAR\nSTARTCHAR U_01B6\nENCODING 438\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n00\n00\nF8\n08\n10\nF8\n40\nF8\nENDCHAR\nSTARTCHAR U_01B7\nENCODING 439\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\nF8\n08\n30\n08\n08\n08\n08\nF0\nENDCHAR\nSTARTCHAR U_01B8\nENCODING 440\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\nF8\n80\n60\n80\n80\n80\n80\n78\nENDCHAR\nSTARTCHAR U_01B9\nENCODING 441\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n00\n00\nF8\n80\n60\n80\n80\n80\n80\n78\nENDCHAR\nSTARTCHAR U_01BA\nENCODING 442\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 11 12 0 -1\nBITMAP\n0000\n0000\n0000\n0000\nF000\n1000\n6000\n1000\n1000\n2000\n4000\n3000\nENDCHAR\nSTARTCHAR U_01BB\nENCODING 443\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n70\n88\n08\n08\n10\nF8\n40\nF8\nENDCHAR\nSTARTCHAR U_01BC\nENCODING 444\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n00\n00\n00\nFC\n44\n40\n78\n04\n04\n44\n38\nENDCHAR\nSTARTCHAR U_01BD\nENCODING 445\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 -2\nBITMAP\n00\n00\n00\n00\nFC\n44\n40\n78\n04\n04\n44\n38\nENDCHAR\nSTARTCHAR U_01BE\nENCODING 446\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 12 0 0\nBITMAP\n00\n00\n00\n00\n40\nE0\n40\n60\n10\n10\n90\n60\nENDCHAR\nSTARTCHAR U_01BF\nENCODING 447\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\nB0\nC8\n88\n90\nA0\nC0\n80\n80\nENDCHAR\nSTARTCHAR U_01C0\nENCODING 448\nSWIDTH 500 0\nDWIDTH 2 0\nBBX 1 12 0 0\nBITMAP\n00\n00\n00\n00\n80\n80\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_01C1\nENCODING 449\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\n00\n00\n00\nA0\nA0\nA0\nA0\nA0\nA0\nA0\nA0\nENDCHAR\nSTARTCHAR U_01C2\nENCODING 450\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n20\n20\nF8\n20\n20\nF8\n20\n20\nENDCHAR\nSTARTCHAR U_01C3\nENCODING 451\nSWIDTH 500 0\nDWIDTH 2 0\nBBX 1 12 0 0\nBITMAP\n00\n00\n00\n00\n80\n80\n80\n80\n80\n80\n00\n80\nENDCHAR\nSTARTCHAR U_01C4\nENCODING 452\nSWIDTH 500 0\nDWIDTH 11 0\nBBX 10 12 0 0\nBITMAP\n0000\n0240\n0180\n0000\nF3C0\n8840\n8840\n8880\n8900\n8A00\n8A00\nF3C0\nENDCHAR\nSTARTCHAR U_01C5\nENCODING 453\nSWIDTH 500 0\nDWIDTH 11 0\nBBX 10 12 0 0\nBITMAP\n0000\n0000\n0000\n0240\nF180\n8800\n8BC0\n8840\n8880\n8900\n8A00\nF3C0\nENDCHAR\nSTARTCHAR U_01C6\nENCODING 454\nSWIDTH 500 0\nDWIDTH 11 0\nBBX 10 12 0 0\nBITMAP\n0000\n0000\n0000\n0240\n0980\n0800\n7BC0\n8840\n8880\n8900\n8A00\n7BC0\nENDCHAR\nSTARTCHAR U_01C7\nENCODING 455\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 -2\nBITMAP\n00\n00\n8C\n84\n84\n84\n84\n84\n84\nF4\n04\n18\nENDCHAR\nSTARTCHAR U_01C8\nENCODING 456\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 -2\nBITMAP\n00\n00\n84\n80\n84\n84\n84\n84\n84\nF4\n04\n08\nENDCHAR\nSTARTCHAR U_01C9\nENCODING 457\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 12 0 -2\nBITMAP\n00\n00\nA0\n80\nA0\nA0\nA0\nA0\nA0\nA0\n20\n40\nENDCHAR\nSTARTCHAR U_01CA\nENCODING 458\nSWIDTH 500 0\nDWIDTH 10 0\nBBX 9 12 0 -2\nBITMAP\n0000\n0000\nC580\nC480\nA480\nA480\n9480\n9480\n8C80\n8C80\n0080\n0300\nENDCHAR\nSTARTCHAR U_01CB\nENCODING 459\nSWIDTH 500 0\nDWIDTH 9 0\nBBX 8 12 0 -2\nBITMAP\n00\n00\nC5\nC4\nA5\nA5\n95\n95\n8D\n8D\n01\n02\nENDCHAR\nSTARTCHAR U_01CC\nENCODING 460\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 -2\nBITMAP\n00\n00\n02\n00\nF2\n8A\n8A\n8A\n8A\n8A\n02\n04\nENDCHAR\nSTARTCHAR U_01CD\nENCODING 461\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n28\n10\n00\n10\n10\n28\n28\n44\n7C\n82\n82\nENDCHAR\nSTARTCHAR U_01CE\nENCODING 462\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n50\n20\n00\n70\n08\n78\n88\n88\n78\nENDCHAR\nSTARTCHAR U_01CF\nENCODING 463\nSWIDTH 500 0\nDWIDTH 4 0\nBBX 3 12 0 0\nBITMAP\n00\nA0\n40\n00\nE0\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_01D0\nENCODING 464\nSWIDTH 1000 0\nDWIDTH 4 0\nBBX 3 10 0 0\nBITMAP\n00\nA0\n40\n00\n40\n40\n40\n40\n40\n40\nENDCHAR\nSTARTCHAR U_01D1\nENCODING 465\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n28\n10\n00\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_01D2\nENCODING 466\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n50\n20\n00\n70\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_01D3\nENCODING 467\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n48\n30\n00\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_01D4\nENCODING 468\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n00\n50\n20\n00\n88\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_01D5\nENCODING 469\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n78\n00\n48\n00\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_01D6\nENCODING 470\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 10 0 0\nBITMAP\n70\n00\n50\n00\n88\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_01D7\nENCODING 471\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n08\n10\n48\n00\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_01D8\nENCODING 472\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n10\n20\n00\n50\n00\n88\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_01D9\nENCODING 473\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n48\n30\n48\n00\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_01DA\nENCODING 474\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n50\n20\n00\n50\n00\n88\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_01DB\nENCODING 475\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n20\n10\n48\n00\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_01DC\nENCODING 476\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n40\n20\n00\n50\n00\n88\n88\n88\n88\n88\n78\nENDCHAR\nSTARTCHAR U_01DD\nENCODING 477\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n00\n00\nF0\n08\n08\nF8\n88\n70\nENDCHAR\nSTARTCHAR U_01DE\nENCODING 478\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n38\n00\n28\n00\n10\n10\n28\n28\n44\n7C\n82\n82\nENDCHAR\nSTARTCHAR U_01DF\nENCODING 479\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n70\n00\n50\n00\n70\n08\n78\n88\n88\n78\nENDCHAR\nSTARTCHAR U_01E0\nENCODING 480\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n38\n00\n10\n00\n10\n10\n28\n28\n44\n7C\n82\n82\nENDCHAR\nSTARTCHAR U_01E1\nENCODING 481\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n70\n00\n10\n00\n70\n08\n78\n88\n88\n78\nENDCHAR\nSTARTCHAR U_01E2\nENCODING 482\nSWIDTH 500 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n1E\n00\n1F\n28\n28\n4F\n78\n88\n88\n8F\nENDCHAR\nSTARTCHAR U_01E3\nENCODING 483\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n00\n00\n78\n00\nEC\n12\n7C\n90\n90\n6E\nENDCHAR\nSTARTCHAR U_01E4\nENCODING 484\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n00\n00\n3C\n40\n80\n8C\n84\n9E\n44\n3C\nENDCHAR\nSTARTCHAR U_01E5\nENCODING 485\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 -2\nBITMAP\n00\n00\n00\n00\n78\n88\nBC\n88\n88\n78\n08\n70\nENDCHAR\nSTARTCHAR U_01E6\nENCODING 486\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n28\n10\n00\n3C\n40\n80\n80\n8C\n84\n44\n3C\nENDCHAR\nSTARTCHAR U_01E7\nENCODING 487\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 -2\nBITMAP\n00\n50\n20\n00\n78\n88\n88\n88\n88\n78\n08\n70\nENDCHAR\nSTARTCHAR U_01E8\nENCODING 488\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n50\n20\n00\n88\n90\nA0\nC0\nC0\nA0\n90\n88\nENDCHAR\nSTARTCHAR U_01E9\nENCODING 489\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 12 0 0\nBITMAP\n00\n50\n20\n00\n80\n80\n80\n90\nA0\nC0\nA0\n90\nENDCHAR\nSTARTCHAR U_01EA\nENCODING 490\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 -2\nBITMAP\n00\n00\n38\n44\n82\n82\n82\n82\n44\n38\n10\n0C\nENDCHAR\nSTARTCHAR U_01EB\nENCODING 491\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n00\n00\n70\n88\n88\n88\n88\n70\n20\n18\nENDCHAR\nSTARTCHAR U_01EC\nENCODING 492\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 -2\nBITMAP\n7C\n00\n38\n44\n82\n82\n82\n82\n44\n38\n10\n0C\nENDCHAR\nSTARTCHAR U_01ED\nENCODING 493\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n70\n00\n70\n88\n88\n88\n88\n70\n20\n18\nENDCHAR\nSTARTCHAR U_01EE\nENCODING 494\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n50\n20\n00\nF8\n08\n30\n08\n08\n08\n08\nF0\nENDCHAR\nSTARTCHAR U_01EF\nENCODING 495\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n50\n20\n00\nF8\n08\n30\n08\n08\n08\n08\nF0\nENDCHAR\nSTARTCHAR U_01F0\nENCODING 496\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 12 0 -2\nBITMAP\n00\n50\n20\n00\n60\n20\n20\n20\n20\n20\n20\nC0\nENDCHAR\nSTARTCHAR U_01F1\nENCODING 497\nSWIDTH 500 0\nDWIDTH 13 0\nBBX 12 12 0 0\nBITMAP\n0000\n0000\n0000\n0000\nF1F0\n8810\n8410\n8420\n8440\n8480\n8900\nF1F0\nENDCHAR\nSTARTCHAR U_01F2\nENCODING 498\nSWIDTH 500 0\nDWIDTH 13 0\nBBX 12 12 0 0\nBITMAP\n0000\n0000\n0000\n0000\nF000\n8800\n85F0\n8410\n8420\n8440\n8880\nF1F0\nENDCHAR\nSTARTCHAR U_01F3\nENCODING 499\nSWIDTH 500 0\nDWIDTH 12 0\nBBX 11 12 0 0\nBITMAP\n0000\n0000\n0000\n0000\n0800\n0800\n7BE0\n8820\n8840\n8880\n8900\n7BE0\nENDCHAR\nSTARTCHAR U_01F4\nENCODING 500\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n08\n10\n00\n3C\n40\n80\n80\n8C\n84\n44\n3C\nENDCHAR\nSTARTCHAR U_01F5\nENCODING 501\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n10\n20\n00\n78\n88\n88\n88\n88\n78\n08\n70\nENDCHAR\nSTARTCHAR U_01F6\nENCODING 502\nSWIDTH 500 0\nDWIDTH 10 0\nBBX 9 12 0 0\nBITMAP\n0000\n0000\n0000\n0000\n8400\n8400\n8400\nFC00\n8480\n8480\n8480\n8300\nENDCHAR\nSTARTCHAR U_01F7\nENCODING 503\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n00\n00\nF0\n88\n88\n90\nA0\nC0\n80\n80\nENDCHAR\nSTARTCHAR U_01F8\nENCODING 504\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n20\n10\n00\nC4\nC4\nA4\nA4\n94\n94\n8C\n8C\nENDCHAR\nSTARTCHAR U_01F9\nENCODING 505\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n40\n20\n00\nF0\n88\n88\n88\n88\n88\nENDCHAR\nSTARTCHAR U_01FA\nENCODING 506\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n08\n10\n28\n28\n10\n10\n28\n28\n44\n7C\n82\n82\nENDCHAR\nSTARTCHAR U_01FB\nENCODING 507\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n10\n20\n20\n50\n20\n70\n08\n78\n88\n88\n78\nENDCHAR\nSTARTCHAR U_01FC\nENCODING 508\nSWIDTH 500 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n04\n08\n00\n1F\n28\n28\n4F\n78\n88\n88\n8F\nENDCHAR\nSTARTCHAR U_01FD\nENCODING 509\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n00\n08\n10\n00\nEC\n12\n7C\n90\n90\n6E\nENDCHAR\nSTARTCHAR U_01FE\nENCODING 510\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n08\n10\n00\n34\n48\n94\n94\nA4\nA4\n48\nB0\nENDCHAR\nSTARTCHAR U_01FF\nENCODING 511\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n10\n20\n08\n70\n98\nA8\nA8\nC8\n70\n80\nENDCHAR\nSTARTCHAR U_0200\nENCODING 512\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n50\n28\n00\n10\n10\n28\n28\n44\n7C\n82\n82\nENDCHAR\nSTARTCHAR U_0201\nENCODING 513\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\nA0\n50\n00\n70\n08\n78\n88\n88\n78\nENDCHAR\nSTARTCHAR U_0202\nENCODING 514\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n38\n44\n00\n10\n10\n28\n28\n44\n7C\n82\n82\nENDCHAR\nSTARTCHAR U_0203\nENCODING 515\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n70\n88\n00\n70\n08\n78\n88\n88\n78\nENDCHAR\nSTARTCHAR U_0204\nENCODING 516\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\nA0\n50\n00\nF8\n80\n80\nF8\n80\n80\n80\nF8\nENDCHAR\nSTARTCHAR U_0205\nENCODING 517\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\nA0\n50\n00\n70\n88\nF8\n80\n80\n78\nENDCHAR\nSTARTCHAR U_0206\nENCODING 518\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n70\n88\n00\nF8\n80\n80\nF8\n80\n80\n80\nF8\nENDCHAR\nSTARTCHAR U_0207\nENCODING 519\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n70\n88\n00\n70\n88\nF8\n80\n80\n78\nENDCHAR\nSTARTCHAR U_0208\nENCODING 520\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 12 0 0\nBITMAP\n00\nA0\n50\n00\n70\n20\n20\n20\n20\n20\n20\n70\nENDCHAR\nSTARTCHAR U_0209\nENCODING 521\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 12 0 0\nBITMAP\n00\n00\n00\nA0\n50\n00\n20\n20\n20\n20\n20\n20\nENDCHAR\nSTARTCHAR U_020A\nENCODING 522\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n70\n88\n00\n70\n20\n20\n20\n20\n20\n20\n70\nENDCHAR\nSTARTCHAR U_020B\nENCODING 523\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n70\n88\n00\n20\n20\n20\n20\n20\n20\nENDCHAR\nSTARTCHAR U_020C\nENCODING 524\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n50\n28\n00\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_020D\nENCODING 525\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\nA0\n50\n00\n70\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_020E\nENCODING 526\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n38\n44\n00\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_020F\nENCODING 527\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n70\n88\n00\n70\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_0210\nENCODING 528\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\nA0\n50\n00\nF0\n88\n88\n88\nF0\n90\n88\n84\nENDCHAR\nSTARTCHAR U_0211\nENCODING 529\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 12 0 0\nBITMAP\n00\n00\n00\nA0\n50\n00\n70\n40\n40\n40\n40\n40\nENDCHAR\nSTARTCHAR U_0212\nENCODING 530\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n70\n88\n00\nF0\n88\n88\n88\nF0\n90\n88\n84\nENDCHAR\nSTARTCHAR U_0213\nENCODING 531\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n70\n88\n00\n70\n40\n40\n40\n40\n40\nENDCHAR\nSTARTCHAR U_0214\nENCODING 532\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n90\n48\n00\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_0215\nENCODING 533\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\nA0\n50\n00\n88\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_0216\nENCODING 534\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n78\n84\n00\n84\n84\n84\n84\n84\n84\n84\n78\nENDCHAR\nSTARTCHAR U_0217\nENCODING 535\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n70\n88\n00\n88\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_0218\nENCODING 536\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -3\nBITMAP\n00\n78\n80\n80\n70\n08\n08\n08\nF0\n00\n20\n40\nENDCHAR\nSTARTCHAR U_0219\nENCODING 537\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -3\nBITMAP\n00\n00\n00\n70\n88\n60\n10\n88\n70\n00\n20\n40\nENDCHAR\nSTARTCHAR U_021A\nENCODING 538\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 -3\nBITMAP\n00\nFE\n10\n10\n10\n10\n10\n10\n10\n00\n10\n20\nENDCHAR\nSTARTCHAR U_021B\nENCODING 539\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 12 0 -3\nBITMAP\n00\n40\n40\nF0\n40\n40\n40\n40\n30\n00\n20\n40\nENDCHAR\nSTARTCHAR U_021C\nENCODING 540\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\nF0\n08\n08\n30\n08\n08\n10\nE0\nENDCHAR\nSTARTCHAR U_021D\nENCODING 541\nSWIDTH 500 0\nDWIDTH 5 0\nBBX 4 12 0 0\nBITMAP\n00\n00\n00\n00\n00\n00\nE0\n10\n60\n10\n20\nC0\nENDCHAR\nSTARTCHAR U_021E\nENCODING 542\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\n48\n30\n00\n84\n84\n84\nFC\n84\n84\n84\n84\nENDCHAR\nSTARTCHAR U_021F\nENCODING 543\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 0\nBITMAP\n00\nA0\n40\n00\n40\n40\n78\n44\n44\n44\n44\n44\nENDCHAR\nSTARTCHAR U_0220\nENCODING 544\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n00\n00\nF0\n88\n88\n88\n88\n88\n08\n08\nENDCHAR\nSTARTCHAR U_0221\nENCODING 545\nSWIDTH 500 0\nDWIDTH 9 0\nBBX 8 12 0 0\nBITMAP\n00\n00\n00\n00\n08\n08\n78\n88\n88\n8E\n89\n76\nENDCHAR\nSTARTCHAR U_0222\nENCODING 546\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n10\n88\n88\n70\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_0223\nENCODING 547\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n88\n88\n88\n70\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_0224\nENCODING 548\nSWIDTH 500 0\nDWIDTH 7 0\nBBX 6 12 0 -2\nBITMAP\n00\n00\nFC\n04\n08\n10\n20\n40\n80\nFC\n04\n08\nENDCHAR\nSTARTCHAR U_0225\nENCODING 549\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n00\n00\nF8\n08\n10\n20\n40\nF8\n08\n10\nENDCHAR\nSTARTCHAR U_0226\nENCODING 550\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n10\n00\n10\n10\n28\n28\n44\n7C\n82\n82\nENDCHAR\nSTARTCHAR U_0227\nENCODING 551\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n20\n00\n70\n08\n78\n88\n88\n78\nENDCHAR\nSTARTCHAR U_0228\nENCODING 552\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\nF8\n80\n80\nF8\n80\n80\n80\nF8\n10\n60\nENDCHAR\nSTARTCHAR U_0229\nENCODING 553\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n00\n00\n70\n88\nF8\n80\n80\n78\n10\n60\nENDCHAR\nSTARTCHAR U_022A\nENCODING 554\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n38\n00\n28\n00\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_022B\nENCODING 555\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n70\n00\n50\n00\n70\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_022C\nENCODING 556\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n38\n00\n34\n48\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_022D\nENCODING 557\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n70\n00\n68\n90\n00\n70\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_022E\nENCODING 558\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n00\n00\n10\n00\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_022F\nENCODING 559\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n00\n00\n20\n00\n70\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_0230\nENCODING 560\nSWIDTH 500 0\nDWIDTH 8 0\nBBX 7 12 0 0\nBITMAP\n38\n00\n10\n00\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_0231\nENCODING 561\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n70\n00\n20\n00\n70\n88\n88\n88\n88\n70\nENDCHAR\nSTARTCHAR U_0232\nENCODING 562\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 0\nBITMAP\n00\n00\n70\n00\n88\n88\n50\n50\n20\n20\n20\n20\nENDCHAR\nSTARTCHAR U_0233\nENCODING 563\nSWIDTH 500 0\nDWIDTH 6 0\nBBX 5 12 0 -2\nBITMAP\n00\n00\n70\n00\n88\n88\n50\n50\n20\n20\n40\n40\nENDCHAR\nSTARTCHAR U_0250\nENCODING 592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nB000\n4800\n4800\n7000\n4000\n3800\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_0251\nENCODING 593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n3000\n4800\n8800\n8800\n8800\n9800\n6800\n0000\n0000\nENDCHAR\nSTARTCHAR U_0252\nENCODING 594\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 2\nBITMAP\n00\n00\nB0\nC8\n88\n88\n88\nC8\nB0\n00\n00\n00\nENDCHAR\nSTARTCHAR U_0253\nENCODING 595\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 1\nBITMAP\n60\n90\n80\n80\nB0\nC8\n88\nC8\nB0\n00\n00\n00\nENDCHAR\nSTARTCHAR U_0254\nENCODING 596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 12 0 3\nBITMAP\n00\n00\n70\n88\n08\n08\n88\n70\n00\n00\n00\n00\nENDCHAR\nSTARTCHAR U_0255\nENCODING 597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 12 0 2\nBITMAP\n00\n00\n38\n44\n40\n58\n64\n44\nB8\n00\n00\n00\nENDCHAR\nSTARTCHAR U_0256\nENCODING 598\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 2\nBITMAP\n10\n10\n10\n50\nB0\n90\n90\nB0\n50\n14\n08\n00\nENDCHAR\nSTARTCHAR U_0257\nENCODING 599\nSWIDTH 1000 0\nDWIDTH 7 0\nBBX 6 12 0 3\nBITMAP\n1C\n14\n10\n50\nB0\n90\n90\nB0\n50\n00\n00\n00\nENDCHAR\nSTARTCHAR U_0258\nENCODING 600\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 2\nBITMAP\n00\n00\n00\n70\n88\nF8\n08\n88\n70\n00\n00\n00\nENDCHAR\nSTARTCHAR U_0259\nENCODING 601\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 2\nBITMAP\n00\n08\n85\n82\n9F\n80\n80\n83\n8D\n91\n60\n00\nENDCHAR\nSTARTCHAR U_025A\nENCODING 602\nSWIDTH 1000 0\nDWIDTH 9 0\nBBX 8 12 0 3\nBITMAP\n00\n00\n00\n00\n00\n75\n8A\n88\n38\nC8\n88\n70\nENDCHAR\nSTARTCHAR U_025B\nENCODING 603\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 2\nBITMAP\n00\n00\n70\n88\n80\n60\n80\n88\n70\n00\n00\n00\nENDCHAR\nSTARTCHAR U_025C\nENCODING 604\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 2\nBITMAP\n00\n00\n70\n88\n08\n30\n08\n88\n70\n00\n00\n00\nENDCHAR\nSTARTCHAR U_025D\nENCODING 605\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 2\nBITMAP\n00\n00\n75\n8A\n08\n30\n08\n88\n70\n00\n00\n00\nENDCHAR\nSTARTCHAR U_025E\nENCODING 606\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 5 12 0 2\nBITMAP\n00\n00\n70\n88\n88\nB0\n88\n88\n70\n00\n00\n00\nENDCHAR\nSTARTCHAR U_025F\nENCODING 607\nSWIDTH 1000 0\nDWIDTH 5 0\nBBX 4 12 0 1\nBITMAP\n00\n20\n20\n20\n20\n20\nF8\n20\n20\nC0\n00\n00\nENDCHAR\nSTARTCHAR U_0260\nENCODING 608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0C00\n0A00\n7800\n8800\n8800\n8800\n9800\n6800\n0800\n0800\n7000\nENDCHAR\nSTARTCHAR U_0261\nENCODING 609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n6800\n9800\n8800\n8800\n9800\n6800\n0800\n0800\n7000\nENDCHAR\nSTARTCHAR U_0262\nENCODING 610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n7000\n8800\n8000\n8000\n9800\n8800\n8800\n7800\n0000\nENDCHAR\nSTARTCHAR U_0263\nENCODING 611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n8200\n4400\n2800\n1000\n1000\n2800\n2800\n1000\n0000\nENDCHAR\nSTARTCHAR U_0264\nENCODING 612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n4400\nAA00\n2800\n1000\n1000\n2800\n2800\n1000\n0000\nENDCHAR\nSTARTCHAR U_0265\nENCODING 613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8800\n8800\n8800\n8800\n8800\n9800\n6800\n0800\n0800\n0000\nENDCHAR\nSTARTCHAR U_0266\nENCODING 614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n6000\n8000\n8000\nB000\nC800\n8800\n8800\n8800\n8800\n0000\nENDCHAR\nSTARTCHAR U_0267\nENCODING 615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7000\n8800\n8000\nB000\nC800\n8800\n8800\n8800\n8800\n0800\n3000\nENDCHAR\nSTARTCHAR U_0268\nENCODING 616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n4000\n0000\n4000\nE000\n4000\n4000\n4000\n4000\n0000\nENDCHAR\nSTARTCHAR U_0269\nENCODING 617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n9000\n6000\n0000\nENDCHAR\nSTARTCHAR U_026A\nENCODING 618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n0000\nENDCHAR\nSTARTCHAR U_026B\nENCODING 619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n2000\n2000\n2000\n6800\nB000\n2000\n2000\n2000\n2000\n0000\nENDCHAR\nSTARTCHAR U_026C\nENCODING 620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n2000\n2000\n6000\nA000\nA000\n7000\n2000\n2000\n2000\n0000\nENDCHAR\nSTARTCHAR U_026D\nENCODING 621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\nA000\n4000\n0000\nENDCHAR\nSTARTCHAR U_026E\nENCODING 622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8000\n8000\nB000\nC800\n8800\n9000\nA000\n9000\n6000\n0000\nENDCHAR\nSTARTCHAR U_026F\nENCODING 623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\nA800\nA800\nA800\nA800\nA800\nA800\n5800\n0000\nENDCHAR\nSTARTCHAR U_0270\nENCODING 624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nA800\nA800\nA800\nA800\nA800\nA800\n5800\n0800\n0800\nENDCHAR\nSTARTCHAR U_0271\nENCODING 625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nAC00\nD200\n9200\n9200\n9200\n9200\n9200\n0200\n0C00\nENDCHAR\nSTARTCHAR U_0272\nENCODING 626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n2C00\n3200\n2200\n2200\n2200\n2200\n2200\nA000\n4000\nENDCHAR\nSTARTCHAR U_0273\nENCODING 627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nB000\nC800\n8800\n8800\n8800\n8800\n8800\n8800\n0A00\n0400\nENDCHAR\nSTARTCHAR U_0274\nENCODING 628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n8400\nC400\nA400\n9400\n8C00\n8400\n8400\n0000\n0000\nENDCHAR\nSTARTCHAR U_0275\nENCODING 629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7000\n8800\n8800\nF800\n8800\n8800\n8800\n7000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_0276\nENCODING 630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n5C00\nB000\n9000\n9C00\n9000\n9000\nB000\n5C00\n0000\nENDCHAR\nSTARTCHAR U_0277\nENCODING 631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n7C00\n8200\n9200\n9200\n9200\n9200\n9200\n6C00\n0000\nENDCHAR\nSTARTCHAR U_0278\nENCODING 632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n2000\n2000\n7000\nA800\nA800\nA800\n7000\n2000\n2000\n0000\nENDCHAR\nSTARTCHAR U_0279\nENCODING 633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n1000\n1000\n1000\n1000\n1000\n3000\nD000\n0000\n0000\nENDCHAR\nSTARTCHAR U_027A\nENCODING 634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n1000\n1000\n1000\n1000\n1000\n1000\n1000\n3000\nD000\n0000\nENDCHAR\nSTARTCHAR U_027B\nENCODING 635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n1000\n1000\n1000\n1000\n1000\n3000\nD000\n1400\n0800\nENDCHAR\nSTARTCHAR U_027C\nENCODING 636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nB000\nC000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\nENDCHAR\nSTARTCHAR U_027D\nENCODING 637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nB000\nC000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n6000\nENDCHAR\nSTARTCHAR U_027E\nENCODING 638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n7000\n8800\n8800\n8000\n8000\n8000\n8000\n8000\n0000\nENDCHAR\nSTARTCHAR U_027F\nENCODING 639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n7000\n8800\n8800\n0800\n0800\n0800\n0800\n0800\n0000\nENDCHAR\nSTARTCHAR U_0280\nENCODING 640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nF000\n8800\n8800\n8800\nF000\nA000\n9000\n8800\n8400\n0000\nENDCHAR\nSTARTCHAR U_0281\nENCODING 641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8400\n8800\n8800\n9000\nF800\n8400\n8400\n8400\nF800\n0000\nENDCHAR\nSTARTCHAR U_0282\nENCODING 642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n6000\n9000\n8000\n6000\n1000\n9000\n6000\n4000\n7000\n0000\nENDCHAR\nSTARTCHAR U_0283\nENCODING 643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n1000\n2800\n2000\n2000\n2000\n2000\n2000\n2000\nA000\n4000\nENDCHAR\nSTARTCHAR U_0284\nENCODING 644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n2800\n2000\n7000\n2000\n2000\n7000\n2000\n2000\nA000\n4000\nENDCHAR\nSTARTCHAR U_0285\nENCODING 645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n4000\nA000\n2000\n2000\n2000\n2000\n2000\n2000\n2800\n1000\nENDCHAR\nSTARTCHAR U_0286\nENCODING 646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0C00\n1000\n1000\n1000\n1000\n1000\n7C00\n9000\n9000\n6000\nENDCHAR\nSTARTCHAR U_0287\nENCODING 647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nC000\n2000\n2000\n2000\n2000\n2000\nF000\n2000\n2000\n0000\nENDCHAR\nSTARTCHAR U_0288\nENCODING 648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n4000\n4000\nF000\n4000\n4000\n4000\n4000\n4000\n3000\n0000\nENDCHAR\nSTARTCHAR U_0289\nENCODING 649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n4800\n4800\nFC00\n4800\n4800\n5800\n2800\n0000\nENDCHAR\nSTARTCHAR U_028A\nENCODING 650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\nEE00\n2800\n4400\n4400\n4400\n3800\n0000\nENDCHAR\nSTARTCHAR U_028B\nENCODING 651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n9000\n8800\n8800\n8800\n8800\n9000\n6000\n0000\nENDCHAR\nSTARTCHAR U_028C\nENCODING 652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n2000\n5000\n5000\n8800\n8800\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_028D\nENCODING 653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n5000\n5000\n5000\n5000\nA800\nA800\nA800\n0000\n0000\nENDCHAR\nSTARTCHAR U_028E\nENCODING 654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0800\n0800\n1000\n1000\n3000\n2800\n4800\n4400\n8400\n0000\nENDCHAR\nSTARTCHAR U_028F\nENCODING 655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n8400\n4800\n3000\n1000\n1000\n1000\n1000\n0000\nENDCHAR\nSTARTCHAR U_0290\nENCODING 656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nF800\n1000\n1000\n2000\n2000\n4000\nF400\n1800\n0000\nENDCHAR\nSTARTCHAR U_0291\nENCODING 657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\nF800\n0800\n1000\n2800\n5400\nFC00\n1000\n0000\nENDCHAR\nSTARTCHAR U_0292\nENCODING 658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nF800\n0800\n1000\n2000\n1000\n0800\n8800\n8800\n7000\nENDCHAR\nSTARTCHAR U_0293\nENCODING 659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nF800\n1000\n2000\n7000\n0800\n7800\n8800\n7400\n0000\nENDCHAR\nSTARTCHAR U_0294\nENCODING 660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n7800\n8400\n0400\n0400\n1800\n1000\n1000\n1000\n1000\n0000\nENDCHAR\nSTARTCHAR U_0295\nENCODING 661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n7000\n8800\n8000\n8000\n6000\n2000\n2000\n2000\n2000\n0000\nENDCHAR\nSTARTCHAR U_0296\nENCODING 662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n2000\n2000\n2000\n3000\n0800\n0800\n0800\n8800\n7000\n0000\nENDCHAR\nSTARTCHAR U_0297\nENCODING 663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n7000\n8800\n8000\n8000\n8000\n8000\n8800\n7000\n0000\n0000\nENDCHAR\nSTARTCHAR U_0298\nENCODING 664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n3000\n4800\n8400\nB400\n8400\n4800\n3000\n0000\n0000\nENDCHAR\nSTARTCHAR U_0299\nENCODING 665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nF000\n8800\n8800\nF000\n8800\n8800\nF000\n0000\n0000\nENDCHAR\nSTARTCHAR U_029A\nENCODING 666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n7800\n8400\n8400\n6400\n8400\n8400\n7800\n0000\n0000\nENDCHAR\nSTARTCHAR U_029B\nENCODING 667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n0400\n0400\n3C00\n4000\n8000\n9C00\n8400\n4C00\n3400\n0000\nENDCHAR\nSTARTCHAR U_029C\nENCODING 668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n8800\n8800\n8800\nF800\n8800\n8800\n8800\n0000\n0000\nENDCHAR\nSTARTCHAR U_029D\nENCODING 669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n2000\n0000\n2000\n2000\n2000\n2000\n6000\nB000\nA800\n4000\nENDCHAR\nSTARTCHAR U_029E\nENCODING 670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8400\n8400\n4400\n4C00\n3400\n2400\n4400\n8400\n0400\n0400\nENDCHAR\nSTARTCHAR U_029F\nENCODING 671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\nF800\n0000\nENDCHAR\nSTARTCHAR U_02A0\nENCODING 672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n1400\n5000\nB000\n9000\n9000\n9000\nB000\n5000\n1000\n1000\nENDCHAR\nSTARTCHAR U_02A1\nENCODING 673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n7000\n8800\n8800\n0800\n0800\n3000\n2000\nF800\n2000\n2000\nENDCHAR\nSTARTCHAR U_02A2\nENCODING 674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n7000\n8800\n8000\n8000\n6000\n2000\nF800\n2000\n2000\n0000\nENDCHAR\nSTARTCHAR U_02A3\nENCODING 675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n1000\n1000\n1000\n7F00\n9200\n9400\n6F00\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_02A4\nENCODING 676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n0800\n6800\n9FC0\n8880\n8900\n9B80\n6840\n0040\n0440\n0380\nENDCHAR\nSTARTCHAR U_02A5\nENCODING 677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n1000\n1000\n1000\n7F00\n9100\n9200\n9500\nBA80\n5F80\n0200\nENDCHAR\nSTARTCHAR U_02A6\nENCODING 678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4000\n4000\nEC00\n5200\n5000\n4800\n4400\n4200\n5200\n2C00\n0000\nENDCHAR\nSTARTCHAR U_02A7\nENCODING 679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0600\n4800\n4800\nF800\n4800\n4800\n4800\n3800\n0800\n3000\nENDCHAR\nSTARTCHAR U_02A8\nENCODING 680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n4000\n4000\nEC00\n5200\n5400\n5A00\n5200\n2C00\n0000\nENDCHAR\nSTARTCHAR U_02AD\nENCODING 685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFE00\n8200\n8200\n0000\nFE00\n8200\n8200\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR caron\nENCODING 711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 5 3 3\nBITMAP\n84\n48\n50\n30\n20\nENDCHAR\nSTARTCHAR U_02C9\nENCODING 713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 1 4 7\nBITMAP\nF8\nENDCHAR\nSTARTCHAR U_02CA\nENCODING 714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 4 4 4 4\nBITMAP\n10\n20\n60\nC0\nENDCHAR\nSTARTCHAR U_02CB\nENCODING 715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 4 3 3\nBITMAP\nC0\n20\n10\n08\nENDCHAR\nSTARTCHAR U_02CD\nENCODING 717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 1 0 -1\nBITMAP\nFFF0\nENDCHAR\nSTARTCHAR dotaccent\nENCODING 729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 4 4 4 4\nBITMAP\n60\nF0\nF0\n60\nENDCHAR\nSTARTCHAR Alpha\nENCODING 913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\n0800\n0800\n1400\n1400\n2200\n2200\n3E00\n4100\n4100\nE380\nENDCHAR\nSTARTCHAR Beta\nENCODING 914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\nF8\n44\n42\n44\n78\n44\n42\n42\n44\nF8\nENDCHAR\nSTARTCHAR Gamma\nENCODING 915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\nFC\n44\n42\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_0394\nENCODING 916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\n0800\n0800\n0800\n1400\n1400\n2200\n2200\n4100\n4100\nFF80\nENDCHAR\nSTARTCHAR Epsilon\nENCODING 917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\nFF\n41\n41\n48\n78\n48\n40\n41\n41\nFF\nENDCHAR\nSTARTCHAR Zeta\nENCODING 918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\n7E\n42\n42\n04\n08\n10\n20\n40\n82\nFE\nENDCHAR\nSTARTCHAR Eta\nENCODING 919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\nE380\n4100\n4100\n4100\n7F00\n4100\n4100\n4100\n4100\nE380\nENDCHAR\nSTARTCHAR Theta\nENCODING 920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\n1C00\n2200\n4100\nA280\nBE80\nA280\n8080\n4100\n2200\n1C00\nENDCHAR\nSTARTCHAR Iota\nENCODING 921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 3 10 4 0\nBITMAP\nE0\n40\n40\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR Kappa\nENCODING 922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\nEE\n44\n48\n50\n60\n50\n48\n44\n42\nE7\nENDCHAR\nSTARTCHAR Lambda\nENCODING 923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\n0800\n0800\n1400\n1400\n2200\n2200\n2200\n4100\n4100\nE380\nENDCHAR\nSTARTCHAR Mu\nENCODING 924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\nC060\n4040\n60C0\n60C0\n5140\n5140\n4A40\n4A40\n4440\nE4E0\nENDCHAR\nSTARTCHAR Nu\nENCODING 925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\nC7\n62\n52\n52\n4A\n4A\n46\n46\n42\nE2\nENDCHAR\nSTARTCHAR Xi\nENCODING 926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\nFF\n81\n00\n42\n7E\n42\n00\n00\n81\nFF\nENDCHAR\nSTARTCHAR Omicron\nENCODING 927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\n1C00\n2200\n4100\n8080\n8080\n8080\n8080\n4100\n2200\n1C00\nENDCHAR\nSTARTCHAR Pi\nENCODING 928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\nFF80\n4100\n4100\n4100\n4100\n4100\n4100\n4100\n4100\nE380\nENDCHAR\nSTARTCHAR Rho\nENCODING 929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\nF8\n44\n42\n42\n44\n78\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR Sigma\nENCODING 931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\nFE00\n4200\n2100\n1000\n0800\n0800\n1000\n2080\n4080\nFF00\nENDCHAR\nSTARTCHAR Tau\nENCODING 932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\nFF80\n8880\n8880\n0800\n0800\n0800\n0800\n0800\n0800\n1C00\nENDCHAR\nSTARTCHAR Upsilon\nENCODING 933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\n7700\n8880\n8880\n0800\n0800\n0800\n0800\n0800\n0800\n1C00\nENDCHAR\nSTARTCHAR Phi\nENCODING 934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\n38\n10\n7C\n92\n92\n92\n7C\n10\n10\n38\nENDCHAR\nSTARTCHAR Chi\nENCODING 935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\nE380\n4100\n2200\n1400\n0800\n0800\n1400\n2200\n4100\nE380\nENDCHAR\nSTARTCHAR Psi\nENCODING 936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\n0E00\n4440\nA4A0\n2480\n2480\n1500\n0E00\n0400\n0400\n0E00\nENDCHAR\nSTARTCHAR U_03A9\nENCODING 937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\n1C00\n2200\n4100\n4100\n4100\n4100\n2200\n9480\n9480\nF780\nENDCHAR\nSTARTCHAR alpha\nENCODING 945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 0\nBITMAP\n32\n4A\n8C\n88\n90\n98\n66\nENDCHAR\nSTARTCHAR beta\nENCODING 946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 1 0\nBITMAP\n06\n09\n09\n12\n14\n22\n22\n64\n58\n80\nENDCHAR\nSTARTCHAR gamma\nENCODING 947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 8 2 0\nBITMAP\n63\n94\n08\n10\n10\n20\n20\n40\nENDCHAR\nSTARTCHAR delta\nENCODING 948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\n18\n26\n10\n08\n18\n24\n44\n84\n88\n70\nENDCHAR\nSTARTCHAR epsilon\nENCODING 949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 8 2 0\nBITMAP\n38\n44\n40\n30\n40\n84\n88\n70\nENDCHAR\nSTARTCHAR zeta\nENCODING 950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\n26\n1C\n10\n20\n40\n40\n40\n30\n88\n70\nENDCHAR\nSTARTCHAR eta\nENCODING 951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 8 2 0\nBITMAP\n4C\nB2\n22\n44\n44\n88\n08\n08\nENDCHAR\nSTARTCHAR theta\nENCODING 952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\n0C\n12\n22\n42\n7E\n84\n84\n88\n90\n60\nENDCHAR\nSTARTCHAR iota\nENCODING 953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 8 3 0\nBITMAP\n10\n20\n40\n40\n80\n84\n98\n60\nENDCHAR\nSTARTCHAR kappa\nENCODING 954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 8 1 0\nBITMAP\n21\n12\n14\n38\n28\n49\n49\n86\nENDCHAR\nSTARTCHAR lambda\nENCODING 955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 9 2 0\nBITMAP\n30\n08\n08\n08\n18\n28\n44\n84\n83\nENDCHAR\nSTARTCHAR U_03BC\nENCODING 956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 0\nBITMAP\n1100\n1100\n2100\n2200\n4200\n6600\n5980\n8000\n8000\nENDCHAR\nSTARTCHAR nu\nENCODING 957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 0\nBITMAP\n42\n22\n24\n44\n48\n50\nE0\nENDCHAR\nSTARTCHAR xi\nENCODING 958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 10 3 0\nBITMAP\n1C\n20\n40\n30\n40\n80\n70\n08\n88\n70\nENDCHAR\nSTARTCHAR omicron\nENCODING 959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 2 0\nBITMAP\n38\n44\n84\n84\n84\n88\n70\nENDCHAR\nSTARTCHAR pi\nENCODING 960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 8 1 0\nBITMAP\n0080\n3F00\n5200\n1400\n2400\n2800\n4900\n8600\nENDCHAR\nSTARTCHAR rho\nENCODING 961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 9 2 0\nBITMAP\n1C\n22\n42\n42\n64\n58\n80\n80\n80\nENDCHAR\nSTARTCHAR sigma\nENCODING 963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 8 2 0\nBITMAP\n01\n1E\n68\n84\n84\n84\n48\n30\nENDCHAR\nSTARTCHAR tau\nENCODING 964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 9 2 0\nBITMAP\n02\n7C\n90\n10\n20\n20\n40\n48\n30\nENDCHAR\nSTARTCHAR upsilon\nENCODING 965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 7 1 0\nBITMAP\n42\nA1\n21\n22\n42\n4C\n30\nENDCHAR\nSTARTCHAR phi\nENCODING 966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n04\n08\n3C\n4A\n89\n91\n92\n7C\n20\n20\nENDCHAR\nSTARTCHAR chi\nENCODING 967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 9 2 0\nBITMAP\n02\n42\nA4\n98\n10\n30\n50\n8A\n84\nENDCHAR\nSTARTCHAR psi\nENCODING 968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n04\n8A\n49\n49\n91\n92\n7C\n20\n20\n20\nENDCHAR\nSTARTCHAR omega\nENCODING 969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 7 1 0\nBITMAP\n2100\n4080\n4080\n8880\n8880\n9900\n6600\nENDCHAR\nSTARTCHAR afii10023\nENCODING 1025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 11 2 -1\nBITMAP\n44\n00\nFE\n42\n40\n48\n78\n48\n40\n42\nFE\nENDCHAR\nSTARTCHAR afii10017\nENCODING 1040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\n0800\n0800\n1400\n1400\n2200\n2200\n3E00\n4100\n4100\nE380\nENDCHAR\nSTARTCHAR afii10018\nENCODING 1041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\nFE\n42\n40\n40\n78\n44\n42\n42\n44\nF8\nENDCHAR\nSTARTCHAR afii10019\nENCODING 1042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\nF8\n44\n42\n44\n78\n44\n42\n42\n44\nF8\nENDCHAR\nSTARTCHAR afii10020\nENCODING 1043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\nFC\n44\n42\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR afii10021\nENCODING 1044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\n3F80\n1200\n1200\n1200\n1200\n1200\n2200\n4200\nFF80\n8080\nENDCHAR\nSTARTCHAR afii10022\nENCODING 1045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\nFE\n41\n40\n44\n7C\n44\n40\n41\n41\nFE\nENDCHAR\nSTARTCHAR afii10024\nENCODING 1046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\n9C80\n4900\n4900\n2A00\n1C00\n2A00\n4A00\n4900\n4900\nDD80\nENDCHAR\nSTARTCHAR afii10025\nENCODING 1047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\n58\n64\n44\n04\n18\n04\n02\n82\nC4\nB8\nENDCHAR\nSTARTCHAR afii10026\nENCODING 1048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\nE3\n46\n4A\n4A\n52\n52\n62\n62\n42\nE7\nENDCHAR\nSTARTCHAR afii10027\nENCODING 1049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n24\n18\nE7\n4A\n4A\n52\n62\n62\n42\nE7\nENDCHAR\nSTARTCHAR afii10028\nENCODING 1050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\nE2\n45\n48\n50\n60\n50\n48\n44\n45\nE2\nENDCHAR\nSTARTCHAR afii10029\nENCODING 1051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\n3F80\n0900\n0900\n0900\n0900\n0900\n1100\n1100\nA100\n4380\nENDCHAR\nSTARTCHAR afii10030\nENCODING 1052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\nC060\n60C0\n60C0\n5140\n5140\n4A40\n4A40\n4440\n4440\nE0E0\nENDCHAR\nSTARTCHAR afii10031\nENCODING 1053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\nE380\n4100\n4100\n4100\n7F00\n4100\n4100\n4100\n4100\nE380\nENDCHAR\nSTARTCHAR afii10032\nENCODING 1054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\n1C00\n2200\n4100\n8080\n8080\n8080\n8080\n4100\n2200\n1C00\nENDCHAR\nSTARTCHAR afii10033\nENCODING 1055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\nFF\n42\n42\n42\n42\n42\n42\n42\n42\nE7\nENDCHAR\nSTARTCHAR afii10034\nENCODING 1056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\nF8\n44\n42\n42\n44\n78\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR afii10035\nENCODING 1057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n1D\n23\n41\n80\n80\n80\n80\n41\n22\n1C\nENDCHAR\nSTARTCHAR afii10036\nENCODING 1058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\nFF80\n8880\n8880\n0800\n0800\n0800\n0800\n0800\n0800\n1C00\nENDCHAR\nSTARTCHAR afii10037\nENCODING 1059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\nE380\n4100\n2200\n2200\n1400\n1400\n0800\n0800\n4800\n3000\nENDCHAR\nSTARTCHAR afii10038\nENCODING 1060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\n1C00\n0800\n3E00\n4900\n8880\n8880\n4900\n3E00\n0800\n1C00\nENDCHAR\nSTARTCHAR afii10039\nENCODING 1061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\nE380\n4100\n2200\n1400\n0800\n0800\n1400\n2200\n4100\nE380\nENDCHAR\nSTARTCHAR afii10040\nENCODING 1062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\nE700\n4200\n4200\n4200\n4200\n4200\n4200\n4200\nFF80\n0080\nENDCHAR\nSTARTCHAR afii10041\nENCODING 1063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 1 0\nBITMAP\nE7\n42\n42\n42\n42\n26\n1A\n02\n02\n07\nENDCHAR\nSTARTCHAR afii10042\nENCODING 1064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\nEEE0\n4440\n4440\n4440\n4440\n4440\n4440\n4440\n4440\nFFE0\nENDCHAR\nSTARTCHAR afii10043\nENCODING 1065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\nEEE0\n4440\n4440\n4440\n4440\n4440\n4440\n4440\nFFE0\n0020\nENDCHAR\nSTARTCHAR afii10044\nENCODING 1066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\n7000\n9000\n1000\n1000\n1E00\n1100\n1080\n1080\n1100\n3E00\nENDCHAR\nSTARTCHAR afii10045\nENCODING 1067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\nC380\n4100\n4100\n4100\n7100\n4900\n4500\n4500\n4900\nF380\nENDCHAR\nSTARTCHAR afii10046\nENCODING 1068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\nE0\n40\n40\n78\n44\n42\n42\n42\n44\nF8\nENDCHAR\nSTARTCHAR afii10047\nENCODING 1069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\nB8\nC4\n82\n02\n02\n1E\n02\n82\n44\n38\nENDCHAR\nSTARTCHAR afii10048\nENCODING 1070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\nE300\n4480\n4840\n4840\n7840\n4840\n4840\n4840\n4480\nE300\nENDCHAR\nSTARTCHAR afii10049\nENCODING 1071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n3F\n42\n42\n42\n3E\n12\n22\n22\nA2\n47\nENDCHAR\nSTARTCHAR afii10065\nENCODING 1072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 3 0\nBITMAP\n30\n48\n38\n48\n88\n90\n6C\nENDCHAR\nSTARTCHAR afii10066\nENCODING 1073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 10 3 0\nBITMAP\n0C\n30\n40\n80\nB0\nC8\n84\n84\n48\n30\nENDCHAR\nSTARTCHAR afii10067\nENCODING 1074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 3 0\nBITMAP\nF8\n44\n44\n78\n44\n44\nF8\nENDCHAR\nSTARTCHAR afii10068\nENCODING 1075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 3 0\nBITMAP\nF8\n44\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR afii10069\nENCODING 1076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 8 1 0\nBITMAP\n3F\n12\n12\n12\n22\n22\nFF\n81\nENDCHAR\nSTARTCHAR afii10070\nENCODING 1077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 3 0\nBITMAP\n30\n48\n84\nFC\n80\n44\n38\nENDCHAR\nSTARTCHAR afii10072\nENCODING 1078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 7 1 0\nBITMAP\nDD80\n2A00\n2A00\n1C00\n2A00\n4900\nDD80\nENDCHAR\nSTARTCHAR afii10073\nENCODING 1079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 3 0\nBITMAP\n38\nC4\n04\n38\n84\n84\n78\nENDCHAR\nSTARTCHAR afii10074\nENCODING 1080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 7 2 0\nBITMAP\nE7\n46\n4A\n52\n62\n42\nE7\nENDCHAR\nSTARTCHAR afii10075\nENCODING 1081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n24\n18\n00\nE7\n46\n4A\n52\n62\n42\nE7\nENDCHAR\nSTARTCHAR afii10076\nENCODING 1082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 0\nBITMAP\nE4\n4A\n50\n60\n50\n4A\nE4\nENDCHAR\nSTARTCHAR afii10077\nENCODING 1083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 0\nBITMAP\n3E\n14\n14\n14\n24\nA4\n4E\nENDCHAR\nSTARTCHAR afii10078\nENCODING 1084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 7 1 0\nBITMAP\nC180\n6300\n6300\n5500\n5500\n4900\nEB80\nENDCHAR\nSTARTCHAR afii10079\nENCODING 1085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 7 2 0\nBITMAP\nE7\n42\n42\n7E\n42\n42\nE7\nENDCHAR\nSTARTCHAR afii10080\nENCODING 1086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 0\nBITMAP\n38\n44\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR afii10081\nENCODING 1087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 0\nBITMAP\nFE\n44\n44\n44\n44\n44\nEE\nENDCHAR\nSTARTCHAR afii10082\nENCODING 1088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 8 2 -1\nBITMAP\nD8\n64\n42\n42\n64\n58\n40\nE0\nENDCHAR\nSTARTCHAR afii10083\nENCODING 1089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 2 0\nBITMAP\n38\n44\n80\n80\n80\n44\n38\nENDCHAR\nSTARTCHAR afii10084\nENCODING 1090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 0\nBITMAP\nFE\n92\n10\n10\n10\n10\n38\nENDCHAR\nSTARTCHAR afii10085\nENCODING 1091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 9 2 -1\nBITMAP\nE7\n42\n22\n14\n08\n08\n10\n90\n60\nENDCHAR\nSTARTCHAR afii10086\nENCODING 1092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n1C00\n0800\n2A00\n5D00\n8880\n8880\n8880\n5D00\n2A00\n0800\n1C00\nENDCHAR\nSTARTCHAR afii10087\nENCODING 1093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 0\nBITMAP\nEE\n44\n28\n10\n28\n44\nEE\nENDCHAR\nSTARTCHAR afii10088\nENCODING 1094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 8 2 -1\nBITMAP\nEE\n44\n44\n44\n44\n44\nFE\n02\nENDCHAR\nSTARTCHAR afii10089\nENCODING 1095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 0\nBITMAP\nEE\n44\n44\n3C\n04\n04\n0E\nENDCHAR\nSTARTCHAR afii10090\nENCODING 1096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 7 1 0\nBITMAP\nDD80\n4900\n4900\n4900\n4900\n4900\nFF80\nENDCHAR\nSTARTCHAR afii10091\nENCODING 1097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 8 0 -1\nBITMAP\nDD80\n4900\n4900\n4900\n4900\n4900\n7FC0\n0040\nENDCHAR\nSTARTCHAR afii10092\nENCODING 1098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 0\nBITMAP\n60\nA0\n3C\n22\n22\n22\n7C\nENDCHAR\nSTARTCHAR afii10093\nENCODING 1099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 7 2 0\nBITMAP\nE7\n42\n42\n72\n4A\n4A\nF7\nENDCHAR\nSTARTCHAR afii10094\nENCODING 1100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 3 0\nBITMAP\nE0\n40\n78\n44\n44\n44\nF8\nENDCHAR\nSTARTCHAR afii10095\nENCODING 1101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 3 0\nBITMAP\n78\n84\n04\n7C\n04\n84\n78\nENDCHAR\nSTARTCHAR afii10096\nENCODING 1102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 7 1 0\nBITMAP\nE600\n4900\n5080\n7080\n5080\n4900\nE600\nENDCHAR\nSTARTCHAR afii10097\nENCODING 1103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 0\nBITMAP\n3E\n44\n44\n3C\n24\n44\nEE\nENDCHAR\nSTARTCHAR afii10071\nENCODING 1105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 9 3 0\nBITMAP\n48\n00\n30\n48\n84\nFC\n80\n44\n38\nENDCHAR\nSTARTCHAR U_1100\nENCODING 4352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\nFF80\n0080\n0080\n0080\n0080\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_1101\nENCODING 4353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFBE0\n0820\n0820\n0820\n0820\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_1102\nENCODING 4354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n8000\n8000\n8000\n8000\nFF80\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_1103\nENCODING 4355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFC0\n4000\n4000\n7FC0\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_1104\nENCODING 4356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFBE0\n4200\n4200\n5A00\n63E0\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_1105\nENCODING 4357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\nFF80\n0080\nFF80\n4000\n7F80\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_1106\nENCODING 4358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n4040\n4040\n7FC0\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_1107\nENCODING 4359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n8080\nFF80\n8080\nFF80\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_1108\nENCODING 4360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8A20\nFBE0\n8A20\n8A20\nFBE0\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_1109\nENCODING 4361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\n0A00\n3180\nC060\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_110A\nENCODING 4362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\n1100\n2A80\n4440\n8840\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_110B\nENCODING 4363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n7F00\n8080\n8080\n7F00\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_110C\nENCODING 4364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\nFF80\n0100\n0600\n1980\nE040\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_110D\nENCODING 4365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n1100\n2A80\n4440\n8800\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_110E\nENCODING 4366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n0000\nFFE0\n0200\n0D80\nF040\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_110F\nENCODING 4367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\nFF80\n0080\n0080\nFF80\n0080\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_1110\nENCODING 4368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFC0\n4000\n7F80\n4000\n7FC0\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_1111\nENCODING 4369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\nFF80\n2200\n2200\nFF80\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_1112\nENCODING 4370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F00\n0000\nFFC0\n0000\n3F00\n4080\n4080\n3F00\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_1113\nENCODING 4371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n8F80\n8080\n8080\nF080\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_1114\nENCODING 4372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n8400\n8400\nB400\nC780\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_112C\nENCODING 4396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n9480\n9480\nF780\n9480\nF780\n0000\n3E00\n6300\n4100\n6300\n3E00\nENDCHAR\nSTARTCHAR U_112D\nENCODING 4397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n13E0\n1020\n1020\n1020\n2820\n4420\n8220\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_1133\nENCODING 4403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n4AE0\n4A20\n4E20\nAA20\nAA20\nAE20\n0000\n0000\nENDCHAR\nSTARTCHAR U_1134\nENCODING 4404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n4440\n4440\n4440\nAAA0\nAAA0\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_1135\nENCODING 4405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n21C0\n2220\n2220\n5220\n5220\n89C0\n0000\n0000\nENDCHAR\nSTARTCHAR U_113B\nENCODING 4411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n21C0\n2000\n23E0\n5140\n5220\n89C0\n0000\n0000\nENDCHAR\nSTARTCHAR endash\nENCODING 8211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 1 1 4\nBITMAP\nFFE0\nENDCHAR\nSTARTCHAR emdash\nENCODING 8212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 1 1 4\nBITMAP\nFFE0\nENDCHAR\nSTARTCHAR U_2016\nENCODING 8214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 4 12 4 -1\nBITMAP\n90\n90\n90\n90\n90\n90\n90\n90\n90\n90\n90\n90\nENDCHAR\nSTARTCHAR quoteleft\nENCODING 8216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 2 4 8 7\nBITMAP\n40\n80\nC0\nC0\nENDCHAR\nSTARTCHAR quoteright\nENCODING 8217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 2 4 2 7\nBITMAP\nC0\nC0\n40\n80\nENDCHAR\nSTARTCHAR quotedblleft\nENCODING 8220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 4 6 7\nBITMAP\n48\n90\nD8\nD8\nENDCHAR\nSTARTCHAR quotedblright\nENCODING 8221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 4 1 7\nBITMAP\nD8\nD8\n48\n90\nENDCHAR\nSTARTCHAR bullet\nENCODING 8226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 2 2 5 4\nBITMAP\nC0\nC0\nENDCHAR\nSTARTCHAR twodotenleader\nENCODING 8229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 1 2 4\nBITMAP\nC180\nENDCHAR\nSTARTCHAR ellipsis\nENCODING 8230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 1 1 4\nBITMAP\nC660\nENDCHAR\nSTARTCHAR U_2027\nENCODING 8231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 2 2 5 4\nBITMAP\nC0\nC0\nENDCHAR\nSTARTCHAR perthousand\nENCODING 8240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n4000\nA000\nA100\nA200\nA400\nAA20\n4D50\n1550\n2550\n4550\n8550\n0220\nENDCHAR\nSTARTCHAR minute\nENCODING 8242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 2 2 2 8\nBITMAP\n40\n80\nENDCHAR\nSTARTCHAR second\nENCODING 8243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 4 3 1 8\nBITMAP\n40\n50\nA0\nENDCHAR\nSTARTCHAR U_2035\nENCODING 8245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 2 2 9 8\nBITMAP\n80\n40\nENDCHAR\nSTARTCHAR U_203B\nENCODING 8251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n8C40\n4C80\n2100\n1200\nCCC0\nC4C0\n0A00\n1100\n2080\n4C40\n8C20\nENDCHAR\nSTARTCHAR U_203E\nENCODING 8254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 1 0 10\nBITMAP\nFFF0\nENDCHAR\nSTARTCHAR Euro\nENCODING 8364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\n1C\n22\n40\n40\nF8\n40\nF8\n40\n22\n1C\nENDCHAR\nSTARTCHAR U_2103\nENCODING 8451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 0 0\nBITMAP\n6380\n9440\n6400\n0800\n0800\n0800\n0800\n0400\n0440\n0380\nENDCHAR\nSTARTCHAR afii61248\nENCODING 8453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3020\n4840\n8080\n8100\n4A80\n3540\n0A20\n1220\n2220\n4140\n8080\nENDCHAR\nSTARTCHAR U_2109\nENCODING 8457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\n4FE0\nA420\nA400\n4480\n0780\n0480\n0400\n0400\n0400\n0E00\nENDCHAR\nSTARTCHAR afii61352\nENCODING 8470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\nCE00\n4400\n6400\n64C0\n5520\n5520\n4D20\n4CC0\n4400\nE5E0\nENDCHAR\nSTARTCHAR U_2153\nENCODING 8531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4080\nC100\n4100\n4200\n4200\n44C0\nE520\n0840\n0820\n1120\n10C0\nENDCHAR\nSTARTCHAR U_2154\nENCODING 8532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n6100\n9100\n2200\n4200\n8400\nF4C0\n0920\n0840\n1020\n1120\n20C0\nENDCHAR\nSTARTCHAR U_2155\nENCODING 8533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4080\nC100\n4100\n4200\n4200\n45E0\nE500\n09C0\n0820\n1120\n10C0\nENDCHAR\nSTARTCHAR U_2156\nENCODING 8534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n6080\n9100\n2100\n4200\n8200\nF5E0\n0500\n09C0\n0820\n1120\n10C0\nENDCHAR\nSTARTCHAR U_2157\nENCODING 8535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n6080\n9100\n2100\n1200\n9200\n65E0\n0500\n09C0\n0820\n1120\n10C0\nENDCHAR\nSTARTCHAR U_2158\nENCODING 8536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\n3100\n5200\nFA00\n1400\n1500\n09E0\n0900\n11C0\n1020\n21C0\nENDCHAR\nSTARTCHAR U_2159\nENCODING 8537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\nC200\n4200\n4400\n4480\nE900\n0A00\n1380\n1240\n2240\n2180\nENDCHAR\nSTARTCHAR U_215A\nENCODING 8538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF020\n8040\nE080\n1100\n1240\nE480\n0900\n11C0\n2120\n4120\n80C0\nENDCHAR\nSTARTCHAR U_215B\nENCODING 8539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4080\nC100\n4100\n4200\n4200\n44C0\nE520\n08C0\n0920\n1120\n10C0\nENDCHAR\nSTARTCHAR U_215C\nENCODING 8540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n6080\n9100\n2100\n1200\n9200\n64C0\n0520\n08C0\n0920\n1120\n10C0\nENDCHAR\nSTARTCHAR U_215D\nENCODING 8541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF080\n8100\nE100\n1200\n1200\n94C0\n6520\n08C0\n0920\n1120\n10C0\nENDCHAR\nSTARTCHAR U_215E\nENCODING 8542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF080\n1100\n2100\n2200\n4200\n44C0\n4520\n08C0\n0920\n1120\n10C0\nENDCHAR\nSTARTCHAR U_215F\nENCODING 8543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\nC100\n4200\n4200\nE400\n0400\n0800\n0800\n1000\n1000\n2000\nENDCHAR\nSTARTCHAR U_2160\nENCODING 8544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 3 11 5 0\nBITMAP\nE0\n40\n40\n40\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_2161\nENCODING 8545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 11 2 0\nBITMAP\nE7\n42\n42\n42\n42\n42\n42\n42\n42\n42\nE7\nENDCHAR\nSTARTCHAR U_2162\nENCODING 8546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 0\nBITMAP\nEEE0\n4440\n4440\n4440\n4440\n4440\n4440\n4440\n4440\n4440\nEEE0\nENDCHAR\nSTARTCHAR U_2163\nENCODING 8547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 0\nBITMAP\nEEE0\n4440\n4440\n4440\n4280\n4280\n4280\n4280\n4100\n4100\nE100\nENDCHAR\nSTARTCHAR U_2164\nENCODING 8548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 2 0\nBITMAP\nE380\n4100\n4100\n2200\n2200\n2200\n1400\n1400\n0800\n0800\n0800\nENDCHAR\nSTARTCHAR U_2165\nENCODING 8549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 0\nBITMAP\nEEE0\n4440\n4440\n4440\n2840\n2840\n2840\n2840\n1040\n1040\n10E0\nENDCHAR\nSTARTCHAR U_2166\nENCODING 8550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 11 0 0\nBITMAP\nEFF0\n4520\n4520\n4520\n2920\n2920\n2920\n2920\n1120\n1120\n13F0\nENDCHAR\nSTARTCHAR U_2167\nENCODING 8551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 11 0 0\nBITMAP\n8BF0\n8AA0\n8AA0\n8AA0\n52A0\n52A0\n52A0\n22A0\n22A0\n22A0\n23F0\nENDCHAR\nSTARTCHAR U_2168\nENCODING 8552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 0\nBITMAP\nEEE0\n4440\n4280\n4280\n4100\n4100\n4280\n4280\n4440\n4440\nEEE0\nENDCHAR\nSTARTCHAR U_2169\nENCODING 8553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 11 2 0\nBITMAP\nE7\n42\n42\n24\n24\n18\n18\n24\n42\n42\nE7\nENDCHAR\nSTARTCHAR U_216A\nENCODING 8554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 0\nBITMAP\nEEE0\n4440\n2840\n2840\n1040\n1040\n1040\n2840\n2840\n4440\nEEE0\nENDCHAR\nSTARTCHAR U_216B\nENCODING 8555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 11 0 0\nBITMAP\nEFF0\n44A0\n44A0\n28A0\n28A0\n10A0\n10A0\n28A0\n28A0\n44A0\nE7F0\nENDCHAR\nSTARTCHAR uni2170\nENCODING 8560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 3 9 5 0\nBITMAP\n40\n00\n00\nC0\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR uni2171\nENCODING 8561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 9 3 0\nBITMAP\n48\n00\n00\nD8\n48\n48\n48\n48\nFC\nENDCHAR\nSTARTCHAR uni2172\nENCODING 8562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 2 0\nBITMAP\n4900\n0000\n0000\nDB00\n4900\n4900\n4900\n4900\nFF80\nENDCHAR\nSTARTCHAR uni2173\nENCODING 8563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 2 0\nBITMAP\n4000\n0000\n0000\nCD80\n4500\n4500\n4500\n4200\nE200\nENDCHAR\nSTARTCHAR uni2174\nENCODING 8564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 6 2 0\nBITMAP\nEE\n44\n28\n28\n10\n10\nENDCHAR\nSTARTCHAR U_2190\nENCODING 8592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n1000\n3000\n7000\nFFE0\n7000\n3000\n1000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2191\nENCODING 8593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 11 4 -1\nBITMAP\n20\n70\nF8\n20\n20\n20\n20\n20\n20\n20\n20\nENDCHAR\nSTARTCHAR U_2192\nENCODING 8594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 5 0 2\nBITMAP\n0080\n0040\nFFE0\n0040\n0080\nENDCHAR\nSTARTCHAR U_2193\nENCODING 8595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 11 4 -1\nBITMAP\n20\n20\n20\n20\n20\n20\n20\n20\nA8\n70\n20\nENDCHAR\nSTARTCHAR U_2194\nENCODING 8596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n2200\n4100\nFF80\n4100\n2200\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2195\nENCODING 8597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n2000\n7000\nA800\n2000\n2000\nA800\n7000\n2000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2196\nENCODING 8598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF000\nE000\nE000\n9000\n0800\n0400\n0200\n0100\n0080\n0040\n0020\nENDCHAR\nSTARTCHAR U_2197\nENCODING 8599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n01E0\n0060\n00A0\n0120\n0200\n0400\n0800\n1000\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_2198\nENCODING 8600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8000\n4000\n2000\n1000\n0800\n0400\n0200\n0120\n00E0\n00E0\n01E0\nENDCHAR\nSTARTCHAR U_2199\nENCODING 8601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0020\n0040\n0080\n0100\n0200\n0400\n0800\n9000\nE000\nE000\nF000\nENDCHAR\nSTARTCHAR U_219A\nENCODING 8602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n2080\n4100\nFFE0\n4200\n2400\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_219B\nENCODING 8603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0100\n0480\n0840\nFFE0\n2040\n4080\n0100\n0000\n0000\nENDCHAR\nSTARTCHAR U_219C\nENCODING 8604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nF000\nC300\nE780\nBCC0\n9860\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_219D\nENCODING 8605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n03E0\n00E0\n38E0\n6DA0\nC720\n8000\n0000\n0000\nENDCHAR\nSTARTCHAR U_219E\nENCODING 8606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n1200\n2400\n4800\nFFE0\n4800\n2400\n1200\n0000\n0000\nENDCHAR\nSTARTCHAR U_219F\nENCODING 8607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n3800\n5400\n9200\n3800\n5400\n9200\n1000\n1000\n1000\n1000\nENDCHAR\nSTARTCHAR U_21A0\nENCODING 8608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0900\n0480\n0240\nFFE0\n0240\n0480\n0900\n0000\n0000\nENDCHAR\nSTARTCHAR U_21A1\nENCODING 8609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n1000\n1000\n9200\n5400\n3800\n1000\n9200\n5400\n3800\n1000\nENDCHAR\nSTARTCHAR U_21A2\nENCODING 8610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n1020\n2040\n4080\nFF80\n4080\n2040\n1020\n0000\n0000\nENDCHAR\nSTARTCHAR U_21A3\nENCODING 8611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n8100\n4080\n2040\n1FE0\n2040\n4080\n8100\n0000\nENDCHAR\nSTARTCHAR U_21A4\nENCODING 8612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0020\n1020\n2020\n4020\nFFE0\n4020\n2020\n1020\n0020\n0000\nENDCHAR\nSTARTCHAR U_21A5\nENCODING 8613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n1C00\n2A00\n4900\n0800\n0800\n0800\n0800\n0800\n0800\nFF80\nENDCHAR\nSTARTCHAR U_21A6\nENCODING 8614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nC000\nC180\nC0C0\nC060\nFFE0\nC060\nC0C0\nC180\nC000\n0000\nENDCHAR\nSTARTCHAR U_21A7\nENCODING 8615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFE00\n1000\n1000\n1000\n1000\n1000\n1000\n9200\n5400\n3800\n1000\nENDCHAR\nSTARTCHAR U_21A8\nENCODING 8616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n1C00\n2A00\n4900\n0800\n0800\n0800\n4900\n2A00\n1C00\nFF80\nENDCHAR\nSTARTCHAR U_21A9\nENCODING 8617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0080\n1040\n2020\n4020\nFFC0\n4000\n2000\n1000\nENDCHAR\nSTARTCHAR U_21AA\nENCODING 8618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n4000\n8080\n8040\n7FE0\n0040\n0080\n0000\nENDCHAR\nSTARTCHAR U_21AB\nENCODING 8619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n13C0\n2660\n4420\nFFE0\n4400\n2400\n1000\n0000\nENDCHAR\nSTARTCHAR U_21AC\nENCODING 8620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n7000\n9880\nC840\n7FE0\n0840\n0880\n0000\n0000\nENDCHAR\nSTARTCHAR U_21AD\nENCODING 8621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n2080\n4E40\nEAE0\n5140\n2080\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21AE\nENCODING 8622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n2080\n4240\n8420\nFFE0\n8820\n5040\n2080\n0000\n0000\nENDCHAR\nSTARTCHAR U_21AF\nENCODING 8623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8000\n8200\n8600\n8A00\n9200\nA200\nC200\n9240\n0A80\n0700\n0200\nENDCHAR\nSTARTCHAR U_21B0\nENCODING 8624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n2000\n4000\nFC00\n4400\n2400\n0400\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_21B1\nENCODING 8625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n1000\n0800\nFC00\n8800\n9000\n8000\n8000\n8000\n8000\n8000\nENDCHAR\nSTARTCHAR U_21B2\nENCODING 8626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\n0400\n0400\n0400\n0400\n2400\n4400\nFC00\n4000\n2000\nENDCHAR\nSTARTCHAR U_21B3\nENCODING 8627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8000\n8000\n8000\n8000\n8000\n8000\n9000\n8800\nFC00\n0800\n1000\nENDCHAR\nSTARTCHAR U_21B4\nENCODING 8628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF800\n0800\n0800\n0800\n0800\n0800\n0800\n4900\n2A00\n1C00\n0800\nENDCHAR\nSTARTCHAR U_21B5\nENCODING 8629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0020\n0020\n0020\n2020\n4020\nFFE0\n4000\n2000\nENDCHAR\nSTARTCHAR U_21B6\nENCODING 8630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0F80\n1DC0\n3060\n2020\nA800\n7000\n2000\nENDCHAR\nSTARTCHAR U_21B7\nENCODING 8631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n1F00\n3180\n6080\n4080\nC2A0\n01C0\n0080\nENDCHAR\nSTARTCHAR U_21B8\nENCODING 8632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n0000\nF000\nC000\nA000\n9000\n0800\n0400\n0200\n0100\n0080\nENDCHAR\nSTARTCHAR U_21B9\nENCODING 8633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n9000\nA000\nFFE0\nA000\n9000\n0120\n00A0\nFFE0\n00A0\n0120\n0000\nENDCHAR\nSTARTCHAR U_21BA\nENCODING 8634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n03C0\n0300\n4280\n8240\n8040\n8040\n4080\n2100\n1E00\n0000\n0000\nENDCHAR\nSTARTCHAR U_21BB\nENCODING 8635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\nF000\n3000\n5200\n9100\n8100\n8100\n4200\n3C00\nENDCHAR\nSTARTCHAR U_21BC\nENCODING 8636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n2000\n4000\nFFE0\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21BD\nENCODING 8637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n4000\n2000\n1000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21BE\nENCODING 8638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8000\nC000\nA000\n9000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\nENDCHAR\nSTARTCHAR U_21BF\nENCODING 8639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n3000\n5000\n9000\n1000\n1000\n1000\n1000\n1000\n1000\n1000\nENDCHAR\nSTARTCHAR U_21C0\nENCODING 8640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0080\n0040\nFFE0\n0000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21C1\nENCODING 8641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nFFE0\n0040\n0080\nENDCHAR\nSTARTCHAR U_21C2\nENCODING 8642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\nA000\nC000\n8000\nENDCHAR\nSTARTCHAR U_21C3\nENCODING 8643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2000\n2000\n2000\n2000\n2000\n2000\n2000\n2000\nA000\n6000\n2000\nENDCHAR\nSTARTCHAR U_21C4\nENCODING 8644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0080\n0040\nFFE0\n0040\n2080\n4000\nFFE0\n4000\n2000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21C5\nENCODING 8645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2200\n7200\nAA00\n2200\n2200\n2200\n2200\n2200\n2A80\n2700\n2200\nENDCHAR\nSTARTCHAR U_21C6\nENCODING 8646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n2000\n4000\nFFE0\n4000\n2080\n0040\nFFE0\n0040\n0080\nENDCHAR\nSTARTCHAR U_21C7\nENCODING 8647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2000\n4000\nFFE0\n4000\n2000\n2000\n4000\nFFE0\n4000\n2000\n0000\nENDCHAR\nSTARTCHAR U_21C8\nENCODING 8648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n7380\nAD40\n2100\n2100\n2100\n2100\n2100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_21C9\nENCODING 8649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0080\n0040\nFFE0\n0040\n0080\n0080\n0040\nFFE0\n0040\n0080\n0000\nENDCHAR\nSTARTCHAR U_21CA\nENCODING 8650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n2100\n2100\n2100\n2100\n2100\n2100\n2100\nAD40\n7380\n2100\nENDCHAR\nSTARTCHAR U_21CB\nENCODING 8651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n2000\n4000\nFFE0\n0000\nFFE0\n0040\n0080\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21CC\nENCODING 8652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0100\n0080\n0040\nFFE0\n0000\nFFE0\n4000\n2000\n1000\nENDCHAR\nSTARTCHAR U_21CD\nENCODING 8653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n1080\n2100\n7FE0\n8400\n7FE0\n2800\n1000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21CE\nENCODING 8654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0200\n2280\n7FC0\n8420\n8420\n7FC0\n2880\n0800\n0000\n0000\nENDCHAR\nSTARTCHAR U_21CF\nENCODING 8655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0300\n0480\nFFC0\n0820\n1020\nFFC0\n2080\n4100\n0000\n0000\nENDCHAR\nSTARTCHAR U_21D0\nENCODING 8656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n1000\n2000\n7FE0\n8000\n8000\n7FE0\n2000\n1000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21D1\nENCODING 8657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1800\n2400\n6600\nA500\n2400\n2400\n2400\n2400\n2400\n2400\n2400\nENDCHAR\nSTARTCHAR U_21D2\nENCODING 8658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0100\n0080\nFFC0\n0020\nFFC0\n0080\n0100\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21D3\nENCODING 8659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2800\n2800\n2800\n2800\n2800\n2800\n2800\nAA00\n6C00\n2800\n1000\nENDCHAR\nSTARTCHAR U_21D4\nENCODING 8660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n2080\n7FC0\n8020\n7FC0\n2080\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21D5\nENCODING 8661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3000\n4800\nCC00\n4800\n4800\n4800\n4800\n4800\nCC00\n4800\n3000\nENDCHAR\nSTARTCHAR U_21D6\nENCODING 8662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF800\n9000\n8800\nC400\nA200\n1100\n0880\n0440\n0220\n0100\n0080\nENDCHAR\nSTARTCHAR U_21D7\nENCODING 8663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1FE0\n0360\n0620\n0C60\n18E0\n31A0\n6320\nC620\n8C00\n1800\n3000\nENDCHAR\nSTARTCHAR U_21D8\nENCODING 8664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2000\n1000\n8800\n4400\n2200\n1100\n08A0\n0460\n0220\n0120\n03E0\nENDCHAR\nSTARTCHAR U_21D9\nENCODING 8665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0080\n0100\n0220\n0440\n0880\n1100\nA200\nC400\n8800\n9000\nF800\nENDCHAR\nSTARTCHAR U_21DA\nENCODING 8666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n2000\n7FE0\n8000\nFFE0\n8000\n7FE0\n2000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21DB\nENCODING 8667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0100\nFF80\n0040\nFFE0\n0040\nFF80\n0100\n0000\n0000\nENDCHAR\nSTARTCHAR U_21DC\nENCODING 8668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n2000\n4440\nEAA0\n5100\n2000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21DD\nENCODING 8669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0080\n4440\nAAE0\n1140\n0080\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21DE\nENCODING 8670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2000\n7000\nA800\n2000\n2000\nF800\n2000\nF800\n2000\n2000\n2000\nENDCHAR\nSTARTCHAR U_21DF\nENCODING 8671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n1000\nFE00\n1000\n1000\nFE00\n1000\n9200\n5400\n3800\n1000\nENDCHAR\nSTARTCHAR U_21E0\nENCODING 8672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n2000\n4000\nF760\n4000\n2000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21E1\nENCODING 8673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n3800\n5400\n9200\n0000\n1000\n1000\n0000\n1000\n1000\n1000\nENDCHAR\nSTARTCHAR U_21E2\nENCODING 8674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0080\n0040\nDBE0\n0040\n0080\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21E3\nENCODING 8675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n1000\n0000\n1000\n1000\n0000\n1000\n9200\n5400\n3800\n1000\nENDCHAR\nSTARTCHAR U_21E4\nENCODING 8676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n9000\nA000\nFFE0\nA000\n9000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21E5\nENCODING 8677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0120\n00A0\n0060\nFFE0\n0060\n00A0\n0120\n0000\n0000\nENDCHAR\nSTARTCHAR U_21E6\nENCODING 8678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n1000\n3000\n5FE0\n8020\n5FE0\n3000\n1000\n0000\n0000\nENDCHAR\nSTARTCHAR U_21E7\nENCODING 8679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n2800\n4400\nEE00\n2800\n2800\n2800\n2800\n2800\n2800\n3800\nENDCHAR\nSTARTCHAR U_21E8\nENCODING 8680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0100\n0180\nFF40\n8020\nFF40\n0180\n0100\n0000\n0000\nENDCHAR\nSTARTCHAR U_21E9\nENCODING 8681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3800\n2800\n2800\n2800\n2800\n2800\n2800\nEE00\n4400\n2800\n1000\nENDCHAR\nSTARTCHAR U_21EA\nENCODING 8682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1800\n2400\n4200\nE700\n2400\n2400\n3C00\n0000\n3C00\n2400\n3C00\nENDCHAR\nSTARTCHAR U_2200\nENCODING 8704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8200\n8200\n8200\n4400\n7C00\n4400\n2800\n2800\n2800\n1000\n1000\nENDCHAR\nSTARTCHAR U_2201\nENCODING 8705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n6000\n9000\n9000\n8000\n8000\n8000\n8000\n8000\n9000\n9000\n6000\nENDCHAR\nSTARTCHAR U_2202\nENCODING 8706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n3800\n4400\n0400\n0400\n3C00\n4400\n8800\n9000\n6000\nENDCHAR\nSTARTCHAR U_2203\nENCODING 8707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFC00\n0400\n0400\n0400\n0400\n7C00\n0400\n0400\n0400\n0400\nFC00\nENDCHAR\nSTARTCHAR U_2204\nENCODING 8708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\nFC00\n1400\n1400\n1400\n7C00\n2400\n2400\n2400\nFC00\n4000\nENDCHAR\nSTARTCHAR U_2205\nENCODING 8709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n1E40\n2180\n4180\n8240\n8440\n8840\n9040\n6080\n6100\n9E00\nENDCHAR\nSTARTCHAR U_2206\nENCODING 8710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n1000\n1000\n2800\n2800\n4400\n4400\n8200\n8200\nFE00\nENDCHAR\nSTARTCHAR U_2207\nENCODING 8711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nFE00\n8200\n8200\n4400\n4400\n2800\n2800\n1000\n1000\nENDCHAR\nSTARTCHAR U_2208\nENCODING 8712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 10 3 0\nBITMAP\n1C\n20\n40\n80\nFC\n80\n80\n40\n20\n1C\nENDCHAR\nSTARTCHAR U_2209\nENCODING 8713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0400\n3E00\n4800\n8800\nFC00\n9000\n5000\n3E00\n2000\n0000\nENDCHAR\nSTARTCHAR U_220A\nENCODING 8714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n7000\n8000\nF000\n8000\n7000\n0000\n0000\nENDCHAR\nSTARTCHAR U_220B\nENCODING 8715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nF800\n0400\n0200\nFE00\n0200\n0400\nF800\n0000\n0000\nENDCHAR\nSTARTCHAR U_220C\nENCODING 8716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\nFF00\n08C0\n0840\n0820\nFFE0\n1020\n1040\n10C0\nFF00\n2000\nENDCHAR\nSTARTCHAR U_220D\nENCODING 8717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n7800\n0400\n0200\n0200\n7E00\n0200\n0400\n0800\nF000\nENDCHAR\nSTARTCHAR U_220E\nENCODING 8718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFF80\nFF80\nFF80\nFF80\nFF80\nFF80\nFF80\nFF80\nFF80\n0000\nENDCHAR\nSTARTCHAR U_220F\nENCODING 8719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\nFF80\n4100\n4100\n4100\n4100\n4100\n4100\n4100\n4100\nE380\nENDCHAR\nSTARTCHAR U_2210\nENCODING 8720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8200\n8200\n8200\n8200\n8200\n8200\n8200\n8200\n8200\n8200\nFE00\nENDCHAR\nSTARTCHAR U_2211\nENCODING 8721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\nFF\n41\n20\n10\n08\n08\n10\n20\n41\nFF\nENDCHAR\nSTARTCHAR U_2212\nENCODING 8722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\nFE00\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2213\nENCODING 8723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nF800\n0000\n2000\n2000\nF800\n2000\n2000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2214\nENCODING 8724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n1000\n0000\n1000\n1000\n1000\nFE00\n1000\n1000\n1000\n0000\nENDCHAR\nSTARTCHAR U_2215\nENCODING 8725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 11 3 -1\nBITMAP\n04\n08\n08\n10\n10\n20\n20\n40\n40\n80\n80\nENDCHAR\nSTARTCHAR U_2216\nENCODING 8726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8000\n8000\n4000\n4000\n2000\n2000\n1000\n1000\n0800\n0800\nENDCHAR\nSTARTCHAR U_2217\nENCODING 8727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n2000\nA800\n7000\n7000\nA800\n2000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2218\nENCODING 8728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n6000\n9000\n9000\n6000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2219\nENCODING 8729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\nC000\nC000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_221A\nENCODING 8730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n03E0\n0200\n0400\n0400\n0800\n0800\n4800\nD000\n5000\n2000\n2000\nENDCHAR\nSTARTCHAR U_221B\nENCODING 8731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nCF00\n2800\n4800\n3000\nD000\n1000\n2000\nA000\nA000\n4000\n4000\nENDCHAR\nSTARTCHAR U_221C\nENCODING 8732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nA400\nA400\nF400\n2800\n0800\n0800\nD000\n5000\n5000\n2000\n2000\nENDCHAR\nSTARTCHAR U_221D\nENCODING 8733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 6 0 2\nBITMAP\n3870\n4480\n8300\n8300\n4480\n3870\nENDCHAR\nSTARTCHAR U_221E\nENCODING 8734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 6 0 2\nBITMAP\n38E0\n4510\n8208\n8208\n4510\n38E0\nENDCHAR\nSTARTCHAR U_221F\nENCODING 8735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 2 1\nBITMAP\n0000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\nFFE0\nENDCHAR\nSTARTCHAR U_2220\nENCODING 8736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 9 1 1\nBITMAP\n0080\n0100\n0200\n0400\n0800\n1000\n2000\n4000\nFF80\nENDCHAR\nSTARTCHAR U_2221\nENCODING 8737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0040\n0080\n0100\n0200\n1C00\n0A00\n1100\n2080\n4080\nFFE0\n0080\nENDCHAR\nSTARTCHAR U_2222\nENCODING 8738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0020\n02C0\n0300\n0D00\n3080\nC080\n3080\n0D00\n0300\n02C0\n0020\nENDCHAR\nSTARTCHAR U_2223\nENCODING 8739\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 1 12 0 -1\nBITMAP\n80\n80\n80\n80\n80\n80\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_2224\nENCODING 8740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2000\n2000\n2000\n2800\n3000\n6000\nA000\n2000\n2000\n2000\n2000\nENDCHAR\nSTARTCHAR U_2225\nENCODING 8741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 3 11 4 -1\nBITMAP\nA0\nA0\nA0\nA0\nA0\nA0\nA0\nA0\nA0\nA0\nA0\nENDCHAR\nSTARTCHAR U_2226\nENCODING 8742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2400\n2400\n2400\n2500\n2600\n2C00\n3400\n6400\nA400\n2400\n2400\nENDCHAR\nSTARTCHAR U_2227\nENCODING 8743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 2 1\nBITMAP\n0800\n0800\n1400\n1400\n2200\n2200\n4100\n4100\n8080\nENDCHAR\nSTARTCHAR U_2228\nENCODING 8744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 1\nBITMAP\n8080\n4100\n4100\n2200\n2200\n1400\n1400\n0800\n0800\nENDCHAR\nSTARTCHAR U_2229\nENCODING 8745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\n38\n44\n82\n82\n82\n82\n82\n82\n82\n82\nENDCHAR\nSTARTCHAR U_222A\nENCODING 8746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 0\nBITMAP\n81\n81\n81\n81\n81\n81\n81\n81\n42\n3C\nENDCHAR\nSTARTCHAR U_222B\nENCODING 8747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 11 4 -1\nBITMAP\n10\n28\n20\n20\n20\n20\n20\n20\n20\nA0\n40\nENDCHAR\nSTARTCHAR U_222C\nENCODING 8748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1B00\n2400\n2400\n2400\n2400\n2400\n2400\n2400\n2400\nA400\n5800\nENDCHAR\nSTARTCHAR U_222D\nENCODING 8749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2A00\n5400\n5400\n5400\n5400\n5400\n5400\n5400\n5400\n5400\nA800\nENDCHAR\nSTARTCHAR U_222E\nENCODING 8750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 11 3 -1\nBITMAP\n10\n28\n20\n70\nA8\nA8\n70\n20\n20\nA0\n40\nENDCHAR\nSTARTCHAR U_222F\nENCODING 8751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1400\n2800\n2800\n2800\n7C00\nAA00\nAA00\n7C00\n2800\n2800\n5000\nENDCHAR\nSTARTCHAR U_2230\nENCODING 8752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1500\n2A80\n2A00\n7F00\nAA80\nAA80\n7F00\n2A00\n2A00\nAA00\n5400\nENDCHAR\nSTARTCHAR U_2231\nENCODING 8753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1800\n2000\n2000\n7000\nA800\nBC00\n2800\n2000\n2000\n2000\nC000\nENDCHAR\nSTARTCHAR U_2232\nENCODING 8754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0C00\n1000\n3800\n5600\n9700\n9A80\n9200\n5400\n3800\n1000\n6000\nENDCHAR\nSTARTCHAR U_2233\nENCODING 8755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0C00\n1200\n1000\n3800\n5400\n5E00\n5400\n3800\n1000\n9000\n6000\nENDCHAR\nSTARTCHAR U_2234\nENCODING 8756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 8 2 0\nBITMAP\n1800\n1800\n0000\n0000\n0000\n0000\nC300\nC300\nENDCHAR\nSTARTCHAR U_2235\nENCODING 8757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 8 2 0\nBITMAP\nC180\nC180\n0000\n0000\n0000\n0000\n1800\n1800\nENDCHAR\nSTARTCHAR U_2236\nENCODING 8758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 1 7 5 1\nBITMAP\n80\n00\n00\n00\n00\n00\n80\nENDCHAR\nSTARTCHAR U_2237\nENCODING 8759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 1\nBITMAP\n82\n00\n00\n00\n00\n00\n82\nENDCHAR\nSTARTCHAR U_2238\nENCODING 8760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n3000\n3000\n0000\nFC00\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2239\nENCODING 8761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0100\n0100\n0000\nFC00\n0000\n0100\n0100\n0000\nENDCHAR\nSTARTCHAR U_223A\nENCODING 8762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n4040\n4040\n0000\nFFE0\n0000\n4040\n4040\n0000\n0000\nENDCHAR\nSTARTCHAR U_223B\nENCODING 8763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0200\n3800\nC720\n00C0\n0200\n0000\n0000\nENDCHAR\nSTARTCHAR U_223C\nENCODING 8764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 3 1 3\nBITMAP\n7000\n8C40\n0380\nENDCHAR\nSTARTCHAR U_223D\nENCODING 8765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 6 0 2\nBITMAP\n20C0\n4120\n8220\n8420\n4840\n3080\nENDCHAR\nSTARTCHAR U_223E\nENCODING 8766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n3080\n4840\n8420\n4240\n2180\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_223F\nENCODING 8767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2000\n5000\n8800\n8800\n0400\n0400\n0400\n0220\n0220\n0140\n0080\nENDCHAR\nSTARTCHAR U_2240\nENCODING 8768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8000\n4000\n2000\n2000\n2000\n4000\n8000\n8000\n8000\n4000\n2000\nENDCHAR\nSTARTCHAR U_2241\nENCODING 8769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0100\n7220\n8CC0\n0B00\n1000\n2000\n0000\nENDCHAR\nSTARTCHAR U_2242\nENCODING 8770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\nFFE0\n0000\n6020\n98C0\n0700\n0000\n0000\nENDCHAR\nSTARTCHAR U_2243\nENCODING 8771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n7020\n8C40\n0380\n0000\nFFE0\n0000\n0000\nENDCHAR\nSTARTCHAR U_2244\nENCODING 8772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0080\n3120\n4A40\n8780\n0800\nFFE0\n1000\n2000\n0000\nENDCHAR\nSTARTCHAR U_2245\nENCODING 8773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n3020\n4C40\n8380\n0000\nFFE0\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_2246\nENCODING 8774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n7840\n8780\n0200\nFFC0\n0400\nFFC0\n0800\nENDCHAR\nSTARTCHAR U_2247\nENCODING 8775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0200\n3A40\nC780\n0400\nFFC0\n0800\nFFC0\n1000\nENDCHAR\nSTARTCHAR approxequal\nENCODING 8776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 8 0 1\nBITMAP\n3820\n4440\n8380\n0000\n0000\n3820\n4440\n8380\nENDCHAR\nSTARTCHAR U_2249\nENCODING 8777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0100\n0100\n7A60\n8780\n7C60\n8780\n0800\n0800\n0000\nENDCHAR\nSTARTCHAR U_224A\nENCODING 8778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n7820\n8440\n7BA0\n8440\n0380\n0000\nFFE0\n0000\nENDCHAR\nSTARTCHAR U_224B\nENCODING 8779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n3040\n4C80\nB340\n4C80\nB340\n4C80\n8300\n0000\nENDCHAR\nSTARTCHAR U_224C\nENCODING 8780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\n4380\n8440\n8840\n7080\n0000\n0000\nFF80\n0000\n0000\nFF80\nENDCHAR\nSTARTCHAR U_224D\nENCODING 8781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n8400\n7800\n0000\n0000\n7800\n8400\n0000\n0000\nENDCHAR\nSTARTCHAR U_224E\nENCODING 8782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0C00\n1200\n2100\nE1C0\n0000\nE1C0\n2100\n1200\n0C00\n0000\nENDCHAR\nSTARTCHAR U_224F\nENCODING 8783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0C00\n1200\nE1C0\n0000\nFFC0\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2250\nENCODING 8784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0800\n0800\n0000\nFF80\n0000\nFF80\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2251\nENCODING 8785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n1000\n0000\nFE00\n0000\nFE00\n0000\n1000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2252\nENCODING 8786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 2 0\nBITMAP\n6000\n6000\n0000\nFF80\n0000\nFF80\n0000\n0600\n0600\nENDCHAR\nSTARTCHAR U_2253\nENCODING 8787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0180\n0180\n0000\nFF80\n0000\nFF80\n0000\nC000\nC000\n0000\nENDCHAR\nSTARTCHAR U_2254\nENCODING 8788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\nC000\nDFE0\n0000\n0000\nDFE0\nC000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2255\nENCODING 8789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0060\nFF60\n0000\n0000\nFF60\n0060\n0000\n0000\nENDCHAR\nSTARTCHAR U_2256\nENCODING 8790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\nFF80\n1400\n2200\n2200\n1400\nFF80\n0000\n0000\nENDCHAR\nSTARTCHAR U_2257\nENCODING 8791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n1800\n2400\n2400\n1800\n0000\nFF00\n0000\n0000\nFF00\n0000\nENDCHAR\nSTARTCHAR U_2258\nENCODING 8792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n3E00\n4100\n0000\nFF80\n0000\n0000\nFF80\n0000\n0000\nENDCHAR\nSTARTCHAR U_2259\nENCODING 8793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0800\n1400\n2200\n0000\nFF80\n0000\n0000\nFF80\n0000\nENDCHAR\nSTARTCHAR U_225A\nENCODING 8794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2200\n1400\n1400\n0800\n0000\nFF80\n0000\n0000\nFF80\n0000\n0000\nENDCHAR\nSTARTCHAR U_225B\nENCODING 8795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n1000\n7C00\n3800\n6C00\n0000\nFE00\n0000\n0000\nFE00\n0000\nENDCHAR\nSTARTCHAR U_225C\nENCODING 8796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n1400\n1400\n3E00\n0000\nFF80\n0000\n0000\nFF80\n0000\n0000\nENDCHAR\nSTARTCHAR U_225D\nENCODING 8797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1060\n1680\n79E0\n9F80\n9880\n7780\n0000\nFFE0\n0000\nFFE0\n0000\nENDCHAR\nSTARTCHAR U_225E\nENCODING 8798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nB600\n4900\n4900\n4900\n4900\n0000\nFF80\n0000\n0000\nFF80\nENDCHAR\nSTARTCHAR U_225F\nENCODING 8799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3000\n4800\n1000\n1000\n0000\n1000\n0000\nFE00\n0000\n0000\nFE00\nENDCHAR\nSTARTCHAR U_2260\nENCODING 8800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 7 2 1\nBITMAP\n04\n08\nFF\n10\nFF\n20\n40\nENDCHAR\nSTARTCHAR U_2261\nENCODING 8801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 5 2 2\nBITMAP\nFF\n00\nFF\n00\nFF\nENDCHAR\nSTARTCHAR U_2262\nENCODING 8802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0200\nFF80\n0400\nFF80\n0800\nFF80\n1000\n2000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2263\nENCODING 8803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFE00\n0000\n0000\nFE00\n0000\n0000\nFE00\n0000\n0000\nFE00\nENDCHAR\nSTARTCHAR U_2264\nENCODING 8804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n03\n0C\n30\nC0\n30\n0C\n03\n00\nFF\n00\nENDCHAR\nSTARTCHAR U_2265\nENCODING 8805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 0\nBITMAP\nC0\n30\n0C\n03\n0C\n30\nC3\n0C\n30\nC0\nENDCHAR\nSTARTCHAR U_2266\nENCODING 8806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 2 0\nBITMAP\n0700\n3800\nC000\n7000\n0E00\n0000\nFF80\n0000\nFF80\nENDCHAR\nSTARTCHAR U_2267\nENCODING 8807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 2 -1\nBITMAP\nC000\n3800\n0600\n0180\n0600\n3800\nC000\n0000\nFF80\n0000\nFF80\nENDCHAR\nSTARTCHAR U_2268\nENCODING 8808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0700\n3800\nC000\n3800\n0700\n0800\nFF00\n1000\nFF00\n2000\nENDCHAR\nSTARTCHAR U_2269\nENCODING 8809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nE000\n1C00\n0380\n1C00\nE000\n0400\nFF80\n0800\nFF80\n1000\nENDCHAR\nSTARTCHAR U_226A\nENCODING 8810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0100\n0620\n18C0\n6300\n8C00\n6300\n18C0\n0620\n0100\n0000\nENDCHAR\nSTARTCHAR U_226B\nENCODING 8811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n8800\n6600\n1980\n0660\n1980\n6600\n8800\n0000\nENDCHAR\nSTARTCHAR U_226C\nENCODING 8812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n5000\n2000\n5000\n5000\n8800\n8800\n8800\n5000\n5000\n2000\n5000\nENDCHAR\nSTARTCHAR U_226D\nENCODING 8813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0100\n8120\n62C0\n1F00\n0400\n1F00\n68C0\n9020\n1000\n0000\n0000\nENDCHAR\nSTARTCHAR U_226E\nENCODING 8814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 0\nBITMAP\n0980\n0E00\n1800\n6800\n8800\n6800\n1800\n0E00\n0980\nENDCHAR\nSTARTCHAR U_226F\nENCODING 8815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 0\nBITMAP\nC800\n3800\n0C00\n0B00\n0880\n0B00\n0C00\n3800\nC800\nENDCHAR\nSTARTCHAR U_2271\nENCODING 8817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0100\nC100\n3A00\n0700\n04C0\n0700\n3800\nC800\n1000\nFFC0\n2000\nENDCHAR\nSTARTCHAR U_2272\nENCODING 8818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0380\n0C00\n3000\nC000\n3000\n0C00\n0380\n0000\n7080\n8F00\nENDCHAR\nSTARTCHAR U_2273\nENCODING 8819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nE000\n1C00\n0380\n0060\n0380\n1C00\nE000\n0000\n7C20\n83C0\nENDCHAR\nSTARTCHAR U_2274\nENCODING 8820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n0260\n0780\n3C00\nC400\n3800\n0F00\n08E0\n1000\n7C20\n93C0\nENDCHAR\nSTARTCHAR U_2275\nENCODING 8821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\nC200\n3C00\n0700\n04C0\n0F00\n3800\nC800\n1000\n7840\n9780\nENDCHAR\nSTARTCHAR U_2276\nENCODING 8822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0600\n3800\nC000\n3800\n0600\nC000\n3800\n0600\n3800\nC000\nENDCHAR\nSTARTCHAR U_2277\nENCODING 8823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nC000\n3800\n0600\n3800\nC000\n0600\n3800\nC000\n3800\n0600\nENDCHAR\nSTARTCHAR U_2278\nENCODING 8824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0B00\n3C00\nC800\n3C00\nD300\n3C00\n1300\n3C00\nE000\n2000\nENDCHAR\nSTARTCHAR U_2279\nENCODING 8825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0200\nE200\n1E00\n0780\n1C00\nEB80\n1C00\nF000\n1C00\n1380\nENDCHAR\nSTARTCHAR U_227A\nENCODING 8826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0080\n0100\n0600\n3800\nC000\n3800\n0600\n0100\n0080\n0000\nENDCHAR\nSTARTCHAR U_227B\nENCODING 8827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8000\n4000\n3000\n0E00\n0180\n0E00\n3000\n4000\n8000\n0000\nENDCHAR\nSTARTCHAR U_227C\nENCODING 8828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0080\n0100\n0600\n3800\nC000\n3800\nC600\n3900\n0680\n0100\n0080\nENDCHAR\nSTARTCHAR U_227D\nENCODING 8829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8000\n4000\n3000\n0E00\n0180\n0E00\n3180\n4E00\nB000\n4000\n8000\nENDCHAR\nSTARTCHAR U_227E\nENCODING 8830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0040\n0180\n1E00\nE000\n1E00\n0180\n0040\n7C40\n8380\nENDCHAR\nSTARTCHAR U_227F\nENCODING 8831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8000\n6000\n1C00\n03E0\n1C00\n6000\n8000\n0000\n3020\n4C40\n8380\nENDCHAR\nSTARTCHAR U_2280\nENCODING 8832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n0220\n02C0\n0300\n1E00\nE200\n1E00\n0300\n02C0\n0220\n0200\nENDCHAR\nSTARTCHAR U_2281\nENCODING 8833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n8800\n4800\n3800\n0E00\n09E0\n0E00\n3800\n4800\n8800\n0800\nENDCHAR\nSTARTCHAR U_2282\nENCODING 8834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n3F80\n4000\n8000\n8000\n8000\n4000\n3F80\n0000\n0000\nENDCHAR\nSTARTCHAR U_2283\nENCODING 8835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nFE00\n0100\n0080\n0080\n0080\n0100\nFE00\n0000\n0000\nENDCHAR\nSTARTCHAR U_2284\nENCODING 8836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0100\n0100\n3F80\n4200\n8200\n8200\n8400\n4400\n3F80\n0800\n0800\nENDCHAR\nSTARTCHAR U_2285\nENCODING 8837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\nFE00\n0900\n0880\n0880\n1080\n1100\nFE00\n2000\n2000\nENDCHAR\nSTARTCHAR U_2286\nENCODING 8838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n3F80\n4000\n8000\n8000\n8000\n4000\n3F80\n0000\nFF80\nENDCHAR\nSTARTCHAR U_2287\nENCODING 8839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nFF00\n0080\n0080\n0080\n0080\nFF00\n0000\nFF80\n0000\nENDCHAR\nSTARTCHAR U_2288\nENCODING 8840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n7F80\n8000\n8000\n8000\n8000\n7F80\n0000\nFF80\n0000\nENDCHAR\nSTARTCHAR U_2289\nENCODING 8841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0100\nFF00\n0280\n0240\n0440\n0440\n0880\nFF00\n1000\nFFC0\n2000\nENDCHAR\nSTARTCHAR U_228A\nENCODING 8842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n3F80\n4000\n8000\n8000\n8000\n4000\n3F80\n0400\nFF80\n0800\nENDCHAR\nSTARTCHAR U_228B\nENCODING 8843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFF00\n0080\n0040\n0040\n0040\n0080\nFF00\n0200\nFF80\n0800\nENDCHAR\nSTARTCHAR U_228C\nENCODING 8844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8100\n8100\n8100\n8900\n9100\nBF00\n9100\n8900\n4200\n3C00\nENDCHAR\nSTARTCHAR U_228D\nENCODING 8845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n8100\n8100\n8100\n8100\n9900\n9900\n8100\n4200\n3C00\nENDCHAR\nSTARTCHAR U_228E\nENCODING 8846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8080\n8080\n8080\n8880\n8880\nBE80\n8880\n8880\n4100\n3E00\nENDCHAR\nSTARTCHAR U_228F\nENCODING 8847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nFF80\n8000\n8000\n8000\n8000\n8000\n8000\nFF80\n0000\nENDCHAR\nSTARTCHAR U_2290\nENCODING 8848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nFF80\n0080\n0080\n0080\n0080\n0080\nFF80\n0000\n0000\nENDCHAR\nSTARTCHAR U_2291\nENCODING 8849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nFF80\n8000\n8000\n8000\n8000\n8000\nFF80\n0000\nFF80\nENDCHAR\nSTARTCHAR U_2292\nENCODING 8850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nFF80\n0080\n0080\n0080\n0080\n0080\nFF80\n0000\nFF80\nENDCHAR\nSTARTCHAR U_2293\nENCODING 8851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nFE00\n8200\n8200\n8200\n8200\n8200\n8200\n8200\n8200\nENDCHAR\nSTARTCHAR U_2294\nENCODING 8852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n8200\n8200\n8200\n8200\n8200\n8200\n8200\n8200\nFE00\nENDCHAR\nSTARTCHAR U_2295\nENCODING 8853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n0000\n3E00\n4900\n8880\n8880\nFF80\n8880\n8880\n4900\n3E00\n0000\nENDCHAR\nSTARTCHAR U_2296\nENCODING 8854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n3E00\n4100\n8080\n8080\nBE80\n8080\n8080\n4100\n3E00\n0000\nENDCHAR\nSTARTCHAR U_2297\nENCODING 8855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0E00\n3180\n4040\n5140\n8A20\n8420\n8A20\n5140\n4040\n3180\n0E00\nENDCHAR\nSTARTCHAR U_2299\nENCODING 8857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n1E00\n2100\n4080\n8040\n8C40\n8C40\n8040\n8040\n4080\n2100\n1E00\nENDCHAR\nSTARTCHAR U_229A\nENCODING 8858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1E00\n6180\n4080\n8C40\n9240\n9240\n8C40\n4080\n6180\n1E00\n0000\nENDCHAR\nSTARTCHAR U_229B\nENCODING 8859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n60C0\n4440\n9520\n8E20\n8420\n8E20\n9520\n4440\n60C0\n1F00\nENDCHAR\nSTARTCHAR U_229C\nENCODING 8860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0E00\n3180\n4040\n4040\n9F20\n8020\n9F20\n4040\n4040\n3180\n0E00\nENDCHAR\nSTARTCHAR U_229D\nENCODING 8861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0E00\n3180\n4040\n4040\n8020\n9F20\n8020\n4040\n4040\n3180\n0E00\nENDCHAR\nSTARTCHAR U_229E\nENCODING 8862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFF80\n8080\n8880\n8880\nBE80\n8880\n8880\n8080\nFF80\n0000\nENDCHAR\nSTARTCHAR U_229F\nENCODING 8863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFFC0\n8040\n8040\n8040\nBF40\n8040\n8040\n8040\n8040\nFFC0\nENDCHAR\nSTARTCHAR U_22A0\nENCODING 8864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n8020\nA0A0\n9120\n8A20\n8420\n8A20\n9120\nA0A0\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_22A1\nENCODING 8865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFFC0\n8040\n8040\n8040\n8C40\n8C40\n8040\n8040\n8040\nFFC0\nENDCHAR\nSTARTCHAR U_22A2\nENCODING 8866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8000\n8000\n8000\n8000\nFFC0\n8000\n8000\n8000\n8000\n0000\nENDCHAR\nSTARTCHAR U_22A3\nENCODING 8867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0040\n0040\n0040\n0040\nFFC0\n0040\n0040\n0040\n0040\n0000\nENDCHAR\nSTARTCHAR U_22A4\nENCODING 8868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFF80\n0800\n0800\n0800\n0800\n0800\n0800\n0800\n0800\n0800\n0000\nENDCHAR\nSTARTCHAR U_22A5\nENCODING 8869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 1\nBITMAP\n0800\n0800\n0800\n0800\n0800\n0800\n0800\n0800\nFF80\nENDCHAR\nSTARTCHAR U_22A6\nENCODING 8870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8000\n8000\n8000\n8000\n8000\nFC00\n8000\n8000\n8000\n8000\n8000\nENDCHAR\nSTARTCHAR U_22A7\nENCODING 8871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8000\n8000\n8000\nFE00\n8000\n8000\nFE00\n8000\n8000\n8000\nENDCHAR\nSTARTCHAR U_22A8\nENCODING 8872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8000\n8000\n8000\nFFC0\n8000\nFFC0\n8000\n8000\n8000\n0000\nENDCHAR\nSTARTCHAR U_22A9\nENCODING 8873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n9000\n9000\n9000\n9000\n9FE0\n9000\n9000\n9000\n9000\nENDCHAR\nSTARTCHAR U_22AA\nENCODING 8874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nA800\nA800\nA800\nA800\nAFE0\nA800\nA800\nA800\nA800\n0000\n0000\nENDCHAR\nSTARTCHAR U_22AB\nENCODING 8875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nA000\nA000\nA000\nBF80\nA000\nBF80\nA000\nA000\nA000\n0000\nENDCHAR\nSTARTCHAR U_22AC\nENCODING 8876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n8200\n8400\n8400\n8800\nFF80\n9000\n9000\nA000\nA000\nENDCHAR\nSTARTCHAR U_22AD\nENCODING 8877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8100\n8100\n8200\nFF80\n8400\n8400\nFF80\n8800\n9000\n9000\nENDCHAR\nSTARTCHAR U_22AE\nENCODING 8878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nA080\nA080\nA100\nA100\nBF80\nA200\nA400\nA400\nA800\nENDCHAR\nSTARTCHAR U_22AF\nENCODING 8879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nA080\nA080\nA100\nBF80\nA200\nBF80\nA400\nA400\nA800\nENDCHAR\nSTARTCHAR U_22B0\nENCODING 8880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0400\n0200\n0600\n3800\nC000\n3800\n0600\n0200\n0400\nENDCHAR\nSTARTCHAR U_22B1\nENCODING 8881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n4000\n8000\n6000\n1C00\n0300\n1C00\n6000\n8000\n4000\nENDCHAR\nSTARTCHAR U_22B2\nENCODING 8882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0080\n0380\n0C80\n3080\nC080\n3080\n0C80\n0380\n0080\n0000\nENDCHAR\nSTARTCHAR U_22B3\nENCODING 8883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n8000\nE000\n9800\n8600\n8180\n8600\n9800\nE000\n8000\nENDCHAR\nSTARTCHAR U_22B4\nENCODING 8884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0080\n0380\n0C80\n3080\nC080\n3080\n0C80\n0380\n0080\n0000\nFF80\nENDCHAR\nSTARTCHAR U_22B5\nENCODING 8885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8000\nE000\n9800\n8600\n8180\n8600\n9800\nE000\n8000\n0000\nFF80\nENDCHAR\nSTARTCHAR U_22B6\nENCODING 8886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n6040\n90E0\n8FE0\n90E0\n6040\n0000\n0000\nENDCHAR\nSTARTCHAR U_22B7\nENCODING 8887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n40C0\nE120\nFF20\nE120\n40C0\n0000\n0000\nENDCHAR\nSTARTCHAR U_22B8\nENCODING 8888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n00C0\n0120\nFF20\n0120\n00C0\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_22B9\nENCODING 8889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\n0400\n0400\n0000\nF1E0\n0000\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_22BA\nENCODING 8890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFE00\n1000\n1000\n1000\n1000\n1000\n1000\n1000\n1000\n1000\n1000\nENDCHAR\nSTARTCHAR U_22BB\nENCODING 8891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4200\n4200\n2400\n2400\n2400\n1800\n1800\n0000\nFF00\n0000\n0000\nENDCHAR\nSTARTCHAR U_22BC\nENCODING 8892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFF80\n0000\n0800\n0800\n1400\n1400\n2200\n2200\n4100\n4100\n8080\nENDCHAR\nSTARTCHAR U_22BD\nENCODING 8893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFC00\n0000\n8400\n8400\n4800\n4800\n4800\n3000\n3000\n0000\n0000\nENDCHAR\nSTARTCHAR U_22BE\nENCODING 8894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n8000\n8000\nE000\n9000\n8800\n8400\n8400\nFF00\nENDCHAR\nSTARTCHAR U_22BF\nENCODING 8895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 1\nBITMAP\n0080\n0180\n0280\n0480\n0880\n1080\n2080\n4080\nFF80\nENDCHAR\nSTARTCHAR U_22C0\nENCODING 8896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n1400\n1400\n2200\n2200\n4100\n4100\n8080\n8080\n0000\n0000\nENDCHAR\nSTARTCHAR U_22C1\nENCODING 8897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8080\n4100\n4100\n2200\n2200\n2200\n1400\n1400\n0800\n0000\n0000\nENDCHAR\nSTARTCHAR U_22C2\nENCODING 8898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n3800\n4400\n8200\n8200\n8200\n8200\n8200\n8200\n8200\n8200\nENDCHAR\nSTARTCHAR U_22C3\nENCODING 8899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8200\n8200\n8200\n8200\n8200\n8200\n8200\n4400\n3800\n0000\n0000\nENDCHAR\nSTARTCHAR U_22C4\nENCODING 8900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n2800\n2800\n4400\n4400\n8200\n4400\n4400\n2800\n2800\n1000\nENDCHAR\nSTARTCHAR U_22C5\nENCODING 8901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\nC000\nC000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_22C6\nENCODING 8902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n2000\n2000\nF800\n7000\n7000\n8800\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_22C7\nENCODING 8903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n8C40\n4C80\n2100\nFFC0\n2100\n4C80\n8C40\n0000\n0000\nENDCHAR\nSTARTCHAR U_22C8\nENCODING 8904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8040\nC0C0\nA140\n9240\n8C40\n8C40\n9240\nA140\nC0C0\n8040\nENDCHAR\nSTARTCHAR U_22C9\nENCODING 8905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8080\nC100\nA200\n9400\n8800\n9400\nA200\nC100\n8080\n0000\nENDCHAR\nSTARTCHAR U_22CA\nENCODING 8906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8080\n4180\n2280\n1480\n0880\n1480\n2280\n4180\n8080\n0000\nENDCHAR\nSTARTCHAR U_22CB\nENCODING 8907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\nC000\n3000\n0C00\n0B00\n10C0\n2020\n4000\n0000\nENDCHAR\nSTARTCHAR U_22CC\nENCODING 8908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0020\n0040\n0080\n0100\n0200\n0400\n0A00\n1100\n2080\n4040\n8020\nENDCHAR\nSTARTCHAR U_22CD\nENCODING 8909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\n0000\n8780\n7840\n0000\nFFC0\n0000\nENDCHAR\nSTARTCHAR U_22CE\nENCODING 8910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\n8200\n4400\n2800\n2800\n1000\n1000\nENDCHAR\nSTARTCHAR U_22CF\nENCODING 8911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n1000\n2800\n2800\n4400\n4400\n8200\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_22D0\nENCODING 8912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n3F80\n6000\n4F80\n9800\n9000\n9000\n9800\nCF80\n6000\n3F80\nENDCHAR\nSTARTCHAR U_22D1\nENCODING 8913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nFC00\n0200\nF900\n0500\n0500\nF900\n0200\nFC00\n0000\nENDCHAR\nSTARTCHAR U_22D2\nENCODING 8914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F00\n6180\nC0C0\n9E40\nB340\nA140\nA140\nA140\nA140\n0000\n0000\nENDCHAR\nSTARTCHAR U_22D3\nENCODING 8915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\nA140\nA140\nA140\nB340\n9E40\nC0C0\n6180\n3F00\nENDCHAR\nSTARTCHAR U_22D4\nENCODING 8916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n1000\n1000\n3800\n5400\n9200\n9200\n9200\n9200\n0000\nENDCHAR\nSTARTCHAR U_22D5\nENCODING 8917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n4800\n4800\n4800\nFC00\n4800\n4800\nFC00\n4800\n4800\n4800\nENDCHAR\nSTARTCHAR U_22D6\nENCODING 8918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0300\n0C00\n3000\nC300\n3000\n0C00\n0300\n0000\nENDCHAR\nSTARTCHAR U_22D7\nENCODING 8919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nC000\n3000\n0C00\nC300\nC300\n0C00\n3000\nC000\n0000\n0000\nENDCHAR\nSTARTCHAR U_22D8\nENCODING 8920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n1240\n2480\n4900\n9200\n4900\n2480\n1240\n0000\n0000\nENDCHAR\nSTARTCHAR U_22D9\nENCODING 8921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n9200\n4900\n2480\n1240\n2480\n4900\n9200\n0000\n0000\nENDCHAR\nSTARTCHAR U_22DC\nENCODING 8924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n00C0\n0300\n0CC0\n3300\nCC00\n3000\nC000\n3000\n0C00\n0300\n00C0\nENDCHAR\nSTARTCHAR U_22DD\nENCODING 8925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 17 0 -1\nBITMAP\n1800\nC600\n3180\n0C60\n0318\n00C6\n0031\n000C\n0003\n000C\n0030\n00C0\n0300\n0C00\n3000\nC000\n0000\nENDCHAR\nSTARTCHAR U_22DE\nENCODING 8926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 17 0 -1\nBITMAP\n000C\n0031\n00C6\n0718\n1860\n6380\n8C00\n3000\nC000\n3000\n0C00\n0380\n0060\n0018\n0006\n0001\n0000\nENDCHAR\nSTARTCHAR U_22DF\nENCODING 8927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 17 0 -1\nBITMAP\n1800\n8600\n6180\n1860\n0618\n0186\n0071\n000C\n0003\n000C\n0070\n0180\n0600\n1800\n6000\n8000\n0000\nENDCHAR\nSTARTCHAR U_22E0\nENCODING 8928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 17 0 -1\nBITMAP\n002C\n0031\n00C6\n0358\n1C60\n6180\n8E80\n3080\nC100\n3100\n0E00\n0180\n0260\n0218\n0406\n0401\n0000\nENDCHAR\nSTARTCHAR U_22E4\nENCODING 8932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\nFF80\n8000\n8000\n8000\nFF80\n0400\nFF80\n0800\nENDCHAR\nSTARTCHAR U_22E5\nENCODING 8933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\nFF80\n0080\n0080\n0080\nFF80\n0400\nFF80\n0800\nENDCHAR\nSTARTCHAR U_22E8\nENCODING 8936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0100\n0600\n3800\nC000\n3800\n0600\n0500\n7900\n9E00\n2000\nENDCHAR\nSTARTCHAR U_22EC\nENCODING 8940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0100\n0780\n1A80\n6480\n8480\n6880\n1880\n1780\n2000\nFF80\n4000\nENDCHAR\nSTARTCHAR U_22ED\nENCODING 8941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nE400\n9C00\n8E00\n8980\n9600\n9800\nE000\n2000\nFF80\n4000\nENDCHAR\nSTARTCHAR U_22EE\nENCODING 8942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8000\n8000\n0000\n0000\n8000\n8000\n0000\n0000\n8000\n8000\nENDCHAR\nSTARTCHAR U_22EF\nENCODING 8943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\nCCC0\nCCC0\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_22F0\nENCODING 8944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0300\n0300\n0000\n1800\n1800\n0000\nC000\nC000\nENDCHAR\nSTARTCHAR U_22F1\nENCODING 8945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nC000\nC000\n0000\n0000\n1800\n1800\n0000\n0000\n0300\n0300\n0000\nENDCHAR\nSTARTCHAR U_2312\nENCODING 8978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 5 0 3\nBITMAP\n0E00\n3180\n4040\n8020\n8020\nENDCHAR\nSTARTCHAR U_2460\nENCODING 9312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4440\n8C20\n8420\n8420\n8420\n8420\n4440\n2080\n1F00\nENDCHAR\nSTARTCHAR U_2461\nENCODING 9313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4E40\n9120\n8120\n8620\n8820\n9020\n5F40\n2080\n1F00\nENDCHAR\nSTARTCHAR U_2462\nENCODING 9314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4E40\n9120\n8120\n8620\n8120\n9120\n4E40\n2080\n1F00\nENDCHAR\nSTARTCHAR U_2463\nENCODING 9315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4440\n8C20\n9420\nA420\nBF20\n8420\n4E40\n2080\n1F00\nENDCHAR\nSTARTCHAR U_2464\nENCODING 9316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n5F40\n9020\n9020\n9E20\n8120\n8120\n5E40\n2080\n1F00\nENDCHAR\nSTARTCHAR U_2465\nENCODING 9317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4E40\n9120\n9020\n9E20\n9120\n9120\n4E40\n2080\n1F00\nENDCHAR\nSTARTCHAR U_2466\nENCODING 9318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n5F40\n9120\n8220\n8220\n8420\n8420\n4440\n2080\n1F00\nENDCHAR\nSTARTCHAR U_2467\nENCODING 9319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4E40\n9120\n9120\n8E20\n9120\n9120\n4E40\n2080\n1F00\nENDCHAR\nSTARTCHAR U_2468\nENCODING 9320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4640\n8920\n8920\n8720\n8120\n8920\n4640\n2080\n1F00\nENDCHAR\nSTARTCHAR U_2469\nENCODING 9321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n5240\nB520\n9520\n9520\n9520\n9520\n5240\n2080\n1F00\nENDCHAR\nSTARTCHAR U_246A\nENCODING 9322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n5140\nB320\n9120\n9120\n9120\n9120\n5140\n2080\n1F00\nENDCHAR\nSTARTCHAR U_246B\nENCODING 9323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n5340\nB4A0\n90A0\n90A0\n9320\n9420\n57C0\n2080\n1F00\nENDCHAR\nSTARTCHAR U_2474\nENCODING 9332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4440\n8C20\n8420\n8420\n8420\n8420\n8420\n8420\n4E40\n2080\nENDCHAR\nSTARTCHAR U_2475\nENCODING 9333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4E40\n9120\n9120\n8120\n8220\n8420\n8820\n9120\n5F40\n2080\nENDCHAR\nSTARTCHAR U_2476\nENCODING 9334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4E40\n9120\n8120\n8220\n8620\n8120\n8120\n9120\n4E40\n2080\nENDCHAR\nSTARTCHAR U_2477\nENCODING 9335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4240\n8620\n8620\n8A20\n8A20\n9220\n9F20\n8220\n4740\n2080\nENDCHAR\nSTARTCHAR U_2478\nENCODING 9336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n5F40\n9020\n9020\n9020\n9E20\n8120\n8120\n9120\n4E40\n2080\nENDCHAR\nSTARTCHAR U_2479\nENCODING 9337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4E40\n9120\n9020\n9020\n9620\n9920\n9120\n9120\n4E40\n2080\nENDCHAR\nSTARTCHAR U_247A\nENCODING 9338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n5F40\n9120\n8120\n8220\n8220\n8420\n8420\n8420\n4440\n2080\nENDCHAR\nSTARTCHAR U_247B\nENCODING 9339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4E40\n9120\n9120\n9120\n8E20\n9120\n9120\n9120\n4E40\n2080\nENDCHAR\nSTARTCHAR U_247C\nENCODING 9340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4E40\n9120\n9120\n9120\n8F20\n8120\n8120\n9120\n4E40\n2080\nENDCHAR\nSTARTCHAR U_247D\nENCODING 9341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n5240\nB520\n9520\n9520\n9520\n9520\n9520\n9520\n7A40\n2080\nENDCHAR\nSTARTCHAR U_247E\nENCODING 9342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4940\n9B20\n8920\n8920\n8920\n8920\n8920\n8920\n5FC0\n2080\nENDCHAR\nSTARTCHAR U_247F\nENCODING 9343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n5340\nB4A0\n94A0\n90A0\n9120\n9220\n9420\n94A0\n7FC0\n2080\nENDCHAR\nSTARTCHAR U_2480\nENCODING 9344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n5340\nB4A0\n90A0\n90A0\n9320\n90A0\n90A0\n94A0\n7B40\n2080\nENDCHAR\nSTARTCHAR U_2481\nENCODING 9345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n5140\nB320\n9320\n9520\n9520\n9520\n97A0\n9120\n7BC0\n2080\nENDCHAR\nSTARTCHAR U_2482\nENCODING 9346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n5740\nB420\n9420\n9520\n96A0\n90A0\n90A0\n94A0\n7B40\n2080\nENDCHAR\nSTARTCHAR U_2483\nENCODING 9347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n5340\nB4A0\n9420\n9420\n9720\n94A0\n94A0\n94A0\n7B40\n2080\nENDCHAR\nSTARTCHAR U_2484\nENCODING 9348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n57C0\nB4A0\n90A0\n9120\n9120\n9220\n9220\n9220\n7A40\n2080\nENDCHAR\nSTARTCHAR U_2485\nENCODING 9349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n5340\nB4A0\n94A0\n94A0\n9320\n94A0\n94A0\n94A0\n7B40\n2080\nENDCHAR\nSTARTCHAR U_2486\nENCODING 9350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n5340\nB4A0\n94A0\n94A0\n93A0\n90A0\n90A0\n94A0\n7B40\n2080\nENDCHAR\nSTARTCHAR U_2487\nENCODING 9351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4040\n5140\nAAA0\nAAA0\n8AA0\n92A0\n92A0\nA2A0\nAAA0\n7940\n4040\nENDCHAR\nSTARTCHAR U_2488\nENCODING 9352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 10 5 -1\nBITMAP\n40\nC0\n40\n40\n40\n40\n40\n40\nE0\n04\nENDCHAR\nSTARTCHAR U_2489\nENCODING 9353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 -1\nBITMAP\n70\n88\n88\n08\n10\n20\n40\n88\nF8\n01\nENDCHAR\nSTARTCHAR U_248A\nENCODING 9354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 -1\nBITMAP\n70\n88\n08\n08\n70\n08\n08\n88\n70\n01\nENDCHAR\nSTARTCHAR U_248B\nENCODING 9355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 -1\nBITMAP\n10\n30\n50\n50\n90\n90\nF8\n10\n38\n01\nENDCHAR\nSTARTCHAR U_248C\nENCODING 9356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 4 -1\nBITMAP\nF0\n80\n80\nF0\n88\n08\n08\n88\n70\n02\nENDCHAR\nSTARTCHAR U_248D\nENCODING 9357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 -1\nBITMAP\n70\n88\n80\nB0\nC8\n88\n88\n88\n70\n01\nENDCHAR\nSTARTCHAR U_248E\nENCODING 9358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 -1\nBITMAP\nFC\n88\n88\n10\n10\n20\n20\n20\n20\n01\nENDCHAR\nSTARTCHAR U_248F\nENCODING 9359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 -1\nBITMAP\n70\n88\n88\n88\n70\n88\n88\n88\n70\n01\nENDCHAR\nSTARTCHAR U_2490\nENCODING 9360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 -1\nBITMAP\n70\n88\n88\n88\n98\n68\n08\n88\n70\n01\nENDCHAR\nSTARTCHAR U_2491\nENCODING 9361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 -1\nBITMAP\n4C\nD2\n52\n52\n52\n52\n52\n52\nEC\n01\nENDCHAR\nSTARTCHAR U_2492\nENCODING 9362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 2 -1\nBITMAP\n4400\nCC00\n4400\n4400\n4400\n4400\n4400\n4400\nEE00\n0080\nENDCHAR\nSTARTCHAR U_2493\nENCODING 9363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 -1\nBITMAP\n4C\nD2\n42\n42\n44\n48\n50\n52\nFE\n01\nENDCHAR\nSTARTCHAR U_2494\nENCODING 9364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 -1\nBITMAP\n4C\nD2\n42\n42\n4C\n42\n42\n52\nEC\n01\nENDCHAR\nSTARTCHAR U_2495\nENCODING 9365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 -1\nBITMAP\n44\nC4\n4C\n54\n54\n54\n5E\n44\nE6\n01\nENDCHAR\nSTARTCHAR U_2496\nENCODING 9366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 -1\nBITMAP\n5C\nD0\n50\n5C\n54\n42\n42\n52\nEC\n01\nENDCHAR\nSTARTCHAR U_2497\nENCODING 9367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 -1\nBITMAP\n4C\nD2\n50\n54\n5A\n52\n52\n52\nEC\n01\nENDCHAR\nSTARTCHAR U_2498\nENCODING 9368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 -1\nBITMAP\n5E\nD2\n52\n44\n44\n48\n48\n48\nE8\n01\nENDCHAR\nSTARTCHAR U_2499\nENCODING 9369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 -1\nBITMAP\n4C\nD2\n52\n52\n4C\n52\n52\n52\nEC\n01\nENDCHAR\nSTARTCHAR U_249A\nENCODING 9370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 3 -1\nBITMAP\n4C\nD2\n52\n52\n56\n4A\n42\n52\nEC\n01\nENDCHAR\nSTARTCHAR U_249B\nENCODING 9371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 2 -1\nBITMAP\n4400\nAA00\nAA00\n2A00\n2A00\n4A00\n8A00\nAA00\nE400\n0080\nENDCHAR\nSTARTCHAR U_24E7\nENCODING 9447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0E00\n3180\n4040\n5140\n8A20\n8420\n8A20\n5140\n4040\n3180\n0E00\nENDCHAR\nSTARTCHAR U_24EB\nENCODING 9451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 12 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_24EC\nENCODING 9452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n3F80\n58C0\n9760\nDF60\nDEE0\nDDE0\nDBE0\n5040\n3F80\n1F00\nENDCHAR\nSTARTCHAR U_24ED\nENCODING 9453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n3F80\n6CC0\nCB60\nEF60\nEEE0\nEF60\nEB60\n6CC0\n3F80\n1F00\nENDCHAR\nSTARTCHAR U_24EE\nENCODING 9454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n3F80\n6EC0\nCDE0\nEAE0\nEAE0\nE860\nEEE0\n6EC0\n3F80\n1F00\nENDCHAR\nSTARTCHAR SF100000\nENCODING 9472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 1 0 4\nBITMAP\nFFF0\nENDCHAR\nSTARTCHAR U_2501\nENCODING 9473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 2 0 4\nBITMAP\nFFF0\nFFF0\nENDCHAR\nSTARTCHAR SF110000\nENCODING 9474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 1 12 6 -1\nBITMAP\n80\n80\n80\n80\n80\n80\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_2503\nENCODING 9475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 2 12 5 -1\nBITMAP\nC0\nC0\nC0\nC0\nC0\nC0\nC0\nC0\nC0\nC0\nC0\nC0\nENDCHAR\nSTARTCHAR U_2504\nENCODING 9476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 1 0 4\nBITMAP\nEE70\nENDCHAR\nSTARTCHAR U_2505\nENCODING 9477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 2 0 4\nBITMAP\nEE70\nEE70\nENDCHAR\nSTARTCHAR U_2506\nENCODING 9478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 1 12 6 -1\nBITMAP\n80\n80\n80\n00\n00\n80\n80\n80\n00\n80\n80\n80\nENDCHAR\nSTARTCHAR U_2507\nENCODING 9479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 2 12 5 -1\nBITMAP\nC0\nC0\nC0\n00\n00\nC0\nC0\nC0\n00\nC0\nC0\nC0\nENDCHAR\nSTARTCHAR U_2508\nENCODING 9480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 1 0 4\nBITMAP\nDB60\nENDCHAR\nSTARTCHAR U_2509\nENCODING 9481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 2 0 4\nBITMAP\nDB60\nDB60\nENDCHAR\nSTARTCHAR U_250A\nENCODING 9482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 1 11 6 0\nBITMAP\n80\n80\n00\n80\n80\n00\n80\n80\n00\n80\n80\nENDCHAR\nSTARTCHAR U_250B\nENCODING 9483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 2 11 5 0\nBITMAP\nC0\nC0\n00\nC0\nC0\n00\nC0\nC0\n00\nC0\nC0\nENDCHAR\nSTARTCHAR SF010000\nENCODING 9484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 6 6 -1\nBITMAP\nFC\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_250D\nENCODING 9485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 6 -1\nBITMAP\nFC\nFC\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_250E\nENCODING 9486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 6 6 -1\nBITMAP\nFC\nC0\nC0\nC0\nC0\nC0\nENDCHAR\nSTARTCHAR U_250F\nENCODING 9487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 5 -1\nBITMAP\nFE\nFE\nC0\nC0\nC0\nC0\nC0\nENDCHAR\nSTARTCHAR SF030000\nENCODING 9488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 0 -1\nBITMAP\nFE\n02\n02\n02\n02\n02\n02\nENDCHAR\nSTARTCHAR U_2511\nENCODING 9489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 8 0 -1\nBITMAP\nFE\nFE\n02\n02\n02\n02\n02\n02\nENDCHAR\nSTARTCHAR U_2512\nENCODING 9490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 7 0 -1\nBITMAP\nFF\n03\n03\n03\n03\n03\n03\nENDCHAR\nSTARTCHAR U_2513\nENCODING 9491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 8 0 -1\nBITMAP\nFF\nFF\n03\n03\n03\n03\n03\n03\nENDCHAR\nSTARTCHAR SF020000\nENCODING 9492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 6 4\nBITMAP\n80\n80\n80\n80\n80\n80\nFC\nENDCHAR\nSTARTCHAR U_2515\nENCODING 9493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 6 4\nBITMAP\n80\n80\n80\n80\n80\nFC\nFC\nENDCHAR\nSTARTCHAR U_2516\nENCODING 9494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 5 4\nBITMAP\nC0\nC0\nC0\nC0\nC0\nC0\nFE\nENDCHAR\nSTARTCHAR U_2517\nENCODING 9495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 8 5 3\nBITMAP\nC0\nC0\nC0\nC0\nC0\nC0\nFE\nFE\nENDCHAR\nSTARTCHAR SF040000\nENCODING 9496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 0 4\nBITMAP\n02\n02\n02\n02\n02\n02\nFE\nENDCHAR\nSTARTCHAR U_2519\nENCODING 9497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 8 0 3\nBITMAP\n02\n02\n02\n02\n02\n02\nFE\nFE\nENDCHAR\nSTARTCHAR U_251A\nENCODING 9498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 7 0 4\nBITMAP\n03\n03\n03\n03\n03\n03\nFF\nENDCHAR\nSTARTCHAR U_251B\nENCODING 9499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 8 0 3\nBITMAP\n03\n03\n03\n03\n03\n03\nFF\nFF\nENDCHAR\nSTARTCHAR SF080000\nENCODING 9500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 12 6 -1\nBITMAP\n80\n80\n80\n80\n80\n80\nFC\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_251D\nENCODING 9501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 12 6 -1\nBITMAP\n80\n80\n80\n80\n80\nFC\nFC\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_251E\nENCODING 9502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 12 6 -1\nBITMAP\nC0\nC0\nC0\nC0\nC0\nC0\nFC\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_251F\nENCODING 9503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 12 6 -1\nBITMAP\n80\n80\n80\n80\n80\n80\nFC\nC0\nC0\nC0\nC0\nC0\nENDCHAR\nSTARTCHAR U_2520\nENCODING 9504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 12 5 -1\nBITMAP\nC0\nC0\nC0\nC0\nC0\nC0\nFE\nC0\nC0\nC0\nC0\nC0\nENDCHAR\nSTARTCHAR U_2521\nENCODING 9505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 12 6 -1\nBITMAP\nC0\nC0\nC0\nC0\nC0\nFC\nFC\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_2522\nENCODING 9506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 12 6 -1\nBITMAP\n80\n80\n80\n80\n80\nFC\nFC\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_2523\nENCODING 9507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 12 6 -1\nBITMAP\nC0\nC0\nC0\nC0\nC0\nFC\nFC\nC0\nC0\nC0\nC0\nC0\nENDCHAR\nSTARTCHAR SF090000\nENCODING 9508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 12 0 -1\nBITMAP\n02\n02\n02\n02\n02\n02\nFE\n02\n02\n02\n02\n02\nENDCHAR\nSTARTCHAR U_2525\nENCODING 9509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 12 0 -1\nBITMAP\n02\n02\n02\n02\n02\nFE\nFE\n02\n02\n02\n02\n02\nENDCHAR\nSTARTCHAR U_2526\nENCODING 9510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 12 0 -1\nBITMAP\n06\n06\n06\n06\n06\n06\nFE\n02\n02\n02\n02\n02\nENDCHAR\nSTARTCHAR U_2527\nENCODING 9511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 12 0 -1\nBITMAP\n02\n02\n02\n02\n02\n02\nFE\n06\n06\n06\n06\n06\nENDCHAR\nSTARTCHAR U_2528\nENCODING 9512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 12 0 -1\nBITMAP\n03\n03\n03\n03\n03\n03\nFF\n03\n03\n03\n03\n03\nENDCHAR\nSTARTCHAR U_2529\nENCODING 9513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 12 0 -1\nBITMAP\n06\n06\n06\n06\n06\n06\nFE\n02\n02\n02\n02\n02\nENDCHAR\nSTARTCHAR U_252A\nENCODING 9514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 12 0 -1\nBITMAP\n02\n02\n02\n02\n02\nFE\nFE\n06\n06\n06\n06\n06\nENDCHAR\nSTARTCHAR U_252B\nENCODING 9515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 12 0 -1\nBITMAP\n06\n06\n06\n06\n06\nFE\nFE\n06\n06\n06\n06\n06\nENDCHAR\nSTARTCHAR SF060000\nENCODING 9516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 6 0 -1\nBITMAP\nFFF0\n0200\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_252D\nENCODING 9517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 6 0 -1\nBITMAP\nFFF0\nFE00\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_252E\nENCODING 9518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 6 0 -1\nBITMAP\nFFF0\n03F0\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_252F\nENCODING 9519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 6 0 -1\nBITMAP\nFFF0\nFFF0\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_2530\nENCODING 9520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 6 0 -1\nBITMAP\nFFF0\n0300\n0300\n0300\n0300\n0300\nENDCHAR\nSTARTCHAR U_2531\nENCODING 9521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 6 0 -1\nBITMAP\nFFF0\nFE00\n0600\n0600\n0600\n0600\nENDCHAR\nSTARTCHAR U_2532\nENCODING 9522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 6 0 -1\nBITMAP\nFFF0\n03F0\n0300\n0300\n0300\n0300\nENDCHAR\nSTARTCHAR U_2533\nENCODING 9523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 6 0 -1\nBITMAP\nFFF0\nFFF0\n0300\n0300\n0300\n0300\nENDCHAR\nSTARTCHAR SF070000\nENCODING 9524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 7 0 4\nBITMAP\n0200\n0200\n0200\n0200\n0200\n0200\nFFF0\nENDCHAR\nSTARTCHAR U_2535\nENCODING 9525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 7 0 4\nBITMAP\n0200\n0200\n0200\n0200\n0200\nFE00\nFFF0\nENDCHAR\nSTARTCHAR U_2536\nENCODING 9526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 7 0 4\nBITMAP\n0200\n0200\n0200\n0200\n0200\n03F0\nFFF0\nENDCHAR\nSTARTCHAR U_2537\nENCODING 9527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 7 0 4\nBITMAP\n0200\n0200\n0200\n0200\n0200\nFFF0\nFFF0\nENDCHAR\nSTARTCHAR U_2538\nENCODING 9528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 7 0 4\nBITMAP\n0600\n0600\n0600\n0600\n0600\n0600\nFFF0\nENDCHAR\nSTARTCHAR U_2539\nENCODING 9529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 7 0 4\nBITMAP\n0600\n0600\n0600\n0600\n0600\nFE00\nFFF0\nENDCHAR\nSTARTCHAR U_253A\nENCODING 9530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 7 0 4\nBITMAP\n0300\n0300\n0300\n0300\n0300\n03F0\nFFF0\nENDCHAR\nSTARTCHAR U_253B\nENCODING 9531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 7 0 4\nBITMAP\n0300\n0300\n0300\n0300\n0300\nFFF0\nFFF0\nENDCHAR\nSTARTCHAR SF050000\nENCODING 9532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0200\n0200\n0200\n0200\n0200\n0200\nFFF0\n0200\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_253D\nENCODING 9533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0200\n0200\n0200\n0200\n0200\nFE00\nFFF0\n0200\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_253E\nENCODING 9534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0200\n0200\n0200\n0200\n0200\n03F0\nFFF0\n0200\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_253F\nENCODING 9535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0200\n0200\n0200\n0200\n0200\nFFF0\nFFF0\n0200\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_2540\nENCODING 9536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0600\n0600\n0600\n0600\n0600\n0600\nFFF0\n0200\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_2541\nENCODING 9537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0200\n0200\n0200\n0200\n0200\n0200\nFFF0\n0600\n0600\n0600\n0600\n0600\nENDCHAR\nSTARTCHAR U_2542\nENCODING 9538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0600\n0600\n0600\n0600\n0600\n0600\nFFF0\n0600\n0600\n0600\n0600\n0600\nENDCHAR\nSTARTCHAR U_2543\nENCODING 9539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0600\n0600\n0600\n0600\n0600\nFE00\nFFF0\n0200\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_2544\nENCODING 9540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0300\n0300\n0300\n0300\n0300\n03F0\nFFF0\n0200\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_2545\nENCODING 9541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0200\n0200\n0200\n0200\n0200\n0200\nFFF0\nFE00\n0600\n0600\n0600\n0600\nENDCHAR\nSTARTCHAR U_2546\nENCODING 9542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0200\n0200\n0200\n0200\n0200\n0200\nFFF0\n03F0\n0300\n0300\n0300\n0300\nENDCHAR\nSTARTCHAR U_2547\nENCODING 9543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0300\n0300\n0300\n0300\n0300\nFFF0\nFFF0\n0200\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_2548\nENCODING 9544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0200\n0200\n0200\n0200\n0200\nFFF0\nFFF0\n0200\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_2549\nENCODING 9545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0600\n0600\n0600\n0600\n0600\nFE00\nFFF0\n0600\n0600\n0600\n0600\n0600\nENDCHAR\nSTARTCHAR U_254A\nENCODING 9546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0300\n0300\n0300\n0300\n0300\n03F0\nFFF0\n0300\n0300\n0300\n0300\n0300\nENDCHAR\nSTARTCHAR U_254B\nENCODING 9547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0300\n0300\n0300\n0300\n0300\nFFF0\nFFF0\n0300\n0300\n0300\n0300\n0300\nENDCHAR\nSTARTCHAR U_254C\nENCODING 9548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\nFBF0\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_254D\nENCODING 9549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\nFBF0\nFBF0\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_254E\nENCODING 9550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 12 0 -1\nBITMAP\n8000\n8000\n8000\n8000\n8000\n0000\n8000\n8000\n8000\n8000\n8000\n8000\nENDCHAR\nSTARTCHAR U_254F\nENCODING 9551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 12 0 -1\nBITMAP\nC000\nC000\nC000\nC000\nC000\n0000\nC000\nC000\nC000\nC000\nC000\nC000\nENDCHAR\nSTARTCHAR SF430000\nENCODING 9552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 3 0 3\nBITMAP\nFFF0\n0000\nFFF0\nENDCHAR\nSTARTCHAR SF240000\nENCODING 9553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 3 12 5 -1\nBITMAP\nA0\nA0\nA0\nA0\nA0\nA0\nA0\nA0\nA0\nA0\nA0\nA0\nENDCHAR\nSTARTCHAR SF510000\nENCODING 9554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 6 -1\nBITMAP\nFC\n80\nFC\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR SF520000\nENCODING 9555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 6 5 -1\nBITMAP\nFE\nA0\nA0\nA0\nA0\nA0\nENDCHAR\nSTARTCHAR SF390000\nENCODING 9556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 5 -1\nBITMAP\nFE\n80\nBE\nA0\nA0\nA0\nA0\nENDCHAR\nSTARTCHAR SF220000\nENCODING 9557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 0 -1\nBITMAP\nFE\n02\nFE\n02\n02\n02\n02\nENDCHAR\nSTARTCHAR SF210000\nENCODING 9558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 6 0 -1\nBITMAP\nFE\n0A\n0A\n0A\n0A\n0A\nENDCHAR\nSTARTCHAR SF250000\nENCODING 9559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 0 -1\nBITMAP\nFE\n02\nFA\n0A\n0A\n0A\n0A\nENDCHAR\nSTARTCHAR SF500000\nENCODING 9560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 6 4\nBITMAP\n80\n80\n80\n80\nFC\n80\nFC\nENDCHAR\nSTARTCHAR SF490000\nENCODING 9561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 5 4\nBITMAP\nA0\nA0\nA0\nA0\nA0\nA0\nFE\nENDCHAR\nSTARTCHAR SF380000\nENCODING 9562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 5 4\nBITMAP\nA0\nA0\nA0\nA0\nBE\n80\nFE\nENDCHAR\nSTARTCHAR SF280000\nENCODING 9563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 0 4\nBITMAP\n02\n02\n02\n02\nFE\n02\nFE\nENDCHAR\nSTARTCHAR SF270000\nENCODING 9564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 0 4\nBITMAP\n0A\n0A\n0A\n0A\n0A\n0A\nFE\nENDCHAR\nSTARTCHAR SF260000\nENCODING 9565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 0 4\nBITMAP\n0A\n0A\n0A\n0A\nFA\n02\nFE\nENDCHAR\nSTARTCHAR SF360000\nENCODING 9566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 12 6 -1\nBITMAP\n80\n80\n80\n80\n80\nFC\n80\nFC\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR SF370000\nENCODING 9567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 12 5 -1\nBITMAP\nA0\nA0\nA0\nA0\nA0\nA0\nBE\nA0\nA0\nA0\nA0\nA0\nENDCHAR\nSTARTCHAR SF420000\nENCODING 9568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 12 5 -1\nBITMAP\nA0\nA0\nA0\nA0\nA0\nBE\n80\nBE\nA0\nA0\nA0\nA0\nENDCHAR\nSTARTCHAR SF190000\nENCODING 9569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 12 0 -1\nBITMAP\n02\n02\n02\n02\nFE\n02\nFE\n02\n02\n02\n02\n02\nENDCHAR\nSTARTCHAR SF200000\nENCODING 9570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 12 0 -1\nBITMAP\n05\n05\n05\n05\n05\n05\nFD\n05\n05\n05\n05\n05\nENDCHAR\nSTARTCHAR SF230000\nENCODING 9571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 12 0 -1\nBITMAP\n0A\n0A\n0A\n0A\n0A\nFA\n02\nFA\n0A\n0A\n0A\n0A\nENDCHAR\nSTARTCHAR SF470000\nENCODING 9572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 7 0 -1\nBITMAP\nFFF0\n0000\nFFF0\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR SF480000\nENCODING 9573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 6 0 -1\nBITMAP\nFFF0\n0500\n0500\n0500\n0500\n0500\nENDCHAR\nSTARTCHAR SF410000\nENCODING 9574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 7 0 -1\nBITMAP\nFFF0\n0000\nFDF0\n0500\n0500\n0500\n0500\nENDCHAR\nSTARTCHAR SF450000\nENCODING 9575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 7 0 4\nBITMAP\n0200\n0200\n0200\n0200\nFFF0\n0000\nFFF0\nENDCHAR\nSTARTCHAR SF460000\nENCODING 9576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 7 0 4\nBITMAP\n0500\n0500\n0500\n0500\n0500\n0500\nFFF0\nENDCHAR\nSTARTCHAR SF400000\nENCODING 9577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 8 0 3\nBITMAP\n0500\n0500\n0500\n0500\n0500\nFDF0\n0000\nFFF0\nENDCHAR\nSTARTCHAR SF540000\nENCODING 9578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0200\n0200\n0200\n0200\n0200\nFFF0\n0000\nFFF0\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR SF530000\nENCODING 9579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0A00\n0A00\n0A00\n0A00\n0A00\n0A00\nFBF0\n0A00\n0A00\n0A00\n0A00\n0A00\nENDCHAR\nSTARTCHAR SF440000\nENCODING 9580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0500\n0500\n0500\n0500\n0500\nFDF0\n0000\nFDF0\n0500\n0500\n0500\n0500\nENDCHAR\nSTARTCHAR U_256D\nENCODING 9581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 6 -1\nBITMAP\n0C\n30\n40\n40\n80\n80\n80\nENDCHAR\nSTARTCHAR U_256E\nENCODING 9582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 0 -1\nBITMAP\nC0\n30\n08\n08\n04\n04\n04\nENDCHAR\nSTARTCHAR U_256F\nENCODING 9583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 0 4\nBITMAP\n02\n02\n04\n04\n08\n10\nE0\nENDCHAR\nSTARTCHAR U_2570\nENCODING 9584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 6 4\nBITMAP\n80\n80\n80\n40\n40\n30\n0C\nENDCHAR\nSTARTCHAR U_2571\nENCODING 9585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\n0040\n0080\n0100\n0200\n0400\n0800\n1000\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_2572\nENCODING 9586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8000\n4000\n2000\n1000\n0800\n0400\n0200\n0100\n0080\n0040\n0020\nENDCHAR\nSTARTCHAR U_2573\nENCODING 9587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n8010\n4020\n2040\n1080\n0900\n0600\n0600\n0900\n1080\n2040\n4020\n8010\nENDCHAR\nSTARTCHAR U_2574\nENCODING 9588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 1 0 9\nBITMAP\nFFF0\nENDCHAR\nSTARTCHAR U_2581\nENCODING 9601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 2 0 -1\nBITMAP\nFFF0\nFFF0\nENDCHAR\nSTARTCHAR U_2582\nENCODING 9602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 3 0 -1\nBITMAP\nFFF0\nFFF0\nFFF0\nENDCHAR\nSTARTCHAR U_2583\nENCODING 9603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 5 0 -1\nBITMAP\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nENDCHAR\nSTARTCHAR dnblock\nENCODING 9604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 6 0 -1\nBITMAP\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nENDCHAR\nSTARTCHAR U_2585\nENCODING 9605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 8 0 -1\nBITMAP\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nENDCHAR\nSTARTCHAR U_2586\nENCODING 9606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 9 0 -1\nBITMAP\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nENDCHAR\nSTARTCHAR U_2587\nENCODING 9607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 11 0 -1\nBITMAP\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nENDCHAR\nSTARTCHAR block\nENCODING 9608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nFFF0\nENDCHAR\nSTARTCHAR U_2589\nENCODING 9609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 12 0 -1\nBITMAP\nFFE0\nFFE0\nFFE0\nFFE0\nFFE0\nFFE0\nFFE0\nFFE0\nFFE0\nFFE0\nFFE0\nFFE0\nENDCHAR\nSTARTCHAR U_258A\nENCODING 9610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 12 0 -1\nBITMAP\nFF80\nFF80\nFF80\nFF80\nFF80\nFF80\nFF80\nFF80\nFF80\nFF80\nFF80\nFF80\nENDCHAR\nSTARTCHAR U_258B\nENCODING 9611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 12 0 -1\nBITMAP\nFF\nFF\nFF\nFF\nFF\nFF\nFF\nFF\nFF\nFF\nFF\nFF\nENDCHAR\nSTARTCHAR lfblock\nENCODING 9612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 12 0 -1\nBITMAP\nFC\nFC\nFC\nFC\nFC\nFC\nFC\nFC\nFC\nFC\nFC\nFC\nENDCHAR\nSTARTCHAR U_258D\nENCODING 9613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 12 0 -1\nBITMAP\nF8\nF8\nF8\nF8\nF8\nF8\nF8\nF8\nF8\nF8\nF8\nF8\nENDCHAR\nSTARTCHAR U_258E\nENCODING 9614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 3 12 0 -1\nBITMAP\nE0\nE0\nE0\nE0\nE0\nE0\nE0\nE0\nE0\nE0\nE0\nE0\nENDCHAR\nSTARTCHAR U_258F\nENCODING 9615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 2 12 0 -1\nBITMAP\nC0\nC0\nC0\nC0\nC0\nC0\nC0\nC0\nC0\nC0\nC0\nC0\nENDCHAR\nSTARTCHAR U_2591\nENCODING 9617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n9240\n0000\n4920\n0000\n9240\n0000\n4920\n0000\n9240\n0000\n4920\nENDCHAR\nSTARTCHAR U_2592\nENCODING 9618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 12 0 -1\nBITMAP\nAAA0\n5550\nAAA0\n5550\nAAA0\n5550\nAAA0\n5550\nAAA0\n5550\nAAA0\n5550\nENDCHAR\nSTARTCHAR dkshade\nENCODING 9619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\nFFC0\nFFC0\nFFC0\nFFC0\nFFC0\nFFC0\nFFC0\nFFC0\nFFC0\nFFC0\nENDCHAR\nSTARTCHAR U_2594\nENCODING 9620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 1 0 9\nBITMAP\nFFF0\nENDCHAR\nSTARTCHAR U_2595\nENCODING 9621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 1 12 11 -1\nBITMAP\n80\n80\n80\n80\n80\n80\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR filledbox\nENCODING 9632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\nFFC0\nFFC0\nFFC0\nFFC0\nFFC0\nFFC0\nFFC0\nFFC0\nFFC0\nFFC0\nENDCHAR\nSTARTCHAR H22073\nENCODING 9633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nFFC0\n8040\n8040\n8040\n8040\n8040\n8040\n8040\n8040\n8040\nFFC0\nENDCHAR\nSTARTCHAR U_25A2\nENCODING 9634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8020\n8020\n8020\n8020\n8020\n8020\n8020\n4040\n3F80\nENDCHAR\nSTARTCHAR U_25A3\nENCODING 9635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n8020\n8020\n9F20\n9F20\n9F20\n9F20\n9F20\n8020\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_25A4\nENCODING 9636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n8020\nFFE0\n8020\nFFE0\n8020\nFFE0\n8020\nFFE0\n8020\nFFE0\nENDCHAR\nSTARTCHAR triagup\nENCODING 9650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\n0400\n0E00\n0E00\n1F00\n1F00\n3F80\n3F80\n7FC0\n7FC0\nFFE0\nENDCHAR\nSTARTCHAR U_25B3\nENCODING 9651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\n0400\n0A00\n0A00\n1100\n1100\n2080\n2080\n4040\n4040\nFFE0\nENDCHAR\nSTARTCHAR triagdn\nENCODING 9660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\nFFE0\n7FC0\n7FC0\n3F80\n3F80\n1F00\n1F00\n0E00\n0E00\n0400\nENDCHAR\nSTARTCHAR U_25BD\nENCODING 9661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\nFFE0\n4040\n4040\n2080\n2080\n1100\n1100\n0A00\n0A00\n0400\nENDCHAR\nSTARTCHAR U_25C6\nENCODING 9670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0E00\n1F00\n3F80\n7FC0\nFFE0\n7FC0\n3F80\n1F00\n0E00\n0400\nENDCHAR\nSTARTCHAR U_25C7\nENCODING 9671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0A00\n1100\n2080\n4040\n8020\n4040\n2080\n1100\n0A00\n0400\nENDCHAR\nSTARTCHAR circle\nENCODING 9675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4040\n8020\n8020\n8020\n8020\n8020\n4040\n2080\n1F00\nENDCHAR\nSTARTCHAR U_25CE\nENCODING 9678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n0F00\n30C0\n4020\n4620\n8910\n9090\n9090\n8910\n4620\n4020\n30C0\n0F00\nENDCHAR\nSTARTCHAR H18533\nENCODING 9679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n3F80\n7FC0\nFFE0\nFFE0\nFFE0\nFFE0\nFFE0\n7FC0\n3F80\n1F00\nENDCHAR\nSTARTCHAR U_25E2\nENCODING 9698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0020\n0060\n00E0\n01E0\n03E0\n07E0\n0FE0\n1FE0\n3FE0\n7FE0\nFFE0\nENDCHAR\nSTARTCHAR U_25E3\nENCODING 9699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n8000\nC000\nE000\nF000\nF800\nFC00\nFE00\nFF00\nFF80\nFFC0\nFFE0\nFFF0\nENDCHAR\nSTARTCHAR U_25E4\nENCODING 9700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\nFFF0\nFFE0\nFFC0\nFF80\nFF00\nFE00\nFC00\nF800\nF000\nE000\nC000\n8000\nENDCHAR\nSTARTCHAR U_25E5\nENCODING 9701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 0\nBITMAP\nFFE0\n7FE0\n3FE0\n1FE0\n0FE0\n07E0\n03E0\n01E0\n00E0\n0060\n0020\nENDCHAR\nSTARTCHAR U_25EE\nENCODING 9710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0E00\n0E00\n1700\n1700\n2780\n2780\n47C0\n47C0\n87E0\nFFE0\nENDCHAR\nSTARTCHAR U_25F3\nENCODING 9715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n8420\n8420\n8420\n8420\n87E0\n8020\n8020\n8020\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_2600\nENCODING 9728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n4440\n2080\n0E00\n1F00\nDF60\n1F00\n0E00\n2080\n4440\n0400\nENDCHAR\nSTARTCHAR U_2601\nENCODING 9729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0F00\n1080\n70C0\n8920\n8020\n8020\n7FC0\n0000\n0000\nENDCHAR\nSTARTCHAR U_2605\nENCODING 9733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\n0400\n0400\n0E00\nFFE0\n3F80\n1F00\n1F00\n1B00\n3180\n2080\nENDCHAR\nSTARTCHAR U_2606\nENCODING 9734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\n0400\n0400\n0E00\nFBE0\n2080\n1100\n1500\n1B00\n3180\n2080\nENDCHAR\nSTARTCHAR U_2609\nENCODING 9737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 0\nBITMAP\n3E00\n4100\n8080\n8080\n8880\n8080\n8080\n4100\n3E00\nENDCHAR\nSTARTCHAR U_260E\nENCODING 9742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n7FC0\nD160\nD160\n1F00\n7180\n60C0\n71C0\nFFE0\n0000\nENDCHAR\nSTARTCHAR U_2610\nENCODING 9744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\nFC00\n8400\n8400\n8400\nFC00\n0000\nENDCHAR\nSTARTCHAR U_262D\nENCODING 9773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0300\n00C0\n0C40\n1E20\n3C20\n1620\n0320\n31C0\n68C0\nE760\n4020\nENDCHAR\nSTARTCHAR U_262F\nENCODING 9775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0E00\n3180\n4040\n4040\n9020\nA920\nFC60\n7EE0\n7FC0\n3F80\n0E00\nENDCHAR\nSTARTCHAR U_2630\nENCODING 9776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFC0\nFFC0\n0000\n0000\nFFC0\nFFC0\n0000\n0000\nFFC0\nFFC0\n0000\nENDCHAR\nSTARTCHAR U_2631\nENCODING 9777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF1E0\nF1E0\n0000\n0000\nFFE0\nFFE0\n0000\n0000\nFFE0\nFFE0\n0000\nENDCHAR\nSTARTCHAR U_2632\nENCODING 9778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\nFFE0\n0000\n0000\nF1E0\nF1E0\n0000\n0000\nFFE0\nFFE0\n0000\nENDCHAR\nSTARTCHAR U_2633\nENCODING 9779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF1E0\nF1E0\n0000\n0000\nF1E0\nF1E0\n0000\n0000\nFFE0\nFFE0\n0000\nENDCHAR\nSTARTCHAR U_2634\nENCODING 9780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\nFFE0\n0000\n0000\nFFE0\nFFE0\n0000\n0000\nF1E0\nF1E0\n0000\nENDCHAR\nSTARTCHAR U_2635\nENCODING 9781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF1E0\nF1E0\n0000\n0000\nFFE0\nFFE0\n0000\n0000\nF1E0\nF1E0\n0000\nENDCHAR\nSTARTCHAR U_2636\nENCODING 9782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\nFFE0\n0000\n0000\nF1E0\nF1E0\n0000\n0000\nF1E0\nF1E0\n0000\nENDCHAR\nSTARTCHAR U_2637\nENCODING 9783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF1E0\nF1E0\n0000\n0000\nF1E0\nF1E0\n0000\n0000\nF1E0\nF1E0\n0000\nENDCHAR\nSTARTCHAR U_263A\nENCODING 9786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n3F00\n4080\n8040\n9240\n8040\n8040\nA140\n9E40\n4080\n3F00\nENDCHAR\nSTARTCHAR U_263C\nENCODING 9788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n4440\n2E80\n1100\n2080\nE0E0\n2080\n1100\n2E80\n4440\n0400\nENDCHAR\nSTARTCHAR U_263F\nENCODING 9791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8200\n4400\n7C00\n8200\n8200\n8200\n7C00\n1000\nFE00\n1000\n1000\nENDCHAR\nSTARTCHAR U_2640\nENCODING 9792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n1C00\n2200\n4100\n4100\n2200\n1C00\n0800\nFF80\n0800\n0800\n0800\nENDCHAR\nSTARTCHAR U_2641\nENCODING 9793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 2 0\nBITMAP\n3E00\n4900\n8880\n8880\nFF80\n8880\n8880\n4900\n3E00\nENDCHAR\nSTARTCHAR U_2642\nENCODING 9794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 11 2 -1\nBITMAP\n10\n38\n54\n92\n10\n38\n44\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_2E80\nENCODING 11904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 2 -1\nBITMAP\n0000\n0000\n6000\n1800\n0400\nC000\n3000\n0800\n0400\n0000\n0000\nENDCHAR\nSTARTCHAR U_2E81\nENCODING 11905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n01E0\n3E00\n2000\n2000\n2000\n2000\n2000\n2000\n4000\n4000\n8000\nENDCHAR\nSTARTCHAR U_2E82\nENCODING 11906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n0000\n0000\nFF80\n0080\n0080\n0100\n0100\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2E83\nENCODING 11907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 2 -1\nBITMAP\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8200\n8200\n7E00\nENDCHAR\nSTARTCHAR U_2E84\nENCODING 11908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFF00\n0100\n0100\n0100\n0100\n0100\n0120\n00A0\n00A0\n0060\nENDCHAR\nSTARTCHAR U_2E85\nENCODING 11909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n1000\n1000\n2000\n6000\nA000\n2000\n2000\n2000\n2000\n2000\nENDCHAR\nSTARTCHAR U_2E86\nENCODING 11910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n3F00\n2100\n2100\n2100\n2100\n2100\n2100\n4100\n4100\n8700\nENDCHAR\nSTARTCHAR U_2E87\nENCODING 11911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n3F80\n2080\n2080\n2080\n2080\n2080\n20A0\n40A0\n4060\n8020\nENDCHAR\nSTARTCHAR U_2E88\nENCODING 11912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n1000\n1000\n3F00\n2200\n4400\n8000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2E89\nENCODING 11913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 4 -1\nBITMAP\n1000\n1000\n9000\n9000\n9000\n9000\n9000\n9000\n9000\n1000\n3000\nENDCHAR\nSTARTCHAR U_2E8A\nENCODING 11914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 4 -1\nBITMAP\n8000\n8000\n8000\n8000\n8000\nF800\n8000\n8000\n8000\n8000\n8000\nENDCHAR\nSTARTCHAR U_2E8B\nENCODING 11915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 2 -1\nBITMAP\n0000\n0000\n0000\n0000\nFE00\n8200\n8200\n8E00\n8080\n8080\n7F80\nENDCHAR\nSTARTCHAR U_2E8C\nENCODING 11916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0800\n8880\n4900\n0800\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2E8D\nENCODING 11917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0080\n9080\n4900\n4A00\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2E8E\nENCODING 11918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nFFE0\n1200\n1200\n1200\n1200\n2200\n2220\n4220\n81E0\nENDCHAR\nSTARTCHAR U_2E8F\nENCODING 11919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1200\n2100\n40C0\n8040\n1200\n1200\n1200\n1200\n2220\n4220\n81E0\nENDCHAR\nSTARTCHAR U_2E90\nENCODING 11920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n0800\n0800\nFFE0\n0A00\n0A00\n0A00\n1200\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_2E91\nENCODING 11921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\n2080\n4040\n8040\n1E00\n1200\n1200\n1200\n2220\n4220\n81E0\nENDCHAR\nSTARTCHAR U_2E92\nENCODING 11922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 2 -1\nBITMAP\n0000\n0000\nFE00\n8200\n8200\nFE00\n8000\n8000\n8080\n8080\n7F80\nENDCHAR\nSTARTCHAR U_2E93\nENCODING 11923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0800\n1000\n2100\n4200\nFC00\n0800\n1000\n2200\n4100\nFF80\n0080\nENDCHAR\nSTARTCHAR U_2E94\nENCODING 11924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n1000\n1000\n1F00\n2100\n2100\n2100\n7E00\n0200\n0200\nFF80\nENDCHAR\nSTARTCHAR U_2E95\nENCODING 11925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFFC0\n0040\n0040\n0040\n7FC0\n0040\n0040\n0040\nFFC0\n0040\nENDCHAR\nSTARTCHAR U_2E96\nENCODING 11926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n1000\n1000\n5800\n5400\n9000\n1000\n1000\n1000\n1000\n1000\nENDCHAR\nSTARTCHAR U_2E97\nENCODING 11927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\n0800\n4A80\n4940\n8940\n0800\n1800\nENDCHAR\nSTARTCHAR U_2E98\nENCODING 11928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2000\n2000\nF800\n2000\n2000\n3800\nE000\n2000\n2000\n2000\n6000\nENDCHAR\nSTARTCHAR U_2E99\nENCODING 11929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n1000\n1000\n3FC0\n2100\n6100\n9200\n1200\n0C00\n0C00\n1200\nE1C0\nENDCHAR\nSTARTCHAR U_2E9C\nENCODING 11932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\nFF80\n8080\nBE80\n8080\nBE80\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2E9D\nENCODING 11933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 2 -1\nBITMAP\nFC00\n8400\n8400\nFC00\n8400\n8400\nFC00\n8400\n8400\n8400\n8C00\nENDCHAR\nSTARTCHAR U_2E9F\nENCODING 11935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n2880\n2480\n2080\nFFE0\n2880\n2480\n2080\n7FE0\n0080\n0300\nENDCHAR\nSTARTCHAR U_2EA0\nENCODING 11936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\nFF00\n8100\n8100\nFF00\n8400\nFF80\n8400\n8200\nA140\nC080\nENDCHAR\nSTARTCHAR U_2EA4\nENCODING 11940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n03C0\nFC80\n4880\n2500\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2EA5\nENCODING 11941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0780\n7900\n4900\n4900\n8880\n8040\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2EA7\nENCODING 11943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2400\n7FC0\n8400\n7FE0\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2EAA\nENCODING 11946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nF800\n1000\n2000\nA000\nB000\nA000\nA000\nB000\nC000\n0000\nENDCHAR\nSTARTCHAR U_2EAC\nENCODING 11948\nSWIDTH 1000 0\nDWIDTH 6 0\nBBX 6 12 0 -1\nBITMAP\n7C\n00\nFC\n10\n54\n54\n54\n54\n54\n94\n10\n00\nENDCHAR\nSTARTCHAR U_2EAE\nENCODING 11950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\n4100\n7DE0\n5140\n4940\n8A20\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2EB0\nENCODING 11952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFFE0\nB1A0\n8E20\nB1A0\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2EB5\nENCODING 11957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\nFF80\n9480\n9480\n9480\n9480\n9480\n9480\n9480\n8080\n0000\nENDCHAR\nSTARTCHAR U_2EB6\nENCODING 11958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2040\n1080\nFFE0\n0400\n7FC0\n0400\nFFE0\n0800\n1000\n2000\nC000\nENDCHAR\nSTARTCHAR U_2EB7\nENCODING 11959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n2200\n1400\n1400\n7F00\n0800\n3E00\n0800\nFF80\n0000\n0000\nENDCHAR\nSTARTCHAR U_2EB8\nENCODING 11960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\n1100\nF1E0\n1100\n1100\nFFF0\n0400\n7FC0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_2EBB\nENCODING 11963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n7FC0\n0440\nFFE0\n0440\n7FC0\n0400\nFFE0\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2EBC\nENCODING 11964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n3F00\n2100\n2900\n2500\n2100\n2300\n2500\n5900\n4100\n8300\nENDCHAR\nSTARTCHAR U_2EBD\nENCODING 11965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n1000\n2780\nC080\n8080\n8080\nF780\n8080\n8080\n8080\nF780\n8080\nENDCHAR\nSTARTCHAR U_2EBF\nENCODING 11967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n2080\nFBE0\n2080\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2EC4\nENCODING 11972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFFE0\n0A00\n7FC0\n4A40\n4A40\n5240\n52C0\n6340\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_2EC7\nENCODING 11975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n2000\n3F00\n4100\n7F80\nC880\n5480\n6A80\n4880\n5480\n6280\n4180\nENDCHAR\nSTARTCHAR U_2ECA\nENCODING 11978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7C00\n4400\n4400\n7C00\n1000\n5C00\n5000\n5000\n5000\n5C00\nE000\nENDCHAR\nSTARTCHAR U_2ECD\nENCODING 11981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4000\n2000\n8000\n4000\n0000\nE000\n2000\n2000\n2000\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_2ECE\nENCODING 11982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4000\n2000\n0000\nE000\n2000\n4000\nE000\n2000\n2000\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_2ECF\nENCODING 11983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 7 -1\nBITMAP\nF000\n9000\nA000\nC000\nA000\n9000\n9000\nD000\nA000\n8000\n8000\nENDCHAR\nSTARTCHAR U_2ED6\nENCODING 11990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF000\n9000\nA000\nC000\nA000\n9000\n9000\n9000\nE000\n8000\n8000\nENDCHAR\nSTARTCHAR U_2ED7\nENCODING 11991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n0400\nFFE0\nA4A0\n9520\n64C0\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_2ED8\nENCODING 11992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n7FC0\n0400\n7FC0\n0400\nFFE0\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_2ED9\nENCODING 11993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0800\nFFC0\n0800\n7F80\n0800\n0800\nFFC0\n0840\n0840\n0980\n0800\nENDCHAR\nSTARTCHAR U_2EE3\nENCODING 12003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n2080\n3C80\n2480\nFFE0\nA0A0\nBFA0\n2080\n3F80\n2080\n2380\nENDCHAR\nSTARTCHAR U_2EF1\nENCODING 12017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n7F80\n4080\n7BC0\n2AC0\nFB40\n2AC0\nFB40\n2BC0\nEA20\n07C0\nENDCHAR\nSTARTCHAR U_2F00\nENCODING 12032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 2 0 4\nBITMAP\n0040\nFFE0\nENDCHAR\nSTARTCHAR U_2F01\nENCODING 12033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 2 11 6 -1\nBITMAP\n80\nC0\n80\n80\n80\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_2F02\nENCODING 12034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 3 4 4 3\nBITMAP\n80\n40\n20\n20\nENDCHAR\nSTARTCHAR U_2F03\nENCODING 12035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 11 0 -1\nBITMAP\n08\n08\n08\n08\n08\n08\n08\n10\n10\n20\nC0\nENDCHAR\nSTARTCHAR U_2F04\nENCODING 12036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 2 -1\nBITMAP\nFE00\n0200\n0400\n0800\n1000\n2000\n4000\n8080\n8080\n8080\n7F80\nENDCHAR\nSTARTCHAR U_2F05\nENCODING 12037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 4 10 4 0\nBITMAP\n10\n20\n20\n20\n20\n20\n20\n20\n20\nE0\nENDCHAR\nSTARTCHAR U_2F06\nENCODING 12038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 9 1 0\nBITMAP\n0100\n7F80\n0000\n0000\n0000\n0000\n0000\n0080\nFFC0\nENDCHAR\nSTARTCHAR U_2F07\nENCODING 12039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 4 1 4\nBITMAP\n0800\n0400\n0400\nFFC0\nENDCHAR\nSTARTCHAR U_2F08\nENCODING 12040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\n0400\n0400\n0400\n0400\n0A00\n1100\n2080\n4060\n8020\nENDCHAR\nSTARTCHAR U_2F09\nENCODING 12041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\n1100\n1100\n1100\n1100\n1100\n1100\n1100\n2120\n4120\n80E0\nENDCHAR\nSTARTCHAR U_2F0A\nENCODING 12042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1800\n0400\n0400\n0400\n0400\n0400\n0A00\n1100\n2080\n4060\n8020\nENDCHAR\nSTARTCHAR U_2F0B\nENCODING 12043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\n0300\n0100\n1100\n1100\n1100\n1100\n1100\n2080\n4060\n8020\nENDCHAR\nSTARTCHAR U_2F0C\nENCODING 12044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nFFC0\n8040\n8040\n8040\n8040\n8040\n8040\n8040\n8040\n8240\n8180\nENDCHAR\nSTARTCHAR U_2F0D\nENCODING 12045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 4 0 3\nBITMAP\n4020\n7FE0\n8040\n8040\nENDCHAR\nSTARTCHAR U_2F0E\nENCODING 12046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 11 3 -1\nBITMAP\n40\n20\n08\n10\n10\n20\n20\nC0\n40\n40\n40\nENDCHAR\nSTARTCHAR U_2F0F\nENCODING 12047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n1100\n1100\n1100\n1100\n1100\n1100\n1100\n2120\n4120\n80E0\nENDCHAR\nSTARTCHAR U_2F10\nENCODING 12048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 -1\nBITMAP\n8040\n8040\n8040\n8040\n8040\n8040\n8040\n8040\nFFC0\n8040\nENDCHAR\nSTARTCHAR U_2F11\nENCODING 12049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0040\n7FE0\n0840\n0840\n0840\n0840\n1040\n1040\n2040\n4240\n8180\nENDCHAR\nSTARTCHAR U_2F12\nENCODING 12050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n0800\n0800\n0800\nFF80\n0880\n0880\n1080\n1080\n2080\n4480\n8300\nENDCHAR\nSTARTCHAR U_2F13\nENCODING 12051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n2000\n3FC0\n4040\n8040\n0040\n0040\n0040\n0040\n0040\n0240\n0180\nENDCHAR\nSTARTCHAR U_2F14\nENCODING 12052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n10C0\n1080\n1100\n1200\n1400\n1800\nF020\n1020\n1020\n0FE0\nENDCHAR\nSTARTCHAR U_2F15\nENCODING 12053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n8100\nFF80\n8000\n8000\n8000\n8000\n8000\n8000\n8080\nFFC0\n8000\nENDCHAR\nSTARTCHAR U_2F16\nENCODING 12054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 12 0 -1\nBITMAP\n0040\nFFE0\n4000\n4000\n4000\n4000\n4000\n4000\n4000\n4000\n4040\n7FE0\nENDCHAR\nSTARTCHAR U_2F17\nENCODING 12055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\n0400\n0440\nFFE0\n0400\n0400\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_2F18\nENCODING 12056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 11 4 -1\nBITMAP\n80\n80\n80\nC0\nA0\n98\n8C\n84\n80\n80\n80\nENDCHAR\nSTARTCHAR U_2F19\nENCODING 12057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 11 4 -1\nBITMAP\nF8\n88\n88\n88\n88\n88\nA8\n90\n80\n80\n80\nENDCHAR\nSTARTCHAR U_2F1A\nENCODING 12058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FE0\n4000\n4000\n4000\n4000\n4000\n4000\n4000\n4000\n8000\n8000\nENDCHAR\nSTARTCHAR U_2F1B\nENCODING 12059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 -1\nBITMAP\n0400\n0400\n0800\n0800\n1000\n1080\n2040\n4FE0\nF020\n4000\nENDCHAR\nSTARTCHAR U_2F1C\nENCODING 12060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0100\n7F80\n2100\n2100\n1200\n1200\n1200\n0C00\n0C00\n3300\nC0C0\nENDCHAR\nSTARTCHAR U_2F1D\nENCODING 12061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 9 2 0\nBITMAP\nFF\n81\n81\n81\n81\n81\n81\nFF\n81\nENDCHAR\nSTARTCHAR U_2F1E\nENCODING 12062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nFFC0\n8040\n8040\n8040\n8040\n8040\n8040\n8040\n8040\nFFC0\n8040\nENDCHAR\nSTARTCHAR U_2F1F\nENCODING 12063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\n0400\n0480\n7FC0\n0400\n0400\n0400\n0400\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_2F20\nENCODING 12064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\n0400\n0440\nFFE0\n0400\n0400\n0400\n0400\n0480\n7FC0\nENDCHAR\nSTARTCHAR U_2F21\nENCODING 12065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 7 0 3\nBITMAP\n0800\n1F80\n3080\n4900\n0600\n0900\nF0E0\nENDCHAR\nSTARTCHAR U_2F22\nENCODING 12066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n2800\n1F80\n1080\n1100\n2900\n4600\n0200\n0500\n18E0\nE040\nENDCHAR\nSTARTCHAR U_2F23\nENCODING 12067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n0840\n0FE0\n1040\n2880\n4480\n0500\n0100\n0200\n0C00\nF000\nENDCHAR\nSTARTCHAR U_2F24\nENCODING 12068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\n0440\nFFE0\n0400\n0400\n0400\n0A00\n1100\n20E0\nC040\nENDCHAR\nSTARTCHAR U_2F25\nENCODING 12069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n1000\n1000\n1000\nFFC0\n1200\n2200\n2200\n1400\n0E00\n1100\n6080\nENDCHAR\nSTARTCHAR U_2F26\nENCODING 12070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nFF80\n0100\n0200\n0400\n0400\nFFC0\n0400\n0400\n2400\n1C00\n0800\nENDCHAR\nSTARTCHAR U_2F27\nENCODING 12071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 5 0 3\nBITMAP\n0400\n0200\n7FE0\n4020\n8040\nENDCHAR\nSTARTCHAR U_2F28\nENCODING 12072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0200\n0200\n0200\nFFC0\n0200\n2200\n1200\n0200\n1200\n0E00\n0400\nENDCHAR\nSTARTCHAR U_2F29\nENCODING 12073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\n0400\n2480\n2480\n4440\n4440\n8420\nA420\n1C00\n0800\nENDCHAR\nSTARTCHAR U_2F2A\nENCODING 12074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n0800\nFFC0\n0800\n0A00\n0A00\n0A00\n0A00\n1240\n2240\nC1C0\nENDCHAR\nSTARTCHAR U_2F2B\nENCODING 12075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3FE0\n2020\n2020\n2020\n3FE0\n2020\n2000\n2000\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_2F2C\nENCODING 12076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0400\n0400\n4440\n4440\n4440\n7FC0\n4440\n0400\n0800\n3000\nC000\nENDCHAR\nSTARTCHAR U_2F2D\nENCODING 12077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 2 -1\nBITMAP\n0800\n0800\n8880\n8880\n8880\n8880\n8880\n8880\n8880\nFF80\n8080\nENDCHAR\nSTARTCHAR U_2F2E\nENCODING 12078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\n2220\n2220\n4440\n4440\n8880\n8880\n4440\n4440\n2220\n2220\nENDCHAR\nSTARTCHAR U_2F2F\nENCODING 12079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\n0080\n7FC0\n0400\n0400\n0400\n0400\n0400\n0400\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_2F30\nENCODING 12080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nFF80\n0080\n0080\n0080\n7F80\n4080\n4000\n4000\n4040\n4040\n3FC0\nENDCHAR\nSTARTCHAR U_2F31\nENCODING 12081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n0800\n0800\nFF80\n8880\n8880\n8880\n8880\n8880\n8B80\n0800\n0800\nENDCHAR\nSTARTCHAR U_2F32\nENCODING 12082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n0400\n0400\n0400\nFFE0\n0400\n0400\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_2F33\nENCODING 12083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n0800\n0800\n1300\n2200\n7E00\n4400\n0800\n1100\n2180\nFE80\n4080\nENDCHAR\nSTARTCHAR U_2F34\nENCODING 12084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0600\n2200\n3FE0\n2000\n2000\n2000\n2000\n2000\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_2F35\nENCODING 12085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF800\n1000\n2000\n2000\n7800\n0800\n8800\n5000\n3000\n2800\nC7E0\nENDCHAR\nSTARTCHAR U_2F36\nENCODING 12086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1080\n1080\n1080\n1080\nFFE0\n1080\n1080\n1080\n2080\n4080\n8080\nENDCHAR\nSTARTCHAR U_2F37\nENCODING 12087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0500\n0480\n0400\n04E0\n1F00\nE400\n0400\n0220\n0120\n00A0\n0060\nENDCHAR\nSTARTCHAR U_2F38\nENCODING 12088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 11 2 -1\nBITMAP\nFE\n02\n02\n7E\n40\n80\nFF\n01\n01\n12\n0C\nENDCHAR\nSTARTCHAR U_2F39\nENCODING 12089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0080\nFFC0\n0080\n0080\n0080\n7F80\n0080\n0080\n0080\nFF80\n0080\nENDCHAR\nSTARTCHAR U_2F3A\nENCODING 12090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 11 3 -1\nBITMAP\n30\n20\n40\n98\n10\n20\n4C\n88\n10\n20\nC0\nENDCHAR\nSTARTCHAR U_2F3B\nENCODING 12091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 11 3 -1\nBITMAP\n10\n10\n20\n48\n88\n10\n20\n60\nA0\n20\n20\nENDCHAR\nSTARTCHAR U_2F3C\nENCODING 12092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n0100\n0900\n0800\n0840\n4820\n4820\n4880\n8880\n08C0\n0780\nENDCHAR\nSTARTCHAR U_2F3D\nENCODING 12093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0A00\n0900\n0840\n0FE0\nF800\n0880\n0900\n0620\n0A20\n31A0\nC060\nENDCHAR\nSTARTCHAR U_2F3E\nENCODING 12094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 0 -1\nBITMAP\n00C0\n3F00\n2000\n3FC0\n2040\n2040\n3FC0\n2040\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_2F3F\nENCODING 12095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n00C0\n7F00\n0400\n3FC0\n0400\n0400\nFFE0\n0400\n2400\n1C00\n0800\nENDCHAR\nSTARTCHAR U_2F40\nENCODING 12096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0440\nFFE0\n0400\n3F80\n1100\n1100\n0A00\n0400\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_2F41\nENCODING 12097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n0880\n0FC0\n0800\n7F80\n2100\n1200\n0C00\n0C00\n3300\nC0C0\nENDCHAR\nSTARTCHAR U_2F42\nENCODING 12098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0C00\n0400\nFFE0\n2080\n2080\n1100\n1100\n0A00\n0400\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_2F43\nENCODING 12099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n2200\n1A00\n0A00\n4200\n3200\n1200\n03C0\nFE00\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_2F44\nENCODING 12100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n21C0\n3E00\n2000\n2040\n3FE0\n2100\n2100\n2100\n2100\n4100\n8100\nENDCHAR\nSTARTCHAR U_2F45\nENCODING 12101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0C00\n0400\nFFE0\n0800\n0840\n0FE0\n0840\n1040\n2440\n4380\n8100\nENDCHAR\nSTARTCHAR U_2F46\nENCODING 12102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n0400\n0400\n0400\nFFE0\n0A00\n0A00\n0A00\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_2F47\nENCODING 12103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n8100\nFF80\n8100\n8100\n8100\nFF00\n8100\n8100\n8100\nFF00\n8100\nENDCHAR\nSTARTCHAR U_2F48\nENCODING 12104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\n0080\nFFC0\n8080\n8080\n8080\nFF80\n8080\n8080\nFF80\n8080\nENDCHAR\nSTARTCHAR U_2F49\nENCODING 12105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 0 -1\nBITMAP\n3FC0\n2040\n2040\n3FC0\n2040\n2040\n3FC0\n2040\n2240\n41C0\n8080\nENDCHAR\nSTARTCHAR U_2F4A\nENCODING 12106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0440\nFFE0\n0400\n0400\n1500\n1500\n2480\n2480\n4440\n8420\nENDCHAR\nSTARTCHAR U_2F4B\nENCODING 12107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n2000\n2000\n3FC0\n4040\n8880\n0800\n0800\n0C00\n1200\n2100\nC0C0\nENDCHAR\nSTARTCHAR U_2F4C\nENCODING 12108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\n0400\n2480\n27C0\n2400\n2400\n2400\n2400\n2440\nFFE0\nENDCHAR\nSTARTCHAR U_2F4D\nENCODING 12109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n0800\n0880\n0FC0\n1080\n1080\n2900\nC500\n0200\n0C00\nF000\nENDCHAR\nSTARTCHAR U_2F4E\nENCODING 12110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n3E00\n2200\n2200\n23C0\nC000\n3F80\n1100\n0A00\n0400\n1B00\nE0C0\nENDCHAR\nSTARTCHAR U_2F4F\nENCODING 12111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n2480\n2480\n2480\nFFE0\n2480\n2480\n7FE0\n0880\n1080\n2300\nENDCHAR\nSTARTCHAR U_2F50\nENCODING 12112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n2200\n2240\n2280\n3B00\n2200\n2200\n2200\n3A20\nE220\n41E0\nENDCHAR\nSTARTCHAR U_2F51\nENCODING 12113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0380\n7C00\n0400\n0580\n7E00\n0400\n04E0\nFF00\n0420\n0420\n03E0\nENDCHAR\nSTARTCHAR U_2F52\nENCODING 12114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0180\n7E00\n4200\n4200\n7FE0\n4200\n4200\n4200\n5920\nE0A0\n4060\nENDCHAR\nSTARTCHAR U_2F53\nENCODING 12115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n1FE0\n2000\n5F80\n8000\n7F80\n0080\n00A0\n00A0\n0060\n0020\nENDCHAR\nSTARTCHAR U_2F54\nENCODING 12116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\n04C0\nFC80\n1700\n1600\n1500\n2500\n5480\n8C60\n0820\nENDCHAR\nSTARTCHAR U_2F55\nENCODING 12117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\n2460\n2440\n2480\n4500\n0A00\n0900\n1080\n2060\nC020\nENDCHAR\nSTARTCHAR U_2F56\nENCODING 12118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n00C0\n3F80\n2480\n2480\n2480\n2480\n2480\n2480\n2480\n4440\n8020\nENDCHAR\nSTARTCHAR U_2F57\nENCODING 12119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1080\n2040\n4020\n80A0\n1080\n1100\n0A00\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_2F58\nENCODING 12120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n6100\n1A00\n0600\n1900\nE280\n2200\n1200\n0C00\n0C00\n3300\nC0C0\nENDCHAR\nSTARTCHAR U_2F59\nENCODING 12121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 11 1 -1\nBITMAP\n11\n11\n11\n1F\n01\nFF\n11\n11\n11\n21\nC1\nENDCHAR\nSTARTCHAR U_2F5A\nENCODING 12122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n2100\n2100\n3FE0\n2000\n2000\n3F00\n2100\n2100\n4100\n8100\nENDCHAR\nSTARTCHAR U_2F5B\nENCODING 12123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nFFC0\n0200\n2200\n4200\nFFC0\n0600\n0A00\n1200\n2200\n5E00\n8400\nENDCHAR\nSTARTCHAR U_2F5C\nENCODING 12124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n4480\n7FC0\n8400\n0400\n0440\nFFE0\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_2F5D\nENCODING 12125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0500\n0480\n0400\nFFE0\n0400\n0400\n0600\n0900\n1080\n2040\nC020\nENDCHAR\nSTARTCHAR U_2F5E\nENCODING 12126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0200\nFFE0\n0400\n0880\n1100\n3E00\n0400\n0880\n1340\n7C40\nENDCHAR\nSTARTCHAR U_2F5F\nENCODING 12127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n0400\n0400\n0400\n0400\n3F80\n0400\n0500\n0480\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_2F60\nENCODING 12128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n01C0\n3F00\n2500\n2500\n2500\n2480\n2480\n2440\n2540\n47A0\n8CA0\nENDCHAR\nSTARTCHAR U_2F61\nENCODING 12129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0040\nFFE0\n1000\n1F00\n1100\n2900\n2500\n2500\n2120\nFD20\n40E0\nENDCHAR\nSTARTCHAR U_2F62\nENCODING 12130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n2100\n2100\nFFC0\n2100\n2100\n2100\n3F00\n2100\n2100\n3F00\n2100\nENDCHAR\nSTARTCHAR U_2F63\nENCODING 12131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n2200\n2200\n3FE0\n4200\n8200\n1FC0\n0200\n0200\n0200\n7FE0\nENDCHAR\nSTARTCHAR U_2F64\nENCODING 12132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3FE0\n2220\n2220\n3FE0\n2220\n2220\n3FE0\n2220\n2220\n42E0\n8040\nENDCHAR\nSTARTCHAR U_2F65\nENCODING 12133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 2 -1\nBITMAP\nFF80\n8880\n8880\n8880\nFF80\n8880\n8880\n8880\nFF80\n8080\nENDCHAR\nSTARTCHAR U_2F66\nENCODING 12134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FE0\n0220\n0240\n0200\n1200\n13E0\n1200\n1200\n2A00\n4600\n83E0\nENDCHAR\nSTARTCHAR U_2F67\nENCODING 12135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0100\n1FE0\n9000\n5000\n3000\n5000\n9000\n1000\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_2F68\nENCODING 12136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 6 0 4\nBITMAP\nFC80\n4B20\n3140\n2080\n4040\n8020\nENDCHAR\nSTARTCHAR U_2F69\nENCODING 12137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 11 2 -1\nBITMAP\n30\n20\nFF\n81\n81\nFF\n81\n81\n81\nFF\n81\nENDCHAR\nSTARTCHAR U_2F6A\nENCODING 12138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n0200\n3FE0\n2240\n2200\n3F80\n2880\n2880\n2500\n4300\n9CE0\nENDCHAR\nSTARTCHAR U_2F6B\nENCODING 12139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\n0080\n7FC0\n5280\n5280\n5280\n5280\n5280\n5280\n5280\nFFC0\nENDCHAR\nSTARTCHAR U_2F6C\nENCODING 12140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 11 2 -1\nBITMAP\nFF\n81\n81\nFF\n81\n81\nFF\n81\n81\nFF\n81\nENDCHAR\nSTARTCHAR U_2F6D\nENCODING 12141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n7F80\n0100\n1A00\n0400\nFFC0\n0C80\n1500\n2400\n4400\n9C00\n0800\nENDCHAR\nSTARTCHAR U_2F6E\nENCODING 12142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n2000\n2000\n3F80\n4400\n0400\nFFC0\n0400\n0C00\n1200\n21C0\nC080\nENDCHAR\nSTARTCHAR U_2F6F\nENCODING 12143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0040\n7FE0\n0400\n0800\n1000\n3FC0\n5040\n9040\n1040\n1FC0\n1040\nENDCHAR\nSTARTCHAR U_2F70\nENCODING 12144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0080\n3FC0\n0000\n0000\n7FE0\n0200\n1280\n2240\n4220\n8E20\n0400\nENDCHAR\nSTARTCHAR U_2F71\nENCODING 12145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 2 -1\nBITMAP\n1800\n1000\nFF80\n9080\n9080\nA480\nAE80\nF280\n8080\n8080\n8380\nENDCHAR\nSTARTCHAR U_2F72\nENCODING 12146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n00C0\n7F00\n0400\n0400\nFFE0\n0400\n0E00\n1500\n2480\n4440\n8420\nENDCHAR\nSTARTCHAR U_2F73\nENCODING 12147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n0400\nFFC0\n8040\n9240\n1200\n1200\n2100\n2100\n40C0\n8040\nENDCHAR\nSTARTCHAR U_2F74\nENCODING 12148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0C00\n0400\n7FC0\n0000\n2080\n2080\n1100\n1100\n1200\n0200\nFFE0\nENDCHAR\nSTARTCHAR U_2F75\nENCODING 12149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n2100\n2200\n3BE0\n5480\n9080\n1080\n1080\n1080\n1380\n1100\nENDCHAR\nSTARTCHAR U_2F76\nENCODING 12150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n44C0\n3480\n1500\nFFE0\n0400\n0E00\n1500\n24C0\n4460\n8420\nENDCHAR\nSTARTCHAR U_2F77\nENCODING 12151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n1100\n2200\n7C00\n1100\nFE80\n4480\n2500\n2480\n4440\n8440\nENDCHAR\nSTARTCHAR U_2F78\nENCODING 12152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n1FC0\n2400\n4400\n0400\nFFE0\n0400\n4440\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_2F79\nENCODING 12153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nFFC0\n8040\n9140\nD540\nA240\n9240\nAD40\nC540\n8840\n8040\n81C0\nENDCHAR\nSTARTCHAR U_2F7A\nENCODING 12154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n1100\n7FC0\n0400\n0400\n3F80\n0400\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_2F7B\nENCODING 12155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFBE0\n0820\n4920\n28A0\n0860\n18A0\nEB20\n4920\n0820\n79E0\n1040\nENDCHAR\nSTARTCHAR U_2F7C\nENCODING 12156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n0880\n7E80\n0900\nFFC0\n0800\n1180\n3600\nD840\n1040\n0FC0\nENDCHAR\nSTARTCHAR U_2F7D\nENCODING 12157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n0400\n0800\n7FE0\n4920\n4920\n4920\n4920\n4920\n4920\n40E0\nENDCHAR\nSTARTCHAR U_2F7E\nENCODING 12158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\nFFE0\n0400\n7FC0\n0400\nFFE0\n1500\n1500\n2480\n4460\n8420\nENDCHAR\nSTARTCHAR U_2F7F\nENCODING 12159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nFFC0\n2100\n2100\n3F00\n2100\n3F00\n2100\n21C0\nFF00\n0100\n0100\nENDCHAR\nSTARTCHAR U_2F80\nENCODING 12160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n3F80\n0480\nFFE0\n0480\n3F80\n0400\n7FC0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_2F81\nENCODING 12161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\nFFC0\n8840\n8C40\n9340\nE840\n8C40\n9240\nE140\n8040\n80C0\nENDCHAR\nSTARTCHAR U_2F82\nENCODING 12162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 2 -1\nBITMAP\n8200\nFF00\n8800\n8800\nFF00\n8100\n8100\nFF00\n8800\n8900\nFF80\nENDCHAR\nSTARTCHAR U_2F83\nENCODING 12163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 11 2 -1\nBITMAP\n30\n20\nFF\n81\nFF\n81\n81\nFF\n81\nFF\n81\nENDCHAR\nSTARTCHAR U_2F84\nENCODING 12164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0040\n7FE0\n0800\n1080\n7F60\n2420\n0400\n3FC0\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_2F85\nENCODING 12165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n1000\nE3C0\n8040\n8040\n8040\nFBC0\n8040\n8040\n8040\nFFC0\n8040\nENDCHAR\nSTARTCHAR U_2F86\nENCODING 12166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0180\n7E00\n0400\nFFC0\n0400\n0400\n3F80\n2080\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_2F87\nENCODING 12167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n2080\n3BE0\n4880\n4A80\nBA80\n0FE0\n1080\n2080\n4080\n8080\nENDCHAR\nSTARTCHAR U_2F88\nENCODING 12168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n1F80\n1080\n1480\n1280\nFFE0\n1480\n1280\n2280\n4080\n8380\nENDCHAR\nSTARTCHAR U_2F89\nENCODING 12169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7F80\n4080\n7F80\n4080\n7F80\n4820\n4440\n4280\n4100\n5880\nE060\nENDCHAR\nSTARTCHAR U_2F8A\nENCODING 12170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n1F80\n2200\n7FC0\nA440\n2440\n3FC0\n2040\n2020\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_2F8B\nENCODING 12171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n2080\nAAA0\nAAA0\nAAA0\nAAA0\nFBE0\nAAA0\n2080\n4080\n8080\nENDCHAR\nSTARTCHAR U_2F8C\nENCODING 12172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n07E0\n0400\n7FE0\n4040\n4400\n44C0\n7F00\n4420\n4420\n83E0\nENDCHAR\nSTARTCHAR U_2F8D\nENCODING 12173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\n7FC0\n4440\n4440\n7FC0\n4440\n0480\n07C0\nFC20\n6020\nENDCHAR\nSTARTCHAR U_2F8E\nENCODING 12174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\n0C00\n0800\n3F80\n2A80\n2A80\n2A80\n2A80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_2F8F\nENCODING 12175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n27C0\n4000\n8000\n1000\n2FE0\n6080\nA080\n2080\n2480\n2380\n2100\nENDCHAR\nSTARTCHAR U_2F90\nENCODING 12176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0240\nFFE0\n0400\n0A40\n1280\n3100\n5100\n94C0\n1860\n3020\nENDCHAR\nSTARTCHAR U_2F91\nENCODING 12177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nFFC0\n1200\n1200\nFFC0\n9240\n9240\n9E40\n9240\n8040\n8040\n8040\nENDCHAR\nSTARTCHAR U_2F92\nENCODING 12178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n2080\n3F80\n2080\n3F80\n2080\n3F80\n2A80\n0A20\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_2F93\nENCODING 12179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n1F00\n2200\n7FE0\nA220\n3FE0\n2220\n3FE0\n2220\n42E0\n8040\nENDCHAR\nSTARTCHAR U_2F94\nENCODING 12180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\nFFC0\n0000\n3F00\n0000\n3F00\n0000\n3F00\n2100\n3F00\n2100\nENDCHAR\nSTARTCHAR U_2F95\nENCODING 12181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n1200\n2100\n4880\n8C40\n1200\n2100\nFFC0\n2100\n2100\n3F00\n2100\nENDCHAR\nSTARTCHAR U_2F96\nENCODING 12182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0080\n7FC0\n0000\n3F80\n2080\n3F80\n2080\n1100\n0900\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_2F97\nENCODING 12183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n0400\n0840\n1880\n6500\n0A00\n1300\n6680\n0A40\n7220\n0C00\nENDCHAR\nSTARTCHAR U_2F98\nENCODING 12184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 11 2 -1\nBITMAP\n0E\n30\nCB\n2C\n36\nCA\n36\nCA\n32\nC2\n0C\nENDCHAR\nSTARTCHAR U_2F99\nENCODING 12185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3FC0\n2040\n3FC0\n2040\n3FC0\n2040\n3FC0\n2040\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_2F9A\nENCODING 12186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\n3FC0\n0400\nFFE0\n0900\n2940\n2940\n4920\n1720\n6200\nENDCHAR\nSTARTCHAR U_2F9B\nENCODING 12187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n7FC0\n0400\n0400\nFFE0\n0400\n2400\n27C0\n2400\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_2F9C\nENCODING 12188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1FC0\n1040\n1040\n1FC0\n0200\n1200\n13E0\n1200\n2A00\n4600\n81E0\nENDCHAR\nSTARTCHAR U_2F9D\nENCODING 12189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n3F00\n2100\n3F00\n2140\n3F80\n2100\nFF00\n0900\n3100\nC700\nENDCHAR\nSTARTCHAR U_2F9E\nENCODING 12190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n7FC0\n0400\n3F80\n2480\n3F80\n2480\n3F80\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_2F9F\nENCODING 12191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n7FC0\n2080\n1900\n0A00\nFFE0\n0400\n7FC0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_2FA0\nENCODING 12192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3FE0\n2000\n2FC0\n2000\n3FE0\n2A20\n2A40\n2980\n4880\n4A40\n8C20\nENDCHAR\nSTARTCHAR U_2FA1\nENCODING 12193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0600\n3980\n0600\n3980\n0600\n3A00\n1200\n13C0\n2A00\n4600\n81E0\nENDCHAR\nSTARTCHAR U_2FA2\nENCODING 12194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n7F00\n4100\n7F00\n0000\nFF80\n8880\n8880\nFF80\n8040\n8040\n7FC0\nENDCHAR\nSTARTCHAR U_2FA3\nENCODING 12195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n0A00\n0A00\n7FC0\n4A40\n53C0\n6040\n7FC0\n4040\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_2FA4\nENCODING 12196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0380\n7C40\n2480\n1500\n7FE0\n0400\n0E00\n1500\n24C0\n4460\n8420\nENDCHAR\nSTARTCHAR U_2FA5\nENCODING 12197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n7F80\n4480\n4480\n7F80\n4480\n7F80\n4480\n0400\n7F80\n0400\nFFC0\nENDCHAR\nSTARTCHAR U_2FA6\nENCODING 12198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0A00\n1100\n20E0\nDF40\n0400\n7FC0\n2480\n1480\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_2FA7\nENCODING 12199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n3F80\n2000\n3F00\n2000\n3F00\n2000\nFFC0\n2440\n2280\n2900\n30C0\nENDCHAR\nSTARTCHAR U_2FA8\nENCODING 12200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nF3C0\n9240\nF3C0\n9240\nF3C0\n8040\n8040\n8040\n8040\n8040\n81C0\nENDCHAR\nSTARTCHAR U_2FA9\nENCODING 12201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n7F80\n4080\n7F80\n4000\n7FC0\n4040\n7FC0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_2FAA\nENCODING 12202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n3F80\n0480\n7FE0\n0480\n7F80\n2640\n1D80\n1480\nE460\n4C20\nENDCHAR\nSTARTCHAR U_2FAB\nENCODING 12203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1200\n1100\n3FE0\n2200\n7FC0\nA200\n2200\n3FC0\n2200\n3FE0\n2000\nENDCHAR\nSTARTCHAR U_2FAC\nENCODING 12204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n0400\n0400\n7FC0\n4440\n5540\n4CC0\n6640\n5540\n4440\n44C0\nENDCHAR\nSTARTCHAR U_2FAD\nENCODING 12205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\nFFE0\n0400\n7FC0\n0400\nFFE0\n2480\n3F80\n2080\n2080\n2180\nENDCHAR\nSTARTCHAR U_2FAE\nENCODING 12206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\n1100\nF1E0\n1100\n1100\n71C0\n1100\n1100\nF1E0\n1100\n1100\nENDCHAR\nSTARTCHAR U_2FAF\nENCODING 12207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n0400\n0800\nFFE0\n9120\n9F20\n9120\n9F20\n9120\nFFE0\n8020\nENDCHAR\nSTARTCHAR U_2FB0\nENCODING 12208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\nFFE0\n1100\n1F00\n0400\n3F80\n2480\n3F80\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_2FB1\nENCODING 12209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n7F00\n1100\nFFC0\n2080\n3F80\n0400\nFF80\n2400\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_2FB2\nENCODING 12210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\nF1E0\n1100\n1100\n71C0\n1100\n1100\nF1E0\n1100\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_2FB3\nENCODING 12211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n7FC0\n1100\n0A00\nFFE0\n0000\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_2FB4\nENCODING 12212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n0400\n7FC0\n4040\n7FC0\n4040\n7FC0\n4040\n7FC0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_2FB5\nENCODING 12213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3FC0\n2140\n2E40\n2440\n3F40\n3540\n3F40\n2540\n2760\n5CA0\n8820\nENDCHAR\nSTARTCHAR U_2FB6\nENCODING 12214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFF00\n0140\n1580\n6540\n24A0\nFF60\n2540\n2580\n2540\n44A0\n8460\nENDCHAR\nSTARTCHAR U_2FB7\nENCODING 12215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0E00\n1100\n2480\nFFE0\n2080\n3F80\n2080\n3FC0\n2480\n2300\n38E0\nENDCHAR\nSTARTCHAR U_2FB8\nENCODING 12216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n1100\nFFE0\n0400\n7FC0\n4040\n7FC0\n4040\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_2FB9\nENCODING 12217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0180\n7E00\n0400\nFFE0\n1500\n2480\nFFE0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_2FBA\nENCODING 12218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3FC0\n2400\n3F80\n2400\n3F80\n2400\n3FE0\n0020\n5520\n4AA0\n8AC0\nENDCHAR\nSTARTCHAR U_2FBB\nENCODING 12219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n2080\n2780\n2480\nFFE0\nA0A0\nBFA0\n2080\n3F80\n2080\n2380\nENDCHAR\nSTARTCHAR U_2FBC\nENCODING 12220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\nFFE0\n1080\n1F80\n0000\n7FE0\n4020\n4F20\n4920\n4F20\n40E0\nENDCHAR\nSTARTCHAR U_2FBD\nENCODING 12221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7E40\n4080\n7D00\n4020\n7C40\n4080\nFF00\n2820\n4840\nF480\n0300\nENDCHAR\nSTARTCHAR U_2FBE\nENCODING 12222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nBBA0\n9120\nBBA0\n9120\nBBA0\n8020\n8020\n8020\n8020\n80E0\n8040\nENDCHAR\nSTARTCHAR U_2FBF\nENCODING 12223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 2 -1\nBITMAP\nAA80\nD480\nAD80\nBA80\nC480\nFF80\n4000\n4E00\n7080\n4080\n3F80\nENDCHAR\nSTARTCHAR U_2FC0\nENCODING 12224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nFFC0\n0000\n3F00\n2100\n3F00\n0000\nFF80\n9480\nBE80\n8880\n8980\nENDCHAR\nSTARTCHAR U_2FC1\nENCODING 12225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n3FC0\n2440\n3FC0\n2440\n3FC0\n0480\n0D40\n17C0\n2420\nC3E0\nENDCHAR\nSTARTCHAR U_2FC2\nENCODING 12226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n1F00\n2200\n7FC0\nA440\n3FC0\n2440\n3FC0\n5240\n4920\n8920\nENDCHAR\nSTARTCHAR U_2FC3\nENCODING 12227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n3F80\n2080\n3F80\n2080\n3FE0\n2000\n3FE0\n5520\n4AA0\n8AC0\nENDCHAR\nSTARTCHAR U_2FC4\nENCODING 12228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0FC0\n0800\nFFC0\nA8C0\n9540\nAA40\n94C0\n8A40\n9540\nA2C0\nFFC0\nENDCHAR\nSTARTCHAR U_2FC5\nENCODING 12229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n7FE0\n4900\n7FE0\n4920\n7FE0\n5120\n5D40\n51A0\n9D20\n90E0\nENDCHAR\nSTARTCHAR U_2FC6\nENCODING 12230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\nFFE0\n2480\n5F40\n9520\n2880\nCF60\n3100\n4E00\n0500\n78C0\nENDCHAR\nSTARTCHAR U_2FC7\nENCODING 12231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n7FE0\n5100\n5100\n7FE0\n5100\n5B40\n7540\n5540\n5560\n9100\nENDCHAR\nSTARTCHAR U_2FC8\nENCODING 12232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\nFFE0\n1100\n1F00\n0000\nFFE0\n2480\n3F80\n2480\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_2FC9\nENCODING 12233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7F80\n0400\nFFE0\n1500\n2480\nCE60\n1500\n74E0\n0F00\n3480\nCC60\nENDCHAR\nSTARTCHAR U_2FCA\nENCODING 12234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n4440\n64C0\n5540\n7FC0\n0400\n7FC0\n0400\nFFE0\n5240\n8920\nENDCHAR\nSTARTCHAR U_2FCB\nENCODING 12235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4A40\n2A80\nFFE0\n2440\n7FE0\nA440\n2640\n2D40\n34C0\n2440\n24C0\nENDCHAR\nSTARTCHAR U_2FCC\nENCODING 12236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFC0\n9240\nF3C0\n1200\nF3C0\n9240\nF3C0\n9240\nF3C0\n1220\n0FE0\nENDCHAR\nSTARTCHAR U_2FCD\nENCODING 12237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n5140\n5F40\n5140\n5F40\n5140\n7FC0\n0A00\nFBE0\n4A40\n8A40\nENDCHAR\nSTARTCHAR U_2FCE\nENCODING 12238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\nFC80\n23E0\nF880\n07E0\nFA40\n8A40\nF980\n5180\n2240\nFC20\nENDCHAR\nSTARTCHAR U_2FCF\nENCODING 12239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nF780\n8080\nF780\n8080\nFF80\n0000\nCD00\nAB00\nCD40\nAAC0\nEE40\nENDCHAR\nSTARTCHAR U_2FD0\nENCODING 12240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n3F80\n2080\n3F80\n2080\n7FC0\n4440\n4440\nFFE0\n1100\n6100\nENDCHAR\nSTARTCHAR U_2FD1\nENCODING 12241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\nFFE0\n0A40\nF580\n5540\n95A0\n3F80\n2080\n3F80\n2080\nC080\nENDCHAR\nSTARTCHAR U_2FD2\nENCODING 12242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n27C0\n2400\nFFE0\n5140\n6AC0\n4440\n7FC0\n5140\n6AC0\n7FC0\nENDCHAR\nSTARTCHAR U_2FD3\nENCODING 12243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n11E0\nFF00\n45E0\n2820\nFFE0\n4500\n7DE0\n4500\n7DE0\n4520\n4DE0\nENDCHAR\nSTARTCHAR U_2FD4\nENCODING 12244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F00\n2100\nFFC0\n4A40\n7BC0\nFAC0\n2B40\nFAC0\n2BE0\nFA20\n07E0\nENDCHAR\nSTARTCHAR U_2FD5\nENCODING 12245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0E00\n3180\nCE60\n0000\nEEE0\nAAA0\nFFE0\n9120\nFFE0\n9120\n9160\nENDCHAR\nSTARTCHAR U_2FF0\nENCODING 12272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nAAA0\n0000\n8420\n0000\n8420\n0000\n8420\n0000\n8420\n0000\nAAA0\nENDCHAR\nSTARTCHAR U_2FF1\nENCODING 12273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nAAA0\n0000\n8020\n0000\n8020\n2A80\n8020\n0000\n8020\n0000\nAAA0\nENDCHAR\nSTARTCHAR U_2FF2\nENCODING 12274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nDB60\n9120\n0000\n9120\n9120\n0000\n9120\n9120\n0000\n9120\nDB60\nENDCHAR\nSTARTCHAR U_2FF3\nENCODING 12275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nAAA0\n0000\n8020\n2A80\n8020\n0000\n8020\n2A80\n8020\n0000\nAAA0\nENDCHAR\nSTARTCHAR U_2FF4\nENCODING 12276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nAAA0\n0000\n8020\n1500\n8020\n1100\n8020\n1500\n8020\n0000\nAAA0\nENDCHAR\nSTARTCHAR U_2FF5\nENCODING 12277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nAAA0\n0000\n8020\n1500\n8020\n1100\n8020\n1100\n8020\n1100\nAAA0\nENDCHAR\nSTARTCHAR U_2FF6\nENCODING 12278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nDB60\n9120\n0000\n9120\n9120\n0000\n9120\n9B20\n0000\n8020\nDB60\nENDCHAR\nSTARTCHAR U_2FF7\nENCODING 12279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nAAA0\n0000\n8020\n1A80\n8020\n1000\n8020\n1A80\n8020\n0000\nAAA0\nENDCHAR\nSTARTCHAR U_2FF8\nENCODING 12280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nAAA0\n0000\n8020\n1540\n8020\n1000\n8020\n1000\n8020\n1000\nAAA0\nENDCHAR\nSTARTCHAR U_2FF9\nENCODING 12281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nDB60\n8020\n0000\nDB20\n8120\n0000\n8120\n8120\n0000\n8120\nDB60\nENDCHAR\nSTARTCHAR U_2FFA\nENCODING 12282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nDB60\n9020\n0000\n9020\n9020\n0000\n9020\n9B60\n0000\n8020\nDB60\nENDCHAR\nSTARTCHAR U_2FFB\nENCODING 12283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nDB00\n8100\n0000\n9B60\n9120\n0000\n9120\nDB20\n0000\n1020\n1B60\nENDCHAR\nSTARTCHAR U_3000\nENCODING 12288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_3001\nENCODING 12289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\n0000\n0000\n8000\n6000\n2000\n0000\nENDCHAR\nSTARTCHAR U_3002\nENCODING 12290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 4 4 3 0\nBITMAP\n60\n90\n90\n60\nENDCHAR\nSTARTCHAR U_3003\nENCODING 12291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 4 4 4 3\nBITMAP\n50\n50\nA0\nA0\nENDCHAR\nSTARTCHAR U_3004\nENCODING 12292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1800\n2100\n4580\n8740\n8540\n9C40\nA440\n5080\n2900\n1200\n0000\nENDCHAR\nSTARTCHAR U_3005\nENCODING 12293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\n1000\n1000\n1F80\n2080\n4080\n8100\n1200\n0C00\n0400\n0400\nENDCHAR\nSTARTCHAR U_3006\nENCODING 12294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0100\n0080\n3100\n4A00\n8400\n8A00\n9000\nA000\nC000\n0000\n0000\nENDCHAR\nSTARTCHAR U_3007\nENCODING 12295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1E00\n2100\n4080\n8040\n8040\n8040\n8040\n4080\n2100\n1E00\n0000\nENDCHAR\nSTARTCHAR U_3008\nENCODING 12296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 3 12 8 -1\nBITMAP\n20\n20\n40\n40\n80\n80\n80\n80\n40\n40\n20\n20\nENDCHAR\nSTARTCHAR U_3009\nENCODING 12297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 3 12 2 -1\nBITMAP\n80\n80\n40\n40\n20\n20\n20\n20\n40\n40\n80\n80\nENDCHAR\nSTARTCHAR U_300A\nENCODING 12298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 12 5 -2\nBITMAP\n00\n24\n24\n48\n48\n90\n90\n48\n48\n24\n24\n00\nENDCHAR\nSTARTCHAR U_300B\nENCODING 12299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n9000\n9000\n4800\n4800\n2400\n2400\n4800\n4800\n9000\n9000\nENDCHAR\nSTARTCHAR U_300C\nENCODING 12300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 4 8 7 2\nBITMAP\nF0\n80\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_300D\nENCODING 12301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 4 8 1 -1\nBITMAP\n10\n10\n10\n10\n10\n10\n10\nF0\nENDCHAR\nSTARTCHAR U_300E\nENCODING 12302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 9 6 1\nBITMAP\nF8\n88\nB8\nA0\nA0\nA0\nA0\nA0\nE0\nENDCHAR\nSTARTCHAR U_300F\nENCODING 12303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 9 1 -1\nBITMAP\n38\n28\n28\n28\n28\n28\nE8\n88\nF8\nENDCHAR\nSTARTCHAR U_3010\nENCODING 12304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 4 11 2 -1\nBITMAP\nF0\nE0\nC0\nC0\n80\n80\n80\nC0\nC0\nE0\nF0\nENDCHAR\nSTARTCHAR U_3011\nENCODING 12305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 4 11 2 -1\nBITMAP\nF0\n70\n30\n30\n10\n10\n10\n30\n30\n70\nF0\nENDCHAR\nSTARTCHAR U_3012\nENCODING 12306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\nFFC0\n0000\n0000\nFFC0\n0400\n0400\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_3013\nENCODING 12307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 0\nBITMAP\nFF80\nFF80\nFF80\n0000\n0000\n0000\nFF80\nFF80\nFF80\nENDCHAR\nSTARTCHAR U_3014\nENCODING 12308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 3 11 7 -1\nBITMAP\n60\n80\n80\n80\n80\n80\n80\n80\n80\n80\n60\nENDCHAR\nSTARTCHAR U_3015\nENCODING 12309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 3 11 2 -1\nBITMAP\nC0\n20\n20\n20\n20\n20\n20\n20\n20\n20\nC0\nENDCHAR\nSTARTCHAR U_3016\nENCODING 12310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 12 6 -1\nBITMAP\n00\nF8\n90\nA0\nA0\nA0\nA0\nA0\nA0\nA0\n90\nF8\nENDCHAR\nSTARTCHAR U_3017\nENCODING 12311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 11 1 -1\nBITMAP\nF8\n48\n28\n28\n28\n28\n28\n28\n28\n48\nF8\nENDCHAR\nSTARTCHAR U_3018\nENCODING 12312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3000\nE000\nA000\nA000\nA000\nA000\nA000\nA000\nA000\nE000\n3000\nENDCHAR\nSTARTCHAR U_3019\nENCODING 12313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nC000\n7000\n5000\n5000\n5000\n5000\n5000\n5000\n5000\n7000\nC000\nENDCHAR\nSTARTCHAR U_301A\nENCODING 12314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF000\nA000\nA000\nA000\nA000\nA000\nA000\nA000\nA000\nA000\nF000\nENDCHAR\nSTARTCHAR U_301B\nENCODING 12315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF000\n5000\n5000\n5000\n5000\n5000\n5000\n5000\n5000\n5000\nF000\nENDCHAR\nSTARTCHAR U_301C\nENCODING 12316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n03C0\n8420\n7800\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_301D\nENCODING 12317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 4 2 8 8\nBITMAP\nA0\n50\nENDCHAR\nSTARTCHAR U_301E\nENCODING 12318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 4 2 1 8\nBITMAP\n50\nA0\nENDCHAR\nSTARTCHAR U_301F\nENCODING 12319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\n4800\n9000\n9000\nENDCHAR\nSTARTCHAR U_3020\nENCODING 12320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n7FC0\n0000\n7FC0\n0400\nD560\nAEA0\n9120\n4E40\n2080\n1F00\nENDCHAR\nSTARTCHAR U_3021\nENCODING 12321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nC000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\nENDCHAR\nSTARTCHAR U_3022\nENCODING 12322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 12 3 -1\nBITMAP\n0C\n08\n88\n88\n88\n88\n88\n88\n88\n08\n08\n08\nENDCHAR\nSTARTCHAR U_3023\nENCODING 12323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 12 2 -1\nBITMAP\n0080\n8080\n8880\n8880\n8880\n8880\n8880\n8880\n8880\n8880\n8080\n0080\nENDCHAR\nSTARTCHAR U_3024\nENCODING 12324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n0100\n4100\n2200\n1200\n0C00\n0400\n0A00\n1100\n2100\nC000\nENDCHAR\nSTARTCHAR U_3025\nENCODING 12325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 12 3 -1\nBITMAP\n22\n42\nC4\n28\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_3026\nENCODING 12326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 3 1 5\nBITMAP\n0800\n0400\nFFC0\nENDCHAR\nSTARTCHAR U_3027\nENCODING 12327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0800\n0800\n0800\nFF80\n0000\n0000\nFF80\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_3028\nENCODING 12328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\n0800\n0800\nFFC0\n0000\n0000\n7F80\n0000\n0000\n0000\nFFC0\nENDCHAR\nSTARTCHAR U_3029\nENCODING 12329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 2 -1\nBITMAP\n2000\n2000\n7F00\n4200\nA200\n1400\n0C00\n0C00\n1200\n2200\nC000\nENDCHAR\nSTARTCHAR U_3030\nENCODING 12336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n6180\n9240\n0C20\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_3031\nENCODING 12337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n1800\n2000\n4000\n8000\n8000\n4000\n2000\n2000\n1000\n1000\nENDCHAR\nSTARTCHAR U_3032\nENCODING 12338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n1800\n2200\n4100\n8400\n8200\n4000\n2000\n2000\n1000\n1000\nENDCHAR\nSTARTCHAR U_3033\nENCODING 12339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n1800\n1000\n2000\n2000\n2000\n4000\n4000\n4000\n8000\n8000\nENDCHAR\nSTARTCHAR U_3034\nENCODING 12340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n1A00\n1100\n2400\n2200\n2000\n4000\n4000\n4000\n8000\n8000\nENDCHAR\nSTARTCHAR U_3035\nENCODING 12341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8000\n4000\n2000\n2000\n1000\n1000\n0800\n0800\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_3036\nENCODING 12342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n7FC0\nBFA0\n8020\nBFA0\nBFA0\n8420\n4440\n2080\n1F00\nENDCHAR\nSTARTCHAR U_3037\nENCODING 12343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8A20\n8A20\n5140\n5140\n2080\n2080\n2080\n5140\n5140\n8A20\n8A20\nENDCHAR\nSTARTCHAR U_3038\nENCODING 12344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\n0400\n0400\nFFE0\n0400\n0400\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_3039\nENCODING 12345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\n1100\n1100\n1100\nFFE0\n1100\n1100\n1100\n1100\n1100\n1100\nENDCHAR\nSTARTCHAR U_303A\nENCODING 12346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2480\n2480\n2480\n2480\nFFE0\n2480\n2480\n2480\n4480\n4480\n8480\nENDCHAR\nSTARTCHAR U_303E\nENCODING 12350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nAAA0\n0000\n99A0\n2600\n8120\n3F80\n8420\n3F80\n9020\n0000\nAAA0\nENDCHAR\nSTARTCHAR U_3041\nENCODING 12353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\n20\n10\n54\n38\n12\n3C\n56\n92\nAA\n44\nENDCHAR\nSTARTCHAR U_3042\nENCODING 12354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n2000\n1600\nF800\n2400\n3E00\n2500\n6880\nA880\n9080\nA100\n4600\nENDCHAR\nSTARTCHAR U_3043\nENCODING 12355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 5 2 0\nBITMAP\n40\n48\n84\nA4\n40\nENDCHAR\nSTARTCHAR U_3044\nENCODING 12356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 8 0 0\nBITMAP\n8000\n4300\n4080\n4040\n4840\n50C0\n3040\n1000\nENDCHAR\nSTARTCHAR U_3045\nENCODING 12357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 7 2 -1\nBITMAP\n40\n30\n70\n88\n08\n10\n20\nENDCHAR\nSTARTCHAR U_3046\nENCODING 12358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 12 2 -1\nBITMAP\n20\n18\n00\n3C\nC2\n02\n02\n02\n04\n04\n08\n10\nENDCHAR\nSTARTCHAR U_3047\nENCODING 12359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 1 -1\nBITMAP\n20\n10\n7C\n08\n30\n48\n8E\nENDCHAR\nSTARTCHAR U_3048\nENCODING 12360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n1000\n0C00\n0000\n4E00\n3200\n0400\n0800\n1800\n2400\n4400\n8380\nENDCHAR\nSTARTCHAR U_3049\nENCODING 12361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 -1\nBITMAP\n20\n34\nE2\n38\n64\nA4\n48\nENDCHAR\nSTARTCHAR U_304A\nENCODING 12362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n1000\n1000\n1500\n78C0\n1040\n1700\n1880\n7040\nD240\n3180\n1000\nENDCHAR\nSTARTCHAR U_304B\nENCODING 12363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 -1\nBITMAP\n2000\n1100\n9C80\n7240\n1240\n12C0\n2200\n2200\n4A00\n4400\nENDCHAR\nSTARTCHAR U_304C\nENCODING 12364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n00A0\n20A0\n1100\n9C80\n7240\n1240\n12C0\n2200\n2200\n4A00\n4400\nENDCHAR\nSTARTCHAR U_304D\nENCODING 12365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 11 2 -1\nBITMAP\n10\n1C\nF0\n0E\nF8\n04\n3A\n46\n80\n40\n3C\nENDCHAR\nSTARTCHAR U_304E\nENCODING 12366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 11 2 -1\nBITMAP\n15\n1D\nF0\n0E\nF8\n04\n3A\n46\n80\n40\n3C\nENDCHAR\nSTARTCHAR U_304F\nENCODING 12367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 11 2 -1\nBITMAP\n10\n08\n10\n20\n40\n80\n40\n20\n10\n08\n08\nENDCHAR\nSTARTCHAR U_3050\nENCODING 12368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 11 2 -1\nBITMAP\n10\n08\n15\n25\n40\n80\n40\n20\n10\n08\n08\nENDCHAR\nSTARTCHAR U_3051\nENCODING 12369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0200\n8100\n41C0\n5F00\n8100\n8100\n8100\n8100\n6200\n4200\n0400\nENDCHAR\nSTARTCHAR U_3052\nENCODING 12370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n04A0\n82A0\n41C0\n5F00\n8100\n8100\n8100\n8100\n6200\n4200\n0400\nENDCHAR\nSTARTCHAR U_3053\nENCODING 12371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 9 2 0\nBITMAP\n40\n3E\n04\n00\n00\n80\n80\n41\n3E\nENDCHAR\nSTARTCHAR U_3054\nENCODING 12372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 0\nBITMAP\n4280\n3E80\n0400\n0000\n0000\n8000\n8000\n4100\n3E00\nENDCHAR\nSTARTCHAR U_3055\nENCODING 12373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 11 2 -1\nBITMAP\n20\n10\n8E\n78\n04\n04\n7A\n86\n80\n60\n1C\nENDCHAR\nSTARTCHAR U_3056\nENCODING 12374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 2 -1\nBITMAP\n2280\n1280\n8E00\n7800\n0400\n0400\n7A00\n8600\n8000\n6000\n1C00\nENDCHAR\nSTARTCHAR U_3057\nENCODING 12375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 1 -1\nBITMAP\n80\n40\n40\n40\n40\n40\n40\n41\n26\n18\nENDCHAR\nSTARTCHAR U_3058\nENCODING 12376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 1 -1\nBITMAP\n80\n45\n45\n40\n40\n40\n40\n41\n26\n18\nENDCHAR\nSTARTCHAR U_3059\nENCODING 12377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 12 0 -1\nBITMAP\n0400\n0200\n83C0\n7E00\n0A00\n1600\n1200\n0E00\n0200\n0200\n0400\n0800\nENDCHAR\nSTARTCHAR U_305A\nENCODING 12378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 12 0 -1\nBITMAP\n04A0\n02A0\n83C0\n7E00\n0A00\n1600\n1200\n0E00\n0200\n0200\n0400\n0800\nENDCHAR\nSTARTCHAR U_305B\nENCODING 12379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 -1\nBITMAP\n0200\n2100\n11E0\n9700\n7900\n1100\n1300\n1000\n0800\n0780\nENDCHAR\nSTARTCHAR U_305C\nENCODING 12380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 10 0 -1\nBITMAP\n0250\n2150\n11E0\n9700\n7900\n1100\n1300\n1000\n0800\n0780\nENDCHAR\nSTARTCHAR U_305D\nENCODING 12381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 -1\nBITMAP\n4E00\n3400\n0800\n1380\nFC00\n0800\n1000\n1000\n0800\n0600\nENDCHAR\nSTARTCHAR U_305E\nENCODING 12382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 -1\nBITMAP\n4D40\n3540\n0800\n1380\nFC00\n0800\n1000\n1000\n0800\n0600\nENDCHAR\nSTARTCHAR U_305F\nENCODING 12383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n2000\n1000\n1C00\nE000\n2700\n2180\n4200\n4000\n4800\n8800\n8780\nENDCHAR\nSTARTCHAR U_3060\nENCODING 12384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n2000\n1140\n1D40\nE000\n2700\n2180\n4200\n4000\n4800\n8800\n8780\nENDCHAR\nSTARTCHAR U_3061\nENCODING 12385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n1000\n0800\n8A00\n7C00\n1000\n1700\n1880\n2080\n0080\n0300\n1C00\nENDCHAR\nSTARTCHAR U_3062\nENCODING 12386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0080\n1140\n8A80\n5400\n3800\n1700\n3880\n2080\n0080\n0300\n1C00\nENDCHAR\nSTARTCHAR U_3063\nENCODING 12387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 5 2 -1\nBITMAP\n38\nC4\n04\n08\n30\nENDCHAR\nSTARTCHAR U_3064\nENCODING 12388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 7 0 1\nBITMAP\n0F00\nB080\n4040\n0040\n0080\n0300\n0C00\nENDCHAR\nSTARTCHAR U_3065\nENCODING 12389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 8 0 1\nBITMAP\n00A0\n0FA0\nB080\n4040\n0040\n0080\n0300\n0C00\nENDCHAR\nSTARTCHAR U_3066\nENCODING 12390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 0\nBITMAP\n8380\n7C00\n0400\n0800\n1000\n1000\n1000\n0800\n0700\nENDCHAR\nSTARTCHAR U_3067\nENCODING 12391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 9 1 0\nBITMAP\n8380\n7C00\n0540\n0940\n1000\n1000\n1000\n0800\n0700\nENDCHAR\nSTARTCHAR U_3068\nENCODING 12392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 9 2 0\nBITMAP\n40\n20\n26\n28\n30\n40\n80\n40\n3E\nENDCHAR\nSTARTCHAR U_3069\nENCODING 12393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 2 0\nBITMAP\n4280\n2280\n2600\n2800\n3000\n4000\n8000\n4000\n3E00\nENDCHAR\nSTARTCHAR U_306A\nENCODING 12394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n2000\n1400\nFB00\n2180\n2200\n4200\n4200\n9E00\n2300\n2280\n1C00\nENDCHAR\nSTARTCHAR U_306B\nENCODING 12395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 -1\nBITMAP\n8000\n4700\n5980\n8200\n8000\n8000\n8800\nA800\nC780\n4000\nENDCHAR\nSTARTCHAR U_306C\nENCODING 12396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n0400\n0400\n4F00\n5480\n6440\n6840\nA840\n9340\nA480\n4380\nENDCHAR\nSTARTCHAR U_306D\nENCODING 12397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2000\n1000\n1000\n9B80\n7440\n1840\n3040\n3040\n51C0\nB260\n1180\nENDCHAR\nSTARTCHAR U_306E\nENCODING 12398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 0\nBITMAP\n1C00\n2A00\n4900\n8880\n9080\n9080\nA100\n4200\n0C00\nENDCHAR\nSTARTCHAR U_306F\nENCODING 12399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0200\n8100\n51C0\n4F00\n8100\n8100\n8100\n8F00\nB180\nD140\n4E00\nENDCHAR\nSTARTCHAR U_3070\nENCODING 12400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n02A0\n81A0\n51C0\n4F00\n8100\n8100\n8100\n8F00\nB180\nD140\n4E00\nENDCHAR\nSTARTCHAR U_3071\nENCODING 12401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n02C0\n8120\n51C0\n4F00\n8100\n8100\n8100\n8F00\nB180\nD140\n4E00\nENDCHAR\nSTARTCHAR U_3072\nENCODING 12402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 -1\nBITMAP\n0200\n1200\nF100\n2100\n2180\n4140\n4100\n4100\n2200\n1C00\nENDCHAR\nSTARTCHAR U_3073\nENCODING 12403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 1 -1\nBITMAP\n02A0\n12A0\nF100\n2100\n2180\n4140\n4100\n4100\n2200\n1C00\nENDCHAR\nSTARTCHAR U_3074\nENCODING 12404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n00C0\n0320\n12C0\nF100\n2100\n2180\n4140\n4100\n4100\n2200\n1C00\nENDCHAR\nSTARTCHAR U_3075\nENCODING 12405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 1 -1\nBITMAP\n1000\n0E00\n0400\n0800\n0800\n0580\nA440\nC2E0\n9200\n0C00\nENDCHAR\nSTARTCHAR U_3076\nENCODING 12406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 1 -1\nBITMAP\n1140\n0F40\n0400\n0800\n0800\n0580\nA440\nC2E0\n9200\n0C00\nENDCHAR\nSTARTCHAR U_3077\nENCODING 12407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 1 -1\nBITMAP\n10C0\n0F20\n04C0\n0800\n0800\n0580\nA440\nC2E0\n9200\n0C00\nENDCHAR\nSTARTCHAR U_3078\nENCODING 12408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 6 0 1\nBITMAP\n1800\n2400\nC200\n0100\n0080\n0060\nENDCHAR\nSTARTCHAR U_3079\nENCODING 12409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 8 0 1\nBITMAP\n0140\n0140\n1800\n2400\nC200\n0100\n0080\n0060\nENDCHAR\nSTARTCHAR U_307A\nENCODING 12410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 8 0 1\nBITMAP\n00C0\n0120\n18C0\n2400\nC200\n0100\n0080\n0060\nENDCHAR\nSTARTCHAR U_307B\nENCODING 12411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 -1\nBITMAP\n91C0\n4F00\n4140\n8F80\n8100\n8100\n8F00\nB180\n5140\n4E00\nENDCHAR\nSTARTCHAR U_307C\nENCODING 12412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n00A0\n91A0\n4F00\n4140\n8F80\n8100\n8100\n8F00\nB180\n5140\n4E00\nENDCHAR\nSTARTCHAR U_307D\nENCODING 12413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n00C0\n9120\n4FC0\n4100\n8FC0\n8100\n8100\n8F00\nB180\n5140\n4E00\nENDCHAR\nSTARTCHAR U_307E\nENCODING 12414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 11 2 -1\nBITMAP\n10\n8F\n78\n08\n8E\n78\n08\n78\n8E\n89\n70\nENDCHAR\nSTARTCHAR U_307F\nENCODING 12415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n4400\n3C00\n0800\n0800\n0900\n3E80\n5180\n9140\nA100\n4200\n0400\nENDCHAR\nSTARTCHAR U_3080\nENCODING 12416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n2000\n9C00\n7180\n1040\n7000\n9000\n9000\nA100\n6080\n2080\n1F00\nENDCHAR\nSTARTCHAR U_3081\nENCODING 12417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n0400\n4E00\n5500\n6480\n4840\nA840\n9040\n9080\n6100\n0600\nENDCHAR\nSTARTCHAR U_3082\nENCODING 12418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 11 1 -1\nBITMAP\n20\n10\n70\n1C\n28\nE2\n39\n21\n21\n12\n0C\nENDCHAR\nSTARTCHAR U_3083\nENCODING 12419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 7 2 -1\nBITMAP\n28\n2E\nF5\n21\n16\n10\n10\nENDCHAR\nSTARTCHAR U_3084\nENCODING 12420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n3700\n2000\n13C0\n9C20\n7020\n09C0\n0800\n0800\n0400\n0400\nENDCHAR\nSTARTCHAR U_3085\nENCODING 12421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 3 -1\nBITMAP\n10\n9C\nB2\nD2\n9C\n10\n20\nENDCHAR\nSTARTCHAR U_3086\nENCODING 12422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n8200\n4780\n4A40\n5220\n6220\n6A40\n4780\n4200\n0400\n0800\nENDCHAR\nSTARTCHAR U_3087\nENCODING 12423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 -1\nBITMAP\n10\n1C\n10\n10\n78\n96\n60\nENDCHAR\nSTARTCHAR U_3088\nENCODING 12424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n1000\n0800\n0980\n0E00\n0800\n0800\n0800\n7800\n8E00\n8980\n7000\nENDCHAR\nSTARTCHAR U_3089\nENCODING 12425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 11 2 -1\nBITMAP\n20\n18\n40\n80\n80\nBC\nC2\n82\n02\n0C\n70\nENDCHAR\nSTARTCHAR U_308A\nENCODING 12426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 11 2 -1\nBITMAP\n88\n54\n52\n62\n62\n42\n42\n04\n04\n08\n10\nENDCHAR\nSTARTCHAR U_308B\nENCODING 12427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 1 -1\nBITMAP\n4E\n34\n08\n10\n3E\n61\n81\n19\n26\n1C\nENDCHAR\nSTARTCHAR U_308C\nENCODING 12428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2000\n1000\n1300\n3480\nD880\n1080\n1080\n3080\n5080\nB060\n1000\nENDCHAR\nSTARTCHAR U_308D\nENCODING 12429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 1 -1\nBITMAP\n4E\n34\n08\n10\n3E\n61\n81\n01\n06\n18\nENDCHAR\nSTARTCHAR U_308E\nENCODING 12430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 7 2 -1\nBITMAP\n40\n30\nEE\n31\n61\nA2\n24\nENDCHAR\nSTARTCHAR U_308F\nENCODING 12431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2000\n1000\n1000\n9B80\n7C40\n1020\n1020\n3020\n5040\nB180\n1000\nENDCHAR\nSTARTCHAR U_3090\nENCODING 12432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 -1\nBITMAP\n4E00\n3400\n0400\n1F00\n2880\n4840\n9040\n9640\n6980\n4700\nENDCHAR\nSTARTCHAR U_3091\nENCODING 12433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n2000\n1F00\n0400\n1F00\n2080\n4C80\n1300\n0C00\n0000\n5980\n8640\nENDCHAR\nSTARTCHAR U_3092\nENCODING 12434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n0800\n0800\n9E00\n7000\n2180\n7200\n8C00\n1400\n2400\n2000\n1F00\nENDCHAR\nSTARTCHAR U_3093\nENCODING 12435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 -1\nBITMAP\n1000\n0800\n0800\n1000\n1000\n3800\n2400\n4440\n4480\n8300\nENDCHAR\nSTARTCHAR U_3094\nENCODING 12436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n0C80\n0040\n1D00\nE280\n0200\n0200\n0400\n0400\n0800\n1000\nENDCHAR\nSTARTCHAR U_3099\nENCODING 12441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2000\n9000\n4000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_309B\nENCODING 12443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n2000\n9000\n4000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_309C\nENCODING 12444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n4000\nA000\n4000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_30A1\nENCODING 12449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 6 1 -1\nBITMAP\n9E\n72\n1C\n10\n10\n20\nENDCHAR\nSTARTCHAR U_30A2\nENCODING 12450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 9 0 -1\nBITMAP\n87C0\n7840\n0480\n0700\n0400\n0400\n0800\n0800\n1000\nENDCHAR\nSTARTCHAR U_30A3\nENCODING 12451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 5 7 2 -1\nBITMAP\n08\n10\n30\nD0\n10\n10\n10\nENDCHAR\nSTARTCHAR U_30A4\nENCODING 12452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\n02\n02\n04\n08\n30\nC8\n08\n08\n08\n08\nENDCHAR\nSTARTCHAR U_30A5\nENCODING 12453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 2 -1\nBITMAP\n20\n20\nFC\n84\n88\n10\n60\nENDCHAR\nSTARTCHAR U_30A6\nENCODING 12454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n0800\n0800\n0800\n8F80\n7880\n4080\n4100\n0100\n0200\n0400\n1800\nENDCHAR\nSTARTCHAR U_30A7\nENCODING 12455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 5 2 0\nBITMAP\n0C\n70\n10\n1C\nF2\nENDCHAR\nSTARTCHAR U_30A8\nENCODING 12456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 7 1 0\nBITMAP\n0780\n7800\n0800\n0800\n0800\n0F80\nF040\nENDCHAR\nSTARTCHAR U_30A9\nENCODING 12457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 -1\nBITMAP\n08\n08\nFE\n18\n28\nC8\n18\nENDCHAR\nSTARTCHAR U_30AA\nENCODING 12458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0200\n0200\n83C0\n7E00\n0600\n0A00\n1200\n2200\n4200\n8600\n0200\nENDCHAR\nSTARTCHAR U_30AB\nENCODING 12459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n1000\n0800\n0800\n8F80\n7880\n0880\n1080\n1100\n2100\n4500\n8200\nENDCHAR\nSTARTCHAR U_30AC\nENCODING 12460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n1000\n0940\n0940\n8F80\n7880\n0880\n1080\n1100\n2100\n4500\n8200\nENDCHAR\nSTARTCHAR U_30AD\nENCODING 12461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 0 -1\nBITMAP\n0800\n0800\n0B80\n7C00\n0400\n0FC0\nF400\n0400\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_30AE\nENCODING 12462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n08A0\n0BA0\n7C00\n0400\n0FC0\nF400\n0400\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_30AF\nENCODING 12463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 11 2 -1\nBITMAP\n40\n26\n3A\n22\n42\n44\n84\n08\n10\n20\n40\nENDCHAR\nSTARTCHAR U_30B0\nENCODING 12464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n4140\n2740\n3A00\n2200\n4200\n4400\n8400\n0800\n1000\n2000\n4000\nENDCHAR\nSTARTCHAR U_30B1\nENCODING 12465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n4000\n2000\n23C0\n3C00\n2200\n2200\n4200\n8400\n0400\n0800\n1000\nENDCHAR\nSTARTCHAR U_30B2\nENCODING 12466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n4000\n2140\n2140\n2380\n3C00\n2200\n4200\n8400\n0400\n0800\n1000\nENDCHAR\nSTARTCHAR U_30B3\nENCODING 12467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 8 1 0\nBITMAP\n8F80\n7080\n0080\n0080\n0100\n0100\n0F00\n7100\nENDCHAR\nSTARTCHAR U_30B4\nENCODING 12468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\n0140\n0140\n8F80\n7080\n0080\n0080\n0100\n0100\n0F00\n7100\nENDCHAR\nSTARTCHAR U_30B5\nENCODING 12469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0200\n2100\n1100\n97C0\n7900\n1100\n1100\n1200\n0200\n0400\n0800\nENDCHAR\nSTARTCHAR U_30B6\nENCODING 12470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n02A0\n21A0\n1100\n97C0\n7900\n1100\n1100\n1200\n0200\n0400\n0800\nENDCHAR\nSTARTCHAR U_30B7\nENCODING 12471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 2 -1\nBITMAP\n6000\n1000\n0000\nC000\n2080\n0100\n0200\n0400\n9800\n6000\nENDCHAR\nSTARTCHAR U_30B8\nENCODING 12472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 2 -1\nBITMAP\n6280\n1280\n0000\nC000\n2080\n0100\n0200\n0400\n9800\n6000\nENDCHAR\nSTARTCHAR U_30B9\nENCODING 12473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 9 1 -1\nBITMAP\n4700\n3900\n0100\n0200\n0200\n0500\n0880\n3040\nC040\nENDCHAR\nSTARTCHAR U_30BA\nENCODING 12474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 -1\nBITMAP\n0140\n4740\n3900\n0100\n0200\n0200\n0500\n0880\n3040\nC040\nENDCHAR\nSTARTCHAR U_30BB\nENCODING 12475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 0 -1\nBITMAP\n2000\n1000\n11C0\n9E40\n7080\n1100\n1200\n1000\n1000\n0F80\nENDCHAR\nSTARTCHAR U_30BC\nENCODING 12476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 -1\nBITMAP\n20A0\n10A0\n11C0\n9E40\n7080\n1100\n1200\n1000\n1000\n0F80\nENDCHAR\nSTARTCHAR U_30BD\nENCODING 12477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 -1\nBITMAP\n02\n81\n41\n42\n02\n04\n04\n08\n10\n20\nENDCHAR\nSTARTCHAR U_30BE\nENCODING 12478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 -1\nBITMAP\n0540\n8340\n4100\n4200\n0200\n0400\n0400\n0800\n1000\n2000\nENDCHAR\nSTARTCHAR U_30BF\nENCODING 12479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n1000\n0800\n0F80\n1080\n1100\n2900\n4600\n0400\n0800\n3000\nC000\nENDCHAR\nSTARTCHAR U_30C0\nENCODING 12480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n1000\n08A0\n0FA0\n1080\n1100\n2900\n4600\n0400\n0800\n3000\nC000\nENDCHAR\nSTARTCHAR U_30C1\nENCODING 12481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0100\n0600\n3C00\n0200\n87E0\n7A00\n0200\n0200\n0400\n0400\n0800\nENDCHAR\nSTARTCHAR U_30C2\nENCODING 12482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0100\n06A0\n3CA0\n0200\n87E0\n7A00\n0200\n0200\n0400\n0400\n0800\nENDCHAR\nSTARTCHAR U_30C3\nENCODING 12483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 -1\nBITMAP\n20\n92\n52\n44\n04\n08\n10\nENDCHAR\nSTARTCHAR U_30C4\nENCODING 12484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 -1\nBITMAP\n0100\n1080\n8880\n4900\n4100\n0200\n0200\n0400\n0800\n1000\nENDCHAR\nSTARTCHAR U_30C5\nENCODING 12485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0140\n1140\n8800\n4880\n4880\n4100\n0100\n0200\n0400\n1800\n6000\nENDCHAR\nSTARTCHAR U_30C6\nENCODING 12486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 -1\nBITMAP\n2380\n1C00\n0000\n87E0\n7A00\n0200\n0200\n0400\n0800\n1000\nENDCHAR\nSTARTCHAR U_30C7\nENCODING 12487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n00A0\n23A0\n1C00\n0000\n87E0\n7A00\n0200\n0200\n0400\n0800\n1000\nENDCHAR\nSTARTCHAR U_30C8\nENCODING 12488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 11 2 -1\nBITMAP\n80\n40\n40\n40\n70\n4C\n42\n40\n40\n40\n40\nENDCHAR\nSTARTCHAR U_30C9\nENCODING 12489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 11 2 -1\nBITMAP\n80\n45\n45\n40\n70\n4C\n42\n40\n40\n40\n40\nENDCHAR\nSTARTCHAR U_30CA\nENCODING 12490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n0400\n0400\n87C0\n7C00\n0400\n0400\n0800\n0800\n1000\n2000\nENDCHAR\nSTARTCHAR U_30CB\nENCODING 12491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 7 1 1\nBITMAP\n0700\n7800\n0000\n0000\n0000\n0F80\nF040\nENDCHAR\nSTARTCHAR U_30CC\nENCODING 12492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 9 1 -1\nBITMAP\n4780\n3880\n0100\n1900\n0600\n0500\n0880\n3040\nC000\nENDCHAR\nSTARTCHAR U_30CD\nENCODING 12493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n0400\n0F00\n7100\n0200\n0C00\n3B00\nC8C0\n0800\n0800\n0800\nENDCHAR\nSTARTCHAR U_30CE\nENCODING 12494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 3 -1\nBITMAP\n04\n02\n02\n04\n04\n08\n10\n20\n40\n80\nENDCHAR\nSTARTCHAR U_30CF\nENCODING 12495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 7 0 0\nBITMAP\n1100\n0880\n1040\n1040\n2020\n4020\n8020\nENDCHAR\nSTARTCHAR U_30D0\nENCODING 12496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 9 0 0\nBITMAP\n00A0\n00A0\n1100\n0880\n1040\n1040\n2020\n4020\n8020\nENDCHAR\nSTARTCHAR U_30D1\nENCODING 12497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 9 0 0\nBITMAP\n0060\n0090\n1160\n0880\n0840\n1040\n2020\n4020\n8020\nENDCHAR\nSTARTCHAR U_30D2\nENCODING 12498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 0\nBITMAP\n8000\n4000\n4000\n4700\n7800\n4000\n4000\n4000\n3F80\nENDCHAR\nSTARTCHAR U_30D3\nENCODING 12499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 9 1 0\nBITMAP\n8140\n4140\n4000\n4700\n7800\n4000\n4000\n4000\n3F80\nENDCHAR\nSTARTCHAR U_30D4\nENCODING 12500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 9 1 0\nBITMAP\n8180\n4240\n4180\n4700\n7800\n4000\n4000\n4000\n3F80\nENDCHAR\nSTARTCHAR U_30D5\nENCODING 12501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 -1\nBITMAP\n8780\n7880\n0080\n0100\n0100\n0200\n0400\n0800\n3000\nENDCHAR\nSTARTCHAR U_30D6\nENCODING 12502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 0 -1\nBITMAP\n0140\n0140\n8780\n7880\n0080\n0100\n0100\n0200\n0400\n0800\n3000\nENDCHAR\nSTARTCHAR U_30D7\nENCODING 12503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n00C0\n0120\n87C0\n7880\n0080\n0100\n0100\n0200\n0400\n0800\n3000\nENDCHAR\nSTARTCHAR U_30D8\nENCODING 12504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 6 0 1\nBITMAP\n0800\n1400\n2200\nC100\n0080\n0060\nENDCHAR\nSTARTCHAR U_30D9\nENCODING 12505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 8 0 1\nBITMAP\n00A0\n00A0\n0800\n1400\n2200\nC100\n0080\n0060\nENDCHAR\nSTARTCHAR U_30DA\nENCODING 12506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 8 0 1\nBITMAP\n00C0\n0120\n08C0\n1400\n2200\nC100\n0080\n0060\nENDCHAR\nSTARTCHAR U_30DB\nENCODING 12507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n0800\n0800\n8F80\n7800\n0800\n2A00\n2900\n4880\n4880\n9800\n0800\nENDCHAR\nSTARTCHAR U_30DC\nENCODING 12508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n0940\n8F40\n7800\n0800\n2A00\n2900\n4880\n4880\n9800\n0800\nENDCHAR\nSTARTCHAR U_30DD\nENCODING 12509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0800\n08C0\n8F20\n78C0\n0800\n2A00\n2900\n4880\n4880\n9800\n0800\nENDCHAR\nSTARTCHAR U_30DE\nENCODING 12510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 8 1 0\nBITMAP\n8780\n7880\n0100\n0200\n6400\n1800\n0400\n0200\nENDCHAR\nSTARTCHAR U_30DF\nENCODING 12511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\n60\n18\n06\n00\n70\n0C\n00\nE0\n18\n06\nENDCHAR\nSTARTCHAR U_30E0\nENCODING 12512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 -1\nBITMAP\n1000\n0800\n0800\n1000\n1400\n2200\n2100\n4F00\nF080\n0080\nENDCHAR\nSTARTCHAR U_30E1\nENCODING 12513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 2 -1\nBITMAP\n0200\n0100\n0100\n3100\n0E00\n0200\n0500\n0880\n3000\nC000\nENDCHAR\nSTARTCHAR U_30E2\nENCODING 12514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 8 1 0\nBITMAP\n8700\n7800\n1000\n93C0\n7C00\n1000\n1000\n0F80\nENDCHAR\nSTARTCHAR U_30E3\nENCODING 12515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 7 2 -1\nBITMAP\n20\n20\n2F\nF2\n14\n10\n10\nENDCHAR\nSTARTCHAR U_30E4\nENCODING 12516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 -1\nBITMAP\n2000\n1000\n11E0\n9E40\n6880\n0900\n0800\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_30E5\nENCODING 12517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 4 2 0\nBITMAP\n7C\n08\n08\nFE\nENDCHAR\nSTARTCHAR U_30E6\nENCODING 12518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 7 1 0\nBITMAP\n4700\n3900\n0100\n0200\n0200\n0F80\nF040\nENDCHAR\nSTARTCHAR U_30E7\nENCODING 12519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 6 2 -1\nBITMAP\n3C\nC4\n3C\n04\n1C\nE2\nENDCHAR\nSTARTCHAR U_30E8\nENCODING 12520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 -1\nBITMAP\n0F80\nF080\n0080\n0700\n3900\n0100\n0100\n0F00\n7080\nENDCHAR\nSTARTCHAR U_30E9\nENCODING 12521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 -1\nBITMAP\n4E00\n3000\n8780\n7880\n0080\n0100\n0100\n0200\n0C00\n3000\nENDCHAR\nSTARTCHAR U_30EA\nENCODING 12522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 11 2 -1\nBITMAP\n04\n82\n42\n42\n42\n42\n42\n04\n04\n08\n10\nENDCHAR\nSTARTCHAR U_30EB\nENCODING 12523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 -1\nBITMAP\n0800\n4400\n2400\n2400\n2440\n2440\n2480\n4500\n4600\n8400\nENDCHAR\nSTARTCHAR U_30EC\nENCODING 12524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 1 -1\nBITMAP\n80\n40\n40\n40\n40\n41\n42\n44\n58\n60\nENDCHAR\nSTARTCHAR U_30ED\nENCODING 12525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 8 0 0\nBITMAP\n87C0\n7840\n4040\n4040\n2080\n2080\n2F80\n3040\nENDCHAR\nSTARTCHAR U_30EE\nENCODING 12526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 6 1 -1\nBITMAP\n8E\n72\n42\n04\n08\n30\nENDCHAR\nSTARTCHAR U_30EF\nENCODING 12527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 -1\nBITMAP\n8780\n7880\n4080\n4080\n0100\n0100\n0200\n0400\n1800\nENDCHAR\nSTARTCHAR U_30F0\nENCODING 12528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0400\n0200\n0200\n0F80\nF200\n2200\n2780\nFA40\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_30F1\nENCODING 12529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 8 0 0\nBITMAP\n0780\n7880\n0500\n0600\n0400\n0400\n0F80\nF040\nENDCHAR\nSTARTCHAR U_30F2\nENCODING 12530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 -1\nBITMAP\n0F\nF1\n01\n0F\n72\n02\n04\n08\n30\nC0\nENDCHAR\nSTARTCHAR U_30F3\nENCODING 12531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 -1\nBITMAP\n6000\n1080\n0080\n0100\n0100\n0200\n0400\n9800\n6000\nENDCHAR\nSTARTCHAR U_30F4\nENCODING 12532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0940\n0940\n0800\n8F80\n7880\n4080\n4100\n0100\n0200\n0400\n1800\nENDCHAR\nSTARTCHAR U_30F5\nENCODING 12533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 7 2 -1\nBITMAP\n20\n20\nFC\n24\n24\n44\n98\nENDCHAR\nSTARTCHAR U_30F6\nENCODING 12534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 7 2 -1\nBITMAP\n20\n20\n3E\n48\n88\n10\n20\nENDCHAR\nSTARTCHAR U_30FB\nENCODING 12539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\n8000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_30FC\nENCODING 12540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\nFFE0\n4000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_3105\nENCODING 12549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n20\n20\n4F\nF1\n01\n02\n02\n24\n1C\n18\nENDCHAR\nSTARTCHAR U_3106\nENCODING 12550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0400\n0400\n0800\n1380\n3D00\n0200\n1400\n0E00\n1100\n20C0\nC040\nENDCHAR\nSTARTCHAR U_3107\nENCODING 12551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 2 0\nBITMAP\n0300\nFF80\n4100\n4100\n4100\n4100\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_3108\nENCODING 12552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 7 2 1\nBITMAP\nFF\n80\n80\n80\n80\n80\n7F\nENDCHAR\nSTARTCHAR U_3109\nENCODING 12553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 11 2 -1\nBITMAP\n2000\n2000\n4000\n7F80\n9080\n1080\n2080\n2100\n4100\n8A00\n0400\nENDCHAR\nSTARTCHAR U_310A\nENCODING 12554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 -1\nBITMAP\n0400\n0400\n0400\nFFC0\n0800\n1000\n1200\n2100\n7E80\n2080\nENDCHAR\nSTARTCHAR U_310B\nENCODING 12555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 9 3 0\nBITMAP\nFC\n08\n08\n1E\n02\n04\n04\n28\n10\nENDCHAR\nSTARTCHAR U_310C\nENCODING 12556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n08\n48\n48\n7F\n11\n11\n21\n22\n4A\n84\nENDCHAR\nSTARTCHAR U_310D\nENCODING 12557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 9 2 0\nBITMAP\n11\n22\n22\n44\n88\n88\n44\n22\n11\nENDCHAR\nSTARTCHAR U_310E\nENCODING 12558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 9 1 0\nBITMAP\nFFC0\n0800\n1000\n1F80\n0100\n0100\n0100\n0A00\n0600\nENDCHAR\nSTARTCHAR U_310F\nENCODING 12559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\n01C0\n1E00\n1000\n1000\n2000\n2000\n2000\n4000\n4000\n8000\nENDCHAR\nSTARTCHAR U_3110\nENCODING 12560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 11 3 -1\nBITMAP\n0C\n04\nC4\n44\n44\n4C\n74\nC4\n04\n04\n04\nENDCHAR\nSTARTCHAR U_3111\nENCODING 12561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\n06\n0C\n10\n60\nC0\n60\n10\n0C\n06\n02\nENDCHAR\nSTARTCHAR U_3112\nENCODING 12562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 9 1 0\nBITMAP\nFFC0\n0400\n0400\n0400\n0400\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_3113\nENCODING 12563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 9 1 0\nBITMAP\n0800\n0800\n4900\n4900\n4900\n7F00\n0800\n0800\nFFC0\nENDCHAR\nSTARTCHAR U_3114\nENCODING 12564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\n02\n04\n0A\n32\n04\n0C\n34\nC4\n04\n04\nENDCHAR\nSTARTCHAR U_3115\nENCODING 12565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n0100\n7F80\n0100\n0300\n3C00\n2000\n4000\n4000\n4000\n8000\nENDCHAR\nSTARTCHAR U_3116\nENCODING 12566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 9 2 0\nBITMAP\nFE\n82\n82\nB2\n8A\n82\n82\nFE\n82\nENDCHAR\nSTARTCHAR U_3117\nENCODING 12567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 11 2 -1\nBITMAP\n03\nFD\n11\n11\n11\n11\n12\n10\n10\n10\n10\nENDCHAR\nSTARTCHAR U_3118\nENCODING 12568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0400\n0400\n0800\nFFC0\n0800\n0800\n1700\n0900\n0200\n0400\n0800\nENDCHAR\nSTARTCHAR U_3119\nENCODING 12569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 0\nBITMAP\n0400\n0400\n0800\n1000\n1000\n2000\n4100\nFF80\n0080\nENDCHAR\nSTARTCHAR U_311A\nENCODING 12570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 9 2 0\nBITMAP\n82\n44\n28\n10\n10\n10\n10\n10\n10\nENDCHAR\nSTARTCHAR U_311B\nENCODING 12571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 8 2 1\nBITMAP\n1F\nE8\n08\n08\n78\n80\n81\n7E\nENDCHAR\nSTARTCHAR U_311C\nENCODING 12572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 -1\nBITMAP\n0400\n0400\n07C0\nFC00\n0400\n3C00\n4000\n4000\n2080\n1F00\nENDCHAR\nSTARTCHAR U_311D\nENCODING 12573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 9 1 0\nBITMAP\n2000\n1100\n1100\n13E0\nFE00\n1200\n1200\n1000\n0F00\nENDCHAR\nSTARTCHAR U_311E\nENCODING 12574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 9 2 0\nBITMAP\nFF\n48\n48\nFF\n11\n22\n42\n44\n84\nENDCHAR\nSTARTCHAR U_311F\nENCODING 12575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 8 2 0\nBITMAP\n1800\nE800\n0800\n0800\n0400\n0400\n0200\n0180\nENDCHAR\nSTARTCHAR U_3120\nENCODING 12576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 -1\nBITMAP\n08\n10\n11\n22\n44\nF8\n14\n22\nFD\n01\nENDCHAR\nSTARTCHAR U_3121\nENCODING 12577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 2 0\nBITMAP\n0200\n7F00\n0200\n2400\n1C00\n0C00\n1200\n6100\n8080\nENDCHAR\nSTARTCHAR U_3122\nENCODING 12578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 8 2 1\nBITMAP\n7E\n42\n44\nBF\nC1\n02\n02\n04\nENDCHAR\nSTARTCHAR U_3123\nENCODING 12579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 9 1 0\nBITMAP\n2000\n2000\n4000\n4000\n7F80\n8080\n0100\n0100\n0200\nENDCHAR\nSTARTCHAR U_3124\nENCODING 12580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 -1\nBITMAP\n0400\n0400\n0800\n7F80\n0C00\n1400\n1400\n2400\n4400\n83C0\nENDCHAR\nSTARTCHAR U_3125\nENCODING 12581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 8 1 1\nBITMAP\n0400\n0400\n0800\n0800\n1000\n2000\n4000\nFFC0\nENDCHAR\nSTARTCHAR U_3126\nENCODING 12582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\n0400\n2600\n2400\n2400\n2400\n2400\n2400\n2400\n4400\n83C0\nENDCHAR\nSTARTCHAR U_3127\nENCODING 12583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 5 -1\nBITMAP\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\nENDCHAR\nSTARTCHAR U_3128\nENCODING 12584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n02\n03\n42\n24\n14\n08\n14\n22\n41\n81\nENDCHAR\nSTARTCHAR U_3129\nENCODING 12585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 9 2 0\nBITMAP\nC3\n41\n41\n41\n41\n81\n81\nFF\n41\nENDCHAR\nSTARTCHAR U_312A\nENCODING 12586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFFE0\n0800\n0800\n0F80\n0880\n1080\n1080\n1080\n2080\n4700\nENDCHAR\nSTARTCHAR U_312B\nENCODING 12587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFFE0\n1200\n1200\n1200\n1200\n1200\n1200\n2200\n4200\n81E0\nENDCHAR\nSTARTCHAR U_312C\nENCODING 12588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0200\n3FE0\n2000\n2000\n2000\n2000\n2000\n4000\n4000\n8000\nENDCHAR\nSTARTCHAR U_312D\nENCODING 12589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFFE0\n0400\n0400\n7FC0\n4440\n4440\n4440\n4440\n0400\n0400\nENDCHAR\nSTARTCHAR U_3131\nENCODING 12593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nFF80\n0080\n0080\n0080\n0080\n0080\n0080\n0080\n0000\nENDCHAR\nSTARTCHAR U_3132\nENCODING 12594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\nF780\n1080\n1080\n1080\n1080\n1080\n1080\n0000\nENDCHAR\nSTARTCHAR U_3133\nENCODING 12595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\nF100\n1100\n1100\n1280\n1280\n1440\n1820\n0000\nENDCHAR\nSTARTCHAR U_3134\nENCODING 12596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n8000\n8000\n8000\n8000\n8000\nFF00\n0000\n0000\nENDCHAR\nSTARTCHAR U_3135\nENCODING 12597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8FE0\n8100\n8100\n8100\n8100\n8380\n8280\n86C0\n8440\n9440\nE820\nENDCHAR\nSTARTCHAR U_3137\nENCODING 12599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\nFE00\n8000\n8000\n8000\nFE00\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_3139\nENCODING 12601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nFE00\n0200\n0200\nFE00\n8000\n8000\nFE00\n0000\n0000\nENDCHAR\nSTARTCHAR U_313A\nENCODING 12602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nFBE0\n0820\n0820\n7820\n4020\n4020\n4020\n7E20\n0020\nENDCHAR\nSTARTCHAR U_313B\nENCODING 12603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nF1C0\n0A20\n0A20\n7220\n8220\n8220\n79C0\n0000\n0000\nENDCHAR\nSTARTCHAR U_313C\nENCODING 12604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFA20\n0A20\n0A20\n0A20\nFBE0\n8220\n8220\n8220\n8220\n9A20\nE3E0\nENDCHAR\nSTARTCHAR U_313D\nENCODING 12605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF880\n0880\n0880\n0880\n0880\nF880\n8140\n8140\n8140\n9A20\nE420\nENDCHAR\nSTARTCHAR U_3141\nENCODING 12609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\nFE00\n8200\n8200\n8200\n8200\nFE00\n0000\n0000\nENDCHAR\nSTARTCHAR U_3142\nENCODING 12610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n8200\n8200\n8200\nFE00\n8200\n8200\nFE00\n0000\n0000\nENDCHAR\nSTARTCHAR U_3143\nENCODING 12611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n8A20\n8A20\n8A20\nFBE0\n8A20\n8A20\n8A20\n71C0\nENDCHAR\nSTARTCHAR U_3144\nENCODING 12612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n8880\n8880\nF880\n8880\n8940\n7220\n0000\n0000\nENDCHAR\nSTARTCHAR U_3145\nENCODING 12613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0400\n0400\n0400\n0A00\n0A00\n1100\n2080\nC060\n0000\n0000\nENDCHAR\nSTARTCHAR U_3147\nENCODING 12615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n3F80\n4040\n8020\n8020\n8020\n4040\n3F80\n0000\n0000\nENDCHAR\nSTARTCHAR U_3148\nENCODING 12616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\nFFE0\n0400\n0A00\n1100\n2080\nC060\n0000\n0000\nENDCHAR\nSTARTCHAR U_314C\nENCODING 12620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFFC0\n8000\n8000\nFFC0\n8000\n8000\n8000\nFFC0\n0000\n0000\nENDCHAR\nSTARTCHAR U_3151\nENCODING 12625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n8000\n8000\nE000\n8000\nE000\n8000\n8000\n8000\n8000\n0000\nENDCHAR\nSTARTCHAR U_3152\nENCODING 12626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n9000\n9000\nF000\n9000\nF000\n9000\n9000\n9000\n9000\n0000\nENDCHAR\nSTARTCHAR U_3154\nENCODING 12628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n2200\n2200\n2200\nE200\n2200\n2200\n2200\n2200\n2200\n0000\nENDCHAR\nSTARTCHAR U_3155\nENCODING 12629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n2000\n2000\nE000\n2000\nE000\n2000\n2000\n2000\n2000\n0000\nENDCHAR\nSTARTCHAR U_3158\nENCODING 12632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0200\n0200\n0300\n0200\n0200\n2200\n2200\nFE00\n0200\n0000\nENDCHAR\nSTARTCHAR U_315B\nENCODING 12635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\n0000\n0000\n1400\n1400\nFF80\n0000\nENDCHAR\nSTARTCHAR U_3162\nENCODING 12642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0080\n0080\n0080\n0080\n0080\n0080\n0080\nFF80\n0080\n0000\nENDCHAR\nSTARTCHAR U_3179\nENCODING 12665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n9480\nF780\n9480\n6300\n0800\n7F00\n8080\n8080\n7F00\n0000\nENDCHAR\nSTARTCHAR U_317A\nENCODING 12666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n13E0\n1020\n1020\n1020\n2820\n4420\n8220\n0000\n0000\nENDCHAR\nSTARTCHAR U_317D\nENCODING 12669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n0000\n2440\n2440\n27C0\n2440\n2440\n5440\n8B80\n0000\n0000\nENDCHAR\nSTARTCHAR U_317F\nENCODING 12671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0800\n1400\n2200\n2200\n4100\n8080\nFF80\n0000\nENDCHAR\nSTARTCHAR U_3180\nENCODING 12672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n2080\n2080\n71C0\n8A20\n8A20\n8A20\n8A20\n71C0\n0000\nENDCHAR\nSTARTCHAR U_3181\nENCODING 12673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n0800\n0800\n1C00\n6300\n8080\n8080\n6300\n1C00\n0000\n0000\nENDCHAR\nSTARTCHAR U_318C\nENCODING 12684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0080\n0080\n0080\n0280\nFC80\n4880\n4880\n4880\n8880\n0000\nENDCHAR\nSTARTCHAR U_318D\nENCODING 12685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n0000\n0000\n0000\nC000\nC000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_318E\nENCODING 12686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0400\n0400\n0400\nC400\nC400\n0400\n0400\n0400\n0400\n0000\nENDCHAR\nSTARTCHAR U_3192\nENCODING 12690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\nFF80\n0000\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_3193\nENCODING 12691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n7E00\n0000\n0000\nFF00\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_3194\nENCODING 12692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n7E00\n0000\n3C00\n0000\nFF00\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_3195\nENCODING 12693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFE00\nAA00\nCE00\n8200\nFE00\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_3196\nENCODING 12694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n1000\n1C00\n1000\n1000\nFE00\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_3197\nENCODING 12695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2000\n2000\nFC00\nA400\nFC00\n2000\n2000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_3198\nENCODING 12696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFE00\n1000\n1800\n1400\n1000\n1000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_3199\nENCODING 12697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFE00\n9200\nFE00\n9200\nFE00\n1000\n1000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_319A\nENCODING 12698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFC00\n1800\n2000\n4000\n8200\n7E00\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_319B\nENCODING 12699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7C00\n1000\nFE00\n9200\nAA00\n8600\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_319C\nENCODING 12700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFE00\n1000\n1000\n1000\n1000\n3000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_319D\nENCODING 12701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7C00\n1000\nFE00\n1000\n2800\nC600\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_319E\nENCODING 12702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4400\n5400\nFF00\n5500\n5600\n7100\n9F00\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_319F\nENCODING 12703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n1000\n1000\n2800\n4400\n8300\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_31C0\nENCODING 12736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n0000\n0000\n0000\n0300\n1C00\nE000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_31C1\nENCODING 12737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 4 -1\nBITMAP\n8000\n4000\n2000\n2000\n2000\n2000\n2000\n2000\n2000\nA000\n4000\nENDCHAR\nSTARTCHAR U_31C2\nENCODING 12738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n8000\n8000\n4000\n4000\n2000\n2000\n1000\n1000\n0800\n0500\n0200\nENDCHAR\nSTARTCHAR U_31C3\nENCODING 12739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\n8000\n4000\n2040\n1840\n07C0\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_31C4\nENCODING 12740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 2 -1\nBITMAP\n0000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\nFC00\n0000\nENDCHAR\nSTARTCHAR U_31C5\nENCODING 12741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 2 -1\nBITMAP\n0000\nF000\n1000\n1000\n1000\n1000\n1000\n1000\n1000\n1E00\n0000\nENDCHAR\nSTARTCHAR U_31C6\nENCODING 12742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\nFF00\n0100\n0100\n0100\n0100\n0100\n0100\n0100\n0500\n0200\nENDCHAR\nSTARTCHAR U_31C7\nENCODING 12743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 2 -1\nBITMAP\n0000\nFE00\n0200\n0200\n0200\n0400\n0400\n0800\n0800\n1000\n2000\nENDCHAR\nSTARTCHAR U_31C8\nENCODING 12744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nF800\n0800\n0800\n0800\n0800\n0800\n0800\n0880\n0880\n0780\nENDCHAR\nSTARTCHAR U_31C9\nENCODING 12745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n8000\n8000\n8000\n8000\n8000\nFF80\n0080\n0080\n0100\n0500\n0200\nENDCHAR\nSTARTCHAR U_31CA\nENCODING 12746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n0000\nF000\n1000\n1000\n1000\n1000\n1400\n1800\n1000\n0000\nENDCHAR\nSTARTCHAR U_31CB\nENCODING 12747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\nFE00\n0400\n0800\n0F00\n0100\n0100\n0200\n0200\n0400\n1800\nENDCHAR\nSTARTCHAR U_31CC\nENCODING 12748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 3 -1\nBITMAP\n0000\nF800\n0800\n1000\n2000\n1000\n0800\n0800\n0800\n0800\n3000\nENDCHAR\nSTARTCHAR U_31CD\nENCODING 12749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n0000\nF800\n0800\n0800\n0800\n0800\n0780\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_31CE\nENCODING 12750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\nF800\n0800\n0800\n0800\n0F00\n0100\n0100\n0100\n0100\n0100\nENDCHAR\nSTARTCHAR U_31CF\nENCODING 12751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 2 -1\nBITMAP\n8000\n8000\n4000\n4000\n2000\n2000\n1000\n1000\n0800\n0700\n0200\nENDCHAR\nSTARTCHAR U_31D0\nENCODING 12752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n0000\n0000\n0000\nFF80\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_31D1\nENCODING 12753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 5 -1\nBITMAP\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\nENDCHAR\nSTARTCHAR U_31D2\nENCODING 12754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n0100\n0100\n0200\n0400\n0800\n1000\nE000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_31D3\nENCODING 12755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 2 -1\nBITMAP\n1000\n1000\n1000\n1000\n1000\n1000\n1000\n2000\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_31D4\nENCODING 12756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 3 -1\nBITMAP\n0000\n0000\n8000\n4000\n2000\n1000\n1000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_31D5\nENCODING 12757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 2 -1\nBITMAP\n0000\n0000\nFE00\n0200\n0200\n0200\n0200\n0200\n0200\n0000\n0000\nENDCHAR\nSTARTCHAR U_31D6\nENCODING 12758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n0000\n0000\nFFE0\n0040\n0080\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_31D7\nENCODING 12759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 2 -1\nBITMAP\n0000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\nFE00\n0000\n0000\nENDCHAR\nSTARTCHAR U_31D8\nENCODING 12760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n0100\n0100\n0100\n0100\n0100\n0100\n0100\nFF00\n0000\n0000\nENDCHAR\nSTARTCHAR U_31D9\nENCODING 12761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 4 -1\nBITMAP\n8000\n8000\n8000\n8000\n8000\n8000\n8000\nA000\nC000\n8000\n0000\nENDCHAR\nSTARTCHAR U_31DA\nENCODING 12762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 4 -1\nBITMAP\n2000\n2000\n2000\n2000\n2000\n2000\n2000\n2000\n2000\nA000\n4000\nENDCHAR\nSTARTCHAR U_31DB\nENCODING 12763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 3 -1\nBITMAP\n0000\n1000\n1000\n2000\n4000\n8000\n4000\n2000\n1000\n1000\n0000\nENDCHAR\nSTARTCHAR U_31DC\nENCODING 12764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n0800\n0800\n1000\n1000\n2000\n4000\nFF80\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_31DD\nENCODING 12765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n2000\n2000\n5000\n9000\n0800\n0400\n0200\n0100\n0080\n0060\nENDCHAR\nSTARTCHAR U_31DE\nENCODING 12766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 2 -1\nBITMAP\n0000\n8000\n8000\n8000\n8000\nFE00\n0200\n0200\n0200\n0200\n0000\nENDCHAR\nSTARTCHAR U_31DF\nENCODING 12767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 3 -1\nBITMAP\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8400\n8400\n7C00\nENDCHAR\nSTARTCHAR U_31E0\nENCODING 12768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFF80\n0100\n0200\n0400\n0800\n1000\n2000\n4020\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_31E1\nENCODING 12769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\nFF80\n0100\n0200\n07C0\n0040\n0040\n0040\n0040\n0280\n0100\nENDCHAR\nSTARTCHAR U_31E2\nENCODING 12770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n0080\n0080\n0100\n0100\n0200\n0400\n8800\n5000\n2000\n0000\nENDCHAR\nSTARTCHAR U_31E3\nENCODING 12771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n0000\n7F00\n8080\n8080\n8080\n8080\n8080\n7F00\n0000\n0000\nENDCHAR\nSTARTCHAR U_3200\nENCODING 12800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4040\n8020\nBFA0\n80A0\n80A0\n80A0\n80A0\n8020\n4040\n2080\nENDCHAR\nSTARTCHAR U_3202\nENCODING 12802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0000\n4100\n8080\nBE80\nA080\nA080\nBE80\n8080\n8080\n4100\n0000\nENDCHAR\nSTARTCHAR U_3214\nENCODING 12820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4940\n8920\n8920\n99A0\n9520\nA520\nA520\nC320\n8140\n4080\nENDCHAR\nSTARTCHAR U_3216\nENCODING 12822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2020\n4120\nBD20\n91A0\n9120\nA920\nA920\nC520\n8120\n4140\n2080\nENDCHAR\nSTARTCHAR U_321A\nENCODING 12826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4040\n40C0\nBEA0\n94A0\n94E0\n94A0\n94A0\n94A0\nBEC0\n4040\n4040\nENDCHAR\nSTARTCHAR U_321B\nENCODING 12827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4040\n9920\n8120\nBD20\n81A0\n9920\nA520\n9920\n4040\n2080\nENDCHAR\nSTARTCHAR U_3220\nENCODING 12832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4040\n8020\n8020\n8020\nBFA0\n8020\n8020\n8020\n4040\n2080\nENDCHAR\nSTARTCHAR U_3221\nENCODING 12833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4040\n8020\n9F20\n8020\n8020\n8020\nBFA0\n8020\n4040\n2080\nENDCHAR\nSTARTCHAR U_3222\nENCODING 12834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4040\nBFA0\n8020\n8020\n9F20\n8020\n8020\nBFA0\n4040\n2080\nENDCHAR\nSTARTCHAR U_3223\nENCODING 12835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4040\nBFA0\nAAA0\nAAA0\nAAA0\nB3A0\nA0A0\nBFA0\n4040\n2080\nENDCHAR\nSTARTCHAR U_3224\nENCODING 12836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4040\n9F20\n8420\n8420\n9F20\n8520\n8920\nBFA0\n4040\n2080\nENDCHAR\nSTARTCHAR U_3225\nENCODING 12837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4440\n8420\nBFA0\n8020\n8A20\n8A20\n9120\nA0A0\n4040\n2080\nENDCHAR\nSTARTCHAR U_3226\nENCODING 12838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4840\n8820\n89A0\nBE20\n8820\n8820\n88A0\n87A0\n4040\n2080\nENDCHAR\nSTARTCHAR U_3227\nENCODING 12839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4E40\n8220\n8220\n9220\n9220\n9120\n9120\nA0A0\n4040\n2080\nENDCHAR\nSTARTCHAR U_3228\nENCODING 12840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4840\n8820\nBE20\n8A20\n8A20\n8A20\n92A0\nA3A0\n4040\n2080\nENDCHAR\nSTARTCHAR U_3229\nENCODING 12841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4440\n8420\n8420\n8420\nBFA0\n8420\n8420\n8420\n4440\n2080\nENDCHAR\nSTARTCHAR U_322D\nENCODING 12845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4440\n4440\n8420\nBFA0\n8E20\n9520\nA4A0\nC460\n8420\n4440\n4040\nENDCHAR\nSTARTCHAR U_322E\nENCODING 12846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2480\n4A40\n9120\nA0A0\nDF60\n8420\nBFA0\nA4A0\n9520\n7FC0\n2080\nENDCHAR\nSTARTCHAR U_3243\nENCODING 12867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4040\n5FC0\n8420\n8920\n9FA0\n8420\n9FA0\n8420\n8420\n5FC0\n4040\nENDCHAR\nSTARTCHAR U_32A3\nENCODING 12963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n7FC0\n8420\n8420\n97A0\n9420\n9420\n7FC0\n2080\n1F00\nENDCHAR\nSTARTCHAR U_32A4\nENCODING 12964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4440\n8420\n8720\n8420\n8420\nBFA0\n4040\n2080\n1F00\nENDCHAR\nSTARTCHAR U_32A5\nENCODING 12965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2480\n4440\nBFA0\nA4A0\nA4A0\nBFA0\n8420\n4440\n2080\n1F00\nENDCHAR\nSTARTCHAR U_32A6\nENCODING 12966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4040\nBFA0\n8420\n8620\n8520\n8420\n4440\n2080\n1F00\nENDCHAR\nSTARTCHAR U_32A7\nENCODING 12967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4840\nBF20\n9020\n9F20\nA420\nC420\n5F40\n2080\n1F00\nENDCHAR\nSTARTCHAR U_32A8\nENCODING 12968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4840\nBF20\n9020\n9F20\nB120\nD120\n5F40\n2080\n1F00\nENDCHAR\nSTARTCHAR U_32D0\nENCODING 13008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\nBFA0\n80A0\n84A0\n8720\n8420\n8420\n8820\n5040\n3F80\nENDCHAR\nSTARTCHAR U_32D1\nENCODING 13009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n81A0\n8620\n8C20\nB420\n8420\n8420\n8420\n4440\n3F80\nENDCHAR\nSTARTCHAR U_32D2\nENCODING 13010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8420\nBFA0\nA0A0\nA0A0\n8120\n8120\n8220\n4440\n3F80\nENDCHAR\nSTARTCHAR U_32D3\nENCODING 13011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8020\n9F20\n8420\n8420\n8420\n8420\nBFA0\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32D4\nENCODING 13012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8120\nBFE0\n8320\n8D20\n9120\nA120\n8520\n4340\n3F80\nENDCHAR\nSTARTCHAR U_32D5\nENCODING 13013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8820\nBFA0\n88A0\n88A0\n90A0\n90A0\nA520\n4240\n3F80\nENDCHAR\nSTARTCHAR U_32D6\nENCODING 13014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4840\n8B20\n9C20\n8420\n87A0\nBC20\n8220\n8220\n4240\n3F80\nENDCHAR\nSTARTCHAR U_32D7\nENCODING 13015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4840\n8F20\n9120\n9120\nA220\n8220\n8420\n8820\n5040\n3F80\nENDCHAR\nSTARTCHAR U_32D8\nENCODING 13016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4840\n8820\n9FA0\n9220\nA220\n8420\n8420\n8820\n5040\n3F80\nENDCHAR\nSTARTCHAR U_32D9\nENCODING 13017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8020\n9F20\n8120\n8120\n8120\n8120\n9F20\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32DA\nENCODING 13018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n9120\n9120\nBFA0\n9120\n8120\n8220\n8C20\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32DB\nENCODING 13019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n9820\n8020\nB820\n80A0\n8120\n8620\n9820\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32DC\nENCODING 13020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n9F20\n8120\n8220\n8420\n8A20\n9120\nA0A0\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32DD\nENCODING 13021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n9020\n97A0\nF920\n9120\n9020\n9020\n8F20\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32DE\nENCODING 13022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\nA0A0\n90A0\n9120\n8120\n8220\n8420\n8820\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32DF\nENCODING 13023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4840\n8F20\n8920\n9920\nAA20\n8620\n8420\n8820\n5040\n3F80\nENDCHAR\nSTARTCHAR U_32E0\nENCODING 13024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8320\n9E20\n8420\nBFA0\n8420\n8420\n8820\n5040\n3F80\nENDCHAR\nSTARTCHAR U_32E1\nENCODING 13025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\nA4A0\n94A0\n90A0\n8120\n8120\n8220\n8420\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32E2\nENCODING 13026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n9F20\n8020\nBFA0\n8220\n8220\n8420\n8820\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32E3\nENCODING 13027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8820\n8820\n8C20\n8B20\n8820\n8820\n8820\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32E4\nENCODING 13028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8420\n8420\nBFA0\n8420\n8420\n8820\n8820\n5040\n3F80\nENDCHAR\nSTARTCHAR U_32E5\nENCODING 13029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8020\n9F20\n8020\n8020\n8020\nBFA0\n8020\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32E6\nENCODING 13030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n9F20\n8120\n8120\n9A20\n8620\n8920\n9020\n6040\n3F80\nENDCHAR\nSTARTCHAR U_32E7\nENCODING 13031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8420\n9F20\n8120\n8220\n8620\n9D20\nA4A0\n4440\n3F80\nENDCHAR\nSTARTCHAR U_32E8\nENCODING 13032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8220\n8220\n8220\n8420\n8420\n8820\n9020\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32E9\nENCODING 13033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8020\n8920\n8920\n9920\n90A0\nA0A0\n8020\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32EA\nENCODING 13034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n9020\n9320\n9C20\n9020\n9020\n9020\n8F20\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32EB\nENCODING 13035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8020\nBFA0\n80A0\n80A0\n8120\n8220\n8420\n4840\n3F80\nENDCHAR\nSTARTCHAR U_32EC\nENCODING 13036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8020\n8020\n8C20\n9220\nA120\n80E0\n8020\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32ED\nENCODING 13037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8420\nBFA0\n8420\n9520\n9520\nA4A0\n8420\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32EE\nENCODING 13038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8020\nBFA0\n8120\n9220\n8C20\n8420\n8220\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32EF\nENCODING 13039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n9C20\n8320\n9820\n8620\n8020\n9820\n8720\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32F0\nENCODING 13040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8420\n8420\n8820\n8A20\n9120\nA720\nB8A0\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32F1\nENCODING 13041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8220\n8220\n9420\n8C20\n8A20\n9020\nA020\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32F2\nENCODING 13042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n9F20\n8420\n8420\nBFA0\n8420\n8420\n83A0\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32F3\nENCODING 13043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n9020\n93A0\n9CA0\nF120\n8A20\n8820\n8420\n4440\n3F80\nENDCHAR\nSTARTCHAR U_32F4\nENCODING 13044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8020\n9E20\n8220\n8220\n8220\n8220\nBFA0\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32F5\nENCODING 13045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n9F20\n8120\n8120\n9F20\n8120\n8120\n9F20\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32F6\nENCODING 13046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n9F20\n8020\nBFA0\n80A0\n80A0\n8120\n8620\n4840\n3F80\nENDCHAR\nSTARTCHAR U_32F7\nENCODING 13047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n9120\n9120\n9120\n8120\n8220\n8420\n8820\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32F8\nENCODING 13048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8420\n8420\n9420\n94A0\n9520\nA620\n8420\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32F9\nENCODING 13049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8820\n8820\n8820\n88A0\n8920\n8A20\n8C20\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32FA\nENCODING 13050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8020\n9F20\n9120\n9120\n9120\n9F20\n8020\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32FB\nENCODING 13051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8020\nBFA0\nA0A0\nA120\n8120\n8220\n8420\n4840\n3F80\nENDCHAR\nSTARTCHAR U_32FC\nENCODING 13052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8220\n8220\n9F20\n9220\n9220\nBFA0\n8220\n4240\n3F80\nENDCHAR\nSTARTCHAR U_32FD\nENCODING 13053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\n8020\n9FA0\n80A0\n8720\n8420\n8420\nBFA0\n4040\n3F80\nENDCHAR\nSTARTCHAR U_32FE\nENCODING 13054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n4040\nBFA0\n80A0\n9FA0\n8120\n8220\n8420\n9820\n4040\n3F80\nENDCHAR\nSTARTCHAR U_3300\nENCODING 13056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFAA0\n2A80\n3440\n2440\n4820\n8000\n0100\n0180\nF940\n0120\n0100\nENDCHAR\nSTARTCHAR U_3322\nENCODING 13090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4200\nF920\n4820\n4040\n3B80\n0000\n7800\n1000\nFC00\n1000\n6000\nENDCHAR\nSTARTCHAR U_337B\nENCODING 13179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF8A0\n2080\nAFE0\n7480\n2780\nFD80\n25A0\n2560\n2A40\n28C0\n3320\nENDCHAR\nSTARTCHAR U_337C\nENCODING 13180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7900\n2E00\nEAE0\nAAA0\nA7A0\nFAA0\nABA0\nAEA0\nEAE0\n3AA0\n2A00\nENDCHAR\nSTARTCHAR U_337D\nENCODING 13181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n27E0\n2080\n2080\nFA80\n2280\n22E0\n2280\n2280\n5280\n5280\n8FE0\nENDCHAR\nSTARTCHAR U_337E\nENCODING 13182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n3A40\nE940\nAC40\nBAA0\nE9E0\nB800\nA9E0\nEAA0\nAAA0\n4AE0\nENDCHAR\nSTARTCHAR U_337F\nENCODING 13183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n48A0\nFFE0\n6940\nD940\n6DC0\n4B20\n2240\n5740\nAAE0\n5740\n7AE0\nENDCHAR\nSTARTCHAR U_338E\nENCODING 13198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 8 0 -1\nBITMAP\n28D0\nD520\n5520\n5520\n54C0\n5520\n5520\n00C0\nENDCHAR\nSTARTCHAR U_338F\nENCODING 13199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\nC000\n4000\n4000\n59A0\n5240\n6240\n6240\n5180\n5240\nDA40\n03C0\nENDCHAR\nSTARTCHAR U_339C\nENCODING 13212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 8 0 0\nBITMAP\nAAA0\n5550\n5550\n5550\n5550\n5550\n5550\n5550\nENDCHAR\nSTARTCHAR U_339D\nENCODING 13213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 8 1 0\nBITMAP\n3540\n4AA0\n8AA0\n82A0\n82A0\n82A0\n4AA0\n32A0\nENDCHAR\nSTARTCHAR U_339E\nENCODING 13214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 1 0\nBITMAP\nC000\n4000\n4540\n5AA0\n52A0\n62A0\n62A0\n52A0\n52A0\nDAA0\nENDCHAR\nSTARTCHAR U_33A1\nENCODING 13217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 0\nBITMAP\n0040\n00A0\n0020\n0040\nB6E0\n4900\n4900\n4900\n4900\n4900\n4900\nENDCHAR\nSTARTCHAR U_33C4\nENCODING 13252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 7 1 0\nBITMAP\n30C0\n4920\n8200\n8200\n8200\n4920\n30C0\nENDCHAR\nSTARTCHAR U_33CE\nENCODING 13262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 10 0 0\nBITMAP\n8C10\n9630\n9550\nA550\nC550\nA490\nA490\n9490\n9490\n8C90\nENDCHAR\nSTARTCHAR U_33D1\nENCODING 13265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 10 2 0\nBITMAP\nC000\n4000\n4000\n4B00\n4480\n4480\n4480\n4480\n4480\nECC0\nENDCHAR\nSTARTCHAR U_33D2\nENCODING 13266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 12 11 0 -1\nBITMAP\nC000\n4000\n4000\n48D0\n5520\n5520\n5520\n54C0\n5520\nE920\n00C0\nENDCHAR\nSTARTCHAR U_33D5\nENCODING 13269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\n0060\n0120\n0020\nA920\n5520\n5520\n5520\n5520\n5520\n5520\nENDCHAR\nSTARTCHAR U_33E0\nENCODING 13280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n47C0\nC440\n4440\n4440\n47C0\n4440\n4440\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_33E1\nENCODING 13281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n73E0\n8A20\n8A20\n0A20\n0BE0\n3220\n4220\n8220\n83E0\nFA20\nENDCHAR\nSTARTCHAR U_33E2\nENCODING 13282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n73E0\n8A20\n8A20\n0A20\n33E0\n0A20\n0A20\n8A20\n8BE0\n7220\nENDCHAR\nSTARTCHAR U_33E3\nENCODING 13283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n13E0\n1220\n3220\n3220\n53E0\n5220\n9220\nFA20\n13E0\n1220\nENDCHAR\nSTARTCHAR U_33E4\nENCODING 13284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFBE0\n8220\n8220\n8220\nF3E0\n8A20\n0A20\n0A20\n8BE0\n7220\nENDCHAR\nSTARTCHAR U_33E5\nENCODING 13285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n73E0\n8A20\n8A20\n8220\nF3E0\n8A20\n8A20\n8A20\n8BE0\n7220\nENDCHAR\nSTARTCHAR U_33E6\nENCODING 13286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\nFBE0\n8A20\n0A20\n1220\n13E0\n1220\n2220\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_33E7\nENCODING 13287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n73E0\n8A20\n8A20\n8A20\n73E0\n8A20\n8A20\n8A20\n8BE0\n7220\nENDCHAR\nSTARTCHAR U_33E8\nENCODING 13288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n73E0\n8A20\n8A20\n8A20\n8BE0\n7A20\n0A20\n0A20\n8BE0\n7220\nENDCHAR\nSTARTCHAR U_33E9\nENCODING 13289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n4CE0\nD2A0\n52A0\n52A0\n52E0\n52A0\n52A0\n52A0\n52E0\n4CA0\nENDCHAR\nSTARTCHAR U_33EA\nENCODING 13290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n49E0\nD920\n4920\n4920\n49E0\n4920\n4920\n4920\n49E0\n4920\nENDCHAR\nSTARTCHAR U_33EB\nENCODING 13291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n49E0\nD520\n5520\n4520\n45E0\n4920\n4920\n5120\n51E0\n5D20\nENDCHAR\nSTARTCHAR U_33EC\nENCODING 13292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n49E0\nD520\n5520\n4520\n49E0\n4520\n4520\n5520\n55E0\n4920\nENDCHAR\nSTARTCHAR U_33ED\nENCODING 13293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n44E0\nC4A0\n4CA0\n4CA0\n54E0\n54A0\n54A0\n5EA0\n44E0\n44A0\nENDCHAR\nSTARTCHAR U_33EE\nENCODING 13294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n5DE0\nD120\n5120\n5920\n55E0\n4520\n4520\n5520\n55E0\n4920\nENDCHAR\nSTARTCHAR U_33EF\nENCODING 13295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n49E0\nD520\n5520\n5120\n59E0\n5520\n5520\n5520\n55E0\n4920\nENDCHAR\nSTARTCHAR U_33F0\nENCODING 13296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n5EE0\nD2A0\n42A0\n44A0\n44E0\n44A0\n44A0\n48A0\n48E0\n48A0\nENDCHAR\nSTARTCHAR U_33F1\nENCODING 13297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n49E0\nD520\n5520\n5520\n49E0\n5520\n5520\n5520\n55E0\n4920\nENDCHAR\nSTARTCHAR U_33F2\nENCODING 13298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n49E0\nD520\n5520\n5520\n55E0\n4D20\n4520\n5520\n55E0\n4920\nENDCHAR\nSTARTCHAR U_33F3\nENCODING 13299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n44E0\nAAA0\nAAA0\n2AA0\n2AE0\n4AA0\n4AA0\n8AA0\n8AE0\nE4A0\nENDCHAR\nSTARTCHAR U_33F4\nENCODING 13300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n45E0\nAD20\nA520\n2520\n45E0\n4520\n4520\n8520\n85E0\nE520\nENDCHAR\nSTARTCHAR U_33F5\nENCODING 13301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n44E0\nAAA0\nAAA0\n22A0\n22E0\n44A0\n44A0\n88A0\n88E0\nEEA0\nENDCHAR\nSTARTCHAR U_33F6\nENCODING 13302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n44E0\nAAA0\nAAA0\n22A0\n24E0\n42A0\n42A0\n8AA0\n8AE0\nE4A0\nENDCHAR\nSTARTCHAR U_33F7\nENCODING 13303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n42E0\nA2A0\nA6A0\n26A0\n2AE0\n4AA0\n4AA0\n8EA0\n82E0\nE2A0\nENDCHAR\nSTARTCHAR U_33F8\nENCODING 13304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n4EE0\nA8A0\nA8A0\n2CA0\n2AE0\n42A0\n42A0\n8AA0\n8AE0\nE4A0\nENDCHAR\nSTARTCHAR U_33F9\nENCODING 13305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n44E0\nAAA0\nAAA0\n28A0\n2CE0\n4AA0\n4AA0\n8AA0\n8AE0\nE4A0\nENDCHAR\nSTARTCHAR U_33FA\nENCODING 13306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n4EE0\nAAA0\nA2A0\n22A0\n24E0\n44A0\n44A0\n84A0\n84E0\nE4A0\nENDCHAR\nSTARTCHAR U_33FB\nENCODING 13307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n44E0\nAAA0\nAAA0\n2AA0\n24E0\n4AA0\n4AA0\n8AA0\n8AE0\nE4A0\nENDCHAR\nSTARTCHAR U_33FC\nENCODING 13308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n44E0\nAAA0\nAAA0\n2AA0\n2AE0\n46A0\n42A0\n8AA0\n8AE0\nE4A0\nENDCHAR\nSTARTCHAR U_33FD\nENCODING 13309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n44E0\nAAA0\nAAA0\n2AA0\n4AE0\n2AA0\n2AA0\nAAA0\nAAE0\n44A0\nENDCHAR\nSTARTCHAR U_33FE\nENCODING 13310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0000\n62E0\n96A0\n92A0\n12A0\n22E0\n12A0\n12A0\n92A0\n92E0\n62A0\nENDCHAR\nSTARTCHAR U_3400\nENCODING 13312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n1100\n1100\n1100\n1100\nF1E0\n1100\n1100\n1100\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_3401\nENCODING 13313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n0400\n7FC0\n4440\n4A40\n5140\n6140\n4040\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_3402\nENCODING 13314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n07C0\n7C00\n0420\n23E0\n2100\nFBE0\n2100\n2920\n3120\n20E0\nENDCHAR\nSTARTCHAR U_3403\nENCODING 13315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1100\n2080\n4040\nFFE0\n0400\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_3404\nENCODING 13316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n0400\n4400\n4400\nFFE0\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_3405\nENCODING 13317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n2080\n1100\n0900\n0600\n0200\n0500\n0880\n1040\n6040\n0000\nENDCHAR\nSTARTCHAR U_3406\nENCODING 13318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F00\n2000\n3F00\n2100\n3F00\n2100\n3F00\n2000\n3F80\n4080\n8300\nENDCHAR\nSTARTCHAR U_3407\nENCODING 13319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\n7F00\n1120\n2120\nC0E0\n7F00\n0200\n3C40\n4040\n3FC0\nENDCHAR\nSTARTCHAR U_3408\nENCODING 13320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\n0400\n0A00\n3180\nC060\n7F80\n0100\n0E00\n3040\n4040\n3FC0\nENDCHAR\nSTARTCHAR U_3409\nENCODING 13321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n0200\n0200\n0A00\n0400\n7FC0\n0300\n1C20\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_340A\nENCODING 13322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0400\n3F80\n0000\n7FC0\n0180\n1E20\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_340B\nENCODING 13323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n3FC0\n0400\nFFE0\n0000\n7FC0\n0180\n1E20\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_340C\nENCODING 13324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7FC0\n4400\n8400\n27C0\n3C40\nE440\n2580\n2420\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_340D\nENCODING 13325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n0E00\n7440\n2240\n1280\n7FC0\n0080\n0700\n3820\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_340E\nENCODING 13326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n0E00\n3180\nC060\n3F80\n0300\n1C20\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_340F\nENCODING 13327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n3F80\n0880\nFFE0\n0000\n7FC0\n0100\n1E20\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_3410\nENCODING 13328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nFFE0\n4A40\n3180\nCA60\n0000\n7F80\n0600\n1800\n2040\n1FC0\nENDCHAR\nSTARTCHAR U_3411\nENCODING 13329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n5100\n0E00\nF5E0\n0A00\n0400\n7FC0\n0600\n1800\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_3412\nENCODING 13330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n1040\n2080\nFFC0\n2040\n3FC0\n0000\n7FC0\n0C00\n3020\n1FE0\nENDCHAR\nSTARTCHAR U_3413\nENCODING 13331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0080\n3C80\n2480\n3C80\n0080\nFFE0\n0600\n1800\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_3414\nENCODING 13332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0000\n1F00\n1100\n1F00\n0000\n7F00\n0400\n0840\n0FC0\nENDCHAR\nSTARTCHAR U_3415\nENCODING 13333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4440\n7FC0\n4440\n7FC0\n0000\nFF80\n0600\n0840\n1FC0\nENDCHAR\nSTARTCHAR U_3416\nENCODING 13334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\nFD00\n1100\n7D00\n0100\n7D00\n4500\n4520\n4520\n7CE0\nENDCHAR\nSTARTCHAR U_3417\nENCODING 13335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n1F80\n0500\nFFE0\n1900\n6A40\n8FC0\n0000\n3FA0\n0C20\n7FE0\nENDCHAR\nSTARTCHAR U_3418\nENCODING 13336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\nFFE0\n0D00\n1480\n6440\n1F00\n0200\n0C00\n3020\n3FE0\nENDCHAR\nSTARTCHAR U_3419\nENCODING 13337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n2080\n3F80\n1100\nFFE0\n0000\n3FC0\n0180\n0E00\n7020\n3FE0\nENDCHAR\nSTARTCHAR U_341A\nENCODING 13338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n3F80\n0880\nFFE0\n1100\n7FC0\n0200\n1C20\n6020\n3FE0\nENDCHAR\nSTARTCHAR U_341B\nENCODING 13339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2FE0\nE400\n2BC0\n2240\n23C0\n7FC0\n0300\n0C00\n3040\n3FC0\nENDCHAR\nSTARTCHAR U_341C\nENCODING 13340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n2100\nFBC0\n2140\nA940\n7140\n2140\n7140\nAA40\n2240\n6460\nENDCHAR\nSTARTCHAR U_341D\nENCODING 13341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\nF7E0\n2820\nF720\n2520\n6760\n3F80\n0300\n1C00\n6040\n7FC0\nENDCHAR\nSTARTCHAR U_341E\nENCODING 13342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1100\n1F00\n1100\nFFE0\n2080\n5F40\n8220\n0C40\n1FC0\nENDCHAR\nSTARTCHAR U_341F\nENCODING 13343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nF3C0\n1200\n7380\n1200\nF3C0\n0000\n7F80\n0C20\n3020\n1FE0\nENDCHAR\nSTARTCHAR U_3420\nENCODING 13344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\n5480\nFC80\n0880\n7C80\n10A0\n10E0\n3F00\n0600\n1840\n3FC0\nENDCHAR\nSTARTCHAR U_3421\nENCODING 13345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4100\nFFE0\n5AA0\n5AA0\n5100\n57C0\n5100\n5280\n5460\n8FE0\nENDCHAR\nSTARTCHAR U_3422\nENCODING 13346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2540\n8FC0\n4080\n2FE0\nC100\n4200\n7F80\n0C20\n3020\n7FE0\nENDCHAR\nSTARTCHAR U_3423\nENCODING 13347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n7FE0\n5240\n5FC0\n5240\n7FE0\n4780\n4820\n9FE0\nENDCHAR\nSTARTCHAR U_3424\nENCODING 13348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF100\n57C0\n5440\n57C0\n5440\n5FE0\n5280\n5440\n9FE0\nENDCHAR\nSTARTCHAR U_3425\nENCODING 13349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nAE80\n5BE0\nEEA0\n4AA0\nFF40\n0000\n7F80\n0C20\n1020\n3FE0\nENDCHAR\nSTARTCHAR U_3426\nENCODING 13350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6EC0\n4840\n6EC0\n4A40\nFFE0\n2480\nC460\n3F80\n0600\n1820\n3FE0\nENDCHAR\nSTARTCHAR U_3427\nENCODING 13351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n1A00\n0A00\n0200\nFFE0\n0640\n0A00\n1200\n2200\nCA00\n0400\nENDCHAR\nSTARTCHAR U_3428\nENCODING 13352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n1040\n5140\n6180\nFBE0\n28A0\n2080\n2080\n2080\n2080\n6180\nENDCHAR\nSTARTCHAR U_3429\nENCODING 13353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5140\n5140\nFBE0\n5140\n5140\n5140\nFBE0\n5140\n5140\n5140\n9640\nENDCHAR\nSTARTCHAR U_342A\nENCODING 13354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0400\n4440\n4440\n7FC0\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_342B\nENCODING 13355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\nFFE0\n0000\n5140\n4A40\n4440\n4A40\n5140\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_342C\nENCODING 13356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1000\n2080\n7FC0\n0020\n2480\n2480\n2480\n44A0\n84E0\nENDCHAR\nSTARTCHAR U_342D\nENCODING 13357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0000\n7FC0\n4040\n5F40\n5140\n5140\n5F40\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_342E\nENCODING 13358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n4A40\nBFA0\n0A00\n3F80\n0A00\n7FC0\n3480\nD300\n19E0\nENDCHAR\nSTARTCHAR U_342F\nENCODING 13359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n3F80\n4040\n7FC0\n0400\n7FC0\n1500\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3430\nENCODING 13360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17E0\n2420\n2420\n6420\nA420\n2420\n2420\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_3431\nENCODING 13361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\n1400\n2300\n48E0\n9200\n2480\n0900\n3200\n0400\n7800\nENDCHAR\nSTARTCHAR U_3432\nENCODING 13362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2100\n6FE0\nA100\n2100\n2100\n2280\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_3433\nENCODING 13363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2280\n2280\n6280\nA280\n2480\n24A0\n24A0\n28A0\n3060\nENDCHAR\nSTARTCHAR U_3434\nENCODING 13364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n27E0\n2420\n6420\nAA40\n2140\n2080\n2080\n2100\n2600\nENDCHAR\nSTARTCHAR U_3435\nENCODING 13365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n17C0\n2100\n2100\n6FE0\nA100\n2100\n2100\n2100\n2300\n0100\nENDCHAR\nSTARTCHAR U_3436\nENCODING 13366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1440\n2440\n6440\nA7C0\n2400\n2400\n2400\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_3437\nENCODING 13367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1040\n2440\n6440\nA440\n27E0\n2020\n2FA0\n2020\n20A0\n2040\nENDCHAR\nSTARTCHAR U_3438\nENCODING 13368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n1400\n27E0\n6920\nA940\n2100\n2100\n2280\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_3439\nENCODING 13369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n17E0\n2400\n6BC0\nA000\n2F80\n2080\n2080\n2080\n20A0\n2060\nENDCHAR\nSTARTCHAR U_343A\nENCODING 13370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n4880\nD880\n4880\n4880\n4880\n4940\n4940\n4A20\n4A20\nENDCHAR\nSTARTCHAR U_343B\nENCODING 13371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2100\n6FE0\nA920\n2920\n2920\n2AA0\n2C60\n2820\n2860\nENDCHAR\nSTARTCHAR U_343C\nENCODING 13372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n1640\n2240\n6240\nAFE0\n2240\n2240\n2240\n2240\n2440\n2840\nENDCHAR\nSTARTCHAR U_343D\nENCODING 13373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1440\n2440\n66C0\nA540\n2540\n26C0\n2440\n2440\n2840\n3020\nENDCHAR\nSTARTCHAR U_343E\nENCODING 13374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1000\n2000\n6FE0\nA280\n2280\n2280\n2280\n24A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_343F\nENCODING 13375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n1700\n2100\n6100\nA7C0\n2100\n2100\n2FE0\n2100\n2100\n2300\nENDCHAR\nSTARTCHAR U_3440\nENCODING 13376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n4200\n5FE0\nC200\n4500\n4500\n4480\n4880\n4A40\n5120\nENDCHAR\nSTARTCHAR U_3441\nENCODING 13377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1920\n2920\n6920\nAFE0\n2100\n2100\n2920\n2920\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_3442\nENCODING 13378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n6100\nAFE0\n2920\n2920\n2AA0\n2C60\n2820\n2820\n2860\nENDCHAR\nSTARTCHAR U_3443\nENCODING 13379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n1480\n29E0\n6AA0\nAEA0\n22A0\n24A0\n28A0\n2BA0\n2D20\n2260\nENDCHAR\nSTARTCHAR U_3444\nENCODING 13380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2840\n4A40\nC940\n5FE0\n4840\n4A40\n5140\n5FE0\n4040\n40C0\nENDCHAR\nSTARTCHAR U_3445\nENCODING 13381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n1400\n27E0\n6900\nB100\n2100\n21C0\n2100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_3446\nENCODING 13382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1440\n2440\n2440\n67C0\nA280\n2280\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_3447\nENCODING 13383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n13C0\n2440\n6080\nAFE0\n2020\n2020\n27E0\n2020\n2020\n2FE0\nENDCHAR\nSTARTCHAR U_3448\nENCODING 13384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2FE0\n6200\nA400\n2500\n2FE0\n2100\n2540\n2920\n2300\nENDCHAR\nSTARTCHAR U_3449\nENCODING 13385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2840\n6FC0\nAA40\n2BC0\n2CC0\n2AC0\n2940\n2940\n2A40\n3420\nENDCHAR\nSTARTCHAR U_344A\nENCODING 13386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3FE0\n6280\nA280\n2AC0\n2AA0\n32A0\n2280\n2480\n2480\n2980\nENDCHAR\nSTARTCHAR U_344B\nENCODING 13387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n1280\n2280\n6FE0\nAAA0\n2AA0\n2FE0\n2AA0\n2AA0\n2AA0\n2FE0\nENDCHAR\nSTARTCHAR U_344C\nENCODING 13388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\n6BE0\nA880\n2880\n2BE0\n2880\n2880\n2BE0\n2800\n2FE0\nENDCHAR\nSTARTCHAR U_344D\nENCODING 13389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2100\n6FC0\nA100\n3FE0\n2380\n2540\n2520\n2920\n2100\nENDCHAR\nSTARTCHAR U_344E\nENCODING 13390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n12A0\n1540\n2A80\n6540\nA540\n2000\n2100\n2920\n2920\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_344F\nENCODING 13391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2820\n6080\nAFE0\n2080\n2480\n2280\n2080\n2080\n2180\nENDCHAR\nSTARTCHAR U_3450\nENCODING 13392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\n1100\n21C0\n6100\nA100\n2FE0\n2100\n2540\n2540\n2920\n2300\nENDCHAR\nSTARTCHAR U_3451\nENCODING 13393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1400\n2FE0\n6820\nAFE0\n2820\n2820\n2FE0\n2820\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_3452\nENCODING 13394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n3180\nDF60\n0400\n3F80\n2480\n3F80\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_3453\nENCODING 13395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2200\n6440\nAFA0\n2200\n2FE0\n2200\n25C0\n2540\n2880\n3360\nENDCHAR\nSTARTCHAR U_3454\nENCODING 13396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n1100\n2200\n6FE0\nA820\n2920\n2920\n2920\n2920\n2240\n2C20\nENDCHAR\nSTARTCHAR U_3455\nENCODING 13397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1540\n2540\n67C0\nA200\n27C0\n2840\n2240\n2180\n2100\n2E00\nENDCHAR\nSTARTCHAR U_3456\nENCODING 13398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n1480\n2880\n7BE0\nAAA0\n2AA0\n2AA0\n2BE0\n2880\n2880\n2880\nENDCHAR\nSTARTCHAR U_3457\nENCODING 13399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n17C0\n2440\n67C0\nA440\n27C0\n2440\n27E0\n2CC0\n2340\n2CC0\nENDCHAR\nSTARTCHAR U_3458\nENCODING 13400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10A0\n1080\n2FE0\n6080\nAAA0\n2AA0\n3FC0\n2A80\n2AC0\n3160\n2220\nENDCHAR\nSTARTCHAR U_3459\nENCODING 13401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2A00\n6E80\nAA80\n2E80\n2A80\n2A80\n2E80\n3A80\n22A0\n22E0\nENDCHAR\nSTARTCHAR U_345A\nENCODING 13402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n4AA0\nCAA0\n5EA0\n4AC0\n4AA0\n5EA0\n4AA0\n4AE0\n5280\n6680\nENDCHAR\nSTARTCHAR U_345B\nENCODING 13403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2100\n6FE0\nA920\n2920\n2FE0\n2380\n2540\n2540\n2920\nENDCHAR\nSTARTCHAR U_345C\nENCODING 13404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1460\n1580\n2F00\n65E0\nA540\n2740\n2D40\n2540\n2540\n2540\n2E40\nENDCHAR\nSTARTCHAR U_345D\nENCODING 13405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n1100\n27E0\n2100\n6FE0\nA000\n2240\n2FE0\n2240\n2240\n2C40\nENDCHAR\nSTARTCHAR U_345E\nENCODING 13406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1540\n2100\n2280\n6C60\nA240\n2FE0\n2240\n2240\n2440\n2840\nENDCHAR\nSTARTCHAR U_345F\nENCODING 13407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\n1600\n2400\n67C0\nA480\n2480\n2480\n2FE0\n2000\n2440\n2820\nENDCHAR\nSTARTCHAR U_3460\nENCODING 13408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1BE0\n2AA0\n6A40\nAAA0\n2320\n2000\n2100\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_3461\nENCODING 13409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n6AA0\nAEA0\n2AA0\n2EA0\n28E0\n2CA0\n2A80\n2E80\n2880\nENDCHAR\nSTARTCHAR U_3462\nENCODING 13410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n14E0\n24A0\n7FA0\nA4A0\n24A0\n3FA0\n24E0\n28A0\n2A80\n2B80\n2C80\nENDCHAR\nSTARTCHAR U_3463\nENCODING 13411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n2480\n7FE0\nA480\n2D80\n2FC0\n2DA0\n36A0\n2480\n2480\n2480\nENDCHAR\nSTARTCHAR U_3464\nENCODING 13412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n1FE0\n2240\n6000\nAFE0\n2920\n2920\n2FE0\n2920\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_3465\nENCODING 13413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n2440\n27C0\n6440\nA7C0\n2800\n2FE0\n34A0\n24A0\n2920\n2260\nENDCHAR\nSTARTCHAR U_3466\nENCODING 13414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2E00\n6800\nAFE0\n2820\n2FE0\n2940\n2FE0\n2900\n2A80\n3460\nENDCHAR\nSTARTCHAR U_3467\nENCODING 13415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n4FE0\n4380\nCD60\n4100\n47C0\n4080\n4FE0\n4100\n4300\nENDCHAR\nSTARTCHAR U_3468\nENCODING 13416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1440\n2440\n67C0\nA400\n27C0\n2900\n2100\n2FE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_3469\nENCODING 13417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n2AA0\n4FE0\n4200\nC7C0\n4440\n4A40\n4180\n4300\n5C00\nENDCHAR\nSTARTCHAR U_346A\nENCODING 13418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2440\n6380\nA440\n3C60\n27C0\n2440\n27C0\n2440\n2840\nENDCHAR\nSTARTCHAR U_346B\nENCODING 13419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n1300\n1480\n2A60\n6100\nA780\n2080\n2360\n2900\n2A20\n21C0\nENDCHAR\nSTARTCHAR U_346C\nENCODING 13420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2880\n4BE0\nFC80\n5480\n55E0\n5520\n4920\n5520\n5520\n61E0\nENDCHAR\nSTARTCHAR U_346D\nENCODING 13421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1540\n27C0\n6540\nA7C0\n2000\n2FE0\n2240\n2240\n2440\n2840\nENDCHAR\nSTARTCHAR U_346E\nENCODING 13422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n1420\n2100\n6FE0\nA100\n27C0\n2540\n27C0\n2540\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_346F\nENCODING 13423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n1200\n27C0\n6440\nA7C0\n2440\n27C0\n2440\n27C0\n2240\n2420\nENDCHAR\nSTARTCHAR U_3470\nENCODING 13424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27C0\n4440\n4F80\nC080\n5FE0\n4440\n5B80\n4540\n5940\n4320\nENDCHAR\nSTARTCHAR U_3471\nENCODING 13425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2280\n2100\n5FE0\n4540\nDB00\n4100\n5FE0\n4380\n4540\n4920\nENDCHAR\nSTARTCHAR U_3472\nENCODING 13426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2100\n6FE0\nAAA0\n2FE0\n2920\n2FE0\n2920\n2920\n2960\nENDCHAR\nSTARTCHAR U_3473\nENCODING 13427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n2FE0\n5AA0\nCFA0\n4260\n4400\n4FE0\n5AA0\n4FA0\n4220\n4C60\nENDCHAR\nSTARTCHAR U_3474\nENCODING 13428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\n2FC0\n4080\nDFE0\n5220\n4FC0\n4A40\n5FC0\n4480\n4300\n5CE0\nENDCHAR\nSTARTCHAR U_3475\nENCODING 13429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n17E0\n2400\n3500\n6DE0\nA680\n2C80\n37E0\n2480\n2940\n3220\nENDCHAR\nSTARTCHAR U_3476\nENCODING 13430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n2FE0\n5000\nCFC0\n4000\n7FC0\n5540\n4440\n5FC0\n4440\n5560\nENDCHAR\nSTARTCHAR U_3477\nENCODING 13431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n3280\n5EE0\nC080\n5EE0\n5200\n5E80\n52E0\n5E80\n52A0\n56E0\nENDCHAR\nSTARTCHAR U_3478\nENCODING 13432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2100\n67C0\nA440\n3FE0\n2040\n2F40\n2940\n2F40\n20C0\nENDCHAR\nSTARTCHAR U_3479\nENCODING 13433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1B00\nE0E0\n3F80\n4440\n7FC0\n4440\n7FC0\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_347A\nENCODING 13434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\n5880\nCFE0\n4880\n4FE0\n5FC0\n4880\n49E0\n5020\n60C0\nENDCHAR\nSTARTCHAR U_347B\nENCODING 13435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2A20\n4480\nD560\n43C0\n4C00\n4100\n4920\n4920\n4FE0\nENDCHAR\nSTARTCHAR U_347C\nENCODING 13436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2360\n5FA0\nD540\n55A0\n5F00\n55E0\n55A0\n5FA0\n40A0\n40E0\nENDCHAR\nSTARTCHAR U_347D\nENCODING 13437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\n2FE0\n6820\nA7C0\n2440\n27C0\n2100\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_347E\nENCODING 13438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2DE0\n5240\nC980\n5E00\n4100\n5FE0\n4000\n4FC0\n4840\n4FC0\nENDCHAR\nSTARTCHAR U_347F\nENCODING 13439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2A80\n2540\n4FE0\nC920\n4FE0\n4920\n4FE0\n4100\n4FE0\n4540\nENDCHAR\nSTARTCHAR U_3480\nENCODING 13440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2440\n6FE0\nA920\n2FE0\n2920\n2BA0\n2AA0\n2BA0\n2860\nENDCHAR\nSTARTCHAR U_3481\nENCODING 13441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\n6FE0\nA920\n2FE0\n2AA0\n2FE0\n2920\n2FE0\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_3482\nENCODING 13442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n1EE0\n2440\n6120\nAFE0\n2140\n2FE0\n2640\n2BC0\n2240\n23C0\nENDCHAR\nSTARTCHAR U_3483\nENCODING 13443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2FE0\n4100\nDE80\n4080\n5E80\n5280\n5E80\n5280\n5EA0\n7340\nENDCHAR\nSTARTCHAR U_3484\nENCODING 13444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n28C0\n28A0\n4E80\nCBE0\n5680\n6D40\n4A20\n5420\n4000\n4D40\n52A0\nENDCHAR\nSTARTCHAR U_3485\nENCODING 13445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2200\n6DC0\nA340\n2E40\n2180\n2E00\n22A0\n2640\n2B20\nENDCHAR\nSTARTCHAR U_3486\nENCODING 13446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n3CE0\n4FC0\nC840\n4FC0\n5EE0\n4220\n5BA0\n4220\n4AA0\n5760\nENDCHAR\nSTARTCHAR U_3487\nENCODING 13447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n2FE0\n5540\nD540\n7FE0\n5540\n5540\n7FE0\n4000\n5540\n62A0\nENDCHAR\nSTARTCHAR U_3488\nENCODING 13448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3E80\n2480\n7FE0\nD540\n5F40\n5540\n5D40\n5480\n7F40\n4540\n4620\nENDCHAR\nSTARTCHAR U_3489\nENCODING 13449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\n5FE0\nD020\n47C0\n4440\n47C0\n4100\n5FE0\n4100\n4940\nENDCHAR\nSTARTCHAR U_348A\nENCODING 13450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2AA0\n5BA0\nCAA0\n4AA0\n5560\n4440\n5660\n5540\n5540\n7FE0\nENDCHAR\nSTARTCHAR U_348B\nENCODING 13451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A60\n3F80\n4A80\nCEE0\n4AA0\n4EA0\n4AA0\n5FA0\n40A0\n4AA0\n5120\nENDCHAR\nSTARTCHAR U_348C\nENCODING 13452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n3540\n4EE0\nC440\n4AA0\n5FE0\n5020\n4780\n4480\n44A0\n58E0\nENDCHAR\nSTARTCHAR U_348D\nENCODING 13453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2480\n4FC0\nC880\n5320\n5FE0\n4480\n4D00\n4240\n5FE0\n4940\n5320\nENDCHAR\nSTARTCHAR U_348E\nENCODING 13454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F80\n2200\n5FC0\nC500\n4880\n5DE0\n4500\n5DC0\n4500\n5DC0\n4500\nENDCHAR\nSTARTCHAR U_348F\nENCODING 13455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n54A0\nCFC0\n4480\n5FE0\n4480\n5FE0\n4B40\n5020\n4780\nENDCHAR\nSTARTCHAR U_3490\nENCODING 13456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2EE0\n5540\nC800\n4FE0\n5020\n4F20\n4920\n4F20\n4920\n4F60\nENDCHAR\nSTARTCHAR U_3491\nENCODING 13457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n3140\n5A40\nD7E0\n5A40\n57E0\n5240\n57E0\n5A40\n5BE0\n5FE0\nENDCHAR\nSTARTCHAR U_3492\nENCODING 13458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2AA0\n46C0\nDFE0\n4440\n4FE0\n4100\n47C0\n4100\n5FE0\n4940\nENDCHAR\nSTARTCHAR U_3493\nENCODING 13459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2BE0\n4080\nDBE0\n4940\n4BE0\n5080\n4BE0\n4880\n4880\n57E0\nENDCHAR\nSTARTCHAR U_3494\nENCODING 13460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n4FE0\nC400\n4FE0\n5220\n4FA0\n4AA0\n4FA0\n4260\n5FE0\nENDCHAR\nSTARTCHAR U_3495\nENCODING 13461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n4940\nCBE0\n5540\n49E0\n4940\n55E0\n4D40\n45E0\n5900\nENDCHAR\nSTARTCHAR U_3496\nENCODING 13462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2480\n3FE0\n4480\nCFC0\n4A40\n4FC0\n4A40\n5FE0\n52A0\n57A0\n5060\nENDCHAR\nSTARTCHAR U_3497\nENCODING 13463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FC0\n4480\nC780\n4480\n5FE0\n57A0\n4200\n4FC0\n4200\n5FE0\nENDCHAR\nSTARTCHAR U_3498\nENCODING 13464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3EE0\n34A0\n5EA0\nD240\n5E40\n54A0\n5F20\n4100\n4FE0\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_3499\nENCODING 13465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n2BE0\n5220\nD7E0\n4A20\n4BE0\n5480\n4BE0\n42A0\n56A0\n5080\nENDCHAR\nSTARTCHAR U_349A\nENCODING 13466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\n5FE0\nC100\n5FE0\n4040\n5FE0\n4040\n4FC0\n5520\n67A0\nENDCHAR\nSTARTCHAR U_349B\nENCODING 13467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2220\n4AA0\nC660\n4AA0\n4900\n5FE0\n4900\n4FE0\n4900\n4FE0\nENDCHAR\nSTARTCHAR U_349C\nENCODING 13468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E60\n2BA0\n4E60\nCBA0\n4CE0\n4AA0\n4AA0\n5FE0\n4000\n4840\n5020\nENDCHAR\nSTARTCHAR U_349D\nENCODING 13469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n3DC0\n4500\nDFC0\n5540\n5FC0\n4280\n5FE0\n5940\n55A0\n62C0\nENDCHAR\nSTARTCHAR U_349E\nENCODING 13470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2FE0\n4500\nDFE0\n4900\n4FE0\n4900\n5FE0\n54A0\n57A0\n5060\nENDCHAR\nSTARTCHAR U_349F\nENCODING 13471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n4900\nCFC0\n4900\n4FE0\n5520\n5560\n4E40\n5980\n4C60\nENDCHAR\nSTARTCHAR U_34A0\nENCODING 13472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n16E0\n24A0\n2F40\n7AA0\nA6C0\n2A80\n3EE0\n2280\n2EE0\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_34A1\nENCODING 13473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n2C80\n22E0\n6E40\n6080\nAEE0\n3440\n2EC0\n2560\n2A40\n2EC0\nENDCHAR\nSTARTCHAR U_34A2\nENCODING 13474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2700\n2A80\n5FC0\n7560\nDFC0\n4000\n5FC0\n5540\n5FC0\n5540\n50C0\nENDCHAR\nSTARTCHAR U_34A3\nENCODING 13475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n5540\nD7E0\n5D40\n55E0\n5540\n55E0\n5280\n5620\n6BC0\nENDCHAR\nSTARTCHAR U_34A4\nENCODING 13476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2880\n4F80\n7FE0\nC080\n7FE0\n5540\n5DC0\n5540\n7FE0\n4440\nENDCHAR\nSTARTCHAR U_34A5\nENCODING 13477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6AA0\n7FE0\n6AA0\nFFE0\n6AA0\n7FE0\n5FC0\n5040\n5FC0\n4880\n7FE0\nENDCHAR\nSTARTCHAR U_34A6\nENCODING 13478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F80\n4A80\n4F80\nCA80\n7FE0\n6AA0\n7FE0\n6AA0\n5FC0\n4200\n7FE0\nENDCHAR\nSTARTCHAR U_34A7\nENCODING 13479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n5D40\n4B00\nD5E0\n5D40\n49E0\n5D40\n55E0\n5540\n5DE0\n5500\nENDCHAR\nSTARTCHAR U_34A8\nENCODING 13480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3A60\n57A0\n5DE0\nD6A0\n5DE0\n4680\n5FE0\n4D40\n5720\n4440\n47C0\nENDCHAR\nSTARTCHAR U_34A9\nENCODING 13481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2480\n5FE0\n4540\nDA80\n4540\n5FE0\n5540\n5FE0\n4440\n5EE0\nENDCHAR\nSTARTCHAR U_34AA\nENCODING 13482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0600\n1980\n6060\nFBC0\n4200\n7BC0\n2000\nB7E0\nA140\nBAA0\nC580\nENDCHAR\nSTARTCHAR U_34AB\nENCODING 13483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n3FC0\n2000\n3F80\n2000\nFFE0\n1200\n1200\n1200\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_34AC\nENCODING 13484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n73E0\n0080\n0080\nFBE0\n5080\n5080\n53E0\n5000\n8820\n87E0\nENDCHAR\nSTARTCHAR U_34AD\nENCODING 13485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFBE0\n8A20\n8A20\nFBE0\n5140\n5140\n5140\n5A40\n9240\n8460\nENDCHAR\nSTARTCHAR U_34AE\nENCODING 13486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n03C0\n7100\n06A0\nF9C0\n5280\n55E0\n52A0\n5180\n8820\n87E0\nENDCHAR\nSTARTCHAR U_34AF\nENCODING 13487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2EE0\nB440\n6FE0\n2540\nFFE0\n5540\n5FE0\n5900\n57C0\n8100\nENDCHAR\nSTARTCHAR U_34B0\nENCODING 13488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3800\n0400\n0A00\n1100\n2080\nC060\n3F80\n0400\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_34B1\nENCODING 13489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\n0400\n0A00\n1100\n2480\nCF60\n1100\n6D00\n0200\n0C00\n7000\nENDCHAR\nSTARTCHAR U_34B2\nENCODING 13490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\n0400\n0A00\n3180\nC060\n3F80\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_34B3\nENCODING 13491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8420\n8420\nC620\nA520\nA520\nD6A0\nCE60\n8420\n84A0\n8040\nENDCHAR\nSTARTCHAR U_34B4\nENCODING 13492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\n0600\n1900\n60C0\n8420\n2480\n2480\n3F80\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_34B5\nENCODING 13493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1000\n7F80\n4080\n7F80\n4080\n7F80\n0000\n2100\n40C0\n8040\nENDCHAR\nSTARTCHAR U_34B6\nENCODING 13494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n1100\n1100\n2080\nC860\n1000\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_34B7\nENCODING 13495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2480\n2480\n2A80\n3280\n2080\nFFE0\n0000\n1100\n60C0\nENDCHAR\nSTARTCHAR U_34B8\nENCODING 13496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1100\nFFE0\n0400\n0840\n7480\n0B00\n7280\n0640\nFA20\n0600\nENDCHAR\nSTARTCHAR U_34B9\nENCODING 13497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFBE0\n8A20\nAAA0\nAAA0\nAAA0\nFFE0\n5140\n8A20\nENDCHAR\nSTARTCHAR U_34BA\nENCODING 13498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9120\n8A20\nFFE0\n8420\nA420\nAA20\nB120\nA020\nBFA0\n8060\nENDCHAR\nSTARTCHAR U_34BB\nENCODING 13499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n5F40\n4040\n3F80\n2080\n3F80\n2080\n3F80\n1120\n61E0\nENDCHAR\nSTARTCHAR U_34BC\nENCODING 13500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1F00\n0400\n7FC0\n6640\n5540\n6EC0\n4440\n44C0\nENDCHAR\nSTARTCHAR U_34BD\nENCODING 13501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n5F40\n1500\n3F80\n0800\n7FC0\n2080\nDF60\n1140\n1FC0\nENDCHAR\nSTARTCHAR U_34BE\nENCODING 13502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n5F40\n2400\nF7E0\n4A80\n77E0\n52A0\n52A0\n5200\nB1E0\nENDCHAR\nSTARTCHAR U_34BF\nENCODING 13503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n5F40\n2180\nFBE0\nDE80\nABE0\nFA80\nABE0\nFA80\n8BE0\nENDCHAR\nSTARTCHAR U_34C0\nENCODING 13504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n8440\n0400\n0600\n0500\n0480\n0480\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_34C1\nENCODING 13505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FE0\n4040\n9100\n1080\n2040\n4040\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_34C2\nENCODING 13506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\nB920\n07E0\nF940\n5240\n5440\n5280\n5100\n56E0\n8FE0\nENDCHAR\nSTARTCHAR U_34C3\nENCODING 13507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9020\n78C0\n0700\n7900\n0100\n79C0\n0700\n7900\n4920\n78E0\nENDCHAR\nSTARTCHAR U_34C4\nENCODING 13508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n4BE0\nFAA0\n4AA0\n9480\nFC80\n20C0\nDCC0\n3140\n4940\nF660\nENDCHAR\nSTARTCHAR U_34C5\nENCODING 13509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n4FE0\n2100\n2100\n0100\n0100\n2100\nC100\n4100\n4100\n4300\nENDCHAR\nSTARTCHAR U_34C6\nENCODING 13510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n2500\n0880\n3060\n0480\n4500\n4600\nC400\n4420\n47E0\nENDCHAR\nSTARTCHAR U_34C7\nENCODING 13511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n8F00\n4200\n0200\n1FE0\n0200\n2200\n4500\n4480\n8840\n1020\nENDCHAR\nSTARTCHAR U_34C8\nENCODING 13512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n9FE0\n4200\n0200\n0400\n0FC0\n1440\n4440\n4440\n87C0\n0400\nENDCHAR\nSTARTCHAR U_34C9\nENCODING 13513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n8F00\n4200\n0200\n1FE0\n0200\n2FC0\n4840\n4840\n8FC0\n0800\nENDCHAR\nSTARTCHAR U_34CA\nENCODING 13514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n2BA0\n0820\n0BA0\n0AA0\n2AA0\nCAA0\n4BA0\n4820\n4860\nENDCHAR\nSTARTCHAR U_34CB\nENCODING 13515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8480\n4480\n2FC0\n2480\n0480\n0480\n3FE0\nC000\n4480\n4840\n5020\nENDCHAR\nSTARTCHAR U_34CC\nENCODING 13516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n4200\n2500\n0880\n3060\n0F80\n2200\nCF80\n4200\n4200\n5FE0\nENDCHAR\nSTARTCHAR U_34CD\nENCODING 13517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5FE0\n2400\n2480\n08C0\n0F40\n2500\nC500\n4500\n4920\n50E0\nENDCHAR\nSTARTCHAR U_34CE\nENCODING 13518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n4040\n2FE0\n2040\n1FE0\n1020\n2FC0\nC440\n4280\n4100\n4EE0\nENDCHAR\nSTARTCHAR U_34CF\nENCODING 13519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n5020\n54A0\n1860\n1020\n57A0\n54A0\nD4A0\n57A0\n5020\n5060\nENDCHAR\nSTARTCHAR U_34D0\nENCODING 13520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n47C0\n2100\n2FE0\n0440\n0440\n2960\nC100\n47C0\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_34D1\nENCODING 13521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4FE0\n2100\n2FE0\n0440\n0FE0\n2100\nCFE0\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_34D2\nENCODING 13522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n22E0\n1F00\nE220\n41E0\n0400\n1B00\nE4E0\n2480\n4540\n0C80\nENDCHAR\nSTARTCHAR U_34D3\nENCODING 13523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n4FE0\n2100\n2FE0\n0AA0\n0FE0\n2920\nCFE0\n4920\n4920\n4960\nENDCHAR\nSTARTCHAR U_34D4\nENCODING 13524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4E40\n2BE0\n2E40\n0A40\n0F40\n2AC0\nDE40\n4640\n4A40\n56C0\nENDCHAR\nSTARTCHAR U_34D5\nENCODING 13525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n4FE0\n2880\n2F80\n0AA0\n0FA0\n2A40\nCA40\n4D40\n50E0\n5320\nENDCHAR\nSTARTCHAR U_34D6\nENCODING 13526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FC0\n5240\n5FC0\n1240\n1FC0\n0A80\n3FE0\nCA80\n5FC0\n4200\n5FC0\nENDCHAR\nSTARTCHAR U_34D7\nENCODING 13527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n85E0\n5EA0\n44A0\n1EA0\n0520\n1E60\n44A0\nCF00\n4240\n5FA0\n4A80\nENDCHAR\nSTARTCHAR U_34D8\nENCODING 13528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n5F40\n4840\n77C0\n5540\n7E40\n5F40\n4440\n5F40\n8460\nBFA0\nENDCHAR\nSTARTCHAR U_34D9\nENCODING 13529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n8420\nBFA0\n9120\n8A20\n8A20\n8420\n8A20\n9120\nA0A0\nFFE0\nENDCHAR\nSTARTCHAR U_34DA\nENCODING 13530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0020\n7C20\n1120\n1120\n1120\n1120\n1520\n1920\nF020\n40A0\n0040\nENDCHAR\nSTARTCHAR U_34DB\nENCODING 13531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n03E0\n7D20\n1120\n1120\n1120\n1520\nF920\n4220\n04A0\n1840\nENDCHAR\nSTARTCHAR U_34DC\nENCODING 13532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n4920\n9120\nE120\n2120\n4120\n8920\nF620\n04A0\n1840\nENDCHAR\nSTARTCHAR U_34DD\nENCODING 13533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2820\n2920\n7D20\n2920\n2920\n2920\n7D20\n2920\n2820\n48A0\n8840\nENDCHAR\nSTARTCHAR U_34DE\nENCODING 13534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3920\nE120\n2120\n3920\nE120\n2120\n3920\nE220\n24A0\n2840\nENDCHAR\nSTARTCHAR U_34DF\nENCODING 13535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0820\n7E20\n4AA0\n48A0\n7EA0\n62A0\n54A0\n48A0\n5420\nA220\n8060\nENDCHAR\nSTARTCHAR U_34E0\nENCODING 13536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n2020\n3D20\n2120\n2120\n2120\nFD20\n8520\n8420\nFCE0\n8440\nENDCHAR\nSTARTCHAR U_34E1\nENCODING 13537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6020\n4020\n7EA0\n90A0\n10A0\nFEA0\n10A0\n92A0\n9220\n92E0\nFE40\nENDCHAR\nSTARTCHAR U_34E2\nENCODING 13538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n4020\n7EA0\nC4A0\n24A0\n18A0\n66A0\n82A0\n7C20\n44E0\n7C40\nENDCHAR\nSTARTCHAR U_34E3\nENCODING 13539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n1020\n2920\n4520\n8320\n7D20\n0120\n7D20\n4420\n44E0\n7C20\nENDCHAR\nSTARTCHAR U_34E4\nENCODING 13540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n1020\n10A0\nFEA0\n10A0\n7CA0\n00A0\n7CA0\n4420\n44E0\n7C20\nENDCHAR\nSTARTCHAR U_34E5\nENCODING 13541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n2420\nAD20\n7120\n2120\nFD20\n0520\nFD20\n0420\nFDE0\n0040\nENDCHAR\nSTARTCHAR U_34E6\nENCODING 13542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC20\n1020\n2120\n4120\nFD20\n8520\n8520\nFD20\n8420\n85E0\nFC40\nENDCHAR\nSTARTCHAR U_34E7\nENCODING 13543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n1820\n24A0\n52A0\n88A0\n7CA0\n08A0\n10A0\n7C20\n44A0\n7C40\nENDCHAR\nSTARTCHAR U_34E8\nENCODING 13544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n1020\nFEA0\n10A0\n54A0\n54A0\nBAA0\n92A0\n2820\n44E0\n8440\nENDCHAR\nSTARTCHAR U_34E9\nENCODING 13545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n3C20\n48A0\n90A0\n7EA0\n52A0\n7EA0\n52A0\n7EA0\n5220\n9660\nENDCHAR\nSTARTCHAR U_34EA\nENCODING 13546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n8920\nF920\n8920\nF920\n8120\nA120\n9120\nEA20\n8C60\nENDCHAR\nSTARTCHAR U_34EB\nENCODING 13547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFE20\n28A0\n44A0\n82A0\n7CA0\n28A0\nFEA0\n28A0\n2820\n4860\nENDCHAR\nSTARTCHAR U_34EC\nENCODING 13548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n5420\nFEA0\n10A0\nFEA0\n28A0\n44A0\nFEA0\n24A0\n2420\nCC60\nENDCHAR\nSTARTCHAR U_34ED\nENCODING 13549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n44A0\n7CA0\n44A0\n7CA0\n20A0\n7EA0\nD2A0\n6AA0\n7A20\n0660\nENDCHAR\nSTARTCHAR U_34EE\nENCODING 13550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\n9220\nBAA0\n92A0\nFEA0\n82A0\nBAA0\nAAA0\nBA20\n8220\n8660\nENDCHAR\nSTARTCHAR U_34EF\nENCODING 13551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A20\n2A20\n5420\nA8A0\n54A0\n2AA0\nFEA0\n92A0\nFEA0\n9220\nFE60\nENDCHAR\nSTARTCHAR U_34F0\nENCODING 13552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF20\n1020\n7CA0\n54A0\nD6A0\nFEA0\nD6A0\nD6A0\nFE20\n8220\nFE60\nENDCHAR\nSTARTCHAR U_34F1\nENCODING 13553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n2820\nC6A0\n78A0\n02A0\nE2A0\nAAA0\nEAA0\nAA20\nE220\nA660\nENDCHAR\nSTARTCHAR U_34F2\nENCODING 13554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E20\n7020\n40A0\n7EA0\n42A0\n7EA0\n40A0\n7EA0\n6A20\n7E20\nAA60\nENDCHAR\nSTARTCHAR U_34F3\nENCODING 13555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n4420\n7CA0\n44A0\n7CA0\n00A0\nFEA0\n10A0\n5C20\n5020\nBE60\nENDCHAR\nSTARTCHAR U_34F4\nENCODING 13556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n2020\nFEA0\nAAA0\nAAA0\nAAA0\n10A0\nFEA0\n1020\n28A0\nC640\nENDCHAR\nSTARTCHAR U_34F5\nENCODING 13557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE20\nAA20\nEEA0\n00A0\n7CA0\n00A0\nFEA0\n20A0\n3C20\n0420\n3860\nENDCHAR\nSTARTCHAR U_34F6\nENCODING 13558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E20\nEA20\n4AA0\nEAA0\n4AA0\nF6A0\n50A0\nFEA0\n2820\n4420\n8260\nENDCHAR\nSTARTCHAR U_34F7\nENCODING 13559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n7C20\n44A0\n7CA0\n44A0\n7CA0\n10A0\nFEA0\n1020\n5420\n9260\nENDCHAR\nSTARTCHAR U_34F8\nENCODING 13560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE20\nAA20\nAAA0\nEEA0\n28A0\nEEA0\n82A0\nEEA0\n2820\n2820\nFE60\nENDCHAR\nSTARTCHAR U_34F9\nENCODING 13561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F20\n4820\n6AA0\n5CA0\n48A0\n76A0\n48A0\n6AA0\n5C20\n4820\nB660\nENDCHAR\nSTARTCHAR U_34FA\nENCODING 13562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E20\n0820\n7EA0\n4AA0\n7CA0\n48A0\n7EA0\n54A0\n5420\n4820\nB660\nENDCHAR\nSTARTCHAR U_34FB\nENCODING 13563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\nAA20\nAAA0\nFEA0\n00A0\nFEA0\n10A0\n5CA0\n5020\n5E20\nF060\nENDCHAR\nSTARTCHAR U_34FC\nENCODING 13564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFF20\n38A0\n54A0\n92A0\n28A0\nC6A0\n92A0\n5420\n9220\n3060\nENDCHAR\nSTARTCHAR U_34FD\nENCODING 13565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9220\nFE20\n10A0\nFEA0\n82A0\n7CA0\n00A0\nFEA0\n1020\n5420\n9260\nENDCHAR\nSTARTCHAR U_34FE\nENCODING 13566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E20\n4220\n7EA0\n6AA0\n5CA0\n6AA0\n48A0\n5CA0\n6820\nBEA0\n8840\nENDCHAR\nSTARTCHAR U_34FF\nENCODING 13567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3C20\n0820\nFFA0\n1CA0\n2AA0\nD5A0\n2AA0\n6BA0\n9C20\n2AA0\n1860\nENDCHAR\nSTARTCHAR U_3500\nENCODING 13568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3E20\n2220\n3EA0\n08A0\nFFA0\n3EA0\n22A0\n3EA0\n0820\n2AA0\n5960\nENDCHAR\nSTARTCHAR U_3501\nENCODING 13569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE920\nA6A0\n4320\nBD20\n00A0\n7EA0\n42A0\n7EA0\n4220\n24A0\nFF40\nENDCHAR\nSTARTCHAR U_3502\nENCODING 13570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9220\n5420\nFEA0\n54A0\n92A0\n54A0\n64A0\nBEA0\n54A0\n5F20\n8460\nENDCHAR\nSTARTCHAR U_3503\nENCODING 13571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n9120\nF7E0\n4520\n97E0\nF400\nAFE0\n0000\nFFE0\n0820\n7060\nENDCHAR\nSTARTCHAR U_3504\nENCODING 13572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\n2820\nFEA0\nAAA0\nFEA0\n10A0\n54A0\nFEA0\n10A0\n5420\n9260\nENDCHAR\nSTARTCHAR U_3505\nENCODING 13573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n7C20\n1420\nFEA0\n14A0\n7EA0\n52A0\n7EA0\n5220\n7620\nB260\nENDCHAR\nSTARTCHAR U_3506\nENCODING 13574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0020\nEE20\nAAA0\nEEA0\n55A0\nAAA0\n7CA0\n44A0\n7C20\n44A0\n7C40\nENDCHAR\nSTARTCHAR U_3507\nENCODING 13575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEA20\n2CA0\nABA0\n44A0\nEEA0\n2AA0\nF1A0\n8EA0\nEA20\n24A0\n6B40\nENDCHAR\nSTARTCHAR U_3508\nENCODING 13576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2820\nFE20\n28A0\n00A0\n28A0\nEEA0\n28A0\nEEA0\n2820\nEE20\n2860\nENDCHAR\nSTARTCHAR U_3509\nENCODING 13577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E20\n4220\n7EA0\n5CA0\n6AA0\n7EA0\n48A0\n7E20\nAA20\nBEA0\nA240\nENDCHAR\nSTARTCHAR U_350A\nENCODING 13578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFE20\n00A0\nFEA0\nBAA0\n82A0\nFEA0\n44A0\n7C20\n4420\nFE60\nENDCHAR\nSTARTCHAR U_350B\nENCODING 13579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF420\nA720\nF420\n98A0\nF0A0\nA7A0\nF0A0\n00A0\n7F20\n5520\nFFE0\nENDCHAR\nSTARTCHAR U_350C\nENCODING 13580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE20\nA220\nEAA0\nA4A0\nEAA0\n30A0\n06A0\nF820\n5420\nBAA0\n1060\nENDCHAR\nSTARTCHAR U_350D\nENCODING 13581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n7720\nAAA0\n7EA0\n5AA0\n5AA0\n7EA0\n2420\nFE20\n24A0\n4440\nENDCHAR\nSTARTCHAR U_350E\nENCODING 13582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA880\nFBE0\n4140\nFBE0\n8880\nFBE0\n8880\nF880\n7FE0\n0820\n7060\nENDCHAR\nSTARTCHAR U_350F\nENCODING 13583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF20\n2020\n7EA0\nA2A0\n3EA0\n00A0\nFFA0\n44A0\nFF20\n5520\n7760\nENDCHAR\nSTARTCHAR U_3510\nENCODING 13584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7BA0\nA520\nFEA0\n28A0\nEEA0\n28A0\nEEA0\n2820\nEE20\nFE60\nENDCHAR\nSTARTCHAR U_3511\nENCODING 13585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFBE0\n5100\n8080\nFBE0\n8940\nFBE0\n8880\nFFE0\n1020\nE060\nENDCHAR\nSTARTCHAR U_3512\nENCODING 13586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9220\nFE20\n48A0\nFEA0\n48A0\n7EA0\n48A0\nFEA0\nBA20\nEE20\nBA60\nENDCHAR\nSTARTCHAR U_3513\nENCODING 13587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C80\nF080\n13E0\n10A0\nFCA0\n10A0\n10A0\n10A0\n10A0\n1120\n1660\nENDCHAR\nSTARTCHAR U_3514\nENCODING 13588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFDE0\n2520\n2520\n4520\n8DE0\n0000\n3F80\n4040\n4040\n3F80\nENDCHAR\nSTARTCHAR U_3515\nENCODING 13589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7D00\n83E0\n7D20\n0120\nF920\n0920\n0920\n0A20\n0A20\n0460\nENDCHAR\nSTARTCHAR U_3516\nENCODING 13590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFDE0\n2520\n2520\n2520\nCDE0\n0000\n7FC0\n0040\n0040\n0040\nENDCHAR\nSTARTCHAR U_3517\nENCODING 13591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2880\nFE80\n2BE0\nFEA0\nA8A0\nFEA0\n2AA0\n2AA0\n2EA0\n4960\nENDCHAR\nSTARTCHAR U_3518\nENCODING 13592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA900\nA900\nAFE0\nF920\n2120\nA920\nA920\nAA20\nFAA0\n8C40\nENDCHAR\nSTARTCHAR U_3519\nENCODING 13593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8480\n4880\nFC80\n4BE0\n48A0\n48A0\nFCA0\n4920\n4920\n4920\n8A60\nENDCHAR\nSTARTCHAR U_351A\nENCODING 13594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0840\n3040\n5080\n1480\nFBE0\n1120\n7920\n4A40\n3A40\n24C0\n0000\nENDCHAR\nSTARTCHAR U_351B\nENCODING 13595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n2080\n3F80\n0400\nFFE0\n0420\n0820\nF0C0\nENDCHAR\nSTARTCHAR U_351C\nENCODING 13596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\nE500\n5500\n2BE0\n7D20\n0920\n1120\n1D20\nF220\n1220\n34C0\nENDCHAR\nSTARTCHAR U_351D\nENCODING 13597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\n1080\n11E0\nFEA0\n92A0\nDAA0\nB6A0\nDAA0\n92A0\n9320\n9640\nENDCHAR\nSTARTCHAR U_351E\nENCODING 13598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C80\nE080\n11E0\nFEA0\n10A0\n54A0\nD6A0\n54A0\nD6A0\n1120\n1140\nENDCHAR\nSTARTCHAR U_351F\nENCODING 13599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n7FC0\n9140\n7FC0\n1140\nFE60\n0400\nFFE0\n0420\n1820\nE060\nENDCHAR\nSTARTCHAR U_3520\nENCODING 13600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n8480\nFC80\n87E0\nFCA0\n40A0\n7CA0\n9520\nAD20\nF520\n0A40\nENDCHAR\nSTARTCHAR U_3521\nENCODING 13601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nFE80\nABE0\n92A0\nFEA0\n00A0\n88A0\nED20\n8920\nA920\nCE60\nENDCHAR\nSTARTCHAR U_3522\nENCODING 13602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n9440\n63E0\n62A0\nF3E0\n0A00\nABE0\n0400\nFFE0\n1020\n60C0\nENDCHAR\nSTARTCHAR U_3523\nENCODING 13603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n5480\n7DE0\n54A0\n7CA0\n00A0\nFEA0\nAAA0\nFEA0\nAAA0\nFF60\nENDCHAR\nSTARTCHAR U_3524\nENCODING 13604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFE80\n8280\n7DE0\n54A0\nFEA0\n54A0\nD6A0\n7CA0\n5520\n7E60\nENDCHAR\nSTARTCHAR U_3525\nENCODING 13605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\nAA80\nFE80\n49E0\nAEA0\nE8A0\nA6A0\nE8A0\nAEA0\nE8A0\nA760\nENDCHAR\nSTARTCHAR U_3526\nENCODING 13606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\nFC80\n2080\nFBE0\n20A0\nFCA0\n50A0\nFD20\n6920\n5120\n6A60\nENDCHAR\nSTARTCHAR U_3527\nENCODING 13607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3C80\n2080\nFE80\nA5E0\nF8A0\nA0A0\nBCA0\nA4A0\nBCA0\nA520\n7E60\nENDCHAR\nSTARTCHAR U_3528\nENCODING 13608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8A20\n3BA0\n0A20\n7BE0\n0020\n1F20\n1120\n1F20\n1120\n2360\nENDCHAR\nSTARTCHAR U_3529\nENCODING 13609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4420\nBFA0\n0420\n7FA0\n1220\n7FA0\n54A0\nFFA0\n0060\nENDCHAR\nSTARTCHAR U_352A\nENCODING 13610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4820\n8F20\n0820\n7FA0\n55A0\n4AA0\n6DA0\n52A0\n7FE0\nENDCHAR\nSTARTCHAR U_352B\nENCODING 13611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\nFFE0\n0800\n0800\n1420\n14C0\n2700\n2400\n4420\n83E0\nENDCHAR\nSTARTCHAR U_352C\nENCODING 13612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n7E00\n4020\n3FE0\n2080\n3F80\n2080\n3F80\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_352D\nENCODING 13613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n87C0\n8440\n87C0\nF440\n87C0\n8000\n9FE0\n8100\nA5C0\nC500\n1BE0\nENDCHAR\nSTARTCHAR U_352E\nENCODING 13614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5240\nFA60\n5540\nFF40\nA860\nFF00\n2540\nFF60\n2540\n5740\n8560\nENDCHAR\nSTARTCHAR U_352F\nENCODING 13615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8000\n9F80\n9080\nA060\nDF80\n9080\n9080\n9F80\n8000\nFFE0\nENDCHAR\nSTARTCHAR U_3530\nENCODING 13616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9100\n9100\n9D00\nA580\nD540\n8920\n9100\nA100\nC100\nFFE0\nENDCHAR\nSTARTCHAR U_3531\nENCODING 13617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8A00\nB2C0\nA240\nBAC0\nA240\nBFC0\n8200\n8D80\nB040\nFFE0\nENDCHAR\nSTARTCHAR U_3532\nENCODING 13618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9100\nA900\nD3C0\nB940\nA940\nB940\nA140\nA960\nB200\nFFE0\nENDCHAR\nSTARTCHAR U_3533\nENCODING 13619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9000\nAB80\nD280\nBA80\nAA80\nBA80\nA2A0\nAAA0\nB460\nFFE0\nENDCHAR\nSTARTCHAR U_3534\nENCODING 13620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA480\nBF80\nA480\nBF80\n8A00\nBF80\n8A00\nBFC0\n9080\nFFE0\nENDCHAR\nSTARTCHAR U_3535\nENCODING 13621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA540\nBDC0\nA100\nBDC0\n8900\n9F80\n8900\nBFC0\n9080\nFFE0\nENDCHAR\nSTARTCHAR U_3536\nENCODING 13622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9100\nFDC0\nAB40\nFC80\nAB60\nB9C0\n9140\nFDC0\n9220\nFFE0\nENDCHAR\nSTARTCHAR U_3537\nENCODING 13623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8000\nBFC0\n8400\nBFC0\nA440\nAA40\nB140\nA0C0\n8000\nFFE0\nENDCHAR\nSTARTCHAR U_3538\nENCODING 13624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8040\nBF80\nA200\nAFC0\nAA40\nAF80\nAA00\nABA0\nD4A0\nFFE0\nENDCHAR\nSTARTCHAR U_3539\nENCODING 13625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n27E0\nF120\n2120\n2120\n2120\n2220\n2220\n24A0\n2840\nENDCHAR\nSTARTCHAR U_353A\nENCODING 13626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0400\n2480\n2080\nFBE0\n2080\n2080\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_353B\nENCODING 13627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0200\n0400\n1D80\nE460\n0400\n0000\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_353C\nENCODING 13628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nF7E0\n2C80\n37E0\nE480\n27E0\n2480\n67E0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_353D\nENCODING 13629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0F80\n0800\n0800\nFFE0\n8020\n9F20\n9120\n9F20\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_353E\nENCODING 13630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n4080\n4080\n4080\n4080\n4280\n4100\n4000\n4020\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_353F\nENCODING 13631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2080\n2080\n2080\n2080\n2080\n2080\n2780\n3880\n0080\n0080\nENDCHAR\nSTARTCHAR U_3540\nENCODING 13632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4440\n7FC0\n4440\n7FC0\n0000\n7F80\n4080\n4120\n3FE0\nENDCHAR\nSTARTCHAR U_3541\nENCODING 13633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n85E0\n4920\n3120\nCD20\n2120\nFD20\n2120\n5120\n5160\nA500\n7D00\nENDCHAR\nSTARTCHAR U_3542\nENCODING 13634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4200\n4500\n58C0\n6020\n4400\n4200\n5FC0\n4080\n4100\n8200\nENDCHAR\nSTARTCHAR U_3543\nENCODING 13635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n5FE0\n4480\n4480\n5FE0\n4480\n4480\n4480\n4880\n9080\nENDCHAR\nSTARTCHAR U_3544\nENCODING 13636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n5FE0\n4400\n4880\n5F00\n4200\n4400\n4840\n93E0\n9C20\nENDCHAR\nSTARTCHAR U_3545\nENCODING 13637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n5FC0\n5240\n5240\n5FC0\n5240\n5FC0\n4200\n4200\n8200\nENDCHAR\nSTARTCHAR U_3546\nENCODING 13638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4200\n4200\n7FE0\n4200\n4200\n5FC0\n5040\n5040\n5040\n9FC0\nENDCHAR\nSTARTCHAR U_3547\nENCODING 13639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4400\n4200\n5FC0\n4000\n4880\n4880\n4880\n4500\n4500\nBFE0\nENDCHAR\nSTARTCHAR U_3548\nENCODING 13640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4400\n4200\n7FE0\n4400\n4A40\n7A80\n4900\n4900\n4880\n8C60\nENDCHAR\nSTARTCHAR U_3549\nENCODING 13641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4200\n4500\n4880\n7060\n4F80\n4000\n5FC0\n5040\n9040\n9FC0\nENDCHAR\nSTARTCHAR U_354A\nENCODING 13642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4240\n7FE0\n4200\n5FE0\n5220\n5FE0\n5220\n5FE0\n5220\n9260\nENDCHAR\nSTARTCHAR U_354B\nENCODING 13643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4200\n4500\n4880\n7060\n4F80\n4200\n5FC0\n4200\n8A80\nBFE0\nENDCHAR\nSTARTCHAR U_354C\nENCODING 13644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n5FC0\n5040\n5FC0\n5040\n5FC0\n4080\n7FE0\n4880\n8180\nENDCHAR\nSTARTCHAR U_354D\nENCODING 13645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4000\n4A00\n5100\n77C0\n5100\n57C0\n5100\n57C0\n5100\n97C0\nENDCHAR\nSTARTCHAR U_354E\nENCODING 13646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4200\n4F80\n4200\n5FC0\n4480\n4FC0\n4000\n5FC0\n5540\nBFE0\nENDCHAR\nSTARTCHAR U_354F\nENCODING 13647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n5C40\n4140\n5C40\n5540\n5C40\n41E0\n5440\n4840\n9C40\nENDCHAR\nSTARTCHAR U_3550\nENCODING 13648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4400\n59C0\n5040\n5DC0\n5000\n5FE0\n4020\n5520\n6AA0\n8060\nENDCHAR\nSTARTCHAR U_3551\nENCODING 13649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n4840\n5C40\n49E0\n5C40\n5540\n5C40\n5440\n48C0\n9C40\nENDCHAR\nSTARTCHAR U_3552\nENCODING 13650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4880\n5FC0\n4200\n5FC0\n4920\n5FC0\n4940\n5C80\n48A0\n9940\nENDCHAR\nSTARTCHAR U_3553\nENCODING 13651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5240\n5540\n5FC0\n4200\n7FE0\n5540\n6220\n5FC0\n4200\nBFE0\nENDCHAR\nSTARTCHAR U_3554\nENCODING 13652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n54C0\n5FE0\n56A0\n5FE0\n5400\n5FE0\n7620\n5D40\n55A0\nA640\nENDCHAR\nSTARTCHAR U_3555\nENCODING 13653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0800\n1100\n2080\n7FC0\n0420\n0800\n1100\n2080\n7FC0\n0020\nENDCHAR\nSTARTCHAR U_3556\nENCODING 13654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1200\n3F00\n1080\n2940\n7BE0\n0400\nFFE0\n1500\n2480\n4440\nENDCHAR\nSTARTCHAR U_3557\nENCODING 13655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\nFE00\n1080\n7C80\n1100\nFD40\n1240\n3FE0\n4420\n9800\n27E0\nENDCHAR\nSTARTCHAR U_3558\nENCODING 13656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n3F80\n2080\n5140\nFBE0\n0400\n1B00\n2480\nCE60\n1500\n2C80\nENDCHAR\nSTARTCHAR U_3559\nENCODING 13657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n51C0\nFA40\n5080\n9BE0\n22A0\n7BE0\nD080\n21C0\n52A0\n8CE0\nENDCHAR\nSTARTCHAR U_355A\nENCODING 13658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n2840\n2480\n9480\n4900\n4600\n0600\n0900\n3080\nC060\nENDCHAR\nSTARTCHAR U_355B\nENCODING 13659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0080\n3100\n0E00\n3180\nC040\n7F80\n2080\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_355C\nENCODING 13660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4440\n4440\n7FC0\n0400\n7FC0\n2080\n1100\n0E00\n71C0\nENDCHAR\nSTARTCHAR U_355D\nENCODING 13661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n4040\n7FC0\n0000\n7F80\n2080\n1F00\nE0E0\nENDCHAR\nSTARTCHAR U_355E\nENCODING 13662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E00\n42E0\n7EA0\n48A0\n48A0\n7EA0\n6AA0\nAA40\n2A40\n2EA0\n0920\nENDCHAR\nSTARTCHAR U_355F\nENCODING 13663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1E00\n11E0\nFEA0\nAAA0\nAAA0\nFEA0\nAA40\nAA40\nAAA0\n8720\nENDCHAR\nSTARTCHAR U_3560\nENCODING 13664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n4FE0\n3900\n0FE0\n0900\n2FE0\n4900\nBFE0\n2080\n1F00\nE0E0\nENDCHAR\nSTARTCHAR U_3561\nENCODING 13665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3800\n23E0\nFD20\n8520\n7920\n30C0\n48C0\n78C0\nB540\n4920\n7A20\nENDCHAR\nSTARTCHAR U_3562\nENCODING 13666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BE0\n2020\nFD20\n8520\n7940\n4940\n7880\n4880\n7880\n4940\n8620\nENDCHAR\nSTARTCHAR U_3563\nENCODING 13667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n0900\n0900\n1080\n2080\n4040\nBFA0\n2080\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3564\nENCODING 13668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0200\nF200\n9F80\n9280\n9280\n9280\n9280\nF280\n04A0\n18E0\nENDCHAR\nSTARTCHAR U_3565\nENCODING 13669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nF100\n9100\n9100\n9100\n9100\n9280\nF280\n0440\n1820\nENDCHAR\nSTARTCHAR U_3566\nENCODING 13670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2080\n3F80\n0400\n0400\nFFE0\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_3567\nENCODING 13671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF420\n9420\n97E0\n9400\n9400\n9400\nF400\n0400\n0800\n3000\nENDCHAR\nSTARTCHAR U_3568\nENCODING 13672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\n0480\nF480\n9480\n9680\n9580\n9480\n9480\nF480\n08A0\n1060\nENDCHAR\nSTARTCHAR U_3569\nENCODING 13673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nFFE0\n9100\n9100\n97C0\n9100\n9100\nFFE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_356A\nENCODING 13674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nEFE0\nA920\nA920\nA100\nA280\nE280\n02A0\n0CA0\n3060\nENDCHAR\nSTARTCHAR U_356B\nENCODING 13675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0FE0\nF400\n9400\n97C0\n9440\n9440\nF440\n0440\n0940\n1080\nENDCHAR\nSTARTCHAR U_356C\nENCODING 13676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n0280\nF240\n9440\n9420\n9920\n9100\n9280\nF240\n04A0\n0720\nENDCHAR\nSTARTCHAR U_356D\nENCODING 13677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n0300\nED00\nA100\nA100\nAFE0\nA100\nA280\nE480\n0840\n1020\nENDCHAR\nSTARTCHAR U_356E\nENCODING 13678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n0440\nE820\nA440\nA440\nA280\nA280\nA100\nE280\n0440\n0820\nENDCHAR\nSTARTCHAR U_356F\nENCODING 13679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\n7FC0\n4A40\n5140\n7FC0\n5140\n5140\n5F40\n4140\n40C0\nENDCHAR\nSTARTCHAR U_3570\nENCODING 13680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n1E00\nE200\nA380\nBE00\nA200\nA3C0\nFE00\nA220\n0220\n01E0\nENDCHAR\nSTARTCHAR U_3571\nENCODING 13681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF240\n9FE0\n9200\n9200\n9280\n9280\n9280\nF280\n04A0\n1860\nENDCHAR\nSTARTCHAR U_3572\nENCODING 13682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nF100\n9FE0\n9100\n9380\n9380\n9540\nF540\n0920\n1120\nENDCHAR\nSTARTCHAR U_3573\nENCODING 13683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0020\n08A0\nEAA0\nAAA0\nAAA0\nA920\nA920\nEAA0\n0C60\n0FE0\n0020\nENDCHAR\nSTARTCHAR U_3574\nENCODING 13684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n1020\nE780\nA480\nA480\nA480\nA480\nA480\nE480\n08A0\n1060\nENDCHAR\nSTARTCHAR U_3575\nENCODING 13685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n0100\nF100\n9100\n9100\n97C0\n9100\nF100\n0100\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_3576\nENCODING 13686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE200\nA200\nA200\nAFC0\nA240\nA240\nE440\n8440\n0440\n1FE0\nENDCHAR\nSTARTCHAR U_3577\nENCODING 13687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0200\nF7E0\n9420\n9420\n97E0\n9420\n9420\nF420\n07E0\n0420\nENDCHAR\nSTARTCHAR U_3578\nENCODING 13688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\nE000\nBFE0\nA000\nA840\nA840\nE480\nA480\n0000\n3FE0\nENDCHAR\nSTARTCHAR U_3579\nENCODING 13689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF240\n9FE0\n9200\n9240\n9240\n9540\n9480\nF480\n0940\n1220\nENDCHAR\nSTARTCHAR U_357A\nENCODING 13690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n4A40\n7BC0\n0000\nFFE0\n1000\n2000\n3F80\n0080\n0300\nENDCHAR\nSTARTCHAR U_357B\nENCODING 13691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\nFFE0\n0400\n1D80\nE440\n0400\n7FC0\n4040\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_357C\nENCODING 13692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE7E0\nA820\nB2A0\nA120\nA920\nAAA0\nE820\nAFA0\n0020\n0060\nENDCHAR\nSTARTCHAR U_357D\nENCODING 13693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\n0840\nEC40\nAA40\nAA40\nA840\nAA40\nEC80\n0940\n0220\n0C20\nENDCHAR\nSTARTCHAR U_357E\nENCODING 13694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1500\n2480\nC460\n0400\n0000\n7A20\n4BC0\n4A00\n4A20\n7BE0\nENDCHAR\nSTARTCHAR U_357F\nENCODING 13695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n7C00\n0400\nFFE0\n0E00\n3580\nC460\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3580\nENCODING 13696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n07C0\nF140\n9FE0\n9140\n97C0\n9100\nF7C0\n9100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_3581\nENCODING 13697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0640\n0180\nE240\nA420\nA100\nAFE0\nA200\nE480\n8900\n1240\n07E0\nENDCHAR\nSTARTCHAR U_3582\nENCODING 13698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA920\nAFE0\nA920\nAFE0\nA140\nE080\nA1A0\n0260\n0C20\nENDCHAR\nSTARTCHAR U_3583\nENCODING 13699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nEF00\nA800\nA800\nAFE0\nA800\nABE0\nEA20\nAA20\n0A20\n13E0\nENDCHAR\nSTARTCHAR U_3584\nENCODING 13700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0820\nE920\nA920\nA920\nBDA0\nAB60\nA920\nE920\nA920\n1120\n2020\nENDCHAR\nSTARTCHAR U_3585\nENCODING 13701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00A0\n0080\nEFE0\nA880\nA8A0\nAEA0\nA8C0\nE880\n90A0\n1160\n2220\nENDCHAR\nSTARTCHAR U_3586\nENCODING 13702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n0280\nEFE0\nAAA0\nAAA0\nAAA0\nAFE0\nAAA0\nEAA0\n0AA0\n0FE0\nENDCHAR\nSTARTCHAR U_3587\nENCODING 13703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n0200\nE400\nAFE0\nAAA0\nAAA0\nAAA0\nAAA0\nEAA0\n0AA0\n0860\nENDCHAR\nSTARTCHAR U_3588\nENCODING 13704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n3E80\n0500\nFFE0\n1900\n2E20\nC7E0\n0000\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_3589\nENCODING 13705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE100\nA280\nA440\nA920\nA100\nA500\nE5C0\nA500\n0500\n1FE0\nENDCHAR\nSTARTCHAR U_358A\nENCODING 13706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE040\nA7C0\nA040\nAFC0\nA080\nAFE0\nE480\nA280\n0080\n0180\nENDCHAR\nSTARTCHAR U_358B\nENCODING 13707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n3180\nD160\n1100\n2100\n4100\n7A60\n4B80\n4A20\n79E0\nENDCHAR\nSTARTCHAR U_358C\nENCODING 13708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2200\n6F80\nA280\n24A0\n28E0\n0000\n7A40\n4B80\n4A20\n79E0\nENDCHAR\nSTARTCHAR U_358D\nENCODING 13709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n4900\n21E0\nFF00\n0100\n0100\n7A40\n4B80\n4A00\n7A20\n49E0\nENDCHAR\nSTARTCHAR U_358E\nENCODING 13710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A40\n4B80\n4A20\n79E0\n0400\n0A00\n3180\nD160\n1100\n1100\n2100\nENDCHAR\nSTARTCHAR U_358F\nENCODING 13711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0440\nF7C0\n9440\n97C0\n9000\n9100\n97C0\nF100\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_3590\nENCODING 13712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n0000\n3F80\n0480\nFFE0\n0480\n3F80\n0800\n3000\nENDCHAR\nSTARTCHAR U_3591\nENCODING 13713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n00A0\nEFE0\nA080\nAAA0\nAAA0\nBFC0\nEAC0\n0AA0\n1160\n0620\nENDCHAR\nSTARTCHAR U_3592\nENCODING 13714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n0280\nEFE0\nA120\nAFE0\nA900\nAFE0\nE320\n0520\n09A0\n1140\nENDCHAR\nSTARTCHAR U_3593\nENCODING 13715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n0680\nE900\nA280\nA540\nAFE0\nB100\nE380\nA100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_3594\nENCODING 13716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nE200\nAFC0\nA480\nA840\nB7E0\nA480\nE480\nA480\n0780\n0480\nENDCHAR\nSTARTCHAR U_3595\nENCODING 13717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0100\nEFE0\nA440\nA280\nAFE0\nA100\nE100\nA7C0\n0100\n0100\nENDCHAR\nSTARTCHAR U_3596\nENCODING 13718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\n0A00\nFFE0\n0400\n7FC0\n0400\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3597\nENCODING 13719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE920\nAFE0\nA100\nA280\nA440\nBBA0\nE000\nA7C0\n0040\n0180\nENDCHAR\nSTARTCHAR U_3598\nENCODING 13720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n0800\nEFC0\nA800\nAFE0\nAA80\nAAA0\nEAC0\nAA80\n0B40\n1220\nENDCHAR\nSTARTCHAR U_3599\nENCODING 13721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7DE0\n1520\n2520\n4DE0\n8000\n7A40\n4A80\n4B20\n7BE0\n0000\nENDCHAR\nSTARTCHAR U_359A\nENCODING 13722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n27E0\n6480\nA280\n2080\n2180\n7A40\n4A80\n4B00\n4A20\n7BE0\nENDCHAR\nSTARTCHAR U_359B\nENCODING 13723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0800\n3F80\n2080\n3F80\n0000\n7A40\n4B80\n4A20\n7BE0\nENDCHAR\nSTARTCHAR U_359C\nENCODING 13724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0000\n3F80\n2080\n3F80\n0000\n7A40\n4B80\n4A20\n7BE0\nENDCHAR\nSTARTCHAR U_359D\nENCODING 13725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n0400\nFFE0\n0E00\n3580\nC460\n7A00\n4A80\n4B20\n7BE0\nENDCHAR\nSTARTCHAR U_359E\nENCODING 13726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n0240\n7240\n53C0\n5100\n57E0\n5520\n75A0\n4660\n0420\n0460\nENDCHAR\nSTARTCHAR U_359F\nENCODING 13727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n0300\nEC20\nA920\nA4C0\nAFE0\nB020\nE7C0\nA480\n0300\n0CE0\nENDCHAR\nSTARTCHAR U_35A0\nENCODING 13728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA280\nA440\nABA0\nA000\nAFE0\nE100\n8540\n0920\n1320\nENDCHAR\nSTARTCHAR U_35A1\nENCODING 13729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n1FE0\nE480\nA8E0\nB920\nA9A0\nAA40\nED40\nA880\n0940\n0A20\nENDCHAR\nSTARTCHAR U_35A2\nENCODING 13730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nAA80\nAA80\nAB80\nAAA0\nAEC0\nEA80\nAB80\n0EA0\n14E0\nENDCHAR\nSTARTCHAR U_35A3\nENCODING 13731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE100\nAFE0\nA440\nA280\nAFE0\nA000\nE7C0\nA440\n0440\n07C0\nENDCHAR\nSTARTCHAR U_35A4\nENCODING 13732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n07C0\nE080\nA920\nAD60\nABA0\nA920\nEBA0\nAD60\n0920\n0FE0\nENDCHAR\nSTARTCHAR U_35A5\nENCODING 13733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n0FE0\nE8A0\nAF20\nA920\nAFE0\nA920\nEBA0\nAD60\n0920\n0FE0\nENDCHAR\nSTARTCHAR U_35A6\nENCODING 13734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nA7C0\nA540\nA7C0\nA540\nE7C0\nA100\n0540\n0920\nENDCHAR\nSTARTCHAR U_35A7\nENCODING 13735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\n0900\nEFE0\nA880\nAC60\nA000\nAFC0\nE840\nAFC0\n0840\n0FC0\nENDCHAR\nSTARTCHAR U_35A8\nENCODING 13736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE040\nA7C0\nA040\nAFE0\nA100\nAD60\nE180\nA540\n0920\n0300\nENDCHAR\nSTARTCHAR U_35A9\nENCODING 13737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\nEAE0\nAAA0\nAEA0\nAAA0\nAEA0\nEAA0\nAA40\n0E40\n12A0\n0320\nENDCHAR\nSTARTCHAR U_35AA\nENCODING 13738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nE0A0\nBFE0\nA080\nAEA0\nAAA0\nAEC0\nE080\nA6A0\n1960\n0220\nENDCHAR\nSTARTCHAR U_35AB\nENCODING 13739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n07C0\nE100\nAFE0\nA440\nA920\nA3C0\nE640\nA980\n0340\n0C20\nENDCHAR\nSTARTCHAR U_35AC\nENCODING 13740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE820\nAEE0\nA820\nAFE0\nA000\nEFE0\nA440\n0280\n0380\n0C60\nENDCHAR\nSTARTCHAR U_35AD\nENCODING 13741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n0FC0\nE200\nA200\nBFE0\nA500\nAAC0\nF220\n8B40\n12A0\n0600\nENDCHAR\nSTARTCHAR U_35AE\nENCODING 13742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0300\nE480\nA840\nB7A0\nA000\nAFE0\nEAA0\nAFE0\n0AA0\n0860\nENDCHAR\nSTARTCHAR U_35AF\nENCODING 13743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n5140\n5F40\n40C0\n0200\n7AC0\n4B00\n4A40\n7BC0\nENDCHAR\nSTARTCHAR U_35B0\nENCODING 13744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D20\n4540\n4580\n7D20\n45E0\n0000\n7FE0\n4020\n5FA0\n4920\n4F60\nENDCHAR\nSTARTCHAR U_35B1\nENCODING 13745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1200\n27C0\nEA40\n2580\n2300\n2CE0\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_35B2\nENCODING 13746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFDE0\n4920\nC920\n31E0\nCC00\n0160\nFD80\n8500\n8520\nFCE0\nENDCHAR\nSTARTCHAR U_35B3\nENCODING 13747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FE0\n8240\n4440\n2280\n4180\n8E40\n7D60\n4580\n4520\n7CE0\nENDCHAR\nSTARTCHAR U_35B4\nENCODING 13748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\nA480\nA800\nAFE0\nB2A0\nA2A0\nE4A0\n1920\n0220\n0C60\nENDCHAR\nSTARTCHAR U_35B5\nENCODING 13749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE840\nAFC0\nA840\nAFC0\nA840\nAFC0\nE840\n1FE0\n0480\n0840\nENDCHAR\nSTARTCHAR U_35B6\nENCODING 13750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n0280\nEFE0\nAAA0\nAEE0\nA820\nAFE0\nE100\n87C0\n0100\n1FE0\nENDCHAR\nSTARTCHAR U_35B7\nENCODING 13751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n97C0\n9440\n97C0\n9000\n9FE0\nF100\n95C0\n0500\n0BE0\nENDCHAR\nSTARTCHAR U_35B8\nENCODING 13752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\nE100\nAFE0\nA920\nAFC0\nA900\nABC0\nAA00\nEFE0\n0A00\n13C0\nENDCHAR\nSTARTCHAR U_35B9\nENCODING 13753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nE880\nB040\nAFA0\nA480\nA480\nA980\nFFC0\n1540\n1540\n3FE0\nENDCHAR\nSTARTCHAR U_35BA\nENCODING 13754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nA7C0\nA100\nAFE0\nA7C0\nEC60\n17E0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_35BB\nENCODING 13755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE480\nBFE0\nA320\nA500\nAB00\nA100\nFFE0\n0380\n0540\n1920\nENDCHAR\nSTARTCHAR U_35BC\nENCODING 13756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n0FE0\nE440\nA7C0\nA440\nA7C0\nA100\nAFE0\nE380\n0540\n1920\nENDCHAR\nSTARTCHAR U_35BD\nENCODING 13757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF100\n97E0\n9420\n97E0\n9420\n97E0\n9420\nF7E0\n0240\n0420\nENDCHAR\nSTARTCHAR U_35BE\nENCODING 13758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n1100\nFFE0\n0400\n4440\n4440\n7FC0\n0800\n3000\nENDCHAR\nSTARTCHAR U_35BF\nENCODING 13759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nEAA0\nAAA0\nAEA0\nAAC0\nAEA0\nAAA0\nABA0\nEEE0\n1280\n0280\nENDCHAR\nSTARTCHAR U_35C0\nENCODING 13760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0920\nEDA0\nAB60\nAFA0\nAB60\nADA0\nEFE0\nA920\n0FE0\n0820\nENDCHAR\nSTARTCHAR U_35C1\nENCODING 13761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEAA0\nAEE0\nA000\nA7C0\nA000\nAFE0\nA200\nE7C0\n0040\n01C0\nENDCHAR\nSTARTCHAR U_35C2\nENCODING 13762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0540\nE5A0\nA920\nA3C0\nA640\nBBC0\nE240\nA3C0\n0240\n03C0\nENDCHAR\nSTARTCHAR U_35C3\nENCODING 13763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\n0840\nEFC0\nA900\nAFE0\nA880\nAFC0\nA840\nEFC0\nA840\n0FC0\nENDCHAR\nSTARTCHAR U_35C4\nENCODING 13764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n0AA0\nEFE0\nA200\nA100\nAFE0\nA200\nE3C0\nA440\n0440\n0980\nENDCHAR\nSTARTCHAR U_35C5\nENCODING 13765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n04E0\nE4A0\nAEA0\nA4A0\nA4E0\nAEA0\nAAA0\nAAE0\nEEA0\n0120\n0260\nENDCHAR\nSTARTCHAR U_35C6\nENCODING 13766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n0FE0\nE440\nA7C0\nA100\nAFE0\nA920\nEFE0\nA100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_35C7\nENCODING 13767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEA20\nAA20\nAEE0\nA800\nAEE0\nA8A0\nAE40\nE840\n08A0\n0920\nENDCHAR\nSTARTCHAR U_35C8\nENCODING 13768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\n0280\nEFE0\nA920\nAFE0\nA920\nAFE0\nE920\nAFE0\n0220\n0C40\nENDCHAR\nSTARTCHAR U_35C9\nENCODING 13769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF8A0\n20A0\nF920\n2F20\nF960\n2600\n1980\nFFE0\n1080\n1F80\nENDCHAR\nSTARTCHAR U_35CA\nENCODING 13770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7BC0\n4A40\n4A40\n7BC0\n0000\n7BC0\n4A40\n4A40\n7BC0\n4A40\nENDCHAR\nSTARTCHAR U_35CB\nENCODING 13771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\nE480\nAFE0\nAA00\nABE0\nAA80\nAC80\nEBE0\n0880\n1140\n2620\nENDCHAR\nSTARTCHAR U_35CC\nENCODING 13772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA820\nA7C0\nA280\nA440\nA7E0\nA100\nE7C0\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_35CD\nENCODING 13773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nEF00\nA100\nAFE0\nA380\nA540\nBFE0\nA440\nE7C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_35CE\nENCODING 13774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1EE0\nEAA0\nAAA0\nB6E0\nA100\nBFE0\nA380\nE540\n1920\n0100\nENDCHAR\nSTARTCHAR U_35CF\nENCODING 13775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE100\nA300\nA540\nA920\nA100\nAFE0\nA100\nE5C0\n0500\n1FE0\nENDCHAR\nSTARTCHAR U_35D0\nENCODING 13776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE200\nAFE0\nA480\nAA40\nB120\nE000\nAFC0\n0A40\n0940\n1FE0\nENDCHAR\nSTARTCHAR U_35D1\nENCODING 13777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1BE0\nE880\nA9C0\nBC80\nA9C0\nEC80\n9BE0\n0880\n0880\n1080\nENDCHAR\nSTARTCHAR U_35D2\nENCODING 13778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n1FE0\nE000\nAFC0\nA840\nAFC0\nE220\nA540\n0C80\n1540\n0620\nENDCHAR\nSTARTCHAR U_35D3\nENCODING 13779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n0900\nEBC0\nA240\nBBC0\nAA00\nABE0\nEA20\nABE0\n0C00\n13E0\nENDCHAR\nSTARTCHAR U_35D4\nENCODING 13780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01E0\nF100\n97E0\n9520\n97C0\n9520\n97E0\nF540\n9540\n0480\n0B60\nENDCHAR\nSTARTCHAR U_35D5\nENCODING 13781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nEFE0\nA280\nA7C0\nA280\nAFE0\nA540\nE7C0\nA540\n0FE0\n0440\nENDCHAR\nSTARTCHAR U_35D6\nENCODING 13782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n0300\nEC20\nA540\nA000\nACE0\nA820\nAEE0\nE820\nAFE0\n0820\nENDCHAR\nSTARTCHAR U_35D7\nENCODING 13783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF7C0\n9540\n97C0\nF540\n47C0\nF200\n5500\n5FE0\n5100\nB100\nENDCHAR\nSTARTCHAR U_35D8\nENCODING 13784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0120\nEFE0\nA540\nA7C0\nA540\nA7C0\nE540\nBFE0\n0440\n0240\n00C0\nENDCHAR\nSTARTCHAR U_35D9\nENCODING 13785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n07E0\nEAA0\nA3E0\nA120\nA400\nE7E0\nAAA0\n13E0\n0120\n0640\nENDCHAR\nSTARTCHAR U_35DA\nENCODING 13786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE280\nAFE0\nAAA0\nAFE0\nA100\nEFE0\nA300\n0580\n0940\n1120\nENDCHAR\nSTARTCHAR U_35DB\nENCODING 13787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n07E0\nEA40\nB000\nA1C0\nA700\nE100\nAFE0\n0280\n0440\n0820\nENDCHAR\nSTARTCHAR U_35DC\nENCODING 13788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0FE0\nE240\nA680\nA140\nA640\nAFE0\nE920\nAFE0\n0920\n0FE0\nENDCHAR\nSTARTCHAR U_35DD\nENCODING 13789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n0280\nEFE0\nA100\nA7C0\nA100\nE100\nAFE0\n0000\n0AA0\n0AA0\nENDCHAR\nSTARTCHAR U_35DE\nENCODING 13790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\n3E40\n11E0\nF140\nBDE0\nB5A0\nF5A0\nBDA0\n1140\n2240\n04A0\nENDCHAR\nSTARTCHAR U_35DF\nENCODING 13791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n67C0\n1100\n6FE0\n2240\n7A80\n4B00\n7A20\n4BE0\nENDCHAR\nSTARTCHAR U_35E0\nENCODING 13792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF940\n4BE0\n9220\nD3E0\n3220\nC800\n0260\nFA80\n8B20\nFBE0\nENDCHAR\nSTARTCHAR U_35E1\nENCODING 13793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFC0\n1200\n2F00\n6500\nA580\n2880\n3180\n7A40\n4A80\n7BC0\nENDCHAR\nSTARTCHAR U_35E2\nENCODING 13794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C80\n0880\nFE80\nA9E0\nBEA0\nAAA0\nBEA0\nEAA0\nBEA0\n0920\n3E60\nENDCHAR\nSTARTCHAR U_35E3\nENCODING 13795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nEFE0\nA540\nAB60\nA000\nAFE0\nA920\nE7C0\nA540\n05C0\n0100\nENDCHAR\nSTARTCHAR U_35E4\nENCODING 13796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n7FE0\n4900\n4D40\n4940\n7E80\nACA0\n5B60\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_35E5\nENCODING 13797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0EE0\nE0A0\nAEA0\nAAC0\nAEC0\nA0A0\nEEA0\n02E0\n1F80\n0480\nENDCHAR\nSTARTCHAR U_35E6\nENCODING 13798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n2AE0\nEAA0\nBAA0\nAAA0\nBAA0\nABA0\nEEE0\n3980\n0980\n0A80\nENDCHAR\nSTARTCHAR U_35E7\nENCODING 13799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nAAA0\nA440\nA7C0\nA240\nA7E0\nA100\nE7C0\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_35E8\nENCODING 13800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\nA140\nBE60\nD1C0\nFD40\nA880\nFD60\n0000\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_35E9\nENCODING 13801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nE220\nAAA0\nA660\nAAA0\nA100\nAFE0\nE820\nAFE0\n0820\n0FE0\nENDCHAR\nSTARTCHAR U_35EA\nENCODING 13802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n02A0\nEBC0\nAA80\nBFA0\nA460\nAF80\nA240\nEFE0\nA100\n0940\n1320\nENDCHAR\nSTARTCHAR U_35EB\nENCODING 13803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nEEE0\nAAA0\nB640\nAC40\nABA0\nB000\nAFE0\nE100\n0940\n1320\nENDCHAR\nSTARTCHAR U_35EC\nENCODING 13804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nFFE0\nA0A0\n3F80\n0800\n1F00\n6600\n1900\n67C0\n1900\n3E00\nENDCHAR\nSTARTCHAR U_35ED\nENCODING 13805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00E0\nEF00\nA540\nA380\nAFE0\nA540\nA920\nA000\nE540\n1560\n17C0\nENDCHAR\nSTARTCHAR U_35EE\nENCODING 13806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n77E0\n9500\n77C0\n2540\n77E0\nD540\n57C0\n5500\n7A80\n0C60\nENDCHAR\nSTARTCHAR U_35EF\nENCODING 13807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n7F80\n0500\nFFE0\n3080\nDF80\n1080\n1FA0\n7DC0\n4520\n7CE0\nENDCHAR\nSTARTCHAR U_35F0\nENCODING 13808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\n0940\nF6A0\nA800\nB880\nAA80\nAAE0\nAA80\nEA80\n0B80\n0C60\nENDCHAR\nSTARTCHAR U_35F1\nENCODING 13809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n0BE0\nF900\nABC0\nA900\nABC0\nA100\nAFE0\nE380\n0540\n0920\nENDCHAR\nSTARTCHAR U_35F2\nENCODING 13810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n07C0\nE140\nAFE0\nA140\nAFE0\nA540\nA7C0\nE540\nA7C0\n0FE0\nENDCHAR\nSTARTCHAR U_35F3\nENCODING 13811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n0EE0\nF540\nA100\nA280\nA440\nBBA0\nE000\nA7C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_35F4\nENCODING 13812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\n0AA0\nEEE0\nAAA0\nAEE0\nABA0\nAAA0\nEBA0\nAAA0\n0BA0\n0EE0\nENDCHAR\nSTARTCHAR U_35F5\nENCODING 13813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n1D00\nEBE0\nA8A0\nB480\nA080\nA880\nBD40\nE940\nA920\n1620\nENDCHAR\nSTARTCHAR U_35F6\nENCODING 13814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EC0\n0B60\nE4C0\nA820\nBEE0\nA2A0\nAF20\nE8E0\nAEA0\n0240\n06A0\nENDCHAR\nSTARTCHAR U_35F7\nENCODING 13815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0FE0\nEAA0\nA7C0\nA280\nA7C0\nA280\nFFE0\nA540\n0540\n0EE0\nENDCHAR\nSTARTCHAR U_35F8\nENCODING 13816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nEAE0\nB700\nAAE0\nAA40\nBF40\nAA40\nAB40\nEF40\nA840\n08C0\nENDCHAR\nSTARTCHAR U_35F9\nENCODING 13817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n0BE0\nF880\nABE0\nA880\nABE0\nA880\nEBE0\nAA40\n1560\n13C0\nENDCHAR\nSTARTCHAR U_35FA\nENCODING 13818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE100\nAFE0\nA280\nA440\nBAA0\nAEE0\nE280\nAEE0\n0280\n0EE0\nENDCHAR\nSTARTCHAR U_35FB\nENCODING 13819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n0920\nE1E0\nBDA0\nABE0\nAAA0\nAAA0\nEAE0\nBA20\n0C20\n03E0\nENDCHAR\nSTARTCHAR U_35FC\nENCODING 13820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0AA0\n06C0\nEFE0\nA280\nAFE0\nA100\nA7C0\nE100\nAFE0\n0380\n0D60\nENDCHAR\nSTARTCHAR U_35FD\nENCODING 13821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n5EE0\nF2A0\n5EC0\nF2A0\n3EE0\n5480\n9A80\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_35FE\nENCODING 13822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n15C0\nFF40\nB540\nBD40\nA960\nBFC0\nAB40\nFF40\nA940\n1D40\n0960\nENDCHAR\nSTARTCHAR U_35FF\nENCODING 13823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\n0AA0\nEEE0\nAAA0\nAFE0\nA8A0\nABA0\nEAA0\nABA0\n08A0\n09E0\nENDCHAR\nSTARTCHAR U_3600\nENCODING 13824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0EE0\nE820\nAEE0\nA820\nAEE0\nA540\nEFE0\n0540\n0540\n0920\nENDCHAR\nSTARTCHAR U_3601\nENCODING 13825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n0AA0\nEFE0\nA100\nA7C0\nA100\nAFE0\nE280\n0FE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_3602\nENCODING 13826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n1FE0\nE440\nAAA0\nA440\nA9A0\nAEC0\nE100\n1420\n24A0\n0780\nENDCHAR\nSTARTCHAR U_3603\nENCODING 13827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n0FE0\nE200\nBFE0\nA200\nA7C0\nAC40\nF7C0\nA520\n0CA0\n0BC0\nENDCHAR\nSTARTCHAR U_3604\nENCODING 13828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0BE0\nEAA0\nBEA0\nABE0\nAC80\nBBE0\nA900\nE9E0\n0920\n0A20\n0CC0\nENDCHAR\nSTARTCHAR U_3605\nENCODING 13829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n6AE0\n1100\nEEE0\nA440\nBF40\nA440\nEE40\n2440\n2640\n38C0\nENDCHAR\nSTARTCHAR U_3606\nENCODING 13830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0FE0\nE100\nA7C0\nA440\nAFE0\nAAA0\nA440\nE7C0\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_3607\nENCODING 13831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\n1DC0\n0880\nF540\nBFE0\nA220\nAFC0\nE200\n0A80\n0A40\n1240\nENDCHAR\nSTARTCHAR U_3608\nENCODING 13832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n09E0\nEE40\nA880\nA7E0\nA8A0\nAE80\nB4E0\nEE80\n0580\n0A80\n1460\nENDCHAR\nSTARTCHAR U_3609\nENCODING 13833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n1EE0\nE540\nBDE0\nA520\nBD20\nA520\nFD20\n2160\n2920\n3500\nENDCHAR\nSTARTCHAR U_360A\nENCODING 13834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\n0200\nFFE0\nAAA0\nAFC0\nA000\nAFC0\nE000\n0FC0\n0840\n0FC0\nENDCHAR\nSTARTCHAR U_360B\nENCODING 13835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n0AA0\nEFA0\nA940\nAFA0\nAAA0\nAFE0\nE540\n0540\n07C0\n0820\nENDCHAR\nSTARTCHAR U_360C\nENCODING 13836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E20\n0820\nFF20\nAAA0\nBEA0\nA0A0\nBFA0\nECA0\n3520\n2E20\n5560\nENDCHAR\nSTARTCHAR U_360D\nENCODING 13837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n0E60\nF540\nA7E0\nAA40\nBF40\nAA60\nEF40\n0AC0\n0F40\n0820\nENDCHAR\nSTARTCHAR U_360E\nENCODING 13838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n1020\nEEA0\nA2E0\nBF20\nAAA0\nAE60\nEA60\n3EA0\n2320\n2260\nENDCHAR\nSTARTCHAR U_360F\nENCODING 13839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nC480\n1FE0\nC400\n4FC0\n4940\n4FC0\n7000\n8FE0\n3A40\n2AA0\n3BE0\nENDCHAR\nSTARTCHAR U_3610\nENCODING 13840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F40\n0AE0\nEFA0\nAA00\nAFA0\nAAA0\nAF40\nE140\n0D40\n32A0\n04A0\nENDCHAR\nSTARTCHAR U_3611\nENCODING 13841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n1DE0\nE8A0\nBDE0\nAAA0\nA1E0\nBC80\nEAA0\n1DC0\n2AA0\n1980\nENDCHAR\nSTARTCHAR U_3612\nENCODING 13842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1860\nE380\n2080\nFFE0\n72A0\nABE0\n2080\nFFE0\n8A40\n8AA0\nFBE0\nENDCHAR\nSTARTCHAR U_3613\nENCODING 13843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\n0AA0\nEEE0\nA920\nAFE0\nAD60\nAFE0\nE920\n0BA0\n0D20\n0960\nENDCHAR\nSTARTCHAR U_3614\nENCODING 13844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0FE0\n0AA0\nE7C0\nA280\nA7C0\nAD60\nB6C0\nE540\n0280\n0C60\nENDCHAR\nSTARTCHAR U_3615\nENCODING 13845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n0FE0\nE440\nAE80\nAAE0\nAE80\nEAE0\n0E80\n0FC0\n0A40\n1FE0\nENDCHAR\nSTARTCHAR U_3616\nENCODING 13846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1FE0\nF280\nADE0\nBF60\nB5A0\nBB60\nB5A0\nFBE0\n14C0\n2920\nENDCHAR\nSTARTCHAR U_3617\nENCODING 13847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\n0AA0\nEEE0\nAAA0\nAEE0\nAAA0\nA7E0\nEC80\n17E0\n0480\n07E0\nENDCHAR\nSTARTCHAR U_3618\nENCODING 13848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n4E80\nF1E0\n2E40\n50A0\nFFE0\n4A40\nAAA0\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3619\nENCODING 13849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1DC0\n1540\nFFE0\nA480\nBEE0\nAB20\nAEA0\nEAA0\n2E40\n5A40\n42A0\nENDCHAR\nSTARTCHAR U_361A\nENCODING 13850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3DE0\n2520\nFDE0\nA520\nBEA0\nABE0\nAE60\nEB60\n3EA0\n2360\n2020\nENDCHAR\nSTARTCHAR U_361B\nENCODING 13851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\n1860\nEFC0\nA840\nAFE0\nAAA0\nBFE0\nAA80\nEEE0\n0A80\n16E0\nENDCHAR\nSTARTCHAR U_361C\nENCODING 13852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\nA540\nFFE0\nA140\nFFE0\nAB40\nFFE0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_361D\nENCODING 13853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\nBF20\n8120\n9120\n8A20\n8420\n8B20\nB120\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_361E\nENCODING 13854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8420\n8420\nBFA0\n84A0\n88A0\n88A0\n92A0\nA120\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_361F\nENCODING 13855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\n8920\n8920\nBFE0\n8920\n8920\n8920\n9120\nA120\nFFE0\nENDCHAR\nSTARTCHAR U_3620\nENCODING 13856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8820\n8520\n9120\nB220\nD4A0\n9960\n9160\nEF20\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_3621\nENCODING 13857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\nBFA0\nA4A0\nBFA0\nA4A0\nBFA0\n8420\n8420\n8420\nFFE0\nENDCHAR\nSTARTCHAR U_3622\nENCODING 13858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8420\nA4A0\n9520\nBFA0\n8A20\n8A20\n8A20\n92A0\nA1A0\nFFE0\nENDCHAR\nSTARTCHAR U_3623\nENCODING 13859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9120\n9F20\n8020\n9F20\n9120\n9F20\n9120\n9F20\n9320\nFFE0\nENDCHAR\nSTARTCHAR U_3624\nENCODING 13860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\nD560\nBDE0\nD060\nBFE0\n9060\nBDE0\nD560\nE560\nFFE0\nENDCHAR\nSTARTCHAR U_3625\nENCODING 13861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nBDA0\nEAA0\nD120\nA2A0\nFD60\n93A0\nFDA0\n9360\nD520\nFFE0\nENDCHAR\nSTARTCHAR U_3626\nENCODING 13862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n2100\n27E0\nF920\n2120\n2120\n2920\n3220\nC220\n04A0\n0840\nENDCHAR\nSTARTCHAR U_3627\nENCODING 13863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\n2280\nF100\n2FE0\n2120\n2100\n2100\n3100\nC500\n0300\nENDCHAR\nSTARTCHAR U_3628\nENCODING 13864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n4100\n4FE0\nE920\n4920\n4AA0\n6A60\n4C60\n8820\n0820\n0860\nENDCHAR\nSTARTCHAR U_3629\nENCODING 13865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n4880\n4880\nE880\n4EE0\n4880\n4880\n6880\nCA80\n0CA0\n08E0\nENDCHAR\nSTARTCHAR U_362A\nENCODING 13866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\n2100\n21C0\nF700\n2100\n21E0\n2700\n3100\nC120\n00E0\nENDCHAR\nSTARTCHAR U_362B\nENCODING 13867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n2FE0\nF280\n2280\n2FE0\n2280\n3280\nE280\n0480\n0880\nENDCHAR\nSTARTCHAR U_362C\nENCODING 13868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4400\n4FE0\nE820\n5220\n4220\n44A0\n4FA0\n6020\n80A0\n0040\nENDCHAR\nSTARTCHAR U_362D\nENCODING 13869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n25E0\n2420\nF920\n2E20\n2220\n2420\n3420\nE920\n0F20\n0060\nENDCHAR\nSTARTCHAR U_362E\nENCODING 13870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2440\nF440\n27C0\n2500\n2500\n2480\n3480\nC840\n1020\nENDCHAR\nSTARTCHAR U_362F\nENCODING 13871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n27E0\nF500\n2900\n27E0\n2120\n3220\nE220\n04A0\n1840\nENDCHAR\nSTARTCHAR U_3630\nENCODING 13872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2480\n2280\nF080\n2480\n2280\n20E0\n2780\n3080\nC080\n0080\nENDCHAR\nSTARTCHAR U_3631\nENCODING 13873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n27C0\nF540\n2540\n27C0\n2540\n3540\nCFE0\n0440\n04C0\nENDCHAR\nSTARTCHAR U_3632\nENCODING 13874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n4840\n4840\nEFC0\n4A00\n4F80\n4A80\n4A80\n6AA0\nD4A0\n2860\nENDCHAR\nSTARTCHAR U_3633\nENCODING 13875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n0A60\nFB80\n0A00\n0A20\n3A20\nC9E0\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3634\nENCODING 13876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7480\n5480\n5480\n7540\n5620\n0400\n7FC0\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3635\nENCODING 13877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\n5FE0\nE500\n4900\n5FE0\n6920\n4920\n6920\nC960\n0100\nENDCHAR\nSTARTCHAR U_3636\nENCODING 13878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3BE0\n4880\nAA80\n13E0\n2080\nC480\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3637\nENCODING 13879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n2440\nF000\n2440\n2440\n2280\n2280\n3100\nC280\n0C60\nENDCHAR\nSTARTCHAR U_3638\nENCODING 13880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2200\n7A40\n8B80\n5220\n2220\nC1E0\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3639\nENCODING 13881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1120\n5D40\n5180\n5120\n5D20\nE0E0\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_363A\nENCODING 13882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n4280\n44E0\nE580\n4CA0\n54A0\n44C0\n44C0\n64A0\nC560\n0620\nENDCHAR\nSTARTCHAR U_363B\nENCODING 13883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\n2920\nF920\n2FE0\n2920\n2920\n2AA0\n3AA0\nCC60\n0FE0\nENDCHAR\nSTARTCHAR U_363C\nENCODING 13884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27A0\nF140\n2FE0\n2100\n23E0\n2600\n2BE0\n3020\nC020\n00C0\nENDCHAR\nSTARTCHAR U_363D\nENCODING 13885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n7D20\n1100\nFFE0\n1100\n1120\n7CA0\n10C0\n14A0\nF960\n4220\nENDCHAR\nSTARTCHAR U_363E\nENCODING 13886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2820\nF7C0\n2100\n2100\n2FE0\n2100\n3100\nC100\n0300\nENDCHAR\nSTARTCHAR U_363F\nENCODING 13887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nF440\n2440\n27C0\n2100\n27C0\n3100\nC100\n0FE0\nENDCHAR\nSTARTCHAR U_3640\nENCODING 13888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n4FE0\n4AA0\nE280\n4C60\n4200\n47C0\n4240\n6240\n8440\n0860\nENDCHAR\nSTARTCHAR U_3641\nENCODING 13889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n47E0\n4800\nF7C0\n4540\n5FE0\n4640\n4940\n6FE0\nC140\n0080\nENDCHAR\nSTARTCHAR U_3642\nENCODING 13890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n4440\n4820\nF7C0\n4440\n4440\n57C0\n6280\nC480\n84A0\n18E0\nENDCHAR\nSTARTCHAR U_3643\nENCODING 13891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n4700\n4400\nE7C0\n4480\n4480\n4480\n6FE0\nC280\n8440\n0820\nENDCHAR\nSTARTCHAR U_3644\nENCODING 13892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n4EE0\n4880\nEA80\n4CE0\n4100\n4100\n47C0\n6100\n8100\n0FE0\nENDCHAR\nSTARTCHAR U_3645\nENCODING 13893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2440\n77C0\n2100\n2FE0\n2100\n3540\n2520\n4920\n0100\nENDCHAR\nSTARTCHAR U_3646\nENCODING 13894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n2FE0\n2820\nF100\n2FE0\n2100\n2200\n3280\nC480\n0920\n13E0\nENDCHAR\nSTARTCHAR U_3647\nENCODING 13895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n27C0\n2100\nFB20\n24C0\n2380\n2B80\n34C0\nC1C0\n02A0\n0C80\n0100\nENDCHAR\nSTARTCHAR U_3648\nENCODING 13896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n41C0\n4100\n4FE0\nE920\n4F80\n4900\n48C0\n6A80\n92A0\n1460\nENDCHAR\nSTARTCHAR U_3649\nENCODING 13897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n4500\n5FC0\n5540\n5FC0\nF540\n5540\n7FE0\n4880\n6840\nD040\nENDCHAR\nSTARTCHAR U_364A\nENCODING 13898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n4400\n4780\nE400\n4780\n4400\n5FE0\n4A40\n6980\n8A80\n0C60\nENDCHAR\nSTARTCHAR U_364B\nENCODING 13899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n4480\n4FC0\nE480\n4780\n4480\n4780\n6480\nDFE0\n0480\n0840\nENDCHAR\nSTARTCHAR U_364C\nENCODING 13900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n47C0\n4140\nEFE0\n4140\n47C0\n4540\n4540\n67C0\n8540\n0940\nENDCHAR\nSTARTCHAR U_364D\nENCODING 13901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n4220\n4B40\nE480\n5B60\n4000\n5FE0\n5320\n6AA0\n8440\n1BA0\nENDCHAR\nSTARTCHAR U_364E\nENCODING 13902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40A0\n5FE0\nF080\n5E80\n5480\n5FA0\n55A0\n5AC0\n7480\nDB60\n2220\nENDCHAR\nSTARTCHAR U_364F\nENCODING 13903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n47E0\n5800\nE7C0\n4440\n47C0\n4440\n47C0\n6E40\n8180\n0E60\nENDCHAR\nSTARTCHAR U_3650\nENCODING 13904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n4920\n4FE0\nE000\n4FE0\n4200\n4FE0\n6AA0\n8AA0\n0AA0\n0860\nENDCHAR\nSTARTCHAR U_3651\nENCODING 13905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\n3F80\n2480\n7FC0\n4440\n5B40\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3652\nENCODING 13906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA940\nA880\nFFE0\nA8A0\nAAC0\nF980\n0480\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3653\nENCODING 13907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\nFFE0\n2080\nFBC0\n3080\nE5E0\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3654\nENCODING 13908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n4780\n4280\nEFC0\n4480\n4780\n4100\n6780\n8500\n1FE0\n0100\nENDCHAR\nSTARTCHAR U_3655\nENCODING 13909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n4920\n4FE0\nE920\n4FE0\n4000\n47C0\n6640\n85C0\n0740\n08C0\nENDCHAR\nSTARTCHAR U_3656\nENCODING 13910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n4E00\n4200\nEFC0\n4A40\n4FC0\n4200\n7FE0\n9220\n13A0\n1460\nENDCHAR\nSTARTCHAR U_3657\nENCODING 13911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n4540\n47C0\nE540\n47C0\n4000\n4FE0\n6500\n8540\n0480\n0660\nENDCHAR\nSTARTCHAR U_3658\nENCODING 13912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n4280\n4FE0\nEAA0\n4FE0\n4200\n4FE0\n6280\n8480\n0300\n0CE0\nENDCHAR\nSTARTCHAR U_3659\nENCODING 13913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8240\n5FE0\n0480\nC540\n0A80\n2A40\nD1E0\n8400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_365A\nENCODING 13914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\n4FE0\n4100\nE7C0\n4100\n4FE0\n4100\n67C0\n8900\n1FE0\n0100\nENDCHAR\nSTARTCHAR U_365B\nENCODING 13915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n4FE0\n4100\nEFE0\n4920\n4FE0\n4920\n6040\n8FE0\n0440\n02C0\nENDCHAR\nSTARTCHAR U_365C\nENCODING 13916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFF80\n2200\n3E00\n0000\nFFC0\nA440\n88C0\n3E00\n0800\nFFC0\nENDCHAR\nSTARTCHAR U_365D\nENCODING 13917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0100\n4FC0\n4440\nFFE0\n4AA0\n57E0\n4440\n67C0\n8440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_365E\nENCODING 13918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n4F80\n4880\nEF80\n4880\n4F80\n4200\n6FC0\n8200\n0A80\n1240\nENDCHAR\nSTARTCHAR U_365F\nENCODING 13919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4EE0\n4AA0\nEEA0\n4AE0\n4EA0\n48E0\n6AA0\n8AA0\n0CA0\n0960\nENDCHAR\nSTARTCHAR U_3660\nENCODING 13920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\nA140\nBA20\nD1C0\nFD40\nA880\nFF60\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3661\nENCODING 13921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n4940\nF540\n49C0\n5AA0\n4800\n4A80\n6AE0\n4A80\n8B80\n0C60\nENDCHAR\nSTARTCHAR U_3662\nENCODING 13922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n07C0\n2280\n7100\n2FE0\n3920\n4BA0\n0D60\n0960\n0100\n0000\nENDCHAR\nSTARTCHAR U_3663\nENCODING 13923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DE0\n4500\n45C0\nED00\n51C0\n5100\n5FE0\n6520\nC5C0\n1540\n0DA0\nENDCHAR\nSTARTCHAR U_3664\nENCODING 13924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n4100\n4FE0\nE940\n4BE0\n48C0\n4BA0\n4AC0\n6FE0\n8880\n1380\nENDCHAR\nSTARTCHAR U_3665\nENCODING 13925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4440\nEFE0\n4440\n47C0\n4300\n4520\n6CC0\n9640\n0420\nENDCHAR\nSTARTCHAR U_3666\nENCODING 13926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n5180\nFA80\n2180\nFFE0\n7080\nAC80\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3667\nENCODING 13927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n2280\n2EE0\nFAA0\n2EE0\n2280\n27C0\n3540\nC7C0\n0540\n07C0\nENDCHAR\nSTARTCHAR U_3668\nENCODING 13928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0520\n4940\n5DE0\nEB40\n5FE0\n4140\n5FE0\n4900\n6940\nCCA0\n1360\nENDCHAR\nSTARTCHAR U_3669\nENCODING 13929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4AA0\nE440\n4FE0\n4440\n47C0\n4440\n67C0\n8540\n0B20\nENDCHAR\nSTARTCHAR U_366A\nENCODING 13930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4100\nEFE0\n4820\n47C0\n4440\n47C0\n6440\n8280\n0FE0\nENDCHAR\nSTARTCHAR U_366B\nENCODING 13931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n5FE0\n4900\nEFE0\n4900\n4FE0\n4900\n5FE0\n6380\n8540\n0920\nENDCHAR\nSTARTCHAR U_366C\nENCODING 13932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10A0\nFFE0\n5480\nBA80\n1080\n3940\nD620\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_366D\nENCODING 13933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n5540\n52E0\nFFA0\n5240\n5AC0\n5FC0\n5240\n7440\n94A0\n2920\nENDCHAR\nSTARTCHAR U_366E\nENCODING 13934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n4EE0\n5540\nE100\n4280\n4440\n5BA0\n4000\n67C0\n8440\n07C0\nENDCHAR\nSTARTCHAR U_366F\nENCODING 13935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7100\n23C0\nDB40\n7140\n22E0\n7FC0\n0000\nFFE0\n1100\n3F80\nENDCHAR\nSTARTCHAR U_3670\nENCODING 13936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n73E0\n9120\nFA60\nAA80\nFBC0\nAC80\nFBE0\n8C80\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3671\nENCODING 13937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n71C0\n5100\nFFE0\n4580\n77E0\n1540\n6B60\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3672\nENCODING 13938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n5FE0\n4480\nEB40\n5DE0\n4540\n4BE0\n5D40\n65E0\n8940\n11E0\nENDCHAR\nSTARTCHAR U_3673\nENCODING 13939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40A0\n5FE0\n5080\nF7A0\n50A0\n5740\n55A0\n6740\n5440\n9AA0\n27A0\nENDCHAR\nSTARTCHAR U_3674\nENCODING 13940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n4480\nEFE0\n4A40\n4FE0\n4800\n4BC0\n4800\n6BC0\n8A40\n13C0\nENDCHAR\nSTARTCHAR U_3675\nENCODING 13941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n4FE0\n4280\nEFE0\n4AA0\n4BA0\n4860\n4920\n67C0\nC100\n1FE0\nENDCHAR\nSTARTCHAR U_3676\nENCODING 13942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2080\n3F80\n2480\n1500\nFFE0\n9120\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3677\nENCODING 13943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4820\nEFE0\n4820\n4FE0\n4440\n4EE0\n4440\n6EE0\n8540\n0AA0\nENDCHAR\nSTARTCHAR U_3678\nENCODING 13944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\n4B60\n5940\nEBE0\n4940\n4BE0\n4880\n69C0\n8880\n0BE0\n0940\nENDCHAR\nSTARTCHAR U_3679\nENCODING 13945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5CE0\n4480\nEFE0\n4AA0\n5FE0\n5220\n65C0\n4A80\n8100\n0E00\nENDCHAR\nSTARTCHAR U_367A\nENCODING 13946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n5100\n57C0\nF540\n5FE0\n5440\n57C0\n7440\n57C0\n9280\n1FE0\nENDCHAR\nSTARTCHAR U_367B\nENCODING 13947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\nF540\n57C0\n5540\n57C0\n5540\n7BA0\n57C0\n9100\n2FE0\nENDCHAR\nSTARTCHAR U_367C\nENCODING 13948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n4540\n47C0\nE540\n47C0\n4000\n4FE0\n6AA0\n4FE0\n8AA0\n0FE0\nENDCHAR\nSTARTCHAR U_367D\nENCODING 13949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n4200\n5FE0\n4A40\nFEE0\n56A0\n5EE0\n56A0\n7FE0\nC280\n1C60\nENDCHAR\nSTARTCHAR U_367E\nENCODING 13950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n06C0\n4540\n46C0\nE540\n46C0\n4FE0\n5120\n6FC0\nC080\n0280\n0100\nENDCHAR\nSTARTCHAR U_367F\nENCODING 13951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n5FE0\n4100\nEFC0\n4100\n5FE0\n4540\n7FE0\n4EA0\n9540\n0EA0\nENDCHAR\nSTARTCHAR U_3680\nENCODING 13952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0640\n4460\n5FE0\nF640\n5F40\n5040\n5FC0\n5560\n7740\n95C0\n2F20\nENDCHAR\nSTARTCHAR U_3681\nENCODING 13953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n71C0\n2080\nFBE0\n5140\nFBE0\n5140\nFFE0\n5140\n5940\n9260\nENDCHAR\nSTARTCHAR U_3682\nENCODING 13954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n4FE0\n4540\nEFE0\n4D60\n47C0\n4540\n6FE0\n8540\n0C80\n0660\nENDCHAR\nSTARTCHAR U_3683\nENCODING 13955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n1F00\n0000\nFFE0\nAAA0\n2E80\n3F80\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_3684\nENCODING 13956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\nFFE0\nA4A0\n3F80\n2480\n7FC0\n2740\n3400\nCFE0\nENDCHAR\nSTARTCHAR U_3685\nENCODING 13957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n7100\n0E00\n1100\nEEE0\n1400\n3F80\n4400\n1F00\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3686\nENCODING 13958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0000\n3F80\n2080\n3F80\n2080\n3F80\n6900\n0600\nFDE0\nENDCHAR\nSTARTCHAR U_3687\nENCODING 13959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\n4640\n5940\n7FC0\n1080\n2840\nDFA0\n3080\n4900\n0600\nF9E0\nENDCHAR\nSTARTCHAR U_3688\nENCODING 13960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3C80\n4480\nC880\n2BE0\n1080\n1080\n2080\n4080\n8080\n0080\nENDCHAR\nSTARTCHAR U_3689\nENCODING 13961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n10E0\n2820\nDF60\n2A00\n0400\n0A00\n3780\n0C80\n0300\n3E00\nENDCHAR\nSTARTCHAR U_368A\nENCODING 13962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7BE0\nC880\n3100\n2240\n5180\nB920\n4A40\nB480\n2140\nC620\nENDCHAR\nSTARTCHAR U_368B\nENCODING 13963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n7920\n9BA0\n6920\n4FE0\nC820\n7BA0\n9AA0\n6BA0\n4820\n9060\nENDCHAR\nSTARTCHAR U_368C\nENCODING 13964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF540\n57C0\n2540\n47C0\nA100\n7FE0\nD300\n2380\n4540\n8920\nENDCHAR\nSTARTCHAR U_368D\nENCODING 13965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n77C0\nD540\n2FE0\n4440\nC7C0\n7440\nD7C0\n2440\n47C0\n8820\nENDCHAR\nSTARTCHAR U_368E\nENCODING 13966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0840\nFFE0\n1200\n2100\n4080\n8060\n2080\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_368F\nENCODING 13967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n1100\n2080\n4040\n9120\n1100\nFFE0\n1100\n1100\n2100\nENDCHAR\nSTARTCHAR U_3690\nENCODING 13968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0A00\n3180\nC460\n0400\nFFE0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_3691\nENCODING 13969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0080\n3F80\n0080\n3F80\n0400\n0800\nFFE0\n1200\n2180\nC060\nENDCHAR\nSTARTCHAR U_3692\nENCODING 13970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0400\n4500\n2480\n5540\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_3693\nENCODING 13971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0A00\n3180\nC460\n0400\nFFE0\n0E00\n3580\nC460\nENDCHAR\nSTARTCHAR U_3694\nENCODING 13972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0A00\n3180\nCA60\n3F80\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_3695\nENCODING 13973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\n6AC0\nBFA0\n0A80\n3F80\n2A00\n3FC0\n1240\n2280\nENDCHAR\nSTARTCHAR U_3696\nENCODING 13974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7FC0\n4040\n7FC0\n4040\n7FC0\n0400\nFFE0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_3697\nENCODING 13975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0A00\n3180\n5F40\n9120\n1F00\n1100\n1F00\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_3698\nENCODING 13976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n2080\nFBE0\n2080\nFBE0\n2080\n2140\n5140\n4A20\n8420\nENDCHAR\nSTARTCHAR U_3699\nENCODING 13977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n2A20\n2A20\n4A20\n9BE0\n0400\nFFE0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_369A\nENCODING 13978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\n2480\nCF60\n3200\n0C00\n3000\nDF80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_369B\nENCODING 13979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\n20E0\nDE00\n1080\n1F80\n1080\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_369C\nENCODING 13980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n2280\nC360\nFFE0\n4A80\n7A80\n0100\n3AA0\nC460\nENDCHAR\nSTARTCHAR U_369D\nENCODING 13981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n2280\nD760\n2200\n6FC0\nA200\n2780\n2200\n2FC0\nENDCHAR\nSTARTCHAR U_369E\nENCODING 13982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n2080\nD160\n7BC0\n1100\n3B80\n3540\n5140\n1100\nENDCHAR\nSTARTCHAR U_369F\nENCODING 13983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n2200\n7F80\nA080\n3F80\n2220\n31E0\n0400\nFFE0\n1100\n60E0\nENDCHAR\nSTARTCHAR U_36A0\nENCODING 13984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n60C0\n9120\n7FC0\n0400\n3F80\n0400\nFFE0\n8920\nENDCHAR\nSTARTCHAR U_36A1\nENCODING 13985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n5140\n8A20\nFFE0\n0820\nEBA0\nAAA0\nEBA0\n0820\n1860\nENDCHAR\nSTARTCHAR U_36A2\nENCODING 13986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n1100\n2100\n6FE0\nA240\n2480\n2280\n2100\n22C0\n2C20\nENDCHAR\nSTARTCHAR U_36A3\nENCODING 13987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n0E00\n7180\n0400\nFFE0\n0900\n1A00\n0700\n78E0\nENDCHAR\nSTARTCHAR U_36A4\nENCODING 13988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\n2100\nF9E0\n4B00\n5100\n9100\n5080\n20A0\n5060\n8820\nENDCHAR\nSTARTCHAR U_36A5\nENCODING 13989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\n2080\nF880\n4880\n57E0\n9080\n5080\n2080\n5080\n8980\nENDCHAR\nSTARTCHAR U_36A6\nENCODING 13990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\n2140\nF940\n4940\n5140\n9140\n5140\n2240\n5240\n8440\nENDCHAR\nSTARTCHAR U_36A7\nENCODING 13991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n23E0\nFA00\n4A00\n5200\n9200\n5200\n2200\n5400\n8400\nENDCHAR\nSTARTCHAR U_36A8\nENCODING 13992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2780\n2280\nFA80\n4A80\n5780\n9280\n52A0\n22A0\n5260\n8A20\nENDCHAR\nSTARTCHAR U_36A9\nENCODING 13993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23C0\n2240\nFA40\n4FE0\n5240\n9240\n57E0\n2240\n5240\n8AC0\nENDCHAR\nSTARTCHAR U_36AA\nENCODING 13994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2780\n2100\nF9E0\n4F00\n5100\n91E0\n5700\n2120\n5120\n89E0\nENDCHAR\nSTARTCHAR U_36AB\nENCODING 13995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FC0\n2440\nF480\n55E0\n5420\n9640\n5540\n2480\n5940\n8A20\nENDCHAR\nSTARTCHAR U_36AC\nENCODING 13996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n23E0\nFA20\n4D20\n50A0\n9020\n50A0\n2320\n5020\n88E0\nENDCHAR\nSTARTCHAR U_36AD\nENCODING 13997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\n2100\nFFE0\n4900\n5180\n9280\n5280\n2280\n54A0\n88E0\nENDCHAR\nSTARTCHAR U_36AE\nENCODING 13998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n2420\nF800\n4BC0\n5240\n9240\n5240\n2240\n5440\n8860\nENDCHAR\nSTARTCHAR U_36AF\nENCODING 13999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n24C0\nFEC0\n4D40\n5540\n96C0\n5440\n2460\n5420\n8820\nENDCHAR\nSTARTCHAR U_36B0\nENCODING 14000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2100\nF900\n4B40\n5320\n9520\n5900\n2100\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_36B1\nENCODING 14001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2300\n2200\nFA00\n4BE0\n5280\n9280\n5280\n2280\n5280\n87E0\nENDCHAR\nSTARTCHAR U_36B2\nENCODING 14002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2100\nF9E0\n4900\n5100\n97E0\n5420\n2420\n5420\n87E0\nENDCHAR\nSTARTCHAR U_36B3\nENCODING 14003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n2780\nFAE0\n4AA0\n52A0\n92A0\n52A0\n24E0\n5480\n8980\nENDCHAR\nSTARTCHAR U_36B4\nENCODING 14004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n27E0\nF900\n4A80\n57E0\n9AA0\n52A0\n22E0\n5080\n8880\nENDCHAR\nSTARTCHAR U_36B5\nENCODING 14005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n23E0\nFE40\n4980\n5240\n9420\n5180\n2040\n5300\n8880\nENDCHAR\nSTARTCHAR U_36B6\nENCODING 14006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n2240\nFBC0\n4A00\n5200\n93E0\n5220\n2220\n53E0\n8A20\nENDCHAR\nSTARTCHAR U_36B7\nENCODING 14007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2280\nFC40\n4920\n5100\n9540\n5920\n2120\n5100\n8B00\nENDCHAR\nSTARTCHAR U_36B8\nENCODING 14008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n2020\nFBA0\n4820\n53A0\n92A0\n52A0\n23A0\n5020\n8860\nENDCHAR\nSTARTCHAR U_36B9\nENCODING 14009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2CE0\n2AA0\nFAA0\n4AA0\n52A0\n96A0\n5AE0\n2280\n5480\n8880\nENDCHAR\nSTARTCHAR U_36BA\nENCODING 14010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2780\n2280\nFAE0\n4C20\n57A0\n9140\n5100\n27C0\n5100\n8B00\nENDCHAR\nSTARTCHAR U_36BB\nENCODING 14011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n2480\n3F80\n0400\n7FC0\n0900\n1E00\n0700\n78C0\nENDCHAR\nSTARTCHAR U_36BC\nENCODING 14012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\n22A0\nFAA0\n4AA0\n53E0\n92A0\n52A0\n22A0\n53E0\n8A20\nENDCHAR\nSTARTCHAR U_36BD\nENCODING 14013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\n23E0\n3820\nE1A0\n0440\nFFE0\n0900\n1E00\n0700\n78E0\nENDCHAR\nSTARTCHAR U_36BE\nENCODING 14014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n2440\nFC40\n4C40\n57C0\n9280\n5280\n2280\n54A0\n88E0\nENDCHAR\nSTARTCHAR U_36BF\nENCODING 14015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n23E0\nF420\n5BA0\n52A0\n93A0\n5220\n22C0\n5220\n8BE0\nENDCHAR\nSTARTCHAR U_36C0\nENCODING 14016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\n2120\nFA20\n4C40\n53E0\n9020\n53E0\n2020\n5020\n8BE0\nENDCHAR\nSTARTCHAR U_36C1\nENCODING 14017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n2100\nFD40\n4B80\n5100\n9FE0\n5100\n2100\n5100\n8100\nENDCHAR\nSTARTCHAR U_36C2\nENCODING 14018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2780\n2400\nFDE0\n4D20\n55A0\n9520\n55E0\n2500\n5520\n89E0\nENDCHAR\nSTARTCHAR U_36C3\nENCODING 14019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7DE0\n10A0\n7CA0\n1120\n7E60\n1400\nFFE0\n1900\n0700\n78E0\nENDCHAR\nSTARTCHAR U_36C4\nENCODING 14020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n27E0\nF900\n4920\n52C0\n9680\n5A40\n2240\n5320\n8A20\nENDCHAR\nSTARTCHAR U_36C5\nENCODING 14021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2240\n2240\nFBC0\n4A40\n53C0\n9240\n5260\n27C0\n5040\n8040\nENDCHAR\nSTARTCHAR U_36C6\nENCODING 14022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2240\n22E0\nFA20\n4C20\n5540\n9100\n5FE0\n2380\n5540\n8920\nENDCHAR\nSTARTCHAR U_36C7\nENCODING 14023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n27E0\nFC00\n4C80\n5480\n97E0\n5480\n2480\n5480\n8BE0\nENDCHAR\nSTARTCHAR U_36C8\nENCODING 14024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2120\nF940\n4FE0\n5100\n97C0\n5A00\n23E0\n5020\n89C0\nENDCHAR\nSTARTCHAR U_36C9\nENCODING 14025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4FE0\n4280\nF280\nAFE0\nAAA0\nAAA0\n6CE0\n4820\n6820\n8FE0\nENDCHAR\nSTARTCHAR U_36CA\nENCODING 14026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23C0\n2240\nFA40\n4A40\n5520\n9100\n57C0\n2380\n5540\n8920\nENDCHAR\nSTARTCHAR U_36CB\nENCODING 14027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2280\nFC40\n4920\n5100\n9540\n55A0\n2940\n5100\n8B00\nENDCHAR\nSTARTCHAR U_36CC\nENCODING 14028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2100\n2240\nFBE0\n48A0\n5280\n93E0\n5480\n27E0\n5080\n8880\nENDCHAR\nSTARTCHAR U_36CD\nENCODING 14029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2FE0\nF900\n4D40\n5540\n93A0\n5100\n2280\n5440\n8820\nENDCHAR\nSTARTCHAR U_36CE\nENCODING 14030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23C0\n2240\nFA40\n4BC0\n5000\n97E0\n5420\n2420\n57E0\n8420\nENDCHAR\nSTARTCHAR U_36CF\nENCODING 14031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\n2FE0\nF900\n4D40\n5380\n9380\n5540\n2120\n5100\n8B00\nENDCHAR\nSTARTCHAR U_36D0\nENCODING 14032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4100\n47C0\nF540\n57C0\n5540\n97C0\n6500\n2200\n5580\n8860\nENDCHAR\nSTARTCHAR U_36D1\nENCODING 14033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1DE0\n5120\nFCC0\n2540\nF920\n0400\nFFE0\n1100\n0F00\n78E0\nENDCHAR\nSTARTCHAR U_36D2\nENCODING 14034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4000\nF000\n57C0\n5440\n5440\n97C0\n6000\n2440\n5280\n8FE0\nENDCHAR\nSTARTCHAR U_36D3\nENCODING 14035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4660\n4180\n4660\nF100\n57E0\n5280\n97E0\n6AA0\n22E0\n5080\n8080\nENDCHAR\nSTARTCHAR U_36D4\nENCODING 14036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n47C0\n4C40\nF380\n5D60\n5380\n9100\n67C0\n2100\n57E0\n8100\nENDCHAR\nSTARTCHAR U_36D5\nENCODING 14037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47C0\n4440\nF7C0\n5000\n57C0\n9540\n67C0\n2400\n5420\n83E0\nENDCHAR\nSTARTCHAR U_36D6\nENCODING 14038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4240\n47C0\nF2A0\n5440\n5A20\n93C0\n6640\n2240\n5180\n8660\nENDCHAR\nSTARTCHAR U_36D7\nENCODING 14039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n4540\nF540\n5BA0\n5BA0\n9100\n67C0\n2100\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_36D8\nENCODING 14040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\n4100\nF7E0\n5820\n53C0\n9080\n67E0\n2100\n5100\n8300\nENDCHAR\nSTARTCHAR U_36D9\nENCODING 14041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4100\n4FE0\nF440\n5280\n5FE0\n9100\n67C0\n2100\n5100\n8100\nENDCHAR\nSTARTCHAR U_36DA\nENCODING 14042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4040\n4380\nF080\n57E0\n5520\n97E0\n5520\n27E0\n5520\n8560\nENDCHAR\nSTARTCHAR U_36DB\nENCODING 14043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n43C0\n4240\nFBC0\n5240\n53C0\n9260\n57C0\n20C0\n5140\n86C0\nENDCHAR\nSTARTCHAR U_36DC\nENCODING 14044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n43E0\nD640\n5140\n5080\n4760\n0800\nFFE0\n1100\n0E00\n71C0\nENDCHAR\nSTARTCHAR U_36DD\nENCODING 14045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23C0\n2240\nFBC0\n4A40\n53C0\n9240\n53C0\n2000\n5240\n8420\nENDCHAR\nSTARTCHAR U_36DE\nENCODING 14046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4100\n47C0\nF100\n57E0\n5000\n9240\n67E0\n2240\n5240\n8440\nENDCHAR\nSTARTCHAR U_36DF\nENCODING 14047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n2480\nF900\n4FC0\n5540\n9540\n57E0\n2100\n5280\n8460\nENDCHAR\nSTARTCHAR U_36E0\nENCODING 14048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n45E0\nE820\n4BA0\nAAA0\nABA0\nAAA0\nAAA0\n4BA0\n4820\nA860\nENDCHAR\nSTARTCHAR U_36E1\nENCODING 14049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4100\n4FE0\nF820\n5780\n9000\n9FC0\n6500\n2520\n5520\n89E0\nENDCHAR\nSTARTCHAR U_36E2\nENCODING 14050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n27E0\nFB80\n4D40\n5120\n97C0\n5240\n2260\n5420\n88C0\nENDCHAR\nSTARTCHAR U_36E3\nENCODING 14051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\n47C0\nF000\n57C0\n5440\n9540\n6540\n2540\n5280\n8460\nENDCHAR\nSTARTCHAR U_36E4\nENCODING 14052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4000\nFEE0\nAAA0\nAAA0\nAAA0\nAEE0\nAAA0\n4AA0\n6AA0\n9AA0\nENDCHAR\nSTARTCHAR U_36E5\nENCODING 14053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4120\n4FC0\nF340\n5520\n5900\n97E0\n6420\n27E0\n5420\n8FE0\nENDCHAR\nSTARTCHAR U_36E6\nENCODING 14054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4480\n4FE0\nF480\n55C0\n55A0\n96A0\n66A0\n2480\n5480\n8480\nENDCHAR\nSTARTCHAR U_36E7\nENCODING 14055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4540\n4540\nF7C0\n5000\n57E0\n9200\n67C0\n2A40\n5240\n83C0\nENDCHAR\nSTARTCHAR U_36E8\nENCODING 14056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4280\n47C0\nF100\n57C0\n5100\n9FE0\n6280\n22A0\n54A0\n88E0\nENDCHAR\nSTARTCHAR U_36E9\nENCODING 14057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4240\nF7C0\n5020\n57C0\n9440\n67C0\n2440\n57C0\n8440\nENDCHAR\nSTARTCHAR U_36EA\nENCODING 14058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4280\nF560\n5FC0\n5540\n97C0\n6540\n27C0\n5120\n81E0\nENDCHAR\nSTARTCHAR U_36EB\nENCODING 14059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\n47C0\nF440\n57C0\n5200\n97E0\n5AA0\n24A0\n5120\n8240\nENDCHAR\nSTARTCHAR U_36EC\nENCODING 14060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2100\nF7E0\n4A80\n5440\n9920\n5100\n27C0\n5100\n87E0\nENDCHAR\nSTARTCHAR U_36ED\nENCODING 14061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4280\n47C0\nF280\n5FE0\n5000\n97C0\n5440\n27C0\n5440\n87C0\nENDCHAR\nSTARTCHAR U_36EE\nENCODING 14062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4920\nF7C0\n5100\n56C0\n9820\n67C0\n3440\n4380\n8C60\nENDCHAR\nSTARTCHAR U_36EF\nENCODING 14063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n5E80\nE4E0\n7EA0\nAAA0\nAAA0\nBEA0\n54A0\n5500\n5420\nA3E0\nENDCHAR\nSTARTCHAR U_36F0\nENCODING 14064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\n47C0\nF480\n57E0\n5440\n97E0\n6440\n27C0\n5440\n87C0\nENDCHAR\nSTARTCHAR U_36F1\nENCODING 14065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n27C0\nFD40\n4FC0\n5000\n97E0\n5520\n2540\n5480\n8660\nENDCHAR\nSTARTCHAR U_36F2\nENCODING 14066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4100\n47C0\nFC40\n57C0\n5440\n97C0\n5440\n27C0\n5440\n8820\nENDCHAR\nSTARTCHAR U_36F3\nENCODING 14067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n2080\nFFE0\n8420\n7FC0\n4440\nFFE0\n3100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_36F4\nENCODING 14068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n4540\n4280\nFD40\n52A0\n57E0\n96A0\n6520\n26A0\n5460\n8FE0\nENDCHAR\nSTARTCHAR U_36F5\nENCODING 14069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n4F80\n4A20\nF540\n5100\n57C0\n9540\n67C0\n2540\n5FE0\n8540\nENDCHAR\nSTARTCHAR U_36F6\nENCODING 14070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4120\n47E0\nFC00\n57E0\n5480\n96A0\n65C0\n2480\n5140\n8E20\nENDCHAR\nSTARTCHAR U_36F7\nENCODING 14071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D40\n1120\nFFE0\n3980\n56A0\n94E0\n0800\nFFE0\n1900\n0600\n79C0\nENDCHAR\nSTARTCHAR U_36F8\nENCODING 14072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n47E0\nF900\n4FC0\n5000\n97C0\n6440\n27C0\n5280\n8FE0\nENDCHAR\nSTARTCHAR U_36F9\nENCODING 14073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n4BE0\n4880\nEBE0\n5AA0\nABE0\nAAA0\nABE0\n4A80\n4900\nAAE0\nENDCHAR\nSTARTCHAR U_36FA\nENCODING 14074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4440\nF280\n5FE0\n5000\n97C0\n6440\n27C0\n5440\n8FC0\nENDCHAR\nSTARTCHAR U_36FB\nENCODING 14075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\nF280\n5540\n5BA0\n9100\nA7E0\n6100\n23C0\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_36FC\nENCODING 14076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n4700\n4100\nF7E0\n5100\n5360\n9520\n6560\n2720\n5520\n87E0\nENDCHAR\nSTARTCHAR U_36FD\nENCODING 14077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF820\n5540\n9380\nA100\nAFE0\n6380\n2540\n5920\n8100\nENDCHAR\nSTARTCHAR U_36FE\nENCODING 14078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40A0\n4080\n4FE0\nE880\nAF80\nA880\nAEA0\nAA40\n4EC0\nA940\n9620\nENDCHAR\nSTARTCHAR U_36FF\nENCODING 14079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n4540\n4FE0\nF540\n5FE0\n5920\n97C0\n5540\n2540\n5100\n8900\nENDCHAR\nSTARTCHAR U_3700\nENCODING 14080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n44E0\n5FA0\nE4A0\nAEE0\nADA0\nB5A0\nA4E0\n44A0\n64A0\n84E0\nENDCHAR\nSTARTCHAR U_3701\nENCODING 14081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2380\nF540\n5FE0\n5440\n97C0\n6440\n27C0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_3702\nENCODING 14082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n73E0\n2040\nFA40\n2140\n7140\n2440\nFFE0\n1100\n0F00\n7C80\nENDCHAR\nSTARTCHAR U_3703\nENCODING 14083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n5480\nFFE0\n5400\n55C0\n9400\n95C0\n6400\n25C0\n5540\n85C0\nENDCHAR\nSTARTCHAR U_3704\nENCODING 14084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n44C0\n5740\nF540\n57C0\n5540\n97C0\nE540\n25C0\n5740\n8820\nENDCHAR\nSTARTCHAR U_3705\nENCODING 14085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\nF100\n5680\n5300\n9640\n97C0\n5540\n27C0\n5540\n87C0\nENDCHAR\nSTARTCHAR U_3706\nENCODING 14086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n51C0\nEBE0\n7C80\nA9C0\nA9C0\nAAA0\n6CA0\n2880\n5680\n81E0\nENDCHAR\nSTARTCHAR U_3707\nENCODING 14087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n57C0\nF100\n5FE0\n5100\n57C0\n9100\n5FE0\n2240\n5D60\n87C0\nENDCHAR\nSTARTCHAR U_3708\nENCODING 14088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79C0\n1240\nF9C0\n3EA0\n53C0\n9140\n3640\nFFE0\n0900\n0F00\n7880\nENDCHAR\nSTARTCHAR U_3709\nENCODING 14089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n4540\n52A0\nF7E0\n5420\n57E0\n9520\n67E0\n2400\n5420\n87E0\nENDCHAR\nSTARTCHAR U_370A\nENCODING 14090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4420\n57E0\nF540\n57E0\n5540\n97E0\n5540\n2560\n5540\n89A0\nENDCHAR\nSTARTCHAR U_370B\nENCODING 14091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4280\n5FE0\nE280\nA440\nA820\nB020\n6FE0\n2AA0\n5AA0\n9FE0\nENDCHAR\nSTARTCHAR U_370C\nENCODING 14092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n2240\nFA60\n0400\nFBC0\nAA40\nFA40\n5140\n3180\nDE60\nENDCHAR\nSTARTCHAR U_370D\nENCODING 14093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nE900\n6FC0\nA940\nAFE0\nA940\nAFC0\n6A40\n6A40\n93C0\nENDCHAR\nSTARTCHAR U_370E\nENCODING 14094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n5520\nF2C0\n5100\n5780\n5240\n97E0\n5100\n27E0\n5240\n8420\nENDCHAR\nSTARTCHAR U_370F\nENCODING 14095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n5240\nF7E0\n5420\n57E0\n5420\n97E0\n5420\n27E0\n5240\n8420\nENDCHAR\nSTARTCHAR U_3710\nENCODING 14096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4540\n57C0\nF000\n57C0\n5000\n57C0\n5440\n27C0\n5280\n8FE0\nENDCHAR\nSTARTCHAR U_3711\nENCODING 14097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n2FE0\n8540\n57C0\n2540\nC7C0\n4D40\nFFE0\n1100\n1F00\n70C0\nENDCHAR\nSTARTCHAR U_3712\nENCODING 14098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42E0\n4420\n5660\nF420\n5660\n5240\n97E0\n5240\n2240\n5240\n8440\nENDCHAR\nSTARTCHAR U_3713\nENCODING 14099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n5EE0\nF540\n5100\n5280\n5440\n9BA0\n5000\n27C0\n5440\n87C0\nENDCHAR\nSTARTCHAR U_3714\nENCODING 14100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\n5280\nFFE0\n5000\n57C0\n9440\n57C0\n2280\n52A0\n8C60\nENDCHAR\nSTARTCHAR U_3715\nENCODING 14101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n47E0\nF2A0\n6BE0\nBEA0\nABE0\nA880\n6BE0\n2880\n5680\n81E0\nENDCHAR\nSTARTCHAR U_3716\nENCODING 14102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n5FE0\n4AA0\nFFE0\nAAA0\nAFE0\nA440\n67C0\n2440\n57C0\n8440\nENDCHAR\nSTARTCHAR U_3717\nENCODING 14103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4FC0\n4AA0\nFFE0\nA200\nA500\nAAE0\n7D00\n26C0\n5300\n8C00\nENDCHAR\nSTARTCHAR U_3718\nENCODING 14104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n4100\nEFE0\n6AA0\nAFC0\nAA40\nABC0\n6A40\n2BC0\n5A40\n97E0\nENDCHAR\nSTARTCHAR U_3719\nENCODING 14105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4FE0\nEA80\n6FE0\nAAA0\nAFE0\nAA40\nAB60\n6A40\n5AC0\n9360\nENDCHAR\nSTARTCHAR U_371A\nENCODING 14106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nE820\n65E0\nA480\nADE0\nA520\n65E0\n2520\n55E0\n8520\nENDCHAR\nSTARTCHAR U_371B\nENCODING 14107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5FE0\n4440\nFF40\n5540\n5F40\n9540\n5F40\n24A0\n5FA0\n8520\nENDCHAR\nSTARTCHAR U_371C\nENCODING 14108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5EE0\nE5A0\n6EA0\nA8A0\nBE40\nA840\n6E40\n2AA0\n5AA0\n9520\nENDCHAR\nSTARTCHAR U_371D\nENCODING 14109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4280\n5D60\nF7C0\n5080\n5FE0\n9280\n6FE0\n2AA0\n5D60\n8FE0\nENDCHAR\nSTARTCHAR U_371E\nENCODING 14110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFB80\n2200\nFBE0\nAA80\nFA80\nAC80\nFFE0\n2900\n1E00\n7180\nENDCHAR\nSTARTCHAR U_371F\nENCODING 14111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4D00\n4500\nFFE0\n5540\n5D40\n5540\n9C80\n5480\n3D40\n5540\n8620\nENDCHAR\nSTARTCHAR U_3720\nENCODING 14112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4920\nFFE0\n5480\n57E0\n5C80\n97E0\n6480\n27E0\n5480\n87E0\nENDCHAR\nSTARTCHAR U_3721\nENCODING 14113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n4940\nF6A0\nA800\nB880\nA880\nAAE0\n4A80\n6B80\n5A80\n8C60\nENDCHAR\nSTARTCHAR U_3722\nENCODING 14114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\nF540\n6FE0\nA540\nA7C0\nA540\n6FE0\n2240\n5180\n8E40\nENDCHAR\nSTARTCHAR U_3723\nENCODING 14115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n4EC0\nF2A0\nABE0\nB480\nAC80\nA940\n5220\n6000\n5540\n92A0\nENDCHAR\nSTARTCHAR U_3724\nENCODING 14116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4280\nEFE0\nAAA0\nAFE0\nA440\nA7C0\n6540\n2FE0\n5100\n8100\nENDCHAR\nSTARTCHAR U_3725\nENCODING 14117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4AA0\nFFE0\n5440\n57C0\n5440\n97C0\n6440\n27C0\n5440\n8820\nENDCHAR\nSTARTCHAR U_3726\nENCODING 14118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4040\nEFE0\n6040\nAFE0\nA4A0\nAEE0\n6080\n5FE0\n4480\n8180\nENDCHAR\nSTARTCHAR U_3727\nENCODING 14119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4D40\nFA60\n6FC0\nAA40\nAAC0\nAFC0\n6A40\n2A40\n5AA0\n9520\nENDCHAR\nSTARTCHAR U_3728\nENCODING 14120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4820\nEFE0\n6AA0\nA9C0\nAEA0\nAA80\n4FE0\n6880\n5FE0\n9080\nENDCHAR\nSTARTCHAR U_3729\nENCODING 14121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4FE0\nEB60\n6DA0\nAB20\nAFE0\nABA0\n6540\n2FE0\n5300\n8CE0\nENDCHAR\nSTARTCHAR U_372A\nENCODING 14122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nFD80\n4900\nFDE0\n1140\nFE40\n5440\nFFE0\n0900\n1200\n7F80\nENDCHAR\nSTARTCHAR U_372B\nENCODING 14123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n5A80\nEFE0\nB8A0\nAFA0\nB040\nD540\n5540\n7540\n95A0\n98A0\nENDCHAR\nSTARTCHAR U_372C\nENCODING 14124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n4480\nEFE0\nAAA0\nAFE0\nA800\nABE0\n6800\n2BE0\n5A20\n93E0\nENDCHAR\nSTARTCHAR U_372D\nENCODING 14125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n4540\nFFE0\nB020\nA7C0\nA440\nAFE0\n6920\n2FE0\n5920\n8FE0\nENDCHAR\nSTARTCHAR U_372E\nENCODING 14126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F40\n4A40\nFFE0\n6900\nAF00\nAAE0\nAF00\n6000\n3FE0\n4AA0\n9FE0\nENDCHAR\nSTARTCHAR U_372F\nENCODING 14127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4AA0\nEFA0\n68E0\nAF80\nAA80\nAAA0\n4FE0\n6000\n5D40\n92A0\nENDCHAR\nSTARTCHAR U_3730\nENCODING 14128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4520\n4BC0\nFEE0\n67A0\nAAC0\nBFE0\nA100\n7FE0\n2380\n5540\n9920\nENDCHAR\nSTARTCHAR U_3731\nENCODING 14129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4880\nEFE0\n6AA0\nB7E0\nA440\nA7C0\n6440\n27C0\n5440\n8820\nENDCHAR\nSTARTCHAR U_3732\nENCODING 14130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n5400\nF7C0\n5440\n5FE0\nAAA0\n6FA0\n2AE0\n5FA0\n92A0\nENDCHAR\nSTARTCHAR U_3733\nENCODING 14131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\nEAA0\n6FE0\nA920\nA7C0\nA920\n6240\n2D80\n5480\n8E60\nENDCHAR\nSTARTCHAR U_3734\nENCODING 14132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4EE0\nE280\n6FE0\nAAA0\nAFE0\nA820\n67C0\n2540\n56C0\n87C0\nENDCHAR\nSTARTCHAR U_3735\nENCODING 14133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\nE480\n67C0\nA480\nA7C0\nA480\n77E0\n2AA0\n5DC0\n8660\nENDCHAR\nSTARTCHAR U_3736\nENCODING 14134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n45E0\nEC20\n77E0\nA5A0\nA6E0\nA500\n6FE0\n3520\n57C0\n8CE0\nENDCHAR\nSTARTCHAR U_3737\nENCODING 14135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE7C0\n2540\nEFE0\n8B60\nEDA0\n2B60\n6DA0\n0880\nFFE0\n1100\n7FC0\nENDCHAR\nSTARTCHAR U_3738\nENCODING 14136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n4080\nFBE0\n8940\nF3E0\n8880\nFFE0\n1080\n1F00\nE0C0\nENDCHAR\nSTARTCHAR U_3739\nENCODING 14137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\nEEE0\n6AA0\nAEE0\nA480\nAFE0\n7480\n27E0\n5480\n87E0\nENDCHAR\nSTARTCHAR U_373A\nENCODING 14138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n5FE0\n4440\nFFE0\n6CC0\nB7E0\nA440\n67C0\n2440\n57C0\n8820\nENDCHAR\nSTARTCHAR U_373B\nENCODING 14139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n53C0\nECA0\n6BC0\nBC40\nABE0\nB6A0\n6BC0\n2540\n54A0\n8BE0\nENDCHAR\nSTARTCHAR U_373C\nENCODING 14140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4540\nE7C0\nA540\nAFE0\nAAA0\nAFE0\n6AA0\n2380\n5280\n8FE0\nENDCHAR\nSTARTCHAR U_373D\nENCODING 14141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n4480\n2240\n3F80\n0200\n0440\nFFE0\n0400\n0400\n1C00\n0400\nENDCHAR\nSTARTCHAR U_373E\nENCODING 14142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF200\n1300\n2480\n2840\n34A0\n6480\nA480\n2480\n2480\nA480\n4880\nENDCHAR\nSTARTCHAR U_373F\nENCODING 14143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n2080\n4300\n4100\n6FE0\nC140\n4100\n4100\n4100\nC500\n4300\nENDCHAR\nSTARTCHAR U_3740\nENCODING 14144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n6840\n5880\n4880\nFFE0\n6880\n5880\n4880\nFC80\n0980\n1880\nENDCHAR\nSTARTCHAR U_3741\nENCODING 14145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n5120\n9F20\n1120\n1F20\n00C0\n3F00\n0240\nFFE0\n0200\n0E00\nENDCHAR\nSTARTCHAR U_3742\nENCODING 14146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF460\n2580\n5F00\n45E0\n7540\nC740\n4D40\n5540\n4540\n4540\nCA40\nENDCHAR\nSTARTCHAR U_3743\nENCODING 14147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n23C0\n2480\n2FE0\n3520\nE520\n27E0\n2180\n2280\nA2A0\n6CE0\nENDCHAR\nSTARTCHAR U_3744\nENCODING 14148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFC80\n4BE0\n7880\n02A0\nFAA0\n13E0\n38A0\nE080\n20A0\n60E0\nENDCHAR\nSTARTCHAR U_3745\nENCODING 14149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n2240\nFA20\n8C00\n73C0\n0040\n7280\n3900\nE280\n2460\nENDCHAR\nSTARTCHAR U_3746\nENCODING 14150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n2100\n27C0\n3440\nE7C0\n2440\n2280\n2FE0\nA440\n67C0\nENDCHAR\nSTARTCHAR U_3747\nENCODING 14151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n0000\n7BC0\n4A40\n7BC0\n0000\n7BC0\n1880\nF3E0\n3180\nENDCHAR\nSTARTCHAR U_3748\nENCODING 14152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5EA0\nE1C0\n5EA0\nF1E0\n4E80\nFBE0\n2E40\nFBE0\n2040\n60C0\nENDCHAR\nSTARTCHAR U_3749\nENCODING 14153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n0800\n0400\nFFE0\n8020\n8020\n0000\n0000\n7FC0\n0000\n0000\nENDCHAR\nSTARTCHAR U_374A\nENCODING 14154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n8040\n3F80\n1100\n1100\n0A00\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_374B\nENCODING 14155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7FE0\n4040\nBF00\n0200\n0400\n0400\n0400\n0400\n0400\n1C00\nENDCHAR\nSTARTCHAR U_374C\nENCODING 14156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n8840\n0F80\n1100\n2200\n0600\n0900\n3080\nC060\nENDCHAR\nSTARTCHAR U_374D\nENCODING 14157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9040\n1F00\n1000\n3F80\n0080\nFFE0\n0080\n0680\n0100\nENDCHAR\nSTARTCHAR U_374E\nENCODING 14158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4220\n7FE0\n8840\n0400\n3F80\n0100\n0600\n1800\n6C00\n03E0\nENDCHAR\nSTARTCHAR U_374F\nENCODING 14159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FE0\n4040\n8480\n0A00\n1100\n2980\nC960\n0900\n1100\n2100\nENDCHAR\nSTARTCHAR U_3750\nENCODING 14160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n8A40\n1100\n2480\nC460\n0800\n1080\n27C0\n7840\nENDCHAR\nSTARTCHAR U_3751\nENCODING 14161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n8820\n0400\nFFE0\n0800\n0FC0\n0840\n1040\n2040\nC180\nENDCHAR\nSTARTCHAR U_3752\nENCODING 14162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n8020\n0400\n7FC0\n0400\n0400\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3753\nENCODING 14163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n0E00\n3180\nC060\n3F80\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3754\nENCODING 14164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\nFFC0\n8840\n0400\nFFC0\n1200\n6180\n1E00\n0C00\nF3C0\nENDCHAR\nSTARTCHAR U_3755\nENCODING 14165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFC0\n9040\n0800\n6280\n9E40\n0000\n7F80\n2100\n1E00\nE1C0\nENDCHAR\nSTARTCHAR U_3756\nENCODING 14166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8420\n0F80\n3900\n0600\n7C00\n0780\n3880\n0500\n7E00\nENDCHAR\nSTARTCHAR U_3757\nENCODING 14167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8420\n3F80\n2080\n3F80\n2080\n3F80\n2480\n2700\n38C0\nENDCHAR\nSTARTCHAR U_3758\nENCODING 14168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n0400\nFFE0\n0000\n3F80\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3759\nENCODING 14169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n8040\n3FC0\n0400\n3F80\n0400\n7FC0\n0000\nFFE0\n2080\nENDCHAR\nSTARTCHAR U_375A\nENCODING 14170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n8040\n7080\n1700\n2500\n35C0\n5500\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_375B\nENCODING 14171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n9040\n2FC0\n4200\n9FC0\n5240\n5540\n58C0\n5040\n5FC0\nENDCHAR\nSTARTCHAR U_375C\nENCODING 14172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\nA140\n7FC0\n2100\nFFE0\n0000\n7FC0\n4640\n5840\n7FC0\nENDCHAR\nSTARTCHAR U_375D\nENCODING 14173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n2080\nFBE0\n2080\n71C0\nAAC0\n24A0\n2080\n2080\nENDCHAR\nSTARTCHAR U_375E\nENCODING 14174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n7FC0\n0A00\n7BC0\n4040\n4040\n7BC0\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_375F\nENCODING 14175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nBFA0\n0000\n3F80\n2080\n3F80\n2080\n3F80\n0A20\nF3E0\nENDCHAR\nSTARTCHAR U_3760\nENCODING 14176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n3F80\n2080\n3F80\n2080\n3F80\n0400\n7FC0\n1100\nENDCHAR\nSTARTCHAR U_3761\nENCODING 14177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n7E00\n25E0\n3D20\n2520\n3D40\n2480\n7D40\n0620\nENDCHAR\nSTARTCHAR U_3762\nENCODING 14178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n80A0\n3F80\n0400\n3F80\n2480\n3F80\n4540\n4F40\n4040\nENDCHAR\nSTARTCHAR U_3763\nENCODING 14179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\nFFE0\nA020\n7BC0\n2140\nFA40\n24C0\n0400\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_3764\nENCODING 14180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n5120\nFFE0\n1100\n7FC0\n2480\n3F80\n2480\nFFE0\n2080\nENDCHAR\nSTARTCHAR U_3765\nENCODING 14181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n8020\n5920\n5540\n7FE0\n1100\nF380\n5540\n5920\n9100\nENDCHAR\nSTARTCHAR U_3766\nENCODING 14182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n9220\n1FC0\n7200\n1F80\n1200\n7FE0\n0980\n1040\n60C0\nENDCHAR\nSTARTCHAR U_3767\nENCODING 14183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n7FC0\n1100\n0E00\n3580\n5540\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3768\nENCODING 14184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8420\n3F80\n0400\nFFE0\n2080\n3F80\n2240\nE980\n30E0\nENDCHAR\nSTARTCHAR U_3769\nENCODING 14185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8820\n7FC0\n4480\n7FE0\n4480\n7F80\n5480\n4D00\nB4C0\nENDCHAR\nSTARTCHAR U_376A\nENCODING 14186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA120\n7900\n27C0\nF940\n5340\nF9C0\n2140\nFA60\n2C20\nENDCHAR\nSTARTCHAR U_376B\nENCODING 14187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8420\n77C0\n5A40\n7580\n57E0\n5900\n67C0\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_376C\nENCODING 14188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFC80\nA5E0\n7880\n2080\n7BE0\n2080\nFC80\n4940\n4A40\n7C20\nENDCHAR\nSTARTCHAR U_376D\nENCODING 14189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n27C0\n24C0\nB540\nA7C0\nB900\n27C0\n2100\n3FE0\nENDCHAR\nSTARTCHAR U_376E\nENCODING 14190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\nA800\nFFC0\nAA40\nFA40\n0180\nF980\n7240\nAC20\nENDCHAR\nSTARTCHAR U_376F\nENCODING 14191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n3F80\n0400\nFFE0\n5140\nBFA0\n2A80\n2E80\n2180\nENDCHAR\nSTARTCHAR U_3770\nENCODING 14192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8820\n3F80\n2480\nFFE0\nA4A0\n5F40\n0400\n0F80\n3180\nENDCHAR\nSTARTCHAR U_3771\nENCODING 14193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n82A0\n5FC0\n5280\n7FE0\n1AA0\n7FE0\n5340\n5080\n9F00\nENDCHAR\nSTARTCHAR U_3772\nENCODING 14194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n82A0\n57C0\n5540\n77E0\n19A0\nF280\n5FE0\n9540\n1100\nENDCHAR\nSTARTCHAR U_3773\nENCODING 14195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0400\n0400\n2540\n24A0\n44A0\n8400\n1400\n0800\nENDCHAR\nSTARTCHAR U_3774\nENCODING 14196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\n7040\n07E0\n0040\nFA40\n5140\n5040\n5140\n5080\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_3775\nENCODING 14197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n2880\n3F80\n0000\n3F80\n0100\nFFE0\n2100\n1100\n0300\nENDCHAR\nSTARTCHAR U_3776\nENCODING 14198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4940\n7FC0\n0A20\n1220\nE1E0\n0100\nFFE0\n2100\n1100\n0300\nENDCHAR\nSTARTCHAR U_3777\nENCODING 14199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0080\n3F80\n0080\n7FC0\n2540\nFA60\n0520\nFFE0\n2100\n1300\nENDCHAR\nSTARTCHAR U_3778\nENCODING 14200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2580\nD460\n3F80\n2080\n3F80\n2080\n3F80\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_3779\nENCODING 14201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n2480\nC740\n0E20\nF200\n1F80\n6480\n3F80\n0B00\n12A0\nE1E0\nENDCHAR\nSTARTCHAR U_377A\nENCODING 14202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFC80\n5080\nFDC0\n55A0\nFEA0\n54A0\nFCC0\n5880\nD500\n5600\nENDCHAR\nSTARTCHAR U_377B\nENCODING 14203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFC80\n5080\nF9C0\nAAA0\nFCA0\n2080\nF8C0\n2080\n3900\nE600\nENDCHAR\nSTARTCHAR U_377C\nENCODING 14204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n43C0\nF880\n5080\n57E0\n5080\n5080\n5280\n5100\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_377D\nENCODING 14205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4080\nF880\n57A0\n51C0\n52C0\n5CA0\n5080\n5180\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_377E\nENCODING 14206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\nFBE0\n5100\n51E0\n5240\n5240\n55E0\n5000\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_377F\nENCODING 14207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\nFD40\n5500\n57C0\n5640\n5580\n5A80\n5460\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_3780\nENCODING 14208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\n4FE0\nFA80\n52A0\n55C0\n5480\n5940\n5620\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_3781\nENCODING 14209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\n47C0\nFC40\n57C0\n5400\n57C0\n5440\n53C0\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_3782\nENCODING 14210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n4640\nFD40\n5280\n57E0\n5240\n5240\n5180\n5660\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_3783\nENCODING 14211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5140\n4920\n8500\n27E0\n3140\n4940\n8540\n7940\n4A40\n4A40\n7C60\nENDCHAR\nSTARTCHAR U_3784\nENCODING 14212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4540\nFFE0\n5540\n57C0\n5540\n57C0\n5100\n90E0\n8FC0\nENDCHAR\nSTARTCHAR U_3785\nENCODING 14213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4540\nFFC0\n5540\n57C0\n5100\n5FE0\n5540\n5920\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_3786\nENCODING 14214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\n4280\nFC40\n57E0\n5040\n5740\n5540\n5740\n90A0\n8FE0\nENDCHAR\nSTARTCHAR U_3787\nENCODING 14215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4540\nFFC0\n5540\n5FE0\n5540\n5580\n5480\n5660\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_3788\nENCODING 14216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\nFC20\n57E0\n5400\n57E0\n5AA0\n5FE0\n52A0\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_3789\nENCODING 14217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n47E0\nF900\n53C0\n5100\n57E0\n5280\n5480\n5BE0\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_378A\nENCODING 14218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\nF900\nAFE0\nF940\n0140\n7140\n0140\nF940\n7240\nAA40\n2460\nENDCHAR\nSTARTCHAR U_378B\nENCODING 14219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4000\n7FC0\n5040\n4880\n4500\n4200\n8D80\nF060\nENDCHAR\nSTARTCHAR U_378C\nENCODING 14220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4000\n4F80\n4100\n7FE0\n4200\n4200\n8200\n8600\nENDCHAR\nSTARTCHAR U_378D\nENCODING 14221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4400\n4400\n5F80\n4480\n4C80\n4480\n8AA0\nB060\nENDCHAR\nSTARTCHAR U_378E\nENCODING 14222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4000\n5FC0\n5240\n5FC0\n5000\n5020\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_378F\nENCODING 14223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4000\n5FC0\n4200\n5F80\n4080\n4300\n8C00\nB3E0\nENDCHAR\nSTARTCHAR U_3790\nENCODING 14224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4800\n4400\n7FC0\n4000\n5080\n4880\n4900\nBFE0\nENDCHAR\nSTARTCHAR U_3791\nENCODING 14225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n4000\n4200\n5AE0\n4200\n5AE0\n4200\n8220\n81E0\nENDCHAR\nSTARTCHAR U_3792\nENCODING 14226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n4400\n5FC0\n5040\n5FC0\n5040\n5FC0\n9040\n9FC0\nENDCHAR\nSTARTCHAR U_3793\nENCODING 14227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n5000\n5FC0\n5020\n4FE0\n5040\n5FC0\n9040\n9FC0\nENDCHAR\nSTARTCHAR U_3794\nENCODING 14228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4400\n4F80\n5500\n46E0\n5B20\n4540\n8180\n9E00\nENDCHAR\nSTARTCHAR U_3795\nENCODING 14229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4880\n5FC0\n68A0\n4F80\n4880\n4F80\n8880\n8980\nENDCHAR\nSTARTCHAR U_3796\nENCODING 14230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4200\n7FE0\n4200\n5FC0\n5240\n57C0\n8A80\nB260\nENDCHAR\nSTARTCHAR U_3797\nENCODING 14231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4280\n4240\n7FE0\n5220\n4B40\n4A80\nB260\n8600\nENDCHAR\nSTARTCHAR U_3798\nENCODING 14232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4000\n5FE0\n4600\n5B20\n4DC0\n5B40\n8520\n9A00\nENDCHAR\nSTARTCHAR U_3799\nENCODING 14233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4200\n4F80\n4200\n5FC0\n4220\n5BE0\n8A80\nB640\nENDCHAR\nSTARTCHAR U_379A\nENCODING 14234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4000\n4F80\n4200\n7FE0\n5240\n5AC0\n5240\n9FC0\nENDCHAR\nSTARTCHAR U_379B\nENCODING 14235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4A00\n73C0\n4A20\n71E0\n5240\n53C0\n5240\n93C0\nENDCHAR\nSTARTCHAR U_379C\nENCODING 14236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4B80\n5100\n6FE0\n5540\n7FE0\n5240\n9180\n9660\nENDCHAR\nSTARTCHAR U_379D\nENCODING 14237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n7FE0\n4D00\n48A0\n7E40\nAAA0\nBFC0\n2040\n3FC0\n2000\n4000\nENDCHAR\nSTARTCHAR U_379E\nENCODING 14238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4A80\n72C0\n4D20\n7100\n55C0\n5500\n9700\n98E0\nENDCHAR\nSTARTCHAR U_379F\nENCODING 14239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4880\n7FE0\n4500\n5FC0\n5540\n7FE0\n4880\nB060\nENDCHAR\nSTARTCHAR U_37A0\nENCODING 14240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n4200\n7FE0\n54A0\n4FC0\n7960\n4FC0\n8A80\nB260\nENDCHAR\nSTARTCHAR U_37A1\nENCODING 14241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n4880\n7DE0\n4880\n7DE0\n4A20\n5D40\nA880\n8C60\nENDCHAR\nSTARTCHAR U_37A2\nENCODING 14242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n4440\n4440\n4440\n4440\n7FC0\n0400\n0400\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_37A3\nENCODING 14243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n1800\nE000\n1900\n60C0\n9FA0\n0880\n3080\nC300\nENDCHAR\nSTARTCHAR U_37A4\nENCODING 14244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n4440\n7FC0\n0000\n0400\n0400\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_37A5\nENCODING 14245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n4440\n7FC0\n0000\n0800\n0400\n0A00\n1200\n2180\nC060\nENDCHAR\nSTARTCHAR U_37A6\nENCODING 14246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n2280\n2280\nAA80\nAA80\nAA80\nAA80\nBAA0\nEAA0\n04A0\n1860\nENDCHAR\nSTARTCHAR U_37A7\nENCODING 14247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n4440\n7FC0\n0000\n7FC0\n0880\n11E0\n1020\n2020\nC0C0\nENDCHAR\nSTARTCHAR U_37A8\nENCODING 14248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\n2080\nA900\nA900\nAFE0\nA900\nB900\nE900\n0100\n0300\nENDCHAR\nSTARTCHAR U_37A9\nENCODING 14249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n4440\n7FC0\n0000\n1F00\n1100\n1D00\n1320\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_37AA\nENCODING 14250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0080\n3F80\n0080\nFFE0\n0000\n0400\n4440\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_37AB\nENCODING 14251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n4440\n7FC0\n0800\n0400\n7FC0\n0300\n0C00\n7000\n9FE0\nENDCHAR\nSTARTCHAR U_37AC\nENCODING 14252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n4440\n4440\n7FC0\n0000\n7FC0\n0400\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_37AD\nENCODING 14253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n1100\n2080\nC060\n0400\n4440\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_37AE\nENCODING 14254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n4440\n7FC0\n0800\n0800\n17C0\n2080\nCD00\n0200\n0180\nENDCHAR\nSTARTCHAR U_37AF\nENCODING 14255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n0040\nFFC0\n8000\n8020\n7FE0\n0000\n0400\n8420\n8420\nFFE0\nENDCHAR\nSTARTCHAR U_37B0\nENCODING 14256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n21E0\nAA80\nAC80\nA880\nABE0\nB880\nE880\n0080\n0080\nENDCHAR\nSTARTCHAR U_37B1\nENCODING 14257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n8420\n8420\nFFE0\n0000\n7FC0\n4040\n7FC0\n4040\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_37B2\nENCODING 14258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n2080\nABE0\nAAA0\nAAA0\nAAA0\nBBE0\nE880\n0080\n0080\nENDCHAR\nSTARTCHAR U_37B3\nENCODING 14259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2480\n2280\nA880\nAC80\nAA80\nA8E0\nBF80\nE880\n0080\n0080\nENDCHAR\nSTARTCHAR U_37B4\nENCODING 14260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2380\nAA80\nAA80\nABE0\nAA80\nAA80\nAA80\nFAA0\n0360\n0220\nENDCHAR\nSTARTCHAR U_37B5\nENCODING 14261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n8420\n8420\nFFE0\n0800\n0400\nFFE0\n1100\n0E00\n1300\nE0E0\nENDCHAR\nSTARTCHAR U_37B6\nENCODING 14262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n27E0\nAA40\nAA40\nAA80\nAA80\nB900\nE280\n0440\n0820\nENDCHAR\nSTARTCHAR U_37B7\nENCODING 14263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n4440\n7FC0\n1800\n6000\n7FC0\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_37B8\nENCODING 14264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n4440\n7FC0\n0000\nFFE0\n0C00\n3700\nC4C0\n0420\n0400\nENDCHAR\nSTARTCHAR U_37B9\nENCODING 14265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2040\n2040\nAF40\nA940\nA940\nAF40\nB840\nE840\n0040\n00C0\nENDCHAR\nSTARTCHAR U_37BA\nENCODING 14266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n4440\n7FC0\n2000\n3FC0\n4400\nFFE0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_37BB\nENCODING 14267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0000\n3F80\n2080\nFFE0\n1000\n3F80\n0080\n0700\nENDCHAR\nSTARTCHAR U_37BC\nENCODING 14268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0200\n0420\nF640\n0D80\n3480\nC460\n0C00\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_37BD\nENCODING 14269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\n2FE0\nA900\nA920\nA960\nA940\nB940\nE880\n8CA0\n0960\nENDCHAR\nSTARTCHAR U_37BE\nENCODING 14270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\n2220\nABE0\nAA00\nAA80\nAAA0\nBAC0\nEC80\n04A0\n08E0\nENDCHAR\nSTARTCHAR U_37BF\nENCODING 14271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0000\n0400\n7FC0\n0400\nFFE0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_37C0\nENCODING 14272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n7E00\n0400\nFFE0\n1500\nE4E0\n0000\n0400\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_37C1\nENCODING 14273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2200\n2200\nAAE0\nAA40\nAA40\nABE0\nBA40\nEA40\n0440\n0440\nENDCHAR\nSTARTCHAR U_37C2\nENCODING 14274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n22C0\nAA40\nAFE0\nAA40\nAAC0\nBA40\nEBE0\n0040\n00C0\nENDCHAR\nSTARTCHAR U_37C3\nENCODING 14275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2020\n23A0\nA820\nABA0\nAAA0\nAAA0\nAAA0\nFBA0\n0020\n00E0\nENDCHAR\nSTARTCHAR U_37C4\nENCODING 14276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n2FE0\nA100\nAFC0\nA900\nA900\nAFE0\nF900\n0100\n0100\nENDCHAR\nSTARTCHAR U_37C5\nENCODING 14277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nA920\nAAA0\nA820\nAFE0\nAA80\nBA80\nEAA0\n04A0\n0860\nENDCHAR\nSTARTCHAR U_37C6\nENCODING 14278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n22A0\n26C0\nAB80\nAAA0\nAA60\nA900\nAFE0\nF900\n0100\n0100\nENDCHAR\nSTARTCHAR U_37C7\nENCODING 14279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\n2540\nAD40\nABA0\nABA0\nA900\nAFC0\nF900\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_37C8\nENCODING 14280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\nA7E0\nA900\nAD40\nAB80\nA980\nBB40\nE520\n0920\n0300\nENDCHAR\nSTARTCHAR U_37C9\nENCODING 14281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n23E0\nAA20\nA880\nAA80\nABE0\nAC80\nBBE0\nC880\n0080\n0080\nENDCHAR\nSTARTCHAR U_37CA\nENCODING 14282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\n24A0\nAA40\nA800\nABC0\nA880\nAFE0\nF900\n0100\n0300\nENDCHAR\nSTARTCHAR U_37CB\nENCODING 14283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n27C0\nA440\nA440\nAFC0\nAA80\nBA80\nEAA0\n04A0\n0860\nENDCHAR\nSTARTCHAR U_37CC\nENCODING 14284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2240\nAA00\nAFA0\nAA40\nAAA0\nAA40\nBAA0\nED40\n05A0\n08E0\nENDCHAR\nSTARTCHAR U_37CD\nENCODING 14285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n23E0\nAA20\nABE0\nAA20\nABE0\nBA80\nEAA0\n0240\n0320\nENDCHAR\nSTARTCHAR U_37CE\nENCODING 14286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2700\n2920\nA4A0\nAA40\nA900\nAFE0\nB940\nEA40\n0180\n0660\nENDCHAR\nSTARTCHAR U_37CF\nENCODING 14287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2180\n2240\nAD20\nA880\nABE0\nA840\nBBE0\nEA20\n0220\n03E0\nENDCHAR\nSTARTCHAR U_37D0\nENCODING 14288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n2440\nA900\nA880\nAFE0\nAA00\nBA00\nEA00\n0200\n03E0\nENDCHAR\nSTARTCHAR U_37D1\nENCODING 14289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nA100\nA7E0\nAC20\nABC0\nA840\nBFE0\nE880\n0080\n0180\nENDCHAR\nSTARTCHAR U_37D2\nENCODING 14290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0000\n3F80\n1480\n1280\nFFE0\n2000\n5F80\n9080\n1F80\nENDCHAR\nSTARTCHAR U_37D3\nENCODING 14291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2660\n2180\nA660\nA100\nAFE0\nAA80\nAFE0\nBAA0\nEAA0\n02A0\n0080\nENDCHAR\nSTARTCHAR U_37D4\nENCODING 14292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0400\n0A00\n3180\n4440\n9F20\n0200\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_37D5\nENCODING 14293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0280\nF980\n8C80\n8A80\n88E0\n8F80\nF880\n0080\nENDCHAR\nSTARTCHAR U_37D6\nENCODING 14294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0000\n7FC0\n0400\n3F80\n0400\nFFE0\n0900\n3F80\n1100\nENDCHAR\nSTARTCHAR U_37D7\nENCODING 14295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2500\nB5A0\nCE60\nFFE0\n94A0\nD6A0\nA520\n8420\nFFE0\n8020\nENDCHAR\nSTARTCHAR U_37D8\nENCODING 14296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n0820\n2920\n2BA0\nA920\nABA0\nA820\nABA0\nAAA0\nFBA0\n1060\nENDCHAR\nSTARTCHAR U_37D9\nENCODING 14297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\n2240\nA240\nAFE0\nA800\nAFE0\nBC20\nEFE0\n0420\n07E0\nENDCHAR\nSTARTCHAR U_37DA\nENCODING 14298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\n73E0\n6940\nA880\n2360\n0400\n2480\n2480\n3F80\nENDCHAR\nSTARTCHAR U_37DB\nENCODING 14299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2480\n3F80\n0000\n2240\nF7E0\n3240\n63C0\nA240\n2240\n63C0\nENDCHAR\nSTARTCHAR U_37DC\nENCODING 14300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\n0800\n8880\nFF80\n0400\nEFC0\n2880\nF200\n8A80\nEA40\n3240\nC600\nENDCHAR\nSTARTCHAR U_37DD\nENCODING 14301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\n2220\nAA40\nA940\nAFE0\nA800\nBBE0\nEA20\n0220\n03E0\nENDCHAR\nSTARTCHAR U_37DE\nENCODING 14302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27E0\nAA40\nA980\nAEE0\nA800\nAA80\nBFE0\nEA40\n0180\n06E0\nENDCHAR\nSTARTCHAR U_37DF\nENCODING 14303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n1100\n7FC0\n1100\nFFE0\n3180\n5F40\n9520\n1200\n1FC0\nENDCHAR\nSTARTCHAR U_37E0\nENCODING 14304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nAC60\nAFE0\nA920\nAD60\nAD60\nAFE0\nF820\n0860\n0820\nENDCHAR\nSTARTCHAR U_37E1\nENCODING 14305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3F80\n1500\n3F80\n0400\n7FC0\n0A00\n1F80\n6A40\n88A0\n0F80\nENDCHAR\nSTARTCHAR U_37E2\nENCODING 14306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3F80\n0400\n3F80\n0A00\nFFE0\n0080\n1E80\n1280\n1E80\n0100\nENDCHAR\nSTARTCHAR U_37E3\nENCODING 14307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2540\n2F40\nA540\nAF20\nAEA0\nA480\nAD00\nFD40\n07A0\n0400\nENDCHAR\nSTARTCHAR U_37E4\nENCODING 14308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3F80\n0100\n1F00\n0100\nFFE0\n0400\n4480\n2500\n4480\n8C60\nENDCHAR\nSTARTCHAR U_37E5\nENCODING 14309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3F80\n0A00\n3F80\n0400\nFFE0\n0A00\n3580\nDE60\n0B20\n3C00\nENDCHAR\nSTARTCHAR U_37E6\nENCODING 14310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3F80\n0000\n7FE0\n8420\n7FC0\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_37E7\nENCODING 14311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0000\n7BC0\n4A40\n4A40\nFFE0\n1000\n3F80\n0080\n0700\nENDCHAR\nSTARTCHAR U_37E8\nENCODING 14312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2920\nAFE0\nA000\nAFE0\nA900\nAFE0\nBAA0\nEAA0\n0AA0\n0860\nENDCHAR\nSTARTCHAR U_37E9\nENCODING 14313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF920\n8BE0\nFA40\n9680\nF900\n9680\nC860\n0400\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_37EA\nENCODING 14314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n22A0\nABE0\nAAA0\nABE0\nA800\nAFE0\nBB00\nCAA0\n0240\n0320\nENDCHAR\nSTARTCHAR U_37EB\nENCODING 14315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2420\nA7E0\nAC20\nAFE0\nA900\nBD20\nEBC0\n0540\n0920\nENDCHAR\nSTARTCHAR U_37EC\nENCODING 14316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0000\n75C0\n4440\n75C0\n4440\n7FC0\n3180\n1E00\n73C0\nENDCHAR\nSTARTCHAR U_37ED\nENCODING 14317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\n0220\n23E0\n2240\nABE0\nAA40\nABE0\nAA20\nFBE0\n0220\n03E0\nENDCHAR\nSTARTCHAR U_37EE\nENCODING 14318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nA7E0\nA5A0\nAA40\nA940\nAFE0\nB900\nE280\n0440\n0820\nENDCHAR\nSTARTCHAR U_37EF\nENCODING 14319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3F80\n0400\n7FE0\n88A0\n3300\n4E00\n1100\n3F80\n5140\n1F00\nENDCHAR\nSTARTCHAR U_37F0\nENCODING 14320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nA7C0\nAC40\nAFC0\nAC40\nAFC0\nA900\nFFE0\n0440\n0820\nENDCHAR\nSTARTCHAR U_37F1\nENCODING 14321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nA7E0\nA900\nAFE0\nA900\nA900\nAFE0\nF800\n0540\n0AA0\nENDCHAR\nSTARTCHAR U_37F2\nENCODING 14322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2900\nABE0\nAA20\nABE0\nAA20\nABE0\nA880\nFAC0\n14A0\n2180\nENDCHAR\nSTARTCHAR U_37F3\nENCODING 14323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nAFE0\nAAA0\nAAA0\nAFE0\nA900\nAFE0\nFB80\n0540\n0920\nENDCHAR\nSTARTCHAR U_37F4\nENCODING 14324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27E0\nA520\nAFE0\nAD20\nAFE0\nAA80\nBAE0\nE280\n04A0\n1860\nENDCHAR\nSTARTCHAR U_37F5\nENCODING 14325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0000\n7FC0\n4A40\n7FC0\n0000\n7FC0\n1700\n1400\nFFE0\nENDCHAR\nSTARTCHAR U_37F6\nENCODING 14326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0000\n7FC0\n4400\n5FC0\n5FC0\n5040\n5FC0\n8A80\nB660\nENDCHAR\nSTARTCHAR U_37F7\nENCODING 14327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2EE0\nA440\nA900\nAA80\nAC40\nABA0\nB800\nE7C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_37F8\nENCODING 14328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nAC40\nAFC0\nAC40\nAFC0\nA900\nBFE0\nE140\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_37F9\nENCODING 14329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3E80\n2B60\n2AA0\nAEA0\nAAA0\nAEA0\nAAA0\nBAA0\nCFE0\n1A80\n0280\nENDCHAR\nSTARTCHAR U_37FA\nENCODING 14330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n2480\nFFE0\n2480\n3F80\n7FC0\n5540\nFFE0\n0E00\n3B80\nENDCHAR\nSTARTCHAR U_37FB\nENCODING 14331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\nFD80\n1100\nFDE0\n9540\nFD40\n1240\nFE40\n1400\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_37FC\nENCODING 14332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n2100\nF900\n21E0\n7240\n2540\nF980\n3880\n4940\n9620\nENDCHAR\nSTARTCHAR U_37FD\nENCODING 14333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nAFE0\nAAA0\nAFE0\nA800\nABC0\nB800\nE7E0\n0540\n0B20\nENDCHAR\nSTARTCHAR U_37FE\nENCODING 14334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FC0\nA940\nAFE0\nA940\nAFC0\nAD40\nAFC0\nFD40\n17C0\n1540\nENDCHAR\nSTARTCHAR U_37FF\nENCODING 14335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nA440\nA920\nAFE0\nAA80\nAC60\nBA40\nEFE0\n0240\n0440\nENDCHAR\nSTARTCHAR U_3800\nENCODING 14336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3FE0\n2000\n3FE0\nAA20\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_3801\nENCODING 14337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4280\nD780\nD440\nDEE0\nD7A0\nDB60\nD580\nF660\n0180\n0E00\nENDCHAR\nSTARTCHAR U_3802\nENCODING 14338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3F80\nA500\nAFE0\nA520\nBF40\nA940\nAF40\nFA80\n0B40\n1620\nENDCHAR\nSTARTCHAR U_3803\nENCODING 14339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA440\nAA80\nAFE0\nA920\nABA0\nA920\nFBA0\n0AA0\n0BA0\nENDCHAR\nSTARTCHAR U_3804\nENCODING 14340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0000\nFBE0\n28A0\nFBE0\n1540\n3F80\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3805\nENCODING 14341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n2400\n27E0\n4FC0\nB7C0\n6440\nA7E0\n2C80\n2300\n2EE0\nENDCHAR\nSTARTCHAR U_3806\nENCODING 14342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\nDEE0\nD7C0\nD540\nD7C0\nD540\nD7C0\nF100\n9FE0\n0100\nENDCHAR\nSTARTCHAR U_3807\nENCODING 14343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n2000\nFD20\n0100\nFFE0\n8900\nF980\n2280\n7280\nACE0\nENDCHAR\nSTARTCHAR U_3808\nENCODING 14344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nAEE0\nAAA0\nAEE0\nABA0\nA920\nABA0\nF920\n0BA0\n0860\nENDCHAR\nSTARTCHAR U_3809\nENCODING 14345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA440\nBFE0\nAFE0\nA920\nAFE0\nA900\nFFC0\n0100\n1FE0\nENDCHAR\nSTARTCHAR U_380A\nENCODING 14346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2100\nAFE0\nA900\nAFE0\nA900\nA8E0\nA940\nFB60\n1140\n17E0\nENDCHAR\nSTARTCHAR U_380B\nENCODING 14347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n1100\n7FC0\n4A40\n7FC0\n0000\nFFE0\n3FC0\n0040\n0380\nENDCHAR\nSTARTCHAR U_380C\nENCODING 14348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n4900\nFD00\n4BE0\n7CA0\n7880\n4880\nFD40\n4940\n8620\nENDCHAR\nSTARTCHAR U_380D\nENCODING 14349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n1200\n3FC0\n6200\nBFC0\n3FC0\n2600\nFFE0\n1580\nE460\nENDCHAR\nSTARTCHAR U_380E\nENCODING 14350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\n2880\nAFE0\nA880\nAFE0\nA900\nBFE0\nE100\n0540\n0920\nENDCHAR\nSTARTCHAR U_380F\nENCODING 14351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2EE0\nA440\nAFE0\nA540\nAFE0\nA540\nAFE0\nF900\n07C0\n0100\nENDCHAR\nSTARTCHAR U_3810\nENCODING 14352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0180\n3E00\n0440\nFFE0\n2A80\n7FC0\nAAA0\n2E80\n2180\nENDCHAR\nSTARTCHAR U_3811\nENCODING 14353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3F80\n0000\n7FC0\n4A40\nFFE0\n0A00\n7BC0\n0A00\nFBE0\n1200\nENDCHAR\nSTARTCHAR U_3812\nENCODING 14354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FA0\n2520\n2FA0\nAAA0\nADA0\nAFA0\nA8A0\nBFA0\nE720\n8AA0\n1260\nENDCHAR\nSTARTCHAR U_3813\nENCODING 14355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\n2A40\nAFE0\nA820\nABC0\nA920\nBAC0\nEDA0\n82A0\n0580\nENDCHAR\nSTARTCHAR U_3814\nENCODING 14356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2480\n3F80\n0100\n3BC0\n2A80\n5FE0\n9100\n2BC0\n3900\n0100\nENDCHAR\nSTARTCHAR U_3815\nENCODING 14357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0200\n77C0\n5540\n57C0\n5540\n57C0\n72A0\n44C0\n48E0\nENDCHAR\nSTARTCHAR U_3816\nENCODING 14358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n1100\n7FC0\n0400\n3F80\n1240\nFFE0\n1940\n71A0\n3660\nENDCHAR\nSTARTCHAR U_3817\nENCODING 14359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2B60\nADA0\nAFE0\nABA0\nAD60\nB100\nEFE0\n8240\n0C20\nENDCHAR\nSTARTCHAR U_3818\nENCODING 14360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8420\nFFE0\n4860\n8E20\nE8E0\n8E20\nE6E0\n8A20\nFFE0\n3180\nC060\nENDCHAR\nSTARTCHAR U_3819\nENCODING 14361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2A40\nAFE0\nA820\nABC0\nA920\nBB40\nEDC0\n82A0\n0580\nENDCHAR\nSTARTCHAR U_381A\nENCODING 14362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n3B40\n2A40\nBFE0\nAA40\nBF40\nA4C0\nBE40\nE440\n8640\n18C0\nENDCHAR\nSTARTCHAR U_381B\nENCODING 14363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2EE0\n2A80\nAFE0\nAA80\nABE0\nAA80\nBBE0\nEA40\n8180\n0E60\nENDCHAR\nSTARTCHAR U_381C\nENCODING 14364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\n2C40\n2880\nAFE0\nA8A0\nAC80\nA8E0\nFF80\n8880\n0D80\n1260\nENDCHAR\nSTARTCHAR U_381D\nENCODING 14365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\n2A40\nAFE0\nAA40\nADA0\nAA40\nBBC0\nEA40\n83C0\n0420\nENDCHAR\nSTARTCHAR U_381E\nENCODING 14366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3540\n55E0\nBFA0\n5540\nCE40\n44A0\n5F20\n0400\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_381F\nENCODING 14367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2740\n22E0\n2720\n2A60\nAFA0\nAAE0\nA900\nBA80\nED60\n8380\n0540\nENDCHAR\nSTARTCHAR U_3820\nENCODING 14368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n2100\n2FE0\nA940\nAFE0\nAAA0\nABE0\nAAA0\nFFE0\n8AA0\n1FE0\nENDCHAR\nSTARTCHAR U_3821\nENCODING 14369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n2FE0\n2280\nABC0\nAA80\nABE0\nAAA0\nFF40\n8640\n0A80\n0360\nENDCHAR\nSTARTCHAR U_3822\nENCODING 14370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n2480\n3F80\n2480\n3F80\n1540\nFFE0\n2240\nE980\n3060\nENDCHAR\nSTARTCHAR U_3823\nENCODING 14371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n2920\n2A40\nAFE0\nAAC0\nAF60\nAA40\nA900\nF5C0\n9500\n2FE0\nENDCHAR\nSTARTCHAR U_3824\nENCODING 14372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n2FE0\n2AA0\nAEE0\nAA80\nAFE0\nAA80\nFFE0\n8540\n0C80\n0660\nENDCHAR\nSTARTCHAR U_3825\nENCODING 14373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n2540\n27C0\nA540\nAFE0\nAAA0\nAFE0\nA900\nFBC0\n8900\n07E0\nENDCHAR\nSTARTCHAR U_3826\nENCODING 14374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0AA0\n2FE0\n2AA0\n2FE0\nA800\nAFE0\nAA40\nABC0\nFA40\n8180\n07E0\nENDCHAR\nSTARTCHAR U_3827\nENCODING 14375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nAA40\nAFE0\nAB40\nAEE0\nAA80\nFEE0\n8A80\n0EE0\n1280\nENDCHAR\nSTARTCHAR U_3828\nENCODING 14376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n2EE0\n2540\nAFE0\nAAA0\nAFE0\nAD20\nABE0\nFEA0\n8A20\n0D60\nENDCHAR\nSTARTCHAR U_3829\nENCODING 14377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n4400\n4A00\n7180\n4000\n7FC0\n2480\n2480\n2480\n4480\n8460\nENDCHAR\nSTARTCHAR U_382A\nENCODING 14378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\nFFE0\n0400\n0400\n0400\n0780\n0400\n0400\n0400\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_382B\nENCODING 14379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2240\n2340\n2AC0\n3240\nC460\n3F80\n0400\nFFE0\n0A00\n71C0\nENDCHAR\nSTARTCHAR U_382C\nENCODING 14380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2220\n3A20\nE3E0\n0400\n3F80\n0400\nFFE0\n0900\n1080\n6060\nENDCHAR\nSTARTCHAR U_382D\nENCODING 14381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\n2080\n3880\nE3E0\n0000\nFBE0\n2080\n2080\n3880\nC7E0\nENDCHAR\nSTARTCHAR U_382E\nENCODING 14382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n29E0\nFE80\n2880\nAA80\n6C80\nFE80\n4480\n7C80\n4480\n7FE0\nENDCHAR\nSTARTCHAR U_382F\nENCODING 14383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0080\n4080\n7F80\n4000\n4000\n7FC0\n4040\n4040\n7FC0\n4000\nENDCHAR\nSTARTCHAR U_3830\nENCODING 14384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nFBC0\n2A40\n4A40\n9BC0\n0000\n7F00\n0100\n7F00\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_3831\nENCODING 14385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0080\n3F80\n2040\n7FE0\n1100\n1F00\n1100\nFFE0\n1100\n2080\nENDCHAR\nSTARTCHAR U_3832\nENCODING 14386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFA60\nAA80\nAB00\nAA00\nAA00\nAA20\nBA20\n2220\n21E0\nENDCHAR\nSTARTCHAR U_3833\nENCODING 14387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\n0400\n1B00\nE0E0\n0400\n3FC0\n2440\n2440\n2540\n2480\n0400\nENDCHAR\nSTARTCHAR U_3834\nENCODING 14388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF920\nA920\nAB20\nAD20\nA920\nA920\nBA20\n22A0\n2440\nENDCHAR\nSTARTCHAR U_3835\nENCODING 14389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2000\n3FC0\n0400\n7FC0\n4440\n4440\n4440\n44C0\n0400\nENDCHAR\nSTARTCHAR U_3836\nENCODING 14390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2200\nFB80\nAA80\nAA80\nAA80\nAA80\nAAA0\nBAA0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_3837\nENCODING 14391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2240\nFA80\nAAE0\nAA20\nAA20\nAA40\nAB40\nBA80\n2540\n2A20\nENDCHAR\nSTARTCHAR U_3838\nENCODING 14392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFBC0\nA900\nA900\nAFE0\nA900\nA900\nBA80\n2440\n2820\nENDCHAR\nSTARTCHAR U_3839\nENCODING 14393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFA80\nAC40\nA820\nAA80\nAA80\nAA80\nBA80\n2280\n2480\nENDCHAR\nSTARTCHAR U_383A\nENCODING 14394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nF8C0\nAAA0\nAAA0\nAC80\nA8A0\nA840\nB880\n2300\n2C00\nENDCHAR\nSTARTCHAR U_383B\nENCODING 14395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n3FC0\n0500\nFFE0\n1400\n3FC0\nE440\n2440\n2540\n2480\n0400\nENDCHAR\nSTARTCHAR U_383C\nENCODING 14396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2300\nFA00\nAA00\nABE0\nAA40\nAA40\nAA40\nBA40\n2440\n2840\nENDCHAR\nSTARTCHAR U_383D\nENCODING 14397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nFC40\nAA80\nA900\nAA80\nAC60\nA900\nB880\n2300\n2080\nENDCHAR\nSTARTCHAR U_383E\nENCODING 14398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n3A40\n4AC0\nB220\n15E0\n2400\nFFC0\n2440\n2540\n2480\n0400\nENDCHAR\nSTARTCHAR U_383F\nENCODING 14399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n5AC0\n5300\n5A20\nE5E0\n0400\n3FC0\n2440\n2440\n25C0\n0400\nENDCHAR\nSTARTCHAR U_3840\nENCODING 14400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1480\n1500\nFFE0\n8420\n9520\n94A0\nA460\nC420\n8420\n8060\nENDCHAR\nSTARTCHAR U_3841\nENCODING 14401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF980\nAA40\nADA0\nA800\nABC0\nB900\nABC0\n2040\n20C0\nENDCHAR\nSTARTCHAR U_3842\nENCODING 14402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC20\n4120\n7D20\nC920\n3120\n2420\nC460\n7FC0\n4440\n44C0\n0400\nENDCHAR\nSTARTCHAR U_3843\nENCODING 14403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\nFAA0\nAB00\nABE0\nA800\nAAA0\nAAA0\nBAA0\n22A0\n2420\nENDCHAR\nSTARTCHAR U_3844\nENCODING 14404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFFE0\nA820\nABA0\nAAA0\nABA0\nAAA0\nBBA0\n20A0\n2040\nENDCHAR\nSTARTCHAR U_3845\nENCODING 14405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n21E0\nFB20\nA8C0\nA880\nAB40\nA8E0\nBB20\nA8C0\n2080\n2700\nENDCHAR\nSTARTCHAR U_3846\nENCODING 14406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFA00\nAA00\nABE0\nA800\nAAA0\nBAA0\nAAA0\n22A0\n2420\nENDCHAR\nSTARTCHAR U_3847\nENCODING 14407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2A80\nFA80\nAE80\nAA80\nAE80\nAA80\nBA80\nAEA0\n32A0\n2260\nENDCHAR\nSTARTCHAR U_3848\nENCODING 14408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2240\nFC80\nABE0\nAAA0\nAAA0\nABE0\nB940\nA940\n2240\n2460\nENDCHAR\nSTARTCHAR U_3849\nENCODING 14409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2240\nFBE0\nAE40\nA8A0\nA920\nAEC0\nBA40\nAAA0\n23E0\n2D20\nENDCHAR\nSTARTCHAR U_384A\nENCODING 14410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21C0\nFA40\nAC80\nA800\nAB40\nACE0\nB420\n26E0\n2420\n27E0\nENDCHAR\nSTARTCHAR U_384B\nENCODING 14411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n23E0\nF940\nAAA0\nAFE0\nAAA0\nABE0\nBAA0\nABE0\n2080\n20E0\nENDCHAR\nSTARTCHAR U_384C\nENCODING 14412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nA7E0\nFC20\nABE0\nAA20\nBBE0\nAA20\n23E0\n2220\n2260\nENDCHAR\nSTARTCHAR U_384D\nENCODING 14413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3F80\n2680\n3880\n3F80\n0400\nFFE0\n2480\nDF60\n1500\n1500\nENDCHAR\nSTARTCHAR U_384E\nENCODING 14414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27C0\nF900\nAFE0\nAA80\nAAC0\nAD20\nBA80\nAB40\n2080\n2700\nENDCHAR\nSTARTCHAR U_384F\nENCODING 14415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nFC40\nABA0\nA800\nAE20\nAAA0\nBEA0\nAAA0\n2E20\n3260\nENDCHAR\nSTARTCHAR U_3850\nENCODING 14416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nFFE0\nA800\nAE20\nAAA0\nAEA0\nBAA0\n2EA0\n2A20\n2A60\nENDCHAR\nSTARTCHAR U_3851\nENCODING 14417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3880\nE4A0\n22A0\nFAC0\n3080\n6940\nA620\n0400\n7FC0\n4440\n44C0\nENDCHAR\nSTARTCHAR U_3852\nENCODING 14418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF880\nAFE0\nA900\nABC0\nAAC0\nAB40\nBAC0\n2B40\n33C0\nENDCHAR\nSTARTCHAR U_3853\nENCODING 14419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nFFE0\nA900\nAFC0\nA940\nAFC0\nA940\nBFE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_3854\nENCODING 14420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n11E0\nFF20\n1540\n3080\nD360\n0400\n7FC0\n4440\n44C0\n0400\nENDCHAR\nSTARTCHAR U_3855\nENCODING 14421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2EE0\nA540\nF900\nAFC0\nA940\nA940\nBFE0\nA900\n2280\n2C60\nENDCHAR\nSTARTCHAR U_3856\nENCODING 14422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2080\nFFE0\nA880\nABE0\nAAA0\nABE0\nBAA0\nABE0\n2080\n27E0\nENDCHAR\nSTARTCHAR U_3857\nENCODING 14423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2F00\nF9C0\nA900\nAFE0\nA940\nAFE0\nAA80\n2A80\n32A0\n2460\nENDCHAR\nSTARTCHAR U_3858\nENCODING 14424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nFA80\nAFE0\nAAA0\nAFE0\nAAA0\nAFE0\nBA80\n26C0\n2AA0\nENDCHAR\nSTARTCHAR U_3859\nENCODING 14425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\nA920\nAAA0\nAFE0\nA880\nAEE0\nB880\n2AA0\n2CE0\nENDCHAR\nSTARTCHAR U_385A\nENCODING 14426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n27E0\nF940\nABE0\nA940\nAFE0\nAAA0\nABE0\nBAA0\n27E0\n2220\nENDCHAR\nSTARTCHAR U_385B\nENCODING 14427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nFA40\nA880\nAB40\nAA20\nABE0\nA800\nBD40\n2540\n2D60\nENDCHAR\nSTARTCHAR U_385C\nENCODING 14428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2760\nFDA0\nAAC0\nAE40\nABA0\nA800\nAFE0\nBA80\n22C0\n25A0\nENDCHAR\nSTARTCHAR U_385D\nENCODING 14429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n25A0\nFA40\nA8A0\nAFE0\nAA40\nAAE0\nAA40\nBAE0\n2240\n25E0\nENDCHAR\nSTARTCHAR U_385E\nENCODING 14430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n23E0\nFAA0\nAFE0\nAAA0\nABE0\nAAA0\nBFE0\nA920\n21C0\n2620\nENDCHAR\nSTARTCHAR U_385F\nENCODING 14431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nFA80\nAFE0\nAAA0\nAFE0\nAAA0\nBFE0\n24C0\n2740\n27C0\nENDCHAR\nSTARTCHAR U_3860\nENCODING 14432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F40\n25A0\nFAC0\nAA40\nAFE0\nA800\nABC0\nAA40\nBBC0\n2240\n27E0\nENDCHAR\nSTARTCHAR U_3861\nENCODING 14433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\nFF20\nA820\nAFE0\nA920\nAFA0\nB960\n2E20\n3320\n2C60\nENDCHAR\nSTARTCHAR U_3862\nENCODING 14434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFBC0\nAA40\nAFE0\nAAA0\nAFE0\nB900\nA9C0\n2240\n24C0\nENDCHAR\nSTARTCHAR U_3863\nENCODING 14435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\nFD00\n49E0\nFC20\n85E0\n2100\nFDE0\nA500\nA5E0\nAD00\n21E0\nENDCHAR\nSTARTCHAR U_3864\nENCODING 14436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\n26C0\nFFE0\nAA80\nAFE0\nA900\nAFC0\nA900\nBFE0\n2540\n2920\nENDCHAR\nSTARTCHAR U_3865\nENCODING 14437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2540\nFBE0\nA880\nABE0\nA840\nAFE0\nA840\nBBC0\n2540\n2BA0\nENDCHAR\nSTARTCHAR U_3866\nENCODING 14438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\nAFC0\nAB20\nADC0\nAB40\nAEC0\nBB40\n23C0\n2420\nENDCHAR\nSTARTCHAR U_3867\nENCODING 14439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\nAC40\nAB80\nAD60\nABC0\nAE60\nBBC0\n2240\n27E0\nENDCHAR\nSTARTCHAR U_3868\nENCODING 14440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2560\nFAC0\nAFE0\nAA80\nAAC0\nAE80\nAAC0\nBEA0\n22C0\n2720\nENDCHAR\nSTARTCHAR U_3869\nENCODING 14441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nEEE0\n4040\nAEA0\nE0E0\n5F40\nAAA0\nFFE0\n4440\n44C0\n0400\nENDCHAR\nSTARTCHAR U_386A\nENCODING 14442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2540\nFFE0\nA820\nAFE0\nAAA0\nAEA0\nBBC0\nAE60\n2980\n3660\nENDCHAR\nSTARTCHAR U_386B\nENCODING 14443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n2440\n27C0\n4440\nD7E0\n5520\n2920\n26A0\n5460\nF7A0\n4060\nENDCHAR\nSTARTCHAR U_386C\nENCODING 14444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n54A0\nE5C0\n54A0\nF5E0\n0480\nFFE0\n4240\n7A80\n49A0\n9E60\nENDCHAR\nSTARTCHAR U_386D\nENCODING 14445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9080\nA940\nB9C0\n9080\nA940\nFFE0\n9080\nA940\n9080\nA940\nFFE0\nENDCHAR\nSTARTCHAR U_386E\nENCODING 14446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5480\nFEE0\n5500\nFEE0\n1400\n7EE0\n4820\n6840\n5A80\n4D20\nB4E0\nENDCHAR\nSTARTCHAR U_386F\nENCODING 14447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4080\n4F00\n4200\n4200\n5FC0\n4200\n4200\n4220\n83E0\nENDCHAR\nSTARTCHAR U_3870\nENCODING 14448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n5FC0\n4200\n4200\n7FE0\n4200\n4200\n4200\n8600\nENDCHAR\nSTARTCHAR U_3871\nENCODING 14449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n4400\n4780\n4880\n4900\n5100\n4280\n4480\n9860\nENDCHAR\nSTARTCHAR U_3872\nENCODING 14450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4280\n4240\n5FE0\n4200\n4240\n4280\n4100\n42A0\n8C60\nENDCHAR\nSTARTCHAR U_3873\nENCODING 14451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n5FC0\n5200\n5200\n5FC0\n5100\n5120\n54A0\n9860\nENDCHAR\nSTARTCHAR U_3874\nENCODING 14452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4400\n4200\n5FC0\n4000\n4880\n4480\n4500\n4000\nBFE0\nENDCHAR\nSTARTCHAR U_3875\nENCODING 14453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n4500\n4880\n7760\n4000\n4FC0\n4080\n4300\n8100\nENDCHAR\nSTARTCHAR U_3876\nENCODING 14454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n4FC0\n4840\n4840\n4FC0\n4000\n4480\n4440\n8840\nENDCHAR\nSTARTCHAR U_3877\nENCODING 14455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n4200\n5FC0\n4200\n4700\n4A80\n5240\n6FA0\n8200\nENDCHAR\nSTARTCHAR U_3878\nENCODING 14456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4400\n4400\n4FE0\n5200\n43C0\n4200\n43C0\n4200\n8200\nENDCHAR\nSTARTCHAR U_3879\nENCODING 14457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n4F80\n4880\n4F80\n4880\n4F80\n4880\n4880\nBFE0\nENDCHAR\nSTARTCHAR U_387A\nENCODING 14458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n5FC0\n5040\n5FC0\n5040\n5040\n5FC0\n4000\nBFE0\nENDCHAR\nSTARTCHAR U_387B\nENCODING 14459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4400\n59E0\n5520\n5520\n5520\n5DA0\n5560\n4500\n8900\nENDCHAR\nSTARTCHAR U_387C\nENCODING 14460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4200\n5FC0\n5240\n5FC0\n5240\n5FC0\n4280\n4320\n9DE0\nENDCHAR\nSTARTCHAR U_387D\nENCODING 14461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4200\n5FC0\n4240\n7FE0\n4240\n5FC0\n4200\nBFE0\n8200\nENDCHAR\nSTARTCHAR U_387E\nENCODING 14462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4000\n5FC0\n5040\n5FC0\n5040\n5FC0\n5240\n9580\n98E0\nENDCHAR\nSTARTCHAR U_387F\nENCODING 14463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5040\n4880\n7FE0\n4200\n5240\n5FC0\n4200\n4400\n9800\nENDCHAR\nSTARTCHAR U_3880\nENCODING 14464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4200\n7FE0\n4200\n5FC0\n5240\n52C0\n4700\n4A80\nB260\nENDCHAR\nSTARTCHAR U_3881\nENCODING 14465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2200\n27C0\n2C40\n2380\n2E00\n21E0\n4E20\n41C0\n8F00\nENDCHAR\nSTARTCHAR U_3882\nENCODING 14466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2200\n2400\n2FC0\n2840\n2FC0\n2800\n4FC0\n4840\n8FC0\nENDCHAR\nSTARTCHAR U_3883\nENCODING 14467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2400\n2FC0\n2840\n2FC0\n2840\n2FC0\n4A40\n4980\n8CE0\nENDCHAR\nSTARTCHAR U_3884\nENCODING 14468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n5FC0\n4000\n4F80\n4880\n4F80\n4880\n4500\nBFE0\nENDCHAR\nSTARTCHAR U_3885\nENCODING 14469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n5FC0\n4200\n5FC0\n4200\n5FC0\n4880\n7FE0\n9080\nENDCHAR\nSTARTCHAR U_3886\nENCODING 14470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5240\n5FC0\n5240\n5FC0\n4200\n5FC0\n4200\n8200\nBFE0\nENDCHAR\nSTARTCHAR U_3887\nENCODING 14471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2100\n2FE0\n2000\n27C0\n2000\n27C0\n4440\n4440\n87C0\nENDCHAR\nSTARTCHAR U_3888\nENCODING 14472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4900\n4880\n5BE0\n6880\n4BE0\n4880\n4BE0\n4880\n8BE0\nENDCHAR\nSTARTCHAR U_3889\nENCODING 14473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4400\n5860\n4B80\n7C80\n4BE0\n5C80\n6A80\n48A0\n88E0\nENDCHAR\nSTARTCHAR U_388A\nENCODING 14474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2100\n2FE0\n2280\n2440\n2FE0\n2540\n4740\n4040\n80C0\nENDCHAR\nSTARTCHAR U_388B\nENCODING 14475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2480\n25E0\n2A40\n3980\n2B40\n28E0\n4B20\n48C0\n8B00\nENDCHAR\nSTARTCHAR U_388C\nENCODING 14476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n5FE0\n5440\n59C0\n5540\n55C0\n5C40\n50C0\n9040\nENDCHAR\nSTARTCHAR U_388D\nENCODING 14477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n5DC0\n4A80\n4200\n4F80\n4A80\n7FE0\n4480\n9840\nENDCHAR\nSTARTCHAR U_388E\nENCODING 14478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2000\n2FE0\n2100\n2FE0\n2500\n2920\n4D60\n4920\n8FE0\nENDCHAR\nSTARTCHAR U_388F\nENCODING 14479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n4500\n58C0\n6760\n5C40\n5540\n5D40\n5440\nACC0\nENDCHAR\nSTARTCHAR U_3890\nENCODING 14480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4000\n4F80\n4880\n4B80\n4A80\n5FE0\n54A0\n97A0\n9060\nENDCHAR\nSTARTCHAR U_3891\nENCODING 14481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4900\n7FE0\n5100\n5FC0\n5100\n5FE0\n4100\nBFE0\n8100\nENDCHAR\nSTARTCHAR U_3892\nENCODING 14482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4500\n5FE0\n52A0\n5FC0\n5580\n5680\n5580\n9680\nAFE0\nENDCHAR\nSTARTCHAR U_3893\nENCODING 14483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4200\n5FC0\n4500\n7FE0\n4880\n4F80\n4880\nBFE0\n8200\nENDCHAR\nSTARTCHAR U_3894\nENCODING 14484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4A40\n5240\n6340\n4CA0\n5000\n7280\n52E0\n5380\n94E0\nENDCHAR\nSTARTCHAR U_3895\nENCODING 14485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4940\n52E0\n7E40\n4AE0\n5240\n7EE0\n4A40\n5240\nA2E0\nENDCHAR\nSTARTCHAR U_3896\nENCODING 14486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4000\n5FC0\n4A80\n7FE0\n4700\n5AC0\n6FA0\n8A80\n8F80\nENDCHAR\nSTARTCHAR U_3897\nENCODING 14487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n5FC0\n4400\n7FE0\n5540\n7FE0\n5540\n9740\n90C0\nENDCHAR\nSTARTCHAR U_3898\nENCODING 14488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4880\n7FE0\n4500\n5FC0\n4540\n7FE0\n4540\n9FC0\n92A0\nENDCHAR\nSTARTCHAR U_3899\nENCODING 14489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5480\n7E80\n55E0\n7EA0\n6AA0\n7EA0\n48A0\n4D20\nBA60\nENDCHAR\nSTARTCHAR U_389A\nENCODING 14490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4200\n5FE0\n5220\n5FC0\n5540\n57C0\n5540\nAFC0\nA440\nENDCHAR\nSTARTCHAR U_389B\nENCODING 14491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4200\n4500\n4880\n7760\n5DC0\n5540\n5DC0\n8880\nB560\nENDCHAR\nSTARTCHAR U_389C\nENCODING 14492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4880\n7FE0\n4880\n5FC0\n5240\n5FC0\n4A40\nA8A0\nA7A0\nENDCHAR\nSTARTCHAR U_389D\nENCODING 14493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9C40\nA580\nBE80\nEBE0\nBE80\nAA80\nBFC0\nAAA0\nD580\nENDCHAR\nSTARTCHAR U_389E\nENCODING 14494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n6940\n58C0\n6940\n5FC0\n5240\n7FE0\n4880\nBFE0\n9040\nENDCHAR\nSTARTCHAR U_389F\nENCODING 14495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n2100\n4100\nF5C0\n1500\n1500\n9500\n6FE0\n2000\nDFE0\nENDCHAR\nSTARTCHAR U_38A0\nENCODING 14496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE820\n2BA0\n4AA0\n8AA0\nEBA0\n2AA0\nA820\n4860\n6000\n9FE0\nENDCHAR\nSTARTCHAR U_38A1\nENCODING 14497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n7AA0\n09C0\n7E40\n4BE0\n8940\n10C0\n1080\nFFE0\n1080\n6080\nENDCHAR\nSTARTCHAR U_38A2\nENCODING 14498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9280\n5500\nFFE0\n8240\nBB40\nAA80\nBB60\n2100\nFFE0\n2100\n4100\nENDCHAR\nSTARTCHAR U_38A3\nENCODING 14499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEF00\n29E0\n7F40\n8540\n7480\n5540\n7E20\n1080\nFFE0\n1080\n2080\nENDCHAR\nSTARTCHAR U_38A4\nENCODING 14500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1140\n7D20\n1100\nFFE0\n2100\n3D00\n2500\n2480\n44A0\n8C60\nENDCHAR\nSTARTCHAR U_38A5\nENCODING 14501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEC0\n82A0\nFE80\n83E0\nBA80\nAA80\nAA80\nAA80\nBA80\n8260\n8620\nENDCHAR\nSTARTCHAR U_38A6\nENCODING 14502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD40\n0920\nE900\nABE0\nFD00\n0900\nE900\nA880\nE8A0\n0860\n1820\nENDCHAR\nSTARTCHAR U_38A7\nENCODING 14503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n0040\n0040\n1FC0\n1000\n2000\n3FE0\n0020\n7F20\n0020\n03C0\nENDCHAR\nSTARTCHAR U_38A8\nENCODING 14504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n1100\n1100\nF100\n8FE0\n8100\nF100\n1100\n1100\n5100\n2100\nENDCHAR\nSTARTCHAR U_38A9\nENCODING 14505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n1200\n13E0\nF420\n8020\n8220\nF120\n1120\n1020\n50A0\n2040\nENDCHAR\nSTARTCHAR U_38AA\nENCODING 14506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n1000\n1000\nF7E0\n8200\n8200\nF3C0\n1040\n1040\n5140\n2080\nENDCHAR\nSTARTCHAR U_38AB\nENCODING 14507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n1080\n1080\nF080\n84A0\n84A0\nF4A0\n14A0\n14A0\n54A0\n27E0\nENDCHAR\nSTARTCHAR U_38AC\nENCODING 14508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1100\n1FE0\n7100\n8100\n8240\nF240\n1280\n1480\n1920\n63E0\nENDCHAR\nSTARTCHAR U_38AD\nENCODING 14509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1100\n11C0\nF100\n8100\n87C0\nF440\n1440\n1280\n5100\n26E0\nENDCHAR\nSTARTCHAR U_38AE\nENCODING 14510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF400\n1400\n1FE0\nF500\n8500\n8FE0\nF520\n1540\n1400\n5420\n23E0\nENDCHAR\nSTARTCHAR U_38AF\nENCODING 14511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n1420\n1420\n77E0\n8480\n8480\nF7E0\n1480\n14A0\n5660\n2420\nENDCHAR\nSTARTCHAR U_38B0\nENCODING 14512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE100\n2FE0\n2920\nE900\n8FC0\nEC40\n2A80\n2900\nAA80\n5460\nENDCHAR\nSTARTCHAR U_38B1\nENCODING 14513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1100\n1200\nF440\n8FE0\n8120\nF100\n1540\n1520\n5B20\n2100\nENDCHAR\nSTARTCHAR U_38B2\nENCODING 14514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n0840\n7BC0\n4200\n7BC0\n0840\n18C0\nFFE0\n0000\n1100\n2080\nENDCHAR\nSTARTCHAR U_38B3\nENCODING 14515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n17E0\n7400\n48C0\n7700\n1520\n14C0\n1480\n5440\n2620\nENDCHAR\nSTARTCHAR U_38B4\nENCODING 14516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0040\n3FC0\n4000\n7FE0\n2320\n3520\n2B20\n3520\n3F20\n00C0\nENDCHAR\nSTARTCHAR U_38B5\nENCODING 14517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1100\n1280\nF440\n8BA0\n8000\nF7C0\n1440\n1440\n57C0\n2440\nENDCHAR\nSTARTCHAR U_38B6\nENCODING 14518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n1200\nF7C0\n8440\n8440\nF7C0\n1440\n1440\n97C0\n6440\nENDCHAR\nSTARTCHAR U_38B7\nENCODING 14519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n14A0\n14A0\nF7E0\n8100\n81E0\nF220\n1520\n10C0\n5080\n2700\nENDCHAR\nSTARTCHAR U_38B8\nENCODING 14520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nD900\n4900\nD9E0\n9240\nD840\n4940\n4940\n4940\n4880\n6940\n9620\nENDCHAR\nSTARTCHAR U_38B9\nENCODING 14521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1FE0\n1440\n7280\n4FE0\n7100\n1FE0\n1100\n1100\n5100\n2100\nENDCHAR\nSTARTCHAR U_38BA\nENCODING 14522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1FE0\nF440\n8FE0\nF200\n1FE0\n1240\n1740\n1080\nA140\n4620\nENDCHAR\nSTARTCHAR U_38BB\nENCODING 14523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0C0\n1700\n7100\n4FE0\n7340\n1D20\n1280\n1FE0\n1280\n5180\n2660\nENDCHAR\nSTARTCHAR U_38BC\nENCODING 14524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF520\n1340\nF7E0\n8520\nF520\n17A0\n1560\n1520\n5520\n2540\nENDCHAR\nSTARTCHAR U_38BD\nENCODING 14525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE0E0\n3F20\n2A20\nEEE0\n8A80\n8E80\nEAE0\n2E20\n3A20\nA2A0\n4240\nENDCHAR\nSTARTCHAR U_38BE\nENCODING 14526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n2280\n2FE0\nEAA0\n8AA0\n8FE0\nE100\n27C0\n2100\n2100\n6FE0\nENDCHAR\nSTARTCHAR U_38BF\nENCODING 14527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEB80\n2880\n2FE0\nEA00\n9BC0\n8D00\nE900\n2FE0\n2900\n2A80\nCC60\nENDCHAR\nSTARTCHAR U_38C0\nENCODING 14528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1FE0\n1100\nF7C0\n8540\n86C0\nF540\n1640\n1FE0\n1440\n6820\nENDCHAR\nSTARTCHAR U_38C1\nENCODING 14529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF7C0\n1280\n7FE0\n4400\n77C0\n1D40\n17C0\n1540\n57C0\n2540\nENDCHAR\nSTARTCHAR U_38C2\nENCODING 14530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n27C0\nE440\n87C0\nE000\n2FE0\n2C60\n2AA0\n2FE0\nA920\n4920\nENDCHAR\nSTARTCHAR U_38C3\nENCODING 14531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE4E0\n3F20\nEAE0\n9F80\nE1E0\n2E20\n2A20\n2E20\n2A20\nAEA0\n5240\nENDCHAR\nSTARTCHAR U_38C4\nENCODING 14532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE9E0\n25C0\nE920\n83E0\nED00\n25E0\n2100\n2FE0\n2380\nA540\n4920\nENDCHAR\nSTARTCHAR U_38C5\nENCODING 14533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\n3540\n3FE0\nE440\n8D40\n92A0\nEFC0\n2840\n2FC0\n2840\nCFC0\nENDCHAR\nSTARTCHAR U_38C6\nENCODING 14534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n2540\n2FE0\nED60\n8BA0\n8000\nEFE0\n2100\n27C0\n2100\nCFE0\nENDCHAR\nSTARTCHAR U_38C7\nENCODING 14535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F80\n1080\nFFE0\n2A00\nD200\n3FC0\nD240\n1240\n12C0\n0200\nENDCHAR\nSTARTCHAR U_38C8\nENCODING 14536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n39C0\n4A40\nFFE0\n5140\nA680\n4100\nA280\nFBE0\nAAA0\nBAE0\n2080\nENDCHAR\nSTARTCHAR U_38C9\nENCODING 14537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0020\nFC40\n1080\n1120\n1040\n1080\n1100\n1420\n3840\nC080\n0300\nENDCHAR\nSTARTCHAR U_38CA\nENCODING 14538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0F80\n1900\n2600\n0900\n32E0\nCD00\n0200\n1C80\n0300\n1C00\nENDCHAR\nSTARTCHAR U_38CB\nENCODING 14539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nFE40\n4480\n5500\n4440\nFE80\n4520\n4420\n4440\n4480\n8300\nENDCHAR\nSTARTCHAR U_38CC\nENCODING 14540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2080\n3900\n2240\n2040\n2080\nF920\n8A20\n8840\n8880\nFB00\nENDCHAR\nSTARTCHAR U_38CD\nENCODING 14541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n2040\n4080\n8520\nFC40\n0080\nFD20\n8420\n8440\n8480\nFD00\nENDCHAR\nSTARTCHAR U_38CE\nENCODING 14542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n6080\n3F80\n2080\n3F80\n2580\nDC40\n0320\n3C80\n0300\n7C00\nENDCHAR\nSTARTCHAR U_38CF\nENCODING 14543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFE40\n2480\nFE00\n4420\n7CC0\n4500\n7C20\n1040\nFC80\n1300\nENDCHAR\nSTARTCHAR U_38D0\nENCODING 14544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFC80\n8500\nFC00\n8440\nFC80\n1100\nD420\n5840\n5480\nB100\nENDCHAR\nSTARTCHAR U_38D1\nENCODING 14545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFE40\n8880\nBE00\n8A20\nFF40\nAA80\nBE00\nAA20\nBE40\nAB80\nENDCHAR\nSTARTCHAR U_38D2\nENCODING 14546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\nFE20\nD640\nBB80\nFE20\n0040\n7D80\n4420\n7C40\n4580\n7E00\nENDCHAR\nSTARTCHAR U_38D3\nENCODING 14547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3820\n2740\n7D80\nCA00\n3120\nCB40\n2C80\nFF00\n2C20\n4A40\n8980\nENDCHAR\nSTARTCHAR U_38D4\nENCODING 14548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n2FE0\n4080\n9080\n2080\n6080\nA080\n2080\n2080\n2080\n2180\nENDCHAR\nSTARTCHAR U_38D5\nENCODING 14549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n4200\n9200\n2FE0\n6200\nA200\n2200\n2500\n2480\n2840\n3020\nENDCHAR\nSTARTCHAR U_38D6\nENCODING 14550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2100\nC100\n1FE0\n2100\nE100\n2280\n2280\n2640\n2940\n3020\nENDCHAR\nSTARTCHAR U_38D7\nENCODING 14551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n47E0\n9420\n2420\n67E0\nA400\n2400\n2400\n2800\n3000\nENDCHAR\nSTARTCHAR U_38D8\nENCODING 14552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n43E0\n9420\n2820\n67A0\nA4A0\n24A0\n27A0\n2020\n20E0\nENDCHAR\nSTARTCHAR U_38D9\nENCODING 14553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4FE0\n9920\n2920\n6920\nAFE0\n2920\n2920\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_38DA\nENCODING 14554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n4820\n9BA0\n2820\n6BA0\nAAA0\n2AA0\n2BA0\n2820\n2860\nENDCHAR\nSTARTCHAR U_38DB\nENCODING 14555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4280\n9440\n2820\n67C0\nA000\n27C0\n2440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_38DC\nENCODING 14556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n5F20\n8A20\n2AA0\n4AA0\nDFA0\n4AA0\n4AA0\n4A20\n4A20\n5260\nENDCHAR\nSTARTCHAR U_38DD\nENCODING 14557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n4120\n9FE0\n2100\n6500\nBF40\n2540\n2480\n24A0\n2960\n3220\nENDCHAR\nSTARTCHAR U_38DE\nENCODING 14558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n4440\n9A20\n2440\n6FE0\nA000\n2480\n2480\n2480\n24A0\n28E0\nENDCHAR\nSTARTCHAR U_38DF\nENCODING 14559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4100\n9FE0\n2100\n6100\nA7C0\n2000\n27C0\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_38E0\nENCODING 14560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n43C0\n9440\n2280\n5100\nD280\n5C60\n5100\n5280\n4100\n4080\nENDCHAR\nSTARTCHAR U_38E1\nENCODING 14561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n4880\n9880\n2BE0\n4AA0\nCAA0\n4BE0\n4880\n4880\n4880\n4880\nENDCHAR\nSTARTCHAR U_38E2\nENCODING 14562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n47E0\n9120\n27E0\n6500\nA7E0\n2120\n2320\n2560\n2900\nENDCHAR\nSTARTCHAR U_38E3\nENCODING 14563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4FE0\n9540\n2540\n6BA0\nA100\n2280\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_38E4\nENCODING 14564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n27E0\n4140\n90A0\n2760\n6000\nA140\n27E0\n2140\n20A0\n2760\nENDCHAR\nSTARTCHAR U_38E5\nENCODING 14565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n4880\n9FE0\n2880\n4BC0\nC840\n4FE0\n4A40\n4940\n4840\n48C0\nENDCHAR\nSTARTCHAR U_38E6\nENCODING 14566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n4FE0\n9380\n2540\n6920\nA200\n2FE0\n2240\n2180\n2E60\nENDCHAR\nSTARTCHAR U_38E7\nENCODING 14567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n4A80\n9C80\n2A80\n5E80\nD280\n5E80\n5280\n5E80\n52A0\n56E0\nENDCHAR\nSTARTCHAR U_38E8\nENCODING 14568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2840\n4840\n8BE0\n3E40\n4A40\nD240\n53E0\n4D20\n4520\n4BE0\n5120\nENDCHAR\nSTARTCHAR U_38E9\nENCODING 14569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n4480\n9FE0\n2480\n6E80\nADC0\n36A0\n2480\n2480\n2480\nENDCHAR\nSTARTCHAR U_38EA\nENCODING 14570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n4E20\n9540\n27C0\n6200\nAFE0\n2200\n23C0\n2640\n2980\n3660\nENDCHAR\nSTARTCHAR U_38EB\nENCODING 14571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n4100\n9FE0\n2100\n67C0\nA540\n27C0\n2540\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_38EC\nENCODING 14572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n43C0\n9000\n27E0\n6240\nA3C0\n2260\n23C0\n2640\n2040\nENDCHAR\nSTARTCHAR U_38ED\nENCODING 14573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\n4920\n8AA0\n2FE0\n4480\nC880\n5460\n47C0\n4C80\n4300\n5CE0\nENDCHAR\nSTARTCHAR U_38EE\nENCODING 14574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2100\n4FE0\n1200\n2FE0\n6AA0\nABA0\n2920\n2FE0\n2920\n2960\nENDCHAR\nSTARTCHAR U_38EF\nENCODING 14575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n4840\n9FC0\n2920\n4D40\nCBC0\n4A40\n4BC0\n4A40\n53C0\n6440\nENDCHAR\nSTARTCHAR U_38F0\nENCODING 14576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2920\n4540\n8FE0\n2380\n4540\nC920\n4200\n5540\n54A0\n57A0\nENDCHAR\nSTARTCHAR U_38F1\nENCODING 14577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n4100\n8FE0\n2440\n47C0\nC440\n47C0\n4440\n47C0\n4820\nENDCHAR\nSTARTCHAR U_38F2\nENCODING 14578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n5680\n9EE0\n2140\n5D40\nC140\n5C80\n5480\n5D40\n4220\nENDCHAR\nSTARTCHAR U_38F3\nENCODING 14579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n4FC0\n9A80\n2A80\n5FC0\nCA80\n7FE0\n4000\n5540\n5520\nENDCHAR\nSTARTCHAR U_38F4\nENCODING 14580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FC0\n4480\n9FE0\n2100\n4FC0\nC940\n4FC0\n4940\n4FC0\n5020\nENDCHAR\nSTARTCHAR U_38F5\nENCODING 14581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n33E0\n4880\n83E0\n3D40\n4BE0\nC880\n4BE0\n4880\n5480\n63E0\nENDCHAR\nSTARTCHAR U_38F6\nENCODING 14582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4440\n8540\n2440\n47C0\nC000\n47C0\n47C0\n4440\n5FE0\nENDCHAR\nSTARTCHAR U_38F7\nENCODING 14583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4920\n8280\n2BA0\n4000\nC7C0\n4540\n5FE0\n4100\n4300\nENDCHAR\nSTARTCHAR U_38F8\nENCODING 14584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2C40\n2D40\n5EC0\n8CE0\n3F40\n5840\nCEE0\n5440\n6EE0\n5500\n6CE0\nENDCHAR\nSTARTCHAR U_38F9\nENCODING 14585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3FE0\n5540\n9FE0\n3540\n55E0\nD540\n55E0\n5280\n5660\n6BA0\nENDCHAR\nSTARTCHAR U_38FA\nENCODING 14586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n1000\n5480\n9240\n9240\n1000\n1000\n1000\n1000\n1000\nENDCHAR\nSTARTCHAR U_38FB\nENCODING 14587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n1900\n0600\n0700\n0880\n3060\n4420\n1300\n5040\n5120\n8F20\nENDCHAR\nSTARTCHAR U_38FC\nENCODING 14588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2220\n2220\n7220\nA620\n2320\n22A0\n2220\n2220\n24A0\n2860\nENDCHAR\nSTARTCHAR U_38FD\nENCODING 14589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0880\nFFE0\n1100\n3600\n1B00\n60C0\n0440\n52A0\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_38FE\nENCODING 14590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\nA540\nB540\nA440\nA280\n2280\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_38FF\nENCODING 14591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nA3E0\nB420\nA420\nAA20\n2120\n2120\n2020\n2240\n2180\nENDCHAR\nSTARTCHAR U_3900\nENCODING 14592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4C00\n4200\n4500\n58C0\n4000\n7FE0\n0000\n0440\n52A0\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_3901\nENCODING 14593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n0A00\n1100\nE0E0\n0000\n0440\n52A0\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_3902\nENCODING 14594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n1100\n13C0\n1840\n1580\n2200\n4DE0\n0000\n56A0\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_3903\nENCODING 14595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nA200\nB200\nABE0\nA220\n2220\n2420\n24A0\n2840\nENDCHAR\nSTARTCHAR U_3904\nENCODING 14596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nAFE0\nB100\nAFE0\nA920\n2920\n2920\n2960\n2100\n2100\nENDCHAR\nSTARTCHAR U_3905\nENCODING 14597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\n4400\n7FC0\n0A00\n3220\nC3E0\n0440\n52A0\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_3906\nENCODING 14598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2780\nA400\nB7E0\nAE20\nA620\n2540\n2540\n2480\n2540\n2A20\nENDCHAR\nSTARTCHAR U_3907\nENCODING 14599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2F00\n2100\nA100\nB100\nAFE0\nA100\n2280\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_3908\nENCODING 14600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2100\nA080\nB280\nA280\nAA20\n2A20\n2A20\n2A00\n2240\n21C0\nENDCHAR\nSTARTCHAR U_3909\nENCODING 14601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nA080\nB480\nA480\nAFE0\n2280\n2280\n2480\n2A80\n2100\nENDCHAR\nSTARTCHAR U_390A\nENCODING 14602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2420\n2240\nA180\nB240\nA420\nA000\n2420\n2240\n2180\n2240\n2420\nENDCHAR\nSTARTCHAR U_390B\nENCODING 14603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\nA280\nB440\nA820\nA7C0\n2240\n2240\n2240\n2540\n2880\nENDCHAR\nSTARTCHAR U_390C\nENCODING 14604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\nA7E0\nB240\nAA40\nA240\n23C0\n2240\n2240\n2240\n23C0\nENDCHAR\nSTARTCHAR U_390D\nENCODING 14605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\nF900\n23E0\n2020\n3820\nC0E0\n0000\n0440\n52A0\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_390E\nENCODING 14606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFDE0\n2520\n2520\n2520\n49E0\n9000\n0440\n52A0\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_390F\nENCODING 14607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nA420\nBA40\nA980\nA240\n2C20\n2180\n2040\n2180\n2040\nENDCHAR\nSTARTCHAR U_3910\nENCODING 14608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n07C0\n0400\n3F80\n2080\n3F80\n0000\n0440\n5220\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_3911\nENCODING 14609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nAFE0\nB100\nAA00\nA400\n2FC0\n3440\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_3912\nENCODING 14610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nAFE0\nB100\nAA80\nA540\n2920\n37C0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_3913\nENCODING 14611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nAFE0\nA100\nB380\nA540\n2920\n3100\n27C0\n2100\n2100\nENDCHAR\nSTARTCHAR U_3914\nENCODING 14612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\nA240\nB5E0\nAC40\nB540\n2540\n2540\n2440\n2440\n24C0\nENDCHAR\nSTARTCHAR U_3915\nENCODING 14613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2920\n2920\nB920\nAFE0\nA100\n2100\n2920\n2920\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_3916\nENCODING 14614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nAFE0\nB820\nA000\nA7C0\n2100\n2100\n2100\n2500\n2300\nENDCHAR\nSTARTCHAR U_3917\nENCODING 14615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n0400\n1F00\n0400\n7FC0\n1100\nE4E0\n0400\n2540\n0C00\nENDCHAR\nSTARTCHAR U_3918\nENCODING 14616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nB240\nA480\nAFE0\nA020\n2020\n27E0\n2020\n2020\n2FE0\nENDCHAR\nSTARTCHAR U_3919\nENCODING 14617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7E40\n4240\n7E40\n4040\n7FC0\n0440\n5220\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_391A\nENCODING 14618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n25C0\nA800\nB400\nA7E0\nA880\n3880\n2880\n2880\n2880\n2980\nENDCHAR\nSTARTCHAR U_391B\nENCODING 14619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2240\nB380\nA480\nAC80\nB480\n27E0\n2480\n2480\n2480\n25C0\nENDCHAR\nSTARTCHAR U_391C\nENCODING 14620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\nAFE0\nB880\nACA0\nAAA0\n2AC0\n2880\n2980\n2AA0\n3460\nENDCHAR\nSTARTCHAR U_391D\nENCODING 14621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nAFE0\nB200\nA440\nAFE0\n22A0\n2280\n2280\n24A0\n2860\nENDCHAR\nSTARTCHAR U_391E\nENCODING 14622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nBFE0\nA820\nA8E0\nA700\n2100\n2FE0\n2100\n2120\n20E0\nENDCHAR\nSTARTCHAR U_391F\nENCODING 14623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n0A00\n7FC0\n4A40\n7FC0\n4A40\n7FC0\n0440\n5220\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_3920\nENCODING 14624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC20\n2020\n3920\n4920\nA920\n1120\n6060\n0400\n5240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_3921\nENCODING 14625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F20\n2420\nA4A0\nBEA0\nAAA0\nAAA0\n36A0\n22A0\n2420\n3820\n2060\nENDCHAR\nSTARTCHAR U_3922\nENCODING 14626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nAFE0\nB200\nA3C0\nA640\n2BC0\n2240\n23C0\n2240\n22C0\nENDCHAR\nSTARTCHAR U_3923\nENCODING 14627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1100\n7FC0\n1100\nFFE0\n1100\n6100\n0440\n5220\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_3924\nENCODING 14628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nBFE0\nA920\nAFE0\nA920\n2FE0\n2900\n2500\n2200\n2DE0\nENDCHAR\nSTARTCHAR U_3925\nENCODING 14629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nAFE0\nA200\nA440\nA780\n2120\n2640\n2080\n2140\n2620\nENDCHAR\nSTARTCHAR U_3926\nENCODING 14630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nAFE0\nB100\nAFE0\nA920\n2FE0\n2900\n2500\n2200\n2DE0\nENDCHAR\nSTARTCHAR U_3927\nENCODING 14631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2700\nB400\nAFE0\nAC00\nA400\n25E0\n2520\n2520\n2520\n29E0\nENDCHAR\nSTARTCHAR U_3928\nENCODING 14632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\nB240\nAFE0\nAA40\nA240\n27E0\n2000\n2240\n2240\n2420\nENDCHAR\nSTARTCHAR U_3929\nENCODING 14633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\nA080\n1F00\n60C0\nBFA0\n2080\n3F80\n0440\n5220\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_392A\nENCODING 14634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2000\n7BC0\n8A40\n52C0\n2220\nC3E0\n0440\n5220\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_392B\nENCODING 14635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n1000\n3F80\nE080\n3C80\n2780\n2080\n0420\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_392C\nENCODING 14636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nB7C0\nA100\nA100\nAFE0\n2100\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_392D\nENCODING 14637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nB100\nA100\nAFE0\nA280\n2440\n2AA0\n2280\n2280\n2480\nENDCHAR\nSTARTCHAR U_392E\nENCODING 14638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n3100\nE100\n27C0\nE100\n2FE0\nC000\n0440\n5220\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_392F\nENCODING 14639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nBAA0\nAC60\nA820\nABA0\n2AA0\n2AA0\n2BA0\n2820\n2860\nENDCHAR\nSTARTCHAR U_3930\nENCODING 14640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n23E0\n6600\nABC0\n2200\n23C0\n2200\n0440\n5220\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_3931\nENCODING 14641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2000\nB7C0\nAC40\nAC40\nA7C0\n2000\n2440\n2280\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_3932\nENCODING 14642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n5540\n8A20\n1100\nE0E0\n0440\n52A0\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_3933\nENCODING 14643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n2380\n7540\nA920\n2100\n27C0\n2440\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_3934\nENCODING 14644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nA500\nB540\nA740\nA540\n2740\n2540\n2760\n2D60\n2100\nENDCHAR\nSTARTCHAR U_3935\nENCODING 14645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF900\n11E0\n2240\n3540\nE080\n2140\n6620\n0440\n5220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_3936\nENCODING 14646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\nA220\nB240\nA2A0\nA340\n25A0\n2540\n2980\n2B20\n30E0\nENDCHAR\nSTARTCHAR U_3937\nENCODING 14647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nB440\nABA0\nA000\nA7C0\n2080\n2100\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_3938\nENCODING 14648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nB100\nA100\nAFE0\nA280\n2AC0\n2AA0\n32A0\n2480\n2980\nENDCHAR\nSTARTCHAR U_3939\nENCODING 14649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\nB100\nAFE0\nA100\nA920\n2540\n2540\n2920\n2100\n2300\nENDCHAR\nSTARTCHAR U_393A\nENCODING 14650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nAFE0\nB400\nA400\nA7E0\n2000\n2540\n2540\n2540\n2960\nENDCHAR\nSTARTCHAR U_393B\nENCODING 14651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n33E0\nC220\nAAA0\n9A20\nBAE0\nCA00\n1200\nE440\n5220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_393C\nENCODING 14652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\nAE80\nB5E0\nA4A0\nAEA0\n24A0\n28A0\n2AA0\n3EA0\n2160\nENDCHAR\nSTARTCHAR U_393D\nENCODING 14653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA100\nB7C0\nA100\nAFE0\n2240\n27E0\n2840\n3240\n20C0\nENDCHAR\nSTARTCHAR U_393E\nENCODING 14654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nA280\nB440\nA100\nA100\n2FE0\n2380\n2540\n2540\n2920\nENDCHAR\nSTARTCHAR U_393F\nENCODING 14655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA280\nB540\nAFE0\nA540\n27C0\n2540\n27C0\n2120\n21E0\nENDCHAR\nSTARTCHAR U_3940\nENCODING 14656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nB7C0\nAC40\nA440\n27C0\n2440\n27C0\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_3941\nENCODING 14657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0800\nBFC0\nAA40\nBFC0\n8000\nFFE0\n4840\nA4A0\n9FA0\nENDCHAR\nSTARTCHAR U_3942\nENCODING 14658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\n7440\nA7C0\n2000\n2FE0\n2040\n2FE0\n2440\n20C0\nENDCHAR\nSTARTCHAR U_3943\nENCODING 14659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2EE0\n7AA0\nAEE0\n2820\n2820\n2820\n2820\n2820\n2860\nENDCHAR\nSTARTCHAR U_3944\nENCODING 14660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2100\n7FE0\n6440\nAA20\n27C0\n2A40\n2180\n2280\n2C60\nENDCHAR\nSTARTCHAR U_3945\nENCODING 14661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2F20\n2540\n7FE0\nA820\n27C0\n2240\n2240\n2180\n2280\n2C60\nENDCHAR\nSTARTCHAR U_3946\nENCODING 14662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n3140\n6FE0\nA140\n27C0\n2920\n25C0\n2540\n2920\n2300\nENDCHAR\nSTARTCHAR U_3947\nENCODING 14663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\n2240\n71A0\nA660\n2240\n2FE0\n2240\n2280\n2320\n2CE0\nENDCHAR\nSTARTCHAR U_3948\nENCODING 14664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF8E0\nA880\nABE0\nAA20\nBA20\nABE0\n2620\n5240\n50A0\n9FA0\nENDCHAR\nSTARTCHAR U_3949\nENCODING 14665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2240\n7240\nAFE0\n2000\n27E0\n2420\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_394A\nENCODING 14666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2AA0\n7EE0\nAAA0\n2AA0\n2EE0\n2AA0\n2AA0\n2AA0\n3760\nENDCHAR\nSTARTCHAR U_394B\nENCODING 14667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4FE0\nC200\n4540\n5C80\n4540\n4620\n0800\n5540\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_394C\nENCODING 14668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\n2A20\n7AA0\nA720\n2FE0\n2220\n2720\n2AA0\n3260\n20C0\nENDCHAR\nSTARTCHAR U_394D\nENCODING 14669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2440\n2FE0\n7440\nA7C0\n2440\n27C0\n2440\n2FE0\n2440\n2820\nENDCHAR\nSTARTCHAR U_394E\nENCODING 14670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n23E0\nFD20\n2120\n7120\n6A20\nAC40\n0400\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_394F\nENCODING 14671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n2FE0\n7AA0\nAFE0\n2AA0\n2AA0\n3FE0\n2480\n2840\n3020\nENDCHAR\nSTARTCHAR U_3950\nENCODING 14672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n3180\nCE60\n0000\n7BC0\n4A40\n7AC0\n0600\n5240\n50A0\n9FA0\nENDCHAR\nSTARTCHAR U_3951\nENCODING 14673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0800\n3F80\n2480\n2980\n3280\nFFE0\n8820\n6440\nA0A0\n9FA0\nENDCHAR\nSTARTCHAR U_3952\nENCODING 14674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2F20\n2540\n7000\nA100\n2FE0\n2100\n2380\n2540\n3920\n2100\nENDCHAR\nSTARTCHAR U_3953\nENCODING 14675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2280\n7440\nAFE0\n2040\n2740\n2540\n2740\n2040\n20C0\nENDCHAR\nSTARTCHAR U_3954\nENCODING 14676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2440\n7FE0\nA000\n27C0\n2440\n27C0\n2440\n27C0\n2840\nENDCHAR\nSTARTCHAR U_3955\nENCODING 14677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\n0A00\n71C0\n4440\n2A80\n1100\nE4E0\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_3956\nENCODING 14678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4A40\n6A20\n5D20\n4940\nFE20\n4BE0\n4940\n4AA0\n8E60\n99C0\nENDCHAR\nSTARTCHAR U_3957\nENCODING 14679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\n7440\nA7C0\n2100\n2FE0\n2280\n2280\n2100\n2EE0\nENDCHAR\nSTARTCHAR U_3958\nENCODING 14680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n25E0\n2EA0\n74A0\nA4A0\n2EA0\n25A0\n28A0\n2AA0\n2EA0\n2160\nENDCHAR\nSTARTCHAR U_3959\nENCODING 14681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2FE0\n7920\nAFE0\n2920\n2100\n2240\n2920\n2C60\n33C0\nENDCHAR\nSTARTCHAR U_395A\nENCODING 14682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n2960\n2920\n6D60\nB920\n2FE0\n2920\n2100\n2280\n2440\n3820\nENDCHAR\nSTARTCHAR U_395B\nENCODING 14683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2200\n2700\n71E0\nAF20\n29A0\n2F40\n2940\n21A0\n2200\n2FE0\nENDCHAR\nSTARTCHAR U_395C\nENCODING 14684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n24A0\n27E0\n74A0\nA7E0\n2000\n27E0\n2520\n24E0\n2720\n2860\nENDCHAR\nSTARTCHAR U_395D\nENCODING 14685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n22A0\n22A0\n7EE0\nA8A0\n28E0\n2EA0\n22A0\n23E0\n2220\n2C20\nENDCHAR\nSTARTCHAR U_395E\nENCODING 14686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n2FE0\n7100\nA320\n2DC0\n2280\n2DC0\n22A0\n2C80\n2300\nENDCHAR\nSTARTCHAR U_395F\nENCODING 14687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2440\n2780\n7100\nAFE0\n2200\n2340\n2D80\n22C0\n2CA0\n2300\nENDCHAR\nSTARTCHAR U_3960\nENCODING 14688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2120\n35C0\nA700\nA9E0\nA000\n27C0\n2440\n27C0\n2440\n24C0\nENDCHAR\nSTARTCHAR U_3961\nENCODING 14689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n37E0\nAE00\nA7C0\nAA00\n33E0\n2100\n2FE0\n2340\n2D20\nENDCHAR\nSTARTCHAR U_3962\nENCODING 14690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n3280\nAFE0\nAAA0\nAAA0\n2C60\n2820\n2BA0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_3963\nENCODING 14691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n2480\n5F40\n8420\n7FC0\n0400\n7FC0\n0800\n5540\n9F20\nENDCHAR\nSTARTCHAR U_3964\nENCODING 14692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n2940\nFEA0\n35C0\n5040\nB080\n1100\n0440\n5220\n90A0\n8F80\nENDCHAR\nSTARTCHAR U_3965\nENCODING 14693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n27C0\n7540\n6FC0\nA100\n2FE0\n2920\n2BA0\n2820\n2860\nENDCHAR\nSTARTCHAR U_3966\nENCODING 14694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4400\n7FC0\n5480\n5680\n6940\n7FC0\n0400\n5240\n90A0\n8F80\nENDCHAR\nSTARTCHAR U_3967\nENCODING 14695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2200\n3FE0\nA820\nAFE0\nA820\n2FE0\n2820\n2FE0\n2440\n2820\nENDCHAR\nSTARTCHAR U_3968\nENCODING 14696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFC0\n5100\n9FE0\n5100\n27C0\n5100\n8FE0\n5440\n92A0\n1F80\nENDCHAR\nSTARTCHAR U_3969\nENCODING 14697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FA0\n3240\nAA80\nBFE0\nA200\n27C0\n2C40\n37C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_396A\nENCODING 14698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2380\n2FE0\n7300\nAD80\nA960\n2200\n2FE0\n2480\n2300\n2DC0\nENDCHAR\nSTARTCHAR U_396B\nENCODING 14699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2000\nB7C0\nAC40\nA7C0\n2FE0\n2820\n2FE0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_396C\nENCODING 14700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2440\n7280\n6FE0\nB120\n2FE0\n2200\n23C0\n2440\n28C0\nENDCHAR\nSTARTCHAR U_396D\nENCODING 14701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n3100\n6FC0\nA200\nBFE0\n2540\n2D60\n3380\n2540\n2300\nENDCHAR\nSTARTCHAR U_396E\nENCODING 14702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n2FE0\n2920\nB7E0\nA120\nAA20\n2FE0\n2920\n37E0\n2120\n2660\nENDCHAR\nSTARTCHAR U_396F\nENCODING 14703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n4880\n2500\n7FC0\n0040\n7FE0\n0040\n7FC0\n0440\n52A0\n9F80\nENDCHAR\nSTARTCHAR U_3970\nENCODING 14704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2560\n2920\n2D60\n7920\nAFE0\n2100\n2FC0\n2440\n2280\n2300\n3CE0\nENDCHAR\nSTARTCHAR U_3971\nENCODING 14705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2940\n2F60\n7940\nAF60\n2940\n2F60\n2940\n2940\n2A40\n2FE0\nENDCHAR\nSTARTCHAR U_3972\nENCODING 14706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0800\n3F80\n2480\nFFE0\n2080\nC460\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_3973\nENCODING 14707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2900\n2BC0\n7A40\nABC0\n2A40\n2BC0\n2880\n2AC0\n2CA0\n3180\nENDCHAR\nSTARTCHAR U_3974\nENCODING 14708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n5D40\n57E0\nF500\nD540\n57E0\n5400\n5540\n5540\n5540\n6A60\nENDCHAR\nSTARTCHAR U_3975\nENCODING 14709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n2FE0\n7920\nAB60\n2DA0\n2AE0\n2CA0\n2920\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_3976\nENCODING 14710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n7FC0\n1100\n7FC0\n1100\nFFE0\n5440\nB2A0\n4F20\nENDCHAR\nSTARTCHAR U_3977\nENCODING 14711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\n4200\n7FE0\n5240\n6DA0\n4880\n7460\n4A40\n98A0\nA7A0\nENDCHAR\nSTARTCHAR U_3978\nENCODING 14712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9540\n9540\nF7C0\nA540\nA7C0\nF200\nA540\nA520\nAA60\nDBC0\nENDCHAR\nSTARTCHAR U_3979\nENCODING 14713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA880\n7240\n2420\nFBC0\n2140\n7140\nAA40\n24C0\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_397A\nENCODING 14714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2100\n7FE0\nA240\n2460\n27A0\n2000\n2FE0\n2AA0\n2FE0\nENDCHAR\nSTARTCHAR U_397B\nENCODING 14715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n7FE0\n4100\n5D20\n4940\n7E80\nAD60\nCA20\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_397C\nENCODING 14716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n25C0\n7500\nAFE0\n2400\n27C0\n2400\n27E0\n2AA0\n2840\nENDCHAR\nSTARTCHAR U_397D\nENCODING 14717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\n77C0\nA100\n2FE0\n2440\n27C0\n2440\n27C0\n2820\nENDCHAR\nSTARTCHAR U_397E\nENCODING 14718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2A40\n2FE0\n7A40\nAFE0\n2A00\n2FC0\n2A40\n2BC0\n2800\n2FE0\nENDCHAR\nSTARTCHAR U_397F\nENCODING 14719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n23E0\n7540\n2140\nFC80\n4940\n9A20\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_3980\nENCODING 14720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n57C0\n4A80\n6380\nDA80\nCD60\n53C0\n4900\n4BC0\n4D00\n53E0\nENDCHAR\nSTARTCHAR U_3981\nENCODING 14721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n7FE0\nD240\n5FC0\n5240\n7FE0\n4200\nBFE0\n1440\n52A0\n9FA0\nENDCHAR\nSTARTCHAR U_3982\nENCODING 14722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nFFE0\nA0A0\n3F80\n4440\n44C0\n0400\n5440\n9220\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_3983\nENCODING 14723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\n3140\n6AA0\nAFE0\nAA80\n2BE0\n2C80\n2BE0\n2880\n37E0\nENDCHAR\nSTARTCHAR U_3984\nENCODING 14724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4880\n7FE0\n5980\n6EE0\n4880\n4200\n5940\nA8A0\nAFA0\nENDCHAR\nSTARTCHAR U_3985\nENCODING 14725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n3280\n6B80\nAD60\nA920\n27C0\n2540\n2540\n2540\n2100\nENDCHAR\nSTARTCHAR U_3986\nENCODING 14726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n43C0\n6200\nDFE0\nD200\n5FE0\n5200\n5FE0\n5540\n6FE0\n6300\nENDCHAR\nSTARTCHAR U_3987\nENCODING 14727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n3A80\n6FE0\nAAA0\nAFE0\n2A80\n2FE0\n2A80\n2BA0\n32E0\nENDCHAR\nSTARTCHAR U_3988\nENCODING 14728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n2FE0\nA100\nB7C0\nA100\n2FE0\n2000\n2FE0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_3989\nENCODING 14729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n3100\nAFE0\nA820\nA7C0\n2440\n27C0\n2440\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_398A\nENCODING 14730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2EE0\n3440\nAFE0\nA540\nAFE0\n2540\n2FE0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_398B\nENCODING 14731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\n3440\nA920\nA7C0\nA100\n2FE0\n2640\n2BC0\n3240\n23C0\nENDCHAR\nSTARTCHAR U_398C\nENCODING 14732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFC0\n4500\nFFE0\n4100\n5140\n75C0\n1240\nD0A0\n1F80\nENDCHAR\nSTARTCHAR U_398D\nENCODING 14733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2EE0\nB440\nA280\nAFE0\n2100\n2920\n2FE0\n2100\n2E00\nENDCHAR\nSTARTCHAR U_398E\nENCODING 14734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\n3240\nAFE0\nA240\nBFE0\n2FC0\n2A40\n2FC0\n2A40\n3FE0\nENDCHAR\nSTARTCHAR U_398F\nENCODING 14735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n3EE0\nA880\nA660\nA480\n3FE0\n2480\n3FE0\n2480\n2840\nENDCHAR\nSTARTCHAR U_3990\nENCODING 14736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20A0\n2FE0\n7080\nAE80\n2080\n2E80\n2A80\n2E80\n2A80\n2E60\n3120\nENDCHAR\nSTARTCHAR U_3991\nENCODING 14737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2280\n22E0\nBFA0\nAAA0\nAEA0\n2AA0\n2E40\n2A40\n3EA0\n2320\nENDCHAR\nSTARTCHAR U_3992\nENCODING 14738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n2FE0\nB100\nAFE0\nA000\n27C0\n2000\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_3993\nENCODING 14739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2EA0\n2BE0\nB680\nAA80\n2480\n2940\n3220\n2000\n2AA0\n32A0\nENDCHAR\nSTARTCHAR U_3994\nENCODING 14740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA8A0\nFBE0\n8880\nF880\n8940\nFA20\n8C20\n6540\nA0A0\n9FA0\nENDCHAR\nSTARTCHAR U_3995\nENCODING 14741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2B20\nAAC0\nBD20\nAAC0\n2B40\n2DE0\n2A40\n28E0\n2840\n29E0\nENDCHAR\nSTARTCHAR U_3996\nENCODING 14742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2EE0\n6AA0\nBEE0\n2820\n2920\n2E60\n2AA0\n2BA0\n2860\nENDCHAR\nSTARTCHAR U_3997\nENCODING 14743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n2280\n77C0\nAAA0\n27C0\n2000\n2FE0\n2100\n2540\n2920\nENDCHAR\nSTARTCHAR U_3998\nENCODING 14744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF9E0\nAB40\nFD40\n4140\nFC80\n4940\n9A20\n5440\n9120\n8FA0\nENDCHAR\nSTARTCHAR U_3999\nENCODING 14745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n27C0\n7540\nAFE0\n2920\n2BA0\n2A60\n2540\n2CA0\n37A0\nENDCHAR\nSTARTCHAR U_399A\nENCODING 14746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\nF1E0\nA8A0\nA4A0\n5540\nF9E0\n4940\nFAE0\n4640\n4040\n8040\nENDCHAR\nSTARTCHAR U_399B\nENCODING 14747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n69C0\n4E40\n68C0\n4E40\n6AC0\n5240\nFFE0\n4440\nB220\n50A0\n4F80\nENDCHAR\nSTARTCHAR U_399C\nENCODING 14748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2280\nB480\nAFE0\nA480\n27C0\n2480\n2FE0\n2440\n2380\n3C60\nENDCHAR\nSTARTCHAR U_399D\nENCODING 14749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nEBE0\n5220\nF3E0\n1A20\nEBE0\n0940\n7660\n5240\n90A0\n8FA0\nENDCHAR\nSTARTCHAR U_399E\nENCODING 14750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\nFFE0\n0440\n7FE0\n5280\n7580\n5240\n90A0\n8FA0\nENDCHAR\nSTARTCHAR U_399F\nENCODING 14751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nD540\n37C0\nD540\n37C0\nD100\n17E0\n6840\nA420\nA0A0\n9F80\nENDCHAR\nSTARTCHAR U_39A0\nENCODING 14752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n2520\n2DA0\nA520\nBFE0\nA520\n2FA0\n2260\n2720\n2260\n2FA0\nENDCHAR\nSTARTCHAR U_39A1\nENCODING 14753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4520\n4BC0\n46A0\n6BC0\nEAA0\nEFE0\nC100\n4FE0\n4380\n4D60\n4100\nENDCHAR\nSTARTCHAR U_39A2\nENCODING 14754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2FE0\n3540\n6000\nBEE0\n2AA0\n2EA0\n2AA0\n2EE0\n2A80\n2D80\nENDCHAR\nSTARTCHAR U_39A3\nENCODING 14755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n9F60\n4900\n9E60\n4B40\n54C0\n5F40\n4400\n1440\n52A0\n4F00\nENDCHAR\nSTARTCHAR U_39A4\nENCODING 14756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBE0\n2540\nF900\n8A80\nFA40\n5460\nF900\n54A0\n2660\nE9A0\nENDCHAR\nSTARTCHAR U_39A5\nENCODING 14757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA920\nB7C0\nA100\nAFE0\n2540\n27C0\n2200\n2D60\n2BC0\nENDCHAR\nSTARTCHAR U_39A6\nENCODING 14758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nAEE0\nBAA0\nAEE0\nA920\n2AA0\n2BA0\n2AA0\n2CE0\n2820\nENDCHAR\nSTARTCHAR U_39A7\nENCODING 14759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n2FE0\n2A40\nB7E0\nA540\nA9A0\n2000\n27C0\n2540\n2640\n27C0\nENDCHAR\nSTARTCHAR U_39A8\nENCODING 14760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nAAA0\nBEE0\nA920\n2FE0\n2D60\n2FA0\n2BA0\n2D60\n2820\nENDCHAR\nSTARTCHAR U_39A9\nENCODING 14761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nAFC0\nBA80\nABE0\nAA20\n2DE0\n2820\n2BC0\n2AA0\n2DC0\nENDCHAR\nSTARTCHAR U_39AA\nENCODING 14762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\nA440\nBBC0\nAAA0\n2BA0\n2000\n2FC0\n2440\n2380\n2C60\nENDCHAR\nSTARTCHAR U_39AB\nENCODING 14763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\n2FE0\n2280\nAFE0\nB540\nAFE0\n2440\n27C0\n2440\n27C0\n2820\nENDCHAR\nSTARTCHAR U_39AC\nENCODING 14764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n2FE0\nB540\nABE0\nAD40\n2BE0\n2F40\n25E0\n2B40\n29E0\nENDCHAR\nSTARTCHAR U_39AD\nENCODING 14765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n2FE0\nBBA0\nA540\nAFE0\nAAA0\n2FE0\n2540\n2BA0\n2FE0\nENDCHAR\nSTARTCHAR U_39AE\nENCODING 14766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n0480\n7FC0\n0400\n7FC0\n0400\nFFE0\n0240\n0380\n06A0\n7860\nENDCHAR\nSTARTCHAR U_39AF\nENCODING 14767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n0240\nFFE0\n2200\n4200\n9220\nF940\n0180\nF9A0\n0660\n3820\nENDCHAR\nSTARTCHAR U_39B0\nENCODING 14768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2940\n2920\n5500\nFFE0\n0100\n0140\n0140\n00A0\n01A0\n0260\n0420\nENDCHAR\nSTARTCHAR U_39B1\nENCODING 14769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n7120\n0100\nFFE0\n0100\n2140\n2140\n7180\n2320\n34A0\n4060\nENDCHAR\nSTARTCHAR U_39B2\nENCODING 14770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1140\n7D20\n1100\nFFE0\n2100\n3D40\n2480\n44A0\n5960\n8620\nENDCHAR\nSTARTCHAR U_39B3\nENCODING 14771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n7D20\n1100\nFFE0\n0100\n1140\n7D40\n1140\n1CA0\n7160\n0220\nENDCHAR\nSTARTCHAR U_39B4\nENCODING 14772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n0120\nFFE0\n2100\n3920\nC920\n3140\nCD80\n79A0\n4A60\n7C20\nENDCHAR\nSTARTCHAR U_39B5\nENCODING 14773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5140\n5120\n7D00\n93E0\n1100\nFD20\n3940\n5480\n54A0\n9160\n9620\nENDCHAR\nSTARTCHAR U_39B6\nENCODING 14774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n0120\nFFE0\n0100\nF920\n5140\nB940\n2180\nF8A0\n2160\nFA20\nENDCHAR\nSTARTCHAR U_39B7\nENCODING 14775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n1140\n6120\nFFE0\nA900\nF920\nA940\nF880\nA8A0\nA960\n9A20\nENDCHAR\nSTARTCHAR U_39B8\nENCODING 14776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3940\n2120\nFFE0\n8900\nF920\n8940\nF940\n20A0\nF960\n2220\nENDCHAR\nSTARTCHAR U_39B9\nENCODING 14777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4940\n7920\n4BE0\nFD00\n2100\n7D20\n9540\n6C80\n15A0\n6E60\nENDCHAR\nSTARTCHAR U_39BA\nENCODING 14778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n8140\nFD20\nB7E0\nA900\nB520\nAB20\nFD40\n08A0\n4960\n1A20\nENDCHAR\nSTARTCHAR U_39BB\nENCODING 14779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n2540\nB520\n27E0\n6D00\n2120\nFD20\n8540\nFCA0\n8560\nFE20\nENDCHAR\nSTARTCHAR U_39BC\nENCODING 14780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7D40\n1120\nFFE0\n2900\n5520\nDF20\n4540\n6CA0\n4560\n7E20\nENDCHAR\nSTARTCHAR U_39BD\nENCODING 14781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF8A0\n27E0\n4080\nFB80\n4AA0\n7BA0\n49C0\n7EA0\n4960\n5A20\nENDCHAR\nSTARTCHAR U_39BE\nENCODING 14782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\n7FC0\n4040\n7FC0\n5200\n53C0\n5E40\n7280\n5020\n9FE0\nENDCHAR\nSTARTCHAR U_39BF\nENCODING 14783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4000\n7FC0\n4040\n7FC0\n4200\n5FC0\n4200\n4A40\n5220\nA220\nENDCHAR\nSTARTCHAR U_39C0\nENCODING 14784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2020\n3FE0\n2000\n2F80\n2480\n26E0\n4940\n4880\n9360\nENDCHAR\nSTARTCHAR U_39C1\nENCODING 14785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2020\n3FE0\n2100\n27C0\n2100\n2FE0\n4200\n4440\n8FE0\nENDCHAR\nSTARTCHAR U_39C2\nENCODING 14786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n3FE0\n2020\n3FE0\n2000\n2FE0\n2920\n4FE0\n4920\n8FE0\nENDCHAR\nSTARTCHAR U_39C3\nENCODING 14787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n2420\n2420\nF420\n2420\n3420\n65E0\nA620\n2020\nA020\n4020\nENDCHAR\nSTARTCHAR U_39C4\nENCODING 14788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2420\n2420\n2420\nF420\n2420\n3420\n6420\nA420\n2420\nA420\n47E0\nENDCHAR\nSTARTCHAR U_39C5\nENCODING 14789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n2120\nF120\n2120\n3120\n6120\nA220\n2220\nA4A0\n4840\nENDCHAR\nSTARTCHAR U_39C6\nENCODING 14790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\nEFE0\n4920\n4920\n6920\n4920\nC9A0\n4960\n4100\nC100\nENDCHAR\nSTARTCHAR U_39C7\nENCODING 14791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4FE0\nE820\n4820\n4820\n6BA0\n4820\nC820\n4820\n48A0\nC840\nENDCHAR\nSTARTCHAR U_39C8\nENCODING 14792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2020\nF020\n27E0\n2400\n3400\n67E0\nA020\n2020\nA0A0\n4040\nENDCHAR\nSTARTCHAR U_39C9\nENCODING 14793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n4FC0\nE800\n5780\n4000\n6F80\n4080\nC080\n40A0\n40A0\nC060\nENDCHAR\nSTARTCHAR U_39CA\nENCODING 14794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\nEFE0\n4100\n4FE0\n6920\n4920\nC920\n4960\n4920\nC100\nENDCHAR\nSTARTCHAR U_39CB\nENCODING 14795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n4120\nE100\n4FE0\n4100\n6100\n4280\nC280\n4440\n4820\nD020\nENDCHAR\nSTARTCHAR U_39CC\nENCODING 14796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF100\n21E0\n2F00\n3100\n61E0\nAF00\n2120\nA120\n41E0\nENDCHAR\nSTARTCHAR U_39CD\nENCODING 14797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4100\nEFE0\n4200\n4200\n63E0\n4220\nC420\n4420\n48A0\nD040\nENDCHAR\nSTARTCHAR U_39CE\nENCODING 14798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4FE0\nE080\n4880\n4FE0\n6280\n4280\nC480\n4880\n5280\nC100\nENDCHAR\nSTARTCHAR U_39CF\nENCODING 14799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4820\nE820\n4C60\n4AA0\n6920\n4AA0\nCCA0\n4820\n48A0\nC840\nENDCHAR\nSTARTCHAR U_39D0\nENCODING 14800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4EE0\nE2A0\n4AA0\n4AA0\n6AA0\n44A0\nC440\n4AA0\n4920\nD220\nENDCHAR\nSTARTCHAR U_39D1\nENCODING 14801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n2500\nF100\n2FE0\n2120\n31A0\n6160\nA220\n2220\nA4A0\n4840\nENDCHAR\nSTARTCHAR U_39D2\nENCODING 14802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2820\n2000\n3280\n6280\nA280\n2440\nA440\n4820\nENDCHAR\nSTARTCHAR U_39D3\nENCODING 14803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40E0\n4F00\nEA80\n4A80\n4A80\n6A80\n4A80\nCA40\n4AA0\n4BA0\nD2A0\nENDCHAR\nSTARTCHAR U_39D4\nENCODING 14804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n4120\nEFE0\n4900\n4940\n6940\n4940\nC880\n48A0\n4960\nD220\nENDCHAR\nSTARTCHAR U_39D5\nENCODING 14805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n44E0\nEAA0\n4AA0\n4AA0\n6AA0\n4EA0\nCAE0\n4280\n4480\nC880\nENDCHAR\nSTARTCHAR U_39D6\nENCODING 14806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nE820\n4FE0\n4800\n6BC0\n4840\nC880\n4920\n4A20\nD1E0\nENDCHAR\nSTARTCHAR U_39D7\nENCODING 14807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4280\nE280\n4AA0\n4BA0\n6AC0\n4A80\nCA80\n4AA0\n4BA0\nDC60\nENDCHAR\nSTARTCHAR U_39D8\nENCODING 14808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5DE0\n5100\n5D20\nE0E0\n1F00\n0400\n3F80\n0400\nFFE0\n0C00\nENDCHAR\nSTARTCHAR U_39D9\nENCODING 14809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n40A0\nE220\n4240\n4A40\n6A80\n5340\nC220\n4600\n4A40\nD1C0\nENDCHAR\nSTARTCHAR U_39DA\nENCODING 14810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n5FE0\nE400\n4400\n4780\n6480\n4680\nC580\n44A0\n47A0\nC860\nENDCHAR\nSTARTCHAR U_39DB\nENCODING 14811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n53E0\n5480\n5840\n1F00\n0400\n3F80\n0400\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_39DC\nENCODING 14812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2880\nF880\n2BE0\n2AA0\n3AA0\n6AE0\nAAA0\n2880\nA880\n4FE0\nENDCHAR\nSTARTCHAR U_39DD\nENCODING 14813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7DE0\n2520\n49E0\n1F00\n0400\n3F80\n0400\nFFE0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_39DE\nENCODING 14814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n4E00\nE200\n5FE0\n4200\n63E0\n4220\nC540\n4480\n4940\nD220\nENDCHAR\nSTARTCHAR U_39DF\nENCODING 14815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n4500\nE100\n4900\n4500\n6100\n4500\nC900\n5900\n4900\nC9E0\nENDCHAR\nSTARTCHAR U_39E0\nENCODING 14816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2200\nF440\n2FE0\n2020\n3100\n6540\nA520\n2920\nA100\n4300\nENDCHAR\nSTARTCHAR U_39E1\nENCODING 14817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4100\nEFE0\n4100\n4240\n6C80\n4720\nC240\n4C80\n4140\nCE20\nENDCHAR\nSTARTCHAR U_39E2\nENCODING 14818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nF920\n2920\n2FE0\n3920\n6920\nAAA0\n2C60\nA820\n4FE0\nENDCHAR\nSTARTCHAR U_39E3\nENCODING 14819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n4900\nEFE0\n5100\n4100\n5FE0\n6380\nC540\n4920\n5120\nC100\nENDCHAR\nSTARTCHAR U_39E4\nENCODING 14820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nF200\n2440\n3FE0\n6280\nA280\n2280\nA4A0\n4860\nENDCHAR\nSTARTCHAR U_39E5\nENCODING 14821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\nF7C0\n2900\n2100\n3FE0\n6280\nA280\n22A0\nA4A0\n4860\nENDCHAR\nSTARTCHAR U_39E6\nENCODING 14822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\nF7E0\n2820\n27A0\n34A0\n67A0\nA4A0\n27A0\nA0A0\n4040\nENDCHAR\nSTARTCHAR U_39E7\nENCODING 14823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4100\nEFE0\n4200\n4440\n6FE0\n4000\nC540\n4540\n4540\nC960\nENDCHAR\nSTARTCHAR U_39E8\nENCODING 14824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n4F00\nE800\n4800\n4FE0\n6800\n4BC0\nCA40\n4A40\n4A40\nD3C0\nENDCHAR\nSTARTCHAR U_39E9\nENCODING 14825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FC0\n5040\nFFC0\n5240\n5FC0\n7AC0\n5AC0\nDAC0\n5240\n5260\nE220\nENDCHAR\nSTARTCHAR U_39EA\nENCODING 14826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n43C0\nE480\n4FE0\n4800\n6BC0\n4A40\nCAC0\n4A00\n4A20\nD1E0\nENDCHAR\nSTARTCHAR U_39EB\nENCODING 14827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nF200\n2FE0\n2AA0\n3AA0\n6AA0\nAAA0\n2AA0\nA820\n4860\nENDCHAR\nSTARTCHAR U_39EC\nENCODING 14828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n4440\n4540\n7540\nC860\n1F00\n0400\n7FC0\n0400\nFFE0\n0C00\nENDCHAR\nSTARTCHAR U_39ED\nENCODING 14829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9E0\n2120\n2140\n3920\nE1E0\n1F00\n0400\n7FC0\n0400\nFFE0\n0C00\nENDCHAR\nSTARTCHAR U_39EE\nENCODING 14830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2400\nF8E0\n2820\n2820\n3820\n6EE0\nA820\n2820\nA820\n4FE0\nENDCHAR\nSTARTCHAR U_39EF\nENCODING 14831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF120\n2140\n2FE0\n3100\n6240\nAE80\n2320\nA220\n41E0\nENDCHAR\nSTARTCHAR U_39F0\nENCODING 14832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n4F00\nE800\n4900\n4900\n6FE0\n4100\nC540\n4920\n5520\nC200\nENDCHAR\nSTARTCHAR U_39F1\nENCODING 14833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2380\n5080\n8BE0\n0080\nFBE0\n0080\nF880\n8880\n8880\nF980\nENDCHAR\nSTARTCHAR U_39F2\nENCODING 14834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4100\nEFE0\n4820\n4100\n6FE0\n4380\nC540\n4920\n5120\nC100\nENDCHAR\nSTARTCHAR U_39F3\nENCODING 14835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nEC60\n47C0\nE240\n44C0\nDF00\n0400\n3F80\n0400\nFFE0\n0C00\nENDCHAR\nSTARTCHAR U_39F4\nENCODING 14836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42C0\n4CA0\nE480\n4FE0\n4480\n64A0\n46A0\nCCC0\n5480\n45A0\nCC60\nENDCHAR\nSTARTCHAR U_39F5\nENCODING 14837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2080\nF100\n2340\n3520\n2920\n6100\nAFE0\n2820\nA820\n4FE0\nENDCHAR\nSTARTCHAR U_39F6\nENCODING 14838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF440\n27C0\n2440\n37C0\n6460\nAFC0\n20C0\nA340\n4CC0\nENDCHAR\nSTARTCHAR U_39F7\nENCODING 14839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nF100\n2FE0\n2280\n3440\n6FE0\nA440\n2440\nA440\n47C0\nENDCHAR\nSTARTCHAR U_39F8\nENCODING 14840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF000\n27C0\n2440\n37C0\n6000\nA7C0\n2080\nA100\n4300\nENDCHAR\nSTARTCHAR U_39F9\nENCODING 14841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n4840\nEFC0\n4840\n4FC0\n6000\n5FE0\nC080\n5FE0\n4880\nC580\nENDCHAR\nSTARTCHAR U_39FA\nENCODING 14842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5D20\nE5C0\n4940\n5520\n4200\n6FC0\nC840\n4FC0\n4840\nCFC0\nENDCHAR\nSTARTCHAR U_39FB\nENCODING 14843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nF200\n2D20\n21C0\n3680\n6EC0\nA3A0\n2FA0\nA080\n4300\nENDCHAR\nSTARTCHAR U_39FC\nENCODING 14844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n27C0\n3100\n2FE0\n6180\nA2A0\n26C0\nAA40\n4320\nENDCHAR\nSTARTCHAR U_39FD\nENCODING 14845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nF920\n2FE0\n2920\n3BA0\n6AA0\nAAA0\n2BA0\nA820\n4FE0\nENDCHAR\nSTARTCHAR U_39FE\nENCODING 14846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n47E0\nEAA0\n42A0\n4520\n6560\n4000\nC240\n5520\n5440\nC3C0\nENDCHAR\nSTARTCHAR U_39FF\nENCODING 14847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\nEAA0\n5120\n4000\n6100\n4500\nC5E0\n4500\n4B00\nD1E0\nENDCHAR\nSTARTCHAR U_3A00\nENCODING 14848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2100\nF7E0\n2100\n27C0\n3140\n6FE0\nA140\n27C0\nA380\n4540\nENDCHAR\nSTARTCHAR U_3A01\nENCODING 14849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n27C0\n2440\n37C0\n6440\nA7C0\n2440\nA440\n4FE0\nENDCHAR\nSTARTCHAR U_3A02\nENCODING 14850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n27C0\n2540\n37C0\n6540\nA7C0\n2380\nA540\n4920\nENDCHAR\nSTARTCHAR U_3A03\nENCODING 14851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF440\n27C0\n2000\n37C0\n6040\nAFE0\n2080\nA280\n4100\nENDCHAR\nSTARTCHAR U_3A04\nENCODING 14852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nFBA0\n2920\n2FE0\n3820\n6BA0\nAAA0\n2BA0\nA820\n5060\nENDCHAR\nSTARTCHAR U_3A05\nENCODING 14853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nF440\n2100\n2FE0\n3920\n6AA0\nAA60\n2C60\nA820\n4860\nENDCHAR\nSTARTCHAR U_3A06\nENCODING 14854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\nEEE0\n4440\n4440\n6CC0\nCEE0\n5560\n5540\n4440\nC440\nENDCHAR\nSTARTCHAR U_3A07\nENCODING 14855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5540\n2680\n0500\n6A80\n1F00\n0400\n1F00\n7FC0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_3A08\nENCODING 14856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2100\n2EE0\n3000\n6440\nA7C0\n2440\nA7C0\n4840\nENDCHAR\nSTARTCHAR U_3A09\nENCODING 14857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nF7E0\n2480\n27E0\n3640\n67E0\nA420\n27E0\nA420\n47E0\nENDCHAR\nSTARTCHAR U_3A0A\nENCODING 14858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF200\n23E0\n2480\n33E0\n6000\nA3E0\n22A0\nA260\n42A0\nENDCHAR\nSTARTCHAR U_3A0B\nENCODING 14859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n27E0\nF140\n2FE0\n2100\n3200\n67E0\nAA20\n23E0\nA220\n43E0\nENDCHAR\nSTARTCHAR U_3A0C\nENCODING 14860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nF9C0\n7140\nF940\n8A60\n7000\n23E0\n7220\n2140\nF880\n6360\nENDCHAR\nSTARTCHAR U_3A0D\nENCODING 14861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n77E0\n2040\nFA40\n20C0\nF700\n0200\n1F80\n0200\n3FC0\n0600\nENDCHAR\nSTARTCHAR U_3A0E\nENCODING 14862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFFE0\n2AA0\n2AA0\n3860\n6100\nAFE0\n2100\nA280\n4C60\nENDCHAR\nSTARTCHAR U_3A0F\nENCODING 14863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2520\nF7E0\n2200\n2FE0\n3280\n62A0\nA5C0\n2480\nA540\n4A20\nENDCHAR\nSTARTCHAR U_3A10\nENCODING 14864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4BE0\n4A20\nEA20\n53E0\n5080\n73E0\n5080\nD1C0\n52A0\n56A0\nD080\nENDCHAR\nSTARTCHAR U_3A11\nENCODING 14865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AA0\n4920\nEAA0\n4FE0\n4440\n6A20\n43C0\nC440\n4A80\n4100\nCEE0\nENDCHAR\nSTARTCHAR U_3A12\nENCODING 14866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nE440\n4920\n47C0\n6100\n4FE0\nC100\n47C0\n4100\nCFE0\nENDCHAR\nSTARTCHAR U_3A13\nENCODING 14867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nEAA0\n4440\n4940\n6500\n47C0\nC900\n4FE0\n4100\nC100\nENDCHAR\nSTARTCHAR U_3A14\nENCODING 14868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40A0\n4080\nEFE0\n4880\n4E80\n68A0\n4EA0\nCAC0\n4E80\n51A0\nD260\nENDCHAR\nSTARTCHAR U_3A15\nENCODING 14869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FC0\n4840\nE860\n4FA0\n4AA0\n6920\n52A0\nC400\n5FC0\n5540\nBFE0\nENDCHAR\nSTARTCHAR U_3A16\nENCODING 14870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5D00\n4900\nE9E0\n5120\n5EA0\n6AA0\n48A0\nDC40\n48A0\n4D20\nD220\nENDCHAR\nSTARTCHAR U_3A17\nENCODING 14871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n4100\nE7C0\n4040\n4FE0\n6040\n47C0\nC100\n49E0\n4900\nD7E0\nENDCHAR\nSTARTCHAR U_3A18\nENCODING 14872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4540\nE540\n4BA0\n47C0\n6C40\n57C0\nC440\n47C0\n4440\nC7C0\nENDCHAR\nSTARTCHAR U_3A19\nENCODING 14873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\nF300\n2640\n2380\n3220\n67E0\nA100\n2FE0\nA100\n4EE0\nENDCHAR\nSTARTCHAR U_3A1A\nENCODING 14874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\nF240\n27E0\n3820\n27A0\n64A0\nA7A0\n24A0\nA7A0\n4040\nENDCHAR\nSTARTCHAR U_3A1B\nENCODING 14875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\nEEE0\n4AA0\n4EE0\n6820\n4920\nC920\n4AA0\n4CA0\nC860\nENDCHAR\nSTARTCHAR U_3A1C\nENCODING 14876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n4100\nEFE0\n4A20\n4FC0\n6A00\n4BE0\nC900\n4EE0\n4900\nD6E0\nENDCHAR\nSTARTCHAR U_3A1D\nENCODING 14877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4820\nEFE0\n4AA0\n49C0\n6BE0\n4A20\nCBE0\n4A20\n4BE0\nD260\nENDCHAR\nSTARTCHAR U_3A1E\nENCODING 14878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nE7C0\n4FE0\n4200\n64C0\n4300\nC440\n4FE0\n4540\nC920\nENDCHAR\nSTARTCHAR U_3A1F\nENCODING 14879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4920\nEFE0\n4000\n4FE0\n6000\n47C0\nC440\n47C0\n4280\nCFE0\nENDCHAR\nSTARTCHAR U_3A20\nENCODING 14880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nF7C0\n2440\n27C0\n3440\n67C0\nA100\n2FE0\nA440\n4820\nENDCHAR\nSTARTCHAR U_3A21\nENCODING 14881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nFFE0\n2920\n2E20\n3960\n6EA0\nA9E0\n2EA0\nA920\n4FE0\nENDCHAR\nSTARTCHAR U_3A22\nENCODING 14882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n48A0\n52C0\nFF80\n40A0\n5EE0\n7200\n5EA0\nD2C0\n5E80\n52A0\nD2E0\nENDCHAR\nSTARTCHAR U_3A23\nENCODING 14883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n2540\nFA20\n27C0\n3040\n6EE0\nAAA0\n2660\nAAA0\n4440\nENDCHAR\nSTARTCHAR U_3A24\nENCODING 14884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4940\nE9E0\n4A40\n4EE0\n6A40\n4AE0\nCA40\n4AE0\n4800\nCFE0\nENDCHAR\nSTARTCHAR U_3A25\nENCODING 14885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4880\nEBE0\n56A0\n4AA0\n6AA0\n56A0\nDB60\n4220\n4620\nDA60\nENDCHAR\nSTARTCHAR U_3A26\nENCODING 14886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4BE0\nF880\n4BE0\n4880\n6BE0\n4000\nC7C0\n4440\n4380\nCC60\nENDCHAR\nSTARTCHAR U_3A27\nENCODING 14887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2440\nF7E0\n2100\n2FE0\n3280\n67C0\nBD60\n27C0\nA540\n47C0\nENDCHAR\nSTARTCHAR U_3A28\nENCODING 14888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4DE0\nE8A0\n4AA0\n4D60\n6000\n4FE0\nC920\n4FE0\n4920\nCFE0\nENDCHAR\nSTARTCHAR U_3A29\nENCODING 14889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nE800\n4F20\n49C0\n6A40\n4AE0\nCB40\n4DE0\n4A00\nD5E0\nENDCHAR\nSTARTCHAR U_3A2A\nENCODING 14890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\nE7C0\n4440\n47C0\n6920\n4540\nCFE0\n4280\n42A0\nCC60\nENDCHAR\nSTARTCHAR U_3A2B\nENCODING 14891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n5500\nF5E0\n5680\n5440\n4400\n6000\nDFC0\n5540\n5540\nBFE0\nENDCHAR\nSTARTCHAR U_3A2C\nENCODING 14892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF100\n2FE0\n2440\n27C0\n3120\n62C0\nA680\n2A60\n4300\nENDCHAR\nSTARTCHAR U_3A2D\nENCODING 14893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nE820\n4FE0\n4A40\n6BC0\n4BE0\nCAA0\n4BE0\n4A00\nD3E0\nENDCHAR\nSTARTCHAR U_3A2E\nENCODING 14894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4560\n4BA0\nEAA0\n4BA0\n4AA0\n6BA0\n4C60\nC280\n4280\n42A0\nCC60\nENDCHAR\nSTARTCHAR U_3A2F\nENCODING 14895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n5FA0\nEEA0\n4AC0\n4EA0\n60A0\n4EA0\nC2C0\n5F80\n4480\nCC80\nENDCHAR\nSTARTCHAR U_3A30\nENCODING 14896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFA80\n2640\n2CA0\n37C0\n6300\nA540\n2CC0\nB580\n4660\nENDCHAR\nSTARTCHAR U_3A31\nENCODING 14897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n47C0\nE940\n4580\n4E00\n6100\nCFE0\n4000\n4FE0\nC440\n47C0\nENDCHAR\nSTARTCHAR U_3A32\nENCODING 14898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nF440\n2100\n2FE0\n2920\n37C0\n6100\nA380\n2540\n6920\nENDCHAR\nSTARTCHAR U_3A33\nENCODING 14899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF920\n27C0\n2280\n3FE0\n6040\nA740\n2540\n2740\n60C0\nENDCHAR\nSTARTCHAR U_3A34\nENCODING 14900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\n5E80\nE9E0\n5E00\n52E0\n7E40\nD280\n5E80\n4900\nDF20\n48C0\nENDCHAR\nSTARTCHAR U_3A35\nENCODING 14901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5FE0\nEA00\n4EA0\n4AA0\n6EA0\nD260\n4000\n4FE0\nC220\n5CC0\nENDCHAR\nSTARTCHAR U_3A36\nENCODING 14902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nFC40\n27C0\n2400\n37C0\n6400\nA7E0\n2020\n2AA0\n6060\nENDCHAR\nSTARTCHAR U_3A37\nENCODING 14903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\nF240\n27E0\n3D20\n67E0\nA100\n2FE0\n2100\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_3A38\nENCODING 14904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nEA20\n4480\n5520\nC640\n5BC0\n4100\n4920\n4920\nCFE0\nENDCHAR\nSTARTCHAR U_3A39\nENCODING 14905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4EE0\nF440\n4EE0\n4440\n6EE0\nCFC0\n4040\n5FE0\n4040\nCFC0\nENDCHAR\nSTARTCHAR U_3A3A\nENCODING 14906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nF440\n27C0\n3100\n6FE0\nA920\n2BA0\n2D60\nA920\n6860\nENDCHAR\nSTARTCHAR U_3A3B\nENCODING 14907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nFF00\nAA00\nFBE0\nAA80\nFC80\n2F80\n0400\n7FE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_3A3C\nENCODING 14908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n7E40\n5580\n7E60\n5540\n7DC0\n0F00\n0200\n7FE0\n0200\n0E00\nENDCHAR\nSTARTCHAR U_3A3D\nENCODING 14909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F20\n4020\nEE20\n4AA0\n4EA0\n60A0\nDFA0\n5520\n5F20\n5520\nDF60\nENDCHAR\nSTARTCHAR U_3A3E\nENCODING 14910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4BA0\nE7C0\n4100\n4FE0\n6200\nCF20\n4140\n4F80\n4340\nCD20\nENDCHAR\nSTARTCHAR U_3A3F\nENCODING 14911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2080\nF7E0\n24A0\n37C0\n6480\nA5E0\n26A0\n25A0\nA500\n6AE0\nENDCHAR\nSTARTCHAR U_3A40\nENCODING 14912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n4100\nEFE0\n4900\n4FC0\n6900\nCBE0\n4D60\n4AA0\n4920\nD2C0\nENDCHAR\nSTARTCHAR U_3A41\nENCODING 14913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2AA0\nF440\n2A20\n2480\n3FE0\nE480\n27E0\n2480\nE7E0\nENDCHAR\nSTARTCHAR U_3A42\nENCODING 14914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\n4E40\n52C0\nE440\n5FC0\n5540\n7F60\nD5C0\n5F40\n5540\nE340\nENDCHAR\nSTARTCHAR U_3A43\nENCODING 14915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2AA0\nF7C0\n2280\n2FE0\n3280\nE540\n28A0\n2300\n6080\nENDCHAR\nSTARTCHAR U_3A44\nENCODING 14916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n27C0\nF000\n27C0\n2540\n37C0\n6540\nA7C0\n2000\nAD40\n57A0\nENDCHAR\nSTARTCHAR U_3A45\nENCODING 14917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n2EE0\nFAA0\n2EE0\n2280\n3FE0\nE920\n2FE0\n2920\n6FE0\nENDCHAR\nSTARTCHAR U_3A46\nENCODING 14918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n48A0\nFE80\n41E0\n5C80\n5480\n7C80\nC880\n5D40\nCA40\n5C60\nENDCHAR\nSTARTCHAR U_3A47\nENCODING 14919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF140\n2FE0\n3140\n2FE0\n6540\nA7C0\n2540\nA540\n4FE0\nENDCHAR\nSTARTCHAR U_3A48\nENCODING 14920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n2440\n27C0\n3140\n67E0\nA240\n27C0\nAA40\n53C0\nENDCHAR\nSTARTCHAR U_3A49\nENCODING 14921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF7C0\n2820\n27C0\n3440\n6FE0\nAAA0\n2660\nBBA0\n4660\nENDCHAR\nSTARTCHAR U_3A4A\nENCODING 14922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2F80\nF540\n2FE0\n2AA0\n2FE0\n3040\nEFE0\n2040\n2240\n60C0\nENDCHAR\nSTARTCHAR U_3A4B\nENCODING 14923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF140\n2FE0\n2140\n37C0\n6BA0\nAD60\n2BA0\nAD60\n53A0\nENDCHAR\nSTARTCHAR U_3A4C\nENCODING 14924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27E0\nF2A0\n2FE0\n2A80\n3FE0\n6460\nA7C0\n2440\nA7C0\n4C60\nENDCHAR\nSTARTCHAR U_3A4D\nENCODING 14925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\nFA40\n2100\n2FE0\n3100\n67C0\nA540\n2380\nA540\n4920\nENDCHAR\nSTARTCHAR U_3A4E\nENCODING 14926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EC0\n2AA0\nFE80\n2BE0\n2E80\n3080\n6E80\nAA80\n2EC0\nAB20\n4A20\nENDCHAR\nSTARTCHAR U_3A4F\nENCODING 14927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nF7C0\n2540\n27C0\n2100\n37C0\nE100\n2FE0\n2540\n6AA0\nENDCHAR\nSTARTCHAR U_3A50\nENCODING 14928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2EE0\nF540\n2100\n2FE0\n3100\n67C0\nA080\n2FE0\nA480\n4180\nENDCHAR\nSTARTCHAR U_3A51\nENCODING 14929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n2280\n2440\n3EE0\n6280\nAEE0\n2280\nAEE0\n4280\nENDCHAR\nSTARTCHAR U_3A52\nENCODING 14930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n27C0\n2AA0\n37C0\n6000\nAFE0\n2540\nA520\n4920\nENDCHAR\nSTARTCHAR U_3A53\nENCODING 14931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5BC0\n8A40\nDDE0\nAA80\n77E0\n2200\nDFC0\n0200\nFFE0\n0200\n0C00\nENDCHAR\nSTARTCHAR U_3A54\nENCODING 14932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FC0\n5140\nFF40\n5520\n5FE0\n5540\n7540\nDFC0\n5540\n54A0\nE920\nENDCHAR\nSTARTCHAR U_3A55\nENCODING 14933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n2920\n27C0\n3100\n66C0\nA920\n27C0\nA280\n4100\nENDCHAR\nSTARTCHAR U_3A56\nENCODING 14934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\nF7C0\n2540\n2FE0\n3100\n67C0\nA540\n27C0\nA540\n4FE0\nENDCHAR\nSTARTCHAR U_3A57\nENCODING 14935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2FE0\nF480\n2FE0\n2480\n37E0\nE480\n2FC0\n2240\nA420\n58E0\nENDCHAR\nSTARTCHAR U_3A58\nENCODING 14936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nF100\n27C0\n3100\n2FE0\n6540\nBFE0\n24A0\n2E40\n64A0\nENDCHAR\nSTARTCHAR U_3A59\nENCODING 14937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2AA0\nF7C0\n2280\n2FE0\n3440\nE920\n27C0\n2100\n6FE0\nENDCHAR\nSTARTCHAR U_3A5A\nENCODING 14938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2FE0\n2820\n37C0\n6220\nAD40\n2280\nAD60\n4200\nENDCHAR\nSTARTCHAR U_3A5B\nENCODING 14939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n5120\nFFE0\n5560\n57A0\n7560\nDFA0\n54A0\n52A0\n5120\nDFE0\nENDCHAR\nSTARTCHAR U_3A5C\nENCODING 14940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E80\n5480\nFEE0\n5300\n5E00\n54E0\n7F00\nC000\n5FC0\n5540\nFFE0\nENDCHAR\nSTARTCHAR U_3A5D\nENCODING 14941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2FE0\n2820\n37C0\n6240\nAD80\n2340\nACA0\n4300\nENDCHAR\nSTARTCHAR U_3A5E\nENCODING 14942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n27E0\nF240\n2DA0\n2000\n3FE0\n6920\nA7C0\n2100\nA540\n4920\nENDCHAR\nSTARTCHAR U_3A5F\nENCODING 14943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2AA0\nF7C0\n2280\n2FE0\n3540\nEFE0\n2100\n2540\n6B20\nENDCHAR\nSTARTCHAR U_3A60\nENCODING 14944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nFA80\n2FE0\n2AA0\n3FE0\n6A40\nAB60\n2A40\nA920\n5540\nENDCHAR\nSTARTCHAR U_3A61\nENCODING 14945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nF200\n27C0\n2240\n33C0\n6EE0\nA880\n2EE0\nAAA0\n4EE0\nENDCHAR\nSTARTCHAR U_3A62\nENCODING 14946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2EE0\nF280\n2FE0\n2AA0\n3FE0\n6120\nAFE0\n2940\nACA0\n5360\nENDCHAR\nSTARTCHAR U_3A63\nENCODING 14947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2660\nFAA0\n2FE0\n2920\n37C0\n6540\nA7C0\n2540\nAFE0\n4100\nENDCHAR\nSTARTCHAR U_3A64\nENCODING 14948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5E80\nE480\n5FE0\n5540\n5F40\n7540\nDE80\n4A80\n5340\nEF40\nENDCHAR\nSTARTCHAR U_3A65\nENCODING 14949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44C0\n4EA0\nE480\n5FE0\n4A80\n6BA0\nDAA0\n4B40\n5A40\n4FA0\nD920\nENDCHAR\nSTARTCHAR U_3A66\nENCODING 14950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n47E0\nE900\n5FC0\n4900\n6FE0\n4900\nDFE0\n54A0\n5AE0\nD320\nENDCHAR\nSTARTCHAR U_3A67\nENCODING 14951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n4840\nEFC0\n4480\n5FE0\n6480\nDFE0\n4D40\n53A0\n5540\nCB20\nENDCHAR\nSTARTCHAR U_3A68\nENCODING 14952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4EE0\nE440\n4EE0\n4440\n6FC0\nD040\n4FC0\n4500\n5460\nD7C0\nENDCHAR\nSTARTCHAR U_3A69\nENCODING 14953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n48E0\n4E40\nE8E0\n4EA0\n40E0\n64A0\nD5E0\n4EA0\n55E0\n4440\nCCA0\nENDCHAR\nSTARTCHAR U_3A6A\nENCODING 14954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n4480\nE9E0\n4B20\n5DE0\n4520\n69E0\nDF20\n41E0\n54C0\nEB20\nENDCHAR\nSTARTCHAR U_3A6B\nENCODING 14955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4660\n4880\nEFE0\n4AA0\n47C0\n6440\nC7C0\n4440\n47C0\n4280\nCC40\nENDCHAR\nSTARTCHAR U_3A6C\nENCODING 14956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4640\n4440\nFFE0\n5440\n5F40\n5460\n77C0\nD540\n5DC0\n5560\nEFC0\nENDCHAR\nSTARTCHAR U_3A6D\nENCODING 14957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4D60\n4AA0\nED60\n4AA0\n5FE0\n5020\n67C0\nC080\n4FE0\n4100\nC700\nENDCHAR\nSTARTCHAR U_3A6E\nENCODING 14958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5B60\n5220\nFB60\n5520\n7FE0\n4540\n6BA0\nD100\n4FC0\n4100\nC300\nENDCHAR\nSTARTCHAR U_3A6F\nENCODING 14959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5C80\n51E0\nFF40\n5480\n5F60\n4200\n6700\nC240\n4FC0\n4A80\nD640\nENDCHAR\nSTARTCHAR U_3A70\nENCODING 14960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2EE0\nF380\n2280\n2FE0\n2AA0\n6EE0\nA100\n2FE0\nA540\n4920\nENDCHAR\nSTARTCHAR U_3A71\nENCODING 14961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\nFFE0\n2AA0\n2FE0\n3A20\n6EE0\nAA20\n2EA0\nAA20\n4D60\nENDCHAR\nSTARTCHAR U_3A72\nENCODING 14962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2EE0\nF6C0\n2AA0\n2EE0\n3480\n6FE0\nB480\n27E0\nA480\n47E0\nENDCHAR\nSTARTCHAR U_3A73\nENCODING 14963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4940\n5FE0\nEA80\n4FE0\n4A80\n5FE0\n6000\nCFC0\n4440\n4380\nDC60\nENDCHAR\nSTARTCHAR U_3A74\nENCODING 14964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\n2AA0\n2EE0\n3500\n6FE0\nB900\n2FE0\nA900\n4FE0\nENDCHAR\nSTARTCHAR U_3A75\nENCODING 14965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4740\n4460\nFF40\n54E0\n5D40\n5740\n7540\nD7A0\n5AA0\nDFA0\n6AA0\nENDCHAR\nSTARTCHAR U_3A76\nENCODING 14966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n4EE0\nF540\n5FE0\n4A40\n7220\nDFE0\n5B60\n56A0\nDB60\n56A0\nENDCHAR\nSTARTCHAR U_3A77\nENCODING 14967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n5FE0\nF4A0\n4FC0\n4480\n7FE0\nCD40\n57A0\n4500\nC7E0\n4AA0\nENDCHAR\nSTARTCHAR U_3A78\nENCODING 14968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nF7C0\n2540\n2FE0\n3DA0\n6B60\nAFE0\n2AA0\nA500\n4FE0\nENDCHAR\nSTARTCHAR U_3A79\nENCODING 14969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F80\n4A80\nEF80\n4A80\n5FC0\n7540\nDFC0\n5540\n4700\nC500\n5FC0\nENDCHAR\nSTARTCHAR U_3A7A\nENCODING 14970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9080\n93E0\n9080\nFC80\n93E0\n9220\n9140\n9140\n9480\nD940\n9620\nENDCHAR\nSTARTCHAR U_3A7B\nENCODING 14971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7080\nA7E0\n7880\n8080\nBBE0\nAA20\nB940\nA080\nA940\nB220\nENDCHAR\nSTARTCHAR U_3A7C\nENCODING 14972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n97E0\n6100\n47C0\nA240\n7A40\n8A80\n5100\n2280\nCC60\nENDCHAR\nSTARTCHAR U_3A7D\nENCODING 14973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n23E0\nFA40\nAE40\nFA80\n2280\n7180\n6900\nA280\n2C60\nENDCHAR\nSTARTCHAR U_3A7E\nENCODING 14974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1880\nE080\n2080\nFDE0\nA880\nFC80\nABE0\n2220\nF940\n2080\nFB60\nENDCHAR\nSTARTCHAR U_3A7F\nENCODING 14975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\n7A00\n83E0\n0240\nFA40\n1540\n2140\n4080\n8940\nFA20\nENDCHAR\nSTARTCHAR U_3A80\nENCODING 14976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n2100\n23E0\n2240\nFA40\n2540\n2140\n2080\n2080\nA140\n4620\nENDCHAR\nSTARTCHAR U_3A81\nENCODING 14977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n28E0\n4480\nA3E0\n1220\nF940\n0940\n1080\n1140\n2620\nENDCHAR\nSTARTCHAR U_3A82\nENCODING 14978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n80E0\n7880\n0080\nF3E0\n1220\n1140\n1480\n1540\n0E20\nENDCHAR\nSTARTCHAR U_3A83\nENCODING 14979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFC80\n08E0\nE880\nA880\nABE0\nAA20\nE940\n0880\n0940\n1A20\nENDCHAR\nSTARTCHAR U_3A84\nENCODING 14980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFD00\n55E0\nFD40\nD340\nFD40\n5540\n5480\n5C80\n5140\n9220\nENDCHAR\nSTARTCHAR U_3A85\nENCODING 14981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0200\n7FE0\n4520\n58A0\n4720\n0400\n3F80\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_3A86\nENCODING 14982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nF080\n90E0\n9080\nFBE0\n9220\n9140\n9140\nB480\nCD40\nB620\nENDCHAR\nSTARTCHAR U_3A87\nENCODING 14983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5100\n7DE0\n9240\n1140\nFD40\n2940\n2880\n2A80\n4D40\n8A20\nENDCHAR\nSTARTCHAR U_3A88\nENCODING 14984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n70E0\n2080\nF880\n23E0\n2220\nF940\n2080\n3940\nC220\nENDCHAR\nSTARTCHAR U_3A89\nENCODING 14985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n53E0\n8A40\n0540\nF940\n0140\nF880\n8880\n8940\nFA20\nENDCHAR\nSTARTCHAR U_3A8A\nENCODING 14986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n2880\nFCE0\n2880\nF880\n23E0\n7A20\nC940\n4880\n4940\n7A20\nENDCHAR\nSTARTCHAR U_3A8B\nENCODING 14987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8880\nF8E0\n8880\nF880\n03E0\nFA20\n2140\nF880\n2140\n2220\nENDCHAR\nSTARTCHAR U_3A8C\nENCODING 14988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n5080\n20E0\nF880\nA880\nFBE0\nAA20\nF940\nA880\nA940\nBA20\nENDCHAR\nSTARTCHAR U_3A8D\nENCODING 14989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFD00\n21E0\nFE40\n8540\n7940\n0940\n1C80\n7080\n1140\n3220\nENDCHAR\nSTARTCHAR U_3A8E\nENCODING 14990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFF00\n11E0\n5640\n5540\nBB40\n1140\n2880\n2880\n4540\n8620\nENDCHAR\nSTARTCHAR U_3A8F\nENCODING 14991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nF880\nA8E0\nF880\nA880\nFBE0\n4220\nA140\nF880\n2140\n2220\nENDCHAR\nSTARTCHAR U_3A90\nENCODING 14992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFC80\n84E0\nFC80\n9880\n97E0\nFE20\n9140\n9080\nA940\nC620\nENDCHAR\nSTARTCHAR U_3A91\nENCODING 14993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFC80\n50E0\nAC80\nF880\nABE0\nFA20\nA940\nF880\n2140\n3A20\nENDCHAR\nSTARTCHAR U_3A92\nENCODING 14994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n9C80\n84E0\nCC80\n8480\nFFE0\n5220\n5140\n5080\n5540\n9A20\nENDCHAR\nSTARTCHAR U_3A93\nENCODING 14995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C80\nE080\n20E0\nFC80\n2080\n6BE0\nEA20\n6D40\nE880\n6D40\n2220\nENDCHAR\nSTARTCHAR U_3A94\nENCODING 14996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n4880\nFCE0\n4880\n6C80\nDBE0\n6A20\n4940\n4880\n4940\n4A20\nENDCHAR\nSTARTCHAR U_3A95\nENCODING 14997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3880\n20E0\nF880\n8880\nFBE0\n8A20\nF940\n2080\nF940\n2220\nENDCHAR\nSTARTCHAR U_3A96\nENCODING 14998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n48E0\n7880\n0880\nFFE0\n1220\n5540\n3880\n5540\n3220\nENDCHAR\nSTARTCHAR U_3A97\nENCODING 14999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1080\nFCE0\n4880\n3080\nFFE0\n0220\n7940\n4880\n4940\n7A20\nENDCHAR\nSTARTCHAR U_3A98\nENCODING 15000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n29E0\n4640\nB940\n1140\n7D40\n5540\n7C80\n2940\n4620\nENDCHAR\nSTARTCHAR U_3A99\nENCODING 15001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA900\nF9E0\nAA40\nF940\n2140\nF940\n2140\n7140\nA880\n2360\nENDCHAR\nSTARTCHAR U_3A9A\nENCODING 15002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF900\n51E0\n5240\nF940\n0140\nF940\n8940\nF940\n8880\nFB60\nENDCHAR\nSTARTCHAR U_3A9B\nENCODING 15003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\nFC80\n48E0\n7880\n4880\n7BE0\n4A20\nFD40\n5080\n6940\n7E20\nENDCHAR\nSTARTCHAR U_3A9C\nENCODING 15004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n9280\n92E0\nFE80\n0080\nFFE0\n2220\nFF20\nAAC0\nAAC0\n83A0\nENDCHAR\nSTARTCHAR U_3A9D\nENCODING 15005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFE80\n10E0\nFE80\nD680\nBBE0\n9220\nFF40\n3880\n5540\n9220\nENDCHAR\nSTARTCHAR U_3A9E\nENCODING 15006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n8480\nA4E0\n9480\n0080\nFFE0\n8620\nE540\n9C80\n8540\nFE20\nENDCHAR\nSTARTCHAR U_3A9F\nENCODING 15007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n01E0\nFA40\n8D40\nF940\n0140\nF940\nC880\nB940\nFE20\nENDCHAR\nSTARTCHAR U_3AA0\nENCODING 15008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFC80\n50E0\nFC80\n5480\nFFE0\n5520\nFD40\n5880\nD540\n5220\nENDCHAR\nSTARTCHAR U_3AA1\nENCODING 15009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFE80\n92E0\n7C80\n1080\n7FE0\n1220\n7D40\n4480\n4540\n7E20\nENDCHAR\nSTARTCHAR U_3AA2\nENCODING 15010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5480\n9280\nD6E0\n9280\nD680\n11E0\n7E20\n4540\n2880\n1140\nEE20\nENDCHAR\nSTARTCHAR U_3AA3\nENCODING 15011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFE80\n44E0\n7D20\n0320\nFF20\n8340\nBAC0\nAA80\nBB40\n8220\nENDCHAR\nSTARTCHAR U_3AA4\nENCODING 15012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\n9280\nFE80\n92E0\nFEA0\n5520\nFEA0\n54A0\nFEC0\n10C0\n1320\nENDCHAR\nSTARTCHAR U_3AA5\nENCODING 15013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3880\n20E0\nFC80\nA480\n9BE0\nBE20\nA540\nBC80\nA540\nFE20\nENDCHAR\nSTARTCHAR U_3AA6\nENCODING 15014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFD00\n85E0\n7A40\nF940\nA940\nF940\nA880\nF880\n5140\n8A20\nENDCHAR\nSTARTCHAR U_3AA7\nENCODING 15015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n2880\n7CE0\n8280\n7FE0\n4520\nFD20\nB540\n6C80\nB540\n6E20\nENDCHAR\nSTARTCHAR U_3AA8\nENCODING 15016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n3080\nFEE0\n1080\n7C80\n57E0\nFE20\n0220\n7940\n4880\n7B60\nENDCHAR\nSTARTCHAR U_3AA9\nENCODING 15017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n28E0\nFC80\n2880\nFBE0\nFA20\nAA20\nF940\nE880\nBB60\nENDCHAR\nSTARTCHAR U_3AAA\nENCODING 15018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\n2080\nF8E0\n5080\n8880\nDBE0\n5220\nDA20\n5140\nD880\n5360\nENDCHAR\nSTARTCHAR U_3AAB\nENCODING 15019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3880\n2080\nFCE0\n8480\n7880\n4BE0\nB620\n7A20\nED40\n5880\n7B60\nENDCHAR\nSTARTCHAR U_3AAC\nENCODING 15020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\nB480\n6CE0\nB480\n2080\n53E0\n7E20\nD220\n7D40\n5080\n7F60\nENDCHAR\nSTARTCHAR U_3AAD\nENCODING 15021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3880\n2080\nFCE0\nA480\nB880\nBBE0\nAA20\nBA20\nFD40\nD480\nFF60\nENDCHAR\nSTARTCHAR U_3AAE\nENCODING 15022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n1080\nFCE0\nD480\nB880\n57E0\n0220\nAA20\nA940\nA880\nAB60\nENDCHAR\nSTARTCHAR U_3AAF\nENCODING 15023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\n7FC0\n1100\n0E00\nF1E0\n0400\n3F80\n0400\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_3AB0\nENCODING 15024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n0A00\n1F00\nE0E0\n2480\n1500\nFFE0\n2480\n4440\nENDCHAR\nSTARTCHAR U_3AB1\nENCODING 15025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23C0\nF480\n1D00\n57C0\n6540\n2540\n57E0\n5100\n8280\n0440\nENDCHAR\nSTARTCHAR U_3AB2\nENCODING 15026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n1200\n4200\n2200\n07E0\nFA00\n0200\n7FC0\n0040\n0040\n0040\nENDCHAR\nSTARTCHAR U_3AB3\nENCODING 15027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n1200\n4A00\n2200\n03E0\nFE00\n0200\n3FC0\n4020\n4020\n3FC0\nENDCHAR\nSTARTCHAR U_3AB4\nENCODING 15028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n7280\n0180\n0480\nFA80\n5080\n57E0\n5080\n5480\n5880\n9080\nENDCHAR\nSTARTCHAR U_3AB5\nENCODING 15029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nAA80\n7180\n2480\nFA80\n2080\n27E0\nF880\n2080\n2080\n4080\nENDCHAR\nSTARTCHAR U_3AB6\nENCODING 15030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFA80\n2180\n4480\nFA80\n8880\n8FE0\nF880\n8880\n8880\nF880\nENDCHAR\nSTARTCHAR U_3AB7\nENCODING 15031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF840\n0240\nF940\n8840\n8A40\nF940\n00E0\n8B40\n5040\n3840\nC040\nENDCHAR\nSTARTCHAR U_3AB8\nENCODING 15032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\nFD40\n48C0\n7A40\n4940\n7840\n4BE0\nFC40\n0040\n4840\n8440\nENDCHAR\nSTARTCHAR U_3AB9\nENCODING 15033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\n7D40\nD6C0\n7D40\n54C0\n7C40\n13E0\nFC40\n2440\n3840\nCC40\nENDCHAR\nSTARTCHAR U_3ABA\nENCODING 15034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFD40\n20C0\nFC40\nB540\nFCC0\nB460\nFFC0\n2040\n5040\n8840\nENDCHAR\nSTARTCHAR U_3ABB\nENCODING 15035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n8E80\n6A60\n8480\n6E60\n4A40\nAEA0\n4900\n2500\nFFE0\n0100\nENDCHAR\nSTARTCHAR U_3ABC\nENCODING 15036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC60\n0B80\n0A00\nEBE0\nAA40\nAA40\nAA40\nEA40\n0A40\n0A40\n3440\nENDCHAR\nSTARTCHAR U_3ABD\nENCODING 15037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0000\nF0E0\n9300\n9200\nF3E0\n9240\n9240\nF240\n0440\n0840\nENDCHAR\nSTARTCHAR U_3ABE\nENCODING 15038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n3B80\n4A00\nAA00\n13E0\n2A40\nC240\n7A40\n4A40\n4A40\n7C40\nENDCHAR\nSTARTCHAR U_3ABF\nENCODING 15039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nAB80\nAA00\nFA00\n23E0\n4240\nAA40\nAA40\nFA40\n2240\nC440\nENDCHAR\nSTARTCHAR U_3AC0\nENCODING 15040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n4980\n7900\n49E0\n7940\n0140\nFD40\n8540\nFD40\n8540\nFE40\nENDCHAR\nSTARTCHAR U_3AC1\nENCODING 15041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA460\nC980\nA500\nC900\nFDE0\n8140\nFD40\nA940\nAD40\nC140\nFA40\nENDCHAR\nSTARTCHAR U_3AC2\nENCODING 15042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\nFD80\n8100\nA900\nFDE0\nA940\nA940\nB940\n8140\n5540\n9640\nENDCHAR\nSTARTCHAR U_3AC3\nENCODING 15043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1080\nFC80\n2080\n2080\n3880\n2940\n2940\n4A40\n5A20\n8420\nENDCHAR\nSTARTCHAR U_3AC4\nENCODING 15044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0000\nFFE0\n2000\n3FC0\n4840\nBF40\n1040\n1E40\n2240\n46C0\nENDCHAR\nSTARTCHAR U_3AC5\nENCODING 15045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF940\n4220\n45E0\n7800\n4BE0\n4940\n4940\n4940\n5940\n8240\nENDCHAR\nSTARTCHAR U_3AC6\nENCODING 15046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFC80\n4140\n4220\n7C80\n4880\n49C0\n4AA0\n4AA0\n4880\n9980\nENDCHAR\nSTARTCHAR U_3AC7\nENCODING 15047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF940\n4220\n7C80\n4840\n4980\n9840\n0000\n7FC0\n0040\n0040\nENDCHAR\nSTARTCHAR U_3AC8\nENCODING 15048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF940\n4220\n7880\n4840\n9880\n0040\n3F80\n4040\n4040\n3F80\nENDCHAR\nSTARTCHAR U_3AC9\nENCODING 15049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n23C0\nF480\n47E0\n7400\n55C0\n5540\n5540\n55C0\n9520\nB9E0\nENDCHAR\nSTARTCHAR U_3ACA\nENCODING 15050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\nF400\n4800\n4FE0\n7040\n5740\n5540\n5540\n5740\nB0C0\nENDCHAR\nSTARTCHAR U_3ACB\nENCODING 15051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\nF400\n4900\n47C0\n7540\n57C0\n5540\n5FE0\n9440\nB4C0\nENDCHAR\nSTARTCHAR U_3ACC\nENCODING 15052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nFBE0\n4400\n77E0\n5080\n5080\n52E0\n5280\n9280\nB7E0\nENDCHAR\nSTARTCHAR U_3ACD\nENCODING 15053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2400\nF7E0\n4940\n4280\n75E0\n5D20\n55A0\n5540\n9440\nB5A0\nENDCHAR\nSTARTCHAR U_3ACE\nENCODING 15054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27E0\nF400\n4FE0\n4920\n77C0\n5540\n57C0\n5540\n9FE0\nB100\nENDCHAR\nSTARTCHAR U_3ACF\nENCODING 15055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\nF800\n4FE0\n4280\n7FE0\n5AA0\n5FE0\n5240\n9180\nB760\nENDCHAR\nSTARTCHAR U_3AD0\nENCODING 15056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n4080\n7F80\n4080\n7F80\n0000\n4700\n7840\n4040\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_3AD1\nENCODING 15057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n8BE0\n8920\nF920\n8920\n8920\n8920\nF920\n8AA0\n0440\nENDCHAR\nSTARTCHAR U_3AD2\nENCODING 15058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2040\n3FC0\n2040\n1080\nFFE0\n1080\n1080\n6080\nENDCHAR\nSTARTCHAR U_3AD3\nENCODING 15059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF900\n8BE0\n8C00\n8BC0\nF880\n8900\n8A00\n8C00\nFC20\n03C0\nENDCHAR\nSTARTCHAR U_3AD4\nENCODING 15060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2040\n3FC0\n2040\n0400\n07C0\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3AD5\nENCODING 15061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0000\nFFE0\n1100\n1120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_3AD6\nENCODING 15062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0780\n0400\n0400\nFFE0\n0000\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3AD7\nENCODING 15063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4040\n7FC0\n0000\n7F80\n0200\nFFE0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_3AD8\nENCODING 15064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0C00\n1400\n2500\n4480\n8440\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3AD9\nENCODING 15065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n97C0\n9100\nF100\n9FE0\n9100\n9100\nF280\n9440\n0820\nENDCHAR\nSTARTCHAR U_3ADA\nENCODING 15066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7FE0\n8920\n1120\n22A0\nC460\n7FC0\n4040\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_3ADB\nENCODING 15067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n9440\n9440\n97C0\nF280\n9280\n9280\n9480\nF4A0\n08E0\nENDCHAR\nSTARTCHAR U_3ADC\nENCODING 15068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n9440\n9440\n97C0\nF440\n9440\n9440\n97C0\nF000\n0FE0\nENDCHAR\nSTARTCHAR U_3ADD\nENCODING 15069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nEF00\nA900\nA900\nAFE0\nE900\nA900\nA900\nA880\nEEA0\n0960\nENDCHAR\nSTARTCHAR U_3ADE\nENCODING 15070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF540\n9540\n97C0\n9100\nF7C0\n9440\n9280\n9100\nF280\n0C60\nENDCHAR\nSTARTCHAR U_3ADF\nENCODING 15071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n9440\n9440\n9440\nF860\n9000\n97C0\n9440\nF440\n07C0\nENDCHAR\nSTARTCHAR U_3AE0\nENCODING 15072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF920\n9540\n9100\n97C0\nF100\n9FE0\n9100\n9100\nF100\n0100\nENDCHAR\nSTARTCHAR U_3AE1\nENCODING 15073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n5C40\n4740\n7FC0\n1000\n3F00\n5300\n0C00\n1A00\nE5C0\n0C00\nENDCHAR\nSTARTCHAR U_3AE2\nENCODING 15074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n97C0\n9100\n9100\nFFE0\n9100\n9200\n9440\nFFE0\n0420\nENDCHAR\nSTARTCHAR U_3AE3\nENCODING 15075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n7FC0\n4440\n7FC0\n4440\n7FC0\n0420\n07E0\nENDCHAR\nSTARTCHAR U_3AE4\nENCODING 15076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n5C40\n4740\n7FC0\n0C00\n1E20\n0240\n7B80\n0A80\n1240\nE620\nENDCHAR\nSTARTCHAR U_3AE5\nENCODING 15077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n91E0\n9220\n9540\nF080\n9100\n93E0\n9620\nFA20\n03E0\nENDCHAR\nSTARTCHAR U_3AE6\nENCODING 15078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n27C0\n4C40\nD280\n5100\n5EE0\n57C0\n5440\n57C0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_3AE7\nENCODING 15079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n3C80\n2780\n3F80\n0400\n1500\n7FC0\n0400\n1500\n2480\nC440\nENDCHAR\nSTARTCHAR U_3AE8\nENCODING 15080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF080\n97E0\n9920\n9100\nFFE0\n9240\n9240\n9140\nF180\n0660\nENDCHAR\nSTARTCHAR U_3AE9\nENCODING 15081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n2480\nFBE0\n2080\n7FC0\n4040\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_3AEA\nENCODING 15082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7FC0\n0800\n3F80\n1000\nFFE0\n48C0\nAEA0\n2B80\n2880\n2F80\nENDCHAR\nSTARTCHAR U_3AEB\nENCODING 15083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2C80\n2680\n3F80\n0000\n7FC0\n0A00\n4A40\n2A80\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_3AEC\nENCODING 15084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n97E0\n9820\n97A0\nF4A0\n97A0\n94A0\n97A0\nF4A0\n0060\nENDCHAR\nSTARTCHAR U_3AED\nENCODING 15085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2480\n3F80\n0400\n7FC0\n0100\n3FC0\n1100\n0B00\nENDCHAR\nSTARTCHAR U_3AEE\nENCODING 15086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n5DE0\n5100\n5D20\nF1E0\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3AEF\nENCODING 15087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n7FC0\n4040\n7FC0\n4040\nFFE0\n1100\n61E0\nENDCHAR\nSTARTCHAR U_3AF0\nENCODING 15088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF7E0\n9420\n97E0\n9420\nF7E0\n9500\n9520\n94C0\nF480\n0660\nENDCHAR\nSTARTCHAR U_3AF1\nENCODING 15089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2C80\n2680\n3F80\n0400\n7FC0\n0400\nFFE0\n0900\n5140\nA320\nENDCHAR\nSTARTCHAR U_3AF2\nENCODING 15090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9100\n97E0\n9820\nF7C0\n9080\n9FE0\n9100\nF100\n0300\nENDCHAR\nSTARTCHAR U_3AF3\nENCODING 15091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5C00\n4380\n7FC0\n4A40\n4980\n4CC0\n5FC0\n5640\n9340\n9FC0\nENDCHAR\nSTARTCHAR U_3AF4\nENCODING 15092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n9140\n9FE0\n9100\nF3C0\n9440\n9BE0\n9080\nF080\n0180\nENDCHAR\nSTARTCHAR U_3AF5\nENCODING 15093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n9EE0\n9280\n9EE0\nF280\n96E0\n9A80\n9280\nF480\n0880\nENDCHAR\nSTARTCHAR U_3AF6\nENCODING 15094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF040\n9FE0\n9040\n97E0\nF920\n97C0\n9540\n9540\nF540\n0100\nENDCHAR\nSTARTCHAR U_3AF7\nENCODING 15095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1100\n1500\n1500\nFFE0\n1100\n3F80\nDD60\n1700\n1F00\nENDCHAR\nSTARTCHAR U_3AF8\nENCODING 15096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n9140\n9FE0\n9140\nF7C0\n9100\n95C0\n9500\nF700\n09E0\nENDCHAR\nSTARTCHAR U_3AF9\nENCODING 15097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n3040\n4380\n7A00\n4BE0\n7A40\n4240\n4240\n8440\nENDCHAR\nSTARTCHAR U_3AFA\nENCODING 15098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n6180\n9A60\n2080\n6180\n9A60\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3AFB\nENCODING 15099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF280\n9440\n9820\n97C0\nF000\n9FE0\n9AA0\n9FE0\nFAA0\n0AA0\nENDCHAR\nSTARTCHAR U_3AFC\nENCODING 15100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A20\nEFA0\nB220\nA760\nA260\nEFA0\nAAA0\nAAA0\nAAA0\nEBA0\n0260\nENDCHAR\nSTARTCHAR U_3AFD\nENCODING 15101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF380\n9480\n9700\n9100\nFFE0\n9940\n9780\n9580\nF940\n0320\nENDCHAR\nSTARTCHAR U_3AFE\nENCODING 15102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF920\n9540\n9540\n9FE0\nF820\n9BA0\n9AA0\n9BA0\nFAA0\n0860\nENDCHAR\nSTARTCHAR U_3AFF\nENCODING 15103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF280\n9440\n9FE0\n9480\nF7E0\n9480\n97E0\n9480\nF7E0\n0400\nENDCHAR\nSTARTCHAR U_3B00\nENCODING 15104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF080\n9FE0\n9240\nF3C0\n9000\n93C0\n9080\nF7E0\n9080\n0180\nENDCHAR\nSTARTCHAR U_3B01\nENCODING 15105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4040\n7FC0\n8500\n4F80\nB040\n2FA0\nC880\n4F80\nENDCHAR\nSTARTCHAR U_3B02\nENCODING 15106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE920\nAFE0\nAFE0\nE100\nBFE0\nB120\nF160\n11E0\n1E20\n1060\nENDCHAR\nSTARTCHAR U_3B03\nENCODING 15107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n3FE0\n1040\n3FE0\n0000\n3FE0\n3FE0\n1240\n0D80\n18C0\n2020\nENDCHAR\nSTARTCHAR U_3B04\nENCODING 15108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n0000\n7FE0\n4200\n5F80\n4200\n7FE0\nA940\n9320\nENDCHAR\nSTARTCHAR U_3B05\nENCODING 15109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n7FC0\n4940\n7FC0\n0400\nFFE0\n0800\n0F80\n1080\n6380\nENDCHAR\nSTARTCHAR U_3B06\nENCODING 15110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE840\nAFC0\nA900\nEFC0\nA880\nAC40\nEFC0\nA840\n0FC0\n0840\nENDCHAR\nSTARTCHAR U_3B07\nENCODING 15111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF380\n9480\n97C0\nF540\n9540\n9FE0\n9100\nF280\n0440\n0820\nENDCHAR\nSTARTCHAR U_3B08\nENCODING 15112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F80\nE880\nAF80\nA880\nEF80\nA000\nBFC0\nB540\nF540\n1540\n3FE0\nENDCHAR\nSTARTCHAR U_3B09\nENCODING 15113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA100\nAFE0\nAAA0\nEAA0\nAAA0\nA100\nAFE0\nE100\n0280\n0C60\nENDCHAR\nSTARTCHAR U_3B0A\nENCODING 15114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2880\n2480\n7FC0\n1500\n7FC0\n0800\nFFE0\n1480\n2300\n5CE0\nENDCHAR\nSTARTCHAR U_3B0B\nENCODING 15115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE5C0\nA840\nAFE0\nB900\nEBE0\nAC80\nABE0\nE940\n0A40\n0C20\nENDCHAR\nSTARTCHAR U_3B0C\nENCODING 15116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n0400\nFFE0\n2080\n3F80\n2080\n3F80\n1500\n6CC0\nENDCHAR\nSTARTCHAR U_3B0D\nENCODING 15117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n0FE0\nE100\nAFE0\nA920\nEFE0\nA920\nA040\nEFE0\n0440\n02C0\nENDCHAR\nSTARTCHAR U_3B0E\nENCODING 15118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n2100\n5280\nAD40\n7BC0\n6B40\n9120\nENDCHAR\nSTARTCHAR U_3B0F\nENCODING 15119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\nEFE0\nA000\nA7C0\nE440\nA7C0\nA000\nAFE0\nEAA0\nAFE0\n0920\nENDCHAR\nSTARTCHAR U_3B10\nENCODING 15120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE280\nAAA0\nA6C0\nAFE0\nE000\nA7C0\nA440\nE7C0\nA440\n07C0\nENDCHAR\nSTARTCHAR U_3B11\nENCODING 15121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1FE0\nEAA0\nAEA0\nA0C0\nEEA0\nA2A0\nA4A0\nBEE0\nE480\n0C80\nENDCHAR\nSTARTCHAR U_3B12\nENCODING 15122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nEFE0\nA400\nA140\nEFA0\nA280\nA440\nAAA0\nE280\nAFE0\n0480\nENDCHAR\nSTARTCHAR U_3B13\nENCODING 15123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE280\nAFE0\nAAA0\nEFE0\nA000\nA380\nA000\nEFE0\nA540\n0920\nENDCHAR\nSTARTCHAR U_3B14\nENCODING 15124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEAA0\nA660\nAAA0\nE100\nA680\nA960\nA280\nE140\nA080\n0300\nENDCHAR\nSTARTCHAR U_3B15\nENCODING 15125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n08A0\nE5E0\nBE40\nA440\nE4E0\nAE40\nAC40\nB5E0\nE440\nA440\n0440\nENDCHAR\nSTARTCHAR U_3B16\nENCODING 15126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nEEE0\nAAA0\nAEA0\nE940\nA840\nB1A0\nA220\nEFC0\nA840\n0FC0\nENDCHAR\nSTARTCHAR U_3B17\nENCODING 15127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n08C0\n0EA0\nEA80\nBBE0\nB680\nEC80\nA940\nB140\nE220\n1540\n22A0\nENDCHAR\nSTARTCHAR U_3B18\nENCODING 15128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE7C0\nA140\nAFE0\nE140\nAFC0\nA520\nAFE0\nE920\nAD60\n15A0\nENDCHAR\nSTARTCHAR U_3B19\nENCODING 15129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0060\nEFC0\nAAC0\nA780\nE480\nA7C0\nA440\nA7E0\nE960\nAAA0\n1460\nENDCHAR\nSTARTCHAR U_3B1A\nENCODING 15130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nFFE0\nA940\nBF40\nA140\nEF40\nAA80\nAE80\nAA80\nEF40\n1220\nENDCHAR\nSTARTCHAR U_3B1B\nENCODING 15131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE6C0\nABA0\nA000\nE7C0\nA440\nA380\nAEE0\nE220\nAAA0\n0660\nENDCHAR\nSTARTCHAR U_3B1C\nENCODING 15132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5140\nFBE0\n2080\n7BC0\n2080\nFFE0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3B1D\nENCODING 15133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nE280\nAFE0\nA920\nEBA0\nA920\nAFE0\nA440\nE7C0\nA440\n07C0\nENDCHAR\nSTARTCHAR U_3B1E\nENCODING 15134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nEFE0\nA440\nA7C0\nE440\nA7E0\nAD20\nB6A0\nE420\nA7A0\n0040\nENDCHAR\nSTARTCHAR U_3B1F\nENCODING 15135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n7FE0\nA920\n2BA0\n4920\n9FE0\n2A40\nCBC0\n0A40\n33C0\nENDCHAR\nSTARTCHAR U_3B20\nENCODING 15136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nEEE0\nB5A0\nAEA0\nE240\nBF40\nA2A0\nAF20\nE000\nAAA0\n12A0\nENDCHAR\nSTARTCHAR U_3B21\nENCODING 15137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE100\nAFE0\nB120\nE7C0\nA100\nA6C0\nB920\nE7C0\n0080\n0300\nENDCHAR\nSTARTCHAR U_3B22\nENCODING 15138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nEFE0\nA100\nA7C0\nE100\nBFE0\nA540\nAFE0\nE4A0\nAE40\n04A0\nENDCHAR\nSTARTCHAR U_3B23\nENCODING 15139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A40\nFB40\nAA40\nBFE0\nEA40\nBF40\nA4C0\nAE40\nE440\nA740\n18C0\nENDCHAR\nSTARTCHAR U_3B24\nENCODING 15140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE940\nAA40\nAFC0\nE480\nAFC0\nA920\nBFE0\nE000\n1540\n2520\nENDCHAR\nSTARTCHAR U_3B25\nENCODING 15141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n4440\n7FC0\n4440\nFFE0\n5540\nBFA0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_3B26\nENCODING 15142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nEEE0\nA280\nA7E0\nEC80\nA7C0\nA480\nAFE0\nE480\n0300\n1CE0\nENDCHAR\nSTARTCHAR U_3B27\nENCODING 15143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n4440\n7FC0\n4440\nFFE0\n4A40\nBF20\n2480\nCC60\nENDCHAR\nSTARTCHAR U_3B28\nENCODING 15144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nEEE0\nA440\nA440\nFFE0\nAAA0\nAAA0\nBBA0\nEAA0\n0AA0\n1760\nENDCHAR\nSTARTCHAR U_3B29\nENCODING 15145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE440\nAFE0\nA440\nEFC0\nA040\nAFE0\nA040\nEFC0\n1520\n13C0\nENDCHAR\nSTARTCHAR U_3B2A\nENCODING 15146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n7FC0\n5540\n7FC0\n0400\nFFE0\n9120\n3E00\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3B2B\nENCODING 15147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n2A80\nEEE0\n2A80\nEEE0\n5140\nBFA0\n2480\n2880\n3F80\nENDCHAR\nSTARTCHAR U_3B2C\nENCODING 15148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEAA0\nAEE0\nAAA0\nEEE0\nA480\nAFE0\nB480\nE7E0\n0480\n07E0\nENDCHAR\nSTARTCHAR U_3B2D\nENCODING 15149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE540\nAFE0\nAAA0\nEFE0\nAA20\nAFE0\nAA20\nEEA0\n0A20\n0D60\nENDCHAR\nSTARTCHAR U_3B2E\nENCODING 15150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n7FC0\n5280\nFBE0\n5640\nFBE0\nAA40\nFBE0\n2240\nDBE0\nENDCHAR\nSTARTCHAR U_3B2F\nENCODING 15151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA400\nA7E0\nE440\nAFE0\nAAA0\nAFA0\nEAE0\n0FA0\n1520\nENDCHAR\nSTARTCHAR U_3B30\nENCODING 15152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0600\n0400\n7FC0\n4440\n7FC0\n4440\n7FC0\n0A00\n1100\n20E0\nC040\nENDCHAR\nSTARTCHAR U_3B31\nENCODING 15153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA280\nFBE0\n2480\nFBE0\n5140\n9A60\n7FC0\n4040\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_3B32\nENCODING 15154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA20\n2140\nFBE0\nA940\nFA20\nAC00\nFBE0\n22A0\nA7E0\n6000\n9FE0\nENDCHAR\nSTARTCHAR U_3B33\nENCODING 15155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7400\n57C0\n5500\n7900\n5100\n5FE0\n7100\n5100\n5100\n5100\nB100\nENDCHAR\nSTARTCHAR U_3B34\nENCODING 15156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5280\n5280\n77E0\n5280\n5280\n7FE0\n5280\n5240\n5460\nB820\nENDCHAR\nSTARTCHAR U_3B35\nENCODING 15157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7300\n5100\n5FE0\n7280\n5440\n5CA0\n7280\n5100\n5280\n5440\nB820\nENDCHAR\nSTARTCHAR U_3B36\nENCODING 15158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5280\n53E0\n7480\n5880\n57E0\n7000\n53E0\n5220\n5220\nB3E0\nENDCHAR\nSTARTCHAR U_3B37\nENCODING 15159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5520\n5520\n77E0\n5520\n55A0\n7760\n5520\n5520\n57E0\nB420\nENDCHAR\nSTARTCHAR U_3B38\nENCODING 15160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7240\n57E0\n5240\n7000\n52C0\n5380\n76E0\n5A80\n5280\n52A0\nB260\nENDCHAR\nSTARTCHAR U_3B39\nENCODING 15161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n71C0\n5740\n5280\n77C0\n5140\n57E0\n7140\n57C0\n5100\n5500\nB300\nENDCHAR\nSTARTCHAR U_3B3A\nENCODING 15162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7540\n5380\n57C0\n7100\n5FE0\n5280\n7540\n5FE0\n5540\n5540\nB100\nENDCHAR\nSTARTCHAR U_3B3B\nENCODING 15163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7240\n57E0\n5240\n7100\n57E0\n5200\n73E0\n5080\n52C0\n52C0\nB4A0\nENDCHAR\nSTARTCHAR U_3B3C\nENCODING 15164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nFBE0\n4200\nF7E0\n5AA0\n73E0\n5200\n77E0\n5A40\n5180\nB660\nENDCHAR\nSTARTCHAR U_3B3D\nENCODING 15165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n73C0\n5240\n57E0\n7520\n57E0\n5000\n7FE0\n5200\n57C0\n5040\nB180\nENDCHAR\nSTARTCHAR U_3B3E\nENCODING 15166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9C0\n9140\nFA60\n91C0\nA940\nFFE0\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_3B3F\nENCODING 15167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE480\nBF80\nAAE0\nEFA0\nA0A0\nAEA0\nE240\nA440\nBF40\nA4A0\nAD20\nENDCHAR\nSTARTCHAR U_3B40\nENCODING 15168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7480\n57E0\n5D40\n7220\n57C0\n5100\n7540\n5540\n5BA0\n5100\nBFE0\nENDCHAR\nSTARTCHAR U_3B41\nENCODING 15169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nFA40\n2280\n62E0\n7220\nA220\n2220\n2420\n2940\n2080\nENDCHAR\nSTARTCHAR U_3B42\nENCODING 15170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2180\nF900\n2100\n7580\n6560\nA920\n2100\n2100\n2500\n2200\nENDCHAR\nSTARTCHAR U_3B43\nENCODING 15171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n2100\nFA00\n2460\n6240\n7180\nA100\nA200\n2440\n2FE0\n2420\nENDCHAR\nSTARTCHAR U_3B44\nENCODING 15172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2F80\nF280\n2280\n6280\n7780\nA280\n2280\n2280\n22A0\n2240\nENDCHAR\nSTARTCHAR U_3B45\nENCODING 15173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2000\nF7C0\n2000\n6000\n7000\nA7C0\n2000\n2000\n2000\n2FE0\nENDCHAR\nSTARTCHAR U_3B46\nENCODING 15174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0900\n13C0\n2020\n4440\nFFE0\n0400\n7FC0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_3B47\nENCODING 15175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF900\n2240\n64E0\n7720\nA280\n2280\n22A0\n24A0\n2840\nENDCHAR\nSTARTCHAR U_3B48\nENCODING 15176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF7C0\n2140\n6140\n77E0\nA100\n2180\n2240\n2420\n2820\nENDCHAR\nSTARTCHAR U_3B49\nENCODING 15177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n7FC0\n1100\n0400\nFFE0\n0E00\n1500\n2480\n4460\n0400\nENDCHAR\nSTARTCHAR U_3B4A\nENCODING 15178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2220\nFA20\n23E0\n6200\n7200\nA3E0\n2220\n2220\n2420\n2820\nENDCHAR\nSTARTCHAR U_3B4B\nENCODING 15179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n20E0\nFB80\n2080\n63E0\n7080\nA080\n27E0\n2080\n2080\n2080\nENDCHAR\nSTARTCHAR U_3B4C\nENCODING 15180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2480\nF480\n27E0\n6480\n7880\nA7E0\n2080\n2080\n2080\n2080\nENDCHAR\nSTARTCHAR U_3B4D\nENCODING 15181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3100\n01E0\n1700\n6100\n44E0\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_3B4E\nENCODING 15182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFE60\n25A0\n64A0\n75A0\nA660\n2420\n2420\n24A0\n2440\nENDCHAR\nSTARTCHAR U_3B4F\nENCODING 15183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\nF900\n23C0\n6100\n77E0\nA120\n2120\n2120\n2140\n2100\nENDCHAR\nSTARTCHAR U_3B50\nENCODING 15184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0A00\n1500\n3FC0\nC420\n1F00\n0E00\n1500\n2480\n4460\nENDCHAR\nSTARTCHAR U_3B51\nENCODING 15185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFBC0\n2100\n6100\n77E0\nA100\n2380\n2540\n2920\n2100\nENDCHAR\nSTARTCHAR U_3B52\nENCODING 15186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFC40\n2440\n67C0\n7400\nAFE0\nA420\n2420\n2420\n27E0\nENDCHAR\nSTARTCHAR U_3B53\nENCODING 15187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2100\nFA40\n27E0\n6020\n7240\nA7E0\n2240\n2240\n2440\n2840\nENDCHAR\nSTARTCHAR U_3B54\nENCODING 15188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2380\nFCA0\n22C0\n7180\n6FE0\nA080\nA080\n2080\n2280\n2180\nENDCHAR\nSTARTCHAR U_3B55\nENCODING 15189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF7E0\n2100\n6100\n7FE0\nA100\n2200\n2240\n25E0\n2620\nENDCHAR\nSTARTCHAR U_3B56\nENCODING 15190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n22C0\nF4A0\n2C80\n67E0\n7480\nA480\n2480\n24A0\n2440\n2440\nENDCHAR\nSTARTCHAR U_3B57\nENCODING 15191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0E00\n1500\n2480\nC460\n3F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_3B58\nENCODING 15192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF280\n2440\n6820\n77C0\nA000\n27C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_3B59\nENCODING 15193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF7C0\n2100\n6FE0\n7080\nAFE0\n2080\n2680\n2080\n2180\nENDCHAR\nSTARTCHAR U_3B5A\nENCODING 15194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nF7E0\n2840\n6780\n7520\nA540\n2580\n2480\n2480\n2660\nENDCHAR\nSTARTCHAR U_3B5B\nENCODING 15195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2F00\nF8E0\n2B00\n6A80\n7AA0\nAAC0\n2A80\n2A40\n2A40\n3320\nENDCHAR\nSTARTCHAR U_3B5C\nENCODING 15196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\nFFE0\n2100\n7500\n7520\nAEA0\n24C0\n2480\n29A0\n2260\nENDCHAR\nSTARTCHAR U_3B5D\nENCODING 15197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n3180\n6B40\nAD20\n0800\n7F00\n0900\n1100\n2120\nC1E0\nENDCHAR\nSTARTCHAR U_3B5E\nENCODING 15198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\nF560\n2980\n6200\n7500\nAFE0\nA120\n2220\n2420\n2860\nENDCHAR\nSTARTCHAR U_3B5F\nENCODING 15199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1100\nFFE0\n1100\n64C0\nFFE0\n0400\n1580\nE460\n0400\nENDCHAR\nSTARTCHAR U_3B60\nENCODING 15200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\nF7C0\n2900\n6100\n77E0\nA280\n2280\n2280\n24A0\n28E0\nENDCHAR\nSTARTCHAR U_3B61\nENCODING 15201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2200\nF7E0\n2420\n6660\n75A0\nA5A0\n2660\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_3B62\nENCODING 15202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4020\n5F20\nEA20\n4AA0\n6AA0\nDFA0\nCAA0\n4A20\n5A20\n5260\n5220\nENDCHAR\nSTARTCHAR U_3B63\nENCODING 15203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n22E0\nF820\n2BA0\n6AA0\n7AA0\nAAA0\n2BA0\n2820\n2820\n2860\nENDCHAR\nSTARTCHAR U_3B64\nENCODING 15204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2200\nF7C0\n2540\n6540\n7480\nA7E0\n2020\n2FA0\n2020\n2060\nENDCHAR\nSTARTCHAR U_3B65\nENCODING 15205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nF440\n2880\n67E0\n7420\nA520\n2520\n2180\n2240\n2420\nENDCHAR\nSTARTCHAR U_3B66\nENCODING 15206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nF7E0\n2420\n60C0\n7300\nA100\n2FE0\n2100\n2120\n21E0\nENDCHAR\nSTARTCHAR U_3B67\nENCODING 15207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2480\nFFE0\n2480\n4180\n0400\nFFE0\n1500\n64C0\n0400\nENDCHAR\nSTARTCHAR U_3B68\nENCODING 15208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFAA0\n2AC0\n6FA0\n72A0\nA6A0\n26E0\n2A80\n3280\n2680\nENDCHAR\nSTARTCHAR U_3B69\nENCODING 15209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2720\nF540\n2280\n6040\n77E0\nA040\n2240\n2140\n2040\n20C0\nENDCHAR\nSTARTCHAR U_3B6A\nENCODING 15210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2100\n2FE0\nF100\n2FE0\n7920\n6FE0\nA920\nAFE0\n2920\n2960\nENDCHAR\nSTARTCHAR U_3B6B\nENCODING 15211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF540\n2540\n6BA0\n7100\nA100\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_3B6C\nENCODING 15212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nFA20\n2540\n6980\n7280\nACC0\n29A0\n22A0\n2C80\n2300\nENDCHAR\nSTARTCHAR U_3B6D\nENCODING 15213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E20\n2A20\nFAA0\n2EA0\n78A0\n7EA0\nAAA0\n2AA0\n2AA0\n2A20\n3660\nENDCHAR\nSTARTCHAR U_3B6E\nENCODING 15214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n2540\nFAA0\n2000\n67E0\n7200\nA3E0\n2620\n2140\n2080\n2700\nENDCHAR\nSTARTCHAR U_3B6F\nENCODING 15215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n4A80\nFA80\n4E80\n4A80\nEE80\nCA80\n4AA0\n4EA0\n5AA0\n42E0\nENDCHAR\nSTARTCHAR U_3B70\nENCODING 15216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5DE0\n5100\nFDE0\n0400\nFFE0\n0400\n7FC0\n4E40\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_3B71\nENCODING 15217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nF7E0\n26A0\n67E0\n76A0\nA7E0\n2480\n2480\n2480\n27E0\nENDCHAR\nSTARTCHAR U_3B72\nENCODING 15218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2280\nF440\n2920\n6180\n7240\nA420\n2BC0\n2240\n2240\n23C0\nENDCHAR\nSTARTCHAR U_3B73\nENCODING 15219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23A0\nF940\n27E0\n6100\n7200\nA7E0\n2880\n27E0\n2080\n2180\nENDCHAR\nSTARTCHAR U_3B74\nENCODING 15220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2160\n25A0\nF540\n25A0\n6100\n7080\nA080\n23E0\n2080\n2080\n27E0\nENDCHAR\nSTARTCHAR U_3B75\nENCODING 15221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2100\nFA00\n27E0\n6820\n7FA0\nAAA0\n2FA0\n2AA0\n2FA0\n2060\nENDCHAR\nSTARTCHAR U_3B76\nENCODING 15222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nFA40\n2100\n6FE0\n7100\nA3E0\n2220\n2440\n2840\n3180\nENDCHAR\nSTARTCHAR U_3B77\nENCODING 15223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nFFC0\n2540\n67C0\n7100\nA7E0\n2120\n2220\n2440\n28C0\nENDCHAR\nSTARTCHAR U_3B78\nENCODING 15224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nFA40\n2480\n6FE0\n7920\nA920\n2FE0\n2280\n2480\n28E0\nENDCHAR\nSTARTCHAR U_3B79\nENCODING 15225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2680\nFBE0\n2240\n7E80\n6900\nAFC0\n2240\n2280\n2520\n39E0\nENDCHAR\nSTARTCHAR U_3B7A\nENCODING 15226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFA80\n2540\n6FE0\n7540\nA7C0\n2540\n27C0\n2120\n21E0\nENDCHAR\nSTARTCHAR U_3B7B\nENCODING 15227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\nFB80\n2100\n6FE0\n7820\nABA0\n2AA0\n2BA0\n2820\n2860\nENDCHAR\nSTARTCHAR U_3B7C\nENCODING 15228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2120\nFD40\n2380\n6540\n7920\nAFE0\n2820\n2FE0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_3B7D\nENCODING 15229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2840\n6B80\n7A40\nABE0\n2A40\n2BE0\n2820\n33E0\nENDCHAR\nSTARTCHAR U_3B7E\nENCODING 15230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nFFE0\n2800\n6AA0\n7AA0\nABE0\n2880\n2AA0\n2AA0\n33E0\nENDCHAR\nSTARTCHAR U_3B7F\nENCODING 15231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFBC0\n2240\n63C0\n7100\nA6E0\n24A0\n24A0\n26E0\n2080\nENDCHAR\nSTARTCHAR U_3B80\nENCODING 15232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n2080\nF900\n2540\n6BA0\nB920\nABA0\nAD60\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_3B81\nENCODING 15233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2660\n2380\nFD40\n27E0\n6200\n77E0\nAA20\n33A0\n2220\n23A0\n2660\nENDCHAR\nSTARTCHAR U_3B82\nENCODING 15234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\nFFE0\n1100\n2480\n7FC0\n8420\n1480\n6460\nENDCHAR\nSTARTCHAR U_3B83\nENCODING 15235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2700\nF100\n2FE0\n6540\n7920\nA200\n3FE0\n2440\n2380\n2C40\nENDCHAR\nSTARTCHAR U_3B84\nENCODING 15236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2000\nFFE0\n2200\n6FE0\n7220\nAFA0\n2220\n23A0\n24A0\n2960\nENDCHAR\nSTARTCHAR U_3B85\nENCODING 15237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1480\nE660\n3FE0\n2200\n7FE0\nA200\n3FE0\n2200\n3FE0\nENDCHAR\nSTARTCHAR U_3B86\nENCODING 15238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFA80\n2C60\n6280\n77C0\nA100\n27C0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_3B87\nENCODING 15239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n2100\n6280\n7460\nA900\n23A0\n25A0\n2100\n2300\nENDCHAR\nSTARTCHAR U_3B88\nENCODING 15240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF7E0\n2100\n6280\n77C0\nA820\n27C0\n2100\n2540\n2920\nENDCHAR\nSTARTCHAR U_3B89\nENCODING 15241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2480\nF7E0\n2C80\n66A0\n75C0\nA7E0\n2480\n2480\n2540\n2620\nENDCHAR\nSTARTCHAR U_3B8A\nENCODING 15242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2280\nF5E0\n2E80\n6580\n75C0\nA6A0\n2480\n2480\n2480\n2C80\nENDCHAR\nSTARTCHAR U_3B8B\nENCODING 15243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2F60\nF4A0\n2EA0\n6AE0\n7EA0\nAAA0\nAEA0\n2AC0\n2A80\n2A80\nENDCHAR\nSTARTCHAR U_3B8C\nENCODING 15244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFA00\n2400\n6FE0\n7AA0\nABA0\n2AA0\n2BA0\n2AA0\n2FE0\nENDCHAR\nSTARTCHAR U_3B8D\nENCODING 15245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n4840\n7940\n4940\n7840\n4440\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_3B8E\nENCODING 15246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nF180\n2340\n7520\n6900\nA100\nAFE0\n2AA0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_3B8F\nENCODING 15247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF380\n2540\n6920\n77E0\nA000\n2FE0\n2100\n2540\n2920\nENDCHAR\nSTARTCHAR U_3B90\nENCODING 15248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2340\nF560\n2180\n63E0\n7620\nABE0\n2220\n23E0\n2220\n23E0\nENDCHAR\nSTARTCHAR U_3B91\nENCODING 15249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nF100\n2FE0\n2100\n7500\n6960\nA920\n2D60\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_3B92\nENCODING 15250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFE0\n2AA0\n6AA0\n7FE0\nA100\n2FE0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_3B93\nENCODING 15251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n25E0\nF480\n2CE0\n66A0\n74E0\nA520\n25C0\n2540\n2480\n25E0\nENDCHAR\nSTARTCHAR U_3B94\nENCODING 15252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2380\nF8E0\n2380\n63E0\n72A0\nA3E0\n2080\n23E0\n2080\n27E0\nENDCHAR\nSTARTCHAR U_3B95\nENCODING 15253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFFE0\n2AA0\n6AA0\n7AE0\nA100\n2FE0\n2280\n2460\n2820\nENDCHAR\nSTARTCHAR U_3B96\nENCODING 15254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n27E0\nF9C0\n2080\n63E0\n72A0\nA3E0\n2080\n27E0\n2080\n2080\nENDCHAR\nSTARTCHAR U_3B97\nENCODING 15255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n2940\n12A0\nFDC0\n5440\nB080\n1500\nFFE0\n1500\n64C0\n0400\nENDCHAR\nSTARTCHAR U_3B98\nENCODING 15256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n22E0\nF500\n2EA0\n76A0\n6CA0\nACA0\nB440\n24A0\n24A0\n2920\nENDCHAR\nSTARTCHAR U_3B99\nENCODING 15257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\nF7E0\n2000\n73C0\n6000\nAFE0\nA100\n23E0\n2020\n20C0\nENDCHAR\nSTARTCHAR U_3B9A\nENCODING 15258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0780\n0400\n3F80\n2480\n2A80\n3F80\n0400\nFFE0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_3B9B\nENCODING 15259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF540\n27C0\n7000\n6FE0\nA100\nA5E0\n2500\n2700\n29E0\nENDCHAR\nSTARTCHAR U_3B9C\nENCODING 15260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\nF940\n2D40\n6FE0\n7940\nAF40\nADE0\n2900\n2800\n2FE0\nENDCHAR\nSTARTCHAR U_3B9D\nENCODING 15261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n48E0\n4AA0\nE9A0\n54C0\n64C0\nCAA0\nD1A0\n6EE0\n4AA0\n4A80\n4E80\nENDCHAR\nSTARTCHAR U_3B9E\nENCODING 15262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2DE0\nF220\n2080\n6D80\n7240\nA420\n27C0\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_3B9F\nENCODING 15263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n5E80\nE9E0\n4880\nE9C0\nCEC0\n5AA0\n4AA0\n4A80\n4E80\n4880\nENDCHAR\nSTARTCHAR U_3BA0\nENCODING 15264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2FE0\n6920\n7100\nAFE0\n2100\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_3BA1\nENCODING 15265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nAA00\n73C0\n23C0\n5200\n8BE0\n0400\nFFE0\n1500\n64C0\n0400\nENDCHAR\nSTARTCHAR U_3BA2\nENCODING 15266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22C0\n2440\nF7E0\n2D00\n65E0\n7680\nA480\n27E0\n2480\n2540\n2620\nENDCHAR\nSTARTCHAR U_3BA3\nENCODING 15267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9E0\n8A40\nFA80\n8BE0\nF980\n92A0\nECE0\n0400\nFFE0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_3BA4\nENCODING 15268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\nA4A0\n4A40\n3F80\n60C0\nBFA0\n0400\nFFE0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_3BA5\nENCODING 15269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2240\nF7E0\n2200\n6FE0\n7440\nAFE0\n3540\n27C0\n2540\n27C0\nENDCHAR\nSTARTCHAR U_3BA6\nENCODING 15270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF100\n2FE0\n6920\n7280\nA140\n27A0\n2100\n2540\n2920\nENDCHAR\nSTARTCHAR U_3BA7\nENCODING 15271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\nFA40\n23C0\n6240\n73E0\nA200\n23E0\n2020\n2560\n22A0\nENDCHAR\nSTARTCHAR U_3BA8\nENCODING 15272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nFFC0\n2540\n67C0\n7440\nAA20\n27C0\n2A80\n2100\n2EE0\nENDCHAR\nSTARTCHAR U_3BA9\nENCODING 15273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\nFA40\n23C0\n6240\n73C0\nA240\n23C0\n2940\n2AA0\n33C0\nENDCHAR\nSTARTCHAR U_3BAA\nENCODING 15274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DC0\n4940\nE9C0\n5D40\n6240\nC460\nC200\n5FE0\n4700\n4A80\n5240\nENDCHAR\nSTARTCHAR U_3BAB\nENCODING 15275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF920\n27C0\n67C0\n7100\nA7C0\n2100\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_3BAC\nENCODING 15276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2540\nFAA0\n27C0\n6000\n76E0\nAAA0\n2660\n2660\n3BA0\n2660\nENDCHAR\nSTARTCHAR U_3BAD\nENCODING 15277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2280\nF100\n2FE0\n6AA0\n7920\nAFE0\n2920\n2FE0\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_3BAE\nENCODING 15278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n22A0\nF7A0\n22A0\n6760\n7100\nA7C0\n2100\n2FE0\n2100\n2300\nENDCHAR\nSTARTCHAR U_3BAF\nENCODING 15279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nFFE0\n2A20\n6F60\n7AA0\nADA0\n2AE0\n2920\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_3BB0\nENCODING 15280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2200\nFFC0\n2540\n6540\n77C0\nA000\n2480\n26C0\n24A0\n2640\nENDCHAR\nSTARTCHAR U_3BB1\nENCODING 15281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nFA40\n2500\n67C0\n7900\nAFE0\n2280\n2280\n24A0\n2860\nENDCHAR\nSTARTCHAR U_3BB2\nENCODING 15282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27E0\nFD20\n27A0\n6260\n7400\nA7E0\n2D20\n27A0\n2120\n2260\nENDCHAR\nSTARTCHAR U_3BB3\nENCODING 15283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2EA0\nFAE0\n2A40\n6E40\n7A40\nAAE0\n2E40\n2A40\n2AA0\n22A0\nENDCHAR\nSTARTCHAR U_3BB4\nENCODING 15284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2340\n2520\nFF60\n2520\n67E0\n7100\nA7E0\n2220\n2140\n2080\n2760\nENDCHAR\nSTARTCHAR U_3BB5\nENCODING 15285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n25E0\nFE00\n24E0\n64A0\n76E0\nAAA0\n2AE0\n2AA0\n2AA0\n36A0\nENDCHAR\nSTARTCHAR U_3BB6\nENCODING 15286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n22E0\nFFA0\n22A0\n6AE0\n7AA0\nAFE0\n22A0\n22A0\n2520\n2960\nENDCHAR\nSTARTCHAR U_3BB7\nENCODING 15287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n27E0\nF900\n22A0\n64E0\n7200\nA7E0\n2420\n27E0\n2420\n27E0\nENDCHAR\nSTARTCHAR U_3BB8\nENCODING 15288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2940\nF7E0\n2080\n6C80\n77E0\nA480\n2540\n2520\n2A00\n31E0\nENDCHAR\nSTARTCHAR U_3BB9\nENCODING 15289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F40\n2240\nF560\n2FA0\n6220\n72A0\nA720\n2240\n2340\n2CA0\n2920\nENDCHAR\nSTARTCHAR U_3BBA\nENCODING 15290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n0E00\n1500\n3F80\nC460\n0000\nEEE0\nAAA0\nEEE0\nENDCHAR\nSTARTCHAR U_3BBB\nENCODING 15291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nFA80\n2100\n6280\n7540\nA7E0\n2540\n27C0\n2140\n2FE0\nENDCHAR\nSTARTCHAR U_3BBC\nENCODING 15292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nFC40\n27C0\n6400\n7760\nA5A0\n2760\n29A0\n2B60\n2920\nENDCHAR\nSTARTCHAR U_3BBD\nENCODING 15293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nFD40\n2740\n6540\n7FA0\nA500\n27E0\n2520\n2B40\n29A0\nENDCHAR\nSTARTCHAR U_3BBE\nENCODING 15294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n7A40\n4BC0\n7A40\n43C0\n5240\n6CC0\n0400\n7FC0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_3BBF\nENCODING 15295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nFFC0\n2540\n67C0\n7100\nA540\n2FE0\n2100\n27C0\n2100\nENDCHAR\nSTARTCHAR U_3BC0\nENCODING 15296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n2500\nF1E0\n2E00\n69E0\n7EA0\nAA80\n2AE0\n2A80\n2B80\n3460\nENDCHAR\nSTARTCHAR U_3BC1\nENCODING 15297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5D00\n5480\nF7E0\n5400\n5940\nF7E0\n5400\n55C0\n5D40\n5140\n51C0\nENDCHAR\nSTARTCHAR U_3BC2\nENCODING 15298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n26C0\n2FE0\nF6C0\n2BA0\n7000\n6FE0\nA920\n27C0\n2540\n2540\n2100\nENDCHAR\nSTARTCHAR U_3BC3\nENCODING 15299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFB80\n2540\n6920\n7280\nAD60\n2540\n2380\n2540\n2B20\nENDCHAR\nSTARTCHAR U_3BC4\nENCODING 15300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n71C0\nAAA0\n01C0\n7E00\n7FC0\n5280\n5F80\n5020\n9FE0\nENDCHAR\nSTARTCHAR U_3BC5\nENCODING 15301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2FE0\nF900\n2BE0\n6AA0\n7BE0\nAAA0\n2BE0\n2A80\n2FE0\n3080\nENDCHAR\nSTARTCHAR U_3BC6\nENCODING 15302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nFA40\n2180\n67E0\n7540\nA5E0\n2540\n27E0\n2440\n2BE0\nENDCHAR\nSTARTCHAR U_3BC7\nENCODING 15303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2EE0\nF280\n2EE0\n6280\n76E0\nAA80\n2100\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_3BC8\nENCODING 15304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\n4880\nE3E0\n5880\nCBE0\nEAA0\n5BE0\n4980\n4AC0\n5480\n4FE0\nENDCHAR\nSTARTCHAR U_3BC9\nENCODING 15305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2100\nFFE0\n2940\n6BE0\n7840\nAB80\n2AA0\n2FE0\n2880\n3180\nENDCHAR\nSTARTCHAR U_3BCA\nENCODING 15306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nF5C0\n2500\n2FE0\n7200\nA3C0\n2400\n27E0\n2AA0\n2840\nENDCHAR\nSTARTCHAR U_3BCB\nENCODING 15307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\nF100\n87C0\n7C40\n07C0\nF440\n27C0\nFC40\n27C0\n7440\nA820\nENDCHAR\nSTARTCHAR U_3BCC\nENCODING 15308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2880\nF4C0\n2160\n2EC0\n6540\n76E0\nA540\n24C0\n3E00\n21E0\nENDCHAR\nSTARTCHAR U_3BCD\nENCODING 15309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2AE0\nFB20\n2EA0\n2340\n62A0\n7FE0\nAA20\n2AA0\n32A0\n2240\nENDCHAR\nSTARTCHAR U_3BCE\nENCODING 15310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2480\nFFE0\n2080\n6E80\n71C0\nAFA0\n2080\n2E80\n2A80\n2E80\nENDCHAR\nSTARTCHAR U_3BCF\nENCODING 15311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFD40\n1260\nFDC0\n5540\n7C80\n8360\n0400\nFFE0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_3BD0\nENCODING 15312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA280\nC7E0\nAB40\nE2C0\n82C0\n0400\nFFE0\n1500\n64C0\n0400\nENDCHAR\nSTARTCHAR U_3BD1\nENCODING 15313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DE0\n4500\nE5E0\n5D00\n51E0\n7100\nDFE0\n4540\n4540\n4520\n59A0\nENDCHAR\nSTARTCHAR U_3BD2\nENCODING 15314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2F20\nF540\n27C0\n6440\n77C0\nA440\n27C0\n27C0\n22A0\n2CE0\nENDCHAR\nSTARTCHAR U_3BD3\nENCODING 15315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF560\n2BC0\n6240\n73C0\nA000\n2EE0\n2660\n2AA0\n2660\nENDCHAR\nSTARTCHAR U_3BD4\nENCODING 15316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n0400\n7FC0\n2480\n7FC0\n2480\nFBC0\n24A0\nFFE0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_3BD5\nENCODING 15317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A60\n2F80\nFA80\n2EE0\n6AA0\n7EA0\nAAA0\n3FA0\n2AA0\n3120\n2220\nENDCHAR\nSTARTCHAR U_3BD6\nENCODING 15318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF200\n2FE0\n7AA0\n6FE0\nA000\n3FE0\n2440\n2D60\n27C0\nENDCHAR\nSTARTCHAR U_3BD7\nENCODING 15319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2EE0\nFAA0\n2EE0\n6820\n7920\nAFE0\n2920\n2BA0\n2D60\n2920\nENDCHAR\nSTARTCHAR U_3BD8\nENCODING 15320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n5D00\nE9E0\n5D20\nE280\nDC80\n4080\n5D80\n4940\n5D20\n4A00\nENDCHAR\nSTARTCHAR U_3BD9\nENCODING 15321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2F80\nF4E0\n2F20\n60A0\n7EA0\nAAA0\n2E40\n2A40\n2EA0\n2B20\nENDCHAR\nSTARTCHAR U_3BDA\nENCODING 15322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2EE0\nF540\n2300\n6480\n7860\nA780\n2000\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_3BDB\nENCODING 15323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n27C0\n6000\n7FE0\nAAA0\n2440\n26C0\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_3BDC\nENCODING 15324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2100\n6FE0\n7440\nAAA0\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_3BDD\nENCODING 15325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E80\n52E0\nF3A0\n5EA0\n4440\nE4A0\nD700\n54E0\n54A0\n5EA0\n50E0\nENDCHAR\nSTARTCHAR U_3BDE\nENCODING 15326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n24A0\nFAE0\n2E00\n64E0\n7AA0\nAEE0\n20A0\n2AE0\n2AA0\n28A0\nENDCHAR\nSTARTCHAR U_3BDF\nENCODING 15327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n71C0\nAAA0\n3F80\n0500\n0900\nFFE0\n2480\n1500\n6CC0\nENDCHAR\nSTARTCHAR U_3BE0\nENCODING 15328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nF940\n2280\n6FE0\n7AA0\nA140\n26E0\n2900\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_3BE1\nENCODING 15329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\nE400\n4BE0\nF020\n47A0\nA4A0\n47A0\nE460\n4400\nE420\n47E0\nENDCHAR\nSTARTCHAR U_3BE2\nENCODING 15330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n25A0\nF7E0\n2480\n67E0\n7280\nA7C0\n2280\n2FE0\n2440\n2820\nENDCHAR\nSTARTCHAR U_3BE3\nENCODING 15331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nF240\n2280\n77E0\n6A40\nA4C0\n2900\n2FE0\n2540\n2920\nENDCHAR\nSTARTCHAR U_3BE4\nENCODING 15332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFBE0\n2080\nAAA0\nFBE0\nAAA0\n2080\n71C0\nAAA0\n2480\nENDCHAR\nSTARTCHAR U_3BE5\nENCODING 15333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFBE0\nAAA0\nFBE0\nAAA0\nFBE0\n2080\n71C0\nAAA0\nENDCHAR\nSTARTCHAR U_3BE6\nENCODING 15334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nF440\n27C0\n67C0\n7440\nAFE0\n2540\n2BA0\n2540\n2920\nENDCHAR\nSTARTCHAR U_3BE7\nENCODING 15335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n2EA0\nF4A0\n2F20\n6440\n77E0\nAD20\n2D20\n29E0\n2C00\n33E0\nENDCHAR\nSTARTCHAR U_3BE8\nENCODING 15336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFE0\n2AA0\n6AA0\n7FE0\nA540\n2380\n2FE0\n2380\n2D60\nENDCHAR\nSTARTCHAR U_3BE9\nENCODING 15337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\n53E0\n2080\nDBE0\nA8A0\n53E0\nAA80\n23E0\nF8A0\n7140\nAA20\nENDCHAR\nSTARTCHAR U_3BEA\nENCODING 15338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n2D60\n67C0\n7340\nA520\n2BC0\n2040\n2180\n2080\nENDCHAR\nSTARTCHAR U_3BEB\nENCODING 15339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2100\nFFE0\n2A20\n6FC0\n7A00\nAFE0\n2900\n2EA0\n29C0\n36A0\nENDCHAR\nSTARTCHAR U_3BEC\nENCODING 15340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n71C0\nAAA0\n0200\nEFC0\n26A0\n4B40\n9FC0\n4200\nBFE0\nENDCHAR\nSTARTCHAR U_3BED\nENCODING 15341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2100\nFFE0\n2940\n6FE0\n7AA0\nAFE0\n2AA0\n2BE0\n2920\n3640\nENDCHAR\nSTARTCHAR U_3BEE\nENCODING 15342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFFE0\n2400\n6BE0\n7220\nAFA0\n2AA0\n2FA0\n23A0\n2CC0\nENDCHAR\nSTARTCHAR U_3BEF\nENCODING 15343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2C40\nF380\n2D60\n67C0\n7500\nA7C0\n2540\n2540\n27C0\n2820\nENDCHAR\nSTARTCHAR U_3BF0\nENCODING 15344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFFE0\n2100\n6FE0\n7440\nA7C0\n2440\n27C0\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_3BF1\nENCODING 15345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n2480\nFFE0\nA420\n7FE0\n2480\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_3BF2\nENCODING 15346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n27C0\n6AA0\n77C0\nA000\n2FE0\n2100\n2540\n2B20\nENDCHAR\nSTARTCHAR U_3BF3\nENCODING 15347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\n3F80\nEAE0\n2BA0\n6EA0\n72A0\nAE40\n2A40\n2E40\n22A0\n2D20\nENDCHAR\nSTARTCHAR U_3BF4\nENCODING 15348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nF540\n2FE0\n6AA0\n7540\nA280\n2FE0\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_3BF5\nENCODING 15349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2280\nF7C0\n2100\n7FE0\n6540\nA7C0\n2540\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_3BF6\nENCODING 15350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2D60\nFAA0\n2FE0\n6440\n7A20\nA7C0\n2C40\n2280\n2380\n2C60\nENDCHAR\nSTARTCHAR U_3BF7\nENCODING 15351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2760\n2940\nFFE0\n2940\n6BE0\n7880\nA9C0\nA880\n2BE0\n2940\n2A20\nENDCHAR\nSTARTCHAR U_3BF8\nENCODING 15352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2140\nFFE0\n2140\n67C0\n7100\nAFE0\n3540\n2FE0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_3BF9\nENCODING 15353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F20\n4A20\nFFE0\n5520\n5F20\nE0A0\nCE60\n4020\n5F20\n4E20\n5560\nENDCHAR\nSTARTCHAR U_3BFA\nENCODING 15354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\nA3E0\nFD00\n8880\nFBE0\nA2A0\nFBE0\n0400\nFFE0\n2480\nC460\nENDCHAR\nSTARTCHAR U_3BFB\nENCODING 15355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\nFFE0\n94A0\n6B00\n3280\n0C40\nFFE0\n2480\nC460\nENDCHAR\nSTARTCHAR U_3BFC\nENCODING 15356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2EE0\nF440\n2100\n27C0\n7100\n6FE0\nA440\n2FE0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_3BFD\nENCODING 15357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\nF020\n4FC0\n4940\nEFC0\nCA40\n4BC0\n4A40\n4BC0\n5420\nENDCHAR\nSTARTCHAR U_3BFE\nENCODING 15358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n23E0\nF140\n2BE0\n7EA0\n6BE0\nAAA0\n2BE0\n2940\n3D40\n23E0\nENDCHAR\nSTARTCHAR U_3BFF\nENCODING 15359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n2540\nFAA0\n27E0\n6520\n77E0\nAD40\nA7C0\n2540\n27E0\n2520\nENDCHAR\nSTARTCHAR U_3C00\nENCODING 15360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2EE0\nF560\n3EA0\n2560\n6280\nB540\n2960\n2580\n2940\n3320\nENDCHAR\nSTARTCHAR U_3C01\nENCODING 15361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nFBC0\n2640\n63C0\n7000\nAFE0\n2440\n2EE0\n3BA0\n2EE0\nENDCHAR\nSTARTCHAR U_3C02\nENCODING 15362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFBA0\n2540\n6FE0\n7380\nAFE0\n2540\n27C0\n2540\n27C0\nENDCHAR\nSTARTCHAR U_3C03\nENCODING 15363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4460\n4FC0\nFAA0\n4FE0\n4A40\n64A0\nDFE0\n5540\n55E0\n5760\n44C0\nENDCHAR\nSTARTCHAR U_3C04\nENCODING 15364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EA0\n2AE0\nFB80\n2EC0\n6AA0\n7F60\nAAA0\n2BE0\n2EA0\n2460\n2BA0\nENDCHAR\nSTARTCHAR U_3C05\nENCODING 15365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n57E0\nE940\n43E0\n7AA0\nEBE0\nCAA0\n4BE0\n4B60\n5AA0\n67E0\nENDCHAR\nSTARTCHAR U_3C06\nENCODING 15366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\nFFE0\n8A20\n7BC0\n0A00\n7BC0\n0E00\nFFE0\n3580\nENDCHAR\nSTARTCHAR U_3C07\nENCODING 15367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44C0\n4FA0\nF4E0\n5F80\n6A80\n5BA0\nCAC0\n5B80\n4AA0\n4FA0\n5860\nENDCHAR\nSTARTCHAR U_3C08\nENCODING 15368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n71C0\nAAA0\nBFE0\n1240\nDFC0\n5240\n7FE0\nC200\nBFE0\nENDCHAR\nSTARTCHAR U_3C09\nENCODING 15369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n5FE0\nE880\n53E0\n5C80\nEBE0\nDD40\n4AA0\n4FE0\n59C0\n42A0\nENDCHAR\nSTARTCHAR U_3C0A\nENCODING 15370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n5DA0\nEAC0\n5E80\n4D40\nF6A0\nC9A0\n5EC0\n4880\n4D40\n5220\nENDCHAR\nSTARTCHAR U_3C0B\nENCODING 15371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n4480\nF7E0\n5520\n5FE0\nE520\nD5E0\n5720\n65E0\n48C0\n7120\nENDCHAR\nSTARTCHAR U_3C0C\nENCODING 15372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n4200\nFFE0\n5AA0\n4700\nEAC0\nC500\n4FC0\n5500\n47C0\n47E0\nENDCHAR\nSTARTCHAR U_3C0D\nENCODING 15373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA00\n53C0\nFC40\n5380\n7240\n53C0\n0400\nFFE0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_3C0E\nENCODING 15374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2FE0\nF480\n2FE0\n6480\n77E0\nA480\n27E0\n2EE0\n2BA0\n2820\nENDCHAR\nSTARTCHAR U_3C0F\nENCODING 15375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nF920\n27E0\n6240\n73C0\nA7E0\n2420\n25A0\n25A0\n2460\nENDCHAR\nSTARTCHAR U_3C10\nENCODING 15376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n5DE0\nF480\n5AE0\n7540\nD5E0\nD6A0\n5AE0\n52A0\n5200\n55E0\nENDCHAR\nSTARTCHAR U_3C11\nENCODING 15377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n54A0\nE380\n4A40\n6920\nD6C0\n4100\n4FE0\n4380\n4540\n4920\nENDCHAR\nSTARTCHAR U_3C12\nENCODING 15378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4C60\n4AA0\n4D60\nFAA0\n4FE0\n6820\nD7C0\n4080\n4FE0\n4100\n4300\nENDCHAR\nSTARTCHAR U_3C13\nENCODING 15379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E80\n54E0\n5A80\nF540\n5E20\n6FC0\nCA40\nC940\n4FC0\n4480\n4840\nENDCHAR\nSTARTCHAR U_3C14\nENCODING 15380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5240\n7760\n58C0\nF740\n5040\nDF40\nE5A0\n4F00\n4500\n4200\n5DC0\nENDCHAR\nSTARTCHAR U_3C15\nENCODING 15381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n4F80\n4200\nEF80\n4540\nDFC0\nE500\n5D40\n4880\n4540\n5E20\nENDCHAR\nSTARTCHAR U_3C16\nENCODING 15382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E80\n54E0\n5A80\nF560\n5E00\nE000\nCF80\n4880\n4A80\n4520\n59E0\nENDCHAR\nSTARTCHAR U_3C17\nENCODING 15383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2FE0\nFAA0\n2F40\n6AA0\n77C0\nA440\n27C0\n2540\n2780\n28E0\nENDCHAR\nSTARTCHAR U_3C18\nENCODING 15384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2240\nFFE0\n2AA0\n6FC0\n77A0\nAAE0\n2340\n2FE0\n2240\n2440\nENDCHAR\nSTARTCHAR U_3C19\nENCODING 15385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5480\n5540\nFFE0\n5540\n5F40\nEBE0\nDF40\n49E0\n7F40\n5540\n63E0\nENDCHAR\nSTARTCHAR U_3C1A\nENCODING 15386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5F40\nEBE0\n5540\nDF40\nE5E0\nDF40\n55E0\n5740\n5D40\n53E0\nENDCHAR\nSTARTCHAR U_3C1B\nENCODING 15387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nF540\n2AA0\n7FC0\n6AA0\nAFE0\n2100\n2FE0\n2540\n2920\nENDCHAR\nSTARTCHAR U_3C1C\nENCODING 15388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n2E40\nF4E0\n2EA0\n6AE0\n7EA0\nAAE0\n2AA0\n3FE0\n2AA0\n3120\nENDCHAR\nSTARTCHAR U_3C1D\nENCODING 15389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n8BE0\n8D20\nF900\n8100\n8100\n8900\nB280\nC440\n1820\nENDCHAR\nSTARTCHAR U_3C1E\nENCODING 15390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n23E0\nAD20\nA940\nA900\nA900\nA900\nFA80\n8440\n1820\nENDCHAR\nSTARTCHAR U_3C1F\nENCODING 15391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7D00\n41E0\nBAA0\n0280\nF880\n0880\n0880\n0940\n0D40\n0620\nENDCHAR\nSTARTCHAR U_3C20\nENCODING 15392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2A00\nFBE0\n02A0\n7480\n5080\n5080\n5480\n5940\n5220\n8420\nENDCHAR\nSTARTCHAR U_3C21\nENCODING 15393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n53E0\n8D20\n5100\n5100\n5100\n5100\n5280\n5440\n9820\nENDCHAR\nSTARTCHAR U_3C22\nENCODING 15394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n5200\n53E0\n5520\nF900\n5100\n5100\n5100\n5180\n5240\n9C20\nENDCHAR\nSTARTCHAR U_3C23\nENCODING 15395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A00\n2A00\nABE0\nAAA0\nBE80\nA880\nA880\nBA80\nEC80\n8940\n0220\nENDCHAR\nSTARTCHAR U_3C24\nENCODING 15396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFE00\n0BE0\nED20\nA900\nA900\nA900\nE900\n0980\n0A40\n1C20\nENDCHAR\nSTARTCHAR U_3C25\nENCODING 15397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A00\nAA00\nABE0\nFD20\nA900\nA900\nA900\nB900\n8180\nFA40\n0420\nENDCHAR\nSTARTCHAR U_3C26\nENCODING 15398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2520\n2140\nF900\n2100\n5100\n8980\nFA40\n0420\nENDCHAR\nSTARTCHAR U_3C27\nENCODING 15399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n4200\n53E0\n8D20\nF900\n0100\nF900\n8900\n8980\nFA40\n8C20\nENDCHAR\nSTARTCHAR U_3C28\nENCODING 15400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n8A00\n8BE0\n8D20\nF900\n8900\n0100\n5100\n4980\n8A40\n8420\nENDCHAR\nSTARTCHAR U_3C29\nENCODING 15401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\nAD20\nA900\nF900\nA100\n3100\n3980\nCA40\n0420\nENDCHAR\nSTARTCHAR U_3C2A\nENCODING 15402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2520\nF900\n2100\nF900\n2100\n3A80\nC440\n0820\nENDCHAR\nSTARTCHAR U_3C2B\nENCODING 15403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5100\n79E0\n92A0\n1080\nFC80\n2880\n2880\n2940\n4A20\n8C20\nENDCHAR\nSTARTCHAR U_3C2C\nENCODING 15404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7DE0\n86A0\n7480\n5480\n7480\n5480\n7540\n0220\n1C20\nENDCHAR\nSTARTCHAR U_3C2D\nENCODING 15405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n51E0\n8AA0\n7480\n0080\nF880\n4080\n7940\n0940\n3620\nENDCHAR\nSTARTCHAR U_3C2E\nENCODING 15406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n4100\n7DE0\n42A0\n7E80\n5480\n5680\n5480\n5480\n9340\n1A20\nENDCHAR\nSTARTCHAR U_3C2F\nENCODING 15407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n0100\n7BE0\n4AA0\n4C80\n7880\n8480\n4880\n1D40\nE140\n0620\nENDCHAR\nSTARTCHAR U_3C30\nENCODING 15408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\nFDE0\n12A0\n5480\n5480\nBA80\n1080\n2940\n4540\n8220\nENDCHAR\nSTARTCHAR U_3C31\nENCODING 15409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n2200\nFBE0\n2520\nF900\nA900\nF900\nA900\nF980\n2240\n2C20\nENDCHAR\nSTARTCHAR U_3C32\nENCODING 15410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0D00\n0900\nFDE0\n0AA0\nEC80\nA880\nA880\nEC80\n2880\nD940\n2620\nENDCHAR\nSTARTCHAR U_3C33\nENCODING 15411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFA00\n53E0\nDAA0\n8C80\n8880\nD880\n5080\n5C80\nE140\n0620\nENDCHAR\nSTARTCHAR U_3C34\nENCODING 15412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nFBE0\n8D20\n5100\nF900\n0100\nF900\n8980\nFA40\n8C20\nENDCHAR\nSTARTCHAR U_3C35\nENCODING 15413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFA00\n53E0\n5520\nA900\n2100\n2100\nF900\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_3C36\nENCODING 15414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n7500\n95E0\n6AA0\n6080\n9E80\n0080\n7C80\n4480\n4540\n7E20\nENDCHAR\nSTARTCHAR U_3C37\nENCODING 15415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFD00\n4BE0\n4CA0\n6880\nA880\nEC80\n2880\n2940\n4940\n8E20\nENDCHAR\nSTARTCHAR U_3C38\nENCODING 15416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n5200\n8BE0\n7520\n2140\nF900\nA900\nF900\n2180\n5240\n8C20\nENDCHAR\nSTARTCHAR U_3C39\nENCODING 15417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0D00\n0900\nFDE0\n8AA0\nE880\n8880\nE880\nAD40\nE940\n9620\nE420\nENDCHAR\nSTARTCHAR U_3C3A\nENCODING 15418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nED00\nA500\nA5E0\nEEA0\n8080\nFC80\n9480\nF480\n8940\n9540\n9620\nENDCHAR\nSTARTCHAR U_3C3B\nENCODING 15419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFA00\n23E0\nFAA0\n0480\nF880\n8880\nF880\n9140\n7940\nC620\nENDCHAR\nSTARTCHAR U_3C3C\nENCODING 15420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n9100\nFDE0\n92A0\nD480\nBA80\n9080\nA880\nC540\nFE20\n0420\nENDCHAR\nSTARTCHAR U_3C3D\nENCODING 15421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\nA900\nBBE0\nACA0\nB880\nA880\nFC80\nA880\n9080\nA940\nFE20\nENDCHAR\nSTARTCHAR U_3C3E\nENCODING 15422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF900\n89E0\nFAA0\n8C80\nF880\n2080\nFC80\n5140\n4A20\n9C20\nENDCHAR\nSTARTCHAR U_3C3F\nENCODING 15423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA900\n53E0\nF4A0\n2080\n4880\nF880\n2080\nF940\n5220\n8C20\nENDCHAR\nSTARTCHAR U_3C40\nENCODING 15424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF900\nA9E0\nEA20\n5A80\n8080\nF880\nA940\nE940\n4A40\n9C20\nENDCHAR\nSTARTCHAR U_3C41\nENCODING 15425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA900\nABE0\nAAA0\nFC80\n2080\nA880\nA880\nA940\nFA40\n8C20\nENDCHAR\nSTARTCHAR U_3C42\nENCODING 15426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7D00\n5100\n7DE0\n56A0\n7C80\n5480\n7C80\n5540\nB940\nB620\nENDCHAR\nSTARTCHAR U_3C43\nENCODING 15427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\n6900\n9500\n79E0\n12A0\nFC80\n4880\nFC80\nCD40\nB540\nFE20\nENDCHAR\nSTARTCHAR U_3C44\nENCODING 15428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n5500\n7DE0\n56A0\n7C80\n1080\n7C80\n1080\nFD40\n5520\nAA20\nENDCHAR\nSTARTCHAR U_3C45\nENCODING 15429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFD00\n11E0\nFEA0\n8480\nFC80\n4880\n7880\n4940\n3140\nFE20\nENDCHAR\nSTARTCHAR U_3C46\nENCODING 15430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1D00\n1100\n7FE0\n5520\n7E80\n4080\n7E80\n5480\n5D40\n9540\nBE20\nENDCHAR\nSTARTCHAR U_3C47\nENCODING 15431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFF00\n55E0\nBB20\nFE80\n4480\n7480\n5480\n7540\n4540\n7E20\nENDCHAR\nSTARTCHAR U_3C48\nENCODING 15432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\nFD00\n29E0\n7D20\nAA80\n7C80\n0080\nFE80\n5540\n9340\n3220\nENDCHAR\nSTARTCHAR U_3C49\nENCODING 15433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nED00\n2900\nFDE0\n2A20\nFE80\n1080\n7C80\n1080\nFD40\n5540\n9220\nENDCHAR\nSTARTCHAR U_3C4A\nENCODING 15434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n2100\nF9E0\nAAA0\nFC80\nA880\n5480\n7880\nC940\n3240\nCC20\nENDCHAR\nSTARTCHAR U_3C4B\nENCODING 15435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n1100\nFDE0\nD6A0\n3880\n5480\nFC80\n4880\n7D40\n4940\n7E20\nENDCHAR\nSTARTCHAR U_3C4C\nENCODING 15436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n4900\n79E0\n4AA0\nFC80\n0880\nFC80\n5480\n5540\nFD40\n2A20\nENDCHAR\nSTARTCHAR U_3C4D\nENCODING 15437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\n4A80\n9CE0\nE720\n5D40\n4240\nBC40\nE740\n1C40\nB5A0\n9D20\nENDCHAR\nSTARTCHAR U_3C4E\nENCODING 15438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\nAA80\nFFE0\n5520\nF280\n5C80\nD480\n7C80\n5540\n7D40\nAA20\nENDCHAR\nSTARTCHAR U_3C4F\nENCODING 15439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0000\nFFE0\n0400\n0400\n2780\n2400\n2400\n2400\n2400\nFFE0\nENDCHAR\nSTARTCHAR U_3C50\nENCODING 15440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n7C40\n0040\nFFE0\n0000\n1000\n5E00\n5000\n5E00\nF000\n4000\nENDCHAR\nSTARTCHAR U_3C51\nENCODING 15441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2780\n2400\nFFE0\n0800\n1F80\n6880\n0500\n0600\n1800\nE000\nENDCHAR\nSTARTCHAR U_3C52\nENCODING 15442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n47C0\n4400\nFFE0\n0000\n7FC0\n0080\n3C80\n2480\n3C80\n0180\nENDCHAR\nSTARTCHAR U_3C53\nENCODING 15443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n1100\n1280\n5440\n5920\n5080\n57C0\n5040\nFA80\n4100\n0100\nENDCHAR\nSTARTCHAR U_3C54\nENCODING 15444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n5200\n5FE0\n5200\nFDE0\n1000\n1F80\n6900\n0600\n0C00\nF000\nENDCHAR\nSTARTCHAR U_3C55\nENCODING 15445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\n23C0\nB040\nAFE0\nA920\nA7C0\nB540\nE540\n85C0\n0100\nENDCHAR\nSTARTCHAR U_3C56\nENCODING 15446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n2100\n2FE0\n2440\nA440\nBAA0\nA100\nAFE0\nB100\nC100\n0100\nENDCHAR\nSTARTCHAR U_3C57\nENCODING 15447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n27C0\n2540\nBEC0\nA540\nA640\nA7C0\nB940\nEFE0\n8280\n0C60\nENDCHAR\nSTARTCHAR U_3C58\nENCODING 15448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n52C0\n5EA0\n53E0\n5E80\n5340\n5E20\n6200\n53C0\n9200\nBFE0\nENDCHAR\nSTARTCHAR U_3C59\nENCODING 15449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4100\n4100\n7A00\nCBE0\nB020\n1020\n2020\n4020\n83C0\n0080\nENDCHAR\nSTARTCHAR U_3C5A\nENCODING 15450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2220\n2220\n3BE0\n4A20\nCA20\n33E0\n1220\n2220\nC420\n0860\nENDCHAR\nSTARTCHAR U_3C5B\nENCODING 15451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2200\n2200\n7BC0\n4A40\nCE40\n3180\n2080\n4100\n8200\n0400\nENDCHAR\nSTARTCHAR U_3C5C\nENCODING 15452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFC80\n4080\n7880\n4A80\nCAE0\n3280\n1280\n2280\nC780\n08E0\nENDCHAR\nSTARTCHAR U_3C5D\nENCODING 15453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFC80\n4880\n6BE0\nA8A0\nACA0\n68A0\n28A0\n4920\n4D20\n8AC0\nENDCHAR\nSTARTCHAR U_3C5E\nENCODING 15454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF080\n4FE0\n7000\n9440\n5440\n2240\n2280\n4280\n8000\n0FE0\nENDCHAR\nSTARTCHAR U_3C5F\nENCODING 15455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFBE0\n22A0\n3A80\n4A80\n6BE0\n92A0\n12A0\n2240\nC4A0\n0520\nENDCHAR\nSTARTCHAR U_3C60\nENCODING 15456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF880\n2080\n7BE0\n4880\n4880\nABE0\n1220\n2220\n4220\n83E0\nENDCHAR\nSTARTCHAR U_3C61\nENCODING 15457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFA80\n25C0\n3900\n4900\nAFE0\n1180\n2280\n4480\n88A0\n00E0\nENDCHAR\nSTARTCHAR U_3C62\nENCODING 15458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF900\n47C0\n7440\n57C0\nD440\n37C0\n2520\n44C0\n8440\n0620\nENDCHAR\nSTARTCHAR U_3C63\nENCODING 15459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00E0\nFFA0\n42A0\n7A40\n4A40\nCFE0\n3240\n1640\n2180\n4140\n8620\nENDCHAR\nSTARTCHAR U_3C64\nENCODING 15460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF460\n4580\n4F00\n7500\n55E0\nD740\n3D40\n2540\n2540\n4540\n8640\nENDCHAR\nSTARTCHAR U_3C65\nENCODING 15461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n4100\n47C0\n7240\n9520\nD3C0\n2640\n2180\n4180\n8660\nENDCHAR\nSTARTCHAR U_3C66\nENCODING 15462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n4100\n4280\n7440\n9FE0\nD040\n2740\n2540\n4740\n80C0\nENDCHAR\nSTARTCHAR U_3C67\nENCODING 15463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n4820\n4000\n76E0\n9AA0\nDAE0\n2680\n2280\n44A0\n88E0\nENDCHAR\nSTARTCHAR U_3C68\nENCODING 15464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n4FE0\n4820\n77C0\n9100\nD5C0\n2500\n2500\n4700\n88E0\nENDCHAR\nSTARTCHAR U_3C69\nENCODING 15465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n4100\n4FE0\n7520\n9B40\nD500\n2FE0\n2100\n4280\n8C60\nENDCHAR\nSTARTCHAR U_3C6A\nENCODING 15466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nFC40\n47C0\n4480\n77E0\n9440\nD7E0\n2440\n27C0\n4440\n87C0\nENDCHAR\nSTARTCHAR U_3C6B\nENCODING 15467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n4100\n47E0\n7560\n97A0\nD7E0\n3100\n2380\n4540\n8920\nENDCHAR\nSTARTCHAR U_3C6C\nENCODING 15468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nFD40\n47C0\n4540\n77C0\n9000\nDFE0\n2540\n2480\n4540\n8620\nENDCHAR\nSTARTCHAR U_3C6D\nENCODING 15469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\nF4A0\n44A0\n4700\n74E0\n9720\nD4A0\n2740\n2C40\n44A0\n8520\nENDCHAR\nSTARTCHAR U_3C6E\nENCODING 15470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n4540\n47C0\n7100\n97E0\nD540\n2540\n2540\n4280\n8C60\nENDCHAR\nSTARTCHAR U_3C6F\nENCODING 15471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF540\n47C0\n4000\n7FE0\n9000\nD7C0\n2440\n27C0\n4280\n8FE0\nENDCHAR\nSTARTCHAR U_3C70\nENCODING 15472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n4920\n47C0\n7440\n9280\nDFE0\n2100\n27C0\n4100\n8100\nENDCHAR\nSTARTCHAR U_3C71\nENCODING 15473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFC00\n47C0\n4540\n77C0\n9540\nD7C0\n22A0\n22E0\n4480\n8860\nENDCHAR\nSTARTCHAR U_3C72\nENCODING 15474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFA80\n27E0\n2280\n7C40\n4820\nD7C0\n3540\n2540\n4540\n8FE0\nENDCHAR\nSTARTCHAR U_3C73\nENCODING 15475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n1100\n3F80\n2480\nFFE0\n2080\nDF60\n0800\n3F00\n0500\n7E00\nENDCHAR\nSTARTCHAR U_3C74\nENCODING 15476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n4100\n43C0\n7100\n9FE0\nD240\n23C0\n2240\n43C0\n8C20\nENDCHAR\nSTARTCHAR U_3C75\nENCODING 15477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n4540\n4FE0\n7440\n97C0\nD440\n27C0\n2440\n47C0\n8820\nENDCHAR\nSTARTCHAR U_3C76\nENCODING 15478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFF20\n4240\n4780\n7000\n9720\n55C0\n2700\n2880\n4520\n8FC0\nENDCHAR\nSTARTCHAR U_3C77\nENCODING 15479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n4480\n47E0\n7480\n97E0\nD480\n27E0\n2180\n42C0\n8CA0\nENDCHAR\nSTARTCHAR U_3C78\nENCODING 15480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF740\n45E0\n45A0\n7740\n94E0\nD740\n2540\n25E0\n4740\n8840\nENDCHAR\nSTARTCHAR U_3C79\nENCODING 15481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4480\n4760\n7540\n97E0\nD540\n37E0\n2480\n26E0\n4A80\n8BE0\nENDCHAR\nSTARTCHAR U_3C7A\nENCODING 15482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\nF900\n47E0\n7540\n57E0\nD540\nB7C0\n2540\n27C0\n4D40\n8FE0\nENDCHAR\nSTARTCHAR U_3C7B\nENCODING 15483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n4400\n43E0\n7440\n97C0\nD540\n27C0\n2540\n47C0\n8960\nENDCHAR\nSTARTCHAR U_3C7C\nENCODING 15484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nF480\n9480\n9480\n9860\nF780\n8480\n9480\nA300\nC480\n1860\nENDCHAR\nSTARTCHAR U_3C7D\nENCODING 15485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFA40\nAA40\nAC60\n2BC0\n5240\n5240\n5580\n9A40\n9420\nENDCHAR\nSTARTCHAR U_3C7E\nENCODING 15486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2240\nFA40\n2240\n4C20\nF3C0\n2A40\n5240\nB180\n4980\n8660\nENDCHAR\nSTARTCHAR U_3C7F\nENCODING 15487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBC0\n2240\n7240\n0240\nFDE0\n8A40\nFA40\n8980\n8980\n9E60\nENDCHAR\nSTARTCHAR U_3C80\nENCODING 15488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DC0\n4140\n7940\n4260\n7C00\n53E0\n5D40\n5880\n5540\n5A40\n9420\nENDCHAR\nSTARTCHAR U_3C81\nENCODING 15489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n1140\n7D40\n8660\n4800\n87E0\nFA20\n2140\n2080\n3940\nC220\nENDCHAR\nSTARTCHAR U_3C82\nENCODING 15490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nAA40\n7240\nFA40\n8C20\nEBC0\nAA40\nAA40\nE980\n8A40\n9C20\nENDCHAR\nSTARTCHAR U_3C83\nENCODING 15491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3BC0\n2240\nFA40\nAA40\nCC20\nFBC0\n4240\n7180\n4240\n7C20\nENDCHAR\nSTARTCHAR U_3C84\nENCODING 15492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBC0\n2240\nFA40\n8C20\nFBC0\n2240\nFA40\n2180\n3A40\nC420\nENDCHAR\nSTARTCHAR U_3C85\nENCODING 15493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\nFD40\nA540\nF940\n2620\nF9C0\n2140\nF940\n8880\nF940\n8A20\nENDCHAR\nSTARTCHAR U_3C86\nENCODING 15494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFD40\n57E0\n7D40\n4180\n8E60\n3580\nC260\n1F80\n0900\n0600\nENDCHAR\nSTARTCHAR U_3C87\nENCODING 15495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFD40\n57E0\n7D40\n4E80\nB160\n0E00\n1900\nE6E0\n0800\n0600\nENDCHAR\nSTARTCHAR U_3C88\nENCODING 15496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFD40\n57E0\n7D40\n4080\n8360\n7F80\n1080\n7F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3C89\nENCODING 15497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFDC0\n2140\nFD40\n8660\nFFC0\nD540\nBD40\nF480\n5D40\n9220\nENDCHAR\nSTARTCHAR U_3C8A\nENCODING 15498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n39C0\n2140\nFD40\n8540\n7A20\nB5C0\n4940\nFD40\n5880\n6940\n7E20\nENDCHAR\nSTARTCHAR U_3C8B\nENCODING 15499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F00\n2200\n7FC0\nA040\n3FC0\n2200\n3E60\n2380\n2E20\n31E0\nENDCHAR\nSTARTCHAR U_3C8C\nENCODING 15500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\nE780\n2280\n3A80\nE2C0\n2240\n3C40\nE440\n29A0\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_3C8D\nENCODING 15501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF900\n21C0\n2700\nF9E0\n4F00\n4920\n30E0\n4C00\n83E0\nENDCHAR\nSTARTCHAR U_3C8E\nENCODING 15502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n18C0\nE700\n2100\n39C0\nE700\n2100\n39E0\nE700\n2900\n3120\n20E0\nENDCHAR\nSTARTCHAR U_3C8F\nENCODING 15503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n5700\n5100\n51C0\n7F00\n4100\n79E0\n4F00\n4900\n8920\n88E0\nENDCHAR\nSTARTCHAR U_3C90\nENCODING 15504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n6100\nA280\n3440\n6920\nA7C0\n3040\n6080\nA100\n2020\n3FE0\nENDCHAR\nSTARTCHAR U_3C91\nENCODING 15505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n6100\nA740\n3380\n6580\nA540\n3920\n6100\nA300\n2020\n3FE0\nENDCHAR\nSTARTCHAR U_3C92\nENCODING 15506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\n7900\n4900\n8FC0\n6900\n5900\n5FC0\n6900\n0920\n39E0\nENDCHAR\nSTARTCHAR U_3C93\nENCODING 15507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n18C0\nE0A0\n27E0\n3C80\nE6A0\n25A0\n3CC0\nE540\n2A20\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_3C94\nENCODING 15508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nFF00\n8900\n51E0\n0700\nF900\n21E0\nFF00\n2120\n2120\n20E0\nENDCHAR\nSTARTCHAR U_3C95\nENCODING 15509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C60\nE780\nA480\n58E0\n0B80\nFC80\n88E0\n4B80\n0880\n08A0\n18E0\nENDCHAR\nSTARTCHAR U_3C96\nENCODING 15510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA8E0\n7380\n2080\nF8E0\n8B80\nF880\n88E0\nFB80\n8880\n88A0\n98E0\nENDCHAR\nSTARTCHAR U_3C97\nENCODING 15511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1CE0\nE780\nA880\nF8E0\n1780\n2080\n38E0\nE780\n2080\n20A0\n60E0\nENDCHAR\nSTARTCHAR U_3C98\nENCODING 15512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78E0\n4B80\n4880\n78E0\n4B80\n7880\n48E0\n4B80\n7880\n48A0\n84E0\nENDCHAR\nSTARTCHAR U_3C99\nENCODING 15513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nEFE0\n2200\n3440\nEFE0\n2540\n3540\nE540\n2960\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_3C9A\nENCODING 15514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n4B40\n1520\nE180\n5E00\n0400\n7F80\n0400\nFFC0\n0420\n07E0\nENDCHAR\nSTARTCHAR U_3C9B\nENCODING 15515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n9120\n7DE0\n2800\n5F80\n0400\n7FC0\n0400\nFFE0\n0420\n07E0\nENDCHAR\nSTARTCHAR U_3C9C\nENCODING 15516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nAB00\n7100\n21E0\n5700\nA900\nA9E0\n7700\n2100\n5120\n88E0\nENDCHAR\nSTARTCHAR U_3C9D\nENCODING 15517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1A00\nE500\n27C0\n3D00\nE7C0\n2500\n37C0\nE500\n27E0\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_3C9E\nENCODING 15518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n1380\nFC80\n4BE0\n4880\nB480\n13E0\nFC80\n1080\n10A0\n10E0\nENDCHAR\nSTARTCHAR U_3C9F\nENCODING 15519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n28C0\nFF80\n2880\n10E0\n7F80\n5480\n54E0\nFF80\n2880\n44A0\n80E0\nENDCHAR\nSTARTCHAR U_3CA0\nENCODING 15520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7DE0\n1340\nFC80\n5760\n3C00\n07C0\n7C00\n07C0\n7C20\n07E0\nENDCHAR\nSTARTCHAR U_3CA1\nENCODING 15521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\nFF80\n3880\nD4E0\n7B80\n0080\nFCE0\n1380\n5880\n94A0\n30E0\nENDCHAR\nSTARTCHAR U_3CA2\nENCODING 15522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\n7F80\n4280\n7EE0\n4180\n4080\n7EE0\n6B80\nFE80\nAAA0\nAAE0\nENDCHAR\nSTARTCHAR U_3CA3\nENCODING 15523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n60C0\nBB80\nA880\nF8E0\nAB80\nF880\n20E0\nFB80\n4880\n30A0\nCCE0\nENDCHAR\nSTARTCHAR U_3CA4\nENCODING 15524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n1380\nFC80\n48E0\nFF80\n4880\n78E0\n5780\nD880\n48A0\n64E0\nENDCHAR\nSTARTCHAR U_3CA5\nENCODING 15525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\n7F80\n5480\n7EE0\n5580\n7C80\n50E0\n7F80\n6480\nBCA0\nA4E0\nENDCHAR\nSTARTCHAR U_3CA6\nENCODING 15526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF280\n4CE0\nF700\n9100\nF1C0\n9700\nF1C0\n4700\nF120\n41E0\nENDCHAR\nSTARTCHAR U_3CA7\nENCODING 15527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37C0\nC540\n4280\n7380\nCD60\n4540\n77C0\nC120\n4FE0\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_3CA8\nENCODING 15528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n48E0\nFF80\n4880\nFCE0\n4B80\n7880\n48E0\n7B80\n4880\nFCA0\n08E0\nENDCHAR\nSTARTCHAR U_3CA9\nENCODING 15529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\nE440\n27C0\n3440\nEFE0\n2AA0\n3660\nEBA0\n2660\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_3CAA\nENCODING 15530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE8C0\nB780\n5880\n48E0\nB780\n0080\n78E0\n4B80\n7880\n48A0\nFCE0\nENDCHAR\nSTARTCHAR U_3CAB\nENCODING 15531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nCCC0\n4B80\nFC80\n48E0\nFF80\n2080\n78E0\n2380\nFC80\n48A0\n84E0\nENDCHAR\nSTARTCHAR U_3CAC\nENCODING 15532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n50E0\n7F80\nD080\n7CE0\n5380\n7C80\n50E0\n7F80\n4080\nA4A0\nA4E0\nENDCHAR\nSTARTCHAR U_3CAD\nENCODING 15533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9460\n5580\n5880\n28E0\n4580\n8280\n54E0\nEF80\n4480\nAEA0\n92E0\nENDCHAR\nSTARTCHAR U_3CAE\nENCODING 15534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6FE0\nCAA0\n4380\n7C60\nC7C0\n4000\n77C0\nC440\n47C0\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_3CAF\nENCODING 15535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8C0\nA980\nEC80\nB0E0\nE180\nAC80\nF0E0\n0180\nFE80\nAAA0\nFEE0\nENDCHAR\nSTARTCHAR U_3CB0\nENCODING 15536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFE80\n9280\n4CE0\nFB80\nAA80\nFEE0\n0180\nFE80\n10A0\n3060\nENDCHAR\nSTARTCHAR U_3CB1\nENCODING 15537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3540\nEA80\n2540\n2FC0\nF940\n2A40\n2FC0\nFA80\n2FA0\n2A60\n1FC0\nENDCHAR\nSTARTCHAR U_3CB2\nENCODING 15538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n5480\nFE80\nABE0\nFE80\n8280\n7DE0\n4480\n7C80\n44A0\nFEE0\nENDCHAR\nSTARTCHAR U_3CB3\nENCODING 15539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1880\nF280\n93E0\n9280\nFC80\n97E0\n9080\n9080\nF140\n8A20\n6C20\nENDCHAR\nSTARTCHAR U_3CB4\nENCODING 15540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FC0\n4000\nBF80\n0000\n7F80\n0880\n7E80\n4A80\n7E60\n0820\nENDCHAR\nSTARTCHAR U_3CB5\nENCODING 15541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n4000\nBF80\n0000\n7F80\n2A80\n1C80\n3E80\n22A0\n3EA0\n2660\nENDCHAR\nSTARTCHAR U_3CB6\nENCODING 15542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n4000\nFF80\n2080\n3C80\n2080\nFE80\nAA80\nD6A0\nAA60\nFE20\nENDCHAR\nSTARTCHAR U_3CB7\nENCODING 15543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4000\nBFC0\n5540\n7F40\n2A40\n3E40\n2A40\nFFC0\n0860\n0820\nENDCHAR\nSTARTCHAR U_3CB8\nENCODING 15544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FC0\n0040\n8080\n4100\n1200\n2400\nC800\n4800\n4820\n47E0\nENDCHAR\nSTARTCHAR U_3CB9\nENCODING 15545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\n2480\n0480\n8480\n4480\n1480\n2480\nC480\n4480\n48A0\n1060\nENDCHAR\nSTARTCHAR U_3CBA\nENCODING 15546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n1200\n0200\n8200\n43E0\n0E00\n1200\n2200\nC200\n4220\n41E0\nENDCHAR\nSTARTCHAR U_3CBB\nENCODING 15547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n2240\n7A40\nCB80\n4B00\n4A80\n5280\n5240\n6220\n4600\nENDCHAR\nSTARTCHAR U_3CBC\nENCODING 15548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2440\n0440\n8440\n4280\n1280\n2100\nC100\n4280\n4440\n1820\nENDCHAR\nSTARTCHAR U_3CBD\nENCODING 15549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\n0220\n8220\n4220\n1A20\n2620\nC220\n4420\n4820\n10C0\nENDCHAR\nSTARTCHAR U_3CBE\nENCODING 15550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n0400\n0440\nF480\n1700\n2500\n4480\n8460\n1C00\nENDCHAR\nSTARTCHAR U_3CBF\nENCODING 15551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0800\n8800\n4800\n1800\n2800\nC800\n4800\n4800\n1000\nENDCHAR\nSTARTCHAR U_3CC0\nENCODING 15552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2280\n0240\n8FE0\n4200\n1240\n2280\nC100\n4320\n44A0\n4840\nENDCHAR\nSTARTCHAR U_3CC1\nENCODING 15553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2800\n0900\n8900\n4900\n0900\n2980\nCA80\n5240\n5440\n6820\nENDCHAR\nSTARTCHAR U_3CC2\nENCODING 15554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2280\n0280\n8240\n4440\n0920\n2100\nC200\n4240\n44C0\n4720\nENDCHAR\nSTARTCHAR U_3CC3\nENCODING 15555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n0FC0\n8280\n44A0\n0940\n2100\nCFE0\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_3CC4\nENCODING 15556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2440\n07C0\n8A40\n5280\n0200\n2500\nC480\n4880\n4840\n5020\nENDCHAR\nSTARTCHAR U_3CC5\nENCODING 15557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n0100\n8200\n4340\n1520\n2920\nC100\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_3CC6\nENCODING 15558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2480\n0280\n8080\n4480\n1280\n20E0\nCF80\n4080\n4080\n4080\nENDCHAR\nSTARTCHAR U_3CC7\nENCODING 15559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2480\n0440\n8820\n5480\n0480\n2300\nC100\n4280\n4480\n5860\nENDCHAR\nSTARTCHAR U_3CC8\nENCODING 15560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n1FE0\n8200\n4A80\n0A80\n2A80\nAA80\n4AA0\n52E0\n4200\nENDCHAR\nSTARTCHAR U_3CC9\nENCODING 15561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2420\n0420\n87E0\n4420\n1420\n27E0\nA420\n4420\n48A0\n5060\nENDCHAR\nSTARTCHAR U_3CCA\nENCODING 15562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2400\n07E0\n8880\n5480\n1480\n2300\nA100\n4300\n4480\n5860\nENDCHAR\nSTARTCHAR U_3CCB\nENCODING 15563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2F00\n0800\n8800\n4FE0\n0880\n2880\nA880\n4880\n4880\n7FE0\nENDCHAR\nSTARTCHAR U_3CCC\nENCODING 15564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n0920\n8FE0\n4920\n1920\n2FE0\nA100\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_3CCD\nENCODING 15565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n1FE0\n8500\n4FC0\n1940\n2940\nA940\n49C0\n4100\n4100\nENDCHAR\nSTARTCHAR U_3CCE\nENCODING 15566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2400\n0840\n9FE0\n4480\n1480\n3FE0\nA480\n4480\n4880\n5080\nENDCHAR\nSTARTCHAR U_3CCF\nENCODING 15567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n0FE0\n8920\n4920\n0FE0\n2900\nA500\n4300\n4680\n5860\nENDCHAR\nSTARTCHAR U_3CD0\nENCODING 15568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\n0480\n9F80\n4480\n1480\n2E80\nCD80\n5480\n44A0\n04E0\nENDCHAR\nSTARTCHAR U_3CD1\nENCODING 15569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FC0\n1540\n9540\n5540\n1540\n3540\nD540\n5540\n5FE0\n0000\nENDCHAR\nSTARTCHAR U_3CD2\nENCODING 15570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n0FE0\n8280\n4280\n1440\n2920\nC100\n4200\n4440\n07A0\nENDCHAR\nSTARTCHAR U_3CD3\nENCODING 15571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n0100\n8FE0\n4200\n1400\n27C0\nCC40\n5440\n4440\n07C0\nENDCHAR\nSTARTCHAR U_3CD4\nENCODING 15572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2040\n0E40\n83E0\n4A40\n1B40\n26C0\nC440\n4A40\n5040\n00C0\nENDCHAR\nSTARTCHAR U_3CD5\nENCODING 15573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n0280\n8FE0\n4000\n1000\n27C0\nC000\n4000\n4000\n0FE0\nENDCHAR\nSTARTCHAR U_3CD6\nENCODING 15574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n0FE0\n8100\n4200\n0520\n3D40\n2480\nC480\n4540\n4620\nENDCHAR\nSTARTCHAR U_3CD7\nENCODING 15575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2520\n04C0\n8280\n4100\n0280\n2D60\n2100\nC7C0\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_3CD8\nENCODING 15576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n0FE0\n8100\n4240\n17A0\n2200\nC280\n4280\n44A0\n08E0\nENDCHAR\nSTARTCHAR U_3CD9\nENCODING 15577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2200\n0440\n8FA0\n4000\n17C0\n2440\nC7C0\n4440\n47C0\n0840\nENDCHAR\nSTARTCHAR U_3CDA\nENCODING 15578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n20A0\n0FE0\n8880\n4880\n1AA0\n29A0\nC8C0\n4880\n5160\n2620\nENDCHAR\nSTARTCHAR U_3CDB\nENCODING 15579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2500\n0960\n8920\n4D60\n1920\n2FE0\nC100\n4280\n4440\n1820\nENDCHAR\nSTARTCHAR U_3CDC\nENCODING 15580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2280\n0480\n8FE0\n5480\n0480\n25C0\n26A0\nC480\n4480\n4480\nENDCHAR\nSTARTCHAR U_3CDD\nENCODING 15581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n25E0\n0880\nB880\n4880\n0FE0\n2880\nC880\n4880\n4880\n0BE0\nENDCHAR\nSTARTCHAR U_3CDE\nENCODING 15582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\n0880\n9BE0\n4AA0\n0AA0\n2BE0\n2880\nC880\n4880\n4880\nENDCHAR\nSTARTCHAR U_3CDF\nENCODING 15583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1100\n1100\nFFE0\n1100\n2480\nD560\n0E00\n3500\n4CC0\nENDCHAR\nSTARTCHAR U_3CE0\nENCODING 15584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2480\n03E0\n9C80\n4480\n1480\n2480\nC540\n4620\n4A00\n11E0\nENDCHAR\nSTARTCHAR U_3CE1\nENCODING 15585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2840\n0440\n81E0\n5C40\n1540\n24C0\nC440\n44C0\n4A00\n11E0\nENDCHAR\nSTARTCHAR U_3CE2\nENCODING 15586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2700\n0100\n8FE0\n4100\n1280\n2C60\nC280\n4280\n4480\n0880\nENDCHAR\nSTARTCHAR U_3CE3\nENCODING 15587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n07C0\n8120\n4140\n1FE0\n2100\nC640\n4B80\n4220\n01C0\nENDCHAR\nSTARTCHAR U_3CE4\nENCODING 15588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2A80\n0680\n8280\n4FE0\n1280\n22C0\nCBA0\n5280\n4280\n0280\nENDCHAR\nSTARTCHAR U_3CE5\nENCODING 15589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\n07C0\n8100\n47C0\n1000\n2280\nCFE0\n4280\n4280\n0480\nENDCHAR\nSTARTCHAR U_3CE6\nENCODING 15590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n20A0\n1FE0\n8A80\n4A80\n1FA0\n2AA0\n2AC0\nD2C0\n4160\n4620\nENDCHAR\nSTARTCHAR U_3CE7\nENCODING 15591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2A80\n0A80\n8E80\n4A80\n0A80\n2E80\n2A80\nCEA0\n5AA0\n4260\nENDCHAR\nSTARTCHAR U_3CE8\nENCODING 15592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4520\n2A40\n0520\n8000\n4FE0\n1200\n23C0\nC640\n4980\n4100\n0E00\nENDCHAR\nSTARTCHAR U_3CE9\nENCODING 15593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n3E40\n0B40\n8AC0\n4A40\n0BE0\n2E40\n3A40\nC240\n4440\n44C0\nENDCHAR\nSTARTCHAR U_3CEA\nENCODING 15594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n0300\n8580\n5940\n0120\n2100\n27C0\nC440\n4440\n47C0\nENDCHAR\nSTARTCHAR U_3CEB\nENCODING 15595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7640\n1580\n2480\nCC60\n1000\n2380\n2080\n3B80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3CEC\nENCODING 15596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n0800\n87E0\n4120\n0140\n2500\n25E0\nC500\n4B00\n50E0\nENDCHAR\nSTARTCHAR U_3CED\nENCODING 15597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n0440\n87C0\n4100\n1FE0\n2100\nC380\n4540\n5920\n0100\nENDCHAR\nSTARTCHAR U_3CEE\nENCODING 15598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n3020\n1020\n9FE0\n5000\n1100\n3F20\nD3C0\n5540\n5920\n2300\nENDCHAR\nSTARTCHAR U_3CEF\nENCODING 15599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0440\n8280\n4FE0\n1100\n2100\nCFE0\n4100\n4100\n0100\nENDCHAR\nSTARTCHAR U_3CF0\nENCODING 15600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0200\n8440\n47E0\n0240\n2240\nAFE0\n4240\n4240\n4440\nENDCHAR\nSTARTCHAR U_3CF1\nENCODING 15601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n0AA0\n8CA0\n4AE0\n0AA0\n2AA0\nAAA0\n4CE0\n48A0\n4800\nENDCHAR\nSTARTCHAR U_3CF2\nENCODING 15602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n2900\n0100\nA7E0\n5100\n0100\n2980\n2A80\nD240\n5540\n5820\nENDCHAR\nSTARTCHAR U_3CF3\nENCODING 15603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n0FE0\n8100\n47C0\n1440\n27C0\nA280\n4280\n44A0\n48E0\nENDCHAR\nSTARTCHAR U_3CF4\nENCODING 15604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2540\n14A0\n9520\n4640\n1BC0\n2100\nA7C0\n4100\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_3CF5\nENCODING 15605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2700\n0100\n9FE0\n4540\n0920\n2780\nA080\n4FE0\n4100\n4300\nENDCHAR\nSTARTCHAR U_3CF6\nENCODING 15606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\n3980\n1680\n8880\n5E80\n0280\n2780\nBC80\n44A0\n44A0\n4CE0\nENDCHAR\nSTARTCHAR U_3CF7\nENCODING 15607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n2FE0\n0AA0\n92A0\n4D20\n0240\n2FE0\nA820\n4FE0\n4820\n4FE0\nENDCHAR\nSTARTCHAR U_3CF8\nENCODING 15608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\n0FE0\n8480\n4280\n14A0\n2CC0\n2780\nC480\n44A0\n44E0\nENDCHAR\nSTARTCHAR U_3CF9\nENCODING 15609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n25E0\n0440\n9F40\n4440\n0DE0\n2E40\n3540\nC440\n4440\n45E0\nENDCHAR\nSTARTCHAR U_3CFA\nENCODING 15610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\n1EE0\n8500\n44E0\n0720\n3C40\n25E0\nC440\n4440\n4CC0\nENDCHAR\nSTARTCHAR U_3CFB\nENCODING 15611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n27C0\n0280\n8280\n4FE0\n0000\n27C0\nA440\n47C0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_3CFC\nENCODING 15612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nFFE0\n4A40\n7980\n01A0\nFA60\n0440\n7680\n1580\nE460\n0C00\nENDCHAR\nSTARTCHAR U_3CFD\nENCODING 15613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5D00\n2500\n05E0\n9E80\n5080\n1080\n3DC0\nA6A0\n44A0\n4480\n5980\nENDCHAR\nSTARTCHAR U_3CFE\nENCODING 15614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n0FE0\n8100\n47C0\n0100\n2FE0\nA280\n4280\n44A0\n4860\nENDCHAR\nSTARTCHAR U_3CFF\nENCODING 15615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0200\n8440\n47C0\n1100\n2FE0\n2380\nC540\n4920\n4100\nENDCHAR\nSTARTCHAR U_3D00\nENCODING 15616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2EE0\n0000\n87C0\n4100\n17C0\n2080\nC100\n4600\n49E0\n0000\nENDCHAR\nSTARTCHAR U_3D01\nENCODING 15617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2200\n1FE0\n8480\n4840\n14A0\n2FC0\nC480\n4FC0\n4480\n0880\nENDCHAR\nSTARTCHAR U_3D02\nENCODING 15618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2080\n1BE0\n8AA0\n4AA0\n0BE0\n2AA0\nCFE0\n5A20\n4220\n0260\nENDCHAR\nSTARTCHAR U_3D03\nENCODING 15619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2800\n0FE0\n8820\n4FE0\n1880\n2FA0\nCAC0\n4AA0\n54A0\n2980\nENDCHAR\nSTARTCHAR U_3D04\nENCODING 15620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\n0AA0\n8CE0\n4820\n1BA0\n2AA0\nCBA0\n4820\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_3D05\nENCODING 15621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n7700\n1500\n2480\nC860\n7FC0\n4A40\n71C0\n5F40\n5140\n7FC0\nENDCHAR\nSTARTCHAR U_3D06\nENCODING 15622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2040\n1FE0\n8040\n4FE0\n0920\n27C0\nC540\n4540\n4540\n0100\nENDCHAR\nSTARTCHAR U_3D07\nENCODING 15623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n24A0\nF6C0\n6D80\n76C0\nADA0\nB6A0\n24A0\n2480\n6D80\nENDCHAR\nSTARTCHAR U_3D08\nENCODING 15624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2400\n07C0\n8480\n4480\n1FE0\n2100\nC920\n4920\n4920\n0FE0\nENDCHAR\nSTARTCHAR U_3D09\nENCODING 15625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2480\n0BC0\n8440\n4280\n1520\n2AE0\nC000\n4FC0\n4000\n1FE0\nENDCHAR\nSTARTCHAR U_3D0A\nENCODING 15626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5120\n2AA0\n1FA0\n84A0\n55A0\n15A0\n3FA0\nC4A0\n4820\n4820\n1060\nENDCHAR\nSTARTCHAR U_3D0B\nENCODING 15627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2F80\n0280\n9FE0\n4280\n0F80\n2A40\nCB40\n4EC0\n4A40\n1240\nENDCHAR\nSTARTCHAR U_3D0C\nENCODING 15628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2880\n09C0\nBE80\n5480\n15C0\n2940\nC940\n5540\n22C0\n0000\nENDCHAR\nSTARTCHAR U_3D0D\nENCODING 15629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\n2080\n0120\n9BA0\n4540\n0BC0\n2920\nD3A0\n6120\n4500\n0200\nENDCHAR\nSTARTCHAR U_3D0E\nENCODING 15630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0280\n8440\n4BA0\n0000\n27C0\nC100\n4540\n4920\n0000\nENDCHAR\nSTARTCHAR U_3D0F\nENCODING 15631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n0FE0\n8AA0\n44C0\n1000\n27C0\nC100\n47C0\n4100\n0FE0\nENDCHAR\nSTARTCHAR U_3D10\nENCODING 15632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n23E0\n1C80\n94E0\n5EA0\n16A0\n3FE0\nD420\n5C20\n4020\n40C0\nENDCHAR\nSTARTCHAR U_3D11\nENCODING 15633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FE0\n0800\n8A40\n4FE0\n1AA0\n2AA0\nCBE0\n4880\n5100\n2200\nENDCHAR\nSTARTCHAR U_3D12\nENCODING 15634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0280\n86C0\n4AA0\n1280\n2480\nCFE0\n4480\n4480\n0880\nENDCHAR\nSTARTCHAR U_3D13\nENCODING 15635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n0920\n8FE0\n4920\n1920\n2FE0\nC000\n4A40\n58A0\n2700\nENDCHAR\nSTARTCHAR U_3D14\nENCODING 15636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2780\n0880\n87C0\n4040\n1FE0\n2040\nC7C0\n4000\n4D40\n17A0\nENDCHAR\nSTARTCHAR U_3D15\nENCODING 15637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2FE0\n0440\n81C0\n4E00\n1100\n2FE0\nC100\n4380\n4540\n0920\nENDCHAR\nSTARTCHAR U_3D16\nENCODING 15638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2FE0\n0440\n87C0\n4000\n17C0\n2440\nC7C0\n4100\n4FE0\n0100\nENDCHAR\nSTARTCHAR U_3D17\nENCODING 15639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2280\n0FE0\n8AA0\n4FE0\n1440\n2FE0\nC440\n4280\n4100\n06C0\nENDCHAR\nSTARTCHAR U_3D18\nENCODING 15640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n0FE0\n8820\n4FE0\n17C0\n2440\nC7C0\n47C0\n4440\n07C0\nENDCHAR\nSTARTCHAR U_3D19\nENCODING 15641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\n0FE0\n8100\n4500\n1960\n2920\nC920\n4D60\n4920\n0FE0\nENDCHAR\nSTARTCHAR U_3D1A\nENCODING 15642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n0FE0\n8100\n43A0\n14A0\n21C0\nC6A0\n41A0\n4680\n0300\nENDCHAR\nSTARTCHAR U_3D1B\nENCODING 15643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E40\n2480\n0AE0\n9FA0\n44A0\n15A0\n2EA0\nC4A0\n4440\n46A0\n0920\nENDCHAR\nSTARTCHAR U_3D1C\nENCODING 15644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FC0\n5000\n1FC0\n9040\n5FC0\n1000\n3FC0\nDB40\n5FC0\n6B40\n2B40\nENDCHAR\nSTARTCHAR U_3D1D\nENCODING 15645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3C20\n10A0\nFEA0\n3820\n5660\n9980\n3460\nC580\n3F00\n1480\n6460\nENDCHAR\nSTARTCHAR U_3D1E\nENCODING 15646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n2620\n1940\n8480\n4BE0\n1A20\n2A20\nCBE0\n4A20\n4A20\n0BE0\nENDCHAR\nSTARTCHAR U_3D1F\nENCODING 15647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2800\n0BE0\n8AA0\n4BE0\n1800\n2BC0\nC840\n57E0\n5080\n2180\nENDCHAR\nSTARTCHAR U_3D20\nENCODING 15648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\n4080\n2100\n9120\n5DE0\n1560\n35A0\n5D60\nD320\n5120\n1FE0\nENDCHAR\nSTARTCHAR U_3D21\nENCODING 15649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2700\n0100\n8FE0\n4380\n1560\n2FC0\nC440\n47C0\n4440\n07C0\nENDCHAR\nSTARTCHAR U_3D22\nENCODING 15650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA480\n5480\n0880\nABE0\n5AA0\n0AA0\n4BE0\n5880\nA880\nA880\nA880\nENDCHAR\nSTARTCHAR U_3D23\nENCODING 15651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\n2BE0\n2880\n83E0\n50A0\n53E0\n2A80\nABE0\n50A0\n5140\n5620\nENDCHAR\nSTARTCHAR U_3D24\nENCODING 15652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2440\n0400\n9FE0\n4440\n0E40\n2DE0\n3440\nC440\n4440\n47E0\nENDCHAR\nSTARTCHAR U_3D25\nENCODING 15653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n25C0\n2480\n85E0\n5520\n55E0\n1520\nB5E0\n5720\n5D20\n4160\nENDCHAR\nSTARTCHAR U_3D26\nENCODING 15654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n1FE0\n9020\n4780\n1480\n2780\nA000\n4FC0\n4840\n4FC0\nENDCHAR\nSTARTCHAR U_3D27\nENCODING 15655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n17C0\n8440\n47C0\n0440\n17C0\n2440\nA7C0\n42A0\n4A60\n49C0\nENDCHAR\nSTARTCHAR U_3D28\nENCODING 15656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F20\n2AC0\n2A00\n8FE0\n4A80\n0BE0\n2E80\nAA80\n4AC0\n5320\n5620\nENDCHAR\nSTARTCHAR U_3D29\nENCODING 15657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4520\n2A40\n0520\n87C0\n4440\n1FE0\n2920\nAFE0\n4800\n4820\n47E0\nENDCHAR\nSTARTCHAR U_3D2A\nENCODING 15658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27C0\n0540\n86C0\n4540\n1640\n27C0\n2100\nCFE0\n4540\n5920\nENDCHAR\nSTARTCHAR U_3D2B\nENCODING 15659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n2AA0\n1FA0\n8AC0\n5EA0\n08A0\n2EA0\n2AA0\nDAE0\n4E80\n4A80\nENDCHAR\nSTARTCHAR U_3D2C\nENCODING 15660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2E40\n0A40\n8FE0\n4A40\n0F40\n2AC0\nBE40\n4A40\n5240\n46C0\nENDCHAR\nSTARTCHAR U_3D2D\nENCODING 15661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n2AA0\n8440\n4FE0\n1440\n27C0\n2440\nC7C0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_3D2E\nENCODING 15662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n0FE0\n8AA0\n4BE0\n1A20\n2BE0\n2A20\nCBE0\n5220\n5260\nENDCHAR\nSTARTCHAR U_3D2F\nENCODING 15663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E80\n2A80\n0AE0\n8E80\n4A60\n0A00\n2EE0\n2AA0\nCAE0\n52A0\n56E0\nENDCHAR\nSTARTCHAR U_3D30\nENCODING 15664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n3280\n1EE0\n8080\n5EA0\n12E0\n3E80\n32E0\nDE80\n52A0\n56E0\nENDCHAR\nSTARTCHAR U_3D31\nENCODING 15665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n14A0\n8840\n5120\n5FE0\n2920\n2540\nC280\n4440\n5820\nENDCHAR\nSTARTCHAR U_3D32\nENCODING 15666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n3D00\n17E0\n9520\n57C0\n1500\n34C0\n3400\nD5C0\n5540\n6A60\nENDCHAR\nSTARTCHAR U_3D33\nENCODING 15667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4940\n2920\n0BE0\n9D40\n4960\n0940\n2960\n2940\nCD60\n52C0\n4D60\nENDCHAR\nSTARTCHAR U_3D34\nENCODING 15668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2AA0\n0CC0\n8940\n4A20\n1FE0\n2880\n4AA0\nCD40\n4A20\n4FE0\nENDCHAR\nSTARTCHAR U_3D35\nENCODING 15669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n2540\n14A0\n9520\n4640\n1BC0\n2000\n2FE0\nCAA0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_3D36\nENCODING 15670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FE0\n0A20\n8480\n4FE0\n1480\n27C0\nA480\n47C0\n4480\n47E0\nENDCHAR\nSTARTCHAR U_3D37\nENCODING 15671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n3E80\n1480\n9FE0\n54A0\n1C80\n3540\n3540\nDD40\n4540\n4660\nENDCHAR\nSTARTCHAR U_3D38\nENCODING 15672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n0EE0\n8AA0\n4EE0\n1920\n2920\n2AA0\nCC60\n4820\n4860\nENDCHAR\nSTARTCHAR U_3D39\nENCODING 15673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n22A0\n09C0\n8480\n43E0\n1C80\n25C0\n26A0\nC480\n4680\n59E0\nENDCHAR\nSTARTCHAR U_3D3A\nENCODING 15674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n2900\n0FE0\nA100\n5540\n0540\n2BA0\nA900\n5280\n5440\n5820\nENDCHAR\nSTARTCHAR U_3D3B\nENCODING 15675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n3E40\n0040\n9FE0\n5240\n1340\n3EC0\n3240\nCC40\n5E40\n40C0\nENDCHAR\nSTARTCHAR U_3D3C\nENCODING 15676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n3FE0\n1020\n87C0\n4900\n1BC0\n2A40\n2BC0\nCA40\n4A40\n4BC0\nENDCHAR\nSTARTCHAR U_3D3D\nENCODING 15677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2F40\n0580\n9FE0\n4540\n1920\n2200\n2540\nCC20\n5440\n53C0\nENDCHAR\nSTARTCHAR U_3D3E\nENCODING 15678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2E80\n0480\n9FE0\n5120\n0EA0\n24A0\n2740\nDC40\n44A0\n4D20\nENDCHAR\nSTARTCHAR U_3D3F\nENCODING 15679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n3D00\n0BC0\n8A40\n4BC0\n0A40\n2BC0\n2A40\nCBC0\n5A40\n4420\nENDCHAR\nSTARTCHAR U_3D40\nENCODING 15680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2480\n00E0\n9F00\n48E0\n0F40\n2A40\n2BE0\nCA40\n52C0\n5720\nENDCHAR\nSTARTCHAR U_3D41\nENCODING 15681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2FE0\n2480\n8100\n4FE0\n0440\n2FE0\n2540\nC540\n4540\n4960\nENDCHAR\nSTARTCHAR U_3D42\nENCODING 15682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n2A40\n8A40\n4FE0\n0A40\n2A40\n2BC0\nC800\n5540\n5AA0\nENDCHAR\nSTARTCHAR U_3D43\nENCODING 15683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n2880\n0BE0\nBE20\n6A80\n2AA0\n3EC0\n2880\nCA80\n4EA0\n7AE0\nENDCHAR\nSTARTCHAR U_3D44\nENCODING 15684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n20A0\n3FE0\n8A80\n4E80\n00A0\n2EA0\nA440\n5F40\n4AE0\n5320\nENDCHAR\nSTARTCHAR U_3D45\nENCODING 15685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n2640\n1920\n87C0\n4080\n17C0\n2440\n27C0\nC440\n47C0\n4820\nENDCHAR\nSTARTCHAR U_3D46\nENCODING 15686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n3D40\n15E0\n9640\n5440\n1FE0\n3400\n35E0\nD520\n5D20\n41E0\nENDCHAR\nSTARTCHAR U_3D47\nENCODING 15687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n46A0\n2CA0\n04A0\n8FE0\n44A0\n04A0\n2EE0\n2AA0\nCAA0\n4EA0\n4AE0\nENDCHAR\nSTARTCHAR U_3D48\nENCODING 15688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5240\n2A40\n0240\nAFE0\n5540\n0540\n2DE0\nAAA0\n52A0\n55A0\n58E0\nENDCHAR\nSTARTCHAR U_3D49\nENCODING 15689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\n2A80\n0280\nA7E0\n5280\n06C0\n2BC0\n2AA0\nD280\n5280\n5280\nENDCHAR\nSTARTCHAR U_3D4A\nENCODING 15690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n07C0\n8440\n5FE0\n0A00\n2FE0\n2AA0\nCEA0\n5A40\n43A0\nENDCHAR\nSTARTCHAR U_3D4B\nENCODING 15691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\n2FE0\n8440\n47C0\n5440\n27C0\n2440\nC7C0\n4440\n4820\nENDCHAR\nSTARTCHAR U_3D4C\nENCODING 15692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n2A40\n13E0\n8640\n5AE0\n0AA0\n2AE0\nAAA0\n4AE0\n4AA0\n4CE0\nENDCHAR\nSTARTCHAR U_3D4D\nENCODING 15693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n2EE0\n8AA0\n4EE0\n1920\n2920\n2A60\nCEA0\n49A0\n4860\nENDCHAR\nSTARTCHAR U_3D4E\nENCODING 15694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n2EE0\n8AA0\n4EE0\n4BA0\n2AA0\n2BA0\nCAA0\n4BA0\n4CE0\nENDCHAR\nSTARTCHAR U_3D4F\nENCODING 15695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2FE0\n2480\n8100\n4FE0\n1440\n2AA0\n2100\nCFE0\n4100\n4100\nENDCHAR\nSTARTCHAR U_3D50\nENCODING 15696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n3A00\n1480\n9FE0\n5560\n1540\n3F40\n3440\nD440\n54A0\n6920\nENDCHAR\nSTARTCHAR U_3D51\nENCODING 15697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n3EE0\n0AA0\n8AE0\n5200\n07C0\n2440\nA7C0\n4440\n47C0\n5820\nENDCHAR\nSTARTCHAR U_3D52\nENCODING 15698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n22A0\n8FE0\n4A80\n4FE0\n24A0\n2FC0\nC540\n47C0\n5820\nENDCHAR\nSTARTCHAR U_3D53\nENCODING 15699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n1020\n8780\n4580\n0680\n3FE0\nA200\n4BC0\n4E00\n51E0\nENDCHAR\nSTARTCHAR U_3D54\nENCODING 15700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0280\n8D60\n47C0\n0140\n2FE0\n2640\nDBC0\n4240\n43C0\nENDCHAR\nSTARTCHAR U_3D55\nENCODING 15701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2FC0\n0900\n9240\n5FE0\n0300\n2480\n3A60\nCB40\n52A0\n4600\nENDCHAR\nSTARTCHAR U_3D56\nENCODING 15702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n3EE0\n0AA0\n92E0\n4480\n0FC0\n2440\n3FE0\nC540\n5920\n4300\nENDCHAR\nSTARTCHAR U_3D57\nENCODING 15703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n67E0\n1480\n07C0\n1480\nE7E0\n4AA0\n0AE0\n0440\nF680\n2580\nCC60\nENDCHAR\nSTARTCHAR U_3D58\nENCODING 15704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nEF20\n73C0\nAD40\n6320\n0000\n2120\nEFC0\n7340\nAD20\n6300\nENDCHAR\nSTARTCHAR U_3D59\nENCODING 15705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n87C0\n4440\n17C0\n2280\n2FE0\nC440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_3D5A\nENCODING 15706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2AA0\n0380\n8C60\n4380\n0440\n2BA0\nA100\n47C0\n4540\n4FE0\nENDCHAR\nSTARTCHAR U_3D5B\nENCODING 15707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2FE0\n0100\n87C0\n4100\n1FE0\n2540\n2FE0\nC440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_3D5C\nENCODING 15708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n2FE0\n0200\nA7E0\n5420\n0560\n25E0\n2CA0\nD7E0\n54A0\n5460\nENDCHAR\nSTARTCHAR U_3D5D\nENCODING 15709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n3FE0\n0520\n8CC0\n5640\n1420\n2FE0\nAAA0\n4EE0\n4BA0\n4860\nENDCHAR\nSTARTCHAR U_3D5E\nENCODING 15710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E80\n2480\n1EA0\n85C0\n4E80\n1540\n2620\nA140\n4520\n5440\n53C0\nENDCHAR\nSTARTCHAR U_3D5F\nENCODING 15711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9480\n7580\n5FE0\n10A0\nAEA0\n61A0\n2E40\n6A40\nAA40\nB3A0\nA120\nENDCHAR\nSTARTCHAR U_3D60\nENCODING 15712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n14A0\n8840\n4FC0\n1840\n2FC0\nCD40\n57C0\n5920\n2FE0\nENDCHAR\nSTARTCHAR U_3D61\nENCODING 15713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\n2200\n1FE0\n9AA0\n4780\n0A40\n27C0\nAD40\n5740\n44A0\n43E0\nENDCHAR\nSTARTCHAR U_3D62\nENCODING 15714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\n0FE0\n9560\n4380\n0540\n27C0\n2540\nC7C0\n4540\n47C0\nENDCHAR\nSTARTCHAR U_3D63\nENCODING 15715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E80\n3280\n1E80\n93E0\n5EA0\n1080\n3E80\n2A80\nF680\n5B40\n4420\nENDCHAR\nSTARTCHAR U_3D64\nENCODING 15716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n0660\n8AA0\n4100\n1FE0\n2540\n2BA0\nC100\n4280\n4C60\nENDCHAR\nSTARTCHAR U_3D65\nENCODING 15717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n3FE0\n14A0\n86C0\n5520\n1640\n3BC0\n2000\nCFE0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_3D66\nENCODING 15718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n37E0\n0940\n8BE0\n4520\n1DE0\n2920\nA9E0\n4920\n4E00\n51E0\nENDCHAR\nSTARTCHAR U_3D67\nENCODING 15719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n0280\n87C0\n4540\n0640\n27E0\n2CA0\nD560\n47A0\n40C0\nENDCHAR\nSTARTCHAR U_3D68\nENCODING 15720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4FE0\n7A40\n47E0\n7880\nCFE0\n7880\n04C0\n7700\n1580\nEC60\nENDCHAR\nSTARTCHAR U_3D69\nENCODING 15721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2FE0\n0480\n8A80\n5FE0\n0A80\n2FC0\n2100\nDFE0\n4540\n5920\nENDCHAR\nSTARTCHAR U_3D6A\nENCODING 15722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2FE0\n0100\n87C0\n4100\n0FE0\n2100\n2DE0\nC2A0\n4CC0\n4320\nENDCHAR\nSTARTCHAR U_3D6B\nENCODING 15723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2080\n0FE0\n8140\n4FE0\n0240\n26C0\n27C0\nC540\n4640\n47C0\nENDCHAR\nSTARTCHAR U_3D6C\nENCODING 15724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FC0\n3540\n1560\n9DA0\n56A0\n5520\n1EE0\n3400\nD5E0\n56A0\n6BE0\nENDCHAR\nSTARTCHAR U_3D6D\nENCODING 15725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n0140\n8FE0\n4640\n0BC0\n2240\n23C0\nC040\n4AA0\n4AA0\nENDCHAR\nSTARTCHAR U_3D6E\nENCODING 15726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FE0\n0480\n8FC0\n54A0\n0780\n2100\n2FC0\nC940\n5FE0\n4100\nENDCHAR\nSTARTCHAR U_3D6F\nENCODING 15727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n0FC0\n8A40\n4F40\n0940\n2F40\n2940\nCFC0\n5AA0\n6920\nENDCHAR\nSTARTCHAR U_3D70\nENCODING 15728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4CC0\n3440\n1FC0\n9440\n5FC0\n1140\n1540\n3FE0\nC880\n5040\n6020\nENDCHAR\nSTARTCHAR U_3D71\nENCODING 15729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F40\n2A40\n1F40\n95E0\n5F40\n0140\n2EC0\n2040\nDF40\n4E40\n55C0\nENDCHAR\nSTARTCHAR U_3D72\nENCODING 15730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n3FE0\n0AA0\n9FE0\n4AA0\n1FE0\n2840\n2FE0\nD540\n47E0\n5840\nENDCHAR\nSTARTCHAR U_3D73\nENCODING 15731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n2B60\n86C0\n4B40\n5DE0\n2680\nA100\n4640\n4180\n4E00\nENDCHAR\nSTARTCHAR U_3D74\nENCODING 15732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n20A0\n2FE0\n8880\n7F80\n4AA0\n3FA0\n2940\nAF40\n5AE0\n5720\nENDCHAR\nSTARTCHAR U_3D75\nENCODING 15733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F00\n2AE0\n0EA0\n8A40\n5EA0\n03A0\n2D00\nA360\n4D80\n4340\n4D20\nENDCHAR\nSTARTCHAR U_3D76\nENCODING 15734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44C0\n2EA0\n0480\n9FE0\n4A80\n1F80\n2AA0\nAFA0\n4AC0\n4FE0\n4320\nENDCHAR\nSTARTCHAR U_3D77\nENCODING 15735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2440\nF3E0\n9120\n68C0\nF5E0\n2240\nF3E0\n2C40\n4440\n8440\nENDCHAR\nSTARTCHAR U_3D78\nENCODING 15736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\n0440\n9BA0\n4000\n07C0\n2540\nAFE0\n4AA0\n4FE0\n4AA0\nENDCHAR\nSTARTCHAR U_3D79\nENCODING 15737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4940\n2BE0\n0940\n8BE0\n6A60\n2AA0\n2BE0\nBE80\n63E0\n4140\n4620\nENDCHAR\nSTARTCHAR U_3D7A\nENCODING 15738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n3540\n2200\n8FC0\n4940\n4FC0\n2940\nAFC0\n4500\n5FE0\n4100\nENDCHAR\nSTARTCHAR U_3D7B\nENCODING 15739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nB980\n6AE0\n2AA0\n3BE0\nAAA0\n6BE0\n3880\n6BE0\nA920\nA8C0\nDF20\nENDCHAR\nSTARTCHAR U_3D7C\nENCODING 15740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\n0440\n86C0\n4440\n07C0\n2400\n2FE0\nD2A0\n4AA0\n4840\nENDCHAR\nSTARTCHAR U_3D7D\nENCODING 15741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2540\n07C0\n8540\n47C0\n0000\n2FE0\n2AA0\nCFE0\n4AA0\n4FE0\nENDCHAR\nSTARTCHAR U_3D7E\nENCODING 15742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n3EA0\n04E0\n8EA0\n44E0\n1FA0\n2AA0\n2EE0\nCA40\n4EC0\n4B60\nENDCHAR\nSTARTCHAR U_3D7F\nENCODING 15743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27C0\n0540\n8640\n47C0\n0440\n2EE0\n2AA0\nCEE0\n4AA0\n4EE0\nENDCHAR\nSTARTCHAR U_3D80\nENCODING 15744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n35A0\n1760\n95A0\n5E60\n1480\n1F40\n34A0\nD740\n5480\n6F00\nENDCHAR\nSTARTCHAR U_3D81\nENCODING 15745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n46E0\n3880\n2BE0\n9D40\n45E0\n1F40\n2560\nB500\n4DE0\n46A0\n4D20\nENDCHAR\nSTARTCHAR U_3D82\nENCODING 15746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5140\n2FE0\n0140\nA7E0\n5080\n03E0\n2AA0\nABE0\n52A0\n53E0\n5420\nENDCHAR\nSTARTCHAR U_3D83\nENCODING 15747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5400\n2C00\n07E0\nAD40\n5540\n0FE0\n2540\nAFE0\n5000\n56A0\n5AA0\nENDCHAR\nSTARTCHAR U_3D84\nENCODING 15748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DE0\n3520\n1DE0\n9520\n5FE0\n12A0\n1DA0\n36A0\nD4A0\n57A0\n5060\nENDCHAR\nSTARTCHAR U_3D85\nENCODING 15749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4CC0\n2AC0\n0D40\n8AC0\n5FE0\n1020\n2780\n2100\nCFC0\n4100\n4300\nENDCHAR\nSTARTCHAR U_3D86\nENCODING 15750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n3DE0\n00A0\n9CC0\n43E0\n1C80\n21E0\n3F20\nD5E0\n5520\n5DE0\nENDCHAR\nSTARTCHAR U_3D87\nENCODING 15751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4940\n2BE0\n0940\nBFE0\n4880\n1BE0\n1EA0\n2BE0\nCAA0\n4BE0\n4C20\nENDCHAR\nSTARTCHAR U_3D88\nENCODING 15752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2BA0\n06C0\n8540\n4FE0\n0920\n27C0\n2540\nC7C0\n4120\n4FE0\nENDCHAR\nSTARTCHAR U_3D89\nENCODING 15753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4680\n3BC0\n1540\n8BC0\n5D40\n0BC0\n3F00\n29E0\nDE20\n4DA0\n5240\nENDCHAR\nSTARTCHAR U_3D8A\nENCODING 15754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n3E40\n14E0\n94A0\n5EE0\n12A0\n1EE0\n34A0\nD4E0\n5EA0\n4120\nENDCHAR\nSTARTCHAR U_3D8B\nENCODING 15755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A00\n3B40\n0AC0\nBFE0\n4A40\n36E0\n0D40\nB540\n4DE0\n5480\n4860\nENDCHAR\nSTARTCHAR U_3D8C\nENCODING 15756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5D40\n3680\n17E0\n9D40\n56A0\n1FE0\n1540\n3560\nDF60\n4540\n4640\nENDCHAR\nSTARTCHAR U_3D8D\nENCODING 15757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n48A0\n2EA0\n0A40\n9FE0\n5540\n5FE0\n1540\n3FE0\nC040\n5540\n5540\nENDCHAR\nSTARTCHAR U_3D8E\nENCODING 15758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n32A0\n0BE0\n8800\n47E0\n3A20\n0BE0\n2AA0\nCF40\n5A20\n67E0\nENDCHAR\nSTARTCHAR U_3D8F\nENCODING 15759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DE0\n36A0\n17E0\n9880\n55E0\n1420\n17E0\n3820\nD3E0\n56A0\n59E0\nENDCHAR\nSTARTCHAR U_3D90\nENCODING 15760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n9FE0\n5540\n15E0\n9F40\n55E0\n1540\n55E0\n9200\nAD40\n2BA0\nENDCHAR\nSTARTCHAR U_3D91\nENCODING 15761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2A80\n31E0\n8F20\n4040\n5F40\n1540\nBF40\n4A40\n4AA0\n5520\nENDCHAR\nSTARTCHAR U_3D92\nENCODING 15762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n32A0\n1EE0\n92A0\n5FE0\n1520\n37A0\nB520\n57A0\n52A0\n5560\nENDCHAR\nSTARTCHAR U_3D93\nENCODING 15763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3FE0\n04A0\nAFE0\n6A80\n3FA0\n0960\nBF40\n6A40\n57A0\n5120\nENDCHAR\nSTARTCHAR U_3D94\nENCODING 15764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FC0\n3540\n1FC0\n8000\n7FE0\n2AA0\n3FE0\nA200\n5FE0\n4480\n7860\nENDCHAR\nSTARTCHAR U_3D95\nENCODING 15765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2EE0\n1540\n9EE0\n52A0\n1FE0\n34A0\nB7A0\n54A0\n57A0\n5060\nENDCHAR\nSTARTCHAR U_3D96\nENCODING 15766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n29E0\n1320\nB4C0\n5520\n17E0\n12A0\nB3E0\n5080\n57E0\n52A0\nENDCHAR\nSTARTCHAR U_3D97\nENCODING 15767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D40\nA7E0\n7D40\n57E0\n7DC0\n0AA0\n3F80\n2480\n7FC0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_3D98\nENCODING 15768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2EE0\n1540\n8FE0\n4280\n0FE0\n2AA0\nAFE0\n4540\n4FE0\n4100\nENDCHAR\nSTARTCHAR U_3D99\nENCODING 15769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAA00\n5B40\n0AC0\n1FE0\nA440\n5BE0\n0640\nBBE0\n5600\n5B00\n54E0\nENDCHAR\nSTARTCHAR U_3D9A\nENCODING 15770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2500\n1FE0\n9520\n5FE0\n0AA0\n3FE0\nAAA0\n55E0\n5EA0\n4560\nENDCHAR\nSTARTCHAR U_3D9B\nENCODING 15771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9200\n4BE0\n3C00\n9360\n55A0\n1F60\n14A0\nB7E0\n5540\n5A20\n6420\nENDCHAR\nSTARTCHAR U_3D9C\nENCODING 15772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBFA0\n64A0\n3FA0\nB2A0\n7FA0\n2AA0\n2AA0\nBFA0\n6AA0\n4A20\n5460\nENDCHAR\nSTARTCHAR U_3D9D\nENCODING 15773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n2FE0\n0A80\nAFE0\n5A80\n0BE0\n0A80\nAFE0\n5520\n5460\n5BC0\nENDCHAR\nSTARTCHAR U_3D9E\nENCODING 15774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2940\n1FE0\n8AA0\n4EE0\n4480\n2FC0\nA480\n5FE0\n4C80\n5660\nENDCHAR\nSTARTCHAR U_3D9F\nENCODING 15775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2540\n0FE0\n8AA0\n4FE0\n1AA0\n2FE0\nA280\n47C0\n4920\n4300\nENDCHAR\nSTARTCHAR U_3DA0\nENCODING 15776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n3560\n1FE0\n9440\n5EE0\n1440\n3FE0\nD6A0\n6BE0\n4240\n0C40\nENDCHAR\nSTARTCHAR U_3DA1\nENCODING 15777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2480\n2480\n2D80\n3680\n2480\n2A80\n51A0\n4060\n8020\nENDCHAR\nSTARTCHAR U_3DA2\nENCODING 15778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\n0A00\n1100\nE8E0\n0800\n7F00\n0900\n1100\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_3DA3\nENCODING 15779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\n0400\nFFE0\n0400\n0400\n2480\n1500\n0A00\n1180\nE060\nENDCHAR\nSTARTCHAR U_3DA4\nENCODING 15780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nA9E0\nAA20\nB320\n24C0\n2040\n5080\n4900\n8200\n0C00\nENDCHAR\nSTARTCHAR U_3DA5\nENCODING 15781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n2100\nA900\nB100\n2FE0\n2100\n5100\n4900\n8100\n0100\nENDCHAR\nSTARTCHAR U_3DA6\nENCODING 15782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\nA980\nA880\nB7E0\n20A0\n2080\n3080\n4880\n8080\n0180\nENDCHAR\nSTARTCHAR U_3DA7\nENCODING 15783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n27E0\nAD20\nB520\nA520\n26A0\n5460\n4C20\n8420\n0460\nENDCHAR\nSTARTCHAR U_3DA8\nENCODING 15784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n7FC0\n0400\n0D00\n1480\nE460\n0400\n0400\n5240\n4920\n8920\nENDCHAR\nSTARTCHAR U_3DA9\nENCODING 15785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n27E0\nAD20\nB100\n2100\n2100\n5280\n4A80\n84A0\n18E0\nENDCHAR\nSTARTCHAR U_3DAA\nENCODING 15786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0C00\n3580\nC460\n0400\n0400\n2480\n2500\n4A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_3DAB\nENCODING 15787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n4480\n2F00\n30C0\nC020\n2480\n2480\n2B00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_3DAC\nENCODING 15788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n27E0\nA900\nA900\n37C0\n2100\n5380\n4D40\n8920\n0100\nENDCHAR\nSTARTCHAR U_3DAD\nENCODING 15789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2480\n2480\nA9E0\nBAA0\n26A0\n28A0\n5AA0\n4EA0\n8120\n0660\nENDCHAR\nSTARTCHAR U_3DAE\nENCODING 15790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n7FC0\n4440\n4A40\n5140\n0400\n2440\n2A80\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_3DAF\nENCODING 15791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2600\n28E0\n2AA0\nAAA0\nBAA0\nAAA0\n2AA0\n2EE0\n5A80\n8A80\n0480\nENDCHAR\nSTARTCHAR U_3DB0\nENCODING 15792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n1240\n1240\n57E0\n5A40\n9240\n13C0\n2A40\n2A40\n4240\n83C0\nENDCHAR\nSTARTCHAR U_3DB1\nENCODING 15793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2900\n2900\nB7E0\nA100\n2100\n2380\n3540\n4BA0\n4100\n8100\nENDCHAR\nSTARTCHAR U_3DB2\nENCODING 15794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n27E0\n2520\n2D20\nB7E0\nA520\nA7E0\n2520\n2520\n5520\n8D20\n8460\nENDCHAR\nSTARTCHAR U_3DB3\nENCODING 15795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n0480\nFFE0\n0480\n3F80\n0400\nFFE0\n2480\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_3DB4\nENCODING 15796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n21E0\nAF20\nA8C0\nB180\n2600\n21E0\n5320\n48C0\n8180\n0E00\nENDCHAR\nSTARTCHAR U_3DB5\nENCODING 15797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\n2700\n6100\nA100\n2FE0\n2100\n2100\n27C0\n0000\n4920\n8920\nENDCHAR\nSTARTCHAR U_3DB6\nENCODING 15798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2FE0\nAA20\nB200\nA520\n2D40\n2480\n5480\n8D40\n0620\nENDCHAR\nSTARTCHAR U_3DB7\nENCODING 15799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n27E0\nA820\nB7A0\nA4A0\n27A0\n54A0\n4FA0\n8020\n00C0\nENDCHAR\nSTARTCHAR U_3DB8\nENCODING 15800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\n2240\nAA40\nB240\n24C0\n2880\n5FE0\n4AA0\n8AA0\n1760\nENDCHAR\nSTARTCHAR U_3DB9\nENCODING 15801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n2100\n6900\nBFE0\n2100\n2F20\n23C0\n5540\n9920\n0300\nENDCHAR\nSTARTCHAR U_3DBA\nENCODING 15802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n2100\nAFE0\nAA40\nA420\n2BE0\n5240\n4A40\n83C0\n0240\nENDCHAR\nSTARTCHAR U_3DBB\nENCODING 15803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n3100\n1F00\nE4E0\n3F80\n0400\n1F00\n0400\n7FC0\n9520\n9120\nENDCHAR\nSTARTCHAR U_3DBC\nENCODING 15804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2440\nAFC0\nB400\nA7C0\n2900\n2100\n5FE0\n4A80\n8440\n0820\nENDCHAR\nSTARTCHAR U_3DBD\nENCODING 15805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nAC40\nB7C0\nA100\n2FE0\n2920\n5AA0\n4C60\n8820\n0860\nENDCHAR\nSTARTCHAR U_3DBE\nENCODING 15806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n7FC0\n0000\nFFE0\n2480\n1500\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_3DBF\nENCODING 15807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nAFE0\nB820\nA7C0\n2080\n57E0\n4900\n8100\n0300\nENDCHAR\nSTARTCHAR U_3DC0\nENCODING 15808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5540\n3B80\n2A80\n4440\n7F80\n0880\nFF80\n0880\n08A0\n0860\nENDCHAR\nSTARTCHAR U_3DC1\nENCODING 15809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2240\n2180\nAFE0\nB520\nA7E0\n2520\n57E0\n4D20\n8520\n0560\nENDCHAR\nSTARTCHAR U_3DC2\nENCODING 15810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF800\nA3E0\nF920\n8940\nF880\nA140\nFE20\n2480\n1500\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_3DC3\nENCODING 15811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\n1B00\nE0E0\n1F80\n1000\n1F80\n1000\nFFE0\n1280\n19C0\nENDCHAR\nSTARTCHAR U_3DC4\nENCODING 15812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nA7C0\nAD40\nB7C0\n2100\n2FE0\n5380\n4D40\n8920\n0100\nENDCHAR\nSTARTCHAR U_3DC5\nENCODING 15813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC00\n5BC0\n6A40\n5980\n6980\nFE60\n0800\n2480\n1B00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_3DC6\nENCODING 15814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2440\nAFC0\nB400\nA7E0\n2420\n57E0\n4100\n8FE0\n0100\nENDCHAR\nSTARTCHAR U_3DC7\nENCODING 15815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7A00\nCFE0\n3200\n2280\nE2A0\n3BC0\nCA80\n3480\n2540\nCA20\nENDCHAR\nSTARTCHAR U_3DC8\nENCODING 15816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2440\nA920\nB7C0\nA540\n27C0\n5540\n4FC0\n8120\n00E0\nENDCHAR\nSTARTCHAR U_3DC9\nENCODING 15817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n4440\n7C40\n43E0\n5C40\n4140\n7EC0\n6A40\n5C40\n9440\nE2C0\nENDCHAR\nSTARTCHAR U_3DCA\nENCODING 15818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\nFFE0\n1100\n3B80\n5540\n9920\n1100\n1240\n8920\n8920\nENDCHAR\nSTARTCHAR U_3DCB\nENCODING 15819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n22A0\n21C0\nA940\nAA20\nB480\n2480\n52A0\n49C0\n8240\n0C20\nENDCHAR\nSTARTCHAR U_3DCC\nENCODING 15820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\nABC0\nB040\n2FE0\n2920\n27C0\n5540\n4D40\n85C0\n0100\nENDCHAR\nSTARTCHAR U_3DCD\nENCODING 15821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2440\nAFE0\nB000\nAFE0\n2AA0\n2FE0\n5AA0\n8AA0\n0860\nENDCHAR\nSTARTCHAR U_3DCE\nENCODING 15822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nAC40\nB7C0\nA200\n27E0\n5920\n4AA0\n87E0\n0040\nENDCHAR\nSTARTCHAR U_3DCF\nENCODING 15823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n13C0\nFC80\n37E0\n5880\n9480\n0000\n2480\n2480\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_3DD0\nENCODING 15824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2C60\n2820\nBEE0\n6820\n2FE0\n2100\n2FE0\n5100\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_3DD1\nENCODING 15825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n4A80\n3F80\nCA60\n7FC0\n4A40\n7FC0\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3DD2\nENCODING 15826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n27C0\nAD40\nB7C0\nA100\n2FE0\n5960\n49E0\n8F20\n0860\nENDCHAR\nSTARTCHAR U_3DD3\nENCODING 15827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n27E0\nAAA0\nAFA0\nB2E0\n2540\n5120\n4AA0\n8A20\n09E0\nENDCHAR\nSTARTCHAR U_3DD4\nENCODING 15828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2720\nAD20\nAAC0\nB000\n25E0\n2520\n55E0\n4D20\n8520\n05E0\nENDCHAR\nSTARTCHAR U_3DD5\nENCODING 15829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2880\nFEA0\n29C0\nFE80\nAA80\nCE80\n8280\nFF40\n8340\nFE20\nENDCHAR\nSTARTCHAR U_3DD6\nENCODING 15830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8920\nF920\n8A20\nFC40\n2000\nABE0\nB220\n5220\n4BE0\n8220\nENDCHAR\nSTARTCHAR U_3DD7\nENCODING 15831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DE0\n5520\n5D20\n51E0\n5D00\n5520\n9DE0\n2440\n2480\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_3DD8\nENCODING 15832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\n2000\nAFE0\nB420\nA7E0\n2100\n57E0\n4B80\n8540\n0920\nENDCHAR\nSTARTCHAR U_3DD9\nENCODING 15833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nAFE0\nB000\nAE20\n2AA0\n2EA0\n5AA0\n4EA0\n8A20\n0A60\nENDCHAR\nSTARTCHAR U_3DDA\nENCODING 15834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\n2000\nABC0\nB240\nA7E0\n2420\n53C0\n4880\n8080\n0180\nENDCHAR\nSTARTCHAR U_3DDB\nENCODING 15835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n2440\n27C0\n6100\nAFE0\n2380\n2540\n2920\n0000\n4A40\n8920\nENDCHAR\nSTARTCHAR U_3DDC\nENCODING 15836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2280\nAAC0\nB2A0\nA580\n2100\n57E0\n4980\n8240\n0C20\nENDCHAR\nSTARTCHAR U_3DDD\nENCODING 15837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2AA0\nB440\n6920\n2140\n2120\n2FE0\n5280\n4440\n9820\nENDCHAR\nSTARTCHAR U_3DDE\nENCODING 15838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\n25C0\nAD40\nB5C0\nA540\n25C0\n5440\n4FE0\n8480\n0980\nENDCHAR\nSTARTCHAR U_3DDF\nENCODING 15839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2900\n25E0\nB120\n6DE0\n2500\n29E0\n2520\n25E0\n5600\n89E0\nENDCHAR\nSTARTCHAR U_3DE0\nENCODING 15840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1F00\n1100\n64C0\n1F00\nF0E0\n2080\n3BC0\nEA80\n13E0\nE080\nENDCHAR\nSTARTCHAR U_3DE1\nENCODING 15841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9400\nF7C0\n9440\nF7C0\n9400\nF7E0\n4440\n2E80\n3180\nC060\nENDCHAR\nSTARTCHAR U_3DE2\nENCODING 15842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nFFE0\n0800\n3F80\n1000\nFFE0\n4400\nBFC0\n2480\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_3DE3\nENCODING 15843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nA100\nB7C0\nA100\n2FE0\n2500\n5FC0\n5100\n8FE0\n0100\nENDCHAR\nSTARTCHAR U_3DE4\nENCODING 15844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n2240\nFC20\n8BC0\n7240\n2240\nA980\n7180\n5240\n8C20\nENDCHAR\nSTARTCHAR U_3DE5\nENCODING 15845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAFE0\nA840\n7080\n50A0\n8FC0\n0180\nAAC0\nAAA0\n74A0\n5880\n8FE0\nENDCHAR\nSTARTCHAR U_3DE6\nENCODING 15846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n4CA0\n7AA0\n4AC0\n7880\n4940\nFA20\n0C20\n5240\n4920\nC920\nENDCHAR\nSTARTCHAR U_3DE7\nENCODING 15847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2900\nABE0\nBA20\nABE0\n2A20\n2BE0\n5880\n4AC0\n8CA0\n1180\nENDCHAR\nSTARTCHAR U_3DE8\nENCODING 15848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2FE0\n2440\nA380\nBD60\nA7C0\n2100\n27C0\n5100\n4FE0\n8100\nENDCHAR\nSTARTCHAR U_3DE9\nENCODING 15849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n5420\n5EE0\n5280\n5E80\n54A0\n9EE0\n4440\n2E80\n3180\nC060\nENDCHAR\nSTARTCHAR U_3DEA\nENCODING 15850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\nAC80\nB7E0\nA480\n27E0\n2480\n27C0\n5260\n4A20\n8C60\nENDCHAR\nSTARTCHAR U_3DEB\nENCODING 15851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n2460\nFBC0\nAA40\nF980\n8660\n2480\n1500\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_3DEC\nENCODING 15852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n2280\nAFC0\nB4C0\nA540\n27C0\n2100\n5FE0\n5280\n8C60\nENDCHAR\nSTARTCHAR U_3DED\nENCODING 15853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2C40\nF380\n2D60\n27C0\nF100\n0FE0\n2480\n1B00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_3DEE\nENCODING 15854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n2280\nAFE0\nBAA0\nAFE0\n2AA0\n2FE0\n5540\n4E40\n87C0\nENDCHAR\nSTARTCHAR U_3DEF\nENCODING 15855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7100\n57E0\n8A00\n27E0\n2540\nFBA0\n2100\n3FE0\nC100\nENDCHAR\nSTARTCHAR U_3DF0\nENCODING 15856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nAAC0\nB940\nAFC0\n2100\n2FE0\n2A20\n5AA0\n4FA0\n88A0\nENDCHAR\nSTARTCHAR U_3DF1\nENCODING 15857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n4880\nFBE0\n4880\n7FE0\n4900\n7A20\n4BE0\n0000\n4920\n8920\nENDCHAR\nSTARTCHAR U_3DF2\nENCODING 15858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\n2280\nAF80\nB2E0\nAFA0\n2AA0\n2FA0\n2AA0\n5FA0\n42A0\n8F60\nENDCHAR\nSTARTCHAR U_3DF3\nENCODING 15859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4A80\n57E0\n7C80\n57C0\n5480\n57E0\n5240\n4A80\n8500\n38E0\nENDCHAR\nSTARTCHAR U_3DF4\nENCODING 15860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4CC0\n7B80\n4880\n7FE0\n5DC0\n6AA0\n4200\n9240\n8D80\n38E0\nENDCHAR\nSTARTCHAR U_3DF5\nENCODING 15861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n27C0\nAD40\nB7C0\nA100\n27C0\n5100\n4FE0\n8AA0\n0AA0\nENDCHAR\nSTARTCHAR U_3DF6\nENCODING 15862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n2FE0\n6480\nBFE0\n2540\n2FC0\n3540\n27C0\n2540\n4920\n8920\nENDCHAR\nSTARTCHAR U_3DF7\nENCODING 15863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2EE0\nA880\nBEE0\nA240\n2FE0\n3240\n4FE0\n8240\n0C20\nENDCHAR\nSTARTCHAR U_3DF8\nENCODING 15864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n2640\nAFE0\nB540\nAFE0\n2540\n5FE0\n5100\n8FE0\n0100\nENDCHAR\nSTARTCHAR U_3DF9\nENCODING 15865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n2280\nA9C0\nB100\nA7C0\n2440\n57C0\n5440\n8FE0\n0100\nENDCHAR\nSTARTCHAR U_3DFA\nENCODING 15866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n99E0\n8B40\nDD40\n8880\nFB60\n0400\n4440\n2A80\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_3DFB\nENCODING 15867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n27E0\nAD40\nB540\nAFE0\n2540\n5FE0\n5000\n8AA0\n0AA0\nENDCHAR\nSTARTCHAR U_3DFC\nENCODING 15868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n0A00\n2E80\nEAE0\n2A80\nEEE0\n4440\n2A80\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_3DFD\nENCODING 15869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n2100\nAFC0\nB100\nAFE0\n2540\n5FE0\n5440\n87C0\n0440\nENDCHAR\nSTARTCHAR U_3DFE\nENCODING 15870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2100\n27E0\nAD40\nB580\nA760\n2580\n56A0\n4DC0\n8AA0\n0980\nENDCHAR\nSTARTCHAR U_3DFF\nENCODING 15871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nAC40\nBBA0\nA000\n2EE0\n2AA0\n5EE0\n5440\n8AC0\n1120\nENDCHAR\nSTARTCHAR U_3E00\nENCODING 15872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2280\nAFE0\nBAA0\nABA0\n2860\n5100\n4FC0\n8100\n0FE0\nENDCHAR\nSTARTCHAR U_3E01\nENCODING 15873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n26C0\n2280\n2FE0\nAA80\nB7E0\nA100\n27C0\n5100\n4FE0\n8540\n0920\nENDCHAR\nSTARTCHAR U_3E02\nENCODING 15874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2FE0\n0240\nED80\n2360\n3D00\nC7E0\n4440\n2A80\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_3E03\nENCODING 15875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n5480\n7CE0\n5480\n7C80\n11E0\n7D20\n1120\nFDE0\n5240\n8920\nENDCHAR\nSTARTCHAR U_3E04\nENCODING 15876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2280\nAFE0\nB540\nA920\n2440\n57C0\n4C40\n87C0\n0840\nENDCHAR\nSTARTCHAR U_3E05\nENCODING 15877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2FE0\nAA40\nBEE0\nAAA0\n2EA0\n2AA0\n5EA0\n48E0\n8A80\n0E80\nENDCHAR\nSTARTCHAR U_3E06\nENCODING 15878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n27C0\nA900\nBFE0\nA440\n27C0\n2280\n5EE0\n5280\n8EE0\n0280\nENDCHAR\nSTARTCHAR U_3E07\nENCODING 15879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2EE0\n2440\nAFE0\nB440\nAAA0\n27C0\n5540\n4D40\n87C0\n0820\nENDCHAR\nSTARTCHAR U_3E08\nENCODING 15880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\nFFE0\n5280\n7FE0\n5280\n7FE0\n4400\n2440\n4A80\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_3E09\nENCODING 15881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nBFA0\n6AC0\n3F80\n2480\n5F40\n8420\n2480\n1B00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_3E0A\nENCODING 15882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n22E0\n2F40\nAAE0\nBFA0\nAAE0\n2FA0\n52E0\n57A0\n8AE0\n0320\nENDCHAR\nSTARTCHAR U_3E0B\nENCODING 15883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n3FA0\nEAC0\n57E0\n21C0\nC6A0\n23E0\nAAA0\n73E0\n52A0\n8BE0\nENDCHAR\nSTARTCHAR U_3E0C\nENCODING 15884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n2FE0\nAD60\nB380\nA500\n27E0\n5480\n4FC0\n8480\n07E0\nENDCHAR\nSTARTCHAR U_3E0D\nENCODING 15885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2340\n2260\n2F40\nBAE0\nAF40\nAA40\n2F60\n5940\n4F40\n95A0\n1F20\nENDCHAR\nSTARTCHAR U_3E0E\nENCODING 15886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2240\nABC0\nB240\nAFE0\n2540\n27C0\n5540\n4FE0\n8140\n0140\nENDCHAR\nSTARTCHAR U_3E0F\nENCODING 15887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4880\n7FE0\n5AC0\n6DA0\n4500\n7DE0\n5240\n8F80\nB8E0\nENDCHAR\nSTARTCHAR U_3E10\nENCODING 15888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\nFD40\n2BE0\n7D40\n55E0\n7D40\n11E0\nFD40\n49E0\n5240\n8920\nENDCHAR\nSTARTCHAR U_3E11\nENCODING 15889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n5140\n7FC0\n5540\nFFE0\n9120\n7FC0\n3B80\n5540\n3B80\nE0E0\nENDCHAR\nSTARTCHAR U_3E12\nENCODING 15890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n7880\n2480\n1500\n03C0\n3C00\n0400\nFFE0\n0400\n0400\n3FC0\nENDCHAR\nSTARTCHAR U_3E13\nENCODING 15891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n7880\n4480\n2500\n0000\n7FC0\n4040\n7FC0\n4040\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_3E14\nENCODING 15892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n7C80\n2500\nFFE0\n0800\n1F80\n3480\nD980\n1280\n1480\n1F80\nENDCHAR\nSTARTCHAR U_3E15\nENCODING 15893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1D40\n77E0\n5540\n55E0\n5540\n57E0\n5540\n5480\n5760\n9200\n91E0\nENDCHAR\nSTARTCHAR U_3E16\nENCODING 15894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n4BC0\n4640\n8640\n4BC0\n4A40\n33C0\n3240\n3240\n4A40\n87E0\nENDCHAR\nSTARTCHAR U_3E17\nENCODING 15895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1B00\n71C0\n0E00\n1B00\nE0E0\n3F80\n2080\n3F80\n2A80\n2E80\n2180\nENDCHAR\nSTARTCHAR U_3E18\nENCODING 15896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1B00\n71C0\n0E00\n1100\nE0E0\n3F80\n2A80\nFFE0\n0400\n0400\n0C00\nENDCHAR\nSTARTCHAR U_3E19\nENCODING 15897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1B00\n71C0\n0E00\n1100\nE4E0\n1F80\n0500\nFFE0\n1980\n6A80\n0F80\nENDCHAR\nSTARTCHAR U_3E1A\nENCODING 15898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nCB20\n30C0\n30C0\n4920\n8A20\n0000\nCA20\n3140\n3080\n4940\n8E20\nENDCHAR\nSTARTCHAR U_3E1B\nENCODING 15899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n4BE0\n4920\n7920\n0A20\nFC40\n4BE0\n4A20\n4A20\n8BE0\n0A20\nENDCHAR\nSTARTCHAR U_3E1C\nENCODING 15900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5080\n57E0\n55A0\n7240\n1420\nF3C0\n5080\n5080\n9080\n97E0\nENDCHAR\nSTARTCHAR U_3E1D\nENCODING 15901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5100\n5100\n53E0\n7CA0\n4080\n7880\n4880\n4940\n8A20\n8C20\nENDCHAR\nSTARTCHAR U_3E1E\nENCODING 15902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n5280\n5280\n5280\n7FE0\n4200\n7BC0\n4A40\n4A40\n8A40\n8C40\nENDCHAR\nSTARTCHAR U_3E1F\nENCODING 15903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n5260\n5380\n5220\n7DE0\n4000\n7BE0\n4A20\n4BE0\n8A20\n8BE0\nENDCHAR\nSTARTCHAR U_3E20\nENCODING 15904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n5280\n5AA0\n76C0\n4280\n46C0\n7AA0\n5280\n5280\n54A0\n9860\nENDCHAR\nSTARTCHAR U_3E21\nENCODING 15905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5500\n57C0\n5500\n7900\n47E0\n7100\n5380\n5540\n9920\n9100\nENDCHAR\nSTARTCHAR U_3E22\nENCODING 15906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n53E0\n5140\n7BE0\n4100\n43E0\n7EA0\n4BE0\n4AA0\n8BE0\n82A0\nENDCHAR\nSTARTCHAR U_3E23\nENCODING 15907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1360\n5140\n57E0\n5140\n7BE0\n4080\n7BC0\n4880\n4FE0\n49C0\n86A0\nENDCHAR\nSTARTCHAR U_3E24\nENCODING 15908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8280\n4A40\nEAE0\nAAA0\n4F40\nE8E0\n4E40\nEAE0\n4A40\n4A40\n9240\nENDCHAR\nSTARTCHAR U_3E25\nENCODING 15909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n5280\n57E0\n5220\n7BE0\n4280\n73E0\n56A0\n53E0\n5140\n96E0\nENDCHAR\nSTARTCHAR U_3E26\nENCODING 15910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n2400\n4400\nFFE0\n0400\n4400\n3400\n0E00\n05E0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_3E27\nENCODING 15911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n1440\n57C0\n9440\nFC40\n37C0\n3520\n54C0\n9480\n1440\n3620\nENDCHAR\nSTARTCHAR U_3E28\nENCODING 15912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n5220\n5220\n7E20\n9220\n12E0\n1F20\nF020\n1020\n1020\n1020\nENDCHAR\nSTARTCHAR U_3E29\nENCODING 15913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n53E0\n5080\n7880\n9080\n1FE0\nF080\n1080\n1080\n1080\n1080\nENDCHAR\nSTARTCHAR U_3E2A\nENCODING 15914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1220\n5220\n52A0\n7AA0\n92A0\n12A0\n3AA0\nD2A0\n12A0\n1420\n1820\nENDCHAR\nSTARTCHAR U_3E2B\nENCODING 15915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nA400\nFC00\nA7E0\n2480\n3C80\nE480\n2480\n2880\n2880\nENDCHAR\nSTARTCHAR U_3E2C\nENCODING 15916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nAFE0\nF100\nA7C0\n2540\n3540\nE540\n25C0\n2100\n2100\nENDCHAR\nSTARTCHAR U_3E2D\nENCODING 15917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nA540\nFD40\nA540\n27C0\n3C00\nE400\n2400\n2420\n23E0\nENDCHAR\nSTARTCHAR U_3E2E\nENCODING 15918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\nA240\nFC40\nA420\n23C0\n3940\nE140\n2140\n2240\n24C0\nENDCHAR\nSTARTCHAR U_3E2F\nENCODING 15919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2480\nA280\nFC80\nA280\n20E0\n3F80\nE080\n2080\n2080\n2080\nENDCHAR\nSTARTCHAR U_3E30\nENCODING 15920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5080\n7BE0\n9420\n1200\n1A20\n7240\n9380\n1200\n1220\n13E0\nENDCHAR\nSTARTCHAR U_3E31\nENCODING 15921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n5200\n53E0\n7E80\n92E0\n1FA0\nF2A0\n12E0\n1280\n1220\n11E0\nENDCHAR\nSTARTCHAR U_3E32\nENCODING 15922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\nA7E0\nF900\nA1C0\n2100\n3900\nE1E0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_3E33\nENCODING 15923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nA440\nFA20\nA100\n2000\n3FC0\nE040\n2280\n2100\n2100\nENDCHAR\nSTARTCHAR U_3E34\nENCODING 15924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n1000\n3F80\nD080\n1F80\n2400\n3F80\n4400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_3E35\nENCODING 15925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nA7E0\nF880\nA080\n23E0\n3800\nE3E0\n2220\n2220\n23E0\nENDCHAR\nSTARTCHAR U_3E36\nENCODING 15926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nA420\nFD20\nA7E0\n2520\n3DA0\nE660\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_3E37\nENCODING 15927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n2120\n7120\n2120\nFA40\n2400\n7FC0\n8400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_3E38\nENCODING 15928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nA400\nFC00\nA7E0\n2400\n3DE0\nE520\n2520\n2520\n29E0\nENDCHAR\nSTARTCHAR U_3E39\nENCODING 15929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\nA720\nFD20\nA2C0\n2040\n3FE0\nE240\n2140\n2140\n2040\n20C0\nENDCHAR\nSTARTCHAR U_3E3A\nENCODING 15930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n9540\n4960\n2180\nCE00\n4400\n7FC0\n8400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_3E3B\nENCODING 15931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2240\nA3E0\nFA00\nA3C0\n2480\n3880\nE7E0\n2080\n2140\n2620\nENDCHAR\nSTARTCHAR U_3E3C\nENCODING 15932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2640\nA180\nFE60\nA080\n27E0\n3880\nE3C0\n2080\n27E0\n2080\nENDCHAR\nSTARTCHAR U_3E3D\nENCODING 15933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nA440\nFFC0\nA440\n27C0\n3C40\nE440\n27C0\n2440\n2820\nENDCHAR\nSTARTCHAR U_3E3E\nENCODING 15934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nA120\nFB20\nA520\n2220\n3CC0\nE200\n2140\n2520\n2C40\n2BC0\nENDCHAR\nSTARTCHAR U_3E3F\nENCODING 15935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nA080\nFBC0\nA000\n3FE0\nE420\n23C0\n2240\n2240\n2460\nENDCHAR\nSTARTCHAR U_3E40\nENCODING 15936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n53E0\n7880\n93E0\n1420\n13C0\n1880\n37E0\n5080\n1280\n1180\nENDCHAR\nSTARTCHAR U_3E41\nENCODING 15937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n57E0\n7800\nD3C0\n1240\n1BC0\n3080\n51C0\n12A0\n1480\n1180\nENDCHAR\nSTARTCHAR U_3E42\nENCODING 15938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n9240\nE980\n9240\nFC20\n2400\n3F80\n4400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_3E43\nENCODING 15939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n7BC0\n0A00\n7BC0\n0A00\n7BC0\n2400\n3FC0\n4400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_3E44\nENCODING 15940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nA7C0\nFD40\nA7C0\n2820\n37C0\nE440\n2B80\n2280\n2C60\nENDCHAR\nSTARTCHAR U_3E45\nENCODING 15941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\nA7E0\nFAA0\nAEA0\n23A0\n3D60\nE240\n2120\n2AA0\n2A40\n29C0\nENDCHAR\nSTARTCHAR U_3E46\nENCODING 15942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nA920\nFFC0\nA100\n27C0\n3D40\nE7C0\n2540\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_3E47\nENCODING 15943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nA7C0\nFC40\nA7C0\n3C00\nE7E0\n2D20\n26A0\n27A0\n20C0\nENDCHAR\nSTARTCHAR U_3E48\nENCODING 15944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n79E0\n1340\nFD40\n5880\n9760\n2400\n3FC0\n4400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_3E49\nENCODING 15945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2480\nA5E0\nFD20\nA5E0\n2520\n3DE0\nE480\n25C0\n2AA0\n2980\nENDCHAR\nSTARTCHAR U_3E4A\nENCODING 15946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\nF920\nAA80\n27E0\n3C80\nE7C0\n2480\n27C0\n2480\n27E0\nENDCHAR\nSTARTCHAR U_3E4B\nENCODING 15947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n25E0\nA920\nFAC0\nAB20\n3A40\nEBA0\n2A40\n29A0\n2840\n2980\nENDCHAR\nSTARTCHAR U_3E4C\nENCODING 15948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nA240\nFFE0\nA400\n3D40\nE7E0\n2440\n25E0\n2440\n2BE0\nENDCHAR\nSTARTCHAR U_3E4D\nENCODING 15949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA440\nFFE0\nA920\n2FE0\n3920\nEBA0\n2AA0\n2BA0\n2860\nENDCHAR\nSTARTCHAR U_3E4E\nENCODING 15950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nA540\nFFC0\nA540\n27C0\n3A80\nE7C0\n2480\n2FC0\n2940\n3320\nENDCHAR\nSTARTCHAR U_3E4F\nENCODING 15951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nA7E0\nFA40\nA3C0\n24A0\n3CA0\nE7E0\n2080\n27C0\n2080\n27E0\nENDCHAR\nSTARTCHAR U_3E50\nENCODING 15952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3480\nCB60\n3100\nE5C0\n2700\n24E0\n4400\n7FC0\n8400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_3E51\nENCODING 15953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20A0\nAFE0\nF080\nAE80\n2080\n3F80\nEA80\n2E40\n2A40\n2E60\n3120\nENDCHAR\nSTARTCHAR U_3E52\nENCODING 15954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n26C0\nA280\nFFE0\nA280\n27C0\n3900\nE7C0\n2100\n2FE0\n2240\n2C20\nENDCHAR\nSTARTCHAR U_3E53\nENCODING 15955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nA100\nFFE0\nA240\n3FE0\nE240\n2FE0\n2280\n22A0\n2C60\nENDCHAR\nSTARTCHAR U_3E54\nENCODING 15956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nA540\nF7C0\nA540\n2FE0\n3000\nE7C0\n2540\n27C0\n2540\n2FE0\nENDCHAR\nSTARTCHAR U_3E55\nENCODING 15957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n0200\nFFC0\n5540\n57C0\n9820\n2400\n3FC0\n4400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_3E56\nENCODING 15958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\nA100\nFFE0\nA440\n3FA0\nE320\n2CC0\n23C0\n2CA0\n2300\nENDCHAR\nSTARTCHAR U_3E57\nENCODING 15959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA100\nF7E0\nA120\n3FE0\nE040\n2FE0\n2A40\n2F40\n20C0\nENDCHAR\nSTARTCHAR U_3E58\nENCODING 15960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nAFE0\nFBA0\nA540\n3FE0\nE200\n2FE0\n2AA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_3E59\nENCODING 15961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\nA7C0\nF540\nA920\n2FE0\n3820\nE7C0\n2540\n26C0\n2540\n27C0\nENDCHAR\nSTARTCHAR U_3E5A\nENCODING 15962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\n27C0\nA540\nF920\nAFE0\n3820\nE380\n2280\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_3E5B\nENCODING 15963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nA100\nFBE0\nAAA0\n2FE0\n3A80\nEFE0\n2A40\n3660\n2180\n2660\nENDCHAR\nSTARTCHAR U_3E5C\nENCODING 15964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2940\n2520\nFFE0\n2100\n2100\n2100\n5280\n4A80\n8440\n9820\nENDCHAR\nSTARTCHAR U_3E5D\nENCODING 15965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n91C0\n5680\n2480\n6480\n9480\n37E0\n5480\n9480\n1480\n6560\n2620\nENDCHAR\nSTARTCHAR U_3E5E\nENCODING 15966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n91C0\n5600\n2400\n6400\n97E0\n3480\n5480\n9480\n1480\n6880\n2880\nENDCHAR\nSTARTCHAR U_3E5F\nENCODING 15967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n5100\n27C0\n6140\n9140\n3140\n5FE0\n9100\n1280\n6440\n3820\nENDCHAR\nSTARTCHAR U_3E60\nENCODING 15968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n5100\n2FE0\n2100\n5540\n9540\n37C0\n5540\n9100\n5120\n20E0\nENDCHAR\nSTARTCHAR U_3E61\nENCODING 15969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9200\n5100\n2FE0\n2100\n5200\n9440\n3280\n5100\n9240\n5420\n27E0\nENDCHAR\nSTARTCHAR U_3E62\nENCODING 15970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA800\n4800\n7EE0\nAAA0\n2AA0\n6AA0\nAAA0\n2AA0\n2AA0\nCAE0\n5600\nENDCHAR\nSTARTCHAR U_3E63\nENCODING 15971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9400\n57C0\n2440\n2A80\n5100\n9280\n3D60\n5080\n9200\n5100\n2080\nENDCHAR\nSTARTCHAR U_3E64\nENCODING 15972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n5100\n27C0\n2100\n5100\n9FE0\n3100\n5200\n9280\n6440\n27C0\nENDCHAR\nSTARTCHAR U_3E65\nENCODING 15973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9200\n5100\n2FE0\n2100\n5100\n9100\n37C0\n5100\n9100\n5100\n2FE0\nENDCHAR\nSTARTCHAR U_3E66\nENCODING 15974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9000\n57E0\n2120\n5120\n9220\n3460\n5000\n97E0\n1420\n5420\n27E0\nENDCHAR\nSTARTCHAR U_3E67\nENCODING 15975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n5100\n27C0\n6540\n9540\n3540\n5FE0\n9100\n1280\n6440\n3820\nENDCHAR\nSTARTCHAR U_3E68\nENCODING 15976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n5100\n2100\n67E0\n9520\n3520\n57E0\n9520\n1520\n67E0\n2420\nENDCHAR\nSTARTCHAR U_3E69\nENCODING 15977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97C0\n5440\n2280\n6380\n9C60\n3100\n5100\n97C0\n1100\n5100\n2FE0\nENDCHAR\nSTARTCHAR U_3E6A\nENCODING 15978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAEE0\n6AA0\n4AA0\nAAA0\n2AA0\n7FE0\n6AA0\nAAA0\n2AA0\nAAA0\n5760\nENDCHAR\nSTARTCHAR U_3E6B\nENCODING 15979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n57E0\n2100\n67C0\n9140\n37C0\n5500\n97E0\n1120\n62C0\n2C60\nENDCHAR\nSTARTCHAR U_3E6C\nENCODING 15980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9080\n5080\n27E0\n5080\n97E0\n34A0\n57E0\n9280\n1100\nA280\n4C60\nENDCHAR\nSTARTCHAR U_3E6D\nENCODING 15981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n5100\n27C0\n5540\n97C0\n3540\n57C0\n9140\n1180\n52A0\n2C60\nENDCHAR\nSTARTCHAR U_3E6E\nENCODING 15982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5100\n2200\n57C0\n9440\n3440\n57C0\n9440\n1440\n57C0\n2440\nENDCHAR\nSTARTCHAR U_3E6F\nENCODING 15983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9280\n5280\n2480\n5DE0\n9480\n3480\n55C0\n96A0\n1480\n6480\n2480\nENDCHAR\nSTARTCHAR U_3E70\nENCODING 15984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n5540\n2540\n6100\n9FE0\n3280\n5280\n9280\n1280\n64A0\n4860\nENDCHAR\nSTARTCHAR U_3E71\nENCODING 15985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97C0\n5440\n2440\n67C0\n9100\n3500\n55C0\n9500\n1500\n6F00\n30E0\nENDCHAR\nSTARTCHAR U_3E72\nENCODING 15986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9200\n57C0\n2240\n6FE0\n9100\n37C0\n5880\n97E0\n1080\n6080\n2180\nENDCHAR\nSTARTCHAR U_3E73\nENCODING 15987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97C0\n5100\n27C0\n6140\n9240\n37E0\n5000\n97C0\n1440\n67C0\n2440\nENDCHAR\nSTARTCHAR U_3E74\nENCODING 15988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97C0\n5100\n27C0\n6540\n97C0\n3540\n57C0\n9500\n1300\n6280\n4C60\nENDCHAR\nSTARTCHAR U_3E75\nENCODING 15989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97E0\n52A0\n2540\n6540\n92A0\n3000\n57E0\n9080\n1080\n6080\n47E0\nENDCHAR\nSTARTCHAR U_3E76\nENCODING 15990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA000\n6060\n3DC0\n6440\nA840\n3DE0\n6440\nA440\n37E0\nAC00\n53E0\nENDCHAR\nSTARTCHAR U_3E77\nENCODING 15991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nCC80\n30C0\nCCA0\n23E0\nFC80\n5080\nFC80\n5480\n5540\n5940\n1620\nENDCHAR\nSTARTCHAR U_3E78\nENCODING 15992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9200\n57C0\n2440\n67C0\n9440\n37C0\n5280\n9280\n1280\n64A0\n2860\nENDCHAR\nSTARTCHAR U_3E79\nENCODING 15993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n57E0\n2500\n67C0\n9540\n37E0\n5540\n97C0\n1500\n5A80\n3460\nENDCHAR\nSTARTCHAR U_3E7A\nENCODING 15994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n5120\n2F40\n6380\n9540\n1920\n37C0\n5440\n97C0\n5440\n27C0\nENDCHAR\nSTARTCHAR U_3E7B\nENCODING 15995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n91C0\n5700\n2100\n2FE0\n5540\n9920\n3240\n57E0\n9240\n5180\n2660\nENDCHAR\nSTARTCHAR U_3E7C\nENCODING 15996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9400\n5400\n27E0\n6920\n9560\n37E0\n5320\n95A0\n1960\n5120\n20C0\nENDCHAR\nSTARTCHAR U_3E7D\nENCODING 15997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9140\n57E0\n2140\n61A0\n9660\n3100\n5140\n97E0\n1140\n51A0\n2660\nENDCHAR\nSTARTCHAR U_3E7E\nENCODING 15998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9440\n5740\n2560\n6D40\n9240\n35C0\n5860\n97C0\n1440\n57C0\n2440\nENDCHAR\nSTARTCHAR U_3E7F\nENCODING 15999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9200\n53C0\n2200\n67C0\n9440\n37C0\n5440\n97C0\n1100\n5FE0\n2100\nENDCHAR\nSTARTCHAR U_3E80\nENCODING 16000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9400\n57E0\n2AA0\n6AA0\n92A0\n3540\n5200\n9120\n1520\n6C40\n2BC0\nENDCHAR\nSTARTCHAR U_3E81\nENCODING 16001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n92A0\n5540\n2540\n62A0\n92A0\n3400\n57E0\n9560\n14A0\n5560\n27E0\nENDCHAR\nSTARTCHAR U_3E82\nENCODING 16002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n90C0\n50A0\n27E0\n6480\n9780\n34A0\n57A0\n94C0\n1780\n68E0\n4B20\nENDCHAR\nSTARTCHAR U_3E83\nENCODING 16003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9280\n5FE0\n2280\n6400\n97E0\n3820\n57A0\n94A0\n17A0\n5020\n20C0\nENDCHAR\nSTARTCHAR U_3E84\nENCODING 16004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA300\n6480\n2840\n77A0\nA000\n2E20\n6AA0\nAEA0\n2AA0\nAE20\n4A60\nENDCHAR\nSTARTCHAR U_3E85\nENCODING 16005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9200\n5380\n2480\n6FE0\n9500\n35C0\n5680\n97E0\n1480\n6940\n2E20\nENDCHAR\nSTARTCHAR U_3E86\nENCODING 16006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9440\n5240\n2EE0\n6440\n96A0\n3520\n57C0\n9540\n1540\n6280\n2C60\nENDCHAR\nSTARTCHAR U_3E87\nENCODING 16007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9080\n5EC0\n34A0\n5480\n9FE0\n3280\n5E80\n9480\n1540\n7F40\n2220\nENDCHAR\nSTARTCHAR U_3E88\nENCODING 16008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n5540\n27C0\n6100\n9FE0\n3100\n57C0\n9540\n17C0\n6120\n4FE0\nENDCHAR\nSTARTCHAR U_3E89\nENCODING 16009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBC0\n2240\nFA40\n8C20\n73C0\n2A40\nFA40\n2180\n5180\n8E60\nENDCHAR\nSTARTCHAR U_3E8A\nENCODING 16010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9440\n5280\n2FE0\n6100\n97C0\n3100\n5FE0\n9240\n1520\n6C40\n4BC0\nENDCHAR\nSTARTCHAR U_3E8B\nENCODING 16011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9280\n5440\n29A0\n6240\n97C0\n1000\n3FE0\n55A0\n9360\n5DA0\n2360\nENDCHAR\nSTARTCHAR U_3E8C\nENCODING 16012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9240\n57E0\n2280\n67E0\n92A0\n3FE0\n52A0\n97E0\n16C0\n5AA0\n2280\nENDCHAR\nSTARTCHAR U_3E8D\nENCODING 16013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n5FE0\n2820\n6780\n9400\n37C0\n5480\n9480\n1FE0\n6440\n2820\nENDCHAR\nSTARTCHAR U_3E8E\nENCODING 16014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n57E0\n2540\n67E0\n9540\n37C0\n5540\n97C0\n1540\nAFC0\n4940\nENDCHAR\nSTARTCHAR U_3E8F\nENCODING 16015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n57C0\n2540\n6FE0\n9540\n37C0\n5540\n9FE0\n1440\n6380\n2C60\nENDCHAR\nSTARTCHAR U_3E90\nENCODING 16016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA540\n6A80\n4540\nA7C0\n2540\n67C0\nA540\n27C0\nA100\nCFE0\n8540\nENDCHAR\nSTARTCHAR U_3E91\nENCODING 16017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9240\n57E0\n2520\n5EE0\n9380\n34C0\n5B20\n9080\n1340\n6080\n2700\nENDCHAR\nSTARTCHAR U_3E92\nENCODING 16018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n55A0\n2360\n6DA0\n9100\n3280\n5D60\n9280\n1340\nA080\n4700\nENDCHAR\nSTARTCHAR U_3E93\nENCODING 16019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n57E0\n2100\n67C0\n9100\n3FE0\n5440\n97C0\n1440\nA7C0\n4820\nENDCHAR\nSTARTCHAR U_3E94\nENCODING 16020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97E0\n5540\n2380\n6480\n97C0\n3440\n57E0\n94A0\n16A0\n6A20\n4840\nENDCHAR\nSTARTCHAR U_3E95\nENCODING 16021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n90E0\n5F40\n2540\n6FE0\n9540\n3920\n57C0\n9540\n17C0\n6540\n27C0\nENDCHAR\nSTARTCHAR U_3E96\nENCODING 16022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA680\n6280\n5FE0\nAAA0\n2EA0\n6AA0\nAE40\n2A40\n3FA0\nA2A0\n4320\nENDCHAR\nSTARTCHAR U_3E97\nENCODING 16023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8EE0\n5AA0\n2FE0\n6540\n97C0\n3540\n57C0\n9100\n1FE0\n5100\n2100\nENDCHAR\nSTARTCHAR U_3E98\nENCODING 16024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9280\n57E0\n2C80\n27C0\n5480\n97C0\n3480\n57E0\n9000\n5AA0\n2AA0\nENDCHAR\nSTARTCHAR U_3E99\nENCODING 16025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n5FE0\n2820\n67C0\n9540\n3FE0\n5540\n97C0\n1540\n66C0\n4C60\nENDCHAR\nSTARTCHAR U_3E9A\nENCODING 16026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8080\n53E0\n2880\n63E0\nBD40\n2BE0\n6880\nABE0\n2880\nAC80\n53E0\nENDCHAR\nSTARTCHAR U_3E9B\nENCODING 16027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97C0\n5480\n27C0\n6480\n97E0\n3AA0\n50C0\n9240\n1FE0\n5240\n2440\nENDCHAR\nSTARTCHAR U_3E9C\nENCODING 16028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8280\n5FE0\n2AA0\n6FE0\nAAA0\n2FC0\n6800\nAFE0\n2AA0\nAA40\n5320\nENDCHAR\nSTARTCHAR U_3E9D\nENCODING 16029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8F40\n5A40\n2F60\n6940\nAFA0\n2A20\n6F00\nA000\n2FE0\nAAA0\n5FE0\nENDCHAR\nSTARTCHAR U_3E9E\nENCODING 16030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5660\n2BA0\n6E60\nABA0\n2CE0\n6AA0\nBFE0\n2440\nA820\n5020\nENDCHAR\nSTARTCHAR U_3E9F\nENCODING 16031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97E0\n55A0\n2360\n65A0\n9520\n3C80\n57E0\n9480\n17E0\n5480\n27E0\nENDCHAR\nSTARTCHAR U_3EA0\nENCODING 16032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n5FE0\n34A0\n6860\nA600\n3CE0\n6BC0\nAAA0\n2AA0\nAEE0\n42A0\nENDCHAR\nSTARTCHAR U_3EA1\nENCODING 16033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97E0\n54A0\n27C0\n6540\n97E0\n3540\n57E0\n9440\n1560\n6940\n2BE0\nENDCHAR\nSTARTCHAR U_3EA2\nENCODING 16034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97C0\n5100\n2FE0\n6D60\n9780\n3540\n5FE0\n9480\n17C0\n5480\n27E0\nENDCHAR\nSTARTCHAR U_3EA3\nENCODING 16035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n96C0\n54A0\n3E80\n55E0\n9E80\n30A0\n5EA0\n92C0\n1E80\n6B60\n3E20\nENDCHAR\nSTARTCHAR U_3EA4\nENCODING 16036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8AC0\n55A0\n3FE0\n6A80\nBB80\n2AA0\n7BA0\nAAA0\n3BC0\nAA60\n5FA0\nENDCHAR\nSTARTCHAR U_3EA5\nENCODING 16037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9380\n5480\n27C0\n6440\n97C0\n34A0\n5FE0\n9540\n17C0\n62A0\n4CE0\nENDCHAR\nSTARTCHAR U_3EA6\nENCODING 16038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9D40\n5540\n36A0\n7FE0\n9540\n3EA0\n57E0\n9540\n1F60\nB540\n4640\nENDCHAR\nSTARTCHAR U_3EA7\nENCODING 16039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8EE0\n5AA0\n2FE0\n5200\n97C0\n3540\n5FE0\n9440\n1EE0\n6AA0\n4EE0\nENDCHAR\nSTARTCHAR U_3EA8\nENCODING 16040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n2100\n2100\n2200\nF200\n2200\n2400\n3C40\nE4E0\n0720\nENDCHAR\nSTARTCHAR U_3EA9\nENCODING 16041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC20\n1220\n1220\n1220\n7A20\n1260\n12A0\n1320\n1C20\nE020\n0020\nENDCHAR\nSTARTCHAR U_3EAA\nENCODING 16042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n2100\n2100\n2180\nF940\n2120\n2100\n3900\nE100\n0100\nENDCHAR\nSTARTCHAR U_3EAB\nENCODING 16043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0020\nFC20\n1020\n1120\n1120\n7D20\n1120\n1120\n1C20\nE020\n0060\nENDCHAR\nSTARTCHAR U_3EAC\nENCODING 16044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nF480\n4480\n4480\n4680\nF580\n4480\n44A0\n74A0\nC8A0\n10E0\nENDCHAR\nSTARTCHAR U_3EAD\nENCODING 16045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2040\n2080\n2080\nF880\n27E0\n2080\n2080\n3880\nE080\n0180\nENDCHAR\nSTARTCHAR U_3EAE\nENCODING 16046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2000\n2000\n27E0\nF100\n2200\n23C0\n2040\n3840\nE040\n0180\nENDCHAR\nSTARTCHAR U_3EAF\nENCODING 16047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n3F80\n0400\n0400\nFFE0\n0400\n7FC0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_3EB0\nENCODING 16048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\nF880\n2080\n23E0\n22A0\n72A0\n22A0\n2AA0\n32A0\nC080\n0080\nENDCHAR\nSTARTCHAR U_3EB1\nENCODING 16049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n4480\nC5C0\n4840\n4B40\n5080\n7FC0\n0400\n3F80\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_3EB2\nENCODING 16050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF240\n4240\n4240\nF240\n4FC0\n4240\n5240\n6240\n8240\n0FE0\nENDCHAR\nSTARTCHAR U_3EB3\nENCODING 16051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n41E0\n4100\nF100\n47C0\n4440\n5280\n6100\n82C0\n0C20\nENDCHAR\nSTARTCHAR U_3EB4\nENCODING 16052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n0140\nF900\n27E0\n2100\nF900\n2100\n2280\n3A80\nC440\n0820\nENDCHAR\nSTARTCHAR U_3EB5\nENCODING 16053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0200\nF7E0\n4420\n4940\nF100\n4100\n4280\n7280\nC440\n1820\nENDCHAR\nSTARTCHAR U_3EB6\nENCODING 16054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n0280\nF180\n4480\n4280\nF080\n47E0\n4080\n7080\nC080\n0080\nENDCHAR\nSTARTCHAR U_3EB7\nENCODING 16055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n0120\nF7E0\n4100\n4100\nF380\n4540\n4920\n7100\nC100\n0100\nENDCHAR\nSTARTCHAR U_3EB8\nENCODING 16056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1780\n2480\nE680\n2580\n24A0\n2860\n7FC0\n0400\n7FC0\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_3EB9\nENCODING 16057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFA40\n2420\n27E0\nFA40\n2240\n27E0\n2240\n3A40\nC240\n0440\nENDCHAR\nSTARTCHAR U_3EBA\nENCODING 16058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF420\n4420\n47E0\nF420\n4420\n47E0\n4420\n7420\nC7E0\n0420\nENDCHAR\nSTARTCHAR U_3EBB\nENCODING 16059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n4FE0\n4100\n47E0\nF520\n4520\n4520\n7520\nC560\n0100\nENDCHAR\nSTARTCHAR U_3EBC\nENCODING 16060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF120\n4140\n4100\n4500\nF5C0\n4500\n4500\n7700\nC980\n1060\nENDCHAR\nSTARTCHAR U_3EBD\nENCODING 16061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF100\n4100\n4300\n4580\nF940\n4120\n4100\n7100\nC000\n0FE0\nENDCHAR\nSTARTCHAR U_3EBE\nENCODING 16062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF820\n4820\n4BA0\n4AA0\nFAA0\n4BA0\n4820\n7820\nC820\n0860\nENDCHAR\nSTARTCHAR U_3EBF\nENCODING 16063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF900\n4900\n4BC0\n4A40\nFA40\n4A40\n4BC0\n7900\nC900\n0FE0\nENDCHAR\nSTARTCHAR U_3EC0\nENCODING 16064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nF7C0\n4540\n47C0\nF540\n47C0\n4100\n7500\nC200\n0DE0\nENDCHAR\nSTARTCHAR U_3EC1\nENCODING 16065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF820\n2820\n2BA0\nFAA0\n2AA0\n2AA0\n2BA0\n3820\nC820\n0FE0\nENDCHAR\nSTARTCHAR U_3EC2\nENCODING 16066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0420\nF240\n27E0\n2240\nF240\n2FE0\n2240\n2240\n3240\nC440\n0840\nENDCHAR\nSTARTCHAR U_3EC3\nENCODING 16067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n7FC0\n7FC0\n4A40\n7FC0\n0000\n7FC0\n0400\n3F80\n0500\nFFE0\nENDCHAR\nSTARTCHAR U_3EC4\nENCODING 16068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00E0\nF700\n2000\n27E0\nF080\n2280\n22E0\n2280\n3680\nC580\n0860\nENDCHAR\nSTARTCHAR U_3EC5\nENCODING 16069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0200\nF300\n4480\n4860\nF780\n4000\n4FC0\n7200\nC480\n0F40\nENDCHAR\nSTARTCHAR U_3EC6\nENCODING 16070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0240\nF420\n27E0\n2000\nF7E0\n2420\n27E0\n3420\nC7E0\n0460\nENDCHAR\nSTARTCHAR U_3EC7\nENCODING 16071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n2280\n2C60\nF7C0\n2100\n2100\n27C0\n3100\nC100\n0FE0\nENDCHAR\nSTARTCHAR U_3EC8\nENCODING 16072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00E0\nF700\n2400\n27E0\n2400\nF400\n25E0\n2520\n3520\nC520\n09E0\nENDCHAR\nSTARTCHAR U_3EC9\nENCODING 16073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF500\n25C0\n2500\n2FE0\nF100\n2520\n2540\n3180\nC100\n0E00\nENDCHAR\nSTARTCHAR U_3ECA\nENCODING 16074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF380\n2480\n2FE0\n2920\nF920\n2FE0\n2300\n3300\nC520\n19E0\nENDCHAR\nSTARTCHAR U_3ECB\nENCODING 16075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n2FE0\n2100\n2FE0\nF920\n2FE0\n2300\n3580\nC940\n1120\nENDCHAR\nSTARTCHAR U_3ECC\nENCODING 16076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF280\n2440\n2FE0\nF100\n2100\n2FE0\n2100\n3540\nC920\n0300\nENDCHAR\nSTARTCHAR U_3ECD\nENCODING 16077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n27C0\n2000\nF7C0\n2100\n2FE0\n2100\n3280\nC440\n0820\nENDCHAR\nSTARTCHAR U_3ECE\nENCODING 16078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n75C0\n2480\n75C0\n2480\n35C0\n4A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_3ECF\nENCODING 16079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF040\n27C0\n2040\nF7C0\n2100\n2520\n2940\n3280\nC440\n0820\nENDCHAR\nSTARTCHAR U_3ED0\nENCODING 16080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF240\n27E0\n2280\nF440\n2A20\n23C0\n2440\n3280\nC100\n0EE0\nENDCHAR\nSTARTCHAR U_3ED1\nENCODING 16081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF100\n2FE0\n2380\nF540\n2920\n27C0\n2080\n3FE0\nC100\n0300\nENDCHAR\nSTARTCHAR U_3ED2\nENCODING 16082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF8A0\n2B20\n2920\nFFE0\n2920\n2BA0\n2D60\n3920\nCFE0\n0820\nENDCHAR\nSTARTCHAR U_3ED3\nENCODING 16083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\nEAE0\n4AA0\n4EA0\nEAA0\n4E40\n4A40\n4A40\n6E40\nD2A0\n0320\nENDCHAR\nSTARTCHAR U_3ED4\nENCODING 16084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF100\n2FE0\n2100\nF540\n2FE0\n2540\n2100\n3FE0\nC100\n07C0\nENDCHAR\nSTARTCHAR U_3ED5\nENCODING 16085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF420\n27E0\n2480\nF6A0\n26A0\n27E0\n2480\n36A0\nC6A0\n0BE0\nENDCHAR\nSTARTCHAR U_3ED6\nENCODING 16086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n2140\n2FE0\nF140\n27C0\n2100\n2540\n3380\nC540\n0B20\nENDCHAR\nSTARTCHAR U_3ED7\nENCODING 16087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nF1E0\n1100\n71C0\nF1E0\n1100\n7FC0\n0400\n3F80\n0500\nFFE0\nENDCHAR\nSTARTCHAR U_3ED8\nENCODING 16088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2820\n2100\nFFE0\n2920\n2FE0\n2920\n3FE0\nC100\n0100\nENDCHAR\nSTARTCHAR U_3ED9\nENCODING 16089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2240\n27E0\nF000\n27C0\n2440\n27C0\n3440\nC7C0\n0440\nENDCHAR\nSTARTCHAR U_3EDA\nENCODING 16090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nFAA0\n2AA0\n2EE0\nFAA0\n2AA0\n2EE0\n2AA0\n3AA0\nCAA0\n1320\nENDCHAR\nSTARTCHAR U_3EDB\nENCODING 16091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n27C0\n2440\nF7C0\n2400\n27E0\n2AA0\n34A0\nC920\n02C0\nENDCHAR\nSTARTCHAR U_3EDC\nENCODING 16092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nF240\n24C0\n2B20\nF100\n2100\n25C0\n2500\n3500\nCB00\n10E0\nENDCHAR\nSTARTCHAR U_3EDD\nENCODING 16093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0220\nFFA0\n2260\n2FE0\nFAE0\n2AE0\n2FE0\n2260\n3760\nCAA0\n1260\nENDCHAR\nSTARTCHAR U_3EDE\nENCODING 16094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2420\n27E0\nF400\n27E0\n25A0\n25A0\n37E0\nCDA0\n1420\nENDCHAR\nSTARTCHAR U_3EDF\nENCODING 16095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2200\n25C0\nF880\n27E0\n2240\n23C0\n3240\nC3C0\n0240\nENDCHAR\nSTARTCHAR U_3EE0\nENCODING 16096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n03E0\nFA20\n2140\n22A0\nF8C0\n23E0\n2080\nF940\n0220\n0420\nENDCHAR\nSTARTCHAR U_3EE1\nENCODING 16097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\n0FE0\nE540\n45C0\n4400\nE7E0\n4100\n4FE0\n6100\n8540\n0920\nENDCHAR\nSTARTCHAR U_3EE2\nENCODING 16098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n0EE0\nE500\n4500\n4680\nEBE0\n4AA0\n4AA0\nEA80\n12A0\n06E0\nENDCHAR\nSTARTCHAR U_3EE3\nENCODING 16099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nF7E0\n2240\n23C0\nF240\n23C0\n2240\n2FE0\n3540\nC620\n07E0\nENDCHAR\nSTARTCHAR U_3EE4\nENCODING 16100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nF7E0\n2240\n2100\nF3E0\n2420\n2BA0\n22A0\n33A0\nC0A0\n0040\nENDCHAR\nSTARTCHAR U_3EE5\nENCODING 16101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nF280\n2FE0\n2280\nFFE0\n2AA0\n2CE0\n2820\n3FE0\nC820\n0FE0\nENDCHAR\nSTARTCHAR U_3EE6\nENCODING 16102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF920\n2FE0\n2920\nFFE0\n2100\n2FE0\n29A0\n39E0\nCF20\n0860\nENDCHAR\nSTARTCHAR U_3EE7\nENCODING 16103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nF740\n25E0\n2D40\nF3E0\n2640\n2140\n2FE0\n3380\nC540\n0920\nENDCHAR\nSTARTCHAR U_3EE8\nENCODING 16104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA2A0\nFD40\n8A80\nF940\nA220\nFFC0\n0400\n3F80\n0500\nFFE0\nENDCHAR\nSTARTCHAR U_3EE9\nENCODING 16105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nE500\n5FE0\n4500\nEFC0\n4540\n5FE0\n4540\n6FC0\n8D80\n1560\nENDCHAR\nSTARTCHAR U_3EEA\nENCODING 16106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nF7E0\n2C80\n27E0\nF7E0\n2480\n2FE0\n2280\n32E0\nC420\n0860\nENDCHAR\nSTARTCHAR U_3EEB\nENCODING 16107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE920\n4FE0\n4920\nEFE0\n4540\n5FE0\n4540\n6FE0\n87C0\n0100\nENDCHAR\nSTARTCHAR U_3EEC\nENCODING 16108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF100\n2FE0\n2BA0\nF540\n27C0\n2FE0\n2200\n37C0\nC040\n01C0\nENDCHAR\nSTARTCHAR U_3EED\nENCODING 16109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\n4100\n4AA0\nE540\n4AA0\n47C0\n4100\n6FE0\n8100\n0100\nENDCHAR\nSTARTCHAR U_3EEE\nENCODING 16110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nEFE0\n4920\n56C0\nEA40\n47A0\n5800\n4FE0\n6500\n8940\n1120\nENDCHAR\nSTARTCHAR U_3EEF\nENCODING 16111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\nE100\n5FE0\n5420\nFFC0\n5400\n53C0\n5540\n7FE0\n9100\n2300\nENDCHAR\nSTARTCHAR U_3EF0\nENCODING 16112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nEEE0\n4440\n4EE0\nE440\n4CE0\n4780\n4040\n6FE0\nC040\n07C0\nENDCHAR\nSTARTCHAR U_3EF1\nENCODING 16113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE9C0\n4340\n5CC0\nE920\n4A80\n4BE0\n4880\n6BE0\n8C80\n13E0\nENDCHAR\nSTARTCHAR U_3EF2\nENCODING 16114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE7C0\n4D60\n47C0\nE100\n47C0\n4540\n4FE0\n6480\n8380\n0E40\nENDCHAR\nSTARTCHAR U_3EF3\nENCODING 16115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nEFE0\n4480\n4E20\nE4A0\n5EA0\n44A0\n4EA0\n6D20\n9420\n0460\nENDCHAR\nSTARTCHAR U_3EF4\nENCODING 16116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE440\n47C0\n4440\n4FE0\nEAA0\n4FE0\n47C0\n6440\n8380\n0C60\nENDCHAR\nSTARTCHAR U_3EF5\nENCODING 16117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE820\n4FE0\n4840\nEFE0\n4880\n4FE0\n4A40\n6FE0\n8A40\n16C0\nENDCHAR\nSTARTCHAR U_3EF6\nENCODING 16118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n0FE0\nF540\n4FE0\n4240\nFFE0\n4240\n4FC0\n7200\nCFE0\n0200\nENDCHAR\nSTARTCHAR U_3EF7\nENCODING 16119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n1FE0\nE480\n5FE0\n56A0\nF6A0\n56A0\n45C0\n6EA0\n95A0\n0480\nENDCHAR\nSTARTCHAR U_3EF8\nENCODING 16120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\n1540\nF540\n5FE0\n4CC0\nF560\n4FC0\n4840\n7FC0\nC840\n0FC0\nENDCHAR\nSTARTCHAR U_3EF9\nENCODING 16121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2140\n3A80\n6DC0\nBAA0\n0100\n7FC0\n0400\n3F80\n0500\nFFE0\nENDCHAR\nSTARTCHAR U_3EFA\nENCODING 16122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5DC0\n4880\n7FE0\n5DC0\n6AA0\n5FC0\n4200\n5FC0\n4280\nBFE0\nENDCHAR\nSTARTCHAR U_3EFB\nENCODING 16123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n1F80\nE080\n4EE0\n4BA0\nEEA0\n42A0\n4440\n7F40\nC4A0\n0D20\nENDCHAR\nSTARTCHAR U_3EFC\nENCODING 16124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n0280\nEFE0\n4AA0\n4FE0\nE440\n47C0\n4440\n6FE0\nC100\n0100\nENDCHAR\nSTARTCHAR U_3EFD\nENCODING 16125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n0FE0\nE900\n5FC0\n4900\nEFE0\n4000\n4EE0\nEBA0\n0820\n0860\nENDCHAR\nSTARTCHAR U_3EFE\nENCODING 16126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1280\n7FE0\n2BC0\n1280\nFFE0\n0400\n3FC0\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_3EFF\nENCODING 16127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n0AA0\nEFE0\n4400\n4FE0\nF220\n4FA0\n4AA0\nEFA0\n02A0\n0FE0\nENDCHAR\nSTARTCHAR U_3F00\nENCODING 16128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n0BC0\nE100\n47E0\n5A80\nEFE0\n4900\n4FC0\n6900\nD500\n23E0\nENDCHAR\nSTARTCHAR U_3F01\nENCODING 16129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nF7E0\n2100\n27C0\n2100\nF7E0\n22A0\n2FE0\n32A0\nCF40\n04A0\nENDCHAR\nSTARTCHAR U_3F02\nENCODING 16130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n36C0\n4440\n77C0\n4540\nFFE0\n8020\n3F80\n0400\n1F80\n0500\nFFE0\nENDCHAR\nSTARTCHAR U_3F03\nENCODING 16131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n02A0\nF540\n22A0\n27E0\n26A0\nF520\n27E0\n2540\n37C0\nE560\n07A0\nENDCHAR\nSTARTCHAR U_3F04\nENCODING 16132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nFFE0\n2540\n2FE0\n2140\nFFE0\n2A80\n2FA0\n3AC0\nCFE0\n0120\nENDCHAR\nSTARTCHAR U_3F05\nENCODING 16133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2A40\n2FE0\n2A40\nFFE0\n2AA0\n2BE0\n3AA0\nCBE0\n1420\nENDCHAR\nSTARTCHAR U_3F06\nENCODING 16134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0AA0\nF7C0\n2540\n2920\n2FE0\nF820\n27C0\n2100\n37C0\nC140\n0FE0\nENDCHAR\nSTARTCHAR U_3F07\nENCODING 16135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n04A0\nF7E0\n2280\n2FE0\n2480\nF7E0\n2480\n27E0\n3660\nC5A0\n0420\nENDCHAR\nSTARTCHAR U_3F08\nENCODING 16136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nFAA0\n2FE0\n2540\n29E0\nFF40\n25E0\n2940\n3FE0\nD540\n15E0\nENDCHAR\nSTARTCHAR U_3F09\nENCODING 16137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C80\n7880\n5BE0\n56A0\n5480\n5480\n55A0\n56E0\n6A00\nB900\n80E0\nENDCHAR\nSTARTCHAR U_3F0A\nENCODING 16138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2740\nFD40\n2540\nAD40\nAD40\nFD40\nA540\n2EC0\n3BA0\n1020\nENDCHAR\nSTARTCHAR U_3F0B\nENCODING 16139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40E0\n4740\nFD40\n4540\n4540\nF540\n9540\n9540\n96C0\nF7A0\n9820\nENDCHAR\nSTARTCHAR U_3F0C\nENCODING 16140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78E0\nA740\nB540\nB540\nB540\nAD40\nAD40\nA540\nD6A0\nFBA0\n8820\nENDCHAR\nSTARTCHAR U_3F0D\nENCODING 16141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\nFF40\n2540\n7540\n2540\nFD40\n2540\n7540\n6EA0\nABA0\n2820\nENDCHAR\nSTARTCHAR U_3F0E\nENCODING 16142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n7480\n57E0\n5540\n5760\n5540\n5480\n5540\n6E20\nBB00\n80E0\nENDCHAR\nSTARTCHAR U_3F0F\nENCODING 16143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n38E0\nCF40\nB540\n5540\n5540\nFD40\n5540\nD540\n36A0\n4BA0\n8820\nENDCHAR\nSTARTCHAR U_3F10\nENCODING 16144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nFFC0\n8D40\nFD40\n8540\n8540\nFD40\nA940\nFAA0\nABA0\nA820\nENDCHAR\nSTARTCHAR U_3F11\nENCODING 16145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\nFF40\n1540\nFD40\nD540\nBD40\nFD40\n3540\n5EA0\n97A0\n1820\nENDCHAR\nSTARTCHAR U_3F12\nENCODING 16146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1DC0\n7540\n55C0\n5540\n57E0\n5500\n55E0\n56A0\n6D20\nBB40\n80E0\nENDCHAR\nSTARTCHAR U_3F13\nENCODING 16147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A40\nAFE0\nAA80\nAFE0\nAAA0\nAFE0\nAAA0\nA7E0\nD6C0\nFAA0\n8280\nENDCHAR\nSTARTCHAR U_3F14\nENCODING 16148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0E0\n9740\nF540\n9540\nF540\n0540\nFD40\nA940\nAAA0\nFBA0\n0820\nENDCHAR\nSTARTCHAR U_3F15\nENCODING 16149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nA7C0\nFD40\n8D40\n7540\n5540\nFD40\nAA40\nFAA0\nABA0\nF820\nENDCHAR\nSTARTCHAR U_3F16\nENCODING 16150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3B80\nF480\nAFE0\nAB40\nADA0\nAA80\nAFE0\nAAA0\nDFE0\nF2A0\n8FE0\nENDCHAR\nSTARTCHAR U_3F17\nENCODING 16151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFA00\n2200\n23C0\n2240\n2340\n24C0\n2440\n2440\n2540\n6660\nENDCHAR\nSTARTCHAR U_3F18\nENCODING 16152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\n2100\nA9C0\nA940\nA940\nAB40\nAAC0\nFA40\n8A40\n0360\nENDCHAR\nSTARTCHAR U_3F19\nENCODING 16153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n2100\nF900\nA9C0\nA940\nA940\nAAC0\nBA40\n2240\n2360\nENDCHAR\nSTARTCHAR U_3F1A\nENCODING 16154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27E0\n2100\nF900\n01C0\n7140\n5140\n52C0\n5240\n9A40\n9360\nENDCHAR\nSTARTCHAR U_3F1B\nENCODING 16155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4900\n4900\n49C0\n4940\nFD40\n4940\n4AC0\n4A40\n8A40\n8B60\nENDCHAR\nSTARTCHAR U_3F1C\nENCODING 16156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n2480\nFFE0\n1100\n3F80\nD060\n1E00\n2A00\n2640\n31C0\nENDCHAR\nSTARTCHAR U_3F1D\nENCODING 16157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\nCA40\n32A0\nE3E0\n0000\nFFE0\n1000\n1F00\n1500\n2340\n30C0\nENDCHAR\nSTARTCHAR U_3F1E\nENCODING 16158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2100\nA900\n7100\n21C0\nFA40\n2340\n22C0\n2240\n2240\n2360\nENDCHAR\nSTARTCHAR U_3F1F\nENCODING 16159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n4FE0\nF200\n9200\n93C0\nF240\n9340\n94C0\n9440\nF540\n0660\nENDCHAR\nSTARTCHAR U_3F20\nENCODING 16160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27E0\nF900\n8900\n41C0\n7940\n4340\n42C0\n5A40\n6240\n0360\nENDCHAR\nSTARTCHAR U_3F21\nENCODING 16161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n57E0\n7900\n9100\n11C0\nFD40\n3340\n3AC0\n5640\n9240\n1360\nENDCHAR\nSTARTCHAR U_3F22\nENCODING 16162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF900\n9100\n91C0\nB940\nA940\nBAC0\n9240\n9240\nFA40\n0360\nENDCHAR\nSTARTCHAR U_3F23\nENCODING 16163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF900\n2100\nF9C0\n8940\n8940\nFAC0\n8A40\n8A40\nFAC0\n0360\nENDCHAR\nSTARTCHAR U_3F24\nENCODING 16164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nFFE0\n1120\n7920\n1240\nFFE0\n0800\n1F00\n1500\n2320\n38E0\nENDCHAR\nSTARTCHAR U_3F25\nENCODING 16165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\n7900\n2900\nFDC0\n4140\nFB40\n22C0\n7A40\n0A40\n3360\nENDCHAR\nSTARTCHAR U_3F26\nENCODING 16166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2340\n3AC0\nE460\n0800\nFFE0\n0800\n1F00\n1500\n2320\n30E0\nENDCHAR\nSTARTCHAR U_3F27\nENCODING 16167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5100\n2100\nF9C0\nA940\nF940\nAB40\nFAC0\nAA40\nAA40\n9B60\nENDCHAR\nSTARTCHAR U_3F28\nENCODING 16168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n57C0\nAA00\nF200\n1380\n2280\nF680\n9580\n9480\nF4A0\n9660\nENDCHAR\nSTARTCHAR U_3F29\nENCODING 16169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\n17E0\n1100\nFD00\n91C0\n9540\nEEC0\nAA40\nAA40\nD740\nA260\nENDCHAR\nSTARTCHAR U_3F2A\nENCODING 16170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF900\n2100\n69C0\n6940\nB740\n22C0\n3240\n4AC0\n8360\nENDCHAR\nSTARTCHAR U_3F2B\nENCODING 16171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA900\nF900\nA9C0\nF940\n2140\nFAC0\n7240\n6A40\nA2C0\n2360\nENDCHAR\nSTARTCHAR U_3F2C\nENCODING 16172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n77E0\n2100\nF900\n51C0\n7140\n2340\nFAC0\n2240\n22C0\n2360\nENDCHAR\nSTARTCHAR U_3F2D\nENCODING 16173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\nF900\n23E0\n3A20\nE3E0\n0000\nFFE0\n1000\n1F00\n2520\n32E0\nENDCHAR\nSTARTCHAR U_3F2E\nENCODING 16174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n2100\nF900\n29C0\nFD40\n2B40\nFAC0\n5240\n72C0\nCB60\nENDCHAR\nSTARTCHAR U_3F2F\nENCODING 16175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n2100\nF900\nA9C0\nF940\nAB40\nFAC0\n7240\nAA40\n2360\nENDCHAR\nSTARTCHAR U_3F30\nENCODING 16176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nFA00\nAA00\nFBC0\nAA40\nFB40\n62C0\nA240\nFA40\n2360\n2620\nENDCHAR\nSTARTCHAR U_3F31\nENCODING 16177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7B80\n0A20\nFBE0\n0000\nFFE0\nA0A0\n5F40\n1000\n1F00\n2520\n32E0\nENDCHAR\nSTARTCHAR U_3F32\nENCODING 16178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n2200\nFE00\nAB80\nAA80\nAA80\n2580\nFC80\n24A0\n55A0\n8E60\nENDCHAR\nSTARTCHAR U_3F33\nENCODING 16179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n6BE0\nB500\n2100\nF9C0\n4940\n7B40\n4AC0\n7A40\n4AC0\n7B60\nENDCHAR\nSTARTCHAR U_3F34\nENCODING 16180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA900\nF900\nA9C0\nF940\n2340\nFAC0\nAA40\nBA40\nEAC0\n8B60\nENDCHAR\nSTARTCHAR U_3F35\nENCODING 16181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7800\n4BE0\n7900\n4900\nFDC0\n1340\n5AC0\n5240\n7360\n9C00\n83E0\nENDCHAR\nSTARTCHAR U_3F36\nENCODING 16182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n2BC0\n4500\nBB00\n01C0\nEB40\nAAC0\nEA40\nAA40\nE2C0\nA760\nENDCHAR\nSTARTCHAR U_3F37\nENCODING 16183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nABE0\nA900\nF900\n01C0\nFD40\n4140\nFEC0\nAA40\nAAC0\n8360\nENDCHAR\nSTARTCHAR U_3F38\nENCODING 16184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nFFE0\n8500\n4900\nB5C0\n4940\n86C0\n7A40\n4A40\n4AC0\n7B60\nENDCHAR\nSTARTCHAR U_3F39\nENCODING 16185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\nFFE0\n4900\n1100\nFDC0\n4140\n7DC0\n5540\n5540\n5540\n9760\nENDCHAR\nSTARTCHAR U_3F3A\nENCODING 16186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7FE0\n5100\n7D00\n55C0\n7F40\n55C0\n7D40\n6540\nBD40\nA760\nENDCHAR\nSTARTCHAR U_3F3B\nENCODING 16187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3280\nCD60\n3500\nE5E0\n2700\n28E0\nFFC0\n1000\n1F00\n2520\n30E0\nENDCHAR\nSTARTCHAR U_3F3C\nENCODING 16188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5100\nF900\nA9C0\nFA40\n0340\n72C0\n0240\nFA40\n72C0\nAB60\nENDCHAR\nSTARTCHAR U_3F3D\nENCODING 16189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n13E0\nFD00\nB500\n59C0\nB540\n5AC0\nB640\n2A40\n46C0\n8360\nENDCHAR\nSTARTCHAR U_3F3E\nENCODING 16190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7FE0\n5500\n7D00\n55C0\n7D40\n4940\n6AC0\nBE40\nAA40\nBF60\nENDCHAR\nSTARTCHAR U_3F3F\nENCODING 16191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n8900\n5100\nFDC0\nA940\nFAC0\nAA40\nFA40\n22C0\nFB60\nENDCHAR\nSTARTCHAR U_3F40\nENCODING 16192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\nFFE0\n2900\nFD00\nADC0\nD540\nFEC0\n1240\nFE40\n2A40\nC760\nENDCHAR\nSTARTCHAR U_3F41\nENCODING 16193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4CC0\n4880\n7FE0\n5DC0\n6AA0\n7FE0\n4800\n4F80\n94A0\n9AE0\nENDCHAR\nSTARTCHAR U_3F42\nENCODING 16194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3000\n4BE0\nB500\n01C0\n7940\n4940\nFDC0\nB540\n6D40\nB520\n6DA0\nENDCHAR\nSTARTCHAR U_3F43\nENCODING 16195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF800\nABE0\nF900\n7100\nA9C0\nAB40\nFAC0\nAA40\nFA40\nAAE0\nFB20\nENDCHAR\nSTARTCHAR U_3F44\nENCODING 16196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49C0\nFD00\n59E0\n6940\nFD40\n4A40\nFFE0\n2000\n3F00\n4940\n64C0\nENDCHAR\nSTARTCHAR U_3F45\nENCODING 16197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEBE0\nB500\n5900\n85C0\nFD40\n0140\n7AC0\n4A40\n7A40\n4AC0\nFF60\nENDCHAR\nSTARTCHAR U_3F46\nENCODING 16198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA400\n6BE0\nF900\n89C0\n7140\n5140\nFAC0\nAA40\nFA40\nAAE0\nFB20\nENDCHAR\nSTARTCHAR U_3F47\nENCODING 16199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1B80\n2480\n3B80\n2480\nFFE0\n8020\n7F80\n1000\n1F00\n2540\n32C0\nENDCHAR\nSTARTCHAR U_3F48\nENCODING 16200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n59E0\n6040\n7BE0\n9140\nFD60\n4AC0\nFFE0\n1000\n3F80\n24A0\n72E0\nENDCHAR\nSTARTCHAR U_3F49\nENCODING 16201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n9480\nEBE0\n92A0\nFBE0\n0000\nFFE0\n1000\n1F80\n24A0\n32E0\nENDCHAR\nSTARTCHAR U_3F4A\nENCODING 16202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5400\nFFE0\n5500\n7DC0\nAB40\nB940\n01C0\n7D40\n2540\n1960\nE7A0\nENDCHAR\nSTARTCHAR U_3F4B\nENCODING 16203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2840\n4480\nFFE0\n4440\nFFE0\nAAA0\n7FC0\n1000\n1F00\n2940\n35C0\nENDCHAR\nSTARTCHAR U_3F4C\nENCODING 16204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n1100\nFF00\nD5C0\n7F40\nAB40\nFDC0\n5540\n7D40\n5560\n7DA0\nENDCHAR\nSTARTCHAR U_3F4D\nENCODING 16205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n4FE0\n4900\nFD00\n49C0\n4940\n7AC0\n4A40\n4A40\n7AA0\n4B20\nENDCHAR\nSTARTCHAR U_3F4E\nENCODING 16206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\nFC80\n4BE0\n7AA0\n4A80\n7880\n4940\nFD40\nB140\nC940\nFE60\nENDCHAR\nSTARTCHAR U_3F4F\nENCODING 16207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n9280\n47C0\n1820\nE7C0\n4440\n47C0\n1100\nFFE0\n1500\n1F00\nENDCHAR\nSTARTCHAR U_3F50\nENCODING 16208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5240\n57E0\nFA80\n57E0\n52A0\n7FE0\n52A0\n57E0\n5280\n76C0\n5AA0\nENDCHAR\nSTARTCHAR U_3F51\nENCODING 16209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57C0\n5280\nFFC0\n5540\n57C0\n5280\n7380\n5280\n5FE0\n5100\n7100\nENDCHAR\nSTARTCHAR U_3F52\nENCODING 16210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\nAA80\nFFE0\nAC80\nF880\n23E0\nF880\n2880\n2880\n4880\n93E0\nENDCHAR\nSTARTCHAR U_3F53\nENCODING 16211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n3F80\n4400\nBF80\n0400\nFFE0\n5280\n7BE0\n9480\n1080\nFBE0\nENDCHAR\nSTARTCHAR U_3F54\nENCODING 16212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nD880\n5280\nFBE0\n2280\n65C0\n9080\n5880\nB3E0\n5800\n27E0\nENDCHAR\nSTARTCHAR U_3F55\nENCODING 16213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n2480\n2480\n3F80\n0000\nFF80\n2080\n3FE0\n0020\n00E0\nENDCHAR\nSTARTCHAR U_3F56\nENCODING 16214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nF900\nABE0\nA920\nF920\nAA20\nAA20\nFA20\n0540\n0880\nENDCHAR\nSTARTCHAR U_3F57\nENCODING 16215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nF900\nA900\nA900\nF900\nA900\nAA80\nFA80\n0440\n0820\nENDCHAR\nSTARTCHAR U_3F58\nENCODING 16216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0100\nFFE0\nA800\nAB80\nFA80\nAA80\nAA80\nFA80\n04A0\n18C0\nENDCHAR\nSTARTCHAR U_3F59\nENCODING 16217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nFA40\nAC20\nAFE0\nFA80\nAA80\nAA80\nFA80\n04A0\n18E0\nENDCHAR\nSTARTCHAR U_3F5A\nENCODING 16218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n7FC0\n4440\n7FC0\n2400\n7FC0\n8400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_3F5B\nENCODING 16219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nFBE0\nAC20\nA820\nFBA0\nAAA0\nABA0\nF820\n0020\n00C0\nENDCHAR\nSTARTCHAR U_3F5C\nENCODING 16220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BC0\n8A40\n52A0\n23E0\nC000\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_3F5D\nENCODING 16221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC40\n2140\n3940\n4940\nB140\n20C0\nFF80\n2480\n3F80\n2480\n3F80\nENDCHAR\nSTARTCHAR U_3F5E\nENCODING 16222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7BC0\n4A40\n4A40\n7BC0\n0000\n3F80\n2480\n3F80\n2480\n3F80\nENDCHAR\nSTARTCHAR U_3F5F\nENCODING 16223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00E0\n0700\nFAA0\nAAA0\nA940\nF840\nAFE0\nA840\nF940\n0040\n00C0\nENDCHAR\nSTARTCHAR U_3F60\nENCODING 16224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nFFE0\nA940\nAD40\nFBA0\nA900\nA900\nFA80\n0440\n0820\nENDCHAR\nSTARTCHAR U_3F61\nENCODING 16225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n03E0\nFAA0\nABE0\nAAA0\nFBE0\nA940\nAA40\nFBE0\n0040\n0040\nENDCHAR\nSTARTCHAR U_3F62\nENCODING 16226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n07E0\nF940\nAAA0\nAFE0\nFAA0\nABE0\nAAA0\nFBE0\n0080\n00E0\nENDCHAR\nSTARTCHAR U_3F63\nENCODING 16227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n00A0\nFFE0\nA880\nAE80\nFAA0\nAAA0\nAEC0\nF8A0\n0F60\n0220\nENDCHAR\nSTARTCHAR U_3F64\nENCODING 16228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n07E0\nF920\nAD60\nABA0\nFFE0\nA920\nABA0\nFD60\n0120\n00C0\nENDCHAR\nSTARTCHAR U_3F65\nENCODING 16229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nF880\nAFE0\nA9A0\nFA80\nAD80\nA880\nABE0\nF880\n02C0\n04A0\nENDCHAR\nSTARTCHAR U_3F66\nENCODING 16230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n3B80\n2A80\nC440\n7FE0\n8020\n3F80\n2480\n3F80\n2480\n3F80\nENDCHAR\nSTARTCHAR U_3F67\nENCODING 16231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\n07E0\nFA40\nAA40\nAC80\nFDA0\nAAE0\nAA40\nFE80\n05A0\n06E0\nENDCHAR\nSTARTCHAR U_3F68\nENCODING 16232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\n07E0\nF900\nAFC0\nA900\nFFE0\nAA00\nABE0\nFC80\n0480\n0BE0\nENDCHAR\nSTARTCHAR U_3F69\nENCODING 16233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0240\nFBC0\nAA40\nADA0\nFF60\nA940\nAEA0\nFB40\n0080\n0700\nENDCHAR\nSTARTCHAR U_3F6A\nENCODING 16234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n0FE0\nF920\nABA0\nA920\nFFE0\nAA40\nABC0\nFA40\n0240\n03C0\nENDCHAR\nSTARTCHAR U_3F6B\nENCODING 16235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n5280\nF7E0\n5A80\n62E0\nBF80\n2480\n3F80\n2480\n3F80\nENDCHAR\nSTARTCHAR U_3F6C\nENCODING 16236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n0000\nF3C0\n9240\nF3C0\n0000\nFBE0\nAAA0\nFBE0\nAAA0\nFBE0\nENDCHAR\nSTARTCHAR U_3F6D\nENCODING 16237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF900\nAFE0\nA920\nFBC0\nA900\nAFE0\nF100\n8FE0\n0AA0\n0860\nENDCHAR\nSTARTCHAR U_3F6E\nENCODING 16238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\nFFE0\nA4A0\nFFE0\nA4A0\n7FC0\n4400\nBF80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_3F6F\nENCODING 16239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0520\n07E0\nFA80\nAFE0\nAA80\nFBE0\nAA80\nAFE0\nFAA0\n0FE0\n0820\nENDCHAR\nSTARTCHAR U_3F70\nENCODING 16240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7DE0\n5460\n5440\n7D40\n5560\n5540\n7D40\n5540\n55C0\nBE60\nENDCHAR\nSTARTCHAR U_3F71\nENCODING 16241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6440\n2440\n2440\n6440\nA5C0\n2640\n4040\n8040\nENDCHAR\nSTARTCHAR U_3F72\nENCODING 16242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2200\n2400\n6FE0\nA020\n2020\n4140\n8080\nENDCHAR\nSTARTCHAR U_3F73\nENCODING 16243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n67C0\n2100\n2100\n6FE0\nA100\n2100\n4500\n8300\nENDCHAR\nSTARTCHAR U_3F74\nENCODING 16244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA080\n6080\n3FE0\n2080\n6480\nA500\n2200\n4500\n98E0\nENDCHAR\nSTARTCHAR U_3F75\nENCODING 16245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6200\n2200\n2200\n6FC0\nA200\n2200\n4200\n9FE0\nENDCHAR\nSTARTCHAR U_3F76\nENCODING 16246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FC0\n2040\n2040\n6FC0\nA800\n2820\n4820\n87E0\nENDCHAR\nSTARTCHAR U_3F77\nENCODING 16247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6100\n3D20\n25A0\n65C0\nA940\n3140\n4520\n8300\nENDCHAR\nSTARTCHAR U_3F78\nENCODING 16248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6100\n2FE0\n2A20\n6200\nA300\n2520\n4920\n90E0\nENDCHAR\nSTARTCHAR U_3F79\nENCODING 16249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n61C0\n2E00\n2800\n6FC0\nAC40\n2A80\n5100\nA6C0\nENDCHAR\nSTARTCHAR U_3F7A\nENCODING 16250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FC0\n2480\n24E0\n6620\nA540\n2880\n5140\nA620\nENDCHAR\nSTARTCHAR U_3F7B\nENCODING 16251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6100\n2FE0\n2100\n6FE0\nA440\n2280\n4100\n8EE0\nENDCHAR\nSTARTCHAR U_3F7C\nENCODING 16252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6F40\n2140\n2F40\n6840\nAF40\n2140\n4540\n8240\nENDCHAR\nSTARTCHAR U_3F7D\nENCODING 16253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6100\n2FE0\n2100\n6100\nA7C0\n2440\n4440\n87C0\nENDCHAR\nSTARTCHAR U_3F7E\nENCODING 16254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6100\n2920\n2920\n6FE0\nA100\n2920\n4920\n8FE0\nENDCHAR\nSTARTCHAR U_3F7F\nENCODING 16255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n61C0\n2E80\n2A80\n6A80\nAA40\n2B40\n52A0\nA320\nENDCHAR\nSTARTCHAR U_3F80\nENCODING 16256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6100\n27C0\n2100\n6FE0\nA100\n2240\n44E0\n8F20\nENDCHAR\nSTARTCHAR U_3F81\nENCODING 16257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA140\n6120\n2100\n2FE0\n6100\nA380\n2540\n4920\n9120\nENDCHAR\nSTARTCHAR U_3F82\nENCODING 16258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n3FE0\nA200\n6400\n2840\n2FE0\n6020\nAFC0\n2840\n4840\n8FC0\nENDCHAR\nSTARTCHAR U_3F83\nENCODING 16259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n6100\n2FE0\n2820\n6480\nA500\n2600\n4440\n83C0\nENDCHAR\nSTARTCHAR U_3F84\nENCODING 16260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6100\n2FE0\n2920\n6920\nAFE0\n2920\n4920\n8FE0\nENDCHAR\nSTARTCHAR U_3F85\nENCODING 16261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n61C0\n2F00\n2900\n6FE0\nA320\n2520\n4960\n9100\nENDCHAR\nSTARTCHAR U_3F86\nENCODING 16262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6100\n27C0\n2540\n67C0\nA540\n2FE0\n4440\n84C0\nENDCHAR\nSTARTCHAR U_3F87\nENCODING 16263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FC0\n2840\n2FC0\n6840\nAFC0\n2840\n4840\n8FC0\nENDCHAR\nSTARTCHAR U_3F88\nENCODING 16264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6440\n2440\n2BE0\n7840\nAA40\n2940\n4840\n88C0\nENDCHAR\nSTARTCHAR U_3F89\nENCODING 16265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6280\n2C60\n2380\n6000\nA7C0\n2040\n4380\n8080\nENDCHAR\nSTARTCHAR U_3F8A\nENCODING 16266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2100\n2FE0\n6920\nA960\n2380\n4540\n8920\nENDCHAR\nSTARTCHAR U_3F8B\nENCODING 16267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6480\n2480\n2BE0\n7880\nA9C0\n2AA0\n4AA0\n8880\nENDCHAR\nSTARTCHAR U_3F8C\nENCODING 16268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA500\n67C0\n2900\n2100\n6FE0\nA280\n2280\n44A0\n9860\nENDCHAR\nSTARTCHAR U_3F8D\nENCODING 16269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2100\n2200\n6FE0\nAAA0\n2AA0\n4AA0\n8860\nENDCHAR\nSTARTCHAR U_3F8E\nENCODING 16270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6EE0\n2AA0\n2AA0\n6AA0\nABA0\n2820\n4820\n8FE0\nENDCHAR\nSTARTCHAR U_3F8F\nENCODING 16271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n67C0\n2100\n2FE0\n6000\nA100\n27C0\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_3F90\nENCODING 16272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n7E20\n28A0\n2EA0\n72A0\nAAA0\n24A0\n4820\n9060\nENDCHAR\nSTARTCHAR U_3F91\nENCODING 16273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA300\n6480\n2840\n77A0\nA000\n2FC0\n4840\n4840\n8FC0\nENDCHAR\nSTARTCHAR U_3F92\nENCODING 16274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA800\n6AE0\n3FA0\n6AA0\nAAA0\n3AA0\n44A0\n4AE0\n9200\nENDCHAR\nSTARTCHAR U_3F93\nENCODING 16275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAFC0\n6840\n2FC0\n2000\n6FC0\nA840\n2E40\n49C0\n8840\nENDCHAR\nSTARTCHAR U_3F94\nENCODING 16276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n67C0\n2440\n67C0\nA000\n2FE0\n4820\n4820\n8FE0\nENDCHAR\nSTARTCHAR U_3F95\nENCODING 16277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2440\n6280\nAFE0\n2100\n4FE0\n4100\n8100\nENDCHAR\nSTARTCHAR U_3F96\nENCODING 16278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAFE0\n6920\n2FE0\n2920\n6FE0\nA100\n27C0\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_3F97\nENCODING 16279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FC0\n2840\n6FC0\nA840\n2FC0\n4A40\n4980\n8CE0\nENDCHAR\nSTARTCHAR U_3F98\nENCODING 16280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2920\n6FE0\nA920\n2FE0\n4500\n4200\n8DE0\nENDCHAR\nSTARTCHAR U_3F99\nENCODING 16281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAC40\n6380\n2C40\n6200\nAFE0\n2500\n4FC0\n5540\n8100\nENDCHAR\nSTARTCHAR U_3F9A\nENCODING 16282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA480\n66E0\n3480\n36A0\n78E0\nA000\n27C0\n4000\n8FE0\nENDCHAR\nSTARTCHAR U_3F9B\nENCODING 16283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA040\n67C0\n2040\n27C0\n6FE0\nABA0\n2280\n4100\n8EE0\nENDCHAR\nSTARTCHAR U_3F9C\nENCODING 16284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2100\n2540\n6540\nABA0\n2100\n4280\n8C60\nENDCHAR\nSTARTCHAR U_3F9D\nENCODING 16285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n27C0\n2540\n67C0\nA540\n27C0\n4FE0\n8100\nENDCHAR\nSTARTCHAR U_3F9E\nENCODING 16286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2280\n2FE0\n6AA0\nAC60\n2BA0\n4820\n8FE0\nENDCHAR\nSTARTCHAR U_3F9F\nENCODING 16287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n65C0\n2500\n2FE0\n6100\nA520\n2940\n4180\n8E00\nENDCHAR\nSTARTCHAR U_3FA0\nENCODING 16288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6BC0\n2480\n2C80\n65C0\nAC80\n2480\n4480\n89C0\nENDCHAR\nSTARTCHAR U_3FA1\nENCODING 16289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n64E0\n2EA0\n64A0\nBFA0\n24A0\n4AE0\n5F80\n8080\nENDCHAR\nSTARTCHAR U_3FA2\nENCODING 16290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n7FE0\n2520\n6940\nB5A0\n2300\n4580\n4940\n9120\nENDCHAR\nSTARTCHAR U_3FA3\nENCODING 16291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n7DC0\n2000\n2F80\n6200\nBFC0\n3240\n4A80\n9FC0\nENDCHAR\nSTARTCHAR U_3FA4\nENCODING 16292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2820\n2280\n6C60\nA7C0\n2100\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_3FA5\nENCODING 16293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA400\n6700\n24E0\n7FA0\nA4A0\n2EA0\n55A0\n4440\n8CA0\nENDCHAR\nSTARTCHAR U_3FA6\nENCODING 16294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2440\n2280\n6FE0\nA000\n27C0\n4440\n87C0\nENDCHAR\nSTARTCHAR U_3FA7\nENCODING 16295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAFE0\n6920\n2FE0\n2920\n6FE0\nA100\n2FE0\n4380\n8D60\nENDCHAR\nSTARTCHAR U_3FA8\nENCODING 16296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2100\n2EE0\n6000\nAFE0\n2540\n4740\n80C0\nENDCHAR\nSTARTCHAR U_3FA9\nENCODING 16297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA0C0\n6F00\n2200\n7FE0\nAA80\n3AE0\n4A80\n5A80\n8A60\nENDCHAR\nSTARTCHAR U_3FAA\nENCODING 16298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n6AC0\n3320\n2FC0\n7840\nAF40\n2BC0\n4840\n8FC0\nENDCHAR\nSTARTCHAR U_3FAB\nENCODING 16299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2820\n2FE0\n6800\nAFE0\n2AA0\n5FE0\nAAA0\nENDCHAR\nSTARTCHAR U_3FAC\nENCODING 16300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA880\n6EE0\n2880\n2EE0\n6400\nAFE0\n2B20\n49A0\n8FE0\nENDCHAR\nSTARTCHAR U_3FAD\nENCODING 16301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n7C80\n2AA0\n3EA0\n69C0\nBC80\n3B40\n4940\n8A20\nENDCHAR\nSTARTCHAR U_3FAE\nENCODING 16302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA7C0\n6440\n27C0\n2440\n6FE0\nA100\n27C0\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_3FAF\nENCODING 16303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6F80\n2A80\n2F80\n6A80\nBFE0\n2A40\n4980\n8CE0\nENDCHAR\nSTARTCHAR U_3FB0\nENCODING 16304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA400\n64E0\n3FA0\n64E0\nA4A0\n3EE0\n52A0\n52A0\n9F60\nENDCHAR\nSTARTCHAR U_3FB1\nENCODING 16305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA140\n7EA0\n2AC0\n6440\nBFE0\n2480\n2FC0\n44A0\n98E0\nENDCHAR\nSTARTCHAR U_3FB2\nENCODING 16306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FE0\nA500\n7FE0\n2540\n3F40\n6540\nBE80\n2880\n4F40\nB220\nENDCHAR\nSTARTCHAR U_3FB3\nENCODING 16307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n7BE0\n24A0\n2880\n7360\nA480\n3FE0\n4480\n9F40\nENDCHAR\nSTARTCHAR U_3FB4\nENCODING 16308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n7FE0\n2A80\n7240\nAFA0\n2880\n4F80\n4880\nBFE0\nENDCHAR\nSTARTCHAR U_3FB5\nENCODING 16309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n2100\n3FE0\nA440\n7E40\n21E0\n6E40\nA040\n2E40\n4A40\n8E40\nENDCHAR\nSTARTCHAR U_3FB6\nENCODING 16310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA880\n6B80\n2A80\n3FE0\n68A0\nAF80\n2880\n4F80\n8880\nENDCHAR\nSTARTCHAR U_3FB7\nENCODING 16311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\nDFC0\n5100\n57E0\nD540\n57E0\n5540\n5540\nAA60\nENDCHAR\nSTARTCHAR U_3FB8\nENCODING 16312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2100\nAFE0\n6000\n27C0\n6440\nAFE0\n2AA0\n4BA0\n8860\nENDCHAR\nSTARTCHAR U_3FB9\nENCODING 16313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FE0\n2280\nABE0\n6A80\n3F60\n6100\nBFE0\n2580\n4940\n9120\nENDCHAR\nSTARTCHAR U_3FBA\nENCODING 16314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2900\nAFC0\n6900\n2FC0\n6900\nAFE0\n2520\n5520\n90C0\nENDCHAR\nSTARTCHAR U_3FBB\nENCODING 16315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4080\n5D40\nD620\n59C0\n5480\nD7E0\n5C80\n52C0\n95A0\nENDCHAR\nSTARTCHAR U_3FBC\nENCODING 16316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2240\nABC0\n7E40\n2BC0\n6AA0\nAA40\n2B20\n5C00\n83E0\nENDCHAR\nSTARTCHAR U_3FBD\nENCODING 16317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2080\nB100\n6BC0\n3E40\n6BE0\nAA20\n2BE0\n5C00\nA3E0\nENDCHAR\nSTARTCHAR U_3FBE\nENCODING 16318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2480\nBFE0\n6540\n3FE0\n6540\nAFC0\n2500\n4D40\n9520\nENDCHAR\nSTARTCHAR U_3FBF\nENCODING 16319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA400\n6EE0\n2AA0\n6EC0\nAAA0\n2EA0\n28A0\n4AE0\n8D80\nENDCHAR\nSTARTCHAR U_3FC0\nENCODING 16320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4100\nF9E0\n5540\n5540\n7DE0\nD540\n5140\n5A40\nB5E0\nENDCHAR\nSTARTCHAR U_3FC1\nENCODING 16321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n6FC0\n2940\n2A40\n7FE0\nA940\n37A0\n4100\n8100\nENDCHAR\nSTARTCHAR U_3FC2\nENCODING 16322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4500\n55E0\nDF40\n4140\n5F40\nC940\n5C80\n4940\n9E20\nENDCHAR\nSTARTCHAR U_3FC3\nENCODING 16323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\nD540\n7FE0\n5540\n6FA0\nD240\n5FC0\n5240\n52C0\n8200\nENDCHAR\nSTARTCHAR U_3FC4\nENCODING 16324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n5FC0\nD540\n5E20\n55C0\nDF40\n5540\n5A80\n9F60\nENDCHAR\nSTARTCHAR U_3FC5\nENCODING 16325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2480\nAAE0\n7680\n2BE0\n7880\nAAE0\n2A80\n4B80\n8C60\nENDCHAR\nSTARTCHAR U_3FC6\nENCODING 16326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FC0\n2100\n7FE0\nA940\n3FE0\n2540\n5880\n8C60\nENDCHAR\nSTARTCHAR U_3FC7\nENCODING 16327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAAA0\n6660\n3AA0\n2220\n67C0\nA440\n27C0\n4440\n87C0\nENDCHAR\nSTARTCHAR U_3FC8\nENCODING 16328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n3FE0\nA880\n7140\n2FE0\n2940\n73E0\nAD40\n25E0\n4940\n91E0\nENDCHAR\nSTARTCHAR U_3FC9\nENCODING 16329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n6F80\n2A80\n7FE0\nA880\n2F80\n2880\n4F80\n9040\nENDCHAR\nSTARTCHAR U_3FCA\nENCODING 16330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5540\nDFE0\n5540\n6660\n4000\nCFC0\n4940\n4A40\n8FC0\nENDCHAR\nSTARTCHAR U_3FCB\nENCODING 16331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA480\n6FE0\n2920\n6FE0\nA100\n3FE0\n2100\n4540\n9920\nENDCHAR\nSTARTCHAR U_3FCC\nENCODING 16332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6280\n2C60\n6380\nAEE0\n2AA0\n2EE0\n4440\n9BA0\nENDCHAR\nSTARTCHAR U_3FCD\nENCODING 16333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA800\n7FE0\n24A0\n3F20\n6A40\nBFE0\n2A40\n7FE0\nAA40\nENDCHAR\nSTARTCHAR U_3FCE\nENCODING 16334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n7FE0\n2540\n3FE0\n6440\nA7C0\n2440\n47C0\n9820\nENDCHAR\nSTARTCHAR U_3FCF\nENCODING 16335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA480\n7FE0\n2480\n3F80\n6900\nB7C0\n2100\n4FC0\n8100\nENDCHAR\nSTARTCHAR U_3FD0\nENCODING 16336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4480\n5EE0\nC5A0\n7E40\n44A0\nD7A0\n5440\n5C80\nA3E0\nENDCHAR\nSTARTCHAR U_3FD1\nENCODING 16337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAAA0\n6660\n3BA0\n2480\n6BE0\nB880\n2BE0\n4880\n8BE0\nENDCHAR\nSTARTCHAR U_3FD2\nENCODING 16338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n7FE0\n2100\n2FE0\n6240\nBFE0\n2A40\n4F40\n80C0\nENDCHAR\nSTARTCHAR U_3FD3\nENCODING 16339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n7FE0\n2A40\n37A0\n6CC0\nB7A0\n2AC0\n4F00\n91E0\nENDCHAR\nSTARTCHAR U_3FD4\nENCODING 16340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA540\n67C0\n2540\n6FE0\nAAA0\n2FE0\n2AA0\n4FE0\n8820\nENDCHAR\nSTARTCHAR U_3FD5\nENCODING 16341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAAA0\n6EE0\n2B20\n6DA0\nA8A0\n2DA0\n28A0\n4FA0\n8860\nENDCHAR\nSTARTCHAR U_3FD6\nENCODING 16342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2940\n6E80\nABE0\n2AA0\n2FE0\n5AA0\nAFE0\nENDCHAR\nSTARTCHAR U_3FD7\nENCODING 16343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6EE0\n2440\n7FE0\nA4A0\n2EE0\n35A0\n4AE0\n9B20\nENDCHAR\nSTARTCHAR U_3FD8\nENCODING 16344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n6AA0\nDDC0\n5540\n6220\n7FE0\nC8A0\n5FC0\n5040\n9FC0\nENDCHAR\nSTARTCHAR U_3FD9\nENCODING 16345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA540\n7FE0\n2AA0\n3FE0\n6200\nBFE0\n2480\n4840\nB020\nENDCHAR\nSTARTCHAR U_3FDA\nENCODING 16346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5540\nDFC0\n5100\n7E80\n53E0\nFE80\n53E0\n6A80\nABE0\nENDCHAR\nSTARTCHAR U_3FDB\nENCODING 16347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAAA0\n6EE0\n2AA0\n6FE0\nAAA0\n2FE0\n2AA0\n4AC0\n9360\nENDCHAR\nSTARTCHAR U_3FDC\nENCODING 16348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA400\n6FC0\n2A40\n6FC0\nAA80\n3FE0\n5540\n5FC0\n9540\nENDCHAR\nSTARTCHAR U_3FDD\nENCODING 16349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1000\n3FC0\n2040\n3FC0\n2040\n3FC0\n1000\n2040\n4060\n3FA0\nENDCHAR\nSTARTCHAR U_3FDE\nENCODING 16350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n4700\nF100\n91E0\n9700\nF100\n91E0\n9F00\nF100\n9120\n00E0\nENDCHAR\nSTARTCHAR U_3FDF\nENCODING 16351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n4100\nF7E0\n9420\n9420\nF7E0\n9420\n9420\n9420\nF7E0\n9420\nENDCHAR\nSTARTCHAR U_3FE0\nENCODING 16352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4920\nF540\n9380\n9FE0\nF280\n9280\n9280\nF2A0\n04A0\n0860\nENDCHAR\nSTARTCHAR U_3FE1\nENCODING 16353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3F80\n4A40\n2B80\n4A40\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_3FE2\nENCODING 16354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4A40\n7BC0\n0640\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_3FE3\nENCODING 16355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n4440\nF7C0\n9440\n97C0\nF400\n97E0\n9D20\nF6A0\n07A0\n0060\nENDCHAR\nSTARTCHAR U_3FE4\nENCODING 16356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4FE0\nF100\n97C0\n9200\nFFE0\n9640\n9BE0\nF240\n03C0\n0240\nENDCHAR\nSTARTCHAR U_3FE5\nENCODING 16357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4FE0\nF920\n9280\n97E0\nFC80\n97E0\n9480\nF7E0\n0480\n07E0\nENDCHAR\nSTARTCHAR U_3FE6\nENCODING 16358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n2260\nFDC0\nAA40\nF980\n9260\nBF80\n2480\n2880\n3F80\nENDCHAR\nSTARTCHAR U_3FE7\nENCODING 16359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n4FE0\n8100\nFFE0\nA120\nAFC0\nE040\nBFE0\nAA40\nEF40\n00C0\nENDCHAR\nSTARTCHAR U_3FE8\nENCODING 16360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n8920\nEEC0\nAA40\nAFE0\nEA40\nAFE0\nAA40\nEAE0\n1280\n17E0\nENDCHAR\nSTARTCHAR U_3FE9\nENCODING 16361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\n4FE0\n8AA0\nF7C0\n9540\n97C0\nF100\n97C0\n9100\nFFE0\n0AA0\nENDCHAR\nSTARTCHAR U_3FEA\nENCODING 16362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFBC0\nA940\nA140\nFB40\n89C0\nB140\n9240\nAA40\nC460\nENDCHAR\nSTARTCHAR U_3FEB\nENCODING 16363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BC0\n4220\n79E0\n0400\n7FC0\n4440\n5F80\n4880\n4700\nB8E0\nENDCHAR\nSTARTCHAR U_3FEC\nENCODING 16364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\nAAA0\nA2A0\nFBE0\n8A00\nD200\nA200\nB200\nCA20\n81E0\nENDCHAR\nSTARTCHAR U_3FED\nENCODING 16365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1880\n6080\n43E0\n7EA0\n5280\n53E0\n5AA0\n56A0\n5240\n92A0\n1520\nENDCHAR\nSTARTCHAR U_3FEE\nENCODING 16366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFBE0\nAAA0\nAA80\nABE0\nFEA0\n22A0\n5240\n4AA0\n8520\nENDCHAR\nSTARTCHAR U_3FEF\nENCODING 16367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\nE0E0\n3F80\n2080\n3F80\n0400\n7FC0\n4440\n5F80\n4900\nBFE0\nENDCHAR\nSTARTCHAR U_3FF0\nENCODING 16368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n52A0\n8A80\n53E0\n2220\n2240\n5340\n4A80\n8AC0\n0520\nENDCHAR\nSTARTCHAR U_3FF1\nENCODING 16369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nFB00\n23E0\n7280\n2480\n1FC0\n1440\n1F00\n1500\n1200\n2D80\nENDCHAR\nSTARTCHAR U_3FF2\nENCODING 16370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n23E0\n52A0\n8A80\nFBE0\n0B20\nEAA0\nAA40\nEAA0\n1D00\nENDCHAR\nSTARTCHAR U_3FF3\nENCODING 16371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n22A0\nFD40\nAAA0\nA2A0\nF800\n8BE0\nD2A0\nA3E0\nB2A0\nCBE0\nENDCHAR\nSTARTCHAR U_3FF4\nENCODING 16372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n23E0\n52A0\nFA80\n53E0\n7220\n52A0\n7240\nFAA0\n1500\nENDCHAR\nSTARTCHAR U_3FF5\nENCODING 16373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\nA5A0\nF5A0\n95A0\nD100\nA7E0\nB100\nCA80\n8460\nENDCHAR\nSTARTCHAR U_3FF6\nENCODING 16374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n53E0\nFEA0\nA680\nFBE0\n2220\n7B40\n4A80\n8B40\n1C20\nENDCHAR\nSTARTCHAR U_3FF7\nENCODING 16375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nF880\n23E0\nFAA0\n2280\nFBE0\n2220\n7B40\n9280\n1540\n7A20\nENDCHAR\nSTARTCHAR U_3FF8\nENCODING 16376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFB40\nAA40\nA7E0\nA520\nFFE0\n8800\nABC0\n9140\nA880\nCB60\nENDCHAR\nSTARTCHAR U_3FF9\nENCODING 16377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\nA880\nA3E0\nFD40\n97E0\nD480\nA7E0\nA480\nD480\n8BE0\nENDCHAR\nSTARTCHAR U_3FFA\nENCODING 16378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nFBE0\n8AA0\nFA80\n5280\nFBE0\n5220\nAAA0\n7240\n72A0\nAD20\nENDCHAR\nSTARTCHAR U_3FFB\nENCODING 16379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n0400\nFFE0\n0400\n0400\n0000\n7FC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_3FFC\nENCODING 16380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n1100\n1100\nFFE0\n1100\n1100\n2100\n7FC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_3FFD\nENCODING 16381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5F40\n8820\n1F80\n0080\n0500\n0200\n7FC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_3FFE\nENCODING 16382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n3F80\n0400\n0400\n0C00\n7FC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_3FFF\nENCODING 16383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n0440\n2700\n3400\n4FE0\n8000\n3F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_4000\nENCODING 16384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n8540\n5480\n2420\nC3E0\n4000\n3F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_4001\nENCODING 16385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0800\n1F00\n3100\nDF00\n1100\n3F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_4002\nENCODING 16386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4420\nBFC0\n1100\n0E00\n1100\nFFE0\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_4003\nENCODING 16387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0800\n7580\n0E00\n7500\n0CE0\n7400\n3F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_4004\nENCODING 16388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4A40\n1680\n5540\n8F40\n1000\n7F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_4005\nENCODING 16389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF100\n17C0\n2900\n6100\nAFE0\n2000\n3F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_4006\nENCODING 16390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7F80\n0480\nFFE0\n1480\n6B00\n1080\nFFE0\n2A80\n2A80\nFFC0\nENDCHAR\nSTARTCHAR U_4007\nENCODING 16391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\nF7C0\n2900\nF7C0\n9100\n9540\nF7C0\n3F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_4008\nENCODING 16392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8880\nFA80\n8BE0\nF980\n92A0\nF460\n3F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_4009\nENCODING 16393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n0400\nFFE0\n2A80\nDF60\n1100\n1D00\n3F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_400A\nENCODING 16394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2AA0\n8660\n5AA0\n2500\nDAE0\n4500\n5FC0\n1540\n1540\n7FE0\nENDCHAR\nSTARTCHAR U_400B\nENCODING 16395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2500\nF9E0\n2100\n27E0\n3EA0\nC560\n3FE0\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_400C\nENCODING 16396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n0480\nFFE0\n0400\n7FC0\n2480\n5540\n3F80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_400D\nENCODING 16397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFFC0\n5480\nFB00\n74E0\n5780\nFF80\n28C0\n3F80\n2A80\nFFC0\nENDCHAR\nSTARTCHAR U_400E\nENCODING 16398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF200\n9200\nF400\n9400\nF7C0\n9040\n9040\nF040\n9280\n0100\nENDCHAR\nSTARTCHAR U_400F\nENCODING 16399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3FE0\n2020\n5E20\n9220\n1E20\n1220\n1E20\n1220\n1EA0\n0040\nENDCHAR\nSTARTCHAR U_4010\nENCODING 16400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0020\nF840\n8B80\n8800\nF820\n8840\nFB80\n8800\n8820\nF840\n0380\nENDCHAR\nSTARTCHAR U_4011\nENCODING 16401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nEFC0\nA240\nE940\nA480\nA280\nE100\nA280\nA480\nE840\n1020\nENDCHAR\nSTARTCHAR U_4012\nENCODING 16402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF700\n9100\n9100\nF100\n9FE0\nF100\n9100\n9100\nF100\n0100\nENDCHAR\nSTARTCHAR U_4013\nENCODING 16403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n9200\n9F80\nF280\n9A80\nF680\n92A0\n95A0\nF4A0\n0860\nENDCHAR\nSTARTCHAR U_4014\nENCODING 16404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF120\n9120\n9520\nF520\n9920\nF120\n9220\n9220\nF4A0\n0840\nENDCHAR\nSTARTCHAR U_4015\nENCODING 16405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0720\nF120\n9720\n9420\nF420\n9720\nF120\n9120\n9120\nF520\n0220\nENDCHAR\nSTARTCHAR U_4016\nENCODING 16406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF100\n9100\n9100\nFFE0\n9100\nF280\n9280\n9440\nF440\n0820\nENDCHAR\nSTARTCHAR U_4017\nENCODING 16407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n97C0\nF240\n9240\n9FE0\nF200\n9500\nF500\n0880\n1060\nENDCHAR\nSTARTCHAR U_4018\nENCODING 16408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF280\n9280\n9280\nFFE0\n9280\nF280\n9280\n9280\nF480\n0880\nENDCHAR\nSTARTCHAR U_4019\nENCODING 16409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n05E0\nF4A0\n94A0\n9EA0\nF4A0\n94A0\nF4A0\n96A0\n94A0\nF120\n0260\nENDCHAR\nSTARTCHAR U_401A\nENCODING 16410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n3480\n2A80\n3F80\n1000\n63C0\n4A40\n4A40\n6AC0\n1200\n6200\nENDCHAR\nSTARTCHAR U_401B\nENCODING 16411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF400\n97E0\n9AA0\nF2A0\n94A0\nF920\n9120\n9220\nF4A0\n0040\nENDCHAR\nSTARTCHAR U_401C\nENCODING 16412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3F80\n4A80\n9280\n2480\n4900\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_401D\nENCODING 16413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF500\n9520\n95C0\nF700\n9500\nF500\n9500\n9520\nF720\n04E0\nENDCHAR\nSTARTCHAR U_401E\nENCODING 16414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF480\n9280\n9880\nF480\n9480\nF0E0\n9380\n9C80\nF080\n0080\nENDCHAR\nSTARTCHAR U_401F\nENCODING 16415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n97E0\n92A0\nF7E0\n9680\nF7E0\n92A0\n94E0\nF480\n0880\nENDCHAR\nSTARTCHAR U_4020\nENCODING 16416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF420\n9420\nF7E0\n9420\n9420\nF7E0\n9420\n9420\nF7E0\n0420\nENDCHAR\nSTARTCHAR U_4021\nENCODING 16417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n91E0\nF100\n9100\n97E0\nF420\n9420\n9420\nF7E0\n0420\nENDCHAR\nSTARTCHAR U_4022\nENCODING 16418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF400\n97C0\n9A00\nF200\n9FC0\nF200\n9200\n9500\nF480\n0860\nENDCHAR\nSTARTCHAR U_4023\nENCODING 16419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nF140\n9240\nF280\n9680\nF6C0\n9B20\n9260\nF240\n05C0\n1800\nENDCHAR\nSTARTCHAR U_4024\nENCODING 16420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n3D00\n2540\nD520\n0920\n3100\nDF80\n1280\n1980\n1480\n1F80\nENDCHAR\nSTARTCHAR U_4025\nENCODING 16421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n0700\nF400\n9500\nF500\n97E0\nF140\n9540\nF520\n0920\n0300\nENDCHAR\nSTARTCHAR U_4026\nENCODING 16422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9100\nFFE0\n9100\n9100\nF7C0\n9440\nF440\n97C0\n0440\nENDCHAR\nSTARTCHAR U_4027\nENCODING 16423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n97C0\nF280\n9280\nFFE0\n9000\n9280\nF280\n9240\n0440\nENDCHAR\nSTARTCHAR U_4028\nENCODING 16424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF700\n9100\nF100\n9FE0\n9100\nF100\n97C0\n9440\nF440\n07C0\nENDCHAR\nSTARTCHAR U_4029\nENCODING 16425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF7C0\n9840\nF480\n9300\n9CE0\nF000\n97C0\n9440\nF440\n07C0\nENDCHAR\nSTARTCHAR U_402A\nENCODING 16426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE5C0\nA800\nF400\nA7E0\nE880\nB880\nA880\nE880\n0A80\n0900\nENDCHAR\nSTARTCHAR U_402B\nENCODING 16427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9280\nF280\n9440\nFBA0\n9000\n97C0\nF440\n0440\n07C0\nENDCHAR\nSTARTCHAR U_402C\nENCODING 16428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nF280\n9440\nF820\n97C0\nF100\n97C0\nF100\n9100\n0FE0\nENDCHAR\nSTARTCHAR U_402D\nENCODING 16429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n9FE0\n9200\nF480\n9740\nF240\n9480\nF900\n1280\n0460\nENDCHAR\nSTARTCHAR U_402E\nENCODING 16430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\nFFE0\nA800\nE800\nAFC0\nE000\nAA80\nEAA0\n0AA0\n1260\nENDCHAR\nSTARTCHAR U_402F\nENCODING 16431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\nF140\n9FE0\nF100\n97C0\nF540\n97C0\n9540\nF7C0\n0540\n04C0\nENDCHAR\nSTARTCHAR U_4030\nENCODING 16432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n9440\n9920\nF280\n9440\nF820\n97C0\n9440\nF440\n97C0\nENDCHAR\nSTARTCHAR U_4031\nENCODING 16433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE7C0\nAC40\nE380\nAD60\nA7C0\nE100\nA7C0\nA100\nEFE0\n0100\nENDCHAR\nSTARTCHAR U_4032\nENCODING 16434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE7E0\nA800\nE7C0\nA540\nBFE0\nEA40\nA940\nAFE0\nE040\n00C0\nENDCHAR\nSTARTCHAR U_4033\nENCODING 16435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nA7C0\nE540\nA7C0\nE100\nA380\nA540\nE920\n0100\nENDCHAR\nSTARTCHAR U_4034\nENCODING 16436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE540\nAA80\nAA80\nE540\nA000\nA7C0\nE100\nA100\nA100\nEFE0\nENDCHAR\nSTARTCHAR U_4035\nENCODING 16437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE480\nAFC0\nA840\nE400\nAFE0\nA100\nEFE0\nA100\nA280\nEC60\nENDCHAR\nSTARTCHAR U_4036\nENCODING 16438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFC0\nA840\nEFC0\nA840\nAFC0\nEA00\nAAC0\nA900\nE900\n0CC0\nENDCHAR\nSTARTCHAR U_4037\nENCODING 16439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nE480\nAE80\nA5E0\nE4A0\nBFA0\nA4A0\nEAA0\nBFA0\nA120\nE260\nENDCHAR\nSTARTCHAR U_4038\nENCODING 16440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA00\n23E0\n7240\nA240\n6440\n3F80\n3480\n2A80\n2580\n3F80\nENDCHAR\nSTARTCHAR U_4039\nENCODING 16441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\nA200\nAA80\nEA80\nB740\nA200\nE200\nA500\nA880\nF060\nENDCHAR\nSTARTCHAR U_403A\nENCODING 16442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n11E0\n2B40\n6880\nA940\n2220\n3FC0\n3240\n2940\n24C0\n3FC0\nENDCHAR\nSTARTCHAR U_403B\nENCODING 16443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE7C0\nA540\nA7C0\nE540\nBFE0\nA400\nEFE0\nA040\nA280\nE100\nENDCHAR\nSTARTCHAR U_403C\nENCODING 16444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFC0\nA800\nAF80\nE800\nAFE0\nAA80\nEAA0\nAAC0\nAA80\nEA40\n1320\nENDCHAR\nSTARTCHAR U_403D\nENCODING 16445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0060\nEDC0\nA440\nE440\nA860\nA540\nE540\nB540\nA9E0\nE800\n17E0\nENDCHAR\nSTARTCHAR U_403E\nENCODING 16446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n2140\n7880\nA940\n3A20\n0000\n3FC0\n3240\n2940\n24C0\n3FC0\nENDCHAR\nSTARTCHAR U_403F\nENCODING 16447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE460\nAF80\nE500\nA5E0\nA540\nE740\nBD40\nA540\nE540\n0E40\nENDCHAR\nSTARTCHAR U_4040\nENCODING 16448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n10C0\n7B00\n1200\n3BE0\nD280\n3480\nENDCHAR\nSTARTCHAR U_4041\nENCODING 16449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA000\nA7C0\nE440\nA7C0\nE100\nA380\nA540\nE920\n0300\nENDCHAR\nSTARTCHAR U_4042\nENCODING 16450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\nA240\nF280\n9100\nF280\nA460\nFF80\n4080\n7F80\n4080\n7F80\nENDCHAR\nSTARTCHAR U_4043\nENCODING 16451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\nA200\nEFC0\nA200\nBFE0\nE200\nA540\nAC80\nF540\n0620\nENDCHAR\nSTARTCHAR U_4044\nENCODING 16452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEF80\nA200\nBFC0\nE500\nA200\nFFC0\nA200\nBFE0\nE200\n0200\nENDCHAR\nSTARTCHAR U_4045\nENCODING 16453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE7C0\nA080\nA100\nEFE0\nA100\nA300\nEFE0\nAAA0\nAAA0\nEAA0\n1FE0\nENDCHAR\nSTARTCHAR U_4046\nENCODING 16454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nBFC0\nA500\nFAC0\nAF80\nAA80\nEF80\nAA80\nAF80\nE220\n03E0\nENDCHAR\nSTARTCHAR U_4047\nENCODING 16455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n94A0\n5340\n3CA0\n5F80\n0000\n7FC0\n5240\n4940\n7FC0\nENDCHAR\nSTARTCHAR U_4048\nENCODING 16456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FE0\n4540\n7C80\n4160\nBF80\n2480\n3280\n2980\n2480\n3F80\nENDCHAR\nSTARTCHAR U_4049\nENCODING 16457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n7FE0\n4940\n79A0\n42C0\nBF80\n2480\n3280\n2980\n2480\n3F80\nENDCHAR\nSTARTCHAR U_404A\nENCODING 16458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE7C0\nA280\nA100\nE280\nAC60\nA7C0\nE7C0\nA440\nA7C0\nE440\n07C0\nENDCHAR\nSTARTCHAR U_404B\nENCODING 16459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEA80\nBFE0\nAA80\nEB80\nAFE0\nA100\nEFE0\nA380\nA540\nE920\n0100\nENDCHAR\nSTARTCHAR U_404C\nENCODING 16460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA920\nAFE0\nE920\nAFE0\nA440\nE7C0\nA440\nA7C0\nE440\n04C0\nENDCHAR\nSTARTCHAR U_404D\nENCODING 16461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00A0\nEFE0\nA880\nEF80\nA8A0\nAEA0\nEAC0\nAE80\nA980\nEAA0\n1060\nENDCHAR\nSTARTCHAR U_404E\nENCODING 16462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA000\nE7C0\nA440\nAFE0\nE820\nA7C0\nA100\nE100\n0300\nENDCHAR\nSTARTCHAR U_404F\nENCODING 16463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE7C0\nA280\nAFE0\nEAA0\nAFE0\nA200\nEFE0\nA280\nA480\nE300\n0CC0\nENDCHAR\nSTARTCHAR U_4050\nENCODING 16464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nEFC0\nA480\nE200\nAFC0\nAA40\nEA40\nBFE0\nA200\nE500\n18C0\nENDCHAR\nSTARTCHAR U_4051\nENCODING 16465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFC0\nAA40\nA940\nEFC0\nA000\nBFE0\nE400\nAFC0\nB540\nEA40\n0580\nENDCHAR\nSTARTCHAR U_4052\nENCODING 16466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE440\nA7C0\nEFE0\nA440\nA7C0\nE440\nA7C0\nA440\nEFE0\n0040\nENDCHAR\nSTARTCHAR U_4053\nENCODING 16467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE280\nA920\nAAA0\nEFE0\nA440\nAA20\nE3C0\nA640\nAA80\nE100\n06C0\nENDCHAR\nSTARTCHAR U_4054\nENCODING 16468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE1E0\nAEA0\nA540\nEFE0\nA200\nAFE0\nE200\nA3C0\nA540\nE480\n0B60\nENDCHAR\nSTARTCHAR U_4055\nENCODING 16469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFC0\nA840\nAFC0\nE900\nAFC0\nA8A0\nEFE0\nA840\nAFC0\nE840\n0FC0\nENDCHAR\nSTARTCHAR U_4056\nENCODING 16470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE920\nA540\nAFE0\nE540\nA920\nA200\nEFE0\nA440\nA280\nE100\n06C0\nENDCHAR\nSTARTCHAR U_4057\nENCODING 16471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEA80\nAF80\nA000\nFFE0\nA000\nAF80\nE880\nAF80\nA500\nE200\n1FC0\nENDCHAR\nSTARTCHAR U_4058\nENCODING 16472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE0C0\nBF20\nA540\nE280\nA800\nAFC0\nF100\nAFE0\nA100\nE920\n0FE0\nENDCHAR\nSTARTCHAR U_4059\nENCODING 16473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE7C0\nA540\nA4C0\nE7C0\nA100\nAFE0\nE920\nAFC0\nA280\nE100\n06C0\nENDCHAR\nSTARTCHAR U_405A\nENCODING 16474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n9240\n97E0\nF420\n97E0\n9420\nF7E0\n9420\n97E0\nF240\n0C20\nENDCHAR\nSTARTCHAR U_405B\nENCODING 16475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nAF80\nAA80\nEF80\nAA80\nAF80\nE200\nA280\nA5C0\nE920\n11E0\nENDCHAR\nSTARTCHAR U_405C\nENCODING 16476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE7C0\nA440\nA7C0\nE440\nA7C0\nA920\nE540\nAFE0\nA280\nE4A0\n08E0\nENDCHAR\nSTARTCHAR U_405D\nENCODING 16477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAAA0\n71C0\n2080\nDB60\n0000\nFFE0\n90A0\n1F80\n1080\n1080\n1F80\nENDCHAR\nSTARTCHAR U_405E\nENCODING 16478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n2940\n1080\n2940\nFFE0\n2880\n2F80\n2880\n2F80\n4880\n8F80\nENDCHAR\nSTARTCHAR U_405F\nENCODING 16479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE440\nA280\nAFC0\nE200\nAFC0\nA200\nEFC0\nA400\nAB80\nE900\n17E0\nENDCHAR\nSTARTCHAR U_4060\nENCODING 16480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nEFC0\nA500\nAFC0\nE540\nBFE0\nA540\nEFC0\nA500\nAD80\nF560\nENDCHAR\nSTARTCHAR U_4061\nENCODING 16481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nAEE0\nEAA0\nAEE0\nA920\nE920\nAAA0\nAC60\nE820\n0860\nENDCHAR\nSTARTCHAR U_4062\nENCODING 16482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nE880\nBEE0\nA900\nEEE0\nAA40\nAB60\nEB40\nAB40\nB3C0\nEE60\nENDCHAR\nSTARTCHAR U_4063\nENCODING 16483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA540\nE7C0\nA540\nA540\nEFE0\nA080\nAFE0\nE280\n0180\nENDCHAR\nSTARTCHAR U_4064\nENCODING 16484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA280\nEFE0\nA920\nABA0\nE920\nABA0\nAAA0\nEBA0\n0860\nENDCHAR\nSTARTCHAR U_4065\nENCODING 16485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nAA80\nAFC0\nEA80\nAFC0\nAA00\nEFC0\nAA40\nABC0\nE800\n0FE0\nENDCHAR\nSTARTCHAR U_4066\nENCODING 16486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE180\nA100\nAFE0\nE900\nABA0\nA920\nEBE0\nAA40\nABC0\nEA40\n17E0\nENDCHAR\nSTARTCHAR U_4067\nENCODING 16487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nEF80\nA200\nAF80\nEA80\nAF80\nEFC0\nA200\nBFC0\nE500\n0880\nENDCHAR\nSTARTCHAR U_4068\nENCODING 16488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nEEE0\nA0A0\nEEA0\nAAC0\nAEA0\nEAA0\nA4A0\nAEA0\nE4E0\n0C80\nENDCHAR\nSTARTCHAR U_4069\nENCODING 16489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE780\nA900\nBFC0\nEA40\nAFC0\nEA40\nAFC0\nA000\nED40\n12A0\nENDCHAR\nSTARTCHAR U_406A\nENCODING 16490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0420\nEEC0\nA480\nEE80\nAAE0\nAEA0\nEAA0\nAEA0\nA4A0\nEEA0\n0520\nENDCHAR\nSTARTCHAR U_406B\nENCODING 16491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFC0\nAAC0\nAF40\nEFC0\nA200\nEFC0\nA200\nBFE0\nA000\nED40\n12A0\nENDCHAR\nSTARTCHAR U_406C\nENCODING 16492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nEFE0\nAD60\nABA0\nEFE0\nA000\nE7C0\nA440\nA7C0\nE440\n07C0\nENDCHAR\nSTARTCHAR U_406D\nENCODING 16493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nEFC0\nA200\nA500\nE880\nA660\nE440\nAEE0\nA440\nEAA0\n1120\nENDCHAR\nSTARTCHAR U_406E\nENCODING 16494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nF540\nAEE0\nE440\nAEE0\nB100\nEFC0\nA840\nAFC0\nE840\n0FC0\nENDCHAR\nSTARTCHAR U_406F\nENCODING 16495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE280\nA7C0\nE820\nA7C0\nA440\nEFE0\nAAA0\nA660\nEAA0\n0660\nENDCHAR\nSTARTCHAR U_4070\nENCODING 16496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE1E0\nBC80\nABE0\nEA20\nABE0\nAA20\nEFE0\nAA20\nB3E0\nE140\n0220\nENDCHAR\nSTARTCHAR U_4071\nENCODING 16497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nA7C0\nA540\nEFE0\nA440\nBFE0\nE000\nBFE0\nA480\nE4A0\n18E0\nENDCHAR\nSTARTCHAR U_4072\nENCODING 16498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nAAA0\nAFE0\nE440\nA7C0\nA440\nE7C0\nA440\nA7C0\nE280\n0C60\nENDCHAR\nSTARTCHAR U_4073\nENCODING 16499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nEFE0\nA480\nA200\nEFC0\nA480\nB860\nE480\nBFE0\nA480\nE880\nENDCHAR\nSTARTCHAR U_4074\nENCODING 16500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA440\nE540\nA7C0\nA000\nE7C0\nA440\nA7C0\nE440\n1FE0\nENDCHAR\nSTARTCHAR U_4075\nENCODING 16501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nEAA0\nAFE0\nE000\nBFE0\nA840\nEFC0\nA500\nA540\nEC80\n1640\nENDCHAR\nSTARTCHAR U_4076\nENCODING 16502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nEE80\nAAE0\nAF20\nEAA0\nAEA0\nE4A0\nBE40\nAA40\nEAA0\n1720\nENDCHAR\nSTARTCHAR U_4077\nENCODING 16503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\n4440\n6AC0\n4A40\nFFE0\n8020\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_4078\nENCODING 16504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE280\nAFE0\nAAA0\nEFE0\nA800\nAFC0\nE800\nAFE0\nAA80\nEAC0\n1360\nENDCHAR\nSTARTCHAR U_4079\nENCODING 16505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE080\nAFE0\nAAA0\nEE40\nA9E0\nA840\nEE40\nABE0\nAA40\nEE40\n1040\nENDCHAR\nSTARTCHAR U_407A\nENCODING 16506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nAAA0\nAFE0\nE280\nAFC0\nA280\nEFE0\nA100\nBFE0\nE100\n0100\nENDCHAR\nSTARTCHAR U_407B\nENCODING 16507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEA40\nAF40\nB580\nEF40\nB5A0\nBFE0\nE200\nBFC0\nA700\nEA80\n1240\nENDCHAR\nSTARTCHAR U_407C\nENCODING 16508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nED60\nABA0\nAFE0\nE100\nA7C0\nE100\nAFE0\nA7C0\nE100\n0FE0\nENDCHAR\nSTARTCHAR U_407D\nENCODING 16509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nEA80\nA540\nAFE0\nEAA0\nAFE0\nAA40\nEB40\nAEC0\nAA40\nEF60\nENDCHAR\nSTARTCHAR U_407E\nENCODING 16510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE480\nAFE0\nA480\nEFE0\nAAA0\nAFE0\nE140\nAFE0\nAD80\nEB20\n14E0\nENDCHAR\nSTARTCHAR U_407F\nENCODING 16511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n54C0\n7CA0\n13E0\n7880\n1140\nFFA0\n1080\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_4080\nENCODING 16512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nEFC0\nA200\nEFC0\nA4A0\nAE80\nE5E0\nBE80\nA4A0\nE2C0\n0D20\nENDCHAR\nSTARTCHAR U_4081\nENCODING 16513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF7C0\n9C40\nF7A0\n94E0\n97C0\nFD40\n97C0\n9340\nF520\n09E0\nENDCHAR\nSTARTCHAR U_4082\nENCODING 16514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEAA0\nAEE0\nAAA0\nEFE0\nA480\nEFE0\nB480\nA7E0\nE480\n07E0\nENDCHAR\nSTARTCHAR U_4083\nENCODING 16515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\nEE20\nA540\nAFE0\nEAA0\nAFE0\nEE40\nAAE0\nAF40\nEAC0\n0F40\nENDCHAR\nSTARTCHAR U_4084\nENCODING 16516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEAA0\nAEE0\nEBA0\nAEE0\nA5C0\nEC80\nA7E0\nA440\nE380\n0C60\nENDCHAR\nSTARTCHAR U_4085\nENCODING 16517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A40\nEF80\nB4A0\nBFE0\nF540\nBA60\nEF80\nAA80\nAF80\nE240\n1FC0\nENDCHAR\nSTARTCHAR U_4086\nENCODING 16518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n1200\n53C0\n2440\nF840\n2A40\n6140\nA040\n2040\n2140\n6080\nENDCHAR\nSTARTCHAR U_4087\nENCODING 16519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n1140\n5140\n2140\nF940\n2BC0\n6140\nA140\n2240\n2240\n67E0\nENDCHAR\nSTARTCHAR U_4088\nENCODING 16520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1100\n5100\n27E0\nFD20\n2D20\n67E0\nA100\n2140\n21E0\n6620\nENDCHAR\nSTARTCHAR U_4089\nENCODING 16521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n13C0\n5440\n27E0\nFD00\n2DC0\n6680\nA7E0\n2480\n2540\n6620\nENDCHAR\nSTARTCHAR U_408A\nENCODING 16522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n13C0\n5240\n27E0\nFAA0\n2BE0\n6140\nA680\n21C0\n26A0\n6180\nENDCHAR\nSTARTCHAR U_408B\nENCODING 16523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF140\n2080\nF7E0\n92A0\nF580\n2080\nF7E0\nA1C0\nF2A0\n24A0\nENDCHAR\nSTARTCHAR U_408C\nENCODING 16524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n17E0\n5240\n27E0\nFAA0\n2BE0\n62A0\nA3E0\n21C0\n2080\n67E0\nENDCHAR\nSTARTCHAR U_408D\nENCODING 16525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n1640\n5540\n27C0\nFA80\n2FE0\n6580\nAB60\n2380\n2D60\n6300\nENDCHAR\nSTARTCHAR U_408E\nENCODING 16526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF540\n1FE0\n5540\n2EE0\nF440\n6FE0\n6A40\nA940\nAFC0\n2480\n6840\nENDCHAR\nSTARTCHAR U_408F\nENCODING 16527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47E0\n7920\nA120\n2220\nFA60\n2400\n33E0\n4A20\n4A20\n83E0\nENDCHAR\nSTARTCHAR U_4090\nENCODING 16528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7520\nA520\n2520\nF7E0\n2100\n2520\n5520\n5520\n87E0\nENDCHAR\nSTARTCHAR U_4091\nENCODING 16529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4480\n7C80\nA480\n27A0\nFCC0\n2480\n3480\n4D80\n46A0\n84E0\nENDCHAR\nSTARTCHAR U_4092\nENCODING 16530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4080\n7BE0\nA080\n2080\nFBE0\n2000\n33E0\n4A20\n4A20\n83E0\nENDCHAR\nSTARTCHAR U_4093\nENCODING 16531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\n7FC0\nA440\n27C0\nFC40\n27C0\n3280\n4A80\n44A0\n88E0\nENDCHAR\nSTARTCHAR U_4094\nENCODING 16532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\n7900\nA7E0\n2280\nFFC0\n2100\n37E0\n4900\n4900\n8100\nENDCHAR\nSTARTCHAR U_4095\nENCODING 16533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n43C0\n7A40\nA7C0\n2080\nFFE0\n22C0\n35A0\n4AA0\n4D40\n82C0\nENDCHAR\nSTARTCHAR U_4096\nENCODING 16534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n0400\n0900\n1080\n2040\n7F80\nA080\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_4097\nENCODING 16535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFE00\n2200\n2220\n4240\n7380\n5E00\nD220\n5220\n7220\n01E0\nENDCHAR\nSTARTCHAR U_4098\nENCODING 16536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFC0\n2440\n2540\n4280\n7280\n5100\nD100\n5280\n7440\n0820\nENDCHAR\nSTARTCHAR U_4099\nENCODING 16537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\nFA20\n2240\n2280\n4240\n7220\n5220\nD3A0\n5240\n7200\n0200\nENDCHAR\nSTARTCHAR U_409A\nENCODING 16538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFA40\n2180\n2180\n4640\n7440\n5240\nD180\n5180\n7640\n0420\nENDCHAR\nSTARTCHAR U_409B\nENCODING 16539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF840\n2280\n2100\n4FE0\n7140\n5100\nD100\n5100\n7100\n0300\nENDCHAR\nSTARTCHAR U_409C\nENCODING 16540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n27E0\n2100\n4100\n77C0\n5100\nDFE0\n5100\n7100\n0100\nENDCHAR\nSTARTCHAR U_409D\nENCODING 16541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0180\nFD40\n21E0\n2700\n7940\n6940\nA880\n28A0\n39A0\n0660\nENDCHAR\nSTARTCHAR U_409E\nENCODING 16542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0800\n1F80\n3080\n5F80\n0400\nFFE0\n0E00\n1500\n64C0\n0400\nENDCHAR\nSTARTCHAR U_409F\nENCODING 16543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7BC0\n2A40\n2A40\n4BC0\n9000\n7FC0\n0800\n1F80\n2880\n4F80\nENDCHAR\nSTARTCHAR U_40A0\nENCODING 16544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFA00\n23C0\n2500\n4100\n7FE0\n5100\nD100\n5280\n7440\n0820\nENDCHAR\nSTARTCHAR U_40A1\nENCODING 16545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nFB00\n2200\n2200\n43C0\n7280\n5280\nD280\n5280\n7280\n0FE0\nENDCHAR\nSTARTCHAR U_40A2\nENCODING 16546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFBC0\n2440\n2A80\n4100\n7280\n5C40\nD320\n5080\n7600\n0180\nENDCHAR\nSTARTCHAR U_40A3\nENCODING 16547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\nF940\n2140\n2540\n45E0\n7540\n5540\nD540\n55C0\n7760\n0C60\nENDCHAR\nSTARTCHAR U_40A4\nENCODING 16548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\nF940\n2240\n23E0\n4640\n7A40\n5340\nD2C0\n5240\n7240\n02C0\nENDCHAR\nSTARTCHAR U_40A5\nENCODING 16549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nFC40\n27C0\n2500\n4500\n77C0\n5500\nD500\n54A0\n76A0\n0460\nENDCHAR\nSTARTCHAR U_40A6\nENCODING 16550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n2280\n2440\n4920\n7600\n5180\nD600\n5040\n7180\n0E00\nENDCHAR\nSTARTCHAR U_40A7\nENCODING 16551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFC00\n27E0\n2820\n4100\n7540\n5540\nD920\n5120\n7100\n0300\nENDCHAR\nSTARTCHAR U_40A8\nENCODING 16552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nFF00\n2400\n2400\n47E0\n7480\n5480\nD580\n54C0\n74A0\n0880\nENDCHAR\nSTARTCHAR U_40A9\nENCODING 16553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFC20\n2520\n2520\n47E0\n7520\n55A0\nD660\n5420\n7420\n07E0\nENDCHAR\nSTARTCHAR U_40AA\nENCODING 16554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFA80\n2280\n2AA0\n46C0\n7280\n56C0\nDAA0\n5280\n74A0\n08E0\nENDCHAR\nSTARTCHAR U_40AB\nENCODING 16555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n03E0\nFE20\n1540\n2080\n7940\n6EA0\nABC0\n3A80\n07E0\n0080\nENDCHAR\nSTARTCHAR U_40AC\nENCODING 16556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF780\n2480\n2680\n35A0\nC8E0\n1000\nFFE0\n0800\n1F80\n3080\n5F80\nENDCHAR\nSTARTCHAR U_40AD\nENCODING 16557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0100\nFFE0\n2280\n2440\n78A0\n6A80\nA900\n2900\n3A80\n0460\nENDCHAR\nSTARTCHAR U_40AE\nENCODING 16558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n2120\nF920\n22A0\nFA40\n7FE0\n1000\n3FC0\n5040\n9FC0\nENDCHAR\nSTARTCHAR U_40AF\nENCODING 16559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF880\n27E0\n2480\n4480\n77E0\n5480\nD480\n5480\n77E0\n0800\nENDCHAR\nSTARTCHAR U_40B0\nENCODING 16560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01A0\n0E20\nF2A0\n2FA0\n42A0\n72A0\nD7A0\n5AA0\n7220\n02A0\n0240\nENDCHAR\nSTARTCHAR U_40B1\nENCODING 16561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFA80\n2000\n27C0\n4440\n7440\n57C0\nD280\n52A0\n74A0\n08E0\nENDCHAR\nSTARTCHAR U_40B2\nENCODING 16562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7080\n23E0\nF8A0\n5120\nEA40\n7FE0\n0800\n1F80\n3080\n5F80\nENDCHAR\nSTARTCHAR U_40B3\nENCODING 16563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nFD40\n2540\n2540\n7BA0\n5100\nD7C0\n5100\n7100\n0FE0\nENDCHAR\nSTARTCHAR U_40B4\nENCODING 16564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n2FE0\n2000\n47C0\n7000\n57C0\nD000\n57C0\n7440\n07C0\nENDCHAR\nSTARTCHAR U_40B5\nENCODING 16565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF900\n2100\n2FE0\n4000\n77C0\n5440\nD540\n5100\n7280\n0460\nENDCHAR\nSTARTCHAR U_40B6\nENCODING 16566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0480\nFF80\n25E0\n24A0\n7FA0\n54A0\nDAA0\n5EA0\n7120\n0260\nENDCHAR\nSTARTCHAR U_40B7\nENCODING 16567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n0700\nF100\n2FE0\n4100\nF540\n5D60\n5540\n7D60\n0500\n0100\nENDCHAR\nSTARTCHAR U_40B8\nENCODING 16568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n0120\nF100\n2FE0\n2100\n7EA0\n5AC0\nDE80\n70A0\n0DA0\n0260\nENDCHAR\nSTARTCHAR U_40B9\nENCODING 16569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n23E0\n2540\n4280\n7300\n5D20\nD540\n5980\n7280\n0C60\nENDCHAR\nSTARTCHAR U_40BA\nENCODING 16570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0540\nFFC0\n2540\n27C0\n7900\n6FE0\nAB80\n2D40\n3920\n0100\nENDCHAR\nSTARTCHAR U_40BB\nENCODING 16571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nFC00\n27C0\n2400\n47C0\n7400\n5FE0\nD480\n54A0\n7540\n0620\nENDCHAR\nSTARTCHAR U_40BC\nENCODING 16572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n2280\n2540\n48A0\n77C0\n5080\nD240\n56A0\n7A40\n01C0\nENDCHAR\nSTARTCHAR U_40BD\nENCODING 16573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n01E0\nF900\n27C0\n2440\n77C0\n5440\nD7C0\n5100\n7FE0\n0100\nENDCHAR\nSTARTCHAR U_40BE\nENCODING 16574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nFFE0\n2540\n2540\n7BA0\n6900\nAB80\n2D40\n3920\n0100\nENDCHAR\nSTARTCHAR U_40BF\nENCODING 16575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF920\n2740\n2380\n4540\n7120\n57C0\nD440\n57C0\n7440\n07C0\nENDCHAR\nSTARTCHAR U_40C0\nENCODING 16576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2100\n27C0\n4140\nFFE0\n5140\n5FE0\n7440\n0380\n0440\nENDCHAR\nSTARTCHAR U_40C1\nENCODING 16577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF280\n2280\n2EE0\n4820\nF820\n5EE0\n5280\n7280\n0280\n0FE0\nENDCHAR\nSTARTCHAR U_40C2\nENCODING 16578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF420\n27E0\n2420\n47E0\nF000\n5480\n57E0\n7480\n06A0\n0440\nENDCHAR\nSTARTCHAR U_40C3\nENCODING 16579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nFAA0\n2920\n2FE0\n4920\nFFE0\n5A20\n5A20\n7BE0\n0820\n0860\nENDCHAR\nSTARTCHAR U_40C4\nENCODING 16580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0FE0\nF000\n27C0\n4440\nF7C0\n5100\n5540\n7920\n0100\n0300\nENDCHAR\nSTARTCHAR U_40C5\nENCODING 16581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nF180\n27E0\n4520\nF7E0\n5520\n57E0\n5100\n77E0\n0100\n0100\nENDCHAR\nSTARTCHAR U_40C6\nENCODING 16582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\n07E0\nF240\n23C0\n4240\nF3C0\n5240\n5240\n7FE0\n0240\n0420\nENDCHAR\nSTARTCHAR U_40C7\nENCODING 16583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n07C0\nF440\n27C0\n4440\nF7C0\n5100\n5FE0\n7920\n0960\n0100\nENDCHAR\nSTARTCHAR U_40C8\nENCODING 16584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n07E0\nF480\n26A0\n4440\nF200\n57C0\n5440\n77C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_40C9\nENCODING 16585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0440\nF7C0\n2480\n47E0\nF440\n57E0\n5440\n77C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_40CA\nENCODING 16586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n0FE0\nF440\n2000\n47C0\nF440\n57C0\n5440\n77C0\n0440\n0FE0\nENDCHAR\nSTARTCHAR U_40CB\nENCODING 16587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0280\nF440\n2BA0\n4000\nF720\n5560\n5760\n7560\n0720\n0560\nENDCHAR\nSTARTCHAR U_40CC\nENCODING 16588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF280\n2FE0\n4AA0\nFCE0\n5820\n5FE0\n7100\n07C0\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_40CD\nENCODING 16589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n0300\nFFE0\n2200\n4520\nFAC0\n55C0\n5AA0\n74A0\n0A80\n0100\nENDCHAR\nSTARTCHAR U_40CE\nENCODING 16590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nF7E0\n2280\n4540\nFBA0\n5500\n5280\n7D40\n0280\n0300\nENDCHAR\nSTARTCHAR U_40CF\nENCODING 16591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF820\n2FE0\n4820\nFFE0\n5500\n57E0\n7900\n0FE0\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_40D0\nENCODING 16592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0100\nFFE0\n2AA0\n2540\n7140\n5FE0\nD100\n5280\n7440\n0820\nENDCHAR\nSTARTCHAR U_40D1\nENCODING 16593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n04E0\n08A0\nFEA0\n4AA0\n4EA0\nEB00\nBEE0\nAAA0\nAEA0\nEA40\n16A0\nENDCHAR\nSTARTCHAR U_40D2\nENCODING 16594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF800\n23C0\n2240\n43C0\n7000\n57E0\nD6A0\n57E0\n7520\n0460\nENDCHAR\nSTARTCHAR U_40D3\nENCODING 16595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFC0\n2280\n27C0\n4100\n77C0\n5540\nD7C0\n5540\n7FE0\n0440\nENDCHAR\nSTARTCHAR U_40D4\nENCODING 16596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2420\n23C0\n4240\n73C0\n5000\nD7E0\n5420\n7420\n07E0\nENDCHAR\nSTARTCHAR U_40D5\nENCODING 16597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n14A0\n39C0\n5280\n2940\nFFE0\n8020\n7FC0\n0800\n1F80\n3080\n5F80\nENDCHAR\nSTARTCHAR U_40D6\nENCODING 16598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFC0\n2440\n27C0\n4440\n77E0\n5400\nD7E0\n5520\n7AA0\n00C0\nENDCHAR\nSTARTCHAR U_40D7\nENCODING 16599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E20\nF220\n2E20\n22A0\n5FA0\n74A0\n5EA0\nD4A0\n5E20\n7520\n0C60\nENDCHAR\nSTARTCHAR U_40D8\nENCODING 16600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nFAA0\n2FA0\n2940\n4F40\n7AA0\n5F20\nD100\n57C0\n7100\n0FE0\nENDCHAR\nSTARTCHAR U_40D9\nENCODING 16601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2540\n27E0\n4560\n77E0\n5480\nD7E0\n5680\n7BA0\n0AE0\nENDCHAR\nSTARTCHAR U_40DA\nENCODING 16602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nF280\n2FE0\n2480\n4740\n75E0\n5540\nD5E0\n5540\n7540\n0AA0\nENDCHAR\nSTARTCHAR U_40DB\nENCODING 16603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFBE0\n2480\n23E0\n4EA0\n77E0\n57E0\nD480\n57E0\n7480\n0BE0\nENDCHAR\nSTARTCHAR U_40DC\nENCODING 16604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9C0\nA140\nB940\nD220\nFDC0\nA940\nFC80\n0140\nFFC0\n3100\n5F00\nENDCHAR\nSTARTCHAR U_40DD\nENCODING 16605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n0780\nF2E0\n2FA0\n22A0\n73A0\n5D40\nD240\n5FA0\n72A0\n0720\nENDCHAR\nSTARTCHAR U_40DE\nENCODING 16606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n4940\n7B40\n21C0\n7260\n7FE0\n0800\n1F80\n6880\n0F80\nENDCHAR\nSTARTCHAR U_40DF\nENCODING 16607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A80\n1F80\nEAE0\n5FA0\n40A0\nEEA0\nAAA0\nAE40\nEA40\n0EA0\n0B20\nENDCHAR\nSTARTCHAR U_40E0\nENCODING 16608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nF4E0\n4E80\n4500\n44E0\n7740\nD540\n5560\n5540\n75C0\n0A60\nENDCHAR\nSTARTCHAR U_40E1\nENCODING 16609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFA40\n4FE0\n4240\n46C0\n7B60\nD7C0\n5440\n57C0\n7440\n07C0\nENDCHAR\nSTARTCHAR U_40E2\nENCODING 16610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFA80\n51E0\n4EA0\n4540\n7F40\nD540\n5E40\n5440\n76A0\n0D20\nENDCHAR\nSTARTCHAR U_40E3\nENCODING 16611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nF300\n4F80\n4280\n43C0\n7440\nD7E0\n58A0\n52A0\n7A20\n08C0\nENDCHAR\nSTARTCHAR U_40E4\nENCODING 16612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n4140\n4FE0\n4140\nF7C0\n5540\n57C0\n7540\n47C0\n0B40\nENDCHAR\nSTARTCHAR U_40E5\nENCODING 16613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n4440\n4280\n4FE0\nF540\n57C0\n5540\n77C0\n4100\n0FE0\nENDCHAR\nSTARTCHAR U_40E6\nENCODING 16614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFFE0\n4A40\n7D80\nD180\n3660\nFFE0\n1000\n3F80\nD080\n1F80\nENDCHAR\nSTARTCHAR U_40E7\nENCODING 16615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\nABA0\nD500\nB7E0\n8000\nFFE0\n1000\n3FC0\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_40E8\nENCODING 16616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1DE0\nE520\n45E0\n5C80\n53E0\nF2A0\n5FE0\n5480\n54A0\n64E0\n1BA0\nENDCHAR\nSTARTCHAR U_40E9\nENCODING 16617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n4AA0\n4FE0\n4AA0\n7FE0\nD400\n57E0\n56A0\n7A40\n0B20\nENDCHAR\nSTARTCHAR U_40EA\nENCODING 16618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n4440\n4740\n4540\n7540\nD7C0\n5240\n53C0\n7240\n0FE0\nENDCHAR\nSTARTCHAR U_40EB\nENCODING 16619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nFA40\n47E0\n4D40\n4720\n7480\nD7E0\n5400\n57E0\n7A20\n0BE0\nENDCHAR\nSTARTCHAR U_40EC\nENCODING 16620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0520\nF7E0\n4200\n47E0\n4520\n77E0\nD520\n57E0\n5140\n72A0\n0CE0\nENDCHAR\nSTARTCHAR U_40ED\nENCODING 16621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00A0\nF7E0\n4480\n47A0\n7560\nD740\n54A0\n5940\n7520\n4C60\n0BC0\nENDCHAR\nSTARTCHAR U_40EE\nENCODING 16622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF3E0\n4880\n47E0\n4140\nFFE0\n5480\n57E0\n7480\n4700\n18E0\nENDCHAR\nSTARTCHAR U_40EF\nENCODING 16623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBA0\n46C0\n4380\n76C0\n5BA0\nD100\n5FE0\n7380\n4540\n0920\nENDCHAR\nSTARTCHAR U_40F0\nENCODING 16624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n4820\n46E0\n4AA0\n7440\nDBA0\n5000\n5FE0\n7540\n0B20\nENDCHAR\nSTARTCHAR U_40F1\nENCODING 16625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nFF60\n4240\n4FE0\n4540\n7DC0\nD560\n5DC0\n5740\n7CA0\n0720\nENDCHAR\nSTARTCHAR U_40F2\nENCODING 16626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFEE0\n4AA0\n4F20\n4AE0\n7EA0\nD2C0\n5520\n5FE0\n72A0\n0FE0\nENDCHAR\nSTARTCHAR U_40F3\nENCODING 16627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n02A0\nF540\n42A0\n47E0\n44A0\nF560\n57E0\n5540\n57C0\n7560\n07A0\nENDCHAR\nSTARTCHAR U_40F4\nENCODING 16628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n0480\nFFE0\n40A0\n4FE0\n7080\nDFE0\n50A0\n5EE0\n7AA0\n0EE0\nENDCHAR\nSTARTCHAR U_40F5\nENCODING 16629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n4280\n43C0\n4280\nF7E0\n5AA0\n5520\n5CC0\n7540\n0620\nENDCHAR\nSTARTCHAR U_40F6\nENCODING 16630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n4000\n4FE0\n4AA0\n7FE0\nD540\n52A0\n5CC0\n7580\n0660\nENDCHAR\nSTARTCHAR U_40F7\nENCODING 16631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n4400\n47C0\n7440\nD7C0\n52E0\n5FA0\n7AE0\n4FA0\n12A0\nENDCHAR\nSTARTCHAR U_40F8\nENCODING 16632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nF560\n4AC0\n4FE0\n4540\n7DC0\nD560\n5DC0\n5740\n7CA0\n0720\nENDCHAR\nSTARTCHAR U_40F9\nENCODING 16633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nFAA0\n4AA0\n4EE0\n4920\nFFE0\n5D60\n5FE0\n7BA0\n4D60\n0920\nENDCHAR\nSTARTCHAR U_40FA\nENCODING 16634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF7E0\n4540\n47E0\n4540\n77E0\nD540\n5760\n7540\n4760\n0940\nENDCHAR\nSTARTCHAR U_40FB\nENCODING 16635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF100\n4FE0\n4BA0\n4540\n7FE0\nD2A0\n5FE0\n7AA0\n4FE0\n02A0\nENDCHAR\nSTARTCHAR U_40FC\nENCODING 16636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n1100\nF900\n0900\n1180\n3940\nD520\n1100\n1100\n1100\n1100\nENDCHAR\nSTARTCHAR U_40FD\nENCODING 16637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF100\n17E0\n2100\n77C0\nAC40\n2280\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_40FE\nENCODING 16638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\nF480\n1480\n24E0\n7780\nAC80\n2480\n24A0\n25A0\n2660\nENDCHAR\nSTARTCHAR U_40FF\nENCODING 16639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF100\n17C0\n2100\n7100\nAFE0\n2100\n2280\n2440\n3820\nENDCHAR\nSTARTCHAR U_4100\nENCODING 16640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2240\nFFE0\n1200\n2240\n7240\nAA80\n2100\n2100\n22A0\n2C40\nENDCHAR\nSTARTCHAR U_4101\nENCODING 16641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n2540\nF540\n1540\n2FE0\n7540\nAD40\n25C0\n2400\n2400\n27E0\nENDCHAR\nSTARTCHAR U_4102\nENCODING 16642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFE0\n1920\n2920\n7920\nAFE0\n2920\n2920\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_4103\nENCODING 16643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF7C0\n1540\n2540\n7540\nAFE0\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4104\nENCODING 16644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\nF920\n1FE0\n2920\n7920\nA920\n2AA0\n2A60\n2C20\n2FE0\nENDCHAR\nSTARTCHAR U_4105\nENCODING 16645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\n3F80\n0800\nFFE0\n1080\n2F40\nC020\n3FC0\n1500\n2480\n4C40\nENDCHAR\nSTARTCHAR U_4106\nENCODING 16646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\nF100\n1100\n2FE0\n7100\nAFC0\n2440\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_4107\nENCODING 16647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nF440\n17C0\n2000\n77C0\nA900\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_4108\nENCODING 16648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2000\nF7C0\n1440\n2440\n77C0\nA800\n2440\n2240\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_4109\nENCODING 16649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EC0\n24A0\nF480\n1FE0\n2480\n74A0\nA6C0\n2C80\n34A0\n2560\n2C20\nENDCHAR\nSTARTCHAR U_410A\nENCODING 16650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFE0\n1100\n2100\n77C0\nAA00\n2520\n2C40\n2440\n23C0\nENDCHAR\nSTARTCHAR U_410B\nENCODING 16651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF280\n1540\n2920\n77E0\nAD40\n27C0\n2540\n27C0\n20E0\nENDCHAR\nSTARTCHAR U_410C\nENCODING 16652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n25A0\nF240\n13A0\n2520\n77E0\nADA0\n25A0\n2240\n22A0\n2520\nENDCHAR\nSTARTCHAR U_410D\nENCODING 16653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2280\nF7C0\n1280\n2FE0\n7000\nAFC0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_410E\nENCODING 16654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\nF100\n1280\n2FE0\n7040\nAF40\n2540\n2740\n2040\n2080\nENDCHAR\nSTARTCHAR U_410F\nENCODING 16655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2FE0\nF440\n10C0\n2700\n7100\nAFE0\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4110\nENCODING 16656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nABC0\nFA40\nAA40\nFBC0\n0240\nFA00\n2220\n7220\nA9E0\n2000\nENDCHAR\nSTARTCHAR U_4111\nENCODING 16657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\nF700\n1500\n27C0\n74A0\n6A60\nA7C0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_4112\nENCODING 16658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFA80\n1540\n28A0\n77C0\nA280\n2140\n2D20\n3440\n23C0\nENDCHAR\nSTARTCHAR U_4113\nENCODING 16659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2200\nF7E0\n1420\n27E0\n7420\nAFE0\n2100\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_4114\nENCODING 16660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2700\nF100\n17C0\n2540\n7540\nAFE0\n2920\n29E0\n2B20\n2860\nENDCHAR\nSTARTCHAR U_4115\nENCODING 16661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2120\nF540\n1380\n2540\n7120\nAFC0\n2540\n27C0\n2540\n27C0\nENDCHAR\nSTARTCHAR U_4116\nENCODING 16662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF280\n1440\n2BA0\n5000\nAE20\n2AA0\n2EA0\n2AA0\n2E20\n2AE0\nENDCHAR\nSTARTCHAR U_4117\nENCODING 16663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2540\nF540\n17C0\n2440\n77C0\nA440\n27C0\n2540\n2540\n2940\nENDCHAR\nSTARTCHAR U_4118\nENCODING 16664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\nF7C0\n1280\n2FE0\n7220\nB7C0\n2200\n2380\n2480\n2980\nENDCHAR\nSTARTCHAR U_4119\nENCODING 16665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF820\n17E0\n2440\n47C0\nE440\n57C0\n4100\n4FE0\n4280\n4440\nENDCHAR\nSTARTCHAR U_411A\nENCODING 16666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\nF280\n1FE0\n2AA0\n7AA0\nAFE0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_411B\nENCODING 16667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\nFD60\n27C0\n7100\nA7C0\n2540\n2FE0\n2280\n2100\n26C0\nENDCHAR\nSTARTCHAR U_411C\nENCODING 16668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n4FE0\nF540\n16C0\n27C0\n7100\nAFE0\n2920\n29A0\n2EA0\n2860\nENDCHAR\nSTARTCHAR U_411D\nENCODING 16669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27E0\nF900\n13C0\n2100\n77E0\nA280\n2C60\n26C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_411E\nENCODING 16670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2360\nF5A0\n1640\n2A40\n77A0\nA800\n27C0\n2100\n2540\n2B20\nENDCHAR\nSTARTCHAR U_411F\nENCODING 16671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n3C00\n17C0\nF4A0\n1FE0\n0000\n3F80\n0000\nFFE0\n1480\n6C60\nENDCHAR\nSTARTCHAR U_4120\nENCODING 16672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\nFFE0\n2540\n2740\n7440\nA7C0\n2480\n2780\n2480\n2FE0\nENDCHAR\nSTARTCHAR U_4121\nENCODING 16673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n2480\nFFE0\n2A40\n6FE0\n7800\nABC0\n2800\n2BC0\n2A40\n33C0\nENDCHAR\nSTARTCHAR U_4122\nENCODING 16674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF480\n2360\n2EC0\n76A0\nAA80\n27C0\n2440\n27C0\n2840\nENDCHAR\nSTARTCHAR U_4123\nENCODING 16675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF100\n2FE0\n6AA0\n7FE0\nA440\n27C0\n2440\n27C0\n2820\nENDCHAR\nSTARTCHAR U_4124\nENCODING 16676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42E0\n2F60\nF2A0\n2FE0\n6AA0\n7FE0\nA2A0\n27E0\n26C0\n2AA0\n2320\nENDCHAR\nSTARTCHAR U_4125\nENCODING 16677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\nFFE0\n2BA0\n2540\n7FE0\nAAA0\n2FE0\n2540\n2BA0\n2FE0\nENDCHAR\nSTARTCHAR U_4126\nENCODING 16678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\nE7E0\n2040\nF880\n2080\n7080\n6880\nA080\n2080\n2080\n2380\nENDCHAR\nSTARTCHAR U_4127\nENCODING 16679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37C0\nE240\n2240\nFA80\n22E0\n7220\n6A20\nA220\n2220\n24A0\n2840\nENDCHAR\nSTARTCHAR U_4128\nENCODING 16680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nE3E0\n2080\nF880\n27E0\n7080\n6880\nA080\n2080\n2080\n2380\nENDCHAR\nSTARTCHAR U_4129\nENCODING 16681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3200\nE280\n2240\nF200\n2FE0\n7200\n6A00\nA100\n2100\n2080\n2060\nENDCHAR\nSTARTCHAR U_412A\nENCODING 16682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE100\n23E0\nFA20\n2420\n7220\n6920\nA120\n2020\n2020\n20C0\nENDCHAR\nSTARTCHAR U_412B\nENCODING 16683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3000\nE7C0\n2040\nF840\n27C0\n7440\n6C00\nA400\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_412C\nENCODING 16684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nE500\n2500\nF5C0\n2F40\n7540\n6540\nA5C0\n2500\n2420\n27E0\nENDCHAR\nSTARTCHAR U_412D\nENCODING 16685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n30C0\nE700\n2100\nF900\n27E0\n7100\n6900\nA100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_412E\nENCODING 16686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nE100\n27C0\nF900\n2100\n77E0\n6900\nA280\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_412F\nENCODING 16687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3800\nE7E0\n2240\nFA40\n2240\n7FE0\n6A40\nA240\n2240\n2440\n2840\nENDCHAR\nSTARTCHAR U_4130\nENCODING 16688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\n63E0\n2040\nFA40\n2240\n73E0\n68C0\nA140\n2140\n2240\n24C0\nENDCHAR\nSTARTCHAR U_4131\nENCODING 16689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\n6080\n27E0\nF900\n2100\n71E0\n6920\nA220\n2220\n2420\n28C0\nENDCHAR\nSTARTCHAR U_4132\nENCODING 16690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1A00\n6100\n2100\nFFE0\n2520\n75A0\n6D60\nA620\n2420\n2420\n2460\nENDCHAR\nSTARTCHAR U_4133\nENCODING 16691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1880\n6080\n2080\nFA80\n22E0\n7280\n6A80\nAA80\n2280\n2280\n27E0\nENDCHAR\nSTARTCHAR U_4134\nENCODING 16692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\n63E0\n2220\nFA20\n23E0\n7220\n6A20\nA3E0\n2220\n2420\n2860\nENDCHAR\nSTARTCHAR U_4135\nENCODING 16693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\n3C00\n0400\nFFE0\n0D00\n3480\nC460\n3F80\n2400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_4136\nENCODING 16694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1A80\n67E0\n22A0\nFFE0\n2A80\n7FE0\n6AA0\nA2A0\n22E0\n2480\n2880\nENDCHAR\nSTARTCHAR U_4137\nENCODING 16695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\n67E0\n2100\nFA00\n23C0\n7640\n6A40\nB240\n2240\n2240\n23C0\nENDCHAR\nSTARTCHAR U_4138\nENCODING 16696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1880\n6100\n27E0\nFC20\n2420\n77E0\n6C20\nA420\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_4139\nENCODING 16697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\n3C00\n0400\nFFE0\n2480\nCA60\n3180\nDF60\n0400\n3F80\n0400\nENDCHAR\nSTARTCHAR U_413A\nENCODING 16698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\n67E0\n2100\nF7E0\n2120\n77E0\n6D00\nA7E0\n2120\n2280\n2C60\nENDCHAR\nSTARTCHAR U_413B\nENCODING 16699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1A80\n6280\n2AA0\nF6C0\n2280\n7280\n6EC0\nAAA0\n2280\n24A0\n2860\nENDCHAR\nSTARTCHAR U_413C\nENCODING 16700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1BE0\n6080\n2080\nFBE0\n22A0\n72A0\n6AA0\nA360\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_413D\nENCODING 16701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n6280\n2FE0\nFAA0\n2AA0\n7AA0\n6AE0\nAC20\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_413E\nENCODING 16702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n18A0\n67E0\n2080\nFA80\n22A0\n77A0\n6AC0\nA280\n24A0\n2560\n2A20\nENDCHAR\nSTARTCHAR U_413F\nENCODING 16703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\n67E0\n2520\nFFE0\n2520\n77E0\n6900\nA140\n20A0\n2360\n2C20\nENDCHAR\nSTARTCHAR U_4140\nENCODING 16704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3020\nEF20\n2420\nF4A0\n26A0\n7AA0\n6AA0\nA6A0\n2220\n2420\n2860\nENDCHAR\nSTARTCHAR U_4141\nENCODING 16705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8920\n3F80\n1200\n6DC0\n0F00\n3400\nFFE0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_4142\nENCODING 16706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3200\nE200\n27C0\nFA40\n2180\n7240\n6C20\nA3C0\n2240\n2240\n23C0\nENDCHAR\nSTARTCHAR U_4143\nENCODING 16707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2240\n2340\n3AC0\nC460\n0300\n3C00\n0400\nFFE0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_4144\nENCODING 16708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3200\nE200\n27C0\nFA40\n2240\n74C0\n6880\nBFE0\n2AA0\n2AA0\n3760\nENDCHAR\nSTARTCHAR U_4145\nENCODING 16709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nE100\n27C0\nF900\n2100\n77E0\n6900\nA7C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_4146\nENCODING 16710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nE100\n29E0\nF620\n2080\n7280\n6C80\nA480\n2540\n2220\n2420\nENDCHAR\nSTARTCHAR U_4147\nENCODING 16711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n7FC0\n0000\n3F80\n0400\nFFE0\n2480\nC460\nENDCHAR\nSTARTCHAR U_4148\nENCODING 16712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n7F80\n0400\nFFE0\n2080\nDF60\n0400\n7FC0\n0D00\n1480\n6440\nENDCHAR\nSTARTCHAR U_4149\nENCODING 16713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\nE7E0\n2280\nFA80\n2280\n7AA0\n6EC0\nA280\n2280\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_414A\nENCODING 16714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nE7E0\n2400\nFCC0\n2780\n7480\n6FE0\nA480\n2480\n28A0\n28E0\nENDCHAR\nSTARTCHAR U_414B\nENCODING 16715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3200\nE380\n2480\nFFC0\n2540\n7540\n6FC0\nA280\n2280\n24A0\n28E0\nENDCHAR\nSTARTCHAR U_414C\nENCODING 16716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n33C0\nE240\n23C0\nF800\n27E0\n7420\n6FE0\nA420\n27E0\n2420\n2460\nENDCHAR\nSTARTCHAR U_414D\nENCODING 16717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3000\nEE60\n22C0\nF240\n2440\n77E0\n6A40\nAA40\n26E0\n2500\n28E0\nENDCHAR\nSTARTCHAR U_414E\nENCODING 16718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n30C0\nE700\n2100\nFFE0\n2540\n7920\n6FC0\nA240\n2260\n2420\n28C0\nENDCHAR\nSTARTCHAR U_414F\nENCODING 16719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\nE440\n27C0\nFC00\n25C0\n6700\n75C0\nAF00\n25C0\n2B20\n28E0\nENDCHAR\nSTARTCHAR U_4150\nENCODING 16720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\nE440\n27C0\nFC40\n27C0\n6440\n77C0\nAA80\n2280\n24A0\n28E0\nENDCHAR\nSTARTCHAR U_4151\nENCODING 16721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n18E0\nE720\n24A0\nFAC0\n2200\n77E0\n6A40\nA240\n2680\n21C0\n2E20\nENDCHAR\nSTARTCHAR U_4152\nENCODING 16722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1A40\nE240\n27E0\nFA40\n2100\n67E0\n7200\nAA00\n2200\n2200\n23E0\nENDCHAR\nSTARTCHAR U_4153\nENCODING 16723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3400\nE5E0\n2EA0\nF2A0\n2EA0\n7AA0\n6A40\nAE40\n22A0\n22A0\n2720\nENDCHAR\nSTARTCHAR U_4154\nENCODING 16724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3AA0\nE2A0\n2540\nFD40\n22A0\n77E0\nACA0\nA7E0\n24A0\n24A0\n27E0\nENDCHAR\nSTARTCHAR U_4155\nENCODING 16725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\nE420\n27E0\nFC80\n6480\n77E0\nAC80\n27E0\n2620\n2A20\n2BE0\nENDCHAR\nSTARTCHAR U_4156\nENCODING 16726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nEFE0\n2280\nF540\n2FE0\n7540\nBFC0\nA540\n27C0\n2120\n20E0\nENDCHAR\nSTARTCHAR U_4157\nENCODING 16727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n19C0\nE700\n2100\nFFE0\n2540\n7920\n6FE0\nA240\n2640\n2180\n2660\nENDCHAR\nSTARTCHAR U_4158\nENCODING 16728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nE100\n27E0\nFD40\n2540\n7BA0\n6900\nA380\n2540\n2920\n2100\nENDCHAR\nSTARTCHAR U_4159\nENCODING 16729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\nE440\n27C0\nFC40\n27C0\n7480\n6CE0\nA780\n2480\n25A0\n26E0\nENDCHAR\nSTARTCHAR U_415A\nENCODING 16730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3920\nE540\n27E0\nF900\n2FE0\n7440\n6BE0\nA240\n22C0\n2220\n21E0\nENDCHAR\nSTARTCHAR U_415B\nENCODING 16731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\nE440\n27C0\nFC40\n27C0\n7000\n6FE0\nA820\n2FE0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_415C\nENCODING 16732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n30C0\nE700\n2100\nFFE0\n2540\n7FE0\nA540\n2540\n2FE0\n2100\n27C0\nENDCHAR\nSTARTCHAR U_415D\nENCODING 16733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1A00\nE100\n2FE0\nFAA0\n2440\n6820\n77C0\nA900\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_415E\nENCODING 16734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37C0\nE540\n2640\nF7C0\n2000\n67C0\n7080\nAFE0\n2880\n2480\n2180\nENDCHAR\nSTARTCHAR U_415F\nENCODING 16735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1A80\nE440\n27C0\nF100\n2FE0\n7280\n6D40\nAAA0\n2340\n2080\n2700\nENDCHAR\nSTARTCHAR U_4160\nENCODING 16736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1BC0\nE240\n23C0\nFA40\n23C0\n7000\nAFE0\n2100\n25C0\n2700\n29E0\nENDCHAR\nSTARTCHAR U_4161\nENCODING 16737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37E0\nE100\n27C0\nFC40\n27C0\n7440\n6FC0\nA440\n27C0\n2280\n2460\nENDCHAR\nSTARTCHAR U_4162\nENCODING 16738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3100\nEFE0\n2920\nFFE0\n2920\n6FE0\nB440\nA7C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_4163\nENCODING 16739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nE7C0\n24C0\nF740\n27C0\n7000\n6FC0\nA100\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_4164\nENCODING 16740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37C0\nE100\n2140\nFFE0\n2100\n6D60\n7920\nAD60\n2920\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_4165\nENCODING 16741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37C0\nE440\n27C0\nF440\n27C0\n6200\n77E0\nAD20\n26A0\n27E0\n2040\nENDCHAR\nSTARTCHAR U_4166\nENCODING 16742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3240\nE7E0\n2240\nF240\n2000\n77E0\n6D20\nA7E0\n2520\n27E0\n2420\nENDCHAR\nSTARTCHAR U_4167\nENCODING 16743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nEFE0\n2440\nF280\n2FE0\n7000\n6FC0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_4168\nENCODING 16744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n31C0\nE700\n2100\nFFE0\n2540\n6920\n77C0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_4169\nENCODING 16745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nEFE0\n2100\nF7C0\n2240\n7180\n6FE0\nA440\n27C0\n2440\n2820\nENDCHAR\nSTARTCHAR U_416A\nENCODING 16746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nE7C0\n2540\nF7C0\n2100\n6FE0\n7440\nA540\n2540\n26C0\n2C60\nENDCHAR\nSTARTCHAR U_416B\nENCODING 16747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nEFE0\n2000\nF7C0\n2440\n67C0\n7440\nA7C0\n2540\n2520\n2B20\nENDCHAR\nSTARTCHAR U_416C\nENCODING 16748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3440\nE280\n2FE0\nF280\n2240\n7420\n6820\nAFE0\n2AA0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_416D\nENCODING 16749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nEFE0\n2440\nF280\n2FE0\n6920\n77C0\nA200\n23C0\n2440\n2980\nENDCHAR\nSTARTCHAR U_416E\nENCODING 16750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nE280\n27C0\nF820\n27C0\n6440\n77C0\nA440\n27C0\n2A40\n33C0\nENDCHAR\nSTARTCHAR U_416F\nENCODING 16751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nEFE0\n2940\nFFE0\n2940\n6BC0\n7900\nABC0\n2A40\n2BC0\n3240\nENDCHAR\nSTARTCHAR U_4170\nENCODING 16752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37E0\nE520\n27E0\nF5A0\n6660\n77E0\n6000\nA540\n2AA0\n2A40\n21C0\nENDCHAR\nSTARTCHAR U_4171\nENCODING 16753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nE540\n27C0\nF000\n2FE0\n7000\n67C0\nA440\n27C0\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_4172\nENCODING 16754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nE7C0\n2140\nF7E0\n2340\n7580\n6FE0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_4173\nENCODING 16755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n33E0\n64A0\n22A0\nF3E0\n2120\n77E0\n64A0\nAAA0\n23E0\n2120\n2660\nENDCHAR\nSTARTCHAR U_4174\nENCODING 16756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nEFE0\n2100\nFFE0\n2AA0\n6700\n7280\nAFC0\n2580\n2540\n2B40\nENDCHAR\nSTARTCHAR U_4175\nENCODING 16757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3440\nE280\n2FE0\nF100\n67C0\n7100\n6140\nAFE0\n2540\n2AA0\n2AA0\nENDCHAR\nSTARTCHAR U_4176\nENCODING 16758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\nE800\n2FC0\nF800\n2FE0\n7AA0\nAAC0\n2A40\n2FE0\n3240\n20C0\nENDCHAR\nSTARTCHAR U_4177\nENCODING 16759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3440\nEEE0\n2540\nF280\n2440\n6BA0\n7100\nAFE0\n2540\n2520\n2B20\nENDCHAR\nSTARTCHAR U_4178\nENCODING 16760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3440\nEEE0\n2440\nF100\n2FE0\n6440\n7280\nAFE0\n2100\n27C0\n2100\nENDCHAR\nSTARTCHAR U_4179\nENCODING 16761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nE7C0\n2540\nFFE0\n2540\n77C0\n6540\nAFE0\n2480\n2380\n2C60\nENDCHAR\nSTARTCHAR U_417A\nENCODING 16762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\nE280\n2FE0\nFAA0\n2FE0\n6000\n77C0\nA000\n2FE0\n2540\n2920\nENDCHAR\nSTARTCHAR U_417B\nENCODING 16763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nEFE0\n2280\nF920\n2AA0\n6FE0\n7100\nAFE0\n2960\n2FA0\n2860\nENDCHAR\nSTARTCHAR U_417C\nENCODING 16764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37C0\nE4C0\n2740\nFFE0\n2AA0\n6FE0\n7000\nA7C0\n2240\n2180\n2E60\nENDCHAR\nSTARTCHAR U_417D\nENCODING 16765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFD40\n1220\n7DC0\n5540\n7C80\n4F60\n8400\nFFE0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_417E\nENCODING 16766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37E0\nE540\n2FE0\nF6C0\n2B60\n6240\n77C0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_417F\nENCODING 16767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3440\nEEE0\n2440\nFFE0\n2540\n6FE0\n7540\nAFE0\n2100\n27C0\n2100\nENDCHAR\nSTARTCHAR U_4180\nENCODING 16768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\nED60\n2BA0\nFFE0\n6100\n77C0\nA100\n2FE0\n2D40\n2AA0\n32A0\nENDCHAR\nSTARTCHAR U_4181\nENCODING 16769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\nEAA0\n2D60\nF7C0\n2100\n6FE0\n7440\nAFE0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_4182\nENCODING 16770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nEFE0\n2A40\nFFE0\n2A80\n7FE0\n6AA0\nAFE0\n2AC0\n2EA0\n3AA0\nENDCHAR\nSTARTCHAR U_4183\nENCODING 16771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8500\n5FC0\nEA80\n2D80\n2A80\nFFE0\n0F00\n3400\nFFE0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_4184\nENCODING 16772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3140\nEFE0\n2440\nF5C0\n2540\n65C0\n7440\nA7C0\n2580\n2680\n2FE0\nENDCHAR\nSTARTCHAR U_4185\nENCODING 16773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nEDE0\n2280\nFD40\n2220\n77C0\n6540\nA6C0\n2540\n27C0\n2820\nENDCHAR\nSTARTCHAR U_4186\nENCODING 16774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3380\nE280\n2380\nFEE0\n2AA0\n6EE0\n7100\nAFE0\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_4187\nENCODING 16775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\nEA40\n2F40\nF940\n2F40\n7940\n6FC0\nA840\n2FC0\n2AA0\n3520\nENDCHAR\nSTARTCHAR U_4188\nENCODING 16776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nC420\n57E0\nFEA0\n55C0\nF6A0\nD5E0\n5680\n5BE0\n6480\n43E0\nENDCHAR\nSTARTCHAR U_4189\nENCODING 16777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\nEAA0\n2FE0\nF480\n2AE0\n7E80\n6A60\nAE80\n2AE0\n2E80\n3260\nENDCHAR\nSTARTCHAR U_418A\nENCODING 16778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\nEEE0\n2280\nFFE0\n2540\n77C0\nA540\n27C0\n2280\n2FE0\n2440\nENDCHAR\nSTARTCHAR U_418B\nENCODING 16779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3780\nE900\n2EE0\nFAA0\n2FE0\n72A0\nAAE0\n26A0\n2BE0\n2600\n29E0\nENDCHAR\nSTARTCHAR U_418C\nENCODING 16780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3EA0\nE5E0\n2E80\nF5A0\n2E60\n7500\nAFE0\n2000\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_418D\nENCODING 16781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n34E0\nEF80\n2AE0\nFF20\n20E0\n6E80\n7AE0\nAE80\n2AE0\n2E80\n3260\nENDCHAR\nSTARTCHAR U_418E\nENCODING 16782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AC0\nCAA0\n5580\nEFE0\n5A80\nEBA0\nDAA0\n4BC0\n5A40\n4FE0\n5920\nENDCHAR\nSTARTCHAR U_418F\nENCODING 16783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3540\nEFE0\n2540\nFBA0\n2540\n77C0\nA540\n27C0\n2280\n2FE0\n2440\nENDCHAR\nSTARTCHAR U_4190\nENCODING 16784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\nFFE0\n2E80\nD560\n7FC0\nD560\n6DA0\nFBE0\nAAA0\nENDCHAR\nSTARTCHAR U_4191\nENCODING 16785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n4040\n8020\n7FE0\n0400\n0400\n0400\n1400\n0C00\nENDCHAR\nSTARTCHAR U_4192\nENCODING 16786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n9140\n2900\nC8C0\n7F00\n0900\n2900\n1100\n2920\nC8E0\nENDCHAR\nSTARTCHAR U_4193\nENCODING 16787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2900\nC8C0\n1100\n3F80\n1280\n1200\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_4194\nENCODING 16788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2500\nC4C0\n3F80\n2480\n3F80\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_4195\nENCODING 16789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFFE0\n9140\n2900\nC8E0\n3F80\n0880\nFFE0\n1100\n2080\nC040\nENDCHAR\nSTARTCHAR U_4196\nENCODING 16790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n90A0\n2860\nC800\n3FC0\n1000\n1200\n2400\n4880\n9FC0\nENDCHAR\nSTARTCHAR U_4197\nENCODING 16791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n20C0\nC000\n7A40\n4A40\n4A40\n7BC0\n4840\n0040\nENDCHAR\nSTARTCHAR U_4198\nENCODING 16792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n9120\n20E0\nFF80\n2480\n3F80\n2480\n3F80\n0400\n0400\nENDCHAR\nSTARTCHAR U_4199\nENCODING 16793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n20E0\nC080\n7FC0\n0400\n2700\n2400\n2440\nFFE0\nENDCHAR\nSTARTCHAR U_419A\nENCODING 16794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA120\n40E0\nBF80\n2080\n2E80\n2080\n2E80\n2A80\n2E80\nENDCHAR\nSTARTCHAR U_419B\nENCODING 16795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\nA0A0\n4060\n8180\nF700\n9100\n9FE0\nF100\n9120\n01E0\nENDCHAR\nSTARTCHAR U_419C\nENCODING 16796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n24E0\nC400\n3FC0\n1880\n6F80\n0880\n0F80\n1080\nENDCHAR\nSTARTCHAR U_419D\nENCODING 16797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n20E0\nC800\n1080\n7FC0\n4A40\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_419E\nENCODING 16798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n7FE0\nA680\n3880\n3F80\n2000\n3F80\n2040\n1FC0\nENDCHAR\nSTARTCHAR U_419F\nENCODING 16799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n64C0\n0A00\n3180\nDF60\n0000\n1F00\n1100\n1F00\nENDCHAR\nSTARTCHAR U_41A0\nENCODING 16800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n20E0\nFF80\n2400\n3F00\n2100\n3F00\n2480\n3FC0\nENDCHAR\nSTARTCHAR U_41A1\nENCODING 16801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n4460\nBF80\n2680\n3880\n3FC0\n2480\n2B00\n30C0\nENDCHAR\nSTARTCHAR U_41A2\nENCODING 16802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n90A0\n6060\n2100\nF3C0\n2140\n37E0\nE140\n2220\n6420\nENDCHAR\nSTARTCHAR U_41A3\nENCODING 16803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n3F80\nE040\n3F80\n2000\n3FC0\n2940\n4C80\n9860\nENDCHAR\nSTARTCHAR U_41A4\nENCODING 16804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\nA4A0\n5F60\n9500\n1B00\n1500\n1B40\n7D80\n0700\n3900\nENDCHAR\nSTARTCHAR U_41A5\nENCODING 16805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA120\n40C0\nFFC0\n0840\n7480\n0F00\n7500\n0C80\n7460\nENDCHAR\nSTARTCHAR U_41A6\nENCODING 16806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFFE0\nA120\n44C0\nA480\n1B00\nE0E0\n0400\n2480\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_41A7\nENCODING 16807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\nCF60\n1400\n7FC0\n1500\n2480\nFFE0\n0900\n7FC0\nENDCHAR\nSTARTCHAR U_41A8\nENCODING 16808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nB2A0\n54C0\n9FA0\n0000\n3F80\n0400\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_41A9\nENCODING 16809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nB5A0\n5940\n9320\n1500\n1F00\n0400\nFFE0\n1900\nE0C0\nENDCHAR\nSTARTCHAR U_41AA\nENCODING 16810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7540\n2260\nFC00\n53C0\n5100\n5100\n57E0\n5020\n9FE0\nENDCHAR\nSTARTCHAR U_41AB\nENCODING 16811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n5060\nBF80\n4A80\n1A80\n6E80\n29C0\nA4A0\n9FA0\nENDCHAR\nSTARTCHAR U_41AC\nENCODING 16812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n6EC0\n0A00\n1F00\n1500\n1B00\n1500\n1F00\n2080\nENDCHAR\nSTARTCHAR U_41AD\nENCODING 16813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n90A0\n6040\n1000\nFFC0\n5480\n7FE0\n5480\nFE80\n1080\nENDCHAR\nSTARTCHAR U_41AE\nENCODING 16814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n90A0\n67E0\n4080\n2380\nC080\n2FE0\n2AA0\nC100\n4EC0\nENDCHAR\nSTARTCHAR U_41AF\nENCODING 16815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n60C0\nFFE0\n5140\nFBE0\n5140\nFFE0\n1100\n7EC0\nENDCHAR\nSTARTCHAR U_41B0\nENCODING 16816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n90A0\n6080\n7FE0\n4900\n4F00\n4000\n5DC0\n5540\n7FE0\nENDCHAR\nSTARTCHAR U_41B1\nENCODING 16817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\nE0E0\n4100\n2540\n8280\n5560\n2540\nC280\n4C60\nENDCHAR\nSTARTCHAR U_41B2\nENCODING 16818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA8A0\nC460\n3FC0\n2480\n3FC0\n2480\n3F80\n4D00\nB4C0\nENDCHAR\nSTARTCHAR U_41B3\nENCODING 16819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n60C0\n4780\n2100\nF340\n2DC0\n22A0\nFD00\n03E0\nENDCHAR\nSTARTCHAR U_41B4\nENCODING 16820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nAB20\n52C0\n9F00\n1500\n3F80\n2480\n3F80\n24A0\n1FE0\nENDCHAR\nSTARTCHAR U_41B5\nENCODING 16821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\nCA60\n7FC0\n5540\n7FC0\n1100\n1F00\n1100\n1F00\nENDCHAR\nSTARTCHAR U_41B6\nENCODING 16822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA120\nD4C0\n2200\nFFC0\n2200\n3FC0\n2200\n7FC0\n8920\nENDCHAR\nSTARTCHAR U_41B7\nENCODING 16823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n90A0\n6F60\n0200\n7F80\n1500\n7FE0\n59A0\n6F60\n4020\nENDCHAR\nSTARTCHAR U_41B8\nENCODING 16824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n60C0\n5E80\n5140\n3F80\nD160\n1F00\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_41B9\nENCODING 16825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9920\n64C0\n1F00\n0A00\n7FC0\n1500\n1F00\n1500\n7FC0\nENDCHAR\nSTARTCHAR U_41BA\nENCODING 16826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n7FE0\n90A0\n6F60\n3480\n1500\n7FC0\n3580\nDF60\n1500\n1F00\nENDCHAR\nSTARTCHAR U_41BB\nENCODING 16827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8920\n70C0\n1100\nFDE0\n6B40\n5940\n6880\nF940\n0A20\nENDCHAR\nSTARTCHAR U_41BC\nENCODING 16828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n67C0\n2440\nF5C0\n2540\n2FE0\n2AA0\nFAA0\n0FE0\nENDCHAR\nSTARTCHAR U_41BD\nENCODING 16829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n6EC0\n0800\n7FC0\n4900\n7FC0\n4C80\n7700\n9AC0\nENDCHAR\nSTARTCHAR U_41BE\nENCODING 16830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n90A0\nE260\n7BC0\n5400\n79C0\n4800\n7F80\n5280\nFFE0\nENDCHAR\nSTARTCHAR U_41BF\nENCODING 16831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n90A0\n6260\n57C0\n7540\n16C0\n7540\n5FE0\n5540\n9920\nENDCHAR\nSTARTCHAR U_41C0\nENCODING 16832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n9120\n6080\n2BE0\nFD40\n29C0\n7D40\n55E0\nFF40\n1040\nENDCHAR\nSTARTCHAR U_41C1\nENCODING 16833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8920\n70C0\n5140\nFFE0\n5480\n7DC0\n5480\n7FE0\nAA80\nENDCHAR\nSTARTCHAR U_41C2\nENCODING 16834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\n7FC0\n2080\n1100\nFFE0\n0400\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_41C3\nENCODING 16835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n43C0\n2240\nFA40\n0240\n8BC0\n4A40\n5200\n3A00\nC220\n01E0\nENDCHAR\nSTARTCHAR U_41C4\nENCODING 16836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2240\nFBE0\n0400\n9000\n53C0\n6080\n0100\n3A00\nC420\n03E0\nENDCHAR\nSTARTCHAR U_41C5\nENCODING 16837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2140\nF920\n07E0\n8900\n4900\n5140\n4180\n3900\nC2A0\n0C60\nENDCHAR\nSTARTCHAR U_41C6\nENCODING 16838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n4280\n2180\nFC80\n0280\n8A80\n57E0\n5080\n3880\nC080\n0080\nENDCHAR\nSTARTCHAR U_41C7\nENCODING 16839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\n47E0\n2420\nFFE0\n0480\n9480\n57E0\n6480\n3C80\nC6A0\n0460\nENDCHAR\nSTARTCHAR U_41C8\nENCODING 16840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n4240\n2280\nF900\n0280\n8960\n5100\n57C0\n3900\nC100\n0FE0\nENDCHAR\nSTARTCHAR U_41C9\nENCODING 16841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\n47E0\n2100\nF900\n9200\n57C0\n6A40\n3240\nC240\n03C0\n0240\nENDCHAR\nSTARTCHAR U_41CA\nENCODING 16842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n4480\n27E0\nFC00\n0480\n9480\n5500\n6500\n3640\nCBE0\n1020\nENDCHAR\nSTARTCHAR U_41CB\nENCODING 16843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n41C0\n2640\nF980\n0100\n96E0\n5120\n66C0\n3840\nC180\n0E00\nENDCHAR\nSTARTCHAR U_41CC\nENCODING 16844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n44A0\n22A0\nFAC0\n07E0\n9420\n57E0\n6C20\n37E0\nC420\n0860\nENDCHAR\nSTARTCHAR U_41CD\nENCODING 16845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\n4220\n2220\nFBE0\n0080\n8A80\n4AE0\n5280\n3A80\nC380\n0CE0\nENDCHAR\nSTARTCHAR U_41CE\nENCODING 16846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n43E0\n2140\nF940\n03E0\n9000\n53E0\n6220\n3BE0\nC220\n03E0\nENDCHAR\nSTARTCHAR U_41CF\nENCODING 16847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n4FE0\n2000\nFFC0\n9440\n57C0\n6000\n37C0\nC080\n0FE0\n0180\nENDCHAR\nSTARTCHAR U_41D0\nENCODING 16848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n0140\nFFE0\n0140\n97C0\n5120\n63C0\n3540\nC920\n0300\nENDCHAR\nSTARTCHAR U_41D1\nENCODING 16849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27E0\n04A0\nFFE0\n04A0\n97E0\n5280\n6480\n3FE0\nC080\n0080\nENDCHAR\nSTARTCHAR U_41D2\nENCODING 16850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\nB280\nD480\nFFE0\nA180\nF6E0\n0400\n7FC0\n2080\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_41D3\nENCODING 16851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37E0\nC100\n37C0\nC540\n3540\nCFC0\n0420\n7FC0\n2080\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_41D4\nENCODING 16852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2000\n3F80\n2080\n3F80\nE5C0\nBF40\nEBC0\nA540\nBE60\nENDCHAR\nSTARTCHAR U_41D5\nENCODING 16853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n0FE0\nFD60\n9380\n9540\n5FE0\n6200\n3FE0\nCAA0\n0AE0\nENDCHAR\nSTARTCHAR U_41D6\nENCODING 16854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\n5280\n8C40\n2000\n3FC0\nC840\n0840\n1040\n6280\n0100\nENDCHAR\nSTARTCHAR U_41D7\nENCODING 16855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\n5280\n8C40\n0200\n1100\n2480\nC860\n1100\n2380\n3C80\nENDCHAR\nSTARTCHAR U_41D8\nENCODING 16856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\n9480\nFFE0\n1000\n1F00\n2100\n2100\n3E00\n0200\nFFE0\nENDCHAR\nSTARTCHAR U_41D9\nENCODING 16857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\nA280\n1440\n7C40\n0540\n7D40\n4140\n7D40\n0440\n38C0\nENDCHAR\nSTARTCHAR U_41DA\nENCODING 16858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n5280\n8C40\n1100\n2100\nE180\n2140\n2120\n2100\n2100\nENDCHAR\nSTARTCHAR U_41DB\nENCODING 16859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n5280\n8C40\n0400\n2400\n27C0\n2400\n2400\n2400\nFFE0\nENDCHAR\nSTARTCHAR U_41DC\nENCODING 16860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\nA280\n1440\n2000\n3FC0\n2440\n4480\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_41DD\nENCODING 16861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n0900\n0880\n0BE0\nFC40\n0280\n0300\n0CA0\nF060\nENDCHAR\nSTARTCHAR U_41DE\nENCODING 16862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA280\n1440\n1100\nFFE0\n1100\n1F00\n1100\n1100\n1F00\nENDCHAR\nSTARTCHAR U_41DF\nENCODING 16863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n5280\n8C40\n2100\n3FE0\n4520\nA920\n1120\n22A0\nC440\nENDCHAR\nSTARTCHAR U_41E0\nENCODING 16864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA280\n1440\n0800\n0400\n7FC0\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_41E1\nENCODING 16865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9280\n0C40\n0400\nFFE0\n8020\n7FC0\n0400\n0400\n0C00\nENDCHAR\nSTARTCHAR U_41E2\nENCODING 16866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\nA280\n1440\n0400\nFFE0\n0400\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_41E3\nENCODING 16867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\nA280\n1440\n0A00\n3580\nC460\n1500\n2480\n4440\n0C00\nENDCHAR\nSTARTCHAR U_41E4\nENCODING 16868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA280\n1440\nFFE0\n0400\n7FC0\n4440\n4A40\n7140\n40C0\nENDCHAR\nSTARTCHAR U_41E5\nENCODING 16869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA280\n1440\n7FC0\n0400\n0400\n2780\n2400\n2400\nFFE0\nENDCHAR\nSTARTCHAR U_41E6\nENCODING 16870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9280\n0400\n3F80\n2480\n2480\nFFE0\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_41E7\nENCODING 16871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA280\n1440\nFFE0\n0400\n7FC0\n4440\n4A40\n5140\n7FC0\nENDCHAR\nSTARTCHAR U_41E8\nENCODING 16872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n1F80\n7080\n1F00\nE4E0\n1F80\n2400\n3F80\n0400\nENDCHAR\nSTARTCHAR U_41E9\nENCODING 16873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n3F80\n2480\n3F80\n2480\n3F80\n0480\n0720\n7CE0\nENDCHAR\nSTARTCHAR U_41EA\nENCODING 16874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9240\nFFE0\n1100\n2080\n3F80\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_41EB\nENCODING 16875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\nA280\n1440\n7FC0\n4400\n5F80\n5080\n5F80\n4400\n7FE0\nENDCHAR\nSTARTCHAR U_41EC\nENCODING 16876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n5280\n8C40\n2400\n3F80\n4400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_41ED\nENCODING 16877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA280\n1440\n3F80\n0500\nFFE0\n1800\nEF80\n0840\n07C0\nENDCHAR\nSTARTCHAR U_41EE\nENCODING 16878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n5280\n8C40\n11C0\n2700\nE100\n2FE0\n2100\n2100\n27C0\nENDCHAR\nSTARTCHAR U_41EF\nENCODING 16879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n1080\n1F80\n1080\n1F80\n1080\nFFE0\n0080\nENDCHAR\nSTARTCHAR U_41F0\nENCODING 16880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\nD280\n1F80\n0100\n7640\n1580\n2480\nCC60\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_41F1\nENCODING 16881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\n9480\n7FC0\n4440\n4740\n5940\n4640\n4440\n5840\n7FC0\nENDCHAR\nSTARTCHAR U_41F2\nENCODING 16882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8440\n7FC0\n2480\n1500\nFFE0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_41F3\nENCODING 16883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\n9680\nFFE0\n0400\n7FC0\n0400\nFFE0\n0580\n0E20\nF1E0\nENDCHAR\nSTARTCHAR U_41F4\nENCODING 16884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n3F80\n0A00\n7FC0\n4A40\n4A40\n73C0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_41F5\nENCODING 16885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n21C0\n9600\n4400\n47E0\n1480\nE480\n4480\n4880\nENDCHAR\nSTARTCHAR U_41F6\nENCODING 16886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\nD280\n1F00\n2100\nFFC0\n4440\n7FC0\n4440\n7FC0\n8440\nENDCHAR\nSTARTCHAR U_41F7\nENCODING 16887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n21C0\n9600\n4400\n47E0\n1480\nE480\n4480\n4880\nENDCHAR\nSTARTCHAR U_41F8\nENCODING 16888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n9240\n3F80\n2080\n3F80\n0000\n3F80\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_41F9\nENCODING 16889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\nD240\n3F80\n0880\nFFE0\n0880\n3F80\n1000\n3FC0\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_41FA\nENCODING 16890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\n9240\n7FC0\n0000\n3F80\n2080\n3F80\n2080\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_41FB\nENCODING 16891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\n9280\n7FC0\n4040\n7FC0\n4400\n7FC0\n4400\n7FC0\n4420\n87E0\nENDCHAR\nSTARTCHAR U_41FC\nENCODING 16892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n5140\n8A20\n3F80\n2080\n7FC0\n4440\n7FC0\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_41FD\nENCODING 16893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\n9280\n2000\n27C0\nF400\n27E0\n3480\nE480\n2480\nE880\nENDCHAR\nSTARTCHAR U_41FE\nENCODING 16894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\n9280\n0400\nFFE0\n0000\n3F80\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_41FF\nENCODING 16895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n7FC0\n0400\n3F80\n2480\n3F80\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_4200\nENCODING 16896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9280\nFE20\nAAA0\nAAA0\nFFA0\nAAA0\nAAA0\nAA20\n8260\nENDCHAR\nSTARTCHAR U_4201\nENCODING 16897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\nD280\n0400\n0A00\n3F80\nC060\n3F80\n2A80\n3F80\n2A80\nENDCHAR\nSTARTCHAR U_4202\nENCODING 16898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\nD280\n2080\n1100\n7FC0\n1100\nFFE0\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_4203\nENCODING 16899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9240\n27C0\n9240\n4240\n5480\n2FC0\nE440\n4440\n47C0\nENDCHAR\nSTARTCHAR U_4204\nENCODING 16900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\n9240\n3F80\n0100\nA660\n94A0\n8D20\n94A0\nA460\nFFE0\nENDCHAR\nSTARTCHAR U_4205\nENCODING 16901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\nD280\n0240\nFFE0\n0200\n7920\n4940\n7980\n02A0\nFC60\nENDCHAR\nSTARTCHAR U_4206\nENCODING 16902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n9280\n3FC0\n2000\n3FC0\n2040\n3FC0\n2280\n3FE0\n4480\nB860\nENDCHAR\nSTARTCHAR U_4207\nENCODING 16903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\n9480\n0F00\n0400\n3F80\n2080\n3F80\n2080\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_4208\nENCODING 16904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8C40\n7BE0\n4AA0\n7AA0\n4BE0\n7A00\n4A20\n9BE0\nENDCHAR\nSTARTCHAR U_4209\nENCODING 16905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n3F80\n1100\n7FC0\n0900\nFFE0\n1100\n0E00\n71C0\nENDCHAR\nSTARTCHAR U_420A\nENCODING 16906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n9480\n3F80\n0400\nFFE0\n2880\nDF60\n2900\n0600\n79C0\nENDCHAR\nSTARTCHAR U_420B\nENCODING 16907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\nA680\n75C0\n1600\n2580\nDF60\n1100\n1F00\n1100\n1F00\nENDCHAR\nSTARTCHAR U_420C\nENCODING 16908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9280\n2000\n17C0\n9440\n47C0\n5440\n27C0\nC440\n4FE0\nENDCHAR\nSTARTCHAR U_420D\nENCODING 16909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7BE0\n9480\nFFE0\n2000\n3FC0\n1680\n1880\n1580\n1680\n1F80\nENDCHAR\nSTARTCHAR U_420E\nENCODING 16910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9240\n2900\n7FC0\n2900\n3FC0\n0400\nFFE0\n2480\n4440\nENDCHAR\nSTARTCHAR U_420F\nENCODING 16911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8400\n7FC0\n1100\n3F80\n2480\n3F80\n2480\n3F80\nENDCHAR\nSTARTCHAR U_4210\nENCODING 16912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9280\n2400\n2FE0\n7480\nA6A0\n25C0\n2480\n2940\n2620\nENDCHAR\nSTARTCHAR U_4211\nENCODING 16913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n1F00\n1100\n1700\n1500\n7FC0\n5140\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_4212\nENCODING 16914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7BE0\n9480\nFFE0\n0400\n7FC0\n4A40\n5F40\n4440\n5F40\n44C0\nENDCHAR\nSTARTCHAR U_4213\nENCODING 16915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n3F00\n2500\n2900\n3FC0\n6440\nAB40\n3FC0\n0080\nENDCHAR\nSTARTCHAR U_4214\nENCODING 16916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n9480\n7BC0\n4840\n7BC0\n4000\n7FC0\n4240\n7980\n4660\nENDCHAR\nSTARTCHAR U_4215\nENCODING 16917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n9480\n3F00\n2500\n2900\nFFE0\n2400\n3780\n4C00\n87E0\nENDCHAR\nSTARTCHAR U_4216\nENCODING 16918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9280\n7C40\n1140\nFCC0\n1240\n3840\n57E0\n9040\n1040\nENDCHAR\nSTARTCHAR U_4217\nENCODING 16919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9280\n1440\n2FE0\n6440\nAA20\n23C0\n2C40\n2380\n2C60\nENDCHAR\nSTARTCHAR U_4218\nENCODING 16920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\n9480\n2080\n1100\nFFE0\n2080\n4920\n30C0\n4920\n79E0\nENDCHAR\nSTARTCHAR U_4219\nENCODING 16921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\n9480\n2040\n4840\nF3E0\n2240\n4940\nF940\nA840\nA8C0\nENDCHAR\nSTARTCHAR U_421A\nENCODING 16922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9500\n2080\n7FC0\n0000\n3F80\n2080\n7FC0\nA4A0\n9FA0\nENDCHAR\nSTARTCHAR U_421B\nENCODING 16923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9280\n2040\n3DE0\n2120\nFEA0\nAA40\nFE40\nAAA0\nAB20\nENDCHAR\nSTARTCHAR U_421C\nENCODING 16924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n2780\n4080\nDFE0\n4080\n5FE0\n54A0\n4300\n5CE0\nENDCHAR\nSTARTCHAR U_421D\nENCODING 16925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n2500\nDFE0\n1100\n1F00\n1100\n1F00\n1100\nENDCHAR\nSTARTCHAR U_421E\nENCODING 16926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9280\nFFE0\n2080\n3F80\n0000\n3F80\n2280\n2C80\n3F80\nENDCHAR\nSTARTCHAR U_421F\nENCODING 16927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n7C40\n4540\n7D40\n4540\n7D40\n4540\n7C40\n82C0\nENDCHAR\nSTARTCHAR U_4220\nENCODING 16928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9280\n3FC0\n1480\n7FC0\n0800\nFFE0\n1480\n2300\nDCE0\nENDCHAR\nSTARTCHAR U_4221\nENCODING 16929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n9480\n3FC0\n4940\nBA40\n2740\n0980\nA440\nA0A0\n9FA0\nENDCHAR\nSTARTCHAR U_4222\nENCODING 16930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7BE0\n9480\n2080\n7FC0\n2080\n3F80\n0400\nFFE0\n2480\nC440\nENDCHAR\nSTARTCHAR U_4223\nENCODING 16931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9280\n0100\nFBE0\n5240\n5E40\n5180\n5D80\nE240\n0C20\nENDCHAR\nSTARTCHAR U_4224\nENCODING 16932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\n9280\n2240\nFA40\n27E0\n7240\n6BC0\nA240\n2240\n23C0\nENDCHAR\nSTARTCHAR U_4225\nENCODING 16933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9280\n3C80\nC880\n7FE0\n54A0\n7CA0\n5520\n7D20\n9660\nENDCHAR\nSTARTCHAR U_4226\nENCODING 16934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\nAA80\n2480\n2A80\n3F80\n2880\nCF60\n1900\n0600\n79C0\nENDCHAR\nSTARTCHAR U_4227\nENCODING 16935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9280\n2440\n7F80\n0880\n1FC0\n2040\n7FE0\n9520\n22C0\nENDCHAR\nSTARTCHAR U_4228\nENCODING 16936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\nF7C0\n9440\nE7C0\n9440\nD7C0\nA540\n8480\n8660\nENDCHAR\nSTARTCHAR U_4229\nENCODING 16937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\nA680\n1040\n2C20\nC2A0\n7CA0\nA2A0\n54A0\n5E20\nE060\nENDCHAR\nSTARTCHAR U_422A\nENCODING 16938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\n9480\n7FC0\n1100\n1F00\n0000\n7FC0\n4A40\n5F40\n44C0\nENDCHAR\nSTARTCHAR U_422B\nENCODING 16939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9280\n2540\n4880\nF3E0\n22A0\n4AA0\nFB60\nAA20\nAA60\nENDCHAR\nSTARTCHAR U_422C\nENCODING 16940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n4280\n2240\n9FE0\n4A40\n1FC0\n2A40\nCFC0\n4A40\nENDCHAR\nSTARTCHAR U_422D\nENCODING 16941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\nCA80\n1000\n3F80\n2480\n3F80\n2480\n3F80\n1540\nE3E0\nENDCHAR\nSTARTCHAR U_422E\nENCODING 16942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n2200\nFBE0\n0420\n8BA0\n4AA0\n52A0\n3BA0\nC060\nENDCHAR\nSTARTCHAR U_422F\nENCODING 16943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\nD480\nFFE0\n0800\n3F80\n2980\n3280\nFFE0\n2080\n4040\nENDCHAR\nSTARTCHAR U_4230\nENCODING 16944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nAB40\n77C0\n2440\n37C0\n6440\nA7C0\n2440\n64C0\nENDCHAR\nSTARTCHAR U_4231\nENCODING 16945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8B40\n7C80\n1500\n3B80\n2080\n3B80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_4232\nENCODING 16946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nA840\nFB80\n6A80\n4C60\nFB80\n6A80\n4900\n96E0\nENDCHAR\nSTARTCHAR U_4233\nENCODING 16947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nBFC0\n2480\n3F80\n0000\n7BC0\n4A40\n2940\n5AC0\nENDCHAR\nSTARTCHAR U_4234\nENCODING 16948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5500\n8A80\n7FC0\n0A80\n7FE0\n0A80\n3F80\n1B00\n6AC0\nENDCHAR\nSTARTCHAR U_4235\nENCODING 16949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n9540\n2A80\n5F40\n0000\n7FC0\n2A40\n1940\n6AC0\nENDCHAR\nSTARTCHAR U_4236\nENCODING 16950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nBFC0\n5140\n6EC0\n1100\n3F80\n5140\n1100\n1F00\nENDCHAR\nSTARTCHAR U_4237\nENCODING 16951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8A40\n2780\nFC80\n2300\n7480\nAFE0\n2480\n2780\nENDCHAR\nSTARTCHAR U_4238\nENCODING 16952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nBC40\n4940\nFCC0\n5640\n7D40\n5440\n7FE0\n9440\nENDCHAR\nSTARTCHAR U_4239\nENCODING 16953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nBFE0\n2020\n4FC0\n1200\n37C0\n5540\n1540\n17C0\nENDCHAR\nSTARTCHAR U_423A\nENCODING 16954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nA440\n4380\n7480\n2B00\n5480\n6960\n0200\nA980\nENDCHAR\nSTARTCHAR U_423B\nENCODING 16955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4AA0\nFFE0\n4880\n7BE0\n4AA0\n7BE0\n4AA0\n4BE0\n9AA0\nENDCHAR\nSTARTCHAR U_423C\nENCODING 16956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nFFE0\n4A20\n92C0\n54A0\n8FA0\n1240\n7240\n1FC0\nENDCHAR\nSTARTCHAR U_423D\nENCODING 16957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nFFE0\n0900\n3F80\n2480\n3F80\n1F00\n0400\n7FC0\nENDCHAR\nSTARTCHAR U_423E\nENCODING 16958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nAB40\n77C0\n2440\n37C0\n6C40\nA7C0\n2440\n24C0\nENDCHAR\nSTARTCHAR U_423F\nENCODING 16959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nFFE0\n54A0\n1280\n1F80\n0400\nFFE0\n1100\n60C0\nENDCHAR\nSTARTCHAR U_4240\nENCODING 16960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nBFC0\n2900\n3FC0\n2900\n2F00\n4000\n5540\nA2A0\nENDCHAR\nSTARTCHAR U_4241\nENCODING 16961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nFD60\n4A80\n7D60\n4900\n7BC0\n4C80\nFB00\n0880\nENDCHAR\nSTARTCHAR U_4242\nENCODING 16962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nBFC0\n2480\n3F80\n3F80\n0900\n3F80\n1500\n6CC0\nENDCHAR\nSTARTCHAR U_4243\nENCODING 16963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\n95E0\n56A0\n52C0\n7740\n1040\nF7E0\n5240\n90C0\nENDCHAR\nSTARTCHAR U_4244\nENCODING 16964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5540\nF7E0\n5100\n6FE0\n5640\n5BA0\n7480\n4300\n4CE0\nENDCHAR\nSTARTCHAR U_4245\nENCODING 16965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A40\nBC20\n1200\n7F80\n2A80\n7E80\n13A0\nFE60\n1420\nENDCHAR\nSTARTCHAR U_4246\nENCODING 16966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nBF40\n2900\n2500\n3FC0\n2000\n3FE0\n5520\n8AC0\nENDCHAR\nSTARTCHAR U_4247\nENCODING 16967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nA440\n7D40\n2540\n3D40\n2540\nFF40\n5440\n7EC0\nENDCHAR\nSTARTCHAR U_4248\nENCODING 16968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nFD40\n2900\nFDE0\n4A40\n7D40\n4880\n7940\n4E20\nENDCHAR\nSTARTCHAR U_4249\nENCODING 16969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nB460\n49C0\nFF40\n5540\n7D40\n5540\n7D20\n95A0\nENDCHAR\nSTARTCHAR U_424A\nENCODING 16970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\n9F40\n0400\nFFE0\n2480\n7FC0\nA4A0\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_424B\nENCODING 16971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\nAFC0\n2540\nF7C0\n55C0\n5640\n2BC0\n5A40\n93C0\nENDCHAR\nSTARTCHAR U_424C\nENCODING 16972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nFC40\n4A80\n57E0\n4900\n4EC0\n69A0\n52A0\n4580\nENDCHAR\nSTARTCHAR U_424D\nENCODING 16973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nFFC0\n4A40\n7BC0\n4440\n4B40\n5AC0\n6640\n40C0\nENDCHAR\nSTARTCHAR U_424E\nENCODING 16974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n6480\n9540\nFFE0\n9120\n1F00\n0400\n7FE0\n1480\n6460\nENDCHAR\nSTARTCHAR U_424F\nENCODING 16975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nB460\n4BC0\nFD40\n5680\n7DE0\n5480\n7FE0\n9480\nENDCHAR\nSTARTCHAR U_4250\nENCODING 16976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\nFC80\n13E0\n7C80\n55E0\n7D20\n5520\nFF20\n11E0\nENDCHAR\nSTARTCHAR U_4251\nENCODING 16977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n2000\n7FC0\nAA80\n3FC0\n2A80\nFFE0\n4A40\n8520\nENDCHAR\nSTARTCHAR U_4252\nENCODING 16978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\nA480\n13C0\n7C80\n2500\nFFE0\n2480\n7FC0\nA4A0\n3F80\nENDCHAR\nSTARTCHAR U_4253\nENCODING 16979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n27C0\nFD40\n27C0\n7540\n6FE0\nA380\n2540\n2920\nENDCHAR\nSTARTCHAR U_4254\nENCODING 16980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9280\nF940\n27E0\n3940\n4880\nA940\n17E0\n2140\nC7E0\nENDCHAR\nSTARTCHAR U_4255\nENCODING 16981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n9480\n7FC0\n5540\n4E40\n7FC0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_4256\nENCODING 16982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n1140\nFE20\n5480\n7C40\n55E0\nFE20\n11C0\n1040\nENDCHAR\nSTARTCHAR U_4257\nENCODING 16983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9280\n27C0\nF440\n2FE0\n2540\n36C0\nE540\n2FE0\n6040\nENDCHAR\nSTARTCHAR U_4258\nENCODING 16984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9280\n2100\nFFE0\n2820\n67C0\n7000\nAFE0\n2540\n2B20\nENDCHAR\nSTARTCHAR U_4259\nENCODING 16985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\nA480\nFFE0\nA4A0\n1500\n7FC0\n0000\nFFE0\n1100\n3F80\nENDCHAR\nSTARTCHAR U_425A\nENCODING 16986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n3F80\n2A80\nFFE0\n9020\n1F00\n1900\n2540\n30C0\nENDCHAR\nSTARTCHAR U_425B\nENCODING 16987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n7FC0\n5540\n4E40\n7FC0\n5540\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_425C\nENCODING 16988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n4280\n77E0\nAC80\n27C0\nFC80\n27C0\n5480\n8FE0\nENDCHAR\nSTARTCHAR U_425D\nENCODING 16989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n9480\n7FC0\n0400\n3F80\n4480\nFFE0\n2280\nF900\n46E0\nENDCHAR\nSTARTCHAR U_425E\nENCODING 16990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n7FE0\n4100\n7F40\n5480\n9D60\n5240\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_425F\nENCODING 16991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n2FE0\nF480\n27E0\n3C80\nE7E0\n2240\n2180\n6660\nENDCHAR\nSTARTCHAR U_4260\nENCODING 16992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\nA480\n3500\n5FE0\nA140\n5F40\nC080\n4A80\n4B40\n5220\nENDCHAR\nSTARTCHAR U_4261\nENCODING 16993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\nFFE0\n2A80\n2E80\n2080\n3F80\n1300\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_4262\nENCODING 16994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n7FC0\n2480\n5540\nFFE0\n2080\n2E80\n2A80\n3F80\nENDCHAR\nSTARTCHAR U_4263\nENCODING 16995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n39C0\n2040\n39C0\n2040\n3FE0\n5020\n9560\n2540\nENDCHAR\nSTARTCHAR U_4264\nENCODING 16996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n5500\nFDE0\n5740\n2940\nFF40\n4880\n3940\nC620\nENDCHAR\nSTARTCHAR U_4265\nENCODING 16997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\nA480\n5FE0\n52A0\nFFE0\n5520\n7FE0\nCA40\n5AA0\nE7A0\nENDCHAR\nSTARTCHAR U_4266\nENCODING 16998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n5FE0\n2AA0\nFFE0\n2480\n2FE0\n3480\n27C0\nF000\n0FE0\nENDCHAR\nSTARTCHAR U_4267\nENCODING 16999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\nA480\nEE20\nAAA0\nD2A0\n7EA0\n10A0\nFEA0\n5420\nFE60\nENDCHAR\nSTARTCHAR U_4268\nENCODING 17000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n7DC0\n2940\nFE20\n25C0\nD940\n3540\nD480\n2360\nENDCHAR\nSTARTCHAR U_4269\nENCODING 17001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n2FE0\nFA80\n2B80\n7EE0\nAAA0\n2EE0\n2800\n2FE0\nENDCHAR\nSTARTCHAR U_426A\nENCODING 17002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n9280\n3F80\n2480\n3F80\n2480\nFFE0\nAAA0\nFBE0\nAAA0\nFBE0\nENDCHAR\nSTARTCHAR U_426B\nENCODING 17003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n7DE0\n12A0\nFCA0\n5560\n3B80\nE4E0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_426C\nENCODING 17004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n9480\n7FE0\n6940\n55E0\n7D40\n53E0\n5D40\n4480\nBB60\nENDCHAR\nSTARTCHAR U_426D\nENCODING 17005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n2900\n7FC0\n4440\n4A40\n7FC0\n4480\n7780\n4460\n7720\nENDCHAR\nSTARTCHAR U_426E\nENCODING 17006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\nFBE0\nAA60\nCAA0\nFFE0\n9220\nBFA0\n9220\n9FA0\nENDCHAR\nSTARTCHAR U_426F\nENCODING 17007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n9480\n7FE0\n5140\n7880\n4EC0\n75A0\n1A80\n1F80\n6040\nENDCHAR\nSTARTCHAR U_4270\nENCODING 17008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n9480\n7FE0\n5540\nFE20\nA540\n3D40\n2480\n3D40\nC620\nENDCHAR\nSTARTCHAR U_4271\nENCODING 17009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9680\n2040\nEFE0\n3A40\n6BC0\nB800\n2EE0\n2AA0\n2FE0\nENDCHAR\nSTARTCHAR U_4272\nENCODING 17010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\nEFE0\n2540\nEFE0\n8D60\nEBA0\n2D60\n2BA0\nCD60\nENDCHAR\nSTARTCHAR U_4273\nENCODING 17011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n7220\n9140\nFBE0\nA880\nFBE0\nA880\nFBE0\nA880\nENDCHAR\nSTARTCHAR U_4274\nENCODING 17012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n9480\nFFE0\n4A40\n7FC0\n1100\n7FC0\n2480\nEB00\n30E0\nENDCHAR\nSTARTCHAR U_4275\nENCODING 17013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\nA480\n3F80\n2480\nFFE0\n4A40\n9F20\n3580\n5F40\n1280\n39C0\nENDCHAR\nSTARTCHAR U_4276\nENCODING 17014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n9480\n7FE0\nD280\n7FC0\n5280\n7FE0\n5100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_4277\nENCODING 17015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\nD680\n39C0\n2940\n7FE0\n4900\n7FE0\n5540\n5D40\n5680\nBD60\nENDCHAR\nSTARTCHAR U_4278\nENCODING 17016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n4440\nEEE0\nA0A0\nEEE0\n4040\nEEE0\n4A40\n8E40\nENDCHAR\nSTARTCHAR U_4279\nENCODING 17017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\nFFE0\n9520\nEEE0\nAAA0\nFFE0\n2480\n5540\nFFE0\nENDCHAR\nSTARTCHAR U_427A\nENCODING 17018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nA800\n77C0\n2100\nF900\n2100\n7100\n6900\nA100\n2FE0\n2000\nENDCHAR\nSTARTCHAR U_427B\nENCODING 17019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nAF80\n7480\n2480\nFC80\n27E0\n7480\n6C80\nA4A0\n2660\n2420\nENDCHAR\nSTARTCHAR U_427C\nENCODING 17020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nAF00\n7400\n2400\nFFE0\n2480\n7480\n6C80\nA480\n2480\n2880\nENDCHAR\nSTARTCHAR U_427D\nENCODING 17021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nAAA0\n71C0\n2080\nFBE0\n6080\n7080\nABE0\nA080\n2080\n2080\nENDCHAR\nSTARTCHAR U_427E\nENCODING 17022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n7BC0\n0A00\nFA20\n09E0\n2480\n1500\nFFE0\n1500\n2480\n4440\nENDCHAR\nSTARTCHAR U_427F\nENCODING 17023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nAB80\n72A0\n21C0\nF880\n27E0\n7080\n6880\nA080\n2280\n2100\nENDCHAR\nSTARTCHAR U_4280\nENCODING 17024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA900\n7100\n27E0\nF900\n2100\n77C0\n6C40\nA440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_4281\nENCODING 17025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAD00\n77C0\n2500\nF900\n2FE0\n7280\n6A80\nA280\n24A0\n28E0\nENDCHAR\nSTARTCHAR U_4282\nENCODING 17026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA900\n77E0\n2100\nFFC0\n2540\n7540\n6D40\nA380\n2540\n2920\nENDCHAR\nSTARTCHAR U_4283\nENCODING 17027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nAFC0\n7440\n27C0\nFD40\n27C0\n7540\n6D40\nA540\n25C0\n2920\nENDCHAR\nSTARTCHAR U_4284\nENCODING 17028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nFA40\n2340\n3AC0\nE240\n24E0\n1500\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_4285\nENCODING 17029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nAA00\n73C0\n2440\nFA80\n2100\n73E0\nAE20\n2A20\n23E0\n2220\nENDCHAR\nSTARTCHAR U_4286\nENCODING 17030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\n63C0\n4040\n7BC0\n4040\n7FC0\n2480\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_4287\nENCODING 17031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nA920\n77E0\n2100\nFFE0\n2520\n77E0\n6D20\nA7E0\n2520\n2560\nENDCHAR\nSTARTCHAR U_4288\nENCODING 17032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\nAFE0\n7000\n27C0\nF540\n2FE0\n7540\n6D40\nA7E0\n2040\n2180\nENDCHAR\nSTARTCHAR U_4289\nENCODING 17033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA880\n77E0\n2420\nF900\n27E0\n7100\n6B80\nA540\n2920\n2100\nENDCHAR\nSTARTCHAR U_428A\nENCODING 17034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nAC20\n77E0\n2400\nFDE0\n2480\n77E0\n6C80\nA7E0\n2480\n28E0\nENDCHAR\nSTARTCHAR U_428B\nENCODING 17035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\nAD40\n7540\n2740\nF9E0\n2740\n7540\n6D40\nA540\n29E0\n2100\nENDCHAR\nSTARTCHAR U_428C\nENCODING 17036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7800\n2A80\nFA80\n2BE0\n6A80\n7A80\nAA80\n2BA0\n32E0\nENDCHAR\nSTARTCHAR U_428D\nENCODING 17037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n13E0\nFD20\n1120\n3A20\nD4C0\n1480\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_428E\nENCODING 17038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\nAB40\n77E0\n2100\nFFE0\n2240\n77E0\n6A40\nA2C0\n2220\n23E0\nENDCHAR\nSTARTCHAR U_428F\nENCODING 17039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nAAA0\n71C0\n2080\nF940\n2620\n7080\n6AA0\nA1C0\n2140\n2620\nENDCHAR\nSTARTCHAR U_4290\nENCODING 17040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nAC40\n77C0\n2440\nFFC0\n2480\n7480\n6FE0\nA480\n25A0\n2660\nENDCHAR\nSTARTCHAR U_4291\nENCODING 17041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA920\n7540\n2100\nFFE0\n2820\n6BA0\n7AA0\nABA0\n2820\n2860\nENDCHAR\nSTARTCHAR U_4292\nENCODING 17042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nAA80\n77E0\n2C80\nF480\n27C0\n7480\n6FC0\nA480\n2480\n27E0\nENDCHAR\nSTARTCHAR U_4293\nENCODING 17043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nAA40\n73C0\n2240\nFBC0\n2000\n77E0\n6900\nA5C0\n2700\n29E0\nENDCHAR\nSTARTCHAR U_4294\nENCODING 17044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nAFE0\n7280\n2100\nFFC0\n2540\n7540\n6FE0\nA280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4295\nENCODING 17045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nA9E0\n7EA0\n23E0\nFCA0\n25E0\n7280\n6BE0\nAA80\n2480\n3BE0\nENDCHAR\nSTARTCHAR U_4296\nENCODING 17046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA900\n7FE0\n2200\nFFE0\n2AA0\n7FE0\n6920\nAFE0\n2920\n2960\nENDCHAR\nSTARTCHAR U_4297\nENCODING 17047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nAFC0\n7540\n2640\nFFC0\n2000\n77C0\n6900\nA7C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_4298\nENCODING 17048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7520\n27E0\nFD20\n27E0\n7240\n6BC0\nA240\n23C0\n2240\nENDCHAR\nSTARTCHAR U_4299\nENCODING 17049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2240\n47E0\nFA40\n4A40\n7E40\n2480\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_429A\nENCODING 17050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nA900\n75E0\n2120\nFFE0\n2500\n75E0\n6D20\nA5E0\n3C00\n23E0\nENDCHAR\nSTARTCHAR U_429B\nENCODING 17051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BC0\nAD40\n7540\n2B60\nFE00\n25C0\n7F40\n6540\nAE80\n3540\n2620\nENDCHAR\nSTARTCHAR U_429C\nENCODING 17052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7540\n27C0\nF540\n2FE0\n7040\n6FE0\nA440\n2240\n20C0\nENDCHAR\nSTARTCHAR U_429D\nENCODING 17053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\nAF20\n7540\n2FE0\nF540\n2520\n7920\n6AC0\nA2A0\n2A20\n29C0\nENDCHAR\nSTARTCHAR U_429E\nENCODING 17054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7440\n2280\nFFE0\n2920\n7FE0\n6920\nABA0\n2AA0\n2BE0\nENDCHAR\nSTARTCHAR U_429F\nENCODING 17055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\nAFE0\n7440\n27C0\nF900\n2FE0\n7920\n6D60\nABA0\n2D60\n2820\nENDCHAR\nSTARTCHAR U_42A0\nENCODING 17056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA880\nFA80\n93E0\nB940\nCA60\n2480\n1500\nFFE0\n2480\nC460\nENDCHAR\nSTARTCHAR U_42A1\nENCODING 17057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nACC0\n7540\n2FE0\nFAA0\n2FE0\n7000\n6FC0\nA240\n2380\n2C60\nENDCHAR\nSTARTCHAR U_42A2\nENCODING 17058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n73C0\n1540\nF280\n5FE0\n9240\n24C0\n1500\nFFE0\n2480\nC460\nENDCHAR\nSTARTCHAR U_42A3\nENCODING 17059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nAFE0\n7280\n2FE0\nF800\n27C0\n7540\n6FC0\nA540\n27C0\n2820\nENDCHAR\nSTARTCHAR U_42A4\nENCODING 17060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nAA80\n7FE0\n2AA0\nFFE0\n2440\n77C0\nA440\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_42A5\nENCODING 17061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFC0\n7140\n2FE0\nF140\n27C0\n7540\n6FC0\nA540\n27C0\n2940\nENDCHAR\nSTARTCHAR U_42A6\nENCODING 17062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7100\n2FE0\nF820\n27C0\n7440\n67C0\nA440\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_42A7\nENCODING 17063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nAFE0\n72A0\n2FE0\nFA80\n2FE0\n74A0\n6FC0\nA540\n27C0\n2820\nENDCHAR\nSTARTCHAR U_42A8\nENCODING 17064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n4000\n3FC0\n2080\n7FC0\n5540\n7F40\n5540\n7F40\n9560\nENDCHAR\nSTARTCHAR U_42A9\nENCODING 17065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\nAF20\n7540\n2FE0\nF540\n2920\n77C0\n6D40\nA7C0\n2540\n27C0\nENDCHAR\nSTARTCHAR U_42AA\nENCODING 17066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nAFE0\n7280\n27C0\nFD40\n27C0\n7540\n6FE0\nA920\n2FE0\n2A20\nENDCHAR\nSTARTCHAR U_42AB\nENCODING 17067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nAAA0\n7FE0\n2280\nFEE0\n2280\n7EE0\n6280\nAEE0\n2280\n2480\nENDCHAR\nSTARTCHAR U_42AC\nENCODING 17068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n2540\nFFC0\n2540\n7FE0\nA540\n2920\n2480\nFFE0\n2480\nC460\nENDCHAR\nSTARTCHAR U_42AD\nENCODING 17069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7100\n27E0\nF820\n27C0\n7100\n6FE0\nAA40\n2F40\n20C0\nENDCHAR\nSTARTCHAR U_42AE\nENCODING 17070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nADA0\n7360\n25A0\nFB20\n2480\n77E0\n6C80\nA7E0\n2480\n27E0\nENDCHAR\nSTARTCHAR U_42AF\nENCODING 17071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7A80\n2FE0\nFA80\n2FE0\n7540\n6FC0\nA540\n27C0\n2820\nENDCHAR\nSTARTCHAR U_42B0\nENCODING 17072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nA8A0\n75E0\n2EA0\nF1E0\n2E80\n71E0\nAEA0\n2AE0\n2EA0\n20E0\nENDCHAR\nSTARTCHAR U_42B1\nENCODING 17073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\nAD60\n7AC0\n2FE0\nF540\n2DC0\n7560\n6DC0\nA540\n2FE0\n2120\nENDCHAR\nSTARTCHAR U_42B2\nENCODING 17074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n2BE0\nFF40\nAA80\nFFE0\n9680\n5BE0\nFE80\n33E0\n5E80\n95E0\nENDCHAR\nSTARTCHAR U_42B3\nENCODING 17075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nAFE0\n7540\n27E0\nFD40\n27E0\n7540\n6F60\nA540\n2760\n2940\nENDCHAR\nSTARTCHAR U_42B4\nENCODING 17076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nAFE0\n7540\n2100\nF280\n2FE0\n7540\n6D40\nA7C0\n2280\n2D60\nENDCHAR\nSTARTCHAR U_42B5\nENCODING 17077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n4200\n9F80\nF280\n2280\n4280\n9280\nFA80\nAA80\nA4A0\n9860\nENDCHAR\nSTARTCHAR U_42B6\nENCODING 17078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4100\n9500\nF5E0\n2F20\n4520\n9540\nF500\nAC20\nA420\n83E0\nENDCHAR\nSTARTCHAR U_42B7\nENCODING 17079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n4040\n9040\nFFE0\n2040\n40C0\n9140\nFA40\nAC40\nA840\n80C0\nENDCHAR\nSTARTCHAR U_42B8\nENCODING 17080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\n4000\n9000\nFFE0\n2200\n4200\n97C0\nF840\nA840\nA080\n8300\nENDCHAR\nSTARTCHAR U_42B9\nENCODING 17081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n4700\n9100\nF100\n2FE0\n4100\n9100\nF900\nA900\nA100\n8100\nENDCHAR\nSTARTCHAR U_42BA\nENCODING 17082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n47E0\n9100\nF200\n23C0\n4440\n9440\nFB80\nA880\nA100\n8FE0\nENDCHAR\nSTARTCHAR U_42BB\nENCODING 17083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n4400\n97E0\nF520\n2940\n4100\n9100\nF900\nAA80\nA440\n9820\nENDCHAR\nSTARTCHAR U_42BC\nENCODING 17084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n4080\n9080\nF080\n2480\n44E0\n9480\nF480\nAC80\nA480\n8FE0\nENDCHAR\nSTARTCHAR U_42BD\nENCODING 17085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4100\n97C0\nF140\n2140\n4FE0\n9100\nF180\n0A40\nAA20\nA420\nENDCHAR\nSTARTCHAR U_42BE\nENCODING 17086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4100\n9100\nF7E0\n2100\n4380\n9380\nF540\nA920\nA900\n8100\nENDCHAR\nSTARTCHAR U_42BF\nENCODING 17087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4100\n97E0\nF100\n2100\n47E0\n9100\nF900\n0A80\nA440\nA820\nENDCHAR\nSTARTCHAR U_42C0\nENCODING 17088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n7FE0\n4480\n4900\n4640\n5FE0\n4200\n9AC0\nA620\nENDCHAR\nSTARTCHAR U_42C1\nENCODING 17089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4FE0\n9000\n6380\n2A80\n7A80\n8280\n2A80\nAAA0\n84E0\nENDCHAR\nSTARTCHAR U_42C2\nENCODING 17090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2640\n4180\n9340\nF420\n2000\n4240\nFA40\n0980\nA980\nA240\n8C20\nENDCHAR\nSTARTCHAR U_42C3\nENCODING 17091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n4700\n9100\nF1E0\n4700\n9100\nF1E0\n0F00\nA900\nA120\n80E0\nENDCHAR\nSTARTCHAR U_42C4\nENCODING 17092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n4420\n9420\nE660\n45A0\n95A0\nF660\n0C20\nAC20\nA420\n8460\nENDCHAR\nSTARTCHAR U_42C5\nENCODING 17093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4100\n9500\nF7C0\n4900\n9100\nFFE0\n0100\nA900\nA900\n8100\nENDCHAR\nSTARTCHAR U_42C6\nENCODING 17094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n4100\n97E0\nE420\n4420\n97E0\nF400\n0C00\nA400\nA400\n8800\nENDCHAR\nSTARTCHAR U_42C7\nENCODING 17095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n47C0\n9440\nF440\n47C0\n9500\nF500\n0C80\nA480\nA840\n8820\nENDCHAR\nSTARTCHAR U_42C8\nENCODING 17096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4BC0\nFE40\n4980\n3640\nC920\n3F00\n1100\n3F80\n1500\n2480\n4440\nENDCHAR\nSTARTCHAR U_42C9\nENCODING 17097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n4100\n9FE0\nE820\n4000\n9280\nF280\n0A80\nA440\nA440\n8820\nENDCHAR\nSTARTCHAR U_42CA\nENCODING 17098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n4FE0\n9100\nE100\n4100\n95E0\nF500\n0D00\nA500\nA500\n9FE0\nENDCHAR\nSTARTCHAR U_42CB\nENCODING 17099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n4420\n97E0\nE480\n4480\n97E0\nF480\n0C80\nA4A0\nA660\n8420\nENDCHAR\nSTARTCHAR U_42CC\nENCODING 17100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n4400\n9400\nE7C0\n4440\n9440\nF7C0\n0C00\nA400\nA400\n87E0\nENDCHAR\nSTARTCHAR U_42CD\nENCODING 17101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n4FE0\n9040\nF040\n4740\n9540\nF540\n0F40\nA840\nA040\n80C0\nENDCHAR\nSTARTCHAR U_42CE\nENCODING 17102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n47C0\n9440\nE440\n47C0\n9440\nF440\n0FC0\nA800\nA000\n8FE0\nENDCHAR\nSTARTCHAR U_42CF\nENCODING 17103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n4200\n93E0\nF500\n4100\n91C0\nF900\n09E0\nA900\nA100\n8100\nENDCHAR\nSTARTCHAR U_42D0\nENCODING 17104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\n4100\n57E0\nE500\n2520\n44C0\nF480\n04A0\nADA0\nA660\nENDCHAR\nSTARTCHAR U_42D1\nENCODING 17105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n4100\n5FE0\nE920\n2920\n4AA0\nFC60\n0820\nA820\nA8E0\nENDCHAR\nSTARTCHAR U_42D2\nENCODING 17106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2040\n4180\n5080\nEFE0\n20A0\n4180\nF280\n0480\nA880\nA380\nENDCHAR\nSTARTCHAR U_42D3\nENCODING 17107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n43E0\n5440\nE880\n27E0\n4020\nF7E0\n0020\nA820\nA7E0\nENDCHAR\nSTARTCHAR U_42D4\nENCODING 17108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n4080\n5100\nE380\n2540\n4920\nF100\n0100\nA000\nAFE0\nENDCHAR\nSTARTCHAR U_42D5\nENCODING 17109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n2100\n6FE0\nA100\n27C0\n0A00\n1480\n3FC0\n0400\n1500\n6CC0\nENDCHAR\nSTARTCHAR U_42D6\nENCODING 17110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n4140\n57E0\nE140\n27C0\n4100\nF7C0\n0100\nAFE0\nA100\nENDCHAR\nSTARTCHAR U_42D7\nENCODING 17111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n4480\n5480\nE7E0\n2420\n4420\nF7E0\n0480\nAC80\nA7E0\nENDCHAR\nSTARTCHAR U_42D8\nENCODING 17112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2780\n4100\n57C0\nE100\n2FE0\n4100\nF380\n0540\nA920\nA100\nENDCHAR\nSTARTCHAR U_42D9\nENCODING 17113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2440\n4440\n57C0\nE440\n27C0\n4440\nF460\n0FC0\nA040\nA040\nENDCHAR\nSTARTCHAR U_42DA\nENCODING 17114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2220\n4AA0\n5660\nE220\n2660\n4AA0\nF220\n0220\nA220\nAEE0\nENDCHAR\nSTARTCHAR U_42DB\nENCODING 17115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\n4380\n5100\nEFE0\n2100\n4380\nF540\n0120\nA900\nA100\nENDCHAR\nSTARTCHAR U_42DC\nENCODING 17116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3E0\n8220\nF140\n9080\nF540\n8A20\nFE00\n0480\n3FC0\n1280\n2640\nENDCHAR\nSTARTCHAR U_42DD\nENCODING 17117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2920\n4540\n5000\nE100\n2FE0\n4280\nF280\n0100\nAA80\nA440\nENDCHAR\nSTARTCHAR U_42DE\nENCODING 17118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n4820\n5D60\nEAA0\n2AA0\n4D60\nF820\n0820\nA8A0\nA840\nENDCHAR\nSTARTCHAR U_42DF\nENCODING 17119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\n47C0\n5400\nE7E0\n2000\n4100\nFAA0\n06A0\nAA40\nA3C0\nENDCHAR\nSTARTCHAR U_42E0\nENCODING 17120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2FE0\n4100\n5FE0\nE920\n2FE0\n4920\nFFE0\n0920\nA920\nA960\nENDCHAR\nSTARTCHAR U_42E1\nENCODING 17121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n4440\n5BA0\nE100\n27C0\n4100\nF380\n0540\nA920\nA300\nENDCHAR\nSTARTCHAR U_42E2\nENCODING 17122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA00\n23E0\nFA40\n2440\n6E00\n1080\n7FC0\n0420\n1500\n2480\nENDCHAR\nSTARTCHAR U_42E3\nENCODING 17123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7900\n8240\n7B80\n4900\n6FE0\nF880\n49C0\n6AA0\n7C80\n1180\nENDCHAR\nSTARTCHAR U_42E4\nENCODING 17124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n23E0\nFA20\n2520\n54A0\n20A0\nF820\n7020\nA940\n6080\nENDCHAR\nSTARTCHAR U_42E5\nENCODING 17125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n47C0\n5540\nE540\n27C0\n4100\nF7C0\n0100\nA100\nAFE0\nENDCHAR\nSTARTCHAR U_42E6\nENCODING 17126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\n4800\n57C0\nE540\n2FE0\n4440\nF540\n07E0\nA840\nA080\nENDCHAR\nSTARTCHAR U_42E7\nENCODING 17127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n4420\n57E0\nE480\n27E0\n4480\nF7E0\n0620\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_42E8\nENCODING 17128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n4FE0\n5440\nE280\n2FE0\n4000\nF7C0\n0440\nA440\nA7C0\nENDCHAR\nSTARTCHAR U_42E9\nENCODING 17129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n26C0\n4440\n56C0\nE440\n2440\n47C0\nF280\n02A0\nA4A0\nA8E0\nENDCHAR\nSTARTCHAR U_42EA\nENCODING 17130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E00\n2BE0\n4A40\n5A40\nEDC0\n2B40\n4B40\nFBC0\n0E40\nA840\nA8C0\nENDCHAR\nSTARTCHAR U_42EB\nENCODING 17131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\n4880\n57C0\nE140\n2FE0\n4140\nF140\n07C0\nA100\nA300\nENDCHAR\nSTARTCHAR U_42EC\nENCODING 17132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n4100\n5FE0\nE280\n2440\n4920\nF540\n09A0\nA140\nA300\nENDCHAR\nSTARTCHAR U_42ED\nENCODING 17133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4200\n57C0\nE000\n27C0\n4440\nF7C0\n0440\nA7C0\nA440\nENDCHAR\nSTARTCHAR U_42EE\nENCODING 17134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n4440\n5820\nE7C0\n2100\n47C0\nF100\n0540\nA380\nAFE0\nENDCHAR\nSTARTCHAR U_42EF\nENCODING 17135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3140\n47E0\n7100\n57C0\n7480\n8E60\n9080\n3FC0\n0420\n2480\n4C40\nENDCHAR\nSTARTCHAR U_42F0\nENCODING 17136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\nFFE0\n3580\nCE60\n0880\n3FC0\n1500\n2480\nENDCHAR\nSTARTCHAR U_42F1\nENCODING 17137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4100\n5540\nE540\n2BA0\n4100\nF380\n0540\nA920\nA100\nENDCHAR\nSTARTCHAR U_42F2\nENCODING 17138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n47C0\n5100\nEFE0\n2920\n4FE0\nF920\n0FE0\nA100\nA1E0\nENDCHAR\nSTARTCHAR U_42F3\nENCODING 17139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2EE0\n4280\n56A0\nEAE0\n27C0\n4440\nF7C0\n0440\nA7C0\nA440\nENDCHAR\nSTARTCHAR U_42F4\nENCODING 17140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2140\n4080\n57E0\nE280\n2480\n4100\nF7E0\n0380\nA540\nA920\nENDCHAR\nSTARTCHAR U_42F5\nENCODING 17141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n47C0\n5440\nE7C0\n2200\n47E0\nFCA0\n0560\nA7A0\nA060\nENDCHAR\nSTARTCHAR U_42F6\nENCODING 17142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2200\n4FC0\n5840\nEFC0\n2840\n4FC0\nF840\n0FC0\nA480\nA840\nENDCHAR\nSTARTCHAR U_42F7\nENCODING 17143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n13E0\nFD40\n5080\n9560\n0E00\n1080\n7FC0\n0420\n1500\n2480\nENDCHAR\nSTARTCHAR U_42F8\nENCODING 17144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2480\n47E0\n5480\nE5E0\n2520\n45E0\nF520\n05E0\nA520\nA9E0\nENDCHAR\nSTARTCHAR U_42F9\nENCODING 17145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2000\n43C0\n5240\nE3C0\n2000\n47E0\nF520\n07E0\nA520\nA7E0\nENDCHAR\nSTARTCHAR U_42FA\nENCODING 17146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2340\n2C40\n4440\n4560\nFF40\n2C40\n5640\nF540\n0440\nA4A0\nA520\nENDCHAR\nSTARTCHAR U_42FB\nENCODING 17147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4100\n5FE0\nEC60\n2AA0\n4FE0\nF920\n0FE0\nA920\nA860\nENDCHAR\nSTARTCHAR U_42FC\nENCODING 17148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2480\n45E0\n5420\nE7A0\n2920\n4AA0\nFFE0\n0AA0\nAAA0\nAFE0\nENDCHAR\nSTARTCHAR U_42FD\nENCODING 17149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2E40\n45E0\n5440\nEE40\n2540\n44C0\nFE40\n0440\nA640\nA8C0\nENDCHAR\nSTARTCHAR U_42FE\nENCODING 17150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4440\n5BA0\nE480\n2D40\n42E0\nF520\n02C0\nA080\nA700\nENDCHAR\nSTARTCHAR U_42FF\nENCODING 17151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n47C0\n5540\nEFE0\n2500\n4520\nF4C0\n0480\nA540\nA620\nENDCHAR\nSTARTCHAR U_4300\nENCODING 17152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2C40\n4540\n54C0\nEE40\n2540\n4EC0\nF460\n05C0\nA440\nA440\nENDCHAR\nSTARTCHAR U_4301\nENCODING 17153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n4FE0\n5AA0\nEBA0\n2820\n4100\nF7E0\n0240\nA180\nA640\nENDCHAR\nSTARTCHAR U_4302\nENCODING 17154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n47E0\n5400\nE7E0\n2500\n47E0\nF480\n07E0\nA880\nABE0\nENDCHAR\nSTARTCHAR U_4303\nENCODING 17155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2420\n3520\n4EA0\n54A0\nEEA0\n2AA0\n4EA0\nFAA0\n0E20\nAA20\nAAE0\nENDCHAR\nSTARTCHAR U_4304\nENCODING 17156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n4FE0\n5AA0\nED20\n29E0\n4100\nFFE0\n0440\nA380\nAC60\nENDCHAR\nSTARTCHAR U_4305\nENCODING 17157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4900\n5BC0\nE940\n2FE0\n4940\nFBC0\n0A40\nAA40\nABC0\nENDCHAR\nSTARTCHAR U_4306\nENCODING 17158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\n4A40\n5FC0\nEA40\n2FC0\n4540\nF5A0\n05E0\nA920\nB0E0\nENDCHAR\nSTARTCHAR U_4307\nENCODING 17159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n4100\n57E0\nE920\n2280\n4700\nE240\n0FE0\nA540\nAB20\nENDCHAR\nSTARTCHAR U_4308\nENCODING 17160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n47C0\n5440\nE7C0\n2EE0\n4220\nEAA0\n0660\nAAA0\nA440\nENDCHAR\nSTARTCHAR U_4309\nENCODING 17161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n4AA0\n5FE0\nE000\n2FE0\n4100\nF5E0\n0500\nA500\nAFE0\nENDCHAR\nSTARTCHAR U_430A\nENCODING 17162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\n4A80\n5500\nE200\n2FC0\n4100\nEFE0\n0100\nA920\nAFE0\nENDCHAR\nSTARTCHAR U_430B\nENCODING 17163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n4280\n5100\nE280\n2440\n4BA0\nF000\n07C0\nA440\nA7C0\nENDCHAR\nSTARTCHAR U_430C\nENCODING 17164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n4660\n4AA0\nE220\n2440\n47E0\nF420\n07E0\nA420\nA7E0\nENDCHAR\nSTARTCHAR U_430D\nENCODING 17165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n4440\n57C0\nEFE0\n2920\n4FE0\nF100\n0FE0\nA100\nAFE0\nENDCHAR\nSTARTCHAR U_430E\nENCODING 17166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF7E0\n9A40\n9180\nF660\n0BC0\n1E40\n0BC0\n7FE0\n2480\n4440\nENDCHAR\nSTARTCHAR U_430F\nENCODING 17167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4920\n5480\nED20\n27C0\n4800\nF100\n0920\nA920\nAFE0\nENDCHAR\nSTARTCHAR U_4310\nENCODING 17168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2F00\n4540\n5280\nE7C0\n2440\n47C0\nF440\n07C0\nA280\nACE0\nENDCHAR\nSTARTCHAR U_4311\nENCODING 17169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n4FA0\n5940\nEF40\n2AE0\n4FA0\nF100\n07C0\nA100\nAFE0\nENDCHAR\nSTARTCHAR U_4312\nENCODING 17170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n4540\n57E0\nE540\n27E0\n4400\nF6A0\n07C0\nAA80\nABE0\nENDCHAR\nSTARTCHAR U_4313\nENCODING 17171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DC0\nD540\n7E20\n57E0\n7D40\n0880\n1F60\n0800\n3F80\n1500\n2C80\nENDCHAR\nSTARTCHAR U_4314\nENCODING 17172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\n4BC0\n5A40\nEBC0\n2800\n4FE0\nFDA0\n0FE0\nA800\nAFE0\nENDCHAR\nSTARTCHAR U_4315\nENCODING 17173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n4FE0\n5A40\nEA40\n2FE0\n4A40\nFAC0\n0F60\nAA40\nAA40\nENDCHAR\nSTARTCHAR U_4316\nENCODING 17174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2440\n4FE0\n5480\nE7E0\n2480\n47E0\nF480\n0FE0\nA2C0\nA4A0\nENDCHAR\nSTARTCHAR U_4317\nENCODING 17175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n4FE0\n5540\nE540\n2FE0\n4540\nF540\n0FE0\nA000\n8AA0\nENDCHAR\nSTARTCHAR U_4318\nENCODING 17176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\n73E0\nFD40\nA880\nFD40\nAE00\n1080\n3FC0\n0420\n2480\n4C40\nENDCHAR\nSTARTCHAR U_4319\nENCODING 17177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n4280\n5380\nEFE0\n2540\n47C0\nF540\n07C0\nA280\nAC60\nENDCHAR\nSTARTCHAR U_431A\nENCODING 17178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n4FE0\n5AA0\nEFE0\n2920\n4540\nFFE0\n0380\nA540\nA920\nENDCHAR\nSTARTCHAR U_431B\nENCODING 17179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7900\n5240\nA380\n4100\nA7E0\nF880\n02C0\nF2A0\n94A0\nF180\nENDCHAR\nSTARTCHAR U_431C\nENCODING 17180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2AA0\n46C0\n5FE0\nE440\n2280\n4FE0\nF100\n0FE0\nA540\nA920\nENDCHAR\nSTARTCHAR U_431D\nENCODING 17181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n4280\n57C0\nEAA0\n2280\n47C0\nF000\n0FE0\nA540\nA920\nENDCHAR\nSTARTCHAR U_431E\nENCODING 17182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n4440\n5BA0\nE000\n2EE0\n4AA0\nFEE0\n0440\nA440\nAAA0\nENDCHAR\nSTARTCHAR U_431F\nENCODING 17183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2E40\n4BE0\n5AA0\nEE40\n29E0\n4E40\nFA40\n0BE0\nAE40\nA840\nENDCHAR\nSTARTCHAR U_4320\nENCODING 17184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\n7DE0\n52A0\n4A80\nB540\nBA20\n0C80\n3FC0\n0420\n2480\n4C40\nENDCHAR\nSTARTCHAR U_4321\nENCODING 17185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n4AA0\n5FE0\nEAA0\n2FE0\n4440\nF7C0\n0440\nA280\nAFE0\nENDCHAR\nSTARTCHAR U_4322\nENCODING 17186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n4FE0\n5DA0\nEB60\n2280\n4540\nFBA0\n0080\nA300\nA080\nENDCHAR\nSTARTCHAR U_4323\nENCODING 17187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n26E0\n4D40\n5320\nEFE0\n2820\n57C0\nF480\n07C0\nA440\nA7C0\nENDCHAR\nSTARTCHAR U_4324\nENCODING 17188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\n4920\n5FE0\nED60\n2BA0\n4D60\nF920\n0D60\nABA0\nAD60\nENDCHAR\nSTARTCHAR U_4325\nENCODING 17189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\n4FE0\n5100\nEFE0\n2040\n47C0\nF040\n07C0\nAA40\nABA0\nENDCHAR\nSTARTCHAR U_4326\nENCODING 17190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n25A0\n4360\n55A0\nEB20\n2480\n4FE0\nF480\n07E0\nA480\nA7E0\nENDCHAR\nSTARTCHAR U_4327\nENCODING 17191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4100\n5FE0\nE020\n27C0\n4100\nFFE0\n0E40\nABE0\nAE40\nENDCHAR\nSTARTCHAR U_4328\nENCODING 17192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n4440\n55E0\nEAA0\n3440\n4BA0\nF000\n0FE0\nA540\nAB20\nENDCHAR\nSTARTCHAR U_4329\nENCODING 17193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n4280\n5FE0\nEAA0\n2FE0\n4140\nFFE0\n08A0\nAA40\nA8A0\nENDCHAR\nSTARTCHAR U_432A\nENCODING 17194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n4EE0\n5AA0\nEEE0\n2BA0\n4AA0\nFB20\n0AA0\nABA0\nA860\nENDCHAR\nSTARTCHAR U_432B\nENCODING 17195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F40\n2A40\n4F60\n5A40\nEFA0\n2000\n47C0\nF540\n07C0\nA280\nACE0\nENDCHAR\nSTARTCHAR U_432C\nENCODING 17196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2EE0\n4A80\n54E0\nEE20\n2AE0\n4E80\nFAE0\n0E80\nAAA0\nAAE0\nENDCHAR\nSTARTCHAR U_432D\nENCODING 17197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n4280\n5500\nEFE0\n2480\n47E0\nF480\n07E0\nA540\nAAA0\nENDCHAR\nSTARTCHAR U_432E\nENCODING 17198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n4FE0\n5920\nEBA0\n2100\n42E0\nFFA0\n06E0\nABA0\nAAE0\nENDCHAR\nSTARTCHAR U_432F\nENCODING 17199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n4280\n57C0\nE540\n2280\n47E0\nFC80\n07E0\nA480\nA7E0\nENDCHAR\nSTARTCHAR U_4330\nENCODING 17200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n4440\n57C0\nE440\n2FE0\n4540\nF7C0\n0540\nAFE0\nA140\nENDCHAR\nSTARTCHAR U_4331\nENCODING 17201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\n4400\n57C0\nE440\n2FE0\n4AA0\nFEA0\n0BE0\nAEA0\nABA0\nENDCHAR\nSTARTCHAR U_4332\nENCODING 17202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n4280\n5FE0\nE100\n2FE0\n4AA0\nFFE0\n0100\nAFE0\nAAA0\nENDCHAR\nSTARTCHAR U_4333\nENCODING 17203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n4FE0\n5D60\nEBA0\n2D60\n4BA0\nF100\n07C0\nA140\nAFE0\nENDCHAR\nSTARTCHAR U_4334\nENCODING 17204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\n4400\n57C0\nE440\n2FE0\n4AA0\nFFA0\n0AE0\nAFA0\nAAA0\nENDCHAR\nSTARTCHAR U_4335\nENCODING 17205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n47E0\n5540\nE7E0\n26A0\n47E0\nF4A0\n07E0\nA8A0\nABE0\nENDCHAR\nSTARTCHAR U_4336\nENCODING 17206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n4080\n57E0\nE180\n2180\n4280\nF280\n0480\n3480\nC980\nENDCHAR\nSTARTCHAR U_4337\nENCODING 17207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4FE0\n5920\nE920\n2920\n4FE0\nF920\n0920\n3920\nCFE0\nENDCHAR\nSTARTCHAR U_4338\nENCODING 17208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n47C0\n5200\nE200\n2FE0\n4400\nF7C0\n0080\n3300\nC080\nENDCHAR\nSTARTCHAR U_4339\nENCODING 17209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n4820\n5BA0\nEAA0\n2AA0\n4BA0\nFAA0\n0820\n38A0\nC840\nENDCHAR\nSTARTCHAR U_433A\nENCODING 17210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2440\n4440\n57C0\nE440\n2440\n47C0\nF440\n04E0\n3F40\nC040\nENDCHAR\nSTARTCHAR U_433B\nENCODING 17211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2220\n4220\n5320\nEAA0\n2660\n4AA0\nF320\n0220\n3220\nC660\nENDCHAR\nSTARTCHAR U_433C\nENCODING 17212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n47C0\n5440\nE440\n27C0\n4280\nF280\n02A0\n34A0\nC8E0\nENDCHAR\nSTARTCHAR U_433D\nENCODING 17213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2F20\n4A40\n5540\nE100\n2FE0\n4380\nF540\n0540\nA920\nA920\nENDCHAR\nSTARTCHAR U_433E\nENCODING 17214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4100\n5FE0\nE820\n2AA0\n4FE0\nF920\n0FE0\n3920\nC960\nENDCHAR\nSTARTCHAR U_433F\nENCODING 17215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2000\n43C0\n5240\nE3C0\n2000\n47E0\nF4A0\n07E0\n34A0\nC7E0\nENDCHAR\nSTARTCHAR U_4340\nENCODING 17216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2A80\n4AE0\n5A80\nEAC0\n2B20\n4200\nFFE0\n0AA0\n3AA0\nCFE0\nENDCHAR\nSTARTCHAR U_4341\nENCODING 17217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2940\n47E0\n5080\nED00\n26A0\n45C0\nF680\n05C0\n36A0\nCBE0\nENDCHAR\nSTARTCHAR U_4342\nENCODING 17218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47C0\n7900\nA100\n2100\nFFE0\n2100\nA900\nB900\nC900\n0700\nENDCHAR\nSTARTCHAR U_4343\nENCODING 17219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\nFC40\n4880\n2500\n7FC0\n8400\n0400\nFFE0\n0400\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_4344\nENCODING 17220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4080\n78E0\nA080\n2080\nF880\n23E0\nAA20\nBA20\nCBE0\n0220\nENDCHAR\nSTARTCHAR U_4345\nENCODING 17221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7A80\nA240\n2520\nF880\n27E0\nA840\nBA80\nC900\n0080\nENDCHAR\nSTARTCHAR U_4346\nENCODING 17222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4080\n7FE0\nA420\n2000\nFBC0\n2080\nA880\nB880\nC880\n0380\nENDCHAR\nSTARTCHAR U_4347\nENCODING 17223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40E0\n4700\n7900\nA080\n27C0\nF840\n2080\nA880\nB900\nCB00\n04E0\nENDCHAR\nSTARTCHAR U_4348\nENCODING 17224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47C0\n7900\nA540\n2380\nF900\n27E0\nA900\nB900\nC900\n0100\nENDCHAR\nSTARTCHAR U_4349\nENCODING 17225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n43E0\n7A20\nA220\n2220\nFBE0\n2000\nA940\nB940\nCA20\n0420\nENDCHAR\nSTARTCHAR U_434A\nENCODING 17226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4100\n7FE0\nA280\n2440\nFAA0\n2280\nA900\nB900\nCA80\n0440\nENDCHAR\nSTARTCHAR U_434B\nENCODING 17227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n4700\n7900\nA7E0\n2540\nFD40\n27E0\nAD40\nBFE0\nC900\n03C0\nENDCHAR\nSTARTCHAR U_434C\nENCODING 17228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4080\n7FE0\nA240\n2180\nFFE0\n2000\nABC0\nBA40\nCA40\n03C0\nENDCHAR\nSTARTCHAR U_434D\nENCODING 17229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n2240\nFA60\n8C00\n77E0\n2240\nF980\n2180\nAA40\nFC20\nENDCHAR\nSTARTCHAR U_434E\nENCODING 17230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n47E0\n7A40\nA7E0\n2540\nFFE0\n2560\nA7E0\nBD00\nC5E0\n0AA0\nENDCHAR\nSTARTCHAR U_434F\nENCODING 17231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9240\n9240\n9240\n9240\nFFC0\n8040\n8040\n8040\n8140\n8080\nENDCHAR\nSTARTCHAR U_4350\nENCODING 17232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n4A40\n7FC0\n0000\n3F80\n0400\nFFE0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_4351\nENCODING 17233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\nAAA0\n9120\nAAA0\n8020\n3F80\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_4352\nENCODING 17234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9240\nFFC0\n0800\n0800\nFFC0\n1C00\n2A00\n4900\n88C0\n0800\nENDCHAR\nSTARTCHAR U_4353\nENCODING 17235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n5240\n7FC0\n0000\n7FC0\n1100\n2100\n7FE0\n0900\n3100\nC300\nENDCHAR\nSTARTCHAR U_4354\nENCODING 17236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9240\nFFC0\n0800\n0800\nFFE0\n1000\n1200\n2400\n4980\n9E40\nENDCHAR\nSTARTCHAR U_4355\nENCODING 17237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n5240\n7FC0\n0000\n7FC0\n4400\n4400\n7FE0\n4200\n5520\n62E0\nENDCHAR\nSTARTCHAR U_4356\nENCODING 17238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9240\nFFC0\n4000\n7F80\n8080\n3E80\n2280\n3EA0\n2020\n3FE0\nENDCHAR\nSTARTCHAR U_4357\nENCODING 17239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9240\nFFC0\n0800\nFFE0\n1000\n2100\n7E00\n0C00\n3080\nFFC0\nENDCHAR\nSTARTCHAR U_4358\nENCODING 17240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n5240\n5240\n7FC0\n2480\n1500\nFFE0\n0E00\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_4359\nENCODING 17241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9240\nFFC0\n4000\n7FC0\nA480\n2280\nFFE0\n4900\n7FC0\n0100\nENDCHAR\nSTARTCHAR U_435A\nENCODING 17242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9240\nFFC0\n0800\n7F80\n4080\n7F80\n4080\n7F80\n4A00\n67E0\nENDCHAR\nSTARTCHAR U_435B\nENCODING 17243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8920\nFFE0\n0000\nFFE0\n8420\nBFA0\n8420\n9F20\n9120\nFFE0\nENDCHAR\nSTARTCHAR U_435C\nENCODING 17244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9240\nFFC0\n2000\n7FC0\nC400\n7FC0\n4400\n7FC0\n4400\n7FE0\nENDCHAR\nSTARTCHAR U_435D\nENCODING 17245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9120\nFFE0\n0420\nF640\n2580\n5480\n8860\nFFE0\n8420\nFFE0\nENDCHAR\nSTARTCHAR U_435E\nENCODING 17246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nAAA0\n9120\nAAA0\n0280\nFFE0\n7A00\n4A40\n7980\n01A0\nFA60\nENDCHAR\nSTARTCHAR U_435F\nENCODING 17247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9240\nFFC0\n0C00\n9240\nFFC0\n5080\nBF40\n4A20\n0E00\n3180\nENDCHAR\nSTARTCHAR U_4360\nENCODING 17248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0400\nFFE0\n2A80\n2480\n7FC0\n4A40\n5F40\n4080\nENDCHAR\nSTARTCHAR U_4361\nENCODING 17249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0400\n7FC0\n4900\n7FC0\n4940\n7FC0\n5120\n9DE0\nENDCHAR\nSTARTCHAR U_4362\nENCODING 17250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n2000\n7FC0\nAA80\n7FC0\n2A80\nFFE0\n5240\nC920\nENDCHAR\nSTARTCHAR U_4363\nENCODING 17251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0400\nFFE0\n9520\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_4364\nENCODING 17252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0400\nFFE0\n5B40\n5540\n9520\n2080\n3F80\n4080\nENDCHAR\nSTARTCHAR U_4365\nENCODING 17253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0000\n7FC0\n4880\n5DC0\n6AA0\n53C0\n9200\nBFE0\nENDCHAR\nSTARTCHAR U_4366\nENCODING 17254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n1080\nFDE0\n5740\n7DE0\n1140\nFDE0\n9540\nBDE0\nENDCHAR\nSTARTCHAR U_4367\nENCODING 17255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nAFE0\nF100\nA100\nA7C0\n3100\n6100\nAFE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_4368\nENCODING 17256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n6100\nF7E0\n2100\nF7E0\n2520\nF520\n2520\n25A0\n4540\n8100\nENDCHAR\nSTARTCHAR U_4369\nENCODING 17257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A00\n5200\nFBE0\n2440\n7240\n2240\nFA40\n2180\n2180\n4240\n8420\nENDCHAR\nSTARTCHAR U_436A\nENCODING 17258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n6100\nFFE0\n2100\nF100\n27C0\nF100\n2380\n2540\n4920\n9100\nENDCHAR\nSTARTCHAR U_436B\nENCODING 17259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n6080\nF7E0\n2420\nF200\n2240\nF280\n2300\n2220\n4220\n83E0\nENDCHAR\nSTARTCHAR U_436C\nENCODING 17260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9000\n67C0\nF100\n2540\nF380\n2100\nFFE0\n2100\n2100\n4100\n8100\nENDCHAR\nSTARTCHAR U_436D\nENCODING 17261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9000\n67C0\nF440\n2540\nF540\n2FE0\nF440\n2540\n27E0\n4040\n8080\nENDCHAR\nSTARTCHAR U_436E\nENCODING 17262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9280\n6280\nFAA0\n26C0\nF280\n2280\nF6C0\n2AA0\n2280\n44A0\n88E0\nENDCHAR\nSTARTCHAR U_436F\nENCODING 17263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9200\n63C0\nF480\n2FE0\nF400\n25C0\nF540\n25C0\n2500\n4520\n89E0\nENDCHAR\nSTARTCHAR U_4370\nENCODING 17264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9000\n67E0\nF4A0\n24A0\nF7E0\n24A0\nF4A0\n2560\n2620\n47E0\n8420\nENDCHAR\nSTARTCHAR U_4371\nENCODING 17265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n6100\nF280\n2440\nFBA0\n2100\nFFE0\n2100\n2540\n4920\n8300\nENDCHAR\nSTARTCHAR U_4372\nENCODING 17266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9200\n64C0\nF440\n26C0\nF440\n27C0\nF280\n2280\n22A0\n44A0\n88E0\nENDCHAR\nSTARTCHAR U_4373\nENCODING 17267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9000\n6EE0\nFAA0\n2440\nFAA0\n2000\nFEE0\n2AA0\n2440\n4440\n8AA0\nENDCHAR\nSTARTCHAR U_4374\nENCODING 17268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n90C0\n6700\nF100\n2FE0\nF380\n2D60\nF100\n2FE0\n2240\n4180\n8660\nENDCHAR\nSTARTCHAR U_4375\nENCODING 17269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9200\n63C0\nF480\n2FC0\nF140\n2FE0\nF140\n27C0\n2100\n4500\n8200\nENDCHAR\nSTARTCHAR U_4376\nENCODING 17270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n6FE0\nF100\n27C0\nF540\n27C0\nF540\n27C0\n2380\n4540\n8920\nENDCHAR\nSTARTCHAR U_4377\nENCODING 17271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n67C0\nF240\n2FE0\nF440\n27C0\nF100\n2FE0\n2500\n4FE0\n8100\nENDCHAR\nSTARTCHAR U_4378\nENCODING 17272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9140\n6FE0\nF100\n27C0\nF540\n27C0\nF540\n2080\n2FE0\n4280\n8080\nENDCHAR\nSTARTCHAR U_4379\nENCODING 17273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n67C0\nF440\n27C0\nF440\n27C0\nF440\n2140\n2FE0\n4280\n8C60\nENDCHAR\nSTARTCHAR U_437A\nENCODING 17274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n67C0\nF540\n27C0\nF100\n27C0\nF540\n27C0\n2100\n4AA0\n8BC0\nENDCHAR\nSTARTCHAR U_437B\nENCODING 17275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97E0\n65A0\nF7E0\n2480\nF7E0\n2240\nF7E0\n2240\n2FE0\n4240\n8C20\nENDCHAR\nSTARTCHAR U_437C\nENCODING 17276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9000\n6FE0\nFA40\n2FE0\nF6C0\n2B60\nF7C0\n2440\n27C0\n4440\n87C0\nENDCHAR\nSTARTCHAR U_437D\nENCODING 17277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97E0\n6400\nF7E0\n2540\nF7E0\n2540\nF7E0\n2540\n24E0\n4680\n8BE0\nENDCHAR\nSTARTCHAR U_437E\nENCODING 17278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5120\n5120\n55A0\n5360\nF920\n5360\n55A0\n5120\n55A0\n9240\nENDCHAR\nSTARTCHAR U_437F\nENCODING 17279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n4920\n28A0\n1860\n69A0\n8A20\n7FC0\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_4380\nENCODING 17280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8C0\n28A0\nABE0\n7A80\n2A80\n2AA0\n7AA0\nABC0\n2AA0\nA960\n5A20\nENDCHAR\nSTARTCHAR U_4381\nENCODING 17281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\nF920\n25A0\n2360\n2120\nFB60\n8DA0\n8920\n8DA0\nFA40\nENDCHAR\nSTARTCHAR U_4382\nENCODING 17282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n2BE0\nAA20\n7FA0\n2AA0\n6BA0\nBA60\n2A00\n2A20\nAA20\n59E0\nENDCHAR\nSTARTCHAR U_4383\nENCODING 17283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n13E0\n7CA0\n56A0\n55E0\n7CA0\n55E0\n54A0\nFEA0\n44A0\n4DE0\nENDCHAR\nSTARTCHAR U_4384\nENCODING 17284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nF7E0\n5120\n55A0\n5360\nB120\n0360\nF5A0\n9120\n95A0\nF240\nENDCHAR\nSTARTCHAR U_4385\nENCODING 17285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n47E0\nF120\n95A0\n9360\n9120\nF360\n95A0\n9120\n95A0\nF240\nENDCHAR\nSTARTCHAR U_4386\nENCODING 17286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n4920\n28A0\nD760\n0A00\n1980\nE460\n1F80\n0100\n0E00\n0100\nENDCHAR\nSTARTCHAR U_4387\nENCODING 17287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n2120\n7920\n4DA0\n6B60\n5920\nEB60\n6DA0\n5920\n8DA0\n9A40\nENDCHAR\nSTARTCHAR U_4388\nENCODING 17288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n2880\n2BE0\nBAA0\n6BE0\n2AA0\n6BE0\nB8A0\n28C0\nA8A0\n5B60\nENDCHAR\nSTARTCHAR U_4389\nENCODING 17289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8C0\n28A0\nABE0\n7A80\n2AA0\n2BA0\n7AC0\nAA80\n2AA0\nAD60\n5620\nENDCHAR\nSTARTCHAR U_438A\nENCODING 17290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FE0\n8920\n55A0\n2360\n5120\n8920\n7B60\n4DA0\n4920\n7B60\nENDCHAR\nSTARTCHAR U_438B\nENCODING 17291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nA7E0\nF920\nA5A0\n2360\nF920\n0120\nFB60\n8DA0\n8920\nFB60\nENDCHAR\nSTARTCHAR U_438C\nENCODING 17292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n2520\n2520\nB5E0\n6C40\n2440\n6D60\nB540\n25C0\nB540\n4A20\nENDCHAR\nSTARTCHAR U_438D\nENCODING 17293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8A0\n2BE0\n2880\nBBE0\n6AA0\n2BE0\n6AA0\nBBE0\n2AA0\nAAA0\n5A40\nENDCHAR\nSTARTCHAR U_438E\nENCODING 17294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5540\n5540\n7740\nD540\n5740\n7540\nD5C0\n5740\n5D40\nA160\nENDCHAR\nSTARTCHAR U_438F\nENCODING 17295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n53E0\n68A0\n86A0\n79E0\n10A0\n21A0\n7AE0\n48A0\n4AA0\n7960\nENDCHAR\nSTARTCHAR U_4390\nENCODING 17296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nF7E0\n2120\nF5A0\n9360\nF120\n9360\nF5A0\n2120\nF5A0\n2240\nENDCHAR\nSTARTCHAR U_4391\nENCODING 17297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2840\nABC0\n7840\n2FE0\n2880\n7AA0\nA9C0\n2AC0\nACA0\n5980\nENDCHAR\nSTARTCHAR U_4392\nENCODING 17298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n2FE0\nA900\n79C0\n2EA0\n2860\n7940\nAFE0\n2940\nA9A0\n5E60\nENDCHAR\nSTARTCHAR U_4393\nENCODING 17299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n2BA0\nA9C0\n7AC0\n2CA0\n2980\n7BE0\nAA20\n2BE0\nAA20\n5BE0\nENDCHAR\nSTARTCHAR U_4394\nENCODING 17300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8A0\n2FE0\nA880\n7BE0\n2AA0\n2BE0\n7AA0\nA840\n2FE0\nA940\n5840\nENDCHAR\nSTARTCHAR U_4395\nENCODING 17301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n5500\n2A80\n4440\n7FE0\n8020\n7BC0\n2940\n18C0\n6B40\n1840\nENDCHAR\nSTARTCHAR U_4396\nENCODING 17302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8800\n57E0\nF920\nADA0\nFB60\n0120\n7B60\n4DA0\n7920\n4DA0\n7A40\nENDCHAR\nSTARTCHAR U_4397\nENCODING 17303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7800\n23E0\nFCA0\n4AA0\nF5E0\n50A0\nFDA0\n86E0\nBCA0\nAEA0\nBD60\nENDCHAR\nSTARTCHAR U_4398\nENCODING 17304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n2920\nFDA0\n2B60\nF920\n2360\nADA0\nF920\nADA0\nAA40\nENDCHAR\nSTARTCHAR U_4399\nENCODING 17305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n84A0\n7AA0\n29E0\nB0A0\n7DA0\nD6E0\n7CA0\n4AA0\n8560\nENDCHAR\nSTARTCHAR U_439A\nENCODING 17306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA40\n2FE0\n2A40\nAFE0\n7A40\n2FE0\n6920\nBFE0\n2A80\nAE20\n5BC0\nENDCHAR\nSTARTCHAR U_439B\nENCODING 17307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3E80\n0900\nFFE0\n0C00\n3040\nDFC0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_439C\nENCODING 17308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1080\n7BC0\n14A0\nFFE0\n1080\n6100\nBB60\n2180\n2D20\n31E0\nENDCHAR\nSTARTCHAR U_439D\nENCODING 17309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3E80\n0900\nFFE0\n0800\n3040\nDFC0\n0000\nFBE0\n28A0\nDB60\nENDCHAR\nSTARTCHAR U_439E\nENCODING 17310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3E80\n0500\nFFE0\n0900\n3F80\nD4C0\n1280\n7FC0\n0040\n0180\nENDCHAR\nSTARTCHAR U_439F\nENCODING 17311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47E0\nF900\n5FE0\n5AA0\n9AA0\nAAA0\n6AA0\n5A20\n9AA0\n0840\nENDCHAR\nSTARTCHAR U_43A0\nENCODING 17312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4FE0\n4200\nFFE0\n5AA0\n5AA0\nDAA0\n7A20\n5840\n5020\n9FE0\nENDCHAR\nSTARTCHAR U_43A1\nENCODING 17313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0800\n7FC0\n5240\n5240\n52C0\n4400\n2440\n4A80\n3180\nC060\nENDCHAR\nSTARTCHAR U_43A2\nENCODING 17314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFBE0\n2400\n7000\n27E0\nF840\n2080\n7100\n6A20\nA420\n23E0\nENDCHAR\nSTARTCHAR U_43A3\nENCODING 17315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFA40\n2540\n7540\n2440\nFC40\n2540\n7640\n6CA0\nA120\n2600\nENDCHAR\nSTARTCHAR U_43A4\nENCODING 17316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFC40\n27C0\n7400\n27E0\nFC20\n27A0\n76A0\n6FA0\nA420\n2840\nENDCHAR\nSTARTCHAR U_43A5\nENCODING 17317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFA40\n2420\n7180\n2240\nFC20\n23C0\n7240\n6A40\nA3C0\n2240\nENDCHAR\nSTARTCHAR U_43A6\nENCODING 17318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFAA0\n22A0\n74C0\n2120\nFA20\n2080\n72A0\n6AC0\nA120\n2620\nENDCHAR\nSTARTCHAR U_43A7\nENCODING 17319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF880\n27E0\n7240\n2180\nFFE0\n2000\n73C0\n6A40\nA240\n23C0\nENDCHAR\nSTARTCHAR U_43A8\nENCODING 17320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2280\n7540\n27E0\nFD40\n27C0\n7540\n6FC0\nA120\n21E0\nENDCHAR\nSTARTCHAR U_43A9\nENCODING 17321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\nFD40\n2A80\n7540\n22A0\nFFE0\n24A0\n77E0\n6CA0\nA7E0\n2420\nENDCHAR\nSTARTCHAR U_43AA\nENCODING 17322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFC40\n27C0\n7440\n27C0\nF880\n2FE0\n7480\n6A80\nA080\n2180\nENDCHAR\nSTARTCHAR U_43AB\nENCODING 17323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nFCA0\n2560\n77E0\n2240\nFD20\n23C0\n7240\n6D80\nA180\n2660\nENDCHAR\nSTARTCHAR U_43AC\nENCODING 17324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n26A0\nF7E0\n2100\nFBC0\n2100\n77E0\n6900\nA240\n27A0\nENDCHAR\nSTARTCHAR U_43AD\nENCODING 17325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nF5E0\n2340\n7040\n27E0\nFA00\n22E0\n72A0\n6AE0\nA500\n28E0\nENDCHAR\nSTARTCHAR U_43AE\nENCODING 17326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n2140\n77E0\n24A0\nFFE0\n24A0\n75E0\n6D60\nA5E0\n2420\nENDCHAR\nSTARTCHAR U_43AF\nENCODING 17327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFFE0\n2240\n77E0\n2520\nFFE0\n2100\n77E0\n6900\nA240\n2420\nENDCHAR\nSTARTCHAR U_43B0\nENCODING 17328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A20\nFFC0\n2A80\n7F80\n20E0\nFEA0\n2AA0\n7EA0\n6AA0\nAEA0\n2120\nENDCHAR\nSTARTCHAR U_43B1\nENCODING 17329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nFAA0\n2FE0\n7480\n2AE0\nFE80\n20E0\n7E80\n6AE0\nAE80\n2AE0\nENDCHAR\nSTARTCHAR U_43B2\nENCODING 17330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n5040\n5080\n7080\n5100\n7100\n5200\n5A20\n7420\nD420\n13E0\nENDCHAR\nSTARTCHAR U_43B3\nENCODING 17331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n4920\n4920\n79E0\n4920\n7920\n49E0\n4D20\n7920\nC920\n0A60\nENDCHAR\nSTARTCHAR U_43B4\nENCODING 17332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nFA40\n5240\n77E0\n5240\n7240\n57E0\n7A40\nD240\n1240\n1440\nENDCHAR\nSTARTCHAR U_43B5\nENCODING 17333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF940\n5040\n7240\n5280\n76C0\n5AA0\n5320\n7A00\nD640\n19C0\nENDCHAR\nSTARTCHAR U_43B6\nENCODING 17334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF880\n57E0\n74A0\n54A0\n77E0\n54A0\n5CA0\n77E0\nD080\n1080\nENDCHAR\nSTARTCHAR U_43B7\nENCODING 17335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFD00\n57C0\n7500\n5100\n7FE0\n5100\n5B80\n7540\nD920\n1100\nENDCHAR\nSTARTCHAR U_43B8\nENCODING 17336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n5100\n57C0\n7240\n5240\n77E0\n5000\n7BC0\nD240\n1240\n13C0\nENDCHAR\nSTARTCHAR U_43B9\nENCODING 17337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n1500\nFFC0\n1500\n2480\nFFE0\n1100\n1F00\n11E0\nFF00\n0100\nENDCHAR\nSTARTCHAR U_43BA\nENCODING 17338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0220\nFA20\n5FA0\n72A0\n5FA0\n72A0\n5FA0\n5AA0\n7AA0\nD220\n1260\nENDCHAR\nSTARTCHAR U_43BB\nENCODING 17339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n52A0\n53E0\n72A0\n53E0\n7220\n5BE0\n7360\nD3E0\n1220\n1460\nENDCHAR\nSTARTCHAR U_43BC\nENCODING 17340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n5040\n53C0\n7040\n5FE0\n7100\n5D40\n7380\nD540\n1920\n1300\nENDCHAR\nSTARTCHAR U_43BD\nENCODING 17341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5280\n53E0\n7240\n5320\n7000\n53E0\n5A20\n73E0\nD220\n13E0\nENDCHAR\nSTARTCHAR U_43BE\nENCODING 17342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFA80\n5440\n7BA0\n5000\n77E0\n56A0\n5FE0\n76A0\nD6A0\n1460\nENDCHAR\nSTARTCHAR U_43BF\nENCODING 17343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFC80\n5480\n75A0\n5FA0\n74C0\n5680\n5D80\n74C0\nD520\n1520\nENDCHAR\nSTARTCHAR U_43C0\nENCODING 17344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0220\nFA20\n5FA0\n72A0\n5FA0\n7AA0\n5FA0\n52A0\n7F20\nDAA0\n1260\nENDCHAR\nSTARTCHAR U_43C1\nENCODING 17345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF900\n5FE0\n7920\n57C0\n7280\n5FE0\n5100\n7FC0\nD100\n1100\nENDCHAR\nSTARTCHAR U_43C2\nENCODING 17346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0300\nFD60\n5520\n7760\n5520\n77E0\n5100\n57E0\n7A40\nD180\n1660\nENDCHAR\nSTARTCHAR U_43C3\nENCODING 17347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5420\n53C0\n7240\n53C0\n7240\n5BC0\n7080\nD7E0\n1240\n1420\nENDCHAR\nSTARTCHAR U_43C4\nENCODING 17348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n5AA0\n7440\n5BA0\n7200\n57C0\n5900\n77C0\nD100\n17E0\nENDCHAR\nSTARTCHAR U_43C5\nENCODING 17349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n57E0\n55A0\n7A40\n5420\n7BC0\n5000\n5FE0\n7540\nD920\n1100\nENDCHAR\nSTARTCHAR U_43C6\nENCODING 17350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n5280\n7FE0\n5AA0\n7FE0\n5AA0\n5FE0\n7540\nD4C0\n17C0\nENDCHAR\nSTARTCHAR U_43C7\nENCODING 17351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5280\n5FE0\n7AA0\n5FE0\n7000\n57C0\n5000\n7FE0\nD540\n1920\nENDCHAR\nSTARTCHAR U_43C8\nENCODING 17352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nFA40\n5480\n77E0\n5240\n7480\n57E0\n5A40\n76C0\nDB60\n1240\nENDCHAR\nSTARTCHAR U_43C9\nENCODING 17353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5520\n57E0\n7240\n5480\n77E0\n5240\n57E0\n7000\nD540\n1AA0\nENDCHAR\nSTARTCHAR U_43CA\nENCODING 17354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFAE0\n5F80\n75E0\n5F20\n70E0\n5780\n5DE0\n7780\nD5A0\n15E0\nENDCHAR\nSTARTCHAR U_43CB\nENCODING 17355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0480\nFFE0\n0480\n3F80\n2480\nE5E0\n4540\nCDC0\n5520\n75E0\nENDCHAR\nSTARTCHAR U_43CC\nENCODING 17356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n1200\n2100\n4080\nBFE0\n2080\n3F80\n2080\n3F80\n2080\n2180\nENDCHAR\nSTARTCHAR U_43CD\nENCODING 17357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0900\n1080\n7FC0\n0040\n3F80\n2080\n2C80\n2380\n2C80\n2180\nENDCHAR\nSTARTCHAR U_43CE\nENCODING 17358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF780\n9480\n9480\nF480\n9680\n9580\nF580\n9480\n94A0\n94A0\nB8E0\nENDCHAR\nSTARTCHAR U_43CF\nENCODING 17359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4880\n4880\n7880\n4FE0\n4880\n7880\n4880\n4880\nAA80\n9100\nENDCHAR\nSTARTCHAR U_43D0\nENCODING 17360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n4BC0\n7940\n4940\n4FE0\n7900\n4900\n4A80\nAA40\n9420\nENDCHAR\nSTARTCHAR U_43D1\nENCODING 17361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F80\n2900\nE600\n1800\n3FC0\nC440\n5B40\n4440\n5B40\n4040\nENDCHAR\nSTARTCHAR U_43D2\nENCODING 17362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A80\n4A80\n4A80\n7BE0\n4A00\n4A00\n7BC0\n4A40\n4A40\nAA40\n9440\nENDCHAR\nSTARTCHAR U_43D3\nENCODING 17363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7800\n4BC0\n6800\n5800\n4FE0\n5A80\n6A80\n4A80\n4AA0\nAAA0\n94E0\nENDCHAR\nSTARTCHAR U_43D4\nENCODING 17364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4940\n4940\n7940\n4940\n4BC0\n7940\n4940\n4940\nA940\n97E0\nENDCHAR\nSTARTCHAR U_43D5\nENCODING 17365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n4B80\n4880\n7880\n4880\n4BE0\n7880\n4880\n4880\nA880\n93E0\nENDCHAR\nSTARTCHAR U_43D6\nENCODING 17366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BA0\n48A0\n48A0\n7BA0\n4A20\n4A20\n7BA0\n48A0\n48A0\nAAA0\n9120\nENDCHAR\nSTARTCHAR U_43D7\nENCODING 17367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n4BC0\n4C00\n7BC0\n4800\n4F80\n7880\n4880\n48A0\nA860\n9020\nENDCHAR\nSTARTCHAR U_43D8\nENCODING 17368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9540\n9540\nF540\n9540\n9540\nF540\n9560\n9600\n9400\nB7E0\nENDCHAR\nSTARTCHAR U_43D9\nENCODING 17369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n4FE0\n7D20\n4D20\n4900\n7980\n4A80\n4AA0\nAAA0\n94E0\nENDCHAR\nSTARTCHAR U_43DA\nENCODING 17370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n4900\n7B40\n4D20\n4D00\n7920\n4840\n4880\nA900\n9600\nENDCHAR\nSTARTCHAR U_43DB\nENCODING 17371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n4BE0\n6A20\n5C20\n49A0\n5820\n6BE0\n4820\n4820\nA940\n9080\nENDCHAR\nSTARTCHAR U_43DC\nENCODING 17372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n6A40\n5A80\n4AE0\n5A20\n6B20\n4AC0\n4A40\nAAA0\n9520\nENDCHAR\nSTARTCHAR U_43DD\nENCODING 17373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4FC0\n4900\n7900\n4FE0\n4A00\n7BC0\n4840\n4A80\nA900\n9080\nENDCHAR\nSTARTCHAR U_43DE\nENCODING 17374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4880\n6BC0\n5880\n4880\n5FE0\n6880\n49C0\n4AA0\nAAA0\n9480\nENDCHAR\nSTARTCHAR U_43DF\nENCODING 17375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9080\n92A0\nF220\n9640\n9AA0\nFB20\n9200\n9620\n9A20\nB1E0\nENDCHAR\nSTARTCHAR U_43E0\nENCODING 17376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n5100\n5FE0\n7000\n5440\n5440\n7240\n5280\n5080\n9100\nB7E0\nENDCHAR\nSTARTCHAR U_43E1\nENCODING 17377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4800\n4800\n7800\n4FE0\n4880\n7980\n4AC0\n4CA0\n8880\n9980\nENDCHAR\nSTARTCHAR U_43E2\nENCODING 17378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\n5080\n57E0\n74A0\n5480\n57C0\n7540\n5540\n5480\n9540\nBA20\nENDCHAR\nSTARTCHAR U_43E3\nENCODING 17379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n4A40\n7BC0\n4A40\n4A40\n7BC0\n4A40\n4A40\n8A40\n9FE0\nENDCHAR\nSTARTCHAR U_43E4\nENCODING 17380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4820\n4820\n7FE0\n4820\n4BA0\n7AA0\n4AA0\n4BA0\n8820\n9860\nENDCHAR\nSTARTCHAR U_43E5\nENCODING 17381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7100\n57C0\n5540\n77C0\n5540\n7FE0\n5440\n5440\n9440\nB4C0\nENDCHAR\nSTARTCHAR U_43E6\nENCODING 17382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n70C0\n5700\n5100\n7FE0\n5100\n5100\n77C0\n5440\n5440\n97C0\nB440\nENDCHAR\nSTARTCHAR U_43E7\nENCODING 17383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n49C0\n4A40\n7D80\n4900\n7E80\n49E0\n4F20\n48C0\n8980\n9E00\nENDCHAR\nSTARTCHAR U_43E8\nENCODING 17384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BE0\n4A20\n7A20\n4BE0\n4A00\n7BE0\n4A20\n4A20\n8BE0\n9A20\nENDCHAR\nSTARTCHAR U_43E9\nENCODING 17385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4980\n4A40\n7C20\n4BC0\n4800\n7BC0\n4A40\n4A40\n8BC0\n9A40\nENDCHAR\nSTARTCHAR U_43EA\nENCODING 17386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4A40\n4A40\n7BC0\n4A40\n4BC0\n7A40\n4A40\n4FE0\n4840\n9840\nENDCHAR\nSTARTCHAR U_43EB\nENCODING 17387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5280\n5480\n7FE0\n5480\n5580\n76C0\n54A0\n5480\n9480\nB480\nENDCHAR\nSTARTCHAR U_43EC\nENCODING 17388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5280\n5440\n77C0\n5500\n57C0\n7900\n5100\n5FE0\n9100\nB100\nENDCHAR\nSTARTCHAR U_43ED\nENCODING 17389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5500\n57C0\n7900\n5100\n5FE0\n7100\n5380\n5540\n9920\nB100\nENDCHAR\nSTARTCHAR U_43EE\nENCODING 17390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5100\n5FE0\n7120\n5220\n54C0\n7820\n56C0\n5000\n9280\nBC60\nENDCHAR\nSTARTCHAR U_43EF\nENCODING 17391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5100\n5FE0\n7100\n5100\n57C0\n7100\n52A0\n5620\n5A40\nA9C0\nENDCHAR\nSTARTCHAR U_43F0\nENCODING 17392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5120\n5520\n7920\n52A0\n5C40\n7100\n52A0\n5620\n9A40\nA9C0\nENDCHAR\nSTARTCHAR U_43F1\nENCODING 17393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5440\n57C0\n7400\n57E0\n5420\n77A0\n54A0\n57A0\n9420\nB8C0\nENDCHAR\nSTARTCHAR U_43F2\nENCODING 17394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7440\n5280\n57C0\n7140\n57C0\n5500\n7FE0\n5320\n5520\n99C0\nB100\nENDCHAR\nSTARTCHAR U_43F3\nENCODING 17395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7420\n55C0\n5F00\n7500\n55E0\n5740\n7D40\n5540\n5540\n9540\nBA40\nENDCHAR\nSTARTCHAR U_43F4\nENCODING 17396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\n54A0\n52C0\n77E0\n5420\n57E0\n7420\n57E0\n5420\n9420\nB460\nENDCHAR\nSTARTCHAR U_43F5\nENCODING 17397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5240\n5FE0\n72A0\n52C0\n52A0\n72C0\n52A0\n54C0\n97A0\nB8E0\nENDCHAR\nSTARTCHAR U_43F6\nENCODING 17398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7480\n5480\n57E0\n7480\n55A0\n56E0\n7100\n57C0\n5100\n9100\nBFE0\nENDCHAR\nSTARTCHAR U_43F7\nENCODING 17399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5440\n57C0\n7440\n57C0\n5000\n77C0\n5100\n5FE0\n9100\nB100\nENDCHAR\nSTARTCHAR U_43F8\nENCODING 17400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5100\n57C0\n7240\n5240\n5FE0\n7000\n53C0\n5240\n9240\nB3C0\nENDCHAR\nSTARTCHAR U_43F9\nENCODING 17401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5440\n57C0\n7440\n57C0\n5440\n77C0\n5280\n5280\n94A0\nB8E0\nENDCHAR\nSTARTCHAR U_43FA\nENCODING 17402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5C40\n5380\n7C60\n5100\n57C0\n7100\n57C0\n5100\n9FE0\nB100\nENDCHAR\nSTARTCHAR U_43FB\nENCODING 17403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5100\n57C0\n7100\n5100\n5FE0\n7100\n5200\n5240\n94E0\nB720\nENDCHAR\nSTARTCHAR U_43FC\nENCODING 17404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A80\n4A40\n4FE0\n7940\n49A0\n4E60\n7A40\n4FE0\n4940\n89A0\n9E60\nENDCHAR\nSTARTCHAR U_43FD\nENCODING 17405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n5100\n5FE0\n7440\n5280\n5FE0\n7000\n57C0\n5440\n9440\nB7C0\nENDCHAR\nSTARTCHAR U_43FE\nENCODING 17406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57E0\n5100\n7FC0\n5200\n5FE0\n7540\n5BA0\n5100\n9FC0\nB100\nENDCHAR\nSTARTCHAR U_43FF\nENCODING 17407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n7BE0\n4E40\n7980\n4260\nBF80\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_4400\nENCODING 17408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5280\n7440\n5FE0\n5040\n7740\n5540\n5740\n5040\nB0C0\nENDCHAR\nSTARTCHAR U_4401\nENCODING 17409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5100\n5100\n72A0\n5DC0\n5280\n7FC0\n52A0\n5DA0\n5280\n9100\nENDCHAR\nSTARTCHAR U_4402\nENCODING 17410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n53C0\n5440\n7780\n5100\n5FE0\n7520\n53C0\n5540\n5920\nB300\nENDCHAR\nSTARTCHAR U_4403\nENCODING 17411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5420\n54E0\n77A0\n54A0\n57E0\n74A0\n55A0\n56E0\n54A0\n97E0\nENDCHAR\nSTARTCHAR U_4404\nENCODING 17412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n53C0\n5240\n7480\n5300\n5460\n7420\n56E0\n5420\n5420\nB7E0\nENDCHAR\nSTARTCHAR U_4405\nENCODING 17413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5420\n57E0\n7500\n55E0\n5680\n7480\n57E0\n5480\n5540\n9A20\nENDCHAR\nSTARTCHAR U_4406\nENCODING 17414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n70E0\n5720\n5920\n7540\n5100\n5FE0\n7100\n5380\n5540\n5920\n9100\nENDCHAR\nSTARTCHAR U_4407\nENCODING 17415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7400\n57E0\n5AA0\n72A0\n52A0\n5540\n77E0\n5420\n57E0\n5420\nB7E0\nENDCHAR\nSTARTCHAR U_4408\nENCODING 17416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5200\n77C0\n5440\n77C0\n5440\n57C0\n5440\n5440\nBFE0\nENDCHAR\nSTARTCHAR U_4409\nENCODING 17417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n72A0\n5540\n5540\n72A0\n5000\n57E0\n7520\n57E0\n5520\n57E0\n9420\nENDCHAR\nSTARTCHAR U_440A\nENCODING 17418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5420\n57E0\n7420\n57E0\n5480\n7480\n57E0\n5480\n55A0\nB6E0\nENDCHAR\nSTARTCHAR U_440B\nENCODING 17419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\n5240\n5420\n7900\n5240\n57E0\n7200\n5140\n5520\n5C40\n93C0\nENDCHAR\nSTARTCHAR U_440C\nENCODING 17420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n3F80\n2A80\n3F80\n2A80\nFFE0\n5140\n9F20\n1100\n1F00\n2100\nENDCHAR\nSTARTCHAR U_440D\nENCODING 17421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5100\n77C0\n5000\n57C0\n7440\n57C0\n5440\n5280\n9FE0\nENDCHAR\nSTARTCHAR U_440E\nENCODING 17422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5440\n57C0\n7440\n57C0\n5000\n7FE0\n5500\n55C0\n5700\n98E0\nENDCHAR\nSTARTCHAR U_440F\nENCODING 17423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5100\n77C0\n5200\n5FE0\n7440\n5FE0\n5540\n5640\n97C0\nENDCHAR\nSTARTCHAR U_4410\nENCODING 17424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7340\n5E40\n5340\n72E0\n5F40\n5240\n7740\n5AC0\n5240\n52A0\n9320\nENDCHAR\nSTARTCHAR U_4411\nENCODING 17425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7540\n5FE0\n5540\n75C0\n5400\n57E0\n7100\n5FE0\n5380\n5540\nB920\nENDCHAR\nSTARTCHAR U_4412\nENCODING 17426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5440\n7920\n53C0\n5E80\n7100\n5FC0\n5240\n5180\n9E00\nENDCHAR\nSTARTCHAR U_4413\nENCODING 17427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5200\n57C0\n7440\n57C0\n5440\n77C0\n5440\n57C0\n9440\n9820\nENDCHAR\nSTARTCHAR U_4414\nENCODING 17428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFC0\nA800\nAFE0\nE820\nAFE0\nA800\nEFE0\nAAA0\nAFE0\nAAA0\nB2A0\nENDCHAR\nSTARTCHAR U_4415\nENCODING 17429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5440\n5FE0\n7440\n57C0\n5440\n77C0\n5440\n5FE0\n5040\nB040\nENDCHAR\nSTARTCHAR U_4416\nENCODING 17430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5420\n57E0\n7480\n56A0\n55C0\n77E0\n5480\n55C0\n56A0\n9880\nENDCHAR\nSTARTCHAR U_4417\nENCODING 17431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n57C0\n5240\n7280\n5FE0\n5240\n77E0\n5C40\n57C0\n5440\n97C0\nENDCHAR\nSTARTCHAR U_4418\nENCODING 17432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5520\n5280\n57E0\n7200\n5FE0\n7200\n53E0\n5520\n54C0\n9B20\nENDCHAR\nSTARTCHAR U_4419\nENCODING 17433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7440\n5FE0\n5440\n77C0\n5100\n57C0\n7540\n57C0\n5100\n5FE0\n9100\nENDCHAR\nSTARTCHAR U_441A\nENCODING 17434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nAAA0\nEEA0\nAAA0\nAEA0\nE8A0\nAAA0\nAEE0\nA980\nA080\nENDCHAR\nSTARTCHAR U_441B\nENCODING 17435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5240\n77E0\n5A40\n53C0\n7240\n53C0\n5240\n5FE0\n9040\nENDCHAR\nSTARTCHAR U_441C\nENCODING 17436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5200\n77C0\n5440\n57C0\n7440\n57C0\n5440\n5FE0\n9440\nENDCHAR\nSTARTCHAR U_441D\nENCODING 17437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7920\n5540\n57C0\n7440\n57C0\n5440\n77C0\n5440\n57C0\n5440\nB820\nENDCHAR\nSTARTCHAR U_441E\nENCODING 17438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7EE0\n5220\n56E0\n7880\n56E0\n5220\n7BA0\n5660\n5BA0\n5220\nBCC0\nENDCHAR\nSTARTCHAR U_441F\nENCODING 17439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5FE0\n5280\n77C0\n5280\n5FE0\n7540\n57C0\n5540\n5FE0\nB440\nENDCHAR\nSTARTCHAR U_4420\nENCODING 17440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7440\n5FE0\n5440\n7100\n5FE0\n5400\n77C0\n5540\n5540\n5540\nB960\nENDCHAR\nSTARTCHAR U_4421\nENCODING 17441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0A40\nF580\n5540\n9520\n7FC0\n4A40\n75C0\n4A40\n71C0\nENDCHAR\nSTARTCHAR U_4422\nENCODING 17442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7400\n57E0\n5AA0\n77A0\n5220\n5440\n77E0\n5AA0\n57A0\n5220\nBCC0\nENDCHAR\nSTARTCHAR U_4423\nENCODING 17443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5440\n57C0\n7000\n57C0\n5540\n76C0\n5540\n5640\n57C0\nB820\nENDCHAR\nSTARTCHAR U_4424\nENCODING 17444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7240\n5FE0\n5100\n77C0\n5100\n5FE0\n7400\n57E0\n5480\n5880\nB7E0\nENDCHAR\nSTARTCHAR U_4425\nENCODING 17445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5440\n5A20\n7480\n57C0\n5000\n7EE0\n5AA0\n5660\n5AA0\n9660\nENDCHAR\nSTARTCHAR U_4426\nENCODING 17446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFC0\nA100\nFFE0\nA480\nAFC0\nE000\nAFE0\nAAA0\nAAA0\nBFE0\nENDCHAR\nSTARTCHAR U_4427\nENCODING 17447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57E0\n5000\n73C0\n5240\n57E0\n7420\n57A0\n54A0\n57A0\nB460\nENDCHAR\nSTARTCHAR U_4428\nENCODING 17448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\nFE40\n1240\n7C60\n0000\nFFC0\nAA40\n3A40\n2980\n3A40\n4C20\nENDCHAR\nSTARTCHAR U_4429\nENCODING 17449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7540\n5540\n57C0\n7000\n5FE0\n5000\n77C0\n5440\n57C0\n5280\n9FE0\nENDCHAR\nSTARTCHAR U_442A\nENCODING 17450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7480\n57E0\n5C80\n77C0\n5480\n57E0\n7480\n57C0\n5260\n5420\nB8C0\nENDCHAR\nSTARTCHAR U_442B\nENCODING 17451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE540\nA940\nB2A0\nE6A0\nA800\nB880\nEAE0\nAA80\nAA80\nAB80\nAC60\nENDCHAR\nSTARTCHAR U_442C\nENCODING 17452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE280\nAFE0\nA280\nEFE0\nAAA0\nAFE0\nEAA0\nAFE0\nA540\nA640\nA7C0\nENDCHAR\nSTARTCHAR U_442D\nENCODING 17453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEAA0\nBFE0\nAAA0\nFBA0\nA000\nBFE0\nE220\nAFC0\nAA40\nAAC0\nA200\nENDCHAR\nSTARTCHAR U_442E\nENCODING 17454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA440\nE280\nAFE0\nAA80\nEBC0\nAC80\nABC0\nA880\nB7E0\nENDCHAR\nSTARTCHAR U_442F\nENCODING 17455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5540\n57C0\n7540\n57C0\n5280\n77C0\n5440\n5FE0\n5540\nB920\nENDCHAR\nSTARTCHAR U_4430\nENCODING 17456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE480\nA4E0\nA9A0\nEA40\nBAA0\nABE0\nEAA0\nAAE0\nAAA0\nA8E0\nA8A0\nENDCHAR\nSTARTCHAR U_4431\nENCODING 17457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA280\nEFE0\nA920\nAFE0\nE920\nABA0\nAAA0\nABA0\nA860\nENDCHAR\nSTARTCHAR U_4432\nENCODING 17458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5220\n5BA0\n7660\n5BA0\n5220\n77C0\n5440\n57C0\n5440\n97C0\nENDCHAR\nSTARTCHAR U_4433\nENCODING 17459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n53C0\n5480\n7FE0\n5520\n57E0\n7520\n57E0\n5000\n5AA0\n92A0\nENDCHAR\nSTARTCHAR U_4434\nENCODING 17460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFBE0\nAA80\nFFE0\n9180\nAAA0\nCC60\n3F80\n2080\n3F80\n2080\n2180\nENDCHAR\nSTARTCHAR U_4435\nENCODING 17461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5FE0\n5280\n7380\n5000\n5FE0\n7540\n57C0\n5540\n57C0\nB820\nENDCHAR\nSTARTCHAR U_4436\nENCODING 17462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nAAA0\nBFE0\nEAA0\nB320\nA000\nEFC0\nA840\nAFC0\nA840\nAFC0\nENDCHAR\nSTARTCHAR U_4437\nENCODING 17463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5540\n57C0\n7000\n57C0\n5540\n77C0\n5540\n5FE0\n5100\nB100\nENDCHAR\nSTARTCHAR U_4438\nENCODING 17464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5140\n5FE0\n7140\n57C0\n7540\n5FE0\n5540\n57C0\n5000\nBFE0\nENDCHAR\nSTARTCHAR U_4439\nENCODING 17465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nAFC0\nA240\nFFE0\nA240\nAFC0\nEAA0\nAFE0\nAA20\nAEE0\nB2A0\nENDCHAR\nSTARTCHAR U_443A\nENCODING 17466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA280\nAFE0\nEAA0\nAFE0\nA440\nE7C0\nA440\nBFE0\nA100\nA100\nENDCHAR\nSTARTCHAR U_443B\nENCODING 17467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5100\n77C0\n5440\n57C0\n7100\n57C0\n5280\n5FE0\n9100\nENDCHAR\nSTARTCHAR U_443C\nENCODING 17468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n54A0\n5EA0\n74A0\n5F60\n5480\n77C0\n5480\n5FE0\n5540\n9920\nENDCHAR\nSTARTCHAR U_443D\nENCODING 17469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE440\nAFE0\nA440\nE7C0\nA000\nAFE0\nE920\nAD60\nABA0\nAD60\nA920\nENDCHAR\nSTARTCHAR U_443E\nENCODING 17470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nAAA0\nAFE0\nE100\nAFE0\nA100\nEFE0\nA440\nAFE0\nA100\nA100\nENDCHAR\nSTARTCHAR U_443F\nENCODING 17471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE400\nAFE0\nAB60\nEDA0\nAFE0\nAB20\nED60\nA100\nAFE0\nA440\nB820\nENDCHAR\nSTARTCHAR U_4440\nENCODING 17472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\n7740\n55E0\n7720\n54A0\n7740\n55E0\n5D40\n57E0\nB040\n9040\nENDCHAR\nSTARTCHAR U_4441\nENCODING 17473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0A00\n75C0\n4A40\n75C0\n4A40\nFFE0\nA0A0\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_4442\nENCODING 17474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE600\nAAC0\nAB40\nEEC0\nAB40\nAFC0\nEB40\nAD40\nBFE0\nA480\nA840\nENDCHAR\nSTARTCHAR U_4443\nENCODING 17475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n77C0\n5280\n5FE0\n7BA0\n56C0\n7580\n5340\n5580\n5AC0\n9120\nENDCHAR\nSTARTCHAR U_4444\nENCODING 17476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7780\n5480\n5780\n7480\n5FC0\n7540\n5FE0\n5280\n5280\n9480\nENDCHAR\nSTARTCHAR U_4445\nENCODING 17477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n57C0\n5280\n77C0\n5540\n5FE0\n7920\n53C0\n5680\n5180\n9600\nENDCHAR\nSTARTCHAR U_4446\nENCODING 17478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n77C0\n5100\n57C0\n7FE0\n5280\n77C0\n5AA0\n53C0\n5280\n9760\nENDCHAR\nSTARTCHAR U_4447\nENCODING 17479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\n7480\n57E0\n56C0\n7A40\n57C0\n7440\n57C0\n5440\n57C0\n9C60\nENDCHAR\nSTARTCHAR U_4448\nENCODING 17480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n77A0\n5AC0\n57A0\n7AC0\n5FE0\n7100\n5FE0\n5380\n5560\n9920\nENDCHAR\nSTARTCHAR U_4449\nENCODING 17481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7FE0\n5400\n57C0\n76C0\n5380\n76C0\n57C0\n57C0\n5540\n9AE0\nENDCHAR\nSTARTCHAR U_444A\nENCODING 17482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n73C0\n5AC0\n57E0\n7140\n5DC0\n7540\n55C0\n57E0\n5540\n9BE0\nENDCHAR\nSTARTCHAR U_444B\nENCODING 17483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7FE0\n56C0\n56C0\n7280\n57C0\n7280\n5FE0\n5340\n5680\n9B60\nENDCHAR\nSTARTCHAR U_444C\nENCODING 17484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nAEE0\nE920\nAFE0\nA920\nEBA0\nAAA0\nA920\nABA0\nAD60\nENDCHAR\nSTARTCHAR U_444D\nENCODING 17485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nAEE0\nEAA0\nAEE0\nAAA0\nE200\nBFE0\nA480\nA300\nACC0\nENDCHAR\nSTARTCHAR U_444E\nENCODING 17486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEAA0\nB580\nBFE0\nEA80\nBB80\nAA80\nFBA0\nAAA0\nBBA0\nAF40\nB0A0\nENDCHAR\nSTARTCHAR U_444F\nENCODING 17487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5EE0\n56C0\n76C0\n5300\n57C0\n7D00\n57C0\n57C0\n5500\n97E0\nENDCHAR\nSTARTCHAR U_4450\nENCODING 17488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFA00\nA3E0\nA480\nF880\n8880\n89C0\nFAA0\nA4A0\nA080\nF980\nENDCHAR\nSTARTCHAR U_4451\nENCODING 17489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n06C0\nF280\nAFE0\nA280\nF7C0\n9100\n97C0\nF100\nAFE0\nA280\nFC60\nENDCHAR\nSTARTCHAR U_4452\nENCODING 17490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF800\n27E0\n4120\n9120\nFB20\n2520\nF920\n2120\n2A20\n3420\nC8C0\nENDCHAR\nSTARTCHAR U_4453\nENCODING 17491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n1500\nFFE0\n9120\n3F80\n0400\n3F80\n0400\n7FC0\nENDCHAR\nSTARTCHAR U_4454\nENCODING 17492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n4080\n9FE0\n8880\n8BE0\nDAA0\n8AA0\n8AA0\nFAE0\n8880\n0080\nENDCHAR\nSTARTCHAR U_4455\nENCODING 17493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BC0\n4040\n7BC0\n4040\n7FC0\n4440\n7FC0\n4440\n7FC0\n4460\n8420\nENDCHAR\nSTARTCHAR U_4456\nENCODING 17494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n47E0\n9940\n8FE0\n8940\nDBC0\n8900\n8DC0\n8D00\nF780\n8860\nENDCHAR\nSTARTCHAR U_4457\nENCODING 17495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n4240\n9BC0\n8A40\n8FE0\nDA00\n8BE0\n8D60\nFAA0\n8520\n02C0\nENDCHAR\nSTARTCHAR U_4458\nENCODING 17496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n47E0\n9900\n8BC0\n8900\nDFE0\n8A00\n8BC0\nFC80\n8880\n07E0\nENDCHAR\nSTARTCHAR U_4459\nENCODING 17497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BC0\nE240\n2240\n27E0\nFA40\n2240\n27E0\n7A40\n4A40\n4A40\n7AC0\nENDCHAR\nSTARTCHAR U_445A\nENCODING 17498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BE0\nE220\n2220\nFBE0\n2220\n23E0\n7A20\n4A20\n4A20\n7A20\n4C60\nENDCHAR\nSTARTCHAR U_445B\nENCODING 17499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1860\nE3C0\n2240\n2240\nFA40\n23E0\n2240\n7A40\n4B40\n4A20\n79A0\nENDCHAR\nSTARTCHAR U_445C\nENCODING 17500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3540\nEFE0\n2540\n25C0\nFC00\n27E0\n7880\n4FE0\n4980\n7AC0\n4CA0\nENDCHAR\nSTARTCHAR U_445D\nENCODING 17501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n0000\nFFE0\nA0A0\n7BE0\nCA80\n37E0\n2080\nC080\nENDCHAR\nSTARTCHAR U_445E\nENCODING 17502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n5500\n4E00\n5580\n4A00\n7FC0\n2080\n7BE0\nAA80\n17E0\nE080\nENDCHAR\nSTARTCHAR U_445F\nENCODING 17503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C80\nE5E0\nA960\nFDA0\n85E0\n6800\nBDE0\nE840\n3DE0\n4840\n8BE0\nENDCHAR\nSTARTCHAR U_4460\nENCODING 17504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7BE0\n4820\n7840\n4880\nFC80\n4880\n6880\n5880\n4880\n9B80\nENDCHAR\nSTARTCHAR U_4461\nENCODING 17505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7FC0\n5440\n7540\n54C0\nF280\n5280\n7100\n5280\n5440\n9820\nENDCHAR\nSTARTCHAR U_4462\nENCODING 17506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2000\n77E0\n5280\n7280\n5280\nFA80\n5280\n7280\n52A0\n54A0\n98E0\nENDCHAR\nSTARTCHAR U_4463\nENCODING 17507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n7880\n4B00\n7800\n4840\nFC80\n4B00\n6820\n5840\n4880\n9B00\nENDCHAR\nSTARTCHAR U_4464\nENCODING 17508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7900\n4A80\n7C40\n4BA0\nF800\n4FC0\n6840\n5840\n4880\n9900\nENDCHAR\nSTARTCHAR U_4465\nENCODING 17509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n77C0\n5440\n7480\n57E0\nFD20\n5520\n7540\n5480\n5940\n9620\nENDCHAR\nSTARTCHAR U_4466\nENCODING 17510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n7400\n57E0\n7820\n57A0\nF4A0\n54A0\n77A0\n5020\n5020\nB0C0\nENDCHAR\nSTARTCHAR U_4467\nENCODING 17511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n7440\n5C40\n77E0\n5440\nFD40\n54C0\n7440\n5440\n5440\n94C0\nENDCHAR\nSTARTCHAR U_4468\nENCODING 17512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n7400\n57E0\n7880\n5480\nFCE0\n57A0\n74A0\n5400\n5420\n93E0\nENDCHAR\nSTARTCHAR U_4469\nENCODING 17513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7100\n5100\n7FE0\n5100\nF100\n57C0\n7440\n5440\n5440\n97C0\nENDCHAR\nSTARTCHAR U_446A\nENCODING 17514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7100\n5280\n7440\n5820\nF7C0\n5000\n77C0\n5440\n5440\n97C0\nENDCHAR\nSTARTCHAR U_446B\nENCODING 17515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2420\n7240\n57E0\n7240\n5240\nFA40\n57E0\n7240\n5240\n5240\n9440\nENDCHAR\nSTARTCHAR U_446C\nENCODING 17516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n7280\n5280\n7AA0\n56C0\nF280\n56C0\n7AA0\n5280\n54A0\n98E0\nENDCHAR\nSTARTCHAR U_446D\nENCODING 17517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n72E0\n5040\n7840\n5440\nF040\n5240\n7240\n5C40\n5440\n95E0\nENDCHAR\nSTARTCHAR U_446E\nENCODING 17518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n7240\n5240\n7420\n5900\nF7E0\n5100\n7380\n5540\n5920\n9100\nENDCHAR\nSTARTCHAR U_446F\nENCODING 17519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n7280\n57C0\n7140\n57C0\nFD00\n57E0\n5120\n7320\n5D20\nB140\nENDCHAR\nSTARTCHAR U_4470\nENCODING 17520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7500\n55C0\n7500\n5FE0\nF100\n5500\n7540\n5980\n5300\n9C00\nENDCHAR\nSTARTCHAR U_4471\nENCODING 17521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n77E0\n5420\n7000\n57E0\nF4A0\n54E0\n7AA0\n5180\n52A0\n9CE0\nENDCHAR\nSTARTCHAR U_4472\nENCODING 17522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n71C0\n5100\n77C0\n5440\nF7C0\n5440\n77C0\n5100\n5FE0\n9100\nENDCHAR\nSTARTCHAR U_4473\nENCODING 17523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7A80\n4C40\n7BA0\n4800\nFFE0\n4AA0\n6FE0\n5AA0\n4AA0\n8860\nENDCHAR\nSTARTCHAR U_4474\nENCODING 17524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n7240\n57E0\n7240\n53C0\nF240\n53C0\n7240\n5FE0\n5240\n9420\nENDCHAR\nSTARTCHAR U_4475\nENCODING 17525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n7220\n52E0\n7220\n53E0\nFA20\n53E0\n7220\n53E0\n5220\nB460\nENDCHAR\nSTARTCHAR U_4476\nENCODING 17526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n77E0\n5100\n77C0\n5100\nFFE0\n5440\n77C0\n5440\n57C0\n9440\nENDCHAR\nSTARTCHAR U_4477\nENCODING 17527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n77E0\n5420\n77E0\n5400\nFDE0\n5520\n75E0\n5520\n55E0\n9920\nENDCHAR\nSTARTCHAR U_4478\nENCODING 17528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n77E0\n5420\n73C0\n5000\nF7E0\n5100\n7540\n5520\n5920\n9100\nENDCHAR\nSTARTCHAR U_4479\nENCODING 17529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n77E0\n5920\n7540\n5280\nF440\n5820\n77C0\n5240\n5180\n9E60\nENDCHAR\nSTARTCHAR U_447A\nENCODING 17530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n7440\n57C0\n7540\n57C0\nF540\n57C0\n7540\n55C0\n5660\n9820\nENDCHAR\nSTARTCHAR U_447B\nENCODING 17531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n7280\n50E0\n7F00\n54E0\nF740\n5540\n75E0\n5540\n5940\n93C0\nENDCHAR\nSTARTCHAR U_447C\nENCODING 17532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n77E0\n5AA0\n77A0\n5220\nF440\n57E0\n7AA0\n57A0\n5220\n94C0\nENDCHAR\nSTARTCHAR U_447D\nENCODING 17533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n7440\n57C0\n7440\n57C0\nF000\n5FE0\n7120\n5DA0\n5360\n9DA0\nENDCHAR\nSTARTCHAR U_447E\nENCODING 17534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n77E0\n5C80\n77C0\n5480\nF7C0\n5480\n77E0\n5440\n5380\n9C60\nENDCHAR\nSTARTCHAR U_447F\nENCODING 17535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n77E0\n5420\n73E0\n5480\nFDE0\n5520\n55E0\n7520\n5520\n95E0\nENDCHAR\nSTARTCHAR U_4480\nENCODING 17536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n77E0\n5540\n7A40\n57E0\nFC40\n5440\n7540\n54C0\n5440\nB4C0\nENDCHAR\nSTARTCHAR U_4481\nENCODING 17537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n7AA0\n5660\n7AA0\n5220\nF400\n57C0\n7440\n57C0\n5440\nB7C0\nENDCHAR\nSTARTCHAR U_4482\nENCODING 17538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n7560\n55A0\n7560\n5740\nF1E0\n5720\n75A0\n5560\n9520\n9960\nENDCHAR\nSTARTCHAR U_4483\nENCODING 17539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7940\n55E0\n7240\n5FE0\nF400\n55E0\n7520\n55E0\n5C00\n93E0\nENDCHAR\nSTARTCHAR U_4484\nENCODING 17540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7FE0\n5020\n77C0\n5280\nF280\n57C0\n7540\n57C0\n5540\n97C0\nENDCHAR\nSTARTCHAR U_4485\nENCODING 17541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n7FE0\n5100\n7FE0\n5240\nF7E0\n5AC0\n7340\n52C0\n5340\n93C0\nENDCHAR\nSTARTCHAR U_4486\nENCODING 17542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n7280\n5FE0\n74A0\n5FA0\nF4A0\n5740\n7540\n5740\n55A0\n9B20\nENDCHAR\nSTARTCHAR U_4487\nENCODING 17543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n5020\n77E0\n5280\nFA80\n57C0\n7540\n57C0\n5540\n97C0\nENDCHAR\nSTARTCHAR U_4488\nENCODING 17544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n5540\n7FE0\n5440\nF7C0\n5440\n77C0\n5440\n57C0\n9820\nENDCHAR\nSTARTCHAR U_4489\nENCODING 17545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n7FE0\n5540\n7FE0\n5540\nFFE0\n5440\n7FE0\n5540\n53E0\n9C40\nENDCHAR\nSTARTCHAR U_448A\nENCODING 17546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n49E0\n8640\nFBE0\n22A0\n42A0\n7BE0\n0A00\n0A00\n5220\n21E0\nENDCHAR\nSTARTCHAR U_448B\nENCODING 17547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21C0\nFA40\nABE0\nAAA0\nFEA0\n23E0\n3200\n4A20\n4220\n81E0\nENDCHAR\nSTARTCHAR U_448C\nENCODING 17548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n85E0\n7A40\n4BE0\n7AA0\n4AA0\n7BE0\n2200\nFE20\n4A20\n85E0\nENDCHAR\nSTARTCHAR U_448D\nENCODING 17549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF9C0\n5640\n2080\nFFE0\nA2A0\n7BE0\n2200\n3A20\n4A20\n99E0\nENDCHAR\nSTARTCHAR U_448E\nENCODING 17550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFDC0\n5240\n2880\nFFE0\n52A0\n8BE0\n5200\nFA20\n5220\n91E0\nENDCHAR\nSTARTCHAR U_448F\nENCODING 17551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n51C0\nFA40\nAC80\nFBE0\nAAA0\nFBE0\n5200\n7220\n5220\n71E0\nENDCHAR\nSTARTCHAR U_4490\nENCODING 17552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nED00\n29E0\nFE40\nABE0\nFEA0\n02A0\nFFE0\nAA00\n3A20\n2A20\n39E0\nENDCHAR\nSTARTCHAR U_4491\nENCODING 17553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n0000\n4040\n2040\n2080\n1080\n1100\n0000\n0040\nFFE0\n0000\nENDCHAR\nSTARTCHAR U_4492\nENCODING 17554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n0040\n0240\n0C40\n3040\nC040\n0140\n0080\nENDCHAR\nSTARTCHAR U_4493\nENCODING 17555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n7FE0\n1000\n3F80\n0080\n0080\n0900\n0600\nENDCHAR\nSTARTCHAR U_4494\nENCODING 17556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n1200\n1200\n1100\n2100\n2080\n4040\n8060\nENDCHAR\nSTARTCHAR U_4495\nENCODING 17557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n0400\n2480\n2440\n4420\n8420\n0400\n1C00\nENDCHAR\nSTARTCHAR U_4496\nENCODING 17558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7F80\n0880\n0880\n7E80\n0880\n0880\n08A0\n0860\nENDCHAR\nSTARTCHAR U_4497\nENCODING 17559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4000\n7FC0\n8000\n3F00\n0400\n1840\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_4498\nENCODING 17560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2000\n3F80\n6100\n9100\n0A00\n0400\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_4499\nENCODING 17561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\n2480\n0400\n0400\n0780\n0400\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_449A\nENCODING 17562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\n0400\n2500\n2480\n4440\n8520\n0200\n1C00\nE000\nENDCHAR\nSTARTCHAR U_449B\nENCODING 17563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2000\n4000\n57C0\nF040\n2040\n4040\n5040\nF980\nENDCHAR\nSTARTCHAR U_449C\nENCODING 17564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2400\n3FC0\n4400\n0400\nFFE0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_449D\nENCODING 17565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3180\n0E00\n71C0\n1100\n1100\n0A00\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_449E\nENCODING 17566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n7FE0\n4440\n8400\n0A00\n1200\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_449F\nENCODING 17567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1F80\n1480\n1280\nFFE0\n1080\n1080\n2080\n4380\nENDCHAR\nSTARTCHAR U_44A0\nENCODING 17568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n0780\n7C00\n0400\n7FC0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_44A1\nENCODING 17569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n7C40\n0440\n7C40\n4040\nFC40\n0440\n3840\nENDCHAR\nSTARTCHAR U_44A2\nENCODING 17570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n1BC0\n6240\n4240\n4A40\n72C0\n0200\n0200\nENDCHAR\nSTARTCHAR U_44A3\nENCODING 17571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n2080\n7FC0\n2080\nFFE0\n2080\n2180\nENDCHAR\nSTARTCHAR U_44A4\nENCODING 17572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n2080\n3F80\n2080\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_44A5\nENCODING 17573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n0400\n3F80\n2480\n2480\n2480\n2580\n0400\nENDCHAR\nSTARTCHAR U_44A6\nENCODING 17574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n03C0\n7C00\n0200\n3F80\n0100\n0600\n1800\n67E0\nENDCHAR\nSTARTCHAR U_44A7\nENCODING 17575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n3F80\n0400\nFFE0\n0800\n1080\n7FC0\n2040\nENDCHAR\nSTARTCHAR U_44A8\nENCODING 17576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2000\n3F80\n4400\n0400\nFFE0\n0900\n1080\nE060\nENDCHAR\nSTARTCHAR U_44A9\nENCODING 17577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFBE0\n1080\n0380\n7C00\n0400\nFFE0\n1480\n2440\nC420\n0400\nENDCHAR\nSTARTCHAR U_44AA\nENCODING 17578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2080\n7FC0\n1100\n1100\nFFE0\n1100\n2100\nC100\nENDCHAR\nSTARTCHAR U_44AB\nENCODING 17579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1280\n2240\n63E0\nAE00\n2100\n2120\n20A0\n2060\nENDCHAR\nSTARTCHAR U_44AC\nENCODING 17580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n0000\nFFE0\n0400\n1480\n2440\nC420\n0C00\nENDCHAR\nSTARTCHAR U_44AD\nENCODING 17581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n0080\nFFE0\n0100\nFFE0\n1100\n0900\n0300\nENDCHAR\nSTARTCHAR U_44AE\nENCODING 17582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8020\n1F00\n1100\n1D00\n1320\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_44AF\nENCODING 17583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8820\n7F00\n0900\n3900\n1520\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_44B0\nENCODING 17584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n1100\n7FC0\n4000\n5FC0\n4200\n4F80\n4200\n5FC0\n4000\n7FC0\nENDCHAR\nSTARTCHAR U_44B1\nENCODING 17585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nFFE0\n1200\n3F00\n0200\nF440\n1680\n2500\n4CE0\n8400\n7FC0\nENDCHAR\nSTARTCHAR U_44B2\nENCODING 17586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n20C0\nF700\n5100\n5100\n5FE0\n2100\n5120\n81E0\nENDCHAR\nSTARTCHAR U_44B3\nENCODING 17587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7F80\n1080\n11C0\n2440\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_44B4\nENCODING 17588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2480\nFFE0\n1000\n3F80\nD080\n1F80\n1080\n1F80\n1080\nENDCHAR\nSTARTCHAR U_44B5\nENCODING 17589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2000\nFBC0\n5040\n5080\n57E0\n2080\n5080\n8180\nENDCHAR\nSTARTCHAR U_44B6\nENCODING 17590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2480\n7FC0\n4440\n7FC0\n4440\n7FC0\n0480\n0720\nF8E0\nENDCHAR\nSTARTCHAR U_44B7\nENCODING 17591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0380\n7C00\n0400\nFFE0\n0400\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_44B8\nENCODING 17592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n0800\n3F80\n2A80\n2A80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_44B9\nENCODING 17593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n07C0\n7C00\n0400\n7F80\n0400\nFFE0\n2480\nC460\nENDCHAR\nSTARTCHAR U_44BA\nENCODING 17594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n0800\n3300\n0C00\n1080\n7FC0\n2500\n2480\n4C40\nENDCHAR\nSTARTCHAR U_44BB\nENCODING 17595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n23E0\n2220\nAA20\nABE0\nAA00\nAA20\nFA20\n01E0\nENDCHAR\nSTARTCHAR U_44BC\nENCODING 17596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0A00\n0A00\n7FC0\n4A40\n7FC0\n4A40\n4A40\n7FC0\nENDCHAR\nSTARTCHAR U_44BD\nENCODING 17597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4040\n6AC0\n5140\n5140\n6AC0\n4040\n40C0\nENDCHAR\nSTARTCHAR U_44BE\nENCODING 17598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\nFFE0\n1000\n2480\nE300\n2200\n2980\n3060\nENDCHAR\nSTARTCHAR U_44BF\nENCODING 17599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8020\nBFA0\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_44C0\nENCODING 17600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n7FC0\n0400\n3F80\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_44C1\nENCODING 17601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n0400\n3F80\n0100\nFFE0\n2100\n1100\n0600\nENDCHAR\nSTARTCHAR U_44C2\nENCODING 17602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\nFFE0\n0000\n3F80\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_44C3\nENCODING 17603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n7FC0\n4440\n7FC0\n4000\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_44C4\nENCODING 17604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nD0C0\n2700\n5400\nB7E0\n5480\n9480\n1480\n6880\nENDCHAR\nSTARTCHAR U_44C5\nENCODING 17605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n61C0\n1600\nC400\n27E0\n1480\nE480\n4880\n5080\nENDCHAR\nSTARTCHAR U_44C6\nENCODING 17606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n20C0\nF700\n2400\n37E0\nE480\n2480\n2480\nE880\nENDCHAR\nSTARTCHAR U_44C7\nENCODING 17607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n3F80\n0400\nFFE0\n1100\n5140\n9120\n2300\nENDCHAR\nSTARTCHAR U_44C8\nENCODING 17608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2780\n5480\nA860\n6780\nA480\n2280\n2300\n2CE0\nENDCHAR\nSTARTCHAR U_44C9\nENCODING 17609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FE0\n2A40\n4AC0\nFE20\n2A20\n4B20\n8AC0\n1A00\nENDCHAR\nSTARTCHAR U_44CA\nENCODING 17610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n0800\n7F80\n0880\nFFE0\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_44CB\nENCODING 17611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n67C0\n1480\nC480\n27E0\n1480\nE480\n46A0\n4460\nENDCHAR\nSTARTCHAR U_44CC\nENCODING 17612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\nFFE0\n0400\n3F80\n0440\n5220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_44CD\nENCODING 17613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2480\n3F80\n0000\n3F80\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_44CE\nENCODING 17614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2400\n27C0\n6840\nB240\n2140\n3140\n4840\n8180\nENDCHAR\nSTARTCHAR U_44CF\nENCODING 17615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n0D00\n3480\nC460\n0400\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_44D0\nENCODING 17616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n1100\n2480\nFFE0\n2480\n3F80\n24A0\n07E0\nENDCHAR\nSTARTCHAR U_44D1\nENCODING 17617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4FC0\n2480\n8480\n5FE0\n1480\nA480\n4480\n4880\nENDCHAR\nSTARTCHAR U_44D2\nENCODING 17618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3FC0\n4040\nBF40\n2940\n3F40\n2940\n3F40\n0180\nENDCHAR\nSTARTCHAR U_44D3\nENCODING 17619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n0800\n3F80\n1100\nFFE0\n4900\n8900\n0300\nENDCHAR\nSTARTCHAR U_44D4\nENCODING 17620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3F80\n0500\nFFE0\n0400\n1F80\n2100\nDFE0\n0200\nENDCHAR\nSTARTCHAR U_44D5\nENCODING 17621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n47C0\n2000\nFFE0\n2280\n22A0\n24E0\n5800\n8FE0\nENDCHAR\nSTARTCHAR U_44D6\nENCODING 17622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n7FE0\n90A0\n6440\n3F80\n0880\n1080\n6300\nENDCHAR\nSTARTCHAR U_44D7\nENCODING 17623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2880\nD160\n3F80\n1080\n0440\n52A0\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_44D8\nENCODING 17624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFBE0\n1100\n3900\nCA80\n3440\nCFE0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_44D9\nENCODING 17625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n0400\nFFE0\n1500\n75C0\n1500\nF4E0\n0400\nENDCHAR\nSTARTCHAR U_44DA\nENCODING 17626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n27C0\n5440\nA7C0\n6440\nA7C0\n2440\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_44DB\nENCODING 17627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4040\n7FC0\n4200\n5240\n5FC0\n9240\n9FC0\nENDCHAR\nSTARTCHAR U_44DC\nENCODING 17628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4FC0\n2900\n8900\n4FE0\n1900\n2AA0\nCEA0\n4960\nENDCHAR\nSTARTCHAR U_44DD\nENCODING 17629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F00\n0200\n7FC0\n0400\n0400\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_44DE\nENCODING 17630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7F80\n4000\n7F80\n4080\n7FC0\n4500\nDF00\nB0C0\nENDCHAR\nSTARTCHAR U_44DF\nENCODING 17631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nFFE0\n1200\n7FC0\n4440\n5F40\n4440\n7FC0\n5140\n5F40\n80C0\nENDCHAR\nSTARTCHAR U_44E0\nENCODING 17632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFBE0\n1500\n7CC0\n1700\nE4E0\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_44E1\nENCODING 17633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2000\n7DE0\n9120\nFD20\n1120\n2920\n45E0\n8000\nENDCHAR\nSTARTCHAR U_44E2\nENCODING 17634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4440\n7FC0\n4440\n5F40\n5140\n5140\n7FC0\nENDCHAR\nSTARTCHAR U_44E3\nENCODING 17635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n0400\n7FC0\n5540\n5540\n6EC0\n4440\n41C0\nENDCHAR\nSTARTCHAR U_44E4\nENCODING 17636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3FC0\n4A40\n1240\n2480\n0A00\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_44E5\nENCODING 17637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\nF1E0\n1100\n7FC0\n1100\n3F80\n2080\n3F80\n2080\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_44E6\nENCODING 17638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0A00\n3F80\n2A80\n3F80\n2A80\nFFE0\n2080\n4040\nENDCHAR\nSTARTCHAR U_44E7\nENCODING 17639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n0200\n77C0\n5540\n7480\n5F40\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_44E8\nENCODING 17640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\nA020\n7F80\n0400\n7FC0\n0400\n2480\n3F80\nENDCHAR\nSTARTCHAR U_44E9\nENCODING 17641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2100\nFFE0\n2100\n77C0\n6A40\nA280\n2180\n2E60\nENDCHAR\nSTARTCHAR U_44EA\nENCODING 17642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n3F80\n2080\n3FC0\nCA40\n1440\n6980\nENDCHAR\nSTARTCHAR U_44EB\nENCODING 17643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n7FC0\n1100\nFFE0\n2480\n2480\n3C80\n0180\nENDCHAR\nSTARTCHAR U_44EC\nENCODING 17644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0780\n0400\n3F80\n2080\n3F80\n2080\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_44ED\nENCODING 17645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4620\n38A0\nD4A0\n12A0\nFEA0\n38A0\n5420\n9260\nENDCHAR\nSTARTCHAR U_44EE\nENCODING 17646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7A00\n2BE0\n1140\nFD40\n3540\n5080\n9140\n3620\nENDCHAR\nSTARTCHAR U_44EF\nENCODING 17647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n0400\n7F80\n2480\nFFE0\n2480\n3FC0\n1100\nENDCHAR\nSTARTCHAR U_44F0\nENCODING 17648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n0A00\n3F80\n2A80\n2A80\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_44F1\nENCODING 17649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n5DC0\n5100\nFCE0\n0400\nFFE0\n1480\n2440\nC420\nENDCHAR\nSTARTCHAR U_44F2\nENCODING 17650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2480\nC860\n5780\n4480\n4480\n4780\n44A0\n5860\nENDCHAR\nSTARTCHAR U_44F3\nENCODING 17651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n27C0\nD440\n27C0\nE440\n27C0\n2520\n24C0\n2660\nENDCHAR\nSTARTCHAR U_44F4\nENCODING 17652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n0800\n7FC0\n5240\n0400\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_44F5\nENCODING 17653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n3F80\n0000\nFBE0\n8A20\n8A20\nFBE0\nENDCHAR\nSTARTCHAR U_44F6\nENCODING 17654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFE20\n1120\n7D20\n5520\n7D20\n3920\n5420\n9260\nENDCHAR\nSTARTCHAR U_44F7\nENCODING 17655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n6400\n19E0\nC400\n3BE0\n2840\nC840\n4840\n49C0\nENDCHAR\nSTARTCHAR U_44F8\nENCODING 17656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n5000\nFBE0\n5080\nA880\n57E0\nF880\n5080\nA880\nENDCHAR\nSTARTCHAR U_44F9\nENCODING 17657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0E00\n3980\nC460\n3F80\n2480\n3F80\n2500\n33C0\nENDCHAR\nSTARTCHAR U_44FA\nENCODING 17658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0A00\nFFE0\n0400\n7FC0\n0400\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_44FB\nENCODING 17659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8020\n7240\n07E0\nFA40\n5180\n5240\n8FE0\nENDCHAR\nSTARTCHAR U_44FC\nENCODING 17660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4480\n5FE0\nE440\nA4A0\nA640\n6AA0\n4A40\n91E0\nENDCHAR\nSTARTCHAR U_44FD\nENCODING 17661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2000\nFFC0\n0040\nF040\n07C0\nF400\n9420\nF3E0\nENDCHAR\nSTARTCHAR U_44FE\nENCODING 17662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nE540\n09A0\nE100\n1200\nFFE0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_44FF\nENCODING 17663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n0A00\n7FC0\n5140\n4A40\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_4500\nENCODING 17664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n2080\n17C0\n2100\n6FE0\nA540\n2B20\n2EE0\n2380\n2C60\nENDCHAR\nSTARTCHAR U_4501\nENCODING 17665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFFE0\n1100\n6AC0\n7FC0\n0400\nFFE0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_4502\nENCODING 17666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2480\nFFE0\n8420\n3F80\n1100\nFFE0\n0400\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_4503\nENCODING 17667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\n4000\n23C0\nFA40\n13C0\n3240\n6BC0\nA240\n27E0\nENDCHAR\nSTARTCHAR U_4504\nENCODING 17668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2880\n3FC0\nD100\n2E00\nFBC0\n4400\nFFE0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_4505\nENCODING 17669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\n7FC0\n3E80\n2280\nFFE0\n3E80\n2280\n3E80\n0180\nENDCHAR\nSTARTCHAR U_4506\nENCODING 17670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nD7C0\n2540\nD540\n37C0\nD100\n17C0\n5100\n2FE0\nENDCHAR\nSTARTCHAR U_4507\nENCODING 17671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2480\n4440\n7FC0\n0000\nFFE0\n2080\n3F80\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_4508\nENCODING 17672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\n1F00\n0400\nFFE0\n1100\n1F00\n1100\n1F00\n3180\nENDCHAR\nSTARTCHAR U_4509\nENCODING 17673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\n1860\nE380\n2080\nFBE0\n30C0\n69A0\nAAA0\n2080\nENDCHAR\nSTARTCHAR U_450A\nENCODING 17674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFA40\n27E0\n2240\nFA40\n27E0\n2A40\n3240\nC440\nENDCHAR\nSTARTCHAR U_450B\nENCODING 17675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2100\n4540\nF520\n4520\n9140\nF180\n5300\nAC00\nENDCHAR\nSTARTCHAR U_450C\nENCODING 17676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0900\n3F80\n2480\n3F80\n1000\nFFE0\n4480\nBF60\n0400\nENDCHAR\nSTARTCHAR U_450D\nENCODING 17677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2400\n3F80\n2400\n3FE0\n0020\n5520\n5540\nENDCHAR\nSTARTCHAR U_450E\nENCODING 17678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4FE0\n2100\nF7C0\n2540\n27C0\n2540\n7920\n87E0\nENDCHAR\nSTARTCHAR U_450F\nENCODING 17679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4500\n27C0\nF900\n2FE0\n2440\n27C0\n3800\nC7E0\nENDCHAR\nSTARTCHAR U_4510\nENCODING 17680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2480\n1FE0\n8320\n5DE0\n1240\nAFE0\n4320\n5CE0\nENDCHAR\nSTARTCHAR U_4511\nENCODING 17681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nFFE0\n1200\n3040\nCD40\n78C0\n1240\nFD60\n5BC0\n9440\n3040\nENDCHAR\nSTARTCHAR U_4512\nENCODING 17682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nE100\nAFE0\nC440\nBFE0\nA000\nE7C0\n8440\n87C0\nENDCHAR\nSTARTCHAR U_4513\nENCODING 17683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2200\nFBE0\n0480\n7880\n07E0\n7880\n4880\n7880\nENDCHAR\nSTARTCHAR U_4514\nENCODING 17684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n3FC0\n1100\nFFE0\n2480\n3F80\n1120\nE0E0\nENDCHAR\nSTARTCHAR U_4515\nENCODING 17685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1140\n7FE0\n5100\n77C0\n5540\n77C0\n5540\n57C0\n9540\nENDCHAR\nSTARTCHAR U_4516\nENCODING 17686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n9100\nAFC0\n9460\nDFC0\nA440\n8B80\n8C60\nENDCHAR\nSTARTCHAR U_4517\nENCODING 17687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4440\n2280\nF7C0\n2100\n77C0\nA100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_4518\nENCODING 17688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4000\n7BC0\nA240\nFBC0\n2240\nABC0\nAA40\nFFE0\nENDCHAR\nSTARTCHAR U_4519\nENCODING 17689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3200\n4BE0\nFC20\n1220\n7D20\n5420\n3820\n60C0\nENDCHAR\nSTARTCHAR U_451A\nENCODING 17690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7F80\n4000\n7FC0\n5280\n5FC0\n5280\n9F80\n9080\nENDCHAR\nSTARTCHAR U_451B\nENCODING 17691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n47E0\n4100\n7BC0\n4240\n43C0\n5A40\n63C0\n0420\nENDCHAR\nSTARTCHAR U_451C\nENCODING 17692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF900\n57C0\n7540\n57C0\n7540\n5FE0\nF440\n14C0\nENDCHAR\nSTARTCHAR U_451D\nENCODING 17693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nFFE0\n1200\n5FC0\n5220\nF9E0\n0F00\n0900\n3F80\n1500\n64C0\nENDCHAR\nSTARTCHAR U_451E\nENCODING 17694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n0A00\n5F40\n2A80\n5F40\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_451F\nENCODING 17695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n39C0\nE240\n2180\nFEE0\n2120\n72C0\nA880\n2700\nENDCHAR\nSTARTCHAR U_4520\nENCODING 17696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2540\nF380\n27C0\n7440\n6FC0\nA440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_4521\nENCODING 17697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1F00\n2200\nFF80\n2480\n3F80\n2480\n7FC0\n8920\nENDCHAR\nSTARTCHAR U_4522\nENCODING 17698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n6EC0\n1100\n7FC0\n0000\nFFE0\n1000\n3FC0\n0080\nENDCHAR\nSTARTCHAR U_4523\nENCODING 17699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7C40\n1140\nFD40\n5440\n3F80\n4400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_4524\nENCODING 17700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n47E0\n8200\nF7E0\n9420\nF7E0\n9420\n9420\nF7E0\nENDCHAR\nSTARTCHAR U_4525\nENCODING 17701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n0440\nFFE0\n0440\n7FC0\n5540\n7FC0\nA540\nENDCHAR\nSTARTCHAR U_4526\nENCODING 17702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n2400\nFFE0\n2540\n7540\nAFE0\n2540\n2FE0\n2080\nENDCHAR\nSTARTCHAR U_4527\nENCODING 17703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7C40\n1140\nFF40\n5440\n9480\nFFE0\n2480\nC460\nENDCHAR\nSTARTCHAR U_4528\nENCODING 17704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2480\n4FE0\n7480\n27C0\n4C80\n77C0\n2480\nC7E0\nENDCHAR\nSTARTCHAR U_4529\nENCODING 17705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n2100\nFE00\n23E0\nFE40\nAA40\nF980\n7180\nAA40\n2420\nENDCHAR\nSTARTCHAR U_452A\nENCODING 17706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n5540\n2480\n5740\n2480\nDB60\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_452B\nENCODING 17707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n1500\n57E0\n5D20\n5560\n5380\n5D40\nE920\nENDCHAR\nSTARTCHAR U_452C\nENCODING 17708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2480\n3F80\n2480\n7FC0\n1100\nFFE0\n2080\nENDCHAR\nSTARTCHAR U_452D\nENCODING 17709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\nA4A0\n5160\nBF80\n2480\n3F80\n2480\n5E80\nENDCHAR\nSTARTCHAR U_452E\nENCODING 17710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n4900\nFFE0\n4A00\n7BE0\n4A40\n7A40\n4A40\nFE40\n4840\nENDCHAR\nSTARTCHAR U_452F\nENCODING 17711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFC80\n2880\nFFE0\nAC80\nC5E0\nBD20\n8520\nFDE0\nENDCHAR\nSTARTCHAR U_4530\nENCODING 17712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF1E0\n2480\nFFE0\n8020\n7FC0\n1100\n3F80\n2480\n3F80\n2480\n3F80\nENDCHAR\nSTARTCHAR U_4531\nENCODING 17713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n1080\n27C0\nF440\n2FE0\n3440\nE7C0\n2440\n2FE0\n6040\nENDCHAR\nSTARTCHAR U_4532\nENCODING 17714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7940\n4E80\n3180\nDF60\n1100\n1F00\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_4533\nENCODING 17715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3140\n4920\nAFE0\n5180\n2240\nCC20\n4920\n8920\nENDCHAR\nSTARTCHAR U_4534\nENCODING 17716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nA7C0\nFD40\nA540\nFD40\n0080\nFC80\n5540\n9220\nENDCHAR\nSTARTCHAR U_4535\nENCODING 17717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBE0\nAAA0\nFBE0\n8420\nBFA0\n8E20\nB5A0\n8460\nENDCHAR\nSTARTCHAR U_4536\nENCODING 17718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n27C0\nF440\n27C0\n3440\nEFE0\n2540\n2780\n68E0\nENDCHAR\nSTARTCHAR U_4537\nENCODING 17719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n1100\n7FC0\n1100\nE4E0\n1F00\n0200\n0C00\nENDCHAR\nSTARTCHAR U_4538\nENCODING 17720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0480\nFFE0\n1100\n60C0\n2920\nFFE0\n4A40\n8420\nENDCHAR\nSTARTCHAR U_4539\nENCODING 17721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7240\n57E0\n6120\n56C0\n5180\n76C0\n40A0\n4300\nENDCHAR\nSTARTCHAR U_453A\nENCODING 17722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FE0\n5280\n67E0\n5A40\n53C0\n7240\n43C0\n4240\nENDCHAR\nSTARTCHAR U_453B\nENCODING 17723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n2900\n1100\nFDE0\n4B40\n7D40\n1140\nFC80\n1140\n3620\nENDCHAR\nSTARTCHAR U_453C\nENCODING 17724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBE0\n28A0\n6AA0\n5D60\n9280\n5AE0\n5280\nFFE0\nENDCHAR\nSTARTCHAR U_453D\nENCODING 17725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4FC0\n2940\n8A40\n4FE0\n1920\n2AA0\nCFE0\n4040\nENDCHAR\nSTARTCHAR U_453E\nENCODING 17726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4FC0\nF940\n4A40\n6FE0\nD920\n4AA0\n4FE0\nC040\nENDCHAR\nSTARTCHAR U_453F\nENCODING 17727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n0A00\n3F80\n2A80\n3580\nFFE0\n1100\n0B00\nENDCHAR\nSTARTCHAR U_4540\nENCODING 17728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFE00\n13E0\n7AA0\n0080\nFC80\n5880\n5540\n9220\nENDCHAR\nSTARTCHAR U_4541\nENCODING 17729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF1E0\n1100\n71C0\n1500\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_4542\nENCODING 17730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4440\n2FE0\nF440\n27C0\n2CA0\n2540\n7620\n8FE0\nENDCHAR\nSTARTCHAR U_4543\nENCODING 17731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF380\n9C60\nA7C0\n9500\n9480\nEFE0\n8480\n8FC0\nENDCHAR\nSTARTCHAR U_4544\nENCODING 17732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F00\n0440\nF580\n2480\nC460\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_4545\nENCODING 17733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n42C0\n5540\nF7C0\n5540\n97C0\n6440\n3380\nCC60\nENDCHAR\nSTARTCHAR U_4546\nENCODING 17734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2280\n2440\nFFA0\n2A20\n7EA0\nAAA0\n2EA0\n2A60\nENDCHAR\nSTARTCHAR U_4547\nENCODING 17735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2480\n7FE0\n4800\n5F80\n5280\n5F80\n5280\n5F80\n8940\nB1E0\nENDCHAR\nSTARTCHAR U_4548\nENCODING 17736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\n5540\n5FE0\n7540\n47E0\n7100\n5FE0\n5540\n9920\nENDCHAR\nSTARTCHAR U_4549\nENCODING 17737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2A80\n7FC0\n0400\nFFE0\n1100\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_454A\nENCODING 17738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n2A80\n2A80\n3F80\n1100\n1F00\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_454B\nENCODING 17739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2FE0\n2940\nFFE0\n2940\n2FC0\n3A40\nCA40\n13C0\nENDCHAR\nSTARTCHAR U_454C\nENCODING 17740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7480\n27E0\nFC80\n27C0\n7480\n6FC0\nA480\n27E0\nENDCHAR\nSTARTCHAR U_454D\nENCODING 17741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n3480\nD300\n11C0\n7FC0\n5140\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_454E\nENCODING 17742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0FE0\nF280\n9280\nF7C0\n9540\nF7C0\n9540\n07C0\nENDCHAR\nSTARTCHAR U_454F\nENCODING 17743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3FC0\n0400\n7F80\n1540\nFFE0\n1140\n7980\n2660\nENDCHAR\nSTARTCHAR U_4550\nENCODING 17744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n27E0\nFA40\n2240\n77E0\nAD20\n27E0\n2520\n27E0\nENDCHAR\nSTARTCHAR U_4551\nENCODING 17745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n47E0\n44A0\nA240\n47E0\n9240\nF240\nA980\nA660\nENDCHAR\nSTARTCHAR U_4552\nENCODING 17746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n0400\n3FC0\n1100\nFFE0\n1540\n25C0\n4D40\nENDCHAR\nSTARTCHAR U_4553\nENCODING 17747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n1480\nFFE0\nAAA0\n5100\n2EC0\n4000\n3F80\n1500\n2480\nENDCHAR\nSTARTCHAR U_4554\nENCODING 17748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2EE0\nD100\n2EE0\nC440\n5F40\n5540\n4E40\n5FC0\nENDCHAR\nSTARTCHAR U_4555\nENCODING 17749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n47C0\n2540\n8FE0\n4AA0\n1FE0\nA440\n4380\n4C60\nENDCHAR\nSTARTCHAR U_4556\nENCODING 17750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n9FE0\n4480\n0BC0\nFD20\n4BE0\n4A80\n74A0\n8FE0\nENDCHAR\nSTARTCHAR U_4557\nENCODING 17751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2480\n1F00\n1500\n1500\n3F80\n2480\nFFE0\n1100\n6100\nENDCHAR\nSTARTCHAR U_4558\nENCODING 17752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n37E0\n4900\nB7C0\n0240\n7BC0\n4A40\n33C0\n2420\nENDCHAR\nSTARTCHAR U_4559\nENCODING 17753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2000\nFD40\n2120\nFFE0\n5100\nFCA0\n50C0\n7F20\nENDCHAR\nSTARTCHAR U_455A\nENCODING 17754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n1100\n7FC0\n4200\n5FC0\n5240\n7FE0\n4A80\n4F80\n5040\n7FE0\nENDCHAR\nSTARTCHAR U_455B\nENCODING 17755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2100\nFFE0\n0540\n7540\n0BA0\n7100\n5280\n7C60\nENDCHAR\nSTARTCHAR U_455C\nENCODING 17756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n2540\n14C0\n7FC0\n2080\n5540\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_455D\nENCODING 17757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1040\nFFA0\n2940\nF7C0\n2540\n77C0\nA540\n2FE0\n2440\nENDCHAR\nSTARTCHAR U_455E\nENCODING 17758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n2080\nFBE0\nAAA0\nF5E0\n9F20\n9520\n9FA0\n9520\n9BA0\nENDCHAR\nSTARTCHAR U_455F\nENCODING 17759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2100\n5FC0\n5140\n7FC0\n5540\n7DC0\n5140\nFFE0\n2080\nC060\nENDCHAR\nSTARTCHAR U_4560\nENCODING 17760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2480\n7FE0\n6940\n5DC0\n6560\n5E00\n51C0\n5D40\n8480\n9B60\nENDCHAR\nSTARTCHAR U_4561\nENCODING 17761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFBE0\nAAA0\nFBE0\n9F20\n9120\nBFA0\nA0A0\nBFA0\nENDCHAR\nSTARTCHAR U_4562\nENCODING 17762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0240\nFFE0\n2100\n23C0\n7900\nCBE0\n7C80\n4BE0\nENDCHAR\nSTARTCHAR U_4563\nENCODING 17763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n27C0\nF540\n2540\n77E0\nA920\n3AA0\n2FE0\n2040\nENDCHAR\nSTARTCHAR U_4564\nENCODING 17764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nEEE0\nAAA0\nFEC0\n54A0\n7CA0\n54A0\nFEC0\n1080\nENDCHAR\nSTARTCHAR U_4565\nENCODING 17765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5140\n9520\n2480\nFFE0\n6EC0\n5540\n6EC0\n5540\n6EC0\nENDCHAR\nSTARTCHAR U_4566\nENCODING 17766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2480\nFFE0\n4000\n7FE0\n4040\n3F80\nEAE0\nBFA0\nEAE0\nBD20\nENDCHAR\nSTARTCHAR U_4567\nENCODING 17767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7C80\n57E0\nFD40\n8220\n7D40\n4480\n7D40\n4620\nENDCHAR\nSTARTCHAR U_4568\nENCODING 17768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7540\n57C0\n5100\n7FE0\n5540\n7AA0\n57C0\n9920\nENDCHAR\nSTARTCHAR U_4569\nENCODING 17769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2FE0\nFAA0\n2C60\n67C0\n7540\nAFC0\n2540\n2920\nENDCHAR\nSTARTCHAR U_456A\nENCODING 17770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4FE0\n2AA0\n8FE0\n4440\n0FE0\n2100\nCFE0\n4100\nENDCHAR\nSTARTCHAR U_456B\nENCODING 17771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n24E0\nBFA0\nAAE0\nFF80\n28E0\nD900\n0600\n79E0\nENDCHAR\nSTARTCHAR U_456C\nENCODING 17772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n1540\n7540\n4FE0\n7540\n17C0\n1540\n6FE0\nENDCHAR\nSTARTCHAR U_456D\nENCODING 17773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n2080\n72A0\n21C0\nF940\n5220\nAAA0\nF9C0\n2140\nF620\nENDCHAR\nSTARTCHAR U_456E\nENCODING 17774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\n7400\n27E0\nFD20\n57E0\nFBA0\n2560\nF920\n20C0\nENDCHAR\nSTARTCHAR U_456F\nENCODING 17775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFCE0\n5380\nFAC0\nAAC0\nFAA0\n02A0\nFD20\nABE0\nENDCHAR\nSTARTCHAR U_4570\nENCODING 17776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n27C0\nAD40\n77E0\n2380\n2D60\n57C0\n4D40\n87C0\nENDCHAR\nSTARTCHAR U_4571\nENCODING 17777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n0100\nFBC0\n8A40\nFBC0\n8A40\n53C0\nFC20\nENDCHAR\nSTARTCHAR U_4572\nENCODING 17778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n5540\n5540\n5FC0\n4000\n7FE0\n8A80\nB240\nENDCHAR\nSTARTCHAR U_4573\nENCODING 17779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nEFE0\n2540\nEFE0\n8D60\nEBA0\n2D60\n2BA0\nC960\nENDCHAR\nSTARTCHAR U_4574\nENCODING 17780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7A80\n27E0\nFC80\n27E0\n7480\nA7E0\n2540\n2AA0\nENDCHAR\nSTARTCHAR U_4575\nENCODING 17781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4200\nF7C0\n4540\nF7E0\n0400\nF7E0\n9520\nF540\nENDCHAR\nSTARTCHAR U_4576\nENCODING 17782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n4280\nF7E0\n0A80\nF3E0\n0280\nF7E0\n9240\nF180\n9E60\nENDCHAR\nSTARTCHAR U_4577\nENCODING 17783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2480\n7FE0\n4880\n7FE0\n5AC0\n6FA0\n4480\n5FC0\n9280\nA640\nENDCHAR\nSTARTCHAR U_4578\nENCODING 17784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF880\nABE0\nF880\n23E0\nF800\n23E0\nFA20\nABE0\nENDCHAR\nSTARTCHAR U_4579\nENCODING 17785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2280\nFBE0\n5640\nABE0\n2240\nFBE0\n7240\nABE0\nENDCHAR\nSTARTCHAR U_457A\nENCODING 17786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5140\nFFE0\n0400\n7F80\n0400\nFFE0\n4940\nF880\n0B60\nENDCHAR\nSTARTCHAR U_457B\nENCODING 17787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n6B40\n5AC0\n7FE0\n4A40\n7FC0\n5520\n9CE0\nENDCHAR\nSTARTCHAR U_457C\nENCODING 17788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFA80\n57E0\nFA40\nABE0\nFA40\n23E0\nFA40\n53E0\nENDCHAR\nSTARTCHAR U_457D\nENCODING 17789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF7C0\n9540\nF7E0\n2AA0\nBFA0\nA220\nFFE0\n8040\nENDCHAR\nSTARTCHAR U_457E\nENCODING 17790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3B80\n2A80\n7FE0\n4900\n7DE0\n5740\nBC80\n8760\nENDCHAR\nSTARTCHAR U_457F\nENCODING 17791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBC0\n52C0\nFB40\nABE0\nFA00\n23E0\nF520\n5560\nENDCHAR\nSTARTCHAR U_4580\nENCODING 17792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n1080\n7BC0\n4A40\nFFE0\n2480\n2880\n7FC0\nAAA0\n3B80\nENDCHAR\nSTARTCHAR U_4581\nENCODING 17793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\nFFE0\n4940\n7FE0\n5540\n7DC0\n5540\nFDC0\n9520\nFEA0\n85C0\nENDCHAR\nSTARTCHAR U_4582\nENCODING 17794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5540\nFFE0\n4A40\nEEE0\nA4A0\n3F80\n0400\n7FC0\n0C00\nENDCHAR\nSTARTCHAR U_4583\nENCODING 17795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n1500\nFFE0\n1480\n6780\n5140\nFBE0\n2080\nFBE0\n69A0\nBAE0\nENDCHAR\nSTARTCHAR U_4584\nENCODING 17796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5100\nFA80\n57E0\nFA80\nABE0\nFA80\n4BE0\n9240\n8920\nENDCHAR\nSTARTCHAR U_4585\nENCODING 17797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n1080\n7FC0\n0400\nFFE0\nAAA0\n7FC0\n2480\n5540\nFFE0\nENDCHAR\nSTARTCHAR U_4586\nENCODING 17798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n1080\nFFE0\n52A0\nFBE0\nA940\nDFE0\n89A0\nAB40\nF9A0\nENDCHAR\nSTARTCHAR U_4587\nENCODING 17799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n2480\nFFE0\n75C0\nAEA0\nFFE0\nA8A0\n7B00\n48C0\n7300\nENDCHAR\nSTARTCHAR U_4588\nENCODING 17800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\n0400\n7FE0\n44A0\n4500\n5FC0\n4000\n4980\n4E00\n8840\n87C0\nENDCHAR\nSTARTCHAR U_4589\nENCODING 17801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0700\n0400\n7FE0\n44A0\n5FC0\n4000\n4FC0\n4100\n5FE0\n4100\n8300\nENDCHAR\nSTARTCHAR U_458A\nENCODING 17802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n1100\n97E0\n5540\n5580\n26E0\n2400\n55C0\n9540\n1940\n0A60\nENDCHAR\nSTARTCHAR U_458B\nENCODING 17803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C80\n1080\n7C80\n5480\n7C80\n4080\n5C80\n5540\n5540\nA620\nA420\nENDCHAR\nSTARTCHAR U_458C\nENCODING 17804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C20\n1020\n7E20\n52A0\n7CA0\n50A0\n5CA0\n54A0\n5420\nA620\nA460\nENDCHAR\nSTARTCHAR U_458D\nENCODING 17805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0F80\n0800\n7FE0\n4920\n7FC0\n4800\n4F80\n5880\n8700\nB8E0\nENDCHAR\nSTARTCHAR U_458E\nENCODING 17806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\nE100\nAFE0\nAA20\nCFC0\nAA00\nABC0\nAA80\nEA80\n92A0\n94E0\nENDCHAR\nSTARTCHAR U_458F\nENCODING 17807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\n0400\n7FE0\n4920\n7FC0\n5000\n5FC0\n6A40\n5F40\n8AE0\n9480\nENDCHAR\nSTARTCHAR U_4590\nENCODING 17808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\n61C0\n4100\n47E0\n7D40\n57E0\n5400\n5540\n5540\n9540\n9A60\nENDCHAR\nSTARTCHAR U_4591\nENCODING 17809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1DE0\n1120\n7F20\n51E0\n7D20\n5120\n5DE0\n5400\n5420\nA7E0\nENDCHAR\nSTARTCHAR U_4592\nENCODING 17810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F00\n0800\n7FE0\n4920\n7F80\n4000\n7FC0\n5080\n5F80\n8900\nBFE0\nENDCHAR\nSTARTCHAR U_4593\nENCODING 17811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2080\nABE0\nAAA0\nFBE0\n2280\nAAE0\nAA00\nAAA0\nFAA0\n8D20\nENDCHAR\nSTARTCHAR U_4594\nENCODING 17812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2100\n27E0\nF520\n27E0\nF500\n24E0\n5540\n8D40\nF540\n0A60\nENDCHAR\nSTARTCHAR U_4595\nENCODING 17813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C00\n11C0\n7D40\n55C0\n7D40\n5140\n5DC0\n4540\n57E0\n9420\nA3E0\nENDCHAR\nSTARTCHAR U_4596\nENCODING 17814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C00\n13E0\n7EA0\n53E0\n7EA0\n53E0\n5C80\n4080\n54A0\n9420\nA7E0\nENDCHAR\nSTARTCHAR U_4597\nENCODING 17815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0700\n0400\n7FE0\n4920\n7F80\n40A0\n5FE0\n5080\n5FA0\n5540\nA7A0\nENDCHAR\nSTARTCHAR U_4598\nENCODING 17816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1D00\n11C0\n7E40\n5480\n7FE0\n52A0\n5BE0\n4140\n5560\n9540\nA660\nENDCHAR\nSTARTCHAR U_4599\nENCODING 17817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n9080\nED40\n9220\nFF80\n4400\n5FC0\n5540\n5F80\n5540\nA9C0\nENDCHAR\nSTARTCHAR U_459A\nENCODING 17818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1D00\n13C0\n7E40\n53C0\n7E00\n53C0\n4E00\n5BE0\n54A0\n56A0\nA460\nENDCHAR\nSTARTCHAR U_459B\nENCODING 17819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3900\n27E0\nF900\nA7E0\nFD20\nA3C0\n9940\nABC0\nAAA0\nACA0\n47E0\nENDCHAR\nSTARTCHAR U_459C\nENCODING 17820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n39C0\n2100\n7FE0\n52A0\n7FE0\nAA80\n5FE0\n1080\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_459D\nENCODING 17821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n7C00\n0400\n7FC0\n4440\n4440\n7FC0\n4400\n0440\n07E0\nFC20\nENDCHAR\nSTARTCHAR U_459E\nENCODING 17822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2040\nF840\nAFE0\nA840\nFA40\n2140\n2940\n3840\nE840\n01C0\nENDCHAR\nSTARTCHAR U_459F\nENCODING 17823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2000\n2000\n1FC0\n0400\n3F80\n2480\n3F80\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_45A0\nENCODING 17824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n2240\nFA40\nAB40\nAAC0\nFA40\n2240\n2A40\n3A40\nCC60\nENDCHAR\nSTARTCHAR U_45A1\nENCODING 17825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2140\n2140\nF940\nA940\nAFC0\nFA40\n2240\n2240\n3A40\nCFE0\nENDCHAR\nSTARTCHAR U_45A2\nENCODING 17826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n2080\nFAC0\nAAA0\nAC80\nF8A0\n2040\n2080\n3900\nCE00\nENDCHAR\nSTARTCHAR U_45A3\nENCODING 17827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2740\nFD40\nAD40\nAD40\nFD40\n2540\n2540\n3D40\nE920\n0820\nENDCHAR\nSTARTCHAR U_45A4\nENCODING 17828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\nB2C0\n2220\nC1E0\n0400\n3F80\n2480\n3F80\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_45A5\nENCODING 17829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F00\n0900\n0600\nFFE0\n1440\n6400\n3F80\n2480\n3F80\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_45A6\nENCODING 17830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n22A0\n22A0\nFAA0\nABE0\nA880\nFAA0\n22A0\n3AA0\nEBE0\n0220\nENDCHAR\nSTARTCHAR U_45A7\nENCODING 17831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n2240\nFBC0\nAA40\nAA40\nFBC0\n2000\n3800\nC800\n07E0\nENDCHAR\nSTARTCHAR U_45A8\nENCODING 17832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF900\nA900\nA900\nFA00\n27E0\n2A20\n3A20\nEBE0\n0220\nENDCHAR\nSTARTCHAR U_45A9\nENCODING 17833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2140\n20C0\nFA40\nAE40\nAAA0\nFAA0\n22A0\n2B00\nFA40\n0DC0\nENDCHAR\nSTARTCHAR U_45AA\nENCODING 17834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n5E60\n5380\n5E20\nE1E0\n0400\n7FC0\n4440\n7FC0\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_45AB\nENCODING 17835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFC40\nA820\nABC0\nF900\n2100\n2FE0\n3900\nE900\n0100\nENDCHAR\nSTARTCHAR U_45AC\nENCODING 17836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\nFAA0\nABE0\nAAA0\nFAA0\n23E0\n2880\n3880\nC880\n0080\nENDCHAR\nSTARTCHAR U_45AD\nENCODING 17837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\n7F80\n0800\nFFE0\n2480\nFFE0\n2480\n3F80\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_45AE\nENCODING 17838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2100\nFBE0\nAA20\nAA20\nFBA0\n22A0\n22A0\n3BA0\nCA20\n0260\nENDCHAR\nSTARTCHAR U_45AF\nENCODING 17839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\nFFE0\n0400\n7FC0\n2480\n2480\n3F80\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_45B0\nENCODING 17840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2F00\n2860\nFB80\nAA80\nAAA0\nFAC0\n2A80\n3A80\nCA40\n1320\nENDCHAR\nSTARTCHAR U_45B1\nENCODING 17841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\n2200\nFBE0\nAA80\nABE0\nFA80\n2280\n3BE0\nCA00\n03E0\nENDCHAR\nSTARTCHAR U_45B2\nENCODING 17842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n23E0\nFC20\nABA0\nAAA0\nFBA0\n22A0\n3BA0\nC820\n00C0\nENDCHAR\nSTARTCHAR U_45B3\nENCODING 17843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\nAC20\nA8C0\nFB00\n2100\n2FE0\n3900\nC920\n00E0\nENDCHAR\nSTARTCHAR U_45B4\nENCODING 17844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFAA0\nAEC0\nAA80\nFAC0\n26A0\n2A80\n3AA0\nECA0\n0460\nENDCHAR\nSTARTCHAR U_45B5\nENCODING 17845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n2080\nFBE0\nAAA0\nAAA0\nFBE0\n2080\n28A0\n38E0\nCB20\nENDCHAR\nSTARTCHAR U_45B6\nENCODING 17846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF900\nAB00\nACA0\nF9C0\n2680\n29C0\n3EA0\nE880\n0300\nENDCHAR\nSTARTCHAR U_45B7\nENCODING 17847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2180\nF980\nAE60\nA900\nFFE0\n2280\n2FE0\n3AA0\nCAE0\n0080\nENDCHAR\nSTARTCHAR U_45B8\nENCODING 17848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A80\n1240\nFFE0\n1540\nF980\n2660\n7F80\n4480\n7F80\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_45B9\nENCODING 17849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n26E0\nFA80\nA800\nAFC0\nF900\n2100\n2FE0\n3900\nC900\n0100\nENDCHAR\nSTARTCHAR U_45BA\nENCODING 17850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27C0\n4440\nD380\n5C60\n5100\n57C0\n5540\n57C0\n4140\n4FE0\nENDCHAR\nSTARTCHAR U_45BB\nENCODING 17851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\nAA00\nAC40\nFFE0\n2540\n2D40\n3D40\nC540\n0960\nENDCHAR\nSTARTCHAR U_45BC\nENCODING 17852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n22E0\nFAA0\nAFA0\nAAA0\nFFA0\n22A0\n2CA0\n3DE0\nC780\n0080\nENDCHAR\nSTARTCHAR U_45BD\nENCODING 17853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n1120\nFD20\n3920\nD520\n0C60\n3F80\n2480\n3F80\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_45BE\nENCODING 17854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n27E0\nFC20\nABC0\nA800\nFFE0\n2280\n3A80\nCAA0\n0460\nENDCHAR\nSTARTCHAR U_45BF\nENCODING 17855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n23E0\nFCA0\n70A0\nAB20\n2440\n3F80\n2480\n3F80\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_45C0\nENCODING 17856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2100\nFFE0\nAA40\nAE20\nFBC0\n2640\n3980\nC980\n0660\nENDCHAR\nSTARTCHAR U_45C1\nENCODING 17857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2280\nFC40\nAFE0\nA840\nFF40\n2540\n3F40\nC840\n00C0\nENDCHAR\nSTARTCHAR U_45C2\nENCODING 17858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2080\nFBE0\nAAA0\nAAC0\nFB60\n2200\n2AC0\n3B40\nCD40\n0660\nENDCHAR\nSTARTCHAR U_45C3\nENCODING 17859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\n27E0\nF940\nA880\nAF60\nF940\n27E0\n3940\nC8A0\n0760\nENDCHAR\nSTARTCHAR U_45C4\nENCODING 17860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2C60\n2280\nFB80\nAC60\nABC0\nFC00\n27E0\n3C80\nC480\n0880\nENDCHAR\nSTARTCHAR U_45C5\nENCODING 17861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2200\nFBC0\nAA00\nABC0\nFA00\n27E0\n2AA0\n3AC0\nCA40\n0320\nENDCHAR\nSTARTCHAR U_45C6\nENCODING 17862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n27E0\nFC20\nABC0\nAA40\nFBC0\n2200\n3BE0\nCA20\n03E0\nENDCHAR\nSTARTCHAR U_45C7\nENCODING 17863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\nAD60\nABA0\nFFE0\n2120\n2BA0\n3D60\nC920\n00C0\nENDCHAR\nSTARTCHAR U_45C8\nENCODING 17864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n27E0\nFA00\nA9C0\nAA40\nFBC0\n2240\n3BC0\nEA40\n03C0\nENDCHAR\nSTARTCHAR U_45C9\nENCODING 17865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFBC0\nAA40\nABC0\nF800\n27E0\n2C20\n3FE0\nC420\n07E0\nENDCHAR\nSTARTCHAR U_45CA\nENCODING 17866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n22A0\nFAC0\nA880\nA940\nFE20\n2080\n2AA0\n3AC0\nE940\n0620\nENDCHAR\nSTARTCHAR U_45CB\nENCODING 17867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nFA40\nABC0\nAA40\nFBC0\n2080\n2FE0\n39C0\nCEA0\n0080\nENDCHAR\nSTARTCHAR U_45CC\nENCODING 17868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFBC0\nAA40\nABC0\nFA80\n27E0\n2880\n3BC0\nC880\n07E0\nENDCHAR\nSTARTCHAR U_45CD\nENCODING 17869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n1200\nFFE0\n1480\n6F00\n14C0\n7F80\n2480\n3F80\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_45CE\nENCODING 17870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2280\nFFE0\nAAA0\nAFE0\nF900\n27C0\n3900\nC900\n0FE0\nENDCHAR\nSTARTCHAR U_45CF\nENCODING 17871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFD20\nAD40\nAB80\nFA40\n2420\n2BC0\n3A40\nE980\n0660\nENDCHAR\nSTARTCHAR U_45D0\nENCODING 17872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFC80\n43E0\n7AA0\n89E0\n0400\n3F80\n2480\n3F80\n0480\n7FC0\nENDCHAR\nSTARTCHAR U_45D1\nENCODING 17873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFBC0\nAA40\nABC0\nF900\nA080\n27E0\n3A40\nE940\n07E0\nENDCHAR\nSTARTCHAR U_45D2\nENCODING 17874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n27E0\nFA80\nAA80\nAAA0\nFEC0\n2280\n3A80\nEA80\n07E0\nENDCHAR\nSTARTCHAR U_45D3\nENCODING 17875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nFAA0\nAAA0\nAD20\nFAC0\n2100\n28A0\n3AA0\nEA40\n01C0\nENDCHAR\nSTARTCHAR U_45D4\nENCODING 17876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22C0\n2240\nFFE0\nAA80\nAAE0\nFB40\n2240\n2BE0\n3A40\nEAC0\n0320\nENDCHAR\nSTARTCHAR U_45D5\nENCODING 17877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA020\n7BC0\nCA40\n35E0\nFF80\n2480\n3F80\n0480\n7FC0\nENDCHAR\nSTARTCHAR U_45D6\nENCODING 17878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\n2540\nF940\nAFE0\nA920\nFFC0\n2540\n3D40\nE5C0\n0100\nENDCHAR\nSTARTCHAR U_45D7\nENCODING 17879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n23E0\n2540\nF800\nAFE0\nA940\nF940\n2FE0\n3940\nEA40\n0240\nENDCHAR\nSTARTCHAR U_45D8\nENCODING 17880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2100\nFFE0\nA900\nAA40\nFBC0\n2000\n3FC0\nE540\n0FE0\nENDCHAR\nSTARTCHAR U_45D9\nENCODING 17881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n9120\n7FC0\n1100\nF5E0\n3F80\n64C0\nBFA0\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_45DA\nENCODING 17882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20A0\n27E0\nFAA0\nABE0\nAAA0\nFBE0\n22A0\n27E0\n3940\nC840\n00C0\nENDCHAR\nSTARTCHAR U_45DB\nENCODING 17883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n25E0\n28A0\nFA40\nABA0\nAAE0\nFAA0\n2AE0\n3AA0\nE8E0\n08A0\nENDCHAR\nSTARTCHAR U_45DC\nENCODING 17884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2260\n2360\nFAA0\nAB60\nA800\nFBE0\n2AA0\n3BE0\nEAA0\n03E0\nENDCHAR\nSTARTCHAR U_45DD\nENCODING 17885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n03E0\nFEA0\n33E0\n5AA0\n95E0\n3F80\n2480\n3F80\n0480\n7FC0\nENDCHAR\nSTARTCHAR U_45DE\nENCODING 17886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n1100\nE0E0\n2080\nFBE0\nAAA0\nFBE0\n28A0\nFBE0\nENDCHAR\nSTARTCHAR U_45DF\nENCODING 17887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA240\nFDE0\n9240\nFD80\nA660\nFF80\n2480\n3F80\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_45E0\nENCODING 17888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFBE0\n44A0\n7AC0\n4B80\n94E0\n3F80\n2480\n3F80\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_45E1\nENCODING 17889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\n22C0\nFA80\nAFE0\nAA00\nFBE0\n2200\n2BE0\nFAA0\n0860\nENDCHAR\nSTARTCHAR U_45E2\nENCODING 17890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2140\n25E0\nFA40\nAFE0\nAA00\nFAE0\n22A0\n3AE0\nEF00\n00E0\nENDCHAR\nSTARTCHAR U_45E3\nENCODING 17891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n1900\n1F00\n2080\nFBE0\nAAA0\nFBE0\n28A0\nFBE0\nENDCHAR\nSTARTCHAR U_45E4\nENCODING 17892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2940\nFFE0\nA940\nAFC0\nF940\n2FC0\n2D40\nF7C0\n1540\nENDCHAR\nSTARTCHAR U_45E5\nENCODING 17893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n3940\n2540\nFAA0\nA880\nAA80\nFAE0\n2A80\n3A80\nEB80\n0C60\nENDCHAR\nSTARTCHAR U_45E6\nENCODING 17894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n24A0\nFA40\nA8A0\nAFE0\nFA40\n22E0\n2A40\n3AE0\nEE40\n01E0\nENDCHAR\nSTARTCHAR U_45E7\nENCODING 17895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n23E0\n2280\nFBE0\nAAA0\nABE0\nFAA0\n23E0\n3AA0\nEDC0\n06A0\nENDCHAR\nSTARTCHAR U_45E8\nENCODING 17896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21C0\nFA40\nAFE0\nAAA0\nFBE0\n22A0\n2BE0\n3800\nEAA0\n02A0\nENDCHAR\nSTARTCHAR U_45E9\nENCODING 17897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\n2FE0\nFA80\nAB80\nAAA0\nFFA0\n2AC0\n3F40\nCAA0\n1320\nENDCHAR\nSTARTCHAR U_45EA\nENCODING 17898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4880\n7FE0\n4880\n4F80\n5540\nAAA0\n3F80\n24C0\n7FE0\nENDCHAR\nSTARTCHAR U_45EB\nENCODING 17899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nFA80\nAA80\nAFE0\nFA80\n2BC0\n3EA0\nEA80\n1280\nENDCHAR\nSTARTCHAR U_45EC\nENCODING 17900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFA80\n2D60\n3100\nCFE0\n0400\n3F80\n2480\n3F80\n0440\n7FE0\nENDCHAR\nSTARTCHAR U_45ED\nENCODING 17901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EA0\n2AC0\n24A0\nFC40\nABA0\nA800\nFFC0\n2440\n2FC0\nFA80\n0FE0\nENDCHAR\nSTARTCHAR U_45EE\nENCODING 17902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nFBA0\nAD40\nABA0\nFD40\n23A0\n3900\nEA80\n0C60\nENDCHAR\nSTARTCHAR U_45EF\nENCODING 17903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2140\n25E0\nFB40\nA9E0\nAF40\nF5E0\n2540\n3DE0\nE600\n09E0\nENDCHAR\nSTARTCHAR U_45F0\nENCODING 17904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n22A0\n27E0\nFAA0\nABE0\nAA20\nFBE0\n2220\n2BE0\n3D40\nCA20\nENDCHAR\nSTARTCHAR U_45F1\nENCODING 17905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n2280\nFFE0\nA900\nABC0\nF900\n27E0\n2280\n3440\nC820\nENDCHAR\nSTARTCHAR U_45F2\nENCODING 17906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2380\n27E0\nFB80\nAD40\nAAE0\nFD40\n2740\n29E0\n3A40\nCC40\nENDCHAR\nSTARTCHAR U_45F3\nENCODING 17907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2520\nFFE0\nA900\nAFE0\nFD20\n27E0\n2940\n3E60\nCBC0\nENDCHAR\nSTARTCHAR U_45F4\nENCODING 17908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\n2940\nFFE0\nAA80\nABE0\nFC80\n2280\n2BE0\n3A00\nCDE0\nENDCHAR\nSTARTCHAR U_45F5\nENCODING 17909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\n23E0\nFAA0\nABE0\nAAA0\nFFE0\n22A0\n2BE0\n3AA0\nCFE0\nENDCHAR\nSTARTCHAR U_45F6\nENCODING 17910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n2440\nFBC0\nAA40\nABE0\nFAA0\n2560\n2A20\n3BA0\nC840\nENDCHAR\nSTARTCHAR U_45F7\nENCODING 17911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\n2140\nFFE0\nAA20\nABE0\nFA20\n23E0\n2CA0\n3A40\nCBC0\nENDCHAR\nSTARTCHAR U_45F8\nENCODING 17912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n57E0\nF480\n2760\n7FC0\nA440\n3FC0\n0440\n7FA0\nENDCHAR\nSTARTCHAR U_45F9\nENCODING 17913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n27E0\nFA40\nAD80\nAEE0\nFA40\n26E0\n2920\n3A40\nCBC0\nENDCHAR\nSTARTCHAR U_45FA\nENCODING 17914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n71E0\n1700\n61C0\n1500\n67E0\n5080\nFFE0\nAAA0\nFBE0\n2480\nFFE0\nENDCHAR\nSTARTCHAR U_45FB\nENCODING 17915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\n2940\nFEE0\nAAA0\nAEA0\nFAA0\n2EA0\n28E0\n3E80\nCA80\nENDCHAR\nSTARTCHAR U_45FC\nENCODING 17916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2F00\n2100\nFFE0\nAD60\nABA0\nFFE0\n2100\n2FE0\n3540\nCAA0\nENDCHAR\nSTARTCHAR U_45FD\nENCODING 17917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n5480\nEFE0\n5480\nEFE0\n2480\n7FE0\n2440\n3FC0\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_45FE\nENCODING 17918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\n27E0\nFA40\nACA0\nAA40\nFCA0\n26E0\n2800\n3D40\nCAA0\nENDCHAR\nSTARTCHAR U_45FF\nENCODING 17919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2520\nFA40\nABC0\nA800\nFBE0\n22A0\n2FE0\n3880\nCB80\nENDCHAR\nSTARTCHAR U_4600\nENCODING 17920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F00\n2100\n3F80\n2080\n3F80\n2900\n7FE0\n4920\n7FE0\nC920\nENDCHAR\nSTARTCHAR U_4601\nENCODING 17921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D40\n1120\nFFE0\n2920\n7F40\nC920\n7FC0\n4840\n7FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_4602\nENCODING 17922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27C0\n22A0\nFFE0\nAA80\nAFA0\nFAA0\n2740\n2A40\n3AA0\nCF20\nENDCHAR\nSTARTCHAR U_4603\nENCODING 17923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\n2D60\nFBA0\nAFE0\nA900\nFFE0\n2540\n2FE0\n3100\nCFE0\nENDCHAR\nSTARTCHAR U_4604\nENCODING 17924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n3F80\n0500\nFFE0\n1900\n2900\nFFE0\n54A0\n7FE0\n14A0\nFBC0\nENDCHAR\nSTARTCHAR U_4605\nENCODING 17925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22C0\n4B00\nFBE0\n4A40\n7B80\n4A20\n7BE0\n5540\n7BC0\n1520\nFBC0\nENDCHAR\nSTARTCHAR U_4606\nENCODING 17926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2920\nFFC0\nA900\nAFC0\nF900\n27C0\n2940\n3520\nD7A0\nENDCHAR\nSTARTCHAR U_4607\nENCODING 17927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\nFFE0\n1500\n3580\nFBE0\nAAA0\nFBE0\n24C0\nFBA0\nENDCHAR\nSTARTCHAR U_4608\nENCODING 17928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2A80\n2FC0\nFAE0\nAFA0\nAAA0\nFFA0\n2AA0\n2BA0\n38A0\nD160\nENDCHAR\nSTARTCHAR U_4609\nENCODING 17929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n1100\n7F80\n9560\n7FC0\n5540\n7FC0\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_460A\nENCODING 17930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\n2AA0\nFFE0\nAD40\nFFE0\n2680\n2DA0\n34A0\nC8C0\n1320\nENDCHAR\nSTARTCHAR U_460B\nENCODING 17931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2580\n2AA0\n2FE0\nFA80\nAF80\nAAA0\nFFA0\n2240\n3F40\n32C0\nCF20\nENDCHAR\nSTARTCHAR U_460C\nENCODING 17932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9100\nBFC0\n9100\nBFC0\nA880\nFFE0\nAAA0\nFBE0\n2480\nFBA0\nENDCHAR\nSTARTCHAR U_460D\nENCODING 17933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n2080\n3F80\n2480\nFFE0\n9120\n7FC0\n5540\n7FC0\nD560\nENDCHAR\nSTARTCHAR U_460E\nENCODING 17934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2BA0\n2D40\nFAA0\nAFC0\nA840\nFFC0\n2400\n2FE0\n3820\nC8E0\nENDCHAR\nSTARTCHAR U_460F\nENCODING 17935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\n20A0\nFEA0\nAAC0\nAAA0\nAAA0\nAAA0\nAFC0\nF080\n0080\n0080\nENDCHAR\nSTARTCHAR U_4610\nENCODING 17936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n2140\n4140\nFD40\nAD40\nD760\nA540\nFF40\n0140\n0240\n04C0\nENDCHAR\nSTARTCHAR U_4611\nENCODING 17937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n2080\n2380\n4080\nFCA0\nAFC0\nD5C0\nA6A0\nFCA0\n0080\n0180\nENDCHAR\nSTARTCHAR U_4612\nENCODING 17938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2140\n4220\nFFE0\nAD40\nD620\nA5C0\nFF40\n0080\n0140\n0620\nENDCHAR\nSTARTCHAR U_4613\nENCODING 17939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n21C0\n4240\nFC80\nAB60\nAA20\nAB60\nBE20\nC220\n03E0\n0220\nENDCHAR\nSTARTCHAR U_4614\nENCODING 17940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n23E0\n4220\nFDC0\nAF40\nD480\nAF60\nF1C0\n0140\n0140\n01C0\nENDCHAR\nSTARTCHAR U_4615\nENCODING 17941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n44E0\n9E00\n2000\n5DE0\nD440\n5440\n5540\n5640\n6440\n40C0\nENDCHAR\nSTARTCHAR U_4616\nENCODING 17942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3000\n5EE0\n9400\n24E0\n5F40\nC440\n5540\n5540\n5F40\n4140\n40C0\nENDCHAR\nSTARTCHAR U_4617\nENCODING 17943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n55E0\n9F00\n2000\n5FE0\nCA40\n5E40\n4A40\n5F40\n5540\n64C0\nENDCHAR\nSTARTCHAR U_4618\nENCODING 17944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n5EE0\nA400\n5E00\nC5E0\n5E40\n4A40\n5E40\n4A40\n5F40\n65C0\nENDCHAR\nSTARTCHAR U_4619\nENCODING 17945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n5EE0\n8A00\n7FE0\n5240\nDE40\n4440\n7F40\n4440\n5F40\n55C0\nENDCHAR\nSTARTCHAR U_461A\nENCODING 17946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1440\n3280\nD180\n1860\n0400\nFFE0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_461B\nENCODING 17947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2780\nF480\n1480\n2C80\n7480\nAC80\n2480\n2480\n24A0\n2860\nENDCHAR\nSTARTCHAR U_461C\nENCODING 17948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2080\nF7E0\n14A0\n2CA0\n74A0\nACA0\n24E0\n24A0\n2080\n2080\nENDCHAR\nSTARTCHAR U_461D\nENCODING 17949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2140\nF120\n17E0\n2900\n7100\nA900\n2080\n20A0\n2060\n2020\nENDCHAR\nSTARTCHAR U_461E\nENCODING 17950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2040\nF240\n1240\n2A40\n73E0\nA820\n2020\n2FA0\n2020\n20C0\nENDCHAR\nSTARTCHAR U_461F\nENCODING 17951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\nF140\n1140\n2FC0\n7500\nAFE0\n2120\n2120\n21C0\n2100\nENDCHAR\nSTARTCHAR U_4620\nENCODING 17952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2400\nFFE0\n1400\n2540\n6D40\nB540\n2C80\n2480\n2940\n3220\nENDCHAR\nSTARTCHAR U_4621\nENCODING 17953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\nFBC0\n8200\n9A20\n69E0\n0400\nFFE0\n1440\n3280\nD100\n18E0\nENDCHAR\nSTARTCHAR U_4622\nENCODING 17954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2080\nF7E0\n1420\n2800\n77E0\nA880\n2080\n2080\n2080\n2380\nENDCHAR\nSTARTCHAR U_4623\nENCODING 17955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2280\nF280\n1280\n2BE0\n7280\nAA80\n2A80\n2A80\n2BA0\n2C60\nENDCHAR\nSTARTCHAR U_4624\nENCODING 17956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n2120\nF7E0\n1100\n2B80\n7380\nAD40\n2540\n2920\n2100\n2100\nENDCHAR\nSTARTCHAR U_4625\nENCODING 17957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n22A0\nF3E0\n12A0\n2AA0\n73E0\nA880\n2080\n2080\n2080\n2080\nENDCHAR\nSTARTCHAR U_4626\nENCODING 17958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27E0\nF420\n17E0\n2C00\n7500\nADE0\n2500\n2500\n2520\n28E0\nENDCHAR\nSTARTCHAR U_4627\nENCODING 17959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF100\n27C0\n3540\n6540\nBFE0\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4628\nENCODING 17960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2080\nF7E0\n1240\n2420\n7240\nA240\n3180\n2180\n2240\n2C20\nENDCHAR\nSTARTCHAR U_4629\nENCODING 17961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2400\nF7E0\n1820\n27A0\n74A0\nA7A0\n34A0\n27A0\n2020\n20C0\nENDCHAR\nSTARTCHAR U_462A\nENCODING 17962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\nFFE0\n1200\n2440\n77C0\nA280\n3280\n2280\n24A0\n2460\nENDCHAR\nSTARTCHAR U_462B\nENCODING 17963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\nFDE0\n4920\n49E0\n3120\n4800\nFFE0\n1240\nE180\n2880\n3060\nENDCHAR\nSTARTCHAR U_462C\nENCODING 17964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n20A0\nF080\n1FE0\n2480\n7FA0\nA4A0\n34C0\n28A0\n2160\n2620\nENDCHAR\nSTARTCHAR U_462D\nENCODING 17965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27E0\nF100\n1240\n27E0\n7080\nA080\n33E0\n2080\n2080\n27E0\nENDCHAR\nSTARTCHAR U_462E\nENCODING 17966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n2480\n2480\n5540\nFFE0\n2480\n2300\n2900\n30E0\nENDCHAR\nSTARTCHAR U_462F\nENCODING 17967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n22A0\nF1C0\n13E0\n2A20\n73E0\nAA20\n23E0\n2220\n2220\n2260\nENDCHAR\nSTARTCHAR U_4630\nENCODING 17968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8060\n41C0\nFC40\n4440\n6960\nC940\n6540\n4540\n55E0\n4800\n57E0\nENDCHAR\nSTARTCHAR U_4631\nENCODING 17969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2080\n4E40\n3180\nDF60\n1100\n1F00\n3240\nD180\n1860\nENDCHAR\nSTARTCHAR U_4632\nENCODING 17970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2040\nF3C0\n1040\n27E0\n7420\nA3C0\n3240\n2180\n2180\n2660\nENDCHAR\nSTARTCHAR U_4633\nENCODING 17971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\nF440\n2820\n37C0\n6100\nB100\n27C0\n2920\n2540\n2FE0\nENDCHAR\nSTARTCHAR U_4634\nENCODING 17972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nE540\n2520\n5E20\n64A0\nC480\n6E80\n5480\n4540\n4520\n45E0\nENDCHAR\nSTARTCHAR U_4635\nENCODING 17973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2040\nF3C0\n1040\n27E0\n7080\nA6A0\n31C0\n26A0\n2080\n2180\nENDCHAR\nSTARTCHAR U_4636\nENCODING 17974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\nF080\n2100\n2D60\n7BA0\nA920\n3BA0\n2D60\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_4637\nENCODING 17975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n24A0\nF2A0\n12C0\n27E0\n74A0\nA5A0\n36E0\n24A0\n24A0\n24E0\nENDCHAR\nSTARTCHAR U_4638\nENCODING 17976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\nF7E0\n1280\n2CE0\n75A0\nA760\n3520\n24C0\n24C0\n2720\nENDCHAR\nSTARTCHAR U_4639\nENCODING 17977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2080\nF7E0\n2240\n3240\n65A0\nB100\n27E0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_463A\nENCODING 17978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2080\nF7E0\n2420\n33C0\n6080\nB280\n22C0\n2280\n2780\n28E0\nENDCHAR\nSTARTCHAR U_463B\nENCODING 17979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27E0\nF240\n27E0\n3000\n63C0\nB240\n23C0\n2240\n23C0\n2440\nENDCHAR\nSTARTCHAR U_463C\nENCODING 17980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\nFFE0\n2820\n35C0\n6740\nB540\n2BC0\n2100\n2320\n2CE0\nENDCHAR\nSTARTCHAR U_463D\nENCODING 17981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n2460\nF420\n2760\n3420\n67E0\nB280\n2280\n2280\n24A0\n2860\nENDCHAR\nSTARTCHAR U_463E\nENCODING 17982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2080\nF7E0\n2420\n2BC0\n7240\nABC0\n2200\n23E0\n2220\n23E0\nENDCHAR\nSTARTCHAR U_463F\nENCODING 17983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\nF820\n2FE0\n3880\n6AA0\nBBE0\n2880\n2AA0\n2AA0\n33E0\nENDCHAR\nSTARTCHAR U_4640\nENCODING 17984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2EE0\nFAA0\n2AA0\n2EE0\n7AA0\nAEE0\n3AA0\n2AA0\n2AA0\n3760\nENDCHAR\nSTARTCHAR U_4641\nENCODING 17985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n2120\nF7E0\n1140\n20A0\n7760\nA140\n37E0\n2140\n2180\n2660\nENDCHAR\nSTARTCHAR U_4642\nENCODING 17986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2440\nFA20\n2280\n3440\n67C0\nB100\n20A0\n2A20\n2A40\n29C0\nENDCHAR\nSTARTCHAR U_4643\nENCODING 17987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FE0\nF200\n27C0\n3880\n67E0\nB240\n23C0\n2240\n23C0\n2440\nENDCHAR\nSTARTCHAR U_4644\nENCODING 17988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2100\nF7E0\n2100\n3300\n6560\nB520\n2760\n2520\n27E0\n2420\nENDCHAR\nSTARTCHAR U_4645\nENCODING 17989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\nF280\n2FE0\n3AA0\n6FE0\nB240\n2FE0\n2440\n2380\n2C60\nENDCHAR\nSTARTCHAR U_4646\nENCODING 17990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EA0\n2AC0\nF6A0\n1440\n2840\n77A0\nA100\n3FE0\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4647\nENCODING 17991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\nF200\n2FE0\n3AA0\n6AA0\nB100\n2FE0\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4648\nENCODING 17992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23C0\nF440\n2FE0\n3500\n65E0\nB680\n27E0\n2480\n2540\n2620\nENDCHAR\nSTARTCHAR U_4649\nENCODING 17993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2480\nF7E0\n2480\n35E0\n6520\nB5E0\n2520\n25E0\n2520\n29E0\nENDCHAR\nSTARTCHAR U_464A\nENCODING 17994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2FE0\nF540\n2FE0\n3920\n67E0\nB540\n2540\n2540\n25C0\n2100\nENDCHAR\nSTARTCHAR U_464B\nENCODING 17995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF820\n27C0\n3000\n67C0\nB540\n2640\n27C0\n2000\n2FE0\nENDCHAR\nSTARTCHAR U_464C\nENCODING 17996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\nF540\n2FE0\n3000\n67C0\nB440\n2540\n2540\n2280\n2C60\nENDCHAR\nSTARTCHAR U_464D\nENCODING 17997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2060\nF640\n2D60\n3520\n6FC0\nB560\n2540\n2560\n2940\n3120\nENDCHAR\nSTARTCHAR U_464E\nENCODING 17998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2520\nF100\n2240\n3780\n6240\nB7E0\n2100\n2FE0\n2240\n2C20\nENDCHAR\nSTARTCHAR U_464F\nENCODING 17999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n2FE0\nF540\n27C0\n3540\n67C0\nB540\n2FE0\n2440\n2240\n20C0\nENDCHAR\nSTARTCHAR U_4650\nENCODING 18000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2000\nF7C0\n1440\n2FC0\n7000\nAFE0\n2AA0\n2FE0\n2920\n2960\nENDCHAR\nSTARTCHAR U_4651\nENCODING 18001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27E0\nF000\n13C0\n2A40\n77E0\nAA40\n23C0\n26A0\n2A40\n2320\nENDCHAR\nSTARTCHAR U_4652\nENCODING 18002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\nFFE0\n1240\n2F80\n7440\nAFC0\n2540\n27C0\n2540\n27C0\nENDCHAR\nSTARTCHAR U_4653\nENCODING 18003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\nFAA0\n2FE0\n3100\n67C0\nB100\n2FE0\n2200\n2440\n27E0\nENDCHAR\nSTARTCHAR U_4654\nENCODING 18004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2400\nF5C0\n1540\n2DC0\n7400\nAFE0\n24A0\n27E0\n2400\n27E0\nENDCHAR\nSTARTCHAR U_4655\nENCODING 18005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2940\nF2A0\n14A0\n2800\n7880\nAAE0\n3A80\n2A80\n2B80\n2C60\nENDCHAR\nSTARTCHAR U_4656\nENCODING 18006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2920\nFFE0\n2000\n3EE0\n6AA0\nBEE0\n2AA0\n2EE0\n2AA0\n3360\nENDCHAR\nSTARTCHAR U_4657\nENCODING 18007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF440\n2FE0\n7920\nAFE0\n3920\n2BA0\n2AA0\n2BA0\n2860\nENDCHAR\nSTARTCHAR U_4658\nENCODING 18008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n80A0\n40A0\nEFE0\n2A80\n5B80\nEAA0\nDFA0\n4A40\n4F40\n4AA0\n5120\nENDCHAR\nSTARTCHAR U_4659\nENCODING 18009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2420\nF7C0\n3EA0\n35C0\n6FA0\nA5C0\n2680\n2BE0\n2880\n3080\nENDCHAR\nSTARTCHAR U_465A\nENCODING 18010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F00\n2500\n3F80\n2000\n3FC0\n5440\nFFE0\n2240\nE980\n30E0\nENDCHAR\nSTARTCHAR U_465B\nENCODING 18011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\nFFE0\n2440\n3FE0\n6440\nB7C0\n2320\n2CC0\n2440\n2620\nENDCHAR\nSTARTCHAR U_465C\nENCODING 18012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2340\nF9C0\n26A0\n31C0\n6E80\nB5C0\n2480\n25E0\n2680\n39E0\nENDCHAR\nSTARTCHAR U_465D\nENCODING 18013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2100\nFBC0\n2140\nFB40\n54E0\nFA40\n2180\nEC80\n3060\nENDCHAR\nSTARTCHAR U_465E\nENCODING 18014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F40\n25A0\nF240\n2420\n3FE0\n6000\nB7C0\n2440\n27C0\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_465F\nENCODING 18015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\nFFA0\n2AA0\n3FE0\n6AA0\nBBA0\n2D20\n2FE0\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_4660\nENCODING 18016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n5080\nFA80\n34E0\n5F20\nF540\nD540\n7F40\n54A0\n54A0\n6920\nENDCHAR\nSTARTCHAR U_4661\nENCODING 18017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\nF540\n27C0\n5100\n6FE0\nB440\n2540\n2540\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_4662\nENCODING 18018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4280\nFFE0\n2920\n5D60\n6BA0\nDFE0\n4440\n47C0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_4663\nENCODING 18019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\nFFE0\n1280\n2C60\n7280\n6EE0\nB280\n2EE0\n2280\n2480\nENDCHAR\nSTARTCHAR U_4664\nENCODING 18020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n87C0\n5440\nF5C0\n2540\n5FE0\n6820\nCBA0\n6AA0\n4BA0\n4820\n5FE0\nENDCHAR\nSTARTCHAR U_4665\nENCODING 18021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\nEFE0\n2D60\n5BA0\n7280\nDD60\n4780\n4080\n4300\n4080\nENDCHAR\nSTARTCHAR U_4666\nENCODING 18022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\nF280\n2FE0\n5AA0\n6FE0\nD220\n47E0\n5C80\n4300\n5C00\nENDCHAR\nSTARTCHAR U_4667\nENCODING 18023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\nFFE0\n2540\n57C0\n67C0\nB100\n27C0\n2100\n2FE0\n2AA0\nENDCHAR\nSTARTCHAR U_4668\nENCODING 18024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2540\nF7C0\n2540\n5FE0\n6380\nBD60\n2320\n2D40\n2480\n2660\nENDCHAR\nSTARTCHAR U_4669\nENCODING 18025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4FE0\nF440\n2FE0\n5820\nE7C0\nD240\n4D80\n4340\n4D20\n4300\nENDCHAR\nSTARTCHAR U_466A\nENCODING 18026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\n2480\nFDE0\n76C0\nADA0\nFFE0\n2480\nFFE0\n1280\n3500\nD8C0\nENDCHAR\nSTARTCHAR U_466B\nENCODING 18027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n2EC0\nF2A0\n2FE0\n2540\n57C0\n6540\nD7C0\n4280\n4FE0\n4440\nENDCHAR\nSTARTCHAR U_466C\nENCODING 18028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\nFEE0\n2AA0\n2EE0\n5440\n62A0\nDFE0\n4480\n4300\n4CE0\nENDCHAR\nSTARTCHAR U_466D\nENCODING 18029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nFAA0\n2FC0\n2280\n5FE0\n6480\nDB40\n45A0\n4500\n4BC0\nENDCHAR\nSTARTCHAR U_466E\nENCODING 18030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2FE0\nF480\n2EE0\n2AA0\n5EE0\n67E0\nD880\n4BE0\n4880\n4BE0\nENDCHAR\nSTARTCHAR U_466F\nENCODING 18031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n2FE0\nFA80\n2EC0\n2B20\n57E0\n6480\nD780\n45C0\n4700\n49E0\nENDCHAR\nSTARTCHAR U_4670\nENCODING 18032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\nFF20\n25E0\n5B40\n7540\nDFE0\n6540\n5FE0\n5540\n5F40\n51E0\nENDCHAR\nSTARTCHAR U_4671\nENCODING 18033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\nFFE0\n2940\n3FE0\n6AA0\nBFE0\n2AA0\n2FA0\n2AA0\n3F40\nENDCHAR\nSTARTCHAR U_4672\nENCODING 18034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n4A40\n7FC0\n0400\nFFE0\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_4673\nENCODING 18035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n4A40\n7FC0\n4440\n2480\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_4674\nENCODING 18036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n1100\n7FC0\n5140\n7FC0\n0400\nFFE0\n2040\nDFA0\n1080\n1FE0\nENDCHAR\nSTARTCHAR U_4675\nENCODING 18037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n7FC0\n0400\nFFE0\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_4676\nENCODING 18038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFD00\n2FE0\n2920\nFE00\nAAA0\nAEA0\nC2C0\n8240\nFE40\n8320\nENDCHAR\nSTARTCHAR U_4677\nENCODING 18039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2580\n2A80\n3480\n3F80\n20A0\nC160\n7F80\n1100\n0900\n0300\nENDCHAR\nSTARTCHAR U_4678\nENCODING 18040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n9080\nFFE0\n9080\nF480\n9280\nF280\n5080\n51A0\n9020\n9FE0\nENDCHAR\nSTARTCHAR U_4679\nENCODING 18041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n5240\n53C0\n5240\nFBC0\n5240\n53C0\n5280\n5280\n94A0\n9860\nENDCHAR\nSTARTCHAR U_467A\nENCODING 18042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nA7C0\nAC40\n7440\n27C0\n2440\n37C0\n4A80\n44A0\n9860\nENDCHAR\nSTARTCHAR U_467B\nENCODING 18043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n3A40\nE3C0\nA240\nA3C0\nFA40\n2BC0\n6A80\nBA80\n24A0\n2860\nENDCHAR\nSTARTCHAR U_467C\nENCODING 18044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nFA40\n2BC0\n2A40\n4A40\n93C0\n7A40\n4BC0\n4A80\n7AA0\n4C60\nENDCHAR\nSTARTCHAR U_467D\nENCODING 18045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n4A40\n3180\nDF60\n1500\n1B00\n1500\n1900\n1F40\n61C0\nENDCHAR\nSTARTCHAR U_467E\nENCODING 18046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2240\nFA40\n8BC0\n4240\n7BC0\n4240\n43C0\n4A80\n3AA0\n0C60\nENDCHAR\nSTARTCHAR U_467F\nENCODING 18047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n77C0\n2440\n27C0\nFC40\n27C0\n6440\n77C0\nAA80\n24A0\n28E0\nENDCHAR\nSTARTCHAR U_4680\nENCODING 18048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7BC0\n4A40\n6BC0\n5E40\nEBC0\n6A40\n5BC0\n4980\n5AA0\n8CE0\nENDCHAR\nSTARTCHAR U_4681\nENCODING 18049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n43C0\nFA40\n8BC0\nEA40\nABC0\nAA40\nEBC0\n8980\n9AA0\n8CE0\nENDCHAR\nSTARTCHAR U_4682\nENCODING 18050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n7440\n27C0\nFC40\n57C0\n5440\nDFC0\n5280\n94A0\nB8E0\nENDCHAR\nSTARTCHAR U_4683\nENCODING 18051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7780\n4480\nF780\n9480\nD780\nD480\n9780\n9300\nF520\n09E0\nENDCHAR\nSTARTCHAR U_4684\nENCODING 18052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7BC0\n0A40\n7BC0\n0A40\nFFC0\n1240\n57C0\n3980\n56A0\n92A0\n3460\nENDCHAR\nSTARTCHAR U_4685\nENCODING 18053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nFC40\n27C0\n7440\nFFC0\n2440\n77C0\nAA80\n24A0\n28E0\nENDCHAR\nSTARTCHAR U_4686\nENCODING 18054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\nFF80\n5480\n2780\n7480\n5780\n5480\nFF80\n2300\n5520\n89E0\nENDCHAR\nSTARTCHAR U_4687\nENCODING 18055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n77C0\nAC40\n37C0\n4440\nF7C0\n5440\n77C0\n5280\n74A0\n08E0\nENDCHAR\nSTARTCHAR U_4688\nENCODING 18056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF800\n23C0\nFA40\nABC0\nDA40\nFBC0\n2240\n73C0\n2180\n3AA0\nE4E0\nENDCHAR\nSTARTCHAR U_4689\nENCODING 18057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\nFDC0\n5540\nF5C0\n5540\nEDC0\n4140\nFDC0\n3180\n4AA0\n84E0\nENDCHAR\nSTARTCHAR U_468A\nENCODING 18058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8BC0\n5240\nFBC0\n5240\n8BC0\nFA40\nABC0\nA980\nAD80\nFAA0\n84E0\nENDCHAR\nSTARTCHAR U_468B\nENCODING 18059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n73C0\n5240\nFBC0\n8A40\nFBC0\n8A40\nFA40\n8BC0\nF980\n52A0\n8CE0\nENDCHAR\nSTARTCHAR U_468C\nENCODING 18060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7BC0\n4A40\n7BC0\n4A40\nFFC0\n2240\n73C0\nA980\n72A0\n24E0\nENDCHAR\nSTARTCHAR U_468D\nENCODING 18061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n73C0\n2240\n73C0\n2240\nFBC0\n5240\n73C0\n5180\n72A0\n8CE0\nENDCHAR\nSTARTCHAR U_468E\nENCODING 18062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7DC0\n1140\n7DC0\n1140\nFFC0\n2940\nC7C0\n6C80\n45A0\n7EE0\nENDCHAR\nSTARTCHAR U_468F\nENCODING 18063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nABC0\nFA40\n73C0\nAA40\n4BC0\nFE40\nABC0\nFD80\n4AA0\n8CE0\nENDCHAR\nSTARTCHAR U_4690\nENCODING 18064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8000\nFDC0\n5540\nF5C0\n5D40\nA1C0\n7940\n49C0\n7880\n49A0\n7AE0\nENDCHAR\nSTARTCHAR U_4691\nENCODING 18065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFBC0\nAA40\nFBC0\n5240\n73C0\n5240\n73C0\n5180\n72A0\n8CE0\nENDCHAR\nSTARTCHAR U_4692\nENCODING 18066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBC0\n5240\nFBC0\nAA40\nFBC0\nAA40\nFBC0\n2180\n3AA0\nC4E0\nENDCHAR\nSTARTCHAR U_4693\nENCODING 18067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF800\n23C0\nFA40\nABC0\n7240\n53C0\n7240\n53C0\nF980\n22A0\n24E0\nENDCHAR\nSTARTCHAR U_4694\nENCODING 18068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBC0\n8A40\n73C0\nAA40\n73C0\nD240\n73C0\n5180\n72A0\n8CE0\nENDCHAR\nSTARTCHAR U_4695\nENCODING 18069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nD800\n03C0\nFA40\nABC0\nAA40\n23C0\nFA40\n93C0\nD980\n92A0\nDCE0\nENDCHAR\nSTARTCHAR U_4696\nENCODING 18070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF800\n23C0\nFA40\nABC0\n7240\nABC0\nFA40\n73C0\nA980\n72A0\nFCE0\nENDCHAR\nSTARTCHAR U_4697\nENCODING 18071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n9280\nFA40\nAA40\nFC20\nA900\nF900\nAA40\nABA0\n9A20\nENDCHAR\nSTARTCHAR U_4698\nENCODING 18072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n4EE0\n9400\n3FE0\n5540\nDF40\n5540\n5F40\n5540\n5140\n63C0\nENDCHAR\nSTARTCHAR U_4699\nENCODING 18073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BC0\n9000\nFBC0\nAA40\nFBC0\nAA40\nFBC0\nA800\n8800\n9BE0\nENDCHAR\nSTARTCHAR U_469A\nENCODING 18074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7A80\n93E0\nFA80\nA880\nFFE0\nA940\nF940\nA940\nAA40\n9C60\nENDCHAR\nSTARTCHAR U_469B\nENCODING 18075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7A80\n93E0\nFC80\nA880\nFFE0\nA800\nFBE0\nAA20\nAA20\n9BE0\nENDCHAR\nSTARTCHAR U_469C\nENCODING 18076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\n92A0\nFBE0\nAAA0\nFBE0\nAA40\nFFE0\nA840\nA840\n9840\nENDCHAR\nSTARTCHAR U_469D\nENCODING 18077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7BE0\n9000\nF940\nA940\nFAA0\nA880\nFBE0\nA880\nA880\n9880\nENDCHAR\nSTARTCHAR U_469E\nENCODING 18078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BC0\n9100\nFD40\nAD40\nFBA0\nA900\nFB80\nAD40\nA920\n9900\nENDCHAR\nSTARTCHAR U_469F\nENCODING 18079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BE0\n9220\nFBE0\nAA20\nFBE0\nA800\nFFE0\nAA40\nA840\n98C0\nENDCHAR\nSTARTCHAR U_46A0\nENCODING 18080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7000\n53E0\n9220\nFBE0\nAA20\nABE0\nFA80\nABE0\nFA80\nAAA0\n9BE0\nENDCHAR\nSTARTCHAR U_46A1\nENCODING 18081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7AA0\n92A0\nFBE0\nAAA0\nFBE0\nA840\nFAA0\nAE80\nAA20\n99E0\nENDCHAR\nSTARTCHAR U_46A2\nENCODING 18082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n72A0\n57E0\n92A0\nFAE0\nAA00\nFBE0\nA880\nFFE0\nAAC0\nACA0\n9880\nENDCHAR\nSTARTCHAR U_46A3\nENCODING 18083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n73C0\n5240\n93C0\nFA40\nAFE0\nF880\nAA80\nFAE0\nAA80\nAB80\n9CE0\nENDCHAR\nSTARTCHAR U_46A4\nENCODING 18084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n72A0\n93E0\nFAA0\nABE0\nF880\nABE0\nFAA0\nAAE0\nABA0\n9A60\nENDCHAR\nSTARTCHAR U_46A5\nENCODING 18085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7120\nAF60\nF880\nAFE0\nF920\nADA0\nFB60\nADA0\nA920\n9EC0\nENDCHAR\nSTARTCHAR U_46A6\nENCODING 18086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n71C0\n5F00\nA9C0\nF900\nABE0\nFAA0\nABE0\nFA80\nAAE0\nAB40\n9D60\nENDCHAR\nSTARTCHAR U_46A7\nENCODING 18087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n75A0\n9360\nFCA0\nA980\nFE60\nAB80\nF8C0\nAB20\nA8C0\n9F00\nENDCHAR\nSTARTCHAR U_46A8\nENCODING 18088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4740\n75A0\n9240\nFC20\nA6E0\nFAA0\nAF00\nF8E0\nAEA0\nAA40\n8DA0\nENDCHAR\nSTARTCHAR U_46A9\nENCODING 18089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n7100\n97E0\nFA40\nAFA0\nFA80\nABE0\nFA20\nABA0\nAAA0\n9BA0\nENDCHAR\nSTARTCHAR U_46AA\nENCODING 18090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n7AA0\nAFE0\nF800\nAFE0\nFA40\nABC0\nFAA0\nAEC0\nAA40\n9B20\nENDCHAR\nSTARTCHAR U_46AB\nENCODING 18091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nFBE0\nAD40\nF940\n4F80\n9160\n3F80\n2480\n3E80\n2480\n5E80\nENDCHAR\nSTARTCHAR U_46AC\nENCODING 18092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7920\n5540\nAFE0\nFB40\nAD20\nFA40\nABE0\nFD40\nABE0\nA940\nBE40\nENDCHAR\nSTARTCHAR U_46AD\nENCODING 18093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4760\n7140\n93E0\nFAA0\nABE0\nFA40\nAFE0\nFA40\nABE0\nAA40\n9BE0\nENDCHAR\nSTARTCHAR U_46AE\nENCODING 18094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2F80\nF480\n0480\nF500\n05E0\nF420\n0420\nF420\n95E0\nF840\nENDCHAR\nSTARTCHAR U_46AF\nENCODING 18095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n1020\nFE20\n0120\n7D20\n0120\n7D20\n0120\n7C20\n4420\n7CE0\nENDCHAR\nSTARTCHAR U_46B0\nENCODING 18096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n1200\nFE00\n0260\n7B80\n0600\n7A00\n0200\n7A20\n4A20\n79E0\nENDCHAR\nSTARTCHAR U_46B1\nENCODING 18097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1080\nFC80\n0080\n7AC0\n02A0\n7CA0\n0080\n7880\n4880\n7980\nENDCHAR\nSTARTCHAR U_46B2\nENCODING 18098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n1020\nFCC0\n0300\n7820\n00C0\n7B00\n0000\n7820\n48C0\n7F00\nENDCHAR\nSTARTCHAR U_46B3\nENCODING 18099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFE0\n0100\nF100\n07C0\nF440\n0280\nF100\n9280\nFC60\nENDCHAR\nSTARTCHAR U_46B4\nENCODING 18100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n13E0\nFE20\n03E0\n7A20\n03E0\n7A20\n0220\n7A20\n4A20\n7CE0\nENDCHAR\nSTARTCHAR U_46B5\nENCODING 18101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2280\nF880\n0480\nF280\n0080\nFFE0\n0080\nF080\n9080\nF080\nENDCHAR\nSTARTCHAR U_46B6\nENCODING 18102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\nF900\n0100\nF100\n0FE0\nF100\n0280\nF280\n9440\nF820\nENDCHAR\nSTARTCHAR U_46B7\nENCODING 18103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2240\nFC20\n0000\nF7E0\n0200\nF7E0\n0020\nF020\n9140\nF080\nENDCHAR\nSTARTCHAR U_46B8\nENCODING 18104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFA80\n0440\nF820\n0240\nF240\n0240\nF240\n9240\nF440\nENDCHAR\nSTARTCHAR U_46B9\nENCODING 18105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\nFC80\n0480\nF7E0\n0480\nF480\n0480\nF480\n95A0\nF6E0\nENDCHAR\nSTARTCHAR U_46BA\nENCODING 18106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nFBE0\n0640\nFA40\n0240\nF240\n0180\nF180\n9240\nFC20\nENDCHAR\nSTARTCHAR U_46BB\nENCODING 18107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F80\n1500\n6A00\n0400\nFFC0\n0000\n3F80\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_46BC\nENCODING 18108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\nFA40\n0240\nF240\n07E0\nF240\n0240\nF240\n9240\nFFE0\nENDCHAR\nSTARTCHAR U_46BD\nENCODING 18109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2700\nF900\n01C0\nF700\n0100\nF1E0\n0F00\nF100\n9120\nF0E0\nENDCHAR\nSTARTCHAR U_46BE\nENCODING 18110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40E0\n2780\nF880\n0080\nF080\n0FE0\nF080\n0080\nF080\n9080\nF7E0\nENDCHAR\nSTARTCHAR U_46BF\nENCODING 18111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nF7E0\n0520\nF540\n0900\nF100\n0280\nF280\n9440\nF820\nENDCHAR\nSTARTCHAR U_46C0\nENCODING 18112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27E0\nFC00\n07E0\nF620\n0520\nF540\n0480\nF480\n9540\nFA20\nENDCHAR\nSTARTCHAR U_46C1\nENCODING 18113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n23C0\nF240\n0240\nF7E0\n0240\nF7E0\n0240\nF240\n9240\nF4C0\nENDCHAR\nSTARTCHAR U_46C2\nENCODING 18114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2340\nFD40\n0140\nFBE0\n0140\nF940\n0140\nF940\n9A40\nFC40\nENDCHAR\nSTARTCHAR U_46C3\nENCODING 18115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\nF000\n0000\nF7E0\n0280\nF280\n02A0\nF4A0\n94A0\nF860\nENDCHAR\nSTARTCHAR U_46C4\nENCODING 18116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8400\n4400\nEFE0\n0AA0\nEAA0\n16E0\nE280\n0280\nE4A0\nA4A0\nE8E0\nENDCHAR\nSTARTCHAR U_46C5\nENCODING 18117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n24A0\nF4A0\n07E0\nF4A0\n04A0\nF7E0\n04A0\nF080\n9080\nF080\nENDCHAR\nSTARTCHAR U_46C6\nENCODING 18118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFC80\n0080\n7BE0\n02A0\n7AA0\n03E0\n7AA0\n4AA0\n4AA0\n7BE0\nENDCHAR\nSTARTCHAR U_46C7\nENCODING 18119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n43C0\nFA40\n0240\nF240\n0420\nF800\n03E0\nF220\n9220\nF220\n93E0\nENDCHAR\nSTARTCHAR U_46C8\nENCODING 18120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\nF500\n0900\nF100\n07E0\nF100\n0100\nF280\n9240\nF420\nENDCHAR\nSTARTCHAR U_46C9\nENCODING 18121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nF440\n07C0\nF500\n07C0\nF500\n0500\nF4A0\n9660\nF420\nENDCHAR\nSTARTCHAR U_46CA\nENCODING 18122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n23E0\nFE20\n0220\n7A20\n03E0\n7800\n0000\n7940\n4A20\n7C20\nENDCHAR\nSTARTCHAR U_46CB\nENCODING 18123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n20A0\nF080\n07E0\nF480\n0480\nF4A0\n04C0\nF4A0\n96A0\nF160\nENDCHAR\nSTARTCHAR U_46CC\nENCODING 18124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nF3E0\n0420\nF3A0\n02A0\nF3A0\n0260\nF200\n9220\nF1E0\nENDCHAR\nSTARTCHAR U_46CD\nENCODING 18125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2280\nFFE0\n02A0\nFFE0\n0A80\nFFE0\n02A0\nF2A0\n94E0\nF880\nENDCHAR\nSTARTCHAR U_46CE\nENCODING 18126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27E0\nF420\n0840\nF280\n0280\nF280\n0280\nF2A0\n94A0\nF8E0\nENDCHAR\nSTARTCHAR U_46CF\nENCODING 18127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n23E0\nF220\n03E0\nF280\n02A0\nF2C0\n0280\nF2A0\n94A0\nF4E0\nENDCHAR\nSTARTCHAR U_46D0\nENCODING 18128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0040\n3FC0\n1140\nFFE0\n0000\n3F80\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_46D1\nENCODING 18129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\nF540\n0440\nF480\n0C80\nF540\n0620\nF420\n9C40\nF3C0\nENDCHAR\nSTARTCHAR U_46D2\nENCODING 18130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2100\nFBE0\n0420\nFFE0\n0000\n3F80\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_46D3\nENCODING 18131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n93E0\n9480\n1440\nFFE0\n0000\n3F80\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_46D4\nENCODING 18132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\nFFE0\n0100\nE200\n0FE0\nEAA0\n0AA0\nEAA0\nAAA0\nAAA0\nE860\nENDCHAR\nSTARTCHAR U_46D5\nENCODING 18133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2080\nF7E0\n04A0\nF7E0\n04A0\nF7E0\n0480\nF280\n9180\nFE60\nENDCHAR\nSTARTCHAR U_46D6\nENCODING 18134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFE0\n0520\nF7E0\n0520\nF7E0\n0140\nF080\n9160\nFE20\nENDCHAR\nSTARTCHAR U_46D7\nENCODING 18135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF880\nA7E0\nA000\nFBC0\n8800\n8BC0\nF800\nA3C0\nA240\nFBC0\nENDCHAR\nSTARTCHAR U_46D8\nENCODING 18136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n24E0\nFF80\n0480\nF480\n0480\nF7E0\n0480\nF480\n9480\nF5E0\nENDCHAR\nSTARTCHAR U_46D9\nENCODING 18137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2480\nFC80\n07E0\nF480\n0580\nF5C0\n06A0\nF480\n9480\nF480\nENDCHAR\nSTARTCHAR U_46DA\nENCODING 18138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n1120\n7920\n1240\nFFE0\n0000\n3F80\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_46DB\nENCODING 18139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\nFFE0\n0820\nEBA0\n0AA0\nEAA0\n0AA0\nEBA0\nA820\nAFE0\nE820\nENDCHAR\nSTARTCHAR U_46DC\nENCODING 18140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF200\n0FE0\nE820\n0C60\nEAA0\n0920\nEAA0\nAC60\nA820\nEFE0\nENDCHAR\nSTARTCHAR U_46DD\nENCODING 18141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF240\n0240\nF7C0\n0240\nFFE0\n0100\nF520\n9520\n97E0\nF420\nENDCHAR\nSTARTCHAR U_46DE\nENCODING 18142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF440\n07C0\nF440\n07C0\nF000\n07C0\nF100\n9FE0\n9100\nF100\nENDCHAR\nSTARTCHAR U_46DF\nENCODING 18143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFE0\n0540\nF540\n0BA0\nF100\n0280\nF280\n9440\nF820\nENDCHAR\nSTARTCHAR U_46E0\nENCODING 18144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2000\nF7C0\n0440\nF440\n07C0\nF000\n0440\nF240\n9280\nFFE0\nENDCHAR\nSTARTCHAR U_46E1\nENCODING 18145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2780\nF480\n07E0\nF480\n0660\nF420\n07E0\nF420\n9420\nF7E0\nENDCHAR\nSTARTCHAR U_46E2\nENCODING 18146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2780\nF100\n0FE0\nF380\n0540\nF920\n0280\nF280\n94A0\nF860\nENDCHAR\nSTARTCHAR U_46E3\nENCODING 18147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\nF540\n07C0\nF540\n0FE0\nF200\n07C0\nF040\n9240\nF180\nENDCHAR\nSTARTCHAR U_46E4\nENCODING 18148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47C0\nF440\n0440\nF7C0\n0100\nF1E0\n0500\nF500\n9700\nF9E0\nENDCHAR\nSTARTCHAR U_46E5\nENCODING 18149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4300\nE480\n0200\nFFE0\n0500\nEFC0\n1540\nE540\nA540\nE100\nENDCHAR\nSTARTCHAR U_46E6\nENCODING 18150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2240\nF440\n0900\nF180\n0240\nF420\n0BC0\nF240\n9240\nF3C0\nENDCHAR\nSTARTCHAR U_46E7\nENCODING 18151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n4D40\nEB80\n0900\nEFC0\n0900\nEB80\n0B40\nED40\nA900\nEFE0\nENDCHAR\nSTARTCHAR U_46E8\nENCODING 18152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF440\n0280\nFFE0\n0100\nF100\n07C0\nF100\n9100\nF100\nENDCHAR\nSTARTCHAR U_46E9\nENCODING 18153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4280\nF280\n0EE0\nF820\n0820\nFEE0\n0280\nF280\n9280\nFFE0\nENDCHAR\nSTARTCHAR U_46EA\nENCODING 18154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nFAA0\n0480\nFFE0\n0040\nF7C0\n0400\nF7C0\n9040\nF180\nENDCHAR\nSTARTCHAR U_46EB\nENCODING 18155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4400\nF7C0\n0400\nF7C0\n0400\nFFE0\n0500\nF540\n9480\nF660\nENDCHAR\nSTARTCHAR U_46EC\nENCODING 18156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n4FE0\nF420\n0FA0\nF220\n1FE0\nE220\n0AA0\nEAA0\nAFA0\nE0C0\nENDCHAR\nSTARTCHAR U_46ED\nENCODING 18157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\nF100\n0FE0\nF440\n0280\nF7C0\n0100\nFFE0\n9100\nF100\nENDCHAR\nSTARTCHAR U_46EE\nENCODING 18158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4EC0\nFAA0\n0480\nF480\n0BE0\nF000\n07C0\nF440\n9440\nF7C0\nENDCHAR\nSTARTCHAR U_46EF\nENCODING 18159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4820\nE820\n0FE0\nE880\n0FE0\nE880\n0BE0\nEA20\nAA20\nF3E0\nENDCHAR\nSTARTCHAR U_46F0\nENCODING 18160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2420\nF7E0\n0420\nF7E0\n0000\nF4A0\n07C0\nF480\n95A0\nF660\nENDCHAR\nSTARTCHAR U_46F1\nENCODING 18161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\nF540\n0540\nF7C0\n0100\nF000\n0540\nFCA0\n9440\nF3C0\nENDCHAR\nSTARTCHAR U_46F2\nENCODING 18162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n47C0\nE440\n07C0\nE440\n07C0\nE100\n0FE0\nE920\nA960\nE100\nENDCHAR\nSTARTCHAR U_46F3\nENCODING 18163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4FE0\nE280\n0540\nEFE0\n1540\nE7C0\n0540\nE7C0\nA120\nE0E0\nENDCHAR\nSTARTCHAR U_46F4\nENCODING 18164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\nE280\n0440\nEFE0\n0040\nE740\n0540\nE740\nA040\nE1C0\nENDCHAR\nSTARTCHAR U_46F5\nENCODING 18165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n4E40\nEA40\n0580\nFFE0\n1020\nF7A0\n0480\nE300\nA280\nEC60\nENDCHAR\nSTARTCHAR U_46F6\nENCODING 18166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7C0\n0100\nF7C0\n0100\nF7C0\n0100\nFFE0\n9380\n9540\nF920\nENDCHAR\nSTARTCHAR U_46F7\nENCODING 18167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4100\nFFE0\n1420\nE6E0\n0AA0\nFAA0\n06C0\nE480\nA8A0\nF0E0\nENDCHAR\nSTARTCHAR U_46F8\nENCODING 18168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4100\nEFE0\n0900\nE900\n09E0\nE900\n0BC0\nEA40\nAA40\nF3C0\nENDCHAR\nSTARTCHAR U_46F9\nENCODING 18169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n43C0\nE440\n0780\nE080\n1FE0\nE540\n1B80\nE5C0\nBAA0\nE580\nENDCHAR\nSTARTCHAR U_46FA\nENCODING 18170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4920\nEFE0\n0920\nEFE0\n0480\nE860\n1440\nE440\nA440\nE840\nENDCHAR\nSTARTCHAR U_46FB\nENCODING 18171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n4900\nEFE0\n0900\nEBC0\n0A40\nEBC0\n0A40\nEBC0\nAA40\nF3C0\nENDCHAR\nSTARTCHAR U_46FC\nENCODING 18172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4CE0\nE820\n0EE0\nE820\n0FE0\nE000\n07C0\nE100\nA100\nEFE0\nENDCHAR\nSTARTCHAR U_46FD\nENCODING 18173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n4700\nE100\n0FE0\nE100\n0500\nE960\n0920\nED60\nA920\nEFE0\nENDCHAR\nSTARTCHAR U_46FE\nENCODING 18174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4100\nE7C0\n0100\nEFE0\n0200\nE680\n0300\nEFE0\nA540\nE920\nENDCHAR\nSTARTCHAR U_46FF\nENCODING 18175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4000\nE7C0\n0440\nE7C0\n0000\nEFE0\n0AA0\nEFE0\nA920\nE920\nENDCHAR\nSTARTCHAR U_4700\nENCODING 18176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n4AA0\nFBA0\n0EE0\nEAA0\n1760\nF100\n05C0\nF500\n9500\nFFE0\nENDCHAR\nSTARTCHAR U_4701\nENCODING 18177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45C0\n4480\nF7E0\n0480\nF7E0\n0480\nF7E0\n0080\nF7E0\n9140\nF620\nENDCHAR\nSTARTCHAR U_4702\nENCODING 18178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\nF440\n07C0\nF440\n07C0\nF200\n0FE0\nF540\n9BA0\nF100\nENDCHAR\nSTARTCHAR U_4703\nENCODING 18179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nF7E0\n0C80\nF7E0\n0480\nF7E0\n9480\nF7E0\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_4704\nENCODING 18180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4420\nF7E0\n06A0\nF5C0\n06A0\nF580\n05E0\nF680\n9BE0\nF880\nENDCHAR\nSTARTCHAR U_4705\nENCODING 18181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2920\nFFE0\n0480\nF7E0\n0C80\nF7E0\n0480\nF7E0\n9480\nF7E0\nENDCHAR\nSTARTCHAR U_4706\nENCODING 18182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n7FE0\n5DC0\n6AA0\n7FE0\n4000\n5FC0\n5040\n9FC0\nENDCHAR\nSTARTCHAR U_4707\nENCODING 18183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF280\n0480\nFFE0\n0440\nF7C0\n0D20\nF4C0\n9440\nF620\nENDCHAR\nSTARTCHAR U_4708\nENCODING 18184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4520\n2A40\nFFE0\n0920\nFFE0\n0920\nFFE0\n0100\nFFE0\n9540\nF920\nENDCHAR\nSTARTCHAR U_4709\nENCODING 18185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF380\n0D60\nF100\n0380\nFD60\n0540\nF380\n9540\nF720\nENDCHAR\nSTARTCHAR U_470A\nENCODING 18186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2280\nFFE0\n0AA0\nFFE0\n0AA0\nFFE0\n0440\nF7C0\n9440\nF7C0\nENDCHAR\nSTARTCHAR U_470B\nENCODING 18187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\nF540\n07C0\nF100\n0FE0\nF440\n0540\nF540\n97C0\nFC60\nENDCHAR\nSTARTCHAR U_470C\nENCODING 18188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n4E40\n5080\nFFE0\n2040\n5EA0\nF1E0\n0E00\nAAA0\nAEA0\n8B00\nENDCHAR\nSTARTCHAR U_470D\nENCODING 18189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nFAA0\n0440\nF7C0\n0C60\nF7C0\n0440\nF7C0\n9540\nFB20\nENDCHAR\nSTARTCHAR U_470E\nENCODING 18190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n4AE0\nF740\n0240\nFDA0\n0FE0\nF920\n07C0\nF140\n9240\nF4C0\nENDCHAR\nSTARTCHAR U_470F\nENCODING 18191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4FE0\nEA80\n0DE0\nEB40\n0AE0\nEAA0\n0CE0\nE8A0\nA8E0\nE8A0\nENDCHAR\nSTARTCHAR U_4710\nENCODING 18192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57E0\n6280\n57E0\n7AC0\n4240\nFFE0\n0000\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_4711\nENCODING 18193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4280\nEEE0\n0820\nEEE0\n0280\nEFE0\n0240\nED20\nB440\nE7C0\nENDCHAR\nSTARTCHAR U_4712\nENCODING 18194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4FE0\nED60\n0BA0\nE920\n0FE0\nEBA0\n0D60\nFFE0\nA280\nEC60\nENDCHAR\nSTARTCHAR U_4713\nENCODING 18195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4EE0\nF440\n0540\nFFE0\n0540\nF7E0\n0100\nFFE0\n9340\nFD20\nENDCHAR\nSTARTCHAR U_4714\nENCODING 18196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\n4900\nE7E0\n1E80\nE9E0\n0920\nE9E0\n0920\nE9E0\nAA20\nF7E0\nENDCHAR\nSTARTCHAR U_4715\nENCODING 18197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5FE0\nE480\n0FC0\nEA40\n0FC0\nEA40\n0FE0\nEAA0\nAFA0\nE860\nENDCHAR\nSTARTCHAR U_4716\nENCODING 18198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4280\nEFE0\n0AA0\nEFE0\n0440\nE5C0\n0740\nE440\nA7C0\nEC60\nENDCHAR\nSTARTCHAR U_4717\nENCODING 18199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n80A0\n5FE0\nF080\n17A0\nF0A0\n17A0\nF540\n17C0\nF540\nBCA0\nF7C0\nENDCHAR\nSTARTCHAR U_4718\nENCODING 18200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A80\nFB80\n0AE0\nEFA0\n11A0\nFFA0\n0B40\nEF40\nA1A0\nA5A0\nE2A0\nENDCHAR\nSTARTCHAR U_4719\nENCODING 18201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\nF840\n0FC0\nF840\n0FC0\nF480\n0FE0\nF440\n9AA0\n9FE0\nFAA0\nENDCHAR\nSTARTCHAR U_471A\nENCODING 18202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n5AA0\nEFE0\n0100\nFBC0\n0D20\nE900\n0BC0\nED20\nA900\nF7E0\nENDCHAR\nSTARTCHAR U_471B\nENCODING 18203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n4500\nF7C0\n0540\nF7C0\n02A0\nF7E0\n0560\nF7C0\n92A0\nFCE0\nENDCHAR\nSTARTCHAR U_471C\nENCODING 18204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n4100\nEFE0\n0800\nEFE0\n0A40\nEDA0\n0A40\nEFE0\nAA40\nF3C0\nENDCHAR\nSTARTCHAR U_471D\nENCODING 18205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n4A40\nEDA0\n0A40\nEDA0\n0FE0\nEA40\n0DA0\nEA40\nADA0\nEFE0\nENDCHAR\nSTARTCHAR U_471E\nENCODING 18206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF280\n1D60\nF540\n1560\nFD40\n07C0\nF440\n97C0\nF840\nENDCHAR\nSTARTCHAR U_471F\nENCODING 18207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44A0\n4EA0\nE480\n1FE0\nEA80\n1B80\nEAA0\n1BA0\nEA40\nBFC0\nE120\nENDCHAR\nSTARTCHAR U_4720\nENCODING 18208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\nF880\n0FE0\nFAA0\n0AA0\nF7C0\n0440\nF540\n9540\n97C0\nFC60\nENDCHAR\nSTARTCHAR U_4721\nENCODING 18209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF100\n07C0\nF440\n0FE0\nF920\n0460\nF3C0\n9640\n9980\nF660\nENDCHAR\nSTARTCHAR U_4722\nENCODING 18210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF920\n07C0\nF100\n0FE0\nFAA0\n0FE0\nF100\n9540\n9C60\nF7C0\nENDCHAR\nSTARTCHAR U_4723\nENCODING 18211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n4700\n2400\n0400\nE7E0\n2480\n2480\n2480\n3C80\n2880\n1080\nENDCHAR\nSTARTCHAR U_4724\nENCODING 18212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n4480\n2480\n0FC0\nE480\n2480\n3FE0\n2000\n3480\n2440\n0840\nENDCHAR\nSTARTCHAR U_4725\nENCODING 18213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n9DE0\n4520\n09E0\nDD20\n4520\n55E0\n4800\n69E0\n5400\n23E0\nENDCHAR\nSTARTCHAR U_4726\nENCODING 18214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n5FE0\n2480\n0FE0\nF020\n27A0\n24A0\n2FA0\n34A0\n27A0\n0040\nENDCHAR\nSTARTCHAR U_4727\nENCODING 18215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n9FE0\n4AA0\n1BA0\nCAA0\n5320\n4100\n45C0\n5500\n6500\n5FE0\nENDCHAR\nSTARTCHAR U_4728\nENCODING 18216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n87C0\n4540\n0FE0\nC920\n4FE0\n4100\n4A40\n4920\n7460\n57C0\nENDCHAR\nSTARTCHAR U_4729\nENCODING 18217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n9FE0\n4480\n0F80\n38E0\nCF80\n4D80\n7FE0\n5000\n6D40\n52A0\nENDCHAR\nSTARTCHAR U_472A\nENCODING 18218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n5100\n4BC0\nA940\n2140\n5140\n8940\n7140\n5240\n5260\n7460\nENDCHAR\nSTARTCHAR U_472B\nENCODING 18219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\n4800\n4FC0\nA900\n2100\n5100\n8900\n7100\n5100\n5100\n7FE0\nENDCHAR\nSTARTCHAR U_472C\nENCODING 18220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\n5080\n4BE0\nAAA0\n22A0\n52A0\n8BE0\n72A0\n52A0\n52A0\n73E0\nENDCHAR\nSTARTCHAR U_472D\nENCODING 18221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\n0400\nFFE0\n8020\n7FC0\n2E80\nD160\n3F80\nE160\n2100\n3F00\nENDCHAR\nSTARTCHAR U_472E\nENCODING 18222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\n57E0\n4C20\nA880\n2280\n53E0\n8C80\n7080\n57E0\n5080\n7080\nENDCHAR\nSTARTCHAR U_472F\nENCODING 18223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5200\n53E0\n4C20\nAD60\n23A0\n57E0\n8920\n73A0\n5360\n5520\n7140\nENDCHAR\nSTARTCHAR U_4730\nENCODING 18224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53C0\n5240\n4BC0\nAA40\n23C0\n5100\n8FE0\n7280\n5540\n5BA0\n7100\nENDCHAR\nSTARTCHAR U_4731\nENCODING 18225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53C0\n4A40\n4BC0\nA240\n2FE0\n5AA0\n8FE0\n7440\n5280\n5380\n7C60\nENDCHAR\nSTARTCHAR U_4732\nENCODING 18226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n52A0\n4D40\n4AA0\nA7E0\n2520\n56A0\n8FE0\n7540\n57C0\n5540\n77A0\nENDCHAR\nSTARTCHAR U_4733\nENCODING 18227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0000\n3FC0\n2040\n3FC0\n1080\n0900\nFFE0\n2000\n2000\n3FC0\nENDCHAR\nSTARTCHAR U_4734\nENCODING 18228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n01C0\n7100\n5100\n57C0\n7440\n0240\n5280\n5100\n3280\nCC60\nENDCHAR\nSTARTCHAR U_4735\nENCODING 18229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n07E0\n74A0\n5480\n57E0\n7620\n0520\n5540\n5480\n3540\nCA20\nENDCHAR\nSTARTCHAR U_4736\nENCODING 18230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n03C0\n7640\n5180\n5240\n7CA0\n0080\n53C0\n5280\n3BC0\nC080\nENDCHAR\nSTARTCHAR U_4737\nENCODING 18231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n0040\n77E0\n5040\n5FE0\n7820\n03C0\n5240\n5180\n3A40\nC420\nENDCHAR\nSTARTCHAR U_4738\nENCODING 18232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n0220\n73E0\n5200\n53C0\n7280\n03C0\n5280\n53E0\n3C80\nC460\nENDCHAR\nSTARTCHAR U_4739\nENCODING 18233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n0FE0\n7100\n57C0\n5540\n7540\n07C0\n5100\n5380\n3540\nC920\nENDCHAR\nSTARTCHAR U_473A\nENCODING 18234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA40\n07E0\n7240\n5240\n5FE0\n7000\n03C0\n5240\n53C0\n3A40\nC3C0\nENDCHAR\nSTARTCHAR U_473B\nENCODING 18235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n0240\n73C0\n5240\n53C0\n7000\n0FE0\n5100\n55C0\n3500\nCBE0\nENDCHAR\nSTARTCHAR U_473C\nENCODING 18236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n29E0\nFD20\n36A0\nD840\n31A0\nFFE0\n2080\n3F80\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_473D\nENCODING 18237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n0280\nE440\nABA0\nBE20\nEAA0\n0EA0\nAAA0\nAEA0\n3A20\nCA60\nENDCHAR\nSTARTCHAR U_473E\nENCODING 18238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n07C0\n7280\n5280\n5FE0\n7000\n07C0\n5440\n57C0\n3C40\nC7C0\nENDCHAR\nSTARTCHAR U_473F\nENCODING 18239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n51E0\n7D00\n4580\n7E40\n5240\nFFE0\n2080\n3F80\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_4740\nENCODING 18240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0300\nF4E0\n06A0\nF5A0\n9760\nF000\n97E0\n6520\n37E0\nC520\n07E0\nENDCHAR\nSTARTCHAR U_4741\nENCODING 18241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAAA0\n71C0\n8A20\nFFE0\n8020\n7FC0\n2080\n3F80\n2080\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_4742\nENCODING 18242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\nB240\nCDE0\nB240\n9180\n9240\nFFE0\n2080\n3F80\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_4743\nENCODING 18243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n04A0\nF520\n97E0\n9240\nF5A0\n97E0\n6240\n37E0\nCAA0\n0AA0\nENDCHAR\nSTARTCHAR U_4744\nENCODING 18244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF7E0\n0D40\nF7E0\n9540\nF7E0\n0540\n97E0\n7240\nC180\n0E60\nENDCHAR\nSTARTCHAR U_4745\nENCODING 18245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFC80\n2080\nD080\n37E0\nD880\n1080\n3880\nD480\n1080\n67E0\nENDCHAR\nSTARTCHAR U_4746\nENCODING 18246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3FC0\n4A40\n3240\n0480\nFFE0\n0880\n7700\n0B80\n7260\n0C00\nENDCHAR\nSTARTCHAR U_4747\nENCODING 18247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\n4FE0\n8900\n56A0\n51C0\n5680\n51C0\n56A0\n5280\n9120\n8FE0\nENDCHAR\nSTARTCHAR U_4748\nENCODING 18248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nFF00\n2400\n37E0\nDC00\n35C0\nD540\n3DC0\nD500\n1520\n68E0\nENDCHAR\nSTARTCHAR U_4749\nENCODING 18249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n2A80\nFFE0\n8020\n7FC0\n0880\n7500\n0E00\n7500\n04C0\n1800\nENDCHAR\nSTARTCHAR U_474A\nENCODING 18250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n27E0\n2140\nD7E0\n3140\nD7C0\n3100\nD5C0\n5700\n38E0\nENDCHAR\nSTARTCHAR U_474B\nENCODING 18251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFFE0\n2420\n23C0\nD000\n3FE0\nD080\n3AC0\nD2A0\n54A0\n2180\nENDCHAR\nSTARTCHAR U_474C\nENCODING 18252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFAA0\n22A0\n2940\nD6A0\n33E0\nDAA0\n36A0\nD140\n52A0\n2CA0\nENDCHAR\nSTARTCHAR U_474D\nENCODING 18253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF920\n27C0\n2100\nDFC0\n3540\nD7C0\n3540\nDFE0\n5100\n2100\nENDCHAR\nSTARTCHAR U_474E\nENCODING 18254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFAA0\n23E0\n2000\nD7E0\n3900\nD3E0\n3AA0\nD6A0\n52A0\n2260\nENDCHAR\nSTARTCHAR U_474F\nENCODING 18255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFC0\n2540\n2FE0\nD540\n37C0\nD540\n3FE0\nD440\n5380\n2C60\nENDCHAR\nSTARTCHAR U_4750\nENCODING 18256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFFE0\n4A80\n4AE0\nBD40\n6AE0\nAAA0\n7AE0\nAEA0\n28E0\n48A0\nENDCHAR\nSTARTCHAR U_4751\nENCODING 18257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFC0\n2440\n2280\nDFE0\n3540\nD7C0\n3540\nDFC0\n5100\n2FE0\nENDCHAR\nSTARTCHAR U_4752\nENCODING 18258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F00\nFAE0\n2EA0\n4A40\nBF40\n62A0\nAFE0\n7540\nA540\n2BA0\n4100\nENDCHAR\nSTARTCHAR U_4753\nENCODING 18259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n02A0\nFD40\n22A0\n27E0\nDD20\n36A0\nD7E0\n3D40\nD7C0\n5560\n27A0\nENDCHAR\nSTARTCHAR U_4754\nENCODING 18260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n4280\n4EE0\nBAA0\n6EE0\nA7C0\n6C80\nB7C0\n2480\n47E0\nENDCHAR\nSTARTCHAR U_4755\nENCODING 18261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFAC0\n2340\n27E0\nD840\n37E0\nD2A0\n3BE0\nD2A0\n57E0\n20A0\nENDCHAR\nSTARTCHAR U_4756\nENCODING 18262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\n2740\nDD40\n3540\nE540\n3540\nD540\n3540\nD540\n5520\n2920\nENDCHAR\nSTARTCHAR U_4757\nENCODING 18263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n6900\nD100\n27E0\nE100\n3380\nD380\n3540\nD920\n5100\n2100\nENDCHAR\nSTARTCHAR U_4758\nENCODING 18264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n2240\nD240\n6240\nD420\n33C0\nD240\n3240\nD180\n1240\n2C20\nENDCHAR\nSTARTCHAR U_4759\nENCODING 18265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n27E0\nDC00\n5440\nE640\n3580\nD480\n3540\nD620\n5400\n27E0\nENDCHAR\nSTARTCHAR U_475A\nENCODING 18266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n2440\nDC40\n57C0\nE500\n3520\nD5C0\n3500\nD520\n5920\n28E0\nENDCHAR\nSTARTCHAR U_475B\nENCODING 18267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n2080\nDFE0\n54A0\nE480\n37C0\nD540\n3540\nD480\n5940\n2A20\nENDCHAR\nSTARTCHAR U_475C\nENCODING 18268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2240\nD7E0\n5240\nE420\n33C0\nD240\n3640\nD180\n5240\n2C20\nENDCHAR\nSTARTCHAR U_475D\nENCODING 18269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n27E0\nDA80\n5440\nEFE0\n3040\nD740\n3540\nD740\n5040\n20C0\nENDCHAR\nSTARTCHAR U_475E\nENCODING 18270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\n2100\nDFE0\n5540\nE780\n34E0\nD400\n35C0\nD540\n5940\n2A60\nENDCHAR\nSTARTCHAR U_475F\nENCODING 18271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n27E0\nDAA0\n57A0\nE2A0\n3760\nD100\n37E0\nD180\n5240\n2C20\nENDCHAR\nSTARTCHAR U_4760\nENCODING 18272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5C80\nD5E0\n2520\nE5E0\n3520\nD5E0\n3480\nD6A0\n14A0\n6980\nENDCHAR\nSTARTCHAR U_4761\nENCODING 18273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n6FE0\nD240\n23C0\nE100\n37E0\nD520\n3760\nD5A0\n1760\n6420\nENDCHAR\nSTARTCHAR U_4762\nENCODING 18274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\nEC40\n57C0\n2440\nDFE0\n2AA0\nDFE0\n2800\nCFE0\n3240\n2FE0\nENDCHAR\nSTARTCHAR U_4763\nENCODING 18275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n26E0\n6980\nD6E0\n21A0\nE6E0\n3280\nD7E0\n3180\nD2C0\n1CA0\n3080\nENDCHAR\nSTARTCHAR U_4764\nENCODING 18276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n6FE0\n9540\n6AA0\nC440\n2FE0\nD540\n37C0\nD100\n1540\n6B20\nENDCHAR\nSTARTCHAR U_4765\nENCODING 18277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4FE0\nB4A0\n67E0\nC080\n26A0\nD080\n36A0\nD080\n17E0\n6080\nENDCHAR\nSTARTCHAR U_4766\nENCODING 18278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n6AA0\n9FE0\n6000\nC1E0\n2F00\nD100\n3540\nD540\n1BA0\n6120\nENDCHAR\nSTARTCHAR U_4767\nENCODING 18279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n97E0\nF420\n9820\nF7A0\n9020\nF1A0\n4620\n9020\n90C0\nENDCHAR\nSTARTCHAR U_4768\nENCODING 18280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n9240\n9180\n9260\n3F80\n2480\n3280\n2980\n2480\n3F80\n60C0\nENDCHAR\nSTARTCHAR U_4769\nENCODING 18281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9280\nF440\n9920\nF280\n9500\nF240\n4480\n9100\n9600\nENDCHAR\nSTARTCHAR U_476A\nENCODING 18282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9120\nF140\n9100\n9500\nF5E0\n9500\nF500\n4500\n9700\n98E0\nENDCHAR\nSTARTCHAR U_476B\nENCODING 18283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9200\nF7E0\n9500\n99E0\nF100\n9100\nF1E0\n4100\n9100\n9100\nENDCHAR\nSTARTCHAR U_476C\nENCODING 18284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n9FE0\nF100\n9100\nF100\n97C0\nF100\n4100\n9100\n9FE0\nENDCHAR\nSTARTCHAR U_476D\nENCODING 18285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF400\n97E0\nF820\n97A0\nF4A0\n94A0\nF7A0\n4020\n9020\n90C0\nENDCHAR\nSTARTCHAR U_476E\nENCODING 18286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n9FE0\nF100\n9200\nF440\n9780\nF200\n4440\n9FE0\n9420\nENDCHAR\nSTARTCHAR U_476F\nENCODING 18287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF400\n97E0\nF800\n9500\nFFE0\n9520\nF540\n4500\n9420\n93E0\nENDCHAR\nSTARTCHAR U_4770\nENCODING 18288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9FE0\nF100\n97C0\nF080\n9FE0\nF480\n2280\n5080\n9180\nENDCHAR\nSTARTCHAR U_4771\nENCODING 18289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1F80\n2480\nFFE0\n2920\nDFE0\n2080\n3F80\n2080\n3F80\n4040\nENDCHAR\nSTARTCHAR U_4772\nENCODING 18290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\nF7C0\n9480\n9440\nF520\n94A0\nF400\n4900\n9080\n9080\nENDCHAR\nSTARTCHAR U_4773\nENCODING 18291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1DE0\n5120\n7D40\nA480\n1140\nFFA0\n1080\n1F80\n1080\n1F80\n2040\nENDCHAR\nSTARTCHAR U_4774\nENCODING 18292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n3F80\n0400\nFFE0\n9120\n1F00\n1100\n1F00\n60C0\nENDCHAR\nSTARTCHAR U_4775\nENCODING 18293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\nF120\n97E0\nF100\n97E0\nF520\n97E0\nF520\n47E0\n9520\n9560\nENDCHAR\nSTARTCHAR U_4776\nENCODING 18294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n9FE0\nF000\n97C0\nF440\n97C0\nF100\n4540\n9920\n9300\nENDCHAR\nSTARTCHAR U_4777\nENCODING 18295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7DE0\n9120\nFFE0\n2420\n5F80\n1080\n1F80\n1080\n1F80\n2040\nENDCHAR\nSTARTCHAR U_4778\nENCODING 18296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\n9480\nF100\n9FE0\nF100\n97C0\nF440\n4280\n9100\n9EE0\nENDCHAR\nSTARTCHAR U_4779\nENCODING 18297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nE820\nA400\nAEE0\nEAA0\nAAA0\nF6E0\n0280\nA4A0\nA8E0\nENDCHAR\nSTARTCHAR U_477A\nENCODING 18298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n4A40\n3180\nDF60\n1100\n1F00\n1100\n1F00\n1100\n2080\nENDCHAR\nSTARTCHAR U_477B\nENCODING 18299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\n9420\nF7E0\n9480\nF7E0\n9480\nF7E0\n4A20\n9A20\n93E0\nENDCHAR\nSTARTCHAR U_477C\nENCODING 18300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9100\nF7C0\n9100\nFFE0\n9440\nF7C0\n4440\n97C0\n9440\nENDCHAR\nSTARTCHAR U_477D\nENCODING 18301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9480\nF5E0\n9480\n9480\nF7E0\n9480\nF5E0\n4880\n9880\n97E0\nENDCHAR\nSTARTCHAR U_477E\nENCODING 18302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A80\n0240\nFFE0\n5100\n5CA0\nF760\n1100\n1F00\n1100\n1F00\n6080\nENDCHAR\nSTARTCHAR U_477F\nENCODING 18303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n35C0\n4440\n75C0\n4440\n75C0\n1B00\nF1E0\n1F00\n1100\n1F80\n6040\nENDCHAR\nSTARTCHAR U_4780\nENCODING 18304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nF440\n9FE0\nF480\n9500\nF7E0\n9480\nF7E0\n4480\n9540\n9620\nENDCHAR\nSTARTCHAR U_4781\nENCODING 18305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9400\nF5C0\n9540\n95C0\nF540\n97E0\nF540\n45C0\n9520\n97E0\nENDCHAR\nSTARTCHAR U_4782\nENCODING 18306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA200\nEFE0\nAAA0\nAAA0\nEAA0\nA100\nEFE0\n4280\nA440\nA820\nENDCHAR\nSTARTCHAR U_4783\nENCODING 18307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFF80\nA4E0\nEAA0\nBFA0\nE4A0\nBF40\nE440\n4740\nBCA0\nA120\nENDCHAR\nSTARTCHAR U_4784\nENCODING 18308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFFE0\n4280\n7FE0\n4AA0\nBFC0\n2080\n3F80\n2080\n3F80\nC040\nENDCHAR\nSTARTCHAR U_4785\nENCODING 18309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9400\n95C0\nF400\n97E0\nF540\n95A0\nF800\n47C0\n5440\n97C0\nENDCHAR\nSTARTCHAR U_4786\nENCODING 18310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF920\n9540\nF100\n97C0\n9440\nF7C0\n9440\nF7C0\n4440\n57C0\n9820\nENDCHAR\nSTARTCHAR U_4787\nENCODING 18311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1140\nFF40\n55C0\nBF60\n1100\n1F00\n1100\n1F00\n60C0\nENDCHAR\nSTARTCHAR U_4788\nENCODING 18312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF7E0\n9540\nF7C0\n9480\n97C0\nF440\n97E0\nF420\n0560\nAAA0\n9060\nENDCHAR\nSTARTCHAR U_4789\nENCODING 18313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF540\n9FE0\nF100\n9FE0\n9440\nFFE0\n9440\nF7C0\n4440\n57C0\n9820\nENDCHAR\nSTARTCHAR U_478A\nENCODING 18314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE1C0\nA100\nEFE0\nA940\nAFE0\nEA80\nAFE0\nEA40\n6BC0\n9240\n93C0\nENDCHAR\nSTARTCHAR U_478B\nENCODING 18315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE4E0\nBFA0\nAAE0\nEAA0\nBFA0\nE4E0\nBFA0\nE4A0\n4EE0\nB4A0\nA520\nENDCHAR\nSTARTCHAR U_478C\nENCODING 18316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF860\n8B80\nA880\nA880\nAFE0\nA880\nA880\n23E0\n5220\n4A20\n83E0\nENDCHAR\nSTARTCHAR U_478D\nENCODING 18317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8FE0\nA900\nABC0\nA900\nAFE0\nA440\n27C0\n5440\n4FC0\n8440\nENDCHAR\nSTARTCHAR U_478E\nENCODING 18318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n8A40\nABC0\nAA40\nABC0\nA800\nA7E0\n2420\n57E0\n4C20\n87E0\nENDCHAR\nSTARTCHAR U_478F\nENCODING 18319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8AA0\nAAA0\nABE0\nAAA0\nABE0\nA840\nA2A0\n2680\n5A20\n89E0\nENDCHAR\nSTARTCHAR U_4790\nENCODING 18320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n8900\nAFE0\nA900\nAFE0\nAA40\nAF60\n22C0\n5240\n83C0\nENDCHAR\nSTARTCHAR U_4791\nENCODING 18321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n13E0\n7C80\n1080\nFE80\n2880\n6C80\nAA80\n2880\n4880\n9BE0\nENDCHAR\nSTARTCHAR U_4792\nENCODING 18322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1220\n7BE0\n1220\nFFA0\n2AA0\n6AA0\nAFA0\n2A20\n4A20\n9A60\nENDCHAR\nSTARTCHAR U_4793\nENCODING 18323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n10A0\n7D40\n1140\nFEA0\n2800\n6DE0\nAA80\n2880\n4880\n9BE0\nENDCHAR\nSTARTCHAR U_4794\nENCODING 18324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1220\n7BE0\n1200\nFFE0\n2A80\n6BE0\nAE80\n2BE0\n4AA0\n9CE0\nENDCHAR\nSTARTCHAR U_4795\nENCODING 18325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1080\n7FE0\n12A0\nFDC0\n2AA0\n6BE0\nAC80\n2BE0\n4AA0\n9AA0\nENDCHAR\nSTARTCHAR U_4796\nENCODING 18326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1140\n7D20\n17E0\nFD00\n1100\n5C80\n50A0\n5060\nB020\n8FE0\nENDCHAR\nSTARTCHAR U_4797\nENCODING 18327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\n1040\n7BE0\n10C0\nFCC0\n1140\n5940\n5240\n5540\n7080\n8FE0\nENDCHAR\nSTARTCHAR U_4798\nENCODING 18328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n13E0\n7C00\n13E0\nFC40\n1080\n5D00\n5220\n51E0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_4799\nENCODING 18329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1080\n7BE0\n12A0\nFEA0\n12A0\n5EA0\n52E0\n5080\nB080\n8FE0\nENDCHAR\nSTARTCHAR U_479A\nENCODING 18330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1080\n7FE0\n1080\nFC80\n13E0\n5D40\n5080\n5140\nB220\n8FE0\nENDCHAR\nSTARTCHAR U_479B\nENCODING 18331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1080\n7EE0\n12A0\nFEA0\n13E0\n5C20\n5020\n50A0\nB040\n8FE0\nENDCHAR\nSTARTCHAR U_479C\nENCODING 18332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1080\n7C80\n1180\nFD40\n12A0\n5CA0\n5080\n5080\nB080\n8FE0\nENDCHAR\nSTARTCHAR U_479D\nENCODING 18333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n13E0\n7C80\n1080\nFFE0\n1080\n5CC0\n50A0\n53E0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_479E\nENCODING 18334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n17E0\n7AA0\n17E0\nFA80\n17E0\n5AA0\n52A0\n52C0\nB480\n8FE0\nENDCHAR\nSTARTCHAR U_479F\nENCODING 18335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1100\n7BE0\n1220\nFE20\n13E0\n5E20\n5220\n53E0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_47A0\nENCODING 18336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n13E0\n7C80\n1080\nFD00\n13E0\n5D20\n5120\n51E0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_47A1\nENCODING 18337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n1240\n7E40\n13C0\nFE40\n1240\n5BC0\n5000\n57E0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_47A2\nENCODING 18338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n7BE0\n1500\nFDE0\n1100\n5DE0\n5100\n5100\nB100\n8FE0\nENDCHAR\nSTARTCHAR U_47A3\nENCODING 18339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\n1380\n7E00\n13E0\nFE40\n12C0\n5E60\n5240\n5440\nB840\n8FE0\nENDCHAR\nSTARTCHAR U_47A4\nENCODING 18340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n13E0\n7C20\n13A0\nFEA0\n12A0\n5BA0\n5020\n50A0\nB040\n8FE0\nENDCHAR\nSTARTCHAR U_47A5\nENCODING 18341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1080\n7FE0\n1100\nFBE0\n1520\n5DE0\n5120\n51E0\nB120\n8FE0\nENDCHAR\nSTARTCHAR U_47A6\nENCODING 18342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n13E0\n7D40\n1080\nFD40\n1220\n5DC0\n5140\n51C0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_47A7\nENCODING 18343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n10E0\n7F00\n1200\nFFE0\n1200\n5FE0\n5320\n55E0\nB800\n8FE0\nENDCHAR\nSTARTCHAR U_47A8\nENCODING 18344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1080\n7DE0\n1080\nFFE0\n1080\n5DE0\n5080\n53E0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_47A9\nENCODING 18345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1180\n7A40\n1420\nFBC0\n1000\n5BC0\n5240\n53C0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_47AA\nENCODING 18346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n1400\n7DE0\n1500\nFDE0\n1540\n5D40\n5640\n57E0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_47AB\nENCODING 18347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n1140\n7FE0\n1140\nFFC0\n1200\n57C0\n5A40\n53C0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_47AC\nENCODING 18348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\n1380\n7C80\n13E0\nFDC0\n12A0\n5BE0\n5140\n5160\nB220\n8FE0\nENDCHAR\nSTARTCHAR U_47AD\nENCODING 18349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1240\n7FE0\n1240\nFE20\n13C0\n5A40\n5580\n5180\nB240\n8FE0\nENDCHAR\nSTARTCHAR U_47AE\nENCODING 18350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1140\n7A20\n17E0\nFC80\n13E0\n5C80\n52C0\n54A0\nB080\n8FE0\nENDCHAR\nSTARTCHAR U_47AF\nENCODING 18351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\n1320\n7AA0\n1140\nFDE0\n1040\n5C80\n53E0\n5080\nB080\n8FE0\nENDCHAR\nSTARTCHAR U_47B0\nENCODING 18352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n7FC0\n1100\nFFE0\n1280\n56C0\n5AA0\n5480\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_47B1\nENCODING 18353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1240\n7C20\n1180\nFE40\n1420\n5BC0\n5240\n53C0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_47B2\nENCODING 18354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n16A0\n7A80\n17E0\nFA80\n13A0\n5EA0\n5240\n52C0\nB520\n8FE0\nENDCHAR\nSTARTCHAR U_47B3\nENCODING 18355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n17E0\n7A40\n1180\nFFE0\n5000\n5BC0\n5240\n53C0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_47B4\nENCODING 18356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n12A0\n7BE0\n12A0\nFFE0\n1220\n5BA0\n52A0\n53A0\nB440\n8FE0\nENDCHAR\nSTARTCHAR U_47B5\nENCODING 18357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n13E0\n7EA0\n1140\nFEA0\n1000\n5FE0\n52A0\n5140\nB2A0\n8FE0\nENDCHAR\nSTARTCHAR U_47B6\nENCODING 18358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n12C0\n7B40\n13C0\nFE00\n13E0\n5560\n5AA0\n5520\nB240\n8FE0\nENDCHAR\nSTARTCHAR U_47B7\nENCODING 18359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1220\n7FE0\n1280\nFEA0\n13E0\n5E80\n52A0\n55E0\nB800\n8FE0\nENDCHAR\nSTARTCHAR U_47B8\nENCODING 18360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\n1000\n7BE0\n1080\nFAA0\n1480\n5BE0\n5220\n53E0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_47B9\nENCODING 18361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n11C0\n7D40\n1140\nFFE0\n1080\n5DC0\n5080\n53E0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_47BA\nENCODING 18362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n1480\n7FE0\n1480\nFDE0\n15A0\n5D60\n55A0\n55E0\nB800\n8FE0\nENDCHAR\nSTARTCHAR U_47BB\nENCODING 18363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1140\n7FE0\n12A0\nFFE0\n12A0\n5EA0\n53E0\n5120\nB220\n8FE0\nENDCHAR\nSTARTCHAR U_47BC\nENCODING 18364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\n1140\n7B80\n1080\nFFE0\n1220\n5D40\n52C0\n55A0\nB280\n8FE0\nENDCHAR\nSTARTCHAR U_47BD\nENCODING 18365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n13E0\n7C80\n17E0\nFAA0\n1140\n5FE0\n5080\n52A0\nB480\n8FE0\nENDCHAR\nSTARTCHAR U_47BE\nENCODING 18366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\n1780\n7CE0\n1480\nFFE0\n14A0\n5FC0\n5480\n5560\nBA40\n8FE0\nENDCHAR\nSTARTCHAR U_47BF\nENCODING 18367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n7FC0\n1100\nFFE0\n2480\nDF60\n1480\n1D00\n67E0\nENDCHAR\nSTARTCHAR U_47C0\nENCODING 18368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n17E0\n7880\n17E0\nF900\n17E0\n5280\n5C80\n53E0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_47C1\nENCODING 18369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n12A0\n1540\n7AA0\n13E0\nFEA0\n13E0\n5AA0\n57E0\n51C0\nB2A0\n8FE0\nENDCHAR\nSTARTCHAR U_47C2\nENCODING 18370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n1240\n7FC0\n1240\nFFE0\n5520\n5FE0\n5240\n5180\nB660\n8FE0\nENDCHAR\nSTARTCHAR U_47C3\nENCODING 18371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n13E0\n7D20\n17E0\nF880\n17E0\n5940\n56A0\n5140\nB080\n8FE0\nENDCHAR\nSTARTCHAR U_47C4\nENCODING 18372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n17E0\n7900\n17E0\nFB40\n12C0\n5B40\n52C0\n53C0\nB420\n8FE0\nENDCHAR\nSTARTCHAR U_47C5\nENCODING 18373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5500\n7DE0\n5540\nFE40\n1440\n3F80\n0400\n7FC0\n1400\nEFE0\nENDCHAR\nSTARTCHAR U_47C6\nENCODING 18374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n12A0\n7FE0\n12A0\nFFE0\n12A0\n5FE0\n52A0\n57E0\nB080\n8FE0\nENDCHAR\nSTARTCHAR U_47C7\nENCODING 18375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n12A0\n15C0\n7AA0\n17E0\nFAA0\n17E0\n5A80\n52A0\n5540\nB8A0\n87E0\nENDCHAR\nSTARTCHAR U_47C8\nENCODING 18376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n12C0\n17A0\n7A80\n17E0\nFD80\n17A0\n5AA0\n5740\n5240\nB4A0\n8FE0\nENDCHAR\nSTARTCHAR U_47C9\nENCODING 18377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n12A0\n7FE0\n1200\nFFE0\n1520\n5BA0\n5120\n53A0\nB040\n8FE0\nENDCHAR\nSTARTCHAR U_47CA\nENCODING 18378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\n1080\n7FE0\n12A0\nFFC0\n12A0\n5FE0\n5340\n55C0\nBAA0\n87E0\nENDCHAR\nSTARTCHAR U_47CB\nENCODING 18379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n1480\n7FE0\n1540\nFFE0\n1400\n5DC0\n5400\n57E0\nB940\n8FE0\nENDCHAR\nSTARTCHAR U_47CC\nENCODING 18380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n17E0\n7A40\n17E0\nFD40\n17C0\n5D60\n57C0\n5540\nB5A0\n8FE0\nENDCHAR\nSTARTCHAR U_47CD\nENCODING 18381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n13C0\n7A40\n17E0\nFAA0\n1540\n5FE0\n5100\n53C0\nB440\n8FE0\nENDCHAR\nSTARTCHAR U_47CE\nENCODING 18382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n17E0\n7A40\n17E0\nFD20\n13C0\n5B40\n52C0\n53C0\nB420\n8FE0\nENDCHAR\nSTARTCHAR U_47CF\nENCODING 18383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2BA0\nFEE0\n27C0\nFAA0\n2FE0\nB900\nA7E0\nE380\nB540\n8FE0\nENDCHAR\nSTARTCHAR U_47D0\nENCODING 18384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2540\nF7E0\n2540\nF760\n2440\n2560\nB540\nABE0\nF000\n8FE0\nENDCHAR\nSTARTCHAR U_47D1\nENCODING 18385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF440\n2BA0\nF540\n27C0\n2540\nB7C0\nA540\nE000\n9FE0\nENDCHAR\nSTARTCHAR U_47D2\nENCODING 18386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFEE0\n2280\nF5E0\n2C80\n25E0\nB480\nA5E0\nE000\n9FE0\nENDCHAR\nSTARTCHAR U_47D3\nENCODING 18387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8880\n8880\nF880\n2080\n2080\nB880\nA080\nA080\nB880\nC380\nENDCHAR\nSTARTCHAR U_47D4\nENCODING 18388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n8A00\n8A00\nFA00\n2300\n2280\nBA40\nA240\nA200\nBA00\nC200\nENDCHAR\nSTARTCHAR U_47D5\nENCODING 18389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF800\n8FE0\n8A20\nFD20\n2440\n2280\nBA80\nA100\nA280\nB440\nC820\nENDCHAR\nSTARTCHAR U_47D6\nENCODING 18390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8900\n8900\nFD20\n2520\n2520\nBD20\nA520\nA520\nBFE0\nC420\nENDCHAR\nSTARTCHAR U_47D7\nENCODING 18391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0E0\n9780\n9480\nF480\n27E0\n2480\nB480\nA480\nA4A0\nB660\nC420\nENDCHAR\nSTARTCHAR U_47D8\nENCODING 18392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n8900\n8FE0\nF800\n2380\n2280\nBAA0\nA2A0\nA2A0\nBAA0\nC460\nENDCHAR\nSTARTCHAR U_47D9\nENCODING 18393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF5E0\n94A0\n9EA0\nF4A0\n24A0\nB4A0\nA4A0\nA6A0\nB520\nC260\nENDCHAR\nSTARTCHAR U_47DA\nENCODING 18394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n8800\n8800\nFFE0\n2240\n2240\nBA40\nA240\nA240\nBA40\nC440\nENDCHAR\nSTARTCHAR U_47DB\nENCODING 18395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9FE0\n9100\nFFE0\n2920\nB920\nA920\nA920\nB940\nC100\nENDCHAR\nSTARTCHAR U_47DC\nENCODING 18396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8900\n8FE0\nFD20\n2520\n2520\nBEA0\nA460\nA420\nBC20\nC460\nENDCHAR\nSTARTCHAR U_47DD\nENCODING 18397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nF240\n9240\n9240\nF460\n2BC0\nB240\nA180\nA180\nB240\nC420\nENDCHAR\nSTARTCHAR U_47DE\nENCODING 18398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8900\n8900\nF940\n2520\n2520\nB900\nA120\nA040\nB980\nC600\nENDCHAR\nSTARTCHAR U_47DF\nENCODING 18399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1BE0\n6220\n4220\n7A20\n53E0\n5080\n5080\n5AE0\n5280\n5780\n9860\nENDCHAR\nSTARTCHAR U_47E0\nENCODING 18400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n88A0\n8880\nFFE0\n2480\n24A0\nBCC0\nA480\nA4A0\nBD60\nC620\nENDCHAR\nSTARTCHAR U_47E1\nENCODING 18401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF060\n9780\n9480\nF480\n27E0\n2480\nB480\nA4A0\nA560\nB6A0\nC4A0\nENDCHAR\nSTARTCHAR U_47E2\nENCODING 18402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9200\n93E0\nF500\n2100\n2540\nB540\nA920\nA120\nB100\nC300\nENDCHAR\nSTARTCHAR U_47E3\nENCODING 18403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n8900\n8FE0\nF900\n2180\n2380\nBB40\nA540\nA520\nB920\nC100\nENDCHAR\nSTARTCHAR U_47E4\nENCODING 18404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n88A0\n8A20\nFA40\n2240\n2680\nBB20\nA220\nA600\nBA20\nC1C0\nENDCHAR\nSTARTCHAR U_47E5\nENCODING 18405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n8880\n8A80\nF900\n27E0\n2120\nBB40\nA300\nA500\nB900\nC300\nENDCHAR\nSTARTCHAR U_47E6\nENCODING 18406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00E0\nF700\n9100\n9FE0\nF100\n2100\nB3E0\nA2A0\nA2A0\nB440\nC9A0\nENDCHAR\nSTARTCHAR U_47E7\nENCODING 18407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF000\n97E0\n9520\nF520\n2520\n27E0\nB520\nA520\nA520\nB7E0\nC420\nENDCHAR\nSTARTCHAR U_47E8\nENCODING 18408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\n9420\nF7E0\n2480\n27E0\nB480\nA4A0\nA4A0\nB660\nC420\nENDCHAR\nSTARTCHAR U_47E9\nENCODING 18409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8900\n8FC0\nF900\n2100\n27E0\nB900\nA200\nA440\nBFA0\nC420\nENDCHAR\nSTARTCHAR U_47EA\nENCODING 18410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8E0\n8F00\n8900\nF880\n27E0\n2040\nB880\nA100\nA200\nB600\nC9E0\nENDCHAR\nSTARTCHAR U_47EB\nENCODING 18411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\n7FE0\n8020\n3F80\n2080\n3F80\n0400\n27C0\n3C00\nC7E0\nENDCHAR\nSTARTCHAR U_47EC\nENCODING 18412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF000\n91C0\n9600\nF400\n27C0\n2480\nB480\nA480\nA480\nB480\nCFE0\nENDCHAR\nSTARTCHAR U_47ED\nENCODING 18413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n8A00\n8BE0\nFD00\n2100\n21E0\nB900\nA100\nA1E0\nB900\nC100\nENDCHAR\nSTARTCHAR U_47EE\nENCODING 18414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF2C0\n92A0\n9480\nF7E0\n2C80\nB480\nA540\nA540\nB640\nC620\nENDCHAR\nSTARTCHAR U_47EF\nENCODING 18415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8C0\n8F00\n8900\nF900\n27E0\n2100\nB900\nA7C0\nA440\nBC40\nC7C0\nENDCHAR\nSTARTCHAR U_47F0\nENCODING 18416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n92E0\n9500\nF200\n27E0\n2A40\nB240\nA240\nA240\nB240\nC2C0\nENDCHAR\nSTARTCHAR U_47F1\nENCODING 18417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97E0\n9100\nF7E0\n2520\n2560\nB100\nA380\nA540\nB920\nC100\nENDCHAR\nSTARTCHAR U_47F2\nENCODING 18418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n97E0\n9100\nF240\n27E0\n22A0\nB280\nA280\nA2A0\nB2A0\nC4E0\nENDCHAR\nSTARTCHAR U_47F3\nENCODING 18419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n4DA0\n7B60\n1360\n5DA0\n5120\n55A0\n7240\n9000\n8FE0\nENDCHAR\nSTARTCHAR U_47F4\nENCODING 18420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9400\n95C0\nF400\n27E0\n2540\nB560\nA540\nA540\nB5A0\nC520\nENDCHAR\nSTARTCHAR U_47F5\nENCODING 18421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF140\n9120\n9FE0\nF100\n2920\n2540\nB380\nA540\nA920\nB100\nC300\nENDCHAR\nSTARTCHAR U_47F6\nENCODING 18422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9540\n9540\nF540\n2BA0\n2100\nB7C0\nA100\nA100\nB900\nC7E0\nENDCHAR\nSTARTCHAR U_47F7\nENCODING 18423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF460\n9580\n9F00\nF5E0\n2540\n2740\nB540\nAD40\nA540\nB640\nCA40\nENDCHAR\nSTARTCHAR U_47F8\nENCODING 18424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n93E0\n9540\nFA80\n2300\n2C80\nB280\nA7E0\nA280\nB280\nC480\nENDCHAR\nSTARTCHAR U_47F9\nENCODING 18425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0E0\n9700\n9020\nF540\n2280\n27E0\nB080\nA480\nA280\nB080\nC180\nENDCHAR\nSTARTCHAR U_47FA\nENCODING 18426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\n8BE0\nFA20\n23E0\n2220\nBBE0\nA000\nA140\nB940\nC220\nENDCHAR\nSTARTCHAR U_47FB\nENCODING 18427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9280\n9440\nFBA0\n2100\n27C0\nB100\nA540\nA920\nB100\nC300\nENDCHAR\nSTARTCHAR U_47FC\nENCODING 18428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF040\n9760\n9040\nF7E0\n2040\n2140\nB5C0\nA540\nA540\nB5E0\nCE20\nENDCHAR\nSTARTCHAR U_47FD\nENCODING 18429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9100\nF200\n2440\n2FE0\nB560\nA540\nA540\nB540\nC960\nENDCHAR\nSTARTCHAR U_47FE\nENCODING 18430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9120\n95A0\nF240\n25A0\n2000\nB7E0\nA120\nA5A0\nB240\nC5A0\nENDCHAR\nSTARTCHAR U_47FF\nENCODING 18431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9040\n97C0\nF040\n2FE0\n2100\nB540\nA380\nA540\nB120\nC600\nENDCHAR\nSTARTCHAR U_4800\nENCODING 18432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF540\n9380\n9100\nFFE0\n2820\n3BA0\nAAA0\nABA0\nB820\nC860\nENDCHAR\nSTARTCHAR U_4801\nENCODING 18433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\nF240\n97E0\n9240\nF5A0\n2FE0\n3800\nA7C0\nA000\nB000\nCFE0\nENDCHAR\nSTARTCHAR U_4802\nENCODING 18434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n71C0\nAAA0\nA480\n1F00\n1100\n5F00\n4400\n6700\n9FE0\nENDCHAR\nSTARTCHAR U_4803\nENCODING 18435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF100\n9100\n9FE0\nF920\n2DA0\n2B60\nBB60\nADA0\nB920\nC960\nENDCHAR\nSTARTCHAR U_4804\nENCODING 18436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n97C0\n9540\nF7C0\n2540\n3FE0\nA000\nA480\nF440\n8840\nENDCHAR\nSTARTCHAR U_4805\nENCODING 18437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n94A0\n9720\nF520\n27E0\nA520\nBDA0\nA760\nA520\nFD20\n87E0\nENDCHAR\nSTARTCHAR U_4806\nENCODING 18438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9400\n97C0\nF400\n2FE0\nA500\nBD20\nA540\nAC80\nF440\n0620\nENDCHAR\nSTARTCHAR U_4807\nENCODING 18439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\n97E0\nF480\n26A0\nA6A0\nB7E0\nA480\nA6A0\nFAA0\n8BE0\nENDCHAR\nSTARTCHAR U_4808\nENCODING 18440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\n9140\nFFE0\n2140\nA7C0\nB920\nA540\nAB80\nB540\nC920\nENDCHAR\nSTARTCHAR U_4809\nENCODING 18441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0100\nF7E0\n9820\n97C0\nF440\n27C0\n3400\nA7C0\nB440\nC7C0\nENDCHAR\nSTARTCHAR U_480A\nENCODING 18442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n9EE0\n9280\nF280\n2EE0\nB280\nA280\nAEE0\nF280\n8480\nENDCHAR\nSTARTCHAR U_480B\nENCODING 18443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9540\n97C0\nF540\n27C0\nB200\nA500\nAFE0\nB100\nC100\nENDCHAR\nSTARTCHAR U_480C\nENCODING 18444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF540\n9380\n9540\nFB20\n27C0\n2440\nB7C0\nA440\nA7C0\nBC40\nC4C0\nENDCHAR\nSTARTCHAR U_480D\nENCODING 18445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9520\n9520\nF7E0\n2400\n27E0\nB4A0\nA740\nA440\nF7A0\n8520\nENDCHAR\nSTARTCHAR U_480E\nENCODING 18446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\n97E0\nF400\n27E0\n2540\nB7E0\nA480\nA5C0\nF480\n8BE0\nENDCHAR\nSTARTCHAR U_480F\nENCODING 18447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEA0\n92C0\n96A0\n92C0\nF440\n2BA0\nB100\nAFE0\nA280\nB440\nC820\nENDCHAR\nSTARTCHAR U_4810\nENCODING 18448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n97C0\nF440\n27C0\n2440\nB7C0\nA120\nA7E0\nB280\nE440\nENDCHAR\nSTARTCHAR U_4811\nENCODING 18449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA280\nA540\nEFE0\n2100\n2FE0\nB100\nA7C0\nB100\nCFE0\nENDCHAR\nSTARTCHAR U_4812\nENCODING 18450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE400\nA4E0\nA4A0\nFFA0\n24E0\n2EA0\nBAA0\nAAE0\nAEA0\nB0A0\nC120\nENDCHAR\nSTARTCHAR U_4813\nENCODING 18451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nF280\n9FE0\n9280\nFFE0\n2AA0\n2EE0\nB820\nABA0\nB820\nCFE0\nENDCHAR\nSTARTCHAR U_4814\nENCODING 18452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF440\n9280\n9FE0\nF100\n2320\n25C0\nB280\nA580\nA2C0\nB4A0\nCB20\nENDCHAR\nSTARTCHAR U_4815\nENCODING 18453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nE240\nAB60\nAA40\nEF60\n2100\nB7C0\nA100\nA380\nB540\nC920\nENDCHAR\nSTARTCHAR U_4816\nENCODING 18454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEBE0\nA220\nE480\n2880\n2B60\nB000\nA7E0\nA420\nB420\nC7E0\nENDCHAR\nSTARTCHAR U_4817\nENCODING 18455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF7C0\n9540\n96C0\nF540\n27C0\nB120\nAFE0\nA280\nB440\nC820\nENDCHAR\nSTARTCHAR U_4818\nENCODING 18456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n9660\n95A0\nF5A0\n2660\nB7E0\nA480\nA6E0\nB480\nC6E0\nENDCHAR\nSTARTCHAR U_4819\nENCODING 18457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA440\nA280\nEFE0\n2920\nB7C0\nA200\nA3C0\nBA40\nC440\nENDCHAR\nSTARTCHAR U_481A\nENCODING 18458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA820\nA280\nEC60\n2380\nB540\nA540\nA540\nB520\nCBA0\nENDCHAR\nSTARTCHAR U_481B\nENCODING 18459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE7C0\nAA80\nA100\nEA00\n27C0\nB900\nA7C0\nA100\nB540\nC7C0\nENDCHAR\nSTARTCHAR U_481C\nENCODING 18460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFEE0\n9440\n9FE0\nF240\n23C0\nB240\nA3C0\nA240\nB7E0\nC040\nENDCHAR\nSTARTCHAR U_481D\nENCODING 18461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n9240\n97E0\nF420\n27E0\n2420\nB7E0\nA420\nA7E0\nB240\nC420\nENDCHAR\nSTARTCHAR U_481E\nENCODING 18462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00A0\nE080\nAFE0\nAA80\nEB80\n2AA0\nBFA0\nAA40\nAF40\nBA40\nD0A0\nENDCHAR\nSTARTCHAR U_481F\nENCODING 18463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n23C0\nF940\n5340\nF9C0\n2260\n7F80\n2080\n3F80\n4900\nBFE0\nENDCHAR\nSTARTCHAR U_4820\nENCODING 18464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\nFFE0\n4A40\nFFE0\n8420\n3F80\n3580\n2A80\n3FC0\n4400\nBFE0\nENDCHAR\nSTARTCHAR U_4821\nENCODING 18465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00E0\nE080\nAFE0\nA900\nEBC0\n29C0\nB800\nABC0\nAAC0\nBB40\nD7E0\nENDCHAR\nSTARTCHAR U_4822\nENCODING 18466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\n5140\n7FC0\n0000\nFFE0\n8020\n3F80\n2080\n3FC0\n4400\nBFE0\nENDCHAR\nSTARTCHAR U_4823\nENCODING 18467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nAEE0\nE880\n2EE0\n2280\nBFE0\nA280\nAFE0\nB240\nC420\nENDCHAR\nSTARTCHAR U_4824\nENCODING 18468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nAEE0\nE000\n27C0\n26C0\nB540\nA7C0\nA100\nBFE0\nC100\nENDCHAR\nSTARTCHAR U_4825\nENCODING 18469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE440\nB540\nAE80\nE4E0\n5F20\n55A0\nF5A0\nDF40\nD540\nF540\n95A0\nENDCHAR\nSTARTCHAR U_4826\nENCODING 18470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nEFE0\nB2A0\nAFA0\nE2E0\n2500\nB7C0\nA440\nA7C0\nB440\nC7C0\nENDCHAR\nSTARTCHAR U_4827\nENCODING 18471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\n97E0\nF480\n25C0\n24A0\nB7E0\nA520\nA7E0\nB520\nC9E0\nENDCHAR\nSTARTCHAR U_4828\nENCODING 18472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE3C0\nA480\nAFE0\nE540\n27E0\n2400\nB5E0\nA400\nA5E0\nB520\nC9E0\nENDCHAR\nSTARTCHAR U_4829\nENCODING 18473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE480\nAFE0\nA080\nEFE0\n2880\n2FA0\nBAA0\nAE40\nAB40\nAA40\nD4A0\nENDCHAR\nSTARTCHAR U_482A\nENCODING 18474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nEA40\nADA0\nAA40\nEDA0\n2FE0\nBA40\nADA0\nAA40\nBDA0\nCFE0\nENDCHAR\nSTARTCHAR U_482B\nENCODING 18475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEF00\nA5E0\nA7A0\nE540\n2740\n2DA0\nB000\nAFE0\nA520\nA940\nD5A0\nENDCHAR\nSTARTCHAR U_482C\nENCODING 18476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nDD60\nAAA0\nBBA0\nEAC0\n31A0\n2EA0\nB0A0\nAEA0\nAAC0\nB580\nCE80\nENDCHAR\nSTARTCHAR U_482D\nENCODING 18477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nE4E0\nAF20\nA4E0\nEEA0\n2AE0\n2EA0\nB4E0\nAEA0\nB5E0\nA4A0\nC520\nENDCHAR\nSTARTCHAR U_482E\nENCODING 18478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE540\nAFE0\nA200\nEFE0\n2480\nAFE0\nBD40\nAA80\nAFE0\nD020\nAAA0\nENDCHAR\nSTARTCHAR U_482F\nENCODING 18479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE300\nA480\nAB40\nE000\n2FE0\n2AA0\nB540\nAFE0\nAAA0\nBFE0\nCAA0\nENDCHAR\nSTARTCHAR U_4830\nENCODING 18480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n9280\n97C0\nF540\n26C0\n23E0\nBC80\nA7E0\nB480\nC7E0\nENDCHAR\nSTARTCHAR U_4831\nENCODING 18481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\n97E0\nF540\n27E0\n24A0\nB7E0\nA520\nB7E0\nE520\n8BC0\nENDCHAR\nSTARTCHAR U_4832\nENCODING 18482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7280\n5440\n7820\n5380\n7000\n57C0\nF040\n5280\n9100\n3100\nENDCHAR\nSTARTCHAR U_4833\nENCODING 18483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7520\n5520\n7520\n57E0\n7100\n5520\nF520\n5520\n97E0\n3420\nENDCHAR\nSTARTCHAR U_4834\nENCODING 18484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7080\n57E0\n7000\n5420\n7420\n5220\nF240\n5240\n9000\n37E0\nENDCHAR\nSTARTCHAR U_4835\nENCODING 18485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n7240\n5440\n77E0\n5440\n7E40\n5540\nF440\n5440\n9440\n34C0\nENDCHAR\nSTARTCHAR U_4836\nENCODING 18486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7200\n53E0\n7480\n5880\n77E0\n5880\nF140\n3140\n5220\nB420\nENDCHAR\nSTARTCHAR U_4837\nENCODING 18487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n7280\n5AA0\n76C0\n5280\n72C0\n56A0\nFA80\n32A0\n52A0\nB4E0\nENDCHAR\nSTARTCHAR U_4838\nENCODING 18488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n5280\n7440\n5BA0\n7000\n57C0\nF200\n57C0\n9040\n3180\nENDCHAR\nSTARTCHAR U_4839\nENCODING 18489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7FE0\n4900\n7A00\n4A40\n7980\n4920\nFE40\n2880\n4940\n9E20\nENDCHAR\nSTARTCHAR U_483A\nENCODING 18490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\nE3E0\nA820\nE820\nABA0\nEAA0\nBAA0\nEBA0\n6AA0\nA820\n6860\nENDCHAR\nSTARTCHAR U_483B\nENCODING 18491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n77E0\n5AA0\n7440\n57C0\n7040\n53C0\nF400\n57E0\n9020\n33C0\nENDCHAR\nSTARTCHAR U_483C\nENCODING 18492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nE280\nA440\nFBA0\nAE20\nEAA0\nBEA0\nEAA0\n6EA0\nAA20\n6A60\nENDCHAR\nSTARTCHAR U_483D\nENCODING 18493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7540\n57C0\n7000\n5FE0\n7000\n57C0\nD440\n37C0\n5280\n9FE0\nENDCHAR\nSTARTCHAR U_483E\nENCODING 18494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\nEAA0\nAEE0\nEAA0\nAEE0\nE920\nB920\nEAA0\n6C60\nA820\n6860\nENDCHAR\nSTARTCHAR U_483F\nENCODING 18495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n77C0\n5540\n77C0\n5100\n7FE0\n5440\nF7C0\n5440\n97C0\n3820\nENDCHAR\nSTARTCHAR U_4840\nENCODING 18496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nEFE0\nA000\nEFE0\nA920\nEAA0\nAFE0\nF440\n27C0\n6440\nAFE0\nENDCHAR\nSTARTCHAR U_4841\nENCODING 18497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\nDF80\nAAE0\nFF20\nA0E0\nEE80\nAAE0\nEE80\n3AE0\n6E80\nAAE0\nENDCHAR\nSTARTCHAR U_4842\nENCODING 18498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFA40\n2240\nFA40\nAA40\nFA40\nAA40\nFBC0\n2040\nF840\n2040\nENDCHAR\nSTARTCHAR U_4843\nENCODING 18499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nF900\n2100\nFBE0\nA920\nF920\nA920\nF920\n2220\nFA20\n24C0\nENDCHAR\nSTARTCHAR U_4844\nENCODING 18500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFB80\n2280\nFA80\nAA80\nFA80\nAA80\nFA80\n22A0\nFAA0\n24E0\nENDCHAR\nSTARTCHAR U_4845\nENCODING 18501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\nFA20\n22A0\nFAA0\nAAA0\nFAA0\nAAA0\nFAA0\n22A0\nFA20\n2420\nENDCHAR\nSTARTCHAR U_4846\nENCODING 18502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nF940\n2140\nF940\nAA20\nFAA0\nAC80\nF900\n2240\nFBE0\n2020\nENDCHAR\nSTARTCHAR U_4847\nENCODING 18503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBC0\n2000\nF800\nAFE0\nFA80\nAA80\nFA80\n2280\nFC80\n2460\nENDCHAR\nSTARTCHAR U_4848\nENCODING 18504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\nF940\n2080\nF940\nAA20\nF800\nAA20\nF940\n2080\nF940\n2220\nENDCHAR\nSTARTCHAR U_4849\nENCODING 18505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF880\n27E0\nF800\nABC0\nFA40\nAA40\nFA40\n2240\nFA40\n2420\nENDCHAR\nSTARTCHAR U_484A\nENCODING 18506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nFB80\n2200\nFA00\nABE0\nFAA0\nAAA0\nFAA0\n2240\nFCA0\n2920\nENDCHAR\nSTARTCHAR U_484B\nENCODING 18507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n23E0\nF880\nA880\nFBE0\nAA20\nF940\n2080\nF940\n2220\nENDCHAR\nSTARTCHAR U_484C\nENCODING 18508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n27E0\nF900\nA940\nFA40\nAA80\nFC80\n2120\nFBE0\n2020\nENDCHAR\nSTARTCHAR U_484D\nENCODING 18509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n23E0\nF880\nA880\nFBE0\nA880\nF940\n2140\nFA20\n2220\nENDCHAR\nSTARTCHAR U_484E\nENCODING 18510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nFB80\n2200\nFBE0\nAA20\nFA20\nABE0\nFA00\n2200\nFC00\n2400\nENDCHAR\nSTARTCHAR U_484F\nENCODING 18511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2740\nF940\n2140\nFB40\nAC40\nF840\nAE40\nFAA0\n22A0\nFBE0\n2620\nENDCHAR\nSTARTCHAR U_4850\nENCODING 18512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF880\n23E0\nFA20\nA800\nF900\nA920\nF9C0\n2100\nF920\n20E0\nENDCHAR\nSTARTCHAR U_4851\nENCODING 18513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n2220\nFA20\nABE0\nFA80\nAA80\nFBE0\n2280\nFA40\n2320\nENDCHAR\nSTARTCHAR U_4852\nENCODING 18514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n22A0\nFAA0\nAAA0\nFBE0\nAAA0\nFAA0\n22A0\nFBE0\n2000\nENDCHAR\nSTARTCHAR U_4853\nENCODING 18515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n3F60\n4400\n9F00\n35E0\n5F40\nD540\n5F40\n4440\n5F40\n44C0\nENDCHAR\nSTARTCHAR U_4854\nENCODING 18516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFBC0\n2440\nFA80\nA900\nFA80\nA9E0\nFA20\n2140\nF880\n2300\nENDCHAR\nSTARTCHAR U_4855\nENCODING 18517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF840\n2080\nF8A0\nAEC0\nFAA0\nAAA0\nFAA0\n2480\nF800\n23E0\nENDCHAR\nSTARTCHAR U_4856\nENCODING 18518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF800\n2140\nFA20\nAC80\nF880\nABE0\nF880\n2080\nF880\n23E0\nENDCHAR\nSTARTCHAR U_4857\nENCODING 18519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n2240\n3740\nC260\n0400\nFFE0\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_4858\nENCODING 18520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFBE0\n2420\nF820\nAFA0\nFAA0\nAFA0\nFAA0\n27A0\nF820\n2040\nENDCHAR\nSTARTCHAR U_4859\nENCODING 18521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2220\nFBE0\nAA20\nFBE0\nAA80\nFAA0\n2240\nFA40\n2320\nENDCHAR\nSTARTCHAR U_485A\nENCODING 18522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF900\n23E0\nFA20\nABE0\nFA20\nABE0\nF940\n2140\nFA40\n2460\nENDCHAR\nSTARTCHAR U_485B\nENCODING 18523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFBE0\nAAA0\nFBE0\nAAA0\nFBE0\n2080\nFBE0\n2080\nENDCHAR\nSTARTCHAR U_485C\nENCODING 18524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFBE0\nA940\nFA40\nAC60\nF880\n23E0\nF880\n23E0\nENDCHAR\nSTARTCHAR U_485D\nENCODING 18525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2420\nFA00\nABE0\nFAA0\nA8A0\nFAA0\n2140\nFA40\n2460\nENDCHAR\nSTARTCHAR U_485E\nENCODING 18526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2880\n2480\nFFE0\n2480\n7FC0\n9520\n1F00\n1500\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_485F\nENCODING 18527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF900\n23E0\nFAA0\nABE0\nFAA0\nABE0\nF940\n2240\nFBE0\n2040\nENDCHAR\nSTARTCHAR U_4860\nENCODING 18528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\nF880\n23E0\nFA20\nABE0\nFA20\nABE0\nFA20\n23E0\nF940\n2220\nENDCHAR\nSTARTCHAR U_4861\nENCODING 18529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nFBE0\n2280\nFBA0\nAA60\nF900\nABE0\nFA20\n23E0\nFA20\n23E0\nENDCHAR\nSTARTCHAR U_4862\nENCODING 18530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\nFA00\n23E0\nFA20\nABE0\nFA00\nABE0\nFAA0\n23E0\nFAA0\n2460\nENDCHAR\nSTARTCHAR U_4863\nENCODING 18531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA20\n2080\nFBE0\nAAA0\nFBE0\nAAA0\nFBE0\n2080\nFBE0\n2080\nENDCHAR\nSTARTCHAR U_4864\nENCODING 18532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0420\n3F40\n0480\nFFE0\n3480\n5280\nFFE0\n4E40\n5540\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_4865\nENCODING 18533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n2440\nFA80\nAC40\nF980\nAA40\nFFE0\n2240\nFA40\n23C0\nENDCHAR\nSTARTCHAR U_4866\nENCODING 18534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF940\n2080\nFFE0\nAAA0\nFB40\nACA0\nF880\n27E0\nFAC0\n24A0\nENDCHAR\nSTARTCHAR U_4867\nENCODING 18535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBE0\n2220\nFBE0\nAA00\nFBE0\nAA00\nFBE0\n2020\nFAA0\n2060\nENDCHAR\nSTARTCHAR U_4868\nENCODING 18536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n0400\n7FC0\n2200\n5FC0\n8400\nFFE0\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_4869\nENCODING 18537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFBE0\nAA20\nFBA0\nAAE0\nFA20\n27E0\nF940\n2220\nENDCHAR\nSTARTCHAR U_486A\nENCODING 18538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\nFA00\n23E0\nFA20\nABE0\nFA00\nABE0\nFAA0\n23E0\nFAA0\n25E0\nENDCHAR\nSTARTCHAR U_486B\nENCODING 18539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nFD20\n22A0\nFE40\nAAA0\nFB40\nAAE0\nFA40\n22E0\nFA40\n25E0\nENDCHAR\nSTARTCHAR U_486C\nENCODING 18540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n23C0\nFA40\nAFE0\nFAA0\nAFE0\nFBC0\n2240\nF980\n2660\nENDCHAR\nSTARTCHAR U_486D\nENCODING 18541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nFFE0\n2080\nFBE0\nA880\nFFE0\nABC0\nFD40\n27C0\nF940\n27E0\nENDCHAR\nSTARTCHAR U_486E\nENCODING 18542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\nFAA0\n24A0\nF940\nAA00\nFA40\nAEC0\nFAE0\n22C0\nFAC0\n2360\nENDCHAR\nSTARTCHAR U_486F\nENCODING 18543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n26A0\nFD60\nACA0\nFFE0\nA900\nFAA0\n2620\nFA40\n23C0\nENDCHAR\nSTARTCHAR U_4870\nENCODING 18544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFD40\n1220\n7DC0\n5540\nFFE0\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_4871\nENCODING 18545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA00\n22E0\nFAA0\nAAE0\nFA00\nABE0\nFAA0\n23E0\nFE00\n23E0\nENDCHAR\nSTARTCHAR U_4872\nENCODING 18546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFAA0\n23E0\nF800\nABE0\nFAA0\nABE0\nFAA0\n27E0\nF880\n2080\nENDCHAR\nSTARTCHAR U_4873\nENCODING 18547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFAA0\n27C0\nFA80\nABE0\nFAA0\nABA0\nFAA0\n27A0\nFAA0\n24A0\nENDCHAR\nSTARTCHAR U_4874\nENCODING 18548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2140\nFFE0\nA800\nFBE0\nAAE0\nFBA0\n27E0\nF880\n27E0\nENDCHAR\nSTARTCHAR U_4875\nENCODING 18549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\nFBE0\n2680\nFAC0\nAB60\nFEC0\nAB60\nFAC0\n2340\nFAC0\n25E0\nENDCHAR\nSTARTCHAR U_4876\nENCODING 18550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2740\nFDE0\n2500\nFDA0\nAF40\nFCE0\nAF40\nFDE0\n2540\nFD40\n2F40\nENDCHAR\nSTARTCHAR U_4877\nENCODING 18551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFFE0\n2240\nF880\nABE0\nF880\nAFE0\nFA00\n27E0\nFAA0\n2FE0\nENDCHAR\nSTARTCHAR U_4878\nENCODING 18552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nFBE0\n2140\nFBE0\nAAA0\nFBE0\nA880\nFBE0\n22A0\nFA40\n23A0\nENDCHAR\nSTARTCHAR U_4879\nENCODING 18553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFFE0\nABE0\nFAA0\nABE0\nF880\n22C0\nFA80\n25E0\nENDCHAR\nSTARTCHAR U_487A\nENCODING 18554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFFE0\n2240\nFBC0\nA840\nFFE0\nA840\nFBC0\n2080\nFB60\n25C0\nENDCHAR\nSTARTCHAR U_487B\nENCODING 18555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n2240\nFBC0\nAA40\nFFE0\nAD40\nFA20\n27C0\nFA40\n24C0\nENDCHAR\nSTARTCHAR U_487C\nENCODING 18556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF880\n27E0\nFCA0\nAAA0\nF940\nAA20\nFFE0\n25A0\nFDA0\n27E0\nENDCHAR\nSTARTCHAR U_487D\nENCODING 18557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFFE0\n2240\nFFE0\nAA40\nFDA0\nABC0\nFA40\n23C0\nFA40\n2660\nENDCHAR\nSTARTCHAR U_487E\nENCODING 18558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFFC0\n2A60\nFF40\nAAE0\nFF40\nA940\nFF40\n2B60\nFDA0\n2B20\nENDCHAR\nSTARTCHAR U_487F\nENCODING 18559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nF100\n2FE0\nF920\nAFE0\nFAA0\nAFE0\nFD40\n2BA0\nF100\n2FE0\nENDCHAR\nSTARTCHAR U_4880\nENCODING 18560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nF200\n47E0\nA800\nA7C0\nF040\n2080\n3100\n6200\nA420\n27E0\nENDCHAR\nSTARTCHAR U_4881\nENCODING 18561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nF7C0\n4440\nA440\nA740\nF440\n2740\n3440\n6440\nA9C0\n3080\nENDCHAR\nSTARTCHAR U_4882\nENCODING 18562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nF100\n4FE0\n8000\nA440\nF440\n2280\n3280\n6100\nAFE0\n2000\nENDCHAR\nSTARTCHAR U_4883\nENCODING 18563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4FE0\n7A80\n47E0\nB900\nAFE0\n3940\n0080\n0900\n0600\nF9E0\nENDCHAR\nSTARTCHAR U_4884\nENCODING 18564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF7E0\n0280\nF7E0\n9100\nF7E0\n2100\nFFE0\n2100\n7380\nAD60\nENDCHAR\nSTARTCHAR U_4885\nENCODING 18565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BC0\n4040\n7BC0\n4040\n7FE0\n4000\n5FC0\n4000\n7FE0\n5240\n99E0\nENDCHAR\nSTARTCHAR U_4886\nENCODING 18566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8400\n8DC0\n7400\n57E0\n5540\n55A0\n5440\n5FE0\n9540\n88C0\nENDCHAR\nSTARTCHAR U_4887\nENCODING 18567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2400\nFDC0\n8400\n7FE0\n55A0\n5540\n5520\n57E0\n9940\n88C0\nENDCHAR\nSTARTCHAR U_4888\nENCODING 18568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4000\n7FC0\n5280\n91C0\n1F00\nF5E0\n2E80\n3F80\n1500\n1F00\nENDCHAR\nSTARTCHAR U_4889\nENCODING 18569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24C0\n5F40\n7BC0\n5540\n7FC0\n4000\n7FC0\n4000\n7FE0\n5280\n99C0\nENDCHAR\nSTARTCHAR U_488A\nENCODING 18570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2040\n2080\n07E0\nF080\n2080\n2080\n2280\n2100\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_488B\nENCODING 18571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2000\n2FE0\n0240\nF240\n2240\n2240\n2440\n2840\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_488C\nENCODING 18572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n2FE0\n0100\nF7C0\n2540\n2540\n2540\n25C0\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_488D\nENCODING 18573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n2FE0\n0200\nF3C0\n2240\n2440\n2840\n2180\n5800\n87E0\nENDCHAR\nSTARTCHAR U_488E\nENCODING 18574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\n2280\n0280\nF7E0\n2280\n2280\n2480\n2880\n5C00\n83E0\nENDCHAR\nSTARTCHAR U_488F\nENCODING 18575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2080\n2280\n0180\nF480\n22E0\n2F80\n2080\n2080\n3080\nCFE0\nENDCHAR\nSTARTCHAR U_4890\nENCODING 18576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F80\n8880\n4880\n0F80\nC880\n4F80\n4880\n4880\n5FE0\nA000\n9FE0\nENDCHAR\nSTARTCHAR U_4891\nENCODING 18577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2680\n2480\n07E0\nF480\n2480\n24A0\n2560\n26A0\n3800\nC7E0\nENDCHAR\nSTARTCHAR U_4892\nENCODING 18578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n2FE0\n0440\nEC60\n2280\n2100\n2280\n2460\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_4893\nENCODING 18579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n2820\n07C0\nF100\n2FE0\n2100\n2100\n2300\n5800\n87E0\nENDCHAR\nSTARTCHAR U_4894\nENCODING 18580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\n2440\n0BA0\nE000\n27C0\n2440\n2440\n27C0\n5800\n87E0\nENDCHAR\nSTARTCHAR U_4895\nENCODING 18581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n20A0\n27E0\n0480\nF780\n24A0\n24C0\n24E0\n2B20\n5800\n87E0\nENDCHAR\nSTARTCHAR U_4896\nENCODING 18582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n2140\n0FE0\nF140\n27C0\n2100\n2FE0\n2100\n5900\n87E0\nENDCHAR\nSTARTCHAR U_4897\nENCODING 18583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2280\n2FE0\n0AA0\nFAA0\n2FE0\n2AA0\n2AA0\n2FE0\n3800\nC7E0\nENDCHAR\nSTARTCHAR U_4898\nENCODING 18584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n28A0\n0080\nF7C0\n2880\n2480\n2080\n2180\n5800\n87E0\nENDCHAR\nSTARTCHAR U_4899\nENCODING 18585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\n2440\n07C0\nF440\n27C0\n2440\n27C0\n2820\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_489A\nENCODING 18586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n27C0\n0540\nF7C0\n2540\n27C0\n2500\n2380\n5C60\n87E0\nENDCHAR\nSTARTCHAR U_489B\nENCODING 18587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\n2AA0\n0C60\nFBA0\n2AA0\n2AA0\n2BA0\n2860\n7800\n87E0\nENDCHAR\nSTARTCHAR U_489C\nENCODING 18588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2040\n27C0\n0040\nFFE0\n2920\n27C0\n2540\n25C0\n3900\nC7E0\nENDCHAR\nSTARTCHAR U_489D\nENCODING 18589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2280\n2280\n0EE0\nE820\n2EE0\n2280\n2280\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_489E\nENCODING 18590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\n3FE0\n0480\nF480\n2DC0\n36A0\n2480\n2480\n5800\n87E0\nENDCHAR\nSTARTCHAR U_489F\nENCODING 18591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2480\n3EE0\n09A0\nEEA0\n2AA0\n2A40\n2AA0\n3520\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_48A0\nENCODING 18592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\n2520\n2940\n0280\nEC60\n2240\n2FE0\n2240\n2440\n5840\n8FE0\nENDCHAR\nSTARTCHAR U_48A1\nENCODING 18593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2FE0\n2540\n07E0\nF100\n2FE0\n2380\n2540\n2920\n3800\nC7E0\nENDCHAR\nSTARTCHAR U_48A2\nENCODING 18594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n2540\n2FE0\n0440\nF7C0\n2440\n2FE0\n3420\n27E0\n3800\nC7E0\nENDCHAR\nSTARTCHAR U_48A3\nENCODING 18595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n27C0\n2240\n0F80\nF100\n2FE0\n2500\n2280\n27C0\n7440\n8FE0\nENDCHAR\nSTARTCHAR U_48A4\nENCODING 18596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n46C0\n2CA0\n2480\n1FE0\nE480\n2DC0\n36A0\n2480\n2480\n3C80\nC7E0\nENDCHAR\nSTARTCHAR U_48A5\nENCODING 18597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n25C0\n0500\nFFE0\n2540\n26C0\n2540\n27C0\n3800\nC7E0\nENDCHAR\nSTARTCHAR U_48A6\nENCODING 18598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n2AA0\n07C0\nEAA0\n2FE0\n2100\n2FE0\n2100\n3900\nC7E0\nENDCHAR\nSTARTCHAR U_48A7\nENCODING 18599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n2660\n0BA0\nF540\n2A20\n2180\n2640\n2180\n3A00\nC7E0\nENDCHAR\nSTARTCHAR U_48A8\nENCODING 18600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2940\n36A0\n0800\nFA80\n2AE0\n2A80\n2B80\n2CE0\n7800\n87E0\nENDCHAR\nSTARTCHAR U_48A9\nENCODING 18601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E80\n2880\n3EE0\n0BA0\nEAA0\n3FA0\n2A40\n2AA0\n2F20\n7800\n87E0\nENDCHAR\nSTARTCHAR U_48AA\nENCODING 18602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2200\n2FE0\n0480\nFFC0\n24A0\n2FC0\n2940\n2F40\n7840\n87E0\nENDCHAR\nSTARTCHAR U_48AB\nENCODING 18603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E80\n2BE0\n2C80\n0BE0\nFA40\n2BE0\n2D20\n29E0\n2920\n7800\n87E0\nENDCHAR\nSTARTCHAR U_48AC\nENCODING 18604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2E40\n2A80\n0FE0\nF4A0\n2FC0\n3A80\n27E0\n2480\n3880\nC7E0\nENDCHAR\nSTARTCHAR U_48AD\nENCODING 18605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2FE0\n2100\n07C0\nF100\n2FE0\n24A0\n22C0\n2D20\nF800\n07E0\nENDCHAR\nSTARTCHAR U_48AE\nENCODING 18606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\n27E0\n0D60\nF380\n2540\n27C0\n2540\n27C0\n7800\n87E0\nENDCHAR\nSTARTCHAR U_48AF\nENCODING 18607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2380\n2D60\n0380\nFC60\n27C0\n2A80\n27E0\n2480\n7880\n87E0\nENDCHAR\nSTARTCHAR U_48B0\nENCODING 18608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3DE0\n94A0\n4C60\n14A0\nFFE0\n4900\n4FC0\n4900\n4FC0\n6900\n9FE0\nENDCHAR\nSTARTCHAR U_48B1\nENCODING 18609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n4FE0\n2100\n0FE0\nFAA0\n2FE0\n2540\n2540\n27C0\n7820\n8FE0\nENDCHAR\nSTARTCHAR U_48B2\nENCODING 18610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\n4AA0\n2EE0\nFAA0\n2FE0\n2480\n27E0\n2480\n2FE0\n7240\n8FE0\nENDCHAR\nSTARTCHAR U_48B3\nENCODING 18611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\n4920\n4940\n4980\n4940\n4920\n4920\n4B20\n4DC0\n4900\n8100\nENDCHAR\nSTARTCHAR U_48B4\nENCODING 18612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n1BC0\nE240\n2280\n2280\nFA40\n2240\n2340\n2280\n4200\n8200\nENDCHAR\nSTARTCHAR U_48B5\nENCODING 18613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01E0\nF920\n0140\n0140\nFD20\n2120\n4120\n4920\n8DC0\nF500\n0100\nENDCHAR\nSTARTCHAR U_48B6\nENCODING 18614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n1120\nFD40\n1180\n3140\n3920\n5520\n9120\n11C0\n1100\n1100\nENDCHAR\nSTARTCHAR U_48B7\nENCODING 18615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4520\n6540\n5540\n4520\nFF20\n4520\n4520\n45A0\n8540\n8D00\nENDCHAR\nSTARTCHAR U_48B8\nENCODING 18616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4520\n4540\n7D40\n4520\n4520\n7D20\n4520\n47A0\nF940\n0100\nENDCHAR\nSTARTCHAR U_48B9\nENCODING 18617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n8120\n8120\nF940\n8940\n8920\nF920\n8120\n81A0\nFD40\n0100\nENDCHAR\nSTARTCHAR U_48BA\nENCODING 18618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n9520\n9520\nFD40\n1140\n1120\n9520\n9520\n95A0\nFD40\n0100\nENDCHAR\nSTARTCHAR U_48BB\nENCODING 18619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n9120\n9140\nF940\n8920\n8920\nF920\n91A0\n9140\nFD00\n0100\nENDCHAR\nSTARTCHAR U_48BC\nENCODING 18620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n4920\nFD40\n4940\n4920\n4920\nFD20\n0120\n49C0\n4500\n8500\nENDCHAR\nSTARTCHAR U_48BD\nENCODING 18621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7FC0\n2080\nFFE0\n5140\nBFA0\n2480\n3F80\n2000\n2040\n1FC0\nENDCHAR\nSTARTCHAR U_48BE\nENCODING 18622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n5120\n7D40\n9140\n1120\nFF20\n2920\n2920\n4BC0\n8D00\n0100\nENDCHAR\nSTARTCHAR U_48BF\nENCODING 18623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\nFD20\n8540\n4140\n4920\nFD20\n4920\n4920\n39C0\nC500\n0100\nENDCHAR\nSTARTCHAR U_48C0\nENCODING 18624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n3EA0\n44A0\nFEC0\n40A0\n5EA0\n52A0\n56C0\n5080\n9C80\n9080\nENDCHAR\nSTARTCHAR U_48C1\nENCODING 18625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\n22A0\nAAA0\n66C0\n22A0\n66A0\nAAA0\n22A0\n22E0\nAA80\n4480\nENDCHAR\nSTARTCHAR U_48C2\nENCODING 18626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n15E0\n7920\n1120\n7D40\n1140\nFF20\n3120\n39A0\n5540\n5500\n9100\nENDCHAR\nSTARTCHAR U_48C3\nENCODING 18627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n7CA0\n90A0\n10C0\nFEA0\n10A0\n5EA0\n50C0\n5080\n5E80\nF080\nENDCHAR\nSTARTCHAR U_48C4\nENCODING 18628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\n28A0\n44A0\nB8C0\n10A0\n7CA0\n10A0\n58C0\n5480\nB480\n1080\nENDCHAR\nSTARTCHAR U_48C5\nENCODING 18629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7EE0\n40A0\n7CA0\n40C0\n7EA0\n50A0\n5AA0\n54C0\n5480\n9280\n9880\nENDCHAR\nSTARTCHAR U_48C6\nENCODING 18630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n0120\n5520\nA940\n5540\n0120\nFD20\n2120\n3DC0\nE100\n0100\nENDCHAR\nSTARTCHAR U_48C7\nENCODING 18631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n14E0\n12A0\nFEA0\n10C0\n92A0\n54A0\n10A0\n54C0\n9280\n9280\n3080\nENDCHAR\nSTARTCHAR U_48C8\nENCODING 18632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n8A40\nFBC0\n0000\nFBE0\nAAA0\nAAA0\nFBE0\n8200\nBA20\nC3E0\nENDCHAR\nSTARTCHAR U_48C9\nENCODING 18633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nAA80\n5340\n8400\n7F80\n2080\n7FC0\n4440\n7FC0\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_48CA\nENCODING 18634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n92E0\n54A0\n10A0\nFEC0\n82A0\nBAA0\nAAA0\nAAC0\nBA80\n8280\n8680\nENDCHAR\nSTARTCHAR U_48CB\nENCODING 18635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\n54A0\n48A0\n12C0\nFEA0\n10A0\n38A0\n54C0\n9080\n1080\n1080\nENDCHAR\nSTARTCHAR U_48CC\nENCODING 18636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n08E0\n7FA0\n40A0\n5EC0\n54A0\n54A0\n5EA0\n54C0\n5280\n9980\n9680\nENDCHAR\nSTARTCHAR U_48CD\nENCODING 18637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\nFEA0\n34A0\n52C0\nFFA0\n52A0\n7EA0\n52C0\n7E80\n1080\n1C80\nENDCHAR\nSTARTCHAR U_48CE\nENCODING 18638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n55E0\n5520\nA920\n5540\n0140\n7D20\n5520\n7DA0\n5540\n5500\n7D00\nENDCHAR\nSTARTCHAR U_48CF\nENCODING 18639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AE0\n2AA0\n2AA0\n5FC0\n4AA0\nCAA0\n7FA0\n40A0\n4AE0\n4980\n5080\nENDCHAR\nSTARTCHAR U_48D0\nENCODING 18640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\nFFE0\n2920\n1140\n7D40\n5520\n5520\nFF20\n29C0\n4500\n8300\nENDCHAR\nSTARTCHAR U_48D1\nENCODING 18641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4120\n7D40\n55C0\n7D20\n5520\n7D20\n51A0\n7D40\n9100\nBF00\nENDCHAR\nSTARTCHAR U_48D2\nENCODING 18642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7DE0\n5520\nFF40\n0140\n7D20\n5520\n55A0\n5540\n2900\nC500\nENDCHAR\nSTARTCHAR U_48D3\nENCODING 18643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFCE0\n00A0\n7CA0\n44C0\n7CA0\n00A0\nFEA0\nAAA0\nFEE0\n9280\n9680\nENDCHAR\nSTARTCHAR U_48D4\nENCODING 18644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9400\n59E0\nFD20\n8540\nFD40\n8520\nFD20\n8520\nFDC0\n4900\n8500\nENDCHAR\nSTARTCHAR U_48D5\nENCODING 18645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n5120\n7D40\n5140\n7D20\n5120\n7D20\n05A0\nAD40\nA500\n1900\nENDCHAR\nSTARTCHAR U_48D6\nENCODING 18646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n5240\n7A40\n53C0\n7800\n53E0\n7AA0\n0BE0\nAA00\nAA20\n19E0\nENDCHAR\nSTARTCHAR U_48D7\nENCODING 18647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7DE0\n4520\n7D40\n4540\n7D20\n2120\nFFA0\n5540\nFF00\n1100\nENDCHAR\nSTARTCHAR U_48D8\nENCODING 18648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n95E0\n5920\nFD40\n8540\n7920\n4920\n7920\n21A0\n7940\n2100\nFD00\nENDCHAR\nSTARTCHAR U_48D9\nENCODING 18649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n92E0\nFEA0\n00A0\nEEC0\nAAA0\nEEA0\nAAA0\nEEE0\nAA80\nB280\nENDCHAR\nSTARTCHAR U_48DA\nENCODING 18650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7DE0\n5520\nFF40\n5540\n7D20\n5520\nFDA0\n4940\n3900\nC700\nENDCHAR\nSTARTCHAR U_48DB\nENCODING 18651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nFFE0\n3920\n5540\n9140\n2920\nD720\n55A0\n3940\nD500\n3100\nENDCHAR\nSTARTCHAR U_48DC\nENCODING 18652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C00\n10E0\n7EA0\n54A0\n7CC0\n54A0\n5CA0\n54A0\n5CE0\n9480\nBE80\nENDCHAR\nSTARTCHAR U_48DD\nENCODING 18653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7EE0\n42A0\n7EA0\n48C0\n7EA0\n4AA0\n7FA0\n52A0\n7EE0\n9280\n9E80\nENDCHAR\nSTARTCHAR U_48DE\nENCODING 18654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nEEA0\n44C0\nFEA0\n10A0\n54A0\n54A0\n7CE0\n2080\nC080\nENDCHAR\nSTARTCHAR U_48DF\nENCODING 18655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\nA520\nFF40\n2540\n7F20\nA520\n7D20\n45A0\n7D40\n4500\n7D00\nENDCHAR\nSTARTCHAR U_48E0\nENCODING 18656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\nEF20\n4520\nEF40\n4540\nAB20\n7D20\n45A0\n7D40\n4500\n7D00\nENDCHAR\nSTARTCHAR U_48E1\nENCODING 18657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\nFD20\n2140\n7940\n2120\nFD20\n5520\nFDA0\n5540\nE900\n5500\nENDCHAR\nSTARTCHAR U_48E2\nENCODING 18658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AE0\nFFA0\n4AC0\nEAA0\n5FA0\nE0A0\n4EA0\n6AA0\nDEC0\n4A80\n4E80\nENDCHAR\nSTARTCHAR U_48E3\nENCODING 18659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n54E0\nFEA0\nAAA0\n7CC0\n54A0\n7CA0\n10A0\n7CA0\n10E0\nFE80\n5480\nENDCHAR\nSTARTCHAR U_48E4\nENCODING 18660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nEEA0\nAAC0\n7EA0\nC8A0\n7CA0\n48A0\nFEC0\n4880\nFC80\nENDCHAR\nSTARTCHAR U_48E5\nENCODING 18661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n2200\nFA00\nAA20\nAAC0\nDB00\n8A00\nFA00\n8A00\nFA20\n89C0\nENDCHAR\nSTARTCHAR U_48E6\nENCODING 18662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n2100\n27E0\nF920\nA920\nD920\n8920\nF920\n8A20\nFAA0\n8C40\nENDCHAR\nSTARTCHAR U_48E7\nENCODING 18663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n2120\n2100\nFFE0\nA900\nD900\n8900\nF880\n8880\nF860\n8820\nENDCHAR\nSTARTCHAR U_48E8\nENCODING 18664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n2100\nF9C0\nAF00\nA900\nD900\n8FE0\nF900\n8900\nF920\n88C0\nENDCHAR\nSTARTCHAR U_48E9\nENCODING 18665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n2080\n27E0\nF880\nAAA0\nAAA0\nDBE0\n8880\nF880\n8880\nF860\nENDCHAR\nSTARTCHAR U_48EA\nENCODING 18666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n23E0\nF880\nABE0\nAAA0\nDAA0\n8AA0\nFAA0\n8AA0\nF880\n8880\nENDCHAR\nSTARTCHAR U_48EB\nENCODING 18667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n2080\nFBE0\nA880\nA880\nDBE0\n8A20\nF940\n8880\nF940\n8A20\nENDCHAR\nSTARTCHAR U_48EC\nENCODING 18668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n2120\n27E0\nF900\nA920\nD920\n8940\nF880\n8980\nFA60\n8C20\nENDCHAR\nSTARTCHAR U_48ED\nENCODING 18669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n20A0\nF880\nABE0\nA880\nD880\n8880\nF940\n8940\nFA20\n8A20\nENDCHAR\nSTARTCHAR U_48EE\nENCODING 18670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n2120\n27E0\nF900\nA920\nD920\n89A0\nFA40\n8AC0\nFD20\n8A20\nENDCHAR\nSTARTCHAR U_48EF\nENCODING 18671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2240\n2240\nFBC0\nAA40\nAA40\nDBC0\n8A40\nFA40\n8A40\nFFE0\nENDCHAR\nSTARTCHAR U_48F0\nENCODING 18672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2200\nFA00\nABE0\nAA20\nDA20\n8BE0\nFA00\n8A00\nFBE0\n8A00\nENDCHAR\nSTARTCHAR U_48F1\nENCODING 18673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n2200\n27E0\nF820\nABA0\nAAA0\nDAA0\n8BA0\nFAA0\n8820\nF8C0\nENDCHAR\nSTARTCHAR U_48F2\nENCODING 18674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n2240\n27E0\nF800\nAA40\nDA40\n8FE0\nFA40\n8A40\nFA40\n8C40\nENDCHAR\nSTARTCHAR U_48F3\nENCODING 18675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2020\n2020\nFBE0\nA820\nDBA0\n8AA0\nFBA0\n8820\nF8A0\n8840\nENDCHAR\nSTARTCHAR U_48F4\nENCODING 18676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA20\n2360\n22A0\nFB60\nAA20\nDBE0\n8940\nF940\n8940\nFA40\n8C60\nENDCHAR\nSTARTCHAR U_48F5\nENCODING 18677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2240\nFA40\nABC0\nAA40\nDBC0\n8A40\nFA40\n8FE0\nF840\n8840\nENDCHAR\nSTARTCHAR U_48F6\nENCODING 18678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\nF880\nABE0\nA880\nD880\n8BE0\nFA20\n8A20\nFBE0\n8A20\nENDCHAR\nSTARTCHAR U_48F7\nENCODING 18679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFA80\n23C0\nFC80\nA880\nDFE0\n8880\nF9C0\n8AA0\nFC80\n8880\nENDCHAR\nSTARTCHAR U_48F8\nENCODING 18680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37C0\nE100\n3FE0\n2100\nFFE0\n1100\n7FC0\n5140\n6EC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_48F9\nENCODING 18681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9C0\n22A0\n2680\nFBE0\nAA80\nDAA0\n8AA0\nFA40\n8A40\nFAE0\n8B20\nENDCHAR\nSTARTCHAR U_48FA\nENCODING 18682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2220\nFBE0\nA800\nABE0\nDA20\n8BE0\nFA20\n8BE0\nFA20\n8C60\nENDCHAR\nSTARTCHAR U_48FB\nENCODING 18683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n2280\n27C0\nF820\nABC0\nD880\n8900\nFBC0\n8A40\nFA40\n8BC0\nENDCHAR\nSTARTCHAR U_48FC\nENCODING 18684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n23E0\nF800\nABE0\nAA20\nDBE0\n8880\nFAA0\n8CA0\nF8A0\n8980\nENDCHAR\nSTARTCHAR U_48FD\nENCODING 18685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7800\nA3C0\nFA40\n53C0\n8800\nFFE0\n1100\n7FC0\n5140\n6EC0\n7FC0\nENDCHAR\nSTARTCHAR U_48FE\nENCODING 18686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n2080\nFBE0\nAC20\nABC0\nDA40\n8BC0\nFA40\n8BC0\nFA40\n8FE0\nENDCHAR\nSTARTCHAR U_48FF\nENCODING 18687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2080\n27E0\nF880\nA880\nD980\n8800\nFFE0\n8AA0\nFAA0\n8FE0\nENDCHAR\nSTARTCHAR U_4900\nENCODING 18688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nFFE0\n2240\nF900\nAFE0\nD900\n8A00\nFFC0\n8A40\nFA40\n8BC0\nENDCHAR\nSTARTCHAR U_4901\nENCODING 18689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\nFFE0\n2140\nF9C0\nA940\nD9C0\n8940\nFFE0\n8AC0\nFB20\n8BE0\nENDCHAR\nSTARTCHAR U_4902\nENCODING 18690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n23E0\nF940\nA9C0\nA940\nD880\n8BE0\nF880\n89C0\nFAA0\n8880\nENDCHAR\nSTARTCHAR U_4903\nENCODING 18691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n27E0\nFA40\nA980\nAFE0\nD800\n8BC0\nFA40\n8BC0\nFA40\n8BC0\nENDCHAR\nSTARTCHAR U_4904\nENCODING 18692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2200\n2400\nFFE0\nAAA0\nDBA0\n8AA0\nFBA0\n8AA0\nFFE0\n8820\nENDCHAR\nSTARTCHAR U_4905\nENCODING 18693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFA80\n2440\nFBA0\nA800\nDE20\n8AA0\nFEA0\n8AA0\nFE20\n8A60\nENDCHAR\nSTARTCHAR U_4906\nENCODING 18694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEA0\n2AC0\n26A0\nFA40\nAC20\nFBC0\n8900\nFFE0\n8980\nFA40\n8C20\nENDCHAR\nSTARTCHAR U_4907\nENCODING 18695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n24A0\nFAC0\nA980\nD940\n8E20\nFBC0\n8A40\nF980\n8E60\nENDCHAR\nSTARTCHAR U_4908\nENCODING 18696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFA40\n2420\nFFE0\nA900\nFBC0\n8840\nF880\n8FE0\nFAA0\n8FE0\nENDCHAR\nSTARTCHAR U_4909\nENCODING 18697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nF940\n24A0\nFB20\nAA40\nDDC0\n8800\nFFE0\n8AA0\nFAA0\n8FE0\nENDCHAR\nSTARTCHAR U_490A\nENCODING 18698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA40\n27E0\nFA40\nAFE0\nAA40\nDBC0\n8A40\nFBC0\n8A40\nFFE0\n8840\nENDCHAR\nSTARTCHAR U_490B\nENCODING 18699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n88C0\n50A0\nFFE0\n2080\nFB80\nAA80\nDBA0\n88A0\nFF40\n88C0\nFB20\nENDCHAR\nSTARTCHAR U_490C\nENCODING 18700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\nFA40\n25A0\nF800\nABC0\nFA40\n8BC0\nFA40\n8BE0\nFE20\n8BE0\nENDCHAR\nSTARTCHAR U_490D\nENCODING 18701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA40\n27E0\nFA40\nABC0\nA900\nDFE0\n8DA0\nFB60\n8DA0\nF920\n8860\nENDCHAR\nSTARTCHAR U_490E\nENCODING 18702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2140\nFFE0\nA9A0\nAA80\nDC80\n8FE0\nFAA0\n8FE0\nFAA0\n8BA0\nENDCHAR\nSTARTCHAR U_490F\nENCODING 18703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF60\n2140\n2760\nF940\nABE0\nD880\n8BE0\nF880\n8FE0\nF880\n8980\nENDCHAR\nSTARTCHAR U_4910\nENCODING 18704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2540\n27E0\nFB40\nADE0\nA800\nDBC0\n8A40\nFBC0\n8A40\nFBC0\nENDCHAR\nSTARTCHAR U_4911\nENCODING 18705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n23E0\n2140\nFFE0\nA880\nDBE0\n8AA0\nFBE0\n8AA0\nFBE0\n8C20\nENDCHAR\nSTARTCHAR U_4912\nENCODING 18706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nFFE0\n2540\nFFE0\nA940\nFBE0\n8A80\nFAA0\n8B40\nFCC0\n8B20\nENDCHAR\nSTARTCHAR U_4913\nENCODING 18707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nFFE0\n2240\nFFE0\nAC20\nDBC0\n8920\nFEC0\n89C0\nFEA0\n8980\nENDCHAR\nSTARTCHAR U_4914\nENCODING 18708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n48E0\nBF80\n6AE0\n3FA0\nC920\nFFE0\n1100\n7FC0\n5140\n6EC0\n7FC0\nENDCHAR\nSTARTCHAR U_4915\nENCODING 18709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nFDC0\n2AA0\nFFC0\nAAA0\nFFE0\n8900\nFFE0\n8B40\nFD20\n8900\nENDCHAR\nSTARTCHAR U_4916\nENCODING 18710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n22A0\nFBE0\nA940\nABE0\nD940\n8FE0\nFAA0\n8EA0\nF9C0\n8EA0\nENDCHAR\nSTARTCHAR U_4917\nENCODING 18711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFDC0\n4740\nFDE0\n5680\nFFE0\n1100\n7FC0\n5140\n6EC0\n7FC0\nENDCHAR\nSTARTCHAR U_4918\nENCODING 18712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0AC0\nFAA0\n2580\nFFE0\nAA80\nDB80\n8AA0\nFBC0\n8E80\nF960\n8E20\nENDCHAR\nSTARTCHAR U_4919\nENCODING 18713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\nFA80\n27E0\nFB40\nADC0\nFAA0\n8FE0\nFAA0\n8FE0\nF2A0\n8FE0\nENDCHAR\nSTARTCHAR U_491A\nENCODING 18714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9540\n97C0\nF540\n97C0\n9540\nF100\n97C0\n9100\nB100\n9FE0\nENDCHAR\nSTARTCHAR U_491B\nENCODING 18715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n5240\n8A40\n7240\n2240\nFA40\n2A40\nB3C0\n6040\n3840\nC040\nENDCHAR\nSTARTCHAR U_491C\nENCODING 18716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5080\n88E0\n7780\n2080\nF880\n27E0\nA880\nB080\n38A0\nC060\nENDCHAR\nSTARTCHAR U_491D\nENCODING 18717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n34E0\n4CA0\nF4A0\n24A0\nFCA0\n2CA0\nB5A0\n66E0\n3C80\nE080\nENDCHAR\nSTARTCHAR U_491E\nENCODING 18718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n30C0\n48A0\nFFE0\n2080\nFC80\n2940\nB140\n6140\n3A40\nE460\nENDCHAR\nSTARTCHAR U_491F\nENCODING 18719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n57E0\n8C40\n7380\n2280\nFA80\n2280\nAA80\n7280\n3AA0\nC460\nENDCHAR\nSTARTCHAR U_4920\nENCODING 18720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n4880\nF080\n2280\nFAE0\n2A80\nB280\n6280\n3A80\nC7E0\nENDCHAR\nSTARTCHAR U_4921\nENCODING 18721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n4BE0\nF2A0\n23E0\nFAA0\n2FE0\nB220\n6220\n3A60\nC220\nENDCHAR\nSTARTCHAR U_4922\nENCODING 18722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n3220\n4A20\nF3E0\n2000\nF900\n2BE0\nB120\n6120\n3A20\nC460\nENDCHAR\nSTARTCHAR U_4923\nENCODING 18723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n3380\n4880\nF2A0\n21C0\nF880\n2FE0\nB080\n6080\n3980\nC080\nENDCHAR\nSTARTCHAR U_4924\nENCODING 18724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n37E0\n4880\nF120\n2240\nF980\n2920\nB240\n6080\n3940\nC620\nENDCHAR\nSTARTCHAR U_4925\nENCODING 18725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n31E0\n4A40\nF3E0\n2200\nFAE0\n2AA0\nB2E0\n6280\n3AA0\nC4E0\nENDCHAR\nSTARTCHAR U_4926\nENCODING 18726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n32C0\n4AA0\nF280\n27E0\nFA80\n2AA0\nB2C0\n62A0\n3B60\nC220\nENDCHAR\nSTARTCHAR U_4927\nENCODING 18727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n33E0\n4A20\nF220\n22E0\nFAA0\n2AA0\nB2E0\n6220\n3A20\nC3E0\nENDCHAR\nSTARTCHAR U_4928\nENCODING 18728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n3380\n4C60\nF580\n2540\nFD40\n2D60\nB540\n6540\n3D40\nC9A0\nENDCHAR\nSTARTCHAR U_4929\nENCODING 18729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4C20\nF0C0\n2700\nF900\n2FE0\nB100\n6100\n3920\nC1E0\nENDCHAR\nSTARTCHAR U_492A\nENCODING 18730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n3240\n4A40\nF260\n2480\nFBE0\n2880\nB2C0\n62A0\n3AA0\nC480\nENDCHAR\nSTARTCHAR U_492B\nENCODING 18731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3540\n4D40\nF7C0\n2100\nFA80\n2D40\nB820\n67C0\n3840\nC080\nENDCHAR\nSTARTCHAR U_492C\nENCODING 18732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3280\n4880\nF9C0\n26A0\nFA80\n2980\nB6A0\n62C0\n3A80\nC300\nENDCHAR\nSTARTCHAR U_492D\nENCODING 18733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2640\n31C0\n4E20\nF100\n27E0\nFA80\n2FE0\nB2A0\n62A0\n3AE0\nC080\nENDCHAR\nSTARTCHAR U_492E\nENCODING 18734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n32E0\n4A80\nF7E0\n2080\nFA80\n2A80\nB4A0\n60C0\n3980\nC600\nENDCHAR\nSTARTCHAR U_492F\nENCODING 18735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27A0\n32A0\n4AC0\nF280\n27A0\nFAA0\n2AC0\nB280\n62A0\n3AA0\nC4C0\nENDCHAR\nSTARTCHAR U_4930\nENCODING 18736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFBE0\n24A0\n3940\nC620\n1B00\n6EC0\n8420\n3F80\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_4931\nENCODING 18737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n32A0\n4BE0\nF020\n23C0\nFA00\n2BE0\nB240\n6240\n3A40\nC440\nENDCHAR\nSTARTCHAR U_4932\nENCODING 18738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n4BE0\nF080\n27E0\nF940\n2940\nB360\n6540\n3940\nC240\nENDCHAR\nSTARTCHAR U_4933\nENCODING 18739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4940\nF240\n2660\nFAA0\n2BE0\nB2A0\n6240\n3A40\nC2A0\nENDCHAR\nSTARTCHAR U_4934\nENCODING 18740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n3040\n4880\nF080\n24A0\nFEE0\n2DA0\nB6E0\n65A0\n3C20\nC7E0\nENDCHAR\nSTARTCHAR U_4935\nENCODING 18741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n3140\n4B60\nF140\n2360\nF940\n2B60\nB540\n6140\n3A40\nC240\nENDCHAR\nSTARTCHAR U_4936\nENCODING 18742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n33C0\n4900\nF2C0\n2520\nFBC0\n2D40\nB540\n63C0\n3900\nC0E0\nENDCHAR\nSTARTCHAR U_4937\nENCODING 18743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3520\n4DE0\nF520\n25E0\nFC80\n2FE0\nB540\n64C0\n3D20\nC7E0\nENDCHAR\nSTARTCHAR U_4938\nENCODING 18744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n31C0\n4940\nFFE0\n2080\nF9A0\n2AC0\nB540\n62E0\n3940\nC2C0\nENDCHAR\nSTARTCHAR U_4939\nENCODING 18745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n33E0\n4AA0\nF1C0\n2080\nF940\n2A20\nB3E0\n6140\n3880\nC360\nENDCHAR\nSTARTCHAR U_493A\nENCODING 18746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n37C0\n4A80\nF280\n24E0\nFBA0\n2AA0\nB2A0\n63A0\n38A0\nC120\nENDCHAR\nSTARTCHAR U_493B\nENCODING 18747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4A80\nF5E0\n2000\nFBE0\n2A20\nB3E0\n6220\n3BE0\nC420\nENDCHAR\nSTARTCHAR U_493C\nENCODING 18748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n33E0\n4A20\nF3E0\n2220\nFBE0\n2880\nB7A0\n61C0\n3AA0\nC5A0\nENDCHAR\nSTARTCHAR U_493D\nENCODING 18749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3520\n47E0\nF080\n22A0\nF9C0\n2880\nB1C0\n62A0\n3880\nC080\nENDCHAR\nSTARTCHAR U_493E\nENCODING 18750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n3380\n4AA0\nF140\n2000\nFA00\n2CE0\nB420\n6760\n3C20\nC7E0\nENDCHAR\nSTARTCHAR U_493F\nENCODING 18751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22E0\n37A0\n4AA0\nF7A0\n2260\nFBC0\n2880\nB080\n63E0\n3880\nC180\nENDCHAR\nSTARTCHAR U_4940\nENCODING 18752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n32A0\n4BE0\nF000\n23E0\nF880\n2BE0\nB2A0\n63E0\n3880\nC3E0\nENDCHAR\nSTARTCHAR U_4941\nENCODING 18753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n3040\n4880\nF3E0\n2220\nFB60\n2AA0\nB3E0\n62A0\n3AA0\nC3E0\nENDCHAR\nSTARTCHAR U_4942\nENCODING 18754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3420\n4BC0\nF000\n27E0\nF900\n2EA0\nB140\n66E0\n3940\nC680\nENDCHAR\nSTARTCHAR U_4943\nENCODING 18755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4D20\nF240\n27E0\nFA40\n2BE0\nB240\n63E0\n3A40\nC3E0\nENDCHAR\nSTARTCHAR U_4944\nENCODING 18756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3540\n4FE0\nF540\n27E0\nFC00\n2DE0\nB520\n65E0\n3D20\nC9E0\nENDCHAR\nSTARTCHAR U_4945\nENCODING 18757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n75C0\n2480\n75C0\n1B00\n64C0\nBFA0\n1500\n7FC0\nENDCHAR\nSTARTCHAR U_4946\nENCODING 18758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n71C0\n1100\n75C0\n1B00\n64C0\nBFA0\n1500\n7FC0\nENDCHAR\nSTARTCHAR U_4947\nENCODING 18759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4C20\nF7E0\n2400\nFF60\n2D20\nB760\n6520\n3F60\nC920\nENDCHAR\nSTARTCHAR U_4948\nENCODING 18760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n37E0\n4A40\nF120\n27E0\nFA80\n2C60\nB140\n67E0\n3940\nC240\nENDCHAR\nSTARTCHAR U_4949\nENCODING 18761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4C20\nF1C0\n2240\nFFE0\n2AA0\nB3E0\n6140\n3AA0\nC4E0\nENDCHAR\nSTARTCHAR U_494A\nENCODING 18762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n33E0\n4880\nF3E0\n2080\nFFE0\n2A20\nB3E0\n6220\n3BE0\nC620\nENDCHAR\nSTARTCHAR U_494B\nENCODING 18763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n37E0\n4A40\nF3C0\n2000\nFBE0\n2840\nB080\n6180\n3880\nC560\nENDCHAR\nSTARTCHAR U_494C\nENCODING 18764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nAAA0\n3B80\n2A80\n3B80\n0400\n1B00\nEEE0\n1500\n7FC0\nENDCHAR\nSTARTCHAR U_494D\nENCODING 18765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n73C0\n2140\nFB40\n5140\nFA60\n2400\n1B00\nEEE0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_494E\nENCODING 18766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3400\n4FE0\nF540\n2540\nFDA0\n2BE0\nB220\n63A0\n3A60\nC220\nENDCHAR\nSTARTCHAR U_494F\nENCODING 18767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A00\n6BE0\n96A0\nE2A0\n4FA0\nEAA0\n5AE0\nEBA0\n4A80\n6B80\n8C80\nENDCHAR\nSTARTCHAR U_4950\nENCODING 18768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9C0\n5340\nFC80\n2940\n67E0\nA140\n2EC0\n3580\nDF60\n1500\n3F80\nENDCHAR\nSTARTCHAR U_4951\nENCODING 18769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4D40\nF540\n2BA0\nF960\n2BC0\nB340\n6480\n3940\nC640\nENDCHAR\nSTARTCHAR U_4952\nENCODING 18770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n1240\nF7E0\n84A0\nF3E0\n1EA0\nE5E0\n1500\n3F80\n1500\n7FE0\nENDCHAR\nSTARTCHAR U_4953\nENCODING 18771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n5FE0\n8AC0\n7340\n22C0\nFB40\n2FE0\nB540\n6BA0\n3100\nC7E0\nENDCHAR\nSTARTCHAR U_4954\nENCODING 18772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5240\n8FE0\n7AA0\n2AA0\nFFE0\n2540\nAFE0\n7380\n3D40\nE920\nENDCHAR\nSTARTCHAR U_4955\nENCODING 18773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n5280\n8BE0\n7620\n2FA0\nFAA0\n2BA0\nBEC0\n6AC0\n3AA0\nEBA0\nENDCHAR\nSTARTCHAR U_4956\nENCODING 18774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5FE0\n8280\n7FE0\n2AA0\nFC60\n2FE0\nB100\n6FE0\n3280\nCC60\nENDCHAR\nSTARTCHAR U_4957\nENCODING 18775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n5F80\n84E0\n7F20\n2040\nF740\n2040\nBFC0\n6E40\n35A0\nC520\nENDCHAR\nSTARTCHAR U_4958\nENCODING 18776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n5140\n8AA0\nF140\n2140\nFAA0\n2BE0\nB220\n63E0\n3A20\nC3E0\nENDCHAR\nSTARTCHAR U_4959\nENCODING 18777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n5EC0\n8A00\n7DE0\n2A80\nFB60\n2AC0\nBF40\n68E0\n3B40\nC880\nENDCHAR\nSTARTCHAR U_495A\nENCODING 18778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n5540\n5DC0\n5540\n5DC0\n5540\n5F40\n64C0\n5F40\n9560\nFFA0\nENDCHAR\nSTARTCHAR U_495B\nENCODING 18779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n52A0\n8FA0\n72A0\n2F20\nF2C0\n2B80\nB440\n67C0\n3540\nCB20\nENDCHAR\nSTARTCHAR U_495C\nENCODING 18780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n5AA0\n8EE0\n7AA0\n2EE0\nF920\n2FE0\nBBA0\n6D60\n3920\nC860\nENDCHAR\nSTARTCHAR U_495D\nENCODING 18781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8AA0\n7FE0\n2AA0\nFAC0\n2B60\nBA00\n6BC0\n3A00\nD1E0\nENDCHAR\nSTARTCHAR U_495E\nENCODING 18782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2E80\n5A80\n8EE0\n7BA0\n2EA0\nF4A0\n2E40\nBA40\n6AA0\nF520\nENDCHAR\nSTARTCHAR U_495F\nENCODING 18783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25C0\n3540\n4FC0\nF540\n25C0\nF700\n25E0\nBEA0\n6560\n35A0\nCCC0\nENDCHAR\nSTARTCHAR U_4960\nENCODING 18784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n5FE0\n8A80\n70A0\n27E0\nF480\n2FA0\nB460\n6740\n3DA0\nD720\nENDCHAR\nSTARTCHAR U_4961\nENCODING 18785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n5BE0\n8AA0\n7AE0\n2E00\nF9E0\n2E40\nBBE0\n6A40\n3AE0\nD140\nENDCHAR\nSTARTCHAR U_4962\nENCODING 18786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n4880\n7BC0\n5140\nFC80\n0F60\n3580\nDF60\n1500\n3F80\nENDCHAR\nSTARTCHAR U_4963\nENCODING 18787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5BC0\n8A40\nDFE0\n8A40\nF980\n2260\nFF00\n3580\nDF60\n1500\n3F80\nENDCHAR\nSTARTCHAR U_4964\nENCODING 18788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5100\n8FE0\n7560\n2380\nF440\n2FC0\nB540\n6740\n34A0\nE3E0\nENDCHAR\nSTARTCHAR U_4965\nENCODING 18789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8A40\n7FE0\n2A80\nFFE0\n2AA0\nBFE0\n6AC0\n3EA0\nD280\nENDCHAR\nSTARTCHAR U_4966\nENCODING 18790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n53E0\n8940\n75E0\n2F40\nF5C0\n2540\nB5C0\n6540\n3E00\nD1E0\nENDCHAR\nSTARTCHAR U_4967\nENCODING 18791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n5100\n8FE0\n7420\n23C0\nFDA0\n2A40\nB7E0\n62C0\n3340\nC3C0\nENDCHAR\nSTARTCHAR U_4968\nENCODING 18792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n5AA0\n8EE0\n7AA0\n2FE0\nFAA0\n2BA0\nB820\n6BA0\n3AA0\nCBE0\nENDCHAR\nSTARTCHAR U_4969\nENCODING 18793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A00\n5A80\nAAE0\n1FA0\nF0A0\n57A0\nF040\n5740\nF540\n75A0\nD4A0\nENDCHAR\nSTARTCHAR U_496A\nENCODING 18794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n54C0\n8D40\n77C0\n2240\nFFE0\n2A40\nB7E0\n6000\n3AA0\nCAA0\nENDCHAR\nSTARTCHAR U_496B\nENCODING 18795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n5FC0\n84A0\n7FE0\n2480\nFFA0\n2AA0\nBF40\n6AC0\n3F20\nC220\nENDCHAR\nSTARTCHAR U_496C\nENCODING 18796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5FE0\n8540\n77E0\n2540\nFFC0\n2D40\nB7E0\n6240\n3A40\nE0C0\nENDCHAR\nSTARTCHAR U_496D\nENCODING 18797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n28A0\nFFE0\nAAA0\n71C0\nAEA0\n3180\nEEE0\n0400\n3F80\n1500\n7FC0\nENDCHAR\nSTARTCHAR U_496E\nENCODING 18798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5280\n8FE0\n7AA0\n2FE0\nF800\n2FE0\nBAA0\n6FA0\n3AE0\nCF80\nENDCHAR\nSTARTCHAR U_496F\nENCODING 18799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5AA0\n8FE0\n7480\n2AE0\nFE80\n2A60\nBE80\n6AE0\n3E80\nCA60\nENDCHAR\nSTARTCHAR U_4970\nENCODING 18800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5080\n8FE0\n7200\n21C0\nFA80\n2FE0\nBAA0\n6FE0\n32A0\nC7E0\nENDCHAR\nSTARTCHAR U_4971\nENCODING 18801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8C20\n72C0\n2440\nFEC0\n2440\nB7E0\n6820\n3560\nC540\nENDCHAR\nSTARTCHAR U_4972\nENCODING 18802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5F80\n8AE0\n7F20\n2880\nFF80\n2A80\nBF80\n6880\n3F40\nC220\nENDCHAR\nSTARTCHAR U_4973\nENCODING 18803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5200\n8FC0\n7540\n2FE0\nFA40\n2560\nBBC0\n6C40\n3380\nCC60\nENDCHAR\nSTARTCHAR U_4974\nENCODING 18804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n57E0\n8280\n7FE0\n2480\nFFE0\n2480\nB760\n65A0\n3420\nC460\nENDCHAR\nSTARTCHAR U_4975\nENCODING 18805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nBFE0\n1480\nF7E0\n5D40\nF7E0\n5540\n77E0\nDD40\n4140\nE260\nENDCHAR\nSTARTCHAR U_4976\nENCODING 18806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5400\n8FE0\n7540\n27E0\nFD40\n2FE0\nB440\n6560\n3940\nCFE0\nENDCHAR\nSTARTCHAR U_4977\nENCODING 18807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A20\n6F20\n9A20\n70A0\n2EA0\nFAA0\n2EA0\nBA20\n6F20\n3A20\nD260\nENDCHAR\nSTARTCHAR U_4978\nENCODING 18808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n2540\nCFE0\n8D60\nEBA0\n2D60\n5F00\nE4E0\n1F00\n1500\n7FC0\nENDCHAR\nSTARTCHAR U_4979\nENCODING 18809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n52A0\n8FA0\n72A0\n2740\nFAE0\n2A80\nB7E0\n6520\n3EE0\nC7E0\nENDCHAR\nSTARTCHAR U_497A\nENCODING 18810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\n7840\n8240\n7440\n27E0\nF8C0\n2140\n2640\n3040\n20C0\nENDCHAR\nSTARTCHAR U_497B\nENCODING 18811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23C0\n7900\n8100\n7100\n27E0\nF900\n2180\n2280\n2AA0\n34E0\nENDCHAR\nSTARTCHAR U_497C\nENCODING 18812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n7FE0\n8AA0\n72A0\n22A0\nF2A0\n24A0\n2920\n3220\n20C0\nENDCHAR\nSTARTCHAR U_497D\nENCODING 18813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4540\n7520\n8FE0\n7100\n2200\nFBC0\n2640\n2580\n2980\n3660\nENDCHAR\nSTARTCHAR U_497E\nENCODING 18814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4420\n7200\n83E0\nF200\n23E0\nFA20\n2020\n2FE0\n3020\n20C0\nENDCHAR\nSTARTCHAR U_497F\nENCODING 18815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n4700\n7800\n8FE0\nF900\n49C0\nF940\n4940\n4A40\n6A40\n54C0\nENDCHAR\nSTARTCHAR U_4980\nENCODING 18816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47E0\n7920\n85A0\n7360\n2120\nFB60\n25A0\n2120\n2920\n3360\nENDCHAR\nSTARTCHAR U_4981\nENCODING 18817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n42E0\n7FA0\n82A0\n77C0\n22A0\nFFA0\n22A0\n22E0\n2A80\n3480\nENDCHAR\nSTARTCHAR U_4982\nENCODING 18818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7820\n8FE0\nF800\n4FE0\nFDA0\n4B60\n4DA0\n5920\n6360\nENDCHAR\nSTARTCHAR U_4983\nENCODING 18819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4FE0\n7280\n8100\nF7E0\n4140\nF7E0\n4240\n4FC0\n5240\n63C0\nENDCHAR\nSTARTCHAR U_4984\nENCODING 18820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7540\n87C0\nF540\n47C0\nF120\n4FE0\n4540\n5C80\n6660\nENDCHAR\nSTARTCHAR U_4985\nENCODING 18821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n7FC0\n8100\n77C0\n2100\nFFE0\n2540\n2FE0\n3440\n27C0\nENDCHAR\nSTARTCHAR U_4986\nENCODING 18822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\n7EE0\n8AA0\nFFE0\n4480\nFFE0\n4480\n4FE0\n6240\n4FE0\nENDCHAR\nSTARTCHAR U_4987\nENCODING 18823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4240\n7A40\n4520\n7D20\n4200\nFBC0\n5040\n8840\nF840\n0180\nENDCHAR\nSTARTCHAR U_4988\nENCODING 18824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4100\n7FE0\n4100\n7900\n43E0\nFA80\n2280\n4A80\nFC80\n0BE0\nENDCHAR\nSTARTCHAR U_4989\nENCODING 18825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n8AA0\nEAA0\n8AA0\nEAA0\n8AA0\nFCE0\n4820\n9820\nFFE0\n8820\nENDCHAR\nSTARTCHAR U_498A\nENCODING 18826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4100\n79C0\n4100\n7900\n47E0\nF900\n5340\n8D20\nF920\n0300\nENDCHAR\nSTARTCHAR U_498B\nENCODING 18827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE480\n9E80\nE5E0\n9EA0\nE4A0\n9EA0\nE8A0\n4E40\n8A40\nAAA0\nF720\nENDCHAR\nSTARTCHAR U_498C\nENCODING 18828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8020\n8420\n9F20\n8420\nBFA0\n8060\nENDCHAR\nSTARTCHAR U_498D\nENCODING 18829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nF1E0\n9F20\nA020\n9C20\n8820\n9120\n9F60\nENDCHAR\nSTARTCHAR U_498E\nENCODING 18830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nF3E0\n9E20\n8020\nBF20\n8A20\n92A0\nA3A0\nENDCHAR\nSTARTCHAR U_498F\nENCODING 18831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8420\n9B20\nEAE0\n8A20\n9220\nA260\nENDCHAR\nSTARTCHAR U_4990\nENCODING 18832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n8420\n9F20\n8420\nBFA0\n8420\n9C60\nENDCHAR\nSTARTCHAR U_4991\nENCODING 18833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8420\n9F20\n8520\nBFA0\n8A20\nB1E0\nENDCHAR\nSTARTCHAR U_4992\nENCODING 18834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8020\nBFA0\n8820\n9FA0\nE8A0\n8FE0\nENDCHAR\nSTARTCHAR U_4993\nENCODING 18835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8820\n8F20\n8820\nBF20\nA120\nBF60\nENDCHAR\nSTARTCHAR U_4994\nENCODING 18836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAA60\nCAA0\nFBE0\n8020\n9F20\n9320\n9520\n9F20\n8020\nBFE0\nENDCHAR\nSTARTCHAR U_4995\nENCODING 18837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAB20\nCAA0\nFBE0\n9120\n8A20\n9F20\n8A20\nBFA0\n8A20\n92E0\nENDCHAR\nSTARTCHAR U_4996\nENCODING 18838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFBE0\n8420\nBFA0\n8420\n9F20\n8020\n9F20\n9120\n9F60\nENDCHAR\nSTARTCHAR U_4997\nENCODING 18839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n9020\nBFA0\nAAA0\nAAA0\nFFA0\n8060\nENDCHAR\nSTARTCHAR U_4998\nENCODING 18840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nCB20\nFFE0\n9120\n9F20\n9120\n9F20\n92A0\n9520\n98E0\nENDCHAR\nSTARTCHAR U_4999\nENCODING 18841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFBE0\n8420\n9F20\n8420\nBFA0\n8220\n9F20\n8A20\n8660\nENDCHAR\nSTARTCHAR U_499A\nENCODING 18842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAA60\nCAA0\nF3E0\n9C20\n8420\nBFA0\n8420\n9F20\n9120\n9F60\nENDCHAR\nSTARTCHAR U_499B\nENCODING 18843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFFE0\n8A20\n9F20\n8520\nBFA0\n8520\n9F20\n8420\n8C60\nENDCHAR\nSTARTCHAR U_499C\nENCODING 18844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n8420\n9F20\n8920\nBFA0\n9120\n9F60\nENDCHAR\nSTARTCHAR U_499D\nENCODING 18845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nCB20\nFBE0\n8420\n9F20\n8420\nBFA0\n9B20\nAAA0\n9660\nENDCHAR\nSTARTCHAR U_499E\nENCODING 18846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nCB20\nFBE0\n9020\n8FA0\nB120\n87A0\n8920\nB7A0\n8060\nENDCHAR\nSTARTCHAR U_499F\nENCODING 18847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n9520\nAEA0\n8420\n9F20\n8420\nBFE0\nENDCHAR\nSTARTCHAR U_49A0\nENCODING 18848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n9240\nF3C0\n9240\nF3C0\nBE40\n9540\nAE40\n95C0\nAC40\n80C0\nENDCHAR\nSTARTCHAR U_49A1\nENCODING 18849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n9240\nF3C0\n9A40\nFFC0\nA140\n9E40\n9240\n9F40\n9140\n9FC0\nENDCHAR\nSTARTCHAR U_49A2\nENCODING 18850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n9240\nF3C0\n9240\nF3C0\nA740\nD240\nAFC0\nE540\nAF40\nA0C0\nENDCHAR\nSTARTCHAR U_49A3\nENCODING 18851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFBE0\n8420\n9F20\n8A20\nBFA0\n8020\n9F20\n9120\n9F60\nENDCHAR\nSTARTCHAR U_49A4\nENCODING 18852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8E20\nFBE0\n9120\nEEA0\nBBA0\nAAA0\n9120\nEAE0\nENDCHAR\nSTARTCHAR U_49A5\nENCODING 18853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n9120\nFFE0\n9120\nBBA0\nD560\n9160\nENDCHAR\nSTARTCHAR U_49A6\nENCODING 18854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nCB20\nFBE0\n8E20\n9120\nAEA0\n8420\nBFA0\n9520\nBFE0\nENDCHAR\nSTARTCHAR U_49A7\nENCODING 18855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nCB20\nF3E0\n9120\n9B20\n9120\n9F20\n8A20\n92A0\nA1E0\nENDCHAR\nSTARTCHAR U_49A8\nENCODING 18856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFBE0\n8420\nBFA0\n9520\n9F20\n9520\n9F20\n9520\nACE0\nENDCHAR\nSTARTCHAR U_49A9\nENCODING 18857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n9520\n9520\n9F20\nB120\n8E20\nF360\nENDCHAR\nSTARTCHAR U_49AA\nENCODING 18858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFFE0\n9120\n9F20\n9120\n9FA0\nB4A0\nDAA0\n9FA0\n8160\nENDCHAR\nSTARTCHAR U_49AB\nENCODING 18859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFBE0\n9120\nFFE0\n9520\nBFA0\nA4A0\nFFE0\n9220\nE1A0\nENDCHAR\nSTARTCHAR U_49AC\nENCODING 18860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFFE0\n92A0\nBAA0\n92A0\nFCA0\n9520\nBFA0\n8A20\nB1E0\nENDCHAR\nSTARTCHAR U_49AD\nENCODING 18861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nF3E0\n9C20\n8420\nBFA0\n9520\nE4E0\n9F20\n9520\n9F60\nENDCHAR\nSTARTCHAR U_49AE\nENCODING 18862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFFE0\n8420\n9F20\n8820\nBFA0\n99A0\nEF60\n8920\n8F60\nENDCHAR\nSTARTCHAR U_49AF\nENCODING 18863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFBE0\n8020\nFE20\nABE0\nFEA0\n92A0\nB920\n92A0\nFC60\nENDCHAR\nSTARTCHAR U_49B0\nENCODING 18864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFFE0\n9220\nBF20\n9520\n9F20\n9520\n9F20\n9560\n8FE0\nENDCHAR\nSTARTCHAR U_49B1\nENCODING 18865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFFE0\n9520\n9E20\n9220\n9F20\n9120\nBFA0\nAAA0\nCB60\nENDCHAR\nSTARTCHAR U_49B2\nENCODING 18866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFFE0\n8A20\n9FE0\nB4A0\n9FE0\n9020\n97A0\nA4A0\nA7A0\nENDCHAR\nSTARTCHAR U_49B3\nENCODING 18867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFBE0\n8220\n9FE0\nA960\nBFA0\nA960\nBF60\n9BA0\nAD20\nENDCHAR\nSTARTCHAR U_49B4\nENCODING 18868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nCB20\nFFE0\nAAA0\nBFA0\n8420\nFFE0\n9120\nBFA0\n8460\nENDCHAR\nSTARTCHAR U_49B5\nENCODING 18869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFBE0\n8020\nBFA0\n9520\nBFA0\nEDE0\nB6A0\nADA0\nB6A0\nENDCHAR\nSTARTCHAR U_49B6\nENCODING 18870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2420\n8F20\n9220\n9F20\n8520\nBFA0\n8520\n9F20\n8420\n8C60\nENDCHAR\nSTARTCHAR U_49B7\nENCODING 18871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\n8020\n9520\n9520\nAEA0\n8420\n9F20\n8420\nBFA0\n8060\nENDCHAR\nSTARTCHAR U_49B8\nENCODING 18872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8000\n5FE0\n4020\n9F20\n9520\n9F20\n9520\nBFA0\nA6A0\nBFA0\nA0E0\nENDCHAR\nSTARTCHAR U_49B9\nENCODING 18873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9100\nA100\nAFE0\n9100\n9100\n9100\nE100\n8100\n8100\n8100\nENDCHAR\nSTARTCHAR U_49BA\nENCODING 18874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF000\n97E0\nA080\nA080\n9080\n9080\nD080\nA080\n8080\n8280\n8100\nENDCHAR\nSTARTCHAR U_49BB\nENCODING 18875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9040\nA080\nA100\n9100\n9FE0\nD100\nA100\n8100\n8100\n8700\nENDCHAR\nSTARTCHAR U_49BC\nENCODING 18876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9200\nAFC0\nA240\n9240\n9240\nDFE0\nA300\n8480\n8840\nB020\nENDCHAR\nSTARTCHAR U_49BD\nENCODING 18877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9040\nA280\nA100\n9FE0\n9120\n9100\nE100\n8100\n8100\n8300\nENDCHAR\nSTARTCHAR U_49BE\nENCODING 18878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n4280\nF440\n9FE0\nF480\n8480\nF480\n9480\nF4A0\n88A0\n10E0\nENDCHAR\nSTARTCHAR U_49BF\nENCODING 18879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9100\nA7E0\nA520\n9520\n97E0\n9100\nD100\nA100\n8100\n8100\nENDCHAR\nSTARTCHAR U_49C0\nENCODING 18880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9200\nAFE0\nA200\n9400\n9500\n9500\nEA00\n8A80\n9440\n87C0\nENDCHAR\nSTARTCHAR U_49C1\nENCODING 18881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF400\n9400\nA7E0\nA820\n97A0\n94A0\n94A0\nE7A0\n84A0\n8020\n80C0\nENDCHAR\nSTARTCHAR U_49C2\nENCODING 18882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9220\nA220\nA220\n94A0\n9840\nD7E0\nA420\n8420\n87E0\n8420\nENDCHAR\nSTARTCHAR U_49C3\nENCODING 18883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF000\n97E0\nA4A0\nA4A0\n97E0\n94A0\n94A0\nD4A0\nA7E0\n8420\n8000\nENDCHAR\nSTARTCHAR U_49C4\nENCODING 18884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF400\n97C0\nA440\nAA80\n9380\n9C60\n9000\nD7C0\nA440\n8440\n87C0\nENDCHAR\nSTARTCHAR U_49C5\nENCODING 18885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\nA100\nA7C0\n9140\n97C0\n9500\nD7E0\nA120\n82C0\n8C60\nENDCHAR\nSTARTCHAR U_49C6\nENCODING 18886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9280\nA280\nAFE0\n9280\n9280\nDFE0\nA000\n8280\n8440\n8820\nENDCHAR\nSTARTCHAR U_49C7\nENCODING 18887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9100\nAFE0\nA100\n9320\n9540\n9C80\nD480\nA440\n8540\n8620\nENDCHAR\nSTARTCHAR U_49C8\nENCODING 18888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA280\nA280\nCFE0\nAAA0\nAAA0\nAAA0\nACE0\nC820\n8FE0\n8820\nENDCHAR\nSTARTCHAR U_49C9\nENCODING 18889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9540\nA7C0\nA540\n9540\n97C0\n9100\nD7C0\nA100\n8100\n8FE0\nENDCHAR\nSTARTCHAR U_49CA\nENCODING 18890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9500\nA7C0\nA900\n9100\n9FE0\n9000\nD7C0\nA440\n8440\n87C0\nENDCHAR\nSTARTCHAR U_49CB\nENCODING 18891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\nA7C0\nA440\n97C0\n9440\n97C0\nD280\nA280\n84A0\n98E0\nENDCHAR\nSTARTCHAR U_49CC\nENCODING 18892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0E0\n9F20\nA520\nA4C0\n9200\n9240\n9FE0\nD440\nA480\n8380\n9C60\nENDCHAR\nSTARTCHAR U_49CD\nENCODING 18893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9440\nA920\nA100\n9280\n9440\n9820\nD7C0\nA440\n8440\n87C0\nENDCHAR\nSTARTCHAR U_49CE\nENCODING 18894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\nA7E0\nA000\n97E0\n9420\n97E0\nD420\nA7E0\n8420\n8460\nENDCHAR\nSTARTCHAR U_49CF\nENCODING 18895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE400\nA780\nA880\nD700\nAA80\nBFE0\nA200\nCF80\n8200\n9FC0\n8200\nENDCHAR\nSTARTCHAR U_49D0\nENCODING 18896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA440\nC440\nA7C0\nA000\nA7C0\nC080\n8FE0\n8080\n8380\nENDCHAR\nSTARTCHAR U_49D1\nENCODING 18897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA820\nC7C0\nA100\nA100\nA5C0\nC500\n8B00\n8900\n90E0\nENDCHAR\nSTARTCHAR U_49D2\nENCODING 18898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA100\nC540\nA540\nABA0\nA100\nC380\n8540\n8920\n8100\nENDCHAR\nSTARTCHAR U_49D3\nENCODING 18899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA920\nABA0\nC920\nABA0\nA820\nABA0\nCAA0\n8BA0\n8820\n9060\nENDCHAR\nSTARTCHAR U_49D4\nENCODING 18900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nA500\nA880\nD240\nAFA0\nA080\nA100\nC200\n8940\n94A0\n97A0\nENDCHAR\nSTARTCHAR U_49D5\nENCODING 18901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE080\nA0A0\nBFE0\nC080\nAE80\nAAA0\nAEA0\nC0C0\n8680\n9940\n8220\nENDCHAR\nSTARTCHAR U_49D6\nENCODING 18902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE500\nAFC0\nA480\nC300\nA4C0\nA500\nAFC0\nC400\n8280\n8320\n8CE0\nENDCHAR\nSTARTCHAR U_49D7\nENCODING 18903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE400\nAFE0\nB840\nCFC0\nA840\nAFC0\nA400\nCFC0\n9480\n8300\n9CE0\nENDCHAR\nSTARTCHAR U_49D8\nENCODING 18904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nA3C0\nA480\nCFE0\nA200\nAD20\nA2C0\nCD80\n82C0\n8CA0\n8300\nENDCHAR\nSTARTCHAR U_49D9\nENCODING 18905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nAA40\nAFC0\nC200\nA700\nA880\nB260\nC200\n8B40\n92A0\n8600\nENDCHAR\nSTARTCHAR U_49DA\nENCODING 18906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA280\nC380\nA000\nAFE0\nA820\nCBA0\n8AA0\n8BA0\n8860\nENDCHAR\nSTARTCHAR U_49DB\nENCODING 18907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA280\nCFE0\nA920\nA7C0\nA200\nC3C0\n8240\n8440\n8980\nENDCHAR\nSTARTCHAR U_49DC\nENCODING 18908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA940\nCFE0\nA940\nAFC0\nA900\nCFC0\n9440\n9440\nA7C0\nENDCHAR\nSTARTCHAR U_49DD\nENCODING 18909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE540\nA7C0\nA100\nCFE0\nA100\nA7C0\nA540\nC7C0\n8100\n8140\n8FE0\nENDCHAR\nSTARTCHAR U_49DE\nENCODING 18910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFC0\nA900\nAFC0\nC900\nAFC0\nA900\nAFE0\nC020\n8AA0\n9520\n80C0\nENDCHAR\nSTARTCHAR U_49DF\nENCODING 18911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE1C0\nAE00\nA920\nC540\nA000\nA200\nACE0\nC820\n8EE0\n8820\n8FE0\nENDCHAR\nSTARTCHAR U_49E0\nENCODING 18912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA540\nC7C0\nA540\nAFE0\nA080\nCFE0\n8480\n8080\n8180\nENDCHAR\nSTARTCHAR U_49E1\nENCODING 18913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA940\nCFE0\nA940\nAFE0\nAD20\nAFE0\nD520\n97E0\nA520\nENDCHAR\nSTARTCHAR U_49E2\nENCODING 18914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFC0\nA800\nAB80\nCA80\nAB80\nA800\nAFC0\nAD40\nCFC0\n8800\n8FE0\nENDCHAR\nSTARTCHAR U_49E3\nENCODING 18915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA280\nAFE0\nCAA0\nAFE0\nA000\nA7C0\nA000\nCFE0\n8540\n8920\nENDCHAR\nSTARTCHAR U_49E4\nENCODING 18916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEAA0\nAFE0\nA440\nC280\nAFE0\nA100\nA7C0\nA100\nCFE0\n8280\n8C60\nENDCHAR\nSTARTCHAR U_49E5\nENCODING 18917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nBFC0\nAA80\nCF80\nAA80\nAF80\nA240\nDFA0\n8400\n9AC0\nAFA0\nENDCHAR\nSTARTCHAR U_49E6\nENCODING 18918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE1C0\nAE00\nA540\nCFC0\nA480\nA7C0\nA840\nCFE0\n9020\n8AA0\n9540\nENDCHAR\nSTARTCHAR U_49E7\nENCODING 18919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE500\nBFC0\nA200\nCF80\nA200\nBFC0\nA940\nDFE0\n8940\nBCA0\n8960\nENDCHAR\nSTARTCHAR U_49E8\nENCODING 18920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEAA0\nA280\nAFE0\nC440\nAFE0\nA100\nA7C0\nA100\nCFE0\n8540\n8920\nENDCHAR\nSTARTCHAR U_49E9\nENCODING 18921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE80\nA280\nBEE0\nCB40\nAE40\nAB40\nAE80\nCA80\n8F40\n9A60\n8220\nENDCHAR\nSTARTCHAR U_49EA\nENCODING 18922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFC0\nA900\nCFC0\nAA80\nAD40\nAA80\nAFE0\nCA80\n9380\n8440\nENDCHAR\nSTARTCHAR U_49EB\nENCODING 18923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA280\nCFE0\nA820\nA7C0\nA500\nCAC0\n8580\n8AC0\n8520\nENDCHAR\nSTARTCHAR U_49EC\nENCODING 18924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA920\nC540\nA180\nA7C0\nAC40\nB7C0\nC440\n87C0\n8820\nENDCHAR\nSTARTCHAR U_49ED\nENCODING 18925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE400\nAFC0\nAA40\nCD40\nAAC0\nA940\nAFC0\nC400\n9B40\nA8A0\n8780\nENDCHAR\nSTARTCHAR U_49EE\nENCODING 18926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA920\nC7C0\nA100\nAFE0\nA540\nA7C0\nC240\n9920\n97C0\nENDCHAR\nSTARTCHAR U_49EF\nENCODING 18927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE780\nA900\nBFC0\nC900\nAFC0\nA500\nAF80\nDA80\n8F80\n8540\n99E0\nENDCHAR\nSTARTCHAR U_49F0\nENCODING 18928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE880\nBC80\nA540\nDFC0\nAA80\nBF40\nABE0\nDE80\n95C0\nAAA0\n8080\nENDCHAR\nSTARTCHAR U_49F1\nENCODING 18929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n4480\nF7E0\n5C80\n57C0\n5480\n5480\n57C0\n5C80\n9480\n87E0\nENDCHAR\nSTARTCHAR U_49F2\nENCODING 18930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n7240\n27E0\n2C80\nF480\n27E0\n2480\n27E0\n2480\n2480\n27E0\nENDCHAR\nSTARTCHAR U_49F3\nENCODING 18931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2200\nA3E0\nBA40\nA640\nA3E0\nA240\nABE0\nB240\nC240\n03E0\nENDCHAR\nSTARTCHAR U_49F4\nENCODING 18932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2100\nFBE0\n2240\n2640\nFBE0\n0A40\n53E0\n2240\n5240\n8BE0\nENDCHAR\nSTARTCHAR U_49F5\nENCODING 18933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2200\nFBE0\nAE40\n2240\n33E0\n3240\n33E0\n5240\n5A40\n83E0\nENDCHAR\nSTARTCHAR U_49F6\nENCODING 18934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n6100\n7FE0\nA100\n3FE0\n0400\nFFE0\n0000\n1080\n6040\nENDCHAR\nSTARTCHAR U_49F7\nENCODING 18935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4280\nF440\n9FE0\n6480\n67E0\n9480\n47E0\n2480\n4480\n27E0\nENDCHAR\nSTARTCHAR U_49F8\nENCODING 18936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2280\n2440\nF7E0\n2C80\n27E0\nF480\n97E0\n9480\n9480\nF7E0\nENDCHAR\nSTARTCHAR U_49F9\nENCODING 18937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4A80\n4A40\n57E0\n7C80\n57E0\n5480\n57E0\n5480\n97E0\nENDCHAR\nSTARTCHAR U_49FA\nENCODING 18938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2240\nF7E0\n2C80\n4480\n47E0\nF480\n57E0\n5480\n5480\n77E0\nENDCHAR\nSTARTCHAR U_49FB\nENCODING 18939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2140\n2120\n53E0\n8A40\n77E0\n0240\n73E0\n5240\n5240\n73E0\nENDCHAR\nSTARTCHAR U_49FC\nENCODING 18940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA140\nFA20\nA3E0\n2640\nFBE0\n0240\nF3E0\n9240\n9240\nF3E0\nENDCHAR\nSTARTCHAR U_49FD\nENCODING 18941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1940\nE120\nABE0\n7640\n2240\nFBE0\n2240\n73E0\n6A40\nA240\n23E0\nENDCHAR\nSTARTCHAR U_49FE\nENCODING 18942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\n53E0\n8A40\n7640\n23E0\nFA40\n23E0\n7240\n5240\n73E0\nENDCHAR\nSTARTCHAR U_49FF\nENCODING 18943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4940\n4920\nFDE0\n4B40\nFD40\n01E0\n7940\n49E0\n7940\n4940\n79E0\nENDCHAR\nSTARTCHAR U_4A00\nENCODING 18944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2180\n5240\n8BE0\n2640\nABE0\n2240\nFBE0\n7240\nABE0\n2200\nENDCHAR\nSTARTCHAR U_4A01\nENCODING 18945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n13E0\nFD40\n3480\n5360\n9200\n3FC0\n2200\n7FC0\nA200\n3FE0\nENDCHAR\nSTARTCHAR U_4A02\nENCODING 18946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n22A0\nFDC0\n3080\n6940\nA220\n7FE0\nA200\n3FC0\n2200\n3FE0\nENDCHAR\nSTARTCHAR U_4A03\nENCODING 18947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4940\n79E0\n4B40\nFD40\nA5E0\n2140\nFDE0\n4940\n3140\nCDE0\nENDCHAR\nSTARTCHAR U_4A04\nENCODING 18948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2900\n5540\nB9E0\n0B40\nFDE0\n2940\nDDE0\nB540\nCDE0\nB500\nENDCHAR\nSTARTCHAR U_4A05\nENCODING 18949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF940\nABE0\n5640\nFA40\n53E0\n7240\n53E0\n7240\nAA40\n63E0\nENDCHAR\nSTARTCHAR U_4A06\nENCODING 18950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\n73E0\nFA40\nAD40\nF880\nAB40\n3FE0\n6200\nBFC0\n2200\n3FE0\nENDCHAR\nSTARTCHAR U_4A07\nENCODING 18951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\nFFE0\n5280\n7BC0\n5280\n7FE0\n0000\nFBE0\n4920\n30C0\nCB20\nENDCHAR\nSTARTCHAR U_4A08\nENCODING 18952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFA40\n8FE0\n7280\n6A80\nB3E0\n5280\nF3E0\n5280\n7280\n8BE0\nENDCHAR\nSTARTCHAR U_4A09\nENCODING 18953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\nB540\nDDE0\nB740\n4940\nB5E0\n4940\nFDE0\n4940\n3140\nCDE0\nENDCHAR\nSTARTCHAR U_4A0A\nENCODING 18954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n3FC0\n5100\nFFE0\n5140\n7FE0\n5140\n7DE0\n4920\n7FE0\n8920\nENDCHAR\nSTARTCHAR U_4A0B\nENCODING 18955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\nA4A0\n1500\n2080\n3F80\n0400\n7FC0\n0420\n07E0\nENDCHAR\nSTARTCHAR U_4A0C\nENCODING 18956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\nA4A0\n1500\n2480\n7FC0\n0000\nFFC0\n1220\nE3E0\nENDCHAR\nSTARTCHAR U_4A0D\nENCODING 18957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n9520\n2E80\n1100\n7FC0\n1100\nFFE0\n1100\n2100\nENDCHAR\nSTARTCHAR U_4A0E\nENCODING 18958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA520\n7A80\n0900\n7900\n4100\n7A00\n0A40\n33A0\nENDCHAR\nSTARTCHAR U_4A0F\nENCODING 18959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\nA4A0\n9540\n2480\nE7E0\n0920\n2180\nC240\n0420\nENDCHAR\nSTARTCHAR U_4A10\nENCODING 18960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n5B40\n2080\nDF60\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_4A11\nENCODING 18961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n7FC0\n0480\n7FC0\n4400\nFFE0\n0A20\n7160\nENDCHAR\nSTARTCHAR U_4A12\nENCODING 18962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n1500\n2480\nFBE0\n0820\n4920\n28A0\nDB60\nENDCHAR\nSTARTCHAR U_4A13\nENCODING 18963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\nA4A0\n9520\n2480\n7FC0\n4040\n5F40\n5140\n7FC0\nENDCHAR\nSTARTCHAR U_4A14\nENCODING 18964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n0400\nFFE0\nA4A0\n9120\n2480\n1500\n7FC0\n0A00\n1220\nE3E0\nENDCHAR\nSTARTCHAR U_4A15\nENCODING 18965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA520\n1480\n6000\n03C0\nC080\n07E0\n2080\n4180\nENDCHAR\nSTARTCHAR U_4A16\nENCODING 18966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\n7FE0\n94A0\n0900\n7FE0\n1000\n2F80\n4880\n8F80\n0880\nENDCHAR\nSTARTCHAR U_4A17\nENCODING 18967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n9520\n7F80\n2900\n7F80\n0200\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_4A18\nENCODING 18968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n2480\n1F00\n1100\n1500\n1F00\n0A20\n73C0\nENDCHAR\nSTARTCHAR U_4A19\nENCODING 18969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\nA520\n1480\n2520\n43C0\nA880\n57E0\n3080\nE7E0\nENDCHAR\nSTARTCHAR U_4A1A\nENCODING 18970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n94A0\nA520\n1FC0\n2540\n4A80\n1500\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_4A1B\nENCODING 18971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\n7FE0\nA4A0\n1500\n2040\nF7E0\n2400\n77E0\nA480\n2480\nENDCHAR\nSTARTCHAR U_4A1C\nENCODING 18972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n9520\n7BC0\n4A40\n7BC0\n4A40\n7BC0\n4A40\n8C40\nENDCHAR\nSTARTCHAR U_4A1D\nENCODING 18973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n9520\n3F80\n0400\nFFE0\n2080\n3C80\n2780\n2080\nENDCHAR\nSTARTCHAR U_4A1E\nENCODING 18974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\nFFE0\nA4A0\n1500\n2080\n1F00\n3F80\n2480\nFFE0\n8520\n9F20\nENDCHAR\nSTARTCHAR U_4A1F\nENCODING 18975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\n7FE0\n8420\n37C0\n9100\n47E0\n9100\n57C0\n2100\nCFE0\nENDCHAR\nSTARTCHAR U_4A20\nENCODING 18976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\n7FE0\n94A0\n3F00\n2900\n3FC0\n6440\nAA40\n3F40\n0080\nENDCHAR\nSTARTCHAR U_4A21\nENCODING 18977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n9540\n3F80\n0200\n3580\n8E20\nB520\n8CA0\nFFE0\nENDCHAR\nSTARTCHAR U_4A22\nENCODING 18978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n1100\n7FC0\n1500\nFFE0\n2500\n2880\n3FC0\nENDCHAR\nSTARTCHAR U_4A23\nENCODING 18979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\nA4A0\n1140\n7FC0\n1100\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_4A24\nENCODING 18980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n9520\n4480\n0200\nCF80\n4A80\n4F80\n6A80\n9FE0\nENDCHAR\nSTARTCHAR U_4A25\nENCODING 18981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n9520\n1200\n3FC0\n5200\n1FC0\n7100\n0E00\n71C0\nENDCHAR\nSTARTCHAR U_4A26\nENCODING 18982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n0400\nFFE0\nA4A0\n7FC0\n1100\nFFE0\n8420\n7FC0\n1100\n2300\nENDCHAR\nSTARTCHAR U_4A27\nENCODING 18983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\nA4A0\n1500\n2180\nFE60\n5080\n57E0\n3A40\nC180\nENDCHAR\nSTARTCHAR U_4A28\nENCODING 18984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\nA520\nCFA0\n2880\nEF80\n2800\n2FC0\n6840\n9FE0\nENDCHAR\nSTARTCHAR U_4A29\nENCODING 18985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n8420\n7480\n27E0\nFAA0\n13E0\n6AA0\nABE0\n2080\nENDCHAR\nSTARTCHAR U_4A2A\nENCODING 18986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n94A0\n27C0\n2540\nF7C0\n2100\n37C0\nE100\n0FE0\nENDCHAR\nSTARTCHAR U_4A2B\nENCODING 18987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n9520\nFFE0\n5540\n2480\nDF60\n2900\n0600\n7900\nENDCHAR\nSTARTCHAR U_4A2C\nENCODING 18988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n9520\n4880\n1DE0\nC880\n1DC0\n6AA0\n8880\n8880\nENDCHAR\nSTARTCHAR U_4A2D\nENCODING 18989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\n22A0\nFAA0\nA880\nFBE0\nAA20\n73E0\n0220\nFBE0\n5220\nFA60\nENDCHAR\nSTARTCHAR U_4A2E\nENCODING 18990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n9520\n7BC0\n1100\n7BC0\n1140\n7FE0\n0040\n7FC0\nENDCHAR\nSTARTCHAR U_4A2F\nENCODING 18991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nEFE0\nA540\nC7C0\nA540\nA7C0\nC540\n9920\nENDCHAR\nSTARTCHAR U_4A30\nENCODING 18992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n9520\n0280\n6FC0\n0280\nC7C0\n1540\nEFE0\n4100\nENDCHAR\nSTARTCHAR U_4A31\nENCODING 18993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n2800\nCFE0\n3540\nC7C0\n5A40\n4180\n4E60\nENDCHAR\nSTARTCHAR U_4A32\nENCODING 18994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9C0\n2140\nFA40\nABE0\nFAA0\n22A0\nFBE0\n4080\nF960\nA940\nAA60\nENDCHAR\nSTARTCHAR U_4A33\nENCODING 18995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n9520\n7BC0\n4A40\n7BC0\n4A40\n7BC0\n52A0\n9CE0\nENDCHAR\nSTARTCHAR U_4A34\nENCODING 18996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n9520\nD440\n5BE0\nFC40\n4A40\nFD40\n1040\nFCC0\nENDCHAR\nSTARTCHAR U_4A35\nENCODING 18997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n92A0\n4FE0\n2AA0\n8FE0\n6540\n1540\nEFE0\n4100\nENDCHAR\nSTARTCHAR U_4A36\nENCODING 18998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n9520\n2980\n5F40\n5540\n7FC0\n0A00\nFBC0\n4A40\nENDCHAR\nSTARTCHAR U_4A37\nENCODING 18999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n9520\n4880\nFDC0\n4900\nFFC0\n4A40\n7980\n8E60\nENDCHAR\nSTARTCHAR U_4A38\nENCODING 19000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n94A0\nEFE0\n5540\n6FE0\n5040\n57C0\n6540\n4BA0\nENDCHAR\nSTARTCHAR U_4A39\nENCODING 19001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n9520\n2280\n5FE0\nD540\n57C0\n5100\n57C0\n4AA0\nENDCHAR\nSTARTCHAR U_4A3A\nENCODING 19002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\nA520\n7FE0\n1100\nFFE0\nAAA0\n7BE0\n5140\nFBA0\nENDCHAR\nSTARTCHAR U_4A3B\nENCODING 19003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n71C0\n2080\nFBE0\nAAA0\n71C0\n5140\nFBE0\nAAA0\n71C0\n5140\n71C0\nENDCHAR\nSTARTCHAR U_4A3C\nENCODING 19004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nFB60\n2140\n7BE0\n2280\nFFE0\n4A80\n7BE0\n4940\n7880\n8B60\nENDCHAR\nSTARTCHAR U_4A3D\nENCODING 19005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n7BC0\n0A00\n7BC0\n0A00\n7FC0\n0080\n7F80\n4020\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_4A3E\nENCODING 19006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n4500\n5DC0\n4500\n5DC0\n4500\n5DC0\n4500\n8900\nENDCHAR\nSTARTCHAR U_4A3F\nENCODING 19007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n0A00\n71C0\n9120\n71C0\n1100\n71C0\n1100\n61C0\nENDCHAR\nSTARTCHAR U_4A40\nENCODING 19008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n0A00\n7BC0\n0A00\nFFE0\n2080\n3F80\n2080\n3F80\n1100\n60C0\nENDCHAR\nSTARTCHAR U_4A41\nENCODING 19009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n73C0\n1D00\n77C0\n1D00\n6600\n3DC0\nE700\n31C0\nE720\n3DE0\nENDCHAR\nSTARTCHAR U_4A42\nENCODING 19010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\n2140\n4220\nFE20\nABC0\nBA00\nABE0\nBA20\nAA40\nFE40\n8280\nENDCHAR\nSTARTCHAR U_4A43\nENCODING 19011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n2280\n4280\nFEA0\nABC0\nBA80\nAA80\nBA80\nAA80\nFFA0\n82E0\nENDCHAR\nSTARTCHAR U_4A44\nENCODING 19012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2220\n42A0\nFEA0\nAAA0\nBAA0\nAAA0\nBAA0\nAB40\nFD40\n8260\nENDCHAR\nSTARTCHAR U_4A45\nENCODING 19013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n23E0\n42A0\nFE80\nAA80\nBBE0\nAAA0\nBAA0\nAA40\nFEA0\n8520\nENDCHAR\nSTARTCHAR U_4A46\nENCODING 19014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\nFE80\n11E0\n2280\nFE80\nAAE0\nBA80\nAA80\nBAE0\nAA80\nFE80\nENDCHAR\nSTARTCHAR U_4A47\nENCODING 19015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFE80\n20E0\nFE80\nAA80\nBBE0\nAA20\nBA20\nAA20\nFFE0\n8220\nENDCHAR\nSTARTCHAR U_4A48\nENCODING 19016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n23E0\n4400\nFFC0\nAB40\nBAC0\nAFE0\nBA40\nABE0\nFC40\n8180\nENDCHAR\nSTARTCHAR U_4A49\nENCODING 19017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFCC0\n20A0\n43E0\nFE80\nABE0\nBAA0\nABE0\nBAA0\nABE0\nFEA0\n82A0\nENDCHAR\nSTARTCHAR U_4A4A\nENCODING 19018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n23E0\n4220\nFE00\nABE0\nBAA0\nABA0\nBAE0\nAA80\nFFA0\n8260\nENDCHAR\nSTARTCHAR U_4A4B\nENCODING 19019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n2FE0\n4A80\nFFE0\nAA80\nBA80\nAB80\nBEC0\nAAA0\nFE80\n9280\nENDCHAR\nSTARTCHAR U_4A4C\nENCODING 19020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFA80\n43E0\nFE80\nABC0\nBA80\nABC0\nBA80\nABE0\nFC00\n85A0\nENDCHAR\nSTARTCHAR U_4A4D\nENCODING 19021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2A40\n4420\nFFC0\nAA40\nBBC0\nAA40\nBBC0\nAAA0\nFCA0\nENDCHAR\nSTARTCHAR U_4A4E\nENCODING 19022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFA80\n2440\n4FE0\nF800\nAFE0\nD920\nAFE0\nAA40\nFA40\n05A0\nENDCHAR\nSTARTCHAR U_4A4F\nENCODING 19023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n27E0\n4140\nFBE0\nAAA0\nBBE0\nA840\nBBE0\nAA40\nABE0\nFCA0\nENDCHAR\nSTARTCHAR U_4A50\nENCODING 19024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF9E0\n5200\n2400\nFBE0\nA820\nF840\n2080\nF900\n2220\n23E0\nENDCHAR\nSTARTCHAR U_4A51\nENCODING 19025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5020\nFBE0\n5020\n73E0\n2200\nFA00\nABE0\nF820\n2020\nFA20\n21C0\nENDCHAR\nSTARTCHAR U_4A52\nENCODING 19026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\nFBE0\n5080\n7080\n2080\nFFE0\nA880\nF880\n2080\nF880\n2180\nENDCHAR\nSTARTCHAR U_4A53\nENCODING 19027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF900\n53E0\n7420\n2120\nF920\nAA20\nFAA0\n27A0\nF820\n20C0\nENDCHAR\nSTARTCHAR U_4A54\nENCODING 19028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29C0\nFD40\n2940\n3960\n1200\n7FE0\n5540\n7D40\n1080\nFD40\n1220\nENDCHAR\nSTARTCHAR U_4A55\nENCODING 19029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nF900\n72E0\n22A0\nFAA0\nAAA0\nFAA0\n23A0\nFAE0\n20A0\n2080\nENDCHAR\nSTARTCHAR U_4A56\nENCODING 19030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nF880\n52A0\n72A0\n22A0\nFA80\nACA0\nF840\n2080\nF900\n2600\nENDCHAR\nSTARTCHAR U_4A57\nENCODING 19031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\nF9E0\n5120\n7120\n21E0\nF920\nA920\nF9E0\n2120\nFA20\n2460\nENDCHAR\nSTARTCHAR U_4A58\nENCODING 19032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\nFBE0\n5080\n7100\n2240\nFE80\nAB00\nF940\n2240\nFEE0\n2720\nENDCHAR\nSTARTCHAR U_4A59\nENCODING 19033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF880\n57E0\n7080\n2100\nFA40\nAC80\nFB40\n2240\nFDE0\n2620\nENDCHAR\nSTARTCHAR U_4A5A\nENCODING 19034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n50E0\nFB80\n5280\n7280\n2280\nFBE0\nAA80\nFA80\n22A0\nFB60\n22A0\nENDCHAR\nSTARTCHAR U_4A5B\nENCODING 19035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF8A0\n5020\n7140\n2140\nFB40\nADC0\nF9A0\n2100\nFB20\n25E0\nENDCHAR\nSTARTCHAR U_4A5C\nENCODING 19036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nF880\n5080\n73E0\n22A0\nFAA0\nABE0\nFAA0\n22A0\nFAA0\n23E0\nENDCHAR\nSTARTCHAR U_4A5D\nENCODING 19037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5060\nFFC0\n5540\n7540\n2540\nFD40\nA940\nF940\n2AA0\nFBA0\n2820\nENDCHAR\nSTARTCHAR U_4A5E\nENCODING 19038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nF880\n5080\n70E0\n2080\nF880\nABE0\nFA20\n2220\nFA20\n23E0\nENDCHAR\nSTARTCHAR U_4A5F\nENCODING 19039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFFE0\n5080\n73E0\n20A0\nFBE0\nAA80\nFBE0\n20A0\nF940\n2620\nENDCHAR\nSTARTCHAR U_4A60\nENCODING 19040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\nF820\n5740\n71C0\n2240\nFBE0\nA940\nFEE0\n2300\nFC80\n2460\nENDCHAR\nSTARTCHAR U_4A61\nENCODING 19041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5180\nF920\n57E0\n7100\n2540\nFB40\nA9A0\nF900\n2280\nFA40\n2420\nENDCHAR\nSTARTCHAR U_4A62\nENCODING 19042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5200\nFA60\n5280\n7F80\n22E0\nFAA0\nABA0\nFEA0\n22A0\nFAA0\n24A0\nENDCHAR\nSTARTCHAR U_4A63\nENCODING 19043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nF880\n5140\n2220\nFDC0\nA880\nFBE0\n2080\nFAC0\n24A0\n2180\nENDCHAR\nSTARTCHAR U_4A64\nENCODING 19044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\nFBC0\n5240\n73C0\n2240\nFBC0\nAA40\nFBC0\n2180\nFAA0\n24E0\nENDCHAR\nSTARTCHAR U_4A65\nENCODING 19045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\nF8E0\n5740\n2140\nFA60\nAF40\nF940\n2540\nF3E0\n2500\n28E0\nENDCHAR\nSTARTCHAR U_4A66\nENCODING 19046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\nD680\n5180\n4740\n5100\n7FC0\n1100\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_4A67\nENCODING 19047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF880\n57E0\n7000\n23C0\nF800\nABC0\nF800\n23C0\nFA40\n23C0\nENDCHAR\nSTARTCHAR U_4A68\nENCODING 19048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nFA00\n53C0\n7200\n23C0\nFA00\nAFE0\nFAA0\n22C0\nFB40\n2220\nENDCHAR\nSTARTCHAR U_4A69\nENCODING 19049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFFE0\n5420\n7200\n23E0\nFDA0\nABA0\nF9E0\n2280\nFAA0\n24E0\nENDCHAR\nSTARTCHAR U_4A6A\nENCODING 19050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFFE0\n5420\n73C0\n2240\nFBC0\nAA00\nFBC0\n2240\nFA40\n23C0\nENDCHAR\nSTARTCHAR U_4A6B\nENCODING 19051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nF880\n53E0\n72A0\nFAA0\nABE0\nFBE0\n22A0\nFAA0\n22A0\n2220\nENDCHAR\nSTARTCHAR U_4A6C\nENCODING 19052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFBE0\n5080\n73C0\nF900\nAFE0\nFAA0\n25C0\nF880\n23E0\n2080\nENDCHAR\nSTARTCHAR U_4A6D\nENCODING 19053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF7E0\n5180\n7240\n27E0\nF840\nABC0\nFAC0\n23C0\nF840\n20C0\nENDCHAR\nSTARTCHAR U_4A6E\nENCODING 19054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5200\nFFC0\n5440\n7780\n2080\nFFE0\nB520\nF3C0\n2540\nF920\n2300\nENDCHAR\nSTARTCHAR U_4A6F\nENCODING 19055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\n57E0\nF900\n5200\nFAE0\nA9A0\nFB40\n21A0\nFAA0\n2000\n27E0\nENDCHAR\nSTARTCHAR U_4A70\nENCODING 19056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53C0\nFA40\n53C0\n7000\n27E0\nFAC0\nAB40\nFAC0\n2340\nFFE0\n2040\nENDCHAR\nSTARTCHAR U_4A71\nENCODING 19057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFA80\n5440\n7BA0\n2000\nFF20\nADA0\nFFA0\n25A0\nFF20\n2560\nENDCHAR\nSTARTCHAR U_4A72\nENCODING 19058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFFE0\n5540\n77E0\nFD40\nADC0\nFC00\n27C0\nFD40\n2480\n2B60\nENDCHAR\nSTARTCHAR U_4A73\nENCODING 19059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFBE0\n52A0\n7480\n23C0\nF940\nAA20\nF9C0\n2140\nF880\n2140\nENDCHAR\nSTARTCHAR U_4A74\nENCODING 19060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5200\nFAE0\n57A0\n72A0\n22E0\nFFA0\nADA0\nFDE0\n27A0\nF920\n2260\nENDCHAR\nSTARTCHAR U_4A75\nENCODING 19061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nFAA0\n5080\n73E0\n22A0\nFBE0\nAAA0\nFBE0\n2080\nFBE0\n2080\nENDCHAR\nSTARTCHAR U_4A76\nENCODING 19062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n52A0\nFAA0\n53E0\n7080\n27E0\nF880\nABE0\nFAA0\n23E0\nF8A0\n23E0\nENDCHAR\nSTARTCHAR U_4A77\nENCODING 19063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFFE0\n5240\n77E0\n24A0\nFFE0\nA900\nF9E0\n2220\nFA20\n24C0\nENDCHAR\nSTARTCHAR U_4A78\nENCODING 19064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5240\nFFE0\n5240\n77E0\n2240\nFBC0\nAA40\nFBC0\n2240\nFFE0\n2040\nENDCHAR\nSTARTCHAR U_4A79\nENCODING 19065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\nF800\n53C0\n7240\n23C0\nF800\nAFE0\nFD60\n27E0\nFCA0\n24A0\nENDCHAR\nSTARTCHAR U_4A7A\nENCODING 19066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFA40\n5520\n7A80\n27C0\nF800\nAFE0\nFDA0\n2360\nFDA0\n2360\nENDCHAR\nSTARTCHAR U_4A7B\nENCODING 19067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53C0\nFE80\n53C0\n7280\n23C0\nFA80\nABE0\nF820\n22A0\nFD20\n20C0\nENDCHAR\nSTARTCHAR U_4A7C\nENCODING 19068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5040\nFAC0\n5120\n76C0\n23A0\nFC40\nAAE0\nFA40\n22E0\nFE40\n21E0\nENDCHAR\nSTARTCHAR U_4A7D\nENCODING 19069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\nFC00\n55C0\n7540\n25C0\nFC00\nAFE0\nFEA0\n27E0\nFC00\n27E0\nENDCHAR\nSTARTCHAR U_4A7E\nENCODING 19070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFFE0\n5400\n7540\n27E0\nFD40\nAD40\nFDC0\n2400\nF940\n2AA0\nENDCHAR\nSTARTCHAR U_4A7F\nENCODING 19071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFFE0\n5540\n7FE0\n2440\nFFC0\nAC40\nFFC0\n2440\nFFC0\n2C60\nENDCHAR\nSTARTCHAR U_4A80\nENCODING 19072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFFE0\n5420\n73C0\n2240\nFBE0\nAA20\nFBE0\n2520\nF440\n2BC0\nENDCHAR\nSTARTCHAR U_4A81\nENCODING 19073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n52A0\nFAC0\n57E0\n7280\n27E0\nF900\nABC0\nF900\n27E0\nFA80\n2460\nENDCHAR\nSTARTCHAR U_4A82\nENCODING 19074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\nFFE0\n5280\n7280\n2FE0\nFAA0\nAAA0\nFBA0\n26C0\nFAA0\n2280\nENDCHAR\nSTARTCHAR U_4A83\nENCODING 19075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5240\nFFC0\n5040\n7760\n2580\nFF20\nA8A0\nFFA0\n2240\nFDA0\n2320\nENDCHAR\nSTARTCHAR U_4A84\nENCODING 19076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5140\nFBE0\n5140\n77E0\n2080\nFBE0\nAAA0\nFBE0\n22A0\nFBE0\n2620\nENDCHAR\nSTARTCHAR U_4A85\nENCODING 19077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\nFD20\n57E0\n7200\n23E0\nFD20\nABA0\nFAA0\n23A0\nF920\n2360\nENDCHAR\nSTARTCHAR U_4A86\nENCODING 19078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\nFFE0\n52A0\n7FE0\n2AA0\nFFE0\nAA40\nFA40\n23C0\nF940\n27E0\nENDCHAR\nSTARTCHAR U_4A87\nENCODING 19079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5240\nFFE0\n5240\n2120\nFFE0\nA540\nFFC0\n2540\nFFE0\n2240\n20C0\nENDCHAR\nSTARTCHAR U_4A88\nENCODING 19080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5040\nFAE0\n56A0\n72E0\n2440\nFAE0\nAAA0\nFAA0\n26E0\nFA00\n21E0\nENDCHAR\nSTARTCHAR U_4A89\nENCODING 19081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n52A0\nFD40\n52A0\n7FE0\n2920\nFAA0\nAFE0\nF940\n2DC0\nFB40\n2DA0\nENDCHAR\nSTARTCHAR U_4A8A\nENCODING 19082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n54E0\nFF80\n52E0\n7F20\n2AE0\nFA80\nAEE0\nFA80\n2EE0\nFA80\n2AE0\nENDCHAR\nSTARTCHAR U_4A8B\nENCODING 19083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFBE0\n56A0\n73E0\n2080\nFFE0\nAAC0\nFB40\n2BC0\nFE20\n21E0\nENDCHAR\nSTARTCHAR U_4A8C\nENCODING 19084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53C0\nFC80\n57E0\n7420\n27E0\nFA40\nABE0\nFD20\n27C0\nFAA0\n24E0\nENDCHAR\nSTARTCHAR U_4A8D\nENCODING 19085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\nFAA0\n4EE0\n7AA0\n2FE0\nF920\nAFE0\nFAA0\n2BA0\nFD60\n2920\nENDCHAR\nSTARTCHAR U_4A8E\nENCODING 19086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n54A0\nFFE0\n5240\n77E0\n2240\nFBE0\nAA40\nFFE0\n25A0\nFE60\n25A0\nENDCHAR\nSTARTCHAR U_4A8F\nENCODING 19087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n2BE0\nFEA0\n8AA0\nFAA0\n22A0\nFB60\nA220\nFA20\n2260\nENDCHAR\nSTARTCHAR U_4A90\nENCODING 19088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF0A0\n5220\nFA40\n5240\n7660\n2AA0\n7280\nA2A0\nF920\n26C0\nENDCHAR\nSTARTCHAR U_4A91\nENCODING 19089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7880\n2BE0\nFC20\n3000\n4A40\n3240\n7A80\n5320\nFE20\n13C0\nENDCHAR\nSTARTCHAR U_4A92\nENCODING 19090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7880\n2BE0\nFC80\n0080\n7BE0\n4880\n7880\n5080\nFC80\n13E0\nENDCHAR\nSTARTCHAR U_4A93\nENCODING 19091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7880\n48E0\nFC80\n0080\n7880\n4BE0\nFA20\nA220\nFA20\n23E0\nENDCHAR\nSTARTCHAR U_4A94\nENCODING 19092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n78A0\n4BE0\nF880\n03E0\n7AA0\n4BE0\nFAA0\nA3E0\nFAA0\n22A0\nENDCHAR\nSTARTCHAR U_4A95\nENCODING 19093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7A00\n4BE0\nFD20\n03A0\n7920\n4BE0\nF920\nA3A0\nF920\n2060\nENDCHAR\nSTARTCHAR U_4A96\nENCODING 19094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n79E0\n2B20\nFDE0\n0120\n79E0\n4900\n7BE0\n5140\nFC80\n1360\nENDCHAR\nSTARTCHAR U_4A97\nENCODING 19095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nF760\n5520\nFF60\n5400\n76E0\n24A0\nF6A0\nA440\nF4A0\n2520\nENDCHAR\nSTARTCHAR U_4A98\nENCODING 19096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA20\n2BE0\nFE20\n4BE0\n7800\n23E0\nF880\nA2E0\nFA80\n25E0\nENDCHAR\nSTARTCHAR U_4A99\nENCODING 19097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7BE0\n2880\nFFE0\n02A0\n7BE0\n4AA0\n7840\n13E0\nFD40\n10C0\nENDCHAR\nSTARTCHAR U_4A9A\nENCODING 19098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n2BC0\nFA40\n4BC0\n7800\n27E0\nFDA0\nA360\nFDA0\n2360\nENDCHAR\nSTARTCHAR U_4A9B\nENCODING 19099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nFB80\n2AA0\nFFE0\n49C0\n7AA0\n23E0\nFAA0\nA3E0\nFAA0\n23E0\nENDCHAR\nSTARTCHAR U_4A9C\nENCODING 19100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n7BE0\n2EA0\nFB40\n4BE0\n7A00\n13E0\nFA00\n55E0\nF920\n11E0\nENDCHAR\nSTARTCHAR U_4A9D\nENCODING 19101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2240\nF7E0\n5240\nFBE0\n5680\n73E0\n2280\n77E0\nA240\nF180\n2660\nENDCHAR\nSTARTCHAR U_4A9E\nENCODING 19102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n0400\n7FC0\n0A00\n3180\nCA60\n3B80\n0A00\n3B80\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_4A9F\nENCODING 19103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFA80\n2100\nFEE0\nAA80\nAEC0\nAA80\nBEC0\n2280\n27E0\nENDCHAR\nSTARTCHAR U_4AA0\nENCODING 19104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFDE0\n92A0\nFC80\n5560\n9200\n7BC0\n0A00\n7BC0\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_4AA1\nENCODING 19105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF5E0\nA2A0\nFC80\n6B60\nA000\n79C0\n0900\n79C0\n0900\nFFE0\nENDCHAR\nSTARTCHAR U_4AA2\nENCODING 19106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n35E0\nE0A0\nA540\nA220\nF940\n2B60\n2940\n6B60\nA140\n23E0\nENDCHAR\nSTARTCHAR U_4AA3\nENCODING 19107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFDE0\n22A0\nFC80\nA940\nA940\nBF60\n2140\n6760\nA140\n27E0\nENDCHAR\nSTARTCHAR U_4AA4\nENCODING 19108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5060\n5F80\nD540\n5FE0\nD380\n5540\n5FE0\nD540\n5FC0\n7540\nC7C0\nENDCHAR\nSTARTCHAR U_4AA5\nENCODING 19109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n3A20\n2140\nF880\n8B60\n7140\n5360\n7140\n5360\n7140\n8BE0\nENDCHAR\nSTARTCHAR U_4AA6\nENCODING 19110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFDE0\n4880\n3080\nFC80\n0080\n7880\n4880\n7880\n4880\n7BE0\nENDCHAR\nSTARTCHAR U_4AA7\nENCODING 19111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFC80\n4A80\n32E0\nFFA0\n02A0\n7AE0\n4A80\n7A20\n4A20\n7BE0\nENDCHAR\nSTARTCHAR U_4AA8\nENCODING 19112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFD00\n4BE0\n3220\nFC20\n0120\n78A0\n48A0\n7820\n4820\n78C0\nENDCHAR\nSTARTCHAR U_4AA9\nENCODING 19113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n5140\n5220\nFD00\n0080\nFBE0\n8820\nF840\n8840\nF880\nENDCHAR\nSTARTCHAR U_4AAA\nENCODING 19114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nFDE0\n2520\nC9E0\n0400\n3FC0\n0900\nFFE0\n1280\n1480\n1F80\nENDCHAR\nSTARTCHAR U_4AAB\nENCODING 19115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF940\n52A0\n2140\nFBE0\n0000\nFBE0\n8880\nF880\n8880\nFBE0\nENDCHAR\nSTARTCHAR U_4AAC\nENCODING 19116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n5080\n57E0\nFC20\n03C0\n7040\n5080\n77E0\n5080\n7180\nENDCHAR\nSTARTCHAR U_4AAD\nENCODING 19117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n5240\n2180\nFFE0\n0000\n7BC0\n4A40\n7BC0\n4A40\n7BC0\nENDCHAR\nSTARTCHAR U_4AAE\nENCODING 19118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nFBE0\n9520\n63A0\nF960\n0200\nF3E0\n9520\nF7E0\n9120\nF260\nENDCHAR\nSTARTCHAR U_4AAF\nENCODING 19119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAAA0\n71C0\n5140\n7FE0\n8420\n7FC0\n1100\nFFE0\n1280\n1480\n1F80\nENDCHAR\nSTARTCHAR U_4AB0\nENCODING 19120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n9440\n6280\nFFE0\n0440\nF7C0\n9440\nF7C0\n9D60\nF3C0\nENDCHAR\nSTARTCHAR U_4AB1\nENCODING 19121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n0900\n0BE0\n0A20\nFBE0\n8220\n8BE0\n9220\nA3E0\nC140\n8220\nENDCHAR\nSTARTCHAR U_4AB2\nENCODING 19122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\nFD00\n53E0\n5220\n53E0\n5220\n53E0\n5620\n5BE0\n9140\n8220\nENDCHAR\nSTARTCHAR U_4AB3\nENCODING 19123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n2900\nFFE0\n2A20\n2BE0\n7A20\n23E0\n2220\n43E0\n4140\n8220\nENDCHAR\nSTARTCHAR U_4AB4\nENCODING 19124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF900\nABC0\nAA40\n23C0\n3240\n33C0\n5240\n57C0\n5A40\n9420\nENDCHAR\nSTARTCHAR U_4AB5\nENCODING 19125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5100\n53E0\n9220\nFBE0\n3220\n53E0\n5220\n53E0\n9140\n3220\nENDCHAR\nSTARTCHAR U_4AB6\nENCODING 19126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\n7880\n4BE0\n7A20\n4BE0\n4A20\n7BE0\n4A20\n5FE0\nE140\n0220\nENDCHAR\nSTARTCHAR U_4AB7\nENCODING 19127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n7C80\n45E0\nF520\n55E0\n5520\n55E0\n7520\n05E0\n04C0\n1920\nENDCHAR\nSTARTCHAR U_4AB8\nENCODING 19128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8880\n8BE0\nFA20\nA3E0\nA220\nFBE0\nA220\n93E0\nD540\n8A20\nENDCHAR\nSTARTCHAR U_4AB9\nENCODING 19129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\nFBE0\n2080\n73E0\nAA20\nABE0\nA220\n23E0\n0140\nF940\n0220\nENDCHAR\nSTARTCHAR U_4ABA\nENCODING 19130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2100\nFBE0\n2220\n23E0\nFA20\n23E0\n4A20\n9BE0\nE940\n0220\nENDCHAR\nSTARTCHAR U_4ABB\nENCODING 19131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n47C0\n5200\nEFC0\n0440\n5740\nFC40\n5740\n5540\n9280\n1440\nENDCHAR\nSTARTCHAR U_4ABC\nENCODING 19132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nA880\nA900\nABC0\nFA40\n23C0\nAA40\nABC0\nAA40\nFBC0\n0420\nENDCHAR\nSTARTCHAR U_4ABD\nENCODING 19133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4880\n7BE0\n0220\nFFE0\n2220\n7BE0\n0A20\n0BE0\n0940\n3220\nENDCHAR\nSTARTCHAR U_4ABE\nENCODING 19134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n2100\nFAC0\n8C20\nF880\n8B00\nF840\n8980\nFA20\n50C0\n8B00\nENDCHAR\nSTARTCHAR U_4ABF\nENCODING 19135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n2080\nFBE0\n8A20\nDBE0\nAA20\nABE0\nDA20\n8BE0\nF940\n0220\nENDCHAR\nSTARTCHAR U_4AC0\nENCODING 19136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8880\n8BE0\nFA20\n8BE0\n8A20\nFBE0\n8220\nABE0\n9140\nCA20\nENDCHAR\nSTARTCHAR U_4AC1\nENCODING 19137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n4080\nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8940\n0220\nENDCHAR\nSTARTCHAR U_4AC2\nENCODING 19138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n7880\n93E0\n6220\n53E0\n9A20\n27E0\n5A20\n13E0\n6140\n8220\nENDCHAR\nSTARTCHAR U_4AC3\nENCODING 19139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8080\nF3E0\n8220\nF3E0\nA220\nABE0\nB220\nABE0\nA540\nB220\nENDCHAR\nSTARTCHAR U_4AC4\nENCODING 19140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8BE0\n5080\n0100\nFBE0\n8A20\n8BA0\nFAE0\n5220\n53E0\n5940\n9220\nENDCHAR\nSTARTCHAR U_4AC5\nENCODING 19141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF880\n8BE0\n2220\nFBE0\n2220\n73E0\n6A20\nABE0\n2140\n2220\nENDCHAR\nSTARTCHAR U_4AC6\nENCODING 19142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0DE0\n0A80\n7DE0\n4920\n4BE0\n7520\n55E0\n5520\n75E0\n8AC0\n8320\nENDCHAR\nSTARTCHAR U_4AC7\nENCODING 19143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n0900\nF3E0\n0A20\nF3E0\n6220\n93E0\nFA20\n93E0\nF940\n9220\nENDCHAR\nSTARTCHAR U_4AC8\nENCODING 19144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nA880\nFBE0\n5220\n8BE0\n7220\n03E0\nFA20\n13E0\n1140\n2220\nENDCHAR\nSTARTCHAR U_4AC9\nENCODING 19145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nA880\n53E0\n2220\nD3E0\n2A20\n5BE0\n2A20\nCBE0\n3140\n1220\nENDCHAR\nSTARTCHAR U_4ACA\nENCODING 19146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n1080\n23E0\n7220\nABE0\n2220\nFBE0\n8A20\n8BE0\nF940\n8A20\nENDCHAR\nSTARTCHAR U_4ACB\nENCODING 19147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n2100\nFBC0\n7240\nABC0\n2240\nFBC0\n5240\n93C0\n7240\n8C20\nENDCHAR\nSTARTCHAR U_4ACC\nENCODING 19148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\nF900\nABE0\nFA20\nABE0\nFA20\n43E0\nA220\nFBE0\n2140\n2220\nENDCHAR\nSTARTCHAR U_4ACD\nENCODING 19149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BE0\n2900\nEFE0\n2A20\n6FE0\n2A20\n6FE0\nAA20\n2BE0\n4940\n8A20\nENDCHAR\nSTARTCHAR U_4ACE\nENCODING 19150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\nB480\n49E0\n4920\nB5E0\n0120\nFDE0\nB520\n49E0\n48C0\nB520\nENDCHAR\nSTARTCHAR U_4ACF\nENCODING 19151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4BE0\nFD00\n4BE0\n7A20\n4BE0\n7A20\n4BE0\nFE20\n4BE0\n4940\n8620\nENDCHAR\nSTARTCHAR U_4AD0\nENCODING 19152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4BE0\n4900\nFFE0\n4A20\n7BE0\nDE20\nDBE0\n6A20\n6BE0\n4940\n4A20\nENDCHAR\nSTARTCHAR U_4AD1\nENCODING 19153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF880\n23E0\n5220\nFFE0\n0A20\nEBE0\nAA20\nEBE0\n0940\n1A20\nENDCHAR\nSTARTCHAR U_4AD2\nENCODING 19154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\nA100\nFBE0\nA220\n97E0\nCA20\nFBE0\n8A20\nFBE0\n8940\nFA20\nENDCHAR\nSTARTCHAR U_4AD3\nENCODING 19155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n2100\nFBE0\n4A20\n53E0\nFA20\n03E0\nFA20\n8BE0\n8940\nFA20\nENDCHAR\nSTARTCHAR U_4AD4\nENCODING 19156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\nFC80\n55E0\nF620\n47E0\nEA20\n53E0\nFE20\n11E0\n2940\nC620\nENDCHAR\nSTARTCHAR U_4AD5\nENCODING 19157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF900\n53E0\n5220\nFFE0\nA620\n7BE0\nAA20\nABE0\nB940\n2220\nENDCHAR\nSTARTCHAR U_4AD6\nENCODING 19158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\nFC80\n49E0\n7920\n49E0\n7920\n49E0\nFD20\nA9E0\nC4C0\nFD20\nENDCHAR\nSTARTCHAR U_4AD7\nENCODING 19159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEDE0\nA480\nA7E0\nEA20\n83E0\nEE20\n8BE0\nEA20\n8BE0\n8540\n9A20\nENDCHAR\nSTARTCHAR U_4AD8\nENCODING 19160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4880\n79E0\n4920\n79E0\n4120\nBDE0\n5520\n6DE0\n74C0\n0920\nENDCHAR\nSTARTCHAR U_4AD9\nENCODING 19161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF880\n23E0\n5220\nFBE0\n5220\n23E0\nFA20\n73E0\nB140\nAA20\nENDCHAR\nSTARTCHAR U_4ADA\nENCODING 19162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4480\n75E0\n5520\n55E0\nFD20\n85E0\nBD20\nADE0\nBCC0\n8520\nENDCHAR\nSTARTCHAR U_4ADB\nENCODING 19163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n3C80\n45E0\n7F20\nD1E0\n5D20\n69E0\n7F20\n49E0\n54C0\n6320\nENDCHAR\nSTARTCHAR U_4ADC\nENCODING 19164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nA880\nBBE0\nEA20\nBBE0\nAA20\nEBE0\nBA20\nABE0\nF940\n8A20\nENDCHAR\nSTARTCHAR U_4ADD\nENCODING 19165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1BE0\nE100\n23E0\nFA20\n73E0\nAA20\nFBE0\n8A20\nFBE0\n8940\nFA20\nENDCHAR\nSTARTCHAR U_4ADE\nENCODING 19166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8BE0\n5080\nFBE0\n2220\nFBE0\n2220\n23E0\nFA20\n03E0\nA940\nAA20\nENDCHAR\nSTARTCHAR U_4ADF\nENCODING 19167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4900\n7BE0\n0220\nFBE0\n8A20\nFBE0\n8A20\nFBE0\n5140\n8A20\nENDCHAR\nSTARTCHAR U_4AE0\nENCODING 19168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BE0\n5080\nABE0\n5220\nFFE0\n2220\n7BE0\nA620\n7BE0\n4940\n7A20\nENDCHAR\nSTARTCHAR U_4AE1\nENCODING 19169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n51E0\nFC80\n51E0\nFD20\n55E0\nFF20\n55E0\nFD20\n51E0\nD8C0\nD520\nENDCHAR\nSTARTCHAR U_4AE2\nENCODING 19170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n9080\nBFE0\nAA20\nBDE0\nA920\nADE0\nA120\nADE0\n5480\nA720\nENDCHAR\nSTARTCHAR U_4AE3\nENCODING 19171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BE0\nC900\nABE0\n5220\n9BE0\n7220\n8BE0\n7620\n23E0\nFD40\n4A20\nENDCHAR\nSTARTCHAR U_4AE4\nENCODING 19172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4240\nBDE0\n3520\n2DA0\n3D60\n1120\n7DE0\n1040\n28C0\n4520\nENDCHAR\nSTARTCHAR U_4AE5\nENCODING 19173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n47E0\nF900\nABC0\nFA40\nABC0\nFA40\n2BC0\n7640\n6BC0\nA420\n9FE0\nENDCHAR\nSTARTCHAR U_4AE6\nENCODING 19174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF900\n23E0\nFE20\n23E0\n4A20\nFFE0\n0220\nFFE0\nAB40\nFE20\nENDCHAR\nSTARTCHAR U_4AE7\nENCODING 19175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF900\n8BE0\nFA20\n8BE0\nFA20\n23E0\nDA20\nABE0\nF940\n2220\nENDCHAR\nSTARTCHAR U_4AE8\nENCODING 19176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n24E0\nF440\n27E0\nF5A0\n29E0\nF5A0\n42E0\n72A0\n55E0\n94A0\nB920\nENDCHAR\nSTARTCHAR U_4AE9\nENCODING 19177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n7880\n49E0\n9520\nFFE0\n5520\nA9E0\n1520\n61E0\n08C0\n7120\nENDCHAR\nSTARTCHAR U_4AEA\nENCODING 19178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFE80\n11E0\nBB20\n55E0\nBB20\n55E0\nBB20\n11E0\n2880\nC520\nENDCHAR\nSTARTCHAR U_4AEB\nENCODING 19179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF900\nABC0\nFE40\nABC0\nFA40\nABC0\nFA40\n53C0\n7140\nCA20\nENDCHAR\nSTARTCHAR U_4AEC\nENCODING 19180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\nA880\nFFE0\n5520\nB7E0\n2520\n79E0\n4920\n79E0\n4880\n7920\nENDCHAR\nSTARTCHAR U_4AED\nENCODING 19181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n7C80\n55E0\nFF20\n01E0\n7D20\n45E0\n5520\n55E0\n2880\n4520\nENDCHAR\nSTARTCHAR U_4AEE\nENCODING 19182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\n0880\nFFE0\n0920\nF5E0\n5520\nEDE0\n0920\nFFE0\n4880\n1920\nENDCHAR\nSTARTCHAR U_4AEF\nENCODING 19183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n2F40\nF4E0\n4AA0\n7FE0\n52A0\n5EE0\n5AA0\n5EE0\n9240\nB6A0\nENDCHAR\nSTARTCHAR U_4AF0\nENCODING 19184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF920\n4540\nFFE0\n9540\nF920\n9540\nF7E0\n9940\nF5E0\n5240\n9440\nENDCHAR\nSTARTCHAR U_4AF1\nENCODING 19185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\n2040\nFEE0\nAAA0\nAAE0\n00A0\nFEE0\n20A0\nFEE0\nAA40\nAAA0\nENDCHAR\nSTARTCHAR U_4AF2\nENCODING 19186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n15E0\n7E80\n51E0\n7920\n4BE0\n7520\nD5E0\n7B20\n29E0\nA2A0\n9F20\nENDCHAR\nSTARTCHAR U_4AF3\nENCODING 19187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nAA80\nFFE0\n4120\n7FE0\n9120\n7DE0\n5520\n7DE0\n14C0\n7B20\nENDCHAR\nSTARTCHAR U_4AF4\nENCODING 19188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\nFE80\n75E0\nAF20\n25E0\n7D20\n01E0\nFF20\n39E0\n5540\n9220\nENDCHAR\nSTARTCHAR U_4AF5\nENCODING 19189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFC80\nA5E0\nFD20\n11E0\nFD20\nABE0\n4520\nFDE0\n48A0\n9920\nENDCHAR\nSTARTCHAR U_4AF6\nENCODING 19190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42E0\nEF40\n52E0\n6BA0\nCEE0\n52A0\n6AE0\n10A0\nFEE0\n2840\nC5A0\nENDCHAR\nSTARTCHAR U_4AF7\nENCODING 19191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n2080\nF9E0\nA920\nFDE0\n2120\nF9E0\nA920\nF9E0\n2120\nFE20\nENDCHAR\nSTARTCHAR U_4AF8\nENCODING 19192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\n42A0\n7EA0\n4AA0\n7EA0\n4AA0\n7F20\n4A60\n4F20\nB0E0\nENDCHAR\nSTARTCHAR U_4AF9\nENCODING 19193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C00\n47E0\n7C80\n5480\n7C80\n5480\n7C80\n57E0\n5C00\n6620\n81E0\nENDCHAR\nSTARTCHAR U_4AFA\nENCODING 19194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF7C0\n2540\n27C0\n4540\n57C0\n9540\nAD40\n7BA0\n08A0\nENDCHAR\nSTARTCHAR U_4AFB\nENCODING 19195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C00\n45C0\n7D40\n5540\n7DC0\n5540\n7D40\n55C0\n5A00\nBD20\n80E0\nENDCHAR\nSTARTCHAR U_4AFC\nENCODING 19196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n4D00\n77C0\n5540\n7D40\n57E0\n7D40\n5520\n5E20\n7400\n83E0\nENDCHAR\nSTARTCHAR U_4AFD\nENCODING 19197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C00\n45E0\n7C80\n57E0\n7C80\n57E0\n7C80\n54E0\n5C00\n7220\n81E0\nENDCHAR\nSTARTCHAR U_4AFE\nENCODING 19198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n4440\n7D20\n5740\n7DA0\n5700\n7D20\n54E0\n5C00\nB220\n81E0\nENDCHAR\nSTARTCHAR U_4AFF\nENCODING 19199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C00\n47E0\n7CA0\n5520\n7E60\n5400\n7DE0\n5520\n5DE0\n7300\n80E0\nENDCHAR\nSTARTCHAR U_4B00\nENCODING 19200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n8AE0\nFDA0\nADA0\nFAA0\nADA0\nFDA0\nAAA0\nB960\nC400\n83E0\nENDCHAR\nSTARTCHAR U_4B01\nENCODING 19201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n4440\n7DE0\n5620\n7D00\n55C0\n7D00\n5520\n55E0\n7A00\n81E0\nENDCHAR\nSTARTCHAR U_4B02\nENCODING 19202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8A0\n8BE0\nFA80\nAAA0\nFAA0\nAA40\nFAC0\nAB20\nBA20\nC400\n83E0\nENDCHAR\nSTARTCHAR U_4B03\nENCODING 19203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C00\n4480\n7FE0\n5440\n7D40\n5540\n7C80\n57E0\n5C00\n6220\n81E0\nENDCHAR\nSTARTCHAR U_4B04\nENCODING 19204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8A0\n8BE0\nFA80\nAA80\nFBA0\nAAC0\nFA40\nACA0\nBB00\nE420\n83E0\nENDCHAR\nSTARTCHAR U_4B05\nENCODING 19205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8FC0\nF940\nA940\nFA40\nAFE0\nFB60\nADA0\nB960\nE400\n83E0\nENDCHAR\nSTARTCHAR U_4B06\nENCODING 19206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF920\n8E20\nFAA0\nAFA0\nFAA0\nAEA0\nFBA0\nAA20\nAA60\nB400\n83E0\nENDCHAR\nSTARTCHAR U_4B07\nENCODING 19207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97C0\n6440\nF7C0\n9540\n97C0\nF540\n47C0\n6540\n65C0\nB660\nA820\nENDCHAR\nSTARTCHAR U_4B08\nENCODING 19208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n8A20\nFFE0\nAA20\nFBE0\nA940\nF940\nA940\nBA60\nC420\n83E0\nENDCHAR\nSTARTCHAR U_4B09\nENCODING 19209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n89C0\nF880\nABE0\nF940\nAB60\nFD40\nA940\nBA40\nE420\n83E0\nENDCHAR\nSTARTCHAR U_4B0A\nENCODING 19210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8FE0\nF880\nAAA0\nFAA0\nADC0\nF940\nAA20\nB400\nEA20\n81E0\nENDCHAR\nSTARTCHAR U_4B0B\nENCODING 19211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n45C0\n7C80\n57E0\n7D40\n56A0\n7DC0\n5740\n5C80\n7340\n81E0\nENDCHAR\nSTARTCHAR U_4B0C\nENCODING 19212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n7E20\n53E0\n7E20\n53E0\n5EA0\n43E0\n7AA0\nAAE0\nAB20\n4C20\nENDCHAR\nSTARTCHAR U_4B0D\nENCODING 19213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n8FE0\nFAA0\nAAA0\nFD20\nA940\nFAA0\nAE40\nB9C0\nC420\n83E0\nENDCHAR\nSTARTCHAR U_4B0E\nENCODING 19214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8A0\n8FE0\nF880\nAFA0\nFD40\nAF40\nF840\nAFA0\nB8A0\nC400\n83E0\nENDCHAR\nSTARTCHAR U_4B0F\nENCODING 19215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n47E0\n7D40\n5480\n7FE0\n5400\n7DC0\n5540\n5DC0\n7220\n81E0\nENDCHAR\nSTARTCHAR U_4B10\nENCODING 19216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4480\n7FE0\n55C0\n7EA0\n57E0\n7D40\n5480\n5F60\n6400\n83E0\nENDCHAR\nSTARTCHAR U_4B11\nENCODING 19217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8AA0\nFBE0\nAAA0\nFBE0\nA940\nF9C0\nA940\nA9C0\nF540\n93E0\nENDCHAR\nSTARTCHAR U_4B12\nENCODING 19218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8FE0\nFAA0\nAD40\nF980\nAE60\nFBC0\nAA40\nB980\nE640\n83E0\nENDCHAR\nSTARTCHAR U_4B13\nENCODING 19219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF800\n8880\nFBE0\nA940\nFBE0\nA940\nF9C0\nA940\nB9C0\nC420\n83E0\nENDCHAR\nSTARTCHAR U_4B14\nENCODING 19220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8940\nFBE0\nAC00\nFBA0\nAAA0\nFBA0\nAAA0\nBAA0\nC400\n83E0\nENDCHAR\nSTARTCHAR U_4B15\nENCODING 19221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\nAAA0\nFBE0\nAAA0\nFBE0\nAAA0\nBAE0\nCB20\n8C20\nENDCHAR\nSTARTCHAR U_4B16\nENCODING 19222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8BE0\nFAA0\nAB20\nFBE0\nA880\nFBE0\nA880\nBBE0\nC400\n83E0\nENDCHAR\nSTARTCHAR U_4B17\nENCODING 19223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4A20\n7BE0\n4AA0\nFFE0\n42A0\nFBE0\n5AA0\nAAA0\n4BE0\n3420\nENDCHAR\nSTARTCHAR U_4B18\nENCODING 19224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8FE0\nF940\nA940\nFBE0\nAA20\nFBA0\nAAA0\nBBA0\nEA20\n87E0\nENDCHAR\nSTARTCHAR U_4B19\nENCODING 19225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9C0\n8E40\nFB80\nAE80\nFBE0\nA880\nFFE0\nAAA0\nABE0\nFC00\n83E0\nENDCHAR\nSTARTCHAR U_4B1A\nENCODING 19226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n9A80\nEBC0\nAA80\nFBC0\nAA80\nFBE0\nAAA0\nBD60\nEEA0\n83E0\nENDCHAR\nSTARTCHAR U_4B1B\nENCODING 19227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8AA0\nFBE0\nAAA0\nF9C0\nAAA0\nFFE0\nAAA0\nBFE0\nE880\n87E0\nENDCHAR\nSTARTCHAR U_4B1C\nENCODING 19228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8BE0\nF940\nAAA0\nFBE0\nA880\nFBE0\nAAA0\nABE0\nF620\n81E0\nENDCHAR\nSTARTCHAR U_4B1D\nENCODING 19229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n8BE0\nF940\nAFE0\nFAA0\nABE0\nFAA0\nABE0\nB940\nE620\n83E0\nENDCHAR\nSTARTCHAR U_4B1E\nENCODING 19230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8FE0\nF880\nABE0\nF920\nAFE0\nF920\nAFA0\nB860\nE420\n83E0\nENDCHAR\nSTARTCHAR U_4B1F\nENCODING 19231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDA0\n89A0\nFEA0\nA9A0\nFF20\nAAA0\nFFA0\nAAA0\nBF60\nE400\n83E0\nENDCHAR\nSTARTCHAR U_4B20\nENCODING 19232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0400\nFFE0\nA4A0\n3F40\n6580\n2540\nFEE0\n2580\n2540\n44E0\nENDCHAR\nSTARTCHAR U_4B21\nENCODING 19233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n0500\nFFE0\n3280\nD480\n7FA0\n24C0\nFFE0\n2480\n4460\nENDCHAR\nSTARTCHAR U_4B22\nENCODING 19234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n33E0\n4920\nB120\n4920\n7920\n4920\n7920\n4220\n5A20\n6CC0\nENDCHAR\nSTARTCHAR U_4B23\nENCODING 19235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n53E0\nEC00\n0000\nFBC0\nA840\nA880\nF900\n8200\nB220\nC9E0\nENDCHAR\nSTARTCHAR U_4B24\nENCODING 19236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4600\n4D00\n72C0\n5F80\n5480\n5F40\n5580\n98C0\nENDCHAR\nSTARTCHAR U_4B25\nENCODING 19237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\n0100\n08A0\n1660\n2980\nFF60\n2900\n3F80\n2500\n3BC0\nENDCHAR\nSTARTCHAR U_4B26\nENCODING 19238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n33C0\n4A40\nA640\n7A20\n4C00\n7BC0\n4A40\n7A40\n4180\n5240\n6C20\nENDCHAR\nSTARTCHAR U_4B27\nENCODING 19239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n37C0\n4800\nB000\n4FE0\n7A80\n4A80\n7A80\n4280\n5AA0\n6C60\nENDCHAR\nSTARTCHAR U_4B28\nENCODING 19240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3200\n4FE0\nB220\n4FA0\n7AA0\n4AA0\n7AA0\n54E0\n5820\n68C0\nENDCHAR\nSTARTCHAR U_4B29\nENCODING 19241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0C00\n3580\nC460\n1F00\nE4E0\n3F80\n2480\n3FC0\n2A80\n31E0\nENDCHAR\nSTARTCHAR U_4B2A\nENCODING 19242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n37E0\n4880\nB080\n4980\n7AC0\n4CA0\n7880\n5080\n5880\n6880\nENDCHAR\nSTARTCHAR U_4B2B\nENCODING 19243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n3380\n4A80\nB280\n4BE0\n7A80\n4A80\n7A80\n5240\n5B60\n6AA0\nENDCHAR\nSTARTCHAR U_4B2C\nENCODING 19244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5100\nAFC0\nF540\n9540\nF540\n9FE0\nF100\n8280\nB440\nD820\nENDCHAR\nSTARTCHAR U_4B2D\nENCODING 19245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4920\n7920\n4260\n1F00\nE4E0\n3F80\n2480\n3FC0\n2A80\n31E0\nENDCHAR\nSTARTCHAR U_4B2E\nENCODING 19246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n5440\nAC40\nF440\n9640\nF540\n95C0\nF640\nA440\nB0A0\nD320\nENDCHAR\nSTARTCHAR U_4B2F\nENCODING 19247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n48E0\nB080\n4880\n7BE0\n4A20\n7A20\n4220\n5BE0\n6A20\nENDCHAR\nSTARTCHAR U_4B30\nENCODING 19248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n33E0\n48A0\nA4A0\n78A0\n4920\n7960\n4A20\n79E0\n4120\n5920\n69E0\nENDCHAR\nSTARTCHAR U_4B31\nENCODING 19249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n5100\nAFE0\n7100\n5380\n7540\n5920\n77C0\n5100\n6900\nENDCHAR\nSTARTCHAR U_4B32\nENCODING 19250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n3200\n4FE0\nA420\nFBA0\n4AA0\n7AA0\n4BA0\n7820\n5020\n68E0\nENDCHAR\nSTARTCHAR U_4B33\nENCODING 19251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n32A0\n49C0\nF880\n4BE0\n7880\n4880\n7BE0\n5080\n5880\n6880\nENDCHAR\nSTARTCHAR U_4B34\nENCODING 19252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8000\n47E0\n3100\n1100\n8100\n6680\n1100\n0100\nF100\n06E0\n0000\nENDCHAR\nSTARTCHAR U_4B35\nENCODING 19253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5080\n6FE0\n8100\n7220\n57C0\n7080\n5320\n74C0\n5140\n6A20\nENDCHAR\nSTARTCHAR U_4B36\nENCODING 19254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5440\nAFC0\nF440\n97C0\nF500\n9520\nF4C0\n8480\nB540\nD620\nENDCHAR\nSTARTCHAR U_4B37\nENCODING 19255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n31E0\n6A40\n9580\n7900\n4A80\n7D60\n4A20\n7940\n5080\n6F00\nENDCHAR\nSTARTCHAR U_4B38\nENCODING 19256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2140\n5180\nD640\n2A20\nD500\n2E80\nD160\n1E00\n1500\n3BC0\nENDCHAR\nSTARTCHAR U_4B39\nENCODING 19257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n2BE0\n6480\n9140\n7BE0\n4880\n7880\n49C0\n7880\n5080\n6BE0\nENDCHAR\nSTARTCHAR U_4B3A\nENCODING 19258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5280\nAFE0\nF100\n97C0\nF100\n9100\nFFE0\nA100\nB100\nD100\nENDCHAR\nSTARTCHAR U_4B3B\nENCODING 19259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n3120\n4FE0\n7900\nCFE0\n7900\n4FE0\n7920\n4140\n51A0\n6E60\nENDCHAR\nSTARTCHAR U_4B3C\nENCODING 19260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n2A20\n57E0\nF800\n4BE0\n7A20\n4BE0\n7A20\n43E0\n5A20\n6A60\nENDCHAR\nSTARTCHAR U_4B3D\nENCODING 19261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n5440\nE820\n07C0\n7440\n5440\n77C0\n5280\n6280\n54A0\n68E0\nENDCHAR\nSTARTCHAR U_4B3E\nENCODING 19262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5280\nAFE0\nF120\n97E0\nF500\n97E0\nF120\n8320\nB560\nD900\nENDCHAR\nSTARTCHAR U_4B3F\nENCODING 19263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n3220\n6BE0\nBE40\n4B80\n7AE0\n4B80\n7AE0\n4580\n54A0\n68E0\nENDCHAR\nSTARTCHAR U_4B40\nENCODING 19264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n53C0\nA940\nF540\n9F40\nF5C0\n9540\nF540\nA660\nBC40\nD3E0\nENDCHAR\nSTARTCHAR U_4B41\nENCODING 19265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA00\n23E0\nF240\n2E40\n3580\nFF60\n2900\n3F80\n2500\n33C0\nENDCHAR\nSTARTCHAR U_4B42\nENCODING 19266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n2A40\n67C0\n9000\n7BE0\n4AA0\n7AA0\n4BE0\n7A00\n5220\n6BE0\nENDCHAR\nSTARTCHAR U_4B43\nENCODING 19267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5280\nAE60\nF100\n97C0\nF040\n9180\nF240\nA520\nB440\nCBC0\nENDCHAR\nSTARTCHAR U_4B44\nENCODING 19268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\nA540\nF7C0\n9100\nF7C0\n9140\nFFE0\nA140\nB7C0\nD100\nENDCHAR\nSTARTCHAR U_4B45\nENCODING 19269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n7520\nAFE0\n7520\n5520\n77A0\n54A0\n77A0\n4C20\n57E0\n7420\nENDCHAR\nSTARTCHAR U_4B46\nENCODING 19270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n9080\nE940\n9220\nEE00\n3580\nDF60\n2900\n3F80\n2500\n33C0\nENDCHAR\nSTARTCHAR U_4B47\nENCODING 19271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2400\n57E0\nAC20\nF120\n97E0\nF120\n93A0\nF2A0\n83A0\n9020\nE9C0\nENDCHAR\nSTARTCHAR U_4B48\nENCODING 19272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n51E0\nAEA0\nF3E0\n94A0\nF5E0\n9280\nF280\n8DE0\nA480\nDBE0\nENDCHAR\nSTARTCHAR U_4B49\nENCODING 19273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n57E0\nAA00\nF3C0\n9480\nFFE0\n9240\nF3C0\nA240\nB3C0\nD440\nENDCHAR\nSTARTCHAR U_4B4A\nENCODING 19274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6280\n5FE0\nAA80\nF100\n97C0\nF540\n9540\nFFE0\nA100\nB240\nDC20\nENDCHAR\nSTARTCHAR U_4B4B\nENCODING 19275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n55E0\nAD20\nF5E0\n9480\nF7E0\n9480\nF5C0\nA5A0\nB6A0\nD480\nENDCHAR\nSTARTCHAR U_4B4C\nENCODING 19276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n23C0\nFA40\n8AC0\n7F40\nA4E0\n3F00\n2940\n3F80\n20C0\nENDCHAR\nSTARTCHAR U_4B4D\nENCODING 19277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\nA900\nF3C0\n9100\nFFE0\n9000\nF7C0\nA540\nB540\nCFE0\nENDCHAR\nSTARTCHAR U_4B4E\nENCODING 19278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n57E0\nAD40\nF5C0\n9400\nF7C0\n9100\nFFE0\nA100\nB540\nD920\nENDCHAR\nSTARTCHAR U_4B4F\nENCODING 19279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n6FE0\n9820\nEFE0\nA800\nEFE0\nAAA0\nEFE0\n8AA0\nAAA0\nD060\nENDCHAR\nSTARTCHAR U_4B50\nENCODING 19280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5280\nAFE0\n7100\n57C0\n7100\n5FE0\n7200\n5540\n7C60\n4B80\nENDCHAR\nSTARTCHAR U_4B51\nENCODING 19281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n3280\n4FE0\nB280\n07E0\n72A0\n57E0\n72A0\n47E0\n5280\n6AA0\nENDCHAR\nSTARTCHAR U_4B52\nENCODING 19282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5200\nEBE0\n82A0\n7360\n52A0\n73E0\n5100\n66A0\n5A00\n69E0\nENDCHAR\nSTARTCHAR U_4B53\nENCODING 19283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n77C0\nE800\n77C0\n5000\n7380\n5280\n7380\n5440\n5A80\n6FE0\nENDCHAR\nSTARTCHAR U_4B54\nENCODING 19284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n6900\nD5C0\nF140\n9DC0\nF500\n95C0\nF940\nA5C0\nB400\nCBE0\nENDCHAR\nSTARTCHAR U_4B55\nENCODING 19285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\nAA00\nFBE0\nAA40\nF440\n2E40\n3580\nDF60\n1100\n1F00\n1080\nENDCHAR\nSTARTCHAR U_4B56\nENCODING 19286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nAFE0\n4A40\nEA40\nAFE0\nEA40\nABC0\nE800\n8A40\nADA0\nD4A0\nENDCHAR\nSTARTCHAR U_4B57\nENCODING 19287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n33E0\n4940\nFBE0\n4A20\n7BE0\n4A20\n7BE0\n5140\n5A40\n6C60\nENDCHAR\nSTARTCHAR U_4B58\nENCODING 19288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5340\nBAC0\n03C0\n7880\n6FE0\n5BC0\n7A40\n63C0\n52C0\n6DA0\nENDCHAR\nSTARTCHAR U_4B59\nENCODING 19289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n56C0\nAB40\n7FE0\n56C0\n7B60\n57C0\n7440\n67C0\n5440\n77C0\nENDCHAR\nSTARTCHAR U_4B5A\nENCODING 19290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57C0\nEA80\n7FE0\n5540\n77C0\n5540\n77C0\n6100\n77C0\n5FE0\nENDCHAR\nSTARTCHAR U_4B5B\nENCODING 19291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n57C0\n8A60\nF7A0\n55A0\n75A0\n5760\n7540\n57E0\n6D40\n41A0\nENDCHAR\nSTARTCHAR U_4B5C\nENCODING 19292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nBFE0\nD540\nEF80\nB8C0\nEFA0\nA880\nEF80\n8A80\nF240\nA220\nENDCHAR\nSTARTCHAR U_4B5D\nENCODING 19293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n2880\n5540\nFAA0\n4FE0\n7AA0\n4BE0\n7A20\n43E0\n5220\n6BE0\nENDCHAR\nSTARTCHAR U_4B5E\nENCODING 19294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n6AA0\n9FE0\n4100\nF7C0\n9FE0\nF280\n97C0\nF100\nAFE0\nF100\nENDCHAR\nSTARTCHAR U_4B5F\nENCODING 19295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3140\n2B60\n7EA0\n83E0\n7AA0\n4AE0\n7A00\n4BE0\n7880\n53E0\n6AA0\nENDCHAR\nSTARTCHAR U_4B60\nENCODING 19296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nAFE0\n4A80\nEFE0\nAAA0\nEFE0\nAAA0\nEFE0\n8A80\nEEC0\nB2A0\nENDCHAR\nSTARTCHAR U_4B61\nENCODING 19297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n52A0\nAFE0\nF080\n97E0\nF020\n97E0\nF020\n87E0\nA540\nDBA0\nENDCHAR\nSTARTCHAR U_4B62\nENCODING 19298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\nA920\nF6A0\n9BC0\nF540\n9FE0\nF000\n9FE0\nA100\nD300\nENDCHAR\nSTARTCHAR U_4B63\nENCODING 19299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n57E0\nA940\n7EC0\n56A0\n7AC0\n5240\n73C0\n4240\n53C0\n7440\nENDCHAR\nSTARTCHAR U_4B64\nENCODING 19300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n53E0\nAAA0\n77E0\n5140\n7F40\n55E0\n7520\n45E0\n5E00\n71E0\nENDCHAR\nSTARTCHAR U_4B65\nENCODING 19301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n5FE0\nA900\n77C0\n5100\n77E0\n5540\n7FE0\n4540\n57C0\n7460\nENDCHAR\nSTARTCHAR U_4B66\nENCODING 19302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n57E0\nAAC0\n77E0\n52A0\n7BE0\n56A0\n7440\n47E0\n5940\n68C0\nENDCHAR\nSTARTCHAR U_4B67\nENCODING 19303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nAFE0\n5A40\nEFE0\nAA40\nEEE0\nAB40\nE980\n8A40\nAFE0\nF540\nENDCHAR\nSTARTCHAR U_4B68\nENCODING 19304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\nAFE0\n5280\nE7E0\nAC80\nE7E0\nA480\nEFE0\n8AA0\nAFE0\nE820\nENDCHAR\nSTARTCHAR U_4B69\nENCODING 19305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nAFE0\n4A40\nEFE0\nAAC0\nEF60\nAA40\nEF60\n8940\nAF60\nF140\nENDCHAR\nSTARTCHAR U_4B6A\nENCODING 19306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n4240\n7BC0\nAA40\n2FE0\n2540\n27C0\n2540\n37C0\n6100\n0FE0\nENDCHAR\nSTARTCHAR U_4B6B\nENCODING 19307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8440\nF280\n8FE0\n9200\nF7C0\n0440\nF7C0\n9440\nF7C0\n9440\nF7C0\nENDCHAR\nSTARTCHAR U_4B6C\nENCODING 19308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n4540\n7AA0\n47E0\n7900\n03E0\n7AA0\n4B60\n7AA0\n4B20\n7BE0\nENDCHAR\nSTARTCHAR U_4B6D\nENCODING 19309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4BE0\nFD00\n23E0\n7A20\n4BE0\n7A20\n4BE0\n7A20\n4BE0\n7940\n0220\nENDCHAR\nSTARTCHAR U_4B6E\nENCODING 19310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n49A0\n5040\nFDA0\n4940\nFFE0\n0800\n1F80\n1280\n1280\n1F80\nENDCHAR\nSTARTCHAR U_4B6F\nENCODING 19311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\n2080\nFAA0\n72A0\nAAA0\nABE0\n7080\n52A0\n72A0\n52A0\n73E0\nENDCHAR\nSTARTCHAR U_4B70\nENCODING 19312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n27E0\nF900\n77C0\nAA00\n2FE0\n7540\n5BA0\n7100\n57C0\n7100\nENDCHAR\nSTARTCHAR U_4B71\nENCODING 19313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n74A0\n22A0\nFAC0\n27E0\n74A0\nADA0\n75E0\n56A0\n74A0\n54A0\n74E0\nENDCHAR\nSTARTCHAR U_4B72\nENCODING 19314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n27E0\nF980\n2240\n7420\nAFE0\n7040\n5740\n7540\n5740\n70C0\nENDCHAR\nSTARTCHAR U_4B73\nENCODING 19315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n23E0\nFAA0\n23E0\nDD80\n5660\nFFE0\n2480\nDFE0\n1280\n1F80\nENDCHAR\nSTARTCHAR U_4B74\nENCODING 19316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4400\n7FC0\n4400\n7FE0\n92A0\n9240\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_4B75\nENCODING 19317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\nA240\nF240\nA240\nF340\nA2C0\nFA40\n2A40\nAA40\n8C40\n3860\nENDCHAR\nSTARTCHAR U_4B76\nENCODING 19318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF800\nA7E0\nF140\nA140\nF140\nA140\nF940\n0A40\nAA40\n8A40\n3440\nENDCHAR\nSTARTCHAR U_4B77\nENCODING 19319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF1C0\nA700\nF100\nA7C0\nF100\nA100\nFFE0\n0900\n5900\nA920\n10E0\nENDCHAR\nSTARTCHAR U_4B78\nENCODING 19320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA40\nA220\nF420\nA240\nF240\nA240\nFA40\n0980\nA980\n8A40\n3420\nENDCHAR\nSTARTCHAR U_4B79\nENCODING 19321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA6E0\nF4A0\nA4A0\nF4A0\nA4A0\nF5A0\n0EA0\nA8E0\n8880\n3080\nENDCHAR\nSTARTCHAR U_4B7A\nENCODING 19322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\nA100\nF7E0\nA000\nF380\nA280\nFA80\n0AA0\nAAA0\n8AA0\n3460\nENDCHAR\nSTARTCHAR U_4B7B\nENCODING 19323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\nA240\nF240\nA420\nF3C0\nA940\nF940\n0A40\nAA40\n8D40\n3080\nENDCHAR\nSTARTCHAR U_4B7C\nENCODING 19324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79C0\n5000\n7800\n53E0\n7940\n5140\n7D40\n0540\nF540\n8A40\n3440\nENDCHAR\nSTARTCHAR U_4B7D\nENCODING 19325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n5280\n7BE0\n5280\n7C80\n5080\n7FE0\n0880\nA880\n8880\n1080\nENDCHAR\nSTARTCHAR U_4B7E\nENCODING 19326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n5140\n7920\n57E0\n7900\n5100\n7900\n0A80\nAA80\n9440\n2820\nENDCHAR\nSTARTCHAR U_4B7F\nENCODING 19327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA280\nFBE0\nA480\nF880\nA7E0\nF880\n0940\nA940\n8A20\n3420\nENDCHAR\nSTARTCHAR U_4B80\nENCODING 19328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA3E0\nFA20\nA7A0\nFAA0\nA2A0\nFBA0\n0A60\nAA00\n8A20\n33E0\nENDCHAR\nSTARTCHAR U_4B81\nENCODING 19329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA240\nF7E0\nA000\nF240\nA240\nFFE0\n0A40\nAA40\n8A40\n3640\nENDCHAR\nSTARTCHAR U_4B82\nENCODING 19330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF940\nA120\nF7E0\nA100\nF900\nA1E0\nFA20\n0B40\nAC80\n8940\n3620\nENDCHAR\nSTARTCHAR U_4B83\nENCODING 19331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA100\nF7C0\nA100\nF100\nAFE0\nF900\n0A00\nAA80\n8C40\n37C0\nENDCHAR\nSTARTCHAR U_4B84\nENCODING 19332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA080\nF7E0\nA080\nF100\nA200\nF940\n0880\nA900\n8A40\n33E0\nENDCHAR\nSTARTCHAR U_4B85\nENCODING 19333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF8A0\nA080\nF3E0\nA280\nF280\nA2A0\nFAA0\n0AA0\nAB40\n8AA0\n3120\nENDCHAR\nSTARTCHAR U_4B86\nENCODING 19334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA080\nF9C0\nA2A0\nF8A0\nA000\nF880\n0BE0\nA880\n8880\n3080\nENDCHAR\nSTARTCHAR U_4B87\nENCODING 19335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA3E0\nF8A0\nA3E0\nF8A0\nA3E0\nF880\n0BE0\nA880\n8FE0\n3080\nENDCHAR\nSTARTCHAR U_4B88\nENCODING 19336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA0E0\nF920\nA2C0\nF880\nA300\nF8E0\n0920\nAAC0\n8880\n3700\nENDCHAR\nSTARTCHAR U_4B89\nENCODING 19337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\nA3E0\nF440\nAB80\nF220\nA340\nFA80\n0A40\nAA40\n8AA0\n3320\nENDCHAR\nSTARTCHAR U_4B8A\nENCODING 19338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n53E0\n7880\n53E0\n78A0\n53C0\n7A80\n07E0\n54A0\nA540\n9A20\nENDCHAR\nSTARTCHAR U_4B8B\nENCODING 19339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0020\n7BA0\n5120\n7920\n53A0\n52E0\n7AA0\n0D20\n5920\nAA20\n1440\nENDCHAR\nSTARTCHAR U_4B8C\nENCODING 19340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\nA480\nF7E0\nAC80\nF480\nA5C0\nF6A0\n16A0\nB480\n9480\n6480\nENDCHAR\nSTARTCHAR U_4B8D\nENCODING 19341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2400\n3F00\n2400\n3FC0\n5540\n8A80\n7FC0\n3500\nD200\n19C0\nENDCHAR\nSTARTCHAR U_4B8E\nENCODING 19342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF6C0\nA380\nF6C0\nA200\nF7C0\nA300\nF7C0\n9D40\n7540\nD5C0\nB100\nENDCHAR\nSTARTCHAR U_4B8F\nENCODING 19343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n5100\n7900\n53C0\n7940\n5140\n7BE0\n0800\n6BC0\n8A40\n33C0\nENDCHAR\nSTARTCHAR U_4B90\nENCODING 19344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA2A0\nF360\nA220\nF3A0\nA2A0\nFAA0\n0BA0\nAA20\n8A20\n3240\nENDCHAR\nSTARTCHAR U_4B91\nENCODING 19345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA2A0\nF140\nA000\nF040\nA7E0\nF840\n0A40\nA940\n8840\n3080\nENDCHAR\nSTARTCHAR U_4B92\nENCODING 19346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78A0\n53E0\n7880\n53E0\n7AA0\n53E0\n7AA0\n0BE0\nAAA0\nAAA0\n1A60\nENDCHAR\nSTARTCHAR U_4B93\nENCODING 19347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\nA1C0\nF100\nA7C0\nF4C0\n2740\nF7C0\n1100\nF7C0\n1100\n6100\nENDCHAR\nSTARTCHAR U_4B94\nENCODING 19348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8E0\nA780\nF080\nA7E0\nF2A0\nA7E0\nFAA0\n0AA0\nAFE0\n8880\n37E0\nENDCHAR\nSTARTCHAR U_4B95\nENCODING 19349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA120\nF5A0\nA240\nF5A0\nA000\nFFE0\n0920\nADA0\n8A40\n35A0\nENDCHAR\nSTARTCHAR U_4B96\nENCODING 19350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\nA240\nF3C0\nA240\nF3C0\nA000\nF7E0\n3420\n57E0\n9420\n27E0\nENDCHAR\nSTARTCHAR U_4B97\nENCODING 19351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA2A0\nF3E0\nA000\nF3E0\nA200\nFBE0\n0A40\nABE0\n8A40\n3440\nENDCHAR\nSTARTCHAR U_4B98\nENCODING 19352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA6C0\nF440\nA6C0\nF440\nA7C0\nFA80\n0A80\nAA80\n8AA0\n3460\nENDCHAR\nSTARTCHAR U_4B99\nENCODING 19353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8A0\nA080\nF7E0\nA080\nF780\nA5A0\nFDA0\n0FA0\nAA40\n8CC0\n3320\nENDCHAR\nSTARTCHAR U_4B9A\nENCODING 19354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA3C0\nF100\nA7E0\nF280\nA4E0\nFBC0\n0A40\nAD40\n8880\n3360\nENDCHAR\nSTARTCHAR U_4B9B\nENCODING 19355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEA0\nAAA0\nFAA0\nAAE0\nFDA0\nAAA0\nFAE0\n0AA0\nAEA0\n88A0\n38E0\nENDCHAR\nSTARTCHAR U_4B9C\nENCODING 19356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF540\nAFE0\nF540\nA5C0\nF400\nA7E0\nF100\n5FE0\nB100\n5540\nB920\nENDCHAR\nSTARTCHAR U_4B9D\nENCODING 19357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\nA920\nF7C0\nA540\nF7C0\nA540\nFFC0\n0900\n6FC0\n8900\n1900\nENDCHAR\nSTARTCHAR U_4B9E\nENCODING 19358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\nA7C0\nF280\nAFE0\nF440\nAFE0\nFC60\n17C0\n5440\n97C0\n2440\nENDCHAR\nSTARTCHAR U_4B9F\nENCODING 19359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA7E0\nFDA0\nA240\nFDA0\nA240\nFC20\n2BC0\nDA80\nA900\n16E0\nENDCHAR\nSTARTCHAR U_4BA0\nENCODING 19360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA000\nFBE0\nA220\nFBE0\nA000\nFBE0\n0AA0\nFBE0\n8AA0\n33E0\nENDCHAR\nSTARTCHAR U_4BA1\nENCODING 19361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\nA3E0\nF640\nA3C0\nF240\nA3C0\nFA00\n0FC0\nAA40\n8980\n3660\nENDCHAR\nSTARTCHAR U_4BA2\nENCODING 19362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78E0\n5380\n7880\n57E0\n7980\n52E0\n7AA0\n2BE0\n7AA0\nCBE0\n1A20\nENDCHAR\nSTARTCHAR U_4BA3\nENCODING 19363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\nA140\nF080\nA140\nF7E0\nA5A0\nF240\n15A0\nFFE0\n9380\n3540\nENDCHAR\nSTARTCHAR U_4BA4\nENCODING 19364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA7E0\nF520\nA240\nF2E0\nA440\nFAE0\n0A40\nAAE0\n8A40\n32E0\nENDCHAR\nSTARTCHAR U_4BA5\nENCODING 19365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA000\nF3C0\nA240\nF3C0\nA000\nFBE0\n0B60\nAAA0\n8BE0\n32A0\nENDCHAR\nSTARTCHAR U_4BA6\nENCODING 19366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA3E0\nF940\nA1C0\nF800\nA3E0\nFA20\n2AA0\n5B60\nAAA0\n1A60\nENDCHAR\nSTARTCHAR U_4BA7\nENCODING 19367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\nF280\n2C60\nF7C0\n9480\nF7C0\n9480\nF7E0\n2520\nFAA0\n20C0\nENDCHAR\nSTARTCHAR U_4BA8\nENCODING 19368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA7E0\nF920\nA7C0\nFA80\nA100\nFFE0\n0900\n5FC0\nA900\n1900\nENDCHAR\nSTARTCHAR U_4BA9\nENCODING 19369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\nA240\nF2C0\nA2C0\nF7E0\nA420\nFBC0\n0B40\nAAC0\n8B40\n3440\nENDCHAR\nSTARTCHAR U_4BAA\nENCODING 19370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A40\n53E0\n7D40\n5740\n79E0\n56C0\n7FE0\n0880\nA9C0\n9AA0\n0CA0\nENDCHAR\nSTARTCHAR U_4BAB\nENCODING 19371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA3E0\nF6A0\nA3E0\nF080\nA3E0\nFAA0\n0940\nABE0\n8940\n33A0\nENDCHAR\nSTARTCHAR U_4BAC\nENCODING 19372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA40\nA7E0\nF240\nA3C0\nF240\nA3C0\nF880\n0FE0\nA900\n8A40\n3420\nENDCHAR\nSTARTCHAR U_4BAD\nENCODING 19373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9E0\nA6A0\nF2C0\nA3C0\nF240\nABC0\nFA40\n0BC0\nA900\n8AA0\n34E0\nENDCHAR\nSTARTCHAR U_4BAE\nENCODING 19374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA7E0\nFD40\nA540\nFBA0\nA540\nFAA0\n09C0\nAF40\n8880\n3740\nENDCHAR\nSTARTCHAR U_4BAF\nENCODING 19375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA40\nA7E0\nF2A0\nA7A0\nF2A0\nA7A0\nFAA0\n0B40\nAD40\n8D40\n35A0\nENDCHAR\nSTARTCHAR U_4BB0\nENCODING 19376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA3E0\nF140\nA140\nF3E0\nA2A0\nFBE0\n0AA0\nAB60\n8BE0\n3220\nENDCHAR\nSTARTCHAR U_4BB1\nENCODING 19377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF000\nABE0\nF480\nA140\nF2E0\nAD40\nF6C0\n9560\n5640\n9480\n6BE0\nENDCHAR\nSTARTCHAR U_4BB2\nENCODING 19378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF940\nA7E0\nF140\nA7E0\nF1C0\nA2A0\nFBE0\n0AA0\nABE0\n8940\n3220\nENDCHAR\nSTARTCHAR U_4BB3\nENCODING 19379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE1E0\nAF00\nE540\nBFE0\nE540\nA920\nF7C0\n5540\nB7C0\n5540\nB7C0\nENDCHAR\nSTARTCHAR U_4BB4\nENCODING 19380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF740\nA2A0\nF640\nA440\nF7E0\nA820\nFBC0\n0A40\nABC0\nAA40\n17E0\nENDCHAR\nSTARTCHAR U_4BB5\nENCODING 19381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA7E0\nF220\nA140\nF7E0\nA2A0\nFBE0\n0AA0\nABE0\n8880\n37E0\nENDCHAR\nSTARTCHAR U_4BB6\nENCODING 19382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\nA3E0\nF480\nABE0\nF280\nA3E0\nFA80\n0BE0\nA880\n8AA0\n3080\nENDCHAR\nSTARTCHAR U_4BB7\nENCODING 19383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\nA6A0\nF7E0\nA400\nF7E0\n8920\nFBA0\n0BA0\nA920\n8BA0\n30C0\nENDCHAR\nSTARTCHAR U_4BB8\nENCODING 19384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6AC0\n4440\n6AC0\n4040\nFFE0\nA420\n3F00\n2400\n3FC0\n5440\nAAC0\nENDCHAR\nSTARTCHAR U_4BB9\nENCODING 19385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF2C0\nA280\nF7E0\nA040\nF7E0\nA440\nF7C0\n1540\n57E0\n9540\n2AA0\nENDCHAR\nSTARTCHAR U_4BBA\nENCODING 19386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\nA7C0\nF2A0\nAD40\nF7A0\nABE0\nFA40\n1BC0\n2A40\nCBC0\n3E40\nENDCHAR\nSTARTCHAR U_4BBB\nENCODING 19387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nA7C0\nA000\nAFE0\nA020\nF380\n1040\n3FE0\n5040\n9240\n3080\nENDCHAR\nSTARTCHAR U_4BBC\nENCODING 19388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF920\nA540\nF100\nA2C0\nF520\nA540\nFA80\n0CE0\nAB40\n8DE0\n3240\nENDCHAR\nSTARTCHAR U_4BBD\nENCODING 19389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\nA7E0\nF540\nA7E0\nF560\nA7E0\nF540\n15E0\nB540\n95E0\n2EA0\nENDCHAR\nSTARTCHAR U_4BBE\nENCODING 19390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE480\nDFE0\nEA80\nDFE0\nE060\nCE80\nEAE0\n2E80\nEAE0\nAE80\n6AE0\nENDCHAR\nSTARTCHAR U_4BBF\nENCODING 19391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\nAFE0\nFAA0\nA7C0\nF280\nAFE0\nF240\n17E0\nB2C0\n9680\n39E0\nENDCHAR\nSTARTCHAR U_4BC0\nENCODING 19392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\nA2C0\nF340\nA2C0\nF7E0\nA040\nFFE0\n0AA0\nAAE0\n8FA0\n3220\nENDCHAR\nSTARTCHAR U_4BC1\nENCODING 19393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\nAFE0\nF400\nA7C0\nF240\nAFC0\nF540\n37C0\n5D40\n97C0\n6D60\nENDCHAR\nSTARTCHAR U_4BC2\nENCODING 19394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F00\n2A00\n1F80\n2A80\nFFE0\nAA80\n7DE0\nAAA0\n7FC0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_4BC3\nENCODING 19395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1080\n57E0\n5420\n5100\n7FE0\n0A40\n3A40\nC980\n0980\n3660\nENDCHAR\nSTARTCHAR U_4BC4\nENCODING 19396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n1240\n5240\n53C0\n5080\n7BE0\n0AA0\n3AA0\nCB60\n0A20\n3260\nENDCHAR\nSTARTCHAR U_4BC5\nENCODING 19397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n5240\n53C0\n5240\n53C0\n7A40\n0FE0\n3840\nCFE0\n0A40\n35A0\nENDCHAR\nSTARTCHAR U_4BC6\nENCODING 19398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n6900\nFD00\n8500\n7900\n4900\n7900\n4920\n7920\n49E0\nENDCHAR\nSTARTCHAR U_4BC7\nENCODING 19399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n5900\nFFE0\n8520\n7920\n4920\n7920\n4920\n7A20\n9C40\nENDCHAR\nSTARTCHAR U_4BC8\nENCODING 19400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79C0\n4800\n6BE0\nFD40\nCD40\n6940\n5940\n6940\n5940\n4A40\n9A60\nENDCHAR\nSTARTCHAR U_4BC9\nENCODING 19401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n6880\n59E0\nFD20\n86C0\n7880\n4880\n7880\n4940\n7A20\n4C20\nENDCHAR\nSTARTCHAR U_4BCA\nENCODING 19402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7800\n6BE0\n5840\nFC40\n87C0\n7AC0\n4AC0\n7BC0\n4840\n7940\n4880\nENDCHAR\nSTARTCHAR U_4BCB\nENCODING 19403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7940\n4920\n6BE0\nFD00\n85E0\n7A20\n4A40\n7B40\n4C80\n7940\n4A20\nENDCHAR\nSTARTCHAR U_4BCC\nENCODING 19404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5420\n57E0\nFD00\n8D00\n77C0\n5540\n7540\n5540\n7540\n5A60\nENDCHAR\nSTARTCHAR U_4BCD\nENCODING 19405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5100\nFA80\n8A80\n7440\n5BA0\n7000\n57E0\n7040\n9180\nB080\nENDCHAR\nSTARTCHAR U_4BCE\nENCODING 19406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7B80\n4940\n4940\n7A20\n85C0\n7880\n4880\n6BE0\n4880\n6880\n9880\nENDCHAR\nSTARTCHAR U_4BCF\nENCODING 19407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7840\n4880\n6980\n5A80\nFFC0\n8480\n7880\n6BC0\n4A40\n5BC0\nENDCHAR\nSTARTCHAR U_4BD0\nENCODING 19408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n6880\n5BE0\nFEA0\n8760\n7AA0\n4AA0\n7B60\n4A20\n7A20\n4A60\nENDCHAR\nSTARTCHAR U_4BD1\nENCODING 19409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n68A0\n5AA0\nFDC0\n8480\n7BE0\n4940\n7940\n4940\n7A40\n4C60\nENDCHAR\nSTARTCHAR U_4BD2\nENCODING 19410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n6AE0\n5A00\nFD00\n85E0\n7A40\n4E40\n7A40\n4A40\n7A40\n4AC0\nENDCHAR\nSTARTCHAR U_4BD3\nENCODING 19411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n6880\n5BE0\nFC80\n87E0\n7C80\n4880\n7BE0\n4880\n7880\n4FE0\nENDCHAR\nSTARTCHAR U_4BD4\nENCODING 19412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4880\n6BE0\nFE20\n85C0\n7B00\n4900\n69E0\n5F00\n4920\n59E0\nENDCHAR\nSTARTCHAR U_4BD5\nENCODING 19413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7820\n6B40\n59C0\nFD40\n8640\n7BE0\n4940\n7E40\n4AE0\n7B00\n4CE0\nENDCHAR\nSTARTCHAR U_4BD6\nENCODING 19414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n6A40\n5BC0\nFE40\n83C0\n7A20\n4B40\n7A80\n4A40\n5B20\nENDCHAR\nSTARTCHAR U_4BD7\nENCODING 19415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A40\n4B60\n6A40\n5A40\nFF60\n8480\n7880\n49C0\n5880\n6880\n5BE0\nENDCHAR\nSTARTCHAR U_4BD8\nENCODING 19416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFBE0\n5220\n75C0\n2400\nFFE0\nA940\nF940\n2140\nFA40\n2460\nENDCHAR\nSTARTCHAR U_4BD9\nENCODING 19417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78C0\n48A0\n6BE0\n5880\nFFE0\n82A0\n7BE0\n4AA0\n7BE0\n4AA0\n5A60\nENDCHAR\nSTARTCHAR U_4BDA\nENCODING 19418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n6920\n5BC0\nFD20\n87E0\n7C00\n49E0\n7920\n49E0\n7920\n4960\nENDCHAR\nSTARTCHAR U_4BDB\nENCODING 19419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n6BE0\n5A20\nFD00\n87E0\n7EA0\n4AA0\n7DE0\n4980\n7AA0\n4C60\nENDCHAR\nSTARTCHAR U_4BDC\nENCODING 19420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n6BC0\n5A40\nFDC0\n8600\n7BE0\n4D60\n5AA0\n6920\n5A40\nENDCHAR\nSTARTCHAR U_4BDD\nENCODING 19421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n6880\nFDE0\n8640\n7BE0\n4920\n79E0\n4920\n79E0\n4920\nENDCHAR\nSTARTCHAR U_4BDE\nENCODING 19422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n73C0\n5240\n7340\nFB40\n8FE0\n7420\n55E0\n7560\n55E0\n7420\n5460\nENDCHAR\nSTARTCHAR U_4BDF\nENCODING 19423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A40\n6FE0\n5900\nFE80\n85A0\n7AC0\n4D80\n7AC0\n4CA0\n7A80\n4900\nENDCHAR\nSTARTCHAR U_4BE0\nENCODING 19424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7380\n5280\n7380\n5280\nFB80\n5000\n77C0\n5540\n7540\n5540\n9FE0\nENDCHAR\nSTARTCHAR U_4BE1\nENCODING 19425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7440\n5FE0\n7280\nFFE0\n8AA0\n7FE0\n52A0\n77E0\n5280\n76C0\n5AA0\nENDCHAR\nSTARTCHAR U_4BE2\nENCODING 19426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4880\n7DE0\n6AA0\n4F80\n4880\n5FE0\n68A0\n8F80\n9080\nENDCHAR\nSTARTCHAR U_4BE3\nENCODING 19427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57C0\n5540\nFFE0\n8800\n77C0\n5440\n77C0\n5440\n77C0\n5820\nENDCHAR\nSTARTCHAR U_4BE4\nENCODING 19428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n6980\n5A40\nFFE0\n86A0\n7D20\n4FE0\n6A40\n5BC0\n4A40\n5BC0\nENDCHAR\nSTARTCHAR U_4BE5\nENCODING 19429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n6A20\n5BE0\nFE20\n87E0\n7A40\n4B60\n7A40\n4FE0\n7800\n4DA0\nENDCHAR\nSTARTCHAR U_4BE6\nENCODING 19430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7940\n6B60\n5940\nFBE0\n82A0\n7BE0\n4880\n7BE0\n4AA0\n7A40\n4CA0\nENDCHAR\nSTARTCHAR U_4BE7\nENCODING 19431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\n7FC0\n1100\n7FC0\n4040\n3F80\n2A80\n2E80\n2080\n2180\nENDCHAR\nSTARTCHAR U_4BE8\nENCODING 19432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\n7FC0\n5140\n5F40\n40C0\n0400\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_4BE9\nENCODING 19433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\n7FC0\n0A00\n7FC0\n4A40\nBF40\n25C0\n3F00\n2080\n3FC0\nENDCHAR\nSTARTCHAR U_4BEA\nENCODING 19434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF880\n53E0\n7220\nFBE0\n8A20\nFBE0\nDA20\nFBE0\n8940\n9A20\nENDCHAR\nSTARTCHAR U_4BEB\nENCODING 19435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\n57E0\n7240\n53C0\nF800\n57E0\n7420\n27A0\n76A0\nAFA0\n6460\nENDCHAR\nSTARTCHAR U_4BEC\nENCODING 19436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n52A0\nFBE0\nAAA0\nDBE0\nAAA0\nFBE0\n2080\nFBE0\n2080\nENDCHAR\nSTARTCHAR U_4BED\nENCODING 19437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7840\n4380\n7860\n4380\nFC60\n4B80\nF400\n3F80\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_4BEE\nENCODING 19438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4380\n7860\n4380\nFC60\n4380\nFF80\n1080\n11E0\n2020\n40C0\nENDCHAR\nSTARTCHAR U_4BEF\nENCODING 19439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3C80\n2140\n38A0\n2140\n7C80\n1100\n3800\n0200\n1340\n0200\n1C00\nENDCHAR\nSTARTCHAR U_4BF0\nENCODING 19440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4380\n7C60\n4380\nFC60\n4980\n7600\n1B00\n71C0\n9120\n2100\nENDCHAR\nSTARTCHAR U_4BF1\nENCODING 19441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78C0\n4300\nF860\n5180\nE860\n8D80\nFFE0\n0C00\n3500\n44C0\n0400\nENDCHAR\nSTARTCHAR U_4BF2\nENCODING 19442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7980\n4040\nFD80\n4840\nFD80\n0000\n7FC0\n4440\n7FC0\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_4BF3\nENCODING 19443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3C80\n2100\n3880\n2140\n7C80\n2900\n7C00\n1100\n64C0\n0A00\n1F00\nENDCHAR\nSTARTCHAR U_4BF4\nENCODING 19444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\nFC60\n4980\nF060\n1F80\n1100\nEEE0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_4BF5\nENCODING 19445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\nFC60\n4980\nFC60\n0580\n7FC0\n2480\nFFE0\n2080\nC080\nENDCHAR\nSTARTCHAR U_4BF6\nENCODING 19446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\nFC60\n4980\nFC60\n0180\n3F80\n2080\n3F80\n2080\nFFE0\nENDCHAR\nSTARTCHAR U_4BF7\nENCODING 19447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n4380\nF860\n5380\nF800\n0440\nFFE0\n2240\nF980\n22A0\nC460\nENDCHAR\nSTARTCHAR U_4BF8\nENCODING 19448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7840\n5180\n6040\nFD80\n4860\nFA80\n43C0\n2540\n1100\n2280\n4C60\nENDCHAR\nSTARTCHAR U_4BF9\nENCODING 19449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79C0\n5020\nFBC0\n5020\nFFC0\n0100\n7FC0\n0100\nFFE0\n8E20\n3B80\nENDCHAR\nSTARTCHAR U_4BFA\nENCODING 19450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7980\n4060\nFD80\n4860\nFD80\n00C0\n7F00\n4220\n79E0\n2080\n3F80\nENDCHAR\nSTARTCHAR U_4BFB\nENCODING 19451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7840\n51A0\n6040\nFDA0\n5040\nF580\n1F00\n2400\n7FC0\n1100\n1F00\nENDCHAR\nSTARTCHAR U_4BFC\nENCODING 19452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n5140\n4AA0\nFCC0\n5300\nE880\n2AA0\nF2E0\n1880\nE940\n1A20\nENDCHAR\nSTARTCHAR U_4BFD\nENCODING 19453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7980\n4060\nFD80\n4860\nFD80\n0400\n7FC0\n1100\nFFE0\n2080\n3F80\nENDCHAR\nSTARTCHAR U_4BFE\nENCODING 19454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7840\n5180\n6860\nFD80\n5860\nE580\n3FC0\n2E40\n35C0\n4A40\n8EC0\nENDCHAR\nSTARTCHAR U_4BFF\nENCODING 19455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4380\n7C60\n4380\nFC60\n5580\nFFE0\n2080\n5540\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_4C00\nENCODING 19456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n5140\nFE80\n4940\nBF80\n0400\n7FC0\n1500\nFFE0\n1200\n7FC0\nENDCHAR\nSTARTCHAR U_4C01\nENCODING 19457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7980\n4060\nFD80\n4860\nF980\n0F00\n1200\nFFE0\n2480\n1500\n6CC0\nENDCHAR\nSTARTCHAR U_4C02\nENCODING 19458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7980\n4060\nFD80\n4860\nFC80\n07C0\n3A80\n1500\nFFE0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_4C03\nENCODING 19459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7980\n4060\nFD80\n4860\nFD80\n2080\n1100\nFFE0\n4A40\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_4C04\nENCODING 19460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7980\n4040\nFD80\n4860\nFF80\n1280\n1F80\n1280\n1F40\n50A0\n9F80\nENDCHAR\nSTARTCHAR U_4C05\nENCODING 19461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7980\n4060\nFD80\n4840\nFFE0\n0400\n3F80\n2280\n3F80\n1100\n60C0\nENDCHAR\nSTARTCHAR U_4C06\nENCODING 19462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7980\n4060\nFD80\n4860\nFF80\n0900\nFFE0\n1440\nFFE0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_4C07\nENCODING 19463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7980\n4060\nF980\n5460\nFF80\n0500\n7FE0\n0880\n1F80\nE880\n0F80\nENDCHAR\nSTARTCHAR U_4C08\nENCODING 19464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3C20\n20C0\n3B20\n2AC0\nFF20\n24C0\n7F80\n1000\n7F80\n8400\n7FC0\nENDCHAR\nSTARTCHAR U_4C09\nENCODING 19465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7980\n4060\nFD80\n4860\nFC80\n23C0\n7A40\n4FE0\nFA40\n4980\n9E40\nENDCHAR\nSTARTCHAR U_4C0A\nENCODING 19466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7980\n4060\nFD80\n4860\nFF80\n2480\n3F80\n2480\nFFC0\n2100\n1300\nENDCHAR\nSTARTCHAR U_4C0B\nENCODING 19467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7980\n4060\nFD80\n4860\nFD80\n1080\nFFE0\n8420\n7FC0\n0A00\n77C0\nENDCHAR\nSTARTCHAR U_4C0C\nENCODING 19468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7980\n4060\nFD80\n4860\nFD80\n2280\n5540\n2100\n65C0\nA500\n2BE0\nENDCHAR\nSTARTCHAR U_4C0D\nENCODING 19469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7140\n42A0\nF940\n5280\n0400\nFFE0\n1500\n6AC0\n9520\n6EC0\n1500\nENDCHAR\nSTARTCHAR U_4C0E\nENCODING 19470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78C0\n5320\nFC40\n53A0\nF440\n3F80\n2480\nFFE0\n2080\n3F80\n60C0\nENDCHAR\nSTARTCHAR U_4C0F\nENCODING 19471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7980\n4060\nFD80\n4860\nFD80\n2240\nFFE0\n5200\nFD40\n50A0\n7D60\nENDCHAR\nSTARTCHAR U_4C10\nENCODING 19472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78C0\n5300\nF8C0\n5300\nF8C0\n4B00\n79E0\n5240\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_4C11\nENCODING 19473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78C0\n5360\nFDA0\n4840\nFFC0\n0400\n7FC0\n5540\nFFE0\n4A40\n4AC0\nENDCHAR\nSTARTCHAR U_4C12\nENCODING 19474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n5180\nFC60\n4980\nFBE0\n2080\nFFE0\n8CA0\n7680\n0B00\n74C0\nENDCHAR\nSTARTCHAR U_4C13\nENCODING 19475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n5180\nFC60\n4980\n7F60\n1500\nFFE0\nA4A0\n7FC0\n0900\n3300\nENDCHAR\nSTARTCHAR U_4C14\nENCODING 19476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n5180\nFC60\n29C0\n7D20\n57E0\nFD20\n54C0\n7FA0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_4C15\nENCODING 19477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n51A0\nFC40\n49A0\n7EC0\n0400\n7FE0\n4AA0\n5FC0\n5540\nBFE0\nENDCHAR\nSTARTCHAR U_4C16\nENCODING 19478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CE0\n5100\nFEE0\n4900\nF9E0\n2240\nFFE0\n5540\n9560\n1F00\n2080\nENDCHAR\nSTARTCHAR U_4C17\nENCODING 19479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA0A0\nFFE0\n9220\nBF20\n9120\nBFA0\nAAA0\nBFA0\n8420\n87A0\nENDCHAR\nSTARTCHAR U_4C18\nENCODING 19480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA0A0\nFBE0\nAAA0\n99A0\nAEA0\n9520\nFAE0\n8D20\n8220\n9C60\nENDCHAR\nSTARTCHAR U_4C19\nENCODING 19481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE40\n0040\n7DE0\n4440\n7C40\n01E0\nFEA0\nAAA0\n92A0\nFE40\n93A0\nENDCHAR\nSTARTCHAR U_4C1A\nENCODING 19482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n0080\n7BE0\n4940\n7940\n0140\nFD40\nD480\nA480\nFD40\nA620\nENDCHAR\nSTARTCHAR U_4C1B\nENCODING 19483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0100\n7900\n49C0\n7940\n0140\nFDC0\nD540\nA540\nFD60\nA5A0\nENDCHAR\nSTARTCHAR U_4C1C\nENCODING 19484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nDF60\n4020\n5F20\nD160\n9F40\n8040\nDF60\n5120\n5B20\n5520\nD560\nENDCHAR\nSTARTCHAR U_4C1D\nENCODING 19485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A20\n0140\n7BE0\n4AA0\n7BE0\n02A0\nFFE0\nAD40\n95C0\nFD40\n95C0\nENDCHAR\nSTARTCHAR U_4C1E\nENCODING 19486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\n2520\nFFE0\n8A80\nFEE0\n2A20\n7FE0\n1100\n7FC0\n5540\n4440\nENDCHAR\nSTARTCHAR U_4C1F\nENCODING 19487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0000\nFFE0\n2080\n7FC0\n2440\n3FC0\n2440\n3FC0\n12A0\nE3E0\nENDCHAR\nSTARTCHAR U_4C20\nENCODING 19488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nF880\nABE0\nFAA0\nABE0\nFAA0\n53E0\n5880\n5480\n98A0\n8FE0\nENDCHAR\nSTARTCHAR U_4C21\nENCODING 19489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nFA80\nABE0\nFC80\nA880\nFFE0\n5080\n5940\n5620\n9820\n8FE0\nENDCHAR\nSTARTCHAR U_4C22\nENCODING 19490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFAE0\nAD00\nFAE0\nAE40\nFA40\n5240\n5AC0\n5640\n9820\n8FE0\nENDCHAR\nSTARTCHAR U_4C23\nENCODING 19491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\nFA20\nAB60\nFAA0\nAB60\nFA20\n5360\n5AA0\n5760\n9A20\n8FC0\nENDCHAR\nSTARTCHAR U_4C24\nENCODING 19492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBE0\n22A0\nFBE0\nAAA0\nFBE0\nA940\nF940\n7160\nAA40\n2460\nENDCHAR\nSTARTCHAR U_4C25\nENCODING 19493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n4A40\nF1C0\n3F20\n2480\n3F80\n2480\n3F80\n12A0\nE3E0\nENDCHAR\nSTARTCHAR U_4C26\nENCODING 19494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\nAAA0\nFBE0\nAAA0\nFBE0\n5180\n5A80\n57E0\n9880\n8FE0\nENDCHAR\nSTARTCHAR U_4C27\nENCODING 19495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n4080\nFBE0\nAAA0\nFBC0\nAA80\nFAE0\n5540\n5540\n5220\n9FE0\nENDCHAR\nSTARTCHAR U_4C28\nENCODING 19496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\nFAA0\nABE0\nFA00\nAAE0\nFAA0\n52E0\n5AA0\n54E0\n98A0\n8FE0\nENDCHAR\nSTARTCHAR U_4C29\nENCODING 19497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBE0\n2AA0\n33E0\nFAA0\n23E0\n7940\nC9A0\n7AE0\n4A80\n7CE0\nENDCHAR\nSTARTCHAR U_4C2A\nENCODING 19498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\n77C0\nAD40\n57C0\n8D40\n77C0\n5280\n72A0\n52E0\n7280\n94E0\nENDCHAR\nSTARTCHAR U_4C2B\nENCODING 19499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nFBC0\nA880\nFFE0\nAA40\nFFE0\n5240\n57E0\n5940\n9620\n8FE0\nENDCHAR\nSTARTCHAR U_4C2C\nENCODING 19500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\nF840\nAFE0\nFAA0\nAC80\nFBE0\n52A0\n5B60\n56A0\n9800\n8FE0\nENDCHAR\nSTARTCHAR U_4C2D\nENCODING 19501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n23E0\nFAA0\nABE0\nAAA0\n03E0\nFC80\n20C0\nF9E0\nAAA0\nACE0\nENDCHAR\nSTARTCHAR U_4C2E\nENCODING 19502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\nFBE0\nA880\nFBE0\nA880\nFBE0\n5140\n5BE0\n5540\n9B20\n8FE0\nENDCHAR\nSTARTCHAR U_4C2F\nENCODING 19503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n26E0\n4420\nFF40\nA8E0\nFF40\nAA60\nFF40\n55C0\n5960\n9000\n8FE0\nENDCHAR\nSTARTCHAR U_4C30\nENCODING 19504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n13E0\nFEA0\nBBE0\nD6A0\n2BE0\nFCA0\n4140\nFD60\nA540\nAE60\nENDCHAR\nSTARTCHAR U_4C31\nENCODING 19505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n27C0\nFD40\nAFC0\n7540\nAFC0\nF940\n21A0\nABC0\n7520\nF9E0\nENDCHAR\nSTARTCHAR U_4C32\nENCODING 19506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7A00\n9200\nFA00\nAA00\nFA00\nAA00\nFA20\n0220\nAA20\nA9E0\nENDCHAR\nSTARTCHAR U_4C33\nENCODING 19507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BE0\n9080\nF880\nA880\nF880\nA880\nF880\n0080\nAA80\nA900\nENDCHAR\nSTARTCHAR U_4C34\nENCODING 19508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n93E0\nFC00\nABC0\nF820\nA840\nF880\n0100\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_4C35\nENCODING 19509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n7BE0\n9020\nF8C0\nA880\nFFE0\nA880\nF880\n0080\nAA80\nA980\nENDCHAR\nSTARTCHAR U_4C36\nENCODING 19510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7900\n9080\nFFE0\nAA00\nFA00\nAA00\nFA00\n0200\nABE0\nA800\nENDCHAR\nSTARTCHAR U_4C37\nENCODING 19511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n3C80\nCBE0\n7C80\n5480\n7FE0\n5480\n7C80\n03E0\n5480\nAA80\nENDCHAR\nSTARTCHAR U_4C38\nENCODING 19512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n7940\n9140\nF940\nAA40\nFA20\nACA0\nF900\n0100\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_4C39\nENCODING 19513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n78A0\n9080\nFBE0\nA880\nF880\nA8A0\nF840\n00C0\nA940\nD420\nENDCHAR\nSTARTCHAR U_4C3A\nENCODING 19514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n7B80\n9200\nFA00\nABE0\nFA40\nAA40\nFA40\n0240\n5440\nA840\nENDCHAR\nSTARTCHAR U_4C3B\nENCODING 19515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n91E0\nFA00\nA840\nFA40\nA940\nF940\n0080\nA940\nAA20\nENDCHAR\nSTARTCHAR U_4C3C\nENCODING 19516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n9280\nFC40\nABA0\nF800\nAFE0\nF840\n0280\nA900\nA880\nENDCHAR\nSTARTCHAR U_4C3D\nENCODING 19517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n97E0\nF880\nABE0\nFAA0\nAAA0\nFAA0\n02A0\nA880\nA880\nENDCHAR\nSTARTCHAR U_4C3E\nENCODING 19518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BE0\n92A0\nFAA0\nAAA0\nFBE0\nAA00\nFA00\n0200\nAA20\nA9E0\nENDCHAR\nSTARTCHAR U_4C3F\nENCODING 19519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n93E0\nFC00\nAA80\nFAE0\nAFA0\nFAA0\n0200\nAA20\nA9C0\nENDCHAR\nSTARTCHAR U_4C40\nENCODING 19520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7100\n97C0\n2540\nFD40\nAD40\nFFE0\nA900\nFA80\n0440\nA820\nENDCHAR\nSTARTCHAR U_4C41\nENCODING 19521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7880\n8BE0\n7C80\n55C0\n7DC0\n56A0\n7CA0\n03E0\n5A80\nA480\nENDCHAR\nSTARTCHAR U_4C42\nENCODING 19522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7A80\n9280\nFDE0\nAEA0\nFAA0\nAAA0\nFDA0\n07A0\nACA0\nA940\nENDCHAR\nSTARTCHAR U_4C43\nENCODING 19523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7A80\n9280\nFBE0\nAC80\nF880\nAFE0\nF880\n0140\nA940\nAA20\nENDCHAR\nSTARTCHAR U_4C44\nENCODING 19524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n7B80\n96A0\nFAA0\nAAA0\nFAA0\nAAA0\nFAA0\n02E0\nAA20\nAC20\nENDCHAR\nSTARTCHAR U_4C45\nENCODING 19525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n97E0\nF880\nA880\nFBE0\nA880\nF9C0\n02A0\nACA0\nA880\nENDCHAR\nSTARTCHAR U_4C46\nENCODING 19526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7A80\n9260\nFA20\nADE0\nF840\nA880\nFFE0\n0080\nA880\nA980\nENDCHAR\nSTARTCHAR U_4C47\nENCODING 19527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3000\n53C0\n2240\nFA40\nABC0\nFA40\nAA40\nABC0\nFA40\n0800\nA7E0\nENDCHAR\nSTARTCHAR U_4C48\nENCODING 19528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n79C0\n9000\nF800\nABE0\nF880\nA9C0\nFAA0\n04A0\nA880\nA880\nENDCHAR\nSTARTCHAR U_4C49\nENCODING 19529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BC0\n9240\nFA40\nABC0\nFA40\nAA40\nFBC0\n0240\nAA40\nAFE0\nENDCHAR\nSTARTCHAR U_4C4A\nENCODING 19530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7AA0\n49C0\n9080\n7FE0\n5480\n7DC0\n55C0\n7EA0\n54A0\nAA80\nENDCHAR\nSTARTCHAR U_4C4B\nENCODING 19531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7940\n4940\nFFE0\n5540\n7D40\n57E0\n7C00\n0140\nA920\nAA20\nENDCHAR\nSTARTCHAR U_4C4C\nENCODING 19532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7A40\n9240\nFAE0\nAAA0\nFAA0\nAAA0\nFAE0\n0240\nAA40\nABE0\nENDCHAR\nSTARTCHAR U_4C4D\nENCODING 19533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7900\n9100\nF9E0\nAA20\nFB20\nAAA0\nFD40\n00C0\nA840\nABE0\nENDCHAR\nSTARTCHAR U_4C4E\nENCODING 19534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BE0\n9000\nFBC0\nAA40\nFBC0\nAA40\nFA40\n03C0\nA800\nAFE0\nENDCHAR\nSTARTCHAR U_4C4F\nENCODING 19535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7800\n93C0\nFA40\nABC0\nF800\nAA40\nFA40\n0180\nA980\nAFE0\nENDCHAR\nSTARTCHAR U_4C50\nENCODING 19536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40E0\n7B00\n92A0\nF940\nABE0\nF840\nA880\nFBE0\n0080\n3880\nC180\nENDCHAR\nSTARTCHAR U_4C51\nENCODING 19537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7AC0\n9780\nFA80\nAAE0\nFBA0\nAEA0\nFAA0\n02A0\nAAA0\nAF20\nENDCHAR\nSTARTCHAR U_4C52\nENCODING 19538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7A20\n93E0\nF800\nABE0\nFAA0\nAAA0\nFBE0\n0200\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_4C53\nENCODING 19539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4020\n77C0\n9140\nFA40\nAFE0\nF940\nA940\nFD40\n02E0\nAB00\nACE0\nENDCHAR\nSTARTCHAR U_4C54\nENCODING 19540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n7940\n92E0\nFBA0\nAEA0\nFAA0\nAAA0\nFA40\n0240\nAAA0\nAB20\nENDCHAR\nSTARTCHAR U_4C55\nENCODING 19541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n73E0\n9400\nFBE0\nAAA0\nFFE0\nAAA0\nFAA0\n03E0\n3820\nC0C0\nENDCHAR\nSTARTCHAR U_4C56\nENCODING 19542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FE0\n9280\nFA80\nAEE0\nFAA0\nAAA0\nFEE0\n0280\nA480\nA880\nENDCHAR\nSTARTCHAR U_4C57\nENCODING 19543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BC0\n2140\n7940\nAE80\n1140\nFFA0\n2480\n3F80\n2480\n3F80\n5240\nENDCHAR\nSTARTCHAR U_4C58\nENCODING 19544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7040\n2140\nF940\n7640\nAAC0\n3F80\n2480\n3F80\n2480\n3F80\n6AC0\nENDCHAR\nSTARTCHAR U_4C59\nENCODING 19545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7B00\n92E0\nFFA0\nAAA0\nFAA0\nAFA0\nFAA0\n0240\nAA40\nAAA0\nENDCHAR\nSTARTCHAR U_4C5A\nENCODING 19546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79C0\n9240\nFB80\nA880\nFBE0\nA880\nFAA0\n01C0\nAAA0\nA980\nENDCHAR\nSTARTCHAR U_4C5B\nENCODING 19547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n78A0\n97E0\nF880\nAE80\nFAA0\nAEA0\nF840\n06C0\nA940\nAA20\nENDCHAR\nSTARTCHAR U_4C5C\nENCODING 19548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n7BE0\n9140\nF940\nABE0\nF800\nABE0\nFA20\n03E0\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_4C5D\nENCODING 19549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n73E0\n92A0\nFBE0\nAAA0\nFBE0\nA940\nFA40\n07E0\nA840\nA040\nENDCHAR\nSTARTCHAR U_4C5E\nENCODING 19550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n77E0\n9140\nFA20\nAFE0\nF800\nAFE0\nF880\n02C0\nAAA0\nA5A0\nENDCHAR\nSTARTCHAR U_4C5F\nENCODING 19551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n73E0\nA220\nFBE0\nAA80\nFBE0\nAA80\nFBE0\n5320\nAD20\nA9E0\nENDCHAR\nSTARTCHAR U_4C60\nENCODING 19552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7240\n97E0\nF940\nA8A0\nFB60\nAA40\nFFE0\n0140\nA8A0\nAB60\nENDCHAR\nSTARTCHAR U_4C61\nENCODING 19553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n73E0\nA520\nFD60\nABA0\nFFE0\nA920\nFBA0\n2D60\nD520\nA0C0\nENDCHAR\nSTARTCHAR U_4C62\nENCODING 19554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BC0\n9480\nFBC0\nA940\nFFE0\nA940\nFBC0\n0100\nA900\nAB00\nENDCHAR\nSTARTCHAR U_4C63\nENCODING 19555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7BE0\n9000\nF940\nAAA0\nF800\nA880\nFBE0\n0080\nA880\nA880\nENDCHAR\nSTARTCHAR U_4C64\nENCODING 19556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\n9120\nFA20\nA840\nF900\nAA60\nFA20\n0360\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_4C65\nENCODING 19557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4820\n7EA0\n88A0\n7E20\n4A60\n3F80\n2480\n3F80\n2480\n3F80\n4940\nENDCHAR\nSTARTCHAR U_4C66\nENCODING 19558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3A80\n5280\nA5E0\n7E80\nABC0\nFA80\nAA80\nFBC0\n0280\nABE0\nENDCHAR\nSTARTCHAR U_4C67\nENCODING 19559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n7880\n93E0\nF880\nABE0\nF940\nAA20\nFDC0\n0140\nA920\nA9E0\nENDCHAR\nSTARTCHAR U_4C68\nENCODING 19560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n6FA0\n9220\nFFA0\nAAA0\nFAA0\nABA0\nFA20\n0720\nAAA0\nAA60\nENDCHAR\nSTARTCHAR U_4C69\nENCODING 19561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n73E0\n9360\nFAA0\nABE0\nFAA0\nABE0\nFAA0\n02E0\nAA20\nAA60\nENDCHAR\nSTARTCHAR U_4C6A\nENCODING 19562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n73C0\n9100\nFFC0\nA900\nFFC0\nA920\nFAC0\n0680\nAA40\nAB20\nENDCHAR\nSTARTCHAR U_4C6B\nENCODING 19563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\nFE40\n1140\n7D40\n5540\n7C40\nD4C0\n7FC0\n4440\n7FC0\nEAE0\nENDCHAR\nSTARTCHAR U_4C6C\nENCODING 19564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n78A0\n92C0\nFA80\nADE0\nF800\nABE0\nFA20\n03E0\nAA20\nAA60\nENDCHAR\nSTARTCHAR U_4C6D\nENCODING 19565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9240\nFB40\nAEA0\nFAA0\nAAE0\nFAA0\n0340\nAA40\nABE0\nENDCHAR\nSTARTCHAR U_4C6E\nENCODING 19566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n77E0\n92A0\nFFA0\nAAA0\nFF60\nAA80\nFFE0\n0080\nA940\nAE20\nENDCHAR\nSTARTCHAR U_4C6F\nENCODING 19567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n13E0\nFD40\n5480\n9360\n3F80\n6480\n3F80\n2480\n3F80\n4A40\nENDCHAR\nSTARTCHAR U_4C70\nENCODING 19568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7880\n97E0\nF880\nABE0\nFAA0\nABE0\nFAA0\n03E0\nA880\nAFE0\nENDCHAR\nSTARTCHAR U_4C71\nENCODING 19569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7880\n93E0\nF940\nABE0\nFCA0\nABC0\nFAA0\n02A0\nAAA0\nA880\nENDCHAR\nSTARTCHAR U_4C72\nENCODING 19570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n7A40\n9380\nF880\nAFE0\nF900\nAEA0\nF9C0\n06A0\nA8A0\nAB00\nENDCHAR\nSTARTCHAR U_4C73\nENCODING 19571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n7800\n8BE0\nFAA0\nABE0\nFAA0\nABE0\nF880\n0BE0\nA880\nB3E0\nENDCHAR\nSTARTCHAR U_4C74\nENCODING 19572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22E0\n7A00\n92E0\nFEA0\nABA0\nFAE0\nAAA0\nFAA0\n02E0\nAA00\nAAE0\nENDCHAR\nSTARTCHAR U_4C75\nENCODING 19573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7A40\n9520\nFA40\nABC0\nF800\nAFE0\nF5A0\n0360\nADA0\nAA60\nENDCHAR\nSTARTCHAR U_4C76\nENCODING 19574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n64E0\nAEA0\nFAC0\nAEA0\nFAA0\nAEA0\nF8A0\n2AE0\nAE80\n8080\nENDCHAR\nSTARTCHAR U_4C77\nENCODING 19575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\n1100\n7F00\n59E0\n6B40\n7D40\n5540\n7D40\n5480\n7D40\nAA20\nENDCHAR\nSTARTCHAR U_4C78\nENCODING 19576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4180\n7AA0\n93E0\nFAA0\nABE0\nF880\nABE0\nF920\n00C0\nA8C0\nAB20\nENDCHAR\nSTARTCHAR U_4C79\nENCODING 19577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n7BE0\n9080\nFBE0\nA880\nFFE0\nAA00\nFBE0\n0680\nA880\nAFE0\nENDCHAR\nSTARTCHAR U_4C7A\nENCODING 19578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7AA0\n93E0\nF800\nABE0\nF800\nABE0\nFA20\n03E0\nA940\nABE0\nENDCHAR\nSTARTCHAR U_4C7B\nENCODING 19579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7B40\n92C0\nFFE0\nAC20\nFBC0\nAA40\nFBC0\n0240\nABC0\nAA40\nENDCHAR\nSTARTCHAR U_4C7C\nENCODING 19580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n7820\nAFE0\nFA40\nAFE0\nFA40\nAFE0\nFA80\n0AA0\nAA40\nB320\nENDCHAR\nSTARTCHAR U_4C7D\nENCODING 19581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7140\nA3E0\nFC00\nABE0\nFAA0\nABE0\nFA00\n0BE0\nA520\nA9E0\nENDCHAR\nSTARTCHAR U_4C7E\nENCODING 19582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7BE0\n92A0\nFFE0\nAAA0\nFBE0\nAAA0\nF9E0\n0220\nA9C0\nAE20\nENDCHAR\nSTARTCHAR U_4C7F\nENCODING 19583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7760\n9280\nFF80\nAAE0\nFFA0\nAAA0\nFFA0\n02A0\nAF20\nAA20\nENDCHAR\nSTARTCHAR U_4C80\nENCODING 19584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n27C0\nF940\n57C0\nFA60\n2F80\n6480\n3F80\n2480\n3F80\n4A40\nENDCHAR\nSTARTCHAR U_4C81\nENCODING 19585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F20\n7920\n8F20\nF8E0\nAF20\nF8A0\nAF60\nFA20\n0F20\nAAA0\nB260\nENDCHAR\nSTARTCHAR U_4C82\nENCODING 19586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n75E0\nAE00\nF9E0\nA8A0\nFE80\nAAC0\nFA80\n0A80\nAB80\nB460\nENDCHAR\nSTARTCHAR U_4C83\nENCODING 19587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n7D40\n92A0\nFBE0\nAAA0\nFBE0\nAAA0\nFBE0\n0880\nAFE0\nA2A0\nENDCHAR\nSTARTCHAR U_4C84\nENCODING 19588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n7680\n98E0\nFF20\nAAA0\nFAA0\nAEA0\nFA40\n0F40\nA2A0\nA520\nENDCHAR\nSTARTCHAR U_4C85\nENCODING 19589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7AE0\n97A0\nFAE0\nAAA0\nFFE0\nAAA0\nFAE0\n0240\nADC0\nA960\nENDCHAR\nSTARTCHAR U_4C86\nENCODING 19590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\n9240\nFBE0\nAAA0\nFBE0\nAAA0\nFBE0\n0000\nAAA0\nAAA0\nENDCHAR\nSTARTCHAR U_4C87\nENCODING 19591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n73E0\n9480\nFBE0\nAAA0\nFBE0\nAA80\nFBC0\n02A0\nAA80\nADE0\nENDCHAR\nSTARTCHAR U_4C88\nENCODING 19592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7880\n9000\nFFE0\nAA40\nFFE0\nAA40\nFB40\n0EE0\nAA40\nB240\nENDCHAR\nSTARTCHAR U_4C89\nENCODING 19593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A20\n6AC0\nAF80\nFAE0\nAEA0\nFAA0\nAEA0\nFAA0\n0FA0\nAAA0\nB120\nENDCHAR\nSTARTCHAR U_4C8A\nENCODING 19594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E80\n6BE0\nAA80\nFCE0\nAB40\nFAE0\nAEA0\nF8E0\n08A0\nA8E0\nA920\nENDCHAR\nSTARTCHAR U_4C8B\nENCODING 19595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n77E0\n9240\nFFE0\nAA40\nFDA0\nABE0\nFA20\n03E0\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_4C8C\nENCODING 19596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7780\n92E0\nFF40\nA840\nFF40\nA840\nFF40\n0240\nAAA0\nAB20\nENDCHAR\nSTARTCHAR U_4C8D\nENCODING 19597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n77E0\n5100\n7FE0\n5480\nFFE0\n5540\n77C0\n5540\n57C0\nAAA0\nENDCHAR\nSTARTCHAR U_4C8E\nENCODING 19598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E80\n7480\nAEE0\nFBA0\nAEA0\nFAA0\nAEA0\nFA40\n0E40\nA2A0\nA320\nENDCHAR\nSTARTCHAR U_4C8F\nENCODING 19599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n77E0\n9240\nFDA0\nA800\nFFE0\nA920\nFBC0\n0140\nAA40\nACC0\nENDCHAR\nSTARTCHAR U_4C90\nENCODING 19600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n7880\n93E0\nFA80\nAAA0\nFBE0\nAAA0\nFBE0\n0280\nABE0\nAD20\nENDCHAR\nSTARTCHAR U_4C91\nENCODING 19601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n77E0\nA100\nFBC0\nA900\nFFE0\nAAA0\nFFE0\n02A0\nAB40\nACA0\nENDCHAR\nSTARTCHAR U_4C92\nENCODING 19602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n7EA0\n92A0\nFF60\nB540\nFFE0\nB540\nFFE0\n1540\nA540\nA340\nENDCHAR\nSTARTCHAR U_4C93\nENCODING 19603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7A80\n9440\nFBA0\nA800\nFEE0\nAAA0\nFEE0\n0440\nAAA0\nAAA0\nENDCHAR\nSTARTCHAR U_4C94\nENCODING 19604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7AA0\n93E0\nFAA0\nABE0\nF800\nAFE0\nFAA0\n03E0\nAAA0\nAFE0\nENDCHAR\nSTARTCHAR U_4C95\nENCODING 19605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7940\n93E0\nF940\nAB60\nF940\nABE0\nF940\n01C0\nA940\nA9C0\nENDCHAR\nSTARTCHAR U_4C96\nENCODING 19606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n77E0\n9080\nFFE0\nA8A0\nFBC0\nA840\nFFE0\n0540\nAFC0\nA840\nENDCHAR\nSTARTCHAR U_4C97\nENCODING 19607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A00\n7760\nA880\nFFE0\nAA20\nFFA0\nAA20\nFEA0\n0B20\nAFA0\nA860\nENDCHAR\nSTARTCHAR U_4C98\nENCODING 19608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7BE0\n9540\nF880\nAFE0\nF820\nABC0\nFA40\n03E0\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_4C99\nENCODING 19609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n6EE0\nB540\nFEE0\nAAA0\nFEA0\nAAA0\nFEA0\n08A0\nAAE0\nAE80\nENDCHAR\nSTARTCHAR U_4C9A\nENCODING 19610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42E0\n7FA0\n9220\nFFE0\nAAA0\nFAE0\nAFA0\nFAE0\n0740\nAAA0\nAAA0\nENDCHAR\nSTARTCHAR U_4C9B\nENCODING 19611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7FE0\nA280\nFFE0\nAAA0\nFFE0\nA820\nF7C0\n0D40\nA540\nA7C0\nENDCHAR\nSTARTCHAR U_4C9C\nENCODING 19612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3B80\n7FC0\nD540\n7FC0\n5540\nAAA0\n5540\n7FC0\n5540\n7FC0\nAAA0\nENDCHAR\nSTARTCHAR U_4C9D\nENCODING 19613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7980\n9240\nFC20\nABC0\nFA40\nAA40\nFAC0\n0A40\n3220\nC3E0\nENDCHAR\nSTARTCHAR U_4C9E\nENCODING 19614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7880\n9080\nFFE0\nA800\nFA20\nAA20\nF940\n0940\n3000\nC7E0\nENDCHAR\nSTARTCHAR U_4C9F\nENCODING 19615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n72E0\n92A0\n22A0\nFBA0\nAAA0\nFAA0\nABE0\nFAA0\n0080\nF880\nENDCHAR\nSTARTCHAR U_4CA0\nENCODING 19616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7900\n93C0\nF900\nAFE0\nFA40\nAFE0\nFA40\n03C0\n1A40\nE3C0\nENDCHAR\nSTARTCHAR U_4CA1\nENCODING 19617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7940\n97E0\n2140\nFBE0\nAB60\nFB60\nAA20\nFBE0\n0220\nFBE0\nENDCHAR\nSTARTCHAR U_4CA2\nENCODING 19618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7540\n5180\n57C0\n7200\n5FE0\n5440\n7BA0\n5540\n57C0\n5540\nBFE0\nENDCHAR\nSTARTCHAR U_4CA3\nENCODING 19619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3900\n2100\nFDE0\nA640\nF940\nA540\nF940\nA880\nF880\nA940\nFE20\nENDCHAR\nSTARTCHAR U_4CA4\nENCODING 19620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4BE0\n7540\n9140\nFBE0\nAAA0\nFEA0\nAAA0\nFB60\n06A0\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_4CA5\nENCODING 19621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nFF00\n1120\n29E0\nFF00\n2500\n3F00\n2000\n3FE0\n4A20\n9560\nENDCHAR\nSTARTCHAR U_4CA6\nENCODING 19622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF100\n9100\nF7C0\n9100\nF100\n8100\nFA80\n2A80\n8A40\n3420\nENDCHAR\nSTARTCHAR U_4CA7\nENCODING 19623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n27C0\n2440\n27C0\nFC40\n27E0\n2400\n27E0\n3820\nC520\n0AE0\nENDCHAR\nSTARTCHAR U_4CA8\nENCODING 19624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n07C0\nFC40\n27C0\n2440\n27E0\n2400\n27E0\n3AA0\nC520\n00C0\nENDCHAR\nSTARTCHAR U_4CA9\nENCODING 19625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2400\n2FE0\n2820\n2FE0\n2820\n4FE0\n5520\n9560\nENDCHAR\nSTARTCHAR U_4CAA\nENCODING 19626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\n2240\nFBC0\n2240\n23E0\n3200\n53E0\n4820\n4D60\n82A0\nENDCHAR\nSTARTCHAR U_4CAB\nENCODING 19627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n53C0\n5240\n53C0\n5240\n53E0\n5200\n53E0\n5520\n9440\n8FE0\nENDCHAR\nSTARTCHAR U_4CAC\nENCODING 19628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n7B80\n4A80\n7A80\n4A80\n7BE0\n4280\n7A80\nAAA0\n8A60\n3320\nENDCHAR\nSTARTCHAR U_4CAD\nENCODING 19629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3900\nD3C0\n9240\n93C0\nFA40\n93E0\n9200\n93E0\n9020\nD560\n8AA0\nENDCHAR\nSTARTCHAR U_4CAE\nENCODING 19630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7FC0\n0440\nFFC0\n5440\n57C0\n5400\n57E0\n52A0\n5D20\n8560\nENDCHAR\nSTARTCHAR U_4CAF\nENCODING 19631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n4BC0\n4A40\n53C0\n5240\n7BE0\n4A00\n6BE0\n9020\nAAA0\nC960\nENDCHAR\nSTARTCHAR U_4CB0\nENCODING 19632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n73C0\n0240\n03C0\nFA40\n23E0\n2200\n43E0\n4D20\nFAA0\n0840\nENDCHAR\nSTARTCHAR U_4CB1\nENCODING 19633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF100\n97E0\nF200\n93C0\nF240\n8240\nFA40\n0A40\nDA40\nAC80\nENDCHAR\nSTARTCHAR U_4CB2\nENCODING 19634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\n2960\n49A0\n4920\nA5C0\n2100\n21E0\n4820\n75E0\n8420\n00C0\nENDCHAR\nSTARTCHAR U_4CB3\nENCODING 19635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n23C0\nFA40\n03C0\n7240\n53E0\n5200\n53E0\n5820\n5560\n82A0\nENDCHAR\nSTARTCHAR U_4CB4\nENCODING 19636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\n2A40\nB3C0\nA240\nA3E0\n2200\n23E0\n5020\n5560\n82A0\nENDCHAR\nSTARTCHAR U_4CB5\nENCODING 19637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1580\n2640\n4400\n0A00\n3F80\n2480\n3FE0\n2000\n3FC0\n5540\nENDCHAR\nSTARTCHAR U_4CB6\nENCODING 19638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F00\n0000\nFFE0\n2900\n5F20\n95E0\n1F00\n1000\n1FC0\n2A40\n54C0\nENDCHAR\nSTARTCHAR U_4CB7\nENCODING 19639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3F80\n2480\n3FE0\n2000\n3FC0\n5540\n0400\n7FC0\n2480\n4440\nENDCHAR\nSTARTCHAR U_4CB8\nENCODING 19640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\n5240\n8BC0\n5240\n53E0\n5200\n53E0\n5020\n5560\n92A0\nENDCHAR\nSTARTCHAR U_4CB9\nENCODING 19641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n2240\n23C0\n7240\nABE0\n2200\n23E0\n2020\n1D60\nE2A0\nENDCHAR\nSTARTCHAR U_4CBA\nENCODING 19642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n4BC0\nFE40\n4BC0\n4A40\n7BE0\n4A00\n4BE0\n4820\n7D60\n02A0\nENDCHAR\nSTARTCHAR U_4CBB\nENCODING 19643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n13C0\nFE40\n23C0\n4A40\n53E0\n2200\n4BE0\n8420\nFD60\n02A0\nENDCHAR\nSTARTCHAR U_4CBC\nENCODING 19644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n53C0\n5240\n7FC0\n9240\n13E0\n7E00\n13E0\n1020\n1D60\nE2A0\nENDCHAR\nSTARTCHAR U_4CBD\nENCODING 19645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n2240\n23C0\n4240\n7BE0\nAA00\n2BE0\n2920\n3EE0\n0040\nENDCHAR\nSTARTCHAR U_4CBE\nENCODING 19646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n2200\n27E0\n3020\nC9C0\n3F80\n2080\n3F80\n2000\n3FC0\n5540\nENDCHAR\nSTARTCHAR U_4CBF\nENCODING 19647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n4A40\n4BC0\n7A40\n53E0\n5E00\n53E0\n5420\n9960\n92A0\nENDCHAR\nSTARTCHAR U_4CC0\nENCODING 19648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF500\n97C0\nF900\n9100\nFFE0\n8100\nF900\n0A80\nDA40\nAC20\nENDCHAR\nSTARTCHAR U_4CC1\nENCODING 19649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\nF220\n9200\nF7E0\n9200\nF2A0\n82A0\nFAA0\n0A40\nDAA0\nAD20\nENDCHAR\nSTARTCHAR U_4CC2\nENCODING 19650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n2A40\n2BC0\n4A40\n9BE0\n0200\n7BE0\n4820\n4D60\n7AA0\nENDCHAR\nSTARTCHAR U_4CC3\nENCODING 19651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F00\n2900\n3F80\n2000\n3FC0\nD240\n3B80\n6A80\n1220\n63E0\nENDCHAR\nSTARTCHAR U_4CC4\nENCODING 19652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n2BC0\n2A40\nABC0\nBE40\nABE0\nAA00\nABE0\nBCA0\nE2A0\n8260\nENDCHAR\nSTARTCHAR U_4CC5\nENCODING 19653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\nF3E0\n9220\nF220\n9220\nF3E0\n8000\nF940\n0940\nDA20\nA420\nENDCHAR\nSTARTCHAR U_4CC6\nENCODING 19654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\n47C0\nF440\n97C0\n9440\nF7E0\n9400\n97E0\nF2A0\n8AA0\n0860\nENDCHAR\nSTARTCHAR U_4CC7\nENCODING 19655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8BE0\nAAA0\n8BE0\nFE00\n8BE0\nAA00\n8BE0\nFC20\n09A0\n1A60\nENDCHAR\nSTARTCHAR U_4CC8\nENCODING 19656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nFBE0\n8A20\nFC20\n83A0\nFAA0\n83A0\nFA60\n0A00\n6A20\n9BE0\nENDCHAR\nSTARTCHAR U_4CC9\nENCODING 19657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BC0\n9240\nD3C0\n2240\n53C0\n8A00\n27E0\n52A0\n2560\n1060\nENDCHAR\nSTARTCHAR U_4CCA\nENCODING 19658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n43E0\nFA20\n43E0\n4A20\n6BE0\n5300\nAAE0\nABE0\n4120\n86E0\nENDCHAR\nSTARTCHAR U_4CCB\nENCODING 19659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n23E0\nFA20\nABE0\nAA20\nFBE0\n2200\n2BE0\n3420\nC2A0\n0560\nENDCHAR\nSTARTCHAR U_4CCC\nENCODING 19660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4BC0\nFE40\n03C0\n7A40\n4BE0\n7A00\n4BE0\n7820\n4D60\n9AA0\nENDCHAR\nSTARTCHAR U_4CCD\nENCODING 19661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n53C0\nFA40\n53C0\n5240\n53E0\nFA40\n03E0\n5020\n52A0\n8560\nENDCHAR\nSTARTCHAR U_4CCE\nENCODING 19662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n9BC0\n8A40\n8BC0\n8A40\nDBE0\n8A00\n8BE0\n8820\n8AA0\nF960\nENDCHAR\nSTARTCHAR U_4CCF\nENCODING 19663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nF7C0\n4440\nF7C0\n4440\n47E0\nF400\n47E0\n42A0\n7AA0\nC860\nENDCHAR\nSTARTCHAR U_4CD0\nENCODING 19664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n1940\nE280\n4C60\n3F00\n2900\n2500\n3FE0\n5520\nAAC0\nENDCHAR\nSTARTCHAR U_4CD1\nENCODING 19665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n4240\nFBC0\nCA40\n7BE0\n4A00\n7BE0\n4820\n4D60\n92A0\nENDCHAR\nSTARTCHAR U_4CD2\nENCODING 19666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n7480\n2480\nFFE0\n4200\nFA20\n8940\nFC80\n0580\nF640\n0C20\nENDCHAR\nSTARTCHAR U_4CD3\nENCODING 19667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n73C0\n2A40\nFBC0\n2240\n43E0\nAA00\n33E0\n2820\n2D60\n3AA0\nENDCHAR\nSTARTCHAR U_4CD4\nENCODING 19668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n73C0\n4040\n7BC0\n0800\n3F80\n2480\n3FE0\n2000\n3FC0\n5540\nENDCHAR\nSTARTCHAR U_4CD5\nENCODING 19669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n39E0\nC520\n55E0\n2920\n7DE0\n0900\n15E0\n7820\n92A0\n3560\nENDCHAR\nSTARTCHAR U_4CD6\nENCODING 19670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\nF7E0\n9540\nF740\n9540\nF740\n8540\nFD40\n0F40\nD960\nA940\nENDCHAR\nSTARTCHAR U_4CD7\nENCODING 19671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3F80\n2480\n3FE0\n2000\n3FC0\n5540\n3240\n7FE0\n1900\n3280\nENDCHAR\nSTARTCHAR U_4CD8\nENCODING 19672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\nF660\n9240\nF7E0\n9240\nFA40\n8340\nFE60\n0AC0\nAA40\nB660\nENDCHAR\nSTARTCHAR U_4CD9\nENCODING 19673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\nFA20\nABE0\nAA00\nFBA0\n0200\nFBE0\n40A0\nBB20\n1220\n71E0\nENDCHAR\nSTARTCHAR U_4CDA\nENCODING 19674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8BC0\nFA40\n8BC0\nFA40\n03E0\nFA00\n23E0\nFAA0\n2560\n2040\nENDCHAR\nSTARTCHAR U_4CDB\nENCODING 19675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8BE0\nFA20\n8BE0\nFA00\n43E0\nFA00\n53E0\n9020\n6520\n9560\nENDCHAR\nSTARTCHAR U_4CDC\nENCODING 19676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n33C0\n4B40\nF640\n23C0\nFA00\n23E0\n7020\nAAA0\n2520\n6060\nENDCHAR\nSTARTCHAR U_4CDD\nENCODING 19677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n4A40\n33C0\nFE40\n03E0\n7A00\n4BE0\n4AA0\n7D20\n4860\nENDCHAR\nSTARTCHAR U_4CDE\nENCODING 19678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7D00\n12C0\n3A40\n12C0\nFD40\n20C0\n7B40\n9040\n3D80\n1100\nENDCHAR\nSTARTCHAR U_4CDF\nENCODING 19679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3900\nEBC0\nAA40\nBBC0\nEA40\nBBC0\nAA00\nEBE0\n2AA0\n4D20\n98C0\nENDCHAR\nSTARTCHAR U_4CE0\nENCODING 19680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE3C0\n2240\nFBC0\n2240\nABE0\nFA00\nABE0\n7520\n2AA0\nF060\nENDCHAR\nSTARTCHAR U_4CE1\nENCODING 19681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n43C0\nD240\n7BC0\n5240\n7BE0\n5200\n7BE0\n52A0\n7D60\n4420\nENDCHAR\nSTARTCHAR U_4CE2\nENCODING 19682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n53C0\nFA40\n53C0\n7240\n53E0\n7200\n53E0\nFAA0\n5520\n8860\nENDCHAR\nSTARTCHAR U_4CE3\nENCODING 19683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7940\n2120\nFFE0\n4940\n5F80\nB160\n1F00\n1100\n1FC0\n1540\n6A40\nENDCHAR\nSTARTCHAR U_4CE4\nENCODING 19684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nABC0\n7240\n23C0\nFA40\nABE0\nBA00\nEBE0\nA820\nAAA0\n8D60\nENDCHAR\nSTARTCHAR U_4CE5\nENCODING 19685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nA5E0\nA520\nFDE0\n2120\n51E0\nAD00\n11E0\nF8A0\n4D20\n3560\nENDCHAR\nSTARTCHAR U_4CE6\nENCODING 19686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n8240\n7BC0\n0240\n7BE0\n4A00\n7BE0\n48A0\n7EA0\nC260\nENDCHAR\nSTARTCHAR U_4CE7\nENCODING 19687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF2E0\n9220\nF7E0\n9680\nFAE0\n8240\nFBE0\n0A40\nDAA0\nAB20\nENDCHAR\nSTARTCHAR U_4CE8\nENCODING 19688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BC0\n4A40\n7BC0\n4A40\nFBC0\n2200\nFBE0\n22A0\n3D20\nC560\nENDCHAR\nSTARTCHAR U_4CE9\nENCODING 19689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n2BC0\nFE40\nABC0\nAA40\nFFE0\n4A00\nFFE0\n4820\n32A0\nCD40\nENDCHAR\nSTARTCHAR U_4CEA\nENCODING 19690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nABE0\nAAA0\nFBE0\n0200\nFBE0\n2200\nFBE0\nA820\nABA0\n8860\nENDCHAR\nSTARTCHAR U_4CEB\nENCODING 19691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE900\nB7C0\n5A40\n53C0\n8A40\n7FE0\n2200\nFFE0\n20A0\n5AA0\n8A60\nENDCHAR\nSTARTCHAR U_4CEC\nENCODING 19692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFBC0\n5240\n73C0\n2240\nFBE0\nAA00\nFBE0\n2120\nFD60\n2440\nENDCHAR\nSTARTCHAR U_4CED\nENCODING 19693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE80\nABC0\nAA40\nEBC0\nAA40\nABE0\nEA00\n8BE0\nAEA0\nEAA0\n0860\nENDCHAR\nSTARTCHAR U_4CEE\nENCODING 19694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4B80\n78A0\n4BC0\n4AA0\nBF80\n2480\n3FE0\n2000\n3FC0\n5540\nENDCHAR\nSTARTCHAR U_4CEF\nENCODING 19695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n23C0\nFA40\n23C0\nFA40\nABE0\nFA00\nABE0\nF820\n2560\nFAA0\nENDCHAR\nSTARTCHAR U_4CF0\nENCODING 19696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DC0\n5540\n55C0\nDD40\n49E0\n7F00\n49E0\n5C20\n6BA0\n4A60\nENDCHAR\nSTARTCHAR U_4CF1\nENCODING 19697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3E0\n5540\nFBE0\n20A0\n6360\n3F80\n2480\n3FE0\n2000\n3FC0\n5540\nENDCHAR\nSTARTCHAR U_4CF2\nENCODING 19698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nE400\n57E0\nE540\n55A0\n3F80\n2480\n3FE0\n2000\n3FC0\n5540\nENDCHAR\nSTARTCHAR U_4CF3\nENCODING 19699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\nFBC0\n2240\nABC0\nFA40\n03E0\n7200\n03E0\nF820\n7560\nAAA0\nENDCHAR\nSTARTCHAR U_4CF4\nENCODING 19700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nABC0\nAA40\nFBC0\n2240\nABE0\n7200\n23E0\n7020\nA960\n22A0\nENDCHAR\nSTARTCHAR U_4CF5\nENCODING 19701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n51E0\nDD20\n75E0\nD520\n55E0\nF500\n55E0\nD420\n6560\n48A0\nENDCHAR\nSTARTCHAR U_4CF6\nENCODING 19702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF2A0\n9000\nF340\n9280\nF100\n81E0\nF8A0\n0BC0\nD940\nAA20\nENDCHAR\nSTARTCHAR U_4CF7\nENCODING 19703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nAB60\n4580\nCB00\n52E0\n3F80\n2480\n3FE0\n2000\n3FC0\n5540\nENDCHAR\nSTARTCHAR U_4CF8\nENCODING 19704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4880\n7FE0\n5DC0\n6AA0\n56C0\n5B40\n5FE0\n4020\nA560\nENDCHAR\nSTARTCHAR U_4CF9\nENCODING 19705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n9020\nF760\n9040\nFFE0\n85A0\nF540\n15A0\nD920\n31E0\nENDCHAR\nSTARTCHAR U_4CFA\nENCODING 19706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n53C0\nAA40\n73C0\n1240\nFBE0\n5200\nFBE0\nA820\nDD60\nFAA0\nENDCHAR\nSTARTCHAR U_4CFB\nENCODING 19707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFD00\n79E0\n7940\nFD40\n2A40\n7F00\n7F00\n7FE0\nAA20\nA960\nENDCHAR\nSTARTCHAR U_4CFC\nENCODING 19708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF400\n95C0\nF540\n95C0\nFC00\n87E0\nF6A0\n17E0\nF400\n17E0\nENDCHAR\nSTARTCHAR U_4CFD\nENCODING 19709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nABC0\nFA40\n53C0\n7A40\nD3E0\n7A00\n53E0\n7AA0\n5520\n7860\nENDCHAR\nSTARTCHAR U_4CFE\nENCODING 19710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nD080\nBBE0\n52A0\nABE0\n7200\n53E0\n7200\n03E0\n5060\n3BA0\nE060\nENDCHAR\nSTARTCHAR U_4CFF\nENCODING 19711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4C80\n6BE0\nBF20\n69E0\nA920\n49E0\n5500\nA1E0\n0020\nAAA0\nA860\nENDCHAR\nSTARTCHAR U_4D00\nENCODING 19712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n5240\nFBC0\nAA40\nFBE0\nAA00\nFBE0\n2020\n3D60\nE540\nENDCHAR\nSTARTCHAR U_4D01\nENCODING 19713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n8320\n7DE0\n5520\n7DE0\n5500\nFFE0\n92A0\n9BA0\nA660\nENDCHAR\nSTARTCHAR U_4D02\nENCODING 19714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n93C0\nFA40\nABC0\nAA40\nFBE0\n4A00\nB3E0\n7520\nAD60\n6040\nENDCHAR\nSTARTCHAR U_4D03\nENCODING 19715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n7DE0\n1120\nFFE0\n4520\nEFE0\n4500\nFDE0\n4820\n4D60\n8AA0\nENDCHAR\nSTARTCHAR U_4D04\nENCODING 19716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nE3C0\nAA40\nFFC0\n8640\n4BE0\nFE00\nABE0\n7C20\n4AA0\n8AC0\nENDCHAR\nSTARTCHAR U_4D05\nENCODING 19717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n5520\nFFE0\n4520\n79E0\n4900\n79E0\n4820\n7AA0\n86E0\nENDCHAR\nSTARTCHAR U_4D06\nENCODING 19718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nD900\n53C0\nFA40\n53C0\nFA40\n23E0\n7200\n23E0\nF820\n52A0\n8AC0\nENDCHAR\nSTARTCHAR U_4D07\nENCODING 19719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n11C0\nFF40\nD5C0\n3940\n65E0\n9300\n79E0\n0AA0\n32A0\n1060\nENDCHAR\nSTARTCHAR U_4D08\nENCODING 19720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFBC0\nBA40\nEBC0\nBA40\nEBE0\n2200\nFBE0\n2020\n5160\n8AA0\nENDCHAR\nSTARTCHAR U_4D09\nENCODING 19721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\nABC0\nFE40\n03C0\nFE40\n4BE0\n7A00\n57E0\nD820\n4D60\n6540\nENDCHAR\nSTARTCHAR U_4D0A\nENCODING 19722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFBC0\n2240\nFBC0\n2240\nFBE0\n5200\nFBE0\n5020\nFBA0\n4C60\nENDCHAR\nSTARTCHAR U_4D0B\nENCODING 19723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\nF2A0\n93E0\nF000\n97E0\nFA20\n83E0\nF920\n2EC0\nAA40\n9320\nENDCHAR\nSTARTCHAR U_4D0C\nENCODING 19724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\nF7E0\n9240\nF7E0\n9420\nFBC0\n8100\nFEA0\n09C0\nAEA0\nB100\nENDCHAR\nSTARTCHAR U_4D0D\nENCODING 19725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE40\nAAE0\nEEA0\nAAE0\nAAA0\nEEE0\nAA80\nEEE0\n4420\nABA0\nAA60\nENDCHAR\nSTARTCHAR U_4D0E\nENCODING 19726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n1500\nFFE0\nAAA0\nFBE0\n1000\n3F80\n2480\n3FE0\n5520\n8AC0\nENDCHAR\nSTARTCHAR U_4D0F\nENCODING 19727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\nFDE0\n4920\n79E0\n4520\nF7E0\n5500\nF7E0\n4020\nAAA0\nAAE0\nENDCHAR\nSTARTCHAR U_4D10\nENCODING 19728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFDC0\n9540\n69C0\nDD40\n69E0\n9D00\n71E0\n4820\n7AA0\nCE60\nENDCHAR\nSTARTCHAR U_4D11\nENCODING 19729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n49C0\nFD40\nA5C0\nFD40\n85E0\n7900\n49E0\n7AA0\n4AA0\nFC60\nENDCHAR\nSTARTCHAR U_4D12\nENCODING 19730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n10E0\nFEA0\nBAE0\n54A0\nFEE0\nAA80\nFEE0\n5420\nBBA0\nFE60\nENDCHAR\nSTARTCHAR U_4D13\nENCODING 19731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE3C0\n2340\nFAC0\nAA40\nAAC0\nAA00\nABE0\nA820\nB7E0\n2040\nENDCHAR\nSTARTCHAR U_4D14\nENCODING 19732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n23C0\nFB40\n52C0\n8A40\n5280\n53E0\n5020\n27E0\n5020\n88C0\nENDCHAR\nSTARTCHAR U_4D15\nENCODING 19733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC20\n2120\nF920\n4920\n3460\nDF80\n1480\n1FC0\n0040\n7E40\n0180\nENDCHAR\nSTARTCHAR U_4D16\nENCODING 19734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n2240\n7B40\n22C0\nFE00\n4BE0\n7820\n4FE0\n7820\n48C0\nENDCHAR\nSTARTCHAR U_4D17\nENCODING 19735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n7B40\n4AC0\n7A40\n4A80\n7BE0\n2820\nFFA0\n4820\n84C0\nENDCHAR\nSTARTCHAR U_4D18\nENCODING 19736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n53C0\n5A40\n5340\n7EC0\n5200\n7BE0\n4020\n7BA0\nA820\nCCC0\nENDCHAR\nSTARTCHAR U_4D19\nENCODING 19737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n7FC0\n5140\n7BC0\n4540\n4FC0\n7500\n5FE0\n7420\n95A0\n0440\nENDCHAR\nSTARTCHAR U_4D1A\nENCODING 19738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3880\n27E0\nF800\n8BC0\nDA40\nAA40\nDA40\nAA40\n8A40\nFC60\nENDCHAR\nSTARTCHAR U_4D1B\nENCODING 19739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n3AA0\n21C0\nFBE0\n8A20\nDBE0\nAA20\nABE0\nDA20\nAA20\nFC60\nENDCHAR\nSTARTCHAR U_4D1C\nENCODING 19740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3BE0\n22A0\nFBE0\n8AA0\nDBE0\nA940\nA940\nD960\nAA40\nFA60\nENDCHAR\nSTARTCHAR U_4D1D\nENCODING 19741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n39C0\n2140\nF9C0\nA940\nDFE0\nAA80\nFBE0\nAAA0\nDBC0\nAEA0\nF880\nENDCHAR\nSTARTCHAR U_4D1E\nENCODING 19742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2360\n3DA0\n2360\nFDA0\nAAA0\nDA40\nAFE0\nFA40\nABE0\nDA40\nFBE0\nENDCHAR\nSTARTCHAR U_4D1F\nENCODING 19743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4A40\n7FC0\n5100\n5DC0\n5120\n5FE0\n9900\n9520\n20E0\nENDCHAR\nSTARTCHAR U_4D20\nENCODING 19744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4940\n7FC0\n5520\n58E0\n4F00\n4200\n5FE0\n8880\nB060\nENDCHAR\nSTARTCHAR U_4D21\nENCODING 19745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4920\n2940\n7FE0\n4A00\n7FC0\n4A40\n7FC0\n5A80\n9320\n9BE0\nENDCHAR\nSTARTCHAR U_4D22\nENCODING 19746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4A40\n7FC0\n5120\n5CE0\n4200\n7FC0\n4A80\n9240\nA220\nENDCHAR\nSTARTCHAR U_4D23\nENCODING 19747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFFC0\nAAA0\nFDC0\n9480\nFFE0\nA880\nBC80\nA880\nB880\nAD80\nENDCHAR\nSTARTCHAR U_4D24\nENCODING 19748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4940\n7FC0\n5080\n5EE0\n4B80\n5200\n4F80\n8200\n9FC0\nENDCHAR\nSTARTCHAR U_4D25\nENCODING 19749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9240\nFFC0\nA100\nAD20\nB0E0\n9000\nBDE0\n9520\nADE0\nENDCHAR\nSTARTCHAR U_4D26\nENCODING 19750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4A40\n7FC0\n5080\n5AC0\n7FE0\n4000\n4F80\n8880\n0F80\nENDCHAR\nSTARTCHAR U_4D27\nENCODING 19751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFC80\nABE0\nFC80\nADC0\nFEA0\n8080\nABE0\nBD40\nA880\nB760\nENDCHAR\nSTARTCHAR U_4D28\nENCODING 19752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFE80\nABE0\nFE20\nABE0\nFE20\nABE0\nBE80\nABC0\nBAA0\nAD80\nENDCHAR\nSTARTCHAR U_4D29\nENCODING 19753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4940\n7FC0\n5100\n7FE0\n5540\n5FC0\n4000\n9FC0\nB260\nENDCHAR\nSTARTCHAR U_4D2A\nENCODING 19754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n5240\n7FC0\n5100\n79C0\n4A40\n57E0\n7AA0\n91C0\n92A0\nENDCHAR\nSTARTCHAR U_4D2B\nENCODING 19755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\nFC80\nABE0\nFEA0\nADC0\nFC80\nA940\nBEA0\nA9C0\nA840\nBCC0\nENDCHAR\nSTARTCHAR U_4D2C\nENCODING 19756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\nFEA0\n55E0\nBA80\n3880\n5480\nA280\n3C80\n6440\n1860\nE620\nENDCHAR\nSTARTCHAR U_4D2D\nENCODING 19757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nF840\nA840\n57E0\nA8C0\n5140\nA940\n7240\nD440\n2940\nD080\nENDCHAR\nSTARTCHAR U_4D2E\nENCODING 19758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\nA880\n52A0\nAAA0\n52A0\nAAA0\n72A0\nD2A0\n22A0\nD3E0\nENDCHAR\nSTARTCHAR U_4D2F\nENCODING 19759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFF00\n55E0\n56A0\nB8A0\n5520\nA660\n78A0\n4B20\n3020\nCC40\nENDCHAR\nSTARTCHAR U_4D30\nENCODING 19760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n10A0\nFC80\n55E0\nBA80\n2880\nC4A0\n38A0\nE8C0\n3160\nCA20\nENDCHAR\nSTARTCHAR U_4D31\nENCODING 19761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\nFC80\nABE0\n6A20\nB500\n4940\nA580\n7920\nC920\n3120\nC9E0\nENDCHAR\nSTARTCHAR U_4D32\nENCODING 19762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFD00\nAFE0\n5100\nABC0\n5100\nAB80\n7540\nD920\n2100\nD100\nENDCHAR\nSTARTCHAR U_4D33\nENCODING 19763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF880\nAFE0\n5420\nA800\n5140\nA940\n7140\nD240\n2220\nD420\nENDCHAR\nSTARTCHAR U_4D34\nENCODING 19764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\nA9E0\n5100\nA900\n5100\nAFE0\n7420\nD420\n2420\nD7E0\nENDCHAR\nSTARTCHAR U_4D35\nENCODING 19765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\nF940\nABE0\n5140\nA940\n57E0\nA940\n7140\nD140\n2240\nD440\nENDCHAR\nSTARTCHAR U_4D36\nENCODING 19766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\nFB40\nA9C0\n52A0\nADE0\n5080\nA3E0\n7080\nD3E0\n2080\nDFE0\nENDCHAR\nSTARTCHAR U_4D37\nENCODING 19767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\nA820\n5380\nA800\n57E0\nAA80\n72A0\nD2A0\n24A0\nD860\nENDCHAR\nSTARTCHAR U_4D38\nENCODING 19768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nFBA0\nAAA0\n5140\nABE0\n7040\n97E0\n5080\n2080\n5280\n9100\nENDCHAR\nSTARTCHAR U_4D39\nENCODING 19769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFAA0\nABE0\n52A0\n8BE0\n2080\n77E0\n91C0\n52A0\n24A0\nD080\nENDCHAR\nSTARTCHAR U_4D3A\nENCODING 19770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\nAC40\n5280\nAFE0\n5000\nAFC0\n7440\nD440\n2440\nD7C0\nENDCHAR\nSTARTCHAR U_4D3B\nENCODING 19771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n21E0\nFAA0\n2520\nFFE0\n2480\n5B40\n2E80\nD160\n0E00\nF1C0\nENDCHAR\nSTARTCHAR U_4D3C\nENCODING 19772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFFE0\nAA80\n5120\nAEE0\n5280\nA240\n7FE0\nD140\n20A0\nD760\nENDCHAR\nSTARTCHAR U_4D3D\nENCODING 19773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBE0\nAAA0\n53E0\nAAA0\n53E0\nA980\n7280\nD7E0\n2080\nD080\nENDCHAR\nSTARTCHAR U_4D3E\nENCODING 19774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nFBE0\nA880\n53E0\nA880\n53E0\nA900\n71E0\nD280\n2480\nDBE0\nENDCHAR\nSTARTCHAR U_4D3F\nENCODING 19775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nFC20\nABC0\n5000\nAFE0\n5200\nADA0\n72C0\nD5A0\n2280\nD580\nENDCHAR\nSTARTCHAR U_4D40\nENCODING 19776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFAA0\nA9C0\n53E0\nAA20\n53A0\nAAE0\n7220\nD3E0\n2140\nD220\nENDCHAR\nSTARTCHAR U_4D41\nENCODING 19777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\nFAE0\n2F20\n72C0\nAA80\n7340\nAE40\n7BE0\nDA40\n2B40\nDAC0\nENDCHAR\nSTARTCHAR U_4D42\nENCODING 19778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n2240\n77E0\nAD20\n77E0\nAD20\n7FA0\nD4A0\n27A0\nD460\nENDCHAR\nSTARTCHAR U_4D43\nENCODING 19779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\nFFE0\n5540\nBBE0\n26A0\n5BE0\nCAA0\n2BE0\n1140\n2A20\nC420\nENDCHAR\nSTARTCHAR U_4D44\nENCODING 19780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nFBE0\nAAA0\n73E0\nAAA0\n57E0\n8A20\n73E0\nD220\n3140\n4BE0\nENDCHAR\nSTARTCHAR U_4D45\nENCODING 19781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFDE0\n1340\nFCC0\n4920\nFFE0\n4A40\nB7A0\n4940\n0F00\n70C0\nENDCHAR\nSTARTCHAR U_4D46\nENCODING 19782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFFE0\nAA40\n57E0\nAC20\n53C0\nA920\n76C0\nD180\n26C0\nD120\nENDCHAR\nSTARTCHAR U_4D47\nENCODING 19783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7D00\n41E0\n5440\n7F40\n5540\n5D40\n7680\n5C80\n5540\n9220\nENDCHAR\nSTARTCHAR U_4D48\nENCODING 19784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5600\nAFE0\n6220\nAFC0\n2A80\n15C0\n7FE0\n4880\n7DE0\n5DC0\nAAA0\nENDCHAR\nSTARTCHAR U_4D49\nENCODING 19785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n7FE0\n5DC0\n6AA0\n5580\n7F60\n5540\n9D40\n94C0\nENDCHAR\nSTARTCHAR U_4D4A\nENCODING 19786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n57C0\n5280\n7FE0\n5540\nFFC0\n5540\n57C0\n5000\n9280\nB440\nENDCHAR\nSTARTCHAR U_4D4B\nENCODING 19787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF900\n57E0\nFA00\n03C0\nFE40\nABC0\nFA40\nABC0\n5240\n8AC0\nENDCHAR\nSTARTCHAR U_4D4C\nENCODING 19788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF900\n57C0\nFD40\nAB40\nFBA0\nAD00\nF900\n5280\n5440\n8820\nENDCHAR\nSTARTCHAR U_4D4D\nENCODING 19789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFBE0\n5000\nF9C0\n0140\nF9C0\nA800\nA9C0\nF880\n53E0\n8880\nENDCHAR\nSTARTCHAR U_4D4E\nENCODING 19790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFAA0\n53E0\nF800\n23E0\nF900\nABE0\nFAA0\nAAA0\n52A0\n8A60\nENDCHAR\nSTARTCHAR U_4D4F\nENCODING 19791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\nF920\n55A0\nFB60\n05A0\nFB60\nA880\nFB40\nA8A0\n5040\n8B80\nENDCHAR\nSTARTCHAR U_4D50\nENCODING 19792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nFAA0\n53E0\nFD40\n02A0\nFBE0\nAAA0\nFBE0\nA880\n57E0\n8880\nENDCHAR\nSTARTCHAR U_4D51\nENCODING 19793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nF3E0\n2120\nF920\n7320\nA920\n51A0\nA920\n7120\nAA20\n64C0\nENDCHAR\nSTARTCHAR U_4D52\nENCODING 19794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\nE3C0\n2240\nFE40\n7240\nABC0\n2240\n5240\nAA40\n73C0\nAA40\nENDCHAR\nSTARTCHAR U_4D53\nENCODING 19795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n2280\nFBE0\n7480\nA880\n5080\nAFE0\nA880\n7080\nA880\n6080\nENDCHAR\nSTARTCHAR U_4D54\nENCODING 19796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\n23E0\nFC80\n73E0\nAAA0\n23E0\nDAA0\nABE0\n71C0\nAAA0\n64A0\nENDCHAR\nSTARTCHAR U_4D55\nENCODING 19797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\nE3E0\n2220\nFBE0\n7280\nABE0\n5280\nAA80\n73E0\nAB20\n65E0\nENDCHAR\nSTARTCHAR U_4D56\nENCODING 19798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA140\nF880\n9140\nFFA0\n0400\nFFE0\n2A80\nD560\n2E80\n5540\nENDCHAR\nSTARTCHAR U_4D57\nENCODING 19799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n2000\nFDC0\n6940\nA5C0\n5000\nABE0\nAAA0\n73E0\nAEA0\n63E0\nENDCHAR\nSTARTCHAR U_4D58\nENCODING 19800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n73C0\n2240\nFBC0\n7240\nAFE0\n5200\nABE0\nAEA0\n72A0\nAD20\n6240\nENDCHAR\nSTARTCHAR U_4D59\nENCODING 19801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n27E0\nFA40\n75E0\nAB40\n2080\n5300\nA9E0\n72A0\nA8C0\n6700\nENDCHAR\nSTARTCHAR U_4D5A\nENCODING 19802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78E0\n2720\nFD20\n72C0\nA900\n2660\n5420\nAF60\n7420\nAFE0\n6420\nENDCHAR\nSTARTCHAR U_4D5B\nENCODING 19803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF760\n4AA0\nFFA0\n6940\nDF40\n4AA0\nAFA0\n5100\nE7C0\n5100\nDFE0\nENDCHAR\nSTARTCHAR U_4D5C\nENCODING 19804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7140\n23E0\nFAA0\n73E0\nAAA0\n73E0\nAA00\nABE0\n76A0\nAA40\n6B20\nENDCHAR\nSTARTCHAR U_4D5D\nENCODING 19805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\nD680\nBA80\nFE80\n1080\n7C80\n1080\nFE80\n0080\nAAA0\nAAE0\nENDCHAR\nSTARTCHAR U_4D5E\nENCODING 19806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC20\nD420\nBD20\n9520\nFD20\n1120\n7D20\n1120\nFC20\nAA20\nAA60\nENDCHAR\nSTARTCHAR U_4D5F\nENCODING 19807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\nDC80\nB480\nFC80\n1080\n7BE0\n1080\nFC80\n0080\nA480\nA480\nENDCHAR\nSTARTCHAR U_4D60\nENCODING 19808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n5500\n7DE0\n5520\n7E20\n1020\n7D20\n10A0\nFE20\nAAA0\nAA40\nENDCHAR\nSTARTCHAR U_4D61\nENCODING 19809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0400\nFFC0\n3580\n6EC0\nBFA0\n0400\n3F80\n0400\nFFE0\n5240\nENDCHAR\nSTARTCHAR U_4D62\nENCODING 19810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA880\nF9C0\n2080\n7080\n23E0\nF880\n01C0\n51C0\nAAA0\n0080\nENDCHAR\nSTARTCHAR U_4D63\nENCODING 19811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7DE0\n6D20\n5520\n7DE0\n1120\n7D20\n11E0\nFE00\n0000\nABE0\nENDCHAR\nSTARTCHAR U_4D64\nENCODING 19812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n1100\nFFE0\n2100\n7FC0\n5540\n7FC0\n0400\nFFE0\n5240\n8920\nENDCHAR\nSTARTCHAR U_4D65\nENCODING 19813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\nAC80\nFFE0\n2AA0\n72A0\n23E0\nFA00\n6A20\nD620\nA3E0\nENDCHAR\nSTARTCHAR U_4D66\nENCODING 19814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\nAA40\nF840\nADE0\nFA40\n2040\n7140\n2140\nFA40\n5240\nAEC0\nENDCHAR\nSTARTCHAR U_4D67\nENCODING 19815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nF920\n2100\nFFE0\nA900\nF940\n2140\nF880\n2180\nFEA0\nAA60\nENDCHAR\nSTARTCHAR U_4D68\nENCODING 19816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D40\n5540\n7FE0\n5500\n7D40\n1180\n7AE0\n1280\nFAE0\n5580\n54E0\nENDCHAR\nSTARTCHAR U_4D69\nENCODING 19817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n1120\nFD20\n3920\nF460\n3F80\n2E80\n3F80\n1500\nFFE0\n6AC0\nENDCHAR\nSTARTCHAR U_4D6A\nENCODING 19818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n5520\n7DE0\n5520\n7DE0\n1000\n7D40\n11E0\nFF40\nAB40\nABE0\nENDCHAR\nSTARTCHAR U_4D6B\nENCODING 19819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA3A0\n5480\nAC40\n1780\n7FC0\n5540\n0400\n7FC0\n9120\nENDCHAR\nSTARTCHAR U_4D6C\nENCODING 19820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CA0\n57C0\n7D80\n56C0\n7CA0\n1080\n7DE0\n1120\nFFE0\nAB20\nABE0\nENDCHAR\nSTARTCHAR U_4D6D\nENCODING 19821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n55C0\n7CA0\n54A0\n7FE0\n1080\n7FE0\n1320\nFDE0\nAB20\nABE0\nENDCHAR\nSTARTCHAR U_4D6E\nENCODING 19822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAA20\nABE0\nFA20\n23E0\nF800\n27E0\n3A00\nE7E0\n1520\nAAE0\nENDCHAR\nSTARTCHAR U_4D6F\nENCODING 19823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8C0\nAB80\nFFE0\nFAA0\n23E0\n72A0\n23E0\nF080\n55C0\nAA80\n83E0\nENDCHAR\nSTARTCHAR U_4D70\nENCODING 19824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\nABE0\nFE40\nABC0\nFA40\n27E0\n7200\n27E0\nFAA0\n0520\nAAC0\nENDCHAR\nSTARTCHAR U_4D71\nENCODING 19825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nAFE0\nF880\nAFE0\nFA40\n23C0\nF940\n27E0\n3A40\nEBC0\nAA40\nENDCHAR\nSTARTCHAR U_4D72\nENCODING 19826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\nAA40\nFA40\nAFE0\nFDA0\n27E0\n7080\n27E0\nF9C0\n52A0\nACA0\nENDCHAR\nSTARTCHAR U_4D73\nENCODING 19827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF980\nAA40\nFDA0\nA800\nFFE0\n24A0\nFFE0\n2240\nFBC0\nAA40\nA3C0\nENDCHAR\nSTARTCHAR U_4D74\nENCODING 19828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFAA0\nABE0\nF880\n23E0\n72A0\n23E0\n7AA0\nD7A0\nA8E0\nENDCHAR\nSTARTCHAR U_4D75\nENCODING 19829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n79E0\n9240\n3F80\n2880\n2480\nFFE0\n2480\nDF60\n0400\n6B40\nENDCHAR\nSTARTCHAR U_4D76\nENCODING 19830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n7AA0\n8EE0\n0A80\nEEE0\nAAA0\nAEE0\nEAA0\n0EE0\n0A80\n33E0\nENDCHAR\nSTARTCHAR U_4D77\nENCODING 19831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4AA0\nEEE0\n4280\nEEE0\n0AA0\n4EE0\nEAA0\n4EE0\n6A00\n83E0\nENDCHAR\nSTARTCHAR U_4D78\nENCODING 19832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n22A0\nFC80\n7140\nAA20\n2420\n7FC0\n4A40\n7BC0\n0A20\n0FE0\nENDCHAR\nSTARTCHAR U_4D79\nENCODING 19833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n7E40\nABE0\n7A40\n2E40\nD0C0\n7FC0\n4A40\n7BC0\n0A20\n0FE0\nENDCHAR\nSTARTCHAR U_4D7A\nENCODING 19834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\n4AA0\n4BA0\n4AA0\nEBA0\n4820\n4EE0\n4280\n6EE0\n8AA0\n12A0\nENDCHAR\nSTARTCHAR U_4D7B\nENCODING 19835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3940\n2BE0\nB940\nABE0\nB940\nA940\nFFE0\n2840\nEFE0\nAA40\nABC0\nENDCHAR\nSTARTCHAR U_4D7C\nENCODING 19836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n7A40\n0FE0\n7A40\n8940\n5FA0\n54A0\n72E0\n1F80\n70E0\n90A0\nENDCHAR\nSTARTCHAR U_4D7D\nENCODING 19837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\n73E0\n5220\n7740\n5E80\nF560\n3F00\n1080\n3FC0\nENDCHAR\nSTARTCHAR U_4D7E\nENCODING 19838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n6FE0\nA480\n2280\nF880\n23E0\nF880\n53E0\n7140\n5080\nFB60\nENDCHAR\nSTARTCHAR U_4D7F\nENCODING 19839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFBE0\n9120\nF4C0\n5720\nE400\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_4D80\nENCODING 19840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n4880\n7BC0\n5140\nFAE0\n0E00\n3180\nCE60\n1100\n1F00\nENDCHAR\nSTARTCHAR U_4D81\nENCODING 19841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFBE0\n5640\n3D80\nD660\n2D80\n3FC0\n2240\n3FC0\nENDCHAR\nSTARTCHAR U_4D82\nENCODING 19842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5900\n8900\nDBE0\n8A20\nDC20\nA920\nF8A0\nA820\nF820\nAA20\nF6C0\nENDCHAR\nSTARTCHAR U_4D83\nENCODING 19843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n5880\n8880\nD940\n8940\nFA20\nACA0\n73C0\nA840\nF840\nAC80\nF880\nENDCHAR\nSTARTCHAR U_4D84\nENCODING 19844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n5BE0\n8880\nDAA0\n89C0\nF880\nAFE0\nF880\nA880\nF880\nAC80\nE880\nENDCHAR\nSTARTCHAR U_4D85\nENCODING 19845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nD900\n89E0\nDB40\n8C80\nF940\n0620\nABC0\nFA40\nABC0\nF820\nA7C0\nENDCHAR\nSTARTCHAR U_4D86\nENCODING 19846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n9A40\n8BE0\nDE40\n8BE0\nFA40\nAA40\nFBE0\nAA40\nFA40\nA7E0\nENDCHAR\nSTARTCHAR U_4D87\nENCODING 19847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nD880\n8BE0\nDAA0\n8BE0\nFAA0\n03E0\nA940\nF9C0\nA940\nF9C0\nA540\nENDCHAR\nSTARTCHAR U_4D88\nENCODING 19848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nD880\n8BE0\nD880\n8BE0\nFAA0\n03E0\nAAA0\nF840\nABE0\nF940\nA4C0\nENDCHAR\nSTARTCHAR U_4D89\nENCODING 19849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n8AE0\nDAA0\n8B60\nF940\n0240\nABE0\nFAA0\nABE0\nFAA0\nABE0\nENDCHAR\nSTARTCHAR U_4D8A\nENCODING 19850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7BE0\n4920\n7920\n4920\nFFE0\nA520\nFD20\n4920\n4920\n8BE0\nENDCHAR\nSTARTCHAR U_4D8B\nENCODING 19851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n7240\n5280\n7AE0\n5220\nFB20\nAB40\nFAC0\n5480\n5540\n9A20\nENDCHAR\nSTARTCHAR U_4D8C\nENCODING 19852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7BE0\n5C20\n6BA0\nFAA0\nABA0\nFA20\nAA60\nFA00\n5220\n93E0\nENDCHAR\nSTARTCHAR U_4D8D\nENCODING 19853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF9E0\n2160\n49A0\nFBE0\n26A0\nFBE0\n22A0\n23E0\n3940\nC240\nENDCHAR\nSTARTCHAR U_4D8E\nENCODING 19854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7880\n5940\n6A20\n7FE0\n5400\n7DC0\n5540\nFF40\n29C0\nC940\nENDCHAR\nSTARTCHAR U_4D8F\nENCODING 19855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n11E0\nF960\n29A0\nFBE0\nA2A0\nFBE0\n6AA0\n6BE0\nB940\n2240\nENDCHAR\nSTARTCHAR U_4D90\nENCODING 19856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n7A40\n5DA0\n6800\nFBE0\nAAA0\nFBE0\n0120\nF9E0\n5120\n91E0\nENDCHAR\nSTARTCHAR U_4D91\nENCODING 19857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7BE0\n5880\n6BE0\nFEA0\nABE0\nF940\nABE0\nF8C0\n5280\n95E0\nENDCHAR\nSTARTCHAR U_4D92\nENCODING 19858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0A00\nF5E0\n5540\nA0A0\n5F40\n4840\n5B40\n4C40\n9B20\nENDCHAR\nSTARTCHAR U_4D93\nENCODING 19859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nF940\nAEA0\nAAC0\nAEA0\nAA40\nABC0\nBA40\n23C0\n2440\nENDCHAR\nSTARTCHAR U_4D94\nENCODING 19860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nB880\nA2A0\nFBE0\n06A0\nAAA0\nDAA0\nFAC0\nAA80\nDA20\nF9E0\nENDCHAR\nSTARTCHAR U_4D95\nENCODING 19861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nB3E0\nA2A0\nFAA0\n02A0\nABE0\nDA00\nAA00\nDA20\n8A20\nF9C0\nENDCHAR\nSTARTCHAR U_4D96\nENCODING 19862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nB140\nA140\nFA20\n05E0\nA800\nDBE0\nA820\nD840\n8880\nF900\nENDCHAR\nSTARTCHAR U_4D97\nENCODING 19863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nB7E0\nA040\nF840\n03C0\nAAC0\nDAC0\nABC0\nD840\n8840\nF8C0\nENDCHAR\nSTARTCHAR U_4D98\nENCODING 19864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5880\n53E0\nF800\n0220\nDA20\nA920\nF940\nD940\nA800\nFBE0\nENDCHAR\nSTARTCHAR U_4D99\nENCODING 19865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nB3E0\nA200\nFBC0\n0240\nAA40\nDA40\nABC0\nDA00\n8A00\nFBE0\nENDCHAR\nSTARTCHAR U_4D9A\nENCODING 19866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nB080\nA080\nFBE0\n02A0\nAAA0\nDBE0\nA880\nD8A0\n89E0\nFA20\nENDCHAR\nSTARTCHAR U_4D9B\nENCODING 19867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n2120\n7D20\nAA20\n1360\n6A00\nFFE0\n4940\n76C0\n4940\n7FC0\nENDCHAR\nSTARTCHAR U_4D9C\nENCODING 19868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1280\n5BE0\n5280\nFFE0\n0000\nADE0\nD520\nAD20\nD520\nFDE0\nENDCHAR\nSTARTCHAR U_4D9D\nENCODING 19869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\n5C80\n53E0\nFC80\nA6A0\nB5C0\nCEA0\nFC80\nA540\nD540\nFE20\nENDCHAR\nSTARTCHAR U_4D9E\nENCODING 19870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5140\n5D40\n53E0\nFF40\nADC0\nD540\nFDC0\nAD40\nB7E0\nCD40\nFE20\nENDCHAR\nSTARTCHAR U_4D9F\nENCODING 19871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nB9E0\nA220\nFA40\n0500\nAA60\nDA20\nAB60\nDA20\n8A20\nFBE0\nENDCHAR\nSTARTCHAR U_4DA0\nENCODING 19872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4080\n7FA0\n5540\n9DC0\n2120\nFFE0\n5240\n6DC0\n5240\n7FC0\nENDCHAR\nSTARTCHAR U_4DA1\nENCODING 19873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3E20\nAA20\nFAA0\n2EA0\n5AA0\n8EA0\nFAA0\nAEA0\nD8A0\n8A20\nFA60\nENDCHAR\nSTARTCHAR U_4DA2\nENCODING 19874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nB8A0\nAFE0\nF880\n2F80\nD880\nAEA0\nFAA0\nAE40\nD8C0\nF320\nENDCHAR\nSTARTCHAR U_4DA3\nENCODING 19875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n5AA0\n53E0\nFC00\n01E0\nAD20\nD520\nFDE0\nAD20\nD4C0\nFFE0\nENDCHAR\nSTARTCHAR U_4DA4\nENCODING 19876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nBC40\nA5C0\nF540\n2FE0\nDA40\nABC0\nFA40\nABC0\nDA40\nFCC0\nENDCHAR\nSTARTCHAR U_4DA5\nENCODING 19877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nB880\nA3E0\nFAA0\n23E0\nDAA0\nAAE0\nFAA0\nAAE0\nDAA0\nFDE0\nENDCHAR\nSTARTCHAR U_4DA6\nENCODING 19878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nB7E0\nA100\nFBC0\n2100\nDFE0\nAA40\nFBC0\nAA40\nDBC0\nFC20\nENDCHAR\nSTARTCHAR U_4DA7\nENCODING 19879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5C80\n53E0\nFC80\n2BE0\nB540\nDFE0\nF540\nAFE0\nD540\nFD40\n8260\nENDCHAR\nSTARTCHAR U_4DA8\nENCODING 19880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nB940\nA220\nFDC0\n0000\nABE0\nAAA0\nFBE0\nA940\nAAA0\nFCA0\nENDCHAR\nSTARTCHAR U_4DA9\nENCODING 19881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nBFE0\nA280\nFD60\n2540\nDD60\nAA40\nFBC0\nAA40\nDBC0\nFC40\nENDCHAR\nSTARTCHAR U_4DAA\nENCODING 19882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nBF60\nA240\nFFE0\n2A40\nD940\nAFC0\nF960\nAFC0\nD920\nFFA0\nENDCHAR\nSTARTCHAR U_4DAB\nENCODING 19883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nB360\nA2A0\nF800\n23E0\nDA80\n8BE0\nFAA0\nABA0\nDAA0\n8BC0\nFCA0\nENDCHAR\nSTARTCHAR U_4DAC\nENCODING 19884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\nFBE0\n2080\nFBC0\n5200\nFBC0\n5040\n73C0\n5220\nB3E0\nENDCHAR\nSTARTCHAR U_4DAD\nENCODING 19885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\n4BE0\nF880\n4080\n53E0\n5080\n5480\n57E0\n5800\n4820\n97E0\nENDCHAR\nSTARTCHAR U_4DAE\nENCODING 19886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n7FC0\n0A80\n3320\nE1E0\n3F80\n0400\n7FC0\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_4DAF\nENCODING 19887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n53C0\nF480\n57E0\n5AA0\n56E0\n9AC0\n6AA0\n27C0\n5A20\n85C0\nENDCHAR\nSTARTCHAR U_4DB0\nENCODING 19888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n38C0\n4980\nFE80\nAA80\nEFE0\n2880\nFFE0\n2A80\nFE80\n20A0\nDEE0\nENDCHAR\nSTARTCHAR U_4DB1\nENCODING 19889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n5A40\nD7E0\n22A0\n57E0\n4A80\nA7E0\n12A0\n47E0\n2220\n11E0\nENDCHAR\nSTARTCHAR U_4DB2\nENCODING 19890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFC20\nAAE0\nFE80\nAAE0\nFFA0\n8AE0\n8F80\n8AA0\n9EE0\nENDCHAR\nSTARTCHAR U_4DB3\nENCODING 19891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n3840\n45E0\nFE00\nAAE0\nFEA0\n00A0\nFEA0\nAAA0\nFEA0\nAB20\nENDCHAR\nSTARTCHAR U_4DB4\nENCODING 19892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nABE0\n74A0\n5140\n8F20\nF0E0\n3F80\n2A80\n7FC0\n4A40\n7FC0\n4A40\nENDCHAR\nSTARTCHAR U_4DB5\nENCODING 19893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n39E0\n4540\nBA60\n0240\nFFE0\nAAA0\nFEC0\nAB60\nFEA0\nAAA0\n8520\nENDCHAR\nSTARTCHAR U_4E00\nENCODING 19968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n0000\n0000\n0000\n0040\nFFE0\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_4E01\nENCODING 19969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FE0\n0200\n0200\n0200\n0200\n0200\n0200\n0200\n0200\n0E00\nENDCHAR\nSTARTCHAR U_4E02\nENCODING 19970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0800\n0800\n1000\n3FC0\n0040\n0040\n0040\n0080\n0080\n0700\nENDCHAR\nSTARTCHAR U_4E03\nENCODING 19971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0400\n0460\n0780\n7C00\n0400\n0400\n0420\n0420\n03E0\nENDCHAR\nSTARTCHAR U_4E04\nENCODING 19972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n0400\n0400\n0400\n0400\n0400\n0400\n0400\n0400\nFFE0\n0000\nENDCHAR\nSTARTCHAR U_4E05\nENCODING 19973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\nFFE0\n0400\n0400\n0400\n0400\n0400\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_4E06\nENCODING 19974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n0000\nFFE0\n0400\n0400\n0800\n1000\n6000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_4E07\nENCODING 19975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n0800\n0800\n0F80\n0880\n0880\n1080\n1080\n2080\n4300\nENDCHAR\nSTARTCHAR U_4E08\nENCODING 19976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0400\n2400\n2400\n1400\n0800\n1400\n2200\nC1E0\nENDCHAR\nSTARTCHAR U_4E09\nENCODING 19977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n0000\n0000\n0000\n3F80\n0000\n0000\n0000\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_4E0A\nENCODING 19978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0400\n0400\n07C0\n0400\n0400\n0400\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_4E0B\nENCODING 19979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n0400\n0400\n0600\n0500\n0480\n0480\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_4E0C\nENCODING 19980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\nFFE0\n1100\n1100\n1100\n1100\n1100\n2100\n2100\n4100\n8100\nENDCHAR\nSTARTCHAR U_4E0D\nENCODING 19981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0200\n0200\n0400\n0D00\n1480\n2440\n4420\n8400\n0400\n0400\nENDCHAR\nSTARTCHAR U_4E0E\nENCODING 19982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n1FE0\n1000\n1000\n1FC0\n0040\nFE40\n0040\n0040\n0380\nENDCHAR\nSTARTCHAR U_4E0F\nENCODING 19983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0800\n0800\n4FC0\n4840\n4840\n7FC0\n0040\n0040\n0280\n0100\nENDCHAR\nSTARTCHAR U_4E10\nENCODING 19984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n4400\n47C0\n4400\n7FC0\n0040\n0040\n0040\n0280\n0100\nENDCHAR\nSTARTCHAR U_4E11\nENCODING 19985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7F80\n0880\n0880\n0880\n7F80\n1080\n1080\n1080\n1080\nFFE0\nENDCHAR\nSTARTCHAR U_4E12\nENCODING 19986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n0840\n2840\n1840\n0C40\n0A40\n1040\n2040\n4380\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_4E13\nENCODING 19987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FC0\n0400\n0400\nFFE0\n0800\n1FC0\n0080\n0D00\n0200\n0100\nENDCHAR\nSTARTCHAR U_4E14\nENCODING 19988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1080\n1080\n1F80\n1080\n1080\n1080\n1F80\n1080\n1080\n7FE0\nENDCHAR\nSTARTCHAR U_4E15\nENCODING 19989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0200\n0400\n0C00\n1480\n2440\n4420\n8420\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_4E16\nENCODING 19990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n2480\n2480\nFFE0\n2480\n2480\n2480\n2780\n2000\n2000\n3FE0\nENDCHAR\nSTARTCHAR U_4E17\nENCODING 19991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2480\n2480\nFFE0\n2480\n2480\n2480\n2480\n2480\n3F80\n2080\nENDCHAR\nSTARTCHAR U_4E18\nENCODING 19992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n1E00\n1000\n1000\n1FC0\n1100\n1100\n1100\n1100\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_4E19\nENCODING 19993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n0400\n7FC0\n4440\n4640\n4940\n5040\n4040\n4040\n41C0\nENDCHAR\nSTARTCHAR U_4E1A\nENCODING 19994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n0900\n0920\n8920\n4940\n2940\n2980\n0900\n0900\n0900\nFFE0\nENDCHAR\nSTARTCHAR U_4E1B\nENCODING 19995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1080\n1080\n1080\n1080\n2880\n2540\n4240\n8C20\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_4E1C\nENCODING 19996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FE0\n0A00\n1200\n3FC0\n0200\n1280\n2240\n4220\n0E00\nENDCHAR\nSTARTCHAR U_4E1D\nENCODING 19997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2940\n4A40\nF780\n1080\n2100\n4200\nF7C0\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_4E1E\nENCODING 19998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0100\n0220\n74C0\n1700\n2500\n4480\n8460\n0C00\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_4E1F\nENCODING 19999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n0400\n7FC0\n0400\n0400\nFFE0\n0800\n1100\n2080\n7FC0\nENDCHAR\nSTARTCHAR U_4E20\nENCODING 20000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n1240\nF280\n1300\n1200\n3240\nD240\n11C0\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_4E21\nENCODING 20001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n0400\n7FC0\n4440\n5540\n5540\n5540\n5F40\n4040\n40C0\nENDCHAR\nSTARTCHAR U_4E22\nENCODING 20002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n3E00\n0400\n7FC0\n0400\n0400\nFFE0\n0800\n1080\n3FC0\n1040\nENDCHAR\nSTARTCHAR U_4E23\nENCODING 20003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n0A00\n7BC0\n4A40\n4A40\n7BC0\n0A00\n1200\n1200\n2200\nENDCHAR\nSTARTCHAR U_4E24\nENCODING 20004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1200\n1200\n7FC0\n5240\n5240\n5B40\n64C0\n4840\n4040\n40C0\nENDCHAR\nSTARTCHAR U_4E25\nENCODING 20005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0A00\n4A40\n2A80\n0A00\n7FC0\n4000\n4000\n4000\n4000\n8000\nENDCHAR\nSTARTCHAR U_4E26\nENCODING 20006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1100\nFFE0\n0A00\n4A40\n4A40\n2A40\n2A80\n0A00\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_4E27\nENCODING 20007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n2480\n1500\nFFE0\n2440\n2280\n2100\n2C80\n3060\nENDCHAR\nSTARTCHAR U_4E28\nENCODING 20008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0200\n0200\n0200\n0200\n0200\n0200\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_4E29\nENCODING 20009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n1100\n1100\n1100\n1100\n1300\n1D00\n1100\n0100\n0100\n0100\nENDCHAR\nSTARTCHAR U_4E2A\nENCODING 20010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0A00\n1100\n2480\n4460\n0400\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_4E2B\nENCODING 20011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2080\n1100\n1200\n0400\n0400\n0400\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_4E2C\nENCODING 20012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n2200\n1200\n1200\n0200\n0A00\n1200\n6200\n2200\n0200\n0200\nENDCHAR\nSTARTCHAR U_4E2D\nENCODING 20013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n4440\n4440\n4440\n7FC0\n4440\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_4E2E\nENCODING 20014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF80\n0880\n0880\n7E80\n0880\n0880\nFF80\n08A0\n08A0\n0860\n0820\nENDCHAR\nSTARTCHAR U_4E2F\nENCODING 20015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n0580\n0E00\n7440\n0580\n0E00\n7460\n0580\n1E00\nE400\n0400\nENDCHAR\nSTARTCHAR U_4E30\nENCODING 20016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n0400\n0400\n3F80\n0400\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_4E31\nENCODING 20017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n4920\n4920\n4920\n4920\n59E0\n6920\n0900\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_4E32\nENCODING 20018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n2480\n3F80\n0400\n7FC0\n4440\n4440\n7FC0\n0400\n0400\nENDCHAR\nSTARTCHAR U_4E33\nENCODING 20019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n3FC0\n2940\n3FC0\n0900\n7FE0\n4920\n7FE0\n0900\n1100\n6100\nENDCHAR\nSTARTCHAR U_4E34\nENCODING 20020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\nA7E0\nA800\nB100\nA080\nAFE0\nA920\nA920\n2920\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_4E35\nENCODING 20021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n4A40\n2A80\nFFE0\n1100\n0A00\n7FC0\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_4E36\nENCODING 20022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n0000\n0000\n0800\n0400\n0200\n0200\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_4E37\nENCODING 20023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n0000\n4060\n2040\n1880\n0900\n0200\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_4E38\nENCODING 20024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\n7F00\n0900\n0900\n2900\n1900\n1500\n2520\n4120\n80E0\nENDCHAR\nSTARTCHAR U_4E39\nENCODING 20025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1080\n1480\n1280\n1080\nFFE0\n1080\n1080\n1080\n2080\n4380\nENDCHAR\nSTARTCHAR U_4E3A\nENCODING 20026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n1400\n0400\n7FC0\n0440\n0640\n0940\n0940\n1040\n2240\n4180\nENDCHAR\nSTARTCHAR U_4E3B\nENCODING 20027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\nFFE0\n0400\n0400\n0400\n7FC0\n0400\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_4E3C\nENCODING 20028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n7FE0\n1100\n1900\n1500\nFFE0\n1100\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_4E3D\nENCODING 20029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0000\n7BC0\n4A40\n4A40\n6B40\n5AC0\n4A40\n4A40\n4A40\n5AC0\nENDCHAR\nSTARTCHAR U_4E3E\nENCODING 20030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\n2480\nFFE0\n1100\n2480\n5F40\n8420\n0400\n7FC0\n0400\n0400\nENDCHAR\nSTARTCHAR U_4E3F\nENCODING 20031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0200\n0200\n0200\n0200\n0200\n0200\n0400\n0400\n0800\n1000\nENDCHAR\nSTARTCHAR U_4E40\nENCODING 20032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n2000\n2000\n5000\n8800\n0400\n0200\n0100\n00E0\n0040\n0000\nENDCHAR\nSTARTCHAR U_4E41\nENCODING 20033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFC00\n0400\n0400\n0400\n0400\n0200\n0200\n0100\n0080\n0060\nENDCHAR\nSTARTCHAR U_4E42\nENCODING 20034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n2080\n2080\n1100\n1100\n1200\n0A00\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_4E43\nENCODING 20035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0880\n0880\n0900\n13E0\n1020\n1020\n2020\n2020\n4240\n8180\nENDCHAR\nSTARTCHAR U_4E44\nENCODING 20036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\n0040\n0080\n0880\n0500\n0300\n0280\n8440\n9840\nE000\n0000\nENDCHAR\nSTARTCHAR U_4E45\nENCODING 20037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\n1F00\n2100\n4200\n0200\n0400\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_4E46\nENCODING 20038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1100\n1100\n2100\n3E00\n0200\n0500\n0900\n1080\n2040\nC020\nENDCHAR\nSTARTCHAR U_4E47\nENCODING 20039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n0600\nF800\n0800\n0800\n0FC0\nF800\n0800\n0820\n0820\n07E0\nENDCHAR\nSTARTCHAR U_4E48\nENCODING 20040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0800\n1100\n2100\n4200\n8400\n0880\n1040\n7FE0\n2020\nENDCHAR\nSTARTCHAR U_4E49\nENCODING 20041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n2480\n2480\n2100\n1100\n1200\n0A00\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_4E4A\nENCODING 20042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n01E0\nFE00\n0000\n0040\n4040\n2080\n1080\n1100\n0000\n0000\nENDCHAR\nSTARTCHAR U_4E4B\nENCODING 20043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\n7FC0\n0080\n0100\n0200\n0400\n0800\n3000\n4800\n87E0\nENDCHAR\nSTARTCHAR U_4E4C\nENCODING 20044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1F80\n1080\n1080\n1180\n1000\n1FE0\n0020\nFF20\n0020\n00C0\nENDCHAR\nSTARTCHAR U_4E4D\nENCODING 20045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n1FE0\n2400\n4400\n87C0\n0400\n0400\n07C0\n0400\n0400\nENDCHAR\nSTARTCHAR U_4E4E\nENCODING 20046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n7E00\n2440\n1480\n1500\nFFE0\n0400\n0400\n0400\n1400\n0800\nENDCHAR\nSTARTCHAR U_4E4F\nENCODING 20047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n7E00\n0400\n0200\n3F80\n0100\n0200\n0400\n1800\n2400\n43E0\nENDCHAR\nSTARTCHAR U_4E50\nENCODING 20048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n3E00\n2000\n2200\n2200\n3FE0\n0200\n1280\n2240\n4220\n0600\nENDCHAR\nSTARTCHAR U_4E51\nENCODING 20049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nFC00\n0440\n1480\n2500\n4600\n1600\n2500\n4480\n8460\n0440\nENDCHAR\nSTARTCHAR U_4E52\nENCODING 20050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n1E00\n1000\n1FC0\n1100\n1100\nFFE0\n0000\n0800\n1000\n6000\nENDCHAR\nSTARTCHAR U_4E53\nENCODING 20051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n1E00\n1000\n1FC0\n1100\n1100\nFFE0\n0000\n0100\n0080\n0060\nENDCHAR\nSTARTCHAR U_4E54\nENCODING 20052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n7E00\n0800\nFFE0\n1100\n2080\nD160\n1100\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_4E55\nENCODING 20053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01E0\n7E00\n4200\n5FC0\n4200\n7FE0\n4200\n5FC0\n5240\n92C0\n8200\nENDCHAR\nSTARTCHAR U_4E56\nENCODING 20054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n7E00\n0400\nFFE0\n1500\n7540\n1580\n3520\nD4E0\n0400\n0400\nENDCHAR\nSTARTCHAR U_4E57\nENCODING 20055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n7E00\n0400\n7FC0\n1500\nFFE0\n1500\n7FC0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_4E58\nENCODING 20056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\n7C00\n0400\nFFE0\n1540\n75A0\n1520\nFEE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_4E59\nENCODING 20057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0080\n0100\n0200\n0400\n0800\n1000\n2000\n4020\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_4E5A\nENCODING 20058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2000\n2000\n2000\n2000\n2000\n2000\n2080\n2080\n2080\n1F80\nENDCHAR\nSTARTCHAR U_4E5B\nENCODING 20059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n0040\n0080\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_4E5C\nENCODING 20060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1040\n13C0\n1C40\nF040\n1040\n1280\n1100\n1020\n1020\n0FE0\nENDCHAR\nSTARTCHAR U_4E5D\nENCODING 20061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\n0800\n7F00\n0900\n0900\n0900\n1100\n1120\n2120\n40E0\nENDCHAR\nSTARTCHAR U_4E5E\nENCODING 20062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n1FC0\n2000\n5F00\n0200\n0400\n0800\n1020\n1020\n0FE0\nENDCHAR\nSTARTCHAR U_4E5F\nENCODING 20063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n24C0\n2740\n3C40\nE440\n2540\n2480\n2420\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_4E60\nENCODING 20064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0040\n1040\n0840\n0840\n0140\n0640\n1840\n6040\n0240\n0180\nENDCHAR\nSTARTCHAR U_4E61\nENCODING 20065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0800\n1100\n3E00\n0440\n0880\n3F80\n0100\n0200\n0C00\n7000\nENDCHAR\nSTARTCHAR U_4E62\nENCODING 20066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n1100\n1100\n5500\n5500\n5500\n5500\n5500\n5D20\n7520\n40E0\nENDCHAR\nSTARTCHAR U_4E63\nENCODING 20067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2100\n4500\n7900\n0900\n1100\n2100\n4920\n7D20\n04E0\nENDCHAR\nSTARTCHAR U_4E64\nENCODING 20068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n0480\n0460\n0420\nFF80\n0100\n0600\n3820\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_4E65\nENCODING 20069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\nFC40\n2080\n1100\n0000\nFFC0\n0300\n0C00\n3020\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_4E66\nENCODING 20070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n0860\n7FA0\n0880\n0880\nFFE0\n0820\n0820\n0940\n0880\n0800\nENDCHAR\nSTARTCHAR U_4E67\nENCODING 20071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n4A00\n2200\n0FE0\nF200\n0200\nFF80\n0C00\n3000\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_4E68\nENCODING 20072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2100\n4900\nFD00\n0500\n7900\n4900\n4920\n4920\n78E0\nENDCHAR\nSTARTCHAR U_4E69\nENCODING 20073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n3D00\n2100\n2100\nFD00\n8500\n8500\n8520\nFD20\n84E0\nENDCHAR\nSTARTCHAR U_4E6A\nENCODING 20074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF000\n17C0\n1540\n2540\n27C0\n4540\n4540\n47C0\n8020\n8020\n7FE0\nENDCHAR\nSTARTCHAR U_4E6B\nENCODING 20075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFDE0\n2520\n2520\n55E0\n8800\nFFC0\n0700\n3820\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_4E6C\nENCODING 20076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4000\n7F80\n4080\n7F80\n4000\nFFE0\n0700\n3800\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_4E6D\nENCODING 20077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1000\n3FC0\n5040\n9FC0\n0000\n7F80\n0600\n1800\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_4E6E\nENCODING 20078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3800\n43C0\n4A40\n7A40\n4AC0\n1200\nFF80\n0C00\n3020\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_4E6F\nENCODING 20079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n7C80\n1500\nFFE0\n0400\n0400\n7F80\n0600\n1800\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_4E70\nENCODING 20080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0040\n2480\n1400\n4400\n2400\nFFE0\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_4E71\nENCODING 20081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0D00\n7100\n1100\nFF00\n1100\n1100\n7D00\n4500\n4520\n7D20\n44E0\nENDCHAR\nSTARTCHAR U_4E72\nENCODING 20082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n0940\n2300\nC480\n4860\n3F80\n0600\n1800\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_4E73\nENCODING 20083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F00\nF500\n5500\n2900\nFD00\n0900\n1100\n1D00\nF120\n1120\n30E0\nENDCHAR\nSTARTCHAR U_4E74\nENCODING 20084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\nFB80\n1200\nFBE0\n1240\n2440\nFFC0\n0300\n3C00\n4040\n3FC0\nENDCHAR\nSTARTCHAR U_4E75\nENCODING 20085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n1100\nFF00\n4500\n2900\nFD00\n1100\n7D00\n1120\n1120\n10E0\nENDCHAR\nSTARTCHAR U_4E76\nENCODING 20086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nFFE0\n2480\n3F80\n2480\n3F80\n2480\nFF80\n1C20\n2020\n3FE0\nENDCHAR\nSTARTCHAR U_4E77\nENCODING 20087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2540\n8520\n4940\n2180\nCE00\n0000\nFF80\n1800\n2020\n3FE0\nENDCHAR\nSTARTCHAR U_4E78\nENCODING 20088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\nA2A0\nBAA0\nEFE0\nAAA0\nAAA0\nABE0\n9840\n8020\n7FE0\nENDCHAR\nSTARTCHAR U_4E79\nENCODING 20089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFA00\n2200\nFA00\n8A00\nFA00\n8A00\nFA20\n2220\nFA20\n21E0\nENDCHAR\nSTARTCHAR U_4E7A\nENCODING 20090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n38C0\n4300\n7A00\n4BE0\n7A40\n4240\n8440\n7F00\n1820\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_4E7B\nENCODING 20091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFC80\n2140\n3A20\n4C80\n4940\n9080\n7FC0\n0C00\n1020\n1FE0\nENDCHAR\nSTARTCHAR U_4E7C\nENCODING 20092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8100\n47C0\n2100\n4FE0\n8000\n7FC0\n0C00\n1020\n1FE0\nENDCHAR\nSTARTCHAR U_4E7D\nENCODING 20093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n3F80\n0500\nFFE0\n1880\nEF80\n0880\n7F80\n0620\n1820\n0FE0\nENDCHAR\nSTARTCHAR U_4E7E\nENCODING 20094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFD00\n21E0\nFA00\n8BC0\nF840\n8880\nF900\n2220\nFA20\n21E0\nENDCHAR\nSTARTCHAR U_4E7F\nENCODING 20095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\nEA80\n5480\n2480\n7880\n2480\n7E80\n0880\n2CA0\n4AA0\n9960\nENDCHAR\nSTARTCHAR U_4E80\nENCODING 20096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n2100\n7F80\n2480\n3F80\n2480\n7FC0\n4440\n7FC0\n0420\n07E0\nENDCHAR\nSTARTCHAR U_4E81\nENCODING 20097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFE80\n10E0\n7D00\n4600\n7DE0\n4440\nFC80\n1120\nFE20\n11E0\nENDCHAR\nSTARTCHAR U_4E82\nENCODING 20098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n5500\nFD00\n2900\nFD00\nA500\nFD00\nAD00\n9520\nAD20\n84E0\nENDCHAR\nSTARTCHAR U_4E83\nENCODING 20099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9280\n5480\nFE80\n5480\n9280\n4480\n7E80\nD480\n3FA0\n44A0\n8460\nENDCHAR\nSTARTCHAR U_4E84\nENCODING 20100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\n1080\nFE80\n8280\nBA80\n0080\n7C80\n4480\n7CA0\n28A0\nFE60\nENDCHAR\nSTARTCHAR U_4E85\nENCODING 20101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0200\n0200\n0200\n0200\n0200\n0200\n0200\n0200\n0A00\n0400\nENDCHAR\nSTARTCHAR U_4E86\nENCODING 20102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0080\n0100\n0600\n0400\n0400\n0400\n0400\n0400\n1400\n0800\nENDCHAR\nSTARTCHAR U_4E87\nENCODING 20103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n1FE0\n2240\n4280\n8200\n0200\n0200\n0200\n0200\n0E00\nENDCHAR\nSTARTCHAR U_4E88\nENCODING 20104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0100\n0A00\n0400\nFFE0\n0440\n0480\n0400\n0400\n0400\n1C00\nENDCHAR\nSTARTCHAR U_4E89\nENCODING 20105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F00\n2200\n7FC0\n0440\nFFE0\n0440\n7FC0\n0400\n0400\n1C00\nENDCHAR\nSTARTCHAR U_4E8A\nENCODING 20106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n2480\n1500\n7FC0\n0440\nFFE0\n0440\n7FC0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_4E8B\nENCODING 20107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n2480\n7FC0\n0440\nFFE0\n0440\n7FC0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_4E8C\nENCODING 20108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n0000\n7FC0\n0000\n0000\n0000\n0000\n0000\n0000\nFFE0\n0000\nENDCHAR\nSTARTCHAR U_4E8D\nENCODING 20109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0000\n0000\nFFE0\n0200\n0200\n0200\n0200\n0200\n0A00\n0400\nENDCHAR\nSTARTCHAR U_4E8E\nENCODING 20110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n0400\n0400\nFFE0\n0400\n0400\n0400\n0400\n0400\n1C00\nENDCHAR\nSTARTCHAR U_4E8F\nENCODING 20111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0000\n0000\nFFE0\n0800\n1000\n3FC0\n0040\n0040\n0480\n0300\nENDCHAR\nSTARTCHAR U_4E90\nENCODING 20112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0800\n0800\nFFE0\n1000\n3F80\n0080\n0080\n0080\n0500\n0200\nENDCHAR\nSTARTCHAR U_4E91\nENCODING 20113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0000\n0000\n0000\nFFE0\n0800\n1000\n1100\n2080\n7FC0\n2040\nENDCHAR\nSTARTCHAR U_4E92\nENCODING 20114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0800\n0800\n0F80\n1080\n1080\n1080\n3F00\n0100\n0100\nFFE0\nENDCHAR\nSTARTCHAR U_4E93\nENCODING 20115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0000\n0000\n0000\nFFE0\n1100\n1100\n1100\n2100\n2100\n4100\nENDCHAR\nSTARTCHAR U_4E94\nENCODING 20116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n0400\n0400\n0400\n3F80\n0880\n0880\n0880\n0880\nFFE0\nENDCHAR\nSTARTCHAR U_4E95\nENCODING 20117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n0900\n7FE0\n0900\n0900\n0900\n7FE0\n1100\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_4E96\nENCODING 20118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n3F80\n0000\n0000\nFFE0\n0000\n0000\n3F80\n0000\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_4E97\nENCODING 20119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n2480\n2480\n3F80\n0000\n0000\n3F80\n0000\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_4E98\nENCODING 20120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0000\n3F80\n2080\n2080\n3F80\n2080\n2080\n3F80\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_4E99\nENCODING 20121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0800\n0800\n0F80\n1480\n1280\n2900\n2500\n0200\n0200\n7FE0\nENDCHAR\nSTARTCHAR U_4E9A\nENCODING 20122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n0A00\n0A00\n4A40\n2A40\n2A80\n2A80\n0A00\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_4E9B\nENCODING 20123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1240\n5A80\n5320\n5220\n5A20\nE1E0\n0000\n3F80\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_4E9C\nENCODING 20124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n4A40\n4A40\n7FC0\n0A00\n0A00\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_4E9D\nENCODING 20125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1100\n3F00\n0000\n2100\n4A40\nFBE0\n0020\n3F80\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_4E9E\nENCODING 20126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n1100\n1100\n71C0\n4040\n4040\n71C0\n1100\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_4E9F\nENCODING 20127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0200\n0400\n75C0\n5540\n5480\n7540\n0640\n1400\n0800\nFFE0\nENDCHAR\nSTARTCHAR U_4EA0\nENCODING 20128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\n0400\nFFE0\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_4EA1\nENCODING 20129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0600\n0200\nFFE0\n2000\n2000\n2000\n2000\n2000\n2000\n3FC0\nENDCHAR\nSTARTCHAR U_4EA2\nENCODING 20130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\nFFE0\n0000\n1F00\n1100\n1100\n1100\n1120\n2120\n40E0\nENDCHAR\nSTARTCHAR U_4EA3\nENCODING 20131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\nFFE0\n1100\n1100\n1100\n1100\n2100\n2100\n4100\n8100\nENDCHAR\nSTARTCHAR U_4EA4\nENCODING 20132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0000\n1100\n2080\n5140\n1100\n0A00\n0400\n1B00\n60E0\nENDCHAR\nSTARTCHAR U_4EA5\nENCODING 20133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n7FE0\n0800\n1100\n3E40\n0480\n1900\n6300\n0C80\n7060\nENDCHAR\nSTARTCHAR U_4EA6\nENCODING 20134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\nFFE0\n0900\n2940\n2920\n4920\n0900\n1100\n2100\n4700\nENDCHAR\nSTARTCHAR U_4EA7\nENCODING 20135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n1080\n0900\n3FE0\n2000\n2000\n2000\n4000\n4000\n8000\nENDCHAR\nSTARTCHAR U_4EA8\nENCODING 20136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2080\n3F80\n0000\n7FC0\n0100\n0600\n0400\n0400\n1C00\nENDCHAR\nSTARTCHAR U_4EA9\nENCODING 20137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\nFFE0\n0000\n3F80\n2480\n3F80\n2480\n2480\n3F80\n2080\nENDCHAR\nSTARTCHAR U_4EAA\nENCODING 20138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n5140\n9120\n6300\n0000\n7F80\n0080\n0080\n0060\nENDCHAR\nSTARTCHAR U_4EAB\nENCODING 20139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\n2080\n3F80\n0000\n3F80\n0100\n7FE0\n0200\n0200\n0E00\nENDCHAR\nSTARTCHAR U_4EAC\nENCODING 20140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0000\n3F80\n2080\n2080\n3F80\n0400\n2480\n4440\n8C20\nENDCHAR\nSTARTCHAR U_4EAD\nENCODING 20141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2080\n3F80\n0000\nFFE0\n8020\nBFA0\n0400\n0400\n1C00\nENDCHAR\nSTARTCHAR U_4EAE\nENCODING 20142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n1F00\n0000\nFFE0\n8020\n1F00\n1100\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_4EAF\nENCODING 20143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2080\n2080\n3F80\n0000\n7FC0\n4040\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_4EB0\nENCODING 20144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0000\n3F80\n2080\n3F80\n2080\n3F80\n2480\n4440\n8C20\nENDCHAR\nSTARTCHAR U_4EB1\nENCODING 20145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\nFFE0\n1000\n27C0\n6440\nA7C0\n2440\n27C0\n2000\n2FE0\nENDCHAR\nSTARTCHAR U_4EB2\nENCODING 20146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\n0A00\nFFE0\n0400\n7FC0\n0400\n2480\n4440\n8C20\nENDCHAR\nSTARTCHAR U_4EB3\nENCODING 20147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2080\n3F80\n0000\nFFE0\n8320\n3C00\n07C0\n7C20\n03E0\nENDCHAR\nSTARTCHAR U_4EB4\nENCODING 20148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\nFFE0\n8420\n7FC0\n0800\n7F00\n0920\n1120\nE1E0\nENDCHAR\nSTARTCHAR U_4EB5\nENCODING 20149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n2200\nFF80\n2A80\n76A0\nA960\n3480\nE300\n2900\n70E0\nENDCHAR\nSTARTCHAR U_4EB6\nENCODING 20150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n5140\n5F40\n4040\n7FC0\n2080\n3E80\n2780\n2080\nFFE0\nENDCHAR\nSTARTCHAR U_4EB7\nENCODING 20151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n7FE0\n4A80\n7FE0\n4A80\n7F80\n5B00\nAA80\nCA60\nENDCHAR\nSTARTCHAR U_4EB8\nENCODING 20152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\nFA80\n57C0\n7540\n07C0\nF540\n17C0\n2100\nFFE0\n2100\n6100\nENDCHAR\nSTARTCHAR U_4EB9\nENCODING 20153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n60C0\n4E40\n6AC0\n4A40\nFFE0\nA0A0\n3F80\n2080\nFFE0\nENDCHAR\nSTARTCHAR U_4EBA\nENCODING 20154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0400\n0400\n0400\n0400\n0A00\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_4EBB\nENCODING 20155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n2000\n2000\n6000\nA000\n2000\n2000\n2000\n2000\n2000\nENDCHAR\nSTARTCHAR U_4EBC\nENCODING 20156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0400\n0A00\n0A00\n1100\n1080\n2060\n4040\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_4EBD\nENCODING 20157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0A00\n1100\n2080\nC060\n0800\n0400\n0200\n0200\n0000\nENDCHAR\nSTARTCHAR U_4EBE\nENCODING 20158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n8400\n8400\n8400\n8400\n8A00\n8A00\n9100\nA0C0\n8000\nFFE0\nENDCHAR\nSTARTCHAR U_4EBF\nENCODING 20159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2080\n2100\n6200\nA200\n2400\n2400\n2820\n2820\n27E0\nENDCHAR\nSTARTCHAR U_4EC0\nENCODING 20160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2100\n2100\n6FE0\nA100\n2100\n2100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_4EC1\nENCODING 20161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n27C0\n2000\n6000\nA000\n2000\n2000\n2000\n2FE0\n2000\nENDCHAR\nSTARTCHAR U_4EC2\nENCODING 20162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n2200\n2FE0\n6220\nA220\n2220\n2220\n2420\n2820\n30C0\nENDCHAR\nSTARTCHAR U_4EC3\nENCODING 20163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2080\n2080\n6080\nA080\n2080\n2080\n2080\n2280\n2100\nENDCHAR\nSTARTCHAR U_4EC4\nENCODING 20164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4200\n4200\n4200\n4200\n4200\n4200\n4500\n4880\n5060\nA040\nENDCHAR\nSTARTCHAR U_4EC5\nENCODING 20165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FC0\n2440\n2440\n6440\nA280\n2280\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4EC6\nENCODING 20166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n1200\n2300\n2280\n6260\nA220\n2200\n2200\n2200\n2200\nENDCHAR\nSTARTCHAR U_4EC7\nENCODING 20167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n2200\n2F80\n6280\nA280\n2280\n2480\n24A0\n28A0\n3060\nENDCHAR\nSTARTCHAR U_4EC8\nENCODING 20168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1480\n2480\n2480\n6480\nA480\n2480\n2840\n2840\n2820\n3020\nENDCHAR\nSTARTCHAR U_4EC9\nENCODING 20169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1780\n1480\n1480\n2480\n6480\nA480\n2480\n2480\n24A0\n28A0\n3060\nENDCHAR\nSTARTCHAR U_4ECA\nENCODING 20170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1100\n2480\nC260\n0000\n3F80\n0100\n0200\n0200\n0400\nENDCHAR\nSTARTCHAR U_4ECB\nENCODING 20171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1100\n2080\nD160\n1100\n1100\n1100\n2100\n2100\n4100\nENDCHAR\nSTARTCHAR U_4ECC\nENCODING 20172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0A00\n1100\n2480\n4440\n0A00\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_4ECD\nENCODING 20173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2440\n2480\n4480\n45E0\nC420\n4420\n4420\n4820\n48A0\n5040\nENDCHAR\nSTARTCHAR U_4ECE\nENCODING 20174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n1100\n1100\n1100\n1100\n2A80\n2A80\n4440\n8840\n1020\nENDCHAR\nSTARTCHAR U_4ECF\nENCODING 20175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2100\n6200\nA200\n2200\n2400\n2480\n2840\n2FE0\n2020\nENDCHAR\nSTARTCHAR U_4ED0\nENCODING 20176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0A00\n1100\n2080\nC460\n0400\n7FC0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_4ED1\nENCODING 20177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1100\n2080\nD060\n1100\n1200\n1C00\n1040\n1040\n0FC0\nENDCHAR\nSTARTCHAR U_4ED2\nENCODING 20178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\n1400\n1200\n2100\n48C0\n8400\n0200\n1800\n0400\n0200\nENDCHAR\nSTARTCHAR U_4ED3\nENCODING 20179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0600\n0900\n1080\n3F40\nD120\n1500\n1200\n1040\n1040\n0FC0\nENDCHAR\nSTARTCHAR U_4ED4\nENCODING 20180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2080\n2100\n6100\nAFE0\n2100\n2100\n2100\n2100\n2700\nENDCHAR\nSTARTCHAR U_4ED5\nENCODING 20181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2100\n2100\n6FE0\nA100\n2100\n2100\n2100\n2100\n27C0\nENDCHAR\nSTARTCHAR U_4ED6\nENCODING 20182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2540\n25C0\n6F40\nA540\n2540\n2580\n2520\n2420\n23E0\nENDCHAR\nSTARTCHAR U_4ED7\nENCODING 20183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1080\n2FE0\n2080\n6480\nA280\n2280\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4ED8\nENCODING 20184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1080\n2080\n2FE0\n6080\nA480\n2280\n2280\n2080\n2080\n2380\nENDCHAR\nSTARTCHAR U_4ED9\nENCODING 20185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2100\n2920\n6920\nA920\n2920\n2920\n2920\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_4EDA\nENCODING 20186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1100\n2480\nC460\n0400\n4440\n4440\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_4EDB\nENCODING 20187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n11C0\n2E00\n6200\nA200\n23E0\n3E00\n2200\n2200\n2220\n21E0\nENDCHAR\nSTARTCHAR U_4EDC\nENCODING 20188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2100\n2100\n6100\nA100\n2100\n2100\n2100\n2FE0\n2000\nENDCHAR\nSTARTCHAR U_4EDD\nENCODING 20189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1100\n2080\nC060\n3F80\n0400\n0400\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_4EDE\nENCODING 20190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17E0\n2120\n2120\n6520\nA520\n2920\n2220\n2220\n2420\n28C0\nENDCHAR\nSTARTCHAR U_4EDF\nENCODING 20191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n1700\n2100\n2100\n6100\nAFE0\n2100\n2100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_4EE0\nENCODING 20192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n2100\n6100\nA100\n2FE0\n2100\n2100\n2100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_4EE1\nENCODING 20193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n27E0\n2800\n67C0\nA040\n2180\n2200\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_4EE2\nENCODING 20194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n4FC0\nC840\n5040\n4440\n4340\n4140\n4040\n4040\n41C0\nENDCHAR\nSTARTCHAR U_4EE3\nENCODING 20195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n1240\n2200\n23E0\n6E00\nA200\n2200\n2100\n2120\n20A0\n2060\nENDCHAR\nSTARTCHAR U_4EE4\nENCODING 20196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0A00\n1100\n2480\nC260\n3F80\n0100\n0A00\n0400\n0200\nENDCHAR\nSTARTCHAR U_4EE5\nENCODING 20197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n4080\n4880\n4480\n4480\n4080\n4880\n5080\n6140\n4220\n0C20\nENDCHAR\nSTARTCHAR U_4EE6\nENCODING 20198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2100\n6540\nA540\n2520\n2920\n2920\n2100\n2100\n2700\nENDCHAR\nSTARTCHAR U_4EE7\nENCODING 20199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0780\n0400\n0400\nFFE0\n0400\n0600\n0900\n1080\n6060\nENDCHAR\nSTARTCHAR U_4EE8\nENCODING 20200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n2FE0\n2000\n6000\nA000\n27C0\n2000\n2000\n2000\n2FE0\nENDCHAR\nSTARTCHAR U_4EE9\nENCODING 20201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n2200\n2200\n63C0\nA200\n2200\n2200\n2200\n2200\n3FE0\nENDCHAR\nSTARTCHAR U_4EEA\nENCODING 20202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1140\n2940\n2840\n6440\nA480\n2280\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4EEB\nENCODING 20203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2200\n2280\n6480\nA900\n2100\n2240\n2420\n2FE0\n2420\nENDCHAR\nSTARTCHAR U_4EEC\nENCODING 20204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n22E0\n4A20\n4820\nC820\n4820\n4820\n4820\n4820\n4820\n4860\nENDCHAR\nSTARTCHAR U_4EED\nENCODING 20205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FC0\n2240\n6240\nB240\n2E40\n2340\n24E0\n2440\n2840\n31C0\nENDCHAR\nSTARTCHAR U_4EEE\nENCODING 20206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\n1780\n2400\n2400\n67E0\nA620\n2520\n2540\n2880\n2940\n3220\nENDCHAR\nSTARTCHAR U_4EEF\nENCODING 20207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n2280\n2A40\n6A20\nAA20\n3240\n2240\n2080\n2300\n2C00\nENDCHAR\nSTARTCHAR U_4EF0\nENCODING 20208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1DE0\n2920\n2920\n6920\nA920\n2B20\n2D20\n2960\n2100\n2100\nENDCHAR\nSTARTCHAR U_4EF1\nENCODING 20209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n2500\n2880\n7260\nA100\n2FC0\n2080\n2080\n2100\n2200\nENDCHAR\nSTARTCHAR U_4EF2\nENCODING 20210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2100\n2FE0\n6920\nA920\n2FE0\n2920\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_4EF3\nENCODING 20211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n1480\n2480\n24A0\n67C0\nA480\n2480\n2480\n25A0\n26A0\n2460\nENDCHAR\nSTARTCHAR U_4EF4\nENCODING 20212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n1420\n2420\n27E0\n6420\nA420\n27E0\n2420\n2420\n2820\n30E0\nENDCHAR\nSTARTCHAR U_4EF5\nENCODING 20213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n1400\n27C0\n2900\n6100\nA100\n3FE0\n2100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_4EF6\nENCODING 20214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1500\n2500\n2FC0\n7100\nA100\n2FE0\n2100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_4EF7\nENCODING 20215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1300\n2480\n3860\n6480\nA480\n2480\n2480\n2480\n2880\n3080\nENDCHAR\nSTARTCHAR U_4EF8\nENCODING 20216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\n1780\n1100\n2100\n2FE0\n6100\nA300\n2280\n2480\n2840\n3020\nENDCHAR\nSTARTCHAR U_4EF9\nENCODING 20217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2FE0\n2100\n6100\nA7C0\n2100\n2100\n3FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_4EFA\nENCODING 20218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0A00\n1100\n2080\nDF60\n1000\n1F00\n1000\n1000\n1F80\nENDCHAR\nSTARTCHAR U_4EFB\nENCODING 20219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n1700\n2100\n2100\n6100\nAFE0\n2100\n2100\n2100\n2100\n27C0\nENDCHAR\nSTARTCHAR U_4EFC\nENCODING 20220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n2FE0\n2100\n2100\n67C0\nA100\n2100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_4EFD\nENCODING 20221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1280\n2240\n2440\n6820\nA7C0\n2240\n2240\n2240\n2440\n28C0\nENDCHAR\nSTARTCHAR U_4EFE\nENCODING 20222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2200\n2200\n63E0\nA440\n2440\n2FC0\n2080\n2080\n3FE0\nENDCHAR\nSTARTCHAR U_4EFF\nENCODING 20223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2200\n6200\nA3C0\n2240\n2240\n2440\n2440\n2980\nENDCHAR\nSTARTCHAR U_4F00\nENCODING 20224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1480\n2480\n2440\n6940\nA920\n3200\n2200\n2440\n2FE0\n2420\nENDCHAR\nSTARTCHAR U_4F01\nENCODING 20225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0600\n0900\n1080\n2260\nC200\n1380\n1200\n1200\n1200\n7FE0\nENDCHAR\nSTARTCHAR U_4F02\nENCODING 20226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2FE0\n2100\n6FE0\nA920\n2920\n2920\n2960\n2100\n2100\nENDCHAR\nSTARTCHAR U_4F03\nENCODING 20227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2080\n2300\n6100\nAFE0\n2140\n2100\n2100\n2500\n2200\nENDCHAR\nSTARTCHAR U_4F04\nENCODING 20228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1140\n2140\n2FC0\n6900\nA900\n2FE0\n2120\n21A0\n2140\n2100\nENDCHAR\nSTARTCHAR U_4F05\nENCODING 20229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2FE0\n2100\n6920\nA920\n2FE0\n2100\n2120\n2120\n20E0\nENDCHAR\nSTARTCHAR U_4F06\nENCODING 20230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n1400\n27E0\n2AA0\n62A0\nA520\n2520\n2920\n2220\n2420\n20C0\nENDCHAR\nSTARTCHAR U_4F07\nENCODING 20231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1780\n2480\n2480\n6860\nB780\n2480\n2280\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_4F08\nENCODING 20232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1080\n2080\n2200\n6200\nAA40\n2A20\n3220\n2240\n2240\n21C0\nENDCHAR\nSTARTCHAR U_4F09\nENCODING 20233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2000\n6780\nA480\n2480\n2480\n24A0\n28A0\n3060\nENDCHAR\nSTARTCHAR U_4F0A\nENCODING 20234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2240\n2240\n6FE0\nA240\n2240\n2FC0\n2200\n2400\n2800\nENDCHAR\nSTARTCHAR U_4F0B\nENCODING 20235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2240\n2280\n62E0\nA220\n2220\n2540\n2480\n2940\n3220\nENDCHAR\nSTARTCHAR U_4F0C\nENCODING 20236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17E0\n2400\n25C0\n6540\nA540\n25C0\n2500\n2920\n2920\n30E0\nENDCHAR\nSTARTCHAR U_4F0D\nENCODING 20237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2200\n2200\n6200\nAFC0\n2240\n2440\n2440\n2440\n3FE0\nENDCHAR\nSTARTCHAR U_4F0E\nENCODING 20238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2FE0\n2100\n6100\nAFE0\n2440\n2280\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_4F0F\nENCODING 20239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1140\n2120\n2100\n6FE0\nA100\n2100\n2280\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4F10\nENCODING 20240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n1240\n2200\n23E0\n7E20\nA240\n2280\n2100\n22A0\n2C60\n2020\nENDCHAR\nSTARTCHAR U_4F11\nENCODING 20241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2100\n3FE0\n6100\nA380\n2380\n2540\n2920\n3100\n2100\nENDCHAR\nSTARTCHAR U_4F12\nENCODING 20242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n1700\n2400\n2400\n67E0\nA480\n2480\n2480\n2480\n2880\n3080\nENDCHAR\nSTARTCHAR U_4F13\nENCODING 20243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2080\n2100\n6100\nA340\n2520\n2920\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_4F14\nENCODING 20244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2820\n2820\n6780\nA480\n2480\n2480\n24A0\n28A0\n3060\nENDCHAR\nSTARTCHAR U_4F15\nENCODING 20245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n27C0\n2100\n6100\nAFE0\n2100\n2280\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4F16\nENCODING 20246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n2FE0\n2200\n6200\nA3C0\n2640\n2540\n2880\n3340\n2C20\nENDCHAR\nSTARTCHAR U_4F17\nENCODING 20247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0A00\n1100\n2080\nD160\n1100\n1100\n2A80\n4440\n8820\nENDCHAR\nSTARTCHAR U_4F18\nENCODING 20248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n1220\n2200\n3FE0\n6200\nA300\n2300\n2500\n2520\n2920\n30E0\nENDCHAR\nSTARTCHAR U_4F19\nENCODING 20249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2120\n2540\n6580\nA900\n2100\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4F1A\nENCODING 20250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1100\n2080\nDF60\n0000\n0000\n7FC0\n0800\n1080\n3FC0\nENDCHAR\nSTARTCHAR U_4F1B\nENCODING 20251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\n2840\n2A40\n6980\nA880\n2940\n2A20\n2800\n2800\n2FE0\nENDCHAR\nSTARTCHAR U_4F1C\nENCODING 20252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n2F80\n6280\nA4A0\n38E0\n2100\n2FE0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_4F1D\nENCODING 20253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2000\n2000\n6FE0\nA100\n2200\n2200\n2440\n2FE0\n2420\nENDCHAR\nSTARTCHAR U_4F1E\nENCODING 20254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0A00\n3180\nC460\n2480\n1500\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_4F1F\nENCODING 20255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2FE0\n2100\n67C0\nA100\n2FE0\n2120\n2120\n2160\n2100\nENDCHAR\nSTARTCHAR U_4F20\nENCODING 20256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n27E0\n2100\n6FE0\nA200\n27E0\n2040\n2280\n2100\n2080\nENDCHAR\nSTARTCHAR U_4F21\nENCODING 20257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n2FE0\n2400\n6500\nA900\n2FE0\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_4F22\nENCODING 20258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2480\n2880\n6FE0\nA080\n2180\n2280\n2480\n3880\n2180\nENDCHAR\nSTARTCHAR U_4F23\nENCODING 20259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FC0\n2840\n2A40\n6A40\nAA40\n2300\n2500\n2520\n2920\n30E0\nENDCHAR\nSTARTCHAR U_4F24\nENCODING 20260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n1400\n27E0\n2900\n6100\nA7E0\n2120\n2120\n2220\n24A0\n2840\nENDCHAR\nSTARTCHAR U_4F25\nENCODING 20261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n1480\n2500\n2600\n6400\nBFC0\n2500\n2500\n2480\n2540\n2620\nENDCHAR\nSTARTCHAR U_4F26\nENCODING 20262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2280\n2440\n6820\nA240\n2280\n2300\n2220\n2220\n21E0\nENDCHAR\nSTARTCHAR U_4F27\nENCODING 20263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2280\n2440\n6FE0\nB440\n2440\n25C0\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_4F28\nENCODING 20264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n27E0\n2820\n7220\nA120\n20A0\n2320\n2C20\n2020\n20C0\nENDCHAR\nSTARTCHAR U_4F29\nENCODING 20265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2000\n2FE0\n2440\n6440\nA280\n2280\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_4F2A\nENCODING 20266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\n1500\n2100\n2FE0\n6220\nA320\n22A0\n24A0\n2420\n2820\n30C0\nENDCHAR\nSTARTCHAR U_4F2B\nENCODING 20267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2820\n7040\nA000\n2000\n2000\n2000\n2FE0\n2000\nENDCHAR\nSTARTCHAR U_4F2C\nENCODING 20268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n1420\n2420\n2420\n67E0\nA480\n2480\n2480\n2840\n2840\n3020\nENDCHAR\nSTARTCHAR U_4F2D\nENCODING 20269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2200\n6440\nAF80\n2100\n2200\n2440\n2FE0\n2420\nENDCHAR\nSTARTCHAR U_4F2E\nENCODING 20270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n29E0\n48A0\nFEA0\n4AA0\n52A0\n52A0\n4A40\n4440\n4AA0\n5120\nENDCHAR\nSTARTCHAR U_4F2F\nENCODING 20271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1200\n27E0\n2420\n6420\nA7E0\n2420\n2420\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_4F30\nENCODING 20272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2100\n2FE0\n6100\nA100\n27C0\n2440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_4F31\nENCODING 20273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n2500\n6880\nB240\n2220\n2A80\n2A40\n3240\n2200\n2600\nENDCHAR\nSTARTCHAR U_4F32\nENCODING 20274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n1420\n2420\n27E0\n6400\nA520\n2540\n2580\n2920\n2920\n30E0\nENDCHAR\nSTARTCHAR U_4F33\nENCODING 20275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n1540\n2540\n2FE0\n6540\nA540\n2540\n25C0\n2540\n2400\n27E0\nENDCHAR\nSTARTCHAR U_4F34\nENCODING 20276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1920\n2540\n2100\n67C0\nA100\n2100\n2FE0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_4F35\nENCODING 20277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n4AA0\nCAA0\n4AA0\n4AA0\n4AA0\n4CE0\n4820\n4820\n4FE0\nENDCHAR\nSTARTCHAR U_4F36\nENCODING 20278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2280\n2440\n7920\nA080\n2FE0\n2040\n2280\n2100\n2080\nENDCHAR\nSTARTCHAR U_4F37\nENCODING 20279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4100\nCFE0\n4920\n4920\n4FE0\n4920\n4920\n4920\n4FE0\nENDCHAR\nSTARTCHAR U_4F38\nENCODING 20280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2FE0\n2920\n6FE0\nA920\n2920\n2FE0\n2920\n2100\n2100\nENDCHAR\nSTARTCHAR U_4F39\nENCODING 20281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2440\n6440\nA7C0\n2440\n2440\n27C0\n2440\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_4F3A\nENCODING 20282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17E0\n2020\n2FA0\n6020\nA720\n2520\n2520\n2720\n2020\n20E0\nENDCHAR\nSTARTCHAR U_4F3B\nENCODING 20283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2100\n2920\n6520\nA540\n2FE0\n2100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_4F3C\nENCODING 20284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2A40\n2940\n2940\n6840\nA840\n2840\n2A80\n2CC0\n3120\n2620\nENDCHAR\nSTARTCHAR U_4F3D\nENCODING 20285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n2800\n3EE0\n2AA0\n6AA0\nAAA0\n2AA0\n2AA0\n2AA0\n32E0\n26A0\nENDCHAR\nSTARTCHAR U_4F3E\nENCODING 20286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2080\n2100\n6300\nA540\n2920\n2120\n2100\n2000\n2FE0\nENDCHAR\nSTARTCHAR U_4F3F\nENCODING 20287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2440\n2440\n6440\nA7C0\n2000\n2280\n2240\n2420\n2820\nENDCHAR\nSTARTCHAR U_4F40\nENCODING 20288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FC0\n4840\nC840\n4FC0\n4800\n4FE0\n4820\n4820\n4820\n4FE0\nENDCHAR\nSTARTCHAR U_4F41\nENCODING 20289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2200\n2440\n6FE0\nA020\n27C0\n2440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_4F42\nENCODING 20290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n4100\nC100\n4100\n49C0\n4900\n4900\n4900\n4900\n5FE0\nENDCHAR\nSTARTCHAR U_4F43\nENCODING 20291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2920\n2920\n6920\nAFE0\n2920\n2920\n2920\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_4F44\nENCODING 20292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2880\n4880\nFFE0\n4880\n4880\n4F80\n4880\n4880\n4880\n4F80\nENDCHAR\nSTARTCHAR U_4F45\nENCODING 20293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n2FC0\n2200\n6200\nBFE0\n2700\n2A80\n3240\n2220\n2200\nENDCHAR\nSTARTCHAR U_4F46\nENCODING 20294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2440\n2440\n67C0\nA440\n2440\n27C0\n2000\n2000\n2FE0\nENDCHAR\nSTARTCHAR U_4F47\nENCODING 20295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1080\n2FE0\n2820\n6000\nAFE0\n2100\n2100\n2100\n2100\n2700\nENDCHAR\nSTARTCHAR U_4F48\nENCODING 20296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n3FE0\n2500\n6900\nAFE0\n3920\n2920\n2960\n2100\n2100\nENDCHAR\nSTARTCHAR U_4F49\nENCODING 20297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2FE0\n2100\n6100\nBFE0\n2200\n2280\n2440\n2FE0\n2420\nENDCHAR\nSTARTCHAR U_4F4A\nENCODING 20298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4FE0\nC920\n4920\n4FC0\n4A40\n4A80\n5100\n5280\n6C60\nENDCHAR\nSTARTCHAR U_4F4B\nENCODING 20299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n4220\nC220\n4540\n4880\n57E0\n4420\n4420\n4420\n47E0\nENDCHAR\nSTARTCHAR U_4F4C\nENCODING 20300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n4480\n54A0\nD7C0\n5480\n5480\n5480\n56A0\n54A0\n5860\nENDCHAR\nSTARTCHAR U_4F4D\nENCODING 20301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2000\n2FE0\n6000\nA440\n2240\n2280\n2080\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_4F4E\nENCODING 20302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n1F00\n2900\n2900\n6900\nAFE0\n2900\n2920\n2AA0\n2D60\n28A0\nENDCHAR\nSTARTCHAR U_4F4F\nENCODING 20303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2100\n6100\nA100\n27C0\n2100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_4F50\nENCODING 20304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n2FE0\n2400\n6400\nA7C0\n2900\n2900\n3100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_4F51\nENCODING 20305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n2FE0\n2200\n6400\nA7C0\n2C40\n3440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_4F52\nENCODING 20306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n27C0\n2540\n6540\nA540\n2FE0\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4F53\nENCODING 20307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n5FC0\n4200\nC700\n4A80\n5240\n6220\n4F80\n4200\n4200\nENDCHAR\nSTARTCHAR U_4F54\nENCODING 20308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n21E0\n2100\n6100\nA7C0\n2440\n2440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_4F55\nENCODING 20309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2040\n6F40\nA940\n2940\n2F40\n2940\n2040\n2040\n20C0\nENDCHAR\nSTARTCHAR U_4F56\nENCODING 20310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2140\n2480\n2480\n6C80\nB540\n3520\n2620\n2440\n2C40\n33C0\nENDCHAR\nSTARTCHAR U_4F57\nENCODING 20311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2820\n6400\nA480\n2500\n2600\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_4F58\nENCODING 20312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1100\n2080\nDF60\n0000\n3FC0\n0400\n1500\n2480\n4C40\nENDCHAR\nSTARTCHAR U_4F59\nENCODING 20313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1100\n2080\nDF60\n0400\n7FC0\n0400\n1500\n2480\n4C40\nENDCHAR\nSTARTCHAR U_4F5A\nENCODING 20314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1500\n2500\n2FC0\n6900\nA100\n2FE0\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4F5B\nENCODING 20315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n2500\n5FC0\nC540\n5FC0\n5500\n5FE0\n4520\n45A0\n4940\n5100\nENDCHAR\nSTARTCHAR U_4F5C\nENCODING 20316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n1400\n27E0\n2A00\n7200\nA3C0\n2200\n2200\n23E0\n2200\n2200\nENDCHAR\nSTARTCHAR U_4F5D\nENCODING 20317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n1400\n27E0\n2820\n7720\nA520\n2520\n2720\n2020\n2020\n20E0\nENDCHAR\nSTARTCHAR U_4F5E\nENCODING 20318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2000\n2FE0\n6100\nA100\n2FE0\n2240\n2480\n2380\n2E60\nENDCHAR\nSTARTCHAR U_4F5F\nENCODING 20319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n13C0\n2440\n2A80\n6100\nA680\n3860\n2300\n2080\n2600\n2180\nENDCHAR\nSTARTCHAR U_4F60\nENCODING 20320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n1400\n27E0\n2820\n6100\nA540\n2540\n2920\n3120\n2120\n2300\nENDCHAR\nSTARTCHAR U_4F61\nENCODING 20321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2280\n2440\n6920\nA100\n2920\n2920\n2920\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_4F62\nENCODING 20322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n1400\n2400\n27C0\n6440\nA440\n27C0\n2400\n2400\n2400\n27E0\nENDCHAR\nSTARTCHAR U_4F63\nENCODING 20323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\n2920\n2FE0\n6920\nA920\n2FE0\n2920\n2920\n2920\n3060\nENDCHAR\nSTARTCHAR U_4F64\nENCODING 20324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n1400\n2400\n2780\n6480\nA680\n2580\n2880\n2AA0\n2CA0\n2860\nENDCHAR\nSTARTCHAR U_4F65\nENCODING 20325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0600\n0900\n1080\n6F60\n0000\n0440\n2240\n1280\n1080\n7FE0\nENDCHAR\nSTARTCHAR U_4F66\nENCODING 20326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n4200\nC200\n4400\n47E0\n4C20\n5420\n4420\n47E0\n4420\nENDCHAR\nSTARTCHAR U_4F67\nENCODING 20327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n23C0\n2200\n6200\nAFE0\n2200\n2300\n2280\n2240\n2200\nENDCHAR\nSTARTCHAR U_4F68\nENCODING 20328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n2800\n4FC0\nD040\n6F40\n4940\n4F40\n48C0\n4800\n4820\n47E0\nENDCHAR\nSTARTCHAR U_4F69\nENCODING 20329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FC0\n5040\n57C0\n5140\nD7C0\n5540\n5540\n5540\n55C0\n5540\n6120\nENDCHAR\nSTARTCHAR U_4F6A\nENCODING 20330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2820\n2BA0\n6AA0\nAAA0\n2BA0\n2AA0\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_4F6B\nENCODING 20331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n17C0\n2440\n2680\n6900\nA280\n2460\n3FC0\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_4F6C\nENCODING 20332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1FA0\n2240\n2280\n7FE0\nA200\n24C0\n2F00\n3420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_4F6D\nENCODING 20333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27C0\n4C40\nD280\n4100\n4680\n5960\n47C0\n4900\n4FE0\n4100\nENDCHAR\nSTARTCHAR U_4F6E\nENCODING 20334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n2500\n2880\n7040\nAFA0\n2000\n2FC0\n2840\n2840\n2FC0\nENDCHAR\nSTARTCHAR U_4F6F\nENCODING 20335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n1280\n2FE0\n2100\n6100\nA7C0\n2100\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_4F70\nENCODING 20336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n1100\n2200\n27C0\n6440\nA440\n27C0\n2440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_4F71\nENCODING 20337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1100\n2080\nDF60\n0000\n7FC0\n0400\n1780\n1400\nFFE0\nENDCHAR\nSTARTCHAR U_4F72\nENCODING 20338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n4440\nCA80\n5100\n4200\n47C0\n4C40\n5440\n4440\n47C0\nENDCHAR\nSTARTCHAR U_4F73\nENCODING 20339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n17C0\n2100\n2100\n6FE0\nA100\n2100\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_4F74\nENCODING 20340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n1440\n2440\n27C0\n6440\nA440\n27C0\n2440\n24E0\n3F40\n2040\nENDCHAR\nSTARTCHAR U_4F75\nENCODING 20341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2840\n2480\n2FE0\n2480\n6480\nA480\n3FE0\n2480\n2480\n2880\n3080\nENDCHAR\nSTARTCHAR U_4F76\nENCODING 20342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2FE0\n2100\n6100\nA7C0\n2000\n27C0\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_4F77\nENCODING 20343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1440\n27C0\n2440\n67C0\nA500\n2520\n24C0\n2480\n2540\n2620\nENDCHAR\nSTARTCHAR U_4F78\nENCODING 20344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n1700\n2100\n2100\n6FE0\nA100\n2100\n27C0\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_4F79\nENCODING 20345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n13C0\n2480\n27E0\n6C00\nA5C0\n2540\n2540\n2580\n2920\n31E0\nENDCHAR\nSTARTCHAR U_4F7A\nENCODING 20346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1280\n2440\n2820\n67C0\nA100\n2100\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_4F7B\nENCODING 20347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n1280\n2AA0\n26C0\n6280\nA2C0\n26A0\n2A80\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_4F7C\nENCODING 20348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2280\n6440\nAAA0\n3280\n2280\n2100\n2280\n3C60\nENDCHAR\nSTARTCHAR U_4F7D\nENCODING 20349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n29E0\n2620\n60A0\nA480\n3880\n2880\n2940\n2220\n2420\nENDCHAR\nSTARTCHAR U_4F7E\nENCODING 20350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n1440\n2820\n27C0\n6440\nA7C0\n2440\n27C0\n2440\n2440\n25C0\nENDCHAR\nSTARTCHAR U_4F7F\nENCODING 20351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2100\n2FE0\n6920\nAFE0\n2900\n2500\n2200\n2580\n3860\nENDCHAR\nSTARTCHAR U_4F80\nENCODING 20352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F20\n2AA0\n2AA0\n6AA0\nBFA0\n2AA0\n2AA0\n2AA0\n2A20\n3220\n22E0\nENDCHAR\nSTARTCHAR U_4F81\nENCODING 20353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\n1500\n27C0\n2900\n6100\nAFE0\n2280\n2280\n24A0\n28A0\n3060\nENDCHAR\nSTARTCHAR U_4F82\nENCODING 20354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2800\n28C0\n6B00\nA900\n29E0\n2F00\n2920\n2920\n30E0\nENDCHAR\nSTARTCHAR U_4F83\nENCODING 20355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F80\n2880\n2880\n4F80\n4000\nCA80\n4A80\n4A80\n4AA0\n52A0\n62E0\nENDCHAR\nSTARTCHAR U_4F84\nENCODING 20356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2200\n2440\n6FE0\nA120\n2100\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_4F85\nENCODING 20357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2200\n2440\n6F80\nA120\n2240\n2C80\n2140\n2220\n2C20\nENDCHAR\nSTARTCHAR U_4F86\nENCODING 20358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n2480\n2480\n5540\n8E20\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_4F87\nENCODING 20359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2100\n27E0\n6120\nAFE0\n2900\n2FE0\n2120\n2280\n2C60\nENDCHAR\nSTARTCHAR U_4F88\nENCODING 20360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n13C0\n2440\n2A80\n6300\nAD00\n23E0\n2620\n2940\n2180\n2E00\nENDCHAR\nSTARTCHAR U_4F89\nENCODING 20361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2440\n2BA0\n7000\nAFE0\n2200\n27C0\n2040\n2040\n2180\nENDCHAR\nSTARTCHAR U_4F8A\nENCODING 20362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2920\n6540\nA100\n2FE0\n2280\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_4F8B\nENCODING 20363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F20\n2420\n24A0\n6BA0\n69A0\nBAA0\n26A0\n22A0\n2420\n2820\n3060\nENDCHAR\nSTARTCHAR U_4F8C\nENCODING 20364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1500\n2280\nDF60\n0200\n3FC0\n0000\nFFE0\n1080\n3FC0\nENDCHAR\nSTARTCHAR U_4F8D\nENCODING 20365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n17C0\n2100\n2100\n6FE0\nA040\n2FE0\n2440\n2240\n2040\n21C0\nENDCHAR\nSTARTCHAR U_4F8E\nENCODING 20366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3240\n4A80\nC200\n5FE0\n4200\n4700\n4A80\n5240\n6220\n4200\nENDCHAR\nSTARTCHAR U_4F8F\nENCODING 20367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1500\n27C0\n2900\n6100\nAFE0\n2380\n2540\n2940\n3120\n2100\nENDCHAR\nSTARTCHAR U_4F90\nENCODING 20368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1200\n2FE0\n2AA0\n6AA0\nAAA0\n2AA0\n2AA0\n2AA0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_4F91\nENCODING 20369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1FE0\n2200\n27C0\n6440\nAFC0\n3440\n27C0\n2440\n2440\n24C0\nENDCHAR\nSTARTCHAR U_4F92\nENCODING 20370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2920\n2100\n6FE0\nA240\n2440\n2280\n2180\n2240\n2C20\nENDCHAR\nSTARTCHAR U_4F93\nENCODING 20371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n17C0\n2140\n2FE0\n6140\nA7C0\n2100\n27C0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_4F94\nENCODING 20372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1440\n2FE0\n2100\n6900\nAFE0\n3100\n2100\n3FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_4F95\nENCODING 20373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n1100\n2200\n2FE0\n6AA0\nAAA0\n2AA0\n2AA0\n2AA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_4F96\nENCODING 20374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0E00\n1100\n2E80\n4060\nBFC0\n2A40\n2A40\n3FC0\n2A40\n2AC0\nENDCHAR\nSTARTCHAR U_4F97\nENCODING 20375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n2BA0\n6820\nABA0\n2AA0\n2AA0\n2BA0\n2820\n2820\n28E0\nENDCHAR\nSTARTCHAR U_4F98\nENCODING 20376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2820\n2180\n6600\nA2C0\n2F00\n2220\n2220\n21E0\nENDCHAR\nSTARTCHAR U_4F99\nENCODING 20377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1140\n2120\n2FE0\n6100\nAF00\n2500\n2480\n26A0\n3860\n2020\nENDCHAR\nSTARTCHAR U_4F9A\nENCODING 20378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n1400\n27E0\n2820\n77A0\nA4A0\n27A0\n24A0\n27A0\n2020\n2060\nENDCHAR\nSTARTCHAR U_4F9B\nENCODING 20379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n1480\n2480\n2FE0\n6480\nA480\n3FE0\n2000\n2480\n2840\n3020\nENDCHAR\nSTARTCHAR U_4F9C\nENCODING 20380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n17C0\n2440\n2640\n6540\nBFE0\n2440\n2640\n2540\n2840\n30C0\nENDCHAR\nSTARTCHAR U_4F9D\nENCODING 20381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2100\n6320\nA540\n2C80\n3480\n2440\n2520\n2620\nENDCHAR\nSTARTCHAR U_4F9E\nENCODING 20382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n24E0\n3EA0\n6AA0\nAAA0\n2AA0\n2AA0\n24A0\n24E0\n2AA0\n3000\nENDCHAR\nSTARTCHAR U_4F9F\nENCODING 20383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2FE0\n2200\n65E0\nAC40\n37E0\n2440\n2440\n2440\n24C0\nENDCHAR\nSTARTCHAR U_4FA0\nENCODING 20384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2FE0\n2920\n6540\nA100\n2FE0\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4FA1\nENCODING 20385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n2FE0\n6280\nA280\n2FE0\n2AA0\n2AA0\n2AA0\n2AA0\n2FE0\nENDCHAR\nSTARTCHAR U_4FA2\nENCODING 20386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2100\n67C0\nA540\n27C0\n2540\n3FE0\n2440\n2540\n24C0\nENDCHAR\nSTARTCHAR U_4FA3\nENCODING 20387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2440\n2440\n67C0\nA000\n2FE0\n2820\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_4FA4\nENCODING 20388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1740\n2280\n7FE0\nA100\n23C0\n2500\n2BC0\n2040\n2040\n2180\nENDCHAR\nSTARTCHAR U_4FA5\nENCODING 20389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1FE0\n2240\n22A0\n6120\nAEE0\n2000\n3FE0\n2480\n28A0\n3060\nENDCHAR\nSTARTCHAR U_4FA6\nENCODING 20390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n11E0\n2100\n27E0\n6420\nA520\n2520\n2520\n2280\n2240\n2C20\nENDCHAR\nSTARTCHAR U_4FA7\nENCODING 20391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n3F20\n5120\n55A0\nD5A0\n55A0\n55A0\n5520\n4620\n4920\n5060\nENDCHAR\nSTARTCHAR U_4FA8\nENCODING 20392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2F00\n4200\n5FE0\nC480\n4840\n54A0\n4480\n4480\n4880\n5080\nENDCHAR\nSTARTCHAR U_4FA9\nENCODING 20393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1280\n2440\n2820\n67C0\nA000\n2FE0\n2100\n2200\n2440\n2FA0\nENDCHAR\nSTARTCHAR U_4FAA\nENCODING 20394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2440\n2280\n6100\nA680\n3860\n2480\n2480\n2880\n3080\nENDCHAR\nSTARTCHAR U_4FAB\nENCODING 20395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n6400\nA7C0\n2200\n2FE0\n2480\n2300\n22C0\n2C40\nENDCHAR\nSTARTCHAR U_4FAC\nENCODING 20396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2FE0\n2920\n6200\nA340\n2480\n2C80\n3440\n2540\n2620\nENDCHAR\nSTARTCHAR U_4FAD\nENCODING 20397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2440\n67C0\nA500\n2880\n2B40\n3120\n2400\n2300\n2100\nENDCHAR\nSTARTCHAR U_4FAE\nENCODING 20398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n1800\n27E0\n2520\n64A0\nAFE0\n2520\n24A0\n2FE0\n2020\n20C0\nENDCHAR\nSTARTCHAR U_4FAF\nENCODING 20399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1780\n1080\n2FE0\n2400\n67C0\nA900\n2100\n2FE0\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4FB0\nENCODING 20400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FC0\n2240\n7FE0\nA240\n2FC0\n2400\n2FC0\n3440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_4FB1\nENCODING 20401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2440\n67C0\nA000\n2FE0\n2100\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_4FB2\nENCODING 20402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\n4BC0\n4800\nCFE0\n4A80\n4AA0\n4A40\n4A40\n53A0\n6220\nENDCHAR\nSTARTCHAR U_4FB3\nENCODING 20403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1540\n2540\n2540\n6BA0\nA100\n27C0\n2100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_4FB4\nENCODING 20404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0600\n0900\n1080\n2F60\nC040\n7D40\n1540\n7D40\n2640\nF8C0\nENDCHAR\nSTARTCHAR U_4FB5\nENCODING 20405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2040\n4FC0\n4040\nDFE0\n5020\n4FC0\n4480\n4300\n4480\n5860\nENDCHAR\nSTARTCHAR U_4FB6\nENCODING 20406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1440\n2440\n27C0\n6100\nA200\n2FE0\n2820\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_4FB7\nENCODING 20407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n2FE0\n2800\n6FE0\nA820\n2BA0\n2AA0\n2BA0\n2820\n30C0\nENDCHAR\nSTARTCHAR U_4FB8\nENCODING 20408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2000\n67C0\nA440\n27C0\n2000\n2440\n2240\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_4FB9\nENCODING 20409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2D80\n2480\n6480\nABE0\n2C80\n2480\n3480\n2DC0\n2C00\n33E0\nENDCHAR\nSTARTCHAR U_4FBA\nENCODING 20410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2920\n2FE0\n6100\nA280\n2540\n38A0\n27C0\n2040\n2080\n2100\nENDCHAR\nSTARTCHAR U_4FBB\nENCODING 20411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n1280\n2FC0\n2840\n6840\nAFC0\n2280\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_4FBC\nENCODING 20412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n17C0\n2100\n6FE0\nA820\n27C0\n2080\n2FE0\n2100\n2100\n2700\nENDCHAR\nSTARTCHAR U_4FBD\nENCODING 20413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1540\n27C0\n6540\nA7C0\n2100\n2FE0\n2220\n2220\n2420\n28C0\nENDCHAR\nSTARTCHAR U_4FBE\nENCODING 20414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1740\n2280\n7FE0\nA200\n27C0\n2900\n37E0\n2100\n2100\n2300\nENDCHAR\nSTARTCHAR U_4FBF\nENCODING 20415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n2FE0\n2920\n6FE0\nA920\n2FE0\n2500\n2200\n2500\n38E0\nENDCHAR\nSTARTCHAR U_4FC0\nENCODING 20416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n1F20\n2A20\n2540\n6100\nAFE0\n2240\n2440\n2380\n2140\n2E20\nENDCHAR\nSTARTCHAR U_4FC1\nENCODING 20417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n1240\n2A40\n2BC0\n6800\nAFC0\n2140\n3FE0\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_4FC2\nENCODING 20418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n1F00\n2200\n6480\nAF00\n2240\n2FE0\n2100\n2940\n3120\n2300\nENDCHAR\nSTARTCHAR U_4FC3\nENCODING 20419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1440\n2440\n27C0\n6100\nA100\n25C0\n2500\n2500\n2B00\n30E0\nENDCHAR\nSTARTCHAR U_4FC4\nENCODING 20420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1340\n1D20\n2500\n3FE0\n6500\nA720\n2D40\n3480\n25A0\n26A0\n2C60\nENDCHAR\nSTARTCHAR U_4FC5\nENCODING 20421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1180\n1140\n2FE0\n2100\n6920\nA540\n2380\n2540\n3920\n2120\n2700\nENDCHAR\nSTARTCHAR U_4FC6\nENCODING 20422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1280\n2440\n6820\nB7E0\n2100\n2FE0\n2100\n2540\n2920\n2300\nENDCHAR\nSTARTCHAR U_4FC7\nENCODING 20423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n3BE0\n4880\n5480\nC480\n4FE0\n5480\n6480\n4480\n5480\n4BE0\nENDCHAR\nSTARTCHAR U_4FC8\nENCODING 20424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1500\n27C0\n6900\nB100\n2FE0\n2000\n27C0\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_4FC9\nENCODING 20425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n1100\n2FC0\n2240\n6240\nBFE0\n2000\n27C0\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_4FCA\nENCODING 20426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1440\n2FE0\n22A0\n6640\nABE0\n2440\n2A80\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_4FCB\nENCODING 20427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1780\n1480\n2780\n2000\n6FC0\nA940\n2940\n2FC0\n2800\n2820\n27E0\nENDCHAR\nSTARTCHAR U_4FCC\nENCODING 20428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n1240\n2FE0\n6200\nAFC0\n2A40\n2FC0\n2A40\n2FC0\n2A40\n2AC0\nENDCHAR\nSTARTCHAR U_4FCD\nENCODING 20429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FC0\n2840\n6FC0\nA840\n2FC0\n2920\n28C0\n2A40\n2C20\nENDCHAR\nSTARTCHAR U_4FCE\nENCODING 20430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n2240\n53C0\n8A40\n2240\n23C0\n2240\n5240\n8A40\n0FE0\nENDCHAR\nSTARTCHAR U_4FCF\nENCODING 20431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n14A0\n22C0\n27E0\n6420\nA7E0\n2420\n2420\n27E0\n2420\n2460\nENDCHAR\nSTARTCHAR U_4FD0\nENCODING 20432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2320\n3C20\n24A0\n24A0\n7FA0\nA4A0\n2EA0\n35A0\n24A0\n2420\n2460\nENDCHAR\nSTARTCHAR U_4FD1\nENCODING 20433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2280\n2100\n2FE0\n6920\nAFE0\n2920\n2FE0\n2920\n2920\n2860\nENDCHAR\nSTARTCHAR U_4FD2\nENCODING 20434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2820\n6380\nA000\n2FE0\n2280\n2280\n24A0\n2860\nENDCHAR\nSTARTCHAR U_4FD3\nENCODING 20435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n1540\n2540\n2A80\n6540\nA540\n2FE0\n2100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_4FD4\nENCODING 20436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1440\n27C0\n2440\n67C0\nA440\n27C0\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_4FD5\nENCODING 20437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n6820\nA100\n2FE0\n2300\n2580\n2540\n3920\n2100\nENDCHAR\nSTARTCHAR U_4FD6\nENCODING 20438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n1100\n2380\n2540\n6920\nA100\n27C0\n2440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_4FD7\nENCODING 20439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n1440\n2920\n2180\n6240\nA420\n3FC0\n2440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_4FD8\nENCODING 20440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n1F20\n2A20\n2540\n6FE0\nA080\n2100\n3FE0\n2100\n2100\n2700\nENDCHAR\nSTARTCHAR U_4FD9\nENCODING 20441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1660\n1180\n2660\n2100\n6FE0\nA500\n2FE0\n3520\n2520\n2560\n2100\nENDCHAR\nSTARTCHAR U_4FDA\nENCODING 20442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2920\n2FE0\n6920\nAFE0\n2100\n2FE0\n2100\n2100\n3FE0\nENDCHAR\nSTARTCHAR U_4FDB\nENCODING 20443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n17C0\n2880\n3FE0\n6920\nA920\n2FE0\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_4FDC\nENCODING 20444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n17C0\n2540\n27C0\n6540\nBFE0\n2200\n27C0\n2040\n2040\n2180\nENDCHAR\nSTARTCHAR U_4FDD\nENCODING 20445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1440\n2440\n27C0\n6100\nAFE0\n2100\n2380\n2540\n2920\n2100\nENDCHAR\nSTARTCHAR U_4FDE\nENCODING 20446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n3180\nCF60\n3C40\n2540\n3D40\n2540\n3D40\n2440\n2CC0\nENDCHAR\nSTARTCHAR U_4FDF\nENCODING 20447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1440\n2FE0\n2420\n67C0\nA900\n2100\n3FE0\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4FE0\nENCODING 20448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2FE0\n2100\n6540\nA540\n2BA0\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4FE1\nENCODING 20449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2000\n67C0\nA000\n27C0\n2000\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_4FE2\nENCODING 20450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n13E0\n2640\n6980\nA240\n2520\n2A80\n2520\n2240\n2080\n2700\nENDCHAR\nSTARTCHAR U_4FE3\nENCODING 20451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1440\n2440\n27C0\n6000\nA7C0\n2100\n2FE0\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_4FE4\nENCODING 20452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n1280\n2FE0\n6120\nAFE0\n2900\n2FE0\n2320\n2520\n2960\n2100\nENDCHAR\nSTARTCHAR U_4FE5\nENCODING 20453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1FE0\n2200\n6FC0\nAA40\n2FC0\n2A40\n2FC0\n2200\n3FE0\n2200\nENDCHAR\nSTARTCHAR U_4FE6\nENCODING 20454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1FE0\n2200\n2FE0\n6200\nAFE0\n2440\n2FE0\n3440\n2240\n20C0\nENDCHAR\nSTARTCHAR U_4FE7\nENCODING 20455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2FE0\n6100\nA100\n27C0\n2200\n2940\n2AA0\n3240\n23C0\nENDCHAR\nSTARTCHAR U_4FE8\nENCODING 20456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n1280\n2AA0\n26C0\n6FE0\nA800\n2800\n2800\n2800\n2800\n3000\nENDCHAR\nSTARTCHAR U_4FE9\nENCODING 20457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2480\n4480\n5FE0\nD4A0\n54A0\n56A0\n5960\n5220\n5020\n50E0\nENDCHAR\nSTARTCHAR U_4FEA\nENCODING 20458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2000\n5DE0\n5520\nD520\n5DA0\n5560\n5520\n5520\n5520\n5560\nENDCHAR\nSTARTCHAR U_4FEB\nENCODING 20459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2FE0\n6540\nA380\n3FE0\n2300\n2580\n2940\n3120\n2100\nENDCHAR\nSTARTCHAR U_4FEC\nENCODING 20460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2340\n3C40\n4440\n4440\nDF40\n4480\n4E80\n55A0\n6520\n45E0\n4520\nENDCHAR\nSTARTCHAR U_4FED\nENCODING 20461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1300\n2480\n2840\n77A0\nA000\n2A40\n2540\n2540\n2080\n3FE0\nENDCHAR\nSTARTCHAR U_4FEE\nENCODING 20462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n13E0\n2D40\n2880\n6B40\nACA0\n2940\n2A80\n2920\n20C0\n2700\nENDCHAR\nSTARTCHAR U_4FEF\nENCODING 20463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2A40\n2A40\n6BE0\nAE40\n2B40\n2AC0\n2A40\n2A40\n32C0\nENDCHAR\nSTARTCHAR U_4FF0\nENCODING 20464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1300\n1C00\n24E0\n64A0\nBFA0\n24A0\n2EA0\n2DA0\n34E0\n24A0\n2400\nENDCHAR\nSTARTCHAR U_4FF1\nENCODING 20465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1440\n27C0\n6440\nA7C0\n2440\n27C0\n2440\n3FE0\n2440\n2820\nENDCHAR\nSTARTCHAR U_4FF2\nENCODING 20466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2280\n3F80\n69E0\nAAA0\n31A0\n2AA0\n24A0\n2B20\n31A0\n2240\nENDCHAR\nSTARTCHAR U_4FF3\nENCODING 20467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n1280\n2EE0\n2280\n6280\nAEE0\n2280\n2280\n2EE0\n2280\n2280\nENDCHAR\nSTARTCHAR U_4FF4\nENCODING 20468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n1FE0\n2140\n23A0\n6C60\nA280\n2240\n2FE0\n2140\n21A0\n2E60\nENDCHAR\nSTARTCHAR U_4FF5\nENCODING 20469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2100\n27C0\n6100\nAFE0\n2520\n2CC0\n3480\n2540\n2620\nENDCHAR\nSTARTCHAR U_4FF6\nENCODING 20470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n29E0\n2EA0\n48A0\nFEA0\n48A0\n5CA0\n6A40\n4840\n48A0\n5920\nENDCHAR\nSTARTCHAR U_4FF7\nENCODING 20471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n52A0\nD2A0\n5EA0\n53E0\n5E00\n5200\n5220\n5220\n67E0\nENDCHAR\nSTARTCHAR U_4FF8\nENCODING 20472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2100\n27E0\n6200\nAFE0\n2540\n2BA0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_4FF9\nENCODING 20473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FC0\n4500\nC500\n5DC0\n5040\n5040\n5DC0\n4500\n4500\n7FE0\nENDCHAR\nSTARTCHAR U_4FFA\nENCODING 20474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1FC0\n2500\n2A80\n6FC0\nBAA0\n2F80\n2A80\n2FA0\n2220\n23E0\nENDCHAR\nSTARTCHAR U_4FFB\nENCODING 20475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n17C0\n2C80\n3300\n6480\nB860\n2FC0\n2A40\n2FC0\n2A40\n2FC0\nENDCHAR\nSTARTCHAR U_4FFC\nENCODING 20476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2440\n2FE0\n6000\nA7C0\n2440\n27C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_4FFD\nENCODING 20477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2680\n3900\n51E0\nDE20\n5480\n5480\n5480\n5480\n5540\n5520\n6620\nENDCHAR\nSTARTCHAR U_4FFE\nENCODING 20478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1FE0\n2920\n2FE0\n6920\nAFE0\n2280\n2480\n3FE0\n2080\n2080\nENDCHAR\nSTARTCHAR U_4FFF\nENCODING 20479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n1200\n2FE0\n2A40\n6F80\nAA40\n29C0\n2800\n2B80\n2AA0\n34E0\nENDCHAR\nSTARTCHAR U_5000\nENCODING 20480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1400\n2780\n2400\n6780\nA400\n3FE0\n2540\n2480\n2540\n2620\nENDCHAR\nSTARTCHAR U_5001\nENCODING 20481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n2800\n4EE0\nD4A0\n64A0\n5EA0\n44A0\n44A0\n4AA0\n49E0\n5100\nENDCHAR\nSTARTCHAR U_5002\nENCODING 20482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n1240\n2480\n2EE0\n6440\nA440\n2EE0\n2440\n2440\n2840\n3040\nENDCHAR\nSTARTCHAR U_5003\nENCODING 20483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2EC0\n52A0\nEAA0\n4480\n4B00\n70E0\n4FC0\n4840\n4840\n4FC0\nENDCHAR\nSTARTCHAR U_5004\nENCODING 20484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n14C0\n1300\n2480\n2FE0\n6400\nAFC0\n3440\n27C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_5005\nENCODING 20485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2440\n6440\nAAA0\n2100\n3FE0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_5006\nENCODING 20486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2100\n2FE0\n6920\nADA0\n2B60\n2DA0\n2B60\n2920\n2960\nENDCHAR\nSTARTCHAR U_5007\nENCODING 20487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2820\n2400\n6EE0\nAAA0\n2AA0\n36E0\n2480\n28A0\n3060\nENDCHAR\nSTARTCHAR U_5008\nENCODING 20488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2FE0\n2540\n6540\nABA0\n3100\n2380\n2540\n2920\n3100\nENDCHAR\nSTARTCHAR U_5009\nENCODING 20489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n3580\nC260\n1F80\n1280\n1F80\n1000\n2FC0\n2840\n4FC0\nENDCHAR\nSTARTCHAR U_500A\nENCODING 20490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n2480\n4A40\nD220\n4480\n4F40\n4200\n4140\n5420\n5480\n4380\nENDCHAR\nSTARTCHAR U_500B\nENCODING 20491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\n2920\n2FE0\n6920\nABA0\n2AA0\n2BA0\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_500C\nENCODING 20492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2820\n67C0\nA440\n27C0\n2400\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_500D\nENCODING 20493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2440\n6280\nAFE0\n2000\n27C0\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_500E\nENCODING 20494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n2AA0\n2AA0\n6FE0\nAAA0\n2AA0\n3FE0\n2480\n2860\n3020\nENDCHAR\nSTARTCHAR U_500F\nENCODING 20495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n13E0\n2640\n2980\n6E60\nA980\n2940\n2FE0\n2900\n2280\n2C60\nENDCHAR\nSTARTCHAR U_5010\nENCODING 20496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n5680\nD900\n5280\n5C60\n5100\n5540\n5900\n4280\n4C60\nENDCHAR\nSTARTCHAR U_5011\nENCODING 20497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2EE0\n2AA0\n6EE0\nA820\n2820\n2820\n2820\n2820\n2860\nENDCHAR\nSTARTCHAR U_5012\nENCODING 20498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n3F20\n48A0\n52A0\nDFA0\n44A0\n44A0\n5FA0\n44A0\n4720\n5860\nENDCHAR\nSTARTCHAR U_5013\nENCODING 20499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1540\n1580\n2900\n2280\n6440\nB920\n2540\n2580\n2A80\n2440\n3820\nENDCHAR\nSTARTCHAR U_5014\nENCODING 20500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n2FE0\n6880\nAAA0\n2AA0\n2BE0\n2880\n2AA0\n2AA0\n33E0\nENDCHAR\nSTARTCHAR U_5015\nENCODING 20501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n1700\n2100\n2FE0\n6540\nBFE0\n2540\n2540\n2FE0\n2100\n27C0\nENDCHAR\nSTARTCHAR U_5016\nENCODING 20502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n17C0\n2100\n6FE0\nA440\n2280\n2FE0\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_5017\nENCODING 20503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2AA0\n6EE0\nAAA0\n2AA0\n2EE0\n2AA0\n2AA0\n2AA0\n3760\nENDCHAR\nSTARTCHAR U_5018\nENCODING 20504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1920\n2540\n2FE0\n6820\nABA0\n2AA0\n2AA0\n2BA0\n2820\n2860\nENDCHAR\nSTARTCHAR U_5019\nENCODING 20505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\n2080\n5FE0\n5400\nD7C0\n5900\n5FE0\n5100\n5280\n4440\n4820\nENDCHAR\nSTARTCHAR U_501A\nENCODING 20506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2280\n2440\n7FE0\nA040\n2F40\n2940\n2F40\n2040\n21C0\nENDCHAR\nSTARTCHAR U_501B\nENCODING 20507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n1FE0\n2440\n27C0\n6440\nA7C0\n2440\n3FE0\n2000\n2440\n2820\nENDCHAR\nSTARTCHAR U_501C\nENCODING 20508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\n2FA0\n2920\n6FE0\nA820\n2BA0\n2AA0\n2BA0\n2820\n30E0\nENDCHAR\nSTARTCHAR U_501D\nENCODING 20509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n7C80\n1080\n7C80\n4480\n7D40\n4540\n7D40\n1240\nFE20\n1420\nENDCHAR\nSTARTCHAR U_501E\nENCODING 20510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2000\n67C0\nA440\n27C0\n2100\n2540\n2920\n3320\nENDCHAR\nSTARTCHAR U_501F\nENCODING 20511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n1FE0\n2480\n2480\n7FE0\nA000\n27C0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_5020\nENCODING 20512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n1240\n27E0\n6C80\nB480\n27E0\n2480\n27E0\n2480\n2480\n27E0\nENDCHAR\nSTARTCHAR U_5021\nENCODING 20513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1440\n27C0\n2440\n67C0\nA000\n2FE0\n2820\n2FE0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_5022\nENCODING 20514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n1100\n2FC0\n2140\n7FE0\nA140\n2FC0\n2500\n25C0\n2B00\n31E0\nENDCHAR\nSTARTCHAR U_5023\nENCODING 20515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2480\n3FE0\n68A0\nAFA0\n2AA0\n2AA0\n2AA0\n2A40\n2AA0\n3720\nENDCHAR\nSTARTCHAR U_5024\nENCODING 20516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4200\nC7C0\n5440\n57C0\n5440\n57C0\n5440\n57C0\n5FE0\nENDCHAR\nSTARTCHAR U_5025\nENCODING 20517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2AA0\n6440\nA820\n27C0\n2100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_5026\nENCODING 20518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n2680\n3FE0\n6400\nBFE0\n2840\n37A0\n2480\n2580\n2420\n23E0\nENDCHAR\nSTARTCHAR U_5027\nENCODING 20519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n2FE0\n2820\n67C0\nA000\n2FE0\n2100\n2540\n2920\n3320\nENDCHAR\nSTARTCHAR U_5028\nENCODING 20520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n1420\n2420\n27E0\n6480\nA7E0\n2480\n2BE0\n2A20\n2A20\n33E0\nENDCHAR\nSTARTCHAR U_5029\nENCODING 20521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2100\n27C0\n6100\nAFE0\n2440\n27C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_502A\nENCODING 20522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2CE0\n2820\n2EE0\n6820\nAFE0\n2280\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_502B\nENCODING 20523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1280\n2440\n3BA0\n6000\nAFE0\n2AA0\n2FE0\n2AA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_502C\nENCODING 20524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n13E0\n2200\n6FC0\nA840\n2FC0\n2840\n2FC0\n2200\n3FE0\n2200\nENDCHAR\nSTARTCHAR U_502D\nENCODING 20525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\n1780\n2100\n3FE0\n6540\nA920\n2200\n3FE0\n2480\n2300\n2CE0\nENDCHAR\nSTARTCHAR U_502E\nENCODING 20526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2940\n2FC0\n2940\n6FC0\nA100\n3FE0\n2300\n2580\n2940\n3120\nENDCHAR\nSTARTCHAR U_502F\nENCODING 20527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2840\n2940\n4940\n7D40\nC920\n5AA0\n5C80\n6880\n4940\n4920\n4BE0\nENDCHAR\nSTARTCHAR U_5030\nENCODING 20528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n17C0\n2100\n2FE0\n6440\nAA20\n33C0\n2440\n2A80\n2180\n2E60\nENDCHAR\nSTARTCHAR U_5031\nENCODING 20529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2840\n2FC0\n2840\n6FC0\nA020\n2940\n2F80\n2920\n2B20\n2CE0\nENDCHAR\nSTARTCHAR U_5032\nENCODING 20530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\n4200\nCFC0\n4A40\n4FC0\n4A40\n4FC0\n4700\n4A80\n7260\nENDCHAR\nSTARTCHAR U_5033\nENCODING 20531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5FC0\nD240\n5FC0\n4240\n7FE0\n4240\n5FC0\n4200\n4600\nENDCHAR\nSTARTCHAR U_5034\nENCODING 20532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FC0\n4500\nCA80\n7760\n4200\n4880\n7FE0\n4880\n4880\n5080\nENDCHAR\nSTARTCHAR U_5035\nENCODING 20533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2EA0\n40A0\n5FE0\nC480\n5480\n5780\n54A0\n54A0\n5EA0\n6060\nENDCHAR\nSTARTCHAR U_5036\nENCODING 20534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F80\n2880\n4F80\nC880\n4F80\n4880\n4F80\n4000\n7FE0\n4480\n4840\nENDCHAR\nSTARTCHAR U_5037\nENCODING 20535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1FE0\n2480\n2840\n77A0\nA000\n2FC0\n2100\n2540\n2920\n3320\nENDCHAR\nSTARTCHAR U_5038\nENCODING 20536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2F00\n5220\nC940\n4200\n5FE0\n4200\n4700\n4A80\n5240\n6220\nENDCHAR\nSTARTCHAR U_5039\nENCODING 20537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2500\n4880\nD740\n6220\n4FC0\n4A40\n4FC0\n4200\n4500\n58C0\nENDCHAR\nSTARTCHAR U_503A\nENCODING 20538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2100\n27C0\n6100\nAFE0\n2440\n2540\n2540\n2280\n2C60\nENDCHAR\nSTARTCHAR U_503B\nENCODING 20539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n5520\nDD40\n5580\n5D40\n5520\n5FA0\n7540\n4500\n4500\nENDCHAR\nSTARTCHAR U_503C\nENCODING 20540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2200\n27C0\n6440\nA7C0\n2440\n2740\n25C0\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_503D\nENCODING 20541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n4500\nC880\n5740\n6220\n5FC0\n4200\n4F80\n4880\n4F80\nENDCHAR\nSTARTCHAR U_503E\nENCODING 20542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1900\n2BE0\n2E20\n6AA0\nAAA0\n2AA0\n2EA0\n2AA0\n2140\n2620\nENDCHAR\nSTARTCHAR U_503F\nENCODING 20543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FC0\n4880\nC500\n5FC0\n4200\n5FE0\n4480\n4980\n4600\n5DC0\nENDCHAR\nSTARTCHAR U_5040\nENCODING 20544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n1FE0\n2480\n2100\n6FC0\nA940\n2940\n3FE0\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_5041\nENCODING 20545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2A20\n2540\n2100\n6FC0\nA940\n2FC0\n2940\n3FE0\n2840\n29C0\nENDCHAR\nSTARTCHAR U_5042\nENCODING 20546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2840\n2480\n5FE0\nC000\n5E20\n52A0\n5EA0\n52A0\n5EA0\n5220\n5660\nENDCHAR\nSTARTCHAR U_5043\nENCODING 20547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2A40\n2BC0\n2A40\n6BC0\nA900\n2FE0\n2A40\n2980\n2A40\n2FE0\nENDCHAR\nSTARTCHAR U_5044\nENCODING 20548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2200\n5FC0\nD540\n5540\n52C0\n4200\n5FE0\n4500\n4880\n7060\nENDCHAR\nSTARTCHAR U_5045\nENCODING 20549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2100\n3FE0\n2940\n6FC0\nA940\n2FC0\n2100\n2FC0\n2100\n3FE0\nENDCHAR\nSTARTCHAR U_5046\nENCODING 20550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2100\n2FE0\n6280\nA440\n2FE0\n3440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_5047\nENCODING 20551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2A20\n2A20\n2EE0\n6800\nAEE0\n28A0\n2EA0\n2840\n28C0\n2920\nENDCHAR\nSTARTCHAR U_5048\nENCODING 20552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2840\n2FC0\n2840\n6FC0\nA400\n2FE0\n3920\n2AA0\n2FA0\n2040\nENDCHAR\nSTARTCHAR U_5049\nENCODING 20553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n17C0\n2240\n2FE0\n6440\nA7C0\n2100\n27E0\n2500\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_504A\nENCODING 20554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1100\n27C0\n2540\n67C0\nA100\n2FE0\n2920\n2FA0\n28A0\n2860\nENDCHAR\nSTARTCHAR U_504B\nENCODING 20555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n2FE0\n2A20\n6940\nAFE0\n2940\n2FE0\n2940\n3240\n2440\nENDCHAR\nSTARTCHAR U_504C\nENCODING 20556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n1FE0\n2480\n2100\n6FE0\nA200\n27C0\n2C40\n3440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_504D\nENCODING 20557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1440\n27C0\n2440\n67C0\nA000\n2FE0\n2500\n25E0\n2B00\n31E0\nENDCHAR\nSTARTCHAR U_504E\nENCODING 20558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2940\n2FC0\n2940\n6FC0\nA000\n3FE0\n2540\n2480\n2640\n2C20\nENDCHAR\nSTARTCHAR U_504F\nENCODING 20559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2820\n2FE0\n6800\nAFE0\n2AA0\n2FE0\n2AA0\n3AA0\n2860\nENDCHAR\nSTARTCHAR U_5050\nENCODING 20560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2FE0\n6440\nA280\n2FE0\n2840\n2B80\n2860\n2B80\n2860\n3380\nENDCHAR\nSTARTCHAR U_5051\nENCODING 20561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FC0\n5140\n5E40\nD440\n5F40\n5540\n5F40\n5440\n5520\n6F20\nENDCHAR\nSTARTCHAR U_5052\nENCODING 20562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1780\n1480\n2780\n2480\n7FE0\nA800\n2FE0\n32A0\n24A0\n2920\n2260\nENDCHAR\nSTARTCHAR U_5053\nENCODING 20563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n2FE0\n2800\n6FE0\nAA40\n2FE0\n2880\n2BE0\n3080\n27E0\nENDCHAR\nSTARTCHAR U_5054\nENCODING 20564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n4EE0\nC000\n4FC0\n4000\n5FE0\n4400\n47C0\n4080\n4300\nENDCHAR\nSTARTCHAR U_5055\nENCODING 20565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2EA0\n28C0\n2AA0\n6C60\nA100\n27E0\n2420\n27E0\n2420\n27E0\nENDCHAR\nSTARTCHAR U_5056\nENCODING 20566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1240\n2FC0\n2280\n7FE0\nA100\n27C0\n3C40\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_5057\nENCODING 20567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n1520\n2940\n3080\n67E0\nBC20\n27E0\n2420\n27E0\n2420\n27E0\nENDCHAR\nSTARTCHAR U_5058\nENCODING 20568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2440\n2440\n67C0\nA000\n2EE0\n2AA0\n2AA0\n2AA0\n2EE0\nENDCHAR\nSTARTCHAR U_5059\nENCODING 20569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FC0\n4880\nC500\n5FE0\n5220\n4FC0\n4A40\n4A40\n4AC0\n4200\nENDCHAR\nSTARTCHAR U_505A\nENCODING 20570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2880\n4880\n7FE0\nC940\n4B40\n5D40\n5540\n5480\n5D40\n4220\nENDCHAR\nSTARTCHAR U_505B\nENCODING 20571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n1700\n2100\n3FE0\n6100\nAD60\n2920\n2D60\n2920\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_505C\nENCODING 20572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n2000\n4FC0\n4840\nDFE0\n5020\n4FC0\n4100\n4100\n4700\nENDCHAR\nSTARTCHAR U_505D\nENCODING 20573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n2EC0\n22A0\n2E60\n67C0\nA440\n27C0\n2440\n27C0\n2440\n24C0\nENDCHAR\nSTARTCHAR U_505E\nENCODING 20574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1540\n1FE0\n2540\n25C0\n6400\nA7E0\n2100\n2FE0\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_505F\nENCODING 20575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1200\n27C0\n2440\n67C0\nA440\n2FE0\n2100\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_5060\nENCODING 20576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n2FE0\n6AA0\nAFE0\n2200\n2FE0\n2240\n2480\n2300\n2CE0\nENDCHAR\nSTARTCHAR U_5061\nENCODING 20577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n2440\n27C0\n6440\nA7C0\n2440\n3FE0\n2540\n2620\n27E0\nENDCHAR\nSTARTCHAR U_5062\nENCODING 20578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2C40\n2540\n3F60\n6540\nA640\n2D40\n3440\n2440\n24A0\n2520\nENDCHAR\nSTARTCHAR U_5063\nENCODING 20579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2440\n2280\n6FE0\nA000\n27C0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_5064\nENCODING 20580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n1280\n2FE0\n2280\n6FE0\nAAA0\n2CE0\n2820\n2FE0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_5065\nENCODING 20581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3BC0\n4940\nCFE0\n5140\n5FE0\n4500\n57E0\n4900\n5500\n63E0\nENDCHAR\nSTARTCHAR U_5066\nENCODING 20582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2240\n2B80\n4E00\nF1E0\n4F80\n4880\n4F80\n4880\n4F80\n4880\nENDCHAR\nSTARTCHAR U_5067\nENCODING 20583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\n4500\nCA80\n7560\n4200\n4D80\n4240\n4580\n4100\n4E00\nENDCHAR\nSTARTCHAR U_5068\nENCODING 20584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n24A0\n56C0\n5480\nD6A0\n5960\n4100\n5FE0\n4580\n4940\n5120\nENDCHAR\nSTARTCHAR U_5069\nENCODING 20585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n1480\n2FE0\n2420\n67E0\nA420\n27E0\n2420\n27E0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_506A\nENCODING 20586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n1000\n27C0\n2440\n67C0\nA000\n2FE0\n2920\n2FE0\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_506B\nENCODING 20587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\n4880\n5480\nCBE0\n5840\n4FE0\n4A40\n4940\n4840\n48C0\nENDCHAR\nSTARTCHAR U_506C\nENCODING 20588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2FE0\n4AA0\n54A0\nCF20\n52A0\n4440\n4240\n5520\n5440\n63C0\nENDCHAR\nSTARTCHAR U_506D\nENCODING 20589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4200\n5FE0\nD4A0\n57A0\n54A0\n57A0\n54A0\n5FE0\n5020\nENDCHAR\nSTARTCHAR U_506E\nENCODING 20590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17C0\n2440\n27C0\n6000\nAFE0\n2440\n27C0\n2440\n2FE0\n2040\nENDCHAR\nSTARTCHAR U_506F\nENCODING 20591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2000\n27C0\n6440\nA7C0\n2320\n2540\n2C80\n2540\n2620\nENDCHAR\nSTARTCHAR U_5070\nENCODING 20592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n3FE0\n48A0\nDEA0\n48A0\n5F60\n4A00\n7FE0\n4500\n4880\n7060\nENDCHAR\nSTARTCHAR U_5071\nENCODING 20593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n1880\n2BE0\n2880\n6BE0\nAA20\n2BE0\n2A20\n2BE0\n2A20\n33E0\nENDCHAR\nSTARTCHAR U_5072\nENCODING 20594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\n2FE0\n6920\nAFE0\n2820\n2200\n2540\n2C20\n3440\n23C0\nENDCHAR\nSTARTCHAR U_5073\nENCODING 20595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1540\n27C0\n2000\n6FE0\nA100\n2FE0\n2AA0\n2AA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_5074\nENCODING 20596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n3E20\n52A0\n5EA0\nD2A0\n5EA0\n52A0\n5EA0\n4420\n4A20\n5160\nENDCHAR\nSTARTCHAR U_5075\nENCODING 20597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n2200\n2FC0\n6840\nAFC0\n2840\n2FC0\n2840\n2FC0\n3860\nENDCHAR\nSTARTCHAR U_5076\nENCODING 20598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1540\n27C0\n2540\n67C0\nA100\n2FE0\n2920\n29A0\n2F20\n2860\nENDCHAR\nSTARTCHAR U_5077\nENCODING 20599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n2480\n5B60\n4000\n5E20\nD2A0\n5EA0\n52A0\n5EA0\n5220\n56E0\nENDCHAR\nSTARTCHAR U_5078\nENCODING 20600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2500\n2880\n7760\nA000\n2EA0\n2AA0\n2F40\n2B40\n2EA0\n2AA0\nENDCHAR\nSTARTCHAR U_5079\nENCODING 20601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\n5440\nDC80\n5380\n5C60\n57C0\n5540\n57C0\n4540\n47C0\nENDCHAR\nSTARTCHAR U_507A\nENCODING 20602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2EC0\n2AA0\n76A0\nA580\n2860\n37C0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_507B\nENCODING 20603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\n2FE0\n2100\n6540\nA920\n2FE0\n2240\n2680\n2140\n2E20\nENDCHAR\nSTARTCHAR U_507C\nENCODING 20604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n4200\nCFC0\n4040\n4FC0\n4040\n4FC0\n5200\n5A00\n67E0\nENDCHAR\nSTARTCHAR U_507D\nENCODING 20605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A00\n2600\n2F80\n2480\n67C0\nA440\n27E0\n2820\n3520\n2AA0\n2060\nENDCHAR\nSTARTCHAR U_507E\nENCODING 20606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2540\n2FE0\n6440\nAFE0\n2820\n2920\n2920\n2280\n2C60\nENDCHAR\nSTARTCHAR U_507F\nENCODING 20607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\n4100\n5FE0\nD020\n4FC0\n4000\n5FE0\n4200\n4440\n4FE0\nENDCHAR\nSTARTCHAR U_5080\nENCODING 20608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FC0\n5240\n5FC0\nD240\n5FC0\n4240\n46A0\n46E0\n4A20\n51E0\nENDCHAR\nSTARTCHAR U_5081\nENCODING 20609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2EC0\n4A40\n4EC0\nCA40\n4FC0\n4200\n4FC0\n4480\n4300\n5CE0\nENDCHAR\nSTARTCHAR U_5082\nENCODING 20610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n5F00\n51C0\n5100\nD7E0\n5520\n57E0\n5500\n65C0\n4940\n5260\nENDCHAR\nSTARTCHAR U_5083\nENCODING 20611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n27C0\n2100\n6FE0\nA280\n2700\n2240\n27A0\n2940\n3320\nENDCHAR\nSTARTCHAR U_5084\nENCODING 20612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n2540\n5480\n4FC0\nD860\n4FC0\n4840\n4FC0\n4840\n4FC0\nENDCHAR\nSTARTCHAR U_5085\nENCODING 20613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n3FE0\n4200\n4FC0\nCA40\n4FC0\n4A40\n7FE0\n4880\n4480\n4180\nENDCHAR\nSTARTCHAR U_5086\nENCODING 20614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n3100\n57C0\n5440\nD7C0\n5440\n57C0\n5100\n5540\n5520\n6B20\nENDCHAR\nSTARTCHAR U_5087\nENCODING 20615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n1FE0\n2240\n2FE0\n6440\nA7C0\n2440\n27C0\n2460\n2FC0\n2040\nENDCHAR\nSTARTCHAR U_5088\nENCODING 20616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n2FE0\n2AA0\n6AA0\nAFE0\n2100\n2FE0\n2540\n2920\n3120\nENDCHAR\nSTARTCHAR U_5089\nENCODING 20617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\n2BC0\n4800\n4FE0\nCA80\n4B60\n4840\n4FE0\n5240\n51C0\nENDCHAR\nSTARTCHAR U_508A\nENCODING 20618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\n4000\n4FE0\nC820\n4FE0\n4820\n4FE0\n4440\n4820\nENDCHAR\nSTARTCHAR U_508B\nENCODING 20619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3FE0\n2480\n2FC0\n6480\nBFE0\n2A40\n2FC0\n2A40\n3FE0\n2840\nENDCHAR\nSTARTCHAR U_508C\nENCODING 20620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2900\n2FC0\n2900\n6FC0\nA900\n2FE0\n2020\n2D20\n2AA0\n32E0\nENDCHAR\nSTARTCHAR U_508D\nENCODING 20621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2280\n6FE0\nA920\n2FE0\n2200\n23E0\n2220\n2420\n28C0\nENDCHAR\nSTARTCHAR U_508E\nENCODING 20622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2440\n27C0\n6440\nA740\n25C0\n2440\n3FE0\n2480\n3860\nENDCHAR\nSTARTCHAR U_508F\nENCODING 20623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4900\n4FC0\nC940\n4FE0\n4940\n4FC0\n5440\n5440\n67C0\nENDCHAR\nSTARTCHAR U_5090\nENCODING 20624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n4000\n4780\nC480\n5FE0\n5020\n57A0\n54A0\n57A0\n5060\nENDCHAR\nSTARTCHAR U_5091\nENCODING 20625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2840\n2DE0\n5540\n5D40\nC7E0\n4840\n5240\n7FE0\n4A80\n5240\n6220\nENDCHAR\nSTARTCHAR U_5092\nENCODING 20626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n3F20\n2940\n2480\n6700\nA240\n2FA0\n2100\n2FE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_5093\nENCODING 20627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4820\n4FE0\nC800\n4EE0\n4A20\n4AA0\n4E60\n52A0\n6660\nENDCHAR\nSTARTCHAR U_5094\nENCODING 20628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n3FE0\n4500\n5FC0\nC540\n7FE0\n4540\n5FC0\n4D80\n5540\n6520\nENDCHAR\nSTARTCHAR U_5095\nENCODING 20629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2AA0\n23E0\n6480\nAFE0\n3480\n27E0\n2480\n2480\n27E0\nENDCHAR\nSTARTCHAR U_5096\nENCODING 20630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2500\n4A80\n5160\nEFC0\n4940\n4FC0\n4800\n4FC0\n5440\n67C0\nENDCHAR\nSTARTCHAR U_5097\nENCODING 20631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n4480\n4F00\nC480\n5FC0\n5240\n5FC0\n5240\n5FC0\n5040\nENDCHAR\nSTARTCHAR U_5098\nENCODING 20632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1B00\nE4E0\n2480\n5540\n2480\n5540\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_5099\nENCODING 20633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FC0\n2480\n3FE0\n6400\nAFE0\n2920\n3FE0\n2920\n2FE0\n2920\nENDCHAR\nSTARTCHAR U_509A\nENCODING 20634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2480\n3FE0\n6AA0\nB1A0\n2AA0\n24A0\n24A0\n2A40\n30A0\n2320\nENDCHAR\nSTARTCHAR U_509B\nENCODING 20635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4820\n4440\nC920\n4280\n4440\n4FE0\n4440\n4440\n47C0\nENDCHAR\nSTARTCHAR U_509C\nENCODING 20636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\n1E20\n2A20\n2540\n6400\nAFC0\n3100\n2FE0\n2100\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_509D\nENCODING 20637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2840\n4FC0\n4840\nCFC0\n4000\n5EE0\n4AA0\n4660\n5BA0\n4660\nENDCHAR\nSTARTCHAR U_509E\nENCODING 20638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n1280\n2FE0\n2100\n67C0\nA100\n3FE0\n2400\n2FC0\n3100\n2FE0\nENDCHAR\nSTARTCHAR U_509F\nENCODING 20639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n2A40\n54A0\n4F80\nC000\n5DC0\n5540\n4CC0\n5540\n4CC0\nENDCHAR\nSTARTCHAR U_50A0\nENCODING 20640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2840\n2440\n3E40\n41E0\n5E40\nC140\n5EC0\n4040\n5E40\n5240\n5EC0\nENDCHAR\nSTARTCHAR U_50A1\nENCODING 20641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2880\n4000\n5DE0\nC000\n5540\n5540\n5540\n4840\n4C80\n73E0\nENDCHAR\nSTARTCHAR U_50A2\nENCODING 20642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n3020\n2FC0\n6440\nAA80\n3500\n2B80\n2540\n2920\n2600\nENDCHAR\nSTARTCHAR U_50A3\nENCODING 20643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n2200\n2FC0\n6400\nBFE0\n2940\n3560\n2380\n2540\n2B20\nENDCHAR\nSTARTCHAR U_50A4\nENCODING 20644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2580\n3F40\n4540\n5FE0\nC900\n5F40\n5540\n5E80\n44A0\n5F60\n4520\nENDCHAR\nSTARTCHAR U_50A5\nENCODING 20645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\n2FE0\n2820\n67C0\nA440\n27C0\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_50A6\nENCODING 20646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2E40\n4A40\n5FE0\nD020\n4FC0\n4840\n4FC0\n4840\n4FC0\n4840\nENDCHAR\nSTARTCHAR U_50A7\nENCODING 20647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n28A0\n2700\n6400\nA7C0\n2480\n2480\n3FE0\n2480\n3860\nENDCHAR\nSTARTCHAR U_50A8\nENCODING 20648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6120\n57C0\n4140\n77E0\nD100\n53C0\n5640\n53C0\n5A40\n5240\n43C0\nENDCHAR\nSTARTCHAR U_50A9\nENCODING 20649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n3D40\n47E0\n5640\nD7E0\n4A40\n4BE0\n5640\n6240\n43E0\n4200\nENDCHAR\nSTARTCHAR U_50AA\nENCODING 20650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FC0\n4000\n48A0\nDDE0\n4200\n4D80\n5260\n4480\n4100\n4E00\nENDCHAR\nSTARTCHAR U_50AB\nENCODING 20651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2940\n4FC0\n4940\nCFC0\n4480\n4340\n5FE0\n4100\n4940\n5720\nENDCHAR\nSTARTCHAR U_50AC\nENCODING 20652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2920\n2FE0\n2500\n6FE0\nA900\n3FC0\n2900\n2FC0\n2900\n2FE0\nENDCHAR\nSTARTCHAR U_50AD\nENCODING 20653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2940\n2BE0\n6940\nAFE0\n2AA0\n2BE0\n2AA0\n2BE0\n32A0\nENDCHAR\nSTARTCHAR U_50AE\nENCODING 20654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n2FE0\n2AA0\n6FE0\nAAA0\n2FE0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_50AF\nENCODING 20655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\n2940\n2B40\n6EC0\nA940\n2FC0\n2540\n2CA0\n3460\n23C0\nENDCHAR\nSTARTCHAR U_50B0\nENCODING 20656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2FE0\n2000\n2EE0\n6AA0\nAEE0\n2AA0\n2EE0\n2AA0\n2AA0\n3760\nENDCHAR\nSTARTCHAR U_50B1\nENCODING 20657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2940\n2940\n32A0\n64A0\nA800\n3A80\n2AE0\n2A80\n2A80\n2D80\n28E0\nENDCHAR\nSTARTCHAR U_50B2\nENCODING 20658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n3F00\n4900\n5FE0\nC940\n7F40\n4940\n5D40\n5480\n6540\n4A20\nENDCHAR\nSTARTCHAR U_50B3\nENCODING 20659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n2A40\n2FC0\n6A40\nBFC0\n2280\n3FE0\n2880\n2480\n2180\nENDCHAR\nSTARTCHAR U_50B4\nENCODING 20660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2BC0\n2A40\n2BC0\n6800\nAEE0\n2AA0\n2AA0\n2EE0\n2800\n2FE0\nENDCHAR\nSTARTCHAR U_50B5\nENCODING 20661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2100\n27C0\n6100\nAFE0\n2440\n27C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_50B6\nENCODING 20662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n3FE0\n5500\n5700\nD520\n5F20\n5540\n5E80\n55A0\n54E0\n6D20\nENDCHAR\nSTARTCHAR U_50B7\nENCODING 20663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\n2C40\n37C0\n6440\nBFE0\n2400\n2FE0\n3520\n2A20\n24C0\nENDCHAR\nSTARTCHAR U_50B8\nENCODING 20664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FC0\n2200\n3740\n6A80\nB740\n2A80\n3740\n2200\n2580\n3860\nENDCHAR\nSTARTCHAR U_50B9\nENCODING 20665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\n4480\n5FE0\nC840\n4FC0\n4840\n4FC0\n4480\n44A0\n58E0\nENDCHAR\nSTARTCHAR U_50BA\nENCODING 20666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n52A0\n5AC0\n6440\n5BA0\nD000\n6FE0\n4100\n4940\n5120\n6720\nENDCHAR\nSTARTCHAR U_50BB\nENCODING 20667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\n2AA0\n2920\n6AA0\nAFE0\n2A40\n37E0\n2C80\n2300\n2CE0\nENDCHAR\nSTARTCHAR U_50BC\nENCODING 20668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3FE0\n4480\n4780\nCFC0\n4A40\n4FC0\n4200\n5FE0\n4480\n5860\nENDCHAR\nSTARTCHAR U_50BD\nENCODING 20669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2280\n2FE0\n6440\nA7C0\n2440\n27C0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_50BE\nENCODING 20670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1080\n2BE0\n2A20\n6FE0\nAA20\n2BE0\n2E20\n2BE0\n3140\n2620\nENDCHAR\nSTARTCHAR U_50BF\nENCODING 20671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n25C0\n2500\n6FE0\nA400\n2FC0\n2800\n2FE0\n2AA0\n3560\nENDCHAR\nSTARTCHAR U_50C0\nENCODING 20672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n7FE0\n5540\nD760\n6000\n5FE0\n5220\n4FC0\n4A40\n4A40\n4AC0\nENDCHAR\nSTARTCHAR U_50C1\nENCODING 20673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FC0\n5240\n4A80\n5FE0\nCA80\n7260\n4000\n4640\n5520\n54A0\n6380\nENDCHAR\nSTARTCHAR U_50C2\nENCODING 20674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n17C0\n2540\n2FE0\n6540\nAFC0\n2940\n3FE0\n2440\n2380\n3E60\nENDCHAR\nSTARTCHAR U_50C3\nENCODING 20675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n3FE0\n5500\nDFE0\n6020\n4FA0\n4AA0\n4FA0\n4AA0\n4FA0\n4AE0\nENDCHAR\nSTARTCHAR U_50C4\nENCODING 20676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n4480\n5FE0\n54A0\nDFE0\n4000\n4FC0\n4000\n5FE0\n4940\n5320\nENDCHAR\nSTARTCHAR U_50C5\nENCODING 20677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n1FE0\n2280\n27C0\n6540\nA540\n2FE0\n2100\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_50C6\nENCODING 20678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n37E0\n2AA0\n23E0\n7AA0\nABE0\n2880\n2BE0\n2880\n3480\n23E0\nENDCHAR\nSTARTCHAR U_50C7\nENCODING 20679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3EE0\n2AA0\n4660\n4AA0\n57A0\nC940\n5620\n4080\n4720\n4040\n4F80\nENDCHAR\nSTARTCHAR U_50C8\nENCODING 20680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1440\n27C0\n2440\n6FE0\nAAA0\n2AA0\n2FE0\n2480\n2300\n3CE0\nENDCHAR\nSTARTCHAR U_50C9\nENCODING 20681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n3180\nDF60\n0000\n7BC0\n4A40\n7BC0\n1080\n2940\nC620\nENDCHAR\nSTARTCHAR U_50CA\nENCODING 20682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n1280\n2FE0\n2AA0\n6FE0\nA200\n3FE0\n2CC0\n35A0\n2440\n23C0\nENDCHAR\nSTARTCHAR U_50CB\nENCODING 20683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n2480\n4A40\n57A0\nC100\n4FC0\n4840\n4FC0\n4840\n4FC0\n5860\nENDCHAR\nSTARTCHAR U_50CC\nENCODING 20684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n3F40\n44E0\n5FA0\nD5A0\n5FA0\n5540\n5F40\n4440\n5EA0\n4520\nENDCHAR\nSTARTCHAR U_50CD\nENCODING 20685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F80\n4480\n7FE0\nD5A0\n5FA0\n55A0\n5FA0\n44A0\n5FA0\n44A0\n5F40\nENDCHAR\nSTARTCHAR U_50CE\nENCODING 20686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2EE0\n4880\nCEE0\n4480\n4FC0\n4480\n5FE0\n4480\n5860\nENDCHAR\nSTARTCHAR U_50CF\nENCODING 20687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n1480\n2FE0\n3520\n67E0\nA220\n2D40\n2280\n2DC0\n22A0\n2D80\nENDCHAR\nSTARTCHAR U_50D0\nENCODING 20688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n3FE0\n2200\n5FC0\nC200\n5FC0\n4A80\n7FE0\n4880\n4880\n4F80\nENDCHAR\nSTARTCHAR U_50D1\nENCODING 20689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2200\n5FE0\n4840\nD7A0\n6480\n5FE0\n5020\n57A0\n54A0\n57E0\nENDCHAR\nSTARTCHAR U_50D2\nENCODING 20690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n28A0\n5FC0\nC480\n7FE0\n5F80\n4800\n5FC0\n6840\n4FC0\nENDCHAR\nSTARTCHAR U_50D3\nENCODING 20691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n17C0\n2540\n67C0\nA000\n3FE0\n2640\n2540\n27C0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_50D4\nENCODING 20692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n1FE0\n2280\n2FE0\n6AA0\nAC60\n2FE0\n2080\n3FE0\n2880\n2580\nENDCHAR\nSTARTCHAR U_50D5\nENCODING 20693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\n26C0\n2FE0\n2280\n6FE0\nA100\n27E0\n2100\n3FE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_50D6\nENCODING 20694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n2200\n3FE0\n6840\nAFC0\n2480\n3FE0\n2840\n2840\n2FC0\nENDCHAR\nSTARTCHAR U_50D7\nENCODING 20695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AA0\n5DC0\n6A80\nD540\n6220\n5FE0\n5220\n4FC0\n4240\n4440\n5980\nENDCHAR\nSTARTCHAR U_50D8\nENCODING 20696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n5580\n4EE0\nDF20\n51A0\n5DA0\n5540\n5D40\n51A0\n5320\nENDCHAR\nSTARTCHAR U_50D9\nENCODING 20697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FC0\n2480\n5FE0\n4100\nCFC0\n4940\n4FC0\n4940\n4FC0\n5860\nENDCHAR\nSTARTCHAR U_50DA\nENCODING 20698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5540\n4F80\nD8C0\n6F80\n4880\n4F80\n4A80\n5240\n6620\nENDCHAR\nSTARTCHAR U_50DB\nENCODING 20699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\n7F80\n52E0\nDF20\n5280\n5E80\n5280\n7F80\n4880\n5540\n6220\nENDCHAR\nSTARTCHAR U_50DC\nENCODING 20700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2D40\n2580\n54A0\n4FC0\nD020\n4FC0\n4840\n4FC0\n4840\n4480\n5FE0\nENDCHAR\nSTARTCHAR U_50DD\nENCODING 20701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n2FE0\n6880\nAFE0\n2880\n2FE0\n2A40\n2FE0\n3240\n26C0\nENDCHAR\nSTARTCHAR U_50DE\nENCODING 20702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\n1F20\n2540\n6F80\nA880\n2FC0\n2840\n2FE0\n2AA0\n2AA0\n3060\nENDCHAR\nSTARTCHAR U_50DF\nENCODING 20703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n29A0\n4FE0\n4540\nCBA0\n5FE0\n4900\n5FE0\n4940\n4CA0\n5160\nENDCHAR\nSTARTCHAR U_50E0\nENCODING 20704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\n1FA0\n2540\n2FE0\n6540\nA920\n2FE0\n2920\n2FE0\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_50E1\nENCODING 20705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n2A40\n4FC0\n4A40\nCFC0\n4240\n5FE0\n4520\n5440\n57C0\nENDCHAR\nSTARTCHAR U_50E2\nENCODING 20706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2F40\n4A80\n5FE0\nD020\n4E40\n52E0\n5D40\n45E0\n4840\n5040\nENDCHAR\nSTARTCHAR U_50E3\nENCODING 20707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n3DE0\n4880\n7DE0\nC880\n5540\n6FE0\n4840\n4FC0\n4840\n4FC0\nENDCHAR\nSTARTCHAR U_50E4\nENCODING 20708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2FE0\n2920\n6FE0\nA920\n2FE0\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_50E5\nENCODING 20709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n17C0\n2100\n6FE0\nA440\n2EE0\n2440\n3FE0\n2480\n24A0\n3860\nENDCHAR\nSTARTCHAR U_50E6\nENCODING 20710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n7EC0\n40A0\n5FE0\nD280\n5E80\n4880\n5C80\n6AA0\n49A0\n5A60\nENDCHAR\nSTARTCHAR U_50E7\nENCODING 20711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n1280\n2FE0\n2D60\n6BA0\nAFE0\n2440\n27C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_50E8\nENCODING 20712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2540\n3FE0\n6440\nAFC0\n2840\n2FC0\n2840\n2FC0\n3860\nENDCHAR\nSTARTCHAR U_50E9\nENCODING 20713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2EE0\n2AA0\n6EE0\nABA0\n2AA0\n2BA0\n2AA0\n2BA0\n2CE0\nENDCHAR\nSTARTCHAR U_50EA\nENCODING 20714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2280\n5FE0\n4540\nC900\n5FE0\n54A0\n5FE0\n54A0\n57A0\n5060\nENDCHAR\nSTARTCHAR U_50EB\nENCODING 20715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2500\n5DC0\n5040\n5DC0\nC500\n5FE0\n4240\n5520\n5440\n47C0\nENDCHAR\nSTARTCHAR U_50EC\nENCODING 20716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\n1480\n27E0\n2C80\n67E0\nA480\n27E0\n2480\n27E0\n2540\n2AA0\nENDCHAR\nSTARTCHAR U_50ED\nENCODING 20717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n4540\n5540\n7FE0\nCCC0\n5560\n6FC0\n4840\n4FC0\n4840\n4FC0\nENDCHAR\nSTARTCHAR U_50EE\nENCODING 20718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1FE0\n2440\n2280\n6FE0\nA540\n27C0\n2540\n2FE0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_50EF\nENCODING 20719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\n2FE0\n2540\n6920\nB540\n2EE0\n2B40\n35E0\n2840\n3040\nENDCHAR\nSTARTCHAR U_50F0\nENCODING 20720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFBE0\nAAA0\n7180\nAAC0\n24A0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_50F1\nENCODING 20721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3FE0\n5020\n5FE0\nD500\n5480\n5FE0\n5480\n57E0\n5480\n67E0\nENDCHAR\nSTARTCHAR U_50F2\nENCODING 20722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n4FE0\n4AA0\nCFE0\n4840\n4DE0\n5540\n6DE0\n4840\n5040\nENDCHAR\nSTARTCHAR U_50F3\nENCODING 20723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n2FE0\n2AA0\n6FE0\nA920\n2540\n3FE0\n2580\n2940\n3120\nENDCHAR\nSTARTCHAR U_50F4\nENCODING 20724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DE0\n5520\n5DE0\n5520\nDFE0\n54A0\n57A0\n54A0\n57A0\n5020\n5060\nENDCHAR\nSTARTCHAR U_50F5\nENCODING 20725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2000\n27C0\n2540\n67C0\nA540\n2FE0\n2540\n27C0\n2540\n2FE0\nENDCHAR\nSTARTCHAR U_50F6\nENCODING 20726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n2EE0\n6280\nAEE0\n2AA0\n2EE0\n2AA0\n2EE0\n2280\n21E0\nENDCHAR\nSTARTCHAR U_50F7\nENCODING 20727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n1FE0\n1280\n2540\n7FE0\nA540\n27E0\n2100\n2FE0\n2540\n2920\nENDCHAR\nSTARTCHAR U_50F8\nENCODING 20728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2EE0\n2440\n6EE0\nB540\n2FC0\n2000\n2FE0\n2580\n2940\n3320\nENDCHAR\nSTARTCHAR U_50F9\nENCODING 20729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n2FE0\n2AA0\n6FE0\nA440\n2740\n25C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_50FA\nENCODING 20730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1440\n27C0\n6000\nAEE0\n2AA0\n2EE0\n2100\n2FE0\n2540\n2920\nENDCHAR\nSTARTCHAR U_50FB\nENCODING 20731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n3FE0\n52A0\n5E40\nD1E0\n5040\n5E40\n5BE0\n6A40\n4E40\n4040\nENDCHAR\nSTARTCHAR U_50FC\nENCODING 20732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n3FC0\n5540\n5FC0\nD540\n7FE0\n5040\n5FC0\n4880\n4500\n5FC0\nENDCHAR\nSTARTCHAR U_50FD\nENCODING 20733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3E40\n2940\n5F60\n4940\nDC40\n6AA0\n4920\n4240\n5520\n54A0\n6380\nENDCHAR\nSTARTCHAR U_50FE\nENCODING 20734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\n2FE0\n2920\n6640\nABE0\n2200\n27E0\n2A40\n2180\n2E60\nENDCHAR\nSTARTCHAR U_50FF\nENCODING 20735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3FE0\n34A0\n2FC0\n6480\nBFE0\n2480\n2A40\n37A0\n2200\n2FE0\nENDCHAR\nSTARTCHAR U_5100\nENCODING 20736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FC0\n4200\n4FC0\nC200\n5FE0\n4940\n5FE0\n6D40\n5AA0\n4860\nENDCHAR\nSTARTCHAR U_5101\nENCODING 20737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n2FC0\n2900\n5FC0\n4900\nCFE0\n4800\n4EE0\n4AA0\n4BA0\n4860\nENDCHAR\nSTARTCHAR U_5102\nENCODING 20738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n4AA0\n4FE0\nCAA0\n5FE0\n5000\n5FE0\n54A0\n5540\n6620\nENDCHAR\nSTARTCHAR U_5103\nENCODING 20739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\n5540\n5740\n5040\nDFC0\n4F80\n4880\n4F80\n4880\n7FE0\nENDCHAR\nSTARTCHAR U_5104\nENCODING 20740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n4480\n5FE0\nC840\n4FC0\n4840\n4FC0\n4540\n54A0\n63A0\nENDCHAR\nSTARTCHAR U_5105\nENCODING 20741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3240\n2A80\n5FE0\n5020\nC780\n4480\n5FE0\n5120\n5FE0\n5120\n5FE0\nENDCHAR\nSTARTCHAR U_5106\nENCODING 20742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\n3F80\n4AE0\n4AA0\nDFA0\n62A0\n5EA0\n56A0\n5E40\n42A0\n4D20\nENDCHAR\nSTARTCHAR U_5107\nENCODING 20743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n2AA0\n3FE0\n6000\nAFC0\n2840\n2FC0\n2540\n2C80\n3660\nENDCHAR\nSTARTCHAR U_5108\nENCODING 20744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1280\n27C0\n3820\n6FE0\nAAA0\n2FE0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_5109\nENCODING 20745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1280\n27C0\n3820\n6EE0\nAAA0\n2AA0\n2EE0\n2440\n2AA0\n3120\nENDCHAR\nSTARTCHAR U_510A\nENCODING 20746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n1FE0\n2440\n2EE0\n7540\nA000\n3FE0\n2520\n25C0\n2B00\n31E0\nENDCHAR\nSTARTCHAR U_510B\nENCODING 20747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n1480\n2FE0\n3AA0\n6FE0\nA800\n2BE0\n2800\n2BE0\n2A20\n33E0\nENDCHAR\nSTARTCHAR U_510C\nENCODING 20748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E80\n5280\n5EE0\n5320\nDEA0\n48A0\n7FA0\n50A0\n5E40\n52A0\n6D20\nENDCHAR\nSTARTCHAR U_510D\nENCODING 20749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2D40\n2AC0\n4D40\nCFC0\n4480\n4A40\n77A0\n4480\n4300\n5CE0\nENDCHAR\nSTARTCHAR U_510E\nENCODING 20750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3FC0\n24A0\n5FE0\nC480\n5FA0\n54A0\n5FC0\n54C0\n7FA0\n4520\nENDCHAR\nSTARTCHAR U_510F\nENCODING 20751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n26E0\n24A0\n4E40\nDAA0\n4440\n5A80\n5FE0\n4700\n4A80\n5260\nENDCHAR\nSTARTCHAR U_5110\nENCODING 20752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2820\n27E0\n6940\nA7C0\n3C40\n27C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_5111\nENCODING 20753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n2FE0\n2820\n6FE0\nA440\n2AA0\n2440\n2EE0\n2440\n2AA0\nENDCHAR\nSTARTCHAR U_5112\nENCODING 20754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n2FE0\n2920\n67C0\nA100\n2FE0\n2100\n2FE0\n2AA0\n2AE0\nENDCHAR\nSTARTCHAR U_5113\nENCODING 20755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FC0\n4200\n4F80\n4880\nFFE0\n64A0\n5FC0\n4200\n5FC0\n4200\n7FE0\nENDCHAR\nSTARTCHAR U_5114\nENCODING 20756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n4200\n5FE0\n4220\nDFC0\n4000\n5FE0\n4040\n5FE0\n5540\n5CC0\nENDCHAR\nSTARTCHAR U_5115\nENCODING 20757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5540\n4A80\nDAC0\n6AA0\n4840\n4FC0\n4840\n4FC0\n5040\nENDCHAR\nSTARTCHAR U_5116\nENCODING 20758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3E80\n34E0\n5E80\n5EC0\nD520\n5E20\n4000\n5FC0\n5540\n5540\n7FE0\nENDCHAR\nSTARTCHAR U_5117\nENCODING 20759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AE0\n2C20\n4AC0\n4E40\nD1E0\n5E40\n6940\n5F60\n4940\n55C0\n6260\nENDCHAR\nSTARTCHAR U_5118\nENCODING 20760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2240\n3FE0\n4240\n4FC0\nC200\n5FE0\n4AA0\n5FC0\n5540\n7FE0\nENDCHAR\nSTARTCHAR U_5119\nENCODING 20761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n67C0\n5540\n5FE0\nC480\n7780\n57C0\n5440\n57C0\n5000\n6FE0\nENDCHAR\nSTARTCHAR U_511A\nENCODING 20762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3FE0\n4480\n5FC0\nD540\n5FE0\n5420\n4F80\n5480\n4300\n5C00\nENDCHAR\nSTARTCHAR U_511B\nENCODING 20763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n2FE0\n3540\n4FE0\nC540\n7FE0\n4840\n5FE0\n6B40\n45E0\n5840\nENDCHAR\nSTARTCHAR U_511C\nENCODING 20764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2AA0\n2540\n6FE0\nAAA0\n3FE0\n2000\n3FE0\n2100\n2700\nENDCHAR\nSTARTCHAR U_511D\nENCODING 20765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n36C0\n2D80\n4480\nCB40\n5FE0\n5220\n4FC0\n4680\n4A40\n5220\nENDCHAR\nSTARTCHAR U_511E\nENCODING 20766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n2A40\n5FE0\nD220\n5B60\n56A0\n5B60\n5B60\n56A0\n5B60\nENDCHAR\nSTARTCHAR U_511F\nENCODING 20767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n3FE0\n34A0\n2480\n6FC0\nA840\n2F40\n2BC0\n2840\n2FC0\n3860\nENDCHAR\nSTARTCHAR U_5120\nENCODING 20768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\n3500\n4A80\n5FC0\nD540\n5FC0\n56C0\n5B40\n56C0\n5240\n5B20\nENDCHAR\nSTARTCHAR U_5121\nENCODING 20769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FC0\n5240\n5FC0\n5240\nDFC0\n4000\n7FE0\n6AA0\n7FE0\n6AA0\n7FE0\nENDCHAR\nSTARTCHAR U_5122\nENCODING 20770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2200\n5FE0\n5220\nD7E0\n5540\n57C0\n5540\n57C0\n6AA0\n53C0\nENDCHAR\nSTARTCHAR U_5123\nENCODING 20771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3FE0\n3280\n57C0\nD280\n5FE0\n5540\n57C0\n5540\n57C0\n6C60\nENDCHAR\nSTARTCHAR U_5124\nENCODING 20772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1440\n27C0\n2440\n6FE0\nA280\n3FE0\n2540\n3BA0\n2540\n3B20\nENDCHAR\nSTARTCHAR U_5125\nENCODING 20773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\n2FE0\n6AA0\nAFE0\n2440\n27C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_5126\nENCODING 20774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5540\n5540\nDFC0\n54A0\n56C0\n54A0\n56E0\n5540\n5AA0\nENDCHAR\nSTARTCHAR U_5127\nENCODING 20775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n1EE0\n2440\n2EE0\n6AA0\nA7C0\n2440\n27C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_5128\nENCODING 20776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2880\n2EE0\n68C0\nB540\n2FC0\n2840\n2FC0\n2840\n2FC0\n3860\nENDCHAR\nSTARTCHAR U_5129\nENCODING 20777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DE0\n5520\n55E0\n5D20\nD5E0\n5D00\n57E0\n5D60\n4AA0\n5520\n62C0\nENDCHAR\nSTARTCHAR U_512A\nENCODING 20778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2440\n27C0\n2440\n6FE0\nB220\n2D40\n37A0\n2480\n2300\n3CE0\nENDCHAR\nSTARTCHAR U_512B\nENCODING 20779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\n4480\nDFE0\n5020\n4FC0\n4200\n4D40\n5380\n4540\n4B20\nENDCHAR\nSTARTCHAR U_512C\nENCODING 20780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BE0\n3E20\n4BE0\nDE20\n4BE0\n7E20\n57E0\n5D40\n5540\n5D40\n5660\nENDCHAR\nSTARTCHAR U_512D\nENCODING 20781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n7F20\n55E0\n4920\nFF20\n49E0\n5D20\n49E0\n5C80\n69A0\n5AE0\nENDCHAR\nSTARTCHAR U_512E\nENCODING 20782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\n2A40\n2FE0\n6940\nABE0\n2D40\n2900\n35E0\n2500\n2FE0\nENDCHAR\nSTARTCHAR U_512F\nENCODING 20783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1540\n1FE0\n2100\n2FE0\n6280\nAFC0\n3920\n2900\n2FE0\n2520\n2AE0\nENDCHAR\nSTARTCHAR U_5130\nENCODING 20784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3FE0\n5480\n4A00\nDF80\n4480\n47C0\n4840\n5FE0\n6AA0\n5560\nENDCHAR\nSTARTCHAR U_5131\nENCODING 20785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n3E80\n2BE0\n3E20\n6AE0\nAE80\n2AE0\n2E80\n2AE0\n2AA0\n36E0\nENDCHAR\nSTARTCHAR U_5132\nENCODING 20786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n3DE0\n40A0\n5DE0\nC080\n5DE0\n4320\n5DE0\n5520\n5DE0\n5520\nENDCHAR\nSTARTCHAR U_5133\nENCODING 20787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2840\n5FC0\n4AA0\nCFE0\n4480\n4FC0\n5940\n4FC0\n4520\n59E0\nENDCHAR\nSTARTCHAR U_5134\nENCODING 20788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5540\nDDC0\n4500\n5FC0\n4500\n5FE0\n4D40\n5480\n4660\nENDCHAR\nSTARTCHAR U_5135\nENCODING 20789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2640\n5980\n5240\nDFE0\n5AA0\n5FE0\n5100\n5FE0\n4540\n4AA0\nENDCHAR\nSTARTCHAR U_5136\nENCODING 20790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2FE0\n4900\nDFE0\n6900\n4FE0\n4900\n5FE0\n54A0\n57A0\n5020\nENDCHAR\nSTARTCHAR U_5137\nENCODING 20791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2000\n2FE0\n2AA0\n6FE0\nAAA0\n2FE0\n2C80\n37E0\n2480\n26E0\nENDCHAR\nSTARTCHAR U_5138\nENCODING 20792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n2FE0\n2940\n75E0\nA940\n37E0\n3D40\n21E0\n2B40\n35E0\nENDCHAR\nSTARTCHAR U_5139\nENCODING 20793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n3540\n2FE0\n6A40\nB7E0\n2440\n27C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_513A\nENCODING 20794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n7F40\n55E0\n4940\nFFE0\n4940\n7FE0\n4940\n7FE0\n5540\n63E0\nENDCHAR\nSTARTCHAR U_513B\nENCODING 20795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A80\n7FE0\n68A0\n5FC0\nD540\n5FC0\n4200\n4FC0\n4200\n5FE0\n52A0\nENDCHAR\nSTARTCHAR U_513C\nENCODING 20796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DE0\n5520\n5FE0\n5280\nDE80\n53E0\n5EA0\n53A0\n5E40\n52A0\n6320\nENDCHAR\nSTARTCHAR U_513D\nENCODING 20797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FC0\n5240\n5FC0\n7240\nDFE0\n6AA0\n5FE0\n4440\n5FA0\n4A80\n7660\nENDCHAR\nSTARTCHAR U_513E\nENCODING 20798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n4A40\nDFE0\n5540\n4FC0\n4480\n5FE0\n4500\n4D80\n5660\nENDCHAR\nSTARTCHAR U_513F\nENCODING 20799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n1100\n1100\n1100\n1100\n1100\n1100\n2120\n4120\n80E0\nENDCHAR\nSTARTCHAR U_5140\nENCODING 20800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\n7FE0\n0900\n0900\n0900\n0900\n0900\n1100\n1120\n2120\n40E0\nENDCHAR\nSTARTCHAR U_5141\nENCODING 20801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0800\n1080\n3FC0\n0940\n0900\n0900\n0900\n1120\n1120\n60E0\nENDCHAR\nSTARTCHAR U_5142\nENCODING 20802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n4400\n4400\nFFE0\n0A00\n0A00\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_5143\nENCODING 20803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n3FC0\n0000\n0000\n7FE0\n0900\n0900\n1100\n1120\n2120\n40E0\nENDCHAR\nSTARTCHAR U_5144\nENCODING 20804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2080\n2080\n3F80\n2A80\n0A00\n0A00\n1220\n2220\n41E0\nENDCHAR\nSTARTCHAR U_5145\nENCODING 20805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n0400\n0880\n3FC0\n0940\n0900\n0900\n1120\n1120\n60E0\nENDCHAR\nSTARTCHAR U_5146\nENCODING 20806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n4920\n2940\n2980\n0900\n19C0\n2920\n4900\n1120\n2120\n40E0\nENDCHAR\nSTARTCHAR U_5147\nENCODING 20807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n2540\n2240\n2540\n2840\n3FC0\n0900\n0900\n1120\n2120\n40E0\nENDCHAR\nSTARTCHAR U_5148\nENCODING 20808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2400\n3FC0\n4400\n8400\nFFE0\n1200\n1200\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_5149\nENCODING 20809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n2480\n0400\nFFE0\n1200\n1200\n1220\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_514A\nENCODING 20810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n1100\n2480\n4840\n9120\n3F80\n0840\n0A00\n1200\n2220\n43E0\nENDCHAR\nSTARTCHAR U_514B\nENCODING 20811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n3F80\n2080\n2080\n3F80\n0A00\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_514C\nENCODING 20812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2100\n4080\nBF40\n2100\n2100\n3F00\n0A00\n1220\n2220\n41E0\nENDCHAR\nSTARTCHAR U_514D\nENCODING 20813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F00\n2200\n7FC0\n2440\n2440\n3FC0\n0A00\n0A20\n1220\n61E0\nENDCHAR\nSTARTCHAR U_514E\nENCODING 20814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n3E00\n0400\n3F80\n2480\n2480\n3FC0\n0A00\n1280\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_514F\nENCODING 20815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4200\n43C0\n4200\n4200\n7FE0\n4500\n4500\n4900\n9120\nA0E0\nENDCHAR\nSTARTCHAR U_5150\nENCODING 20816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\n2440\n27C0\n2000\n0900\n0900\n1120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_5151\nENCODING 20817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n0900\n1F80\n1080\n1080\n1080\n1F80\n0900\n0920\n1120\n60E0\nENDCHAR\nSTARTCHAR U_5152\nENCODING 20818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n33C0\n2040\n39C0\n2040\n3FC0\n2940\n0900\n0920\n1120\n60E0\nENDCHAR\nSTARTCHAR U_5153\nENCODING 20819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\nA280\nA280\nFFE0\n5080\n5180\n5280\n5AA0\n94A0\n8860\nENDCHAR\nSTARTCHAR U_5154\nENCODING 20820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F00\n2200\n7FC0\nA440\n3FC0\n0400\n0A80\n0AA0\n1220\n61E0\nENDCHAR\nSTARTCHAR U_5155\nENCODING 20821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n4A40\n4E40\n4040\n7FC0\n4940\n0900\n0920\n1120\n60E0\nENDCHAR\nSTARTCHAR U_5156\nENCODING 20822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n1080\n2440\n4920\n1080\n1F40\n0900\n0920\n1120\n60E0\nENDCHAR\nSTARTCHAR U_5157\nENCODING 20823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n1080\n2040\n5FA0\n1080\n1F80\n0A00\n0A20\n1220\n61E0\nENDCHAR\nSTARTCHAR U_5158\nENCODING 20824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFA00\n0280\nFA40\n57C0\n5000\n57C0\n5440\n57C0\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_5159\nENCODING 20825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFE80\n1080\n7FE0\n4480\n4480\n7C80\n2880\n28A0\n4820\n87E0\nENDCHAR\nSTARTCHAR U_515A\nENCODING 20826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\n7FE0\n4020\n5FA0\n1080\n1F80\n0A00\n0A20\n1220\n61E0\nENDCHAR\nSTARTCHAR U_515B\nENCODING 20827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\n7F80\n1080\n7C80\n47E0\n4480\n7C80\n2880\n28A0\n4820\n87E0\nENDCHAR\nSTARTCHAR U_515C\nENCODING 20828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n6F60\n4920\n4F20\n4920\n7F60\n4020\n0900\n0920\n1120\n60E0\nENDCHAR\nSTARTCHAR U_515D\nENCODING 20829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\nFD40\n1220\n7C20\n47C0\n4540\n7D40\n2A40\n2CC0\n4820\n87E0\nENDCHAR\nSTARTCHAR U_515E\nENCODING 20830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFB00\n2100\nFFC0\n8900\n8FC0\nF900\n5120\n50C0\n5020\n8FE0\nENDCHAR\nSTARTCHAR U_515F\nENCODING 20831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA280\nA280\nFBE0\n2480\n2480\nFBE0\n5280\n5680\n9AA0\nA4A0\n08E0\nENDCHAR\nSTARTCHAR U_5160\nENCODING 20832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nEEA0\n2AC0\n2E80\n6A80\nAEA0\n2060\n1200\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_5161\nENCODING 20833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF880\n2100\nFBE0\n8A20\n8BE0\nFA20\n53E0\n5000\n5020\n8FE0\nENDCHAR\nSTARTCHAR U_5162\nENCODING 20834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFBE0\n8A20\nFBE0\n5080\n5580\n5AA0\nA2A0\n8C60\nENDCHAR\nSTARTCHAR U_5163\nENCODING 20835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nFC00\n27E0\nF4A0\n97E0\n94A0\nF7E0\n5480\n5BE0\n9020\n0FE0\nENDCHAR\nSTARTCHAR U_5164\nENCODING 20836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA7E0\nAD40\n67E0\nFC80\n57E0\n56A0\n57E0\n5540\n5A20\n8FE0\nENDCHAR\nSTARTCHAR U_5165\nENCODING 20837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\n0400\n0400\n0400\n0A00\n0A00\n1100\n1100\n2080\n4040\n8020\nENDCHAR\nSTARTCHAR U_5166\nENCODING 20838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n8200\n8200\n8200\n8500\n8500\n8880\n9040\nA020\n8000\nFFE0\nENDCHAR\nSTARTCHAR U_5167\nENCODING 20839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\n7FC0\n4440\n4440\n4440\n4A40\n5140\n6140\n4040\n40C0\nENDCHAR\nSTARTCHAR U_5168\nENCODING 20840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1100\n2080\nDF60\n0400\n0400\n1F00\n0400\n0400\n7FC0\nENDCHAR\nSTARTCHAR U_5169\nENCODING 20841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0400\n7FE0\n4420\n6620\n5520\n5520\n6EA0\n4420\n4420\n4460\nENDCHAR\nSTARTCHAR U_516A\nENCODING 20842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n3180\nDF60\n0000\n7940\n4940\n7A80\n4A80\n7940\n4940\nENDCHAR\nSTARTCHAR U_516B\nENCODING 20843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n1200\n1200\n1200\n1100\n1100\n2080\n2080\n4040\n8020\n0000\nENDCHAR\nSTARTCHAR U_516C\nENCODING 20844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n1100\n1080\n2080\n2440\n4420\n8800\n0900\n1080\n3FC0\n1040\nENDCHAR\nSTARTCHAR U_516D\nENCODING 20845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\n0000\nFFE0\n0000\n0000\n1100\n1080\n2040\n4020\n8020\nENDCHAR\nSTARTCHAR U_516E\nENCODING 20846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2080\n5F40\n8820\n0800\n1F80\n0080\n0080\n0080\n0700\nENDCHAR\nSTARTCHAR U_516F\nENCODING 20847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2080\n1100\n1200\nFFC0\n0840\n0840\n0840\n0840\n0980\n0800\nENDCHAR\nSTARTCHAR U_5170\nENCODING 20848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1100\n7FC0\n0000\n0000\n0000\n3F80\n0000\n0000\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_5171\nENCODING 20849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n7FC0\n1100\n1100\n1100\nFFE0\n0000\n1100\n2080\n4040\nENDCHAR\nSTARTCHAR U_5172\nENCODING 20850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n3F00\n0400\n0400\nFFC0\n0000\n1200\n2100\n4080\n8060\nENDCHAR\nSTARTCHAR U_5173\nENCODING 20851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1100\n7FC0\n0400\n0400\nFFC0\n0400\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_5174\nENCODING 20852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0840\n4440\n2480\n2080\n0100\nFFE0\n0000\n1100\n1080\n2040\n4040\nENDCHAR\nSTARTCHAR U_5175\nENCODING 20853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n3E00\n2000\n3FE0\n2100\n2100\n2100\nFFE0\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_5176\nENCODING 20854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1100\n1F00\n1100\n1F00\n1100\nFFE0\n1100\n2080\nC040\nENDCHAR\nSTARTCHAR U_5177\nENCODING 20855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n2080\n3F80\n2080\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_5178\nENCODING 20856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n0A00\n3FC0\n2A40\n3FC0\n2A40\n2A40\nFFE0\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_5179\nENCODING 20857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n1200\nFFE0\n2100\n2100\n4A40\nFBC0\n2100\n2100\n4A40\nFBE0\nENDCHAR\nSTARTCHAR U_517A\nENCODING 20858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n1100\n20C0\nDFA0\n0880\n3280\nC100\n7A40\n4B80\n4A20\n79E0\nENDCHAR\nSTARTCHAR U_517B\nENCODING 20859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n0400\n7FC0\n0800\nFFE0\n1100\n3180\nD160\n1100\n2100\nENDCHAR\nSTARTCHAR U_517C\nENCODING 20860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n1200\n7F80\n1280\nFFE0\n1280\n7F80\n3300\n5280\n9260\nENDCHAR\nSTARTCHAR U_517D\nENCODING 20861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1100\n7FC0\n4440\n7FC0\n4440\nFFE0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_517E\nENCODING 20862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n3F80\n2480\n3F80\n2480\n3F80\n1100\n7FC0\n1100\nFFE0\n2080\nENDCHAR\nSTARTCHAR U_517F\nENCODING 20863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7FC0\n1100\n7BC0\n1140\n7A40\n1F60\n0000\nFFE0\n0900\n3F80\nENDCHAR\nSTARTCHAR U_5180\nENCODING 20864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7B80\n0A20\n7FE0\n2480\n3F80\n2480\n7FC0\n0900\nFFE0\n0900\n70E0\nENDCHAR\nSTARTCHAR U_5181\nENCODING 20865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97E0\n5420\n27E0\nFD40\nA7E0\nFD40\nA7E0\nFDA0\n2540\nF920\n29A0\nENDCHAR\nSTARTCHAR U_5182\nENCODING 20866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n4020\n4020\n4020\n4020\n4020\n4020\n4020\n4020\n40E0\nENDCHAR\nSTARTCHAR U_5183\nENCODING 20867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n4040\n4040\n5F40\n4040\n4040\n5F40\n4040\n4040\n41C0\nENDCHAR\nSTARTCHAR U_5184\nENCODING 20868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n3F80\n2080\n2080\nFFE0\n2080\n2080\nFFE0\n2080\n2080\n2380\nENDCHAR\nSTARTCHAR U_5185\nENCODING 20869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FE0\n4420\n4420\n4620\n4920\n50A0\n4020\n4020\n40E0\nENDCHAR\nSTARTCHAR U_5186\nENCODING 20870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n4440\n4440\n4440\n7FC0\n4040\n4040\n4040\n4040\n41C0\nENDCHAR\nSTARTCHAR U_5187\nENCODING 20871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0800\n1000\n1F80\n3080\n5080\n1080\n1080\n1080\n1180\nENDCHAR\nSTARTCHAR U_5188\nENCODING 20872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n40A0\n48A0\n4520\n4220\n4520\n48A0\n50A0\n4020\n40E0\nENDCHAR\nSTARTCHAR U_5189\nENCODING 20873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n4440\n7FC0\n4440\n4440\nFFE0\n4040\n4040\n41C0\nENDCHAR\nSTARTCHAR U_518A\nENCODING 20874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n4A40\n4A40\nFFE0\n4A40\n4A40\n4A40\n4A40\n4A40\n40C0\nENDCHAR\nSTARTCHAR U_518B\nENCODING 20875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFC0\n8040\n8040\n9E40\n9240\n9240\n9E40\n8040\n8040\n81C0\nENDCHAR\nSTARTCHAR U_518C\nENCODING 20876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n4A40\n4A40\nFFE0\n4A40\n4A40\n4A40\n4A40\n4A40\n9CC0\nENDCHAR\nSTARTCHAR U_518D\nENCODING 20877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n3F80\n2480\n3F80\n2480\n2480\nFFE0\n2080\n2080\n2180\nENDCHAR\nSTARTCHAR U_518E\nENCODING 20878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3E80\n2280\n2280\nFFE0\n8020\n8020\n8020\n8020\n80E0\nENDCHAR\nSTARTCHAR U_518F\nENCODING 20879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n4920\n50A0\n6F60\n4920\n4920\n4920\n4F20\n4020\n4060\nENDCHAR\nSTARTCHAR U_5190\nENCODING 20880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n5F40\n4040\n3F80\n2080\n3F80\n2080\n3F80\n2080\n2180\nENDCHAR\nSTARTCHAR U_5191\nENCODING 20881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4440\n7FC0\n4440\n7FC0\n2080\n2E80\n2080\n2E80\n2180\nENDCHAR\nSTARTCHAR U_5192\nENCODING 20882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\nBFA0\n8020\nBFA0\n2080\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_5193\nENCODING 20883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1100\n7FC0\n1100\nFFE0\n2480\n3F80\n2480\nFFE0\n2080\nENDCHAR\nSTARTCHAR U_5194\nENCODING 20884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n5F40\n4040\n5F40\n0000\nF7C0\n9100\n9FE0\nF100\n0300\nENDCHAR\nSTARTCHAR U_5195\nENCODING 20885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n5F40\n4040\n5F40\n2200\n7F80\nA480\n3FA0\n0A20\nF1E0\nENDCHAR\nSTARTCHAR U_5196\nENCODING 20886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FE0\n4040\n8080\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_5197\nENCODING 20887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FE0\n4020\n9F40\n1100\n1100\n1100\n1100\n2120\n4120\n80E0\nENDCHAR\nSTARTCHAR U_5198\nENCODING 20888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n3FE0\n4440\n0400\n0600\n0600\n0A00\n0A20\n1220\n61E0\nENDCHAR\nSTARTCHAR U_5199\nENCODING 20889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n9040\n1F80\n1000\n1FC0\n0040\n7F40\n0040\n0280\n0100\nENDCHAR\nSTARTCHAR U_519A\nENCODING 20890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FE0\n4020\n8400\n0400\n4440\n4440\n4440\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_519B\nENCODING 20891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n0400\n3FC0\n0800\n1200\n3FC0\n0200\n7FE0\n0200\n0200\nENDCHAR\nSTARTCHAR U_519C\nENCODING 20892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4420\n8C40\n1200\n1240\n3280\n5100\n9480\n1860\n1020\nENDCHAR\nSTARTCHAR U_519D\nENCODING 20893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FE0\n4040\n9F00\n1100\n1F00\n1100\n1F00\n1100\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_519E\nENCODING 20894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\n0400\n2480\n1500\nFFE0\n0E00\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_519F\nENCODING 20895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n8820\n3F80\n2080\n3F80\n2080\n3F80\n4000\n7F80\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_51A0\nENCODING 20896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\n80A0\n7880\n03E0\nFC80\n5280\n5080\n51A0\n5020\n8FE0\nENDCHAR\nSTARTCHAR U_51A1\nENCODING 20897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n9F80\n0000\n7FE0\n0880\n1500\n6A00\n1700\n6AE0\n1600\nENDCHAR\nSTARTCHAR U_51A2\nENCODING 20898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n3F80\n0800\n1640\n6A80\n1700\n6A80\n1240\n6220\n0C00\nENDCHAR\nSTARTCHAR U_51A3\nENCODING 20899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FE0\n8020\n7F80\n2400\n3DC0\n2540\n3C80\n2480\n7D40\n0620\nENDCHAR\nSTARTCHAR U_51A4\nENCODING 20900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8820\n1F00\n2200\n7FC0\nA240\n3FC0\n0A00\n0AA0\n3220\nC1E0\nENDCHAR\nSTARTCHAR U_51A5\nENCODING 20901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\nBFA0\n2080\n3F80\n2080\n3F80\n0400\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_51A6\nENCODING 20902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n8020\n3900\n01C0\nFD00\n2BC0\n2A40\n2980\n2920\n4AA0\n87E0\nENDCHAR\nSTARTCHAR U_51A7\nENCODING 20903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FE0\n4040\n9100\n1100\n7BC0\n1100\n3B80\n5540\n9120\n1100\nENDCHAR\nSTARTCHAR U_51A8\nENCODING 20904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\nBFC0\n0000\n1F80\n1080\n3FC0\n2240\n3FC0\n2240\n3FC0\nENDCHAR\nSTARTCHAR U_51A9\nENCODING 20905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\n3B80\n2080\n3B80\n2080\n3FE0\n4120\n94A0\n2A20\n4A60\nENDCHAR\nSTARTCHAR U_51AA\nENCODING 20906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8A20\nBFA0\n2080\n3F80\n2080\nFFE0\n1500\n7FC0\nA4A0\n2580\nENDCHAR\nSTARTCHAR U_51AB\nENCODING 20907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8000\n4000\n2000\n0000\n1000\n2000\nC000\n4000\n4000\n4000\n4000\nENDCHAR\nSTARTCHAR U_51AC\nENCODING 20908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F00\n3100\n4A00\n0400\n1B00\nE4E0\n0200\n1800\n0400\n0200\nENDCHAR\nSTARTCHAR U_51AD\nENCODING 20909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0A00\n1100\n2080\nCC60\n0300\n1900\n0400\n0200\nENDCHAR\nSTARTCHAR U_51AE\nENCODING 20910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n8F80\n4200\n4200\n0200\n2200\n4200\nC200\n4200\n4200\n5FC0\nENDCHAR\nSTARTCHAR U_51AF\nENCODING 20911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8F80\n4080\n4480\n1480\n2480\n27E0\nC020\n5FA0\n4020\n4020\n00C0\nENDCHAR\nSTARTCHAR U_51B0\nENCODING 20912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n0120\n2D40\n2580\n4580\nC940\n4940\n5120\n4100\n0700\nENDCHAR\nSTARTCHAR U_51B1\nENCODING 20913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2200\n0200\n13C0\n2440\n2440\n4840\nCF80\n4080\n4080\n5FE0\nENDCHAR\nSTARTCHAR U_51B2\nENCODING 20914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n2FE0\n0920\n2920\n2920\nCFE0\n4920\n4100\n4100\n0100\nENDCHAR\nSTARTCHAR U_51B3\nENCODING 20915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n2FC0\n0240\n2240\n2240\n5FE0\nC200\n4500\n4880\n5060\nENDCHAR\nSTARTCHAR U_51B4\nENCODING 20916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n8FE0\n4080\n4480\n1480\n2FE0\n4180\nC280\n4480\n5880\n0100\nENDCHAR\nSTARTCHAR U_51B5\nENCODING 20917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n4840\n4840\n0840\n2FC0\n2500\nC500\n4500\n4520\n4920\n51E0\nENDCHAR\nSTARTCHAR U_51B6\nENCODING 20918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4200\n0440\n2FE0\n2020\n47C0\nC440\n4440\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_51B7\nENCODING 20919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n4200\n0500\n2880\n3260\n4100\n4FC0\n8080\n8700\n8100\n0080\nENDCHAR\nSTARTCHAR U_51B8\nENCODING 20920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n4920\n2520\n2540\n0FE0\n1100\n2100\nDFE0\n4100\n4100\n0100\nENDCHAR\nSTARTCHAR U_51B9\nENCODING 20921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8280\n4240\n4FE0\n0200\n23C0\n2540\n4540\nC880\n4880\n5340\n2420\nENDCHAR\nSTARTCHAR U_51BA\nENCODING 20922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n2FC0\n0900\n0900\n1FE0\n2900\nC880\n4AA0\n4C60\n4820\nENDCHAR\nSTARTCHAR U_51BB\nENCODING 20923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5FE0\n2400\n2500\n0900\n5FE0\nC100\n4540\n4920\n5120\n0300\nENDCHAR\nSTARTCHAR U_51BC\nENCODING 20924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n4500\n27E0\n2900\n0100\n2FE0\nC280\n4280\n42A0\n44A0\n1860\nENDCHAR\nSTARTCHAR U_51BD\nENCODING 20925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9F20\n4420\n46A0\n0AA0\n2AA0\n2AA0\n56A0\nC2A0\n4420\n4820\n50E0\nENDCHAR\nSTARTCHAR U_51BE\nENCODING 20926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n4500\n4880\n1040\n0FA0\n2000\n2FC0\n4840\nC840\n4FC0\n4840\nENDCHAR\nSTARTCHAR U_51BF\nENCODING 20927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n47C0\n2140\n2FE0\n0140\n17C0\n2100\nC7C0\n4100\n4FE0\n0100\nENDCHAR\nSTARTCHAR U_51C0\nENCODING 20928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8400\n4F80\n4900\n1FC0\n2240\n3FE0\n2240\nCFC0\n4200\n4200\n4E00\nENDCHAR\nSTARTCHAR U_51C1\nENCODING 20929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n9FE0\n4200\n4FC0\n1A40\n2A40\n2FC0\nC200\n4700\n4A80\n3260\nENDCHAR\nSTARTCHAR U_51C2\nENCODING 20930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n47C0\n2880\n2FE0\n1920\n2920\n2FE0\nC280\n42A0\n44A0\n5860\nENDCHAR\nSTARTCHAR U_51C3\nENCODING 20931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n4200\n4500\n0880\n3760\n2200\n4F80\nC200\n4A80\n5240\n2620\nENDCHAR\nSTARTCHAR U_51C4\nENCODING 20932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n4FE0\n4240\n0FE0\n0240\n2FC0\n2240\nDFE0\n4480\n4340\n5C20\nENDCHAR\nSTARTCHAR U_51C5\nENCODING 20933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n5220\n5220\n1FE0\n1220\n37A0\n54A0\nD4A0\n57A0\n5020\n5FE0\nENDCHAR\nSTARTCHAR U_51C6\nENCODING 20934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n8900\n4FE0\n5900\n0900\n2FC0\n2900\nCFC0\n4900\n4900\n4FE0\nENDCHAR\nSTARTCHAR U_51C7\nENCODING 20935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8940\n4940\n5D40\n0A20\n1AA0\n2C80\n6900\nC900\n4940\n4BE0\n4A20\nENDCHAR\nSTARTCHAR U_51C8\nENCODING 20936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n5220\n4940\n0FC0\n2140\n3FE0\nC140\n4FC0\n4100\n4100\n4700\nENDCHAR\nSTARTCHAR U_51C9\nENCODING 20937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4FE0\n4000\n07C0\n2440\n2440\n27C0\nC100\n4540\n4920\n5320\nENDCHAR\nSTARTCHAR U_51CA\nENCODING 20938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4FE0\n4100\n07C0\n0100\n2FE0\n2440\nC7C0\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_51CB\nENCODING 20939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4920\n4FE0\n0920\n2FE0\n2820\nCBA0\n4AA0\n4BA0\n5020\n20E0\nENDCHAR\nSTARTCHAR U_51CC\nENCODING 20940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n4FC0\n4200\n3FE0\n2880\n5460\nC780\n4C80\n5300\n4480\n1860\nENDCHAR\nSTARTCHAR U_51CD\nENCODING 20941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4FE0\n4100\n0FE0\n2920\n2FE0\n4920\nCFE0\n4540\n4920\n5120\nENDCHAR\nSTARTCHAR U_51CE\nENCODING 20942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0700\n8880\n5040\n4FA0\n2200\n2200\nDFE0\n5240\n4A80\n4200\n5FE0\nENDCHAR\nSTARTCHAR U_51CF\nENCODING 20943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n80A0\n5FE0\n5080\n1780\n30A0\n57A0\nD5C0\n56A0\n5160\n6220\nENDCHAR\nSTARTCHAR U_51D0\nENCODING 20944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4280\n4FE0\n2AA0\n2AA0\n2FE0\n4100\nC7C0\n4100\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_51D1\nENCODING 20945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4100\n4FC0\n0200\n2FE0\n2840\n37A0\nC100\n5FE0\n4480\n5860\nENDCHAR\nSTARTCHAR U_51D2\nENCODING 20946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n4540\n2540\n27C0\n1000\n2FE0\nC440\n47C0\n4280\n4100\n0FE0\nENDCHAR\nSTARTCHAR U_51D3\nENCODING 20947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n4280\n2FE0\n2AA0\n0FE0\n1100\n2FE0\nC100\n4380\n4540\n1920\nENDCHAR\nSTARTCHAR U_51D4\nENCODING 20948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n4280\n2540\n2920\n07C0\n2440\n27C0\nC440\n4BE0\n4A20\n53E0\nENDCHAR\nSTARTCHAR U_51D5\nENCODING 20949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n4820\n27C0\n2440\n17C0\n2440\nC7C0\n4100\n5FE0\n4280\n0C60\nENDCHAR\nSTARTCHAR U_51D6\nENCODING 20950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2BE0\n0880\n5BE0\nC880\n4BE0\n4880\n0BE0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_51D7\nENCODING 20951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2920\n2FE0\n0900\n2FE0\n2900\nDFC0\n4900\n4FC0\n4900\n4FE0\nENDCHAR\nSTARTCHAR U_51D8\nENCODING 20952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8AE0\n5F80\n4A80\n0EE0\n2AA0\n2EA0\n4AA0\nDFA0\n4AA0\n5120\n6220\nENDCHAR\nSTARTCHAR U_51D9\nENCODING 20953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4AA0\n2FE0\n2100\n0FE0\n2100\n5FE0\nC440\n4FE0\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_51DA\nENCODING 20954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n9FE0\n4480\n4EC0\n15A0\n2FC0\n2000\nDFE0\n4580\n4940\n3320\nENDCHAR\nSTARTCHAR U_51DB\nENCODING 20955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n7FE0\n5540\n1740\n1040\n3FC0\nC000\n7FE0\n4A80\n5240\n6620\nENDCHAR\nSTARTCHAR U_51DC\nENCODING 20956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nBFE0\n5540\n5740\n1040\n3FC0\n4200\nDFE0\n4A80\n5240\n6220\nENDCHAR\nSTARTCHAR U_51DD\nENCODING 20957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n89E0\n4CA0\n4840\n0E40\n29E0\n2E40\n5440\nDF60\n4540\n4B40\n52E0\nENDCHAR\nSTARTCHAR U_51DE\nENCODING 20958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBEE0\n64A0\n24A0\n6EA0\nAAE0\nAE80\nA480\nA4A0\nBEE0\n4A40\n9120\nENDCHAR\nSTARTCHAR U_51DF\nENCODING 20959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n9FE0\n4100\n4FE0\n1AA0\n2FE0\n2440\nC7C0\n4440\n47C0\n4C60\nENDCHAR\nSTARTCHAR U_51E0\nENCODING 20960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n1100\n1100\n1100\n1100\n1100\n1100\n1100\n2120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_51E1\nENCODING 20961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n1100\n1100\n1100\n1900\n1500\n1500\n1100\n2120\n4120\n80E0\nENDCHAR\nSTARTCHAR U_51E2\nENCODING 20962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0800\n1F00\n1100\n1100\n1100\n1100\n1120\n2120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_51E3\nENCODING 20963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n1F00\n1100\n1100\n1100\n1100\n1120\n2120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_51E4\nENCODING 20964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n4080\n5E80\n4280\n5280\n4A80\n4480\n44A0\n4AA0\n5260\n8020\nENDCHAR\nSTARTCHAR U_51E5\nENCODING 20965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4000\n4F00\n4900\n4900\n4900\n4920\n5120\nA0E0\nENDCHAR\nSTARTCHAR U_51E6\nENCODING 20966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2380\n3A80\n4A80\nAA80\n2AA0\n12A0\n14A0\n2860\n4600\n81E0\nENDCHAR\nSTARTCHAR U_51E7\nENCODING 20967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n4440\n5F40\n5540\n5540\n5540\n5540\n5740\n4460\n8420\nENDCHAR\nSTARTCHAR U_51E8\nENCODING 20968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n4080\n5E80\n4080\n7F80\n4880\n4880\n5280\n5EA0\n4060\n8020\nENDCHAR\nSTARTCHAR U_51E9\nENCODING 20969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n4440\n4440\n5F40\n4440\n4E40\n5540\n6540\n4460\n8020\nENDCHAR\nSTARTCHAR U_51EA\nENCODING 20970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n4080\n4480\n4480\n5480\n5680\n5480\n5480\n54A0\nBF60\n8020\nENDCHAR\nSTARTCHAR U_51EB\nENCODING 20971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7F00\n5100\n4B00\n4000\n7FC0\n0040\n3E40\n22A0\n4220\n81E0\nENDCHAR\nSTARTCHAR U_51EC\nENCODING 20972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n4080\n5E80\n4080\n5E80\n5280\n5E80\n5280\n5EA0\n4060\n8020\nENDCHAR\nSTARTCHAR U_51ED\nENCODING 20973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n3F00\n6200\nBFE0\n2200\n2FC0\n0000\n1F00\n1120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_51EE\nENCODING 20974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n4080\n5E80\n4880\n5E80\n5280\n5E80\n5280\n5EA0\n40A0\n8060\nENDCHAR\nSTARTCHAR U_51EF\nENCODING 20975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nABC0\nAA40\nFA40\n0240\nFA40\n0A40\nFA40\n8240\n9240\nA440\nC860\nENDCHAR\nSTARTCHAR U_51F0\nENCODING 20976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n4880\n5E80\n5280\n5E80\n5280\n7F80\n4480\n5FA0\n8460\nBFA0\nENDCHAR\nSTARTCHAR U_51F1\nENCODING 20977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nAA40\nFA40\n0240\nFA40\n0240\nFA40\n8A40\nFA40\n5440\nF860\nENDCHAR\nSTARTCHAR U_51F2\nENCODING 20978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n5240\n7F40\n5440\n7F40\n5540\n7FC0\n5540\n7F40\n9640\n9560\nENDCHAR\nSTARTCHAR U_51F3\nENCODING 20979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A80\n5140\n2E80\nC060\n1F00\n1100\nFFE0\n0000\n1F20\n1120\nE0E0\nENDCHAR\nSTARTCHAR U_51F4\nENCODING 20980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4900\n2FC0\n2900\nCFE0\n5520\n5560\n1F00\n1100\n1120\nE1E0\nENDCHAR\nSTARTCHAR U_51F5\nENCODING 20981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n4020\n4020\n4020\n4020\n4020\n4020\n4020\n4020\nFFE0\n4020\nENDCHAR\nSTARTCHAR U_51F6\nENCODING 20982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n9120\n8A20\n8420\n8620\n8A20\n9120\nA120\n8020\nFFE0\n8020\nENDCHAR\nSTARTCHAR U_51F7\nENCODING 20983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n8420\n8420\n9F20\n8420\n8420\nBFA0\n8020\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_51F8\nENCODING 20984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F00\n0900\n0900\n0900\n79E0\n4020\n4020\n4020\n4020\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_51F9\nENCODING 20985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n79E0\n4920\n4920\n4920\n4F20\n4020\n4020\n4020\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_51FA\nENCODING 20986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n4440\n4440\n7FC0\n0400\n8420\n8420\n8420\n8420\nFFE0\nENDCHAR\nSTARTCHAR U_51FB\nENCODING 20987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n0400\n0400\nFFE0\n0400\n4440\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_51FC\nENCODING 20988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n8420\nB4A0\n9520\n9620\nA520\nC4A0\n9420\n8820\nFFE0\n8020\nENDCHAR\nSTARTCHAR U_51FD\nENCODING 20989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0100\n0200\n2480\n9520\n8E20\n9520\nA4A0\nCCA0\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_51FE\nENCODING 20990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0100\n0200\n3BC0\nAB60\nAAA0\nBB60\n8260\n8A20\n8420\nFFE0\nENDCHAR\nSTARTCHAR U_51FF\nENCODING 20991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n2A80\nFFE0\n1100\n4A40\n5F40\n4440\n5F40\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_5200\nENCODING 20992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n0840\n0840\n0840\n0840\n0840\n1040\n1040\n2040\n4180\nENDCHAR\nSTARTCHAR U_5201\nENCODING 20993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\n7FE0\n0040\n0040\n0240\n0C40\n3040\nC040\n0040\n0040\n0180\nENDCHAR\nSTARTCHAR U_5202\nENCODING 20994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0020\n0020\n0120\n0120\n0120\n0120\n0120\n0020\n0020\n0020\n00E0\nENDCHAR\nSTARTCHAR U_5203\nENCODING 20995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\n7FE0\n0440\n0440\n2440\n2440\n4440\n0840\n1040\n2040\n4380\nENDCHAR\nSTARTCHAR U_5204\nENCODING 20996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0840\n4840\n2840\n1840\n0840\n0C40\n0B40\n10E0\n2140\n4080\nENDCHAR\nSTARTCHAR U_5205\nENCODING 20997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7F00\n1100\n1100\n5140\n9120\n9120\n1120\n2100\n4500\n8200\nENDCHAR\nSTARTCHAR U_5206\nENCODING 20998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2080\n2080\n4040\nBFA0\n0880\n0880\n1080\n2080\nC300\nENDCHAR\nSTARTCHAR U_5207\nENCODING 20999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n2120\n3920\nE120\n2120\n2920\n3220\n2220\n0420\n08C0\nENDCHAR\nSTARTCHAR U_5208\nENCODING 21000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0820\n8920\n4920\n2920\n1120\n1120\n2920\n2520\n4420\n8020\n00E0\nENDCHAR\nSTARTCHAR U_5209\nENCODING 21001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n3EA0\n40A0\n80A0\n3CA0\n08A0\n10A0\n20A0\n4220\n4220\n3EE0\nENDCHAR\nSTARTCHAR U_520A\nENCODING 21002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n1120\n1120\n1120\nFF20\n1120\n1120\n1120\n1020\n1020\n10E0\nENDCHAR\nSTARTCHAR U_520B\nENCODING 21003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0020\n0C20\n7020\n1120\n1120\nFD20\n1120\n1120\n1020\n2020\nC0E0\nENDCHAR\nSTARTCHAR U_520C\nENCODING 21004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0820\n0820\n08A0\nFEA0\n08A0\n48A0\n28A0\n28A0\n0820\n2820\n10E0\nENDCHAR\nSTARTCHAR U_520D\nENCODING 21005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0F80\n1100\n2200\n5FC0\n0040\n0040\n1FC0\n0040\n0040\n3FC0\nENDCHAR\nSTARTCHAR U_520E\nENCODING 21006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n7E20\nAAA0\n2AA0\n2AA0\n4AA0\n92A0\n12A0\n2220\n4A20\n04E0\nENDCHAR\nSTARTCHAR U_520F\nENCODING 21007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4020\n7C20\n80A0\n78A0\n00A0\nF8A0\n08A0\n08A0\n0A20\n0A20\n06E0\nENDCHAR\nSTARTCHAR U_5210\nENCODING 21008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n4420\n64A0\n54A0\n44A0\nFEA0\n44A0\n44A0\n4420\n5420\n88E0\nENDCHAR\nSTARTCHAR U_5211\nENCODING 21009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E20\n2420\n24A0\n24A0\nFEA0\n24A0\n24A0\n24A0\n4420\n4420\n84E0\nENDCHAR\nSTARTCHAR U_5212\nENCODING 21010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2820\n2420\n20A0\nFEA0\n20A0\n24A0\n28A0\n10A0\n3220\n4A20\n86E0\nENDCHAR\nSTARTCHAR U_5213\nENCODING 21011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n00A0\n00A0\nFEA0\n28A0\n28A0\n28A0\n28A0\n4A20\n4C20\n88E0\nENDCHAR\nSTARTCHAR U_5214\nENCODING 21012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\nF820\n2920\n2920\n2920\nFD20\n2120\n2120\n5020\n4820\n84E0\nENDCHAR\nSTARTCHAR U_5215\nENCODING 21013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0840\n0840\n1240\nE180\n0000\nFBE0\n4920\n4920\n4A20\nB4C0\nENDCHAR\nSTARTCHAR U_5216\nENCODING 21014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3E20\n22A0\n22A0\n3EA0\n22A0\n22A0\n3EA0\n22A0\n2220\n4A20\n84E0\nENDCHAR\nSTARTCHAR U_5217\nENCODING 21015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E20\n1020\n1120\n3D20\n2520\n6520\n9920\n0920\n1020\n2020\nC0E0\nENDCHAR\nSTARTCHAR U_5218\nENCODING 21016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n1020\nFEA0\n04A0\n24A0\n18A0\n08A0\n14A0\n2220\n42A0\n8040\nENDCHAR\nSTARTCHAR U_5219\nENCODING 21017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n4540\n4540\n5540\n5540\n5540\n5540\n1140\n2840\n4440\n81C0\nENDCHAR\nSTARTCHAR U_521A\nENCODING 21018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\n82A0\n8AA0\nCAA0\nB2A0\n92A0\nAAA0\nCAA0\n8220\n8A20\n84E0\nENDCHAR\nSTARTCHAR U_521B\nENCODING 21019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n1820\n24A0\n42A0\nBCA0\n24A0\n24A0\n38A0\n2220\n2220\n1E60\nENDCHAR\nSTARTCHAR U_521C\nENCODING 21020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2820\nFEA0\n2AA0\n2AA0\nFEA0\nA8A0\nFEA0\n2AA0\n2E20\n4820\n88E0\nENDCHAR\nSTARTCHAR U_521D\nENCODING 21021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27E0\nF920\n1120\n2120\n6920\nB120\n2920\n2220\n2420\n28C0\nENDCHAR\nSTARTCHAR U_521E\nENCODING 21022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n44A0\n44A0\n7CA0\n44A0\n44A0\n7CA0\n44A0\n4420\n5E20\nE0E0\nENDCHAR\nSTARTCHAR U_521F\nENCODING 21023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E20\n2220\n22A0\n22A0\n4CA0\n80A0\n7EA0\n42A0\n4220\n7E20\n42E0\nENDCHAR\nSTARTCHAR U_5220\nENCODING 21024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE20\nAAA0\nAAA0\nAAA0\nFFA0\nAAA0\nAAA0\nAAA0\nAA20\nAA20\nB6E0\nENDCHAR\nSTARTCHAR U_5221\nENCODING 21025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC20\n8420\n84A0\nFCA0\n90A0\nFEA0\n90A0\n92A0\n8A20\nA620\nC2E0\nENDCHAR\nSTARTCHAR U_5222\nENCODING 21026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n1820\n24A0\n54A0\n90A0\n00A0\n7CA0\n04A0\n2820\n1020\n08E0\nENDCHAR\nSTARTCHAR U_5223\nENCODING 21027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n1020\n20A0\n44A0\nFEA0\n02A0\n7CA0\n44A0\n4420\n4420\n7CE0\nENDCHAR\nSTARTCHAR U_5224\nENCODING 21028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9220\n52A0\n54A0\n10A0\n7CA0\n10A0\nFEA0\n10A0\n1020\n2020\nC0E0\nENDCHAR\nSTARTCHAR U_5225\nENCODING 21029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n4420\n4520\n7D20\n2120\n3D20\n2520\n2520\n2420\n4420\n98E0\nENDCHAR\nSTARTCHAR U_5226\nENCODING 21030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n1020\n7CA0\n10A0\n10A0\nFCA0\n10A0\n20A0\n4420\nFE20\n02E0\nENDCHAR\nSTARTCHAR U_5227\nENCODING 21031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n7920\n1120\n1120\nFD20\n1120\n1120\n2120\n4920\nFD20\n0660\nENDCHAR\nSTARTCHAR U_5228\nENCODING 21032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n3EA0\n42A0\nFAA0\n4AA0\n4AA0\n7AA0\n4CA0\n4020\n4220\n3EE0\nENDCHAR\nSTARTCHAR U_5229\nENCODING 21033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C20\n70A0\n10A0\nFEA0\n10A0\n38A0\n34A0\n52A0\n9020\n1020\n10E0\nENDCHAR\nSTARTCHAR U_522A\nENCODING 21034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\nAAA0\nAAA0\nAAA0\nFFA0\nAAA0\nAAA0\nAAA0\nAA20\nA220\n8EE0\nENDCHAR\nSTARTCHAR U_522B\nENCODING 21035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n4420\n44A0\n7CA0\n10A0\nFEA0\n12A0\n22A0\n2220\n4220\n8CE0\nENDCHAR\nSTARTCHAR U_522C\nENCODING 21036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n2820\nFD20\n2120\n2120\nFD20\n1120\n1D20\n3020\nCA20\n04E0\nENDCHAR\nSTARTCHAR U_522D\nENCODING 21037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC20\n08A0\n10A0\n28A0\n44A0\nFCA0\n10A0\n10A0\n1020\n1C20\nE0E0\nENDCHAR\nSTARTCHAR U_522E\nENCODING 21038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C20\nF020\n1120\n1120\nFD20\n1120\n7D20\n4520\n4420\n7C20\n44E0\nENDCHAR\nSTARTCHAR U_522F\nENCODING 21039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\n0020\n7CA0\n44A0\n44A0\n7CA0\n44A0\n7CA0\n0020\n1E20\nE0E0\nENDCHAR\nSTARTCHAR U_5230\nENCODING 21040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\n1020\n20A0\n44A0\nFEA0\n10A0\n7CA0\n10A0\n1020\n1E20\nE0E0\nENDCHAR\nSTARTCHAR U_5231\nENCODING 21041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57C0\n5140\n5140\nFB40\n5560\n5140\nFD40\n5140\n5240\n5240\n94C0\nENDCHAR\nSTARTCHAR U_5232\nENCODING 21042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n1120\n7D20\n1120\n1120\nFD20\n1120\n7D20\n1020\n1E20\nE0E0\nENDCHAR\nSTARTCHAR U_5233\nENCODING 21043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFE20\n24A0\n42A0\nBDA0\n00A0\nFEA0\n20A0\n7C20\n04A0\n1840\nENDCHAR\nSTARTCHAR U_5234\nENCODING 21044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC20\n2820\n2EA0\n42A0\n4AA0\n94A0\n10A0\nFEA0\n3820\n5420\n92E0\nENDCHAR\nSTARTCHAR U_5235\nENCODING 21045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\n2420\n24A0\n3CA0\n24A0\n3CA0\n24A0\n26A0\nFCA0\n0420\n04E0\nENDCHAR\nSTARTCHAR U_5236\nENCODING 21046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n50A0\n7EA0\n90A0\nFEA0\n10A0\n7EA0\n52A0\n5220\n5620\n10E0\nENDCHAR\nSTARTCHAR U_5237\nENCODING 21047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E20\n4220\n7EA0\n48A0\n48A0\n7EA0\n6AA0\nAAA0\nAAA0\n2E20\n08E0\nENDCHAR\nSTARTCHAR U_5238\nENCODING 21048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2500\n7FC0\n0800\nFFE0\n2080\n5FC0\n8920\n0900\n1100\n2600\nENDCHAR\nSTARTCHAR U_5239\nENCODING 21049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6C20\n1020\n28A0\n54A0\n10A0\nFEA0\n10A0\n54A0\n5220\n9220\n30E0\nENDCHAR\nSTARTCHAR U_523A\nENCODING 21050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFEA0\n10A0\n7EA0\n52A0\n52A0\n56A0\n38A0\n5420\n9220\n1060\nENDCHAR\nSTARTCHAR U_523B\nENCODING 21051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n1020\nFEA0\n24A0\n48A0\nF4A0\n24A0\n48A0\n9820\n2420\nC4E0\nENDCHAR\nSTARTCHAR U_523C\nENCODING 21052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n10A0\n7CA0\n12A0\nFEA0\n12A0\n2120\n2920\n4520\n9EA0\n6440\nENDCHAR\nSTARTCHAR U_523D\nENCODING 21053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1820\n2420\n42A0\nB8A0\n00A0\n00A0\nFEA0\n20A0\n4820\n8C20\nF4E0\nENDCHAR\nSTARTCHAR U_523E\nENCODING 21054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n7C20\n10A0\n54A0\n54A0\n10A0\nFEA0\n10A0\n2820\n2420\nC2E0\nENDCHAR\nSTARTCHAR U_523F\nENCODING 21055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n9220\n92A0\nFEA0\n20A0\n3CA0\n44A0\nC4A0\n2820\n10A0\nE040\nENDCHAR\nSTARTCHAR U_5240\nENCODING 21056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n9220\nFEA0\n02A0\n7CA0\n04A0\n7CA0\n40A0\n4020\n4C20\n70E0\nENDCHAR\nSTARTCHAR U_5241\nENCODING 21057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n4420\n44A0\n44A0\n96A0\n10A0\nFEA0\n10A0\n3820\n5420\n92E0\nENDCHAR\nSTARTCHAR U_5242\nENCODING 21058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n1020\nFEA0\n44A0\n38A0\nC6A0\n24A0\n24A0\n2420\n4420\n84E0\nENDCHAR\nSTARTCHAR U_5243\nENCODING 21059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n28A0\nFEA0\n12A0\nFEA0\n90A0\nFEA0\n12A0\n3220\n5620\n90E0\nENDCHAR\nSTARTCHAR U_5244\nENCODING 21060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\n54A0\nA8A0\nA8A0\n54A0\n00A0\nFEA0\n10A0\n1020\n1E20\nE0E0\nENDCHAR\nSTARTCHAR U_5245\nENCODING 21061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\n0020\n7CA0\n44A0\n44A0\n7CA0\n00A0\n44A0\n2820\n1C20\nE0E0\nENDCHAR\nSTARTCHAR U_5246\nENCODING 21062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n1120\nFD20\n8520\nFD20\n8520\nFD20\n9120\n8820\nB420\nC4E0\nENDCHAR\nSTARTCHAR U_5247\nENCODING 21063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n4520\n4520\n7D20\n4520\n7D20\n4520\n4520\n7C20\n2820\nC6E0\nENDCHAR\nSTARTCHAR U_5248\nENCODING 21064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7820\n4820\n7920\n0120\nFD20\n8520\nFD20\n8520\nFC20\n8420\n8CE0\nENDCHAR\nSTARTCHAR U_5249\nENCODING 21065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n54A0\n54A0\n54A0\nBAA0\n10A0\n10A0\n7EA0\n1020\n1020\nFEE0\nENDCHAR\nSTARTCHAR U_524A\nENCODING 21066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9220\n5420\n10A0\n7CA0\n44A0\n7CA0\n44A0\n7CA0\n4420\n4420\n4CE0\nENDCHAR\nSTARTCHAR U_524B\nENCODING 21067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\nFD40\n1140\n7D40\n4540\n4540\n7D40\n2840\n28C0\n4820\n87E0\nENDCHAR\nSTARTCHAR U_524C\nENCODING 21068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFE20\n10A0\nFEA0\n92A0\nFEA0\n92A0\n18A0\n34A0\n5220\n90E0\nENDCHAR\nSTARTCHAR U_524D\nENCODING 21069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n0900\n7FE0\n0000\n3D40\n2540\n3D40\n2540\n3D40\n2440\n2DC0\nENDCHAR\nSTARTCHAR U_524E\nENCODING 21070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6C20\n10A0\n28A0\n54A0\n14A0\nFEA0\n10A0\n38A0\n5420\n9220\n10E0\nENDCHAR\nSTARTCHAR U_524F\nENCODING 21071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n24A0\n08A0\nFCA0\n2AA0\n2AA0\nFEA0\n28A0\n2920\n4AA0\n8A40\nENDCHAR\nSTARTCHAR U_5250\nENCODING 21072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n4420\n44A0\n7CA0\n10A0\nFEA0\n92A0\n9AA0\nA620\nC220\n86E0\nENDCHAR\nSTARTCHAR U_5251\nENCODING 21073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1820\n2420\n42A0\nBCA0\n00A0\n24A0\n94A0\n54A0\n4820\n1E20\nE060\nENDCHAR\nSTARTCHAR U_5252\nENCODING 21074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2820\n2820\nFEA0\n28A0\nFEA0\n00A0\n7CA0\n44A0\n7CA0\n4420\n7CE0\nENDCHAR\nSTARTCHAR U_5253\nENCODING 21075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n11E0\nFEA0\n32A0\n5920\n92C0\n0000\n7FE0\n0420\n0820\n70C0\nENDCHAR\nSTARTCHAR U_5254\nENCODING 21076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E20\n42A0\n7EA0\n42A0\n7EA0\n20A0\n7EA0\nAAA0\n5220\n2220\nCCE0\nENDCHAR\nSTARTCHAR U_5255\nENCODING 21077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2820\n2820\nEEA0\n28A0\n28A0\nEEA0\n28A0\n28A0\nEEA0\n2820\n28E0\nENDCHAR\nSTARTCHAR U_5256\nENCODING 21078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n10A0\nFEA0\n44A0\n28A0\nFEA0\n00A0\n7CA0\n4420\n4420\n7CE0\nENDCHAR\nSTARTCHAR U_5257\nENCODING 21079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2820\n2420\nFD20\n2920\n1520\nED20\n2920\nFD20\n2920\n1420\nEC60\nENDCHAR\nSTARTCHAR U_5258\nENCODING 21080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\nFE20\n44A0\n7CA0\n44A0\n7CA0\n44A0\nFEA0\n2820\n4420\n8460\nENDCHAR\nSTARTCHAR U_5259\nENCODING 21081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8800\n57C0\nF940\n5140\n5360\n5540\nFD40\n5140\n5140\n5240\n94C0\nENDCHAR\nSTARTCHAR U_525A\nENCODING 21082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFEA0\n54A0\n54A0\nFEA0\n12A0\nFFA0\n12A0\nFEA0\n1020\n30E0\nENDCHAR\nSTARTCHAR U_525B\nENCODING 21083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\nCAA0\nAAA0\n92A0\nFEA0\n92A0\n92A0\nD6A0\nFE20\n8220\n86E0\nENDCHAR\nSTARTCHAR U_525C\nENCODING 21084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n0820\nFEA0\n82A0\n7EA0\n5AA0\nDAA0\n2EA0\n2820\n4A20\n8CE0\nENDCHAR\nSTARTCHAR U_525D\nENCODING 21085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3C20\n44A0\n78A0\n08A0\nFEA0\n92A0\n54A0\n38A0\n5420\n9220\n30E0\nENDCHAR\nSTARTCHAR U_525E\nENCODING 21086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFE20\n28A0\n44A0\nFEA0\n04A0\n74A0\n54A0\n7420\n0420\n1CE0\nENDCHAR\nSTARTCHAR U_525F\nENCODING 21087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE20\nAAA0\n44A0\nAAA0\n91A0\n00A0\nEEA0\nAAA0\n44A0\nAA20\n91E0\nENDCHAR\nSTARTCHAR U_5260\nENCODING 21088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n1040\nFE40\n0040\n7D40\n4540\n7D40\n1140\n5840\n9440\n31C0\nENDCHAR\nSTARTCHAR U_5261\nENCODING 21089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5220\n5220\n94A0\n28A0\nC6A0\n10A0\n52A0\n94A0\n1020\n28A0\nC640\nENDCHAR\nSTARTCHAR U_5262\nENCODING 21090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\n2020\n72A0\n94A0\n28A0\n68A0\nBCA0\n2AA0\nCA20\n2820\n10E0\nENDCHAR\nSTARTCHAR U_5263\nENCODING 21091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n2820\n44A0\nBAA0\n10A0\n7CA0\n54A0\n7CA0\n1020\n2820\nC460\nENDCHAR\nSTARTCHAR U_5264\nENCODING 21092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0820\n7E20\n2420\n18A0\n24A0\n42A0\nBFA0\n22A0\n3E20\n4220\n8260\nENDCHAR\nSTARTCHAR U_5265\nENCODING 21093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC20\n0420\n7CA0\n04A0\nFEA0\n10A0\n54A0\n38A0\n5420\n9220\n30E0\nENDCHAR\nSTARTCHAR U_5266\nENCODING 21094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFE20\n4420\n92A0\n7DA0\n54A0\n7CA0\n54A0\n7C20\n1020\n1C60\nENDCHAR\nSTARTCHAR U_5267\nENCODING 21095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E20\n4220\n7EA0\n48A0\n48A0\n7EA0\n48A0\n7EA0\n6220\nA220\nBEE0\nENDCHAR\nSTARTCHAR U_5268\nENCODING 21096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFE20\n10A0\n7CA0\n10A0\n7CA0\n10A0\nFEA0\n6420\nA420\n3CE0\nENDCHAR\nSTARTCHAR U_5269\nENCODING 21097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0620\n7820\n10A0\nFEA0\n54A0\nD6A0\n54A0\nD6A0\n3820\n5420\n92E0\nENDCHAR\nSTARTCHAR U_526A\nENCODING 21098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n4840\n7A40\n4A40\n7A40\n48C0\n0000\n7FC0\n0840\n7180\nENDCHAR\nSTARTCHAR U_526B\nENCODING 21099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFE20\nA4A0\nFEA0\nA4A0\nBCA0\n80A0\nFEA0\nA420\n9820\nE6E0\nENDCHAR\nSTARTCHAR U_526C\nENCODING 21100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9220\n92A0\nFEA0\n00A0\nFEA0\n10A0\nFEA0\nAAA0\nAA20\nAA20\n86E0\nENDCHAR\nSTARTCHAR U_526D\nENCODING 21101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\n82A0\nFEA0\n80A0\nFEA0\nA4A0\nFEA0\n88A0\nBE20\n8820\nFF60\nENDCHAR\nSTARTCHAR U_526E\nENCODING 21102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n44A0\n74A0\n54A0\nFEA0\n82A0\nBAA0\nAAA0\nAA20\nBA20\n86E0\nENDCHAR\nSTARTCHAR U_526F\nENCODING 21103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\n00A0\n7CA0\n44A0\n7CA0\n00A0\nFEA0\n92A0\nFE20\n9220\nFEE0\nENDCHAR\nSTARTCHAR U_5270\nENCODING 21104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C20\n7020\n10A0\nFEA0\n54A0\nFEA0\n54A0\nFEA0\n3820\n5420\n9260\nENDCHAR\nSTARTCHAR U_5271\nENCODING 21105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n53C0\n8940\n7140\n2340\nFD40\nA940\nFA40\n2240\n5440\n88C0\nENDCHAR\nSTARTCHAR U_5272\nENCODING 21106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFE20\n92A0\n7CA0\n10A0\n7CA0\n10A0\nFEA0\n4420\n4420\n7CE0\nENDCHAR\nSTARTCHAR U_5273\nENCODING 21107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\nFE20\n44A0\n54A0\n28A0\n44A0\nBAA0\n00A0\n7C20\n4420\n7CE0\nENDCHAR\nSTARTCHAR U_5274\nENCODING 21108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9220\n92A0\nFEA0\n00A0\nFEA0\n00A0\n7CA0\n44A0\n7C20\n2820\nFEE0\nENDCHAR\nSTARTCHAR U_5275\nENCODING 21109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n2820\n54A0\nFEA0\n44A0\n7CA0\n44A0\n7CA0\nC420\n4420\n7CE0\nENDCHAR\nSTARTCHAR U_5276\nENCODING 21110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4020\n7E20\n4420\nFCA0\n08A0\nFEA0\n52A0\nA8A0\n5C20\nAA20\n58E0\nENDCHAR\nSTARTCHAR U_5277\nENCODING 21111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFEA0\n44A0\n28A0\n7FA0\n68A0\n7EA0\n48A0\n7E20\n8820\n3EE0\nENDCHAR\nSTARTCHAR U_5278\nENCODING 21112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFEA0\n54A0\n7CA0\n54A0\n7CA0\n54A0\n0AA0\nFE20\n4820\n18E0\nENDCHAR\nSTARTCHAR U_5279\nENCODING 21113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE20\n2220\nAAA0\n36A0\n48A0\n94A0\n6AA0\n12A0\n6420\n0820\nF0E0\nENDCHAR\nSTARTCHAR U_527A\nENCODING 21114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7DE0\n1340\nFD40\n5480\n9340\n3FE0\n2000\n2FE0\n4420\n98C0\nENDCHAR\nSTARTCHAR U_527B\nENCODING 21115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9220\n9220\nFEA0\n00A0\nEEA0\nAAA0\nEEA0\nAAA0\nEEA0\nAA20\nB6E0\nENDCHAR\nSTARTCHAR U_527C\nENCODING 21116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n7CA0\n24A0\nFEA0\n10A0\n28A0\nD6A0\n28A0\n5420\n0820\n70E0\nENDCHAR\nSTARTCHAR U_527D\nENCODING 21117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\n28A0\nFEA0\nAAA0\nFEA0\n00A0\n7CA0\n00A0\nFEA0\n5420\nB360\nENDCHAR\nSTARTCHAR U_527E\nENCODING 21118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\n8020\nBCA0\nA4A0\nBCA0\n80A0\nFEA0\nDAA0\nFE20\n8020\nFEE0\nENDCHAR\nSTARTCHAR U_527F\nENCODING 21119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5420\nA8A0\n54A0\n7CA0\n54A0\n7CA0\n54A0\nFEA0\n2820\n5420\n92E0\nENDCHAR\nSTARTCHAR U_5280\nENCODING 21120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC20\n2820\nFEA0\n2AA0\n48A0\nFEA0\nAAA0\nFEA0\nAA20\nBA20\n86E0\nENDCHAR\nSTARTCHAR U_5281\nENCODING 21121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4820\n7EA0\n48A0\nFEA0\n48A0\n7EA0\n48A0\n7EA0\n0020\n5220\nA960\nENDCHAR\nSTARTCHAR U_5282\nENCODING 21122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF20\nD420\nA4A0\nFFA0\nA0A0\nAAA0\nAAA0\nFAA0\nA620\nA920\n50E0\nENDCHAR\nSTARTCHAR U_5283\nENCODING 21123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n7EA0\n12A0\nFFA0\n12A0\nFFA0\n54A0\n7CA0\n5420\n5420\nFEE0\nENDCHAR\nSTARTCHAR U_5284\nENCODING 21124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4820\n7F20\nAAA0\n10A0\n38A0\n44A0\nBAA0\n00A0\n7EA0\n4220\n7E60\nENDCHAR\nSTARTCHAR U_5285\nENCODING 21125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\nAA20\nFEA0\n40A0\n7EA0\n92A0\n7EA0\n56A0\n7E20\n1220\nFA60\nENDCHAR\nSTARTCHAR U_5286\nENCODING 21126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0820\n7E20\n54A0\n7EA0\n54A0\n7BA0\n54A0\n7EA0\n5420\nB620\nD5E0\nENDCHAR\nSTARTCHAR U_5287\nENCODING 21127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1E20\n1020\nFEA0\n92A0\nBCA0\n92A0\nFEA0\nADA0\nD620\nA520\nD9E0\nENDCHAR\nSTARTCHAR U_5288\nENCODING 21128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n47E0\n7D40\n43E0\n7C80\nA7E0\n3C80\n0080\n7FC0\n0840\n7180\nENDCHAR\nSTARTCHAR U_5289\nENCODING 21129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nDE20\n8A20\nAAA0\nD6A0\n28A0\nFEA0\n10A0\nFEA0\n9220\n5420\nFEE0\nENDCHAR\nSTARTCHAR U_528A\nENCODING 21130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3820\n4420\nBAA0\n00A0\nFEA0\nAAA0\nFEA0\n44A0\n7C20\n4420\n7CE0\nENDCHAR\nSTARTCHAR U_528B\nENCODING 21131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n4420\n7CA0\n00A0\nEEA0\nAAA0\nEEA0\n10A0\nFF20\n5420\n9360\nENDCHAR\nSTARTCHAR U_528C\nENCODING 21132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E20\n2820\n7F20\n0AA0\n7FA0\n44A0\n7DA0\n56A0\n7520\nAB20\n9160\nENDCHAR\nSTARTCHAR U_528D\nENCODING 21133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n2820\n44A0\nBAA0\n00A0\nEEA0\nAAA0\nEEA0\n4420\nAA20\n9160\nENDCHAR\nSTARTCHAR U_528E\nENCODING 21134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n29E0\n44A0\nBAA0\n00A0\nEEA0\nAAA0\nEEA0\n4520\n4520\nAA60\nENDCHAR\nSTARTCHAR U_528F\nENCODING 21135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9220\n5420\nFEA0\n82A0\n7CA0\n44A0\nFEA0\n92A0\nFE20\n9220\nFEE0\nENDCHAR\nSTARTCHAR U_5290\nENCODING 21136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2420\nFF20\n24A0\n7EA0\nC8A0\n7EA0\n48A0\n7EA0\n2420\n1820\n66E0\nENDCHAR\nSTARTCHAR U_5291\nENCODING 21137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFF20\n2AA0\n54A0\n56A0\n95A0\n42A0\n7EA0\n4220\n7E20\n82E0\nENDCHAR\nSTARTCHAR U_5292\nENCODING 21138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n29E0\n46A0\nBAA0\n01A0\nEEA0\nAAA0\nEEA0\n0120\n4520\nAA60\nENDCHAR\nSTARTCHAR U_5293\nENCODING 21139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n7C20\n54A0\n54A0\nFEA0\n92A0\nFEA0\n92A0\nFF20\n2420\nC4E0\nENDCHAR\nSTARTCHAR U_5294\nENCODING 21140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n53C0\n8940\n7540\n0140\nFB40\nA9C0\nF960\n5240\n5240\nAC80\nENDCHAR\nSTARTCHAR U_5295\nENCODING 21141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7620\n44A0\n7FA0\nAAA0\n7EA0\n4AA0\n66A0\n52A0\n7E20\n2420\n4260\nENDCHAR\nSTARTCHAR U_5296\nENCODING 21142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7820\nFE20\n42A0\nFFA0\nADA0\nEAA0\n7EA0\n52A0\n7E20\n2A20\nC7E0\nENDCHAR\nSTARTCHAR U_5297\nENCODING 21143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA420\nFF20\n24A0\nFFA0\n55A0\nFEA0\n42A0\n7EA0\n4220\n7E20\nC3E0\nENDCHAR\nSTARTCHAR U_5298\nENCODING 21144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0420\n7F20\n54A0\n7EA0\n56A0\n5DA0\n76A0\n54A0\n7620\n9420\nF760\nENDCHAR\nSTARTCHAR U_5299\nENCODING 21145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n7C20\n24A0\nFFA0\n66A0\nD5A0\nEEA0\nAAA0\nEE20\n4420\nEEE0\nENDCHAR\nSTARTCHAR U_529A\nENCODING 21146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E20\n42A0\n7EA0\n54A0\n48A0\n7EA0\n56A0\n7EA0\n4A20\nCA20\n34E0\nENDCHAR\nSTARTCHAR U_529B\nENCODING 21147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0400\n7FC0\n0440\n0440\n0840\n0840\n1040\n2040\n4380\nENDCHAR\nSTARTCHAR U_529C\nENCODING 21148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2100\nFD00\n2500\n2500\n2500\n2520\n4520\n4520\n99E0\nENDCHAR\nSTARTCHAR U_529D\nENCODING 21149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n0BE0\n8920\n4920\n3120\n1120\n2920\n4A20\n8420\n08C0\nENDCHAR\nSTARTCHAR U_529E\nENCODING 21150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\n7F80\n0880\n0880\n28C0\n28A0\n50A0\n1080\n2280\n4100\nENDCHAR\nSTARTCHAR U_529F\nENCODING 21151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nF900\n27E0\n2120\n2120\n2120\n3A20\nC220\n0420\n18C0\nENDCHAR\nSTARTCHAR U_52A0\nENCODING 21152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2000\nFDE0\n2520\n2520\n2520\n2520\n2520\n4520\n55E0\n8920\nENDCHAR\nSTARTCHAR U_52A1\nENCODING 21153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F80\n3100\n4A00\n0400\n1B00\nE4E0\n3F80\n0880\n1080\n6300\nENDCHAR\nSTARTCHAR U_52A2\nENCODING 21154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFC80\n2080\n3BE0\n28A0\n28A0\n28A0\n4920\n4920\n8A20\n9460\nENDCHAR\nSTARTCHAR U_52A3\nENCODING 21155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n1280\n2240\n40A0\n0F00\n7200\n1FE0\n0220\n0420\n0820\n70C0\nENDCHAR\nSTARTCHAR U_52A4\nENCODING 21156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1880\n6080\n43E0\n40A0\n7CA0\n48A0\n48A0\n48A0\n4920\n8920\n8A60\nENDCHAR\nSTARTCHAR U_52A5\nENCODING 21157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF900\n03E0\n7120\n5120\n5120\n5520\n5A20\n5420\n88C0\nENDCHAR\nSTARTCHAR U_52A6\nENCODING 21158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FC0\n0440\n0980\n7080\n1080\n7FE0\n14A0\n24A0\n4520\n9AC0\nENDCHAR\nSTARTCHAR U_52A7\nENCODING 21159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n7C80\n1080\n13E0\n7CA0\n10A0\nFCA0\n1120\n1120\n5220\n2460\nENDCHAR\nSTARTCHAR U_52A8\nENCODING 21160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7900\n0100\n03E0\nFD20\n2120\n2120\n4920\nFA20\n0A20\n04C0\nENDCHAR\nSTARTCHAR U_52A9\nENCODING 21161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7900\n4900\n4BE0\n7920\n4920\n7920\n4920\n5E20\nE2A0\n0440\nENDCHAR\nSTARTCHAR U_52AA\nENCODING 21162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7FE0\n2A40\n4980\n3140\n6E20\n0400\n7FC0\n0440\n0840\n7180\nENDCHAR\nSTARTCHAR U_52AB\nENCODING 21163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n7D00\n13E0\n1120\nFD20\n2120\n2920\n4A20\n7A20\n04C0\nENDCHAR\nSTARTCHAR U_52AC\nENCODING 21164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4080\n7C80\n87E0\n74A0\n54A0\n54A0\n54A0\n7520\n0520\n1A60\nENDCHAR\nSTARTCHAR U_52AD\nENCODING 21165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n4900\n4BE0\n4920\n4920\n9920\n0120\nF920\n8920\n8B20\nFCE0\nENDCHAR\nSTARTCHAR U_52AE\nENCODING 21166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n5080\n7C80\n93E0\n10A0\nFEA0\n10A0\n18A0\n2520\n4220\n8460\nENDCHAR\nSTARTCHAR U_52AF\nENCODING 21167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFD00\n27E0\n2120\n4120\n7920\nC920\n4920\n4920\n7A20\n0460\nENDCHAR\nSTARTCHAR U_52B0\nENCODING 21168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4100\nFBE0\n8920\n8920\nF920\n8920\n8A20\nFA20\n04C0\nENDCHAR\nSTARTCHAR U_52B1\nENCODING 21169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n4080\n4080\n7DE0\n50A0\n5CA0\n54A0\n54A0\n5520\nAA20\n4460\nENDCHAR\nSTARTCHAR U_52B2\nENCODING 21170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n0900\n17E0\n2920\n4520\n8120\n7920\n1120\n1220\n3A20\nC460\nENDCHAR\nSTARTCHAR U_52B3\nENCODING 21171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n7FE0\n4040\n0400\n3FC0\n0440\n0840\n1040\n6180\nENDCHAR\nSTARTCHAR U_52B4\nENCODING 21172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\n2440\n2480\n7FE0\n4420\n8400\n7FC0\n0440\n0840\n1040\n6180\nENDCHAR\nSTARTCHAR U_52B5\nENCODING 21173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2500\n7F80\n0800\nFFE0\n2080\n4440\nBFA0\n0880\n1080\n6300\nENDCHAR\nSTARTCHAR U_52B6\nENCODING 21174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C80\n7080\n4080\n7DE0\n40A0\n5CA0\n54A0\n54A0\n5D20\n8220\n04C0\nENDCHAR\nSTARTCHAR U_52B7\nENCODING 21175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2880\nFC80\n13E0\n7CA0\n10A0\nFCA0\n1120\n1120\n2220\nC4C0\nENDCHAR\nSTARTCHAR U_52B8\nENCODING 21176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n7C80\n1080\n13E0\nFCA0\n10A0\n7CA0\n1120\n1120\n1E20\nE4C0\nENDCHAR\nSTARTCHAR U_52B9\nENCODING 21177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1080\nFC80\n4BE0\n44A0\n8AA0\n28A0\n1120\n2920\n4520\n8660\nENDCHAR\nSTARTCHAR U_52BA\nENCODING 21178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n4880\n7C80\n17E0\n50A0\n7CA0\n90A0\n10A0\nFD20\n1120\n1260\nENDCHAR\nSTARTCHAR U_52BB\nENCODING 21179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFC80\n83E0\nFCA0\n90A0\nB8A0\n90A0\nFD20\n8120\nFE20\n04C0\nENDCHAR\nSTARTCHAR U_52BC\nENCODING 21180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFE80\n13E0\n10A0\n7CA0\n00A0\n7CA0\n44A0\n4520\n7E20\n44C0\nENDCHAR\nSTARTCHAR U_52BD\nENCODING 21181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E20\n10A0\n3CA0\n44A0\n28A0\n1420\n6460\n3FC0\n0440\n0840\n3180\nENDCHAR\nSTARTCHAR U_52BE\nENCODING 21182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1080\nFE80\n23E0\n48A0\nF0A0\n14A0\n28A0\n5920\n2620\nC4C0\nENDCHAR\nSTARTCHAR U_52BF\nENCODING 21183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n2140\nFD40\n2240\nED60\n0800\n7FC0\n0840\n1040\nE1C0\nENDCHAR\nSTARTCHAR U_52C0\nENCODING 21184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n23E0\nF8A0\n88A0\n88A0\nF8A0\n50A0\n5520\n5A20\n94C0\nENDCHAR\nSTARTCHAR U_52C1\nENCODING 21185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n5500\nA900\nABE0\n5520\n0120\nFD20\n2120\n2220\n3A20\nCCC0\nENDCHAR\nSTARTCHAR U_52C2\nENCODING 21186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n5100\n7FE0\n9120\nFD20\n0120\n7D20\n4520\n4520\n7E20\n44C0\nENDCHAR\nSTARTCHAR U_52C3\nENCODING 21187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n7C80\n11E0\n7EA0\n84A0\n78A0\n08A0\n10A0\n7D20\n1220\n3460\nENDCHAR\nSTARTCHAR U_52C4\nENCODING 21188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7E80\n8080\n7DE0\n54A0\n54A0\nFEA0\n54A0\n7D20\n0520\n1A60\nENDCHAR\nSTARTCHAR U_52C5\nENCODING 21189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1080\nFE80\n13E0\n7CA0\n54A0\n7CA0\n10A0\n3920\n5520\n1260\nENDCHAR\nSTARTCHAR U_52C6\nENCODING 21190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF900\n8BE0\nF920\n8920\nF920\nA120\nB220\nCA20\n84C0\nENDCHAR\nSTARTCHAR U_52C7\nENCODING 21191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n0900\n3FC0\n2440\n3FC0\n2440\n3FC0\n2440\n7FE0\n0820\n71C0\nENDCHAR\nSTARTCHAR U_52C8\nENCODING 21192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n5100\n2100\nFBE0\nA920\nF920\nA920\nFA20\nAA20\nAA20\nBCC0\nENDCHAR\nSTARTCHAR U_52C9\nENCODING 21193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3880\n4BE0\n7CA0\nD4A0\n54A0\n7D20\n2A20\n2CC0\n4820\n87E0\nENDCHAR\nSTARTCHAR U_52CA\nENCODING 21194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n23C0\nF940\n8940\n8940\nF940\n5240\n5480\n5060\n8FC0\nENDCHAR\nSTARTCHAR U_52CB\nENCODING 21195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8900\nF900\n03E0\nF920\n8920\nA920\nA920\nA120\n5220\n8CC0\nENDCHAR\nSTARTCHAR U_52CC\nENCODING 21196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5500\n1100\n7D00\n13E0\nFD20\n2920\n4520\nB920\n2920\n2220\n3CC0\nENDCHAR\nSTARTCHAR U_52CD\nENCODING 21197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1080\nFDE0\n00A0\n7CA0\n44A0\n7CA0\n10A0\n5920\n9520\n3260\nENDCHAR\nSTARTCHAR U_52CE\nENCODING 21198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7080\n23E0\nFCA0\n48A0\nA4A0\n20A0\nF920\n2120\n3A20\nC4C0\nENDCHAR\nSTARTCHAR U_52CF\nENCODING 21199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1080\nFC80\n4BE0\n50A0\nFCA0\n00A0\n78A0\n4920\n4920\n7A60\nENDCHAR\nSTARTCHAR U_52D0\nENCODING 21200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n0880\n1080\nFFE0\n10A0\n50A0\n20A0\n7CA0\n5520\n5520\nFE60\nENDCHAR\nSTARTCHAR U_52D1\nENCODING 21201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFE80\n5480\n55E0\nBAA0\n10A0\n3920\n3520\n5520\n9220\n1460\nENDCHAR\nSTARTCHAR U_52D2\nENCODING 21202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF900\n5100\n77E0\n2120\nF920\nA920\nF920\n2220\nFA20\n2460\nENDCHAR\nSTARTCHAR U_52D3\nENCODING 21203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9480\nF880\n95E0\nDCA0\n20A0\nFCA0\n84A0\nFCA0\n8520\nFD20\n8660\nENDCHAR\nSTARTCHAR U_52D4\nENCODING 21204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFC80\n2080\nFBE0\nA8A0\nB8A0\nA8A0\nB920\nA920\nFA20\n0460\nENDCHAR\nSTARTCHAR U_52D5\nENCODING 21205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n1080\nFE80\n55E0\n7CA0\n54A0\n7CA0\n10A0\n7D20\n1120\nFE60\nENDCHAR\nSTARTCHAR U_52D6\nENCODING 21206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\n8280\nBBE0\n82A0\nBAA0\n44A0\n7CA0\n44A0\n7CA0\n4520\n7E60\nENDCHAR\nSTARTCHAR U_52D7\nENCODING 21207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2040\n7FC0\n4900\n7BE0\n4920\n7920\n4A20\nFC60\nENDCHAR\nSTARTCHAR U_52D8\nENCODING 21208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nFE80\n2480\n3DE0\n24A0\n3CA0\n24A0\nFEA0\n54A0\n6320\n7E60\nENDCHAR\nSTARTCHAR U_52D9\nENCODING 21209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n53E0\n2640\nF980\n2A40\n3520\n6FE0\nA120\n2120\nA2A0\n6C40\nENDCHAR\nSTARTCHAR U_52DA\nENCODING 21210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5480\nFE80\n5480\n5DE0\n40A0\n7CA0\n44A0\n54A0\n1120\n2920\nC660\nENDCHAR\nSTARTCHAR U_52DB\nENCODING 21211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4880\nFDE0\n84A0\nFCA0\n84A0\nFCA0\n84A0\nFD20\n4A20\n8460\nENDCHAR\nSTARTCHAR U_52DC\nENCODING 21212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n5480\nAA80\n7DE0\n00A0\nEEA0\n22A0\nAAA0\n66A0\nAAA0\n4560\nENDCHAR\nSTARTCHAR U_52DD\nENCODING 21213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF920\n9540\n9FE0\nF200\n9FE0\n9240\nF520\n9FC0\n9240\n9440\nB9C0\nENDCHAR\nSTARTCHAR U_52DE\nENCODING 21214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n5AC0\n5280\n2940\n4620\n7FE0\n4420\n3FC0\n0840\n1040\n6180\nENDCHAR\nSTARTCHAR U_52DF\nENCODING 21215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2480\n2880\nFFE0\n4840\nBFA0\n1080\n6300\nENDCHAR\nSTARTCHAR U_52E0\nENCODING 21216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE80\nAA80\n6680\nABE0\n18A0\nE6A0\n38A0\n04A0\n78A0\n0520\n7A60\nENDCHAR\nSTARTCHAR U_52E1\nENCODING 21217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\n2880\nFE80\nABE0\nFEA0\n00A0\nFEA0\n54A0\n5520\n9520\n2260\nENDCHAR\nSTARTCHAR U_52E2\nENCODING 21218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFC0\n1140\nFF40\n5540\nBAA0\n1420\n7FC0\n0440\n0840\n7180\nENDCHAR\nSTARTCHAR U_52E3\nENCODING 21219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFE80\n11E0\nFCA0\n10A0\nFEA0\n44A0\n7CA0\n4520\n7D20\nC660\nENDCHAR\nSTARTCHAR U_52E4\nENCODING 21220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\nFE80\n2880\n7FE0\n54A0\n54A0\n7CA0\n10A0\n7D20\n1120\nFE60\nENDCHAR\nSTARTCHAR U_52E5\nENCODING 21221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n1440\nFFE0\n8920\nFFE0\n1140\n77E0\n0820\n7FC0\n0840\nF0C0\nENDCHAR\nSTARTCHAR U_52E6\nENCODING 21222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5480\nA880\n5480\n7DE0\n54A0\n7CA0\n54A0\nFEA0\n1920\n5520\n9260\nENDCHAR\nSTARTCHAR U_52E7\nENCODING 21223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7C80\n93E0\n20A0\n7CA0\nD0A0\n7CA0\n50A0\n7D20\n5120\n7E60\nENDCHAR\nSTARTCHAR U_52E8\nENCODING 21224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n9080\n7C80\n55E0\n7CA0\n20A0\nD4A0\n38A0\n5520\nA920\n5A60\nENDCHAR\nSTARTCHAR U_52E9\nENCODING 21225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\nFC80\n4BE0\n78A0\n40A0\n7CA0\n44A0\n7CA0\n4520\n7D20\nC660\nENDCHAR\nSTARTCHAR U_52EA\nENCODING 21226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n1080\nFE80\n45E0\nBAA0\n28A0\nFEA0\n82A0\nBB20\nAB20\nBA60\nENDCHAR\nSTARTCHAR U_52EB\nENCODING 21227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nF480\nABE0\nFCA0\n68A0\nA4A0\nFCA0\nA4A0\nFD20\nA520\nFE60\nENDCHAR\nSTARTCHAR U_52EC\nENCODING 21228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5480\nFE80\n1080\nFFE0\n54A0\nBAA0\n54A0\nFF20\n5520\n9320\n3660\nENDCHAR\nSTARTCHAR U_52ED\nENCODING 21229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFE80\n2880\nFFE0\n54A0\n7CA0\n54A0\n7CA0\n1120\n1D20\nE260\nENDCHAR\nSTARTCHAR U_52EE\nENCODING 21230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C80\n1080\n7FE0\n52A0\n7CA0\n50A0\n7EA0\n6AA0\n5CA0\n6AA0\n9160\nENDCHAR\nSTARTCHAR U_52EF\nENCODING 21231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFC80\n8480\nB5E0\n84A0\nFCA0\n48A0\n78A0\n4920\n4920\nFE60\nENDCHAR\nSTARTCHAR U_52F0\nENCODING 21232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFAA0\n2BE0\n4AA0\n9BE0\n5220\nFCC0\n55A0\n5680\n54A0\nACE0\nENDCHAR\nSTARTCHAR U_52F1\nENCODING 21233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\nFE80\n29E0\n7CA0\n54A0\n7CA0\n54A0\nFEA0\n96A0\nFB20\n8660\nENDCHAR\nSTARTCHAR U_52F2\nENCODING 21234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n1080\nFFE0\n54A0\n7CA0\n54A0\n7D20\n1260\nFC00\n5540\nAAA0\nENDCHAR\nSTARTCHAR U_52F3\nENCODING 21235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n1080\nFE80\nABE0\nFEA0\n10A0\nFCA0\n10A0\nFD20\n5520\nAA60\nENDCHAR\nSTARTCHAR U_52F4\nENCODING 21236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3C80\n2080\nFE80\n8BE0\nFCA0\n94A0\nFCA0\n9520\nFD20\nAA20\n9E40\nENDCHAR\nSTARTCHAR U_52F5\nENCODING 21237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\n9480\nBE80\nABE0\nBEA0\nAAA0\nFEA0\n8AA0\nBEA0\n8320\n8660\nENDCHAR\nSTARTCHAR U_52F6\nENCODING 21238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n5EE0\nAB20\n5EA0\nCA40\n4EC0\n4B20\n0400\n7FC0\n0840\n71C0\nENDCHAR\nSTARTCHAR U_52F7\nENCODING 21239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFE80\nAA80\nEFE0\n28A0\nFCA0\n28A0\nFEA0\n2AA0\nE520\n3A60\nENDCHAR\nSTARTCHAR U_52F8\nENCODING 21240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\n2880\nEE80\nABE0\nEEA0\n48A0\nFEA0\n48A0\n7D20\n4920\n7E60\nENDCHAR\nSTARTCHAR U_52F9\nENCODING 21241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2020\n4020\n0020\n0020\n0020\n0020\n0020\n0020\n01C0\nENDCHAR\nSTARTCHAR U_52FA\nENCODING 21242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FC0\n2040\n4040\n8840\n0440\n0440\n0040\n0040\n0040\n0380\nENDCHAR\nSTARTCHAR U_52FB\nENCODING 21243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2000\n3FC0\n4040\n9E40\n0040\n0040\n3F40\n0040\n0040\n0380\nENDCHAR\nSTARTCHAR U_52FC\nENCODING 21244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n2020\n4820\nBE20\n0A20\n0AA0\n12A0\n21A0\n4020\n00C0\nENDCHAR\nSTARTCHAR U_52FD\nENCODING 21245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4020\n8820\n0820\n0820\n1420\n2220\n4020\n0020\n01C0\nENDCHAR\nSTARTCHAR U_52FE\nENCODING 21246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n1FE0\n2020\n4820\n0820\n1220\n3F20\n0120\n0020\n01C0\nENDCHAR\nSTARTCHAR U_52FF\nENCODING 21247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n1FE0\n2920\n4920\n8920\n1120\n2220\n4420\n0920\n30C0\nENDCHAR\nSTARTCHAR U_5300\nENCODING 21248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3FE0\n2020\n5820\n8620\n0020\n0320\n0C20\n3020\n0020\n01C0\nENDCHAR\nSTARTCHAR U_5301\nENCODING 21249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n1F80\n2280\n5280\n8C80\n0480\n0A80\n1180\n60E0\n0300\nENDCHAR\nSTARTCHAR U_5302\nENCODING 21250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2020\n50A0\n9320\n1C20\n10A0\n0FA0\n0020\n0020\n01C0\nENDCHAR\nSTARTCHAR U_5303\nENCODING 21251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n1220\n2220\n4220\nA520\n28A0\n2060\n3FA0\n0020\n01C0\nENDCHAR\nSTARTCHAR U_5304\nENCODING 21252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4820\n8420\n7FA0\n2020\n2020\n2020\n3F20\n0020\n01C0\nENDCHAR\nSTARTCHAR U_5305\nENCODING 21253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FC0\n4040\n7E40\nA240\n2240\n3E40\n2040\n21A0\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_5306\nENCODING 21254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n1FC0\n2540\n5940\n0D40\n1340\n22C0\n4440\n0840\n1180\nENDCHAR\nSTARTCHAR U_5307\nENCODING 21255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2020\n4820\n8FA0\n08A0\n1520\n0220\n0420\n1820\n01C0\nENDCHAR\nSTARTCHAR U_5308\nENCODING 21256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3FE0\n4020\n9220\n2D20\n2520\n2B20\n2120\n3F20\n0020\n00C0\nENDCHAR\nSTARTCHAR U_5309\nENCODING 21257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3FE0\n4020\n1F20\n24A0\n1520\n7FA0\n0420\n0420\n0420\n00C0\nENDCHAR\nSTARTCHAR U_530A\nENCODING 21258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2420\n64A0\n1520\n7FA0\n0C20\n1620\n25A0\n0420\n00C0\nENDCHAR\nSTARTCHAR U_530B\nENCODING 21259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3FE0\n5020\n1F20\n2420\n7FA0\n0420\n2520\n3F20\n0020\n00C0\nENDCHAR\nSTARTCHAR U_530C\nENCODING 21260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4420\n4A20\n9120\n2EA0\n4060\n1F20\n1120\n1F20\n00C0\nENDCHAR\nSTARTCHAR U_530D\nENCODING 21261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3FE0\n4520\n3FA0\n24A0\n3FA0\n24A0\n3FA0\n24A0\n2520\n00C0\nENDCHAR\nSTARTCHAR U_530E\nENCODING 21262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4820\nBFA0\n1520\n3FA0\n5560\n1F20\n04A0\n07A0\n00C0\nENDCHAR\nSTARTCHAR U_530F\nENCODING 21263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFDE0\n4A20\n87A0\n7AA0\n03A0\nFEA0\n4220\n7A40\n0A20\n73E0\nENDCHAR\nSTARTCHAR U_5310\nENCODING 21264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4020\nBFA0\n1120\n3FA0\n24A0\n3FA0\n24A0\n3FA0\n00C0\nENDCHAR\nSTARTCHAR U_5311\nENCODING 21265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n5020\nBBA0\n28A0\n3BA0\n2A20\n7BA0\n28A0\n4B20\n98C0\nENDCHAR\nSTARTCHAR U_5312\nENCODING 21266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n5120\nBFA0\n1120\n1F20\n60E0\n1F20\n1120\n1F20\n00C0\nENDCHAR\nSTARTCHAR U_5313\nENCODING 21267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2020\n7BA0\nAAA0\n3AE0\n2C20\n3BA0\n22A0\n3940\n2AC0\nENDCHAR\nSTARTCHAR U_5314\nENCODING 21268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n5020\nBBA0\n2AA0\n3BA0\n2820\n7BA0\n2AA0\n4BA0\n10C0\nENDCHAR\nSTARTCHAR U_5315\nENCODING 21269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n1000\n1000\n10C0\n1300\n1C00\n1000\n1000\n1020\n1020\n0FE0\nENDCHAR\nSTARTCHAR U_5316\nENCODING 21270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n2240\n2280\n6300\nA200\n2600\n2A00\n2220\n2220\n21E0\nENDCHAR\nSTARTCHAR U_5317\nENCODING 21271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n1200\nF260\n1380\n1200\n1200\n3200\n5220\n9220\n11E0\nENDCHAR\nSTARTCHAR U_5318\nENCODING 21272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n82A0\n8540\n8A80\nA540\nCFE0\n8820\n8AA0\n8920\n8AA0\nA820\n6FE0\nENDCHAR\nSTARTCHAR U_5319\nENCODING 21273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n4500\n7D20\n4540\n7D80\n0100\nFF20\n5120\n5CE0\nB000\n9FE0\nENDCHAR\nSTARTCHAR U_531A\nENCODING 21274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n4000\n4000\n4000\n4000\n4000\n4000\n4000\n7FE0\n4000\nENDCHAR\nSTARTCHAR U_531B\nENCODING 21275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8000\n8800\n8F80\n9080\nA100\n8200\n8500\n8880\nB040\nFFE0\nENDCHAR\nSTARTCHAR U_531C\nENCODING 21276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4200\n4A00\n4B80\n4E80\n7A80\n4A80\n4840\n47C0\n4000\n7FE0\nENDCHAR\nSTARTCHAR U_531D\nENCODING 21277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n4200\n5FC0\n5240\n5240\n5240\n52C0\n4200\n4200\n7FE0\nENDCHAR\nSTARTCHAR U_531E\nENCODING 21278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8000\n9F80\n8200\n8200\n8200\n8200\nBFC0\n8000\n8000\nFFE0\nENDCHAR\nSTARTCHAR U_531F\nENCODING 21279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4400\n4200\n7FC0\n4000\n4F00\n4940\n4940\n50C0\n4000\n7FE0\nENDCHAR\nSTARTCHAR U_5320\nENCODING 21280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4080\n4F00\n4800\n4FE0\n4900\n4900\n4900\n5100\n6100\n7FE0\nENDCHAR\nSTARTCHAR U_5321\nENCODING 21281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8000\nBF80\n8400\n8400\n9F00\n8400\n8400\nBF80\n8000\nFFE0\nENDCHAR\nSTARTCHAR U_5322\nENCODING 21282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4800\n5FC0\n6540\n4540\n4940\n5240\n4440\n4980\n4000\n7FE0\nENDCHAR\nSTARTCHAR U_5323\nENCODING 21283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n5FC0\n5240\n5FC0\n5240\n5FC0\n4200\n4200\n4200\n7FE0\nENDCHAR\nSTARTCHAR U_5324\nENCODING 21284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8000\nBFC0\n8400\n8400\n9F80\n8500\n8480\nBFC0\n8000\nFFE0\nENDCHAR\nSTARTCHAR U_5325\nENCODING 21285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8800\n9100\nBF80\n8080\n9100\nFFC0\n9100\n9100\nA100\nFFE0\nENDCHAR\nSTARTCHAR U_5326\nENCODING 21286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9100\nF900\n93C0\nA940\nFD40\n8940\nFD40\n8960\n8A40\nFFE0\nENDCHAR\nSTARTCHAR U_5327\nENCODING 21287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8400\nBFC0\n9480\n9480\nAD40\nC520\n8A00\n9100\nA0C0\nFFE0\nENDCHAR\nSTARTCHAR U_5328\nENCODING 21288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA880\nA880\nB880\n8BE0\nF880\nA880\nA880\nCBE0\n8800\nFFE0\nENDCHAR\nSTARTCHAR U_5329\nENCODING 21289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8200\n9240\n9FC0\n8200\nBFE0\n8000\n8200\n9FC0\n8200\nFFE0\nENDCHAR\nSTARTCHAR U_532A\nENCODING 21290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n4500\n7DE0\n4500\n5DC0\n4500\n7DE0\n4500\n4500\n7FE0\nENDCHAR\nSTARTCHAR U_532B\nENCODING 21291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8800\n9FC0\nA940\n9240\nA540\nBFC0\nA040\nBFC0\nA040\nFFE0\nENDCHAR\nSTARTCHAR U_532C\nENCODING 21292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8400\n8A00\n9180\nEF60\nBC40\nA540\nBD40\nA540\nA4C0\nFFE0\nENDCHAR\nSTARTCHAR U_532D\nENCODING 21293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA200\nFA00\nA780\nFA80\nAA80\nFAA0\nAAA0\nFE60\nA400\nFFE0\nENDCHAR\nSTARTCHAR U_532E\nENCODING 21294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4200\n4F80\n4A80\n7FE0\n4000\n5FC0\n5240\n5540\n4880\n7FE0\nENDCHAR\nSTARTCHAR U_532F\nENCODING 21295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA500\n97C0\nC500\nAFC0\n9500\nE7C0\nA500\nA7E0\nA400\nFFE0\nENDCHAR\nSTARTCHAR U_5330\nENCODING 21296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5540\n5DC0\n4000\n5FC0\n5240\n5FC0\n5240\n7FE0\n4200\n7FE0\nENDCHAR\nSTARTCHAR U_5331\nENCODING 21297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8400\n9F00\n9500\nFFE0\n9080\n9F80\n9080\n9F80\nB0C0\nFFE0\nENDCHAR\nSTARTCHAR U_5332\nENCODING 21298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8400\nBFC0\n8900\n9F80\nE960\n8F00\nBDC0\nA540\nBDC0\nFFE0\nENDCHAR\nSTARTCHAR U_5333\nENCODING 21299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8400\n8A00\n9180\nEE60\nBB80\nAA80\nBB80\n9100\nAA80\nFFE0\nENDCHAR\nSTARTCHAR U_5334\nENCODING 21300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA100\nBDE0\nCA40\n9FC0\n9040\n9FC0\n8480\nBFE0\n8880\nFFE0\nENDCHAR\nSTARTCHAR U_5335\nENCODING 21301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8400\nBFC0\n8400\nBF80\nAA80\nBF80\n9500\n9F00\nA080\nFFE0\nENDCHAR\nSTARTCHAR U_5336\nENCODING 21302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9100\nFFC0\n9500\nBF80\nD400\n9F80\nA080\nBB80\nA080\nFFE0\nENDCHAR\nSTARTCHAR U_5337\nENCODING 21303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nAA40\nBBC0\nAA40\nBBC0\n9400\nBFC0\nE200\nBFC0\nA200\nFFE0\nENDCHAR\nSTARTCHAR U_5338\nENCODING 21304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n2000\n2000\n2000\n2000\n2000\n2000\n2000\n2000\n3FE0\nENDCHAR\nSTARTCHAR U_5339\nENCODING 21305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4900\n4900\n4900\n4900\n4920\n5120\n50E0\n6000\n4000\n7FE0\nENDCHAR\nSTARTCHAR U_533A\nENCODING 21306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4000\n5080\n4880\n4500\n4200\n4500\n4880\n5080\n4000\n7FE0\nENDCHAR\nSTARTCHAR U_533B\nENCODING 21307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4800\n4800\n4FC0\n5200\n7FE0\n4200\n4500\n4880\n5040\n7FE0\nENDCHAR\nSTARTCHAR U_533C\nENCODING 21308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4200\n4500\n4880\n7760\n4000\n4F80\n4880\n4F80\n4000\n7FE0\nENDCHAR\nSTARTCHAR U_533D\nENCODING 21309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4880\n4F80\n4880\n4F80\n4200\n7FC0\n4900\n4700\n4C80\n7FE0\nENDCHAR\nSTARTCHAR U_533E\nENCODING 21310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8400\nBF80\nA080\nBF80\nA000\nBFC0\nB540\nDFC0\n9540\nFFE0\nENDCHAR\nSTARTCHAR U_533F\nENCODING 21311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4900\n7FC0\n4900\n7FE0\n4400\n4F80\n5880\n6F80\n4000\n7FE0\nENDCHAR\nSTARTCHAR U_5340\nENCODING 21312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8880\n8880\n8F80\n8000\nBDE0\nA520\nA520\nBDE0\n8000\nFFE0\nENDCHAR\nSTARTCHAR U_5341\nENCODING 21313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0400\n0400\nFFE0\n0400\n0400\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_5342\nENCODING 21314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF00\n1100\n1100\n1100\nFF00\n1100\n1100\n10A0\n10A0\n1060\n1020\nENDCHAR\nSTARTCHAR U_5343\nENCODING 21315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\n7C00\n0400\n0400\nFFE0\n0400\n0400\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_5344\nENCODING 21316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n1100\n1100\nFFE0\n1100\n1100\n1100\n1100\n1100\n1100\nENDCHAR\nSTARTCHAR U_5345\nENCODING 21317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2440\n2440\n2440\nFFE0\n2440\n2440\n2440\n2440\n4440\n8040\nENDCHAR\nSTARTCHAR U_5346\nENCODING 21318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7F00\n1120\n2120\n44E0\n8400\n0400\nFFE0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_5347\nENCODING 21319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0680\n3880\n0880\n0880\n0880\n7FE0\n0880\n0880\n1080\n2080\n4080\nENDCHAR\nSTARTCHAR U_5348\nENCODING 21320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FC0\n2200\n4200\n0200\n7FE0\n0200\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_5349\nENCODING 21321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n0200\n1280\n1280\n1080\nFFE0\n1080\n1080\n2080\n4080\nENDCHAR\nSTARTCHAR U_534A\nENCODING 21322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n2480\n1500\n7FC0\n0400\n0400\nFFE0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_534B\nENCODING 21323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n0400\n2480\n2080\nFFE0\n2080\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_534C\nENCODING 21324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2A80\n2A80\n2A80\nFFE0\n2A80\n2A80\n2A80\n2A80\n2A80\n2080\nENDCHAR\nSTARTCHAR U_534D\nENCODING 21325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n0440\n0440\n0440\n0440\n7FC0\n4400\n4400\n4400\n4400\n47E0\nENDCHAR\nSTARTCHAR U_534E\nENCODING 21326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n2280\n6300\nAE20\n2220\n21E0\n0400\nFFE0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_534F\nENCODING 21327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\n4F80\nE280\n4280\n4AC0\n52A0\n4480\n4480\n4A80\n5100\nENDCHAR\nSTARTCHAR U_5350\nENCODING 21328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n4200\n4200\n4200\n4200\n7FE0\n0220\n0220\n0220\n0220\nFE20\nENDCHAR\nSTARTCHAR U_5351\nENCODING 21329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FC0\n2240\n3FC0\n2240\n3FC0\n0A00\n7FE0\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_5352\nENCODING 21330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\n1100\n2A80\n4440\n0400\nFFE0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_5353\nENCODING 21331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n07C0\n0400\n3F80\n2080\n3F80\n2080\n3F80\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_5354\nENCODING 21332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\n2240\nFA40\n2480\n2480\n3FE0\n2AA0\n2AA0\n3320\n2440\nENDCHAR\nSTARTCHAR U_5355\nENCODING 21333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n0A00\n7FC0\n4440\n7FC0\n4440\n7FC0\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_5356\nENCODING 21334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\nFFE0\n1040\n2A80\n1200\nFFE0\n0200\n0D80\n7040\nENDCHAR\nSTARTCHAR U_5357\nENCODING 21335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n5140\n4A40\n7FC0\n4440\n7FC0\n4440\n44C0\nENDCHAR\nSTARTCHAR U_5358\nENCODING 21336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\n2480\n3F80\n2480\n3F80\n2480\n3F80\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_5359\nENCODING 21337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nFE80\n2480\n3C80\n27E0\n3C80\n2480\nFE80\n5480\n6280\n7E80\nENDCHAR\nSTARTCHAR U_535A\nENCODING 21338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n5FE0\n4200\nEFC0\n4A40\n4FC0\n4A40\n7FE0\n4880\n4480\n4180\nENDCHAR\nSTARTCHAR U_535B\nENCODING 21339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n4EA0\nF1E0\n4E80\nF1E0\n0E00\nAAA0\nAEA0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_535C\nENCODING 21340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\n0800\n0C00\n0A00\n0900\n08C0\n0840\n0800\n0800\n0800\nENDCHAR\nSTARTCHAR U_535D\nENCODING 21341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n1200\n1200\n1200\nF3E0\n1200\n1200\n1200\n1200\n1200\nENDCHAR\nSTARTCHAR U_535E\nENCODING 21342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n7FE0\n0400\n0400\n0700\n04C0\n0440\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_535F\nENCODING 21343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\n7900\n4900\n4980\n4960\n4920\n7900\n4900\n0100\n0100\nENDCHAR\nSTARTCHAR U_5360\nENCODING 21344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\n0FC0\n0800\n0800\n7F80\n4080\n4080\n4080\n7F80\n4080\nENDCHAR\nSTARTCHAR U_5361\nENCODING 21345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0F80\n0800\n0800\nFFE0\n0800\n0A00\n0900\n0880\n0800\n0800\nENDCHAR\nSTARTCHAR U_5362\nENCODING 21346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n07E0\n0400\n3FC0\n2040\n2040\n3FC0\n2000\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_5363\nENCODING 21347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n07E0\n0400\n7FC0\n4040\n7E40\n4240\n7E40\n4040\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_5364\nENCODING 21348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n07C0\n0400\n7FC0\n5140\n4A40\n4440\n4A40\n5140\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_5365\nENCODING 21349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0FC0\n0800\n7FE0\n54A0\n48A0\n5520\n6220\n4520\n4820\n7FE0\nENDCHAR\nSTARTCHAR U_5366\nENCODING 21350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n7D00\n1100\nFD80\n1140\n1120\n7D20\n1100\n1D00\nE100\nENDCHAR\nSTARTCHAR U_5367\nENCODING 21351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n9100\n9100\nFD80\n8560\n8520\nFD00\n9100\n9100\nFD00\n0100\nENDCHAR\nSTARTCHAR U_5368\nENCODING 21352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n3F80\n2080\n3E80\n2280\nFFE0\n8020\n9F20\n9120\n9F60\nENDCHAR\nSTARTCHAR U_5369\nENCODING 21353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0440\n0440\n0440\n0440\n0440\n0540\n0480\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_536A\nENCODING 21354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2880\n2480\n2480\n2080\n2480\n2300\n2000\n2000\n2000\nENDCHAR\nSTARTCHAR U_536B\nENCODING 21355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n0440\n0440\n0440\n0540\n0480\n0400\n0400\n0400\n7FE0\nENDCHAR\nSTARTCHAR U_536C\nENCODING 21356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C00\n73E0\n4220\n4220\n4220\n4220\n4A20\n52A0\n6240\n0200\n0200\nENDCHAR\nSTARTCHAR U_536D\nENCODING 21357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2220\n2220\n2220\n2220\n2220\n2220\n3AA0\nC240\n0200\n0200\nENDCHAR\nSTARTCHAR U_536E\nENCODING 21358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n3E00\n2000\n3FE0\n2000\n2F80\n2880\n2880\n2B20\n4820\n87E0\nENDCHAR\nSTARTCHAR U_536F\nENCODING 21359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n73E0\n4220\n4A20\n4A20\n4A20\n5A20\n6AA0\n0A40\n1200\n6200\nENDCHAR\nSTARTCHAR U_5370\nENCODING 21360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n73E0\n4220\n4220\n7A20\n4220\n4220\n4A20\n72C0\n4200\n0200\nENDCHAR\nSTARTCHAR U_5371\nENCODING 21361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F80\n2100\n7FE0\n2000\n2F80\n2880\n2880\n2B20\n4820\n87E0\nENDCHAR\nSTARTCHAR U_5372\nENCODING 21362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n2520\n2520\n2520\n5920\n8120\n7D20\n45A0\n4540\n7D00\n4500\nENDCHAR\nSTARTCHAR U_5373\nENCODING 21363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4520\n7D20\n4520\n7D20\n4520\n5120\n49A0\n5540\n6500\n0100\nENDCHAR\nSTARTCHAR U_5374\nENCODING 21364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n11E0\n7D20\n1120\n1120\nFF20\n1120\n2120\n4D60\n7500\n0100\nENDCHAR\nSTARTCHAR U_5375\nENCODING 21365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C00\n73E0\n4A20\n6A20\n5AA0\n4A60\n4A20\n7A20\n0AE0\n1200\n6200\nENDCHAR\nSTARTCHAR U_5376\nENCODING 21366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n1D20\n2520\n6920\n1120\n2920\nDF20\n2320\n55E0\n0900\n7100\nENDCHAR\nSTARTCHAR U_5377\nENCODING 21367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2500\n7FE0\n0800\nFFE0\n1080\n3F40\nD120\n1300\n1040\n1FC0\nENDCHAR\nSTARTCHAR U_5378\nENCODING 21368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7DE0\n9120\n1120\nFF20\n1120\n5D20\n5120\n51A0\n5D40\nE100\nENDCHAR\nSTARTCHAR U_5379\nENCODING 21369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\n20A0\nFEA0\nAAA0\nAAA0\nAAA0\nAAA0\nAAA0\nAFE0\nF080\n0080\nENDCHAR\nSTARTCHAR U_537A\nENCODING 21370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0100\nF640\n2580\n5480\n8860\n7FC0\n2100\n2640\n2040\n1FC0\nENDCHAR\nSTARTCHAR U_537B\nENCODING 21371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n25E0\n5320\n9920\n2520\n4320\nBD20\n25A0\n2540\n3D00\n2500\nENDCHAR\nSTARTCHAR U_537C\nENCODING 21372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nFA40\n57E0\n5400\n55C0\n5540\n55C0\n5520\n59E0\n9000\n8FE0\nENDCHAR\nSTARTCHAR U_537D\nENCODING 21373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7DE0\n4520\n7D20\n4520\n7D20\n4120\n7920\n4160\n5900\n6100\nENDCHAR\nSTARTCHAR U_537E\nENCODING 21374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\nB520\nFD20\n0120\n7920\n0120\nFDA0\n4140\n7900\n0900\n3100\nENDCHAR\nSTARTCHAR U_537F\nENCODING 21375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\nCAA0\nAEA0\nAAA0\nAEA0\nAAA0\nE8A0\nAAE0\n2D80\n4880\n8080\nENDCHAR\nSTARTCHAR U_5380\nENCODING 21376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFD20\n3920\n5520\n9120\n2920\nD720\n55A0\n3940\n5500\nB200\nENDCHAR\nSTARTCHAR U_5381\nENCODING 21377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n28C0\n5540\nB8C0\n5040\n5BE0\nB440\n7FC0\n0440\n05C0\n0400\nENDCHAR\nSTARTCHAR U_5382\nENCODING 21378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n3FE0\n2000\n2000\n2000\n2000\n2000\n2000\n4000\n4000\n8000\nENDCHAR\nSTARTCHAR U_5383\nENCODING 21379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F80\n2080\n4100\nBFE0\n2000\n2000\n2000\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_5384\nENCODING 21380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2000\n2000\n2F80\n2880\n2880\n2880\n2B00\n4820\n4820\n87E0\nENDCHAR\nSTARTCHAR U_5385\nENCODING 21381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2000\n2000\n3FE0\n2100\n2100\n2100\n2100\n4100\n4100\n8700\nENDCHAR\nSTARTCHAR U_5386\nENCODING 21382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2000\n2200\n2200\n2FE0\n2220\n2220\n2420\n4420\n4820\n90C0\nENDCHAR\nSTARTCHAR U_5387\nENCODING 21383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2000\n23C0\n2E00\n2200\n2200\n3FE0\n2200\n4220\n4220\n81E0\nENDCHAR\nSTARTCHAR U_5388\nENCODING 21384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2000\n2FC0\n2100\n2100\n3FE0\n2100\n2100\n4100\n4100\n8100\nENDCHAR\nSTARTCHAR U_5389\nENCODING 21385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2000\n3FE0\n2400\n2400\n27C0\n2440\n2440\n4840\n4840\n9180\nENDCHAR\nSTARTCHAR U_538A\nENCODING 21386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n5FE0\n4480\n4880\n5FE0\n4280\n4480\n4880\n9080\nA380\nENDCHAR\nSTARTCHAR U_538B\nENCODING 21387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2000\n2200\n2200\n2200\n3FC0\n2200\n2280\n4240\n4200\nBFE0\nENDCHAR\nSTARTCHAR U_538C\nENCODING 21388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n4280\n4240\n5FE0\n4200\n4200\n4500\n4500\n8880\nB060\nENDCHAR\nSTARTCHAR U_538D\nENCODING 21389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n4400\n5FE0\n4800\n4A00\n5FC0\n4200\n7FE0\n8200\n8200\nENDCHAR\nSTARTCHAR U_538E\nENCODING 21390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n5FC0\n5100\n5100\n5FE0\n5100\n5100\n5520\n9AA0\n9160\nENDCHAR\nSTARTCHAR U_538F\nENCODING 21391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4800\n4800\n4FE0\n5400\n67C0\n4400\n4400\n47E0\n8400\n8400\nENDCHAR\nSTARTCHAR U_5390\nENCODING 21392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2480\n2440\n3FE0\n2400\n2540\n2540\n2580\n4B20\n5520\nA0E0\nENDCHAR\nSTARTCHAR U_5391\nENCODING 21393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4100\n4100\n5D60\n5580\n5500\n5500\n5520\n5D20\n8120\n80E0\nENDCHAR\nSTARTCHAR U_5392\nENCODING 21394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n4800\n4FC0\n5200\n7FE0\n4200\n5240\n5240\n9FC0\n9040\nENDCHAR\nSTARTCHAR U_5393\nENCODING 21395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4200\n5FC0\n4200\n7FE0\n4000\n4200\n5FC0\n4200\n8200\nBFE0\nENDCHAR\nSTARTCHAR U_5394\nENCODING 21396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n5FE0\n4400\n4880\n5FC0\n4240\n4F80\n4200\n8200\nBFE0\nENDCHAR\nSTARTCHAR U_5395\nENCODING 21397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8000\nBE20\nA2A0\nAAA0\nAAA0\nAAA0\nAAA0\nAA20\n9420\nA2E0\nENDCHAR\nSTARTCHAR U_5396\nENCODING 21398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4880\n4840\n7FE0\n4900\n4A80\n4940\n5680\n5520\nA620\nDBE0\nENDCHAR\nSTARTCHAR U_5397\nENCODING 21399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4400\n4200\n7FE0\n4500\n4200\n7FE0\n4200\n5FC0\n8200\n8200\nENDCHAR\nSTARTCHAR U_5398\nENCODING 21400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2000\n2FE0\n2920\n2FE0\n2920\n2FE0\n2100\n2FE0\n4100\n9FE0\nENDCHAR\nSTARTCHAR U_5399\nENCODING 21401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4200\n7FE0\n5240\n5FC0\n5240\n5FC0\n4200\n7FE0\n8200\n8200\nENDCHAR\nSTARTCHAR U_539A\nENCODING 21402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2000\n2FC0\n2840\n2FC0\n2840\n2FC0\n2080\n3FE0\n4100\n8700\nENDCHAR\nSTARTCHAR U_539B\nENCODING 21403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n41C0\n5D00\n5500\n55E0\n5540\n5D40\n4140\n8240\n8440\nENDCHAR\nSTARTCHAR U_539C\nENCODING 21404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4080\n5F00\n4200\n5FC0\n4A80\n7FE0\n4A80\n5FE0\n8200\n9FC0\nENDCHAR\nSTARTCHAR U_539D\nENCODING 21405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4480\n5FC0\n4480\n5FE0\n4000\n4FC0\n4840\n4FC0\n8840\n8FC0\nENDCHAR\nSTARTCHAR U_539E\nENCODING 21406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4500\n4500\n7DE0\n4500\n5DC0\n4500\n7DE0\n4500\n8500\n8500\nENDCHAR\nSTARTCHAR U_539F\nENCODING 21407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2200\n2FC0\n2840\n2FC0\n2840\n2FC0\n2200\n2A80\n5260\nA620\nENDCHAR\nSTARTCHAR U_53A0\nENCODING 21408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n5E20\n52A0\n5EA0\n52A0\n5EA0\n52A0\n5E20\n5420\nA2E0\nENDCHAR\nSTARTCHAR U_53A1\nENCODING 21409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2200\n2FC0\n2840\n2FC0\n2840\n2FC0\n2120\n5DC0\n4540\n9B20\nENDCHAR\nSTARTCHAR U_53A2\nENCODING 21410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n4800\n49E0\n7F20\n49E0\n4D20\n5BE0\n6920\n89E0\n8920\nENDCHAR\nSTARTCHAR U_53A3\nENCODING 21411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4280\n7FE0\n4880\n7FE0\n5240\n5FC0\n5240\n5FC0\n8200\n8200\nENDCHAR\nSTARTCHAR U_53A4\nENCODING 21412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4440\n5980\n4880\n7FE0\n4880\n4D80\n5AC0\n6AA0\n8880\n8880\nENDCHAR\nSTARTCHAR U_53A5\nENCODING 21413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5480\n4880\n7EE0\n4920\n6A80\n6A80\n7E80\n4880\n9140\nA220\nENDCHAR\nSTARTCHAR U_53A6\nENCODING 21414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n5FE0\n4840\n4F40\n4BC0\n4840\n4FC0\n4C80\n5300\nACE0\nENDCHAR\nSTARTCHAR U_53A7\nENCODING 21415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4200\n7FE0\n4880\n4F80\n4880\n4F80\n4880\n7FE0\n8880\nB060\nENDCHAR\nSTARTCHAR U_53A8\nENCODING 21416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4040\n5E40\n4040\n5DE0\n5440\n5540\n5CC0\n5440\n8E40\nB8C0\nENDCHAR\nSTARTCHAR U_53A9\nENCODING 21417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n5DE0\n5440\n5D40\n5540\n5FE0\n5080\n5580\n9AA0\n8460\nENDCHAR\nSTARTCHAR U_53AA\nENCODING 21418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2480\n2FE0\n2480\n2FE0\n2920\n2FE0\n2100\n4FE0\n4100\n9FE0\nENDCHAR\nSTARTCHAR U_53AB\nENCODING 21419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4880\n7C80\n49E0\n7E40\n4940\n7EC0\n5040\n5EA0\n52A0\nA720\nENDCHAR\nSTARTCHAR U_53AC\nENCODING 21420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5040\n5FC0\n5040\n5FC0\n5280\n6CC0\n52A0\n6FE0\n8840\n8FC0\nENDCHAR\nSTARTCHAR U_53AD\nENCODING 21421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n5EC0\n52A0\n5E80\n41E0\n5E80\n5280\n5E80\n9340\n9620\nENDCHAR\nSTARTCHAR U_53AE\nENCODING 21422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5220\n7FC0\n5280\n5E80\n52E0\n5EA0\n52A0\n5FA0\n92A0\nA120\nENDCHAR\nSTARTCHAR U_53AF\nENCODING 21423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4880\n7DE0\n4880\n5DC0\n6AA0\n4000\n5240\n6920\nA8A0\n8F80\nENDCHAR\nSTARTCHAR U_53B0\nENCODING 21424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4880\n5A80\n4CE0\n5F20\n52A0\n5EA0\n5640\n5E40\n52A0\n9520\nENDCHAR\nSTARTCHAR U_53B1\nENCODING 21425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4200\n4500\n4880\n7760\n4000\n5DC0\n5540\n5DC0\n8880\n9540\nENDCHAR\nSTARTCHAR U_53B2\nENCODING 21426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4480\n5FE0\n4480\n4FC0\n4A40\n4FC0\n4A40\n5FE0\n92A0\n9760\nENDCHAR\nSTARTCHAR U_53B3\nENCODING 21427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n7FE0\n4100\n5D00\n45E0\n7E40\n5540\n5D40\n5680\n7C80\n8560\nENDCHAR\nSTARTCHAR U_53B4\nENCODING 21428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n54A0\n5FE0\n5480\n5FC0\n5260\n5FC0\n5240\n5FC0\n8200\n8200\nENDCHAR\nSTARTCHAR U_53B5\nENCODING 21429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4400\n5FC0\n5240\n5FC0\n8A80\n7FE0\n5240\n7FE0\n4AA0\nB5C0\nENDCHAR\nSTARTCHAR U_53B6\nENCODING 21430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n0400\n0400\n0800\n0800\n1000\n1080\n2040\n41C0\nFE20\n4020\nENDCHAR\nSTARTCHAR U_53B7\nENCODING 21431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0800\n0900\n1100\n1200\n2280\n2440\n4FC0\n8840\nENDCHAR\nSTARTCHAR U_53B8\nENCODING 21432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n2080\n2080\n2080\n4100\n5140\n5140\n4920\nFBE0\n4920\nENDCHAR\nSTARTCHAR U_53B9\nENCODING 21433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7F80\n0880\n08A0\n10A0\n2460\n4400\n0800\n1080\n7FC0\n2040\nENDCHAR\nSTARTCHAR U_53BA\nENCODING 21434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0A00\n1100\n2480\nC460\n0900\n1080\n23C0\n7C40\nENDCHAR\nSTARTCHAR U_53BB\nENCODING 21435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n3F80\n0400\n0400\nFFE0\n0400\n0900\n1080\n7FC0\n2040\nENDCHAR\nSTARTCHAR U_53BC\nENCODING 21436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1100\n2080\n7FC0\n0040\n0400\n2480\n2440\n4420\n8420\n1C00\nENDCHAR\nSTARTCHAR U_53BD\nENCODING 21437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\n1100\n2080\n7FC0\n0040\n2080\n2080\n4920\nFBE0\n0820\nENDCHAR\nSTARTCHAR U_53BE\nENCODING 21438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF80\n1080\n1080\n7C80\n1080\n1080\nFE80\n20A0\n44A0\nFE60\n4220\nENDCHAR\nSTARTCHAR U_53BF\nENCODING 21439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n2080\nFFE0\n0800\n1080\n7FC0\n2040\nENDCHAR\nSTARTCHAR U_53C0\nENCODING 21440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n0400\n3FC0\n2440\n3FC0\n2440\n3FC0\n0900\n1080\n3FC0\nENDCHAR\nSTARTCHAR U_53C1\nENCODING 21441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1100\n3F80\n0440\nFFE0\n2080\nDF60\n0000\n3F80\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_53C2\nENCODING 21442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1100\n3F80\n0800\nFFE0\n2480\nD860\n0600\n1880\n0300\n3C00\nENDCHAR\nSTARTCHAR U_53C3\nENCODING 21443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1100\n3E80\n5140\nFFC0\n2080\nCC60\n3300\n0C80\n0300\n7C00\nENDCHAR\nSTARTCHAR U_53C4\nENCODING 21444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1200\n3F00\n2100\n4A40\nFFE0\n1120\n3F80\nC460\n0200\n7FC0\nENDCHAR\nSTARTCHAR U_53C5\nENCODING 21445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n1F00\n1100\n2A80\n7FC0\n0A00\n3180\nC460\n2680\n4540\n0C00\nENDCHAR\nSTARTCHAR U_53C6\nENCODING 21446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00E0\n7700\n02A0\n07E0\nF520\n27E0\n2100\n51E0\n52A0\nFAC0\n0D20\nENDCHAR\nSTARTCHAR U_53C7\nENCODING 21447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n75E0\n04A0\n03E0\nF0A0\n4DE0\n46A0\n95C0\nF6A0\n1480\n0BE0\nENDCHAR\nSTARTCHAR U_53C8\nENCODING 21448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n1040\n1080\n0880\n0900\n0500\n0200\n0600\n1980\nE060\nENDCHAR\nSTARTCHAR U_53C9\nENCODING 21449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n3F80\n1480\n1280\n1100\n0900\n0A00\n0400\n0600\n1980\n6060\nENDCHAR\nSTARTCHAR U_53CA\nENCODING 21450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F00\n1100\n1200\n1200\n17C0\n1040\n2880\n2500\n4200\n4580\n9860\nENDCHAR\nSTARTCHAR U_53CB\nENCODING 21451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\nFFE0\n0800\n1F80\n1880\n2880\n2500\n4200\n8D80\n3060\nENDCHAR\nSTARTCHAR U_53CC\nENCODING 21452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n0A40\n4A40\n2A40\n1140\n1140\n2880\n4580\n8240\n0420\nENDCHAR\nSTARTCHAR U_53CD\nENCODING 21453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n3E00\n2000\n2000\n3FC0\n2880\n2500\n2200\n4500\n4880\nB060\nENDCHAR\nSTARTCHAR U_53CE\nENCODING 21454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n9FC0\n9440\n9440\n9280\n9280\nB100\nD100\n1280\n1440\n1820\nENDCHAR\nSTARTCHAR U_53CF\nENCODING 21455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n0880\nFFE0\n0800\n7F80\n2080\n1300\n0C00\n3300\nC0E0\nENDCHAR\nSTARTCHAR U_53D0\nENCODING 21456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n7C00\n0800\nFFE0\n0800\n1F80\n1880\n2500\n2200\n4D00\nB0E0\nENDCHAR\nSTARTCHAR U_53D1\nENCODING 21457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2440\n4400\n7FE0\n0800\n0F80\n0880\n1500\n2200\n4580\n9860\nENDCHAR\nSTARTCHAR U_53D2\nENCODING 21458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n2080\n1100\n0E00\nF1C0\n0000\nFBC0\n4940\n4940\n3080\nCB60\nENDCHAR\nSTARTCHAR U_53D3\nENCODING 21459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n4440\n7FC0\n0400\n7FC0\n1100\n0E00\n71E0\nENDCHAR\nSTARTCHAR U_53D4\nENCODING 21460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n13C0\n1C40\n1140\nFF40\n1140\n5540\n5280\n9280\n9140\n3220\nENDCHAR\nSTARTCHAR U_53D5\nENCODING 21461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n0A20\n5140\n2080\n5360\n8C20\nF7C0\n5240\n2180\n5240\n8C20\nENDCHAR\nSTARTCHAR U_53D6\nENCODING 21462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC00\n4BE0\n4A20\n7A20\n4940\n7940\n4880\n4C80\nF940\n0A40\n0C20\nENDCHAR\nSTARTCHAR U_53D7\nENCODING 21463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n3E40\n1480\n0A80\n7FE0\n4020\n1F80\n0900\n0600\n0980\n7060\nENDCHAR\nSTARTCHAR U_53D8\nENCODING 21464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n0900\n2940\n4920\n0000\n3FC0\n0900\n0600\n0900\n70E0\nENDCHAR\nSTARTCHAR U_53D9\nENCODING 21465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n2BE0\n4520\nBB20\n1120\n7D40\n1140\n5880\n5540\n9240\n3420\nENDCHAR\nSTARTCHAR U_53DA\nENCODING 21466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8820\n8820\nFBE0\n8000\nFBE0\n8220\n8140\nF880\n8140\n8620\nENDCHAR\nSTARTCHAR U_53DB\nENCODING 21467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nAB00\n7200\n2200\nFBE0\n2240\nFA40\n2540\n2480\n4940\n9620\nENDCHAR\nSTARTCHAR U_53DC\nENCODING 21468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9420\n1580\n2600\n1980\nE060\n1F80\n0900\n0600\n79C0\nENDCHAR\nSTARTCHAR U_53DD\nENCODING 21469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\nFAA0\n2240\n2200\nFBE0\n22A0\n42A0\n4A40\nFAA0\n0320\nENDCHAR\nSTARTCHAR U_53DE\nENCODING 21470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C00\n47C0\n7D40\n4140\n7D40\n4140\n7F40\n4880\nAC80\nAB40\n5A20\nENDCHAR\nSTARTCHAR U_53DF\nENCODING 21471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n65C0\n4440\n75C0\n4440\n7FC0\n0400\n7FC0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_53E0\nENCODING 21472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0A00\n1500\nFFE0\n5280\nAD40\nFFE0\nA0A0\n3F80\n2080\nFFE0\nENDCHAR\nSTARTCHAR U_53E1\nENCODING 21473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3C00\n21E0\nFD20\n4920\nB520\n4940\nFD40\n4880\n7980\n4A40\n7C20\nENDCHAR\nSTARTCHAR U_53E2\nENCODING 21474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\nFFE0\n1200\n7FC0\n0400\nFFE0\n4540\n7D40\n4480\nFD40\n0620\nENDCHAR\nSTARTCHAR U_53E3\nENCODING 21475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n4040\n4040\n4040\n4040\n4040\n4040\n7FC0\n4040\n0000\nENDCHAR\nSTARTCHAR U_53E4\nENCODING 21476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0400\n0400\n3F80\n2080\n2080\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_53E5\nENCODING 21477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3FE0\n2020\n4020\nBE20\n2220\n2220\n3E20\n2220\n0020\n00C0\nENDCHAR\nSTARTCHAR U_53E6\nENCODING 21478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\n1040\n1040\n1FC0\n1240\n0200\n3FE0\n0420\n0820\n1020\n61C0\nENDCHAR\nSTARTCHAR U_53E7\nENCODING 21479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n2040\n3FC0\n0000\n7FC0\n0440\n0440\n0840\n1040\n6380\nENDCHAR\nSTARTCHAR U_53E8\nENCODING 21480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF220\n9220\n9220\n9220\n9220\nF220\n9420\n0420\n0820\n30C0\nENDCHAR\nSTARTCHAR U_53E9\nENCODING 21481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\n7A20\n4A20\n4A20\n4A20\n4A20\n7A20\n4A20\n02E0\n0200\n0200\nENDCHAR\nSTARTCHAR U_53EA\nENCODING 21482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\n1040\n1040\n1040\n1040\n1FC0\n1040\n0880\n1040\n2020\n4020\nENDCHAR\nSTARTCHAR U_53EB\nENCODING 21483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0020\n0220\n7A20\n4A20\n4A20\n4A20\n4AE0\n7B20\n0020\n0020\n0020\nENDCHAR\nSTARTCHAR U_53EC\nENCODING 21484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0840\n0840\n0840\n1140\n2080\n7FC0\n2040\n2040\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_53ED\nENCODING 21485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF280\n9280\n9280\n9280\n9280\nF240\n0440\n0440\n0820\n1020\nENDCHAR\nSTARTCHAR U_53EE\nENCODING 21486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF080\n9080\n9080\n9080\n9080\nF080\n9080\n0080\n0080\n0380\nENDCHAR\nSTARTCHAR U_53EF\nENCODING 21487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n0080\n3C80\n2480\n2480\n3C80\n2480\n0080\n0080\n0380\nENDCHAR\nSTARTCHAR U_53F0\nENCODING 21488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0800\n1100\n2080\n7FC0\n0040\n3F80\n2080\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_53F1\nENCODING 21489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n9220\n9240\n9280\n9300\n9600\nF200\n9220\n0220\n01E0\nENDCHAR\nSTARTCHAR U_53F2\nENCODING 21490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n4440\n4440\n7FC0\n2400\n1400\n0800\n1600\nE1E0\nENDCHAR\nSTARTCHAR U_53F3\nENCODING 21491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0800\n1000\n1F80\n3080\n5080\n9080\n1F80\n1080\nENDCHAR\nSTARTCHAR U_53F4\nENCODING 21492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7F00\n0900\n0900\n1120\n20E0\nC000\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_53F5\nENCODING 21493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n8000\n8000\n9F00\n9100\n9100\n9F00\n9100\n8000\n8000\nFFC0\nENDCHAR\nSTARTCHAR U_53F6\nENCODING 21494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9100\n9100\n9FE0\n9100\nF100\n9100\n0100\n0100\n0100\nENDCHAR\nSTARTCHAR U_53F7\nENCODING 21495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n0000\nFFE0\n0800\n1F80\n0080\n0080\n0480\n0300\nENDCHAR\nSTARTCHAR U_53F8\nENCODING 21496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0040\nFF40\n0040\n7E40\n4240\n4240\n7E40\n0040\n0040\n0380\nENDCHAR\nSTARTCHAR U_53F9\nENCODING 21497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF440\n9440\n9240\n9280\n9280\nF100\n9100\n0280\n0440\n1820\nENDCHAR\nSTARTCHAR U_53FA\nENCODING 21498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\nF200\n9200\n9200\n9200\nF500\n8500\n0880\n1040\n2020\nENDCHAR\nSTARTCHAR U_53FB\nENCODING 21499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n97E0\n9120\n9120\n9120\nF120\n9220\n0220\n0420\n08C0\nENDCHAR\nSTARTCHAR U_53FC\nENCODING 21500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF020\n9020\n90A0\n9120\n9220\nF420\n9820\n0020\n0020\n00C0\nENDCHAR\nSTARTCHAR U_53FD\nENCODING 21501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nF480\n9480\n9480\n9480\n9480\nF480\n9480\n04A0\n08A0\n10E0\nENDCHAR\nSTARTCHAR U_53FE\nENCODING 21502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0100\n0200\n0200\n0A00\n0400\n0000\n7FC0\n4040\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_53FF\nENCODING 21503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n1FC0\nE200\nA200\nA200\nA200\nA200\nE200\n0200\n0200\n3FE0\nENDCHAR\nSTARTCHAR U_5400\nENCODING 21504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n0F00\n0100\nF100\n9100\n9FE0\n9100\n9100\nF100\n0100\n0100\nENDCHAR\nSTARTCHAR U_5401\nENCODING 21505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF100\n9100\n9100\n9FE0\n9100\nF100\n9100\n0100\n0100\n0700\nENDCHAR\nSTARTCHAR U_5402\nENCODING 21506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\nFFE0\n2000\n2000\n3FC0\n0000\n3FC0\n2040\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_5403\nENCODING 21507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n97E0\n9800\n97C0\n9080\n9100\nF200\n9420\n0420\n03E0\nENDCHAR\nSTARTCHAR U_5404\nENCODING 21508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F80\n3080\n4900\n0600\n0900\n3080\nDFE0\n1080\n1080\n1F80\nENDCHAR\nSTARTCHAR U_5405\nENCODING 21509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7BC0\n4A40\n4A40\n4A40\n4A40\n4A40\n4A40\n4A40\n7BC0\n4A40\nENDCHAR\nSTARTCHAR U_5406\nENCODING 21510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9240\n9240\n9480\n9F80\n9100\nF240\n9420\n0FE0\n0420\nENDCHAR\nSTARTCHAR U_5407\nENCODING 21511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF040\n9080\n9100\n9FE0\n9100\n9100\nF100\n0100\n0100\n0700\nENDCHAR\nSTARTCHAR U_5408\nENCODING 21512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1100\n2080\nDF60\n0000\n3F80\n2080\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_5409\nENCODING 21513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0400\n7FC0\n0000\n3F80\n2080\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_540A\nENCODING 21514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2080\n3F80\n0400\n7FC0\n4440\n4440\n4440\n44C0\n0400\nENDCHAR\nSTARTCHAR U_540B\nENCODING 21515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF080\n9FE0\n9080\n9480\n9280\n9280\nF080\n0080\n0080\n0380\nENDCHAR\nSTARTCHAR U_540C\nENCODING 21516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n8040\nBF40\n8040\n9E40\n9240\n9240\n9E40\n9240\n8040\n80C0\nENDCHAR\nSTARTCHAR U_540D\nENCODING 21517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FC0\n1080\n2900\n4600\n0400\n1FC0\nF040\n1040\n1040\n1FC0\nENDCHAR\nSTARTCHAR U_540E\nENCODING 21518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n3E00\n2000\n3FE0\n2000\n2000\n2FC0\n2840\n4840\n4FC0\n8840\nENDCHAR\nSTARTCHAR U_540F\nENCODING 21519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n4440\n7FC0\n2400\n1400\n0800\n1600\nE1E0\nENDCHAR\nSTARTCHAR U_5410\nENCODING 21520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nF100\n9100\n97C0\n9100\n9100\nF100\n9100\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_5411\nENCODING 21521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1000\nFFC0\n8040\n9E40\n9240\n9240\n9E40\n8040\n8040\n81C0\nENDCHAR\nSTARTCHAR U_5412\nENCODING 21522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n0700\nF100\n9100\n91E0\n9F00\n9100\nF100\n9120\n0120\n00E0\nENDCHAR\nSTARTCHAR U_5413\nENCODING 21523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF100\n9100\n9100\n9180\n9140\nF120\n9120\n0100\n0100\n0100\nENDCHAR\nSTARTCHAR U_5414\nENCODING 21524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0A00\nEAC0\nAB40\nAE40\nBA40\nAA40\nEAC0\n0A20\n0820\n07E0\nENDCHAR\nSTARTCHAR U_5415\nENCODING 21525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2080\n3F80\n2080\n0000\n7FC0\n4040\n4040\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_5416\nENCODING 21526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0820\n0440\nF280\n9100\n9100\n9100\n9100\nF100\n9100\n0100\n0100\nENDCHAR\nSTARTCHAR U_5417\nENCODING 21527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nF040\n9240\n9240\n9440\n97E0\n9020\n9FA0\nF020\n0020\n01C0\nENDCHAR\nSTARTCHAR U_5418\nENCODING 21528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE7C0\nA900\nB100\nA100\nBFE0\nA100\nE100\n0100\n0100\n0100\nENDCHAR\nSTARTCHAR U_5419\nENCODING 21529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0200\nE240\nAA40\nAA80\nB200\nA300\nE480\n0480\n0840\n1060\nENDCHAR\nSTARTCHAR U_541A\nENCODING 21530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE240\nA240\nBFE0\nA240\nA240\nEFC0\n0400\n0400\n0800\n1000\nENDCHAR\nSTARTCHAR U_541B\nENCODING 21531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n0440\nFFE0\n0840\n3FC0\n1000\n2000\n5FC0\n9040\n1040\n1FC0\nENDCHAR\nSTARTCHAR U_541C\nENCODING 21532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF240\n9240\n9240\n9240\n97C0\n9240\nF240\n0240\n0240\n1FE0\nENDCHAR\nSTARTCHAR U_541D\nENCODING 21533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFC0\n2100\n1200\n0C00\n1200\n6180\nBF60\n2100\n2100\n3F00\nENDCHAR\nSTARTCHAR U_541E\nENCODING 21534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n0400\nFFE0\n1100\n2080\n7FC0\nA0A0\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_541F\nENCODING 21535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9280\n9440\n9A20\n9100\n97C0\nF040\n9080\n0100\n0200\nENDCHAR\nSTARTCHAR U_5420\nENCODING 21536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF140\n9120\n9FE0\n9100\n9100\nF280\n9280\n0440\n0840\n1020\nENDCHAR\nSTARTCHAR U_5421\nENCODING 21537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nE900\nA900\nA920\nAFC0\nA900\nA900\nE900\nAB20\n0D20\n08E0\nENDCHAR\nSTARTCHAR U_5422\nENCODING 21538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n5220\n52A0\n9080\n0F80\n0000\n3FC0\n2040\n2040\n3FC0\n2040\nENDCHAR\nSTARTCHAR U_5423\nENCODING 21539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0080\nE080\nA200\nA240\nAA20\nAA20\nB200\nE220\n0220\n01E0\nENDCHAR\nSTARTCHAR U_5424\nENCODING 21540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9280\n9440\n9CA0\n9480\nF480\n9480\n0480\n0880\n1080\nENDCHAR\nSTARTCHAR U_5425\nENCODING 21541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF080\n9080\n9100\n9380\n9540\n9920\nF100\n9100\n0100\n0100\nENDCHAR\nSTARTCHAR U_5426\nENCODING 21542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n0D80\n3440\nC420\n0400\n3FC0\n2040\n2040\n3FC0\n2040\nENDCHAR\nSTARTCHAR U_5427\nENCODING 21543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE940\nA940\nA940\nA940\nAFC0\nE800\nA800\n0820\n0820\n07E0\nENDCHAR\nSTARTCHAR U_5428\nENCODING 21544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE200\nBFE0\nA200\nAA40\nAA40\nEFC0\n0200\n0220\n0220\n01E0\nENDCHAR\nSTARTCHAR U_5429\nENCODING 21545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n9440\n9440\n9820\n97C0\nF240\n9240\n0440\n0840\n1180\nENDCHAR\nSTARTCHAR U_542A\nENCODING 21546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nE500\nA920\nA940\nB980\nA900\nAB00\nED00\nA920\n0920\n08E0\nENDCHAR\nSTARTCHAR U_542B\nENCODING 21547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1900\n2480\nFFE0\n0100\n0200\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_542C\nENCODING 21548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF700\n9400\n9400\n97E0\n9480\nF480\n0480\n0880\n1080\n2080\nENDCHAR\nSTARTCHAR U_542D\nENCODING 21549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n9FE0\n9000\n9780\n9480\n9480\nF480\n04A0\n08A0\n3060\nENDCHAR\nSTARTCHAR U_542E\nENCODING 21550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF200\n9440\n9FE0\n9020\n9480\nF480\n9480\n04A0\n08A0\n3060\nENDCHAR\nSTARTCHAR U_542F\nENCODING 21551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FC0\n2040\n2040\n3FC0\n2000\n3FC0\n3040\n5040\n5FC0\n9040\nENDCHAR\nSTARTCHAR U_5430\nENCODING 21552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE200\nAFE0\nA200\nA280\nA480\nA480\nE900\n0A40\n17E0\n2220\nENDCHAR\nSTARTCHAR U_5431\nENCODING 21553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9FE0\n9100\n97C0\n9440\nF280\n9100\n0280\n0440\n1820\nENDCHAR\nSTARTCHAR U_5432\nENCODING 21554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F20\nE120\nA120\nAF20\nA820\nAF20\nA120\nE120\n0120\n0920\n0620\nENDCHAR\nSTARTCHAR U_5433\nENCODING 21555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F80\n2880\n2880\n2F80\n2000\n3FC0\n0440\n7FE0\n0400\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_5434\nENCODING 21556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2080\n3F80\n0000\n3FC0\n0400\nFFE0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_5435\nENCODING 21557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE100\nA540\nA520\nA900\nB120\nA140\nE080\n0100\n0600\n1800\nENDCHAR\nSTARTCHAR U_5436\nENCODING 21558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0100\nEFE0\nA920\nA920\nA920\nAAA0\nEC60\n0820\n08A0\n0840\nENDCHAR\nSTARTCHAR U_5437\nENCODING 21559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE200\nAFC0\nA240\nA240\nBFE0\nA200\nE200\n0500\n0880\n3060\nENDCHAR\nSTARTCHAR U_5438\nENCODING 21560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE480\nA480\nA480\nA5E0\nA440\nEA40\n0A80\n1100\n2280\n4C60\nENDCHAR\nSTARTCHAR U_5439\nENCODING 21561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n93E0\n9420\n9940\n9100\n9100\nF280\n0280\n0440\n0820\nENDCHAR\nSTARTCHAR U_543A\nENCODING 21562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nE480\nA480\nA4E0\nA800\nB7C0\nE440\nA280\n0100\n0680\n1860\nENDCHAR\nSTARTCHAR U_543B\nENCODING 21563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nF7E0\n9AA0\n92A0\n94A0\n9520\nF920\n0220\n04A0\n1840\nENDCHAR\nSTARTCHAR U_543C\nENCODING 21564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1E80\nE280\nA480\nA480\nA480\nA680\nBC80\nE480\n04A0\n14A0\n0860\nENDCHAR\nSTARTCHAR U_543D\nENCODING 21565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF500\n9500\n97C0\n9900\n9100\n9FE0\nF100\n0100\n0100\n0100\nENDCHAR\nSTARTCHAR U_543E\nENCODING 21566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n3F80\n0880\n0880\nFFE0\n0000\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_543F\nENCODING 21567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n3FC0\n4400\n0400\nFFE0\n0400\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_5440\nENCODING 21568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE480\nA480\nA880\nAFE0\nA180\nE280\nA480\n0880\n3080\n0180\nENDCHAR\nSTARTCHAR U_5441\nENCODING 21569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF7E0\n9420\n9820\n9220\n90A0\n9120\nF220\n0C20\n0020\n00E0\nENDCHAR\nSTARTCHAR U_5442\nENCODING 21570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2080\n3F80\n0400\n0800\n7FC0\n4040\n4040\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_5443\nENCODING 21571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA800\nABC0\nAA40\nAA40\nAA40\nEA40\nAAC0\n0A20\n1220\n21E0\nENDCHAR\nSTARTCHAR U_5444\nENCODING 21572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n1100\n13C0\n2040\n4480\nFFE0\n0400\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_5445\nENCODING 21573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n9FE0\n9440\n9440\n9280\n9280\nF100\n9280\n0440\n0820\nENDCHAR\nSTARTCHAR U_5446\nENCODING 21574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2080\n3F80\n0400\nFFE0\n0E00\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_5447\nENCODING 21575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\n7A80\n0B00\n1280\n2A60\n4400\n3F80\n2080\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_5448\nENCODING 21576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2080\n3F80\n0000\n7FC0\n0400\n3F80\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5449\nENCODING 21577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n5080\n5080\n5F80\n4000\n7F80\n0080\nFFE0\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_544A\nENCODING 21578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n3FC0\n4400\n0400\nFFE0\n0000\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_544B\nENCODING 21579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n97C0\n9100\n9100\n9FE0\nF100\n9100\n0280\n0440\n0820\nENDCHAR\nSTARTCHAR U_544C\nENCODING 21580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nE480\nA280\nA880\nA480\nA0E0\nE380\nAC80\n0080\n0080\n0080\nENDCHAR\nSTARTCHAR U_544D\nENCODING 21581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF000\n9000\n9000\n9FE0\n9100\n9200\nF280\n8440\n09E0\n0E20\nENDCHAR\nSTARTCHAR U_544E\nENCODING 21582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n9440\n9440\n97C0\n9500\nF500\n9480\n0880\n1040\n2020\nENDCHAR\nSTARTCHAR U_544F\nENCODING 21583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nEC80\nA480\nA480\nBFE0\nA480\nE480\nA880\n0880\n1080\n2080\nENDCHAR\nSTARTCHAR U_5450\nENCODING 21584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nEFE0\nA920\nA920\nA9A0\nAA60\nEC20\nA820\n0820\n0860\nENDCHAR\nSTARTCHAR U_5451\nENCODING 21585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\n7C00\n0400\nFFE0\n0A00\n3180\nC060\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_5452\nENCODING 21586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF100\n9100\n9100\n9FE0\n9280\nF280\n9480\n04A0\n08A0\n3060\nENDCHAR\nSTARTCHAR U_5453\nENCODING 21587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n9280\n9000\n9FC0\n9080\n9100\nF200\n9420\n0820\n07E0\nENDCHAR\nSTARTCHAR U_5454\nENCODING 21588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE100\nA100\nAFE0\nA100\nA100\nA280\nE280\nA640\n0940\n1020\nENDCHAR\nSTARTCHAR U_5455\nENCODING 21589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE800\nA840\nAA40\nA980\nA880\nA980\nEA40\nAC40\n0800\n0FE0\nENDCHAR\nSTARTCHAR U_5456\nENCODING 21590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE900\nA900\nABE0\nA920\nA920\nE920\nA920\n0920\n1220\n24C0\nENDCHAR\nSTARTCHAR U_5457\nENCODING 21591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF420\n9520\n9520\n9520\n9520\nF520\n9520\n0280\n0440\n1820\nENDCHAR\nSTARTCHAR U_5458\nENCODING 21592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n0000\n7FC0\n4040\n4440\n4440\n4A40\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_5459\nENCODING 21593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2080\n3F80\n0400\n7FC0\n4440\n4A40\n5140\n4040\n40C0\nENDCHAR\nSTARTCHAR U_545A\nENCODING 21594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0200\nF200\n97E0\n9480\n9A80\n9280\nF100\n8100\n0280\n1C60\nENDCHAR\nSTARTCHAR U_545B\nENCODING 21595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF280\n9440\n9820\n97C0\n9440\n9440\nF580\n9420\n0420\n03E0\nENDCHAR\nSTARTCHAR U_545C\nENCODING 21596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9440\n9440\n9580\n9400\nF7E0\n9020\n0FA0\n0020\n00C0\nENDCHAR\nSTARTCHAR U_545D\nENCODING 21597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0100\n77C0\n5440\n57C0\n5400\n75C0\n4880\n0900\n1220\n23E0\nENDCHAR\nSTARTCHAR U_545E\nENCODING 21598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n1FC0\n0040\nEF40\nA040\nAF40\nA940\nEF40\nA040\n0040\n01C0\nENDCHAR\nSTARTCHAR U_545F\nENCODING 21599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0100\n77E0\n5100\n5240\n5440\n7780\n5100\n4240\n07E0\n0020\nENDCHAR\nSTARTCHAR U_5460\nENCODING 21600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9FE0\n9100\n9380\n9540\nF920\n97C0\n0100\n0100\n0100\nENDCHAR\nSTARTCHAR U_5461\nENCODING 21601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE840\nA840\nAFC0\nA900\nAFE0\nE900\nA900\n0AA0\n0C60\n0820\nENDCHAR\nSTARTCHAR U_5462\nENCODING 21602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE840\nA840\nAFC0\nA800\nAA20\nEAC0\nAB00\n0A20\n1220\n61E0\nENDCHAR\nSTARTCHAR U_5463\nENCODING 21603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE840\nAA40\nA940\nBFE0\nA840\nAA40\nE940\nAFE0\n0040\n0180\nENDCHAR\nSTARTCHAR U_5464\nENCODING 21604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0300\nE480\nA840\nB220\nA100\nAFC0\nE040\nA480\n0300\n0100\n0080\nENDCHAR\nSTARTCHAR U_5465\nENCODING 21605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9540\n9540\n97C0\n9540\nFFE0\n9440\n0440\n0440\n04C0\nENDCHAR\nSTARTCHAR U_5466\nENCODING 21606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nE480\nA5E0\nAAA0\nAEA0\nA2A0\nA4A0\nEAA0\n1D20\n02A0\n0440\nENDCHAR\nSTARTCHAR U_5467\nENCODING 21607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0060\nF780\n9480\n9480\n97E0\n9480\nF480\n9480\n05A0\n0760\n04A0\nENDCHAR\nSTARTCHAR U_5468\nENCODING 21608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2220\n2FA0\n2220\n3FE0\n2020\n2FA0\n28A0\n4FA0\n4020\n8060\nENDCHAR\nSTARTCHAR U_5469\nENCODING 21609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n07C0\n7000\n5FE0\n5100\n5540\n7520\n5520\n0920\n0100\n0300\nENDCHAR\nSTARTCHAR U_546A\nENCODING 21610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n9440\n9440\n97C0\n9280\n9280\nF280\n92A0\n04A0\n08E0\nENDCHAR\nSTARTCHAR U_546B\nENCODING 21611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nF1E0\n9100\n9100\n97C0\n9440\nF440\n9440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_546C\nENCODING 21612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nEAA0\nAAA0\nAAA0\nAAA0\nAAA0\nECE0\nA820\n0820\n0FE0\n0820\nENDCHAR\nSTARTCHAR U_546D\nENCODING 21613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nEA80\nAA80\nAA80\nBFE0\nAA80\nAA80\nEA80\nAB80\n0800\n0FE0\nENDCHAR\nSTARTCHAR U_546E\nENCODING 21614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n07E0\nF420\n9420\n9420\n97E0\n9000\nF240\n0240\n0420\n0820\nENDCHAR\nSTARTCHAR U_546F\nENCODING 21615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE100\nA920\nA540\nA540\nAFE0\nE100\nA100\n0100\n0100\n0100\nENDCHAR\nSTARTCHAR U_5470\nENCODING 21616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5160\n5D80\n5120\n5D20\nE0E0\n1F80\n1080\n1080\n1F80\n1080\nENDCHAR\nSTARTCHAR U_5471\nENCODING 21617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nEF00\nAA80\nAA80\nAA80\nAA80\nEA40\nAA40\n0AA0\n13A0\n26A0\nENDCHAR\nSTARTCHAR U_5472\nENCODING 21618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nE280\nA280\nABA0\nAAC0\nAA80\nEA80\nAA80\n0BA0\n0CA0\n1060\nENDCHAR\nSTARTCHAR U_5473\nENCODING 21619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n97C0\n9100\n9FE0\n9100\nF380\n9540\n0920\n1120\n0100\nENDCHAR\nSTARTCHAR U_5474\nENCODING 21620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF7E0\n9820\n9020\n97A0\n94A0\nF4A0\n97A0\n0020\n0020\n00C0\nENDCHAR\nSTARTCHAR U_5475\nENCODING 21621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF040\n9040\n9740\n9540\n9540\nF740\n9540\n0040\n0040\n01C0\nENDCHAR\nSTARTCHAR U_5476\nENCODING 21622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE5E0\nBEA0\nAAA0\nAAA0\nAAA0\nEAA0\nA440\n0AC0\n1120\n2220\nENDCHAR\nSTARTCHAR U_5477\nENCODING 21623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE920\nA920\nAFE0\nA920\nA920\nEFE0\nA920\n0100\n0100\n0100\nENDCHAR\nSTARTCHAR U_5478\nENCODING 21624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n0FE0\nF080\n9100\n9340\n9520\n9920\n9100\nF100\n0000\n1FE0\nENDCHAR\nSTARTCHAR U_5479\nENCODING 21625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0A00\nEFC0\nB200\nA200\nBFE0\nE200\n0500\n0480\n0840\n3020\nENDCHAR\nSTARTCHAR U_547A\nENCODING 21626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n9440\n97C0\n9000\n9FE0\nF200\n97C0\n0040\n0040\n0180\nENDCHAR\nSTARTCHAR U_547B\nENCODING 21627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE100\nAFE0\nA920\nAFE0\nA920\nA920\nEFE0\n0100\n0100\n0100\nENDCHAR\nSTARTCHAR U_547C\nENCODING 21628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nEF00\nA120\nA920\nA540\nBFE0\nE100\nA100\n0100\n0100\n0700\nENDCHAR\nSTARTCHAR U_547D\nENCODING 21629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1100\nEEE0\n0000\n7BC0\n4A40\n4A40\n7A40\n4AC0\n0200\nENDCHAR\nSTARTCHAR U_547E\nENCODING 21630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE840\nA840\nA840\nAFC0\nA840\nA840\nEFC0\nA840\n0000\n1FE0\nENDCHAR\nSTARTCHAR U_547F\nENCODING 21631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n97C0\n9100\n9100\n9FE0\nF100\n9200\n0440\n0FE0\n0420\nENDCHAR\nSTARTCHAR U_5480\nENCODING 21632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n9440\n97C0\n9440\n9440\nF7C0\n9440\n0440\n0440\n1FE0\nENDCHAR\nSTARTCHAR U_5481\nENCODING 21633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nF440\n9FE0\n9440\n9440\n97C0\nF440\n9440\n0440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_5482\nENCODING 21634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE880\nA880\nABE0\nAAA0\nAAA0\nEAA0\nAAE0\n0880\n0880\n0FE0\nENDCHAR\nSTARTCHAR U_5483\nENCODING 21635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nE480\nA4A0\nAAE0\nBBA0\nAEA0\nAAA0\nEAE0\nAA80\n0A20\n0BE0\nENDCHAR\nSTARTCHAR U_5484\nENCODING 21636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE540\nA540\nA540\nA7C0\nA100\nA920\nE920\n0920\n0920\n0FE0\nENDCHAR\nSTARTCHAR U_5485\nENCODING 21637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n7FE0\n1080\n0900\nFFE0\n0000\n3FC0\n2040\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_5486\nENCODING 21638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n07E0\nE820\nB7A0\nA4A0\nA4A0\nA7A0\nE440\nA400\n0420\n03E0\nENDCHAR\nSTARTCHAR U_5487\nENCODING 21639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\n0140\nE440\nA480\nA480\nAD40\nB520\nE620\n0440\n0C40\n33C0\nENDCHAR\nSTARTCHAR U_5488\nENCODING 21640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nEFE0\nA2A0\nAFE0\nAA80\nAA80\nEFE0\nA2A0\n04E0\n0880\n1080\nENDCHAR\nSTARTCHAR U_5489\nENCODING 21641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE100\nAFE0\nA920\nA920\nA920\nBFE0\nE100\nA280\n0440\n0820\nENDCHAR\nSTARTCHAR U_548A\nENCODING 21642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0060\nF780\n9100\n9100\n9FE0\n9100\n9380\nF340\n9520\n0920\n0100\nENDCHAR\nSTARTCHAR U_548B\nENCODING 21643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE400\nA7E0\nAA00\nB3C0\nA200\nE200\nA3C0\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_548C\nENCODING 21644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C00\n7000\n11E0\nFD20\n1120\n3920\n3520\n5520\n9120\n11E0\n1000\nENDCHAR\nSTARTCHAR U_548D\nENCODING 21645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF200\n9440\n9FE0\n9420\n9000\n97C0\nF440\n9440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_548E\nENCODING 21646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3D80\n4540\nA520\n1900\n27E0\nC000\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_548F\nENCODING 21647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0300\nF000\n9700\n9120\n9F40\n9580\nF580\n9540\n0920\n1120\n0700\nENDCHAR\nSTARTCHAR U_5490\nENCODING 21648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nF240\n9440\n97E0\n9C40\n9540\nF4C0\n9440\n0440\n0440\n05C0\nENDCHAR\nSTARTCHAR U_5491\nENCODING 21649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE5E0\nBE40\nA440\nA440\nA640\nEC40\nB440\n0440\n0440\n0CC0\nENDCHAR\nSTARTCHAR U_5492\nENCODING 21650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\n4920\n4920\n79E0\n0000\n0F00\n0900\n0900\n0920\n1120\n60E0\nENDCHAR\nSTARTCHAR U_5493\nENCODING 21651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF200\n9200\n9380\n9280\n9480\n9680\nF580\n94A0\n05A0\n0EE0\nENDCHAR\nSTARTCHAR U_5494\nENCODING 21652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE3C0\nA200\nA200\nBFE0\nA200\nE300\nA280\n0240\n0200\n0200\nENDCHAR\nSTARTCHAR U_5495\nENCODING 21653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9FE0\n9100\n9100\n97C0\nF440\n9440\n0440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_5496\nENCODING 21654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\nFEE0\nAAA0\nAAA0\nAAA0\nAAA0\nEAA0\nAAA0\n12E0\n2600\nENDCHAR\nSTARTCHAR U_5497\nENCODING 21655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9FE0\n9200\n9200\n9200\n97C0\nF480\n9480\n0880\n17E0\nENDCHAR\nSTARTCHAR U_5498\nENCODING 21656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE200\nBFE0\nA500\nA500\nAFC0\nB540\nE540\nA540\n05C0\n0100\nENDCHAR\nSTARTCHAR U_5499\nENCODING 21657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nE440\nA400\nBFE0\nA500\nA540\nE580\nA900\n0B20\n1520\n21E0\nENDCHAR\nSTARTCHAR U_549A\nENCODING 21658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE3C0\nA440\nAA80\nA100\nA280\nEC60\nB300\n0080\n0600\n0180\nENDCHAR\nSTARTCHAR U_549B\nENCODING 21659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA820\nA000\nAFE0\nA100\nA100\nE100\nA100\n0100\n0700\nENDCHAR\nSTARTCHAR U_549C\nENCODING 21660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n97E0\n9820\n9200\n9240\n9380\nF200\n9200\n0220\n01E0\nENDCHAR\nSTARTCHAR U_549D\nENCODING 21661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nE440\nA880\nA880\nB320\nBDC0\nA440\nE880\n1EE0\n0000\n1FE0\nENDCHAR\nSTARTCHAR U_549E\nENCODING 21662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nF7E0\n9240\n9240\n9240\n9FE0\n9240\nF240\n9240\n0240\n0440\nENDCHAR\nSTARTCHAR U_549F\nENCODING 21663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nF7E0\n9080\n9100\n97E0\n9420\n9420\nF7E0\n9420\n0420\n07E0\nENDCHAR\nSTARTCHAR U_54A0\nENCODING 21664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1080\n1080\n7FE0\n1080\n1F80\n1080\n1F80\n10E0\n7F80\n0080\nENDCHAR\nSTARTCHAR U_54A1\nENCODING 21665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF440\n97C0\n9440\n9440\n97C0\nF440\n9460\n07C0\n0C40\n0040\nENDCHAR\nSTARTCHAR U_54A2\nENCODING 21666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n0000\n3F80\n0000\nFFE0\n1000\n3F80\n0080\n0700\nENDCHAR\nSTARTCHAR U_54A3\nENCODING 21667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nF520\n9540\n9100\n9FE0\n9280\nF280\n9280\n04A0\n08A0\n1060\nENDCHAR\nSTARTCHAR U_54A4\nENCODING 21668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9820\n90C0\n9700\n9120\nF1C0\n9700\n0120\n0120\n00E0\nENDCHAR\nSTARTCHAR U_54A5\nENCODING 21669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF100\n9200\n9440\n9FE0\n9020\nF100\n97C0\n0100\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_54A6\nENCODING 21670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nAFE0\nA120\nAFE0\nE900\nAFE0\n0120\n0680\n1860\nENDCHAR\nSTARTCHAR U_54A7\nENCODING 21671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F20\nE420\nA6A0\nAAA0\nB2A0\nAAA0\nEAA0\nA4A0\n0420\n0820\n10E0\nENDCHAR\nSTARTCHAR U_54A8\nENCODING 21672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n1540\n2900\nC280\n4460\n3F80\n2080\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_54A9\nENCODING 21673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nF280\n9FE0\n9100\n9100\n97C0\nF100\n9100\n0FE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_54AA\nENCODING 21674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF920\n9540\n9540\n9FE0\n9100\nF380\n9540\n0920\n1120\n0100\nENDCHAR\nSTARTCHAR U_54AB\nENCODING 21675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4A20\n4A20\n4A20\n7BE0\n5000\n5140\n4A20\n4420\n8300\n80E0\nENDCHAR\nSTARTCHAR U_54AC\nENCODING 21676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9280\n9440\n9AA0\n9280\nF280\n9100\n0100\n0680\n1860\nENDCHAR\nSTARTCHAR U_54AD\nENCODING 21677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9100\n9100\n97C0\n9000\nF7C0\n9440\n0440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_54AE\nENCODING 21678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nE500\nA7C0\nA900\nA100\nAFE0\nE100\nA380\n0540\n0920\n1120\nENDCHAR\nSTARTCHAR U_54AF\nENCODING 21679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF7C0\n9440\n9A80\n9100\n9280\nFFE0\n9440\n0440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_54B0\nENCODING 21680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE7E0\nA820\nA7A0\nA4A0\nA7A0\nE4A0\nA7A0\n04A0\n0020\n00C0\nENDCHAR\nSTARTCHAR U_54B1\nENCODING 21681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0200\nEFC0\nA840\nAFC0\nA840\nAFC0\nA840\nE840\n0FC0\n0840\nENDCHAR\nSTARTCHAR U_54B2\nENCODING 21682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n0240\nE280\nAFE0\nA100\nA100\nBFE0\nE100\n8280\n0440\n0820\nENDCHAR\nSTARTCHAR U_54B3\nENCODING 21683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE100\nAFE0\nA200\nA480\nAF00\nE240\nA480\n1980\n0240\n1C20\nENDCHAR\nSTARTCHAR U_54B4\nENCODING 21684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFE0\nA200\nA280\nA4A0\nA5A0\nEAC0\nA880\n1180\n2240\n0C20\nENDCHAR\nSTARTCHAR U_54B5\nENCODING 21685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n1FE0\nE500\nA880\nB740\nA020\nBFC0\nE400\n8780\n0080\n0300\nENDCHAR\nSTARTCHAR U_54B6\nENCODING 21686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF700\n9100\n9FE0\n9100\n9100\nF7C0\n9440\n0440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_54B7\nENCODING 21687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n02A0\nEAC0\nA680\nA280\nA6C0\nAAA0\nE280\nA4A0\n08A0\n1060\nENDCHAR\nSTARTCHAR U_54B8\nENCODING 21688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n0120\n7FE0\n4100\n5D40\n4140\n5D80\n5480\n5DA0\n4260\n8C20\nENDCHAR\nSTARTCHAR U_54B9\nENCODING 21689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0100\nEFE0\nA820\nA200\nAFE0\nA280\nE680\nA180\n0240\n0C20\nENDCHAR\nSTARTCHAR U_54BA\nENCODING 21690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF000\n97C0\n9440\n9440\n97C0\n9440\nF7C0\n0440\n0000\n1FE0\nENDCHAR\nSTARTCHAR U_54BB\nENCODING 21691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nE480\nA880\nAFE0\nA880\nB880\nA9C0\nEAA0\nACA0\n0880\n0880\nENDCHAR\nSTARTCHAR U_54BC\nENCODING 21692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3C80\n2480\n2480\nFFE0\n8020\n9F20\n9120\n9F20\n8060\nENDCHAR\nSTARTCHAR U_54BD\nENCODING 21693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE820\nA920\nAFE0\nA920\nA920\nA9A0\nEA60\nAC20\n0FE0\n0820\nENDCHAR\nSTARTCHAR U_54BE\nENCODING 21694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE120\nA7C0\nA140\nA180\nAFE0\nE240\nA680\n0B20\n1220\n01E0\nENDCHAR\nSTARTCHAR U_54BF\nENCODING 21695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0BC0\nE940\nA940\nAFE0\nB940\nA940\nABC0\nE900\nA900\n0A00\n0C00\nENDCHAR\nSTARTCHAR U_54C0\nENCODING 21696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0000\n3F80\n2080\n3F80\n1440\n3280\nD100\n1480\n3860\nENDCHAR\nSTARTCHAR U_54C1\nENCODING 21697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1080\n1080\n1F80\n0000\n79E0\n4920\n4920\n4920\n79E0\n4920\nENDCHAR\nSTARTCHAR U_54C2\nENCODING 21698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE280\nA280\nAFE0\nAAA0\nAAA0\nEAE0\nAC20\n0820\n0FE0\n0820\nENDCHAR\nSTARTCHAR U_54C3\nENCODING 21699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE820\nABA0\nA820\nABA0\nAAA0\nAAA0\nEBA0\nA820\n0820\n0860\nENDCHAR\nSTARTCHAR U_54C4\nENCODING 21700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nE280\nAFE0\nA280\nA280\nA280\nAFE0\nE000\nA480\n0840\n1020\nENDCHAR\nSTARTCHAR U_54C5\nENCODING 21701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE7E0\nA820\nB520\nAAA0\nAAA0\nADA0\nE8A0\nAFA0\n0020\n00C0\nENDCHAR\nSTARTCHAR U_54C6\nENCODING 21702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE3C0\nAC40\nA280\nA300\nAD00\nE3E0\nAC40\n0280\n0300\n1C00\nENDCHAR\nSTARTCHAR U_54C7\nENCODING 21703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9100\n9100\n9FE0\n9000\nF100\n97C0\n0100\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_54C8\nENCODING 21704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nF280\n9440\n9FE0\n9000\n97C0\nF440\n9440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_54C9\nENCODING 21705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1140\n7D20\n1100\n7FE0\n0100\n3D40\n2580\n2520\n3EA0\n2460\nENDCHAR\nSTARTCHAR U_54CA\nENCODING 21706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n1FE0\nE400\nAFC0\nB440\nA7C0\nA440\nE7C0\nA440\n0440\n04C0\nENDCHAR\nSTARTCHAR U_54CB\nENCODING 21707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n0A80\nEAA0\nBEE0\nABA0\nAEA0\nAAA0\nAAA0\nEE00\n3A20\n03E0\nENDCHAR\nSTARTCHAR U_54CC\nENCODING 21708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nEF00\nA800\nABC0\nAA80\nAAA0\nEAC0\nAA80\n0A40\n1320\n2620\nENDCHAR\nSTARTCHAR U_54CD\nENCODING 21709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0200\nEFE0\nA820\nABA0\nAAA0\nAAA0\nEBA0\n0820\n0820\n0860\nENDCHAR\nSTARTCHAR U_54CE\nENCODING 21710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n1FE0\nE480\nA000\nA480\nA480\nA280\nE300\n0100\n0680\n1860\nENDCHAR\nSTARTCHAR U_54CF\nENCODING 21711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE840\nAFC0\nA840\nAFC0\nAA40\nEA20\nA940\n0880\n0A40\n0C20\nENDCHAR\nSTARTCHAR U_54D0\nENCODING 21712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE800\nABE0\nA880\nA880\nABE0\nE880\nA880\n0BE0\n0800\n0FE0\nENDCHAR\nSTARTCHAR U_54D1\nENCODING 21713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nE280\nA280\nA280\nAAA0\nAAA0\nE6C0\nA280\n0280\n0280\n1FE0\nENDCHAR\nSTARTCHAR U_54D2\nENCODING 21714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nF480\n93E0\n9080\n9C80\n9480\nF540\n9620\n0400\n0A00\n11E0\nENDCHAR\nSTARTCHAR U_54D3\nENCODING 21715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFE0\nA240\nA280\nA120\nAEE0\nE000\nAFE0\n0280\n04A0\n1860\nENDCHAR\nSTARTCHAR U_54D4\nENCODING 21716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nE8A0\nAEC0\nA8A0\nAAA0\nAD60\nE100\nAFE0\n0100\n0100\n0100\nENDCHAR\nSTARTCHAR U_54D5\nENCODING 21717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE920\nA920\nAFE0\nA200\nA3E0\nE620\nA940\n0080\n0300\n1C00\nENDCHAR\nSTARTCHAR U_54D6\nENCODING 21718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE7E0\nA880\nA080\nA7E0\nA480\nE480\nAFE0\n0080\n0080\n0080\nENDCHAR\nSTARTCHAR U_54D7\nENCODING 21719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nE520\nAD40\nB580\nA520\nA6E0\nE100\nBFE0\n0100\n0100\n0100\nENDCHAR\nSTARTCHAR U_54D8\nENCODING 21720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n05E0\nE800\nB200\nA5E0\nAC40\nB440\nE440\nA440\n0440\n05C0\nENDCHAR\nSTARTCHAR U_54D9\nENCODING 21721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0300\nE480\nA840\nB020\nA780\nA000\nBFE0\nE200\nA480\n09C0\n1E40\nENDCHAR\nSTARTCHAR U_54DA\nENCODING 21722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nE480\nA480\nA860\nB100\nAFE0\nE100\nA380\n0540\n0920\n0100\nENDCHAR\nSTARTCHAR U_54DB\nENCODING 21723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nF5C0\n9600\nF420\n93C0\n0900\n1080\n2F40\n4920\n9500\n2200\nENDCHAR\nSTARTCHAR U_54DC\nENCODING 21724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9480\n9300\n9280\n9C60\nF480\n9480\n0480\n0880\n1080\nENDCHAR\nSTARTCHAR U_54DD\nENCODING 21725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE100\nAFE0\nAA20\nA200\nA520\nE540\nAC80\n1440\n0540\n0620\nENDCHAR\nSTARTCHAR U_54DE\nENCODING 21726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE480\nA840\nBFA0\nA500\nA7C0\nE900\nA100\n1FE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_54DF\nENCODING 21727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nE480\nA8E0\nAB20\nBD20\nA4A0\nAAA0\nFC20\nA020\n0620\n18C0\nENDCHAR\nSTARTCHAR U_54E0\nENCODING 21728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nE500\nA7C0\nA900\nAFE0\nA000\nE7C0\nA440\n0440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_54E1\nENCODING 21729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1080\n3FC0\n2040\n3FC0\n2040\n3FC0\n2040\n3FC0\n1080\n6060\nENDCHAR\nSTARTCHAR U_54E2\nENCODING 21730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE100\nA7C0\nA100\nAFE0\nA480\nEFE0\nA480\n0480\n0880\n1080\nENDCHAR\nSTARTCHAR U_54E3\nENCODING 21731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n0000\nF7C0\n9440\n9440\n97C0\nF000\n8440\n0240\n0280\n1FE0\nENDCHAR\nSTARTCHAR U_54E4\nENCODING 21732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C40\nEA80\nBF20\nA840\nAA80\nAB20\nEA40\nAA80\n1320\n2220\n41E0\nENDCHAR\nSTARTCHAR U_54E5\nENCODING 21733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0080\n3C80\n2480\n3C80\n7FE0\n0080\n3C80\n2480\n3C80\n0380\nENDCHAR\nSTARTCHAR U_54E6\nENCODING 21734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n06C0\nFCA0\nA480\nBFE0\nA480\nA6A0\nACC0\nB480\nE5A0\n1660\n0820\nENDCHAR\nSTARTCHAR U_54E7\nENCODING 21735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE7C0\nA100\nA100\nAFE0\nA280\nAAC0\nEAA0\n12A0\n0480\n1980\nENDCHAR\nSTARTCHAR U_54E8\nENCODING 21736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nF540\n9100\n97E0\n9420\n97E0\nF420\n97E0\n0420\n0420\n04E0\nENDCHAR\nSTARTCHAR U_54E9\nENCODING 21737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE920\nAFE0\nA920\nAFE0\nA100\nA100\nE7C0\n0100\n0100\n1FE0\nENDCHAR\nSTARTCHAR U_54EA\nENCODING 21738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1EE0\nEAA0\nAAA0\nBEC0\nAAA0\nBEA0\nEAA0\nAAA0\n0AE0\n1280\n2680\nENDCHAR\nSTARTCHAR U_54EB\nENCODING 21739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n9440\n97C0\n9100\n9100\nF5C0\n9500\n0500\n0B00\n11E0\nENDCHAR\nSTARTCHAR U_54EC\nENCODING 21740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0FE0\nE820\nBBA0\nAAA0\nAAA0\nEAA0\nABA0\n0820\n0820\n08E0\nENDCHAR\nSTARTCHAR U_54ED\nENCODING 21741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n4A40\n7BC0\n0500\n0480\nFFE0\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_54EE\nENCODING 21742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0220\nEFC0\nA280\nBFE0\nA200\nA7C0\nE880\nB7E0\n2080\n0080\n0380\nENDCHAR\nSTARTCHAR U_54EF\nENCODING 21743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n97C0\n9440\n97C0\n9440\nF7C0\n9280\n02A0\n04A0\n0860\nENDCHAR\nSTARTCHAR U_54F0\nENCODING 21744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFE0\nB220\nAA00\nAFC0\nB200\nE200\n9FE0\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_54F1\nENCODING 21745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nAFE0\nA820\nA7C0\nE080\nAFE0\n0100\n0100\n0700\nENDCHAR\nSTARTCHAR U_54F2\nENCODING 21746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\nFC00\n27E0\nF480\n2480\n6880\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_54F3\nENCODING 21747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n05E0\nE500\nBF00\nA5E0\nA540\nA740\nED40\nB540\n0540\n0540\n1E40\nENDCHAR\nSTARTCHAR U_54F4\nENCODING 21748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0FC0\nE840\nAFC0\nA840\nAFC0\nAA00\nE940\n0980\n0A80\n0C60\nENDCHAR\nSTARTCHAR U_54F5\nENCODING 21749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1E20\n1220\nFEA0\nA8A0\nA8A0\nBEA0\nEAA0\n8AA0\n0A20\n1220\n26E0\nENDCHAR\nSTARTCHAR U_54F6\nENCODING 21750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nECE0\nA480\nA480\nAFC0\nA200\nA200\nFFE0\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_54F7\nENCODING 21751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\n0FA0\nEA20\nA540\nA040\nAFE0\nA040\nE240\nA140\n0040\n01C0\nENDCHAR\nSTARTCHAR U_54F8\nENCODING 21752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nFF00\nA220\nA940\nA400\nA200\nBFE0\nE480\n0300\n0280\n1C60\nENDCHAR\nSTARTCHAR U_54F9\nENCODING 21753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00E0\n0F00\nEA20\nA540\nAFC0\nA080\nE100\nBFE0\n0100\n0100\n0700\nENDCHAR\nSTARTCHAR U_54FA\nENCODING 21754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\nE140\nBFE0\nA100\nAFE0\nA920\nEFE0\nA920\n0FE0\n0920\n0960\nENDCHAR\nSTARTCHAR U_54FB\nENCODING 21755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE440\nA7C0\nA440\nA7C0\nA000\nE7C0\nA100\n0FE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_54FC\nENCODING 21756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0FE0\nF000\n97C0\n9440\n97C0\nF000\n97C0\n0080\n0100\n0300\nENDCHAR\nSTARTCHAR U_54FD\nENCODING 21757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE100\nAFE0\nA920\nAFE0\nA920\nEFE0\nA500\n0200\n0500\n18E0\nENDCHAR\nSTARTCHAR U_54FE\nENCODING 21758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n0500\nEFC0\nA840\nA840\nAFC0\nE500\nA500\n0500\n0920\n10E0\nENDCHAR\nSTARTCHAR U_54FF\nENCODING 21759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n7D20\n1520\n25E0\n4800\nFFE0\n0040\n1E40\n1240\n1E40\n01C0\nENDCHAR\nSTARTCHAR U_5500\nENCODING 21760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n0E00\nE200\nBFE0\nA700\nAA80\nF760\nA500\n05C0\n0840\n1180\nENDCHAR\nSTARTCHAR U_5501\nENCODING 21761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0100\nEFE0\nA000\nA7C0\nA000\nA7C0\nE000\nA7C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_5502\nENCODING 21762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n0480\nEA40\nB240\nA500\nA880\nBFE0\nE880\n0880\n0F80\n0880\nENDCHAR\nSTARTCHAR U_5503\nENCODING 21763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n03C0\nE480\nAFE0\nA920\nAFE0\nE920\nAFE0\n0920\n0920\n1060\nENDCHAR\nSTARTCHAR U_5504\nENCODING 21764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF420\n9420\n97E0\n9420\n97E0\nF420\n97E0\n0280\n0440\n0820\nENDCHAR\nSTARTCHAR U_5505\nENCODING 21765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE280\nA440\nA920\nB7C0\nA040\nE080\nA7C0\n0440\n0440\n07C0\nENDCHAR\nSTARTCHAR U_5506\nENCODING 21766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE440\nAFE0\nA440\nAA20\nB3C0\nE640\nAA80\n0100\n0680\n1860\nENDCHAR\nSTARTCHAR U_5507\nENCODING 21767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n5FC0\n4000\n7FE0\n5240\n5980\n5060\n9FC0\n9040\n1FC0\nENDCHAR\nSTARTCHAR U_5508\nENCODING 21768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE440\nA7C0\nA000\nAFE0\nA920\nE920\nAFE0\n0800\n0820\n07E0\nENDCHAR\nSTARTCHAR U_5509\nENCODING 21769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0440\nF7A0\n9400\n97C0\n9900\n9100\nFFE0\n8280\n0440\n1820\nENDCHAR\nSTARTCHAR U_550A\nENCODING 21770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nA540\nA540\nABA0\nE920\nA300\n0480\n0840\n1020\nENDCHAR\nSTARTCHAR U_550B\nENCODING 21771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0300\nE480\nA840\nB7A0\nA100\nA100\nAFE0\nE100\n0940\n0920\n1320\nENDCHAR\nSTARTCHAR U_550C\nENCODING 21772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0020\nFDC0\nA440\nA840\nBD60\nA540\nE540\nB540\n09E0\n1400\n23E0\nENDCHAR\nSTARTCHAR U_550D\nENCODING 21773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0100\nEFE0\nA820\nA380\nA000\nEFE0\nA280\n0280\n04A0\n0860\nENDCHAR\nSTARTCHAR U_550E\nENCODING 21774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0220\nFCA0\nA4A0\nBFA0\nA4A0\nA6A0\nE5A0\nACA0\n1420\n0420\n04E0\nENDCHAR\nSTARTCHAR U_550F\nENCODING 21775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0CC0\nE300\nACC0\nA200\nBFE0\nA500\nEFE0\nB520\n0520\n0560\n0100\nENDCHAR\nSTARTCHAR U_5510\nENCODING 21776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n7FE0\n4240\n7FE0\n4240\n5FC0\n4200\n5FC0\n5040\n9FC0\nENDCHAR\nSTARTCHAR U_5511\nENCODING 21777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE540\nA540\nA540\nABA0\nB100\nA100\nE7C0\n0100\n0100\n1FE0\nENDCHAR\nSTARTCHAR U_5512\nENCODING 21778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE280\nA280\nAFE0\nAAA0\nAAA0\nACE0\nE820\nAFE0\n0820\n0FE0\nENDCHAR\nSTARTCHAR U_5513\nENCODING 21779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0FE0\nE100\nAFE0\nA920\nAFE0\nA920\nEFE0\nA100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_5514\nENCODING 21780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF100\n97C0\n9240\n9FE0\n9000\nF7C0\n9440\n0440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_5515\nENCODING 21781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0200\nF7C0\n9440\n97C0\n9440\n97C0\nF100\n9FE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_5516\nENCODING 21782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n0280\nEFE0\nAAA0\nAAA0\nAAA0\nAAA0\nEFE0\nA280\n0280\n0FE0\nENDCHAR\nSTARTCHAR U_5517\nENCODING 21783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n97C0\n9100\n9FE0\n9100\nF500\n95C0\n0500\n0B00\n11E0\nENDCHAR\nSTARTCHAR U_5518\nENCODING 21784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n2220\n3D40\n6480\nBD60\n0220\n1FC0\n1040\n1040\n1FC0\n1040\nENDCHAR\nSTARTCHAR U_5519\nENCODING 21785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\nEA80\nA4A0\nAEA0\nB5C0\nA480\nAC80\nF540\n8540\n1620\n0A20\nENDCHAR\nSTARTCHAR U_551A\nENCODING 21786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE040\nAFC0\nA040\nBFE0\nB020\nAFC0\nE480\n0300\n0480\n1860\nENDCHAR\nSTARTCHAR U_551B\nENCODING 21787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nA7C0\nA100\nAFE0\nA200\nE7C0\nAA40\n0180\n0E60\nENDCHAR\nSTARTCHAR U_551C\nENCODING 21788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n3F80\n1500\nE4E0\n0200\n7A40\n4B80\n4A20\n79E0\nENDCHAR\nSTARTCHAR U_551D\nENCODING 21789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0100\nF100\n9FE0\n9000\n97C0\nF540\n9540\n0100\n0280\n0C40\nENDCHAR\nSTARTCHAR U_551E\nENCODING 21790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n0540\nE4C0\nBE40\nA540\nA6C0\nAC60\nF7C0\n8440\n1440\n0840\nENDCHAR\nSTARTCHAR U_551F\nENCODING 21791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\nFFE0\n1080\n7FC0\n0000\n7A60\n4B80\n4A20\n79E0\nENDCHAR\nSTARTCHAR U_5520\nENCODING 21792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nEFE0\nA280\nAFE0\nA820\nA200\nAFC0\nE240\n0240\n0440\n0980\nENDCHAR\nSTARTCHAR U_5521\nENCODING 21793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE280\nAFE0\nAAA0\nAAA0\nAAA0\nEDA0\nA960\n8A20\n0820\n08E0\nENDCHAR\nSTARTCHAR U_5522\nENCODING 21794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nF540\n9100\n97E0\n9420\n9520\nF520\n9520\n0520\n0240\n0C20\nENDCHAR\nSTARTCHAR U_5523\nENCODING 21795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\nA840\nAFC0\nA840\nAFC0\nA220\nE3C0\n1E00\n0220\n01E0\nENDCHAR\nSTARTCHAR U_5524\nENCODING 21796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n03C0\nF480\n9FC0\n9540\n9540\nF540\n9FE0\n0100\n0280\n0C60\nENDCHAR\nSTARTCHAR U_5525\nENCODING 21797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n1100\nEA80\nA440\nA120\nA7C0\nA840\nF280\n1100\n1100\n1100\nENDCHAR\nSTARTCHAR U_5526\nENCODING 21798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE900\nA140\nB520\nAD20\nA540\nA940\nF880\nA900\n0200\n0C00\nENDCHAR\nSTARTCHAR U_5527\nENCODING 21799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEAA0\nAEA0\nAAA0\nAAA0\nAEA0\nA8A0\nEAE0\n0E80\n0A80\n0080\nENDCHAR\nSTARTCHAR U_5528\nENCODING 21800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\nEAE0\nAAA0\nACA0\nACE0\nAAA0\nAAA0\nEEE0\n08A0\n09E0\n0800\nENDCHAR\nSTARTCHAR U_5529\nENCODING 21801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n0F00\nE100\nBFE0\nA380\nBD60\nA200\nBFE0\nE480\n0300\n0CE0\nENDCHAR\nSTARTCHAR U_552A\nENCODING 21802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\nA200\nAFC0\nA400\nBFE0\nEA80\n1740\n2220\n0F80\n0200\nENDCHAR\nSTARTCHAR U_552B\nENCODING 21803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0500\nE880\nB060\nAF80\nA200\nAF80\nE200\n0A80\n0700\n1FC0\nENDCHAR\nSTARTCHAR U_552C\nENCODING 21804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nE200\nAFE0\nAA20\nABC0\nAE20\nE9E0\nAB80\n0A80\n12A0\n2CE0\nENDCHAR\nSTARTCHAR U_552D\nENCODING 21805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nEFE0\nA440\nA7C0\nA440\nA7C0\nE440\nBFE0\n0000\n0440\n1820\nENDCHAR\nSTARTCHAR U_552E\nENCODING 21806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n2200\n7FC0\nA200\n3FC0\n2200\n3FE0\n2040\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_552F\nENCODING 21807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nF480\n97E0\n9C80\n97E0\n9480\nF7E0\n9480\n0480\n07E0\n0400\nENDCHAR\nSTARTCHAR U_5530\nENCODING 21808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FA0\n08A0\nEFA0\nAA20\nAA20\nAFA0\nEAA0\n0AA0\n1BA0\n1220\n2260\nENDCHAR\nSTARTCHAR U_5531\nENCODING 21809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n97C0\n9440\n97C0\n9000\nFFE0\n0820\n0FE0\n0820\n0FE0\nENDCHAR\nSTARTCHAR U_5532\nENCODING 21810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF6E0\n9420\n96E0\n9420\n9420\nF7E0\n9280\n02A0\n04A0\n1860\nENDCHAR\nSTARTCHAR U_5533\nENCODING 21811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA820\nAFE0\nA940\nA920\nEFE0\n0900\n1280\n2440\n4820\nENDCHAR\nSTARTCHAR U_5534\nENCODING 21812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nF280\n9FE0\n9100\n97C0\n9100\nFFE0\n9280\n02A0\n04A0\n1860\nENDCHAR\nSTARTCHAR U_5535\nENCODING 21813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\nA500\nAA80\nBFC0\nAAA0\nEF80\nAA80\n0FA0\n0220\n01E0\nENDCHAR\nSTARTCHAR U_5536\nENCODING 21814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n9280\n9280\n9FE0\n9000\n97C0\nF440\n07C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_5537\nENCODING 21815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9440\n9FE0\n9000\n97C0\nF440\n97C0\n0440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_5538\nENCODING 21816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE500\nAA80\nB160\nAF80\nA100\nE600\nA240\n1520\n1460\n23C0\nENDCHAR\nSTARTCHAR U_5539\nENCODING 21817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nE480\nBE80\nA940\nAE20\nAA80\nEA40\nAA00\n0A80\n1240\n2420\nENDCHAR\nSTARTCHAR U_553A\nENCODING 21818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n0280\nEFE0\nAAA0\nAFE0\nAAA0\nAAA0\nFFE0\n0280\n0440\n0820\nENDCHAR\nSTARTCHAR U_553B\nENCODING 21819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9100\n9540\n9540\n9BA0\n9100\nF380\n0540\n0920\n1120\nENDCHAR\nSTARTCHAR U_553C\nENCODING 21820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA440\nA280\nAFE0\nA200\nFFE0\nA240\n0480\n0300\n1CE0\nENDCHAR\nSTARTCHAR U_553D\nENCODING 21821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0460\nE580\nBF00\nA5E0\nAF40\nAD40\nED40\n1540\n2540\n0640\nENDCHAR\nSTARTCHAR U_553E\nENCODING 21822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF700\n9100\n9FE0\n9540\n9FE0\nF540\n9540\n0FE0\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_553F\nENCODING 21823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF7E0\n9AA0\n92A0\n9520\n92C0\nF400\n9340\n0AA0\n0A60\n11C0\nENDCHAR\nSTARTCHAR U_5540\nENCODING 21824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE880\nA880\nABE0\nA880\nABE0\nE880\nABE0\n0880\n1080\n27E0\nENDCHAR\nSTARTCHAR U_5541\nENCODING 21825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE920\nABA0\nA920\nAFE0\nA820\nEBA0\n0AA0\n0BA0\n1020\n2060\nENDCHAR\nSTARTCHAR U_5542\nENCODING 21826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0680\nF880\nAA80\nB480\nA080\nAE80\nA480\nE680\nBCA0\n04A0\n0C60\nENDCHAR\nSTARTCHAR U_5543\nENCODING 21827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF5E0\n9500\n9FE0\n9000\n97C0\nF440\n97C0\n0440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_5544\nENCODING 21828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF100\n9200\n9520\n9B40\n9580\nFD40\n9340\n0520\n0920\n1300\nENDCHAR\nSTARTCHAR U_5545\nENCODING 21829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01E0\nF100\n97C0\n9440\n97C0\n9440\nF7C0\n9100\n0FE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_5546\nENCODING 21830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n7FC0\n4A40\n5140\n7FC0\n5140\n5F40\n5140\n40C0\nENDCHAR\nSTARTCHAR U_5547\nENCODING 21831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\nFFE0\n1100\n7FC0\n4840\n7F40\n4840\n5E40\n5240\n5EC0\nENDCHAR\nSTARTCHAR U_5548\nENCODING 21832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9100\n9FE0\n9440\n9280\n97C0\nF100\n0FE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_5549\nENCODING 21833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nE480\nBFE0\nA480\nA480\nAEC0\nADA0\nF6A0\n0480\n0480\n0480\nENDCHAR\nSTARTCHAR U_554A\nENCODING 21834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BE0\nE820\nA820\nB3A0\nAAA0\nAAA0\nEBA0\nB820\n2020\n2020\n20E0\nENDCHAR\nSTARTCHAR U_554B\nENCODING 21835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nEF20\nA920\nA4C0\nA100\nAFE0\nA100\nE380\n0540\n1920\n0100\nENDCHAR\nSTARTCHAR U_554C\nENCODING 21836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0100\nEFE0\nA820\nB280\nA440\nA820\nE7C0\n8100\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_554D\nENCODING 21837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA440\nA7C0\nA000\nAFC0\nE080\nAFE0\n0100\n0100\n0700\nENDCHAR\nSTARTCHAR U_554E\nENCODING 21838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7100\nA7C0\n2140\n2140\nFFE0\n2000\n27E0\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_554F\nENCODING 21839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8020\n9F20\n9120\n9120\n9F20\n8060\nENDCHAR\nSTARTCHAR U_5550\nENCODING 21840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n9FE0\n9440\n9440\n9AA0\n9100\nFFE0\n0100\n0100\n0100\nENDCHAR\nSTARTCHAR U_5551\nENCODING 21841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE100\nAFC0\nA140\nBFE0\nA140\nAFC0\nE900\n09E0\n1500\n23E0\nENDCHAR\nSTARTCHAR U_5552\nENCODING 21842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE820\nAFE0\nA880\nAAA0\nAAA0\nABE0\nE880\n0CA0\n14A0\n27E0\nENDCHAR\nSTARTCHAR U_5553\nENCODING 21843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7BE0\n4A40\n7D40\n4080\n4140\n4220\nBFC0\n2040\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_5554\nENCODING 21844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n7D00\n47E0\n7D20\n41C0\n4720\n80E0\n3FA0\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_5555\nENCODING 21845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nEFE0\nB420\nA7A0\nAA20\nBFE0\nE220\nAAA0\n0FA0\n0020\n00C0\nENDCHAR\nSTARTCHAR U_5556\nENCODING 21846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0120\nF540\n9580\n9A80\n9540\n9920\nF540\n0580\n0A80\n0440\n1820\nENDCHAR\nSTARTCHAR U_5557\nENCODING 21847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE3C0\nA440\nAA80\nBCE0\nA820\nE820\nAEE0\n0820\n0FE0\n0820\nENDCHAR\nSTARTCHAR U_5558\nENCODING 21848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA820\nA5C0\nAF40\nAB40\nB740\nE5C0\n8500\n0920\n10E0\nENDCHAR\nSTARTCHAR U_5559\nENCODING 21849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1240\n5B80\n5200\n5220\nF9E0\n0000\n7BC0\n4A40\n4A40\n7BC0\nENDCHAR\nSTARTCHAR U_555A\nENCODING 21850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n0400\nFFE0\n0400\n7FC0\n4040\n5F40\n5140\n7FC0\nENDCHAR\nSTARTCHAR U_555B\nENCODING 21851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFE0\nA200\nAFC0\nA240\nBFE0\nE240\n9FE0\n0480\n0300\n0CC0\nENDCHAR\nSTARTCHAR U_555C\nENCODING 21852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1EE0\nE220\nACC0\nA440\nAAA0\nB100\nBEE0\nAAA0\nE440\n0AA0\n1120\nENDCHAR\nSTARTCHAR U_555D\nENCODING 21853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1E00\nE5E0\nA520\nBF20\nA520\nAF20\nAD20\nF520\n15E0\n2400\n0400\nENDCHAR\nSTARTCHAR U_555E\nENCODING 21854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE280\nA280\nAEE0\nA820\nA820\nAEE0\nE280\n0280\n0280\n1FE0\nENDCHAR\nSTARTCHAR U_555F\nENCODING 21855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7D00\n45E0\n7D40\n4340\n5D40\n5540\n5480\n9480\n9D40\n8220\nENDCHAR\nSTARTCHAR U_5560\nENCODING 21856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n18E0\n6300\n4200\n7BE0\n5240\n5240\n9440\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_5561\nENCODING 21857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n9EE0\n9280\n9280\n9EE0\n9280\nF280\n8EE0\n0280\n0280\nENDCHAR\nSTARTCHAR U_5562\nENCODING 21858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE100\nA100\nAFE0\nA920\nADA0\nAB60\nEDA0\nA920\n0920\n0960\nENDCHAR\nSTARTCHAR U_5563\nENCODING 21859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nEEE0\nB4A0\nA4A0\nBEA0\nA4A0\nE6A0\n14A0\n16E0\n1880\n0080\nENDCHAR\nSTARTCHAR U_5564\nENCODING 21860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFE0\nA920\nAFE0\nA920\nAFE0\nE280\nA480\n1FE0\n0080\n0080\nENDCHAR\nSTARTCHAR U_5565\nENCODING 21861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF280\n9440\n9BA0\n9100\n9FE0\n9100\nF7C0\n0440\n0440\n07C0\nENDCHAR\nSTARTCHAR U_5566\nENCODING 21862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nE480\nBFE0\nA400\nA640\nA540\nED40\nB540\n0480\n07E0\n1C00\nENDCHAR\nSTARTCHAR U_5567\nENCODING 21863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nA7C0\nA100\nAFE0\nE440\nA540\n0540\n0280\n1C60\nENDCHAR\nSTARTCHAR U_5568\nENCODING 21864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEF80\nA200\nAF80\nA200\nBFE0\nA880\nEF80\n0880\n0F80\n0880\nENDCHAR\nSTARTCHAR U_5569\nENCODING 21865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nEE80\nA480\nBE80\nA0C0\nA4A0\nAE80\nE480\n0680\n1880\n0080\nENDCHAR\nSTARTCHAR U_556A\nENCODING 21866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nE480\nBFE0\nA520\nA520\nA720\nEDE0\nB520\n0520\n0520\n1DE0\nENDCHAR\nSTARTCHAR U_556B\nENCODING 21867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFA0\nA240\nBFE0\nA200\nA7C0\nEC40\n9440\n27C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_556C\nENCODING 21868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n2480\n1500\n7FE0\n0000\n3FC0\n2940\n2F40\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_556D\nENCODING 21869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nE440\nBFE0\nA840\nB5E0\nBE80\nE4E0\nA620\n1D40\n0480\n0440\nENDCHAR\nSTARTCHAR U_556E\nENCODING 21870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE5E0\nA500\nBFE0\nA100\nA920\nA920\nEAA0\n0C60\n0820\n0FE0\nENDCHAR\nSTARTCHAR U_556F\nENCODING 21871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE820\nAFE0\nA920\nAFE0\nA9A0\nA960\nEFE0\n0820\n0820\n0FE0\nENDCHAR\nSTARTCHAR U_5570\nENCODING 21872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nEAA0\nAAA0\nAFE0\nA200\nA7C0\nE440\n8B40\n1080\n0100\n0E00\nENDCHAR\nSTARTCHAR U_5571\nENCODING 21873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0920\nE920\nAFE0\nA000\nBFE0\nA200\nE7E0\nAC20\n1420\n27E0\nENDCHAR\nSTARTCHAR U_5572\nENCODING 21874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n0440\nE880\nAEE0\nAB20\nAA20\nAEA0\nAA60\nEA20\nAA20\n0E60\nENDCHAR\nSTARTCHAR U_5573\nENCODING 21875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\n0540\nEFE0\nA100\nAFE0\nA280\nA7C0\nECA0\n9580\n2420\n03E0\nENDCHAR\nSTARTCHAR U_5574\nENCODING 21876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n0280\nEFE0\nA920\nAFE0\nA920\nAFE0\nA100\nFFE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_5575\nENCODING 21877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nE7E0\nA2A0\nB280\nABE0\nA220\nA720\nBAC0\nEA80\n0D40\n0A20\nENDCHAR\nSTARTCHAR U_5576\nENCODING 21878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n9FE0\n9820\n97C0\n9100\n9100\nF5C0\n0500\n0B00\n11E0\nENDCHAR\nSTARTCHAR U_5577\nENCODING 21879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n04E0\nEEA0\nAAA0\nAEA0\nAAC0\nAEA0\nE8A0\nAAA0\n0DE0\n0880\n0080\nENDCHAR\nSTARTCHAR U_5578\nENCODING 21880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFC0\nA140\nBFE0\nA140\nAFC0\nE920\nABA0\n0D60\n1120\n2120\nENDCHAR\nSTARTCHAR U_5579\nENCODING 21881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE840\nAFC0\nA900\nA900\nAFE0\nE900\nAFC0\n1440\n1440\n27C0\nENDCHAR\nSTARTCHAR U_557A\nENCODING 21882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nE480\nA780\nA480\nBFE0\nA400\nEFC0\n1540\n0A40\n1540\n0880\nENDCHAR\nSTARTCHAR U_557B\nENCODING 21883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\nFFE0\n8420\n3F80\n2480\n0400\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_557C\nENCODING 21884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA440\nA280\nAFE0\nA920\nA7C0\nE540\n0540\n05C0\n0100\nENDCHAR\nSTARTCHAR U_557D\nENCODING 21885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF280\n97C0\n9820\n97C0\n9440\nF7C0\n9280\n1FE0\n0280\n0C80\nENDCHAR\nSTARTCHAR U_557E\nENCODING 21886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C80\nF880\nAAA0\nBEC0\nAA80\nAC80\nEA80\n1880\n2940\n0A20\n0C20\nENDCHAR\nSTARTCHAR U_557F\nENCODING 21887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFFE0\n9440\n97C0\n9440\n97C0\nF440\n9FE0\n0A80\n0C40\n0FE0\nENDCHAR\nSTARTCHAR U_5580\nENCODING 21888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA820\nA7C0\nAC40\nA380\nA440\nEFE0\n0440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_5581\nENCODING 21889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF540\n97C0\n9540\n97C0\n9100\nFFE0\n9960\n0FA0\n0820\n0860\nENDCHAR\nSTARTCHAR U_5582\nENCODING 21890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF540\n97C0\n9540\n97C0\n9000\nFFE0\n9540\n0480\n0540\n0E20\nENDCHAR\nSTARTCHAR U_5583\nENCODING 21891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nAFE0\nAAA0\nA920\nAFE0\nE920\n0FE0\n0920\n0860\nENDCHAR\nSTARTCHAR U_5584\nENCODING 21892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0400\n7FC0\n0400\nFFE0\n1100\nFFE0\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_5585\nENCODING 21893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n97C0\n9440\n97C0\n9100\n9FE0\nF440\n9240\n0280\n1FE0\nENDCHAR\nSTARTCHAR U_5586\nENCODING 21894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFBE0\n2080\n2080\nFBE0\n0000\nFBE0\n8A20\n8A20\nFBE0\nENDCHAR\nSTARTCHAR U_5587\nENCODING 21895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0420\nFF20\nA4A0\nBFA0\nB5A0\nB5A0\nFFA0\nA4A0\n0E20\n1520\n2460\nENDCHAR\nSTARTCHAR U_5588\nENCODING 21896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nE8A0\nAEC0\nA8A0\nAEE0\nBA00\nE7C0\nA440\n07C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_5589\nENCODING 21897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0BC0\nE840\nAFE0\nBA00\nABE0\nAC80\nE880\nAFE0\n0880\n0940\n0A20\nENDCHAR\nSTARTCHAR U_558A\nENCODING 21898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nE0A0\nAFE0\nA880\nAEA0\nA8A0\nEEC0\nAA80\n0EA0\n1160\n2220\nENDCHAR\nSTARTCHAR U_558B\nENCODING 21899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nFFE0\n9540\n95C0\n9400\n97E0\nF100\n9FE0\n0580\n0940\n1120\nENDCHAR\nSTARTCHAR U_558C\nENCODING 21900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4A20\n4A20\n7BE0\n0000\n1220\n5B20\n56A0\n9220\n2220\n4220\nENDCHAR\nSTARTCHAR U_558D\nENCODING 21901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n02A0\nEAC0\nAB80\nAAA0\nABA0\nBC60\nE100\nAFE0\n0580\n0940\n1120\nENDCHAR\nSTARTCHAR U_558E\nENCODING 21902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE440\nA740\nA540\nAFE0\nA820\nEBA0\nAAA0\n0BA0\n0820\n0860\nENDCHAR\nSTARTCHAR U_558F\nENCODING 21903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\nA480\nA200\nBFE0\nA400\nE7C0\nAC40\n1440\n27C0\n0440\nENDCHAR\nSTARTCHAR U_5590\nENCODING 21904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE4E0\nBFA0\nA8A0\nAEC0\nBAA0\nEEA0\n8AA0\n0EC0\n0A80\n0A80\nENDCHAR\nSTARTCHAR U_5591\nENCODING 21905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9440\n9280\n9FE0\n9000\nF7C0\n9440\n07C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_5592\nENCODING 21906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nEF80\nAAC0\nBAA0\nA500\nA8E0\nF7C0\nA440\n07C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_5593\nENCODING 21907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE280\nAFE0\nAAA0\nAFE0\nA200\nEFE0\nA440\n0380\n0140\n0E20\nENDCHAR\nSTARTCHAR U_5594\nENCODING 21908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE820\nAFE0\nA800\nAFE0\nAA40\nEFE0\nA900\n0FC0\n1100\n2FE0\nENDCHAR\nSTARTCHAR U_5595\nENCODING 21909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE100\nA200\nAFE0\nAAA0\nABA0\nAAA0\nEBA0\nAAA0\n0FE0\n0820\nENDCHAR\nSTARTCHAR U_5596\nENCODING 21910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nE480\nBE80\nA5E0\nAC80\nAE80\nF5E0\nA520\n0520\n05E0\n0520\nENDCHAR\nSTARTCHAR U_5597\nENCODING 21911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE920\nB7C0\nA100\nA7C0\nE7C0\n8540\n07C0\n0100\n1FE0\n0100\nENDCHAR\nSTARTCHAR U_5598\nENCODING 21912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE920\nAFE0\nA000\nAFE0\nA200\nEFE0\nAAA0\n0AA0\n0AA0\n0860\nENDCHAR\nSTARTCHAR U_5599\nENCODING 21913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n07C0\nE880\nBFE0\nA200\nAD20\nA340\nED80\n0340\n1D20\n0300\nENDCHAR\nSTARTCHAR U_559A\nENCODING 21914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nE480\nA900\nBFC0\nAB40\nACC0\nEA40\n1FE0\n0280\n0440\n1820\nENDCHAR\nSTARTCHAR U_559B\nENCODING 21915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n1E40\nEA80\nBFC0\nA400\nBFE0\nA400\nE7C0\n8A80\n1100\n26E0\nENDCHAR\nSTARTCHAR U_559C\nENCODING 21916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n2080\n3F80\n1100\nFFE0\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_559D\nENCODING 21917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE840\nAFC0\nA840\nAFC0\nA400\nEFE0\n1920\n0AA0\n0F20\n00C0\nENDCHAR\nSTARTCHAR U_559E\nENCODING 21918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nEEE0\nAAA0\nAEA0\nAAA0\nAEA0\nE8A0\nAEA0\n08C0\n0A80\n0680\nENDCHAR\nSTARTCHAR U_559F\nENCODING 21919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE920\nAFE0\nA920\nAFE0\nA440\nE7C0\nA440\n07C0\n0440\n04C0\nENDCHAR\nSTARTCHAR U_55A0\nENCODING 21920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE200\nBFE0\nAA40\nAFC0\nAA40\nEFC0\n8200\n0FC0\n0200\n1FE0\nENDCHAR\nSTARTCHAR U_55A1\nENCODING 21921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFC0\n9240\n9FE0\n9440\n97C0\nF080\n9FE0\n9480\n0FE0\n0080\nENDCHAR\nSTARTCHAR U_55A2\nENCODING 21922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nE700\nA100\nAFE0\nA100\nADE0\nA920\nED60\n0920\n0FE0\n0820\nENDCHAR\nSTARTCHAR U_55A3\nENCODING 21923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF3E0\n9420\n9BA0\n92A0\n93A0\nF020\n00C0\n5240\n4920\n8920\nENDCHAR\nSTARTCHAR U_55A4\nENCODING 21924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9440\n97C0\n9440\n9FE0\nF100\n97C0\n0100\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_55A5\nENCODING 21925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nAA40\nAFE0\nAA40\nABC0\nE800\nAFE0\n0A40\n1180\n2660\nENDCHAR\nSTARTCHAR U_55A6\nENCODING 21926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1080\n1F80\n0000\nF1E0\n9520\nF5E0\n0400\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_55A7\nENCODING 21927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA820\nAFE0\nA000\nA7C0\nA440\nE7C0\nA440\n0440\n0FE0\nENDCHAR\nSTARTCHAR U_55A8\nENCODING 21928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9440\n97C0\n9000\n9FE0\nF820\n9380\n02A0\n04A0\n0860\nENDCHAR\nSTARTCHAR U_55A9\nENCODING 21929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE500\nA880\nB760\nA000\nBD40\nF540\n9E80\n1680\n1D40\n1540\nENDCHAR\nSTARTCHAR U_55AA\nENCODING 21930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n75C0\n5540\n75C0\n0400\nFFE0\n2140\n2880\n3060\nENDCHAR\nSTARTCHAR U_55AB\nENCODING 21931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n05E0\nFEA0\nA4A0\nBEA0\nA520\nBEC0\nE200\nBFE0\n0200\n0D80\n3060\nENDCHAR\nSTARTCHAR U_55AC\nENCODING 21932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0800\nFFE0\n2080\nDF60\n1100\n7FC0\n4040\n4F40\n4940\n4FC0\nENDCHAR\nSTARTCHAR U_55AD\nENCODING 21933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA280\nAFE0\nA880\nA900\nEE40\nA980\n0E60\n1080\n2F00\nENDCHAR\nSTARTCHAR U_55AE\nENCODING 21934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\n4920\n4920\n7FE0\n2240\n3FC0\n2240\n3FC0\n0200\n7FE0\n0200\nENDCHAR\nSTARTCHAR U_55AF\nENCODING 21935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n1FC0\nE480\nBA60\nAFC0\nA200\nEA80\nBFE0\n0880\n0880\n3080\nENDCHAR\nSTARTCHAR U_55B0\nENCODING 21936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0280\nF540\n9FE0\n9440\n97C0\nF440\n87C0\n0560\n0480\n0660\nENDCHAR\nSTARTCHAR U_55B1\nENCODING 21937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE800\nABE0\nAAA0\nABE0\nAAA0\nEBE0\nA880\n0BE0\n1080\n27E0\nENDCHAR\nSTARTCHAR U_55B2\nENCODING 21938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nE480\nA8E0\nBB20\nA420\nAB20\nBEA0\nE0A0\n0A20\n1520\n15C0\nENDCHAR\nSTARTCHAR U_55B3\nENCODING 21939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9540\n9920\n97C0\n9440\nF7C0\n9440\n07C0\n0000\n1FE0\nENDCHAR\nSTARTCHAR U_55B4\nENCODING 21940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n02A0\nEAC0\nAB80\nAAA0\nBFE0\nA100\nE100\nAFE0\n0580\n0940\n1120\nENDCHAR\nSTARTCHAR U_55B5\nENCODING 21941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n9FE0\n9280\n97E0\n9520\nF520\n97E0\n0520\n07E0\n0420\nENDCHAR\nSTARTCHAR U_55B6\nENCODING 21942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2500\nFFC0\n8040\nBF40\n2100\n3F00\n0000\n7F80\n4080\n7F80\nENDCHAR\nSTARTCHAR U_55B7\nENCODING 21943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA540\nAFE0\nA440\nAFE0\nE820\nA920\n0920\n0280\n0C60\nENDCHAR\nSTARTCHAR U_55B8\nENCODING 21944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\n4440\n7FC0\n4440\n7FC0\n4440\n0280\n7B00\n4A40\n79C0\nENDCHAR\nSTARTCHAR U_55B9\nENCODING 21945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9280\n9540\n9FE0\n9100\nFFE0\n9100\n07C0\n0100\n1FE0\nENDCHAR\nSTARTCHAR U_55BA\nENCODING 21946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n04C0\nE700\nA900\nAA40\nBBC0\nA920\nEBC0\nA880\n0AC0\n0CA0\n0920\nENDCHAR\nSTARTCHAR U_55BB\nENCODING 21947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0300\nE480\nBB60\nA000\nAE20\nAAA0\nEEA0\nAAA0\n0EA0\n0A20\n0AE0\nENDCHAR\nSTARTCHAR U_55BC\nENCODING 21948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\n0900\nF7C0\n9040\n97C0\n9040\nF7C0\n8200\n0D40\n1460\n03C0\nENDCHAR\nSTARTCHAR U_55BD\nENCODING 21949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nF540\n9FE0\n9380\n9540\n9920\nFFE0\n9240\n0680\n0140\n0E20\nENDCHAR\nSTARTCHAR U_55BE\nENCODING 21950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n1280\n7FE0\n5220\n1F80\n2200\n7FE0\n0000\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_55BF\nENCODING 21951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2080\nFFE0\n8A20\nFBE0\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_55C0\nENCODING 21952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\n7D40\n1140\nFE60\n8400\n7BC0\n0140\n7940\n4880\n7940\n4A20\nENDCHAR\nSTARTCHAR U_55C1\nENCODING 21953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE900\nA9C0\nA900\nABE0\nAAA0\nEBC0\nAA80\n15C0\n1540\n2A60\nENDCHAR\nSTARTCHAR U_55C2\nENCODING 21954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\n0C40\nEA40\nA580\nA200\nA7C0\nA900\nEFE0\nA100\n0920\n0FE0\nENDCHAR\nSTARTCHAR U_55C3\nENCODING 21955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA440\nA7C0\nA000\nAFE0\nE820\nABA0\n0AA0\n0BA0\n0860\nENDCHAR\nSTARTCHAR U_55C4\nENCODING 21956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nE200\nA7C0\nA440\nA740\nA5C0\nE440\nAFE0\n1480\n0300\n1CE0\nENDCHAR\nSTARTCHAR U_55C5\nENCODING 21957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n07C0\nF440\n9740\n95C0\n9440\n97C0\nF140\n9FE0\n0280\n0C60\nENDCHAR\nSTARTCHAR U_55C6\nENCODING 21958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0300\nE680\nA940\nBFA0\nA880\nAF80\nE880\nAFC0\n0C40\n17C0\n2440\nENDCHAR\nSTARTCHAR U_55C7\nENCODING 21959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n5540\nFFE0\n0000\n3FC0\n2940\n2F40\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_55C8\nENCODING 21960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nFA80\n9540\n97C0\n9440\n9FC0\nFA40\n9A40\n0FC0\n0820\n07E0\nENDCHAR\nSTARTCHAR U_55C9\nENCODING 21961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF100\n97C0\n9100\n9FE0\n9240\nFF80\n9440\n0FA0\n0540\n1B20\nENDCHAR\nSTARTCHAR U_55CA\nENCODING 21962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF100\n9FE0\n9440\n97C0\n9440\nF7C0\n9440\n07C0\n0280\n0C60\nENDCHAR\nSTARTCHAR U_55CB\nENCODING 21963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFC0\nA440\nBFE0\nAAA0\nBFC0\nE840\nAFC0\n0840\n0FC0\n0840\nENDCHAR\nSTARTCHAR U_55CC\nENCODING 21964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0840\nE480\nBFE0\nA280\nA440\nA820\nBFE0\nEAA0\nAAA0\n0AA0\n1FE0\nENDCHAR\nSTARTCHAR U_55CD\nENCODING 21965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0BE0\nE520\nBF20\nA520\nB5E0\nB520\nFF20\nA5E0\n0520\n0A20\n14E0\nENDCHAR\nSTARTCHAR U_55CE\nENCODING 21966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE900\nAFC0\nA900\nAFC0\nA900\nEFE0\nA020\n0D20\n0AA0\n12C0\nENDCHAR\nSTARTCHAR U_55CF\nENCODING 21967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\n9480\n9300\n9480\n9960\nF100\n9FE0\n0580\n0940\n1320\nENDCHAR\nSTARTCHAR U_55D0\nENCODING 21968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA920\nA7C0\nA100\nA7C0\nE100\n1FE0\n0440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_55D1\nENCODING 21969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE7C0\nA100\nAFE0\nA440\nAFA0\nA000\nEFE0\nAAA0\n0AA0\n1FE0\nENDCHAR\nSTARTCHAR U_55D2\nENCODING 21970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\n9480\n9380\n9440\n9BA0\nF000\n97C0\n0440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_55D3\nENCODING 21971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE480\nA300\nBFE0\nAAA0\nA440\nEBA0\n0100\n1FE0\n0540\n0920\nENDCHAR\nSTARTCHAR U_55D4\nENCODING 21972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9440\n97C0\n9440\n9740\nF5C0\n9440\n0FE0\n0280\n0C60\nENDCHAR\nSTARTCHAR U_55D5\nENCODING 21973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE800\nABC0\nA800\nAFE0\nAAA0\nEB40\nAA60\n0FE0\n1440\n22C0\nENDCHAR\nSTARTCHAR U_55D6\nENCODING 21974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0300\nED60\nA920\nAF60\nA920\nAFE0\nE100\nAFE0\n0440\n0380\n1C60\nENDCHAR\nSTARTCHAR U_55D7\nENCODING 21975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE440\nA740\nA540\nAFE0\nF460\n87C0\n0440\n07C0\n0440\n04C0\nENDCHAR\nSTARTCHAR U_55D8\nENCODING 21976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00E0\n0F00\nF520\n92C0\n97C0\n9280\nF7C0\n9100\n8FE0\n0280\n1C60\nENDCHAR\nSTARTCHAR U_55D9\nENCODING 21977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9440\n9280\n9FE0\n9920\nFFE0\n9200\n03C0\n0440\n1980\nENDCHAR\nSTARTCHAR U_55DA\nENCODING 21978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\nA840\nAFC0\nA800\nAFE0\nE800\nAFE0\n0020\n0AA0\n1540\nENDCHAR\nSTARTCHAR U_55DB\nENCODING 21979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nFFE0\nA500\nAFC0\nA540\nBFE0\nE540\nAFC0\n0500\n0D40\n1520\nENDCHAR\nSTARTCHAR U_55DC\nENCODING 21980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n9140\n9FE0\n9380\n9D20\nF7E0\n9440\n07C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_55DD\nENCODING 21981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE440\nA7C0\nA000\nAFE0\nAAA0\nE920\nAFE0\n0920\n0920\n0860\nENDCHAR\nSTARTCHAR U_55DE\nENCODING 21982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n0280\nEFE0\nA240\nA440\nA480\nA9A0\nE640\nA240\n05A0\n0EE0\nENDCHAR\nSTARTCHAR U_55DF\nENCODING 21983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nF280\n9FE0\n9100\n97C0\n9100\nFFE0\n9400\n0FC0\n1100\n2FE0\nENDCHAR\nSTARTCHAR U_55E0\nENCODING 21984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1A00\nE7C0\nAA40\n5440\n7A80\n0900\n1280\nFFE0\n1440\n5440\n27C0\nENDCHAR\nSTARTCHAR U_55E1\nENCODING 21985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nEA40\nB4A0\nAFC0\nA000\nAEE0\nF320\nAAA0\n0EE0\n1320\n0660\nENDCHAR\nSTARTCHAR U_55E2\nENCODING 21986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n97C0\n9440\n97C0\n9000\nFFE0\n9AA0\n0AA0\n0AA0\n1FE0\nENDCHAR\nSTARTCHAR U_55E3\nENCODING 21987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4820\n7BA0\n0020\nFBA0\nAAA0\nAAA0\nFBA0\nA820\nA820\n98E0\nENDCHAR\nSTARTCHAR U_55E4\nENCODING 21988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\n0920\nEFE0\nA100\nBFE0\nA100\nAFE0\nE920\n0FE0\n0120\n1FE0\nENDCHAR\nSTARTCHAR U_55E5\nENCODING 21989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n07C0\nE440\nA7C0\nA440\nBFE0\nA540\nE920\n17C0\n0100\n0100\nENDCHAR\nSTARTCHAR U_55E6\nENCODING 21990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nBFE0\nB2A0\nAF00\nE240\nAFA0\n0540\n0920\n1320\nENDCHAR\nSTARTCHAR U_55E7\nENCODING 21991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n2A20\n5FE0\n8900\n3F80\nC060\n7FC0\n4A40\n7FC0\n4A40\nENDCHAR\nSTARTCHAR U_55E8\nENCODING 21992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n0BE0\nE400\nB3E0\nAAA0\nA2A0\nA7E0\nFAA0\n0BE0\n0820\n08C0\nENDCHAR\nSTARTCHAR U_55E9\nENCODING 21993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\n0540\nEFE0\nA820\nAFE0\nA820\nAFE0\nE820\n0FE0\n0440\n0820\nENDCHAR\nSTARTCHAR U_55EA\nENCODING 21994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nAFC0\nA200\nBFE0\nE540\n0920\n1FE0\n0540\n1920\nENDCHAR\nSTARTCHAR U_55EB\nENCODING 21995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE440\nA7C0\nA440\nA7C0\nA440\nFFE0\n0AA0\n0440\n0AA0\n1120\nENDCHAR\nSTARTCHAR U_55EC\nENCODING 21996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n1FE0\nE480\nA800\nAFE0\nB040\nB740\nF540\n1740\n1040\n10C0\nENDCHAR\nSTARTCHAR U_55ED\nENCODING 21997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n3F80\n2880\n2480\nFFE0\n0240\n7B80\n4A20\n79E0\nENDCHAR\nSTARTCHAR U_55EE\nENCODING 21998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BE0\nE940\nA940\nABE0\nBAA0\nAAA0\nAAA0\nEB60\n3A20\n2BE0\n0220\nENDCHAR\nSTARTCHAR U_55EF\nENCODING 21999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE920\nAFE0\nA920\nAAA0\nAFE0\nE000\n0540\n1520\n1460\n03C0\nENDCHAR\nSTARTCHAR U_55F0\nENCODING 22000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n2FE0\nE920\nAFE0\nA920\nABA0\nAAA0\nEAA0\n2BA0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_55F1\nENCODING 22001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0300\n0480\nFB40\nA7A0\nA480\nA780\nA100\nE7C0\n0100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_55F2\nENCODING 22002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nEAA0\nA100\nAEE0\nA380\nA480\nEBE0\nA240\n0D80\n0100\n0E00\nENDCHAR\nSTARTCHAR U_55F3\nENCODING 22003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00E0\nEF20\nA540\nAFE0\nB220\nAFC0\nE400\n07C0\n0A80\n1100\n0EE0\nENDCHAR\nSTARTCHAR U_55F4\nENCODING 22004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n0FE0\nE100\nA7C0\nA100\nBFE0\nA340\nE3A0\n05E0\n0520\n18E0\nENDCHAR\nSTARTCHAR U_55F5\nENCODING 22005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n0940\nE3E0\nA2A0\nBBE0\nAAA0\nABE0\nEAA0\n0AE0\n1400\n23E0\nENDCHAR\nSTARTCHAR U_55F6\nENCODING 22006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF540\n97C0\n9540\n9FE0\n9540\nFFE0\n9540\n0FE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_55F7\nENCODING 22007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n1E80\nE480\nBEE0\nA520\nBF20\nA8A0\nEE40\n0A40\n12A0\n2520\nENDCHAR\nSTARTCHAR U_55F8\nENCODING 22008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n23E0\nFD40\n2140\n3880\n4940\n9220\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_55F9\nENCODING 22009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n17E0\nE880\nA3E0\nBAA0\nABE0\nAAA0\nEFE0\n0880\n1480\n23E0\nENDCHAR\nSTARTCHAR U_55FA\nENCODING 22010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0920\nEFE0\nA500\nAFE0\nB900\nAFC0\nE900\n0FC0\n0900\n0FE0\nENDCHAR\nSTARTCHAR U_55FB\nENCODING 22011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA800\nAA40\nAFE0\nAA40\nABC0\nE800\n1540\n16A0\n2AA0\nENDCHAR\nSTARTCHAR U_55FC\nENCODING 22012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n1FE0\nE480\nAFC0\nAA40\nA940\nAFC0\nE200\n1FE0\n0480\n1860\nENDCHAR\nSTARTCHAR U_55FD\nENCODING 22013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n3E80\nE8E0\nBF20\nAAC0\nAA80\nBE80\nEC80\n1A80\n2940\n0A20\nENDCHAR\nSTARTCHAR U_55FE\nENCODING 22014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n0480\nFFE0\nA900\nAFE0\nAA80\nABE0\nEA80\n0B40\n1540\n2A20\nENDCHAR\nSTARTCHAR U_55FF\nENCODING 22015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0300\n0480\nEA40\nB7A0\nA100\nAFC0\nA840\nEFC0\n0840\n0FC0\n1860\nENDCHAR\nSTARTCHAR U_5600\nENCODING 22016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0FE0\nE480\nAFE0\nA920\nAFE0\nA920\nEBA0\n0AA0\n0BA0\n0860\nENDCHAR\nSTARTCHAR U_5601\nENCODING 22017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nE0A0\nAFE0\nAA80\nABA0\nAAA0\nAFA0\nEAC0\n0EA0\n1360\n2620\nENDCHAR\nSTARTCHAR U_5602\nENCODING 22018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE2E0\nAAA0\nAAA0\nAAA0\nEAE0\n0A00\nEAE0\nAEA0\nA2A0\nA2A0\nE2E0\nENDCHAR\nSTARTCHAR U_5603\nENCODING 22019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA940\nAFE0\nA940\nAFC0\nE900\n0FC0\n0D40\n17C0\n2540\nENDCHAR\nSTARTCHAR U_5604\nENCODING 22020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\nA840\nAFC0\nA840\nAFE0\nE220\n1FA0\n0760\n0A80\n3260\nENDCHAR\nSTARTCHAR U_5605\nENCODING 22021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nEA80\nAE80\nAA80\nAFE0\nA880\nEC80\n0B80\n0DA0\n0AA0\n0460\nENDCHAR\nSTARTCHAR U_5606\nENCODING 22022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\nE500\nAFC0\nAA40\nAFC0\nA200\nEFC0\n0200\n1FE0\n0480\n1860\nENDCHAR\nSTARTCHAR U_5607\nENCODING 22023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE480\nAFC0\nA480\nAFC0\nA500\nEA80\n1560\n0A80\n0100\n1E00\nENDCHAR\nSTARTCHAR U_5608\nENCODING 22024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\nAAA0\nAFE0\nAAA0\nAFE0\nE440\n07C0\n0440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_5609\nENCODING 22025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n2080\n3F80\n1100\nFFE0\n2A40\n4A40\n9BC0\nENDCHAR\nSTARTCHAR U_560A\nENCODING 22026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0940\nEFC0\nA000\nAFE0\nA900\nAFC0\nE900\n17C0\n1100\n2FE0\nENDCHAR\nSTARTCHAR U_560B\nENCODING 22027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nEF40\nA560\nBFA0\nA4A0\nAFA0\nF240\n0440\n1E40\n04A0\n0D20\nENDCHAR\nSTARTCHAR U_560C\nENCODING 22028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE280\nAFE0\nAAA0\nAFE0\nA000\nA7C0\nE000\n1FE0\n0940\n1320\nENDCHAR\nSTARTCHAR U_560D\nENCODING 22029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE7C0\nA540\nAFE0\nA540\nAFE0\nE920\n1FE0\n0280\n0380\n1C60\nENDCHAR\nSTARTCHAR U_560E\nENCODING 22030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n0200\nEFC0\nAA40\nA940\nAFC0\nA240\nFFE0\n0280\n0320\n1CE0\nENDCHAR\nSTARTCHAR U_560F\nENCODING 22031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4A20\nFA20\n4EE0\n4800\nEEE0\nA8A0\nA8A0\nEE40\nA8A0\n0B20\nENDCHAR\nSTARTCHAR U_5610\nENCODING 22032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1EE0\nEAA0\nA660\nAAA0\nA300\nA480\nFA60\n0500\n0A80\n0100\n0E00\nENDCHAR\nSTARTCHAR U_5611\nENCODING 22033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nE200\nAFE0\nAA20\nAF80\nAA40\nEFC0\n1540\n1FE0\n1100\n2300\nENDCHAR\nSTARTCHAR U_5612\nENCODING 22034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nE440\nAEE0\nA440\nAEE0\nA440\nEFE0\n0020\n0FE0\n0020\n0FE0\nENDCHAR\nSTARTCHAR U_5613\nENCODING 22035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\nE160\nBFE0\nA120\nBD20\nB560\nFDA0\n2120\n3AA0\n2460\n3FE0\nENDCHAR\nSTARTCHAR U_5614\nENCODING 22036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE800\nABC0\nAA40\nABC0\nA800\nEEE0\n0AA0\n0EE0\n0800\n0FE0\nENDCHAR\nSTARTCHAR U_5615\nENCODING 22037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE100\nA9C0\nA900\nBFE0\nA800\nEFC0\n0800\n0FE0\n1AA0\n2560\nENDCHAR\nSTARTCHAR U_5616\nENCODING 22038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nA7C0\nA100\nAFE0\nE440\n07C0\n0440\n07C0\n0C60\nENDCHAR\nSTARTCHAR U_5617\nENCODING 22039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nFFE0\n9120\n1F00\n2200\n2C40\n3FC0\n1080\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_5618\nENCODING 22040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nE200\nAFE0\nAA20\nAFC0\nAA20\nE9E0\nAA80\n1AA0\n26C0\n5FE0\nENDCHAR\nSTARTCHAR U_5619\nENCODING 22041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nEBE0\nA2A0\nBBC0\nA740\nAA80\nF540\n1FE0\n0480\n0300\n0CC0\nENDCHAR\nSTARTCHAR U_561A\nENCODING 22042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0BE0\nEA20\nB3E0\nAA20\nABE0\nB800\nEBE0\n0840\n0BE0\n0A40\n09C0\nENDCHAR\nSTARTCHAR U_561B\nENCODING 22043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n1FE0\nF480\n9480\n9FE0\n9480\nF6C0\n1DA0\n14A0\n2480\n4480\nENDCHAR\nSTARTCHAR U_561C\nENCODING 22044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\nA940\nA940\nB6A0\nA440\nFBA0\n0480\n0B00\n0280\n1C40\nENDCHAR\nSTARTCHAR U_561D\nENCODING 22045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0720\nEA60\nBFA0\nAAA0\nAFE0\nAAA0\nEFA0\n0AE0\n0AA0\n12A0\n21A0\nENDCHAR\nSTARTCHAR U_561E\nENCODING 22046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A80\nFE80\nABE0\nAEA0\nA4A0\nBFA0\nF5A0\n1FA0\n04A0\n1F20\n0560\nENDCHAR\nSTARTCHAR U_561F\nENCODING 22047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n08E0\nFDA0\nAAA0\nBFC0\nA4A0\nAEA0\nEAA0\n1EA0\n2AE0\n0E80\n0A80\nENDCHAR\nSTARTCHAR U_5620\nENCODING 22048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nE200\nA7C0\nA540\nA540\nBFE0\nF2A0\n0FC0\n0240\n01A0\n1E60\nENDCHAR\nSTARTCHAR U_5621\nENCODING 22049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0540\nEFE0\nA820\nA7C0\nA440\nA7C0\nE100\n07C0\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_5622\nENCODING 22050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3EE0\nEA20\nAAA0\nBE40\nABE0\nBE40\nE840\n1E40\n0840\n0E40\n30C0\nENDCHAR\nSTARTCHAR U_5623\nENCODING 22051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nE920\nAFE0\nA000\nAEE0\nAAA0\nEEE0\nAAA0\n0EE0\n12A0\n2760\nENDCHAR\nSTARTCHAR U_5624\nENCODING 22052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2220\nEAA0\nAAA0\nAAA0\nB540\nA220\nFFE0\n0480\n0300\n3CE0\nENDCHAR\nSTARTCHAR U_5625\nENCODING 22053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nEA80\nB2E0\nAA80\nBFE0\nA880\nEA80\n0AE0\n0A80\n0D80\n08E0\nENDCHAR\nSTARTCHAR U_5626\nENCODING 22054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n4040\nBFA0\n0A00\n3F80\n2A80\nFFE0\n0A00\n3580\nENDCHAR\nSTARTCHAR U_5627\nENCODING 22055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\nB220\nA980\nB520\nA6A0\nFB80\n0100\n0920\n0920\n0FE0\nENDCHAR\nSTARTCHAR U_5628\nENCODING 22056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\nA240\nBFE0\nA240\nAFC0\nF6C0\n1FC0\n1240\n2740\n4AC0\nENDCHAR\nSTARTCHAR U_5629\nENCODING 22057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n9280\n9FE0\n9540\n9FE0\n9540\nFFE0\n0100\n07C0\n0100\nENDCHAR\nSTARTCHAR U_562A\nENCODING 22058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nF4A0\nB4A0\nBFE0\nA840\nAFC0\nE840\n0FC0\n0840\n0FC0\n1860\nENDCHAR\nSTARTCHAR U_562B\nENCODING 22059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nE6C0\nAAA0\nB7E0\nAA80\nA480\nE940\n1220\n0000\n14A0\n14A0\nENDCHAR\nSTARTCHAR U_562C\nENCODING 22060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n97C0\n9440\n9FE0\n9A00\nFFE0\n0A20\n0F40\n0AC0\n1F20\nENDCHAR\nSTARTCHAR U_562D\nENCODING 22061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEF20\nA240\nAF80\nA020\nAF40\nE980\n0F20\n0940\n0680\n1F00\nENDCHAR\nSTARTCHAR U_562E\nENCODING 22062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n15A0\nEEC0\nA480\nAB40\nB220\nBFE0\nF220\n0FC0\n0240\n0440\n09C0\nENDCHAR\nSTARTCHAR U_562F\nENCODING 22063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA120\nBFE0\nA120\nAFE0\nA920\nEFE0\n0920\n1DE0\n25A0\nENDCHAR\nSTARTCHAR U_5630\nENCODING 22064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nEBA0\nBDC0\nAB40\nBFE0\nA940\nFFE0\nA940\n0CA0\n1160\n2620\nENDCHAR\nSTARTCHAR U_5631\nENCODING 22065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE820\nAFE0\nA900\nAFC0\nAD40\nEFC0\n1100\n1FE0\n2920\n4FE0\nENDCHAR\nSTARTCHAR U_5632\nENCODING 22066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n04E0\n1FA0\nE4A0\nAEE0\nAAA0\nAEA0\nEAE0\nAEA0\n04A0\n1F20\n0560\nENDCHAR\nSTARTCHAR U_5633\nENCODING 22067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\nAA40\nBFE0\nA840\nAFC0\nE840\n0FC0\n0840\n0FC0\n1860\nENDCHAR\nSTARTCHAR U_5634\nENCODING 22068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n02A0\nEBC0\nAAA0\nBFE0\nA480\nAFE0\nF920\n0FE0\n0920\n0FE0\n1120\nENDCHAR\nSTARTCHAR U_5635\nENCODING 22069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE7C0\nA100\nAFE0\nA480\nAFE0\nE480\n1FE0\n0280\n04A0\n1860\nENDCHAR\nSTARTCHAR U_5636\nENCODING 22070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0AE0\nFF80\nAA80\nAEE0\nAAA0\nAEA0\nEAA0\n1FA0\n0AA0\n1120\n2220\nENDCHAR\nSTARTCHAR U_5637\nENCODING 22071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\nA840\nAFC0\nA840\nAFC0\nEA40\n0680\n0A40\n1FE0\n0200\nENDCHAR\nSTARTCHAR U_5638\nENCODING 22072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nEFE0\nB540\nA540\nAFE0\nA540\nA540\nEFE0\n0D40\n0AA0\n12A0\nENDCHAR\nSTARTCHAR U_5639\nENCODING 22073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\nB4A0\nAFC0\nB8A0\nAF80\nE880\n0F80\n0A80\n1240\n2620\nENDCHAR\nSTARTCHAR U_563A\nENCODING 22074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE200\nBFE0\nA440\nBFA0\nA480\nFFE0\n1020\n17A0\n14A0\n17A0\nENDCHAR\nSTARTCHAR U_563B\nENCODING 22075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nBFE0\nA440\nA7C0\nE280\n0FE0\n0440\n0440\n07C0\nENDCHAR\nSTARTCHAR U_563C\nENCODING 22076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7FC0\n2480\n3F80\n2480\nFFE0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_563D\nENCODING 22077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEAA0\nAEE0\nA000\nA7C0\nA540\nE7C0\n0540\n1FE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_563E\nENCODING 22078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE280\nAFE0\nAAA0\nAFE0\nA440\nE7C0\n0440\n1FE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_563F\nENCODING 22079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nEAA0\nA920\nAFE0\nA100\nA7C0\nE100\nBFE0\n0000\n0AA0\n12A0\nENDCHAR\nSTARTCHAR U_5640\nENCODING 22080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1EE0\nF2A0\nBEE0\nB2A0\nAE60\nA480\nBFE0\nE480\n1FE0\n0480\n1860\nENDCHAR\nSTARTCHAR U_5641\nENCODING 22081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE280\nAEE0\nA820\nAEE0\nA280\nEFE0\n0140\n1520\n1440\n23C0\nENDCHAR\nSTARTCHAR U_5642\nENCODING 22082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n0FE0\nE280\nAFE0\nAAA0\nAC60\nABA0\nE820\n1FE0\n0440\n02C0\nENDCHAR\nSTARTCHAR U_5643\nENCODING 22083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE540\nA380\nAFE0\nA540\nA920\nFFE0\n0920\n0FE0\n0920\n0FE0\nENDCHAR\nSTARTCHAR U_5644\nENCODING 22084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n05E0\nEEA0\nA4A0\nAEA0\nA540\nA280\nAFE0\nE540\n1FE0\n0940\n1320\nENDCHAR\nSTARTCHAR U_5645\nENCODING 22085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00E0\nEF40\nA540\nAFC0\nA840\nAFC0\nE840\n0FE0\n0820\n1AA0\n2560\nENDCHAR\nSTARTCHAR U_5646\nENCODING 22086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nEA80\nBFE0\nA880\nBDA0\nAA60\nEFC0\n0840\n0FC0\n0840\n0FC0\nENDCHAR\nSTARTCHAR U_5647\nENCODING 22087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n1FC0\nE500\nBFE0\nAA80\nAF80\nAA80\nEA80\n1FC0\n0200\n3FE0\nENDCHAR\nSTARTCHAR U_5648\nENCODING 22088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nE4C0\nBEA0\nA1E0\nBE80\nA280\nBEC0\nE8C0\n1CC0\n2B40\n5A60\nENDCHAR\nSTARTCHAR U_5649\nENCODING 22089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1D00\nE900\nBFE0\nA540\nBD40\nA540\nBD40\nE540\n3E80\n0540\n0620\nENDCHAR\nSTARTCHAR U_564A\nENCODING 22090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE280\nAFE0\nA540\nA900\nAFE0\nEAA0\n0FE0\n0AA0\n0BA0\n0860\nENDCHAR\nSTARTCHAR U_564B\nENCODING 22091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n1F40\nEA80\nAEE0\nA120\nAEA0\nA2A0\nE440\n1E40\n04A0\n0D20\nENDCHAR\nSTARTCHAR U_564C\nENCODING 22092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nEFE0\nA920\nAAA0\nAFE0\nA000\nE7C0\n0440\n07C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_564D\nENCODING 22093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nE480\nAFE0\nA900\nBFE0\nA900\nEFE0\n0900\n0FE0\n0D40\n12A0\nENDCHAR\nSTARTCHAR U_564E\nENCODING 22094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nAFE0\nA820\nA7C0\nE440\n07C0\n0440\n0280\n1FE0\nENDCHAR\nSTARTCHAR U_564F\nENCODING 22095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0300\nE480\nBB60\nA000\nA7C0\nA440\nBFE0\nEAA0\n0660\n0AA0\n1760\nENDCHAR\nSTARTCHAR U_5650\nENCODING 22096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n0000\n7FC0\n0400\nFFE0\n0000\n7FC0\n4A40\n7BC0\nENDCHAR\nSTARTCHAR U_5651\nENCODING 22097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0FC0\nE840\nAFC0\nA840\nAFC0\nAA80\nE700\n0A80\n3FE0\n0200\nENDCHAR\nSTARTCHAR U_5652\nENCODING 22098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nE540\nAFE0\nA540\nA920\nA440\nAEE0\nF340\n0AE0\n0440\n1840\nENDCHAR\nSTARTCHAR U_5653\nENCODING 22099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nE200\nAFE0\nAA20\nAB80\nAE20\nE9E0\n0AA0\n0EE0\n1280\n2FE0\nENDCHAR\nSTARTCHAR U_5654\nENCODING 22100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F40\nE280\nACE0\nA440\nABA0\nB000\nE7C0\n0440\n07C0\n0280\n1FE0\nENDCHAR\nSTARTCHAR U_5655\nENCODING 22101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n7C80\n1500\n3FC0\n2080\n3FE0\n5520\nA960\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_5656\nENCODING 22102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nE440\nAEE0\nA440\nAFE0\nA280\nE640\n1920\n07C0\n0080\n0100\nENDCHAR\nSTARTCHAR U_5657\nENCODING 22103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0AA0\nE6C0\nBFE0\nA280\nAFE0\nA100\nE7C0\n0100\n0FE0\n0280\n0C60\nENDCHAR\nSTARTCHAR U_5658\nENCODING 22104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nED00\nAA80\nAFE0\nAA20\nAA80\nEF80\n0A80\n1280\n2540\n4A20\nENDCHAR\nSTARTCHAR U_5659\nENCODING 22105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE280\nA640\nB920\nA7C0\nA540\nE6C0\n0FE0\n0AA0\n0FA0\n0860\nENDCHAR\nSTARTCHAR U_565A\nENCODING 22106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE040\nA7C0\nA040\nAFE0\nA4A0\nFEE0\n0040\n1FE0\n0440\n02C0\nENDCHAR\nSTARTCHAR U_565B\nENCODING 22107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n05C0\nE500\nBFE0\nAAC0\nAB40\nAFC0\nEA40\n0F40\n0AC0\n0FC0\nENDCHAR\nSTARTCHAR U_565C\nENCODING 22108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nE480\nAFE0\nB920\nAFE0\nA920\nBFE0\nE440\n07C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_565D\nENCODING 22109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nE880\nB520\nBDC0\nA880\nB520\nBDE0\nE080\n15C0\n2AA0\n01A0\nENDCHAR\nSTARTCHAR U_565E\nENCODING 22110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\nE440\nABA0\nB000\nAEE0\nAAA0\nEAA0\n0EE0\n0440\n0AA0\n1120\nENDCHAR\nSTARTCHAR U_565F\nENCODING 22111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4B00\n5480\n5FC0\n7480\n57C0\n5480\n5FC0\n5040\n9FC0\nENDCHAR\nSTARTCHAR U_5660\nENCODING 22112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\nE880\nA3E0\nA140\nBBE0\nA880\nEBE0\n0880\n0BE0\n1480\n23E0\nENDCHAR\nSTARTCHAR U_5661\nENCODING 22113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE880\nBFE0\nAA40\nAFE0\nA800\nEBC0\n0800\n0BC0\n1240\n23C0\nENDCHAR\nSTARTCHAR U_5662\nENCODING 22114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFE0\nAD60\nABA0\nAFE0\nABA0\nED60\n1FE0\n0280\n0440\n1820\nENDCHAR\nSTARTCHAR U_5663\nENCODING 22115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n0AA0\nEFE0\nA400\nA7E0\nAA20\nBFA0\nEAA0\n0FA0\n02A0\n1FE0\nENDCHAR\nSTARTCHAR U_5664\nENCODING 22116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\nA480\nAEC0\nB5A0\nA480\nEFC0\n0000\n1FE0\n0940\n1320\nENDCHAR\nSTARTCHAR U_5665\nENCODING 22117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nEFE0\nAAA0\nAFE0\nAAA0\nAFE0\nE800\n0FE0\n0AA0\n1340\n2220\nENDCHAR\nSTARTCHAR U_5666\nENCODING 22118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n05C0\nE500\nBFE0\nA0A0\nBFE0\nA080\nFFA0\n24C0\n2EA0\n3560\n4A20\nENDCHAR\nSTARTCHAR U_5667\nENCODING 22119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFFE0\nA440\nA7C0\nA540\nA7C0\nE540\n0FE0\n0AA0\n0FA0\n0860\nENDCHAR\nSTARTCHAR U_5668\nENCODING 22120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n4A40\n7BC0\n0480\nFFE0\n1100\nFBE0\n4A40\n4A40\n7BC0\nENDCHAR\nSTARTCHAR U_5669\nENCODING 22121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n75C0\n5540\nFFE0\n0400\n75C0\n5540\n75C0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_566A\nENCODING 22122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nE480\nA780\nBDE0\nA520\nBDE0\nE200\n1FE0\n0A80\n1240\n2220\nENDCHAR\nSTARTCHAR U_566B\nENCODING 22123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA280\nBFE0\nA440\nA7C0\nE440\n07C0\n0120\n0A60\n09C0\nENDCHAR\nSTARTCHAR U_566C\nENCODING 22124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nEEE0\nAD40\nB220\nAFE0\nA100\nE540\n0540\n0BA0\n0100\n1FE0\nENDCHAR\nSTARTCHAR U_566D\nENCODING 22125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nEE80\nAAE0\nAFA0\nAAA0\nAEA0\nA4A0\nFF40\n0A40\n12A0\n2720\nENDCHAR\nSTARTCHAR U_566E\nENCODING 22126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nEAA0\nAFE0\nA000\nBFE0\nA840\nAFC0\nE520\n0CC0\n1540\n2620\nENDCHAR\nSTARTCHAR U_566F\nENCODING 22127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n0F20\nE540\nAFE0\nA920\nAA60\nF3C0\n0400\n0FC0\n1380\n0C60\nENDCHAR\nSTARTCHAR U_5670\nENCODING 22128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\nA940\nB7E0\nBA40\nABE0\nF640\n1FE0\n0A40\n13E0\n2200\nENDCHAR\nSTARTCHAR U_5671\nENCODING 22129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nE200\nAFE0\nAA20\nAFC0\nAA20\nEFE0\n0AA0\n15C0\n22A0\n4DA0\nENDCHAR\nSTARTCHAR U_5672\nENCODING 22130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\nE440\nABA0\nB000\nAFE0\nAAA0\nAFE0\nE440\n07C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_5673\nENCODING 22131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n0200\nEFE0\nAA20\nAFC0\nAA20\nEBE0\n0A40\n1FE0\n1280\n2C60\nENDCHAR\nSTARTCHAR U_5674\nENCODING 22132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA540\nAFE0\nA440\nA7C0\nE440\n07C0\n0440\n07C0\n0C60\nENDCHAR\nSTARTCHAR U_5675\nENCODING 22133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8840\n5FE0\n0200\nCFC0\n4940\n4CC0\n6A40\n9FE0\n1080\n1080\n1F80\nENDCHAR\nSTARTCHAR U_5676\nENCODING 22134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n0480\nEFC0\nA840\nAFC0\nA840\nAFE0\nF920\n2AA0\n0FA0\n0040\nENDCHAR\nSTARTCHAR U_5677\nENCODING 22135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFF80\nAAE0\nA420\nBEC0\nA080\nAE80\nEA80\n0F40\n0B40\n0E20\nENDCHAR\nSTARTCHAR U_5678\nENCODING 22136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n09E0\n0880\nFFE0\nA920\nABE0\nAB20\nBFE0\nE920\n0BE0\n0D40\n0A20\nENDCHAR\nSTARTCHAR U_5679\nENCODING 22137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nFFE0\nB020\nA780\nA480\nAFE0\nE920\n0FE0\n0920\n0FE0\n0820\nENDCHAR\nSTARTCHAR U_567A\nENCODING 22138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0860\nFF80\nB500\nADE0\nBF40\nA940\nBF40\nE940\n1D40\n2A40\n1C40\nENDCHAR\nSTARTCHAR U_567B\nENCODING 22139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\nB520\nAFE0\nA500\nBFE0\nE480\n0A40\n17A0\n0200\n1FE0\nENDCHAR\nSTARTCHAR U_567C\nENCODING 22140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E40\nEBE0\nAAA0\nAEA0\nA840\nAFE0\nEA40\n1AE0\n1A40\n2E40\n0040\nENDCHAR\nSTARTCHAR U_567D\nENCODING 22141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nFFE0\n1080\n7C80\n45C0\n7EA0\n28A0\nFE80\n4480\n4400\n7FE0\nENDCHAR\nSTARTCHAR U_567E\nENCODING 22142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0FE0\nEAA0\nA540\nAFE0\nA280\nAFE0\nE440\n07C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_567F\nENCODING 22143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nEAA0\nA660\nAAA0\nBFE0\nA440\nEAA0\n0100\n1FE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_5680\nENCODING 22144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\nB520\nAD40\nBFE0\nAAA0\nAFE0\nE000\n0FE0\n0100\n0300\nENDCHAR\nSTARTCHAR U_5681\nENCODING 22145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nEAA0\nA660\nAAA0\nAFE0\nB900\nEFC0\n0900\n0FC0\n0900\n0FE0\nENDCHAR\nSTARTCHAR U_5682\nENCODING 22146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F40\nEA40\nAF60\nA980\nAF40\nAA20\nEF00\n0000\n0FE0\n0AA0\n1FE0\nENDCHAR\nSTARTCHAR U_5683\nENCODING 22147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nEAA0\nAFE0\nB100\nAB40\nBD20\nEB40\n0D20\n0900\n0C00\n13E0\nENDCHAR\nSTARTCHAR U_5684\nENCODING 22148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\nA480\nAFE0\nA900\nBFE0\nA900\nEFE0\n0480\n0300\n1CE0\nENDCHAR\nSTARTCHAR U_5685\nENCODING 22149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE100\nBFE0\nB560\nA380\nA540\nEFE0\n0100\n0FE0\n0AA0\n0AE0\nENDCHAR\nSTARTCHAR U_5686\nENCODING 22150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFFE0\nA540\nAFE0\nA280\nA380\nE000\nAFE0\n0AA0\n0BA0\n0860\nENDCHAR\nSTARTCHAR U_5687\nENCODING 22151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n1FE0\nE480\nBFE0\nAD40\nAD40\nBF60\nED60\n0D40\n1540\n2EC0\nENDCHAR\nSTARTCHAR U_5688\nENCODING 22152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2E40\nEA60\nAE40\nA1E0\nAE40\nAA40\nEE40\n2A40\n2EA0\n4B20\nENDCHAR\nSTARTCHAR U_5689\nENCODING 22153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A40\n1B40\nEA40\nBFE0\nAA40\nBF40\nA4C0\nFF40\n0440\n0740\n18C0\nENDCHAR\nSTARTCHAR U_568A\nENCODING 22154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE7C0\nA540\nA6C0\nAFE0\nA920\nAFE0\nE920\n1FE0\n0440\n0840\nENDCHAR\nSTARTCHAR U_568B\nENCODING 22155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\nA200\nBFE0\nA000\nAFE0\nA200\nBFE0\nEA40\n0F40\n00C0\nENDCHAR\nSTARTCHAR U_568C\nENCODING 22156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n1FE0\nE520\nBAC0\nAAA0\nB2A0\nAFC0\nE840\n0FC0\n0840\n1040\nENDCHAR\nSTARTCHAR U_568D\nENCODING 22157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE140\nBFE0\nA140\nAFE0\nA100\nFFE0\n0AA0\n0FE0\n0AA0\n1FE0\nENDCHAR\nSTARTCHAR U_568E\nENCODING 22158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\nA480\nBFE0\nB020\nAFC0\nEA20\n1540\n0B80\n0540\n1B20\nENDCHAR\nSTARTCHAR U_568F\nENCODING 22159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE100\nBFE0\nB540\nA7C0\nA540\nEFE0\n0120\n09C0\n0D00\n13E0\nENDCHAR\nSTARTCHAR U_5690\nENCODING 22160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0940\n0580\nFFE0\nB4A0\nA780\nA920\nAFE0\nE440\n07C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_5691\nENCODING 22161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE200\nBFE0\nAAC0\nAB40\nAFC0\nA200\nEFC0\n0200\n1FE0\n12A0\nENDCHAR\nSTARTCHAR U_5692\nENCODING 22162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nAA40\nAFE0\nAB40\nAEE0\nA940\nEA40\n1180\n1240\n27E0\nENDCHAR\nSTARTCHAR U_5693\nENCODING 22163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n1FE0\nF820\nAFE0\nAAA0\nB440\nABA0\nF000\n1FE0\n0940\n1320\nENDCHAR\nSTARTCHAR U_5694\nENCODING 22164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEF80\nA200\nBFE0\nAAA0\nAF80\nA500\nFFC0\n0340\n0A00\n17E0\nENDCHAR\nSTARTCHAR U_5695\nENCODING 22165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nE880\nBFE0\nA920\nAFE0\nA920\nEFE0\n0AA0\n17E0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_5696\nENCODING 22166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\nA480\nBFE0\nA480\nAFC0\nE040\n0FC0\n0A20\n2940\n47C0\nENDCHAR\nSTARTCHAR U_5697\nENCODING 22167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE840\nAFC0\nA480\nBFE0\nA480\nBFE0\nEA40\n1AA0\n2700\n1AC0\nENDCHAR\nSTARTCHAR U_5698\nENCODING 22168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE440\nA740\nA5C0\nA440\nBFE0\nB520\nEFE0\n0A40\n0180\n0E60\nENDCHAR\nSTARTCHAR U_5699\nENCODING 22169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE5E0\nA500\nBFE0\nAAA0\nAD60\nEFE0\n0AA0\n0D60\n0820\n0FE0\nENDCHAR\nSTARTCHAR U_569A\nENCODING 22170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFFE0\n4400\n7FC0\n4040\n7FC0\n4400\nFFE0\n8A20\nFBE0\nENDCHAR\nSTARTCHAR U_569B\nENCODING 22171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A40\n0B40\nF5A0\nAB40\nB5A0\nBFE0\nA200\nFFE0\n0700\n0A80\n3260\nENDCHAR\nSTARTCHAR U_569C\nENCODING 22172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nEAA0\nA920\nAFE0\nA100\nBFE0\nAAA0\nE100\n0FC0\n0100\n1FE0\nENDCHAR\nSTARTCHAR U_569D\nENCODING 22173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n1FE0\nF280\n9FE0\n9280\n9FE0\n9540\nF7C0\n1540\n17C0\n2C60\nENDCHAR\nSTARTCHAR U_569E\nENCODING 22174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2080\n3F80\n1100\nFFE0\n1100\nFFE0\n4A40\n4A40\n7BC0\nENDCHAR\nSTARTCHAR U_569F\nENCODING 22175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nF9E0\nA8A0\nBEA0\nAD20\nBA40\nED80\n3260\n0A80\n0700\n1AC0\nENDCHAR\nSTARTCHAR U_56A0\nENCODING 22176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1620\nEA20\nAAA0\nB6A0\nA8A0\nB6A0\nBEA0\nE8A0\n3E20\n2AA0\n3E40\nENDCHAR\nSTARTCHAR U_56A1\nENCODING 22177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A40\nFF40\nAAE0\nAE40\nA4E0\nBF40\nB5E0\nFF40\n0440\n3E40\n05E0\nENDCHAR\nSTARTCHAR U_56A2\nENCODING 22178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n2480\n7FC0\n5140\nEAE0\n3FC0\n0A00\n7FC0\n2A80\nCDC0\nENDCHAR\nSTARTCHAR U_56A3\nENCODING 22179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\nFFE0\n0400\n7FC0\n4440\n5B40\n2080\nFBE0\n4A40\n7BC0\nENDCHAR\nSTARTCHAR U_56A4\nENCODING 22180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n1FE0\nF480\n9FE0\n95C0\n9EA0\n97C0\nF080\n1FE0\n2100\n4300\nENDCHAR\nSTARTCHAR U_56A5\nENCODING 22181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\nA480\nA780\nA840\nBF60\nAD40\nED40\n3F20\n0D40\n12A0\nENDCHAR\nSTARTCHAR U_56A6\nENCODING 22182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\nE240\nAC80\nBFC0\nA480\nAFC0\nB4A0\nE100\n25C0\n4500\n9FE0\nENDCHAR\nSTARTCHAR U_56A7\nENCODING 22183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nE200\nBFE0\nA420\nAFE0\nAA80\nEF80\n2A80\n3FC0\n5540\nBFE0\nENDCHAR\nSTARTCHAR U_56A8\nENCODING 22184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n04E0\nFF80\nAAE0\nA420\nBFE0\nAA80\nAEE0\nEA80\n0EE0\n0A80\n0AE0\nENDCHAR\nSTARTCHAR U_56A9\nENCODING 22185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n08A0\nF3E0\nBC80\nABE0\nB6A0\nBBE0\nA2A0\nF440\n17E0\n2140\n00C0\nENDCHAR\nSTARTCHAR U_56AA\nENCODING 22186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3DE0\nE520\nBDE0\nA520\nBFE0\nA920\nB5A0\nE8A0\n2DA0\n28A0\n2FE0\nENDCHAR\nSTARTCHAR U_56AB\nENCODING 22187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n04E0\nFFA0\nAAE0\nA4A0\nBFA0\nA4E0\nAEA0\nE4E0\n0E40\n15C0\n2D60\nENDCHAR\nSTARTCHAR U_56AC\nENCODING 22188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n02E0\nEB40\nAAE0\nBFA0\nA2E0\nAAA0\nAAE0\nF3A0\n02E0\n04A0\n1920\nENDCHAR\nSTARTCHAR U_56AD\nENCODING 22189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n2080\nFDC0\n4AA0\n7C80\n5080\nFFE0\n4A20\n7BE0\n4A20\nENDCHAR\nSTARTCHAR U_56AE\nENCODING 22190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\nBEA0\nD2C0\nBEC0\nD4A0\n5EE0\n8980\n7FC0\n5140\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_56AF\nENCODING 22191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE100\nBFE0\nB5A0\nA940\nA500\nEFE0\nB900\n0FC0\n0900\n0FE0\nENDCHAR\nSTARTCHAR U_56B0\nENCODING 22192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0FE0\nEA40\nAFE0\nAF60\nAAC0\nAFE0\nE900\nABC0\n1640\n23C0\nENDCHAR\nSTARTCHAR U_56B1\nENCODING 22193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E80\n08C0\nFEA0\nABE0\nBC80\nAAA0\nBEC0\nEA80\n2F40\n2A60\n5F20\nENDCHAR\nSTARTCHAR U_56B2\nENCODING 22194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFEA0\n4BE0\n7AA0\n03E0\nFAA0\n13E0\n3880\nE7E0\n2080\n6080\nENDCHAR\nSTARTCHAR U_56B3\nENCODING 22195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6AC0\n4440\n6AC0\n4440\nFFE0\n9420\n3FC0\n4400\nFFE0\n2080\n3F80\nENDCHAR\nSTARTCHAR U_56B4\nENCODING 22196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7FE0\n4500\n7F00\n55E0\n5D20\n56A0\n5C40\n56A0\nBD20\nENDCHAR\nSTARTCHAR U_56B5\nENCODING 22197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nE880\nBFE0\nA920\nAFE0\nA520\nAFE0\nF540\n07C0\n02A0\n1CE0\nENDCHAR\nSTARTCHAR U_56B6\nENCODING 22198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEAA0\nAEE0\nAAA0\nAEE0\nA440\nEAA0\nBFE0\n0480\n0380\n1C60\nENDCHAR\nSTARTCHAR U_56B7\nENCODING 22199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\nAAA0\nAEE0\nA280\nAFE0\nA280\nEFE0\n0540\n0C80\n1660\nENDCHAR\nSTARTCHAR U_56B8\nENCODING 22200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F40\nF540\nBF60\nB540\nBF40\nA440\nFFE0\nA520\n1F20\n1520\n2BE0\nENDCHAR\nSTARTCHAR U_56B9\nENCODING 22201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\nF080\nBFE0\nAA80\nABC0\nBEA0\nABE0\nEAC0\n0BE0\n2A40\n3EC0\nENDCHAR\nSTARTCHAR U_56BA\nENCODING 22202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nEAA0\nBAA0\nAFE0\nA200\nBB40\nED80\nAB60\n0D20\n0B00\n17E0\nENDCHAR\nSTARTCHAR U_56BB\nENCODING 22203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\nE4E0\nAEA0\nEAE0\n0E00\nEAE0\nAEA0\nAAA0\nAEA0\nEAE0\n1100\nENDCHAR\nSTARTCHAR U_56BC\nENCODING 22204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE540\nAFE0\nAAA0\nAFE0\nAA20\nEFE0\nAB20\n0EA0\n0820\n0EE0\nENDCHAR\nSTARTCHAR U_56BD\nENCODING 22205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\nA4A0\nBF40\nB2A0\nAFC0\nE840\nAFC0\n0840\n0FC0\n1860\nENDCHAR\nSTARTCHAR U_56BE\nENCODING 22206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nE480\nAEE0\nAAA0\nAFE0\nA900\nAFC0\nF900\n0FC0\n0900\n0FE0\nENDCHAR\nSTARTCHAR U_56BF\nENCODING 22207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0840\nFFE0\nA900\nAFC0\nBFC0\nA900\nEFE0\nA440\n0EC0\n0840\n0FC0\nENDCHAR\nSTARTCHAR U_56C0\nENCODING 22208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n3FE0\nE8A0\nBFE0\nAAA0\nBFE0\nAA40\nFFE0\n8940\n3F40\n08C0\nENDCHAR\nSTARTCHAR U_56C1\nENCODING 22209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE440\nA7C0\nA440\nAFE0\nA040\nFFE0\nAAA0\n0EE0\n0AA0\n1FE0\nENDCHAR\nSTARTCHAR U_56C2\nENCODING 22210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\nFFE0\n0400\n3F80\n2080\n3F80\n2080\nFFE0\n4A40\n7BC0\nENDCHAR\nSTARTCHAR U_56C3\nENCODING 22211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nFF40\nABE0\nB540\nABE0\nA940\nFFE0\nA940\n1D40\n2BE0\n0900\nENDCHAR\nSTARTCHAR U_56C4\nENCODING 22212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFF40\nB5E0\nAB40\nBFE0\nA540\nBFE0\nB540\nFF40\n93E0\n1100\nENDCHAR\nSTARTCHAR U_56C5\nENCODING 22213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nAC20\nFFE0\n2D40\nFFE0\nAD40\nFFE0\n25A0\nFD40\n2540\n2BA0\nENDCHAR\nSTARTCHAR U_56C6\nENCODING 22214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nE480\nAFC0\nAA40\nBFE0\nB2A0\nBFE0\nEA40\n0FC0\n0240\n1FA0\nENDCHAR\nSTARTCHAR U_56C7\nENCODING 22215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nE000\nAEE0\nABA0\nAFE0\nAA80\nAFE0\nEAA0\nAFE0\n1280\n2760\nENDCHAR\nSTARTCHAR U_56C8\nENCODING 22216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nE480\nBFE0\nA4A0\nBFA0\nA4E0\nFFA0\nA000\n1FE0\n0440\n0FA0\nENDCHAR\nSTARTCHAR U_56C9\nENCODING 22217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nEAA0\nAFE0\nA540\nA9E0\nBF40\nA9E0\nF540\n1BE0\n1540\n2BE0\nENDCHAR\nSTARTCHAR U_56CA\nENCODING 22218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\nFFE0\nAAA0\n7FC0\n1100\nFFE0\n1240\n3180\nD8E0\nENDCHAR\nSTARTCHAR U_56CB\nENCODING 22219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1540\nFFE0\nA440\nBFE0\nAAA0\nB7C0\nE440\nA7C0\n0440\n07C0\n0820\nENDCHAR\nSTARTCHAR U_56CC\nENCODING 22220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\nAC80\nB5E0\nBE40\nABE0\nBE40\nEAE0\n1F40\n1440\n2A40\nENDCHAR\nSTARTCHAR U_56CD\nENCODING 22221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n2080\nFBE0\n8A20\nFBE0\n5140\nFFE0\n8A20\nFBE0\n8A20\nENDCHAR\nSTARTCHAR U_56CE\nENCODING 22222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n0E80\nEBE0\nAEA0\nABE0\nAEA0\nABE0\nEF20\nA5E0\n0B20\n11E0\nENDCHAR\nSTARTCHAR U_56CF\nENCODING 22223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\nFFE0\n2900\n7FC0\n5440\n7FC0\n1280\nFFE0\n2A40\n47C0\n8240\nENDCHAR\nSTARTCHAR U_56D0\nENCODING 22224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\n0F60\n0A40\nEFE0\nAD40\nAA40\nAF40\nE940\n0F40\n15A0\n1520\nENDCHAR\nSTARTCHAR U_56D1\nENCODING 22225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\nE020\nBFE0\nA540\nAFE0\nAAA0\nEFE0\n2AA0\n2FA0\n22A0\n5F60\nENDCHAR\nSTARTCHAR U_56D2\nENCODING 22226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n0FE0\nE440\nAEE0\nAAA0\nAEE0\nA920\nEFE0\n0BA0\n0D60\n0920\nENDCHAR\nSTARTCHAR U_56D3\nENCODING 22227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nE8A0\nBF20\nAA20\nBFC0\nAA00\nBFE0\nF520\nBFE0\n12A0\n1FE0\nENDCHAR\nSTARTCHAR U_56D4\nENCODING 22228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\nAA40\nBFE0\nB2A0\nBFE0\nE480\nBFE0\n0D40\n1480\n2760\nENDCHAR\nSTARTCHAR U_56D5\nENCODING 22229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F40\n0AE0\nEF40\nAAA0\nAFC0\nA440\nA7C0\nE440\n07C0\n02A0\n0CE0\nENDCHAR\nSTARTCHAR U_56D6\nENCODING 22230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n0EE0\nF540\nAFE0\nAAA0\nAFE0\nA480\nEB40\n05E0\n0F40\n05E0\nENDCHAR\nSTARTCHAR U_56D7\nENCODING 22231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n4020\n4020\n4020\n4020\n4020\n4020\n4020\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_56D8\nENCODING 22232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\n9F20\n9120\n9120\n9F20\n9020\n90A0\n8FA0\n8020\n8060\nENDCHAR\nSTARTCHAR U_56D9\nENCODING 22233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n4020\n7F20\n4120\n4120\n4120\n7F20\n4020\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_56DA\nENCODING 22234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n4420\n4420\n4420\n4620\n4920\n50A0\n4020\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_56DB\nENCODING 22235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n4A40\n4A40\n4A40\n4A40\n53C0\n6040\n4040\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_56DC\nENCODING 22236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n4420\n4420\n4820\n4920\n53A0\n5CA0\n4020\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_56DD\nENCODING 22237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\n9F20\n8220\n8420\nBFA0\n8420\n9420\n8820\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_56DE\nENCODING 22238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n4020\n4F20\n4920\n4920\n4F20\n4920\n4020\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_56DF\nENCODING 22239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4040\n5140\n4940\n4640\n4640\n4940\n5140\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_56E0\nENCODING 22240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8420\n8420\nBFA0\n8420\n8420\n8A20\n9120\nA0A0\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_56E1\nENCODING 22241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4420\n4420\n7FE0\n4920\n5220\n4E20\n4920\n50A0\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_56E2\nENCODING 22242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4220\n4220\n7FA0\n4220\n4620\n4A20\n5220\n4620\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_56E3\nENCODING 22243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4120\n4120\n5FA0\n4120\n4920\n4520\n4120\n4320\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_56E4\nENCODING 22244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4420\n7FA0\n4420\n5520\n5F20\n44A0\n47A0\n4020\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_56E5\nENCODING 22245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4420\n5FA0\n4020\n4E20\n4A20\n4AA0\n53A0\n6020\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_56E6\nENCODING 22246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\n84A0\nB520\n9620\n9520\nA520\nC4A0\n8C20\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_56E7\nENCODING 22247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n4920\n50A0\n6060\n4F20\n4920\n4920\n4920\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_56E8\nENCODING 22248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\nBFA0\n8220\n8C20\n9520\nA4A0\n8420\n8420\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_56E9\nENCODING 22249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\n9F20\n8020\nBFA0\n8420\n8920\n93A0\nBCA0\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_56EA\nENCODING 22250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1000\nFFC0\n8040\n9540\n8A40\nB440\n8640\n9940\n8040\nFFC0\nENDCHAR\nSTARTCHAR U_56EB\nENCODING 22251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5020\n5FA0\n6AA0\n4AA0\n52A0\n64A0\n4AA0\n5120\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_56EC\nENCODING 22252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9120\n9120\n9F20\n9120\n9120\n9F20\n9120\n9120\n9120\nFFE0\nENDCHAR\nSTARTCHAR U_56ED\nENCODING 22253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n5F20\n4020\n7FA0\n4A20\n4AA0\n52A0\n61A0\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_56EE\nENCODING 22254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n4A20\n4AA0\n5B20\n6E20\n4AA0\n49A0\n4020\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_56EF\nENCODING 22255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\nBFA0\n8420\n8420\n9F20\n8420\n8420\nBFA0\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_56F0\nENCODING 22256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4220\n4220\n5FA0\n4220\n4720\n4AA0\n52A0\n4220\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_56F1\nENCODING 22257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7FE0\n4420\n4420\n4FA0\n5920\n6620\n4920\n50A0\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_56F2\nENCODING 22258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\n8920\nBFA0\n8920\n8920\nBFA0\n8920\n9120\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_56F3\nENCODING 22259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\n94A0\nAAA0\n9120\n8A20\n8420\n8A20\nB1A0\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_56F4\nENCODING 22260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4420\n7FA0\n4420\n5F20\n4420\n7FA0\n44A0\n4520\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_56F5\nENCODING 22261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4420\n4A20\n5120\n6AA0\n4C20\n48A0\n47A0\n4020\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_56F6\nENCODING 22262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\n8A20\n9120\nA4A0\n8420\n9F20\n8420\nBFA0\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_56F7\nENCODING 22263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4120\n5E20\n4420\n7FA0\n4620\n4D20\n54A0\n6420\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_56F8\nENCODING 22264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\nBFA0\n8420\n8420\n9720\n9420\n9420\nBFA0\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_56F9\nENCODING 22265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4420\n4A20\n5520\n64A0\n5FA0\n4920\n4620\n4220\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_56FA\nENCODING 22266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4420\n4420\n7FA0\n4420\n5F20\n5120\n5120\n5F20\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_56FB\nENCODING 22267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\n9F20\n9120\n9F20\n9420\n9F20\n9220\nB9A0\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_56FC\nENCODING 22268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8420\n8820\n9120\nBFA0\n8020\n9F20\n9120\n9F20\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_56FD\nENCODING 22269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n5FA0\n4420\n4420\n5FA0\n4520\n44A0\n7FE0\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_56FE\nENCODING 22270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4820\n4FA0\n5920\n6620\n4920\n74E0\n4220\n4420\n4220\n7FE0\nENDCHAR\nSTARTCHAR U_56FF\nENCODING 22271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4420\n7FE0\n48A0\n5FA0\n68A0\n4FA0\n48A0\n4BA0\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_5700\nENCODING 22272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8A20\n9120\nA4A0\nDF60\n8820\n8F20\n9120\n9120\nA620\nFFE0\nENDCHAR\nSTARTCHAR U_5701\nENCODING 22273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4420\n5FA0\n4020\n5FA0\n4020\n5FA0\n4920\n4F20\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_5702\nENCODING 22274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n5FA0\n4420\n4EA0\n52A0\n4720\n5AA0\n4660\n4A20\n7FE0\nENDCHAR\nSTARTCHAR U_5703\nENCODING 22275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4520\n7FE0\n54A0\n5FA0\n54A0\n5FA0\n54A0\n55A0\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_5704\nENCODING 22276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n5FA0\n4420\n5F20\n4920\n7FA0\n4920\n4F20\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_5705\nENCODING 22277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0900\n0600\n7FC0\n5140\n4A40\n5F40\n4440\n5F40\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5706\nENCODING 22278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\n9F20\n9120\nBFA0\nA0A0\nA4A0\nA4A0\n8A20\n9120\nFFE0\nENDCHAR\nSTARTCHAR U_5707\nENCODING 22279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8420\n8A20\n9120\nAEA0\n8020\nBFA0\nAAA0\nBFA0\nAAA0\nFFE0\nENDCHAR\nSTARTCHAR U_5708\nENCODING 22280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9520\nBFA0\n8820\nBFA0\n9120\nBEE0\nD2A0\n9FA0\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_5709\nENCODING 22281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8420\n9F20\n8420\nBFA0\n8A20\n9F20\n8420\nBFA0\n8420\nFFE0\nENDCHAR\nSTARTCHAR U_570A\nENCODING 22282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8420\nBFA0\n8420\n9F20\n8420\nBFA0\n9120\n9F20\n9120\nFFE0\nENDCHAR\nSTARTCHAR U_570B\nENCODING 22283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n42A0\n7FE0\n4220\n7AA0\n6AA0\n7B20\n42A0\n7DA0\n40A0\n7FE0\nENDCHAR\nSTARTCHAR U_570C\nENCODING 22284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8420\nA4A0\nBFA0\n8020\nBFA0\n8420\nBFA0\nAAA0\nABA0\nFFE0\nENDCHAR\nSTARTCHAR U_570D\nENCODING 22285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4420\n5F20\n4920\n5FA0\n4920\n5FA0\n5220\n7FA0\n4220\n7FE0\nENDCHAR\nSTARTCHAR U_570E\nENCODING 22286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9120\nBFA0\n8020\n9F20\n9120\n9F20\n9120\n9F20\nA0A0\nFFE0\nENDCHAR\nSTARTCHAR U_570F\nENCODING 22287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9520\nBFA0\n8820\nBFA0\n9120\nAEA0\nC960\n8F20\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_5710\nENCODING 22288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nAAA0\nBFA0\n8420\nBFA0\n8820\n8F20\n9120\nA320\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_5711\nENCODING 22289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8520\nFFE0\nA4A0\nBFA0\nA4A0\n8120\nFFE0\n9120\n8320\nFFE0\nENDCHAR\nSTARTCHAR U_5712\nENCODING 22290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4420\n5F20\n4420\n7FA0\n5120\n5F60\n4AA0\n7920\n48A0\n7FE0\nENDCHAR\nSTARTCHAR U_5713\nENCODING 22291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9120\nBFA0\nA0A0\nBFA0\nA0A0\nBFA0\nA0A0\nBFA0\nE0E0\nFFE0\nENDCHAR\nSTARTCHAR U_5714\nENCODING 22292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8420\n9F20\n8420\nBFA0\n8920\n9EA0\n8020\nBFA0\nAAA0\nFFE0\nENDCHAR\nSTARTCHAR U_5715\nENCODING 22293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8420\nBFA0\n84A0\nFFE0\n84A0\nBFA0\n9120\n9F20\n9120\nFFE0\nENDCHAR\nSTARTCHAR U_5716\nENCODING 22294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9120\n9F20\n8420\nFFE0\nAAA0\nAEA0\nA0A0\nBFA0\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_5717\nENCODING 22295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9120\nBFA0\n8420\nFFE0\nAAA0\nAEA0\nAAA0\nBFA0\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_5718\nENCODING 22296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8420\nFFE0\nA4A0\nBFA0\nA4A0\nBFA0\n8260\nFFA0\n9220\nFFE0\nENDCHAR\nSTARTCHAR U_5719\nENCODING 22297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9120\nA0A0\nDF60\n8820\nBFA0\nAAA0\nAEA0\nBFA0\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_571A\nENCODING 22298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8420\nBFA0\nA4A0\nFFE0\n9120\n9F20\n9120\n9F20\nB1A0\nFFE0\nENDCHAR\nSTARTCHAR U_571B\nENCODING 22299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nAAA0\nBFA0\n8420\n9F20\n8420\nBFA0\n8A20\nBFA0\n8420\nFFE0\nENDCHAR\nSTARTCHAR U_571C\nENCODING 22300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\nBFA0\nAAA0\nFFE0\n9120\n9F20\n8AA0\n9920\nACA0\nFFE0\nENDCHAR\nSTARTCHAR U_571D\nENCODING 22301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA4A0\nDF60\nA1E0\nDEA0\nD160\nFFE0\nAAA0\nDF60\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_571E\nENCODING 22302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA4A0\nDF60\nA0A0\nFFE0\nAAA0\nD560\nFFE0\n9520\nA4A0\nFFE0\nENDCHAR\nSTARTCHAR U_571F\nENCODING 22303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0400\n0400\n7FC0\n0400\n0400\n0400\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5720\nENCODING 22304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n2200\nFA00\n2200\n2200\n2200\n3A00\nC220\n0220\n01E0\nENDCHAR\nSTARTCHAR U_5721\nENCODING 22305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0400\n7FC0\n0400\n0600\n0580\n0480\n0400\nFFE0\n0000\nENDCHAR\nSTARTCHAR U_5722\nENCODING 22306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\n2080\nF880\n2080\n2080\n2080\n3880\nE080\n0280\n0100\nENDCHAR\nSTARTCHAR U_5723\nENCODING 22307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n1080\n0900\n0600\n1980\nE460\n0400\n3F80\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5724\nENCODING 22308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n2200\nFB00\n2280\n2240\n2240\n2200\n3A00\nC200\n0200\nENDCHAR\nSTARTCHAR U_5725\nENCODING 22309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n0400\n0400\nFFE0\n1100\n1100\n1120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_5726\nENCODING 22310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C00\n2200\n2200\nFA00\n2200\n2200\n2500\n3500\nC880\n1060\n2040\nENDCHAR\nSTARTCHAR U_5727\nENCODING 22311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2200\n2200\n2200\n2FC0\n2200\n2200\n2200\n4200\n5FE0\n8000\nENDCHAR\nSTARTCHAR U_5728\nENCODING 22312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FE0\n0800\n1100\n3100\n57C0\n1100\n1100\n1100\n1FE0\nENDCHAR\nSTARTCHAR U_5729\nENCODING 22313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n2100\nF100\n2FE0\n2100\n2100\n3100\nC100\n0500\n0200\nENDCHAR\nSTARTCHAR U_572A\nENCODING 22314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n2400\nF800\n27C0\n2080\n2100\n3A00\nE420\n0420\n03E0\nENDCHAR\nSTARTCHAR U_572B\nENCODING 22315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n2E00\n2200\n2200\nFBE0\n2E00\n2200\n2A00\n3200\nE220\n01E0\nENDCHAR\nSTARTCHAR U_572C\nENCODING 22316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2000\n2000\nFFE0\n2200\n2200\n27E0\n3820\nC020\n0140\n0080\nENDCHAR\nSTARTCHAR U_572D\nENCODING 22317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n3FC0\n0400\n7FE0\n0000\n0400\n3FC0\n0400\n0400\n7FE0\nENDCHAR\nSTARTCHAR U_572E\nENCODING 22318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2020\n2020\nF820\n27E0\n2420\n2400\n2400\n3C20\nE420\n03E0\nENDCHAR\nSTARTCHAR U_572F\nENCODING 22319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n2420\nFC20\n27E0\n2420\n2400\n3C00\nE420\n0420\n03E0\nENDCHAR\nSTARTCHAR U_5730\nENCODING 22320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\n2540\nF5C0\n2740\n2D40\n2540\n25C0\n3520\nC420\n03E0\nENDCHAR\nSTARTCHAR U_5731\nENCODING 22321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nE100\n2100\n2100\nF900\n27C0\n2100\n2100\n4100\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_5732\nENCODING 22322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\n2100\nF900\n2100\n2FE0\n2100\n3900\nE100\n0100\n0100\nENDCHAR\nSTARTCHAR U_5733\nENCODING 22323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2420\n2520\n2520\nFD20\n2520\n2520\n2520\n3D20\nC920\n1020\n2020\nENDCHAR\nSTARTCHAR U_5734\nENCODING 22324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n2220\nFC20\n2220\n2120\n2120\n3820\nC020\n0120\n00C0\nENDCHAR\nSTARTCHAR U_5735\nENCODING 22325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n2200\n2200\nFBC0\n2200\n2200\n2200\n3A00\nE200\n0FE0\nENDCHAR\nSTARTCHAR U_5736\nENCODING 22326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n0A00\n1100\nE4E0\n0400\n3F80\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5737\nENCODING 22327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2100\n2100\nF900\n2180\n2140\n2140\n3900\nC100\n0100\nENDCHAR\nSTARTCHAR U_5738\nENCODING 22328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2100\n2520\nFD20\n2520\n2520\n2520\n3D20\nC7E0\n0420\nENDCHAR\nSTARTCHAR U_5739\nENCODING 22329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n27E0\nFC00\n2400\n2400\n2400\n3C00\nC400\n0800\n1000\nENDCHAR\nSTARTCHAR U_573A\nENCODING 22330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2080\n2100\nF200\n2FE0\n22A0\n24A0\n3920\nC220\n0C20\n00C0\nENDCHAR\nSTARTCHAR U_573B\nENCODING 22331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2380\n2200\nFA00\n23E0\n2240\n2240\n3C40\nE440\n0840\n1040\nENDCHAR\nSTARTCHAR U_573C\nENCODING 22332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n2080\n3F80\n0400\n7FC0\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_573D\nENCODING 22333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nF7E0\n2520\n2960\n2260\n24A0\n2120\n3220\nC4A0\n0040\nENDCHAR\nSTARTCHAR U_573E\nENCODING 22334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2240\n2240\nFA80\n22E0\n2220\n2420\n3540\nC880\n1140\n2620\nENDCHAR\nSTARTCHAR U_573F\nENCODING 22335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2280\nFC40\n2AA0\n2280\n2280\n3A80\nC280\n0480\n0880\nENDCHAR\nSTARTCHAR U_5740\nENCODING 22336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2100\nFD00\n25E0\n2500\n2500\n2500\n3D00\nC500\n1FE0\nENDCHAR\nSTARTCHAR U_5741\nENCODING 22337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2780\n2480\nFC80\n27E0\n2480\n2480\n3C80\nE5A0\n0660\n0C20\nENDCHAR\nSTARTCHAR U_5742\nENCODING 22338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\n2400\nFC00\n27E0\n2520\n2540\n3D40\nC480\n0940\n1620\nENDCHAR\nSTARTCHAR U_5743\nENCODING 22339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2000\n2000\nFFE0\n2280\n2280\n2A80\n3480\nC4A0\n08E0\n1000\nENDCHAR\nSTARTCHAR U_5744\nENCODING 22340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\n2480\n2480\nF4E0\n2800\n2780\n2480\n3280\nC100\n0280\n1C60\nENDCHAR\nSTARTCHAR U_5745\nENCODING 22341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2280\nF440\n2920\n2080\n27E0\n3840\nC080\n0080\n0100\nENDCHAR\nSTARTCHAR U_5746\nENCODING 22342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2440\n2A40\n2280\n2280\n2100\n3A80\nC460\n1840\nENDCHAR\nSTARTCHAR U_5747\nENCODING 22343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n27E0\nF020\n2420\n2220\n28A0\n3120\nC620\n0020\n00C0\nENDCHAR\nSTARTCHAR U_5748\nENCODING 22344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2820\nF000\n2780\n2480\n2480\n3480\nC4A0\n08A0\n1060\nENDCHAR\nSTARTCHAR U_5749\nENCODING 22345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2FE0\nF100\n2540\n2540\n27C0\n3900\nC120\n0120\n00E0\nENDCHAR\nSTARTCHAR U_574A\nENCODING 22346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n27E0\nFA00\n23C0\n2240\n2240\n3A40\nC240\n0440\n1980\nENDCHAR\nSTARTCHAR U_574B\nENCODING 22347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n2240\nFC20\n2800\n27E0\n2220\n3A20\nC220\n0420\n18C0\nENDCHAR\nSTARTCHAR U_574C\nENCODING 22348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2080\n5FC0\n88A0\n0880\n1280\n6500\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_574D\nENCODING 22349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2640\nFD40\n2440\n2FE0\n2440\n3C40\nC440\n0940\n1080\nENDCHAR\nSTARTCHAR U_574E\nENCODING 22350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n23E0\nFC20\n2140\n2100\n2100\n3A80\nC280\n0440\n1820\nENDCHAR\nSTARTCHAR U_574F\nENCODING 22351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2080\nF880\n2100\n2180\n2340\n3520\nC920\n0100\n0100\nENDCHAR\nSTARTCHAR U_5750\nENCODING 22352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2480\n2480\n2480\n5540\n8E20\n0400\n7FC0\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5751\nENCODING 22353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nF000\n2780\n2480\n2480\n3C80\nE4A0\n08A0\n1060\nENDCHAR\nSTARTCHAR U_5752\nENCODING 22354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4240\n7A80\n4320\n5A20\nE1E0\n0400\n7FC0\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5753\nENCODING 22355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n0900\n7FC0\n0900\nFFE0\n1100\n2500\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5754\nENCODING 22356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0460\nF580\n1600\n2580\nD460\n0800\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5755\nENCODING 22357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n3E00\n2900\n2900\n2880\n4460\n8400\n3F80\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5756\nENCODING 22358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0000\nFFE0\n1200\n1220\n21E0\nC400\n3FC0\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5757\nENCODING 22359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n27C0\nF940\n2140\n2140\n2FE0\n3100\nC280\n0440\n1820\nENDCHAR\nSTARTCHAR U_5758\nENCODING 22360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2200\nFA00\n23C0\n2440\n2440\n2780\n3880\nC080\n0FE0\nENDCHAR\nSTARTCHAR U_5759\nENCODING 22361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n2480\n4480\n4900\n2480\n2480\n0400\n7FC0\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_575A\nENCODING 22362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n5440\n5280\n5100\n5280\n1460\n0400\n3F80\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_575B\nENCODING 22363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n2000\nF000\n2FE0\n2100\n2200\n3200\nC440\n1FE0\n0820\nENDCHAR\nSTARTCHAR U_575C\nENCODING 22364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\n2480\nFC80\n27E0\n24A0\n24A0\n3CA0\nC520\n0AA0\n1440\nENDCHAR\nSTARTCHAR U_575D\nENCODING 22365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n2520\nFD20\n2520\n2520\n2520\n3D20\nE280\n0440\n0820\nENDCHAR\nSTARTCHAR U_575E\nENCODING 22366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2440\nFC40\n2580\n2400\n27E0\n3820\nE7A0\n0020\n00C0\nENDCHAR\nSTARTCHAR U_575F\nENCODING 22367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nF440\n2440\n2280\n2280\n3900\nE280\n0440\n0820\nENDCHAR\nSTARTCHAR U_5760\nENCODING 22368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n9100\nA100\n9280\nD440\nA820\n8400\n7FC0\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5761\nENCODING 22369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n27E0\nFCA0\n2480\n27C0\n2D40\n3540\nE480\n0940\n1620\nENDCHAR\nSTARTCHAR U_5762\nENCODING 22370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2920\n2540\nF900\n27C0\n2100\n3900\nEFE0\n0100\n0100\n0100\nENDCHAR\nSTARTCHAR U_5763\nENCODING 22371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2480\n1480\n7FE0\n4020\n8440\n3F80\n0400\n0400\n0400\n7FC0\nENDCHAR\nSTARTCHAR U_5764\nENCODING 22372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2FE0\nF920\n2FE0\n2920\n2FE0\n3920\nC100\n0100\n0100\nENDCHAR\nSTARTCHAR U_5765\nENCODING 22373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2440\nFFC0\n2440\n2440\n27C0\n2440\n3C40\nC440\n1FE0\nENDCHAR\nSTARTCHAR U_5766\nENCODING 22374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n2440\n2440\nFFC0\n2440\n2440\n27C0\n3800\nC000\n0FE0\nENDCHAR\nSTARTCHAR U_5767\nENCODING 22375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2200\nF200\n2400\n27C0\n2C40\n2440\n3440\nE7C0\n0440\nENDCHAR\nSTARTCHAR U_5768\nENCODING 22376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n27E0\nFC20\n2200\n2240\n2280\n3B00\nC220\n0220\n01E0\nENDCHAR\nSTARTCHAR U_5769\nENCODING 22377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2440\n2FE0\nF440\n2440\n27C0\n2440\n3C40\nC440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_576A\nENCODING 22378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n2920\nF520\n2540\n2100\n2FE0\n3100\nC100\n0100\n0100\nENDCHAR\nSTARTCHAR U_576B\nENCODING 22379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n21E0\nF900\n2100\n27E0\n2420\n3C20\nE420\n07E0\n0420\nENDCHAR\nSTARTCHAR U_576C\nENCODING 22380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00E0\n2F80\n2A80\nFA80\n2A80\n2A80\n2A40\n3A40\nCAC0\n13A0\n24A0\nENDCHAR\nSTARTCHAR U_576D\nENCODING 22381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n2420\nFFE0\n2500\n2520\n2540\n3D80\nC520\n0920\n10E0\nENDCHAR\nSTARTCHAR U_576E\nENCODING 22382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2200\nF440\n27E0\n2000\n27C0\n3C40\nE440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_576F\nENCODING 22383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2100\nF900\n2380\n2540\n2920\n3920\nE100\n0100\n1FE0\nENDCHAR\nSTARTCHAR U_5770\nENCODING 22384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n2BA0\nFAA0\n2AA0\n2AA0\n2BA0\n3AA0\nC820\n08A0\n0840\nENDCHAR\nSTARTCHAR U_5771\nENCODING 22385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n27C0\nF540\n2540\n2540\n2FE0\n3900\nC280\n0440\n0820\nENDCHAR\nSTARTCHAR U_5772\nENCODING 22386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n2FE0\nF2A0\n2FE0\n2A80\n2FE0\n32A0\nC4E0\n0880\n1080\nENDCHAR\nSTARTCHAR U_5773\nENCODING 22387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n25E0\nFAA0\n2EA0\n24A0\n24A0\n3BA0\nCCA0\n0120\n0260\nENDCHAR\nSTARTCHAR U_5774\nENCODING 22388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n0400\nFFE0\n2080\nC460\n3F80\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5775\nENCODING 22389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2380\n2200\nFA00\n23E0\n2240\n2240\n2240\n3A40\nC240\n07E0\nENDCHAR\nSTARTCHAR U_5776\nENCODING 22390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2640\n2540\nF440\n2FE0\n2640\n2540\n3C40\nC7E0\n0040\n0180\nENDCHAR\nSTARTCHAR U_5777\nENCODING 22391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n2040\n2040\nF740\n2540\n2540\n2740\n3540\nC040\n0040\n01C0\nENDCHAR\nSTARTCHAR U_5778\nENCODING 22392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n27C0\nF840\n2F40\n2940\n2940\n2F40\n3040\nC140\n0080\nENDCHAR\nSTARTCHAR U_5779\nENCODING 22393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n2100\n2FE0\n2820\nFAA0\n2280\n2280\n3280\nC440\n0440\n0820\nENDCHAR\nSTARTCHAR U_577A\nENCODING 22394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n2240\n2FE0\n2200\nF3C0\n2240\n2240\n2540\n3480\nC940\n1260\nENDCHAR\nSTARTCHAR U_577B\nENCODING 22395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2780\n2480\nFC80\n27E0\n2480\n2480\n3C80\nE540\n06A0\n00A0\nENDCHAR\nSTARTCHAR U_577C\nENCODING 22396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2400\n2400\nFFE0\n2480\n2580\n24C0\n3CA0\nC4A0\n0880\n1080\nENDCHAR\nSTARTCHAR U_577D\nENCODING 22397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2440\nF920\n2080\n27E0\n2040\n3A80\nC100\n0080\n0080\nENDCHAR\nSTARTCHAR U_577E\nENCODING 22398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n27E0\n7420\n2000\n23C0\n2880\n3080\nC080\n4280\n0100\nENDCHAR\nSTARTCHAR U_577F\nENCODING 22399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n4440\nEBE0\n5840\n4A40\n4940\n6940\n4840\n8940\n0880\nENDCHAR\nSTARTCHAR U_5780\nENCODING 22400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n2520\nFB40\n2100\n2FE0\n2100\n3900\nC100\n0500\n0200\nENDCHAR\nSTARTCHAR U_5781\nENCODING 22401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n23C0\nF500\n2900\n2FE0\n2100\n2100\n3280\nC440\n0820\nENDCHAR\nSTARTCHAR U_5782\nENCODING 22402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n7E00\n0400\nFFE0\n2480\nFFE0\n2480\n2480\nFFE0\n0400\n7FC0\nENDCHAR\nSTARTCHAR U_5783\nENCODING 22403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n27E0\nF800\n2440\n2440\n2240\n3A40\nC280\n0080\n0FE0\nENDCHAR\nSTARTCHAR U_5784\nENCODING 22404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n0900\nFFE0\n1480\n1520\n2620\n5BE0\n8400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5785\nENCODING 22405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2240\nFA00\n2FE0\n2500\n2540\n2540\n3D80\nC520\n0920\n12E0\nENDCHAR\nSTARTCHAR U_5786\nENCODING 22406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\n2100\nFFE0\n2420\n2420\n27E0\n3C20\nC400\n0800\n1000\nENDCHAR\nSTARTCHAR U_5787\nENCODING 22407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n5CE0\n54A0\n54A0\nF4A0\n57A0\n54A0\n5020\n7020\n9FE0\n1020\nENDCHAR\nSTARTCHAR U_5788\nENCODING 22408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n2240\n6FE0\nA200\n21A0\n2460\n0400\n3F80\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5789\nENCODING 22409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n4FC0\n5040\nEF40\n4940\n4940\n4F40\n5940\n6880\nC820\n07E0\nENDCHAR\nSTARTCHAR U_578A\nENCODING 22410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n4840\n4FC0\nE900\n4900\n4FE0\n4900\n6900\n4AA0\n8CA0\n0860\nENDCHAR\nSTARTCHAR U_578B\nENCODING 22411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E40\n2940\n2940\nFF40\n2940\n2840\n4CC0\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_578C\nENCODING 22412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n2BA0\nF820\n2BA0\n2AA0\n2BA0\n3AA0\nC820\n08A0\n0840\nENDCHAR\nSTARTCHAR U_578D\nENCODING 22413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2200\n27E0\nFC20\n2420\n27E0\n2420\n3FE0\nC420\n0420\n07E0\nENDCHAR\nSTARTCHAR U_578E\nENCODING 22414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n2440\nFA80\n2100\n2280\n2C60\n37C0\nC440\n0440\n07C0\nENDCHAR\nSTARTCHAR U_578F\nENCODING 22415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2140\nFFE0\n2140\n27C0\n2100\n37C0\nC100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_5790\nENCODING 22416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n87C0\n5440\n2A80\nD300\n4480\n5860\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5791\nENCODING 22417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n23C0\n2440\nFA80\n2300\n2D00\n23E0\n3C40\nC280\n0100\n0E00\nENDCHAR\nSTARTCHAR U_5792\nENCODING 22418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1080\n7F40\n2080\n5140\nEBA0\n0400\n3F80\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5793\nENCODING 22419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n27E0\nFA40\n2480\n2320\n2240\n3C80\nC140\n0220\n0C20\nENDCHAR\nSTARTCHAR U_5794\nENCODING 22420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n4A40\n7FC0\n4440\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5795\nENCODING 22421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2000\n3FE0\n2000\n2FC0\n2840\n4FC0\n0200\n1FC0\n0200\n7FE0\nENDCHAR\nSTARTCHAR U_5796\nENCODING 22422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2100\n23E0\nFA20\n2220\n23E0\n2200\n3BE0\nC220\n0220\n03E0\nENDCHAR\nSTARTCHAR U_5797\nENCODING 22423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n2AA0\nF6C0\n2280\n26C0\n2AA0\n3280\nC4A0\n04A0\n0860\nENDCHAR\nSTARTCHAR U_5798\nENCODING 22424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n22C0\n24A0\nF7E0\n2C80\n2480\n2480\n3540\nC540\n0520\n0620\nENDCHAR\nSTARTCHAR U_5799\nENCODING 22425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2920\n2540\nF100\n2FE0\n2280\n2280\n3A80\nC2A0\n04A0\n0860\nENDCHAR\nSTARTCHAR U_579A\nENCODING 22426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n0400\n0400\nFFE0\n0000\n2080\nFBE0\n2080\n3880\nC7E0\nENDCHAR\nSTARTCHAR U_579B\nENCODING 22427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n2280\n2280\nFCE0\n2100\n2100\n2FE0\n3100\nC580\n0940\n1120\nENDCHAR\nSTARTCHAR U_579C\nENCODING 22428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\n2280\n22E0\nFA20\n24A0\n2940\n2FE0\n3380\nC540\n1920\n0100\nENDCHAR\nSTARTCHAR U_579D\nENCODING 22429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n2480\nFFE0\n2400\n25E0\n2520\n3D60\nC500\n0920\n10E0\nENDCHAR\nSTARTCHAR U_579E\nENCODING 22430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nF820\n20C0\n2700\n2100\n39E0\nC700\n0120\n00E0\nENDCHAR\nSTARTCHAR U_579F\nENCODING 22431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n2FE0\nF100\n2100\n27C0\n2100\n3100\nCFE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_57A0\nENCODING 22432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nFC40\n27C0\n2520\n2540\n3C80\nC480\n0540\n0620\nENDCHAR\nSTARTCHAR U_57A1\nENCODING 22433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n2480\n7FE0\nA440\n2280\n2320\n3CE0\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_57A2\nENCODING 22434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\n2400\nF400\n27E0\n2400\n27E0\n3620\nCA20\n0BE0\n1220\nENDCHAR\nSTARTCHAR U_57A3\nENCODING 22435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2000\n27C0\nF440\n2440\n27C0\n2440\n37C0\nC440\n0000\n0FE0\nENDCHAR\nSTARTCHAR U_57A4\nENCODING 22436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n2200\nF440\n27A0\n2100\n2100\n37C0\nC100\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_57A5\nENCODING 22437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2440\nF820\n27C0\n2000\n27C0\n3C40\nC440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_57A6\nENCODING 22438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n4080\n7F80\n4080\n7FA0\n4940\nF080\n0460\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_57A7\nENCODING 22439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2400\n2FE0\nF820\n2BA0\n2AA0\n2AA0\n3BA0\nC820\n08A0\n0840\nENDCHAR\nSTARTCHAR U_57A8\nENCODING 22440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n2FE0\nF820\n2080\n27E0\n2080\n3480\nC280\n0080\n0180\nENDCHAR\nSTARTCHAR U_57A9\nENCODING 22441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0900\n4940\n2980\n0900\nFFE0\n0400\n0400\n3FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_57AA\nENCODING 22442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n27C0\nFA80\n2280\n2FE0\n2280\n3280\nC480\n0480\n0880\nENDCHAR\nSTARTCHAR U_57AB\nENCODING 22443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFF80\n2280\n36A0\nE3A0\n2CE0\n6400\n0400\n3FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_57AC\nENCODING 22444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\n27E0\nFA40\n2240\n2240\n2FE0\n3000\nC240\n0420\n0820\nENDCHAR\nSTARTCHAR U_57AD\nENCODING 22445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n2280\nF2A0\n2AA0\n26C0\n2280\n3280\nC280\n0280\n0FE0\nENDCHAR\nSTARTCHAR U_57AE\nENCODING 22446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2440\nFBA0\n2000\n2FE0\n2200\n3BC0\nE040\n0240\n0180\nENDCHAR\nSTARTCHAR U_57AF\nENCODING 22447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2880\n2480\n23E0\nFC80\n2480\n2540\n2620\n3420\nCA00\n11E0\nENDCHAR\nSTARTCHAR U_57B0\nENCODING 22448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n21C0\nF900\n27E0\n2000\n27E0\n3100\nC140\n0120\n0100\nENDCHAR\nSTARTCHAR U_57B1\nENCODING 22449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n2920\n2540\nF100\n27E0\n2020\n2020\n23E0\n3020\nC020\n07E0\nENDCHAR\nSTARTCHAR U_57B2\nENCODING 22450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2920\n2FE0\nF000\n2FE0\n2020\n2FE0\n3800\nC800\n0820\n07E0\nENDCHAR\nSTARTCHAR U_57B3\nENCODING 22451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n24E0\n2800\nF200\n25E0\n2C40\n2440\n2440\n3440\nC440\n04C0\nENDCHAR\nSTARTCHAR U_57B4\nENCODING 22452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nF000\n2280\n2AA0\n2920\n3AA0\nCAA0\n0FE0\n0820\nENDCHAR\nSTARTCHAR U_57B5\nENCODING 22453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n27E0\nF520\n2100\n2FE0\n2240\n3A40\nE180\n0140\n0E20\nENDCHAR\nSTARTCHAR U_57B6\nENCODING 22454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nF440\n2280\n2FE0\n2100\n37C0\nC100\n0100\n0100\nENDCHAR\nSTARTCHAR U_57B7\nENCODING 22455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nFC40\n27C0\n2440\n27C0\n3280\nC280\n04A0\n0860\nENDCHAR\nSTARTCHAR U_57B8\nENCODING 22456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2820\nF7C0\n2000\n2FE0\n2280\n3280\nC2A0\n04A0\n1860\nENDCHAR\nSTARTCHAR U_57B9\nENCODING 22457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n44A0\n5FA0\nE4A0\n4EC0\n44A0\n5FA0\n64A0\n84E0\n0880\n1080\nENDCHAR\nSTARTCHAR U_57BA\nENCODING 22458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2F20\n2540\nF280\n27E0\n2040\n2080\n37E0\nC080\n0080\n0380\nENDCHAR\nSTARTCHAR U_57BB\nENCODING 22459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n27E0\nFC20\n2420\n27E0\n2420\n37E0\nC240\n0420\n0820\nENDCHAR\nSTARTCHAR U_57BC\nENCODING 22460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\n44E0\n9800\n2FC0\n6480\nA300\n2CE0\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_57BD\nENCODING 22461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nA400\n57E0\n1480\n2480\nC880\n5080\n0400\n3FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_57BE\nENCODING 22462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nFC40\n27C0\n2000\n27C0\n3100\nCFE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_57BF\nENCODING 22463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2800\nFFE0\n2940\n2880\n2FE0\n38A0\nC880\n1280\n2100\nENDCHAR\nSTARTCHAR U_57C0\nENCODING 22464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n1500\n75C0\n1520\nF5E0\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_57C1\nENCODING 22465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2920\n2FE0\nF100\n2280\n2540\n2920\n37C0\nC080\n0100\n0200\nENDCHAR\nSTARTCHAR U_57C2\nENCODING 22466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n2FE0\nF920\n2FE0\n2920\n2FE0\n3500\nC200\n0500\n18E0\nENDCHAR\nSTARTCHAR U_57C3\nENCODING 22467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2440\n2FA0\nF400\n27C0\n2900\n2100\n3FE0\nC280\n0440\n1820\nENDCHAR\nSTARTCHAR U_57C4\nENCODING 22468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\n2A80\nF100\n2EE0\n2100\n27C0\n3100\nCFE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_57C5\nENCODING 22469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n6200\n53C0\n5240\n6540\n4880\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_57C6\nENCODING 22470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\n2880\nFFE0\n2920\n2FE0\n2920\n3FE0\nC920\n0920\n1060\nENDCHAR\nSTARTCHAR U_57C7\nENCODING 22471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n2100\nFFE0\n2920\n2FE0\n2920\n3FE0\nC920\n0920\n0860\nENDCHAR\nSTARTCHAR U_57C8\nENCODING 22472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2240\n27E0\nFA40\n2520\n23E0\n3640\nC980\n0240\n0C20\nENDCHAR\nSTARTCHAR U_57C9\nENCODING 22473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\n5FE0\nE200\n4A40\n4A40\n56A0\n6200\nC500\n0880\n1060\nENDCHAR\nSTARTCHAR U_57CA\nENCODING 22474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0400\n74C0\n2500\nC8E0\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_57CB\nENCODING 22475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n2540\nFFC0\n2540\n27C0\n2100\n3FC0\nC100\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_57CC\nENCODING 22476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2440\nFFC0\n2440\n27C0\n2520\n3D40\nC480\n0540\n0620\nENDCHAR\nSTARTCHAR U_57CD\nENCODING 22477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n27E0\nF800\n27E0\n2420\n3FE0\nE420\n47E0\n0420\n0460\nENDCHAR\nSTARTCHAR U_57CE\nENCODING 22478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n40A0\n4FE0\nF880\n4EA0\n4AA0\n5AC0\n6A80\nD6A0\n1160\n2220\nENDCHAR\nSTARTCHAR U_57CF\nENCODING 22479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5C20\n45C0\n4440\nE960\n4D40\n4540\n4540\n75E0\nCC00\n1200\n21E0\nENDCHAR\nSTARTCHAR U_57D0\nENCODING 22480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n4040\n47C0\nE040\n5FE0\n5020\n4FC0\n6480\n8300\n0CC0\n3020\nENDCHAR\nSTARTCHAR U_57D1\nENCODING 22481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\nFE00\n13E0\n1E80\nF280\n1480\n3880\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_57D2\nENCODING 22482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2720\n2520\nFAC0\n2040\n2FE0\n2440\n3A40\nC240\n0040\n00C0\nENDCHAR\nSTARTCHAR U_57D3\nENCODING 22483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2F00\n24A0\nF2C0\n2340\n2C40\n27E0\n3040\nC440\n0240\n00C0\nENDCHAR\nSTARTCHAR U_57D4\nENCODING 22484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\n2FE0\nF100\n2FE0\n2920\n2FE0\n3920\nCFE0\n0920\n0860\nENDCHAR\nSTARTCHAR U_57D5\nENCODING 22485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2440\nF7C0\n2000\n2FE0\n2100\n37C0\nE100\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_57D6\nENCODING 22486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3FE0\n2480\n2200\nFA80\n24A0\n2CC0\n2580\n3680\nC4A0\n0460\nENDCHAR\nSTARTCHAR U_57D7\nENCODING 22487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\n25C0\nF500\n2FE0\n2100\n2520\n3540\nC980\n0100\n0E00\nENDCHAR\nSTARTCHAR U_57D8\nENCODING 22488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2E40\n2A40\nFBE0\n2A40\n2F40\n2AC0\n2A40\n3A40\nCE40\n00C0\nENDCHAR\nSTARTCHAR U_57D9\nENCODING 22489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nF000\n2FE0\n2820\n2920\n3920\nC920\n0280\n0C60\nENDCHAR\nSTARTCHAR U_57DA\nENCODING 22490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2440\nF7C0\n2100\n2FE0\n2920\n3AA0\nCC60\n0820\n0860\nENDCHAR\nSTARTCHAR U_57DB\nENCODING 22491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2820\n2AA0\nFC60\n2BA0\n2AA0\n2BA0\n3820\nC8A0\n0840\nENDCHAR\nSTARTCHAR U_57DC\nENCODING 22492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n3080\n69C0\nA2A0\n2480\n0400\n7FC0\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_57DD\nENCODING 22493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n2480\n2A40\nF120\n2FC0\n2080\n2100\n32C0\nCA20\n0A60\n11C0\nENDCHAR\nSTARTCHAR U_57DE\nENCODING 22494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\n2820\nF000\n2FC0\n2200\n2BC0\n3A00\nCA00\n0E00\n11E0\nENDCHAR\nSTARTCHAR U_57DF\nENCODING 22495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\n2FE0\nF080\n2EA0\n2AA0\n2EC0\n3080\nC6A0\n1960\n0220\nENDCHAR\nSTARTCHAR U_57E0\nENCODING 22496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\n2440\nF7C0\n2400\n27C0\n2440\n37C0\nC100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_57E1\nENCODING 22497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n2280\nFEE0\n2820\n2820\n2820\n3EE0\nE280\n0280\n1FE0\nENDCHAR\nSTARTCHAR U_57E2\nENCODING 22498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\n2FE0\nF100\n2FE0\n2440\n2FA0\n3C80\nE5A0\n0420\n03E0\nENDCHAR\nSTARTCHAR U_57E3\nENCODING 22499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2440\nF440\n2AA0\n2920\n2100\n3FE0\nC100\n0100\n0100\nENDCHAR\nSTARTCHAR U_57E4\nENCODING 22500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\n2920\nFFE0\n2920\n2FE0\n2AA0\n3480\nCFE0\n0080\n0080\nENDCHAR\nSTARTCHAR U_57E5\nENCODING 22501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nF7C0\n2100\n2FE0\n2440\n3FC0\nC440\n07C0\n04C0\nENDCHAR\nSTARTCHAR U_57E6\nENCODING 22502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2420\nFA40\n27E0\n29A0\n36A0\n22E0\n3A80\nC4A0\n1860\nENDCHAR\nSTARTCHAR U_57E7\nENCODING 22503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2840\n2FC0\nF840\n2FC0\n2840\n2FC0\n3840\nCFE0\n0480\n1860\nENDCHAR\nSTARTCHAR U_57E8\nENCODING 22504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4300\n4480\nF840\n5720\n4000\n4FE0\n4AA0\n7FE0\nCAA0\n0AA0\nENDCHAR\nSTARTCHAR U_57E9\nENCODING 22505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n2480\nFFC0\n2140\n2FE0\n2140\n37C0\nC100\n0100\n0300\nENDCHAR\nSTARTCHAR U_57EA\nENCODING 22506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n4100\n4FE0\n4820\nF280\n4440\n4000\n47C0\n7100\nC100\n0FE0\nENDCHAR\nSTARTCHAR U_57EB\nENCODING 22507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2920\n2540\nFFE0\n2820\n2BA0\n2AA0\n3AA0\nEBA0\n0820\n0840\nENDCHAR\nSTARTCHAR U_57EC\nENCODING 22508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nFFE0\n2920\n2FE0\n2920\n3FE0\nE580\n0940\n1120\nENDCHAR\nSTARTCHAR U_57ED\nENCODING 22509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FC0\n2140\nFFE0\n2140\n2FE0\n2540\n3380\nC540\n1920\n0300\nENDCHAR\nSTARTCHAR U_57EE\nENCODING 22510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n2540\n2900\nF280\n2D60\n2120\n2540\n3580\nC900\n0280\n0C60\nENDCHAR\nSTARTCHAR U_57EF\nENCODING 22511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2280\nF540\n2FE0\n2540\n27C0\n3D40\nE7C0\n0120\n00E0\nENDCHAR\nSTARTCHAR U_57F0\nENCODING 22512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2F20\n2A20\nF540\n2100\n2FE0\n2100\n3380\nC540\n0920\n1120\nENDCHAR\nSTARTCHAR U_57F1\nENCODING 22513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n45E0\n46A0\nE4A0\n5FA0\n44A0\n46A0\n6DA0\nD440\n24A0\n0D20\nENDCHAR\nSTARTCHAR U_57F2\nENCODING 22514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nF7C0\n2200\n2FE0\n3540\nCBA0\n0100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_57F3\nENCODING 22515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n2440\nF880\n22E0\n2C20\n2820\n3EE0\nC820\n0FE0\n0820\nENDCHAR\nSTARTCHAR U_57F4\nENCODING 22516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nF7C0\n2440\n27C0\n2440\n3F40\nC5C0\n0440\n1FE0\nENDCHAR\nSTARTCHAR U_57F5\nENCODING 22517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\n2100\nFFE0\n2540\n2FE0\n2540\n3540\nCFE0\n0100\n07C0\nENDCHAR\nSTARTCHAR U_57F6\nENCODING 22518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7D00\n13C0\nFD40\n2940\n5740\n9140\n79C0\n1240\nFC60\n0420\nENDCHAR\nSTARTCHAR U_57F7\nENCODING 22519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n27C0\nF940\n5540\nFB40\n2140\nF9C0\n2240\n2420\n2820\nENDCHAR\nSTARTCHAR U_57F8\nENCODING 22520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nFC40\n27C0\n2200\n27E0\n3AA0\nC2A0\n0D20\n02C0\nENDCHAR\nSTARTCHAR U_57F9\nENCODING 22521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nF440\n2280\n2FE0\n2000\n37C0\nC440\n0440\n07C0\nENDCHAR\nSTARTCHAR U_57FA\nENCODING 22522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1100\n1D00\n1700\n1100\nFFE0\n2480\nDF60\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_57FB\nENCODING 22523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2440\nF7C0\n2000\n27E0\n2080\n3FE0\nE100\n0500\n0200\nENDCHAR\nSTARTCHAR U_57FC\nENCODING 22524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2280\nF440\n2FE0\n2040\n2740\n3D40\nC740\n0040\n01C0\nENDCHAR\nSTARTCHAR U_57FD\nENCODING 22525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2040\n27C0\nF040\n2FE0\n2920\n27C0\n3540\nC540\n05C0\n0100\nENDCHAR\nSTARTCHAR U_57FE\nENCODING 22526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2620\n3D40\n2480\n3C80\n2560\nFE20\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_57FF\nENCODING 22527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n8FC0\n5A00\n2BC0\nCA20\n55E0\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5800\nENCODING 22528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n2820\nFFE0\n2880\n2AA0\n2BE0\n2880\n3AA0\nCAA0\n13E0\nENDCHAR\nSTARTCHAR U_5801\nENCODING 22529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n27C0\nFD40\n27C0\n2100\n27E0\n3900\nC380\n0540\n0920\nENDCHAR\nSTARTCHAR U_5802\nENCODING 22530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\nFFE0\n8020\nBFA0\n2080\n3F80\n0400\n3FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5803\nENCODING 22531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n4200\n7BC0\n4A40\n6A40\n9CC0\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5804\nENCODING 22532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2CE0\n2820\nFEE0\n2820\n2820\n2FE0\n3A80\nC2A0\n04A0\n1860\nENDCHAR\nSTARTCHAR U_5805\nENCODING 22533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5240\n7E40\n4540\n7C80\n5140\n7A20\n0400\n3FC0\n0400\n7FE0\nENDCHAR\nSTARTCHAR U_5806\nENCODING 22534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n2480\n27E0\nFC80\n27E0\n2480\n2480\n3FE0\nC480\n07E0\n0400\nENDCHAR\nSTARTCHAR U_5807\nENCODING 22535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n0900\n3FC0\n2240\n7FE0\n0200\n3FC0\n0200\n7FE0\nENDCHAR\nSTARTCHAR U_5808\nENCODING 22536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n2920\nFFE0\n2920\n2D60\n2D60\n3FE0\nC820\n08A0\n0840\nENDCHAR\nSTARTCHAR U_5809\nENCODING 22537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2240\nFFA0\n2000\n27C0\n2440\n3FC0\nC440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_580A\nENCODING 22538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0900\n79E0\n4020\n79E0\n0900\n7FE0\n0400\n3FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_580B\nENCODING 22539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2AA0\nFEE0\n2AA0\n2AA0\n2EE0\n2AA0\nD2A0\n12A0\n2760\nENDCHAR\nSTARTCHAR U_580C\nENCODING 22540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\n2920\nFFE0\n2920\n2BA0\n2AA0\n3BA0\nCAA0\n0820\n0FE0\nENDCHAR\nSTARTCHAR U_580D\nENCODING 22541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n2480\nFFC0\n2540\n2540\n27C0\n3300\nC5A0\n0920\n10E0\nENDCHAR\nSTARTCHAR U_580E\nENCODING 22542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2100\nFFE0\n2440\n2A20\n23C0\n3E40\nC180\n0240\n0C20\nENDCHAR\nSTARTCHAR U_580F\nENCODING 22543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFBE0\n1100\n39E0\n5520\n92A0\n1440\n3FC0\n0400\n0400\n7FE0\nENDCHAR\nSTARTCHAR U_5810\nENCODING 22544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2900\n2900\nFFC0\n2900\n2FE0\n2900\n3FC0\nC900\n1100\n2FE0\nENDCHAR\nSTARTCHAR U_5811\nENCODING 22545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\nFDC0\n5100\nFDE0\n1140\n7A40\n1440\n0200\n3FC0\n0200\n7FE0\nENDCHAR\nSTARTCHAR U_5812\nENCODING 22546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2840\n2FC0\nF840\n2FC0\n2900\n2960\n3F80\nE920\n0B20\n0CE0\nENDCHAR\nSTARTCHAR U_5813\nENCODING 22547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2520\n27E0\nF000\n27E0\n2400\n35C0\nC480\n07E0\n0880\n1080\nENDCHAR\nSTARTCHAR U_5814\nENCODING 22548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n2440\nF920\n2100\n2FE0\n2100\n3380\nC540\n0920\n1120\nENDCHAR\nSTARTCHAR U_5815\nENCODING 22549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nAFE0\nA440\nCFC0\nA440\nA7C0\nE440\n84C0\n3FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5816\nENCODING 22550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2540\n2A80\nFA80\n2540\n2FE0\n2AA0\n3920\nCAA0\n0820\n0FE0\nENDCHAR\nSTARTCHAR U_5817\nENCODING 22551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n2FE0\n2820\n2240\nF5A0\n2140\n2FE0\n3100\nC280\n0440\n0820\nENDCHAR\nSTARTCHAR U_5818\nENCODING 22552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n2680\n2FC0\nF200\n3FE0\n2500\n2880\n3260\nEF80\n0200\n1FE0\nENDCHAR\nSTARTCHAR U_5819\nENCODING 22553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n2FE0\nFAA0\n2AA0\n2FE0\n2100\n37C0\nC100\n0100\n1FE0\nENDCHAR\nSTARTCHAR U_581A\nENCODING 22554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n5220\nEFC0\n4200\n4FC0\n4EC0\n4B40\n6FC0\nC200\n1FE0\n0200\nENDCHAR\nSTARTCHAR U_581B\nENCODING 22555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2000\n27C0\nF440\n27C0\n2000\n2FE0\n3920\nCFE0\n0920\n0FE0\nENDCHAR\nSTARTCHAR U_581C\nENCODING 22556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nFFE0\n2AA0\n2920\n2FE0\n3100\nC380\n0540\n0920\nENDCHAR\nSTARTCHAR U_581D\nENCODING 22557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2740\nF540\n2FE0\n2820\n2BA0\n3AA0\nCBA0\n0820\n0860\nENDCHAR\nSTARTCHAR U_581E\nENCODING 22558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\n2540\nF5C0\n2400\n27E0\n2100\n3FE0\nC380\n0540\n0920\nENDCHAR\nSTARTCHAR U_581F\nENCODING 22559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n4440\n4780\nE080\n5FE0\n4340\n4580\n7AC0\nC5A0\n02A0\n0D80\nENDCHAR\nSTARTCHAR U_5820\nENCODING 22560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27E0\nF500\n2DE0\n2680\n2480\n37E0\nC480\n0540\n0620\nENDCHAR\nSTARTCHAR U_5821\nENCODING 22561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2840\n2FC0\n6200\nBFE0\n2A80\n3260\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5822\nENCODING 22562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n47E0\n4A20\nFBE0\n4880\n4FE0\n4880\n79C0\nCAA0\n0CA0\n0880\nENDCHAR\nSTARTCHAR U_5823\nENCODING 22563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n27C0\nFD40\n27C0\n2100\n2FE0\n3920\nC960\n0FA0\n0860\nENDCHAR\nSTARTCHAR U_5824\nENCODING 22564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nFC40\n27C0\n2000\n2FE0\n3500\nC5C0\n0B00\n10E0\nENDCHAR\nSTARTCHAR U_5825\nENCODING 22565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n29E0\n1140\n7F40\n1480\n3140\n5220\nB200\n1FC0\n0200\n7FE0\nENDCHAR\nSTARTCHAR U_5826\nENCODING 22566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n2960\n2F80\nF920\n2EE0\n2000\n27C0\n3440\nE7C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_5827\nENCODING 22567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n2FE0\nFAA0\n2AA0\n2860\n2100\n3FE0\nC100\n0280\n0C60\nENDCHAR\nSTARTCHAR U_5828\nENCODING 22568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nFC40\n27C0\n2200\n27E0\n3CA0\nC560\n07A0\n00C0\nENDCHAR\nSTARTCHAR U_5829\nENCODING 22569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n4BE0\n4800\nEBE0\n4E20\n5BE0\n4A20\n7BE0\n8800\n0800\n0BE0\nENDCHAR\nSTARTCHAR U_582A\nENCODING 22570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\n2240\nFBC0\n2240\n23C0\n2240\n3FE0\nC540\n0620\n07E0\nENDCHAR\nSTARTCHAR U_582B\nENCODING 22571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2920\n2AA0\nFFE0\n2480\n2A40\n33A0\n2480\n3A80\nC100\n1EE0\nENDCHAR\nSTARTCHAR U_582C\nENCODING 22572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n4440\n4BA0\nF000\n4EA0\n4AA0\n4EA0\n7AA0\n8EA0\n0A20\n0AE0\nENDCHAR\nSTARTCHAR U_582D\nENCODING 22573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2440\nF7C0\n2440\n2FE0\n2100\n3100\nC7C0\n0100\n1FE0\nENDCHAR\nSTARTCHAR U_582E\nENCODING 22574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2EE0\nF000\n27C0\n2000\n2FE0\n3200\nE7C0\n0040\n0180\nENDCHAR\nSTARTCHAR U_582F\nENCODING 22575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n0400\n7FC0\n2100\nFBC0\n2100\nFFE0\n0A00\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_5830\nENCODING 22576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4A40\n4BC0\nFA40\n4BC0\n4900\n4FE0\n7A40\nC980\n0A40\n0FE0\nENDCHAR\nSTARTCHAR U_5831\nENCODING 22577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n7E20\n1220\nFEC0\n4600\n2BE0\n7E20\n1320\nFEC0\n12A0\n1320\nENDCHAR\nSTARTCHAR U_5832\nENCODING 22578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4520\n7D20\n4520\n7D20\n4960\n7500\n0400\n3FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5833\nENCODING 22579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4920\n4FE0\nF800\n4BE0\n4A20\n4BE0\n7A20\nCBE0\n1220\n23E0\nENDCHAR\nSTARTCHAR U_5834\nENCODING 22580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nF440\n2FE0\n2200\n37E0\nCAA0\n14A0\n0920\n02C0\nENDCHAR\nSTARTCHAR U_5835\nENCODING 22581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2120\n27A0\nF940\n27E0\n2100\n3BE0\nE620\n0BE0\n1220\n03E0\nENDCHAR\nSTARTCHAR U_5836\nENCODING 22582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2200\nF7C0\n2880\n27E0\n2420\n3FE0\nC420\n07E0\n0420\nENDCHAR\nSTARTCHAR U_5837\nENCODING 22583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4440\nF280\n4FE0\n4000\n47C0\n7440\nC7C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_5838\nENCODING 22584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n48A0\n4F20\nFA20\n4FA0\n4AA0\n4AA0\n7FA0\nCA20\n12A0\n2F60\nENDCHAR\nSTARTCHAR U_5839\nENCODING 22585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n2FE0\nFD40\n27C0\n2540\n27C0\n3900\nC7C0\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_583A\nENCODING 22586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n4A40\nFFC0\n4A40\n4FC0\n4480\n4840\n74A0\nC480\n0480\n0880\nENDCHAR\nSTARTCHAR U_583B\nENCODING 22587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2240\n8FE0\n6240\n3FE0\nC200\n5FE0\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_583C\nENCODING 22588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\n7C40\n13E0\nFE40\n1140\n7C40\n1940\nE480\n3FC0\n0400\n7FE0\nENDCHAR\nSTARTCHAR U_583D\nENCODING 22589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4AA0\n4AA0\nFFE0\n4000\n4FE0\n4100\n75C0\nC500\n0500\n1FE0\nENDCHAR\nSTARTCHAR U_583E\nENCODING 22590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\n2200\nF780\n2200\n2FE0\n2480\n2FC0\nF7A0\n2480\n0780\nENDCHAR\nSTARTCHAR U_583F\nENCODING 22591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n40A0\n4FE0\nF880\n4F80\n48A0\n7EA0\nCAC0\n0EA0\n1160\n2220\nENDCHAR\nSTARTCHAR U_5840\nENCODING 22592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2840\n2FC0\nFC40\n2A80\n2FE0\n2A80\n3FE0\nCA80\n1280\n2480\nENDCHAR\nSTARTCHAR U_5841\nENCODING 22593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n7FC0\n4440\n7FC0\n2100\n1600\n2500\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5842\nENCODING 22594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4480\n4FC0\nE480\n5FE0\n4480\n4FC0\n74A0\nC780\n0420\n07E0\nENDCHAR\nSTARTCHAR U_5843\nENCODING 22595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5FE0\nE480\n4100\n5FE0\n4400\n47C0\n4000\n6540\nC540\n0960\nENDCHAR\nSTARTCHAR U_5844\nENCODING 22596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n2AA0\nFFE0\n2100\n2FE0\n2200\n33C0\nC440\n0940\n1080\nENDCHAR\nSTARTCHAR U_5845\nENCODING 22597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45C0\n5940\n5160\nFE00\n51C0\n5D40\n5140\n5480\n7880\nD140\n1220\nENDCHAR\nSTARTCHAR U_5846\nENCODING 22598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n5FE0\n4D80\n5540\nEFC0\n4040\n4FC0\n4800\n6FC0\nC040\n01C0\nENDCHAR\nSTARTCHAR U_5847\nENCODING 22599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nF820\n27C0\n2000\n27C0\n3C40\nC7C0\n0440\n0FE0\nENDCHAR\nSTARTCHAR U_5848\nENCODING 22600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4A80\n7FE0\n4880\n79A0\n52A0\n6C60\n0400\n3FC0\n0400\n7FE0\nENDCHAR\nSTARTCHAR U_5849\nENCODING 22601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2D60\n2380\n2D60\nF280\n2FE0\n2440\n27C0\n3C40\nC7C0\n0440\n04C0\nENDCHAR\nSTARTCHAR U_584A\nENCODING 22602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\n2920\nFFE0\n2920\n2FE0\n2140\n33A0\nE5E0\n0920\n10E0\nENDCHAR\nSTARTCHAR U_584B\nENCODING 22603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n55A0\n5AC0\n9080\n2940\n4620\nFFE0\n8420\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_584C\nENCODING 22604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nF440\n27C0\n3000\n2EE0\n3AA0\nC660\n0BA0\n0660\nENDCHAR\nSTARTCHAR U_584D\nENCODING 22605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7920\n5540\n57E0\n7200\n5FE0\n5540\n7920\n57C0\n5100\n9100\nBFE0\nENDCHAR\nSTARTCHAR U_584E\nENCODING 22606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2AA0\nF440\n2920\n2280\n2440\n3FE0\nC440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_584F\nENCODING 22607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2920\n2FE0\nF000\n2FE0\n2000\n27C0\n3440\nC7C0\n0280\n1FE0\nENDCHAR\nSTARTCHAR U_5850\nENCODING 22608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4100\nEFE0\n4480\n4F00\n4240\n6FE0\nC100\n0940\n1320\nENDCHAR\nSTARTCHAR U_5851\nENCODING 22609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\nFF20\n11E0\n5520\n7DE0\n1220\n2C60\n4400\n3FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5852\nENCODING 22610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2FE0\n2A40\nFBE0\n2E40\n2BE0\n2A40\n3F40\nCAC0\n0040\n00C0\nENDCHAR\nSTARTCHAR U_5853\nENCODING 22611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n27C0\nF440\n27C0\n2440\n27C0\n3900\nEFE0\n0280\n0C60\nENDCHAR\nSTARTCHAR U_5854\nENCODING 22612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n2540\nFA80\n2440\n2BA0\n2000\n3FC0\nE440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_5855\nENCODING 22613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4A40\n54A0\nFF40\n4000\n5EE0\n42A0\n6A60\nC6A0\n1B20\n0660\nENDCHAR\nSTARTCHAR U_5856\nENCODING 22614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n4100\n5FE0\nE540\n5D60\n4540\n5D60\n6100\nC380\n0540\n1920\nENDCHAR\nSTARTCHAR U_5857\nENCODING 22615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\nA840\n57A0\n2200\n5FC0\nCA80\n5240\n6620\n3FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5858\nENCODING 22616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4900\nFFC0\n4940\n4FE0\n7940\nCFC0\n0C40\n17C0\n2440\nENDCHAR\nSTARTCHAR U_5859\nENCODING 22617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2440\nF7C0\n2000\n2FE0\n2820\n3BA0\nCAA0\n0BA0\n0860\nENDCHAR\nSTARTCHAR U_585A\nENCODING 22618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n27C0\nF200\n2520\n2EC0\n3480\nCBC0\n06A0\n1880\n0300\nENDCHAR\nSTARTCHAR U_585B\nENCODING 22619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4280\n4FE0\nFAA0\n4FE0\n4100\n4FE0\n7100\nC380\n0540\n0920\nENDCHAR\nSTARTCHAR U_585C\nENCODING 22620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4820\n47C0\nE000\n4FE0\n4640\n4B80\n6540\nCB40\n0520\n1B00\nENDCHAR\nSTARTCHAR U_585D\nENCODING 22621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2280\nFFE0\n2920\n2FE0\n2200\n3BC0\nC240\n0540\n0880\nENDCHAR\nSTARTCHAR U_585E\nENCODING 22622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n7FC0\n1100\nFFE0\n1100\n2480\n5F40\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_585F\nENCODING 22623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n1A00\n6B80\n1220\nE5E0\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5860\nENCODING 22624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5180\n4A00\n4BC0\nE240\n5BC0\n4A00\n4BC0\n4A40\n6BC0\n8800\n17E0\nENDCHAR\nSTARTCHAR U_5861\nENCODING 22625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\n4400\n47E0\nF000\n4BC0\n4A40\n4BC0\n5A40\n6FE0\nC440\n0820\nENDCHAR\nSTARTCHAR U_5862\nENCODING 22626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2440\nFFC0\n2400\n27E0\n2400\n3FE0\nC020\n0AA0\n1540\nENDCHAR\nSTARTCHAR U_5863\nENCODING 22627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\nA840\n5FC0\n2200\nCFC0\n4200\n5FE0\n0400\n3FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5864\nENCODING 22628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2FE0\nF820\n2FE0\n2820\n2FE0\n3820\nCFE0\n0480\n1860\nENDCHAR\nSTARTCHAR U_5865\nENCODING 22629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2000\n27C0\nF440\n27C0\n2000\n2FE0\n3AA0\nCFE0\n0920\n0960\nENDCHAR\nSTARTCHAR U_5866\nENCODING 22630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7FE0\n5540\n67C0\n5540\n7FE0\n4100\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5867\nENCODING 22631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4280\n4FE0\nF000\n4440\n4820\n47C0\n4540\n7540\nC540\n0FE0\nENDCHAR\nSTARTCHAR U_5868\nENCODING 22632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4FC0\n4480\nF480\n4FE0\n4A40\n5220\n6340\nCAA0\n12A0\n0600\nENDCHAR\nSTARTCHAR U_5869\nENCODING 22633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n4FC0\n5000\nEF80\n4880\n4F80\n4000\n5FC0\n7540\nD540\n3FE0\nENDCHAR\nSTARTCHAR U_586A\nENCODING 22634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40E0\n4F00\n4920\nF540\n4000\n4EE0\n4820\n4EE0\n6820\nC820\n0FE0\nENDCHAR\nSTARTCHAR U_586B\nENCODING 22635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nF7C0\n2440\n2740\n25C0\n3440\nEFE0\n0280\n0C60\nENDCHAR\nSTARTCHAR U_586C\nENCODING 22636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4880\n4BE0\nFA20\n4BE0\n4A20\n4BE0\n7880\nCAC0\n14A0\n29A0\nENDCHAR\nSTARTCHAR U_586D\nENCODING 22637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nF440\n27C0\n2000\n2FE0\n3AA0\nCAA0\n0AA0\n1FE0\nENDCHAR\nSTARTCHAR U_586E\nENCODING 22638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4E40\n4A40\nEFE0\n4A40\n4F40\n4AC0\n5E40\n6640\nCA40\n16C0\nENDCHAR\nSTARTCHAR U_586F\nENCODING 22639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4DE0\n48A0\nFAA0\n4F20\n4240\n4FE0\n7920\nCFE0\n0920\n0FE0\nENDCHAR\nSTARTCHAR U_5870\nENCODING 22640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2FE0\n9540\n2FC0\n4A80\nCFC0\n4080\n0580\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5871\nENCODING 22641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA20\n8BE0\nFA20\n8BE0\nFA20\n94E0\nE400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5872\nENCODING 22642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n47E0\n4C40\nF7C0\n4440\n4FE0\n4400\n6FE0\nD2A0\n0D20\n06C0\nENDCHAR\nSTARTCHAR U_5873\nENCODING 22643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n57C0\n4A40\nE180\n5F60\n4900\n4BC0\n6900\nCFE0\n0900\n17E0\nENDCHAR\nSTARTCHAR U_5874\nENCODING 22644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n4FE0\n4000\nFEE0\n4AA0\n4EE0\n4AA0\n7EE0\nCAA0\n12A0\n2760\nENDCHAR\nSTARTCHAR U_5875\nENCODING 22645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4940\n4940\n7FC0\n5240\n5FA0\n5220\n5FE0\n4200\nBFE0\nENDCHAR\nSTARTCHAR U_5876\nENCODING 22646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\n5280\nFFE0\n52A0\n5FE0\n54A0\n77C0\nD480\n15A0\n2660\nENDCHAR\nSTARTCHAR U_5877\nENCODING 22647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n41E0\n4100\nEFE0\n4920\n4AA0\n4D60\n6AA0\nCD60\n0920\n0FE0\nENDCHAR\nSTARTCHAR U_5878\nENCODING 22648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n5000\n5380\nF280\n5380\n5000\n57C0\n7540\nD7C0\n1000\n1FE0\nENDCHAR\nSTARTCHAR U_5879\nENCODING 22649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFF00\n55E0\n7D40\n5540\n5540\nFE40\n1200\n3FC0\n0200\nFFE0\nENDCHAR\nSTARTCHAR U_587A\nENCODING 22650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n7FE0\n4880\n5DC0\n6AA0\n4200\n5FC0\n4200\nBFE0\nENDCHAR\nSTARTCHAR U_587B\nENCODING 22651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n2280\nFFC0\n2440\n27C0\n2440\n3FE0\nC100\n0280\n1C60\nENDCHAR\nSTARTCHAR U_587C\nENCODING 22652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2540\nF7C0\n2D40\n27C0\n20A0\n3FE0\nC480\n0280\n0100\nENDCHAR\nSTARTCHAR U_587D\nENCODING 22653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nFBA0\n2540\n2BA0\n2540\n3BA0\nC280\n0440\n0820\nENDCHAR\nSTARTCHAR U_587E\nENCODING 22654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n4BC0\n7940\n0740\nF940\n26C0\nFC20\n2420\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_587F\nENCODING 22655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FC0\n4940\nFFE0\n4940\n4FC0\n4940\n7FE0\nC480\n0300\n1CE0\nENDCHAR\nSTARTCHAR U_5880\nENCODING 22656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4820\n4FE0\nED20\n5B40\n4D20\n4A80\n6BE0\nCC80\n17E0\n2080\nENDCHAR\nSTARTCHAR U_5881\nENCODING 22657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nF440\n2FE0\n2AA0\n2AA0\n3FE0\nC480\n0300\n1CE0\nENDCHAR\nSTARTCHAR U_5882\nENCODING 22658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4280\n4FE0\nFAA0\n4FE0\n4000\n47C0\n7000\nCFE0\n0540\n1B20\nENDCHAR\nSTARTCHAR U_5883\nENCODING 22659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2280\nFFE0\n2440\n27C0\n2440\n37C0\nC280\n04A0\n1860\nENDCHAR\nSTARTCHAR U_5884\nENCODING 22660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40A0\n4080\n5FE0\nF480\n57A0\n54A0\n5FA0\n7440\nDF40\n14A0\n2D20\nENDCHAR\nSTARTCHAR U_5885\nENCODING 22661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA940\nF880\nABE0\nFCA0\n2080\nF980\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5886\nENCODING 22662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A80\n5FE0\n4A80\nFBE0\n4000\n5FE0\n5120\n7FC0\n8940\n09C0\n0100\nENDCHAR\nSTARTCHAR U_5887\nENCODING 22663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2280\nFFE0\n2440\n27C0\n2440\n37C0\nC100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_5888\nENCODING 22664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A80\n5F80\n4A80\nEFE0\n4AA0\n4EA0\n4AA0\n7FA0\nD4A0\n1B20\n1E60\nENDCHAR\nSTARTCHAR U_5889\nENCODING 22665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4940\nEFE0\n4940\n4FE0\n7920\nCFE0\n1920\n2FE0\n4920\nENDCHAR\nSTARTCHAR U_588A\nENCODING 22666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n23C0\nF940\n5140\nFB40\n22C0\nFC20\n2420\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_588B\nENCODING 22667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2240\n27E0\nFAA0\n27E0\n2280\n2540\n3AA0\nC540\n0280\n0100\nENDCHAR\nSTARTCHAR U_588C\nENCODING 22668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4800\nEA80\n4FE0\n4A80\n4A80\n6B80\nD000\n1AA0\n2AA0\nENDCHAR\nSTARTCHAR U_588D\nENCODING 22669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7BC0\n4A80\n7BE0\n4880\n7980\n52A0\n7460\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_588E\nENCODING 22670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n5FA0\n4AA0\nEEC0\n40A0\n4EA0\n42A0\n64A0\nDEE0\n0480\n0C80\nENDCHAR\nSTARTCHAR U_588F\nENCODING 22671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53C0\n5240\n7580\n1D40\nF7E0\n5240\n94C0\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5890\nENCODING 22672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4FE0\n4440\nFFE0\n4920\n4920\n4FE0\n7100\nC7C0\n0100\n1FE0\nENDCHAR\nSTARTCHAR U_5891\nENCODING 22673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2280\nFFE0\n2920\n2FE0\n2920\n3BA0\nCAA0\n0BA0\n0860\nENDCHAR\nSTARTCHAR U_5892\nENCODING 22674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2280\nFFE0\n2AA0\n2C60\n2BA0\n3AA0\nCBA0\n0820\n0860\nENDCHAR\nSTARTCHAR U_5893\nENCODING 22675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0900\n3F80\n2080\n3F80\n2080\nFFE0\n2480\nDF60\n0400\n7FC0\nENDCHAR\nSTARTCHAR U_5894\nENCODING 22676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n4FE0\n4500\nF900\n4FE0\n5900\n4FC0\n7900\nCFC0\n0900\n0FE0\nENDCHAR\nSTARTCHAR U_5895\nENCODING 22677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n4200\nEBC0\n4A00\n5FE0\n4800\n4FC0\n4800\n6FE0\nC020\n1560\nENDCHAR\nSTARTCHAR U_5896\nENCODING 22678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4D80\n5740\nF040\n4FA0\n4880\n5FC0\n5240\n7FC0\nD240\n1FC0\nENDCHAR\nSTARTCHAR U_5897\nENCODING 22679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4FE0\n4920\nEFE0\n4920\n4FE0\n47C0\n4440\n67C0\nC440\n07C0\nENDCHAR\nSTARTCHAR U_5898\nENCODING 22680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5E80\n44E0\nFF00\n53E0\n5E40\n5280\n7E80\nC520\n1F20\n04E0\nENDCHAR\nSTARTCHAR U_5899\nENCODING 22681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4920\nF540\n4FE0\n4000\n4FE0\n7820\nCBA0\n0AA0\n0FE0\nENDCHAR\nSTARTCHAR U_589A\nENCODING 22682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4BC0\n5540\n4B60\nE540\n5940\n4AC0\n4900\n7FE0\nC580\n0940\n1120\nENDCHAR\nSTARTCHAR U_589B\nENCODING 22683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E40\n5240\n5240\nFEE0\n5040\n56C0\n50C0\n7F40\nD540\n1540\n2CC0\nENDCHAR\nSTARTCHAR U_589C\nENCODING 22684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE480\nBFE0\nC220\nAD40\nA380\nED40\n8320\n8400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_589D\nENCODING 22685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2100\nFFE0\n2440\n2EE0\n2440\n3FE0\nC280\n04A0\n1860\nENDCHAR\nSTARTCHAR U_589E\nENCODING 22686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n2FE0\nF920\n2BA0\n2920\n2FE0\n2440\n37C0\nC440\n07C0\nENDCHAR\nSTARTCHAR U_589F\nENCODING 22687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2200\n2FE0\nFAA0\n2F00\n2BE0\n2A80\n3AA0\nCEC0\n1280\n2FE0\nENDCHAR\nSTARTCHAR U_58A0\nENCODING 22688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2FE0\nF540\n27C0\n2540\n2FC0\n3100\nCFE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_58A1\nENCODING 22689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n2100\nF7C0\n2100\n2FE0\n2280\n3FE0\nE440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_58A2\nENCODING 22690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EC0\n4AA0\n4440\nF860\n45C0\n5D40\n5220\n7DC0\nC540\n0480\n1B60\nENDCHAR\nSTARTCHAR U_58A3\nENCODING 22691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\n26C0\n2FE0\nF280\n2FE0\n2100\n27C0\n3100\nCFE0\n0280\n1C60\nENDCHAR\nSTARTCHAR U_58A4\nENCODING 22692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\n4540\nEFE0\n4000\n47C0\n4440\n77C0\nC440\n07C0\n0C60\nENDCHAR\nSTARTCHAR U_58A5\nENCODING 22693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2280\nF100\n2FE0\n2540\n27C0\n3540\nCFE0\n0100\n1FE0\nENDCHAR\nSTARTCHAR U_58A6\nENCODING 22694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2F20\n2540\nFFE0\n2540\n2920\n27C0\n3540\nC7C0\n0540\n07C0\nENDCHAR\nSTARTCHAR U_58A7\nENCODING 22695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n4200\n5FE0\nE480\n5FE0\n4480\n4FE0\n6BA0\nCAA0\n0BA0\n0860\nENDCHAR\nSTARTCHAR U_58A8\nENCODING 22696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n5540\n7FC0\n0400\n3F80\n0400\nFFE0\n5540\nBFA0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58A9\nENCODING 22697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5F80\n4AE0\nEFA0\n40A0\n5FA0\n42A0\n64A0\nDE40\n04A0\n0D20\nENDCHAR\nSTARTCHAR U_58AA\nENCODING 22698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFD00\n49E0\n7A40\n0940\n7D80\n1260\n3400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58AB\nENCODING 22699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n3FE0\n2B40\nFDC0\n2A40\n2FC0\n2840\n3FE0\nC880\n0480\n0180\nENDCHAR\nSTARTCHAR U_58AC\nENCODING 22700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE780\nA480\nBFE0\nC220\nAD40\nA380\nED40\n8520\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58AD\nENCODING 22701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n4FE0\n4900\nEF40\n4AA0\n4F60\n5220\n6FC0\nCB40\n0B40\n1FE0\nENDCHAR\nSTARTCHAR U_58AE\nENCODING 22702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA500\nA7E0\nCC40\nB7C0\nA440\nE7C0\n8440\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58AF\nENCODING 22703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2500\n77E0\nAC40\nB7C0\n2440\n27C0\n2440\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58B0\nENCODING 22704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4280\n4FE0\nEAA0\n4FE0\n4640\n4540\n67C0\nC100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_58B1\nENCODING 22705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EA0\n2B40\n2480\nF440\n2BA0\n2000\n27C0\n3C40\nC7C0\n0280\n1FE0\nENDCHAR\nSTARTCHAR U_58B2\nENCODING 22706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n4FE0\n5B40\nEB40\n5FE0\n4B40\n4B40\n7FE0\nC000\n12A0\n12A0\nENDCHAR\nSTARTCHAR U_58B3\nENCODING 22707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2540\nFFE0\n2440\n27C0\n2440\n3FC0\nE440\n07C0\n0C60\nENDCHAR\nSTARTCHAR U_58B4\nENCODING 22708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4FC0\n4480\nFFE0\n4100\n4FC0\n4940\n6FC0\nC940\n0FC0\n1860\nENDCHAR\nSTARTCHAR U_58B5\nENCODING 22709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4100\n4FE0\n4920\nF540\n4000\n47C0\n6000\nCFE0\n0440\n0FE0\nENDCHAR\nSTARTCHAR U_58B6\nENCODING 22710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n53C0\n4900\nE7E0\n4280\n5FE0\n4900\n6BC0\nC900\n1900\n27E0\nENDCHAR\nSTARTCHAR U_58B7\nENCODING 22711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5FE0\n4480\nFFE0\n4940\n5FE0\n4940\n5FE0\n6100\nCFC0\n0100\nENDCHAR\nSTARTCHAR U_58B8\nENCODING 22712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5FE0\n4480\nE240\n4FC0\n4280\n5FE0\n6440\nDFC0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_58B9\nENCODING 22713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\n4EE0\nEAA0\n4EE0\n4BA0\n4AA0\n6BA0\nCAA0\n0BA0\n0860\nENDCHAR\nSTARTCHAR U_58BA\nENCODING 22714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\n2D60\nFBA0\n2FE0\n2BA0\n2D60\n3920\nCFE0\n0280\n1C60\nENDCHAR\nSTARTCHAR U_58BB\nENCODING 22715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4540\nFBA0\n4FE0\n4000\n4FE0\n7820\nCBA0\n0AA0\n0FE0\nENDCHAR\nSTARTCHAR U_58BC\nENCODING 22716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\nA940\nF960\nAA00\nFFE0\nA940\nF8C0\n0520\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58BD\nENCODING 22717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5E80\n52E0\nFFA0\n52A0\n5EA0\n48A0\n7EA0\nCA40\n12A0\n2720\nENDCHAR\nSTARTCHAR U_58BE\nENCODING 22718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n33C0\nDA40\n53C0\nE240\n5BC0\nAAA0\n5340\n2420\n3FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58BF\nENCODING 22719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n2FE0\nF100\n2FE0\n2280\n27C0\n3100\nCFE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_58C0\nENCODING 22720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E80\n4A40\n4BE0\nEE00\n48A0\n49E0\n4E40\n6AE0\nDA40\n2E40\n0840\nENDCHAR\nSTARTCHAR U_58C1\nENCODING 22721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n47E0\n7D40\n43E0\n7C80\n67E0\nBC80\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58C2\nENCODING 22722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\n8540\nFD60\nAA00\nFFE0\nA940\nFCC0\nAB20\n7FC0\n0200\nFFE0\nENDCHAR\nSTARTCHAR U_58C3\nENCODING 22723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n4000\n4FC0\nE940\n5FE0\n4000\n4FE0\n6940\nCFC0\n0940\n1FE0\nENDCHAR\nSTARTCHAR U_58C4\nENCODING 22724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2A80\nF5E0\n2E80\n75C0\nA4A0\n2C80\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58C5\nENCODING 22725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2500\n5480\nE7E0\n2C80\nF7E0\n2480\n7FE0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58C6\nENCODING 22726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4440\n7BC0\n4A40\n75C0\n4A40\nFFE0\n8420\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58C7\nENCODING 22727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4AA0\nFBA0\n4820\n4FE0\n4440\n7740\nC5C0\n0440\n1FE0\nENDCHAR\nSTARTCHAR U_58C8\nENCODING 22728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\n4AA0\nFBA0\n4820\n4FE0\n4180\n7100\nCFE0\n0540\n1920\nENDCHAR\nSTARTCHAR U_58C9\nENCODING 22729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2100\n2FE0\nF920\n2FC0\n2A80\n2D20\n3AC0\nCD80\n12C0\n25A0\nENDCHAR\nSTARTCHAR U_58CA\nENCODING 22730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\n4100\n4FE0\nEAA0\n4FE0\n4100\n5FE0\n6540\n9C80\n0660\nENDCHAR\nSTARTCHAR U_58CB\nENCODING 22731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n4540\n4FE0\nE820\n47C0\n4440\n4FE0\n6920\nCFE0\n0920\n0FE0\nENDCHAR\nSTARTCHAR U_58CC\nENCODING 22732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4440\nEAA0\n4FC0\n4280\n4FE0\n6300\nC4A0\n1C40\n0720\nENDCHAR\nSTARTCHAR U_58CD\nENCODING 22733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBFE0\n4900\n9DE0\n5D40\nC940\n7F40\n4940\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58CE\nENCODING 22734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n4100\n4FE0\nFAA0\n4920\n4FE0\n4100\n7FE0\nC100\n0FE0\n12A0\nENDCHAR\nSTARTCHAR U_58CF\nENCODING 22735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F80\n5480\n5EE0\nF280\n5F40\n5420\n5F20\n6000\nDFC0\n1540\n3FE0\nENDCHAR\nSTARTCHAR U_58D0\nENCODING 22736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n2480\n7FC0\nEEE0\n5540\n6EC0\n5140\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58D1\nENCODING 22737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1DE0\n10A0\nFEA0\nAAA0\n5440\n28A0\n7F20\n2400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58D2\nENCODING 22738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\n2480\nF7C0\n2100\n2FE0\n2280\n3440\nEFE0\n0AA0\n1FE0\nENDCHAR\nSTARTCHAR U_58D3\nENCODING 22739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n54C0\n5CA0\n55E0\n7E80\n6280\n7F40\n6220\n5FC0\n8200\nBFE0\nENDCHAR\nSTARTCHAR U_58D4\nENCODING 22740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nFFE0\n2120\n2FC0\n2040\n3FE0\nCA40\n0F40\n00C0\nENDCHAR\nSTARTCHAR U_58D5\nENCODING 22741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4440\nFFE0\n5020\n4FC0\n4440\n6B80\nD540\n0AA0\n1520\nENDCHAR\nSTARTCHAR U_58D6\nENCODING 22742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4100\n4FE0\nF920\n4540\n4920\n4FE0\n7100\nCFE0\n0AA0\n0AA0\nENDCHAR\nSTARTCHAR U_58D7\nENCODING 22743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\n4140\n4FE0\nF140\n4FE0\n4540\n7AA0\nCFE0\n0AA0\n1FE0\nENDCHAR\nSTARTCHAR U_58D8\nENCODING 22744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n2480\nFFE0\nAAA0\nFBE0\nAAA0\nFFE0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58D9\nENCODING 22745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2A80\nFFE0\n2A80\n2FE0\n2D40\n3FC0\nED40\n17C0\n2C60\nENDCHAR\nSTARTCHAR U_58DA\nENCODING 22746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n4200\n5FE0\nF220\n5FE0\n5540\n57C0\n7540\nDFE0\n2AA0\n5FE0\nENDCHAR\nSTARTCHAR U_58DB\nENCODING 22747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DE0\n5520\n5DE0\nF520\n5FE0\n52A0\n54A0\n77A0\nD4A0\n17A0\n1060\nENDCHAR\nSTARTCHAR U_58DC\nENCODING 22748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n4840\n4FC0\nF100\n4FE0\n4920\n4540\n7000\nCFE0\n0480\n0FE0\nENDCHAR\nSTARTCHAR U_58DD\nENCODING 22749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n53E0\n4AA0\nE7E0\n7A20\n4BE0\n4A20\n6BE0\nC940\n1A20\n27E0\nENDCHAR\nSTARTCHAR U_58DE\nENCODING 22750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\n4AA0\nEFE0\n4940\n4580\n4940\n7720\nCCC0\n1540\n0620\nENDCHAR\nSTARTCHAR U_58DF\nENCODING 22751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA00\n53E0\nFC20\n8BE0\nEA00\nBBE0\n8A20\n7FE0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58E0\nENCODING 22752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5EE0\n4A80\nFFE0\n4020\n4EE0\n4A80\n4EE0\n6A80\nCEA0\n0AE0\nENDCHAR\nSTARTCHAR U_58E1\nENCODING 22753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BC0\n2140\nFD40\n8480\n6940\nB2A0\n4C80\nFBC0\n4880\n7880\n4FE0\nENDCHAR\nSTARTCHAR U_58E2\nENCODING 22754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n5360\n5240\nFFE0\n5240\n57E0\n5A40\n7100\nD5E0\n1500\n2FE0\nENDCHAR\nSTARTCHAR U_58E3\nENCODING 22755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5D40\n56A0\n5540\nFEA0\n57E0\n5C00\n5540\n7560\nDF60\n3540\n0640\nENDCHAR\nSTARTCHAR U_58E4\nENCODING 22756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\n5540\n5DC0\nE500\n5FC0\n4500\n5FE0\n6D40\n9480\n0660\nENDCHAR\nSTARTCHAR U_58E5\nENCODING 22757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4800\n4FC0\nED40\n4FC0\n4900\n4FE0\n6AA0\nD7C0\n1100\n2FE0\nENDCHAR\nSTARTCHAR U_58E6\nENCODING 22758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4FE0\n4440\n4AA0\nFEE0\n4480\n4FE0\n7480\nC7E0\n0480\n07E0\nENDCHAR\nSTARTCHAR U_58E7\nENCODING 22759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\n5FE0\nF000\n5E80\n54E0\n5FA0\n7AA0\nD640\n1EC0\n2320\nENDCHAR\nSTARTCHAR U_58E8\nENCODING 22760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFBE0\nAAA0\nFBE0\nAAA0\nFBE0\nAAA0\nFFE0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_58E9\nENCODING 22761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4100\n4FE0\nEBA0\n4540\n5FE0\n6AA0\nDFE0\n14A0\n3FE0\n0520\nENDCHAR\nSTARTCHAR U_58EA\nENCODING 22762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5240\n6FA0\n5540\nEDA0\n5FC0\n4040\n5FC0\n7000\n5FC0\n8040\n00C0\nENDCHAR\nSTARTCHAR U_58EB\nENCODING 22763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0400\n0400\nFFE0\n0400\n0400\n0400\n0400\n0400\n7FC0\nENDCHAR\nSTARTCHAR U_58EC\nENCODING 22764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0380\n7C00\n0400\n0440\nFFE0\n0400\n0400\n0400\n0480\n7FC0\nENDCHAR\nSTARTCHAR U_58ED\nENCODING 22765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n0000\n7FC0\n0440\n0440\n0540\n0480\n0400\nENDCHAR\nSTARTCHAR U_58EE\nENCODING 22766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n9100\n5100\n5100\n1FE0\n1100\n3100\n5100\n9100\n1100\n17C0\nENDCHAR\nSTARTCHAR U_58EF\nENCODING 22767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5100\n5100\n5100\n7FE0\n1100\nF100\n5100\n5100\n5100\n97C0\nENDCHAR\nSTARTCHAR U_58F0\nENCODING 22768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n3FC0\n0000\n3FC0\n2440\n3FC0\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_58F1\nENCODING 22769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n3F80\n0000\nFFE0\n8020\n1100\n1E00\n1080\n0F80\nENDCHAR\nSTARTCHAR U_58F2\nENCODING 22770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n3F80\n0000\nFFE0\n8020\n1200\n1200\n2240\n41C0\nENDCHAR\nSTARTCHAR U_58F3\nENCODING 22771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n3FC0\n0000\nFFE0\n8020\n1F00\n1120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_58F4\nENCODING 22772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n0000\n3F80\n2080\n3F80\n1100\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_58F5\nENCODING 22773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n0400\n7FC0\n0000\n2080\nFBE0\n2080\n2080\nFBE0\nENDCHAR\nSTARTCHAR U_58F6\nENCODING 22774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n0000\nFFE0\n8920\n2940\n1980\n0900\nFFE0\nENDCHAR\nSTARTCHAR U_58F7\nENCODING 22775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n7FC0\n8A20\nBFA0\n2A80\n2A80\n3F80\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_58F8\nENCODING 22776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n0400\n3FC0\n0000\n7FE0\n8020\nBF80\n4A40\n2A80\n7FE0\nENDCHAR\nSTARTCHAR U_58F9\nENCODING 22777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n0000\nFFE0\nA0A0\n3F80\n1100\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_58FA\nENCODING 22778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\nFFE0\n8A20\n0A00\n3B80\n2080\n3B80\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_58FB\nENCODING 22779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2200\n2BC0\n2E00\nF3E0\n2000\n27C0\n2440\n37C0\nC440\n04C0\nENDCHAR\nSTARTCHAR U_58FC\nENCODING 22780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\nFFE0\n8020\n7FC0\n0A00\n3B80\n2080\n1B00\nFFE0\nENDCHAR\nSTARTCHAR U_58FD\nENCODING 22781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\nFFE0\n0440\n7FC0\n0040\nFFE0\n4A40\n4940\n78C0\nENDCHAR\nSTARTCHAR U_58FE\nENCODING 22782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA00\n2200\nFBC0\n0240\nFA40\n8BC0\nFA40\n5200\n2200\nFBE0\nENDCHAR\nSTARTCHAR U_58FF\nENCODING 22783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4FE0\n4280\nFFE0\n4AA0\n4C60\n4FE0\n7040\nCFE0\n0440\n02C0\nENDCHAR\nSTARTCHAR U_5900\nENCODING 22784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\nFFE0\n24A0\n3F80\n0400\nFFE0\n5440\n7240\n00C0\nENDCHAR\nSTARTCHAR U_5901\nENCODING 22785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n5140\n7FC0\n2480\n2E80\n2A80\n2A80\n3F80\nENDCHAR\nSTARTCHAR U_5902\nENCODING 22786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F00\n3100\n4A00\n0400\n0A00\n3180\nC060\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_5903\nENCODING 22787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n1080\n1100\n13E0\n1020\n1F20\n1120\n2A20\n2620\n4920\nB0C0\nENDCHAR\nSTARTCHAR U_5904\nENCODING 22788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n3D00\n2580\n4540\nA920\n2900\n1100\n2900\n4600\n81E0\nENDCHAR\nSTARTCHAR U_5905\nENCODING 22789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FC0\n3080\nC900\n0E00\n3580\nC460\n3F80\n2400\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_5906\nENCODING 22790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n3100\n4E00\nFBE0\n0400\n7FC0\n0400\n3FC0\n0400\n7FE0\n0400\nENDCHAR\nSTARTCHAR U_5907\nENCODING 22791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F80\n3100\n4E00\n0B00\n30E0\nFF80\n2480\n3F80\n2480\n3F80\nENDCHAR\nSTARTCHAR U_5908\nENCODING 22792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FC0\n2080\n5900\n8600\n1980\n6460\n1500\n7FC0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_5909\nENCODING 22793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0900\n2940\nD320\n2800\n1F80\n2900\n4600\n0900\nF0E0\nENDCHAR\nSTARTCHAR U_590A\nENCODING 22794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\n1F80\n5080\n2080\n5100\n8A00\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_590B\nENCODING 22795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0880\n3FC0\n1080\n2440\n4FA0\n0880\n1500\n2200\n0D80\n7060\nENDCHAR\nSTARTCHAR U_590C\nENCODING 22796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n0400\nFFE0\n1100\n2480\n4F40\n1900\n2600\n1900\nE0E0\nENDCHAR\nSTARTCHAR U_590D\nENCODING 22797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n6080\nBF80\n2080\n3F80\n1000\n3F80\nC900\n0600\nF9E0\nENDCHAR\nSTARTCHAR U_590E\nENCODING 22798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n5540\n7FC0\n0400\nFFE0\n1000\n3F80\n4900\n0600\n79E0\nENDCHAR\nSTARTCHAR U_590F\nENCODING 22799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n1F80\n1080\n1C80\n1780\n1080\n3F80\n4900\n8600\n39E0\nENDCHAR\nSTARTCHAR U_5910\nENCODING 22800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n2100\nFFC0\n2A40\n1F80\n1480\n1280\n1F80\n6900\n0600\nF9E0\nENDCHAR\nSTARTCHAR U_5911\nENCODING 22801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n5F60\nE0C0\n4F40\n6AA0\n9F20\n1000\n3F80\n5100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_5912\nENCODING 22802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n2FE0\nB920\nAFE0\nA900\nFFE0\n5240\n8C20\n1300\nE0E0\nENDCHAR\nSTARTCHAR U_5913\nENCODING 22803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EC0\n4440\n6EC0\n4A40\n6A40\n4EC0\n6860\n8FA0\n7100\n0E00\nF1C0\nENDCHAR\nSTARTCHAR U_5914\nENCODING 22804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n2A00\nBAE0\nAEA0\nAA80\nFFE0\n4940\n8920\n0600\n79E0\nENDCHAR\nSTARTCHAR U_5915\nENCODING 22805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0840\n0FE0\n1040\n2880\n4480\n0500\n0100\n0200\n0C00\nF000\nENDCHAR\nSTARTCHAR U_5916\nENCODING 22806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n3D00\n2500\n4580\nA540\n1920\n0900\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_5917\nENCODING 22807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23C0\n3E40\n4A40\n4A40\nAA40\n12C0\n1200\n2220\n4220\n81E0\nENDCHAR\nSTARTCHAR U_5918\nENCODING 22808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3DE0\n2520\n4520\nA520\n1520\n09A0\n1140\n2100\nC100\n0100\nENDCHAR\nSTARTCHAR U_5919\nENCODING 22809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n4080\n7F80\n4880\n4F80\n5280\n6A80\n4AA0\n44A0\n8860\nB020\nENDCHAR\nSTARTCHAR U_591A\nENCODING 22810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0F80\n1080\n2900\n0600\n1A00\n67C0\n0840\n3480\n0300\n7C00\nENDCHAR\nSTARTCHAR U_591B\nENCODING 22811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0080\n1F80\n0080\nFFE0\n1000\n1F80\n6080\n1900\n0600\n7800\nENDCHAR\nSTARTCHAR U_591C\nENCODING 22812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1200\n13C0\n2640\n6940\nB480\n2280\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_591D\nENCODING 22813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4500\n7500\n57E0\n9900\n5100\n57E0\n2100\n2100\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_591E\nENCODING 22814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n7D80\nA540\n1920\n3100\nC100\n7A60\n4B80\n4A20\n79E0\nENDCHAR\nSTARTCHAR U_591F\nENCODING 22815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n4620\n8540\n7480\n57E0\n5520\n76A0\n0440\n0480\n1B00\nENDCHAR\nSTARTCHAR U_5920\nENCODING 22816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n79E0\n8A20\n5020\n23A0\nFAA0\n2AA0\nCBA0\n2820\n1120\nE0C0\nENDCHAR\nSTARTCHAR U_5921\nENCODING 22817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3900\n4FE0\nB100\n23C0\n4000\nBBC0\n4A40\nB240\n2240\nC3C0\nENDCHAR\nSTARTCHAR U_5922\nENCODING 22818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4A40\nFFE0\n8820\n1F80\n2900\n0600\n7800\nENDCHAR\nSTARTCHAR U_5923\nENCODING 22819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n3F80\n2A80\nFFE0\n8820\n1F80\n6900\n0600\n7800\nENDCHAR\nSTARTCHAR U_5924\nENCODING 22820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n7100\n0A00\nFFE0\n8020\n7FC0\n2480\n3F80\n2480\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_5925\nENCODING 22821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA9E0\nFA20\nA940\nF880\n23E0\nF920\n22A0\n7040\nA880\n2300\nENDCHAR\nSTARTCHAR U_5926\nENCODING 22822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nFEE0\n2520\n3CA0\n2440\n3D80\n24E0\nFF20\n54A0\n6240\n7D80\nENDCHAR\nSTARTCHAR U_5927\nENCODING 22823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0400\nFFE0\n0400\n0400\n0A00\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_5928\nENCODING 22824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n3C00\n0400\n0400\nFFE0\n0400\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_5929\nENCODING 22825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n0400\n0400\nFFE0\n0400\n0A00\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_592A\nENCODING 22826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0400\nFFE0\n0400\n0A00\n0A00\n1100\n1900\n2480\nC460\nENDCHAR\nSTARTCHAR U_592B\nENCODING 22827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n0400\n0400\nFFE0\n0400\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_592C\nENCODING 22828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n3F80\n0480\n0480\nFFE0\n0400\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_592D\nENCODING 22829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n7E00\n0400\n0400\nFFE0\n0400\n0400\n0A00\n1100\n20E0\nC040\nENDCHAR\nSTARTCHAR U_592E\nENCODING 22830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n3F80\n2480\n2480\n2480\nFFE0\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_592F\nENCODING 22831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n1200\n2100\n4880\n8860\n7F80\n0880\n1080\n2080\nC300\nENDCHAR\nSTARTCHAR U_5930\nENCODING 22832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0A00\n1100\n2080\nD160\n1100\n1100\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_5931\nENCODING 22833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n3FC0\n4400\n0400\nFFE0\n0400\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_5932\nENCODING 22834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0A00\n1100\n2480\nC460\n0400\nFFE0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_5933\nENCODING 22835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n0A00\n1100\nE0E0\n1F40\n0000\n0000\n0000\n7FC0\nENDCHAR\nSTARTCHAR U_5934\nENCODING 22836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n0A00\n2200\n1200\n0200\nFFE0\n0200\n0500\n0880\n1040\n6020\nENDCHAR\nSTARTCHAR U_5935\nENCODING 22837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n1100\n2480\nC460\n1500\n2480\nC440\n0440\n1C00\nENDCHAR\nSTARTCHAR U_5936\nENCODING 22838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n1100\nFFE0\n1100\n1100\n2A80\n2A80\n4440\n4440\n8820\nENDCHAR\nSTARTCHAR U_5937\nENCODING 22839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n0440\n7FC0\n4400\n7FE0\n0A20\n3180\nC060\nENDCHAR\nSTARTCHAR U_5938\nENCODING 22840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n2E80\n4040\nBFA0\n0800\n1F80\n0080\n0900\n0600\nENDCHAR\nSTARTCHAR U_5939\nENCODING 22841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n2480\n1500\nFFE0\n0400\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_593A\nENCODING 22842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n0900\n1080\n2040\nC120\n3FC0\n1100\n0900\n0100\n0700\nENDCHAR\nSTARTCHAR U_593B\nENCODING 22843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0A00\n1100\n2080\nC060\n3F80\n2080\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_593C\nENCODING 22844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0A00\n3180\nC060\n2480\n2480\n2480\n2480\n4480\n8080\nENDCHAR\nSTARTCHAR U_593D\nENCODING 22845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n0A00\n1100\n2080\nDF60\n0000\n7FC0\n0900\n1080\n3FC0\nENDCHAR\nSTARTCHAR U_593E\nENCODING 22846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n2480\n2480\n5540\n8E20\n0A00\n1100\n20E0\nC040\nENDCHAR\nSTARTCHAR U_593F\nENCODING 22847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n0900\n3080\nC060\n3F80\n2480\n3F80\n2020\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_5940\nENCODING 22848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n0D00\n34C0\nC440\n0400\nFFE0\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_5941\nENCODING 22849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n2080\nFFE0\n2880\n2500\n2200\n2500\n2880\n3FC0\nENDCHAR\nSTARTCHAR U_5942\nENCODING 22850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F80\n2100\n7FC0\nA440\n2440\n2440\nFFE0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_5943\nENCODING 22851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0900\n1080\n3F60\nD200\n1FC0\n1200\n1120\n14A0\n1A60\nENDCHAR\nSTARTCHAR U_5944\nENCODING 22852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n2480\n7FC0\nA4A0\n3F80\n2480\n3FA0\n0420\n07E0\nENDCHAR\nSTARTCHAR U_5945\nENCODING 22853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n2880\nF3E0\n4A40\n4A40\n5A40\n6AC0\n1200\n6200\nENDCHAR\nSTARTCHAR U_5946\nENCODING 22854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n2080\nFF60\n2000\n3F80\n2080\n3F80\n2000\n3FC0\nENDCHAR\nSTARTCHAR U_5947\nENCODING 22855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0A00\n1100\nFFE0\n0080\n3E80\n2280\n3E80\n0080\n0180\nENDCHAR\nSTARTCHAR U_5948\nENCODING 22856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n2080\nDF60\n0000\n7FC0\n0400\n2480\n4440\n8C20\nENDCHAR\nSTARTCHAR U_5949\nENCODING 22857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0800\n3F80\n1000\nFFE0\n2480\n5F40\n8420\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_594A\nENCODING 22858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F80\n2200\n3FC0\n2200\n2F80\n2200\n3FC0\n0400\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_594B\nENCODING 22859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0A00\n1100\n2080\nFFE0\n2480\n3F80\n2480\n2480\n3F80\nENDCHAR\nSTARTCHAR U_594C\nENCODING 22860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n07C0\n0400\n3F80\n2080\n3F80\n0400\nFFE0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_594D\nENCODING 22861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\n3FC0\n0400\n7FE0\n1080\n2940\nC920\n1100\n1100\n2100\nENDCHAR\nSTARTCHAR U_594E\nENCODING 22862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7FC0\n1100\n2480\nDF60\n0400\n7FC0\n0400\n3F80\n0400\n7FC0\nENDCHAR\nSTARTCHAR U_594F\nENCODING 22863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0800\nFFE0\n1100\n3F80\nC460\n3F80\n0A00\n1100\n60C0\nENDCHAR\nSTARTCHAR U_5950\nENCODING 22864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F00\n2200\n7FC0\nAA40\n3140\n2440\nFFE0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_5951\nENCODING 22865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7FE0\n1120\n7D20\n1220\n7CC0\n1400\nFFE0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_5952\nENCODING 22866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n2480\n7FC0\n8920\n1A00\n0480\n3900\n0680\n7840\nENDCHAR\nSTARTCHAR U_5953\nENCODING 22867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n2F80\nD960\n0600\n3BC0\n0480\n1D00\n0200\n7C00\nENDCHAR\nSTARTCHAR U_5954\nENCODING 22868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n2480\nDF60\n0400\n1080\nFFE0\n1080\n2080\n4080\nENDCHAR\nSTARTCHAR U_5955\nENCODING 22869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0A00\n2A80\n4A40\n1600\n0400\nFFE0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_5956\nENCODING 22870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n53E0\n1640\n3180\nD100\n1600\n0400\nFFE0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_5957\nENCODING 22871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n1080\n3F40\nD020\n1F00\n1000\nFFE0\n0800\n1080\n3FC0\nENDCHAR\nSTARTCHAR U_5958\nENCODING 22872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n7FE0\n0880\nF880\n2BE0\n4C00\n0400\nFFE0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_5959\nENCODING 22873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n3F80\n0400\nFFE0\n1100\n2480\nFFE0\n2480\n3FA0\n0420\n03E0\nENDCHAR\nSTARTCHAR U_595A\nENCODING 22874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n7C80\n2480\n0900\n1E00\n0880\n3F40\n0400\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_595B\nENCODING 22875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n2080\nFBE0\n4A40\n7BC0\n4A40\n7BC0\n0440\n08C0\nENDCHAR\nSTARTCHAR U_595C\nENCODING 22876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFBE0\n0A00\n7BC0\n0A00\nFBE0\n0400\nFFE0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_595D\nENCODING 22877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1080\n3FC0\nE460\n2F40\n2440\n3FC0\n2940\n2F40\n40C0\nENDCHAR\nSTARTCHAR U_595E\nENCODING 22878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0900\n3480\nDF60\n2200\n7F80\nA200\n3F80\n2200\n3FC0\nENDCHAR\nSTARTCHAR U_595F\nENCODING 22879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n2080\nFBE0\n4A40\n7BC0\n4A40\n7BC0\n4A40\n94C0\nENDCHAR\nSTARTCHAR U_5960\nENCODING 22880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0A00\n3F80\n2A80\n3380\n2E80\n2080\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_5961\nENCODING 22881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n3F80\n2080\n3C80\n2780\n2080\nFFE0\n5140\n9120\n2100\nENDCHAR\nSTARTCHAR U_5962\nENCODING 22882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n2880\n5D40\n8A20\n7FE0\n1080\n3F80\nD080\n1F80\n1080\nENDCHAR\nSTARTCHAR U_5963\nENCODING 22883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n1100\n2080\nFBE0\n4A40\n7BC0\n4A40\n7BC0\n0440\nENDCHAR\nSTARTCHAR U_5964\nENCODING 22884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n3F80\nC460\n7FC0\n4A40\n4E40\n4A40\n4A40\n7FC0\nENDCHAR\nSTARTCHAR U_5965\nENCODING 22885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7FC0\n5540\n4E40\n7FC0\n4E40\n5540\nFFE0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_5966\nENCODING 22886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n5640\n2380\nF560\n6BC0\nA140\n66C0\n0400\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_5967\nENCODING 22887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7FC0\n4340\n7D40\n5640\n7FC0\n5540\n64C0\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_5968\nENCODING 22888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n5620\n3540\n1FE0\n3240\nD140\n1480\nFFE0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_5969\nENCODING 22889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n2100\n4080\nFFE0\n5200\n5E00\n4000\n7B80\n4A80\n7FC0\nENDCHAR\nSTARTCHAR U_596A\nENCODING 22890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2880\n5240\nBFA0\n6200\nBFC0\n2200\nFFE0\n2100\n1700\nENDCHAR\nSTARTCHAR U_596B\nENCODING 22891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2080\nD560\n5DC0\nB040\n5FC0\n3040\nDDC0\n5540\n6540\nENDCHAR\nSTARTCHAR U_596C\nENCODING 22892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\n5640\n7980\n1640\nFFE0\n5240\n91C0\n0400\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_596D\nENCODING 22893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n75C0\n2480\n75C0\n5540\n75C0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_596E\nENCODING 22894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n3280\n5FE0\nA200\n7F80\nA200\n3FE0\n2440\n3FC0\n2440\n3FC0\nENDCHAR\nSTARTCHAR U_596F\nENCODING 22895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n1480\n2740\nD420\n7FE0\n4A40\n5940\n6AA0\n4D60\nB220\nENDCHAR\nSTARTCHAR U_5970\nENCODING 22896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2A80\n3F80\n0000\nFBE0\nAAA0\nFBE0\n0400\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_5971\nENCODING 22897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E40\nE0E0\n4E40\nE0E0\n5F40\nABA0\nAEA0\n0400\nFFE0\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_5972\nENCODING 22898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFAA0\n4BE0\nF6A0\n2AA0\nFBE0\n4AA0\nFBE0\n4880\n7BE0\n4880\nENDCHAR\nSTARTCHAR U_5973\nENCODING 22899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\n0800\nFFE0\n1100\n1100\n2100\n3A00\n0600\n0980\n7040\nENDCHAR\nSTARTCHAR U_5974\nENCODING 22900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nFA20\n2A20\n2A40\n4940\n5140\n3080\n2880\n4940\n8620\nENDCHAR\nSTARTCHAR U_5975\nENCODING 22901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n2080\nF880\n2880\n2880\n4880\n3080\n2880\n4880\n8380\nENDCHAR\nSTARTCHAR U_5976\nENCODING 22902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2240\nFA40\n2A80\n2AE0\n4A20\n5220\n3420\n2C20\n4520\n88C0\nENDCHAR\nSTARTCHAR U_5977\nENCODING 22903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2780\nF880\n2880\n2FE0\n4880\n5080\n3080\n2880\n4880\n8080\nENDCHAR\nSTARTCHAR U_5978\nENCODING 22904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\nF880\n2880\n2880\n4FE0\n4880\n3080\n3080\n4880\n8080\nENDCHAR\nSTARTCHAR U_5979\nENCODING 22905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\nF5C0\n5740\n5D40\n5540\n55C0\n2500\n3420\n5420\n83E0\nENDCHAR\nSTARTCHAR U_597A\nENCODING 22906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n23C0\nFA40\n2C80\n2880\n4900\n5100\n2280\n5240\n8C20\nENDCHAR\nSTARTCHAR U_597B\nENCODING 22907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2940\n2940\n4A40\n5240\n3180\n2880\n4540\n8220\nENDCHAR\nSTARTCHAR U_597C\nENCODING 22908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF900\n2900\n29E0\n4F00\n5100\n3100\n2920\n4920\n84E0\nENDCHAR\nSTARTCHAR U_597D\nENCODING 22909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\nF840\n2880\n2880\n4FE0\n5080\n3080\n2880\n4880\n8380\nENDCHAR\nSTARTCHAR U_597E\nENCODING 22910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nF880\n2AA0\n2AA0\n4AA0\n52A0\n32A0\n2AA0\n4BE0\n8220\nENDCHAR\nSTARTCHAR U_597F\nENCODING 22911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFBE0\n2940\n2940\n2A40\n6940\n3880\n4940\n4A20\n87E0\nENDCHAR\nSTARTCHAR U_5980\nENCODING 22912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n1100\n1FE0\nF240\n8440\n8440\n9280\nA180\nC240\n9C20\nENDCHAR\nSTARTCHAR U_5981\nENCODING 22913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2C20\n2820\n4A20\n5120\n3120\n2820\n48A0\n8040\nENDCHAR\nSTARTCHAR U_5982\nENCODING 22914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2000\nFBE0\n2A20\n2A20\n4A20\n4A20\n3220\n33E0\n4A20\n8000\nENDCHAR\nSTARTCHAR U_5983\nENCODING 22915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2020\nF820\n2820\n2BE0\n4A00\n5200\n3200\n2A20\n4E20\n81E0\nENDCHAR\nSTARTCHAR U_5984\nENCODING 22916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2000\n2000\n3FC0\n0800\nFFE0\n1100\n1A00\n0600\nF9E0\nENDCHAR\nSTARTCHAR U_5985\nENCODING 22917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF880\n2880\n2880\n4880\n5080\n3080\n2880\n4FE0\n8000\nENDCHAR\nSTARTCHAR U_5986\nENCODING 22918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n9100\n5FE0\n5240\n1440\n3480\n5280\n9100\n1280\n1C60\nENDCHAR\nSTARTCHAR U_5987\nENCODING 22919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\nF820\n2820\n2820\n4BE0\n5020\n3020\n2820\n4BE0\n8020\nENDCHAR\nSTARTCHAR U_5988\nENCODING 22920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\nFA40\n2A40\n2A40\n4BE0\n5020\n37A0\n2820\n4820\n81C0\nENDCHAR\nSTARTCHAR U_5989\nENCODING 22921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n27E0\nFD20\n2900\n2900\n4980\n5280\n22A0\n54A0\n8860\nENDCHAR\nSTARTCHAR U_598A\nENCODING 22922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2380\nF880\n2880\n2880\n4FE0\n5080\n3080\n2880\n4880\n83E0\nENDCHAR\nSTARTCHAR U_598B\nENCODING 22923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n27E0\nF900\n2900\n4FE0\n4900\n5280\n2280\n5440\n8820\nENDCHAR\nSTARTCHAR U_598C\nENCODING 22924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n4240\nFFE0\n5240\n5240\n97E0\n5240\n2240\n5440\n8440\n0840\nENDCHAR\nSTARTCHAR U_598D\nENCODING 22925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n2240\nFA40\n2A40\n4FE0\n5240\n3240\n2240\n5440\n8840\nENDCHAR\nSTARTCHAR U_598E\nENCODING 22926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2180\n2240\nF420\n5A40\n5240\n9240\n5240\n2240\n5440\n8840\nENDCHAR\nSTARTCHAR U_598F\nENCODING 22927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nF7E0\n5240\n5240\n5140\n9140\n6080\n2080\n5140\n9620\nENDCHAR\nSTARTCHAR U_5990\nENCODING 22928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFA40\n5440\n5520\n5920\n5200\n2200\n2440\n5FE0\n8420\nENDCHAR\nSTARTCHAR U_5991\nENCODING 22929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47C0\nF540\n5540\n5540\n97C0\n9400\n6400\n2420\n5420\n93E0\nENDCHAR\nSTARTCHAR U_5992\nENCODING 22930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFBE0\n2A20\n2A20\n4BE0\n5200\n3200\n2A00\n4A00\n8400\nENDCHAR\nSTARTCHAR U_5993\nENCODING 22931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n2900\n2FC0\n4C40\n5280\n3280\n2900\n4A80\n8460\nENDCHAR\nSTARTCHAR U_5994\nENCODING 22932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nF800\n2B80\n2A80\n4A80\n5280\n22A0\n52A0\n8C60\nENDCHAR\nSTARTCHAR U_5995\nENCODING 22933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFBE0\n2AA0\n2AA0\n4AA0\n2BE0\n1080\n2880\n4880\n8080\nENDCHAR\nSTARTCHAR U_5996\nENCODING 22934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF900\n2900\n2FE0\n4900\n5100\n3100\n2A80\n4A40\n8420\nENDCHAR\nSTARTCHAR U_5997\nENCODING 22935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFA80\n2C40\n2920\n4880\n57E0\n3040\n2840\n4880\n8080\nENDCHAR\nSTARTCHAR U_5998\nENCODING 22936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2000\nF800\n2800\n2FE0\n4900\n5100\n3240\n2A40\n4FA0\n8020\nENDCHAR\nSTARTCHAR U_5999\nENCODING 22937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFB40\n2D20\n2920\n4900\n3120\n1040\n2880\n4100\n8600\nENDCHAR\nSTARTCHAR U_599A\nENCODING 22938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF880\n2880\n49C0\n49A0\n2AA0\n1480\n2880\n4880\n8080\nENDCHAR\nSTARTCHAR U_599B\nENCODING 22939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0400\nFFE0\n0800\nFFE0\n0900\n1200\n0D00\n70C0\nENDCHAR\nSTARTCHAR U_599C\nENCODING 22940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFBC0\n2940\n2940\n4FE0\n5100\n3100\n2A80\n4440\n8820\nENDCHAR\nSTARTCHAR U_599D\nENCODING 22941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n4900\n4900\n7FE0\n4940\n0A40\nFA40\n4940\n4880\n4940\n8E20\nENDCHAR\nSTARTCHAR U_599E\nENCODING 22942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2140\nF940\n2940\n2940\n4FC0\n5240\n3240\n2A40\n4A40\n87E0\nENDCHAR\nSTARTCHAR U_599F\nENCODING 22943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0800\nFFE0\n0900\n1200\n0E00\n71C0\nENDCHAR\nSTARTCHAR U_59A0\nENCODING 22944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFBE0\n2AA0\n2AA0\n4AA0\n5360\n3220\n2A20\n4A20\n8260\nENDCHAR\nSTARTCHAR U_59A1\nENCODING 22945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2380\nFA00\n2BE0\n2A40\n4A40\n5240\n3240\n2A40\n4440\n8840\nENDCHAR\nSTARTCHAR U_59A2\nENCODING 22946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFC40\n2820\n2FC0\n4A40\n5240\n3240\n2A40\n4440\n88C0\nENDCHAR\nSTARTCHAR U_59A3\nENCODING 22947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\nFC80\n54A0\n57C0\n5480\n5480\n3480\n24A0\n55A0\n8E60\nENDCHAR\nSTARTCHAR U_59A4\nENCODING 22948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2020\nF940\n2880\n2FE0\n48A0\n5080\n3080\n2880\n4A80\n8100\nENDCHAR\nSTARTCHAR U_59A5\nENCODING 22949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\n7C00\n0840\n4480\n2100\n0800\nFFE0\n1100\n3200\n0E00\n71C0\nENDCHAR\nSTARTCHAR U_59A6\nENCODING 22950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFFE0\n2880\n2880\n4BE0\n5080\n3080\n2FE0\n4880\n8080\nENDCHAR\nSTARTCHAR U_59A7\nENCODING 22951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2000\nF800\n2FE0\n2A80\n4A80\n5280\n3280\n2AA0\n44A0\n8860\nENDCHAR\nSTARTCHAR U_59A8\nENCODING 22952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2900\n29E0\n4920\n5120\n3120\n2920\n4AA0\n8440\nENDCHAR\nSTARTCHAR U_59A9\nENCODING 22953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nF900\n2900\n2FE0\n4900\n5180\n3280\n2AA0\n44A0\n88E0\nENDCHAR\nSTARTCHAR U_59AA\nENCODING 22954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2200\nFB20\n2AA0\n2A40\n4A40\n52A0\n3320\n2A00\n4A00\n83E0\nENDCHAR\nSTARTCHAR U_59AB\nENCODING 22955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n2300\nF900\n2FE0\n2920\n4920\n51A0\n3260\n2A20\n44A0\n8840\nENDCHAR\nSTARTCHAR U_59AC\nENCODING 22956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF900\n2900\n2A00\n4BC0\n5640\n3240\n2A40\n4A40\n83C0\nENDCHAR\nSTARTCHAR U_59AD\nENCODING 22957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2240\nFFE0\n2A00\n2BC0\n4A40\n4A40\n3340\n3480\n4940\n9220\nENDCHAR\nSTARTCHAR U_59AE\nENCODING 22958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4420\nFC20\n57E0\n5400\n5520\n9540\n6580\n3520\n4920\n90E0\nENDCHAR\nSTARTCHAR U_59AF\nENCODING 22959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFBE0\n2AA0\n2AA0\n4BE0\n52A0\n32A0\n2AA0\n4BE0\n8220\nENDCHAR\nSTARTCHAR U_59B0\nENCODING 22960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFBE0\n2D00\n2900\n49E0\n5100\n3100\n29E0\n4900\n8100\nENDCHAR\nSTARTCHAR U_59B1\nENCODING 22961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\nF920\n2920\n2AA0\n4C40\n53E0\n3220\n2A20\n4BE0\n8220\nENDCHAR\nSTARTCHAR U_59B2\nENCODING 22962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\nFA20\n2A20\n2BE0\n4A20\n5220\n33E0\n2800\n4800\n87E0\nENDCHAR\nSTARTCHAR U_59B3\nENCODING 22963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2CA0\n2880\n4AC0\n52A0\n34A0\n2880\n4880\n8180\nENDCHAR\nSTARTCHAR U_59B4\nENCODING 22964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3BC0\n4A40\nD2C0\n2220\nC9E0\n0800\nFFE0\n1100\n0E00\n71C0\nENDCHAR\nSTARTCHAR U_59B5\nENCODING 22965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2880\n2880\n4880\n53E0\n3080\n2880\n4880\n87E0\nENDCHAR\nSTARTCHAR U_59B6\nENCODING 22966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2900\n2940\n4A40\n5780\n3080\n2900\n4A40\n87A0\nENDCHAR\nSTARTCHAR U_59B7\nENCODING 22967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4500\nF7C0\n5900\n5100\n5FE0\n9100\n5100\n2280\n5440\n8820\nENDCHAR\nSTARTCHAR U_59B8\nENCODING 22968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4FE0\nF040\n5740\n5540\n5540\n9740\n6040\n3040\n4840\n81C0\nENDCHAR\nSTARTCHAR U_59B9\nENCODING 22969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFC0\n2900\n2900\n4FE0\n5100\n2380\n3540\n4920\n8100\nENDCHAR\nSTARTCHAR U_59BA\nENCODING 22970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2900\n2900\n4FC0\n5100\n3380\n2D40\n4920\n8100\nENDCHAR\nSTARTCHAR U_59BB\nENCODING 22971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n3F80\n0480\n7FE0\n0480\nFFE0\n0900\n0700\n78E0\nENDCHAR\nSTARTCHAR U_59BC\nENCODING 22972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2140\nFA40\n2A40\n2A80\n4EC0\n52A0\n3300\n2240\n5240\n8DC0\nENDCHAR\nSTARTCHAR U_59BD\nENCODING 22973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFBE0\n2AA0\n2BE0\n4AA0\n52A0\n33E0\n2880\n4880\n8080\nENDCHAR\nSTARTCHAR U_59BE\nENCODING 22974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\n0A00\nFFE0\n0800\nFFE0\n1100\n3200\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_59BF\nENCODING 22975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7BC0\n2A40\n2A40\n5BC0\n0400\nFFE0\n0900\n1200\n0E00\n71C0\nENDCHAR\nSTARTCHAR U_59C0\nENCODING 22976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF900\n2900\n2FE0\n4900\n5380\n3540\n2920\n4900\n8100\nENDCHAR\nSTARTCHAR U_59C1\nENCODING 22977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2C20\n2BA0\n4AA0\n52A0\n33A0\n2820\n4820\n80C0\nENDCHAR\nSTARTCHAR U_59C2\nENCODING 22978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n4F00\n4100\nF080\n57C0\n5040\n9080\n5100\n2200\n5700\n88E0\nENDCHAR\nSTARTCHAR U_59C3\nENCODING 22979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF880\n2880\n2880\n4AE0\n4A80\n3280\n3280\n4A80\n87E0\nENDCHAR\nSTARTCHAR U_59C4\nENCODING 22980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4420\nFC20\n57E0\n5480\n9480\n97E0\n6480\n34A0\n4D60\n8620\nENDCHAR\nSTARTCHAR U_59C5\nENCODING 22981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n24A0\nFAC0\n2880\n2FE0\n4880\n5080\n37E0\n2880\n4880\n8080\nENDCHAR\nSTARTCHAR U_59C6\nENCODING 22982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4640\nF540\n5440\n5FE0\n9640\n9540\n6440\n37C0\n4840\n80C0\nENDCHAR\nSTARTCHAR U_59C7\nENCODING 22983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n6FE0\nA480\n2280\n2180\n0800\nFFE0\n1100\n3200\n0E00\n71C0\nENDCHAR\nSTARTCHAR U_59C8\nENCODING 22984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFA80\n2C40\n2920\n4880\n57E0\n3040\n2A80\n4900\n8080\nENDCHAR\nSTARTCHAR U_59C9\nENCODING 22985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF100\n57C0\n5540\n5540\n5540\n2540\n25C0\n5100\n8100\nENDCHAR\nSTARTCHAR U_59CA\nENCODING 22986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4160\nF780\n5500\n5500\n57E0\n5120\n2320\n35C0\n4900\n8100\nENDCHAR\nSTARTCHAR U_59CB\nENCODING 22987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFA40\n2A20\n2FE0\n4800\n53E0\n3220\n2A20\n4BE0\n8220\nENDCHAR\nSTARTCHAR U_59CC\nENCODING 22988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF7C0\n5540\n57C0\n5540\n5540\n2FE0\n3440\n4C40\n84C0\nENDCHAR\nSTARTCHAR U_59CD\nENCODING 22989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4AA0\nFAA0\nAAA0\nAAA0\nBFE0\nAAA0\n4AA0\n6AA0\n5AA0\n8860\nENDCHAR\nSTARTCHAR U_59CE\nENCODING 22990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\nF7C0\n5540\n5540\n5540\n9FE0\n6100\n2280\n5440\n8820\nENDCHAR\nSTARTCHAR U_59CF\nENCODING 22991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\nF7E0\n5240\n5240\n93C0\n5240\n2240\n5240\n53C0\n8240\nENDCHAR\nSTARTCHAR U_59D0\nENCODING 22992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23C0\nFA40\n2A40\n2BC0\n4A40\n5240\n33C0\n2A40\n4A40\n87E0\nENDCHAR\nSTARTCHAR U_59D1\nENCODING 22993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFFE0\n2880\n2880\n4BE0\n5220\n3220\n2A20\n4BE0\n8220\nENDCHAR\nSTARTCHAR U_59D2\nENCODING 22994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2440\nF640\n5540\n5540\n5440\n5440\n3540\n2E40\n44A0\n8120\nENDCHAR\nSTARTCHAR U_59D3\nENCODING 22995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\nFA80\n2BE0\n2C80\n4880\n53E0\n3080\n2880\n4880\n87E0\nENDCHAR\nSTARTCHAR U_59D4\nENCODING 22996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n7E00\n0400\nFFE0\n1500\nE4E0\n0800\nFFE0\n1100\n0E00\n71C0\nENDCHAR\nSTARTCHAR U_59D5\nENCODING 22997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n5A60\n5380\n5A20\nE1E0\n0800\nFFE0\n0900\n1200\n0C00\n73C0\nENDCHAR\nSTARTCHAR U_59D6\nENCODING 22998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4400\nFC00\n57C0\n5440\n5440\n97C0\n6400\n3400\n4C00\n87E0\nENDCHAR\nSTARTCHAR U_59D7\nENCODING 22999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\nEAA0\nAAA0\nBFE0\nAAA0\nAAA0\n4AA0\n6AA0\n5AA0\n9360\nENDCHAR\nSTARTCHAR U_59D8\nENCODING 23000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nFFE0\n2A40\n2A40\n4FE0\n5240\n3240\n2A40\n4A40\n8440\nENDCHAR\nSTARTCHAR U_59D9\nENCODING 23001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4460\n4780\nF480\n5480\n5C80\n97E0\n9480\n6480\n2480\n5480\n87E0\nENDCHAR\nSTARTCHAR U_59DA\nENCODING 23002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFAA0\n56C0\n5280\n52C0\n96A0\n6A80\n22A0\n54A0\n8860\nENDCHAR\nSTARTCHAR U_59DB\nENCODING 23003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4820\nFBA0\nA820\nABA0\nAAA0\nAAA0\n4BA0\n6820\n9820\n8860\nENDCHAR\nSTARTCHAR U_59DC\nENCODING 23004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0400\n7FC0\n0400\nFFE0\n0800\nFFE0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_59DD\nENCODING 23005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\nF7C0\n5900\n5100\n9FE0\n5100\n2380\n3540\n4920\n8100\nENDCHAR\nSTARTCHAR U_59DE\nENCODING 23006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFFE0\n2880\n2BE0\n4800\n53E0\n3220\n2A20\n4BE0\n8220\nENDCHAR\nSTARTCHAR U_59DF\nENCODING 23007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2900\n2A40\n4FA0\n5140\n3280\n2D40\n4A20\n8420\nENDCHAR\nSTARTCHAR U_59E0\nENCODING 23008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4200\nFFE0\nA820\nABA0\nAAA0\nAAA0\n4BA0\n6820\n9820\n88E0\nENDCHAR\nSTARTCHAR U_59E1\nENCODING 23009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF100\n5100\n5FE0\n5100\n97C0\n6440\n3440\n4C40\n87C0\nENDCHAR\nSTARTCHAR U_59E2\nENCODING 23010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4440\nFFE0\n5000\n57C0\n5440\n97C0\n6440\n37C0\n4C40\n84C0\nENDCHAR\nSTARTCHAR U_59E3\nENCODING 23011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2A40\n2C20\n4A40\n5240\n3180\n2980\n4A40\n8420\nENDCHAR\nSTARTCHAR U_59E4\nENCODING 23012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2780\nF400\n57E0\n5400\n55E0\n5520\n3520\n2D20\n45E0\n8920\nENDCHAR\nSTARTCHAR U_59E5\nENCODING 23013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2120\nF7C0\n5140\n5FE0\n5200\n5240\n3680\n2B20\n4A20\n81E0\nENDCHAR\nSTARTCHAR U_59E6\nENCODING 23014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n0E00\n71C0\n2080\nFFE0\n4A40\n4A40\n3180\nCE60\nENDCHAR\nSTARTCHAR U_59E7\nENCODING 23015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\nFC80\n4880\n3080\nCBE0\n2080\nFC80\n4880\n3080\nC880\nENDCHAR\nSTARTCHAR U_59E8\nENCODING 23016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n57E0\n5120\n57E0\n5500\n37E0\n2920\n4280\n8C60\nENDCHAR\nSTARTCHAR U_59E9\nENCODING 23017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\nFA80\n5480\n53E0\n5280\n5280\n2FE0\n3080\n4880\n8080\nENDCHAR\nSTARTCHAR U_59EA\nENCODING 23018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nF200\n5440\n57A0\n5100\n5100\n27C0\n3100\n4900\n87E0\nENDCHAR\nSTARTCHAR U_59EB\nENCODING 23019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4480\nFC80\n57E0\n5420\n5420\n97E0\n6480\n3480\n4C80\n87E0\nENDCHAR\nSTARTCHAR U_59EC\nENCODING 23020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2480\nFC80\n55C0\n5540\n5540\n5540\n25C0\n3480\n4C80\n87E0\nENDCHAR\nSTARTCHAR U_59ED\nENCODING 23021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7F80\n1100\nFBE0\n2920\nDA60\n0400\nFFE0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_59EE\nENCODING 23022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2000\nFBC0\n2A40\n2A40\n4BC0\n5240\n23C0\n3240\n4800\n87E0\nENDCHAR\nSTARTCHAR U_59EF\nENCODING 23023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4920\nF540\n5100\n5FE0\n5280\n9280\n6280\n22A0\n54A0\n8860\nENDCHAR\nSTARTCHAR U_59F0\nENCODING 23024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2C20\n2BA0\n4AA0\n53A0\n32A0\n2BA0\n4820\n80E0\nENDCHAR\nSTARTCHAR U_59F1\nENCODING 23025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n5440\n5BA0\n5000\n5FE0\n2200\n33C0\n4840\n8180\nENDCHAR\nSTARTCHAR U_59F2\nENCODING 23026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nF7E0\n5520\n5100\n57E0\n5240\n2240\n3180\n4940\n8620\nENDCHAR\nSTARTCHAR U_59F3\nENCODING 23027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\nF220\n5540\n5080\n5100\n57E0\n2220\n3220\n4BE0\n8220\nENDCHAR\nSTARTCHAR U_59F4\nENCODING 23028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E20\n1120\n3D20\n4520\n2860\n1400\n7FE0\n0900\n1200\n0D00\n78E0\nENDCHAR\nSTARTCHAR U_59F5\nENCODING 23029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\nFFC0\n5540\n57C0\n5540\n9540\n6540\n35C0\n4920\n9120\nENDCHAR\nSTARTCHAR U_59F6\nENCODING 23030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF440\n5820\n57C0\n5000\n57C0\n2440\n3440\n4FC0\n8440\nENDCHAR\nSTARTCHAR U_59F7\nENCODING 23031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFA00\n53E0\n5620\n5BE0\n5220\n23E0\n3220\n4A20\n8260\nENDCHAR\nSTARTCHAR U_59F8\nENCODING 23032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4EE0\nF440\n5440\n5440\n5EE0\n9440\n6440\n3440\n4840\n9040\nENDCHAR\nSTARTCHAR U_59F9\nENCODING 23033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2C20\n2BC0\n4900\n51E0\n3700\n2920\n4920\n80E0\nENDCHAR\nSTARTCHAR U_59FA\nENCODING 23034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\nF7C0\n5900\n5100\n5FE0\n5280\n3280\n2AA0\n44A0\n8860\nENDCHAR\nSTARTCHAR U_59FB\nENCODING 23035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\nF520\n57E0\n5520\n5520\n55A0\n2660\n3420\n4FE0\n8420\nENDCHAR\nSTARTCHAR U_59FC\nENCODING 23036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\nFA20\n5540\n5080\n5100\n56E0\n2120\n32A0\n4840\n8780\nENDCHAR\nSTARTCHAR U_59FD\nENCODING 23037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nFC80\n57E0\n5400\n55C0\n9540\n65C0\n3500\n4920\n90E0\nENDCHAR\nSTARTCHAR U_59FE\nENCODING 23038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nFC40\n2820\n2FC0\n4900\n5100\n37C0\n2900\n4900\n87E0\nENDCHAR\nSTARTCHAR U_59FF\nENCODING 23039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n2A40\nC200\n4500\n48E0\n0800\nFFE0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_5A00\nENCODING 23040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n20C0\nF0A0\n5FE0\n5480\n54A0\n5FA0\n24C0\n3480\n4960\n8220\nENDCHAR\nSTARTCHAR U_5A01\nENCODING 23041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n0120\n7FE0\n4100\n5D20\n4920\n7F40\n5540\n4CA0\n9360\nA420\nENDCHAR\nSTARTCHAR U_5A02\nENCODING 23042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFFE0\n5280\n5280\n9280\n5FE0\n2000\n3280\n4460\n8840\nENDCHAR\nSTARTCHAR U_5A03\nENCODING 23043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF7C0\n5100\n5FE0\n9100\n5100\n27C0\n3100\n4900\n87E0\nENDCHAR\nSTARTCHAR U_5A04\nENCODING 23044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\nFFE0\n1500\n2480\nC460\n0800\nFFE0\n1100\n0F00\nF8E0\nENDCHAR\nSTARTCHAR U_5A05\nENCODING 23045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4FE0\nF280\n5280\n5AA0\n56C0\n9280\n6280\n2280\n5280\n8FE0\nENDCHAR\nSTARTCHAR U_5A06\nENCODING 23046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22E0\n2F00\nF2A0\n5120\n56E0\n5000\n5FE0\n2280\n32A0\n4CA0\n8860\nENDCHAR\nSTARTCHAR U_5A07\nENCODING 23047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF100\n5FE0\n5240\n5420\n9240\n6240\n2240\n5440\n8840\nENDCHAR\nSTARTCHAR U_5A08\nENCODING 23048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n0900\n2940\n4920\n0400\nFFE0\n0900\n1200\n0F00\nF8E0\nENDCHAR\nSTARTCHAR U_5A09\nENCODING 23049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nFD40\n57C0\n5540\n9FE0\n5200\n27C0\n3040\n4840\n8180\nENDCHAR\nSTARTCHAR U_5A0A\nENCODING 23050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\nFFC0\n5440\n57C0\n9440\n57C0\n2280\n32A0\n44A0\n8860\nENDCHAR\nSTARTCHAR U_5A0B\nENCODING 23051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2520\nF340\n57E0\n5420\n97E0\n5420\n27E0\n3420\n4C20\n8460\nENDCHAR\nSTARTCHAR U_5A0C\nENCODING 23052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nFD40\n57C0\n5540\n57C0\n9100\n67C0\n2100\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_5A0D\nENCODING 23053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n40A0\nF7E0\n5480\n5480\n57A0\n95A0\n6540\n3560\n4AA0\n9120\nENDCHAR\nSTARTCHAR U_5A0E\nENCODING 23054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\nFE00\n1BE0\n3280\nD480\n0400\nFFE0\n0880\n1900\n0600\n79C0\nENDCHAR\nSTARTCHAR U_5A0F\nENCODING 23055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n4480\n4FE0\nF500\n55C0\n9500\n55C0\n2500\n55C0\n4B20\n94E0\nENDCHAR\nSTARTCHAR U_5A10\nENCODING 23056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2720\nF540\n5280\n57E0\n9040\n5080\n27E0\n3080\n4880\n8180\nENDCHAR\nSTARTCHAR U_5A11\nENCODING 23057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2540\nC920\n2940\n4080\nC700\n4800\nFFE0\n1100\n0E00\nF9E0\nENDCHAR\nSTARTCHAR U_5A12\nENCODING 23058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n47E0\nF800\n57C0\n5540\n5540\n9FE0\n6540\n27E0\n5040\n80C0\nENDCHAR\nSTARTCHAR U_5A13\nENCODING 23059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFFE0\n5440\n5780\n94E0\n5780\n24E0\n3780\n48A0\n9060\nENDCHAR\nSTARTCHAR U_5A14\nENCODING 23060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n57C0\n5440\n9440\n57C0\n2280\n3280\n4AA0\n8460\nENDCHAR\nSTARTCHAR U_5A15\nENCODING 23061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n57E0\n5520\n97E0\n5100\n2380\n3540\n4920\n8100\nENDCHAR\nSTARTCHAR U_5A16\nENCODING 23062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\nFA20\n2BE0\n2880\n4A80\n52E0\n3280\n2A80\n4580\n88E0\nENDCHAR\nSTARTCHAR U_5A17\nENCODING 23063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E60\n4380\nF480\n5480\n5FE0\n5280\n9280\n6A80\n25E0\n5600\n89E0\nENDCHAR\nSTARTCHAR U_5A18\nENCODING 23064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\nF440\n57C0\n5440\n57C0\n9520\n6540\n3480\n4E40\n8420\nENDCHAR\nSTARTCHAR U_5A19\nENCODING 23065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n22A0\nFAA0\n5540\n52A0\n92A0\n5000\n27C0\n3100\n4900\n8FE0\nENDCHAR\nSTARTCHAR U_5A1A\nENCODING 23066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nFFC0\n5540\n57C0\n9100\n5FE0\n2220\n3220\n44A0\n8840\nENDCHAR\nSTARTCHAR U_5A1B\nENCODING 23067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFE40\n57C0\n5400\n57C0\n7140\n17E0\n2900\n4280\n8C60\nENDCHAR\nSTARTCHAR U_5A1C\nENCODING 23068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n4AA0\nFAA0\nAEA0\nAAC0\nBEA0\nAAA0\n4AA0\n6AE0\n5280\n9480\nENDCHAR\nSTARTCHAR U_5A1D\nENCODING 23069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\nF980\n52C0\n54A0\n9080\n53E0\n2220\n3220\n4BE0\n8220\nENDCHAR\nSTARTCHAR U_5A1E\nENCODING 23070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2F20\nF540\n5280\n5100\n9FE0\n5240\n2640\n3180\n4A40\n8420\nENDCHAR\nSTARTCHAR U_5A1F\nENCODING 23071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\nFBE0\n2800\n2BE0\n4A20\n53E0\n3220\n2BE0\n4A20\n8260\nENDCHAR\nSTARTCHAR U_5A20\nENCODING 23072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4800\nFBC0\nA800\nAFE0\nAA80\nAAA0\n6AC0\n5A80\n8B40\n1620\nENDCHAR\nSTARTCHAR U_5A21\nENCODING 23073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n5100\n57C0\n9000\n5140\n26A0\n3A20\n4A40\n81C0\nENDCHAR\nSTARTCHAR U_5A22\nENCODING 23074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF280\n5540\n5920\n97C0\n5080\n2100\n27C0\n5440\n87C0\nENDCHAR\nSTARTCHAR U_5A23\nENCODING 23075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nF7C0\n5140\n57C0\n5500\n57E0\n2320\n3520\n49C0\n8100\nENDCHAR\nSTARTCHAR U_5A24\nENCODING 23076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n4880\n7FE0\n0880\nF880\n2BE0\n4400\nFFE0\n0880\n0700\n38C0\nENDCHAR\nSTARTCHAR U_5A25\nENCODING 23077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n26C0\nFAA0\n57E0\n5280\n52A0\n53C0\n36A0\n2AA0\n4360\n8620\nENDCHAR\nSTARTCHAR U_5A26\nENCODING 23078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF400\n5400\n57E0\n9480\n5480\n2FE0\n3000\n4440\n8820\nENDCHAR\nSTARTCHAR U_5A27\nENCODING 23079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4280\nF7C0\n5440\n5440\n97C0\n5280\n2280\n3280\n44A0\n8860\nENDCHAR\nSTARTCHAR U_5A28\nENCODING 23080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\nFBE0\n2A20\n2BE0\n4800\n53E0\n3080\n2BE0\n4880\n8080\nENDCHAR\nSTARTCHAR U_5A29\nENCODING 23081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nF480\n5FE0\n5520\n5520\n97E0\n6280\n2280\n54A0\n88E0\nENDCHAR\nSTARTCHAR U_5A2A\nENCODING 23082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nFBC0\n2940\n2940\n4FE0\n5000\n33E0\n2A20\n4A20\n83E0\nENDCHAR\nSTARTCHAR U_5A2B\nENCODING 23083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n4DC0\nF440\n5560\n5940\n5540\n9540\n6FE0\n3400\n4A00\n91E0\nENDCHAR\nSTARTCHAR U_5A2C\nENCODING 23084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n27E0\nF040\n5FE0\n5140\n5540\n55C0\n5540\n2540\n57C0\n8820\nENDCHAR\nSTARTCHAR U_5A2D\nENCODING 23085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2240\nF7A0\n5200\n57C0\n5900\n9100\n6FE0\n2280\n5440\n8820\nENDCHAR\nSTARTCHAR U_5A2E\nENCODING 23086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nF800\n2BE0\n2800\n4BE0\n5000\n33E0\n2A20\n4A20\n83E0\nENDCHAR\nSTARTCHAR U_5A2F\nENCODING 23087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2140\nF540\n55C0\n5400\n57C0\n9040\n6FE0\n2000\n5440\n8820\nENDCHAR\nSTARTCHAR U_5A30\nENCODING 23088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4520\n4D20\nF520\n55A0\n5560\n5520\n55A0\n2540\n5460\n84A0\nENDCHAR\nSTARTCHAR U_5A31\nENCODING 23089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFC40\n57C0\n5000\n97C0\n5100\n2FE0\n2280\n5440\n8820\nENDCHAR\nSTARTCHAR U_5A32\nENCODING 23090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\nF440\nA7C0\nA100\nAFE0\nA920\nCAA0\n2C60\n5820\n8860\nENDCHAR\nSTARTCHAR U_5A33\nENCODING 23091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4120\n4E20\nF4A0\nAFA0\nA4A0\nA6A0\nADA0\n54A0\n24A0\n5420\n84E0\nENDCHAR\nSTARTCHAR U_5A34\nENCODING 23092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n4220\nF920\nAFE0\nA920\nA920\nCBA0\n6D60\n5920\n8920\n08E0\nENDCHAR\nSTARTCHAR U_5A35\nENCODING 23093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F80\n4AE0\nFEA0\nAAA0\nAAA0\nAEA0\nAAA0\nCB40\n3E40\n52A0\n8320\nENDCHAR\nSTARTCHAR U_5A36\nENCODING 23094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC00\n4BE0\n6940\n5880\n4940\nFA20\n0800\nFFE0\n1900\n0600\nF9E0\nENDCHAR\nSTARTCHAR U_5A37\nENCODING 23095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n4780\nF100\nAFE0\nA540\nA540\nAFE0\nC540\n2FE0\n5100\n8FC0\nENDCHAR\nSTARTCHAR U_5A38\nENCODING 23096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nFA40\n2BC0\n2A40\n4BC0\n5240\n37E0\n2A80\n4C40\n8020\nENDCHAR\nSTARTCHAR U_5A39\nENCODING 23097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E80\n4240\nF3E0\nAE80\nA8A0\nAF20\nA3C0\n4240\n22A0\n5B60\n85A0\nENDCHAR\nSTARTCHAR U_5A3A\nENCODING 23098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n6AA0\n4440\nFAA0\n5000\n5EE0\n9AA0\n5AA0\n6440\n5AA0\n9AA0\nENDCHAR\nSTARTCHAR U_5A3B\nENCODING 23099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n6FE0\n4100\nF7C0\n5540\n57C0\n5540\n57C0\n2380\n5540\n8920\nENDCHAR\nSTARTCHAR U_5A3C\nENCODING 23100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFBC0\n5240\n53C0\n5000\n57E0\n3420\n2FE0\n4420\n87E0\nENDCHAR\nSTARTCHAR U_5A3D\nENCODING 23101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4040\nF7C0\n5040\n5FE0\n5100\n5D60\n5380\n2540\n5920\n8300\nENDCHAR\nSTARTCHAR U_5A3E\nENCODING 23102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nFC80\n57E0\n5480\n57E0\n5480\n27E0\n3480\n4880\n8BE0\nENDCHAR\nSTARTCHAR U_5A3F\nENCODING 23103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5040\n6740\n5540\n7740\n4840\nFFE0\n1100\n1900\n0600\n3980\nENDCHAR\nSTARTCHAR U_5A40\nENCODING 23104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4A20\nFA20\nACE0\nAAA0\nAAA0\nAAA0\n4EE0\n2820\n5820\n88E0\nENDCHAR\nSTARTCHAR U_5A41\nENCODING 23105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n2480\nFFE0\n2480\n7FC0\n4440\nFFE0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_5A42\nENCODING 23106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF440\n57C0\n5440\n57C0\n5100\n3FE0\n2920\n4960\n8100\nENDCHAR\nSTARTCHAR U_5A43\nENCODING 23107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2820\n2BC0\n4800\n57E0\n3100\n2D40\n4920\n8320\nENDCHAR\nSTARTCHAR U_5A44\nENCODING 23108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2C40\n2A80\n4FE0\n5000\n37C0\n2C40\n4C40\n87C0\nENDCHAR\nSTARTCHAR U_5A45\nENCODING 23109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n47E0\nF920\n5560\n55A0\n5FE0\n5320\n55E0\n2920\n5120\n8160\nENDCHAR\nSTARTCHAR U_5A46\nENCODING 23110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nAFE0\n4920\n2FC0\nCA40\n5180\n4640\nFFE0\n1100\n0E00\nF9E0\nENDCHAR\nSTARTCHAR U_5A47\nENCODING 23111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n27A0\nFD20\n2AC0\n2900\n4FE0\n5100\n3380\n2D40\n4920\n8100\nENDCHAR\nSTARTCHAR U_5A48\nENCODING 23112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n2FE0\n2A40\n4D20\n53C0\n3640\n2980\n4A40\n8420\nENDCHAR\nSTARTCHAR U_5A49\nENCODING 23113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n5400\n57E0\n5AA0\n56E0\n3280\n2AA0\n44A0\n88E0\nENDCHAR\nSTARTCHAR U_5A4A\nENCODING 23114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF100\n53C0\n5100\n57E0\n52A0\n36C0\n2A80\n4B40\n8220\nENDCHAR\nSTARTCHAR U_5A4B\nENCODING 23115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40E0\n4080\nF7E0\n5500\n57C0\n5520\n95E0\n5400\n25C0\n6540\n9A60\nENDCHAR\nSTARTCHAR U_5A4C\nENCODING 23116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n46E0\nE4A0\nA4A0\nBFA0\nA4A0\nAEA0\n75A0\n2440\n54A0\n8920\nENDCHAR\nSTARTCHAR U_5A4D\nENCODING 23117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n5440\n5FE0\n5040\n5740\n2540\n3740\n4840\n81C0\nENDCHAR\nSTARTCHAR U_5A4E\nENCODING 23118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4480\n4FE0\nF480\n57E0\n5480\n9480\n57E0\n2480\n5480\n8FE0\nENDCHAR\nSTARTCHAR U_5A4F\nENCODING 23119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n2480\nFFE0\n5520\n5520\n57E0\n2280\n52A0\n9480\n8860\nENDCHAR\nSTARTCHAR U_5A50\nENCODING 23120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nFFC0\n5540\n57C0\n5100\n5FE0\n3100\n2B80\n4540\n8920\nENDCHAR\nSTARTCHAR U_5A51\nENCODING 23121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n5340\n5D20\n5100\n5FE0\n2240\n3280\n4980\n8660\nENDCHAR\nSTARTCHAR U_5A52\nENCODING 23122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n2540\nF580\n5A80\n5460\n5100\n5520\n2540\n3A80\n4A40\n8420\nENDCHAR\nSTARTCHAR U_5A53\nENCODING 23123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFBE0\n0A00\n7BC0\n0A00\nFBE0\n0400\nFFE0\n0900\n0600\n79C0\nENDCHAR\nSTARTCHAR U_5A54\nENCODING 23124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4280\nFEE0\n5280\n5280\n5EE0\n5280\n5280\n2EE0\n5280\n8280\nENDCHAR\nSTARTCHAR U_5A55\nENCODING 23125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nF7C0\n5140\n57E0\n5140\n57C0\n3500\n25C0\n5B00\n91E0\nENDCHAR\nSTARTCHAR U_5A56\nENCODING 23126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n5280\n5540\n5920\n5140\n25A0\n3560\n4940\n8700\nENDCHAR\nSTARTCHAR U_5A57\nENCODING 23127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n26E0\n2420\nFC20\n56E0\n5420\n57E0\n5280\n3280\n2AA0\n44A0\n8860\nENDCHAR\nSTARTCHAR U_5A58\nENCODING 23128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n4540\nFFE0\nA200\nAFE0\nA440\nAFA0\n6480\n35A0\n4420\n83E0\nENDCHAR\nSTARTCHAR U_5A59\nENCODING 23129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n47C0\nF880\n57C0\n5140\n9FE0\n5140\n57C0\n2100\n5100\n8300\nENDCHAR\nSTARTCHAR U_5A5A\nENCODING 23130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2480\nFFE0\n5480\n5660\n5020\n57C0\n2440\n37C0\n4C40\n87C0\nENDCHAR\nSTARTCHAR U_5A5B\nENCODING 23131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF000\n57C0\n5440\n57C0\n5100\n2380\n3540\n4920\n9320\nENDCHAR\nSTARTCHAR U_5A5C\nENCODING 23132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA140\nF940\n8880\nF940\nA420\nFFE0\n1100\n1A00\n0580\nF860\nENDCHAR\nSTARTCHAR U_5A5D\nENCODING 23133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFC20\n5000\n57E0\n5080\n5280\n32E0\n2A80\n4580\n88E0\nENDCHAR\nSTARTCHAR U_5A5E\nENCODING 23134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF100\n5FE0\n5440\n5280\n57C0\n2100\n37E0\n4900\n8100\nENDCHAR\nSTARTCHAR U_5A5F\nENCODING 23135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4820\nF920\nAFE0\nA920\nABA0\nAAA0\n6BA0\n5820\n8FE0\n0820\nENDCHAR\nSTARTCHAR U_5A60\nENCODING 23136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n5820\n57C0\n5440\n57C0\n3400\n2FE0\n4420\n87E0\nENDCHAR\nSTARTCHAR U_5A61\nENCODING 23137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF100\n5540\n5540\n5BA0\n9100\n6380\n2540\n5920\n8100\nENDCHAR\nSTARTCHAR U_5A62\nENCODING 23138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFCA0\n57E0\n54A0\n57E0\n5180\n2280\n37E0\n4880\n8080\nENDCHAR\nSTARTCHAR U_5A63\nENCODING 23139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AA0\n4AA0\n4EE0\nF820\n5FE0\n9820\n9EE0\n6AA0\n52A0\n92A0\nA020\nENDCHAR\nSTARTCHAR U_5A64\nENCODING 23140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4920\nFBA0\nA920\nAFE0\nA820\nABA0\n6AA0\n3BA0\n4820\n90E0\nENDCHAR\nSTARTCHAR U_5A65\nENCODING 23141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2100\nFFC0\n5440\n57C0\n5440\n57C0\n5100\n2FE0\n5100\n8900\nENDCHAR\nSTARTCHAR U_5A66\nENCODING 23142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4040\nF7C0\nA040\nAFE0\nA920\nA7C0\n4540\n2540\n5540\n8100\nENDCHAR\nSTARTCHAR U_5A67\nENCODING 23143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nFBC0\n5100\n5FE0\n5440\n57C0\n3440\n2FC0\n4440\n84C0\nENDCHAR\nSTARTCHAR U_5A68\nENCODING 23144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2280\nFC60\n57C0\n9000\nAFE0\n6AA0\n5FE0\n8AA0\n8AA0\nENDCHAR\nSTARTCHAR U_5A69\nENCODING 23145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24A0\n27E0\nF800\n57E0\n5400\n55C0\n5480\n27E0\n3480\n4880\n9080\nENDCHAR\nSTARTCHAR U_5A6A\nENCODING 23146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n3100\n6B80\nA540\n2500\nFFE0\n0900\n1200\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_5A6B\nENCODING 23147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nFC40\n57C0\n5480\n94A0\n56C0\n2480\n56A0\n84E0\nENDCHAR\nSTARTCHAR U_5A6C\nENCODING 23148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n4F20\nFA20\nA540\nA040\nA780\nA100\n6FE0\n2100\n5100\n87C0\nENDCHAR\nSTARTCHAR U_5A6D\nENCODING 23149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2140\nF940\n5760\n5420\n5420\n5760\n2140\n3140\n4940\n8FE0\nENDCHAR\nSTARTCHAR U_5A6E\nENCODING 23150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47E0\nF420\n57E0\n5480\n57E0\n5480\n27E0\n2620\n5A20\n93E0\nENDCHAR\nSTARTCHAR U_5A6F\nENCODING 23151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n0000\n7BC0\n4A40\n6B40\n4A40\n0800\nFFE0\n1100\n0E00\n71C0\nENDCHAR\nSTARTCHAR U_5A70\nENCODING 23152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4FE0\nFAA0\nAAA0\nAFE0\nAAA0\nAAA0\n5FE0\n6480\n9840\n1020\nENDCHAR\nSTARTCHAR U_5A71\nENCODING 23153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n1FE0\n7240\n4780\n7140\n17E0\n2400\nFFE0\n0900\n0E00\n31C0\nENDCHAR\nSTARTCHAR U_5A72\nENCODING 23154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4280\nFFE0\n5280\n5480\n5CA0\n54C0\n5580\n2480\n54A0\n84E0\nENDCHAR\nSTARTCHAR U_5A73\nENCODING 23155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4FE0\nF000\n57C0\n5D60\n5FE0\n5D60\n7D60\n2FE0\n5820\n8FE0\nENDCHAR\nSTARTCHAR U_5A74\nENCODING 23156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n5540\n5540\n5540\n2A80\n4440\nFFE0\n1100\n0E00\nF1C0\nENDCHAR\nSTARTCHAR U_5A75\nENCODING 23157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4280\nFFE0\nA920\nAFE0\nA920\nAFE0\n6100\n2FE0\n5100\n8900\nENDCHAR\nSTARTCHAR U_5A76\nENCODING 23158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF820\nA100\nAFE0\nA920\nAFE0\n4920\n6FE0\n9100\n0100\nENDCHAR\nSTARTCHAR U_5A77\nENCODING 23159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF440\nA7C0\nA000\nAFE0\nA820\n67C0\n3080\n4A80\n8100\nENDCHAR\nSTARTCHAR U_5A78\nENCODING 23160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n5440\n5FE0\n5200\n57E0\n2AA0\n32A0\n4D20\n8260\nENDCHAR\nSTARTCHAR U_5A79\nENCODING 23161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4FE0\nF280\n5FE0\n5AA0\n5FE0\n5100\n7FE0\n2440\n5380\n8C60\nENDCHAR\nSTARTCHAR U_5A7A\nENCODING 23162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n29E0\n1140\nFD40\n3480\n5140\n9420\nFFE0\n1100\n0F80\nF060\nENDCHAR\nSTARTCHAR U_5A7B\nENCODING 23163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF100\nAFE0\nAAA0\nA920\nAFE0\n4920\n6FE0\n9920\n0860\nENDCHAR\nSTARTCHAR U_5A7C\nENCODING 23164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nFA40\n5100\n5100\n9FE0\n5200\n27E0\n2A20\n5220\n83E0\nENDCHAR\nSTARTCHAR U_5A7D\nENCODING 23165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2760\n2520\nFD20\n5760\n5400\n57E0\n54A0\n27A0\n3440\n44A0\n8520\nENDCHAR\nSTARTCHAR U_5A7E\nENCODING 23166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4280\nF440\n5BA0\n9000\nAEA0\nAAA0\n4F40\n4AA0\nAEA0\nAAA0\nENDCHAR\nSTARTCHAR U_5A7F\nENCODING 23167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2120\nF5C0\n5500\n5FE0\n5440\n57C0\n2440\n37C0\n4C40\n84C0\nENDCHAR\nSTARTCHAR U_5A80\nENCODING 23168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4540\n47C0\nFD40\n57C0\n9100\nAFE0\n6920\n59E0\n8E20\n8860\nENDCHAR\nSTARTCHAR U_5A81\nENCODING 23169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\n4240\nFFE0\n5000\n57C0\n9440\n9FE0\n6500\n5FE0\n8100\nENDCHAR\nSTARTCHAR U_5A82\nENCODING 23170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF440\n5FE0\n5920\n5FE0\n5540\n2540\n5540\n8100\n0100\nENDCHAR\nSTARTCHAR U_5A83\nENCODING 23171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2280\nF100\n5FE0\n5520\n5940\n5100\n2FE0\n3380\n4540\n8920\nENDCHAR\nSTARTCHAR U_5A84\nENCODING 23172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nFFE0\n5100\n57C0\n5100\n5FE0\n2100\n3FE0\n4280\n8C60\nENDCHAR\nSTARTCHAR U_5A85\nENCODING 23173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n47E0\nFA40\n53C0\n5240\n53C0\n9240\n6FE0\n2540\n5620\n87E0\nENDCHAR\nSTARTCHAR U_5A86\nENCODING 23174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4200\nF7E0\n5520\n5520\n5460\n9100\n6FE0\n2280\n5440\n8820\nENDCHAR\nSTARTCHAR U_5A87\nENCODING 23175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4440\nF280\n5FE0\n9100\n9FE0\n6380\n2340\n5520\n8920\nENDCHAR\nSTARTCHAR U_5A88\nENCODING 23176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4920\n47C0\nF900\n57C0\n9540\n97C0\n6540\n2FE0\n5100\n8100\nENDCHAR\nSTARTCHAR U_5A89\nENCODING 23177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4420\n47E0\nF400\n57E0\n9540\n97E0\n6480\n27E0\n5480\n8BE0\nENDCHAR\nSTARTCHAR U_5A8A\nENCODING 23178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4280\nFFE0\nA000\nAE20\nAAA0\nAEA0\n4AA0\n6EA0\n5A20\n8A60\nENDCHAR\nSTARTCHAR U_5A8B\nENCODING 23179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nFFC0\n5200\n57E0\n5240\n57E0\n2A40\n33C0\n4A40\n83C0\nENDCHAR\nSTARTCHAR U_5A8C\nENCODING 23180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\nFFE0\n5240\n5000\n57E0\n9520\n67E0\n2520\n57E0\n8420\nENDCHAR\nSTARTCHAR U_5A8D\nENCODING 23181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\n2240\nFFE0\n5220\n53E0\n9220\n53E0\n2220\n51C0\n8A20\nENDCHAR\nSTARTCHAR U_5A8E\nENCODING 23182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n27E0\nF140\n5180\n5FE0\n5200\n97C0\n6A40\n23C0\n5240\n83C0\nENDCHAR\nSTARTCHAR U_5A8F\nENCODING 23183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n4920\nFFE0\nA000\nAFE0\nA200\nAFE0\n4AA0\n2AA0\n5AA0\n8860\nENDCHAR\nSTARTCHAR U_5A90\nENCODING 23184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n9240\nBBC0\nAA00\n9220\nFDE0\n0800\nFFE0\n1100\n0E00\nF1C0\nENDCHAR\nSTARTCHAR U_5A91\nENCODING 23185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n6100\n4FE0\nF100\n57C0\n5540\n57C0\n5100\n27C0\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_5A92\nENCODING 23186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n2440\nF7C0\n5440\n57C0\n5100\n2FE0\n3380\n4D40\n8920\nENDCHAR\nSTARTCHAR U_5A93\nENCODING 23187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nFC40\n57C0\n5440\n5FE0\n5100\n2100\n37C0\n4900\n8FE0\nENDCHAR\nSTARTCHAR U_5A94\nENCODING 23188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4100\nF200\nAFE0\nAAA0\nABA0\nAAA0\nCBA0\n2AA0\n5FE0\n8820\nENDCHAR\nSTARTCHAR U_5A95\nENCODING 23189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n2440\nFBA0\n5000\n57C0\n5440\n57C0\n2280\n3FE0\n4A80\n8480\nENDCHAR\nSTARTCHAR U_5A96\nENCODING 23190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4FE0\nF440\n5100\n57C0\n9540\n5540\n2FE0\n3280\n4440\n8820\nENDCHAR\nSTARTCHAR U_5A97\nENCODING 23191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n5000\n5FE0\n5440\n57C0\n2440\n37C0\n4000\n8FE0\nENDCHAR\nSTARTCHAR U_5A98\nENCODING 23192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n66E0\n4480\nF6A0\n54E0\n9100\n97E0\n5420\n27E0\n5420\n87E0\nENDCHAR\nSTARTCHAR U_5A99\nENCODING 23193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40A0\n4FE0\n4880\nFF80\nAAA0\nAAA0\nAFC0\n6940\n2D40\n52A0\n9520\nENDCHAR\nSTARTCHAR U_5A9A\nENCODING 23194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n24A0\nF7E0\n5400\n55E0\n5520\n55E0\n3520\n2DE0\n4920\n91E0\nENDCHAR\nSTARTCHAR U_5A9B\nENCODING 23195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2720\nF540\n57E0\n5100\n5FE0\n5200\n33E0\n2D40\n4880\n9760\nENDCHAR\nSTARTCHAR U_5A9C\nENCODING 23196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2100\nFFC0\n5440\n57C0\n5440\n57C0\n2440\n37C0\n4280\n8C60\nENDCHAR\nSTARTCHAR U_5A9D\nENCODING 23197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7120\n2540\nFD80\n3100\n6A80\nA440\nFFE0\n0880\n1900\n0700\nF8E0\nENDCHAR\nSTARTCHAR U_5A9E\nENCODING 23198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF7C0\n5440\n57C0\n5000\n5FE0\n2500\n35E0\n4B00\n91E0\nENDCHAR\nSTARTCHAR U_5A9F\nENCODING 23199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\nF540\n55C0\n5400\n57E0\n5100\n2FE0\n3380\n4D40\n8920\nENDCHAR\nSTARTCHAR U_5AA0\nENCODING 23200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\nF200\n57E0\n5C80\n57E0\n5420\n57E0\n2420\n57E0\n8420\nENDCHAR\nSTARTCHAR U_5AA1\nENCODING 23201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF100\n57C0\n5540\n57C0\n5540\n57C0\n2380\n5540\n8920\nENDCHAR\nSTARTCHAR U_5AA2\nENCODING 23202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nFBA0\n5820\n5FE0\n5440\n57C0\n2440\n37C0\n4C40\n87C0\nENDCHAR\nSTARTCHAR U_5AA3\nENCODING 23203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n43C0\n4940\nF540\n5940\n9A60\n9100\n6FE0\n2380\n5540\n8920\nENDCHAR\nSTARTCHAR U_5AA4\nENCODING 23204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4540\n47C0\nFD40\n57C0\n9000\n9540\n64A0\n2AA0\n5240\n81C0\nENDCHAR\nSTARTCHAR U_5AA5\nENCODING 23205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF820\nAFE0\nA800\nAFE0\nAAA0\n4FE0\n2AA0\n5AA0\nA860\nENDCHAR\nSTARTCHAR U_5AA6\nENCODING 23206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4920\nFFE0\nA920\nAFE0\nA440\nA7C0\nA440\n67C0\n5440\n8CC0\nENDCHAR\nSTARTCHAR U_5AA7\nENCODING 23207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\nF740\nA540\nAFE0\nA820\nABA0\n6AA0\n3AA0\n4BA0\n8860\nENDCHAR\nSTARTCHAR U_5AA8\nENCODING 23208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4FE0\n4280\nFFE0\n5AA0\n9AA0\n9CE0\n6820\n2FE0\n5820\n8FE0\nENDCHAR\nSTARTCHAR U_5AA9\nENCODING 23209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n24A0\nFFA0\n54E0\n54A0\n5EA0\n5AE0\n2AA0\n3EA0\n4920\n8260\nENDCHAR\nSTARTCHAR U_5AAA\nENCODING 23210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF7C0\n5440\n57C0\n5440\n5000\n6FE0\n3AA0\n4AA0\n9FE0\nENDCHAR\nSTARTCHAR U_5AAB\nENCODING 23211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n41C0\n4100\nF7C0\n5040\n5FE0\n9100\nE5C0\n2500\n5B00\n91E0\nENDCHAR\nSTARTCHAR U_5AAC\nENCODING 23212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n2520\nF520\n5DE0\n5480\n57E0\n5480\n25C0\n36A0\n4CA0\n8480\nENDCHAR\nSTARTCHAR U_5AAD\nENCODING 23213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37E0\nC200\n37E0\nC520\n3520\nC280\n0440\nFFE0\n0900\n0E00\n31C0\nENDCHAR\nSTARTCHAR U_5AAE\nENCODING 23214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n4440\nFBA0\nA000\nAE20\nAAA0\nAEA0\n6AA0\n2EA0\n5A20\n8A60\nENDCHAR\nSTARTCHAR U_5AAF\nENCODING 23215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n4500\nEF80\nA480\nA7C0\nA440\nA7E0\nA820\n6560\n5AA0\n8060\nENDCHAR\nSTARTCHAR U_5AB0\nENCODING 23216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n26A0\nFBE0\n5120\n5240\n53E0\n56A0\n5AA0\n23E0\n5120\n8EC0\nENDCHAR\nSTARTCHAR U_5AB1\nENCODING 23217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2740\nFD40\n2A80\n2A00\n4BE0\n5480\n33E0\n2880\n4AA0\n83E0\nENDCHAR\nSTARTCHAR U_5AB2\nENCODING 23218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4FE0\nFAA0\nA920\nAAA0\nAFE0\nA880\nAEA0\n68C0\n5AA0\n8CE0\nENDCHAR\nSTARTCHAR U_5AB3\nENCODING 23219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nFC40\n57C0\n5440\n57C0\n5440\n27C0\n3540\n4AA0\n83C0\nENDCHAR\nSTARTCHAR U_5AB4\nENCODING 23220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF100\n5FE0\n5440\n57C0\n5120\n2340\n3C80\n4D40\n8620\nENDCHAR\nSTARTCHAR U_5AB5\nENCODING 23221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE920\nA540\nAFE0\nE200\nAFE0\nA540\nEA20\nAFE0\nA480\nA380\n6C60\nENDCHAR\nSTARTCHAR U_5AB6\nENCODING 23222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27E0\nFA80\n57E0\n5240\n53C0\n5240\n53C0\n2240\n57E0\n8840\nENDCHAR\nSTARTCHAR U_5AB7\nENCODING 23223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4BC0\nE800\nAFE0\nAAA0\nAAC0\nAB20\nA840\n6FE0\n5440\nA2C0\nENDCHAR\nSTARTCHAR U_5AB8\nENCODING 23224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n4FE0\nF100\nAFE0\nA100\nAFE0\nA920\n6FE0\n3100\n4140\n8FE0\nENDCHAR\nSTARTCHAR U_5AB9\nENCODING 23225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n24A0\nFCA0\n5720\n5560\n5000\n57E0\n2520\n37E0\n4D20\n87E0\nENDCHAR\nSTARTCHAR U_5ABA\nENCODING 23226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n5540\nFFE0\nA0A0\nAEA0\nA0A0\nAEC0\n4A40\n6B40\n8AA0\n1120\nENDCHAR\nSTARTCHAR U_5ABB\nENCODING 23227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\nFA60\nAC00\nFBC0\nAA40\n9980\n0A40\nFFE0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_5ABC\nENCODING 23228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n5440\n57C0\n5000\n57C0\n2540\n3540\n4D40\n9FE0\nENDCHAR\nSTARTCHAR U_5ABD\nENCODING 23229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2480\nFFC0\n5480\n57C0\n5480\n57E0\n3020\n2AA0\n4560\n8960\nENDCHAR\nSTARTCHAR U_5ABE\nENCODING 23230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n57E0\n5280\n5FE0\n5540\n27C0\n3540\n4FE0\n84C0\nENDCHAR\nSTARTCHAR U_5ABF\nENCODING 23231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nFD40\n5540\n57C0\n5540\n57C0\n3140\n2BA0\n4520\n88E0\nENDCHAR\nSTARTCHAR U_5AC0\nENCODING 23232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF100\n57C0\n5200\n5FE0\n5540\n2FE0\n3380\n4540\n8920\nENDCHAR\nSTARTCHAR U_5AC1\nENCODING 23233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n57C0\n5220\n5D40\n5280\n35C0\n2AA0\n44A0\n8300\nENDCHAR\nSTARTCHAR U_5AC2\nENCODING 23234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4DE0\nF920\nAF60\nA920\nAFE0\nA100\n6FC0\n3480\n4300\n9CE0\nENDCHAR\nSTARTCHAR U_5AC3\nENCODING 23235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF100\n57C0\n5440\n57C0\n9440\n67C0\n2440\n5FE0\n8440\nENDCHAR\nSTARTCHAR U_5AC4\nENCODING 23236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4880\nFBE0\nAA20\nABE0\nAA20\nABE0\n6880\n39C0\n4AA0\n95A0\nENDCHAR\nSTARTCHAR U_5AC5\nENCODING 23237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n47E0\n4080\nF3C0\n5100\n97E0\n9200\n63E0\n2480\n5480\n8BE0\nENDCHAR\nSTARTCHAR U_5AC6\nENCODING 23238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nFAA0\nA440\nAAA0\nA440\nAFE0\n6440\n3440\n4FC0\n8440\nENDCHAR\nSTARTCHAR U_5AC7\nENCODING 23239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4820\nF7C0\nA440\nA7C0\nA440\nA7C0\n4100\n6FE0\n9280\n0C60\nENDCHAR\nSTARTCHAR U_5AC8\nENCODING 23240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n14A0\n5AC0\n5280\n2980\n4640\nFFE0\n8420\n7FC0\n1900\n0F00\n70E0\nENDCHAR\nSTARTCHAR U_5AC9\nENCODING 23241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\nF500\nADE0\nA680\nAC80\nB7E0\n6480\n3540\n4A20\n9420\nENDCHAR\nSTARTCHAR U_5ACA\nENCODING 23242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF100\n57C0\n5100\n5FE0\n9280\n6540\n3FE0\n4940\n9320\nENDCHAR\nSTARTCHAR U_5ACB\nENCODING 23243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4220\nFEE0\nA880\nAEE0\nA220\nAAA0\n4660\n6BA0\n9220\n0CC0\nENDCHAR\nSTARTCHAR U_5ACC\nENCODING 23244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n4FE0\nF500\nAFC0\nA540\nBFE0\nA540\n4FC0\n3500\n4D40\n9520\nENDCHAR\nSTARTCHAR U_5ACD\nENCODING 23245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2520\nFAA0\n5140\n5260\n5420\n5760\n2420\n3420\n4FE0\n8420\nENDCHAR\nSTARTCHAR U_5ACE\nENCODING 23246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4440\nF280\n5FE0\n9920\n9FE0\n6180\n2240\n5440\n8880\nENDCHAR\nSTARTCHAR U_5ACF\nENCODING 23247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n4EE0\n4AA0\nFEA0\nAAA0\nAEC0\nA8A0\nAAA0\n6BE0\n5C80\n8880\nENDCHAR\nSTARTCHAR U_5AD0\nENCODING 23248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F40\n5540\n5F40\n5540\nFFE0\nA4A0\nBFA0\n4540\n6960\nADA0\nB2A0\nENDCHAR\nSTARTCHAR U_5AD1\nENCODING 23249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n1500\n2480\n7FC0\n1200\n7FC0\n5240\nFFE0\n2100\n1E00\n61C0\nENDCHAR\nSTARTCHAR U_5AD2\nENCODING 23250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4540\nFFE0\nAA20\nAFE0\nA200\nA3C0\n6640\n2980\n5240\n8C20\nENDCHAR\nSTARTCHAR U_5AD3\nENCODING 23251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n47C0\n4480\nFFE0\n5AA0\n9920\n9AA0\n68A0\n2EC0\n5880\n8EE0\nENDCHAR\nSTARTCHAR U_5AD4\nENCODING 23252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF8A0\n5700\n5400\n57E0\n5480\n2480\n3FE0\n4440\n8820\nENDCHAR\nSTARTCHAR U_5AD5\nENCODING 23253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2500\nFDE0\n5680\n57E0\n5540\n57E0\n2140\n36A0\n4A40\n81C0\nENDCHAR\nSTARTCHAR U_5AD6\nENCODING 23254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4280\nFFE0\nAAA0\nAFE0\nA000\nA7C0\n6000\n2FE0\n5540\n8B20\nENDCHAR\nSTARTCHAR U_5AD7\nENCODING 23255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4800\nF9C0\nA940\nA9C0\nA800\nABE0\n4AA0\n2BE0\n5800\n8FE0\nENDCHAR\nSTARTCHAR U_5AD8\nENCODING 23256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4920\nFFE0\nA920\nAFE0\nA280\nA700\n6240\n37E0\n4540\n8B20\nENDCHAR\nSTARTCHAR U_5AD9\nENCODING 23257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n45E0\nFF00\nA9E0\nAEA0\nAA80\nAAE0\n4A80\n7380\n9280\n2660\nENDCHAR\nSTARTCHAR U_5ADA\nENCODING 23258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\nF7C0\nA440\nAFE0\nAAA0\nAAA0\n6FE0\n5440\n8B80\n0C60\nENDCHAR\nSTARTCHAR U_5ADB\nENCODING 23259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\n9160\nFFC0\n9140\nA880\nFD60\n0A00\nFFE0\n1100\n0E00\nF9E0\nENDCHAR\nSTARTCHAR U_5ADC\nENCODING 23260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n5100\n5FE0\n5440\n57C0\n2440\n3FE0\n4900\n8100\nENDCHAR\nSTARTCHAR U_5ADD\nENCODING 23261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nE940\nAFE0\nA940\nAFC0\nA920\n4D40\n3380\n5540\n8B20\nENDCHAR\nSTARTCHAR U_5ADE\nENCODING 23262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF940\nAFE0\nA940\nAFE0\nA920\n4FE0\n2D20\n57E0\nA560\nENDCHAR\nSTARTCHAR U_5ADF\nENCODING 23263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2540\nFFE0\n5540\n57E0\n5500\n55E0\n2720\n35E0\n4C00\n87E0\nENDCHAR\nSTARTCHAR U_5AE0\nENCODING 23264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9E0\n2240\nFD80\n7260\nA800\n7FE0\n4400\n7FE0\n4900\n8700\n3CE0\nENDCHAR\nSTARTCHAR U_5AE1\nENCODING 23265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF280\nAFE0\nA920\nAFE0\nA920\n4BA0\n2AA0\n5BA0\n8860\nENDCHAR\nSTARTCHAR U_5AE2\nENCODING 23266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFC40\n27C0\nFC40\n27C0\n52A0\n84E0\nFFE0\n1100\n0E00\nF9C0\nENDCHAR\nSTARTCHAR U_5AE3\nENCODING 23267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nFDE0\n5500\n57E0\n5200\n53E0\n2200\n37E0\n4AA0\n9560\nENDCHAR\nSTARTCHAR U_5AE4\nENCODING 23268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4FE0\n4440\nF7C0\n5100\n97C0\n9540\n6540\n2FE0\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_5AE5\nENCODING 23269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF540\n57C0\n5540\n57C0\n50A0\n27E0\n3480\n4A80\n8100\nENDCHAR\nSTARTCHAR U_5AE6\nENCODING 23270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\nF820\n57C0\n5440\n57C0\n5100\n6FE0\n2920\n5960\n8100\nENDCHAR\nSTARTCHAR U_5AE7\nENCODING 23271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\nF100\n57C0\n5100\n5FE0\n9440\n67C0\n2440\n57C0\n8820\nENDCHAR\nSTARTCHAR U_5AE8\nENCODING 23272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFC0\n5540\n5FE0\n5100\n57E0\n3100\n2FE0\n5280\n8C60\nENDCHAR\nSTARTCHAR U_5AE9\nENCODING 23273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5F80\nE4E0\n5FA0\nB5A0\nBFA0\nA4A0\n6E40\n5540\n64A0\n8520\nENDCHAR\nSTARTCHAR U_5AEA\nENCODING 23274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\nF660\nAAA0\nA700\nBAE0\nA480\n6120\n3640\n4980\n8600\nENDCHAR\nSTARTCHAR U_5AEB\nENCODING 23275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n57C0\n5440\n57C0\n5440\n2FE0\n3100\n4A80\n8C60\nENDCHAR\nSTARTCHAR U_5AEC\nENCODING 23276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF800\nAA40\nAFE0\nAA40\nABC0\n6800\n2540\n5AA0\n8820\nENDCHAR\nSTARTCHAR U_5AED\nENCODING 23277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n4100\nFFE0\nAA40\nAFE0\nA840\nAFC0\n4AA0\n2FE0\n5880\n9180\nENDCHAR\nSTARTCHAR U_5AEE\nENCODING 23278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4100\nFFE0\nA920\nABA0\nA540\nAFE0\n6200\n27C0\n5040\n8B80\nENDCHAR\nSTARTCHAR U_5AEF\nENCODING 23279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7D00\n11E0\n7F40\n2480\nDD60\n0800\nFFE0\n1100\n0E00\n71C0\nENDCHAR\nSTARTCHAR U_5AF0\nENCODING 23280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2F40\n2440\nFF60\n55A0\n5F40\n5440\n5640\n2DA0\n54A0\n8520\nENDCHAR\nSTARTCHAR U_5AF1\nENCODING 23281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF920\n5540\n5FE0\n5000\n5FE0\n6AA0\n3BA0\n4820\n8FE0\nENDCHAR\nSTARTCHAR U_5AF2\nENCODING 23282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2800\nFA40\n5FE0\n5A40\n5B40\n6EC0\n3B60\n4A40\n9240\nENDCHAR\nSTARTCHAR U_5AF3\nENCODING 23283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\nFDE0\nA740\nF480\nAD40\nA620\n0800\nFFE0\n1200\n0D00\nF0E0\nENDCHAR\nSTARTCHAR U_5AF4\nENCODING 23284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n57C0\n5440\n5FE0\n5280\n2FE0\n3100\n57C0\n8100\nENDCHAR\nSTARTCHAR U_5AF5\nENCODING 23285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n47E0\nFD40\nA540\nAFE0\nA540\nA540\n6FE0\n3540\n4AA0\n8AA0\nENDCHAR\nSTARTCHAR U_5AF6\nENCODING 23286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n47E0\nF480\nAFE0\nA480\nA7E0\nA480\n67E0\n3540\n4AA0\n8AA0\nENDCHAR\nSTARTCHAR U_5AF7\nENCODING 23287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4A80\nFBE0\nAD40\nABE0\nA920\nABE0\nCD20\n29E0\n5920\n8960\nENDCHAR\nSTARTCHAR U_5AF8\nENCODING 23288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF100\n57C0\n5100\n5FE0\n5280\n2FE0\n3440\n47C0\n8440\nENDCHAR\nSTARTCHAR U_5AF9\nENCODING 23289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n47C0\nF280\n5FE0\n5100\n97C0\n5540\n27C0\n3540\n47C0\n8820\nENDCHAR\nSTARTCHAR U_5AFA\nENCODING 23290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\nFEE0\nAAA0\nAEE0\nABA0\nAAA0\n4BA0\n2AA0\n5BA0\n8AE0\nENDCHAR\nSTARTCHAR U_5AFB\nENCODING 23291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\nFEE0\nAAA0\nAEE0\nA920\nAFE0\n4920\n2BA0\n5D60\n8920\nENDCHAR\nSTARTCHAR U_5AFC\nENCODING 23292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2D60\nFBA0\n5FE0\n5100\n67C0\n2100\n57E0\n4D40\n92A0\nENDCHAR\nSTARTCHAR U_5AFD\nENCODING 23293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nFAA0\nA440\nAFE0\nA440\nA7C0\n6440\n57C0\n8D40\n0B20\nENDCHAR\nSTARTCHAR U_5AFE\nENCODING 23294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\nFFE0\n5380\n5D60\n5440\n56E0\n2B40\n35E0\n4C40\n8040\nENDCHAR\nSTARTCHAR U_5AFF\nENCODING 23295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2140\nFFE0\n5140\n57C0\n5100\n5FE0\n5540\n27C0\n5540\n8FE0\nENDCHAR\nSTARTCHAR U_5B00\nENCODING 23296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2E40\n2540\nF780\n5480\n57C0\n5440\n57E0\n2820\n5AA0\n9060\nENDCHAR\nSTARTCHAR U_5B01\nENCODING 23297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EA0\n2B40\nF480\n5BC0\n5020\n57C0\n5440\n27C0\n3440\n4A80\n8FE0\nENDCHAR\nSTARTCHAR U_5B02\nENCODING 23298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4FC0\nEAA0\nBFE0\nA080\nAE80\nAAA0\n6EC0\n2AA0\n5F60\n8220\nENDCHAR\nSTARTCHAR U_5B03\nENCODING 23299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nD440\n27C0\nD440\n27C0\nC280\n0C40\nFFE0\n1100\n0F00\nF8E0\nENDCHAR\nSTARTCHAR U_5B04\nENCODING 23300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n57C0\n5000\n5FE0\n5820\n27C0\n3440\n4A80\n87E0\nENDCHAR\nSTARTCHAR U_5B05\nENCODING 23301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4FE0\nF280\nAFE0\nA540\nAFE0\nA540\n6FE0\n2100\n5FE0\n8100\nENDCHAR\nSTARTCHAR U_5B06\nENCODING 23302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2C60\nF7C0\n5440\n57C0\n5000\n3FE0\n2AA0\n4660\n8AA0\nENDCHAR\nSTARTCHAR U_5B07\nENCODING 23303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF540\n5FE0\n5440\n57C0\n5440\n27C0\n3440\n4FC0\n8C60\nENDCHAR\nSTARTCHAR U_5B08\nENCODING 23304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF100\n5FE0\n5440\n5EE0\n5440\n2FE0\n3280\n4CA0\n8860\nENDCHAR\nSTARTCHAR U_5B09\nENCODING 23305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n5FE0\n5440\n57C0\n5280\n6FE0\n3440\n4FC0\n8440\nENDCHAR\nSTARTCHAR U_5B0A\nENCODING 23306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n6EC0\n2AA0\nEEE0\n0400\n7FC0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_5B0B\nENCODING 23307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\nFFE0\nA920\nAFE0\nA920\nAFE0\n6100\n37E0\n4900\n8100\nENDCHAR\nSTARTCHAR U_5B0C\nENCODING 23308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n5440\n5BA0\n5280\n5FE0\n2AA0\n3BA0\n4820\n8860\nENDCHAR\nSTARTCHAR U_5B0D\nENCODING 23309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n5540\n5F40\nF0E0\n5FA0\n54A0\n9EA0\n6440\n2440\n5EA0\n8120\nENDCHAR\nSTARTCHAR U_5B0E\nENCODING 23310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\n4EC0\n4540\nFFE0\nAA40\nABE0\nAE40\nE440\n55E0\n4A00\n93E0\nENDCHAR\nSTARTCHAR U_5B0F\nENCODING 23311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n4920\nF540\nAFE0\nA540\nA920\nAFE0\nE920\n2FE0\n5920\n8FE0\nENDCHAR\nSTARTCHAR U_5B10\nENCODING 23312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n4440\nFBA0\nA000\nAEE0\nAAA0\nAEE0\n6000\n3440\n4AA0\n9120\nENDCHAR\nSTARTCHAR U_5B11\nENCODING 23313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2440\nFFE0\n5000\n57C0\n9440\n67C0\n2920\n5440\n87C0\nENDCHAR\nSTARTCHAR U_5B12\nENCODING 23314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4280\n4440\nFFE0\nAD60\nABA0\nAFE0\nA440\n67C0\n5440\n87C0\nENDCHAR\nSTARTCHAR U_5B13\nENCODING 23315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4E80\nFAE0\nAEA0\nABA0\nAEA0\nA4A0\n5FA0\n6A40\n92A0\n2520\nENDCHAR\nSTARTCHAR U_5B14\nENCODING 23316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E40\n4B40\nFFE0\n5540\n5540\n55E0\n9F40\n5440\n2DE0\n5520\nA3E0\nENDCHAR\nSTARTCHAR U_5B15\nENCODING 23317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n2FE0\nF100\n57C0\n5100\n9FE0\nE280\n2FE0\n5100\n8100\nENDCHAR\nSTARTCHAR U_5B16\nENCODING 23318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n4940\n7FE0\nA480\n3FE0\n0480\nFFE0\n0900\n0700\n78E0\nENDCHAR\nSTARTCHAR U_5B17\nENCODING 23319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF820\nABA0\nAAA0\nAAA0\nAFE0\n6440\n27C0\n5440\n8FE0\nENDCHAR\nSTARTCHAR U_5B18\nENCODING 23320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n4940\n4BE0\nF100\n52A0\n5D40\n96E0\nE540\n34C0\n4C00\n93E0\nENDCHAR\nSTARTCHAR U_5B19\nENCODING 23321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF540\nABA0\nA100\nAFE0\nAAA0\n6BA0\n2820\n5FE0\n8820\nENDCHAR\nSTARTCHAR U_5B1A\nENCODING 23322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nFA80\nAFE0\nAAA0\nAFE0\nAAA0\n4FE0\n3280\n56C0\nAAA0\nENDCHAR\nSTARTCHAR U_5B1B\nENCODING 23323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFFE0\n5000\n5FE0\n5440\n57C0\n6280\n36A0\n4A40\n8320\nENDCHAR\nSTARTCHAR U_5B1C\nENCODING 23324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7D00\n29E0\nFEA0\n4880\n7940\n4A20\nFFE0\n1100\n0F00\n70C0\nENDCHAR\nSTARTCHAR U_5B1D\nENCODING 23325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4FC0\nF840\nAFC0\nA840\nAFE0\nA220\nBFA0\n6AC0\n5900\n8CE0\nENDCHAR\nSTARTCHAR U_5B1E\nENCODING 23326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFC0\n5100\n5FE0\n5540\n57C0\n5540\n2FE0\n5100\n9FE0\nENDCHAR\nSTARTCHAR U_5B1F\nENCODING 23327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\n2100\nF7C0\n5100\n5FE0\n9540\n6280\n2FE0\n5240\n96A0\nENDCHAR\nSTARTCHAR U_5B20\nENCODING 23328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n4280\nF380\nAEE0\nAAA0\nAEE0\nA100\nAFE0\n6380\n5540\n8920\nENDCHAR\nSTARTCHAR U_5B21\nENCODING 23329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2540\nFFE0\n5520\n52C0\n5620\n53E0\n2240\n3580\n4A40\n8420\nENDCHAR\nSTARTCHAR U_5B22\nENCODING 23330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2440\nF2A0\n57C0\n5280\n9FE0\nE300\n36A0\n5A40\n8320\nENDCHAR\nSTARTCHAR U_5B23\nENCODING 23331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\nF2A0\nAA40\nAFE0\nAAA0\nBFE0\nC000\n2FE0\n5100\n8300\nENDCHAR\nSTARTCHAR U_5B24\nENCODING 23332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nEA40\nAFE0\nAB40\nAEE0\nAA40\n4D40\n6B80\n9440\n27A0\nENDCHAR\nSTARTCHAR U_5B25\nENCODING 23333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\nE660\nAAA0\nA220\nA900\nBFE0\nC900\n2FC0\n5900\n8FE0\nENDCHAR\nSTARTCHAR U_5B26\nENCODING 23334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF100\nAFE0\nA120\nAFC0\nA020\nDFE0\n2AA0\n5EA0\n8060\nENDCHAR\nSTARTCHAR U_5B27\nENCODING 23335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4FC0\nF240\nAFE0\nA240\nAFE0\nA540\nCAA0\n3FE0\n4AA0\n9FE0\nENDCHAR\nSTARTCHAR U_5B28\nENCODING 23336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4FE0\nE440\nA9A0\nBEC0\nAAA0\nAEE0\nE240\n2D20\n5460\n83C0\nENDCHAR\nSTARTCHAR U_5B29\nENCODING 23337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4F40\n4A40\nFFC0\n4940\n5DC0\n9940\nEFE0\n2000\n5440\n8820\nENDCHAR\nSTARTCHAR U_5B2A\nENCODING 23338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF820\nA7C0\nA980\nAFC0\nB440\nC7C0\n2440\n57C0\n8C60\nENDCHAR\nSTARTCHAR U_5B2B\nENCODING 23339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2B60\n2A40\nF5A0\n5000\n5FE0\n9920\n57C0\n2380\n5540\n9920\nENDCHAR\nSTARTCHAR U_5B2C\nENCODING 23340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4100\nEFE0\nAAA0\nA440\nAFE0\nA100\nCFE0\n2AA0\n5AA0\n8860\nENDCHAR\nSTARTCHAR U_5B2D\nENCODING 23341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4540\nF920\nAFE0\nA920\nADA0\nAB60\nCDA0\n6B60\n5DA0\n8860\nENDCHAR\nSTARTCHAR U_5B2E\nENCODING 23342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n54C0\n5CA0\n57E0\n5C80\n5540\n5620\n7FE0\n4480\n8700\n98C0\nENDCHAR\nSTARTCHAR U_5B2F\nENCODING 23343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nE100\nAFE0\nB440\nBFE0\nA2A0\nA440\n5FE0\n4100\n9FE0\nENDCHAR\nSTARTCHAR U_5B30\nENCODING 23344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4A40\n7BC0\n2A80\n4440\nFFE0\n1100\n0F00\nF8E0\nENDCHAR\nSTARTCHAR U_5B31\nENCODING 23345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n3F00\n95E0\n5F40\n3540\nDF40\n4440\nFFE0\n1100\n0E00\n71C0\nENDCHAR\nSTARTCHAR U_5B32\nENCODING 23346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nFBE0\nAEA0\nFBE0\n4A80\nFBE0\n54A0\n54A0\n9B20\n6260\nENDCHAR\nSTARTCHAR U_5B33\nENCODING 23347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n57E0\n5C80\n57E0\n9480\n57E0\n2240\n5180\n8E60\nENDCHAR\nSTARTCHAR U_5B34\nENCODING 23348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n4000\n7FC0\n4080\nFFC0\nA540\nFFC0\nAB40\nE540\nBA60\nENDCHAR\nSTARTCHAR U_5B35\nENCODING 23349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4680\n6500\n4BE0\nFD20\n55E0\n5480\n53E0\n2EA0\n2AA0\n54E0\n9480\nENDCHAR\nSTARTCHAR U_5B36\nENCODING 23350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\nF340\n52C0\n57E0\n5520\n97E0\n5520\n27E0\n5240\n8440\nENDCHAR\nSTARTCHAR U_5B37\nENCODING 23351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nFA40\nAFE0\nAA40\nAFE0\nA940\nEA80\n2D40\n5240\nA3A0\nENDCHAR\nSTARTCHAR U_5B38\nENCODING 23352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFB20\n5540\n5FE0\n5540\n5FE0\n2540\n37C0\n4D40\n87C0\nENDCHAR\nSTARTCHAR U_5B39\nENCODING 23353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4BA0\n4AA0\nEEE0\nABA0\nAEE0\nAAA0\nBFE0\nA000\n4440\nA820\nENDCHAR\nSTARTCHAR U_5B3A\nENCODING 23354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2A40\n2FE0\nF900\n5FC0\n5940\n5FE0\n2140\n5520\n8A40\n0BC0\nENDCHAR\nSTARTCHAR U_5B3B\nENCODING 23355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nFFE0\n5AA0\n5FE0\n9440\nE7C0\n2440\n57C0\n8820\nENDCHAR\nSTARTCHAR U_5B3C\nENCODING 23356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FA0\n56A0\nFCA0\nA5A0\nAAA0\nBFA0\nA4A0\nBFA0\n7520\n4E20\n9F60\nENDCHAR\nSTARTCHAR U_5B3D\nENCODING 23357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F80\n4A80\nEFA0\nB020\nBFE0\nB540\nAFE0\nE100\n3FE0\n5280\n8C60\nENDCHAR\nSTARTCHAR U_5B3E\nENCODING 23358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2EE0\nF540\n5FE0\n5520\n55E0\n5F20\n55E0\n2F20\n55E0\n8720\nENDCHAR\nSTARTCHAR U_5B3F\nENCODING 23359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5FE0\nE480\nA780\nA8A0\nBBC0\nAA80\nDBE0\n2000\n6D40\n92A0\nENDCHAR\nSTARTCHAR U_5B40\nENCODING 23360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFFE0\n5AA0\n55E0\n5F20\n55E0\n2720\n2DE0\n5520\n85E0\nENDCHAR\nSTARTCHAR U_5B41\nENCODING 23361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n8420\n77C0\n5540\n77C0\n0800\nFFE0\n0A00\n75C0\nENDCHAR\nSTARTCHAR U_5B42\nENCODING 23362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\nFAA0\n57C0\n5440\n57C0\n9540\n6480\n27C0\n5540\n8FE0\nENDCHAR\nSTARTCHAR U_5B43\nENCODING 23363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nFAA0\nAEE0\nA280\nAFE0\nA280\nAFE0\n76A0\n4A40\n8320\nENDCHAR\nSTARTCHAR U_5B44\nENCODING 23364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\n4EE0\nFAA0\n5EE0\n5BA0\n9D60\nEFE0\n2920\n5BA0\n8D60\nENDCHAR\nSTARTCHAR U_5B45\nENCODING 23365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AC0\n4AA0\nF580\nBFE0\nAA80\nBBA0\nAAA0\n9B40\n6A40\n5FA0\n8120\nENDCHAR\nSTARTCHAR U_5B46\nENCODING 23366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\n4EE0\nFAA0\n5EE0\n5440\n9AA0\nEFE0\n2480\n5380\n8C60\nENDCHAR\nSTARTCHAR U_5B47\nENCODING 23367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n5FE0\nF540\nBFE0\nA540\nBFE0\nA540\nDFE0\n2440\n5380\n8C60\nENDCHAR\nSTARTCHAR U_5B48\nENCODING 23368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n4920\nFFE0\nA900\nAFE0\nA900\nAFE0\nCAA0\n2FE0\n5AA0\n8BA0\nENDCHAR\nSTARTCHAR U_5B49\nENCODING 23369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n5FE0\n4280\nFEE0\n5AA0\n5AE0\n97E0\nDC80\n27E0\n5480\n87E0\nENDCHAR\nSTARTCHAR U_5B4A\nENCODING 23370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4A40\nFFE0\n5A40\n5BA0\n9EE0\nEA80\n2EE0\n5280\n96E0\nENDCHAR\nSTARTCHAR U_5B4B\nENCODING 23371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4920\nEDA0\nAB60\nAFE0\nAAA0\nAFE0\nECA0\n2FC0\n54A0\nA6E0\nENDCHAR\nSTARTCHAR U_5B4C\nENCODING 23372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E40\n9080\nEEE0\n4040\nBEE0\nAAA0\n5B40\nFFE0\n1100\n0E00\nF9E0\nENDCHAR\nSTARTCHAR U_5B4D\nENCODING 23373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\nFFE0\nAE00\nAA80\nAEE0\nABA0\n6EA0\n2AA0\n5E40\nA2A0\nENDCHAR\nSTARTCHAR U_5B4E\nENCODING 23374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4820\nFFE0\nAD40\nAB80\nAD40\nAFE0\nCAA0\n37A0\n52A0\n8760\nENDCHAR\nSTARTCHAR U_5B4F\nENCODING 23375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4FE0\n4280\nFEE0\n5AA0\n5FE0\n9920\nEFE0\n2D60\n5BA0\n8D60\nENDCHAR\nSTARTCHAR U_5B50\nENCODING 23376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0100\n0200\n0400\n0400\nFFE0\n0400\n0400\n0400\n1400\n0800\nENDCHAR\nSTARTCHAR U_5B51\nENCODING 23377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n0100\n0600\n0420\n04C0\n0F00\nF400\n0400\n0400\n1400\n0800\nENDCHAR\nSTARTCHAR U_5B52\nENCODING 23378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0100\n0200\n0C00\n0800\n0FC0\n0800\n0800\n0800\n2800\n1000\nENDCHAR\nSTARTCHAR U_5B53\nENCODING 23379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0100\n8200\n4C00\n2800\n1800\n0C00\n0B00\n08E0\n2800\n1000\nENDCHAR\nSTARTCHAR U_5B54\nENCODING 23380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n0500\n0900\n1100\n1100\n1D00\nF100\n1120\n1120\n1120\n70E0\nENDCHAR\nSTARTCHAR U_5B55\nENCODING 23381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n1100\n13E0\n2020\n5F20\n82C0\n0400\nFFE0\n0400\n1400\n0800\nENDCHAR\nSTARTCHAR U_5B56\nENCODING 23382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n0820\n1040\n2080\n2080\n3BE0\nE080\n2080\n2080\n2080\n6180\nENDCHAR\nSTARTCHAR U_5B57\nENCODING 23383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n9F40\n0200\n0400\nFFE0\n0400\n0400\n0400\n1C00\nENDCHAR\nSTARTCHAR U_5B58\nENCODING 23384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n1000\n2FC0\n2080\n6100\nBFE0\n2100\n2100\n2100\n2700\nENDCHAR\nSTARTCHAR U_5B59\nENCODING 23385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1100\n2100\n2540\n3540\nE520\n2920\n2920\n2100\n2100\nE700\nENDCHAR\nSTARTCHAR U_5B5A\nENCODING 23386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n7E40\n4840\n2480\n7FC0\n0200\n0400\nFFE0\n0400\n1400\n0800\nENDCHAR\nSTARTCHAR U_5B5B\nENCODING 23387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\nFFE0\n8020\n3F80\n0200\nFFE0\n0400\n1400\n0800\nENDCHAR\nSTARTCHAR U_5B5C\nENCODING 23388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFA00\n0BE0\n3240\n2640\n3A40\nE140\n2080\n2180\nA240\n4420\nENDCHAR\nSTARTCHAR U_5B5D\nENCODING 23389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0420\n3FC0\n0500\nFFE0\n0400\n1F80\n6100\n8200\n7FE0\n0200\n0600\nENDCHAR\nSTARTCHAR U_5B5E\nENCODING 23390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0200\n0400\nFFE0\n0400\n1400\n0800\n4440\nA520\nA120\n1F00\nENDCHAR\nSTARTCHAR U_5B5F\nENCODING 23391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n0100\n0200\n7FE0\n0200\n0A00\n0400\n3FC0\n2940\n2940\n7FE0\nENDCHAR\nSTARTCHAR U_5B60\nENCODING 23392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0020\n7FA0\n2120\n3F20\n0060\n3F00\n0200\nFFE0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_5B61\nENCODING 23393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n0900\n1200\n2440\n37A0\n6000\nA7E0\n2420\n2420\n2420\nE7E0\nENDCHAR\nSTARTCHAR U_5B62\nENCODING 23394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n0BE0\n1420\n23A0\n2AA0\n33A0\nE220\n22C0\n2200\nA220\n61E0\nENDCHAR\nSTARTCHAR U_5B63\nENCODING 23395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0400\nFFE0\n1500\nE4E0\n3F80\n0200\nFFE0\n0400\n0400\n1C00\nENDCHAR\nSTARTCHAR U_5B64\nENCODING 23396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8E0\n1740\n2540\n2D40\n3540\nE540\n2540\n2520\n25A0\nAB60\n5020\nENDCHAR\nSTARTCHAR U_5B65\nENCODING 23397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nFA40\n4980\n3640\nC820\n1F80\n0100\nFFE0\n0200\n0A00\n0400\nENDCHAR\nSTARTCHAR U_5B66\nENCODING 23398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n1280\n7FE0\n4020\n1F80\n0100\n0200\n7FE0\n0200\n0200\n0E00\nENDCHAR\nSTARTCHAR U_5B67\nENCODING 23399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n47E0\nF120\n2220\n52A0\nE440\n3F00\n0200\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_5B68\nENCODING 23400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F00\n0200\nFFE0\n0400\n1400\n0C00\n7BC0\n0840\n3BE0\nD080\n3180\nENDCHAR\nSTARTCHAR U_5B69\nENCODING 23401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n17E0\n2100\n2240\n3780\nE120\n2240\n2480\n2140\nA220\n4C20\nENDCHAR\nSTARTCHAR U_5B6A\nENCODING 23402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2A80\n4A40\n8020\n3F80\n0200\nFFE0\n0400\n0400\n0C00\nENDCHAR\nSTARTCHAR U_5B6B\nENCODING 23403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nFB00\n1100\n2240\n2780\n3140\nE7A0\n2080\n22C0\nA4A0\n4180\nENDCHAR\nSTARTCHAR U_5B6C\nENCODING 23404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0200\n0EC0\n7220\n23C0\nF840\n2880\n4FE0\n5080\n2A80\nC580\nENDCHAR\nSTARTCHAR U_5B6D\nENCODING 23405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7BE0\n0A20\n13E0\n1220\n3BE0\nD220\n13E0\n1000\n1240\n3420\nENDCHAR\nSTARTCHAR U_5B6E\nENCODING 23406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1FE0\n2820\n27C0\n3000\n6FE0\nA100\n2540\n2920\nB120\n4300\nENDCHAR\nSTARTCHAR U_5B6F\nENCODING 23407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n5240\n7940\n4880\n7B60\n0000\n7F80\n0200\nFFE0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_5B70\nENCODING 23408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFD00\n4BC0\n7940\n0140\n7F40\n09C0\n1140\n7A40\n1420\n7820\nENDCHAR\nSTARTCHAR U_5B71\nENCODING 23409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2100\n3FE0\n2100\n3EE0\n2440\n5FE0\n4440\n9CC0\nENDCHAR\nSTARTCHAR U_5B72\nENCODING 23410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1280\n2280\n2EE0\n2820\n3820\nE820\n2EE0\n2280\nA280\n6FE0\nENDCHAR\nSTARTCHAR U_5B73\nENCODING 23411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n2940\nF780\n4A40\nFFA0\n0100\nFFE0\n0400\n1400\n0800\nENDCHAR\nSTARTCHAR U_5B74\nENCODING 23412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0200\nFFE0\n1040\nFBE0\n2080\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_5B75\nENCODING 23413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\nCD00\n8A80\nAB20\nEEA0\nABE0\nEA40\nAEE0\n2840\n4840\n88C0\nENDCHAR\nSTARTCHAR U_5B76\nENCODING 23414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n2A80\n1140\n7FC0\n0000\n3F80\n0200\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_5B77\nENCODING 23415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBE0\n2540\nFC80\n7140\nAA20\n7FE0\n4200\n5FC0\n4200\n8600\nENDCHAR\nSTARTCHAR U_5B78\nENCODING 23416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6AC0\n4440\n6AC0\n4440\nFFE0\n8020\n3F00\n0200\nFFE0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_5B79\nENCODING 23417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4FC0\n7A80\n47C0\n7900\nA900\n3F80\n0200\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_5B7A\nENCODING 23418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n1100\n2FE0\n2920\n3AA0\n6FE0\nA100\n2FE0\n2AA0\nAAA0\n6860\nENDCHAR\nSTARTCHAR U_5B7B\nENCODING 23419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n17C0\n2140\n27E0\n3140\n6FE0\nA540\n2AA0\n2FE0\nAAA0\n7FE0\nENDCHAR\nSTARTCHAR U_5B7C\nENCODING 23420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\nFBC0\n5280\nFFE0\n4900\n7900\n1F80\n0200\nFFC0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_5B7D\nENCODING 23421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n2080\n7BE0\n4940\n7BE0\n4880\n7FC0\n0100\nFFE0\n0200\n0E00\nENDCHAR\nSTARTCHAR U_5B7E\nENCODING 23422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\n2AA0\n2EE0\n4AA0\n4EE0\n6440\nCAA0\n5FE0\n4480\n4380\nCC60\nENDCHAR\nSTARTCHAR U_5B7F\nENCODING 23423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FA0\nA0C0\n4E40\nE0E0\n4F40\nAAA0\n3F80\n0200\nFFE0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_5B80\nENCODING 23424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n7FE0\n4040\n8080\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_5B81\nENCODING 23425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4020\n0000\n7FE0\n0200\n0200\n0200\n0200\n0200\n0E00\nENDCHAR\nSTARTCHAR U_5B82\nENCODING 23426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\n7FE0\n4040\n9E80\n1200\n1200\n2200\n2200\n4240\n81C0\nENDCHAR\nSTARTCHAR U_5B83\nENCODING 23427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n9040\n1000\n1380\n1C00\n1000\n1020\n1020\n0FE0\nENDCHAR\nSTARTCHAR U_5B84\nENCODING 23428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n0800\n7F00\n0900\n0900\n0900\n1120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_5B85\nENCODING 23429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n8340\n3C00\n0400\n07C0\n7C00\n0420\n0420\n03E0\nENDCHAR\nSTARTCHAR U_5B86\nENCODING 23430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7FE0\n4040\nBF80\n0080\n3F80\n2000\n3FC0\n0040\n02C0\n0100\nENDCHAR\nSTARTCHAR U_5B87\nENCODING 23431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n9F80\n0200\n0200\n7FE0\n0200\n0200\n0A00\n0400\nENDCHAR\nSTARTCHAR U_5B88\nENCODING 23432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n7FE0\n4040\n8200\n7FC0\n0200\n2200\n1200\n0200\n0E00\nENDCHAR\nSTARTCHAR U_5B89\nENCODING 23433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n8840\n0800\nFFE0\n1100\n3100\n0E00\n0980\n7060\nENDCHAR\nSTARTCHAR U_5B8A\nENCODING 23434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n8540\n0480\n7FC0\n0400\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_5B8B\nENCODING 23435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n8440\n0400\nFFE0\n0E00\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_5B8C\nENCODING 23436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n9F40\n0000\n7FE0\n0A00\n1200\n1220\n2220\n41E0\nENDCHAR\nSTARTCHAR U_5B8D\nENCODING 23437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n8840\n0400\nFFE0\n0000\n0900\n1080\n2040\nC040\nENDCHAR\nSTARTCHAR U_5B8E\nENCODING 23438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n8340\n3C00\n0400\nFFE0\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_5B8F\nENCODING 23439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4420\n8440\n7FE0\n0800\n0A00\n1200\n2480\n4860\n1FA0\nENDCHAR\nSTARTCHAR U_5B90\nENCODING 23440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n8820\n0F80\n1080\n2900\n2500\n0100\n0200\nFFE0\nENDCHAR\nSTARTCHAR U_5B91\nENCODING 23441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n1100\n7FC0\n1100\n1100\nFFE0\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_5B92\nENCODING 23442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n87A0\n3C00\n0780\n7C00\n07C0\nFC20\n0420\n03E0\nENDCHAR\nSTARTCHAR U_5B93\nENCODING 23443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8820\n84A0\n1480\n5100\n5240\n5420\n98A0\n3080\nCF80\nENDCHAR\nSTARTCHAR U_5B94\nENCODING 23444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n0400\n7FC0\n0400\n0400\n7FC0\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5B95\nENCODING 23445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n8040\n7FE0\n0800\n1FC0\n3040\n5040\n1FC0\n1040\nENDCHAR\nSTARTCHAR U_5B96\nENCODING 23446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n7880\n0880\n7880\n4100\n7900\n0A40\n0FE0\n3020\nENDCHAR\nSTARTCHAR U_5B97\nENCODING 23447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4020\n9F80\n0000\n7FE0\n0200\n2280\n2240\n4A40\n0400\nENDCHAR\nSTARTCHAR U_5B98\nENCODING 23448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n9FC0\n1080\n1F80\n1000\n1FC0\n1040\n1FC0\n1040\nENDCHAR\nSTARTCHAR U_5B99\nENCODING 23449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4440\n8400\n3FC0\n2440\n3FC0\n2440\n2440\n3FC0\n2040\nENDCHAR\nSTARTCHAR U_5B9A\nENCODING 23450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n8040\n3FC0\n0400\n2400\n2780\n2400\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_5B9B\nENCODING 23451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\nA040\n3FC0\n2A40\n6A40\n1AC0\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_5B9C\nENCODING 23452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n9FC0\n1080\n1F80\n1080\n1F80\n1080\n1080\n7FE0\nENDCHAR\nSTARTCHAR U_5B9D\nENCODING 23453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\nFFE0\n8020\n3F80\n0400\n0400\n3F80\n0500\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_5B9E\nENCODING 23454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5020\n8A40\n2200\n1200\n7FE0\n0200\n0500\n0880\n7060\nENDCHAR\nSTARTCHAR U_5B9F\nENCODING 23455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8420\n3F80\n0400\n3F80\n0400\n7FC0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_5BA0\nENCODING 23456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8A20\n0900\nFFE0\n0A00\n1240\n1280\n2320\n4620\n99E0\nENDCHAR\nSTARTCHAR U_5BA1\nENCODING 23457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8420\n7FC0\n4440\n7FC0\n4440\n7FC0\n4440\n0400\n0400\nENDCHAR\nSTARTCHAR U_5BA2\nENCODING 23458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4820\n1F80\n2900\n4600\n1980\n7FE0\n1080\n1080\n1F80\nENDCHAR\nSTARTCHAR U_5BA3\nENCODING 23459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n3F80\n0000\n3F80\n2080\n3F80\n2080\n3F80\nFFE0\nENDCHAR\nSTARTCHAR U_5BA4\nENCODING 23460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\nBFA0\n0800\n1100\n3E80\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5BA5\nENCODING 23461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8820\n7FC0\n1000\n3F80\n5080\n9F80\n1080\n1F80\n1180\nENDCHAR\nSTARTCHAR U_5BA6\nENCODING 23462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4040\nBF80\n2200\n3F80\n2080\n3F80\n2200\n2200\n3FC0\nENDCHAR\nSTARTCHAR U_5BA7\nENCODING 23463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\nBFA0\n2200\n2F80\n2880\n2F80\n2200\n2200\n3FC0\nENDCHAR\nSTARTCHAR U_5BA8\nENCODING 23464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8A20\n2A40\n1A80\n0A00\n1B00\n6AC0\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_5BA9\nENCODING 23465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8420\nA520\n1600\nFFE0\n0E00\n1500\n6480\n8460\n0400\nENDCHAR\nSTARTCHAR U_5BAA\nENCODING 23466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4020\n1200\n1F80\n2200\n7FE0\n0900\n0900\n1120\n60E0\nENDCHAR\nSTARTCHAR U_5BAB\nENCODING 23467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n1F80\n1080\n1F80\n0000\n3FC0\n2040\n3FC0\n2040\nENDCHAR\nSTARTCHAR U_5BAC\nENCODING 23468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n42A0\n3FE0\n2200\n3A40\n2A40\n2A80\n2920\n52A0\n8460\nENDCHAR\nSTARTCHAR U_5BAD\nENCODING 23469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n3F80\n0880\n7FE0\n0880\n7FC0\n3040\n5FC0\n9040\nENDCHAR\nSTARTCHAR U_5BAE\nENCODING 23470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4040\n9F80\n1080\n1F80\n0400\n3FC0\n2040\n3FC0\n2040\nENDCHAR\nSTARTCHAR U_5BAF\nENCODING 23471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8420\n1F40\n0480\nFFE0\n0900\n3200\nCFC0\n0200\n0E00\nENDCHAR\nSTARTCHAR U_5BB0\nENCODING 23472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8420\n3F80\n1100\n0A00\nFFE0\n0400\n3FC0\n0400\n0400\nENDCHAR\nSTARTCHAR U_5BB1\nENCODING 23473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2200\n67C0\nAA00\n23C0\n2200\n23C0\n2200\n2200\nENDCHAR\nSTARTCHAR U_5BB2\nENCODING 23474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4040\n1F00\n1100\n1F00\n0400\nFFE0\n0E00\n1500\n64C0\nENDCHAR\nSTARTCHAR U_5BB3\nENCODING 23475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8420\nBFA0\n0400\n3F80\n0400\nFFE0\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_5BB4\nENCODING 23476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n50A0\n5FA0\n1080\n1F80\n0400\n7FE0\n1100\n0F00\n78E0\nENDCHAR\nSTARTCHAR U_5BB5\nENCODING 23477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA4A0\n1500\n3F80\n2080\n3F80\n2080\n3F80\n2080\n2180\nENDCHAR\nSTARTCHAR U_5BB6\nENCODING 23478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\nBFA0\n1440\n2A80\n1300\n6E80\n1240\n6220\n0C00\nENDCHAR\nSTARTCHAR U_5BB7\nENCODING 23479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n81A0\n3E00\n2480\n1500\nFFE0\n0E00\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_5BB8\nENCODING 23480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\nBFA0\n2000\n2F80\n2000\n3FE0\n2940\n4880\n8C60\nENDCHAR\nSTARTCHAR U_5BB9\nENCODING 23481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2480\n4A40\n1100\n2080\nDF60\n1100\n1100\n1F00\nENDCHAR\nSTARTCHAR U_5BBA\nENCODING 23482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n3F80\n2080\n3F80\n0000\nFFE0\n1500\n2520\n45E0\nENDCHAR\nSTARTCHAR U_5BBB\nENCODING 23483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n3F80\n4A40\n2480\n1B00\nE0E0\n0400\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5BBC\nENCODING 23484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n7200\n07C0\nFA80\n5480\n5280\n5120\n52A0\n8FE0\nENDCHAR\nSTARTCHAR U_5BBD\nENCODING 23485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n7FC0\n1100\n3F80\n2480\n2480\n2AA0\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_5BBE\nENCODING 23486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n80A0\n9F20\n1000\n1FC0\n1100\n1100\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_5BBF\nENCODING 23487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9020\n1FC0\n2100\n67C0\nA440\n27C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_5BC0\nENCODING 23488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n80A0\nFF20\n2480\n1500\nFFE0\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_5BC1\nENCODING 23489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4220\n3FC0\n0280\n7FE0\n0280\n1FC0\n1200\n2A00\n47E0\nENDCHAR\nSTARTCHAR U_5BC2\nENCODING 23490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9020\n1DC0\n1140\nFF40\n1140\n3940\n5480\n9140\n3620\nENDCHAR\nSTARTCHAR U_5BC3\nENCODING 23491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n5020\n9E40\n2200\n7F80\n2480\n3F80\n0A80\n1220\nE3E0\nENDCHAR\nSTARTCHAR U_5BC4\nENCODING 23492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8420\nBFA0\n1100\nFFE0\n0080\n3C80\n2480\n3C80\n0380\nENDCHAR\nSTARTCHAR U_5BC5\nENCODING 23493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\nBFA0\n0400\n3F80\n2480\n3F80\n2480\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_5BC6\nENCODING 23494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n88A0\n5500\n9240\n14A0\nEFA0\n0400\n2480\n2480\n3F80\nENDCHAR\nSTARTCHAR U_5BC7\nENCODING 23495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8120\n39C0\n0100\n7FC0\n2940\n2880\n2960\n4A20\n87E0\nENDCHAR\nSTARTCHAR U_5BC8\nENCODING 23496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8420\n3F80\n0400\nFFE0\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_5BC9\nENCODING 23497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n9220\nBFC0\n6200\nBFC0\n2200\n3FC0\n2200\n3FE0\n2000\nENDCHAR\nSTARTCHAR U_5BCA\nENCODING 23498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8420\n07C0\n0400\n3F80\n2080\n3F80\n2080\n3F80\nC060\nENDCHAR\nSTARTCHAR U_5BCB\nENCODING 23499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8920\nBFA0\n0900\n7FE0\n1880\n2F40\n4B20\n0840\n07C0\nENDCHAR\nSTARTCHAR U_5BCC\nENCODING 23500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n3F80\n1F00\n1100\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5BCD\nENCODING 23501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n94A0\n5240\n9040\n0F80\n0000\n7FC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_5BCE\nENCODING 23502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\n8020\nABE0\n2880\n7BE0\n0AA0\nFAA0\n2B60\n4A20\n8A60\nENDCHAR\nSTARTCHAR U_5BCF\nENCODING 23503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8820\n1F00\n2200\nFFC0\n5140\n64C0\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_5BD0\nENCODING 23504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\nD120\n57C0\n7100\n1FE0\nF100\n5380\n5540\n9920\nENDCHAR\nSTARTCHAR U_5BD1\nENCODING 23505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\n8020\n97A0\n2080\n2780\n6080\nAFE0\n2AA0\n2100\n2EE0\nENDCHAR\nSTARTCHAR U_5BD2\nENCODING 23506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8920\nBFA0\n0900\nFFE0\n0900\n1480\nE360\n0C00\n0300\nENDCHAR\nSTARTCHAR U_5BD3\nENCODING 23507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\nBFA0\n2480\n3F80\n2480\n7FC0\n4540\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_5BD4\nENCODING 23508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n90A0\n90A0\n1F80\n1080\nFFE0\n1200\n13C0\n2A00\nC7E0\nENDCHAR\nSTARTCHAR U_5BD5\nENCODING 23509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n7FC0\n0800\n7FC0\n4A40\nFFE0\n0400\n0400\n0C00\nENDCHAR\nSTARTCHAR U_5BD6\nENCODING 23510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\n80A0\n2780\n1080\n9F80\n6080\n3FE0\nD4A0\n4300\n4C60\nENDCHAR\nSTARTCHAR U_5BD7\nENCODING 23511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9220\n54C0\n3FA0\nE480\n3F80\n2480\nFFE0\n2080\n2180\nENDCHAR\nSTARTCHAR U_5BD8\nENCODING 23512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4420\n3FC0\n1080\n1E80\n1780\n1080\n7FE0\n0900\n70E0\nENDCHAR\nSTARTCHAR U_5BD9\nENCODING 23513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n89E0\n7700\n5540\n5540\n5540\n5520\n9DE0\nA240\nENDCHAR\nSTARTCHAR U_5BDA\nENCODING 23514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n3F80\n0400\n7FC0\n2000\n3FC0\nC400\n2440\n7FC0\nENDCHAR\nSTARTCHAR U_5BDB\nENCODING 23515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n5240\nBF80\n1200\n3F80\n2080\n3F80\n2A80\n0A20\n71E0\nENDCHAR\nSTARTCHAR U_5BDC\nENCODING 23516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4440\n9100\n5F40\n0000\n3F80\n2A80\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_5BDD\nENCODING 23517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n97A0\n5080\n3780\n1080\n3FE0\nDAA0\n1100\n1EE0\nENDCHAR\nSTARTCHAR U_5BDE\nENCODING 23518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\nFFE0\n2080\n3F80\n2080\nFFE0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_5BDF\nENCODING 23519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA220\nBDE0\n6940\n5080\n2F40\nC020\n7FC0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_5BE0\nENCODING 23520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA4A0\nFFE0\n2480\n7FC0\n4440\nFFE0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_5BE1\nENCODING 23521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4420\n1F80\n1080\n1F80\n1080\n7FE0\n2540\n4920\n3300\nENDCHAR\nSTARTCHAR U_5BE2\nENCODING 23522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n90A0\n5780\n5080\n7780\n1000\nFFE0\n5AA0\n5100\n9EE0\nENDCHAR\nSTARTCHAR U_5BE3\nENCODING 23523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n5FE0\n5000\n77C0\n1000\nF7C0\n5440\n57C0\n9440\nENDCHAR\nSTARTCHAR U_5BE4\nENCODING 23524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n57C0\n5100\n77C0\n1240\nFFE0\n5440\n5440\n97C0\nENDCHAR\nSTARTCHAR U_5BE5\nENCODING 23525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nAAA0\n99A0\n2A80\n0E00\nF5E0\n1900\n0600\n0180\n1E00\nENDCHAR\nSTARTCHAR U_5BE6\nENCODING 23526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9520\n7FC0\n2A00\n3F80\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_5BE7\nENCODING 23527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\n8420\n32C0\n5FA0\n0000\n3F80\n2A80\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_5BE8\nENCODING 23528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n3F80\n1100\nFFE0\n2480\n5F40\n8420\n2480\n4C40\nENDCHAR\nSTARTCHAR U_5BE9\nENCODING 23529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA4A0\n1500\nFFE0\n1500\n7FC0\nA4A0\n3F80\n2480\n3F80\nENDCHAR\nSTARTCHAR U_5BEA\nENCODING 23530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA8A0\n1500\n3F80\n2080\n3FC0\n2040\n3FE0\n5520\nAA60\nENDCHAR\nSTARTCHAR U_5BEB\nENCODING 23531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8820\nB3A0\n2080\n3B80\n2080\n3FE0\nD520\n2AA0\n4AC0\nENDCHAR\nSTARTCHAR U_5BEC\nENCODING 23532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n7FC0\n1100\n3F80\n2080\n3F80\n20E0\n3FA0\nE0E0\nENDCHAR\nSTARTCHAR U_5BED\nENCODING 23533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4440\nBF80\n0400\n3F80\n24A0\nFFE0\n0400\n5140\n8F20\nENDCHAR\nSTARTCHAR U_5BEE\nENCODING 23534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8420\nFFE0\n5240\n3F80\nE0E0\n3F80\n1500\n2480\nCC60\nENDCHAR\nSTARTCHAR U_5BEF\nENCODING 23535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA220\n3FC0\n6200\nBFE0\n2200\n7BC0\n4A40\n4E40\n40C0\nENDCHAR\nSTARTCHAR U_5BF0\nENCODING 23536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n3F80\n2A80\nFFE0\n2080\n3F80\n1280\nF100\n18E0\nENDCHAR\nSTARTCHAR U_5BF1\nENCODING 23537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8120\n57C0\n5440\n77C0\n1440\nFFE0\n5380\n5540\n9920\nENDCHAR\nSTARTCHAR U_5BF2\nENCODING 23538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\nA820\nB7E0\n3D40\n03E0\n7CA0\n1280\n7EE0\n2A80\nC5E0\nENDCHAR\nSTARTCHAR U_5BF3\nENCODING 23539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8220\n7BC0\n1540\n7B80\n1540\n3F80\n2080\n3F80\n60C0\nENDCHAR\nSTARTCHAR U_5BF4\nENCODING 23540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n9020\n7DE0\n2920\n7FE0\n1120\n7DE0\n10C0\n5540\nB260\nENDCHAR\nSTARTCHAR U_5BF5\nENCODING 23541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n93A0\n7A00\n2BC0\nFC40\n4BC0\n7A00\n4BC0\n7A20\n59E0\nENDCHAR\nSTARTCHAR U_5BF6\nENCODING 23542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA520\n77C0\n2540\nFFC0\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_5BF7\nENCODING 23543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9520\n5540\n7FC0\n5540\nFFE0\n2080\n3F80\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_5BF8\nENCODING 23544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\n0100\n7FE0\n0100\n1100\n0900\n0100\n0100\n0100\n0700\nENDCHAR\nSTARTCHAR U_5BF9\nENCODING 23545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF080\n1FE0\n9080\n5080\n2480\n2280\n5080\n5080\n8280\n0100\nENDCHAR\nSTARTCHAR U_5BFA\nENCODING 23546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n0400\nFFE0\n0100\nFFE0\n2100\n1100\n0500\n0200\nENDCHAR\nSTARTCHAR U_5BFB\nENCODING 23547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0080\n3F80\n0080\n7F80\n0100\nFFE0\n2100\n1100\n0500\n0200\nENDCHAR\nSTARTCHAR U_5BFC\nENCODING 23548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3FA0\n2020\n1FE0\n0100\nFFE0\n1100\n0900\n0900\n0300\nENDCHAR\nSTARTCHAR U_5BFD\nENCODING 23549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n7C00\n4840\n2480\n1500\n0080\nFFE0\n2080\n1080\n1280\n0100\nENDCHAR\nSTARTCHAR U_5BFE\nENCODING 23550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2040\nFBE0\n1040\n9240\n5140\n2140\n2040\n5040\n4940\n8880\nENDCHAR\nSTARTCHAR U_5BFF\nENCODING 23551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n0400\n3FC0\n0800\nFFE0\n1080\n3FE0\n4880\n0480\n0180\nENDCHAR\nSTARTCHAR U_5C00\nENCODING 23552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\nFC40\n83E0\nB840\nAA40\nA940\nB940\nA840\n8040\nFD40\n0080\nENDCHAR\nSTARTCHAR U_5C01\nENCODING 23553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\n7C40\n1040\n13E0\nFC40\n1240\n7D40\n1040\n1040\n1C40\nE1C0\nENDCHAR\nSTARTCHAR U_5C02\nENCODING 23554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n3F80\n2480\n3F80\n0100\nFFE0\n2100\n1100\n1300\nENDCHAR\nSTARTCHAR U_5C03\nENCODING 23555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n7FE0\n2440\n3FC0\n2440\n3FC0\n2440\n2080\n7FE0\n2080\n1380\nENDCHAR\nSTARTCHAR U_5C04\nENCODING 23556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n7C40\n4440\n7FE0\n4440\n7E40\n4540\nFC40\n2440\n4440\n8CC0\nENDCHAR\nSTARTCHAR U_5C05\nENCODING 23557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\n7C40\n13E0\n7C40\n4540\n7D40\n2840\n2940\n2880\n4820\n87C0\nENDCHAR\nSTARTCHAR U_5C06\nENCODING 23558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nA480\n6B00\n2280\n2480\n6FE0\nA480\n2280\n2080\n2180\nENDCHAR\nSTARTCHAR U_5C07\nENCODING 23559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n53E0\n5540\n5280\nF140\n1240\nFFE0\n5240\n5140\n5040\n91C0\nENDCHAR\nSTARTCHAR U_5C08\nENCODING 23560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n2480\n3F80\n2480\n7F80\n0540\nFFE0\n1100\n0900\n0300\nENDCHAR\nSTARTCHAR U_5C09\nENCODING 23561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E40\n4240\n7E40\n41E0\n5C40\n4140\n7EC0\n4840\n5C40\nEA40\n99C0\nENDCHAR\nSTARTCHAR U_5C0A\nENCODING 23562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0A00\n3FC0\n2A40\n35C0\n3FC0\n0100\nFFE0\n1100\n0700\nENDCHAR\nSTARTCHAR U_5C0B\nENCODING 23563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0080\n3F80\n0080\nFFC0\n2240\nFBC0\n0100\nFFE0\n2100\n1700\nENDCHAR\nSTARTCHAR U_5C0C\nENCODING 23564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFC40\n2040\nFBE0\n0040\nFA40\n8940\nF940\n8840\n5140\nFC80\nENDCHAR\nSTARTCHAR U_5C0D\nENCODING 23565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2840\nAA40\n6C40\nFFE0\n2840\n7D40\n10C0\n7C40\n1040\n1D40\nE080\nENDCHAR\nSTARTCHAR U_5C0E\nENCODING 23566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8480\n5FE0\n0840\nCF40\n4BC0\n4840\nBFE0\n0080\nFFE0\n1080\n0980\nENDCHAR\nSTARTCHAR U_5C0F\nENCODING 23567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0400\n2480\n2440\n4440\n4420\n8420\n0400\n1400\n0800\nENDCHAR\nSTARTCHAR U_5C10\nENCODING 23568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n2480\n4440\n8420\n0400\n2400\n5000\n0800\n0600\n01E0\nENDCHAR\nSTARTCHAR U_5C11\nENCODING 23569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n1480\n1440\n2420\n4480\n0500\n0200\n0400\n1800\nE000\nENDCHAR\nSTARTCHAR U_5C12\nENCODING 23570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1100\n2480\nC460\n0500\n2480\n2480\n4440\n9440\n0800\nENDCHAR\nSTARTCHAR U_5C13\nENCODING 23571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n3FE0\n4400\n8400\n1500\n2480\n4440\n8440\n1400\n0800\nENDCHAR\nSTARTCHAR U_5C14\nENCODING 23572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2020\n4240\n0200\n1280\n1240\n2240\n2220\n4220\n0E00\nENDCHAR\nSTARTCHAR U_5C15\nENCODING 23573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF80\n1100\n13E0\n2020\n44C0\n8400\n2480\n2440\n4420\n9420\n0800\nENDCHAR\nSTARTCHAR U_5C16\nENCODING 23574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1500\n2480\n4440\n8020\n0400\nFFE0\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_5C17\nENCODING 23575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0780\n0400\n0400\nFFE0\n0400\n2500\n2480\n4440\n9440\n0800\nENDCHAR\nSTARTCHAR U_5C18\nENCODING 23576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n2480\n2440\n4420\n8000\n0400\n7FC0\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5C19\nENCODING 23577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2480\n4440\n8420\n7FC0\n4040\n5F40\n5140\n5F40\n4040\n40C0\nENDCHAR\nSTARTCHAR U_5C1A\nENCODING 23578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2480\n1500\nFFE0\n8020\n9F20\n9120\n9120\n9F20\n8020\n80E0\nENDCHAR\nSTARTCHAR U_5C1B\nENCODING 23579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1500\n2480\n4440\n0400\n1080\n1080\n5AC0\n94A0\n1080\n3180\nENDCHAR\nSTARTCHAR U_5C1C\nENCODING 23580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2480\n4440\n8020\n0400\nFFE0\n1500\nE4E0\n1500\n2480\nCC60\nENDCHAR\nSTARTCHAR U_5C1D\nENCODING 23581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2480\n0400\nFFE0\n8020\n3F80\n0000\nFFE0\n1000\n2080\n7FC0\nENDCHAR\nSTARTCHAR U_5C1E\nENCODING 23582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2A80\n1F00\n3180\nDF60\n1100\n1F00\n0400\n2480\n4C40\nENDCHAR\nSTARTCHAR U_5C1F\nENCODING 23583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n4480\n7DC0\n46A0\n7CA0\n0080\nFCA0\n5040\n5D80\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_5C20\nENCODING 23584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\nFC80\n4880\n79C0\n49A0\n7A80\n48A0\nFCA0\n5840\n6480\n7F00\nENDCHAR\nSTARTCHAR U_5C21\nENCODING 23585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nAA20\n73E0\n2220\nFBE0\n5280\n53A0\n52C0\n5280\n9AA0\n9360\nENDCHAR\nSTARTCHAR U_5C22\nENCODING 23586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\n0800\nFFE0\n0A00\n0A00\n0A00\n1200\n1220\n2220\n41E0\nENDCHAR\nSTARTCHAR U_5C23\nENCODING 23587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1200\n2100\n4080\n9240\n1200\n1200\n1200\n2220\n4220\n81E0\nENDCHAR\nSTARTCHAR U_5C24\nENCODING 23588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n0880\n0800\nFFE0\n0A00\n0A00\n1200\n1200\n2220\n4220\n81E0\nENDCHAR\nSTARTCHAR U_5C25\nENCODING 23589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nFC40\n2040\n2A40\n2940\n2940\n2840\n28E0\n4820\n87E0\nENDCHAR\nSTARTCHAR U_5C26\nENCODING 23590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n2500\n43C0\nAC40\n2A40\n2940\n2840\n2940\n48A0\n4820\n87E0\nENDCHAR\nSTARTCHAR U_5C27\nENCODING 23591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\nFD00\n0A40\n0C40\n73C0\n0000\nFFE0\n1200\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_5C28\nENCODING 23592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n0840\nFFE0\n0A00\n0B40\n16A0\n1340\n1680\n2320\n4620\n81E0\nENDCHAR\nSTARTCHAR U_5C29\nENCODING 23593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n27C0\n4500\nA900\n2BC0\n2900\n2900\n2FC0\n2800\n4820\n87E0\nENDCHAR\nSTARTCHAR U_5C2A\nENCODING 23594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4100\nF900\n57C0\n5100\n5100\n5100\n5FE0\n5020\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_5C2B\nENCODING 23595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC00\n57C0\n5100\n5100\n57C0\n5100\n5100\n57E0\n5000\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_5C2C\nENCODING 23596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4180\n4240\nFC20\n5280\n5280\n5280\n5280\n5280\n54A0\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_5C2D\nENCODING 23597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n2080\nFFE0\n2080\n7FC0\n1200\n1200\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_5C2E\nENCODING 23598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F80\n4480\nFCC0\n5440\n58C0\n5100\n5FE0\n5540\n5920\n5120\n8FE0\nENDCHAR\nSTARTCHAR U_5C2F\nENCODING 23599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n4480\nFFE0\n5400\n55C0\n5540\n55C0\n5520\n59E0\n5020\n8FE0\nENDCHAR\nSTARTCHAR U_5C30\nENCODING 23600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4100\nFFE0\n5540\n57C0\n5540\n57C0\n5100\n57C0\n9120\n8FE0\nENDCHAR\nSTARTCHAR U_5C31\nENCODING 23601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFD40\n0120\n7FE0\n4A80\n7A80\n1280\n5AA0\n56A0\n92A0\n3460\nENDCHAR\nSTARTCHAR U_5C32\nENCODING 23602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n5FC0\n4500\nFFC0\n5540\n5FE0\n5540\n5FC0\n55A0\n5D60\n8FE0\nENDCHAR\nSTARTCHAR U_5C33\nENCODING 23603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2640\nF540\n5FE0\n5A20\n53C0\n5240\n53C0\n5240\n9260\n8FE0\nENDCHAR\nSTARTCHAR U_5C34\nENCODING 23604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4AE0\nFB80\n4A40\nA200\nA000\nAFE0\nAAA0\nBFE0\nA020\n9FE0\nENDCHAR\nSTARTCHAR U_5C35\nENCODING 23605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\nF540\n5FE0\n5000\n57C0\n5540\n57C0\n5280\n5440\n8FE0\nENDCHAR\nSTARTCHAR U_5C36\nENCODING 23606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n5560\n57C0\n54A0\n57A0\n5520\n57E0\n5540\n5FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_5C37\nENCODING 23607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F40\n4AE0\nFF00\n4940\n4F20\n4A00\n4FE0\nAAA0\nBFE0\nA020\n9FE0\nENDCHAR\nSTARTCHAR U_5C38\nENCODING 23608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n2020\n2020\n3FE0\n2020\n2000\n2000\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_5C39\nENCODING 23609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n0440\n0440\n7FE0\n0440\n0440\n3FC0\n0840\n1000\n2000\n4000\nENDCHAR\nSTARTCHAR U_5C3A\nENCODING 23610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n2040\n2040\n3FC0\n2400\n2400\n2200\n2100\n4080\n8060\nENDCHAR\nSTARTCHAR U_5C3B\nENCODING 23611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n2040\n3FC0\n2400\n3F80\n2480\n2480\n44A0\n48A0\n90E0\nENDCHAR\nSTARTCHAR U_5C3C\nENCODING 23612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n2040\n3FC0\n2000\n2840\n2980\n2E00\n4820\n4820\n87E0\nENDCHAR\nSTARTCHAR U_5C3D\nENCODING 23613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2080\n3F80\n2200\n2100\n4C80\n4240\n9820\n0400\n0200\nENDCHAR\nSTARTCHAR U_5C3E\nENCODING 23614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2180\n3E00\n23C0\n3E00\n23C0\n3E20\n4220\n83E0\nENDCHAR\nSTARTCHAR U_5C3F\nENCODING 23615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2200\n2240\n3E80\n2700\n2A80\n5240\nAA20\n0400\nENDCHAR\nSTARTCHAR U_5C40\nENCODING 23616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2000\n3FE0\n2020\n2F20\n2920\n4F20\n4920\n80C0\nENDCHAR\nSTARTCHAR U_5C41\nENCODING 23617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2900\n2900\n2F40\n2980\n2900\n2B20\n4D20\n89E0\nENDCHAR\nSTARTCHAR U_5C42\nENCODING 23618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2000\n2FC0\n2000\n3FE0\n2200\n2480\n4840\n8FE0\nENDCHAR\nSTARTCHAR U_5C43\nENCODING 23619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4000\n5FC0\n5040\n5240\n5240\n5200\n44C0\n9820\nENDCHAR\nSTARTCHAR U_5C44\nENCODING 23620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2100\n2FE0\n2820\n2AA0\n2480\n2440\n4820\n9020\nENDCHAR\nSTARTCHAR U_5C45\nENCODING 23621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2200\n3FE0\n2200\n2FC0\n2840\n2840\n4FC0\n8840\nENDCHAR\nSTARTCHAR U_5C46\nENCODING 23622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2100\n2920\n2FE0\n2920\n2FE0\n2820\n4FE0\n8820\nENDCHAR\nSTARTCHAR U_5C47\nENCODING 23623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2000\n2FE0\n2920\n2920\n2FE0\n2920\n4920\n8FE0\nENDCHAR\nSTARTCHAR U_5C48\nENCODING 23624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2000\n2920\n2920\n2FE0\n2100\n2920\n4920\n8FE0\nENDCHAR\nSTARTCHAR U_5C49\nENCODING 23625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2A80\n2A80\n3FE0\n2A80\n2A80\n4B80\n4800\n8FE0\nENDCHAR\nSTARTCHAR U_5C4A\nENCODING 23626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2100\n2100\n2FE0\n2920\n2FE0\n4920\n4FE0\n8820\nENDCHAR\nSTARTCHAR U_5C4B\nENCODING 23627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2000\n3FE0\n2480\n2FC0\n2100\n2FC0\n4100\n9FE0\nENDCHAR\nSTARTCHAR U_5C4C\nENCODING 23628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2000\n2FC0\n2840\n2FC0\n2100\n2FE0\n4920\n8960\nENDCHAR\nSTARTCHAR U_5C4D\nENCODING 23629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2000\n3FE0\n2900\n2F20\n3340\n2DA0\n4920\n90E0\nENDCHAR\nSTARTCHAR U_5C4E\nENCODING 23630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2200\n2A40\n2680\n3FE0\n2300\n2680\n4A40\n9220\nENDCHAR\nSTARTCHAR U_5C4F\nENCODING 23631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2840\n2480\n3FE0\n2480\n3FE0\n2480\n4880\n9080\nENDCHAR\nSTARTCHAR U_5C50\nENCODING 23632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2480\n2BE0\n3480\n2BE0\n3940\n2880\n4940\n8A20\nENDCHAR\nSTARTCHAR U_5C51\nENCODING 23633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2920\n2540\n2FC0\n2840\n2FC0\n2840\n4FC0\n8840\nENDCHAR\nSTARTCHAR U_5C52\nENCODING 23634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n4000\n5FC0\n5000\n5FC0\n5000\n5FE0\nA940\nCCE0\nENDCHAR\nSTARTCHAR U_5C53\nENCODING 23635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n4000\n5FC0\n5040\n5FC0\n5040\n5FC0\n4480\n9840\nENDCHAR\nSTARTCHAR U_5C54\nENCODING 23636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n7420\n4420\n7FE0\n5500\n5520\n5540\n5580\n5D20\nF520\n08E0\nENDCHAR\nSTARTCHAR U_5C55\nENCODING 23637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4900\n7FC0\n4900\n7FE0\n5240\n5180\n9480\n9860\nENDCHAR\nSTARTCHAR U_5C56\nENCODING 23638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2200\n3FE0\n2500\n3FE0\n2200\n3FE0\n4200\n8200\nENDCHAR\nSTARTCHAR U_5C57\nENCODING 23639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n4440\n7FE0\n4A40\n7140\n5D40\n7040\n5D40\n70A0\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_5C58\nENCODING 23640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4440\n7C80\n4880\n73E0\n5080\n7C80\n5080\n7DA0\n5020\n8FE0\nENDCHAR\nSTARTCHAR U_5C59\nENCODING 23641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n4000\n5FE0\n5440\n59C0\n5540\n55C0\n5C40\n90C0\nENDCHAR\nSTARTCHAR U_5C5A\nENCODING 23642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n4000\n7FE0\n4200\n7FE0\n6AA0\n6220\nAAA0\nA260\nENDCHAR\nSTARTCHAR U_5C5B\nENCODING 23643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4440\n4880\n5DE0\n4880\n5DE0\n4880\n8880\n9080\nENDCHAR\nSTARTCHAR U_5C5C\nENCODING 23644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n4AA0\n52A0\n6FE0\n52A0\n72A0\n52E0\n9200\n93E0\nENDCHAR\nSTARTCHAR U_5C5D\nENCODING 23645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2500\n3DE0\n2500\n3DC0\n2500\n5DE0\n4500\n8500\nENDCHAR\nSTARTCHAR U_5C5E\nENCODING 23646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4040\n5F80\n4200\n5FC0\n5240\nBFE0\nA220\nAF60\nENDCHAR\nSTARTCHAR U_5C5F\nENCODING 23647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n5280\n7FE0\n5280\n5F80\n4400\n7FE0\n5480\nA440\nENDCHAR\nSTARTCHAR U_5C60\nENCODING 23648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2240\n2F40\n2280\n3FE0\n2440\n2FC0\n5440\n87C0\nENDCHAR\nSTARTCHAR U_5C61\nENCODING 23649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2940\n3FE0\n2940\n3220\n3FE0\n2480\n4300\n9CE0\nENDCHAR\nSTARTCHAR U_5C62\nENCODING 23650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n4A80\n7FE0\n4A40\n7FE0\n4480\n4880\n8700\nBCE0\nENDCHAR\nSTARTCHAR U_5C63\nENCODING 23651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2480\n2AE0\n3680\n2BE0\n2A80\n2AE0\n4D80\n88E0\nENDCHAR\nSTARTCHAR U_5C64\nENCODING 23652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n4480\n5FE0\n5520\n5FE0\n4840\n4FC0\n8840\n8FC0\nENDCHAR\nSTARTCHAR U_5C65\nENCODING 23653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n4A40\n53C0\n6A40\n53C0\n7640\n5A80\n9180\n9660\nENDCHAR\nSTARTCHAR U_5C66\nENCODING 23654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n5540\n67E0\n4B40\n5520\n77E0\n5240\n9180\n9660\nENDCHAR\nSTARTCHAR U_5C67\nENCODING 23655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n5540\n6FE0\n4D40\n57E0\n7100\n5FE0\n9540\n9920\nENDCHAR\nSTARTCHAR U_5C68\nENCODING 23656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2AA0\n37E0\n26A0\n2AA0\n3FE0\n4A40\n4980\n8E60\nENDCHAR\nSTARTCHAR U_5C69\nENCODING 23657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\nFFE0\n9100\nAFE0\nD480\nAFE0\nE480\nAFE0\nAAA0\nABE0\nENDCHAR\nSTARTCHAR U_5C6A\nENCODING 23658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n4200\n7FE0\n68A0\n5FC0\n68A0\n4F80\n8A80\nB260\nENDCHAR\nSTARTCHAR U_5C6B\nENCODING 23659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4900\n6FE0\n6A40\n7DA0\n4BE0\nBAA0\nABA0\nCA60\nENDCHAR\nSTARTCHAR U_5C6C\nENCODING 23660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2020\n3FE0\n2A80\n3FC0\n2540\n3FE0\n3AA0\n2FA0\n42A0\n9F60\nENDCHAR\nSTARTCHAR U_5C6D\nENCODING 23661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n5040\n5FC0\n5040\n5FC0\n5540\n5540\n5DC0\nA220\nENDCHAR\nSTARTCHAR U_5C6E\nENCODING 23662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n4440\n4440\n4440\n7FC0\n4440\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_5C6F\nENCODING 23663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0400\n2480\n2480\n2480\n3F80\n0420\n0420\n03E0\nENDCHAR\nSTARTCHAR U_5C70\nENCODING 23664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n1200\nFFE0\n0400\n4440\n4440\n7FC0\n4440\n0800\n1000\n6000\nENDCHAR\nSTARTCHAR U_5C71\nENCODING 23665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n4440\n4440\n4440\n4440\n4440\n4440\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_5C72\nENCODING 23666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n03E0\nFC00\n0400\n0400\n4440\n4440\n4440\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5C73\nENCODING 23667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C00\n0400\n0A00\n3180\nC460\n0400\n4440\n4440\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_5C74\nENCODING 23668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n2220\n2220\n3FE0\n0200\n7FC0\n0440\n0440\n0840\n1240\n6180\nENDCHAR\nSTARTCHAR U_5C75\nENCODING 23669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n4440\n7FC0\n0000\n7FC0\n4000\n4000\n4000\n8000\n8000\nENDCHAR\nSTARTCHAR U_5C76\nENCODING 23670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n4440\n7FC0\n0000\n7FC0\n1040\n1040\n1040\n2140\nC080\nENDCHAR\nSTARTCHAR U_5C77\nENCODING 23671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2240\nAA80\nAB00\nABE0\nAA20\nAA20\nAA20\nFA20\n84A0\n0860\nENDCHAR\nSTARTCHAR U_5C78\nENCODING 23672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nA900\nA900\nA900\nA900\nA900\nA900\nF900\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_5C79\nENCODING 23673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\nAA00\nAC00\nABE0\nA840\nA880\nA900\nF920\n8A20\n01E0\nENDCHAR\nSTARTCHAR U_5C7A\nENCODING 23674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2020\nA820\nA820\nABE0\nAA20\nAA00\nAA00\nFA20\n8A20\n01E0\nENDCHAR\nSTARTCHAR U_5C7B\nENCODING 23675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\nA920\nAB20\nAD20\nA920\nA920\nAA20\nFA20\n04A0\n0840\nENDCHAR\nSTARTCHAR U_5C7C\nENCODING 23676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nAA80\nAA80\nAA80\nAA80\nAA80\nBA80\nC4A0\n04A0\n08E0\nENDCHAR\nSTARTCHAR U_5C7D\nENCODING 23677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n2100\nA900\nA900\nAFE0\nA900\nA900\nA900\nF900\n8100\nENDCHAR\nSTARTCHAR U_5C7E\nENCODING 23678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nAAA0\nAAA0\nAAA0\nAAA0\nAAA0\nAAA0\nBAA0\nCBE0\n0220\nENDCHAR\nSTARTCHAR U_5C7F\nENCODING 23679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n2200\n23E0\nAA00\nAA00\nABE0\nA820\nAFA0\nB820\nC020\n00C0\nENDCHAR\nSTARTCHAR U_5C80\nENCODING 23680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n4440\n7FC0\n4040\n0400\n8420\n8420\n8420\nFFE0\n8020\nENDCHAR\nSTARTCHAR U_5C81\nENCODING 23681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n0800\n0FC0\n1040\n6880\n0500\n0200\n0C00\nF000\nENDCHAR\nSTARTCHAR U_5C82\nENCODING 23682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n0000\n7F80\n0080\n7F80\n4000\n4020\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_5C83\nENCODING 23683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n4440\n7FC0\n0000\nFFC0\n0440\n2440\nC840\n1040\n61C0\nENDCHAR\nSTARTCHAR U_5C84\nENCODING 23684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\nAA20\nABE0\nAA20\nAA20\nABE0\nAA20\nFA20\n8420\n0860\nENDCHAR\nSTARTCHAR U_5C85\nENCODING 23685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2380\n2200\nABC0\nAA40\nAA40\nAB40\nBC80\nC480\n0940\n1220\nENDCHAR\nSTARTCHAR U_5C86\nENCODING 23686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2380\nA880\nA880\nAFE0\nA880\nA880\nA940\nFA40\n8C20\n0820\nENDCHAR\nSTARTCHAR U_5C87\nENCODING 23687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0000\n1BC0\n6240\n4240\n5340\n6280\n0200\n0200\nENDCHAR\nSTARTCHAR U_5C88\nENCODING 23688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2280\nAA80\nAA80\nAFE0\nA880\nA980\nAA80\nFC80\n8A80\n0100\nENDCHAR\nSTARTCHAR U_5C89\nENCODING 23689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\nAFE0\nAAA0\nAAA0\nAAA0\nACA0\nA920\nFA20\n8C20\n00C0\nENDCHAR\nSTARTCHAR U_5C8A\nENCODING 23690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n7FC0\n4020\n4020\n3FE0\n0400\n4440\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_5C8B\nENCODING 23691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2240\nAA40\nAA80\nAAE0\nAA20\nAA40\nFD40\n8480\n0940\n1220\nENDCHAR\nSTARTCHAR U_5C8C\nENCODING 23692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n4420\n7FE0\n0000\n7FC0\n0880\n09C0\n0C80\n1300\n2480\n5860\nENDCHAR\nSTARTCHAR U_5C8D\nENCODING 23693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2240\nAA40\nAA40\nAFE0\nAA40\nAA40\nAA40\nFA40\n8C40\n0840\nENDCHAR\nSTARTCHAR U_5C8E\nENCODING 23694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\nAA80\nAC40\nA820\nAFC0\nAA40\nBA40\nC240\n0540\n0880\nENDCHAR\nSTARTCHAR U_5C8F\nENCODING 23695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2000\nA800\nAFE0\nAA80\nAA80\nAA80\nFA80\n8AA0\n04A0\n0860\nENDCHAR\nSTARTCHAR U_5C90\nENCODING 23696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\nA900\nA900\nAFC0\nAC40\nAC40\nFA80\n8900\n0280\n0C60\nENDCHAR\nSTARTCHAR U_5C91\nENCODING 23697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n0400\n0A00\n3580\nC260\n1F80\n0100\n0200\n0400\nENDCHAR\nSTARTCHAR U_5C92\nENCODING 23698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nAC60\nA920\nA880\nA800\nAFE0\nF840\n8840\n0080\n0100\nENDCHAR\nSTARTCHAR U_5C93\nENCODING 23699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2380\nAA00\nAA00\nABE0\nAA40\nAA40\nFA40\n8A40\n0440\n0840\nENDCHAR\nSTARTCHAR U_5C94\nENCODING 23700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2100\n4080\nBF60\n0900\n1100\n6600\n0400\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5C95\nENCODING 23701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n0400\n0A00\n3180\nC060\n1100\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_5C96\nENCODING 23702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2200\nAB20\nAAA0\nAA40\nAA40\nAAA0\nFB20\n8A00\n0200\n03E0\nENDCHAR\nSTARTCHAR U_5C97\nENCODING 23703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n0000\n7FC0\n5140\n4A40\n4640\n4940\n5040\n40C0\nENDCHAR\nSTARTCHAR U_5C98\nENCODING 23704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\nAAA0\nAAA0\nAAA0\nAAA0\nAAA0\nA880\nF9A0\n8AA0\n0460\nENDCHAR\nSTARTCHAR U_5C99\nENCODING 23705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n7E00\n0400\nFFE0\n0A00\n3580\nC460\n4440\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_5C9A\nENCODING 23706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n0000\n7FC0\n4040\n5140\n4A40\n4440\n4A40\n9120\nENDCHAR\nSTARTCHAR U_5C9B\nENCODING 23707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7F00\n5100\n4900\n4200\n7FC0\n1040\n9240\n9240\nFE40\n0180\nENDCHAR\nSTARTCHAR U_5C9C\nENCODING 23708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2220\n3FE0\n0000\n3FC0\n2240\n3FC0\n2040\n2020\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_5C9D\nENCODING 23709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2220\n3FE0\n0800\n1FE0\n2400\n47C0\n0400\n07E0\n0400\n0400\nENDCHAR\nSTARTCHAR U_5C9E\nENCODING 23710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n2100\n23E0\nAD00\nA900\nA9E0\nA900\nA9E0\nB900\nC900\n0100\nENDCHAR\nSTARTCHAR U_5C9F\nENCODING 23711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nAFC0\nAD40\nAD40\nAD40\nAFE0\nF900\n8A80\n0440\n0820\nENDCHAR\nSTARTCHAR U_5CA0\nENCODING 23712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2200\nAA00\nABC0\nAA40\nAA40\nABC0\nFA40\n8A00\n0200\n03E0\nENDCHAR\nSTARTCHAR U_5CA1\nENCODING 23713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\n9120\n8A20\nFFE0\n8420\nA4A0\nA4A0\nBFA0\n8020\n80E0\nENDCHAR\nSTARTCHAR U_5CA2\nENCODING 23714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n4220\n7FE0\n0000\nFFE0\n0080\n3C80\n2480\n3C80\n0080\n0180\nENDCHAR\nSTARTCHAR U_5CA3\nENCODING 23715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nABE0\nAC20\nABA0\nAAA0\nAAA0\nABA0\nF820\n8820\n00C0\nENDCHAR\nSTARTCHAR U_5CA4\nENCODING 23716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nAFE0\nA820\nAA80\nAA80\nAA80\nAA40\nFC40\n8420\n0820\nENDCHAR\nSTARTCHAR U_5CA5\nENCODING 23717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n23E0\nAAA0\nAA80\nABE0\nAA40\nAA40\nFB40\n8A80\n0540\n0A20\nENDCHAR\nSTARTCHAR U_5CA6\nENCODING 23718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n0800\n0400\n7FC0\n0000\n1100\n0900\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_5CA7\nENCODING 23719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n3FE0\n0000\n7FE0\n0420\n1940\n6080\n1FC0\n1040\n1FC0\n1040\nENDCHAR\nSTARTCHAR U_5CA8\nENCODING 23720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nAA40\nABC0\nAA40\nAA40\nABC0\nFA40\n8A40\n0240\n0FE0\nENDCHAR\nSTARTCHAR U_5CA9\nENCODING 23721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n4420\n7FE0\n0000\n7FE0\n0800\n1FC0\n3040\n5040\n1FC0\n1040\nENDCHAR\nSTARTCHAR U_5CAA\nENCODING 23722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7FE0\n0900\n7FE0\n0920\n7FE0\n4900\n7FE0\n0920\n1120\n6140\nENDCHAR\nSTARTCHAR U_5CAB\nENCODING 23723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nABE0\nAAA0\nAAA0\nABE0\nAAA0\nAAA0\nFAA0\n8BE0\n0220\nENDCHAR\nSTARTCHAR U_5CAC\nENCODING 23724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n22A0\nAAA0\nABE0\nAAA0\nAAA0\nABE0\nFAA0\n8880\n0080\n0080\nENDCHAR\nSTARTCHAR U_5CAD\nENCODING 23725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2180\nAA40\nAD20\nA880\nA800\nAFE0\nB840\nEB80\n0080\n0040\nENDCHAR\nSTARTCHAR U_5CAE\nENCODING 23726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nAFE0\nAC20\nA900\nA920\nA940\nA980\nF920\n8920\n00E0\nENDCHAR\nSTARTCHAR U_5CAF\nENCODING 23727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2080\nA900\nA900\nAB40\nAD20\nA920\nF900\n8900\n0000\n0FE0\nENDCHAR\nSTARTCHAR U_5CB0\nENCODING 23728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nADE0\nAAA0\nAEA0\nAAA0\nACA0\nFAA0\n8FA0\n0120\n0240\nENDCHAR\nSTARTCHAR U_5CB1\nENCODING 23729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n2440\n3FE0\n6200\nA120\n24E0\n0400\n4440\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_5CB2\nENCODING 23730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\n2220\n2220\nAA20\nABE0\nA940\nA940\nA940\nB940\nCA40\n0460\nENDCHAR\nSTARTCHAR U_5CB3\nENCODING 23731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n3E00\n2000\n3FC0\n2200\n2200\nFFE0\n0400\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5CB4\nENCODING 23732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n2200\n2200\nAA00\nABE0\nAA40\nAA40\nAA40\nBA40\nCA40\n07E0\nENDCHAR\nSTARTCHAR U_5CB5\nENCODING 23733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nABE0\nA880\nA880\nABE0\nAA20\nAA20\nFA20\n8BE0\n0220\nENDCHAR\nSTARTCHAR U_5CB6\nENCODING 23734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n2100\nABE0\nAA20\nAA20\nABE0\nAA20\nAA20\nFA20\n8BE0\n0220\nENDCHAR\nSTARTCHAR U_5CB7\nENCODING 23735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\nAA20\nABE0\nAA80\nAA80\nABE0\nAA80\nFAA0\n8B60\n0620\nENDCHAR\nSTARTCHAR U_5CB8\nENCODING 23736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n0000\n7FE0\n4000\n5FC0\n4200\n7FE0\n4200\n8200\nENDCHAR\nSTARTCHAR U_5CB9\nENCODING 23737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\n2120\n2120\nA920\nAA60\nA800\nABE0\nAA20\nBA20\nCBE0\n0220\nENDCHAR\nSTARTCHAR U_5CBA\nENCODING 23738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0400\n0A00\n3580\nC460\n1F00\n0100\n0A00\n0400\nENDCHAR\nSTARTCHAR U_5CBB\nENCODING 23739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\n2380\n2280\nAA80\nABE0\nAA80\nAA80\nAA80\nAA40\nFB40\n02A0\nENDCHAR\nSTARTCHAR U_5CBC\nENCODING 23740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n2100\n2120\nAD40\nAB80\nAFE0\nA900\nA900\nB900\nC900\n0100\nENDCHAR\nSTARTCHAR U_5CBD\nENCODING 23741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n0800\n7FE0\n1200\n7FC0\n0200\n1280\n2A40\nC420\nENDCHAR\nSTARTCHAR U_5CBE\nENCODING 23742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n2080\n2080\nA8E0\nA880\nA880\nABE0\nAA20\nBA20\nCA20\n03E0\nENDCHAR\nSTARTCHAR U_5CBF\nENCODING 23743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n0800\n4FE0\n4820\n4820\n4BE0\n4820\n3020\nC7E0\nENDCHAR\nSTARTCHAR U_5CC0\nENCODING 23744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0400\n7FC0\n4440\n4440\n7FC0\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5CC1\nENCODING 23745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n4220\n7FE0\n0400\n39E0\n2120\n2520\n2D20\n7560\n0900\n7100\nENDCHAR\nSTARTCHAR U_5CC2\nENCODING 23746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n23C0\n2440\nAA80\nA900\nAA80\nAC60\nAB00\nB880\nCA00\n0180\nENDCHAR\nSTARTCHAR U_5CC3\nENCODING 23747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n24C0\n1500\nFFE0\n8020\n0400\n4440\n4440\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5CC4\nENCODING 23748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2440\nAA80\nA900\nAEE0\nA900\nAFC0\nF900\n8FE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_5CC5\nENCODING 23749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n2100\n2240\nAFE0\nAA40\nAA40\nAFE0\nAA40\nBA40\nCC40\n0840\nENDCHAR\nSTARTCHAR U_5CC6\nENCODING 23750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nAC40\nA820\nABC0\nA800\nABC0\nFA40\n8A40\n03C0\n0240\nENDCHAR\nSTARTCHAR U_5CC7\nENCODING 23751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n7FE0\n0A00\n1100\n2080\n5F40\n8020\n1F80\n1080\n1F80\n1080\nENDCHAR\nSTARTCHAR U_5CC8\nENCODING 23752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\nAE40\nA980\nAA40\nAC20\nABE0\nFA20\n8A20\n03E0\n0220\nENDCHAR\nSTARTCHAR U_5CC9\nENCODING 23753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n1000\n3F80\n5100\n8E00\n3180\nDF60\n1100\n1100\n1F00\nENDCHAR\nSTARTCHAR U_5CCA\nENCODING 23754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2000\n3FC0\n2040\n3FC0\n4220\n4220\n7FE0\nENDCHAR\nSTARTCHAR U_5CCB\nENCODING 23755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\nAC20\nABA0\nAAA0\nABA0\nAAA0\nFBA0\n8AA0\n0020\n00C0\nENDCHAR\nSTARTCHAR U_5CCC\nENCODING 23756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nA900\nAA40\nAFA0\nA900\nA900\nFFC0\n8900\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_5CCD\nENCODING 23757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n27C0\n2140\nAFE0\nA940\nAFC0\nA900\nAFC0\nB900\nCFE0\n0100\nENDCHAR\nSTARTCHAR U_5CCE\nENCODING 23758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7FE0\n0000\n3FC0\n2040\n3FC0\n2040\n3FE0\n2240\n2D80\n30E0\nENDCHAR\nSTARTCHAR U_5CCF\nENCODING 23759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nAA00\nAFE0\nAAA0\nAAA0\nAAA0\nFAA0\n8AA0\n0A20\n0860\nENDCHAR\nSTARTCHAR U_5CD0\nENCODING 23760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nA880\nA920\nABC0\nA880\nA920\nFA40\n8880\n0140\n0620\nENDCHAR\nSTARTCHAR U_5CD1\nENCODING 23761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0400\n1B00\nE0E0\n1F00\n0400\n3F80\n0400\n7FC0\nENDCHAR\nSTARTCHAR U_5CD2\nENCODING 23762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nABA0\nA820\nABA0\nAAA0\nAAA0\nFBA0\n8AA0\n0820\n0860\nENDCHAR\nSTARTCHAR U_5CD3\nENCODING 23763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nA900\nAFC0\nA940\nAFC0\nA900\nFFE0\n8AA0\n0440\n0820\nENDCHAR\nSTARTCHAR U_5CD4\nENCODING 23764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2120\nAFA0\nA940\nAFE0\nA900\nAA40\nFE80\n8B20\n0220\n01E0\nENDCHAR\nSTARTCHAR U_5CD5\nENCODING 23765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0400\nFFE0\n0000\n7FC0\n4040\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_5CD6\nENCODING 23766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nAD20\nA900\nAFE0\nA940\nAA40\nFA40\n8980\n0340\n0C20\nENDCHAR\nSTARTCHAR U_5CD7\nENCODING 23767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nAC80\nAFE0\nAC00\nADE0\nAD20\nFD60\n8500\n0920\n10E0\nENDCHAR\nSTARTCHAR U_5CD8\nENCODING 23768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2000\nABC0\nAA40\nAA40\nABC0\nAA40\nFBC0\n8A40\n0000\n07E0\nENDCHAR\nSTARTCHAR U_5CD9\nENCODING 23769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2100\nA900\nAFE0\nA840\nAFE0\nAA40\nF940\n8840\n01C0\nENDCHAR\nSTARTCHAR U_5CDA\nENCODING 23770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0000\n0400\nFFE0\n1100\n2480\nDF60\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5CDB\nENCODING 23771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n7FE0\n0000\n7E20\n10A0\n1EA0\n24A0\n54A0\n08A0\n1020\n6060\nENDCHAR\nSTARTCHAR U_5CDC\nENCODING 23772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0400\n0A00\n3580\nC460\n1700\n1400\n1400\nFFE0\nENDCHAR\nSTARTCHAR U_5CDD\nENCODING 23773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0000\n7FC0\n4040\n5F40\n4040\n5F40\n5140\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_5CDE\nENCODING 23774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n1000\n1F00\n2200\n7FE0\n2000\n2F80\n48A0\n4920\n87E0\nENDCHAR\nSTARTCHAR U_5CDF\nENCODING 23775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0800\nFFE0\n1000\n3F80\n5080\n9F80\n1080\n1F80\n1080\nENDCHAR\nSTARTCHAR U_5CE0\nENCODING 23776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n21C0\n2100\nAFE0\nA800\nAFE0\nA900\nA980\nB940\nC920\n0100\nENDCHAR\nSTARTCHAR U_5CE1\nENCODING 23777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nAFE0\nAD20\nAB40\nA900\nAFE0\nF900\n8A80\n0440\n0820\nENDCHAR\nSTARTCHAR U_5CE2\nENCODING 23778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07A0\n2220\n23A0\nAAA0\nACE0\nAB60\nA960\nA920\nBA20\nCAA0\n0440\nENDCHAR\nSTARTCHAR U_5CE3\nENCODING 23779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n27C0\n2120\nA8C0\nA980\nAA60\nAFE0\nAA80\nBA80\nCAA0\n04E0\nENDCHAR\nSTARTCHAR U_5CE4\nENCODING 23780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\nA900\nAFE0\nAA80\nAC60\nAA40\nFA40\n8A40\n0440\n0840\nENDCHAR\nSTARTCHAR U_5CE5\nENCODING 23781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nAC80\nAFC0\nA960\nAFC0\nA940\nFFC0\n9100\n0500\n0200\nENDCHAR\nSTARTCHAR U_5CE6\nENCODING 23782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0900\n2940\n4920\n8920\n0400\n2480\n2480\n2480\n3F80\nENDCHAR\nSTARTCHAR U_5CE7\nENCODING 23783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n2100\n27E0\nAA40\nAC20\nAA40\nAA40\nAA40\nB980\nC980\n0660\nENDCHAR\nSTARTCHAR U_5CE8\nENCODING 23784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n26A0\nAA80\nAFE0\nAA80\nAB80\nAEA0\nFAC0\n8AA0\n0360\n0620\nENDCHAR\nSTARTCHAR U_5CE9\nENCODING 23785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0200\n7A40\n1240\nFFE0\n1280\n3900\nD2A0\n3460\nENDCHAR\nSTARTCHAR U_5CEA\nENCODING 23786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2420\nA980\nAA40\nAC20\nA800\nABC0\nFA40\n8A40\n03C0\n0240\nENDCHAR\nSTARTCHAR U_5CEB\nENCODING 23787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n22A0\n2AA0\nBEA0\nB2C0\nB2C0\nB6A0\nB6A0\nBAE0\nCA80\n1680\nENDCHAR\nSTARTCHAR U_5CEC\nENCODING 23788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\nAFE0\nA880\nABE0\nAAA0\nABE0\nAAA0\nFBE0\n8AA0\n0260\nENDCHAR\nSTARTCHAR U_5CED\nENCODING 23789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n21C0\nA880\nABE0\nAA20\nABE0\nAA20\nAA20\nFBE0\n8A20\n0260\nENDCHAR\nSTARTCHAR U_5CEE\nENCODING 23790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2140\nAFE0\nA940\nAFC0\nAA00\nABC0\nFA40\n8E40\n0BC0\n0240\nENDCHAR\nSTARTCHAR U_5CEF\nENCODING 23791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0800\n1F80\n7100\n0E00\nF5E0\n0E00\n0400\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_5CF0\nENCODING 23792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\nAE40\nA980\nAA40\nAFE0\nA900\nBFC0\nC100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_5CF1\nENCODING 23793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57C0\n2240\n6240\n97C0\n3240\n5FE0\n9000\n1100\n1520\n5520\n27E0\nENDCHAR\nSTARTCHAR U_5CF2\nENCODING 23794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0800\n7140\n1140\nFD40\n3940\n5540\n9240\n10C0\nENDCHAR\nSTARTCHAR U_5CF3\nENCODING 23795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n1100\n13E0\n2A40\n6D40\n2940\n2880\n2140\n2620\nENDCHAR\nSTARTCHAR U_5CF4\nENCODING 23796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nAFC0\nAC40\nAFC0\nAC40\nAFC0\nFA80\n92A0\n04A0\n0860\nENDCHAR\nSTARTCHAR U_5CF5\nENCODING 23797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n27E0\n2520\nA900\nAFE0\nA900\nAA40\nAA80\nBD40\nCA20\n03E0\nENDCHAR\nSTARTCHAR U_5CF6\nENCODING 23798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3FE0\n2000\n3FE0\n4920\n7F20\n41C0\nENDCHAR\nSTARTCHAR U_5CF7\nENCODING 23799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0400\n7FC0\n2100\n1200\nFFE0\n0400\n7FC0\n0400\n0400\nENDCHAR\nSTARTCHAR U_5CF8\nENCODING 23800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\nAFE0\nA880\nA880\nAEA0\nAAA0\nFAC0\n8EA0\n0960\n1220\nENDCHAR\nSTARTCHAR U_5CF9\nENCODING 23801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n3180\nDF60\n0400\nFFE0\n2480\nCC60\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_5CFA\nENCODING 23802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\n2080\n23E0\nAAA0\nABE0\nAAA0\nABE0\nAC80\nBA80\nC900\n0EE0\nENDCHAR\nSTARTCHAR U_5CFB\nENCODING 23803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2240\nAFA0\nAA40\nAC20\nABE0\nAE40\nFA40\n8980\n0240\n0C20\nENDCHAR\nSTARTCHAR U_5CFC\nENCODING 23804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n23E0\n2480\nA880\nAFE0\nA800\nABE0\nAA20\nBA20\nCBE0\n0220\nENDCHAR\nSTARTCHAR U_5CFD\nENCODING 23805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n27E0\nA900\nAD40\nAD40\nABA0\nB900\nCA80\n0440\n1820\nENDCHAR\nSTARTCHAR U_5CFE\nENCODING 23806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2E00\n8800\n5FE0\n2880\nC880\n5080\n0400\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5CFF\nENCODING 23807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nAFC0\nA940\nA940\nAFE0\nA800\nFBE0\n8A20\n03E0\n0220\nENDCHAR\nSTARTCHAR U_5D00\nENCODING 23808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0400\n3F80\n2080\n3F80\n2080\n3F80\n2280\n39E0\nENDCHAR\nSTARTCHAR U_5D01\nENCODING 23809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0040\n2400\n27E0\nF520\n2940\n2100\n3A80\nE440\n0820\nENDCHAR\nSTARTCHAR U_5D02\nENCODING 23810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\n2240\nAFE0\nAD20\nA900\nAFE0\nA920\nF920\n8A20\n04C0\nENDCHAR\nSTARTCHAR U_5D03\nENCODING 23811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nAD40\nAB80\nA900\nAFE0\nA900\nFB80\n8540\n0920\n0100\nENDCHAR\nSTARTCHAR U_5D04\nENCODING 23812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n22C0\nAC20\nABC0\nA800\nA920\nACA0\nFA40\n0080\n0FE0\nENDCHAR\nSTARTCHAR U_5D05\nENCODING 23813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n21E0\nAA40\nAFE0\nAAA0\nABE0\nAAA0\nBBE0\nC2A0\n02A0\n0460\nENDCHAR\nSTARTCHAR U_5D06\nENCODING 23814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2420\nAA80\nAC40\nA820\nAFC0\nA900\nF900\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_5D07\nENCODING 23815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0400\nFFE0\n8020\n3F80\n0000\nFFE0\n2480\n5440\n8820\nENDCHAR\nSTARTCHAR U_5D08\nENCODING 23816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n3F80\n0000\nFFE0\n2480\n4C40\n0400\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5D09\nENCODING 23817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nAFA0\nA9C0\nAAA0\nAC80\nABE0\nBA20\nC3E0\n0220\n03E0\nENDCHAR\nSTARTCHAR U_5D0A\nENCODING 23818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\n2FE0\nAA40\nAA40\nAB40\nAEC0\nBB60\nCA40\n0240\n0240\nENDCHAR\nSTARTCHAR U_5D0B\nENCODING 23819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0000\n7FC0\n2480\nFFE0\n2480\n7FC0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_5D0C\nENCODING 23820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\nABE0\nAA80\nABE0\nAA80\nAA80\nFBE0\n8620\n0BE0\n0220\nENDCHAR\nSTARTCHAR U_5D0D\nENCODING 23821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nA900\nAB40\nAB40\nADA0\nA900\nFB80\n8D40\n0920\n0100\nENDCHAR\nSTARTCHAR U_5D0E\nENCODING 23822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nAA80\nAC40\nAFE0\nA840\nAF40\nFD40\n8F40\n0040\n00C0\nENDCHAR\nSTARTCHAR U_5D0F\nENCODING 23823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2280\nABE0\nAA80\nAB60\nA800\nABE0\nBA20\nC3E0\n0220\n03E0\nENDCHAR\nSTARTCHAR U_5D10\nENCODING 23824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\nABE0\nAA20\nABE0\nA800\nAAA0\nBBC0\nC280\n02A0\n0360\nENDCHAR\nSTARTCHAR U_5D11\nENCODING 23825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n2080\n3F80\n2080\n3F80\n4200\n7BC0\n4200\n5A20\n61E0\nENDCHAR\nSTARTCHAR U_5D12\nENCODING 23826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n0400\n7FE0\n1100\n2A80\n4440\n7FE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_5D13\nENCODING 23827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nA920\nAFE0\nA920\nABA0\nAAA0\nABA0\nB820\nCFE0\n0820\nENDCHAR\nSTARTCHAR U_5D14\nENCODING 23828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n1200\n3FE0\n6200\nBFC0\n2200\n3FC0\n2200\n3FE0\nENDCHAR\nSTARTCHAR U_5D15\nENCODING 23829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2280\nABE0\nAA80\nABE0\nAA00\nAA80\nBBE0\nCA80\n0480\n0BE0\nENDCHAR\nSTARTCHAR U_5D16\nENCODING 23830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2220\n3FE0\n2200\n2F80\n2200\n3FE0\n2200\n2FC0\n4200\nBFE0\nENDCHAR\nSTARTCHAR U_5D17\nENCODING 23831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n4220\n7FE0\n0000\n7FE0\n4920\n7FE0\n52A0\n52A0\n5FA0\n4060\nENDCHAR\nSTARTCHAR U_5D18\nENCODING 23832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2460\nAB80\nA800\nAFE0\nAAA0\nAAA0\nFFE0\n8AA0\n0A60\nENDCHAR\nSTARTCHAR U_5D19\nENCODING 23833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0400\n1B00\nEEE0\n0000\n7FC0\n4A40\n7FC0\n4A40\n40C0\nENDCHAR\nSTARTCHAR U_5D1A\nENCODING 23834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nA900\nAFE0\nAA40\nAB20\nADC0\nFB40\n8C80\n0140\n0620\nENDCHAR\nSTARTCHAR U_5D1B\nENCODING 23835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nAFE0\nA880\nAAA0\nAAA0\nABE0\nF880\n8AA0\n0AA0\n13E0\nENDCHAR\nSTARTCHAR U_5D1C\nENCODING 23836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2380\n2080\nAFE0\nAAA0\nAAA0\nAFE0\nBAA0\nCFE0\n0080\n07E0\nENDCHAR\nSTARTCHAR U_5D1D\nENCODING 23837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nA880\nABC0\nA880\nAFE0\nAA20\nBBE0\nCA20\n03E0\n0220\nENDCHAR\nSTARTCHAR U_5D1E\nENCODING 23838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nAA40\nABC0\nA800\nAFE0\nA880\nFFE0\n8900\n0100\n0300\nENDCHAR\nSTARTCHAR U_5D1F\nENCODING 23839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0400\n0A00\n3180\nDF60\n0400\n7FC0\n2480\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_5D20\nENCODING 23840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nA880\nABE0\nAAA0\nABE0\nAAA0\nFBE0\n89C0\n02A0\n04A0\nENDCHAR\nSTARTCHAR U_5D21\nENCODING 23841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2040\n2080\nA920\nAD60\nABA0\nAD60\nA920\nFB20\n0820\n0FE0\nENDCHAR\nSTARTCHAR U_5D22\nENCODING 23842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2520\nAA40\nAFC0\nA940\nAFE0\nA940\nFFC0\n8900\n0100\n0300\nENDCHAR\nSTARTCHAR U_5D23\nENCODING 23843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0300\n1C00\nFFE0\n2480\n4840\nFFE0\n1100\n0E00\n79E0\nENDCHAR\nSTARTCHAR U_5D24\nENCODING 23844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2660\n2180\nAE60\nA900\nAFE0\nAA20\nAFE0\nFA20\n8BE0\n0220\n0260\nENDCHAR\nSTARTCHAR U_5D25\nENCODING 23845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23E0\nAAA0\nABE0\nAAA0\nABE0\nA9A0\nFA80\n8FE0\n0080\n0080\nENDCHAR\nSTARTCHAR U_5D26\nENCODING 23846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nAA80\nAD40\nAFE0\nAD40\nAFC0\nFD40\n8FC0\n0120\n00E0\nENDCHAR\nSTARTCHAR U_5D27\nENCODING 23847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7FE0\n1000\n1280\nFA80\n1440\n3920\n5500\n9240\n17E0\n1020\nENDCHAR\nSTARTCHAR U_5D28\nENCODING 23848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nA940\nAFE0\nA940\nAFC0\nA900\nFDE0\n8500\n0B00\n11E0\nENDCHAR\nSTARTCHAR U_5D29\nENCODING 23849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n3FE0\n0000\n3DE0\n2520\n3DE0\n2520\n3DE0\n2520\n4520\n8E60\nENDCHAR\nSTARTCHAR U_5D2A\nENCODING 23850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\n2240\nAA40\nADA0\nA880\nA880\nAFE0\nF880\n0080\n0080\nENDCHAR\nSTARTCHAR U_5D2B\nENCODING 23851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0000\n7FC0\n4040\n7FC0\n5280\n5F80\nA220\nBFE0\nENDCHAR\nSTARTCHAR U_5D2C\nENCODING 23852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0400\nFFE0\n2480\n3F80\n2480\n3F80\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_5D2D\nENCODING 23853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n2020\nFDC0\n2100\n51E0\nFD40\n1140\n1D40\nF240\n1440\nENDCHAR\nSTARTCHAR U_5D2E\nENCODING 23854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n4220\n7FE0\n0000\n7FE0\n4420\n7FA0\n5120\n5F20\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_5D2F\nENCODING 23855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2440\nABA0\nA900\nA900\nAFE0\nA900\nFD20\n0340\n0FE0\nENDCHAR\nSTARTCHAR U_5D30\nENCODING 23856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n2540\nAAA0\nA940\nABE0\nAAA0\nAAA0\nFBE0\n8AA0\n03E0\n0220\nENDCHAR\nSTARTCHAR U_5D31\nENCODING 23857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n7FE0\n0000\n7C20\n4520\n7D20\n4520\n7D20\n4520\n7C20\nC6E0\nENDCHAR\nSTARTCHAR U_5D32\nENCODING 23858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23E0\nAA20\nABE0\nAA20\nAFE0\nA880\nABE0\nF880\n0080\n07E0\nENDCHAR\nSTARTCHAR U_5D33\nENCODING 23859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n2440\nABA0\nA800\nAE20\nAAA0\nAEA0\nFAA0\n8EA0\n0A20\n0AE0\nENDCHAR\nSTARTCHAR U_5D34\nENCODING 23860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7FE0\n0140\n7FE0\n4100\n7F40\n4940\n7F40\n54A0\n4960\nB620\nENDCHAR\nSTARTCHAR U_5D35\nENCODING 23861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nABC0\nAA40\nAFE0\nAA00\nAFE0\nFAA0\n8CA0\n0120\n06C0\nENDCHAR\nSTARTCHAR U_5D36\nENCODING 23862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8440\nFFC0\n1040\n7C40\n13E0\nFC40\n1240\n7D40\n1040\n1D40\nF080\nENDCHAR\nSTARTCHAR U_5D37\nENCODING 23863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nAFE0\nAA80\nAFE0\nAAA0\nACE0\nF820\n8FE0\n0820\n0FE0\nENDCHAR\nSTARTCHAR U_5D38\nENCODING 23864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nABE0\nAA20\nABE0\nAA20\nABE0\nFA20\n8BE0\n0140\n0620\nENDCHAR\nSTARTCHAR U_5D39\nENCODING 23865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nAA80\nAFE0\nA920\nAFC0\nAD40\nFD40\n8540\n05C0\n0100\nENDCHAR\nSTARTCHAR U_5D3A\nENCODING 23866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8420\nFFE0\n2200\nFBE0\n2480\n3AE0\n2BA0\n2EA0\n2A80\n4A20\nB1E0\nENDCHAR\nSTARTCHAR U_5D3B\nENCODING 23867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n25E0\nAA80\nADE0\nAA40\nABE0\nAA40\nFBC0\n0240\n02C0\nENDCHAR\nSTARTCHAR U_5D3C\nENCODING 23868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nABC0\nAA40\nABC0\nA800\nAFE0\nFA80\n8AE0\n0580\n08E0\nENDCHAR\nSTARTCHAR U_5D3D\nENCODING 23869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0000\n3F80\n2480\n3F80\n2480\n3F80\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_5D3E\nENCODING 23870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2280\nAFE0\nAAA0\nAFE0\nA900\nAFE0\nFA40\n8380\n0140\n0620\nENDCHAR\nSTARTCHAR U_5D3F\nENCODING 23871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n22A0\nABE0\nA800\nABE0\nA800\nAFE0\nF900\n8BE0\n0020\n00C0\nENDCHAR\nSTARTCHAR U_5D40\nENCODING 23872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n2100\n2100\nFFE0\n2100\n7100\nAFC0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_5D41\nENCODING 23873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nAA40\nABC0\nAA40\nABC0\nAA40\nFFE0\n8940\n0A20\n0FE0\nENDCHAR\nSTARTCHAR U_5D42\nENCODING 23874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0200\n2FC0\n4260\n9FC0\n2240\n6FE0\nA200\n3FE0\n2200\nENDCHAR\nSTARTCHAR U_5D43\nENCODING 23875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA280\nAFE0\nA880\nA900\nAE40\nF8A0\n8B40\n1080\n2700\nENDCHAR\nSTARTCHAR U_5D44\nENCODING 23876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n2100\nAFC0\nA900\nAFC0\nA900\nBFE0\nE900\n0280\n0C60\nENDCHAR\nSTARTCHAR U_5D45\nENCODING 23877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0140\n7FE0\n4100\n5D20\n4140\n5D80\n54A0\n9D60\n8220\nENDCHAR\nSTARTCHAR U_5D46\nENCODING 23878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7140\n2140\nF7E0\n2100\n7280\nA4A0\nA8E0\n2400\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5D47\nENCODING 23879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\nE120\n2FE0\nF280\n22A0\n34E0\n6900\nA920\n2920\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_5D48\nENCODING 23880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2520\nA240\nAFE0\nA900\nAFE0\nAA00\nFBE0\n0520\n18C0\n0320\nENDCHAR\nSTARTCHAR U_5D49\nENCODING 23881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nA800\nABC0\nAA40\nAFE0\nAC20\nFBC0\n8880\n0280\n0100\nENDCHAR\nSTARTCHAR U_5D4A\nENCODING 23882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nA900\nAFE0\nA940\nAF60\nA940\nFF60\n8B80\n0540\n0920\nENDCHAR\nSTARTCHAR U_5D4B\nENCODING 23883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n22A0\nABE0\nAA00\nABE0\nAB20\nABE0\nFD20\n85E0\n0920\n11E0\nENDCHAR\nSTARTCHAR U_5D4C\nENCODING 23884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n0100\n4900\nFFE0\n4AA0\n7880\n4940\n7A20\n4C20\nENDCHAR\nSTARTCHAR U_5D4D\nENCODING 23885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n29E0\n1140\nFE40\n3540\n5080\n9140\n3620\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5D4E\nENCODING 23886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n22A0\nABE0\nAAA0\nABE0\nA880\nABE0\nFAA0\n8BE0\n0220\n0260\nENDCHAR\nSTARTCHAR U_5D4F\nENCODING 23887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0A00\n2480\n2A80\n3F80\n5040\n9FA0\n2900\n4600\n1980\nENDCHAR\nSTARTCHAR U_5D50\nENCODING 23888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n4140\n5E40\n4440\n5F40\n5540\n5F40\n4560\nBEA0\nENDCHAR\nSTARTCHAR U_5D51\nENCODING 23889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nABC0\nAA40\nABC0\nA900\nABE0\nFEA0\n8B60\n03A0\n0040\nENDCHAR\nSTARTCHAR U_5D52\nENCODING 23890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1080\n1F80\n0000\n79E0\n4920\n79E0\n0200\n4220\n4220\n7FE0\nENDCHAR\nSTARTCHAR U_5D53\nENCODING 23891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0000\n3F80\n2080\n3F80\n0000\nFBE0\n8A20\nFBE0\nENDCHAR\nSTARTCHAR U_5D54\nENCODING 23892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0000\n3F80\n2480\n2E80\n2480\nFFE0\n4480\n5300\n60E0\nENDCHAR\nSTARTCHAR U_5D55\nENCODING 23893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2660\n25A0\nAE60\nAC20\nABE0\nAD40\nAA20\nFFE0\n8A40\n0180\n0660\nENDCHAR\nSTARTCHAR U_5D56\nENCODING 23894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nA980\nAAC0\nACA0\nABC0\nAA40\nBBC0\nEA40\n03C0\n0FE0\nENDCHAR\nSTARTCHAR U_5D57\nENCODING 23895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0100\n7FE0\n4100\n7F00\n4920\n5D40\n6880\nCD40\n3020\nENDCHAR\nSTARTCHAR U_5D58\nENCODING 23896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n27E0\nA940\nAFE0\nAC20\nA880\nAFE0\nF880\n89C0\n02A0\n04A0\nENDCHAR\nSTARTCHAR U_5D59\nENCODING 23897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n7FE0\n0800\n7240\n1140\nFE40\n1140\n3860\n57C0\n9040\n1040\nENDCHAR\nSTARTCHAR U_5D5A\nENCODING 23898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n4200\n7BE0\n8520\n7900\n2100\n7900\n2280\n2A40\n3420\nENDCHAR\nSTARTCHAR U_5D5B\nENCODING 23899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0C00\n3300\nCEE0\n7C40\n4540\n7D40\n4540\n7C40\n44C0\nENDCHAR\nSTARTCHAR U_5D5C\nENCODING 23900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3F80\n0400\n7FC0\n1100\nFFE0\n0080\n3C80\n2480\n3C80\n0180\nENDCHAR\nSTARTCHAR U_5D5D\nENCODING 23901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n2340\nAFE0\nA980\nAB40\nAD20\nAFE0\nFA40\n8A80\n0140\n0620\nENDCHAR\nSTARTCHAR U_5D5E\nENCODING 23902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n3180\nDF60\n0400\nFFC0\n2480\n4C40\n2080\nAAA0\nAAA0\nFBE0\nENDCHAR\nSTARTCHAR U_5D5F\nENCODING 23903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3F80\n0000\n7FE0\n4A00\n57C0\n7100\n57C0\n5100\n9100\n9FE0\nENDCHAR\nSTARTCHAR U_5D60\nENCODING 23904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n22A0\nA940\nAA40\nAF80\nA920\nAFE0\nF900\n07E0\n0140\n0620\nENDCHAR\nSTARTCHAR U_5D61\nENCODING 23905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n1100\n2880\nDF60\n0100\n7BC0\n8C40\n5AC0\n2940\n4A40\nENDCHAR\nSTARTCHAR U_5D62\nENCODING 23906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n2240\nACA0\nABC0\nAA40\nABC0\nAA40\nFBE0\n8620\n0BE0\n1220\nENDCHAR\nSTARTCHAR U_5D63\nENCODING 23907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2FE0\nA8A0\nAFE0\nA8A0\nAFE0\nA880\nFBE0\n8A20\n0BE0\n1220\nENDCHAR\nSTARTCHAR U_5D64\nENCODING 23908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nAAA0\n71C0\n2080\n5140\n8A20\nFFE0\n8420\n2480\n2480\n3F80\nENDCHAR\nSTARTCHAR U_5D65\nENCODING 23909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2740\n25E0\nAB40\nA9E0\nAA40\nAC40\nAFE0\nF900\n8B80\n0540\n0920\nENDCHAR\nSTARTCHAR U_5D66\nENCODING 23910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n24A0\nA7E0\nA800\nAFE0\nA800\nABE0\nAA20\nFBE0\n0140\n07E0\nENDCHAR\nSTARTCHAR U_5D67\nENCODING 23911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2DE0\n28A0\nAAA0\nAEA0\nA920\nAFE0\nA920\nFFE0\n8920\n0FE0\n0820\nENDCHAR\nSTARTCHAR U_5D68\nENCODING 23912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n23E0\nAA20\nABE0\nAA00\nABE0\nAA00\nFBE0\n0520\n0AA0\n0AE0\nENDCHAR\nSTARTCHAR U_5D69\nENCODING 23913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7FE0\n0200\n7FE0\n1080\n1F80\n0000\n7FE0\n4920\n4F20\n4060\nENDCHAR\nSTARTCHAR U_5D6A\nENCODING 23914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2000\nABC0\nAA40\nAFE0\nA820\nBBA0\nCAA0\n0BA0\n0860\nENDCHAR\nSTARTCHAR U_5D6B\nENCODING 23915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nAFE0\nAA40\nAC80\nAFE0\nAA40\nFA40\n8C80\n05A0\n07E0\nENDCHAR\nSTARTCHAR U_5D6C\nENCODING 23916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0800\n7FC0\n4440\n7FC0\n4440\n7FC0\n1480\n2540\nC3E0\nENDCHAR\nSTARTCHAR U_5D6D\nENCODING 23917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2240\nA980\nAFE0\nAD40\nBBE0\nE900\n89C0\n0240\n0480\nENDCHAR\nSTARTCHAR U_5D6E\nENCODING 23918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2100\nABC0\nAA40\nABC0\nAA40\nFBC0\n0A40\n07E0\n0240\nENDCHAR\nSTARTCHAR U_5D6F\nENCODING 23919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27E0\nA900\nABC0\nA900\nAFE0\nAA00\nFBC0\n8C80\n0880\n17E0\nENDCHAR\nSTARTCHAR U_5D70\nENCODING 23920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n2280\nA7E0\nAAA0\nAFE0\nAAA0\nBFE0\nEA80\n86C0\n0AA0\nENDCHAR\nSTARTCHAR U_5D71\nENCODING 23921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nAC20\nAA40\nADA0\nAA40\nAC20\nFBC0\n8A40\n0240\n03C0\nENDCHAR\nSTARTCHAR U_5D72\nENCODING 23922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23E0\nAA20\nABE0\nAA20\nABE0\nA900\nFFE0\n8B80\n0540\n0920\nENDCHAR\nSTARTCHAR U_5D73\nENCODING 23923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n1080\n7FC0\n0400\nFFE0\n0800\n1780\n2200\nCFE0\nENDCHAR\nSTARTCHAR U_5D74\nENCODING 23924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2380\nA940\nAE80\nAA40\nAFE0\nAA40\nABC0\nFA40\n03C0\n0240\nENDCHAR\nSTARTCHAR U_5D75\nENCODING 23925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0100\nF7E0\n9100\nFFE0\n9080\n9FE0\nF480\n9280\n0180\nENDCHAR\nSTARTCHAR U_5D76\nENCODING 23926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2760\n2120\n2360\nAA40\nAB60\nADA0\nAB60\nA920\nFB60\n05A0\n0360\nENDCHAR\nSTARTCHAR U_5D77\nENCODING 23927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2940\nA2A0\nAAA0\nAC80\nA880\nAAE0\nFA80\n8A80\n0B80\n0CE0\nENDCHAR\nSTARTCHAR U_5D78\nENCODING 23928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n2480\n4480\nAB40\n4220\nD200\n5BC0\n5600\n61E0\nENDCHAR\nSTARTCHAR U_5D79\nENCODING 23929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0440\nF7C0\n1100\nF7C0\n8540\nF540\n17C0\n1140\n6FA0\nENDCHAR\nSTARTCHAR U_5D7A\nENCODING 23930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n25A0\nAB60\nADA0\nA880\nAB40\nACA0\nFB40\n89A0\n0040\n0780\nENDCHAR\nSTARTCHAR U_5D7B\nENCODING 23931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23E0\nAA80\nABE0\nAAA0\nABE0\nAAA0\nF5E0\n06A0\n0880\n02A0\nENDCHAR\nSTARTCHAR U_5D7C\nENCODING 23932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nA940\nAFE0\nA880\nAA80\nABE0\nFC80\n89E0\n0880\n13E0\nENDCHAR\nSTARTCHAR U_5D7D\nENCODING 23933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\nA540\nA760\nA800\nAFE0\nA920\nAFC0\nF940\n89C0\n0100\nENDCHAR\nSTARTCHAR U_5D7E\nENCODING 23934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n1100\n7F80\n1080\n7DE0\n1B00\nECE0\n3680\n0900\n7E00\nENDCHAR\nSTARTCHAR U_5D7F\nENCODING 23935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0100\nF7C0\n2440\n27C0\n2440\n27C0\n2440\nA7C0\n6C60\nENDCHAR\nSTARTCHAR U_5D80\nENCODING 23936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\n27E0\nAD20\nABA0\nAD40\nAFE0\nFA00\n8FE0\n0020\n00C0\nENDCHAR\nSTARTCHAR U_5D81\nENCODING 23937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nA540\nAFE0\nAD40\nAFE0\nA920\nF7E0\n8480\n0380\n1C60\nENDCHAR\nSTARTCHAR U_5D82\nENCODING 23938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2280\nAFE0\nAA40\nABC0\nAA40\nABC0\nF900\n8FE0\n0100\nENDCHAR\nSTARTCHAR U_5D83\nENCODING 23939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22E0\n2F80\nAA80\nAFE0\nAAA0\nAFA0\nAAA0\nF7A0\n02A0\n0FA0\n0220\nENDCHAR\nSTARTCHAR U_5D84\nENCODING 23940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7FE0\n1020\nFFC0\n5500\n7DE0\n5540\n7D40\n1140\nFE40\n1440\nENDCHAR\nSTARTCHAR U_5D85\nENCODING 23941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFA00\n23E0\nFA40\n2540\n3880\n4B40\n9420\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5D86\nENCODING 23942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2A80\nAFE0\nAAA0\nAFE0\nAAA0\nAFE0\nFC40\n87C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_5D87\nENCODING 23943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\nABC0\nAA40\nABC0\nA800\nAEE0\nFAA0\n8EE0\n0800\n0FE0\nENDCHAR\nSTARTCHAR U_5D88\nENCODING 23944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n5100\n57E0\n7A80\n1540\nFFE0\n5440\n5240\n5040\n90C0\nENDCHAR\nSTARTCHAR U_5D89\nENCODING 23945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0500\nE500\nAFE0\nB900\nAFC0\nA900\nEFC0\nA900\n0FE0\nENDCHAR\nSTARTCHAR U_5D8A\nENCODING 23946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n2280\n2480\nFFE0\n2480\n37E0\nE480\n27E0\n2480\n67E0\nENDCHAR\nSTARTCHAR U_5D8B\nENCODING 23947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n23C0\nAA40\nABC0\nAA40\nABE0\nAA00\nFBE0\n0020\n0AA0\n0060\nENDCHAR\nSTARTCHAR U_5D8C\nENCODING 23948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0800\n3F80\n2880\n2480\n3FE0\n2000\n3FE0\n2A20\n5560\nENDCHAR\nSTARTCHAR U_5D8D\nENCODING 23949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\nADA0\nAB60\nACA0\nA900\nABE0\nFA20\n8BE0\n0220\n03E0\nENDCHAR\nSTARTCHAR U_5D8E\nENCODING 23950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0000\n7C40\n47E0\n7C40\n4140\n7C40\n4A40\n98C0\nENDCHAR\nSTARTCHAR U_5D8F\nENCODING 23951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0000\n7FE0\n4000\n5EE0\n4C20\n5EE0\n9280\n9EE0\nENDCHAR\nSTARTCHAR U_5D90\nENCODING 23952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n7F80\n0400\nEFE0\nB440\nC380\nAD60\nC900\n8FE0\n8100\n8FE0\nENDCHAR\nSTARTCHAR U_5D91\nENCODING 23953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nAFE0\nAAA0\nABE0\nAA80\nADA0\nF2C0\n0580\n02C0\n0DA0\nENDCHAR\nSTARTCHAR U_5D92\nENCODING 23954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nAFE0\nAAA0\nA920\nAFE0\nAA40\nABC0\nFA40\n83C0\n0240\nENDCHAR\nSTARTCHAR U_5D93\nENCODING 23955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n27A0\nAD40\nAFE0\nAB40\nAD20\nABE0\nAAA0\nFBE0\n82A0\n03E0\nENDCHAR\nSTARTCHAR U_5D94\nENCODING 23956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n2200\n53E0\nFC20\n2140\nF900\n2900\nB180\n6240\nFC20\nENDCHAR\nSTARTCHAR U_5D95\nENCODING 23957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n23E0\nAE80\nABE0\nAA80\nABE0\nAA80\nABE0\nFD40\n8AA0\n0AA0\nENDCHAR\nSTARTCHAR U_5D96\nENCODING 23958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n2240\nA7E0\nAA40\nABC0\nA800\nAF60\nF9A0\n0560\n03A0\n0D60\nENDCHAR\nSTARTCHAR U_5D97\nENCODING 23959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2760\nAAC0\nAD40\nA8A0\nAFE0\nAA20\nFFC0\n8A40\n0440\n08C0\nENDCHAR\nSTARTCHAR U_5D98\nENCODING 23960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n7F80\n2240\n2FE0\nF240\n2180\n7560\n6FC0\nA480\n2320\n2CE0\nENDCHAR\nSTARTCHAR U_5D99\nENCODING 23961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n2340\nAFE0\nA940\nAB20\nAC40\nAFE0\nF940\n8DE0\n0240\n0C40\nENDCHAR\nSTARTCHAR U_5D9A\nENCODING 23962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0400\nFFE0\n5140\n3F80\nD160\n1F00\n0400\n3580\nCC60\nENDCHAR\nSTARTCHAR U_5D9B\nENCODING 23963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nAAA0\nAC40\nABE0\nAA40\nABC0\nAA40\nFBC0\n04A0\n09A0\nENDCHAR\nSTARTCHAR U_5D9C\nENCODING 23964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8420\nFFE0\nA280\nFFE0\n3180\n52A0\nBEE0\n2040\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_5D9D\nENCODING 23965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2740\n25A0\nAA40\nAC20\nABC0\nA800\nABC0\nAA40\nFBC0\n0280\n0FE0\nENDCHAR\nSTARTCHAR U_5D9E\nENCODING 23966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA500\nAFE0\nC440\nA7C0\nA440\nE7C0\n8440\n44C0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5D9F\nENCODING 23967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nAA80\nAFE0\nAAA0\nAD60\nA820\nAFE0\nFA40\n0140\n00C0\nENDCHAR\nSTARTCHAR U_5DA0\nENCODING 23968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nAFE0\nAA80\nAFC0\nAAA0\nAFE0\nAAA0\nFBA0\n8820\n0860\nENDCHAR\nSTARTCHAR U_5DA1\nENCODING 23969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0000\n7FE0\n5480\n7EE0\n49A0\n6A80\n7E80\n8940\n9220\nENDCHAR\nSTARTCHAR U_5DA2\nENCODING 23970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nA900\nAFE0\nAA40\nAFE0\nAA40\nFFE0\n8A80\n02A0\n0CE0\nENDCHAR\nSTARTCHAR U_5DA3\nENCODING 23971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n2200\n3FE0\n6200\nBFC0\n2200\n3FC0\n2200\n3FE0\nC920\nENDCHAR\nSTARTCHAR U_5DA4\nENCODING 23972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0400\n7FC0\n0400\nFFE0\n2040\nFFE0\n1200\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_5DA5\nENCODING 23973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2880\n2DC0\nAA80\nAFE0\nAA40\nAA40\nFFC0\n8A40\n14A0\n2920\nENDCHAR\nSTARTCHAR U_5DA6\nENCODING 23974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2440\n2FE0\nAA40\nAFE0\nA800\nABC0\nF800\n8BC0\n1240\n23C0\nENDCHAR\nSTARTCHAR U_5DA7\nENCODING 23975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nAFE0\nA900\nAFE0\nAA80\nAFE0\nA900\nFFE0\n8100\n0100\nENDCHAR\nSTARTCHAR U_5DA8\nENCODING 23976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AC0\n4440\n7BC0\n4A40\n75C0\n4A40\nFFE0\n8020\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5DA9\nENCODING 23977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nAAA0\nAFE0\nAAA0\nAFE0\nA800\nFFE0\n9AA0\n0A40\n1720\nENDCHAR\nSTARTCHAR U_5DAA\nENCODING 23978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n2A80\nFFE0\n1100\n7FC0\n0400\nFFE0\n0400\n3580\nC460\nENDCHAR\nSTARTCHAR U_5DAB\nENCODING 23979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\n2280\nAFE0\nAA80\nAFE0\nA900\nAFE0\nF900\n0FE0\n0540\n0920\nENDCHAR\nSTARTCHAR U_5DAC\nENCODING 23980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nA900\nAFE0\nAB40\nAAA0\nAFE0\nFAA0\n8F40\n02E0\n0720\nENDCHAR\nSTARTCHAR U_5DAD\nENCODING 23981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n4100\nF7E0\n9280\nF100\n8FE0\nF100\n97C0\nF100\n9100\nENDCHAR\nSTARTCHAR U_5DAE\nENCODING 23982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n2240\nAC20\nABC0\nA800\nAFE0\nA920\nFFE0\n8240\n04A0\n0920\nENDCHAR\nSTARTCHAR U_5DAF\nENCODING 23983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8420\nFFE0\n4900\nFD40\n4D20\n7BE0\n4920\n7940\n4CA0\nF960\n0A20\nENDCHAR\nSTARTCHAR U_5DB0\nENCODING 23984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nAEA0\nAB60\nAE40\nAAE0\nAB40\nFFE0\n8A40\n0A40\n1240\nENDCHAR\nSTARTCHAR U_5DB1\nENCODING 23985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nABC0\nAA40\nABC0\nAA40\nABE0\nACA0\nF960\n8FA0\n0060\nENDCHAR\nSTARTCHAR U_5DB2\nENCODING 23986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n7FE0\n1200\n3FC0\n6200\nBFC0\n2200\n79E0\n4920\n4F20\n4060\nENDCHAR\nSTARTCHAR U_5DB3\nENCODING 23987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3F80\n0000\nFFE0\n2C80\nD700\n2AE0\n2680\n7BC0\n2080\nFBE0\nENDCHAR\nSTARTCHAR U_5DB4\nENCODING 23988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7FC0\n64C0\n5540\n7FC0\n5540\nFFE0\n1500\nE4E0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5DB5\nENCODING 23989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nAFE0\nAA80\nAEE0\nAA80\nAEE0\nAA80\nFEE0\n8A80\n0280\nENDCHAR\nSTARTCHAR U_5DB6\nENCODING 23990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n3FC0\n5540\n9F40\n20E0\n5F20\nC0A0\n5CA0\n5440\n56A0\n6520\nENDCHAR\nSTARTCHAR U_5DB7\nENCODING 23991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n7FE0\n4800\n53E0\n7D40\n43E0\nF8A0\n2280\nFEE0\n5580\n88E0\nENDCHAR\nSTARTCHAR U_5DB8\nENCODING 23992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\nAA40\nADA0\nAFE0\nA920\nAFE0\nF900\n8B80\n0540\n0920\nENDCHAR\nSTARTCHAR U_5DB9\nENCODING 23993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nA900\nAFC0\nA800\nAFE0\nA920\nFFE0\n0E40\n0B40\n0EC0\nENDCHAR\nSTARTCHAR U_5DBA\nENCODING 23994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8420\nFFE0\n2100\n57C0\nAC40\n27C0\nFC40\n17C0\nA440\n47C0\n2820\nENDCHAR\nSTARTCHAR U_5DBB\nENCODING 23995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n3FC0\n7980\n2140\nFFE0\n5140\n7D40\nD080\n7CA0\n5160\n7E20\nENDCHAR\nSTARTCHAR U_5DBC\nENCODING 23996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E60\n2B20\nAE60\nABA0\nA8A0\nAEE0\nAAA0\nFFE0\n8A80\n0440\n0820\nENDCHAR\nSTARTCHAR U_5DBD\nENCODING 23997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n3FC0\n4480\n2EC0\n60A0\nBFE0\n2080\n6E80\nAA80\n2F40\nCA20\nENDCHAR\nSTARTCHAR U_5DBE\nENCODING 23998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\n23C0\nA880\nAFE0\nA940\nA840\nFBC0\n0520\n0AA0\n03C0\nENDCHAR\nSTARTCHAR U_5DBF\nENCODING 23999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n2FE0\nA920\nADA0\nA920\nABC0\nF080\n0FE0\n0AA0\n0A60\nENDCHAR\nSTARTCHAR U_5DC0\nENCODING 24000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n1180\n5540\n9520\n1BC0\nFD20\n4940\n7CA0\n4960\n7C20\nENDCHAR\nSTARTCHAR U_5DC1\nENCODING 24001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2A40\nAFE0\nAA40\nABE0\nAAA0\nABE0\nF880\n17E0\n14A0\n25A0\nENDCHAR\nSTARTCHAR U_5DC2\nENCODING 24002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8420\nFFE0\n2440\n7FC0\nC400\n7FC0\n4400\nFFE0\nAAA0\nCA60\n8EE0\nENDCHAR\nSTARTCHAR U_5DC3\nENCODING 24003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7FE0\n1100\n7DE0\n2900\nFFE0\n4420\n7DE0\n45C0\n7D20\n4DE0\nENDCHAR\nSTARTCHAR U_5DC4\nENCODING 24004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\nAA80\nAFE0\nA820\nAEE0\nAA80\nAEE0\nFA80\n0EA0\n12E0\nENDCHAR\nSTARTCHAR U_5DC5\nENCODING 24005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8420\nFFE0\n2000\nFFE0\n4900\n6BE0\n5A20\n4AA0\nFEA0\n4940\n8620\nENDCHAR\nSTARTCHAR U_5DC6\nENCODING 24006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nAA40\nACA0\nAFE0\nAA60\nABC0\nF800\n87E0\n0420\n07E0\nENDCHAR\nSTARTCHAR U_5DC7\nENCODING 24007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2760\n2440\nAF60\nA9C0\nAF40\nA860\nAF40\nF940\n8F60\n15A0\n2F20\nENDCHAR\nSTARTCHAR U_5DC8\nENCODING 24008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n5200\nFBE0\n5520\nFB60\nA920\nFFE0\n2120\nFBA0\n2560\nENDCHAR\nSTARTCHAR U_5DC9\nENCODING 24009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nAFC0\nA880\nAFC0\nAAA0\nAFE0\nF940\n8FC0\n02A0\n0CE0\nENDCHAR\nSTARTCHAR U_5DCA\nENCODING 24010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nAEE0\nAAA0\nAA40\nADA0\nAA00\nAFE0\nFA40\n0180\n0E60\nENDCHAR\nSTARTCHAR U_5DCB\nENCODING 24011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7FE0\n4840\n7FC0\n4440\n7FE0\n16A0\n53E0\n5AA0\n52E0\nFC80\nENDCHAR\nSTARTCHAR U_5DCC\nENCODING 24012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n1080\n7FE0\n4900\n7FC0\n5480\n5580\n5CC0\n8520\nENDCHAR\nSTARTCHAR U_5DCD\nENCODING 24013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0900\nF7E0\n2520\nFFE0\nAD20\nFFE0\n52C0\n32A0\nCC60\nENDCHAR\nSTARTCHAR U_5DCE\nENCODING 24014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nABE0\nAAA0\nAFE0\nAAC0\nBFA0\nCA80\n1300\n06C0\n1820\nENDCHAR\nSTARTCHAR U_5DCF\nENCODING 24015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2480\nAEE0\nAAA0\nAFE0\nA900\nAFE0\nF900\n8FC0\n0900\n0FE0\nENDCHAR\nSTARTCHAR U_5DD0\nENCODING 24016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8440\nFFC0\n2000\nF7C0\n5640\n7540\n97C0\nF340\nBE40\n93E0\n9C40\nENDCHAR\nSTARTCHAR U_5DD1\nENCODING 24017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A40\n2FE0\nA240\nAFE0\nA540\nBFE0\nA840\nFFC0\n8840\n0FC0\n1860\nENDCHAR\nSTARTCHAR U_5DD2\nENCODING 24018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n8E80\nE1C0\n4E80\nF0E0\n5F40\nAAA0\n0E00\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_5DD3\nENCODING 24019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n2800\nB3E0\nA480\nBDC0\nA940\nB9C0\nFD40\n29C0\nCA20\nENDCHAR\nSTARTCHAR U_5DD4\nENCODING 24020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n2000\nFFE0\n4A40\n6BC0\n5A40\n4BC0\nFE40\n53C0\n8E60\nENDCHAR\nSTARTCHAR U_5DD5\nENCODING 24021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2480\nAEA0\nABE0\nAE40\nABE0\nAC80\nFFE0\n8100\n0FE0\n0300\nENDCHAR\nSTARTCHAR U_5DD6\nENCODING 24022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8420\nFFE0\n4A40\nFFE0\n8900\nBDE0\nA520\nBF40\nA480\nFD40\n8620\nENDCHAR\nSTARTCHAR U_5DD7\nENCODING 24023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n2FE0\n2880\nAFE0\nAAA0\nAEA0\nFAA0\n8F40\n12A0\n12A0\nENDCHAR\nSTARTCHAR U_5DD8\nENCODING 24024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\nAA40\nAFE0\nAA40\nAFC0\nAA40\nFF40\n8940\n1FA0\n2AA0\nENDCHAR\nSTARTCHAR U_5DD9\nENCODING 24025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n2100\nABE0\nAAA0\nAFE0\nAA80\nBBE0\nC640\n0180\n0E60\nENDCHAR\nSTARTCHAR U_5DDA\nENCODING 24026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n3FC0\n1080\n7CA0\n57E0\n7C80\n5080\n7D40\n7540\nAD20\nB620\nENDCHAR\nSTARTCHAR U_5DDB\nENCODING 24027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2220\n4440\n4440\n8880\n8880\n4440\n4440\n2220\n2220\n0000\nENDCHAR\nSTARTCHAR U_5DDC\nENCODING 24028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n0880\n1100\n2200\n4400\n2200\n1100\n1100\n0880\n0CC0\n0880\nENDCHAR\nSTARTCHAR U_5DDD\nENCODING 24029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n2220\n2220\n2220\n2220\n2220\n2220\n2220\n2220\n4020\n8020\nENDCHAR\nSTARTCHAR U_5DDE\nENCODING 24030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n1220\n1220\n5B20\n56A0\n92A0\n1220\n1220\n1220\n2220\n4020\nENDCHAR\nSTARTCHAR U_5DDF\nENCODING 24031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2000\n2000\n3FC0\n0000\n2480\n2480\n44A0\n44A0\n8460\nENDCHAR\nSTARTCHAR U_5DE0\nENCODING 24032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2480\n4900\n4900\n2480\n2480\n7FC0\n0400\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5DE1\nENCODING 24033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n22A0\n2540\n0540\nEA80\n2540\n2540\n22A0\n22A0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_5DE2\nENCODING 24034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n2480\n1240\n3FC0\n2440\n3FC0\n2440\n7FE0\n0400\n3580\nC460\nENDCHAR\nSTARTCHAR U_5DE3\nENCODING 24035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2500\n7FC0\n4440\n7FC0\n4440\n7FC0\n0400\nFFE0\n2480\n4460\nENDCHAR\nSTARTCHAR U_5DE4\nENCODING 24036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n4900\n2480\n7F80\n5480\n4A80\n7F80\n4A80\n6C80\n4AA0\n6C40\nENDCHAR\nSTARTCHAR U_5DE5\nENCODING 24037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n0400\n0400\n0400\n0400\n0400\n0400\n0400\nFFE0\n0000\nENDCHAR\nSTARTCHAR U_5DE6\nENCODING 24038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\nFFE0\n0800\n1000\n1FC0\n2200\n2200\n4200\n8200\n3FE0\nENDCHAR\nSTARTCHAR U_5DE7\nENCODING 24039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF900\n2100\n2200\n23E0\n2020\n3820\nC020\n0020\n0240\n0180\nENDCHAR\nSTARTCHAR U_5DE8\nENCODING 24040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4000\n4000\n7F80\n4080\n4080\n7F80\n4000\n4000\n4000\n7FE0\nENDCHAR\nSTARTCHAR U_5DE9\nENCODING 24041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nFC80\n2480\n2480\n2680\n2580\n2480\n3480\nC4A0\n08A0\n3060\nENDCHAR\nSTARTCHAR U_5DEA\nENCODING 24042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4000\n7F80\n4080\n7F80\n4000\n7FC0\n0000\nFFC0\n0040\n0040\nENDCHAR\nSTARTCHAR U_5DEB\nENCODING 24043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n2480\n2480\n4500\n6580\n9640\n9640\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_5DEC\nENCODING 24044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF780\n2480\n24A0\n3860\nC400\n1F00\n0400\nFFE0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_5DED\nENCODING 24045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2120\n3A20\nC460\n0400\n7FC0\n0400\nFFE0\n1200\nE1E0\nENDCHAR\nSTARTCHAR U_5DEE\nENCODING 24046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n0900\nFFE0\n0400\n7FC0\n0800\nFFE0\n1000\n2F80\n4200\nBFE0\nENDCHAR\nSTARTCHAR U_5DEF\nENCODING 24047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n17E0\n2100\n5240\n8FA0\nF020\n2540\n2540\n3D40\nC940\n1160\nENDCHAR\nSTARTCHAR U_5DF0\nENCODING 24048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n57E0\n5500\nAA40\nABA0\n4400\nFD40\n2540\n2540\n3D40\nC960\nENDCHAR\nSTARTCHAR U_5DF1\nENCODING 24049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFF80\n0080\n0080\n7F80\n4000\n4000\n4000\n4020\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_5DF2\nENCODING 24050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7F80\n0080\n0080\n4080\n7F80\n4000\n4020\n4020\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_5DF3\nENCODING 24051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n4080\n4080\n4080\n7F80\n4000\n4000\n4020\n4020\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_5DF4\nENCODING 24052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n4440\n4440\n4440\n7FC0\n4000\n4000\n4020\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_5DF5\nENCODING 24053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n7E00\n4000\n7FE0\n4000\n5FC0\n5240\n5240\n5FC0\n5020\n8FE0\nENDCHAR\nSTARTCHAR U_5DF6\nENCODING 24054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n4A40\n4A40\n4A40\n9BC0\n0240\nFA00\n8A00\n8A20\n8A20\nF9E0\nENDCHAR\nSTARTCHAR U_5DF7\nENCODING 24055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1100\nFFE0\n1100\n3F80\nD160\n1F00\n1040\n1040\n1FC0\nENDCHAR\nSTARTCHAR U_5DF8\nENCODING 24056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n9240\n9240\nBA40\nABC0\nAA40\nBA00\n9200\n9200\n9220\nF9E0\nENDCHAR\nSTARTCHAR U_5DF9\nENCODING 24057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F00\n0240\n7580\n2480\nDFC0\n0000\n3F80\n0080\n3FA0\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_5DFA\nENCODING 24058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4200\n3DC0\n0000\nFFE0\n0000\n1100\n20C0\nC040\nENDCHAR\nSTARTCHAR U_5DFB\nENCODING 24059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n0D00\n3F80\n0400\n7FE0\n1080\n3F40\nC120\n1F00\n1080\n1F80\nENDCHAR\nSTARTCHAR U_5DFC\nENCODING 24060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n7FC0\n4020\n7FE0\n0000\n7A20\n4BC0\n4A00\n7A20\n01E0\nENDCHAR\nSTARTCHAR U_5DFD\nENCODING 24061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n9240\nF3C0\n8A20\nFBE0\n1100\n7FC0\n1100\nFFE0\n0900\nF0E0\nENDCHAR\nSTARTCHAR U_5DFE\nENCODING 24062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n4440\n4440\n4440\n4440\n4540\n4480\n0400\n0400\nENDCHAR\nSTARTCHAR U_5DFF\nENCODING 24063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n0400\n7FC0\n4440\n4440\n4440\n45C0\n0400\n0400\nENDCHAR\nSTARTCHAR U_5E00\nENCODING 24064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n0400\n0400\n7FC0\n4440\n4440\n4540\n4480\n0400\n0400\nENDCHAR\nSTARTCHAR U_5E01\nENCODING 24065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\nFE00\n0400\n7FC0\n4440\n4440\n4440\n4540\n4480\n0400\n0400\nENDCHAR\nSTARTCHAR U_5E02\nENCODING 24066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0400\n3FC0\n2440\n2440\n2440\n2540\n2480\n0400\nENDCHAR\nSTARTCHAR U_5E03\nENCODING 24067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\nFFE0\n1200\n1200\n3FC0\n5240\n9240\n1240\n12C0\n0200\nENDCHAR\nSTARTCHAR U_5E04\nENCODING 24068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF880\nA880\nA880\nA880\nA880\nA880\nB880\n2080\n2280\n2100\nENDCHAR\nSTARTCHAR U_5E05\nENCODING 24069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n97E0\n9520\n9520\n9520\n9520\n9520\n2560\n4100\n8100\nENDCHAR\nSTARTCHAR U_5E06\nENCODING 24070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFA40\nAA40\nAB40\nAAC0\nAA40\nAA40\n2240\n2440\n2860\nENDCHAR\nSTARTCHAR U_5E07\nENCODING 24071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0440\nFFE0\n0440\n7FC0\n0400\n7FC0\n4440\n44C0\n0400\nENDCHAR\nSTARTCHAR U_5E08\nENCODING 24072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nA100\nA100\nAFE0\nA920\nA920\nA920\n2920\n2960\n4100\n8100\nENDCHAR\nSTARTCHAR U_5E09\nENCODING 24073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\nFA40\nAA40\nAC20\nABC0\nA940\nA940\nBA40\n2240\n2CC0\nENDCHAR\nSTARTCHAR U_5E0A\nENCODING 24074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n22A0\nFAA0\nAAA0\nAAA0\nABE0\nAA20\nBA00\n2220\n2220\n21E0\nENDCHAR\nSTARTCHAR U_5E0B\nENCODING 24075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4400\n7FE0\n5200\n6920\n04E0\n7FC0\n4440\n4440\n45C0\n0400\nENDCHAR\nSTARTCHAR U_5E0C\nENCODING 24076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n19C0\n0600\n39C0\n0400\n7FE0\n0A00\n1FC0\n7240\n1240\n12C0\n0200\nENDCHAR\nSTARTCHAR U_5E0D\nENCODING 24077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4040\n7FC0\n4200\n5FC0\n5240\n5240\n5240\n52C0\n8200\nENDCHAR\nSTARTCHAR U_5E0E\nENCODING 24078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFBE0\nAAA0\nAAA0\nA880\nA880\nB980\n2280\n24A0\n2860\nENDCHAR\nSTARTCHAR U_5E0F\nENCODING 24079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\nAFE0\nA900\nAFE0\nA920\nA920\n2160\n2100\n2100\nENDCHAR\nSTARTCHAR U_5E10\nENCODING 24080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\nFA80\nAB00\nAA00\nAFE0\nAA80\nBA80\n2240\n22C0\n2320\nENDCHAR\nSTARTCHAR U_5E11\nENCODING 24081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n5240\n5180\n3080\n6D40\n8620\n7FC0\n4440\n45C0\n0400\nENDCHAR\nSTARTCHAR U_5E12\nENCODING 24082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\n2480\n7FE0\nA200\n25A0\n2460\n7FC0\n4440\n4440\n44C0\n0400\nENDCHAR\nSTARTCHAR U_5E13\nENCODING 24083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\nA900\nAFC0\nA900\nAB80\nBB40\n2540\n2920\n2100\nENDCHAR\nSTARTCHAR U_5E14\nENCODING 24084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFBE0\nAAA0\nAA80\nABE0\nAA20\nBB40\n2280\n2540\n2A20\nENDCHAR\nSTARTCHAR U_5E15\nENCODING 24085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2100\nFBE0\nAA20\nAA20\nABE0\nAA20\nBA20\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_5E16\nENCODING 24086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nF8E0\nA880\nA880\nABE0\nAA20\nBA20\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_5E17\nENCODING 24087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\nFFE0\nA900\nA9E0\nA920\nA9A0\nBA40\n22C0\n2520\n2A20\nENDCHAR\nSTARTCHAR U_5E18\nENCODING 24088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2080\n4440\nBFA0\n2480\n2480\n2480\n2580\n0400\nENDCHAR\nSTARTCHAR U_5E19\nENCODING 24089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFBC0\nAC80\nA880\nAFE0\nA880\nB940\n2140\n2220\n2420\nENDCHAR\nSTARTCHAR U_5E1A\nENCODING 24090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0080\n1F80\n0080\nFFE0\n8420\n3F80\n2480\n2480\n2580\n0400\nENDCHAR\nSTARTCHAR U_5E1B\nENCODING 24091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3F80\n0400\n7FC0\n4440\n45C0\n0400\nENDCHAR\nSTARTCHAR U_5E1C\nENCODING 24092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\nFA20\nAA20\nAA20\nABE0\nAA20\nB800\n2140\n2220\n2420\nENDCHAR\nSTARTCHAR U_5E1D\nENCODING 24093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n0A00\nFFE0\n8420\nBFA0\n2480\n2480\n2580\n0400\nENDCHAR\nSTARTCHAR U_5E1E\nENCODING 24094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nFBE0\nAA20\nAA20\nABE0\nAA20\nBA20\n2220\n2220\n23E0\nENDCHAR\nSTARTCHAR U_5E1F\nENCODING 24095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2A80\n4A40\n9620\n2400\n7FC0\n4440\n4440\n45C0\n0400\nENDCHAR\nSTARTCHAR U_5E20\nENCODING 24096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1DC0\n1040\n1DC0\n1040\n1FC0\n0200\n3FE0\n2220\n2220\n2260\n0200\nENDCHAR\nSTARTCHAR U_5E21\nENCODING 24097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2420\n2240\nF800\nAFE0\nAA40\nAA40\nAFE0\nBA40\n2240\n2440\n2840\nENDCHAR\nSTARTCHAR U_5E22\nENCODING 24098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2180\nFA40\nAC20\nABC0\nA800\nABE0\nAA20\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_5E23\nENCODING 24099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2900\nFFC0\n1000\nFFE0\n2480\n4440\nFFE0\n4440\n45C0\n0400\nENDCHAR\nSTARTCHAR U_5E24\nENCODING 24100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n4A20\nD220\n2BE0\n4220\n8400\n7FC0\n4440\n45C0\n0400\nENDCHAR\nSTARTCHAR U_5E25\nENCODING 24101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF100\n97E0\n9520\nF520\n8520\nF520\n9520\n9560\nF100\n9100\nENDCHAR\nSTARTCHAR U_5E26\nENCODING 24102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nFFE0\n2480\n2480\nFFE0\n8420\nBFA0\n2480\n2480\n2580\n0400\nENDCHAR\nSTARTCHAR U_5E27\nENCODING 24103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n20E0\nF880\nABE0\nAA20\nAAA0\nAAA0\nAAA0\nB880\n2140\n2620\nENDCHAR\nSTARTCHAR U_5E28\nENCODING 24104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2420\n2240\n2000\nFBE0\nAA20\nAA20\nABE0\nBA80\n2280\n24A0\n2860\nENDCHAR\nSTARTCHAR U_5E29\nENCODING 24105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n21C0\nF880\nABE0\nAA20\nABE0\nAA20\nABE0\n2220\n2220\n22E0\nENDCHAR\nSTARTCHAR U_5E2A\nENCODING 24106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n2400\nFDC0\nAC00\nAFE0\nAD40\nBD60\nA540\n2920\n31A0\nENDCHAR\nSTARTCHAR U_5E2B\nENCODING 24107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF100\n9100\n97E0\nF520\n8520\nF520\n9520\n9560\nF100\n9100\nENDCHAR\nSTARTCHAR U_5E2C\nENCODING 24108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n1080\nFFE0\n2080\n7FC0\nA040\n3FC0\n0400\n3FC0\n2440\n24C0\nENDCHAR\nSTARTCHAR U_5E2D\nENCODING 24109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n7FE0\n4880\n4F80\n4200\n5FC0\n5240\n52C0\n8200\nENDCHAR\nSTARTCHAR U_5E2E\nENCODING 24110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7DE0\n1120\n7D40\n1120\nFDE0\n2500\n7FC0\n2440\n24C0\n0400\nENDCHAR\nSTARTCHAR U_5E2F\nENCODING 24111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nFFE0\n2480\n3F80\n0000\nFFE0\n8420\nBFC0\n2480\n2580\n0400\nENDCHAR\nSTARTCHAR U_5E30\nENCODING 24112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\n27C0\nA040\nAFE0\nA920\n37C0\n2540\n2540\n45C0\n8100\nENDCHAR\nSTARTCHAR U_5E31\nENCODING 24113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nFBE0\nA900\nAFE0\nAA40\nAFE0\nBA40\n2540\n2840\n20C0\nENDCHAR\nSTARTCHAR U_5E32\nENCODING 24114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n2240\nFF60\nAA40\nAA40\nAA40\nAF60\nAA40\nBA40\n2440\n2840\nENDCHAR\nSTARTCHAR U_5E33\nENCODING 24115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2200\nFBC0\nAA00\nABC0\nAA00\nAFE0\nBAA0\n2240\n23A0\n2620\nENDCHAR\nSTARTCHAR U_5E34\nENCODING 24116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27E0\nFA40\nA9A0\nAEE0\nAA40\nAFE0\nBA40\n21A0\n2160\n2620\nENDCHAR\nSTARTCHAR U_5E35\nENCODING 24117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\nA820\nAEE0\nAAA0\nAEA0\nAAE0\nBA80\n24A0\n28E0\nENDCHAR\nSTARTCHAR U_5E36\nENCODING 24118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\nFFE0\n5280\nDEE0\n0000\nFFE0\n8420\nBFA0\n2480\n2580\n0400\nENDCHAR\nSTARTCHAR U_5E37\nENCODING 24119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n23E0\nFA80\nAE80\nABE0\nAA80\nAA80\nBBE0\n2280\n2280\n23E0\nENDCHAR\nSTARTCHAR U_5E38\nENCODING 24120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n7FE0\n4020\n9FA0\n1080\n1F80\n0400\n3FC0\n2440\n24C0\n0400\nENDCHAR\nSTARTCHAR U_5E39\nENCODING 24121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nFA80\nAFE0\nA900\nAFE0\nAA80\nAA80\nBA80\n2100\n26C0\nENDCHAR\nSTARTCHAR U_5E3A\nENCODING 24122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\nFFE0\nAA40\nABC0\nAA40\nABC0\nAA40\nBFE0\n2240\n2420\nENDCHAR\nSTARTCHAR U_5E3B\nENCODING 24123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nF880\nABE0\nA880\nAFE0\nAA20\nBAA0\n22A0\n2140\n2620\nENDCHAR\nSTARTCHAR U_5E3C\nENCODING 24124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFFE0\nAD20\nAD20\nAFE0\nADA0\nBD60\n27E0\n2420\n27E0\nENDCHAR\nSTARTCHAR U_5E3D\nENCODING 24125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFDA0\nAC20\nABC0\nAA40\nABC0\nBA40\n23C0\n2240\n23C0\nENDCHAR\nSTARTCHAR U_5E3E\nENCODING 24126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n27A0\nF940\nAFE0\nA900\nABE0\nAE20\nBBE0\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_5E3F\nENCODING 24127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n25C0\nF840\nAFE0\nA900\nABE0\nAC80\nABE0\nB880\n2940\n2A20\nENDCHAR\nSTARTCHAR U_5E40\nENCODING 24128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2100\nFBE0\nAA20\nABE0\nAA20\nABE0\nBA20\n23E0\n2140\n2620\nENDCHAR\nSTARTCHAR U_5E41\nENCODING 24129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nFBE0\nAA20\nABE0\nAA20\nABE0\nBA20\n23E0\n2240\n2420\nENDCHAR\nSTARTCHAR U_5E42\nENCODING 24130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n50A0\n5FA0\n1080\n1F80\n0800\n7FE0\n1480\n3FC0\n54A0\n1580\nENDCHAR\nSTARTCHAR U_5E43\nENCODING 24131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\nF940\nAFE0\nAA40\nABC0\nA880\nBFE0\n2280\n27E0\n2080\nENDCHAR\nSTARTCHAR U_5E44\nENCODING 24132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\nFBE0\nAA00\nABE0\nAAA0\nABE0\nBC80\n25E0\n2880\n27E0\nENDCHAR\nSTARTCHAR U_5E45\nENCODING 24133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2000\nFBC0\nAA40\nABC0\nA800\nAFE0\nBD20\n27E0\n2520\n27E0\nENDCHAR\nSTARTCHAR U_5E46\nENCODING 24134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFBC0\nAA40\nABC0\nA900\nABE0\nAEA0\nBB60\n23A0\n2040\nENDCHAR\nSTARTCHAR U_5E47\nENCODING 24135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\n7C40\n13E0\nFC40\n1140\n3CC0\n4400\n7FC0\n4440\n44C0\n0400\nENDCHAR\nSTARTCHAR U_5E48\nENCODING 24136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nFFE0\nAA40\nAFE0\nAA40\nAFE0\nAA40\nBA40\n2A40\n3440\nENDCHAR\nSTARTCHAR U_5E49\nENCODING 24137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\n2FE0\nFA80\nAB80\nA800\nAFE0\nA900\nAFE0\nB900\n27C0\n2920\nENDCHAR\nSTARTCHAR U_5E4A\nENCODING 24138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2080\nFFE0\nAA20\nABE0\nAA20\nABE0\nBA20\n23E0\n2140\n2620\nENDCHAR\nSTARTCHAR U_5E4B\nENCODING 24139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\nFA40\nAA60\nFFE0\nAA40\nA980\n1E60\n0400\n7FC0\n4440\n44C0\nENDCHAR\nSTARTCHAR U_5E4C\nENCODING 24140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\nFBE0\nAA20\nABE0\nACA0\nAAC0\nBFE0\n2180\n22A0\n24E0\nENDCHAR\nSTARTCHAR U_5E4D\nENCODING 24141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2720\nFD20\nAAC0\nAA00\nACE0\nA820\nBEE0\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_5E4E\nENCODING 24142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFFE0\nAA40\nABC0\nAA40\nABC0\nB900\n27E0\n2240\n2420\nENDCHAR\nSTARTCHAR U_5E4F\nENCODING 24143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\nAFE0\nAA00\nAD40\nAA80\nBDC0\n22A0\n24A0\n2300\nENDCHAR\nSTARTCHAR U_5E50\nENCODING 24144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7540\n5FE0\n5100\n7FE0\n5280\n5540\n7FE0\n5540\n5540\n95C0\nB100\nENDCHAR\nSTARTCHAR U_5E51\nENCODING 24145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3540\n5540\n9FE0\n20A0\n5FA0\nC4A0\n5FC0\n5540\n5540\n57A0\n44A0\nENDCHAR\nSTARTCHAR U_5E52\nENCODING 24146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\nF940\nAA40\nA940\nAFC0\nA800\nAA40\nBD20\n2440\n27C0\nENDCHAR\nSTARTCHAR U_5E53\nENCODING 24147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27A0\nFA40\nAFE0\nA900\nAA80\nAD60\nBA80\n2120\n2240\n2180\nENDCHAR\nSTARTCHAR U_5E54\nENCODING 24148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFBC0\nAA40\nAFE0\nAAA0\nAFE0\nAC40\nBA80\n2100\n2EE0\nENDCHAR\nSTARTCHAR U_5E55\nENCODING 24149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n3F80\n2080\n3F80\n2880\nFFE0\n1480\nFFE0\n2480\n2580\nENDCHAR\nSTARTCHAR U_5E56\nENCODING 24150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFE0\nAAA0\nAFE0\nA800\nAFC0\nA800\nBFE0\n2540\n2B20\nENDCHAR\nSTARTCHAR U_5E57\nENCODING 24151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2960\nFFE0\nA920\nAF20\nA960\nAFA0\nB920\n2EE0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_5E58\nENCODING 24152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\nAFE0\nAA40\nABC0\nAA40\nBBC0\n2240\n23C0\n2420\nENDCHAR\nSTARTCHAR U_5E59\nENCODING 24153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nFA80\nABC0\nAA40\nABC0\nAA40\nBFE0\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_5E5A\nENCODING 24154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFD20\n1140\nFD20\n21E0\nC100\n3F80\n2480\n7FC0\n4440\n44C0\nENDCHAR\nSTARTCHAR U_5E5B\nENCODING 24155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFA40\nAFE0\nAA40\nABC0\nAA40\nBBC0\n2100\n27E0\n2100\nENDCHAR\nSTARTCHAR U_5E5C\nENCODING 24156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\nAC40\nAFC0\nA900\nAFE0\nBC40\n27C0\n2540\n2B20\nENDCHAR\nSTARTCHAR U_5E5D\nENCODING 24157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\nFFE0\nAAA0\nABE0\nAAA0\nABE0\nB880\n27E0\n2080\n2080\nENDCHAR\nSTARTCHAR U_5E5E\nENCODING 24158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2360\nFFE0\nA940\nABE0\nA880\nABE0\nB880\n27E0\n2140\n2620\nENDCHAR\nSTARTCHAR U_5E5F\nENCODING 24159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24C0\n2FA0\nFA80\nAFE0\nA880\nAEA0\nAAC0\nBE80\n2AA0\n2F60\n2220\nENDCHAR\nSTARTCHAR U_5E60\nENCODING 24160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nFAA0\nAAA0\nAFE0\nAAA0\nAAA0\nBFE0\n2540\n2AA0\n2AA0\nENDCHAR\nSTARTCHAR U_5E61\nENCODING 24161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\nFFE0\nAB40\nAD20\nA900\nAFE0\nB920\n2FE0\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_5E62\nENCODING 24162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFA80\nA900\nAFE0\nAD40\nAFC0\nBD40\nA7E0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_5E63\nENCODING 24163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9300\n55E0\nFE20\n9B20\nB6C0\nD320\n0200\n3FC0\n2240\n22C0\n0200\nENDCHAR\nSTARTCHAR U_5E64\nENCODING 24164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5500\nFDE0\nAD40\nBF40\n8480\n8D40\n0520\n7FC0\n4440\n44C0\n0400\nENDCHAR\nSTARTCHAR U_5E65\nENCODING 24165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nFFE0\nAAA0\nAB80\nA900\nAFC0\nA900\nBFE0\n2100\n2300\nENDCHAR\nSTARTCHAR U_5E66\nENCODING 24166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n7940\n47E0\n7880\nABE0\n3C80\n0480\n7FC0\n4440\n44C0\nENDCHAR\nSTARTCHAR U_5E67\nENCODING 24167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFC40\nAFE0\nAAA0\nAEE0\nA900\nBFE0\n2540\n2920\n2920\nENDCHAR\nSTARTCHAR U_5E68\nENCODING 24168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2280\nFFE0\nAA40\nAFE0\nA800\nABE0\nB800\n2BE0\n2A20\n33E0\nENDCHAR\nSTARTCHAR U_5E69\nENCODING 24169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nFAA0\nAFE0\nAA20\nABE0\nAA20\nBBE0\n2220\n23E0\n2620\nENDCHAR\nSTARTCHAR U_5E6A\nENCODING 24170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\nAFE0\nA820\nAFE0\nAA40\nBD80\n2340\n2520\n2300\nENDCHAR\nSTARTCHAR U_5E6B\nENCODING 24171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFBE0\n2240\nF940\n2440\nFF80\n2080\n3F80\n2480\n7FC0\n44C0\nENDCHAR\nSTARTCHAR U_5E6C\nENCODING 24172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\nAFE0\nA920\nAFC0\nA820\nB9E0\n2F20\n2AA0\n2E60\nENDCHAR\nSTARTCHAR U_5E6D\nENCODING 24173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFE0\nAAA0\nAFE0\nA940\nAFE0\nB940\n2E80\n29A0\n3660\nENDCHAR\nSTARTCHAR U_5E6E\nENCODING 24174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF900\nAFA0\nA920\nAFE0\nAAA0\nBBA0\n2D60\n2A20\n3760\nENDCHAR\nSTARTCHAR U_5E6F\nENCODING 24175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\nFA40\nAEE0\nAAA0\nAEA0\nAAA0\nBEA0\n2AE0\n2A80\n2D80\nENDCHAR\nSTARTCHAR U_5E70\nENCODING 24176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nFFC0\nA900\nAFE0\nAAA0\nAFE0\nB800\n2540\n2CA0\n33A0\nENDCHAR\nSTARTCHAR U_5E71\nENCODING 24177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFAA0\nAEE0\nA920\nAFE0\nAAA0\nABA0\nB920\n2BA0\n2D60\nENDCHAR\nSTARTCHAR U_5E72\nENCODING 24178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n0400\n0400\nFFE0\n0400\n0400\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_5E73\nENCODING 24179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n2480\n1500\n0400\nFFE0\n0400\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_5E74\nENCODING 24180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4200\n8200\n3FC0\n2200\n2200\nFFE0\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_5E75\nENCODING 24181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\n1080\n1080\n1080\nFBE0\n1080\n1080\n1080\n2080\n2080\n4080\nENDCHAR\nSTARTCHAR U_5E76\nENCODING 24182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1100\n7FC0\n1100\n1100\n1100\nFFE0\n1100\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_5E77\nENCODING 24183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0840\n1080\n7DE0\n1080\n1080\nFDE0\n1080\n1080\n1080\n2080\n4080\nENDCHAR\nSTARTCHAR U_5E78\nENCODING 24184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\nFFE0\n1100\n0A00\n7FC0\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_5E79\nENCODING 24185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF940\n2220\nFDC0\n8880\nF880\n8BE0\nF880\n2080\nF880\n2080\nENDCHAR\nSTARTCHAR U_5E7A\nENCODING 24186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0400\n0880\n1080\n3F00\n0200\n0400\n0840\n13E0\n7C20\nENDCHAR\nSTARTCHAR U_5E7B\nENCODING 24187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n2020\n4820\n4820\nF020\n2020\n2820\n4420\nFD40\n0080\nENDCHAR\nSTARTCHAR U_5E7C\nENCODING 24188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n2100\n4FE0\nF920\n1120\n2120\n4920\nF520\n42A0\n0440\nENDCHAR\nSTARTCHAR U_5E7D\nENCODING 24189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n94A0\nA520\nAD60\nF7A0\n94A0\nAD60\nFFE0\n8420\n8420\nFFE0\nENDCHAR\nSTARTCHAR U_5E7E\nENCODING 24190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n4500\nF7C0\n2CA0\nFFE0\n2480\nFFE0\n2280\n3120\n49A0\n8E60\nENDCHAR\nSTARTCHAR U_5E7F\nENCODING 24191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n7FE0\n4000\n4000\n4000\n4000\n4000\n4000\n8000\n8000\nENDCHAR\nSTARTCHAR U_5E80\nENCODING 24192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2000\n2400\n2440\n2480\n2700\n2400\n2420\n4420\n83E0\nENDCHAR\nSTARTCHAR U_5E81\nENCODING 24193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n3FE0\n2000\n2FE0\n2100\n2100\n2100\n4100\n4500\n8200\nENDCHAR\nSTARTCHAR U_5E82\nENCODING 24194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2000\n2200\n2200\n2200\n2200\n2500\n2880\n5060\nA020\nENDCHAR\nSTARTCHAR U_5E83\nENCODING 24195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n3FE0\n2000\n2200\n2200\n2200\n2400\n4840\n5FE0\n8020\nENDCHAR\nSTARTCHAR U_5E84\nENCODING 24196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2000\n2200\n2200\n2FC0\n2200\n2200\n2200\n4200\n9FE0\nENDCHAR\nSTARTCHAR U_5E85\nENCODING 24197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n3FE0\n2200\n2280\n2480\n2900\n2200\n4440\n4FE0\n8020\nENDCHAR\nSTARTCHAR U_5E86\nENCODING 24198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FE0\n2200\n2200\n3FE0\n2200\n2200\n2500\n4480\n4840\n9020\nENDCHAR\nSTARTCHAR U_5E87\nENCODING 24199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n5100\n5120\n5D40\n5180\n5100\n5520\n9920\n90E0\nENDCHAR\nSTARTCHAR U_5E88\nENCODING 24200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n4500\n4880\n5260\n6220\n5FC0\n4080\n8100\n8200\nENDCHAR\nSTARTCHAR U_5E89\nENCODING 24201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n5FC0\n4200\n5240\n5240\n5FC0\n4200\n8220\n81E0\nENDCHAR\nSTARTCHAR U_5E8A\nENCODING 24202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n4200\n7FE0\n4200\n4700\n4A80\n5240\nA220\n8200\nENDCHAR\nSTARTCHAR U_5E8B\nENCODING 24203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n7FE0\n4200\n5FC0\n4880\n4500\n4200\n8D80\nB060\nENDCHAR\nSTARTCHAR U_5E8C\nENCODING 24204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2000\n3FE0\n2500\n2900\n2FE0\n2300\n2500\n4900\n9300\nENDCHAR\nSTARTCHAR U_5E8D\nENCODING 24205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2040\n2F80\n2800\n2FE0\n2880\n2880\n2880\n4880\n9080\nENDCHAR\nSTARTCHAR U_5E8E\nENCODING 24206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n3FE0\n2200\n2580\n2840\n34A0\n2480\n4480\n4480\n8880\nENDCHAR\nSTARTCHAR U_5E8F\nENCODING 24207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4000\n5F80\n4500\n4200\n7FE0\n4240\n4200\n8200\n8E00\nENDCHAR\nSTARTCHAR U_5E90\nENCODING 24208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2100\n2FC0\n2840\n2840\n2FC0\n2800\n4800\n5000\nA000\nENDCHAR\nSTARTCHAR U_5E91\nENCODING 24209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n5FC0\n4200\n5FE0\n4500\n4500\n4920\n9120\nA0E0\nENDCHAR\nSTARTCHAR U_5E92\nENCODING 24210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n4200\n4200\n5FC0\n4200\n4280\n4240\n8200\nBFE0\nENDCHAR\nSTARTCHAR U_5E93\nENCODING 24211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2200\n3FE0\n2400\n2900\n2FC0\n2100\n3FE0\n4100\n8100\nENDCHAR\nSTARTCHAR U_5E94\nENCODING 24212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n7FE0\n4000\n4440\n5240\n4A40\n4880\n4080\n8100\n9FE0\nENDCHAR\nSTARTCHAR U_5E95\nENCODING 24213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2000\n2FC0\n2900\n2FE0\n2900\n2880\n2AA0\n4D60\n8920\nENDCHAR\nSTARTCHAR U_5E96\nENCODING 24214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4800\n4FC0\n5040\n6F40\n4940\n4F40\n48A0\n4820\n87E0\nENDCHAR\nSTARTCHAR U_5E97\nENCODING 24215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2000\n2200\n23C0\n2200\n2FC0\n2840\n2840\n4FC0\n8840\nENDCHAR\nSTARTCHAR U_5E98\nENCODING 24216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n5FC0\n5240\n5FC0\n5240\n5FC0\n4200\n4200\n8200\nENDCHAR\nSTARTCHAR U_5E99\nENCODING 24217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n4200\n5FC0\n5240\n5FC0\n5240\n5240\n9FC0\n9040\nENDCHAR\nSTARTCHAR U_5E9A\nENCODING 24218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2200\n2FC0\n2240\n3FE0\n2240\n2FC0\n2500\n4880\nB060\nENDCHAR\nSTARTCHAR U_5E9B\nENCODING 24219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4480\n4480\n54A0\n57C0\n5480\n5480\n54A0\n96A0\nB8E0\nENDCHAR\nSTARTCHAR U_5E9C\nENCODING 24220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4440\n4840\n4BE0\n5840\n6A40\n4940\n4840\n8940\n8880\nENDCHAR\nSTARTCHAR U_5E9D\nENCODING 24221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4400\n4F80\n4880\n5500\n4200\n4D00\n72C0\n4C00\n8300\nENDCHAR\nSTARTCHAR U_5E9E\nENCODING 24222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2280\n2240\n3FE0\n2220\n2540\n2580\n2520\n4B20\nB4E0\nENDCHAR\nSTARTCHAR U_5E9F\nENCODING 24223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2A80\n2A40\n3FE0\n2400\n27C0\n2A40\n3180\n4240\n8C20\nENDCHAR\nSTARTCHAR U_5EA0\nENCODING 24224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2880\n2500\n3FE0\n2200\n3FC0\n2200\n3FE0\n4200\n8200\nENDCHAR\nSTARTCHAR U_5EA1\nENCODING 24225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4400\n7FC0\n4400\n4A40\n5A80\n6900\n4880\n4C60\n8800\nENDCHAR\nSTARTCHAR U_5EA2\nENCODING 24226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n5FE0\n4480\n4840\n4FE0\n4200\n5FC0\n8200\nBFE0\nENDCHAR\nSTARTCHAR U_5EA3\nENCODING 24227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2000\n3540\n2D80\n2500\n2D80\n3540\n2520\n4920\n90E0\nENDCHAR\nSTARTCHAR U_5EA4\nENCODING 24228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n5FC0\n4200\n7FE0\n4080\n5FE0\n4880\n8480\n8380\nENDCHAR\nSTARTCHAR U_5EA5\nENCODING 24229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n4880\n4FE0\n5880\n6980\n4AC0\n4CA0\n8880\n8880\nENDCHAR\nSTARTCHAR U_5EA6\nENCODING 24230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4900\n7FC0\n4900\n4F00\n4000\n5F80\n4900\n8600\nB9C0\nENDCHAR\nSTARTCHAR U_5EA7\nENCODING 24231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n4A80\n4A80\n5740\n6220\n5FC0\n4200\n8200\nBFE0\nENDCHAR\nSTARTCHAR U_5EA8\nENCODING 24232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4240\n5FC0\n4280\n7FE0\n4400\n4F80\n5100\nAFC0\n8200\nENDCHAR\nSTARTCHAR U_5EA9\nENCODING 24233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4500\n4880\n5740\n6220\n5FC0\n4700\n4A80\n5240\n8600\nENDCHAR\nSTARTCHAR U_5EAA\nENCODING 24234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n7FE0\n4880\n4BE0\n4D40\n7940\n4880\nA940\n9220\nENDCHAR\nSTARTCHAR U_5EAB\nENCODING 24235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n7FE0\n5240\n5FC0\n5240\n5FC0\n4200\nBFE0\n8200\nENDCHAR\nSTARTCHAR U_5EAC\nENCODING 24236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4900\n4880\n7FE0\n5480\n5700\n54C0\n5720\n5420\nA3E0\nENDCHAR\nSTARTCHAR U_5EAD\nENCODING 24237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n7BE0\n5080\n7BE0\n4880\n6880\n53E0\n9000\nAFE0\nENDCHAR\nSTARTCHAR U_5EAE\nENCODING 24238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n7FE0\n4500\n5FC0\n5540\n59C0\n5740\n9040\n9FC0\nENDCHAR\nSTARTCHAR U_5EAF\nENCODING 24239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4280\n7FE0\n4200\n5FC0\n5240\n5FC0\n5240\n5FC0\n9240\nENDCHAR\nSTARTCHAR U_5EB0\nENCODING 24240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n5080\n4900\n7FC0\n4900\n7FE0\n4900\n4900\n9100\nA100\nENDCHAR\nSTARTCHAR U_5EB1\nENCODING 24241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n5FC0\n4200\n7FE0\n5440\n6FA0\n5480\n8300\n9CE0\nENDCHAR\nSTARTCHAR U_5EB2\nENCODING 24242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n7FE0\n4A40\n4A40\n56A0\n6700\n4A80\n9240\nA220\nENDCHAR\nSTARTCHAR U_5EB3\nENCODING 24243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4400\n5FC0\n5240\n5FC0\n5240\n5FC0\n4900\nBFE0\n8100\nENDCHAR\nSTARTCHAR U_5EB4\nENCODING 24244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4480\n5FE0\n4480\n7FE0\n4000\n4FC0\n4940\n8A40\n8FC0\nENDCHAR\nSTARTCHAR U_5EB5\nENCODING 24245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4400\n7FE0\n5280\n5FC0\n72A0\n5F80\n52A0\n8220\n81E0\nENDCHAR\nSTARTCHAR U_5EB6\nENCODING 24246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n4480\n5FE0\n4480\n4780\n4000\n5540\n92A0\nA2A0\nENDCHAR\nSTARTCHAR U_5EB7\nENCODING 24247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n5FC0\n4240\n7FE0\n4240\n5FC0\n5240\n8A80\nB660\nENDCHAR\nSTARTCHAR U_5EB8\nENCODING 24248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4FC0\n4240\n5FE0\n4240\n5FC0\n5240\n5FC0\n9240\n92C0\nENDCHAR\nSTARTCHAR U_5EB9\nENCODING 24249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n7FE0\n4880\n4FC0\n4840\n4FC0\n4900\n9080\nA060\nENDCHAR\nSTARTCHAR U_5EBA\nENCODING 24250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4880\n5540\n68A0\n5FC0\n4200\n7FE0\n4700\n4A80\nB260\nENDCHAR\nSTARTCHAR U_5EBB\nENCODING 24251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4900\n7FE0\n4900\n4F00\n4000\n4880\n4880\n5540\nA220\nENDCHAR\nSTARTCHAR U_5EBC\nENCODING 24252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n53E0\n5080\n5BE0\n52A0\n52A0\n5AA0\n6140\n8220\nENDCHAR\nSTARTCHAR U_5EBD\nENCODING 24253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4A80\n4F80\n4A80\n4F80\n4200\n5FC0\n5240\n53C0\n9C40\nENDCHAR\nSTARTCHAR U_5EBE\nENCODING 24254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n5AC0\n5240\n5AC0\n5240\n5FC0\n4500\n8880\nB060\nENDCHAR\nSTARTCHAR U_5EBF\nENCODING 24255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n7FE0\n4880\n5FC0\n5240\n5FC0\n5240\n5240\n9FC0\nENDCHAR\nSTARTCHAR U_5EC0\nENCODING 24256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n5FC0\n5240\n4D80\n5040\n67A0\n4480\n4300\n8CC0\nENDCHAR\nSTARTCHAR U_5EC1\nENCODING 24257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n5EA0\n52A0\n5AA0\n56A0\n52A0\n5E20\n9420\nA2E0\nENDCHAR\nSTARTCHAR U_5EC2\nENCODING 24258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4800\n49E0\n7F20\n49E0\n4D20\n5BE0\n6920\n89E0\n8920\nENDCHAR\nSTARTCHAR U_5EC3\nENCODING 24259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4140\n5D80\n54A0\n4840\n77A0\n4500\n5FE0\n8500\n19E0\nENDCHAR\nSTARTCHAR U_5EC4\nENCODING 24260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5D40\n5540\n5D60\n5400\n5FE0\n5540\n5A80\nB140\n8220\nENDCHAR\nSTARTCHAR U_5EC5\nENCODING 24261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n5FC0\n4200\n7FE0\n4880\n5FC0\n5540\n9540\nBFE0\nENDCHAR\nSTARTCHAR U_5EC6\nENCODING 24262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4400\n5FC0\n5240\n5FC0\n5240\n5FC0\n4740\n8AA0\nB1E0\nENDCHAR\nSTARTCHAR U_5EC7\nENCODING 24263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4400\n59E0\n54A0\n5560\n5FC0\n5240\n5FC0\n9240\n9FC0\nENDCHAR\nSTARTCHAR U_5EC8\nENCODING 24264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n5FE0\n4840\n4FC0\n4840\n4FC0\n5480\nA300\n9CE0\nENDCHAR\nSTARTCHAR U_5EC9\nENCODING 24265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4500\n5FE0\n4540\n7FE0\n4540\n5FC0\n4D80\n9540\nA520\nENDCHAR\nSTARTCHAR U_5ECA\nENCODING 24266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4800\n5EE0\n52A0\n5EA0\n52C0\n5EA0\n54A0\n96E0\n9A80\nENDCHAR\nSTARTCHAR U_5ECB\nENCODING 24267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5240\n5BC0\n5240\n5FC0\n4200\n5FC0\n4880\n8700\nB8E0\nENDCHAR\nSTARTCHAR U_5ECC\nENCODING 24268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4900\n7FC0\n4940\n7FE0\n4800\n5FE0\n5520\nAAA0\nAAC0\nENDCHAR\nSTARTCHAR U_5ECD\nENCODING 24269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4800\n7FE0\n52A0\n7FA0\n40C0\n5EA0\n52A0\n52E0\n9E80\nENDCHAR\nSTARTCHAR U_5ECE\nENCODING 24270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\n57E0\n5240\n5FC0\n5240\n53C0\n5640\n5BC0\n8660\nENDCHAR\nSTARTCHAR U_5ECF\nENCODING 24271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4800\n5DC0\n5540\n5D60\n5600\n5DE0\n5140\n9480\n9D60\nENDCHAR\nSTARTCHAR U_5ED0\nENCODING 24272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4800\n5DE0\n5440\n5D40\n57E0\n5CC0\n58C0\n9540\n9A60\nENDCHAR\nSTARTCHAR U_5ED1\nENCODING 24273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n7FE0\n5240\n5240\n7FE0\n4200\n5FC0\n8200\nBFE0\nENDCHAR\nSTARTCHAR U_5ED2\nENCODING 24274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n7EE0\n48A0\n7FA0\n48A0\n7EA0\n5240\nA2A0\nA520\nENDCHAR\nSTARTCHAR U_5ED3\nENCODING 24275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4800\n7FE0\n52A0\n52C0\n7EA0\n48A0\n7EA0\n88E0\n9880\nENDCHAR\nSTARTCHAR U_5ED4\nENCODING 24276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n5240\n7FE0\n5240\n5FC0\n5240\n7FE0\n4480\n8700\nB8E0\nENDCHAR\nSTARTCHAR U_5ED5\nENCODING 24277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4140\n5EA0\n57C0\n5840\n55E0\n5400\n5BE0\n9140\n93A0\nENDCHAR\nSTARTCHAR U_5ED6\nENCODING 24278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5540\n4CC0\n5540\n4700\n78E0\n4300\n5C40\n8380\n9C00\nENDCHAR\nSTARTCHAR U_5ED7\nENCODING 24279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5540\n7FE0\n5540\n7760\n4000\n7FE0\n6220\n5FC0\n9240\nENDCHAR\nSTARTCHAR U_5ED8\nENCODING 24280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n5FE0\n5280\n5FE0\n52A0\n5FE0\n5B40\nADA0\nAEE0\nENDCHAR\nSTARTCHAR U_5ED9\nENCODING 24281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5240\n5FC0\n5240\n7FE0\n4480\n7FE0\n4000\n8D80\nB060\nENDCHAR\nSTARTCHAR U_5EDA\nENCODING 24282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4840\n7E40\n49E0\n4840\n7F40\n52C0\n5E40\n9440\nBEC0\nENDCHAR\nSTARTCHAR U_5EDB\nENCODING 24283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5240\n5FC0\n5240\n7FE0\n4A80\n5240\n6FA0\n8200\n9FE0\nENDCHAR\nSTARTCHAR U_5EDC\nENCODING 24284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5040\n5FC0\n5200\n5FE0\n5440\n5FC0\n5440\n57C0\nA440\nENDCHAR\nSTARTCHAR U_5EDD\nENCODING 24285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5420\n7FC0\n5500\n5DE0\n5540\n5540\nBF40\n9540\n2240\nENDCHAR\nSTARTCHAR U_5EDE\nENCODING 24286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4900\n55E0\n7E20\n4880\n7C80\n4A80\nAD40\n9A20\n3E20\nENDCHAR\nSTARTCHAR U_5EDF\nENCODING 24287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4800\n7FE0\n52A0\n5EE0\n52A0\n5EE0\n48A0\n7F20\n8960\nENDCHAR\nSTARTCHAR U_5EE0\nENCODING 24288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\n8880\nAA80\n9CE0\nBFA0\nA2A0\nAEA0\nAA40\nAEA0\nA720\nENDCHAR\nSTARTCHAR U_5EE1\nENCODING 24289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4800\n5FE0\n7540\n5540\n7FE0\n5540\n7FE0\n9540\nAAA0\nENDCHAR\nSTARTCHAR U_5EE2\nENCODING 24290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n5540\n48A0\n7DC0\n4520\n5E00\n51C0\n5D40\n8480\n9B60\nENDCHAR\nSTARTCHAR U_5EE3\nENCODING 24291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4480\n5FC0\n4480\n7FE0\n5240\n5FC0\n5240\n5FC0\nB060\nENDCHAR\nSTARTCHAR U_5EE4\nENCODING 24292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n7FE0\n5240\n5FC0\n4200\n5D20\n55C0\n5500\n9DE0\nENDCHAR\nSTARTCHAR U_5EE5\nENCODING 24293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4D80\n5040\n7FE0\n5540\n5FC0\n4880\n4F80\n8880\n8F80\nENDCHAR\nSTARTCHAR U_5EE6\nENCODING 24294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\n8080\nBFE0\nA540\nBC80\nA3E0\nBC80\nD7E0\n9480\n9C80\nENDCHAR\nSTARTCHAR U_5EE7\nENCODING 24295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n7FE0\n5240\n6AA0\n7FE0\n5540\n5740\n9040\n9FC0\nENDCHAR\nSTARTCHAR U_5EE8\nENCODING 24296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n52A0\n5FA0\n55A0\n5F40\n55E0\n5F40\n55E0\n9540\nA340\nENDCHAR\nSTARTCHAR U_5EE9\nENCODING 24297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4200\n7FE0\n5540\n5240\n5FC0\n4200\n5FE0\n8A80\nB260\nENDCHAR\nSTARTCHAR U_5EEA\nENCODING 24298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n7FE0\n5740\n5040\n5FC0\n4000\n7FE0\n8A80\nB660\nENDCHAR\nSTARTCHAR U_5EEB\nENCODING 24299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4000\n5F60\n5520\n5F60\n5520\n56A0\n5D40\n56A0\nA540\nENDCHAR\nSTARTCHAR U_5EEC\nENCODING 24300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\n5FE0\n5240\n52A0\n57E0\n5540\n6FE0\nAAA0\n9FE0\nENDCHAR\nSTARTCHAR U_5EED\nENCODING 24301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4480\n5BE0\n4880\n7FE0\n4A20\n5FE0\n6A20\n4BE0\n8A20\nENDCHAR\nSTARTCHAR U_5EEE\nENCODING 24302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5540\n5DC0\n5540\n5DC0\n5540\n7FE0\n4480\n8300\n9CE0\nENDCHAR\nSTARTCHAR U_5EEF\nENCODING 24303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5540\n7E80\n6BE0\n7E80\n6BE0\n7E80\n55E0\nAA80\nAA80\nENDCHAR\nSTARTCHAR U_5EF0\nENCODING 24304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4080\n7FE0\n5540\n5EA0\n57E0\n5C00\n5540\n5F20\nA5E0\nENDCHAR\nSTARTCHAR U_5EF1\nENCODING 24305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5540\n6B40\n7DE0\n4540\n7DE0\n5540\n7DE0\nA140\nBDE0\nENDCHAR\nSTARTCHAR U_5EF2\nENCODING 24306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\n9540\n9DC0\n9540\nBFE0\nA540\nBFC0\nAB40\nADA0\n5DE0\nENDCHAR\nSTARTCHAR U_5EF3\nENCODING 24307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA880\nBBE0\nAAA0\nFAA0\nAFE0\nA940\nFAA0\nAD40\nF9C0\nENDCHAR\nSTARTCHAR U_5EF4\nENCODING 24308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF800\n1000\n2000\n2000\n7800\n0800\n8800\n5000\n2000\n3000\nCFE0\nENDCHAR\nSTARTCHAR U_5EF5\nENCODING 24309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nF2A0\n12A0\n22A0\n7540\n1540\n92A0\n62A0\n22A0\n5800\n87E0\nENDCHAR\nSTARTCHAR U_5EF6\nENCODING 24310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF060\n1780\n2080\n4080\nF4E0\n1480\n9480\n5480\n27E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_5EF7\nENCODING 24311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF040\n1780\n2100\n4100\nFFE0\n1100\n9100\n57C0\n2000\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_5EF8\nENCODING 24312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7100\n27C0\n4540\n77C0\n1540\n9540\n57C0\n3440\n4800\n87E0\nENDCHAR\nSTARTCHAR U_5EF9\nENCODING 24313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n77C0\n1440\n2440\n47C0\n7440\n1440\n57C0\n2440\n5800\n87E0\nENDCHAR\nSTARTCHAR U_5EFA\nENCODING 24314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\n2240\n5FE0\nE240\n2FC0\nA200\n6FE0\n2200\n5200\n8FE0\nENDCHAR\nSTARTCHAR U_5EFB\nENCODING 24315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nEFE0\n2820\n4BA0\nEAA0\n2AA0\nABA0\nA820\n4FE0\nA000\n9FE0\nENDCHAR\nSTARTCHAR U_5EFC\nENCODING 24316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n2280\n4280\nEFE0\n2AA0\n2AA0\nACE0\nA820\n4FE0\nA000\n1FE0\nENDCHAR\nSTARTCHAR U_5EFD\nENCODING 24317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE000\n2FE0\n2AA0\n4BA0\nEAA0\n2BA0\nAAA0\n6AA0\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_5EFE\nENCODING 24318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1080\n1080\n1080\nFFE0\n1080\n1080\n2080\n2080\n4080\n8080\nENDCHAR\nSTARTCHAR U_5EFF\nENCODING 24319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1080\n1080\nFFE0\n1080\n1080\n1080\n1080\n1080\n1F80\n1080\nENDCHAR\nSTARTCHAR U_5F00\nENCODING 24320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n1100\n1100\n1100\n1100\nFFE0\n1100\n2100\n2100\n4100\n8100\nENDCHAR\nSTARTCHAR U_5F01\nENCODING 24321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1100\n2080\n7FC0\n1140\n1100\nFFE0\n1100\n1100\n2100\nC100\nENDCHAR\nSTARTCHAR U_5F02\nENCODING 24322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2020\n3FE0\n1100\n1100\nFFE0\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_5F03\nENCODING 24323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0800\n1080\n3FC0\n1100\nFFE0\n1100\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_5F04\nENCODING 24324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n3F80\n0400\nFFE0\n0000\n1100\nFFE0\n1100\n2100\nC100\nENDCHAR\nSTARTCHAR U_5F05\nENCODING 24325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2080\nDFE0\n0480\n0880\n7700\n1100\nFFE0\n1100\n2100\nC100\nENDCHAR\nSTARTCHAR U_5F06\nENCODING 24326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n7FC0\n1100\n7FC0\n2080\nFFE0\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_5F07\nENCODING 24327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n1100\n3F80\nC060\n3F80\n2080\n3F80\n1100\nFFE0\n1100\n6100\nENDCHAR\nSTARTCHAR U_5F08\nENCODING 24328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n4940\n8920\n1120\n6B00\n0900\nFFE0\n0900\n1100\n6100\nENDCHAR\nSTARTCHAR U_5F09\nENCODING 24329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n7FE0\n0900\n7900\n4FC0\n8800\n1100\nFFE0\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_5F0A\nENCODING 24330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9300\n5500\nFDE0\n9720\nBCC0\nD720\n1100\n0900\nFFE0\n1100\n6100\nENDCHAR\nSTARTCHAR U_5F0B\nENCODING 24331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n0480\n0400\n07E0\nFC00\n0400\n0200\n0200\n0120\n00A0\n0060\nENDCHAR\nSTARTCHAR U_5F0C\nENCODING 24332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n04C0\n0400\nFFE0\n0200\n0200\n0100\n0100\nFCA0\n0060\n0020\nENDCHAR\nSTARTCHAR U_5F0D\nENCODING 24333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0280\n0240\nFFE0\n0200\n7A00\n0100\n0100\n1CA0\nE060\n0020\nENDCHAR\nSTARTCHAR U_5F0E\nENCODING 24334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n0480\nFFE0\n0400\n0400\nFA00\n0200\n7100\n0120\nFCA0\n0040\nENDCHAR\nSTARTCHAR U_5F0F\nENCODING 24335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n0240\n0200\nFFE0\n0200\n7A00\n1200\n1100\n1120\n18A0\nE060\nENDCHAR\nSTARTCHAR U_5F10\nENCODING 24336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7C80\n0440\nFFE0\n0400\n0400\n7A00\n0200\n1D00\nE0A0\n0040\nENDCHAR\nSTARTCHAR U_5F11\nENCODING 24337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n88C0\n50A0\n27E0\n5080\nAF80\nFA80\n2280\n7240\nAB40\n2C20\n6020\nENDCHAR\nSTARTCHAR U_5F12\nENCODING 24338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n90C0\n60A0\n9FE0\n2880\nF880\n2780\n3280\n6A40\nA340\n2E20\n2020\nENDCHAR\nSTARTCHAR U_5F13\nENCODING 24339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0040\n1FC0\n1000\n2000\n3FC0\n0040\n0040\n0040\n0280\n0100\nENDCHAR\nSTARTCHAR U_5F14\nENCODING 24340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0440\n0440\n3FC0\n2400\n7FE0\n0420\n0420\n04A0\n0440\n0400\nENDCHAR\nSTARTCHAR U_5F15\nENCODING 24341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E20\n0220\n0220\n3E20\n2020\n7E20\n0220\n0220\n0220\n1420\n0820\nENDCHAR\nSTARTCHAR U_5F16\nENCODING 24342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0080\n1F80\n2000\n2000\n3F80\n0080\n0080\n0500\n0200\nFFE0\nENDCHAR\nSTARTCHAR U_5F17\nENCODING 24343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n0900\n7FC0\n0940\n3FC0\n2900\n7FE0\n0920\n0920\n11C0\n6100\nENDCHAR\nSTARTCHAR U_5F18\nENCODING 24344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n1080\n1080\nF100\n8100\n8100\nF240\n1240\n1240\nA7E0\n4020\nENDCHAR\nSTARTCHAR U_5F19\nENCODING 24345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n1100\n1100\nF100\n8FE0\n8100\nF100\n1100\n1100\nA500\n4200\nENDCHAR\nSTARTCHAR U_5F1A\nENCODING 24346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n1200\n7F80\n0480\n7F80\n4400\n7FC0\n0440\n0440\n0580\n0400\nENDCHAR\nSTARTCHAR U_5F1B\nENCODING 24347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1500\n1540\nF5E0\n8F40\n8540\nF540\n15C0\n1520\nA420\n43E0\nENDCHAR\nSTARTCHAR U_5F1C\nENCODING 24348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9E0\n0820\n0820\n79E0\n4100\n79E0\n0820\n0820\n0820\n5140\n2080\nENDCHAR\nSTARTCHAR U_5F1D\nENCODING 24349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n1540\n1540\n7540\n47C0\nF440\n1400\n1400\n1420\n9420\n63E0\nENDCHAR\nSTARTCHAR U_5F1E\nENCODING 24350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n0A00\n0BE0\n7D40\n4100\n7900\n0900\n0A80\n0A80\n5460\n2840\nENDCHAR\nSTARTCHAR U_5F1F\nENCODING 24351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n0A00\n7FC0\n0440\n3FC0\n4400\n7FE0\n1420\n24A0\nC440\n0400\nENDCHAR\nSTARTCHAR U_5F20\nENCODING 24352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE440\n2440\n2480\nE700\n8400\n9FE0\nE500\n2500\n2480\nA640\n4420\nENDCHAR\nSTARTCHAR U_5F21\nENCODING 24353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n0A00\n0A00\n7BC0\n4240\n7A40\n0BC0\n0A00\n0A00\n53E0\n2000\nENDCHAR\nSTARTCHAR U_5F22\nENCODING 24354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1520\n1520\nF7E0\n8100\n8FE0\nF440\n1280\n1100\n9280\n6C60\nENDCHAR\nSTARTCHAR U_5F23\nENCODING 24355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n1240\n1440\nF5E0\n8C40\nF640\n1540\n1440\n1440\n5540\n2480\nENDCHAR\nSTARTCHAR U_5F24\nENCODING 24356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF060\n1780\n1480\nF480\n87E0\n8480\nF480\n1480\n1540\nA720\n4CA0\nENDCHAR\nSTARTCHAR U_5F25\nENCODING 24357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF400\n1400\n17E0\nF820\n8100\n8100\nF540\n1520\n1920\nA100\n4300\nENDCHAR\nSTARTCHAR U_5F26\nENCODING 24358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n1100\n1FE0\nF100\n8240\n8780\nF080\n1100\n1240\nAFA0\n4420\nENDCHAR\nSTARTCHAR U_5F27\nENCODING 24359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0E0\n1740\n1540\nF540\n8540\n8540\nF540\n1520\n15A0\nA960\n4A20\nENDCHAR\nSTARTCHAR U_5F28\nENCODING 24360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n1120\n1120\nF220\n84A0\n8840\nF7E0\n1420\n1420\nA7E0\n4420\nENDCHAR\nSTARTCHAR U_5F29\nENCODING 24361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n5180\n2A40\n7FA0\n0080\n3F80\n2000\n7FC0\n0040\n0380\nENDCHAR\nSTARTCHAR U_5F2A\nENCODING 24362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n1040\n1080\nF180\n8260\n8420\nF7E0\n1100\n1100\nA100\n4FE0\nENDCHAR\nSTARTCHAR U_5F2B\nENCODING 24363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n1500\n7500\n47C0\n4440\n7440\n17C0\n1500\n1500\nA7E0\n4000\nENDCHAR\nSTARTCHAR U_5F2C\nENCODING 24364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n2880\nE880\n8AC0\n8A40\nEA40\n2AC0\n2880\n2880\nAFE0\n4000\nENDCHAR\nSTARTCHAR U_5F2D\nENCODING 24365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n1240\n1240\nF3C0\n8240\n8240\nF3C0\n1240\n1260\nA7C0\n4040\nENDCHAR\nSTARTCHAR U_5F2E\nENCODING 24366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n7FC0\n0800\nFFE0\n2180\nDF60\n1000\n3F80\n0080\n0480\n0300\nENDCHAR\nSTARTCHAR U_5F2F\nENCODING 24367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2940\n4920\nBFC0\n0040\n7F80\n4000\n7FC0\n0040\n0380\nENDCHAR\nSTARTCHAR U_5F30\nENCODING 24368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF4A0\n12C0\n1080\nF7E0\n8420\n87E0\nF420\n17E0\n1420\nA420\n44E0\nENDCHAR\nSTARTCHAR U_5F31\nENCODING 24369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n0820\nFBE0\n8200\nFBE0\n8A20\n4920\n38E0\nCB20\n0820\n71C0\nENDCHAR\nSTARTCHAR U_5F32\nENCODING 24370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n1240\n13C0\nF000\n87E0\n8420\nF7E0\n1420\n17E0\nA420\n4460\nENDCHAR\nSTARTCHAR U_5F33\nENCODING 24371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n1540\n1540\nFA80\n8540\n8540\nF000\n17C0\n1100\nA100\n4FE0\nENDCHAR\nSTARTCHAR U_5F34\nENCODING 24372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFE0\n2440\nE7C0\n8000\nEFC0\n2080\n3FE0\n2100\nA500\n4200\nENDCHAR\nSTARTCHAR U_5F35\nENCODING 24373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n1400\n17C0\nF400\n87C0\n8400\nFFE0\n14A0\n1440\nA520\n4620\nENDCHAR\nSTARTCHAR U_5F36\nENCODING 24374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1080\n1FE0\nF000\n87C0\n8440\nF7C0\n1100\n1540\nA920\n4B20\nENDCHAR\nSTARTCHAR U_5F37\nENCODING 24375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1240\n1420\nF7E0\n8100\n87C0\nF540\n17C0\n1120\n51E0\n2E20\nENDCHAR\nSTARTCHAR U_5F38\nENCODING 24376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\n2AA0\n2AA0\nEEE0\n8AA0\n8AA0\nEEE0\n2AA0\n2AA0\nB320\n4660\nENDCHAR\nSTARTCHAR U_5F39\nENCODING 24377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE440\n2280\n2FE0\nE920\n8FE0\n8920\nEFE0\n2100\n2FE0\nA100\n4100\nENDCHAR\nSTARTCHAR U_5F3A\nENCODING 24378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE7C0\n2440\n27C0\nE100\n8FE0\n8920\nE920\n2FC0\n2120\n21E0\nCF20\nENDCHAR\nSTARTCHAR U_5F3B\nENCODING 24379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2420\n3F20\nF560\n9540\n9B40\nFB60\n3120\n3120\nBFA0\n4040\nENDCHAR\nSTARTCHAR U_5F3C\nENCODING 24380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\n2420\n2E20\nEAE0\n8A80\n8E80\nEAE0\n2A20\n2E20\nAAA0\n4040\nENDCHAR\nSTARTCHAR U_5F3D\nENCODING 24381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF540\n1FE0\n1540\nF5C0\n8400\nF7E0\n1100\n1FE0\n1380\nA540\n4920\nENDCHAR\nSTARTCHAR U_5F3E\nENCODING 24382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A20\nE540\n2FC0\nEA40\n8FC0\nEA40\n2FC0\n2200\n3FE0\nA200\n4200\nENDCHAR\nSTARTCHAR U_5F3F\nENCODING 24383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n7F80\n1100\nFFE0\n2F80\nD060\n1F00\n0100\n0600\nENDCHAR\nSTARTCHAR U_5F40\nENCODING 24384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\nFD40\n2140\nFD60\n8E00\n7BE0\n4240\n7940\n0880\n4940\n3620\nENDCHAR\nSTARTCHAR U_5F41\nENCODING 24385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1740\n1540\n7740\n4040\n4FE0\n7540\n1740\n1040\nA140\n4080\nENDCHAR\nSTARTCHAR U_5F42\nENCODING 24386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n2A40\n2A80\nFFE0\n1500\n77E0\n4900\n77E0\n1280\n5440\n2820\nENDCHAR\nSTARTCHAR U_5F43\nENCODING 24387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n2920\n2FE0\nE920\n8FE0\n8540\nEFE0\n2100\n2FE0\nA100\n4100\nENDCHAR\nSTARTCHAR U_5F44\nENCODING 24388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n2800\n2BC0\nEA40\n8BC0\n8800\nEBE0\n2AA0\n2BE0\nA800\n4FE0\nENDCHAR\nSTARTCHAR U_5F45\nENCODING 24389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE240\n2FE0\n2000\nEEA0\n8AA0\nEEA0\n2A40\n2FE0\n2220\nA4A0\n4840\nENDCHAR\nSTARTCHAR U_5F46\nENCODING 24390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\nFFE0\nB540\nEC80\nBFC0\n00A0\n3F80\n2000\n3FC0\n0040\n0380\nENDCHAR\nSTARTCHAR U_5F47\nENCODING 24391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\n27C0\n2140\nEFE0\n8140\n8BA0\nED60\n2FE0\n2920\nAD60\n53A0\nENDCHAR\nSTARTCHAR U_5F48\nENCODING 24392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\n2AA0\n2FE0\nE920\n8FE0\n8920\nEFE0\n2100\n2FE0\nA100\n4100\nENDCHAR\nSTARTCHAR U_5F49\nENCODING 24393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF7C0\n1280\n1FE0\nF100\n87C0\nF540\n17C0\n1540\n97C0\n6C60\nENDCHAR\nSTARTCHAR U_5F4A\nENCODING 24394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1540\n17C0\nF540\n8FE0\n8000\nF7C0\n1540\n17C0\nA540\n4FE0\nENDCHAR\nSTARTCHAR U_5F4B\nENCODING 24395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n2AA0\n2FE0\nE000\n9FE0\n8840\nEFE0\n2540\n2C80\nB540\n4E20\nENDCHAR\nSTARTCHAR U_5F4C\nENCODING 24396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n2540\n2920\nFFE0\n8920\n8DA0\nEB60\n2DA0\n2B60\nADA0\n4960\nENDCHAR\nSTARTCHAR U_5F4D\nENCODING 24397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\n2A40\nEFE0\n8A40\nEFE0\n2940\n2FC0\n2940\nAFC0\n5660\nENDCHAR\nSTARTCHAR U_5F4E\nENCODING 24398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E80\nA1C0\nCEA0\n51C0\nFEA0\nAB40\n3F80\n2000\n3FC0\n0040\n0380\nENDCHAR\nSTARTCHAR U_5F4F\nENCODING 24399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\n2AA0\n2EE0\nEAA0\n8FE0\n8900\nEFC0\n2900\n2FE0\nA300\n5CE0\nENDCHAR\nSTARTCHAR U_5F50\nENCODING 24400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n0040\n0040\n0040\n3FC0\n0040\n0040\n0040\n7FC0\n0000\nENDCHAR\nSTARTCHAR U_5F51\nENCODING 24401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\n1000\n1F00\n1100\n1100\n2100\n7E00\n0200\n0200\nFFE0\nENDCHAR\nSTARTCHAR U_5F52\nENCODING 24402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0BE0\n4820\n4820\n4820\n4BE0\n4820\n4820\n1020\n27E0\n4020\nENDCHAR\nSTARTCHAR U_5F53\nENCODING 24403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n2480\n1500\n7FC0\n0040\n0040\n3FC0\n0040\n0040\n7FC0\nENDCHAR\nSTARTCHAR U_5F54\nENCODING 24404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1100\n3F00\n0200\nFFE0\n4440\n2680\n1D00\n2480\nD460\n0800\nENDCHAR\nSTARTCHAR U_5F55\nENCODING 24405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0080\n3F80\n0080\nFFE0\n2440\n1680\n0D00\n3480\nC460\n0C00\nENDCHAR\nSTARTCHAR U_5F56\nENCODING 24406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1080\n3F00\n0100\nFFE0\n1440\n6A80\n1700\n6A80\n1240\n6C20\nENDCHAR\nSTARTCHAR U_5F57\nENCODING 24407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2100\nFBC0\n2100\nFBE0\n2100\n7FC0\n0040\n3FC0\n0040\n7FC0\nENDCHAR\nSTARTCHAR U_5F58\nENCODING 24408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n2100\n3F00\n0100\nFFE0\n8880\nEFA0\n94C0\n9F80\nCAA0\n9160\nENDCHAR\nSTARTCHAR U_5F59\nENCODING 24409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n2100\nFFE0\n8020\nBFA0\n2480\n3F80\n2480\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_5F5A\nENCODING 24410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0080\nFFE0\nA4A0\n3F80\n2480\n3F80\n0400\nFFE0\n2480\nC460\nENDCHAR\nSTARTCHAR U_5F5B\nENCODING 24411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0080\n7FC0\n1280\n5440\nFFA0\n3A80\n5580\nFFE0\n1100\n2100\nENDCHAR\nSTARTCHAR U_5F5C\nENCODING 24412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F00\n1100\nFFE0\n5580\nFE40\n5BE0\n9540\n2280\nFFE0\n2100\n4100\nENDCHAR\nSTARTCHAR U_5F5D\nENCODING 24413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n2100\nFFE0\n5480\n3940\nFFA0\n39C0\n56A0\nFFE0\n1100\n6100\nENDCHAR\nSTARTCHAR U_5F5E\nENCODING 24414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0080\nFFE0\n5680\n3940\nFFE0\n39C0\n56A0\nFFE0\n1080\n2080\nENDCHAR\nSTARTCHAR U_5F5F\nENCODING 24415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n0BE0\n7E80\n0BC0\nFA80\n13C0\nFA80\n97C0\n5280\n1100\n36E0\nENDCHAR\nSTARTCHAR U_5F60\nENCODING 24416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A80\n0FE0\n7A80\n07C0\nFA80\n2FC0\nFA80\n17C0\nFA80\n5100\n36E0\nENDCHAR\nSTARTCHAR U_5F61\nENCODING 24417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0200\n0400\n1900\n6200\n0400\n1880\n6100\n0200\n0C00\n7000\nENDCHAR\nSTARTCHAR U_5F62\nENCODING 24418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E20\n2440\n2480\n2420\nFE40\n2480\n2500\n2420\n2440\n4480\n8700\nENDCHAR\nSTARTCHAR U_5F63\nENCODING 24419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2080\nFB00\n5040\n5080\n5300\n5040\n2080\n3300\n4C00\n83E0\nENDCHAR\nSTARTCHAR U_5F64\nENCODING 24420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3E00\n2220\n3240\n2A80\n2220\nFF40\n2280\n2220\n2240\n4A80\n8500\nENDCHAR\nSTARTCHAR U_5F65\nENCODING 24421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FC0\n0A80\n0500\n7FE0\n4300\n5CC0\n4300\n5CC0\n4300\n9C00\nENDCHAR\nSTARTCHAR U_5F66\nENCODING 24422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FC0\n1080\n0900\n7FE0\n4300\n5CC0\n4300\n5CC0\n4300\n9C00\nENDCHAR\nSTARTCHAR U_5F67\nENCODING 24423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n0480\nFFE0\n0500\n7680\n5520\n7A40\n0680\n3920\nC2A0\n0C60\nENDCHAR\nSTARTCHAR U_5F68\nENCODING 24424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0020\nFE20\n0040\nEEA0\nAA20\nEE40\nAA80\nAA20\nAA20\nAA40\nAA80\nENDCHAR\nSTARTCHAR U_5F69\nENCODING 24425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C40\nF280\n5500\n2820\n1040\nFE80\n3900\n5420\n9240\n1080\n1300\nENDCHAR\nSTARTCHAR U_5F6A\nENCODING 24426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1E20\n1040\n7EA0\n5240\n7C80\n5220\n5E40\n4080\n5D20\n9420\nA3E0\nENDCHAR\nSTARTCHAR U_5F6B\nENCODING 24427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE40\n9280\nBB00\n9220\nFE40\n8280\nBB00\nAA20\nBA40\n8280\n8700\nENDCHAR\nSTARTCHAR U_5F6C\nENCODING 24428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2220\nFF40\n2280\n7620\n6B40\nAA80\nA220\n2240\n2280\n2300\nENDCHAR\nSTARTCHAR U_5F6D\nENCODING 24429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFE40\n1080\n7D20\n0040\n7C80\n4500\n7C20\n2840\n2C80\nF300\nENDCHAR\nSTARTCHAR U_5F6E\nENCODING 24430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFE40\nAA80\n4520\n9240\n2880\n4500\nFE20\n4440\n4480\n7F00\nENDCHAR\nSTARTCHAR U_5F6F\nENCODING 24431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\n2840\nFE80\nAB20\nFE40\n0080\n7D00\n0020\nFE40\n5480\nB300\nENDCHAR\nSTARTCHAR U_5F70\nENCODING 24432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFE40\n2880\nFF20\n4440\n7C80\n4500\n7C20\n1040\nFE80\n1100\nENDCHAR\nSTARTCHAR U_5F71\nENCODING 24433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n4440\n7C80\n4520\n7C40\n1080\nFF00\n4420\n7C40\n5480\nB300\nENDCHAR\nSTARTCHAR U_5F72\nENCODING 24434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7720\n0020\n7740\n5580\n3F20\n5440\n7F80\n5520\n7F40\n5480\n9F00\nENDCHAR\nSTARTCHAR U_5F73\nENCODING 24435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n2000\n4000\n8800\n1000\n2000\n6000\nA000\n2000\n2000\n2000\nENDCHAR\nSTARTCHAR U_5F74\nENCODING 24436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2200\n43E0\n9420\n2820\n6220\nA120\n2020\n2020\n2140\n2080\nENDCHAR\nSTARTCHAR U_5F75\nENCODING 24437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2500\n4560\n97A0\n2D20\n6520\nA520\n2560\n2500\n2420\n23E0\nENDCHAR\nSTARTCHAR U_5F76\nENCODING 24438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\n2440\n4440\n9480\n25E0\n6420\nA620\n2540\n2880\n2940\n3620\nENDCHAR\nSTARTCHAR U_5F77\nENCODING 24439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2100\n4FE0\n9200\n2200\n63C0\nA240\n2240\n2240\n2540\n2880\nENDCHAR\nSTARTCHAR U_5F78\nENCODING 24440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4500\n8480\n2480\n4840\nCA40\n5220\n4400\n4480\n5FC0\n4840\nENDCHAR\nSTARTCHAR U_5F79\nENCODING 24441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\n4480\n8480\n08E0\n3000\n4780\nC480\n4300\n4300\n4480\n5860\nENDCHAR\nSTARTCHAR U_5F7A\nENCODING 24442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n27C0\n4100\n8100\n1100\n2100\n67C0\nA100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_5F7B\nENCODING 24443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n4BE0\n88A0\n2CA0\n58A0\nC8A0\n4D20\n4920\n4220\n44A0\n4840\nENDCHAR\nSTARTCHAR U_5F7C\nENCODING 24444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4FE0\n8920\n2900\n4900\nCFC0\n4C40\n4A80\n5100\n5280\n6C60\nENDCHAR\nSTARTCHAR U_5F7D\nENCODING 24445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n4F00\n8900\n2900\n4FE0\nC900\n4900\n4880\n4AA0\n4D60\n4920\nENDCHAR\nSTARTCHAR U_5F7E\nENCODING 24446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n4500\n8880\n3440\n4220\nDFC0\n4080\n4100\n4600\n4200\n4100\nENDCHAR\nSTARTCHAR U_5F7F\nENCODING 24447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n2280\n57E0\nA2A0\n6FE0\nAA80\n2FE0\n22A0\n22E0\n2480\n2880\nENDCHAR\nSTARTCHAR U_5F80\nENCODING 24448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2100\n4FE0\n9100\n2100\n6100\nA7C0\n2100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_5F81\nENCODING 24449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n4100\n9100\n2100\n65E0\nA500\n2500\n2500\n2500\n3FE0\nENDCHAR\nSTARTCHAR U_5F82\nENCODING 24450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n2440\n4440\n9440\n27C0\n6440\nA440\n27C0\n2440\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_5F83\nENCODING 24451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2500\n4500\n97C0\n2900\n6100\nA7C0\n2100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_5F84\nENCODING 24452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n2080\n4900\n9280\n2440\n6820\nA7C0\n2100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_5F85\nENCODING 24453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2100\n47C0\n9100\n1FE0\n2080\n6FE0\nA480\n2280\n2080\n2180\nENDCHAR\nSTARTCHAR U_5F86\nENCODING 24454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n4280\n8280\n1FE0\n2AA0\n6AA0\nAAA0\n2C60\n2820\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_5F87\nENCODING 24455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n27E0\n4820\n97A0\n24A0\n67A0\nA4A0\n27A0\n2020\n20A0\n2040\nENDCHAR\nSTARTCHAR U_5F88\nENCODING 24456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n2440\n47C0\n9440\n27C0\n6520\nA540\n2480\n2480\n2640\n2420\nENDCHAR\nSTARTCHAR U_5F89\nENCODING 24457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n2280\n4FE0\n9100\n2100\n67C0\nA100\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_5F8A\nENCODING 24458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n5020\n9020\n37A0\n54A0\nD4A0\n57A0\n5020\n5020\n5FE0\n5020\nENDCHAR\nSTARTCHAR U_5F8B\nENCODING 24459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n5FC0\n8240\n3FE0\n4240\nDFC0\n4200\n5FC0\n4200\n7FE0\n4200\nENDCHAR\nSTARTCHAR U_5F8C\nENCODING 24460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2480\n4700\n9240\n2FE0\n6420\nA7C0\n2C40\n3280\n2380\n2C60\nENDCHAR\nSTARTCHAR U_5F8D\nENCODING 24461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n5100\n9100\n2FE0\n6100\nA100\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_5F8E\nENCODING 24462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n2440\n4440\n97C0\n2000\n6FE0\nA100\n27C0\n2100\n2100\n3FE0\nENDCHAR\nSTARTCHAR U_5F8F\nENCODING 24463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2100\n45C0\n9500\n2FE0\n4100\nC520\n4540\n4980\n4300\n5C00\nENDCHAR\nSTARTCHAR U_5F90\nENCODING 24464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4280\n9440\n2820\n67C0\nA100\n2FE0\n2100\n2540\n2920\n2300\nENDCHAR\nSTARTCHAR U_5F91\nENCODING 24465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n2540\n4540\n9A80\n2540\n6540\nA000\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_5F92\nENCODING 24466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2100\n47C0\n9100\n2FE0\n6100\nA500\n25E0\n2500\n2B00\n30E0\nENDCHAR\nSTARTCHAR U_5F93\nENCODING 24467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n4FE0\n8100\n2100\n4500\nC5C0\n4500\n4500\n4B00\n50E0\nENDCHAR\nSTARTCHAR U_5F94\nENCODING 24468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n2480\n4FE0\n9480\n2200\n6FC0\nA080\n2100\n2600\n2C00\n33E0\nENDCHAR\nSTARTCHAR U_5F95\nENCODING 24469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n4200\n9FC0\n3240\n4A80\nFFE0\n4700\n4A80\n5240\n6220\n4200\nENDCHAR\nSTARTCHAR U_5F96\nENCODING 24470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2100\n4FE0\n9820\n27C0\n6000\nAFE0\n2100\n2540\n2920\n2300\nENDCHAR\nSTARTCHAR U_5F97\nENCODING 24471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n47C0\n9440\n27C0\n6000\nA7E0\n2080\n2FE0\n2480\n2180\nENDCHAR\nSTARTCHAR U_5F98\nENCODING 24472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n2280\n4EE0\n9280\n2280\n6EE0\nA280\n2280\n2EE0\n2280\n2280\nENDCHAR\nSTARTCHAR U_5F99\nENCODING 24473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2500\n45E0\n9500\n2FE0\n6100\nA500\n25E0\n2500\n2B00\n30E0\nENDCHAR\nSTARTCHAR U_5F9A\nENCODING 24474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n4200\n9FC0\n3AC0\n5740\nDFC0\n4700\n4A80\n5240\n6220\nENDCHAR\nSTARTCHAR U_5F9B\nENCODING 24475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2FE0\n4280\n9440\n2FE0\n6040\nA740\n2540\n2740\n2040\n20C0\nENDCHAR\nSTARTCHAR U_5F9C\nENCODING 24476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2920\n4540\n9100\n2FE0\n6820\nABA0\n2AA0\n2BA0\n2820\n2860\nENDCHAR\nSTARTCHAR U_5F9D\nENCODING 24477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4200\n97C0\n2440\n67C0\nA440\n27C0\n2440\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_5F9E\nENCODING 24478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n2240\n45A0\n9920\n2000\n6500\nA500\n25E0\n2500\n2B00\n31E0\nENDCHAR\nSTARTCHAR U_5F9F\nENCODING 24479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n2920\n4920\n9BA0\n2920\n6FE0\nA820\n2BA0\n2AA0\n2BA0\n3060\nENDCHAR\nSTARTCHAR U_5FA0\nENCODING 24480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2100\n4FE0\n9540\n2540\n6BA0\nA120\n2380\n2540\n2920\n2100\nENDCHAR\nSTARTCHAR U_5FA1\nENCODING 24481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n24E0\n47A0\n9AA0\n2FA0\n62A0\nABA0\n2AA0\n2BE0\n3C80\n2080\nENDCHAR\nSTARTCHAR U_5FA2\nENCODING 24482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FC0\n4280\n9FE0\n2280\n4F80\nC200\n4B80\n4A00\n5600\n63C0\nENDCHAR\nSTARTCHAR U_5FA3\nENCODING 24483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n2280\n4FE0\n9280\n2FE0\n6000\nA7C0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_5FA4\nENCODING 24484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3BC0\n4940\n8FE0\n3140\n5BC0\nC900\n6FE0\n5100\n5900\n67E0\nENDCHAR\nSTARTCHAR U_5FA5\nENCODING 24485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n4440\n87C0\n1440\n27C0\n6000\nAFE0\n2100\n25C0\n2B00\n30E0\nENDCHAR\nSTARTCHAR U_5FA6\nENCODING 24486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n4A20\n8A20\n2EE0\n4800\nCEE0\n48A0\n4EA0\n4840\n48A0\n4920\nENDCHAR\nSTARTCHAR U_5FA7\nENCODING 24487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\n4840\n9FC0\n2800\n4FE0\nCAA0\n5FE0\n5AA0\n6AA0\n4860\nENDCHAR\nSTARTCHAR U_5FA8\nENCODING 24488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n27C0\n4440\n97C0\n2440\n6FE0\nA100\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_5FA9\nENCODING 24489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n27E0\n4C40\n97C0\n2440\n67C0\nA400\n27C0\n2C80\n3300\n2CE0\nENDCHAR\nSTARTCHAR U_5FAA\nENCODING 24490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n2880\n4FE0\n9880\n2BE0\n6A20\nABE0\n2A20\n2BE0\n2A20\n33E0\nENDCHAR\nSTARTCHAR U_5FAB\nENCODING 24491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n27C0\n4240\n9FE0\n2440\n67C0\nA080\n27E0\n2480\n2FE0\n2080\nENDCHAR\nSTARTCHAR U_5FAC\nENCODING 24492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8480\n3FE0\n5120\nDFE0\n4200\n43C0\n4240\n4440\n48C0\nENDCHAR\nSTARTCHAR U_5FAD\nENCODING 24493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n4E40\n8A40\n1580\n2900\n6FC0\nB100\n2FE0\n2100\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_5FAE\nENCODING 24494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\n6A80\nBE80\n01E0\n5D40\nC340\n5D40\n5480\n5680\n5540\n6220\nENDCHAR\nSTARTCHAR U_5FAF\nENCODING 24495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FA0\n2A40\n4580\n9240\n2F80\n6240\nAFA0\n2100\n2FE0\n2280\n3C60\nENDCHAR\nSTARTCHAR U_5FB0\nENCODING 24496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n45C0\n9500\n1FE0\n2000\n67E0\nA100\n25C0\n2500\n2FE0\nENDCHAR\nSTARTCHAR U_5FB1\nENCODING 24497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2500\n5FC0\n9540\n3FC0\n4000\nCF80\n4000\n5FE0\n4A80\n5640\nENDCHAR\nSTARTCHAR U_5FB2\nENCODING 24498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n4820\n8FE0\n1AA0\n29C0\n6AA0\nABE0\n2C80\n2FE0\n2880\n3080\nENDCHAR\nSTARTCHAR U_5FB3\nENCODING 24499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4100\n9FE0\n2AA0\n4FE0\nC400\n4A40\n5AA0\n68A0\n4780\nENDCHAR\nSTARTCHAR U_5FB4\nENCODING 24500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n5680\n9FE0\n2140\n5F40\nC540\n5E80\n4480\n4540\n5A20\nENDCHAR\nSTARTCHAR U_5FB5\nENCODING 24501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3540\n5540\n9F60\n10A0\n2EA0\n60A0\nBEA0\n24A0\n2E40\n24A0\n3F20\nENDCHAR\nSTARTCHAR U_5FB6\nENCODING 24502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3580\n4E80\n84E0\n3F20\n5520\nD520\n5FA0\n5540\n5540\n55A0\n5320\nENDCHAR\nSTARTCHAR U_5FB7\nENCODING 24503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n5FE0\n8200\n3FC0\n5540\nDFC0\n4000\n7FE0\n4A40\n58A0\n6F80\nENDCHAR\nSTARTCHAR U_5FB8\nENCODING 24504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\n4480\n9FE0\n2A40\n4A40\nCFC0\n4200\n4FC0\n4200\n5FE0\nENDCHAR\nSTARTCHAR U_5FB9\nENCODING 24505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n5F80\n8AE0\n3FA0\n40A0\nDEA0\n52A0\n5E40\n5240\n5EA0\n5320\nENDCHAR\nSTARTCHAR U_5FBA\nENCODING 24506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\n4200\n9FE0\n2480\n4FC0\nC480\n5FE0\n4500\n4520\n58E0\nENDCHAR\nSTARTCHAR U_5FBB\nENCODING 24507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n4440\n8BA0\n1000\n2FE0\n6AA0\nAFE0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_5FBC\nENCODING 24508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n5E80\n92E0\n3FA0\n52A0\nFFA0\n48A0\n4EA0\n4A40\n52A0\n6720\nENDCHAR\nSTARTCHAR U_5FBD\nENCODING 24509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\n7E80\n80E0\n3FA0\n48A0\nDCA0\n4AA0\n7F40\n5C40\n6AA0\n5920\nENDCHAR\nSTARTCHAR U_5FBE\nENCODING 24510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3540\n5540\n9F60\n25A0\n5EA0\nC0A0\n5EA0\n40A0\n5E40\n52A0\n5F20\nENDCHAR\nSTARTCHAR U_5FBF\nENCODING 24511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n5F80\n8AE0\n2420\n5FE0\nD280\n5EE0\n5280\n5EE0\n5280\n56E0\nENDCHAR\nSTARTCHAR U_5FC0\nENCODING 24512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8AA0\n2EE0\n4280\nCFE0\n4280\n5FE0\n4D40\n5480\n4660\nENDCHAR\nSTARTCHAR U_5FC1\nENCODING 24513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n4820\n8FE0\n2940\n4FC0\nD120\n5FE0\n4D40\n53A0\n4540\n4B20\nENDCHAR\nSTARTCHAR U_5FC2\nENCODING 24514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n4EE0\nBAA0\n6EE0\nA900\n2FE0\n3900\n2FC0\n2900\n2FE0\nENDCHAR\nSTARTCHAR U_5FC3\nENCODING 24515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n1200\n1200\n1040\n5020\n5020\n50A0\n9080\n1080\n0F80\nENDCHAR\nSTARTCHAR U_5FC4\nENCODING 24516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2000\n3000\nA800\nA800\n2000\n2000\n2000\n2000\n2000\n2000\nENDCHAR\nSTARTCHAR U_5FC5\nENCODING 24517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n0480\n0500\n1100\n5240\n5220\n9420\n1880\n1080\n3080\nCF80\nENDCHAR\nSTARTCHAR U_5FC6\nENCODING 24518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n3040\nA880\nA880\nA100\n2200\n2200\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_5FC7\nENCODING 24519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2100\nB7E0\nA920\n2120\n2120\n2220\n2220\n24A0\n2840\nENDCHAR\nSTARTCHAR U_5FC8\nENCODING 24520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n3F80\n0000\n0000\nFFE0\n0000\n0440\n5220\n50A0\n9080\n0F80\nENDCHAR\nSTARTCHAR U_5FC9\nENCODING 24521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2120\nB120\nA920\n2120\n2120\n2220\n2220\n24A0\n2840\nENDCHAR\nSTARTCHAR U_5FCA\nENCODING 24522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2100\nB100\nA900\n2100\n2100\n2100\n2100\n2500\n2200\nENDCHAR\nSTARTCHAR U_5FCB\nENCODING 24523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n2040\nB040\nA840\n27C0\n2400\n2400\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_5FCC\nENCODING 24524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0080\n3F80\n2020\n2020\n1FE0\n0400\n1240\n50A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_5FCD\nENCODING 24525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0440\n2440\n2440\n4840\n1180\n6400\n1240\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_5FCE\nENCODING 24526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n7C00\n0400\nFFE0\n0400\n0400\n0440\n5220\n52A0\n9080\n0F80\nENDCHAR\nSTARTCHAR U_5FCF\nENCODING 24527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nA100\nB100\nA900\n2FE0\n2100\n2100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_5FD0\nENCODING 24528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n07C0\n0400\n0400\nFFE0\n0400\n1240\n50A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_5FD1\nENCODING 24529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n0700\n0480\n0400\n0000\n0400\n1240\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_5FD2\nENCODING 24530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n0120\nFFE0\n1100\n0900\n0100\n1500\n52A0\n52A0\n9460\n0C20\nENDCHAR\nSTARTCHAR U_5FD3\nENCODING 24531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n2100\nB100\nA900\nAFE0\n2100\n2100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_5FD4\nENCODING 24532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nA3E0\nB400\nABC0\nA080\n2100\n2200\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_5FD5\nENCODING 24533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nB100\nAFE0\nA100\nA100\n2280\n2280\n2440\n2440\n2820\nENDCHAR\nSTARTCHAR U_5FD6\nENCODING 24534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2040\nA040\nB7E0\nA840\n2240\n2140\n2040\n2040\n2140\n2080\nENDCHAR\nSTARTCHAR U_5FD7\nENCODING 24535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0400\n0400\n7FC0\n0400\n1240\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_5FD8\nENCODING 24536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\nFFE0\n2000\n2000\n3FC0\n0400\n1240\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_5FD9\nENCODING 24537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2000\nAFE0\nB400\nAC00\nA400\n2400\n2400\n2400\n27E0\nENDCHAR\nSTARTCHAR U_5FDA\nENCODING 24538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2500\nB5C0\nA740\n2D40\n2540\n25C0\n2520\n2420\n23E0\nENDCHAR\nSTARTCHAR U_5FDB\nENCODING 24539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\n2480\n2480\nB480\nB680\nA580\n2480\n2480\n2480\n28A0\n3060\nENDCHAR\nSTARTCHAR U_5FDC\nENCODING 24540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n7FE0\n4000\n4400\n4200\n4A40\n5820\n68A0\n4880\n8F80\nENDCHAR\nSTARTCHAR U_5FDD\nENCODING 24541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n0400\nFFE0\n1100\n2480\n4440\nA6A0\n2540\n4540\n0C00\nENDCHAR\nSTARTCHAR U_5FDE\nENCODING 24542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n0E00\n3180\nC060\n0400\n1240\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_5FDF\nENCODING 24543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nB440\nB440\nA280\n2280\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_5FE0\nENCODING 24544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4440\n4440\n7FC0\n0400\n0400\n1240\n50A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_5FE1\nENCODING 24545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nAFE0\nB920\nA920\n2FE0\n2100\n2100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_5FE2\nENCODING 24546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n3F80\n0880\n0880\nFFE0\n0400\n1240\n50A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_5FE3\nENCODING 24547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2240\n2280\nB3E0\nA220\nA220\n2240\n2540\n2480\n2940\n3220\nENDCHAR\nSTARTCHAR U_5FE4\nENCODING 24548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\nB7C0\nA900\nB100\n3FE0\n2100\n2100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_5FE5\nENCODING 24549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FC0\n4000\n9F80\n0000\n3F80\n0880\n2580\nA0A0\nA260\n9E20\nENDCHAR\nSTARTCHAR U_5FE6\nENCODING 24550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\n6300\nD480\nC840\n54A0\n4480\n4480\n4480\n4880\n5080\nENDCHAR\nSTARTCHAR U_5FE7\nENCODING 24551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2140\n2120\nB7E0\nAA80\n2280\n2280\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_5FE8\nENCODING 24552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nB000\nA800\nAFE0\n2280\n2280\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_5FE9\nENCODING 24553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0900\n1080\n2440\n4920\n1F80\n0000\n1440\n5220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_5FEA\nENCODING 24554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\n3280\nB440\nA440\nA920\n2120\n2200\n2240\n2440\n27E0\nENDCHAR\nSTARTCHAR U_5FEB\nENCODING 24555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n37C0\nAA40\nA240\nBFE0\n2200\n2300\n2480\n2840\n3020\nENDCHAR\nSTARTCHAR U_5FEC\nENCODING 24556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2040\nB280\nA100\nAFE0\n2120\n2100\n2100\n2100\n2300\nENDCHAR\nSTARTCHAR U_5FED\nENCODING 24557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nB100\nA900\nA1C0\n2120\n2100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_5FEE\nENCODING 24558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2FE0\nB100\nA900\nA7C0\n2440\n2280\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_5FEF\nENCODING 24559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2780\n2480\nB480\nAFE0\nA480\n2480\n2480\n24A0\n2660\n2420\nENDCHAR\nSTARTCHAR U_5FF0\nENCODING 24560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2F80\n2280\nB2A0\nACA0\nA960\n2100\n2FE0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_5FF1\nENCODING 24561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n27E0\nB520\nAD40\nA100\n2300\n2300\n2520\n2920\n30E0\nENDCHAR\nSTARTCHAR U_5FF2\nENCODING 24562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\n6200\nDFE0\nC200\n4500\n4500\n4480\n4A80\n4A40\n5020\nENDCHAR\nSTARTCHAR U_5FF3\nENCODING 24563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2FE0\nB100\nAD40\nA540\n27C0\n2100\n2120\n2120\n20E0\nENDCHAR\nSTARTCHAR U_5FF4\nENCODING 24564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nB280\nAC40\nA920\nB080\n27E0\n2040\n2080\n2080\n2100\nENDCHAR\nSTARTCHAR U_5FF5\nENCODING 24565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1500\n22E0\nDF80\n0100\n0200\n1440\n5220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_5FF6\nENCODING 24566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n2000\nB000\nA800\nAFE0\n2100\n2100\n2240\n2420\n2FE0\nENDCHAR\nSTARTCHAR U_5FF7\nENCODING 24567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n28A0\nACA0\nBB20\nA920\n2920\n2AA0\n2AA0\n2CA0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_5FF8\nENCODING 24568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2240\n2240\nB240\nAA40\nAFC0\n2440\n2440\n2440\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_5FF9\nENCODING 24569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4FC0\n4200\nE200\nD200\n4F80\n4200\n4200\n4200\n4200\n5FE0\nENDCHAR\nSTARTCHAR U_5FFA\nENCODING 24570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n27E0\nB520\nA940\nB100\n2100\n2280\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_5FFB\nENCODING 24571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\n2400\nB400\nAFE0\nA480\n2480\n2480\n2480\n2880\n3080\nENDCHAR\nSTARTCHAR U_5FFC\nENCODING 24572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n4200\n5FE0\nE000\nD780\n4480\n4480\n4480\n44A0\n48A0\n5060\nENDCHAR\nSTARTCHAR U_5FFD\nENCODING 24573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FC0\n2A40\n4A40\n1440\n2840\n0580\n1240\n50A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_5FFE\nENCODING 24574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\n3800\nAFC0\nB000\nAF80\n2080\n2080\n20A0\n2060\n2020\nENDCHAR\nSTARTCHAR U_5FFF\nENCODING 24575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n1080\n2040\nFFA0\n0880\n1080\n6700\n1440\n5220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6000\nENCODING 24576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2080\nA100\nB180\nAB40\nA520\n2920\n2100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_6001\nENCODING 24577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n0A00\n3980\nC460\n0000\n1440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6002\nENCODING 24578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n1100\n2A80\n4440\n8820\n0400\n1240\n5020\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6003\nENCODING 24579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n2100\nB100\nAFE0\nA180\n2180\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_6004\nENCODING 24580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\n2820\nBA20\nA940\nA880\n2940\n2E20\n2820\n2800\n2FE0\nENDCHAR\nSTARTCHAR U_6005\nENCODING 24581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2440\n2480\nB500\nA600\nBFE0\n2500\n2500\n2480\n2540\n2620\nENDCHAR\nSTARTCHAR U_6006\nENCODING 24582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nB440\nA820\nAF80\nA480\n2480\n2580\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_6007\nENCODING 24583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\n2400\nB7C0\nAC40\n2440\n2440\n27C0\n2400\n2400\n27E0\nENDCHAR\nSTARTCHAR U_6008\nENCODING 24584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n4A40\n6A40\nDFE0\nCA40\n4A40\n4A40\n4BC0\n4800\n4800\n4FE0\nENDCHAR\nSTARTCHAR U_6009\nENCODING 24585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27C0\nA840\nB740\nA540\n2540\n2740\n24C0\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_600A\nENCODING 24586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2120\nB120\nAA20\nA4A0\nA840\n27E0\n2420\n2420\n2420\n27E0\nENDCHAR\nSTARTCHAR U_600B\nENCODING 24587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2840\nA840\nBFC0\nA900\n2FE0\n2900\n2920\n28A0\n2A60\n2C20\nENDCHAR\nSTARTCHAR U_600C\nENCODING 24588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nB100\nAB80\nA540\nA920\n3120\n2100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_600D\nENCODING 24589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nB3E0\nAE00\nABC0\n2200\n2200\n23E0\n2200\n2200\n2200\nENDCHAR\nSTARTCHAR U_600E\nENCODING 24590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2800\n4F80\n0800\n0FC0\n0800\n5440\n52A0\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_600F\nENCODING 24591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nB7C0\nAD40\nA540\n2540\n2FE0\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_6010\nENCODING 24592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n37E0\nA820\nB7A0\n24A0\n24A0\n27A0\n2020\n20A0\n2040\nENDCHAR\nSTARTCHAR U_6011\nENCODING 24593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2920\n2540\nB100\nAFE0\n2100\n2100\n2FE0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_6012\nENCODING 24594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFA40\n4A40\n4A80\n3180\n2E60\nC000\n1440\n5220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6013\nENCODING 24595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n24E0\nBFA0\nAAA0\nAAA0\nAAA0\n2AA0\n24A0\n2640\n29A0\n3120\nENDCHAR\nSTARTCHAR U_6014\nENCODING 24596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nA100\nB100\nAD00\n25E0\n2500\n2500\n2500\n2500\n2FE0\nENDCHAR\nSTARTCHAR U_6015\nENCODING 24597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2200\n27E0\nB420\nAC20\nA420\n27E0\n2420\n2420\n2420\n27E0\nENDCHAR\nSTARTCHAR U_6016\nENCODING 24598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nB200\nAD00\nA7E0\nAD20\n3520\n2520\n2520\n2560\n2100\nENDCHAR\nSTARTCHAR U_6017\nENCODING 24599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nB1E0\nA900\nA100\n27E0\n2420\n2420\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_6018\nENCODING 24600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n3F80\n2080\n3F80\n0400\n1240\n52A0\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_6019\nENCODING 24601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nAFE0\nB100\nA900\n27C0\n2440\n2440\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_601A\nENCODING 24602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nB440\nAC40\nA7C0\nA440\n2440\n27C0\n2440\n2440\n3FE0\nENDCHAR\nSTARTCHAR U_601B\nENCODING 24603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nA440\nB440\nAFC0\nA440\n2440\n27C0\n2000\n2000\n2FE0\nENDCHAR\nSTARTCHAR U_601C\nENCODING 24604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2500\n2880\nB240\nA120\nAFC0\n2080\n2080\n2500\n2200\n2100\nENDCHAR\nSTARTCHAR U_601D\nENCODING 24605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n2480\n3F80\n2480\n2480\n3F80\n0440\n5220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_601E\nENCODING 24606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nB100\nAFE0\nA920\n2920\n2FE0\n2920\n2920\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_601F\nENCODING 24607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n4F00\n4900\nE900\nDFE0\n4900\n4900\n48A0\n4AA0\n4D60\n4920\nENDCHAR\nSTARTCHAR U_6020\nENCODING 24608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1080\n7FC0\n0040\n3F80\n2080\n3F80\n0440\n5220\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_6021\nENCODING 24609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nB240\nAC20\nAFE0\n2000\n27C0\n2440\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_6022\nENCODING 24610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\nA7C0\nB500\nA900\nBFE0\n2100\n2100\n2280\n2440\n3820\nENDCHAR\nSTARTCHAR U_6023\nENCODING 24611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2400\n3FC0\n4400\nFFC0\n0A00\nF1E0\n0440\n5220\n9080\n0F80\nENDCHAR\nSTARTCHAR U_6024\nENCODING 24612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n2080\n6FE0\nA880\n2480\n2080\n2580\n1240\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6025\nENCODING 24613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F00\n1100\n3FC0\n4040\n1FC0\n0040\n3FC0\n1440\n5220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6026\nENCODING 24614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nA520\nB340\nA900\nAFE0\n2100\n2100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_6027\nENCODING 24615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\nB500\nAFE0\nA900\nB100\n27C0\n2100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6028\nENCODING 24616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3BC0\n4A40\nAA40\n13A0\n2220\n41E0\n1440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6029\nENCODING 24617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nA7E0\nB400\nAC00\nA520\n2540\n2580\n2520\n2920\n30E0\nENDCHAR\nSTARTCHAR U_602A\nENCODING 24618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2440\nB280\nA900\nA280\nAD60\n2100\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_602B\nENCODING 24619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nB2A0\nAFE0\nAA80\n2FE0\n22A0\n22A0\n22E0\n2480\n2880\nENDCHAR\nSTARTCHAR U_602C\nENCODING 24620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nBAA0\nAAA0\nAAA0\nAAA0\n2CE0\n2820\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_602D\nENCODING 24621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2140\nB240\nAA40\nA280\nAAA0\n2AA0\n3300\n2240\n2640\n29C0\nENDCHAR\nSTARTCHAR U_602E\nENCODING 24622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\nB9E0\nAAA0\nACA0\nA4A0\n24A0\n2AA0\n3D20\n22A0\n2440\nENDCHAR\nSTARTCHAR U_602F\nENCODING 24623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nB7C0\nA900\nA100\nAFE0\n2100\n2240\n2440\n2FA0\n2420\nENDCHAR\nSTARTCHAR U_6030\nENCODING 24624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nA200\nB440\nAF80\n2100\n2200\n2440\n2FE0\n2020\nENDCHAR\nSTARTCHAR U_6031\nENCODING 24625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FC0\n2540\nD540\n0A40\n3540\n0A80\n0000\n54C0\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_6032\nENCODING 24626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nA100\nBFE0\nA920\nA920\n2AA0\n2C60\n2820\n2820\n28E0\nENDCHAR\nSTARTCHAR U_6033\nENCODING 24627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nA440\nB440\nAC40\nA7C0\n2280\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_6034\nENCODING 24628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n2140\nAFE0\nB900\nA920\nA920\n2940\n2B40\n2CA0\n2960\n2220\nENDCHAR\nSTARTCHAR U_6035\nENCODING 24629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n2140\nA100\nB7E0\nA900\nA380\n2340\n2540\n2520\n2920\n3100\nENDCHAR\nSTARTCHAR U_6036\nENCODING 24630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2FE0\nB940\nA900\n2FC0\n2A40\n2A40\n2980\n2A40\n3420\nENDCHAR\nSTARTCHAR U_6037\nENCODING 24631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\n0400\n2500\n2500\nC4E0\n0400\n1240\n5020\n5080\n8F80\nENDCHAR\nSTARTCHAR U_6038\nENCODING 24632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n0480\n0400\nFFE0\n1500\n2480\nC460\n1440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6039\nENCODING 24633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n25C0\n2740\n6D40\nA580\n2420\n23E0\n1400\n5240\n90A0\n8FA0\nENDCHAR\nSTARTCHAR U_603A\nENCODING 24634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2720\n3120\nA140\nAD80\n2540\n2920\n3120\n2500\n2200\nENDCHAR\nSTARTCHAR U_603B\nENCODING 24635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n0A00\n3F80\n2080\n2080\n3F80\n2080\n0440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_603C\nENCODING 24636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n17E0\n5080\n2480\n3280\n4880\n8180\n1400\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_603D\nENCODING 24637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n37C0\nA900\nA100\n2FE0\n2100\n2380\n2540\n2920\n2100\nENDCHAR\nSTARTCHAR U_603E\nENCODING 24638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n2440\nB440\nA440\nA7C0\n2000\n2280\n2240\n2420\n2820\nENDCHAR\nSTARTCHAR U_603F\nENCODING 24639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2240\nB180\nAA40\nA520\nA100\n27C0\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_6040\nENCODING 24640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nA480\nBB00\nA280\nADE0\n2220\n2540\n2080\n2300\n2C00\nENDCHAR\nSTARTCHAR U_6041\nENCODING 24641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n3F00\n4200\n5FE0\nC200\n4FC0\n4000\n1440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6042\nENCODING 24642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nB7E0\nA820\nA3A0\nA2A0\n23A0\n22A0\n23A0\n2020\n20C0\nENDCHAR\nSTARTCHAR U_6043\nENCODING 24643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nB100\nA900\nAFE0\nA080\n2FE0\n2480\n2280\n2080\n2180\nENDCHAR\nSTARTCHAR U_6044\nENCODING 24644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA100\nB100\nA7C0\nA000\n27C0\n2440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_6045\nENCODING 24645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n27A0\nB140\nA940\nAFE0\nA100\n2240\n2680\n2B20\n2220\n21E0\nENDCHAR\nSTARTCHAR U_6046\nENCODING 24646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2200\nB3C0\nAC40\nA540\nA4C0\n2A40\n2940\n2040\n2040\n3FE0\nENDCHAR\nSTARTCHAR U_6047\nENCODING 24647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nB7E0\nAC80\nA480\nA7E0\n2480\n2480\n27E0\n2400\n27E0\nENDCHAR\nSTARTCHAR U_6048\nENCODING 24648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2200\n2440\nB7E0\nA900\n2FC0\n3100\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_6049\nENCODING 24649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24C0\n2700\nB420\nAFE0\nA000\nA7E0\n2420\n27E0\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_604A\nENCODING 24650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n27C0\nB240\nA340\n2480\n3FE0\n2AA0\n2AA0\n2AA0\n3540\nENDCHAR\nSTARTCHAR U_604B\nENCODING 24651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0A00\n2A80\n2A40\n4A40\n0000\n5440\n52A0\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_604C\nENCODING 24652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nAAA0\nB6C0\nAA80\nA280\n26C0\n2AA0\n2280\n24A0\n2860\nENDCHAR\nSTARTCHAR U_604D\nENCODING 24653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2920\nB540\nAB80\nA100\nAFE0\n2280\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_604E\nENCODING 24654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2200\nB440\nAFE0\n2100\n27C0\n2100\n2100\n2FE0\n2000\nENDCHAR\nSTARTCHAR U_604F\nENCODING 24655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n13E0\nFC40\n2480\n6BE0\n1080\nE980\n0440\n54A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6050\nENCODING 24656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nFC80\n2680\n25A0\n3CA0\nC860\n0400\n1240\n50A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6051\nENCODING 24657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nA480\nBFE0\nA800\n2BC0\n2A40\n2AC0\n2A20\n2A20\n31E0\nENDCHAR\nSTARTCHAR U_6052\nENCODING 24658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2000\nB7C0\nAC40\nA440\n27C0\n2440\n27C0\n2440\n2000\n2FE0\nENDCHAR\nSTARTCHAR U_6053\nENCODING 24659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nA280\nBFE0\nAAA0\nAAA0\n2AA0\n2CE0\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_6054\nENCODING 24660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nAFE0\nB480\nA840\nB4A0\n2480\n2300\n2300\n2480\n3860\nENDCHAR\nSTARTCHAR U_6055\nENCODING 24661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBC0\n2A40\n4A40\n3240\n2BC0\nC400\n1440\n5220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6056\nENCODING 24662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n2A80\n2480\n2A80\n3F80\n0440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6057\nENCODING 24663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\n2300\nB480\nAFC0\nB020\n27C0\n2200\n2380\n2080\n2180\nENDCHAR\nSTARTCHAR U_6058\nENCODING 24664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\nB480\nAFE0\nB480\nA5C0\n26A0\n26A0\n2480\n2480\n2480\nENDCHAR\nSTARTCHAR U_6059\nENCODING 24665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n0A00\n7FE0\n0400\n3FC0\n0400\nFFE0\n0400\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_605A\nENCODING 24666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\nFFE0\n0400\n7FC0\n0400\nFFE0\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_605B\nENCODING 24667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nB820\nABA0\nAAA0\nAAA0\n2BA0\n2AA0\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_605C\nENCODING 24668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\nAFE0\nA100\nBF00\nA500\n2500\n24A0\n26A0\n3860\n2020\nENDCHAR\nSTARTCHAR U_605D\nENCODING 24669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n2120\nF920\n2120\nFA20\n24C0\n1440\n5220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_605E\nENCODING 24670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA100\nB7C0\nA940\nA7C0\n2500\n2FE0\n2120\n2280\n2C60\nENDCHAR\nSTARTCHAR U_605F\nENCODING 24671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n2FE0\nA820\nB520\nAAA0\nADA0\n28A0\n2FA0\n28A0\n2020\n20C0\nENDCHAR\nSTARTCHAR U_6060\nENCODING 24672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n2FE0\nB280\nA480\nAFC0\n3480\n2480\n2480\n27E0\n2400\nENDCHAR\nSTARTCHAR U_6061\nENCODING 24673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2280\n2300\nB480\nA200\nAFE0\n2200\n2500\n2900\n2240\n27E0\nENDCHAR\nSTARTCHAR U_6062\nENCODING 24674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nB200\nAA80\nA480\nA5A0\n2AC0\n3080\n2140\n2240\n2420\nENDCHAR\nSTARTCHAR U_6063\nENCODING 24675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n2A20\nC240\n4500\n4880\n7060\n1440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6064\nENCODING 24676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n2200\nAFE0\nBAA0\nAAA0\nAAA0\n2AA0\n2AA0\n2AA0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_6065\nENCODING 24677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n5080\n5280\n7200\n5240\n7620\n5A20\n5240\n7A40\nD240\n13C0\nENDCHAR\nSTARTCHAR U_6066\nENCODING 24678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2400\nAFE0\nB820\nABA0\nAAA0\n2AA0\n2BA0\n2820\n2820\n2860\nENDCHAR\nSTARTCHAR U_6067\nENCODING 24679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0800\n7FC0\n4A40\n4A40\n4A40\n40C0\n1440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6068\nENCODING 24680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nB7C0\nAC40\nA7C0\nA520\n2540\n2480\n2480\n2640\n2420\nENDCHAR\nSTARTCHAR U_6069\nENCODING 24681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n7FC0\n4440\n4A40\n5140\n7FC0\n0400\n6240\nA0A0\n9FA0\nENDCHAR\nSTARTCHAR U_606A\nENCODING 24682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nA440\nBA80\nA100\n2280\n2FE0\n2440\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_606B\nENCODING 24683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nABA0\nB820\nABA0\nAAA0\n2AA0\n2BA0\n2820\n2820\n28E0\nENDCHAR\nSTARTCHAR U_606C\nENCODING 24684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nB100\nAFE0\nA100\nA100\n27E0\n2420\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_606D\nENCODING 24685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1100\nFFE0\n1200\n2900\n48C0\nAA20\n2940\n4940\n1800\nENDCHAR\nSTARTCHAR U_606E\nENCODING 24686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nBC40\nA820\nA7C0\nA100\n2100\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_606F\nENCODING 24687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3F80\n2080\n3F80\n5440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_6070\nENCODING 24688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nB440\nA820\nA7C0\n2000\n27C0\n2440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_6071\nENCODING 24689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nB540\nAA20\nA480\n2FC0\n2000\n2280\n22A0\n24A0\n28E0\nENDCHAR\nSTARTCHAR U_6072\nENCODING 24690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nB7E0\nAA40\nA240\nAFE0\n2240\n2240\n2240\n2440\n2840\nENDCHAR\nSTARTCHAR U_6073\nENCODING 24691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3FA0\n2440\n2B80\n34E0\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_6074\nENCODING 24692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n0000\n3F80\n2080\n3F80\n2080\n3F80\n5440\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_6075\nENCODING 24693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n3F80\n2480\n3F80\n2480\n3F80\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_6076\nENCODING 24694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0A00\n4A40\n2A80\n0A00\nFFE0\n0000\n1440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6077\nENCODING 24695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n2FC0\n6200\nA700\n2A80\n2260\n0800\n54C0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6078\nENCODING 24696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2080\nB1E0\nA8A0\nBFA0\n24A0\n24A0\n2AA0\n3DA0\n2120\n22C0\nENDCHAR\nSTARTCHAR U_6079\nENCODING 24697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nB4C0\nACA0\nA7E0\nA480\n2480\n2480\n2940\n2A20\n3420\nENDCHAR\nSTARTCHAR U_607A\nENCODING 24698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\nA520\nB7E0\nA800\nA7E0\n2020\n27E0\n2400\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_607B\nENCODING 24699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F20\n5120\nF5A0\nD5A0\nD5A0\n55A0\n55A0\n5520\n5520\n4A20\n5160\nENDCHAR\nSTARTCHAR U_607C\nENCODING 24700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nAFE0\nB480\nAAA0\nA920\n2AA0\n2CA0\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_607D\nENCODING 24701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nA100\nB7E0\nAC80\nA7C0\n2080\n2FE0\n2080\n2080\n2080\nENDCHAR\nSTARTCHAR U_607E\nENCODING 24702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n2FE0\nB480\nA200\nBFE0\n2400\n2400\n2400\n27C0\n2000\nENDCHAR\nSTARTCHAR U_607F\nENCODING 24703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0A00\n7FC0\n4440\n7FC0\n4440\n7FC0\n4440\n12C0\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_6080\nENCODING 24704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2440\nB280\nAFE0\nA920\nAFE0\n2920\n2FE0\n2920\n2920\n2860\nENDCHAR\nSTARTCHAR U_6081\nENCODING 24705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nB3C0\nA800\nA7E0\nA420\n27E0\n2420\n27E0\n2420\n24E0\nENDCHAR\nSTARTCHAR U_6082\nENCODING 24706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2880\n2EE0\nB880\nACA0\nA960\n2100\n2FC0\n2100\n2100\n3FE0\nENDCHAR\nSTARTCHAR U_6083\nENCODING 24707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nA920\nBFE0\nA920\nABA0\n2D60\n2920\n2920\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_6084\nENCODING 24708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nA100\nB7E0\nA420\nA7E0\n2420\n27E0\n2420\n2420\n24E0\nENDCHAR\nSTARTCHAR U_6085\nENCODING 24709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2440\nB7E0\nAC40\nA440\nA7C0\n2280\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_6086\nENCODING 24710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n1100\nEEE0\n0400\n7FC0\n1500\nECE0\n0200\n5140\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_6087\nENCODING 24711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA280\nB440\nA820\nA7C0\n2100\n2FE0\n2540\n2920\n3120\n2300\nENDCHAR\nSTARTCHAR U_6088\nENCODING 24712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\nAFE0\nB080\nAAA0\nAAA0\n3FC0\n2A80\n2AA0\n3160\n2220\nENDCHAR\nSTARTCHAR U_6089\nENCODING 24713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n7F00\n2480\n1500\nFFE0\n1600\n6580\n8460\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_608A\nENCODING 24714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA00\n23E0\n3A80\nE280\n2480\n6880\n1440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_608B\nENCODING 24715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n3280\nA900\nAA80\nA440\n2FE0\n2440\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_608C\nENCODING 24716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nB7E0\nA920\nA7E0\n2500\n27E0\n2120\n2320\n25C0\n2900\nENDCHAR\nSTARTCHAR U_608D\nENCODING 24717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nA7C0\nBC40\nA7C0\nA000\n27C0\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_608E\nENCODING 24718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\nA7C0\nB500\nA900\nAFE0\n2000\n27C0\n2440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_608F\nENCODING 24719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n37E0\nA900\nA540\nA540\n2BA0\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_6090\nENCODING 24720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5120\n2540\n5580\n3900\n5280\n9440\n6820\n1440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6091\nENCODING 24721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2100\n37E0\nA900\nAFE0\nA520\n27E0\n2520\n27E0\n2520\n2560\nENDCHAR\nSTARTCHAR U_6092\nENCODING 24722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nB7C0\nA000\nAFE0\nA920\n2FE0\n2800\n2820\n2820\n27E0\nENDCHAR\nSTARTCHAR U_6093\nENCODING 24723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nB7C0\nB440\nA7C0\n2440\n27C0\n2280\n2280\n22A0\n2CE0\nENDCHAR\nSTARTCHAR U_6094\nENCODING 24724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nB000\nAFC0\nA540\nA540\n3FE0\n2940\n2FE0\n2040\n2180\nENDCHAR\nSTARTCHAR U_6095\nENCODING 24725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2660\n2180\nB660\nA900\nAFE0\nA280\n27E0\n2AA0\n22A0\n22E0\n2080\nENDCHAR\nSTARTCHAR U_6096\nENCODING 24726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nB100\nAFE0\nA820\nA7C0\n2080\n2FE0\n2100\n2500\n2200\nENDCHAR\nSTARTCHAR U_6097\nENCODING 24727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nB480\nAFE0\nA520\nA520\n27E0\n2180\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_6098\nENCODING 24728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4800\n4F80\n5200\n7FC0\n4880\n7FC0\n0000\n5440\n92A0\n0F80\nENDCHAR\nSTARTCHAR U_6099\nENCODING 24729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nB000\nB7C0\n2440\n27C0\n2080\n2100\n2100\n2100\n2300\nENDCHAR\nSTARTCHAR U_609A\nENCODING 24730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA100\nBFE0\nA920\nAFE0\n2920\n2100\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_609B\nENCODING 24731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n2440\nB7A0\nAA40\nA420\nABC0\n2440\n2A80\n2180\n2240\n2C20\nENDCHAR\nSTARTCHAR U_609C\nENCODING 24732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nB440\nAFC0\nA000\nAFE0\n2100\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_609D\nENCODING 24733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nB7C0\nAD40\nA7C0\nA540\n2100\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_609E\nENCODING 24734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2A40\nABC0\nB800\n2FC0\n2240\n3FE0\n2200\n2500\n2880\n3060\nENDCHAR\nSTARTCHAR U_609F\nENCODING 24735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nB7C0\nA240\nA240\nAFE0\n2000\n27C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_60A0\nENCODING 24736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n53E0\nD640\n5240\n5180\n5660\n4000\n1400\n52C0\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_60A1\nENCODING 24737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n1140\nFD40\n1140\n3940\nD440\n10C0\n0400\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_60A2\nENCODING 24738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nB440\nAFC0\nA440\nA7C0\n2520\n2540\n2480\n2640\n2C20\nENDCHAR\nSTARTCHAR U_60A3\nENCODING 24739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n2480\n3F80\n0400\n7FC0\n4440\n7FC0\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_60A4\nENCODING 24740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7FC0\n4840\n4F40\n5540\n4A40\n7FC0\n0400\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_60A5\nENCODING 24741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n0000\n1F80\n0000\n1F80\n1080\n1F80\n5040\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_60A6\nENCODING 24742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n2000\nB7C0\nAC40\nA440\n27C0\n2280\n22A0\n24A0\n28E0\nENDCHAR\nSTARTCHAR U_60A7\nENCODING 24743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4020\n4E20\n44A0\nE4A0\nDEA0\n44A0\n4EA0\n4CA0\n5420\n44A0\n4440\nENDCHAR\nSTARTCHAR U_60A8\nENCODING 24744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\n4920\nD540\n4520\n4920\n4300\n1440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_60A9\nENCODING 24745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2220\n2920\nA540\nB400\nA080\n2AA0\n2920\n2AA0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_60AA\nENCODING 24746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n7FC0\n0A00\nFFE0\n0400\n5220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_60AB\nENCODING 24747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\nFFE0\n8020\n1E40\nF3C0\n0400\n52C0\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_60AC\nENCODING 24748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3C80\n2780\n2080\nFFE0\n1080\n7F40\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_60AD\nENCODING 24749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2AA0\nAAA0\nBA40\nAAA0\nAB20\n2100\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_60AE\nENCODING 24750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n3440\nB7C0\nB000\nA7C0\n2100\n2FE0\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_60AF\nENCODING 24751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\n2420\nA920\nBFE0\nAAA0\nAAA0\n2920\n2AA0\n2C60\n2820\n28E0\nENDCHAR\nSTARTCHAR U_60B0\nENCODING 24752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA820\nB7C0\nA000\nAFE0\n2100\n2540\n2920\n3120\n2300\nENDCHAR\nSTARTCHAR U_60B1\nENCODING 24753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2EE0\nA280\nB280\nAEE0\nA280\n2280\n2EE0\n2280\n2280\n2280\nENDCHAR\nSTARTCHAR U_60B2\nENCODING 24754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFBE0\n0A00\n7BC0\n0A00\nFBE0\n0A00\n1440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_60B3\nENCODING 24755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n5F80\n5280\n5F80\n4000\n7FE0\n1440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_60B4\nENCODING 24756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA440\nB440\nAAA0\nA920\n2100\n2FE0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_60B5\nENCODING 24757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nB7C0\nAC00\nA7C0\nA400\n2FE0\n2540\n2480\n2640\n2C20\nENDCHAR\nSTARTCHAR U_60B6\nENCODING 24758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8420\n8A20\nA8A0\nA960\nC720\n8060\nENDCHAR\nSTARTCHAR U_60B7\nENCODING 24759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nB820\nAFE0\nA940\nA920\n2FE0\n2900\n2A80\n3440\n2820\nENDCHAR\nSTARTCHAR U_60B8\nENCODING 24760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nBFE0\nA540\nA920\nB7C0\n2080\n3FE0\n2100\n2500\n2200\nENDCHAR\nSTARTCHAR U_60B9\nENCODING 24761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n3F00\n2100\n3F80\n2080\n3F80\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_60BA\nENCODING 24762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\nB820\nA7C0\nA440\n27C0\n2400\n27E0\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_60BB\nENCODING 24763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nB100\nAFE0\nA440\n2280\n2FC0\n2100\n3FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_60BC\nENCODING 24764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21C0\nA100\nB7C0\nAC40\nA7C0\n2440\n27C0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_60BD\nENCODING 24765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nB140\nAFE0\nA140\nA7C0\n2200\n3FE0\n2480\n2380\n2E60\nENDCHAR\nSTARTCHAR U_60BE\nENCODING 24766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA820\nB280\nA440\nA820\n27C0\n2100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_60BF\nENCODING 24767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nBFE0\nA280\nA440\nBA20\n2340\n2AA0\n2AA0\n3200\n2600\nENDCHAR\nSTARTCHAR U_60C0\nENCODING 24768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n2480\nA840\nB7A0\nA000\nAFE0\n2AA0\n2FE0\n2AA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_60C1\nENCODING 24769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFF80\n2400\n37E0\n6C80\nA480\n2880\n1400\n52C0\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_60C2\nENCODING 24770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\nB240\nAC80\nAA00\n24E0\n2420\n26E0\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_60C3\nENCODING 24771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nB7C0\nAC40\nA7C0\nA880\n2EA0\n28C0\n2880\n2EA0\n2860\nENDCHAR\nSTARTCHAR U_60C4\nENCODING 24772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1D40\n1140\nFC80\n5540\n9220\n2400\n1440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_60C5\nENCODING 24773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nA100\nB7C0\nA100\nAFE0\n2440\n2740\n25C0\n2440\n24C0\nENDCHAR\nSTARTCHAR U_60C6\nENCODING 24774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nBBA0\nA920\nAFE0\nA820\n2BA0\n2AA0\n2BA0\n2820\n3060\nENDCHAR\nSTARTCHAR U_60C7\nENCODING 24775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nB440\nAFC0\nA000\nA7C0\n2080\n2FE0\n2100\n2100\n2300\nENDCHAR\nSTARTCHAR U_60C8\nENCODING 24776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nB7C0\nAD40\nA7C0\nA100\n2FE0\n2100\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_60C9\nENCODING 24777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n93C0\n6200\n2FC0\nC840\n4FC0\n4840\n1400\n52C0\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_60CA\nENCODING 24778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nB000\nAFC0\nA440\nA7C0\n2100\n2540\n2920\n3520\n2200\nENDCHAR\nSTARTCHAR U_60CB\nENCODING 24779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nB820\nA400\nA7E0\nA5A0\n29A0\n36E0\n2280\n24A0\n2860\nENDCHAR\nSTARTCHAR U_60CC\nENCODING 24780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA020\n3BC0\n4A40\nB2C0\n1220\nE7E0\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_60CD\nENCODING 24781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n2480\nA840\nB020\nA7C0\nA100\n2FE0\n2100\n2920\n2540\n2FE0\nENDCHAR\nSTARTCHAR U_60CE\nENCODING 24782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1100\n1D00\n1700\n1100\nFFE0\n4440\n92A0\n3140\n4F40\nENDCHAR\nSTARTCHAR U_60CF\nENCODING 24783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\nAFE0\nB480\nAC80\nAEC0\n35A0\n26A0\n2480\n2480\n2480\nENDCHAR\nSTARTCHAR U_60D0\nENCODING 24784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2180\n2140\nAFE0\nB100\nAF20\n2AA0\n2EC0\n22A0\n2D60\n2220\nENDCHAR\nSTARTCHAR U_60D1\nENCODING 24785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nFFE0\n0200\n7A40\n4A80\n7920\n02A0\nFC60\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_60D2\nENCODING 24786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\nE3C0\n2240\nFA40\n7240\nABC0\n0000\n1440\n54A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_60D3\nENCODING 24787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nB7E0\nAA00\nAFE0\nA440\n2FA0\n3480\n25A0\n2420\n23E0\nENDCHAR\nSTARTCHAR U_60D4\nENCODING 24788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2520\nB540\nA980\nA240\nAD20\n2520\n2540\n2980\n2280\n2C60\nENDCHAR\nSTARTCHAR U_60D5\nENCODING 24789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nB7C0\nA440\nAFC0\nA400\n27E0\n2AA0\n2520\n2A20\n24C0\nENDCHAR\nSTARTCHAR U_60D6\nENCODING 24790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n1000\n3FC0\nC940\n32C0\n0400\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_60D7\nENCODING 24791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2300\n2480\nAA60\nB100\nA780\n2080\n2140\n2CA0\n34A0\n2380\nENDCHAR\nSTARTCHAR U_60D8\nENCODING 24792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nA920\nBFE0\nA920\nAFE0\n2A20\n2A20\n2BA0\n2820\n28E0\nENDCHAR\nSTARTCHAR U_60D9\nENCODING 24793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n24A0\nBAC0\nA520\nA000\nAFE0\n2AA0\n24A0\n2240\n24A0\n2920\nENDCHAR\nSTARTCHAR U_60DA\nENCODING 24794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nAAA0\nB4A0\nA920\nA220\n24C0\n2500\n2D40\n34A0\n2380\nENDCHAR\nSTARTCHAR U_60DB\nENCODING 24795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2480\nB7E0\nAC80\nA760\nA420\n27C0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_60DC\nENCODING 24796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27C0\nB280\nAA80\nAFE0\n2000\n27C0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_60DD\nENCODING 24797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nB100\nAFE0\nA820\nABA0\n2AA0\n2BA0\n2AA0\n2820\n28E0\nENDCHAR\nSTARTCHAR U_60DE\nENCODING 24798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4680\n5880\n71E0\nDF20\nD480\n5480\n5480\n5480\n5540\n5540\n6620\nENDCHAR\nSTARTCHAR U_60DF\nENCODING 24799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n2480\nB7E0\nAC80\nB7E0\nA480\n2480\n27E0\n2480\n27E0\n2400\nENDCHAR\nSTARTCHAR U_60E0\nENCODING 24800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2440\n3FC0\n2440\n3FC0\n0440\n7FA0\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_60E1\nENCODING 24801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7BC0\n4040\n7BC0\n0A00\nFFE0\n1400\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_60E2\nENCODING 24802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n5280\n5040\n9140\n0F00\n1080\n2940\n2B20\n6560\nA940\n38C0\nENDCHAR\nSTARTCHAR U_60E3\nENCODING 24803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n53E0\n7D60\n52A0\n98A0\n7320\n1060\n0440\n2AA0\n48A0\n0780\nENDCHAR\nSTARTCHAR U_60E4\nENCODING 24804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2240\nB3E0\nAE40\nA880\nBF20\n22C0\n2240\n2280\n2AA0\n25E0\nENDCHAR\nSTARTCHAR U_60E5\nENCODING 24805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n65C0\n4440\n75C0\n4440\n7FC0\n1100\nE4E0\n1280\n50C0\n8FA0\nENDCHAR\nSTARTCHAR U_60E6\nENCODING 24806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nB7E0\nAC80\nA4E0\nA480\n27E0\n2620\n2A20\n2BE0\n3220\nENDCHAR\nSTARTCHAR U_60E7\nENCODING 24807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nB7C0\nAC40\nA7C0\nA440\n27C0\n2440\n2FE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_60E8\nENCODING 24808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FC0\nA200\nBFE0\nA480\nB960\n2680\n2100\n2640\n2180\n2E00\nENDCHAR\nSTARTCHAR U_60E9\nENCODING 24809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n4100\nA100\n49C0\nC900\n4900\n5FE0\n1440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_60EA\nENCODING 24810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n3F80\n2080\n3F80\n2080\nFFE0\n1440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_60EB\nENCODING 24811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\n6900\n0600\n3F80\nE4E0\n3F80\n2480\n3F80\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_60EC\nENCODING 24812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2880\nAFE0\nBAA0\nA9C0\nA880\n2FE0\n2880\n2940\n2A20\n2FE0\nENDCHAR\nSTARTCHAR U_60ED\nENCODING 24813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25C0\n3F00\nA900\nB5E0\nBF40\nA540\n2740\n3D40\n2540\n2540\n2640\nENDCHAR\nSTARTCHAR U_60EE\nENCODING 24814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nB7C0\nAD40\nA7C0\nA540\n27C0\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_60EF\nENCODING 24815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nBFE0\nA540\nA7C0\n2000\n2FE0\n2920\n2920\n2280\n2C60\nENDCHAR\nSTARTCHAR U_60F0\nENCODING 24816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nA200\nB7C0\nA900\n37E0\n2440\n27C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_60F1\nENCODING 24817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n2540\nA540\nB2A0\nA000\n2FE0\n28A0\n2AA0\n2920\n2AA0\n2FE0\nENDCHAR\nSTARTCHAR U_60F2\nENCODING 24818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nB100\nAFE0\nA540\n27C0\n2540\n27C0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_60F3\nENCODING 24819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n77C0\nAC40\n27C0\n1440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_60F4\nENCODING 24820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2920\nAFE0\nB000\nAFE0\n2200\n2FE0\n2AA0\n2AA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_60F5\nENCODING 24821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\nB540\nADC0\nA400\n27E0\n2100\n2FE0\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_60F6\nENCODING 24822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nB440\nAFC0\nA440\n2FE0\n2100\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_60F7\nENCODING 24823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0800\nFFE0\n3180\n5F40\n9120\n1F00\n5440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_60F8\nENCODING 24824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2CA0\nB7A0\nACA0\nA7A0\n2060\n27C0\n2080\n2FE0\n2100\n2300\nENDCHAR\nSTARTCHAR U_60F9\nENCODING 24825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n1000\n3F80\nD080\n1F80\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_60FA\nENCODING 24826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nB7C0\nAC40\nA7C0\n2500\n27E0\n2900\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_60FB\nENCODING 24827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E20\n2AA0\nAAA0\nBEA0\nAAA0\nAEA0\n2AA0\n2EA0\n2020\n2A20\n3160\nENDCHAR\nSTARTCHAR U_60FC\nENCODING 24828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA820\nBFE0\nA800\n2FE0\n2AA0\n2FE0\n3AA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_60FD\nENCODING 24829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2840\n2FC0\nB900\nAFC0\nA8A0\n2FE0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_60FE\nENCODING 24830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2920\nBAA0\nAFE0\nA280\n2440\n2A20\n27C0\n2A80\n2100\n2EE0\nENDCHAR\nSTARTCHAR U_60FF\nENCODING 24831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nB7C0\nAC40\nA7C0\n2000\n2FE0\n2500\n25E0\n2B00\n30E0\nENDCHAR\nSTARTCHAR U_6100\nENCODING 24832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2C80\n2480\nBEA0\nA5C0\nAE80\n2D80\n3480\n2540\n2540\n2620\nENDCHAR\nSTARTCHAR U_6101\nENCODING 24833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n1120\nFD40\n3B80\n5580\n9240\n1C20\n0440\n5220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6102\nENCODING 24834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n7C80\n13E0\nFEA0\n8AA0\n7CA0\n1160\n3600\n0440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_6103\nENCODING 24835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2820\nB000\nAFE0\nA000\n27C0\n2440\n27C0\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_6104\nENCODING 24836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n37C0\nAD40\nA7C0\nA000\n3FE0\n2540\n2480\n2640\n2420\nENDCHAR\nSTARTCHAR U_6105\nENCODING 24837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nA280\nB380\nA900\nA7C0\n2540\n27C0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_6106\nENCODING 24838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n45E0\nA800\n45E0\nC440\n5840\n49C0\n0400\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_6107\nENCODING 24839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n3240\nAFE0\nA440\nA7C0\n2100\n2FE0\n2900\n3FE0\n2100\nENDCHAR\nSTARTCHAR U_6108\nENCODING 24840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n1100\n7EE0\nA440\n3D40\n2540\n3C40\n24C0\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_6109\nENCODING 24841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n2480\n2B60\nB000\nAE20\nAAA0\n2EA0\n2AA0\n2EA0\n2A20\n2AE0\nENDCHAR\nSTARTCHAR U_610A\nENCODING 24842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2000\n27C0\nB440\nAFC0\nA000\n2FE0\n2920\n2FE0\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_610B\nENCODING 24843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2520\n32C0\nAFE0\nA100\nAFE0\n2200\n27C0\n2A40\n3180\n2660\nENDCHAR\nSTARTCHAR U_610C\nENCODING 24844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2480\n3100\nAFE0\nAAA0\nAC60\n2920\n2100\n2FE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_610D\nENCODING 24845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n8BE0\nFA40\nA240\nF980\nA180\n9260\nCC00\n1240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_610E\nENCODING 24846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\n2C40\nB7C0\nA440\nA7C0\n2200\n27E0\n2A40\n2180\n2E60\nENDCHAR\nSTARTCHAR U_610F\nENCODING 24847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\nFFE0\n2080\n3F80\n2080\n3F80\n5440\n52A0\n9FA0\nENDCHAR\nSTARTCHAR U_6110\nENCODING 24848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nA200\nAFE0\nBAA0\nABA0\n2AA0\n2BA0\n2AA0\n2AA0\n2FE0\nENDCHAR\nSTARTCHAR U_6111\nENCODING 24849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2140\n27E0\nB520\nAFE0\nA520\n27E0\n2520\n2FE0\n2220\n2460\nENDCHAR\nSTARTCHAR U_6112\nENCODING 24850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n37C0\nAC40\nA7C0\nA400\n2FE0\n3920\n2AA0\n2FA0\n2040\nENDCHAR\nSTARTCHAR U_6113\nENCODING 24851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nB440\nAFE0\nA200\n27E0\n2AA0\n32A0\n2520\n2AC0\nENDCHAR\nSTARTCHAR U_6114\nENCODING 24852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2440\nB280\nAFE0\nA000\n27C0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_6115\nENCODING 24853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2EE0\nB000\nAFC0\nA000\n3FE0\n2200\n27C0\n2040\n2380\nENDCHAR\nSTARTCHAR U_6116\nENCODING 24854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nB440\nAFC0\nA440\nA7C0\n2440\n3FE0\n2A80\n2C40\n2FE0\nENDCHAR\nSTARTCHAR U_6117\nENCODING 24855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n0900\n13E0\nFD40\n3540\n5080\n9140\n3620\n4440\n52A0\n9FA0\nENDCHAR\nSTARTCHAR U_6118\nENCODING 24856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2A20\nB7C0\nAA40\nA180\n2E60\n27C0\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_6119\nENCODING 24857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8820\n1F00\n2A00\n0E00\nF1E0\n1F00\n4440\n52A0\n9FA0\nENDCHAR\nSTARTCHAR U_611A\nENCODING 24858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n2480\n7FC0\n4540\n5F40\n44C0\n1240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_611B\nENCODING 24859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n2480\nFFE0\n9220\n50C0\n4FA0\n1000\n1FC0\n2880\n4700\n38E0\nENDCHAR\nSTARTCHAR U_611C\nENCODING 24860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2900\n2900\nAFE0\nBB40\nAB40\n2D20\n2980\n2A40\n2C20\n2FE0\nENDCHAR\nSTARTCHAR U_611D\nENCODING 24861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2A40\nABC0\nBA40\nABC0\nA900\n2FE0\n2A40\n2980\n2A40\n2FE0\nENDCHAR\nSTARTCHAR U_611E\nENCODING 24862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n4100\n4FE0\nEAA0\nDAA0\n4860\n4100\n5FE0\n4100\n4280\n4C60\nENDCHAR\nSTARTCHAR U_611F\nENCODING 24863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n7FE0\n4100\n7F40\n5D40\n5280\n9DA0\n8260\n2440\nA2A0\n9F80\nENDCHAR\nSTARTCHAR U_6120\nENCODING 24864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nB440\nAFC0\nA000\n2FE0\n2AA0\n2AA0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_6121\nENCODING 24865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n4FE0\n52A0\nEAA0\nE6A0\n49A0\n5260\n4040\n5520\n5440\n63C0\nENDCHAR\nSTARTCHAR U_6122\nENCODING 24866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4920\n4FE0\nE920\nC920\n4FE0\n4000\n4240\n5520\n5440\n63C0\nENDCHAR\nSTARTCHAR U_6123\nENCODING 24867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nBAA0\nAFE0\nA100\n2FE0\n2200\n23C0\n2440\n2840\n3180\nENDCHAR\nSTARTCHAR U_6124\nENCODING 24868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2540\nBFE0\nA440\nA7C0\n2440\n2540\n2540\n2280\n2C60\nENDCHAR\nSTARTCHAR U_6125\nENCODING 24869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n2280\nB100\nAFC0\nA540\n2540\n3FE0\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_6126\nENCODING 24870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nB540\nAFE0\nA000\n27C0\n2440\n2540\n2540\n2280\n2C60\nENDCHAR\nSTARTCHAR U_6127\nENCODING 24871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nA920\nBFE0\nA920\n2FE0\n2340\n25A0\n25E0\n2920\n30E0\nENDCHAR\nSTARTCHAR U_6128\nENCODING 24872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\nFD40\n2260\nF800\n03C0\nFE40\n8580\n7A60\n1440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_6129\nENCODING 24873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n2FE0\nB440\nAFC0\nA440\n27C0\n2440\n27C0\n2440\n2820\nENDCHAR\nSTARTCHAR U_612A\nENCODING 24874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nB7E0\nA800\nA7E0\n2420\n27E0\n2420\n27E0\n2240\n2420\nENDCHAR\nSTARTCHAR U_612B\nENCODING 24875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nB100\nAFE0\nA240\n2780\n2240\n2FE0\n2540\n2920\n3320\nENDCHAR\nSTARTCHAR U_612C\nENCODING 24876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\nFF20\n55E0\n5520\n7DE0\n2220\n4460\n0400\n5240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_612D\nENCODING 24877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nB140\nAFE0\nA280\n2720\n3BE0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_612E\nENCODING 24878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2F00\nB520\nA940\nA400\n27C0\n2900\n3FE0\n2100\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_612F\nENCODING 24879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\nB480\nAFE0\nA480\n27E0\n2480\n2FE0\n2240\n2180\n2E60\nENDCHAR\nSTARTCHAR U_6130\nENCODING 24880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nB7C0\nAC40\nA7C0\n2940\n2580\n2FE0\n2280\n24A0\n28E0\nENDCHAR\nSTARTCHAR U_6131\nENCODING 24881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nB500\nADE0\nB680\n2C80\n2FE0\n3480\n2540\n2A40\n3420\nENDCHAR\nSTARTCHAR U_6132\nENCODING 24882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nB740\nAFE0\nA820\n27C0\n2440\n27C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_6133\nENCODING 24883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4A40\n7BC0\n4A40\n7BC0\n0400\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_6134\nENCODING 24884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nB440\nA920\nBFC0\n2840\n2FC0\n2840\n2FE0\n2820\n37E0\nENDCHAR\nSTARTCHAR U_6135\nENCODING 24885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2220\n2220\nAEE0\nB880\nAEE0\n2220\n2AA0\n2660\n3BA0\n2660\nENDCHAR\nSTARTCHAR U_6136\nENCODING 24886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4240\nE480\nDFE0\nCAA0\n5540\n4FC0\n4840\n4FC0\n4840\n48C0\nENDCHAR\nSTARTCHAR U_6137\nENCODING 24887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2920\n2FE0\nB000\nAFE0\nA000\n27C0\n2440\n27C0\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_6138\nENCODING 24888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFE80\n55E0\nBAA0\n10A0\n38A0\nD560\n0000\n5440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_6139\nENCODING 24889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n3820\nAA80\nA540\nA280\n2C60\n27C0\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_613A\nENCODING 24890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n2280\nB7C0\nA440\nA7C0\n2440\n27C0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_613B\nENCODING 24891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n1140\n2380\nF940\n27E0\n2540\n6920\n1400\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_613C\nENCODING 24892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44C0\n4700\n5400\nF3E0\nD440\n57C0\n5440\n57C0\n5440\n5FE0\n4440\nENDCHAR\nSTARTCHAR U_613D\nENCODING 24893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n2200\nBFC0\nAA40\nAFC0\n2A40\n2080\n3FE0\n2480\n2180\nENDCHAR\nSTARTCHAR U_613E\nENCODING 24894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nA800\nB7C0\nA040\n2AC0\n2740\n3FC0\n2740\n2AA0\n3220\nENDCHAR\nSTARTCHAR U_613F\nENCODING 24895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4400\n5FC0\n5240\n5FC0\n4A80\n5640\n4400\n4A40\nA8A0\nAF80\nENDCHAR\nSTARTCHAR U_6140\nENCODING 24896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2A20\n2540\nB280\nAF00\nA240\n2FC0\n2100\n2FE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_6141\nENCODING 24897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n5140\n6E40\n5540\n6CC0\n7FC0\n1240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6142\nENCODING 24898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2480\n8FC0\n5A40\n2FC0\nCA40\n4AC0\n0400\n5240\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_6143\nENCODING 24899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2540\n2AA0\nB7C0\nA000\n2EE0\n2220\n2AA0\n2660\n3AA0\n2760\nENDCHAR\nSTARTCHAR U_6144\nENCODING 24900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n2FE0\nBAA0\nAFE0\n2100\n2FE0\n2380\n2540\n2920\n3120\nENDCHAR\nSTARTCHAR U_6145\nENCODING 24901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\nB280\nAB00\nACE0\n2100\n2FE0\n2920\n2FE0\n2140\n2FE0\nENDCHAR\nSTARTCHAR U_6146\nENCODING 24902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2F20\nAA20\nB540\nA200\nACE0\n2820\n2EE0\n2820\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_6147\nENCODING 24903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4240\n7860\n4BC0\n7A40\n4980\n9E60\n0000\n5440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_6148\nENCODING 24904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n2940\n7B80\n1080\n2940\n7FE0\n0400\n5240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6149\nENCODING 24905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2500\nB240\nAFE0\nA000\n27C0\n2540\n27C0\n2540\n27C0\nENDCHAR\nSTARTCHAR U_614A\nENCODING 24906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n5FE0\n4500\nEFC0\nC540\n5FE0\n4540\n5FC0\n4D80\n5540\n6520\nENDCHAR\nSTARTCHAR U_614B\nENCODING 24907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n4BC0\nFE20\n4BE0\n7A00\n4BC0\n7A20\n4BE0\n1440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_614C\nENCODING 24908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\n2240\nB100\nAFE0\nA400\n27E0\n2540\n2540\n2540\n2960\nENDCHAR\nSTARTCHAR U_614D\nENCODING 24909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n2540\nB6C0\nAFC0\nA000\n2FE0\n2AA0\n2AA0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_614E\nENCODING 24910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nB7C0\nAC40\nA7C0\n2440\n27C0\n2440\n2FE0\n2440\nENDCHAR\nSTARTCHAR U_614F\nENCODING 24911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n27C0\nB440\nAFC0\nA440\n27C0\n2100\n2FE0\n2440\n2820\nENDCHAR\nSTARTCHAR U_6150\nENCODING 24912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n2A80\n2580\n3F80\n1100\n2480\n1220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6151\nENCODING 24913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2240\nA3C0\nB240\nAFE0\nA040\n2FE0\n2920\n26A0\n2640\n29A0\nENDCHAR\nSTARTCHAR U_6152\nENCODING 24914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n3FE0\n2AA0\nAFE0\nBAA0\nAFE0\n2440\n27C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_6153\nENCODING 24915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n2FE0\nBAA0\nAFE0\nA000\n27C0\n2000\n2FE0\n2540\n2B20\nENDCHAR\nSTARTCHAR U_6154\nENCODING 24916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nB280\nAFC0\nA640\n2540\n27C0\n2100\n2FE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_6155\nENCODING 24917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2480\n2280\nFFE0\n2480\nC460\n2680\n4D40\nENDCHAR\nSTARTCHAR U_6156\nENCODING 24918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n28A0\nAFE0\nB8A0\nAEA0\nAAA0\n2EE0\n28A0\n2EA0\n2960\n2FE0\nENDCHAR\nSTARTCHAR U_6157\nENCODING 24919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFDE0\n5640\n7D40\n3880\n5540\n9220\n0000\n5440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_6158\nENCODING 24920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2240\nB7E0\nAAA0\nAFE0\n2280\n2540\n2AA0\n2140\n2080\n2700\nENDCHAR\nSTARTCHAR U_6159\nENCODING 24921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFEC0\n5500\n7DE0\n5540\nFF40\n1240\n0400\nA240\nA0A0\n1F80\nENDCHAR\nSTARTCHAR U_615A\nENCODING 24922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2FC0\nB280\nAF80\nAAE0\n2FA0\n2AA0\n2FA0\n22A0\n3FA0\n22A0\nENDCHAR\nSTARTCHAR U_615B\nENCODING 24923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2920\n2FE0\nB500\nAFE0\n3900\n2FC0\n2900\n2FC0\n2900\n2FE0\nENDCHAR\nSTARTCHAR U_615C\nENCODING 24924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7E80\nC5E0\n5620\nFD40\n5480\n7D40\n0420\n5240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_615D\nENCODING 24925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4900\n7FC0\n4900\n7FE0\n5880\n6880\n7FE0\n1440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_615E\nENCODING 24926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nB280\nAFE0\nA440\n27C0\n2440\n27C0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_615F\nENCODING 24927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F80\n2280\nAF80\nBAE0\nAFA0\n2AA0\n2FA0\n22A0\n2FA0\n22A0\n2F40\nENDCHAR\nSTARTCHAR U_6160\nENCODING 24928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4E80\nC480\nEEE0\nC4A0\n5EA0\n49A0\n4E40\n4A40\n52A0\n6520\nENDCHAR\nSTARTCHAR U_6161\nENCODING 24929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nABA0\nB540\nABA0\n2540\n2BA0\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_6162\nENCODING 24930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nB440\nAFE0\nAAA0\n2FE0\n2000\n27C0\n2380\n2C60\nENDCHAR\nSTARTCHAR U_6163\nENCODING 24931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n2FE0\nB540\nAFC0\nA440\n27C0\n2440\n27C0\n2440\n2820\nENDCHAR\nSTARTCHAR U_6164\nENCODING 24932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n2260\nFC00\n87C0\n7240\n5980\n9660\n0440\n52A0\n9F80\nENDCHAR\nSTARTCHAR U_6165\nENCODING 24933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2A80\nABE0\nB480\nA3E0\n3800\n2BE0\n2A20\n2BE0\n2C00\n33E0\nENDCHAR\nSTARTCHAR U_6166\nENCODING 24934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\nFFE0\n5540\n3940\n5480\n9340\n3220\n0400\n5240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6167\nENCODING 24935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFBE0\n2080\n3FC0\n0040\n3FC0\n1440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_6168\nENCODING 24936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2A80\nAA80\nBE80\nABE0\nAE80\n2C80\n2A80\n2DA0\n2AA0\n2460\nENDCHAR\nSTARTCHAR U_6169\nENCODING 24937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n57C0\n7100\nC7C0\nF540\n57C0\n5540\n5FE0\n5100\n5100\n6FE0\nENDCHAR\nSTARTCHAR U_616A\nENCODING 24938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\nABC0\nBA40\nABC0\n2800\n2EE0\n2AA0\n2EE0\n2800\n2FE0\nENDCHAR\nSTARTCHAR U_616B\nENCODING 24939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n4480\nAB40\n5120\nC9C0\n4D00\n53E0\n0400\n1240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_616C\nENCODING 24940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n2280\nB100\nAFC0\nA540\n27C0\n2100\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_616D\nENCODING 24941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\nFEA0\n55E0\nFE80\n3880\n5540\n9220\n0000\n5540\n5120\n8F00\nENDCHAR\nSTARTCHAR U_616E\nENCODING 24942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\n0400\n7FE0\n4420\n7FE0\n5240\n5FC0\n5240\n9FC0\nAAA0\n4FA0\nENDCHAR\nSTARTCHAR U_616F\nENCODING 24943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nAC40\nB7C0\nA440\n2FE0\n2400\n2FE0\n32A0\n2520\n2A60\nENDCHAR\nSTARTCHAR U_6170\nENCODING 24944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n4440\n7FE0\n4040\n7D40\n50C0\nD440\nB2C0\n1440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_6171\nENCODING 24945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA540\nB7C0\nA540\n2FE0\n2080\n3FE0\n2480\n2280\n2100\nENDCHAR\nSTARTCHAR U_6172\nENCODING 24946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\n2240\nB3C0\nA900\nAFE0\n2920\n2DA0\n2B60\n2DA0\n2960\nENDCHAR\nSTARTCHAR U_6173\nENCODING 24947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nAFA0\nB940\nAF40\n2AA0\n2F20\n2100\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6174\nENCODING 24948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2220\nAAA0\nB660\nAAA0\n2200\n27C0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_6175\nENCODING 24949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\nD140\nFFE0\nD140\n57C0\n5540\n57C0\n5540\n57C0\n6540\nENDCHAR\nSTARTCHAR U_6176\nENCODING 24950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4900\n7FC0\n4940\n7FE0\n4AA0\n6FC0\n5880\nA700\n98E0\nENDCHAR\nSTARTCHAR U_6177\nENCODING 24951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nE940\nDFE0\nC940\n4FC0\n4900\n4D40\n4B80\n5540\n6B20\nENDCHAR\nSTARTCHAR U_6178\nENCODING 24952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\nFFE0\n2A80\n4E60\nFFE0\n8420\n7FC0\n4440\n0400\n52A0\n9FA0\nENDCHAR\nSTARTCHAR U_6179\nENCODING 24953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n2140\nF940\n5340\nF940\n22C0\n2420\n1240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_617A\nENCODING 24954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nB540\nAFE0\nA540\n27C0\n2540\n2FE0\n2240\n2380\n2C60\nENDCHAR\nSTARTCHAR U_617B\nENCODING 24955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A80\n5FC0\n4200\nDFE0\nE500\nC880\n5FC0\n68A0\n4F80\n4880\n4F80\nENDCHAR\nSTARTCHAR U_617C\nENCODING 24956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n7FE0\n4900\n4920\n7F40\n48A0\nAB60\nDA20\n1440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_617D\nENCODING 24957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n40A0\n5FE0\nF480\nD6A0\nD4A0\n5FA0\n54C0\n5EA0\n6560\n4E20\nENDCHAR\nSTARTCHAR U_617E\nENCODING 24958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n55E0\nAA20\n4480\nF880\n4940\n7A20\n0400\n5240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_617F\nENCODING 24959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2900\n0FC0\n1900\n2FE0\nC4A0\n5FE0\n44A0\n0800\n52A0\n9FA0\nENDCHAR\nSTARTCHAR U_6180\nENCODING 24960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n25A0\nB360\nACA0\nA100\n2280\n2D60\n2280\n2140\n2080\n2700\nENDCHAR\nSTARTCHAR U_6181\nENCODING 24961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4FE0\n4920\nEBE0\nDEA0\n4920\n4FE0\n4240\n4920\n5840\n67C0\nENDCHAR\nSTARTCHAR U_6182\nENCODING 24962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0800\n3F80\n2480\nFFE0\n9520\n5F40\n1000\n2F80\n0600\n79E0\nENDCHAR\nSTARTCHAR U_6183\nENCODING 24963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0800\nFFE0\n2080\n7BC0\nA0A0\n3F80\n1440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_6184\nENCODING 24964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4FE0\nA100\n67C0\nA440\n27C0\n2440\n2FE0\n1440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_6185\nENCODING 24965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n1080\nFFE0\n54A0\n7CA0\n54A0\n7CA0\n1120\nFE60\n52C0\n8FA0\nENDCHAR\nSTARTCHAR U_6186\nENCODING 24966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\n2FE0\nA820\nB7C0\nAC40\n27C0\n2100\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6187\nENCODING 24967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A40\n1240\nFFE0\n1240\n7BC0\n4A40\n7BC0\n0400\n5240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6188\nENCODING 24968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n4200\n6FE0\nD920\nC9C0\n4F20\n49E0\n4A80\n4AA0\n56C0\n6FE0\nENDCHAR\nSTARTCHAR U_6189\nENCODING 24969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2420\n3F40\nA480\nAF00\nB020\n2F40\n2980\n2F00\n2A20\n2740\n3880\nENDCHAR\nSTARTCHAR U_618A\nENCODING 24970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3FE0\n4480\nFFE0\n4D40\n57C0\n6540\n45C0\n1440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_618B\nENCODING 24971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5500\n39E0\n7F40\n5540\n7480\n5D40\n5620\n1040\n5220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_618C\nENCODING 24972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3900\n45E0\nFE20\n1120\nFCA0\n9120\n5E20\nE0C0\n1440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_618D\nENCODING 24973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2100\nAFE0\nB440\nABA0\n3280\n2FE0\n2820\n2BA0\n2AA0\n2BA0\nENDCHAR\nSTARTCHAR U_618E\nENCODING 24974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nAAA0\nB920\nAFE0\n2000\n27C0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_618F\nENCODING 24975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n4EE0\n5320\nECC0\nC740\nD820\n4FC0\n4100\n4540\n4920\n4300\nENDCHAR\nSTARTCHAR U_6190\nENCODING 24976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n4680\nDFE0\nEA80\nD260\n4840\n4FE0\n5540\n4DE0\n4840\n5040\nENDCHAR\nSTARTCHAR U_6191\nENCODING 24977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2900\n9FC0\n2900\nCFE0\n4020\n6AA0\n0460\n5240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6192\nENCODING 24978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nB540\nAFE0\nA440\n27C0\n2440\n27C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_6193\nENCODING 24979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2540\nB7C0\nA540\nA7C0\n2120\n2FE0\n2540\n2C60\n33C0\nENDCHAR\nSTARTCHAR U_6194\nENCODING 24980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n27E0\nB900\nAFC0\nB900\n2FC0\n2900\n2FE0\n2000\n2AA0\n2AA0\nENDCHAR\nSTARTCHAR U_6195\nENCODING 24981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2F40\n2AA0\nB440\nAFC0\nB020\n2FC0\n2840\n2FC0\n2480\n3FE0\nENDCHAR\nSTARTCHAR U_6196\nENCODING 24982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\nFEA0\n55E0\nBA80\n3880\n5540\n9220\n0400\n1240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6197\nENCODING 24983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFDE0\n5640\nB940\n1480\n3940\nD620\n0400\n5240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6198\nENCODING 24984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nB7C0\nB440\nA7C0\n2280\n2FE0\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_6199\nENCODING 24985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n2080\n3F80\n0A00\nFFE0\n2080\n3F80\n0400\n52A0\n9FA0\nENDCHAR\nSTARTCHAR U_619A\nENCODING 24986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2EE0\nB000\nAFC0\nA940\n2FC0\n2940\n3FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_619B\nENCODING 24987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nAFE0\nBAA0\nAFE0\n2440\n27C0\n2440\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_619C\nENCODING 24988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5D00\n57E0\nD500\nFBE0\nD480\n57E0\n5A40\n53C0\n5240\n53C0\n5240\nENDCHAR\nSTARTCHAR U_619D\nENCODING 24989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n2540\n7D40\n0880\n7D40\n1220\n3000\n1220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_619E\nENCODING 24990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5E80\n40E0\nEEA0\nCB20\n4EA0\n4040\n5E40\n44A0\n5EA0\n4520\nENDCHAR\nSTARTCHAR U_619F\nENCODING 24991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nAFE0\nBAA0\nAFE0\n2920\n2540\n3FE0\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_61A0\nENCODING 24992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5500\n7FE0\n6AA0\n7E80\n4940\n5220\n8400\n1240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_61A1\nENCODING 24993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2EE0\nB540\nAFE0\nA100\n2FE0\n2920\n2960\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_61A2\nENCODING 24994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nB100\nAFE0\nA440\n2EE0\n2440\n3FE0\n2480\n24A0\n38E0\nENDCHAR\nSTARTCHAR U_61A3\nENCODING 24995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\nB380\nAFE0\nA380\n2540\n2FE0\n2540\n27C0\n2540\n27C0\nENDCHAR\nSTARTCHAR U_61A4\nENCODING 24996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nB540\nAFE0\nA440\n27C0\n2440\n27C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_61A5\nENCODING 24997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAD40\n7380\n3280\n4C40\nFFE0\n8840\n7F80\n1080\n2540\n52A0\n9F80\nENDCHAR\nSTARTCHAR U_61A6\nENCODING 24998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n55A0\nCEC0\nE480\nCB40\n5FE0\n5220\n4FC0\n4240\n4440\n58C0\nENDCHAR\nSTARTCHAR U_61A7\nENCODING 24999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nB280\nA900\nAFE0\n2540\n27C0\n2540\n27C0\n2100\n3FE0\nENDCHAR\nSTARTCHAR U_61A8\nENCODING 25000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n11E0\nFE40\n4A40\n7980\n4980\nFE60\n0800\n1240\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_61A9\nENCODING 25001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1880\nE3E0\n2220\nFFE0\n2220\n7BE0\n4A20\n7BE0\n1440\n52A0\n9FA0\nENDCHAR\nSTARTCHAR U_61AA\nENCODING 25002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nAEE0\nBAA0\nAFE0\n2AA0\n2BA0\n2AA0\n2BA0\n2AA0\n2DE0\nENDCHAR\nSTARTCHAR U_61AB\nENCODING 25003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nAEE0\nBAA0\nAEE0\n2920\n2FE0\n2AA0\n2920\n2AA0\n2C60\nENDCHAR\nSTARTCHAR U_61AC\nENCODING 25004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nA7C0\nB440\nA7C0\n2100\n2FE0\n2440\n27C0\n2940\n3320\nENDCHAR\nSTARTCHAR U_61AD\nENCODING 25005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nAAA0\nB7C0\nAC60\n27C0\n2440\n27C0\n2100\n2940\n3320\nENDCHAR\nSTARTCHAR U_61AE\nENCODING 25006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n2FE0\nB540\nA540\nAFE0\n2540\n2FE0\n2000\n2AA0\n2AA0\nENDCHAR\nSTARTCHAR U_61AF\nENCODING 25007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2A40\nAFE0\nB6C0\nAB60\n3240\n27C0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_61B0\nENCODING 25008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2280\nAFE0\nB2A0\nA480\n2FE0\n2AA0\n2FE0\n2AA0\n2BA0\n2860\nENDCHAR\nSTARTCHAR U_61B1\nENCODING 25009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2460\n2F40\nB0E0\nAF40\n2940\n2F40\n24C0\n2EC0\n3540\n2E60\nENDCHAR\nSTARTCHAR U_61B2\nENCODING 25010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8420\nBFA0\n0400\nFFE0\n2A80\n3F80\n0400\n52A0\n9FA0\nENDCHAR\nSTARTCHAR U_61B3\nENCODING 25011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\n27C0\nB040\nAFE0\n24A0\n2EE0\n2040\n2FE0\n2440\n22C0\nENDCHAR\nSTARTCHAR U_61B4\nENCODING 25012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nAEE0\nB280\nAEE0\nAAA0\n2EE0\n2AA0\n2EE0\n2280\n23E0\nENDCHAR\nSTARTCHAR U_61B5\nENCODING 25013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n7940\n4080\n7BE0\nA880\nBBE0\n1480\n5240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_61B6\nENCODING 25014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nB280\nAFE0\nA440\n27C0\n2440\n27C0\n2540\n2CA0\n33A0\nENDCHAR\nSTARTCHAR U_61B7\nENCODING 25015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\nB6C0\nAB60\nA240\n2FE0\n2120\n2500\n25E0\n2B00\n31E0\nENDCHAR\nSTARTCHAR U_61B8\nENCODING 25016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nB440\nAFE0\nB000\n2EE0\n2AA0\n2EE0\n2440\n2AA0\n3120\nENDCHAR\nSTARTCHAR U_61B9\nENCODING 25017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n5FC0\n5540\nFFC0\nD540\n5FE0\n5000\n5FE0\n5540\n5480\n6660\nENDCHAR\nSTARTCHAR U_61BA\nENCODING 25018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2480\nAFE0\nBAA0\nAFE0\n2800\n2BE0\n2800\n2BE0\n2A20\n33E0\nENDCHAR\nSTARTCHAR U_61BB\nENCODING 25019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\n5540\nF740\nD040\n5FC0\n4C80\n4A80\n4F80\n4000\n7FE0\nENDCHAR\nSTARTCHAR U_61BC\nENCODING 25020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n7FE0\n2940\n7F40\nD480\n7540\n0E20\n0400\n5240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_61BD\nENCODING 25021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4FE0\n6480\nDFC0\nD540\n6B40\n44C0\n4200\n5940\n68A0\n4780\nENDCHAR\nSTARTCHAR U_61BE\nENCODING 25022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2FE0\nA900\nBF20\nA940\n2EA0\n3AA0\n2F60\n2500\n2CA0\n33A0\nENDCHAR\nSTARTCHAR U_61BF\nENCODING 25023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2E80\nABE0\nBEA0\nAAA0\n3FA0\n28A0\n2EA0\n2A40\n2AA0\n3720\nENDCHAR\nSTARTCHAR U_61C0\nENCODING 25024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n4480\n6B40\nD020\nCFC0\n4A40\n4FC0\n4480\n4780\n4480\n4780\nENDCHAR\nSTARTCHAR U_61C1\nENCODING 25025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nAFE0\nB000\nAFE0\n2440\n27E0\n2320\n26C0\n2A40\n2320\nENDCHAR\nSTARTCHAR U_61C2\nENCODING 25026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nA7C0\nB100\nAFE0\n2540\n27C0\n2540\n2FE0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_61C3\nENCODING 25027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\nFE80\n29E0\nFCA0\n94A0\nFD20\n12C0\nFC00\n1240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_61C4\nENCODING 25028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A80\n5F80\n4A80\nDFE0\nF5A0\nDFA0\n44A0\n5EA0\n4520\n47A0\n5840\nENDCHAR\nSTARTCHAR U_61C5\nENCODING 25029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2100\nAFE0\nB920\nAFC0\nA920\n2FE0\n2A40\n2D80\n32C0\n25A0\nENDCHAR\nSTARTCHAR U_61C6\nENCODING 25030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nA7C0\nB000\nAEE0\n2AA0\n2EE0\n2100\n2FE0\n2540\n2920\nENDCHAR\nSTARTCHAR U_61C7\nENCODING 25031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n33C0\nEA40\n53C0\n3240\nDBC0\n2AA0\n5340\n0420\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_61C8\nENCODING 25032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\n2EA0\nB4A0\nAF60\nAB40\n3FE0\n2A40\n3FE0\n2A40\n2A40\n2E40\nENDCHAR\nSTARTCHAR U_61C9\nENCODING 25033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4A80\n57E0\n7C80\n57C0\n5480\n57E0\n4A40\nA8A0\n4FA0\nENDCHAR\nSTARTCHAR U_61CA\nENCODING 25034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n5FC0\n5AC0\nF740\nDFC0\n5740\n5AC0\n7FE0\n4300\n4480\n5860\nENDCHAR\nSTARTCHAR U_61CB\nENCODING 25035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\nF5E0\n3F80\n2480\n6DC0\nB6A0\n2C80\n1400\n5240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_61CC\nENCODING 25036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nAFE0\nB100\nAFE0\n2280\n27C0\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_61CD\nENCODING 25037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3FE0\nAAA0\nBBA0\nA820\n2FE0\n2100\n3FE0\n2380\n2540\n3920\nENDCHAR\nSTARTCHAR U_61CE\nENCODING 25038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n5FC0\n6A80\nD740\nFFE0\n5040\n5740\n5540\n5740\n5040\n5FC0\nENDCHAR\nSTARTCHAR U_61CF\nENCODING 25039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4FE0\n5880\nEFC0\nD880\n4FE0\n4000\n4EE0\n4AA0\n4BA0\n4860\nENDCHAR\nSTARTCHAR U_61D0\nENCODING 25040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\n4AA0\nEFE0\nD100\n5FE0\n4200\n4540\n4C80\n7660\n4440\nENDCHAR\nSTARTCHAR U_61D1\nENCODING 25041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nBFE0\n4480\n3FE0\nC480\n5FE0\n5520\n1AA0\n5440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_61D2\nENCODING 25042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n28E0\n3D40\nABE0\nBE20\nAAA0\n3EA0\n2AA0\n3CA0\n2B40\n2A20\nENDCHAR\nSTARTCHAR U_61D3\nENCODING 25043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n4E40\n6580\nDFE0\nC920\n4A60\n53C0\n4400\n4FC0\n5380\n4C60\nENDCHAR\nSTARTCHAR U_61D4\nENCODING 25044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nABA0\nB820\nAFE0\n2000\n27C0\n2000\n2FE0\n2540\n2B20\nENDCHAR\nSTARTCHAR U_61D5\nENCODING 25045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n52C0\n5EA0\n41E0\n5E80\n5280\n5F60\n5240\n4920\n6840\nA7C0\nENDCHAR\nSTARTCHAR U_61D6\nENCODING 25046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n5380\nF880\n27E0\nF880\nABE0\n7220\nFBE0\n1440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_61D7\nENCODING 25047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n4880\n5FE0\nC880\nFFE0\n5540\n7760\n5540\n5540\n5540\n6EC0\nENDCHAR\nSTARTCHAR U_61D8\nENCODING 25048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\nBFE0\n5540\n2520\nDFE0\n5220\n4FC0\n0A40\n5440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_61D9\nENCODING 25049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4F60\n4A20\nEFE0\nDAA0\n4EE0\n4AA0\n5FE0\n4440\n4820\n5020\nENDCHAR\nSTARTCHAR U_61DA\nENCODING 25050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n4A80\n4FC0\nE200\nDFE0\nC040\n4FC0\n4040\n4FC0\n5560\n57C0\nENDCHAR\nSTARTCHAR U_61DB\nENCODING 25051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n5FE0\n4200\nCFC0\nE480\n5FE0\n5220\n4480\n4FC0\n4200\n5FE0\nENDCHAR\nSTARTCHAR U_61DC\nENCODING 25052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5FE0\n6480\nDFE0\nCAA0\n5FE0\n5420\n4780\n4C80\n4300\n4E00\nENDCHAR\nSTARTCHAR U_61DD\nENCODING 25053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5400\n5BE0\n5140\nEC80\nD3E0\n5C80\n6AE0\n7E80\n4A80\n5780\n64E0\nENDCHAR\nSTARTCHAR U_61DE\nENCODING 25054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nA280\nBFE0\nA820\nA7C0\n2940\n2280\n2DC0\n22A0\n2D20\nENDCHAR\nSTARTCHAR U_61DF\nENCODING 25055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAA40\n6C40\nFFE0\n2840\nFF40\n10C0\n7C40\n10C0\nFF00\n52A0\n9FA0\nENDCHAR\nSTARTCHAR U_61E0\nENCODING 25056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA160\nBEC0\nAAA0\n36C0\n2440\n27C0\n2440\n27C0\n2840\nENDCHAR\nSTARTCHAR U_61E1\nENCODING 25057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\n5240\nFFE0\nD6C0\nDB60\n5240\n5280\n5500\n6A40\n47E0\nENDCHAR\nSTARTCHAR U_61E2\nENCODING 25058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E00\n5480\n5EE0\nF280\nDEC0\nD520\n5E00\n4000\n5FC0\n5540\n7FE0\nENDCHAR\nSTARTCHAR U_61E3\nENCODING 25059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3FE0\n8480\n5FE0\n3B20\nD6A0\n5B60\n4000\n1440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_61E4\nENCODING 25060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nB100\nAFE0\nA120\n2FC0\n2040\n3FE0\n2A40\n2F40\n20C0\nENDCHAR\nSTARTCHAR U_61E5\nENCODING 25061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nBFE0\nA540\nA7C0\n2540\n2FE0\n2120\n25C0\n2B00\n31E0\nENDCHAR\nSTARTCHAR U_61E6\nENCODING 25062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nBFE0\nABA0\nA540\nAFE0\n2100\n2FE0\n2AA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_61E7\nENCODING 25063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA920\nB660\nABC0\nA000\n2FE0\n2AA0\n3FE0\n2100\n2300\nENDCHAR\nSTARTCHAR U_61E8\nENCODING 25064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2940\nAF60\nB940\nAFE0\nA940\n2F40\n2940\n2F40\n39A0\n2B20\nENDCHAR\nSTARTCHAR U_61E9\nENCODING 25065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\nA100\nBFE0\nA200\n3FE0\n2D40\n37E0\n2540\n2480\n2660\nENDCHAR\nSTARTCHAR U_61EA\nENCODING 25066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nA7C0\nB440\nAFC0\n2280\n3FE0\n2D40\n33A0\n2540\n3B20\nENDCHAR\nSTARTCHAR U_61EB\nENCODING 25067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2DC0\n2900\nAFE0\nA940\nB7C0\n2440\n2740\n25C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_61EC\nENCODING 25068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4900\n7FE0\n4A80\n4F80\n4A80\n4F80\n5040\nAAA0\nAFA0\nENDCHAR\nSTARTCHAR U_61ED\nENCODING 25069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2FE0\nA940\nBFE0\nA940\n2FE0\n2AA0\n2BE0\n2AA0\n2BE0\n3620\nENDCHAR\nSTARTCHAR U_61EE\nENCODING 25070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nA7C0\nB440\nAFE0\n2AA0\n2640\n2BC0\n2640\n2980\n2E60\nENDCHAR\nSTARTCHAR U_61EF\nENCODING 25071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\nFF00\n55E0\n7E20\n5540\n1080\nFD40\n4A20\n9C40\n52A0\n4F80\nENDCHAR\nSTARTCHAR U_61F0\nENCODING 25072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FA0\n2AA0\nAEA0\nBAA0\nA520\nAFA0\n3220\n2FA0\n2AA0\n2720\n3FE0\nENDCHAR\nSTARTCHAR U_61F1\nENCODING 25073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n2FE0\nBAA0\nAFE0\nA140\n2FE0\n2920\n2D40\n28C0\n3320\nENDCHAR\nSTARTCHAR U_61F2\nENCODING 25074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3580\n5FE0\nA0A0\n5FA0\nC440\n5E40\n44A0\n5F20\n1440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_61F3\nENCODING 25075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4FC0\n4480\nEFC0\nC480\n4FC0\n4040\n4FC0\n4220\n5940\n67C0\nENDCHAR\nSTARTCHAR U_61F4\nENCODING 25076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4EC0\n64A0\nDFE0\nCA80\n5BA0\n4AA0\n5BC0\n4AA0\n4F60\n5A20\nENDCHAR\nSTARTCHAR U_61F5\nENCODING 25077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nAFE0\nBAA0\nAFE0\nA820\n27C0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_61F6\nENCODING 25078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n5F40\nC4E0\nFFA0\nD5E0\n55A0\n5FE0\n44A0\n4EE0\n5540\n64A0\nENDCHAR\nSTARTCHAR U_61F7\nENCODING 25079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nAAA0\nBFE0\nA940\nA580\n2B60\n2520\n2CC0\n2640\n2420\nENDCHAR\nSTARTCHAR U_61F8\nENCODING 25080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4940\n6B80\n5920\n4BE0\nFC80\nAAA0\nA5A0\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_61F9\nENCODING 25081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nB5A0\nAFE0\nA240\n2FE0\n2240\n3FE0\n24A0\n3D40\n2620\nENDCHAR\nSTARTCHAR U_61FA\nENCODING 25082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AC0\n35A0\nBFE0\nAA80\nBBA0\n2AA0\n3BC0\n2A40\n3B60\n2AA0\n3F20\nENDCHAR\nSTARTCHAR U_61FB\nENCODING 25083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n2EC0\n22A0\nAFE0\nB540\nA7C0\n2240\n2FE0\n2240\n2FE0\n2420\nENDCHAR\nSTARTCHAR U_61FC\nENCODING 25084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nBEE0\nAAA0\nAFE0\nA480\n2FE0\n3480\n27C0\n2480\n27E0\nENDCHAR\nSTARTCHAR U_61FD\nENCODING 25085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nAEE0\nBAA0\nAEE0\nA480\n2FE0\n3480\n27E0\n2480\n27E0\nENDCHAR\nSTARTCHAR U_61FE\nENCODING 25086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2240\nA3C0\nB240\nAFE0\n2040\n3FE0\n2AA0\n2EE0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_61FF\nENCODING 25087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n13E0\nFD20\n8680\n7A80\n0540\n7A20\n4800\n7AA0\n5660\nF9C0\nENDCHAR\nSTARTCHAR U_6200\nENCODING 25088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n4E80\nE1E0\n4E40\nA0A0\nEFE0\n5B40\nAEA0\n0440\n52A0\n4F80\nENDCHAR\nSTARTCHAR U_6201\nENCODING 25089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2940\nFFE0\n2940\n57E0\n7D40\n11E0\n7D40\n29E0\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_6202\nENCODING 25090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n4A40\nEFE0\nDAE0\n4F40\n4A80\n4EE0\n5280\n5EE0\n6280\nENDCHAR\nSTARTCHAR U_6203\nENCODING 25091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\nA820\nB7C0\nA440\n2FE0\n2AA0\n2FE0\n2100\n3FE0\n2AA0\nENDCHAR\nSTARTCHAR U_6204\nENCODING 25092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\nAAA0\nBAA0\nAFE0\nA900\n3FE0\n2900\n2FE0\n2480\n2300\n2CE0\nENDCHAR\nSTARTCHAR U_6205\nENCODING 25093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF880\n57E0\nFA40\n53C0\n7240\n23C0\nFA40\n2420\n52A0\n9F80\nENDCHAR\nSTARTCHAR U_6206\nENCODING 25094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n51C0\nFE20\n8BE0\nF880\n23E0\nFEA0\n2140\n5620\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_6207\nENCODING 25095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n5140\nFFE0\n8880\nFFE0\nAA40\nFBC0\n2240\n5420\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_6208\nENCODING 25096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n0900\n0800\nFFE0\n0880\n0880\n0900\n0600\n0A20\n31A0\nC060\nENDCHAR\nSTARTCHAR U_6209\nENCODING 25097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n0480\n7FE0\n4400\n4440\n4440\n4480\n4300\n5320\n64A0\n4860\nENDCHAR\nSTARTCHAR U_620A\nENCODING 25098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n0240\n3FE0\n2200\n2240\n2240\n2180\n2120\n42A0\n4460\n9820\nENDCHAR\nSTARTCHAR U_620B\nENCODING 25099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n0480\nFFE0\n0400\n07E0\n7C00\n0440\n0280\n0320\n0CA0\n7060\nENDCHAR\nSTARTCHAR U_620C\nENCODING 25100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n0240\n3FE0\n2200\n2240\n3E40\n2280\n2100\n2320\n44A0\n9860\nENDCHAR\nSTARTCHAR U_620D\nENCODING 25101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n0240\n7FE0\n4200\n4240\n6240\n5280\n5100\n4320\n84A0\n9860\nENDCHAR\nSTARTCHAR U_620E\nENCODING 25102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n0240\nFFE0\n2200\n2240\n2240\nFA80\n2100\n2320\n44A0\n9860\nENDCHAR\nSTARTCHAR U_620F\nENCODING 25103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n7A40\n0A00\n4FE0\n2A00\n1240\n1280\n2900\n4120\n86A0\n0060\nENDCHAR\nSTARTCHAR U_6210\nENCODING 25104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n0240\n7FE0\n4200\n4200\n7A40\n4A40\n4A80\n4920\n52A0\n8460\nENDCHAR\nSTARTCHAR U_6211\nENCODING 25105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A80\n7240\n1200\nFFE0\n1200\n1A40\n3280\nD100\n1320\n54A0\n2060\nENDCHAR\nSTARTCHAR U_6212\nENCODING 25106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\n0220\nFFE0\n0200\n2A40\n2A40\nFE80\n2980\n4920\n4AA0\n8460\nENDCHAR\nSTARTCHAR U_6213\nENCODING 25107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n0480\nFFE0\n0400\nF440\n9480\n9500\nF200\n0520\n18A0\n6060\nENDCHAR\nSTARTCHAR U_6214\nENCODING 25108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n0FE0\nF880\n0500\n0620\n79E0\n1100\nFFE0\n0900\n0E20\n71E0\nENDCHAR\nSTARTCHAR U_6215\nENCODING 25109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4940\n4920\n49E0\n7F00\n0920\n0920\nF940\n4880\n49A0\n4A60\n8C20\nENDCHAR\nSTARTCHAR U_6216\nENCODING 25110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n0240\nFFE0\n0200\n7A40\n4A40\n7940\n0180\n1CA0\nE160\n0620\nENDCHAR\nSTARTCHAR U_6217\nENCODING 25111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n2920\n45E0\n8700\n7920\n4920\n4940\n5880\n44A0\n4560\n3E20\nENDCHAR\nSTARTCHAR U_6218\nENCODING 25112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n2140\n3D00\n2160\n2780\nF920\n8940\n8980\n8920\nFEA0\n8860\nENDCHAR\nSTARTCHAR U_6219\nENCODING 25113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEC0\n82A0\nBA80\n83E0\nBA80\nAAA0\nAAA0\nBAC0\n82A0\n82E0\n8720\nENDCHAR\nSTARTCHAR U_621A\nENCODING 25114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n0120\n7FE0\n4900\n4D20\n4920\n7F40\n4880\n5CA0\nAB60\n5A20\nENDCHAR\nSTARTCHAR U_621B\nENCODING 25115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2080\n3E80\n2F80\n2080\n3F80\n0900\nFFE0\n0480\n0720\nF8E0\nENDCHAR\nSTARTCHAR U_621C\nENCODING 25116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n0120\nFFE0\n0100\n7920\n4920\nFD40\n1080\n7CA0\n1160\nFE20\nENDCHAR\nSTARTCHAR U_621D\nENCODING 25117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7940\n4900\n79E0\n4F00\n7920\n4940\n7880\n01A0\n5660\n8820\nENDCHAR\nSTARTCHAR U_621E\nENCODING 25118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0800\n3F80\n2480\n2280\nFFE0\n8920\n0FC0\nF900\n0E40\n71C0\nENDCHAR\nSTARTCHAR U_621F\nENCODING 25119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\nFD20\n1100\n7FE0\n4900\n7940\n4940\n7880\n10A0\nFD60\n1220\nENDCHAR\nSTARTCHAR U_6220\nENCODING 25120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nFD20\n4900\n3100\nFFE0\n0100\n7920\n48C0\n78A0\n4960\n7A20\nENDCHAR\nSTARTCHAR U_6221\nENCODING 25121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4940\nFD20\n4900\n7FE0\n4920\n7920\n4940\nFE80\nA8A0\nC560\nFE20\nENDCHAR\nSTARTCHAR U_6222\nENCODING 25122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7940\n4920\n4900\nFFE0\n4500\n7D20\n4520\n7D40\n44A0\nFD60\n0620\nENDCHAR\nSTARTCHAR U_6223\nENCODING 25123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n3520\nEBE0\n4500\n8320\n7D20\n1140\nFC80\n28A0\n4560\n8220\nENDCHAR\nSTARTCHAR U_6224\nENCODING 25124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD40\n4920\n5D00\n47E0\n7D00\n9120\n2940\nFE80\nAAA0\nAB60\nFE20\nENDCHAR\nSTARTCHAR U_6225\nENCODING 25125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D40\n4520\n7D00\n47E0\n7D20\n5140\n7D40\n9080\n7CA0\n1160\nFE20\nENDCHAR\nSTARTCHAR U_6226\nENCODING 25126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA500\n5980\n7D40\n55E0\n7F00\n5520\n7D40\n1080\nFDA0\n1260\n1420\nENDCHAR\nSTARTCHAR U_6227\nENCODING 25127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3940\n5520\nFF00\n47E0\n7D00\n4540\n7D40\n4080\n7CA0\nA560\nBE20\nENDCHAR\nSTARTCHAR U_6228\nENCODING 25128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF40\n0520\n7500\n55E0\nFF00\n0520\n7540\n5480\n75A0\n1660\n0820\nENDCHAR\nSTARTCHAR U_6229\nENCODING 25129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD40\n4920\nB500\nFFE0\n0100\nF940\n8940\nF880\n88A0\nF960\n8A20\nENDCHAR\nSTARTCHAR U_622A\nENCODING 25130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n7D20\n1100\nFFE0\n2900\n7D20\nC920\n7D40\n4880\n7DA0\n4260\nENDCHAR\nSTARTCHAR U_622B\nENCODING 25131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nF8A0\n47E0\n7080\nD7A0\n75A0\n57A0\n70C0\n56A0\n5160\n5220\nENDCHAR\nSTARTCHAR U_622C\nENCODING 25132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD40\nA920\n6FE0\n2900\nFD40\n0140\n7D40\n4480\n7CA0\n4560\n7E20\nENDCHAR\nSTARTCHAR U_622D\nENCODING 25133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\nFF20\n8300\n7DE0\n1300\n7D20\n5540\n7C80\n54A0\n7D60\nC620\nENDCHAR\nSTARTCHAR U_622E\nENCODING 25134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD40\nB520\n6D00\nB7E0\n3100\n4920\nA540\n5080\n29A0\n1260\nEC20\nENDCHAR\nSTARTCHAR U_622F\nENCODING 25135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1D40\n1120\n7D00\n57E0\n7D00\n5120\n4EC0\n5480\n76A0\n9560\nBE20\nENDCHAR\nSTARTCHAR U_6230\nENCODING 25136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEC0\nAAA0\nFE80\n54E0\n7F80\n54A0\n7CA0\n10C0\nFEA0\n1160\n1220\nENDCHAR\nSTARTCHAR U_6231\nENCODING 25137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3900\n2140\nFD20\nA7E0\nF900\nA520\n9CC0\nAA80\nEEA0\nA960\nFE20\nENDCHAR\nSTARTCHAR U_6232\nENCODING 25138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1CC0\n10A0\nFE80\n93E0\nBC80\n92A0\nBEA0\nA4C0\nBCA0\nA960\nFE20\nENDCHAR\nSTARTCHAR U_6233\nENCODING 25139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEC0\n9AA0\n5680\nAAE0\n7F80\n48A0\nFEA0\n48C0\n7EA0\n4960\n7E20\nENDCHAR\nSTARTCHAR U_6234\nENCODING 25140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D40\n1120\nFFE0\n5500\n7D40\n5540\n7D40\n2880\nFEA0\n4960\n8620\nENDCHAR\nSTARTCHAR U_6235\nENCODING 25141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE80\nAAC0\nEEA0\nABE0\nEE80\n28A0\n7EA0\nC8C0\n7EA0\n4960\n7E20\nENDCHAR\nSTARTCHAR U_6236\nENCODING 25142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n3E00\n2000\n3FC0\n2040\n2040\n3FC0\n2000\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_6237\nENCODING 25143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n3FC0\n2040\n2040\n3FC0\n2000\n2000\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_6238\nENCODING 25144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0000\n3FC0\n2040\n3FC0\n2000\n2000\n2000\n4000\n4000\n8000\nENDCHAR\nSTARTCHAR U_6239\nENCODING 25145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2020\n3FE0\n2000\n2FC0\n2080\n2300\n4420\n4820\n87E0\nENDCHAR\nSTARTCHAR U_623A\nENCODING 25146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n09E0\n7D20\n4520\n4520\n7DE0\n4100\n4100\n4120\n8120\n80E0\nENDCHAR\nSTARTCHAR U_623B\nENCODING 25147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n3FC0\n2040\n3FC0\n2200\n3FE0\n2200\n4500\n4880\nB060\nENDCHAR\nSTARTCHAR U_623C\nENCODING 25148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n0A00\n0A00\n7BC0\n4A40\n7BC0\n0A00\n0A00\n1200\n2200\n4200\nENDCHAR\nSTARTCHAR U_623D\nENCODING 25149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2020\n3FE0\n2480\n2280\n2880\n24E0\n3F80\n4080\n8080\nENDCHAR\nSTARTCHAR U_623E\nENCODING 25150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4040\n7FC0\n4500\n4480\n7FC0\n4600\n4500\n4880\nB060\nENDCHAR\nSTARTCHAR U_623F\nENCODING 25151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FC0\n2040\n3FC0\n2200\n3FE0\n2400\n27C0\n4440\n4840\n9180\nENDCHAR\nSTARTCHAR U_6240\nENCODING 25152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1860\n6380\n4200\n7A00\n4BE0\n4A40\n7A40\n4240\n4240\n4440\n8840\nENDCHAR\nSTARTCHAR U_6241\nENCODING 25153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2020\n3FE0\n2000\n2FE0\n2AA0\n2FE0\n4AA0\n4AA0\n8860\nENDCHAR\nSTARTCHAR U_6242\nENCODING 25154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2020\n3FE0\n2200\n23E0\n2200\n2FE0\n2820\n4820\n8FE0\nENDCHAR\nSTARTCHAR U_6243\nENCODING 25155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n7FE0\n4000\n5FE0\n5020\n57A0\n54A0\n97A0\n9060\nENDCHAR\nSTARTCHAR U_6244\nENCODING 25156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4020\n7FE0\n4400\n5FE0\n5020\n57A0\n54A0\n97A0\n9060\nENDCHAR\nSTARTCHAR U_6245\nENCODING 25157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2020\n3FE0\n2400\n2780\n2D00\n23E0\n4E40\n4180\n9E00\nENDCHAR\nSTARTCHAR U_6246\nENCODING 25158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2020\n3FE0\n2200\n3FE0\n2220\n2540\n3C80\n4640\n8420\nENDCHAR\nSTARTCHAR U_6247\nENCODING 25159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n7FE0\n4000\n7DE0\n4420\n54A0\n4C60\n54A0\nA960\nENDCHAR\nSTARTCHAR U_6248\nENCODING 25160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n7FE0\n4880\n5FC0\n5240\n5FC0\n5020\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_6249\nENCODING 25161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4020\n7FE0\n4500\n7DE0\n4500\n7DE0\n4500\nBDE0\n8500\nENDCHAR\nSTARTCHAR U_624A\nENCODING 25162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4040\n7FC0\n5280\n5700\n48E0\n7200\n4A80\n8500\nB8E0\nENDCHAR\nSTARTCHAR U_624B\nENCODING 25163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n7C00\n0400\n7FC0\n0400\n0400\nFFE0\n0400\n0400\n0400\n0C00\nENDCHAR\nSTARTCHAR U_624C\nENCODING 25164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n1000\n7C00\n1000\n1800\n7000\n1000\n1000\n1000\n3000\nENDCHAR\nSTARTCHAR U_624D\nENCODING 25165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\n7FE0\n0300\n0500\n0900\n1100\n2100\nC100\n0500\n0200\nENDCHAR\nSTARTCHAR U_624E\nENCODING 25166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFA00\n2200\n2A00\n3200\n6200\nA200\n2220\n2220\nE1E0\nENDCHAR\nSTARTCHAR U_624F\nENCODING 25167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nF200\n2F80\n2280\n3280\n6280\nA280\n24A0\nA4A0\n4860\nENDCHAR\nSTARTCHAR U_6250\nENCODING 25168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFBE0\n2120\n2920\n3120\n6120\nA220\n2220\nA4A0\n4840\nENDCHAR\nSTARTCHAR U_6251\nENCODING 25169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFD00\n2180\n2940\n3120\n6100\nA100\n2100\nA100\n4100\nENDCHAR\nSTARTCHAR U_6252\nENCODING 25170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2080\nFA80\n2280\n2A80\n3280\n6240\nA440\n2440\n2820\nF020\nENDCHAR\nSTARTCHAR U_6253\nENCODING 25171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF880\n2080\n2880\n3080\n6080\nA080\n2080\n2080\nE380\nENDCHAR\nSTARTCHAR U_6254\nENCODING 25172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nFA40\n2280\n2AE0\n3220\n6220\nA220\n2420\n2420\nE8C0\nENDCHAR\nSTARTCHAR U_6255\nENCODING 25173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2100\nF100\n2100\n2A00\n3280\n6240\nA440\n2FE0\n2420\nE000\nENDCHAR\nSTARTCHAR U_6256\nENCODING 25174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n2400\nF200\n2200\n2A00\n3300\n6500\nA480\n2480\n2860\nF040\nENDCHAR\nSTARTCHAR U_6257\nENCODING 25175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF100\n2100\n27C0\n3100\n6100\nA100\n2100\n2FE0\nE000\nENDCHAR\nSTARTCHAR U_6258\nENCODING 25176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF900\n2100\n29E0\n3700\n6100\nA100\n2120\n2120\nE0E0\nENDCHAR\nSTARTCHAR U_6259\nENCODING 25177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFFE0\n2080\n2480\n3480\n6280\nA100\n2100\n2280\nEC60\nENDCHAR\nSTARTCHAR U_625A\nENCODING 25178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2420\n2820\n3220\n6120\nA120\n2020\n2020\nE0C0\nENDCHAR\nSTARTCHAR U_625B\nENCODING 25179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF900\n2100\n2900\n3100\n6100\nA100\n2100\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_625C\nENCODING 25180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\nF880\n2080\n27E0\n3080\n6080\nA080\n2080\n2280\nE100\nENDCHAR\nSTARTCHAR U_625D\nENCODING 25181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2000\nF000\n2FE0\n2200\n3400\n67C0\nA040\n2040\n2280\nE100\nENDCHAR\nSTARTCHAR U_625E\nENCODING 25182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nF900\n2100\n2100\n3FE0\n6100\nA100\n2100\n2100\nE100\nENDCHAR\nSTARTCHAR U_625F\nENCODING 25183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2F80\nF480\n2480\n2480\n3F80\n6480\nA480\n24A0\n2460\nE420\nENDCHAR\nSTARTCHAR U_6260\nENCODING 25184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFD40\n24C0\n2C40\n3280\n6280\nA100\n2280\n2440\nF820\nENDCHAR\nSTARTCHAR U_6261\nENCODING 25185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\nFDC0\n2740\n2D40\n3540\n6540\nA5C0\n2520\n2420\nE3E0\nENDCHAR\nSTARTCHAR U_6262\nENCODING 25186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2400\n2BC0\n3080\n6100\nA200\n2420\n2420\nE3E0\nENDCHAR\nSTARTCHAR U_6263\nENCODING 25187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\nFA20\n2220\n2A20\n3220\n6220\nA220\n2220\n23E0\nE000\nENDCHAR\nSTARTCHAR U_6264\nENCODING 25188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nFA80\n2280\n2A80\n3280\n6280\nA280\n24A0\n28A0\nF060\nENDCHAR\nSTARTCHAR U_6265\nENCODING 25189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF1C0\n2700\n2100\n31E0\n6F00\nA100\n2100\n2120\nE0E0\nENDCHAR\nSTARTCHAR U_6266\nENCODING 25190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF900\n2100\n2900\n37E0\n6100\nA100\n2100\n2100\nE100\nENDCHAR\nSTARTCHAR U_6267\nENCODING 25191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFF80\n2280\n2A80\n3680\n6280\nA7A0\n24A0\nA8A0\n5060\nENDCHAR\nSTARTCHAR U_6268\nENCODING 25192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nF240\n2240\n2640\n3A40\n6240\nA240\n2440\n2540\nE880\nENDCHAR\nSTARTCHAR U_6269\nENCODING 25193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2400\n2C00\n3400\n6400\nA400\n2400\n2400\n6800\nENDCHAR\nSTARTCHAR U_626A\nENCODING 25194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n22E0\nFC20\n2420\n2C20\n3420\n6420\nA420\n2420\n24A0\nE440\nENDCHAR\nSTARTCHAR U_626B\nENCODING 25195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF820\n2020\n2820\n33E0\n6020\nA020\n2020\n27E0\nE000\nENDCHAR\nSTARTCHAR U_626C\nENCODING 25196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2080\nF900\n2200\n2FE0\n32A0\n62A0\nA520\n2920\n2220\nE4C0\nENDCHAR\nSTARTCHAR U_626D\nENCODING 25197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2240\nFA40\n2240\n2A40\n37C0\n6240\nA240\n2240\n2240\nEFE0\nENDCHAR\nSTARTCHAR U_626E\nENCODING 25198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\nFA40\n2440\n2820\n37C0\n6240\nA240\n2240\n2440\nE980\nENDCHAR\nSTARTCHAR U_626F\nENCODING 25199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nF880\n2280\n22E0\n3280\n6280\nA280\n2280\n2280\nEFE0\nENDCHAR\nSTARTCHAR U_6270\nENCODING 25200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2140\nF920\n27E0\n2900\n3180\n6280\nA280\n24A0\n28A0\nF060\nENDCHAR\nSTARTCHAR U_6271\nENCODING 25201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2240\nFA40\n2280\n2AE0\n3220\n6220\nA540\n2480\n2940\nF620\nENDCHAR\nSTARTCHAR U_6272\nENCODING 25202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFA80\n2440\n2920\n3080\n6FE0\nA040\n2080\n2100\nE200\nENDCHAR\nSTARTCHAR U_6273\nENCODING 25203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nFC00\n27C0\n2440\n3640\n6540\nA480\n2980\n2A40\nF420\nENDCHAR\nSTARTCHAR U_6274\nENCODING 25204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF280\n2460\n2A40\n3240\n6240\nA240\n2240\n2440\nE840\nENDCHAR\nSTARTCHAR U_6275\nENCODING 25205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nF200\n2500\n2880\n3460\n6300\nA100\n2400\n2300\nE100\nENDCHAR\nSTARTCHAR U_6276\nENCODING 25206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF7C0\n2100\n2100\n3FE0\n6100\nA280\n2280\n2440\nF820\nENDCHAR\nSTARTCHAR U_6277\nENCODING 25207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF900\n2100\n2FE0\n3100\n6100\nA280\n2480\n2840\nF020\nENDCHAR\nSTARTCHAR U_6278\nENCODING 25208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\nFA80\n23E0\n2A00\n3200\n63C0\nA240\n2440\n2440\nE840\nENDCHAR\nSTARTCHAR U_6279\nENCODING 25209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\nFC80\n24A0\n2FC0\n3480\n6480\nA480\n25A0\n26A0\nE460\nENDCHAR\nSTARTCHAR U_627A\nENCODING 25210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2780\nFC80\n2480\n2FE0\n3480\n6480\nA480\n24A0\n2660\nE420\nENDCHAR\nSTARTCHAR U_627B\nENCODING 25211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2420\n2940\n3100\n6100\nA280\n2280\n2440\nE820\nENDCHAR\nSTARTCHAR U_627C\nENCODING 25212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nFDE0\n2520\n2D20\n3520\n6560\nA500\n2900\n2920\nF0E0\nENDCHAR\nSTARTCHAR U_627D\nENCODING 25213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2100\n2D40\n3540\n6540\nA7C0\n2120\n2120\nE0E0\nENDCHAR\nSTARTCHAR U_627E\nENCODING 25214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2240\nFFE0\n2200\n2A40\n3240\n6280\nA100\n2320\n24A0\nE860\nENDCHAR\nSTARTCHAR U_627F\nENCODING 25215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F00\n0200\n0420\nFFC0\n2480\n3F80\n2440\n7FC0\n4420\n8420\n1C00\nENDCHAR\nSTARTCHAR U_6280\nENCODING 25216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2100\n2FC0\n3440\n6440\nA280\n2100\n2280\nEC60\nENDCHAR\nSTARTCHAR U_6281\nENCODING 25217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2240\nFC20\n27E0\n2A80\n3280\n6280\nA280\n24A0\n24A0\nE860\nENDCHAR\nSTARTCHAR U_6282\nENCODING 25218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nF900\n2100\n2900\n37C0\n6100\nA100\n2100\n2FE0\nE000\nENDCHAR\nSTARTCHAR U_6283\nENCODING 25219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nF800\n27E0\n2900\n3180\n6160\nA120\n2100\n2100\nE100\nENDCHAR\nSTARTCHAR U_6284\nENCODING 25220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFB40\n2520\n2900\n3120\n6140\nA080\n2100\n2200\nEC00\nENDCHAR\nSTARTCHAR U_6285\nENCODING 25221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nF3E0\n2420\n2A20\n3220\n64A0\nAFE0\n2020\n20A0\nE040\nENDCHAR\nSTARTCHAR U_6286\nENCODING 25222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2440\n2440\n3280\nE280\n2100\n2280\n2440\n6820\nENDCHAR\nSTARTCHAR U_6287\nENCODING 25223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\nFA20\n2220\n2BE0\n3220\n6220\nA220\n2220\n23E0\nE220\nENDCHAR\nSTARTCHAR U_6288\nENCODING 25224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\nFA20\n23E0\n2A20\n3220\n63E0\nA220\n2220\n24A0\nE840\nENDCHAR\nSTARTCHAR U_6289\nENCODING 25225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFBC0\n2140\n2940\n3140\n6FE0\nA100\n2280\n2440\nE820\nENDCHAR\nSTARTCHAR U_628A\nENCODING 25226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nFD40\n2540\n2D40\n37C0\n6400\nA400\n2420\n2420\nE7E0\nENDCHAR\nSTARTCHAR U_628B\nENCODING 25227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nF900\n2200\n2A40\n3220\n6620\nAA00\n2A00\n2220\nE1E0\nENDCHAR\nSTARTCHAR U_628C\nENCODING 25228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2520\n2940\n3100\n6100\nA300\n2520\n2920\nF0E0\nENDCHAR\nSTARTCHAR U_628D\nENCODING 25229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n2640\nF240\n2A40\n2240\n37E0\n6240\nA240\n2440\n2440\nE840\nENDCHAR\nSTARTCHAR U_628E\nENCODING 25230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23C0\nF800\n2000\n2FE0\n3100\n6100\nA240\n2240\n2FA0\nE420\nENDCHAR\nSTARTCHAR U_628F\nENCODING 25231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2000\nF800\n2000\n2FE0\n3280\n6280\nA280\n22A0\n24A0\nE860\nENDCHAR\nSTARTCHAR U_6290\nENCODING 25232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2920\n2920\n3920\n6AA0\nAC60\n2820\n2820\n6860\nENDCHAR\nSTARTCHAR U_6291\nENCODING 25233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n26E0\nFCA0\n24A0\n2CA0\n34A0\n65A0\nA6A0\n24E0\n2080\nE080\nENDCHAR\nSTARTCHAR U_6292\nENCODING 25234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\nFA80\n2100\n2FE0\n3120\n6140\nA100\n2100\n2100\nE700\nENDCHAR\nSTARTCHAR U_6293\nENCODING 25235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n27C0\nFD40\n2540\n2D40\n3540\n6540\nA540\n2540\n2920\nF120\nENDCHAR\nSTARTCHAR U_6294\nENCODING 25236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nF900\n2180\n2B40\n3520\n6920\nA100\n2100\n2100\nE100\nENDCHAR\nSTARTCHAR U_6295\nENCODING 25237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFA40\n2460\n2800\n37C0\n6440\nA280\n2100\n2280\nEC60\nENDCHAR\nSTARTCHAR U_6296\nENCODING 25238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2240\nF940\n2040\n2A40\n3140\n60E0\nAF40\n2040\n2040\nE040\nENDCHAR\nSTARTCHAR U_6297\nENCODING 25239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2000\n2780\n3480\n6480\nA480\n24A0\n28A0\nF060\nENDCHAR\nSTARTCHAR U_6298\nENCODING 25240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2380\nFA00\n2200\n23E0\n3A40\n6240\nA240\n2240\n2440\nE840\nENDCHAR\nSTARTCHAR U_6299\nENCODING 25241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF900\n27C0\n2100\n3FE0\n6100\nA100\n2100\n2500\nE200\nENDCHAR\nSTARTCHAR U_629A\nENCODING 25242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nF900\n2100\n2FE0\n3280\n6280\nA280\n24A0\n28A0\nF060\nENDCHAR\nSTARTCHAR U_629B\nENCODING 25243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2880\nF9E0\n2EA0\n2AA0\n3AA0\n6AA0\nAAA0\n2B40\n2A20\nF1E0\nENDCHAR\nSTARTCHAR U_629C\nENCODING 25244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFA00\n2FE0\n2200\n33C0\n6440\nA640\n2980\n2A40\nF420\nENDCHAR\nSTARTCHAR U_629D\nENCODING 25245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n22E0\nF220\n2420\n2F20\n3220\n6420\nA520\n2F20\n20A0\nE040\nENDCHAR\nSTARTCHAR U_629E\nENCODING 25246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\nFA20\n2220\n2BE0\n3280\n6280\nA280\n2440\n2440\nE820\nENDCHAR\nSTARTCHAR U_629F\nENCODING 25247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF7C0\n2100\n2FE0\n3200\n67E0\nA040\n2380\n2080\nE040\nENDCHAR\nSTARTCHAR U_62A0\nENCODING 25248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nFC40\n2640\n2D40\n3480\n6480\nA540\n2640\n2400\nE7E0\nENDCHAR\nSTARTCHAR U_62A1\nENCODING 25249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF440\n2820\n2A00\n3240\n6280\nA300\n2220\n2220\nE1E0\nENDCHAR\nSTARTCHAR U_62A2\nENCODING 25250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF440\n2820\n2780\n3480\n6480\nA580\n2420\n2420\nE3E0\nENDCHAR\nSTARTCHAR U_62A3\nENCODING 25251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2420\n2A20\n3220\n60A0\nA120\n2620\n20A0\nE040\nENDCHAR\nSTARTCHAR U_62A4\nENCODING 25252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nF7E0\n2420\n2420\n37E0\n6400\nA400\n2400\n2800\nF000\nENDCHAR\nSTARTCHAR U_62A5\nENCODING 25253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFC40\n2580\n2C00\n37E0\n6540\nA540\n2480\n2540\nE620\nENDCHAR\nSTARTCHAR U_62A6\nENCODING 25254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nF100\n2FE0\n2920\n3920\n6AA0\nAC60\n2820\n28A0\nE840\nENDCHAR\nSTARTCHAR U_62A7\nENCODING 25255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\nFA20\n2220\n2A20\n33E0\n6000\nA140\n2140\n2220\nE420\nENDCHAR\nSTARTCHAR U_62A8\nENCODING 25256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nF900\n2520\n2B40\n3100\n6FE0\nA100\n2100\n2100\nE100\nENDCHAR\nSTARTCHAR U_62A9\nENCODING 25257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFC0\n2540\n2FC0\n3540\n6540\nAFE0\n2440\n2440\nE4C0\nENDCHAR\nSTARTCHAR U_62AA\nENCODING 25258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFA00\n2280\n2FE0\n34A0\n6CA0\nA4A0\n24E0\n2080\nE080\nENDCHAR\nSTARTCHAR U_62AB\nENCODING 25259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFFE0\n24A0\n2C80\n37E0\n6540\nA540\n2480\n2940\nF620\nENDCHAR\nSTARTCHAR U_62AC\nENCODING 25260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFA40\n27A0\n2820\n3000\n67E0\nA420\n2420\n27E0\nE420\nENDCHAR\nSTARTCHAR U_62AD\nENCODING 25261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2420\n2800\n3380\n6280\nA280\n24A0\n28A0\nF0E0\nENDCHAR\nSTARTCHAR U_62AE\nENCODING 25262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFA80\n2440\n2920\n3200\n6480\nA120\n2640\n2180\nEE00\nENDCHAR\nSTARTCHAR U_62AF\nENCODING 25263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nFC40\n2440\n2FC0\n3440\n6440\nA7C0\n2440\n2440\nFFE0\nENDCHAR\nSTARTCHAR U_62B0\nENCODING 25264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFC0\n2540\n2D40\n3540\n6FE0\nA100\n2280\n2440\nE820\nENDCHAR\nSTARTCHAR U_62B1\nENCODING 25265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nF820\n27A0\n24A0\n34A0\n67A0\nA4C0\n2420\n2420\nE3E0\nENDCHAR\nSTARTCHAR U_62B2\nENCODING 25266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nF040\n2740\n2540\n3540\n6740\nA040\n2040\n2140\nE080\nENDCHAR\nSTARTCHAR U_62B3\nENCODING 25267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFC20\n27E0\n2C00\n3520\n6540\nA580\n2520\n2920\nF0E0\nENDCHAR\nSTARTCHAR U_62B4\nENCODING 25268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2540\nF540\n2FE0\n2540\n3540\n65C0\nA540\n2400\n2400\nE7E0\nENDCHAR\nSTARTCHAR U_62B5\nENCODING 25269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2780\nFC80\n2480\n2FE0\n3480\n6480\nA480\n24A0\n2760\nE4A0\nENDCHAR\nSTARTCHAR U_62B6\nENCODING 25270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\nF7C0\n2900\n2100\n37E0\n6100\nA100\n2280\n2440\nE820\nENDCHAR\nSTARTCHAR U_62B7\nENCODING 25271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nF880\n2100\n2B80\n3540\nE920\n2100\n2100\n2000\n6FE0\nENDCHAR\nSTARTCHAR U_62B8\nENCODING 25272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\nF900\n2080\n27E0\n3040\n6080\nA100\n2200\n2500\nE8E0\nENDCHAR\nSTARTCHAR U_62B9\nENCODING 25273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2100\n2100\n37C0\n6100\nA380\n2540\n2920\nE100\nENDCHAR\nSTARTCHAR U_62BA\nENCODING 25274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF7C0\n2100\n2FE0\n3100\n6380\nA540\n2920\n2100\nE100\nENDCHAR\nSTARTCHAR U_62BB\nENCODING 25275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2520\n2FE0\n3520\n67E0\nA520\n2100\n2100\nE100\nENDCHAR\nSTARTCHAR U_62BC\nENCODING 25276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n24A0\nFCA0\n27E0\n2CA0\n34A0\n67E0\nA4A0\n2080\n2080\nE080\nENDCHAR\nSTARTCHAR U_62BD\nENCODING 25277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nF880\n27E0\n2CA0\n34A0\n67E0\nA4A0\n24A0\n27E0\nE420\nENDCHAR\nSTARTCHAR U_62BE\nENCODING 25278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF7C0\n2100\n2100\n37E0\n6100\nA200\n2440\n2FA0\nE420\nENDCHAR\nSTARTCHAR U_62BF\nENCODING 25279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFC20\n27E0\n2C80\n3480\n67E0\nA480\n24A0\n2560\nE620\nENDCHAR\nSTARTCHAR U_62C0\nENCODING 25280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nF440\n2440\n27C0\n3280\n6280\nA280\n2480\n24A0\nE860\nENDCHAR\nSTARTCHAR U_62C1\nENCODING 25281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n2800\nFEE0\n2AA0\n2AA0\n3AA0\n6AA0\nAAA0\n2AA0\n2AE0\nF600\nENDCHAR\nSTARTCHAR U_62C2\nENCODING 25282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFFE0\n22A0\n2FE0\n3A80\n6FE0\nA2A0\n22A0\n24C0\nE880\nENDCHAR\nSTARTCHAR U_62C3\nENCODING 25283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nF7E0\n2A00\n2200\n33C0\n6200\nA200\n23C0\n2200\nE200\nENDCHAR\nSTARTCHAR U_62C4\nENCODING 25284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2100\n2900\n3100\n67C0\nA100\n2100\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_62C5\nENCODING 25285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nFC40\n2440\n2FC0\n3440\n6440\nA7C0\n2440\n2000\nEFE0\nENDCHAR\nSTARTCHAR U_62C6\nENCODING 25286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF400\n27E0\n2480\n3580\n64C0\nA4A0\n2480\nA880\n4880\nENDCHAR\nSTARTCHAR U_62C7\nENCODING 25287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFD40\n2540\n2FE0\n3440\n6540\nA540\n27E0\n2040\nE180\nENDCHAR\nSTARTCHAR U_62C8\nENCODING 25288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF9E0\n2100\n2900\n3100\n67E0\nA420\n2420\n27E0\nE420\nENDCHAR\nSTARTCHAR U_62C9\nENCODING 25289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2000\n2040\n3440\n6240\nA280\n2080\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_62CA\nENCODING 25290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\nFC40\n25E0\n2C40\n3640\nE540\n2440\n2440\nA540\n4480\nENDCHAR\nSTARTCHAR U_62CB\nENCODING 25291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n4880\nE9E0\n5EA0\n4AA0\n6AA0\nCAA0\n4AA0\n5360\n5200\nE1E0\nENDCHAR\nSTARTCHAR U_62CC\nENCODING 25292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2920\nF540\n2100\n27C0\n3100\n6100\nAFE0\n2100\n2100\nE100\nENDCHAR\nSTARTCHAR U_62CD\nENCODING 25293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2100\nFBE0\n2220\n2A20\n33E0\n6220\nA220\n2220\n23E0\nE220\nENDCHAR\nSTARTCHAR U_62CE\nENCODING 25294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF440\n2A20\n2100\n37E0\n6040\nA080\n2300\n2080\nE040\nENDCHAR\nSTARTCHAR U_62CF\nENCODING 25295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFE40\n4980\n2A60\nDF80\n0200\n3FC0\n0200\nFFE0\n0200\n0E00\nENDCHAR\nSTARTCHAR U_62D0\nENCODING 25296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFC20\n27E0\n2900\n3100\n67E0\nA120\n2220\n2520\nE8C0\nENDCHAR\nSTARTCHAR U_62D1\nENCODING 25297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\nFFE0\n2240\n2A40\n33C0\n6240\nA240\n2240\n23C0\nE240\nENDCHAR\nSTARTCHAR U_62D2\nENCODING 25298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nFC00\n27C0\n2C40\n3440\n67C0\nA440\n2400\n2400\nE7E0\nENDCHAR\nSTARTCHAR U_62D3\nENCODING 25299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF900\n2100\n2A00\n37E0\n6A20\nA220\n2220\n23E0\nE220\nENDCHAR\nSTARTCHAR U_62D4\nENCODING 25300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2240\nFFE0\n2200\n2BC0\n3240\n6540\nA480\n2880\n2940\nE620\nENDCHAR\nSTARTCHAR U_62D5\nENCODING 25301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF440\n2800\n2200\n3240\n6280\nA300\n2220\n2220\nE1E0\nENDCHAR\nSTARTCHAR U_62D6\nENCODING 25302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nF800\n2100\n25C0\n3740\n6D40\nA5C0\n2520\n2420\nE3E0\nENDCHAR\nSTARTCHAR U_62D7\nENCODING 25303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2480\nFC80\n2BE0\n2CA0\n36A0\n65A0\nAEA0\n28A0\n2120\nE260\nENDCHAR\nSTARTCHAR U_62D8\nENCODING 25304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2420\n2FA0\n34A0\n64A0\nA7A0\n24A0\n2120\nE0C0\nENDCHAR\nSTARTCHAR U_62D9\nENCODING 25305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\nFD40\n2540\n2FC0\n3100\n6920\nA920\n2920\n2FE0\nE820\nENDCHAR\nSTARTCHAR U_62DA\nENCODING 25306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2240\nFFA0\n2000\n2A40\n3240\n6FE0\nA240\n2240\n2440\nE840\nENDCHAR\nSTARTCHAR U_62DB\nENCODING 25307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\nF920\n2120\n2A60\n3400\n63E0\nA220\n2220\n23E0\nE220\nENDCHAR\nSTARTCHAR U_62DC\nENCODING 25308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C00\n73E0\n1080\n7BE0\n1080\n13E0\n7C80\n13E0\n1080\n2080\n4080\nENDCHAR\nSTARTCHAR U_62DD\nENCODING 25309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nF7C0\n2100\n27C0\n3100\n6FE0\nA100\n2100\n2100\nE100\nENDCHAR\nSTARTCHAR U_62DE\nENCODING 25310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n20C0\nF700\n2400\n27E0\n3480\n6480\nA480\n2480\n2FE0\nE000\nENDCHAR\nSTARTCHAR U_62DF\nENCODING 25311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2140\nFD40\n2440\n2C40\n3440\n6540\nA640\n24C0\n2120\nE620\nENDCHAR\nSTARTCHAR U_62E0\nENCODING 25312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\n51C0\nFD40\n5540\n5540\n5540\nED40\n4540\n4A60\n4900\nD0E0\nENDCHAR\nSTARTCHAR U_62E1\nENCODING 25313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nF7E0\n2480\n2480\n3480\n6500\nA540\n2A20\n2BE0\nF020\nENDCHAR\nSTARTCHAR U_62E2\nENCODING 25314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2240\nF200\n2FE0\n2280\n32A0\n62C0\nA480\n25A0\n2AA0\nF0E0\nENDCHAR\nSTARTCHAR U_62E3\nENCODING 25315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFA00\n2780\n2C80\n37E0\n6080\nA2C0\n24A0\n2AA0\nE100\nENDCHAR\nSTARTCHAR U_62E4\nENCODING 25316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nF3C0\n2200\n2FE0\n3200\n6280\nA240\n2240\n2200\nE200\nENDCHAR\nSTARTCHAR U_62E5\nENCODING 25317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nF920\n2FE0\n2920\n3920\n6FE0\nA920\n2920\n2920\nF060\nENDCHAR\nSTARTCHAR U_62E6\nENCODING 25318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2240\nFA80\n27E0\n2000\n3000\n63C0\nA000\n2000\n2000\nEFE0\nENDCHAR\nSTARTCHAR U_62E7\nENCODING 25319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nF7E0\n2420\n2000\n37E0\n6080\nA080\n2080\n2280\nE100\nENDCHAR\nSTARTCHAR U_62E8\nENCODING 25320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\nFD20\n27E0\n2900\n33E0\n6240\nA540\n2880\n3140\nE620\nENDCHAR\nSTARTCHAR U_62E9\nENCODING 25321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2240\nF980\n2240\n2C20\n3100\n67C0\nA100\n2FE0\n2100\nE100\nENDCHAR\nSTARTCHAR U_62EA\nENCODING 25322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nF280\n2FE0\n2AA0\n3AA0\n6AE0\nAC20\n2820\n2FE0\nE820\nENDCHAR\nSTARTCHAR U_62EB\nENCODING 25323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n2C40\n37C0\n6520\nA540\n2480\n2540\nE620\nENDCHAR\nSTARTCHAR U_62EC\nENCODING 25324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF900\n2100\n2FE0\n3100\n67E0\nA420\n2420\n27E0\nE420\nENDCHAR\nSTARTCHAR U_62ED\nENCODING 25325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\nFFE0\n2080\n2080\n3780\n6280\nA2A0\n23A0\n2E60\nE020\nENDCHAR\nSTARTCHAR U_62EE\nENCODING 25326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2100\n2FC0\n3000\n67C0\nA440\n2440\n27C0\nE440\nENDCHAR\nSTARTCHAR U_62EF\nENCODING 25327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2040\nF980\n2120\n2F40\n3580\n6540\nA920\n2720\n2000\nEFE0\nENDCHAR\nSTARTCHAR U_62F0\nENCODING 25328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n25C0\nFC80\n2480\n2C80\n37E0\n6480\nA480\n2480\n2480\nE7E0\nENDCHAR\nSTARTCHAR U_62F1\nENCODING 25329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFA80\n27C0\n2A80\n3280\n6FE0\nA000\n2240\n2420\nE820\nENDCHAR\nSTARTCHAR U_62F2\nENCODING 25330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\nFFE0\n1100\n2E80\n4440\nBFA0\n0400\nFFE0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_62F3\nENCODING 25331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\n7FC0\n0800\nFFE0\n2080\n5F40\n8420\n3F80\n0400\nFFE0\n0C00\nENDCHAR\nSTARTCHAR U_62F4\nENCODING 25332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF440\n2820\n27C0\n3100\n6100\nA7C0\n2100\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_62F5\nENCODING 25333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF200\n27E0\n2C40\n3480\nE7E0\n2480\n2480\n2480\n6580\nENDCHAR\nSTARTCHAR U_62F6\nENCODING 25334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n2540\nFAA0\n2000\n2A00\n33E0\n6440\nAA40\n2180\n2300\nEC00\nENDCHAR\nSTARTCHAR U_62F7\nENCODING 25335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n27A0\nF940\n27E0\n2900\n33E0\n6500\nABE0\n2020\n2120\nE0C0\nENDCHAR\nSTARTCHAR U_62F8\nENCODING 25336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\nFE40\n2280\n2B00\n31E0\n6220\nA540\n2080\n2300\nEC00\nENDCHAR\nSTARTCHAR U_62F9\nENCODING 25337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nFA40\n2240\n2480\n3480\n6FE0\nAAA0\n2AA0\n2AA0\nE540\nENDCHAR\nSTARTCHAR U_62FA\nENCODING 25338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n27E0\n2D20\n3520\n6560\nA380\n2540\n2920\nE120\nENDCHAR\nSTARTCHAR U_62FB\nENCODING 25339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFFE0\n2500\n3520\nEB40\n2900\n3280\n2280\nA440\n4820\nENDCHAR\nSTARTCHAR U_62FC\nENCODING 25340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2420\n2240\nFFE0\n2240\n2240\n3FE0\n6240\nA240\n2440\n2440\n6840\nENDCHAR\nSTARTCHAR U_62FD\nENCODING 25341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFD20\n27E0\n2D20\n37E0\n6140\nA180\n2120\n22A0\nEC60\nENDCHAR\nSTARTCHAR U_62FE\nENCODING 25342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFA80\n2440\n2BA0\n3000\n67C0\nA440\n2440\n27C0\nE440\nENDCHAR\nSTARTCHAR U_62FF\nENCODING 25343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n1100\nEEE0\n1100\n3F80\n0400\n3F80\n0400\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_6300\nENCODING 25344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2F00\nF860\n2B80\n3AA0\n6AA0\nAA40\n2A40\n2A40\nAB20\n5220\nENDCHAR\nSTARTCHAR U_6301\nENCODING 25345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF900\n2100\n2FE0\n3080\n6FE0\nA480\n2280\n2080\nE180\nENDCHAR\nSTARTCHAR U_6302\nENCODING 25346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF900\n2100\n2FE0\n3100\n6100\nA7C0\n2100\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_6303\nENCODING 25347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nFA00\n2440\n2FA0\n3120\n6100\nA7C0\n2100\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_6304\nENCODING 25348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2920\nF540\n2380\n2FE0\n3280\n6280\nA280\n2480\n24A0\nE860\nENDCHAR\nSTARTCHAR U_6305\nENCODING 25349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2280\nFAE0\n2420\n2560\n3900\n6FE0\nA380\n2540\n2920\nE100\nENDCHAR\nSTARTCHAR U_6306\nENCODING 25350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nF440\n2440\n2960\n3100\n6FE0\nA380\n2540\n2920\nE100\nENDCHAR\nSTARTCHAR U_6307\nENCODING 25351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2260\nFB80\n2220\n2BE0\n3000\n63E0\nA220\n23E0\n2220\nE3E0\nENDCHAR\nSTARTCHAR U_6308\nENCODING 25352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF8A0\n20A0\nF920\n2240\n7F00\n0400\n7FC0\n0400\nFFE0\n0C00\nENDCHAR\nSTARTCHAR U_6309\nENCODING 25353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2520\n2900\n37E0\n6240\nA640\n2180\n2280\nEC60\nENDCHAR\nSTARTCHAR U_630A\nENCODING 25354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21C0\nF900\n27E0\n2800\n37E0\n6100\nA180\n2140\n2140\nE100\nENDCHAR\nSTARTCHAR U_630B\nENCODING 25355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2480\nFC80\n27E0\n2C20\n3420\n67E0\nA480\n2480\n2480\nE7E0\nENDCHAR\nSTARTCHAR U_630C\nENCODING 25356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nFE40\n2180\n2A40\n3420\n6FC0\nA440\n2440\n27C0\nE440\nENDCHAR\nSTARTCHAR U_630D\nENCODING 25357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nF7E0\n2240\n24A0\n3A80\n6280\nA100\n2280\n2440\nE820\nENDCHAR\nSTARTCHAR U_630E\nENCODING 25358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFA80\n2440\n2BA0\n3000\n6FC0\nA200\n27C0\n2040\nE180\nENDCHAR\nSTARTCHAR U_630F\nENCODING 25359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nFBA0\n2820\n2BA0\n3AA0\n6AA0\nABA0\n2AA0\n2820\nE8E0\nENDCHAR\nSTARTCHAR U_6310\nENCODING 25360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4A20\nF3E0\n2A20\nDF80\n0400\n7FC0\n0400\nFFE0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_6311\nENCODING 25361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFAA0\n26C0\n2A80\n36C0\n6AA0\nA280\n22A0\n24A0\nE8E0\nENDCHAR\nSTARTCHAR U_6312\nENCODING 25362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E20\n2420\nF4A0\n2EA0\n2AA0\n32A0\n6AA0\nA4A0\n2420\n28A0\nF040\nENDCHAR\nSTARTCHAR U_6313\nENCODING 25363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n24A0\n2B00\n3100\n61E0\nAF00\n2120\n2120\nE0E0\nENDCHAR\nSTARTCHAR U_6314\nENCODING 25364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2100\n2AA0\n36C0\n6A80\nA280\n22C0\n2320\nE620\nENDCHAR\nSTARTCHAR U_6315\nENCODING 25365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2240\nFA40\n23C0\n2A40\n3240\n63C0\nA240\n2260\n2FC0\nE040\nENDCHAR\nSTARTCHAR U_6316\nENCODING 25366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF420\n2240\n2420\n37E0\n6080\nA100\n2220\n2420\nE3E0\nENDCHAR\nSTARTCHAR U_6317\nENCODING 25367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n2FE0\n2120\n3FE0\n6900\nAFE0\n22A0\n2440\nE820\nENDCHAR\nSTARTCHAR U_6318\nENCODING 25368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\nF520\n2940\n2180\n3100\n6200\nAFE0\n2220\n24A0\nE840\nENDCHAR\nSTARTCHAR U_6319\nENCODING 25369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2500\nFFE0\n1100\n2EC0\nC420\n3F80\n0400\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_631A\nENCODING 25370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n2940\nF740\n2140\n7FA0\n0400\n7FC0\n0400\nFFE0\n0C00\nENDCHAR\nSTARTCHAR U_631B\nENCODING 25371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2940\n4920\nBFA0\n0400\n7FC0\n0400\nFFE0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_631C\nENCODING 25372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nF280\n2280\n2AA0\n36C0\n6280\nA280\n2280\n2FE0\nE000\nENDCHAR\nSTARTCHAR U_631D\nENCODING 25373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2840\nF7E0\n2040\n2240\n3D40\n6440\nA540\n2480\n2400\nEBE0\nENDCHAR\nSTARTCHAR U_631E\nENCODING 25374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2880\nF480\n23E0\n2C80\n3480\n6480\nA540\n2620\n2400\nEBE0\nENDCHAR\nSTARTCHAR U_631F\nENCODING 25375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF920\n2540\n2B80\n3100\n6FE0\nA100\n2280\n2440\nE820\nENDCHAR\nSTARTCHAR U_6320\nENCODING 25376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27E0\nFA80\n2120\n36E0\n6000\nAFE0\n2280\n22A0\n24A0\nE8E0\nENDCHAR\nSTARTCHAR U_6321\nENCODING 25377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2520\nFB40\n2100\n2FE0\n3020\n6020\nA7E0\n2020\n2020\nEFE0\nENDCHAR\nSTARTCHAR U_6322\nENCODING 25378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF900\n27E0\n2A40\n3420\n6200\nA240\n2240\n2440\nE840\nENDCHAR\nSTARTCHAR U_6323\nENCODING 25379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nFC80\n27C0\n2940\n3FE0\n6140\nA7C0\n2100\n2500\nE200\nENDCHAR\nSTARTCHAR U_6324\nENCODING 25380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFA40\n2180\n2E60\n3000\n6240\nA240\n2240\n2440\nE840\nENDCHAR\nSTARTCHAR U_6325\nENCODING 25381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFA00\n27E0\n2A00\n3500\n67C0\nA100\n2FE0\n2100\nE100\nENDCHAR\nSTARTCHAR U_6326\nENCODING 25382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\nF7C0\n2040\n27C0\n3080\n6FE0\nA480\n2280\n2080\nE180\nENDCHAR\nSTARTCHAR U_6327\nENCODING 25383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nF220\n2B20\n26A0\n3260\n66A0\nAB20\n2220\n2AA0\nE440\nENDCHAR\nSTARTCHAR U_6328\nENCODING 25384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2440\nFFA0\n2400\n27C0\n3900\nE100\n2FE0\n2280\n2440\nE820\nENDCHAR\nSTARTCHAR U_6329\nENCODING 25385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\nFC20\n27E0\n2C20\n3420\n67E0\nA280\n2280\n24A0\nE860\nENDCHAR\nSTARTCHAR U_632A\nENCODING 25386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n4AA0\nEAA0\n5EA0\n4AC0\n6AA0\n5EA0\nCAA0\n4AE0\n4A80\nD680\nENDCHAR\nSTARTCHAR U_632B\nENCODING 25387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\nFD40\n2540\n2BA0\n3120\n6100\nA7C0\n2100\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_632C\nENCODING 25388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n27E0\n2C20\n37C0\n6080\nAFE0\n2100\n2100\nE300\nENDCHAR\nSTARTCHAR U_632D\nENCODING 25389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFFE0\n2520\n2FE0\n3520\n67E0\nA520\n2200\n2580\nE860\nENDCHAR\nSTARTCHAR U_632E\nENCODING 25390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nF7C0\n2940\n27C0\n3500\n67E0\nA320\n25A0\n2940\nE100\nENDCHAR\nSTARTCHAR U_632F\nENCODING 25391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nFDC0\n2400\n2FE0\n3500\n65A0\nA540\n2540\n29A0\nE920\nENDCHAR\nSTARTCHAR U_6330\nENCODING 25392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFC40\n27C0\n2000\n37C0\n6100\nA7C0\n2100\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_6331\nENCODING 25393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2480\nF2C0\n2AA0\n26A0\n3280\n64A0\nA820\n2840\n2880\nEB00\nENDCHAR\nSTARTCHAR U_6332\nENCODING 25394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nA540\n5920\nE1C0\n5F00\n4200\n7FC0\n0200\nFFE0\n0200\n0E00\nENDCHAR\nSTARTCHAR U_6333\nENCODING 25395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n22A0\nFAA0\n2540\n2AA0\n32A0\n6000\nA7E0\n2100\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_6334\nENCODING 25396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\nFC00\n27C0\n2D40\n3540\n6FE0\nA540\n2540\n27E0\nE040\nENDCHAR\nSTARTCHAR U_6335\nENCODING 25397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nF7C0\n2100\n2FE0\n3240\n6FE0\nA240\n2240\n2440\nE840\nENDCHAR\nSTARTCHAR U_6336\nENCODING 25398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2400\n2FE0\n3420\n67A0\nA6A0\n2BA0\n2820\nF0C0\nENDCHAR\nSTARTCHAR U_6337\nENCODING 25399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2FE0\nF4A0\n24A0\n2FC0\n34E0\n64A0\nAFA0\n24C0\n2880\nF080\nENDCHAR\nSTARTCHAR U_6338\nENCODING 25400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n2FC0\n3440\n67C0\nA280\n22A0\n24A0\nE860\nENDCHAR\nSTARTCHAR U_6339\nENCODING 25401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF7C0\n2000\n27C0\n3540\n6540\nA7C0\n2420\n2420\nE3E0\nENDCHAR\nSTARTCHAR U_633A\nENCODING 25402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n2FC0\nFA40\n2440\n2FE0\n3240\n6240\nAA40\n25E0\n2A00\nF1E0\nENDCHAR\nSTARTCHAR U_633B\nENCODING 25403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E20\n23C0\nFA40\n2440\n2E60\n3540\nE540\n2D40\n25E0\nAA00\n51E0\nENDCHAR\nSTARTCHAR U_633C\nENCODING 25404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n27A0\nFD20\n2AC0\n2100\n3FE0\n6240\nA480\n2380\n2240\nEC20\nENDCHAR\nSTARTCHAR U_633D\nENCODING 25405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nFC80\n27E0\n2D20\n3520\nE7E0\n2280\n22A0\nA4A0\n48E0\nENDCHAR\nSTARTCHAR U_633E\nENCODING 25406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n2540\n2540\n3BA0\n6100\nA280\n2440\n2820\nF020\nENDCHAR\nSTARTCHAR U_633F\nENCODING 25407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF100\n2FE0\n2100\n3FE0\n6920\nAFE0\n2920\n2FE0\nE100\nENDCHAR\nSTARTCHAR U_6340\nENCODING 25408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2680\nF900\n26E0\n2900\n3FE0\n6100\nA7C0\n2100\n2FE0\nE100\nENDCHAR\nSTARTCHAR U_6341\nENCODING 25409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n2500\nFFC0\n2100\n2FE0\n3000\n67C0\nA440\n2440\n27C0\nE440\nENDCHAR\nSTARTCHAR U_6342\nENCODING 25410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nF7C0\n2240\n2240\n3FE0\n6000\nA7C0\n2440\n27C0\nE440\nENDCHAR\nSTARTCHAR U_6343\nENCODING 25411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2240\nFFE0\n2240\n2FC0\n3200\n63E0\nA620\n2A20\n23E0\nE220\nENDCHAR\nSTARTCHAR U_6344\nENCODING 25412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\nFFE0\n2100\n2920\n3540\n6380\nA540\n2920\n2520\nE200\nENDCHAR\nSTARTCHAR U_6345\nENCODING 25413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nF100\n2FE0\n2920\n3FE0\n6920\nAFE0\n2920\n2920\nE8E0\nENDCHAR\nSTARTCHAR U_6346\nENCODING 25414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nF920\n2FE0\n2920\n3BA0\n6D60\nA920\n2920\n2FE0\nE820\nENDCHAR\nSTARTCHAR U_6347\nENCODING 25415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF900\n2100\n2FE0\n3280\n6AC0\nAAA0\n22A0\n2480\nE980\nENDCHAR\nSTARTCHAR U_6348\nENCODING 25416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF440\n2FE0\n2100\n3100\n6FE0\nA100\n2540\n2920\nF320\nENDCHAR\nSTARTCHAR U_6349\nENCODING 25417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFC40\n2440\n2FC0\n3100\n6500\nA5E0\n2500\n2B00\nF1E0\nENDCHAR\nSTARTCHAR U_634A\nENCODING 25418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n27A0\nFD20\n2280\n2FE0\n3040\n6080\nAFE0\n2080\n2280\nE100\nENDCHAR\nSTARTCHAR U_634B\nENCODING 25419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2720\nF920\n2440\n2A80\n3FE0\n6080\nA480\n2280\n2080\nE380\nENDCHAR\nSTARTCHAR U_634C\nENCODING 25420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F20\n2920\nF920\n2F20\n24A0\n34A0\n6FA0\nA5A0\n2520\n2920\nF660\nENDCHAR\nSTARTCHAR U_634D\nENCODING 25421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n2FC0\n3000\n67C0\nA100\n2FE0\n2100\nE100\nENDCHAR\nSTARTCHAR U_634E\nENCODING 25422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2520\nFB40\n27E0\n2C20\n37E0\n6420\nA7E0\n2420\n2420\nE4E0\nENDCHAR\nSTARTCHAR U_634F\nENCODING 25423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n2FC0\n3100\n6100\nA7C0\n2100\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_6350\nENCODING 25424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFBC0\n2000\n2FE0\n3420\nE7E0\n2420\n27E0\n2420\n6460\nENDCHAR\nSTARTCHAR U_6351\nENCODING 25425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n2520\nFDE0\n2520\n2DE0\n3400\n67C0\nA080\n2FE0\n2240\nEC20\nENDCHAR\nSTARTCHAR U_6352\nENCODING 25426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n27C0\n2D40\n37C0\n6100\nA380\n2540\n2920\nE100\nENDCHAR\nSTARTCHAR U_6353\nENCODING 25427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nFAA0\n2AA0\n2FC0\n32A0\n62A0\nA6A0\n2AC0\n3280\nE680\nENDCHAR\nSTARTCHAR U_6354\nENCODING 25428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2480\nFFE0\n2520\n2FE0\n3520\n67E0\nA520\n2520\n2920\nF060\nENDCHAR\nSTARTCHAR U_6355\nENCODING 25429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\nFFE0\n2100\n2FE0\n3920\n6FE0\nA920\n2FE0\n2920\nE960\nENDCHAR\nSTARTCHAR U_6356\nENCODING 25430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2420\n2BC0\n3000\n6FE0\nA280\n22A0\n24A0\nE860\nENDCHAR\nSTARTCHAR U_6357\nENCODING 25431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n25E0\nFD00\n2500\n2FE0\n3100\n6520\nA940\n2080\n2300\nEC00\nENDCHAR\nSTARTCHAR U_6358\nENCODING 25432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2240\nFFA0\n2240\n2D20\n33C0\n6640\nAA80\n2100\n2280\nEC60\nENDCHAR\nSTARTCHAR U_6359\nENCODING 25433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF900\n27C0\n2D40\n37C0\n6540\nA7C0\n2100\n2FE0\nE100\nENDCHAR\nSTARTCHAR U_635A\nENCODING 25434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nFFE0\n2920\n2FE0\n3100\n6100\nA7C0\n2100\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_635B\nENCODING 25435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23C0\nF240\n2240\n23C0\n3000\n67E0\nA420\n2420\n2420\nE7E0\nENDCHAR\nSTARTCHAR U_635C\nENCODING 25436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFD20\n27E0\n2D20\n37E0\n6100\nA7E0\n2240\n2180\n6660\nENDCHAR\nSTARTCHAR U_635D\nENCODING 25437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2240\nFA80\n27C0\n2440\n37C0\n6280\nA280\n22A0\n24A0\nE8E0\nENDCHAR\nSTARTCHAR U_635E\nENCODING 25438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nFA40\n27E0\n2C20\n3100\n6FE0\nA220\n2220\n2520\nE8C0\nENDCHAR\nSTARTCHAR U_635F\nENCODING 25439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFBC0\n2000\n2FE0\n3420\n6520\nA520\n2520\n2280\nEC60\nENDCHAR\nSTARTCHAR U_6360\nENCODING 25440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\nF400\n27E0\n2480\n3480\n6480\nAFE0\n2280\n2460\nE820\nENDCHAR\nSTARTCHAR U_6361\nENCODING 25441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nFC40\n2420\n2BC0\n3000\n6A40\nA540\n2480\n2080\nEFE0\nENDCHAR\nSTARTCHAR U_6362\nENCODING 25442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nFC80\n27C0\n2D40\n3540\n6FE0\nA100\n2280\n2440\nE820\nENDCHAR\nSTARTCHAR U_6363\nENCODING 25443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nFC40\n2540\n2C80\n37E0\n6220\nAAA0\n2AA0\n2FA0\nE0C0\nENDCHAR\nSTARTCHAR U_6364\nENCODING 25444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2480\n2F00\n35C0\n6700\nA5E0\n2700\n2920\nF0E0\nENDCHAR\nSTARTCHAR U_6365\nENCODING 25445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n2400\n26E0\n3AA0\n6AA0\nA6E0\n2280\n24A0\nF860\nENDCHAR\nSTARTCHAR U_6366\nENCODING 25446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nF500\n2880\n2760\n3200\n6F80\nA200\n2A40\n2680\nEFC0\nENDCHAR\nSTARTCHAR U_6367\nENCODING 25447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n27C0\n2900\n3FE0\n6540\nABA0\n2100\n2FE0\nE100\nENDCHAR\nSTARTCHAR U_6368\nENCODING 25448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nFC40\n27E0\n2900\n3FE0\n6100\nA7C0\n2440\n27C0\nE440\nENDCHAR\nSTARTCHAR U_6369\nENCODING 25449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n2FE0\n2940\n3920\n6FE0\nA900\n2A80\n2440\nE820\nENDCHAR\nSTARTCHAR U_636A\nENCODING 25450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nFD00\n27E0\n2D00\n36A0\n67E0\nA440\n27C0\n2440\nE7C0\nENDCHAR\nSTARTCHAR U_636B\nENCODING 25451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\n2AA0\n2EE0\n3820\n6820\nA820\n2820\n28A0\nE840\nENDCHAR\nSTARTCHAR U_636C\nENCODING 25452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nFA40\n2BE0\n3E40\n6B40\nAAC0\n2A40\nB240\n52C0\nENDCHAR\nSTARTCHAR U_636D\nENCODING 25453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFD20\n27E0\n2D20\n37E0\n6280\nA480\n2FE0\n2080\nE080\nENDCHAR\nSTARTCHAR U_636E\nENCODING 25454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFC20\n27E0\n2C80\n37E0\n6480\nA7E0\n2E20\nAA20\n53E0\nENDCHAR\nSTARTCHAR U_636F\nENCODING 25455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n2F20\nF4A0\n2AA0\n2FA0\n34A0\nEFA0\n24A0\n2420\n2720\n7860\nENDCHAR\nSTARTCHAR U_6370\nENCODING 25456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nFFC0\n2540\n2FC0\n3100\n6FE0\nA100\n2380\n2540\nE920\nENDCHAR\nSTARTCHAR U_6371\nENCODING 25457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nFC80\n27E0\n2C80\n37E0\nE400\n2480\n2BE0\nA880\n57E0\nENDCHAR\nSTARTCHAR U_6372\nENCODING 25458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nFFE0\n2200\n2FE0\n3440\n6FA0\nA480\n25A0\n2420\nE3E0\nENDCHAR\nSTARTCHAR U_6373\nENCODING 25459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\nFC00\n27E0\n2C80\n3480\n6FE0\nA100\n2920\n2920\nEFE0\nENDCHAR\nSTARTCHAR U_6374\nENCODING 25460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2280\nF480\n2A40\n24A0\n3780\n6000\nA240\n25A0\n2CA0\nF380\nENDCHAR\nSTARTCHAR U_6375\nENCODING 25461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFFE0\n2AA0\n2FE0\n3AA0\n6AA0\nAFE0\n2280\n2440\nF820\nENDCHAR\nSTARTCHAR U_6376\nENCODING 25462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\nF100\n2FE0\n2540\n3540\n6FE0\nA540\n2FE0\n2100\nE7C0\nENDCHAR\nSTARTCHAR U_6377\nENCODING 25463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n2FC0\n2140\n3FE0\n6140\nAFE0\n2900\n2D00\nF3E0\nENDCHAR\nSTARTCHAR U_6378\nENCODING 25464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF940\n27E0\n2940\n37C0\n6520\nA3C0\n2540\n2920\nF720\nENDCHAR\nSTARTCHAR U_6379\nENCODING 25465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2540\n2BA0\n3100\n6240\nAFE0\n2240\n2240\nE440\nENDCHAR\nSTARTCHAR U_637A\nENCODING 25466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFA80\n2440\n2BA0\n3000\n6FC0\nA100\n2540\n2920\nF320\nENDCHAR\nSTARTCHAR U_637B\nENCODING 25467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nFC40\n2120\n2FC0\n3080\n6100\nA240\n2AA0\n2A60\nF1C0\nENDCHAR\nSTARTCHAR U_637C\nENCODING 25468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n2380\n2540\n3920\n6FE0\nA240\n2480\n2380\nDC60\nENDCHAR\nSTARTCHAR U_637D\nENCODING 25469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2240\n2A40\n35A0\n6100\nAFE0\n2100\n2100\nE100\nENDCHAR\nSTARTCHAR U_637E\nENCODING 25470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFC20\n23C0\n2A40\n33C0\n6200\nA3E0\n2220\n23E0\nE220\nENDCHAR\nSTARTCHAR U_637F\nENCODING 25471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nF280\n27E0\n2280\n3780\n6200\nAFE0\n2480\n2300\nECC0\nENDCHAR\nSTARTCHAR U_6380\nENCODING 25472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2C80\nF8E0\n2920\n2F40\n3A40\n6A40\nAA40\n2AA0\n2AA0\nF320\nENDCHAR\nSTARTCHAR U_6381\nENCODING 25473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nFFC0\n2400\n27C0\n3400\n6FE0\nA520\n24C0\n2540\nE620\nENDCHAR\nSTARTCHAR U_6382\nENCODING 25474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2480\n2CE0\n3480\n6480\nA7E0\n2A20\n2A20\nF3E0\nENDCHAR\nSTARTCHAR U_6383\nENCODING 25475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\nF7C0\n2040\n2FE0\n3920\n6FC0\nA540\n2540\n25C0\nE100\nENDCHAR\nSTARTCHAR U_6384\nENCODING 25476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n2440\nFBA0\n2000\n2FE0\n3AA0\n6AA0\nAFE0\n2AA0\n2AA0\nE860\nENDCHAR\nSTARTCHAR U_6385\nENCODING 25477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n27C0\n2100\n3FE0\n6440\nA7C0\n2440\n27C0\nE440\nENDCHAR\nSTARTCHAR U_6386\nENCODING 25478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2AA0\nFFE0\n2920\n3D60\n6D60\nAFE0\n2C60\nA8A0\n4840\nENDCHAR\nSTARTCHAR U_6387\nENCODING 25479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n25A0\nF240\n25A0\n2900\n3FE0\n6AA0\nA4A0\n2240\n25A0\nE920\nENDCHAR\nSTARTCHAR U_6388\nENCODING 25480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2A20\nF540\n2800\n2FE0\n3820\n67C0\nA480\n2300\n2480\nF860\nENDCHAR\nSTARTCHAR U_6389\nENCODING 25481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\nF900\n27C0\n2C40\n37C0\n6440\nA7C0\n2100\n2FE0\nE100\nENDCHAR\nSTARTCHAR U_638A\nENCODING 25482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2440\n2A80\n37E0\n6000\nA7C0\n2440\n27C0\nE440\nENDCHAR\nSTARTCHAR U_638B\nENCODING 25483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF800\n2BE0\n2A80\n3A80\nEBE0\n2A80\n2AA0\n2B60\n72A0\nENDCHAR\nSTARTCHAR U_638C\nENCODING 25484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\nFFE0\n9120\n3F80\n0400\n7FC0\n0400\nFFE0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_638D\nENCODING 25485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n27C0\n3000\n64A0\nA7C0\n24A0\n25A0\nEE60\nENDCHAR\nSTARTCHAR U_638E\nENCODING 25486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFA80\n2440\n27E0\n3040\n6740\nA540\n2740\n2040\nE1C0\nENDCHAR\nSTARTCHAR U_638F\nENCODING 25487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nF820\n27A0\n2220\n3FE0\n6220\nAAA0\n2FA0\n2020\nE0C0\nENDCHAR\nSTARTCHAR U_6390\nENCODING 25488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\nF440\n2A80\n2CE0\n3820\n6820\nAEE0\n2820\n2FE0\nE820\nENDCHAR\nSTARTCHAR U_6391\nENCODING 25489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nF440\n27C0\n2440\n37C0\n6440\nAFE0\n2280\n2440\nE820\nENDCHAR\nSTARTCHAR U_6392\nENCODING 25490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFEE0\n2280\n2280\n3EE0\n6280\nA280\n2EE0\n2280\nE280\nENDCHAR\nSTARTCHAR U_6393\nENCODING 25491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2700\nF4E0\n24A0\n2FA0\n34A0\n6EA0\nB540\n2540\n24A0\nED20\nENDCHAR\nSTARTCHAR U_6394\nENCODING 25492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\nA240\nFA40\n8980\nFA60\nA400\nFF80\n0400\nFFE0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_6395\nENCODING 25493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2100\nFFE0\n2480\n3A60\n6380\nA680\n2100\nA280\n4C60\nENDCHAR\nSTARTCHAR U_6396\nENCODING 25494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF480\n24E0\n2D20\n36A0\n6540\nA540\n2480\n2540\nE620\nENDCHAR\nSTARTCHAR U_6397\nENCODING 25495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nF280\n2EE0\n2820\n3820\nE820\n2EE0\n2280\nA280\n4FE0\nENDCHAR\nSTARTCHAR U_6398\nENCODING 25496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nFFE0\n2880\n2AA0\n3BE0\nE880\n2AA0\n2AA0\nAAA0\n53E0\nENDCHAR\nSTARTCHAR U_6399\nENCODING 25497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2FA0\nFA40\n2500\n27C0\n3140\nEFE0\n2140\n27C0\nA100\n4700\nENDCHAR\nSTARTCHAR U_639A\nENCODING 25498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nF100\n2FE0\n2DA0\n3B60\n6B60\nADA0\n2920\n29A0\nE940\nENDCHAR\nSTARTCHAR U_639B\nENCODING 25499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\nFE80\n2480\n2FC0\n30A0\n64A0\nAF80\n2480\n2780\nF880\nENDCHAR\nSTARTCHAR U_639C\nENCODING 25500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2E60\nF820\n2EE0\n2820\n3FE0\nEAA0\n2280\n22A0\nA4A0\n4860\nENDCHAR\nSTARTCHAR U_639D\nENCODING 25501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\nFFE0\n2080\n2E80\n3AA0\nEEA0\n20C0\n26A0\nB960\n4220\nENDCHAR\nSTARTCHAR U_639E\nENCODING 25502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n2540\nF580\n2A40\n2920\n3120\n6540\nA580\n2A40\n2420\nE820\nENDCHAR\nSTARTCHAR U_639F\nENCODING 25503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n2000\n2FE0\n3100\n6500\nA5E0\n2500\n2B00\nF1E0\nENDCHAR\nSTARTCHAR U_63A0\nENCODING 25504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF000\n27C0\n2440\n3440\n67C0\nA100\n2540\n2920\nF320\nENDCHAR\nSTARTCHAR U_63A1\nENCODING 25505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2FA0\nFA20\n2540\n2100\n3FE0\n6100\nA380\n2540\n2920\nF120\nENDCHAR\nSTARTCHAR U_63A2\nENCODING 25506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nF280\n2440\n2920\n3100\n6FE0\nA100\n2580\n2940\nF120\nENDCHAR\nSTARTCHAR U_63A3\nENCODING 25507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5020\n7EA0\n90A0\nFEA0\n5460\n5F80\n0200\n7FE0\n0200\nFFE0\n0600\nENDCHAR\nSTARTCHAR U_63A4\nENCODING 25508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFAA0\n2EE0\n2AA0\n3AA0\n6EE0\nAAA0\n2AA0\n2AA0\nF760\nENDCHAR\nSTARTCHAR U_63A5\nENCODING 25509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF440\n2280\n2FE0\n3100\n6FE0\nA240\n2680\n2140\nEE20\nENDCHAR\nSTARTCHAR U_63A6\nENCODING 25510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF7C0\n2C40\n27C0\n3200\n67E0\nAAA0\n24A0\n2120\nE2C0\nENDCHAR\nSTARTCHAR U_63A7\nENCODING 25511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n2280\n2440\n3820\n67C0\nA100\n2100\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_63A8\nENCODING 25512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n2480\nF7E0\n2480\n2C80\n37E0\n6480\nA7E0\n2480\n2480\nE7E0\nENDCHAR\nSTARTCHAR U_63A9\nENCODING 25513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2540\n2FE0\n3540\n67C0\nA540\n27C0\n2120\nE0E0\nENDCHAR\nSTARTCHAR U_63AA\nENCODING 25514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27C0\nF280\n2280\n2FE0\n3000\n67C0\nA440\n27C0\n2440\nE7C0\nENDCHAR\nSTARTCHAR U_63AB\nENCODING 25515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F00\n2BE0\nFAA0\n2EA0\n2AA0\n3EA0\nEAA0\n2BA0\n3E40\nA2A0\n6320\nENDCHAR\nSTARTCHAR U_63AC\nENCODING 25516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nF960\n25A0\n2320\n3FE0\nE120\n23A0\n2560\nA920\n61C0\nENDCHAR\nSTARTCHAR U_63AD\nENCODING 25517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n2280\n2440\n3920\n6540\nA5A0\n2960\n2500\nE200\nENDCHAR\nSTARTCHAR U_63AE\nENCODING 25518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF420\n27E0\n2400\n37E0\n6420\nA7E0\n2A20\n2BE0\nF260\nENDCHAR\nSTARTCHAR U_63AF\nENCODING 25519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n22E0\nF280\n2FE0\n2000\n37E0\n6420\nA7E0\n2420\n27E0\nE460\nENDCHAR\nSTARTCHAR U_63B0\nENCODING 25520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\nEDC0\n4A40\n53E0\nF040\n5E40\nEBE0\n4A40\n4A40\n5240\nE4C0\nENDCHAR\nSTARTCHAR U_63B1\nENCODING 25521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\n3F80\n0400\nFFE0\n2480\nFFE0\n2080\nFBE0\n2080\nE380\nENDCHAR\nSTARTCHAR U_63B2\nENCODING 25522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF7C0\n2C40\n27C0\n3200\n67E0\nACA0\n2520\n27A0\nE040\nENDCHAR\nSTARTCHAR U_63B3\nENCODING 25523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2100\nF7E0\n2520\n27C0\n3520\n65E0\nA480\n27E0\n2A20\nF4C0\nENDCHAR\nSTARTCHAR U_63B4\nENCODING 25524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nFFE0\n2920\n2920\n3BA0\n6920\nA960\n2FE0\n2820\nEFE0\nENDCHAR\nSTARTCHAR U_63B5\nENCODING 25525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF280\n2440\n2BA0\n3000\n6EE0\nAAA0\n2AA0\n2EE0\nE080\nENDCHAR\nSTARTCHAR U_63B6\nENCODING 25526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF900\n2FC0\n2940\n3FE0\n6940\nAFC0\n2900\n2A80\nF460\nENDCHAR\nSTARTCHAR U_63B7\nENCODING 25527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AE0\n24A0\nFFA0\n24C0\n24A0\n3FA0\nE4A0\n24E0\n2A80\nB180\n4080\nENDCHAR\nSTARTCHAR U_63B8\nENCODING 25528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nF7C0\n2540\n27C0\n3540\n67C0\nA100\n2FE0\n2100\nE100\nENDCHAR\nSTARTCHAR U_63B9\nENCODING 25529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2080\nF100\n2FE0\n2100\n3500\n6200\nAFE0\n2AA0\n2AA0\nFFE0\nENDCHAR\nSTARTCHAR U_63BA\nENCODING 25530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2440\nFFA0\n2100\n2FE0\n3540\n6AA0\nA500\n2240\n2080\nE700\nENDCHAR\nSTARTCHAR U_63BB\nENCODING 25531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2480\nF300\n2280\n2D60\n3100\n67C0\nA540\n27C0\n2140\nEFA0\nENDCHAR\nSTARTCHAR U_63BC\nENCODING 25532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nFFE0\n2540\n27C0\n3000\nE7C0\n2540\n2540\n2280\n6C60\nENDCHAR\nSTARTCHAR U_63BD\nENCODING 25533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nF000\n27E0\n2280\n3AA0\n6AA0\nA6C0\n2280\n2280\nEFE0\nENDCHAR\nSTARTCHAR U_63BE\nENCODING 25534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nF780\n2080\n2FE0\n3540\n6A80\nA5C0\n2AA0\n24A0\nEB00\nENDCHAR\nSTARTCHAR U_63BF\nENCODING 25535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27C0\nF280\n2100\n2FE0\n3200\n67C0\nAC40\n2440\n2440\nE7C0\nENDCHAR\nSTARTCHAR U_63C0\nENCODING 25536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n2FE0\n2920\n3AA0\n6FE0\nA100\n2380\n2540\nF920\nENDCHAR\nSTARTCHAR U_63C1\nENCODING 25537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2200\nFFC0\n2840\n2FC0\n3840\n6FC0\nA840\n2FC0\n2480\n6840\nENDCHAR\nSTARTCHAR U_63C2\nENCODING 25538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nFFE0\n2280\n2FE0\n3AA0\n6CE0\nA820\n2FE0\n2820\nEFE0\nENDCHAR\nSTARTCHAR U_63C3\nENCODING 25539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nFFE0\n2000\n2E20\n3AA0\n6EA0\nAAA0\n2EA0\n2A20\nEAE0\nENDCHAR\nSTARTCHAR U_63C4\nENCODING 25540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n2440\nFFA0\n2000\n2E20\n3AA0\n6EA0\nAAA0\n2EA0\n2A20\nEA60\nENDCHAR\nSTARTCHAR U_63C5\nENCODING 25541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n2140\n3BE0\n6940\nBF40\n0200\n3FC0\n0200\n7FE0\n0200\n0E00\nENDCHAR\nSTARTCHAR U_63C6\nENCODING 25542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F40\n2580\nF2A0\n2440\n2BA0\n3100\n6100\nAFE0\n2280\n2440\nF820\nENDCHAR\nSTARTCHAR U_63C7\nENCODING 25543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n2FE0\n2AA0\n3920\n6FE0\nA920\n2FE0\n2920\nE860\nENDCHAR\nSTARTCHAR U_63C8\nENCODING 25544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nFA20\n2FE0\n2020\n37A0\n6020\nA7A0\n24A0\n27A0\nE0C0\nENDCHAR\nSTARTCHAR U_63C9\nENCODING 25545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2280\nFFE0\n2320\n2500\n3B00\nE100\n2FE0\n2380\n2540\n6920\nENDCHAR\nSTARTCHAR U_63CA\nENCODING 25546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2000\nF7C0\n2440\n27C0\n3000\n6FE0\nA920\n2FE0\n2920\nEFE0\nENDCHAR\nSTARTCHAR U_63CB\nENCODING 25547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nF7C0\n2540\n27C0\n3000\n6FE0\nA520\n24C0\n2540\nE620\nENDCHAR\nSTARTCHAR U_63CC\nENCODING 25548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nFFE0\n2920\n2FE0\n3820\n6200\nA540\n2CA0\n24A0\nE380\nENDCHAR\nSTARTCHAR U_63CD\nENCODING 25549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n27C0\n2200\n3FE0\n6B40\nA120\n2FE0\n2280\nEC60\nENDCHAR\nSTARTCHAR U_63CE\nENCODING 25550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n2000\n2FE0\n3440\n67C0\nA440\n27C0\n2000\nEFE0\nENDCHAR\nSTARTCHAR U_63CF\nENCODING 25551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2000\n27E0\n3520\n6520\nA7E0\n2520\n27E0\nE420\nENDCHAR\nSTARTCHAR U_63D0\nENCODING 25552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n27C0\n3000\n6FE0\nA500\n25E0\n2B00\nF1E0\nENDCHAR\nSTARTCHAR U_63D1\nENCODING 25553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n26E0\nF420\n26E0\n2420\n37E0\n6000\nA7E0\n2100\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_63D2\nENCODING 25554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF100\n2FE0\n2100\n3560\n6920\nAD60\n2920\n2920\nEFE0\nENDCHAR\nSTARTCHAR U_63D3\nENCODING 25555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n45E0\nFE00\n5080\n5EE0\n77A0\nD6A0\n56E0\n5680\n5620\nADE0\nENDCHAR\nSTARTCHAR U_63D4\nENCODING 25556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nFAA0\n26A0\n2520\n3AE0\nE000\n2240\n2D20\n3440\n63C0\nENDCHAR\nSTARTCHAR U_63D5\nENCODING 25557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\nF240\n23C0\n2A40\n33C0\nE240\n2FE0\n2540\n2620\n67E0\nENDCHAR\nSTARTCHAR U_63D6\nENCODING 25558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF7C0\n2000\n2FE0\n3440\n67C0\nA440\n24E0\n2F40\nE040\nENDCHAR\nSTARTCHAR U_63D7\nENCODING 25559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2880\nFFE0\n2880\n2BE0\n3A20\n6BE0\nAA20\n2BE0\n2A20\nF3E0\nENDCHAR\nSTARTCHAR U_63D8\nENCODING 25560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF440\n27C0\n2440\n3FE0\n6100\nA7C0\n2100\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_63D9\nENCODING 25561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n2FE0\n2800\n3FE0\n6AA0\nAFE0\n2AA0\n2AA0\nEA60\nENDCHAR\nSTARTCHAR U_63DA\nENCODING 25562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF7C0\n2440\n2FE0\n3200\n67E0\nAAA0\n24A0\n2920\nE2C0\nENDCHAR\nSTARTCHAR U_63DB\nENCODING 25563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nF480\n2FE0\n2AA0\n3AA0\n6C60\nA100\n2FE0\n2280\nEC60\nENDCHAR\nSTARTCHAR U_63DC\nENCODING 25564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF7C0\n2820\n27C0\n3440\n67C0\nA280\n2FE0\n2480\nE880\nENDCHAR\nSTARTCHAR U_63DD\nENCODING 25565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n26C0\nFAA0\n2A80\n2680\n39E0\n67C0\nA440\n27C0\n2440\nE7C0\nENDCHAR\nSTARTCHAR U_63DE\nENCODING 25566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF440\n2280\n2FE0\n3000\n67C0\nA440\n27C0\n2440\nE7C0\nENDCHAR\nSTARTCHAR U_63DF\nENCODING 25567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2120\nFDC0\n2700\n28E0\n37C0\n6440\nA7C0\n2440\n27C0\nE440\nENDCHAR\nSTARTCHAR U_63E0\nENCODING 25568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2A40\nFBC0\n2A40\n2BC0\n3900\n6FE0\nAA40\n2980\n2A40\nEFE0\nENDCHAR\nSTARTCHAR U_63E1\nENCODING 25569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nF7E0\n2400\n27E0\n3540\n67E0\nA480\n27E0\n2880\nF7E0\nENDCHAR\nSTARTCHAR U_63E2\nENCODING 25570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFA40\n23C0\n2640\n3980\n6240\nAFE0\n2440\n2440\nE7C0\nENDCHAR\nSTARTCHAR U_63E3\nENCODING 25571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2920\nFFE0\n2000\n2FE0\n3200\n6FE0\nAAA0\n2AA0\n2AA0\nE860\nENDCHAR\nSTARTCHAR U_63E4\nENCODING 25572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2EE0\nFAA0\n2EA0\n2AA0\n3EA0\n68A0\nAAA0\n2AE0\n2D80\nE880\nENDCHAR\nSTARTCHAR U_63E5\nENCODING 25573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF440\n2280\n2FE0\n3920\n67C0\nA540\n2540\n25C0\nE100\nENDCHAR\nSTARTCHAR U_63E6\nENCODING 25574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2FA0\nF220\n2FA0\n2AA0\n3FA0\n6620\nAB20\n2AA0\n2220\nE260\nENDCHAR\nSTARTCHAR U_63E7\nENCODING 25575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\nFEA0\n54A0\n7CA0\n5420\n9260\n3FC0\n0400\nFFE0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_63E8\nENCODING 25576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF000\n27C0\n2440\n3FE0\n6820\nA7C0\n2100\n2100\nE300\nENDCHAR\nSTARTCHAR U_63E9\nENCODING 25577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n24A0\nFFC0\n24A0\n2760\n3200\n67C0\nA440\n27C0\n2440\nE7C0\nENDCHAR\nSTARTCHAR U_63EA\nENCODING 25578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2480\nF4A0\n2FC0\n2580\n3680\n6D80\nA480\n2540\n2620\n6420\nENDCHAR\nSTARTCHAR U_63EB\nENCODING 25579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n22A0\nFCC0\n2980\n6640\nA420\n7FC0\n0400\nFFE0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_63EC\nENCODING 25580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF840\n2480\n2A40\n3280\n6FC0\nA200\n2500\n2480\nF860\nENDCHAR\nSTARTCHAR U_63ED\nENCODING 25581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF7C0\n2440\n27C0\n3400\n6FE0\nB920\n2AA0\nAFA0\n40C0\nENDCHAR\nSTARTCHAR U_63EE\nENCODING 25582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nFFE0\n2540\n27C0\n3540\n67C0\nA100\n2FE0\nA100\n4100\nENDCHAR\nSTARTCHAR U_63EF\nENCODING 25583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n2480\nF500\n25E0\n2720\n35A0\nE560\n25A0\n2560\n2440\nE5E0\nENDCHAR\nSTARTCHAR U_63F0\nENCODING 25584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF900\n2FE0\n27C0\n3540\n67C0\nA540\n2FE0\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_63F1\nENCODING 25585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nD620\n7D20\n4520\n7520\n5CE0\n4700\n0400\n3FC0\n0400\n7FE0\n0C00\nENDCHAR\nSTARTCHAR U_63F2\nENCODING 25586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\nF540\n25C0\n2C00\n37E0\n6100\nAFE0\n2380\n2540\nE920\nENDCHAR\nSTARTCHAR U_63F3\nENCODING 25587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n2EA0\nF4A0\n2EA0\n24A0\n3FA0\n6540\nAFE0\n2280\n2440\nE820\nENDCHAR\nSTARTCHAR U_63F4\nENCODING 25588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2520\nF2C0\n2FE0\n2100\n3FE0\n6200\nA3E0\n2540\n2880\nD360\nENDCHAR\nSTARTCHAR U_63F5\nENCODING 25589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n23E0\nF2A0\n27E0\n2C80\n35E0\n6480\nB7E0\n2880\nAC80\n53E0\nENDCHAR\nSTARTCHAR U_63F6\nENCODING 25590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2AA0\nFAA0\n2EA0\n2AC0\n3AA0\n6EA0\nAAA0\n2BA0\nBEC0\n4280\nENDCHAR\nSTARTCHAR U_63F7\nENCODING 25591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2F00\nF100\n2FE0\n2100\n3D60\nE920\n2D60\n2920\nAFE0\n4100\nENDCHAR\nSTARTCHAR U_63F8\nENCODING 25592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF540\n2920\n27C0\n3440\n67C0\nA440\n27C0\nA000\n4FE0\nENDCHAR\nSTARTCHAR U_63F9\nENCODING 25593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n2EC0\nF2A0\n2EE0\n2000\n37C0\n6440\nA7C0\n2440\nA7C0\n44C0\nENDCHAR\nSTARTCHAR U_63FA\nENCODING 25594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2700\nF020\n2520\n2540\n3FE0\nE100\n2FE0\n2100\nA920\n4FE0\nENDCHAR\nSTARTCHAR U_63FB\nENCODING 25595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4140\nFFE0\n5080\n5FA0\n74A0\nDFA0\n55A0\n5640\n56C0\nEB20\nENDCHAR\nSTARTCHAR U_63FC\nENCODING 25596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n4400\nEFC0\n5440\n4440\n67C0\nC120\n4D40\n4580\n4940\nD320\nENDCHAR\nSTARTCHAR U_63FD\nENCODING 25597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2AE0\nFB40\n2A20\n2000\n37C0\n6540\nA540\n2540\n22A0\nECE0\nENDCHAR\nSTARTCHAR U_63FE\nENCODING 25598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F80\n4880\nEF80\n4880\n4F80\n6000\n5FC0\nD540\n5540\n5540\nFFE0\nENDCHAR\nSTARTCHAR U_63FF\nENCODING 25599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2E80\nF0E0\n2E20\n2440\n3F40\n6440\nA540\n2640\nACA0\n4120\nENDCHAR\nSTARTCHAR U_6400\nENCODING 25600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nF880\n2FC0\n2A40\n3FC0\nE4A0\n2B60\n3080\nA600\n4180\nENDCHAR\nSTARTCHAR U_6401\nENCODING 25601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n4420\nF7E0\n54A0\n5320\n54A0\nFFE0\n54A0\n54A0\n57A0\nD060\nENDCHAR\nSTARTCHAR U_6402\nENCODING 25602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nFFE0\n2540\n2920\n3100\n6FE0\nA240\n2680\nA180\n4E60\nENDCHAR\nSTARTCHAR U_6403\nENCODING 25603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nF7E0\n2420\n3420\n27E0\n6000\nA240\n3520\nB4A0\n43C0\nENDCHAR\nSTARTCHAR U_6404\nENCODING 25604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n4FE0\nE800\n5FC0\n5A40\n6BC0\nCA40\n4A40\n4BC0\n4800\nCFE0\nENDCHAR\nSTARTCHAR U_6405\nENCODING 25605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A20\n2540\nFFE0\n2820\n2FC0\n3440\nE540\n2540\n2300\n2520\n69E0\nENDCHAR\nSTARTCHAR U_6406\nENCODING 25606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2FE0\n2280\n3FE0\n6540\nA7C0\n2540\n2FE0\nE4C0\nENDCHAR\nSTARTCHAR U_6407\nENCODING 25607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n5CE0\nE200\n4FC0\n4080\n6300\nDFE0\n4200\n4D40\n5480\nC660\nENDCHAR\nSTARTCHAR U_6408\nENCODING 25608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF840\n2480\n2640\n3B00\n6480\nAFE0\n2440\n2440\nE7C0\nENDCHAR\nSTARTCHAR U_6409\nENCODING 25609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFA20\n2480\n2FE0\n3480\nE7E0\n2480\n27E0\n2480\n67E0\nENDCHAR\nSTARTCHAR U_640A\nENCODING 25610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2FE0\nF520\n27E0\n2240\n37E0\n6860\nA560\n27E0\n2220\nECC0\nENDCHAR\nSTARTCHAR U_640B\nENCODING 25611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n28E0\nF880\n2BE0\n2AA0\n3BC0\n6AA0\nABE0\n2A40\nAA40\n5460\nENDCHAR\nSTARTCHAR U_640C\nENCODING 25612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nF7E0\n2540\n27E0\n3540\n67E0\nA6A0\n2A40\nAB40\n5220\nENDCHAR\nSTARTCHAR U_640D\nENCODING 25613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF7C0\n2000\n27E0\n3420\n67E0\nA420\n27E0\nA280\n4C60\nENDCHAR\nSTARTCHAR U_640E\nENCODING 25614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F40\n2280\nF540\n24A0\n2DC0\n34A0\nEFE0\n3480\n25C0\nB6A0\n4DA0\nENDCHAR\nSTARTCHAR U_640F\nENCODING 25615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2FE0\nF540\n27C0\n2D40\n37C0\nE540\n3FE0\n2480\n2280\n6180\nENDCHAR\nSTARTCHAR U_6410\nENCODING 25616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2140\n27E0\n3000\nE7E0\n2520\n27E0\n2520\n67E0\nENDCHAR\nSTARTCHAR U_6411\nENCODING 25617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2FE0\n2440\n37C0\n6440\nA7C0\n2460\n2FC0\nE040\nENDCHAR\nSTARTCHAR U_6412\nENCODING 25618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF280\n2FE0\n2920\n3FE0\n6200\nA3E0\n2220\n24A0\nF840\nENDCHAR\nSTARTCHAR U_6413\nENCODING 25619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nFFE0\n2100\n27C0\n3100\n6FE0\nA400\n2FC0\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_6414\nENCODING 25620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2520\nFA40\n2180\n2E60\n3100\n67E0\nA520\n27E0\n2140\nEFA0\nENDCHAR\nSTARTCHAR U_6415\nENCODING 25621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF100\n2FE0\n2200\n3440\n6FA0\nA000\n2FE0\n2AA0\nFFE0\nENDCHAR\nSTARTCHAR U_6416\nENCODING 25622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\nF540\n2A80\n2300\n3FC0\nE500\n2FE0\n3100\n2920\n6FE0\nENDCHAR\nSTARTCHAR U_6417\nENCODING 25623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nFC40\n27C0\n2C40\n37E0\n6400\nA7E0\n2AA0\n2FA0\nE0C0\nENDCHAR\nSTARTCHAR U_6418\nENCODING 25624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27A0\n2140\nFFE0\n2240\n27A0\n3A20\n67E0\nA420\n27E0\n2420\nE7E0\nENDCHAR\nSTARTCHAR U_6419\nENCODING 25625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\nFFE0\n2B40\n2A80\n3B60\n6880\nAFE0\n2A80\n2880\nF180\nENDCHAR\nSTARTCHAR U_641A\nENCODING 25626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2240\nFFE0\n24A0\n2920\n37E0\n6420\nA7E0\n2420\n27E0\nE460\nENDCHAR\nSTARTCHAR U_641B\nENCODING 25627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n2FE0\nF500\n2FC0\n2540\n3FE0\n6540\nAFC0\n2580\n2D40\nF520\nENDCHAR\nSTARTCHAR U_641C\nENCODING 25628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n2D60\nF920\n2D60\n2920\n3FE0\n6100\nAFC0\n2480\n2300\nECE0\nENDCHAR\nSTARTCHAR U_641D\nENCODING 25629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\nF840\n2FC0\n2840\n3FC0\n6280\nAFE0\n2200\n2580\nF860\nENDCHAR\nSTARTCHAR U_641E\nENCODING 25630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF440\n27C0\n2000\n3FE0\n6820\nABA0\n2AA0\n2BA0\nE860\nENDCHAR\nSTARTCHAR U_641F\nENCODING 25631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n5F40\nE440\n5F40\n55E0\n7F40\nD540\n5F40\n4440\n5F40\nC440\nENDCHAR\nSTARTCHAR U_6420\nENCODING 25632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AE0\n24A0\nFFA0\n22E0\n2AA0\n3AA0\n6FE0\nA2A0\n22A0\n2520\nEA60\nENDCHAR\nSTARTCHAR U_6421\nENCODING 25633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2240\nF7E0\n2AA0\n2440\n3AA0\n6120\nAFE0\n2580\n2940\nF120\nENDCHAR\nSTARTCHAR U_6422\nENCODING 25634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFAA0\n26C0\n2280\n3FE0\n6440\nA7C0\n2440\n2440\nE7C0\nENDCHAR\nSTARTCHAR U_6423\nENCODING 25635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\nFFE0\n2880\n2F80\n3AA0\n6BA0\nAEC0\n2BA0\n2AE0\nF520\nENDCHAR\nSTARTCHAR U_6424\nENCODING 25636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nF000\n2FE0\n2280\n3440\n6FE0\nA540\n2540\n2540\nFFE0\nENDCHAR\nSTARTCHAR U_6425\nENCODING 25637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n25E0\nF520\n21E0\n2100\n3DE0\n6520\nA5E0\n2520\n2A00\nF1E0\nENDCHAR\nSTARTCHAR U_6426\nENCODING 25638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2220\nFEE0\n2880\n2EE0\n3220\nEAA0\n2660\n3BA0\nA220\n6CC0\nENDCHAR\nSTARTCHAR U_6427\nENCODING 25639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n2FE0\n2800\n3FE0\n6920\nADA0\n2B60\n2DA0\nF360\nENDCHAR\nSTARTCHAR U_6428\nENCODING 25640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n27C0\n3000\n6FE0\nAAA0\n2660\n2BA0\nE660\nENDCHAR\nSTARTCHAR U_6429\nENCODING 25641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n27E0\nF940\n2FE0\n2240\n3D40\n6FE0\nA380\n2540\n2960\nE100\nENDCHAR\nSTARTCHAR U_642A\nENCODING 25642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF900\n2FC0\n2940\n3FE0\n6940\nAFC0\n2A40\n2A40\nF3C0\nENDCHAR\nSTARTCHAR U_642B\nENCODING 25643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\nAA60\nFFC0\nAA40\n8980\n3F40\n0400\n7FC0\n0400\nFFE0\n0C00\nENDCHAR\nSTARTCHAR U_642C\nENCODING 25644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n5DC0\nF540\n5D40\n5560\n7E00\n55C0\nDD40\n5480\n5540\nEE20\nENDCHAR\nSTARTCHAR U_642D\nENCODING 25645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2100\n2280\n3440\nEBA0\n2000\n27C0\nA440\n47C0\nENDCHAR\nSTARTCHAR U_642E\nENCODING 25646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFE0\n2AA0\n2FE0\n3100\n6FE0\nA100\n2380\n2560\nF920\nENDCHAR\nSTARTCHAR U_642F\nENCODING 25647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2720\nF520\n22C0\n2200\n3CE0\n6820\nAEE0\n2820\n2FE0\nE820\nENDCHAR\nSTARTCHAR U_6430\nENCODING 25648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF740\n2FE0\n2820\n37C0\n6440\nA7C0\n2440\n27C0\nE440\nENDCHAR\nSTARTCHAR U_6431\nENCODING 25649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nF7E0\n2480\n27E0\n3540\n67E0\nA480\n2BE0\n2880\nF080\nENDCHAR\nSTARTCHAR U_6432\nENCODING 25650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nFAC0\n2440\n29E0\n3E80\n6A80\nAA80\n2A40\n2BA0\nF2A0\nENDCHAR\nSTARTCHAR U_6433\nENCODING 25651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF920\n27C0\n2100\n37C0\n6100\nAFE0\n2440\n27C0\nE440\nENDCHAR\nSTARTCHAR U_6434\nENCODING 25652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4920\n1FC0\n0900\nFFE0\n2240\nDFA0\n0200\n3FE0\n0200\nENDCHAR\nSTARTCHAR U_6435\nENCODING 25653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nFEC0\n2440\n2FC0\n3000\nEFE0\n2AA0\n2AA0\n2AA0\n6FE0\nENDCHAR\nSTARTCHAR U_6436\nENCODING 25654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF540\n28A0\n27C0\n3440\n67C0\nA440\n27E0\n2A20\nEBE0\nENDCHAR\nSTARTCHAR U_6437\nENCODING 25655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n27C0\n2440\n3740\n65C0\nA440\n2FE0\n2280\nEC60\nENDCHAR\nSTARTCHAR U_6438\nENCODING 25656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4FE0\nE200\n5FE0\n4480\n6F40\nD220\n4FC0\n4680\n4A40\nD220\nENDCHAR\nSTARTCHAR U_6439\nENCODING 25657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2440\nF7C0\n2000\n2FE0\n3AA0\n6920\nAFE0\n2920\n2920\nE860\nENDCHAR\nSTARTCHAR U_643A\nENCODING 25658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF480\n27E0\n2480\n37E0\n6480\nAFE0\n2240\n2420\nE8E0\nENDCHAR\nSTARTCHAR U_643B\nENCODING 25659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1B00\n6EC0\n0000\n3F80\n2080\n3F80\nFBE0\n2080\nFBE0\n2080\nENDCHAR\nSTARTCHAR U_643C\nENCODING 25660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\nF100\n2FE0\n2440\n3BA0\n6120\nA7C0\n2100\n2FE0\nE100\nENDCHAR\nSTARTCHAR U_643D\nENCODING 25661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2380\n2440\n3920\n67C0\nA100\n2540\n2920\nF320\nENDCHAR\nSTARTCHAR U_643E\nENCODING 25662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n2440\n2200\n37E0\n6A00\nA3C0\n2200\n23E0\nE200\nENDCHAR\nSTARTCHAR U_643F\nENCODING 25663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n12E0\nE640\n2940\n2FE0\n7040\n2F40\n29E0\nF940\n2F40\n4940\n80C0\nENDCHAR\nSTARTCHAR U_6440\nENCODING 25664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nF440\n27C0\n2400\n37E0\n6400\nA7E0\n2520\n2AA0\nEAC0\nENDCHAR\nSTARTCHAR U_6441\nENCODING 25665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\nFFE0\n2520\n2EA0\n37E0\n6100\nA2C0\n2A20\n2A60\nF1C0\nENDCHAR\nSTARTCHAR U_6442\nENCODING 25666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2240\nFBC0\n2240\n2FE0\n3040\n6820\nA6C0\n2000\n26C0\nE820\nENDCHAR\nSTARTCHAR U_6443\nENCODING 25667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n2440\n27C0\n3440\n67C0\nA440\n27C0\n2280\nEC60\nENDCHAR\nSTARTCHAR U_6444\nENCODING 25668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2240\nFBC0\n2240\n2BC0\n3240\n6FE0\nAAA0\n2440\n2AA0\nF120\nENDCHAR\nSTARTCHAR U_6445\nENCODING 25669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2100\nFFE0\n2920\n29C0\n3F20\n69E0\nAB40\n2AA0\n2E40\nF1C0\nENDCHAR\nSTARTCHAR U_6446\nENCODING 25670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFAA0\n2FE0\n2100\n37C0\n6100\nAFE0\n2200\n2440\nEFE0\nENDCHAR\nSTARTCHAR U_6447\nENCODING 25671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2F20\nFA20\n2540\n27C0\n3900\n6FE0\nA100\n2920\n2FE0\nE820\nENDCHAR\nSTARTCHAR U_6448\nENCODING 25672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n2780\n2400\n37C0\n6480\nAFE0\n2280\n2440\nE820\nENDCHAR\nSTARTCHAR U_6449\nENCODING 25673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n5FE0\nF020\n4480\n5A60\n6300\nDCE0\n4200\n5FC0\n4480\nCF00\nENDCHAR\nSTARTCHAR U_644A\nENCODING 25674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2E40\nF3E0\n2B40\n25E0\n3540\n6540\nABE0\n3340\n2140\nE1E0\nENDCHAR\nSTARTCHAR U_644B\nENCODING 25675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n55C0\n4940\nF540\n4A60\n49C0\n7E40\nC940\n5D40\n6A80\n4940\nCA20\nENDCHAR\nSTARTCHAR U_644C\nENCODING 25676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2FE0\n2A80\n3BC0\nEC80\n2BC0\n2880\nA880\n57E0\nENDCHAR\nSTARTCHAR U_644D\nENCODING 25677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n27E0\n2480\n3DE0\n6520\nA5E0\n2520\n25E0\nE520\nENDCHAR\nSTARTCHAR U_644E\nENCODING 25678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nF660\n2AA0\n2300\n3480\n6A60\nA500\n2240\n2480\nE300\nENDCHAR\nSTARTCHAR U_644F\nENCODING 25679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n5FE0\nE200\n4FC0\n4200\n7FE0\nD5C0\n68A0\n4D80\n4880\nCF80\nENDCHAR\nSTARTCHAR U_6450\nENCODING 25680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2540\nF940\n22A0\n2CA0\n3880\n6A80\nAAE0\n2A80\n2D80\nE8E0\nENDCHAR\nSTARTCHAR U_6451\nENCODING 25681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n5160\nFFE0\n5120\n5D60\n75A0\nDD20\n52A0\n5C60\nD020\n5FE0\nENDCHAR\nSTARTCHAR U_6452\nENCODING 25682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFFE0\n2540\n2480\n37E0\n6540\nA7E0\n2540\n2540\nEA40\nENDCHAR\nSTARTCHAR U_6453\nENCODING 25683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n27E0\nF540\n2080\n2F60\n3480\n67E0\nA480\n27E0\n2A80\nF1E0\nENDCHAR\nSTARTCHAR U_6454\nENCODING 25684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2920\n2540\n37A0\n6940\nA100\n2FE0\n2100\nE100\nENDCHAR\nSTARTCHAR U_6455\nENCODING 25685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n7FE0\n5540\nF760\n4000\n7FE0\nD220\n4FC0\n4A40\n4AC0\nC200\nENDCHAR\nSTARTCHAR U_6456\nENCODING 25686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n48E0\n5E20\nF2C0\n4C40\n4BA0\n7000\nC7C0\n4100\n4540\n4920\nC300\nENDCHAR\nSTARTCHAR U_6457\nENCODING 25687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5F80\nE4E0\n5F20\n5500\n7F40\nC440\n4E40\n5540\n64A0\nC520\nENDCHAR\nSTARTCHAR U_6458\nENCODING 25688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2FE0\n2920\n3FE0\nE920\n2BA0\n2AA0\n2BA0\n6860\nENDCHAR\nSTARTCHAR U_6459\nENCODING 25689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BE0\n2480\nF3E0\n22A0\n23E0\n3AA0\n6BE0\nA880\n2BE0\n2C80\nF3E0\nENDCHAR\nSTARTCHAR U_645A\nENCODING 25690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\nFFE0\n2820\n27C0\n3440\nE7C0\n2100\n27C0\nA100\n4FE0\nENDCHAR\nSTARTCHAR U_645B\nENCODING 25691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF540\n26C0\n2540\n37C0\nE100\n2FE0\n2AA0\nABA0\n6860\nENDCHAR\nSTARTCHAR U_645C\nENCODING 25692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nFFE0\n2540\n27C0\n3C40\nE7C0\n2440\n27C0\n2440\n6820\nENDCHAR\nSTARTCHAR U_645D\nENCODING 25693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFA80\n2FE0\n2AA0\n3FE0\nE880\n2CA0\n2FC0\nB4A0\n66E0\nENDCHAR\nSTARTCHAR U_645E\nENCODING 25694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nFFE0\n2920\n2FE0\n3240\nE780\n2240\n2FE0\nA540\n7B20\nENDCHAR\nSTARTCHAR U_645F\nENCODING 25695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF540\n2FE0\n2540\n3FE0\nE920\n2FE0\n2440\n2380\n6C60\nENDCHAR\nSTARTCHAR U_6460\nENCODING 25696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\nFA40\n2AC0\n2D40\n3AC0\nEFC0\n2540\n24A0\nAC60\n73C0\nENDCHAR\nSTARTCHAR U_6461\nENCODING 25697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2940\nF940\n2F40\n29E0\n3F40\nE840\n2A40\n2EC0\nA940\n4260\nENDCHAR\nSTARTCHAR U_6462\nENCODING 25698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n4200\nFFE0\n5220\n5FC0\n7220\nDFE0\n5540\n5FE0\n5100\nA300\nENDCHAR\nSTARTCHAR U_6463\nENCODING 25699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n4200\nFFE0\n5240\n5F80\n7220\nD7E0\n5440\n57C0\n5440\nAFE0\nENDCHAR\nSTARTCHAR U_6464\nENCODING 25700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n2BA0\n2540\n3BA0\nEBA0\n2540\n2BA0\nA280\n4C60\nENDCHAR\nSTARTCHAR U_6465\nENCODING 25701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nFC40\n27C0\n2440\n3FE0\n2400\nEFE0\n34A0\nA920\n66C0\nENDCHAR\nSTARTCHAR U_6466\nENCODING 25702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n4AA0\nF6A0\n5EA0\n62A0\n7EA0\nD2A0\n5EA0\n42A0\n52E0\nCDA0\nENDCHAR\nSTARTCHAR U_6467\nENCODING 25703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24A0\n24A0\nF7E0\n2280\n37E0\n2C80\nF7C0\n2480\n27C0\nA480\n67E0\nENDCHAR\nSTARTCHAR U_6468\nENCODING 25704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nFFE0\n2AA0\n29C0\n3EA0\nEA80\n2BC0\n2C80\nABE0\n7080\nENDCHAR\nSTARTCHAR U_6469\nENCODING 25705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n7FE0\n5DC0\n6AA0\n5FC0\n4200\n7FE0\n4200\n8E00\nENDCHAR\nSTARTCHAR U_646A\nENCODING 25706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n55E0\nF720\n5CC0\n6480\nC540\n7FE0\n5440\n5540\n5440\nA4C0\nENDCHAR\nSTARTCHAR U_646B\nENCODING 25707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n2520\nFFE0\n2520\n25E0\n2F20\nE5E0\n2440\n2AC0\nB140\n6660\nENDCHAR\nSTARTCHAR U_646C\nENCODING 25708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF280\n2FE0\n2440\n37C0\nE440\n27C0\n22A0\nA4A0\n6860\nENDCHAR\nSTARTCHAR U_646D\nENCODING 25709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2540\n2FE0\n3540\nE540\n25C0\n2400\n2AA0\n6AA0\nENDCHAR\nSTARTCHAR U_646E\nENCODING 25710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7DE0\n1140\nFC80\n2760\n4400\n7FC0\n0400\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_646F\nENCODING 25711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFF80\n2280\nFEA0\n53A0\nFEE0\n0400\n7F80\n0400\nFFE0\n0C00\nENDCHAR\nSTARTCHAR U_6470\nENCODING 25712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n5940\nB7C0\n1120\n7FA0\n0400\n7FC0\n0400\nFFE0\n0C00\nENDCHAR\nSTARTCHAR U_6471\nENCODING 25713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF7C0\n2440\n2FE0\n3AA0\nEFE0\n2440\n2280\nA100\n4EE0\nENDCHAR\nSTARTCHAR U_6472\nENCODING 25714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2FC0\nF280\n2F80\n2AE0\n3FA0\nEAA0\n2FA0\n22A0\nAFA0\n6220\nENDCHAR\nSTARTCHAR U_6473\nENCODING 25715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\nFBC0\n2A40\n2BC0\n3800\nEEE0\n2AA0\n2EE0\nA800\n6FE0\nENDCHAR\nSTARTCHAR U_6474\nENCODING 25716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFFE0\n2920\n2AA0\n37C0\nE000\n2FE0\n2040\nA240\n6180\nENDCHAR\nSTARTCHAR U_6475\nENCODING 25717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\nFFE0\n2A80\n2B80\n3A80\nEFA0\n2A40\n2F40\nAAA0\n7720\nENDCHAR\nSTARTCHAR U_6476\nENCODING 25718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF540\n27C0\n2540\n3FC0\nE120\n2FE0\n2480\n2280\n6100\nENDCHAR\nSTARTCHAR U_6477\nENCODING 25719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2A80\nF540\n27C0\n2540\n37C0\nE540\n2FE0\n2580\n2940\n7120\nENDCHAR\nSTARTCHAR U_6478\nENCODING 25720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n27C0\n2440\n37C0\nE440\n3FE0\n2100\nA280\n6C60\nENDCHAR\nSTARTCHAR U_6479\nENCODING 25721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n2080\n3F80\n2080\nFFE0\n2440\nDFA0\n0400\nFFE0\n0C00\nENDCHAR\nSTARTCHAR U_647A\nENCODING 25722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nF660\n2AA0\n2320\n3100\nE7E0\n2420\n27E0\n2420\n67E0\nENDCHAR\nSTARTCHAR U_647B\nENCODING 25723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2240\nF7E0\n2AA0\n2F60\n3280\nE560\n2A80\n2120\n20C0\n6700\nENDCHAR\nSTARTCHAR U_647C\nENCODING 25724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F00\n2AE0\nFF20\n29A0\n2F40\n3A40\nEFA0\n2100\n27C0\n2100\n6FE0\nENDCHAR\nSTARTCHAR U_647D\nENCODING 25725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFE0\n2AA0\n2FE0\n3000\nE7C0\n2000\n2FE0\nA540\n7B20\nENDCHAR\nSTARTCHAR U_647E\nENCODING 25726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n5DE0\nE520\n45E0\n5C80\n73E0\nDEA0\n47E0\n4480\n54A0\nCBE0\nENDCHAR\nSTARTCHAR U_647F\nENCODING 25727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF540\n2FE0\n2440\n3280\nEFE0\n2440\n27C0\nA440\n67C0\nENDCHAR\nSTARTCHAR U_6480\nENCODING 25728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFD40\n1220\n7DC0\n5540\n7C80\n8160\n3FC0\n0400\n7FE0\n0400\nENDCHAR\nSTARTCHAR U_6481\nENCODING 25729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2FE0\n3AA0\n67C0\nA500\n27C0\n2900\n3FE0\n6100\nENDCHAR\nSTARTCHAR U_6482\nENCODING 25730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nF7C0\n2540\n27E0\n3C40\nE380\n2440\n2FE0\n2440\nE7C0\nENDCHAR\nSTARTCHAR U_6483\nENCODING 25731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFD40\n5620\n7FE0\n5540\nFE80\n1160\n7FC0\n0400\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_6484\nENCODING 25732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nFAA0\n2AA0\n2AA0\n3540\nE920\n2FE0\n2480\nA380\n6E60\nENDCHAR\nSTARTCHAR U_6485\nENCODING 25733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2D80\nFA80\n2FE0\n2A20\n3AC0\nEAC0\n2FC0\n2A40\n34A0\nE920\nENDCHAR\nSTARTCHAR U_6486\nENCODING 25734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9500\n59E0\nFF20\nB4C0\nDCC0\n9520\n3F80\n0400\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_6487\nENCODING 25735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5580\n4E80\nE4E0\n5F20\n5520\n75A0\nDFA0\n55A0\n5540\n55A0\nD320\nENDCHAR\nSTARTCHAR U_6488\nENCODING 25736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n2FE0\nFA40\n2540\n28A0\n3FE0\nE920\n27C0\n2240\n2440\n68C0\nENDCHAR\nSTARTCHAR U_6489\nENCODING 25737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n4BE0\nFD40\n1140\nF880\n1F60\n1400\n7FC0\n0400\nFFE0\n0C00\nENDCHAR\nSTARTCHAR U_648A\nENCODING 25738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n52A0\nFEE0\n52A0\n5EE0\n77A0\nD4A0\n57A0\n54A0\n57A0\nD4E0\nENDCHAR\nSTARTCHAR U_648B\nENCODING 25739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\n2AA0\n2EE0\n3BA0\nE920\n2BA0\n2920\nABA0\n4860\nENDCHAR\nSTARTCHAR U_648C\nENCODING 25740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF540\n2FE0\n2440\n37C0\nE440\n27C0\n2440\n27C0\n6C60\nENDCHAR\nSTARTCHAR U_648D\nENCODING 25741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n4A40\nEFE0\n46C0\n6B60\n5000\nCFC0\n4840\n4FC0\nC840\n4FC0\nENDCHAR\nSTARTCHAR U_648E\nENCODING 25742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF100\n2FE0\n2820\n3FE0\nE440\n27C0\n2440\n2280\n6FE0\nENDCHAR\nSTARTCHAR U_648F\nENCODING 25743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2040\nFFC0\n2040\n2FE0\n32A0\nEFE0\n2040\n3FE0\nA840\n65C0\nENDCHAR\nSTARTCHAR U_6490\nENCODING 25744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\nF4A0\n27A0\n2000\n3FE0\nE480\n2FE0\n2280\nA480\n6980\nENDCHAR\nSTARTCHAR U_6491\nENCODING 25745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\nF820\n2380\n3280\n67C0\nA100\n27C0\n2100\n2FE0\n6100\nENDCHAR\nSTARTCHAR U_6492\nENCODING 25746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\n3F80\nEAE0\n3FA0\n2AA0\n6EA0\nAAA0\n2EA0\n2A40\nAAA0\n6F20\nENDCHAR\nSTARTCHAR U_6493\nENCODING 25747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF100\n2FE0\n2440\n3EE0\nE440\n2FE0\n2280\nA4A0\n7860\nENDCHAR\nSTARTCHAR U_6494\nENCODING 25748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nF440\n2FE0\n2440\n37C0\nE100\n2540\n2920\n6300\nENDCHAR\nSTARTCHAR U_6495\nENCODING 25749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A20\n2AC0\nFF80\n2A80\n3EE0\n6AA0\nBEA0\n2AA0\n3FA0\n2AA0\n7120\nENDCHAR\nSTARTCHAR U_6496\nENCODING 25750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n24E0\nFFA0\n2AA0\n3FA0\n2AA0\n6EA0\nABA0\n2E40\nBAA0\n6320\nENDCHAR\nSTARTCHAR U_6497\nENCODING 25751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2FE0\n2100\n37C0\nE540\n27C0\n2540\n27C0\n6C60\nENDCHAR\nSTARTCHAR U_6498\nENCODING 25752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n26E0\nFA40\n2120\n2280\n3440\nEBA0\n2000\n27C0\nA440\n67C0\nENDCHAR\nSTARTCHAR U_6499\nENCODING 25753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nFFE0\n2940\n2EC0\n3840\nEFC0\n2840\n3FE0\nA880\n6580\nENDCHAR\nSTARTCHAR U_649A\nENCODING 25754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n26C0\nFAA0\n2FE0\n2A80\n3540\nE540\n2A20\n2540\nAAA0\n6AA0\nENDCHAR\nSTARTCHAR U_649B\nENCODING 25755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n4680\nFFE0\n4680\n5A60\n6840\nCDE0\n5540\n4DE0\n4840\nD040\nENDCHAR\nSTARTCHAR U_649C\nENCODING 25756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E40\n2BA0\nF6C0\n2440\n2BA0\n3000\nE7C0\n2440\n27C0\nA280\n6FE0\nENDCHAR\nSTARTCHAR U_649D\nENCODING 25757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2F40\nF540\n2780\n2480\n37C0\nE440\n2FE0\n3520\n2AA0\n6040\nENDCHAR\nSTARTCHAR U_649E\nENCODING 25758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2100\n2FE0\n3540\nE7C0\n2540\n2FE0\n2100\nEFE0\nENDCHAR\nSTARTCHAR U_649F\nENCODING 25759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n2440\n2BA0\n3280\nEFE0\n2AA0\n2BA0\n2820\n6860\nENDCHAR\nSTARTCHAR U_64A0\nENCODING 25760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FC0\nF4A0\n2EE0\n2B80\n3EA0\nEAA0\n2EC0\n24A0\n3F60\n6420\nENDCHAR\nSTARTCHAR U_64A1\nENCODING 25761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n47C0\nF440\n5AA0\n6FE0\n4480\nC960\n5100\n45A0\n4940\nC300\nENDCHAR\nSTARTCHAR U_64A2\nENCODING 25762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFE0\n2AA0\n2FE0\n3440\nE7C0\n2440\n2FE0\n2100\n6100\nENDCHAR\nSTARTCHAR U_64A3\nENCODING 25763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFFE0\n2540\n27C0\n3540\nE7C0\n2100\n2FE0\n2100\n6100\nENDCHAR\nSTARTCHAR U_64A4\nENCODING 25764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5F80\nEAE0\n5DA0\n52A0\n5EA0\nD2A0\n5EA0\n5240\n52A0\nD720\nENDCHAR\nSTARTCHAR U_64A5\nENCODING 25765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F40\n2AA0\nF440\n2FE0\n2340\n3E20\nE9E0\n2EA0\n22A0\nB2C0\n6D20\nENDCHAR\nSTARTCHAR U_64A6\nENCODING 25766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF240\n2520\n2FA0\n3140\nEFE0\n2440\n2FC0\nA440\n67C0\nENDCHAR\nSTARTCHAR U_64A7\nENCODING 25767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n49C0\nF240\n5FE0\n6AA0\n52A0\nDFE0\n4200\n6A20\n5620\nC1E0\nENDCHAR\nSTARTCHAR U_64A8\nENCODING 25768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n4480\nF7E0\n4900\n7FE0\n4900\nCFE0\n4900\n4FE0\n4D40\nD2A0\nENDCHAR\nSTARTCHAR U_64A9\nENCODING 25769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n27C0\n2C60\n37C0\nE440\n27C0\n2580\nA960\n7320\nENDCHAR\nSTARTCHAR U_64AA\nENCODING 25770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n47C0\nF100\n4FE0\n5540\n6FE0\nC540\n47C0\n4540\n4FE0\nC100\nENDCHAR\nSTARTCHAR U_64AB\nENCODING 25771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nFD40\n2540\n2FE0\n3540\nE540\n2FE0\n2540\nAAA0\n6AA0\nENDCHAR\nSTARTCHAR U_64AC\nENCODING 25772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2700\nF1C0\n2F20\n24E0\n3880\nEDC0\n2880\n3FC0\nA8A0\n6EE0\nENDCHAR\nSTARTCHAR U_64AD\nENCODING 25773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2F00\nF540\n2FE0\n2540\n3920\nEFE0\n2920\n2FE0\n2920\n6FE0\nENDCHAR\nSTARTCHAR U_64AE\nENCODING 25774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF7C0\n2440\n3FE0\n2A00\nEBE0\n2EA0\n2AA0\n3E40\nE3A0\nENDCHAR\nSTARTCHAR U_64AF\nENCODING 25775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4FE0\nF200\n47C0\n4200\n7FE0\nC400\n4FC0\n5540\nE6C0\n47C0\nENDCHAR\nSTARTCHAR U_64B0\nENCODING 25776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\n2880\n2EE0\n3280\nEFE0\n2280\n2FE0\n2280\n6C60\nENDCHAR\nSTARTCHAR U_64B1\nENCODING 25777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2BE0\nFB00\n2DE0\n2A80\n3BE0\nEB20\n2FE0\n2920\nA9E0\n6960\nENDCHAR\nSTARTCHAR U_64B2\nENCODING 25778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\n26C0\nFFE0\n2280\n2FE0\n3100\nE7C0\n2100\n2FE0\nA280\n6C60\nENDCHAR\nSTARTCHAR U_64B3\nENCODING 25779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2A80\nF1E0\n2F20\n2480\n3F80\n6480\nB580\n2EC0\nA520\n7E20\nENDCHAR\nSTARTCHAR U_64B4\nENCODING 25780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n5E80\nE080\n5DE0\n5540\n7E40\nC540\n4880\n7C80\n4940\nDA20\nENDCHAR\nSTARTCHAR U_64B5\nENCODING 25781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2440\nFEE0\n2440\n3AA0\n2FE0\nE500\n27C0\n2100\nAFE0\n6100\nENDCHAR\nSTARTCHAR U_64B6\nENCODING 25782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2FE0\n3540\n6FE0\nA540\n2FE0\n2100\n2FE0\n6100\nENDCHAR\nSTARTCHAR U_64B7\nENCODING 25783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BE0\n3C80\nEBE0\n3E20\n22A0\n3EA0\nEAA0\n2AA0\n2EA0\nA140\n6220\nENDCHAR\nSTARTCHAR U_64B8\nENCODING 25784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2480\nFFC0\n2540\n37C0\n2D40\nEFE0\n2440\n27C0\nA440\n67C0\nENDCHAR\nSTARTCHAR U_64B9\nENCODING 25785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n4580\nFFE0\n5040\n4F80\n6A80\nCD80\n4A80\n4F80\n4520\nD8E0\nENDCHAR\nSTARTCHAR U_64BA\nENCODING 25786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n2540\n2FE0\n3540\nEFE0\n2920\n2FE0\nA920\n6100\nENDCHAR\nSTARTCHAR U_64BB\nENCODING 25787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BE0\n2480\nF3E0\n2140\n23E0\n3C80\nE7E0\n2480\n27E0\nAC80\n73E0\nENDCHAR\nSTARTCHAR U_64BC\nENCODING 25788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40A0\n4FE0\nE880\n4EA0\n48C0\n6EA0\nCB60\n5620\n4D40\n54A0\nD3A0\nENDCHAR\nSTARTCHAR U_64BD\nENCODING 25789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2E80\nFBE0\n2EA0\n3AA0\nEEA0\n24A0\n3FA0\n2A40\nAAA0\n7720\nENDCHAR\nSTARTCHAR U_64BE\nENCODING 25790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BC0\n2640\nF340\n22C0\n3FE0\nE820\n2BA0\n2AA0\n2BE0\nAC00\n73E0\nENDCHAR\nSTARTCHAR U_64BF\nENCODING 25791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF440\n2BA0\n2000\n3EE0\nEAA0\n2EE0\n2440\nAAA0\n5120\nENDCHAR\nSTARTCHAR U_64C0\nENCODING 25792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2F40\nF2A0\n2F00\n29E0\n3F40\nE940\n2FE0\n2240\nAFC0\n6240\nENDCHAR\nSTARTCHAR U_64C1\nENCODING 25793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF540\n25E0\n2B40\n3DE0\n6B40\nBDE0\n2540\n2940\n71E0\nENDCHAR\nSTARTCHAR U_64C2\nENCODING 25794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFFE0\n2920\n2BA0\n3540\nEFE0\n2920\n2FE0\n2920\nCFE0\nENDCHAR\nSTARTCHAR U_64C3\nENCODING 25795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nFAA0\n2FE0\n2AA0\n3FE0\nE800\n2FE0\n2CA0\nB540\n6620\nENDCHAR\nSTARTCHAR U_64C4\nENCODING 25796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2200\nFFE0\n2A20\n2FE0\n3AA0\nEBE0\n2AA0\n37E0\nA220\n6CC0\nENDCHAR\nSTARTCHAR U_64C5\nENCODING 25797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n2BA0\n2820\n3FE0\nE440\n27C0\n2440\nA440\n6FE0\nENDCHAR\nSTARTCHAR U_64C6\nENCODING 25798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nF540\n2FE0\n3180\n6FE0\nA200\n27C0\n3D40\n2540\n67C0\nENDCHAR\nSTARTCHAR U_64C7\nENCODING 25799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFFE0\n2100\n2FE0\n3280\nE7C0\n2100\n2FE0\nA100\n6100\nENDCHAR\nSTARTCHAR U_64C8\nENCODING 25800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\n26C0\nFFE0\n2280\n37C0\n6100\nA7C0\n2100\n2FE0\nA380\n4D60\nENDCHAR\nSTARTCHAR U_64C9\nENCODING 25801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFFE0\n2400\n2FE0\n3A20\nEFA0\n2AA0\n2FA0\nA2A0\n6F40\nENDCHAR\nSTARTCHAR U_64CA\nENCODING 25802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\nA940\nF960\nABC0\nFD40\nA980\nAB60\nFE00\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_64CB\nENCODING 25803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nFFE0\n2AA0\n2B80\n3000\nEFE0\n2920\n2FE0\nA920\n6FE0\nENDCHAR\nSTARTCHAR U_64CC\nENCODING 25804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n4EE0\nF540\n4200\n5FE0\n6A40\nCA40\n56A0\n4500\n4880\nD060\nENDCHAR\nSTARTCHAR U_64CD\nENCODING 25805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF7C0\n2EE0\n2AA0\n3EE0\nE100\n3FE0\n2380\n2540\n6920\nENDCHAR\nSTARTCHAR U_64CE\nENCODING 25806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n29E0\nFF40\n5480\n7560\n1FC0\n0400\n7FE0\n0400\nFFE0\n0C00\nENDCHAR\nSTARTCHAR U_64CF\nENCODING 25807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\n3F80\nEAE0\n28A0\n2FA0\n32A0\nEEA0\n2AA0\n2E40\nA2A0\n6D20\nENDCHAR\nSTARTCHAR U_64D0\nENCODING 25808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFFE0\n2000\n2FE0\n3440\nE7C0\n2520\n2CC0\nB540\n6620\nENDCHAR\nSTARTCHAR U_64D1\nENCODING 25809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4EC0\nEAA0\n5FE0\n4A80\n6EA0\nCAA0\n4EC0\n4AA0\n5F60\nC220\nENDCHAR\nSTARTCHAR U_64D2\nENCODING 25810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n2540\nFFE0\n2AA0\n2920\n3FE0\nE100\n2FE0\n2AA0\n2BA0\nE860\nENDCHAR\nSTARTCHAR U_64D3\nENCODING 25811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n5A40\n57E0\nFA40\n57E0\n7240\nD7E0\n5A40\n5BE0\n5200\nDFE0\nENDCHAR\nSTARTCHAR U_64D4\nENCODING 25812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2480\nFFE0\n2AA0\n2FE0\n3800\nEBE0\n2800\n2BE0\nB220\n63E0\nENDCHAR\nSTARTCHAR U_64D5\nENCODING 25813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n2FE0\nF900\n2FC0\n3900\n6FE0\nA000\n2EE0\n2AA0\nABA0\n4860\nENDCHAR\nSTARTCHAR U_64D6\nENCODING 25814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFC0\n2440\n27C0\n3440\nEFE0\n2920\n2AA0\nAFA0\n60C0\nENDCHAR\nSTARTCHAR U_64D7\nENCODING 25815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E40\n2BE0\nFAA0\n2E40\n29E0\n3E40\nEA40\n2AE0\n2A40\nAE40\n6A40\nENDCHAR\nSTARTCHAR U_64D8\nENCODING 25816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n7D40\n67E0\nBC80\n7FC0\n0200\n3FC0\n0200\n7FE0\n0600\nENDCHAR\nSTARTCHAR U_64D9\nENCODING 25817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\nFD40\n2A40\n2FC0\n3A40\nED40\n2AC0\n3FE0\nA480\n7860\nENDCHAR\nSTARTCHAR U_64DA\nENCODING 25818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n4200\nFFE0\n52A0\n5300\n7FE0\nD540\n5A80\n55C0\n52A0\nE5A0\nENDCHAR\nSTARTCHAR U_64DB\nENCODING 25819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\nF540\n2FE0\n25C0\n3400\nE7E0\n2100\n3FE0\nA540\n7920\nENDCHAR\nSTARTCHAR U_64DC\nENCODING 25820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n5F40\nE460\n5F40\n7BE0\n5540\nDF40\n5540\n5F40\n55A0\nD520\nENDCHAR\nSTARTCHAR U_64DD\nENCODING 25821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2EA0\nFAE0\n2EA0\n3AE0\n6EA0\nA140\n2FE0\n2AA0\nAAA0\n5FE0\nENDCHAR\nSTARTCHAR U_64DE\nENCODING 25822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3580\n2E80\nFFE0\n24A0\n3EA0\n65A0\nBFA0\n2AA0\n2E40\n25A0\n6920\nENDCHAR\nSTARTCHAR U_64DF\nENCODING 25823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4540\nE920\n5FE0\n4DA0\n6B60\nCDA0\n4DA0\n4B60\n4DA0\nC960\nENDCHAR\nSTARTCHAR U_64E0\nENCODING 25824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n2540\n2D60\n3540\nE440\n27C0\n2440\nA7C0\n6840\nENDCHAR\nSTARTCHAR U_64E1\nENCODING 25825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF100\n2380\n2FE0\n3820\n67C0\nA280\n27C0\nA100\n4FE0\nENDCHAR\nSTARTCHAR U_64E2\nENCODING 25826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n25A0\nF360\n2DA0\n27E0\n3500\nEFC0\n3500\n27C0\nA500\n67E0\nENDCHAR\nSTARTCHAR U_64E3\nENCODING 25827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF100\n27E0\n2120\n37C0\nE000\n3FE0\n2A40\nAF40\n60C0\nENDCHAR\nSTARTCHAR U_64E4\nENCODING 25828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF7C0\n2440\n2FE0\n3920\nEFE0\n2920\n2FE0\nA480\n6880\nENDCHAR\nSTARTCHAR U_64E5\nENCODING 25829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\nA3E0\nF480\n97E0\nA4A0\nFFE0\n0000\n7FC0\n0400\n7FE0\n0400\nENDCHAR\nSTARTCHAR U_64E6\nENCODING 25830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3FE0\nF4A0\n2BA0\n3440\n2BA0\nF000\n2FE0\n2540\n2920\nF320\nENDCHAR\nSTARTCHAR U_64E7\nENCODING 25831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n68C0\n4E40\n62C0\n4A40\nFFE0\n2080\n5F40\n8420\n7FC0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_64E8\nENCODING 25832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2BE0\nFAA0\n2FC0\n2AC0\n3E40\nEBC0\n2840\n2F40\nB5A0\n6920\nENDCHAR\nSTARTCHAR U_64E9\nENCODING 25833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFFE0\n2920\n2380\n3540\nEFE0\n2100\n2FE0\nAAA0\n6860\nENDCHAR\nSTARTCHAR U_64EA\nENCODING 25834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n54A0\n5FE0\n5480\n5D40\n5620\n5F80\n4200\n5FE0\n8200\n8600\nENDCHAR\nSTARTCHAR U_64EB\nENCODING 25835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2940\nFF60\n2940\n2FE0\n3940\nEF40\n2940\n2F40\nB9A0\n6B20\nENDCHAR\nSTARTCHAR U_64EC\nENCODING 25836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BE0\n2CA0\nF840\n2E40\n39E0\n2E40\nE560\n3F40\n2540\nAAC0\n7260\nENDCHAR\nSTARTCHAR U_64ED\nENCODING 25837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2240\nF480\n27E0\n2C80\n37C0\nE480\n2FE0\n2240\nA180\n6E60\nENDCHAR\nSTARTCHAR U_64EE\nENCODING 25838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4EC0\nE4A0\n5FE0\n5A80\n6FA0\nDAA0\n6F40\n4AA0\n4F60\nC820\nENDCHAR\nSTARTCHAR U_64EF\nENCODING 25839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n27C0\n2940\n37C0\nEC40\n27C0\n2440\nA7C0\n6C60\nENDCHAR\nSTARTCHAR U_64F0\nENCODING 25840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n27C0\n2820\n3FE0\nEAA0\n2FE0\n2100\nA500\n6200\nENDCHAR\nSTARTCHAR U_64F1\nENCODING 25841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\n2AA0\n2FE0\n3AA0\nED20\n2AA0\n2FE0\nAAA0\n6BE0\nENDCHAR\nSTARTCHAR U_64F2\nENCODING 25842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AE0\n2FA0\nF4A0\n2FA0\n2AC0\n3DA0\nEFA0\n24A0\n3FE0\nA480\n7B80\nENDCHAR\nSTARTCHAR U_64F3\nENCODING 25843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2FE0\nF440\n2EE0\n2AA0\n3EA0\nEAA0\n2EA0\n2AA0\nAEE0\n7880\nENDCHAR\nSTARTCHAR U_64F4\nENCODING 25844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF940\n2FE0\n2940\n3FE0\nEAA0\n2BE0\n2AA0\nABE0\n5620\nENDCHAR\nSTARTCHAR U_64F5\nENCODING 25845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\nF240\n5FE0\n56E0\n7B40\nD7C0\n5100\n5FE0\n5100\nE300\nENDCHAR\nSTARTCHAR U_64F6\nENCODING 25846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\nFD40\n2280\n3FE0\n6020\nAEA0\n2AA0\n2EA0\n2AA0\n6A60\nENDCHAR\nSTARTCHAR U_64F7\nENCODING 25847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n2480\nFFE0\n2520\n2FE0\n3120\nEFE0\n2B20\n2BE0\n2EC0\n6120\nENDCHAR\nSTARTCHAR U_64F8\nENCODING 25848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2A80\nF540\n2FE0\n2AA0\n3FE0\nEB60\n2DA0\n2B60\nA920\n6DA0\nENDCHAR\nSTARTCHAR U_64F9\nENCODING 25849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A80\n5F80\nEAE0\n5F20\n5540\n7F40\nC440\n5F40\n44A0\nCAA0\n5120\nENDCHAR\nSTARTCHAR U_64FA\nENCODING 25850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFFE0\n2AA0\n3DC0\n2A80\nEE60\n2AA0\n2EC0\nAAA0\n6AE0\nENDCHAR\nSTARTCHAR U_64FB\nENCODING 25851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2F80\nFAE0\n3FA0\n2AA0\n3FA0\nEAA0\n3FA0\n2A40\nA6A0\n7920\nENDCHAR\nSTARTCHAR U_64FC\nENCODING 25852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2480\nFFE0\n2920\n2FE0\n3920\nEFE0\n2AA0\n27C0\nA440\n67C0\nENDCHAR\nSTARTCHAR U_64FD\nENCODING 25853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n2BC0\nFAA0\n2FE0\n2A80\n3FE0\nE100\n2FE0\n2380\nA540\n6920\nENDCHAR\nSTARTCHAR U_64FE\nENCODING 25854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2240\nF3C0\n2240\n2FE0\n3AA0\nEA20\n27E0\n2A40\nA180\n6E60\nENDCHAR\nSTARTCHAR U_64FF\nENCODING 25855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n57E0\nEA40\n4FE0\n6920\nFFE0\n5AA0\n5AA0\n5BA0\nD860\n6FE0\nENDCHAR\nSTARTCHAR U_6500\nENCODING 25856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A80\nF5E0\n4A80\nF5C0\n4AA0\nFFE0\n1500\n3F80\nC460\n3F80\n0C00\nENDCHAR\nSTARTCHAR U_6501\nENCODING 25857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF100\n2FE0\n2440\n3FE0\nE440\n27C0\n24A0\nA440\n6720\nENDCHAR\nSTARTCHAR U_6502\nENCODING 25858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4540\nF7C0\n5540\n67C0\n4000\nDFE0\n52A0\n5FE0\n52A0\nDFE0\nENDCHAR\nSTARTCHAR U_6503\nENCODING 25859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n27E0\n2940\n3680\nEBE0\n2000\n2FE0\nA540\n7B20\nENDCHAR\nSTARTCHAR U_6504\nENCODING 25860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2100\nFFE0\n2920\n3FE0\n2D40\nEFC0\n2D40\n2FC0\nB6A0\n6BE0\nENDCHAR\nSTARTCHAR U_6505\nENCODING 25861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2FE0\n3540\n6FE0\nA540\n26C0\n2540\n27C0\n6C60\nENDCHAR\nSTARTCHAR U_6506\nENCODING 25862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2480\nFFE0\n2A40\n3120\n3FE0\nE540\n27C0\n2540\nAFE0\n6100\nENDCHAR\nSTARTCHAR U_6507\nENCODING 25863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF920\n27C0\n2100\n3FE0\nEAA0\n2FE0\n2540\nACA0\n73A0\nENDCHAR\nSTARTCHAR U_6508\nENCODING 25864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n5FE0\nF540\n5FC0\n5500\n77C0\nD520\n5FE0\n5700\n6A80\nD260\nENDCHAR\nSTARTCHAR U_6509\nENCODING 25865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nFFE0\n2AA0\n27E0\n3500\nEFC0\n3500\n27C0\nA500\n67E0\nENDCHAR\nSTARTCHAR U_650A\nENCODING 25866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4B60\nEA40\n4FE0\n4AC0\n6F60\n4A40\nC880\n52E0\n5280\nEFE0\nENDCHAR\nSTARTCHAR U_650B\nENCODING 25867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5EE0\nE540\n5FE0\n5520\n7FE0\nCD20\n57E0\n6520\n45E0\nC4A0\nENDCHAR\nSTARTCHAR U_650C\nENCODING 25868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFFE0\n2820\n2FE0\n3AA0\nEBA0\n2960\n2EA0\nAA60\n6FE0\nENDCHAR\nSTARTCHAR U_650D\nENCODING 25869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF400\n27E0\n2440\n37C0\nEA60\n2FA0\n2AE0\nAF20\n6AA0\nENDCHAR\nSTARTCHAR U_650E\nENCODING 25870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2200\nFFE0\n2A20\n2FE0\n3940\nEFC0\n2940\n3FE0\nAAA0\n6FE0\nENDCHAR\nSTARTCHAR U_650F\nENCODING 25871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n2F80\nFAE0\n2420\n2FE0\n3A80\nEEE0\n2A80\n2EE0\nAAA0\n6AE0\nENDCHAR\nSTARTCHAR U_6510\nENCODING 25872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n27C0\n2280\n3FE0\nE540\n2BA0\n22C0\n2E40\n6320\nENDCHAR\nSTARTCHAR U_6511\nENCODING 25873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n2DE0\n2920\nFFE0\n2AA0\n3FE0\n2540\n6FE0\nB100\n2FE0\n6100\nENDCHAR\nSTARTCHAR U_6512\nENCODING 25874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n2FE0\nF240\n2FE0\n2A40\n3560\nEFE0\n2920\n2920\n2280\nCC60\nENDCHAR\nSTARTCHAR U_6513\nENCODING 25875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n27C0\n2280\n3FE0\nECC0\n37A0\n25E0\nA500\n7BE0\nENDCHAR\nSTARTCHAR U_6514\nENCODING 25876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\n2AA0\n2EE0\n3920\nEFE0\n2AA0\n2FE0\n2BA0\nED60\nENDCHAR\nSTARTCHAR U_6515\nENCODING 25877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AC0\n55A0\nFFE0\n4A80\n5B80\n6AA0\nDBA0\n4AC0\n5BA0\nCA60\n5F20\nENDCHAR\nSTARTCHAR U_6516\nENCODING 25878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\n2AA0\n2EE0\n3440\nEAA0\n2FE0\n2480\nA380\n6C60\nENDCHAR\nSTARTCHAR U_6517\nENCODING 25879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n2FE0\n2AA0\n3CC0\nEBE0\n2D40\n3FE0\nA540\n6920\nENDCHAR\nSTARTCHAR U_6518\nENCODING 25880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\nEAA0\n4EE0\n4480\n6FE0\nC480\n5FE0\n4D40\n5480\nC660\nENDCHAR\nSTARTCHAR U_6519\nENCODING 25881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2480\nFFE0\n2420\n2FE0\n34A0\nE7E0\n2540\n27C0\nA120\n6EE0\nENDCHAR\nSTARTCHAR U_651A\nENCODING 25882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n4EE0\n4440\nFAA0\n4FE0\n6820\n4780\nC480\n4FC0\n4840\nCFC0\nENDCHAR\nSTARTCHAR U_651B\nENCODING 25883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\nF4A0\n4EC0\n4840\n6FC0\nC940\n56C0\n5B40\n56C0\nDB20\nENDCHAR\nSTARTCHAR U_651C\nENCODING 25884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2920\nFFE0\n2500\n2FE0\n3500\nEFE0\n2AA0\n2FE0\nAAA0\n6BA0\nENDCHAR\nSTARTCHAR U_651D\nENCODING 25885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2440\nF7C0\n2440\n2FE0\n3040\nEFE0\n2AA0\n2EE0\nAAA0\n7FE0\nENDCHAR\nSTARTCHAR U_651E\nENCODING 25886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4AA0\nEFE0\n4A40\n77E0\n5A40\nCBE0\n5E40\n43E0\n6A40\nD7E0\nENDCHAR\nSTARTCHAR U_651F\nENCODING 25887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n5FE0\nF540\n5FC0\n54A0\n77E0\nD4A0\n57E0\n55A0\nD6E0\n67E0\nENDCHAR\nSTARTCHAR U_6520\nENCODING 25888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFA40\n2FE0\n2A40\n3FE0\nEA80\n2EE0\n2A80\nAEE0\n7280\nENDCHAR\nSTARTCHAR U_6521\nENCODING 25889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2580\n3F40\nF5E0\n2B40\n35E0\nFF40\n2940\n3FE0\n2B40\nED40\n23E0\nENDCHAR\nSTARTCHAR U_6522\nENCODING 25890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n2FE0\nF240\n2FE0\n2AA0\n37C0\nE440\n27C0\n2440\nA7C0\n6C60\nENDCHAR\nSTARTCHAR U_6523\nENCODING 25891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5FA0\nE040\n5FE0\nF940\n2FA0\n5200\n3FC0\n0200\n7FE0\n0600\nENDCHAR\nSTARTCHAR U_6524\nENCODING 25892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AC0\n5F40\nEBE0\n4540\n5FE0\n7540\nDF40\n45E0\n5F40\n4D40\nD3E0\nENDCHAR\nSTARTCHAR U_6525\nENCODING 25893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n3540\nF7C0\n2440\n37C0\n6440\nBFE0\n2AA0\n2FC0\nA540\n7B20\nENDCHAR\nSTARTCHAR U_6526\nENCODING 25894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2000\nFEE0\n2AA0\n2FE0\n3AA0\nEFE0\n2CA0\n2EC0\nB4A0\n66E0\nENDCHAR\nSTARTCHAR U_6527\nENCODING 25895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n5C80\nE9E0\n5D20\n55E0\n7D20\n55E0\nDD20\n55E0\n7EA0\nD520\nENDCHAR\nSTARTCHAR U_6528\nENCODING 25896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n5FE0\nF4A0\n4FC0\n5A80\n6B40\n4AA0\nFFE0\n5540\n59A0\nD540\nENDCHAR\nSTARTCHAR U_6529\nENCODING 25897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\nFAA0\n2280\n2FE0\n3AA0\nEFE0\n2100\n2FE0\nA540\n6AA0\nENDCHAR\nSTARTCHAR U_652A\nENCODING 25898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2D60\n2AA0\nFD60\n2AA0\n3FE0\n2C60\nE7C0\n2440\n27C0\nA2A0\n7CE0\nENDCHAR\nSTARTCHAR U_652B\nENCODING 25899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2EE0\nFAA0\n2FE0\n2900\n3FE0\nE900\n2FE0\n2440\n2380\nDC60\nENDCHAR\nSTARTCHAR U_652C\nENCODING 25900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2B40\nFFE0\n2AA0\n2FE0\n3440\nE7C0\n2440\n27C0\nA2A0\n6CE0\nENDCHAR\nSTARTCHAR U_652D\nENCODING 25901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\n2480\nFFE0\n2540\n3B80\n2540\nFFE0\n2AA0\n3FE0\nAAA0\n7DE0\nENDCHAR\nSTARTCHAR U_652E\nENCODING 25902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\nFFE0\n2920\n3FE0\n2480\nEFC0\n2480\n3FE0\nACA0\n7660\nENDCHAR\nSTARTCHAR U_652F\nENCODING 25903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0400\n3F80\n1100\n1100\n0A00\n0400\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_6530\nENCODING 25904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2120\nF920\n8920\n4920\n5220\n22A0\n5440\n8FE0\nENDCHAR\nSTARTCHAR U_6531\nENCODING 25905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n0100\n97C0\n5440\n5440\n2280\n1900\nE280\n1C60\nENDCHAR\nSTARTCHAR U_6532\nENCODING 25906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFC80\n53E0\n8880\nFFE0\n0A20\nE940\nA940\nE880\n0940\n3A20\nENDCHAR\nSTARTCHAR U_6533\nENCODING 25907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2020\nFBE0\n2020\nFFE0\n52A0\n5FE0\n5440\n22C0\n5800\n87E0\nENDCHAR\nSTARTCHAR U_6534\nENCODING 25908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n07C0\n0400\n0400\n7FC0\n1080\n1100\n0A00\n0400\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_6535\nENCODING 25909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n1FC0\n2100\n2100\n5100\n8A00\n0400\n0A00\n1180\nE060\nENDCHAR\nSTARTCHAR U_6536\nENCODING 25910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n93E0\n9440\n9A40\n9240\nB280\nD100\n9180\n1240\n1420\nENDCHAR\nSTARTCHAR U_6537\nENCODING 25911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFA00\n43E0\n4440\n8A40\nF280\n1280\n1100\n1100\nA280\n4C60\nENDCHAR\nSTARTCHAR U_6538\nENCODING 25912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n21E0\n2A40\n6E40\nAA40\n2940\n2940\n2080\n2340\n2C20\nENDCHAR\nSTARTCHAR U_6539\nENCODING 25913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n0BE0\n0C40\n7A40\n4240\n4240\n4180\n5180\n6240\n4C20\nENDCHAR\nSTARTCHAR U_653A\nENCODING 25914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n93E0\n9440\nF440\n8A80\n8100\n9100\nA280\nC440\n9820\nENDCHAR\nSTARTCHAR U_653B\nENCODING 25915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0200\nFA00\n27E0\n2440\n2C40\n2280\n3900\nC280\n0440\n1820\nENDCHAR\nSTARTCHAR U_653C\nENCODING 25916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFA00\n23E0\n2240\n2440\nFA80\n2280\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_653D\nENCODING 25917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5100\n4900\n4BE0\n8640\n7A40\n2940\n2940\n2880\n4940\n9A20\nENDCHAR\nSTARTCHAR U_653E\nENCODING 25918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n1100\nFDE0\n2240\n2540\n3940\n2940\n2880\n4980\n4A40\n9420\nENDCHAR\nSTARTCHAR U_653F\nENCODING 25919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFD00\n11E0\n1340\n5D40\n5140\n5140\n5080\n5C80\nE140\n0620\nENDCHAR\nSTARTCHAR U_6540\nENCODING 25920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n43E0\nF240\n9240\n9440\nFA40\n9280\n9100\nF280\n0440\n0820\nENDCHAR\nSTARTCHAR U_6541\nENCODING 25921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\n3900\n2100\n27C0\nFA40\n8A40\n8940\n8880\nF940\n0620\nENDCHAR\nSTARTCHAR U_6542\nENCODING 25922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2100\n7DE0\n8520\n7620\n5520\n5520\n7540\n0480\n1540\n0A20\nENDCHAR\nSTARTCHAR U_6543\nENCODING 25923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8900\n89E0\nFB40\n9140\nFD40\n9140\n9140\n9480\nAD40\nC620\nENDCHAR\nSTARTCHAR U_6544\nENCODING 25924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n0900\n53E0\n2240\nFC40\n2A40\n6280\nA180\n2100\n2280\n6C60\nENDCHAR\nSTARTCHAR U_6545\nENCODING 25925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\nFDE0\n1140\n1240\n7D40\n4940\n4880\n4880\n7940\n4E20\nENDCHAR\nSTARTCHAR U_6546\nENCODING 25926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n2880\n44E0\n8080\n3BE0\n0120\n7D20\n44C0\n4480\n7D40\n4620\nENDCHAR\nSTARTCHAR U_6547\nENCODING 25927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFE80\n10E0\n7D20\n5620\n5540\n5D40\n1080\n3880\n5540\n9220\nENDCHAR\nSTARTCHAR U_6548\nENCODING 25928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n1100\nFDE0\n2B40\n4540\n8940\n2940\n1080\n2880\n4140\n8620\nENDCHAR\nSTARTCHAR U_6549\nENCODING 25929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA900\n71E0\n2340\nFD40\n2140\n7140\n6940\nA080\n2340\n2C20\nENDCHAR\nSTARTCHAR U_654A\nENCODING 25930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1CE0\n1080\nFFE0\n1220\n1220\n5940\n5540\n9480\n1140\n3220\nENDCHAR\nSTARTCHAR U_654B\nENCODING 25931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7A00\n8BE0\n5240\n2240\n5440\n8240\n7A80\n4900\n4A80\n7C60\nENDCHAR\nSTARTCHAR U_654C\nENCODING 25932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nE100\n21E0\nFA40\n2540\n2140\nF940\n8880\n8880\nF940\n8E20\nENDCHAR\nSTARTCHAR U_654D\nENCODING 25933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n51C0\n8900\n7100\n27C0\nFA40\n2280\n7100\nAA80\n6460\nENDCHAR\nSTARTCHAR U_654E\nENCODING 25934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n2100\nD900\n23E0\nFA40\n4440\nBA80\n1280\nF900\n1280\n3460\nENDCHAR\nSTARTCHAR U_654F\nENCODING 25935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7D00\n81E0\n7F40\n5540\nFF40\n5540\n5540\nFE80\n0540\n1A20\nENDCHAR\nSTARTCHAR U_6550\nENCODING 25936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n8100\nB9E0\n8240\nFE40\nA140\nB540\nA880\nA480\nB540\nA220\nENDCHAR\nSTARTCHAR U_6551\nENCODING 25937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\n1500\nFDE0\n1240\n5540\n3940\n5540\n9480\n1080\n1140\n3220\nENDCHAR\nSTARTCHAR U_6552\nENCODING 25938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n4880\n7EE0\n6B20\nFF20\n6AA0\n7EA0\n4840\n4840\n4840\n49A0\nENDCHAR\nSTARTCHAR U_6553\nENCODING 25939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2900\n7DE0\n4640\n4540\n7D40\n2940\n2940\n2A80\n4D40\n8A20\nENDCHAR\nSTARTCHAR U_6554\nENCODING 25940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n1100\n79E0\n2B40\n2940\nFD40\n0140\n7D40\n4480\n7D40\n4620\nENDCHAR\nSTARTCHAR U_6555\nENCODING 25941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFD00\n11E0\n7E40\n5540\n7D40\n1140\n3940\n5480\n9140\n1220\nENDCHAR\nSTARTCHAR U_6556\nENCODING 25942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFD00\n11E0\n7E40\n1140\nFD40\n2140\n3D40\n2480\n4540\n9A20\nENDCHAR\nSTARTCHAR U_6557\nENCODING 25943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n4500\n7DE0\n4740\n7D40\n4540\n7D40\n4540\n2880\n4540\n8620\nENDCHAR\nSTARTCHAR U_6558\nENCODING 25944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2900\n45E0\nBB40\n1140\n7D40\n1140\n5940\n5480\n9340\n3220\nENDCHAR\nSTARTCHAR U_6559\nENCODING 25945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\nFD00\n29E0\nFF40\n1140\n7D40\n4940\n9D40\n7080\n1140\n7220\nENDCHAR\nSTARTCHAR U_655A\nENCODING 25946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5100\nFBE0\n8E40\n8A40\nFA80\n5280\n5100\n5A80\n5240\n8C20\nENDCHAR\nSTARTCHAR U_655B\nENCODING 25947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2900\n45E0\nBB40\n0140\n2540\n9540\n4940\n4080\n1D40\nE220\nENDCHAR\nSTARTCHAR U_655C\nENCODING 25948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2900\n65E0\n9240\n7E40\n0940\n1140\n2880\n6280\nA540\n3E20\nENDCHAR\nSTARTCHAR U_655D\nENCODING 25949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA500\n6900\n21E0\nFD40\nA740\nB540\nED40\nA540\nA480\nA540\n8E20\nENDCHAR\nSTARTCHAR U_655E\nENCODING 25950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9500\n5900\n11E0\nFD40\n8740\nBD40\nAD40\nAC80\nBC80\n8540\n8E20\nENDCHAR\nSTARTCHAR U_655F\nENCODING 25951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n2900\nFFE0\nAA40\nFE40\nAA40\nAB40\nFE80\n0080\n4540\n8220\nENDCHAR\nSTARTCHAR U_6560\nENCODING 25952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n2480\nB4E0\n4880\nB480\n03E0\nFD20\n2540\nB480\n4940\nB620\nENDCHAR\nSTARTCHAR U_6561\nENCODING 25953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n4480\n7CE0\n4480\n7FE0\n2220\n7D20\nAD40\n5480\nA540\n4E20\nENDCHAR\nSTARTCHAR U_6562\nENCODING 25954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n1100\nFDE0\n4B40\n7940\n4940\n7940\n4940\n5C80\nE940\n0A20\nENDCHAR\nSTARTCHAR U_6563\nENCODING 25955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n7D00\n29E0\nFF40\n4940\n7940\n4940\n7940\n4880\n4940\n5A20\nENDCHAR\nSTARTCHAR U_6564\nENCODING 25956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA8E0\nF880\nABE0\nFA20\n2220\nFD40\n3140\n6880\nA540\n2220\nENDCHAR\nSTARTCHAR U_6565\nENCODING 25957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA880\nA8E0\n3080\n4BE0\nA620\n2220\nA940\nA940\n5080\n4940\n8620\nENDCHAR\nSTARTCHAR U_6566\nENCODING 25958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFD00\n49E0\n7B40\n0140\nFD40\n1140\nFD40\n1080\n5140\n2220\nENDCHAR\nSTARTCHAR U_6567\nENCODING 25959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFCE0\n3080\n4880\nFFE0\n0940\nE940\nA940\nE880\n0940\n3A20\nENDCHAR\nSTARTCHAR U_6568\nENCODING 25960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n1100\nFDE0\n4B40\n3140\nFD40\n0140\n7940\n4880\n7940\n4A20\nENDCHAR\nSTARTCHAR U_6569\nENCODING 25961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n9500\n4900\nFEE0\n8240\n7D40\n0940\nFC80\n1080\n1140\n3220\nENDCHAR\nSTARTCHAR U_656A\nENCODING 25962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\nB480\n48E0\nB480\n03E0\nFD40\n2540\nB540\n4880\nB540\n2620\nENDCHAR\nSTARTCHAR U_656B\nENCODING 25963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7D00\n45E0\n7F40\n4540\n7D40\n2140\nFF40\n2880\n4940\n9A20\nENDCHAR\nSTARTCHAR U_656C\nENCODING 25964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\nFD00\n29E0\n4340\n7D40\n8540\n7540\n5540\n7480\n0540\n1A20\nENDCHAR\nSTARTCHAR U_656D\nENCODING 25965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA900\n99E0\nFA40\n0140\nFD40\n4140\nFC80\n5480\nA540\n4E20\nENDCHAR\nSTARTCHAR U_656E\nENCODING 25966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C80\n7080\n10E0\nFE80\n11E0\n5720\n92A0\nD6C0\n9240\nFEA0\n0120\nENDCHAR\nSTARTCHAR U_656F\nENCODING 25967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n8480\nFCE0\n9080\nFFE0\n8940\n7D40\n4540\n7C80\n4540\n7E20\nENDCHAR\nSTARTCHAR U_6570\nENCODING 25968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9500\n5900\nFDE0\n3340\n5940\n9540\nFD40\n2940\n6880\n1140\nEE20\nENDCHAR\nSTARTCHAR U_6571\nENCODING 25969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA880\nF8E0\n0080\nF880\n03E0\nFA20\n8A40\nF940\n9080\n5940\nE620\nENDCHAR\nSTARTCHAR U_6572\nENCODING 25970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFEE0\n0080\n7880\n4BE0\n7940\n0140\nFF40\nAA80\nBB40\n8620\nENDCHAR\nSTARTCHAR U_6573\nENCODING 25971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9500\n9500\nFDE0\n0340\nF940\n0140\nF940\n8940\nF880\n5140\nFA20\nENDCHAR\nSTARTCHAR U_6574\nENCODING 25972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5540\n7C80\n3940\n5620\n7FC0\n0400\n2780\n2400\nFFE0\nENDCHAR\nSTARTCHAR U_6575\nENCODING 25973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFF00\n29E0\nFF40\n9240\nFE40\n9240\nBB40\nAA80\nBB40\n8220\nENDCHAR\nSTARTCHAR U_6576\nENCODING 25974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE480\nBF80\nA4E0\nBF20\nD520\nBF20\nB5C0\nFE40\n8C40\n96A0\nA520\nENDCHAR\nSTARTCHAR U_6577\nENCODING 25975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF00\n5100\n7FE0\n5240\n7E40\n5240\nFE40\n2140\n3C80\n2540\nCA20\nENDCHAR\nSTARTCHAR U_6578\nENCODING 25976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7D00\n55E0\nFF40\n5540\nFD40\n9540\nFF40\n2880\n1940\nE620\nENDCHAR\nSTARTCHAR U_6579\nENCODING 25977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1D00\n1100\nFDE0\n8740\n7D40\n9540\n5940\nFD40\n3880\n5540\n9220\nENDCHAR\nSTARTCHAR U_657A\nENCODING 25978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\n80E0\nBC80\nA480\nBFE0\n8140\nEF40\nAB40\nEE80\n8140\nFE20\nENDCHAR\nSTARTCHAR U_657B\nENCODING 25979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n2200\nFFE0\n4920\n7FE0\n2C40\n2340\n1F80\n6880\n0F00\nF0E0\nENDCHAR\nSTARTCHAR U_657C\nENCODING 25980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFE80\n10E0\nFE80\n45E0\n7D40\n2940\nFF40\n4480\n7D40\n4620\nENDCHAR\nSTARTCHAR U_657D\nENCODING 25981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n2080\nFCE0\n4880\nFC80\n4BE0\nFD20\nD540\nF480\n8540\n8E20\nENDCHAR\nSTARTCHAR U_657E\nENCODING 25982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5100\nF9E0\n2240\nFE40\n2940\nFD40\n0080\nF880\n8940\nFA20\nENDCHAR\nSTARTCHAR U_657F\nENCODING 25983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n1100\nFDE0\n2740\n7D40\nA540\nFF40\nAB40\nBA80\n8340\n8620\nENDCHAR\nSTARTCHAR U_6580\nENCODING 25984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\nAA80\nFEE0\n2080\n7FE0\nA2A0\nFAA0\nAAA0\nFA40\n2AA0\nF520\nENDCHAR\nSTARTCHAR U_6581\nENCODING 25985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\nAA80\nFFE0\n1140\nFF40\n2940\nFD40\n1140\nFE80\n1140\n1220\nENDCHAR\nSTARTCHAR U_6582\nENCODING 25986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\n2500\n7DE0\n8340\n7D40\n5540\n7D40\n2940\n2880\n5540\n9220\nENDCHAR\nSTARTCHAR U_6583\nENCODING 25987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9280\n55E0\nFF20\nBAC0\nD720\n9220\nFFE0\n4640\nAB80\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_6584\nENCODING 25988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\n1340\nFC80\n5540\nFFE0\n4200\n7FE0\n5240\n6FA0\n4A80\nB260\nENDCHAR\nSTARTCHAR U_6585\nENCODING 25989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6680\n5AE0\n6680\n5A80\nFFE0\n8220\n7940\n1080\n7D40\n1160\n3240\nENDCHAR\nSTARTCHAR U_6586\nENCODING 25990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6C80\n5480\n6DE0\n5520\nFF20\n82A0\n38A0\n1040\n7C40\n10A0\n3320\nENDCHAR\nSTARTCHAR U_6587\nENCODING 25991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\nFFE0\n1100\n1100\n1100\n0A00\n0A00\n0400\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_6588\nENCODING 25992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n0E00\n3180\nDF60\n0200\n0400\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_6589\nENCODING 25993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n0E00\n3180\nE0E0\n3F80\n2080\n3F80\n2080\n4080\nENDCHAR\nSTARTCHAR U_658A\nENCODING 25994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n0E00\n3180\nFFE0\n2080\n3F80\n2080\nFFE0\n0080\nENDCHAR\nSTARTCHAR U_658B\nENCODING 25995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n0E00\nF1E0\n0000\nFFC0\n0400\n7FC0\n4A40\n4AC0\nENDCHAR\nSTARTCHAR U_658C\nENCODING 25996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n27A0\nF080\n1FE0\n9280\n5280\n2B80\n3AA0\n4BA0\n9C60\n0020\nENDCHAR\nSTARTCHAR U_658D\nENCODING 25997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n0E00\n3F80\nD160\n1F00\n1100\n1F00\n0A20\nF1E0\nENDCHAR\nSTARTCHAR U_658E\nENCODING 25998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n0E00\n3180\nDF60\n4040\n7FC0\n5540\n64C0\n8C40\nENDCHAR\nSTARTCHAR U_658F\nENCODING 25999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2080\nFFC0\n1440\n97C0\n5440\n27C0\n5520\n54C0\n8C80\n0660\nENDCHAR\nSTARTCHAR U_6590\nENCODING 26000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFBE0\n0A00\n7BC0\n0A00\nFBE0\n0400\nFFE0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_6591\nENCODING 26001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE9E0\n4440\n5F40\n4240\nEA40\n45E0\n4440\n4640\n6A40\nD040\n23E0\nENDCHAR\nSTARTCHAR U_6592\nENCODING 26002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\nFFE0\n2820\nAFE0\n6800\n2FE0\n2AA0\n5FE0\n8AA0\n0860\nENDCHAR\nSTARTCHAR U_6593\nENCODING 26003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n2A20\nF920\n2FE0\nA920\n6FE0\n2AA0\n2FE0\n5920\n8BA0\n0D60\nENDCHAR\nSTARTCHAR U_6594\nENCODING 26004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFEE0\n54A0\n24A0\nDEE0\n24A0\nFFE0\nA8A0\nF940\n2A20\nF420\nENDCHAR\nSTARTCHAR U_6595\nENCODING 26005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\nFEE0\n2AA0\nA920\n6FE0\n2AA0\n2FE0\n5920\n8BA0\n0D60\nENDCHAR\nSTARTCHAR U_6596\nENCODING 26006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\nF5E0\n5F40\n71C0\n5540\nFFE0\nA0A0\n3F80\n2080\nFFE0\nENDCHAR\nSTARTCHAR U_6597\nENCODING 26007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n0900\n0900\n2100\n1100\n1100\n01E0\nFF00\n0100\n0100\n0100\nENDCHAR\nSTARTCHAR U_6598\nENCODING 26008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2240\n3D40\n4440\n4A40\n6940\n9860\n17C0\n2040\n4040\n8040\nENDCHAR\nSTARTCHAR U_6599\nENCODING 26009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nAC80\n7280\n2080\nFC80\n2280\n30E0\n6F80\nA080\n2080\n2080\nENDCHAR\nSTARTCHAR U_659A\nENCODING 26010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5140\nFBE0\n0000\nFFE0\n9220\n0A00\n6600\n13E0\nFE00\n0200\nENDCHAR\nSTARTCHAR U_659B\nENCODING 26011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n7A40\n5140\nFC40\n5640\n7D40\n5460\n7DC0\n5440\n5440\n8C40\nENDCHAR\nSTARTCHAR U_659C\nENCODING 26012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\n2940\n44C0\nB840\n1240\n7D40\n1060\n55C0\n5240\n9240\n3040\nENDCHAR\nSTARTCHAR U_659D\nENCODING 26013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3DE0\n2520\n3DE0\n0000\n7FE0\n4920\n2500\n1100\n01E0\n7F00\n0100\nENDCHAR\nSTARTCHAR U_659E\nENCODING 26014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\nDD40\n94C0\nDC40\n9540\nFCC0\n1060\n2BC0\n2440\n4440\n8040\nENDCHAR\nSTARTCHAR U_659F\nENCODING 26015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\nFD40\n48C0\n7A40\n4940\n7940\n4860\nFFC0\nA840\nC440\nFE40\nENDCHAR\nSTARTCHAR U_65A0\nENCODING 26016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2940\nFEC0\n2840\n7D40\n28C0\nFE40\n5460\n7DC0\n5440\nFE40\n4C40\nENDCHAR\nSTARTCHAR U_65A1\nENCODING 26017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\nFA40\n2420\nF940\n88C0\nFA40\n8940\nF860\n27C0\nF840\n2040\nENDCHAR\nSTARTCHAR U_65A2\nENCODING 26018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2840\nFF40\n28C0\nFE40\n1140\n7CC0\n5460\n7DC0\n5440\n7C40\nC640\nENDCHAR\nSTARTCHAR U_65A3\nENCODING 26019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE40\nAB40\nFEC0\n4140\nFEC0\nA3E0\nFA40\nAA40\nFA40\n2640\nFA40\nENDCHAR\nSTARTCHAR U_65A4\nENCODING 26020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n3E00\n2000\n2000\n3FE0\n2100\n2100\n2100\n2100\n4100\n8100\nENDCHAR\nSTARTCHAR U_65A5\nENCODING 26021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n3E00\n2000\n2000\n3FE0\n2200\n2700\n2280\n2240\n4200\n8200\nENDCHAR\nSTARTCHAR U_65A6\nENCODING 26022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1860\n6180\n4100\n79E0\n5140\n5140\n5140\n5140\n5240\n9240\n9440\nENDCHAR\nSTARTCHAR U_65A7\nENCODING 26023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n1080\n6960\n0600\n1980\nE060\n1F80\n1000\n1FC0\n2100\n4100\nENDCHAR\nSTARTCHAR U_65A8\nENCODING 26024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4860\n4B80\n4A00\n7A00\n0BE0\nFA40\n4A40\n4A40\n4A40\n4A40\n8C40\nENDCHAR\nSTARTCHAR U_65A9\nENCODING 26025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nFB80\n4200\n5200\n93E0\nFA40\n1240\n1A40\nF240\n1440\n1840\nENDCHAR\nSTARTCHAR U_65AA\nENCODING 26026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n7B80\n8A00\n0A00\nEBE0\nAA40\nAA40\nEA40\n0A40\n4A40\n3440\nENDCHAR\nSTARTCHAR U_65AB\nENCODING 26027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0020\nFBC0\n2200\n2200\n7BE0\nCA40\n4A40\n4A40\n7C40\n4840\n1040\nENDCHAR\nSTARTCHAR U_65AC\nENCODING 26028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFF80\n2200\nFA00\nABE0\nFA40\nAA40\nFA40\n2240\nFA40\n2440\nENDCHAR\nSTARTCHAR U_65AD\nENCODING 26029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\nD580\nB900\n9100\nFDE0\nB140\nD940\nD540\n9140\nFA40\n0440\nENDCHAR\nSTARTCHAR U_65AE\nENCODING 26030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5040\n5380\nFE00\n5200\nFFE0\n0240\n7A40\n4A40\n7A40\n4A40\n7C40\nENDCHAR\nSTARTCHAR U_65AF\nENCODING 26031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4860\nFD80\n4900\n7900\n49E0\n7940\n4940\nFD40\n2940\n4640\n8440\nENDCHAR\nSTARTCHAR U_65B0\nENCODING 26032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\nFD80\n4500\n2900\nFDE0\n1140\nFD40\n1140\n5540\n9240\n3440\nENDCHAR\nSTARTCHAR U_65B1\nENCODING 26033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2580\nF500\n2900\nFDE0\n2140\n7940\nC940\n7A40\n4A40\n7C40\nENDCHAR\nSTARTCHAR U_65B2\nENCODING 26034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE60\nAB80\nEF00\n29E0\nED40\n8540\nED40\n2940\n2940\n3E40\nC240\nENDCHAR\nSTARTCHAR U_65B3\nENCODING 26035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2820\nFFC0\n2900\n2900\n7DE0\n5540\nFF40\n1140\n7D40\n1240\nFC40\nENDCHAR\nSTARTCHAR U_65B4\nENCODING 26036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9220\n54C0\nFE80\n5480\nB2E0\nA2A0\nEFA0\nAAA0\n6FA0\n42A0\n8320\nENDCHAR\nSTARTCHAR U_65B5\nENCODING 26037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nDE60\nAA80\nF280\n4480\nFCE0\n50A0\nDCA0\n84A0\nDD20\n5120\n7A20\nENDCHAR\nSTARTCHAR U_65B6\nENCODING 26038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nCAA0\n8FE0\n8400\nFFE0\nB220\nAFA0\nAAA0\nAFA0\nA2A0\nAF40\nENDCHAR\nSTARTCHAR U_65B7\nENCODING 26039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAA40\nFD80\n9500\nAB00\nFFE0\nA940\nAB40\nFD40\n9540\nAB40\nFE40\nENDCHAR\nSTARTCHAR U_65B8\nENCODING 26040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC20\n85C0\nFD00\nA9E0\nFD40\n9540\nFD40\nD540\nFD40\n9540\nFA40\nENDCHAR\nSTARTCHAR U_65B9\nENCODING 26041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\nFFE0\n0800\n0800\n0F80\n1080\n1080\n2080\n4080\n8700\nENDCHAR\nSTARTCHAR U_65BA\nENCODING 26042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1080\nFD40\n2140\n3A20\n2940\n2940\n4940\n4A40\nAA40\n9440\nENDCHAR\nSTARTCHAR U_65BB\nENCODING 26043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nFBE0\n4400\n7B80\n4A80\n4A80\n4A80\n4A80\n6AA0\n9460\nENDCHAR\nSTARTCHAR U_65BC\nENCODING 26044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1080\nFD40\n2140\n3A20\n2C80\n2840\n2840\n4900\n4880\n9840\nENDCHAR\nSTARTCHAR U_65BD\nENCODING 26045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n13E0\nFC00\n2080\n3AE0\n2BA0\n2EA0\n2AE0\n2A80\n4A20\n91E0\nENDCHAR\nSTARTCHAR U_65BE\nENCODING 26046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27E0\nFD00\n4900\n77E0\n5520\n5520\n5520\n55A0\nB540\n0100\nENDCHAR\nSTARTCHAR U_65BF\nENCODING 26047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n13E0\nFC00\n23E0\n3840\n2880\n2FE0\n2880\n4880\n6A80\n9100\nENDCHAR\nSTARTCHAR U_65C0\nENCODING 26048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFA40\n47E0\n7100\n5140\n5540\n5520\n5920\n9100\nB300\nENDCHAR\nSTARTCHAR U_65C1\nENCODING 26049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n0900\n7FE0\n4420\n0200\n7FE0\n0800\n0FC0\n1040\n6180\nENDCHAR\nSTARTCHAR U_65C2\nENCODING 26050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n13E0\nFC00\n2040\n3B80\n2A00\n2BE0\n2A40\n2A40\n4A40\n9440\nENDCHAR\nSTARTCHAR U_65C3\nENCODING 26051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n13E0\nFC00\n43C0\n7240\n5340\n52C0\n57E0\n5240\n9440\nA8C0\nENDCHAR\nSTARTCHAR U_65C4\nENCODING 26052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n13E0\nFC00\n20C0\n3B80\n28E0\n2B80\n28E0\n2F80\n48A0\n90E0\nENDCHAR\nSTARTCHAR U_65C5\nENCODING 26053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n13E0\nFE00\n24C0\n3B00\n2AA0\n2AC0\n2A80\n4A40\n4A40\n9B20\nENDCHAR\nSTARTCHAR U_65C6\nENCODING 26054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n13E0\nFC80\n27E0\n3880\n2BE0\n2AA0\n2AA0\n2AA0\n4AE0\n9080\nENDCHAR\nSTARTCHAR U_65C7\nENCODING 26055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\nF480\n4FE0\n44A0\n75C0\n5540\n5540\n5480\n9540\nBA20\nENDCHAR\nSTARTCHAR U_65C8\nENCODING 26056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27E0\nF900\n4240\n77E0\n5020\n5540\n5540\n5540\n9540\nA960\nENDCHAR\nSTARTCHAR U_65C9\nENCODING 26057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nFFE0\n4440\n7FC0\n4440\n7FC0\n54C0\nFFE0\n1080\n2080\nC300\nENDCHAR\nSTARTCHAR U_65CA\nENCODING 26058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\nFC00\n47E0\n4200\n7BC0\n4A40\n4B40\n4A40\n6B60\n9660\nENDCHAR\nSTARTCHAR U_65CB\nENCODING 26059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\nFC00\n47E0\n78A0\n4A80\n4AE0\n4A80\n4A80\nAD80\n90E0\nENDCHAR\nSTARTCHAR U_65CC\nENCODING 26060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n13E0\nFC00\n2280\n3BE0\n2C80\n2880\n2BE0\n2880\n4880\n97E0\nENDCHAR\nSTARTCHAR U_65CD\nENCODING 26061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\nFC80\n4140\n7A20\n4C80\n4FE0\n4840\n4A80\nA900\n9080\nENDCHAR\nSTARTCHAR U_65CE\nENCODING 26062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\nFC00\n47E0\n7420\n57E0\n5520\n5540\n5580\n9520\nA8E0\nENDCHAR\nSTARTCHAR U_65CF\nENCODING 26063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n13E0\nFC00\n2200\n3BE0\n2C80\n2880\n4FE0\n4880\nA940\n9620\nENDCHAR\nSTARTCHAR U_65D0\nENCODING 26064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n13E0\nFC00\n4280\n7AA0\n56C0\n5280\n56C0\n5AA0\n94A0\nA860\nENDCHAR\nSTARTCHAR U_65D1\nENCODING 26065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27E0\nF900\n4280\n77E0\n5040\n5740\n5540\n5740\n9040\n30C0\nENDCHAR\nSTARTCHAR U_65D2\nENCODING 26066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n13E0\nFD00\n47E0\n7240\n57A0\n5000\n5540\n5540\n9540\nA860\nENDCHAR\nSTARTCHAR U_65D3\nENCODING 26067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n13E0\nFEA0\n21C0\n3880\n2BE0\n2A20\n2BE0\n2A20\n4BE0\nB260\nENDCHAR\nSTARTCHAR U_65D4\nENCODING 26068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FC0\nF540\n47E0\n7540\n5BC0\n5500\n5500\n5FE0\n5500\nABE0\nENDCHAR\nSTARTCHAR U_65D5\nENCODING 26069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF980\n2240\n7DA0\n4900\n9880\n0200\n7A40\n4B80\n7A20\n4BE0\nENDCHAR\nSTARTCHAR U_65D6\nENCODING 26070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n17E0\nF900\n47E0\n7280\n5FE0\n5040\n5740\n5540\n9740\nA0C0\nENDCHAR\nSTARTCHAR U_65D7\nENCODING 26071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\nFA40\n47E0\n7240\n5340\n52C0\n5240\n5FE0\n9240\nAC20\nENDCHAR\nSTARTCHAR U_65D8\nENCODING 26072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8480\n5FC0\nEAA0\n5FE0\n7080\n57A0\n5540\n5740\n5540\n97A0\nA120\nENDCHAR\nSTARTCHAR U_65D9\nENCODING 26073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2F40\nF580\n4FE0\n4380\n7540\n57C0\n5540\n57C0\n9540\nA7C0\nENDCHAR\nSTARTCHAR U_65DA\nENCODING 26074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\nFE80\n4FE0\n7AA0\n4AA0\n4FE0\n4800\n4FE0\nAAC0\n95A0\nENDCHAR\nSTARTCHAR U_65DB\nENCODING 26075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\nFD40\n47E0\n7B40\n5520\n57C0\n5540\n57C0\n9540\nA7C0\nENDCHAR\nSTARTCHAR U_65DC\nENCODING 26076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n27E0\nF500\n4FE0\n76C0\n5540\n57C0\n5000\n57C0\nD540\n2FE0\nENDCHAR\nSTARTCHAR U_65DD\nENCODING 26077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\nFA80\n4440\n7FE0\n5AA0\n5FE0\n5240\n53C0\n9240\nA3C0\nENDCHAR\nSTARTCHAR U_65DE\nENCODING 26078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27E0\nF940\n47E0\n72A0\n5D40\n56C0\n5560\n5740\n9480\nABE0\nENDCHAR\nSTARTCHAR U_65DF\nENCODING 26079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\nF900\n4FE0\n7920\n4FE0\n4AA0\n4AA0\n4FE0\n9280\nAC60\nENDCHAR\nSTARTCHAR U_65E0\nENCODING 26080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n0400\n0400\nFFE0\n0A00\n0A00\n1200\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_65E1\nENCODING 26081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n0200\n2200\n2200\n7FE0\n0400\n0600\n0A00\n1220\n2220\n41E0\nENDCHAR\nSTARTCHAR U_65E2\nENCODING 26082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4880\n4A80\n7A80\n4FE0\n7880\n5080\n4980\n56A0\n64A0\n4860\nENDCHAR\nSTARTCHAR U_65E3\nENCODING 26083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\nF7C0\n9100\nF500\n97E0\nF100\n8300\nE300\n8520\nA520\nC8E0\nENDCHAR\nSTARTCHAR U_65E4\nENCODING 26084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\n4880\n6A80\n6A80\nFFE0\n8480\nF480\nD480\nF5A0\n86A0\n8CE0\nENDCHAR\nSTARTCHAR U_65E5\nENCODING 26085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n3F80\n2080\n2080\n2080\n3F80\n2080\n2080\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_65E6\nENCODING 26086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n3F80\n2080\n2080\n3F80\n2080\n2080\n3F80\n2080\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_65E7\nENCODING 26087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n4FC0\n4840\n4840\n4840\n4FC0\n4840\n4840\n4840\n4840\n4FC0\nENDCHAR\nSTARTCHAR U_65E8\nENCODING 26088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4180\n4E00\n7040\n4040\n3FC0\n0000\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_65E9\nENCODING 26089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0400\n0400\nFFE0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_65EA\nENCODING 26090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n0100\nF100\n9100\n9FE0\nF100\n9100\n9100\nF100\n9100\n0100\nENDCHAR\nSTARTCHAR U_65EB\nENCODING 26091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nF7C0\n9240\n9240\nF240\n9240\n9240\n9240\nF240\n0540\n0880\nENDCHAR\nSTARTCHAR U_65EC\nENCODING 26092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2000\n3FC0\n4040\nBE40\n2240\n3E40\n2240\n3E40\n0140\n0080\nENDCHAR\nSTARTCHAR U_65ED\nENCODING 26093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23C0\n2240\nFA40\n2BC0\n2A40\n2A40\n2BC0\n2800\n4820\n87E0\nENDCHAR\nSTARTCHAR U_65EE\nENCODING 26094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7F00\n0900\n1120\n2120\nC0E0\n3FC0\n2040\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_65EF\nENCODING 26095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2040\n3FC0\n0800\n7F00\n0900\n1120\n2120\n40E0\nENDCHAR\nSTARTCHAR U_65F0\nENCODING 26096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF100\n9100\n9100\nF100\n9FE0\n9100\nF100\n9100\n0100\n0100\nENDCHAR\nSTARTCHAR U_65F1\nENCODING 26097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0000\n7FC0\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_65F2\nENCODING 26098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0400\nFFE0\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_65F3\nENCODING 26099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n93E0\n9420\nF820\n9220\n9120\nF120\n9020\n0120\n00C0\nENDCHAR\nSTARTCHAR U_65F4\nENCODING 26100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9100\n9100\n9100\nFFE0\n9100\n9100\n9100\nF900\n0500\n0200\nENDCHAR\nSTARTCHAR U_65F5\nENCODING 26101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2040\n3FC0\n0200\n4220\n4220\n4220\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_65F6\nENCODING 26102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF080\n9FE0\n9080\n9480\nF280\n9280\n9080\n9080\nF080\n0380\nENDCHAR\nSTARTCHAR U_65F7\nENCODING 26103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF080\n97E0\n9400\nF400\n9400\n9400\nF400\n9400\n0800\n1000\nENDCHAR\nSTARTCHAR U_65F8\nENCODING 26104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\n0080\nF100\n97E0\n92A0\nF2A0\n9520\n9920\nF220\n0C20\n00C0\nENDCHAR\nSTARTCHAR U_65F9\nENCODING 26105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0400\nFFE0\n0000\n7FC0\n4040\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_65FA\nENCODING 26106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF100\n9100\n9100\nF100\n97C0\n9100\n9100\nF100\n9100\n0FE0\nENDCHAR\nSTARTCHAR U_65FB\nENCODING 26107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0400\nFFE0\n1100\n0A00\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_65FC\nENCODING 26108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n9FE0\n9440\nF440\n9280\n9280\nF100\n9280\n0440\n0820\nENDCHAR\nSTARTCHAR U_65FD\nENCODING 26109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9FE0\n9100\nF540\n9540\n97C0\nF100\n9120\n0120\n00E0\nENDCHAR\nSTARTCHAR U_65FE\nENCODING 26110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n2480\n3FA0\n0420\n3FE0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_65FF\nENCODING 26111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0200\nF3E0\n9480\n9880\nF080\n9FE0\n9080\nF080\n9080\n0080\nENDCHAR\nSTARTCHAR U_6600\nENCODING 26112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF400\n97E0\n9420\n9A20\nF120\n9020\n91A0\nF620\n90A0\n0040\nENDCHAR\nSTARTCHAR U_6601\nENCODING 26113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9100\n97E0\nF520\n9520\n9520\nF520\n95A0\n0540\n0100\nENDCHAR\nSTARTCHAR U_6602\nENCODING 26114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0800\n73C0\n4240\n4A40\n72C0\n0200\nENDCHAR\nSTARTCHAR U_6603\nENCODING 26115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2040\n3FC0\n0000\n7FE0\n4200\n4500\n4880\nB060\nENDCHAR\nSTARTCHAR U_6604\nENCODING 26116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF700\n9400\n9400\nF7E0\n9440\n9440\nF680\n9900\n0A80\n1460\nENDCHAR\nSTARTCHAR U_6605\nENCODING 26117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nF240\n9240\n9280\nF2E0\n9240\n9240\nF540\n9880\n1140\n2620\nENDCHAR\nSTARTCHAR U_6606\nENCODING 26118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0000\n4240\n7A80\n4320\n5A20\n61E0\nENDCHAR\nSTARTCHAR U_6607\nENCODING 26119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2040\n3FC0\n7900\n1100\nFFE0\n1100\n2100\nC100\nENDCHAR\nSTARTCHAR U_6608\nENCODING 26120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF080\n97E0\n9420\nF420\n97E0\n9420\nF400\n9400\n0800\n1000\nENDCHAR\nSTARTCHAR U_6609\nENCODING 26121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n9FE0\n9200\nF3C0\n9240\n9240\nF240\n9440\n0540\n1880\nENDCHAR\nSTARTCHAR U_660A\nENCODING 26122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0000\n7FC0\n0400\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_660B\nENCODING 26123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n0800\nFFE0\n1100\n2080\nFFE0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_660C\nENCODING 26124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1080\n1F80\n1080\n1F80\n0000\n3FC0\n2040\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_660D\nENCODING 26125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n9440\n9440\nF7C0\n9440\n9440\n9440\nF440\n97C0\n0440\nENDCHAR\nSTARTCHAR U_660E\nENCODING 26126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\nF220\n9220\n93E0\nF220\n9220\n93E0\nF220\n0420\n08A0\n3040\nENDCHAR\nSTARTCHAR U_660F\nENCODING 26127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n4400\n7FE0\n4200\n5920\n60E0\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_6610\nENCODING 26128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n9440\n9820\nF7C0\n9240\n9240\nF240\n9240\n0540\n1880\nENDCHAR\nSTARTCHAR U_6611\nENCODING 26129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9280\n9440\nFA20\n9100\n97E0\nF040\n9080\n0080\n0100\nENDCHAR\nSTARTCHAR U_6612\nENCODING 26130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF7E0\n9AA0\n92A0\nF2A0\n94A0\n98A0\nF120\n9220\n0420\n08C0\nENDCHAR\nSTARTCHAR U_6613\nENCODING 26131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n2000\n3FC0\n4A40\n9240\n2440\n4980\nENDCHAR\nSTARTCHAR U_6614\nENCODING 26132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n7FC0\n1100\nFFE0\n0000\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_6615\nENCODING 26133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF700\n9400\n9400\nF7E0\n9480\n9480\nF480\n9480\n0880\n1080\nENDCHAR\nSTARTCHAR U_6616\nENCODING 26134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF500\n9480\n9480\nF840\n9A40\n9220\n9200\nF480\n9FC0\n0440\nENDCHAR\nSTARTCHAR U_6617\nENCODING 26135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0400\nFFE0\n0000\n0900\n10C0\n6040\nENDCHAR\nSTARTCHAR U_6618\nENCODING 26136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0400\nFFE0\n1000\n1F80\n2080\nC380\nENDCHAR\nSTARTCHAR U_6619\nENCODING 26137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0000\n7FC0\n0000\nFFE0\n1080\n3FC0\nENDCHAR\nSTARTCHAR U_661A\nENCODING 26138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n4440\n2A80\n1100\n3F80\nD0E0\n1F80\n1080\n1F80\n1080\nENDCHAR\nSTARTCHAR U_661B\nENCODING 26139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF400\n9400\n97C0\nF440\n9440\n97C0\n9400\nF400\n9400\n07E0\nENDCHAR\nSTARTCHAR U_661C\nENCODING 26140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\nFFE0\n1000\n3FC0\n4940\n9240\n2440\n0980\nENDCHAR\nSTARTCHAR U_661D\nENCODING 26141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3D00\n45C0\nA920\n1900\n3FE0\nD080\n1080\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_661E\nENCODING 26142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF100\n9100\n97E0\nF520\n9520\n96A0\n9460\nF420\n9420\n0460\nENDCHAR\nSTARTCHAR U_661F\nENCODING 26143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n2400\n7FC0\n8400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_6620\nENCODING 26144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n97C0\n9540\nF540\n9540\n9FE0\nF100\n9280\n0440\n0820\nENDCHAR\nSTARTCHAR U_6621\nENCODING 26145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF080\n9FE0\n9100\nF240\n9680\n9100\nF100\n9240\n0FE0\n0420\nENDCHAR\nSTARTCHAR U_6622\nENCODING 26146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF520\n9520\n9520\nF7E0\n9100\n9100\n9520\nF520\n9520\n07E0\nENDCHAR\nSTARTCHAR U_6623\nENCODING 26147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9280\n9440\nF920\n9280\n9500\n9240\nF080\n9100\n0600\nENDCHAR\nSTARTCHAR U_6624\nENCODING 26148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9280\n9440\nF920\n9080\n9FE0\n9040\nF280\n9100\n0080\nENDCHAR\nSTARTCHAR U_6625\nENCODING 26149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n0400\n3FC0\n0800\nFFE0\n30C0\nDCA0\n1780\n1080\n1F80\nENDCHAR\nSTARTCHAR U_6626\nENCODING 26150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0800\nFFE0\n2080\nD160\n1100\n6100\nENDCHAR\nSTARTCHAR U_6627\nENCODING 26151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n97C0\n9100\nF100\n9FE0\n9100\nF380\n9540\n0920\n0100\nENDCHAR\nSTARTCHAR U_6628\nENCODING 26152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n93E0\n9600\nFA00\n93C0\n9200\nF200\n93C0\n0200\n0200\nENDCHAR\nSTARTCHAR U_6629\nENCODING 26153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9FE0\n9100\nF7C0\n9100\n9380\n9540\nF920\n9100\n0100\nENDCHAR\nSTARTCHAR U_662A\nENCODING 26154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n1100\n7FC0\n1100\nFFE0\n2100\n4100\nENDCHAR\nSTARTCHAR U_662B\nENCODING 26155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF3E0\n9420\n9820\nF7A0\n94A0\n94A0\nF7A0\n94A0\n0020\n00C0\nENDCHAR\nSTARTCHAR U_662C\nENCODING 26156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n4080\n7F80\n4400\n7FC0\n4120\n7FE0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_662D\nENCODING 26157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF120\n9120\n9220\nF4C0\n9800\n93E0\n9220\nF220\n03E0\n0220\nENDCHAR\nSTARTCHAR U_662E\nENCODING 26158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0100\nFFE0\n2120\n2120\n3A20\nC4C0\nENDCHAR\nSTARTCHAR U_662F\nENCODING 26159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1080\n1F80\n1080\n1F80\n0000\nFFE0\n2400\n2780\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_6630\nENCODING 26160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0000\n7FC0\n0400\n2780\n2400\nFFE0\nENDCHAR\nSTARTCHAR U_6631\nENCODING 26161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0400\n7FC0\n0100\n1100\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_6632\nENCODING 26162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n9FE0\n92A0\nFFE0\n9A80\n9FE0\n92A0\nF2E0\n9480\n0880\nENDCHAR\nSTARTCHAR U_6633\nENCODING 26163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nF500\n97C0\n9900\nF100\n9FE0\n9100\nF100\n9280\n0440\n1820\nENDCHAR\nSTARTCHAR U_6634\nENCODING 26164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n6000\n4BC0\n5A40\n6A40\n12C0\n6200\nENDCHAR\nSTARTCHAR U_6635\nENCODING 26165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n9440\n97C0\nF400\n9520\n9540\nF580\n9520\n0920\n10E0\nENDCHAR\nSTARTCHAR U_6636\nENCODING 26166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3000\n09E0\n7920\n0B20\nEDE0\n2920\n2D20\n2BE0\n4900\nA880\n1060\nENDCHAR\nSTARTCHAR U_6637\nENCODING 26167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0000\n7FC0\n4A40\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_6638\nENCODING 26168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF3C0\n9440\n9A80\nF300\n9480\n9860\n9300\nF080\n9300\n0080\nENDCHAR\nSTARTCHAR U_6639\nENCODING 26169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0300\nE080\nAF00\nA120\nFD40\nA580\nA500\nE980\nA940\n1520\n0200\nENDCHAR\nSTARTCHAR U_663A\nENCODING 26170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\nFFE0\n0400\n7FC0\n4440\n4A40\n5140\n40C0\nENDCHAR\nSTARTCHAR U_663B\nENCODING 26171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0000\nFBC0\n2240\n3A40\nC2C0\n0200\nENDCHAR\nSTARTCHAR U_663C\nENCODING 26172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2100\n3F80\n60E0\nBF80\n2080\n3F80\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_663D\nENCODING 26173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nF220\n9200\n9FE0\nF280\n92A0\n92A0\n92C0\nF480\n95A0\n0AE0\nENDCHAR\nSTARTCHAR U_663E\nENCODING 26174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0A00\n4A40\n2A40\n2A80\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_663F\nENCODING 26175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE100\nAFE0\nA800\nE900\nA900\nA900\nAA00\nEA40\n17E0\n2220\nENDCHAR\nSTARTCHAR U_6640\nENCODING 26176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nE500\nB540\nAD40\nE580\nAD80\nB540\nA540\nE500\n0520\n38E0\nENDCHAR\nSTARTCHAR U_6641\nENCODING 26177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2040\n3FC0\n4A40\n2A80\n1B00\n6AC0\n1220\n61E0\nENDCHAR\nSTARTCHAR U_6642\nENCODING 26178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9100\n9100\nFFE0\n9080\n9FE0\n9480\nF280\n0080\n0380\nENDCHAR\nSTARTCHAR U_6643\nENCODING 26179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n2480\n1500\nFFE0\n0A00\n1220\n61E0\nENDCHAR\nSTARTCHAR U_6644\nENCODING 26180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF240\nAA80\nA200\nFFE0\nA500\nA500\nA500\nE500\n0920\n30E0\nENDCHAR\nSTARTCHAR U_6645\nENCODING 26181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF000\n97C0\n9440\nF440\n97C0\n9440\nF440\n97C0\n0000\n1FE0\nENDCHAR\nSTARTCHAR U_6646\nENCODING 26182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9100\n9100\nFFE0\n9100\n9100\n97C0\nF100\n9100\n0FE0\nENDCHAR\nSTARTCHAR U_6647\nENCODING 26183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9240\n97A0\nF000\n9FE0\n9200\nF7C0\n9040\n0240\n0180\nENDCHAR\nSTARTCHAR U_6648\nENCODING 26184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9280\n9440\nF820\n9440\n9280\n9100\nF280\n0440\n1820\nENDCHAR\nSTARTCHAR U_6649\nENCODING 26185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n1100\n2A80\n7BC0\n0000\nFFE0\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_664A\nENCODING 26186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF100\n9200\n9440\nFFA0\n9120\n9100\nF7C0\n9100\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_664B\nENCODING 26187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0A00\n4A40\n2A80\nFFE0\n0000\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_664C\nENCODING 26188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE200\nAFE0\nA820\nEBA0\nAAA0\nAAA0\nABA0\nEAA0\nA820\n0860\nENDCHAR\nSTARTCHAR U_664D\nENCODING 26189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE820\nABA0\nA820\nEBA0\nAAA0\nABA0\nE820\n0820\n08A0\n0840\nENDCHAR\nSTARTCHAR U_664E\nENCODING 26190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nE480\nA480\nAFC0\nE480\nA480\nBFE0\nE000\n0480\n0840\n3040\nENDCHAR\nSTARTCHAR U_664F\nENCODING 26191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1080\n1F80\n1080\n7FE0\n4420\n0800\n7FE0\n1100\n0F00\n78E0\nENDCHAR\nSTARTCHAR U_6650\nENCODING 26192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n9FE0\n9100\nF240\n9780\n9120\n9240\nF480\n9140\n0E20\nENDCHAR\nSTARTCHAR U_6651\nENCODING 26193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0800\n7FC0\n4040\n4E40\n4A40\n4EC0\nENDCHAR\nSTARTCHAR U_6652\nENCODING 26194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE280\nA280\nAFE0\nEAA0\nAAA0\nAAE0\nEC20\nA820\n0FE0\n0820\nENDCHAR\nSTARTCHAR U_6653\nENCODING 26195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF3E0\n9E80\n9120\nF6E0\n9000\n9FE0\nF280\n92A0\n04A0\n18E0\nENDCHAR\nSTARTCHAR U_6654\nENCODING 26196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF2A0\n94C0\n9DA0\nF4A0\n9460\n9100\nFFE0\n9100\n0100\n0100\nENDCHAR\nSTARTCHAR U_6655\nENCODING 26197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n2280\nFFE0\n8820\n7FC0\n2400\n7FC0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_6656\nENCODING 26198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF420\n9100\n9FE0\nF280\n97E0\n9080\nFFE0\n9080\n0080\n0080\nENDCHAR\nSTARTCHAR U_6657\nENCODING 26199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF280\n9440\n9920\nF7C0\n9040\n9080\nF7C0\n9440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_6658\nENCODING 26200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n97C0\n9440\nF7C0\n9000\n97C0\nF100\n9FE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_6659\nENCODING 26201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF240\n97E0\n9240\nF420\n9BE0\n9640\nFA80\n9180\n0240\n0C20\nENDCHAR\nSTARTCHAR U_665A\nENCODING 26202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE780\nA900\nBFC0\nEA40\nAA40\nAFC0\nA300\nE520\n0920\n11E0\nENDCHAR\nSTARTCHAR U_665B\nENCODING 26203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n97C0\n9440\nF7C0\n9440\n97C0\nF280\n92A0\n04A0\n1860\nENDCHAR\nSTARTCHAR U_665C\nENCODING 26204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0A00\n7FC0\n0480\n7FE0\n1420\n64C0\nENDCHAR\nSTARTCHAR U_665D\nENCODING 26205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0480\nFFE0\n0480\n7FC0\n0400\nFFE0\n2080\n3F80\n2080\nFFE0\nENDCHAR\nSTARTCHAR U_665E\nENCODING 26206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C60\nE380\nAC60\nA200\nFFE0\nA500\nAFE0\nF520\nA520\n0560\n0100\nENDCHAR\nSTARTCHAR U_665F\nENCODING 26207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2040\n3FC0\n0280\n7FE0\n4240\n7A80\n4920\n96E0\nENDCHAR\nSTARTCHAR U_6660\nENCODING 26208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE140\nAFE0\nA900\nE920\nAF20\nAAC0\nAA80\nEAA0\n1560\n2220\nENDCHAR\nSTARTCHAR U_6661\nENCODING 26209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\nE120\nAFE0\nA100\nEFE0\nA920\nAFE0\nE920\nAFE0\n0920\n0960\nENDCHAR\nSTARTCHAR U_6662\nENCODING 26210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFC00\n37E0\nE480\n2480\n6880\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_6663\nENCODING 26211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0460\nE580\nBF00\nA5E0\nE540\nA740\nAD40\nB540\nE540\n1640\n0840\nENDCHAR\nSTARTCHAR U_6664\nENCODING 26212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF100\n97C0\n9240\nF240\n9FE0\n9000\nF7C0\n9440\n0440\n07C0\nENDCHAR\nSTARTCHAR U_6665\nENCODING 26213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n9FE0\n9820\nF7C0\n9000\n9FE0\nF280\n92A0\n04A0\n1860\nENDCHAR\nSTARTCHAR U_6666\nENCODING 26214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF7E0\n9800\n97C0\nF540\n9540\n9FE0\nF540\n9540\n07E0\n0180\nENDCHAR\nSTARTCHAR U_6667\nENCODING 26215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF500\n97C0\n9900\nF100\n9FE0\n9000\n97C0\nF440\n0440\n07C0\nENDCHAR\nSTARTCHAR U_6668\nENCODING 26216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n7FE0\n4000\n5FC0\n4000\n7FE0\n5280\n99C0\nENDCHAR\nSTARTCHAR U_6669\nENCODING 26217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE780\nA900\nBFC0\nEA40\nAA40\nAFC0\nA500\nE500\n0920\n30E0\nENDCHAR\nSTARTCHAR U_666A\nENCODING 26218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nE280\nAFE0\nAAA0\nEAA0\nAFE0\nAAA0\nEAA0\nBFE0\n0480\n1860\nENDCHAR\nSTARTCHAR U_666B\nENCODING 26219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF1E0\n9100\n97C0\nF440\n97C0\n9440\n97C0\nF100\n9FE0\n0100\nENDCHAR\nSTARTCHAR U_666C\nENCODING 26220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n9FE0\n9480\nF6C0\n9920\n9100\nFFE0\n9100\n0100\n0100\nENDCHAR\nSTARTCHAR U_666D\nENCODING 26221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE920\nABA0\nA920\nEFE0\nA820\nABA0\nAAA0\nEBA0\n1020\n20C0\nENDCHAR\nSTARTCHAR U_666E\nENCODING 26222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n4A40\n2A80\nFFE0\n0000\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_666F\nENCODING 26223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0400\nFFE0\n2080\n3F80\n2480\n4C40\nENDCHAR\nSTARTCHAR U_6670\nENCODING 26224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE460\nA580\nBF00\nE5E0\nAF40\nB540\nA540\nE540\n0540\n0640\nENDCHAR\nSTARTCHAR U_6671\nENCODING 26225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0120\nF540\n9580\n9A80\nF440\n9920\n9540\nF580\n9B00\n0480\n1860\nENDCHAR\nSTARTCHAR U_6672\nENCODING 26226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nECE0\nA820\nAEE0\nE820\nAFE0\nAAA0\nE280\nA2A0\n04A0\n1860\nENDCHAR\nSTARTCHAR U_6673\nENCODING 26227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFB80\n2200\n73E0\nAA80\n2480\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_6674\nENCODING 26228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9100\n97C0\nF100\n9FE0\n9440\nF740\n95C0\n0440\n04C0\nENDCHAR\nSTARTCHAR U_6675\nENCODING 26229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7BC0\n4C40\n7A80\n4100\n86E0\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_6676\nENCODING 26230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0000\nFBE0\n8A20\nFBE0\n8A20\nFBE0\nENDCHAR\nSTARTCHAR U_6677\nENCODING 26231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2040\n3FC0\n6500\n99E0\n2500\n7FE0\nA080\n3F80\nENDCHAR\nSTARTCHAR U_6678\nENCODING 26232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0100\nF9E0\n1240\n5D40\n5180\nFE60\nENDCHAR\nSTARTCHAR U_6679\nENCODING 26233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n97C0\n9440\nF7C0\n9200\n97E0\nFAA0\n94A0\n0920\n06C0\nENDCHAR\nSTARTCHAR U_667A\nENCODING 26234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3DE0\n5120\n7F20\n19E0\n2520\n5FC0\n1040\n1FC0\n1040\n1FC0\nENDCHAR\nSTARTCHAR U_667B\nENCODING 26235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9280\n97C0\nFD60\n97C0\n9540\nF7C0\n9120\n0120\n00E0\nENDCHAR\nSTARTCHAR U_667C\nENCODING 26236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA820\nA400\nE7E0\nA8A0\nB5A0\nE2E0\nA480\n08A0\n10E0\nENDCHAR\nSTARTCHAR U_667D\nENCODING 26237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nE480\nBFE0\nA480\nEEC0\nADA0\nB6A0\nA4A0\nE480\n0480\n0480\nENDCHAR\nSTARTCHAR U_667E\nENCODING 26238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9000\n97C0\nF440\n97C0\n9100\nF380\n9540\n0920\n1320\nENDCHAR\nSTARTCHAR U_667F\nENCODING 26239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE440\nA7C0\nA440\nE7C0\nA000\nAFE0\nE820\n0FE0\n0820\n0FE0\nENDCHAR\nSTARTCHAR U_6680\nENCODING 26240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF480\n9BE0\n9280\nF480\n9C80\n95C0\nF480\n9480\n0480\n07E0\nENDCHAR\nSTARTCHAR U_6681\nENCODING 26241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\nA200\nAA80\nFFE0\nA880\nA880\nBFC0\nE500\n0920\n30E0\nENDCHAR\nSTARTCHAR U_6682\nENCODING 26242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFB80\n5200\nFBE0\n1280\nF480\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_6683\nENCODING 26243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2880\n2480\n3F80\n0A00\n7BC0\n0A00\n7BC0\n0A00\nFBE0\n0A00\nENDCHAR\nSTARTCHAR U_6684\nENCODING 26244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9820\n9FE0\nF000\n97C0\n94C0\nF540\n97C0\n0000\n0FE0\nENDCHAR\nSTARTCHAR U_6685\nENCODING 26245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nEFE0\nA800\nABC0\nEE40\nBBC0\nAA40\nABC0\nE800\n0FE0\n0800\nENDCHAR\nSTARTCHAR U_6686\nENCODING 26246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\nA880\nAE80\nEAE0\nABA0\nAAA0\nEAA0\nAA80\n0A20\n15E0\nENDCHAR\nSTARTCHAR U_6687\nENCODING 26247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEA20\nAEE0\nA800\nE9E0\nAF40\nA940\nEF40\nA880\n0940\n0A20\nENDCHAR\nSTARTCHAR U_6688\nENCODING 26248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2880\n2680\nFFE0\n8420\n7FC0\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_6689\nENCODING 26249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE820\nA100\nAFE0\nE540\nA7C0\nA540\nE7C0\nA100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_668A\nENCODING 26250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF100\n97C0\n9440\nF7C0\n9440\n97C0\nF440\n97C0\n0280\n0C60\nENDCHAR\nSTARTCHAR U_668B\nENCODING 26251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n89E0\nFB40\n9080\nFD40\n8A20\nFF80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_668C\nENCODING 26252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F40\nF180\n96A0\n9240\nF420\n9BC0\n9100\nFFE0\n9280\n0440\n0820\nENDCHAR\nSTARTCHAR U_668D\nENCODING 26253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n97C0\n9440\nF7C0\n9200\n97E0\nF8A0\n9560\n07A0\n00C0\nENDCHAR\nSTARTCHAR U_668E\nENCODING 26254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\nA480\nA200\nEFC0\nAA40\nBFE0\nE200\n0500\n08E0\n3040\nENDCHAR\nSTARTCHAR U_668F\nENCODING 26255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\nA240\nA280\nFFE0\nA400\nAFC0\nB440\nE7C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_6690\nENCODING 26256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9140\n9FE0\nF440\n97C0\n9100\nFFE0\n9500\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_6691\nENCODING 26257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n7FC0\n0500\nFFE0\n0880\n3F80\nD080\n1F80\nENDCHAR\nSTARTCHAR U_6692\nENCODING 26258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE440\nA7C0\nA440\nE7C0\nA900\nAFC0\nB100\nE7C0\n0100\n1FE0\nENDCHAR\nSTARTCHAR U_6693\nENCODING 26259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n2BE0\nFC40\n3240\n5180\nA260\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_6694\nENCODING 26260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nAFE0\nAAA0\nEAA0\nAFE0\nA920\nEFE0\n0920\n0860\nENDCHAR\nSTARTCHAR U_6695\nENCODING 26261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nAFE0\nEAA0\nA920\nAFE0\nE920\nA380\n0540\n0920\nENDCHAR\nSTARTCHAR U_6696\nENCODING 26262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nFA20\n9540\n9FE0\nF200\n9FE0\n9200\nF7C0\n9A40\n1180\n2E60\nENDCHAR\nSTARTCHAR U_6697\nENCODING 26263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9440\n9280\nFFE0\n9000\n97C0\nF440\n97C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_6698\nENCODING 26264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n97C0\n9440\nFFE0\n9200\n97E0\nFAA0\n9520\n0220\n0CC0\nENDCHAR\nSTARTCHAR U_6699\nENCODING 26265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9200\n97C0\nF200\n9FE0\n9440\nFFE0\n9440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_669A\nENCODING 26266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\nEE20\nA540\nA280\nE7E0\nA900\nAFE0\nB100\nE920\n0FE0\n0820\nENDCHAR\nSTARTCHAR U_669B\nENCODING 26267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\nA200\nAFC0\nE200\nBFE0\nA400\nE7C0\n0900\n3100\n1FE0\nENDCHAR\nSTARTCHAR U_669C\nENCODING 26268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n4A40\n5140\nFFE0\n0000\n3FC0\n2040\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_669D\nENCODING 26269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE820\nA7C0\nA440\nE7C0\nA440\nA7C0\nE100\nAFE0\n0280\n0C60\nENDCHAR\nSTARTCHAR U_669E\nENCODING 26270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE7C0\nA440\nA7C0\nA440\nE7C0\nA100\nBFE0\nE540\n0920\n1120\nENDCHAR\nSTARTCHAR U_669F\nENCODING 26271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nFFE0\n9000\n9FE0\nF000\n97C0\n9440\nF7C0\n9440\n0280\n0FE0\nENDCHAR\nSTARTCHAR U_66A0\nENCODING 26272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\nFFE0\n1100\n7FC0\n4040\n5F40\n5140\n5FC0\nENDCHAR\nSTARTCHAR U_66A1\nENCODING 26273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFA40\n94A0\n9780\nF000\n9FE0\n92A0\nFA60\n96A0\n0B20\n0660\nENDCHAR\nSTARTCHAR U_66A2\nENCODING 26274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFBC0\nAA40\nFFE0\nAA00\nFFE0\nAAA0\n24A0\n2920\n22C0\nENDCHAR\nSTARTCHAR U_66A3\nENCODING 26275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nEFC0\nB200\nA100\nFFC0\nB540\nAE40\nBFC0\nEE40\n1540\n24A0\nENDCHAR\nSTARTCHAR U_66A4\nENCODING 26276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\nA840\nAFC0\nE840\nAFC0\nA200\nFFE0\nA540\n1BA0\n0100\nENDCHAR\nSTARTCHAR U_66A5\nENCODING 26277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nEA40\nA940\nAFC0\nE200\nAFC0\nAA40\nBFE0\nE480\n0300\n1CC0\nENDCHAR\nSTARTCHAR U_66A6\nENCODING 26278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4880\n7FE0\n4880\n5DC0\n6AA0\n5FC0\n5040\n5FC0\n5040\n9FC0\nENDCHAR\nSTARTCHAR U_66A7\nENCODING 26279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0060\nEFA0\nA540\nAFE0\nE920\nA7E0\nA200\nE3C0\nA640\n0980\n1660\nENDCHAR\nSTARTCHAR U_66A8\nENCODING 26280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4A80\n7FE0\n4980\n7AA0\n4CE0\n7F80\n1080\n1F80\n1080\n7FE0\nENDCHAR\nSTARTCHAR U_66A9\nENCODING 26281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF940\n9580\n9A40\nF420\n9BC0\n9000\nFFE0\n9540\n0920\n1320\nENDCHAR\nSTARTCHAR U_66AA\nENCODING 26282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nEFE0\nA440\nA7C0\nE100\nAFE0\nA920\nEDA0\nAB60\n0DA0\n0960\nENDCHAR\nSTARTCHAR U_66AB\nENCODING 26283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFF00\n55E0\n7D40\n5540\nFFC0\n1040\n1FC0\n1040\n1FC0\n1040\nENDCHAR\nSTARTCHAR U_66AC\nENCODING 26284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7BC0\n1140\nFD40\n4A40\n9560\n7F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_66AD\nENCODING 26285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF7C0\n9440\n97C0\nF440\n97C0\n9920\n9540\nF920\n9FE0\n0100\nENDCHAR\nSTARTCHAR U_66AE\nENCODING 26286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n3F80\n2080\n3F80\n2080\nFFE0\n2080\n7FC0\nA0A0\n3F80\nENDCHAR\nSTARTCHAR U_66AF\nENCODING 26287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF280\n97C0\n9440\nF7C0\n9440\n97C0\nF100\n9FE0\n0280\n1C60\nENDCHAR\nSTARTCHAR U_66B0\nENCODING 26288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nE940\nB2A0\nA400\nE880\nB880\nAAE0\nEA80\nAA80\n0B80\n0C60\nENDCHAR\nSTARTCHAR U_66B1\nENCODING 26289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF540\n97E0\n9540\nF7E0\n9500\n95E0\nF720\n95E0\n0400\n07E0\nENDCHAR\nSTARTCHAR U_66B2\nENCODING 26290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9280\n9FE0\nF440\n97C0\n9440\nF7C0\n9100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_66B3\nENCODING 26291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1EE0\nE440\nBEE0\nA440\nFEE0\nA440\nAFC0\nA040\nEFC0\n0040\n0FC0\nENDCHAR\nSTARTCHAR U_66B4\nENCODING 26292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n7FC0\n1100\nFFE0\n5540\n8E20\n1500\n6CC0\nENDCHAR\nSTARTCHAR U_66B5\nENCODING 26293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n9280\n9100\nF7C0\n9540\n9FE0\nF100\n9FE0\n0280\n1C60\nENDCHAR\nSTARTCHAR U_66B6\nENCODING 26294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE900\nBDE0\nAA00\nE9E0\nA880\nAE80\nAAE0\nEA80\n1380\n2460\nENDCHAR\nSTARTCHAR U_66B7\nENCODING 26295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9540\n97C0\nF540\n97C0\n90A0\nFFE0\n9480\n0280\n0100\nENDCHAR\nSTARTCHAR U_66B8\nENCODING 26296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\nB4A0\nAFC0\nF460\nA7C0\nA440\nE7C0\nA540\n0920\n1320\nENDCHAR\nSTARTCHAR U_66B9\nENCODING 26297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1080\n9F80\n5080\n1F80\nCA00\n5F80\n7200\n5F80\n5200\nBFE0\nENDCHAR\nSTARTCHAR U_66BA\nENCODING 26298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEAA0\nAFE0\nA920\nEFE0\nA920\nAFE0\nE100\nAFE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_66BB\nENCODING 26299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n97C0\n9440\nF7C0\n9100\n9FE0\nF440\n97C0\n0940\n1320\nENDCHAR\nSTARTCHAR U_66BC\nENCODING 26300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\n73E0\nFA40\nAD40\nF880\nAB60\n7F80\n4080\n7F80\n4080\n7F80\nENDCHAR\nSTARTCHAR U_66BD\nENCODING 26301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nE540\nBFE0\nA580\nF960\nA940\nAFE0\nFB40\nA5E0\n0840\n3040\nENDCHAR\nSTARTCHAR U_66BE\nENCODING 26302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFF80\nAAE0\nAEA0\nE0A0\nBFA0\nA2A0\nE4A0\nBE40\n04A0\n0D20\nENDCHAR\nSTARTCHAR U_66BF\nENCODING 26303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\nA200\nAFC0\nE840\nAFC0\nA480\nBFE0\nEFC0\n0840\n0FC0\nENDCHAR\nSTARTCHAR U_66C0\nENCODING 26304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF100\n9FE0\n9820\nF7C0\n9000\n97C0\nF440\n97C0\n0280\n0FE0\nENDCHAR\nSTARTCHAR U_66C1\nENCODING 26305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBC0\n8A80\nFFE0\n8180\nB2A0\nC460\n3F80\n2880\n2480\nFFE0\nENDCHAR\nSTARTCHAR U_66C2\nENCODING 26306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nEFC0\nA480\nBFE0\nE100\nAFC0\nA940\nEFC0\n0940\n0FC0\n0480\nENDCHAR\nSTARTCHAR U_66C3\nENCODING 26307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE7C0\nB140\nAFE0\nE140\nBBC0\nAD40\nEB80\nAD40\n0920\n17E0\nENDCHAR\nSTARTCHAR U_66C4\nENCODING 26308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nEFE0\nA280\nAFE0\nE540\nAFE0\nA540\nEFE0\nA100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_66C5\nENCODING 26309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2440\n3FC0\n1100\n7FC0\n1500\nFFE0\n1500\n1500\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_66C6\nENCODING 26310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5DC0\n4880\n7FE0\n5DC0\n6AA0\n5FC0\n5040\n5FC0\n9040\n9FC0\nENDCHAR\nSTARTCHAR U_66C7\nENCODING 26311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n7FC0\n0400\nFFE0\n9520\n3F80\n0000\nFFE0\n1080\n3F40\nENDCHAR\nSTARTCHAR U_66C8\nENCODING 26312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA280\nA100\nFFE0\nA540\nA7C0\nE540\nAFE0\n0100\n1FE0\nENDCHAR\nSTARTCHAR U_66C9\nENCODING 26313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9100\n9FE0\nF440\n9EE0\n9440\nFFE0\n9480\n04A0\n1860\nENDCHAR\nSTARTCHAR U_66CA\nENCODING 26314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n92A0\n9FC0\nF2A0\n9FE0\n9440\nF7C0\n9440\n07C0\n0C60\nENDCHAR\nSTARTCHAR U_66CB\nENCODING 26315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF280\n9FE0\n9AA0\nFFE0\n9440\n97C0\nF440\n9FE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_66CC\nENCODING 26316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4A40\n7BC0\n0440\nFFE0\nA0A0\n5F40\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_66CD\nENCODING 26317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF7C0\n9540\n96C0\nF540\n97C0\n9540\n9920\nFFE0\n9100\n0100\nENDCHAR\nSTARTCHAR U_66CE\nENCODING 26318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nEAA0\nAFE0\nA100\nEFE0\nA100\nBFE0\nE440\nAFE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_66CF\nENCODING 26319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2C40\n2340\n3FC0\n4AE0\nAEA0\nEAC0\n5EA0\nE8A0\n2AE0\nCD80\nENDCHAR\nSTARTCHAR U_66D0\nENCODING 26320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\nFFE0\nAAA0\nFFE0\n2400\n3F80\n4400\n1F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_66D1\nENCODING 26321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F00\n2900\nFFE0\nAAA0\nFFE0\n1200\nE9E0\n1400\n6900\n0200\n3C00\nENDCHAR\nSTARTCHAR U_66D2\nENCODING 26322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nEE80\nAAE0\nAEA0\nEAA0\nBFA0\nA8A0\nEEA0\nAA40\n12A0\n2520\nENDCHAR\nSTARTCHAR U_66D3\nENCODING 26323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n7FC0\n4440\n7FC0\n0400\nFFE0\n2480\nDF60\n1500\n6EC0\nENDCHAR\nSTARTCHAR U_66D4\nENCODING 26324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEA80\nBF80\nAAE0\nA920\nEEA0\nB2A0\nAEA0\nAA40\nEE40\n02A0\n0D20\nENDCHAR\nSTARTCHAR U_66D5\nENCODING 26325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE880\nBFE0\nAA40\nEFE0\nA800\nAFC0\nA800\nEFC0\n1440\n27C0\nENDCHAR\nSTARTCHAR U_66D6\nENCODING 26326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE540\nAFE0\nA920\nE6C0\nABA0\nA200\nE7C0\nAC80\n0300\n1CE0\nENDCHAR\nSTARTCHAR U_66D7\nENCODING 26327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n14A0\nECC0\nBFE0\nA480\nEFC0\nA200\nAFC0\nE200\n1FE0\n0A80\n3260\nENDCHAR\nSTARTCHAR U_66D8\nENCODING 26328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE100\nAFE0\nA920\nEAA0\nBFE0\nA100\nEFE0\nAAA0\n0AA0\n0860\nENDCHAR\nSTARTCHAR U_66D9\nENCODING 26329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nEAA0\nAFE0\nA100\nE7A0\nA140\nAFE0\nE440\n0FC0\n1440\n07C0\nENDCHAR\nSTARTCHAR U_66DA\nENCODING 26330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nEFE0\nA280\nAFE0\nE820\nAFC0\nAA40\nF580\nAAC0\n04A0\n0B20\nENDCHAR\nSTARTCHAR U_66DB\nENCODING 26331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE100\nBFE0\nAAA0\nE920\nAFE0\nA100\nEFE0\nA100\n1FE0\n12A0\nENDCHAR\nSTARTCHAR U_66DC\nENCODING 26332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEAA0\nA660\nAAA0\nE7E0\nAC80\nB7E0\nE480\nA7E0\n0480\n07E0\nENDCHAR\nSTARTCHAR U_66DD\nENCODING 26333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE840\nAFC0\nA840\nFFE0\nA280\nBFE0\nE540\nABA0\n0540\n0B20\nENDCHAR\nSTARTCHAR U_66DE\nENCODING 26334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nF280\n9FE0\n9280\nF7C0\n9540\n97C0\nF540\n9FE0\n0960\n0BA0\nENDCHAR\nSTARTCHAR U_66DF\nENCODING 26335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\nFFE0\nAAA0\nFFE0\n4000\n7F80\n4000\n7FE0\n5540\n98E0\nENDCHAR\nSTARTCHAR U_66E0\nENCODING 26336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nAA40\nAFE0\nEA40\nAFE0\nAD40\nEFC0\nAD40\n17C0\n2C60\nENDCHAR\nSTARTCHAR U_66E1\nENCODING 26337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n1500\n7FC0\n5540\nFFE0\n9120\n9F20\n1100\n1F00\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_66E2\nENCODING 26338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA920\nAFE0\nE540\nAEE0\nA440\nE7C0\nA100\n0540\n0920\nENDCHAR\nSTARTCHAR U_66E3\nENCODING 26339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\nA480\nA780\nE020\nBFC0\nA480\nE7A0\nBCE0\n0B20\n12A0\nENDCHAR\nSTARTCHAR U_66E4\nENCODING 26340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE100\nAFE0\nA920\nE7C0\nA500\nAFE0\nF500\nA7C0\n0500\n07E0\nENDCHAR\nSTARTCHAR U_66E5\nENCODING 26341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nE200\nAFE0\nAA20\nEF80\nAA40\nABC0\nAA80\nEFC0\n1540\n3FE0\nENDCHAR\nSTARTCHAR U_66E6\nENCODING 26342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nEFC0\nA100\nBFE0\nE4A0\nBFE0\nA480\nFEC0\nAAA0\n0360\n0C20\nENDCHAR\nSTARTCHAR U_66E7\nENCODING 26343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2C40\n2340\n3FC0\nFC80\n4BE0\nFEA0\nD7E0\nFC80\nA4E0\nAB20\nENDCHAR\nSTARTCHAR U_66E8\nENCODING 26344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n04E0\nFF80\nAAE0\nA420\nFFE0\nAA80\nAEE0\nEA80\nAEE0\n0AA0\n0EE0\nENDCHAR\nSTARTCHAR U_66E9\nENCODING 26345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\nFFE0\n4A40\n7BC0\n1100\nFFE0\n1100\nFFE0\n5140\nBCE0\nENDCHAR\nSTARTCHAR U_66EA\nENCODING 26346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nEAA0\nAFE0\nA940\nF5E0\nBA40\nABE0\nF640\n03E0\n2A40\n2BE0\nENDCHAR\nSTARTCHAR U_66EB\nENCODING 26347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E40\n50A0\nEFC0\n5080\nEFE0\n5940\nBFE0\n1080\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_66EC\nENCODING 26348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nE000\nAFE0\nAAA0\nEFE0\nAAA0\nAFE0\nEC80\nB6E0\n2480\n0EE0\nENDCHAR\nSTARTCHAR U_66ED\nENCODING 26349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nFFE0\nB4A0\nAFE0\nEAA0\nAFE0\nA100\nEFE0\nA100\n0FE0\n0AA0\nENDCHAR\nSTARTCHAR U_66EE\nENCODING 26350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEAA0\nAFE0\nAA80\nEAE0\nAFA0\nA9A0\nEFA0\nA940\n1FA0\n2120\nENDCHAR\nSTARTCHAR U_66EF\nENCODING 26351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\nF040\nBFC0\nF500\nBFC0\nB240\nBFE0\nF2A0\n1FA0\n22A0\n5F60\nENDCHAR\nSTARTCHAR U_66F0\nENCODING 26352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n4040\n4040\n4040\n7F40\n4040\n4040\n4040\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_66F1\nENCODING 26353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n4440\n4440\n7FC0\n4440\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_66F2\nENCODING 26354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n0900\n7FE0\n4920\n4920\n4920\n7FE0\n4920\n4920\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_66F3\nENCODING 26355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4440\n7FC0\n4440\n7FC0\n0480\n0300\n0220\n1DA0\nE060\nENDCHAR\nSTARTCHAR U_66F4\nENCODING 26356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0200\n3FC0\n2240\n3FC0\n2240\n3FC0\n0A00\n0400\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_66F5\nENCODING 26357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n0480\n7FC0\n4440\n7FC0\n4440\n7FC0\n0500\n0220\n0DA0\nF060\nENDCHAR\nSTARTCHAR U_66F6\nENCODING 26358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3FC0\n4940\n1240\n2540\n0880\n3FC0\n2040\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_66F7\nENCODING 26359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\n1040\n1FC0\n1040\n1FC0\n1000\n3FE0\n6520\nA8A0\n3F20\n00C0\nENDCHAR\nSTARTCHAR U_66F8\nENCODING 26360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0480\nFFE0\n0480\n7FC0\n0400\nFFE0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_66F9\nENCODING 26361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n4940\n7FC0\n4940\n7FC0\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_66FA\nENCODING 26362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n4440\n7FC0\n4440\n7FC0\n2880\n2480\n3F80\nENDCHAR\nSTARTCHAR U_66FB\nENCODING 26363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2040\n3FC0\n4080\n7BC0\n8A80\n57E0\n2080\nC080\nENDCHAR\nSTARTCHAR U_66FC\nENCODING 26364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1480\n1280\n7FE0\n4920\n7FE0\n0000\n1F80\n0900\n0600\n79E0\nENDCHAR\nSTARTCHAR U_66FD\nENCODING 26365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n0900\n7FC0\n4440\n7FC0\n4440\n7FC0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_66FE\nENCODING 26366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n7FC0\n64C0\n5540\n7FC0\n0000\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_66FF\nENCODING 26367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFBE0\n3180\n4A40\nBFA0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_6700\nENCODING 26368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\nFFE0\n4800\n7FC0\n4A40\n7980\nC980\n0E60\nENDCHAR\nSTARTCHAR U_6701\nENCODING 26369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA280\nFBE0\n2180\n6AA0\nB4E0\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_6702\nENCODING 26370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2C80\n2680\nFFE0\n4900\n7900\n4FC0\n7940\n4940\nFA40\n0CC0\nENDCHAR\nSTARTCHAR U_6703\nENCODING 26371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n1100\n2E80\nC060\n7FC0\n5540\n7FC0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_6704\nENCODING 26372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF900\nAFE0\nFAA0\nA920\nFFE0\nA900\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_6705\nENCODING 26373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n27C0\nFA00\n27E0\n4CA0\n9560\nEFA0\n0040\nENDCHAR\nSTARTCHAR U_6706\nENCODING 26374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A00\n5200\nFBE0\nACA0\nF8A0\nA960\nFA60\n48A0\n7920\n4AA0\n7840\nENDCHAR\nSTARTCHAR U_6707\nENCODING 26375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3080\n4BE0\nB6A0\n03E0\nFEA0\n97E0\nFC80\n4A80\n7FE0\n4880\n7880\nENDCHAR\nSTARTCHAR U_6708\nENCODING 26376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\n1040\n1040\n1FC0\n1040\n1040\n1FC0\n1040\n1040\n2140\n4080\nENDCHAR\nSTARTCHAR U_6709\nENCODING 26377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n1000\n1F80\n3080\n5F80\n9080\n1F80\n1080\n1080\n1180\nENDCHAR\nSTARTCHAR U_670A\nENCODING 26378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5000\n5000\n7000\n5FE0\n5280\n7280\n5280\n52A0\n94A0\nB860\nENDCHAR\nSTARTCHAR U_670B\nENCODING 26379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\n4920\n4920\n79E0\n4920\n4920\n79E0\n4920\n4920\n4920\n9A60\nENDCHAR\nSTARTCHAR U_670C\nENCODING 26380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n7A80\n4A40\n7A40\n4C20\n4BC0\n7940\n4940\n4940\n4A40\n9480\nENDCHAR\nSTARTCHAR U_670D\nENCODING 26381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4A20\n4A20\n7AE0\n4A00\n4BE0\n7A20\n4AC0\n4A40\n8AA0\n9B20\nENDCHAR\nSTARTCHAR U_670E\nENCODING 26382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7100\n5280\n7440\n5A20\n5100\n77C0\n5040\n5280\n5100\nA100\nENDCHAR\nSTARTCHAR U_670F\nENCODING 26383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5520\n5520\n7520\n57E0\n5100\n7100\n5520\n5520\n97E0\nB420\nENDCHAR\nSTARTCHAR U_6710\nENCODING 26384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n5200\n53E0\n7420\n5BA0\n52A0\n72A0\n53A0\n52A0\n9020\nB0C0\nENDCHAR\nSTARTCHAR U_6711\nENCODING 26385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7140\n5540\n5540\n7540\n5FE0\n5540\n7540\n55C0\n5400\n57E0\nA000\nENDCHAR\nSTARTCHAR U_6712\nENCODING 26386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5100\n57E0\n7520\n56A0\n5560\n7520\n56A0\n5460\n9420\nB460\nENDCHAR\nSTARTCHAR U_6713\nENCODING 26387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5280\n5AA0\n76C0\n5280\n52C0\n76A0\n5A80\n52A0\n94A0\nB860\nENDCHAR\nSTARTCHAR U_6714\nENCODING 26388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n2920\n7F20\n11E0\n5520\n5520\n7DE0\n1120\n1120\n2220\nC460\nENDCHAR\nSTARTCHAR U_6715\nENCODING 26389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7440\n5240\n5080\n77C0\n5100\n5100\n7FE0\n5100\n5280\n9440\nB820\nENDCHAR\nSTARTCHAR U_6716\nENCODING 26390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57C0\n5440\n77C0\n5440\n57C0\n7620\n5540\n5480\n5540\nA620\nENDCHAR\nSTARTCHAR U_6717\nENCODING 26391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n23E0\nFA20\n8A20\nFBE0\n8A20\nFA20\nA3E0\n9220\nAA20\nCC60\nENDCHAR\nSTARTCHAR U_6718\nENCODING 26392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5240\n5FA0\n7440\n5A20\n53C0\n7640\n5280\n5100\n9280\nBC60\nENDCHAR\nSTARTCHAR U_6719\nENCODING 26393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01E0\nFD20\nB5E0\nCD20\n8520\nBDE0\nA520\nA520\nFD20\n02A0\n0C40\nENDCHAR\nSTARTCHAR U_671A\nENCODING 26394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2000\n3FC0\n0000\n7BC0\n4A40\n7BC0\n4A40\n7BC0\n0440\nENDCHAR\nSTARTCHAR U_671B\nENCODING 26395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n1240\nFBC0\n2240\n3BC0\n2440\n7FC0\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_671C\nENCODING 26396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5000\n73C0\n5240\n57C0\n7080\n5100\n5FE0\n5100\nB300\nENDCHAR\nSTARTCHAR U_671D\nENCODING 26397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFF20\n1120\n7DE0\n4520\n7D20\n45E0\n7D20\n1120\nFD20\n1260\nENDCHAR\nSTARTCHAR U_671E\nENCODING 26398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1900\n1500\nFFE0\n2080\n5F40\n9120\n1F00\n1100\n1300\nENDCHAR\nSTARTCHAR U_671F\nENCODING 26399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\nFD20\n4920\n79E0\n4920\n7920\n49E0\nFD20\n0120\n4920\n8660\nENDCHAR\nSTARTCHAR U_6720\nENCODING 26400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7440\n5FE0\n5440\n7100\n57C0\n5540\n7540\n5FE0\n5280\n9440\nB820\nENDCHAR\nSTARTCHAR U_6721\nENCODING 26401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7AA0\n4B60\n4AA0\n7BE0\n4940\n4E20\n79E0\n4B40\n4C80\n8940\n9E20\nENDCHAR\nSTARTCHAR U_6722\nENCODING 26402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9E0\nA120\nF9E0\n8920\nF9E0\nA220\nFFC0\n0400\n7F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_6723\nENCODING 26403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5280\n7100\n5FE0\n5540\n77C0\n5540\n5FE0\n9100\nBFE0\nENDCHAR\nSTARTCHAR U_6724\nENCODING 26404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\n4920\n79E0\n4920\n9240\n79E0\n4920\n69A0\n5960\n69A0\n9240\nENDCHAR\nSTARTCHAR U_6725\nENCODING 26405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7240\n56C0\n5360\n7240\n55A0\n5FE0\n7A20\n57C0\n5240\n5240\nA4C0\nENDCHAR\nSTARTCHAR U_6726\nENCODING 26406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5FE0\n5280\n7FE0\n5820\n5FE0\n7540\n5A80\n55C0\n9AA0\nB500\nENDCHAR\nSTARTCHAR U_6727\nENCODING 26407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nAA80\nA4E0\nFF20\nAAE0\nAA80\nEEE0\nAA80\nAEE0\nAAA0\nAAE0\nENDCHAR\nSTARTCHAR U_6728\nENCODING 26408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0400\nFFE0\n0400\n0E00\n1500\n2480\nC460\n0440\n0400\nENDCHAR\nSTARTCHAR U_6729\nENCODING 26409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0400\n2500\n2480\n2480\n4440\n8440\n1400\n0800\nENDCHAR\nSTARTCHAR U_672A\nENCODING 26410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n0400\nFFE0\n0400\n0E00\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_672B\nENCODING 26411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0400\n7FC0\n0400\n0E00\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_672C\nENCODING 26412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n0E00\n1500\n1500\n2480\n4440\n9F20\n0400\n0400\nENDCHAR\nSTARTCHAR U_672D\nENCODING 26413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n7D00\n1100\n1900\n3500\n5500\n9100\n1120\n1120\n10E0\nENDCHAR\nSTARTCHAR U_672E\nENCODING 26414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n0440\nFFE0\n0400\n1480\n1480\n1480\n1480\n2480\n4460\n0400\nENDCHAR\nSTARTCHAR U_672F\nENCODING 26415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n0480\n0400\nFFE0\n0400\n0E00\n1500\n2480\n4440\n8420\n0400\nENDCHAR\nSTARTCHAR U_6730\nENCODING 26416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0E00\n1500\nE4E0\n7F80\n0200\n0C00\n1040\n2040\n1FC0\nENDCHAR\nSTARTCHAR U_6731\nENCODING 26417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n3FC0\n4400\n0400\nFFE0\n0E00\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_6732\nENCODING 26418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2100\nFD00\n2100\n7100\n6A80\nAA80\n2440\n2860\n3040\nENDCHAR\nSTARTCHAR U_6733\nENCODING 26419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\nFE80\n2280\n3280\n6A80\n6A40\nA240\n2440\n2420\n2820\nENDCHAR\nSTARTCHAR U_6734\nENCODING 26420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n7D00\n1180\n1940\n3520\n5520\n9100\n1100\n1100\n1100\nENDCHAR\nSTARTCHAR U_6735\nENCODING 26421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n1100\n1100\n20E0\n4400\n0400\nFFE0\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_6736\nENCODING 26422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n1100\n13C0\n2040\n2140\n4480\nFFE0\n0E00\n3580\nC460\n0400\nENDCHAR\nSTARTCHAR U_6737\nENCODING 26423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n2120\nF920\n2120\n7120\n6A20\nAA20\n2220\n24A0\n2840\nENDCHAR\nSTARTCHAR U_6738\nENCODING 26424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2120\n3120\n6920\n6120\nA120\n2220\n24A0\n2840\nENDCHAR\nSTARTCHAR U_6739\nENCODING 26425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFA00\n2780\n3280\n6A80\nA280\nA480\n24A0\n28A0\n3060\nENDCHAR\nSTARTCHAR U_673A\nENCODING 26426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2780\n2480\nFC80\n2480\n7480\n6C80\nA480\nA480\n28A0\n30E0\nENDCHAR\nSTARTCHAR U_673B\nENCODING 26427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n1120\nFD20\n1120\n3120\n3920\n5560\n93A0\n1120\n1020\n1020\nENDCHAR\nSTARTCHAR U_673C\nENCODING 26428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n1240\nFE40\n1280\n3B00\n5600\n9200\n1220\n1220\n11E0\nENDCHAR\nSTARTCHAR U_673D\nENCODING 26429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n1100\nFD00\n1200\n3BE0\n3420\n5020\n9020\n1020\n1140\n1080\nENDCHAR\nSTARTCHAR U_673E\nENCODING 26430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17E0\nF880\n1080\n3080\n3880\n5480\n5080\n9080\n1080\n1380\nENDCHAR\nSTARTCHAR U_673F\nENCODING 26431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n0200\n3FC0\n2240\n2240\n27C0\n0A80\n1240\n6220\n0200\nENDCHAR\nSTARTCHAR U_6740\nENCODING 26432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1900\n0600\n1900\n64C0\n0400\nFFE0\n1500\n2480\nC460\n0C00\nENDCHAR\nSTARTCHAR U_6741\nENCODING 26433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2200\nF900\n2100\n7100\n6A80\nA280\nA440\n2440\n2820\n2000\nENDCHAR\nSTARTCHAR U_6742\nENCODING 26434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7F00\n0900\n1120\n64E0\n0400\nFFE0\n0400\n2480\n5440\n8820\nENDCHAR\nSTARTCHAR U_6743\nENCODING 26435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FC0\nF440\n2440\n2440\n7280\n6A80\nA100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_6744\nENCODING 26436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF900\n2100\n77E0\n6900\nA100\nA100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_6745\nENCODING 26437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2080\nF880\n2080\n37E0\n6880\nA080\nA080\n2080\n2280\n2100\nENDCHAR\nSTARTCHAR U_6746\nENCODING 26438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\nF880\n2080\n3080\n6FE0\n6080\nA080\n2080\n2080\n2080\nENDCHAR\nSTARTCHAR U_6747\nENCODING 26439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2000\nF800\n27E0\n3100\n6A00\n63C0\nA040\n2040\n2140\n2080\nENDCHAR\nSTARTCHAR U_6748\nENCODING 26440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nFA40\n2340\n62C0\n7240\nA980\nA180\n2180\n2240\n2420\nENDCHAR\nSTARTCHAR U_6749\nENCODING 26441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\n1080\nFD00\n1220\n1840\n3480\n5300\n9020\n1040\n1080\n1300\nENDCHAR\nSTARTCHAR U_674A\nENCODING 26442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2220\nFAA0\n22A0\n72A0\n6AA0\nA2A0\nA2A0\n24A0\n2420\n2820\nENDCHAR\nSTARTCHAR U_674B\nENCODING 26443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2780\nFC80\n2480\n3680\n6D80\nA480\nA480\n24A0\n28A0\n3060\nENDCHAR\nSTARTCHAR U_674C\nENCODING 26444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nFA80\n2280\n3280\n2A80\n6280\nA280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_674D\nENCODING 26445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2020\nF840\n2080\n2080\n37E0\n6880\nA080\n2080\n2280\n2100\nENDCHAR\nSTARTCHAR U_674E\nENCODING 26446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1500\n2480\nC460\n1F00\n0200\n0400\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_674F\nENCODING 26447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n0E00\n3580\nC460\n3F80\n2080\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_6750\nENCODING 26448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2040\n2040\nFBE0\n2040\n70C0\n6940\nA240\n2440\n2140\n2080\nENDCHAR\nSTARTCHAR U_6751\nENCODING 26449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2040\nFBE0\n2040\n7240\n6940\nA140\n2040\n2040\n2040\n21C0\nENDCHAR\nSTARTCHAR U_6752\nENCODING 26450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\nF920\n2520\n2520\n7120\n6920\nAA20\n2220\n24A0\n2840\nENDCHAR\nSTARTCHAR U_6753\nENCODING 26451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2420\n3020\n2A20\n6120\nA120\n2020\n2120\n20C0\nENDCHAR\nSTARTCHAR U_6754\nENCODING 26452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF900\n2100\n7100\n6FE0\nA100\n2100\n2120\n2120\n20E0\nENDCHAR\nSTARTCHAR U_6755\nENCODING 26453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF900\n27E0\n7100\n6900\nA100\nA280\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_6756\nENCODING 26454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFFE0\n2080\n2480\n3280\n6A80\nA100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_6757\nENCODING 26455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2000\n2000\n3FC0\n0400\nFFE0\n1500\n2480\n4440\n8420\nENDCHAR\nSTARTCHAR U_6758\nENCODING 26456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2400\n2400\n3FC0\n2600\n4D00\n5480\nA460\n0400\nENDCHAR\nSTARTCHAR U_6759\nENCODING 26457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2240\nFA00\n23E0\n2600\n3200\n6A00\nA100\n2120\n20A0\n2060\nENDCHAR\nSTARTCHAR U_675A\nENCODING 26458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2400\n23C0\n3080\n6900\nA200\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_675B\nENCODING 26459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2020\nF820\n23E0\n7200\n6BE0\nA020\nA020\n2020\n2140\n2080\nENDCHAR\nSTARTCHAR U_675C\nENCODING 26460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2100\nF900\n27C0\n7100\n6900\nA100\n2100\n2FE0\n2000\nENDCHAR\nSTARTCHAR U_675D\nENCODING 26461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\nFAA0\n23E0\n26A0\n32A0\n6AE0\nA280\n2220\n2220\n21E0\nENDCHAR\nSTARTCHAR U_675E\nENCODING 26462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2020\nF820\n2020\n23E0\n3220\n6A00\nA200\n2220\n2220\n21E0\nENDCHAR\nSTARTCHAR U_675F\nENCODING 26463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n3F80\n2480\n2480\n3F80\n0E00\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_6760\nENCODING 26464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nF900\n2100\n2100\n3100\n6900\nA100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6761\nENCODING 26465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F80\n2900\n4600\n0A00\n3580\nC460\n3F80\n1500\n2480\nDC40\nENDCHAR\nSTARTCHAR U_6762\nENCODING 26466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n1500\n2480\nC060\n3F80\n0400\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_6763\nENCODING 26467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nF880\n24A0\n74A0\n6CA0\nA4A0\nA4A0\n24A0\n27E0\n2000\nENDCHAR\nSTARTCHAR U_6764\nENCODING 26468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nFA00\n2200\n73C0\n6A40\nA240\nA440\n2440\n2940\n2880\nENDCHAR\nSTARTCHAR U_6765\nENCODING 26469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n2480\n1500\nFFE0\n0400\n0E00\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_6766\nENCODING 26470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBC0\n2280\n7480\n6900\nA100\nA280\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_6767\nENCODING 26471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nF900\n2FE0\n7200\n6A00\nA200\nA200\n2200\n23E0\n2000\nENDCHAR\nSTARTCHAR U_6768\nENCODING 26472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2080\nF900\n2200\n77E0\n6AA0\nA2A0\nA4A0\n2920\n2220\n24C0\nENDCHAR\nSTARTCHAR U_6769\nENCODING 26473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\nFA40\n2240\n7240\n6BE0\nA020\nA7A0\n2020\n2020\n20C0\nENDCHAR\nSTARTCHAR U_676A\nENCODING 26474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF900\n2540\n7520\n6900\nA120\nA040\n2080\n2300\n2C00\nENDCHAR\nSTARTCHAR U_676B\nENCODING 26475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF900\n21C0\n7500\n6D00\nA500\nA500\n2500\n2FE0\n2000\nENDCHAR\nSTARTCHAR U_676C\nENCODING 26476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2000\nF800\n27E0\n6280\n7280\nAA80\nA280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_676D\nENCODING 26477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2000\n2380\n3280\n6A80\nA280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_676E\nENCODING 26478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n27E0\n7520\n6D20\nA520\nA5A0\n2540\n2100\n2100\nENDCHAR\nSTARTCHAR U_676F\nENCODING 26479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF880\n2100\n3100\n2B40\n6520\nA920\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_6770\nENCODING 26480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\nFFE0\n1500\n2480\n4440\n8420\n0000\n5240\n4920\n8920\nENDCHAR\nSTARTCHAR U_6771\nENCODING 26481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n3F80\n2480\n3F80\n2480\n3F80\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_6772\nENCODING 26482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n0400\nFFE0\n0E00\n3580\nC460\n0400\nENDCHAR\nSTARTCHAR U_6773\nENCODING 26483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1500\n2480\n4440\nBFA0\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_6774\nENCODING 26484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2220\n6540\n7100\nA900\nA280\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_6775\nENCODING 26485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2480\n6080\n77E0\nA880\nA080\n2080\n2080\n2080\nENDCHAR\nSTARTCHAR U_6776\nENCODING 26486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2100\n2540\n3540\n6FC0\nA100\n2120\n2120\n20E0\nENDCHAR\nSTARTCHAR U_6777\nENCODING 26487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nFD40\n2540\n6540\n77C0\nAC00\nA400\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_6778\nENCODING 26488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFA40\n2240\n6420\n77C0\nAA40\nA240\n2180\n2240\n2C20\nENDCHAR\nSTARTCHAR U_6779\nENCODING 26489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFCA0\n24A0\n6CC0\n7480\nAD80\nA680\n24A0\n24A0\n2460\nENDCHAR\nSTARTCHAR U_677A\nENCODING 26490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFA80\n2200\n2200\n3640\n6A20\nA220\n2240\n2240\n21C0\nENDCHAR\nSTARTCHAR U_677B\nENCODING 26491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2140\nF940\n2140\n2140\n37C0\n6A40\nA240\n2240\n2240\n2FE0\nENDCHAR\nSTARTCHAR U_677C\nENCODING 26492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2040\nFA80\n2100\n6FE0\n7120\nA940\nA100\n2100\n2100\n2300\nENDCHAR\nSTARTCHAR U_677D\nENCODING 26493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2780\nF880\n27E0\n2080\n7080\n6FE0\nA080\n2080\n2280\n2100\nENDCHAR\nSTARTCHAR U_677E\nENCODING 26494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\nFA40\n2440\n2420\n3120\n6900\nA200\n2240\n2440\n27A0\nENDCHAR\nSTARTCHAR U_677F\nENCODING 26495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nFC00\n2400\n27C0\n7440\n6E40\nA580\n2880\n2940\n3620\nENDCHAR\nSTARTCHAR U_6780\nENCODING 26496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2080\nC860\n1100\n3F80\n0400\nFFE0\n1500\n2480\n4440\n8420\nENDCHAR\nSTARTCHAR U_6781\nENCODING 26497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2240\nFA80\n22E0\n2220\n7220\n6D40\nA540\n2480\n2940\n3220\nENDCHAR\nSTARTCHAR U_6782\nENCODING 26498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\nFA20\n23E0\n7220\n6A20\nA3E0\nA220\n2220\n2420\n2860\nENDCHAR\nSTARTCHAR U_6783\nENCODING 26499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFFE0\n2020\n6220\n7120\nA8A0\nA120\n2620\n20A0\n2040\nENDCHAR\nSTARTCHAR U_6784\nENCODING 26500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2420\n2220\n7220\n6CA0\nA7A0\n20A0\n2020\n20C0\nENDCHAR\nSTARTCHAR U_6785\nENCODING 26501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2240\nFA40\n2240\n27E0\n3240\n6A40\nA240\n2240\n2440\n2840\nENDCHAR\nSTARTCHAR U_6786\nENCODING 26502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\nF900\n2100\n21E0\n3700\n6900\nA1E0\n2720\n2120\n20E0\nENDCHAR\nSTARTCHAR U_6787\nENCODING 26503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\nFC80\n24A0\n27C0\n3480\n6C80\nA480\n25A0\n26A0\n2460\nENDCHAR\nSTARTCHAR U_6788\nENCODING 26504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3AC0\n2300\n2A40\n31C0\n0400\nFFE0\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_6789\nENCODING 26505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nF900\n2100\n2100\n37C0\n6900\nA100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_678A\nENCODING 26506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n25E0\nFD20\n2520\n7520\n6D20\nA520\nA7A0\n2540\n2100\n2100\nENDCHAR\nSTARTCHAR U_678B\nENCODING 26507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2100\n61E0\n7120\nA920\nA220\n2220\n24A0\n2840\nENDCHAR\nSTARTCHAR U_678C\nENCODING 26508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\nFA80\n2240\n7420\n6FE0\nA240\nA240\n2240\n2540\n2880\nENDCHAR\nSTARTCHAR U_678D\nENCODING 26509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\nFA40\n2420\n6FE0\n7200\nABC0\nA040\n2040\n2140\n2080\nENDCHAR\nSTARTCHAR U_678E\nENCODING 26510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF7C0\n2100\n7100\n6FE0\nA100\nA280\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_678F\nENCODING 26511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nF440\n2FE0\n7440\n6C40\nAFE0\nA440\n2440\n2440\n24C0\nENDCHAR\nSTARTCHAR U_6790\nENCODING 26512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nFC00\n2400\n27E0\n3480\n6C80\nA480\n2480\n2880\n3080\nENDCHAR\nSTARTCHAR U_6791\nENCODING 26513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2200\nFA00\n23C0\n2240\n3440\n6C40\nA7C0\n2080\n2080\n2FE0\nENDCHAR\nSTARTCHAR U_6792\nENCODING 26514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2040\nFA40\n2240\n67E0\n70C0\nA940\nA240\n2440\n2840\n20C0\nENDCHAR\nSTARTCHAR U_6793\nENCODING 26515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2240\nF940\n2040\n2240\n3140\n6860\nA7C0\n2040\n2040\n2040\nENDCHAR\nSTARTCHAR U_6794\nENCODING 26516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFA80\n2440\n2920\n3080\n67E0\nA040\n2040\n2080\n2100\nENDCHAR\nSTARTCHAR U_6795\nENCODING 26517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2520\n3540\n6980\nA980\nA280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_6796\nENCODING 26518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\n2100\nF900\n27E0\n7100\n6900\nA280\nA280\n2440\n2820\nENDCHAR\nSTARTCHAR U_6797\nENCODING 26519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2100\n7100\n6B80\nA540\nA920\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_6798\nENCODING 26520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2520\n6520\n75A0\nAE60\nA420\n2420\n2420\n2460\nENDCHAR\nSTARTCHAR U_6799\nENCODING 26521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nFC00\n25E0\n2520\n3520\n6D60\nA500\n2520\n2920\n30E0\nENDCHAR\nSTARTCHAR U_679A\nENCODING 26522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2240\n2440\n7640\n6A80\nA180\n2180\n2240\n2C20\nENDCHAR\nSTARTCHAR U_679B\nENCODING 26523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2740\nFD40\n2540\n7540\n6D40\nA540\nA540\n2520\n2920\n2100\nENDCHAR\nSTARTCHAR U_679C\nENCODING 26524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n2480\n3F80\n0400\nFFE0\n0E00\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_679D\nENCODING 26525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2FE0\nF100\n27C0\n7240\n6A40\nA280\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_679E\nENCODING 26526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\nFC80\n2480\n6480\n7680\nAD80\nA480\n2940\n3220\n2420\nENDCHAR\nSTARTCHAR U_679F\nENCODING 26527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23C0\nF800\n2000\n67E0\n7100\nA900\nA200\n2240\n2FE0\n2420\nENDCHAR\nSTARTCHAR U_67A0\nENCODING 26528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2780\nFA80\n22A0\n74A0\n6A60\nA200\nAFE0\n2200\n2200\n2200\nENDCHAR\nSTARTCHAR U_67A1\nENCODING 26529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2640\nFA40\n2240\n7240\n6FE0\nA240\nA240\n2440\n2440\n3040\nENDCHAR\nSTARTCHAR U_67A2\nENCODING 26530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nFC20\n2620\n2540\n3480\n6D40\nA620\n2420\n2400\n27E0\nENDCHAR\nSTARTCHAR U_67A3\nENCODING 26531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n3F80\n2480\n2E80\n1500\n6E80\n0160\n1C00\n0300\nENDCHAR\nSTARTCHAR U_67A4\nENCODING 26532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2180\nF940\n27E0\n7100\n6900\nA280\nA280\n2440\n2440\n2820\nENDCHAR\nSTARTCHAR U_67A5\nENCODING 26533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nFC80\n2480\n27E0\n34A0\n6CA0\nA4A0\n2520\n2AA0\n3440\nENDCHAR\nSTARTCHAR U_67A6\nENCODING 26534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFBE0\n2220\n73E0\n6A00\nA200\n2200\n2400\n2400\n2800\nENDCHAR\nSTARTCHAR U_67A7\nENCODING 26535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFD40\n2540\n2540\n3540\n6D40\nA180\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_67A8\nENCODING 26536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2260\n2240\nFA80\n2300\n2200\n37E0\n6A80\nA280\n22C0\n2320\n2220\nENDCHAR\nSTARTCHAR U_67A9\nENCODING 26537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1500\n2480\nC460\n0000\n1100\n2480\nC860\n1100\n3F80\nENDCHAR\nSTARTCHAR U_67AA\nENCODING 26538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nFC40\n2020\n27C0\n3440\n6C40\nA580\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_67AB\nENCODING 26539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFC40\n26C0\n2540\n3540\n6D40\nA6C0\n2440\n2820\n3020\nENDCHAR\nSTARTCHAR U_67AC\nENCODING 26540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nFC40\n2640\n7540\n6FE0\nA440\n2440\n2840\n2940\n3080\nENDCHAR\nSTARTCHAR U_67AD\nENCODING 26541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2880\n2580\n2000\n3FE0\n0420\n7FA0\n1560\n2480\nC460\nENDCHAR\nSTARTCHAR U_67AE\nENCODING 26542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF9E0\n2100\n2100\n37E0\n6C20\nA420\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_67AF\nENCODING 26543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFFE0\n2080\n2080\n33E0\n6A20\nA220\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_67B0\nENCODING 26544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nF920\n2540\n2340\n3100\n6FE0\nA100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_67B1\nENCODING 26545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFA00\n2440\n77E0\n6820\n67C0\nA440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_67B2\nENCODING 26546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n2080\n7FC0\n0040\n3F80\n2080\n3F80\n0400\nFFE0\n1580\nE460\nENDCHAR\nSTARTCHAR U_67B3\nENCODING 26547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nFC40\n2440\n7440\n6FC0\nA000\nA000\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_67B4\nENCODING 26548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFC40\n27C0\n6000\n77E0\nA920\nA120\n2220\n24A0\n2840\nENDCHAR\nSTARTCHAR U_67B5\nENCODING 26549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2000\n6FE0\n7200\nABC0\nA040\n2040\n2140\n2080\nENDCHAR\nSTARTCHAR U_67B6\nENCODING 26550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n2A20\n2A20\n4BE0\n9220\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_67B7\nENCODING 26551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n48E0\n5EA0\nFAA0\n4AA0\n6AA0\nDAA0\n4AA0\n4AA0\n52E0\n64A0\nENDCHAR\nSTARTCHAR U_67B8\nENCODING 26552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2420\n23A0\n32A0\n6AA0\nA3A0\n2020\n2120\n20C0\nENDCHAR\nSTARTCHAR U_67B9\nENCODING 26553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nF820\n27A0\n24A0\n34A0\n6FA0\nA4C0\n2400\n2420\n23E0\nENDCHAR\nSTARTCHAR U_67BA\nENCODING 26554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n2100\n67C0\n7100\nAB80\nA540\n2920\n2100\n2100\nENDCHAR\nSTARTCHAR U_67BB\nENCODING 26555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2540\nF540\n2FE0\n6540\n7540\nAD40\nA5C0\n2400\n2400\n27E0\nENDCHAR\nSTARTCHAR U_67BC\nENCODING 26556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\nFFE0\n2900\n2F00\n2000\n3FC0\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_67BD\nENCODING 26557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n2480\nFFE0\n2080\n3F80\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_67BE\nENCODING 26558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n2540\n7540\n6FC0\nA540\n2540\n2940\n2100\n2100\nENDCHAR\nSTARTCHAR U_67BF\nENCODING 26559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF7E0\n2100\n7240\n6A40\nAFE0\n2240\n2240\n2440\n2840\nENDCHAR\nSTARTCHAR U_67C0\nENCODING 26560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFFE0\n24A0\n2480\n37E0\n6D40\nA540\n2880\n3140\n2620\nENDCHAR\nSTARTCHAR U_67C1\nENCODING 26561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2420\n2200\n3240\n6B80\nA200\n2220\n2220\n21E0\nENDCHAR\nSTARTCHAR U_67C2\nENCODING 26562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\nFC80\n22A0\n22E0\n33A0\n6EA0\nA2E0\n2280\n2220\n21E0\nENDCHAR\nSTARTCHAR U_67C3\nENCODING 26563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFA80\n2440\n6920\n7080\nAFE0\nA040\n2280\n2100\n2080\nENDCHAR\nSTARTCHAR U_67C4\nENCODING 26564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\nF880\n27E0\n24A0\n34A0\n6DA0\nA660\n2420\n2420\n24E0\nENDCHAR\nSTARTCHAR U_67C5\nENCODING 26565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFC20\n27E0\n2400\n3520\n6D40\nA580\n2520\n2920\n30E0\nENDCHAR\nSTARTCHAR U_67C6\nENCODING 26566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2000\n2440\n3440\n6A40\nA240\n2080\n2080\n2FE0\nENDCHAR\nSTARTCHAR U_67C7\nENCODING 26567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF100\n2FE0\n7100\n6B00\nA380\n2540\n2920\n2100\n2100\nENDCHAR\nSTARTCHAR U_67C8\nENCODING 26568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2520\nFD40\n2100\n27C0\n3100\n6FE0\nA100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_67C9\nENCODING 26569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\nF900\n2080\n27E0\n3040\n6880\nA300\n2400\n2A00\n31E0\nENDCHAR\nSTARTCHAR U_67CA\nENCODING 26570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nFC40\n2280\n2100\n3280\n6C60\nA100\n20C0\n2300\n20C0\nENDCHAR\nSTARTCHAR U_67CB\nENCODING 26571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\n2480\n7FE0\nA200\n2120\n24E0\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_67CC\nENCODING 26572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2020\nFFA0\n2020\n27A0\n34A0\n6CA0\nA7A0\n24A0\n2020\n20E0\nENDCHAR\nSTARTCHAR U_67CD\nENCODING 26573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFC0\n2540\n2540\n3540\n6FE0\nA100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_67CE\nENCODING 26574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\nFC40\n25E0\n2440\n3640\n6D40\nA440\n2440\n2540\n2480\nENDCHAR\nSTARTCHAR U_67CF\nENCODING 26575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2100\nFBE0\n2220\n2220\n33E0\n6A20\nA220\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_67D0\nENCODING 26576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1F00\n1100\n1F00\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_67D1\nENCODING 26577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\nFFE0\n2240\n2240\n33C0\n6A40\nA240\n2240\n23C0\n2240\nENDCHAR\nSTARTCHAR U_67D2\nENCODING 26578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n5260\n3380\n6E20\n21E0\n2400\nFFE0\n1500\n2480\n4440\n8420\nENDCHAR\nSTARTCHAR U_67D3\nENCODING 26579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\nAF80\n5480\n24A0\nC8E0\n5000\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_67D4\nENCODING 26580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0900\n7FE0\n1440\n2480\n4C00\n8400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_67D5\nENCODING 26581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2140\nF880\n27E0\n30A0\n69C0\n6280\nA480\n3880\n2280\n2100\nENDCHAR\nSTARTCHAR U_67D6\nENCODING 26582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nFA20\n2220\n74A0\n6840\nA7E0\n2420\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_67D7\nENCODING 26583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2280\nFA80\n2240\n7440\n6820\nA7C0\n2440\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_67D8\nENCODING 26584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF900\n2100\n7200\n6BE0\nA620\nAA20\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_67D9\nENCODING 26585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n24A0\nFCA0\n27E0\n24A0\n34A0\n6FE0\nA4A0\n2080\n2080\n2080\nENDCHAR\nSTARTCHAR U_67DA\nENCODING 26586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2920\n3920\n6FE0\nA920\nA920\n2920\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_67DB\nENCODING 26587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2520\n27E0\n3520\n6FE0\nA520\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_67DC\nENCODING 26588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nFC00\n27C0\n2440\n7440\n6FC0\nA400\nA400\n2400\n27E0\nENDCHAR\nSTARTCHAR U_67DD\nENCODING 26589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nFC00\n2400\n27E0\n3480\n6D80\nA4C0\n24A0\n2880\n3080\nENDCHAR\nSTARTCHAR U_67DE\nENCODING 26590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\n2500\n2100\n31E0\n6900\nA100\n21E0\n2100\n2100\nENDCHAR\nSTARTCHAR U_67DF\nENCODING 26591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nFD40\n2540\n27C0\n3540\n6D40\nAFE0\n2440\n2440\n24C0\nENDCHAR\nSTARTCHAR U_67E0\nENCODING 26592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nFC20\n2000\n27E0\n3080\n6880\nA080\n2080\n2080\n2380\nENDCHAR\nSTARTCHAR U_67E1\nENCODING 26593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n2000\nFFE0\n2100\n7100\n6DA0\nA540\nA940\n3120\n2300\nENDCHAR\nSTARTCHAR U_67E2\nENCODING 26594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\nFC80\n2480\n27E0\n3480\n6C80\nA4A0\n2560\n2720\n24A0\nENDCHAR\nSTARTCHAR U_67E3\nENCODING 26595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n2500\nFFC0\n2900\n2100\n37E0\n6900\nA100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_67E4\nENCODING 26596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFC40\n27C0\n2440\n3440\n6C40\nA7C0\n2440\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_67E5\nENCODING 26597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1500\n2480\nFFE0\n2080\n3F80\n2080\n3F80\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_67E6\nENCODING 26598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nFC40\n2440\n67C0\n7440\nAC40\nA7C0\n2000\n2000\n2FE0\nENDCHAR\nSTARTCHAR U_67E7\nENCODING 26599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2740\nFD40\n2540\n6540\n7540\nAD40\nA540\n2520\n2960\n31A0\nENDCHAR\nSTARTCHAR U_67E8\nENCODING 26600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFFE0\n2500\n77C0\n6D40\nB540\nA540\n2540\n25C0\n2100\nENDCHAR\nSTARTCHAR U_67E9\nENCODING 26601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nFD00\n25C0\n2540\n3640\n6C40\nA4A0\n2520\n2400\n27E0\nENDCHAR\nSTARTCHAR U_67EA\nENCODING 26602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\nFDE0\n2AA0\n26A0\n34A0\n6EA0\nA9A0\n3EA0\n2120\n22C0\nENDCHAR\nSTARTCHAR U_67EB\nENCODING 26603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFFE0\n22A0\n6FE0\n7A80\nAFE0\nA2A0\n22A0\n24C0\n2880\nENDCHAR\nSTARTCHAR U_67EC\nENCODING 26604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n5540\n4A40\n7FC0\n0E00\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_67ED\nENCODING 26605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2240\nFFE0\n2200\n7200\n6BE0\nA240\nA540\n2480\n2940\n3620\nENDCHAR\nSTARTCHAR U_67EE\nENCODING 26606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2520\nFD20\n2520\n27E0\n3100\n6D20\nA520\n2520\n27E0\n2420\nENDCHAR\nSTARTCHAR U_67EF\nENCODING 26607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2040\nF840\n2740\n2540\n3540\n6F40\nA540\n2040\n2140\n2080\nENDCHAR\nSTARTCHAR U_67F0\nENCODING 26608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1500\n2480\nC460\n3F80\n0000\nFFE0\n2480\n4440\n8C20\nENDCHAR\nSTARTCHAR U_67F1\nENCODING 26609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2100\n7100\n6900\nA7C0\nA100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_67F2\nENCODING 26610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2140\nFA40\n2240\n2240\n3680\n6AA0\nA320\n2240\n2640\n39C0\nENDCHAR\nSTARTCHAR U_67F3\nENCODING 26611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2CE0\nFAA0\n2AA0\n2AA0\n3AA0\n6EA0\nAAA0\n22E0\n2480\n2880\nENDCHAR\nSTARTCHAR U_67F4\nENCODING 26612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1240\n5E80\n5320\n5220\nF9E0\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_67F5\nENCODING 26613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4AA0\nFAA0\n4AA0\n5FE0\n6AA0\nDAA0\n4AA0\n4AA0\n4AA0\n4860\nENDCHAR\nSTARTCHAR U_67F6\nENCODING 26614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFAA0\n2AA0\n2AA0\n3AA0\n6CE0\nA820\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_67F7\nENCODING 26615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFC40\n2440\n67C0\n7280\nAA80\nA280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_67F8\nENCODING 26616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nF900\n2180\n6340\n7520\nA920\nA100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_67F9\nENCODING 26617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\nF700\n2500\n7500\n6FE0\nAB20\n25A0\n3940\n2100\n2100\nENDCHAR\nSTARTCHAR U_67FA\nENCODING 26618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFC20\n27E0\n7100\n6FE0\nA120\nA120\n2220\n24A0\n2840\nENDCHAR\nSTARTCHAR U_67FB\nENCODING 26619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1500\nE4E0\n3F80\n2080\n3F80\n2080\n3F80\n2080\nFFE0\nENDCHAR\nSTARTCHAR U_67FC\nENCODING 26620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2820\n6080\n7280\nAA80\nA240\n2440\n2420\n2820\nENDCHAR\nSTARTCHAR U_67FD\nENCODING 26621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2440\nFA40\n2180\n7240\n6D20\nA100\nA7C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_67FE\nENCODING 26622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nF900\n2100\n3500\n6DC0\n6500\nA500\n2500\n2500\n2FE0\nENDCHAR\nSTARTCHAR U_67FF\nENCODING 26623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n2100\n27E0\n3520\n6D20\nA520\n2560\n2100\n2100\nENDCHAR\nSTARTCHAR U_6800\nENCODING 26624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2780\n2400\nFFE0\n2400\n75C0\n6D40\nA5C0\nA520\n2520\n29E0\nENDCHAR\nSTARTCHAR U_6801\nENCODING 26625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n24E0\nF7A0\n25A0\n79A0\n6AA0\nB6A0\nA2E0\n2480\n2880\n3080\nENDCHAR\nSTARTCHAR U_6802\nENCODING 26626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nFC40\n2640\n7540\n6FE0\nA640\nA940\n2FE0\n2040\n2180\nENDCHAR\nSTARTCHAR U_6803\nENCODING 26627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2F00\n2800\nFFE0\n2900\n69E0\n7920\nA920\nAA20\n2AA0\n3440\nENDCHAR\nSTARTCHAR U_6804\nENCODING 26628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n1500\nFFE0\n8420\n0400\n7FC0\n0E00\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_6805\nENCODING 26629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFAA0\n2AA0\n3FE0\n2AA0\n6AA0\nAAA0\n2AA0\n2AA0\n3560\nENDCHAR\nSTARTCHAR U_6806\nENCODING 26630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n3F80\n2480\n3F80\n0A00\n3180\nC460\n0A00\n0400\nENDCHAR\nSTARTCHAR U_6807\nENCODING 26631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2000\nF800\n2FE0\n2100\n7100\n6540\nA520\n2920\n2100\n2300\nENDCHAR\nSTARTCHAR U_6808\nENCODING 26632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\nFFE0\n2100\n31E0\n6F00\n6120\nA140\n20A0\n2360\n2C20\nENDCHAR\nSTARTCHAR U_6809\nENCODING 26633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nFA40\n2000\n2FE0\n3120\n6920\nA120\n2160\n2100\n2100\nENDCHAR\nSTARTCHAR U_680A\nENCODING 26634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n2140\nF900\n27E0\n2280\n32A0\n6AA0\nA2C0\n2480\n29A0\n3260\nENDCHAR\nSTARTCHAR U_680B\nENCODING 26635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n2280\n7480\n6FE0\nA080\nA4C0\n24A0\n28A0\n2180\nENDCHAR\nSTARTCHAR U_680C\nENCODING 26636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\nF900\n27E0\n7420\n6C20\nA7E0\nA400\n2400\n2800\n3000\nENDCHAR\nSTARTCHAR U_680D\nENCODING 26637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\n2500\nF7E0\n2900\n7100\n6FC0\nA100\nA100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_680E\nENCODING 26638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2380\nFC00\n2480\n2480\n37E0\n6880\nA2C0\n24A0\n28A0\n2180\nENDCHAR\nSTARTCHAR U_680F\nENCODING 26639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2420\n2240\nF000\n2FE0\n6000\n7000\nA7C0\nA000\n2000\n2000\n2FE0\nENDCHAR\nSTARTCHAR U_6810\nENCODING 26640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n2080\nFF00\n2120\n2F40\n7380\n6D40\nA540\nA920\n2100\n2300\nENDCHAR\nSTARTCHAR U_6811\nENCODING 26641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2E40\nF3E0\n2A40\n2A40\n7540\nA4C0\n2A40\n3140\n2040\n20C0\nENDCHAR\nSTARTCHAR U_6812\nENCODING 26642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nF7E0\n2820\n23A0\n32A0\n6BA0\nA2A0\n23A0\n2020\n20C0\nENDCHAR\nSTARTCHAR U_6813\nENCODING 26643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nFC40\n2020\n27C0\n3100\n6900\nA7C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6814\nENCODING 26644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1120\n7920\n1120\nFEC0\n1400\nFFE0\n1500\n2480\n4460\n8420\nENDCHAR\nSTARTCHAR U_6815\nENCODING 26645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2900\nFFC0\n2840\n3840\n6840\nAFC0\n2900\n2900\n2FE0\nENDCHAR\nSTARTCHAR U_6816\nENCODING 26646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nF280\n2FE0\n6AA0\n7AA0\nAAE0\nAC20\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_6817\nENCODING 26647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n7FC0\n0400\nFFE0\n1500\n2480\n4440\n8420\nENDCHAR\nSTARTCHAR U_6818\nENCODING 26648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\nFA40\n2580\n2100\n36E0\n6920\nA6A0\n2040\n2080\n2700\nENDCHAR\nSTARTCHAR U_6819\nENCODING 26649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nF680\n2100\n76E0\n6900\nAFC0\n2500\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_681A\nENCODING 26650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nFFC0\n2100\n2100\n37E0\n6900\nA100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_681B\nENCODING 26651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\nFA40\n2240\n7540\n6880\nBFE0\nAAA0\n2AA0\n2AA0\n3760\nENDCHAR\nSTARTCHAR U_681C\nENCODING 26652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n27E0\n7520\n6D20\nA560\nA380\n2540\n2920\n2100\nENDCHAR\nSTARTCHAR U_681D\nENCODING 26653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF900\n27E0\n7100\n6900\nA7E0\nA420\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_681E\nENCODING 26654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n1080\n1080\n7BE0\n2080\n4480\nFFE0\n0D00\n3480\nC460\n0400\nENDCHAR\nSTARTCHAR U_681F\nENCODING 26655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nFFE0\n2280\n7280\n6FE0\nA280\nA280\n2280\n2480\n2880\nENDCHAR\nSTARTCHAR U_6820\nENCODING 26656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n4F00\nC100\n5FE0\n4100\n4FC0\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_6821\nENCODING 26657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nF000\n2280\n7440\n6AA0\nA280\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_6822\nENCODING 26658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nFA00\n27C0\n7440\n6C40\nA7C0\n2440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_6823\nENCODING 26659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2260\nF780\n2C80\n7480\n67E0\nA480\n2480\n2480\n27E0\n2400\nENDCHAR\nSTARTCHAR U_6824\nENCODING 26660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5100\nE940\n4740\n6380\nCB80\nD540\n5520\n4920\n5500\n4200\nENDCHAR\nSTARTCHAR U_6825\nENCODING 26661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n1A40\n2300\nC480\n4840\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_6826\nENCODING 26662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n22A0\nFAA0\n22A0\n77E0\n6AA0\nA2A0\nA2A0\n22A0\n24A0\n2820\nENDCHAR\nSTARTCHAR U_6827\nENCODING 26663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nFD40\n27C0\n7540\n6FC0\nA140\n2180\n22A0\n2C60\n2020\nENDCHAR\nSTARTCHAR U_6828\nENCODING 26664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n2500\nF9E0\n2220\n20A0\n3280\n6A80\nAC80\n2480\n2540\n2620\nENDCHAR\nSTARTCHAR U_6829\nENCODING 26665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF920\n25A0\n7360\n6920\nA360\nA5A0\n2120\n2120\n2360\nENDCHAR\nSTARTCHAR U_682A\nENCODING 26666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\nF7C0\n2900\n7100\n6FE0\nA100\nA380\n2540\n2920\n2100\nENDCHAR\nSTARTCHAR U_682B\nENCODING 26667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nF200\n25E0\n3440\n2C80\n77E0\nA480\n2480\n2480\n2580\nENDCHAR\nSTARTCHAR U_682C\nENCODING 26668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n2480\nFFC0\n2540\n7540\n6FC0\nA400\nA420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_682D\nENCODING 26669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nF200\n2FE0\n3AA0\n2AA0\n6AA0\nAAA0\n2AA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_682E\nENCODING 26670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2440\nFC40\n27C0\n2440\n37C0\n6C40\nA440\n25E0\n2E40\n2040\nENDCHAR\nSTARTCHAR U_682F\nENCODING 26671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2200\n23E0\n3620\n6BE0\nA220\n23E0\n2220\n22E0\nENDCHAR\nSTARTCHAR U_6830\nENCODING 26672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22C0\n22A0\nF480\n2FE0\n7480\n6CA0\nA4A0\nA4C0\n24A0\n2560\n2620\nENDCHAR\nSTARTCHAR U_6831\nENCODING 26673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFA80\n27E0\n2280\n3280\n6FE0\nA000\n2240\n2420\n2820\nENDCHAR\nSTARTCHAR U_6832\nENCODING 26674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n27A0\nF940\n2FE0\n2100\n33E0\n6D00\nA3E0\n2020\n2120\n20C0\nENDCHAR\nSTARTCHAR U_6833\nENCODING 26675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27A0\nF920\n2140\n27E0\n3100\n6A40\nA780\n2A20\n2220\n21E0\nENDCHAR\nSTARTCHAR U_6834\nENCODING 26676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nF800\n27C0\n2540\n3540\n6FE0\nA440\n2440\n2940\n3080\nENDCHAR\nSTARTCHAR U_6835\nENCODING 26677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FA0\n2420\nF4A0\n27A0\n28A0\n39A0\n66A0\nA2A0\n2420\n2820\n30E0\nENDCHAR\nSTARTCHAR U_6836\nENCODING 26678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nF920\n2FE0\n6920\n7920\nAAA0\nAC60\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_6837\nENCODING 26679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nFFE0\n2100\n77C0\n6100\nA100\n2FE0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_6838\nENCODING 26680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2100\n2240\n7780\n6920\nA240\n2480\n2140\n2E20\nENDCHAR\nSTARTCHAR U_6839\nENCODING 26681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n27C0\n3520\n6D40\nA480\n2480\n2540\n2620\nENDCHAR\nSTARTCHAR U_683A\nENCODING 26682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24C0\n2700\nFC20\n23E0\n2000\n37E0\n6C20\nA7E0\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_683B\nENCODING 26683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\nFFE0\n2080\n7080\n6F80\nA480\nA4A0\n27A0\n3C60\n2020\nENDCHAR\nSTARTCHAR U_683C\nENCODING 26684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nF440\n2A80\n2100\n7280\n6C60\nA7C0\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_683D\nENCODING 26685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n7D20\n1100\nFFE0\n1100\nFD20\n1140\n3880\n55A0\n9260\n1420\nENDCHAR\nSTARTCHAR U_683E\nENCODING 26686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0900\n2940\nC920\n0400\nFFE0\n1500\n2480\n4440\n8420\nENDCHAR\nSTARTCHAR U_683F\nENCODING 26687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n22C0\n24A0\nFFE0\n2480\n7480\n6C80\nA480\n2540\n2540\n2620\nENDCHAR\nSTARTCHAR U_6840\nENCODING 26688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7FE0\n4880\nB280\n17E0\n2080\n4480\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_6841\nENCODING 26689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n25E0\nF800\n2200\n75E0\n6C40\nA440\nA440\n2440\n2440\n24C0\nENDCHAR\nSTARTCHAR U_6842\nENCODING 26690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF900\n2100\n2FE0\n3000\n6900\nA7C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6843\nENCODING 26691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFAA0\n26C0\n2280\n36C0\n6AA0\nA280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_6844\nENCODING 26692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nFD40\n2100\n27E0\n3280\n6A80\nA280\n24A0\n28A0\n3060\nENDCHAR\nSTARTCHAR U_6845\nENCODING 26693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nF480\n2FE0\n2400\n35E0\n6D20\nA560\n2500\n2520\n28E0\nENDCHAR\nSTARTCHAR U_6846\nENCODING 26694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nFFE0\n2480\n2480\n75C0\n6C80\nA480\n27E0\n2400\n27E0\nENDCHAR\nSTARTCHAR U_6847\nENCODING 26695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nFBC0\n2A40\n6A40\n13C0\n6C00\nFFE0\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_6848\nENCODING 26696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8820\nFFE0\n1200\n0F00\nF8E0\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_6849\nENCODING 26697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2520\n2100\n37E0\n6A40\nA240\n2180\n2340\n2C20\nENDCHAR\nSTARTCHAR U_684A\nENCODING 26698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\n7FC0\n0800\nFFE0\n2080\n4440\nBFA0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_684B\nENCODING 26699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF100\n2FC0\n2140\n37C0\n6500\nAFE0\n2160\n2280\n2C60\nENDCHAR\nSTARTCHAR U_684C\nENCODING 26700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n3F80\n2080\n3F80\n2080\n3F80\n0400\nFFE0\n2480\nC460\nENDCHAR\nSTARTCHAR U_684D\nENCODING 26701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFA80\n2440\n6BA0\n7000\nAFE0\nA200\n27C0\n2040\n2180\nENDCHAR\nSTARTCHAR U_684E\nENCODING 26702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFA00\n2440\n2FA0\n3100\n6900\nA7C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_684F\nENCODING 26703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2EA0\nFCA0\n24A0\n24C0\n34A0\n6DA0\nA6A0\n3CE0\n2080\n2080\nENDCHAR\nSTARTCHAR U_6850\nENCODING 26704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nFBA0\n2820\n6BA0\n7AA0\nAAA0\nABA0\n2AA0\n2820\n2860\nENDCHAR\nSTARTCHAR U_6851\nENCODING 26705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n1100\n0E00\n1100\nFBE0\n4A40\n3180\n4A40\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_6852\nENCODING 26706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n2480\nFFE0\n2080\n0400\nFFE0\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_6853\nENCODING 26707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2000\nF800\n27C0\n6440\n77C0\nAC40\nA7C0\n2440\n2000\n2FE0\nENDCHAR\nSTARTCHAR U_6854\nENCODING 26708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2100\n27C0\n3000\n6FC0\nA440\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_6855\nENCODING 26709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2CE0\nF820\n2820\n2820\n3EE0\n6820\nA820\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_6856\nENCODING 26710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n4800\n5FC0\nF540\n5540\nF540\nD540\n5540\n5540\n7FE0\n4000\nENDCHAR\nSTARTCHAR U_6857\nENCODING 26711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2240\nFAE0\n2420\n78A0\n6240\nAFE0\n2700\n2A80\n3260\n2200\nENDCHAR\nSTARTCHAR U_6858\nENCODING 26712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\n2440\nFC40\n27C0\n7400\n67E0\nA420\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_6859\nENCODING 26713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2240\nF7C0\n2140\n3500\n67C0\nA900\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_685A\nENCODING 26714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2540\n2A80\nF540\n2200\n77E0\n6440\nAA40\n2180\n2300\n2C00\nENDCHAR\nSTARTCHAR U_685B\nENCODING 26715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nFA00\n2FE0\n7000\n6FE0\nA200\n2300\n22C0\n2240\n2200\nENDCHAR\nSTARTCHAR U_685C\nENCODING 26716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n2560\nFD40\n3280\n6A00\n6FE0\nA240\n2680\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_685D\nENCODING 26717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2440\n2840\nFFE0\n2A40\n7B40\n65E0\nA440\n2440\n2840\n2040\nENDCHAR\nSTARTCHAR U_685E\nENCODING 26718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n24E0\n2EA0\nFAA0\n2AC0\n76A0\n62A0\nA4E0\n2480\n2480\n2880\nENDCHAR\nSTARTCHAR U_685F\nENCODING 26719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2240\nFBC0\n2E00\n73C0\n6E00\nA3E0\n2E80\n2120\n2EA0\n2060\nENDCHAR\nSTARTCHAR U_6860\nENCODING 26720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nF280\n2280\n72A0\n6AA0\nA6C0\nA280\n2280\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_6861\nENCODING 26721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nFF40\n21A0\n2660\n3000\n6FE0\nA280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_6862\nENCODING 26722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\nF900\n27E0\n2420\n3520\n6D20\nA520\n2520\n2280\n2C60\nENDCHAR\nSTARTCHAR U_6863\nENCODING 26723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2520\nFB40\n2100\n27E0\n7020\n6820\nA7E0\n2020\n2020\n27E0\nENDCHAR\nSTARTCHAR U_6864\nENCODING 26724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2920\nFFE0\n2000\n67E0\n7020\nAFE0\nA400\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_6865\nENCODING 26725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF100\n2FE0\n6280\n7440\nAAA0\nA280\n2280\n2480\n2880\nENDCHAR\nSTARTCHAR U_6866\nENCODING 26726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n22A0\nFCC0\n25A0\n74A0\n6C60\nA100\nAFE0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_6867\nENCODING 26727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFA80\n2440\n6FE0\n7000\nAFE0\nA200\n2440\n2FE0\n2420\nENDCHAR\nSTARTCHAR U_6868\nENCODING 26728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n33E0\n1440\n3280\nD700\n0400\nFFE0\n1500\n2480\n4440\n8420\nENDCHAR\nSTARTCHAR U_6869\nENCODING 26729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nFC00\n2480\n2480\n37E0\n6C80\nA480\n2480\n2880\n37E0\nENDCHAR\nSTARTCHAR U_686A\nENCODING 26730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\nF7C0\n2040\n77C0\n6880\nAFE0\nA480\n2280\n2080\n2180\nENDCHAR\nSTARTCHAR U_686B\nENCODING 26731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2280\nF8C0\n25A0\n7280\n6AA0\nA420\nAC40\n2480\n2500\n2600\nENDCHAR\nSTARTCHAR U_686C\nENCODING 26732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nAA80\n4A40\n3280\nCF00\n5400\nFFE0\n0E00\n3580\nC460\n0400\nENDCHAR\nSTARTCHAR U_686D\nENCODING 26733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nFDC0\n2400\n67E0\n7580\nADA0\nA540\n2540\n29A0\n3120\nENDCHAR\nSTARTCHAR U_686E\nENCODING 26734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2080\nF980\n2340\n6520\n7100\nAFE0\nA420\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_686F\nENCODING 26735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFC40\n27C0\n2000\n37E0\n6900\nA7C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6870\nENCODING 26736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2700\nFD00\n27E0\n6480\n75A0\nA660\n2000\n27E0\n2420\n27E0\nENDCHAR\nSTARTCHAR U_6871\nENCODING 26737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2540\nFD40\n2A80\n2540\n3540\n6FC0\nA100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6872\nENCODING 26738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF900\n2FE0\n6820\n77C0\nA880\nAFE0\n2100\n2100\n2300\nENDCHAR\nSTARTCHAR U_6873\nENCODING 26739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2440\nFFE0\n2100\n6FE0\n7280\nA540\nA920\n27C0\n2100\n2100\nENDCHAR\nSTARTCHAR U_6874\nENCODING 26740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2720\nFD40\n2280\n77C0\n6880\nA100\nAFE0\n2100\n2100\n2300\nENDCHAR\nSTARTCHAR U_6875\nENCODING 26741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n27A0\nFD20\n22C0\n7100\n6FE0\nA140\nA240\n2280\n2140\n2620\nENDCHAR\nSTARTCHAR U_6876\nENCODING 26742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2240\nF980\n27E0\n6520\n77E0\nAD20\nA7E0\n2520\n2520\n2460\nENDCHAR\nSTARTCHAR U_6877\nENCODING 26743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nF480\n2FE0\n6520\n77E0\nAD20\nA7E0\n2520\n2920\n3160\nENDCHAR\nSTARTCHAR U_6878\nENCODING 26744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2660\n2180\nF660\n2900\n2FE0\n3480\n6FE0\nB4A0\n24A0\n24E0\n2080\nENDCHAR\nSTARTCHAR U_6879\nENCODING 26745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nFC40\n27C0\n6440\n77C0\nAD20\nA540\n2480\n2640\n2420\nENDCHAR\nSTARTCHAR U_687A\nENCODING 26746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nF280\n2EE0\n6AA0\n7AA0\nAEE0\n2280\n2280\n2480\n2880\nENDCHAR\nSTARTCHAR U_687B\nENCODING 26747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2C40\nF380\n2C60\n7100\n6FE0\nA100\nA7C0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_687C\nENCODING 26748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1500\n2480\nCE60\n3580\nC4E0\n1500\n0E00\n3580\nCC60\nENDCHAR\nSTARTCHAR U_687D\nENCODING 26749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1500\n2480\nC060\n2480\n5540\n8620\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_687E\nENCODING 26750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2140\nFFE0\n2140\n77C0\n6A00\nA7C0\nAA40\n3240\n23C0\n2240\nENDCHAR\nSTARTCHAR U_687F\nENCODING 26751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n77C0\n6800\nA7C0\nA100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_6880\nENCODING 26752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n27E0\n6520\n77E0\nA900\nA380\n2540\n2920\n2100\nENDCHAR\nSTARTCHAR U_6881\nENCODING 26753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F80\nA280\n4AC0\n2AA0\nD4A0\n4980\n5400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_6882\nENCODING 26754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\nFFE0\n2120\n2940\n3580\n6B40\nA540\n2920\n2120\n2300\nENDCHAR\nSTARTCHAR U_6883\nENCODING 26755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E20\n23C0\nFA40\n2440\n2FE0\n3240\n6A40\nABE0\n2400\n2A00\n31E0\nENDCHAR\nSTARTCHAR U_6884\nENCODING 26756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFE0\n2AA0\n6AA0\n7C60\nA820\nAFE0\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_6885\nENCODING 26757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nF800\n27C0\n7540\n6FE0\nA540\nA540\n27E0\n2040\n2180\nENDCHAR\nSTARTCHAR U_6886\nENCODING 26758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n24E0\nFFA0\n24A0\n6FC0\n74A0\nAFA0\nA4A0\n24E0\n2880\n3080\nENDCHAR\nSTARTCHAR U_6887\nENCODING 26759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFFC0\n2100\n2FE0\n3240\n6FE0\nA240\n2240\n2440\n2840\nENDCHAR\nSTARTCHAR U_6888\nENCODING 26760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nF800\n27C0\n7440\n6FC0\nA000\nAFC0\n2100\n2100\n2300\nENDCHAR\nSTARTCHAR U_6889\nENCODING 26761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2A40\nFA40\n2E40\n23E0\n3240\n6E40\nAA40\n2A40\n2A40\n32E0\nENDCHAR\nSTARTCHAR U_688A\nENCODING 26762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFF80\n2400\nF7E0\n2480\nE880\n0480\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_688B\nENCODING 26763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFFE0\n2000\n27E0\n3420\n6FE0\nA420\n27E0\n2420\n2460\nENDCHAR\nSTARTCHAR U_688C\nENCODING 26764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nFC40\n2820\n27C0\n7100\n6FE0\nA100\n2540\n2920\n3320\nENDCHAR\nSTARTCHAR U_688D\nENCODING 26765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\nF840\n2FC0\n7840\n6FC0\nA200\n23E0\n2E00\n2220\n21E0\nENDCHAR\nSTARTCHAR U_688E\nENCODING 26766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nFC40\n27C0\n7440\n6FC0\nA400\n24C0\n2720\n2420\n23E0\nENDCHAR\nSTARTCHAR U_688F\nENCODING 26767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2480\nF7E0\n2880\n77E0\n6800\nA7E0\nA420\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_6890\nENCODING 26768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n24A0\nFFC0\n2480\n75A0\n6E60\nA100\nA7C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6891\nENCODING 26769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\n2480\nF8A0\n25A0\n26C0\n3480\n6C80\nB480\n24C0\n3520\n2A20\nENDCHAR\nSTARTCHAR U_6892\nENCODING 26770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF280\n2D60\n67C0\n7080\nA100\nA7C0\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_6893\nENCODING 26771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2440\n7280\n6FE0\nA100\nA100\n27C0\n2100\n2100\nENDCHAR\nSTARTCHAR U_6894\nENCODING 26772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nFC00\n27E0\n2400\n37C0\n6D40\nA7C0\n2400\n2C20\n33E0\nENDCHAR\nSTARTCHAR U_6895\nENCODING 26773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF920\n2520\n7520\n6AA0\nA440\n2120\n2AA0\n2A40\n21C0\nENDCHAR\nSTARTCHAR U_6896\nENCODING 26774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n2440\n37C0\n6C40\nA7C0\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_6897\nENCODING 26775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFFE0\n2520\n77E0\n6D20\nA7E0\nA100\n2500\n2300\n2CE0\nENDCHAR\nSTARTCHAR U_6898\nENCODING 26776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n77C0\n6C40\nA7C0\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_6899\nENCODING 26777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nFD40\n27C0\n7100\n6FE0\nA920\nAFE0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_689A\nENCODING 26778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nF480\n2FC0\n7540\n6D40\nA7C0\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_689B\nENCODING 26779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n4AA0\nEAA0\n5EA0\n4AC0\n6AA0\nDEA0\n4AA0\n4AE0\n5280\n6480\nENDCHAR\nSTARTCHAR U_689C\nENCODING 26780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n2540\n2540\n3BA0\n6920\nA100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_689D\nENCODING 26781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\n5A40\n5180\nDE60\n5100\n5FE0\n5100\n4540\n4920\n5320\nENDCHAR\nSTARTCHAR U_689E\nENCODING 26782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\nF7C0\n2400\n7440\n6BC0\nA200\n2540\n2D20\n3440\n23C0\nENDCHAR\nSTARTCHAR U_689F\nENCODING 26783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7F80\n4080\n7FE0\n4000\n7FE0\n0420\nFFE0\n1520\n2480\nC460\nENDCHAR\nSTARTCHAR U_68A0\nENCODING 26784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFC40\n27C0\n6000\n7000\nAFE0\nA420\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_68A1\nENCODING 26785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFC20\n23C0\n7000\n6FE0\nA280\nA280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_68A2\nENCODING 26786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nF900\n27E0\n6420\n77E0\nAC20\nA7E0\n2420\n2420\n2460\nENDCHAR\nSTARTCHAR U_68A3\nENCODING 26787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n2520\nFFE0\n2100\n2280\n3540\n6920\nA7C0\n2040\n2080\n2100\nENDCHAR\nSTARTCHAR U_68A4\nENCODING 26788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2520\n2520\nFFE0\n2280\n7440\n6FE0\nA240\nA240\n2540\n2880\nENDCHAR\nSTARTCHAR U_68A5\nENCODING 26789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2880\n5140\n3F80\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_68A6\nENCODING 26790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFBE0\n1080\n39C0\nD6A0\n0800\n0FC0\n7080\n0D00\n0600\n7800\nENDCHAR\nSTARTCHAR U_68A7\nENCODING 26791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nFFC0\n2240\n6240\n77E0\nA800\nA7C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_68A8\nENCODING 26792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nF940\n1140\nFF40\n5540\n92C0\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_68A9\nENCODING 26793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nF540\n27C0\n7540\n6FC0\nA100\nA7C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_68AA\nENCODING 26794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2000\nF800\n27C0\n7440\n6C40\nA7C0\nA000\n2440\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_68AB\nENCODING 26795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\nFFC0\n2040\n6FE0\n7820\nA7C0\nA440\n2380\n2280\n2C60\nENDCHAR\nSTARTCHAR U_68AC\nENCODING 26796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nFD40\n27C0\n7540\n6FE0\nA200\nA7C0\n2040\n2140\n2080\nENDCHAR\nSTARTCHAR U_68AD\nENCODING 26797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2240\nFFE0\n2240\n7420\n6A00\nA3C0\nA640\n2980\n2240\n2C20\nENDCHAR\nSTARTCHAR U_68AE\nENCODING 26798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFFE0\n2400\n77E0\n6C20\nA7A0\nA6A0\n2BA0\n2820\n30C0\nENDCHAR\nSTARTCHAR U_68AF\nENCODING 26799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n27C0\nF940\n27C0\n7500\n6FE0\nA320\n2520\n29C0\n2100\nENDCHAR\nSTARTCHAR U_68B0\nENCODING 26800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\nFFE0\n2080\n2AA0\n3AA0\n6FA0\nAAC0\n2AA0\n3160\n2220\nENDCHAR\nSTARTCHAR U_68B1\nENCODING 26801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nF920\n2FE0\n2920\n3920\n6BA0\nAD60\n2920\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_68B2\nENCODING 26802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2440\nFFE0\n2440\n6440\n77C0\nAA80\nA280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_68B3\nENCODING 26803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF200\n2440\n77E0\n6800\nA540\nA540\n2540\n2960\n3020\nENDCHAR\nSTARTCHAR U_68B4\nENCODING 26804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5C20\n45C0\nF840\n4960\n6D40\n5540\nC940\n5940\n4BE0\n5400\n63E0\nENDCHAR\nSTARTCHAR U_68B5\nENCODING 26805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n2080\n71C0\nAAA0\n2480\n1F00\n1100\n1920\n2520\nC0E0\nENDCHAR\nSTARTCHAR U_68B6\nENCODING 26806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2400\n67C0\n7500\nA7C0\n2500\n27E0\n2920\n28E0\nENDCHAR\nSTARTCHAR U_68B7\nENCODING 26807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3A20\n2140\nF880\n8940\nFA20\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_68B8\nENCODING 26808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n26A0\nFAA0\n2FA0\n72A0\n66A0\nABA0\n32A0\n2220\n22A0\n2240\nENDCHAR\nSTARTCHAR U_68B9\nENCODING 26809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\nF400\n27C0\n7480\n6480\nBFE0\n2000\n2480\n2860\n3020\nENDCHAR\nSTARTCHAR U_68BA\nENCODING 26810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n7180\n6AC0\nA4A0\nFFE0\n0400\n0500\n04C0\n0440\n0400\nENDCHAR\nSTARTCHAR U_68BB\nENCODING 26811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2680\n2A80\nFFE0\n2AA0\n6FE0\n7A80\nAFE0\n2AA0\n2AA0\n2AE0\n2C80\nENDCHAR\nSTARTCHAR U_68BC\nENCODING 26812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n27E0\n7100\n6FE0\nA240\nA7E0\n2940\n3040\n20C0\nENDCHAR\nSTARTCHAR U_68BD\nENCODING 26813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFFE0\n2100\n77E0\n6800\nA200\n2540\n2D20\n3440\n23C0\nENDCHAR\nSTARTCHAR U_68BE\nENCODING 26814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\nF200\n2A80\n7700\n7FE0\nA200\n2700\n2A80\n3260\n2200\nENDCHAR\nSTARTCHAR U_68BF\nENCODING 26815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nF900\n2A80\n67E0\n7880\nA880\n2FE0\n2880\n2880\n37E0\nENDCHAR\nSTARTCHAR U_68C0\nENCODING 26816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nFC40\n2820\n27C0\n7000\n6920\nA4A0\n2240\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_68C1\nENCODING 26817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nF7C0\n2440\n7440\n6FC0\nA280\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_68C2\nENCODING 26818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2020\nFBE0\n2020\n77E0\n6900\nA520\nA940\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_68C3\nENCODING 26819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n11E0\nFEA0\n38A0\n5520\n9260\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_68C4\nENCODING 26820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2080\n7FC0\n2480\nFFE0\n2480\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_68C5\nENCODING 26821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2200\nFFE0\n2240\n6FE0\n7240\nAFC0\n2700\n2A80\n3260\n2200\nENDCHAR\nSTARTCHAR U_68C6\nENCODING 26822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nFC40\n2BA0\n2000\n3FE0\n6AA0\nAFE0\n2AA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_68C7\nENCODING 26823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFC40\n2520\n2100\n3240\n6FA0\nA140\n2AA0\n2A20\n33C0\nENDCHAR\nSTARTCHAR U_68C8\nENCODING 26824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n27C0\n7100\n6FE0\nA440\nA7C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_68C9\nENCODING 26825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nFC40\n27C0\n7440\n6FC0\nA100\nAFE0\n2920\n2960\n2100\nENDCHAR\nSTARTCHAR U_68CA\nENCODING 26826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1100\n1F00\n1100\nFFE0\n2480\n7FC0\n9520\n2480\n4440\nENDCHAR\nSTARTCHAR U_68CB\nENCODING 26827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nFA40\n23C0\n2240\n33C0\n6A40\nAFE0\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_68CC\nENCODING 26828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2720\nF920\n24C0\n2000\n3100\n6FE0\nA100\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_68CD\nENCODING 26829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n27C0\n3000\n6CA0\nA7C0\n24A0\n27A0\n2460\nENDCHAR\nSTARTCHAR U_68CE\nENCODING 26830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFA40\n2420\n7100\n6FE0\nA100\nA380\n2540\n2920\n2100\nENDCHAR\nSTARTCHAR U_68CF\nENCODING 26831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n77E0\n6840\nAFE0\nA040\n2440\n2240\n20C0\nENDCHAR\nSTARTCHAR U_68D0\nENCODING 26832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFBE0\n0A00\nFBE0\n0A00\nFBE0\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_68D1\nENCODING 26833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFEE0\n2280\n7280\n6EE0\nA280\nA280\n2EE0\n2280\n2280\nENDCHAR\nSTARTCHAR U_68D2\nENCODING 26834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n27C0\n7200\n6FE0\nA540\nABA0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_68D3\nENCODING 26835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2440\n6280\n77E0\nA800\nA7C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_68D4\nENCODING 26836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2480\nFFE0\n2480\n26A0\n3460\n6FC0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_68D5\nENCODING 26837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n27C0\n2000\n37E0\n6900\nA540\n2920\n3120\n2300\nENDCHAR\nSTARTCHAR U_68D6\nENCODING 26838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\nFFC0\n2400\n27C0\n3400\n6FE0\nA540\n2480\n2540\n2620\nENDCHAR\nSTARTCHAR U_68D7\nENCODING 26839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n2E80\n1500\n2480\nFFE0\n2480\n2E80\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_68D8\nENCODING 26840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n2080\nFBE0\nAAA0\nAAA0\nBAE0\n2080\n71C0\nAAA0\n2080\nENDCHAR\nSTARTCHAR U_68D9\nENCODING 26841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFC20\n27E0\n3500\n6D40\n67E0\nA500\n2980\n2A40\n3420\nENDCHAR\nSTARTCHAR U_68DA\nENCODING 26842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFAA0\n2EE0\n2AA0\n3AA0\n6EE0\nAAA0\n2AA0\n32A0\n2560\nENDCHAR\nSTARTCHAR U_68DB\nENCODING 26843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF200\n2440\n6FE0\n7440\nAFC0\n2440\n27C0\n2440\n24C0\nENDCHAR\nSTARTCHAR U_68DC\nENCODING 26844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2840\n2440\nFEA0\n2520\n2E20\n3A80\n6A60\nAA20\n2A80\n3260\n2420\nENDCHAR\nSTARTCHAR U_68DD\nENCODING 26845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nF920\n2FE0\n3920\n6BA0\nAAA0\nABA0\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_68DE\nENCODING 26846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n28A0\nFB20\n2920\n3FE0\n6920\nABA0\nAD60\n2920\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_68DF\nENCODING 26847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n27C0\n2540\n37C0\n6D40\nA7C0\n2340\n2520\n2920\nENDCHAR\nSTARTCHAR U_68E0\nENCODING 26848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2480\nFFE0\n8020\n3F80\n2080\n3F80\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_68E1\nENCODING 26849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFAA0\n2920\n2FE0\n3920\n6D60\nAD60\n2FE0\n2820\n2860\nENDCHAR\nSTARTCHAR U_68E2\nENCODING 26850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nFAA0\n2FE0\n7920\n6FE0\nAA20\n2A20\n2BE0\n2820\n2860\nENDCHAR\nSTARTCHAR U_68E3\nENCODING 26851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF140\n2FE0\n2140\n37C0\n6920\nA540\n2380\n2540\n2B20\nENDCHAR\nSTARTCHAR U_68E4\nENCODING 26852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFFE0\n2280\n6FE0\n7000\nAFC0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_68E5\nENCODING 26853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2A80\nF5E0\n2480\n6BC0\n7AA0\nA4A0\n2A80\n2280\n2080\n2080\nENDCHAR\nSTARTCHAR U_68E6\nENCODING 26854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nF880\n27C0\n7140\n6FE0\nA140\nA7C0\n2100\n2100\n2300\nENDCHAR\nSTARTCHAR U_68E7\nENCODING 26855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27E0\nF940\n21A0\n2660\n3280\n6BE0\nAE40\n22A0\n21A0\n2E60\nENDCHAR\nSTARTCHAR U_68E8\nENCODING 26856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7DE0\n4620\n7D40\n4080\n8360\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_68E9\nENCODING 26857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\n2AA0\nFAA0\n2EE0\n6820\n7FE0\nA820\nAEE0\n2AA0\n2AA0\n32A0\nENDCHAR\nSTARTCHAR U_68EA\nENCODING 26858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n2540\nF580\n2980\n2240\n3520\n6D40\nA580\n2980\n2240\n2C20\nENDCHAR\nSTARTCHAR U_68EB\nENCODING 26859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\nFFE0\n2080\n3EA0\n2AA0\n6EC0\nA080\n26A0\n3960\n2620\nENDCHAR\nSTARTCHAR U_68EC\nENCODING 26860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nFFE0\n2200\n2FE0\n3440\n6FA0\nB480\n25A0\n2420\n23E0\nENDCHAR\nSTARTCHAR U_68ED\nENCODING 26861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF500\n25E0\n6920\n7AA0\nAE40\nA940\n2880\n2940\n2E20\nENDCHAR\nSTARTCHAR U_68EE\nENCODING 26862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1500\n2480\nC460\n1100\nFFE0\n3180\n5B40\n9520\n1100\nENDCHAR\nSTARTCHAR U_68EF\nENCODING 26863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF540\n28A0\n27C0\n3040\n6880\nA340\n2AA0\n2A40\n31C0\nENDCHAR\nSTARTCHAR U_68F0\nENCODING 26864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n2540\n7540\n6FE0\nA540\nA540\n2FE0\n2100\n27C0\nENDCHAR\nSTARTCHAR U_68F1\nENCODING 26865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF100\n2FE0\n2440\n3A20\n6BC0\nA680\n2900\n2280\n2C60\nENDCHAR\nSTARTCHAR U_68F2\nENCODING 26866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF140\n2FE0\n6140\n77C0\nA100\nAFE0\n2240\n2380\n2C60\nENDCHAR\nSTARTCHAR U_68F3\nENCODING 26867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nF440\n2AA0\n2100\n37E0\n6AA0\nA2A0\n2440\n2AA0\n3120\nENDCHAR\nSTARTCHAR U_68F4\nENCODING 26868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFAE0\n2E80\n6AE0\n7AA0\nAEA0\nAAA0\n2AC0\n2AC0\n36A0\nENDCHAR\nSTARTCHAR U_68F5\nENCODING 26869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\nFFE0\n2520\n27E0\n3100\n6FE0\nA380\n2540\n2920\n3120\nENDCHAR\nSTARTCHAR U_68F6\nENCODING 26870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n2540\n2540\n3BA0\n6900\nA380\n2540\n2920\n2100\nENDCHAR\nSTARTCHAR U_68F7\nENCODING 26871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F00\n2AE0\nFEA0\n2AA0\n2AA0\n3EA0\n6AA0\nABA0\n3E40\n22A0\n2320\nENDCHAR\nSTARTCHAR U_68F8\nENCODING 26872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC00\n4BE0\n7840\n4940\n7880\n4940\nFE20\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_68F9\nENCODING 26873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\nF900\n27C0\n2440\n37C0\n6C40\nA7C0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_68FA\nENCODING 26874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n27C0\n2440\n37C0\n6C00\nA7E0\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_68FB\nENCODING 26875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n4940\n9320\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_68FC\nENCODING 26876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n3980\n56C0\n90A0\n1100\n2080\n7FC0\n88A0\n1080\n6300\nENDCHAR\nSTARTCHAR U_68FD\nENCODING 26877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n3180\n5AC0\n94A0\n0A00\n1500\nE2E0\n1F80\n0100\n0200\nENDCHAR\nSTARTCHAR U_68FE\nENCODING 26878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n3B80\nD560\n1100\nFFE0\n8020\n1F00\n1100\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_68FF\nENCODING 26879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n24C0\nF440\n26C0\n7440\n6FC0\nA280\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_6900\nENCODING 26880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n2800\n6FC0\n6B40\nBB40\nA5C0\n2520\n2920\n30E0\nENDCHAR\nSTARTCHAR U_6901\nENCODING 26881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF800\n23C0\n7240\n6BC0\nA080\nA100\n2FE0\n2100\n2300\nENDCHAR\nSTARTCHAR U_6902\nENCODING 26882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\nF7C0\n2040\n77E0\n6900\nA560\nA380\n2540\n2960\n2300\nENDCHAR\nSTARTCHAR U_6903\nENCODING 26883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n2200\nFFE0\n2A20\n7F80\n6A40\n6BC0\nA800\n2B80\n2AA0\n34E0\nENDCHAR\nSTARTCHAR U_6904\nENCODING 26884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2440\n2280\n37E0\n6900\nAFE0\n2480\n2380\n3E60\nENDCHAR\nSTARTCHAR U_6905\nENCODING 26885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n2280\n77E0\n6840\nA740\nA540\n2740\n2040\n20C0\nENDCHAR\nSTARTCHAR U_6906\nENCODING 26886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\nFFA0\n2520\n27E0\n3420\n6FA0\nA6A0\n27A0\n2820\n30E0\nENDCHAR\nSTARTCHAR U_6907\nENCODING 26887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n67C0\n7440\nAFC0\nA440\n2FE0\n2440\n2820\nENDCHAR\nSTARTCHAR U_6908\nENCODING 26888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\nF7E0\n2D60\n23A0\n37E0\n6920\nA3A0\n2560\n2920\n20C0\nENDCHAR\nSTARTCHAR U_6909\nENCODING 26889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1080\n3BE0\n6A80\n13E0\n6480\nFFE0\n0E00\n3580\nC460\nENDCHAR\nSTARTCHAR U_690A\nENCODING 26890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2440\n7640\n69A0\nA100\nAFE0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_690B\nENCODING 26891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF800\n27C0\n2440\n37C0\n6900\nA540\n2920\n3120\n2300\nENDCHAR\nSTARTCHAR U_690C\nENCODING 26892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFC20\n2240\n2420\n3000\n6FC0\nA100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_690D\nENCODING 26893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n27C0\n2440\n37C0\n6C40\nA740\n25C0\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_690E\nENCODING 26894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\nFC80\n2480\n27E0\n3480\n6C80\nA7E0\n2480\n2480\n27E0\nENDCHAR\nSTARTCHAR U_690F\nENCODING 26895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFA80\n26E0\n2420\n3420\n6C20\nA6E0\n2280\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_6910\nENCODING 26896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFFE0\n24A0\n2480\n37E0\n6C80\nA7E0\n2A20\n33E0\n2220\nENDCHAR\nSTARTCHAR U_6911\nENCODING 26897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFD20\n27E0\n2520\n37E0\n6A80\nA480\n2FE0\n2080\n2080\nENDCHAR\nSTARTCHAR U_6912\nENCODING 26898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n24A0\nF7A0\n24A0\n2FA0\n34A0\n66A0\nADA0\n3440\n24A0\n2D20\nENDCHAR\nSTARTCHAR U_6913\nENCODING 26899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFA20\n2D40\n2680\n3480\n6DC0\nA2A0\n24A0\n2CA0\n2300\nENDCHAR\nSTARTCHAR U_6914\nENCODING 26900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n22A0\nFD40\n22A0\n22A0\n37E0\n6D20\nA7E0\n2520\n27E0\n2420\nENDCHAR\nSTARTCHAR U_6915\nENCODING 26901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n2A40\nFAE0\n2140\n2F40\n3540\n6DE0\nA560\n2540\n2940\n3340\nENDCHAR\nSTARTCHAR U_6916\nENCODING 26902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nFC20\n27E0\n7480\n6FE0\nA500\n25E0\n2920\n2A20\n3460\nENDCHAR\nSTARTCHAR U_6917\nENCODING 26903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n2820\n2FE0\n3100\n6D00\nA5E0\n2500\n2B00\n31E0\nENDCHAR\nSTARTCHAR U_6918\nENCODING 26904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FE0\n3B80\n5540\n9920\n0400\n7FC0\n0300\n0C00\n7000\n8FE0\nENDCHAR\nSTARTCHAR U_6919\nENCODING 26905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n77C0\n6800\nAFE0\nA820\n2FE0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_691A\nENCODING 26906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\n2AA0\n6EE0\n7820\nA820\nA820\n2820\n28A0\n2840\nENDCHAR\nSTARTCHAR U_691B\nENCODING 26907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\nF480\n3200\n6A80\n64A0\nACC0\n3480\n25A0\n24A0\n2460\nENDCHAR\nSTARTCHAR U_691C\nENCODING 26908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nFC40\n33A0\n6900\n67C0\nA540\n27C0\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_691D\nENCODING 26909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nF440\n2540\nF540\n52A0\n8CE0\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_691E\nENCODING 26910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\nFE00\n3BE0\n5680\n9280\n1480\nFFE0\n0E00\n3580\nC460\n0400\nENDCHAR\nSTARTCHAR U_691F\nENCODING 26911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF100\n2FE0\n2420\n3B00\n6500\nAFE0\n2100\n2240\n2C20\nENDCHAR\nSTARTCHAR U_6920\nENCODING 26912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nFB80\n5200\nFBE0\n1280\nFC80\n1480\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_6921\nENCODING 26913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4020\n5F20\nE4A0\n4AA0\n5FA0\nE4A0\nDFA0\n44A0\n4420\n4720\n5860\nENDCHAR\nSTARTCHAR U_6922\nENCODING 26914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nF820\n2FE0\n7920\n6FE0\nA9A0\n2960\n2FE0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_6923\nENCODING 26915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFFE0\n2AA0\n7FE0\n6AA0\nAAA0\n3FE0\n2000\n2440\n2820\nENDCHAR\nSTARTCHAR U_6924\nENCODING 26916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFAA0\n2FE0\n2100\n33E0\n6E40\nA140\n2080\n2300\n2C00\nENDCHAR\nSTARTCHAR U_6925\nENCODING 26917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n24E0\nF7A0\n2AA0\n2FA0\n72A0\n6AA0\nA2A0\n25A0\n28E0\n3000\nENDCHAR\nSTARTCHAR U_6926\nENCODING 26918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\nFFE0\n3200\n6FE0\n6480\nAA40\n37A0\n2280\n2480\n2980\nENDCHAR\nSTARTCHAR U_6927\nENCODING 26919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nFC60\n33C0\n6800\n6EE0\nAAA0\n2AA0\n2EE0\n2080\n2080\nENDCHAR\nSTARTCHAR U_6928\nENCODING 26920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nF900\n4A40\n6FE0\nDA40\n4B40\n4AC0\n4A40\n4A40\n52C0\nENDCHAR\nSTARTCHAR U_6929\nENCODING 26921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nF900\n2FC0\n7940\n6FE0\nA940\n2FC0\n2900\n3280\n2460\nENDCHAR\nSTARTCHAR U_692A\nENCODING 26922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2240\nF280\n2FE0\n2280\n3AA0\n6AA0\nA6C0\n2280\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_692B\nENCODING 26923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nF7C0\n2540\n77C0\n6D40\nA7C0\nA100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_692C\nENCODING 26924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n27C0\n7440\n6FC0\nA440\nA7C0\n2440\n2440\n3FE0\nENDCHAR\nSTARTCHAR U_692D\nENCODING 26925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2BE0\nFA80\n2DE0\n2AA0\n3AE0\n6AA0\nAEE0\n28A0\n28A0\n28E0\nENDCHAR\nSTARTCHAR U_692E\nENCODING 26926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n4F80\nE200\n5FE0\n6500\nCA80\nD560\nC200\n4C80\n4300\n5C00\nENDCHAR\nSTARTCHAR U_692F\nENCODING 26927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2920\nFFE0\n2000\n2FE0\n3100\n6FE0\nAAA0\n2AA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_6930\nENCODING 26928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFEA0\n2AA0\n2AC0\n3EA0\n6AA0\nAAA0\n2FE0\n2280\n2280\nENDCHAR\nSTARTCHAR U_6931\nENCODING 26929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27E0\nF800\n23C0\n7240\n6BC0\nA240\n23C0\n2640\n2980\n2660\nENDCHAR\nSTARTCHAR U_6932\nENCODING 26930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF240\n2FE0\n2440\n37C0\n6900\nAFE0\n2500\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_6933\nENCODING 26931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nFFC0\n2540\n27C0\n3000\n6FE0\nA520\n2540\n2680\n2C60\nENDCHAR\nSTARTCHAR U_6934\nENCODING 26932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2940\nFF40\n2860\n29C0\n3F40\n6940\nA940\n3E80\n2940\n2A20\nENDCHAR\nSTARTCHAR U_6935\nENCODING 26933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2A20\nFEE0\n2800\n2EE0\n38A0\n68A0\nAEA0\n2840\n28A0\n2920\nENDCHAR\nSTARTCHAR U_6936\nENCODING 26934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2920\nFAA0\n2FE0\n7440\n6A20\nB7E0\n2A40\n2180\n2280\n2C60\nENDCHAR\nSTARTCHAR U_6937\nENCODING 26935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\nFFE0\n2880\n2FA0\n38A0\n6EA0\nAAC0\n2EA0\n3160\n2220\nENDCHAR\nSTARTCHAR U_6938\nENCODING 26936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n2500\n2FE0\nFA80\n2EA0\n3AE0\n6BA0\nAAE0\n2A80\n3220\n25E0\nENDCHAR\nSTARTCHAR U_6939\nENCODING 26937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\nFA40\n23C0\n2240\n33C0\n6A40\nAFE0\n2540\n2620\n27E0\nENDCHAR\nSTARTCHAR U_693A\nENCODING 26938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2BC0\nFA40\n2BC0\n3900\n6FE0\n6900\nAB80\n2D40\n2920\n2900\nENDCHAR\nSTARTCHAR U_693B\nENCODING 26939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\nFDE0\n2520\n25E0\n3480\n6FE0\nA540\n24C0\n2520\n27E0\nENDCHAR\nSTARTCHAR U_693C\nENCODING 26940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n26E0\n2900\nF000\n26E0\n2940\n3940\n6940\nAE40\n2A40\n2A40\n2AC0\nENDCHAR\nSTARTCHAR U_693D\nENCODING 26941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2280\nF780\n2080\n6FE0\n7520\nAAC0\nA580\n2AC0\n24A0\n2980\nENDCHAR\nSTARTCHAR U_693E\nENCODING 26942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\nF000\n2E20\n7AA0\n6EA0\n6AA0\nAEA0\n2AA0\n2A20\n2A60\nENDCHAR\nSTARTCHAR U_693F\nENCODING 26943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n27C0\n3200\n6FE0\n6440\nAFE0\n2540\n24C0\n27C0\nENDCHAR\nSTARTCHAR U_6940\nENCODING 26944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\nF900\n27C0\n3540\n2FC0\n6100\nAFE0\n29A0\n2F60\n2860\nENDCHAR\nSTARTCHAR U_6941\nENCODING 26945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFA20\n23C0\n3240\n2D80\n6240\nAFE0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_6942\nENCODING 26946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFD40\n2920\n37C0\n2C40\n67C0\nA440\n27C0\n2000\n2FE0\nENDCHAR\nSTARTCHAR U_6943\nENCODING 26947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2840\nFFC0\n6800\n7FC0\nAA80\nAFC0\n2900\n2FC0\n3100\n2FE0\nENDCHAR\nSTARTCHAR U_6944\nENCODING 26948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n2FE0\n3800\n2FE0\n6AA0\nAFE0\n2AA0\n3AA0\n2860\nENDCHAR\nSTARTCHAR U_6945\nENCODING 26949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2000\nFBC0\n2240\n33C0\n2800\n67E0\nA520\n27E0\n2520\n27E0\nENDCHAR\nSTARTCHAR U_6946\nENCODING 26950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFE0\n2AA0\n6FE0\n7100\nAFE0\n2240\n2680\n2140\n2E20\nENDCHAR\nSTARTCHAR U_6947\nENCODING 26951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFF40\n2540\n7FE0\n6820\nABA0\nAAA0\n2BA0\n2820\n2860\nENDCHAR\nSTARTCHAR U_6948\nENCODING 26952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2120\nF5C0\n2D00\n37E0\n2C40\n67C0\nA440\n27C0\n2440\n24C0\nENDCHAR\nSTARTCHAR U_6949\nENCODING 26953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nFA40\n2100\n37E0\n2A00\n67E0\nAA20\n3220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_694A\nENCODING 26954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n37E0\n2C00\n67E0\nAAA0\n22A0\n2520\n22C0\nENDCHAR\nSTARTCHAR U_694B\nENCODING 26955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2F20\nF2A0\n2FA0\n2AA0\n3FA0\n62A0\nA6A0\n2B20\n32A0\n2260\nENDCHAR\nSTARTCHAR U_694C\nENCODING 26956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFA80\n27E0\n3440\n2C80\n6720\nA4C0\n2720\n28C0\n3300\nENDCHAR\nSTARTCHAR U_694D\nENCODING 26957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0E00\n1500\nE4E0\n0000\nEEE0\nAAA0\nAAA0\nAAA0\nEEE0\nENDCHAR\nSTARTCHAR U_694E\nENCODING 26958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nF100\n2FE0\n3540\n2FC0\n6540\nA7C0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_694F\nENCODING 26959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFA40\n2520\n33C0\n2900\n6FE0\nA100\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6950\nENCODING 26960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2A40\nFFC0\n2A40\n6FC0\n7300\nACE0\n3480\n2480\n2480\n2880\nENDCHAR\nSTARTCHAR U_6951\nENCODING 26961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EA0\n2B40\nF680\n2240\n3420\n2FC0\n6100\nAFE0\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_6952\nENCODING 26962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\nFFE0\n2520\n37E0\n2C20\n6100\nA2C0\n2A20\n3A60\n21C0\nENDCHAR\nSTARTCHAR U_6953\nENCODING 26963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n24C0\nFD40\n27C0\n3540\n2D40\n67C0\nA540\n2540\n2920\n33A0\nENDCHAR\nSTARTCHAR U_6954\nENCODING 26964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n2EA0\nF4A0\n2EA0\n24A0\n3F20\n6440\nAFE0\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_6955\nENCODING 26965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nF400\n37C0\n6900\n7FE0\nA440\n27C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_6956\nENCODING 26966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEA0\n2AA0\n2EA0\n3AA0\n68A0\nAAA0\n2AE0\n2D80\n2880\nENDCHAR\nSTARTCHAR U_6957\nENCODING 26967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3C80\n25E0\nF4A0\n2BE0\n3CA0\n27E0\n7480\nAFE0\n2480\n2A80\n31E0\nENDCHAR\nSTARTCHAR U_6958\nENCODING 26968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n29E0\nFF40\n3480\n5140\nB220\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_6959\nENCODING 26969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2A80\nF5E0\n2F80\n2580\n34C0\n6DA0\nB6A0\n2480\n2480\n2C80\nENDCHAR\nSTARTCHAR U_695A\nENCODING 26970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n1080\n39C0\n56A0\n9080\n7FE0\n1220\n13C0\n2A00\nC7E0\nENDCHAR\nSTARTCHAR U_695B\nENCODING 26971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nFA40\n2100\n37E0\n2900\n67C0\nA440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_695C\nENCODING 26972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n24A0\nFFA0\n24E0\n34A0\n6EA0\nAAE0\n2AA0\n2EA0\n2120\n2260\nENDCHAR\nSTARTCHAR U_695D\nENCODING 26973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n2FE0\n2AA0\n3920\n6FE0\nA100\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_695E\nENCODING 26974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFAA0\n2FE0\n7100\n6FE0\nA200\nA3E0\n2220\n24A0\n2840\nENDCHAR\nSTARTCHAR U_695F\nENCODING 26975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFA40\n23C0\n6000\n77E0\nA820\nA7E0\n2080\n2080\n2180\nENDCHAR\nSTARTCHAR U_6960\nENCODING 26976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n2FE0\n2AA0\n3920\n6FE0\nA920\n2FE0\n2920\n2860\nENDCHAR\nSTARTCHAR U_6961\nENCODING 26977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF440\n2BA0\n7000\n6EA0\nAAA0\n2F40\n2B40\n2EA0\n2AA0\nENDCHAR\nSTARTCHAR U_6962\nENCODING 26978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nFFE0\n2280\n2FE0\n3AA0\n6CE0\nA820\n2FE0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_6963\nENCODING 26979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nFFE0\n2800\n2BE0\n3A20\n6BE0\nAA20\n2BE0\n3220\n23E0\nENDCHAR\nSTARTCHAR U_6964\nENCODING 26980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nFAA0\n34A0\n2920\n62A0\n6440\nB240\n3520\n2460\n23C0\nENDCHAR\nSTARTCHAR U_6965\nENCODING 26981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n27A0\nFCA0\n27E0\n2100\n37E0\n6A00\nA3E0\n2520\n28C0\n3320\nENDCHAR\nSTARTCHAR U_6966\nENCODING 26982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFC20\n2000\n37E0\n2A40\n63C0\nA240\n23C0\n2000\n2FE0\nENDCHAR\nSTARTCHAR U_6967\nENCODING 26983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\nF480\n2200\n2FC0\n7A40\n6A40\nBFE0\n2500\n2880\n3060\nENDCHAR\nSTARTCHAR U_6968\nENCODING 26984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\nF900\n27C0\n2440\n37C0\n6C40\nA7C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_6969\nENCODING 26985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2480\nFBE0\n2AA0\n2BE0\n3AA0\n6BE0\nAA80\n2900\n2A80\n2C60\nENDCHAR\nSTARTCHAR U_696A\nENCODING 26986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n27E0\nFD40\n25C0\n3400\n2FE0\n6100\nAFE0\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_696B\nENCODING 26987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFC40\n2FE0\n2440\n37C0\n6C40\nA7C0\n2460\n2FC0\n2040\nENDCHAR\nSTARTCHAR U_696C\nENCODING 26988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n37C0\n2A00\n67E0\nACA0\n2560\n27A0\n20C0\nENDCHAR\nSTARTCHAR U_696D\nENCODING 26989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n2A80\nFFE0\n1100\n7FC0\n0400\n3F80\n0400\nFFE0\n2480\nC460\nENDCHAR\nSTARTCHAR U_696E\nENCODING 26990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n27A0\nF940\n2FE0\n3100\n2FC0\n6440\nAFC0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_696F\nENCODING 26991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2480\nFFE0\n2480\n35E0\n2D20\n65E0\nA520\n25E0\n2920\n31E0\nENDCHAR\nSTARTCHAR U_6970\nENCODING 26992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n2D60\nF920\n2FE0\n2920\n3FE0\n6920\nA100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_6971\nENCODING 26993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nFFC0\n2200\n37E0\n2C40\n6BA0\nA100\n27C0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_6972\nENCODING 26994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n40A0\nFFE0\n5680\n74A0\nDFA0\n54A0\n5AC0\n54A0\n6B60\n4220\nENDCHAR\nSTARTCHAR U_6973\nENCODING 26995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nF440\n27C0\n7440\n6FC0\nA100\nAFE0\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_6974\nENCODING 26996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF440\n2280\n3FE0\n2920\n67C0\nA540\n2540\n25C0\n2100\nENDCHAR\nSTARTCHAR U_6975\nENCODING 26997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4080\nE100\n5DE0\n7520\n55A0\nDD40\n55A0\n4120\n4200\n4FE0\nENDCHAR\nSTARTCHAR U_6976\nENCODING 26998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2FE0\nD320\n4CC0\n3F80\n2080\n3F80\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_6977\nENCODING 26999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n26A0\nFCC0\n26A0\n64E0\n7900\nA7C0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_6978\nENCODING 27000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E40\n2440\nF540\n2F60\n3540\n2640\n6D40\nB4A0\n24A0\n2520\n2620\nENDCHAR\nSTARTCHAR U_6979\nENCODING 27001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F80\n2480\nF5E0\n27A0\n74A0\n6B20\nB4C0\nA000\n2FE0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_697A\nENCODING 27002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2280\nFFE0\n21A0\n32C0\n2D80\n6100\nAFE0\n2540\n2920\n3120\nENDCHAR\nSTARTCHAR U_697B\nENCODING 27003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nFC40\n27C0\n7440\n6FE0\nA100\nA7C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_697C\nENCODING 27004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nF100\n2FE0\n7540\n6920\nA100\n2FE0\n2240\n2180\n2E60\nENDCHAR\nSTARTCHAR U_697D\nENCODING 27005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n9F20\n5140\n3F80\n5140\n9F20\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_697E\nENCODING 27006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nFC40\n27C0\n7440\n6FC0\nA100\n2D60\n2580\n2960\n2300\nENDCHAR\nSTARTCHAR U_697F\nENCODING 27007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n2380\n7D40\n6920\nA7C0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_6980\nENCODING 27008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFC40\n27C0\n2000\n3EE0\n6AA0\nAAA0\n2AA0\n2EE0\n2AA0\nENDCHAR\nSTARTCHAR U_6981\nENCODING 27009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nF820\n27C0\n7200\n6480\nAFC0\n2240\n2F80\n2200\n3FE0\nENDCHAR\nSTARTCHAR U_6982\nENCODING 27010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2A40\nFE40\n2B40\n2FE0\n3A40\n6C40\nAAC0\n2D40\n2A40\n2460\nENDCHAR\nSTARTCHAR U_6983\nENCODING 27011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\n71C0\nAAA0\nA4A0\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_6984\nENCODING 27012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2AE0\nFB40\n2A20\n27C0\n3440\n6D40\nA540\n25C0\n22A0\n2CE0\nENDCHAR\nSTARTCHAR U_6985\nENCODING 27013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47C0\nF440\n47C0\n6440\nD7C0\nD000\n4FE0\n4AA0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_6986\nENCODING 27014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n2480\nFB60\n2000\n6E20\n7AA0\nAEA0\nAAA0\n2EA0\n2A20\n2A60\nENDCHAR\nSTARTCHAR U_6987\nENCODING 27015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF440\n2280\n2FE0\n3100\n6FC0\nA100\n2540\n2920\n3320\nENDCHAR\nSTARTCHAR U_6988\nENCODING 27016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BE0\n2420\nF820\n2BA0\n6AA0\n7BA0\nA820\nABA0\n2AA0\n2BA0\n2860\nENDCHAR\nSTARTCHAR U_6989\nENCODING 27017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nFFE0\n2280\n3540\n2920\n67C0\nA100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_698A\nENCODING 27018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n4480\nFFE0\n6AA0\n5FE0\nDAA0\n6BE0\n4880\n4880\n4880\n4880\nENDCHAR\nSTARTCHAR U_698B\nENCODING 27019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\nF7C0\n2040\n77C0\n6800\nAEE0\n2220\n2EE0\n2220\n2EE0\nENDCHAR\nSTARTCHAR U_698C\nENCODING 27020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2F40\nF180\n2540\n7AC0\n6A00\nBFA0\n2AC0\n2AA0\n2A40\n3220\nENDCHAR\nSTARTCHAR U_698D\nENCODING 27021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nFFE0\n2CA0\n2AC0\n3BE0\n6A20\nABE0\n2A20\n2BE0\n3260\nENDCHAR\nSTARTCHAR U_698E\nENCODING 27022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2440\nFF40\n25C0\n3440\n2FC0\n6200\nA7E0\n2A40\n2180\n2E60\nENDCHAR\nSTARTCHAR U_698F\nENCODING 27023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nFFE0\n2280\n7440\n6820\nAFE0\nAAA0\n2AA0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_6990\nENCODING 27024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFFE0\n2540\n37E0\n2D40\n67E0\nAAA0\n2A40\n2B20\n3620\nENDCHAR\nSTARTCHAR U_6991\nENCODING 27025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2FE0\nF540\n2FC0\n3540\n27C0\n6D40\nAFE0\n2440\n2240\n20C0\nENDCHAR\nSTARTCHAR U_6992\nENCODING 27026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2EE0\nF220\n6EE0\n7880\n6EE0\nAAA0\n2660\n2AA0\n2220\n2440\nENDCHAR\nSTARTCHAR U_6993\nENCODING 27027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2280\nF740\n2A20\n3240\n2DC0\n6000\nAFE0\n2AA0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_6994\nENCODING 27028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n2EA0\nFAA0\n2EA0\n3AC0\n2EA0\n68A0\nAAA0\n2AE0\n3D80\n2080\nENDCHAR\nSTARTCHAR U_6995\nENCODING 27029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n2440\n3380\n2C40\n6FE0\nA440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_6996\nENCODING 27030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n2240\nFA40\n8C20\n73C0\n2240\nFD40\n7080\nA940\n2620\nENDCHAR\nSTARTCHAR U_6997\nENCODING 27031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFAA0\n26C0\n2FE0\n3000\n6FC0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_6998\nENCODING 27032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7A00\nA3C0\nFA40\n23C0\n5200\n8BE0\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_6999\nENCODING 27033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nFA80\n2380\n3440\n2BA0\n6000\nA7C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_699A\nENCODING 27034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nFFE0\n2100\n37C0\n2900\n6FE0\nA000\n2540\n2AA0\n32A0\nENDCHAR\nSTARTCHAR U_699B\nENCODING 27035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\n27C0\n7200\n6FE0\nA540\n2BA0\n2100\n2540\n2920\nENDCHAR\nSTARTCHAR U_699C\nENCODING 27036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2FE0\n2920\n3080\n6FE0\nA200\n23C0\n2440\n39C0\nENDCHAR\nSTARTCHAR U_699D\nENCODING 27037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n55C0\n4940\n5540\nEA60\n5C00\nE9C0\nDD40\n5B40\n6880\n4940\n4A20\nENDCHAR\nSTARTCHAR U_699E\nENCODING 27038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2480\nFDE0\n2520\n35E0\n2D20\n65E0\nA480\n29C0\n2AA0\n35A0\nENDCHAR\nSTARTCHAR U_699F\nENCODING 27039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n3920\n6FC0\n6280\n6FE0\nA100\n27C0\n2100\n2100\nENDCHAR\nSTARTCHAR U_69A0\nENCODING 27040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nFFC0\n2440\n27C0\n3440\n6FC0\nA100\n2FE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_69A1\nENCODING 27041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nF7C0\n2100\n2FE0\n3240\n6780\nA240\n2FA0\n2540\n3B20\nENDCHAR\nSTARTCHAR U_69A2\nENCODING 27042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nF820\n37C0\n2A00\n6560\n6280\nADC0\n22A0\n2C80\n2100\nENDCHAR\nSTARTCHAR U_69A3\nENCODING 27043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2700\nFD20\n22C0\n6400\n77E0\nA880\nAFE0\n2080\n24A0\n27E0\nENDCHAR\nSTARTCHAR U_69A4\nENCODING 27044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n27E0\nF940\n25E0\n3240\n2D40\n6FE0\nA100\n2380\n2540\n3920\nENDCHAR\nSTARTCHAR U_69A5\nENCODING 27045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFFE0\n2420\n37E0\n2920\n6540\nAFE0\n2280\n24A0\n2860\nENDCHAR\nSTARTCHAR U_69A6\nENCODING 27046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n2140\nFE20\n8880\nFFE0\n8880\nF9C0\n22A0\nFCA0\n2080\nENDCHAR\nSTARTCHAR U_69A7\nENCODING 27047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2540\nFD40\n2760\n3540\n2F60\n6540\nA760\n2540\n2540\n27E0\nENDCHAR\nSTARTCHAR U_69A8\nENCODING 27048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFD20\n2240\n3520\n2BE0\n6500\nA9E0\n2100\n21E0\n2100\nENDCHAR\nSTARTCHAR U_69A9\nENCODING 27049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\nF900\n27E0\n3520\n2FE0\n6480\nA7E0\n2A40\n3180\n2660\nENDCHAR\nSTARTCHAR U_69AA\nENCODING 27050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2480\nFFC0\n2480\n37C0\n2C80\n67E0\nA020\n2560\n2AA0\n2A60\nENDCHAR\nSTARTCHAR U_69AB\nENCODING 27051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27E0\nFC80\n27C0\n3480\n2FC0\n6480\nA7E0\n2080\n2FE0\n2080\nENDCHAR\nSTARTCHAR U_69AC\nENCODING 27052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF900\n27E0\n3000\n2FC0\n6440\nA7C0\n26A0\n2A40\n2320\nENDCHAR\nSTARTCHAR U_69AD\nENCODING 27053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2E40\nFBE0\n2E40\n3B40\n2EC0\n6A40\nBE40\n2A40\n3240\n26C0\nENDCHAR\nSTARTCHAR U_69AE\nENCODING 27054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n54A0\n5AA0\n9080\n2940\n4620\nFFE0\n8420\n7FC0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_69AF\nENCODING 27055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2FE0\nFA80\n2BE0\n2E40\n3BE0\n6A40\nAF40\n2AC0\n2040\n20C0\nENDCHAR\nSTARTCHAR U_69B0\nENCODING 27056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27A0\n2140\nFFE0\n2240\n27A0\n3220\n6FE0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_69B1\nENCODING 27057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF800\n23C0\n3240\n2FE0\n6240\nA3C0\n26A0\n2B40\n2220\nENDCHAR\nSTARTCHAR U_69B2\nENCODING 27058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nFEC0\n2440\n77C0\n6800\nAFE0\nAAA0\n2AA0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_69B3\nENCODING 27059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF800\n2EE0\n2A40\n3FE0\n6A40\nAA40\n2BE0\n3500\n28E0\nENDCHAR\nSTARTCHAR U_69B4\nENCODING 27060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2DE0\n28A0\nFAA0\n2DA0\n3960\n2000\n6FE0\nA920\n2FE0\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_69B5\nENCODING 27061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\nFA40\n2FE0\n3440\n2FC0\n6440\nA7C0\n2460\n2FC0\n2040\nENDCHAR\nSTARTCHAR U_69B6\nENCODING 27062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFD40\n27E0\n3540\n2FC0\n6500\nA7C0\n2A40\n2BC0\n3240\nENDCHAR\nSTARTCHAR U_69B7\nENCODING 27063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n27E0\n3480\n2FC0\n7480\nA7C0\n2480\n2480\n27E0\nENDCHAR\nSTARTCHAR U_69B8\nENCODING 27064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4BE0\nEAA0\n5FE0\n6AA0\nDAA0\nCBE0\n4880\n4FE0\n7080\n4FE0\nENDCHAR\nSTARTCHAR U_69B9\nENCODING 27065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2480\nFCE0\n2480\n37E0\n2CA0\n67C0\nA4A0\n25E0\n2940\n3260\nENDCHAR\nSTARTCHAR U_69BA\nENCODING 27066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7540\n5380\n5FE0\n7100\n5FE0\n5440\n7920\n57C0\n5380\n9540\nB920\nENDCHAR\nSTARTCHAR U_69BB\nENCODING 27067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n77C0\n6800\nAEE0\nAAA0\n2660\n2AA0\n2660\nENDCHAR\nSTARTCHAR U_69BC\nENCODING 27068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF100\n2FE0\n3200\n2440\n6FA0\nA000\n2FE0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_69BD\nENCODING 27069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2520\nFAC0\n2240\n3780\n2940\n67A0\nA100\n2FE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_69BE\nENCODING 27070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF740\n2FE0\n6820\n77C0\nAC40\nA7C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_69BF\nENCODING 27071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2920\nFFE0\n2000\n3FE0\n2800\n67C0\nA440\n27C0\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_69C0\nENCODING 27072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n7FC0\n5140\n5F40\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_69C1\nENCODING 27073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF440\n27C0\n3000\n6FE0\nA820\n2BA0\n2AA0\n2BA0\n2860\nENDCHAR\nSTARTCHAR U_69C2\nENCODING 27074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5C60\n4780\nF920\n4BC0\n48A0\n6FE0\nD880\n4AC0\n4AA0\n6CA0\n5980\nENDCHAR\nSTARTCHAR U_69C3\nENCODING 27075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\nFA40\nAA60\nFC00\nABE0\nA940\n9880\n0540\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_69C4\nENCODING 27076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2720\nF820\n2540\n7200\n6CE0\nA420\nA6E0\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_69C5\nENCODING 27077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2440\nFFC0\n3000\n6FE0\n6CA0\nAAA0\n2FE0\n2920\n2920\n2860\nENDCHAR\nSTARTCHAR U_69C6\nENCODING 27078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n27E0\n3420\n2BA0\n62A0\nA3A0\n22A0\n23A0\n20C0\nENDCHAR\nSTARTCHAR U_69C7\nENCODING 27079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2400\nF7E0\n32C0\n2B40\n6AC0\n6BC0\nA800\n2FE0\n2440\n2820\nENDCHAR\nSTARTCHAR U_69C8\nENCODING 27080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2800\nFFE0\n2B40\n6A80\n7B60\nA840\nAFE0\n2A40\n2A40\n30C0\nENDCHAR\nSTARTCHAR U_69C9\nENCODING 27081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nF500\n2D00\n35E0\n2680\n6FE0\nB480\n2540\n2A20\n3420\nENDCHAR\nSTARTCHAR U_69CA\nENCODING 27082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\nFD20\n11E0\n5520\n7DE0\n1220\n2460\n4400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_69CB\nENCODING 27083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\nF480\n2FE0\n3480\n6FE0\nA940\nAFC0\n2940\n3FE0\n28C0\nENDCHAR\nSTARTCHAR U_69CC\nENCODING 27084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n25E0\nF520\n21E0\n3D00\n65E0\nA520\n25E0\n2520\n2A00\n31E0\nENDCHAR\nSTARTCHAR U_69CD\nENCODING 27085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF540\n2FE0\n3440\n27C0\n6440\nA7E0\n2C20\n3420\n27E0\nENDCHAR\nSTARTCHAR U_69CE\nENCODING 27086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nFFE0\n2100\n27C0\n3100\n6FE0\nA200\n27C0\n2880\n37E0\nENDCHAR\nSTARTCHAR U_69CF\nENCODING 27087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\nF500\n2FC0\n2540\n3FE0\n6540\nAFC0\n2580\n2D40\n3520\nENDCHAR\nSTARTCHAR U_69D0\nENCODING 27088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\nFA40\n2FC0\n3A40\n2FC0\n6240\nA3A0\n2560\n2920\n31E0\nENDCHAR\nSTARTCHAR U_69D1\nENCODING 27089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n4A40\n7BC0\n1100\nFBE0\n3B80\n5540\n5920\n9100\n1100\nENDCHAR\nSTARTCHAR U_69D2\nENCODING 27090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2140\n77E0\n6800\n67E0\nA520\n27E0\n2520\n27E0\nENDCHAR\nSTARTCHAR U_69D3\nENCODING 27091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n2440\n37C0\n6C40\nA7C0\nA440\n27C0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_69D4\nENCODING 27092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF440\n2FC0\n2440\n3FE0\n6540\nA920\n37C0\n2100\n2100\nENDCHAR\nSTARTCHAR U_69D5\nENCODING 27093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\nF900\n27C0\n7440\n6FC0\nA440\nAFE0\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_69D6\nENCODING 27094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\nFFE0\n8820\n3F80\nD080\n1080\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_69D7\nENCODING 27095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nF400\n2FC0\n7440\n6FE0\nA820\nABA0\n2AA0\n2BA0\n2860\nENDCHAR\nSTARTCHAR U_69D8\nENCODING 27096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF100\n2FC0\n7100\n6FE0\nA100\nA540\n2380\n2D40\n2320\nENDCHAR\nSTARTCHAR U_69D9\nENCODING 27097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF900\n27C0\n3440\n2F40\n65C0\nA440\n2FE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_69DA\nENCODING 27098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFE0\n2AA0\n7FE0\n6800\nA7C0\nA540\n2540\n2280\n2C60\nENDCHAR\nSTARTCHAR U_69DB\nENCODING 27099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2A80\nFAE0\n2A80\n2AC0\n3320\n6000\nAFE0\n2AA0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_69DC\nENCODING 27100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n27E0\nFC80\n37C0\n6C80\n67E0\nA400\n2FC0\n2260\n2420\n28C0\nENDCHAR\nSTARTCHAR U_69DD\nENCODING 27101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nF440\n27C0\n7440\n6FC0\n6400\nA7E0\n2AA0\n2FA0\n2060\nENDCHAR\nSTARTCHAR U_69DE\nENCODING 27102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2FE0\n7540\n6FC0\nA540\n27C0\n2100\n2120\n20E0\nENDCHAR\nSTARTCHAR U_69DF\nENCODING 27103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n27C0\n7400\n6FE0\nA480\nA480\n3FE0\n2440\n2820\nENDCHAR\nSTARTCHAR U_69E0\nENCODING 27104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20A0\n2BE0\nF4A0\n23E0\n6C80\n75E0\nA520\nA7E0\n2520\n21E0\n2120\nENDCHAR\nSTARTCHAR U_69E1\nENCODING 27105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2280\nF100\n2EE0\n7440\n6AA0\nA100\nAFE0\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_69E2\nENCODING 27106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2220\nFAA0\n2660\n3AA0\n6920\nA7C0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_69E3\nENCODING 27107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF920\n37C0\n2A80\n6440\n6FE0\nA540\n2740\n2040\n20C0\nENDCHAR\nSTARTCHAR U_69E4\nENCODING 27108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n27E0\nF2A0\n23E0\n2EA0\n37E0\n6C80\nA7E0\n2480\n2A80\n31E0\nENDCHAR\nSTARTCHAR U_69E5\nENCODING 27109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2440\nFEE0\n2440\n3EE0\n2440\n67E0\nA020\n27E0\n2020\n27E0\nENDCHAR\nSTARTCHAR U_69E6\nENCODING 27110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF940\n2FE0\n3940\n2FE0\n6D20\nAFE0\n2D20\n37E0\n2560\nENDCHAR\nSTARTCHAR U_69E7\nENCODING 27111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFF00\n5500\n7DE0\n5540\nFD40\n1240\n0400\nFFE0\n1480\nE460\nENDCHAR\nSTARTCHAR U_69E8\nENCODING 27112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n2FA0\nFAA0\n2EC0\n30A0\n2FA0\n62A0\nA7A0\n3CE0\n2480\n2C80\nENDCHAR\nSTARTCHAR U_69E9\nENCODING 27113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n6A80\n5BE0\n7980\n52A0\n6CE0\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_69EA\nENCODING 27114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2FE0\nFA40\n2E40\n7BE0\n6E40\nA840\nAEC0\n28C0\n2740\n2260\nENDCHAR\nSTARTCHAR U_69EB\nENCODING 27115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF540\n27C0\n7540\n6FC0\nA0A0\nAFE0\n2480\n2280\n2180\nENDCHAR\nSTARTCHAR U_69EC\nENCODING 27116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n26A0\nFAA0\n2EA0\n22A0\n7EA0\nAAA0\nAEA0\n22A0\n32E0\n2DA0\nENDCHAR\nSTARTCHAR U_69ED\nENCODING 27117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\nFFE0\n2A80\n3B80\n6AA0\nAFA0\n2A40\n2F40\n2AA0\n3720\nENDCHAR\nSTARTCHAR U_69EE\nENCODING 27118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2240\nF7E0\n2AA0\n7FE0\n6A80\nA540\nAAA0\n2140\n2080\n2700\nENDCHAR\nSTARTCHAR U_69EF\nENCODING 27119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\nFFC0\n3280\n6FE0\n7C80\nA7C0\n2480\n27C0\n2480\n27E0\nENDCHAR\nSTARTCHAR U_69F0\nENCODING 27120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nF640\n2980\n7760\n7900\nABC0\n2900\n2FE0\n2900\n37E0\nENDCHAR\nSTARTCHAR U_69F1\nENCODING 27121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFE0\n2AA0\n3CE0\n2820\n6FE0\nA820\n2FE0\n2540\n2AA0\nENDCHAR\nSTARTCHAR U_69F2\nENCODING 27122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2420\n27A0\nFA60\n2FA0\n2AE0\n3FA0\n6AA0\nAFE0\n2AA0\n2AA0\n31A0\nENDCHAR\nSTARTCHAR U_69F3\nENCODING 27123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n4B40\n7E80\n0940\nFFE0\n4940\n8A40\nFFE0\n1280\n2240\nC220\nENDCHAR\nSTARTCHAR U_69F4\nENCODING 27124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n2FE0\n2940\n3BE0\n6AA0\nABE0\n2A00\n3220\n21E0\nENDCHAR\nSTARTCHAR U_69F5\nENCODING 27125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\nFA40\n2FC0\n2200\n6FC0\n6A40\nAFC0\n2220\n3540\n33C0\nENDCHAR\nSTARTCHAR U_69F6\nENCODING 27126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2960\nFFE0\n2920\n2EA0\n3AA0\n6EE0\nA8A0\n2F60\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_69F7\nENCODING 27127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n2140\nFF40\n69C0\nA540\nFA20\n2400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_69F8\nENCODING 27128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2E80\nF5E0\n2FA0\n34A0\n6BA0\nA4E0\nAEA0\n24A0\n3F20\n2220\nENDCHAR\nSTARTCHAR U_69F9\nENCODING 27129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nF440\n27C0\n7440\n6FC0\nA540\nA380\n2540\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_69FA\nENCODING 27130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nF940\n2FE0\n7940\n6FC0\nA900\n2D40\n2B80\n3560\n2B00\nENDCHAR\nSTARTCHAR U_69FB\nENCODING 27131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n2520\nFFE0\n2520\n6FE0\n7520\nADE0\nA480\n2AA0\n31A0\n2260\nENDCHAR\nSTARTCHAR U_69FC\nENCODING 27132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFC40\n27C0\nFC40\n27C0\n5280\n8EE0\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_69FD\nENCODING 27133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nFAA0\n2FE0\n2AA0\n3FE0\n6440\nA7C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_69FE\nENCODING 27134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nF7C0\n2440\n3FE0\n2AA0\n6AA0\nAFE0\n2480\n2300\n2CE0\nENDCHAR\nSTARTCHAR U_69FF\nENCODING 27135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2100\n27C0\n3540\n6FE0\nA100\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6A00\nENCODING 27136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF240\n2FE0\n6920\n7FE0\nA920\nABA0\n2AA0\n2BA0\n2860\nENDCHAR\nSTARTCHAR U_6A01\nENCODING 27137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n2FE0\n6280\n7440\nAEE0\nA440\n26C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_6A02\nENCODING 27138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n5E40\n92A0\nFFE0\n5240\nFFE0\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_6A03\nENCODING 27139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2EE0\nFAA0\n2EA0\n7AE0\n6EA0\nA8E0\n2CA0\n2AA0\n2D20\n2260\nENDCHAR\nSTARTCHAR U_6A04\nENCODING 27140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2BE0\nFA80\n2DE0\n3AA0\n2BE0\n6AA0\nAFE0\n2880\n29C0\n2EA0\nENDCHAR\nSTARTCHAR U_6A05\nENCODING 27141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2940\nF6A0\n22A0\n3800\n2A80\n7AE0\nAA80\n2A80\n2D80\n28E0\nENDCHAR\nSTARTCHAR U_6A06\nENCODING 27142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF920\n2AA0\n2FE0\n3100\n6FE0\nA920\n2AA0\n2F60\n2820\nENDCHAR\nSTARTCHAR U_6A07\nENCODING 27143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n24E0\nF9A0\n2A40\n3AA0\n2AE0\n6AA0\nAAE0\n2AA0\n2AE0\n28A0\nENDCHAR\nSTARTCHAR U_6A08\nENCODING 27144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2FE0\n6440\n77C0\nAC40\nA7C0\n2280\n24A0\n2860\nENDCHAR\nSTARTCHAR U_6A09\nENCODING 27145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n2BA0\n3540\n2BA0\n6540\nAAA0\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_6A0A\nENCODING 27146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n2440\nFBE0\n2A40\n74E0\nAB40\n2440\nFFE0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_6A0B\nENCODING 27147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n33E0\n2940\nF080\n63E0\n7AA0\nABE0\nAAA0\n2BE0\n2AA0\n2800\n37E0\nENDCHAR\nSTARTCHAR U_6A0C\nENCODING 27148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nFFE0\n2540\n77C0\n6C40\nA7C0\nA440\n27C0\n2440\n2820\nENDCHAR\nSTARTCHAR U_6A0D\nENCODING 27149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n27C0\n2100\n37E0\n6C40\nA7C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_6A0E\nENCODING 27150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nF420\n37C0\n6900\n7BC0\n6A40\nABC0\n2A40\n2A40\n2BC0\nENDCHAR\nSTARTCHAR U_6A0F\nENCODING 27151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nFFE0\n2920\n3FE0\n2240\n6F80\nA240\n2FA0\n2940\n3320\nENDCHAR\nSTARTCHAR U_6A10\nENCODING 27152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\nF900\n2FE0\n6D60\n7AA0\n6D60\nAAA0\n2D60\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_6A11\nENCODING 27153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BC0\n2540\nFB60\n2540\n7940\n6AC0\nA500\nAFE0\n2580\n2940\n3120\nENDCHAR\nSTARTCHAR U_6A12\nENCODING 27154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nF940\n62A0\n7740\n6BC0\nAC00\n2100\n2940\n2940\n2FC0\nENDCHAR\nSTARTCHAR U_6A13\nENCODING 27155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2540\nFFE0\n2540\n3FE0\n6520\nAFE0\n2240\n2180\n2E60\nENDCHAR\nSTARTCHAR U_6A14\nENCODING 27156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2A80\nF540\n27C0\n3540\n2FC0\n6540\nAFE0\n2580\n2940\n3120\nENDCHAR\nSTARTCHAR U_6A15\nENCODING 27157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF2A0\n2FA0\n2A40\n7FC0\n6A40\nA740\n2AC0\n32A0\n2320\nENDCHAR\nSTARTCHAR U_6A16\nENCODING 27158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n3180\nCE60\n3F80\n2080\n3FE0\nE040\n2740\n7540\nAF40\n20C0\nENDCHAR\nSTARTCHAR U_6A17\nENCODING 27159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFFE0\n2AA0\n67C0\n7000\nAFE0\nA200\n27C0\n2040\n2180\nENDCHAR\nSTARTCHAR U_6A18\nENCODING 27160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nFFE0\n2820\n27C0\n3440\n6FC0\nA100\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6A19\nENCODING 27161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFE0\n2AA0\n2FE0\n3000\n67C0\nA000\n2FE0\n2540\n3B20\nENDCHAR\nSTARTCHAR U_6A1A\nENCODING 27162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFA80\n2FE0\n7AA0\n6FE0\nAA80\nABE0\n2A80\n2AA0\n3360\nENDCHAR\nSTARTCHAR U_6A1B\nENCODING 27163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n25A0\nFB60\n25A0\n2320\n3CE0\n6640\nA180\n2620\n20C0\n2700\nENDCHAR\nSTARTCHAR U_6A1C\nENCODING 27164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFA40\n6A40\n7FE0\nAA40\nAA40\n2BC0\n2800\n36A0\n2AA0\nENDCHAR\nSTARTCHAR U_6A1D\nENCODING 27165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2100\nFFE0\n2920\n2F80\n3920\n6BE0\nAA40\n2BC0\n2A40\n37E0\nENDCHAR\nSTARTCHAR U_6A1E\nENCODING 27166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\nFBC0\n2A40\n2BC0\n3800\n6EE0\nAAA0\n2EE0\n2800\n2FE0\nENDCHAR\nSTARTCHAR U_6A1F\nENCODING 27167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF280\n2FE0\n3440\n6FC0\nA440\n27C0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_6A20\nENCODING 27168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2380\n3100\n2FE0\n6920\nADA0\n2B60\n2920\n2860\nENDCHAR\nSTARTCHAR U_6A21\nENCODING 27169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n27C0\n3440\n6FC0\n6440\nAFE0\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_6A22\nENCODING 27170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nFC40\n27C0\n7440\n6FE0\nA400\nA7E0\n2020\n2AA0\n2AE0\nENDCHAR\nSTARTCHAR U_6A23\nENCODING 27171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF100\n27C0\n7100\n6FE0\nA100\nAF20\n25C0\n2540\n3B20\nENDCHAR\nSTARTCHAR U_6A24\nENCODING 27172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n49E0\nF340\n5480\n7560\nD680\nD5E0\n5480\n52C0\n54A0\n5180\nENDCHAR\nSTARTCHAR U_6A25\nENCODING 27173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n23C0\n6D40\n7380\nAD60\nA7C0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_6A26\nENCODING 27174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\nFC40\n2220\n2100\n37E0\n6900\nA100\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6A27\nENCODING 27175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BC0\n2540\nFB40\n2560\n3600\n2FE0\n64A0\nAEA0\n3540\n24A0\n2520\nENDCHAR\nSTARTCHAR U_6A28\nENCODING 27176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nF7E0\n26A0\n35C0\n6EA0\nA480\n27E0\n2480\n2BE0\n3080\nENDCHAR\nSTARTCHAR U_6A29\nENCODING 27177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\n2900\nF7E0\n2200\n7480\n6FE0\nB480\n27E0\n2480\n27E0\nENDCHAR\nSTARTCHAR U_6A2A\nENCODING 27178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2FE0\n2100\n77C0\n6540\nA7C0\n2540\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_6A2B\nENCODING 27179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n54A0\nFEA0\n5240\nFE40\nD4A0\nDE20\n4100\n4FC0\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_6A2C\nENCODING 27180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nFD40\n25C0\n76C0\n6D40\nA7C0\nA240\n2520\n2C40\n33C0\nENDCHAR\nSTARTCHAR U_6A2D\nENCODING 27181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\nF480\n2780\n7480\n6FE0\nA480\nA940\n37A0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6A2E\nENCODING 27182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n2FE0\nFAA0\n2FE0\n7100\n6920\nA540\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_6A2F\nENCODING 27183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF920\n2540\n3FE0\n6000\nAFE0\nAAA0\n2BA0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_6A30\nENCODING 27184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n6D20\n7340\n6D20\nA7C0\n2040\n27C0\n2040\n27C0\nENDCHAR\nSTARTCHAR U_6A31\nENCODING 27185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nFAA0\n2AA0\n2AA0\n3540\n6920\nAFE0\n2280\n2180\n2E60\nENDCHAR\nSTARTCHAR U_6A32\nENCODING 27186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20A0\n2FE0\nF080\n2E80\n2080\n3F80\n6A80\nAE80\n2AA0\n2E60\n3B20\nENDCHAR\nSTARTCHAR U_6A33\nENCODING 27187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\nF7C0\n7040\n6FE0\n64A0\nA6E0\n2840\n2FE0\n2240\n2080\nENDCHAR\nSTARTCHAR U_6A34\nENCODING 27188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FC0\nFAA0\n2480\n6FE0\n7080\nAEA0\nAAC0\n2EA0\n2B60\n2E20\nENDCHAR\nSTARTCHAR U_6A35\nENCODING 27189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27E0\nFC80\n27E0\n7480\n6FE0\nA480\nA7E0\n2540\n2AA0\n2AA0\nENDCHAR\nSTARTCHAR U_6A36\nENCODING 27190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2840\nFFC0\n2840\n3FE0\n6A00\n7EE0\nAAA0\nAB40\n3EA0\n2320\nENDCHAR\nSTARTCHAR U_6A37\nENCODING 27191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n71C0\nAAA0\n2080\nFFE0\n4800\n7BE0\n4940\nFDC0\n0A20\nENDCHAR\nSTARTCHAR U_6A38\nENCODING 27192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\n26C0\nFFE0\n2280\n67C0\n7100\nAFC0\nA100\n2FE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_6A39\nENCODING 27193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2FA0\nF220\n2FE0\n7020\n6F20\nA9A0\nAF60\n2920\n2620\n3F60\nENDCHAR\nSTARTCHAR U_6A3A\nENCODING 27194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2FE0\n2540\n3FE0\n6540\nAFE0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_6A3B\nENCODING 27195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF540\n2FE0\n2440\n37C0\n6C40\nA7C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_6A3C\nENCODING 27196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFFE0\n2440\n37E0\n6C80\nA7E0\n2A40\n2FE0\n2A40\n36C0\nENDCHAR\nSTARTCHAR U_6A3D\nENCODING 27197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nF280\n2FE0\n6AA0\n7C60\nAFE0\nA040\n2FE0\n2440\n22C0\nENDCHAR\nSTARTCHAR U_6A3E\nENCODING 27198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4460\n4440\nFFE0\n4540\n5F40\n6560\nD740\n55A0\n5520\n6C00\n47E0\nENDCHAR\nSTARTCHAR U_6A3F\nENCODING 27199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFFE0\n2540\n27C0\n3540\n6FC0\nA100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_6A40\nENCODING 27200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF240\n2FA0\n2540\n3540\n6960\nA000\n2FE0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_6A41\nENCODING 27201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\nF240\n27E0\n6820\n77A0\nA4A0\nA7A0\n24A0\n27A0\n2040\nENDCHAR\nSTARTCHAR U_6A42\nENCODING 27202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nF280\n2FE0\n7AA0\n6C60\nAFE0\nA100\n2FE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_6A43\nENCODING 27203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5D40\n54A0\nE840\n7DE0\n4540\nDE60\n5000\n5DC0\n4540\n5480\n4940\nENDCHAR\nSTARTCHAR U_6A44\nENCODING 27204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2280\nFFE0\n2AA0\n2EA0\n3AA0\n6EA0\nAAA0\n2A40\n3EA0\n2320\nENDCHAR\nSTARTCHAR U_6A45\nENCODING 27205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\nEFE0\n3540\n6FE0\n6540\nA540\nBFE0\n2000\n2D40\n32A0\nENDCHAR\nSTARTCHAR U_6A46\nENCODING 27206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7FE0\nAA80\nFFE0\n2A80\nFFE0\n2080\nFBE0\n2080\n71C0\nAAA0\nENDCHAR\nSTARTCHAR U_6A47\nENCODING 27207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n2100\n37E0\n2100\n6FE0\nA480\n2FE0\n24A0\n2FE0\nENDCHAR\nSTARTCHAR U_6A48\nENCODING 27208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF100\n2FE0\n7440\n6FE0\nA440\nAFE0\n2280\n24A0\n2860\nENDCHAR\nSTARTCHAR U_6A49\nENCODING 27209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nFFE0\n2540\n6920\n7440\nA7E0\nA940\n2BE0\n2440\n2840\nENDCHAR\nSTARTCHAR U_6A4A\nENCODING 27210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFEE0\n2AA0\n6EE0\n7280\nAFE0\n2920\n2FE0\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_6A4B\nENCODING 27211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2200\nFFE0\n2480\n2FC0\n74A0\nAFE0\nAAA0\n2BA0\n2820\n2860\nENDCHAR\nSTARTCHAR U_6A4C\nENCODING 27212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\nFEE0\n4AA0\n6EE0\nDBA0\nCAA0\n4BA0\n4AA0\n4DA0\n4840\nENDCHAR\nSTARTCHAR U_6A4D\nENCODING 27213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\n2AA0\n6EE0\n7BA0\nA920\nABA0\n2920\n2BA0\n2860\nENDCHAR\nSTARTCHAR U_6A4E\nENCODING 27214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2920\nF540\n2FE0\n3540\n6920\nA7C0\n2540\n27C0\n2540\n27C0\nENDCHAR\nSTARTCHAR U_6A4F\nENCODING 27215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF100\n27C0\n3100\n6FE0\nA280\n2FE0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_6A50\nENCODING 27216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n4440\nFFE0\n8020\nBFE0\n5080\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_6A51\nENCODING 27217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n27C0\n6C60\n77C0\nA440\nA7C0\n2100\n2940\n3320\nENDCHAR\nSTARTCHAR U_6A52\nENCODING 27218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n2920\n7540\n6920\nA7C0\n2000\n2FE0\n2280\n27C0\nENDCHAR\nSTARTCHAR U_6A53\nENCODING 27219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2F20\nF540\n2FE0\n6820\n7440\nAFE0\nB340\n2DE0\n2840\n3040\nENDCHAR\nSTARTCHAR U_6A54\nENCODING 27220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2F80\nFAE0\n2FA0\n70A0\n6EA0\nA4A0\nA6A0\n2C40\n24A0\n2D20\nENDCHAR\nSTARTCHAR U_6A55\nENCODING 27221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nFFE0\n2AA0\n6380\n7000\nAFE0\nA480\n2FE0\n2280\n2D80\nENDCHAR\nSTARTCHAR U_6A56\nENCODING 27222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nFFE0\n2820\n67C0\n7440\nAFC0\nA100\n2FE0\n2540\n2920\nENDCHAR\nSTARTCHAR U_6A57\nENCODING 27223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\nF480\n2EE0\n6AA0\n7EE0\nAAA0\nAAE0\n2EA0\n2120\n2260\nENDCHAR\nSTARTCHAR U_6A58\nENCODING 27224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFE0\n2520\n2940\n3FE0\n6AA0\nAC60\n2BA0\n2AA0\n2BE0\nENDCHAR\nSTARTCHAR U_6A59\nENCODING 27225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F40\n2AA0\nF440\n27C0\n3820\n27C0\n6440\nA7C0\n2440\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_6A5A\nENCODING 27226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF140\n2FE0\n6140\n7FC0\nA920\nAFE0\n2920\n2EE0\n32A0\nENDCHAR\nSTARTCHAR U_6A5B\nENCODING 27227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2D80\nFA80\n2FE0\n2A20\n3AC0\n6FC0\nAA40\n2A40\n34A0\n2920\nENDCHAR\nSTARTCHAR U_6A5C\nENCODING 27228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5480\n7FE0\n4AA0\n7E80\n4940\n5220\n7FE0\n4A80\n9240\nA220\nENDCHAR\nSTARTCHAR U_6A5D\nENCODING 27229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFE0\n2AA0\n2FE0\n3440\n6FC0\nA440\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_6A5E\nENCODING 27230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF540\n27C0\n2540\n37C0\n6140\nAFA0\n2AC0\n2A20\n31C0\nENDCHAR\nSTARTCHAR U_6A5F\nENCODING 27231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n29A0\nFF40\n2520\n6FE0\n7540\nAFE0\nA540\n26A0\n2960\n3220\nENDCHAR\nSTARTCHAR U_6A60\nENCODING 27232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2500\n7280\n6DE0\nA240\nAF80\n22A0\n2E40\n2320\nENDCHAR\nSTARTCHAR U_6A61\nENCODING 27233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFFE0\n24A0\n37E0\n2A40\n6D80\nA2C0\n2DA0\n22A0\n2D80\nENDCHAR\nSTARTCHAR U_6A62\nENCODING 27234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2BE0\nFA00\n2DE0\n6A80\n7BE0\nAB20\nAFE0\n2920\n29E0\n2920\nENDCHAR\nSTARTCHAR U_6A63\nENCODING 27235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4FE0\nF940\n44A0\n6B80\nDFC0\nCA40\n4FC0\n4A40\n4FC0\n4A40\nENDCHAR\nSTARTCHAR U_6A64\nENCODING 27236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1600\n5140\n5F20\n2080\n5340\nCD20\n79E0\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_6A65\nENCODING 27237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57A0\n2140\n6FE0\nB440\n5FC0\n9440\n37C0\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_6A66\nENCODING 27238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF280\n2100\n37E0\n2D40\n67C0\nA540\n2FE0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6A67\nENCODING 27239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nFFE0\n2AA0\n2920\n3FE0\n6440\nA7C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_6A68\nENCODING 27240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF540\n2FE0\n6440\n77C0\nAC40\nA7C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_6A69\nENCODING 27241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2F60\nF540\n2440\n2AA0\n3FE0\n6820\nA780\n24A0\n28A0\n3060\nENDCHAR\nSTARTCHAR U_6A6A\nENCODING 27242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24C0\n26A0\nF580\n2DE0\n7280\n6A80\nA540\nAA20\n2000\n2AA0\n2AA0\nENDCHAR\nSTARTCHAR U_6A6B\nENCODING 27243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n27E0\n2100\n37C0\n6D40\nA7C0\n2540\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_6A6C\nENCODING 27244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n5540\nFFE0\n4AC0\n6B60\nD000\nC7C0\n4440\n47C0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_6A6D\nENCODING 27245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n27C0\n2440\n3FE0\n6280\nAFE0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_6A6E\nENCODING 27246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n26E0\n28A0\nFAA0\n2D60\n77C0\n6C40\nA7C0\nA440\n27C0\n2440\n2820\nENDCHAR\nSTARTCHAR U_6A6F\nENCODING 27247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n2B60\nF2C0\n2520\n3FE0\n6820\nA200\n2FE0\n2220\n2520\n38C0\nENDCHAR\nSTARTCHAR U_6A70\nENCODING 27248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF440\n27C0\n7440\n67C0\nAD60\n2380\n2540\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_6A71\nENCODING 27249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\nFFA0\n2820\n6BE0\n7AA0\nABE0\nAAA0\n2920\n2FA0\n3060\nENDCHAR\nSTARTCHAR U_6A72\nENCODING 27250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nF200\n2FC0\n7840\n6FC0\nA480\n3FE0\n2840\n2840\n2FC0\nENDCHAR\nSTARTCHAR U_6A73\nENCODING 27251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EA0\n55C0\nF7E0\n5C80\n77E0\nD540\nDEA0\n57C0\n5540\n6540\n4EC0\nENDCHAR\nSTARTCHAR U_6A74\nENCODING 27252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44A0\n56C0\nF4A0\n5EE0\nE240\nD580\nC240\n4FE0\n4100\n4D40\n5320\nENDCHAR\nSTARTCHAR U_6A75\nENCODING 27253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n5F40\nEAE0\n5FA0\nE0A0\nDEA0\nD2A0\n5E40\n5240\n5EA0\n5320\nENDCHAR\nSTARTCHAR U_6A76\nENCODING 27254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24C0\n2FA0\nF480\n2FE0\n6A80\n7EA0\nAAA0\nAEA0\n2440\n2EE0\n2520\nENDCHAR\nSTARTCHAR U_6A77\nENCODING 27255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4940\n4BC0\nFAE0\n4BC0\nDAC0\nEBE0\nC000\n4480\n44A0\n44A0\n58E0\nENDCHAR\nSTARTCHAR U_6A78\nENCODING 27256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\nF7C0\n4440\nE7C0\nDEE0\n4AA0\n4EA0\n4AE0\n4AA0\n4EE0\nENDCHAR\nSTARTCHAR U_6A79\nENCODING 27257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2480\nFFC0\n2540\n67C0\n7540\nAFE0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_6A7A\nENCODING 27258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\n2AA0\n6EE0\n7BA0\nAAA0\nABA0\n2AA0\n2BA0\n2860\nENDCHAR\nSTARTCHAR U_6A7B\nENCODING 27259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4240\nF7C0\n4240\n6240\nDFE0\nCAA0\n4AA0\n5FE0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_6A7C\nENCODING 27260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25C0\n2540\nF940\n2FE0\n3500\n6AA0\nADC0\nA2A0\n25A0\n3A80\n2100\nENDCHAR\nSTARTCHAR U_6A7D\nENCODING 27261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n4BE0\nF080\n47E0\nD940\nEBE0\nC880\n4BE0\n4880\n4C80\n53E0\nENDCHAR\nSTARTCHAR U_6A7E\nENCODING 27262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFBC0\n2000\n6EE0\n7AA0\nAEE0\nA100\n2FE0\n2540\n2920\nENDCHAR\nSTARTCHAR U_6A7F\nENCODING 27263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\nFFC0\n2540\n2FE0\n3000\n67C0\nA540\n27C0\n2540\n2FE0\nENDCHAR\nSTARTCHAR U_6A80\nENCODING 27264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n2AA0\n2BA0\n3820\n6FE0\nA440\n27C0\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_6A81\nENCODING 27265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n2BA0\n3820\n2FE0\n6380\nA100\n2FE0\n2540\n3920\nENDCHAR\nSTARTCHAR U_6A82\nENCODING 27266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4FE0\nFAA0\n4FE0\nE000\nDFE0\nC800\n4FE0\n4AA0\n4A40\n5320\nENDCHAR\nSTARTCHAR U_6A83\nENCODING 27267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEF80\nAA40\nAFC0\nC100\nAFE0\nA040\nEFC0\n8040\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_6A84\nENCODING 27268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n5E80\nF2E0\n5F20\n52A0\nFEA0\nC8A0\n5EA0\n4A40\n52A0\n6720\nENDCHAR\nSTARTCHAR U_6A85\nENCODING 27269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25C0\n2500\nFFE0\n20A0\n2FE0\n3880\n6FA0\nAA40\n2F40\n3260\n2DA0\nENDCHAR\nSTARTCHAR U_6A86\nENCODING 27270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n5760\nF440\n4640\nE940\nD4E0\nC5A0\n56A0\n54A0\n4AA0\n50E0\nENDCHAR\nSTARTCHAR U_6A87\nENCODING 27271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n2FE0\nF900\n2FE0\n3900\n2FE0\n6900\nAFE0\n2AA0\n2BA0\n2860\nENDCHAR\nSTARTCHAR U_6A88\nENCODING 27272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4AA0\nFFE0\n4000\nEFE0\nD840\nCFC0\n4520\n44C0\n5D40\n4620\nENDCHAR\nSTARTCHAR U_6A89\nENCODING 27273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F00\n2AE0\nFEA0\n2AA0\n2FE0\n3A00\n6FE0\nA100\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6A8A\nENCODING 27274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n5F40\nF4A0\n4EA0\nEAE0\nDE40\nCA40\n4FE0\n4440\n5E40\n4440\nENDCHAR\nSTARTCHAR U_6A8B\nENCODING 27275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4FE0\nE280\n4FE0\n6540\n5FE0\nC540\n47C0\n4540\n4FE0\n4100\nENDCHAR\nSTARTCHAR U_6A8C\nENCODING 27276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFAA0\n2FE0\n6280\n7EE0\nA280\nAEE0\n2280\n2EE0\n2280\nENDCHAR\nSTARTCHAR U_6A8D\nENCODING 27277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2FE0\n3440\n67C0\nA440\n27C0\n2D40\n34A0\n23A0\nENDCHAR\nSTARTCHAR U_6A8E\nENCODING 27278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF540\n2FE0\n26C0\n3540\n6FC0\nA200\n2FE0\n2AA0\n2B60\nENDCHAR\nSTARTCHAR U_6A8F\nENCODING 27279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4AA0\nEFE0\n4480\n6FE0\n5100\nCFC0\n4100\n5FE0\n4540\n5920\nENDCHAR\nSTARTCHAR U_6A90\nENCODING 27280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFFE0\n26A0\n27E0\n3400\n6DC0\nA400\n27E0\n2A20\n33E0\nENDCHAR\nSTARTCHAR U_6A91\nENCODING 27281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFFE0\n2920\n2BA0\n3540\n6FE0\nA920\n2FE0\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_6A92\nENCODING 27282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n6AC0\nA4A0\n7FC0\n4440\n5F40\n5540\n5F40\n8540\nBEA0\nENDCHAR\nSTARTCHAR U_6A93\nENCODING 27283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n29A0\nFFA0\n29A0\n6F00\n70E0\nAEA0\nA4A0\n2440\n26A0\n3920\nENDCHAR\nSTARTCHAR U_6A94\nENCODING 27284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nFFE0\n2AA0\n3380\n2800\n6FE0\nA920\n2FE0\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_6A95\nENCODING 27285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\n54A0\n7D20\n55E0\nFEA0\n5440\n7DA0\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_6A96\nENCODING 27286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2BE0\nF480\n2100\n7EA0\n65C0\nA6C0\nA5A0\n26A0\n2C80\n33E0\nENDCHAR\nSTARTCHAR U_6A97\nENCODING 27287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8FE0\nF940\n87E0\nF880\nCFE0\n7880\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_6A98\nENCODING 27288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n5E40\nF3E0\n52A0\n5EC0\n7040\nDFE0\n5A40\n5BE0\n6E40\n4040\nENDCHAR\nSTARTCHAR U_6A99\nENCODING 27289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n4280\nEBA0\n4AA0\n4BA0\n6EE0\nC280\n5EE0\n4AA0\n4AA0\n52A0\nENDCHAR\nSTARTCHAR U_6A9A\nENCODING 27290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\nF2C0\n2760\n2A40\n3FE0\n6520\nA500\n25C0\n2B00\n31E0\nENDCHAR\nSTARTCHAR U_6A9B\nENCODING 27291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFF40\n2540\n7FE0\n6820\nABA0\nAAA0\n2BA0\n3420\n23E0\nENDCHAR\nSTARTCHAR U_6A9C\nENCODING 27292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n27C0\nF820\n2FE0\n2AA0\n3920\n6FE0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_6A9D\nENCODING 27293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EC0\n4AA0\nEE80\n5FE0\n4A80\n6EA0\nCAA0\n4E40\n4B40\n5EA0\n4320\nENDCHAR\nSTARTCHAR U_6A9E\nENCODING 27294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n52A0\nFFA0\n5540\n7540\nDFE0\n5540\n5FE0\n5540\n5540\n6340\nENDCHAR\nSTARTCHAR U_6A9F\nENCODING 27295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nFFE0\n2AA0\n2FE0\n3440\n6F40\nA5C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_6AA0\nENCODING 27296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\nFFE0\n2940\nFD40\n5480\n5540\n7620\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_6AA1\nENCODING 27297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFFE0\n2100\n2FE0\n3280\n6FE0\nA100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_6AA2\nENCODING 27298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nF440\n2BA0\n6000\n7EE0\nAAA0\nAEE0\n2440\n2AC0\n3120\nENDCHAR\nSTARTCHAR U_6AA3\nENCODING 27299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF540\n2BA0\n2FE0\n3000\n6FE0\nAAA0\n2BA0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_6AA4\nENCODING 27300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2940\n27E0\nF480\n21E0\n3D20\n25A0\n6560\nA520\n25E0\n2A00\n31E0\nENDCHAR\nSTARTCHAR U_6AA5\nENCODING 27301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF900\n27C0\n3100\n2FE0\n62A0\nAFE0\n26C0\n2BA0\n2E60\nENDCHAR\nSTARTCHAR U_6AA6\nENCODING 27302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FA0\n4A20\nFFA0\n55A0\n5FA0\nE0A0\n5EA0\n40A0\n7F20\n5520\n6CE0\nENDCHAR\nSTARTCHAR U_6AA7\nENCODING 27303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n27E0\n6AA0\n76A0\nA960\nA200\n2540\n2C60\n33C0\nENDCHAR\nSTARTCHAR U_6AA8\nENCODING 27304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF100\n27C0\n7100\n6FE0\nA100\nABE0\n24A0\n2D40\n2620\nENDCHAR\nSTARTCHAR U_6AA9\nENCODING 27305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n2920\n7FE0\n6800\nA7C0\nA000\n2FE0\n2540\n2B20\nENDCHAR\nSTARTCHAR U_6AAA\nENCODING 27306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4BA0\nF6A0\n43C0\n6AA0\n5380\nC100\n5FE0\n4380\n4540\n5920\nENDCHAR\nSTARTCHAR U_6AAB\nENCODING 27307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF520\n2740\n6AA0\n7440\nAFE0\nA000\n2FE0\n2540\n3B20\nENDCHAR\nSTARTCHAR U_6AAC\nENCODING 27308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nE280\n3FE0\n2820\n37C0\n6A40\nB580\n2B40\n2520\n2B00\nENDCHAR\nSTARTCHAR U_6AAD\nENCODING 27309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n2B20\nF1E0\n2F20\n65E0\n6F80\nB5A0\nAD40\n2740\n39A0\n2120\nENDCHAR\nSTARTCHAR U_6AAE\nENCODING 27310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n2FE0\n3220\n2FC0\n6040\nAFE0\n2B40\n2EC0\n20C0\nENDCHAR\nSTARTCHAR U_6AAF\nENCODING 27311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF100\n27C0\n2440\n7FE0\n6920\nA240\n27A0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6AB0\nENCODING 27312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n49E0\nF520\n5DE0\n6920\n55E0\nDC80\n43E0\n56A0\n52E0\n4080\nENDCHAR\nSTARTCHAR U_6AB1\nENCODING 27313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n4EE0\nF340\n4480\n6FE0\n5480\nC780\n4480\n5FE0\n4440\n4820\nENDCHAR\nSTARTCHAR U_6AB2\nENCODING 27314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n5120\nFFE0\n55A0\n57A0\n7120\nDFE0\n54A0\n52A0\n5120\n5FE0\nENDCHAR\nSTARTCHAR U_6AB3\nENCODING 27315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\n27C0\n3540\n2FC0\n6440\nA7C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_6AB4\nENCODING 27316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nF540\n2FE0\n2900\n3FE0\n6900\nAFE0\n2240\n2180\n2E60\nENDCHAR\nSTARTCHAR U_6AB5\nENCODING 27317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n4DA0\nEA40\n4FE0\n4800\n6FE0\nCA40\n4DA0\n4A40\n4B60\n4FE0\nENDCHAR\nSTARTCHAR U_6AB6\nENCODING 27318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF280\n2FE0\n2A40\n3BC0\n6800\nAEE0\n2AA0\n2AA0\n2FE0\nENDCHAR\nSTARTCHAR U_6AB7\nENCODING 27319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\nFFE0\n2920\n6DA0\n7B60\nADA0\nAB60\n2DA0\n2920\n2860\nENDCHAR\nSTARTCHAR U_6AB8\nENCODING 27320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF920\n2CC0\n77A0\n6000\nAFE0\nAAA0\n2FE0\n2100\n2700\nENDCHAR\nSTARTCHAR U_6AB9\nENCODING 27321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n25E0\nFE80\n29E0\n7EA0\n6BE0\nAA20\nABA0\n2AA0\n2BA0\n3660\nENDCHAR\nSTARTCHAR U_6ABA\nENCODING 27322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF440\n2FE0\n3820\n27C0\n6500\nAAA0\n25C0\n2AA0\n25A0\nENDCHAR\nSTARTCHAR U_6ABB\nENCODING 27323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F40\n2A40\nFF60\n2980\n2F40\n7A20\nAF00\n2000\n2FE0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_6ABC\nENCODING 27324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\nF7E0\n2020\n77E0\n6820\nA7E0\nA240\n2D20\n3440\n23C0\nENDCHAR\nSTARTCHAR U_6ABD\nENCODING 27325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFFE0\n2920\n7540\n6920\nAFE0\nA200\n2FE0\n2AA0\n2AA0\nENDCHAR\nSTARTCHAR U_6ABE\nENCODING 27326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n5B80\n9100\n6A40\nFFE0\n8020\n1100\nFFE0\n3B80\n5540\n9920\nENDCHAR\nSTARTCHAR U_6ABF\nENCODING 27327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA480\nBCA0\nA5E0\nBC80\nA4C0\nA520\n8200\nBFE0\n8A80\nB260\nENDCHAR\nSTARTCHAR U_6AC0\nENCODING 27328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nF540\n2FE0\n7540\n6AA0\nB780\nA240\n2FE0\n2540\n3B20\nENDCHAR\nSTARTCHAR U_6AC1\nENCODING 27329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nFAA0\n4500\n5660\n69C0\nD100\n47C0\n4540\n47C0\n5FE0\nENDCHAR\nSTARTCHAR U_6AC2\nENCODING 27330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n25A0\nFB60\n25A0\n37E0\n2C80\n67E0\nA480\n27E0\n2480\n27E0\nENDCHAR\nSTARTCHAR U_6AC3\nENCODING 27331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2880\nFBE0\n2AA0\n3FE0\n2A40\n6BC0\nAA40\n2BC0\n2A60\n2FE0\nENDCHAR\nSTARTCHAR U_6AC4\nENCODING 27332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n4200\nFFE0\n4A40\n4EC0\n6A40\nCFC0\n4200\n5FE0\n4940\n52A0\nENDCHAR\nSTARTCHAR U_6AC5\nENCODING 27333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF2A0\n2D40\n2560\n3540\n6FC0\nA440\n27C0\n2840\n3040\nENDCHAR\nSTARTCHAR U_6AC6\nENCODING 27334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n48A0\n5F60\nF520\n5FA0\n5560\n7F20\nC4E0\n4520\n4EA0\n5520\n67E0\nENDCHAR\nSTARTCHAR U_6AC7\nENCODING 27335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n5E80\n75E0\n5520\n7FE0\nDB20\nD5E0\n5520\n5BE0\n6AC0\n7120\nENDCHAR\nSTARTCHAR U_6AC8\nENCODING 27336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EC0\n4AA0\nF7C0\n4C60\n57C0\n6280\nCFE0\n4000\n4780\n44A0\n48E0\nENDCHAR\nSTARTCHAR U_6AC9\nENCODING 27337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n5240\nF740\n5240\n5FE0\n7740\nD5C0\n5740\n55C0\n5340\n6CC0\nENDCHAR\nSTARTCHAR U_6ACA\nENCODING 27338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n52A0\nFEE0\n5020\n53A0\n74A0\nD320\n5FE0\n54A0\n57A0\n5060\nENDCHAR\nSTARTCHAR U_6ACB\nENCODING 27339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nFC40\n27C0\n3440\n2FE0\n6AA0\nA540\n2FE0\n2220\n2CC0\nENDCHAR\nSTARTCHAR U_6ACC\nENCODING 27340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2440\nF740\n25C0\n3440\n2FE0\n6AA0\nA7C0\n2A40\n2180\n2E60\nENDCHAR\nSTARTCHAR U_6ACD\nENCODING 27341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2880\nFFE0\n2AA0\n27C0\n3440\n6F40\nA5C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_6ACE\nENCODING 27342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFA80\n2FC0\n7A80\n6FE0\nAD40\n2FC0\n2D40\n2FC0\n3280\nENDCHAR\nSTARTCHAR U_6ACF\nENCODING 27343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BE0\n2540\nF3E0\n22A0\n3FE0\n2940\n6BE0\nAD40\n29C0\n2D20\n33E0\nENDCHAR\nSTARTCHAR U_6AD0\nENCODING 27344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n2480\nFFE0\nAAA0\nFBE0\nAAA0\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_6AD1\nENCODING 27345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nF7C0\n2540\n27C0\n3440\n6FE0\nAAA0\n2FE0\n2AA0\n2FE0\nENDCHAR\nSTARTCHAR U_6AD2\nENCODING 27346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nFA80\n26E0\n6AA0\n7440\nABA0\n2000\n2FE0\n2540\n2B20\nENDCHAR\nSTARTCHAR U_6AD3\nENCODING 27347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n2480\nFFE0\n2920\n2FE0\n3920\n6FE0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_6AD4\nENCODING 27348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2940\nFFE0\n2940\n6BE0\n7AA0\nAFE0\n2CA0\n2FE0\n3420\n3460\nENDCHAR\nSTARTCHAR U_6AD5\nENCODING 27349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2EE0\nF440\n2AA0\n77E0\n6460\nA7C0\nA440\n27C0\n2440\n2820\nENDCHAR\nSTARTCHAR U_6AD6\nENCODING 27350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n2200\nFFE0\n2A40\n6FE0\n7AA0\nABE0\n2AA0\n2BE0\n3540\n3BC0\nENDCHAR\nSTARTCHAR U_6AD7\nENCODING 27351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2FE0\n6AA0\n7FE0\nA100\n2FE0\n2940\n2CA0\n3360\nENDCHAR\nSTARTCHAR U_6AD8\nENCODING 27352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\nF480\n2FE0\n7480\nEFC0\nA240\n2FC0\n2D60\n3440\n23C0\nENDCHAR\nSTARTCHAR U_6AD9\nENCODING 27353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF280\n2FE0\n2A40\n3BC0\n6800\nAEE0\n2AA0\n2EE0\n2FE0\nENDCHAR\nSTARTCHAR U_6ADA\nENCODING 27354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\n2AA0\n6FE0\n7AA0\nABA0\nA820\n2BA0\n2AA0\n2BE0\nENDCHAR\nSTARTCHAR U_6ADB\nENCODING 27355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2FE0\nF440\n2EE0\n2AA0\n3EA0\n6AA0\nAEA0\n28E0\n2A80\n2D80\nENDCHAR\nSTARTCHAR U_6ADC\nENCODING 27356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2480\nFFE0\nA120\n7980\n2940\nFFE0\n1080\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_6ADD\nENCODING 27357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFFE0\n2AA0\n2FE0\n3440\n6F40\nA5C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_6ADE\nENCODING 27358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49C0\n5540\nF540\n5BC0\n6900\nD6A0\nDDC0\n5680\n55C0\n6AA0\n41A0\nENDCHAR\nSTARTCHAR U_6ADF\nENCODING 27359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n2BC0\nFAA0\n2FE0\n2AA0\n3FE0\n6100\nBFE0\n2580\n2940\n3120\nENDCHAR\nSTARTCHAR U_6AE0\nENCODING 27360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFEC0\n2A40\n2EE0\n3AA0\n6F00\nA9E0\n2EA0\n3240\n26A0\nENDCHAR\nSTARTCHAR U_6AE1\nENCODING 27361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\nFA40\n27A0\n2140\n3FE0\n6240\nA7C0\n2A40\n23C0\n2240\nENDCHAR\nSTARTCHAR U_6AE2\nENCODING 27362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FC0\nFA80\n2FE0\n6AA0\n7FA0\nA240\n3F40\n25A0\n22A0\n2D20\nENDCHAR\nSTARTCHAR U_6AE3\nENCODING 27363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n57E0\nEA40\n4100\n4FE0\nF540\nD7C0\n5540\n5FE0\n5100\n6FE0\nENDCHAR\nSTARTCHAR U_6AE4\nENCODING 27364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\nFD40\n2A20\n6FE0\n7000\nAEA0\n2AA0\n2EA0\n2A20\n2A60\nENDCHAR\nSTARTCHAR U_6AE5\nENCODING 27365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2FE0\nF920\n2FA0\n2960\n3FA0\n6AE0\nABA0\n2AA0\n3D20\n27E0\nENDCHAR\nSTARTCHAR U_6AE6\nENCODING 27366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n5FE0\nF500\n5FC0\n7540\nDFC0\nD540\n5BA0\n5680\n5100\n6EC0\nENDCHAR\nSTARTCHAR U_6AE7\nENCODING 27367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24A0\n2FE0\nF0A0\n2DE0\n3080\n2DE0\n6320\nBDE0\n3520\n3DE0\n3520\nENDCHAR\nSTARTCHAR U_6AE8\nENCODING 27368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2100\nFFE0\n2920\n3FC0\n2D20\n6BE0\nAAA0\n37E0\n2540\n2FE0\nENDCHAR\nSTARTCHAR U_6AE9\nENCODING 27369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\n2820\n6BA0\n7D20\nABA0\n2AA0\n2AA0\n2BA0\n2840\nENDCHAR\nSTARTCHAR U_6AEA\nENCODING 27370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2B60\nFA40\n2FE0\n3B40\n2EE0\n6A40\nA880\n2AE0\n3280\n2FE0\nENDCHAR\nSTARTCHAR U_6AEB\nENCODING 27371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF920\n27C0\n5940\n57E0\nBA40\n57C0\n9240\n27C0\nFFE0\n2480\nC460\nENDCHAR\nSTARTCHAR U_6AEC\nENCODING 27372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22E0\n2FA0\nF5E0\n22A0\n2FA0\n32E0\n6FA0\nA2E0\n2740\n2AC0\n2760\nENDCHAR\nSTARTCHAR U_6AED\nENCODING 27373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DE0\n5540\nFDE0\n5440\n7CC0\nD160\nDF80\n4880\n4F80\n4880\n5FE0\nENDCHAR\nSTARTCHAR U_6AEE\nENCODING 27374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\nF540\n27C0\n2100\n3FE0\n6540\nA540\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_6AEF\nENCODING 27375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4A40\nFFE0\n7540\n5540\nDFC0\nD560\n5560\n5F40\n5540\n6AC0\nENDCHAR\nSTARTCHAR U_6AF0\nENCODING 27376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\n2FE0\n2540\n3380\n6D40\nA320\n3D40\n2480\n2660\nENDCHAR\nSTARTCHAR U_6AF1\nENCODING 27377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA880\nFBE0\n4940\nCFE0\n7880\n4FE0\n7880\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_6AF2\nENCODING 27378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5CE0\n4540\nFBE0\n5EA0\n6BE0\nC900\nCAA0\n4940\n4AC0\n6960\n52A0\nENDCHAR\nSTARTCHAR U_6AF3\nENCODING 27379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n2E80\nFAE0\n2E20\n20E0\n3E80\n6AE0\nAE80\n2AE0\n2EA0\n2AE0\nENDCHAR\nSTARTCHAR U_6AF4\nENCODING 27380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5EE0\nE540\n5FE0\n7520\nDFE0\nC5A0\n4F60\n55E0\n6540\n4620\nENDCHAR\nSTARTCHAR U_6AF5\nENCODING 27381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nF540\n2FC0\n6900\n7FC0\nA900\n2FC0\n2540\n2AA0\n32A0\nENDCHAR\nSTARTCHAR U_6AF6\nENCODING 27382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF920\n27C0\n6100\n7FE0\nAAA0\n2FE0\n2540\n2CA0\n23A0\nENDCHAR\nSTARTCHAR U_6AF7\nENCODING 27383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n5FC0\nF040\n5DC0\n6500\nF5E0\nDD60\n75A0\n5DE0\n7500\n43E0\nENDCHAR\nSTARTCHAR U_6AF8\nENCODING 27384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2DE0\n2920\nFFE0\n2AA0\n2AA0\n3FE0\n6940\nB7A0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_6AF9\nENCODING 27385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\nF7E0\n2140\n37C0\n2D60\n6FE0\nA920\n2FE0\n2D60\n3560\nENDCHAR\nSTARTCHAR U_6AFA\nENCODING 27386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n7FE0\n2920\n3BA0\n2440\n6FE0\nAAA0\n2AA0\n2FE0\n2AA0\nENDCHAR\nSTARTCHAR U_6AFB\nENCODING 27387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nFFE0\n2920\n2FE0\n34A0\n6B40\nAFE0\n2480\n2380\n2C60\nENDCHAR\nSTARTCHAR U_6AFC\nENCODING 27388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2560\n2AC0\nFFE0\n2540\n2DC0\n3560\n6DC0\nA540\n2DE0\n2520\n2FA0\nENDCHAR\nSTARTCHAR U_6AFD\nENCODING 27389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5540\n67C0\n5040\n5FE0\n7540\n5BA0\n4400\nFFC0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_6AFE\nENCODING 27390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DC0\n5480\nF900\n4FC0\n7500\nDFE0\nC4A0\n56C0\n57A0\n5EA0\n4180\nENDCHAR\nSTARTCHAR U_6AFF\nENCODING 27391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2EE0\nF440\n2AA0\n6FE0\n7820\nA7C0\n2440\n2FE0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_6B00\nENCODING 27392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nFB40\n2FC0\n7500\n6FC0\nA500\n3FE0\n24A0\n2D40\n3620\nENDCHAR\nSTARTCHAR U_6B01\nENCODING 27393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n5F40\nF5E0\n5F40\n7540\nDFC0\nD0E0\n5F60\n5A40\n6940\n6C80\nENDCHAR\nSTARTCHAR U_6B02\nENCODING 27394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF2A0\n2BE0\n76A0\n6BE0\nAAA0\nBFE0\n2A40\n2940\n28C0\nENDCHAR\nSTARTCHAR U_6B03\nENCODING 27395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n2480\nFFE0\n2420\n27E0\n3C80\n67E0\nA4A0\n27E0\n22A0\n2CE0\nENDCHAR\nSTARTCHAR U_6B04\nENCODING 27396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\n2AA0\n3FE0\n6920\nAFE0\nAAA0\n2FE0\n2AA0\n2D60\nENDCHAR\nSTARTCHAR U_6B05\nENCODING 27397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5B60\n5220\nFF60\n5520\n7FE0\nC940\nD7A0\n6100\n4FC0\n4100\n4300\nENDCHAR\nSTARTCHAR U_6B06\nENCODING 27398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n27E0\nFD40\n27E0\n7540\n6FE0\nA000\n2780\n2480\n2300\n2CE0\nENDCHAR\nSTARTCHAR U_6B07\nENCODING 27399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\nF6C0\n2FE0\n7040\n7FE0\nAAA0\n2EE0\n2AA0\n3FE0\n2220\nENDCHAR\nSTARTCHAR U_6B08\nENCODING 27400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2FE0\nF500\n2FE0\n3500\n2FE0\n6500\nAFE0\n2AA0\n2EE0\n2BA0\nENDCHAR\nSTARTCHAR U_6B09\nENCODING 27401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\n26C0\nFFE0\n2280\n3FE0\n2100\n6FE0\nAAA0\n2E40\n2AA0\n3F20\nENDCHAR\nSTARTCHAR U_6B0A\nENCODING 27402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2240\nFEE0\n2AA0\n2FE0\n3480\n67E0\nBC80\n27E0\n2480\n27E0\nENDCHAR\nSTARTCHAR U_6B0B\nENCODING 27403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\n2AA0\n2FE0\n3900\n6FE0\nB900\n2FC0\n2900\n2FE0\nENDCHAR\nSTARTCHAR U_6B0C\nENCODING 27404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4FE0\nFA80\n57C0\n7480\nDFA0\nC4E0\n5FC0\n5540\n57A0\n4920\nENDCHAR\nSTARTCHAR U_6B0D\nENCODING 27405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\nF300\n2480\n77E0\n6C80\nA7E0\n2400\n2760\n2420\n27E0\nENDCHAR\nSTARTCHAR U_6B0E\nENCODING 27406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\nF5E0\n6AC0\nB5A0\nFFE0\n8020\n7C40\n47E0\n7D40\n5840\n64C0\nENDCHAR\nSTARTCHAR U_6B0F\nENCODING 27407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFFE0\n2940\n25E0\n7940\nAFE0\n2540\n3FE0\n2B40\n35E0\nENDCHAR\nSTARTCHAR U_6B10\nENCODING 27408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2000\nFEE0\n2AA0\n2FE0\n3AA0\n6FE0\nACA0\n2FC0\n34A0\n27E0\nENDCHAR\nSTARTCHAR U_6B11\nENCODING 27409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n2FE0\nF240\n2FE0\n2540\n3FE0\n6440\nA7C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_6B12\nENCODING 27410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n5FA0\nE0C0\n4E40\nA0A0\nEEE0\n4A40\nAAA0\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_6B13\nENCODING 27411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\nF4A0\n2FE0\n2AA0\n3FE0\n6100\nAFC0\n2100\n2FE0\n2AA0\nENDCHAR\nSTARTCHAR U_6B14\nENCODING 27412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\n2AA0\n7FE0\n67C0\nAD00\n27C0\n2480\n2300\n2CE0\nENDCHAR\nSTARTCHAR U_6B15\nENCODING 27413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\nFFE0\n5680\n7280\nDFE0\nD5A0\n5740\n5540\n5FA0\n6120\nENDCHAR\nSTARTCHAR U_6B16\nENCODING 27414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2B40\nFFE0\n2AA0\n3FE0\n2440\n67C0\nA440\n27C0\n22A0\n2CE0\nENDCHAR\nSTARTCHAR U_6B17\nENCODING 27415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2480\nFFE0\n2920\n2FE0\n3920\n6FE0\nAAA0\n2FE0\n2BA0\n2D60\nENDCHAR\nSTARTCHAR U_6B18\nENCODING 27416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nFFE0\n2940\n2FE0\n3AA0\n6FE0\nA920\n2BA0\n2960\n37E0\nENDCHAR\nSTARTCHAR U_6B19\nENCODING 27417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nF7C0\n2540\n2FE0\n3920\n6FE0\nA2A0\n2FC0\n2540\n2B20\nENDCHAR\nSTARTCHAR U_6B1A\nENCODING 27418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\n2480\nFFE0\n2540\n2B80\n2540\n7FE0\nAAA0\n3FE0\n2AA0\n3DE0\nENDCHAR\nSTARTCHAR U_6B1B\nENCODING 27419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n2920\n7540\n6AE0\nBFA0\n2AE0\n2EA0\n3EE0\n2520\nENDCHAR\nSTARTCHAR U_6B1C\nENCODING 27420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFFE0\n2A80\n3FE0\n7560\n7FC0\nA500\n2FE0\n2540\n2EA0\n3560\nENDCHAR\nSTARTCHAR U_6B1D\nENCODING 27421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A80\nF5E0\n6AC0\nD5A0\n7F80\n4A80\n7F80\n4880\n7FE0\n5280\n6D80\nENDCHAR\nSTARTCHAR U_6B1E\nENCODING 27422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nFFE0\n2AA0\n3540\n2FE0\n6AA0\nAFE0\n2540\n2BA0\n2FE0\nENDCHAR\nSTARTCHAR U_6B1F\nENCODING 27423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AE0\n5FA0\nEAE0\n5FA0\n75E0\nDFA0\nF4E0\n5E40\n54C0\n5EC0\n5160\nENDCHAR\nSTARTCHAR U_6B20\nENCODING 27424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n1FE0\n2020\n4440\n0400\n0400\n0600\n0900\n1080\n6060\nENDCHAR\nSTARTCHAR U_6B21\nENCODING 27425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n27E0\n0440\n2900\n2100\nC100\n4280\n4280\n4440\n1820\nENDCHAR\nSTARTCHAR U_6B22\nENCODING 27426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFBE0\n0A20\n8D40\n5100\n2100\n3100\n2A80\n4A80\n8440\n0820\nENDCHAR\nSTARTCHAR U_6B23\nENCODING 27427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n7200\n43E0\n7E20\n5540\n5100\n5100\n5280\n5280\n9440\n9820\nENDCHAR\nSTARTCHAR U_6B24\nENCODING 27428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7DE0\n4120\n7AC0\n0880\n3880\nC880\n0940\n0940\n3220\nENDCHAR\nSTARTCHAR U_6B25\nENCODING 27429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n97E0\n9420\nF940\n9100\n9100\n9280\nF280\n9440\n0820\nENDCHAR\nSTARTCHAR U_6B26\nENCODING 27430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n33E0\n4C20\nA540\n1100\nF900\n0A80\n1280\n1440\n2820\nENDCHAR\nSTARTCHAR U_6B27\nENCODING 27431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFD00\n81E0\nCA20\nAC80\n9080\n9080\nA880\nC940\n8240\nFC20\nENDCHAR\nSTARTCHAR U_6B28\nENCODING 27432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7DE0\n8520\n76C0\n5480\n5480\n7480\n0540\n1540\n0A20\nENDCHAR\nSTARTCHAR U_6B29\nENCODING 27433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFA00\n2BE0\n2A20\n4D40\n9100\n7900\n4A80\n4A80\n7A40\n0420\nENDCHAR\nSTARTCHAR U_6B2A\nENCODING 27434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA900\nABE0\nAA20\nFD40\n2100\nA900\nAA80\nAA80\nFC40\n0820\nENDCHAR\nSTARTCHAR U_6B2B\nENCODING 27435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n7BE0\n9420\nF940\n1100\n5D00\n5280\n5A80\nE440\n0820\nENDCHAR\nSTARTCHAR U_6B2C\nENCODING 27436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n1100\nFDE0\n2220\n4880\nF080\n2480\n4940\n1140\n2A20\nC420\nENDCHAR\nSTARTCHAR U_6B2D\nENCODING 27437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n8500\n95E0\nFE20\n94A0\n9480\nAC80\nC480\n8480\nFD40\n8620\nENDCHAR\nSTARTCHAR U_6B2E\nENCODING 27438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2900\nFFE0\n1220\n5540\n5500\n7D00\n1280\n1280\n2460\nC840\nENDCHAR\nSTARTCHAR U_6B2F\nENCODING 27439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\nFDE0\n1220\n7AC0\n0480\n7880\n4880\n4940\n7940\n4A20\nENDCHAR\nSTARTCHAR U_6B30\nENCODING 27440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4100\nFBE0\nAA20\nAD40\nA900\nA900\nAA80\nFA80\n0440\n0820\nENDCHAR\nSTARTCHAR U_6B31\nENCODING 27441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n51E0\n4A20\n84C0\n7880\n0080\n7880\n4940\n4940\n7A20\nENDCHAR\nSTARTCHAR U_6B32\nENCODING 27442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n4500\n91E0\n3220\n4880\n8480\n7880\n4880\n4940\n7A20\n0420\nENDCHAR\nSTARTCHAR U_6B33\nENCODING 27443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1D00\n11E0\nFEA0\nAA80\nAA80\nFE80\nAA80\nAB40\nAA20\n8620\nENDCHAR\nSTARTCHAR U_6B34\nENCODING 27444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n1100\nFBE0\n8C20\nF880\n8880\nF880\n9080\n9940\nEA20\n8C20\nENDCHAR\nSTARTCHAR U_6B35\nENCODING 27445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7200\n4BE0\n3A40\n4500\n7900\n9100\nF980\n3240\n4C60\n8840\nENDCHAR\nSTARTCHAR U_6B36\nENCODING 27446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFD00\n11E0\n7EA0\n54A0\n7C80\n1080\n3880\n5540\n9220\n1420\nENDCHAR\nSTARTCHAR U_6B37\nENCODING 27447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nCD00\n3100\nCDE0\n1220\nFCA0\n5080\nFC80\n5480\n5540\n5E20\n1420\nENDCHAR\nSTARTCHAR U_6B38\nENCODING 27448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\n4500\nFDE0\n4220\n7CA0\n9080\nFC80\n1080\n2940\n4620\n8420\nENDCHAR\nSTARTCHAR U_6B39\nENCODING 27449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFD00\n51E0\n8A20\nFCA0\n0880\nE880\nA880\nE940\n0A20\n1C20\nENDCHAR\nSTARTCHAR U_6B3A\nENCODING 27450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\nFD00\n49E0\n7A20\n48A0\n7880\n4880\nFE80\n2940\n4620\n8420\nENDCHAR\nSTARTCHAR U_6B3B\nENCODING 27451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\n5900\n51E0\nAA20\n52A0\n9480\n5880\n5080\nA940\n4620\n8420\nENDCHAR\nSTARTCHAR U_6B3C\nENCODING 27452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\nAA80\n45E0\nAA20\n10A0\nEE80\nAA80\n4480\n2940\n5620\nA220\nENDCHAR\nSTARTCHAR U_6B3D\nENCODING 27453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n5200\n8BE0\nF420\n2120\nF900\n2100\nA900\n7280\n2440\nF820\nENDCHAR\nSTARTCHAR U_6B3E\nENCODING 27454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFD00\n11E0\n7A20\n00A0\n7880\n0080\nFC80\n5540\n9240\n7420\nENDCHAR\nSTARTCHAR U_6B3F\nENCODING 27455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7D00\n45E0\n8A20\n20A0\nCE80\n8280\nEE80\n8280\nFF40\n8220\nENDCHAR\nSTARTCHAR U_6B40\nENCODING 27456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7D00\n39E0\n5620\n9280\n7C80\n0080\nFC80\n5940\n9560\n3240\nENDCHAR\nSTARTCHAR U_6B41\nENCODING 27457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\nFD00\n49E0\n7A20\n48A0\n7880\n4880\nFE80\nA880\nC540\nFE20\nENDCHAR\nSTARTCHAR U_6B42\nENCODING 27458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9280\n9280\nFEE0\n0120\nFE40\n1040\nFE40\nAA40\nAA40\nAAA0\n8720\nENDCHAR\nSTARTCHAR U_6B43\nENCODING 27459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0D00\nF100\n11E0\nFE20\n10A0\nF680\n9280\nFE80\n9280\nFF40\n8220\nENDCHAR\nSTARTCHAR U_6B44\nENCODING 27460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n4500\n75E0\n5620\nFEC0\n8280\nBA80\nAB40\nBB40\n8A20\n8420\nENDCHAR\nSTARTCHAR U_6B45\nENCODING 27461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF00\n2900\nFFE0\nAA20\nAAA0\nFE80\n1080\n7C80\n1140\nFE20\n4420\nENDCHAR\nSTARTCHAR U_6B46\nENCODING 27462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFD00\n49E0\n3220\nFCA0\n0080\n7880\n4940\n7940\n4A20\n7C20\nENDCHAR\nSTARTCHAR U_6B47\nENCODING 27463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8900\nF9E0\n8A20\nF8A0\n2080\n7C80\n9480\nAD40\nF620\n0C20\nENDCHAR\nSTARTCHAR U_6B48\nENCODING 27464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3900\n4500\nBBE0\n0020\nE2A0\nAA80\nEA80\nAA80\nEA80\nA340\nAE20\nENDCHAR\nSTARTCHAR U_6B49\nENCODING 27465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\nFF00\n29E0\nFF20\n2AA0\nFF80\n2A80\nFE80\n6C80\nAB40\nAA20\nENDCHAR\nSTARTCHAR U_6B4A\nENCODING 27466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFF00\n49E0\n7A20\n00A0\nFE80\n8280\nBA80\nAA80\nBB40\n8620\nENDCHAR\nSTARTCHAR U_6B4B\nENCODING 27467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4F00\n49E0\n7E20\n48A0\n5C80\n4A80\n5E80\n5480\n5540\nA620\nENDCHAR\nSTARTCHAR U_6B4C\nENCODING 27468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n0900\nE9E0\nAA20\nFE80\n0880\nE880\nA940\nE940\n0A20\n1C20\nENDCHAR\nSTARTCHAR U_6B4D\nENCODING 27469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nFA00\n8BE0\nFA20\n80A0\nFC80\n8080\nFC80\n5480\nAD40\nAA20\nENDCHAR\nSTARTCHAR U_6B4E\nENCODING 27470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFD00\n51E0\n2220\nF880\nA880\nFC80\n2080\nFD80\n5240\n8C20\nENDCHAR\nSTARTCHAR U_6B4F\nENCODING 27471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\nFF00\n49E0\nFE20\nA540\nFD00\n2100\nFA80\n2280\n3A40\nE460\nENDCHAR\nSTARTCHAR U_6B50\nENCODING 27472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n8100\nBDE0\nA620\nBCA0\n8080\nEE80\nAA80\nEE80\n8140\nFE20\nENDCHAR\nSTARTCHAR U_6B51\nENCODING 27473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3900\n2100\nFFE0\n9220\nFCA0\n9280\nFE80\nAA80\nFE80\n8940\n9A20\nENDCHAR\nSTARTCHAR U_6B52\nENCODING 27474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFE80\n28E0\nFF20\n92C0\nFE80\n9280\nBA80\nAB40\nBB40\n8620\nENDCHAR\nSTARTCHAR U_6B53\nENCODING 27475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7D00\n91E0\n7D20\n2A80\n7C80\nC880\n7D40\n4940\n7E20\n4420\nENDCHAR\nSTARTCHAR U_6B54\nENCODING 27476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1D00\n1100\nFFE0\n9220\nFCA0\n9280\n9E80\nAA80\nEE80\nA940\nFE20\nENDCHAR\nSTARTCHAR U_6B55\nENCODING 27477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFF00\n55E0\nFE20\n44A0\n7C80\n4480\n7C80\n4480\n7D40\nC620\nENDCHAR\nSTARTCHAR U_6B56\nENCODING 27478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFF00\n11E0\nFF20\n44A0\n7C80\n2880\nFE80\n4480\n7D40\n4620\nENDCHAR\nSTARTCHAR U_6B57\nENCODING 27479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C00\n1480\nFEE0\n1520\n7C80\nBA80\nD680\nFE80\nD6C0\nBB20\n9220\nENDCHAR\nSTARTCHAR U_6B58\nENCODING 27480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5500\n3900\n11E0\n6A20\n4480\nD580\n6E80\n4480\n4B40\nA940\n9220\nENDCHAR\nSTARTCHAR U_6B59\nENCODING 27481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\n4900\nFDE0\n0220\n7CA0\n4480\nFE80\nAA80\n6680\nBB40\n6620\nENDCHAR\nSTARTCHAR U_6B5A\nENCODING 27482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n7D00\n11E0\n7E20\n10C0\n5480\nFE80\n0140\n7D40\n4620\n7C20\nENDCHAR\nSTARTCHAR U_6B5B\nENCODING 27483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2900\n45E0\nFE20\n00A0\nEE80\nAA80\nEE80\n4540\n6D40\n9220\nENDCHAR\nSTARTCHAR U_6B5C\nENCODING 27484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\nAA80\nFEE0\n2120\n7EA0\nA280\nFA80\nAA80\nFA80\n2B40\nF420\nENDCHAR\nSTARTCHAR U_6B5D\nENCODING 27485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\nAA80\nFEE0\n1120\nFE80\n2880\nFC80\n1140\nFD40\n1260\n1440\nENDCHAR\nSTARTCHAR U_6B5E\nENCODING 27486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n8500\nFDE0\n8620\nFCA0\n5280\nFC80\n4A80\nFE80\n5540\nAA20\nENDCHAR\nSTARTCHAR U_6B5F\nENCODING 27487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5680\n9A80\n92E0\nFF20\nAAA0\nEE80\nAA80\nAA80\nFEC0\n2920\nC620\nENDCHAR\nSTARTCHAR U_6B60\nENCODING 27488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\nAA80\n44E0\nFF20\nAAA0\n4480\nAA80\nBA80\nEEC0\n8320\nFE20\nENDCHAR\nSTARTCHAR U_6B61\nENCODING 27489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\n4480\nEEE0\nAB20\nEE80\n5080\nFE80\n4880\n7D40\n4940\n7E20\nENDCHAR\nSTARTCHAR U_6B62\nENCODING 27490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0200\n0200\n1200\n13C0\n1200\n1200\n1200\n1200\n1200\n7FE0\nENDCHAR\nSTARTCHAR U_6B63\nENCODING 27491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n0400\n0400\n2400\n27C0\n2400\n2400\n2400\n2400\nFFE0\nENDCHAR\nSTARTCHAR U_6B64\nENCODING 27492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n1120\n5140\n5D80\n5100\n5100\n5100\n5120\n5D20\nE0E0\nENDCHAR\nSTARTCHAR U_6B65\nENCODING 27493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n27C0\n2400\n2400\nFFE0\n0400\n1440\n2480\n4100\n0600\nF800\nENDCHAR\nSTARTCHAR U_6B66\nENCODING 27494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n3D40\n0100\nFFE0\n0900\n2900\n2D00\n2900\n28A0\n2EA0\nF060\nENDCHAR\nSTARTCHAR U_6B67\nENCODING 27495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n17E0\n5100\n5BC0\n5240\n5280\n5180\n7900\nC280\n0C60\nENDCHAR\nSTARTCHAR U_6B68\nENCODING 27496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n23C0\n2200\n2200\nFFE0\n0200\n2200\n23C0\n2200\n5A00\n87E0\nENDCHAR\nSTARTCHAR U_6B69\nENCODING 27497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n27C0\n2400\nFFE0\n0480\n2440\n24A0\n4500\n0600\n0C00\n7000\nENDCHAR\nSTARTCHAR U_6B6A\nENCODING 27498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n1D80\nE460\n0400\n7FE0\n0400\n27C0\n2400\n2400\nFFE0\nENDCHAR\nSTARTCHAR U_6B6B\nENCODING 27499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n13E0\n1200\n5200\n5BE0\n5220\n53E0\n5200\n5A00\nE200\n03E0\nENDCHAR\nSTARTCHAR U_6B6C\nENCODING 27500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n27C0\n2400\nFFE0\n0000\n3F80\n2480\nFFE0\n2880\n2480\nC180\nENDCHAR\nSTARTCHAR U_6B6D\nENCODING 27501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n17C0\n5100\n5900\n57E0\n5040\n57E0\n5240\n5940\nE040\n41C0\nENDCHAR\nSTARTCHAR U_6B6E\nENCODING 27502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n13C0\n1200\n1200\nFFE0\n1080\n18E0\n5280\n5280\n5280\nFFE0\nENDCHAR\nSTARTCHAR U_6B6F\nENCODING 27503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n27C0\n2400\nFFE0\n5540\n4E40\n7FC0\n4E40\n5540\n64C0\n7FC0\nENDCHAR\nSTARTCHAR U_6B70\nENCODING 27504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n2940\nAD40\n6B40\n4A40\n9CC0\n1080\n5AC0\n5280\n7A80\nC7E0\nENDCHAR\nSTARTCHAR U_6B71\nENCODING 27505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n2FE0\nA100\nB7C0\nA540\nA7C0\nA100\nB7C0\nC100\n0FE0\nENDCHAR\nSTARTCHAR U_6B72\nENCODING 27506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2400\nFFE0\n0140\n7FE0\n4100\n7F40\n4B40\n54A0\n69A0\n9660\nENDCHAR\nSTARTCHAR U_6B73\nENCODING 27507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\n2400\n7FE0\n0240\n7FE0\n4200\n7D40\n4940\n5CA0\nAB60\n1A20\nENDCHAR\nSTARTCHAR U_6B74\nENCODING 27508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4880\n7FE0\n5DC0\n5AA0\n6880\n4200\n5200\n53C0\n9200\n3FE0\nENDCHAR\nSTARTCHAR U_6B75\nENCODING 27509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2100\nBFE0\nA000\nA7C0\nA540\nBEC0\nC540\n07C0\n0C60\nENDCHAR\nSTARTCHAR U_6B76\nENCODING 27510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n5F80\n5220\nFBE0\n3F80\n2480\n3F80\n2480\nFFE0\n8520\nBF60\nENDCHAR\nSTARTCHAR U_6B77\nENCODING 27511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4440\n5980\n4880\n7FE0\n4880\n5DC0\n6AA0\n53C0\n9200\nBFE0\nENDCHAR\nSTARTCHAR U_6B78\nENCODING 27512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\nF040\n93C0\nF840\n8FE0\nFCA0\n2080\nBBE0\nA2A0\nBAE0\nE080\nENDCHAR\nSTARTCHAR U_6B79\nENCODING 27513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0800\n0800\n0FC0\n1080\n1080\n2900\n4500\n0200\n0C00\nF000\nENDCHAR\nSTARTCHAR U_6B7A\nENCODING 27514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n07E0\n1400\n1FC0\n2080\n5100\n0A00\n0400\n1800\nE000\nENDCHAR\nSTARTCHAR U_6B7B\nENCODING 27515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1000\n1100\n1D20\n2540\n6580\n9500\n0900\n1120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_6B7C\nENCODING 27516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC60\n2380\n2080\n7880\n4FE0\nA880\n1080\n1080\n2080\n4080\n8080\nENDCHAR\nSTARTCHAR U_6B7D\nENCODING 27517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8C0\n2300\n2200\n3A00\n4BE0\nB280\n1280\n2280\n2480\n4480\n8880\nENDCHAR\nSTARTCHAR U_6B7E\nENCODING 27518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n23E0\n3EA0\n4AA0\n4AA0\nAAA0\n14A0\n1120\n2220\n4420\n80C0\nENDCHAR\nSTARTCHAR U_6B7F\nENCODING 27519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n21E0\n2120\n3A60\n4C00\nCBE0\n2A20\n1140\n1080\n2140\nC620\nENDCHAR\nSTARTCHAR U_6B80\nENCODING 27520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8C0\n2300\n2100\n7900\n4FE0\nA900\n1100\n1100\n2280\n4440\n8820\nENDCHAR\nSTARTCHAR U_6B81\nENCODING 27521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n2240\n3A40\n2A60\n4C00\nABE0\n1220\n1140\n2080\n4140\n8620\nENDCHAR\nSTARTCHAR U_6B82\nENCODING 27522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2240\n2240\n3BC0\n4A40\nAA40\n13C0\n1240\n2240\n4240\n8FE0\nENDCHAR\nSTARTCHAR U_6B83\nENCODING 27523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n47C0\n7540\n5540\n9540\n5FE0\n3100\n2280\n4440\n8820\nENDCHAR\nSTARTCHAR U_6B84\nENCODING 27524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFD80\n2240\n3AA0\n4D00\nAA40\n1080\n1120\n2240\n4080\n8300\nENDCHAR\nSTARTCHAR U_6B85\nENCODING 27525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7D00\n2500\n3FE0\n4900\nB100\n17C0\n2100\n4100\n8100\n1FE0\nENDCHAR\nSTARTCHAR U_6B86\nENCODING 27526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n2080\n2100\n3920\n4BE0\nC800\n2BE0\n1220\n1220\n23E0\nC220\nENDCHAR\nSTARTCHAR U_6B87\nENCODING 27527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n23E0\n2400\n3BC0\n4900\n6BE0\n9AA0\n14A0\n2920\n4220\n84C0\nENDCHAR\nSTARTCHAR U_6B88\nENCODING 27528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFB00\n2200\n2FE0\n3AA0\n4AA0\nAAA0\n1AA0\n2AA0\n4AA0\n8AA0\n1FE0\nENDCHAR\nSTARTCHAR U_6B89\nENCODING 27529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n23E0\n2420\n3BA0\n4AA0\nCBA0\n2AA0\n13A0\n22A0\n4020\n80C0\nENDCHAR\nSTARTCHAR U_6B8A\nENCODING 27530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n2500\n27C0\n3900\n4900\n4FE0\nB100\n1380\n2540\n4920\n8100\nENDCHAR\nSTARTCHAR U_6B8B\nENCODING 27531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\nF940\n27E0\n2100\n7900\n4FE0\nA900\n1140\n10A0\n2160\nC620\nENDCHAR\nSTARTCHAR U_6B8C\nENCODING 27532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n22A0\n3AA0\n4D40\n4AA0\nAAA0\n1FE0\n1100\n2100\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_6B8D\nENCODING 27533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0060\nFBA0\n22A0\n2140\n7BE0\n4840\nA880\n17E0\n1080\n2080\nC180\nENDCHAR\nSTARTCHAR U_6B8E\nENCODING 27534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n47E0\n4100\n7540\n5540\nDBA0\n3120\n1280\n2280\n4440\n9820\nENDCHAR\nSTARTCHAR U_6B8F\nENCODING 27535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\nF920\n27E0\n3900\n4D20\nAB40\n1180\n1340\n2540\n4920\n8300\nENDCHAR\nSTARTCHAR U_6B90\nENCODING 27536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n4100\n77C0\n5540\nD7C0\n2300\n2580\n4940\n9120\n0100\nENDCHAR\nSTARTCHAR U_6B91\nENCODING 27537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n27E0\n2100\n3BC0\n4A40\nAA40\n1BC0\n1280\n22A0\n44A0\n8860\nENDCHAR\nSTARTCHAR U_6B92\nENCODING 27538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2220\n23E0\n3800\n4BE0\nAA20\n1AA0\n12A0\n22A0\n4140\n8620\nENDCHAR\nSTARTCHAR U_6B93\nENCODING 27539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n2280\n2440\n3820\n4FC0\n4A40\nA940\n1540\n2480\n4100\n9FE0\nENDCHAR\nSTARTCHAR U_6B94\nENCODING 27540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n27C0\n2140\n3FE0\n4940\nCFE0\n3940\n1580\n2340\n4520\n9B20\nENDCHAR\nSTARTCHAR U_6B95\nENCODING 27541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF900\n47E0\n7440\n5280\n5FE0\nB000\n17C0\n2440\n47C0\n8440\nENDCHAR\nSTARTCHAR U_6B96\nENCODING 27542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n27E0\n2100\n3FC0\n4C40\nAFC0\n1440\n1740\n25C0\n4440\n9FE0\nENDCHAR\nSTARTCHAR U_6B97\nENCODING 27543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n27E0\n2280\n3540\n5FE0\nD540\n37C0\n1540\n27C0\n4120\n80E0\nENDCHAR\nSTARTCHAR U_6B98\nENCODING 27544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA40\n2FE0\n2240\n39A0\n4B60\n4A80\nABE0\n1E40\n2280\n4120\n8EE0\nENDCHAR\nSTARTCHAR U_6B99\nENCODING 27545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n2480\n27E0\n3C80\n4F60\n4820\nAFC0\n1440\n27C0\n4440\n87C0\nENDCHAR\nSTARTCHAR U_6B9A\nENCODING 27546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC40\n2280\n2FE0\n3920\n4FE0\n4920\nBFE0\n1100\n2FE0\n4100\n8100\nENDCHAR\nSTARTCHAR U_6B9B\nENCODING 27547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n2080\n2100\n7DE0\n5520\n55A0\nB540\n1DA0\n2320\n4000\n9FE0\nENDCHAR\nSTARTCHAR U_6B9C\nENCODING 27548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nFFE0\n4540\n75C0\n5400\n97E0\n5100\n2FE0\n4380\n8540\n1920\nENDCHAR\nSTARTCHAR U_6B9D\nENCODING 27549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n27C0\n7100\n5FE0\n9440\n5BA0\n2100\n4FE0\n8540\n1920\nENDCHAR\nSTARTCHAR U_6B9E\nENCODING 27550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2240\n27E0\n3C20\n47E0\nA420\n2FE0\n1420\n27E0\n4280\n8C60\nENDCHAR\nSTARTCHAR U_6B9F\nENCODING 27551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n2440\n27C0\n7440\n57C0\nD000\n3FE0\n1AA0\n2AA0\n4AA0\n9FE0\nENDCHAR\nSTARTCHAR U_6BA0\nENCODING 27552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n47C0\n4440\n77C0\n9440\n97C0\n5440\n2FE0\n2100\n4280\n8C60\nENDCHAR\nSTARTCHAR U_6BA1\nENCODING 27553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\n4820\n4780\n7400\n97E0\n5480\n2480\n2FE0\n4440\n8820\nENDCHAR\nSTARTCHAR U_6BA2\nENCODING 27554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n4FE0\n7A80\n5BE0\n5000\nDFE0\n3920\n17C0\n2540\n45C0\n8100\nENDCHAR\nSTARTCHAR U_6BA3\nENCODING 27555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n4FE0\n4280\n7100\n57C0\n5540\nBFE0\n1100\n27C0\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_6BA4\nENCODING 27556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n47E0\n4A40\n73C0\n5240\n9FE0\n5400\n17E0\n2AA0\n4520\n8240\nENDCHAR\nSTARTCHAR U_6BA5\nENCODING 27557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n2FE0\n2820\n37C0\n5100\n57C0\nB540\n17C0\n2540\n47C0\n8C60\nENDCHAR\nSTARTCHAR U_6BA6\nENCODING 27558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n47C0\n4440\n77C0\n5440\nD7E0\n3400\n17E0\n2AA0\n5560\n9540\nENDCHAR\nSTARTCHAR U_6BA7\nENCODING 27559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFC0\n40A0\n7FE0\n5A80\nDE80\nB480\n14C0\n2EC0\n5540\n8E60\nENDCHAR\nSTARTCHAR U_6BA8\nENCODING 27560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n4540\n7FE0\n5440\nD7C0\nB440\n27C0\n2440\n47C0\n8820\nENDCHAR\nSTARTCHAR U_6BA9\nENCODING 27561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF7E0\n44A0\n7E40\n5AA0\nD5A0\nBB40\n2FE0\n2380\n4540\n9920\nENDCHAR\nSTARTCHAR U_6BAA\nENCODING 27562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4100\n4FE0\n7820\n57C0\nD000\n37C0\n1440\n27C0\n4280\n8FE0\nENDCHAR\nSTARTCHAR U_6BAB\nENCODING 27563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\n4AA0\n4FE0\n7540\n57C0\nD540\n37C0\n1100\n2FE0\n4100\n8100\nENDCHAR\nSTARTCHAR U_6BAC\nENCODING 27564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2AA0\n2FE0\n7900\n4FE0\nAA80\n17C0\n1100\n2FE0\nC100\n0100\nENDCHAR\nSTARTCHAR U_6BAD\nENCODING 27565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4540\n47C0\n7540\n5FE0\nD000\n37C0\n1540\n27C0\n4540\n9FE0\nENDCHAR\nSTARTCHAR U_6BAE\nENCODING 27566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n4280\n4440\n7FE0\n5000\n5EE0\nB2A0\n1EE0\n2440\n4AA0\n9120\nENDCHAR\nSTARTCHAR U_6BAF\nENCODING 27567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n4FE0\n4820\n77C0\n5540\n57C0\nBC40\n17C0\n2440\n47C0\n8C60\nENDCHAR\nSTARTCHAR U_6BB0\nENCODING 27568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4100\n4FE0\n7AA0\n5FE0\nD440\n3740\n15C0\n2440\n47C0\n8C60\nENDCHAR\nSTARTCHAR U_6BB1\nENCODING 27569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFEC0\n44A0\n7FE0\nAA80\n7BA0\n2AA0\n3B80\n4AA0\n8F60\n3020\nENDCHAR\nSTARTCHAR U_6BB2\nENCODING 27570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEAC0\n55A0\n5FE0\n6A80\nBB80\nAAA0\n7BA0\n2A40\n3B60\n4AA0\n9F20\nENDCHAR\nSTARTCHAR U_6BB3\nENCODING 27571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n1100\n1100\n20E0\nC000\n3F80\n1100\n0A00\n0400\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_6BB4\nENCODING 27572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n8240\n8A60\nCC00\nB3E0\n9240\nAA40\nC980\n8180\nFE40\n0420\nENDCHAR\nSTARTCHAR U_6BB5\nENCODING 27573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1B80\n6280\n4280\n74E0\n4000\n77C0\n4440\n4280\nF100\n4280\n4C60\nENDCHAR\nSTARTCHAR U_6BB6\nENCODING 27574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2240\nFA40\n2460\n2000\nFFE0\n2240\n2140\n3980\nE240\n4420\nENDCHAR\nSTARTCHAR U_6BB7\nENCODING 27575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DC0\n4140\n7D40\n4660\n7C00\n47E0\n7D40\n4140\n7C80\n8540\n9A20\nENDCHAR\nSTARTCHAR U_6BB8\nENCODING 27576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFF40\n1140\n7D60\n0200\n7FE0\n5640\n7D40\n4080\n4140\n8620\nENDCHAR\nSTARTCHAR U_6BB9\nENCODING 27577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFB80\nA280\nBA80\nD2E0\n9400\nFBC0\n9240\nAA80\nC100\nFAE0\n0440\nENDCHAR\nSTARTCHAR U_6BBA\nENCODING 27578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nD9C0\n2140\nD940\n3220\n2800\nFBE0\n2140\n7140\nA880\n2940\n6220\nENDCHAR\nSTARTCHAR U_6BBB\nENCODING 27579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n2240\n7260\n0400\nFBC0\n8A40\n7140\n5480\n5940\n9620\nENDCHAR\nSTARTCHAR U_6BBC\nENCODING 27580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFD40\n1140\nFF60\n8400\n7BE0\n0140\n7940\n4A80\n4D40\n8220\nENDCHAR\nSTARTCHAR U_6BBD\nENCODING 27581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nCDC0\n3140\n4940\nFE60\n4000\n7BE0\nC940\n7940\n4880\n7940\n4A20\nENDCHAR\nSTARTCHAR U_6BBE\nENCODING 27582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n7680\n2A80\nFCE0\n1400\n7FC0\nCA40\n7A80\n4900\n4AE0\n7C40\nENDCHAR\nSTARTCHAR U_6BBF\nENCODING 27583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\n8540\nFD40\n8260\nA800\nFFE0\nA940\nFD40\n9880\nA540\nC620\nENDCHAR\nSTARTCHAR U_6BC0\nENCODING 27584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n59C0\n8940\nD940\n8A60\nFC00\n23E0\n2140\nF940\n2080\n3940\nC620\nENDCHAR\nSTARTCHAR U_6BC1\nENCODING 27585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEDC0\n8540\nDD40\n8560\nFE00\n03C0\nFD40\n1140\n1080\n1D40\nE220\nENDCHAR\nSTARTCHAR U_6BC2\nENCODING 27586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\n7D40\n1140\nFF60\n9200\nFFE0\n5140\n7D40\n1080\nFD40\n1220\nENDCHAR\nSTARTCHAR U_6BC3\nENCODING 27587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFF40\n4940\n7960\n0200\nFFE0\n8220\nBB40\nAA80\nBB40\n8E20\nENDCHAR\nSTARTCHAR U_6BC4\nENCODING 27588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\nFD40\nA940\nFB60\nA800\nFBE0\n2140\nFD40\n8880\nF940\n8A20\nENDCHAR\nSTARTCHAR U_6BC5\nENCODING 27589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFD40\n2940\nFE60\n2000\n57E0\nA940\n5D40\nAA80\n4940\n9220\nENDCHAR\nSTARTCHAR U_6BC6\nENCODING 27590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\n8140\nB940\nAA60\nB800\n81E0\nEE40\nAB40\nEE80\n8140\nFE20\nENDCHAR\nSTARTCHAR U_6BC7\nENCODING 27591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4DC0\n8540\nED40\n8760\nFC00\n93E0\n5540\nFF40\n3880\n5540\n9220\nENDCHAR\nSTARTCHAR U_6BC8\nENCODING 27592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nDEE0\nAAA0\nABA0\nEA00\nAEE0\nABA0\nAAA0\nEEA0\n2B40\n4AA0\n8B20\nENDCHAR\nSTARTCHAR U_6BC9\nENCODING 27593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\n9160\nFA00\n93C0\nA940\nFC80\n0140\n7FC0\n2480\n5540\nFFE0\nENDCHAR\nSTARTCHAR U_6BCA\nENCODING 27594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFE60\n13C0\n7D40\n5480\n7FC0\n5140\n9120\n7FC0\n5140\n5F40\nENDCHAR\nSTARTCHAR U_6BCB\nENCODING 27595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n2480\n2480\nFFE0\n2480\n2480\n7FE0\n0880\n1080\n2300\nENDCHAR\nSTARTCHAR U_6BCC\nENCODING 27596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n3F80\n2480\n2480\n2480\nFFE0\n4880\n4880\n4880\n7F80\n0080\nENDCHAR\nSTARTCHAR U_6BCD\nENCODING 27597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2880\n2480\n2080\nFFE0\n2880\n2480\n2080\n7FE0\n0080\n0300\nENDCHAR\nSTARTCHAR U_6BCE\nENCODING 27598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FC0\n4000\nBF80\n2480\nFFE0\n2480\n4880\n7FE0\n0080\n0300\nENDCHAR\nSTARTCHAR U_6BCF\nENCODING 27599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4000\n9F80\n1480\nFFE0\n2480\n2280\n7FE0\n0080\n0300\nENDCHAR\nSTARTCHAR U_6BD0\nENCODING 27600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n2480\n2480\nFFE0\n4880\n7FE0\n1080\n6300\nENDCHAR\nSTARTCHAR U_6BD1\nENCODING 27601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4880\n6AE0\n5FA0\nFAA0\n4AA0\n6AE0\n5A80\n7A20\n29E0\n1000\nENDCHAR\nSTARTCHAR U_6BD2\nENCODING 27602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n0400\nFFE0\n2480\nFFE0\n4480\n7FE0\n0300\nENDCHAR\nSTARTCHAR U_6BD3\nENCODING 27603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7FE0\n8100\nFA40\nABA0\nA800\nFEA0\nAAA0\nAAA0\nFAA0\n1420\nENDCHAR\nSTARTCHAR U_6BD4\nENCODING 27604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\n4240\n4280\n7B00\n4200\n4200\n4200\n5A20\n6220\n41E0\nENDCHAR\nSTARTCHAR U_6BD5\nENCODING 27605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4240\n7B80\n4220\n4A20\n71E0\n0400\nFFE0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_6BD6\nENCODING 27606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n7A80\n4320\n5A20\nE3E0\n0480\n5300\n5240\n94A0\n18A0\nEF80\nENDCHAR\nSTARTCHAR U_6BD7\nENCODING 27607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFA80\nAA80\nAAA0\nFBC0\nAA80\nAA80\nAA80\nFAA0\n8BA0\n02E0\nENDCHAR\nSTARTCHAR U_6BD8\nENCODING 27608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n7FC0\n4440\n7FC0\n0000\n4240\n7A80\n4320\nFA20\n43E0\nENDCHAR\nSTARTCHAR U_6BD9\nENCODING 27609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n7B80\n4220\nFBE0\n0000\nFFE0\n2240\n7A80\nCB20\n3220\nE1E0\nENDCHAR\nSTARTCHAR U_6BDA\nENCODING 27610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1E00\n2400\nFF80\n4080\n7FA0\n4220\n7FE0\n2480\n7F80\n0CA0\nF3E0\nENDCHAR\nSTARTCHAR U_6BDB\nENCODING 27611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\n7C00\n0400\n0780\n7C00\n0400\n07E0\nFC00\n0420\n0420\n03E0\nENDCHAR\nSTARTCHAR U_6BDC\nENCODING 27612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1880\n6080\n2080\n3880\nE1C0\n2AA0\n34A0\nE880\n22A0\n2120\n1FE0\nENDCHAR\nSTARTCHAR U_6BDD\nENCODING 27613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\nE040\n2080\n3B40\nE080\n2320\n3840\nE080\n2F20\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_6BDE\nENCODING 27614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n7B80\n4220\n79E0\n0380\n3C00\n0780\n7C00\n07A0\nFC20\n07E0\nENDCHAR\nSTARTCHAR U_6BDF\nENCODING 27615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1500\n2480\nC560\n0600\n7C00\n0780\n3C00\n07C0\n7C20\n03E0\nENDCHAR\nSTARTCHAR U_6BE0\nENCODING 27616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA20\n2BE0\n4A20\n9FC0\n0400\n7FC0\n0400\n7FC0\n0420\n03E0\nENDCHAR\nSTARTCHAR U_6BE1\nENCODING 27617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nE100\n2DE0\nF100\n27E0\n2C20\nF420\n27E0\n2420\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_6BE2\nENCODING 27618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nE280\n4FE0\n5AA0\nEAA0\n4CE0\n5820\nEFE0\n4820\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_6BE3\nENCODING 27619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n2940\n18C0\nE940\n3F80\n0800\n7F80\n0800\nFFA0\n0820\n07E0\nENDCHAR\nSTARTCHAR U_6BE4\nENCODING 27620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n28C0\n4700\n91C0\n2300\n49C0\nFF00\n0120\n2920\n28E0\n4820\n87E0\nENDCHAR\nSTARTCHAR U_6BE5\nENCODING 27621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3A00\nE3E0\n2420\n3BA0\nE2A0\n23A0\n3AA0\nE3A0\n2040\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_6BE6\nENCODING 27622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC40\n4B80\n4900\n7900\n4BC0\n7900\n4900\n4BC0\nFD20\n0920\n08E0\nENDCHAR\nSTARTCHAR U_6BE7\nENCODING 27623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n30C0\nC0A0\n4FE0\n44A0\nF4C0\n4FA0\n44A0\nF560\n4A00\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_6BE8\nENCODING 27624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A80\nF280\n23E0\n2480\nFBE0\n2140\n2140\nFA60\n2400\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_6BE9\nENCODING 27625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\n6540\n2380\n3900\nE7E0\n2100\n3B80\nE540\n2940\n2120\n1FE0\nENDCHAR\nSTARTCHAR U_6BEA\nENCODING 27626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nF240\n27A0\n2280\nFBC0\n2480\n27E0\nF880\n20A0\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_6BEB\nENCODING 27627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\nFFE0\n8220\n3C00\n0780\n3C00\n07A0\n7C20\n07E0\nENDCHAR\nSTARTCHAR U_6BEC\nENCODING 27628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n18C0\nE0A0\n27E0\n2080\nFCA0\n23C0\n22C0\nFCA0\n2180\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_6BED\nENCODING 27629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nFB00\n0100\n79E0\n4B00\n49E0\n7B00\n4900\n2920\n3D20\nC0E0\nENDCHAR\nSTARTCHAR U_6BEE\nENCODING 27630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\n2920\nF1A0\n2E80\n3700\nE1C0\n2700\n21C0\nAF20\n40E0\nENDCHAR\nSTARTCHAR U_6BEF\nENCODING 27631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0AA0\nF2C0\n2480\n2140\nFAA0\n22E0\n2480\nF980\n2260\n2420\n1FE0\nENDCHAR\nSTARTCHAR U_6BF0\nENCODING 27632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nF7E0\n2220\n2140\nFFE0\n2000\n23C0\nFA40\n23E0\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_6BF1\nENCODING 27633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n37C0\nCAC0\n4740\n7240\nCFC0\n7340\nC6C0\n4A40\n40A0\n3FE0\nENDCHAR\nSTARTCHAR U_6BF2\nENCODING 27634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\nABC0\n4480\nAA80\nABE0\nFE80\nAA80\nABE0\n4480\nAAA0\nAA60\nENDCHAR\nSTARTCHAR U_6BF3\nENCODING 27635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0800\n7FA0\n0820\nFFE0\n2100\nFFE0\n2100\nFFE0\n2120\n38E0\nENDCHAR\nSTARTCHAR U_6BF4\nENCODING 27636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1A80\nE280\n26E0\n3A80\nE6E0\n3A80\nE6E0\n2280\n22A0\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_6BF5\nENCODING 27637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n4BC0\nFC80\n1080\nFFE0\nA480\n4880\n93E0\n6880\n10A0\n6060\nENDCHAR\nSTARTCHAR U_6BF6\nENCODING 27638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nC240\n47C0\n7100\nCFE0\n7240\nCCA0\n4740\n40A0\n4720\n3FE0\nENDCHAR\nSTARTCHAR U_6BF7\nENCODING 27639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC20\n87C0\nFC80\n84E0\nFF80\n4880\n78E0\n4B80\n7880\n48A0\n7860\nENDCHAR\nSTARTCHAR U_6BF8\nENCODING 27640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\nE540\n47C0\n4540\nF7C0\n4100\n46A0\nFA20\n4BC0\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_6BF9\nENCODING 27641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n39E0\n4480\nBA80\n01E0\nEA80\nAA80\nEBE0\nAA80\nEAA0\nA2A0\nA660\nENDCHAR\nSTARTCHAR U_6BFA\nENCODING 27642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nC180\n4240\n75A0\nC800\n4EA0\n7AA0\nCEA0\n4A40\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_6BFB\nENCODING 27643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\nFF80\n2080\n7C80\n93E0\n7C80\n4480\n7FE0\n4480\n7CA0\n4C60\nENDCHAR\nSTARTCHAR U_6BFC\nENCODING 27644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF860\n8B80\nF880\n88E0\nFB80\n4080\nFCE0\nA780\nD4A0\nF4A0\n1860\nENDCHAR\nSTARTCHAR U_6BFD\nENCODING 27645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nE4A0\n25E0\n2CA0\nF7E0\n2C80\n27E0\nF480\n2BE0\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_6BFE\nENCODING 27646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4780\n7C80\n44E0\n7F80\n0080\nFCE0\nB780\n6CA0\nB4A0\n6C60\nENDCHAR\nSTARTCHAR U_6BFF\nENCODING 27647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4860\nFF80\n4880\nB4E0\nDF80\n3080\n48E0\nA780\n54A0\nA8A0\n3060\nENDCHAR\nSTARTCHAR U_6C00\nENCODING 27648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\n7D80\nD680\n7CE0\n1380\n7C80\n54E0\nFF80\n2480\n38A0\n6460\nENDCHAR\nSTARTCHAR U_6C01\nENCODING 27649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\nEFE0\n4280\n47C0\nF440\n47C0\n4440\nFFE0\n4280\n4460\n3FE0\nENDCHAR\nSTARTCHAR U_6C02\nENCODING 27650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\n11E0\nFEA0\n5440\n92A0\n3FE0\n2300\n3E00\n2380\n5E20\n83E0\nENDCHAR\nSTARTCHAR U_6C03\nENCODING 27651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\nFF80\n2880\n10E0\nFF80\n5480\n7CE0\n5780\nFEA0\n10A0\nFE60\nENDCHAR\nSTARTCHAR U_6C04\nENCODING 27652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC60\n2B80\nFC80\n54E0\n9380\nFC80\nB4E0\nCF80\nBCA0\nA4A0\nBC60\nENDCHAR\nSTARTCHAR U_6C05\nENCODING 27653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5500\nFFE0\n82A0\nBA40\nAAA0\n7FA0\n07C0\n7C00\n07C0\n7C20\n07E0\nENDCHAR\nSTARTCHAR U_6C06\nENCODING 27654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\nEFE0\n4AA0\n46C0\nFFE0\n4440\n47C0\nF440\n47C0\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_6C07\nENCODING 27655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1780\nE480\n4FC0\n4540\nF7C0\n4D60\n47C0\nF440\n47C0\n4460\n3FE0\nENDCHAR\nSTARTCHAR U_6C08\nENCODING 27656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\nFF80\nAA80\nBAE0\n8380\nFE80\n48E0\n7B80\n48A0\n48A0\nFC60\nENDCHAR\nSTARTCHAR U_6C09\nENCODING 27657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n4B80\n4880\nFCE0\nB780\nFC80\n10E0\nFF80\n38A0\n54A0\n9260\nENDCHAR\nSTARTCHAR U_6C0A\nENCODING 27658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3200\nDFE0\n4A40\nFBC0\n4840\n4FC0\nF480\n44A0\n4FE0\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_6C0B\nENCODING 27659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2860\nFF80\n2880\nFEE0\n8380\n7C80\nA8E0\n5980\n2CA0\nCAA0\n3160\nENDCHAR\nSTARTCHAR U_6C0C\nENCODING 27660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1B80\nE480\n4FC0\n4540\n77C0\nCAA0\n47C0\n7440\nC7C0\n4460\n3FE0\nENDCHAR\nSTARTCHAR U_6C0D\nENCODING 27661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE60\n9380\nFE80\n92E0\nFF80\n2880\n7EE0\nC980\n7EA0\n48A0\n7E60\nENDCHAR\nSTARTCHAR U_6C0E\nENCODING 27662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n5580\nFE80\nABE0\nFE80\n2080\nFFE0\nA280\n7CA0\n28A0\nFE60\nENDCHAR\nSTARTCHAR U_6C0F\nENCODING 27663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n7E00\n4400\n4400\n7FE0\n4400\n4400\n4200\n5220\n6120\n40E0\nENDCHAR\nSTARTCHAR U_6C10\nENCODING 27664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n7E00\n4400\n4400\n7FE0\n4200\n4200\n4900\n5120\n68A0\n4460\nENDCHAR\nSTARTCHAR U_6C11\nENCODING 27665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n4040\n7FC0\n4400\n4400\n7FE0\n4200\n4A20\n5120\n60E0\nENDCHAR\nSTARTCHAR U_6C12\nENCODING 27666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n7E00\n4240\n7FE0\n4900\n50A0\n6460\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_6C13\nENCODING 27667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2420\n2420\nFFE0\n4480\n47E0\n4480\n4480\n7CA0\n0560\n0620\nENDCHAR\nSTARTCHAR U_6C14\nENCODING 27668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FC0\n2000\n5F80\n8000\n3F00\n0100\n0120\n0120\n00A0\n0060\nENDCHAR\nSTARTCHAR U_6C15\nENCODING 27669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2000\n5F80\n8000\n3F80\n0080\n08A0\n08A0\n1060\n6020\nENDCHAR\nSTARTCHAR U_6C16\nENCODING 27670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3FE0\n4000\nBF80\n0080\n7E80\n1480\n16A0\n22A0\n4260\n8C20\nENDCHAR\nSTARTCHAR U_6C17\nENCODING 27671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2000\n5FC0\n8000\n7F80\n0280\n2480\n18A0\n2660\n4220\nENDCHAR\nSTARTCHAR U_6C18\nENCODING 27672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3FE0\n4000\n9F80\n0000\n3F80\n0080\n2480\n24A0\n2460\n4420\nENDCHAR\nSTARTCHAR U_6C19\nENCODING 27673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4000\nBF80\n0000\n7F80\n1080\n9280\n92A0\nFE60\n8220\nENDCHAR\nSTARTCHAR U_6C1A\nENCODING 27674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FE0\n4000\nBF80\n0000\n7F80\n0080\n2A80\n2AA0\n2A60\n4220\nENDCHAR\nSTARTCHAR U_6C1B\nENCODING 27675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4000\nFF80\n1480\n2280\n4180\nBEA0\n12A0\n2260\n4C20\nENDCHAR\nSTARTCHAR U_6C1C\nENCODING 27676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FC0\n4000\nBF80\n0000\nFF80\n2280\n3E80\n22A0\n2260\n3E20\nENDCHAR\nSTARTCHAR U_6C1D\nENCODING 27677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FE0\n8000\nFF80\n1080\nFE80\n9280\n9280\nAAA0\nC660\n8620\nENDCHAR\nSTARTCHAR U_6C1E\nENCODING 27678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FC0\n8000\nFF80\n0080\nFE80\n1080\nFE80\n92A0\nAA60\n8620\nENDCHAR\nSTARTCHAR U_6C1F\nENCODING 27679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FE0\n8000\n7F80\n2880\n7E80\n2A80\nFF80\n29A0\n4B60\n8820\nENDCHAR\nSTARTCHAR U_6C20\nENCODING 27680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4000\nBF80\n0880\n3E80\n2A80\n3EA0\n2AA0\n3E60\n0820\nENDCHAR\nSTARTCHAR U_6C21\nENCODING 27681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4000\nBF80\n2280\n5480\n0880\nF780\n08A0\n2460\n1820\nENDCHAR\nSTARTCHAR U_6C22\nENCODING 27682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FC0\n4000\nBF80\n0080\n7E80\n0C80\n13A0\nFEA0\n0860\n7F20\nENDCHAR\nSTARTCHAR U_6C23\nENCODING 27683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4000\nBF80\n0080\n4980\n2A80\nFFA0\n1CA0\n2A60\nC920\nENDCHAR\nSTARTCHAR U_6C24\nENCODING 27684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n4000\nBF80\n0080\nFE80\n9280\nFE80\n9280\nAAA0\nFE60\n8220\nENDCHAR\nSTARTCHAR U_6C25\nENCODING 27685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n4000\nBF80\n0080\nFE80\n2880\nFE80\nAAA0\nEEA0\n8260\nFE20\nENDCHAR\nSTARTCHAR U_6C26\nENCODING 27686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n4000\nBF80\n1080\nFE80\n2480\n7880\n1480\n68A0\n1460\nE320\nENDCHAR\nSTARTCHAR U_6C27\nENCODING 27687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n4000\nBF80\n4480\n2880\nFE80\n1080\n7CA0\n10A0\nFE60\n1020\nENDCHAR\nSTARTCHAR U_6C28\nENCODING 27688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n4000\nBF80\n1080\nFE80\n9280\nFF80\n2480\n38A0\n1660\nE120\nENDCHAR\nSTARTCHAR U_6C29\nENCODING 27689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\nBF80\n0080\nFF80\n2880\nA980\n6A80\n28A0\n2860\nFF20\nENDCHAR\nSTARTCHAR U_6C2A\nENCODING 27690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n4000\nBF80\n0880\n7E80\n0880\n3E80\n2280\n3EA0\n1560\nE720\nENDCHAR\nSTARTCHAR U_6C2B\nENCODING 27691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n4000\nBF80\n0080\nFE80\n5480\nA880\n5480\nFEA0\n1060\nFF20\nENDCHAR\nSTARTCHAR U_6C2C\nENCODING 27692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n4000\nBF80\n0080\nFF80\n2880\nEE80\n8280\nEEA0\n2860\nFF20\nENDCHAR\nSTARTCHAR U_6C2D\nENCODING 27693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FC0\n8000\n7F80\n2A80\n3E80\n2A80\n3E80\n1CA0\n2A60\nC920\nENDCHAR\nSTARTCHAR U_6C2E\nENCODING 27694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n4000\nBF80\n1280\n5480\nA880\n5480\n9280\n5480\nA8A0\nC660\nENDCHAR\nSTARTCHAR U_6C2F\nENCODING 27695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\nBF80\n0280\n3E80\n0280\nFF80\n4A80\n2CA0\n4A60\n9920\nENDCHAR\nSTARTCHAR U_6C30\nENCODING 27696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n4000\nBF80\n1080\n7E80\n1080\nFF80\n42A0\n7AA0\n5E60\n4220\nENDCHAR\nSTARTCHAR U_6C31\nENCODING 27697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FC0\n8000\nFF80\n2480\n3C80\n2480\n7E80\nAAA0\n5260\n2420\nENDCHAR\nSTARTCHAR U_6C32\nENCODING 27698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n4000\nBF80\n0080\n7C80\n4480\n7C80\n4480\nFEA0\nAA60\nFF20\nENDCHAR\nSTARTCHAR U_6C33\nENCODING 27699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\nBF80\n0080\n7C80\n5480\n5480\n6C80\nFEA0\nAA60\nFF20\nENDCHAR\nSTARTCHAR U_6C34\nENCODING 27700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0440\nF680\n1500\n1500\n2480\n2480\n4440\n9420\n0800\nENDCHAR\nSTARTCHAR U_6C35\nENCODING 27701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2000\n0000\n8000\n5000\n1000\n2000\nE000\n2000\n2000\n2000\nENDCHAR\nSTARTCHAR U_6C36\nENCODING 27702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0200\n0400\n04C0\n7500\n1600\n1500\n2500\n2480\n5460\n8800\nENDCHAR\nSTARTCHAR U_6C37\nENCODING 27703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4400\n2400\n04C0\nF500\n1600\n1500\n2480\n4460\n9440\n0800\nENDCHAR\nSTARTCHAR U_6C38\nENCODING 27704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n3C40\n0480\nF500\n1600\n2500\n2480\n4460\n9400\n0800\nENDCHAR\nSTARTCHAR U_6C39\nENCODING 27705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n1120\n1D40\n2580\n2540\n4920\n9120\n8500\n8220\n7FE0\nENDCHAR\nSTARTCHAR U_6C3A\nENCODING 27706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n4440\n2480\n2500\n1600\n2500\nC4C0\n0440\n1400\n0800\nENDCHAR\nSTARTCHAR U_6C3B\nENCODING 27707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n1100\n97E0\n5120\n2120\n2120\nC220\n4420\n4920\n50C0\nENDCHAR\nSTARTCHAR U_6C3C\nENCODING 27708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n7580\n1600\n2500\nD480\n0860\n0400\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_6C3D\nENCODING 27709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0600\n0900\n3080\nC260\n0200\n7B20\n0B40\n1280\n2240\nCA20\n0400\nENDCHAR\nSTARTCHAR U_6C3E\nENCODING 27710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\n0440\n8440\n4C40\n1440\n1580\nE400\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_6C3F\nENCODING 27711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n0F80\n9280\n5280\n2280\n2280\nC480\n44A0\n48A0\n5060\nENDCHAR\nSTARTCHAR U_6C40\nENCODING 27712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\n2100\n8100\n4100\n2100\n2100\nC100\n4100\n4100\n4700\nENDCHAR\nSTARTCHAR U_6C41\nENCODING 27713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8100\n5100\n1FE0\n2100\n2100\nC100\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_6C42\nENCODING 27714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n0440\nFFE0\n0400\n2480\n1500\n0E00\n1500\n2480\nC460\n0C00\nENDCHAR\nSTARTCHAR U_6C43\nENCODING 27715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2480\n8480\n5480\n1480\n2480\n2480\nC840\n4840\n5020\n5020\nENDCHAR\nSTARTCHAR U_6C44\nENCODING 27716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n2200\n8200\n4200\n1200\n2500\nC500\n4880\n4860\n5040\nENDCHAR\nSTARTCHAR U_6C45\nENCODING 27717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\n8200\n4200\n5400\n27C0\n2040\nC040\n4040\n4280\n4100\nENDCHAR\nSTARTCHAR U_6C46\nENCODING 27718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C00\n1200\n2580\nC460\n0440\n7E80\n1500\n1500\n2480\n5460\n8820\nENDCHAR\nSTARTCHAR U_6C47\nENCODING 27719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27E0\n8400\n5400\n1400\n2400\n2400\nC400\n4400\n4400\n47E0\nENDCHAR\nSTARTCHAR U_6C48\nENCODING 27720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27E0\n0020\n8020\n50A0\n2120\n2220\nCC20\n4020\n40A0\n4040\nENDCHAR\nSTARTCHAR U_6C49\nENCODING 27721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2FE0\n8440\n5440\n1440\n2280\n2280\nC100\n4280\n4440\n5820\nENDCHAR\nSTARTCHAR U_6C4A\nENCODING 27722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2FE0\n8440\n5540\n1540\n2280\n2280\nC100\n4280\n4440\n4820\nENDCHAR\nSTARTCHAR U_6C4B\nENCODING 27723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2400\n87E0\n5420\n1A20\n2120\n2120\nC020\n4020\n40A0\n4040\nENDCHAR\nSTARTCHAR U_6C4C\nENCODING 27724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n22A0\n82A0\n52A0\n12A0\n22A0\n22A0\nC2A0\n44A0\n44A0\n4820\nENDCHAR\nSTARTCHAR U_6C4D\nENCODING 27725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n8F80\n5280\n1280\n2680\n2380\nC2A0\n44A0\n4860\n5020\nENDCHAR\nSTARTCHAR U_6C4E\nENCODING 27726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\n2480\n8480\n4480\n1680\n2580\n2480\nC480\n44A0\n48A0\n50E0\nENDCHAR\nSTARTCHAR U_6C4F\nENCODING 27727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8100\n5FE0\n1100\n2100\n2100\nC280\n4280\n4440\n4820\nENDCHAR\nSTARTCHAR U_6C50\nENCODING 27728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n83E0\n5220\n1420\n2A40\n2140\nC080\n4100\n4600\n5800\nENDCHAR\nSTARTCHAR U_6C51\nENCODING 27729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2E00\n8200\n4200\n03E0\n2E00\n2200\nC200\n4220\n4220\n41E0\nENDCHAR\nSTARTCHAR U_6C52\nENCODING 27730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n8FE0\n5400\n1400\n2400\n2400\nC400\n4400\n4400\n47E0\nENDCHAR\nSTARTCHAR U_6C53\nENCODING 27731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FC0\n8080\n4100\n5100\n2FE0\n2100\nC100\n4100\n4500\n4200\nENDCHAR\nSTARTCHAR U_6C54\nENCODING 27732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\n8400\n5800\n17C0\n2080\n2100\nC200\n4420\n4420\n43E0\nENDCHAR\nSTARTCHAR U_6C55\nENCODING 27733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8100\n4920\n1920\n2920\n2920\nC920\n4920\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6C56\nENCODING 27734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0000\n0440\n7580\n1600\n2580\nC460\n1440\n0800\nENDCHAR\nSTARTCHAR U_6C57\nENCODING 27735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\n8100\n5100\n1FE0\n2100\n2100\nC100\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_6C58\nENCODING 27736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2E00\n8200\n5200\n2200\n3FE0\nC200\n4200\n4200\n4200\n0200\nENDCHAR\nSTARTCHAR U_6C59\nENCODING 27737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\n8100\n4100\n1FE0\n2100\n2100\nC100\n4100\n4100\n4700\nENDCHAR\nSTARTCHAR U_6C5A\nENCODING 27738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\n8200\n4200\n5FE0\n2400\n27C0\nC040\n4040\n4140\n4080\nENDCHAR\nSTARTCHAR U_6C5B\nENCODING 27739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2FC0\n8480\n5480\n1480\n2F80\n2480\nC4A0\n44A0\n4460\n4420\nENDCHAR\nSTARTCHAR U_6C5C\nENCODING 27740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n8440\n5440\n17C0\n2440\n2400\nC400\n4420\n4420\n43E0\nENDCHAR\nSTARTCHAR U_6C5D\nENCODING 27741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n0200\n9FE0\n5480\n2480\n2880\nCD00\n4300\n44C0\n5820\nENDCHAR\nSTARTCHAR U_6C5E\nENCODING 27742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n0400\nFFE0\n0400\n7C40\n1680\n1500\n2480\n5460\n8820\nENDCHAR\nSTARTCHAR U_6C5F\nENCODING 27743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\n8100\n5100\n1100\n2100\n2100\nC100\n4100\n5FE0\n4000\nENDCHAR\nSTARTCHAR U_6C60\nENCODING 27744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2500\n8500\n55C0\n1740\n2D40\n2540\nC5C0\n4520\n4420\n43E0\nENDCHAR\nSTARTCHAR U_6C61\nENCODING 27745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2000\n8000\n5FE0\n1400\n2400\n27C0\nC040\n4040\n4140\n4080\nENDCHAR\nSTARTCHAR U_6C62\nENCODING 27746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n0200\n9200\n5FC0\n2200\n4200\nC200\n4200\n5FE0\n4000\nENDCHAR\nSTARTCHAR U_6C63\nENCODING 27747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n07C0\n8440\n4840\n2080\n4080\nC100\n4280\n4440\n5820\nENDCHAR\nSTARTCHAR U_6C64\nENCODING 27748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2080\n8100\n5200\n17E0\n22A0\n24A0\nC920\n4220\n44A0\n4840\nENDCHAR\nSTARTCHAR U_6C65\nENCODING 27749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8100\n5100\n1FE0\n2440\n2280\nC100\n4380\n4460\n5820\nENDCHAR\nSTARTCHAR U_6C66\nENCODING 27750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2F00\n8900\n4900\n1FE0\n2900\n2900\nC920\n4AA0\n4C60\n4820\nENDCHAR\nSTARTCHAR U_6C67\nENCODING 27751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2480\n8480\n5480\n1FE0\n2480\n2480\nC480\n4480\n4880\n5080\nENDCHAR\nSTARTCHAR U_6C68\nENCODING 27752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2420\n8420\n5420\n17E0\n2420\n2420\nC420\n4420\n47E0\n4420\nENDCHAR\nSTARTCHAR U_6C69\nENCODING 27753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2000\n8FE0\n4820\n0820\n2FA0\n2820\nC820\n4820\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6C6A\nENCODING 27754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\n8100\n5100\n1100\n27C0\n2100\nC100\n4100\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_6C6B\nENCODING 27755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\n9FE0\n4480\n2480\n2FE0\n2480\nC480\n4480\n4880\n5080\nENDCHAR\nSTARTCHAR U_6C6C\nENCODING 27756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FC0\n0900\nFFE0\n1100\n6500\n0400\n76C0\n1500\n2480\nCC60\nENDCHAR\nSTARTCHAR U_6C6D\nENCODING 27757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n0FE0\n9920\n5920\n2AA0\n2C60\nC820\n4820\n4820\n4860\nENDCHAR\nSTARTCHAR U_6C6E\nENCODING 27758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2400\n07E0\n8820\n6420\n32A0\n2120\nC220\n4C20\n4020\n40C0\nENDCHAR\nSTARTCHAR U_6C6F\nENCODING 27759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n8FE0\n5200\n1200\n2480\n2480\nC900\n4940\n5220\n67E0\nENDCHAR\nSTARTCHAR U_6C70\nENCODING 27760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8100\n5FE0\n1100\n2100\n2280\nC280\n4640\n4940\n5020\nENDCHAR\nSTARTCHAR U_6C71\nENCODING 27761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2280\n8240\n5FE0\n1200\n2200\n2200\nC500\n4480\n4840\n5020\nENDCHAR\nSTARTCHAR U_6C72\nENCODING 27762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FC0\n2440\n8480\n55C0\n1440\n2440\n2640\nC980\n4900\n5280\n6C60\nENDCHAR\nSTARTCHAR U_6C73\nENCODING 27763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40E0\n2700\n8400\n5400\n17E0\n2420\n2640\nC940\n4880\n5140\n6620\nENDCHAR\nSTARTCHAR U_6C74\nENCODING 27764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n8FE0\n5100\n1100\n2180\n2140\nC100\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_6C75\nENCODING 27765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n2500\n8880\n5260\n2100\n2FC0\n4080\nC100\n4100\n4200\nENDCHAR\nSTARTCHAR U_6C76\nENCODING 27766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n8FE0\n5440\n1440\n2280\n2280\nC100\n4280\n4440\n5820\nENDCHAR\nSTARTCHAR U_6C77\nENCODING 27767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n03C0\n8440\n5440\n2A80\n4280\nC100\n4280\n4440\n5820\nENDCHAR\nSTARTCHAR U_6C78\nENCODING 27768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n8FE0\n5200\n13C0\n2240\n2240\nC440\n4440\n4940\n5080\nENDCHAR\nSTARTCHAR U_6C79\nENCODING 27769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n28A0\n8CA0\n5AA0\n1920\n2920\n2AA0\nCA60\n4C20\n4820\n4FE0\nENDCHAR\nSTARTCHAR U_6C7A\nENCODING 27770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n8FC0\n5240\n1240\n2FE0\n2200\nC300\n4480\n4840\n5020\nENDCHAR\nSTARTCHAR U_6C7B\nENCODING 27771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27C0\n8900\n5100\n1100\n2FE0\n2100\nC100\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_6C7C\nENCODING 27772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8900\n4FC0\n1100\n2100\n2FE0\nC100\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_6C7D\nENCODING 27773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n8800\n57C0\n1000\n2F80\n2080\nC080\n40A0\n4060\n4020\nENDCHAR\nSTARTCHAR U_6C7E\nENCODING 27774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2280\n8440\n4820\n17E0\n2240\n2240\nC240\n4440\n4540\n4880\nENDCHAR\nSTARTCHAR U_6C7F\nENCODING 27775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2040\n0280\n8100\n5FE0\n2120\n4100\nC100\n4100\n4100\n4300\nENDCHAR\nSTARTCHAR U_6C80\nENCODING 27776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1020\n1540\nF880\n3BE0\n38A0\n5480\n5480\n9280\n1080\n3180\nENDCHAR\nSTARTCHAR U_6C81\nENCODING 27777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2080\n8280\n5200\n1240\n2A20\n2A20\nD200\n4220\n4220\n41E0\nENDCHAR\nSTARTCHAR U_6C82\nENCODING 27778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2700\n8400\n5400\n17E0\n2480\n2480\nC480\n4480\n4880\n5080\nENDCHAR\nSTARTCHAR U_6C83\nENCODING 27779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4180\n2E00\n8200\n5200\n1FE0\n2200\n2200\nC500\n4500\n4880\n7060\nENDCHAR\nSTARTCHAR U_6C84\nENCODING 27780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\n8000\n5000\n1000\n2FE0\n2200\nC200\n4440\n4FE0\n4420\nENDCHAR\nSTARTCHAR U_6C85\nENCODING 27781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2000\n8000\n5FE0\n1280\n2280\n2280\nC280\n44A0\n44A0\n4860\nENDCHAR\nSTARTCHAR U_6C86\nENCODING 27782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n8FE0\n5000\n1780\n2480\n2480\nC480\n44A0\n48A0\n5060\nENDCHAR\nSTARTCHAR U_6C87\nENCODING 27783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2480\n8840\n5FE0\n1020\n2480\n2480\nC480\n44A0\n48A0\n5060\nENDCHAR\nSTARTCHAR U_6C88\nENCODING 27784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n8FE0\n4A40\n1200\n2300\n2500\nC500\n4520\n4920\n50E0\nENDCHAR\nSTARTCHAR U_6C89\nENCODING 27785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n8000\n5780\n1480\n2480\n2480\nC480\n44A0\n48A0\n5060\nENDCHAR\nSTARTCHAR U_6C8A\nENCODING 27786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF920\nAF40\n2380\n2540\n3540\n3920\n5300\n5020\n8FE0\nENDCHAR\nSTARTCHAR U_6C8B\nENCODING 27787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2240\n8FE0\n5200\n1300\n2300\n2500\nC500\n4520\n4920\n50E0\nENDCHAR\nSTARTCHAR U_6C8C\nENCODING 27788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8FE0\n5100\n1920\n2920\n2FE0\nC100\n4120\n4120\n40E0\nENDCHAR\nSTARTCHAR U_6C8D\nENCODING 27789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2200\n8200\n43E0\n1440\n2440\n2440\nCFC0\n4080\n4080\n5FE0\nENDCHAR\nSTARTCHAR U_6C8E\nENCODING 27790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2500\n8920\n5920\n2940\n2980\n2900\nCB00\n4D20\n4920\n48E0\nENDCHAR\nSTARTCHAR U_6C8F\nENCODING 27791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n2BE0\n88A0\n5EA0\n28A0\n28A0\n2AA0\nDCA0\n4920\n42A0\n4440\nENDCHAR\nSTARTCHAR U_6C90\nENCODING 27792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8100\n5FE0\n1380\n2380\n2540\nC540\n4920\n5120\n4100\nENDCHAR\nSTARTCHAR U_6C91\nENCODING 27793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FC0\n8240\n4240\n5240\n2FC0\n2440\nC440\n4440\n4440\n5FE0\nENDCHAR\nSTARTCHAR U_6C92\nENCODING 27794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23C0\n8440\n5940\n1080\n27C0\n2440\nC280\n4100\n4680\n5860\nENDCHAR\nSTARTCHAR U_6C93\nENCODING 27795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3AC0\n0B00\n1280\n6660\n0000\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_6C94\nENCODING 27796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n8100\n59E0\n1920\n2920\n2FE0\nC020\n4020\n40A0\n4040\nENDCHAR\nSTARTCHAR U_6C95\nENCODING 27797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2400\n87E0\n4AA0\n12A0\n24A0\n2920\nD120\n4220\n4CA0\n4040\nENDCHAR\nSTARTCHAR U_6C96\nENCODING 27798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8FE0\n5920\n1920\n2FE0\n2920\nC100\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_6C97\nENCODING 27799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n1100\n2480\nE4E0\n1500\n0E00\n1500\n64C0\n0C40\nENDCHAR\nSTARTCHAR U_6C98\nENCODING 27800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n2900\n8920\n4940\n1F80\n2900\n2900\nC900\n4B20\n4D20\n48E0\nENDCHAR\nSTARTCHAR U_6C99\nENCODING 27801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8540\n4520\n1520\n2900\n2120\nC040\n4080\n4300\n5C00\nENDCHAR\nSTARTCHAR U_6C9A\nENCODING 27802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8100\n5500\n15E0\n2500\n2500\nC500\n4500\n4500\n5FE0\nENDCHAR\nSTARTCHAR U_6C9B\nENCODING 27803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8100\n5FE0\n1920\n2920\n2920\nC920\n4960\n4100\n4100\nENDCHAR\nSTARTCHAR U_6C9C\nENCODING 27804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\n8480\n57E0\n1400\n27C0\n2440\nC440\n4840\n4840\n5040\nENDCHAR\nSTARTCHAR U_6C9D\nENCODING 27805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1080\n10A0\nF7C0\n3980\n31C0\n5AC0\n56A0\n92A0\n14A0\n3180\nENDCHAR\nSTARTCHAR U_6C9E\nENCODING 27806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2200\n8200\n4FC0\n1A40\n2A40\n4A40\nCA40\n4AC0\n4200\n4200\nENDCHAR\nSTARTCHAR U_6C9F\nENCODING 27807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2400\n07E0\n9820\n5220\n2220\n2520\nCFA0\n4020\n40A0\n4040\nENDCHAR\nSTARTCHAR U_6CA0\nENCODING 27808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2E80\n8A80\n4A80\n1A80\n2A80\n4A80\nCA40\n5240\n5220\n6220\nENDCHAR\nSTARTCHAR U_6CA1\nENCODING 27809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\n2480\n8480\n48E0\n1000\n2FC0\n2480\n4280\nC300\n4480\n5860\nENDCHAR\nSTARTCHAR U_6CA2\nENCODING 27810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FC0\n8840\n5840\n2FC0\n2A00\n4A00\nC900\n5100\n5080\n6060\nENDCHAR\nSTARTCHAR U_6CA3\nENCODING 27811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8FE0\n5100\n17C0\n2100\n2100\nCFE0\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_6CA4\nENCODING 27812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2800\n8840\n4A40\n1980\n2880\n2940\nCA20\n4C20\n4800\n4FE0\nENDCHAR\nSTARTCHAR U_6CA5\nENCODING 27813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2480\n8480\n57E0\n14A0\n24A0\n24A0\nC920\n4920\n52A0\n6440\nENDCHAR\nSTARTCHAR U_6CA6\nENCODING 27814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2300\n8480\n5840\n1020\n2440\n2480\nC700\n4420\n4420\n43E0\nENDCHAR\nSTARTCHAR U_6CA7\nENCODING 27815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\n8440\n5820\n17C0\n2440\n2440\nC580\n4420\n4420\n43E0\nENDCHAR\nSTARTCHAR U_6CA8\nENCODING 27816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n4FC0\n2840\n8CC0\n4AC0\n2940\n4940\nCAC0\n5440\n5020\n6020\nENDCHAR\nSTARTCHAR U_6CA9\nENCODING 27817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n2500\n8100\n5FE0\n1120\n2120\n22A0\nC2A0\n4420\n4820\n50C0\nENDCHAR\nSTARTCHAR U_6CAA\nENCODING 27818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2080\n87E0\n5420\n1420\n27E0\n2400\nC400\n4400\n4800\n5000\nENDCHAR\nSTARTCHAR U_6CAB\nENCODING 27819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n9FE0\n4200\n0FC0\n2200\n2700\nCA80\n5240\n6220\n4200\nENDCHAR\nSTARTCHAR U_6CAC\nENCODING 27820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n8FC0\n4200\n1FE0\n2200\n2700\nCA80\n5240\n6220\n4200\nENDCHAR\nSTARTCHAR U_6CAD\nENCODING 27821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2240\n9FE0\n4200\n1700\n2700\n2A80\nD240\n6220\n4200\n4200\nENDCHAR\nSTARTCHAR U_6CAE\nENCODING 27822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n8440\n5440\n17C0\n2440\n2440\nC7C0\n4440\n4440\n4FE0\nENDCHAR\nSTARTCHAR U_6CAF\nENCODING 27823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n76C0\n1500\n2480\nCC60\n0000\nFFE0\n0800\n3F80\nD080\n1F80\nENDCHAR\nSTARTCHAR U_6CB0\nENCODING 27824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2200\n8200\n5400\n27E0\n2C20\n5420\nC420\n4420\n47E0\n4420\nENDCHAR\nSTARTCHAR U_6CB1\nENCODING 27825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n8FE0\n5820\n1400\n24C0\n2700\nC400\n4420\n4420\n43E0\nENDCHAR\nSTARTCHAR U_6CB2\nENCODING 27826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n2FE0\n9000\n6200\n2BC0\n2E40\n3A40\nCAC0\n4A00\n4820\n47E0\nENDCHAR\nSTARTCHAR U_6CB3\nENCODING 27827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2040\n8040\n4F40\n0940\n2940\n2F40\nC040\n4040\n4140\n4080\nENDCHAR\nSTARTCHAR U_6CB4\nENCODING 27828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n8500\n4880\n3260\n2500\n4A40\nC480\n4100\n4200\n4C00\nENDCHAR\nSTARTCHAR U_6CB5\nENCODING 27829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2400\n0FE0\n8820\n5100\n2100\n4940\nD120\n4120\n4500\n4200\nENDCHAR\nSTARTCHAR U_6CB6\nENCODING 27830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2000\n8000\n5FE0\n1100\n2580\n2540\nC920\n5120\n4100\n4300\nENDCHAR\nSTARTCHAR U_6CB7\nENCODING 27831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2240\n8FE0\n5200\n13C0\n2240\n2640\nC580\n4980\n5240\n6420\nENDCHAR\nSTARTCHAR U_6CB8\nENCODING 27832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2500\n9FC0\n4540\n3FC0\n5500\n5FE0\nC520\n4520\n49C0\n5100\nENDCHAR\nSTARTCHAR U_6CB9\nENCODING 27833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8FE0\n4920\n1920\n2920\n2FE0\nC920\n4920\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6CBA\nENCODING 27834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n8920\n4920\n1FE0\n2920\n2920\nC920\n4920\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6CBB\nENCODING 27835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8200\n5440\n3FE0\n2020\nC7C0\n4440\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6CBC\nENCODING 27836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2220\n8220\n5420\n18C0\n2000\n27E0\nC420\n4420\n47E0\n4420\nENDCHAR\nSTARTCHAR U_6CBD\nENCODING 27837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n9FE0\n4200\n1200\n2FC0\n2840\nC840\n4840\n4FC0\n4840\nENDCHAR\nSTARTCHAR U_6CBE\nENCODING 27838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n83E0\n5200\n1200\n2FC0\n2840\nC840\n4840\n4FC0\n4840\nENDCHAR\nSTARTCHAR U_6CBF\nENCODING 27839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\n2480\n8480\n5480\n1860\n2000\n2FC0\nC840\n4840\n4840\n4FC0\nENDCHAR\nSTARTCHAR U_6CC0\nENCODING 27840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\n87A0\n5020\n1720\n2520\n2520\nC720\n4020\n40A0\n4040\nENDCHAR\nSTARTCHAR U_6CC1\nENCODING 27841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n8840\n5840\n1FC0\n2500\n2500\nC500\n4920\n4920\n50E0\nENDCHAR\nSTARTCHAR U_6CC2\nENCODING 27842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n8820\n4BA0\n1AA0\n2AA0\n2BA0\nC820\n4820\n4820\n4860\nENDCHAR\nSTARTCHAR U_6CC3\nENCODING 27843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2400\n87E0\n4820\n17A0\n24A0\n24A0\nC7A0\n4020\n4020\n40C0\nENDCHAR\nSTARTCHAR U_6CC4\nENCODING 27844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2540\n8540\n5FE0\n1540\n2540\n2540\nC5C0\n4400\n4400\n47E0\nENDCHAR\nSTARTCHAR U_6CC5\nENCODING 27845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n8920\n4920\n1920\n2920\n2AA0\nCC60\n4820\n4820\n4FE0\nENDCHAR\nSTARTCHAR U_6CC6\nENCODING 27846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2500\n87C0\n5900\n1100\n2FE0\n2100\nC100\n4280\n4440\n4820\nENDCHAR\nSTARTCHAR U_6CC7\nENCODING 27847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n2800\n9EE0\n4AA0\n1AA0\n2AA0\n2AA0\nCAA0\n4AA0\n5AE0\n64A0\nENDCHAR\nSTARTCHAR U_6CC8\nENCODING 27848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27C0\n0C80\nD500\n2300\n2480\n5A60\nC100\n4280\n4100\n4080\nENDCHAR\nSTARTCHAR U_6CC9\nENCODING 27849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n2080\n3F80\n2080\n3F80\n04C0\n7700\n1500\n2480\nCC60\nENDCHAR\nSTARTCHAR U_6CCA\nENCODING 27850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2200\n87E0\n5420\n1420\n27E0\n2420\nC420\n4420\n47E0\n4420\nENDCHAR\nSTARTCHAR U_6CCB\nENCODING 27851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n0200\n8A80\n6880\n3FE0\n4880\nC880\n4880\n4880\n5080\nENDCHAR\nSTARTCHAR U_6CCC\nENCODING 27852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n20A0\n8220\n5240\n1240\n2AA0\n2AA0\nD300\n4220\n4620\n49E0\nENDCHAR\nSTARTCHAR U_6CCD\nENCODING 27853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8FE0\n5100\n1380\n2380\n2540\nC920\n57E0\n4100\n4100\nENDCHAR\nSTARTCHAR U_6CCE\nENCODING 27854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n07E0\n8A00\n53C0\n2200\n2200\nC3E0\n4200\n4200\n4200\nENDCHAR\nSTARTCHAR U_6CCF\nENCODING 27855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2920\n8920\n4920\n0920\n2FE0\n2100\nC920\n4920\n4920\n4FE0\nENDCHAR\nSTARTCHAR U_6CD0\nENCODING 27856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E80\n2A80\n8BE0\n5CA0\n1AA0\n2AA0\n2AA0\nCEA0\n48A0\n4920\n4AC0\nENDCHAR\nSTARTCHAR U_6CD1\nENCODING 27857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\n89E0\n5AA0\n1EA0\n24A0\n24A0\nCAA0\n5F20\n41A0\n4240\nENDCHAR\nSTARTCHAR U_6CD2\nENCODING 27858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n2F80\n8A80\n5A80\n1A80\n2A80\n2A80\nCA40\n4AC0\n52A0\n5360\nENDCHAR\nSTARTCHAR U_6CD3\nENCODING 27859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E40\n2240\n8240\n4E40\n0840\n2E80\n2280\nC2A0\n4320\n4BE0\n4420\nENDCHAR\nSTARTCHAR U_6CD4\nENCODING 27860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2440\n8FE0\n5440\n1440\n2440\n27C0\nC440\n4440\n4440\n47C0\nENDCHAR\nSTARTCHAR U_6CD5\nENCODING 27861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n07C0\n8100\n4100\n0FE0\n2100\nC200\n4440\n4FA0\n4420\nENDCHAR\nSTARTCHAR U_6CD6\nENCODING 27862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2CE0\n8AA0\n4AA0\n1AA0\n2AA0\n2AA0\nCEE0\n4280\n4480\n4880\nENDCHAR\nSTARTCHAR U_6CD7\nENCODING 27863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\n8AA0\n5AA0\n1AA0\n2AA0\n2AE0\nCC20\n4820\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6CD8\nENCODING 27864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2E00\n0200\n9240\n4A80\n3FE0\n4200\nC200\n4200\n4A00\n4400\nENDCHAR\nSTARTCHAR U_6CD9\nENCODING 27865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\n8920\n4540\n0100\n3FE0\n2100\nC100\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_6CDA\nENCODING 27866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2280\n8A80\n4BA0\n1AC0\n2A80\n2A80\nCA80\n4AA0\n4BA0\n5C60\nENDCHAR\nSTARTCHAR U_6CDB\nENCODING 27867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40E0\n2F00\n8200\n5100\n1FE0\n2080\n2100\nC200\n4400\n4A00\n51E0\nENDCHAR\nSTARTCHAR U_6CDC\nENCODING 27868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2F00\n8900\n4900\n1FE0\n2900\n2900\nC880\n4AA0\n4D60\n4920\nENDCHAR\nSTARTCHAR U_6CDD\nENCODING 27869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2700\n8400\n47E0\n1480\n2480\n24C0\nC4A0\n4880\n4880\n5080\nENDCHAR\nSTARTCHAR U_6CDE\nENCODING 27870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n8FE0\n4820\n2000\n4FE0\n4100\nC100\n4100\n4100\n4300\nENDCHAR\nSTARTCHAR U_6CDF\nENCODING 27871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n8100\n4100\n29E0\n2900\n4900\nC900\n4900\n4900\n5FE0\nENDCHAR\nSTARTCHAR U_6CE0\nENCODING 27872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8280\n4440\n1920\n2080\n2FE0\nC040\n4280\n4100\n4080\nENDCHAR\nSTARTCHAR U_6CE1\nENCODING 27873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n2800\n8FC0\n5040\n2F40\n2940\n2F40\nC8C0\n4820\n4820\n47E0\nENDCHAR\nSTARTCHAR U_6CE2\nENCODING 27874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8FE0\n4920\n1900\n2FC0\n2840\nCA80\n4900\n5280\n6C60\nENDCHAR\nSTARTCHAR U_6CE3\nENCODING 27875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n8FE0\n4000\n2080\n2880\n2480\nC480\n4500\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_6CE4\nENCODING 27876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2880\n0C80\n8A80\n4880\n2A80\n4C80\nC980\n4140\n4240\n4C20\nENDCHAR\nSTARTCHAR U_6CE5\nENCODING 27877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n8820\n4FE0\n1800\n2A00\n2A60\nCB80\n5220\n5220\n61E0\nENDCHAR\nSTARTCHAR U_6CE6\nENCODING 27878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n0FC0\n8800\n5A00\n2F80\n2A80\nCAA0\n52A0\n54A0\n6860\nENDCHAR\nSTARTCHAR U_6CE7\nENCODING 27879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n2120\n8FE0\n5900\n1920\n2920\n2940\nCA80\n4CA0\n4960\n4220\nENDCHAR\nSTARTCHAR U_6CE8\nENCODING 27880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n8FE0\n5100\n1100\n2100\n27C0\nC100\n4100\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_6CE9\nENCODING 27881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2500\n87E0\n5900\n1100\n2100\n27C0\nC100\n4100\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_6CEA\nENCODING 27882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2420\n8420\n57E0\n1420\n2420\n27E0\nC420\n4420\n47E0\n4420\nENDCHAR\nSTARTCHAR U_6CEB\nENCODING 27883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n8FE0\n5100\n1200\n2440\n2F80\nC100\n4240\n4420\n4FE0\nENDCHAR\nSTARTCHAR U_6CEC\nENCODING 27884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n8FE0\n4820\n2080\n2280\n2280\nC440\n4440\n4820\n5020\nENDCHAR\nSTARTCHAR U_6CED\nENCODING 27885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2440\n8840\n4BE0\n3840\n2A40\n2940\nC940\n4840\n4940\n4880\nENDCHAR\nSTARTCHAR U_6CEE\nENCODING 27886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2920\n8540\n5100\n17C0\n2100\n2100\nCFE0\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_6CEF\nENCODING 27887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n8820\n4FE0\n1900\n2FE0\n2900\nC900\n48A0\n4AA0\n4C60\nENDCHAR\nSTARTCHAR U_6CF0\nENCODING 27888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n0800\nFFE0\n2480\n5540\n8E20\n1500\n6CC0\nENDCHAR\nSTARTCHAR U_6CF1\nENCODING 27889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8FC0\n4940\n2940\n2940\n3FE0\nC100\n4280\n4440\n5820\nENDCHAR\nSTARTCHAR U_6CF2\nENCODING 27890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n21E0\n8F00\n4900\n1900\n2FE0\n2320\nC520\n4960\n5100\n4100\nENDCHAR\nSTARTCHAR U_6CF3\nENCODING 27891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n8600\n4240\n3A80\n2B00\n4A80\nD240\n6220\n4200\n4600\nENDCHAR\nSTARTCHAR U_6CF4\nENCODING 27892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n7500\n1600\n2500\nC4C0\n0C00\n0000\n7FC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_6CF5\nENCODING 27893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0800\n1F80\n3080\nDF80\n0480\n7500\n1600\n2500\nC4E0\n0C00\nENDCHAR\nSTARTCHAR U_6CF6\nENCODING 27894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n1500\nFFE0\n8420\n0400\n7440\n1680\n1500\n2480\n5460\n8820\nENDCHAR\nSTARTCHAR U_6CF7\nENCODING 27895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2440\n8FE0\n5500\n1500\n2540\n2540\nC980\n4920\n5320\n64E0\nENDCHAR\nSTARTCHAR U_6CF8\nENCODING 27896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n21E0\n8100\n5FE0\n1820\n2FE0\n2800\nC800\n4800\n5000\n6000\nENDCHAR\nSTARTCHAR U_6CF9\nENCODING 27897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n8440\n4440\n17C0\n2440\n2440\nC7C0\n4000\n4000\n4FE0\nENDCHAR\nSTARTCHAR U_6CFA\nENCODING 27898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2F00\n8900\n5900\n1FE0\n2100\n2100\nC940\n4920\n5120\n4300\nENDCHAR\nSTARTCHAR U_6CFB\nENCODING 27899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n8400\n57E0\n1400\n27E0\n2020\nDFA0\n4020\n40A0\n4040\nENDCHAR\nSTARTCHAR U_6CFC\nENCODING 27900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2A80\n8A40\n5FE0\n1200\n27C0\n2440\nCA80\n4900\n5280\n6C60\nENDCHAR\nSTARTCHAR U_6CFD\nENCODING 27901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2480\n0300\n8480\n5A60\n2200\n4FC0\nC200\n5FE0\n4200\n4200\nENDCHAR\nSTARTCHAR U_6CFE\nENCODING 27902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2080\n8100\n5280\n1440\n2820\n27C0\nC100\n4100\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_6CFF\nENCODING 27903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n0FC0\n8840\n5FC0\n2C00\n2A40\nC980\n4880\n4A40\n4C20\nENDCHAR\nSTARTCHAR U_6D00\nENCODING 27904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27C0\n8440\n4640\n1540\n2FE0\n4640\nC540\n4440\n4840\n50C0\nENDCHAR\nSTARTCHAR U_6D01\nENCODING 27905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8100\n5100\n17C0\n2000\n27C0\nC440\n4440\n4440\n47C0\nENDCHAR\nSTARTCHAR U_6D02\nENCODING 27906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n0FE0\n8280\n5280\n2AC0\n2AA0\nD2A0\n4480\n4A80\n5100\nENDCHAR\nSTARTCHAR U_6D03\nENCODING 27907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n8FE0\n5400\n1500\n2520\n2B40\nC900\n5280\n6440\n4820\nENDCHAR\nSTARTCHAR U_6D04\nENCODING 27908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n8820\n5BA0\n1AA0\n2AA0\n2BA0\nC820\n4820\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6D05\nENCODING 27909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2200\n8FC0\n4A40\n0FC0\n2A40\n4A40\nDFE0\n4840\n4840\n48C0\nENDCHAR\nSTARTCHAR U_6D06\nENCODING 27910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9F80\n4100\n0200\n8240\n5B80\n0A80\n2A80\nD240\n6620\n4000\n5FE0\nENDCHAR\nSTARTCHAR U_6D07\nENCODING 27911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n8920\n5FE0\n1920\n2920\n2AA0\nCC60\n4820\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6D08\nENCODING 27912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2780\n8900\n4FE0\n1800\n2BC0\n2A40\nCA40\n4AC0\n5220\n63E0\nENDCHAR\nSTARTCHAR U_6D09\nENCODING 27913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2E00\n8800\n4FE0\n1800\n2800\n2BE0\nCA20\n5220\n5220\n63E0\nENDCHAR\nSTARTCHAR U_6D0A\nENCODING 27914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n3FE0\n8400\n4BE0\n1840\n2880\n2FE0\nC880\n4880\n4880\n4980\nENDCHAR\nSTARTCHAR U_6D0B\nENCODING 27915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n8FE0\n4100\n1100\n27C0\n2100\nC100\n4FE0\n4100\n4100\nENDCHAR\nSTARTCHAR U_6D0C\nENCODING 27916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F20\n2420\n84A0\n47A0\n09A0\n35A0\n22A0\nC2A0\n44A0\n4820\n5060\nENDCHAR\nSTARTCHAR U_6D0D\nENCODING 27917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2900\n8900\n4BC0\n1A40\n2A40\n2BC0\nC900\n4900\n4900\n4FE0\nENDCHAR\nSTARTCHAR U_6D0E\nENCODING 27918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2200\n87E0\n5420\n17E0\n2420\n2420\nC7E0\n4420\n4420\n47E0\nENDCHAR\nSTARTCHAR U_6D0F\nENCODING 27919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n8200\n5FE0\n1AA0\n2AA0\n2AA0\nCAA0\n4AA0\n4AA0\n4860\nENDCHAR\nSTARTCHAR U_6D10\nENCODING 27920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n2800\n9400\n45E0\n0840\n3840\n2840\nC840\n4840\n4940\n4880\nENDCHAR\nSTARTCHAR U_6D11\nENCODING 27921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2540\n8920\n5FE0\n1900\n2900\n2900\nC980\n4A80\n4A40\n4C20\nENDCHAR\nSTARTCHAR U_6D12\nENCODING 27922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2280\n8280\n5FE0\n1AA0\n2AA0\n2AE0\nCC20\n4820\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6D13\nENCODING 27923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n0200\n8FC0\n5A40\n2A40\n4AC0\nC700\n4A80\n5260\n4200\nENDCHAR\nSTARTCHAR U_6D14\nENCODING 27924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n8200\n5FE0\n2080\n1FE0\n2880\nC480\n4080\n4280\n4100\nENDCHAR\nSTARTCHAR U_6D15\nENCODING 27925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2500\n8880\n5FE0\n2880\n2F80\n4880\nCF80\n4880\n4880\n4980\nENDCHAR\nSTARTCHAR U_6D16\nENCODING 27926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n8FC0\n4000\n1FC0\n2200\n3FE0\nC200\n4500\n4880\n5060\nENDCHAR\nSTARTCHAR U_6D17\nENCODING 27927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2500\n87C0\n4900\n2100\n3FE0\n4280\nC280\n44A0\n48A0\n50E0\nENDCHAR\nSTARTCHAR U_6D18\nENCODING 27928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27A0\n8140\n5FE0\n1200\n27E0\n2A00\nD3E0\n4020\n4020\n40C0\nENDCHAR\nSTARTCHAR U_6D19\nENCODING 27929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2900\n8FC0\n5100\n2100\n3FE0\n2300\nC580\n4940\n5120\n4100\nENDCHAR\nSTARTCHAR U_6D1A\nENCODING 27930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27C0\n8C80\n5300\n1CE0\n2100\n3FE0\nC900\n4FE0\n4100\n4100\nENDCHAR\nSTARTCHAR U_6D1B\nENCODING 27931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27C0\n8440\n5A80\n1100\n2280\n2FE0\nC440\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6D1C\nENCODING 27932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n2900\n0600\n1980\nF0E0\n1F80\n0400\n75C0\n1600\n2500\nCCE0\nENDCHAR\nSTARTCHAR U_6D1D\nENCODING 27933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8820\n5100\n1FE0\n2240\n2440\nC280\n4300\n4480\n5860\nENDCHAR\nSTARTCHAR U_6D1E\nENCODING 27934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n8820\n5BA0\n1820\n2BA0\n2AA0\nCBA0\n4820\n4820\n4860\nENDCHAR\nSTARTCHAR U_6D1F\nENCODING 27935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8100\n5FE0\n1120\n2FE0\n2900\nCFE0\n4120\n4280\n4C60\nENDCHAR\nSTARTCHAR U_6D20\nENCODING 27936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2480\n8FC0\n5100\n1500\n27C0\n2900\nDFE0\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_6D21\nENCODING 27937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n0200\n8FC0\n6200\n2FE0\n4700\nCA80\n7240\n4220\n4200\nENDCHAR\nSTARTCHAR U_6D22\nENCODING 27938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2540\n8940\n5BE0\n1940\n2940\n2BC0\nC900\n4900\n4A00\n4C00\nENDCHAR\nSTARTCHAR U_6D23\nENCODING 27939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5240\n0A40\n8A80\n5FE0\n2200\n2700\nCA80\n5240\n6220\n4200\nENDCHAR\nSTARTCHAR U_6D24\nENCODING 27940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n0500\n8880\n57E0\n2200\nC200\n4F80\n4200\n4200\n5FC0\nENDCHAR\nSTARTCHAR U_6D25\nENCODING 27941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n8240\n5FE0\n1240\n2FC0\n2200\nCFC0\n4200\n5FE0\n4200\nENDCHAR\nSTARTCHAR U_6D26\nENCODING 27942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n4200\n0400\n8FC0\n5840\n2840\n2FC0\nC840\n4840\n4840\n4FC0\nENDCHAR\nSTARTCHAR U_6D27\nENCODING 27943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8200\n57C0\n1440\n2FC0\n3440\nC7C0\n4440\n4440\n44C0\nENDCHAR\nSTARTCHAR U_6D28\nENCODING 27944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n8FE0\n4080\n2440\n2860\n3480\nC300\n4300\n4480\n5860\nENDCHAR\nSTARTCHAR U_6D29\nENCODING 27945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n8A40\n4FC0\n1A40\n2FC0\n2240\nC280\n4120\n46A0\n5860\nENDCHAR\nSTARTCHAR U_6D2A\nENCODING 27946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\n8480\n5FE0\n0480\n2480\n3FE0\nC000\n4480\n4860\n5020\nENDCHAR\nSTARTCHAR U_6D2B\nENCODING 27947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n2200\n8FE0\n5AA0\n1AA0\n2AA0\n2AA0\nCAA0\n4AA0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_6D2C\nENCODING 27948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n8FC0\n5A40\n1BC0\n2D40\n2B40\nC940\n4940\n5220\n6420\nENDCHAR\nSTARTCHAR U_6D2D\nENCODING 27949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2800\n8BE0\n5880\n1880\n29C0\n2880\nC880\n4BE0\n4800\n4FE0\nENDCHAR\nSTARTCHAR U_6D2E\nENCODING 27950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2280\n8AA0\n56C0\n1280\n26C0\n2AA0\nC280\n44A0\n48A0\n5060\nENDCHAR\nSTARTCHAR U_6D2F\nENCODING 27951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF920\n2120\nFA20\n24C0\nFC00\n0440\n7680\n2500\n4480\n8C60\nENDCHAR\nSTARTCHAR U_6D30\nENCODING 27952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2800\n8800\n5FC0\n1840\n2840\n2FC0\nC800\n4800\n4800\n4FE0\nENDCHAR\nSTARTCHAR U_6D31\nENCODING 27953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2440\n8440\n57C0\n1440\n27C0\n2440\nC5E0\n5E40\n4040\n4040\nENDCHAR\nSTARTCHAR U_6D32\nENCODING 27954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2920\n8920\n5920\n0DA0\n2B60\n2920\nC920\n4920\n4920\n5020\nENDCHAR\nSTARTCHAR U_6D33\nENCODING 27955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2400\n9FE0\n4AA0\n2AA0\n2AA0\n2AA0\nC4A0\n46A0\n4AE0\n5100\nENDCHAR\nSTARTCHAR U_6D34\nENCODING 27956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n8FE0\n5280\n1280\n2FE0\n2280\nC280\n4480\n4880\n5080\nENDCHAR\nSTARTCHAR U_6D35\nENCODING 27957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n8820\n57A0\n14A0\n27A0\n24A0\nC7A0\n44A0\n4120\n40C0\nENDCHAR\nSTARTCHAR U_6D36\nENCODING 27958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n8820\n5520\n1AA0\n2AA0\n2DA0\nC8A0\n4FA0\n4120\n40C0\nENDCHAR\nSTARTCHAR U_6D37\nENCODING 27959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n8200\n5440\n17E0\n2120\n2100\nC7C0\n4100\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_6D38\nENCODING 27960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2540\n8540\n5100\n1FE0\n2280\n2280\nC280\n44A0\n48A0\n5060\nENDCHAR\nSTARTCHAR U_6D39\nENCODING 27961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2000\n8000\n57C0\n1440\n27C0\n2440\nC7C0\n4440\n4000\n5FE0\nENDCHAR\nSTARTCHAR U_6D3A\nENCODING 27962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\n8440\n5A80\n1100\n2200\n27E0\nCA20\n4220\n43E0\n4220\nENDCHAR\nSTARTCHAR U_6D3B\nENCODING 27963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2700\n8100\n5FE0\n1100\n2100\n27C0\nC440\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6D3C\nENCODING 27964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n8100\n5100\n1FE0\n2000\n2100\nC7C0\n4100\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_6D3D\nENCODING 27965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\n8440\n5820\n1780\n2000\n27C0\nC440\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6D3E\nENCODING 27966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2F00\n0860\n8B80\n5A80\n2AA0\n2AC0\nCA80\n4A40\n4A40\n5320\nENDCHAR\nSTARTCHAR U_6D3F\nENCODING 27967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8440\n5BA0\n1000\n2FE0\n2200\nC7C0\n4040\n4240\n4180\nENDCHAR\nSTARTCHAR U_6D40\nENCODING 27968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2280\n8FE0\n5AA0\n1AA0\n2FE0\n2AA0\nCAA0\n4AA0\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6D41\nENCODING 27969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5FE0\n0400\n8880\n5FC0\n2040\n2A80\nCA80\n4AA0\n4AA0\n5260\nENDCHAR\nSTARTCHAR U_6D42\nENCODING 27970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n87E0\n5100\n1100\n2FE0\n2100\nC280\n4280\n4440\n5820\nENDCHAR\nSTARTCHAR U_6D43\nENCODING 27971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8100\n5920\n1540\n2FE0\n2100\nC100\n4280\n4440\n4820\nENDCHAR\nSTARTCHAR U_6D44\nENCODING 27972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8400\n67C0\n2880\n8FC0\n5140\n2FE0\n4140\nCFC0\n4100\n4100\n4300\nENDCHAR\nSTARTCHAR U_6D45\nENCODING 27973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2240\n8FC0\n5200\n1FE0\n2200\n2240\nC280\n4120\n46A0\n5860\nENDCHAR\nSTARTCHAR U_6D46\nENCODING 27974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n2BE0\n0E40\n3980\nCE00\n0440\n7E80\n1500\n2500\n4480\n8C60\nENDCHAR\nSTARTCHAR U_6D47\nENCODING 27975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4460\n2F80\n8240\n53A0\n1CE0\n2000\n2FE0\nC280\n42A0\n44A0\n5860\nENDCHAR\nSTARTCHAR U_6D48\nENCODING 27976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n21E0\n8100\n57E0\n1420\n2520\n2520\nC520\n4280\n4460\n5820\nENDCHAR\nSTARTCHAR U_6D49\nENCODING 27977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8800\n4BE0\n2880\nABE0\n6AA0\n2AA0\n2AA0\nCAE0\n4880\n5080\n6080\nENDCHAR\nSTARTCHAR U_6D4A\nENCODING 27978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8FE0\n5920\n1920\n2920\n2FE0\nC100\n4140\n41E0\n5E20\nENDCHAR\nSTARTCHAR U_6D4B\nENCODING 27979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBE20\n62A0\n2AA0\nAAA0\n6AA0\n2AA0\n2AA0\nC8A0\n5420\n6220\n40E0\nENDCHAR\nSTARTCHAR U_6D4C\nENCODING 27980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2540\n0920\n9BE0\n6900\n2920\n4940\nC880\n49A0\n4A60\n4820\nENDCHAR\nSTARTCHAR U_6D4D\nENCODING 27981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\n8440\n5820\n17C0\n2000\n2FE0\nC200\n4440\n4FA0\n4420\nENDCHAR\nSTARTCHAR U_6D4E\nENCODING 27982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8480\n5300\n1480\n2860\n2480\nC480\n4480\n4880\n5080\nENDCHAR\nSTARTCHAR U_6D4F\nENCODING 27983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4820\n2420\n9EA0\n42A0\n0AA0\n24A0\n24A0\nCAA0\n5220\n6020\n4060\nENDCHAR\nSTARTCHAR U_6D50\nENCODING 27984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4FE0\n0440\n9280\n6FE0\n2800\n4800\nC800\n5000\n5000\n6000\nENDCHAR\nSTARTCHAR U_6D51\nENCODING 27985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n8200\n5FE0\n1500\n2FE0\n2100\nCFE0\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_6D52\nENCODING 27986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n2500\n81E0\n4280\n3C80\n2BE0\n2880\nCA80\n4C80\n4880\n4080\nENDCHAR\nSTARTCHAR U_6D53\nENCODING 27987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8FE0\n4A20\n1200\n2520\n2540\nCC80\n5440\n4520\n4600\nENDCHAR\nSTARTCHAR U_6D54\nENCODING 27988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2040\n87C0\n4040\n2FC0\n2080\n4FE0\nC880\n4480\n4080\n4180\nENDCHAR\nSTARTCHAR U_6D55\nENCODING 27989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n8840\n4FC0\n0900\n2880\n5240\nD120\n6000\n4200\n4100\nENDCHAR\nSTARTCHAR U_6D56\nENCODING 27990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2E00\n0A40\n8540\n5080\n2FE0\n4480\nC280\n4080\n4280\n4100\nENDCHAR\nSTARTCHAR U_6D57\nENCODING 27991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2240\n8FE0\n5200\n2AC0\n2700\n4A80\nF240\n4220\n4A00\n4400\nENDCHAR\nSTARTCHAR U_6D58\nENCODING 27992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n8FE0\n5840\n1B80\n2900\n2FC0\nC900\n4FC0\n5120\n60E0\nENDCHAR\nSTARTCHAR U_6D59\nENCODING 27993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n25C0\n9F00\n5500\n17E0\n2D40\n3540\nC540\n4540\n5640\n4A40\nENDCHAR\nSTARTCHAR U_6D5A\nENCODING 27994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2440\n8FA0\n5280\n1440\n2A20\n27C0\nCA80\n4100\n4280\n4C60\nENDCHAR\nSTARTCHAR U_6D5B\nENCODING 27995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n4500\n0A80\n9260\n6FC0\n2100\n4200\nCFC0\n4840\n4FC0\n4840\nENDCHAR\nSTARTCHAR U_6D5C\nENCODING 27996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2780\n8400\n57E0\n1480\n2480\n2480\nCFE0\n4280\n4440\n5820\nENDCHAR\nSTARTCHAR U_6D5D\nENCODING 27997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8480\n4440\n1FE0\n8600\n5680\n2740\n4A80\nCB20\n4AC0\n5320\n6DE0\nENDCHAR\nSTARTCHAR U_6D5E\nENCODING 27998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n8440\n57C0\n1100\n2100\n25E0\nC500\n4500\n4B00\n51E0\nENDCHAR\nSTARTCHAR U_6D5F\nENCODING 27999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n2900\n95E0\n5540\n1740\n3540\n3540\nD540\n5480\n5140\n5220\nENDCHAR\nSTARTCHAR U_6D60\nENCODING 28000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4CC0\n2300\n8CC0\n5200\n1FE0\n2500\n2FE0\nD520\n4520\n4560\n4100\nENDCHAR\nSTARTCHAR U_6D61\nENCODING 28001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8100\n5FE0\n1020\n27C0\n2080\nCFE0\n4100\n4100\n4300\nENDCHAR\nSTARTCHAR U_6D62\nENCODING 28002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2000\n87C0\n5440\n1440\n27C0\n2000\nC440\n4280\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_6D63\nENCODING 28003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8820\n5380\n1000\n2FE0\n2280\nC280\n42A0\n44A0\n4860\nENDCHAR\nSTARTCHAR U_6D64\nENCODING 28004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8820\n5200\n1FE0\n2400\n2500\nC900\n5240\n6240\n47A0\nENDCHAR\nSTARTCHAR U_6D65\nENCODING 28005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n87C0\n5000\n1FE0\n2920\n2FE0\nC800\n4820\n4820\n47E0\nENDCHAR\nSTARTCHAR U_6D66\nENCODING 28006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n2120\n8FE0\n5100\n1FE0\n2920\n2FE0\nC920\n4FE0\n4920\n4960\nENDCHAR\nSTARTCHAR U_6D67\nENCODING 28007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n8440\n57C0\n1000\n2FE0\n2100\nC7C0\n4100\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_6D68\nENCODING 28008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8820\n5100\n1FE0\n2100\n2380\nC340\n4540\n4920\n4100\nENDCHAR\nSTARTCHAR U_6D69\nENCODING 28009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2500\n87C0\n5900\n1100\n2FE0\n2000\nC7C0\n4440\n4440\n47C0\nENDCHAR\nSTARTCHAR U_6D6A\nENCODING 28010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n8840\n4FC0\n1840\n2FC0\n2A20\nC940\n4980\n4A80\n4C60\nENDCHAR\nSTARTCHAR U_6D6B\nENCODING 28011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n5020\n0480\n8840\n4FC0\n2200\n2200\nDFE0\n4200\n4200\n4200\nENDCHAR\nSTARTCHAR U_6D6C\nENCODING 28012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n8FE0\n5920\n1FE0\n2920\n2100\nCFE0\n4100\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_6D6D\nENCODING 28013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n8FE0\n5920\n1FE0\n2920\n2FE0\nC500\n4200\n4580\n5860\nENDCHAR\nSTARTCHAR U_6D6E\nENCODING 28014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2F20\n8A20\n5540\n17E0\n2080\n2100\nDFE0\n4100\n4500\n4200\nENDCHAR\nSTARTCHAR U_6D6F\nENCODING 28015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n8FC0\n5240\n1240\n2FE0\n2000\nC7C0\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6D70\nENCODING 28016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n2C20\n84A0\n5FA0\n14A0\n26A0\n2DA0\nD4A0\n6420\n4420\n44E0\nENDCHAR\nSTARTCHAR U_6D71\nENCODING 28017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FC0\n5000\n17C0\n9000\n5FE0\n3520\n5540\nD480\n5480\n6660\n4400\nENDCHAR\nSTARTCHAR U_6D72\nENCODING 28018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8800\n4FC0\n1880\n8700\n5AE0\n2F80\n4200\nCFC0\n4200\n5FE0\n4200\nENDCHAR\nSTARTCHAR U_6D73\nENCODING 28019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n22E0\n0F00\n90A0\n6FE0\n2840\n4FC0\nC840\n4FC0\n4840\n48C0\nENDCHAR\nSTARTCHAR U_6D74\nENCODING 28020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2440\n8920\n5280\n1440\n2820\n37C0\nC440\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6D75\nENCODING 28021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F20\n2940\n8D80\n4B20\n2940\n3F80\n2920\nC920\n4940\n5180\n6300\nENDCHAR\nSTARTCHAR U_6D76\nENCODING 28022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8820\n5500\n17C0\n2900\n2100\nCFE0\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_6D77\nENCODING 28023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n8800\n57C0\n1540\n2FE0\n2940\nC940\n4FE0\n4040\n4180\nENDCHAR\nSTARTCHAR U_6D78\nENCODING 28024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2040\n87C0\n5040\n1FE0\n2820\n27C0\nC280\n4100\n4280\n4C60\nENDCHAR\nSTARTCHAR U_6D79\nENCODING 28025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n8FE0\n4100\n0540\n2540\n2BA0\nC280\n4280\n4440\n4820\nENDCHAR\nSTARTCHAR U_6D7A\nENCODING 28026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2880\n8C80\n5BE0\n1AA0\n2AA0\n2BE0\nCAA0\n4880\n4880\n4880\nENDCHAR\nSTARTCHAR U_6D7B\nENCODING 28027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\n8AA0\n5C60\n1820\n2BA0\n2AA0\nCAA0\n4BA0\n4820\n48E0\nENDCHAR\nSTARTCHAR U_6D7C\nENCODING 28028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27C0\n8880\n5FC0\n0A40\n2A40\n2FC0\nC300\n4520\n4920\n50E0\nENDCHAR\nSTARTCHAR U_6D7D\nENCODING 28029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n2F80\n8920\n54A0\n1140\n2100\n2FE0\nC440\n4280\n4140\n4E20\nENDCHAR\nSTARTCHAR U_6D7E\nENCODING 28030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n87C0\n5100\n1FE0\n2280\n2AC0\nCAA0\n52A0\n4480\n4980\nENDCHAR\nSTARTCHAR U_6D7F\nENCODING 28031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n87C0\n5440\n1440\n27C0\n2440\nC7C0\n4280\n4440\n4820\nENDCHAR\nSTARTCHAR U_6D80\nENCODING 28032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n8FC0\n5840\n1FC0\n2840\n2FC0\nC280\n42A0\n44A0\n4860\nENDCHAR\nSTARTCHAR U_6D81\nENCODING 28033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2440\n9E80\n4540\n2C40\n2E80\n5520\nE420\n4440\n4480\n4500\nENDCHAR\nSTARTCHAR U_6D82\nENCODING 28034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\n8440\n5BA0\n1100\n2FE0\n2100\nC580\n4940\n5120\n4300\nENDCHAR\nSTARTCHAR U_6D83\nENCODING 28035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n8920\n5FE0\n1920\n2BA0\n2D60\nC920\n4920\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6D84\nENCODING 28036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n8540\n57C0\n1540\n2FE0\n2200\nC7C0\n4040\n4240\n4180\nENDCHAR\nSTARTCHAR U_6D85\nENCODING 28037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n87C0\n5440\n17C0\n2000\n2100\nC7C0\n4100\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_6D86\nENCODING 28038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n2E40\n8A40\n5A40\n1FE0\n2A40\n2A40\nCA40\n4E40\n4A40\n4040\nENDCHAR\nSTARTCHAR U_6D87\nENCODING 28039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2540\n8540\n5A80\n1540\n2540\n2FE0\nC100\n4100\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_6D88\nENCODING 28040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2540\n8100\n57E0\n1420\n27E0\n2420\nC7E0\n4420\n4420\n4460\nENDCHAR\nSTARTCHAR U_6D89\nENCODING 28041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n85E0\n5500\n1FE0\n2100\n2520\nC940\n5080\n4100\n4E00\nENDCHAR\nSTARTCHAR U_6D8A\nENCODING 28042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2120\n8520\n5520\n1B20\n24C0\n2100\nCAC0\n4A20\n5260\n43C0\nENDCHAR\nSTARTCHAR U_6D8B\nENCODING 28043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8820\n5180\n1140\n2FE0\n2100\nC100\n4280\n4440\n5820\nENDCHAR\nSTARTCHAR U_6D8C\nENCODING 28044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2280\n0100\n8FE0\n4920\n1FE0\n2920\nCFE0\n4920\n4920\n4860\nENDCHAR\nSTARTCHAR U_6D8D\nENCODING 28045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FA0\n8140\n5FE0\n1100\n2FE0\n2480\nCFE0\n4100\n4500\n4200\nENDCHAR\nSTARTCHAR U_6D8E\nENCODING 28046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5C20\n25C0\n8440\n4960\n1D40\n2540\n2540\nD5E0\n4800\n5600\n61E0\nENDCHAR\nSTARTCHAR U_6D8F\nENCODING 28047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8060\n5D80\n0480\n8880\n5FE0\n2480\n4480\nDBE0\n4C00\n4A00\n51E0\nENDCHAR\nSTARTCHAR U_6D90\nENCODING 28048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2CC0\n84A0\n5FE0\n1480\n26A0\n2CA0\nD4A0\n4440\n44A0\n4D20\nENDCHAR\nSTARTCHAR U_6D91\nENCODING 28049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8100\n5FE0\n1920\n2FE0\n2100\nC380\n4540\n4920\n5120\nENDCHAR\nSTARTCHAR U_6D92\nENCODING 28050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2240\n8FE0\n5240\n1FC0\n2200\n27C0\nCC40\n5440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6D93\nENCODING 28051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n87C0\n5000\n1FE0\n2820\n2FE0\nC820\n4FE0\n4820\n48E0\nENDCHAR\nSTARTCHAR U_6D94\nENCODING 28052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2920\n8FE0\n5100\n1280\n2540\n28A0\nCFC0\n4040\n4080\n4100\nENDCHAR\nSTARTCHAR U_6D95\nENCODING 28053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n8FC0\n5140\n1FC0\n2900\n2FE0\nC320\n4520\n4940\n5100\nENDCHAR\nSTARTCHAR U_6D96\nENCODING 28054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n4880\n17E0\nB000\n5440\n3240\n5240\nD280\n5080\n5FE0\n5000\nENDCHAR\nSTARTCHAR U_6D97\nENCODING 28055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\n8840\n57E0\n1440\n2440\n27C0\nC280\n42A0\n44A0\n5860\nENDCHAR\nSTARTCHAR U_6D98\nENCODING 28056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2440\n8FA0\n5400\n17E0\n2900\n2FE0\nC100\n4280\n4440\n4820\nENDCHAR\nSTARTCHAR U_6D99\nENCODING 28057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n8840\n5FC0\n2900\n2FE0\n4900\nC900\n5280\n5460\n6840\nENDCHAR\nSTARTCHAR U_6D9A\nENCODING 28058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2500\n8FC0\n5840\n2840\n2FC0\n4500\nC520\n4520\n4920\n50E0\nENDCHAR\nSTARTCHAR U_6D9B\nENCODING 28059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FE0\n8200\n5FC0\n1200\n2FE0\n2440\nC7E0\n4A40\n5140\n4080\nENDCHAR\nSTARTCHAR U_6D9C\nENCODING 28060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8100\n47C0\n2000\n3FE0\n5020\nC480\n44A0\n48A0\n5060\nENDCHAR\nSTARTCHAR U_6D9D\nENCODING 28061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n8280\n5FE0\n1820\n2200\n2FC0\nC240\n4240\n4540\n5880\nENDCHAR\nSTARTCHAR U_6D9E\nENCODING 28062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8920\n5540\n1380\n2FE0\n2100\nC380\n4540\n4920\n5120\nENDCHAR\nSTARTCHAR U_6D9F\nENCODING 28063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n2BE0\n8900\n5280\n17E0\n3880\n2BE0\nC880\n4880\n5400\n63E0\nENDCHAR\nSTARTCHAR U_6DA0\nENCODING 28064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n8FE0\n5920\n1FA0\n2920\n2FE0\nC960\n49A0\n4920\n4FE0\nENDCHAR\nSTARTCHAR U_6DA1\nENCODING 28065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n8440\n57C0\n1100\n2FE0\n2920\nCAA0\n4C60\n4820\n48E0\nENDCHAR\nSTARTCHAR U_6DA2\nENCODING 28066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n8FC0\n5000\n2FC0\n2840\n4940\nC940\n4280\n4460\n5820\nENDCHAR\nSTARTCHAR U_6DA3\nENCODING 28067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23C0\n8480\n57C0\n1D40\n2540\n2540\nDFE0\n4280\n4440\n4820\nENDCHAR\nSTARTCHAR U_6DA4\nENCODING 28068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27C0\n8A40\n5180\n1E60\n2100\n2FE0\nC100\n4540\n4920\n5320\nENDCHAR\nSTARTCHAR U_6DA5\nENCODING 28069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0000\n87C0\n5440\n27C0\n2000\nCFC0\n4080\n4100\n4300\nENDCHAR\nSTARTCHAR U_6DA6\nENCODING 28070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n2220\n8820\n5BA0\n1920\n2BA0\n2920\nC920\n4FE0\n4820\n48E0\nENDCHAR\nSTARTCHAR U_6DA7\nENCODING 28071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n2220\n8820\n5BA0\n1AA0\n2BA0\n2AA0\nCBA0\n4AA0\n4820\n48E0\nENDCHAR\nSTARTCHAR U_6DA8\nENCODING 28072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5D00\n2520\n8540\n5D80\n1100\n33E0\n5D80\nC540\n4540\n45A0\n5920\nENDCHAR\nSTARTCHAR U_6DA9\nENCODING 28073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2120\n8520\n5520\n12A0\n2C40\n2100\nC5C0\n4500\n4500\n5FE0\nENDCHAR\nSTARTCHAR U_6DAA\nENCODING 28074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8440\n5280\n1FE0\n2000\n27C0\nC440\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6DAB\nENCODING 28075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8820\n57C0\n1440\n27C0\n2400\nC7E0\n4420\n47E0\n4420\nENDCHAR\nSTARTCHAR U_6DAC\nENCODING 28076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n8100\n5FE0\n1440\n2280\n2FE0\nC100\n4FE0\n4100\n4100\nENDCHAR\nSTARTCHAR U_6DAD\nENCODING 28077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n81C0\n5E40\n0A80\n9FE0\n5020\n2FC0\n4440\nC280\n4100\n4680\n5860\nENDCHAR\nSTARTCHAR U_6DAE\nENCODING 28078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F20\n31A0\n9FA0\n54A0\n14A0\n3FA0\n34A0\nD4A0\n55A0\n5420\n64E0\nENDCHAR\nSTARTCHAR U_6DAF\nENCODING 28079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2800\n8880\n5BE0\n1880\n2FE0\n2880\nCBE0\n4880\n5080\n6FE0\nENDCHAR\nSTARTCHAR U_6DB0\nENCODING 28080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2EE0\n0AA0\n8440\n6AA0\n2000\n4EE0\nCAA0\n4440\n4AA0\n5120\nENDCHAR\nSTARTCHAR U_6DB1\nENCODING 28081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2400\n2780\n8400\n5780\n2400\n7FE0\nC520\n4540\n4480\n4660\nENDCHAR\nSTARTCHAR U_6DB2\nENCODING 28082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8280\n52E0\n1520\n2DA0\n3640\nC540\n4480\n4540\n4620\nENDCHAR\nSTARTCHAR U_6DB3\nENCODING 28083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8820\n5280\n1440\n2820\n27C0\nC100\n4100\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_6DB4\nENCODING 28084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8820\n5400\n1EE0\n2AA0\n36A0\nC2C0\n44A0\n44A0\n5860\nENDCHAR\nSTARTCHAR U_6DB5\nENCODING 28085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2040\n8080\n5100\n1D60\n2BA0\n2B20\nCDA0\n4960\n4A20\n4FE0\nENDCHAR\nSTARTCHAR U_6DB6\nENCODING 28086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2E00\n8200\n5FE0\n2A40\n3FE0\n4A40\nCA40\n5FE0\n4200\n4FC0\nENDCHAR\nSTARTCHAR U_6DB7\nENCODING 28087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8100\n57C0\n1540\n27C0\n2540\nC7C0\n4100\n4780\n5960\nENDCHAR\nSTARTCHAR U_6DB8\nENCODING 28088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n8920\n5FE0\n1920\n2BA0\n2AA0\nCBA0\n4820\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6DB9\nENCODING 28089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n4200\n1FE0\n8680\n5A60\n2200\n5FE0\nC480\n4900\n4700\n58C0\nENDCHAR\nSTARTCHAR U_6DBA\nENCODING 28090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n8FE0\n5880\n1FE0\n2880\n2BE0\nCA20\n4A20\n53E0\n6220\nENDCHAR\nSTARTCHAR U_6DBB\nENCODING 28091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\n8440\n5BA0\n1100\n2FE0\n2100\nC7C0\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6DBC\nENCODING 28092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n8FE0\n5000\n17C0\n2440\n27C0\nC100\n4540\n4920\n5320\nENDCHAR\nSTARTCHAR U_6DBD\nENCODING 28093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2F80\n8900\n5FE0\n1880\n2E60\n27C0\nC440\n47C0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_6DBE\nENCODING 28094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4120\n2F40\n8380\n5540\n1920\n2300\n2FC0\nC840\n4FC0\n4840\n4FC0\nENDCHAR\nSTARTCHAR U_6DBF\nENCODING 28095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2200\n8620\n5940\n1680\n24C0\n2BA0\nD2A0\n44A0\n5C80\n4300\nENDCHAR\nSTARTCHAR U_6DC0\nENCODING 28096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8820\n5000\n1FE0\n2100\n25E0\nC500\n4500\n4B00\n51E0\nENDCHAR\nSTARTCHAR U_6DC1\nENCODING 28097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n0880\n8500\n5FE0\n2200\n5FE0\nC480\n4D00\n4300\n5CC0\nENDCHAR\nSTARTCHAR U_6DC2\nENCODING 28098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n87C0\n5440\n17C0\n2000\n27E0\nC080\n5FE0\n4880\n4580\nENDCHAR\nSTARTCHAR U_6DC3\nENCODING 28099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9240\n4A80\n1FC0\n8200\n5FE0\n2480\n4FE0\nD480\n45A0\n4420\n43E0\nENDCHAR\nSTARTCHAR U_6DC4\nENCODING 28100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2540\n8A80\n5A80\n1540\n2540\n2FE0\nC920\n4FE0\n4920\n4FE0\nENDCHAR\nSTARTCHAR U_6DC5\nENCODING 28101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n25C0\n8500\n5F00\n15E0\n2740\n2D40\nD540\n4540\n4540\n4640\nENDCHAR\nSTARTCHAR U_6DC6\nENCODING 28102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n46C0\n2100\n86C0\n5FE0\n1200\n27C0\n2C40\nD7C0\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6DC7\nENCODING 28103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3FE0\n8480\n5780\n1480\n2780\n2480\nDFE0\n4480\n4860\n5020\nENDCHAR\nSTARTCHAR U_6DC8\nENCODING 28104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n8FE0\n5880\n1AA0\n2AA0\n2BE0\nC880\n4AA0\n52A0\n73E0\nENDCHAR\nSTARTCHAR U_6DC9\nENCODING 28105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n8FE0\n5920\n1FE0\n2100\n2FE0\nC380\n4540\n4920\n5120\nENDCHAR\nSTARTCHAR U_6DCA\nENCODING 28106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23C0\n8440\n5880\n1200\n2CE0\n2820\nCEE0\n4820\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6DCB\nENCODING 28107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2880\n9FE0\n4880\n2880\n3DC0\n2AA0\nCAA0\n4880\n4880\n4880\nENDCHAR\nSTARTCHAR U_6DCC\nENCODING 28108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2540\n8100\n5FE0\n1820\n2BA0\n2AA0\nCBA0\n4AA0\n4820\n48E0\nENDCHAR\nSTARTCHAR U_6DCD\nENCODING 28109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n8BA0\n5920\n1FE0\n2820\n2BA0\nCAA0\n4BA0\n5020\n60E0\nENDCHAR\nSTARTCHAR U_6DCE\nENCODING 28110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n0200\n9FC0\n6400\n3FE0\n4A80\nD7C0\n6220\n5FC0\n4200\nENDCHAR\nSTARTCHAR U_6DCF\nENCODING 28111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n87C0\n5440\n17C0\n2000\n2FE0\nC100\n4FE0\n4280\n5C60\nENDCHAR\nSTARTCHAR U_6DD0\nENCODING 28112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n07C0\n9440\n57C0\n2000\n2FE0\nC820\n4FE0\n4820\n4FE0\nENDCHAR\nSTARTCHAR U_6DD1\nENCODING 28113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n24E0\n07A0\n94A0\n5FA0\n24A0\n2EA0\nD5A0\n6540\n44A0\n4D20\nENDCHAR\nSTARTCHAR U_6DD2\nENCODING 28114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0140\n9FE0\n5140\n27C0\n2100\nDFE0\n4480\n4380\n4E60\nENDCHAR\nSTARTCHAR U_6DD3\nENCODING 28115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n2FE0\n0240\n9100\n5FE0\n2200\n23C0\nC240\n4240\n4540\n5880\nENDCHAR\nSTARTCHAR U_6DD4\nENCODING 28116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n97C0\n5440\n27C0\n2440\nC740\n45C0\n4440\n5FE0\nENDCHAR\nSTARTCHAR U_6DD5\nENCODING 28117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n0100\n9FE0\n5480\n2440\n2920\nD100\n47C0\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_6DD6\nENCODING 28118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n21E0\n0100\n97C0\n5440\n27C0\n2440\nC7C0\n4100\n4FE0\n4100\nENDCHAR\nSTARTCHAR U_6DD7\nENCODING 28119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n0A20\n8A60\n56A0\n22A0\n2FE0\nC320\n46A0\n4A60\n52C0\nENDCHAR\nSTARTCHAR U_6DD8\nENCODING 28120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n0C20\n97A0\n5A20\n2FE0\n2220\nCAA0\n4FA0\n4020\n40C0\nENDCHAR\nSTARTCHAR U_6DD9\nENCODING 28121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0820\n97C0\n5000\n2FE0\n2100\nC540\n4540\n4920\n5320\nENDCHAR\nSTARTCHAR U_6DDA\nENCODING 28122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0820\n8FE0\n5940\n2920\n2FE0\nC900\n4980\n5260\n6C20\nENDCHAR\nSTARTCHAR U_6DDB\nENCODING 28123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n34A0\n1EA0\n94A0\n5FA0\n24A0\n3FA0\nD5A0\n5520\n5720\n4460\nENDCHAR\nSTARTCHAR U_6DDC\nENCODING 28124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n0AA0\n9EE0\n5AA0\n2AA0\n2EE0\nCAA0\n4AA0\n52A0\n6760\nENDCHAR\nSTARTCHAR U_6DDD\nENCODING 28125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n32A0\n1EA0\n92A0\n53E0\n3E00\n3200\nD200\n5220\n5220\n6DE0\nENDCHAR\nSTARTCHAR U_6DDE\nENCODING 28126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2940\n1D40\n8A20\n4AA0\n2C80\n3A80\nC940\n4920\n4FE0\n4A20\nENDCHAR\nSTARTCHAR U_6DDF\nENCODING 28127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2280\n0FE0\n9AA0\n5FE0\n2AA0\n2AA0\nDFE0\n4280\n4460\n5820\nENDCHAR\nSTARTCHAR U_6DE0\nENCODING 28128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n0FE0\n8920\n5FE0\n2000\n3FE0\nC240\n4240\n4440\n4840\nENDCHAR\nSTARTCHAR U_6DE1\nENCODING 28129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2540\n0980\n8280\n5440\n2920\n2540\nC580\n4900\n4280\n5C60\nENDCHAR\nSTARTCHAR U_6DE2\nENCODING 28130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n20A0\n0FE0\n9080\n5E80\n2AA0\n2EA0\nC0C0\n46A0\n5960\n4620\nENDCHAR\nSTARTCHAR U_6DE3\nENCODING 28131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2CE0\n0820\n9EE0\n5820\n2FE0\n2280\nC280\n42A0\n44A0\n5860\nENDCHAR\nSTARTCHAR U_6DE4\nENCODING 28132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\n2440\n1EA0\n8920\n5E00\n2A80\n2A60\nCA20\n4A80\n5260\n6620\nENDCHAR\nSTARTCHAR U_6DE5\nENCODING 28133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2880\n0F80\n9100\n5FE0\n2920\n2540\nC380\n4540\n5920\n4300\nENDCHAR\nSTARTCHAR U_6DE6\nENCODING 28134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n2480\n0840\n97A0\n5100\n2100\n2FE0\nC100\n4920\n4540\n5FE0\nENDCHAR\nSTARTCHAR U_6DE7\nENCODING 28135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n2FE0\n8820\n5240\n2540\n5480\nD540\n4620\n4C40\n53C0\nENDCHAR\nSTARTCHAR U_6DE8\nENCODING 28136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2F40\n0A40\n9480\n5FC0\n2240\n2FE0\nC240\n4FC0\n4200\n4600\nENDCHAR\nSTARTCHAR U_6DE9\nENCODING 28137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n0100\n9FE0\n5280\n2440\n2BE0\nC640\n4980\n4240\n4C20\nENDCHAR\nSTARTCHAR U_6DEA\nENCODING 28138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n2480\n0840\n97A0\n5000\n2FE0\n2AA0\nCFE0\n4AA0\n4AA0\n4860\nENDCHAR\nSTARTCHAR U_6DEB\nENCODING 28139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2F20\n0920\n9540\n5060\n2F80\n2100\nDFE0\n4100\n4100\n4FC0\nENDCHAR\nSTARTCHAR U_6DEC\nENCODING 28140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0240\n9240\n55A0\n2900\n2100\nCFE0\n4100\n4100\n4100\nENDCHAR\nSTARTCHAR U_6DED\nENCODING 28141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0820\n9FE0\n5900\n2FE0\n2900\nCB80\n5540\n5920\n6100\nENDCHAR\nSTARTCHAR U_6DEE\nENCODING 28142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2480\n07E0\n9C80\n57E0\n2480\n2480\nC7E0\n4480\n4480\n47E0\nENDCHAR\nSTARTCHAR U_6DEF\nENCODING 28143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0240\n97E0\n5000\n27C0\n2440\nC7C0\n4440\n47C0\n44C0\nENDCHAR\nSTARTCHAR U_6DF0\nENCODING 28144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\n0640\n9920\n57C0\n2040\n2280\nC500\n5540\n54A0\n63A0\nENDCHAR\nSTARTCHAR U_6DF1\nENCODING 28145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n0480\n8940\n4100\n2FE0\n2100\nC380\n4540\n5920\n4100\nENDCHAR\nSTARTCHAR U_6DF2\nENCODING 28146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2100\n0FE0\n9920\n5FC0\n2920\n2BE0\nCA80\n4A80\n52A0\n6460\nENDCHAR\nSTARTCHAR U_6DF3\nENCODING 28147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0440\n97C0\n5000\n2FC0\n2080\nC100\n5FE0\n4100\n4700\nENDCHAR\nSTARTCHAR U_6DF4\nENCODING 28148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n0AA0\n92A0\n5520\n2A20\n20C0\nD540\n54A0\n6440\n43C0\nENDCHAR\nSTARTCHAR U_6DF5\nENCODING 28149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AA0\n2AA0\n0AA0\n9EE0\n5820\n2FE0\n2820\nCEE0\n4AA0\n4AA0\n52A0\nENDCHAR\nSTARTCHAR U_6DF6\nENCODING 28150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0540\n9540\n5540\n2BA0\n2100\nC380\n4540\n4920\n5120\nENDCHAR\nSTARTCHAR U_6DF7\nENCODING 28151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n0FC0\n8840\n5FC0\n2920\n2940\nCF80\n4920\n4B20\n4CE0\nENDCHAR\nSTARTCHAR U_6DF8\nENCODING 28152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n4FC0\n0200\n8FC0\n4200\n3FE0\n4A40\nCA40\n4FC0\n4840\n48C0\nENDCHAR\nSTARTCHAR U_6DF9\nENCODING 28153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FE0\n0480\n8A40\n5FA0\n2A80\n2F80\nCA80\n4FA0\n4220\n41E0\nENDCHAR\nSTARTCHAR U_6DFA\nENCODING 28154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n0280\n9320\n5DE0\n2480\n23E0\nDE00\n42A0\n4320\n5CE0\nENDCHAR\nSTARTCHAR U_6DFB\nENCODING 28155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2200\n0200\n9FE0\n4880\n3260\n2200\nCB40\n4AA0\n52A0\n4600\nENDCHAR\nSTARTCHAR U_6DFC\nENCODING 28156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n04C0\n7500\n1600\n2580\nCC60\n10A0\nF7A0\n59C0\n56A0\n94A0\n31A0\nENDCHAR\nSTARTCHAR U_6DFD\nENCODING 28157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3FE0\n0480\n9480\n5100\n2500\n25C0\nC500\n4500\n4500\n5FE0\nENDCHAR\nSTARTCHAR U_6DFE\nENCODING 28158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1F00\n2480\nDF60\n1500\n7FC0\n0400\n7CC0\n1700\n2480\nCC60\nENDCHAR\nSTARTCHAR U_6DFF\nENCODING 28159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n8440\n47C0\n1440\n27C0\n4100\nCFE0\n4920\n4960\n4100\nENDCHAR\nSTARTCHAR U_6E00\nENCODING 28160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5FE0\n0500\n8A80\n77E0\n2200\n4A80\nDFE0\n4880\n4880\n5080\nENDCHAR\nSTARTCHAR U_6E01\nENCODING 28161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5EC0\n0700\n8A80\n5640\n6200\n5EC0\nC700\n4A80\n5260\n4400\nENDCHAR\nSTARTCHAR U_6E02\nENCODING 28162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n4840\n0FC0\n9840\n6FC0\n2100\n5FE0\nC480\n4300\n4480\n5860\nENDCHAR\nSTARTCHAR U_6E03\nENCODING 28163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2FE0\n0480\n9200\n5FE0\n2200\n27C0\nCC40\n5440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6E04\nENCODING 28164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2280\n2EE0\n8280\n4EE0\n2280\n4280\nDEE0\n4280\n4280\n4280\nENDCHAR\nSTARTCHAR U_6E05\nENCODING 28165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n97C0\n5100\n2FE0\n2440\nC740\n45C0\n4440\n44C0\nENDCHAR\nSTARTCHAR U_6E06\nENCODING 28166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9120\n4A20\n1FA0\n8AA0\n6AA0\n3FA0\n4AA0\nCAA0\n4A20\n4AA0\n5240\nENDCHAR\nSTARTCHAR U_6E07\nENCODING 28167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n8FC0\n5840\n2FC0\n2400\nCFE0\n5020\n4E20\n4920\n4F40\nENDCHAR\nSTARTCHAR U_6E08\nENCODING 28168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5FE0\n0480\n8300\n54E0\n2C40\n47C0\nC440\n47C0\n4840\n5040\nENDCHAR\nSTARTCHAR U_6E09\nENCODING 28169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2BC0\n8A00\n5FE0\n2200\n2A40\n4A20\nD280\n4100\n4600\n5800\nENDCHAR\nSTARTCHAR U_6E0A\nENCODING 28170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2D60\n0BA0\n9920\n5FE0\n2920\n2BA0\nCD60\n4920\n4920\n5120\nENDCHAR\nSTARTCHAR U_6E0B\nENCODING 28171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4100\n05C0\n8500\n5FE0\n2000\n4840\nC480\n4000\n4480\n5840\nENDCHAR\nSTARTCHAR U_6E0C\nENCODING 28172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2040\n07C0\n9040\n5FE0\n2920\n2540\nC380\n5D40\n4920\n4720\nENDCHAR\nSTARTCHAR U_6E0D\nENCODING 28173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n97C0\n5100\n2FE0\n2440\nC540\n4540\n4280\n5C60\nENDCHAR\nSTARTCHAR U_6E0E\nENCODING 28174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n0100\n9FE0\n54A0\n2A80\n2480\nCFE0\n4180\n4240\n4C20\nENDCHAR\nSTARTCHAR U_6E0F\nENCODING 28175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n0500\n8880\n5FE0\n2040\n4F40\nC940\n4F40\n4040\n40C0\nENDCHAR\nSTARTCHAR U_6E10\nENCODING 28176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4820\n3FC0\n0900\n9500\n55E0\n3F40\n2540\nC740\n5D40\n4540\n4640\nENDCHAR\nSTARTCHAR U_6E11\nENCODING 28177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n07C0\n9100\n5FE0\n2920\n2FE0\nC920\n4FE0\n4120\n40E0\nENDCHAR\nSTARTCHAR U_6E12\nENCODING 28178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n0940\n8FC0\n5940\n1FC0\n2400\nC900\n5FE0\n4100\n4100\nENDCHAR\nSTARTCHAR U_6E13\nENCODING 28179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2E40\n8A40\n6580\n2200\n2FC0\n4200\nDFE0\n4300\n4480\n5860\nENDCHAR\nSTARTCHAR U_6E14\nENCODING 28180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23C0\n0480\n8FE0\n5920\n2FE0\n2920\nCFE0\n4820\n4000\n5FE0\nENDCHAR\nSTARTCHAR U_6E15\nENCODING 28181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n2A20\n84A0\n4EA0\n04A0\n24A0\n4EA0\nC4A0\n4A20\n4920\n5060\nENDCHAR\nSTARTCHAR U_6E16\nENCODING 28182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0820\n9100\n5FE0\n2920\n2FE0\nC920\n4FE0\n4100\n4100\nENDCHAR\nSTARTCHAR U_6E17\nENCODING 28183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2240\n07C0\n9120\n5FE0\n2940\n36A0\nC100\n4E40\n4180\n4E00\nENDCHAR\nSTARTCHAR U_6E18\nENCODING 28184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8F80\n4500\n0200\n9FE0\n4640\n3A00\n4200\nDFE0\n4700\n5AE0\n4200\nENDCHAR\nSTARTCHAR U_6E19\nENCODING 28185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27C0\n0880\n9FE0\n5AA0\n2C60\n2920\nDFE0\n4100\n4680\n5860\nENDCHAR\nSTARTCHAR U_6E1A\nENCODING 28186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FA0\n0240\n9FE0\n5200\n27C0\n2C40\nD7C0\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6E1B\nENCODING 28187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n20A0\n0FE0\n9880\n5E80\n28A0\n2EA0\nCAC0\n4EA0\n5160\n6620\nENDCHAR\nSTARTCHAR U_6E1C\nENCODING 28188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n0FE0\n9AA0\n5AA0\n2A60\n2100\nDFE0\n4100\n4680\n5860\nENDCHAR\nSTARTCHAR U_6E1D\nENCODING 28189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n2480\n0B60\n9000\n5E20\n2AA0\n2EA0\nCAA0\n4EA0\n4A20\n4AE0\nENDCHAR\nSTARTCHAR U_6E1E\nENCODING 28190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n4500\n1FE0\n8200\n5FC0\n2840\n4FC0\nC840\n4FC0\n4840\n4FC0\nENDCHAR\nSTARTCHAR U_6E1F\nENCODING 28191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0440\n97C0\n5000\n2FE0\n2820\nC7C0\n4100\n4100\n4300\nENDCHAR\nSTARTCHAR U_6E20\nENCODING 28192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2800\n8FC0\n5840\nAFC0\n4800\n4FE0\n4400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_6E21\nENCODING 28193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0A80\n9FE0\n5A80\n2B80\n2800\nCFC0\n4A80\n5100\n6EE0\nENDCHAR\nSTARTCHAR U_6E22\nENCODING 28194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n0F40\n9A40\n5FC0\n2AC0\n2FC0\nCA40\n4AC0\n5FA0\n6020\nENDCHAR\nSTARTCHAR U_6E23\nENCODING 28195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n0540\n9920\n57C0\n2440\n27C0\nC440\n47C0\n4000\n5FE0\nENDCHAR\nSTARTCHAR U_6E24\nENCODING 28196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2E80\n05E0\n9FA0\n52A0\n3EA0\n24A0\nDFA0\n44A0\n4520\n4A60\nENDCHAR\nSTARTCHAR U_6E25\nENCODING 28197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n0FE0\n8800\n5FE0\n2A40\n2FA0\nC900\n4FC0\n5100\n6FE0\nENDCHAR\nSTARTCHAR U_6E26\nENCODING 28198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n0740\n9540\n5FE0\n2820\n2BA0\nCAA0\n4BA0\n4820\n48E0\nENDCHAR\nSTARTCHAR U_6E27\nENCODING 28199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0440\n9280\n5FE0\n2920\n27C0\nC540\n4540\n45C0\n4100\nENDCHAR\nSTARTCHAR U_6E28\nENCODING 28200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2940\n0FC0\n8940\n5FC0\n2000\n3FE0\nC920\n4940\n4A80\n4C60\nENDCHAR\nSTARTCHAR U_6E29\nENCODING 28201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n07C0\n9440\n57C0\n2000\n2FE0\nCAA0\n4AA0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_6E2A\nENCODING 28202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n4200\n0FC0\n8A40\n6FC0\n2200\n5FE0\nD220\n52A0\n5FA0\n5060\nENDCHAR\nSTARTCHAR U_6E2B\nENCODING 28203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2FE0\n0540\n95C0\n5400\n27E0\n2100\nDFE0\n4580\n4960\n5120\nENDCHAR\nSTARTCHAR U_6E2C\nENCODING 28204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E20\n2AA0\n0AA0\n8EA0\n5AA0\n2EA0\n2AA0\nCAA0\n4E20\n4A20\n5160\nENDCHAR\nSTARTCHAR U_6E2D\nENCODING 28205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n0FE0\n9920\n5FE0\n2440\n27C0\nC440\n47C0\n4440\n44C0\nENDCHAR\nSTARTCHAR U_6E2E\nENCODING 28206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3FE0\n0480\n9FE0\n5040\n2F40\n2940\nCF40\n4940\n4040\n40C0\nENDCHAR\nSTARTCHAR U_6E2F\nENCODING 28207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2FE0\n0480\n9FE0\n5480\n27C0\n2CA0\nD780\n4420\n4420\n43E0\nENDCHAR\nSTARTCHAR U_6E30\nENCODING 28208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n2480\n0FC0\n9020\n5FC0\n2840\n2FC0\nC480\n5FE0\n4480\n4880\nENDCHAR\nSTARTCHAR U_6E31\nENCODING 28209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n24E0\n1F40\n9540\n5540\n3F40\n3540\nC440\n4540\n7F40\n41E0\nENDCHAR\nSTARTCHAR U_6E32\nENCODING 28210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0820\n97E0\n5000\n27C0\n2640\nC540\n47C0\n4000\n5FE0\nENDCHAR\nSTARTCHAR U_6E33\nENCODING 28211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2540\n0540\n9DC0\n5140\n31C0\n3D40\nC560\n47C0\n5440\n4840\nENDCHAR\nSTARTCHAR U_6E34\nENCODING 28212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n07C0\n9440\n57C0\n2400\n2FE0\nD920\n4AA0\n4FA0\n4040\nENDCHAR\nSTARTCHAR U_6E35\nENCODING 28213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\n0FE0\n9480\n5FE0\n2920\n2920\nCFE0\n4920\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6E36\nENCODING 28214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n0280\n9100\n57C0\n2540\n2540\nCFE0\n4280\n4440\n4820\nENDCHAR\nSTARTCHAR U_6E37\nENCODING 28215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FE0\n0080\n8840\n5FE0\n2840\n4FC0\nC500\n4500\n4920\n50E0\nENDCHAR\nSTARTCHAR U_6E38\nENCODING 28216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n24E0\n1F00\n88E0\n5E20\n2A40\n2BE0\nCA40\n4A40\n5240\n66C0\nENDCHAR\nSTARTCHAR U_6E39\nENCODING 28217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n2FE0\n1220\n8FE0\n5020\n27A0\n2020\nCFA0\n48A0\n4FA0\n40C0\nENDCHAR\nSTARTCHAR U_6E3A\nENCODING 28218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5C80\n3480\n15C0\n9EA0\n56A0\n3480\n3CA0\nD420\n5440\n5C80\n4300\nENDCHAR\nSTARTCHAR U_6E3B\nENCODING 28219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2520\n0960\n9080\n47E0\n2420\n3FE0\nC420\n47E0\n4420\n47E0\nENDCHAR\nSTARTCHAR U_6E3C\nENCODING 28220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n1FE0\n9100\n47C0\n2100\n2FE0\nC100\n4FE0\n4280\n5C60\nENDCHAR\nSTARTCHAR U_6E3D\nENCODING 28221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2EC0\n04A0\n9FE0\n4080\n2EA0\n2AA0\nCAC0\n4EA0\n4960\n4220\nENDCHAR\nSTARTCHAR U_6E3E\nENCODING 28222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n0100\n9FE0\n5540\n27C0\n2540\nC7C0\n4100\n5FE0\n4100\nENDCHAR\nSTARTCHAR U_6E3F\nENCODING 28223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0380\n8540\n4920\n27C0\n2000\nDFE0\n4100\n4940\n5320\nENDCHAR\nSTARTCHAR U_6E40\nENCODING 28224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F40\n2AA0\n0A40\n8440\n4BA0\n3100\n2100\nCFE0\n4300\n4480\n5860\nENDCHAR\nSTARTCHAR U_6E41\nENCODING 28225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2940\n1E20\n8A20\n49C0\n2C00\n3BE0\nCA20\n4A20\n4BE0\n5A20\nENDCHAR\nSTARTCHAR U_6E42\nENCODING 28226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n0EE0\n8000\n57C0\n2000\n4FE0\nC200\n43C0\n4040\n40C0\nENDCHAR\nSTARTCHAR U_6E43\nENCODING 28227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n3DE0\n0440\n9FE0\n4440\n25E0\n3E40\nC5E0\n4440\n4840\n5040\nENDCHAR\nSTARTCHAR U_6E44\nENCODING 28228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n0FE0\n8800\n4BE0\n2A20\n2BE0\nCA20\n4BE0\n5220\n63E0\nENDCHAR\nSTARTCHAR U_6E45\nENCODING 28229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n1100\n9FE0\n4D60\n2BA0\n2FE0\nC380\n4540\n4920\n5120\nENDCHAR\nSTARTCHAR U_6E46\nENCODING 28230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0440\n8280\n4FE0\n2000\n27C0\nC440\n47C0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_6E47\nENCODING 28231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0280\n8FE0\n4000\n27C0\n2440\nC7C0\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6E48\nENCODING 28232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2FE0\n0480\n8780\n5480\n2780\n4200\nDFE0\n4680\n5A60\n4200\nENDCHAR\nSTARTCHAR U_6E49\nENCODING 28233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4460\n2580\n1480\n97E0\n5480\n2480\n25E0\nC520\n4520\n45E0\n4520\nENDCHAR\nSTARTCHAR U_6E4A\nENCODING 28234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n07E0\n8100\n4FE0\n2440\n3BA0\nC100\n4FE0\n4280\n4C60\nENDCHAR\nSTARTCHAR U_6E4B\nENCODING 28235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n0240\n8FE0\n4440\n27C0\n2100\nCFE0\n4500\n4FE0\n4100\nENDCHAR\nSTARTCHAR U_6E4C\nENCODING 28236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n4500\n0A80\n9FE0\n6880\n2F80\n4880\nCF80\n4A80\n4900\n4CC0\nENDCHAR\nSTARTCHAR U_6E4D\nENCODING 28237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2920\n0FE0\n8000\n4FE0\n2100\n2FE0\nCAA0\n4AA0\n4AA0\n4860\nENDCHAR\nSTARTCHAR U_6E4E\nENCODING 28238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n0200\n9FE0\n5AA0\n2BA0\n2AA0\nCBA0\n4AA0\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6E4F\nENCODING 28239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n4200\n0FC0\n9840\n6FC0\n2840\n4FC0\nC840\n4FC0\n4480\n5860\nENDCHAR\nSTARTCHAR U_6E50\nENCODING 28240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8840\n4880\n1FE0\n8920\n6D20\n3BE0\n5920\nE920\n4920\n49E0\n4920\nENDCHAR\nSTARTCHAR U_6E51\nENCODING 28241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2120\n05C0\n8500\n5FE0\n2440\n27C0\nC440\n47C0\n4440\n44C0\nENDCHAR\nSTARTCHAR U_6E52\nENCODING 28242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n07C0\n8000\n5FE0\n2440\n27C0\nC440\n47C0\n4460\n4FC0\nENDCHAR\nSTARTCHAR U_6E53\nENCODING 28243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2840\n17E0\n8240\n4440\n2980\n3000\nCFE0\n4AA0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_6E54\nENCODING 28244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\n2480\n1FE0\n8000\n4EA0\n2AA0\n2EA0\nCAA0\n4EA0\n4A20\n4AE0\nENDCHAR\nSTARTCHAR U_6E55\nENCODING 28245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DE0\n24A0\n0BE0\n9CA0\n47E0\n2480\n27E0\nD480\n4BE0\n5480\n63E0\nENDCHAR\nSTARTCHAR U_6E56\nENCODING 28246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n24A0\n1FA0\n94E0\n54A0\n2EA0\n2AE0\nCAA0\n4EA0\n4120\n4260\nENDCHAR\nSTARTCHAR U_6E57\nENCODING 28247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8840\n4840\n1C40\n89E0\n7E40\n4940\n5EC0\nC840\n4E40\n7840\n40C0\nENDCHAR\nSTARTCHAR U_6E58\nENCODING 28248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n2520\n0520\n9FE0\n4520\n2720\n2DE0\nD520\n4520\n45E0\n4520\nENDCHAR\nSTARTCHAR U_6E59\nENCODING 28249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n0500\n9540\n6520\n2B00\n4200\nDFE0\n4300\n4480\n5860\nENDCHAR\nSTARTCHAR U_6E5A\nENCODING 28250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n3F40\n1540\n9EC0\n5040\n3740\n3540\nD740\n5540\n5740\n6560\nENDCHAR\nSTARTCHAR U_6E5B\nENCODING 28251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2FE0\n0440\n97C0\n5440\n27C0\n2440\nDFE0\n4A80\n4C40\n4FE0\nENDCHAR\nSTARTCHAR U_6E5C\nENCODING 28252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n07C0\n8440\n47C0\n2000\n2FE0\nC500\n45E0\n4B00\n51E0\nENDCHAR\nSTARTCHAR U_6E5D\nENCODING 28253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n48A0\n2EC0\n0880\n9AA0\n5CE0\n2100\n27C0\nC440\n47C0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_6E5E\nENCODING 28254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n2100\n07C0\n9440\n57C0\n2440\n27C0\nC440\n47C0\n4280\n4C60\nENDCHAR\nSTARTCHAR U_6E5F\nENCODING 28255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27C0\n0440\n97C0\n5440\n2FE0\n2100\nC100\n47C0\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_6E60\nENCODING 28256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2920\n0FE0\n8200\n5FE0\n2480\n26A0\nCAC0\n4C80\n5140\n6620\nENDCHAR\nSTARTCHAR U_6E61\nENCODING 28257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2540\n07C0\n9540\n57C0\n2100\n2FE0\nC920\n4960\n4BA0\n4860\nENDCHAR\nSTARTCHAR U_6E62\nENCODING 28258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2000\n07C0\n9440\n57C0\n2000\n2FE0\nC920\n4FE0\n4920\n4FE0\nENDCHAR\nSTARTCHAR U_6E63\nENCODING 28259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n0FC0\n8900\n5FE0\n2880\n2FE0\nC440\n47C0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_6E64\nENCODING 28260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n2900\n1FE0\n8880\n5EE0\n2BA0\n2AA0\nCAE0\n4A80\n5220\n4DE0\nENDCHAR\nSTARTCHAR U_6E65\nENCODING 28261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0AA0\n8440\n49A0\n2140\n2FE0\nC100\n4280\n4440\n5820\nENDCHAR\nSTARTCHAR U_6E66\nENCODING 28262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n0FC0\n8840\n4FC0\n2500\n2FE0\nD100\n47C0\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_6E67\nENCODING 28263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2280\n0FE0\n8920\n5FE0\n2920\n2FE0\nC200\n5FE0\n4420\n58C0\nENDCHAR\nSTARTCHAR U_6E68\nENCODING 28264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n17C0\n9440\n47C0\n2440\n27C0\nC140\n4FE0\n4280\n5C60\nENDCHAR\nSTARTCHAR U_6E69\nENCODING 28265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2100\n0FE0\n8920\n4FE0\n2920\n2FE0\nC100\n4FE0\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_6E6A\nENCODING 28266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8400\n47C0\n0480\n9FE0\n4400\n3AC0\n4500\nDB80\n4540\n5920\n4200\nENDCHAR\nSTARTCHAR U_6E6B\nENCODING 28267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3880\n0AA0\n9EC0\n4A80\n2C80\n3A80\nC880\n4880\n4940\n4A20\nENDCHAR\nSTARTCHAR U_6E6C\nENCODING 28268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n2540\nFB80\n7280\nAC60\n2400\n7580\n1600\n2580\nC460\n0C00\nENDCHAR\nSTARTCHAR U_6E6D\nENCODING 28269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n8FE0\n5280\n1FE0\n2AA0\n4AA0\nCC60\n4FA0\n4820\n4FE0\nENDCHAR\nSTARTCHAR U_6E6E\nENCODING 28270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2280\n0FE0\n9AA0\n4AA0\n2FE0\n2100\nC7C0\n4100\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_6E6F\nENCODING 28271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n07C0\n9440\n5FE0\n2400\n27E0\nCAA0\n52A0\n4520\n4AC0\nENDCHAR\nSTARTCHAR U_6E70\nENCODING 28272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n5880\n0700\n98E0\n4780\n2A00\n4FC0\nD200\n4FC0\n4200\n5FE0\nENDCHAR\nSTARTCHAR U_6E71\nENCODING 28273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n87C0\n4100\n2FE0\n2200\nDFE0\n4A20\n5220\n43E0\nENDCHAR\nSTARTCHAR U_6E72\nENCODING 28274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2A20\n0540\n97E0\n5100\n2FE0\n2400\nC7E0\n4A40\n5180\n6660\nENDCHAR\nSTARTCHAR U_6E73\nENCODING 28275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n8FE0\n4AA0\n2920\n2FE0\nC920\n4FE0\n4920\n4860\nENDCHAR\nSTARTCHAR U_6E74\nENCODING 28276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n07E0\n9280\n5280\n2AA0\n2AA0\nC6C0\n4280\n4280\n4FE0\nENDCHAR\nSTARTCHAR U_6E75\nENCODING 28277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8480\n4FC0\n0200\n8FC0\n4200\n3FE0\n4400\nC780\n4900\n4280\n4C60\nENDCHAR\nSTARTCHAR U_6E76\nENCODING 28278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n4F80\n0880\n9F80\n6880\n2F80\n4240\nDB80\n4A80\n7260\n4600\nENDCHAR\nSTARTCHAR U_6E77\nENCODING 28279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n87C0\n4200\n3FE0\n2C40\nD7E0\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6E78\nENCODING 28280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n0440\n87C0\n4000\n2FE0\n2820\nC380\n42A0\n44A0\n5860\nENDCHAR\nSTARTCHAR U_6E79\nENCODING 28281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2800\n0BE0\n8AA0\n4BE0\n2AA0\n2BE0\nC880\n4BE0\n5080\n67E0\nENDCHAR\nSTARTCHAR U_6E7A\nENCODING 28282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8800\n4BC0\n1240\n93C0\n7100\n37E0\n5380\nD540\n5540\n5920\n5100\nENDCHAR\nSTARTCHAR U_6E7B\nENCODING 28283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8400\n4200\n1FE0\n8480\n5780\n2000\n4FC0\nC840\n4FC0\n4840\n4FC0\nENDCHAR\nSTARTCHAR U_6E7C\nENCODING 28284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2CC0\n8840\n4CC0\n0840\n2FC0\n4000\nCFC0\n4200\n4200\n5FE0\nENDCHAR\nSTARTCHAR U_6E7D\nENCODING 28285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8540\n4A80\n1FE0\nAA80\n4540\n5FC0\n5240\nDFC0\n5240\n5FC0\n5040\nENDCHAR\nSTARTCHAR U_6E7E\nENCODING 28286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n06C0\n8AA0\n47C0\n2040\n27C0\nC400\n47E0\n4020\n40C0\nENDCHAR\nSTARTCHAR U_6E7F\nENCODING 28287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n07C0\n9440\n57C0\n2440\n2280\nCAA0\n46C0\n4280\n4FE0\nENDCHAR\nSTARTCHAR U_6E80\nENCODING 28288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8480\n5FE0\n0480\nBFE0\n6200\n3FE0\n5220\nDAA0\n5FA0\n50A0\n5040\nENDCHAR\nSTARTCHAR U_6E81\nENCODING 28289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8480\n5FE0\n0480\n9FE0\n5220\n2FC0\n4200\nC700\n4A80\n5260\n4200\nENDCHAR\nSTARTCHAR U_6E82\nENCODING 28290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8820\n7E20\n08A0\nBEA0\n6AA0\n3EA0\n48A0\nDCA0\n6A20\n48A0\n4840\nENDCHAR\nSTARTCHAR U_6E83\nENCODING 28291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n0540\n9FE0\n4000\n27C0\n2440\nC540\n4540\n4280\n5C60\nENDCHAR\nSTARTCHAR U_6E84\nENCODING 28292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9240\n5FC0\n0400\n8FC0\n5880\n2700\n5AE0\nCF80\n4200\n5FC0\n4200\nENDCHAR\nSTARTCHAR U_6E85\nENCODING 28293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBEC0\n62A0\n2BE0\nAA80\n6BE0\n2A80\n6A80\nEAA0\n4C40\n52A0\n6120\nENDCHAR\nSTARTCHAR U_6E86\nENCODING 28294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4600\n29E0\n10A0\n8FA0\n44A0\n3FA0\n24A0\nCEA0\n5540\n44A0\n4D20\nENDCHAR\nSTARTCHAR U_6E87\nENCODING 28295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9240\n4A80\n1FE0\n8680\n5A60\n2200\n5FE0\nC480\n4900\n4700\n58C0\nENDCHAR\nSTARTCHAR U_6E88\nENCODING 28296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A00\n2600\n1F80\n8480\n47C0\n2440\n2FE0\nD020\n6560\n4AA0\n4AC0\nENDCHAR\nSTARTCHAR U_6E89\nENCODING 28297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n3480\n1C80\n9680\n57E0\n3C80\n30A0\nD5A0\n5AA0\n52A0\n4460\nENDCHAR\nSTARTCHAR U_6E8A\nENCODING 28298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n3DC0\n1440\n9DC0\n5000\n3DC0\n5140\nDD40\n5080\n5140\n5620\nENDCHAR\nSTARTCHAR U_6E8B\nENCODING 28299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FC0\n4480\n07C0\n8D40\n4B40\n3540\n4080\nDFC0\n5540\n5540\n7FE0\nENDCHAR\nSTARTCHAR U_6E8C\nENCODING 28300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8280\n5D40\n1480\n8860\n5F80\n2500\n5FC0\nC500\n4500\n4920\n50E0\nENDCHAR\nSTARTCHAR U_6E8D\nENCODING 28301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2280\n0AA0\n86C0\n4FE0\n2000\n27C0\nC440\n47C0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_6E8E\nENCODING 28302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n29E0\n1E80\n8880\n4DE0\n3A00\n2880\nCBE0\n4880\n4880\n4BE0\nENDCHAR\nSTARTCHAR U_6E8F\nENCODING 28303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0940\n8FE0\n5940\n2FC0\n2900\nCFC0\n5440\n57C0\n6440\nENDCHAR\nSTARTCHAR U_6E90\nENCODING 28304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2880\n8BE0\n4A20\n1BE0\n2A20\n2BE0\nC880\n4AC0\n54A0\n69A0\nENDCHAR\nSTARTCHAR U_6E91\nENCODING 28305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n2680\n8FC0\n4840\n1FC0\n2840\n2FC0\nC840\n4FC0\n4840\n5020\nENDCHAR\nSTARTCHAR U_6E92\nENCODING 28306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n0100\n8FE0\n4000\n27C0\n2440\nC7C0\n4CA0\n5540\n4620\nENDCHAR\nSTARTCHAR U_6E93\nENCODING 28307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2500\n1FE0\n8540\n5FE0\n2540\n3FC0\nC500\n4D80\n5540\n6520\nENDCHAR\nSTARTCHAR U_6E94\nENCODING 28308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n0FE0\n9100\n57C0\n2100\n2FE0\nC000\n4540\n4AA0\n4AA0\nENDCHAR\nSTARTCHAR U_6E95\nENCODING 28309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n5020\n0FC0\n8000\n5FE0\n2600\n4B60\nC580\n5B40\n4560\n5B00\nENDCHAR\nSTARTCHAR U_6E96\nENCODING 28310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8500\n4FE0\n9900\n4FC0\n4900\nCFC0\n4900\n4FE0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_6E97\nENCODING 28311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2200\n1FE0\n8AA0\n5AC0\n2AA0\n3AE0\nC700\n4A80\n5240\n6220\nENDCHAR\nSTARTCHAR U_6E98\nENCODING 28312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n0100\n8FE0\n4100\n2240\n27A0\nC000\n4FE0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_6E99\nENCODING 28313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n87C0\n4200\n2FE0\n2D40\nD360\n4580\n4940\n5320\nENDCHAR\nSTARTCHAR U_6E9A\nENCODING 28314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n5FC0\n0A80\n8500\n4880\n3760\n4000\nCF80\n4880\n4F80\n4880\nENDCHAR\nSTARTCHAR U_6E9B\nENCODING 28315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n14A0\n8840\n5FA0\n2A40\n2A40\nCA40\n4A40\n4AA0\n53A0\nENDCHAR\nSTARTCHAR U_6E9C\nENCODING 28316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2DE0\n08A0\n9AA0\n5F20\n2140\n2FE0\nC920\n4FE0\n4920\n4FE0\nENDCHAR\nSTARTCHAR U_6E9D\nENCODING 28317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n3FE0\n0280\n8FE0\n4280\n3FE0\n2940\nCFC0\n4940\n5FE0\n48C0\nENDCHAR\nSTARTCHAR U_6E9E\nENCODING 28318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2540\n0280\n8180\n4E60\n2100\n2FE0\nC920\n4FE0\n4140\n5FA0\nENDCHAR\nSTARTCHAR U_6E9F\nENCODING 28319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n07C0\n8440\n47C0\n2440\n27C0\nC100\n5FE0\n4280\n5C60\nENDCHAR\nSTARTCHAR U_6EA0\nENCODING 28320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n0FE0\n8100\n47E0\n2100\n2FE0\nC400\n4FC0\n5100\n6FE0\nENDCHAR\nSTARTCHAR U_6EA1\nENCODING 28321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n3DE0\n1480\n97E0\n5400\n3C40\n37E0\nD540\n5CC0\n4040\n41C0\nENDCHAR\nSTARTCHAR U_6EA2\nENCODING 28322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n0FE0\n8280\n4440\n2820\n3FE0\nCAA0\n4AA0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_6EA3\nENCODING 28323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n6280\n2440\nABA0\n6000\n2FE0\n6AA0\nAFE0\nAAA0\nAAA0\nA860\nENDCHAR\nSTARTCHAR U_6EA4\nENCODING 28324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2900\n0FC0\n8900\n4FC0\n2900\n2FE0\nC020\n4AA0\n5560\n5560\nENDCHAR\nSTARTCHAR U_6EA5\nENCODING 28325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n3FE0\n0920\n8FE0\n4920\n2FE0\n2920\nC140\n5FE0\n4440\n42C0\nENDCHAR\nSTARTCHAR U_6EA6\nENCODING 28326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n3540\n1F60\n80A0\n4FA0\n20A0\n2EA0\nCAA0\n4A40\n4BA0\n5120\nENDCHAR\nSTARTCHAR U_6EA7\nENCODING 28327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2280\n0FE0\n8AA0\n4FE0\n2100\n2FE0\nC100\n4380\n4540\n4920\nENDCHAR\nSTARTCHAR U_6EA8\nENCODING 28328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8940\n5D20\n0900\nBFE0\n4900\n3F60\n4940\nDC80\n6AA0\n4960\n4E20\nENDCHAR\nSTARTCHAR U_6EA9\nENCODING 28329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n0840\n9FC0\n6800\n2FE0\n4800\nCFE0\n4020\n5AA0\n6560\nENDCHAR\nSTARTCHAR U_6EAA\nENCODING 28330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n04C0\n8240\n4780\n2240\n2FA0\nC100\n5FE0\n4280\n5C60\nENDCHAR\nSTARTCHAR U_6EAB\nENCODING 28331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2540\n06C0\n8440\n47C0\n2000\n2FE0\nCAA0\n4AA0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_6EAC\nENCODING 28332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n5FE0\n0200\n8FC0\n6200\n3FE0\n4680\nC740\n4BC0\n4A20\n51E0\nENDCHAR\nSTARTCHAR U_6EAD\nENCODING 28333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FC0\n5240\n1FC0\n9240\n5FC0\n2880\n5440\nCFA0\n5500\n4200\n5DC0\nENDCHAR\nSTARTCHAR U_6EAE\nENCODING 28334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n2880\n1C80\n97E0\n5EA0\n32A0\n3EA0\nD6A0\n56E0\n5C80\n5080\nENDCHAR\nSTARTCHAR U_6EAF\nENCODING 28335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AE0\n24A0\n1FA0\n84E0\n55A0\n15A0\n5FE0\nC4A0\n44A0\n4920\n5260\nENDCHAR\nSTARTCHAR U_6EB0\nENCODING 28336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2920\n0FE0\n8000\n5FE0\n2000\n2FC0\nC840\n4FC0\n4480\n5FE0\nENDCHAR\nSTARTCHAR U_6EB1\nENCODING 28337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n87C0\n4200\n2FE0\n2940\nDFE0\n4380\n4540\n5920\nENDCHAR\nSTARTCHAR U_6EB2\nENCODING 28338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4DE0\n2920\n0FE0\n8920\n5FE0\n2100\n2FE0\nC440\n4280\n4100\n4EE0\nENDCHAR\nSTARTCHAR U_6EB3\nENCODING 28339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\n2480\n0FC0\n9840\n5FC0\n2840\n2FC0\nC840\n4FC0\n4480\n5860\nENDCHAR\nSTARTCHAR U_6EB4\nENCODING 28340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n0440\n8740\n55C0\n2440\n27C0\nC140\n4FE0\n4280\n4C60\nENDCHAR\nSTARTCHAR U_6EB5\nENCODING 28341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9DC0\n5140\n1D40\n9540\n5E20\n35C0\n5D40\nD280\n5C80\n6540\n4E20\nENDCHAR\nSTARTCHAR U_6EB6\nENCODING 28342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0AA0\n9540\n5AA0\n2440\n2820\nD7C0\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6EB7\nENCODING 28343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n0FE0\n8A20\n5EA0\n2920\n2BA0\nCD60\n4920\n4A20\n4FE0\nENDCHAR\nSTARTCHAR U_6EB8\nENCODING 28344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5FC0\n0200\n8F80\n4200\n3FE0\n2B00\nC480\n5FC0\n5280\n5640\nENDCHAR\nSTARTCHAR U_6EB9\nENCODING 28345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n8FE0\n4920\n2780\n2240\nCFA0\n4580\n4940\n5320\nENDCHAR\nSTARTCHAR U_6EBA\nENCODING 28346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n2220\n1EE0\n9080\n5EE0\n3220\n2AA0\nC660\n5BA0\n4220\n4CC0\nENDCHAR\nSTARTCHAR U_6EBB\nENCODING 28347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n07C0\n9440\n57C0\n2000\n3FE0\nCAA0\n4660\n5AA0\n46E0\nENDCHAR\nSTARTCHAR U_6EBC\nENCODING 28348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2880\n1540\n9DC0\n4880\n3540\n3DE0\nC100\n4FC0\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_6EBD\nENCODING 28349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2800\n0BC0\n8800\n4FE0\n2AA0\n2A40\nCFE0\n4840\n5240\n60C0\nENDCHAR\nSTARTCHAR U_6EBE\nENCODING 28350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n0A40\n8FC0\n5A40\n2FC0\n2140\nC3A0\n4540\n4920\n50E0\nENDCHAR\nSTARTCHAR U_6EBF\nENCODING 28351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8080\n7EA0\n2BC0\nAA80\n7FE0\n2A80\n6BE0\nAA80\nBE80\nA280\n8080\nENDCHAR\nSTARTCHAR U_6EC0\nENCODING 28352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0480\n8F00\n4240\n2FE0\n2920\nCFE0\n4920\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6EC1\nENCODING 28353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5C80\n3540\n1620\n99E0\n5480\n35E0\n3480\nDDC0\n52A0\n54A0\n5180\nENDCHAR\nSTARTCHAR U_6EC2\nENCODING 28354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0280\n8FE0\n4820\n2100\n2FE0\nC200\n43C0\n4440\n5980\nENDCHAR\nSTARTCHAR U_6EC3\nENCODING 28355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3A40\n04A0\n8FC0\n4000\n3FE0\n2AA0\nC660\n5BA0\n4220\n4660\nENDCHAR\nSTARTCHAR U_6EC4\nENCODING 28356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4180\n2240\n0520\n9FC0\n5440\n27C0\n2440\nC7E0\n4A20\n53E0\n6220\nENDCHAR\nSTARTCHAR U_6EC5\nENCODING 28357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n20A0\n0FE0\n8880\n4FA0\n2AA0\n2FA0\nCA40\n5560\n68A0\n5120\nENDCHAR\nSTARTCHAR U_6EC6\nENCODING 28358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2440\n07C0\n8000\n4FE0\n2AA0\n2920\nCFE0\n4920\n4920\n4860\nENDCHAR\nSTARTCHAR U_6EC7\nENCODING 28359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0440\n87C0\n4440\n2740\n25C0\nC440\n5FE0\n4280\n4C60\nENDCHAR\nSTARTCHAR U_6EC8\nENCODING 28360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0440\n87C0\n4000\n2FE0\n2820\nCBA0\n4AA0\n4BA0\n4860\nENDCHAR\nSTARTCHAR U_6EC9\nENCODING 28361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n0FC0\n8840\n4FC0\n2540\n3FE0\nC480\n44A0\n48A0\n5060\nENDCHAR\nSTARTCHAR U_6ECA\nENCODING 28362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n2FE0\n1000\n8FC0\n5240\n2AC0\n2740\nDFC0\n4640\n4B20\n52A0\nENDCHAR\nSTARTCHAR U_6ECB\nENCODING 28363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\n2480\n1FE0\n8440\n4880\n2AA0\n3DC0\nC440\n48A0\n52A0\n5DE0\nENDCHAR\nSTARTCHAR U_6ECC\nENCODING 28364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n29E0\n1740\n9480\n5760\n3480\n37E0\nD480\n55C0\n52A0\n54A0\nENDCHAR\nSTARTCHAR U_6ECD\nENCODING 28365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2920\n0FE0\n9100\n5FE0\n2100\n2FE0\nC920\n4FE0\n4120\n4FE0\nENDCHAR\nSTARTCHAR U_6ECE\nENCODING 28366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n14A0\n5AC0\n5280\n2940\n4620\nFFE0\n8420\n7EC0\n1500\n2480\nCC60\nENDCHAR\nSTARTCHAR U_6ECF\nENCODING 28367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44C0\n2A20\n1180\n8240\n4420\n2B80\n2100\nCFE0\n4920\n4540\n5FE0\nENDCHAR\nSTARTCHAR U_6ED0\nENCODING 28368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\n2FE0\n3340\n8DE0\n4840\n3140\n3FE0\nC380\n4540\n4920\n4100\nENDCHAR\nSTARTCHAR U_6ED1\nENCODING 28369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n0740\n8540\n5FE0\n3460\n27C0\nC440\n47C0\n4440\n44C0\nENDCHAR\nSTARTCHAR U_6ED2\nENCODING 28370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2740\n0540\n8740\n4040\n2FE0\n2040\nC740\n4540\n4740\n40C0\nENDCHAR\nSTARTCHAR U_6ED3\nENCODING 28371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0920\n8FE0\n4280\n2100\n3FE0\nC100\n4FE0\n4100\n4100\nENDCHAR\nSTARTCHAR U_6ED4\nENCODING 28372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n27A0\n0A20\n8540\n4260\n2C20\n2820\nCEE0\n4820\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6ED5\nENCODING 28373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE920\nA540\nAFE0\nE200\nAFE0\nA540\nED60\nA380\nA540\nA920\nB320\nENDCHAR\nSTARTCHAR U_6ED6\nENCODING 28374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0000\n87C0\n5440\n2FE0\n2440\nC7C0\n4CA0\n7540\n4620\nENDCHAR\nSTARTCHAR U_6ED7\nENCODING 28375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2EE0\n1540\n8020\n4F80\n2200\n3FC0\nC200\n5FE0\n4220\n41E0\nENDCHAR\nSTARTCHAR U_6ED8\nENCODING 28376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\n0440\n8BA0\n4100\n2FE0\n2000\nC7C0\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6ED9\nENCODING 28377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2A80\n2BC0\n8E80\n4BC0\n2A80\n2BC0\n2A80\nEBC0\n2800\n2FE0\nENDCHAR\nSTARTCHAR U_6EDA\nENCODING 28378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0440\n8920\n52A0\n2740\n2220\nC540\n5C80\n4540\n4620\nENDCHAR\nSTARTCHAR U_6EDB\nENCODING 28379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2E00\n2220\n8920\n4540\n0FE0\n5100\n6FE0\nC100\n4920\n4FE0\nENDCHAR\nSTARTCHAR U_6EDC\nENCODING 28380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n0840\n8FC0\n4840\n2FC0\n2200\nDFE0\n5240\n6FA0\n4200\nENDCHAR\nSTARTCHAR U_6EDD\nENCODING 28381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2F80\n2500\n9FC0\n4A80\n2A80\n2F80\nEA80\n2F80\n2220\n21E0\nENDCHAR\nSTARTCHAR U_6EDE\nENCODING 28382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n3FE0\n0540\n9000\n5FE0\n2920\n27C0\nC540\n4540\n45C0\n4100\nENDCHAR\nSTARTCHAR U_6EDF\nENCODING 28383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n29E0\n1E40\n8BE0\n5EA0\n2AA0\n2BE0\nDE00\n4A20\n4A20\n49E0\nENDCHAR\nSTARTCHAR U_6EE0\nENCODING 28384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2440\n07C0\n8440\n5FE0\n2040\n3FE0\nD2A0\n4C40\n4AA0\n5120\nENDCHAR\nSTARTCHAR U_6EE1\nENCODING 28385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n1280\n9FE0\n4280\n2FE0\n2AA0\nCAA0\n4D60\n4920\n4860\nENDCHAR\nSTARTCHAR U_6EE2\nENCODING 28386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n3FE0\n0280\n9FE0\n5020\n2FC0\n2100\nC7C0\n4140\n4120\n5FE0\nENDCHAR\nSTARTCHAR U_6EE3\nENCODING 28387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2800\n2FC0\n8800\n4FE0\n2B40\n4A80\nCA60\n57C0\n5440\n67C0\nENDCHAR\nSTARTCHAR U_6EE4\nENCODING 28388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n2100\n0FE0\n8920\n4FC0\n2920\n29E0\nCB40\n4AA0\n5640\n69C0\nENDCHAR\nSTARTCHAR U_6EE5\nENCODING 28389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2A80\n0AE0\n8B40\n4A20\n2200\n2FE0\nCAA0\n4AA0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_6EE6\nENCODING 28390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n0480\n8CC0\n54A0\n2100\n3FE0\nC300\n4580\n4960\n5120\nENDCHAR\nSTARTCHAR U_6EE7\nENCODING 28391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n7E80\n14E0\n9540\n2340\n5540\n4880\nC880\n4880\n5540\n6620\nENDCHAR\nSTARTCHAR U_6EE8\nENCODING 28392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n08A0\n9700\n5400\n27E0\n2480\nC480\n5FE0\n4480\n5860\nENDCHAR\nSTARTCHAR U_6EE9\nENCODING 28393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4180\n3D40\n05E0\n9740\n5540\n29E0\n2940\nCD40\n55E0\n6340\n41E0\nENDCHAR\nSTARTCHAR U_6EEA\nENCODING 28394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBDE0\n4480\n1900\n8BE0\n7EA0\n2AA0\n4AA0\nCAA0\n4880\n6960\n5220\nENDCHAR\nSTARTCHAR U_6EEB\nENCODING 28395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n2720\n0AC0\n9B20\n4A00\n2BE0\n2B20\nCBE0\n4B20\n49E0\n4920\nENDCHAR\nSTARTCHAR U_6EEC\nENCODING 28396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0820\n8FE0\n4A40\n2FE0\n2D20\nCFE0\n4C00\n5420\n63E0\nENDCHAR\nSTARTCHAR U_6EED\nENCODING 28397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n0FE0\n8920\n5FE0\n2540\n2FE0\nC540\n4FE0\n4100\n4100\nENDCHAR\nSTARTCHAR U_6EEE\nENCODING 28398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n2220\n0FC0\n8A80\n4F20\n2AC0\n2B80\nD020\n5740\n5520\n69E0\nENDCHAR\nSTARTCHAR U_6EEF\nENCODING 28399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n3FE0\n0540\n9760\n5800\n2FE0\n2920\nC7C0\n4540\n45C0\n4100\nENDCHAR\nSTARTCHAR U_6EF0\nENCODING 28400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2F80\n2500\n9FE0\n4880\n2F80\n2880\nCF80\n4500\n4520\n58E0\nENDCHAR\nSTARTCHAR U_6EF1\nENCODING 28401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n1020\n8E60\n4040\n3FE0\n2AA0\nCA40\n4AA0\n5320\n61E0\nENDCHAR\nSTARTCHAR U_6EF2\nENCODING 28402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n27A0\n1540\n8AA0\n4D60\n2280\n2D60\nC280\n4D60\n4080\n4700\nENDCHAR\nSTARTCHAR U_6EF3\nENCODING 28403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n2440\n8280\n4FE0\n1AA0\n2C60\nEBA0\n2AA0\n2BA0\n2860\nENDCHAR\nSTARTCHAR U_6EF4\nENCODING 28404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0280\n8FE0\n4920\n2FE0\n2920\nCBA0\n4AA0\n4BA0\n4860\nENDCHAR\nSTARTCHAR U_6EF5\nENCODING 28405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n1120\n8CC0\n5520\n2640\n3BC0\nC920\n4920\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_6EF6\nENCODING 28406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3F80\n04E0\n9FA0\n44A0\n3FA0\n28A0\nCEA0\n4A40\n52A0\n6520\nENDCHAR\nSTARTCHAR U_6EF7\nENCODING 28407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n21E0\n0100\n9FE0\n5820\n2D60\n2AA0\nCD60\n4AA0\n4D60\n4FE0\nENDCHAR\nSTARTCHAR U_6EF8\nENCODING 28408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2480\n1EE0\n8140\n5E40\n21E0\n3E40\nC040\n5E40\n5240\n5E40\nENDCHAR\nSTARTCHAR U_6EF9\nENCODING 28409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n2100\n0FE0\n8920\n4FC0\n2920\n2FE0\nCD40\n57E0\n6100\n4300\nENDCHAR\nSTARTCHAR U_6EFA\nENCODING 28410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n2DE0\n1640\nB540\n5480\n1360\n2000\nCA40\n5AA0\n68A0\n4780\nENDCHAR\nSTARTCHAR U_6EFB\nENCODING 28411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0440\n9280\n5FE0\n2A80\n2BE0\nCC80\n4BC0\n4880\n57E0\nENDCHAR\nSTARTCHAR U_6EFC\nENCODING 28412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3FE0\n0480\n8FC0\n54A0\n2000\n2780\nC480\n46A0\n49A0\n5060\nENDCHAR\nSTARTCHAR U_6EFD\nENCODING 28413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0940\n8FE0\n5940\n2FE0\n2D20\nCFE0\n5520\n57E0\n6520\nENDCHAR\nSTARTCHAR U_6EFE\nENCODING 28414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0440\n8FE0\n5440\n27C0\n2220\nC540\n5C80\n4640\n4420\nENDCHAR\nSTARTCHAR U_6EFF\nENCODING 28415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2FE0\n0440\n87C0\n4100\n2FE0\n2920\nCDA0\n4B60\n4DA0\n4960\nENDCHAR\nSTARTCHAR U_6F00\nENCODING 28416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\n7D40\n1260\nFDC0\n5540\n7C80\n4360\nBA40\n0B80\n1280\nE660\nENDCHAR\nSTARTCHAR U_6F01\nENCODING 28417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27C0\n0880\n9FE0\n4920\n2FE0\n2920\nC920\n4FE0\n5540\n64A0\nENDCHAR\nSTARTCHAR U_6F02\nENCODING 28418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2280\n0FE0\n8AA0\n4FE0\n2000\n27C0\nC000\n5FE0\n4940\n5320\nENDCHAR\nSTARTCHAR U_6F03\nENCODING 28419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n1420\n87E0\n44A0\n3FA0\n24A0\nCEA0\n5540\n64A0\n4D20\nENDCHAR\nSTARTCHAR U_6F04\nENCODING 28420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2540\n2FE0\n8900\n4BC0\n0900\n2FE0\nC900\n4BC0\n5100\n6FE0\nENDCHAR\nSTARTCHAR U_6F05\nENCODING 28421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2A80\n0540\n87C0\n4540\n27C0\n2540\nDFE0\n4580\n4940\n5120\nENDCHAR\nSTARTCHAR U_6F06\nENCODING 28422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0380\n8560\n4B80\n2560\n2D40\nC380\n4540\n5920\n4300\nENDCHAR\nSTARTCHAR U_6F07\nENCODING 28423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2880\n12E0\n8680\n4BE0\n3880\n2A80\nCAE0\n4A80\n4D80\n48E0\nENDCHAR\nSTARTCHAR U_6F08\nENCODING 28424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n27A0\n1540\n8A40\n57E0\n2800\n2FE0\nC100\n4580\n4960\n5320\nENDCHAR\nSTARTCHAR U_6F09\nENCODING 28425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0A80\n8FE0\n4AA0\n2FE0\n2C80\nCEE0\n5480\n56A0\n6460\nENDCHAR\nSTARTCHAR U_6F0A\nENCODING 28426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n0540\n9FE0\n5540\n2FE0\n2920\nDFE0\n4480\n4300\n5CE0\nENDCHAR\nSTARTCHAR U_6F0B\nENCODING 28427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5D00\n55C0\n1740\n9880\n5540\n37E0\n5A80\nD3C0\n5480\n51C0\n57E0\nENDCHAR\nSTARTCHAR U_6F0C\nENCODING 28428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n3FE0\n8880\n5FC0\n1240\n3FC0\n4200\nDFC0\n4F80\n4200\n7FE0\nENDCHAR\nSTARTCHAR U_6F0D\nENCODING 28429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n31A0\n1160\n9FE0\n5520\n3D60\n31A0\nDD20\n51E0\n5260\n5FE0\nENDCHAR\nSTARTCHAR U_6F0E\nENCODING 28430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2940\n12A0\n8420\n4880\n3A80\n2AE0\nCA80\n4A80\n4D80\n48E0\nENDCHAR\nSTARTCHAR U_6F0F\nENCODING 28431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n0FE0\n9800\n5FE0\n2900\n2FE0\nCDA0\n4B60\n5DA0\n4960\nENDCHAR\nSTARTCHAR U_6F10\nENCODING 28432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57C0\nFD40\n2340\nFAC0\n2420\n0400\nF6C0\n2500\n4480\n8C60\nENDCHAR\nSTARTCHAR U_6F11\nENCODING 28433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8800\n5FE0\n1440\n9D40\n5540\n1DE0\n20C0\nD4C0\n5940\n5340\n4E60\nENDCHAR\nSTARTCHAR U_6F12\nENCODING 28434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5BE0\n2A20\n0BE0\n9880\n53E0\n32A0\n3AA0\nCBE0\n4880\n68A0\n57E0\nENDCHAR\nSTARTCHAR U_6F13\nENCODING 28435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n0AA0\n8920\n5AA0\n2FE0\n2100\nCFE0\n4AA0\n4FA0\n4860\nENDCHAR\nSTARTCHAR U_6F14\nENCODING 28436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0820\n9FE0\n5100\n27C0\n2540\nC7C0\n4540\n47C0\n4C60\nENDCHAR\nSTARTCHAR U_6F15\nENCODING 28437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n3FE0\n0AA0\n8FE0\n5AA0\n2FE0\n2440\nC7C0\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6F16\nENCODING 28438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n5C80\n0AE0\nBF40\n4940\n1D40\n6480\nDE80\n4540\n5540\n4A20\nENDCHAR\nSTARTCHAR U_6F17\nENCODING 28439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2FC0\n2A40\n8B40\n4D40\n2AC0\n2FC0\nC240\n5520\n5440\n47C0\nENDCHAR\nSTARTCHAR U_6F18\nENCODING 28440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2800\n0FE0\n8AA0\n4E60\n2BE0\n2A20\nCBE0\n4A20\n53E0\n6220\nENDCHAR\nSTARTCHAR U_6F19\nENCODING 28441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n3FE0\n0A40\n8FC0\n4A40\n2FC0\n2220\nDFE0\n4880\n4480\n4180\nENDCHAR\nSTARTCHAR U_6F1A\nENCODING 28442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2800\n0BC0\n8A40\n5BC0\n2800\n2EE0\nCAA0\n4EE0\n4800\n4FE0\nENDCHAR\nSTARTCHAR U_6F1B\nENCODING 28443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A80\n1FC0\n0200\nBFE0\n4500\n2A80\n5A60\nE680\n4B80\n5240\n4400\nENDCHAR\nSTARTCHAR U_6F1C\nENCODING 28444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n3FE0\n0880\n9DC0\n4AA0\n2880\n2100\nCFC0\n4100\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_6F1D\nENCODING 28445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2220\n2AA0\n8660\n4AA0\n1100\n27E0\nE420\n27E0\n2420\n27E0\nENDCHAR\nSTARTCHAR U_6F1E\nENCODING 28446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FA0\n2A20\n0540\n8FC0\n5840\n2F40\n2BC0\nC840\n4FC0\n44A0\n58E0\nENDCHAR\nSTARTCHAR U_6F1F\nENCODING 28447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2540\n0FE0\n9820\n47C0\n2440\n27C0\nC100\n47C0\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_6F20\nENCODING 28448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3FE0\n0480\n8FC0\n4840\n2FC0\n2840\nDFE0\n4300\n4480\n5860\nENDCHAR\nSTARTCHAR U_6F21\nENCODING 28449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n0A40\n93C0\n5240\n2FE0\n2400\nCFE0\n52A0\n4520\n4AC0\nENDCHAR\nSTARTCHAR U_6F22\nENCODING 28450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2480\n0FC0\n8A40\n5FC0\n2200\n2FC0\nC200\n5FE0\n4480\n5860\nENDCHAR\nSTARTCHAR U_6F23\nENCODING 28451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\n2880\n0BE0\n82A0\n5BE0\n2AA0\n2BE0\nC880\n4BE0\n5480\n63E0\nENDCHAR\nSTARTCHAR U_6F24\nENCODING 28452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n3FE0\n0880\n9DC0\n6AA0\n2200\n3FE0\nC240\n4480\n4380\n5C60\nENDCHAR\nSTARTCHAR U_6F25\nENCODING 28453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n1460\n8920\n47C0\n2100\n2FE0\nC100\n47C0\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_6F26\nENCODING 28454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7DE0\n1120\nFEC0\n38C0\nD520\n7FE0\n4200\n7B60\n4A80\nB660\nENDCHAR\nSTARTCHAR U_6F27\nENCODING 28455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3F80\n04E0\n8F00\n5AE0\n2E20\n2A40\nCE80\n44A0\n5FA0\n44E0\nENDCHAR\nSTARTCHAR U_6F28\nENCODING 28456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n53C0\n1680\n8100\n5EE0\n4900\n4FC0\n4900\nCFC0\n5900\n67E0\nENDCHAR\nSTARTCHAR U_6F29\nENCODING 28457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n2500\n1FE0\n8A00\n4DE0\n3440\n3560\nD540\n5540\n56C0\n5460\nENDCHAR\nSTARTCHAR U_6F2A\nENCODING 28458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5480\n2BE0\n1940\n8A20\n4FE0\n2820\n2BA0\nDAA0\n6BA0\n4820\n5860\nENDCHAR\nSTARTCHAR U_6F2B\nENCODING 28459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n07C0\n9440\n5FE0\n2AA0\n2FE0\nC440\n4280\n4380\n4C60\nENDCHAR\nSTARTCHAR U_6F2C\nENCODING 28460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n9FE0\n4100\n2FE0\n2440\nC7C0\n4440\n47C0\n4C60\nENDCHAR\nSTARTCHAR U_6F2D\nENCODING 28461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2FE0\n0480\n8240\n4FE0\n2440\n2AA0\nDFE0\n4280\n4480\n4880\nENDCHAR\nSTARTCHAR U_6F2E\nENCODING 28462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0940\n8FE0\n4940\n2FC0\n2920\nCD40\n4B80\n5540\n6B20\nENDCHAR\nSTARTCHAR U_6F2F\nENCODING 28463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2940\n0FC0\n8940\n5FC0\n2200\n2F80\nC240\n5FE0\n4940\n5320\nENDCHAR\nSTARTCHAR U_6F30\nENCODING 28464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2920\n0FE0\n9000\n5EE0\n2AA0\n2EE0\nCAA0\n4EE0\n52A0\n6760\nENDCHAR\nSTARTCHAR U_6F31\nENCODING 28465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3F80\n0480\n9FE0\n5520\n3F40\n2440\nCE40\n5540\n64A0\n4520\nENDCHAR\nSTARTCHAR U_6F32\nENCODING 28466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5BE0\n2A00\n0BC0\n9A00\n53C0\n3200\n3FE0\nCAA0\n4AC0\n6B40\n5220\nENDCHAR\nSTARTCHAR U_6F33\nENCODING 28467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0280\n9FE0\n5440\n27C0\n2440\nC7C0\n4100\n5FE0\n4100\nENDCHAR\nSTARTCHAR U_6F34\nENCODING 28468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9240\n5FC0\n0200\n9FE0\n6020\n2F80\n4000\nDFE0\n4A80\n5240\n4600\nENDCHAR\nSTARTCHAR U_6F35\nENCODING 28469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\n0AE0\n9FA0\n44A0\n3FA0\n24A0\nCEA0\n5540\n64A0\n4D20\nENDCHAR\nSTARTCHAR U_6F36\nENCODING 28470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n1540\n9FE0\n4920\n2FE0\n2100\nC240\n5520\n5440\n63C0\nENDCHAR\nSTARTCHAR U_6F37\nENCODING 28471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n3FE0\n0AA0\n8AA0\n4EC0\n20A0\n3EA0\nC4A0\n5EE0\n4480\n4C80\nENDCHAR\nSTARTCHAR U_6F38\nENCODING 28472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n3F00\n0500\n9FE0\n5540\n3F40\n3540\nDF40\n4540\n5F40\n4540\nENDCHAR\nSTARTCHAR U_6F39\nENCODING 28473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n05C0\n8500\n5FE0\n2400\n27C0\nC800\n4FE0\n4AA0\n5560\nENDCHAR\nSTARTCHAR U_6F3A\nENCODING 28474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n8BA0\n4540\n2BA0\n2540\nCBA0\n4280\n4440\n5820\nENDCHAR\nSTARTCHAR U_6F3B\nENCODING 28475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2AA0\n0660\n9AA0\n4300\n2480\n3A60\nC500\n4640\n4080\n4700\nENDCHAR\nSTARTCHAR U_6F3C\nENCODING 28476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2FE0\n0500\n8500\n4FE0\n2900\n3FE0\nC900\n4FE0\n4900\n4FE0\nENDCHAR\nSTARTCHAR U_6F3D\nENCODING 28477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FC0\n5040\n1FC0\n9540\n7380\n3D40\n5500\nD7C0\n5900\n6FE0\n4100\nENDCHAR\nSTARTCHAR U_6F3E\nENCODING 28478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n3FE0\n0100\n8FC0\n4100\n3FE0\n2220\nCF40\n4580\n4940\n5320\nENDCHAR\nSTARTCHAR U_6F3F\nENCODING 28479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53C0\n5680\n7940\n17E0\nF240\n55C0\n8400\n76C0\n1500\n2480\nCC60\nENDCHAR\nSTARTCHAR U_6F40\nENCODING 28480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\n0FE0\n8000\n40E0\n2F00\n2540\nC540\n4BA0\n5120\n4100\nENDCHAR\nSTARTCHAR U_6F41\nENCODING 28481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4BE0\n7080\n4BE0\n3A20\n17E0\nFA20\n33E0\n5A20\n57E0\n9140\n3620\nENDCHAR\nSTARTCHAR U_6F42\nENCODING 28482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5240\n1FC0\nC880\n2500\n3FE0\n4500\nD540\n4D80\n4500\n5FE0\nENDCHAR\nSTARTCHAR U_6F43\nENCODING 28483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n29E0\n1340\n8480\n4BE0\n3E40\n2BC0\nCA40\n4BC0\n4A40\n4AC0\nENDCHAR\nSTARTCHAR U_6F44\nENCODING 28484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n7E80\n0880\nBFE0\n6B40\n3F40\n5940\nDC80\n6A80\n4940\n4A20\nENDCHAR\nSTARTCHAR U_6F45\nENCODING 28485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5200\n2FE0\n8500\n6FE0\n1900\n6FC0\nC900\n4FC0\n4900\n4FE0\nENDCHAR\nSTARTCHAR U_6F46\nENCODING 28486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n0280\n9FE0\n52A0\n2F00\n2240\nCFE0\n4500\n4940\n5320\nENDCHAR\nSTARTCHAR U_6F47\nENCODING 28487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8480\n5FE0\n0480\n8FC0\n4140\n3FE0\n2140\nCFC0\n4920\n4BA0\n5560\nENDCHAR\nSTARTCHAR U_6F48\nENCODING 28488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4AA0\n0AA0\n8FE0\n4200\n2D20\n4340\nCD80\n4340\n5D20\n4300\nENDCHAR\nSTARTCHAR U_6F49\nENCODING 28489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4940\n0FC0\n8840\n6FC0\n2840\n4FC0\nC920\n4DC0\n4920\n4CE0\nENDCHAR\nSTARTCHAR U_6F4A\nENCODING 28490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8440\n4640\n0960\n9F40\n44E0\n1EA0\n24A0\nCE40\n5540\n44A0\n4D20\nENDCHAR\nSTARTCHAR U_6F4B\nENCODING 28491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2A80\n11E0\n8EA0\n40A0\n29A0\n35A0\nCAA0\n4340\n5CA0\n4120\nENDCHAR\nSTARTCHAR U_6F4C\nENCODING 28492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n3FE0\n9520\n6880\n2FC0\n4480\n4FC0\nC200\n4FC0\n4200\n5FE0\nENDCHAR\nSTARTCHAR U_6F4D\nENCODING 28493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4940\n29E0\n1740\n9D40\n49E0\n2B40\n2DE0\nC140\n4D40\n71E0\n4100\nENDCHAR\nSTARTCHAR U_6F4E\nENCODING 28494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5580\n2E80\n04E0\n9FA0\n5520\n3520\n3F20\nD5A0\n5540\n55A0\n5320\nENDCHAR\nSTARTCHAR U_6F4F\nENCODING 28495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2280\n0FE0\n84A0\n5980\n2FE0\n2AA0\nCFE0\n4AA0\n4BA0\n4860\nENDCHAR\nSTARTCHAR U_6F50\nENCODING 28496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2FE0\n0900\n9FC0\n4900\n2FC0\n2900\nCFE0\n4940\n52A0\n52A0\nENDCHAR\nSTARTCHAR U_6F51\nENCODING 28497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5D40\n34A0\n0840\n9DE0\n4540\n3D60\n3000\nDFE0\n4540\n5480\n4B60\nENDCHAR\nSTARTCHAR U_6F52\nENCODING 28498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n2480\n0FE0\n9920\n4FE0\n2220\n2D40\nC280\n4DC0\n42A0\n4D80\nENDCHAR\nSTARTCHAR U_6F53\nENCODING 28499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n0920\n8FE0\n4920\n2FE0\n2140\nCFE0\n4540\n5460\n63C0\nENDCHAR\nSTARTCHAR U_6F54\nENCODING 28500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n24A0\n1EA0\n84A0\n5F60\n2480\n2F00\nC240\n5FE0\n4940\n5320\nENDCHAR\nSTARTCHAR U_6F55\nENCODING 28501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8800\n5FE0\n3540\n9540\n5FE0\n3540\n3540\nDFE0\n4D40\n52A0\n52A0\nENDCHAR\nSTARTCHAR U_6F56\nENCODING 28502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n4440\n1EE0\n8440\n7EE0\n2000\n4FC0\nCA40\n4FC0\n4820\n47E0\nENDCHAR\nSTARTCHAR U_6F57\nENCODING 28503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n27E0\n0D00\n97C0\n4500\n27C0\n2500\nCFE0\n4380\n4540\n5920\nENDCHAR\nSTARTCHAR U_6F58\nENCODING 28504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n3E40\n0A80\n9FE0\n4A80\n3240\n3FE0\nCA40\n4FC0\n4A40\n4FC0\nENDCHAR\nSTARTCHAR U_6F59\nENCODING 28505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n81C0\n4E40\n0A80\n9F80\n6880\n2FC0\n4840\nCFE0\n4020\n5AA0\n5560\nENDCHAR\nSTARTCHAR U_6F5A\nENCODING 28506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2240\n0FE0\n8240\n5FC0\n36A0\n3EE0\nD220\n5EE0\n5AA0\n6AA0\nENDCHAR\nSTARTCHAR U_6F5B\nENCODING 28507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n3540\n1FE0\n8C40\n4EE0\n3540\n2FC0\nC840\n4FC0\n4840\n4FC0\nENDCHAR\nSTARTCHAR U_6F5C\nENCODING 28508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n5DC0\n0880\nBDE0\n4880\n1540\n2FA0\nC880\n4F80\n4880\n4F80\nENDCHAR\nSTARTCHAR U_6F5D\nENCODING 28509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\n2840\n17E0\n8440\n47C0\n2000\n3FE0\nCAA0\n4660\n5BA0\n4660\nENDCHAR\nSTARTCHAR U_6F5E\nENCODING 28510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E80\n32E0\n1320\n9EC0\n44C0\n2520\n3620\nD5E0\n5520\n7720\n59E0\nENDCHAR\nSTARTCHAR U_6F5F\nENCODING 28511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n46C0\n2840\n0EC0\n8840\n4FC0\n2400\n2FE0\nD020\n4560\n4AA0\n4040\nENDCHAR\nSTARTCHAR U_6F60\nENCODING 28512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DC0\n3540\n1DC0\n9120\n5FE0\n2480\n2FC0\nC480\n5FE0\n4480\n5860\nENDCHAR\nSTARTCHAR U_6F61\nENCODING 28513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3F80\n0AE0\n8AA0\n4FA0\n20A0\n3EA0\nC440\n5F40\n44A0\n4D20\nENDCHAR\nSTARTCHAR U_6F62\nENCODING 28514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n0280\n8FE0\n5100\n27C0\n2540\nC7C0\n4540\n47C0\n4C60\nENDCHAR\nSTARTCHAR U_6F63\nENCODING 28515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n0EE0\n8AA0\n4EE0\n2920\n2FE0\nCAA0\n4920\n4AA0\n4860\nENDCHAR\nSTARTCHAR U_6F64\nENCODING 28516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n0EE0\n8AA0\n4EE0\n2BA0\n2920\nCBA0\n4920\n4BA0\n4860\nENDCHAR\nSTARTCHAR U_6F65\nENCODING 28517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FC0\n4500\n1FC0\n9540\n5FC0\n2A40\n4680\nDFE0\n4A80\n5260\n4200\nENDCHAR\nSTARTCHAR U_6F66\nENCODING 28518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n3FE0\n14A0\n8FC0\n5460\n27C0\n2440\nC7C0\n4540\n4920\n4300\nENDCHAR\nSTARTCHAR U_6F67\nENCODING 28519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n0FE0\n8AA0\n4920\n2FE0\n2440\nC7C0\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6F68\nENCODING 28520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5FC0\n1540\n9FC0\n40C0\n3F00\n4A40\nD780\n6A80\n5260\n6200\nENDCHAR\nSTARTCHAR U_6F69\nENCODING 28521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n0FE0\n8920\n4FE0\n2280\n2FE0\nC280\n5FE0\n4440\n4820\nENDCHAR\nSTARTCHAR U_6F6A\nENCODING 28522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n2EE0\n14A0\n8FA0\n44E0\n2A00\n37C0\nC440\n47C0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_6F6B\nENCODING 28523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2FE0\n0200\n8FE0\n4A40\n37A0\n2240\nCFE0\n4580\n4940\n5320\nENDCHAR\nSTARTCHAR U_6F6C\nENCODING 28524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n0FE0\n8540\n47C0\n2540\n27C0\nC100\n5FE0\n4100\n4100\nENDCHAR\nSTARTCHAR U_6F6D\nENCODING 28525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2280\n0FE0\n8AA0\n4FE0\n2440\n27C0\nC440\n5FE0\n4100\n4100\nENDCHAR\nSTARTCHAR U_6F6E\nENCODING 28526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n3EA0\n04A0\n9EE0\n52A0\n1EA0\n32E0\nDEA0\n44A0\n5EA0\n4560\nENDCHAR\nSTARTCHAR U_6F6F\nENCODING 28527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2040\n07C0\n8040\n4FE0\n24A0\n2EE0\nC040\n5FE0\n4840\n44C0\nENDCHAR\nSTARTCHAR U_6F70\nENCODING 28528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FC0\n0940\n9FE0\n4840\n2FC0\n2840\nCFC0\n4840\n4FC0\n5860\nENDCHAR\nSTARTCHAR U_6F71\nENCODING 28529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2200\n1FE0\n9020\n4FC0\n2000\n4FC0\nC840\n4FC0\n4480\n5FE0\nENDCHAR\nSTARTCHAR U_6F72\nENCODING 28530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4680\n3DA0\n04C0\n9FE0\n4520\n2DE0\n2F20\nD5E0\n6520\n4520\n4560\nENDCHAR\nSTARTCHAR U_6F73\nENCODING 28531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n0FE0\n8900\n4FE0\n2940\n2FE0\nCA20\n4FE0\n5220\n63E0\nENDCHAR\nSTARTCHAR U_6F74\nENCODING 28532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n35E0\n08A0\n97E0\n4480\n2DE0\n3520\nC7E0\n4520\n55E0\n4920\nENDCHAR\nSTARTCHAR U_6F75\nENCODING 28533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9480\n7E80\n14E0\nBF40\n6140\n3F40\n5280\nDE80\n5280\n5F60\n5240\nENDCHAR\nSTARTCHAR U_6F76\nENCODING 28534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\n0920\n8FE0\n5100\n2FE0\n2100\nCFE0\n4000\n4AA0\n4AA0\nENDCHAR\nSTARTCHAR U_6F77\nENCODING 28535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8EE0\n5540\n2220\n9FC0\n4240\n3FE0\n2240\nDFE0\n4200\n7FE0\n4200\nENDCHAR\nSTARTCHAR U_6F78\nENCODING 28536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n3FE0\n0440\n8EE0\n5540\n27C0\n2440\nC7C0\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_6F79\nENCODING 28537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5FC0\n0700\n8A80\n5240\n0A80\n5FC0\nCD80\n5AC0\n6AA0\n4880\nENDCHAR\nSTARTCHAR U_6F7A\nENCODING 28538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n0FE0\n8880\n4FE0\n2900\n2FE0\nCA40\n4FE0\n5240\n66C0\nENDCHAR\nSTARTCHAR U_6F7B\nENCODING 28539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\n0FE0\n8540\n4920\n3380\n2D60\nC540\n4380\n4540\n5B20\nENDCHAR\nSTARTCHAR U_6F7C\nENCODING 28540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0280\n8100\n5FE0\n2540\n27C0\nC540\n47C0\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_6F7D\nENCODING 28541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n3FE0\n0AA0\n86C0\n5FE0\n2000\n27C0\nC440\n47C0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_6F7E\nENCODING 28542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2540\n0FE0\n8540\n4920\n3040\n2FE0\nC940\n57E0\n4840\n5040\nENDCHAR\nSTARTCHAR U_6F7F\nENCODING 28543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n3220\n17A0\n92A0\n5FE0\n34A0\n3FE0\nD520\n57E0\n5120\n5FE0\nENDCHAR\nSTARTCHAR U_6F80\nENCODING 28544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2AA0\n1BA0\n8AA0\n5320\n2440\n2440\nD760\n5540\n5D40\n73E0\nENDCHAR\nSTARTCHAR U_6F81\nENCODING 28545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n4BC0\n0A00\n9FE0\n4000\n2440\n5760\nD540\n5F40\n71E0\n4000\nENDCHAR\nSTARTCHAR U_6F82\nENCODING 28546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n3540\n1FE0\n80A0\n4EA0\n21A0\n3EA0\nC4A0\n4E40\n44A0\n5F20\nENDCHAR\nSTARTCHAR U_6F83\nENCODING 28547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nC540\n26C0\nD540\n27C0\nC440\n0820\n7580\n1600\n2500\nCCC0\nENDCHAR\nSTARTCHAR U_6F84\nENCODING 28548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F40\n2AA0\n0440\n8FC0\n5020\n27C0\n2440\nC7C0\n4440\n4280\n4FE0\nENDCHAR\nSTARTCHAR U_6F85\nENCODING 28549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2140\n0FE0\n9140\n57C0\n2100\n3FE0\nC540\n47C0\n4540\n5FE0\nENDCHAR\nSTARTCHAR U_6F86\nENCODING 28550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n9FE0\n4440\n2EE0\n2440\nDFE0\n4480\n48A0\n5060\nENDCHAR\nSTARTCHAR U_6F87\nENCODING 28551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9540\n4EE0\n0440\n8AA0\n4FE0\n2A20\n2FC0\nC240\n4240\n4440\n58C0\nENDCHAR\nSTARTCHAR U_6F88\nENCODING 28552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n3F00\n15E0\nBD40\n4340\n3D40\n5540\nDC80\n5480\n5D40\n5620\nENDCHAR\nSTARTCHAR U_6F89\nENCODING 28553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E80\n2480\n1FE0\n8AA0\n4EA0\n2AA0\n2EA0\nCAA0\n5F40\n42A0\n4320\nENDCHAR\nSTARTCHAR U_6F8A\nENCODING 28554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n5FE0\n0500\n9FC0\n5540\n38C0\n5740\nD0C0\n7FE0\n4480\n4180\nENDCHAR\nSTARTCHAR U_6F8B\nENCODING 28555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n07C0\n9440\n57C0\n2100\n2FE0\nC440\n47C0\n4940\n5320\nENDCHAR\nSTARTCHAR U_6F8C\nENCODING 28556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AE0\n3F80\n0A80\n8EE0\n4AA0\n2EA0\n2AA0\nDFA0\n4AA0\n52A0\n6120\nENDCHAR\nSTARTCHAR U_6F8D\nENCODING 28557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n3F20\n04E0\n9F20\n4020\n3F20\n32A0\nDEA0\n4A20\n44A0\n5E40\nENDCHAR\nSTARTCHAR U_6F8E\nENCODING 28558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n3F20\n0440\n8E80\n4020\n0F40\n2980\nCF20\n4920\n4640\n5980\nENDCHAR\nSTARTCHAR U_6F8F\nENCODING 28559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\n2480\n8780\n4000\n3DE0\n5520\n5DE0\nC200\n5220\n5220\n5FE0\nENDCHAR\nSTARTCHAR U_6F90\nENCODING 28560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n0FE0\n8920\n52A0\n2FC0\n2000\nCFE0\n4280\n4440\n4FA0\nENDCHAR\nSTARTCHAR U_6F91\nENCODING 28561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4280\n0EE0\n8AA0\n5EE0\n2280\n4FE0\nC920\n4FE0\n4920\n4FE0\nENDCHAR\nSTARTCHAR U_6F92\nENCODING 28562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n2080\n1FE0\n8A20\n4BE0\n2A20\n2FE0\nDA20\n43E0\n4140\n4620\nENDCHAR\nSTARTCHAR U_6F93\nENCODING 28563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4600\n2BE0\n1240\n87C0\n4A40\n3BC0\n2900\nCBE0\n4D40\n4880\n4F60\nENDCHAR\nSTARTCHAR U_6F94\nENCODING 28564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4940\n2940\n1DE0\n9640\n57E0\n3C00\n35E0\nD520\n5D20\n55E0\n4120\nENDCHAR\nSTARTCHAR U_6F95\nENCODING 28565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n0280\n9FE0\n5540\n2FE0\n2540\nCFE0\n4100\n4FE0\n4100\nENDCHAR\nSTARTCHAR U_6F96\nENCODING 28566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n0EE0\n8AA0\n4EE0\n2920\n2FE0\nC920\n4BA0\n4D60\n4860\nENDCHAR\nSTARTCHAR U_6F97\nENCODING 28567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n0EE0\n8AA0\n4EE0\n2BA0\n2AA0\nCBA0\n4AA0\n4BA0\n4860\nENDCHAR\nSTARTCHAR U_6F98\nENCODING 28568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n5FE0\n8DC0\n5AA0\n2A80\n2000\n4FC0\nC840\n4FC0\n4840\n4FC0\nENDCHAR\nSTARTCHAR U_6F99\nENCODING 28569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n39C0\n1040\n9DC0\n5040\n3FC0\n4800\nDFE0\n4020\n55A0\n5540\nENDCHAR\nSTARTCHAR U_6F9A\nENCODING 28570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8400\n5FC0\n1AC0\n9FC0\n5740\n1AC0\n3FE0\nC400\n47C0\n4040\n40C0\nENDCHAR\nSTARTCHAR U_6F9B\nENCODING 28571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8780\n5900\n0FC0\nCA40\n1FC0\n2A40\n3FE0\nC880\n4F80\n4880\n4F80\nENDCHAR\nSTARTCHAR U_6F9C\nENCODING 28572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n2520\n1FE0\n9120\n5FE0\n3560\n3FE0\nD120\n53A0\n5560\n5160\nENDCHAR\nSTARTCHAR U_6F9D\nENCODING 28573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5FE0\n1240\n8CA0\n5380\n2FC0\n2A40\nCFC0\n4A40\n4FC0\n4A40\nENDCHAR\nSTARTCHAR U_6F9E\nENCODING 28574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2100\n0FE0\n8920\n4FC0\n2920\n2FE0\nCC40\n5FE0\n6280\n4C60\nENDCHAR\nSTARTCHAR U_6F9F\nENCODING 28575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n3FE0\n1040\n9740\n1540\n5FC0\n4200\nDFE0\n4680\n5A60\n4200\nENDCHAR\nSTARTCHAR U_6FA0\nENCODING 28576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FC0\n3540\n1DC0\n8500\n5DC0\n3540\n3DC0\nD540\n5DC0\n4520\n43E0\nENDCHAR\nSTARTCHAR U_6FA1\nENCODING 28577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n07C0\n8000\n4EE0\n2AA0\n2EE0\nC100\n5FE0\n4540\n5920\nENDCHAR\nSTARTCHAR U_6FA2\nENCODING 28578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2540\n1FE0\n94A0\n4780\n2000\n2FE0\nC920\n4FE0\n4920\n4FE0\nENDCHAR\nSTARTCHAR U_6FA3\nENCODING 28579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3EC0\n0520\n9E00\n53E0\n3E40\n33E0\nDE40\n4440\n5E40\n4440\nENDCHAR\nSTARTCHAR U_6FA4\nENCODING 28580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\n0FE0\n8100\n47C0\n2100\n2FE0\nC280\n4100\n4FE0\n4100\nENDCHAR\nSTARTCHAR U_6FA5\nENCODING 28581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n2EA0\n12A0\n9F20\n5540\n3FE0\n3540\nD5E0\n5F40\n5540\n6340\nENDCHAR\nSTARTCHAR U_6FA6\nENCODING 28582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n3480\n09E0\n9F20\n4BE0\n2920\n29E0\nC920\n49E0\n6940\n5220\nENDCHAR\nSTARTCHAR U_6FA7\nENCODING 28583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n0AA0\n8FE0\n4AA0\n3FE0\n2840\nCFC0\n4480\n4300\n5FE0\nENDCHAR\nSTARTCHAR U_6FA8\nENCODING 28584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2A40\n1120\n8000\n4FE0\n2940\n2940\nD5A0\n5520\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_6FA9\nENCODING 28585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n71C0\n4A40\n75C0\n4A40\n75C0\n4A40\nFFE0\n8220\n7B40\n1280\nE660\nENDCHAR\nSTARTCHAR U_6FAA\nENCODING 28586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n0FE0\n8920\n5540\n2AA0\n2540\nCFE0\n4080\n4300\n4080\nENDCHAR\nSTARTCHAR U_6FAB\nENCODING 28587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n0280\n97C0\n5540\n27C0\n2D40\nCFE0\n4960\n4FA0\n4860\nENDCHAR\nSTARTCHAR U_6FAC\nENCODING 28588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n25E0\n06A0\n8940\n4220\n27C0\n2440\nC7C0\n4440\n47C0\n4C60\nENDCHAR\nSTARTCHAR U_6FAD\nENCODING 28589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n0940\n8BE0\n5540\n39E0\n2B40\nD5E0\n5D40\n49E0\n5100\nENDCHAR\nSTARTCHAR U_6FAE\nENCODING 28590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n2440\n0BA0\n9000\n5FE0\n2AA0\n2FE0\nC440\n47C0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_6FAF\nENCODING 28591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n46E0\n24A0\n0E40\n92A0\n4D20\n2920\n3540\nDFE0\n4580\n4940\n5120\nENDCHAR\nSTARTCHAR U_6FB0\nENCODING 28592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2380\n0440\n9BA0\n5000\n2EE0\n2AA0\nCEE0\n4440\n4AA0\n5120\nENDCHAR\nSTARTCHAR U_6FB1\nENCODING 28593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBEE0\n62A0\n3EA0\nAAA0\n7F00\n2AE0\n6AA0\nBFA0\nA040\nCAA0\n9120\nENDCHAR\nSTARTCHAR U_6FB2\nENCODING 28594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AA0\n26C0\n0FE0\n8280\n4FE0\n2100\n2FE0\nC100\n4FE0\n4540\n4920\nENDCHAR\nSTARTCHAR U_6FB3\nENCODING 28595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FE0\n0D60\n8BA0\n4FE0\n2920\n2BA0\nCD60\n5FE0\n4480\n5860\nENDCHAR\nSTARTCHAR U_6FB4\nENCODING 28596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\n0FE0\n9000\n5FE0\n2440\n27C0\nC520\n4CC0\n5540\n4620\nENDCHAR\nSTARTCHAR U_6FB5\nENCODING 28597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9020\n49C0\n3F00\n9500\n7FE0\n2940\n7F40\nCD40\n5B40\n6940\n4A40\nENDCHAR\nSTARTCHAR U_6FB6\nENCODING 28598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n0AA0\n8BA0\n4820\n2FE0\n2440\nC7C0\n4440\n4440\n5FE0\nENDCHAR\nSTARTCHAR U_6FB7\nENCODING 28599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8F80\n4880\n0F80\n8880\n5FC0\n1540\n3FC0\nC200\n5FE0\n4480\n4980\nENDCHAR\nSTARTCHAR U_6FB8\nENCODING 28600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40A0\n2FE0\n8880\n4EA0\n2AA0\n2EC0\n5160\nE220\n5540\n5460\n63C0\nENDCHAR\nSTARTCHAR U_6FB9\nENCODING 28601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2480\n1FE0\n8AA0\n4FE0\n2800\n2BC0\nC800\n4FE0\n5420\n67E0\nENDCHAR\nSTARTCHAR U_6FBA\nENCODING 28602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0280\n8FE0\n4440\n27C0\n2440\nC7C0\n5540\n54A0\n63E0\nENDCHAR\nSTARTCHAR U_6FBB\nENCODING 28603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8440\n6280\n1FC0\n9200\n4540\n3380\n5D40\nD320\n5500\n7900\n47E0\nENDCHAR\nSTARTCHAR U_6FBC\nENCODING 28604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E40\n2BE0\n0AA0\n8E40\n49E0\n2E40\n2BE0\nDA40\n6A40\n4E40\n4A40\nENDCHAR\nSTARTCHAR U_6FBD\nENCODING 28605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n2100\n0FE0\n8A80\n4B20\n2FE0\n2900\nCEA0\n49C0\n56A0\n6120\nENDCHAR\nSTARTCHAR U_6FBE\nENCODING 28606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n47C0\n1100\n97E0\n4280\n37C0\n5100\nD7E0\n5100\n5900\n67E0\nENDCHAR\nSTARTCHAR U_6FBF\nENCODING 28607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n3FE0\n0440\n8EE0\n5540\n2440\n2FC0\nC000\n5FE0\n4940\n5320\nENDCHAR\nSTARTCHAR U_6FC0\nENCODING 28608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3E80\n12E0\n9EA0\n53A0\n3EA0\n28A0\nDFA0\n4A40\n52A0\n6520\nENDCHAR\nSTARTCHAR U_6FC1\nENCODING 28609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\n0FE0\n8400\n4FE0\n3220\n2FA0\nCAA0\n4FA0\n42A0\n4FE0\nENDCHAR\nSTARTCHAR U_6FC2\nENCODING 28610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0A40\n8FE0\n4AA0\n2FE0\n2AA0\nCFE0\n52C0\n66A0\n6AA0\nENDCHAR\nSTARTCHAR U_6FC3\nENCODING 28611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n8AA0\n4FE0\n2AA0\n2FE0\n2800\nCFE0\n4D40\n5480\n6660\nENDCHAR\nSTARTCHAR U_6FC4\nENCODING 28612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA7C0\n5440\n1740\n8540\n7FE0\n2820\n2BA0\nCAA0\n4BA0\n5400\n63E0\nENDCHAR\nSTARTCHAR U_6FC5\nENCODING 28613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n7FE0\n20A0\n8F80\n4080\n3FE0\n2220\nCF80\n4500\n4200\n4DC0\nENDCHAR\nSTARTCHAR U_6FC6\nENCODING 28614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8540\n4FE0\n2440\n27C0\n2440\nC7C0\n4440\n47C0\n4C60\nENDCHAR\nSTARTCHAR U_6FC7\nENCODING 28615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8540\n4BA0\n3FE0\n2820\n2BA0\nCAA0\n4BA0\n4820\n4FE0\nENDCHAR\nSTARTCHAR U_6FC8\nENCODING 28616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EC0\n2AA0\n8E80\n40E0\n3F80\n2AA0\n2EA0\nCA40\n4E40\n4A60\n5FA0\nENDCHAR\nSTARTCHAR U_6FC9\nENCODING 28617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n3D40\n95E0\n5F40\n1540\n15E0\n3D40\nD5E0\n5D40\n5540\n41E0\nENDCHAR\nSTARTCHAR U_6FCA\nENCODING 28618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n2500\n8FE0\n40A0\n2FE0\n2A80\n2AA0\nCEA0\n4B40\n52A0\n6520\nENDCHAR\nSTARTCHAR U_6FCB\nENCODING 28619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n3FE0\n8440\n4EE0\n3540\n2440\n3FE0\nC920\n49C0\n5500\n63E0\nENDCHAR\nSTARTCHAR U_6FCC\nENCODING 28620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n26A0\nF9C0\nAEA0\nF980\nA800\nFBE0\n2220\nFBE0\n2220\nFBE0\nENDCHAR\nSTARTCHAR U_6FCD\nENCODING 28621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3FE0\n8480\n4FE0\n2AA0\n3720\n2DA0\nC6C0\n5940\n68A0\n47A0\nENDCHAR\nSTARTCHAR U_6FCE\nENCODING 28622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n2AA0\n8BA0\n4AA0\n2BA0\n2AA0\n2FE0\nC280\n5EE0\n4AA0\n52A0\nENDCHAR\nSTARTCHAR U_6FCF\nENCODING 28623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2440\n8EE0\n4440\n2EE0\n2100\n24C0\nD4A0\n5520\n6640\n5BC0\nENDCHAR\nSTARTCHAR U_6FD0\nENCODING 28624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n4A40\n0FC0\n8220\n4FC0\n2280\n3FE0\nC440\n7FC0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_6FD1\nENCODING 28625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n88E0\n7F40\n09E0\nBE20\n6AA0\n2AA0\n7EA0\nCAA0\n5EA0\n6B40\n4A20\nENDCHAR\nSTARTCHAR U_6FD2\nENCODING 28626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n2E80\n8BE0\n5E20\n2AA0\n2AA0\n3AA0\nCAA0\n4680\n4940\n5220\nENDCHAR\nSTARTCHAR U_6FD3\nENCODING 28627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5FE0\n0480\n9FE0\n5540\n3FE0\n5540\nDFC0\n5580\n6D60\n5500\nENDCHAR\nSTARTCHAR U_6FD4\nENCODING 28628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2540\n8920\n4FE0\n2DA0\n2B60\n2DA0\nCB60\n4DA0\n4920\n4960\nENDCHAR\nSTARTCHAR U_6FD5\nENCODING 28629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n9FE0\n5820\n2FE0\n2540\n3EE0\nCAA0\n5FE0\n4D40\n52A0\nENDCHAR\nSTARTCHAR U_6FD6\nENCODING 28630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FC0\n5540\n1FC0\n8220\n5FC0\n2280\n5FE0\nF880\n4F80\n4880\n4F80\nENDCHAR\nSTARTCHAR U_6FD7\nENCODING 28631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8500\n5FE0\n0500\n8F80\n4A80\n3FE0\n2A80\nDFC0\n6AA0\n4B80\n4200\nENDCHAR\nSTARTCHAR U_6FD8\nENCODING 28632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8AA0\n4640\n2940\n2FE0\n2AA0\nDFE0\n4100\n4100\n4700\nENDCHAR\nSTARTCHAR U_6FD9\nENCODING 28633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAAA0\n5DC0\n0880\n9540\n5FE0\n1020\n2A40\nCA80\n5300\n4480\n5860\nENDCHAR\nSTARTCHAR U_6FDA\nENCODING 28634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2FC0\n8480\n4B40\n1FE0\n3220\n2FC0\nC700\n4A80\n5260\n4200\nENDCHAR\nSTARTCHAR U_6FDB\nENCODING 28635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n8280\n4FE0\n2820\n2FE0\n2340\nDC80\n42C0\n5CA0\n4320\nENDCHAR\nSTARTCHAR U_6FDC\nENCODING 28636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FC0\n8140\n4FE0\n2140\n3FE0\n2AA0\nCFE0\n4AA0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_6FDD\nENCODING 28637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3FE0\n8480\n4780\n2480\n3FE0\n2A40\nD520\n4FC0\n4940\n5320\nENDCHAR\nSTARTCHAR U_6FDE\nENCODING 28638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27C0\n9440\n5440\n2FE0\n2920\n2FE0\nC920\n5FE0\n4440\n4840\nENDCHAR\nSTARTCHAR U_6FDF\nENCODING 28639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n3FE0\n8540\n5EA0\n2AA0\n2AA0\n3200\nCFC0\n4840\n4FC0\n5040\nENDCHAR\nSTARTCHAR U_6FE0\nENCODING 28640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8440\n5FE0\n3020\n2FC0\n2940\nD280\n4DC0\n42A0\n5D20\nENDCHAR\nSTARTCHAR U_6FE1\nENCODING 28641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n8FE0\n4920\n2BA0\n2540\n2FE0\nC100\n4FE0\n4AA0\n4AE0\nENDCHAR\nSTARTCHAR U_6FE2\nENCODING 28642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2AA0\n8660\n4AA0\n2120\n3FC0\n2480\nCB40\n5FE0\n4100\n4100\nENDCHAR\nSTARTCHAR U_6FE3\nENCODING 28643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3F40\n8420\n5F40\n32C0\n3F40\n32C0\nDE60\n45C0\n5E40\n4440\nENDCHAR\nSTARTCHAR U_6FE4\nENCODING 28644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n3FE0\n8200\n5FE0\n2220\n2FC0\n2040\nDFE0\n5540\n5D40\n40C0\nENDCHAR\nSTARTCHAR U_6FE5\nENCODING 28645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8780\n4D00\n0600\nBFE0\n5220\n2FC0\n2A40\nCFC0\n4A40\n4FC0\n4480\nENDCHAR\nSTARTCHAR U_6FE6\nENCODING 28646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FC0\n2920\n9FE0\n4200\n3FE0\n2040\n2FC0\nC040\n5FC0\n5920\n6FC0\nENDCHAR\nSTARTCHAR U_6FE7\nENCODING 28647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5B20\n2A20\n9F20\n4AE0\n2420\n3F20\n24A0\nDF60\n4420\n5F20\n4060\nENDCHAR\nSTARTCHAR U_6FE8\nENCODING 28648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2500\n9FE0\n4440\n2AA0\n2440\n2AA0\nDEE0\n5540\n54A0\n63A0\nENDCHAR\nSTARTCHAR U_6FE9\nENCODING 28649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n8480\n4FE0\n3480\n27E0\n2480\nCFE0\n4240\n4180\n4E60\nENDCHAR\nSTARTCHAR U_6FEA\nENCODING 28650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n5EE0\n0940\n9DE0\n6960\n3FA0\n55E0\nDD00\n5500\n5D20\n54E0\nENDCHAR\nSTARTCHAR U_6FEB\nENCODING 28651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E80\n3480\n1EE0\n9280\n5F40\n3420\n3E00\nC000\n5FC0\n5540\n7FE0\nENDCHAR\nSTARTCHAR U_6FEC\nENCODING 28652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2100\n1FE0\n94A0\n4B40\n2480\n2FE0\nC440\n47C0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_6FED\nENCODING 28653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n3FE0\n0540\n8FC0\n4100\n2FE0\n2200\nC440\n4FE0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_6FEE\nENCODING 28654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2B60\n0FE0\n8940\n5FE0\n2880\n2BE0\nC880\n4FE0\n4940\n4A20\nENDCHAR\nSTARTCHAR U_6FEF\nENCODING 28655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2AA0\n0660\n8AA0\n6320\n2900\n2FE0\nD900\n4FC0\n4900\n4FE0\nENDCHAR\nSTARTCHAR U_6FF0\nENCODING 28656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4980\n2940\n13E0\n9D40\n4940\n2BE0\n3F40\nC1E0\n5540\n6B40\n41E0\nENDCHAR\nSTARTCHAR U_6FF1\nENCODING 28657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n1020\n8FC0\n4540\n3FC0\n2440\nC7C0\n4440\n47C0\n4C60\nENDCHAR\nSTARTCHAR U_6FF2\nENCODING 28658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n3FA0\n04A0\n9FA0\n5500\n3FE0\n24A0\nDEA0\n4440\n4EA0\n5520\nENDCHAR\nSTARTCHAR U_6FF3\nENCODING 28659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9480\n5FE0\n2480\n9FE0\n4CA0\n3360\n4FC0\nC840\n4FC0\n4840\n4FC0\nENDCHAR\nSTARTCHAR U_6FF4\nENCODING 28660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2EE0\n1440\n8AA0\n5FE0\n3120\n2F20\nC540\n4580\n4940\n5320\nENDCHAR\nSTARTCHAR U_6FF5\nENCODING 28661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5FE0\n1020\n8FC0\n4A40\n2FC0\n2D40\nCEC0\n5540\n57C0\n6480\nENDCHAR\nSTARTCHAR U_6FF6\nENCODING 28662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9DE0\n5520\n1DE0\n9520\n7FE0\n5220\nDFE0\n5220\n57A0\n54A0\n57E0\nENDCHAR\nSTARTCHAR U_6FF7\nENCODING 28663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0640\n7D80\n14E0\n2C80\nDFE0\n0480\nDFE0\n39A0\nD560\n5B20\n5160\nENDCHAR\nSTARTCHAR U_6FF8\nENCODING 28664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n7FE0\n0A80\n8500\n4F80\n38E0\n2F80\nC880\n4FC0\n5840\n6FC0\nENDCHAR\nSTARTCHAR U_6FF9\nENCODING 28665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FC0\n3740\n1FC0\n8200\n4FC0\n2200\n3FE0\nEAA0\n4FC0\n4200\n5FE0\nENDCHAR\nSTARTCHAR U_6FFA\nENCODING 28666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5D40\n37E0\n1540\n9CA0\n5760\n3D40\n37E0\nD520\n5D40\n48A0\n5760\nENDCHAR\nSTARTCHAR U_6FFB\nENCODING 28667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5C80\n37E0\n16A0\n9BE0\n5480\n37E0\n3620\nDFE0\n5220\n53E0\n5620\nENDCHAR\nSTARTCHAR U_6FFC\nENCODING 28668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5240\n2FA0\n1540\n8FA0\n5540\n3FE0\n2100\nDFE0\n4580\n4940\n5120\nENDCHAR\nSTARTCHAR U_6FFD\nENCODING 28669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8440\n4EE0\n0440\n8FE0\n6AA0\n27C0\n2540\nC6C0\n4540\n47C0\n4C60\nENDCHAR\nSTARTCHAR U_6FFE\nENCODING 28670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2200\n0FE0\n8A20\n4FE0\n2920\n2FE0\nC920\n57E0\n6D40\n47A0\nENDCHAR\nSTARTCHAR U_6FFF\nENCODING 28671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n3280\n1FE0\n9280\n57C0\n3540\n37C0\nD540\n5FE0\n6920\n4BA0\nENDCHAR\nSTARTCHAR U_7000\nENCODING 28672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n4440\n07C0\n8440\n5FE0\n2AA0\n57A0\n4400\nCFC0\n5300\n4CC0\nENDCHAR\nSTARTCHAR U_7001\nENCODING 28673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2FE0\n0100\n9FE0\n4840\n3FE0\n2840\nCFC0\n4A20\n4940\n4CE0\nENDCHAR\nSTARTCHAR U_7002\nENCODING 28674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8700\n4900\n1FC0\n9240\n5FC0\n3240\n5FC0\nE8A0\n4F80\n4880\n4F80\nENDCHAR\nSTARTCHAR U_7003\nENCODING 28675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n81E0\n5D20\n15E0\n9D20\n55E0\n1D00\n37E0\nDCA0\n4360\n54A0\n5360\nENDCHAR\nSTARTCHAR U_7004\nENCODING 28676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2FE0\n1540\n8EE0\n4AA0\n2EA0\n2AA0\nCEA0\n4AE0\n4D80\n4880\nENDCHAR\nSTARTCHAR U_7005\nENCODING 28677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2F60\n1540\n8AA0\n4FE0\n2820\n2FE0\nC100\n47C0\n4140\n5FE0\nENDCHAR\nSTARTCHAR U_7006\nENCODING 28678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n8FE0\n4AA0\n2FE0\n2440\nC7C0\n4440\n47C0\n4C60\nENDCHAR\nSTARTCHAR U_7007\nENCODING 28679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n1280\n9FE0\n5280\n3FE0\n3540\nD7C0\n5540\n57C0\n6C60\nENDCHAR\nSTARTCHAR U_7008\nENCODING 28680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9DC0\n5540\n0CC0\n9540\n7FE0\n2AA0\n2F80\nCA80\n5FE0\n4200\n4200\nENDCHAR\nSTARTCHAR U_7009\nENCODING 28681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n12A0\n8840\n4EC0\n2840\n2FC0\nC800\n5FE0\n6560\n4AA0\nENDCHAR\nSTARTCHAR U_700A\nENCODING 28682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49C0\n3D40\n1620\n95E0\n5D40\n3480\n3760\nC000\n5FC0\n5540\n7FE0\nENDCHAR\nSTARTCHAR U_700B\nENCODING 28683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n9960\n4580\n3FE0\n2940\n3FE0\nC940\n4FC0\n4940\n4FC0\nENDCHAR\nSTARTCHAR U_700C\nENCODING 28684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n9280\n5FE0\n12A0\n3FE0\n3480\nD7E0\n5480\n57E0\n6AA0\nENDCHAR\nSTARTCHAR U_700D\nENCODING 28685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n8AA0\n4BE0\n2AA0\n2FE0\n2A40\nCCA0\n57E0\n5080\n6FE0\nENDCHAR\nSTARTCHAR U_700E\nENCODING 28686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2FE0\n8480\n4FE0\n1AA0\n2FE0\n2140\nCFE0\n48A0\n4D60\n5220\nENDCHAR\nSTARTCHAR U_700F\nENCODING 28687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FA0\n34A0\n9DA0\n56A0\n09A0\n3FA0\n24A0\nDFA0\n55A0\n4F20\n7860\nENDCHAR\nSTARTCHAR U_7010\nENCODING 28688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8480\n5EC0\n04A0\nBFE0\n4A80\n3BA0\n4AA0\nDBC0\n4AA0\n4F60\n5220\nENDCHAR\nSTARTCHAR U_7011\nENCODING 28689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2840\n8FC0\n4840\n1FE0\n2480\n3FE0\nCD40\n53A0\n4540\n4B20\nENDCHAR\nSTARTCHAR U_7012\nENCODING 28690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5FE0\n1240\n9740\n6AA0\n5240\n7FE0\nD540\n5740\n5040\n5FC0\nENDCHAR\nSTARTCHAR U_7013\nENCODING 28691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9200\n5280\n2AE0\n8FA0\n50A0\n3720\n52A0\nD740\n5240\n5FA0\n5120\nENDCHAR\nSTARTCHAR U_7014\nENCODING 28692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n3FA0\n84A0\n5FA0\n1000\n2FE0\n24A0\nDFA0\n4440\n4EA0\n5520\nENDCHAR\nSTARTCHAR U_7015\nENCODING 28693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n3680\n95E0\n5F20\n05E0\n2D20\n35E0\nD720\n45E0\n4940\n5220\nENDCHAR\nSTARTCHAR U_7016\nENCODING 28694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n8FE0\n4920\n07C0\n2900\n2FE0\nD900\n4FE0\n4900\n4FE0\nENDCHAR\nSTARTCHAR U_7017\nENCODING 28695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n9120\n4FC0\n2100\n3FE0\n2AA0\nCFE0\n5140\n54A0\n67A0\nENDCHAR\nSTARTCHAR U_7018\nENCODING 28696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2200\n8FE0\n4A20\n0FC0\n2A20\n2FE0\nC940\n4FE0\n5AA0\n6FE0\nENDCHAR\nSTARTCHAR U_7019\nENCODING 28697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n3F20\n8BE0\n4520\n1F20\n25E0\n3F20\nC5E0\n4EC0\n5540\n6E60\nENDCHAR\nSTARTCHAR U_701A\nENCODING 28698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n3F40\n8820\n5FE0\n12A0\n3FE0\n32A0\nDFE0\n48A0\n5EA0\n49E0\nENDCHAR\nSTARTCHAR U_701B\nENCODING 28699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n8800\n4FE0\n0100\n3FE0\n36A0\nDDE0\n55A0\n56A0\n6D20\nENDCHAR\nSTARTCHAR U_701C\nENCODING 28700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBE80\n5480\n1E80\n83E0\n7EA0\n36A0\n2BE0\n7E80\nAA80\nAAA0\nAFE0\nENDCHAR\nSTARTCHAR U_701D\nENCODING 28701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2B60\n8A40\n4FE0\n0A40\n2FE0\n2A40\nD100\n55E0\n6500\n4FE0\nENDCHAR\nSTARTCHAR U_701E\nENCODING 28702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n7FC0\n0A80\n9DE0\n48A0\n7FE0\n54A0\nDDE0\n5480\n5C80\n5580\nENDCHAR\nSTARTCHAR U_701F\nENCODING 28703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n3FE0\n8A80\n5FC0\n0240\n3FE0\n32A0\nDEE0\n5220\n5EE0\n62A0\nENDCHAR\nSTARTCHAR U_7020\nENCODING 28704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n3760\n9540\n4AA0\n1FE0\n3220\n2F00\nC440\n5FA0\n4A80\n7660\nENDCHAR\nSTARTCHAR U_7021\nENCODING 28705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5C80\n35E0\n9640\n5BE0\n14A0\n36E0\n3AA0\nD2E0\n52A0\n52A0\n55E0\nENDCHAR\nSTARTCHAR U_7022\nENCODING 28706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\n2BE0\n8AA0\n47E0\n1A20\n2BE0\n2A20\nCBE0\n4940\n4A20\n57E0\nENDCHAR\nSTARTCHAR U_7023\nENCODING 28707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n28A0\n8FA0\n5240\n0CA0\n2A80\n3EE0\nC280\n4EE0\n4280\n5FE0\nENDCHAR\nSTARTCHAR U_7024\nENCODING 28708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n8AA0\n4FE0\n0520\n2380\n2D60\nC540\n4C80\n5640\n4C20\nENDCHAR\nSTARTCHAR U_7025\nENCODING 28709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n0660\n8AA0\n7FE0\n2280\n4280\nCFE0\n4AA0\n4BA0\n4860\nENDCHAR\nSTARTCHAR U_7026\nENCODING 28710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40A0\n3FE0\n88A0\n53E0\n2C80\n19E0\n6B20\nD9E0\n6D20\n49E0\n5920\nENDCHAR\nSTARTCHAR U_7027\nENCODING 28711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n3F80\n8AE0\n5F20\n0AE0\n2E80\n2AE0\nCE80\n4AE0\n4AA0\n4EE0\nENDCHAR\nSTARTCHAR U_7028\nENCODING 28712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n3EA0\n85E0\n5F20\n15E0\n1520\n3FE0\nC520\n4FE0\n54C0\n6520\nENDCHAR\nSTARTCHAR U_7029\nENCODING 28713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2440\n9FE0\n44A0\n0EE0\n35A0\n2EE0\nCAA0\n4BE0\n52C0\n6120\nENDCHAR\nSTARTCHAR U_702A\nENCODING 28714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\nABE0\nFF40\nA880\nFD60\n1200\n3F80\n20A0\n7FC0\n1500\nECE0\nENDCHAR\nSTARTCHAR U_702B\nENCODING 28715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n3FA0\n84A0\n5FA0\n1400\n2AE0\n3EA0\nCAA0\n5F40\n56A0\n6520\nENDCHAR\nSTARTCHAR U_702C\nENCODING 28716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n89E0\n5E80\n09E0\nBF20\n6BE0\n3F20\n5DE0\nDB20\n69E0\n4920\n4A20\nENDCHAR\nSTARTCHAR U_702D\nENCODING 28717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n5D40\n0BE0\nBE00\n6BA0\n3EA0\n2BA0\nFEA0\n4BA0\n7EA0\n4AE0\nENDCHAR\nSTARTCHAR U_702E\nENCODING 28718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n4200\n1FE0\nBAA0\n6700\n2AE0\n4880\nFDE0\n5DC0\n6AA0\n4880\nENDCHAR\nSTARTCHAR U_702F\nENCODING 28719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n3660\n9440\n4AA0\n1FE0\n34A0\n2780\nC000\n4FC0\n4840\n4FC0\nENDCHAR\nSTARTCHAR U_7030\nENCODING 28720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBFE0\n5540\n1920\nBFE0\n6920\n2D60\n3BA0\n4960\nCDA0\n4B60\n5920\nENDCHAR\nSTARTCHAR U_7031\nENCODING 28721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\n8FE0\n4A00\n2F20\n2AA0\n2DA0\nCAA0\n57A0\n5220\n6D60\nENDCHAR\nSTARTCHAR U_7032\nENCODING 28722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4C80\n3280\nA1E0\n5EA0\n00A0\n7EA0\n6AA0\nBEA0\n9340\nACA0\n8520\nENDCHAR\nSTARTCHAR U_7033\nENCODING 28723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2FE0\n8540\n4FE0\n2AA0\n2FE0\n2A00\nCBE0\n4A00\n57E0\n6AA0\nENDCHAR\nSTARTCHAR U_7034\nENCODING 28724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DE0\n3520\n9DE0\n5520\n3DE0\n2840\n36A0\nDFE0\n4480\n4380\n5E60\nENDCHAR\nSTARTCHAR U_7035\nENCODING 28725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4940\n2FE0\n9540\n5920\n2FC0\n2A40\n5FE0\n4480\nDFE0\n4480\n5860\nENDCHAR\nSTARTCHAR U_7036\nENCODING 28726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n7DE0\n2A00\nA9C0\n7D40\n25C0\n7C00\n6BE0\nAAA0\nBEA0\n83E0\nENDCHAR\nSTARTCHAR U_7037\nENCODING 28727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2AA0\n8660\n4AA0\n2FE0\n2920\n2FE0\nC240\n5FE0\n4480\n5860\nENDCHAR\nSTARTCHAR U_7038\nENCODING 28728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AC0\n35A0\n9FE0\n4A80\n3BA0\n2AA0\n3BA0\nCA40\n7B60\n4A60\n5FA0\nENDCHAR\nSTARTCHAR U_7039\nENCODING 28729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n27C0\n8820\n5FE0\n2AA0\n2FE0\n2000\nCFE0\n4AA0\n4FE0\n4AA0\nENDCHAR\nSTARTCHAR U_703A\nENCODING 28730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\n2900\n9FC0\n4840\n2FC0\n2880\n5FE0\nC940\n4FC0\n4520\n59E0\nENDCHAR\nSTARTCHAR U_703B\nENCODING 28731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F60\n2440\n9FE0\n5540\n1F40\n3540\n5F40\nCA60\n5F40\n4AA0\n5120\nENDCHAR\nSTARTCHAR U_703C\nENCODING 28732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n8AA0\n4EE0\n2280\n2FE0\n2280\nDFE0\n44A0\n5D40\n4620\nENDCHAR\nSTARTCHAR U_703D\nENCODING 28733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n7FE0\n2520\n9FC0\n4500\n3FE0\n4880\nDFC0\n6220\n4B80\n77E0\nENDCHAR\nSTARTCHAR U_703E\nENCODING 28734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n8EE0\n4AA0\n2EE0\n2920\n4FE0\nCAA0\n4FE0\n4BA0\n4D60\nENDCHAR\nSTARTCHAR U_703F\nENCODING 28735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F40\n35E0\n9FA0\n5540\n3FA0\n2100\n4F80\nC440\n5FC0\n4540\n5B20\nENDCHAR\nSTARTCHAR U_7040\nENCODING 28736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n8FE0\n4920\n22E0\n24A0\n5FE0\nC4A0\n4EE0\n55A0\n44E0\nENDCHAR\nSTARTCHAR U_7041\nENCODING 28737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n32A0\n9EE0\n52A0\n3FE0\n34A0\n57A0\nD4E0\n5FA0\n55A0\n5B60\nENDCHAR\nSTARTCHAR U_7042\nENCODING 28738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FA0\n2A40\n9FE0\n54A0\n3FE0\n3240\n5FE0\nD240\n5EC0\n5440\n5AC0\nENDCHAR\nSTARTCHAR U_7043\nENCODING 28739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n8AA0\n4FE0\n2AA0\n3FE0\n4840\nCFC0\n4880\n4500\n5FE0\nENDCHAR\nSTARTCHAR U_7044\nENCODING 28740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2440\n87C0\n4440\n3FE0\n2040\n4FE0\nCAA0\n4EE0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_7045\nENCODING 28741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2A40\n8FC0\n4A40\n3FE0\n2AA0\n3FE0\nEAA0\n7FE0\n4200\n7FE0\nENDCHAR\nSTARTCHAR U_7046\nENCODING 28742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3FE0\n8480\n5E80\n34E0\n3F40\n5220\nD400\n5FE0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_7047\nENCODING 28743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n94A0\n4CC0\n1FE0\n8480\n7FE0\n2A00\n4EE0\nCAA0\n4E40\n4BA0\n5E20\nENDCHAR\nSTARTCHAR U_7048\nENCODING 28744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n8EE0\n4AA0\n2EE0\n2AA0\n4FE0\nD900\n4FC0\n4900\n4FE0\nENDCHAR\nSTARTCHAR U_7049\nENCODING 28745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9480\n6B40\n95E0\n4B40\n1FE0\n5140\n7F40\nA9E0\nBF40\nA340\nBFE0\nENDCHAR\nSTARTCHAR U_704A\nENCODING 28746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n3540\n9FE0\n5640\n24A0\n3FE0\n4440\nCFE0\n4AA0\n4FE0\n4920\nENDCHAR\nSTARTCHAR U_704B\nENCODING 28747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5FE0\n1540\n9FC0\n5400\n57E0\n5AA0\nD200\n6FE0\n6480\n4FC0\nENDCHAR\nSTARTCHAR U_704C\nENCODING 28748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2440\n8EE0\n4AA0\n2EE0\n2500\n4FE0\nD900\n4FE0\n4900\n4FE0\nENDCHAR\nSTARTCHAR U_704D\nENCODING 28749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBDE0\n6520\n3DE0\nA520\n7FE0\n2960\n6AA0\n7EA0\nA960\nB220\nA060\nENDCHAR\nSTARTCHAR U_704E\nENCODING 28750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A80\n7FE0\n2A80\nBFE0\n6A80\n3F40\n57E0\n5EA0\nD6A0\n4AA0\n7FE0\nENDCHAR\nSTARTCHAR U_704F\nENCODING 28751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n3480\n9FE0\n5220\n5EA0\n6AA0\n5EA0\n92A0\n9EA0\nAD40\nCA20\nENDCHAR\nSTARTCHAR U_7050\nENCODING 28752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n94A0\n4FC0\n0CC0\n9320\n7FE0\n2520\n4F80\nF260\n4FC0\n4A80\n5FE0\nENDCHAR\nSTARTCHAR U_7051\nENCODING 28753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2000\n8FE0\n4AA0\n2FE0\n2AA0\n4FE0\nCC80\n56C0\n54A0\n66E0\nENDCHAR\nSTARTCHAR U_7052\nENCODING 28754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n2FE0\n8240\n5FE0\n2960\n37C0\n4440\nC7C0\n4440\n47C0\n4C60\nENDCHAR\nSTARTCHAR U_7053\nENCODING 28755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nAEA0\n4440\nAEA0\nFBE0\nAEA0\n0400\n7680\n2500\nD4E0\n0800\nENDCHAR\nSTARTCHAR U_7054\nENCODING 28756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A80\n7FE0\n2A40\nBFE0\n6AA0\n3FA0\n1EE0\n5280\nDE80\n4AA0\n5F60\nENDCHAR\nSTARTCHAR U_7055\nENCODING 28757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3E40\n95E0\n5B40\n3540\n3FE0\n5540\nD540\n5BE0\n5740\n51E0\nENDCHAR\nSTARTCHAR U_7056\nENCODING 28758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n3FE0\n9480\n5FE0\n35A0\n5EE0\n5280\nDEE0\n5280\n6EE0\n4280\nENDCHAR\nSTARTCHAR U_7057\nENCODING 28759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n4BE0\n3E20\nABA0\n6AA0\n2BE0\n7FC0\n8940\n8DC0\nBB40\n83E0\nENDCHAR\nSTARTCHAR U_7058\nENCODING 28760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4B40\n3FE0\n8940\n4F40\n05E0\n3F40\n5540\nFFE0\n4940\n5540\n63E0\nENDCHAR\nSTARTCHAR U_7059\nENCODING 28761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A80\n5FE0\n54A0\n8FC0\n4A40\n2FC0\n2200\nCFC0\n4200\n5FE0\n52A0\nENDCHAR\nSTARTCHAR U_705A\nENCODING 28762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2920\n8AA0\n4D60\n0AA0\n1FE0\n34A0\nC780\n4480\n47A0\n5CE0\nENDCHAR\nSTARTCHAR U_705B\nENCODING 28763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n2520\n3DE0\nA720\n7AE0\n2FA0\n6AA0\nAFA0\nA220\nAFA0\nA260\nENDCHAR\nSTARTCHAR U_705C\nENCODING 28764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n3FE0\n0800\n8FC0\n4880\n3FC0\n5540\nDF40\n5540\n5F60\n6520\nENDCHAR\nSTARTCHAR U_705D\nENCODING 28765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n3280\n9FE0\n5120\n1FE0\n2520\n5FE0\nD120\n5FE0\n5C40\n6AA0\nENDCHAR\nSTARTCHAR U_705E\nENCODING 28766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2100\n9FE0\n52A0\n1FE0\n2AA0\n5FE0\nD4A0\n7FE0\n44A0\n4560\nENDCHAR\nSTARTCHAR U_705F\nENCODING 28767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n3020\n9FE0\n5540\n1FE0\n1AA0\n37E0\nDA20\n5FA0\n62A0\n4FE0\nENDCHAR\nSTARTCHAR U_7060\nENCODING 28768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F00\n35E0\n9E80\n55E0\n3520\n2FE0\n2880\nCF80\n4880\n4FA0\n58E0\nENDCHAR\nSTARTCHAR U_7061\nENCODING 28769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2480\n8EE0\n4AA0\n1FE0\n2920\n4FE0\nCAA0\n4FE0\n4BA0\n4D60\nENDCHAR\nSTARTCHAR U_7062\nENCODING 28770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2940\n9FE0\n5540\n3DC0\n2480\n3FC0\nC480\n5FE0\n4CA0\n5660\nENDCHAR\nSTARTCHAR U_7063\nENCODING 28771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4940\n3FE0\n8840\n5FA0\n2AC0\n36A0\n2FE0\nC800\n4FE0\n4020\n41C0\nENDCHAR\nSTARTCHAR U_7064\nENCODING 28772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2BC0\n9C60\n4BC0\n3EE0\n4BA0\n56C0\nC100\n5FE0\n4540\n5920\nENDCHAR\nSTARTCHAR U_7065\nENCODING 28773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n1500\nFFE0\n8A20\nFBE0\n2080\nAAA0\n71C0\nAEA0\nENDCHAR\nSTARTCHAR U_7066\nENCODING 28774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n3240\n9EE0\n52A0\n3EE0\n4AA0\n5FE0\nD4A0\n5FE0\n4AC0\n5520\nENDCHAR\nSTARTCHAR U_7067\nENCODING 28775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAA80\n7EE0\n2B40\nBEE0\n6AA0\n3FA0\n52E0\nDE80\n5280\n4CA0\n7F60\nENDCHAR\nSTARTCHAR U_7068\nENCODING 28776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n3FE0\n8B40\n5EA0\n31E0\n3F20\n51E0\nDF20\n49E0\n7F40\n4A20\nENDCHAR\nSTARTCHAR U_7069\nENCODING 28777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n3F40\n95E0\n5F40\n15E0\n3FA0\n52E0\nDE00\n57E0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_706A\nENCODING 28778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5240\n3FE0\n1240\nAFA0\n7FE0\n2420\n5BC0\n5520\nDFC0\n5420\n5FC0\nENDCHAR\nSTARTCHAR U_706B\nENCODING 28779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n2440\n2480\n2500\n4400\n0A00\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_706C\nENCODING 28780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n0000\n0000\n0000\n0000\n0000\n0000\n5240\n4920\n8920\n0000\nENDCHAR\nSTARTCHAR U_706D\nENCODING 28781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n0400\n2440\n2440\n2480\n4A00\n0A00\n1100\n20E0\nC040\nENDCHAR\nSTARTCHAR U_706E\nENCODING 28782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2440\n4580\n0A00\n3180\nC060\n1200\n1200\n1200\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_706F\nENCODING 28783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n17E0\n5480\n5880\n5080\n9080\n1080\n1080\n2880\n4480\n8180\nENDCHAR\nSTARTCHAR U_7070\nENCODING 28784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n0A00\n1200\n1240\n2A80\n4B00\n9200\n0500\n1880\n6060\nENDCHAR\nSTARTCHAR U_7071\nENCODING 28785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\nA920\nB120\nA120\n2120\n2120\n3220\n2A20\n4520\n88C0\nENDCHAR\nSTARTCHAR U_7072\nENCODING 28786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2040\n6A40\n6A40\nB240\n2240\n3240\n2A40\n4A40\n4140\n8080\nENDCHAR\nSTARTCHAR U_7073\nENCODING 28787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FC0\n4040\n8840\n2940\n2A40\n4840\n1440\n2240\n4040\n0180\nENDCHAR\nSTARTCHAR U_7074\nENCODING 28788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n2900\nB100\nA100\nA100\n2100\n3100\n4900\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_7075\nENCODING 28789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0080\n3F80\n0080\n3F80\n0400\n1440\n2480\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7076\nENCODING 28790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2100\nA900\nB7C0\nA100\n2100\n2100\n5100\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_7077\nENCODING 28791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n4B00\n1100\n60E0\n0900\nFFE0\n0900\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_7078\nENCODING 28792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1F00\n2200\n4500\n18E0\nE440\n1480\n6500\n0A00\n3100\nC0E0\nENDCHAR\nSTARTCHAR U_7079\nENCODING 28793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n2A00\n6A00\n73E0\nAE00\n2200\n5200\n4A00\n4A20\n81E0\nENDCHAR\nSTARTCHAR U_707A\nENCODING 28794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n22A0\n2AE0\nB3A0\nAEA0\nA2A0\n22E0\n3280\n2A20\n4220\n81E0\nENDCHAR\nSTARTCHAR U_707B\nENCODING 28795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\nFFE0\n0000\n0400\n2480\n4680\n0900\n30E0\nC040\nENDCHAR\nSTARTCHAR U_707C\nENCODING 28796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n2BE0\nB420\nAA20\nA120\n2120\n3020\n2820\n4120\n80C0\nENDCHAR\nSTARTCHAR U_707D\nENCODING 28797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n4900\n4900\n2480\n0400\n2480\n2500\n4A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_707E\nENCODING 28798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n0400\n2480\n2480\n4500\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_707F\nENCODING 28799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n2AA0\nB2A0\nA2A0\nA2A0\n22A0\n32A0\n4AA0\n4BE0\n8220\nENDCHAR\nSTARTCHAR U_7080\nENCODING 28800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\n2100\n2A00\nB400\nA7E0\nA2A0\n24A0\n3120\n4A20\n4D20\n80C0\nENDCHAR\nSTARTCHAR U_7081\nENCODING 28801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n4400\n7FC0\n0A00\n1220\nE1E0\n0000\n5240\n4920\n8920\nENDCHAR\nSTARTCHAR U_7082\nENCODING 28802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\n2A40\nB440\nA520\nA900\n2100\n3200\n4A40\n47A0\n8220\nENDCHAR\nSTARTCHAR U_7083\nENCODING 28803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1180\n2040\n5FA0\n0880\n1380\n6400\n2480\n2500\n4A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_7084\nENCODING 28804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2240\n2A40\nB240\nA240\nA7C0\n2240\n3240\n4A40\n4240\n8FE0\nENDCHAR\nSTARTCHAR U_7085\nENCODING 28805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2040\n3FC0\n2040\n3FC0\n0440\n2480\n2500\n4A00\n1180\n6060\nENDCHAR\nSTARTCHAR U_7086\nENCODING 28806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nB440\nA440\nA280\n2280\n3100\n4900\n4280\n8C60\nENDCHAR\nSTARTCHAR U_7087\nENCODING 28807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1100\n1500\n5BE0\n5240\n9640\n1280\n2900\n2980\n4240\n8420\nENDCHAR\nSTARTCHAR U_7088\nENCODING 28808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\n2480\n6C80\n74E0\nA800\n2780\n2480\n5300\n4B00\n8480\n1860\nENDCHAR\nSTARTCHAR U_7089\nENCODING 28809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n2FE0\nB420\nA420\nA7E0\n2400\n5400\n5400\n4800\n9000\nENDCHAR\nSTARTCHAR U_708A\nENCODING 28810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n2BE0\nB220\nA540\nA100\n2100\n5100\n4A80\n4440\n8820\nENDCHAR\nSTARTCHAR U_708B\nENCODING 28811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2900\n7300\n6300\nA540\n2920\n5120\n4900\n8100\n0100\nENDCHAR\nSTARTCHAR U_708C\nENCODING 28812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n6A80\n7460\nAA80\n2280\n2280\n5280\n4A80\n8480\n0880\nENDCHAR\nSTARTCHAR U_708D\nENCODING 28813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\n2400\n6FC0\n7440\nA640\n2540\n3480\n4880\n4940\n9620\nENDCHAR\nSTARTCHAR U_708E\nENCODING 28814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2480\n2500\n4A00\n3180\nC460\n2480\n2500\n4A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_708F\nENCODING 28815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n6A40\n7240\nAA80\n2A00\n2200\n5500\n4480\n8860\n1040\nENDCHAR\nSTARTCHAR U_7090\nENCODING 28816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2900\n2FE0\n7100\n67C0\nA100\n3100\n4FE0\n4100\n8100\n0100\nENDCHAR\nSTARTCHAR U_7091\nENCODING 28817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2FE0\nB100\nA100\nA380\n2540\n3520\n4920\n4900\n8100\nENDCHAR\nSTARTCHAR U_7092\nENCODING 28818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2940\nB520\nA500\nA920\n2120\n3140\n4880\n4300\n8C00\nENDCHAR\nSTARTCHAR U_7093\nENCODING 28819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2240\n2940\nB040\nA240\nA140\n2060\n37C0\n4840\n4840\n8040\nENDCHAR\nSTARTCHAR U_7094\nENCODING 28820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2FC0\nB140\nA140\nAFE0\n2100\n3100\n4A80\n4440\n8820\nENDCHAR\nSTARTCHAR U_7095\nENCODING 28821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nB000\nA380\nA280\n2280\n3280\n4AA0\n44A0\n8860\nENDCHAR\nSTARTCHAR U_7096\nENCODING 28822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2900\nB540\nA540\nA540\n27C0\n3100\n4920\n4920\n80E0\nENDCHAR\nSTARTCHAR U_7097\nENCODING 28823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n0900\nFFE0\n0900\n0F00\n0400\n1440\n2580\n0A00\n1100\n60E0\nENDCHAR\nSTARTCHAR U_7098\nENCODING 28824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2380\n2A00\nB200\nA3E0\nA240\n2240\n3240\n4A40\n4C40\n9040\nENDCHAR\nSTARTCHAR U_7099\nENCODING 28825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1F80\n3100\n4A00\n2C00\nF480\n1500\n2A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_709A\nENCODING 28826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9520\n9540\nF580\n9900\n9100\nF100\n9280\n0440\n1820\nENDCHAR\nSTARTCHAR U_709B\nENCODING 28827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n2480\n4B00\n1180\n2A60\nD200\n3280\nD300\n1E20\n1220\n11E0\nENDCHAR\nSTARTCHAR U_709C\nENCODING 28828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2900\nB7E0\nA100\nAFE0\n2120\n3120\n4960\n4900\n8100\nENDCHAR\nSTARTCHAR U_709D\nENCODING 28829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2C40\nB020\nA3C0\nA240\n2240\n32C0\n4A20\n4A20\n81E0\nENDCHAR\nSTARTCHAR U_709E\nENCODING 28830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2200\n2FE0\n6A00\n7200\nA280\n2240\n3240\n4A00\n4200\n8200\nENDCHAR\nSTARTCHAR U_709F\nENCODING 28831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2C40\nB440\nA7C0\nA440\n2440\n37C0\n4C40\n4000\n8FE0\nENDCHAR\nSTARTCHAR U_70A0\nENCODING 28832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n24A0\n2CA0\n77E0\n64A0\nA4A0\n27E0\n5080\n4880\n8080\n0080\nENDCHAR\nSTARTCHAR U_70A1\nENCODING 28833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\n2880\nB080\nA480\nA4E0\n2480\n3480\n4C80\n4480\n8FE0\nENDCHAR\nSTARTCHAR U_70A2\nENCODING 28834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2140\n2900\nB7E0\nA100\n2380\n3540\n4D20\n4920\n9100\n0100\nENDCHAR\nSTARTCHAR U_70A3\nENCODING 28835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2040\n6840\n7740\nA540\n2740\n5040\n5040\n4140\n8080\nENDCHAR\nSTARTCHAR U_70A4\nENCODING 28836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\n2920\nB2A0\nA440\nA800\n23E0\n3220\n4A20\n43E0\n8220\nENDCHAR\nSTARTCHAR U_70A5\nENCODING 28837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n32A0\nBFE0\nAA80\nAFE0\n22A0\n52A0\n54E0\n8480\n0880\nENDCHAR\nSTARTCHAR U_70A6\nENCODING 28838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2240\n2FE0\nAA00\nB3C0\nA240\n2240\n3580\n5500\n4AE0\n9440\nENDCHAR\nSTARTCHAR U_70A7\nENCODING 28839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\n2C00\n6900\n75C0\nA740\n2D40\n2540\n5540\n54A0\n83E0\nENDCHAR\nSTARTCHAR U_70A8\nENCODING 28840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2820\nA000\nAA00\nB240\n2380\n5200\n4A20\n8A20\n81E0\nENDCHAR\nSTARTCHAR U_70A9\nENCODING 28841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2C40\nB120\nA080\nA7E0\n2040\n3080\n4B00\n4080\n8040\nENDCHAR\nSTARTCHAR U_70AA\nENCODING 28842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n24A0\n6CA0\n74A0\nA7E0\n2080\n24A0\n54A0\n4CA0\n87E0\n0000\nENDCHAR\nSTARTCHAR U_70AB\nENCODING 28843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n2FE0\nB100\nA240\nA780\n2080\n3100\n4A40\n47E0\n8220\nENDCHAR\nSTARTCHAR U_70AC\nENCODING 28844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\n2C00\nB7C0\nA440\nA440\n27C0\n3440\n4C00\n4400\n87E0\nENDCHAR\nSTARTCHAR U_70AD\nENCODING 28845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n1000\n7FE0\n1200\n1A40\n2A80\n4500\n8880\n3060\nENDCHAR\nSTARTCHAR U_70AE\nENCODING 28846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\n2C20\nB7A0\nACA0\nA4A0\n27A0\n3420\n4CC0\n4420\n83E0\nENDCHAR\nSTARTCHAR U_70AF\nENCODING 28847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n2820\nBBA0\nAAA0\nAAA0\n2AA0\n2BA0\n5820\n4820\n88E0\nENDCHAR\nSTARTCHAR U_70B0\nENCODING 28848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FC0\n4040\nBE40\n2240\n3E80\n2020\n2020\n1FE0\n4A40\n8920\nENDCHAR\nSTARTCHAR U_70B1\nENCODING 28849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1080\n7FC0\n0040\n3F80\n2080\n3F80\n2440\n4A80\n1180\nE060\nENDCHAR\nSTARTCHAR U_70B2\nENCODING 28850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nAA80\nB440\nAFE0\n2020\n27C0\n5440\n4C40\n87C0\n8440\nENDCHAR\nSTARTCHAR U_70B3\nENCODING 28851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n2FE0\nB520\nA520\nA520\n25A0\n3660\n4C20\n4420\n84E0\nENDCHAR\nSTARTCHAR U_70B4\nENCODING 28852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2FC0\nB540\nA540\nA540\n2FE0\n3100\n4A80\n4440\n8820\nENDCHAR\nSTARTCHAR U_70B5\nENCODING 28853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n2E40\nB180\nA280\nAC60\n2100\n30C0\n4800\n4580\n8060\nENDCHAR\nSTARTCHAR U_70B6\nENCODING 28854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2900\n69E0\n7100\nA100\n27C0\n3440\n4C40\n4C40\n87C0\nENDCHAR\nSTARTCHAR U_70B7\nENCODING 28855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nB100\nA100\nA100\n27C0\n2100\n5100\n4900\n8FE0\nENDCHAR\nSTARTCHAR U_70B8\nENCODING 28856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n2BE0\nB500\nA900\nA1E0\n2100\n31E0\n4900\n4100\n8100\nENDCHAR\nSTARTCHAR U_70B9\nENCODING 28857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n07C0\n0400\n3F80\n2080\n2080\n3F80\n0000\n5240\n8920\nENDCHAR\nSTARTCHAR U_70BA\nENCODING 28858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n1400\n7F80\n0480\n0FC0\n1040\n3FE0\n4020\nAAA0\n2AA0\n0040\nENDCHAR\nSTARTCHAR U_70BB\nENCODING 28859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\nA900\nB100\nA200\n27E0\n2A20\n3220\n4A20\n43E0\n8220\nENDCHAR\nSTARTCHAR U_70BC\nENCODING 28860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2900\nB780\nA280\nA7E0\n2080\n32C0\n4CA0\n44A0\n8180\nENDCHAR\nSTARTCHAR U_70BD\nENCODING 28861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n2C40\nB440\nA440\nA7C0\n2000\n3280\n4A40\n4420\n8820\nENDCHAR\nSTARTCHAR U_70BE\nENCODING 28862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2C40\nB440\nA7C0\nA280\n2280\n3280\n4AA0\n44A0\n8860\nENDCHAR\nSTARTCHAR U_70BF\nENCODING 28863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nAC40\nB640\nA540\n2FE0\n2440\n3440\n4C40\n4840\n90C0\nENDCHAR\nSTARTCHAR U_70C0\nENCODING 28864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2780\n28A0\nB4A0\nA2C0\nAFE0\n2080\n2080\n5080\n4A80\n8100\nENDCHAR\nSTARTCHAR U_70C1\nENCODING 28865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2E00\n2900\nB900\nAFE0\nA100\n2100\n3540\n4920\n5120\n8300\nENDCHAR\nSTARTCHAR U_70C2\nENCODING 28866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2240\n2A80\nB7E0\nA000\nA000\n23C0\n3000\n4800\n4800\n87E0\nENDCHAR\nSTARTCHAR U_70C3\nENCODING 28867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2080\n2900\nB280\nAC60\nA000\n27C0\n3100\n4900\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_70C4\nENCODING 28868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nB280\nA440\nA8A0\n2480\n3300\n4B00\n4480\n8860\nENDCHAR\nSTARTCHAR U_70C5\nENCODING 28869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2200\n2FE0\nBAA0\nAAA0\nAAA0\n2AA0\n2AA0\n5AA0\n4AA0\n9FE0\nENDCHAR\nSTARTCHAR U_70C6\nENCODING 28870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22E0\n2400\n2800\nB3E0\nA440\nAC40\n2440\n3440\n4C40\n4440\n84C0\nENDCHAR\nSTARTCHAR U_70C7\nENCODING 28871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2440\nB820\nA7C0\nA100\n27C0\n3100\n4900\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_70C8\nENCODING 28872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE20\n2120\n3D20\n4920\nA920\n1120\n20E0\nC040\n1240\n4920\n8920\nENDCHAR\nSTARTCHAR U_70C9\nENCODING 28873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3F00\n4200\nFFC0\n4A40\n5140\n0400\n4440\n2A80\n3180\nC060\nENDCHAR\nSTARTCHAR U_70CA\nENCODING 28874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n2FE0\nB100\nA100\nA7C0\n2100\n3100\n4FE0\n4100\n8100\nENDCHAR\nSTARTCHAR U_70CB\nENCODING 28875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n3FE0\n6100\nA380\n2540\n2920\n2100\n5240\n4920\n8920\nENDCHAR\nSTARTCHAR U_70CC\nENCODING 28876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n2880\nBBE0\nA880\nA9C0\n29C0\n5AA0\n4CA0\n8880\n0880\nENDCHAR\nSTARTCHAR U_70CD\nENCODING 28877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\nA7C0\nB900\nA100\n2FE0\n2280\n3280\n4AA0\n44A0\n8860\nENDCHAR\nSTARTCHAR U_70CE\nENCODING 28878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n1100\nFFE0\n1100\n2100\n4500\n2440\n4480\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_70CF\nENCODING 28879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2000\n3FE0\n2000\n3FE0\n5520\n4AA0\n8040\nENDCHAR\nSTARTCHAR U_70D0\nENCODING 28880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nAC40\nB640\nA540\n2FE0\n2440\n3640\n4D40\n4840\n90C0\nENDCHAR\nSTARTCHAR U_70D1\nENCODING 28881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n2AA0\nB6C0\nA280\nA6C0\n2AA0\n3280\n4AA0\n44A0\n8860\nENDCHAR\nSTARTCHAR U_70D2\nENCODING 28882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\n2FE0\nB080\nA080\nA780\n2280\n3280\n4BA0\n4C60\n8020\nENDCHAR\nSTARTCHAR U_70D3\nENCODING 28883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nA900\nB100\nAFE0\n2000\n2100\n27C0\n5100\n4900\n87E0\nENDCHAR\nSTARTCHAR U_70D4\nENCODING 28884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n2BA0\nB820\nABA0\nAAA0\n2AA0\n2BA0\n5820\n4820\n8860\nENDCHAR\nSTARTCHAR U_70D5\nENCODING 28885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n0240\n7FE0\n4200\n7E40\n4A40\n6E80\n5900\n4D00\n52A0\nA460\nENDCHAR\nSTARTCHAR U_70D6\nENCODING 28886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n7A40\n1200\nFFE0\n1200\n5640\n5940\n9180\n29A0\n4660\n8C20\nENDCHAR\nSTARTCHAR U_70D7\nENCODING 28887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2900\nB200\nA440\nA780\n2120\n3240\n4C80\n4160\n8620\nENDCHAR\nSTARTCHAR U_70D8\nENCODING 28888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n2A80\nB7C0\nA280\nA280\n2FE0\n3000\n4A80\n4440\n8820\nENDCHAR\nSTARTCHAR U_70D9\nENCODING 28889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n2A40\nB580\nA240\nAC20\n27C0\n3440\n4C40\n47C0\n8440\nENDCHAR\nSTARTCHAR U_70DA\nENCODING 28890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2A80\nB440\nAFE0\nA000\n27C0\n3440\n4C40\n4440\n87C0\nENDCHAR\nSTARTCHAR U_70DB\nENCODING 28891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nAFE0\nB520\nA520\n2520\n27E0\n2100\n5120\n4FE0\n8020\nENDCHAR\nSTARTCHAR U_70DC\nENCODING 28892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2000\n2FC0\nB440\nA440\nA7C0\n2440\n3440\n4FC0\n4000\n8FE0\nENDCHAR\nSTARTCHAR U_70DD\nENCODING 28893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0200\nF4C0\n1700\n2500\n5480\n8860\n7FC0\n0000\n5240\n8920\nENDCHAR\nSTARTCHAR U_70DE\nENCODING 28894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n2F80\nB280\nA6C0\nABA0\n32A0\n2280\n5280\n4A80\n8280\nENDCHAR\nSTARTCHAR U_70DF\nENCODING 28895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\n2D20\nB7E0\nA520\nA520\n25A0\n3660\n4C20\n47E0\n8420\nENDCHAR\nSTARTCHAR U_70E0\nENCODING 28896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2A00\nB3C0\nA640\nABC0\n2240\n23C0\n5240\n4A40\n82C0\nENDCHAR\nSTARTCHAR U_70E1\nENCODING 28897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2480\n4B00\n1100\nE0E0\n0900\n7FE0\n0900\nFFE0\n1080\nE060\nENDCHAR\nSTARTCHAR U_70E2\nENCODING 28898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2820\nA8C0\nB700\nA100\n21E0\n2F00\n5100\n4920\n80E0\nENDCHAR\nSTARTCHAR U_70E3\nENCODING 28899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n2FE0\nAA80\nB280\nA2A0\n25C0\n3480\n4940\n5240\nA420\nENDCHAR\nSTARTCHAR U_70E4\nENCODING 28900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27C0\n2A80\nB7E0\nA200\nA7E0\n2A00\n33C0\n4840\n4840\n8180\nENDCHAR\nSTARTCHAR U_70E5\nENCODING 28901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2480\n2C80\nB7E0\nA420\nA420\n27E0\n3480\n4C80\n4480\n87E0\nENDCHAR\nSTARTCHAR U_70E6\nENCODING 28902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n2A00\nB7C0\nA440\nA540\n2540\n2540\n5280\n5440\n8820\nENDCHAR\nSTARTCHAR U_70E7\nENCODING 28903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n22E0\n2F40\nB2A0\nA1A0\nAE60\n2000\n37E0\n4A80\n44A0\n8860\nENDCHAR\nSTARTCHAR U_70E8\nENCODING 28904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n22A0\n2CC0\nB580\nA4A0\nA4E0\n2100\n37E0\n4900\n4100\n8100\nENDCHAR\nSTARTCHAR U_70E9\nENCODING 28905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2A80\nB440\nABA0\nA000\n2FE0\n3100\n4A00\n4440\n8FE0\nENDCHAR\nSTARTCHAR U_70EA\nENCODING 28906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2840\n2480\n2FC0\nAA00\nB200\nAFE0\n2200\n2500\n5480\n4840\n9020\nENDCHAR\nSTARTCHAR U_70EB\nENCODING 28907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F80\n2100\n9FE0\n24A0\nC920\n52C0\n0400\n2440\n4A80\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_70EC\nENCODING 28908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2440\nAFC0\nB480\nA440\n2920\n2880\n5200\n4980\n8080\nENDCHAR\nSTARTCHAR U_70ED\nENCODING 28909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nF780\n2280\n3280\n6680\nA380\n24A0\n6860\n0000\n5240\n8920\nENDCHAR\nSTARTCHAR U_70EE\nENCODING 28910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E40\n1140\n3D40\n4940\n3040\nC4C0\n0400\n2440\n4A80\n3180\nC060\nENDCHAR\nSTARTCHAR U_70EF\nENCODING 28911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44C0\n4300\n5CC0\nE200\nDFE0\nC500\n4FE0\n5520\n6520\n9560\n8100\nENDCHAR\nSTARTCHAR U_70F0\nENCODING 28912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\n2D40\nB280\nA7C0\nA080\n2100\n2FE0\n5100\n4900\n8300\nENDCHAR\nSTARTCHAR U_70F1\nENCODING 28913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2820\nBAA0\nAC60\nABA0\n2AA0\n2BA0\n5820\n4820\n8860\nENDCHAR\nSTARTCHAR U_70F2\nENCODING 28914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA00\n23E0\nF280\n2480\n6880\n0400\n2480\n4B00\n3180\nC060\nENDCHAR\nSTARTCHAR U_70F3\nENCODING 28915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\n27E0\nA900\nB7E0\nA520\n27E0\n2520\n57E0\n4D20\n8560\nENDCHAR\nSTARTCHAR U_70F4\nENCODING 28916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2000\n2AA0\nB540\nA2A0\nA000\n27E0\n3080\n4880\n4080\n8FE0\nENDCHAR\nSTARTCHAR U_70F5\nENCODING 28917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\n2240\nAC00\nB7E0\nA820\n2320\n20A0\n5020\n4940\n8080\nENDCHAR\nSTARTCHAR U_70F6\nENCODING 28918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E20\n22C0\nB440\nAE40\nA2E0\n2240\n2240\n2DE0\n5400\n4A00\n91E0\nENDCHAR\nSTARTCHAR U_70F7\nENCODING 28919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2C20\nB3C0\nA000\nAFE0\n2280\n3280\n4AA0\n44A0\n8860\nENDCHAR\nSTARTCHAR U_70F8\nENCODING 28920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\n2800\nB7C0\nA540\nAFE0\n2540\n3540\n4FC0\n4040\n8180\nENDCHAR\nSTARTCHAR U_70F9\nENCODING 28921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2080\n3F80\n0000\n7FC0\n0300\n0400\n1C00\n5240\n8920\nENDCHAR\nSTARTCHAR U_70FA\nENCODING 28922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2C40\nB7C0\nA440\nA7C0\n2520\n3540\n4C80\n4640\n8420\nENDCHAR\nSTARTCHAR U_70FB\nENCODING 28923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2C60\n25C0\nB440\nA560\nA940\nA540\n2540\n2DE0\n5400\n4B00\n90E0\nENDCHAR\nSTARTCHAR U_70FC\nENCODING 28924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n2A00\nB520\nA940\nA280\n25C0\n2AA0\n54A0\n4A80\n8100\nENDCHAR\nSTARTCHAR U_70FD\nENCODING 28925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n2440\nAB80\nB560\nAB80\n2100\n27C0\n5100\n4FE0\n8100\nENDCHAR\nSTARTCHAR U_70FE\nENCODING 28926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2440\n4A80\n3580\nC460\n2A80\n1180\nE460\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_70FF\nENCODING 28927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2720\n2540\n2D80\nB720\nA540\nAF80\n2500\n3520\n4D40\n4980\n9300\nENDCHAR\nSTARTCHAR U_7100\nENCODING 28928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2840\n2220\nB300\nA480\n2860\n2FC0\n2840\n5840\n4840\n8FC0\nENDCHAR\nSTARTCHAR U_7101\nENCODING 28929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7BE0\n4D40\n7A80\n0460\n0800\n4440\n2480\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_7102\nENCODING 28930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n5440\nDA80\n5100\n56E0\n0400\n2440\n4A80\n3180\nC060\nENDCHAR\nSTARTCHAR U_7103\nENCODING 28931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2100\nAFE0\nB280\nAAC0\n2AA0\n32A0\n4A80\n4480\n8980\nENDCHAR\nSTARTCHAR U_7104\nENCODING 28932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0840\nFFE0\n0840\n7FC0\n1000\n3FC0\nD040\n1FC0\n5240\n8920\nENDCHAR\nSTARTCHAR U_7105\nENCODING 28933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\n27E0\nB500\nA900\nAFE0\n2000\n27C0\n5440\n4C40\n87C0\nENDCHAR\nSTARTCHAR U_7106\nENCODING 28934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n27E0\nA800\nB7E0\nA420\n27E0\n3420\n4FE0\n4420\n8460\nENDCHAR\nSTARTCHAR U_7107\nENCODING 28935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n24A0\n2AC0\nB7E0\nA420\nA7E0\n2420\n37E0\n4C20\n4420\n8460\nENDCHAR\nSTARTCHAR U_7108\nENCODING 28936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7BC0\n4A40\n7BC0\n4220\n41E0\n8400\n2440\n4A80\n3180\nC060\nENDCHAR\nSTARTCHAR U_7109\nENCODING 28937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n2780\n2400\nFFE0\n2000\n3FC0\n2000\n3FE0\n5520\n8AC0\nENDCHAR\nSTARTCHAR U_710A\nENCODING 28938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2FC0\nB440\nA7C0\nA000\n27C0\n3100\n4FE0\n4100\n8100\nENDCHAR\nSTARTCHAR U_710B\nENCODING 28939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n7900\n0FE0\nF900\n4BC0\n4800\n8400\n2440\n4A80\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_710C\nENCODING 28940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2240\n2FE0\nB240\nA520\nA9C0\n2240\n3680\n4900\n4280\n9C60\nENDCHAR\nSTARTCHAR U_710D\nENCODING 28941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n2FE0\nB120\nAFE0\nA900\n2FE0\n3320\n4D20\n4960\n9100\nENDCHAR\nSTARTCHAR U_710E\nENCODING 28942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n7B00\n1600\n1BE0\n3240\nD240\n1440\n3840\n0000\n5240\n8920\nENDCHAR\nSTARTCHAR U_710F\nENCODING 28943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0300\n75E0\n5420\n5540\n7480\n0540\n0E20\n0000\n4920\n8920\nENDCHAR\nSTARTCHAR U_7110\nENCODING 28944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n2FC0\nB240\nA240\nAFE0\n2000\n37C0\n4C40\n4440\n87C0\nENDCHAR\nSTARTCHAR U_7111\nENCODING 28945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2920\n2920\n7FE0\nABA0\n2B60\n2D60\n5920\n4920\n8FE0\nENDCHAR\nSTARTCHAR U_7112\nENCODING 28946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n2440\n6C40\n77C0\nA000\n2FE0\n5820\n4820\n4820\n8FE0\nENDCHAR\nSTARTCHAR U_7113\nENCODING 28947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2640\nA920\nB7C0\nA080\n2100\n37C0\n4C40\n4C40\n87C0\nENDCHAR\nSTARTCHAR U_7114\nENCODING 28948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n2A40\nB480\nA900\nABC0\n2A40\n2A40\n5BC0\n4A40\n8BC0\nENDCHAR\nSTARTCHAR U_7115\nENCODING 28949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2780\n2900\nB7C0\nA540\nA540\n2FE0\n3100\n4A80\n4440\n9820\nENDCHAR\nSTARTCHAR U_7116\nENCODING 28950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\n2420\nB920\nA8A0\nAA20\n2AA0\n2E60\n2A20\n59E0\n4820\n88E0\nENDCHAR\nSTARTCHAR U_7117\nENCODING 28951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n2FE0\nB800\nAFE0\nA820\n2BA0\n2AA0\n5BA0\n48A0\n9040\nENDCHAR\nSTARTCHAR U_7118\nENCODING 28952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\nFFE0\n1100\n3FC0\n4900\n8900\n0300\n5240\n8920\nENDCHAR\nSTARTCHAR U_7119\nENCODING 28953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2840\nB440\nA280\nAFE0\n2000\n37C0\n4C40\n4440\n87C0\nENDCHAR\nSTARTCHAR U_711A\nENCODING 28954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n2300\n7580\nA940\n2520\n0480\n2D00\n4A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_711B\nENCODING 28955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8420\n94A0\nA720\n8920\nB0A0\n8060\nENDCHAR\nSTARTCHAR U_711C\nENCODING 28956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2FC0\nB440\nA7C0\nA000\n24A0\n37C0\n4C80\n46A0\n8460\nENDCHAR\nSTARTCHAR U_711D\nENCODING 28957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2480\n27E0\nAC80\nB640\nA420\n27C0\n3440\n4FC0\n4440\n87C0\nENDCHAR\nSTARTCHAR U_711E\nENCODING 28958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nA800\nB7C0\nA440\n27C0\n2080\n37E0\n4900\n4100\n8300\nENDCHAR\nSTARTCHAR U_711F\nENCODING 28959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27E0\n2A80\nB280\nAFE0\nA000\n27C0\n3440\n4FC0\n4440\n87C0\nENDCHAR\nSTARTCHAR U_7120\nENCODING 28960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2C40\nB440\nAAA0\nA100\n2FE0\n2100\n5100\n4900\n8100\nENDCHAR\nSTARTCHAR U_7121\nENCODING 28961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FE0\nAA80\n2A80\nFFE0\n2A80\n2A80\nFFE0\n1240\n4920\n8920\nENDCHAR\nSTARTCHAR U_7122\nENCODING 28962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2820\nB240\nA420\nA820\n27C0\n2100\n5100\n4900\n8FE0\nENDCHAR\nSTARTCHAR U_7123\nENCODING 28963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC00\n4BC0\n7A40\n4A40\n7980\n4D80\nFA40\n0C20\n5240\n8920\n8920\nENDCHAR\nSTARTCHAR U_7124\nENCODING 28964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4840\n5FE0\n6A40\n4940\n8480\n2440\n4A80\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7125\nENCODING 28965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2820\nB400\nA6E0\nAAA0\n2AA0\n26E0\n5280\n44A0\n88E0\nENDCHAR\nSTARTCHAR U_7126\nENCODING 28966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n2200\n7FE0\nA200\n3FC0\n2200\n3FC0\n2200\n3FE0\n5240\n8920\nENDCHAR\nSTARTCHAR U_7127\nENCODING 28967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n2440\nBA60\nA480\nAFC0\n2020\n3240\n5520\n4C40\n8BC0\nENDCHAR\nSTARTCHAR U_7128\nENCODING 28968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n2DA0\nB420\nA3C0\nA240\n23C0\n2240\n53C0\n4A40\n82C0\nENDCHAR\nSTARTCHAR U_7129\nENCODING 28969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2AA0\nBEE0\nAAA0\nAAA0\n2EE0\n5AA0\n4AA0\n9B20\n2660\nENDCHAR\nSTARTCHAR U_712A\nENCODING 28970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2AA0\nB440\nABE0\nA040\n27C0\n2400\n57E0\n4820\n80C0\nENDCHAR\nSTARTCHAR U_712B\nENCODING 28971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n2440\nB100\nAFE0\nA920\n2920\n29A0\n5A60\n4C20\n8860\nENDCHAR\nSTARTCHAR U_712C\nENCODING 28972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2FC0\nB440\nA7C0\nA200\n27E0\n2AA0\n5520\n4AA0\n8440\nENDCHAR\nSTARTCHAR U_712D\nENCODING 28973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5540\n2A80\n4440\n7FE0\n4040\n9E80\n1200\n1240\n2240\n41C0\nENDCHAR\nSTARTCHAR U_712E\nENCODING 28974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2880\n2FE0\nBB20\nAA40\nAA40\n2A40\n3A40\n4A40\n4AA0\n9120\nENDCHAR\nSTARTCHAR U_712F\nENCODING 28975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\n2900\nB7E0\nA420\nA7E0\n2420\n37E0\n4900\n4FE0\n8100\nENDCHAR\nSTARTCHAR U_7130\nENCODING 28976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\nAA40\nB480\nA800\n26E0\n2420\n26E0\n5420\n4C20\n87E0\nENDCHAR\nSTARTCHAR U_7131\nENCODING 28977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n4480\n0A00\n3180\nC060\n1500\n5B40\n9580\n1100\n2A80\nC460\nENDCHAR\nSTARTCHAR U_7132\nENCODING 28978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nAA80\nB2E0\nA4A0\nADA0\n3640\n2540\n5480\n4D40\n8620\nENDCHAR\nSTARTCHAR U_7133\nENCODING 28979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n2480\n2FE0\nB900\nAFC0\nA900\n2FC0\n5900\n4900\n4FE0\n8800\nENDCHAR\nSTARTCHAR U_7134\nENCODING 28980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2280\nAFC0\nB000\nA7C0\n2440\n37C0\n4C40\n47C0\n8440\nENDCHAR\nSTARTCHAR U_7135\nENCODING 28981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4FE0\n4820\nDAA0\nEFE0\nC920\n4D60\n4D60\n6FE0\n9820\n8860\nENDCHAR\nSTARTCHAR U_7136\nENCODING 28982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2280\n3240\n4FE0\nB200\n5500\n2500\n4880\n9060\n5240\n8920\nENDCHAR\nSTARTCHAR U_7137\nENCODING 28983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FC0\nA940\nBFC0\nA940\n2FC0\n2200\n3500\n4FE0\n4100\n8100\nENDCHAR\nSTARTCHAR U_7138\nENCODING 28984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4A40\n7BC0\n0400\n1440\n6680\n0900\n30E0\nC040\nENDCHAR\nSTARTCHAR U_7139\nENCODING 28985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2AA0\nBFE0\nA920\nAFE0\n2A20\n2BA0\n5820\n4820\n8860\nENDCHAR\nSTARTCHAR U_713A\nENCODING 28986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nAFE0\nB420\nA7E0\nA140\n2640\n2240\n5FE0\n5240\n8440\nENDCHAR\nSTARTCHAR U_713B\nENCODING 28987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n27E0\nAC20\nB7E0\nA000\n27E0\n2420\n57E0\n4C20\n87E0\nENDCHAR\nSTARTCHAR U_713C\nENCODING 28988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2100\nB440\nAFE0\nA440\n2FE0\n2280\n5280\n44A0\n9860\nENDCHAR\nSTARTCHAR U_713D\nENCODING 28989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4A40\n7CC0\n0000\n2480\n4500\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_713E\nENCODING 28990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2300\n2680\nB940\nB7E0\nA080\n2100\n3480\n4D20\n5440\n83C0\nENDCHAR\nSTARTCHAR U_713F\nENCODING 28991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\n2900\nAFC0\nB940\nAFE0\n2940\n5FC0\n4900\n9280\n2C60\nENDCHAR\nSTARTCHAR U_7140\nENCODING 28992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4820\n4FE0\nD880\nEAA0\nCAA0\n4BE0\n6880\n5AA0\n92A0\nA3E0\nENDCHAR\nSTARTCHAR U_7141\nENCODING 28993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\nAA40\nB3C0\nA240\nA3C0\n2240\n2FE0\n5540\n5620\n87E0\nENDCHAR\nSTARTCHAR U_7142\nENCODING 28994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nAA80\nB380\nA100\nA7C0\n2540\n27C0\n5100\n4FE0\n8100\nENDCHAR\nSTARTCHAR U_7143\nENCODING 28995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nAA80\nB540\nABA0\n2100\n2FE0\n2100\n57C0\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_7144\nENCODING 28996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nAFE0\nB540\nA7C0\nA540\n27C0\n2100\n57C0\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_7145\nENCODING 28997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n28A0\nAEA0\nB920\nA800\n2EE0\n28A0\n2EA0\n5840\n48A0\n8920\nENDCHAR\nSTARTCHAR U_7146\nENCODING 28998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2760\n2520\nAD20\nB760\nA400\n27E0\n24A0\n27A0\n5440\n4CA0\n8520\nENDCHAR\nSTARTCHAR U_7147\nENCODING 28999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\n2FE0\nB540\nA7C0\n2540\n27C0\n2100\n5FE0\n4900\n8100\nENDCHAR\nSTARTCHAR U_7148\nENCODING 29000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2940\nAF40\nBA40\nAFC0\nAAC0\n2FC0\n2A40\n53C0\nAC60\n4020\nENDCHAR\nSTARTCHAR U_7149\nENCODING 29001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nBFE0\nAAA0\nA920\n2FE0\n2380\n5540\n4920\n9120\nENDCHAR\nSTARTCHAR U_714A\nENCODING 29002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2820\nB000\nAFE0\nA000\n27C0\n2440\n57C0\n5440\n8FE0\nENDCHAR\nSTARTCHAR U_714B\nENCODING 29003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nAFC0\nB440\nA7C0\nA500\n27C0\n2900\n57C0\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_714C\nENCODING 29004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\nAC40\nB7C0\nA440\nAFE0\n2100\n27C0\n5100\n4900\n8FE0\nENDCHAR\nSTARTCHAR U_714D\nENCODING 29005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E40\n2440\n2540\nBF60\nA540\nAC40\n3640\n2540\n5440\n4CA0\n8520\nENDCHAR\nSTARTCHAR U_714E\nENCODING 29006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0000\n3D40\n2540\n3D40\n2540\n3D40\n24C0\n5240\n8920\nENDCHAR\nSTARTCHAR U_714F\nENCODING 29007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2000\nAFC0\nB440\nA7C0\n2000\n2FE0\n5920\n5FE0\n4920\n8FE0\nENDCHAR\nSTARTCHAR U_7150\nENCODING 29008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nAA40\nB100\nA7C0\nA540\n2540\n2FE0\n5280\n4440\n8820\nENDCHAR\nSTARTCHAR U_7151\nENCODING 29009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n0400\nFFE0\n1080\nFF80\n2080\n3FC0\n2480\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_7152\nENCODING 29010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nAA40\nB7E0\nA440\nA7C0\n2080\n2FE0\n5480\n4FE0\n8080\nENDCHAR\nSTARTCHAR U_7153\nENCODING 29011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2920\nAFE0\nB000\nAFE0\n2100\n2FE0\n2AA0\n5AA0\n4AA0\n8860\nENDCHAR\nSTARTCHAR U_7154\nENCODING 29012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nA480\nA8E0\n3080\n4880\nA7E0\nAA20\n7220\n3220\n4BE0\n8620\nENDCHAR\nSTARTCHAR U_7155\nENCODING 29013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\n8940\nAD40\nA5C0\nA500\nAD20\n8920\nFCE0\n0000\n5240\n8920\nENDCHAR\nSTARTCHAR U_7156\nENCODING 29014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\nAAC0\nB7E0\nA100\nAFE0\n2200\n23E0\n5540\n4880\n9360\nENDCHAR\nSTARTCHAR U_7157\nENCODING 29015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2100\n2FE0\nAAA0\nBAA0\nAAA0\n2140\n2FE0\n5280\n4440\n9820\nENDCHAR\nSTARTCHAR U_7158\nENCODING 29016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\nAFE0\nB880\nAFA0\nA8A0\n2EA0\n2AC0\n5EA0\n4960\n9220\nENDCHAR\nSTARTCHAR U_7159\nENCODING 29017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nAFE0\nBAA0\nAAA0\nAFE0\n2100\n27C0\n5100\n4900\n8FE0\nENDCHAR\nSTARTCHAR U_715A\nENCODING 29018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9400\nF7C0\n9440\n97C0\nF400\n07E0\n2440\n4A80\n1180\nE060\nENDCHAR\nSTARTCHAR U_715B\nENCODING 29019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n5AC0\n6B40\n5AC0\n6B40\n7BC0\n0400\n64C0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_715C\nENCODING 29020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nAFC0\nB440\nA7C0\nA100\n2FE0\n2440\n5280\n4900\n8FE0\nENDCHAR\nSTARTCHAR U_715D\nENCODING 29021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nAFE0\nB800\nABE0\nAA20\n2BE0\n2A20\n5BE0\n4A20\n93E0\nENDCHAR\nSTARTCHAR U_715E\nENCODING 29022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3D00\n49E0\n7E40\n8540\n7C80\n0540\n7E20\n0000\n5240\n8920\nENDCHAR\nSTARTCHAR U_715F\nENCODING 29023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nAFE0\nB920\nAFE0\n2440\n27C0\n3440\n4FC0\n4440\n84C0\nENDCHAR\nSTARTCHAR U_7160\nENCODING 29024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\nAD40\nB5C0\nA400\nA7E0\n2100\n2FE0\n5380\n4540\n8920\nENDCHAR\nSTARTCHAR U_7161\nENCODING 29025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2C80\n25E0\nACA0\nB7E0\nA8A0\n27E0\n2480\n2FE0\n5480\n4A80\nB1E0\nENDCHAR\nSTARTCHAR U_7162\nENCODING 29026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n14A0\n5AC0\n5280\n2940\nFFE0\n8020\n3F80\n08A0\n7FA0\n0860\n0820\nENDCHAR\nSTARTCHAR U_7163\nENCODING 29027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2940\nB080\nA7E0\nA2A0\n2D80\n2100\n37E0\n4B80\n4540\n8920\nENDCHAR\nSTARTCHAR U_7164\nENCODING 29028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n2440\nB7C0\nA440\n27C0\n2100\n3FE0\n5380\n4540\n8920\nENDCHAR\nSTARTCHAR U_7165\nENCODING 29029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nAC80\nB7E0\nA5A0\nA660\n2520\n2FE0\n5180\n5240\n8C20\nENDCHAR\nSTARTCHAR U_7166\nENCODING 29030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n77C0\n5840\n5740\n7540\n5740\n5040\n7140\n0080\n5220\n8920\nENDCHAR\nSTARTCHAR U_7167\nENCODING 29031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n4A20\n7C40\n4BE0\n4A20\n7A20\n4BE0\n0000\n5240\n8920\nENDCHAR\nSTARTCHAR U_7168\nENCODING 29032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nAFC0\nB540\nA7C0\nA000\n2FE0\n2540\n5480\n4D40\n8620\nENDCHAR\nSTARTCHAR U_7169\nENCODING 29033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2200\n27C0\nAC40\nB7C0\nA440\n27C0\n3440\n4FC0\n4440\n8820\nENDCHAR\nSTARTCHAR U_716A\nENCODING 29034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n2FE0\nB280\nAFE0\nAAA0\n2CE0\n2820\n5FE0\n4820\n8FE0\nENDCHAR\nSTARTCHAR U_716B\nENCODING 29035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2500\n2FE0\nB200\nA440\nAA80\n2580\n5B40\n4560\n9900\n0200\nENDCHAR\nSTARTCHAR U_716C\nENCODING 29036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nAFC0\nB440\nAFE0\nA400\n27E0\n2AA0\n5520\n4220\n8CC0\nENDCHAR\nSTARTCHAR U_716D\nENCODING 29037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5440\nA940\n5540\nFD40\n2140\n3D40\nC840\n30C0\nC000\n5240\n8920\nENDCHAR\nSTARTCHAR U_716E\nENCODING 29038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n3F80\n0500\nFFE0\n1080\n3F80\nD080\n1F80\n4240\n4920\n8920\nENDCHAR\nSTARTCHAR U_716F\nENCODING 29039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2EA0\nA8C0\nBCA0\nA8E0\n2200\n2FC0\n5840\n4FC0\n8840\n0FC0\nENDCHAR\nSTARTCHAR U_7170\nENCODING 29040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nAC40\nB7C0\nA000\nAEE0\n2AA0\n2AA0\n5AA0\n4EE0\n8AA0\nENDCHAR\nSTARTCHAR U_7171\nENCODING 29041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2F40\nB540\nAFE0\nA820\n2BA0\n2AA0\n5BA0\n4820\n8860\nENDCHAR\nSTARTCHAR U_7172\nENCODING 29042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2840\n4FC0\nC200\n5FE0\n4A80\n5240\n0400\n2480\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_7173\nENCODING 29043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n24A0\nAEA0\nB4E0\nA4A0\nAEA0\n2AE0\n2AA0\n5EA0\n4120\n8260\nENDCHAR\nSTARTCHAR U_7174\nENCODING 29044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2FC0\nB440\nA7C0\nA000\n2FE0\n2AA0\n5AA0\n4AA0\n9FE0\nENDCHAR\nSTARTCHAR U_7175\nENCODING 29045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2200\nBFE0\nAAA0\nABA0\n2920\n5BA0\n4920\n8920\n0860\nENDCHAR\nSTARTCHAR U_7176\nENCODING 29046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n23C0\nAA40\nB3C0\nA000\n2FE0\n2100\n55C0\n4700\n88E0\nENDCHAR\nSTARTCHAR U_7177\nENCODING 29047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2240\nABC0\nB000\nAFE0\n2820\n2380\n5280\n42A0\n8C60\nENDCHAR\nSTARTCHAR U_7178\nENCODING 29048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nB820\nAFE0\nA800\nAFE0\n2AA0\n2FE0\n5AA0\n4AA0\n9060\nENDCHAR\nSTARTCHAR U_7179\nENCODING 29049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4FC0\n5480\nFFE0\nC200\n4FC0\n4A40\n4FC0\n6A40\n9FE0\n8840\nENDCHAR\nSTARTCHAR U_717A\nENCODING 29050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\n2520\nA5E0\nB120\nADE0\n25A0\n2540\n2520\n55A0\n4A00\n91E0\nENDCHAR\nSTARTCHAR U_717B\nENCODING 29051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA940\nBFE0\nA940\n2FC0\n2900\n2FC0\n5C40\n5440\nA7C0\nENDCHAR\nSTARTCHAR U_717C\nENCODING 29052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\n2AA0\nBFA0\nA2A0\nAC40\n2FE0\n5AA0\n4FA0\n82A0\n0C40\nENDCHAR\nSTARTCHAR U_717D\nENCODING 29053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA820\nBFE0\nA800\nAFE0\n2920\n2DA0\n5B60\n4DA0\n9360\nENDCHAR\nSTARTCHAR U_717E\nENCODING 29054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nAFC0\nB540\nA6C0\n27C0\n2200\n3540\n4C20\n5440\n83C0\nENDCHAR\nSTARTCHAR U_717F\nENCODING 29055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n3FE0\n2A40\nAFC0\nBA40\nAFC0\n2A40\n2FE0\n5480\n5280\n8180\nENDCHAR\nSTARTCHAR U_7180\nENCODING 29056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nAFC0\nB440\nA7C0\nA920\n2540\n2FE0\n5280\n4CA0\n8860\nENDCHAR\nSTARTCHAR U_7181\nENCODING 29057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\nA480\nBFE0\nAAA0\nB7E0\n2440\n27C0\n5440\n4FC0\n84C0\nENDCHAR\nSTARTCHAR U_7182\nENCODING 29058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\nA800\nBFC0\nAAC0\n2740\n2FC0\n2240\n5740\n4AA0\n9220\nENDCHAR\nSTARTCHAR U_7183\nENCODING 29059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7FC0\n1280\nFD60\n57C0\n9240\n2480\n2440\n1A80\n3100\nC0E0\nENDCHAR\nSTARTCHAR U_7184\nENCODING 29060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nAC40\nB7C0\nA440\nA7C0\n2440\n37C0\n4D40\n54A0\n83A0\nENDCHAR\nSTARTCHAR U_7185\nENCODING 29061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nAEC0\nB440\nA7C0\nA000\n2FE0\n2AA0\n5AA0\n4AA0\n9FE0\nENDCHAR\nSTARTCHAR U_7186\nENCODING 29062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nA900\nBFE0\nA240\nA7A0\n2000\n2FE0\n5AA0\n4AA0\n9FE0\nENDCHAR\nSTARTCHAR U_7187\nENCODING 29063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nAA40\nB3C0\nA000\nA7E0\n2820\n2BA0\n5AA0\n4BA0\n8860\nENDCHAR\nSTARTCHAR U_7188\nENCODING 29064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n54A0\n5EE0\n5280\n5E80\n54A0\n5E60\n0000\n5240\n4920\n8920\nENDCHAR\nSTARTCHAR U_7189\nENCODING 29065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nAFE0\nB420\nA7E0\nA420\n27E0\n2420\n57E0\n4A80\n8C60\nENDCHAR\nSTARTCHAR U_718A\nENCODING 29066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\nFB80\n0220\n7BE0\n4800\n7A40\n4B80\n7A20\n4BE0\n5240\n8920\nENDCHAR\nSTARTCHAR U_718B\nENCODING 29067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49C0\nFD20\n48E0\n7900\n49C0\n7920\n4CE0\n2480\n4B00\n3100\nC0E0\nENDCHAR\nSTARTCHAR U_718C\nENCODING 29068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\n5EE0\nEAA0\nCEE0\nC920\n4AA0\n6C60\n5820\n88A0\n0840\nENDCHAR\nSTARTCHAR U_718D\nENCODING 29069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2820\n6FC0\n7440\nA7C0\n2000\n37C0\n4C40\n4440\n87C0\nENDCHAR\nSTARTCHAR U_718E\nENCODING 29070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2F00\n2A40\nB540\nA400\nA7C0\n2900\n37E0\n4900\n4540\n87C0\nENDCHAR\nSTARTCHAR U_718F\nENCODING 29071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0400\nFFE0\n5540\n7FC0\n0400\n7FC0\n0400\nFFE0\n4A40\n8920\nENDCHAR\nSTARTCHAR U_7190\nENCODING 29072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n27C0\nAC40\nB7C0\nA440\n27C0\n2100\n5FE0\n4280\n8C60\nENDCHAR\nSTARTCHAR U_7191\nENCODING 29073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n7FE0\n4500\nDFC0\nE540\nDFE0\n4540\n5FC0\nAD80\n9540\n2520\nENDCHAR\nSTARTCHAR U_7192\nENCODING 29074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n14A0\n5AC0\n5280\n2940\nFFE0\n8420\n2440\n2480\n4A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7193\nENCODING 29075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\n2C40\nB7C0\nA400\nA7E0\n2400\n57E0\n5020\n4AA0\n8040\nENDCHAR\nSTARTCHAR U_7194\nENCODING 29076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2820\nB440\nA920\nA280\n2C60\n27C0\n5440\n4FC0\n8440\nENDCHAR\nSTARTCHAR U_7195\nENCODING 29077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n27E0\nA800\nB7C0\nA440\n27C0\n3440\n4FC0\n4440\n8820\nENDCHAR\nSTARTCHAR U_7196\nENCODING 29078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2620\n2920\n7540\n6200\nA4E0\n2420\n36E0\n4C20\n47E0\n8420\nENDCHAR\nSTARTCHAR U_7197\nENCODING 29079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nAD40\nB7E0\nA440\nA7C0\n2440\n27C0\n5A40\n4A40\n93C0\nENDCHAR\nSTARTCHAR U_7198\nENCODING 29080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2DE0\nA8A0\nBAA0\nACA0\nA140\n2FE0\n2920\n5FE0\n4920\n8FE0\nENDCHAR\nSTARTCHAR U_7199\nENCODING 29081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4920\n5D20\n55E0\n5D00\n4920\n4920\n7EE0\n5240\n4920\n8920\nENDCHAR\nSTARTCHAR U_719A\nENCODING 29082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nAFC0\nB540\nA7C0\nA540\n2FE0\n2540\n5FE0\n4900\n8100\nENDCHAR\nSTARTCHAR U_719B\nENCODING 29083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nAFE0\nBAA0\nAFE0\nA000\n27C0\n3000\n4FE0\n4540\n8B20\nENDCHAR\nSTARTCHAR U_719C\nENCODING 29084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nA920\nBBA0\nAD20\nAAA0\n2FE0\n2540\n54A0\n4C60\n93C0\nENDCHAR\nSTARTCHAR U_719D\nENCODING 29085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nAA80\nBFE0\nAAA0\nAFE0\n2A80\n2BA0\n5AC0\n4BA0\n92E0\nENDCHAR\nSTARTCHAR U_719E\nENCODING 29086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nAFA0\nB940\nAFA0\nAAA0\n2F00\n2100\n57C0\n4900\n8FE0\nENDCHAR\nSTARTCHAR U_719F\nENCODING 29087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFD00\n4BC0\n7940\n0340\n7D40\n1140\nFAA0\n3420\n4940\n8920\nENDCHAR\nSTARTCHAR U_71A0\nENCODING 29088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2120\nADA0\nB360\nA5A0\nA100\n27E0\n2420\n57E0\n4C20\n87E0\nENDCHAR\nSTARTCHAR U_71A1\nENCODING 29089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nAFE0\nB540\nAFE0\nA920\n2FE0\n2240\n5480\n4B80\n8E60\nENDCHAR\nSTARTCHAR U_71A2\nENCODING 29090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n43C0\n5680\nEB80\nC560\nD900\n4BC0\n6900\n9FE0\n8900\n17E0\nENDCHAR\nSTARTCHAR U_71A3\nENCODING 29091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n24A0\n27E0\nB280\nA7E0\nAC80\n27E0\n3480\n4FE0\n4480\n87E0\nENDCHAR\nSTARTCHAR U_71A4\nENCODING 29092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2120\nADA0\nB360\nA5A0\nA220\n2100\n2FE0\n5440\n4A80\n8FE0\nENDCHAR\nSTARTCHAR U_71A5\nENCODING 29093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BE0\n2540\nA880\nB3E0\nB2A0\nABE0\n2AA0\n2BE0\n5AE0\n4E00\n91E0\nENDCHAR\nSTARTCHAR U_71A6\nENCODING 29094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2A60\n3380\nA500\nBFE0\nA900\n2FC0\n2900\n5FC0\n4900\n8FE0\nENDCHAR\nSTARTCHAR U_71A7\nENCODING 29095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n46A0\n9900\n25E0\n6500\nABE0\n3400\n2440\n4A80\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_71A8\nENCODING 29096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n47E0\n7E40\n5140\n9440\nB2C0\n0400\n2440\n4A80\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_71A9\nENCODING 29097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nAC20\nB7E0\nA540\nA7E0\n26A0\n27E0\n5A00\n4A20\n91E0\nENDCHAR\nSTARTCHAR U_71AA\nENCODING 29098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2CE0\nA520\nBEA0\nA440\nA680\n2DE0\n3520\n54A0\n4C40\n8580\nENDCHAR\nSTARTCHAR U_71AB\nENCODING 29099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2A40\n7A40\n6FE0\nAA40\n2BC0\n2800\n5540\n5AA0\nAAA0\nENDCHAR\nSTARTCHAR U_71AC\nENCODING 29100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFD00\n11E0\n7D40\n1340\nFC80\n2540\nDA20\n5240\n4920\n8920\nENDCHAR\nSTARTCHAR U_71AD\nENCODING 29101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7BE0\n1100\nFBE0\n1100\n7FC0\n0040\n7FC0\n2480\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_71AE\nENCODING 29102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n25A0\n2360\nADA0\nB100\nA280\n2D60\n2280\n5140\n4080\n8700\nENDCHAR\nSTARTCHAR U_71AF\nENCODING 29103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nAA80\nB100\nA7C0\nA540\n27C0\n2100\n5FE0\n4A80\n8C60\nENDCHAR\nSTARTCHAR U_71B0\nENCODING 29104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\nABC0\nBA40\nABC0\nA800\n2EE0\n2AA0\n5EE0\n4800\n8FE0\nENDCHAR\nSTARTCHAR U_71B1\nENCODING 29105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n23C0\nFD40\n5340\nA940\nFAE0\n2220\nFA40\n4920\n8920\nENDCHAR\nSTARTCHAR U_71B2\nENCODING 29106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\n6880\n4BE0\n7A20\n27E0\nAA20\nB3E0\nA220\n33E0\n4940\n8620\nENDCHAR\nSTARTCHAR U_71B3\nENCODING 29107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nAFC0\nB440\nAFE0\nAAA0\n2FE0\n2440\n5280\n4900\n8EE0\nENDCHAR\nSTARTCHAR U_71B4\nENCODING 29108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2520\n27E0\nAC40\nB7C0\nA440\n27C0\n24A0\n57C0\n4CA0\n86E0\nENDCHAR\nSTARTCHAR U_71B5\nENCODING 29109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nAA80\nBFE0\nAAA0\nAC60\n2BA0\n2AA0\n5BA0\n4820\n8860\nENDCHAR\nSTARTCHAR U_71B6\nENCODING 29110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nAFC0\nB440\nAFE0\n2500\n27E0\n25A0\n5540\n4F40\n81A0\nENDCHAR\nSTARTCHAR U_71B7\nENCODING 29111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\n2920\nBB60\nAFE0\nA000\n27C0\n3440\n4FC0\n4440\n87C0\nENDCHAR\nSTARTCHAR U_71B8\nENCODING 29112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2A40\nAFE0\nB240\nA6C0\nAB60\n27C0\n2440\n57C0\n4C40\n87C0\nENDCHAR\nSTARTCHAR U_71B9\nENCODING 29113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n7FC0\n2080\n3F80\n0A00\nFFE0\n2080\n3F80\n5240\n8920\nENDCHAR\nSTARTCHAR U_71BA\nENCODING 29114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n2FE0\nA440\nB7C0\nA280\n2FE0\n3000\n4FC0\n4440\n87C0\nENDCHAR\nSTARTCHAR U_71BB\nENCODING 29115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2C60\nB7C0\nA440\nA7C0\n2000\n2EE0\n5AA0\n4660\n8AA0\nENDCHAR\nSTARTCHAR U_71BC\nENCODING 29116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nAFC0\nB540\nA7C0\n2280\n2FE0\n2280\n5FE0\n4440\n8820\nENDCHAR\nSTARTCHAR U_71BD\nENCODING 29117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nA140\nBFE0\nA540\n2FE0\n2920\n2FE0\n5920\n4DE0\n95A0\nENDCHAR\nSTARTCHAR U_71BE\nENCODING 29118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FC0\nBAA0\nA480\nBFE0\nA080\n2EA0\n2AC0\n5E40\n4AA0\n8F20\nENDCHAR\nSTARTCHAR U_71BF\nENCODING 29119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nB280\nAFE0\nA100\nA7C0\n2540\n27C0\n5540\n47C0\n8820\nENDCHAR\nSTARTCHAR U_71C0\nENCODING 29120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nAFE0\nB540\nA7C0\nA540\n27C0\n2100\n5FE0\n4900\n8100\nENDCHAR\nSTARTCHAR U_71C1\nENCODING 29121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nB280\nAFE0\nA540\nAFE0\n2540\n2FE0\n2100\n5FE0\n8100\nENDCHAR\nSTARTCHAR U_71C2\nENCODING 29122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\nAFE0\nBAA0\nAFE0\nA440\n27C0\n2440\n5FE0\n4900\n8100\nENDCHAR\nSTARTCHAR U_71C3\nENCODING 29123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2EC0\nAAA0\nB7E0\nAA80\nA540\n2A20\n2000\n5540\n4AA0\n8AA0\nENDCHAR\nSTARTCHAR U_71C4\nENCODING 29124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7AA0\n4AC0\n9080\n2140\nDAA0\n8AA0\nDEC0\n8880\nF940\n8A20\nENDCHAR\nSTARTCHAR U_71C5\nENCODING 29125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10A0\n7EC0\n1280\nFD40\n2AA0\n4480\n91A0\n7EC0\n1080\n1D40\nE220\nENDCHAR\nSTARTCHAR U_71C6\nENCODING 29126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2200\nAFE0\nB840\nA7A0\nA480\n2FE0\n2AA0\n5BA0\n4820\n8860\nENDCHAR\nSTARTCHAR U_71C7\nENCODING 29127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nAA80\nB7E0\nA520\n26A0\n27E0\n2080\n5FE0\n4880\n8580\nENDCHAR\nSTARTCHAR U_71C8\nENCODING 29128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FA0\n2B40\nAC80\nB7C0\nA820\n37C0\n2440\n27C0\n5280\n4900\n8FE0\nENDCHAR\nSTARTCHAR U_71C9\nENCODING 29129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2F80\nAAE0\nBFA0\nA0A0\n2EA0\n22A0\n24A0\n5E40\n44A0\n8D20\nENDCHAR\nSTARTCHAR U_71CA\nENCODING 29130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1700\n2400\n1B80\n2080\nBAE0\nA280\n5140\n8420\nFFE0\n2480\nC460\nENDCHAR\nSTARTCHAR U_71CB\nENCODING 29131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n2480\n2FE0\nB500\nAFC0\nA500\n27C0\n2500\n37E0\n4D40\n8AA0\nENDCHAR\nSTARTCHAR U_71CC\nENCODING 29132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2540\nAFE0\nB440\nA7C0\n2440\n37C0\n4C40\n47C0\n8C60\nENDCHAR\nSTARTCHAR U_71CD\nENCODING 29133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5400\n7FE0\n5500\nDD00\nF5E0\nDD40\n5540\n5F40\nB540\n9240\n2440\nENDCHAR\nSTARTCHAR U_71CE\nENCODING 29134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nAAA0\nB7C0\nAC60\n37C0\n2440\n27C0\n5540\n4920\n9320\nENDCHAR\nSTARTCHAR U_71CF\nENCODING 29135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2280\nAFE0\nB520\nA900\nAFE0\n2AA0\n2FE0\n5AA0\n4BA0\n8860\nENDCHAR\nSTARTCHAR U_71D0\nENCODING 29136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nAFE0\nB940\nA520\n2F40\n2940\n25E0\n5340\n45E0\n8840\nENDCHAR\nSTARTCHAR U_71D1\nENCODING 29137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\n2480\nBFE0\nAA40\nAA40\n2FC0\n3200\n4FC0\n4200\n9FE0\nENDCHAR\nSTARTCHAR U_71D2\nENCODING 29138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nA900\nBFE0\nA440\n2EE0\n2440\n2FE0\n5180\n42A0\n8C60\nENDCHAR\nSTARTCHAR U_71D3\nENCODING 29139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n2440\nFBE0\n7A40\nA4E0\n2B40\n0400\n64C0\n0B00\n3100\nC0E0\nENDCHAR\nSTARTCHAR U_71D4\nENCODING 29140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2F20\nA540\nBFE0\nA540\nA920\n27C0\n2540\n57C0\n4D40\n87C0\nENDCHAR\nSTARTCHAR U_71D5\nENCODING 29141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n0A00\n2E80\n20A0\nEEC0\n2AA0\nEEE0\n0000\n5240\n8920\nENDCHAR\nSTARTCHAR U_71D6\nENCODING 29142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\nA7C0\nB040\nAFE0\nA4A0\n2EE0\n2040\n5FE0\n4A40\n81C0\nENDCHAR\nSTARTCHAR U_71D7\nENCODING 29143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2EE0\nBAA0\nAFE0\nAAA0\n2BA0\n2AA0\n5BA0\n4CA0\n8860\nENDCHAR\nSTARTCHAR U_71D8\nENCODING 29144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nAEE0\nBAA0\nAEE0\nA920\n2FE0\n2AA0\n5920\n4AA0\n8C60\nENDCHAR\nSTARTCHAR U_71D9\nENCODING 29145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\nAA40\n4940\n2FE0\nD4A0\n4920\n4240\n1440\n2480\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_71DA\nENCODING 29146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n55A0\n5AC0\n9080\n2D40\nD220\n1080\n55A0\n5AC0\n9080\n2940\nC620\nENDCHAR\nSTARTCHAR U_71DB\nENCODING 29147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2A80\nFBE0\n8A20\nFBE0\n2A80\nFBE0\n2440\n2A80\n5100\nE0E0\nENDCHAR\nSTARTCHAR U_71DC\nENCODING 29148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nAEE0\nBAA0\nAEE0\nA920\n2A20\n2EE0\n5BA0\n4820\n8860\nENDCHAR\nSTARTCHAR U_71DD\nENCODING 29149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nAC40\nB7C0\nA100\n2FE0\n2440\n57C0\n4540\n8B20\nENDCHAR\nSTARTCHAR U_71DE\nENCODING 29150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n7DE0\nD2A0\n7C80\n5080\n7D40\n5240\n7C20\n4000\n5240\n8920\nENDCHAR\nSTARTCHAR U_71DF\nENCODING 29151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5AC0\n5480\nA940\n4620\nFFE0\n90A0\n1F80\n0000\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_71E0\nENCODING 29152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nAD60\nBBA0\nA920\nAFE0\n2BA0\n2D60\n5FE0\n4280\n8C60\nENDCHAR\nSTARTCHAR U_71E1\nENCODING 29153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nAFE0\nB100\nAFE0\n2280\n2100\n2FE0\n5100\n4FE0\n8100\nENDCHAR\nSTARTCHAR U_71E2\nENCODING 29154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n64C0\n4A40\n75C0\n4A40\n75C0\n4A40\nFFE0\n94A0\n2480\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_71E3\nENCODING 29155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\n5540\nD740\nF040\nDFC0\n4200\n7FE0\n5700\n8A80\n1260\nENDCHAR\nSTARTCHAR U_71E4\nENCODING 29156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nAA80\nB7C0\nA540\nA7C0\n2540\n2FE0\n2920\n5BA0\n8860\nENDCHAR\nSTARTCHAR U_71E5\nENCODING 29157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nAFE0\nBAA0\nAAA0\nAEE0\n2100\n2FE0\n5380\n4540\n8920\nENDCHAR\nSTARTCHAR U_71E6\nENCODING 29158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n26E0\n24A0\nBF40\nAAA0\nA500\nA920\n2540\n2FE0\n5380\n4D40\n8920\nENDCHAR\nSTARTCHAR U_71E7\nENCODING 29159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2BE0\nA500\nB280\nA1A0\nBEC0\n25A0\n26A0\n5580\n4A00\n91E0\nENDCHAR\nSTARTCHAR U_71E8\nENCODING 29160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nA900\nB7C0\nA100\n2FE0\n32A0\n2FE0\n52A0\n4A40\n86A0\nENDCHAR\nSTARTCHAR U_71E9\nENCODING 29161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2E80\nBAE0\nAEA0\nAB20\n2EA0\n2440\n3F40\n4A40\n4AA0\n9520\nENDCHAR\nSTARTCHAR U_71EA\nENCODING 29162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n2280\nBFE0\nAAA0\nB7A0\n29A0\n2640\n5520\n5440\n83C0\nENDCHAR\nSTARTCHAR U_71EB\nENCODING 29163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n5FE0\n5500\nFFC0\nD540\nDFE0\n5540\n7FC0\n9580\nAD40\n5520\nENDCHAR\nSTARTCHAR U_71EC\nENCODING 29164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25C0\n2B40\nB940\nAF20\nA900\nAFE0\n20A0\n2EA0\n5440\n46C0\n9920\nENDCHAR\nSTARTCHAR U_71ED\nENCODING 29165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nAFE0\nB400\nAFE0\nA220\n2FA0\n3AA0\n4FA0\n42A0\n8F40\nENDCHAR\nSTARTCHAR U_71EE\nENCODING 29166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\nAF40\nB160\nAF40\n2040\n5EA0\n8B20\n7FC0\n0900\n0600\nF9E0\nENDCHAR\nSTARTCHAR U_71EF\nENCODING 29167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2100\n2FE0\nB920\nA540\nA920\n2280\n2560\n5FC0\n5280\n8100\nENDCHAR\nSTARTCHAR U_71F0\nENCODING 29168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\nAFE0\nBA20\nAD40\nA7A0\n2400\n27C0\n5C80\n4300\n8CE0\nENDCHAR\nSTARTCHAR U_71F1\nENCODING 29169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA280\nBFE0\nA440\nA7C0\n2440\n27C0\n5540\n4CA0\n9380\nENDCHAR\nSTARTCHAR U_71F2\nENCODING 29170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nA240\nBFE0\nAAA0\nAFE0\n2840\n2FC0\n5840\n4FC0\n9860\nENDCHAR\nSTARTCHAR U_71F3\nENCODING 29171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n5DE0\n54A0\nF5A0\nDE40\nD5E0\n5520\n5DE0\n7000\n9540\nA4A0\nENDCHAR\nSTARTCHAR U_71F4\nENCODING 29172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\nA7C0\nB820\nAFE0\nAAA0\n2FE0\n2440\n57C0\n4C40\n87C0\nENDCHAR\nSTARTCHAR U_71F5\nENCODING 29173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2BE0\nB480\nA7E0\nA140\n3BE0\n2880\n3BE0\n4880\n5480\nA3E0\nENDCHAR\nSTARTCHAR U_71F6\nENCODING 29174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nAAA0\nBFE0\nAAA0\n2FE0\n2800\n3FE0\n4D40\n5480\nA660\nENDCHAR\nSTARTCHAR U_71F7\nENCODING 29175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nAAA0\nBBA0\nAFE0\n2000\n27C0\n3000\n4FE0\n4540\n8B20\nENDCHAR\nSTARTCHAR U_71F8\nENCODING 29176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nAFE0\nB920\nA280\nAFE0\n2200\n2FE0\n5AA0\n4AA0\n8860\nENDCHAR\nSTARTCHAR U_71F9\nENCODING 29177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2900\n52A0\nB9C0\n56A0\n90A0\n3580\n2440\n4A80\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_71FA\nENCODING 29178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2280\nAFE0\nBAA0\nABA0\n2920\n2FE0\n5380\n4540\n8920\nENDCHAR\nSTARTCHAR U_71FB\nENCODING 29179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2100\nAFE0\nBAA0\nAFE0\nA100\n27C0\n2100\n5FE0\n4540\n8AA0\nENDCHAR\nSTARTCHAR U_71FC\nENCODING 29180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FC0\nA140\nB7E0\nA140\nAFE0\n2540\n2AA0\n5FE0\n4AA0\n9FE0\nENDCHAR\nSTARTCHAR U_71FD\nENCODING 29181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nB900\nA7E0\nA120\nAFC0\n2020\n2FE0\n5B20\n4EA0\n8060\nENDCHAR\nSTARTCHAR U_71FE\nENCODING 29182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n7FE0\n0420\n7FE0\n0080\n7FC0\n4A80\n7AC0\n8920\nENDCHAR\nSTARTCHAR U_71FF\nENCODING 29183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n25A0\nAB60\nB4A0\nA7E0\nA480\n2FC0\n2480\n57C0\n4C80\n87E0\nENDCHAR\nSTARTCHAR U_7200\nENCODING 29184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n5DC0\n6880\nFFE0\nD540\n7740\n5560\n5760\nB540\n9540\n2EC0\nENDCHAR\nSTARTCHAR U_7201\nENCODING 29185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F40\n2A40\nAF60\nB940\nAF40\nAAA0\n2F00\n2000\n57C0\n4540\n9FE0\nENDCHAR\nSTARTCHAR U_7202\nENCODING 29186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nDF60\n9120\nDF60\n9120\nDF60\n9520\nFFE0\nA4A0\n4500\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_7203\nENCODING 29187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2B60\nAA40\nB5A0\nA920\nAFE0\n2920\n27C0\n5380\n4D40\n8920\nENDCHAR\nSTARTCHAR U_7204\nENCODING 29188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n5280\n5FE0\nF540\nD7C0\nD540\n57C0\n7FE0\n5960\nAFE0\n4820\nENDCHAR\nSTARTCHAR U_7205\nENCODING 29189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nAFE0\nB100\nA7C0\nA100\n2FE0\n2AA0\n57C0\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_7206\nENCODING 29190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nB7C0\nA440\nAFE0\nA280\n3FE0\n2540\n5BA0\n4540\n8920\nENDCHAR\nSTARTCHAR U_7207\nENCODING 29191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBC0\n5140\n8B40\nF9C0\n2220\nFC20\n5240\n8920\nENDCHAR\nSTARTCHAR U_7208\nENCODING 29192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2100\n2FE0\nA920\nBFC0\nA920\n2FE0\n2940\n5FC0\n4A60\n95C0\nENDCHAR\nSTARTCHAR U_7209\nENCODING 29193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2A80\nA540\nBFC0\nAD40\n2AC0\n2FC0\n2A80\n5F80\n4AA0\n8F60\nENDCHAR\nSTARTCHAR U_720A\nENCODING 29194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nAAA0\nBFE0\nAA80\nABE0\n2A80\n2BE0\n5940\n4AA0\n92A0\nENDCHAR\nSTARTCHAR U_720B\nENCODING 29195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2480\nAFE0\nB4A0\nAFA0\n24A0\n2FA0\n24A0\n5FA0\n4AA0\n9560\nENDCHAR\nSTARTCHAR U_720C\nENCODING 29196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nAA40\nBFE0\nAA40\nAFE0\n2AA0\n2BE0\n5AA0\n4BE0\n9620\nENDCHAR\nSTARTCHAR U_720D\nENCODING 29197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n2BC0\nA6A0\nBBC0\nAAA0\nAFE0\n2100\n2FE0\n5380\n4540\n8920\nENDCHAR\nSTARTCHAR U_720E\nENCODING 29198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\n5120\nDFE0\nEAA0\nC440\n4FE0\n6440\n57C0\n9540\n8B20\nENDCHAR\nSTARTCHAR U_720F\nENCODING 29199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n5240\n5D80\nF480\nDFE0\nD5C0\n5EA0\n7100\n95C0\nA500\n4FE0\nENDCHAR\nSTARTCHAR U_7210\nENCODING 29200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2100\nAFE0\nB920\nAFE0\nAD40\n2FC0\n2D40\n4FE0\n5AA0\nAFE0\nENDCHAR\nSTARTCHAR U_7211\nENCODING 29201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n2340\n77E0\n6C80\nB7E0\n2480\n27E0\n5480\n4FE0\n8AA0\nENDCHAR\nSTARTCHAR U_7212\nENCODING 29202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\nAAA0\n57C0\n6C60\nA7C0\n3440\nA7C0\n3540\n4920\n8300\nENDCHAR\nSTARTCHAR U_7213\nENCODING 29203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nAEE0\nBAA0\nA920\nAEE0\n2C60\n2EE0\n5C60\n4FE0\n8820\nENDCHAR\nSTARTCHAR U_7214\nENCODING 29204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nB100\nAFE0\nA480\nBFE0\n2E80\n34A0\n5E40\n42A0\n8F20\nENDCHAR\nSTARTCHAR U_7215\nENCODING 29205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nAEA0\nB1C0\n2E80\n5B40\n8E20\n2480\n2500\n4A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7216\nENCODING 29206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n5F00\n55E0\nFE20\nC1E0\n5D00\n55C0\n5D00\n75C0\n9D20\n94E0\nENDCHAR\nSTARTCHAR U_7217\nENCODING 29207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2640\nA540\nB7C0\nA280\n2FE0\n2540\n2FE0\n5540\n4FE0\n8100\nENDCHAR\nSTARTCHAR U_7218\nENCODING 29208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0600\n24E0\n2EA0\nBA40\nA5A0\nBA40\n2FE0\n2540\n57C0\n44A0\n8660\nENDCHAR\nSTARTCHAR U_7219\nENCODING 29209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nAAA0\nBEE0\nA280\nAFE0\n2280\n2FE0\n56A0\n4A40\n8720\nENDCHAR\nSTARTCHAR U_721A\nENCODING 29210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n2480\nA840\nB7A0\nA000\nA7C0\n2540\n2FE0\n5AA0\n4FE0\n8AA0\nENDCHAR\nSTARTCHAR U_721B\nENCODING 29211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nAEE0\nBAA0\nAEE0\nA920\n2FE0\n2AA0\n5FE0\n4BA0\n8D60\nENDCHAR\nSTARTCHAR U_721C\nENCODING 29212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\n26C0\n2FE0\nB280\nAFE0\nA200\n3FE0\n2AA0\n5E40\n4AC0\n9F20\nENDCHAR\nSTARTCHAR U_721D\nENCODING 29213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2940\nAFE0\nBAA0\nAFE0\nA920\n2F20\n29E0\n5F20\n4AA0\n8EE0\nENDCHAR\nSTARTCHAR U_721E\nENCODING 29214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nA520\nB7E0\nA140\nAFE0\n2AA0\n2AA0\n5FE0\n5280\n8FE0\nENDCHAR\nSTARTCHAR U_721F\nENCODING 29215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\nA480\nBEE0\nAAA0\nAEE0\n2FE0\n2900\n5FE0\n4900\n8FE0\nENDCHAR\nSTARTCHAR U_7220\nENCODING 29216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nAEE0\nAAA0\nAEE0\n2500\n2FE0\n3480\n4FC0\n4480\n87E0\nENDCHAR\nSTARTCHAR U_7221\nENCODING 29217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\nA540\nB7C0\nA540\n2FE0\n2920\n2540\n57C0\n4140\n8FE0\nENDCHAR\nSTARTCHAR U_7222\nENCODING 29218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n7FE0\n4AA0\n7DE0\n4500\n7DE0\n4500\nBDE0\nA4A0\nENDCHAR\nSTARTCHAR U_7223\nENCODING 29219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nAFE0\nBAA0\nAFE0\nAAA0\n2FE0\n2100\n5FE0\n4540\n8AA0\nENDCHAR\nSTARTCHAR U_7224\nENCODING 29220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n2440\nAEE0\nBAA0\nAFE0\n2920\n2FE0\n5BA0\n4D60\n8920\nENDCHAR\nSTARTCHAR U_7225\nENCODING 29221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2FE0\n2D40\n7B80\n6D40\nAFE0\n2AA0\n3FE0\n4920\n97A0\n2040\nENDCHAR\nSTARTCHAR U_7226\nENCODING 29222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F80\n2AE0\nBFA0\nAAA0\nAFE0\nA440\n27C0\n2440\n57C0\n4AA0\n9CE0\nENDCHAR\nSTARTCHAR U_7227\nENCODING 29223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\nAFE0\nB920\nA280\nAFE0\n2AA0\n2FE0\n5540\n4920\n9FE0\nENDCHAR\nSTARTCHAR U_7228\nENCODING 29224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6FC0\n4B40\nFFE0\n9120\n7FC0\n5540\nFFE0\n2480\nD560\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_7229\nENCODING 29225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3EE0\n2B40\nBDE0\nAB40\nAFE0\n3560\n3B80\n3540\n5FA0\n5940\n8E80\nENDCHAR\nSTARTCHAR U_722A\nENCODING 29226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n3F80\n2480\n2480\n2480\n2480\n2480\n2480\n4440\n4440\n8420\nENDCHAR\nSTARTCHAR U_722B\nENCODING 29227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00E0\n0700\nF840\n4840\n2480\n2500\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_722C\nENCODING 29228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1BE0\nEAA0\nAAA0\nABE0\nAA00\nAA20\nAA20\nA5E0\nA400\nA300\nA0E0\nENDCHAR\nSTARTCHAR U_722D\nENCODING 29229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n2440\n1280\n3FC0\n0440\nFFE0\n0440\n7FC0\n0400\n1400\n0800\nENDCHAR\nSTARTCHAR U_722E\nENCODING 29230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n1BC0\nEC40\nABC0\nAAC0\nABC0\nAA40\nAAA0\nABE0\nA400\nA3E0\nENDCHAR\nSTARTCHAR U_722F\nENCODING 29231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n7E40\n1280\n3FC0\n2440\n3FC0\n2440\nFFE0\n2040\n2040\n20C0\nENDCHAR\nSTARTCHAR U_7230\nENCODING 29232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n2440\n1280\n7FC0\n0800\nFFE0\n1000\n1F80\n2880\n4700\nB8E0\nENDCHAR\nSTARTCHAR U_7231\nENCODING 29233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n7F40\n2480\nFFE0\n8420\n7FC0\n0800\n1F80\n2900\nCE00\n31E0\nENDCHAR\nSTARTCHAR U_7232\nENCODING 29234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n7C80\n1500\n3F80\n2080\n3FC0\n2040\n3FE0\n4020\nB520\n4AC0\nENDCHAR\nSTARTCHAR U_7233\nENCODING 29235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n1500\n3F80\n2080\n7FE0\nAAA0\n7FC0\n0180\n0600\n1400\n0800\nENDCHAR\nSTARTCHAR U_7234\nENCODING 29236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00E0\nFF40\n9540\nFD40\n9540\nF540\nAD40\nED40\n9540\nFD20\n0820\nENDCHAR\nSTARTCHAR U_7235\nENCODING 29237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n2480\n7FC0\n5240\n7FC0\n4440\n7FE0\n4540\n7D40\n4840\n7CC0\nENDCHAR\nSTARTCHAR U_7236\nENCODING 29238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2080\n4040\n9140\n1100\n1100\n0A00\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_7237\nENCODING 29239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2080\n5140\n0E00\n3180\nC060\n3F80\n0880\n0A80\n0900\n0800\nENDCHAR\nSTARTCHAR U_7238\nENCODING 29240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n3180\n4A40\n0400\n1B00\nE0E0\n3F80\n2480\n3FA0\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_7239\nENCODING 29241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3180\nCA60\n0E00\n35E0\nCF00\n3A00\n0500\n0FC0\n3480\n0300\n7C00\nENDCHAR\nSTARTCHAR U_723A\nENCODING 29242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3180\n4E40\nF1E0\n0000\nFBE0\n4A20\n7AC0\n4A20\n7B20\n4EC0\nFA00\nENDCHAR\nSTARTCHAR U_723B\nENCODING 29243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3080\n0D00\n0300\n0C80\n7140\n1100\n0900\n0600\n0600\n1980\n6060\nENDCHAR\nSTARTCHAR U_723C\nENCODING 29244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4BC0\n5240\n3240\n4BC0\n8240\n0A40\n4A40\n53C0\n3240\n4A40\n8FE0\nENDCHAR\nSTARTCHAR U_723D\nENCODING 29245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n5540\n2480\n5540\n2480\n5540\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_723E\nENCODING 29246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2480\n7FC0\nC460\n6EC0\n5540\n6EC0\n5540\n6EC0\n4440\n44C0\nENDCHAR\nSTARTCHAR U_723F\nENCODING 29247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n0880\n0880\n0F80\n0080\n7F80\n0880\n0880\n0880\n1080\n6080\nENDCHAR\nSTARTCHAR U_7240\nENCODING 29248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n5200\n5FE0\n7200\n1300\nF680\n5680\n5A40\n5260\n9200\n1200\nENDCHAR\nSTARTCHAR U_7241\nENCODING 29249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\n5040\n5040\n7740\n1540\n1540\nF740\n5540\n5040\n5140\n9080\nENDCHAR\nSTARTCHAR U_7242\nENCODING 29250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5440\n5280\n5FE0\n7100\n1100\n17C0\nF100\n5FE0\n5100\n5100\n9100\nENDCHAR\nSTARTCHAR U_7243\nENCODING 29251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1540\n5FE0\n5540\n75C0\n1400\nF7E0\n5100\n5FE0\n5380\n9D60\n1100\nENDCHAR\nSTARTCHAR U_7244\nENCODING 29252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5180\n5240\n5520\n7FC0\n1440\nF7C0\n5440\n57E0\n5620\n5BE0\n9220\nENDCHAR\nSTARTCHAR U_7245\nENCODING 29253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nAFE0\nA940\nEFE0\n2940\nEFC0\nAD40\nAFC0\nAD40\n37C0\n2540\nENDCHAR\nSTARTCHAR U_7246\nENCODING 29254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA100\nAFE0\nA540\nEBA0\n2FE0\nE000\nAFE0\nAAA0\nABA0\nA820\nAFE0\nENDCHAR\nSTARTCHAR U_7247\nENCODING 29255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n2100\n3FE0\n2000\n2000\n3F80\n2080\n2080\n4080\n8080\nENDCHAR\nSTARTCHAR U_7248\nENCODING 29256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n5700\n5400\n7FE0\n4640\n4540\n7540\n5480\n5480\n9540\n9A20\nENDCHAR\nSTARTCHAR U_7249\nENCODING 29257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n5520\n5340\n7900\n47E0\n7100\n5100\n5FE0\n5100\n5100\n9100\nENDCHAR\nSTARTCHAR U_724A\nENCODING 29258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\n5120\n5120\n7920\n42E0\n4400\n7BE0\n4A20\n4A20\n4BE0\n8A20\nENDCHAR\nSTARTCHAR U_724B\nENCODING 29259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\n53E0\n5680\n7B20\n45E0\n4280\n73E0\n5E40\n5180\n5320\n9CE0\nENDCHAR\nSTARTCHAR U_724C\nENCODING 29260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n57E0\n5520\n7FE0\n4520\n77E0\n5280\n5FE0\n5080\n9080\n9080\nENDCHAR\nSTARTCHAR U_724D\nENCODING 29261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n57E0\n5100\n7FE0\n44A0\n4A80\n7480\n5FE0\n5100\n5280\n9C60\nENDCHAR\nSTARTCHAR U_724E\nENCODING 29262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\nA7C0\nA540\nAD40\nF2C0\n8D40\nE280\nA040\nAD20\nB440\n23C0\nENDCHAR\nSTARTCHAR U_724F\nENCODING 29263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA100\nA280\nA440\nFBA0\n8000\n8EA0\nEAA0\nAEA0\nAAA0\nAE20\nAA60\nENDCHAR\nSTARTCHAR U_7250\nENCODING 29264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nA700\nA100\nAFE0\nF100\n8300\nED60\nA920\nAF60\nA920\nAFE0\nENDCHAR\nSTARTCHAR U_7251\nENCODING 29265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nAFC0\nA840\nEFC0\n8800\nEFE0\nAAA0\nAFE0\nAAA0\nB2A0\n2240\nENDCHAR\nSTARTCHAR U_7252\nENCODING 29266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA540\nAFE0\nA540\nF5C0\n8400\n87E0\nE100\nAFE0\nA540\nA920\nA920\nENDCHAR\nSTARTCHAR U_7253\nENCODING 29267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA100\nAFE0\nA280\nFFE0\n8920\nEFE0\nA200\nA3C0\nA240\nA440\nA980\nENDCHAR\nSTARTCHAR U_7254\nENCODING 29268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n5FE0\n5540\n77C0\n4540\n77C0\n5540\n5FE0\n5240\n5040\n9080\nENDCHAR\nSTARTCHAR U_7255\nENCODING 29269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n57C0\n5540\n76C0\n4540\n7640\n57C0\n5240\n5D20\n5440\n93C0\nENDCHAR\nSTARTCHAR U_7256\nENCODING 29270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA100\nAFE0\nA820\nFFE0\n8940\nEFE0\nA920\nAFE0\nA920\nAFE0\nB160\nENDCHAR\nSTARTCHAR U_7257\nENCODING 29271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\nA940\nEFE0\n8940\nEFE0\nAAA0\nABE0\nAAA0\nABE0\n32A0\nENDCHAR\nSTARTCHAR U_7258\nENCODING 29272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n5FE0\n5100\n7FE0\n4AA0\n4FE0\n7440\n57C0\n5440\n57C0\n9C60\nENDCHAR\nSTARTCHAR U_7259\nENCODING 29273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0100\n1100\n2100\n7FE0\n0300\n0500\n0900\n1100\nE100\n0300\nENDCHAR\nSTARTCHAR U_725A\nENCODING 29274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\nFFE0\nA0A0\n3F80\n0000\n7FC0\n2100\n7FE0\n1100\nE700\nENDCHAR\nSTARTCHAR U_725B\nENCODING 29275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n1200\n1200\n3FC0\n4200\n0200\n7FE0\n0200\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_725C\nENCODING 29276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n4800\n7E00\n4800\n8A00\n0C00\n3800\nE800\n4800\n0800\n0800\nENDCHAR\nSTARTCHAR U_725D\nENCODING 29277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5100\n5120\n7D40\n9180\n1D00\n3100\nD100\n1120\n1120\n10E0\nENDCHAR\nSTARTCHAR U_725E\nENCODING 29278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5100\n53E0\n7D20\n9120\n1920\n3120\nD120\n1220\n1420\n18C0\nENDCHAR\nSTARTCHAR U_725F\nENCODING 29279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1080\n3FC0\n0200\n2200\n3FC0\n4200\n0200\nFFE0\n0200\n0200\nENDCHAR\nSTARTCHAR U_7260\nENCODING 29280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nA2A0\nA2E0\nFBA0\nA6A0\n32A0\n62E0\nA280\n2220\n2220\n21E0\nENDCHAR\nSTARTCHAR U_7261\nENCODING 29281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n5080\n5080\n7880\n93E0\n1880\n3080\nD080\n1080\n17E0\n1000\nENDCHAR\nSTARTCHAR U_7262\nENCODING 29282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4220\n1200\n1FC0\n2200\n4200\n7FE0\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_7263\nENCODING 29283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n5120\n5120\n7D20\n9520\n1D20\n3120\n5120\n1220\n1520\n18C0\nENDCHAR\nSTARTCHAR U_7264\nENCODING 29284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nA100\nA100\nFFE0\n2400\n3400\nE400\n2400\n2400\n27C0\n2000\nENDCHAR\nSTARTCHAR U_7265\nENCODING 29285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n57E0\n7A00\n53C0\n9A40\n3240\nD440\n1440\n1940\n1080\nENDCHAR\nSTARTCHAR U_7266\nENCODING 29286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n5700\n5100\n79E0\n9700\n1900\n31E0\n5700\n1120\n1120\n10E0\nENDCHAR\nSTARTCHAR U_7267\nENCODING 29287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n5200\n53E0\n7A40\n9640\n1A40\n3140\nD140\n1080\n1140\n1620\nENDCHAR\nSTARTCHAR U_7268\nENCODING 29288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n57E0\n7800\n9380\n1A80\n3280\nD280\n12A0\n14A0\n1860\nENDCHAR\nSTARTCHAR U_7269\nENCODING 29289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nA200\nA7E0\nFAA0\nA2A0\n32A0\n64A0\nA920\n2220\n2520\n28C0\nENDCHAR\nSTARTCHAR U_726A\nENCODING 29290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n5280\n5280\n7BE0\n9480\n1880\n37E0\n5080\n1080\n1080\n1080\nENDCHAR\nSTARTCHAR U_726B\nENCODING 29291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n5240\n52E0\n7F00\n9240\n1A40\n3140\nD180\n11A0\n1660\n1020\nENDCHAR\nSTARTCHAR U_726C\nENCODING 29292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n51C0\n5700\n7D00\n97E0\n1920\n3120\n5320\n15C0\n1900\n1100\nENDCHAR\nSTARTCHAR U_726D\nENCODING 29293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n6FE0\n6AA0\n7AA0\nAAA0\n3AA0\nEAE0\n2C20\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_726E\nENCODING 29294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n2240\n7FE0\nA100\n22A0\n1260\n1F80\n2200\nFFE0\n0200\n0200\nENDCHAR\nSTARTCHAR U_726F\nENCODING 29295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n5080\n5080\n7FE0\n9080\n1080\n1BE0\n7220\n1220\n13E0\n1220\nENDCHAR\nSTARTCHAR U_7270\nENCODING 29296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nA080\nA7E0\nFCA0\nA4A0\n2CA0\n37E0\nE4A0\n24A0\n27E0\n2420\nENDCHAR\nSTARTCHAR U_7271\nENCODING 29297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nA040\nF740\nA540\nB540\n6740\nA040\n2040\n2140\n2080\nENDCHAR\nSTARTCHAR U_7272\nENCODING 29298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nA280\nA280\nFBE0\nA480\n3880\n63C0\nA080\n2080\n2080\n2FE0\nENDCHAR\nSTARTCHAR U_7273\nENCODING 29299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nA440\nA540\nFD40\nAFE0\n3840\n6940\nA940\n2FE0\n2040\n2180\nENDCHAR\nSTARTCHAR U_7274\nENCODING 29300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nA780\nA480\nFC80\nA7E0\n3480\nE480\n2480\n24A0\n2760\n2CA0\nENDCHAR\nSTARTCHAR U_7275\nENCODING 29301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n2080\nFFE0\nA420\n3FC0\n4400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7276\nENCODING 29302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\n7FC0\n0800\nFFE0\n5440\n9FA0\n2400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7277\nENCODING 29303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5280\n5440\n7C20\n9380\n1900\n3100\n57C0\n1100\n1100\n1FE0\nENDCHAR\nSTARTCHAR U_7278\nENCODING 29304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\nA820\nF7C0\nA080\n2100\n3FE0\nE100\n2100\n2500\n2200\nENDCHAR\nSTARTCHAR U_7279\nENCODING 29305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA7C0\nF100\nA100\nAFE0\n3080\n6FE0\nA480\n2280\n2080\n2380\nENDCHAR\nSTARTCHAR U_727A\nENCODING 29306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nA280\nA280\nFFE0\nAAA0\n2AA0\n3AA0\nECE0\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_727B\nENCODING 29307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2440\nAFE0\nF540\nA580\n2740\n35A0\nE740\n2980\n2920\n36E0\nENDCHAR\nSTARTCHAR U_727C\nENCODING 29308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nA540\nA540\nFA80\nAA80\n3540\n6540\nAFC0\n2100\n2100\n3FE0\nENDCHAR\nSTARTCHAR U_727D\nENCODING 29309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0A00\nFFE0\n8920\nBFA0\n2400\n3FC0\n4400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_727E\nENCODING 29310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nA100\nAFC0\nF240\nAFE0\n2000\n37C0\nE440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_727F\nENCODING 29311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\nA500\nAFC0\nF100\nAFE0\n3000\n67E0\nA420\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_7280\nENCODING 29312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4040\n7FC0\n5280\n4B00\n72C0\n4A00\n5FC0\n4200\nBFE0\n8200\nENDCHAR\nSTARTCHAR U_7281\nENCODING 29313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n1120\nFD20\n1120\n3820\n54E0\nA200\n3FC0\n4200\nFFE0\n0200\nENDCHAR\nSTARTCHAR U_7282\nENCODING 29314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1A00\n73E0\n12A0\n7CA0\n3920\nD6A0\n2240\n3FC0\n4200\n7FE0\n0200\nENDCHAR\nSTARTCHAR U_7283\nENCODING 29315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n57C0\n7840\n5440\n9280\n1FE0\n3000\nD7C0\n1440\n1440\n17C0\nENDCHAR\nSTARTCHAR U_7284\nENCODING 29316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\nA280\nF440\nAFE0\n3040\n6740\nA540\n2740\n2040\n21C0\nENDCHAR\nSTARTCHAR U_7285\nENCODING 29317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nAAA0\nA920\nFFE0\nA920\n2D60\n3D60\nEFE0\n2820\n2820\n2860\nENDCHAR\nSTARTCHAR U_7286\nENCODING 29318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA7E0\nA100\nFFC0\nA440\n37C0\n6440\nA740\n25C0\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_7287\nENCODING 29319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n3FC0\n4400\n7FC0\n0400\n5280\n7BC0\n9480\n1BE0\n7080\n1080\nENDCHAR\nSTARTCHAR U_7288\nENCODING 29320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\nA540\nAFE0\nF200\nAFE0\n2440\n3BE0\nE240\n22C0\n2220\n21E0\nENDCHAR\nSTARTCHAR U_7289\nENCODING 29321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n57E0\n5240\n7BC0\n9000\n17C0\n1880\n77E0\n1080\n1280\n1100\nENDCHAR\nSTARTCHAR U_728A\nENCODING 29322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA7C0\nA100\nFFE0\nA4A0\n2280\n3480\nE280\n2FE0\n2240\n2C20\nENDCHAR\nSTARTCHAR U_728B\nENCODING 29323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nA440\nA7C0\nFC40\nA7C0\n2440\n37C0\nE440\n3FE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_728C\nENCODING 29324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\nAA20\nAA20\nFEE0\nA800\n2FE0\n38A0\nEFA0\n2840\n28A0\n2920\nENDCHAR\nSTARTCHAR U_728D\nENCODING 29325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nAFE0\nA4A0\nFDE0\nA6A0\n23E0\n3A80\nEBE0\n2480\n2A80\n31E0\nENDCHAR\nSTARTCHAR U_728E\nENCODING 29326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFBE0\n2040\nFA40\n2140\nFCC0\n2400\n3FC0\n4400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_728F\nENCODING 29327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\nA820\nFFE0\nA800\n2FE0\n3AA0\nEFE0\n2AA0\n2AA0\n3860\nENDCHAR\nSTARTCHAR U_7290\nENCODING 29328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\nAEA0\nA260\nFF20\nA2A0\n2360\n36A0\nEA20\n23E0\n2220\n2220\nENDCHAR\nSTARTCHAR U_7291\nENCODING 29329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nA440\nA7C0\nFC40\nA7C0\n2440\n37C0\nE140\n2FE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_7292\nENCODING 29330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\nA000\nFBC0\nA240\n23C0\n3000\n6FE0\nAAA0\n2BA0\n2860\nENDCHAR\nSTARTCHAR U_7293\nENCODING 29331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA200\nA7E0\nF520\nAFE0\n2220\n3440\n67E0\nAD20\n27E0\n2120\n2640\nENDCHAR\nSTARTCHAR U_7294\nENCODING 29332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\nA800\nB780\nE000\nAFC0\n3AC0\n2740\nEFC0\n2740\n2AA0\n2220\nENDCHAR\nSTARTCHAR U_7295\nENCODING 29333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nA7E0\nF280\nAFE0\n2200\n37E0\n6D20\nA7E0\n2520\n27E0\n2560\nENDCHAR\nSTARTCHAR U_7296\nENCODING 29334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n52A0\n5AC0\n9480\n2B40\nFFE0\n8020\nA420\n3FC0\n4400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_7297\nENCODING 29335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\nA920\nF7C0\nA100\n27C0\n3100\nEFE0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_7298\nENCODING 29336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n7FE0\n5DC0\n6AA0\n4A80\n5FE0\n6200\n7FE0\n8200\nENDCHAR\nSTARTCHAR U_7299\nENCODING 29337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2480\nAFC0\nF4A0\nAFE0\n3280\n6540\nBAA0\n2140\n2080\n2700\nENDCHAR\nSTARTCHAR U_729A\nENCODING 29338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n47E0\n7E40\n4940\n6A40\n58C0\nA400\n3F80\n4400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_729B\nENCODING 29339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFBE0\n2140\nFC80\nA940\n7FE0\n5200\n5FC0\n4200\n7FE0\n8200\nENDCHAR\nSTARTCHAR U_729C\nENCODING 29340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nAE80\nA0E0\nFFA0\nAAA0\n2EA0\n32A0\nE440\n2E40\n24A0\n2D20\nENDCHAR\nSTARTCHAR U_729D\nENCODING 29341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\nA280\nF100\nAFE0\n2540\n37C0\nE540\n2FE0\n2100\n3FE0\nENDCHAR\nSTARTCHAR U_729E\nENCODING 29342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\nA200\nBFE0\nE480\nACC0\n37A0\n2000\nEFE0\n2AA0\n2BA0\n2860\nENDCHAR\nSTARTCHAR U_729F\nENCODING 29343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n0A40\n7FE0\n4520\n7FE0\n4940\n3520\n3FC0\n4400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_72A0\nENCODING 29344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nA7E0\nA100\nFBC0\nA100\n2FE0\n34A0\nEFE0\n24C0\n3EA0\n2560\nENDCHAR\nSTARTCHAR U_72A1\nENCODING 29345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nAA80\nAFE0\nFA80\nAFC0\n2940\n3FC0\nE940\n2FE0\n3960\n2BA0\nENDCHAR\nSTARTCHAR U_72A2\nENCODING 29346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\nA100\nFFE0\nAAA0\n2FE0\n3440\nE7C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_72A3\nENCODING 29347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\nAA80\nA540\nFFE0\nAAA0\n2FE0\n3DC0\nEB40\n2DC0\n2B60\n2DA0\nENDCHAR\nSTARTCHAR U_72A4\nENCODING 29348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nAAA0\nAFE0\nF240\nA560\n2F40\n3960\nEF40\n2960\n2F40\n2960\nENDCHAR\nSTARTCHAR U_72A5\nENCODING 29349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\nAA80\nFFE0\nAAA0\n2FE0\n3CA0\nEEC0\n2CE0\n3740\n2AA0\nENDCHAR\nSTARTCHAR U_72A6\nENCODING 29350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nA440\nA7C0\nF440\nAFE0\n3280\n2FE0\nE540\n2BA0\n2540\n2B20\nENDCHAR\nSTARTCHAR U_72A7\nENCODING 29351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nAFE0\nA100\nFFE0\nA100\n2FE0\n34A0\nEFE0\n2EC0\n2260\n2DA0\nENDCHAR\nSTARTCHAR U_72A8\nENCODING 29352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5140\n7DE0\nD340\n7DE0\n5140\n7DE0\n1200\n1FC0\n2200\n7FE0\n0200\nENDCHAR\nSTARTCHAR U_72A9\nENCODING 29353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n27C0\nFD40\n27C0\nFD40\n57A0\n2CE0\n7F80\n4400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_72AA\nENCODING 29354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nAFE0\nFA80\nABE0\nAEA0\n3B80\n6A60\nB7C0\n2CA0\n2300\n3CE0\nENDCHAR\nSTARTCHAR U_72AB\nENCODING 29355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n7FE0\nD540\n7FE0\n7BE0\n5F40\n7DE0\n7FC0\n8400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_72AC\nENCODING 29356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n0480\n0400\nFFE0\n0400\n0400\n0600\n0900\n1080\n2040\nC020\nENDCHAR\nSTARTCHAR U_72AD\nENCODING 29357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6800\n1000\n3000\n4800\n8800\n1800\n2800\n4800\n8800\n2800\n1000\nENDCHAR\nSTARTCHAR U_72AE\nENCODING 29358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n0880\nFFE0\n0800\n0FC0\n1480\n1480\n2300\n2300\n4480\n9860\nENDCHAR\nSTARTCHAR U_72AF\nENCODING 29359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n5440\n2440\n5440\n9440\n3580\n5400\n9400\n1420\n5420\n23E0\nENDCHAR\nSTARTCHAR U_72B0\nENCODING 29360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A00\n5200\n2200\n5F80\n9280\n3280\n5280\n9280\n12A0\n54A0\n2860\nENDCHAR\nSTARTCHAR U_72B1\nENCODING 29361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n5200\n2200\n5F80\n9280\n3680\n5280\n9580\n14A0\n5860\n2020\nENDCHAR\nSTARTCHAR U_72B2\nENCODING 29362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n5080\n2080\n57E0\n9080\n3180\n5280\n9480\n1880\n5280\n2100\nENDCHAR\nSTARTCHAR U_72B3\nENCODING 29363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n5200\n23E0\n5420\n9020\n2920\n48A0\n88A0\n0820\n5140\n2080\nENDCHAR\nSTARTCHAR U_72B4\nENCODING 29364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n87C0\n5100\n2100\n5100\n9FE0\n3100\n5100\n9100\n1100\n5100\n2100\nENDCHAR\nSTARTCHAR U_72B5\nENCODING 29365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A00\n53E0\n2400\n5800\n97C0\n3080\n5100\n9200\n1420\n5420\n23E0\nENDCHAR\nSTARTCHAR U_72B6\nENCODING 29366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1180\n9140\n5100\n5FE0\n1100\n1100\n3280\nD280\n1440\n1440\n1820\nENDCHAR\nSTARTCHAR U_72B7\nENCODING 29367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n57E0\n2400\n5400\n9400\n3400\n5400\n9400\n1400\n5400\n2800\nENDCHAR\nSTARTCHAR U_72B8\nENCODING 29368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n5040\n2240\n5240\n9440\n37E0\n5020\n97A0\n1020\n5120\n20C0\nENDCHAR\nSTARTCHAR U_72B9\nENCODING 29369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8940\n5120\n2100\n5FE0\n9280\n3280\n5280\n9280\n12A0\n54A0\n2860\nENDCHAR\nSTARTCHAR U_72BA\nENCODING 29370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A00\n5100\n2FE0\n5000\n9380\n3280\n5280\n9280\n12A0\n54A0\n2860\nENDCHAR\nSTARTCHAR U_72BB\nENCODING 29371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nAFE0\n4100\nA7C0\n3540\n3540\n5540\n95C0\n1540\n5100\n2100\nENDCHAR\nSTARTCHAR U_72BC\nENCODING 29372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9080\n5F80\n2180\n6280\n9380\n3680\n5A80\n9280\n12A0\n5AA0\n2460\nENDCHAR\nSTARTCHAR U_72BD\nENCODING 29373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n87E0\n5080\n2280\n5480\n97E0\n3080\n5180\n9280\n1480\n5A80\n2100\nENDCHAR\nSTARTCHAR U_72BE\nENCODING 29374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n5280\n2240\nDFE0\n1200\n3300\n5500\n9480\n1480\n5860\n2040\nENDCHAR\nSTARTCHAR U_72BF\nENCODING 29375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A00\n5100\n2000\n5FE0\n9100\n3100\n5180\n9140\n1120\n5100\n2100\nENDCHAR\nSTARTCHAR U_72C0\nENCODING 29376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n5180\n5140\n5FE0\n7100\n1100\nF100\n5280\n5280\n5440\n9820\nENDCHAR\nSTARTCHAR U_72C1\nENCODING 29377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5240\n2420\n5FA0\n9000\n3280\n5280\n9280\n12A0\n54A0\n2860\nENDCHAR\nSTARTCHAR U_72C2\nENCODING 29378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5100\n2100\n5100\n9100\n37C0\n5100\n9100\n1100\n5100\n2FE0\nENDCHAR\nSTARTCHAR U_72C3\nENCODING 29379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n5140\n2140\n5140\n9140\n37C0\n5240\n9240\n1240\n5240\n2FE0\nENDCHAR\nSTARTCHAR U_72C4\nENCODING 29380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n5100\n2520\n5540\n9580\n3900\n5100\n9280\n1280\n5440\n2820\nENDCHAR\nSTARTCHAR U_72C5\nENCODING 29381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n88C0\n5700\n2100\n5100\n9100\n3FE0\n5100\n9100\n1100\n5100\n27C0\nENDCHAR\nSTARTCHAR U_72C6\nENCODING 29382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5100\n27E0\n5520\n9520\n37E0\n5520\n9100\n1100\n5100\n2100\nENDCHAR\nSTARTCHAR U_72C7\nENCODING 29383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n9200\n6200\n6FE0\nA700\n2680\n6A80\nB240\n2260\nA200\n4200\nENDCHAR\nSTARTCHAR U_72C8\nENCODING 29384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5420\n24A0\n54A0\n94A0\n34A0\n54A0\n94A0\n1140\n5220\n2C20\nENDCHAR\nSTARTCHAR U_72C9\nENCODING 29385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8800\n57E0\n2100\n5100\n9140\n3320\n5520\n9100\n1100\n5000\n2FE0\nENDCHAR\nSTARTCHAR U_72CA\nENCODING 29386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n2080\n3F80\n0500\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_72CB\nENCODING 29387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n5000\n2000\n5FE0\n9100\n3540\n5540\n9520\n1920\n5500\n2200\nENDCHAR\nSTARTCHAR U_72CC\nENCODING 29388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5500\n2500\n57E0\n9900\n3100\n57C0\n9100\n1100\n5100\n2FE0\nENDCHAR\nSTARTCHAR U_72CD\nENCODING 29389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A00\n53E0\n2420\n5FA0\n94A0\n34A0\n57A0\n9460\n1400\n5420\n23E0\nENDCHAR\nSTARTCHAR U_72CE\nENCODING 29390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n54A0\n24A0\n57E0\n94A0\n34A0\n57E0\n9080\n1080\n5080\n2080\nENDCHAR\nSTARTCHAR U_72CF\nENCODING 29391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8400\n57E0\n2800\n5500\n95C0\n3740\n5D40\n95C0\n1520\n5520\n23E0\nENDCHAR\nSTARTCHAR U_72D0\nENCODING 29392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\nAF00\n4A80\nAA80\n2A80\n2A40\n6A40\nAA40\n2AA0\n2BA0\nD020\nENDCHAR\nSTARTCHAR U_72D1\nENCODING 29393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5280\n2440\n5A20\n9100\n3FE0\n5040\n9480\n1300\n5100\n2080\nENDCHAR\nSTARTCHAR U_72D2\nENCODING 29394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A80\n5FE0\n22A0\n57E0\n9A80\n3A80\n5FE0\n92A0\n12E0\n5480\n2880\nENDCHAR\nSTARTCHAR U_72D3\nENCODING 29395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n9100\n6FE0\n6920\nA940\n2FC0\n6A80\nAA80\n2900\nAA80\n5460\nENDCHAR\nSTARTCHAR U_72D4\nENCODING 29396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5420\n2420\n57E0\n9400\n3520\n5540\n9580\n1520\n5920\n20E0\nENDCHAR\nSTARTCHAR U_72D5\nENCODING 29397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA080\n6480\n6480\nABE0\n3EA0\n64A0\nAAA0\n3EA0\n2120\nA2A0\n4440\nENDCHAR\nSTARTCHAR U_72D6\nENCODING 29398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9200\n5100\n2FE0\n5820\n9280\n3280\n5280\n9240\n1440\n5420\n2820\nENDCHAR\nSTARTCHAR U_72D7\nENCODING 29399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9200\n5200\n27E0\n5420\n9BA0\n32A0\n52A0\n93A0\n1020\n5140\n2080\nENDCHAR\nSTARTCHAR U_72D8\nENCODING 29400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8940\n5120\n27E0\n5500\n9520\n3520\n5540\n9580\n16A0\n5560\n2220\nENDCHAR\nSTARTCHAR U_72D9\nENCODING 29401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n5440\n2440\n57C0\n9440\n3440\n5440\n97C0\n1440\n5440\n2FE0\nENDCHAR\nSTARTCHAR U_72DA\nENCODING 29402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n87C0\n5440\n2440\n5440\n97C0\n3440\n5440\n97C0\n1440\n5000\n2FE0\nENDCHAR\nSTARTCHAR U_72DB\nENCODING 29403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n5200\n27E0\n5420\n9420\n37E0\n5420\n9420\n1420\n57E0\n2420\nENDCHAR\nSTARTCHAR U_72DC\nENCODING 29404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5100\n2FE0\n5100\n9100\n37C0\n5440\n9440\n1440\n57C0\n2440\nENDCHAR\nSTARTCHAR U_72DD\nENCODING 29405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8400\n57E0\n2820\n5140\n9500\n3580\n5940\n9920\n1120\n5500\n2200\nENDCHAR\nSTARTCHAR U_72DE\nENCODING 29406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n57E0\n2420\n5000\n97E0\n3100\n5100\n9100\n1100\n5100\n2300\nENDCHAR\nSTARTCHAR U_72DF\nENCODING 29407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8800\n57E0\n2000\n57C0\n9440\n37C0\n5440\n97C0\n1440\n5000\n2FE0\nENDCHAR\nSTARTCHAR U_72E0\nENCODING 29408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n5440\n27C0\n5440\n97C0\n3500\n5540\n9480\n1480\n5540\n2620\nENDCHAR\nSTARTCHAR U_72E1\nENCODING 29409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A00\n5100\n2FE0\n5280\n9440\n3AA0\n5280\n9280\n1100\nA280\n4C60\nENDCHAR\nSTARTCHAR U_72E2\nENCODING 29410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n53C0\n2440\n5A80\n9100\n3680\n5860\n97C0\n1440\n57C0\n2440\nENDCHAR\nSTARTCHAR U_72E3\nENCODING 29411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A80\n5280\n2AA0\n56C0\n9280\n36C0\n5AA0\n9280\n12A0\n54A0\n2860\nENDCHAR\nSTARTCHAR U_72E4\nENCODING 29412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5100\n2FE0\n5100\n97C0\n3000\n57C0\n9440\n1440\n57C0\n2440\nENDCHAR\nSTARTCHAR U_72E5\nENCODING 29413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9400\n67E0\n2820\n57A0\n94A0\n37A0\n54A0\n97A0\n1020\n50A0\n2040\nENDCHAR\nSTARTCHAR U_72E6\nENCODING 29414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAFE0\n4AA0\nAAA0\n3FE0\n2AA0\n6AA0\nBFE0\n2AA0\n2AA0\n2AA0\nC860\nENDCHAR\nSTARTCHAR U_72E7\nENCODING 29415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n91C0\n5F00\n2100\n5FE0\n9100\n3100\n57C0\n9440\n1440\n57C0\n2440\nENDCHAR\nSTARTCHAR U_72E8\nENCODING 29416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8940\n5120\n2FE0\n5500\n9520\n3F20\n5540\n9480\n14A0\n6960\n2220\nENDCHAR\nSTARTCHAR U_72E9\nENCODING 29417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n57E0\n2420\n5080\n9080\n3FE0\n5480\n9280\n1080\n5280\n2100\nENDCHAR\nSTARTCHAR U_72EA\nENCODING 29418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAFE0\n4820\nABA0\n2820\n2BA0\n6AA0\nAAA0\n2BA0\n2820\n28A0\nC840\nENDCHAR\nSTARTCHAR U_72EB\nENCODING 29419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A20\n57A0\n2240\n5280\n9FE0\n3200\n5640\n9B80\n1220\n5220\n21E0\nENDCHAR\nSTARTCHAR U_72EC\nENCODING 29420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n5100\n27E0\n5520\n9520\n3520\n57E0\n9100\n1120\n5FE0\n2020\nENDCHAR\nSTARTCHAR U_72ED\nENCODING 29421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5FE0\n2100\n5920\n9540\n3FE0\n5100\n9100\n1280\n5440\n2820\nENDCHAR\nSTARTCHAR U_72EE\nENCODING 29422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA3E0\n4A80\nABE0\n2AA0\n2AA0\n6AA0\nAAA0\n2AA0\n22E0\nA480\n4880\nENDCHAR\nSTARTCHAR U_72EF\nENCODING 29423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5280\n2440\n5820\n97A0\n3000\n5FE0\n9100\n1240\n5440\n2FA0\nENDCHAR\nSTARTCHAR U_72F0\nENCODING 29424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9200\n53C0\n2480\n57C0\n9140\n3FE0\n5140\n97C0\n1100\n5100\n2300\nENDCHAR\nSTARTCHAR U_72F1\nENCODING 29425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA8C0\n44A0\nA480\n3BE0\n2880\n6880\nA880\n2A80\n2D40\n2A20\nC420\nENDCHAR\nSTARTCHAR U_72F2\nENCODING 29426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAE80\n4280\nA480\n2480\n27C0\n6DA0\nB6A0\n2480\n2480\nB680\n4900\nENDCHAR\nSTARTCHAR U_72F3\nENCODING 29427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA300\n4480\nA840\n37E0\n2100\n6FE0\nA100\n2540\n2920\n2920\nC300\nENDCHAR\nSTARTCHAR U_72F4\nENCODING 29428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\n4920\nAFC0\n2900\n2B20\n6CE0\nA100\n27C0\n2100\n2100\nDFE0\nENDCHAR\nSTARTCHAR U_72F5\nENCODING 29429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n5280\n2240\n5FE0\n9540\n3580\n5540\n95A0\n1540\n59A0\n26E0\nENDCHAR\nSTARTCHAR U_72F6\nENCODING 29430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8B60\n5080\n2360\n5080\n9FE0\n3280\n57E0\n9AA0\n12A0\n52E0\n2080\nENDCHAR\nSTARTCHAR U_72F7\nENCODING 29431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8BC0\n5240\n23C0\n5000\n97E0\n3420\n57E0\n9420\n17E0\n5420\n24E0\nENDCHAR\nSTARTCHAR U_72F8\nENCODING 29432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5520\n2520\n57E0\n9520\n37E0\n5100\n97C0\n1100\n5100\n2FE0\nENDCHAR\nSTARTCHAR U_72F9\nENCODING 29433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n57E0\n2100\n5540\n9540\n3BA0\n5100\n9100\n1280\n5440\n2820\nENDCHAR\nSTARTCHAR U_72FA\nENCODING 29434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5FE0\n2000\n57C0\n9000\n37C0\n5000\n97C0\n1440\n57C0\n2440\nENDCHAR\nSTARTCHAR U_72FB\nENCODING 29435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A00\n5440\n2FE0\n5280\n9440\n3A20\n53C0\n9680\n1900\n5280\n2C60\nENDCHAR\nSTARTCHAR U_72FC\nENCODING 29436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n57C0\n2440\n57C0\n9440\n37C0\n5520\n9540\n1480\n5540\n2620\nENDCHAR\nSTARTCHAR U_72FD\nENCODING 29437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5420\n27E0\n5420\n97E0\n3420\n57E0\n9000\n1240\n5220\n2C20\nENDCHAR\nSTARTCHAR U_72FE\nENCODING 29438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n55E0\n2500\n5F00\n95E0\n1740\n3540\n5D40\n9540\n1540\n1540\n6E40\nENDCHAR\nSTARTCHAR U_72FF\nENCODING 29439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E20\n25C0\n6440\nA960\n2F40\n2540\n6540\nADE0\n2400\n2A00\nD1E0\nENDCHAR\nSTARTCHAR U_7300\nENCODING 29440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nA880\n44C0\nB2A0\n2AA0\n6480\nA8A0\n3840\n2880\nAB00\n4C00\nENDCHAR\nSTARTCHAR U_7301\nENCODING 29441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E20\n24A0\n64A0\nBFA0\n24A0\n66A0\nADA0\n34A0\n2420\n2420\nC4E0\nENDCHAR\nSTARTCHAR U_7302\nENCODING 29442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97C0\n5440\n27C0\n5440\n17C0\n3000\n57C0\n9100\n1FE0\n5100\n2100\nENDCHAR\nSTARTCHAR U_7303\nENCODING 29443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5280\n2440\n5820\n97C0\n3000\n5A40\n9540\n1540\n5080\n2FE0\nENDCHAR\nSTARTCHAR U_7304\nENCODING 29444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n4000\nA7C0\n2440\n57C0\n9100\n1540\n1920\n5520\n2200\nENDCHAR\nSTARTCHAR U_7305\nENCODING 29445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n5280\n2EE0\n5280\n9EE0\n3280\n5280\n9EE0\n1280\n5280\n2280\nENDCHAR\nSTARTCHAR U_7306\nENCODING 29446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n7BC0\n0A00\n7BC0\n0A00\n7BC0\n0E80\n7FE0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_7307\nENCODING 29447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA1E0\n4100\nAFE0\n2920\n2FC0\n6920\nA9E0\n2800\n2B80\n32A0\nCC60\nENDCHAR\nSTARTCHAR U_7308\nENCODING 29448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n57E0\n2520\n57E0\n9520\n37E0\n5280\n9FE0\n1080\n5080\n2080\nENDCHAR\nSTARTCHAR U_7309\nENCODING 29449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n97E0\n6240\n63C0\n9240\n33C0\n5240\n9FE0\n1240\n5420\n2820\nENDCHAR\nSTARTCHAR U_730A\nENCODING 29450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n5660\n2420\n56E0\n9420\n3420\n57E0\n9280\n12A0\n54A0\n2860\nENDCHAR\nSTARTCHAR U_730B\nENCODING 29451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n0480\n7FE0\n1100\nE0E0\n1040\n28A0\nFBE0\n2080\n5140\n8A20\nENDCHAR\nSTARTCHAR U_730C\nENCODING 29452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFCC0\n10A0\n57E0\n5480\nBA80\n1080\n3880\n5540\n9220\n1420\nENDCHAR\nSTARTCHAR U_730D\nENCODING 29453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n9FE0\n6100\n6540\n9540\n3BA0\n5100\n9380\n1540\n5920\n2100\nENDCHAR\nSTARTCHAR U_730E\nENCODING 29454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A80\n5280\n27C0\n5280\n9FE0\n3000\n57C0\n9440\n17C0\n5440\n27C0\nENDCHAR\nSTARTCHAR U_730F\nENCODING 29455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n27E0\n6420\n97E0\n1400\n35E0\n5520\n95E0\n1520\n95E0\n6920\nENDCHAR\nSTARTCHAR U_7310\nENCODING 29456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9480\n6FE0\n2200\n57C0\n9200\n3200\n5FE0\n9300\n1520\n5520\n28E0\nENDCHAR\nSTARTCHAR U_7311\nENCODING 29457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAFC0\n4840\nAFC0\n2840\n2FC0\n6900\nAF20\n29C0\n2900\nAF20\n48E0\nENDCHAR\nSTARTCHAR U_7312\nENCODING 29458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n48C0\n78A0\n4BE0\nFC80\n8480\nFC80\n8480\nFD40\n8620\n8C20\nENDCHAR\nSTARTCHAR U_7313\nENCODING 29459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57C0\n2540\n57C0\n9540\n17C0\n3100\n5FE0\n9100\n1380\n1540\n6920\nENDCHAR\nSTARTCHAR U_7314\nENCODING 29460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n4820\nA7C0\n2000\n6FE0\nA100\n2940\n2920\nB520\n4200\nENDCHAR\nSTARTCHAR U_7315\nENCODING 29461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5D00\n2500\n65E0\nAE20\n2880\n6DC0\nA5A0\n26A0\n24A0\nB480\n4980\nENDCHAR\nSTARTCHAR U_7316\nENCODING 29462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8BC0\n5240\n23C0\n5240\n93C0\n3000\n57E0\n9420\n17E0\n5420\n27E0\nENDCHAR\nSTARTCHAR U_7317\nENCODING 29463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n5FE0\n2280\n5440\n9FE0\n3040\n5740\n9540\n1740\n5040\n21C0\nENDCHAR\nSTARTCHAR U_7318\nENCODING 29464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9A20\n6A20\n6FA0\nB220\n2FA0\n62A0\nAFA0\n2AA0\n2AA0\nABA0\n4260\nENDCHAR\nSTARTCHAR U_7319\nENCODING 29465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n5A20\n2540\n57C0\n9140\n3FE0\n5140\n97C0\n1100\n5500\n2200\nENDCHAR\nSTARTCHAR U_731A\nENCODING 29466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9280\n5240\n27E0\n5C80\n97E0\n3480\n57E0\n9480\n1480\n57E0\n2400\nENDCHAR\nSTARTCHAR U_731B\nENCODING 29467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97C0\n5080\n2100\n5FE0\n9100\n3500\n5200\n9FE0\n2AA0\nAAA0\n5FE0\nENDCHAR\nSTARTCHAR U_731C\nENCODING 29468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n5FE0\n2100\n67C0\nA100\n2FE0\n6440\nA7C0\n2440\n27C0\nC440\nENDCHAR\nSTARTCHAR U_731D\nENCODING 29469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5FE0\n2440\n5440\n9AA0\n3120\n5100\n9FE0\n1100\n5100\n2100\nENDCHAR\nSTARTCHAR U_731E\nENCODING 29470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n2280\n5440\n9BA0\n1100\n3FE0\n5100\n97C0\n1440\n57C0\n2440\nENDCHAR\nSTARTCHAR U_731F\nENCODING 29471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\nA540\n4080\nAFC0\n2A40\n6FC0\nAA40\n2FC0\nAA40\n5260\n2020\nENDCHAR\nSTARTCHAR U_7320\nENCODING 29472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nA500\n5FC0\nB540\n3FC0\n7540\nB540\n3FE0\n2480\nA840\n5020\nENDCHAR\nSTARTCHAR U_7321\nENCODING 29473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2AA0\n5AA0\n9FE0\n1200\n33E0\n5640\n9940\n1080\n5100\n2E00\nENDCHAR\nSTARTCHAR U_7322\nENCODING 29474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nD4E0\n24A0\n7FA0\nA4E0\n24A0\n2EA0\n6AE0\nAAA0\n2EA0\nA120\n4260\nENDCHAR\nSTARTCHAR U_7323\nENCODING 29475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAAA0\n4920\nAAA0\n2FE0\n2440\n6A20\nA3C0\n2680\n2900\n2280\nDC60\nENDCHAR\nSTARTCHAR U_7324\nENCODING 29476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nAF40\n4AA0\nA440\n3BA0\n6100\nAFE0\n2280\n2280\nA440\n4820\nENDCHAR\nSTARTCHAR U_7325\nENCODING 29477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n5540\n27C0\n5540\n97C0\n3000\n57E0\n9540\n1480\n5540\n2620\nENDCHAR\nSTARTCHAR U_7326\nENCODING 29478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57C0\n2440\n57C0\n9540\n17C0\n3540\n57C0\n9540\n15A0\n9760\n6820\nENDCHAR\nSTARTCHAR U_7327\nENCODING 29479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97C0\n6440\n6740\nA540\n2FE0\n6820\nABA0\n2AA0\n2BA0\nA820\n4860\nENDCHAR\nSTARTCHAR U_7328\nENCODING 29480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\nAE40\n4A80\nAFC0\n2200\n3FE0\n6200\nA3C0\n2680\nA900\n56E0\nENDCHAR\nSTARTCHAR U_7329\nENCODING 29481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n5440\n27C0\n5440\n97C0\n3500\n57E0\n9900\n17C0\n5100\n2FE0\nENDCHAR\nSTARTCHAR U_732A\nENCODING 29482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8920\n57A0\n2140\n57E0\n9100\n33E0\n5620\n9BE0\n1220\n53E0\n2220\nENDCHAR\nSTARTCHAR U_732B\nENCODING 29483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A40\n57E0\n2240\n5240\n97E0\n3520\n5520\n97E0\n1520\n57E0\n2420\nENDCHAR\nSTARTCHAR U_732C\nENCODING 29484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5920\n2FE0\n5920\n9FE0\n3440\n57C0\n9440\n17C0\n5440\n24C0\nENDCHAR\nSTARTCHAR U_732D\nENCODING 29485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n93C0\n5480\n2780\n5100\n9FE0\n3220\n5540\n9A80\n15C0\n52A0\n2D80\nENDCHAR\nSTARTCHAR U_732E\nENCODING 29486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFCC0\n10A0\nFFE0\nAC80\n9480\nFC80\n9480\nFD40\n9540\n8E20\nENDCHAR\nSTARTCHAR U_732F\nENCODING 29487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA920\n4FE0\nA000\n3FE0\n2100\n6FE0\nAAA0\n2AA0\nAAA0\n4860\nENDCHAR\nSTARTCHAR U_7330\nENCODING 29488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8400\n5FE0\n24A0\n5EA0\n94A0\n3F60\n5500\n9FE0\n1280\n5440\n2820\nENDCHAR\nSTARTCHAR U_7331\nENCODING 29489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n5280\n2100\n5FE0\n9540\n3B00\n5100\n9FE0\n1380\n5540\n2920\nENDCHAR\nSTARTCHAR U_7332\nENCODING 29490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57C0\n2440\n57C0\n9440\n17C0\n3200\n57E0\n9CA0\n1560\n17A0\n60C0\nENDCHAR\nSTARTCHAR U_7333\nENCODING 29491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n2A20\n6EE0\nA800\n28E0\n2EA0\n68A0\nAEA0\n2840\n28A0\nC920\nENDCHAR\nSTARTCHAR U_7334\nENCODING 29492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nABC0\n4840\nAFE0\n3A00\n2BE0\n6C80\nA880\n2FE0\n2880\nA940\n4A20\nENDCHAR\nSTARTCHAR U_7335\nENCODING 29493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n6FE0\n6820\nAFE0\n2800\n6FE0\nAAA0\n2FE0\n2AA0\nBAA0\n4860\nENDCHAR\nSTARTCHAR U_7336\nENCODING 29494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\nA280\n5FE0\nA280\n2FE0\n6AA0\nACE0\n2820\n2FE0\nA820\n4FE0\nENDCHAR\nSTARTCHAR U_7337\nENCODING 29495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n28C0\nFEA0\n29E0\nFE80\nAA80\nCE80\n8280\nFE80\n8340\nFE20\nENDCHAR\nSTARTCHAR U_7338\nENCODING 29496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAFE0\n4920\nAFE0\n2800\n2BE0\n6A20\nABE0\n2A20\n2BE0\n2A20\nD3E0\nENDCHAR\nSTARTCHAR U_7339\nENCODING 29497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5FE0\n2540\n5920\n97C0\n3440\n57C0\n9440\n17C0\n5000\n2FE0\nENDCHAR\nSTARTCHAR U_733A\nENCODING 29498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n87C0\n5000\n2520\n5540\n9200\n33C0\n5500\n9FE0\n1100\n5520\n27E0\nENDCHAR\nSTARTCHAR U_733B\nENCODING 29499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBFC0\n4480\nA920\n2BC0\n2880\n6D20\nBBE0\n2880\n29C0\nAAA0\n5880\nENDCHAR\nSTARTCHAR U_733C\nENCODING 29500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8940\n57E0\n2520\n57E0\n9520\n37E0\n5520\n9040\n1FE0\n5440\n22C0\nENDCHAR\nSTARTCHAR U_733D\nENCODING 29501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\nA840\n4780\nA480\n2780\n2480\n6780\nA200\n3FE0\nA480\n4840\nENDCHAR\nSTARTCHAR U_733E\nENCODING 29502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97C0\n5640\n2540\n6FE0\nA820\n37C0\n6440\nA7C0\n2440\nA7C0\n4440\nENDCHAR\nSTARTCHAR U_733F\nENCODING 29503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n57C0\n2100\n5FE0\n9000\n37C0\n5440\n97C0\n16A0\n5A40\n2320\nENDCHAR\nSTARTCHAR U_7340\nENCODING 29504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5760\n2520\n5760\n9520\n37E0\n5100\n97E0\n1240\n5180\n2660\nENDCHAR\nSTARTCHAR U_7341\nENCODING 29505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nA500\n47C0\nA500\n27C0\n2500\n57E0\n9020\n1B60\nAAA0\n4040\nENDCHAR\nSTARTCHAR U_7342\nENCODING 29506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAFE0\n4880\nABE0\n2A20\n2BE0\n6A20\nABE0\n2880\n2AC0\n34A0\nC9A0\nENDCHAR\nSTARTCHAR U_7343\nENCODING 29507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA8C0\nA8A0\nF880\n07E0\nF880\n0080\nF880\n8940\nF940\n5240\nFC20\nENDCHAR\nSTARTCHAR U_7344\nENCODING 29508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5480\n2EC0\n60A0\nAFE0\n2080\n2E80\n6080\nAE80\n2B40\nAE20\n4A20\nENDCHAR\nSTARTCHAR U_7345\nENCODING 29509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\n3080\n7BE0\nAAA0\n3AA0\n22A0\n7AA0\nAAA0\n2AE0\nBA80\n4080\nENDCHAR\nSTARTCHAR U_7346\nENCODING 29510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nAFC0\n4A40\nA940\n2FC0\n6200\nBFE0\n2500\n3AC0\nAF80\n4200\nENDCHAR\nSTARTCHAR U_7347\nENCODING 29511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nAFC0\n4200\nAFC0\n2200\n7FE0\nA680\n2740\n2BC0\nAA20\n51E0\nENDCHAR\nSTARTCHAR U_7348\nENCODING 29512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA840\n4480\n4FC0\nA480\n2840\n7FC0\nA540\n2540\n2540\nBFE0\n4000\nENDCHAR\nSTARTCHAR U_7349\nENCODING 29513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n5FE0\n2100\n57C0\n9200\n3FE0\n57C0\n9920\n1FE0\n5540\n2920\nENDCHAR\nSTARTCHAR U_734A\nENCODING 29514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8980\n5240\n2520\n5FC0\n9440\n37C0\n5440\n97E0\n1620\n5BE0\n2220\nENDCHAR\nSTARTCHAR U_734B\nENCODING 29515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nA7C0\n4440\nA7C0\n2440\n67C0\nA920\n2540\n2920\nBFE0\n4100\nENDCHAR\nSTARTCHAR U_734C\nENCODING 29516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n5440\n27C0\n6440\nAFE0\n2AA0\n6FE0\nA440\n2280\nA100\n4EE0\nENDCHAR\nSTARTCHAR U_734D\nENCODING 29517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n27C0\n5280\n9FE0\n1440\n37C0\n5440\n97C0\n1280\n12A0\n6C60\nENDCHAR\nSTARTCHAR U_734E\nENCODING 29518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\n5540\n7A80\n1140\nFFE0\n5440\n92C0\n0500\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_734F\nENCODING 29519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\nA480\n4FC0\nA840\n2FC0\n6840\nAFC0\n2200\n3FE0\nA480\n4860\nENDCHAR\nSTARTCHAR U_7350\nENCODING 29520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n27C0\n5280\n9FE0\n1440\n37C0\n5440\n97C0\n1100\n1FE0\n6100\nENDCHAR\nSTARTCHAR U_7351\nENCODING 29521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nD2E0\n2F80\n6280\nAFE0\n2AA0\n2FA0\n6AA0\nAFA0\n22A0\nAFA0\n42A0\nENDCHAR\nSTARTCHAR U_7352\nENCODING 29522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFDE0\n1220\nFD40\n2880\n4940\n9A20\n0480\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7353\nENCODING 29523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9480\n5E80\n24E0\n6F40\nA540\n3F40\n6940\nAE80\n2A80\nAB40\n5620\nENDCHAR\nSTARTCHAR U_7354\nENCODING 29524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9200\n6F80\n6880\nAF80\n2880\n2F80\n6A80\nA700\n2A80\nBFE0\n4200\nENDCHAR\nSTARTCHAR U_7355\nENCODING 29525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9100\n5940\n2FC0\n6500\nAFC0\n3900\n6FC0\nA900\n2FC0\nA900\n4FE0\nENDCHAR\nSTARTCHAR U_7356\nENCODING 29526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nBFC0\n4A80\nBFE0\n2A80\n6980\nAC80\n2A80\n2F80\nA500\n4880\nENDCHAR\nSTARTCHAR U_7357\nENCODING 29527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBFE0\n5480\nDFE0\n5520\n5540\n5540\nDF40\n5540\n54A0\n5520\nAA20\nENDCHAR\nSTARTCHAR U_7358\nENCODING 29528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9500\n59E0\nFD40\n9740\nBC80\nD540\n96A0\n0440\nFFE0\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_7359\nENCODING 29529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAA80\n5C80\nA8E0\n3FA0\n2AA0\n7AA0\nAEA0\n2AA0\n2A40\nAAA0\n4B20\nENDCHAR\nSTARTCHAR U_735A\nENCODING 29530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9280\n57E0\n2280\n5FE0\n9100\n37C0\n5540\n97C0\n1540\n57C0\n2820\nENDCHAR\nSTARTCHAR U_735B\nENCODING 29531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8AA0\n56C0\n2FE0\n5280\n9FE0\n3100\n57C0\n9100\n1FE0\n5280\n2C60\nENDCHAR\nSTARTCHAR U_735C\nENCODING 29532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\nA540\n4FE0\nA380\n2D60\n6840\nADE0\n3540\n2FE0\nA840\n5040\nENDCHAR\nSTARTCHAR U_735D\nENCODING 29533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97C0\n6280\n7FE0\nA520\n2900\n2FE0\n6AA0\nAFE0\n2AA0\nABA0\n4860\nENDCHAR\nSTARTCHAR U_735E\nENCODING 29534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n57C0\n2280\n5100\n9FE0\n3540\n57C0\n9540\n1FE0\n5100\n2FE0\nENDCHAR\nSTARTCHAR U_735F\nENCODING 29535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n57C0\n2100\n5FE0\n9440\n3EE0\n5440\n9FE0\n1280\n54A0\n2860\nENDCHAR\nSTARTCHAR U_7360\nENCODING 29536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5FE0\n2AA0\n5440\n9FE0\n3440\n57C0\n9440\n17C0\n5540\n2B20\nENDCHAR\nSTARTCHAR U_7361\nENCODING 29537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n95C0\n5840\n2DC0\n6840\nAFC0\n2400\n67E0\nA820\n3AA0\nAAA0\n4040\nENDCHAR\nSTARTCHAR U_7362\nENCODING 29538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8040\n6F80\n4200\nBFE0\n2440\n7BA0\nA280\n2FE0\n2AA0\nABA0\n4860\nENDCHAR\nSTARTCHAR U_7363\nENCODING 29539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5480\n28C0\n7CA0\n57E0\n7C80\n5480\nFF40\n0140\n7D40\n4620\n7C20\nENDCHAR\nSTARTCHAR U_7364\nENCODING 29540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9440\n5F40\n20E0\n6FA0\nAAA0\n2FA0\n62A0\nA440\n3F40\nA4A0\n4D20\nENDCHAR\nSTARTCHAR U_7365\nENCODING 29541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9480\n5E80\n2AE0\n6FA0\nAAA0\n2EA0\n64A0\nBFA0\n2A40\nAAA0\n5720\nENDCHAR\nSTARTCHAR U_7366\nENCODING 29542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5280\n2FC0\n6840\nAFC0\n2840\n6FE0\nA920\n3AA0\nAFA0\n4040\nENDCHAR\nSTARTCHAR U_7367\nENCODING 29543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n6AA0\n6FE0\nA000\n3FE0\n6840\nAFC0\n2520\n2CC0\nB640\n4420\nENDCHAR\nSTARTCHAR U_7368\nENCODING 29544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n6AA0\n6FE0\nA400\n2FE0\n3220\n6FA0\nAAA0\n2FA0\nA2A0\n4F40\nENDCHAR\nSTARTCHAR U_7369\nENCODING 29545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n94E0\n6480\n2FE0\n68A0\nAFE0\n2880\n6FA0\nAAA0\n2FC0\nA960\n5620\nENDCHAR\nSTARTCHAR U_736A\nENCODING 29546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5280\n27C0\n6820\nAFE0\n2AA0\n6FE0\nA440\n27C0\nA440\n47C0\nENDCHAR\nSTARTCHAR U_736B\nENCODING 29547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n5280\n2440\n6BA0\nA000\n2EE0\n6AA0\nAEE0\n2440\nAAA0\n5120\nENDCHAR\nSTARTCHAR U_736C\nENCODING 29548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nADE0\n54A0\nDFA0\n5560\n5F40\n55E0\nDF40\n55E0\n5540\n5540\nA340\nENDCHAR\nSTARTCHAR U_736D\nENCODING 29549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n48E0\n3F40\n6BE0\nBE20\n2AA0\n7EA0\nAAA0\n2AA0\n3C80\n2B40\nCA20\nENDCHAR\nSTARTCHAR U_736E\nENCODING 29550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBFE0\n4540\nA920\n2FE0\n2920\n6DA0\nAB60\n2DA0\n2B60\nADA0\n4960\nENDCHAR\nSTARTCHAR U_736F\nENCODING 29551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n5100\n3FE0\n6AA0\nAFE0\n2100\n6FC0\nA100\n3FE0\nA540\n4AA0\nENDCHAR\nSTARTCHAR U_7370\nENCODING 29552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n5FE0\n3520\n6CC0\nA7A0\n2000\n6FE0\nAAA0\n3FE0\nA100\n4300\nENDCHAR\nSTARTCHAR U_7371\nENCODING 29553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nAFE0\n4820\nAFE0\n2540\n27C0\n7C40\nA7C0\n2440\nA7C0\n4C60\nENDCHAR\nSTARTCHAR U_7372\nENCODING 29554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8440\n5FE0\n2540\n6FE0\nB900\n2FC0\n6900\nAFE0\n2480\nA300\n5CE0\nENDCHAR\nSTARTCHAR U_7373\nENCODING 29555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5100\n2FE0\n6920\nA540\n2920\n6FE0\nA100\n2FE0\nAAA0\n4AE0\nENDCHAR\nSTARTCHAR U_7374\nENCODING 29556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nAFC0\n4480\nAFE0\n3020\n6FC0\nA640\n2B80\n2580\nA340\n4D20\nENDCHAR\nSTARTCHAR U_7375\nENCODING 29557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8520\n5A40\n2520\n6FE0\nAAA0\n2FE0\n6DC0\nAB40\n2DC0\nAB40\n4D20\nENDCHAR\nSTARTCHAR U_7376\nENCODING 29558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5440\n27C0\n6440\nAFE0\n2AA0\n6540\nA7C0\n2C80\nB300\n4CE0\nENDCHAR\nSTARTCHAR U_7377\nENCODING 29559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8080\n5FE0\n2940\n6FE0\nA940\n2FE0\n6AA0\nABE0\n2AA0\nABE0\n5620\nENDCHAR\nSTARTCHAR U_7378\nENCODING 29560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEC0\nAAA0\nFE80\n57E0\n7C80\n5480\nFE80\n0080\n7D40\n4620\n7C20\nENDCHAR\nSTARTCHAR U_7379\nENCODING 29561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nA200\n4FE0\nA9A0\n2F40\n69C0\nAAA0\n2AA0\n2BE0\nAAA0\n57E0\nENDCHAR\nSTARTCHAR U_737A\nENCODING 29562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n48E0\n3F40\n29E0\n7F20\nABE0\n3F20\n69E0\nAD20\n3BE0\nA940\n4A20\nENDCHAR\nSTARTCHAR U_737B\nENCODING 29563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3C80\n20C0\nFEA0\nA3E0\nFC80\nA880\nFC80\nAD40\nFD40\n9620\n9420\nENDCHAR\nSTARTCHAR U_737C\nENCODING 29564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5BE0\n29C0\n6AA0\nBBE0\n22A0\n7BE0\nAAA0\n2BE0\n2AA0\nABE0\n52A0\nENDCHAR\nSTARTCHAR U_737D\nENCODING 29565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n5FE0\n2AA0\n6EE0\nA280\n2FE0\n6280\nAFE0\n24A0\nAC40\n5620\nENDCHAR\nSTARTCHAR U_737E\nENCODING 29566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8480\n5FE0\n2480\n6EE0\nAAA0\n2EE0\n7FE0\nA900\n2FC0\nA900\n4FE0\nENDCHAR\nSTARTCHAR U_737F\nENCODING 29567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5100\n37E0\n7CA0\nB7E0\n3480\n6FE0\nAA40\n34A0\nEB00\n5CE0\nENDCHAR\nSTARTCHAR U_7380\nENCODING 29568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5AA0\n2FE0\n6540\nA5E0\n2B40\n65E0\nAB40\n2FE0\nEB40\n55E0\nENDCHAR\nSTARTCHAR U_7381\nENCODING 29569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n2AA0\n6FE0\nAA80\n2FE0\n2920\n6F20\nA9A0\n2F40\nA9A0\n4F20\nENDCHAR\nSTARTCHAR U_7382\nENCODING 29570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3FE0\n6480\nBFE0\n2B00\n3FE0\n5540\n9F40\n1540\nFF40\n4540\nENDCHAR\nSTARTCHAR U_7383\nENCODING 29571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8EE0\n5AA0\n2EE0\n6AA0\nAFE0\n3900\n6FE0\nA900\n2FE0\nA300\n5CE0\nENDCHAR\nSTARTCHAR U_7384\nENCODING 29572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\nFFE0\n0400\n0880\n1100\n3E00\n0400\n0900\n1080\n7FC0\nENDCHAR\nSTARTCHAR U_7385\nENCODING 29573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1080\nFEC0\n22A0\n4CA0\n7480\n20A0\n4840\nF480\n0300\n0C00\nENDCHAR\nSTARTCHAR U_7386\nENCODING 29574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n1080\nFFE0\n2100\n4A40\nFFC0\n1080\n2100\n4A40\nF7A0\n0420\nENDCHAR\nSTARTCHAR U_7387\nENCODING 29575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8840\n5280\n0C00\n2A80\nDF40\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7388\nENCODING 29576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n13E0\nFA00\n24E0\n2B80\n5280\nF2A0\n22C0\n4A80\nFB40\n0A20\nENDCHAR\nSTARTCHAR U_7389\nENCODING 29577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n0400\n0400\n3F80\n0400\n0500\n0480\n0480\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_738A\nENCODING 29578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0400\n0500\n0480\n0400\n3FC0\n0400\n0400\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_738B\nENCODING 29579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n0400\n0400\n0400\n3F80\n0400\n0400\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_738C\nENCODING 29580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7A00\n2200\n2200\n2200\n7A00\n2200\n2200\n3A20\nE220\n01E0\nENDCHAR\nSTARTCHAR U_738D\nENCODING 29581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1000\n1FC0\n2200\n4200\n8200\n1FC0\n0200\n0200\n0200\n7FE0\nENDCHAR\nSTARTCHAR U_738E\nENCODING 29582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF880\n2080\n2080\n7080\n2080\n2080\n3880\nC080\n0280\n0100\nENDCHAR\nSTARTCHAR U_738F\nENCODING 29583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7900\n2100\n27E0\n7920\n2120\n2220\n3A20\nC420\n0940\n1080\nENDCHAR\nSTARTCHAR U_7390\nENCODING 29584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7500\n2500\n2500\n7480\n2480\n2480\n3840\nC840\n1060\n2040\nENDCHAR\nSTARTCHAR U_7391\nENCODING 29585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nF480\n2480\n2480\n7480\n2480\n2480\n3480\nC4A0\n08A0\n1060\nENDCHAR\nSTARTCHAR U_7392\nENCODING 29586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF900\n2100\n2100\n7100\n2100\n2100\n3900\nC100\n0100\n07E0\nENDCHAR\nSTARTCHAR U_7393\nENCODING 29587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFBE0\n2220\n2420\n7120\n20A0\n20A0\n3820\nC020\n0120\n00C0\nENDCHAR\nSTARTCHAR U_7394\nENCODING 29588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0220\nFAA0\n22A0\n22A0\n72A0\n22A0\n22A0\n3AA0\nC2A0\n0420\n0820\nENDCHAR\nSTARTCHAR U_7395\nENCODING 29589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\nF880\n2080\n2080\n77E0\n2080\n2080\n3880\nC080\n0080\n0080\nENDCHAR\nSTARTCHAR U_7396\nENCODING 29590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFA00\n23C0\n2240\n7440\n2080\n2080\n3980\nE240\n4420\n0820\nENDCHAR\nSTARTCHAR U_7397\nENCODING 29591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nF880\n2080\n2080\n77E0\n2080\n2080\n3880\nC080\n0280\n0100\nENDCHAR\nSTARTCHAR U_7398\nENCODING 29592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF040\n2040\n2040\nF7C0\n2440\n2400\n2400\n3420\nC420\n03E0\nENDCHAR\nSTARTCHAR U_7399\nENCODING 29593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFBE0\n2200\n2200\nFBE0\n2020\n2020\n37A0\nC020\n0140\n0080\nENDCHAR\nSTARTCHAR U_739A\nENCODING 29594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF080\n4100\n4200\nF7E0\n42A0\n42A0\n74A0\nC920\n02A0\n0440\nENDCHAR\nSTARTCHAR U_739B\nENCODING 29595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nF840\n2240\n2240\n7240\n23E0\n2020\n37A0\nC020\n0120\n00C0\nENDCHAR\nSTARTCHAR U_739C\nENCODING 29596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF500\n4480\n4480\nE840\n5260\n4200\n4200\n7480\nCFC0\n0040\nENDCHAR\nSTARTCHAR U_739D\nENCODING 29597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFA00\n23E0\n2480\n7080\n2080\n27E0\n3080\nC080\n0080\n0080\nENDCHAR\nSTARTCHAR U_739E\nENCODING 29598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n27C0\n2100\n2100\nFFE0\n2100\n2280\n3280\nC440\n0820\nENDCHAR\nSTARTCHAR U_739F\nENCODING 29599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF880\n27E0\n2240\n7240\n2240\n2280\n3900\nC280\n0440\n1820\nENDCHAR\nSTARTCHAR U_73A0\nENCODING 29600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFA80\n2440\n2820\n7240\n2240\n2240\n3A40\nC240\n0440\n0840\nENDCHAR\nSTARTCHAR U_73A1\nENCODING 29601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF840\n2240\n2240\nF7E0\n20C0\n2140\n3240\nC440\n0840\n00C0\nENDCHAR\nSTARTCHAR U_73A2\nENCODING 29602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFA80\n2440\n2820\n77C0\n2240\n2240\n3A40\nC440\n0540\n0880\nENDCHAR\nSTARTCHAR U_73A3\nENCODING 29603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n4FE0\n4200\nF300\n4280\n4240\n7240\nC200\n0200\n0200\nENDCHAR\nSTARTCHAR U_73A4\nENCODING 29604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n27E0\n2100\n77C0\n2100\n2100\n3FE0\nC100\n0100\n0100\nENDCHAR\nSTARTCHAR U_73A5\nENCODING 29605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\nFA20\n2220\n23E0\n7220\n2220\n23E0\n3A20\nE220\n44A0\n1840\nENDCHAR\nSTARTCHAR U_73A6\nENCODING 29606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n27C0\n2140\n7140\n2FE0\n2100\n3900\nE280\n4440\n1820\nENDCHAR\nSTARTCHAR U_73A7\nENCODING 29607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n2480\n2FC0\nF540\n2500\n2500\n3520\nC520\n08E0\n1000\nENDCHAR\nSTARTCHAR U_73A8\nENCODING 29608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF900\n2100\n2100\n7100\n27C0\n2100\n3900\nC100\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_73A9\nENCODING 29609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nF800\n2000\n2000\n77E0\n2280\n2280\n3A80\nC2A0\n04A0\n1860\nENDCHAR\nSTARTCHAR U_73AA\nENCODING 29610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n4500\n4480\nEA60\n5100\n4FC0\n4080\n7100\nC100\n0200\nENDCHAR\nSTARTCHAR U_73AB\nENCODING 29611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFA00\n23E0\n2240\n7440\n2A80\n2280\n3900\nC280\n0440\n1820\nENDCHAR\nSTARTCHAR U_73AC\nENCODING 29612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nFA40\n2340\n22C0\n7240\n2FE0\n2240\n3A40\nE440\n4940\n1080\nENDCHAR\nSTARTCHAR U_73AD\nENCODING 29613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFC80\n2480\n27A0\n74C0\n2480\n2480\n3C80\nC5A0\n06A0\n0460\nENDCHAR\nSTARTCHAR U_73AE\nENCODING 29614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2100\n27C0\n7100\n2FE0\n2120\n3920\nC160\n0100\n0100\nENDCHAR\nSTARTCHAR U_73AF\nENCODING 29615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF900\n2100\n2300\n7380\n2540\n2520\n3920\nC100\n0100\n0100\nENDCHAR\nSTARTCHAR U_73B0\nENCODING 29616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n2540\n2540\nF540\n2540\n2540\n3280\nC2A0\n04A0\n18E0\nENDCHAR\nSTARTCHAR U_73B1\nENCODING 29617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0300\nF480\n4440\n4FA0\nF480\n4480\n4680\n7500\nC440\n03C0\nENDCHAR\nSTARTCHAR U_73B2\nENCODING 29618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFA80\n2440\n2A20\n7100\n2000\n27E0\n3840\nC280\n0100\n0080\nENDCHAR\nSTARTCHAR U_73B3\nENCODING 29619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFAC0\n24A0\n24E0\n7F80\n2480\n2480\n3CA0\nE4A0\n0460\n0420\nENDCHAR\nSTARTCHAR U_73B4\nENCODING 29620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nFD40\n2540\n2FE0\n7540\n2540\n25C0\n3D40\nE400\n0400\n07E0\nENDCHAR\nSTARTCHAR U_73B5\nENCODING 29621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nFA40\n27E0\n2240\n7240\n23C0\n2240\n3A40\nE240\n43C0\n0240\nENDCHAR\nSTARTCHAR U_73B6\nENCODING 29622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF900\n2520\n2340\n7100\n2FE0\n2100\n3900\nE100\n4100\n0100\nENDCHAR\nSTARTCHAR U_73B7\nENCODING 29623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n21E0\n2100\n7100\n27E0\n2420\n3C20\nC420\n07E0\n0420\nENDCHAR\nSTARTCHAR U_73B8\nENCODING 29624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFBE0\n2420\n2BA0\n72A0\n22A0\n23A0\n3A40\nE200\n4220\n01E0\nENDCHAR\nSTARTCHAR U_73B9\nENCODING 29625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF900\n27E0\n2100\n7240\n2780\n2100\n3A00\nC440\n0FA0\n0420\nENDCHAR\nSTARTCHAR U_73BA\nENCODING 29626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FC0\n4440\n1500\n2480\n4440\n7FC0\n0400\n3FC0\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_73BB\nENCODING 29627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF7E0\n24A0\n2480\n77C0\n2640\n2540\n3540\nC480\n0940\n1620\nENDCHAR\nSTARTCHAR U_73BC\nENCODING 29628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFA80\n2280\n2BA0\n7AC0\n2A80\n2A80\n3A80\nEAA0\n5FA0\n08E0\nENDCHAR\nSTARTCHAR U_73BD\nENCODING 29629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF7E0\n2820\n27A0\nF4A0\n24A0\n24A0\n37A0\nC020\n0140\n0080\nENDCHAR\nSTARTCHAR U_73BE\nENCODING 29630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFCA0\n24A0\n27E0\n74A0\n24A0\n27E0\n3CA0\nE080\n4080\n0080\nENDCHAR\nSTARTCHAR U_73BF\nENCODING 29631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF920\n2120\n22E0\n7440\n2800\n23E0\n3A20\nE220\n43E0\n0220\nENDCHAR\nSTARTCHAR U_73C0\nENCODING 29632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF900\n23E0\n2220\n7220\n23E0\n2220\n3A20\nC220\n03E0\n0220\nENDCHAR\nSTARTCHAR U_73C1\nENCODING 29633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF400\n2780\n2480\nF480\n2680\n2580\n3480\nE4A0\n06A0\n0860\nENDCHAR\nSTARTCHAR U_73C2\nENCODING 29634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF840\n2040\n2740\n7540\n2540\n2740\n3540\nE040\n0140\n0080\nENDCHAR\nSTARTCHAR U_73C3\nENCODING 29635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n2540\n2540\n77C0\n2540\n2FE0\n3440\nE440\n0440\n04C0\nENDCHAR\nSTARTCHAR U_73C4\nENCODING 29636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF500\n4500\n47C0\n4500\nE900\n57C0\n4100\n7100\nC100\n0FE0\nENDCHAR\nSTARTCHAR U_73C5\nENCODING 29637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF880\n27E0\n24A0\n77E0\n24A0\n27E0\n3880\nE080\n0080\n0080\nENDCHAR\nSTARTCHAR U_73C6\nENCODING 29638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n2200\n2440\nFFE0\n2020\n27C0\n2440\n3C40\nC7C0\n0440\nENDCHAR\nSTARTCHAR U_73C7\nENCODING 29639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nFC40\n2440\n27C0\n7440\n2440\n2440\n3FC0\nC440\n0440\n1FE0\nENDCHAR\nSTARTCHAR U_73C8\nENCODING 29640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nE8E0\n5EA0\n4AA0\nFAA0\n4AA0\n4AA0\n6AA0\nD2A0\n2AE0\n44A0\nENDCHAR\nSTARTCHAR U_73C9\nENCODING 29641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFC20\n2420\n27E0\n7480\n27E0\n2480\n3C80\nE5A0\n4660\n0420\nENDCHAR\nSTARTCHAR U_73CA\nENCODING 29642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nFAA0\n2AA0\n2AA0\nFFE0\n2AA0\n2AA0\n3AA0\nEAA0\n0AA0\n1560\nENDCHAR\nSTARTCHAR U_73CB\nENCODING 29643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\nF8E0\n2AA0\n2AA0\nFAA0\n2AA0\n2EA0\n3AE0\nE280\n0480\n0880\nENDCHAR\nSTARTCHAR U_73CC\nENCODING 29644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF900\n2040\n2240\nFA80\n2AC0\n2AA0\n2320\n3240\nC640\n19C0\nENDCHAR\nSTARTCHAR U_73CD\nENCODING 29645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF280\n2440\n28A0\nF100\n2240\n2480\n2120\n3640\nC080\n0700\nENDCHAR\nSTARTCHAR U_73CE\nENCODING 29646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFA00\n27E0\n2920\n2100\nF900\n2540\n2520\n3920\nC100\n0300\nENDCHAR\nSTARTCHAR U_73CF\nENCODING 29647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF900\n2100\n2100\n7100\n27C0\n2100\n3940\nE120\n4100\n0FE0\nENDCHAR\nSTARTCHAR U_73D0\nENCODING 29648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n27C0\n2100\n7100\n27E0\n2200\n3A80\nE440\n4FE0\n0020\nENDCHAR\nSTARTCHAR U_73D1\nENCODING 29649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nF440\n2400\n2FE0\nF500\n2540\n2580\n3900\nCB20\n1520\n21E0\nENDCHAR\nSTARTCHAR U_73D2\nENCODING 29650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFC0\n2140\n2FE0\n7140\n27C0\n2100\n37C0\nE100\n4FE0\n0100\nENDCHAR\nSTARTCHAR U_73D3\nENCODING 29651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF900\n27E0\n2440\n7820\n2440\n2280\n3900\nE280\n4440\n0820\nENDCHAR\nSTARTCHAR U_73D4\nENCODING 29652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\n2200\n25E0\n7440\n2C80\n27E0\n3C80\nE480\n4480\n0580\nENDCHAR\nSTARTCHAR U_73D5\nENCODING 29653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\n4240\n4540\nE880\n5FE0\n4AA0\n6AA0\nD320\n12A0\n2440\nENDCHAR\nSTARTCHAR U_73D6\nENCODING 29654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0520\nF520\n2340\n2100\n77E0\n2280\n2280\n3A80\nE4A0\n08A0\n1060\nENDCHAR\nSTARTCHAR U_73D7\nENCODING 29655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nFD00\n27C0\n2900\n7100\n2FE0\n2280\n3A80\nE2A0\n04A0\n0860\nENDCHAR\nSTARTCHAR U_73D8\nENCODING 29656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFC0\n2440\n2540\nF4C0\n2FE0\n2540\n34C0\nC440\n0840\n10C0\nENDCHAR\nSTARTCHAR U_73D9\nENCODING 29657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFA80\n2280\n27C0\n7280\n2280\n27E0\n3800\nE280\n0240\n0440\nENDCHAR\nSTARTCHAR U_73DA\nENCODING 29658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFD20\n2520\n27E0\n7520\n2520\n25A0\n3E60\nE420\n07E0\n0420\nENDCHAR\nSTARTCHAR U_73DB\nENCODING 29659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n2FE0\n2200\n77E0\n2A20\n23E0\n3A20\nE3E0\n0220\n0260\nENDCHAR\nSTARTCHAR U_73DC\nENCODING 29660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFA80\n2FE0\n2100\n7100\n27C0\n2100\n3FE0\nC100\n0100\n0100\nENDCHAR\nSTARTCHAR U_73DD\nENCODING 29661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF120\n29A0\n2560\n7120\n2360\n25A0\n3920\nE120\n45A0\n0240\nENDCHAR\nSTARTCHAR U_73DE\nENCODING 29662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFBC0\n2640\n2980\n7240\n2420\n2FC0\n3440\nC440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_73DF\nENCODING 29663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE840\n4FC0\n4A40\nEBC0\n4CC0\n4B40\n6940\n9240\n2460\n4020\nENDCHAR\nSTARTCHAR U_73E0\nENCODING 29664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF500\n27C0\n2900\nF100\n2FE0\n2100\n3380\nC540\n0920\n0100\nENDCHAR\nSTARTCHAR U_73E1\nENCODING 29665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\n7BC0\n2080\n2080\nFBE0\n0400\n0A00\n1100\n20E0\n4040\nENDCHAR\nSTARTCHAR U_73E2\nENCODING 29666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n27C0\n2440\nF7C0\n2620\n2540\n3480\nC440\n0660\n0400\nENDCHAR\nSTARTCHAR U_73E3\nENCODING 29667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2820\n27A0\n74A0\n27A0\n24A0\n3FA0\nE4A0\n4020\n00C0\nENDCHAR\nSTARTCHAR U_73E4\nENCODING 29668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFBE0\n2500\n2900\nF900\n2FE0\n2100\n2520\n3520\nC520\n07E0\nENDCHAR\nSTARTCHAR U_73E5\nENCODING 29669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF240\n2240\n23C0\nF240\n23C0\n2240\n2240\n37E0\nC040\n0040\nENDCHAR\nSTARTCHAR U_73E6\nENCODING 29670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF200\n4FE0\n4820\nFBA0\n4AA0\n4AA0\n7BA0\nC820\n08A0\n0840\nENDCHAR\nSTARTCHAR U_73E7\nENCODING 29671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFAA0\n2AA0\n26C0\n7280\n26C0\n2AA0\n3A80\nE2A0\n44A0\n0860\nENDCHAR\nSTARTCHAR U_73E8\nENCODING 29672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFA80\n2440\n2820\n7380\n2000\n27C0\n3C40\nE440\n47C0\n0440\nENDCHAR\nSTARTCHAR U_73E9\nENCODING 29673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF5E0\n2800\n2200\nF5E0\n2C40\n2440\n2440\n3440\nC440\n04C0\nENDCHAR\nSTARTCHAR U_73EA\nENCODING 29674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n2100\n2100\n7FE0\n2100\n2100\n37C0\nC100\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_73EB\nENCODING 29675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2100\n2240\n77E0\n22A0\n2280\n3A80\nE4A0\n48A0\n1060\nENDCHAR\nSTARTCHAR U_73EC\nENCODING 29676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF140\n4FE0\n4900\nE940\n4F40\n4940\n6880\nD140\n1660\n2020\nENDCHAR\nSTARTCHAR U_73ED\nENCODING 29677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF3E0\n2280\n2A80\nFA80\n2BE0\n2A80\n2480\n3480\nC880\n13E0\nENDCHAR\nSTARTCHAR U_73EE\nENCODING 29678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nF840\n4FC0\n4A40\nEFC0\n4AC0\n4AC0\n6AC0\nCAC0\n1220\n2220\nENDCHAR\nSTARTCHAR U_73EF\nENCODING 29679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF220\n4FA0\n4240\nFFE0\n4100\n4640\n6C80\nD700\n2420\n03E0\nENDCHAR\nSTARTCHAR U_73F0\nENCODING 29680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF520\n2340\n2100\n27E0\nF020\n2020\n27E0\n3820\nC020\n07E0\nENDCHAR\nSTARTCHAR U_73F1\nENCODING 29681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0220\nF920\n2440\n2080\nF900\n2FE0\n2240\n3640\nC180\n0240\n0C20\nENDCHAR\nSTARTCHAR U_73F2\nENCODING 29682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF420\n2100\n27E0\n7280\n27E0\n2080\n37E0\nC080\n0080\n0080\nENDCHAR\nSTARTCHAR U_73F3\nENCODING 29683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nF420\n5F40\n4AA0\nEA40\n4AA0\n4440\n7680\nC900\n10E0\n6040\nENDCHAR\nSTARTCHAR U_73F4\nENCODING 29684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\nFEC0\n22A0\n2FE0\n7280\n23A0\n26A0\n3AC0\nC260\n0AA0\n0520\nENDCHAR\nSTARTCHAR U_73F5\nENCODING 29685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nFA40\n2240\n23C0\n7000\n27E0\n2100\n37C0\nC100\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_73F6\nENCODING 29686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFA80\n27E0\n2120\n77E0\n2500\n27E0\n3B20\nC520\n0960\n1100\nENDCHAR\nSTARTCHAR U_73F7\nENCODING 29687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nEEC0\n40A0\n5FE0\nE280\n4280\n4B80\n4A80\n6AA0\nCB60\n1C20\nENDCHAR\nSTARTCHAR U_73F8\nENCODING 29688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF900\n27C0\n2240\n7240\n27E0\n2000\n3BC0\nE240\n43C0\n0240\nENDCHAR\nSTARTCHAR U_73F9\nENCODING 29689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF140\n4FE0\n4900\nFF20\n4AA0\n4AC0\n4A80\n6AA0\nDB60\n2420\nENDCHAR\nSTARTCHAR U_73FA\nENCODING 29690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF940\n2FE0\n2140\n77C0\n2200\n23E0\n3620\nCA20\n03E0\n0220\nENDCHAR\nSTARTCHAR U_73FB\nENCODING 29691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nEFC0\n5000\n47C0\nF540\n5FE0\n4A40\n6A40\nCFE0\n0140\n0080\nENDCHAR\nSTARTCHAR U_73FC\nENCODING 29692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFC20\n27E0\n2420\n7420\n27E0\n2420\n3FE0\nE240\n4420\n0820\nENDCHAR\nSTARTCHAR U_73FD\nENCODING 29693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E20\nFBC0\n2240\n2440\n77E0\n2240\n2240\n3BE0\nC600\n0900\n10E0\nENDCHAR\nSTARTCHAR U_73FE\nENCODING 29694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nFC40\n27C0\n2440\n77C0\n2440\n27C0\n3A80\nC2A0\n04A0\n1860\nENDCHAR\nSTARTCHAR U_73FF\nENCODING 29695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFC20\n2420\n27E0\n7100\n2100\n25C0\n3D00\nC500\n0B00\n11E0\nENDCHAR\nSTARTCHAR U_7400\nENCODING 29696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF300\n4480\n4A60\n5780\nE100\n4200\n5FC0\n6840\n8FC0\n0840\nENDCHAR\nSTARTCHAR U_7401\nENCODING 29697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFBE0\n2400\n27E0\n70A0\n2280\n22E0\n3A80\nC280\n0580\n08E0\nENDCHAR\nSTARTCHAR U_7402\nENCODING 29698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n4FE0\n4000\n47C0\nF000\n47C0\n4000\n77C0\nC440\n07C0\nENDCHAR\nSTARTCHAR U_7403\nENCODING 29699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\nF920\n2FE0\n2100\n2520\nF340\n2180\n2340\n3520\nC920\n0300\nENDCHAR\nSTARTCHAR U_7404\nENCODING 29700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nFA40\n23C0\n2000\n77E0\n2420\n27E0\n3C20\nC7E0\n0420\n04E0\nENDCHAR\nSTARTCHAR U_7405\nENCODING 29701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF900\n27C0\n2440\n77C0\n2440\n27E0\n3D40\nC480\n0540\n0620\nENDCHAR\nSTARTCHAR U_7406\nENCODING 29702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF920\n2FE0\n2920\n2920\nFFE0\n2100\n27C0\n3100\nC100\n0FE0\nENDCHAR\nSTARTCHAR U_7407\nENCODING 29703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF900\n2FE0\n2380\n7D60\n2000\n27C0\n3A40\nC2E0\n0420\n18C0\nENDCHAR\nSTARTCHAR U_7408\nENCODING 29704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0060\nF7A0\n2520\n22C0\n77E0\n2040\n2080\n37E0\nC080\n0280\n0100\nENDCHAR\nSTARTCHAR U_7409\nENCODING 29705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\n4200\n4480\n4FC0\nE000\n4A80\n4A80\n6AA0\nCAA0\n12E0\nENDCHAR\nSTARTCHAR U_740A\nENCODING 29706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE2A0\n4AA0\n4AA0\nFFC0\n42A0\n46A0\n6AA0\nD2E0\n2A80\n0480\nENDCHAR\nSTARTCHAR U_740B\nENCODING 29707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nF980\n2240\n2100\nF7E0\n2280\n27E0\n3AA0\nC2A0\n02E0\n0080\nENDCHAR\nSTARTCHAR U_740C\nENCODING 29708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0520\nFD20\n27E0\n2100\nF280\n2640\n2920\n37C0\nC040\n0080\n0100\nENDCHAR\nSTARTCHAR U_740D\nENCODING 29709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0220\nFC20\n24A0\n3FA0\n64A0\n26A0\n2DA0\n34A0\nE420\n04A0\n0440\nENDCHAR\nSTARTCHAR U_740E\nENCODING 29710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nE240\n57E0\n4A40\nE240\n5FE0\n4A40\n4A40\n6A40\nCC40\n17E0\nENDCHAR\nSTARTCHAR U_740F\nENCODING 29711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBE0\n2680\n2280\n7FE0\n2480\n27E0\n3C80\nC480\n0A00\n11E0\nENDCHAR\nSTARTCHAR U_7410\nENCODING 29712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n04A0\nFAC0\n2080\n27E0\n7420\n24A0\n24A0\n3CA0\nC5A0\n0240\n0C20\nENDCHAR\nSTARTCHAR U_7411\nENCODING 29713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nF540\n2100\n27C0\nF440\n27C0\n2440\n37C0\nC440\n0440\n04C0\nENDCHAR\nSTARTCHAR U_7412\nENCODING 29714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF3E0\n2C40\n2380\nE540\n2BA0\n2100\n37C0\nC100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_7413\nENCODING 29715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2820\n27C0\nF000\n2FE0\n2280\n3280\nC4A0\n08A0\n1060\nENDCHAR\nSTARTCHAR U_7414\nENCODING 29716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFE0\n4820\n47C0\n4100\nE500\n45C0\n7500\nCD00\n0B00\n10E0\nENDCHAR\nSTARTCHAR U_7415\nENCODING 29717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nEFC0\n4A40\n4FC0\nEA40\n4FC0\n4500\n7FE0\nC100\n0100\n0100\nENDCHAR\nSTARTCHAR U_7416\nENCODING 29718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nFC80\n27E0\n2280\n7320\n2CE0\n2480\n3FE0\nE280\n4320\n0CE0\nENDCHAR\nSTARTCHAR U_7417\nENCODING 29719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\n4480\n4480\nE480\n4B40\n4200\n7FE0\n8200\n0200\n0200\nENDCHAR\nSTARTCHAR U_7418\nENCODING 29720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nEF00\n4A00\n4FC0\nEAA0\n4C60\n47C0\n6440\nC7C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_7419\nENCODING 29721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\nE140\n5FE0\n4100\n5D20\nF520\n5D40\n4080\n6DA0\n9260\n0420\nENDCHAR\nSTARTCHAR U_741A\nENCODING 29722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFC20\n2420\n27E0\n7480\n27E0\n2480\n37E0\nCA20\n13E0\n2220\nENDCHAR\nSTARTCHAR U_741B\nENCODING 29723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF820\n2AA0\n2440\nF100\n2FE0\n2100\n3380\nE540\n0920\n1120\nENDCHAR\nSTARTCHAR U_741C\nENCODING 29724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n2FE0\n2540\nF540\n2BA0\n2100\n3380\nC540\n0920\n0100\nENDCHAR\nSTARTCHAR U_741D\nENCODING 29725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n27C0\n2440\nF7C0\n2100\n2FE0\n3480\nE300\n0480\n1860\nENDCHAR\nSTARTCHAR U_741E\nENCODING 29726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4A40\n7CC0\n0000\n7FE0\n0400\n7FC0\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_741F\nENCODING 29727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nF480\n27E0\n2C80\n3480\nE7C0\n2480\n27C0\n3480\nC7E0\n0400\nENDCHAR\nSTARTCHAR U_7420\nENCODING 29728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n2FE0\n2AA0\nFAA0\n2FE0\n2AA0\n2AA0\nFFE0\n0480\n1860\nENDCHAR\nSTARTCHAR U_7421\nENCODING 29729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n05E0\nF6A0\n44A0\n44A0\n5FA0\nE4A0\n4EA0\n55A0\n7440\nC4A0\n0D20\nENDCHAR\nSTARTCHAR U_7422\nENCODING 29730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF100\n2220\n2640\nFB80\n2480\n2BC0\n32C0\nC4A0\n0CA0\n1320\nENDCHAR\nSTARTCHAR U_7423\nENCODING 29731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2440\n2280\n77E0\n2000\n27E0\n3420\nC420\n07E0\n0420\nENDCHAR\nSTARTCHAR U_7424\nENCODING 29732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF3C0\n2480\n2FE0\nF120\n2FE0\n2120\n37E0\nC100\n0100\n0300\nENDCHAR\nSTARTCHAR U_7425\nENCODING 29733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\nF100\n4FE0\n4920\n4F80\nE920\n49E0\n4800\n6B80\nD2A0\n2CE0\nENDCHAR\nSTARTCHAR U_7426\nENCODING 29734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2100\n2280\n7FE0\n2040\n2740\n3540\nC740\n0040\n00C0\nENDCHAR\nSTARTCHAR U_7427\nENCODING 29735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0A00\n7BC0\n4040\n7BC0\n0A00\nFFE0\n0400\n7FC0\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_7428\nENCODING 29736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFC20\n27E0\n2420\n77E0\n2480\n24A0\n3EC0\nE480\n46A0\n0CE0\nENDCHAR\nSTARTCHAR U_7429\nENCODING 29737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nFA40\n23C0\n2240\n73C0\n2000\n27E0\n3420\nC7E0\n0420\n07E0\nENDCHAR\nSTARTCHAR U_742A\nENCODING 29738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFFE0\n2440\n27C0\nF440\n27C0\n2440\n3FE0\nC000\n0440\n0820\nENDCHAR\nSTARTCHAR U_742B\nENCODING 29739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2100\n27C0\nF200\n2FE0\n2940\n37A0\nC100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_742C\nENCODING 29740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2820\n2400\n27E0\nF5A0\n2DA0\n32E0\nE480\n08A0\n1060\nENDCHAR\nSTARTCHAR U_742D\nENCODING 29741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF840\n27C0\n2040\nF7E0\n2920\n2540\n3380\nC540\n0920\n0300\nENDCHAR\nSTARTCHAR U_742E\nENCODING 29742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFFE0\n2420\n23C0\n7000\n27E0\n2080\n3AC0\nC4A0\n0AA0\n0100\nENDCHAR\nSTARTCHAR U_742F\nENCODING 29743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2820\n27C0\n7440\n27C0\n2400\n37E0\nC420\n07E0\n0420\nENDCHAR\nSTARTCHAR U_7430\nENCODING 29744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFD40\n2580\n2980\n7240\n2D20\n2140\n3D80\nE500\n4280\n1C60\nENDCHAR\nSTARTCHAR U_7431\nENCODING 29745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF920\n2BA0\n2920\nFFE0\n2820\n2BA0\n3AA0\nCBA0\n1020\n2060\nENDCHAR\nSTARTCHAR U_7432\nENCODING 29746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFA80\n2EE0\n2280\n7280\n2EE0\n2280\n3280\nCEE0\n0280\n0280\nENDCHAR\nSTARTCHAR U_7433\nENCODING 29747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nF480\n2FE0\n2480\nF480\n2EC0\n35A0\n26A0\n3480\nC480\n0480\nENDCHAR\nSTARTCHAR U_7434\nENCODING 29748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\n71C0\n2080\nFBE0\n0400\n1B00\nE4E0\n1F00\n0200\n0400\nENDCHAR\nSTARTCHAR U_7435\nENCODING 29749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\n71C0\n2080\nFBE0\n4200\n4240\n7B80\n4220\n5A20\n61E0\nENDCHAR\nSTARTCHAR U_7436\nENCODING 29750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\n71C0\n2080\nFBE0\n0000\n7F80\n4480\n7F80\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_7437\nENCODING 29751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\n4200\n4FC0\nF200\n5FE0\n4500\n7500\nC520\n0920\n10E0\nENDCHAR\nSTARTCHAR U_7438\nENCODING 29752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nF200\n4FC0\n4840\nEFC0\n4840\n4FC0\n7200\n9FE0\n0200\n0200\nENDCHAR\nSTARTCHAR U_7439\nENCODING 29753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n1100\n7BC0\n1100\nFBE0\n0400\n7FC0\n0D00\n1480\nE460\n0400\nENDCHAR\nSTARTCHAR U_743A\nENCODING 29754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nF480\n23E0\n2880\n2480\nF3E0\n2480\n2480\n3920\nCBE0\n0920\nENDCHAR\nSTARTCHAR U_743B\nENCODING 29755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE300\n4480\n5840\nEFA0\n4200\n4FC0\n4200\n6A40\nC680\n1FE0\nENDCHAR\nSTARTCHAR U_743C\nENCODING 29756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2000\n27C0\n2440\nF440\n27C0\n2100\n3540\nC920\n0300\nENDCHAR\nSTARTCHAR U_743D\nENCODING 29757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFA0\n4240\n5FE0\nE100\n47C0\n5C40\n47C0\n7440\nC7C0\n0440\nENDCHAR\nSTARTCHAR U_743E\nENCODING 29758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nEA40\n4FC0\n4A40\nEFC0\n4500\n4880\n74E0\nC480\n0480\n0880\nENDCHAR\nSTARTCHAR U_743F\nENCODING 29759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF920\n2FE0\n2100\nF7C0\n2540\n27C0\n3540\nCFE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_7440\nENCODING 29760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nFF00\n2100\n27C0\n7540\n27C0\n2100\n3FE0\nC960\n0FA0\n0860\nENDCHAR\nSTARTCHAR U_7441\nENCODING 29761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFC20\n25A0\n2420\n75A0\n2000\n27E0\n3C20\nC7E0\n0420\n07E0\nENDCHAR\nSTARTCHAR U_7442\nENCODING 29762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFD20\n27E0\n2400\n75E0\n2520\n25E0\n3D20\nC5E0\n0920\n11E0\nENDCHAR\nSTARTCHAR U_7443\nENCODING 29763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFC0\n4200\n5FC0\nE200\n5FE0\n4880\n58C0\nEFA0\n0880\n0F80\nENDCHAR\nSTARTCHAR U_7444\nENCODING 29764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n2FE0\n2820\n27C0\nF000\n27C0\n2440\n37C0\nC440\n0FE0\nENDCHAR\nSTARTCHAR U_7445\nENCODING 29765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nF480\n4780\n4480\nF780\n5FE0\n4A00\n6B80\nCE00\n1300\n20E0\nENDCHAR\nSTARTCHAR U_7446\nENCODING 29766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFC20\n27E0\n2420\n77E0\n2480\n27E0\n3880\nC3E0\n0080\n0FE0\nENDCHAR\nSTARTCHAR U_7447\nENCODING 29767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n4100\n4FE0\nF7C0\n4540\n5FE0\n6A80\nCFE0\n0280\n0100\nENDCHAR\nSTARTCHAR U_7448\nENCODING 29768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nF280\n4100\n4FE0\nF540\n4A00\n4100\n6FE0\nC380\n0540\n1920\nENDCHAR\nSTARTCHAR U_7449\nENCODING 29769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE840\n4FC0\n4900\nEFE0\n4880\n4FE0\n6840\nCFC0\n0840\n0FC0\nENDCHAR\nSTARTCHAR U_744A\nENCODING 29770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF0A0\n2FE0\n2880\n7E80\n28A0\n2EA0\n3AC0\nEEA0\n1160\n2220\nENDCHAR\nSTARTCHAR U_744B\nENCODING 29771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n2140\n27E0\n7240\n23C0\n2080\n37E0\nC280\n07E0\n0080\nENDCHAR\nSTARTCHAR U_744C\nENCODING 29772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE200\n4FE0\n4AA0\nEAA0\n4AE0\n4100\n7FE0\nC280\n0440\n1820\nENDCHAR\nSTARTCHAR U_744D\nENCODING 29773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF780\n2900\n27C0\n7540\n26C0\n2540\n3FE0\nE100\n4280\n0C60\nENDCHAR\nSTARTCHAR U_744E\nENCODING 29774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nF4A0\n27C0\n24A0\n76E0\n2100\n27E0\n3420\nC7E0\n0420\n07E0\nENDCHAR\nSTARTCHAR U_744F\nENCODING 29775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2AA0\n2440\n77E0\n2480\n2FE0\n3980\nC280\n0480\n0980\nENDCHAR\nSTARTCHAR U_7450\nENCODING 29776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nF280\n2FE0\n2000\n7E20\n2AA0\n2EA0\n3AA0\nCEA0\n0A20\n0AE0\nENDCHAR\nSTARTCHAR U_7451\nENCODING 29777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nFA40\n2780\n2080\n77E0\n2340\n2580\n3A80\nC5C0\n02A0\n0DA0\nENDCHAR\nSTARTCHAR U_7452\nENCODING 29778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nFC40\n27C0\n2440\n7FE0\n2200\n27E0\n3AA0\nC4A0\n0920\n0260\nENDCHAR\nSTARTCHAR U_7453\nENCODING 29779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFC0\n4200\n5FC0\nFAC0\n5740\n5FC0\n6700\nCA80\n3260\n0200\nENDCHAR\nSTARTCHAR U_7454\nENCODING 29780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF7C0\n2440\n27C0\n7440\n27C0\n2120\n3F40\nC580\n0940\n1320\nENDCHAR\nSTARTCHAR U_7455\nENCODING 29781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nFA20\n2A20\n2EE0\n7800\n2EE0\n28A0\n3EA0\nC840\n08A0\n0B20\nENDCHAR\nSTARTCHAR U_7456\nENCODING 29782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEDC0\n4940\n4D60\nEA00\n4DE0\n4940\n6DC0\nD880\n0940\n0A60\nENDCHAR\nSTARTCHAR U_7457\nENCODING 29783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nFA20\n2540\n27E0\n7200\n2FE0\n2200\n3BC0\nC640\n0980\n1660\nENDCHAR\nSTARTCHAR U_7458\nENCODING 29784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\nEAE0\n4AA0\n4EA0\nEAC0\n4EA0\n4BA0\n6EE0\nDA80\n0280\n0280\nENDCHAR\nSTARTCHAR U_7459\nENCODING 29785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n02A0\nF540\n2540\n22A0\n7100\n2FE0\n2AA0\n3920\nCAA0\n0FE0\n0820\nENDCHAR\nSTARTCHAR U_745A\nENCODING 29786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n04E0\nF4A0\n2FA0\n24E0\n74A0\n2EA0\n2AE0\n3AA0\nCEA0\n0120\n0260\nENDCHAR\nSTARTCHAR U_745B\nENCODING 29787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n2280\n2100\n77C0\n2540\n2540\n3FE0\nC280\n0440\n0820\nENDCHAR\nSTARTCHAR U_745C\nENCODING 29788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0300\n0480\nEB60\n4000\n4E20\nEAA0\n4EA0\n4AA0\n6EA0\nCA20\n0AE0\nENDCHAR\nSTARTCHAR U_745D\nENCODING 29789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF7C0\n4640\n4540\nF7C0\n4000\n47C0\n7100\nC7C0\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_745E\nENCODING 29790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nF920\n2FE0\n2000\n7FE0\n2200\n2FE0\n3AA0\nCAA0\n0AA0\n0860\nENDCHAR\nSTARTCHAR U_745F\nENCODING 29791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\n71C0\n2080\nFBE0\n0880\n5500\n5240\n94A0\n18A0\nEF80\nENDCHAR\nSTARTCHAR U_7460\nENCODING 29792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0300\nF4E0\n44A0\n45A0\nF6A0\n4140\n47E0\n5520\n67E0\nC520\n07E0\nENDCHAR\nSTARTCHAR U_7461\nENCODING 29793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n5480\n57E0\nFEA0\n52A0\n5EA0\n76A0\nD6E0\n1C80\n0080\nENDCHAR\nSTARTCHAR U_7462\nENCODING 29794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2AA0\n2540\n7280\n2440\n2820\n3FC0\nC440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_7463\nENCODING 29795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nF540\n27E0\n2420\nF7E0\n2420\n27E0\n3C20\nC7E0\n0240\n0420\nENDCHAR\nSTARTCHAR U_7464\nENCODING 29796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBE0\n2440\n2A80\n7500\n27E0\n2900\n37E0\nC100\n0520\n07E0\nENDCHAR\nSTARTCHAR U_7465\nENCODING 29797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F80\nF880\n4F80\n4880\nEF80\n4000\n5FC0\n5540\n7540\nD540\n3FE0\nENDCHAR\nSTARTCHAR U_7466\nENCODING 29798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nEF80\n4880\n4F80\nEFE0\n4800\n4FC0\n6040\nDAC0\n1540\n0080\nENDCHAR\nSTARTCHAR U_7467\nENCODING 29799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2100\n2FC0\nF200\n2FE0\n25C0\n3920\nEFE0\n4540\n0920\nENDCHAR\nSTARTCHAR U_7468\nENCODING 29800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF280\n46C0\n4280\nEFE0\n4000\n57C0\n6440\nC7C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_7469\nENCODING 29801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n56A0\n5AC0\n3180\n4A40\nFFE0\n8020\n7FC0\n0400\n3FC0\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_746A\nENCODING 29802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFD00\n27C0\n2500\n77C0\n2500\n27E0\n38A0\nC560\n0AA0\n12C0\nENDCHAR\nSTARTCHAR U_746B\nENCODING 29803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\nEE20\n4920\n4540\nE400\n4300\n4CE0\n5820\n6EE0\nC820\n0FE0\nENDCHAR\nSTARTCHAR U_746C\nENCODING 29804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n1FC0\nC880\n1FC0\nCAA0\n5260\n7FC0\n0400\n7FC0\n0500\nFFE0\nENDCHAR\nSTARTCHAR U_746D\nENCODING 29805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2940\n2FE0\nF940\n2FC0\n2900\n3BE0\nCA20\n13E0\n2220\nENDCHAR\nSTARTCHAR U_746E\nENCODING 29806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF280\n2FE0\n2AA0\nFFE0\n2100\n2FE0\n3380\nC540\n0920\n1120\nENDCHAR\nSTARTCHAR U_746F\nENCODING 29807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n04E0\nFEA0\n2AA0\n2EA0\nFAC0\n2EA0\n28A0\n3CA0\nEAE0\n0D80\n0880\nENDCHAR\nSTARTCHAR U_7470\nENCODING 29808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF7C0\n2540\n27C0\n7540\n27C0\n2140\n3BA0\nC5E0\n0920\n10E0\nENDCHAR\nSTARTCHAR U_7471\nENCODING 29809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2100\n27C0\n7440\n2740\n25C0\n3440\nCFE0\n0280\n1C60\nENDCHAR\nSTARTCHAR U_7472\nENCODING 29810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFA80\n2540\n2FE0\n7440\n27C0\n2440\n3FE0\nE620\n4BE0\n1220\nENDCHAR\nSTARTCHAR U_7473\nENCODING 29811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nF280\n27E0\n2100\n77C0\n2100\n2FE0\n3200\nC7C0\n0880\n17E0\nENDCHAR\nSTARTCHAR U_7474\nENCODING 29812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\nFD40\n2140\nFE20\n8400\nFBE0\n2240\n7940\n2080\n3940\nC620\nENDCHAR\nSTARTCHAR U_7475\nENCODING 29813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF540\n2AC0\n2580\n7660\n2100\n27C0\n3540\nC7C0\n0140\n0FA0\nENDCHAR\nSTARTCHAR U_7476\nENCODING 29814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nFF20\n2A20\n2540\n7480\n27E0\n2900\n3FE0\nC100\n0920\n0FE0\nENDCHAR\nSTARTCHAR U_7477\nENCODING 29815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF720\n2540\n2FE0\n7920\n2FE0\n2200\n33C0\nC640\n0980\n1660\nENDCHAR\nSTARTCHAR U_7478\nENCODING 29816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n4820\n4B80\nF400\n47C0\n4480\n7FE0\nC480\n0840\n1020\nENDCHAR\nSTARTCHAR U_7479\nENCODING 29817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF7E0\n2280\n2380\n7440\n2BA0\n2100\n37E0\nC100\n0540\n0B20\nENDCHAR\nSTARTCHAR U_747A\nENCODING 29818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\nEA80\n5FE0\n54A0\nE780\n4200\n4FC0\n6A40\nCB40\n0A80\n0200\nENDCHAR\nSTARTCHAR U_747B\nENCODING 29819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF540\n4FE0\n4540\nF7C0\n4440\n47C0\n7440\nC7C0\n0440\n0820\nENDCHAR\nSTARTCHAR U_747C\nENCODING 29820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2540\n27C0\n7540\n27C0\n2120\n3FE0\nE440\n4240\n00C0\nENDCHAR\nSTARTCHAR U_747D\nENCODING 29821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0340\nF540\n2940\n26A0\n7440\n2D40\n2560\n3540\nC540\n06C0\n0460\nENDCHAR\nSTARTCHAR U_747E\nENCODING 29822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n2280\n2100\n77C0\n2540\n2FE0\n3100\nC7C0\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_747F\nENCODING 29823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\nA460\nFBC0\n9240\nFD80\nAA40\nFFC0\n0400\n3F80\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_7480\nENCODING 29824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0520\nFD20\n27E0\n2500\n77E0\n2C80\n27E0\n3C80\nC7E0\n0480\n07E0\nENDCHAR\nSTARTCHAR U_7481\nENCODING 29825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF7E0\n2520\n25E0\n76A0\n2560\n26A0\n37E0\nC540\n0CA0\n13E0\nENDCHAR\nSTARTCHAR U_7482\nENCODING 29826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFC0\n4480\n4780\nE480\n5FE0\n4680\n6A40\n57A0\nA200\n0FC0\nENDCHAR\nSTARTCHAR U_7483\nENCODING 29827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2280\n2920\n7AA0\n2FE0\n2100\n3FE0\nCAA0\n0BA0\n0860\nENDCHAR\nSTARTCHAR U_7484\nENCODING 29828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\n4480\n5FE0\nE840\n4FC0\n4840\n4FC0\n6500\n8520\n18E0\nENDCHAR\nSTARTCHAR U_7485\nENCODING 29829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nFA80\n2540\n27C0\n7540\n27C0\n2540\n3FE0\nC380\n0540\n0920\nENDCHAR\nSTARTCHAR U_7486\nENCODING 29830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nFAA0\n2660\n2AA0\n7320\n2480\n2A60\n3500\nC240\n0080\n0F00\nENDCHAR\nSTARTCHAR U_7487\nENCODING 29831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nE900\n5DE0\n4A00\nFDE0\n5440\n5540\n7560\nD540\n1540\n2AE0\nENDCHAR\nSTARTCHAR U_7488\nENCODING 29832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFF80\n24E0\n2FA0\n74A0\n2FA0\n24A0\n3EA0\nCA40\n0AA0\n3520\nENDCHAR\nSTARTCHAR U_7489\nENCODING 29833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFFE0\n2AA0\n23E0\n7AA0\n2BE0\n2880\n3BE0\nC880\n1480\n23E0\nENDCHAR\nSTARTCHAR U_748A\nENCODING 29834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\n2480\n2780\n7100\n2FE0\n2920\n3DA0\nCB60\n0DA0\n0960\nENDCHAR\nSTARTCHAR U_748B\nENCODING 29835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2280\n2FE0\n7440\n27C0\n2440\n37C0\nC100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_748C\nENCODING 29836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\n4BA0\n5100\n47C0\nE540\n47C0\n5540\n67C0\nC280\n0440\nENDCHAR\nSTARTCHAR U_748D\nENCODING 29837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n2280\n2FE0\n2540\nFFE0\n2540\n2FE0\n3100\nDFE0\n0100\nENDCHAR\nSTARTCHAR U_748E\nENCODING 29838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF820\n2AA0\n2AA0\n7AA0\n2540\n2AA0\n3FE0\nC480\n0300\n1CE0\nENDCHAR\nSTARTCHAR U_748F\nENCODING 29839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF380\n4280\n5FE0\nF480\n57A0\n5AC0\n7780\nD280\n15A0\n1860\nENDCHAR\nSTARTCHAR U_7490\nENCODING 29840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E80\nFAE0\n4BA0\n4E40\nF4A0\n4720\n55E0\n5520\n7720\nDDE0\n0120\nENDCHAR\nSTARTCHAR U_7491\nENCODING 29841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n4D40\n5540\nFFE0\n5540\n5540\n7FE0\nD540\n12A0\n22A0\nENDCHAR\nSTARTCHAR U_7492\nENCODING 29842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F40\nFBA0\n26C0\n2440\n7BA0\n2000\n27C0\n3C40\nC7C0\n0280\n1FE0\nENDCHAR\nSTARTCHAR U_7493\nENCODING 29843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nEFE0\n4280\n4FE0\nE540\n5920\n4FC0\n6240\nC220\n04A0\n1840\nENDCHAR\nSTARTCHAR U_7494\nENCODING 29844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFFE0\n2AA0\n2920\n7FE0\n2000\n27C0\n3440\nE7C0\n4440\n07C0\nENDCHAR\nSTARTCHAR U_7495\nENCODING 29845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF040\n27C0\n2040\n7FE0\n24A0\n2EE0\n3080\nEFE0\n4480\n0380\nENDCHAR\nSTARTCHAR U_7496\nENCODING 29846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0BE0\nF680\n2BE0\n2620\nFBE0\n2A80\n2FE0\n3100\nC380\n0540\n0920\nENDCHAR\nSTARTCHAR U_7497\nENCODING 29847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\nA840\n5FC0\n2840\nCFE0\n5520\n7FC0\n0400\n7FC0\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_7498\nENCODING 29848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nF540\n2FE0\n2540\n7920\n2540\n2FE0\n3B40\nC7E0\n0440\n1840\nENDCHAR\nSTARTCHAR U_7499\nENCODING 29849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2AA0\n27C0\n2C60\nF7C0\n2440\n27C0\n3100\nC940\n1320\nENDCHAR\nSTARTCHAR U_749A\nENCODING 29850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF280\n2FE0\n2540\n7900\n2FE0\n2AA0\n3FE0\nCAA0\n0BA0\n0860\nENDCHAR\nSTARTCHAR U_749B\nENCODING 29851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\n4240\n5FE0\nF740\n5AC0\n7240\n5FC0\n9AC0\n2740\n2240\nENDCHAR\nSTARTCHAR U_749C\nENCODING 29852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF7C0\n2280\n2FE0\n7100\n27C0\n2540\n37C0\nC540\n07C0\n0C60\nENDCHAR\nSTARTCHAR U_749D\nENCODING 29853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n4540\n5FE0\nE440\n47C0\n4440\n77C0\nC440\n07C0\n0C60\nENDCHAR\nSTARTCHAR U_749E\nENCODING 29854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0AA0\nF6C0\n2FE0\n2280\n7FE0\n2100\n27C0\n3100\nCFE0\n0280\n0C60\nENDCHAR\nSTARTCHAR U_749F\nENCODING 29855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n27C0\n2440\n7FE0\n2000\n27C0\n3440\nC7C0\n0540\n1B20\nENDCHAR\nSTARTCHAR U_74A0\nENCODING 29856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nFF20\n2540\n2FE0\n7580\n2940\n27E0\n3540\nC7C0\n0540\n07C0\nENDCHAR\nSTARTCHAR U_74A1\nENCODING 29857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFA80\n27E0\n2280\n7BC0\n2A80\n2BC0\n3A80\nCBE0\n0E00\n13E0\nENDCHAR\nSTARTCHAR U_74A2\nENCODING 29858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nE280\n4EE0\n4AA0\nEEE0\n4280\n4FE0\n5920\n6FE0\nC920\n0FE0\nENDCHAR\nSTARTCHAR U_74A3\nENCODING 29859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A80\nF2A0\n5FC0\n4AA0\nFFE0\n4540\n5FE0\n6540\nCAA0\n1160\n2620\nENDCHAR\nSTARTCHAR U_74A4\nENCODING 29860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\n4A40\n4FC0\nEA40\n4FC0\n4280\n5FE0\n6540\nD460\n13C0\nENDCHAR\nSTARTCHAR U_74A5\nENCODING 29861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\nFF80\n52E0\n48A0\n5F20\nF120\n5D20\n55A0\n5D40\nE1A0\n06A0\nENDCHAR\nSTARTCHAR U_74A6\nENCODING 29862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF720\n2540\n2FE0\n7AA0\n27C0\n2A20\n37E0\nCA40\n0180\n1E60\nENDCHAR\nSTARTCHAR U_74A7\nENCODING 29863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n7D40\n4480\n7FE0\n8080\n7FC0\n0400\n3F80\n0500\nFFE0\nENDCHAR\nSTARTCHAR U_74A8\nENCODING 29864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF3E0\n2AA0\n2F40\n75A0\n2320\n2D40\n3580\nCFE0\n0540\n0920\nENDCHAR\nSTARTCHAR U_74A9\nENCODING 29865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nF200\n2FE0\n2A20\n7FC0\n2A20\n2FE0\n3AA0\nCDC0\n12A0\n2520\nENDCHAR\nSTARTCHAR U_74AA\nENCODING 29866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n27C0\n2000\n7EE0\n2AA0\n2EE0\n3100\nEFE0\n4540\n0920\nENDCHAR\nSTARTCHAR U_74AB\nENCODING 29867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nF540\n2FE0\n2820\n77C0\n2440\n2FE0\n3920\nCFE0\n0920\n0FE0\nENDCHAR\nSTARTCHAR U_74AC\nENCODING 29868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nEE80\n4A80\n4FE0\nEB40\n4F40\n4480\n6E80\nC540\n0A40\n1620\nENDCHAR\nSTARTCHAR U_74AD\nENCODING 29869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n0920\nEFE0\n5540\n47C0\nFD40\n4FC0\n4900\n6FE0\nC900\n17E0\nENDCHAR\nSTARTCHAR U_74AE\nENCODING 29870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n4AA0\n4AA0\nEBA0\n4820\n4FE0\n4440\n67C0\n8440\n1FE0\nENDCHAR\nSTARTCHAR U_74AF\nENCODING 29871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\nF440\n2BA0\n2000\n7FE0\n2AA0\n2FE0\n3440\nE7C0\n4440\n07C0\nENDCHAR\nSTARTCHAR U_74B0\nENCODING 29872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nFAA0\n2FE0\n2000\n7FE0\n2440\n27C0\n3280\nECA0\n4540\n0620\nENDCHAR\nSTARTCHAR U_74B1\nENCODING 29873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nF440\n2EE0\n2440\n7EE0\n2100\n22C0\n3640\nEAA0\n4340\n1DC0\nENDCHAR\nSTARTCHAR U_74B2\nENCODING 29874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0220\nF140\n2FE0\n2920\n72C0\n2980\n2EC0\n39A0\nEEA0\n4900\n17E0\nENDCHAR\nSTARTCHAR U_74B3\nENCODING 29875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nEFC0\n5700\n5AC0\nEF80\n4A80\n4D80\n6A80\nCF80\n0880\n1040\nENDCHAR\nSTARTCHAR U_74B4\nENCODING 29876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFFE0\n4EC0\n5560\nF440\n4FE0\n4120\n65C0\n8500\n0B00\n10E0\nENDCHAR\nSTARTCHAR U_74B5\nENCODING 29877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E60\nFBA0\n2A20\n2FE0\n78A0\n2EE0\n2AA0\n3FE0\nE480\n4840\n1020\nENDCHAR\nSTARTCHAR U_74B6\nENCODING 29878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF140\n2FE0\n2140\n7FE0\n2100\n2FE0\n3540\nCFE0\n0AA0\n1FE0\nENDCHAR\nSTARTCHAR U_74B7\nENCODING 29879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFF80\n2AE0\n2FA0\n7AA0\n2FA0\n2AA0\n3FA0\nCA40\n0AA0\n1520\nENDCHAR\nSTARTCHAR U_74B8\nENCODING 29880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2420\n23C0\n7580\n23C0\n2E40\n33C0\nC240\n03C0\n0660\nENDCHAR\nSTARTCHAR U_74B9\nENCODING 29881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\n4200\n5FE0\nF220\n4FC0\n4000\n7FE0\n9540\n1D40\n00C0\nENDCHAR\nSTARTCHAR U_74BA\nENCODING 29882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6EC0\n5140\n7FC0\n5540\nFFE0\n8020\nBFA0\n0400\n3F80\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_74BB\nENCODING 29883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF5A0\n2360\n25A0\n7100\n2FE0\n2440\n3AA0\nEFE0\n4100\n0100\nENDCHAR\nSTARTCHAR U_74BC\nENCODING 29884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1E80\nF480\n5EE0\n5280\nFF40\n5420\n5E00\n4000\n6FE0\nCAA0\n3FE0\nENDCHAR\nSTARTCHAR U_74BD\nENCODING 29885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4440\nFFE0\n56C0\n6D40\n56C0\nFFE0\n0400\n7FC0\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_74BE\nENCODING 29886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n4AA0\n5540\nF540\n4520\n4FC0\n6840\nCFC0\n0840\n1040\nENDCHAR\nSTARTCHAR U_74BF\nENCODING 29887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\nF100\n2FE0\n2AA0\n7540\n2AA0\n2FE0\n3440\nE7C0\n4440\n07C0\nENDCHAR\nSTARTCHAR U_74C0\nENCODING 29888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF100\n2FE0\n2920\n7280\n2FE0\n2100\n3FE0\nEAA0\n4AA0\n0860\nENDCHAR\nSTARTCHAR U_74C1\nENCODING 29889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFFE0\n2540\n27E0\n7D00\n27C0\n2500\n3FE0\nC240\n0180\n0E60\nENDCHAR\nSTARTCHAR U_74C2\nENCODING 29890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFFE0\n2540\n27C0\n7100\n2FE0\n2440\n3FE0\nCAA0\n0AA0\n1FE0\nENDCHAR\nSTARTCHAR U_74C3\nENCODING 29891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF540\n27C0\n2540\n77C0\n2000\n2FE0\n3AA0\nEFE0\n4AA0\n0FE0\nENDCHAR\nSTARTCHAR U_74C4\nENCODING 29892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\n4100\n4FE0\nFAA0\n4FE0\n4540\n76C0\nC540\n07C0\n0C60\nENDCHAR\nSTARTCHAR U_74C5\nENCODING 29893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nFBC0\n36A0\n2BE0\n76A0\n2FE0\n2100\n3FE0\nE580\n4940\n1120\nENDCHAR\nSTARTCHAR U_74C6\nENCODING 29894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n06C0\nF900\n5FE0\n5540\nE640\n4FC0\n4840\n6FC0\n8840\n0FC0\n1860\nENDCHAR\nSTARTCHAR U_74C7\nENCODING 29895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF440\n47C0\n4440\nFFE0\n5540\n4BA0\n6200\nC7C0\n0980\n0660\nENDCHAR\nSTARTCHAR U_74C8\nENCODING 29896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E80\nE5E0\n5EA0\n4EA0\nF520\n4560\n4280\n6D60\n8380\n0D60\n0300\nENDCHAR\nSTARTCHAR U_74C9\nENCODING 29897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nEEE0\n4440\n4FE0\nEAA0\n57C0\n4540\n76C0\n8540\n07C0\n0C60\nENDCHAR\nSTARTCHAR U_74CA\nENCODING 29898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nFFE0\n2AA0\n2FE0\n7440\n27C0\n2440\n37C0\nC480\n0300\n1CE0\nENDCHAR\nSTARTCHAR U_74CB\nENCODING 29899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\n4280\n4FE0\nF920\n4FE0\n4920\n6BA0\nCAA0\n1AA0\n27E0\nENDCHAR\nSTARTCHAR U_74CC\nENCODING 29900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFE0\n4000\n4FE0\nEAA0\n4FE0\n4540\n6B20\n86C0\n1A40\n0320\nENDCHAR\nSTARTCHAR U_74CD\nENCODING 29901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFFE0\n5500\n5BE0\nF480\n57E0\n5940\n75C0\n9540\n1740\n19E0\nENDCHAR\nSTARTCHAR U_74CE\nENCODING 29902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFEE0\n4540\n5FE0\nF520\n5FE0\n4520\n6FE0\n9520\n25E0\n0720\nENDCHAR\nSTARTCHAR U_74CF\nENCODING 29903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n04E0\nFE80\n2AE0\n2420\n7EE0\n2A80\n2EE0\n3A80\nCEE0\n0AA0\n0AE0\nENDCHAR\nSTARTCHAR U_74D0\nENCODING 29904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nE200\n5FE0\n52A0\n5F00\nF240\n57C0\n5540\n6FE0\nAAA0\n5FE0\nENDCHAR\nSTARTCHAR U_74D1\nENCODING 29905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n56C0\n5240\n5FE0\nF6C0\n5B60\n5080\n7480\nD4E0\n2480\n4FE0\nENDCHAR\nSTARTCHAR U_74D2\nENCODING 29906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1540\n1FE0\nE440\n5FE0\n4A40\nF2A0\n47C0\n4540\n7540\nC280\n0C60\nENDCHAR\nSTARTCHAR U_74D3\nENCODING 29907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1EE0\nF2A0\n5EE0\n52A0\nFFE0\n5120\n57E0\n7560\n97E0\n13A0\n1560\nENDCHAR\nSTARTCHAR U_74D4\nENCODING 29908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nFAA0\n2EE0\n2AA0\n7EE0\n2440\n2AA0\n3FE0\nE480\n4300\n1CE0\nENDCHAR\nSTARTCHAR U_74D5\nENCODING 29909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n2540\nEFE0\n8B60\nEDA0\n2B60\nFFE0\n0400\n7FC0\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_74D6\nENCODING 29910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2AA0\n2EE0\n7280\n2FE0\n2280\n3FE0\nE4A0\n4D40\n1620\nENDCHAR\nSTARTCHAR U_74D7\nENCODING 29911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nFFE0\n2500\n2FC0\n7900\n2FE0\n2AA0\n3FE0\nEAA0\n4BA0\n0860\nENDCHAR\nSTARTCHAR U_74D8\nENCODING 29912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n2280\n2EE0\n7AA0\n2EE0\n27E0\n3C80\nE7E0\n4480\n07E0\nENDCHAR\nSTARTCHAR U_74D9\nENCODING 29913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF100\n27E0\n2120\n7FE0\n2040\n2FE0\n3B40\nEEC0\n4540\n0AA0\nENDCHAR\nSTARTCHAR U_74DA\nENCODING 29914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nF540\n2FE0\n2540\n7A60\n27C0\n2440\n37C0\nC440\n07C0\n0C60\nENDCHAR\nSTARTCHAR U_74DB\nENCODING 29915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0740\nE460\n5F40\n54E0\nFF40\n5540\n5740\n5A40\nFFA0\n2DA0\n4AA0\nENDCHAR\nSTARTCHAR U_74DC\nENCODING 29916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n3F00\n2500\n2500\n2500\n2480\n2480\n2440\n4540\n47A0\n8CA0\nENDCHAR\nSTARTCHAR U_74DD\nENCODING 29917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nF9E0\nAA20\nAC20\nA920\nA8A0\nA8A0\nA420\nAAC0\nB900\nC8E0\nENDCHAR\nSTARTCHAR U_74DE\nENCODING 29918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A80\nFA80\nABE0\nAC80\nAFE0\nA880\nA940\nA620\nAA20\nBD80\nA460\nENDCHAR\nSTARTCHAR U_74DF\nENCODING 29919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1A00\nEBE0\nAC20\nABA0\nAAA0\nABA0\nAA40\nAA20\nA5E0\nBA00\nA9E0\nENDCHAR\nSTARTCHAR U_74E0\nENCODING 29920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nFFC0\n5540\n8D40\n7540\n0540\nFD40\n4540\nF520\n1560\n69A0\nENDCHAR\nSTARTCHAR U_74E1\nENCODING 29921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nFFC0\n2540\nFD40\n5540\n2540\nFD20\n2520\nFD20\n25E0\n2920\nENDCHAR\nSTARTCHAR U_74E2\nENCODING 29922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE60\n2BA0\nFEA0\nAAA0\nFEA0\n02A0\n7AA0\n02A0\nFEA0\n5AE0\nB4A0\nENDCHAR\nSTARTCHAR U_74E3\nENCODING 29923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\nFDE0\nB5A0\n5540\nF5E0\n5540\n5540\nF5E0\n5540\n5740\nA140\nENDCHAR\nSTARTCHAR U_74E4\nENCODING 29924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nFFA0\nAAA0\nFAA0\n52A0\nFEA0\n52A0\nFEA0\n36A0\n6AA0\nA4E0\nENDCHAR\nSTARTCHAR U_74E5\nENCODING 29925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\nE920\nAB40\nADC0\nAAA0\n2480\nFFE0\nAAA0\nFBE0\n28A0\nF7E0\nENDCHAR\nSTARTCHAR U_74E6\nENCODING 29926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1000\n1000\n1F00\n1100\n2900\n2500\n2520\n2120\nF920\n40E0\nENDCHAR\nSTARTCHAR U_74E7\nENCODING 29927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n4100\n7900\n4FC0\n4900\n6900\n5900\n4900\n4920\n4820\n67E0\nENDCHAR\nSTARTCHAR U_74E8\nENCODING 29928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF200\n2200\n2780\n2480\n2680\n3580\nC480\n0580\n0EA0\n04E0\nENDCHAR\nSTARTCHAR U_74E9\nENCODING 29929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC60\n4380\n4080\n7C80\n47E0\n6480\n5480\n4480\n44A0\n7420\nC3E0\nENDCHAR\nSTARTCHAR U_74EA\nENCODING 29930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0060\nFF80\n4200\n7BC0\n4A40\n4B40\n6A80\n4C80\n4960\n6A20\n47E0\nENDCHAR\nSTARTCHAR U_74EB\nENCODING 29931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2180\nDF60\n0900\n1200\n7FE0\n1000\n1F00\n1900\n2520\n30E0\nENDCHAR\nSTARTCHAR U_74EC\nENCODING 29932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2400\nFC00\n4780\n7480\n5680\n5580\n5480\n54A0\n96A0\nACE0\nENDCHAR\nSTARTCHAR U_74ED\nENCODING 29933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nFA00\nAB80\n2280\n2280\n3580\n5480\n5C80\n56A0\n8460\nENDCHAR\nSTARTCHAR U_74EE\nENCODING 29934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2480\nC960\n1E80\n0000\nFFE0\n2000\n3F00\n4920\n4520\n79E0\nENDCHAR\nSTARTCHAR U_74EF\nENCODING 29935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8100\nA900\nABC0\n9240\n9340\nAAC0\nAA40\n8AC0\n8740\nFA60\nENDCHAR\nSTARTCHAR U_74F0\nENCODING 29936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF880\n4280\n7C40\n4BE0\n6940\n5940\n4A40\n4D40\n68A0\n4FE0\nENDCHAR\nSTARTCHAR U_74F1\nENCODING 29937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9C0\n4600\n7200\n5FC0\n5200\n5FC0\nB200\n9240\n91C0\nD020\n8FE0\nENDCHAR\nSTARTCHAR U_74F2\nENCODING 29938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n4F80\n7200\n5A80\n5F80\nB200\n9240\n91C0\nD020\n8FE0\nENDCHAR\nSTARTCHAR U_74F3\nENCODING 29939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n2200\nFB80\n2280\n2280\n7580\n5480\n5480\n76A0\n0460\nENDCHAR\nSTARTCHAR U_74F4\nENCODING 29940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5200\n8A00\n23C0\n1440\nFE40\n0D40\n5440\n2540\n1660\n1460\nENDCHAR\nSTARTCHAR U_74F5\nENCODING 29941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n47E0\n8A00\nFA00\n0380\nF480\n9680\n9580\n94A0\nF6A0\n9460\nENDCHAR\nSTARTCHAR U_74F6\nENCODING 29942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8BE0\n5100\nFD00\n51C0\n5240\nFF40\n52C0\n5240\n5240\n5360\n9660\nENDCHAR\nSTARTCHAR U_74F7\nENCODING 29943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8400\n47E0\n2940\nC280\n4440\nFFE0\n1000\n1F00\n2920\n2520\n70E0\nENDCHAR\nSTARTCHAR U_74F8\nENCODING 29944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4100\n7BC0\n4A40\n4A40\n6BC0\n5A40\n8A40\n8BC0\nA820\nC7E0\nENDCHAR\nSTARTCHAR U_74F9\nENCODING 29945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9200\nF380\n0280\nF480\n9680\nF580\n9480\nF4A0\n96A0\nB460\nENDCHAR\nSTARTCHAR U_74FA\nENCODING 29946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4200\n7B80\n4280\n7A80\n4280\nFD80\n2480\n54A0\nFEA0\n0460\nENDCHAR\nSTARTCHAR U_74FB\nENCODING 29947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nDBE0\n2100\nD900\n23C0\nFE40\nA240\nFB40\nAAC0\nAA40\nBA40\n2360\nENDCHAR\nSTARTCHAR U_74FC\nENCODING 29948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n4540\n77C0\n5540\n57C0\n7100\n57C0\n9100\n97C0\nD020\n8FE0\nENDCHAR\nSTARTCHAR U_74FD\nENCODING 29949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\nFFE0\n90A0\n1F80\n0000\nFFE0\n1000\n1F00\n2920\n2520\n71E0\nENDCHAR\nSTARTCHAR U_74FE\nENCODING 29950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0BE0\nF100\n2100\nFBC0\n7240\nAB40\n22C0\nFE40\n2A40\n33C0\nCA60\nENDCHAR\nSTARTCHAR U_74FF\nENCODING 29951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF900\n8900\n51C0\nFA40\n0340\n7AC0\n4A40\n4A40\n7B40\n4E60\nENDCHAR\nSTARTCHAR U_7500\nENCODING 29952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n1100\nFF00\n55C0\nFF40\n5540\n55C0\nFD40\n1240\n1B60\nE260\nENDCHAR\nSTARTCHAR U_7501\nENCODING 29953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n57E0\nF900\n5100\n53C0\nDE40\n5340\n52C0\n5480\n56A0\n9460\nENDCHAR\nSTARTCHAR U_7502\nENCODING 29954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n1100\nFD00\n83C0\nFE40\n8340\nFEC0\nAA40\nFE40\nAA40\n8760\nENDCHAR\nSTARTCHAR U_7503\nENCODING 29955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD20\n2540\nF980\n7240\nAC20\nFFE0\n1000\n3F00\n2920\n2520\n71E0\nENDCHAR\nSTARTCHAR U_7504\nENCODING 29956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2880\nFE80\nAAE0\nAAA0\nFF20\n11A0\n7D60\n1120\n1DA0\nE120\nENDCHAR\nSTARTCHAR U_7505\nENCODING 29957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n4400\n77C0\n9540\n97C0\nD500\nB7C0\n9500\n9BC0\nD020\n8FE0\nENDCHAR\nSTARTCHAR U_7506\nENCODING 29958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5280\n2940\nFBE0\n0000\nFFE0\n2000\n3F00\n4920\n74E0\nENDCHAR\nSTARTCHAR U_7507\nENCODING 29959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAAA0\nB2C0\nA480\n5140\n8A20\nFFE0\n9020\n9F00\n2920\n2520\n71E0\nENDCHAR\nSTARTCHAR U_7508\nENCODING 29960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n7900\n4900\n7BC0\n4A40\n7B40\n12C0\nFE40\n3240\n5B40\n9660\nENDCHAR\nSTARTCHAR U_7509\nENCODING 29961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\nFFE0\n5100\nFDC0\n5540\nFF40\n55C0\nFD40\n5940\nD540\n51A0\nENDCHAR\nSTARTCHAR U_750A\nENCODING 29962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7FE0\n5500\nFFC0\n5540\n7D40\n5540\nFEC0\n2A40\n3B60\nC660\nENDCHAR\nSTARTCHAR U_750B\nENCODING 29963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFD00\n4500\n29C0\nFE40\n9340\nFEC0\n9240\nBA40\nAB40\nBA60\nENDCHAR\nSTARTCHAR U_750C\nENCODING 29964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8100\nBD00\nA5C0\nBD40\n8140\nFDC0\n9540\nFD40\n81C0\nFF60\nENDCHAR\nSTARTCHAR U_750D\nENCODING 29965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n3FC0\n2940\nFFE0\n9020\n1F00\n2920\n2520\n71E0\nENDCHAR\nSTARTCHAR U_750E\nENCODING 29966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nFFE0\n5500\n7DC0\n5540\n7D40\n15C0\nFF40\n4940\n69C0\n1160\nENDCHAR\nSTARTCHAR U_750F\nENCODING 29967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEC0\n1100\n7C60\n4580\n7C60\n2980\nFFE0\n2000\n3F80\n24A0\n72E0\nENDCHAR\nSTARTCHAR U_7510\nENCODING 29968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n93E0\n5480\nFE80\n55C0\n9340\n2540\n7FC0\n9540\n7F40\n45C0\n8560\nENDCHAR\nSTARTCHAR U_7511\nENCODING 29969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2900\nFD00\nABC0\n9240\nFF40\n4AC0\n7A40\n4A40\n7B40\n4A60\nENDCHAR\nSTARTCHAR U_7512\nENCODING 29970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n7E80\nD480\n55E0\nFF20\n55A0\n5560\nFF20\n5520\nABA0\nAB20\nENDCHAR\nSTARTCHAR U_7513\nENCODING 29971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n7940\n4080\nBFE0\n2480\nFFE0\n1000\n3F00\n2920\n35E0\nENDCHAR\nSTARTCHAR U_7514\nENCODING 29972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3DE0\n4480\nFE80\n6BE0\n7F20\n41A0\n5D60\n4120\n7D20\nA5A0\nBD20\nENDCHAR\nSTARTCHAR U_7515\nENCODING 29973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5480\n2FE0\n7480\n17E0\n2480\nFFE0\n2000\n3F20\n4920\nE5E0\nENDCHAR\nSTARTCHAR U_7516\nENCODING 29974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4A40\n7BC0\n2A80\nFFE0\n2000\n3F80\n4920\nE5E0\nENDCHAR\nSTARTCHAR U_7517\nENCODING 29975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BE0\n2100\nFD00\nA3C0\nFE40\nAB40\nAAC0\nFE40\nD640\nFF40\nA660\nENDCHAR\nSTARTCHAR U_7518\nENCODING 29976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1080\n7FE0\n1080\n1080\n1080\n1F80\n1080\n1080\n1F80\n1080\nENDCHAR\nSTARTCHAR U_7519\nENCODING 29977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n0120\nFFE0\n0100\n4500\nFF00\n4500\n7CA0\n44A0\n7C60\n4420\nENDCHAR\nSTARTCHAR U_751A\nENCODING 29978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1F00\n1100\n1F00\n1100\nFFE0\n2900\n3080\n3FC0\nENDCHAR\nSTARTCHAR U_751B\nENCODING 29979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n48C0\n4F00\n4900\nF900\n4FE0\n4900\n7BC0\n4A40\n4A40\n7BC0\n4A40\nENDCHAR\nSTARTCHAR U_751C\nENCODING 29980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1A40\nE240\n2240\n27E0\nFA40\n2240\nFBC0\n8A40\n8A40\nFBC0\n8A40\nENDCHAR\nSTARTCHAR U_751D\nENCODING 29981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3A40\n2240\nFFE0\nA240\nF240\nABC0\nBA40\n83C0\nBA40\nA820\nCFE0\nENDCHAR\nSTARTCHAR U_751E\nENCODING 29982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\n7FE0\n9120\n1F00\n1100\nFFE0\n1100\n1F00\n1100\n1F00\nENDCHAR\nSTARTCHAR U_751F\nENCODING 29983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n2200\n2200\n3FE0\n4200\n8200\n1FC0\n0200\n0200\n0200\n7FE0\nENDCHAR\nSTARTCHAR U_7520\nENCODING 29984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE100\nA900\nAFE0\nB100\nE100\nA7C0\nA100\nA100\nE100\n1FE0\nENDCHAR\nSTARTCHAR U_7521\nENCODING 29985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n5280\n5280\n7FE0\n9480\n1080\n7BE0\n1080\n1C80\nF080\n47E0\nENDCHAR\nSTARTCHAR U_7522\nENCODING 29986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1080\n0900\n7FE0\n5200\n5FC0\n6200\n5FC0\n4200\nBFE0\nENDCHAR\nSTARTCHAR U_7523\nENCODING 29987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n1080\n0900\n7FC0\n4A00\n5FC0\n6200\n4FC0\n4200\n9FE0\nENDCHAR\nSTARTCHAR U_7524\nENCODING 29988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n7A80\n2280\n6BE0\nAC80\n53E0\nB880\n57E0\n9200\n51E0\n2040\nENDCHAR\nSTARTCHAR U_7525\nENCODING 29989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\n54A0\n7FE0\n94A0\n97E0\n7900\n17E0\n1120\n1A20\nE420\n08C0\nENDCHAR\nSTARTCHAR U_7526\nENCODING 29990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n2280\nFA80\nABE0\nFC80\nABE0\nF880\nA080\n67E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_7527\nENCODING 29991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n7BC0\n9500\n7BC0\n1100\nFFE0\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_7528\nENCODING 29992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n4440\n7FC0\n4440\n4440\n7FC0\n4440\n4440\n8440\n84C0\nENDCHAR\nSTARTCHAR U_7529\nENCODING 29993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2440\n2440\n3FC0\n2440\n3FC0\n2440\n2440\n25C0\n4420\n83E0\nENDCHAR\nSTARTCHAR U_752A\nENCODING 29994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C00\n0800\n3FE0\n2220\n3FE0\n2220\n3FE0\n2220\n2220\n4220\n80E0\nENDCHAR\nSTARTCHAR U_752B\nENCODING 29995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n0480\nFFE0\n0400\n7FC0\n4440\n7FC0\n4440\n7FC0\n4440\n44C0\nENDCHAR\nSTARTCHAR U_752C\nENCODING 29996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0880\n0500\n3FC0\n2440\n3FC0\n2440\n3FC0\n2440\n2540\n2080\nENDCHAR\nSTARTCHAR U_752D\nENCODING 29997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0400\n1AC0\n6220\n3FC0\n2240\n3FC0\n2240\n3FC0\n2240\n42C0\nENDCHAR\nSTARTCHAR U_752E\nENCODING 29998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3FC0\n4A40\n1480\n3FC0\n2440\n3FC0\n2440\n3FC0\n2440\n24C0\nENDCHAR\nSTARTCHAR U_752F\nENCODING 29999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n94A0\n5140\n9F20\n3F80\n2480\n3F80\n2480\n3F80\n2480\nENDCHAR\nSTARTCHAR U_7530\nENCODING 30000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n4440\n4440\n4440\n7FC0\n4440\n4440\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_7531\nENCODING 30001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n4440\n4440\n7FC0\n4440\n4440\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_7532\nENCODING 30002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n4440\n7FC0\n4440\n4440\n7FC0\n4440\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_7533\nENCODING 30003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n4440\n7FC0\n4440\n4440\n7FC0\n4440\n0400\n0400\nENDCHAR\nSTARTCHAR U_7534\nENCODING 30004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n0400\n7FC0\n4440\n4440\n7FC0\n4040\n4040\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_7535\nENCODING 30005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n4440\n7FC0\n4440\n4440\n7FC0\n0420\n0420\n03E0\nENDCHAR\nSTARTCHAR U_7536\nENCODING 30006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1000\n7F80\n4880\n4880\n4880\n7F80\n4880\n4880\n7F80\n4080\nENDCHAR\nSTARTCHAR U_7537\nENCODING 30007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2440\n3FC0\n2440\n3FC0\n0400\n7FE0\n0420\n0820\n1120\n60C0\nENDCHAR\nSTARTCHAR U_7538\nENCODING 30008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FE0\n2020\n7FA0\nA4A0\n3FA0\n24A0\n3FA0\n20A0\n0020\n01C0\nENDCHAR\nSTARTCHAR U_7539\nENCODING 30009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FC0\n2240\n3FC0\n2240\n7FE0\n1000\n3FC0\n0040\n0440\n0380\nENDCHAR\nSTARTCHAR U_753A\nENCODING 30010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF880\nA880\nA880\nF880\nA880\nA880\nA880\nF880\n0080\n0380\nENDCHAR\nSTARTCHAR U_753B\nENCODING 30011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0000\n3F80\nA4A0\nA4A0\nBFA0\nA4A0\nA4A0\nBFA0\n8020\nFFE0\nENDCHAR\nSTARTCHAR U_753C\nENCODING 30012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n7FC0\n4440\n7FC0\n0000\nFFE0\n0400\n0400\n1400\n0800\nENDCHAR\nSTARTCHAR U_753D\nENCODING 30013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0220\nFAA0\nAAA0\nAAA0\nFAA0\nAAA0\nAAA0\nFAA0\n8AA0\n04A0\n0820\nENDCHAR\nSTARTCHAR U_753E\nENCODING 30014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\n1240\n2480\n1240\n0920\n3FE0\n2220\n3FE0\n2220\n3FE0\n2020\nENDCHAR\nSTARTCHAR U_753F\nENCODING 30015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF880\nAFE0\nAA00\nFA00\nAA00\nAA00\nFA00\n8A00\n03E0\n0200\nENDCHAR\nSTARTCHAR U_7540\nENCODING 30016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2440\n3FC0\n2440\n3FC0\n0000\n7FE0\n1100\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_7541\nENCODING 30017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4440\n7FC0\n4440\n7FC0\n0000\nFFE0\n1100\n1100\n6100\nENDCHAR\nSTARTCHAR U_7542\nENCODING 30018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\nA9C0\nAA40\nFC40\nA840\nA880\nF980\n0240\n0420\n1820\nENDCHAR\nSTARTCHAR U_7543\nENCODING 30019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\nAA20\nFC20\nA9A0\nF8A0\n2020\n2020\n20A0\n2040\nENDCHAR\nSTARTCHAR U_7544\nENCODING 30020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\n8C60\n6480\n2100\n7FC0\n4440\n4440\n7FC0\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_7545\nENCODING 30021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nF880\nA900\nAA00\nFFE0\nAAA0\nAAA0\nFCA0\nA920\n2220\n24C0\nENDCHAR\nSTARTCHAR U_7546\nENCODING 30022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n1080\nFE80\n0080\nF880\nA900\nF900\nAA40\nAA40\nFFE0\n8820\nENDCHAR\nSTARTCHAR U_7547\nENCODING 30023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFBE0\nAA20\nAD20\nF8A0\nA820\nA8A0\nAB20\nF820\n8820\n00C0\nENDCHAR\nSTARTCHAR U_7548\nENCODING 30024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0060\nFB80\nAA00\nAA00\nFBE0\nAAA0\nAAA0\nFAA0\n8A40\n04A0\n0920\nENDCHAR\nSTARTCHAR U_7549\nENCODING 30025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\nAFC0\nA900\nF900\nAFE0\nA900\nFA80\n0480\n0840\n1020\nENDCHAR\nSTARTCHAR U_754A\nENCODING 30026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nFA40\nAFE0\nAA40\nFA40\nAFE0\nAA40\nFA40\n0240\n0440\n0840\nENDCHAR\nSTARTCHAR U_754B\nENCODING 30027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\nA9E0\nAB40\nFD40\nA940\nA940\nF940\n8880\n0340\n0C20\nENDCHAR\nSTARTCHAR U_754C\nENCODING 30028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n7FC0\n4440\n7FC0\n0A00\n3180\nD160\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_754D\nENCODING 30029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\nAA80\nAC60\nFA80\nAA80\nAA80\nFA80\n0280\n0480\n0880\nENDCHAR\nSTARTCHAR U_754E\nENCODING 30030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\nF920\nA900\nAFE0\nF900\nA900\nA900\nF900\n8A80\n0440\n0820\nENDCHAR\nSTARTCHAR U_754F\nENCODING 30031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n2480\n3F80\n0000\nFFE0\n2440\n2280\n2900\n30E0\nENDCHAR\nSTARTCHAR U_7550\nENCODING 30032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0000\n3F80\n2080\n3F80\n0000\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_7551\nENCODING 30033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n24A0\n6CA0\n74A0\nA7E0\n24A0\n34A0\n4CA0\n47E0\n8000\nENDCHAR\nSTARTCHAR U_7552\nENCODING 30034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFD00\n0100\nF900\nAA80\nFA80\nAA80\nFA40\n0460\n0840\nENDCHAR\nSTARTCHAR U_7553\nENCODING 30035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n7500\n1600\n2580\nD460\n0800\n3F80\n2480\n3F80\n2480\n3F80\nENDCHAR\nSTARTCHAR U_7554\nENCODING 30036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFCA0\nAAC0\nA880\nFBE0\nA880\nAFE0\nF880\n8880\n0080\n0080\nENDCHAR\nSTARTCHAR U_7555\nENCODING 30037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n2480\n3F80\n0000\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_7556\nENCODING 30038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9C0\nAE80\nAA80\nFA80\nAA80\nAA80\nFA40\n0B40\n0AC0\n1360\n2040\nENDCHAR\nSTARTCHAR U_7557\nENCODING 30039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n0000\n3F80\n2080\n7FC0\n4440\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_7558\nENCODING 30040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\nAFC0\nAD40\nFFC0\nAD40\nAFE0\nFC40\n0440\n0540\n0480\nENDCHAR\nSTARTCHAR U_7559\nENCODING 30041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\n63E0\n4920\n5920\n6AA0\n4440\n3FC0\n2440\n3FC0\n2440\n3FC0\nENDCHAR\nSTARTCHAR U_755A\nENCODING 30042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1100\n3F80\n0800\nFFE0\n2100\nFFE0\n2480\n3F80\n2480\n3F80\nENDCHAR\nSTARTCHAR U_755B\nENCODING 30043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF980\nAA40\nACA0\nF900\nAE40\nA980\nFE20\n8840\n0180\n0600\nENDCHAR\nSTARTCHAR U_755C\nENCODING 30044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0880\n3F00\n0440\n7FE0\n2240\n3FC0\n2240\n3FC0\n2040\nENDCHAR\nSTARTCHAR U_755D\nENCODING 30045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nFFC0\n0240\nFC40\nA880\nA880\nF940\nAA40\nFC20\n8820\nENDCHAR\nSTARTCHAR U_755E\nENCODING 30046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0500\nFDC0\nAD40\nFE40\nAC80\nAD40\nFE20\n0420\n0400\nENDCHAR\nSTARTCHAR U_755F\nENCODING 30047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2440\n3FC0\n2440\n3FC0\n1080\n6860\n1F80\n2900\n0600\n79E0\nENDCHAR\nSTARTCHAR U_7560\nENCODING 30048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3F80\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_7561\nENCODING 30049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\nA900\nAA40\nFFC0\nA880\nA920\nFA40\n0080\n0360\n0C20\nENDCHAR\nSTARTCHAR U_7562\nENCODING 30050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n7FC0\n4440\n7FC0\n2480\nFFE0\n2480\n7FC0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7563\nENCODING 30051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n1100\n2E80\nC060\n1F00\n1100\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_7564\nENCODING 30052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFBE0\nA880\nAFE0\nF840\nA840\nAFE0\nFA40\n8940\n0040\n01C0\nENDCHAR\nSTARTCHAR U_7565\nENCODING 30053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFBC0\nAE40\nA980\nFA40\nAC20\nABC0\nAA40\nFA40\n8BC0\n0240\nENDCHAR\nSTARTCHAR U_7566\nENCODING 30054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\nAFC0\nA900\nFFE0\nA900\nA900\nFFC0\n8900\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_7567\nENCODING 30055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n7FC0\n4440\n7FC0\n1F80\n6900\n0600\n7FE0\n1080\n1F80\nENDCHAR\nSTARTCHAR U_7568\nENCODING 30056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2500\n1600\nFFE0\n1500\n64E0\n3F80\n2480\n3F80\n2480\n3F80\nENDCHAR\nSTARTCHAR U_7569\nENCODING 30057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF900\nAFE0\nA900\nF920\nAAC0\nAE80\nFA80\n0240\n0320\n0200\nENDCHAR\nSTARTCHAR U_756A\nENCODING 30058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n2480\n1500\nFFE0\n2480\n4440\nBFE0\n2440\n3FC0\n2440\n3FC0\nENDCHAR\nSTARTCHAR U_756B\nENCODING 30059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0480\nFFE0\n0480\n7F80\n0400\nFFE0\n2480\n3F80\n2480\nFFE0\nENDCHAR\nSTARTCHAR U_756C\nENCODING 30060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n1100\nEEE0\n0400\nFFE0\n2480\nFFE0\n2440\n3FC0\n2440\n3FC0\nENDCHAR\nSTARTCHAR U_756D\nENCODING 30061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFA80\nAC40\nABA0\nF900\nAFE0\nA900\nFD40\n0920\n1520\n0200\nENDCHAR\nSTARTCHAR U_756E\nENCODING 30062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBE0\nAC00\nABE0\nFAA0\nAFE0\nAB20\nFAA0\n03E0\n0140\n0080\nENDCHAR\nSTARTCHAR U_756F\nENCODING 30063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFA40\nAFE0\nAA40\nFD20\nABE0\nAA20\nFE40\n8980\n0240\n0420\nENDCHAR\nSTARTCHAR U_7570\nENCODING 30064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n7FC0\n4440\n7FC0\n1100\nFFC0\n1100\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7571\nENCODING 30065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7BC0\n4A40\n7BC0\n0A00\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_7572\nENCODING 30066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n1100\nEEE0\n0000\nFFE0\n2480\n7FE0\nA440\n3FC0\n2440\n3FC0\nENDCHAR\nSTARTCHAR U_7573\nENCODING 30067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n2480\nFFE0\n8020\n9F40\n1500\n1B00\n1500\n7FE0\nENDCHAR\nSTARTCHAR U_7574\nENCODING 30068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\nA900\nAFC0\nF900\nAFE0\nAA40\nFFE0\n8A40\n1140\n0080\nENDCHAR\nSTARTCHAR U_7575\nENCODING 30069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0480\nFFE0\n0480\n3F80\n0400\nFFE0\n1500\n5F40\n5540\n7FC0\nENDCHAR\nSTARTCHAR U_7576\nENCODING 30070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\nFFE0\n8020\n9F20\n1100\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_7577\nENCODING 30071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFAA0\nAA40\nACA0\nF900\nAFE0\nA920\nFDA0\n8A40\n0540\n08A0\nENDCHAR\nSTARTCHAR U_7578\nENCODING 30072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\nAA80\nAC40\nFFE0\nA820\nABA0\nFAA0\n8BA0\n0020\n00E0\nENDCHAR\nSTARTCHAR U_7579\nENCODING 30073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\nAE20\nAA00\nFBE0\nACA0\nAAA0\nF9E0\n8A80\n04A0\n18E0\nENDCHAR\nSTARTCHAR U_757A\nENCODING 30074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n2480\n3F80\n2480\nFFE0\n0000\n3F80\n2480\n3F80\n2480\nFFE0\nENDCHAR\nSTARTCHAR U_757B\nENCODING 30075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0520\nFB40\nAFE0\nA900\nAFE0\nFA80\nAD40\nA920\nFFC0\n0100\n0FE0\nENDCHAR\nSTARTCHAR U_757C\nENCODING 30076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nFA40\nABC0\nAA40\nAFE0\nF900\nABE0\nAAA0\nFD60\n02A0\n0160\nENDCHAR\nSTARTCHAR U_757D\nENCODING 30077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nF880\nAFE0\nAAA0\nFBE0\nAAA0\nABE0\nF880\n8BE0\n0080\n07E0\nENDCHAR\nSTARTCHAR U_757E\nENCODING 30078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n2480\n3F80\n0000\nFBE0\nAAA0\nFBE0\nAAA0\nFBE0\nENDCHAR\nSTARTCHAR U_757F\nENCODING 30079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAA80\nEB80\n5940\nAA80\nFFE0\n0400\nFA80\nAB00\nF920\nAAA0\nFC60\nENDCHAR\nSTARTCHAR U_7580\nENCODING 30080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\n5480\nABE0\n54A0\n57E0\nF8A0\nABE0\nF880\nAAE0\nFA80\n8DE0\nENDCHAR\nSTARTCHAR U_7581\nENCODING 30081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFDA0\nAB60\nADA0\nF900\nAA80\nAD60\nAA80\nF940\n0080\n0700\nENDCHAR\nSTARTCHAR U_7582\nENCODING 30082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n2480\n3F80\n1100\n7FC0\n5540\n1B00\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_7583\nENCODING 30083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFFE0\nA940\nA880\nFFE0\nAAA0\nABE0\nFAA0\n8FE0\n0080\n0FE0\nENDCHAR\nSTARTCHAR U_7584\nENCODING 30084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0520\nFB40\nAFE0\nAB40\nFD20\nAA40\nAFE0\nF940\n8FE0\n0240\n0C40\nENDCHAR\nSTARTCHAR U_7585\nENCODING 30085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\n02A0\nFBE0\nAAA0\nABE0\nF800\nAFE0\nAAA0\nFBE0\n02A0\n07E0\nENDCHAR\nSTARTCHAR U_7586\nENCODING 30086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1540\nF7C0\n8540\nF7C0\n5000\nFFE0\n5540\nF7C0\n9540\n6FE0\nENDCHAR\nSTARTCHAR U_7587\nENCODING 30087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFC0\nA900\nAFE0\nF920\nAFE0\nA840\nFFE0\n8B40\n0E40\n00C0\nENDCHAR\nSTARTCHAR U_7588\nENCODING 30088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n0200\n72E0\n5AA0\n76E0\n0200\nFBE0\nAAA0\nFBE0\nAAA0\nFDE0\nENDCHAR\nSTARTCHAR U_7589\nENCODING 30089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n2480\nFFE0\nAAA0\nFFE0\n0800\n1F00\n0200\nFFE0\nENDCHAR\nSTARTCHAR U_758A\nENCODING 30090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n7FC0\n5540\n7FC0\n5540\nFFE0\nA0A0\n3F80\n2080\nFFE0\nENDCHAR\nSTARTCHAR U_758B\nENCODING 30091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0220\n0240\n0200\n1200\n13E0\n1200\n1200\n2A00\n4600\n83E0\nENDCHAR\nSTARTCHAR U_758C\nENCODING 30092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n3F80\n0480\nFFE0\n0480\n3F80\n27C0\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_758D\nENCODING 30093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0440\n2780\n3400\n4FE0\n8000\n3F80\n2080\n3F80\n2080\nFFE0\nENDCHAR\nSTARTCHAR U_758E\nENCODING 30094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n1100\n27C0\nA540\nB7C0\nA300\nB380\nC540\n0920\n0100\nENDCHAR\nSTARTCHAR U_758F\nENCODING 30095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n1100\n2240\nA7A0\nB820\nA540\nA540\nB540\nE940\n1160\nENDCHAR\nSTARTCHAR U_7590\nENCODING 30096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n3F80\n2480\nFFE0\n0420\n2780\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_7591\nENCODING 30097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\n6140\n4880\n7FE0\n40A0\n7A80\nA2E0\nFA80\n2280\n5580\n88E0\nENDCHAR\nSTARTCHAR U_7592\nENCODING 30098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n1FE0\n9000\n5000\n3000\n5000\n9000\n1000\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_7593\nENCODING 30099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FC0\n2480\n65C0\nA440\n2440\n2840\n4940\n9080\nENDCHAR\nSTARTCHAR U_7594\nENCODING 30100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n1FE0\n9000\n5FE0\n1100\n3100\nD100\n1100\n2900\n4500\n8200\nENDCHAR\nSTARTCHAR U_7595\nENCODING 30101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n1FE0\n9000\n5400\n1440\n3480\nD700\n1400\n2420\n4420\n83E0\nENDCHAR\nSTARTCHAR U_7596\nENCODING 30102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2220\n2220\n6220\nA2E0\n2240\n4200\n8200\nENDCHAR\nSTARTCHAR U_7597\nENCODING 30103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2040\n6180\nA100\n2100\n2100\n4100\n8700\nENDCHAR\nSTARTCHAR U_7598\nENCODING 30104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n1FE0\n9000\n5000\n17C0\n3100\n5100\n9100\n2100\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_7599\nENCODING 30105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA400\n67E0\n2800\n6780\nA100\n2200\n2420\n4820\n87E0\nENDCHAR\nSTARTCHAR U_759A\nENCODING 30106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA400\n6400\n2780\n6880\nB080\n2100\n2280\n4440\n9820\nENDCHAR\nSTARTCHAR U_759B\nENCODING 30107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6080\n2FE0\n6080\nAC80\n2280\n2080\n4280\n8100\nENDCHAR\nSTARTCHAR U_759C\nENCODING 30108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2000\nAFE0\n6200\n2280\n6240\nA240\n2200\n4200\n8200\nENDCHAR\nSTARTCHAR U_759D\nENCODING 30109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6100\n2920\n6920\nA920\n2920\n2920\n4FE0\n8820\nENDCHAR\nSTARTCHAR U_759E\nENCODING 30110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FC0\n2000\n7FE0\nA400\n27C0\n4040\n4280\n8100\nENDCHAR\nSTARTCHAR U_759F\nENCODING 30111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n67C0\n2400\n6400\nBFE0\n2400\n2400\n47E0\n8400\nENDCHAR\nSTARTCHAR U_75A0\nENCODING 30112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n1FE0\n9000\n5FE0\n1200\n33C0\nD240\n1240\n2440\n4940\n9080\nENDCHAR\nSTARTCHAR U_75A1\nENCODING 30113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6F80\n2200\n6FE0\nA2A0\n24A0\n3920\n4220\n8CC0\nENDCHAR\nSTARTCHAR U_75A2\nENCODING 30114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6100\n2540\n6540\nA980\n2100\n2280\n4440\n8820\nENDCHAR\nSTARTCHAR U_75A3\nENCODING 30115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA280\n6240\n3FE0\n6200\nA200\n2500\n2520\n4920\n90E0\nENDCHAR\nSTARTCHAR U_75A4\nENCODING 30116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FC0\n2940\n6940\nAFC0\n2800\n2820\n4820\n8FE0\nENDCHAR\nSTARTCHAR U_75A5\nENCODING 30117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6280\n2440\n7820\nA480\n2480\n2480\n4880\n9080\nENDCHAR\nSTARTCHAR U_75A6\nENCODING 30118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FE0\nA200\n6FC0\n2240\n6240\nBFE0\n2500\n4880\n5060\nA040\nENDCHAR\nSTARTCHAR U_75A7\nENCODING 30119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA0C0\n6F00\n2900\n2FE0\n6900\nA900\n28A0\n4E60\n9820\nENDCHAR\nSTARTCHAR U_75A8\nENCODING 30120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FC0\n2500\n6900\nBFE0\n2500\n4900\n5500\n8200\nENDCHAR\nSTARTCHAR U_75A9\nENCODING 30121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FE0\nA200\n6F80\n24A0\n68E0\nA200\n3FE0\n4200\n4200\n8200\nENDCHAR\nSTARTCHAR U_75AA\nENCODING 30122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6920\n2940\n6D80\nA900\n2900\n2B20\n4D20\n88E0\nENDCHAR\nSTARTCHAR U_75AB\nENCODING 30123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6780\n2480\n68E0\nA000\n2FC0\n2480\n4300\n9CE0\nENDCHAR\nSTARTCHAR U_75AC\nENCODING 30124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2900\n6FE0\nA920\n2920\n2920\n4A20\n94C0\nENDCHAR\nSTARTCHAR U_75AD\nENCODING 30125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA480\n6480\n2480\n6480\nAB40\n2940\n4A40\n5220\nA420\nENDCHAR\nSTARTCHAR U_75AE\nENCODING 30126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6280\n2440\n6FA0\nB480\n2480\n2520\n4420\n83E0\nENDCHAR\nSTARTCHAR U_75AF\nENCODING 30127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FC0\n2840\n6D40\nAA40\n2940\n2AE0\n4C20\n9020\nENDCHAR\nSTARTCHAR U_75B0\nENCODING 30128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n6100\n2FE0\n6100\nA100\n27C0\n2100\n4100\n9FE0\nENDCHAR\nSTARTCHAR U_75B1\nENCODING 30129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA400\n67C0\n2840\n7740\nA540\n2740\n25A0\n4420\n83E0\nENDCHAR\nSTARTCHAR U_75B2\nENCODING 30130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2940\n6900\nAFC0\n2A40\n2980\n4A40\n9420\nENDCHAR\nSTARTCHAR U_75B3\nENCODING 30131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA440\n6440\n3FE0\n6440\nA7C0\n2440\n2440\n47C0\n8440\nENDCHAR\nSTARTCHAR U_75B4\nENCODING 30132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2040\n6F40\nA940\n2F40\n2940\n4040\n81C0\nENDCHAR\nSTARTCHAR U_75B5\nENCODING 30133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6280\n2AA0\n6BC0\nAA80\n2A80\n2AA0\n4BA0\n9CE0\nENDCHAR\nSTARTCHAR U_75B6\nENCODING 30134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAA80\n6A80\n3FE0\n6A80\nAA80\n2B80\n2A80\n4800\n8FE0\nENDCHAR\nSTARTCHAR U_75B7\nENCODING 30135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n60C0\n2F00\n6900\nAFE0\n2900\n4900\n4AA0\n8D60\nENDCHAR\nSTARTCHAR U_75B8\nENCODING 30136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FC0\n2840\n6FC0\nA840\n2FC0\n2840\n4000\n9FE0\nENDCHAR\nSTARTCHAR U_75B9\nENCODING 30137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nBFE0\n6300\n2480\n2960\n7200\nAC80\n2320\n2C40\n4080\n8F00\nENDCHAR\nSTARTCHAR U_75BA\nENCODING 30138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n61C0\n3E00\n6200\nBFC0\n2100\n2200\n4C00\n93E0\nENDCHAR\nSTARTCHAR U_75BB\nENCODING 30139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FC0\n2840\n6840\nAFC0\n2840\n2480\n4840\n9020\nENDCHAR\nSTARTCHAR U_75BC\nENCODING 30140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA400\n67C0\n2A80\n7100\nA680\n3960\n2080\n4200\n8180\nENDCHAR\nSTARTCHAR U_75BD\nENCODING 30141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n67C0\n2440\n67C0\nA440\n27C0\n2440\n4440\n9FE0\nENDCHAR\nSTARTCHAR U_75BE\nENCODING 30142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA400\n67E0\n2900\n6100\nBFE0\n2100\n2280\n4440\n9820\nENDCHAR\nSTARTCHAR U_75BF\nENCODING 30143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA500\n7FC0\n2540\n7FC0\nB500\n3FE0\n2520\n49C0\n9100\nENDCHAR\nSTARTCHAR U_75C0\nENCODING 30144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA400\n67E0\n2820\n77A0\nA4A0\n27A0\n24A0\n4020\n80C0\nENDCHAR\nSTARTCHAR U_75C1\nENCODING 30145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6200\n23E0\n6200\nAFC0\n2840\n2840\n4FC0\n8840\nENDCHAR\nSTARTCHAR U_75C2\nENCODING 30146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA800\n68E0\n3EA0\n6AA0\nAAA0\n2AA0\n2AA0\n52E0\nA6A0\nENDCHAR\nSTARTCHAR U_75C3\nENCODING 30147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2200\n6440\nAF80\n2100\n2240\n4FA0\n8420\nENDCHAR\nSTARTCHAR U_75C4\nENCODING 30148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA400\n67E0\n2A00\n73C0\nA200\n23C0\n2200\n4200\n8200\nENDCHAR\nSTARTCHAR U_75C5\nENCODING 30149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n7FE0\n2100\n6FE0\nA920\n2AA0\n2C60\n4820\n88E0\nENDCHAR\nSTARTCHAR U_75C6\nENCODING 30150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FC0\n2840\n6FC0\nA800\n2A60\n4B80\n5220\nA1E0\nENDCHAR\nSTARTCHAR U_75C7\nENCODING 30151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2100\n6100\nA9C0\n2900\n2900\n4900\n9FE0\nENDCHAR\nSTARTCHAR U_75C8\nENCODING 30152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2920\n6FE0\nA920\n2920\n2FE0\n4920\n9160\nENDCHAR\nSTARTCHAR U_75C9\nENCODING 30153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n7F80\n2100\n6680\nB860\n2FC0\n2100\n4100\n9FE0\nENDCHAR\nSTARTCHAR U_75CA\nENCODING 30154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA300\n6480\n2840\n77E0\nA100\n27C0\n2100\n4100\n9FE0\nENDCHAR\nSTARTCHAR U_75CB\nENCODING 30155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6100\n2FC0\n6940\nAFC0\n2940\n2140\n5FA0\n8820\nENDCHAR\nSTARTCHAR U_75CC\nENCODING 30156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2820\n6BA0\nA820\n2BA0\n2AA0\n4BA0\n8860\nENDCHAR\nSTARTCHAR U_75CD\nENCODING 30157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n7FE0\n2140\n6FC0\nA900\n2FE0\n2160\n4280\n9C60\nENDCHAR\nSTARTCHAR U_75CE\nENCODING 30158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n7FE0\n2480\n6900\nAE40\n2280\n2D80\n4240\n9C20\nENDCHAR\nSTARTCHAR U_75CF\nENCODING 30159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n7FE0\n2400\n67C0\nAC40\n37C0\n2440\n47C0\n8440\nENDCHAR\nSTARTCHAR U_75D0\nENCODING 30160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2820\n6BA0\nAAA0\n2BA0\n2820\n4FE0\n8820\nENDCHAR\nSTARTCHAR U_75D1\nENCODING 30161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n6780\n2D00\n6280\nBDE0\n2240\n2D80\n4100\n9E00\nENDCHAR\nSTARTCHAR U_75D2\nENCODING 30162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA440\n6280\n2FE0\n6100\nA7C0\n2100\n2FE0\n4100\n8100\nENDCHAR\nSTARTCHAR U_75D3\nENCODING 30163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2000\nBFC0\n6200\n2480\n6FC0\nA200\n2FC0\n4200\n9FE0\nENDCHAR\nSTARTCHAR U_75D4\nENCODING 30164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n7FC0\n2200\n7FE0\nA080\n3FE0\n2880\n4480\n8100\nENDCHAR\nSTARTCHAR U_75D5\nENCODING 30165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FC0\n2840\n6FC0\nA840\n2FE0\n2940\n4A80\n8C60\nENDCHAR\nSTARTCHAR U_75D6\nENCODING 30166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2500\n7520\nB520\n2D40\n2500\n4500\n9FE0\nENDCHAR\nSTARTCHAR U_75D7\nENCODING 30167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA800\n6FE0\n3540\n6540\nBFE0\n2940\n2FE0\n4040\n8180\nENDCHAR\nSTARTCHAR U_75D8\nENCODING 30168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2000\n67C0\nA440\n27C0\n2440\n4280\n9FE0\nENDCHAR\nSTARTCHAR U_75D9\nENCODING 30169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2540\n6A80\nA540\n2FE0\n2100\n4100\n9FE0\nENDCHAR\nSTARTCHAR U_75DA\nENCODING 30170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAF40\n6280\n3FE0\n6200\nAFC0\n3080\n3FE0\n4100\n8300\nENDCHAR\nSTARTCHAR U_75DB\nENCODING 30171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2280\n6FE0\nA920\n2FE0\n2920\n4FE0\n8920\nENDCHAR\nSTARTCHAR U_75DC\nENCODING 30172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2000\nAF80\n6200\n3FE0\n6A80\nB260\n2F00\n4920\n90E0\nENDCHAR\nSTARTCHAR U_75DD\nENCODING 30173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA900\n6880\n3FE0\n6D40\nAEA0\n2D40\n2EA0\n5520\nA3E0\nENDCHAR\nSTARTCHAR U_75DE\nENCODING 30174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n7FE0\n2300\n6540\nA920\n3FC0\n2840\n4840\n8FC0\nENDCHAR\nSTARTCHAR U_75DF\nENCODING 30175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA920\n6540\n2FC0\n6840\nAFC0\n2840\n2FC0\n4840\n88C0\nENDCHAR\nSTARTCHAR U_75E0\nENCODING 30176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA440\n7FA0\n2480\n7A40\nA7A0\n2C80\n3480\n4300\n9CE0\nENDCHAR\nSTARTCHAR U_75E1\nENCODING 30177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA140\n7FE0\n2100\n6FE0\nA920\n2FE0\n2920\n6FE0\n8920\nENDCHAR\nSTARTCHAR U_75E2\nENCODING 30178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6E20\n24A0\n7FA0\nA4A0\n2EA0\n35A0\n4420\n84E0\nENDCHAR\nSTARTCHAR U_75E3\nENCODING 30179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2100\n67C0\nA200\n2540\n2C20\n54A0\n8380\nENDCHAR\nSTARTCHAR U_75E4\nENCODING 30180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6A40\n2A40\n76A0\nA200\n3FC0\n2200\n4200\nBFE0\nENDCHAR\nSTARTCHAR U_75E5\nENCODING 30181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA880\n6500\n2FC0\n6840\nAFC0\n2500\n4500\n4920\n90E0\nENDCHAR\nSTARTCHAR U_75E6\nENCODING 30182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2200\n6FC0\nA440\n3FE0\n2840\n4FC0\n8840\nENDCHAR\nSTARTCHAR U_75E7\nENCODING 30183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA880\n74C0\n29A0\n6680\nA8A0\n3840\n2880\n4900\n8600\nENDCHAR\nSTARTCHAR U_75E8\nENCODING 30184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n3FE0\nA280\n6FE0\n2280\n6FE0\nA920\n27C0\n2240\n4440\n9980\nENDCHAR\nSTARTCHAR U_75E9\nENCODING 30185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FE0\n2200\nAFC0\n6A40\n2FC0\n6A40\nAFC0\n2480\n4300\n9CC0\nENDCHAR\nSTARTCHAR U_75EA\nENCODING 30186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA400\n6780\n2500\n6FC0\nB540\n2540\n3FE0\n4280\n8C60\nENDCHAR\nSTARTCHAR U_75EB\nENCODING 30187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nBFE0\n6800\n25E0\n2920\n6FE0\nA920\n2BA0\n4D60\n4920\n8960\nENDCHAR\nSTARTCHAR U_75EC\nENCODING 30188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA880\n6F80\n2880\n6F80\nA400\n2FC0\n5540\n4B40\n8480\nENDCHAR\nSTARTCHAR U_75ED\nENCODING 30189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6EE0\n2AA0\n6EE0\nAAA0\n2EE0\n2AA0\n52A0\nA760\nENDCHAR\nSTARTCHAR U_75EE\nENCODING 30190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n67C0\n2400\n6780\nA400\n3FE0\n2940\n4880\n8C60\nENDCHAR\nSTARTCHAR U_75EF\nENCODING 30191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2820\n67C0\nA440\n27E0\n2420\n47E0\n8420\nENDCHAR\nSTARTCHAR U_75F0\nENCODING 30192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA520\n69C0\n2280\n6D60\nA540\n2980\n2280\n4440\n9820\nENDCHAR\nSTARTCHAR U_75F1\nENCODING 30193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA480\n6480\n3CE0\n6480\nBCE0\n2480\n3CE0\n4480\n8480\nENDCHAR\nSTARTCHAR U_75F2\nENCODING 30194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA880\n7FE0\n2880\n6AA0\nAAA0\n2AA0\n2AA0\n4880\n8880\nENDCHAR\nSTARTCHAR U_75F3\nENCODING 30195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA880\n7FE0\n2880\n6CC0\nBAA0\n29A0\n2AA0\n4880\n8880\nENDCHAR\nSTARTCHAR U_75F4\nENCODING 30196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA800\n6EE0\n34A0\n64A0\nBFA0\n24A0\n2AA0\n52E0\nA000\nENDCHAR\nSTARTCHAR U_75F5\nENCODING 30197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA380\n6100\n3FE0\n6940\nB7A0\n2100\n3FE0\n4100\n8700\nENDCHAR\nSTARTCHAR U_75F6\nENCODING 30198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA280\n6FE0\n2AA0\n6FE0\nAAA0\n2AA0\n3FE0\n4480\n9860\nENDCHAR\nSTARTCHAR U_75F7\nENCODING 30199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n7FE0\n2A80\n7FC0\nAAA0\n2F80\n2AA0\n6FA0\n81E0\nENDCHAR\nSTARTCHAR U_75F8\nENCODING 30200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nB400\n7F20\n24A0\n7FA0\nA4A0\n3FA0\n35A0\n5720\n8460\nENDCHAR\nSTARTCHAR U_75F9\nENCODING 30201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FC0\n2940\n6FC0\nA940\n3FE0\n2480\n4880\n9080\nENDCHAR\nSTARTCHAR U_75FA\nENCODING 30202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n6FE0\n2920\n6FE0\nA920\n2FE0\n2500\n7FE0\n8100\nENDCHAR\nSTARTCHAR U_75FB\nENCODING 30203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA040\n6F80\n2880\n6FE0\nB880\n2860\n2FC0\n4840\n8FC0\nENDCHAR\nSTARTCHAR U_75FC\nENCODING 30204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n3FE0\nA000\n6FE0\n2920\n6FE0\nA920\n2AA0\n2BA0\n4820\n8FE0\nENDCHAR\nSTARTCHAR U_75FD\nENCODING 30205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA500\n6FE0\n2900\n7FC0\nA900\n2FC0\n2900\n4FE0\n8800\nENDCHAR\nSTARTCHAR U_75FE\nENCODING 30206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2000\nAFE0\n6A40\n2DC0\n6A40\nAA40\n2BC0\n4C40\n88C0\nENDCHAR\nSTARTCHAR U_75FF\nENCODING 30207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA040\n6F80\n2100\n7FE0\nA940\n3FE0\n2480\n4300\n9CE0\nENDCHAR\nSTARTCHAR U_7600\nENCODING 30208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n3FE0\n2400\nA440\n7EA0\n2920\n6E00\nAA40\n2A20\n2A80\n5240\nENDCHAR\nSTARTCHAR U_7601\nENCODING 30209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2440\n6AA0\nB100\n2100\n3FE0\n4100\n8100\nENDCHAR\nSTARTCHAR U_7602\nENCODING 30210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2000\nBFC0\n6500\n6DC0\nA840\n2DC0\n4500\n4500\nBFE0\nENDCHAR\nSTARTCHAR U_7603\nENCODING 30211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n3FE0\nA000\n7FE0\n2940\n7A80\nA580\n2AC0\n24A0\n48A0\n9300\nENDCHAR\nSTARTCHAR U_7604\nENCODING 30212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA480\n6FC0\n2480\n7FE0\nA000\n2FC0\n4940\n4A40\n8FC0\nENDCHAR\nSTARTCHAR U_7605\nENCODING 30213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA440\n6280\n2FC0\n6940\nAFC0\n2940\n3FE0\n4100\n8100\nENDCHAR\nSTARTCHAR U_7606\nENCODING 30214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4900\n5F80\nC400\n7FC0\nD480\n6A60\n4500\n4200\n9C00\nENDCHAR\nSTARTCHAR U_7607\nENCODING 30215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2000\nAFC0\n6200\n3FE0\n6A40\nAA40\n2FE0\n4200\nBFE0\nENDCHAR\nSTARTCHAR U_7608\nENCODING 30216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA400\n7FE0\n24A0\n7F20\nA440\n3FE0\n2200\n4D80\nB060\nENDCHAR\nSTARTCHAR U_7609\nENCODING 30217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA280\n6440\n2BA0\n7E00\nB2A0\n3EA0\n32A0\n5E20\n92E0\nENDCHAR\nSTARTCHAR U_760A\nENCODING 30218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA5C0\n6840\n2FE0\n7A00\nABC0\n2C80\n2FE0\n4940\n8E20\nENDCHAR\nSTARTCHAR U_760B\nENCODING 30219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FC0\n2A40\n6FC0\nAAC0\n2FC0\n2A60\n53A0\nAEA0\nENDCHAR\nSTARTCHAR U_760C\nENCODING 30220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA800\n7E20\n28A0\n7EA0\nAAA0\n3EA0\n2CA0\n5A20\nA960\nENDCHAR\nSTARTCHAR U_760D\nENCODING 30221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA440\n67C0\n2440\n7FE0\nA400\n2FE0\n32A0\n4520\n8A60\nENDCHAR\nSTARTCHAR U_760E\nENCODING 30222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2480\nAFC0\n6480\n2780\n6480\nBFE0\n2A80\n4C40\n8FE0\nENDCHAR\nSTARTCHAR U_760F\nENCODING 30223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n6FA0\n2240\n7FE0\nA440\n2FC0\n3440\n47C0\n8440\nENDCHAR\nSTARTCHAR U_7610\nENCODING 30224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6DE0\n2920\n6FE0\nA920\n2FE0\n2280\n4440\n9820\nENDCHAR\nSTARTCHAR U_7611\nENCODING 30225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n3FE0\nA000\n67C0\n2440\n6740\nAFE0\n2820\n2BA0\n4AA0\n8BA0\nENDCHAR\nSTARTCHAR U_7612\nENCODING 30226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n7FE0\n3220\n6FC0\nAA40\n2FC0\n2A40\n5FE0\n8200\nENDCHAR\nSTARTCHAR U_7613\nENCODING 30227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA480\n6900\n3FE0\n6AA0\nAC60\n2920\n3FE0\n4480\n9860\nENDCHAR\nSTARTCHAR U_7614\nENCODING 30228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA480\n7FE0\n2680\n7FE0\nA200\n2FC0\n2840\n4FC0\n8840\nENDCHAR\nSTARTCHAR U_7615\nENCODING 30229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n3FE0\nA000\n6EE0\n2A20\n6EE0\nA800\n2EE0\n28A0\n4E40\n88A0\nENDCHAR\nSTARTCHAR U_7616\nENCODING 30230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2280\n7FE0\nA440\n27C0\n2440\n47C0\n8440\nENDCHAR\nSTARTCHAR U_7617\nENCODING 30231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2540\n6FE0\nA280\n2D60\n27C0\n4100\n9FE0\nENDCHAR\nSTARTCHAR U_7618\nENCODING 30232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nB240\n6A80\n3FE0\n6A80\nB240\n3FE0\n2480\n4380\n9C60\nENDCHAR\nSTARTCHAR U_7619\nENCODING 30233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n3FE0\nAA40\n6540\n2B80\n6540\nAFE0\n2940\n2FC0\n4140\n9FA0\nENDCHAR\nSTARTCHAR U_761A\nENCODING 30234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAA80\n6480\n3FE0\n6AA0\nAA80\n3E80\n2880\n5140\nA220\nENDCHAR\nSTARTCHAR U_761B\nENCODING 30235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA800\n7FE0\n28A0\n7EA0\nA920\n2A60\n3540\n54A0\nA3A0\nENDCHAR\nSTARTCHAR U_761C\nENCODING 30236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n6FC0\n2840\n6FC0\nA840\n2FC0\n3540\n54A0\nA3A0\nENDCHAR\nSTARTCHAR U_761D\nENCODING 30237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2AA0\n6FE0\nA540\n2920\n2580\n4940\n9120\nENDCHAR\nSTARTCHAR U_761E\nENCODING 30238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n7FE0\n2A40\n75A0\nAA80\n3240\n3FC0\n4200\n9FE0\nENDCHAR\nSTARTCHAR U_761F\nENCODING 30239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6F80\n2880\n6F80\nA880\n3FC0\n3540\n5540\nBFE0\nENDCHAR\nSTARTCHAR U_7620\nENCODING 30240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nB240\n6AC0\n3520\n6FE0\nB840\n2FC0\n2840\n4FC0\n88C0\nENDCHAR\nSTARTCHAR U_7621\nENCODING 30241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA500\n6A80\n3FE0\n6840\nAFC0\n2840\n2FE0\n5420\nA7E0\nENDCHAR\nSTARTCHAR U_7622\nENCODING 30242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n3FE0\nA400\n6EE0\n2AA0\n6EA0\nAA00\n3FE0\n2AA0\n4E40\n93A0\nENDCHAR\nSTARTCHAR U_7623\nENCODING 30243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n6FC0\n2940\n6FC0\nA940\n2FC0\n25A0\n4940\n91E0\nENDCHAR\nSTARTCHAR U_7624\nENCODING 30244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n6FE0\n2AA0\n6B40\nAFE0\n2920\n2FE0\n4920\n8FE0\nENDCHAR\nSTARTCHAR U_7625\nENCODING 30245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA500\n7FE0\n2200\n6FC0\nA200\n3FE0\n2900\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_7626\nENCODING 30246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA920\n6FE0\n2920\n6FE0\nA100\n2FC0\n2480\n4300\n8CE0\nENDCHAR\nSTARTCHAR U_7627\nENCODING 30247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA3C0\n6200\n2FE0\n6A40\nAFE0\n2A00\n2FE0\n5200\nA3E0\nENDCHAR\nSTARTCHAR U_7628\nENCODING 30248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n7FE0\n2840\n6F40\nABC0\n2840\n3FE0\n4480\n9860\nENDCHAR\nSTARTCHAR U_7629\nENCODING 30249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA480\n7FE0\n2200\n6480\nBB60\n2000\n2FC0\n4840\n8FC0\nENDCHAR\nSTARTCHAR U_762A\nENCODING 30250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA400\n6FC0\n2840\n6FC0\nA840\n2FC0\n3920\n4A40\n8FC0\nENDCHAR\nSTARTCHAR U_762B\nENCODING 30251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA140\n7DE0\n2540\n77E0\nA940\n29E0\n3540\n5540\nA5E0\nENDCHAR\nSTARTCHAR U_762C\nENCODING 30252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4000\nDDC0\n4500\n5DC0\nD100\n5FE0\n4540\n5520\n8980\nENDCHAR\nSTARTCHAR U_762D\nENCODING 30253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA280\n6FE0\n2AA0\n6FE0\nA000\n3FE0\n2580\n4940\n9320\nENDCHAR\nSTARTCHAR U_762E\nENCODING 30254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2480\nAFC0\n6AA0\n7FE0\nAA80\n3540\n22A0\n4100\n8E00\nENDCHAR\nSTARTCHAR U_762F\nENCODING 30255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nBFE0\n6880\n3FE0\n2880\n6FE0\nAA40\n2BE0\n2A40\n4AA0\n9520\nENDCHAR\nSTARTCHAR U_7630\nENCODING 30256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA920\n6FE0\n2920\n6FE0\nA280\n2540\n2FA0\n4540\n9B20\nENDCHAR\nSTARTCHAR U_7631\nENCODING 30257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2200\nBFE0\n6A80\n3540\nE880\n3260\n2500\n54A0\nA380\nENDCHAR\nSTARTCHAR U_7632\nENCODING 30258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA540\n6940\n36A0\n6880\nBA80\n2AE0\n2A80\n4D80\n88E0\nENDCHAR\nSTARTCHAR U_7633\nENCODING 30259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n3FE0\nAAA0\n6660\n3AA0\n6320\nBCE0\n2100\n2E60\n4080\n8F00\nENDCHAR\nSTARTCHAR U_7634\nENCODING 30260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n2280\n6FE0\nA440\n27C0\n2440\n6FE0\n8100\nENDCHAR\nSTARTCHAR U_7635\nENCODING 30261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA500\n6BE0\n36A0\n6A40\nA7E0\n2800\n3FE0\n4940\nB320\nENDCHAR\nSTARTCHAR U_7636\nENCODING 30262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\nFE80\n48E0\n7F20\nEA80\n7E80\n5D40\n6B60\n8A40\nENDCHAR\nSTARTCHAR U_7637\nENCODING 30263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\nFE80\n48E0\n7F20\nEAA0\n7E40\n5C40\nAAA0\n4920\nENDCHAR\nSTARTCHAR U_7638\nENCODING 30264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA800\n7EE0\n2AA0\n72E0\nAFE0\n2AA0\n2D60\n4AA0\n8C60\nENDCHAR\nSTARTCHAR U_7639\nENCODING 30265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4900\nD5E0\n7E20\n4920\nDEA0\n68A0\n5A20\n7EA0\n8040\nENDCHAR\nSTARTCHAR U_763A\nENCODING 30266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA820\n6FE0\n2800\n6FE0\nA900\n2FE0\n2DA0\n5B60\nA960\nENDCHAR\nSTARTCHAR U_763B\nENCODING 30267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2940\nBFE0\n6940\n2FC0\n6940\nBFE0\n2480\n4380\n8C40\nENDCHAR\nSTARTCHAR U_763C\nENCODING 30268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA480\n7FE0\n2FC0\n6840\nAFC0\n2840\n3FE0\n4280\n9C60\nENDCHAR\nSTARTCHAR U_763D\nENCODING 30269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA480\n7FE0\n2480\n6780\nAFC0\n2A40\n5FE0\n4200\n9FE0\nENDCHAR\nSTARTCHAR U_763E\nENCODING 30270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nB9C0\n6A40\n2FE0\n7020\nAFE0\n2820\n3FE0\n6540\nA9E0\nENDCHAR\nSTARTCHAR U_763F\nENCODING 30271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA220\n6AA0\n2AA0\n6540\nB220\n3FE0\n2900\n4700\nB8E0\nENDCHAR\nSTARTCHAR U_7640\nENCODING 30272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA480\n7FC0\n2480\n7FE0\nAA40\n2FC0\n2A40\n6FC0\n9860\nENDCHAR\nSTARTCHAR U_7641\nENCODING 30273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAA00\n6BE0\n3640\n6BC0\nBA40\n2BC0\n2A40\n4980\n8E60\nENDCHAR\nSTARTCHAR U_7642\nENCODING 30274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n7FE0\n34A0\n6FC0\nB8A0\n2F80\n2580\n4940\nB320\nENDCHAR\nSTARTCHAR U_7643\nENCODING 30275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA140\n6F40\n2AC0\n6D20\nAAE0\n2F40\n29E0\n4840\n8BE0\nENDCHAR\nSTARTCHAR U_7644\nENCODING 30276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA500\n6FC0\n3900\n6FC0\nA900\n2FE0\n4800\n9540\n24A0\nENDCHAR\nSTARTCHAR U_7645\nENCODING 30277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5540\nD540\n5DC0\n4500\nDFC0\n5240\n5FC0\n5240\n9FC0\nENDCHAR\nSTARTCHAR U_7646\nENCODING 30278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA440\n6EE0\n3540\n6AA0\nAFE0\n2A20\n2FC0\n4440\n9980\nENDCHAR\nSTARTCHAR U_7647\nENCODING 30279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAAA0\n6EE0\n2BA0\n6EE0\nABA0\n2AA0\n2BA0\n4AA0\n8AE0\nENDCHAR\nSTARTCHAR U_7648\nENCODING 30280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAAA0\n6440\n3DE0\n6540\nAE20\n29E0\n2CA0\n4440\n9DA0\nENDCHAR\nSTARTCHAR U_7649\nENCODING 30281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAAA0\n6FE0\n2540\n67C0\nA540\n27C0\n2100\n5FE0\n8100\nENDCHAR\nSTARTCHAR U_764A\nENCODING 30282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5880\nD540\n5BE0\n5480\nD5C0\n5800\n57E0\n5140\n93E0\nENDCHAR\nSTARTCHAR U_764B\nENCODING 30283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4500\nDDC0\n5040\n5DC0\nC500\n7FE0\n4240\nAAA0\n2780\nENDCHAR\nSTARTCHAR U_764C\nENCODING 30284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA000\n67C0\n2440\n6FE0\nAAA0\n2EE0\n2100\n4920\n8FE0\nENDCHAR\nSTARTCHAR U_764D\nENCODING 30285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4200\nFAE0\n5740\n5540\nFAE0\n5340\n5540\n9540\nB9E0\nENDCHAR\nSTARTCHAR U_764E\nENCODING 30286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5540\nDDC0\n5540\n5FC0\nD540\n5740\n5540\n9740\n90C0\nENDCHAR\nSTARTCHAR U_764F\nENCODING 30287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\nDFC0\n5540\n7FE0\nC880\n4F80\n4D40\n7480\n8660\nENDCHAR\nSTARTCHAR U_7650\nENCODING 30288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA300\n6CC0\n3FE0\n6AA0\nAFE0\n2440\n27C0\n4440\n87C0\nENDCHAR\nSTARTCHAR U_7651\nENCODING 30289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n3FE0\nA280\n6FE0\n2AA0\n6FE0\nA800\n2FE0\n5540\nA480\n4660\nENDCHAR\nSTARTCHAR U_7652\nENCODING 30290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA300\n7CE0\n2EA0\n6AA0\nAEA0\n2A60\n2620\n54C0\nA7A0\nENDCHAR\nSTARTCHAR U_7653\nENCODING 30291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5A80\nEFE0\n50A0\n77A0\nD0A0\n55A0\n5540\n55A0\n9920\nENDCHAR\nSTARTCHAR U_7654\nENCODING 30292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n7FE0\n2480\n7FE0\nA880\n2F80\n2540\n54A0\n93A0\nENDCHAR\nSTARTCHAR U_7655\nENCODING 30293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4200\nFFE0\n5280\n6C80\nD7C0\n6C80\n57C0\n5480\nA7E0\nENDCHAR\nSTARTCHAR U_7656\nENCODING 30294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\n2040\nAFE0\n6AA0\n2E40\n69E0\nAE40\n4AE0\n5A40\nAE40\nENDCHAR\nSTARTCHAR U_7657\nENCODING 30295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA200\n7FE0\n3720\n6A80\nAFC0\n2A40\n2FC0\n4A40\n8FC0\nENDCHAR\nSTARTCHAR U_7658\nENCODING 30296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA480\n6FC0\n2480\n6FC0\nAA40\n3FE0\n3220\n5FA0\n9060\nENDCHAR\nSTARTCHAR U_7659\nENCODING 30297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA840\n6DC0\n2840\n6FC0\nA940\n2DC0\n2940\n4DC0\n8920\nENDCHAR\nSTARTCHAR U_765A\nENCODING 30298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA780\n6900\n3FE0\n6D40\nAFE0\n2800\n2FC0\n5440\nA7C0\nENDCHAR\nSTARTCHAR U_765B\nENCODING 30299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4200\nFFE0\n5540\n5740\nD040\n7FE0\n4A80\n5260\n8200\nENDCHAR\nSTARTCHAR U_765C\nENCODING 30300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n3FE0\nA000\n7EE0\n32A0\n7E00\nABE0\n2AA0\n3F40\n4AA0\n9120\nENDCHAR\nSTARTCHAR U_765D\nENCODING 30301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5540\nD740\n5040\n5FC0\nC000\n7FE0\n4A80\n5240\n8600\nENDCHAR\nSTARTCHAR U_765E\nENCODING 30302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA940\n7FE0\n2A20\n7EA0\nAAA0\n3EA0\n2AA0\n5D40\nAA20\nENDCHAR\nSTARTCHAR U_765F\nENCODING 30303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA840\n6FC0\n2840\n6FC0\nA840\n3FE0\n3540\n5FC0\n9540\nENDCHAR\nSTARTCHAR U_7660\nENCODING 30304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA520\n7AC0\n3AC0\n6AA0\nAA40\n2FC0\n2840\n4FC0\n9040\nENDCHAR\nSTARTCHAR U_7661\nENCODING 30305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n3FE0\nAA00\n6DE0\n28A0\n6FE0\nB540\n3F40\n2560\n4AC0\n9160\nENDCHAR\nSTARTCHAR U_7662\nENCODING 30306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA500\n7FE0\n2200\n7FE0\nA8C0\n3FA0\n28A0\n4FC0\n9C60\nENDCHAR\nSTARTCHAR U_7663\nENCODING 30307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAB40\n7480\n3FE0\n6A80\nBFE0\n2A80\n3FE0\n4080\n9E80\nENDCHAR\nSTARTCHAR U_7664\nENCODING 30308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA880\n7540\n2FE0\n68A0\nAFA0\n28A0\n2FA0\n4AE0\n8D80\nENDCHAR\nSTARTCHAR U_7665\nENCODING 30309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\nDA80\n6FE0\n54A0\n7FA0\nD4A0\n5FA0\n5440\n54A0\n9F20\nENDCHAR\nSTARTCHAR U_7666\nENCODING 30310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FC0\n4000\nDFC0\n5240\n5FC0\nC200\n5FC0\n5540\n4200\nBFE0\nENDCHAR\nSTARTCHAR U_7667\nENCODING 30311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4000\nDFE0\n5440\n5FE0\nD6C0\n5D60\n51C0\nA500\n5FE0\nENDCHAR\nSTARTCHAR U_7668\nENCODING 30312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA100\n6FE0\n39A0\n6540\nAFC0\n3900\n4FC0\n4900\n8FE0\nENDCHAR\nSTARTCHAR U_7669\nENCODING 30313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA140\n7FE0\n2520\n7FE0\nB520\n3FE0\n2D20\n57E0\nA620\nENDCHAR\nSTARTCHAR U_766A\nENCODING 30314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA080\n7FE0\n2880\n7FE0\nAA40\n2FC0\n3A40\n4BC0\n8E60\nENDCHAR\nSTARTCHAR U_766B\nENCODING 30315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4800\nFFE0\n5280\n5BE0\nD6A0\n52A0\n7EA0\n5540\nA220\nENDCHAR\nSTARTCHAR U_766C\nENCODING 30316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA940\n7280\n3FE0\n6A80\nBFE0\n2A80\n3FE0\n5480\nAA80\nENDCHAR\nSTARTCHAR U_766D\nENCODING 30317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAA40\n6FC0\n2A40\n6FC0\nAAA0\n3FE0\n2480\n4300\n9CE0\nENDCHAR\nSTARTCHAR U_766E\nENCODING 30318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5D40\nD7E0\n5500\n5BE0\nD440\n57E0\n5D40\n56A0\n9BC0\nENDCHAR\nSTARTCHAR U_766F\nENCODING 30319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nAEE0\n6AA0\n2EE0\n6500\nAFE0\n3900\n2FC0\n4900\n8FE0\nENDCHAR\nSTARTCHAR U_7670\nENCODING 30320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n6940\nD540\n7DE0\n4540\nFDE0\n5540\n7DE0\nA340\nBFE0\nENDCHAR\nSTARTCHAR U_7671\nENCODING 30321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\nD540\n7F40\n55E0\n7F40\nC9E0\n7F40\n49E0\n7F40\n95E0\nENDCHAR\nSTARTCHAR U_7672\nENCODING 30322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA440\n7FE0\n2AA0\n6EE0\nAAA0\n2EE0\n3FA0\n4A40\n91A0\nENDCHAR\nSTARTCHAR U_7673\nENCODING 30323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4A80\nDFC0\n5540\n5FC0\nCA00\n4480\n4FC0\n4A80\n9240\nENDCHAR\nSTARTCHAR U_7674\nENCODING 30324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n5240\nEFA0\n5240\n6FA0\nC500\n5FC0\n4200\n7FE0\n8200\nENDCHAR\nSTARTCHAR U_7675\nENCODING 30325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FE0\nA940\n77E0\n2940\n7FE0\nB2A0\n2FC0\n2D40\n4AC0\n8D40\nENDCHAR\nSTARTCHAR U_7676\nENCODING 30326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n7B00\n0A40\n4980\n3100\n2080\nC060\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_7677\nENCODING 30327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n7B00\n4940\n3080\n2040\nDF20\n0400\n7FC0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_7678\nENCODING 30328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E80\n0920\n2940\n1080\n2F40\n4420\n8400\n7FE0\n0500\n0880\n7060\nENDCHAR\nSTARTCHAR U_7679\nENCODING 30329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E80\n0920\n2940\n1080\n2F40\n49A0\n9000\n3FC0\n0900\n0600\n79E0\nENDCHAR\nSTARTCHAR U_767A\nENCODING 30330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A80\n0B20\n5240\n2180\nC060\n3F80\n0A00\n7FC0\n0A00\n1240\n61C0\nENDCHAR\nSTARTCHAR U_767B\nENCODING 30331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A40\n4A80\n2940\n1080\n3FC0\nC020\n1F80\n1080\n1F80\n0900\nFFE0\nENDCHAR\nSTARTCHAR U_767C\nENCODING 30332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n0B20\n5140\n20E0\nF3C0\n1240\n7420\n43C0\n3240\n9180\n7660\nENDCHAR\nSTARTCHAR U_767D\nENCODING 30333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0800\n3FC0\n2040\n2040\n3FC0\n2040\n2040\n2040\n3FC0\n2040\nENDCHAR\nSTARTCHAR U_767E\nENCODING 30334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n0400\n0800\n3F80\n2080\n2080\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_767F\nENCODING 30335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4100\nF900\n8900\n8900\nF900\n8900\n8900\n8920\nF920\n88E0\nENDCHAR\nSTARTCHAR U_7680\nENCODING 30336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3F80\n0000\n2380\n3C00\n2040\n1FC0\nENDCHAR\nSTARTCHAR U_7681\nENCODING 30337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3F80\n0400\nFFE0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_7682\nENCODING 30338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FC0\n2040\n3FC0\n2040\n3FC0\n0800\n0FE0\nF800\n0820\n07E0\nENDCHAR\nSTARTCHAR U_7683\nENCODING 30339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0800\n3F80\n2080\n3F80\n2080\n3F80\n1200\n1220\n2220\n41E0\nENDCHAR\nSTARTCHAR U_7684\nENCODING 30340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2100\n7BE0\n4C20\n4820\n7A20\n4920\n4920\n4820\n7820\n48C0\nENDCHAR\nSTARTCHAR U_7685\nENCODING 30341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n4540\nF540\n9540\n9540\nF7C0\n9400\n9400\n9420\nF420\n03E0\nENDCHAR\nSTARTCHAR U_7686\nENCODING 30342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n7A80\n4320\n5A20\n65E0\n0800\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_7687\nENCODING 30343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n2880\n2480\n3F80\n0000\n7FC0\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_7688\nENCODING 30344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n4780\nF400\n97C0\n9440\nF640\n9540\n9480\nF480\n9940\n1220\nENDCHAR\nSTARTCHAR U_7689\nENCODING 30345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n4280\nEA80\nAAA0\nABC0\nEA80\nAA80\nAAA0\nEBA0\nACA0\n18E0\nENDCHAR\nSTARTCHAR U_768A\nENCODING 30346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4280\nF440\n9920\n9080\nFFE0\n9040\n9280\nF100\n9080\n0080\nENDCHAR\nSTARTCHAR U_768B\nENCODING 30347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\nFFE0\n1500\n2480\nDF60\n0400\n0400\nENDCHAR\nSTARTCHAR U_768C\nENCODING 30348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\nFFE0\nA200\nA200\nEFC0\nA700\nAA80\nB240\nE220\n0200\nENDCHAR\nSTARTCHAR U_768D\nENCODING 30349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3F80\n4000\n7BC0\n4240\n72C0\n0200\nENDCHAR\nSTARTCHAR U_768E\nENCODING 30350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n4100\nFFE0\n9280\n9440\nF820\n9280\n9280\nF100\n9280\n0C60\nENDCHAR\nSTARTCHAR U_768F\nENCODING 30351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n4140\nF7E0\n9240\n9240\nF7E0\n9240\n9240\nF240\n9440\n0840\nENDCHAR\nSTARTCHAR U_7690\nENCODING 30352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7FC0\n4040\n7FC0\n4040\n7FC0\n2480\n1500\n64C0\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_7691\nENCODING 30353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n4520\nF7E0\n9000\n97E0\nF020\n97E0\n9420\nF400\n9420\n07E0\nENDCHAR\nSTARTCHAR U_7692\nENCODING 30354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n4CC0\nF4A0\n9FE0\n9480\nF6A0\n9CC0\n9480\nF5A0\n9660\n0C20\nENDCHAR\nSTARTCHAR U_7693\nENCODING 30355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4500\nF7C0\n9900\n9100\nFFE0\n9000\n97C0\nF440\n9440\n07C0\nENDCHAR\nSTARTCHAR U_7694\nENCODING 30356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n4440\nF7C0\n9440\n97C0\nF000\n97C0\n9100\nFFE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_7695\nENCODING 30357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\n4100\nFBE0\n8A20\n8A20\nFBE0\n8A20\n8A20\nFBE0\n8A20\nENDCHAR\nSTARTCHAR U_7696\nENCODING 30358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4080\nF7E0\n9420\n93C0\nF000\n9FE0\n9280\nF2A0\n94A0\n18E0\nENDCHAR\nSTARTCHAR U_7697\nENCODING 30359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n8920\nEBA0\nA920\nAFE0\nE820\nABA0\nAAA0\nEBA0\n10A0\n2040\nENDCHAR\nSTARTCHAR U_7698\nENCODING 30360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n47C0\nF100\n97C0\n9100\nFFE0\n9440\n97C0\nF440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_7699\nENCODING 30361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nFF00\n2400\n77E0\nAC80\n2880\n3FC0\n2040\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_769A\nENCODING 30362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4920\nFFE0\n9000\n9FE0\nF000\n97C0\n9440\nF7C0\n9280\n1FE0\nENDCHAR\nSTARTCHAR U_769B\nENCODING 30363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3F80\nFBE0\n8A20\nFBE0\n8A20\nFBE0\nENDCHAR\nSTARTCHAR U_769C\nENCODING 30364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4FE0\nE440\nA7C0\nA000\nAFE0\nE820\nABA0\nAAA0\nEBA0\n0860\nENDCHAR\nSTARTCHAR U_769D\nENCODING 30365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFD20\n8B40\nF900\n8FE0\nFA80\n2280\nFA80\n22A0\n34A0\nC860\nENDCHAR\nSTARTCHAR U_769E\nENCODING 30366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n47C0\nF440\n97C0\n9440\nFFE0\n9440\n9920\nF7E0\n9100\n0100\nENDCHAR\nSTARTCHAR U_769F\nENCODING 30367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nE100\nBFE0\nA440\nE7C0\nA440\nA7C0\nE440\n07C0\n0C60\nENDCHAR\nSTARTCHAR U_76A0\nENCODING 30368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4920\nEFE0\nA500\nAFE0\nF900\nAFC0\nA900\nAFC0\nE900\n0FE0\nENDCHAR\nSTARTCHAR U_76A1\nENCODING 30369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4F80\nE880\nAF80\nA880\nEF80\nAA80\nB240\nFFE0\n0200\n0200\nENDCHAR\nSTARTCHAR U_76A2\nENCODING 30370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4FC0\nE200\nBFE0\nA880\nFDE0\nA000\nBFE0\nE480\n08A0\n1060\nENDCHAR\nSTARTCHAR U_76A3\nENCODING 30371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5FE0\nE480\nBFC0\nAA40\nFFE0\nAA40\nBFE0\nE200\n1FE0\n0200\nENDCHAR\nSTARTCHAR U_76A4\nENCODING 30372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n4920\nF540\n9FE0\n9540\nF920\n97E0\n9520\nF7E0\n9520\n07E0\nENDCHAR\nSTARTCHAR U_76A5\nENCODING 30373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n4FC0\nE840\nAFC0\nA840\nEFC0\nA540\nA920\nFFE0\n0100\n0100\nENDCHAR\nSTARTCHAR U_76A6\nENCODING 30374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n5E80\nF2E0\nBFA0\nB2A0\nFFA0\nA8A0\nAEA0\nEA40\nAAA0\n1520\nENDCHAR\nSTARTCHAR U_76A7\nENCODING 30375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n4E40\nEA80\nBFE0\nAD60\nF7C0\nA400\nA7C0\nEA80\n1380\n0C60\nENDCHAR\nSTARTCHAR U_76A8\nENCODING 30376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2480\n3F80\nFBE0\nAAA0\nFBE0\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_76A9\nENCODING 30377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF440\n97C0\nF440\n97C0\nF920\n2540\nFFE0\n2280\n32A0\nCCE0\nENDCHAR\nSTARTCHAR U_76AA\nENCODING 30378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n5740\nFDE0\nAF40\nB540\nFFE0\nA100\nBFE0\nE580\n0940\n1120\nENDCHAR\nSTARTCHAR U_76AB\nENCODING 30379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nEA80\nAFE0\nAAA0\nEFE0\nAA80\nABE0\nEA80\nAB60\n1540\nENDCHAR\nSTARTCHAR U_76AC\nENCODING 30380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4100\nEFE0\nB5A0\nA640\nE900\nBFC0\nA900\nEFC0\n0900\n0FE0\nENDCHAR\nSTARTCHAR U_76AD\nENCODING 30381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n4540\nEFE0\nAAA0\nAFE0\nEA20\nAFE0\nAAA0\nEE60\nA920\n0E60\nENDCHAR\nSTARTCHAR U_76AE\nENCODING 30382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n0200\n3FE0\n2240\n2200\n3F80\n2880\n2500\n2200\n4500\n98E0\nENDCHAR\nSTARTCHAR U_76AF\nENCODING 30383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n7C80\n5480\n5080\n7C80\n57E0\n5480\n5480\n4880\n9480\nA280\nENDCHAR\nSTARTCHAR U_76B0\nENCODING 30384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFBE0\nAC20\nA3A0\nFAA0\nABA0\nAA20\n92C0\nAA00\nC620\n81E0\nENDCHAR\nSTARTCHAR U_76B1\nENCODING 30385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7BE0\n8AA0\n1280\nFBE0\n0A20\nFB20\n0AC0\n0A80\nFD40\n0A20\nENDCHAR\nSTARTCHAR U_76B2\nENCODING 30386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n8480\n23E0\nFEA0\n2280\n53E0\nFE40\n1340\nFE80\n1540\n1220\nENDCHAR\nSTARTCHAR U_76B3\nENCODING 30387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2880\n27E0\nFCA0\n2480\nADC0\n7540\n6D40\nA480\n2940\n7620\nENDCHAR\nSTARTCHAR U_76B4\nENCODING 30388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n4880\nF7E0\n4AA0\nA680\n3BE0\n6A40\n9340\n2A80\n4540\n8A20\nENDCHAR\nSTARTCHAR U_76B5\nENCODING 30389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFBE0\n52A0\nFA80\n03E0\nF240\n9240\nF340\n9280\nF540\n9A20\nENDCHAR\nSTARTCHAR U_76B6\nENCODING 30390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n73E0\nAEA0\n7A80\n4BE0\n7B20\n4B40\n7A80\nE560\n0A40\nENDCHAR\nSTARTCHAR U_76B7\nENCODING 30391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFC80\n13E0\n7AA0\n0280\n7BC0\n4A40\n7B40\n5280\n3560\nCA40\nENDCHAR\nSTARTCHAR U_76B8\nENCODING 30392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8880\n23E0\nFAA0\nAA80\nFBE0\nAB20\nFAA0\n2240\nFAA0\n2520\nENDCHAR\nSTARTCHAR U_76B9\nENCODING 30393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n7CA0\n57E0\n5080\n7BE0\n4AA0\n6BE0\n52A0\n6FE0\n4080\n8080\nENDCHAR\nSTARTCHAR U_76BA\nENCODING 30394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\nABE0\nFAA0\n4AA0\nBA80\n43E0\nFE20\nAB40\nFA80\n4D40\nBA20\nENDCHAR\nSTARTCHAR U_76BB\nENCODING 30395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3880\n2080\nFFE0\nAAA0\nFA80\nA3E0\nBE40\nAB40\nBA80\nAB40\nFE20\nENDCHAR\nSTARTCHAR U_76BC\nENCODING 30396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n1080\nFFE0\n86A0\n7A80\n03C0\n7A40\n4B40\n7A80\n2D40\nFA20\nENDCHAR\nSTARTCHAR U_76BD\nENCODING 30397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\nBAA0\n8280\nFFE0\n4A20\n7A20\n4AA0\n7A40\n02A0\nFF20\nENDCHAR\nSTARTCHAR U_76BE\nENCODING 30398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFC80\n13E0\nFEA0\nAE80\nFFE0\n4A40\n7B40\n4A80\n7B40\nCE20\nENDCHAR\nSTARTCHAR U_76BF\nENCODING 30399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n3FC0\n2940\n2940\n2940\n2940\n2940\n2940\n2940\n7FE0\n0000\nENDCHAR\nSTARTCHAR U_76C0\nENCODING 30400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0500\n04C0\n0440\n0400\n0000\n3FC0\n2940\n2940\n2940\nFFE0\nENDCHAR\nSTARTCHAR U_76C1\nENCODING 30401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0880\n11C0\n1040\n2140\nC080\n3FC0\n2A40\n2A40\n2A40\nFFE0\nENDCHAR\nSTARTCHAR U_76C2\nENCODING 30402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0200\n0200\nFFE0\n0200\n0A00\n0400\n3FC0\n2940\n2940\nFFE0\nENDCHAR\nSTARTCHAR U_76C3\nENCODING 30403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0200\n0500\n1CC0\n6420\n0400\n3FC0\n2940\n2940\n2940\n7FE0\nENDCHAR\nSTARTCHAR U_76C4\nENCODING 30404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n0440\n3FC0\n2400\n7FC0\n0440\n04C0\n3FC0\n2940\n2940\n7FE0\nENDCHAR\nSTARTCHAR U_76C5\nENCODING 30405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n3FC0\n2240\n2240\n3FC0\n0200\n0200\n3FC0\n2940\n2940\nFFE0\nENDCHAR\nSTARTCHAR U_76C6\nENCODING 30406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n1100\n2080\nDF60\n0900\n1500\n6200\n3F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_76C7\nENCODING 30407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n0A00\n1900\n2480\nC060\n3F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_76C8\nENCODING 30408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n1080\n17E0\n1920\n2620\n4940\nBFC0\n2940\n2940\n2940\nFFE0\nENDCHAR\nSTARTCHAR U_76C9\nENCODING 30409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\n7C00\n0400\nFFE0\n1500\n2480\nC060\n3FC0\n2940\n2940\nFFE0\nENDCHAR\nSTARTCHAR U_76CA\nENCODING 30410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1100\nFFE0\n1100\n2080\n4040\nBFA0\n2A80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_76CB\nENCODING 30411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0800\n1F80\n2880\nC700\n38E0\n3F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_76CC\nENCODING 30412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3BC0\n4A40\nAAC0\n1220\n21E0\nC000\n3FC0\n2A40\n2A40\nFFE0\nENDCHAR\nSTARTCHAR U_76CD\nENCODING 30413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\nFFE0\n1100\n7F80\n0040\n3F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_76CE\nENCODING 30414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FC0\n2440\nFFE0\n0900\n3080\nC060\n3FC0\n2940\n2940\nFFE0\nENDCHAR\nSTARTCHAR U_76CF\nENCODING 30415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n7FC0\n0800\n7FC0\n08A0\n0720\n78E0\n3FC0\n2940\n2940\n7FE0\nENDCHAR\nSTARTCHAR U_76D0\nENCODING 30416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n7D80\n1160\n1D20\n7100\n0000\n3FC0\n2940\n2940\n7FE0\nENDCHAR\nSTARTCHAR U_76D1\nENCODING 30417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n4A00\n4BE0\n4A00\n4C80\n4840\n0800\n7FC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_76D2\nENCODING 30418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1F00\n2080\nDF60\n1100\n1F00\n0000\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_76D3\nENCODING 30419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\n4100\n2FE0\n4100\nC500\n4200\n3FC0\n2940\n2940\nFFE0\nENDCHAR\nSTARTCHAR U_76D4\nENCODING 30420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n1A40\n2A80\n5500\n8880\n3060\n3FC0\n2940\n2940\nFFE0\nENDCHAR\nSTARTCHAR U_76D5\nENCODING 30421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n1780\n4480\n1680\n25A0\nC8A0\n1060\n7FC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_76D6\nENCODING 30422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n0400\n3F80\n0400\nFFE0\n0000\n3F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_76D7\nENCODING 30423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n1920\n6100\n2280\n2C60\n0000\n3FC0\n2940\n2940\n7FE0\nENDCHAR\nSTARTCHAR U_76D8\nENCODING 30424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1F80\n1480\n1280\n7FE0\n1480\n2280\n3FC0\n2940\n2940\nFFE0\nENDCHAR\nSTARTCHAR U_76D9\nENCODING 30425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nFFE0\n2480\n3F80\n2480\n3F80\n2480\n7FC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_76DA\nENCODING 30426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n7FE0\n1240\n0B80\n0E80\n7240\n2620\n3FC0\n2940\n2940\n7FE0\nENDCHAR\nSTARTCHAR U_76DB\nENCODING 30427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n7FE0\n4200\n7A40\n4A80\n59A0\n8260\n7FC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_76DC\nENCODING 30428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n17E0\n5920\n2140\n6280\n2440\n2820\n3FC0\n2940\n2940\nFFE0\nENDCHAR\nSTARTCHAR U_76DD\nENCODING 30429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0080\n3F80\n0080\nFFE0\n2540\n1480\n6460\n3FC0\n2940\nFFE0\nENDCHAR\nSTARTCHAR U_76DE\nENCODING 30430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n7FC0\n0920\n7FE0\n0200\n7FC0\n0920\n77E0\n3FC0\n2A40\n7FE0\nENDCHAR\nSTARTCHAR U_76DF\nENCODING 30431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4A40\n4BC0\n7A40\n04C0\n7FC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_76E0\nENCODING 30432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n2100\nFFE0\n1480\n6B00\n1680\n6A60\n1600\n7FC0\n4940\nFFE0\nENDCHAR\nSTARTCHAR U_76E1\nENCODING 30433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7F80\n0480\nFFE0\n0480\nFFE0\n5240\n8920\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_76E2\nENCODING 30434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\nF920\nAFE0\nF900\nA980\nFA40\n0420\n3FC0\n2A40\n2A40\nFFE0\nENDCHAR\nSTARTCHAR U_76E3\nENCODING 30435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA100\nF9E0\n8A00\nFA80\nA040\nFC00\n0000\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_76E4\nENCODING 30436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\nFA80\nAAE0\nAC00\nFBC0\nAA80\nA900\n1280\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_76E5\nENCODING 30437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\nC4C0\n9F40\nECC0\n9640\nF5C0\nAC40\n0000\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_76E6\nENCODING 30438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n64C0\nBF20\n0A00\nFFE0\n2A80\n3380\n2080\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_76E7\nENCODING 30439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n4420\n5FC0\n5460\n5FC0\n5240\n5FC0\n9540\nFFE0\nENDCHAR\nSTARTCHAR U_76E8\nENCODING 30440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n2200\nD7C0\n2540\nD6C0\n2540\nC7C0\n0820\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_76E9\nENCODING 30441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n13E0\nFE40\n2940\nFC80\n1140\n1220\n7FC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_76EA\nENCODING 30442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F80\nA880\n4F80\n2880\nCFE0\n5540\n6540\n0A80\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_76EB\nENCODING 30443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n3180\nDF60\n1100\n7FC0\n0A00\n3F80\n2A80\n7FC0\n4940\nFFE0\nENDCHAR\nSTARTCHAR U_76EC\nENCODING 30444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\nA3E0\nF480\n9080\nF7E0\nA240\nFBC0\n0000\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_76ED\nENCODING 30445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nA9E0\nFB40\n1140\nFD40\n2880\nFD40\n1220\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_76EE\nENCODING 30446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2080\n3F80\n2080\n2080\n3F80\n2080\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_76EF\nENCODING 30447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF080\n9080\nF080\n9080\n9080\nF080\n9080\nF080\n9080\n0380\nENDCHAR\nSTARTCHAR U_76F0\nENCODING 30448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF100\n9100\nF100\n9100\n9FE0\nF100\n9100\nF100\n9100\n0100\nENDCHAR\nSTARTCHAR U_76F1\nENCODING 30449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF100\n9100\nF100\n9FE0\n9100\nF100\n9100\nF900\n9500\n0200\nENDCHAR\nSTARTCHAR U_76F2\nENCODING 30450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2000\n3FC0\n0000\n3F80\n2480\n3280\n2980\n2480\n3F80\nENDCHAR\nSTARTCHAR U_76F3\nENCODING 30451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n9FE0\nF400\n9400\n9400\nF400\n9400\nF400\n9400\n07C0\nENDCHAR\nSTARTCHAR U_76F4\nENCODING 30452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n3F80\n2080\n3F80\n2080\n3F80\n2080\n2080\nFFE0\nENDCHAR\nSTARTCHAR U_76F5\nENCODING 30453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF400\n97E0\nF800\n9780\n9080\nF100\n9200\nF420\n9420\n03E0\nENDCHAR\nSTARTCHAR U_76F6\nENCODING 30454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9000\nF000\n9FE0\n9280\nF280\n9280\n9480\nF4A0\n8860\n1000\nENDCHAR\nSTARTCHAR U_76F7\nENCODING 30455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n97E0\nF820\n9220\n9120\nF0A0\n9720\nF020\n9120\n00C0\nENDCHAR\nSTARTCHAR U_76F8\nENCODING 30456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1220\n7E20\n13E0\n1220\n3A20\n57E0\n9220\n1220\n13E0\n1220\nENDCHAR\nSTARTCHAR U_76F9\nENCODING 30457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9FE0\nF100\n9520\n9520\nF7E0\n9100\nF120\n9120\n00E0\nENDCHAR\nSTARTCHAR U_76FA\nENCODING 30458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\nF780\n9400\nF400\n97E0\n9480\nF480\n9480\nF480\n9880\n1080\nENDCHAR\nSTARTCHAR U_76FB\nENCODING 30459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n9440\nF820\n9780\n9200\nF7C0\n9040\nF040\n9240\n0180\nENDCHAR\nSTARTCHAR U_76FC\nENCODING 30460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF280\n9240\nF440\n9820\n97C0\nF240\n9240\nF240\n9440\n0980\nENDCHAR\nSTARTCHAR U_76FD\nENCODING 30461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\nA200\nE200\nAFC0\nE200\nA200\nBFE0\nE200\n0200\n0200\nENDCHAR\nSTARTCHAR U_76FE\nENCODING 30462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2200\n3FE0\n2200\n2FC0\n2840\n2FC0\n2840\n2FC0\n4840\n8FC0\nENDCHAR\nSTARTCHAR U_76FF\nENCODING 30463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE200\nBFE0\nA880\nE880\nA500\nE500\nA200\nA500\nE8E0\n1040\nENDCHAR\nSTARTCHAR U_7700\nENCODING 30464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3E0\n9220\n9220\nF3E0\n9220\nF220\n93E0\n9220\nF220\n04A0\n0840\nENDCHAR\nSTARTCHAR U_7701\nENCODING 30465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1480\n2560\n4620\n1F80\n3080\nDF80\n1080\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_7702\nENCODING 30466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE0C0\nAF00\nA900\nE900\nAFE0\nE900\nA900\nA880\nEAA0\nAC60\n0820\nENDCHAR\nSTARTCHAR U_7703\nENCODING 30467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF000\n9000\nF000\n9FE0\n9100\nF100\n9200\nF440\n9FA0\n0420\nENDCHAR\nSTARTCHAR U_7704\nENCODING 30468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF100\n9100\nF5E0\n9520\n9520\nF7E0\n9020\nF020\n9120\n00C0\nENDCHAR\nSTARTCHAR U_7705\nENCODING 30469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF700\n9400\nF7C0\n9540\n9540\nF540\n9540\nF480\n9940\n1220\nENDCHAR\nSTARTCHAR U_7706\nENCODING 30470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE100\nBFE0\nA400\nE780\nA480\nE480\nA480\nA880\nEA80\n1100\nENDCHAR\nSTARTCHAR U_7707\nENCODING 30471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9540\nF520\n9520\n9900\nF120\n9040\n9080\nF300\n0C00\nENDCHAR\nSTARTCHAR U_7708\nENCODING 30472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n97E0\nF520\n9520\n9180\nF180\n9280\nF4A0\n08A0\n1060\nENDCHAR\nSTARTCHAR U_7709\nENCODING 30473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2220\n3FE0\n2000\n2FC0\n2840\n2FC0\n2840\n4FC0\n4840\n8FC0\nENDCHAR\nSTARTCHAR U_770A\nENCODING 30474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF700\n9100\n91C0\nF700\n9100\nF1E0\n9700\n9120\nF120\n00E0\nENDCHAR\nSTARTCHAR U_770B\nENCODING 30475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n7F80\n0800\nFFE0\n1080\n3F80\n5080\n9F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_770C\nENCODING 30476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n5080\n5F80\n5080\n5F80\n5080\n7FE0\n0400\n2480\n4440\n8C20\nENDCHAR\nSTARTCHAR U_770D\nENCODING 30477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF400\n9620\nF520\n94C0\n9440\nF4A0\n9520\nF600\n9400\n07E0\nENDCHAR\nSTARTCHAR U_770E\nENCODING 30478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE7C0\nA000\nA000\nFFE0\nA100\nA100\nE940\nA920\nB120\nE500\n0200\nENDCHAR\nSTARTCHAR U_770F\nENCODING 30479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE200\nAFC0\nEA40\nAA40\nFFE0\nA500\nA500\nE880\n1060\n2040\nENDCHAR\nSTARTCHAR U_7710\nENCODING 30480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF080\n9080\nF080\n9480\n94E0\nF480\n9480\nF480\n9480\n0FE0\nENDCHAR\nSTARTCHAR U_7711\nENCODING 30481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n9480\nFFE0\n92A0\n94A0\nF5A0\n9EA0\nF0A0\n9120\n0260\nENDCHAR\nSTARTCHAR U_7712\nENCODING 30482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF080\n97E0\nF4A0\n97E0\n94A0\nF7E0\n94A0\nF080\n9080\n0080\nENDCHAR\nSTARTCHAR U_7713\nENCODING 30483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\nF120\n97E0\nF500\n9540\n9540\nF540\n9480\nF6A0\n9560\n0220\nENDCHAR\nSTARTCHAR U_7714\nENCODING 30484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n0000\n0600\n2480\n4440\n9500\n24C0\n4440\n0400\nENDCHAR\nSTARTCHAR U_7715\nENCODING 30485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF280\n9440\nF820\n9100\n9680\nF100\n9640\nF080\n9100\n0600\nENDCHAR\nSTARTCHAR U_7716\nENCODING 30486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nF7C0\n9440\nF440\n9440\nF7C0\n9280\n9280\nF4A0\n08A0\n1060\nENDCHAR\nSTARTCHAR U_7717\nENCODING 30487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF200\n97E0\n9820\nF7A0\n94A0\nF4A0\n97A0\n9020\nF0A0\n0040\nENDCHAR\nSTARTCHAR U_7718\nENCODING 30488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8A20\n5140\n3FC0\nD0A0\n1F80\n1080\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_7719\nENCODING 30489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF200\n9440\nFFA0\n9020\n9000\nF7E0\n9420\nF420\n97E0\n0420\nENDCHAR\nSTARTCHAR U_771A\nENCODING 30490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n3FC0\n4400\n3FC0\n0400\nFFE0\n1080\n1E80\n1780\n1080\n1F80\nENDCHAR\nSTARTCHAR U_771B\nENCODING 30491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n97C0\nF100\n9FE0\n9100\nF380\n9540\nF920\n9120\n0100\nENDCHAR\nSTARTCHAR U_771C\nENCODING 30492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE200\nBFE0\nE200\nAFC0\nA700\nE680\nAA80\nB240\nE220\n0200\nENDCHAR\nSTARTCHAR U_771D\nENCODING 30493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97E0\n9420\nF000\n97E0\n9080\nF080\n9080\nF480\n9280\n0100\nENDCHAR\nSTARTCHAR U_771E\nENCODING 30494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2020\n1FE0\n5080\n5F80\n5080\n5F80\n5080\n7FE0\n2080\n4040\nENDCHAR\nSTARTCHAR U_771F\nENCODING 30495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n0400\n1F80\n1080\n1E80\n1780\n1080\n7FE0\n0900\n30C0\nENDCHAR\nSTARTCHAR U_7720\nENCODING 30496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF420\n97E0\nF480\n9480\n97E0\nF480\n9480\nF4A0\n9660\n0420\nENDCHAR\nSTARTCHAR U_7721\nENCODING 30497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nEF00\nA900\nA900\nEFE0\nA900\nE900\nA880\nAAA0\nED60\n08A0\nENDCHAR\nSTARTCHAR U_7722\nENCODING 30498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n7A40\nCAC0\n3220\n7FE0\nA080\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_7723\nENCODING 30499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nF500\n97C0\nF900\n9100\n9FE0\nF100\n9100\nF280\n9440\n0820\nENDCHAR\nSTARTCHAR U_7724\nENCODING 30500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFC0\nA840\nEFC0\nA800\nAA40\nEA80\nAB00\nAA20\nEA20\n11E0\n2000\nENDCHAR\nSTARTCHAR U_7725\nENCODING 30501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5D60\n5180\n5520\nFFE0\n2080\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_7726\nENCODING 30502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE280\nA280\nAAA0\nEBC0\nAA80\nAA80\nEA80\nAA80\nABA0\nFEA0\n0860\nENDCHAR\nSTARTCHAR U_7727\nENCODING 30503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF120\n9120\n9220\nF4A0\n9840\nF7E0\n9420\n9420\nF420\n07E0\nENDCHAR\nSTARTCHAR U_7728\nENCODING 30504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF700\n9100\nF080\n97E0\n9040\nF080\n9100\nF200\n9600\n09E0\nENDCHAR\nSTARTCHAR U_7729\nENCODING 30505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF080\n9FE0\nF100\n9240\n97C0\nF080\n9100\nF240\n9FA0\n0420\nENDCHAR\nSTARTCHAR U_772A\nENCODING 30506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA100\nAFE0\nE920\nA920\nAAA0\nEA60\nAC20\nA820\nE8A0\n0840\nENDCHAR\nSTARTCHAR U_772B\nENCODING 30507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF920\n9540\n9FE0\nF100\n9100\nFFE0\n9100\n9100\nF100\n0100\nENDCHAR\nSTARTCHAR U_772C\nENCODING 30508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE480\nA440\nBFE0\nE500\nA520\nE540\nA980\nA920\nEB20\n10E0\nENDCHAR\nSTARTCHAR U_772D\nENCODING 30509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9100\nF100\n9FE0\n9100\nF100\n97C0\nF100\n9100\n0FE0\nENDCHAR\nSTARTCHAR U_772E\nENCODING 30510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA820\nABA0\nE820\nABA0\nEAA0\nABA0\nA820\nE820\n08A0\n0840\nENDCHAR\nSTARTCHAR U_772F\nENCODING 30511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nF520\n9540\nF100\n9FE0\n9100\nF380\n9540\nF920\n9120\n0100\nENDCHAR\nSTARTCHAR U_7730\nENCODING 30512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA200\nA280\nE440\nAFC0\nA100\nE100\nAFC0\nA100\nE100\n1FE0\nENDCHAR\nSTARTCHAR U_7731\nENCODING 30513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n9100\nF7E0\n9120\n97E0\nF500\n97E0\nF120\n9280\n0C60\nENDCHAR\nSTARTCHAR U_7732\nENCODING 30514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9240\n9240\nF3C0\n9240\n93C0\nF240\n92E0\nFF40\n9040\n0040\nENDCHAR\nSTARTCHAR U_7733\nENCODING 30515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n93E0\n9440\nFA80\n9100\n9200\nF7E0\n9A20\n9220\nF3E0\n0220\nENDCHAR\nSTARTCHAR U_7734\nENCODING 30516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF7E0\n9820\n97A0\nF4A0\n97A0\nF4A0\n97A0\n9020\nF0A0\n0040\nENDCHAR\nSTARTCHAR U_7735\nENCODING 30517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n93E0\n9440\nFA80\n9180\n9FE0\nF220\n9640\n9180\nF100\n0E00\nENDCHAR\nSTARTCHAR U_7736\nENCODING 30518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9400\n97E0\nF480\n9480\n95C0\nF480\n9480\n97E0\nF400\n07E0\nENDCHAR\nSTARTCHAR U_7737\nENCODING 30519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\n7FC0\n0800\nFFE0\n1080\n3FC0\n50A0\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_7738\nENCODING 30520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9240\n97E0\nF120\n9500\n97C0\nF900\n9100\n9FE0\nF100\n0100\nENDCHAR\nSTARTCHAR U_7739\nENCODING 30521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF440\n9280\n9100\nF7C0\n9100\n9100\nFFE0\n9100\n9280\nF440\n0820\nENDCHAR\nSTARTCHAR U_773A\nENCODING 30522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9280\n9AA0\nF6C0\n9280\n96C0\nFAA0\n9280\n94A0\nF8A0\n1060\nENDCHAR\nSTARTCHAR U_773B\nENCODING 30523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF440\n9280\n9FE0\nF100\n9100\n97C0\nF100\n9100\n9FE0\nF100\n0100\nENDCHAR\nSTARTCHAR U_773C\nENCODING 30524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n97C0\nF440\n97C0\n9500\nF520\n9540\n9480\nF540\n0620\nENDCHAR\nSTARTCHAR U_773D\nENCODING 30525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFC0\nA800\nABE0\nEA80\nAAA0\nAAC0\nEA80\nAA80\nAAC0\nEB20\n1220\nENDCHAR\nSTARTCHAR U_773E\nENCODING 30526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n4A40\n7FC0\n0180\n7E00\n2480\n2480\n5540\n8E20\n0400\nENDCHAR\nSTARTCHAR U_773F\nENCODING 30527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEF00\nA100\nE140\nBD80\nE580\nA540\nA940\nF160\nA540\n0200\nENDCHAR\nSTARTCHAR U_7740\nENCODING 30528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n0400\n3F80\n0800\nFFE0\n1080\n3E80\n5780\n9080\n1F80\nENDCHAR\nSTARTCHAR U_7741\nENCODING 30529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n93C0\n9480\nF7C0\n9140\n9FE0\nF140\n97C0\n9100\nF500\n0200\nENDCHAR\nSTARTCHAR U_7742\nENCODING 30530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C40\nE340\n1C40\nE340\n3FE0\n2840\n2FC0\n2840\n2FC0\n4840\n8FC0\nENDCHAR\nSTARTCHAR U_7743\nENCODING 30531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9440\n9FE0\nF2A0\n9440\nFA20\n93C0\n9680\nF900\n0280\n0C60\nENDCHAR\nSTARTCHAR U_7744\nENCODING 30532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF920\n9520\n9540\nF7E0\n9420\n97E0\nF420\n97E0\n9420\nF420\n04E0\nENDCHAR\nSTARTCHAR U_7745\nENCODING 30533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n97C0\nF440\n97C0\n9000\nF7C0\n9100\n9FE0\nF100\n0100\nENDCHAR\nSTARTCHAR U_7746\nENCODING 30534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9820\nF7C0\n9000\n9000\nFFE0\n9280\n92A0\nF4A0\n0860\nENDCHAR\nSTARTCHAR U_7747\nENCODING 30535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nF280\n9FE0\nF120\n97E0\nF500\n97E0\n9320\nF5E0\n9900\n0100\nENDCHAR\nSTARTCHAR U_7748\nENCODING 30536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE7C0\nA440\nA7C0\nE000\nAFE0\nA100\nE100\nA7C0\nA100\nE100\n1FE0\nENDCHAR\nSTARTCHAR U_7749\nENCODING 30537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE200\nAA80\nAA80\nEA80\nB740\nE200\nAFC0\nA200\nE200\n1FE0\nENDCHAR\nSTARTCHAR U_774A\nENCODING 30538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\n97E0\nF000\n97E0\n9420\nF7E0\n9420\nF7E0\n9420\n04E0\nENDCHAR\nSTARTCHAR U_774B\nENCODING 30539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n9EA0\n9280\nFFE0\n9280\n93A0\nF6A0\n9AC0\nF2A0\n9360\n0420\nENDCHAR\nSTARTCHAR U_774C\nENCODING 30540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n93C0\n9440\nFFE0\n9520\n9520\nF7E0\n9280\nF2A0\n94A0\n1860\nENDCHAR\nSTARTCHAR U_774D\nENCODING 30541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n97C0\nF440\n97C0\n9440\nF7C0\n9280\nF2A0\n94A0\n1860\nENDCHAR\nSTARTCHAR U_774E\nENCODING 30542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF660\n9180\n9660\nF100\n9FE0\n9280\nFFE0\n94A0\nF4A0\n94E0\n0080\nENDCHAR\nSTARTCHAR U_774F\nENCODING 30543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA920\nA920\nEFE0\nA920\nABA0\nED60\nA920\nA920\nEFE0\n0820\nENDCHAR\nSTARTCHAR U_7750\nENCODING 30544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9100\n9540\nF380\n9FE0\nF100\n9380\n9540\nF920\n0100\nENDCHAR\nSTARTCHAR U_7751\nENCODING 30545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9280\n9440\nFBA0\n9000\nFA40\n9540\n9540\nF080\n0FE0\nENDCHAR\nSTARTCHAR U_7752\nENCODING 30546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9520\n9540\nFA80\n9540\n9920\nF540\n9980\nF280\n9440\n0820\nENDCHAR\nSTARTCHAR U_7753\nENCODING 30547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nE280\nAFE0\nEAA0\nAFE0\nEAA0\nAAA0\nBFE0\nE440\n0820\n1020\nENDCHAR\nSTARTCHAR U_7754\nENCODING 30548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE280\nA440\nEBA0\nA000\nAFE0\nEAA0\nAFE0\nEAA0\nAAA0\n0860\nENDCHAR\nSTARTCHAR U_7755\nENCODING 30549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA820\nE400\nA7E0\nA8A0\nF5A0\nA2E0\nE480\nA8A0\n1060\nENDCHAR\nSTARTCHAR U_7756\nENCODING 30550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\n9100\nFFE0\n9440\n9A20\nF3C0\n9680\nF900\n9280\n1C60\nENDCHAR\nSTARTCHAR U_7757\nENCODING 30551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n97C0\nF440\n97C0\n9200\nF7E0\n9AA0\n94A0\nF920\n0240\nENDCHAR\nSTARTCHAR U_7758\nENCODING 30552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0000\nFFE0\n2080\n3F80\n1240\n3180\nD480\n1860\nENDCHAR\nSTARTCHAR U_7759\nENCODING 30553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n9420\nF7E0\n9540\n9520\nF7E0\n9500\nF900\n9280\n0C60\nENDCHAR\nSTARTCHAR U_775A\nENCODING 30554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9400\n9480\nF7E0\n9480\n97E0\nF480\n97E0\nF480\n0880\n17E0\nENDCHAR\nSTARTCHAR U_775B\nENCODING 30555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9100\nF7C0\n9100\n9FE0\nF440\n97C0\nF440\n97C0\n0440\nENDCHAR\nSTARTCHAR U_775C\nENCODING 30556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9A20\n9540\nF7C0\n9140\n9FE0\nF140\n97C0\n9100\nF500\n0200\nENDCHAR\nSTARTCHAR U_775D\nENCODING 30557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n11E0\n7EA0\n3920\nD660\n0000\n3FC0\n24C0\n2940\n3240\n3FC0\nENDCHAR\nSTARTCHAR U_775E\nENCODING 30558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9540\nF540\n9BA0\n9120\nF100\n9380\nF540\n9920\n1120\nENDCHAR\nSTARTCHAR U_775F\nENCODING 30559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9440\nF6C0\n9AA0\n9AA0\nF100\n9FE0\n9100\nF100\n0100\nENDCHAR\nSTARTCHAR U_7760\nENCODING 30560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\nAA80\nAFE0\nE200\nAFE0\nA840\nF7A0\nA480\nA5A0\nE420\n07E0\nENDCHAR\nSTARTCHAR U_7761\nENCODING 30561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9100\n9FE0\nF540\n9540\n9FE0\nF540\n9540\n9FE0\nF100\n07C0\nENDCHAR\nSTARTCHAR U_7762\nENCODING 30562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF500\n9480\n97E0\nFC80\n97E0\n9480\nF480\n97E0\n9480\nF480\n07E0\nENDCHAR\nSTARTCHAR U_7763\nENCODING 30563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1BE0\n1120\nFD40\n5880\n5540\nB220\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_7764\nENCODING 30564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9540\n97C0\nF540\n97C0\n9000\nFFE0\n9280\n9280\nF480\n0880\nENDCHAR\nSTARTCHAR U_7765\nENCODING 30565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97E0\n9520\nF7E0\n9520\n97E0\nF280\n9480\nFFE0\n9080\n0080\nENDCHAR\nSTARTCHAR U_7766\nENCODING 30566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\n9100\nFFE0\n9440\n9820\nF100\n97C0\nF100\n9100\n0FE0\nENDCHAR\nSTARTCHAR U_7767\nENCODING 30567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9480\n97E0\nF480\n9560\n9620\nF7E0\n9420\nF7E0\n9420\n07E0\nENDCHAR\nSTARTCHAR U_7768\nENCODING 30568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nACE0\nA820\nEEE0\nA820\nAFE0\nE280\nA280\nA2A0\nE4A0\n1860\nENDCHAR\nSTARTCHAR U_7769\nENCODING 30569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9040\n97C0\nF040\n9FE0\n9940\nF580\n9340\nF520\n9920\n0300\nENDCHAR\nSTARTCHAR U_776A\nENCODING 30570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0400\nFFE0\n1100\n7FC0\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_776B\nENCODING 30571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9140\nFFE0\n9140\n97C0\nF100\n95E0\nF500\n9B00\n10E0\nENDCHAR\nSTARTCHAR U_776C\nENCODING 30572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF720\n9920\nF4C0\n9100\n9FE0\nF100\n9380\nF540\n0920\n1120\nENDCHAR\nSTARTCHAR U_776D\nENCODING 30573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA920\nABA0\nE920\nAFE0\nA820\nEBA0\nAAA0\nABA0\nE820\n10E0\nENDCHAR\nSTARTCHAR U_776E\nENCODING 30574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\nE440\nAFA0\nB000\nEEA0\nAAA0\nEEA0\nAAA0\nAEA0\nEA20\n0AE0\nENDCHAR\nSTARTCHAR U_776F\nENCODING 30575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n89E0\nFB40\n9140\nFC80\nC960\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_7770\nENCODING 30576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\nA480\nE200\nBFE0\nA200\nE7C0\nAC40\nB440\nE7C0\n0440\nENDCHAR\nSTARTCHAR U_7771\nENCODING 30577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAA20\nAA20\nEEE0\nA800\nEFE0\nA920\nAEA0\nE8C0\n0940\n0A20\nENDCHAR\nSTARTCHAR U_7772\nENCODING 30578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n97C0\nF440\n97C0\n9500\nF7C0\n9900\n97C0\nF100\n0FE0\nENDCHAR\nSTARTCHAR U_7773\nENCODING 30579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\nA500\nAA80\nF7E0\nA200\nFFC0\nA200\nAF80\nE200\n1FE0\nENDCHAR\nSTARTCHAR U_7774\nENCODING 30580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nB220\nAFC0\nE200\nAFC0\nAA40\nEFC0\nAA40\nBFE0\nE200\n0200\nENDCHAR\nSTARTCHAR U_7775\nENCODING 30581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nE4C0\nBEA0\nA480\nFFE0\nA0A0\nEEA0\nAAC0\nAEA0\nE160\n0620\nENDCHAR\nSTARTCHAR U_7776\nENCODING 30582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\nA200\nBFE0\nE480\nA840\nF7A0\nA480\nA780\nE480\n0780\nENDCHAR\nSTARTCHAR U_7777\nENCODING 30583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nFD40\nA7E0\nE940\nB3C0\nBD00\nE7C0\nA900\nBBE0\nED00\n13E0\nENDCHAR\nSTARTCHAR U_7778\nENCODING 30584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE920\nAFE0\nE800\nABE0\nEA20\nABE0\nAA20\nEBE0\n1220\n23E0\nENDCHAR\nSTARTCHAR U_7779\nENCODING 30585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0220\nFF40\n9280\n9FE0\nF100\n97C0\n9C40\nF7C0\n9440\nF7C0\n0440\nENDCHAR\nSTARTCHAR U_777A\nENCODING 30586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE780\nA880\nFFE0\nAA00\nABC0\nEC80\nAFE0\nA980\nEA40\n0C20\nENDCHAR\nSTARTCHAR U_777B\nENCODING 30587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFE0\nA820\nB7C0\nE000\nA7C0\nE440\nA7C0\nA440\nE7C0\n9FE0\nENDCHAR\nSTARTCHAR U_777C\nENCODING 30588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n97C0\nF440\n97C0\n9000\nFFE0\n9500\n95E0\nFB00\n11E0\nENDCHAR\nSTARTCHAR U_777D\nENCODING 30589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF40\n92A0\n9A40\nF440\n9BA0\n9100\nFFE0\n9100\n9280\nF440\n1820\nENDCHAR\nSTARTCHAR U_777E\nENCODING 30590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7FC0\n4940\n7FC0\n0400\n7FC0\n0400\nFFE0\n1100\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_777F\nENCODING 30591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n50A0\nAF40\n5080\n3FC0\n50A0\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_7780\nENCODING 30592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n29E0\nFF40\n3480\n5140\n9220\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_7781\nENCODING 30593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n97C0\nF440\n97C0\n9440\nF7C0\n9140\n9FE0\nF280\n0C60\nENDCHAR\nSTARTCHAR U_7782\nENCODING 30594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD40\n9120\nFFE0\n9100\nB900\nA9C0\nBA40\nAB40\nBC80\nA940\nBA20\nENDCHAR\nSTARTCHAR U_7783\nENCODING 30595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA880\nAFE0\nE880\nABE0\nAA20\nEBE0\nAA20\nABE0\nEA20\n13E0\nENDCHAR\nSTARTCHAR U_7784\nENCODING 30596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n9240\n9FE0\nF240\n97E0\n9520\nF520\n97E0\n9520\nF520\n07E0\nENDCHAR\nSTARTCHAR U_7785\nENCODING 30597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE40\nA440\nA560\nFF40\nA540\nA640\nED40\nB440\nE440\nA4A0\n0520\nENDCHAR\nSTARTCHAR U_7786\nENCODING 30598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE7C0\nA540\nBFE0\nE000\nA7C0\nE440\nA540\nA540\nE280\n0C60\nENDCHAR\nSTARTCHAR U_7787\nENCODING 30599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF2A0\nAAA0\nA9C0\nE080\nBFE0\nA880\nE9C0\nAAA0\nAC80\nE800\n17E0\nENDCHAR\nSTARTCHAR U_7788\nENCODING 30600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE480\nAA40\nB4A0\nEF40\nA000\nAEE0\nEAA0\nA660\nAAA0\nF320\n0660\nENDCHAR\nSTARTCHAR U_7789\nENCODING 30601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\n1140\nFD40\n8540\n7A20\n03E0\n7940\n4940\n7880\n4940\n7A20\nENDCHAR\nSTARTCHAR U_778A\nENCODING 30602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nABC0\nE940\nAFE0\nE940\nABC0\nA900\nF7C0\n9440\n27C0\nENDCHAR\nSTARTCHAR U_778B\nENCODING 30603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9100\nF7C0\n9440\n9740\nF5C0\n9440\n9FE0\nF280\n0C60\nENDCHAR\nSTARTCHAR U_778C\nENCODING 30604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nA7C0\nA100\nEFE0\nA440\nAFE0\nE000\nAFE0\nAAA0\nEAA0\n1FE0\nENDCHAR\nSTARTCHAR U_778D\nENCODING 30605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE300\nADE0\nA920\nEFE0\nA920\nAFE0\nE100\nAFE0\nA480\nE300\n1CE0\nENDCHAR\nSTARTCHAR U_778E\nENCODING 30606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA920\nE7C0\nA100\nA7C0\nE100\nAFE0\nA440\nE440\n07C0\nENDCHAR\nSTARTCHAR U_778F\nENCODING 30607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0400\n3F80\n0400\nFFE0\n2080\n3FA0\n5540\n98E0\nENDCHAR\nSTARTCHAR U_7790\nENCODING 30608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n3280\n2980\n2480\n3F80\n0000\n7BC0\n4A40\n7BC0\n4A40\n7BC0\nENDCHAR\nSTARTCHAR U_7791\nENCODING 30609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA820\nAFE0\nE440\nA7C0\nA440\nE7C0\nA100\nAFE0\nE280\n0C60\nENDCHAR\nSTARTCHAR U_7792\nENCODING 30610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE280\nAFE0\nA280\nEFE0\nA280\nAFE0\nEAA0\nAAA0\nAD60\nE820\n0860\nENDCHAR\nSTARTCHAR U_7793\nENCODING 30611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0AA0\nFEA0\nA2A0\nFEA0\nA2A0\nFEA0\nB6A0\nBEA0\nE2A0\n0420\n0820\nENDCHAR\nSTARTCHAR U_7794\nENCODING 30612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFC0\nA100\nE7C0\nA100\nBFE0\nE540\nA6C0\nA540\nE7C0\n0C60\nENDCHAR\nSTARTCHAR U_7795\nENCODING 30613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\n9280\nF100\n9FE0\n9440\nF7C0\n9440\n9FE0\nF100\n0100\nENDCHAR\nSTARTCHAR U_7796\nENCODING 30614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9C0\nB940\nD220\nB9C0\nA880\nFB60\n1F00\n1500\n1B00\n1500\n1F00\nENDCHAR\nSTARTCHAR U_7797\nENCODING 30615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n97C0\n9440\nF7C0\n9440\nF7E0\n9400\n97E0\nF520\n9AA0\n0AC0\nENDCHAR\nSTARTCHAR U_7798\nENCODING 30616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA800\nABC0\nEA40\nABC0\nA800\nEEE0\nAAA0\nAEE0\nE800\n0FE0\nENDCHAR\nSTARTCHAR U_7799\nENCODING 30617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n9280\nF7C0\n9440\n97C0\nF440\n9FE0\nF280\n9440\n0820\nENDCHAR\nSTARTCHAR U_779A\nENCODING 30618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA820\nEBA0\nA100\nA7C0\nE540\nA7C0\nA540\nE7C0\n1860\nENDCHAR\nSTARTCHAR U_779B\nENCODING 30619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE540\nA940\nB2A0\nE4A0\nA800\nB880\nEA80\nAAE0\nAA80\nED80\n08E0\nENDCHAR\nSTARTCHAR U_779C\nENCODING 30620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9540\nFFE0\n9540\n9FE0\nF920\n9FE0\nF480\n9300\n1CE0\nENDCHAR\nSTARTCHAR U_779D\nENCODING 30621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nBFE0\nA540\nE6C0\nA540\nA7C0\nE100\nAFE0\nAAA0\nEFA0\n0860\nENDCHAR\nSTARTCHAR U_779E\nENCODING 30622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE440\nAFE0\nA440\nE7C0\nA100\nAFE0\nE920\nADA0\nAB60\nEDA0\n0960\nENDCHAR\nSTARTCHAR U_779F\nENCODING 30623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA280\nAFE0\nEAA0\nAFE0\nA000\nE7C0\nA000\nAFE0\nE540\n1B20\nENDCHAR\nSTARTCHAR U_77A0\nENCODING 30624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF920\n9540\n9FE0\nF820\n97C0\n9440\nF7C0\n9100\nF7C0\n9100\n0FE0\nENDCHAR\nSTARTCHAR U_77A1\nENCODING 30625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEBC0\nAA40\nBFC0\nEA40\nABC0\nBE40\nEA40\nAFC0\nA9A0\nF2A0\n2460\nENDCHAR\nSTARTCHAR U_77A2\nENCODING 30626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4940\nFFE0\nA0A0\n3E80\n2780\n2080\n3F80\nENDCHAR\nSTARTCHAR U_77A3\nENCODING 30627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nE7C0\nA540\nE7C0\nA100\nAFE0\nE920\nAFE0\nA540\nECA0\n17A0\nENDCHAR\nSTARTCHAR U_77A4\nENCODING 30628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nAEE0\nEAA0\nAFE0\nE920\nABA0\nA920\nEFE0\nA820\n0860\nENDCHAR\nSTARTCHAR U_77A5\nENCODING 30629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5500\nFDE0\n9740\nBC80\nD540\n9620\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_77A6\nENCODING 30630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nA100\nA7C0\nE440\nA7C0\nE280\nBFE0\nA440\nE440\n07C0\nENDCHAR\nSTARTCHAR U_77A7\nENCODING 30631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE500\nA900\nBFE0\nE900\nAFC0\nA900\nEFC0\nA900\nAFE0\nE540\n0AA0\nENDCHAR\nSTARTCHAR U_77A8\nENCODING 30632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEAA0\nA6C0\nAFE0\nE280\nAFE0\nA100\nE7C0\nA100\nAFE0\nE280\n0C60\nENDCHAR\nSTARTCHAR U_77A9\nENCODING 30633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA820\nAFE0\nE900\nAFE0\nE920\nAFE0\nA900\nEFE0\n1960\n2BA0\nENDCHAR\nSTARTCHAR U_77AA\nENCODING 30634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEF40\nAAA0\nA440\nEBA0\nB000\nA7C0\nE440\nA7C0\nA440\nE280\n1FE0\nENDCHAR\nSTARTCHAR U_77AB\nENCODING 30635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9280\n9FE0\nFAA0\n9FE0\n9440\nF7C0\n9440\nFFE0\n9100\n0100\nENDCHAR\nSTARTCHAR U_77AC\nENCODING 30636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE0C0\nAF20\nA540\nEFE0\nA820\nA440\nEFE0\nB240\nAFE0\nE840\n1040\nENDCHAR\nSTARTCHAR U_77AD\nENCODING 30637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9FE0\n9AA0\nF440\n97C0\n9C60\nF7C0\n9440\n97C0\nF540\n0B20\nENDCHAR\nSTARTCHAR U_77AE\nENCODING 30638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFF80\nAA80\nEFE0\nA120\nAEA0\nEAA0\nAE40\nAA40\nEEA0\n0B20\nENDCHAR\nSTARTCHAR U_77AF\nENCODING 30639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nAEE0\nEAA0\nAFE0\nEAA0\nABA0\nAAA0\nEBA0\nACA0\n0860\nENDCHAR\nSTARTCHAR U_77B0\nENCODING 30640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE80\nA480\nBFE0\nEAA0\nAFA0\nAAA0\nEEA0\nAAA0\nBF40\nE2A0\n0320\nENDCHAR\nSTARTCHAR U_77B1\nENCODING 30641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF480\n9FE0\n9480\nFFE0\n9540\n9FE0\nF540\n9FE0\nF100\n9FE0\n0100\nENDCHAR\nSTARTCHAR U_77B2\nENCODING 30642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFC0\nA280\nAFE0\nE520\nA900\nAFE0\nEAA0\nAFE0\nAAA0\nEBA0\n0860\nENDCHAR\nSTARTCHAR U_77B3\nENCODING 30643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA280\nE100\nBFE0\nA540\nE7C0\nA540\nAFE0\nE100\n1FE0\nENDCHAR\nSTARTCHAR U_77B4\nENCODING 30644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE800\nAFE0\nB540\nE540\nBFE0\nA540\nE540\nBFE0\nA540\nEAA0\n12A0\nENDCHAR\nSTARTCHAR U_77B5\nENCODING 30645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE920\nA540\nBFE0\nE540\nA920\nA540\nEFE0\nBB40\nA5E0\nE840\n1040\nENDCHAR\nSTARTCHAR U_77B6\nENCODING 30646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\n9540\nFFE0\n9440\n97C0\nF440\n97C0\n9440\nF7C0\n0C60\nENDCHAR\nSTARTCHAR U_77B7\nENCODING 30647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nAEE0\nEAA0\nAEE0\nABA0\nEAA0\nABA0\nAAA0\nEBA0\n0860\nENDCHAR\nSTARTCHAR U_77B8\nENCODING 30648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\nA480\nEA80\nBFE0\nEA80\nAFC0\nA200\nFFE0\n0A80\n3260\nENDCHAR\nSTARTCHAR U_77B9\nENCODING 30649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\nEE20\nA540\nFFE0\nAAC0\nF7A0\nA400\nA7C0\nEA80\n1300\n0CE0\nENDCHAR\nSTARTCHAR U_77BA\nENCODING 30650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE300\nA480\nBFC0\nE020\nAFE0\nAAA0\nEFE0\nA440\nA7C0\nE440\n07C0\nENDCHAR\nSTARTCHAR U_77BB\nENCODING 30651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE7C0\nA480\nAFE0\nFAA0\nAFE0\nA800\nEBC0\nA800\nAFE0\nF420\n27E0\nENDCHAR\nSTARTCHAR U_77BC\nENCODING 30652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE300\nA480\nAFC0\nF020\nAEE0\nAAA0\nEEE0\nA000\nA440\nEAA0\n1120\nENDCHAR\nSTARTCHAR U_77BD\nENCODING 30653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n23E0\nF880\n8BC0\nF940\n50A0\nFF80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_77BE\nENCODING 30654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4A40\n7BC0\n4E40\nFFE0\n90A0\n6FC0\n0400\n7FE0\nENDCHAR\nSTARTCHAR U_77BF\nENCODING 30655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4A40\n7BC0\n2200\n7FE0\nA200\n3FC0\n2200\n3FE0\nENDCHAR\nSTARTCHAR U_77C0\nENCODING 30656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A80\nFA80\nAF80\nF0E0\nAFA0\nE0A0\nAEA0\nAB40\nEAC0\n3120\n2220\nENDCHAR\nSTARTCHAR U_77C1\nENCODING 30657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E80\nE4A0\nBFC0\nAE80\nED80\nB540\nE620\nA140\nA520\nF440\n13C0\nENDCHAR\nSTARTCHAR U_77C2\nENCODING 30658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE7C0\nA440\nA7C0\nE000\nAEE0\nAAA0\nEEE0\nA100\nAFE0\nE540\n1920\nENDCHAR\nSTARTCHAR U_77C3\nENCODING 30659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nAAA0\nB740\nEFE0\nAAA0\nFFE0\nA000\nAFE0\nE100\n0300\nENDCHAR\nSTARTCHAR U_77C4\nENCODING 30660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFC0\nA100\nBFE0\nEAA0\nAFE0\nA100\nEFC0\nA100\nBFE0\nE540\n0AA0\nENDCHAR\nSTARTCHAR U_77C5\nENCODING 30661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEAA0\nA660\nEAA0\nA7E0\nEC80\nB7C0\nA480\nE7C0\n0480\n07E0\nENDCHAR\nSTARTCHAR U_77C6\nENCODING 30662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nEFE0\nA500\nEFE0\nB900\nEFC0\nA900\nAFE0\nE440\n0380\n0C60\nENDCHAR\nSTARTCHAR U_77C7\nENCODING 30663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE480\nAFE0\nA480\nEFE0\nA820\nAFE0\nEA40\nB580\nAB80\nE540\n0A20\nENDCHAR\nSTARTCHAR U_77C8\nENCODING 30664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE7C0\nA440\nE7C0\nA100\nAFE0\nF4A0\nAFE0\nA240\nE240\n04C0\nENDCHAR\nSTARTCHAR U_77C9\nENCODING 30665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA820\nE7C0\nA540\nA7C0\nFC40\nA7C0\nA440\nE7C0\n0C60\nENDCHAR\nSTARTCHAR U_77CA\nENCODING 30666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE480\nA5E0\nAB20\nFDE0\nAB20\nBDE0\nE280\nA7E0\nAAA0\nF6A0\n0080\nENDCHAR\nSTARTCHAR U_77CB\nENCODING 30667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nEA80\nAFE0\nEA80\nAFC0\nED40\nAFC0\nAD40\nEFE0\n1920\n2BA0\nENDCHAR\nSTARTCHAR U_77CC\nENCODING 30668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\nAA40\nEFE0\nAA40\nAFE0\nED40\nAFC0\nB540\nE7C0\n0C60\nENDCHAR\nSTARTCHAR U_77CD\nENCODING 30669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4A40\n7FC0\n2200\n7FC0\nA200\n3FC0\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_77CE\nENCODING 30670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE780\nA880\nBFE0\nEAA0\nAFE0\nA440\nE7C0\nA7C0\nAC80\nE300\n1CE0\nENDCHAR\nSTARTCHAR U_77CF\nENCODING 30671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n97C0\n9440\nF7C0\n9440\n9FE0\nF4A0\n9FE0\nF3C0\n9440\n08C0\nENDCHAR\nSTARTCHAR U_77D0\nENCODING 30672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFC0\nA100\nAFE0\nE920\nAAA0\nA500\nEFE0\nB500\nA7C0\nE500\n07E0\nENDCHAR\nSTARTCHAR U_77D1\nENCODING 30673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\nE100\nAFE0\nE920\nAB80\nE940\nAFC0\nF540\n9FE0\n2AA0\n5FE0\nENDCHAR\nSTARTCHAR U_77D2\nENCODING 30674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nEFE0\nA280\nEFE0\nAAA0\nFFE0\nA7C0\nA440\nE7C0\nA440\n07C0\nENDCHAR\nSTARTCHAR U_77D3\nENCODING 30675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE4E0\nBF80\nAAE0\nE420\nBFE0\nAA80\nEEE0\nAA80\nAEE0\nEAA0\n0AE0\nENDCHAR\nSTARTCHAR U_77D4\nENCODING 30676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9280\n9EE0\nFAA0\n9FE0\n9500\nFFE0\n9500\nF7C0\n9500\n07E0\nENDCHAR\nSTARTCHAR U_77D5\nENCODING 30677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F40\nA0A0\n4E40\nF0E0\n5F40\nAAA0\n3FC0\n2040\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_77D6\nENCODING 30678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nE000\nAEE0\nEBA0\nAFE0\nEA80\nAFE0\nEAA0\n8FE0\n1480\n27E0\nENDCHAR\nSTARTCHAR U_77D7\nENCODING 30679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n3280\n2980\n2480\nFFE0\n4A40\n6B40\n5AC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_77D8\nENCODING 30680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE540\nAFE0\nAAA0\nEFE0\nAAA0\nAFE0\nE100\nAFE0\nA100\nEFE0\n0AA0\nENDCHAR\nSTARTCHAR U_77D9\nENCODING 30681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nAEE0\nEAA0\nAAE0\nAF20\nEAE0\nAF60\nAAA0\nEF60\n0A60\nENDCHAR\nSTARTCHAR U_77DA\nENCODING 30682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA820\nAFE0\nEA80\nAFE0\nAAA0\nEFE0\nAAA0\nABE0\nF0A0\n27E0\nENDCHAR\nSTARTCHAR U_77DB\nENCODING 30683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n0080\n0D00\n0200\n7FE0\n0640\n0A80\n1200\n2200\n4200\n0E00\nENDCHAR\nSTARTCHAR U_77DC\nENCODING 30684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n2940\n1140\nFE20\n1500\n3080\n57E0\n9040\n1040\n1080\n7080\nENDCHAR\nSTARTCHAR U_77DD\nENCODING 30685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n1100\n6280\n2640\nF920\n2FC0\n6040\nA480\n2300\n2100\n6100\nENDCHAR\nSTARTCHAR U_77DE\nENCODING 30686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0500\nFFE0\n1240\n2200\nFFC0\n5140\n6EC0\n4A40\n4E40\n40C0\nENDCHAR\nSTARTCHAR U_77DF\nENCODING 30687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n54A0\n22C0\nFFE0\n2420\n27E0\n6420\nA7E0\n2420\n2420\n6460\nENDCHAR\nSTARTCHAR U_77E0\nENCODING 30688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n5140\n27E0\nF940\n2FE0\n2800\n63E0\nA220\n23E0\n2220\nE3E0\nENDCHAR\nSTARTCHAR U_77E1\nENCODING 30689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nFAA0\n5EE0\n2500\nF7E0\n2900\n3FE0\n6900\nAFE0\n2240\n67E0\nENDCHAR\nSTARTCHAR U_77E2\nENCODING 30690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2000\n7FC0\n4400\n8400\nFFE0\n0400\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_77E3\nENCODING 30691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0880\n3F40\n1000\n1FC0\n2200\n7FE0\n0200\n0500\n18E0\n6040\nENDCHAR\nSTARTCHAR U_77E4\nENCODING 30692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n1200\n17E0\nF900\n8100\nFFE0\n1100\n1280\n1280\nA440\n4820\nENDCHAR\nSTARTCHAR U_77E5\nENCODING 30693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2000\n7DE0\n9120\n1120\nFF20\n1120\n1120\n2920\n45E0\n8000\nENDCHAR\nSTARTCHAR U_77E6\nENCODING 30694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1F00\n2200\n7FC0\nC800\n5FC0\n6200\n7FE0\n4500\n8880\nB060\nENDCHAR\nSTARTCHAR U_77E7\nENCODING 30695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47A0\n40A0\n78A0\nA3A0\n2220\nFBA0\n20A0\n30A0\n28A0\n44A0\n8320\nENDCHAR\nSTARTCHAR U_77E8\nENCODING 30696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n4380\n7880\nA080\n27E0\nF880\n2080\n3140\n2A40\n4420\n8820\nENDCHAR\nSTARTCHAR U_77E9\nENCODING 30697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n43E0\n7E00\n9200\n13E0\nFE20\n1220\n2BE0\n2A00\n4A00\n83E0\nENDCHAR\nSTARTCHAR U_77EA\nENCODING 30698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n43C0\n7A40\nA340\n2240\nFFE0\n2340\n22C0\n5240\n4440\n88C0\nENDCHAR\nSTARTCHAR U_77EB\nENCODING 30699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n4700\n7100\nAFE0\n2240\nFC20\n2240\n2240\n5240\n5440\n8840\nENDCHAR\nSTARTCHAR U_77EC\nENCODING 30700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4540\n7D40\n9540\n13A0\nF900\n1100\n17C0\n2900\n4500\n8FE0\nENDCHAR\nSTARTCHAR U_77ED\nENCODING 30701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4000\n77C0\nA440\n2440\nF7C0\n2000\n2440\n5280\n4080\n8FE0\nENDCHAR\nSTARTCHAR U_77EE\nENCODING 30702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n4700\n7900\nAFE0\n2540\nF920\n2100\n2FE0\n5240\n4980\n8660\nENDCHAR\nSTARTCHAR U_77EF\nENCODING 30703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4100\n7FE0\nA440\n2BA0\nF280\n2FE0\n2820\n3BA0\n4AA0\n8BE0\nENDCHAR\nSTARTCHAR U_77F0\nENCODING 30704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n4240\n7FE0\nAAA0\n2FE0\nF000\n27C0\n2440\n37C0\n4C40\n87C0\nENDCHAR\nSTARTCHAR U_77F1\nENCODING 30705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n47E0\n7A40\nA7E0\n2480\nFFE0\n2480\n27E0\n3240\n4980\n8660\nENDCHAR\nSTARTCHAR U_77F2\nENCODING 30706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4AA0\n7FE0\nA480\n2AE0\nFE80\n2AE0\n2EA0\n2AC0\n5E80\n8AE0\nENDCHAR\nSTARTCHAR U_77F3\nENCODING 30707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n0400\n0800\n1000\n3FC0\n5040\n9040\n1040\n1FC0\n1040\nENDCHAR\nSTARTCHAR U_77F4\nENCODING 30708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nF7E0\n2080\n4080\n7880\nC880\n4880\n4880\n7880\n4A80\n0100\nENDCHAR\nSTARTCHAR U_77F5\nENCODING 30709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\nF840\n2240\n2240\n7A40\n4A40\nCA40\n4A40\n7A40\n4940\n0080\nENDCHAR\nSTARTCHAR U_77F6\nENCODING 30710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nFC80\n2480\n2480\n7480\nD480\n5480\n5480\n74A0\n08A0\n30E0\nENDCHAR\nSTARTCHAR U_77F7\nENCODING 30711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2040\n2080\n2080\n7880\nCFE0\n4880\n4880\n7C80\n4A80\n0100\nENDCHAR\nSTARTCHAR U_77F8\nENCODING 30712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\n2080\n4080\n7FE0\nC880\n4880\n4880\n7880\n4880\n0080\nENDCHAR\nSTARTCHAR U_77F9\nENCODING 30713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2280\n2280\n7A80\n4A80\nCA80\n4A80\n4A80\n7AA0\n04A0\n0860\nENDCHAR\nSTARTCHAR U_77FA\nENCODING 30714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8C0\n2700\n2100\n2100\n79E0\nCF00\n4900\n4900\n7920\n4920\n00E0\nENDCHAR\nSTARTCHAR U_77FB\nENCODING 30715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFA00\n23E0\n4400\n7BC0\nC880\n4900\n4900\n7A20\n4A20\n01E0\nENDCHAR\nSTARTCHAR U_77FC\nENCODING 30716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2080\n2080\n4080\n7880\nC880\n4880\n4880\n7880\n4880\n07E0\nENDCHAR\nSTARTCHAR U_77FD\nENCODING 30717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n21E0\n4220\n7420\nDA40\n5140\n5080\n7080\n5100\n0600\nENDCHAR\nSTARTCHAR U_77FE\nENCODING 30718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF80\n2480\n2480\n7480\n5680\nD580\n5480\n5480\n74A0\n08A0\n1060\nENDCHAR\nSTARTCHAR U_77FF\nENCODING 30719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n27E0\n2400\n7400\n5400\nD400\n5400\n5400\n7400\n0800\n1000\nENDCHAR\nSTARTCHAR U_7800\nENCODING 30720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nF080\n2100\n2200\n77E0\nD2A0\n52A0\n5520\n7920\n5220\n04C0\nENDCHAR\nSTARTCHAR U_7801\nENCODING 30721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF840\n2240\n2240\n7A40\nCFE0\n4820\n4FA0\n7820\n4920\n00C0\nENDCHAR\nSTARTCHAR U_7802\nENCODING 30722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF880\n22C0\n22A0\n7CA0\nCC80\n48A0\n4840\n7880\n4900\n0600\nENDCHAR\nSTARTCHAR U_7803\nENCODING 30723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2240\n2340\n22C0\n7A40\nCFE0\n4A40\n4A40\n7A40\n4D40\n0880\nENDCHAR\nSTARTCHAR U_7804\nENCODING 30724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n27C0\n2140\n7940\nCFE0\n4900\n4B80\n7A80\n4440\n0820\nENDCHAR\nSTARTCHAR U_7805\nENCODING 30725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n2120\n2F40\n7380\n5540\nD540\n5540\n7540\n5920\n0320\nENDCHAR\nSTARTCHAR U_7806\nENCODING 30726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF880\n27E0\n2080\n7880\n4FE0\nC880\n4880\n7940\n4A20\n0420\nENDCHAR\nSTARTCHAR U_7807\nENCODING 30727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n2FE0\n4440\n7A80\nCA80\n4900\n4A80\n7A80\n4440\n0820\nENDCHAR\nSTARTCHAR U_7808\nENCODING 30728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nF7E0\n2400\n45E0\n7520\nD520\n5560\n5500\n7520\n5520\n08E0\nENDCHAR\nSTARTCHAR U_7809\nENCODING 30729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n0400\n3FC0\n0400\nFFE0\n0400\nFFE0\n3040\nDFC0\n1040\nENDCHAR\nSTARTCHAR U_780A\nENCODING 30730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n2FE0\n4000\n7780\nD480\n5480\n5480\n74A0\n54A0\n0860\nENDCHAR\nSTARTCHAR U_780B\nENCODING 30731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF880\n2080\n4280\n7AE0\nCA80\n4A80\n4A80\n7A80\n4A80\n07E0\nENDCHAR\nSTARTCHAR U_780C\nENCODING 30732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFDE0\n24A0\n27A0\n7CA0\nD4A0\n55A0\n56A0\n7520\n5220\n0460\nENDCHAR\nSTARTCHAR U_780D\nENCODING 30733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFA00\n23E0\n2420\n7940\nC900\n4900\n4900\n7A80\n4C40\n0820\nENDCHAR\nSTARTCHAR U_780E\nENCODING 30734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n2280\n2440\n7820\nCA40\n4A40\n4A40\n4A40\n7A40\n4440\n0840\nENDCHAR\nSTARTCHAR U_780F\nENCODING 30735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFA80\n2440\n2820\n7FC0\nCA40\n4A40\n4A40\n7A40\n4D40\n0880\nENDCHAR\nSTARTCHAR U_7810\nENCODING 30736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nFA40\n2240\n2280\n7AE0\nCA20\n4A40\n4B40\n7C80\n4940\n1620\nENDCHAR\nSTARTCHAR U_7811\nENCODING 30737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF840\n2140\n2240\n7FE0\nC840\n48C0\n4940\n7A40\n4540\n0880\nENDCHAR\nSTARTCHAR U_7812\nENCODING 30738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nF480\n2480\n24A0\n77C0\nD480\n5480\n5480\n75A0\n5620\n0460\nENDCHAR\nSTARTCHAR U_7813\nENCODING 30739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nFA40\n2240\n2260\n7C00\nCBE0\n4A40\n4940\n7880\n4940\n0620\nENDCHAR\nSTARTCHAR U_7814\nENCODING 30740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n2240\n2240\n4240\nFFE0\n4A40\n4A40\n4A40\n7A40\n4C40\n0840\nENDCHAR\nSTARTCHAR U_7815\nENCODING 30741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF7C0\n2240\n4240\n7A40\nCD60\n4900\n4FE0\n7900\n4900\n0100\nENDCHAR\nSTARTCHAR U_7816\nENCODING 30742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n2100\n4FE0\n7200\nD200\n57C0\n5040\n7280\n0100\n0080\nENDCHAR\nSTARTCHAR U_7817\nENCODING 30743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2100\n2200\n7A80\nCBE0\n4880\n4FE0\n7880\n4880\n0080\nENDCHAR\nSTARTCHAR U_7818\nENCODING 30744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFBE0\n2080\n22A0\n7AA0\nCAA0\n4BE0\n4880\n78A0\n48A0\n0060\nENDCHAR\nSTARTCHAR U_7819\nENCODING 30745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n2200\n4380\n7280\nD280\n5580\n5480\n7480\n55A0\n0660\nENDCHAR\nSTARTCHAR U_781A\nENCODING 30746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nFC40\n2540\n2540\n7D40\nCD40\n4D40\n4900\n79A0\n4AA0\n0C60\nENDCHAR\nSTARTCHAR U_781B\nENCODING 30747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n2280\n2440\n7920\nC900\n4FC0\n4840\n7880\n4900\n0200\nENDCHAR\nSTARTCHAR U_781C\nENCODING 30748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n2440\n26C0\n7540\n5540\nD540\n56C0\n5440\n7440\n4860\n1020\nENDCHAR\nSTARTCHAR U_781D\nENCODING 30749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n27C0\n2100\n7900\nCFE0\n4900\n4900\n7A40\n4FA0\n0220\nENDCHAR\nSTARTCHAR U_781E\nENCODING 30750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n27E0\n2100\n77C0\nD100\n5380\n5540\n7920\n5100\n0100\nENDCHAR\nSTARTCHAR U_781F\nENCODING 30751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFA00\n23E0\n2500\n79E0\nC900\n4900\n49E0\n7900\n4900\n0100\nENDCHAR\nSTARTCHAR U_7820\nENCODING 30752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\nFA40\n2240\n23C0\n7A40\nCA40\n4BC0\n4A40\n7A40\n4A40\n0FE0\nENDCHAR\nSTARTCHAR U_7821\nENCODING 30753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF900\n2100\n2100\n7FC0\nC900\n4900\n4940\n7920\n4900\n07E0\nENDCHAR\nSTARTCHAR U_7822\nENCODING 30754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF840\n2040\n2740\n7540\nD540\n5740\n5540\n7040\n5140\n0080\nENDCHAR\nSTARTCHAR U_7823\nENCODING 30755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF880\n27E0\n2420\n7A00\nCA40\n4A80\n4B00\n7A20\n4A20\n01E0\nENDCHAR\nSTARTCHAR U_7824\nENCODING 30756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFC00\n27E0\n2900\n75C0\nD740\n5D40\n5500\n7520\n5420\n03E0\nENDCHAR\nSTARTCHAR U_7825\nENCODING 30757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0060\nFF80\n2480\n2480\n77E0\nD480\n5480\n5480\n74A0\n5760\n04A0\nENDCHAR\nSTARTCHAR U_7826\nENCODING 30758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1260\n5F80\n5220\nFBE0\n0000\nFFE0\n1000\n3FC0\n5040\n9FC0\n1040\nENDCHAR\nSTARTCHAR U_7827\nENCODING 30759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF880\n20E0\n2080\n7880\nCBE0\n4A20\n4A20\n7A20\n4BE0\n0220\nENDCHAR\nSTARTCHAR U_7828\nENCODING 30760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF880\n27E0\n2420\n77E0\nD400\n57C0\n5480\n7520\n5520\n08E0\nENDCHAR\nSTARTCHAR U_7829\nENCODING 30761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF7E0\n42A0\n4FE0\n7A80\nDFE0\n52A0\n52A0\n72E0\n5480\n0880\nENDCHAR\nSTARTCHAR U_782A\nENCODING 30762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n2540\n24C0\n4440\n7FE0\nD540\n54C0\n5440\n77E0\n5040\n0180\nENDCHAR\nSTARTCHAR U_782B\nENCODING 30763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF880\n27E0\n2080\n7880\nC880\n4BE0\n4880\n7880\n4880\n07E0\nENDCHAR\nSTARTCHAR U_782C\nENCODING 30764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF880\n27E0\n2000\n7C40\nCC40\n4A80\n4A80\n7A80\n4900\n07E0\nENDCHAR\nSTARTCHAR U_782D\nENCODING 30765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0060\nFF80\n2100\n2080\n7FE0\nC840\n4880\n4900\n7A00\n4D00\n08E0\nENDCHAR\nSTARTCHAR U_782E\nENCODING 30766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFD40\n4880\n3140\n4A20\nFFE0\n0800\n1FC0\n7040\n1FC0\n1040\nENDCHAR\nSTARTCHAR U_782F\nENCODING 30767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFA80\n20A0\n27C0\n7280\nD280\n52C0\n52A0\n74A0\n5AA0\n0100\nENDCHAR\nSTARTCHAR U_7830\nENCODING 30768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\n24A0\n7AA0\n4AC0\nC880\n4FE0\n4880\n7880\n4880\n0080\nENDCHAR\nSTARTCHAR U_7831\nENCODING 30769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD80\n2180\n2240\n7D20\nC880\n4FE0\n4840\n4A80\n7900\n4880\n0040\nENDCHAR\nSTARTCHAR U_7832\nENCODING 30770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFBE0\n2420\n2820\n77A0\nD4A0\n57A0\n5440\n7420\n5420\n03E0\nENDCHAR\nSTARTCHAR U_7833\nENCODING 30771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2100\n2100\n4100\nF9E0\n4B20\n4D20\n4920\n7920\n49E0\n0120\nENDCHAR\nSTARTCHAR U_7834\nENCODING 30772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF880\n27E0\n24A0\n7480\nD7E0\n5520\n5540\n7480\n0940\n1620\nENDCHAR\nSTARTCHAR U_7835\nENCODING 30773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n2100\n27E0\n2100\n7380\n5540\nD920\n5100\n77C0\n5100\n0100\nENDCHAR\nSTARTCHAR U_7836\nENCODING 30774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFD00\n23E0\n2220\n7A20\n4BE0\nCA20\n4A20\n4A20\n7BE0\n4A20\nENDCHAR\nSTARTCHAR U_7837\nENCODING 30775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF880\n23E0\n22A0\n7BE0\n4AA0\nCAA0\n4BE0\n7880\n4880\n0080\nENDCHAR\nSTARTCHAR U_7838\nENCODING 30776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n2480\n2480\n77E0\nD6A0\n56A0\n56A0\n56E0\n7480\n4480\n07E0\nENDCHAR\nSTARTCHAR U_7839\nENCODING 30777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nFFE0\n2240\n4000\n7440\nD240\n5240\n5280\n7180\n5240\n0C20\nENDCHAR\nSTARTCHAR U_783A\nENCODING 30778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFC00\n2400\n47E0\n7500\nD5E0\n5520\n5520\n7520\n5AA0\n0440\nENDCHAR\nSTARTCHAR U_783B\nENCODING 30779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0A80\n1320\n6DE0\n0000\n7FE0\n1000\n3FC0\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_783C\nENCODING 30780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFA80\n2280\n2440\n7820\nD7C0\n5100\n5100\n7100\n5100\n0FE0\nENDCHAR\nSTARTCHAR U_783D\nENCODING 30781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nF7E0\n2520\n4520\n77E0\nD520\n5520\n57E0\n7520\n4920\n1060\nENDCHAR\nSTARTCHAR U_783E\nENCODING 30782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF060\n2780\n2400\n4480\n7480\nDFE0\n5080\n52C0\n74A0\n58A0\n11A0\nENDCHAR\nSTARTCHAR U_783F\nENCODING 30783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF880\n47E0\n4400\n7480\nD480\n5500\n7540\n5A20\n0BE0\n1020\nENDCHAR\nSTARTCHAR U_7840\nENCODING 30784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFAA0\n22A0\n22A0\n7BE0\nC880\n4AA0\n4AA0\n7AA0\n4BE0\n0220\nENDCHAR\nSTARTCHAR U_7841\nENCODING 30785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nF7C0\n2080\n4100\n7280\nDC60\n57C0\n5100\n7100\n5100\n0FE0\nENDCHAR\nSTARTCHAR U_7842\nENCODING 30786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF980\n2240\n2420\n7BE0\n4900\nC900\n4BC0\n4900\n7900\n4FE0\nENDCHAR\nSTARTCHAR U_7843\nENCODING 30787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nFD00\n27C0\n2900\n7100\nDFE0\n5100\n5380\n7540\n5920\n1120\nENDCHAR\nSTARTCHAR U_7844\nENCODING 30788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF920\n2540\n4340\n7FE0\n4A80\nCA80\n4A80\n7AA0\n44A0\n0860\nENDCHAR\nSTARTCHAR U_7845\nENCODING 30789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n2100\n4100\n7FE0\nD100\n5100\n57C0\n7100\n5100\n0FE0\nENDCHAR\nSTARTCHAR U_7846\nENCODING 30790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF880\n2140\n2220\n45C0\n7800\nCBE0\n4A20\n4A20\n7BE0\n4220\nENDCHAR\nSTARTCHAR U_7847\nENCODING 30791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2420\n2660\n75A0\nD4A0\n5560\n5620\n7420\n57E0\n0420\nENDCHAR\nSTARTCHAR U_7848\nENCODING 30792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF880\n27E0\n2080\n7BE0\nC800\n4BE0\n4A20\n7A20\n4BE0\n0220\nENDCHAR\nSTARTCHAR U_7849\nENCODING 30793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n2140\n27E0\n7140\nD7C0\n5100\n57C0\n7100\n5FE0\n0100\nENDCHAR\nSTARTCHAR U_784A\nENCODING 30794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF3C0\n2480\n27E0\n7C00\nD5C0\n5540\n55C0\n7520\n5520\n08E0\nENDCHAR\nSTARTCHAR U_784B\nENCODING 30795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2100\n2220\n7B40\n4880\nC920\n4A40\n7880\n4940\n0620\nENDCHAR\nSTARTCHAR U_784C\nENCODING 30796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF3E0\n2640\n2980\n7240\nD420\n53E0\n5220\n7220\n53E0\n0220\nENDCHAR\nSTARTCHAR U_784D\nENCODING 30797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n27C0\n2440\n77C0\nD540\n5520\n5540\n7480\n5540\n0620\nENDCHAR\nSTARTCHAR U_784E\nENCODING 30798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F20\nFA20\n2AA0\n2AA0\n7FA0\nDAA0\n5AA0\n5AA0\n7A20\n5A20\n1260\nENDCHAR\nSTARTCHAR U_784F\nENCODING 30799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\n2440\n2440\n4440\n7EE0\nD440\n5440\n5440\n7840\n4840\n1040\nENDCHAR\nSTARTCHAR U_7850\nENCODING 30800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF820\n4BA0\n4820\nEBA0\nAAA0\nABA0\nAAA0\nE820\nA820\n0860\nENDCHAR\nSTARTCHAR U_7851\nENCODING 30801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0420\nFA40\n27E0\n4240\n7A40\nCFE0\n4A40\n4A40\n7C40\n4440\n0840\nENDCHAR\nSTARTCHAR U_7852\nENCODING 30802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF280\n4280\n4FE0\nEAA0\nAAA0\nAAA0\nACE0\nE820\nAFE0\n0820\nENDCHAR\nSTARTCHAR U_7853\nENCODING 30803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBA0\n2120\n2140\n7FE0\n4900\nCA40\n4EC0\n4B00\n7A20\n49E0\nENDCHAR\nSTARTCHAR U_7854\nENCODING 30804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFA80\n2280\n4FE0\n7A80\nCA80\n4FE0\n4800\n7A80\n4460\n0820\nENDCHAR\nSTARTCHAR U_7855\nENCODING 30805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF880\n23E0\n2220\n7AA0\nCAA0\n4AA0\n4AA0\n7AA0\n4940\n0620\nENDCHAR\nSTARTCHAR U_7856\nENCODING 30806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n27E0\n2920\n7540\nD100\n5FE0\n5100\n7280\n5440\n0820\nENDCHAR\nSTARTCHAR U_7857\nENCODING 30807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0260\nFF80\n22A0\n2120\n72E0\nD000\n5FC0\n5280\n72A0\n54A0\n0860\nENDCHAR\nSTARTCHAR U_7858\nENCODING 30808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2820\n2820\n4BA0\nFAA0\n5AA0\n5BA0\n5820\n7820\n4FE0\n0820\nENDCHAR\nSTARTCHAR U_7859\nENCODING 30809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFAA0\n22A0\n23E0\n7800\n4BE0\nC820\n4BE0\n4A00\n7A20\n49E0\nENDCHAR\nSTARTCHAR U_785A\nENCODING 30810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF700\n2100\n47E0\n7280\nD440\n5AA0\n5280\n7280\n5480\n0880\nENDCHAR\nSTARTCHAR U_785B\nENCODING 30811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF900\n2FE0\n2280\n7280\nD6C0\n5AA0\n52A0\n7280\n5480\n0980\nENDCHAR\nSTARTCHAR U_785C\nENCODING 30812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF000\n22A0\n2540\n7540\nD2A0\n5000\n57C0\n7100\n5100\n07E0\nENDCHAR\nSTARTCHAR U_785D\nENCODING 30813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF4A0\n22C0\n2080\n77E0\nD420\n57E0\n5420\n77E0\n5420\n04E0\nENDCHAR\nSTARTCHAR U_785E\nENCODING 30814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n23E0\n2480\n77E0\nD000\n53E0\n5220\n7220\n53E0\n0220\nENDCHAR\nSTARTCHAR U_785F\nENCODING 30815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C60\nF7C0\n2540\n2560\n7D40\n5540\nD540\n57E0\n7400\n4B00\n10E0\nENDCHAR\nSTARTCHAR U_7860\nENCODING 30816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n27C0\n2440\n77C0\nD440\n57E0\n5540\n7480\n5540\n0620\nENDCHAR\nSTARTCHAR U_7861\nENCODING 30817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\n4920\n4100\n7FE0\n5200\nD280\n5500\n5A40\n77E0\n5220\nENDCHAR\nSTARTCHAR U_7862\nENCODING 30818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF280\n2440\n2FE0\n7100\nDFE0\n5100\n5540\n7520\n5920\n0300\nENDCHAR\nSTARTCHAR U_7863\nENCODING 30819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBE0\n2140\n27E0\n7900\nCBC0\n4C80\n4BE0\n7880\n4880\n0180\nENDCHAR\nSTARTCHAR U_7864\nENCODING 30820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n2FE0\n2540\n7540\nDBA0\n5120\n5100\n7280\n5440\n0820\nENDCHAR\nSTARTCHAR U_7865\nENCODING 30821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nF480\n2FE0\n2440\n7680\nD740\n56A0\n5740\n5AA0\n7B20\n15E0\nENDCHAR\nSTARTCHAR U_7866\nENCODING 30822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF900\n27C0\n2100\n7FE0\nCA40\n4A40\n4FE0\n7A40\n4440\n0840\nENDCHAR\nSTARTCHAR U_7867\nENCODING 30823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2140\n23E0\n42A0\n7BE0\nCAA0\n4BE0\n4AA0\n7AA0\n4AA0\n0240\nENDCHAR\nSTARTCHAR U_7868\nENCODING 30824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2100\n27C0\n7540\nD7C0\n5540\n57C0\n7100\n5FE0\n0100\nENDCHAR\nSTARTCHAR U_7869\nENCODING 30825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFF80\n2400\n37E0\nE480\n2880\nFFE0\n0800\n3FC0\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_786A\nENCODING 30826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\nFEC0\n22A0\n2FE0\n7280\nD2A0\n53A0\n5EC0\n72A0\n5360\n0620\nENDCHAR\nSTARTCHAR U_786B\nENCODING 30827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2240\n27C0\n7020\nD540\n5540\n5540\n7540\n5940\n1060\nENDCHAR\nSTARTCHAR U_786C\nENCODING 30828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF100\n27E0\n2520\n77E0\nD520\n57E0\n5900\n7500\n5300\n0CE0\nENDCHAR\nSTARTCHAR U_786D\nENCODING 30829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nF240\n27E0\n2240\n7080\nD7E0\n5200\n5200\n7200\n5200\n03E0\nENDCHAR\nSTARTCHAR U_786E\nENCODING 30830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF3C0\n2480\n4FE0\nF520\n57E0\n5520\n57E0\n7520\n4520\n0860\nENDCHAR\nSTARTCHAR U_786F\nENCODING 30831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n2440\n27C0\n7440\nD7C0\n5440\n57C0\n72A0\n54A0\n0860\nENDCHAR\nSTARTCHAR U_7870\nENCODING 30832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2540\nA920\n5140\nCF80\n4000\nFFE0\n1000\n3FC0\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_7871\nENCODING 30833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF520\n2520\n27E0\n7520\nD5A0\n5760\n5520\n7520\n57E0\n0420\nENDCHAR\nSTARTCHAR U_7872\nENCODING 30834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n2440\n2920\n4280\n7A40\nCC20\n4BC0\n4A40\n4A40\n7BC0\n4A40\nENDCHAR\nSTARTCHAR U_7873\nENCODING 30835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n2100\n4FE0\n7280\nD6C0\n5AA0\n72A0\n5480\n0A80\n1100\nENDCHAR\nSTARTCHAR U_7874\nENCODING 30836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nF7E0\n2240\n2100\n7A80\nCEA0\n4AC0\n4B80\n7AA0\n4AA0\n02E0\nENDCHAR\nSTARTCHAR U_7875\nENCODING 30837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF8E0\n2080\n23E0\n7A20\n4B60\nCAA0\n4B60\n7A20\n4BE0\n0220\nENDCHAR\nSTARTCHAR U_7876\nENCODING 30838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF520\n27E0\n2100\n7280\n5440\nD920\n57C0\n5040\n7080\n5100\nENDCHAR\nSTARTCHAR U_7877\nENCODING 30839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n2280\n2440\n7BA0\nD000\n5A40\n5540\n7440\n5080\n0FE0\nENDCHAR\nSTARTCHAR U_7878\nENCODING 30840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFAA0\n23E0\n2000\n77E0\nD400\n55C0\n5480\n77E0\n4880\n1080\nENDCHAR\nSTARTCHAR U_7879\nENCODING 30841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE940\n4940\n5F40\nEA20\nAEA0\nB880\nA880\nA900\nE940\nA920\n0BE0\nENDCHAR\nSTARTCHAR U_787A\nENCODING 30842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2100\n2220\n4540\n7D80\nD2C0\n55A0\n52A0\n7580\n4880\n0300\nENDCHAR\nSTARTCHAR U_787B\nENCODING 30843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA220\nF940\nA8C0\nF940\nA220\nFFE0\n0800\n3FC0\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_787C\nENCODING 30844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\n4AA0\n4AA0\nEEE0\nAAA0\nAAA0\nAEE0\nAAA0\nEAA0\nB2A0\n2760\nENDCHAR\nSTARTCHAR U_787D\nENCODING 30845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2240\n2520\n7FC0\n5540\nD7C0\n5540\n77C0\n5120\n01E0\nENDCHAR\nSTARTCHAR U_787E\nENCODING 30846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF100\n2FE0\n2540\n7540\nDFE0\n5540\n5540\n7FE0\n5100\n07C0\nENDCHAR\nSTARTCHAR U_787F\nENCODING 30847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2820\n2280\n7440\nD000\n57C0\n5100\n7100\n5100\n0FE0\nENDCHAR\nSTARTCHAR U_7880\nENCODING 30848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n2480\n2100\n77C0\nD140\n5FE0\n5140\n77C0\n4100\n0300\nENDCHAR\nSTARTCHAR U_7881\nENCODING 30849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n7FE0\n1080\n1E80\n1780\n1080\nFFE0\n5040\nBFA0\n5080\n1F80\nENDCHAR\nSTARTCHAR U_7882\nENCODING 30850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2820\n27C0\n7800\nCFE0\n4900\n4B40\n7D20\n4920\n0300\nENDCHAR\nSTARTCHAR U_7883\nENCODING 30851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2100\n27C0\n7100\nDFE0\n5440\n57C0\n7440\n57C0\n04C0\nENDCHAR\nSTARTCHAR U_7884\nENCODING 30852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nF480\n2FE0\n2480\n76C0\nDDA0\n56A0\n54A0\n7480\n5480\n0480\nENDCHAR\nSTARTCHAR U_7885\nENCODING 30853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE8A0\n4B20\n4920\nEFE0\nA920\nABA0\nAD60\nE920\nAFE0\n0820\nENDCHAR\nSTARTCHAR U_7886\nENCODING 30854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n2920\nCFC0\n4B00\n5480\nFFE0\n1000\n3FC0\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_7887\nENCODING 30855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2420\n2000\n77E0\nD080\n5480\n54E0\n7480\n5A80\n11E0\nENDCHAR\nSTARTCHAR U_7888\nENCODING 30856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\nFA80\n23E0\n6280\n7B60\nCA20\n4BE0\n4A20\n7BE0\n4A20\n03E0\nENDCHAR\nSTARTCHAR U_7889\nENCODING 30857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF920\n4BA0\n4920\nEFE0\nA820\nABA0\nAAA0\nEBA0\nB020\n2060\nENDCHAR\nSTARTCHAR U_788A\nENCODING 30858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF7E0\n2280\n4120\n7AA0\nCCC0\n4FE0\n4A80\n7900\n4AA0\n0460\nENDCHAR\nSTARTCHAR U_788B\nENCODING 30859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF540\n27C0\n4000\n7FE0\nD040\n5740\n5540\n7740\n5040\n00C0\nENDCHAR\nSTARTCHAR U_788C\nENCODING 30860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF840\n27C0\n2040\n7FE0\nD920\n5540\n5380\n7540\n5920\n0300\nENDCHAR\nSTARTCHAR U_788D\nENCODING 30861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n27C0\n2440\n77C0\nD000\n57E0\n5080\n7FE0\n5480\n0380\nENDCHAR\nSTARTCHAR U_788E\nENCODING 30862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2440\n2440\n7AA0\nD120\n5100\n5FE0\n7100\n5100\n0100\nENDCHAR\nSTARTCHAR U_788F\nENCODING 30863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nF7E0\n2240\n27E0\n7800\nCBE0\n4A20\n4BE0\n7A20\n4BE0\n0220\nENDCHAR\nSTARTCHAR U_7890\nENCODING 30864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF7C0\n2200\n4FE0\n7480\nDA40\n57E0\n5480\n7300\n44E0\n1840\nENDCHAR\nSTARTCHAR U_7891\nENCODING 30865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2520\n27E0\n7520\nD7E0\n5280\n5FE0\n7080\n5080\n0080\nENDCHAR\nSTARTCHAR U_7892\nENCODING 30866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n2280\n2440\n7BA0\n5100\nDFC0\n5100\n5540\n7380\n4FE0\nENDCHAR\nSTARTCHAR U_7893\nENCODING 30867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFA80\n27E0\n2C80\n77E0\nD480\n5480\n57E0\n7480\n5480\n07E0\nENDCHAR\nSTARTCHAR U_7894\nENCODING 30868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nEEC0\n40A0\n5FE0\nE280\nAA80\nAB80\nAA80\nEAA0\nAF60\n1820\nENDCHAR\nSTARTCHAR U_7895\nENCODING 30869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2280\n2440\n7FE0\nD040\n5740\n5540\n7740\n5040\n01C0\nENDCHAR\nSTARTCHAR U_7896\nENCODING 30870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\nF440\n4BA0\n4000\nEFE0\nAAA0\nAAA0\nAFE0\nEAA0\nAAA0\n0860\nENDCHAR\nSTARTCHAR U_7897\nENCODING 30871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2A20\n27C0\n7540\nD540\n5340\n53C0\n7520\n5520\n08E0\nENDCHAR\nSTARTCHAR U_7898\nENCODING 30872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n2FE0\n2AA0\n7FE0\nDAA0\n5AA0\n5FE0\n7280\n5440\n0820\nENDCHAR\nSTARTCHAR U_7899\nENCODING 30873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF6A0\n2520\n27E0\n7520\nD560\n5560\n5560\n77E0\n5420\n0460\nENDCHAR\nSTARTCHAR U_789A\nENCODING 30874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2240\n2180\n77E0\nD000\n53E0\n5220\n7220\n53E0\n0220\nENDCHAR\nSTARTCHAR U_789B\nENCODING 30875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2100\n27C0\n7100\nDFE0\n5440\n5540\n7540\n5280\n0C60\nENDCHAR\nSTARTCHAR U_789C\nENCODING 30876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF240\n27A0\n2100\n7FE0\nD540\n5AA0\n5520\n7240\n5180\n0600\nENDCHAR\nSTARTCHAR U_789D\nENCODING 30877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n4100\n4FE0\n8AA0\nEAA0\nAAA0\nAAA0\nA100\nEFE0\n8280\n0C60\nENDCHAR\nSTARTCHAR U_789E\nENCODING 30878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1080\n1F80\n0000\n7BC0\n4A40\nFFE0\n1000\n3FC0\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_789F\nENCODING 30879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nFFE0\n2540\n25C0\n7400\nD7E0\n5100\n5FE0\n7580\n5940\n1120\nENDCHAR\nSTARTCHAR U_78A0\nENCODING 30880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2440\n27C0\n7000\nDFE0\n5820\n57C0\n7100\n5500\n0200\nENDCHAR\nSTARTCHAR U_78A1\nENCODING 30881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2100\n2FE0\n7540\nD540\n5FE0\n5540\n77E0\n5040\n0180\nENDCHAR\nSTARTCHAR U_78A2\nENCODING 30882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n4740\n4540\nEFE0\nA820\nABA0\nAAA0\nEBA0\nA820\n0860\nENDCHAR\nSTARTCHAR U_78A3\nENCODING 30883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n27C0\n2440\n77C0\nD200\n57E0\n5D20\n76A0\n57A0\n00C0\nENDCHAR\nSTARTCHAR U_78A4\nENCODING 30884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFFE0\n2440\n2100\n77C0\nD540\n5540\n5FE0\n7280\n5440\n0820\nENDCHAR\nSTARTCHAR U_78A5\nENCODING 30885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n4820\n4FE0\nE800\nAFE0\nAAA0\nAFE0\nEAA0\nBAA0\n0860\nENDCHAR\nSTARTCHAR U_78A6\nENCODING 30886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF7E0\n4A20\n47C0\n7A40\n5180\nD640\n5820\n77C0\n5440\n07C0\nENDCHAR\nSTARTCHAR U_78A7\nENCODING 30887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n27E0\n74A0\n2520\nFFE0\n0000\nFFE0\n1000\n3FC0\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_78A8\nENCODING 30888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF520\n27E0\n2520\n77E0\nD000\n5FE0\n5540\n7480\n5540\n0620\nENDCHAR\nSTARTCHAR U_78A9\nENCODING 30889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\nF880\n23E0\n2220\n7BE0\nCA20\n4BE0\n4A20\n7BE0\n4940\n0620\nENDCHAR\nSTARTCHAR U_78AA\nENCODING 30890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nFFE0\n2240\n23C0\n7240\nD3C0\n5240\n5FE0\n7540\n5620\n07E0\nENDCHAR\nSTARTCHAR U_78AB\nENCODING 30891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n06E0\nF4A0\n24A0\n2720\n7400\nD7E0\n54A0\n55A0\n7E40\n54A0\n0520\nENDCHAR\nSTARTCHAR U_78AC\nENCODING 30892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF520\n2520\n27E0\n7400\nD7E0\n54A0\n54A0\n7740\n54A0\n0520\nENDCHAR\nSTARTCHAR U_78AD\nENCODING 30893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n27C0\n2440\n7FE0\nD400\n57E0\n5AA0\n74A0\n5920\n0240\nENDCHAR\nSTARTCHAR U_78AE\nENCODING 30894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n47C0\n4440\nF7C0\n5000\n5FE0\n5100\n75C0\n5700\n09E0\nENDCHAR\nSTARTCHAR U_78AF\nENCODING 30895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n02A0\nF540\n22A0\n43E0\n7A20\nCB60\n4AA0\n4B60\n7A20\n4BE0\n0220\nENDCHAR\nSTARTCHAR U_78B0\nENCODING 30896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFA80\n27E0\n2280\n7AA0\nDAA0\n56C0\n56C0\n7280\n5280\n0FE0\nENDCHAR\nSTARTCHAR U_78B1\nENCODING 30897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF0A0\n4FE0\n4880\nEF80\nA880\nAEA0\nAAA0\nEEC0\nA960\n1220\nENDCHAR\nSTARTCHAR U_78B2\nENCODING 30898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2280\n2FE0\n7920\nD7C0\n5540\n5540\n7540\n55C0\n0100\nENDCHAR\nSTARTCHAR U_78B3\nENCODING 30899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF920\n2FE0\n4200\n7FE0\nD280\n52A0\n52C0\n5580\n7880\n0140\n0620\nENDCHAR\nSTARTCHAR U_78B4\nENCODING 30900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2540\n2920\n77C0\nD440\n57C0\n5440\n77C0\n5000\n0FE0\nENDCHAR\nSTARTCHAR U_78B5\nENCODING 30901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF9E0\n2100\n47C0\n7440\nD7C0\n5440\n57C0\n7440\n57C0\n0820\nENDCHAR\nSTARTCHAR U_78B6\nENCODING 30902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nEFE0\n44A0\n4EA0\n74A0\nDFA0\n5500\n5FE0\n7100\n46C0\n0820\nENDCHAR\nSTARTCHAR U_78B7\nENCODING 30903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nE880\n4FE0\n4880\nEBE0\nAA20\nABE0\nAA20\nEBE0\n9220\n23E0\nENDCHAR\nSTARTCHAR U_78B8\nENCODING 30904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFC0\n5040\n5F40\nF440\nBF40\nB540\nBF40\nF440\n9F40\n2020\nENDCHAR\nSTARTCHAR U_78B9\nENCODING 30905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2820\n2000\n7FE0\nD440\n57C0\n5440\n77C0\n5000\n0FE0\nENDCHAR\nSTARTCHAR U_78BA\nENCODING 30906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2A20\n2280\n77E0\nD480\n5FE0\n5480\n77E0\n5480\n07E0\nENDCHAR\nSTARTCHAR U_78BB\nENCODING 30907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2240\n23C0\n7800\nCFE0\n4820\n4BA0\n7AA0\n4BA0\n0860\nENDCHAR\nSTARTCHAR U_78BC\nENCODING 30908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFD00\n27C0\n2500\n77C0\nD500\n57E0\n5020\n7560\n5AA0\n0AE0\nENDCHAR\nSTARTCHAR U_78BD\nENCODING 30909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF100\n2FE0\n4000\nF7C0\n5440\n57C0\n7440\n57C0\n0280\n0440\nENDCHAR\nSTARTCHAR U_78BE\nENCODING 30910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF420\n27E0\n2540\n77E0\nD540\n57E0\n5540\n7560\n55A0\n0920\nENDCHAR\nSTARTCHAR U_78BF\nENCODING 30911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF820\n4FE0\n4880\nEAA0\nABE0\nAA20\nABE0\nEA20\n8BE0\n1220\nENDCHAR\nSTARTCHAR U_78C0\nENCODING 30912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0220\nF140\n2BE0\n4480\n72A0\nDEA0\n57E0\n5480\n7500\n4600\n09E0\nENDCHAR\nSTARTCHAR U_78C1\nENCODING 30913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nF280\n2FE0\n2480\n74A0\nDB20\n5FC0\n5240\n7480\n5B40\n1DA0\nENDCHAR\nSTARTCHAR U_78C2\nENCODING 30914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFDE0\n48A0\n4EA0\n7940\nD7C0\n5540\n57C0\n5540\n77C0\n0440\nENDCHAR\nSTARTCHAR U_78C3\nENCODING 30915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nF4E0\n2480\n27E0\n74A0\nD7C0\n54A0\n55E0\n7540\n5540\n0A60\nENDCHAR\nSTARTCHAR U_78C4\nENCODING 30916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n27C0\n2540\n77E0\nD540\n57C0\n5500\n77C0\n4A40\n13C0\nENDCHAR\nSTARTCHAR U_78C5\nENCODING 30917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2280\n2FE0\n7920\nDFE0\n5200\n53E0\n7220\n5420\n08C0\nENDCHAR\nSTARTCHAR U_78C6\nENCODING 30918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n4740\n4540\n77E0\nD820\n57C0\n5440\n77C0\n5440\n0440\nENDCHAR\nSTARTCHAR U_78C7\nENCODING 30919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n2540\n26C0\n7540\n57C0\nD480\n56A0\n74C0\n56A0\n0440\nENDCHAR\nSTARTCHAR U_78C8\nENCODING 30920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2520\n27E0\n7520\nD7E0\n5140\n51A0\n73E0\n5520\n08E0\nENDCHAR\nSTARTCHAR U_78C9\nENCODING 30921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF280\n2140\n2280\n77E0\nD540\n52A0\n5500\n7FE0\n5540\n0920\nENDCHAR\nSTARTCHAR U_78CA\nENCODING 30922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0800\n1F80\n3080\nDF80\n0000\nFBE0\n4100\nFBE0\n4920\n79E0\nENDCHAR\nSTARTCHAR U_78CB\nENCODING 30923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFA80\n27E0\n2100\n73E0\nD100\n57E0\n5200\n77E0\n5880\n07E0\nENDCHAR\nSTARTCHAR U_78CC\nENCODING 30924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2100\n27C0\n7440\nD740\n55C0\n5440\n7FE0\n5280\n0C60\nENDCHAR\nSTARTCHAR U_78CD\nENCODING 30925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2920\n27C0\n7100\nD7C0\n5100\n5FE0\n7440\n57C0\n0440\nENDCHAR\nSTARTCHAR U_78CE\nENCODING 30926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F80\nFA20\n2540\n2280\n7740\nD220\n5FE0\n5100\n7FE0\n5280\n0C60\nENDCHAR\nSTARTCHAR U_78CF\nENCODING 30927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nFFE0\n2500\n2FC0\n7540\nDFE0\n5540\n5FC0\n7580\n5D40\n0520\nENDCHAR\nSTARTCHAR U_78D0\nENCODING 30928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\n7D60\n57C0\nFD40\n5480\n4540\n7FE0\n1000\n3FC0\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_78D1\nENCODING 30929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0520\nF520\n27E0\n2000\n7FE0\nD000\n57C0\n5440\n77C0\n5280\n0FE0\nENDCHAR\nSTARTCHAR U_78D2\nENCODING 30930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n27C0\n4000\n77C0\nD440\n57C0\n5440\n77C0\n4280\n0440\nENDCHAR\nSTARTCHAR U_78D3\nENCODING 30931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF9E0\n2520\n21E0\n7D00\nD5E0\n5520\n55E0\n7520\n4600\n09E0\nENDCHAR\nSTARTCHAR U_78D4\nENCODING 30932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFFE0\n2940\n2540\n73E0\nD440\n5900\n5FE0\n7380\n5540\n0920\nENDCHAR\nSTARTCHAR U_78D5\nENCODING 30933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n2100\n2FE0\n7240\nD7E0\n5020\n57C0\n7540\n5540\n0FE0\nENDCHAR\nSTARTCHAR U_78D6\nENCODING 30934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nFAA0\n2660\n2AA0\n7120\nD7C0\n5440\n57C0\n7440\n47C0\n0440\nENDCHAR\nSTARTCHAR U_78D7\nENCODING 30935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\nFFC0\n2100\n27C0\n7540\nD7C0\n5540\n7080\n5FE0\n0480\n0180\nENDCHAR\nSTARTCHAR U_78D8\nENCODING 30936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF700\n44A0\n4240\n7400\nD7C0\n5900\n5FE0\n7100\n5540\n07C0\nENDCHAR\nSTARTCHAR U_78D9\nENCODING 30937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2280\n2540\n7220\nD7E0\n5280\n52A0\n7640\n5AA0\n0320\nENDCHAR\nSTARTCHAR U_78DA\nENCODING 30938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2540\n27C0\n7540\nD7E0\n5040\n5FE0\n7440\n5240\n00C0\nENDCHAR\nSTARTCHAR U_78DB\nENCODING 30939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5500\n7DE0\n5540\nFD40\n1240\nFFE0\n1000\n3FC0\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_78DC\nENCODING 30940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE6E0\n49A0\n5640\n74A0\nDBC0\n5000\n5FE0\n7540\n4920\n0200\nENDCHAR\nSTARTCHAR U_78DD\nENCODING 30941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFF80\n44E0\n5F20\nE9A0\nBEA0\nA8A0\nAEA0\nEA40\nB2A0\n2520\nENDCHAR\nSTARTCHAR U_78DE\nENCODING 30942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nFFE0\n4000\n4EE0\nEAA0\nAEE0\nAAA0\nAEE0\nEAA0\nAAA0\n1760\nENDCHAR\nSTARTCHAR U_78DF\nENCODING 30943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF5A0\n2360\n25A0\n7140\nDEA0\n5340\n5080\n7320\n5040\n0780\nENDCHAR\nSTARTCHAR U_78E0\nENCODING 30944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF1E0\n2100\n27E0\n7520\nD660\n54A0\n5760\n75A0\n5660\n07E0\nENDCHAR\nSTARTCHAR U_78E1\nENCODING 30945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A80\nFF80\n4A80\n4FE0\nEAA0\nAEA0\nAAA0\nBFA0\nB2A0\nF5A0\n1F60\nENDCHAR\nSTARTCHAR U_78E2\nENCODING 30946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2100\n2BA0\n7540\nDBA0\n5540\n5BA0\n7280\n5440\n0820\nENDCHAR\nSTARTCHAR U_78E3\nENCODING 30947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\nF3C0\n2440\n2AA0\n7FE0\nD280\n5D60\n5280\n7520\n5240\n0F80\nENDCHAR\nSTARTCHAR U_78E4\nENCODING 30948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFEE0\n4AA0\n4FA0\nEA00\nAEE0\nA8A0\nAEA0\nEA40\n9240\n24A0\nENDCHAR\nSTARTCHAR U_78E5\nENCODING 30949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF520\n27E0\n2520\n77E0\nD240\n5580\n5220\n7FE0\n5540\n1920\nENDCHAR\nSTARTCHAR U_78E6\nENCODING 30950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF280\n4FE0\n4AA0\n7FE0\nD000\n57C0\n5000\n7FE0\n4540\n0920\nENDCHAR\nSTARTCHAR U_78E7\nENCODING 30951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2100\n2FE0\n7440\nD7C0\n5440\n57C0\n7440\n57C0\n0C60\nENDCHAR\nSTARTCHAR U_78E8\nENCODING 30952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n7FE0\n5DC0\n6AA0\n7FE0\n4400\n5FC0\n6840\n8FC0\nENDCHAR\nSTARTCHAR U_78E9\nENCODING 30953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00A0\nFFE0\n2480\n2780\n74A0\nDFA0\n54A0\n56C0\n7CA0\n5560\n0E20\nENDCHAR\nSTARTCHAR U_78EA\nENCODING 30954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n04A0\nFCA0\n27E0\n2480\n7FE0\nD480\n57C0\n5480\n77C0\n5480\n07E0\nENDCHAR\nSTARTCHAR U_78EB\nENCODING 30955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nE940\n5140\n46A0\nEC00\nB880\nAAC0\nAA80\nEA80\n8B80\n0CE0\nENDCHAR\nSTARTCHAR U_78EC\nENCODING 30956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DC0\n1260\n7DC0\n5540\n7C80\n4140\nBFE0\n1000\n3FC0\n5040\n1FC0\nENDCHAR\nSTARTCHAR U_78ED\nENCODING 30957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFC00\n27E0\n2540\n7520\nD7E0\n5620\n57E0\n7620\n5BE0\n0260\nENDCHAR\nSTARTCHAR U_78EE\nENCODING 30958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0920\nEFE0\n4380\n4440\nEBA0\nA000\nAFE0\nAAA0\nEFE0\n8AA0\n0820\nENDCHAR\nSTARTCHAR U_78EF\nENCODING 30959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nF980\n2FE0\n2540\n7BE0\nDD40\n57E0\n5520\n76C0\n48A0\n1360\nENDCHAR\nSTARTCHAR U_78F0\nENCODING 30960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nEFE0\n4100\n47C0\n7100\nDFE0\n5280\n5FE0\n7440\n57C0\n0440\nENDCHAR\nSTARTCHAR U_78F1\nENCODING 30961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nF360\n26C0\n4240\n75A0\nD7E0\n5920\n57C0\n7240\n5240\n0480\nENDCHAR\nSTARTCHAR U_78F2\nENCODING 30962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n09E0\nF500\n29E0\n2720\n7DE0\nD500\n55E0\n5100\n7FE0\n5540\n0920\nENDCHAR\nSTARTCHAR U_78F3\nENCODING 30963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nF280\n2FE0\n2AA0\n7FE0\nD000\n57C0\n5440\n77C0\n5440\n07C0\nENDCHAR\nSTARTCHAR U_78F4\nENCODING 30964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0740\nF580\n22A0\n2240\n77A0\nD820\n57C0\n5440\n77C0\n5280\n0FE0\nENDCHAR\nSTARTCHAR U_78F5\nENCODING 30965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\n4AA0\n4EE0\nEAA0\nAEE0\nABA0\nAAA0\nABA0\nEAA0\n8BA0\n0840\nENDCHAR\nSTARTCHAR U_78F6\nENCODING 30966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFEE0\n2420\n46E0\n7420\nD7E0\n5200\n57E0\n7AA0\n5520\n0040\nENDCHAR\nSTARTCHAR U_78F7\nENCODING 30967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0520\nF340\n2FE0\n2340\n7520\nDA40\n57E0\n5940\n77E0\n5440\n0840\nENDCHAR\nSTARTCHAR U_78F8\nENCODING 30968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFFE0\n4280\n4FE0\nEAA0\nAC60\nAFE0\nA100\nEFE0\nA280\n0C60\nENDCHAR\nSTARTCHAR U_78F9\nENCODING 30969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF280\n2FE0\n2AA0\n7FE0\nD440\n57C0\n5440\n7FE0\n5100\n0100\nENDCHAR\nSTARTCHAR U_78FA\nENCODING 30970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n2280\n2FE0\n7000\nD7C0\n5540\n57C0\n7540\n57C0\n0C60\nENDCHAR\nSTARTCHAR U_78FB\nENCODING 30971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF520\n2340\n2FE0\n7340\nD520\n5FE0\n5520\n77E0\n5520\n07E0\nENDCHAR\nSTARTCHAR U_78FC\nENCODING 30972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nF7E0\n2500\n2FC0\n7500\nD7E0\n5500\n5FE0\n7380\n5540\n0920\nENDCHAR\nSTARTCHAR U_78FD\nENCODING 30973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n2100\n2FE0\n7440\nD6E0\n5440\n5FE0\n7280\n54A0\n0860\nENDCHAR\nSTARTCHAR U_78FE\nENCODING 30974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nFAA0\n2EE0\n2540\n77C0\nD540\n57C0\n5100\n7FE0\n5100\n0100\nENDCHAR\nSTARTCHAR U_78FF\nENCODING 30975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n58C0\n7BE0\n58C0\n75A0\n5280\n7FE0\n4800\n5FC0\n6840\n8FC0\nENDCHAR\nSTARTCHAR U_7900\nENCODING 30976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEAA0\n4EE0\n4AA0\nEEE0\nABA0\nAAA0\nABA0\nEAA0\n8BA0\n0AA0\nENDCHAR\nSTARTCHAR U_7901\nENCODING 30977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nF7E0\n2C80\n27E0\n7480\nD7E0\n5480\n57E0\n7540\n5AA0\n0AA0\nENDCHAR\nSTARTCHAR U_7902\nENCODING 30978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2100\n2FE0\n7440\nD7C0\n5280\n5FE0\n7440\n57C0\n0440\nENDCHAR\nSTARTCHAR U_7903\nENCODING 30979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nFFE0\n4820\n47C0\n7440\nD7C0\n5100\n57C0\n7100\n4FE0\n0100\nENDCHAR\nSTARTCHAR U_7904\nENCODING 30980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\nF780\n2200\n2FE0\n7440\nDBA0\n5280\n5FE0\n7AA0\n5BA0\n0860\nENDCHAR\nSTARTCHAR U_7905\nENCODING 30981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFF80\n2AE0\n2EA0\n70A0\nDFA0\n52A0\n53A0\n7E40\n52A0\n0720\nENDCHAR\nSTARTCHAR U_7906\nENCODING 30982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF280\n4440\n4BA0\nE000\nAEE0\nAAA0\nAEE0\nE440\n8AA0\n1120\nENDCHAR\nSTARTCHAR U_7907\nENCODING 30983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n4560\n47A0\nF7E0\n55A0\n5560\n5100\n7FE0\n4280\n0C60\nENDCHAR\nSTARTCHAR U_7908\nENCODING 30984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0220\nF140\n47E0\n5100\nEA80\nB960\nAAC0\nA940\nEAA0\nA900\n17E0\nENDCHAR\nSTARTCHAR U_7909\nENCODING 30985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFE80\n2AE0\n2EA0\n7AA0\nDFA0\n54A0\n57A0\n7540\n59A0\n1220\nENDCHAR\nSTARTCHAR U_790A\nENCODING 30986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFF40\n5540\n7F60\n55C0\n7D40\n0080\nFFE0\n0F80\n3880\n0F80\nENDCHAR\nSTARTCHAR U_790B\nENCODING 30987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nFAA0\n4FE0\n4100\n77C0\nD100\n5FE0\n5280\n77C0\n5100\n0100\nENDCHAR\nSTARTCHAR U_790C\nENCODING 30988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n4100\n4FE0\nE920\nABA0\nA540\nAFE0\nA920\nEFE0\nA920\n0FE0\nENDCHAR\nSTARTCHAR U_790D\nENCODING 30989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF7E0\n4280\n47C0\n7440\nD7C0\n5560\n54A0\n7D60\n47A0\n0040\nENDCHAR\nSTARTCHAR U_790E\nENCODING 30990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFFE0\n2440\n2EE0\n7540\nDFE0\n50A0\n5480\n74E0\n5A80\n11E0\nENDCHAR\nSTARTCHAR U_790F\nENCODING 30991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFAA0\n46C0\n4FE0\n7280\nD7C0\n5100\n7FE0\n4580\n4940\n0100\nENDCHAR\nSTARTCHAR U_7910\nENCODING 30992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6AC0\n4440\n6AC0\n4440\nFFE0\n8020\n7FC0\n1000\n3FC0\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_7911\nENCODING 30993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nFFE0\n2AA0\n2380\n7000\nDFE0\n5920\n5FE0\n7920\n5FE0\n0820\nENDCHAR\nSTARTCHAR U_7912\nENCODING 30994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF7E0\n2100\n2FE0\n7780\nD2A0\n5FE0\n52A0\n7F40\n52A0\n0660\nENDCHAR\nSTARTCHAR U_7913\nENCODING 30995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF540\n27C0\n2540\n7FE0\nD000\n57C0\n5540\n77C0\n5540\n0FE0\nENDCHAR\nSTARTCHAR U_7914\nENCODING 30996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0740\nFDE0\n2520\n27A0\n7440\nD7E0\n5540\n55E0\n7D40\n5740\n0040\nENDCHAR\nSTARTCHAR U_7915\nENCODING 30997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n47E0\n7D40\n4080\nBBE0\nA880\n7FE0\n0800\n3FC0\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_7916\nENCODING 30998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF760\n25A0\n4760\n75A0\nD6E0\n54A0\n57E0\n7240\n4420\n0820\nENDCHAR\nSTARTCHAR U_7917\nENCODING 30999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2820\n2FE0\n72A0\nD7C0\n5C40\n57C0\n7440\n57C0\n0C60\nENDCHAR\nSTARTCHAR U_7918\nENCODING 31000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n47C0\n4440\n77C0\nDAA0\n5540\n5FE0\n5000\n7AA0\n0AA0\nENDCHAR\nSTARTCHAR U_7919\nENCODING 31001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0BE0\nFCA0\n2940\n2FE0\n7060\nDE40\n5560\n5F40\n7540\n5B40\n04E0\nENDCHAR\nSTARTCHAR U_791A\nENCODING 31002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\n4200\n4FC0\nE200\nA480\nAFC0\nA000\nEFE0\nAAA0\n1FE0\nENDCHAR\nSTARTCHAR U_791B\nENCODING 31003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F80\nFAE0\n2F80\n2940\n7F20\nDA20\n5F80\n5000\n77C0\n5540\n0FE0\nENDCHAR\nSTARTCHAR U_791C\nENCODING 31004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6EC0\n4840\n7FC0\n4A40\nFFE0\n1100\n3F80\nD060\n3F80\nD080\n1F80\nENDCHAR\nSTARTCHAR U_791D\nENCODING 31005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF100\n2FE0\n2920\n7280\nDFE0\n5100\n5FE0\n7AA0\n5AA0\n0860\nENDCHAR\nSTARTCHAR U_791E\nENCODING 31006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\n2480\n2FE0\n7820\nDFE0\n5A40\n5580\n7B80\n5540\n0B20\nENDCHAR\nSTARTCHAR U_791F\nENCODING 31007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F00\nEAA0\n4FA0\n4A40\nEFA0\nAA00\nAFA0\nAAA0\nF540\n2940\n02A0\nENDCHAR\nSTARTCHAR U_7920\nENCODING 31008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nFFE0\n2440\n4880\n7EE0\n5440\nDEE0\n5000\n52A0\n7620\n49C0\nENDCHAR\nSTARTCHAR U_7921\nENCODING 31009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF2A0\n2FE0\n26A0\n7BE0\nD6A0\n53E0\n5440\n7FE0\n5540\n04C0\nENDCHAR\nSTARTCHAR U_7922\nENCODING 31010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nF7E0\n4100\n47E0\n7280\nD7C0\n5C60\n77C0\n5500\n44C0\n0660\nENDCHAR\nSTARTCHAR U_7923\nENCODING 31011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\n2280\n2FE0\n7AA0\nDFE0\n5520\n5540\n76A0\n54A0\n0B60\nENDCHAR\nSTARTCHAR U_7924\nENCODING 31012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n2480\n26E0\n7AA0\nD440\n5BA0\n5000\n7FE0\n5540\n0B20\nENDCHAR\nSTARTCHAR U_7925\nENCODING 31013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nFAA0\n2FA0\n2940\n7AA0\nD7E0\n5440\n57C0\n7440\n57C0\n0C60\nENDCHAR\nSTARTCHAR U_7926\nENCODING 31014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7E0\n2540\n27E0\n7540\nD7E0\n54A0\n57E0\n74A0\n5FE0\n0C20\nENDCHAR\nSTARTCHAR U_7927\nENCODING 31015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nE540\n47C0\n8540\nE7C0\nA000\nAFE0\nAAA0\nAFE0\nEAA0\n0FE0\nENDCHAR\nSTARTCHAR U_7928\nENCODING 31016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n7FC0\n4440\nFFE0\nAAA0\nFBE0\nAAA0\nFFE0\n5040\n9FC0\nENDCHAR\nSTARTCHAR U_7929\nENCODING 31017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF480\n27E0\n2540\n7940\nD7C0\n5440\n57C0\n7440\n57C0\n0C60\nENDCHAR\nSTARTCHAR U_792A\nENCODING 31018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nFA80\n4FE0\n4A80\nEFC0\nA940\nAFC0\nA940\nEFE0\nA960\n17A0\nENDCHAR\nSTARTCHAR U_792B\nENCODING 31019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0520\nEBC0\n4EA0\n4BC0\nEAA0\nBFE0\nA100\nBFE0\nE580\nA940\n1120\nENDCHAR\nSTARTCHAR U_792C\nENCODING 31020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A80\nF5E0\n4A80\nE5C0\n4AA0\nFFE0\n2880\nD060\n3F80\nD080\n1F80\nENDCHAR\nSTARTCHAR U_792D\nENCODING 31021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF100\n4FE0\n4920\nEBA0\nA540\nAFE0\nB900\nEFE0\nA900\n0FE0\nENDCHAR\nSTARTCHAR U_792E\nENCODING 31022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F40\nEBE0\n4A00\n4FA0\nEAA0\nAF00\nAAA0\nAFA0\nE940\n9540\n03A0\nENDCHAR\nSTARTCHAR U_792F\nENCODING 31023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A40\nFB60\n26C0\n2920\n7FE0\nDA20\n5780\n5240\n7FE0\n5940\n1320\nENDCHAR\nSTARTCHAR U_7930\nENCODING 31024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nEA40\n4FE0\n4A40\nEBC0\nAE60\nAA40\nA880\nEAE0\n9280\n27E0\nENDCHAR\nSTARTCHAR U_7931\nENCODING 31025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n5200\nFFC0\n8A00\nFBC0\n8A20\nFFE0\n1000\n3FC0\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_7932\nENCODING 31026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\n4A80\n4EE0\nE020\nAEE0\nAA80\nAEE0\nEA80\nAEA0\n0AE0\nENDCHAR\nSTARTCHAR U_7933\nENCODING 31027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n4A40\n4FE0\nEA40\nAFE0\nA900\nABC0\nEE40\nABC0\n1240\nENDCHAR\nSTARTCHAR U_7934\nENCODING 31028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF7E0\n4AA0\n47E0\nF2A0\nABE0\nA6A0\nBFE0\nEA40\nA940\n0880\nENDCHAR\nSTARTCHAR U_7935\nENCODING 31029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF100\n2FE0\n2920\n7AA0\nDF60\n55E0\n5720\n7DE0\n5520\n05E0\nENDCHAR\nSTARTCHAR U_7936\nENCODING 31030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nFFE0\n2AA0\n4EE0\n7480\nD7E0\n5C80\n57E0\n7480\n5480\n07E0\nENDCHAR\nSTARTCHAR U_7937\nENCODING 31031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n2280\n47C0\n7460\nD740\n5540\n55A0\n7FE0\n4AA0\n1FE0\nENDCHAR\nSTARTCHAR U_7938\nENCODING 31032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF540\n5FE0\n4540\nFFE0\nAA60\nAFC0\nA840\nAFC0\nE840\nAFC0\n1860\nENDCHAR\nSTARTCHAR U_7939\nENCODING 31033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEAA0\n5FE0\n5480\nFEE0\nAAA0\nAEA0\nAAC0\nEE40\nABA0\n1EA0\nENDCHAR\nSTARTCHAR U_793A\nENCODING 31034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n0000\n0000\nFFE0\n0400\n2480\n2440\n4420\n8420\n0C00\nENDCHAR\nSTARTCHAR U_793B\nENCODING 31035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\n1F00\n0100\n0200\n0600\n0D00\n1500\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_793C\nENCODING 31036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nFA00\n0A00\n1200\n3200\n6A00\nAA00\n2220\n2220\n21E0\nENDCHAR\nSTARTCHAR U_793D\nENCODING 31037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2240\nFA40\n0A80\n12E0\n3220\n6A20\nAA20\n2420\n2920\n30C0\nENDCHAR\nSTARTCHAR U_793E\nENCODING 31038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF900\n1100\n27C0\n3100\n6900\nA100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_793F\nENCODING 31039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nFBE0\n0C20\n1020\n3220\n6920\nA920\n2020\n2120\n20C0\nENDCHAR\nSTARTCHAR U_7940\nENCODING 31040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n23E0\nFA20\n0A20\n13E0\n3220\n6A00\nAA00\n2220\n2220\n21E0\nENDCHAR\nSTARTCHAR U_7941\nENCODING 31041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n21E0\nF920\n0940\n1180\n3140\n6920\nA520\n21A0\n2140\n2100\nENDCHAR\nSTARTCHAR U_7942\nENCODING 31042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n22A0\nFAE0\n0BA0\n16A0\n32A0\n6AA0\nAA80\n2220\n2220\n21E0\nENDCHAR\nSTARTCHAR U_7943\nENCODING 31043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\nF240\n1240\n2240\n73E0\nA820\n2020\n2FA0\n2020\n20C0\nENDCHAR\nSTARTCHAR U_7944\nENCODING 31044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2180\nFA40\n0C20\n1240\n3240\n6A40\nAA40\n2240\n2440\n2840\nENDCHAR\nSTARTCHAR U_7945\nENCODING 31045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2700\nF900\n0900\n17E0\n3100\n6900\nA900\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_7946\nENCODING 31046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\nF900\n0900\n17E0\n3100\n6900\nA900\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_7947\nENCODING 31047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n2780\nF480\n1480\n27E0\n2480\n7480\nAC80\n24A0\n2560\n2620\nENDCHAR\nSTARTCHAR U_7948\nENCODING 31048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n2380\nFA00\n0A00\n13E0\n3240\n6A40\nAA40\n2440\n2440\n2840\nENDCHAR\nSTARTCHAR U_7949\nENCODING 31049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF500\n1500\n25E0\n3500\n6D00\nA500\n2500\n2500\n3FE0\nENDCHAR\nSTARTCHAR U_794A\nENCODING 31050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2080\nFFE0\n0900\n11E0\n3120\n6920\nAA20\n2220\n2420\n28C0\nENDCHAR\nSTARTCHAR U_794B\nENCODING 31051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2240\nFA40\n0C60\n1000\n37E0\n6A40\nA940\n2080\n2140\n2620\nENDCHAR\nSTARTCHAR U_794C\nENCODING 31052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2080\nFBE0\n0AA0\n12A0\n32A0\n6BE0\nA880\n2080\n2080\n2080\nENDCHAR\nSTARTCHAR U_794D\nENCODING 31053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2F00\nF100\n1100\n2100\n6FE0\nB100\n2100\n2100\n2FE0\n2000\nENDCHAR\nSTARTCHAR U_794E\nENCODING 31054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FE0\nF200\n2FC0\n6200\nBFE0\n2220\n2220\n22A0\n2240\n2200\nENDCHAR\nSTARTCHAR U_794F\nENCODING 31055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27E0\nF900\n0900\n1200\n37E0\n6A20\nAA20\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_7950\nENCODING 31056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFE0\n0900\n1200\n33E0\n6E20\nAA20\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_7951\nENCODING 31057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2500\nF7C0\n1900\n2100\n37E0\n6900\nA900\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_7952\nENCODING 31058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2120\nF920\n0920\n12A0\n3440\n6BE0\nAA20\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_7953\nENCODING 31059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2240\nFFE0\n0A00\n13C0\n3240\n6A40\nA540\n2480\n2940\n3220\nENDCHAR\nSTARTCHAR U_7954\nENCODING 31060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n2240\nF440\n17E0\n2C40\n3640\n6D40\nA540\n2440\n2540\n2480\nENDCHAR\nSTARTCHAR U_7955\nENCODING 31061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n20A0\nF8A0\n0A20\n1240\n3640\n6AA0\nAB20\n2200\n2620\n39E0\nENDCHAR\nSTARTCHAR U_7956\nENCODING 31062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n17C0\nFC40\n1440\n27C0\n3440\n6C40\nA7C0\n2440\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_7957\nENCODING 31063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n2780\nFC80\n0C80\n17E0\n3480\n6C80\nACA0\n25A0\n2760\n24A0\nENDCHAR\nSTARTCHAR U_7958\nENCODING 31064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n0000\nFBE0\n1080\n5280\n5AC0\n56A0\n94A0\n90A0\n5280\n2100\nENDCHAR\nSTARTCHAR U_7959\nENCODING 31065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF7C0\n1100\n2FE0\n7100\nAB80\n2540\n2920\n2100\n2100\nENDCHAR\nSTARTCHAR U_795A\nENCODING 31066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nFBE0\n0D00\n1100\n31E0\n6900\nA9E0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_795B\nENCODING 31067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFC0\n0900\n1100\n37E0\n6900\nAA00\n2240\n2440\n27A0\nENDCHAR\nSTARTCHAR U_795C\nENCODING 31068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2080\nFFE0\n0880\n1080\n33E0\n6A20\nAA20\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_795D\nENCODING 31069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nFC40\n0C40\n17C0\n3280\n6A80\nAA80\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_795E\nENCODING 31070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2080\nFFE0\n14A0\n27E0\n34A0\n6CA0\nA7E0\n2080\n2080\n2080\nENDCHAR\nSTARTCHAR U_795F\nENCODING 31071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n3F80\n4440\n7FC0\n0000\n3F80\n0000\nFFE0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7960\nENCODING 31072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2020\nF7A0\n1020\n27A0\n74A0\nACA0\n27A0\n24A0\n2020\n20E0\nENDCHAR\nSTARTCHAR U_7961\nENCODING 31073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1220\n5A40\n53A0\n5220\nFBE0\n0000\n3F80\n0000\nFFE0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7962\nENCODING 31074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nF3E0\n1520\n2940\n7100\nAD40\n2540\n2920\n2920\n2300\nENDCHAR\nSTARTCHAR U_7963\nENCODING 31075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\nFC00\n10C0\n2700\n7520\nAD40\n2480\n2480\n2540\n2620\nENDCHAR\nSTARTCHAR U_7964\nENCODING 31076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2EE0\nF220\n1AA0\n2660\n7220\nAA60\n26A0\n2B20\n2220\n2660\nENDCHAR\nSTARTCHAR U_7965\nENCODING 31077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\nFFE0\n1100\n27C0\n7100\nA900\n2FE0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_7966\nENCODING 31078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nF440\n17C0\n2000\n77C0\nA100\n2FE0\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_7967\nENCODING 31079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2280\nFAA0\n16C0\n2280\n76C0\nAAA0\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_7968\nENCODING 31080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n7FC0\n0000\n3F80\n0000\nFFE0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7969\nENCODING 31081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2500\nF7C0\n1900\n2100\n7FE0\nA900\n2380\n2540\n2920\n3120\nENDCHAR\nSTARTCHAR U_796A\nENCODING 31082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2480\nFFE0\n2800\n4BC0\nEA40\n5A40\n4AC0\n4A20\n5220\n61E0\nENDCHAR\nSTARTCHAR U_796B\nENCODING 31083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\nF440\n1820\n27C0\n7000\nAFC0\n2440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_796C\nENCODING 31084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n17E0\nF900\n1240\n27E0\n7100\nA7C0\n2100\n2100\n2FE0\n2000\nENDCHAR\nSTARTCHAR U_796D\nENCODING 31085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n3E40\n4A80\nA900\n5080\n2F40\n4020\nBFC0\n1280\n2A40\nC420\nENDCHAR\nSTARTCHAR U_796E\nENCODING 31086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFE0\n1100\n27C0\n7000\nAFC0\n2440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_796F\nENCODING 31087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n21E0\nF900\n17E0\n2420\n7520\nAD20\n2520\n2520\n2280\n2C60\nENDCHAR\nSTARTCHAR U_7970\nENCODING 31088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2500\nF7C0\n1900\n2FE0\n7000\nAFE0\n2420\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_7971\nENCODING 31089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2240\nFA80\n17C0\n2440\n77C0\nAA80\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_7972\nENCODING 31090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2040\nF7C0\n1040\n27C0\n7000\nAFE0\n2AA0\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_7973\nENCODING 31091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2800\nFBC0\n1800\n2FE0\n3A80\n6AA0\nAA40\n2AC0\n3340\n2620\nENDCHAR\nSTARTCHAR U_7974\nENCODING 31092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n20A0\nFFE0\n1080\n2A80\n7AA0\nAFA0\n2AC0\n2AA0\n3160\n2220\nENDCHAR\nSTARTCHAR U_7975\nENCODING 31093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\nF920\n2FE0\n6920\nBBA0\n2D60\n2920\n2920\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_7976\nENCODING 31094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\nF7C0\n1140\n27C0\n7500\nA7E0\n2320\n2520\n2540\n2900\nENDCHAR\nSTARTCHAR U_7977\nENCODING 31095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27E0\nF100\n17C0\n2200\n77E0\nAC40\n27E0\n2940\n3040\n21C0\nENDCHAR\nSTARTCHAR U_7978\nENCODING 31096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nF440\n17C0\n2100\n7FE0\nA920\n2AA0\n2C60\n2820\n28E0\nENDCHAR\nSTARTCHAR U_7979\nENCODING 31097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\nFC20\n17A0\n2A20\n77A0\nAA20\n2AA0\n2FA0\n2020\n20C0\nENDCHAR\nSTARTCHAR U_797A\nENCODING 31098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n2240\nF7E0\n1240\n23C0\n7240\nABC0\n2240\n2FE0\n2240\n2420\nENDCHAR\nSTARTCHAR U_797B\nENCODING 31099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\nF920\n1FE0\n2920\n7BA0\nAAA0\n2BA0\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_797C\nENCODING 31100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2540\nF7C0\n1540\n27C0\n7100\nAFE0\n2100\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_797D\nENCODING 31101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF000\n1240\n2240\n75A0\nA900\n2FE0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_797E\nENCODING 31102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\nF100\n2FE0\n3440\n6A60\nB380\n2680\n2900\n2280\n2C60\nENDCHAR\nSTARTCHAR U_797F\nENCODING 31103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2240\nF7C0\n1080\n27E0\n7120\nAD40\n2380\n2540\n2920\n2300\nENDCHAR\nSTARTCHAR U_7980\nENCODING 31104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n5F40\n4040\n7FC0\n0000\n3FC0\n0000\nFFE0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7981\nENCODING 31105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\n71C0\nAAA0\n2080\n7FC0\n0000\nFFE0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7982\nENCODING 31106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2520\nF7A0\n1520\n27E0\n7420\nAFA0\n26A0\n27A0\n2820\n3060\nENDCHAR\nSTARTCHAR U_7983\nENCODING 31107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF100\n17C0\n2440\n77C0\nAC40\n27C0\n2440\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_7984\nENCODING 31108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2040\nF7C0\n1040\n2FE0\n7140\nAD80\n2340\n2520\n2920\n2300\nENDCHAR\nSTARTCHAR U_7985\nENCODING 31109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\nF7C0\n1540\n27C0\n7540\nAFC0\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_7986\nENCODING 31110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2200\nFFE0\n2920\n6FE0\nBA20\n2FE0\n2500\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_7987\nENCODING 31111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FA0\nF240\n2FE0\n3100\n67C0\nAC40\n37C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_7988\nENCODING 31112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\nF100\n1FE0\n2540\n77C0\nAD40\n27C0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_7989\nENCODING 31113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2FE0\nF280\n2FE0\n2AA0\n6EE0\nB820\n2FE0\n2820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_798A\nENCODING 31114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2FE0\nF4A0\n1EA0\n24A0\n6F60\nB500\n2FE0\n2300\n2480\n3860\nENDCHAR\nSTARTCHAR U_798B\nENCODING 31115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2280\nFFE0\n1AA0\n2AA0\n6FE0\nB100\n27C0\n2100\n2100\n3FE0\nENDCHAR\nSTARTCHAR U_798C\nENCODING 31116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\nFFE0\n0220\n2440\n6AA0\nAEE0\n2240\n2480\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_798D\nENCODING 31117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nF740\n1540\n2FE0\n2820\n7BA0\nAAA0\n2BA0\n2820\n2860\nENDCHAR\nSTARTCHAR U_798E\nENCODING 31118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n21E0\nF100\n17C0\n2440\n77C0\nAC40\n27C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_798F\nENCODING 31119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2000\n07C0\nF440\n17C0\n2000\n3FE0\n6920\nAFE0\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_7990\nENCODING 31120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2F20\nF540\n17E0\n2200\n6FE0\nB200\n27C0\n2A80\n3100\n2EE0\nENDCHAR\nSTARTCHAR U_7991\nENCODING 31121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2540\nF7C0\n1540\n27C0\n7100\nAFE0\n2920\n2BA0\n28A0\n2840\nENDCHAR\nSTARTCHAR U_7992\nENCODING 31122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2440\nF780\n1080\n2FE0\n7520\nAAC0\n2580\n22C0\n24A0\n2B20\nENDCHAR\nSTARTCHAR U_7993\nENCODING 31123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nF7C0\n1440\n2FE0\n6400\nB7E0\n2AA0\n22A0\n2D20\n22C0\nENDCHAR\nSTARTCHAR U_7994\nENCODING 31124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nF7C0\n1440\n27C0\n7000\nAFE0\n2100\n25C0\n2B00\n31E0\nENDCHAR\nSTARTCHAR U_7995\nENCODING 31125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\nF140\n17E0\n2240\n73C0\nA880\n27E0\n2480\n2FE0\n2080\nENDCHAR\nSTARTCHAR U_7996\nENCODING 31126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2FE0\nF440\n17C0\n2440\n77C0\nA900\n2FE0\n2580\n2940\n3120\nENDCHAR\nSTARTCHAR U_7997\nENCODING 31127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2540\nFFC0\n1540\n2540\n37C0\n6900\nA2C0\n2A20\n2A40\n31C0\nENDCHAR\nSTARTCHAR U_7998\nENCODING 31128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF280\n1100\n2FE0\n3920\n6FC0\nA540\n2540\n25C0\n2100\nENDCHAR\nSTARTCHAR U_7999\nENCODING 31129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n26E0\nF280\n16A0\n2040\n77C0\nA440\n27C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_799A\nENCODING 31130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\nFFE0\n1100\n27C0\n3100\n6900\nAFE0\n2540\n2AA0\n2AA0\nENDCHAR\nSTARTCHAR U_799B\nENCODING 31131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF900\n17C0\n2440\n3740\n6DC0\nA440\n2FE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_799C\nENCODING 31132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n56A0\n5AC0\n3180\n4A40\nFFE0\n8020\n3F80\n0000\nFFC0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_799D\nENCODING 31133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2540\nF7C0\n2540\n47C0\nE280\n5440\n4BA0\n4680\n4100\n4EE0\nENDCHAR\nSTARTCHAR U_799E\nENCODING 31134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF000\n27C0\n6440\nBFE0\nA820\n2BA0\n2AA0\n2BA0\n2840\nENDCHAR\nSTARTCHAR U_799F\nENCODING 31135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FE0\nE900\n2FC0\n4940\nEBE0\n4940\n4FC0\n5440\n57C0\n4440\nENDCHAR\nSTARTCHAR U_79A0\nENCODING 31136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2F00\nF9E0\n1900\n2FE0\n6920\nBFC0\n2920\n2BE0\n3280\n2CE0\nENDCHAR\nSTARTCHAR U_79A1\nENCODING 31137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2500\nF7C0\n1500\n27C0\n7500\nAFE0\n2020\n2AA0\n3560\n2540\nENDCHAR\nSTARTCHAR U_79A2\nENCODING 31138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nF7C0\n1440\n27C0\n7000\nAFE0\n25A0\n2360\n2DA0\n26E0\nENDCHAR\nSTARTCHAR U_79A3\nENCODING 31139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n2FE0\nF100\n2FE0\n6920\nAFE0\n2920\n2080\n2FE0\n2480\n2180\nENDCHAR\nSTARTCHAR U_79A4\nENCODING 31140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\nFFE0\n1000\n2FE0\n7220\nAAA0\n2660\n2AA0\n3320\n2660\nENDCHAR\nSTARTCHAR U_79A5\nENCODING 31141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4FC0\nF480\n2780\n4480\n6FE0\nC480\n4A40\n57A0\n4200\n5FE0\nENDCHAR\nSTARTCHAR U_79A6\nENCODING 31142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\nA4A0\n5FA0\nC4A0\n57E0\n5480\n3F80\n0000\nFFE0\n2280\nCE60\nENDCHAR\nSTARTCHAR U_79A7\nENCODING 31143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF100\n1FE0\n2440\n37C0\n6A80\nAFE0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_79A8\nENCODING 31144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2BA0\nF540\n19A0\n2F60\n7540\nAFE0\n2540\n26A0\n2960\n3220\nENDCHAR\nSTARTCHAR U_79A9\nENCODING 31145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4920\n0FE0\nF920\n2FE0\n6440\nAFE0\n2440\n3FE0\n2440\n2820\nENDCHAR\nSTARTCHAR U_79AA\nENCODING 31146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\nFFE0\n1540\n27C0\n7540\nAFC0\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_79AB\nENCODING 31147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2280\nFFE0\n1AA0\n2FE0\n7440\nAFC0\n2440\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_79AC\nENCODING 31148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\nF7C0\n1820\n2FE0\n7AA0\nAFE0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_79AD\nENCODING 31149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5440\n2A80\nFFE0\n1220\n3D40\n6A80\nADC0\n2AA0\n2CA0\n2980\n37E0\nENDCHAR\nSTARTCHAR U_79AE\nENCODING 31150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\nFAA0\n1FE0\n2AA0\n7FE0\nA440\n27C0\n2280\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_79AF\nENCODING 31151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\nEAA0\n2FE0\n3AA0\n6FE0\nA800\n2FE0\n2A80\n2B60\n3240\nENDCHAR\nSTARTCHAR U_79B0\nENCODING 31152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2540\nF920\n1FE0\n2DA0\n7B60\nADA0\n2B60\n2DA0\n2920\n2960\nENDCHAR\nSTARTCHAR U_79B1\nENCODING 31153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF100\n1FE0\n2120\n2FC0\n7040\nAFE0\n2B40\n2E40\n20C0\nENDCHAR\nSTARTCHAR U_79B2\nENCODING 31154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n5280\nFFE0\n3280\n57C0\n77C0\nD540\n5FE0\n4920\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_79B3\nENCODING 31155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nFAA0\n1EE0\n2280\n7FE0\nA280\n2FE0\n24A0\n2D40\n3620\nENDCHAR\nSTARTCHAR U_79B4\nENCODING 31156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n2480\nFFC0\n1020\n2FE0\n7AA0\nAFE0\n2AA0\n2FE0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_79B5\nENCODING 31157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E00\n4AE0\nEE40\n2AE0\n4EA0\n60E0\nDEA0\n44E0\n5640\n5CA0\n67E0\nENDCHAR\nSTARTCHAR U_79B6\nENCODING 31158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2FE0\nF540\n1FE0\n2540\n77E0\nAC40\n27C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_79B7\nENCODING 31159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nABE0\n5C40\n3FE0\nE920\n5DE0\n6B20\nC9E0\n7F20\n49E0\n5540\n6220\nENDCHAR\nSTARTCHAR U_79B8\nENCODING 31160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n4440\n4840\n4A40\n5140\n7F40\n4040\n4040\n40C0\nENDCHAR\nSTARTCHAR U_79B9\nENCODING 31161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n7F00\n0400\n3FC0\n2440\n3FC0\n0400\n7FE0\n4520\n5EA0\n40E0\nENDCHAR\nSTARTCHAR U_79BA\nENCODING 31162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2440\n3FC0\n2440\n3FC0\n0400\n7FE0\n4520\n7EA0\n4020\n40E0\nENDCHAR\nSTARTCHAR U_79BB\nENCODING 31163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2A80\n2480\n2A80\n3F80\n0400\n7FC0\n4940\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_79BC\nENCODING 31164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\n0400\n3F80\n2A80\n2480\n3F80\n0400\n7FC0\n4A40\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_79BD\nENCODING 31165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n3580\nDF60\n2480\n2A80\n3F80\n0400\n7FC0\n4A40\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_79BE\nENCODING 31166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\n7F00\n0400\n0400\nFFE0\n0400\n0E00\n1500\n2480\n4440\n8420\nENDCHAR\nSTARTCHAR U_79BF\nENCODING 31167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n7C00\n0400\nFFE0\n1500\n2480\nC060\n1100\n1120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_79C0\nENCODING 31168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n1500\n2480\nDF60\n0900\n0BC0\n1040\n2040\nC180\nENDCHAR\nSTARTCHAR U_79C1\nENCODING 31169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\nE100\n2100\nF900\n2200\n7200\n6A00\nA440\n2FE0\n2420\n2000\nENDCHAR\nSTARTCHAR U_79C2\nENCODING 31170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n0E00\n1580\nE060\n0400\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_79C3\nENCODING 31171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\n7C00\n0400\nFFE0\n1500\n2480\nC060\n1F00\n1120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_79C4\nENCODING 31172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\nE7C0\n2040\nF880\n2100\n77E0\n6900\nA100\nA100\n2100\n2300\nENDCHAR\nSTARTCHAR U_79C5\nENCODING 31173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\nE780\n2100\n2100\nF900\n27E0\n3100\n6900\nA120\n2120\n20E0\nENDCHAR\nSTARTCHAR U_79C6\nENCODING 31174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\nE100\n2100\nF900\n2FE0\n3100\n6900\nA900\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_79C7\nENCODING 31175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nE200\n2200\n2FC0\nF240\n2640\n7340\nAA40\n2240\n2420\n2820\nENDCHAR\nSTARTCHAR U_79C8\nENCODING 31176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nE080\n2080\nFAA0\n22A0\n32A0\n6AA0\nAAA0\n22A0\n23E0\n2220\nENDCHAR\nSTARTCHAR U_79C9\nENCODING 31177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n7E00\n0400\nFFE0\n0480\nFFE0\n0480\n7F80\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_79CA\nENCODING 31178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n1500\n2480\nC360\n3C00\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_79CB\nENCODING 31179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nE100\n2140\nFD40\n2580\n7500\n6900\nA280\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_79CC\nENCODING 31180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\n2900\n6FE0\n7100\nA380\n2380\n5540\n5540\n8920\n0100\nENDCHAR\nSTARTCHAR U_79CD\nENCODING 31181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nE100\n27E0\nFD20\n2520\n3520\n6FE0\nA100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_79CE\nENCODING 31182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1880\nE280\n2240\nF440\n2820\n37C0\n6A40\nAA40\n2240\n2440\n2980\nENDCHAR\nSTARTCHAR U_79CF\nENCODING 31183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nE700\n2100\nF9E0\n2700\n3100\n69E0\nAF00\n2120\n2120\n20E0\nENDCHAR\nSTARTCHAR U_79D0\nENCODING 31184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n63C0\n2000\nF800\n27E0\n7100\n6900\nA200\n2240\n27E0\n2240\nENDCHAR\nSTARTCHAR U_79D1\nENCODING 31185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1840\nE240\n2140\nF840\n2240\n3140\n6860\nA1C0\n2640\n2040\n2040\nENDCHAR\nSTARTCHAR U_79D2\nENCODING 31186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE100\n2540\nF520\n2520\n7500\n6920\nA040\n2080\n2300\n2C00\nENDCHAR\nSTARTCHAR U_79D3\nENCODING 31187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\n6100\n27C0\nF900\n27C0\n7440\n6A80\nA280\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_79D4\nENCODING 31188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1A00\nE100\n2FE0\nF800\n2380\n7280\n6A80\nA280\n22A0\n2460\n2800\nENDCHAR\nSTARTCHAR U_79D5\nENCODING 31189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\nE480\n2480\nFCA0\n27C0\n3480\n6C80\nA480\n25A0\n26A0\n2460\nENDCHAR\nSTARTCHAR U_79D6\nENCODING 31190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\nE780\n2480\nFC80\n27E0\n3480\n6C80\nA480\n25A0\n2660\n2420\nENDCHAR\nSTARTCHAR U_79D7\nENCODING 31191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n18C0\n6700\n2100\nF900\n27E0\n7100\n6A80\nA280\n2240\n2460\n2840\nENDCHAR\nSTARTCHAR U_79D8\nENCODING 31192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nE140\n2240\nFA40\n2280\n3680\n6AA0\nAB20\n2240\n2640\n39C0\nENDCHAR\nSTARTCHAR U_79D9\nENCODING 31193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\n6100\n27E0\nF900\n2100\n77C0\n6C40\nA440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_79DA\nENCODING 31194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\n6540\n2380\nF100\n27C0\n7100\n6900\nAFE0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_79DB\nENCODING 31195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n6080\n27E0\nFCA0\n25C0\n7540\n6D40\nA480\n2880\n2940\n3220\nENDCHAR\nSTARTCHAR U_79DC\nENCODING 31196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\nE420\n2420\nFFE0\n2400\n3520\n6D40\nA580\n2520\n2920\n30E0\nENDCHAR\nSTARTCHAR U_79DD\nENCODING 31197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n18C0\nE700\n2100\nFFE0\n2100\n3180\n6B40\nA520\nA920\n2100\n2100\nENDCHAR\nSTARTCHAR U_79DE\nENCODING 31198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nE080\n2080\nFFE0\n24A0\n34A0\n6FE0\nA4A0\n24A0\n27E0\n2420\nENDCHAR\nSTARTCHAR U_79DF\nENCODING 31199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1BC0\nE240\n2240\nFA40\n23C0\n3240\n6A40\nABC0\n2240\n2240\n2FE0\nENDCHAR\nSTARTCHAR U_79E0\nENCODING 31200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\nE7E0\n2080\nF880\n2100\n3340\n6D20\nA920\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_79E1\nENCODING 31201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n6240\n27E0\nFA00\n23C0\n7440\n6440\nAA80\n3100\n2280\n2460\nENDCHAR\nSTARTCHAR U_79E2\nENCODING 31202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n6100\n2280\nF460\n2900\n7080\n67C0\nA040\n2280\n2100\n2100\nENDCHAR\nSTARTCHAR U_79E3\nENCODING 31203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE100\n2FE0\nF900\n27C0\n3100\n6B80\nA540\n2920\n3120\n2100\nENDCHAR\nSTARTCHAR U_79E4\nENCODING 31204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\nE080\n24A0\nFAA0\n22C0\n3080\n2FE0\n6880\nA080\n2080\n2080\nENDCHAR\nSTARTCHAR U_79E5\nENCODING 31205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n6100\n2100\nF9E0\n2100\n77C0\n6C40\nA440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_79E6\nENCODING 31206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n3F80\n0800\nFFE0\n2C80\nC460\n7FC0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_79E7\nENCODING 31207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE100\n27C0\nFD40\n2540\n37E0\n2900\n6900\nA280\n2440\n2820\nENDCHAR\nSTARTCHAR U_79E8\nENCODING 31208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n6400\n27E0\nFA00\n2BC0\n7200\n6A00\nA3C0\n2200\n2200\n2200\nENDCHAR\nSTARTCHAR U_79E9\nENCODING 31209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nE280\n23C0\nFC80\n2080\n37E0\n2880\n6880\nA140\n2220\n2C20\nENDCHAR\nSTARTCHAR U_79EA\nENCODING 31210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\nE780\n2480\nFC80\n27E0\n3480\n2C80\n64A0\nA5A0\n2760\n24A0\nENDCHAR\nSTARTCHAR U_79EB\nENCODING 31211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1980\nE140\n27E0\nF900\n2380\n7380\n6D40\nA540\nA920\n2100\n2100\nENDCHAR\nSTARTCHAR U_79EC\nENCODING 31212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\nE400\n2400\nFFC0\n2440\n3440\n2FC0\n6400\nA400\n2400\n27E0\nENDCHAR\nSTARTCHAR U_79ED\nENCODING 31213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nE0E0\n2780\nFC80\n2480\n37E0\n28A0\n69A0\nA2E0\n2480\n2880\nENDCHAR\nSTARTCHAR U_79EE\nENCODING 31214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE100\n2240\nFFA0\n2020\n3000\n2BE0\n6220\nA220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_79EF\nENCODING 31215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\nE3E0\n2220\nFA20\n2220\n73E0\n6800\nA240\nA240\n2420\n2820\nENDCHAR\nSTARTCHAR U_79F0\nENCODING 31216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1A00\nE200\n27E0\nF920\n2100\n7540\n6540\nA920\n3120\n2100\n2300\nENDCHAR\nSTARTCHAR U_79F1\nENCODING 31217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n67E0\n2420\nFFE0\n2420\n77A0\n6EA0\nA7A0\n2420\n24A0\n2440\nENDCHAR\nSTARTCHAR U_79F2\nENCODING 31218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n6100\n27C0\nF900\n27E0\n7080\n6FE0\nA480\n2080\n2280\n2100\nENDCHAR\nSTARTCHAR U_79F3\nENCODING 31219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n60C0\n2700\nF100\n2FE0\n7100\n6FC0\nA440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_79F4\nENCODING 31220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n6100\n2280\nF440\n2BA0\n7000\n6FC0\nA440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_79F5\nENCODING 31221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n67E0\n2520\nFD20\n27E0\n7520\n6EA0\nA460\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_79F6\nENCODING 31222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8800\n4FE0\n3240\n4500\nD8E0\n4000\n3F80\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_79F7\nENCODING 31223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\nE100\n2200\nFC40\n27A0\n3100\n2900\n67C0\nA100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_79F8\nENCODING 31224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nE080\n27E0\nF880\n23E0\n3000\n2BE0\n6220\nA220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_79F9\nENCODING 31225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n6260\n2580\nFC80\n2480\n77E0\nA480\n2480\n2480\n27E0\n2400\nENDCHAR\nSTARTCHAR U_79FA\nENCODING 31226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE7E0\n2420\nF8C0\n2700\n3100\n29E0\n6700\nA120\n2120\n20E0\nENDCHAR\nSTARTCHAR U_79FB\nENCODING 31227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE3E0\n2420\nFA40\n2180\n3680\n29E0\n6220\nA540\n2080\n2700\nENDCHAR\nSTARTCHAR U_79FC\nENCODING 31228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n6500\n27C0\nF900\n27E0\n7100\n6B80\nA340\n2520\n2900\n2100\nENDCHAR\nSTARTCHAR U_79FD\nENCODING 31229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nE4A0\n24A0\n27E0\nF900\n21E0\n3220\n6D40\nA080\n2300\n2C00\nENDCHAR\nSTARTCHAR U_79FE\nENCODING 31230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n6FE0\n2920\n2200\nFA00\n2540\n7540\n6C80\nA480\n2640\n2420\nENDCHAR\nSTARTCHAR U_79FF\nENCODING 31231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n6FE0\n2100\nFFC0\n2540\n77C0\n6D40\nA7C0\n2540\n2540\n24C0\nENDCHAR\nSTARTCHAR U_7A00\nENCODING 31232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1B60\nE080\n2360\nFC80\n27E0\n3280\n6FE0\nA6A0\nAAA0\n22E0\n2080\nENDCHAR\nSTARTCHAR U_7A01\nENCODING 31233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n3F80\n2080\nFFE0\n8120\n3E00\n0400\nFFE0\n1500\nE4C0\nENDCHAR\nSTARTCHAR U_7A02\nENCODING 31234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE7C0\n2440\nFFC0\n2440\n37C0\n2D20\n6540\nA480\n2540\n2620\nENDCHAR\nSTARTCHAR U_7A03\nENCODING 31235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\nE720\n2540\nFA80\n27C0\n7080\n6900\nAFE0\nA100\n2100\n2300\nENDCHAR\nSTARTCHAR U_7A04\nENCODING 31236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE240\n27A0\nFA40\n2420\n33C0\n2A40\n6640\nA980\n2240\n2C20\nENDCHAR\nSTARTCHAR U_7A05\nENCODING 31237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nE240\n2420\nFFC0\n2440\n7440\n6FC0\nA280\nA2A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_7A06\nENCODING 31238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\nE220\n2220\nFBE0\n2000\n3000\n2FE0\n6420\nA420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_7A07\nENCODING 31239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n6FE0\n2920\nFFE0\n2920\n7BA0\n6D60\nA920\n2920\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_7A08\nENCODING 31240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\nE440\n27C0\nFC40\n27C0\n3000\n2FC0\n6100\nAFE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_7A09\nENCODING 31241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n6100\n27C0\nFD40\n27C0\n7540\n6FC0\nA100\n2500\n2300\n2CE0\nENDCHAR\nSTARTCHAR U_7A0A\nENCODING 31242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\nE280\n27E0\nF920\n27E0\n3500\n2FE0\n6320\nA520\n2960\n2100\nENDCHAR\nSTARTCHAR U_7A0B\nENCODING 31243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\nE440\n2440\nF7C0\n2000\n37C0\n6900\n67C0\nA100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_7A0C\nENCODING 31244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE280\n2440\nFFE0\n2100\n37C0\n2900\n6540\nA920\n3120\n2300\nENDCHAR\nSTARTCHAR U_7A0D\nENCODING 31245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1920\nE540\n2100\nFFC0\n2440\n77C0\n6C40\nA7C0\n2440\n2440\n24C0\nENDCHAR\nSTARTCHAR U_7A0E\nENCODING 31246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\nE280\n27C0\nFC40\n2440\n77C0\n6A80\nA280\n22A0\n24A0\n28E0\nENDCHAR\nSTARTCHAR U_7A0F\nENCODING 31247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nEFE0\n2280\nFEE0\n2420\n7420\n6C20\nA6E0\n2280\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_7A10\nENCODING 31248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE280\n2440\nFBA0\n2000\n3FE0\n2AA0\n6FE0\nAAA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_7A11\nENCODING 31249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE7C0\n2100\nFFE0\n2280\n3540\n2920\n67C0\nA100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_7A12\nENCODING 31250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\nE520\n2520\nFFE0\n2520\n37A0\n2EA0\n67A0\nA420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_7A13\nENCODING 31251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\nE7E0\n2240\nFA40\n27E0\n3000\n2BE0\n6220\nA3E0\n2220\n23E0\nENDCHAR\nSTARTCHAR U_7A14\nENCODING 31252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE280\n2540\nF8A0\n27C0\n3040\n2880\n62A0\nAA20\n2A40\n31C0\nENDCHAR\nSTARTCHAR U_7A15\nENCODING 31253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE7E0\n2240\nFBC0\n2000\n37C0\n2880\n6100\nAFE0\n2100\n2700\nENDCHAR\nSTARTCHAR U_7A16\nENCODING 31254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n67C0\n2000\nF440\n2280\n77E0\n6800\nA7C0\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_7A17\nENCODING 31255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE7E0\n24A0\nFFE0\n24A0\n37E0\n2AA0\n6480\nAFE0\n2080\n2080\nENDCHAR\nSTARTCHAR U_7A18\nENCODING 31256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\nE7E0\n2240\nFBC0\n2240\n33C0\n2A40\n6FE0\nA000\n2240\n2420\nENDCHAR\nSTARTCHAR U_7A19\nENCODING 31257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nEFE0\n2100\nFFC0\n2440\n37C0\n2C40\n6740\nA5C0\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_7A1A\nENCODING 31258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1300\nE280\n27E0\nFC80\n27C0\n3480\n2C80\n67C0\nA480\n2480\n27E0\nENDCHAR\nSTARTCHAR U_7A1B\nENCODING 31259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\nE4A0\n2720\nFD20\n27E0\n3520\n2DA0\n6760\nA520\n27E0\n2420\nENDCHAR\nSTARTCHAR U_7A1C\nENCODING 31260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE7C0\n2100\nFFE0\n2240\n3520\n2BC0\n6540\nA880\n2340\n2C20\nENDCHAR\nSTARTCHAR U_7A1D\nENCODING 31261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n6EE0\n2AA0\nFEE0\n2AA0\n7AA0\nAEE0\n2AA0\n2AA0\n2AA0\n3760\nENDCHAR\nSTARTCHAR U_7A1E\nENCODING 31262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\nE540\n27C0\nFD40\n27C0\n3100\n2FE0\n6100\nA380\n2540\n2920\nENDCHAR\nSTARTCHAR U_7A1F\nENCODING 31263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2F40\n2040\n3FC0\n0080\n3F00\n0400\nFFE0\n2480\nC460\nENDCHAR\nSTARTCHAR U_7A20\nENCODING 31264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\nE520\n27A0\nFD20\n27E0\n3420\n2FA0\n66A0\nA7A0\n2420\n2860\nENDCHAR\nSTARTCHAR U_7A21\nENCODING 31265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n67E0\n2000\nFA40\n2240\n75A0\n6900\nA7E0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_7A22\nENCODING 31266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\nE0A0\n2FE0\nF080\n2EA0\n3AA0\n6AA0\nAEC0\nA0A0\n2F60\n2220\nENDCHAR\nSTARTCHAR U_7A23\nENCODING 31267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n7B80\n9080\nFBE0\nA880\nF880\nA9C0\nAAA0\nFCA0\n0080\nF880\nENDCHAR\nSTARTCHAR U_7A24\nENCODING 31268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n67E0\n2000\nFFC0\n2440\n77C0\n6900\nA380\n2540\n2920\n2300\nENDCHAR\nSTARTCHAR U_7A25\nENCODING 31269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n2480\nD660\n4940\n3FA0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_7A26\nENCODING 31270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE7C0\n2240\nFFE0\n2440\n37C0\n2880\n67E0\nA480\n2FE0\n2080\nENDCHAR\nSTARTCHAR U_7A27\nENCODING 31271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n67E0\n22A0\nF7A0\n22A0\n7760\n6A80\nA7E0\n2100\n2280\n2460\nENDCHAR\nSTARTCHAR U_7A28\nENCODING 31272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nEFE0\n2820\nFFE0\n2800\n3FE0\n6AA0\nAFE0\n2AA0\n3AA0\n2860\nENDCHAR\nSTARTCHAR U_7A29\nENCODING 31273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\nE540\n27C0\nFD40\n27C0\n7440\n6FC0\nA440\n27C0\n2440\n24C0\nENDCHAR\nSTARTCHAR U_7A2A\nENCODING 31274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n67E0\n2C40\nF7C0\n2440\n77C0\n6A00\nA7C0\n2280\n2100\n26E0\nENDCHAR\nSTARTCHAR U_7A2B\nENCODING 31275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nE000\n23C0\nF240\n23C0\n3000\n6FE0\nA520\n27E0\n2520\n27E0\nENDCHAR\nSTARTCHAR U_7A2C\nENCODING 31276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n67E0\n2100\nFFE0\n2AA0\n7AA0\n6900\nA7E0\n2100\n2280\n2460\nENDCHAR\nSTARTCHAR U_7A2D\nENCODING 31277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n66A0\n24C0\nFEA0\n24E0\n7200\n6FC0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_7A2E\nENCODING 31278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\nE100\n27E0\nFD40\n27C0\n3540\n2FC0\n6100\nA7C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_7A2F\nENCODING 31279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n16A0\nE520\n26A0\nFFE0\n2240\n3520\n2BC0\n6640\nA980\n2240\n2420\nENDCHAR\nSTARTCHAR U_7A30\nENCODING 31280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\nE120\n25C0\nF500\n2BE0\n3440\n2FC0\n6440\nA7C0\n2440\n24C0\nENDCHAR\nSTARTCHAR U_7A31\nENCODING 31281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\nE720\n2920\nF540\n27C0\n3540\n2FC0\n6540\nAFE0\n2440\n24C0\nENDCHAR\nSTARTCHAR U_7A32\nENCODING 31282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\n67A0\n2520\nFAC0\n2000\n75E0\n6D20\nA520\n25E0\n2520\n25E0\nENDCHAR\nSTARTCHAR U_7A33\nENCODING 31283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nE3C0\n2480\nFFC0\n2040\n37C0\n2840\n67C0\nAD40\n3420\n23C0\nENDCHAR\nSTARTCHAR U_7A34\nENCODING 31284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n6FE0\n2280\nFFE0\n32A0\n6FE0\n62A0\nAFE0\n26C0\n2AA0\n2280\nENDCHAR\nSTARTCHAR U_7A35\nENCODING 31285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n6280\n2FE0\nFA40\n2480\n7B20\n6FC0\nA480\n2B20\n3FE0\n2120\nENDCHAR\nSTARTCHAR U_7A36\nENCODING 31286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n18C0\n60A0\n2FE0\nF080\n2EC0\n7BA0\n6AC0\nAFA0\n20C0\n2EA0\n2160\nENDCHAR\nSTARTCHAR U_7A37\nENCODING 31287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\nE520\n27E0\nFD20\n27E0\n3440\n2BE0\n6240\nA580\n2240\n2420\nENDCHAR\nSTARTCHAR U_7A38\nENCODING 31288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nEFE0\n2200\nFC80\n2300\n7440\n6FE0\nA540\n27C0\n2540\n27C0\nENDCHAR\nSTARTCHAR U_7A39\nENCODING 31289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nEFE0\n2100\nFFC0\n2440\n3740\n2DC0\n6440\nAFE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_7A3A\nENCODING 31290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n6420\n27E0\nFC80\n27E0\n7540\n6FE0\nA480\n2BE0\n2880\n3080\nENDCHAR\nSTARTCHAR U_7A3B\nENCODING 31291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\nE720\n2520\nFAC0\n2000\n36E0\n2C20\n6760\nA420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_7A3C\nENCODING 31292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE7E0\n2420\nFFE0\n2220\n3540\n2A80\n65C0\nAAA0\n24A0\n2B00\nENDCHAR\nSTARTCHAR U_7A3D\nENCODING 31293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\nEFE0\n2520\nF8E0\n27A0\n3420\n6FE0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_7A3E\nENCODING 31294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n7FC0\n4940\n5F40\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_7A3F\nENCODING 31295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nE7E0\n2240\nFBC0\n2000\n3FE0\n2820\n6BA0\nAAA0\n2BA0\n2860\nENDCHAR\nSTARTCHAR U_7A40\nENCODING 31296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n2240\nFA60\n8C00\n73E0\n2220\nF940\n2080\n7140\nAE20\nENDCHAR\nSTARTCHAR U_7A41\nENCODING 31297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1A80\n6FE0\n2280\nFFE0\n2440\n77C0\n6C40\nA7C0\n2440\n2FE0\n2040\nENDCHAR\nSTARTCHAR U_7A42\nENCODING 31298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n6FE0\n2100\nFFC0\n3540\n6FC0\n6540\nA7C0\n2220\n3540\n23C0\nENDCHAR\nSTARTCHAR U_7A43\nENCODING 31299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nEFE0\n2820\nF440\n2920\n7280\n6C40\nBFE0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_7A44\nENCODING 31300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\nE7E0\n29A0\nFE40\n2440\n3BA0\n2000\n6FE0\nA540\n2920\n3320\nENDCHAR\nSTARTCHAR U_7A45\nENCODING 31301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nCFE0\n4940\nFFE0\n4940\n6FC0\nD900\nCD40\n4B80\n5D60\n6300\nENDCHAR\nSTARTCHAR U_7A46\nENCODING 31302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE7E0\n2420\nFFE0\n2520\n3340\n2DA0\n6040\nA7A0\n2040\n2780\nENDCHAR\nSTARTCHAR U_7A47\nENCODING 31303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A40\nF7A0\n2440\nFAA0\n2FE0\n3280\n6540\nAAA0\n2540\n2280\n2F00\nENDCHAR\nSTARTCHAR U_7A48\nENCODING 31304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9080\nFFE0\nB5C0\nD2A0\nBF80\n8400\nFFE0\n9480\nE460\nENDCHAR\nSTARTCHAR U_7A49\nENCODING 31305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n6820\n2FE0\nFAA0\n29C0\n7AA0\n6A80\nABE0\n2C80\n2FE0\n3080\nENDCHAR\nSTARTCHAR U_7A4A\nENCODING 31306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1EE0\nEA40\n2EC0\nFB40\n2FE0\n3A40\n2840\n6C40\nAAC0\n2D40\n2260\nENDCHAR\nSTARTCHAR U_7A4B\nENCODING 31307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\nE120\n25A0\nFB60\n2480\n3340\n2C60\n6180\nA640\n2180\n2600\nENDCHAR\nSTARTCHAR U_7A4C\nENCODING 31308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n7380\n9080\nF880\nAFE0\nF880\nA9C0\nAAA0\nFCA0\n5480\nA880\nENDCHAR\nSTARTCHAR U_7A4D\nENCODING 31309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nEFE0\n2100\nFFC0\n2100\n2FE0\n3440\n6FC0\nA440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_7A4E\nENCODING 31310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\n6080\n4BE0\n3A20\n03E0\nFA20\n23E0\nFA20\n33E0\n6940\nA620\nENDCHAR\nSTARTCHAR U_7A4F\nENCODING 31311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n6F40\n2580\nFFC0\n3040\n6FC0\n6040\nAFC0\n2240\n34A0\n3380\nENDCHAR\nSTARTCHAR U_7A50\nENCODING 31312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1B80\n6500\n27C0\nFD40\n37C0\n6D40\n67C0\nA540\n27C0\n2120\n20E0\nENDCHAR\nSTARTCHAR U_7A51\nENCODING 31313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nEFE0\n2920\n2540\nFFE0\n2000\n7FE0\nAAA0\n2BA0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_7A52\nENCODING 31314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0400\nFFC0\n3480\n7FC0\nA0A0\n3F80\n2080\n3FE0\n5540\n55C0\nENDCHAR\nSTARTCHAR U_7A53\nENCODING 31315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\nE940\n2FC0\nF940\n2FC0\n7480\n6FC0\nA480\n3FE0\n2480\n2840\nENDCHAR\nSTARTCHAR U_7A54\nENCODING 31316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\nE7E0\n2280\n27E0\nF100\n27C0\n3540\n6FC0\nA540\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_7A55\nENCODING 31317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n6FE0\n3480\nFFC0\n3480\n6FE0\n6500\nAFE0\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_7A56\nENCODING 31318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1540\nE520\n2BC0\n2540\nFBE0\n2540\n7FE0\nA540\n26A0\n2960\n3220\nENDCHAR\nSTARTCHAR U_7A57\nENCODING 31319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nEFE0\n2540\nF7C0\n2540\n37C0\n6140\nAFE0\n2540\n2CA0\n33A0\nENDCHAR\nSTARTCHAR U_7A58\nENCODING 31320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE7C0\n2100\nFFE0\n2440\n3EE0\n6440\nAFE0\n2280\n24A0\n3860\nENDCHAR\nSTARTCHAR U_7A59\nENCODING 31321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1AA0\n66C0\n2FE0\nF240\n6FE0\n7100\n6FC0\nA100\n2FE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_7A5A\nENCODING 31322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\nE100\n2FE0\nF240\n2FE0\n3240\n2FE0\n6820\nABA0\n2AA0\n2BE0\nENDCHAR\nSTARTCHAR U_7A5B\nENCODING 31323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3500\nE7E0\n2500\nFFC0\n2500\n37C0\n6D00\nA7E0\n2540\n2AA0\n2AA0\nENDCHAR\nSTARTCHAR U_7A5C\nENCODING 31324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nEFE0\n2280\nF100\n2FE0\n3540\n67C0\nA540\n2FE0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_7A5D\nENCODING 31325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n6440\n27C0\nF440\n3FE0\n6A00\n6FE0\nAB20\n2EC0\n3AC0\n2320\nENDCHAR\nSTARTCHAR U_7A5E\nENCODING 31326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1BC0\nE480\n27C0\nFD40\n27C0\n7540\nAFE0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_7A5F\nENCODING 31327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\nE980\n2FE0\nF120\n22C0\n3980\n6AC0\nA9A0\n2AA0\n2D00\n33E0\nENDCHAR\nSTARTCHAR U_7A60\nENCODING 31328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\nEFE0\n2AA0\nFFE0\n2AA0\n3FE0\n6800\nAFE0\n2AA0\n2A40\n33A0\nENDCHAR\nSTARTCHAR U_7A61\nENCODING 31329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nEFE0\n2540\nFBA0\n2FE0\n2000\n7FE0\nAAA0\n2BA0\n2820\n2FE0\nENDCHAR\nSTARTCHAR U_7A62\nENCODING 31330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n15E0\nE500\n2FE0\nF0A0\n2FE0\n3A80\n6FA0\nAAC0\n32A0\n2560\n2A20\nENDCHAR\nSTARTCHAR U_7A63\nENCODING 31331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n6FE0\n2440\nFAA0\n2FC0\n7280\n6FE0\nA340\n2680\n3B60\n2240\nENDCHAR\nSTARTCHAR U_7A64\nENCODING 31332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n6100\n2FE0\nFD60\n2380\n7560\n6FE0\nA200\n2FE0\n2AA0\n2AE0\nENDCHAR\nSTARTCHAR U_7A65\nENCODING 31333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nCDE0\n4920\nFDE0\n6AA0\nDEE0\nCAA0\n5FE0\n4440\n4820\n5020\nENDCHAR\nSTARTCHAR U_7A66\nENCODING 31334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n6FE0\n2820\nFFC0\n3520\n6940\n67C0\nBD40\n2540\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_7A67\nENCODING 31335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nEFE0\n26A0\nF540\n2D40\n3560\n6540\nA7C0\nA440\n27C0\n2840\nENDCHAR\nSTARTCHAR U_7A68\nENCODING 31336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n27C0\nFD40\n27E0\n7240\nABC0\n7240\n53C0\n5640\n5BC0\n9660\nENDCHAR\nSTARTCHAR U_7A69\nENCODING 31337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nE540\n2FE0\nF100\n2FE0\n3040\n6FE0\nA040\n2FC0\n3520\n27A0\nENDCHAR\nSTARTCHAR U_7A6A\nENCODING 31338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n6540\n2920\nFFE0\n2D60\n7BA0\n6D60\nAD60\n2BA0\n2D60\n2860\nENDCHAR\nSTARTCHAR U_7A6B\nENCODING 31339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\nEFE0\n2440\nFFE0\n2480\n37E0\n2C80\n67E0\nA240\n2180\n2E60\nENDCHAR\nSTARTCHAR U_7A6C\nENCODING 31340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nEFE0\n2940\nFFE0\n2940\n3FE0\n2D40\n6FC0\nAD40\n33C0\n2660\nENDCHAR\nSTARTCHAR U_7A6D\nENCODING 31341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1700\nE7C0\n2D40\nFFC0\n2540\n37E0\n6D40\nA460\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_7A6E\nENCODING 31342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nEFE0\n2AA0\nFFE0\n2A80\n3BE0\n6A80\nABE0\n2800\n3540\n2AA0\nENDCHAR\nSTARTCHAR U_7A6F\nENCODING 31343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nEFE0\n2100\nFD60\n3100\n6FE0\n6820\nABA0\n2AA0\n2BA0\n2FE0\nENDCHAR\nSTARTCHAR U_7A70\nENCODING 31344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nEFE0\n2AA0\nFEE0\n2480\n3FE0\n6480\nBFE0\n24A0\n2D40\n3620\nENDCHAR\nSTARTCHAR U_7A71\nENCODING 31345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\nE940\n2FE0\nFAA0\n2FE0\n3A20\n6FE0\nAAA0\n2E60\n2A20\n2D60\nENDCHAR\nSTARTCHAR U_7A72\nENCODING 31346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\nCAA0\n4AA0\nF100\n4FE0\n6AA0\nDFE0\nCC80\n56E0\n54A0\n6660\nENDCHAR\nSTARTCHAR U_7A73\nENCODING 31347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1540\n6FE0\n2440\nFFE0\n26C0\n7B60\n6FC0\nA540\n2540\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_7A74\nENCODING 31348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n7FE0\n4020\n4920\n0900\n0900\n1080\n1080\n2060\n4020\nENDCHAR\nSTARTCHAR U_7A75\nENCODING 31349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4920\n1080\n2040\n5E00\n0400\n0800\n1040\n2040\n1FC0\nENDCHAR\nSTARTCHAR U_7A76\nENCODING 31350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2080\n4840\n0800\n3F00\n0900\n1120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_7A77\nENCODING 31351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n2080\n4440\n8420\n7FC0\n0840\n1040\n2040\nC180\nENDCHAR\nSTARTCHAR U_7A78\nENCODING 31352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9220\n2100\nC8C0\n0F80\n1080\n6900\n0600\n1C00\nE000\nENDCHAR\nSTARTCHAR U_7A79\nENCODING 31353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\nA0A0\n7FC0\n0080\n3F80\n4000\n7FC0\n0040\n0380\nENDCHAR\nSTARTCHAR U_7A7A\nENCODING 31354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4020\n8900\n1080\n6040\n1F80\n0400\n0400\n0400\n7FE0\nENDCHAR\nSTARTCHAR U_7A7B\nENCODING 31355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\nA120\n4080\nBF40\n0400\nFFE0\n0400\n1400\n0800\nENDCHAR\nSTARTCHAR U_7A7C\nENCODING 31356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4140\n1080\n2440\n7FC0\n0E00\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_7A7D\nENCODING 31357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n5140\n9120\n7F80\n1100\nFFE0\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_7A7E\nENCODING 31358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2080\n5F40\n0400\nFFE0\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_7A7F\nENCODING 31359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\nA0A0\n7F80\n2200\n7FC0\n0A00\n1200\n2200\nCE00\nENDCHAR\nSTARTCHAR U_7A80\nENCODING 31360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2480\nFFE0\n0400\n2480\n2480\n3FA0\n0420\n03E0\nENDCHAR\nSTARTCHAR U_7A81\nENCODING 31361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4920\n9080\n2540\n0480\n7FE0\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_7A82\nENCODING 31362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\nA120\n4480\nA460\n3F80\n4400\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7A83\nENCODING 31363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n6080\n27E0\n2120\nF920\n2120\n2D20\n3220\n0CC0\nENDCHAR\nSTARTCHAR U_7A84\nENCODING 31364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4920\n1080\n3040\n1FE0\n2400\n47C0\n0400\n07E0\n0400\nENDCHAR\nSTARTCHAR U_7A85\nENCODING 31365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2080\n7FC0\n2080\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_7A86\nENCODING 31366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n4340\n7C00\n0400\n7F80\n0200\n0C00\n3000\nCFE0\nENDCHAR\nSTARTCHAR U_7A87\nENCODING 31367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n5040\n3F80\n4080\n9E80\n1280\n1FA0\n1020\n0FE0\nENDCHAR\nSTARTCHAR U_7A88\nENCODING 31368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n90A0\n2140\n4100\n9FE0\nE120\n5120\n8A20\nF520\n08C0\nENDCHAR\nSTARTCHAR U_7A89\nENCODING 31369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n60C0\n3F80\n0400\n7FC0\n4440\n4A40\n5140\n40C0\nENDCHAR\nSTARTCHAR U_7A8A\nENCODING 31370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2080\n47C0\n3900\n2900\n2900\n4A80\n4D40\n8920\nENDCHAR\nSTARTCHAR U_7A8B\nENCODING 31371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n4440\n2480\n2480\n3F80\n0400\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_7A8C\nENCODING 31372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\nA0A0\n4840\n73C0\n4A40\n5A40\n6B40\n1280\n6200\nENDCHAR\nSTARTCHAR U_7A8D\nENCODING 31373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2080\n47E0\nF900\n23E0\n2020\n3820\nC120\n00C0\nENDCHAR\nSTARTCHAR U_7A8E\nENCODING 31374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA120\n4880\nBF40\n2900\n2500\n3FC0\n0040\n7E40\n00C0\nENDCHAR\nSTARTCHAR U_7A8F\nENCODING 31375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n4040\n2FC0\n8100\n7FE0\n2100\nC100\n4500\n4200\nENDCHAR\nSTARTCHAR U_7A90\nENCODING 31376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n4440\n3F80\n0400\n7FC0\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_7A91\nENCODING 31377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\nA0A0\n5040\n3FC0\n0400\nFFE0\n0400\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_7A92\nENCODING 31378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\nA0A0\n7FC0\n1080\n3F40\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_7A93\nENCODING 31379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\nFFE0\n8220\n2100\nC8C0\n1200\n3F00\n0800\n5440\n9120\n0F00\nENDCHAR\nSTARTCHAR U_7A94\nENCODING 31380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2480\nFFE0\n1100\n20C0\nCA00\n0400\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_7A95\nENCODING 31381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n90A0\n2040\n4A20\n2A80\n1B00\n2A80\nCA20\n1220\n61E0\nENDCHAR\nSTARTCHAR U_7A96\nENCODING 31382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n90A0\n6440\n3F80\n4400\nFFE0\n0000\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_7A97\nENCODING 31383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n50A0\n2440\n7FE0\n2440\n2FC0\n3940\n2640\n2940\n3FC0\nENDCHAR\nSTARTCHAR U_7A98\nENCODING 31384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n3F80\n0880\nFFE0\n0880\n7FC0\n3040\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_7A99\nENCODING 31385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9520\nBFA0\n0500\n7FE0\n0900\n1200\nFFE0\n0200\n0E00\nENDCHAR\nSTARTCHAR U_7A9A\nENCODING 31386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n90A0\n2240\nC220\n7FE0\n4240\n7A40\n4980\n49A0\n9E60\nENDCHAR\nSTARTCHAR U_7A9B\nENCODING 31387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n4040\n7C80\n03E0\nFD40\n2880\n2B60\n4820\n87E0\nENDCHAR\nSTARTCHAR U_7A9C\nENCODING 31388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\nA4A0\n3FC0\n2480\n7FC0\n4440\n7FC0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7A9D\nENCODING 31389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\nBFA0\n6140\n3F00\n0400\n7FC0\n4A40\n5140\n4080\nENDCHAR\nSTARTCHAR U_7A9E\nENCODING 31390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n4840\n9F20\n2200\n7BC0\n2040\n3BC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_7A9F\nENCODING 31391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n7FC0\n6040\n3FC0\n2A80\n2F80\n3240\n5240\n9FC0\nENDCHAR\nSTARTCHAR U_7AA0\nENCODING 31392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2080\n7FC0\n2480\n3F80\n2480\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_7AA1\nENCODING 31393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\nA0A0\n7BC0\n1100\n6AC0\n0000\n7BC0\n4A40\n3180\nCA60\nENDCHAR\nSTARTCHAR U_7AA2\nENCODING 31394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n92A0\n6240\nFFC0\n0200\n7A40\n4A80\n7920\n02A0\nFC60\nENDCHAR\nSTARTCHAR U_7AA3\nENCODING 31395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\nA4A0\n7FC0\n1100\n2A80\n4440\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7AA4\nENCODING 31396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n7FC0\nA4A0\n2880\n3F80\n2240\n3B80\n2240\n31C0\nENDCHAR\nSTARTCHAR U_7AA5\nENCODING 31397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n60A0\n27C0\nFC40\n2540\nFD40\n3180\n4AA0\n8CE0\nENDCHAR\nSTARTCHAR U_7AA6\nENCODING 31398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA4A0\n5F40\n0400\nFFC0\n2A40\n1200\nFFE0\n0500\n78E0\nENDCHAR\nSTARTCHAR U_7AA7\nENCODING 31399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\nA0A0\n4740\n8420\n3F80\n2080\n3F80\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_7AA8\nENCODING 31400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n90A0\n2440\n7FC0\n0900\nFFE0\n1080\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_7AA9\nENCODING 31401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n7F80\nA140\n3D00\n2500\n7FC0\n5140\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_7AAA\nENCODING 31402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n0240\n4FC0\nA200\n5FE0\n2200\nCFC0\n4200\n5FE0\nENDCHAR\nSTARTCHAR U_7AAB\nENCODING 31403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2080\n7FC0\n1140\n7D40\n1440\nFFE0\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_7AAC\nENCODING 31404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n64C0\n1B00\nFEE0\n4940\n7940\n4940\n7840\n49C0\nENDCHAR\nSTARTCHAR U_7AAD\nENCODING 31405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n24A0\n5540\n7FC0\n1500\n2880\nFFE0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_7AAE\nENCODING 31406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2080\n7DE0\n4420\n7DE0\n4500\nFDE0\n2420\nCCC0\nENDCHAR\nSTARTCHAR U_7AAF\nENCODING 31407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA120\n4A80\n7FC0\n0400\n3F80\n0400\nFFE0\n4A40\n8920\nENDCHAR\nSTARTCHAR U_7AB0\nENCODING 31408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n4740\nB8A0\n2900\n7FC0\n0400\nFFE0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_7AB1\nENCODING 31409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2480\n47C0\n5A80\nD100\n5280\n5FE0\n4540\n5B20\nENDCHAR\nSTARTCHAR U_7AB2\nENCODING 31410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9220\n21A0\nAA40\n7140\n2240\nF940\n37E0\n6840\nA440\nENDCHAR\nSTARTCHAR U_7AB3\nENCODING 31411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2080\n5FE0\nE540\nA540\nA540\nAD40\nB5A0\nA960\nENDCHAR\nSTARTCHAR U_7AB4\nENCODING 31412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2480\n7FC0\n2080\n3F80\n2080\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7AB5\nENCODING 31413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n4840\n3F80\n2080\n3FC0\n2000\n3FE0\n4A20\n9560\nENDCHAR\nSTARTCHAR U_7AB6\nENCODING 31414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n3F80\n2480\nFFE0\n2480\nFFE0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_7AB7\nENCODING 31415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n2080\nF2E0\nAEA0\nEAA0\nAAA0\nEEE0\nA280\nE480\nENDCHAR\nSTARTCHAR U_7AB8\nENCODING 31416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\nA3A0\n7C80\n1500\nFFC0\n2500\n54C0\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_7AB9\nENCODING 31417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n4040\n97A0\n5200\n77C0\n1240\n7FE0\n5440\n97C0\nENDCHAR\nSTARTCHAR U_7ABA\nENCODING 31418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n6080\n27C0\nFC40\n27C0\nFC40\n27C0\n52A0\n8CE0\nENDCHAR\nSTARTCHAR U_7ABB\nENCODING 31419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA8A0\n7FC0\nAAA0\n2E80\n3480\n3F80\n5440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_7ABC\nENCODING 31420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nB540\n4AA0\nBF80\n2480\n3F80\n2480\nFFE0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_7ABD\nENCODING 31421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n6240\nBBE0\n2220\n3C80\n5080\nFC80\n2940\n4620\nENDCHAR\nSTARTCHAR U_7ABE\nENCODING 31422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA120\n7A80\n13E0\n7E20\n00C0\n7C80\n1080\n5940\nB620\nENDCHAR\nSTARTCHAR U_7ABF\nENCODING 31423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n90A0\nE780\nAC80\nC300\nBCE0\nA900\nEFC0\n8100\n9FE0\nENDCHAR\nSTARTCHAR U_7AC0\nENCODING 31424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA120\n4080\nFFE0\n2440\nBFC0\nA440\nBFC0\nE2A0\n0CE0\nENDCHAR\nSTARTCHAR U_7AC1\nENCODING 31425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA8A0\n4840\nFFA0\n0820\nFFE0\n2100\nFFE0\n2520\n3DE0\nENDCHAR\nSTARTCHAR U_7AC2\nENCODING 31426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA4A0\n7FC0\nAAA0\n1F00\n3580\nD960\n1F00\n2500\n4C80\nENDCHAR\nSTARTCHAR U_7AC3\nENCODING 31427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA4A0\n7FC0\n0400\n3F80\n2480\n7FC0\n4440\n7FC0\n07E0\nENDCHAR\nSTARTCHAR U_7AC4\nENCODING 31428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n59C0\n2040\n3DC0\n2040\n3FC0\n3680\n2DA0\n7660\nENDCHAR\nSTARTCHAR U_7AC5\nENCODING 31429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA120\n7A80\n4BE0\n7A40\n2540\nF940\n4880\n4940\nB620\nENDCHAR\nSTARTCHAR U_7AC6\nENCODING 31430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA0A0\n7BC0\nCA60\n7BC0\n4800\nFBC0\n2A40\n4A40\n9BC0\nENDCHAR\nSTARTCHAR U_7AC7\nENCODING 31431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA4A0\nFFE0\n4A40\n7FC0\n2080\n3F80\n2080\n3F80\n60C0\nENDCHAR\nSTARTCHAR U_7AC8\nENCODING 31432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\nA4A0\n5F40\n0400\nFFE0\n2A80\n7BC0\n4A40\n7BA0\n07E0\nENDCHAR\nSTARTCHAR U_7AC9\nENCODING 31433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n52A0\nFBC0\n2A00\nFFC0\n4840\n7BC0\n4A80\n7AA0\n4BE0\nENDCHAR\nSTARTCHAR U_7ACA\nENCODING 31434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n61C0\nA900\n6FC0\nF540\n2FE0\n7AA0\nABA0\n2860\nENDCHAR\nSTARTCHAR U_7ACB\nENCODING 31435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\n7FE0\n0000\n1080\n1080\n0900\n0900\n0A00\n0200\nFFE0\nENDCHAR\nSTARTCHAR U_7ACC\nENCODING 31436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2380\nFA80\n1280\n5280\n5280\n2280\n3AA0\nC4A0\n04A0\n0860\nENDCHAR\nSTARTCHAR U_7ACD\nENCODING 31437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n1100\nFD00\n0900\n4FE0\n4900\n5100\n3900\nC100\n0100\n0100\nENDCHAR\nSTARTCHAR U_7ACE\nENCODING 31438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1080\nFFE0\n0000\n1100\nFFE0\n1100\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_7ACF\nENCODING 31439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2700\nF900\n0100\n8900\n4FE0\n5100\n3900\nC100\n0100\n0100\nENDCHAR\nSTARTCHAR U_7AD0\nENCODING 31440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2240\nFA40\n0A20\n8C00\n53C0\n5240\n3980\nC180\n0240\n0C20\nENDCHAR\nSTARTCHAR U_7AD1\nENCODING 31441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFBE0\n0100\n8A80\n8A80\n5480\n5500\n2540\nF920\n03E0\nENDCHAR\nSTARTCHAR U_7AD2\nENCODING 31442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\nFFE0\n0080\n3C80\n2480\n3C80\n0080\n0280\n0100\nENDCHAR\nSTARTCHAR U_7AD3\nENCODING 31443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n23C0\nF900\n0100\n97C0\n5100\n5100\n2FE0\n3100\nC120\n00E0\nENDCHAR\nSTARTCHAR U_7AD4\nENCODING 31444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n2640\nFA40\n1240\n5FE0\n5240\n2240\n3A40\nC240\n0440\n0840\nENDCHAR\nSTARTCHAR U_7AD5\nENCODING 31445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2280\nFA40\n1440\n9820\n57C0\n2240\n3240\nC440\n0940\n1080\nENDCHAR\nSTARTCHAR U_7AD6\nENCODING 31446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n5440\n5280\n5100\n5280\n1460\n0200\n7FC0\n1100\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_7AD7\nENCODING 31447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF900\n0540\n9920\n5140\n6140\n3880\nC100\n0600\n1800\nENDCHAR\nSTARTCHAR U_7AD8\nENCODING 31448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nFBE0\n0420\n93A0\n52A0\n52A0\n23A0\n3820\nC120\n00C0\nENDCHAR\nSTARTCHAR U_7AD9\nENCODING 31449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF9E0\n0100\n9100\n57C0\n5440\n2440\n3440\nC440\n07C0\nENDCHAR\nSTARTCHAR U_7ADA\nENCODING 31450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF820\n1000\n9FE0\n5100\n6100\n3900\nC100\n0500\n0200\nENDCHAR\nSTARTCHAR U_7ADB\nENCODING 31451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n0500\nF480\n9A60\n5200\n6FC0\n3080\nC500\n0200\n0100\nENDCHAR\nSTARTCHAR U_7ADC\nENCODING 31452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\nFFE0\n2480\n3F80\n2480\n3F80\n0400\n0420\n03E0\nENDCHAR\nSTARTCHAR U_7ADD\nENCODING 31453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n0000\nF7E0\n8000\n5440\n5240\n2280\n3080\nC100\n0FE0\nENDCHAR\nSTARTCHAR U_7ADE\nENCODING 31454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FC0\n0900\n7FE0\n0000\n1F80\n1080\n1F80\n0A20\n1220\n61E0\nENDCHAR\nSTARTCHAR U_7ADF\nENCODING 31455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\nFFE0\n2080\n3F80\n2080\n3F80\n0A20\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_7AE0\nENCODING 31456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\nFFE0\n2080\n3F80\n2080\n3F80\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_7AE1\nENCODING 31457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\nFA00\n07C0\n9440\n9440\n67C0\n3C40\nC440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_7AE2\nENCODING 31458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2440\nFFE0\n0400\n97C0\n5900\n5100\n2FE0\n3100\nC280\n0C60\nENDCHAR\nSTARTCHAR U_7AE3\nENCODING 31459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2240\nF7A0\n1240\n9520\n53C0\n6640\n2A80\nF180\n0240\n0C20\nENDCHAR\nSTARTCHAR U_7AE4\nENCODING 31460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n27E0\nFD20\n0100\n97E0\n5280\n6280\n2280\nF520\n0920\n13E0\nENDCHAR\nSTARTCHAR U_7AE5\nENCODING 31461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\n0A00\nFFE0\n2480\n3F80\n2480\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_7AE6\nENCODING 31462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27E0\nF900\n07E0\n9520\n57E0\n5100\n2380\nF540\n0920\n1120\nENDCHAR\nSTARTCHAR U_7AE7\nENCODING 31463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27C0\nFC40\n97C0\n5440\n67C0\n3460\nCFC0\n0240\n1D40\n0080\nENDCHAR\nSTARTCHAR U_7AE8\nENCODING 31464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n21E0\nF900\n17C0\n9440\n57C0\n6440\n37C0\nC100\n0FE0\n0100\nENDCHAR\nSTARTCHAR U_7AE9\nENCODING 31465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n4100\n27E0\nFC20\n13C0\n9240\n53C0\n6240\n3BC0\nC240\n0FE0\nENDCHAR\nSTARTCHAR U_7AEA\nENCODING 31466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7800\n53C0\n7A40\n4980\n7980\n5260\n7C00\n0400\n7FC0\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_7AEB\nENCODING 31467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23C0\nFC80\n07C0\n9140\n9FE0\n6140\n27C0\n3900\nC100\n0700\nENDCHAR\nSTARTCHAR U_7AEC\nENCODING 31468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2100\nF7C0\n1540\n9FC0\n5100\n6FE0\n3960\nCFE0\n0820\n0860\nENDCHAR\nSTARTCHAR U_7AED\nENCODING 31469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nF7C0\n0440\n97C0\n5200\n1FE0\n24A0\n3560\nC7A0\n00C0\nENDCHAR\nSTARTCHAR U_7AEE\nENCODING 31470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2420\nFFE0\n0620\n9540\n57E0\n5540\n27E0\n3540\nCA40\n1440\nENDCHAR\nSTARTCHAR U_7AEF\nENCODING 31471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4520\nF7E0\n0000\nAFE0\nA100\nAFE0\n4AA0\n6AA0\n8AA0\n0860\nENDCHAR\nSTARTCHAR U_7AF0\nENCODING 31472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2800\nFBE0\n0AA0\n9BE0\n9AA0\n6BE0\n3880\nCBE0\n1080\n27E0\nENDCHAR\nSTARTCHAR U_7AF1\nENCODING 31473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF540\n07C0\n9540\n9FE0\n20A0\n3FE0\nC480\n0280\n0100\nENDCHAR\nSTARTCHAR U_7AF2\nENCODING 31474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n4280\n2FE0\nFD60\n0BA0\n9FE0\n5000\n27C0\n3540\nC540\n07C0\nENDCHAR\nSTARTCHAR U_7AF3\nENCODING 31475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n4F40\n2AA0\nF440\n8BA0\n5000\n57C0\n2440\n37C0\nC280\n1FE0\nENDCHAR\nSTARTCHAR U_7AF4\nENCODING 31476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8440\n4FE0\nF280\n0FE0\nAAA0\nAFE0\n4820\n3FE0\nC240\n0240\n00C0\nENDCHAR\nSTARTCHAR U_7AF5\nENCODING 31477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2040\nFFE0\n0B40\n9FE0\n5040\n6FE0\n3AA0\nCFE0\n0920\n0960\nENDCHAR\nSTARTCHAR U_7AF6\nENCODING 31478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n5140\nFFE0\n0000\nFBE0\n8A20\nFBE0\n2180\n6AA0\nB4E0\nENDCHAR\nSTARTCHAR U_7AF7\nENCODING 31479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFE40\n5180\nFE40\n8BE0\nFA80\n8BE0\nFA20\n2640\nF980\n2660\nENDCHAR\nSTARTCHAR U_7AF8\nENCODING 31480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n5280\nFFE0\n4A40\n7BC0\n4A40\n7BC0\n5280\n5AA0\n9460\nENDCHAR\nSTARTCHAR U_7AF9\nENCODING 31481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n7BE0\n5280\n9480\n1080\n1080\n1080\n1080\n1080\n1380\nENDCHAR\nSTARTCHAR U_7AFA\nENCODING 31482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n3DE0\n5280\n8840\n0000\n3F80\n0000\n0000\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_7AFB\nENCODING 31483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8A40\n0400\n7FC0\n0440\n0440\n0840\n1240\n6180\nENDCHAR\nSTARTCHAR U_7AFC\nENCODING 31484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8840\n1F00\n1100\n1500\n1300\n1120\n2120\n40E0\nENDCHAR\nSTARTCHAR U_7AFD\nENCODING 31485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n1040\n3F80\n0400\nFFE0\n0400\n0400\n0400\n1C00\nENDCHAR\nSTARTCHAR U_7AFE\nENCODING 31486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5140\n8A40\n0400\n2780\n3C80\nE480\n25A0\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_7AFF\nENCODING 31487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\n3F80\n0400\n0400\n7FC0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_7B00\nENCODING 31488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n3DE0\n5280\n8C40\n7FE0\n1000\n1000\n1000\n1000\n1FC0\nENDCHAR\nSTARTCHAR U_7B01\nENCODING 31489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n9440\n0000\n7FC0\n0400\n0400\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_7B02\nENCODING 31490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3BE0\n5680\n9440\n3F00\n0900\n1900\n0D20\n0B20\n1120\n20E0\nENDCHAR\nSTARTCHAR U_7B03\nENCODING 31491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA500\n9480\n7F00\n2100\n3FC0\n0040\nFF40\n0040\n0180\nENDCHAR\nSTARTCHAR U_7B04\nENCODING 31492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\nA280\n9240\n7FC0\n1100\n1100\nFFE0\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_7B05\nENCODING 31493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n9440\n3B80\n0400\n1B00\n60C0\n1200\n0C00\nF3C0\nENDCHAR\nSTARTCHAR U_7B06\nENCODING 31494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8C40\n3FC0\n2240\n2240\n3FC0\n2020\n2020\n3FE0\nENDCHAR\nSTARTCHAR U_7B07\nENCODING 31495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3BE0\n5500\n8C80\n0400\n7FE0\n0400\n0700\n0480\n0480\n0400\nENDCHAR\nSTARTCHAR U_7B08\nENCODING 31496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nBF40\n1200\n13C0\n1880\n2500\n2200\n4500\n98E0\nENDCHAR\nSTARTCHAR U_7B09\nENCODING 31497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\nA840\n3FC0\n4840\n8440\n0040\n0640\n3840\n0180\nENDCHAR\nSTARTCHAR U_7B0A\nENCODING 31498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA500\n1080\n3F80\n2500\n2500\n2500\n2480\n4440\n8420\nENDCHAR\nSTARTCHAR U_7B0B\nENCODING 31499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n39E0\n5280\nBFC0\n0480\nFFE0\n0480\n3F80\n0800\n3000\nC000\nENDCHAR\nSTARTCHAR U_7B0C\nENCODING 31500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n3FC0\n0200\n2200\n7FC0\n0A00\n1200\nE200\n0600\nENDCHAR\nSTARTCHAR U_7B0D\nENCODING 31501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\n0400\n7FC0\n4440\n4A40\n5140\n6040\n40C0\nENDCHAR\nSTARTCHAR U_7B0E\nENCODING 31502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n39E0\n5280\n8C40\n3F80\n0000\nFFE0\n0900\n0920\n3120\nC0E0\nENDCHAR\nSTARTCHAR U_7B0F\nENCODING 31503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\n1000\n1FC0\n2540\n4940\n1240\n2440\n0840\n1180\nENDCHAR\nSTARTCHAR U_7B10\nENCODING 31504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\nA280\n0400\nFFE0\n0000\n1F00\n1100\n1120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_7B11\nENCODING 31505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\nA280\n1440\n0380\n3C00\n0400\nFFE0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_7B12\nENCODING 31506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n9280\n0E40\n3180\nC460\n0200\n3F80\n0100\n0200\n0400\nENDCHAR\nSTARTCHAR U_7B13\nENCODING 31507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n9440\n4200\n4240\n7A80\n4300\n4A20\n5220\nE1E0\nENDCHAR\nSTARTCHAR U_7B14\nENCODING 31508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n5480\n8F40\n7800\n0F00\n7800\n0FC0\nF800\n0820\n07E0\nENDCHAR\nSTARTCHAR U_7B15\nENCODING 31509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n9440\n3F80\n2080\n2480\n2680\n0620\n1A20\nE1E0\nENDCHAR\nSTARTCHAR U_7B16\nENCODING 31510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8C40\n2080\n2880\n2500\n2100\n3A80\n2440\n1820\nENDCHAR\nSTARTCHAR U_7B17\nENCODING 31511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8840\n1F80\nE900\n0600\n1980\nE460\n0A00\n0400\nENDCHAR\nSTARTCHAR U_7B18\nENCODING 31512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8400\n07C0\n0400\n3FC0\n2040\n2040\n3FC0\n2040\nENDCHAR\nSTARTCHAR U_7B19\nENCODING 31513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n0A40\n1200\n3FC0\n4200\n1F80\n0200\n0200\n7FE0\nENDCHAR\nSTARTCHAR U_7B1A\nENCODING 31514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9280\n0840\n3FC0\n2440\n3FC0\n2440\n3FC0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7B1B\nENCODING 31515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n1440\n7FC0\n4440\n4440\n7FC0\n4440\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_7B1C\nENCODING 31516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\n5480\n8C00\n2480\n2480\n3F80\n0400\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_7B1D\nENCODING 31517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9280\nFFC0\n4040\n5F40\n4A40\n4440\n4A40\n5140\n7FC0\nENDCHAR\nSTARTCHAR U_7B1E\nENCODING 31518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n0900\n1080\n3F40\n0000\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_7B1F\nENCODING 31519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7FE0\n5280\nCD40\n3E00\n2900\n2900\n2880\n4A80\n4E60\n9A40\nENDCHAR\nSTARTCHAR U_7B20\nENCODING 31520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA500\n9480\n0400\n7FC0\n0100\n1100\n0A00\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_7B21\nENCODING 31521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nC880\n1F00\n1100\n1F00\n1100\n1F00\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_7B22\nENCODING 31522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n9080\n7FC0\n4040\n7FC0\n4400\n7FE0\n4220\n5920\n60E0\nENDCHAR\nSTARTCHAR U_7B23\nENCODING 31523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\n9280\n2840\n3FC0\n4040\nBE40\n2240\n3E80\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_7B24\nENCODING 31524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\n9480\n7FC0\n0440\n0940\n1080\n7FC0\n1040\n1FC0\n1040\nENDCHAR\nSTARTCHAR U_7B25\nENCODING 31525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n8A80\n3FC0\n0040\n7F40\n0040\n3E40\n2240\n3E40\n00C0\nENDCHAR\nSTARTCHAR U_7B26\nENCODING 31526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8440\n1080\n2FE0\n6080\nA480\n2280\n2080\n2180\nENDCHAR\nSTARTCHAR U_7B27\nENCODING 31527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\nFBC0\n4A40\n4A40\nFFE0\n4A40\n4A40\n4A40\n9CC0\nENDCHAR\nSTARTCHAR U_7B28\nENCODING 31528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\nA680\n9440\n0400\nFFE0\n1500\n2480\n5F40\n8420\n0400\nENDCHAR\nSTARTCHAR U_7B29\nENCODING 31529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5080\n8D40\n1480\n27E0\nFC00\n2200\n2240\n2140\n2080\nENDCHAR\nSTARTCHAR U_7B2A\nENCODING 31530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9280\n0840\n1F80\n1080\n1F80\n1080\n1F80\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_7B2B\nENCODING 31531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3BE0\n5480\n8A40\n2380\n3E00\n2200\n3FE0\n1220\n22C0\nC200\nENDCHAR\nSTARTCHAR U_7B2C\nENCODING 31532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n5480\nBFC0\n0440\n7FC0\n4400\n7FE0\n1420\n24C0\nC400\nENDCHAR\nSTARTCHAR U_7B2D\nENCODING 31533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3BE0\n5480\n8A40\n1500\n2480\n7FC0\n0080\n0900\n0600\n0100\nENDCHAR\nSTARTCHAR U_7B2E\nENCODING 31534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\n1FE0\n2400\n47C0\n0400\n07C0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7B2F\nENCODING 31535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9280\n2840\nFBE0\n5240\n5240\n5180\n2180\n5240\n8C20\nENDCHAR\nSTARTCHAR U_7B30\nENCODING 31536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9240\n0920\n7FC0\n0940\n7FC0\n4900\n7FE0\n0920\n3140\nENDCHAR\nSTARTCHAR U_7B31\nENCODING 31537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9280\n2440\n3FC0\n4040\n9E40\n1240\n1E40\n0040\n0180\nENDCHAR\nSTARTCHAR U_7B32\nENCODING 31538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\n1080\n3FC0\n1100\nFFE0\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_7B33\nENCODING 31539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\nA040\n21E0\n7D20\n2520\n2520\n2520\n55E0\n8920\nENDCHAR\nSTARTCHAR U_7B34\nENCODING 31540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\n7FE0\n0080\n3C80\n2480\n3C80\n0280\n0100\nENDCHAR\nSTARTCHAR U_7B35\nENCODING 31541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\nA840\n17C0\n4C40\n3440\n1580\n6420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_7B36\nENCODING 31542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n5280\nA440\n3FC0\n4400\n3FE0\n0A00\n0900\n10E0\n6040\nENDCHAR\nSTARTCHAR U_7B37\nENCODING 31543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n4840\n93C0\n6A40\n4A40\n5B40\n6A80\n1200\n6200\nENDCHAR\nSTARTCHAR U_7B38\nENCODING 31544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8800\n3FC0\n2000\n2F80\n2880\n2F80\n2000\n3FE0\nENDCHAR\nSTARTCHAR U_7B39\nENCODING 31545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n2900\nC480\n1500\nFFE0\n1500\n1500\n1700\n1000\n1FC0\nENDCHAR\nSTARTCHAR U_7B3A\nENCODING 31546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8940\n0FC0\n7C00\n07C0\n7C80\n0320\n0620\n79E0\nENDCHAR\nSTARTCHAR U_7B3B\nENCODING 31547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9280\n0840\n7FC0\n1240\n1240\n1240\n1EC0\nE200\n0200\nENDCHAR\nSTARTCHAR U_7B3C\nENCODING 31548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9280\n0A40\n0900\nFFE0\n0A80\n0A80\n1320\n2620\n49E0\nENDCHAR\nSTARTCHAR U_7B3D\nENCODING 31549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n3DE0\n5280\n8840\n0000\n3F80\n2A80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_7B3E\nENCODING 31550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9280\n4200\n2FC0\nE240\n2240\n2540\n28C0\n7000\n8FE0\nENDCHAR\nSTARTCHAR U_7B3F\nENCODING 31551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3BC0\n5500\n9F80\n2900\n4600\n0900\n10E0\nFF40\n1100\n1F00\nENDCHAR\nSTARTCHAR U_7B40\nENCODING 31552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n9480\n7FC0\n0400\nFFE0\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_7B41\nENCODING 31553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\nA280\n1840\n0A00\n7FC0\n4A40\n7FC0\n4A40\n4A40\n7FC0\nENDCHAR\nSTARTCHAR U_7B42\nENCODING 31554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n7FE0\n9480\n4900\n25C0\n4F40\n3540\n15C0\n6520\n23E0\nENDCHAR\nSTARTCHAR U_7B43\nENCODING 31555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7FE0\n9280\n7FC0\n4440\n5F40\n4440\n4A40\n5140\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_7B44\nENCODING 31556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3BE0\n5480\n8A40\n4A80\n2B00\n1A80\n6A40\n0A20\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_7B45\nENCODING 31557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n1440\n3FC0\n4400\nFFE0\n0900\n0920\n1120\n60E0\nENDCHAR\nSTARTCHAR U_7B46\nENCODING 31558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\n9440\n3F80\n0480\nFFE0\n0480\n7FC0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_7B47\nENCODING 31559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\n7DE0\n1120\n1140\n1140\n1D20\n61C0\n0100\nENDCHAR\nSTARTCHAR U_7B48\nENCODING 31560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A40\n8180\n3E00\n0200\n7FE0\n0200\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_7B49\nENCODING 31561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n0400\nFFE0\n0100\n7FC0\n1100\n0900\n0300\nENDCHAR\nSTARTCHAR U_7B4A\nENCODING 31562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n1240\nFFE0\n1080\n3140\n4A00\n0400\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_7B4B\nENCODING 31563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n5480\n8940\n7900\n4FE0\n7920\n4920\n7920\n4A20\n9CC0\nENDCHAR\nSTARTCHAR U_7B4C\nENCODING 31564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8C40\n3300\nC0E0\n1F00\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_7B4D\nENCODING 31565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9440\n3FC0\n4040\nBE40\n2240\n3E40\n2240\n3E40\n0180\nENDCHAR\nSTARTCHAR U_7B4E\nENCODING 31566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8C40\n11E0\nFD20\n2920\n4920\n3120\n49E0\n8520\nENDCHAR\nSTARTCHAR U_7B4F\nENCODING 31567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3BE0\n4C40\n9280\n1240\n23E0\n6E40\nA180\n2120\n22A0\n2C60\nENDCHAR\nSTARTCHAR U_7B50\nENCODING 31568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\n7FE0\n4200\n4F80\n4200\n5FC0\n4000\n7FE0\nENDCHAR\nSTARTCHAR U_7B51\nENCODING 31569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n0000\nF780\n2480\n2680\n2580\n3480\nC8A0\n10E0\nENDCHAR\nSTARTCHAR U_7B52\nENCODING 31570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9280\n7FC0\n4040\n5F40\n4040\n5F40\n5140\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_7B53\nENCODING 31571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3BE0\n5480\n8840\n7BC0\n1100\n1100\nFBE0\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_7B54\nENCODING 31572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5680\n8A40\n3180\nDF60\n0000\n1F80\n1080\n1080\n1F80\nENDCHAR\nSTARTCHAR U_7B55\nENCODING 31573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n9840\n23C0\nC800\n17E0\n3080\nD080\n1280\n1100\nENDCHAR\nSTARTCHAR U_7B56\nENCODING 31574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA280\n1440\nFFE0\n0400\n7FC0\n4E40\n5540\n2480\nC460\nENDCHAR\nSTARTCHAR U_7B57\nENCODING 31575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n9940\n2100\n6FC0\nA940\n2940\n2FC0\n2100\n2100\nENDCHAR\nSTARTCHAR U_7B58\nENCODING 31576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\n2000\nFBE0\n2220\n3A20\nE220\n23E0\nE220\nENDCHAR\nSTARTCHAR U_7B59\nENCODING 31577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nBF40\n0400\n3F80\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_7B5A\nENCODING 31578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n4240\n7B80\n4220\n79E0\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7B5B\nENCODING 31579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n0840\nAFE0\nA100\nAFE0\nA920\n2920\n4960\n8100\nENDCHAR\nSTARTCHAR U_7B5C\nENCODING 31580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3BE0\n5480\n8840\n2480\n1500\n7FC0\n0040\n3FC0\n0040\n7FC0\nENDCHAR\nSTARTCHAR U_7B5D\nENCODING 31581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3BE0\n5480\n9140\n7F80\n0480\nFFE0\n0480\n3F80\n0400\n1C00\nENDCHAR\nSTARTCHAR U_7B5E\nENCODING 31582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8840\n7FE0\n8420\n7FE0\n0E00\n1580\n6460\n0400\nENDCHAR\nSTARTCHAR U_7B5F\nENCODING 31583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n01E0\n7E40\n0A80\n3FC0\n0100\nFFE0\n0200\n0600\nENDCHAR\nSTARTCHAR U_7B60\nENCODING 31584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\nA500\n0200\n27E0\nF820\n2720\n2020\n3920\nC620\n00C0\nENDCHAR\nSTARTCHAR U_7B61\nENCODING 31585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n1440\n1B00\nE0E0\n1F00\n0400\nFFE0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7B62\nENCODING 31586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\n27C0\nFD40\n2540\n37C0\nE420\n2420\nE3E0\nENDCHAR\nSTARTCHAR U_7B63\nENCODING 31587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\n7140\n1140\nFD40\n1940\n3540\n5240\n90C0\nENDCHAR\nSTARTCHAR U_7B64\nENCODING 31588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n1440\n3F80\n2080\n3F80\n2080\n3FA0\n2140\n38E0\nENDCHAR\nSTARTCHAR U_7B65\nENCODING 31589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9240\n3F80\n2080\n3F80\n0000\n7FC0\n4040\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_7B66\nENCODING 31590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\nA480\n7FE0\n4020\n1F80\n0000\n7FC0\n0900\n1120\nE0E0\nENDCHAR\nSTARTCHAR U_7B67\nENCODING 31591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5240\nBFA0\n2080\n3F80\n2080\n3F80\n0A20\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_7B68\nENCODING 31592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8A40\n3580\nDF60\n0200\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_7B69\nENCODING 31593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7F80\n0A00\n7FC0\n4440\n7FC0\n4440\n7FC0\n4440\nENDCHAR\nSTARTCHAR U_7B6A\nENCODING 31594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8840\n7FE0\n5240\n5FC0\n5240\n5FC0\n4200\n7FE0\nENDCHAR\nSTARTCHAR U_7B6B\nENCODING 31595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nBFC0\n2080\n3F80\n2080\n3F80\n2080\n3F80\n60C0\nENDCHAR\nSTARTCHAR U_7B6C\nENCODING 31596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8A40\n7FE0\n4200\n7A80\n4980\n4920\n52A0\n8460\nENDCHAR\nSTARTCHAR U_7B6D\nENCODING 31597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n0400\n7FC0\n1100\nFFE0\n1100\n2100\nC100\nENDCHAR\nSTARTCHAR U_7B6E\nENCODING 31598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n9440\n7FE0\n2480\n2480\n5540\n8E20\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_7B6F\nENCODING 31599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8940\n7900\n4BC0\n7940\n4940\n5A40\nE240\n0480\nENDCHAR\nSTARTCHAR U_7B70\nENCODING 31600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\n4480\n9440\n27E0\n6A00\nA3C0\n2200\n23E0\n2200\n2200\nENDCHAR\nSTARTCHAR U_7B71\nENCODING 31601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n9240\n2A00\n2BE0\n6E80\nAA80\n2900\n2280\n2C60\nENDCHAR\nSTARTCHAR U_7B72\nENCODING 31602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\nA440\n1480\n3FC0\n2040\n3FC0\n2040\n3FC0\n20C0\nENDCHAR\nSTARTCHAR U_7B73\nENCODING 31603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\nF840\n1780\n2100\n37C0\n5100\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_7B74\nENCODING 31604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n9440\n7FE0\n2480\n34C0\n4D20\n8A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_7B75\nENCODING 31605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\nEF80\n4100\nF5E0\n5500\n27E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_7B76\nENCODING 31606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n2440\n3FC0\n4400\nFFE0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_7B77\nENCODING 31607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n5480\nA200\n2FC0\nB240\nA240\nBFE0\n2300\n2480\n3860\nENDCHAR\nSTARTCHAR U_7B78\nENCODING 31608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9440\n3F80\n2080\n3F80\n2080\n7FC0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_7B79\nENCODING 31609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n7FC0\n0800\n3F80\n1000\nFFE0\n2100\n7FE0\n9100\n0B00\nENDCHAR\nSTARTCHAR U_7B7A\nENCODING 31610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8860\n7FC0\n4200\n5FC0\n4280\n5FC0\n4000\n7FE0\nENDCHAR\nSTARTCHAR U_7B7B\nENCODING 31611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\nA480\n1440\nFFE0\n4440\n7FC0\n4440\n7FC0\n1400\n0800\nF7E0\nENDCHAR\nSTARTCHAR U_7B7C\nENCODING 31612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n9F40\n1100\n3F80\n2480\n2480\n2A80\n1100\n60C0\nENDCHAR\nSTARTCHAR U_7B7D\nENCODING 31613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nBFC0\n2080\n3F80\n7FC0\n0400\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7B7E\nENCODING 31614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n5480\n8440\n0A00\n3180\nDF60\n2480\n2500\n1100\n7FE0\nENDCHAR\nSTARTCHAR U_7B7F\nENCODING 31615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n1F80\n6900\n0600\n79E0\n0400\nFFE0\n2480\n4C40\nENDCHAR\nSTARTCHAR U_7B80\nENCODING 31616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n27C0\n5040\n4F40\n4940\n4F40\n4940\n4F40\n40C0\nENDCHAR\nSTARTCHAR U_7B81\nENCODING 31617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5280\n8440\n3F80\n1100\nFFC0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_7B82\nENCODING 31618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n1440\n7FE0\n2480\n5540\n8E20\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_7B83\nENCODING 31619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nFC40\n4BE0\n7A40\n4A40\n7940\n4880\nF940\n0E20\nENDCHAR\nSTARTCHAR U_7B84\nENCODING 31620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n3FC0\n2440\n3FC0\n2440\n3FC0\n1200\nFFE0\n0200\nENDCHAR\nSTARTCHAR U_7B85\nENCODING 31621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3BE0\n5480\nBF80\n2480\n3F80\n2480\nFFE0\n1100\n1100\n6100\nENDCHAR\nSTARTCHAR U_7B86\nENCODING 31622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nFFC0\n4440\n5B40\n0000\n4240\n7B80\n4220\n71E0\nENDCHAR\nSTARTCHAR U_7B87\nENCODING 31623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n7FE0\n4420\n5FA0\n4420\n4F20\n4920\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_7B88\nENCODING 31624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n5040\n2280\n9440\n67A0\n2000\nC7C0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_7B89\nENCODING 31625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n27C0\nF440\n27C0\n3100\nEFE0\n2120\n2220\n6C60\nENDCHAR\nSTARTCHAR U_7B8A\nENCODING 31626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\nFD80\n2240\n3D20\n24C0\n2400\n5580\n8840\nENDCHAR\nSTARTCHAR U_7B8B\nENCODING 31627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n0A40\n7F80\n0520\n7FE0\n0900\n7FC0\n04A0\n0520\n7BE0\nENDCHAR\nSTARTCHAR U_7B8C\nENCODING 31628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\nFE20\n2520\n7B20\n1120\n7D20\n1020\nFCE0\nENDCHAR\nSTARTCHAR U_7B8D\nENCODING 31629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n5280\nAA40\n2FE0\nF880\n2BE0\n3AA0\nEAA0\n2AE0\n2880\nEFE0\nENDCHAR\nSTARTCHAR U_7B8E\nENCODING 31630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n5480\n8FC0\n0400\n7FE0\n4420\n5F00\n4440\n4FC0\n4920\nB0E0\nENDCHAR\nSTARTCHAR U_7B8F\nENCODING 31631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n7FC0\n2900\n7F80\n0480\nFFE0\n0480\n7F80\n0400\n0C00\nENDCHAR\nSTARTCHAR U_7B90\nENCODING 31632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n0400\nFFE0\n2080\n3F80\n2080\n3F80\n2180\nENDCHAR\nSTARTCHAR U_7B91\nENCODING 31633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n7FE0\n0480\nFFE0\n0480\n3F80\n2400\n27C0\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_7B92\nENCODING 31634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nBFC0\n0080\nFFE0\n8420\n3F80\n2480\n2580\n0400\nENDCHAR\nSTARTCHAR U_7B93\nENCODING 31635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8840\n7F80\n0080\nFFE0\n2480\n1F00\nE480\n0860\nENDCHAR\nSTARTCHAR U_7B94\nENCODING 31636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\nA940\n47E0\n3420\n1420\n67E0\n2420\n2420\n27E0\nENDCHAR\nSTARTCHAR U_7B95\nENCODING 31637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9500\n7FE0\n1100\n1D00\n1700\n1100\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7B96\nENCODING 31638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\n2100\nFFE0\n3180\n6B40\nA520\n2920\n2100\nENDCHAR\nSTARTCHAR U_7B97\nENCODING 31639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n5240\nBF80\n2080\n3F80\n2080\n3F80\n1100\nFFE0\n1100\n6100\nENDCHAR\nSTARTCHAR U_7B98\nENCODING 31640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n4140\n5E40\n4440\n7FC0\n4E40\n5540\n7FC0\nENDCHAR\nSTARTCHAR U_7B99\nENCODING 31641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\n7BE0\n4A20\n7A40\n4BE0\n7AA0\n4A40\n9AA0\nENDCHAR\nSTARTCHAR U_7B9A\nENCODING 31642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n9840\n2540\n7D40\n8140\n7D40\n4540\n7C40\n44C0\nENDCHAR\nSTARTCHAR U_7B9B\nENCODING 31643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9280\n0840\nFFC0\n1540\n3D40\nE540\n2540\n25A0\nE920\nENDCHAR\nSTARTCHAR U_7B9C\nENCODING 31644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3BE0\n5480\n8A40\nFFE0\n9120\n2080\n5F40\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_7B9D\nENCODING 31645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3BE0\n5480\nA840\n2240\nFFE0\n2240\n3A40\nE3C0\n2240\nE3C0\nENDCHAR\nSTARTCHAR U_7B9E\nENCODING 31646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nAA40\n7FC0\n0800\nFFE0\n1280\n7660\n9080\n0F80\nENDCHAR\nSTARTCHAR U_7B9F\nENCODING 31647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8840\n3F80\n2080\n3F80\n2240\n3B80\n2220\n39E0\nENDCHAR\nSTARTCHAR U_7BA0\nENCODING 31648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n3F80\n0400\nFFC0\n2480\nFFE0\n2480\n7FC0\n0400\n3F80\nENDCHAR\nSTARTCHAR U_7BA1\nENCODING 31649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\nFFE0\n8020\n3F80\n2080\n3FC0\n2040\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_7BA2\nENCODING 31650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n1240\nFFE0\nA020\n3FC0\n2A40\n5AC0\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_7BA3\nENCODING 31651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nBC40\n1140\n7D40\n5540\n5540\n3940\n5440\n10C0\nENDCHAR\nSTARTCHAR U_7BA4\nENCODING 31652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n1240\n7FC0\n2100\n5280\n8C40\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7BA5\nENCODING 31653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nA940\n2FE0\nC900\n2BC0\nAA40\n4980\n5260\n1440\nENDCHAR\nSTARTCHAR U_7BA6\nENCODING 31654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n0400\nFFE0\n2080\n2480\n2480\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_7BA7\nENCODING 31655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9080\n7FE0\n4200\n5FC0\n4A80\n7FE0\n4500\n4880\n7FE0\nENDCHAR\nSTARTCHAR U_7BA8\nENCODING 31656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8FC0\n2240\nF780\n2160\n37C0\nE100\n2FE0\nE100\nENDCHAR\nSTARTCHAR U_7BA9\nENCODING 31657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n5240\n7FC0\n0800\n1F80\n6900\n0E00\n7000\nENDCHAR\nSTARTCHAR U_7BAA\nENCODING 31658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8940\n3F80\n2480\n3F80\n2480\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7BAB\nENCODING 31659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n0440\nFFE0\n0440\n7FC0\n5540\n64C0\n8440\nENDCHAR\nSTARTCHAR U_7BAC\nENCODING 31660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n1140\nFFE0\n1500\nFFE0\n1000\n3FC0\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_7BAD\nENCODING 31661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n0A00\nFFE0\n4840\n7940\n4940\n7940\n4840\n59C0\nENDCHAR\nSTARTCHAR U_7BAE\nENCODING 31662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8840\nFFE0\n8020\n3F80\n2080\n3F80\n2080\nFFE0\nENDCHAR\nSTARTCHAR U_7BAF\nENCODING 31663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3BE0\n5480\n9FE0\n2940\n2FC0\n6940\nAFC0\n2900\n2600\n39E0\nENDCHAR\nSTARTCHAR U_7BB0\nENCODING 31664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n4A80\nBFE0\n2520\n2920\n7F60\n0200\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_7BB1\nENCODING 31665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\n9440\n7FC0\n1240\n3BC0\n5640\n93C0\n1240\n13C0\nENDCHAR\nSTARTCHAR U_7BB2\nENCODING 31666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nAA40\n2FC0\n5200\n5FE0\n2500\nC500\n4920\n50E0\nENDCHAR\nSTARTCHAR U_7BB3\nENCODING 31667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nFFC0\n4040\n7FC0\n5080\n7FC0\n4900\nBFC0\n9100\nENDCHAR\nSTARTCHAR U_7BB4\nENCODING 31668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n1140\n7FE0\n4100\n5D40\n4140\n5CA0\n9560\n9E20\nENDCHAR\nSTARTCHAR U_7BB5\nENCODING 31669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9440\n0480\n1540\n6220\n1FC0\nF040\n1FC0\n1040\n1FC0\nENDCHAR\nSTARTCHAR U_7BB6\nENCODING 31670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8BC0\n2240\n7BC0\n2240\n7BC0\n4A40\n7A40\n0480\nENDCHAR\nSTARTCHAR U_7BB7\nENCODING 31671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\nFBE0\n4500\n75C0\n5F40\n5540\n9420\nB3E0\nENDCHAR\nSTARTCHAR U_7BB8\nENCODING 31672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\n8440\n3E80\n0500\nFFE0\n1080\n3F80\nD080\n1F80\nENDCHAR\nSTARTCHAR U_7BB9\nENCODING 31673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\nAA40\n43E0\nF420\n2220\n4920\nF520\n5020\nA8C0\nENDCHAR\nSTARTCHAR U_7BBA\nENCODING 31674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8C40\n7FC0\n0400\nFFE0\n3180\n5F40\n9120\n1F00\nENDCHAR\nSTARTCHAR U_7BBB\nENCODING 31675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8FC0\n2240\n5FE0\nA240\n4FC0\nC200\n5FE0\n4200\nENDCHAR\nSTARTCHAR U_7BBC\nENCODING 31676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nFFC0\n4040\n7FC0\n4900\n5F80\n4400\n8400\nBFE0\nENDCHAR\nSTARTCHAR U_7BBD\nENCODING 31677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FC0\n4A80\nBF00\n0400\nFFE0\n2D80\n3680\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_7BBE\nENCODING 31678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\n5540\n7D40\n4540\n7D40\n4540\n7C40\n45C0\nENDCHAR\nSTARTCHAR U_7BBF\nENCODING 31679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nBFC0\n2080\n7FE0\n2080\n3F80\n20E0\nFF80\n0080\nENDCHAR\nSTARTCHAR U_7BC0\nENCODING 31680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\nFDE0\n4520\n7D20\n4520\n7D20\n4920\n5560\n6500\nENDCHAR\nSTARTCHAR U_7BC1\nENCODING 31681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BE0\n5500\nBF80\n2080\n3F80\n2080\n7FC0\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_7BC2\nENCODING 31682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8840\n3F80\n2080\n3F80\n2400\n7F80\n8400\nFFE0\nENDCHAR\nSTARTCHAR U_7BC3\nENCODING 31683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nFFC0\n4040\n7FC0\n5FC0\n5040\n5FC0\n9040\n9FC0\nENDCHAR\nSTARTCHAR U_7BC4\nENCODING 31684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5240\nFFE0\n5520\n7D20\n5520\n7D60\n1100\nFF20\n10E0\nENDCHAR\nSTARTCHAR U_7BC5\nENCODING 31685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n4840\n7FC0\n0000\nFFE0\n0400\n7FC0\n4A40\n4AC0\nENDCHAR\nSTARTCHAR U_7BC6\nENCODING 31686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8F40\n1100\nFFE0\n2C80\n5700\n2A80\n1240\n6C20\nENDCHAR\nSTARTCHAR U_7BC7\nENCODING 31687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n3FC0\n2040\n3FC0\n2000\n3FE0\n3520\n5FE0\n9560\nENDCHAR\nSTARTCHAR U_7BC8\nENCODING 31688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nB840\n13E0\nFC40\n1240\n7D40\n1040\n1C40\nE080\nENDCHAR\nSTARTCHAR U_7BC9\nENCODING 31689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\nFF80\n24A0\n26A0\nF9E0\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_7BCA\nENCODING 31690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\n8480\n5FE0\nA480\n5FE0\nC480\n4840\n5020\nENDCHAR\nSTARTCHAR U_7BCB\nENCODING 31691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FE0\n4200\n7FE0\n5280\n6F40\n4500\n4880\n7FE0\nENDCHAR\nSTARTCHAR U_7BCC\nENCODING 31692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n17C0\n2040\n6FE0\nA900\n3FE0\n2100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_7BCD\nENCODING 31693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\nCA80\n7540\n2100\nF540\n2580\n7100\nAA80\n2440\n2820\nENDCHAR\nSTARTCHAR U_7BCE\nENCODING 31694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n8840\nF100\n9540\nF520\n9940\nF040\n9180\nF600\nENDCHAR\nSTARTCHAR U_7BCF\nENCODING 31695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8A40\n4BE0\nFA40\n4D00\n7900\n4A80\n7A80\n0C60\nENDCHAR\nSTARTCHAR U_7BD0\nENCODING 31696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nA840\nFFE0\n2880\n7BE0\n6AA0\nAAA0\n2880\n2FE0\nENDCHAR\nSTARTCHAR U_7BD1\nENCODING 31697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7BE0\n9480\n3F80\n2480\nFFE0\n2080\n2480\n2480\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_7BD2\nENCODING 31698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n9A40\n6180\nBF60\n2100\n3F40\n2480\n2B00\n30C0\nENDCHAR\nSTARTCHAR U_7BD3\nENCODING 31699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9080\n2500\nFFE0\n2480\n4840\nFFE0\n1100\n0F00\nF0E0\nENDCHAR\nSTARTCHAR U_7BD4\nENCODING 31700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n1F80\n1080\n3FC0\n2040\n3FC0\n2040\n3FC0\nE0E0\nENDCHAR\nSTARTCHAR U_7BD5\nENCODING 31701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n9FC0\n0400\nFFE0\n1100\n2080\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_7BD6\nENCODING 31702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8840\n7FC0\n4480\n7FE0\n4480\n5F80\n9080\n9F80\nENDCHAR\nSTARTCHAR U_7BD7\nENCODING 31703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\n9280\n3FC0\nE400\n3F80\n2400\n7FC0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_7BD8\nENCODING 31704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n3FC0\n5540\n1F40\n0440\n3FC0\n5540\n1F40\n0840\n71C0\nENDCHAR\nSTARTCHAR U_7BD9\nENCODING 31705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\nFFE0\n1100\n1F00\n0000\n7FC0\n5140\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_7BDA\nENCODING 31706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n9280\n7FE0\n4500\n7DE0\n4500\n5DC0\n4500\n7DE0\n4500\n7FE0\nENDCHAR\nSTARTCHAR U_7BDB\nENCODING 31707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9280\nFBE0\n0820\nFBE0\n8200\nFBE0\n4920\n28A0\nF3C0\nENDCHAR\nSTARTCHAR U_7BDC\nENCODING 31708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n3F20\n0540\n7480\n2440\nCC20\n3FC0\n5240\n8920\nENDCHAR\nSTARTCHAR U_7BDD\nENCODING 31709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9540\n7FE0\n1100\nFFE0\n1500\nFFE0\n2480\nFFE0\n2180\nENDCHAR\nSTARTCHAR U_7BDE\nENCODING 31710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n4FC0\n2440\n87C0\n5440\n27C0\nC100\n4FC0\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_7BDF\nENCODING 31711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n1FE0\n2100\n2FC0\n6100\nBFE0\n2840\n2FC0\n2840\n28C0\nENDCHAR\nSTARTCHAR U_7BE0\nENCODING 31712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n23C0\n5680\n5900\nD6E0\n5100\n5FE0\n5540\n4B20\nENDCHAR\nSTARTCHAR U_7BE1\nENCODING 31713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n3F80\n2080\n3F80\n2080\nFFE0\n2500\n4880\n9160\n3E80\nENDCHAR\nSTARTCHAR U_7BE2\nENCODING 31714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n3FC0\n0400\n7FE0\n2040\n3FC0\n2040\n3FC0\nE0E0\nENDCHAR\nSTARTCHAR U_7BE3\nENCODING 31715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n7FE0\n1100\nFFE0\n8420\n7FC0\n0800\n0FC0\n3040\nC380\nENDCHAR\nSTARTCHAR U_7BE4\nENCODING 31716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BE0\n5480\nBFE0\n2200\n3FC0\n2200\n3FC0\n2200\n3FE0\n4A20\n9560\nENDCHAR\nSTARTCHAR U_7BE5\nENCODING 31717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\nFFE0\n0A00\n7FC0\n4A40\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_7BE6\nENCODING 31718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n4A40\n5540\n7FC0\n4280\n7B20\n4220\n79E0\nENDCHAR\nSTARTCHAR U_7BE7\nENCODING 31719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n0840\nFFE0\n9220\n3FC0\n6200\nBFC0\n2200\n3FE0\nENDCHAR\nSTARTCHAR U_7BE8\nENCODING 31720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7DE0\n9240\nE700\nA8C0\nDFA0\nA200\nBFE0\nEA80\n9240\nA620\nENDCHAR\nSTARTCHAR U_7BE9\nENCODING 31721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\nA7E0\n7880\n4BE0\n7AA0\n42A0\n7AA0\n4AE0\n7880\nENDCHAR\nSTARTCHAR U_7BEA\nENCODING 31722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n7FC0\n4400\n5FE0\n5420\n5F80\n5440\nA7C0\nA520\nD9E0\nENDCHAR\nSTARTCHAR U_7BEB\nENCODING 31723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\nFF80\n26A0\nFDE0\n0400\n7FC0\n0400\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_7BEC\nENCODING 31724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n8E40\n9180\n6460\nBF80\n3080\n5FC0\n5040\n9FC0\nENDCHAR\nSTARTCHAR U_7BED\nENCODING 31725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n1100\nFFE0\n2480\n2480\n3F80\n0420\n03E0\nENDCHAR\nSTARTCHAR U_7BEE\nENCODING 31726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n5480\n8A00\n53C0\n5280\n5440\n0000\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_7BEF\nENCODING 31727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nB940\n47C0\nF900\n27E0\nF940\n2140\n30A0\n2760\nENDCHAR\nSTARTCHAR U_7BF0\nENCODING 31728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n21E0\nFD20\n4940\nFDC0\n0120\n7DA0\n4540\n7D00\nENDCHAR\nSTARTCHAR U_7BF1\nENCODING 31729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\nFFE0\n2A80\n2480\n3F80\n0400\n7FC0\n4940\n5F40\nENDCHAR\nSTARTCHAR U_7BF2\nENCODING 31730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA500\n1080\nFBE0\n1080\n7F80\n0080\n7F80\n0080\n7F80\nENDCHAR\nSTARTCHAR U_7BF3\nENCODING 31731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n4440\n7FC0\n1500\nFFE0\n1500\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_7BF4\nENCODING 31732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n5280\n4FE0\n2620\nEB40\n2580\n2B40\n2520\n7200\n8FE0\nENDCHAR\nSTARTCHAR U_7BF5\nENCODING 31733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nA440\n4A40\nB3A0\n4100\nC5C0\n4500\n4B00\n50E0\nENDCHAR\nSTARTCHAR U_7BF6\nENCODING 31734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n2200\nFFE0\n2000\n3FC0\n0040\n5540\n8AC0\nENDCHAR\nSTARTCHAR U_7BF7\nENCODING 31735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n5380\n0280\n5D60\n2100\nE7C0\n2100\n3FC0\n6100\n9FE0\nENDCHAR\nSTARTCHAR U_7BF8\nENCODING 31736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\nAC80\n1100\n3F80\n4A40\nFFC0\n1200\n2980\nD460\n1900\n0600\nENDCHAR\nSTARTCHAR U_7BF9\nENCODING 31737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n3FC0\n2040\n3FC0\n2040\nFFE0\n1080\n3F40\nD2A0\n1F80\nENDCHAR\nSTARTCHAR U_7BFA\nENCODING 31738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nAFC0\n2540\nFFC0\n2540\n37C0\nE280\n2FE0\n6080\nENDCHAR\nSTARTCHAR U_7BFB\nENCODING 31739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n7FE0\n0A00\n7FC0\n4A40\n7FC0\n0000\nFFE0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7BFC\nENCODING 31740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n5280\n8400\n6F60\n4920\n4F20\n6960\n0F00\n3220\nC1E0\nENDCHAR\nSTARTCHAR U_7BFD\nENCODING 31741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n2840\n4FE0\nB4A0\n5FA0\nC4A0\n56E0\n5480\n5F80\nENDCHAR\nSTARTCHAR U_7BFE\nENCODING 31742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n4A40\n7FC0\n0480\n7FC0\n52A0\n4B20\n9CE0\nENDCHAR\nSTARTCHAR U_7BFF\nENCODING 31743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\nFFE0\n4440\n7FC0\n4440\n7FC0\n00A0\nFFE0\n1080\n0B80\nENDCHAR\nSTARTCHAR U_7C00\nENCODING 31744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n0400\nFFE0\n2080\n3F80\n2080\n3F80\n60C0\nENDCHAR\nSTARTCHAR U_7C01\nENCODING 31745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n2100\n45C0\n9500\n2FE0\n6100\nA5E0\n2500\n3BE0\nENDCHAR\nSTARTCHAR U_7C02\nENCODING 31746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n7FE0\n42A0\n7FE0\n4A20\n7AA0\n4120\n7AA0\n4460\n7FE0\nENDCHAR\nSTARTCHAR U_7C03\nENCODING 31747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\n9280\nF3C0\n2640\nF980\n23E0\n7440\nAA80\nA100\n2E00\nENDCHAR\nSTARTCHAR U_7C04\nENCODING 31748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FC0\n5480\nBFC0\n2040\n3FC0\n2F80\n2A80\n2FA0\n4820\n87E0\nENDCHAR\nSTARTCHAR U_7C05\nENCODING 31749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n7FE0\n0900\n7FE0\n5200\n5FC0\n6200\n5FC0\n4200\nBFE0\nENDCHAR\nSTARTCHAR U_7C06\nENCODING 31750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\nFFE0\n8120\n79E0\n0100\nFFC0\n5280\n5120\n52A0\n8FE0\nENDCHAR\nSTARTCHAR U_7C07\nENCODING 31751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9480\n2200\nFFE0\n4200\n73E0\n5500\n57E0\n5280\nAC60\nENDCHAR\nSTARTCHAR U_7C08\nENCODING 31752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5500\nBFE0\n2020\n3FE0\n2440\n3EE0\n2440\n5EE0\n8840\nENDCHAR\nSTARTCHAR U_7C09\nENCODING 31753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n0900\n8FC0\n5100\nEFE0\n2840\n2FC0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_7C0A\nENCODING 31754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n7FC0\n1100\n1F00\n1100\nFFE0\n2480\nDF60\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_7C0B\nENCODING 31755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9280\n3F80\n2480\n3F80\n2280\n21E0\n7F80\n5280\nFFE0\nENDCHAR\nSTARTCHAR U_7C0C\nENCODING 31756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n1100\nFFE0\n5420\n7C80\n1080\n3880\n5540\n9220\nENDCHAR\nSTARTCHAR U_7C0D\nENCODING 31757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n3F80\nE4E0\n3F80\n2480\nFFE0\n1100\n0E00\n71C0\nENDCHAR\nSTARTCHAR U_7C0E\nENCODING 31758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9440\n2280\nF7E0\n2280\n3FE0\nE440\n27C0\n2440\n67C0\nENDCHAR\nSTARTCHAR U_7C0F\nENCODING 31759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FE0\n4A40\n7FC0\n4000\n5100\n5DA0\n9120\n9DE0\nENDCHAR\nSTARTCHAR U_7C10\nENCODING 31760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7D00\n55E0\n7E20\n5480\n7C80\n1080\nFD40\n1220\nENDCHAR\nSTARTCHAR U_7C11\nENCODING 31761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\nFFE0\n2080\nFFE0\n2080\n3FA0\n3140\nD480\n1860\nENDCHAR\nSTARTCHAR U_7C12\nENCODING 31762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3FE0\n5280\nBFC0\n3480\n2A80\n3F80\n0800\nFFE0\n5540\nAFA0\nENDCHAR\nSTARTCHAR U_7C13\nENCODING 31763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4880\nFE40\n7A80\n5220\n7A40\n4280\n7A20\nAA40\nBF80\nENDCHAR\nSTARTCHAR U_7C14\nENCODING 31764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FC0\n5500\nFFE0\n1100\n7FC0\n1100\nFFE0\n3140\nD480\n1860\nENDCHAR\nSTARTCHAR U_7C15\nENCODING 31765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nFD40\n27E0\n3D20\n1120\n7D20\n5520\nFDA0\n1240\nENDCHAR\nSTARTCHAR U_7C16\nENCODING 31766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\nD5C0\nB900\n91E0\nFD40\nB940\nD540\n9240\nFC40\nENDCHAR\nSTARTCHAR U_7C17\nENCODING 31767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nAF80\n52C0\n0AA0\n7580\n2E00\nFFE0\n1480\nE460\nENDCHAR\nSTARTCHAR U_7C18\nENCODING 31768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\n9480\n3FC0\n0440\nFFE0\n5540\n7FC0\n4E40\n5540\nA4C0\nENDCHAR\nSTARTCHAR U_7C19\nENCODING 31769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n4FE0\n4100\nFFE0\n4920\n4FE0\n4920\n5FE0\n4880\n4580\nENDCHAR\nSTARTCHAR U_7C1A\nENCODING 31770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5500\nBF80\n2A80\nFFE0\n1100\n7D40\n54A0\n5CA0\n1360\nENDCHAR\nSTARTCHAR U_7C1B\nENCODING 31771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n6480\nFDC0\n2500\n3DE0\n3D40\n2540\nFF40\n2540\nC240\nENDCHAR\nSTARTCHAR U_7C1C\nENCODING 31772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n47C0\n2440\n97C0\n6440\n2FE0\nD4A0\n4920\n42C0\nENDCHAR\nSTARTCHAR U_7C1D\nENCODING 31773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\nFFC0\n5240\n3F80\n60C0\nBFA0\n2080\n3F80\n2500\nCCE0\nENDCHAR\nSTARTCHAR U_7C1E\nENCODING 31774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7BC0\n4A40\n7FC0\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_7C1F\nENCODING 31775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\nFFE0\n4A40\n7FC0\n2080\n3F80\n2080\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_7C20\nENCODING 31776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\nFFE0\n2480\n3F80\n2480\n3F80\n2480\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_7C21\nENCODING 31777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\n9480\nFBE0\n8A20\nFBE0\n9F20\nF1E0\n9F20\n9120\n9F60\nENDCHAR\nSTARTCHAR U_7C22\nENCODING 31778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\n9480\n7BE0\n4A20\n7BE0\n4A20\n7FE0\n4920\n4620\n59E0\nENDCHAR\nSTARTCHAR U_7C23\nENCODING 31779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n4440\nFFE0\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_7C24\nENCODING 31780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nBFC0\n2A40\n3FC0\n1080\n1F80\n1080\n1F80\n30C0\nENDCHAR\nSTARTCHAR U_7C25\nENCODING 31781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n3F80\n0800\n7FC0\n2080\n5F40\n9120\n7FC0\n5140\n5F40\nENDCHAR\nSTARTCHAR U_7C26\nENCODING 31782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n7900\n5240\n3F80\n4040\n9FA0\n1080\n1F80\n0900\nFFE0\nENDCHAR\nSTARTCHAR U_7C27\nENCODING 31783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9500\nFFE0\n1100\nFFE0\n2480\n3F80\n2480\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_7C28\nENCODING 31784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n9480\n7BC0\n4A40\n7BC0\n4220\n7FE0\n1100\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7C29\nENCODING 31785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n5EE0\n5280\n2940\nFFE0\n8820\n3FC0\n0840\nF380\nENDCHAR\nSTARTCHAR U_7C2A\nENCODING 31786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\nFBE0\nA280\nFBE0\n5100\nDFE0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_7C2B\nENCODING 31787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n3F80\n0480\nFFE0\n5540\n75C0\n7FC0\n5540\n9540\nENDCHAR\nSTARTCHAR U_7C2C\nENCODING 31788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7BC0\n4A40\n7D80\n2240\nA7E0\nBA40\nA240\nFBC0\nENDCHAR\nSTARTCHAR U_7C2D\nENCODING 31789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FE0\n2480\n5540\nFFE0\n2080\n5FC0\n90A0\n1F80\nENDCHAR\nSTARTCHAR U_7C2E\nENCODING 31790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nFBC0\n2100\nFFE0\n5240\n9FA0\n1480\n1280\n1F80\nENDCHAR\nSTARTCHAR U_7C2F\nENCODING 31791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nAA40\n27E0\nFA40\n23C0\n7240\n6FE0\nA240\n2420\nENDCHAR\nSTARTCHAR U_7C30\nENCODING 31792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n8A80\n57E0\n5520\n7FE0\n4520\n77E0\n5280\n57E0\n9080\nENDCHAR\nSTARTCHAR U_7C31\nENCODING 31793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3FE0\n5280\nAA40\n17E0\nFA40\n23C0\n3A40\n2FE0\n4A40\n9420\nENDCHAR\nSTARTCHAR U_7C32\nENCODING 31794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5280\nF7C0\n5540\n77C0\n5540\n77C0\n5500\n5FE0\nB100\nENDCHAR\nSTARTCHAR U_7C33\nENCODING 31795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\nFD80\n2240\nFC20\n8BC0\nF880\n23E0\nFC80\n2080\nENDCHAR\nSTARTCHAR U_7C34\nENCODING 31796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FE0\n4820\n7F80\n4820\n47E0\n5540\nBFE0\n8840\nENDCHAR\nSTARTCHAR U_7C35\nENCODING 31797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5500\nFDC0\n5740\n7C80\n5560\n7FC0\n1140\nFD40\n11C0\nENDCHAR\nSTARTCHAR U_7C36\nENCODING 31798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FC0\n5500\nA7C0\n1040\nFFE0\n1100\n2540\n7380\nA540\n2B20\nENDCHAR\nSTARTCHAR U_7C37\nENCODING 31799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\n9E80\n2240\n7FE0\nAA40\n37A0\n2000\n4FC0\n4840\n8FC0\nENDCHAR\nSTARTCHAR U_7C38\nENCODING 31800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n5080\nFFE0\n52A0\n73E0\n5340\nFE80\n5540\n8A20\nENDCHAR\nSTARTCHAR U_7C39\nENCODING 31801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\nA480\n1500\nFFE0\n9120\n3F80\n2480\n3F80\n2480\n3F80\nENDCHAR\nSTARTCHAR U_7C3A\nENCODING 31802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\n7FE0\n4920\n1F80\nFFE0\n2480\nDF60\n0400\n7FC0\nENDCHAR\nSTARTCHAR U_7C3B\nENCODING 31803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\nD280\n47C0\n2440\nE740\n2FE0\n2AA0\n2BA0\n5820\n8FE0\nENDCHAR\nSTARTCHAR U_7C3C\nENCODING 31804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3DE0\n4A80\n2280\nFFE0\n2280\n3FE0\nE540\n2FE0\n2440\n64C0\nENDCHAR\nSTARTCHAR U_7C3D\nENCODING 31805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n0C40\n3300\nCCC0\n7BC0\n4A40\n7BC0\n2A80\nC460\nENDCHAR\nSTARTCHAR U_7C3E\nENCODING 31806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n7FE0\n4A00\n7FC0\n4A40\n7FE0\n4A40\nBFC0\n2A80\nCA60\nENDCHAR\nSTARTCHAR U_7C3F\nENCODING 31807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n5FE0\n2920\n9FE0\n6920\n4FE0\nC8A0\n5FE0\n4880\n4580\nENDCHAR\nSTARTCHAR U_7C40\nENCODING 31808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n27E0\n2AA0\nFCA0\n2920\n3FE0\nE920\n2FE0\n2920\n6FE0\nENDCHAR\nSTARTCHAR U_7C41\nENCODING 31809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n21C0\nFA40\n23E0\nFA20\nAAA0\nFAA0\n22A0\n7140\nAA20\nENDCHAR\nSTARTCHAR U_7C42\nENCODING 31810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nABE0\n7C80\nCBE0\n7AA0\n4AA0\n7AA0\n52E0\n6880\nENDCHAR\nSTARTCHAR U_7C43\nENCODING 31811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7D00\n59E0\n4A80\n7840\n5040\n7F80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_7C44\nENCODING 31812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3FE0\n5240\nEFA0\n4A80\n7FE0\n4C80\n4A80\n4F80\n58C0\n7FE0\nENDCHAR\nSTARTCHAR U_7C45\nENCODING 31813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n6EC0\n4840\n6EC0\n4240\n6AC0\n4A40\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7C46\nENCODING 31814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3FE0\n4A40\n9FA0\n3200\nDFC0\n1200\n1FC0\n0900\n0600\n79E0\nENDCHAR\nSTARTCHAR U_7C47\nENCODING 31815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n2100\nFFE0\nB4A0\n0D00\n7600\n0D00\n74E0\nENDCHAR\nSTARTCHAR U_7C48\nENCODING 31816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n9240\n7FE0\n2880\nFEE0\nAB20\nFFA0\n1160\nFF20\n11E0\nFF20\nENDCHAR\nSTARTCHAR U_7C49\nENCODING 31817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\nA480\n7FC0\n1100\nFFE0\n8020\n7F80\n1100\n7F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_7C4A\nENCODING 31818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n7FE0\n14A0\n3C60\n15A0\n3FE0\n6200\nBFC0\n2200\n3FE0\nENDCHAR\nSTARTCHAR U_7C4B\nENCODING 31819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nBFC0\n2480\nFFE0\n6D40\n4440\n6EC0\n5540\n6EC0\nENDCHAR\nSTARTCHAR U_7C4C\nENCODING 31820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n7FC0\n0400\nFFE0\n0420\nFFE0\n5080\n5FE0\n7580\nENDCHAR\nSTARTCHAR U_7C4D\nENCODING 31821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n2140\nFBE0\n2140\nFFE0\n2220\nFBE0\n6A20\nA7E0\nENDCHAR\nSTARTCHAR U_7C4E\nENCODING 31822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nA3C0\n3D40\n2080\n3FE0\n52A0\nBAC0\n1580\n6C60\nENDCHAR\nSTARTCHAR U_7C4F\nENCODING 31823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3FE0\n5280\nABC0\n17E0\nFA40\n23C0\n3A40\n2FE0\n4A40\n9420\nENDCHAR\nSTARTCHAR U_7C50\nENCODING 31824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\nE540\nAFE0\nE200\nAFE0\nF540\nABA0\nA540\nA920\nENDCHAR\nSTARTCHAR U_7C51\nENCODING 31825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5440\nBFA0\n2A80\nFFE0\n3580\nDF60\n1500\n1280\n19C0\nENDCHAR\nSTARTCHAR U_7C52\nENCODING 31826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n6480\nAFE0\nF280\n2EE0\n3AA0\nEEE0\n2FE0\n2920\n6FE0\nENDCHAR\nSTARTCHAR U_7C53\nENCODING 31827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n4FC0\n2540\n8FE0\n6540\n27C0\nCD60\n47C0\n4540\n47C0\nENDCHAR\nSTARTCHAR U_7C54\nENCODING 31828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9240\n7D00\n55E0\nFEA0\n54A0\nFEA0\n2840\n10A0\n6D20\nENDCHAR\nSTARTCHAR U_7C55\nENCODING 31829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5280\nA5E0\nFEA0\n2540\n77E0\n6D20\nA7E0\n2520\n27E0\nENDCHAR\nSTARTCHAR U_7C56\nENCODING 31830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3FE0\n5240\nBD20\n1100\nFFE0\n6D40\n2940\n6DA0\n2AA0\nFC60\nENDCHAR\nSTARTCHAR U_7C57\nENCODING 31831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\nFFE0\nD520\nA4A0\n7FC0\nA400\n3FC0\n2400\n3FE0\nENDCHAR\nSTARTCHAR U_7C58\nENCODING 31832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5540\nFFA0\n5100\n7FE0\n5540\n7AA0\n5780\n5540\nBB20\nENDCHAR\nSTARTCHAR U_7C59\nENCODING 31833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9280\n71C0\n8840\n77E0\n24A0\nFAC0\nA9A0\n76A0\nF980\nENDCHAR\nSTARTCHAR U_7C5A\nENCODING 31834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n9240\n7FE0\n4220\n7FC0\n5260\n5FC0\n5240\n7FE0\nA520\nBFE0\nENDCHAR\nSTARTCHAR U_7C5B\nENCODING 31835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\nAC80\n5240\n8FE0\nF900\n26E0\nFA80\nAFE0\n7140\n21A0\nFEE0\nENDCHAR\nSTARTCHAR U_7C5C\nENCODING 31836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n2840\nFFE0\n2AA0\n2FE0\n3280\nE7C0\n2100\n2FE0\n6100\nENDCHAR\nSTARTCHAR U_7C5D\nENCODING 31837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7FE0\n9480\nFFE0\n2000\n7FC0\n5B40\n75C0\n5B40\n5540\nBA60\nENDCHAR\nSTARTCHAR U_7C5E\nENCODING 31838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n4480\nBFE0\n46A0\nD4E0\n5F80\n0000\n7FE0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7C5F\nENCODING 31839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n21C0\nFA40\n27E0\nFA20\nABE0\nFA20\n6BE0\nA660\nENDCHAR\nSTARTCHAR U_7C60\nENCODING 31840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n9340\nFDE0\n2900\nFFE0\n4820\n7BE0\n4A00\n7BC0\n4A20\n5BE0\nENDCHAR\nSTARTCHAR U_7C61\nENCODING 31841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nAB80\n2440\nFBA0\n2EE0\n3AA0\nEEE0\n2440\n6AA0\nENDCHAR\nSTARTCHAR U_7C62\nENCODING 31842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nA880\n7DE0\n8340\n7D40\n5540\n7C80\n2940\nD620\nENDCHAR\nSTARTCHAR U_7C63\nENCODING 31843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\nA480\n7BE0\n4A20\n7BE0\n4A20\n7FE0\n6AA0\n7FA0\n5520\n64A0\nENDCHAR\nSTARTCHAR U_7C64\nENCODING 31844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\nA540\n3540\n4B20\nFFE0\n2900\nEF40\n2880\nEEA0\n2960\nFE20\nENDCHAR\nSTARTCHAR U_7C65\nENCODING 31845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n9440\nFFE0\n4A40\n7FC0\n0000\n7FC0\n4A40\n7FC0\n4AC0\nENDCHAR\nSTARTCHAR U_7C66\nENCODING 31846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\nA480\n53C0\n8880\nFBE0\n22A0\nFBE0\nAAA0\n77E0\n2080\nFFE0\nENDCHAR\nSTARTCHAR U_7C67\nENCODING 31847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n5480\n9FE0\n5220\nDFE0\n5500\n5B40\n6580\n4B40\nA520\n9FE0\nENDCHAR\nSTARTCHAR U_7C68\nENCODING 31848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nA880\n7DE0\n8220\n7C80\n5480\n7C80\n2940\nD620\nENDCHAR\nSTARTCHAR U_7C69\nENCODING 31849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BE0\n5480\n8440\n47C0\n2440\nEFE0\n2A20\n2FC0\n2280\n5480\n8FE0\nENDCHAR\nSTARTCHAR U_7C6A\nENCODING 31850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n8A80\nA9E0\nD500\nA900\nFFE0\nD540\nAB40\n9540\nFE40\nENDCHAR\nSTARTCHAR U_7C6B\nENCODING 31851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\nA540\nFBE0\n2A80\n44A0\nBFE0\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_7C6C\nENCODING 31852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n9280\nFE80\n6D40\n57E0\n7D40\n11E0\nFD40\nA5E0\nB540\n8DE0\nENDCHAR\nSTARTCHAR U_7C6D\nENCODING 31853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nFFE0\n6B40\n4A40\n7FC0\n4940\n5DE0\n5120\n9CE0\nENDCHAR\nSTARTCHAR U_7C6E\nENCODING 31854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7FE0\nC940\n7FC0\n2480\n5480\nE7E0\n5480\nFFE0\n5480\nAFE0\nENDCHAR\nSTARTCHAR U_7C6F\nENCODING 31855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\nFFE0\n4000\n7FC0\n2080\n7FC0\n5140\n7FC0\n5540\nAA60\nENDCHAR\nSTARTCHAR U_7C70\nENCODING 31856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n3FE0\n5480\nFFE0\n4AA0\n7FE0\n3200\n5F80\n0900\n0600\n79E0\nENDCHAR\nSTARTCHAR U_7C71\nENCODING 31857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n5480\nFFE0\n94A0\n2940\n7BE0\nD680\n7BC0\n5280\n7BE0\nENDCHAR\nSTARTCHAR U_7C72\nENCODING 31858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\n9240\n29E0\nFEA0\nAAE0\nFEA0\nAAE0\nFEA0\nAAE0\n87A0\nENDCHAR\nSTARTCHAR U_7C73\nENCODING 31859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n2480\n1500\nFFE0\n0400\n0E00\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_7C74\nENCODING 31860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C00\n0600\n0900\n1080\n6460\n2480\n1500\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_7C75\nENCODING 31861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nA880\n7080\n23E0\nF880\n2080\n7080\nA880\nA880\n2080\n2080\nENDCHAR\nSTARTCHAR U_7C76\nENCODING 31862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nA780\n7480\n2480\nFC80\n2480\n7480\n6C80\nA4A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_7C77\nENCODING 31863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nA8C0\n7700\n2100\nF900\n27E0\n7100\n6900\nA120\n2120\n20E0\nENDCHAR\nSTARTCHAR U_7C78\nENCODING 31864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nAFC0\n7240\n2240\nFA40\n27C0\n7240\nAA40\nAA40\n2260\n2220\nENDCHAR\nSTARTCHAR U_7C79\nENCODING 31865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA900\n7100\n27E0\nFA40\n2280\n7480\nAB00\nA980\n2240\n2C20\nENDCHAR\nSTARTCHAR U_7C7A\nENCODING 31866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nAA00\n73E0\n2400\nFBC0\n2040\n7080\nA900\nAA20\n2220\n21E0\nENDCHAR\nSTARTCHAR U_7C7B\nENCODING 31867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\nFFE0\n1500\n2480\n4040\n0400\nFFE0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7C7C\nENCODING 31868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nA880\n7080\n22A0\nFAA0\n22A0\n72A0\nAAA0\nAAA0\n23E0\n2220\nENDCHAR\nSTARTCHAR U_7C7D\nENCODING 31869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nA840\n7080\n2080\nF880\n27E0\n7080\nA880\nAC80\n2280\n2100\nENDCHAR\nSTARTCHAR U_7C7E\nENCODING 31870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nABE0\n7120\n2520\nF520\n2520\n7120\n6A20\nA220\n24A0\n2440\nENDCHAR\nSTARTCHAR U_7C7F\nENCODING 31871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nA840\n7040\n27E0\nF840\n2240\n7140\nA940\nAA40\n2140\n2080\nENDCHAR\nSTARTCHAR U_7C80\nENCODING 31872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nA880\n77E0\n2080\nFA80\n2280\n7280\nAA80\nA900\n2280\n2C60\nENDCHAR\nSTARTCHAR U_7C81\nENCODING 31873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nAB80\n7080\n2080\nFFE0\n2080\n7080\nA880\nA880\n2080\n2080\nENDCHAR\nSTARTCHAR U_7C82\nENCODING 31874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1F00\n2200\n0400\n1B00\nE4E0\n1500\nFFE0\n1500\nE4E0\n0400\nENDCHAR\nSTARTCHAR U_7C83\nENCODING 31875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nAC80\n74A0\n27C0\nFC80\n2480\n7480\n6C80\nA5A0\n26A0\n2460\nENDCHAR\nSTARTCHAR U_7C84\nENCODING 31876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nAF00\n7400\n2400\nFFC0\n2540\n7540\nAD40\nA480\n2940\n3620\nENDCHAR\nSTARTCHAR U_7C85\nENCODING 31877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nAA00\n73E0\n26A0\nFAA0\n22A0\n72A0\nACA0\nA920\n2220\n20C0\nENDCHAR\nSTARTCHAR U_7C86\nENCODING 31878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA900\n7180\n2540\nFD20\n2520\n7140\n6880\nA100\n2200\n2C00\nENDCHAR\nSTARTCHAR U_7C87\nENCODING 31879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nA900\n77E0\n2000\nFB80\n2280\n7280\n6A80\nA2A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_7C88\nENCODING 31880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nAFC0\n7240\n2240\nFA40\n27C0\n7240\nAA40\nAA40\n2240\n2FE0\nENDCHAR\nSTARTCHAR U_7C89\nENCODING 31881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nAA80\n7240\n2420\nF800\n27C0\n7240\n6A40\nA240\n2440\n2980\nENDCHAR\nSTARTCHAR U_7C8A\nENCODING 31882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n7A80\n4320\n7A20\nC1E0\n2480\n1500\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_7C8B\nENCODING 31883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nAA00\n7780\nFA80\n22A0\n74A0\n6960\nA100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_7C8C\nENCODING 31884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27A0\nA8A0\n70A0\n23A0\nFC20\n27A0\n70A0\nA8A0\nA8A0\n24A0\n2320\nENDCHAR\nSTARTCHAR U_7C8D\nENCODING 31885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\nAF00\n7100\n21C0\nFF00\n2100\n71E0\nAF00\nA920\n2120\n20E0\nENDCHAR\nSTARTCHAR U_7C8E\nENCODING 31886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nABC0\n7240\nFA40\n63C0\n7280\nAA80\n2280\n2440\n2440\n2820\nENDCHAR\nSTARTCHAR U_7C8F\nENCODING 31887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA900\n7100\n27E0\nF900\n3280\n6A80\n6440\nA640\n2920\n3120\nENDCHAR\nSTARTCHAR U_7C90\nENCODING 31888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA880\n73E0\n2220\nFA20\n23E0\n7200\n6A00\nA200\n2400\n2400\nENDCHAR\nSTARTCHAR U_7C91\nENCODING 31889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nABE0\n72A0\n22A0\nFAA0\n23E0\n7200\nAA00\nA220\n2220\n21E0\nENDCHAR\nSTARTCHAR U_7C92\nENCODING 31890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA880\n77E0\n2000\nFA40\n2240\n7140\nA980\nA880\n2080\n2FE0\nENDCHAR\nSTARTCHAR U_7C93\nENCODING 31891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nAA40\n7240\n27E0\nFA40\n2240\n73C0\n6A40\nA240\nA240\n23C0\nENDCHAR\nSTARTCHAR U_7C94\nENCODING 31892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nAA00\n7200\n23E0\nFA20\n2220\n73E0\nAA00\nAA00\n2200\n23E0\nENDCHAR\nSTARTCHAR U_7C95\nENCODING 31893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nA900\n73E0\n2220\nFA20\n23E0\n7220\n6A20\nA220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_7C96\nENCODING 31894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA900\n77E0\n2100\nF900\n27C0\n7100\nAB80\nA540\n2920\n2100\nENDCHAR\nSTARTCHAR U_7C97\nENCODING 31895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nAA40\n7240\n23C0\nFA40\n2240\n73C0\n6A40\nA240\n2240\n2FE0\nENDCHAR\nSTARTCHAR U_7C98\nENCODING 31896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA900\n71E0\n2100\nF900\n27E0\n7420\nAC20\nA420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_7C99\nENCODING 31897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nA880\n73E0\n22A0\nFAA0\n23E0\n72A0\n6AA0\nA2A0\n23E0\nENDCHAR\nSTARTCHAR U_7C9A\nENCODING 31898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nABE0\n7400\n2900\nF5E0\n2720\n6D20\n7560\nAD00\n2420\n27E0\nENDCHAR\nSTARTCHAR U_7C9B\nENCODING 31899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0440\nFFE0\n0440\n7FC0\n1500\n4E40\n7FC0\n4E40\n9540\nENDCHAR\nSTARTCHAR U_7C9C\nENCODING 31900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n3F80\n4440\n4440\n7FC0\n2480\n1500\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_7C9D\nENCODING 31901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nAC00\n7400\n27E0\nFD00\n25E0\n7520\nAD20\nA520\n2AA0\n3440\nENDCHAR\nSTARTCHAR U_7C9E\nENCODING 31902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nAA80\n7280\n2FE0\nFAA0\n2AA0\n7AE0\nAC20\nA820\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_7C9F\nENCODING 31903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n7FC0\n2480\n1500\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_7CA0\nENCODING 31904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nAA40\n7240\n27E0\nFA40\n2240\n7240\n77E0\nA000\n2240\n2420\nENDCHAR\nSTARTCHAR U_7CA1\nENCODING 31905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nA820\n7BA0\n2820\nFBA0\n2AA0\n3AA0\n6BA0\nAAA0\n2820\n28E0\nENDCHAR\nSTARTCHAR U_7CA2\nENCODING 31906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8400\n57E0\n6A20\nC500\n58E0\n2480\n1500\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_7CA3\nENCODING 31907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\nAAA0\n7AA0\n2AA0\nFFE0\n2AA0\n3AA0\n6AA0\nAAA0\n2AA0\n3560\nENDCHAR\nSTARTCHAR U_7CA4\nENCODING 31908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7FC0\n5540\n7FC0\n4E40\n5540\nFFE0\n0800\n3FC0\n0040\n0380\nENDCHAR\nSTARTCHAR U_7CA5\nENCODING 31909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE4E0\n2420\n3520\nEEE0\n8580\n9F80\nE4E0\n2E20\n3520\n2520\nC4C0\nENDCHAR\nSTARTCHAR U_7CA6\nENCODING 31910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\nFFE0\n1500\nE4E0\n1080\n3BE0\n4A80\nABE0\n1080\nE080\nENDCHAR\nSTARTCHAR U_7CA7\nENCODING 31911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA880\n77E0\n2400\nFC80\n2480\n77E0\nAC80\nA480\n2880\n2BE0\nENDCHAR\nSTARTCHAR U_7CA8\nENCODING 31912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nA880\n7100\n23E0\nFA20\n2220\n73E0\nAA20\nAA20\n23E0\n2220\nENDCHAR\nSTARTCHAR U_7CA9\nENCODING 31913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA900\n77A0\nF940\n27E0\n7080\n6B00\nA6C0\n2B00\n2220\n21E0\nENDCHAR\nSTARTCHAR U_7CAA\nENCODING 31914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\nFFE0\n1500\n2480\nD160\n7FC0\n1100\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7CAB\nENCODING 31915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nA900\n7200\n2FE0\nFAA0\n2AA0\n7AA0\n6AA0\nAAA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_7CAC\nENCODING 31916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nAA80\n7280\nFFE0\n2AA0\n3AA0\n6FE0\nAAA0\n2AA0\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_7CAD\nENCODING 31917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA900\n7280\n2440\nFBA0\n2000\n77C0\n6C40\nA440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_7CAE\nENCODING 31918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nA900\n77C0\n2440\nFFC0\n2440\n77E0\nAD40\nA480\n2540\n2620\nENDCHAR\nSTARTCHAR U_7CAF\nENCODING 31919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nAC40\n77C0\n2440\nFC40\n27C0\n7440\nAFC0\nA2A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_7CB0\nENCODING 31920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nAB80\n72A0\n2120\nFBC0\n2040\n3080\n6BE0\nA080\n2080\n2180\nENDCHAR\nSTARTCHAR U_7CB1\nENCODING 31921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F80\nA280\n6AC0\nD4A0\n4B80\n6480\n1500\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_7CB2\nENCODING 31922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3C00\n23E0\n7A40\nC980\n3260\nC480\n1500\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_7CB3\nENCODING 31923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nA900\n77E0\n2520\nFFE0\n2520\n77E0\nAD00\nA500\n2300\n2CE0\nENDCHAR\nSTARTCHAR U_7CB4\nENCODING 31924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nACA0\n74A0\n27E0\nFCA0\n27E0\n7080\nA880\nABE0\n2080\n2FE0\nENDCHAR\nSTARTCHAR U_7CB5\nENCODING 31925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7FC0\n5540\n7FC0\n5540\n64C0\nFFE0\n1000\n3F80\n0080\n0700\nENDCHAR\nSTARTCHAR U_7CB6\nENCODING 31926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nA840\n77C0\nF840\n2FE0\n7120\n6D40\nA380\n2540\n2920\n2200\nENDCHAR\nSTARTCHAR U_7CB7\nENCODING 31927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nABE0\n7420\nFD60\n23A0\n77E0\n6D20\nA3A0\n2360\n2520\n20C0\nENDCHAR\nSTARTCHAR U_7CB8\nENCODING 31928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nAFE0\n7240\n23C0\nFA40\n23C0\n7240\n6A40\nAFE0\n2240\n2420\nENDCHAR\nSTARTCHAR U_7CB9\nENCODING 31929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7240\n2240\nFDA0\n2520\n7100\n6FE0\nA100\n2100\n2100\nENDCHAR\nSTARTCHAR U_7CBA\nENCODING 31930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7520\n27E0\nFD20\n27E0\n75A0\nAA80\nAFE0\n2080\n2080\nENDCHAR\nSTARTCHAR U_7CBB\nENCODING 31931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nAA00\n73C0\n2200\nFBC0\n2200\n77E0\nAAA0\nAAC0\n2340\n2620\nENDCHAR\nSTARTCHAR U_7CBC\nENCODING 31932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n92A0\n54A0\nFEA0\n5540\n9340\n2540\n7D40\n94A0\n7EA0\n24A0\nC4A0\nENDCHAR\nSTARTCHAR U_7CBD\nENCODING 31933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7420\n23C0\nF800\n27E0\n7100\nAD40\nA520\n2920\n2300\nENDCHAR\nSTARTCHAR U_7CBE\nENCODING 31934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7100\n27C0\nF100\n2FE0\n7440\n6FC0\nA440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_7CBF\nENCODING 31935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nAD40\n77C0\n2540\nFFC0\n2100\n77E0\nA900\nAB80\n2540\n2920\nENDCHAR\nSTARTCHAR U_7CC0\nENCODING 31936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nAFE0\n7480\n2280\nFAA0\n24C0\n7480\n6D80\nA6A0\n24A0\n2460\nENDCHAR\nSTARTCHAR U_7CC1\nENCODING 31937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nAFE0\n7100\n27E0\nFA80\n2540\n72A0\nAD00\nAA40\n2180\n2600\nENDCHAR\nSTARTCHAR U_7CC2\nENCODING 31938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\nAFE0\n7440\n27C0\nFC40\n27C0\n7440\n6FE0\nA680\n2440\n27E0\nENDCHAR\nSTARTCHAR U_7CC3\nENCODING 31939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nAA40\n73C0\n2240\nFFE0\n2200\n77E0\n6AA0\nA520\n22A0\n2440\nENDCHAR\nSTARTCHAR U_7CC4\nENCODING 31940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7820\n2FE0\nF800\n2FE0\n7AA0\n6FE0\nAAA0\n3AA0\n2860\nENDCHAR\nSTARTCHAR U_7CC5\nENCODING 31941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nA940\n7080\n27E0\nFAA0\n2580\n7100\nAFE0\nAB80\n2540\n2920\nENDCHAR\nSTARTCHAR U_7CC6\nENCODING 31942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nA900\n7200\n2FE0\nFAA0\n2BA0\n7AA0\n6BA0\nAAA0\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_7CC7\nENCODING 31943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nAC40\n77E0\n2500\nFDE0\n2680\n77E0\nAC80\nA480\n2540\n2620\nENDCHAR\nSTARTCHAR U_7CC8\nENCODING 31944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nA920\n75C0\n2700\nF9E0\n2220\n73E0\nAA20\nABE0\n2220\n2260\nENDCHAR\nSTARTCHAR U_7CC9\nENCODING 31945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nAD20\n76A0\n27E0\nF280\n2D60\n73C0\n6A40\nA580\n2240\n2420\nENDCHAR\nSTARTCHAR U_7CCA\nENCODING 31946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\nA4A0\n7EA0\n24E0\nFEA0\n2AA0\n3AE0\n6AA0\nAEA0\n2120\n2260\nENDCHAR\nSTARTCHAR U_7CCB\nENCODING 31947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\nA280\n7FE0\n2000\nFE20\n2AA0\n3EA0\n6AA0\nAEA0\n2A20\n2A60\nENDCHAR\nSTARTCHAR U_7CCC\nENCODING 31948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\nAF40\n7560\n2240\nFD00\n24E0\n73C0\nAA40\nABC0\n2240\n23C0\nENDCHAR\nSTARTCHAR U_7CCD\nENCODING 31949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\nAA80\n77E0\n2240\nFA40\n25A0\n77E0\nAA40\nA240\n25A0\n2FE0\nENDCHAR\nSTARTCHAR U_7CCE\nENCODING 31950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nAC00\n77E0\n26A0\nFFE0\n26A0\n77E0\nAC80\nA7E0\n2880\n37E0\nENDCHAR\nSTARTCHAR U_7CCF\nENCODING 31951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nA820\n7FE0\n2AA0\nF9C0\n2BE0\n6A20\n7BE0\nAA20\n2BE0\n3220\nENDCHAR\nSTARTCHAR U_7CD0\nENCODING 31952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nAFE0\n7520\n27E0\nFD20\n27E0\n7520\nA840\nAFE0\n2240\n21C0\nENDCHAR\nSTARTCHAR U_7CD1\nENCODING 31953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nA920\n7760\n2880\nFFE0\n2120\n75A0\nAB60\nADA0\n2120\n26C0\nENDCHAR\nSTARTCHAR U_7CD2\nENCODING 31954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nAFE0\n7280\n27E0\nFA00\n23E0\n72A0\nABE0\nAAA0\n27E0\n2AA0\nENDCHAR\nSTARTCHAR U_7CD3\nENCODING 31955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1380\n7A80\n1280\nFCE0\n8400\n7DC0\n5540\nFD40\n3880\n5540\n9220\nENDCHAR\nSTARTCHAR U_7CD4\nENCODING 31956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nAD40\n7280\n2360\nFD00\n27E0\n7520\nAFE0\nA900\n2140\n27A0\nENDCHAR\nSTARTCHAR U_7CD5\nENCODING 31957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\nAA80\n77E0\n2100\nF900\n27C0\n7100\nAFE0\nA540\n2AA0\n2AA0\nENDCHAR\nSTARTCHAR U_7CD6\nENCODING 31958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7940\n2FE0\nF940\n2FC0\n7900\nABC0\nAA40\n2A40\n33C0\nENDCHAR\nSTARTCHAR U_7CD7\nENCODING 31959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFC0\n7440\n2740\nFDC0\n2440\n77C0\nA140\nAFE0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_7CD8\nENCODING 31960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nAFE0\n7820\n27C0\nF920\n2340\n7580\n6AC0\nA5A0\n22A0\n2500\nENDCHAR\nSTARTCHAR U_7CD9\nENCODING 31961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\nAE80\n73E0\n2480\nFFE0\n2400\n75E0\nAD20\nA5E0\n2A00\n33E0\nENDCHAR\nSTARTCHAR U_7CDA\nENCODING 31962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nAFE0\n7480\n2240\nFA40\n2EE0\n7240\n6E40\nAA40\n33E0\n2200\nENDCHAR\nSTARTCHAR U_7CDB\nENCODING 31963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\nAB40\n77E0\n2420\nFBC0\n2240\n73C0\n6900\nA3C0\n2100\n27E0\nENDCHAR\nSTARTCHAR U_7CDC\nENCODING 31964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9100\nFFE0\nBB40\nD560\nA480\n9500\nFFE0\n9500\nE4E0\nENDCHAR\nSTARTCHAR U_7CDD\nENCODING 31965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nABA0\n74A0\n27E0\nF880\n2760\n7280\nAD20\nA240\n2080\n2700\nENDCHAR\nSTARTCHAR U_7CDE\nENCODING 31966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nFFE0\n1500\n7FC0\nA4A0\n3F80\n7FC0\n1100\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7CDF\nENCODING 31967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nAFE0\n7AA0\n2AA0\nFFE0\n2AA0\n3FE0\n6440\nA7C0\nA440\n27C0\nENDCHAR\nSTARTCHAR U_7CE0\nENCODING 31968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7540\n27E0\nFD40\n27C0\n7520\nAFC0\nAB40\n3520\n2B20\nENDCHAR\nSTARTCHAR U_7CE1\nENCODING 31969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7280\n27E0\nF800\n27C0\n7540\n6CC0\nA7C0\n22A0\n2CE0\nENDCHAR\nSTARTCHAR U_7CE2\nENCODING 31970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nAFE0\n7280\n27C0\nFC40\n27C0\n3440\n6FE0\nA100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_7CE3\nENCODING 31971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nA240\n7B40\n2FE0\nF6C0\n2B60\n77C0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_7CE4\nENCODING 31972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\nBF80\n6A80\nFFE0\n21A0\n6EA0\n7AA0\nAE40\nAA40\n2EA0\n2B20\nENDCHAR\nSTARTCHAR U_7CE5\nENCODING 31973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nA100\n7FE0\n2AA0\nFAA0\n2FE0\n7100\n6FE0\nAAA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_7CE6\nENCODING 31974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAFE0\n7100\n27C0\nFC40\n27C0\n7280\n6FE0\nA440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_7CE7\nENCODING 31975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nAC40\n77C0\n2440\nFFE0\n2540\n37C0\n6D40\nAFE0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_7CE8\nENCODING 31976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nAA20\n73E0\n2C80\nFBE0\n2EA0\n77E0\nAEA0\nA480\n34A0\n2BE0\nENDCHAR\nSTARTCHAR U_7CE9\nENCODING 31977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nAA80\n7440\n2FE0\nFD60\n2BA0\n6FE0\n7440\nA7C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_7CEA\nENCODING 31978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n47E0\n7D40\n43E0\n7C80\nA5E0\nBE80\n0A80\n7FE0\n1280\nE260\nENDCHAR\nSTARTCHAR U_7CEB\nENCODING 31979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nAAA0\n7FE0\n2000\nFFE0\n2440\n77C0\n6220\nA540\n2C80\n2660\nENDCHAR\nSTARTCHAR U_7CEC\nENCODING 31980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nAAA0\n7FE0\n2100\nFFA0\n2140\n77E0\nAA20\nA7E0\n2A20\n23E0\nENDCHAR\nSTARTCHAR U_7CED\nENCODING 31981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\nAEC0\n7540\n27C0\nF440\n2A20\n73C0\n6E80\nA100\n2280\n2C60\nENDCHAR\nSTARTCHAR U_7CEE\nENCODING 31982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F40\nAA40\n7F60\n29C0\nFF20\n2A20\n7F80\nA800\nAFE0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_7CEF\nENCODING 31983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nA100\n7FE0\n2920\nFBA0\n2540\n3FE0\n6200\nAFE0\n2AA0\n2AA0\nENDCHAR\nSTARTCHAR U_7CF0\nENCODING 31984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nA920\n7FE0\n2D60\nFFE0\n2D60\n3FE0\n68A0\nAFE0\n2AA0\n2FE0\nENDCHAR\nSTARTCHAR U_7CF1\nENCODING 31985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA880\nFBE0\nF140\n93E0\nF880\n8BE0\nF880\n1500\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_7CF2\nENCODING 31986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nA940\n7FE0\n2940\nFBE0\n2AA0\n3FE0\n6CA0\nAFE0\n3420\n2460\nENDCHAR\nSTARTCHAR U_7CF3\nENCODING 31987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n55C0\nFF40\n1160\nD700\n92C0\nFEC0\n1520\n7FC0\n0D00\n3480\nC460\nENDCHAR\nSTARTCHAR U_7CF4\nENCODING 31988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n25A0\n5360\n8DA0\n23E0\nAE80\n73E0\nFA80\n23E0\n7280\nABE0\nENDCHAR\nSTARTCHAR U_7CF5\nENCODING 31989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n2A80\n7FE0\n4940\n7BE0\n4C80\nFFE0\n1500\n2480\n4440\nENDCHAR\nSTARTCHAR U_7CF6\nENCODING 31990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAFE0\nFDA0\nAB60\nFDA0\n23E0\nAA80\n77E0\nFA80\n23E0\n7280\nABE0\nENDCHAR\nSTARTCHAR U_7CF7\nENCODING 31991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nAFE0\n7280\n2EE0\nFAA0\n2EE0\n3FE0\n6AA0\nAFE0\n2BA0\n2D60\nENDCHAR\nSTARTCHAR U_7CF8\nENCODING 31992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0880\n1100\n3E00\n0880\n7F40\n2240\n1280\n1240\n2220\n4E20\nENDCHAR\nSTARTCHAR U_7CF9\nENCODING 31993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2000\n4800\nF000\n2000\n4800\nFC00\n0000\nA800\nA800\n8000\nENDCHAR\nSTARTCHAR U_7CFA\nENCODING 31994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2200\n4A00\nF200\n2200\n4A00\nFA00\n0200\nAA20\nAA20\n81E0\nENDCHAR\nSTARTCHAR U_7CFB\nENCODING 31995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n7E00\n0880\n3F00\n0400\n0880\n7FC0\n0440\n1500\n2480\n4C40\nENDCHAR\nSTARTCHAR U_7CFC\nENCODING 31996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4900\nF3C0\n2140\n4940\nFA40\n0240\nAA40\nAD40\n8880\nENDCHAR\nSTARTCHAR U_7CFD\nENCODING 31997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\n4080\n8880\nF080\n2080\n4880\nF480\n5080\nAA80\nA900\nENDCHAR\nSTARTCHAR U_7CFE\nENCODING 31998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n2120\n4920\nF120\n2120\n4960\nFBA0\n0520\n5020\nA820\nA820\nENDCHAR\nSTARTCHAR U_7CFF\nENCODING 31999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n4920\nF120\n2120\n4920\nF920\n0120\nAA20\nAAA0\n8440\nENDCHAR\nSTARTCHAR U_7D00\nENCODING 32000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23C0\n4040\nF040\n2040\n4BC0\nFA00\n0200\nAA20\nAA20\n81E0\nENDCHAR\nSTARTCHAR U_7D01\nENCODING 32001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n4C40\nF540\n2280\n5280\nE900\n0500\n5280\nAC40\nA820\nENDCHAR\nSTARTCHAR U_7D02\nENCODING 32002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2040\n4040\nF7E0\n2040\n5240\nE940\n0040\n5240\nA940\nA880\nENDCHAR\nSTARTCHAR U_7D03\nENCODING 32003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n22A0\n42A0\nF2A0\n22A0\n52A0\nEAA0\n02A0\n52A0\nACA0\nA820\nENDCHAR\nSTARTCHAR U_7D04\nENCODING 32004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n43E0\nF420\n2020\n5220\nE920\n0120\n5020\nA920\nA8C0\nENDCHAR\nSTARTCHAR U_7D05\nENCODING 32005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n4100\nF100\n2100\n5100\nE900\n0100\n5100\nA900\nAFE0\nENDCHAR\nSTARTCHAR U_7D06\nENCODING 32006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\n4080\nF080\n27E0\n5080\nE880\n0080\n5080\nAA80\nA900\nENDCHAR\nSTARTCHAR U_7D07\nENCODING 32007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n57E0\nF800\n27C0\n5080\nE900\n0200\n5220\nAC20\nABE0\nENDCHAR\nSTARTCHAR U_7D08\nENCODING 32008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4FC0\nF140\n2540\n5340\nE940\n02C0\n5240\nAC40\nA820\nENDCHAR\nSTARTCHAR U_7D09\nENCODING 32009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\n4120\nF120\n2320\n5520\nE920\n0120\n5120\nAAA0\nAC40\nENDCHAR\nSTARTCHAR U_7D0A\nENCODING 32010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n0E00\n3580\nC960\n3E00\n0880\n3F40\n2280\nC660\nENDCHAR\nSTARTCHAR U_7D0B\nENCODING 32011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n57E0\nF240\n2240\n5240\nEA40\n0180\n5180\nAA40\nAC20\nENDCHAR\nSTARTCHAR U_7D0C\nENCODING 32012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\n57E0\nF100\n2100\n5180\nE980\n0180\n52A0\nACA0\nA860\nENDCHAR\nSTARTCHAR U_7D0D\nENCODING 32013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n57E0\nF520\n2520\n5520\nEDA0\n0660\n5420\nAC20\nA4E0\nENDCHAR\nSTARTCHAR U_7D0E\nENCODING 32014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\n5100\nF7E0\n2100\n5100\nE900\n0100\n5280\nAC40\nA820\nENDCHAR\nSTARTCHAR U_7D0F\nENCODING 32015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2240\n5140\nF040\n2240\n5140\nE840\n00E0\n5740\nA840\nA840\nENDCHAR\nSTARTCHAR U_7D10\nENCODING 32016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2240\n5240\nF240\n2240\n57C0\nEA40\n0240\n5240\nAA40\nAFE0\nENDCHAR\nSTARTCHAR U_7D11\nENCODING 32017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2080\n5080\nF100\n2340\n5520\nE920\n0100\n5100\nA900\nA900\nENDCHAR\nSTARTCHAR U_7D12\nENCODING 32018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n5440\nF820\n2240\n5240\nEA40\n0240\n5240\nAC40\nA840\nENDCHAR\nSTARTCHAR U_7D13\nENCODING 32019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2040\n5140\nF080\n2FE0\n50A0\nE8C0\n0080\n5480\nAA80\nA900\nENDCHAR\nSTARTCHAR U_7D14\nENCODING 32020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n57E0\nF100\n2540\n5540\nEFC0\n0540\n5120\nA920\nA8E0\nENDCHAR\nSTARTCHAR U_7D15\nENCODING 32021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n5480\nF4A0\n27C0\n5480\nEC80\n0480\n55A0\nAEA0\nAC60\nENDCHAR\nSTARTCHAR U_7D16\nENCODING 32022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27A0\n20A0\n50A0\nF7A0\n2420\n57A0\nE8A0\n00A0\n50A0\nACA0\nAB20\nENDCHAR\nSTARTCHAR U_7D17\nENCODING 32023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n52C0\nF2A0\n24A0\n5080\nE8A0\n0040\n5080\nA900\nAE00\nENDCHAR\nSTARTCHAR U_7D18\nENCODING 32024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n57E0\nF100\n2140\n5240\nEA80\n0280\n5540\nAFE0\nA820\nENDCHAR\nSTARTCHAR U_7D19\nENCODING 32025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2780\n5480\nF480\n27E0\n5480\nEC80\n04A0\n55A0\nAE60\nAC20\nENDCHAR\nSTARTCHAR U_7D1A\nENCODING 32026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2240\n5240\nF280\n22E0\n5220\nEA40\n0540\n5480\nA940\nAA20\nENDCHAR\nSTARTCHAR U_7D1B\nENCODING 32027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n5240\nF420\n2820\n57C0\nEA40\n0240\n5240\nAD40\nA880\nENDCHAR\nSTARTCHAR U_7D1C\nENCODING 32028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23C0\n5000\nF000\n27E0\n5100\nE900\n0200\n5240\nAFA0\nA820\nENDCHAR\nSTARTCHAR U_7D1D\nENCODING 32029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2780\n5080\nF080\n2080\n57E0\nE880\n0080\n5080\nA880\nAFE0\nENDCHAR\nSTARTCHAR U_7D1E\nENCODING 32030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n57E0\nF520\n2520\n5180\nE980\n0180\n52A0\nACA0\nA860\nENDCHAR\nSTARTCHAR U_7D1F\nENCODING 32031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n5440\nF920\n2080\n5000\nEFE0\n0040\n5040\nA880\nA880\nENDCHAR\nSTARTCHAR U_7D20\nENCODING 32032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n3F80\n0400\nFFE0\n0900\n3F80\n0840\n7FC0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7D21\nENCODING 32033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n4FE0\nF100\n21E0\n5120\nE920\n0120\n5220\nAD20\nA8C0\nENDCHAR\nSTARTCHAR U_7D22\nENCODING 32034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\nFFE0\n9120\n3E00\n0880\n7FC0\n0440\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7D23\nENCODING 32035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n47C0\n8240\nF240\n2440\n4960\nF900\n07E0\nA900\nA900\n8100\nENDCHAR\nSTARTCHAR U_7D24\nENCODING 32036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\n2380\n4A00\nFA00\n23E0\n4A40\nFA40\n0240\nAA40\nAA40\n8440\nENDCHAR\nSTARTCHAR U_7D25\nENCODING 32037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFD00\n3120\nD4E0\n2900\n3F00\n0840\n3FC0\n0500\n54C0\n8800\nENDCHAR\nSTARTCHAR U_7D26\nENCODING 32038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n47C0\n9540\nF540\n2540\n57C0\nFC00\n0400\nAC20\nA420\n03E0\nENDCHAR\nSTARTCHAR U_7D27\nENCODING 32039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n5240\n5180\n5660\n0880\n1F00\n0880\n3F80\n1540\n2480\n4C40\nENDCHAR\nSTARTCHAR U_7D28\nENCODING 32040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\n5440\nF5E0\n2E40\n5540\nED40\n0440\n5440\nAD40\nAC80\nENDCHAR\nSTARTCHAR U_7D29\nENCODING 32041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n53E0\nF280\n2480\n57E0\nE880\n0480\n5140\nAA20\nAC20\nENDCHAR\nSTARTCHAR U_7D2A\nENCODING 32042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n4280\nAAA0\nEBA0\n4AC0\nFA80\n0A80\nABA0\nAEA0\n8860\nENDCHAR\nSTARTCHAR U_7D2B\nENCODING 32043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5140\n5D80\n5120\nFDE0\n0880\n3F00\n0880\n7FC0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7D2C\nENCODING 32044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n57E0\nF4A0\n24A0\n54A0\nEFE0\n04A0\n54A0\nAFE0\nAC20\nENDCHAR\nSTARTCHAR U_7D2D\nENCODING 32045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n4640\n9240\nF640\n4480\n9680\nFA80\n0280\nAB20\nABE0\n8420\nENDCHAR\nSTARTCHAR U_7D2E\nENCODING 32046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFD00\n3120\n6920\nA4E0\n0800\n3E00\n0880\n7FC0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7D2F\nENCODING 32047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n7FC0\n4440\n7FC0\n0900\n3E00\n1080\n7F40\n1500\nECE0\nENDCHAR\nSTARTCHAR U_7D30\nENCODING 32048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n5520\nF520\n2520\n57E0\nED20\n0520\n5520\nAFE0\nAC20\nENDCHAR\nSTARTCHAR U_7D31\nENCODING 32049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n2140\n57E0\nF100\n2100\n51C0\nEA40\n0340\n5480\nA940\nAA20\nENDCHAR\nSTARTCHAR U_7D32\nENCODING 32050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2540\n5540\nFFE0\n2540\n5540\nED40\n05C0\n5400\nAC00\nAFE0\nENDCHAR\nSTARTCHAR U_7D33\nENCODING 32051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n57E0\nF4A0\n27E0\n54A0\nEFE0\n04A0\n5080\nA880\nA880\nENDCHAR\nSTARTCHAR U_7D34\nENCODING 32052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4100\n97E0\nF520\n4540\n97C0\nF640\n0580\nAD80\nAA40\n9420\nENDCHAR\nSTARTCHAR U_7D35\nENCODING 32053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n57E0\nF420\n2000\n57E0\nE880\n0480\n5080\nAA80\nA900\nENDCHAR\nSTARTCHAR U_7D36\nENCODING 32054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n57C0\nF100\n2100\n57E0\nE900\n0100\n5240\nAFA0\nA820\nENDCHAR\nSTARTCHAR U_7D37\nENCODING 32055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2100\n4280\nF240\n2520\n5100\nFFC0\n0040\nAA80\nA900\n8100\nENDCHAR\nSTARTCHAR U_7D38\nENCODING 32056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n57E0\nF080\n2080\n5080\nEBE0\n0080\n5080\nA880\nAFE0\nENDCHAR\nSTARTCHAR U_7D39\nENCODING 32057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\n5120\nF220\n24C0\n5000\nEBE0\n0220\n5220\nABE0\nAA20\nENDCHAR\nSTARTCHAR U_7D3A\nENCODING 32058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\n57E0\nF240\n2240\n5240\nEBC0\n0240\n5240\nABC0\nAA40\nENDCHAR\nSTARTCHAR U_7D3B\nENCODING 32059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n57C0\nF540\n2540\n5FE0\nE900\n0100\n5280\nAC40\nA820\nENDCHAR\nSTARTCHAR U_7D3C\nENCODING 32060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n57E0\nF2A0\n27E0\n5A80\nEFE0\n02A0\n52E0\nAC80\nA880\nENDCHAR\nSTARTCHAR U_7D3D\nENCODING 32061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n57E0\nF420\n2200\n5240\nEA80\n0300\n5220\nAA20\nA9E0\nENDCHAR\nSTARTCHAR U_7D3E\nENCODING 32062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n5440\nF820\n2100\n5600\nE880\n0300\n5040\nA980\nAE00\nENDCHAR\nSTARTCHAR U_7D3F\nENCODING 32063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n5240\nF460\n27A0\n5000\nEBE0\n0220\n5220\nABE0\nAA20\nENDCHAR\nSTARTCHAR U_7D40\nENCODING 32064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n54A0\nF4A0\n27E0\n54A0\nE880\n04A0\n54A0\nAFE0\nAC20\nENDCHAR\nSTARTCHAR U_7D41\nENCODING 32065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n5480\nFA80\n22E0\n53A0\nEEA0\n02E0\n5280\nAA20\nA9E0\nENDCHAR\nSTARTCHAR U_7D42\nENCODING 32066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n5440\nF280\n2100\n5280\nEC60\n0100\n5080\nAB00\n80C0\nENDCHAR\nSTARTCHAR U_7D43\nENCODING 32067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n57E0\nF100\n2240\n5780\nE880\n0100\n5240\nAFA0\nA820\nENDCHAR\nSTARTCHAR U_7D44\nENCODING 32068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n5240\nF3C0\n2240\n5240\nEA40\n03C0\n5240\nAA40\nAFE0\nENDCHAR\nSTARTCHAR U_7D45\nENCODING 32069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n5820\nFBA0\n2AA0\n5AA0\nEBA0\n0AA0\n5820\nA820\nA860\nENDCHAR\nSTARTCHAR U_7D46\nENCODING 32070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2920\n5540\nF100\n27C0\n5100\nE900\n0FE0\n5100\nA900\nA900\nENDCHAR\nSTARTCHAR U_7D47\nENCODING 32071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n53E0\nF420\n2BA0\n52A0\nEAA0\n03A0\n5020\nA820\nA8C0\nENDCHAR\nSTARTCHAR U_7D48\nENCODING 32072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n4100\n8BE0\nF220\n2220\n4BE0\nFA20\n0220\nAA20\nABE0\n8220\nENDCHAR\nSTARTCHAR U_7D49\nENCODING 32073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2140\n4920\nF7E0\n2100\n4B80\nFB40\n0540\nAD20\nA920\n8100\nENDCHAR\nSTARTCHAR U_7D4A\nENCODING 32074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n5FE0\nF100\n2380\n5540\nE920\n07C0\n5100\nA900\nA900\nENDCHAR\nSTARTCHAR U_7D4B\nENCODING 32075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2080\n4FE0\nF400\n2480\n4480\nFD00\n0540\nAE60\nABA0\n8820\nENDCHAR\nSTARTCHAR U_7D4C\nENCODING 32076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n4440\nF280\n2380\n4440\nF920\n07C0\nA900\nA900\n87E0\nENDCHAR\nSTARTCHAR U_7D4D\nENCODING 32077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n2160\n43C0\nF640\n2A40\n53E0\nFA40\n0240\nAA40\nAA40\n03E0\nENDCHAR\nSTARTCHAR U_7D4E\nENCODING 32078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22E0\n2400\n5800\nF200\n25E0\n5C40\nEC40\n0440\n5440\nAC40\nA4C0\nENDCHAR\nSTARTCHAR U_7D4F\nENCODING 32079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n5520\nF7E0\n2520\n57E0\nE900\n0140\n50A0\nA960\nAE20\nENDCHAR\nSTARTCHAR U_7D50\nENCODING 32080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n57E0\nF080\n23E0\n5000\nEBE0\n0220\n5220\nABE0\nAA20\nENDCHAR\nSTARTCHAR U_7D51\nENCODING 32081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\n57C0\nF900\n2100\n5FE0\nE900\n0380\n5540\nA920\nA920\nENDCHAR\nSTARTCHAR U_7D52\nENCODING 32082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n22A0\n52A0\nF6A0\n2BE0\n52A0\nEAA0\n02A0\n52A0\nACA0\nA820\nENDCHAR\nSTARTCHAR U_7D53\nENCODING 32083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n5100\nF100\n2FE0\n5100\nE900\n07C0\n5100\nA900\nAFE0\nENDCHAR\nSTARTCHAR U_7D54\nENCODING 32084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2080\n5100\nF7E0\n2420\n5420\nEFE0\n0420\n5420\nAFE0\nAC20\nENDCHAR\nSTARTCHAR U_7D55\nENCODING 32085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2240\n5480\nFFC0\n2540\n5540\nEFC0\n0400\n5420\nAC20\nABE0\nENDCHAR\nSTARTCHAR U_7D56\nENCODING 32086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2920\n5540\nF100\n2FE0\n5280\nEA80\n0280\n52A0\nACA0\nA860\nENDCHAR\nSTARTCHAR U_7D57\nENCODING 32087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n4C20\nF5E0\n2560\n4560\nFD60\n05E0\nAC20\nAFE0\n0420\nENDCHAR\nSTARTCHAR U_7D58\nENCODING 32088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n2500\n55E0\nF220\n20A0\n5480\nEC80\n0480\n5540\nAA20\nAC20\nENDCHAR\nSTARTCHAR U_7D59\nENCODING 32089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2000\n4BC0\nF240\n1240\n23C0\n4A40\nFE40\n03C0\nA800\nAFE0\nENDCHAR\nSTARTCHAR U_7D5A\nENCODING 32090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\n4A00\nF3C0\n1240\n23C0\n4A40\nFD40\n0080\nA880\nAFE0\nENDCHAR\nSTARTCHAR U_7D5B\nENCODING 32091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n5640\n5180\nDE60\n5100\n5780\n5240\n5FA0\n4940\n7320\nENDCHAR\nSTARTCHAR U_7D5C\nENCODING 32092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n10A0\n7CA0\n1120\nFEC0\n0A00\n1480\n7F40\n1500\n2480\nDC60\nENDCHAR\nSTARTCHAR U_7D5D\nENCODING 32093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n4A80\nF440\n1BA0\n2000\n4FE0\nFA00\n03C0\nA840\nA8C0\nENDCHAR\nSTARTCHAR U_7D5E\nENCODING 32094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n5FE0\nF240\n2420\n5240\nEA40\n0240\n5180\nAA40\nAC20\nENDCHAR\nSTARTCHAR U_7D5F\nENCODING 32095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n5440\nF820\n27C0\n5100\nE900\n07C0\n5100\nA900\nAFE0\nENDCHAR\nSTARTCHAR U_7D60\nENCODING 32096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4FE0\nF200\n17C0\n2A40\n4BC0\nFA40\n03C0\nAA40\nAAC0\nENDCHAR\nSTARTCHAR U_7D61\nENCODING 32097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n5680\nF900\n2280\n5440\nEFE0\n0440\n5440\nAFC0\nAC40\nENDCHAR\nSTARTCHAR U_7D62\nENCODING 32098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n5420\nFFA0\n24A0\n57A0\nECA0\n07A0\n5020\nA820\nA8C0\nENDCHAR\nSTARTCHAR U_7D63\nENCODING 32099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n57E0\nF280\n2280\n5FE0\nEA80\n0280\n5280\nAC80\nA880\nENDCHAR\nSTARTCHAR U_7D64\nENCODING 32100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n4280\nFFE0\n2AA0\n2AA0\n4AE0\nFC20\n0820\nAFE0\nA820\nENDCHAR\nSTARTCHAR U_7D65\nENCODING 32101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n2540\n4920\nFFE0\n2900\n2900\n4900\nFA80\n0A80\nAA40\nAC20\nENDCHAR\nSTARTCHAR U_7D66\nENCODING 32102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n5440\nF820\n27C0\n5000\nF7C0\n0440\n5440\nAFC0\n8440\nENDCHAR\nSTARTCHAR U_7D67\nENCODING 32103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n4820\nFBA0\n2820\n4BA0\nFAA0\n0BA0\n5AA0\nA820\nA8E0\nENDCHAR\nSTARTCHAR U_7D68\nENCODING 32104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\n57E0\nF280\n22A0\n57A0\nEAC0\n0280\n52A0\nAD60\nAA20\nENDCHAR\nSTARTCHAR U_7D69\nENCODING 32105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2AA0\n56A0\nF2C0\n2280\n56C0\nEAA0\n0280\n52A0\nACA0\nA860\nENDCHAR\nSTARTCHAR U_7D6A\nENCODING 32106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\n5520\nF7E0\n2520\n5520\nEDA0\n0660\n5420\nAFE0\nAC20\nENDCHAR\nSTARTCHAR U_7D6B\nENCODING 32107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1100\n3F80\n5140\nFBE0\n0900\n3E00\n0880\n7FC0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7D6C\nENCODING 32108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\n4900\nF7E0\n1100\n27C0\n4440\nFC40\n0440\nAFC0\nA440\nENDCHAR\nSTARTCHAR U_7D6D\nENCODING 32109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n7FC0\n1000\nFFE0\n2880\n5E40\n8920\n3F80\n0400\n3580\nCC60\nENDCHAR\nSTARTCHAR U_7D6E\nENCODING 32110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nFDE0\n2920\n69E0\n1520\n6900\n3E00\n0840\n7FA0\n1280\nEE60\nENDCHAR\nSTARTCHAR U_7D6F\nENCODING 32111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5100\nF240\n2780\n5120\nEA40\n0480\n5140\nAA20\nAC20\nENDCHAR\nSTARTCHAR U_7D70\nENCODING 32112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\n5100\nF240\n27A0\n50A0\nE880\n03E0\n5080\nA880\nAFE0\nENDCHAR\nSTARTCHAR U_7D71\nENCODING 32113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n57E0\nF100\n2240\n57A0\nE800\n0280\n52A0\nACA0\nA860\nENDCHAR\nSTARTCHAR U_7D72\nENCODING 32114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n5240\nF780\n2140\n57E0\nE880\n02C0\n54A0\nA8A0\nA980\nENDCHAR\nSTARTCHAR U_7D73\nENCODING 32115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n5240\nF580\n2260\n5080\nEFE0\n0480\n57E0\nA880\nA880\nENDCHAR\nSTARTCHAR U_7D74\nENCODING 32116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n4FE0\nF100\n17C0\n2100\n4900\nFFE0\n0100\nA900\nA900\nENDCHAR\nSTARTCHAR U_7D75\nENCODING 32117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4A80\nFC60\n1380\n2000\n4FE0\nF100\n0240\nAFE0\nA820\nENDCHAR\nSTARTCHAR U_7D76\nENCODING 32118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\n4A40\nF7E0\n1AA0\n22A0\n4BE0\nFA00\n0220\nAA20\nA9E0\nENDCHAR\nSTARTCHAR U_7D77\nENCODING 32119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n2140\nF3C0\n2160\n6A20\n3F00\n0480\n7FE0\n1280\nE660\nENDCHAR\nSTARTCHAR U_7D78\nENCODING 32120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n4FC0\nF440\n17C0\n2440\n4FC0\nFA80\n02A0\nACA0\nA8E0\nENDCHAR\nSTARTCHAR U_7D79\nENCODING 32121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\n53E0\nF000\n23E0\n5220\nEBE0\n0220\n53E0\nAA20\nAA60\nENDCHAR\nSTARTCHAR U_7D7A\nENCODING 32122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2660\n2180\n5240\nF520\n27E0\n5280\nEFE0\n02A0\n52A0\nAAE0\nA880\nENDCHAR\nSTARTCHAR U_7D7B\nENCODING 32123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n5480\nFFE0\n2520\n5520\nEFE0\n0180\n5280\nACA0\nA8E0\nENDCHAR\nSTARTCHAR U_7D7C\nENCODING 32124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2740\n5220\nF2C0\n2140\n56A0\nE960\n06A0\n5120\nAEA0\nA840\nENDCHAR\nSTARTCHAR U_7D7D\nENCODING 32125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n5440\nF7C0\n2000\n5000\nEFE0\n0420\n5420\nAFE0\n8420\nENDCHAR\nSTARTCHAR U_7D7E\nENCODING 32126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\n4FE0\nF500\n1740\n2540\n4540\nFF40\n05A0\nAD60\nAA20\nENDCHAR\nSTARTCHAR U_7D7F\nENCODING 32127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\n57E0\nF480\n22A0\n52A0\nE9C0\n02A0\n54A0\nAAA0\nA900\nENDCHAR\nSTARTCHAR U_7D80\nENCODING 32128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5100\nFFE0\n2920\n5FE0\nE920\n0380\n5540\nA920\nA920\nENDCHAR\nSTARTCHAR U_7D81\nENCODING 32129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22E0\n22A0\n5FA0\nF2A0\n22C0\n57A0\nEAA0\n07A0\n52E0\nAC80\nA880\nENDCHAR\nSTARTCHAR U_7D82\nENCODING 32130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n4FE0\nF000\n17C0\n2440\n4FC0\nFA80\n02A0\nAAA0\nACE0\nENDCHAR\nSTARTCHAR U_7D83\nENCODING 32131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24A0\n22C0\n5080\nF7E0\n2420\n57E0\nEC20\n07E0\n5420\nAC20\nACE0\nENDCHAR\nSTARTCHAR U_7D84\nENCODING 32132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n57E0\nF420\n23C0\n5000\nEFE0\n0280\n52A0\nACA0\nA860\nENDCHAR\nSTARTCHAR U_7D85\nENCODING 32133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\n57C0\nF040\n27C0\n5000\nEFE0\n0AA0\n5100\nAA80\nAC60\nENDCHAR\nSTARTCHAR U_7D86\nENCODING 32134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\n57E0\nF4A0\n27E0\n54A0\nEFE0\n0280\n5100\nAA80\nAC60\nENDCHAR\nSTARTCHAR U_7D87\nENCODING 32135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n4280\nFFE0\n2AA0\n2CE0\n4820\nFFE0\n0820\nAFE0\nA820\nENDCHAR\nSTARTCHAR U_7D88\nENCODING 32136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n57E0\nF120\n27E0\n5500\nEFE0\n0120\n53E0\nAD40\nA900\nENDCHAR\nSTARTCHAR U_7D89\nENCODING 32137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2700\n4100\nFFE0\n1540\n2920\n47C0\nFA40\n02E0\nAA20\nACC0\nENDCHAR\nSTARTCHAR U_7D8A\nENCODING 32138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4FE0\nF100\n1540\n2BA0\n4100\nF900\n0280\nAA40\nAC60\nENDCHAR\nSTARTCHAR U_7D8B\nENCODING 32139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n47E0\nF520\n1100\n27E0\n4900\nFA80\n0280\nAD20\nABE0\nENDCHAR\nSTARTCHAR U_7D8C\nENCODING 32140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2440\n5920\nF280\n2440\n5820\nEBC0\n0240\n5240\nABC0\nAA40\nENDCHAR\nSTARTCHAR U_7D8D\nENCODING 32141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n5100\nFFE0\n2820\n57C0\nE880\n07E0\n5100\nA900\nAB00\nENDCHAR\nSTARTCHAR U_7D8E\nENCODING 32142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E20\n22C0\n5240\nF440\n26E0\n5240\nEA40\n06E0\n5200\nAD00\nA8E0\nENDCHAR\nSTARTCHAR U_7D8F\nENCODING 32143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n27A0\n5940\nF480\n2100\n5FE0\nEA40\n0480\n5380\nA940\nAE20\nENDCHAR\nSTARTCHAR U_7D90\nENCODING 32144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n4FC0\nF440\n1440\n27C0\n4A80\nFA80\n02A0\nAAA0\nACE0\nENDCHAR\nSTARTCHAR U_7D91\nENCODING 32145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\n5520\nF7E0\n2520\n55A0\nEF60\n0520\n5520\nAFE0\nAC20\nENDCHAR\nSTARTCHAR U_7D92\nENCODING 32146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n27A0\n5540\nF280\n27E0\n5080\nE900\n07E0\n5100\nAD00\nAB00\nENDCHAR\nSTARTCHAR U_7D93\nENCODING 32147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\n5540\nFA80\n2540\n5540\nE800\n07C0\n5100\nA900\nAFE0\nENDCHAR\nSTARTCHAR U_7D94\nENCODING 32148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFB80\n5100\n8BC0\n7520\n03E0\nF880\n21C0\n7AA0\n0CA0\n7180\nENDCHAR\nSTARTCHAR U_7D95\nENCODING 32149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4FE0\nF100\n1100\n27C0\n4800\nFAA0\n06A0\nAA40\nA9C0\nENDCHAR\nSTARTCHAR U_7D96\nENCODING 32150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n2FC0\n5240\nF440\n2760\n5340\nEB40\n05E0\n5400\nAA00\nA9E0\nENDCHAR\nSTARTCHAR U_7D97\nENCODING 32151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n4AA0\nFC60\n2820\n2BA0\n4AA0\nFAA0\n0BA0\nA820\nA860\nENDCHAR\nSTARTCHAR U_7D98\nENCODING 32152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n4640\nFD80\n1240\n27E0\n4900\nFFE0\n0100\nAFE0\nA900\nENDCHAR\nSTARTCHAR U_7D99\nENCODING 32153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2900\n4D40\nFB80\n1900\n2FC0\n4900\nFB80\n0D40\nA900\nAFC0\nENDCHAR\nSTARTCHAR U_7D9A\nENCODING 32154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4100\nF7C0\n1000\n2FE0\n4820\nFA80\n0280\nAAA0\nACE0\nENDCHAR\nSTARTCHAR U_7D9B\nENCODING 32155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\n4D20\nF520\n1260\n2420\n4900\nFAA0\n06A0\nAA40\nA9C0\nENDCHAR\nSTARTCHAR U_7D9C\nENCODING 32156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n5420\nF3C0\n2000\n57E0\nE880\n02C0\n54A0\nAAA0\nA900\nENDCHAR\nSTARTCHAR U_7D9D\nENCODING 32157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2440\n5FE0\nF440\n26C0\n5560\nED60\n0540\n5440\nAC40\nA440\nENDCHAR\nSTARTCHAR U_7D9E\nENCODING 32158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\n5100\nFFE0\n2540\n5540\nEFE0\n0540\n5FE0\nA900\nA7C0\nENDCHAR\nSTARTCHAR U_7D9F\nENCODING 32159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n5420\nF7E0\n24C0\n54A0\nEFE0\n0480\n5540\nAA20\nAC20\nENDCHAR\nSTARTCHAR U_7DA0\nENCODING 32160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n5780\nF080\n2FE0\n5120\nED40\n0380\n5540\nA920\nAF20\nENDCHAR\nSTARTCHAR U_7DA1\nENCODING 32161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n5000\nF3E0\n2220\n53E0\nE880\n02C0\n54A0\nAAA0\nA900\nENDCHAR\nSTARTCHAR U_7DA2\nENCODING 32162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\n4BA0\nF920\n2FE0\n5820\nFBA0\n0AA0\n5BA0\nA820\nA8E0\nENDCHAR\nSTARTCHAR U_7DA3\nENCODING 32163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\n5FE0\nF200\n2FE0\n5240\nEFA0\n0280\n53A0\nAA20\nA9E0\nENDCHAR\nSTARTCHAR U_7DA4\nENCODING 32164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n1540\n2580\nFD40\n2540\n3D00\n0600\n1880\n77C0\n2480\n4C40\nENDCHAR\nSTARTCHAR U_7DA5\nENCODING 32165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n47C0\nF540\n17C0\n2000\n4FE0\nFA80\n0280\nAA80\nAC80\nENDCHAR\nSTARTCHAR U_7DA6\nENCODING 32166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n7FE0\n1080\n1F80\n1080\nFFE0\n4A40\n94A0\n7F40\n2500\nCCE0\nENDCHAR\nSTARTCHAR U_7DA7\nENCODING 32167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n5240\nF3C0\n2000\n57E0\nE880\n0100\n57E0\nA900\nAB00\nENDCHAR\nSTARTCHAR U_7DA8\nENCODING 32168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n47E0\nF280\n1380\n2280\n4B80\nFA80\n07E0\nAA80\nAC60\nENDCHAR\nSTARTCHAR U_7DA9\nENCODING 32169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5820\nF400\n27E0\n54A0\nEDA0\n02E0\n5280\nACA0\nA860\nENDCHAR\nSTARTCHAR U_7DAA\nENCODING 32170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5100\nF7C0\n2100\n5FE0\nEC40\n07C0\n5440\nAFC0\nACC0\nENDCHAR\nSTARTCHAR U_7DAB\nENCODING 32171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2240\n4FE0\nF280\n1120\n26E0\n4240\nFFE0\n0240\nA9A0\nAE60\nENDCHAR\nSTARTCHAR U_7DAC\nENCODING 32172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n27A0\n5540\nF280\n27E0\n5420\nEBC0\n0240\n5180\nAA40\nAC20\nENDCHAR\nSTARTCHAR U_7DAD\nENCODING 32173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2480\n57E0\nFC80\n27E0\n5480\nEC80\n07E0\n5480\nAFE0\nAC00\nENDCHAR\nSTARTCHAR U_7DAE\nENCODING 32174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7BE0\n4A40\n7D80\n4640\n4520\n9F00\n0880\n3F40\n1500\nECE0\nENDCHAR\nSTARTCHAR U_7DAF\nENCODING 32175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2FE0\n4420\nF7A0\n2A20\n5FA0\nF220\n0AA0\n5FA0\nA820\nA8C0\nENDCHAR\nSTARTCHAR U_7DB0\nENCODING 32176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n5420\nF3C0\n2240\n53C0\nEA00\n03E0\n5220\nABE0\nAA20\nENDCHAR\nSTARTCHAR U_7DB1\nENCODING 32177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n5560\nF4A0\n27E0\n54A0\nEEA0\n06A0\n57E0\nAC20\nA460\nENDCHAR\nSTARTCHAR U_7DB2\nENCODING 32178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n5560\nF4A0\n27E0\n54A0\nEFE0\n0520\n55E0\nAC20\nAC60\nENDCHAR\nSTARTCHAR U_7DB3\nENCODING 32179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n4AA0\nFEE0\n2AA0\n2EE0\n4AA0\nFAA0\n0AA0\nAB60\nB620\nENDCHAR\nSTARTCHAR U_7DB4\nENCODING 32180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2120\n56C0\nF240\n25A0\n57E0\nE920\n06C0\n5240\nADA0\nA920\nENDCHAR\nSTARTCHAR U_7DB5\nENCODING 32181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n27A0\n5520\nF2C0\n2100\n57E0\nE900\n0380\n5540\nA920\nA920\nENDCHAR\nSTARTCHAR U_7DB6\nENCODING 32182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n4FC0\nF540\n17C0\n2100\n4FE0\nF900\n0380\nAD40\nA920\nENDCHAR\nSTARTCHAR U_7DB7\nENCODING 32183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n5240\nF240\n25A0\n5420\nE880\n07E0\n5080\nA880\nA880\nENDCHAR\nSTARTCHAR U_7DB8\nENCODING 32184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n2440\n4BA0\nF000\n2FE0\n5AA0\nFAA0\n0FE0\n5AA0\nAAA0\nA860\nENDCHAR\nSTARTCHAR U_7DB9\nENCODING 32185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2740\n5560\nFD40\n2240\n55E0\nE800\n03E0\n5220\nABE0\nAA20\nENDCHAR\nSTARTCHAR U_7DBA\nENCODING 32186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n5280\nF440\n2FE0\n5040\nEF40\n0540\n5740\nA840\nA8C0\nENDCHAR\nSTARTCHAR U_7DBB\nENCODING 32187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n5420\nF000\n27E0\n5080\nEA80\n02E0\n5280\nAD80\nA8E0\nENDCHAR\nSTARTCHAR U_7DBC\nENCODING 32188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n5520\nF7E0\n2520\n57E0\nEA80\n07E0\n5080\nA880\nA880\nENDCHAR\nSTARTCHAR U_7DBD\nENCODING 32189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2100\n57C0\nF440\n27C0\n5440\nEFC0\n0100\n5FE0\nA900\nA900\nENDCHAR\nSTARTCHAR U_7DBE\nENCODING 32190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n5100\nFFE0\n2440\n5A20\nEBC0\n0680\n5900\nAA80\nAC60\nENDCHAR\nSTARTCHAR U_7DBF\nENCODING 32191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\n5240\nF3C0\n2240\n53C0\nE900\n07E0\n5520\nAD60\nA900\nENDCHAR\nSTARTCHAR U_7DC0\nENCODING 32192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5140\nF7E0\n2140\n57C0\nE900\n07E0\n5240\nA980\nAE60\nENDCHAR\nSTARTCHAR U_7DC1\nENCODING 32193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n57C0\nF140\n2FE0\n5140\nEFC0\n0500\n55E0\nAB00\nA9E0\nENDCHAR\nSTARTCHAR U_7DC2\nENCODING 32194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n22C0\n5480\nF140\n22A0\n5080\nEAA0\n04C0\n5080\nA940\nAE20\nENDCHAR\nSTARTCHAR U_7DC3\nENCODING 32195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n5680\nE940\n2A20\n5500\nF5C0\n0500\nA500\nA700\n98E0\nENDCHAR\nSTARTCHAR U_7DC4\nENCODING 32196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n57C0\nF440\n27C0\n5480\nECA0\n07C0\n5480\nADA0\nAE60\nENDCHAR\nSTARTCHAR U_7DC5\nENCODING 32197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F00\n4A00\n9FE0\nEAA0\n2AA0\n5EA0\nFAA0\n0B40\n5EA0\nAAA0\nAAA0\nENDCHAR\nSTARTCHAR U_7DC6\nENCODING 32198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n57C0\nF440\n27C0\n5200\nEFE0\n02A0\n5520\nAA20\nACC0\nENDCHAR\nSTARTCHAR U_7DC7\nENCODING 32199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2540\n5A80\nF540\n2540\n57E0\nED20\n07E0\n5520\nAFE0\nAC20\nENDCHAR\nSTARTCHAR U_7DC8\nENCODING 32200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n4100\nEFE0\n2280\n47C0\nF100\n0FE0\nA100\nA900\n8100\nENDCHAR\nSTARTCHAR U_7DC9\nENCODING 32201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n4100\nFFE0\n2920\n5DA0\nFB60\n0DA0\n5920\nA920\nA860\nENDCHAR\nSTARTCHAR U_7DCA\nENCODING 32202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5140\n7C80\n5140\n7E20\n0880\n1F00\n0840\n3FC0\n1280\n6E60\nENDCHAR\nSTARTCHAR U_7DCB\nENCODING 32203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n5EE0\nF280\n2EE0\n5280\nEA80\n0EE0\n5280\nAA80\nAA80\nENDCHAR\nSTARTCHAR U_7DCC\nENCODING 32204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\n5900\nFFE0\n2540\n5920\nEFE0\n0240\n5680\nA980\nAE60\nENDCHAR\nSTARTCHAR U_7DCD\nENCODING 32205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2600\n5480\nF7E0\n2480\n5460\nF7C0\n0440\n57C0\nAC40\nAFC0\nENDCHAR\nSTARTCHAR U_7DCE\nENCODING 32206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\n4FE0\nF080\n2E80\n5AA0\nFEA0\n00C0\n56A0\nA960\nAA20\nENDCHAR\nSTARTCHAR U_7DCF\nENCODING 32207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2480\n4440\n5520\nEA40\n27C0\n4000\nF440\n0AA0\nAA60\nA3C0\nENDCHAR\nSTARTCHAR U_7DD0\nENCODING 32208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n7B80\n8100\n7FC0\n5480\nFFE0\n4480\n55C0\n7EA0\n04A0\n1900\nENDCHAR\nSTARTCHAR U_7DD1\nENCODING 32209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n4040\n97C0\nE040\n2FE0\n4920\nE540\n0380\nA540\nA920\n8300\nENDCHAR\nSTARTCHAR U_7DD2\nENCODING 32210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n27A0\n5140\nFFE0\n2100\n53E0\nEE20\n03E0\n5220\nABE0\nAA20\nENDCHAR\nSTARTCHAR U_7DD3\nENCODING 32211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n5280\nD100\n67C0\n5540\nF540\n0FE0\n0100\nA280\nAC60\nENDCHAR\nSTARTCHAR U_7DD4\nENCODING 32212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2520\n4540\n4100\nEFE0\n4820\nEBA0\n0AA0\n4AA0\n4BA0\n8860\nENDCHAR\nSTARTCHAR U_7DD5\nENCODING 32213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n4280\nF100\n2EE0\n4440\nF7C0\n0440\nA7C0\n8440\n0840\nENDCHAR\nSTARTCHAR U_7DD6\nENCODING 32214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2240\n57C0\nF280\n2FE0\nF240\n07E0\nAC40\nB7C0\n8440\n07C0\nENDCHAR\nSTARTCHAR U_7DD7\nENCODING 32215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n25E0\n5F20\nF520\n25E0\n5720\nEDE0\n0520\n5520\nADE0\nAD20\nENDCHAR\nSTARTCHAR U_7DD8\nENCODING 32216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\n57E0\nF480\n2780\n54A0\nEFA0\n0540\n57A0\nA960\nAA20\nENDCHAR\nSTARTCHAR U_7DD9\nENCODING 32217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n5280\nF380\n2100\n57C0\nED40\n07C0\n5900\nAFE0\n0100\nENDCHAR\nSTARTCHAR U_7DDA\nENCODING 32218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n5440\nF7C0\n2440\n57C0\nE920\n0740\n5380\nAD40\nAB20\nENDCHAR\nSTARTCHAR U_7DDB\nENCODING 32219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n4FE0\nFAA0\n2AA0\n5AE0\nF100\n0FE0\n5100\nAA80\nAC60\nENDCHAR\nSTARTCHAR U_7DDC\nENCODING 32220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\nFF00\n8900\nFBC0\n8900\nFA40\n27E0\nF880\nAAC0\nB4A0\n2100\nENDCHAR\nSTARTCHAR U_7DDD\nENCODING 32221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n53C0\nF000\n27E0\n5240\nEBC0\n0240\n53C0\nAA40\nAFE0\nENDCHAR\nSTARTCHAR U_7DDE\nENCODING 32222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n26E0\n24A0\n54A0\nF700\n24E0\n57A0\nECA0\n07A0\n5440\nACA0\nAD20\nENDCHAR\nSTARTCHAR U_7DDF\nENCODING 32223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\n5FE0\nF540\n27C0\n5540\nEFC0\n0100\n57C0\nA900\nAFE0\nENDCHAR\nSTARTCHAR U_7DE0\nENCODING 32224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5280\nFFE0\n2920\n57C0\nED40\n0540\n5540\nADC0\nA900\nENDCHAR\nSTARTCHAR U_7DE1\nENCODING 32225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n57C0\nF480\n27E0\n5440\nEFE0\n0240\n53C0\nAA40\nABC0\nENDCHAR\nSTARTCHAR U_7DE2\nENCODING 32226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\n5FE0\nF240\n27E0\n54A0\nF4A0\n07E0\n54A0\nAFE0\n0420\nENDCHAR\nSTARTCHAR U_7DE3\nENCODING 32227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n5780\nF080\n2FE0\n5520\nEAC0\n0580\n52C0\nACA0\n0300\nENDCHAR\nSTARTCHAR U_7DE4\nENCODING 32228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\n4540\nF5C0\n2400\n57E0\nF100\n0FE0\n5380\nB540\n0920\nENDCHAR\nSTARTCHAR U_7DE5\nENCODING 32229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27C0\n4A40\n5BC0\nE900\n2FE0\n5900\nFB80\n0D40\n5920\nA900\nENDCHAR\nSTARTCHAR U_7DE6\nENCODING 32230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\n5520\nF7E0\n2520\n57E0\nE900\n02C0\n5620\nAA60\nA9C0\nENDCHAR\nSTARTCHAR U_7DE7\nENCODING 32231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n5FE0\nE280\n2FE0\n5AA0\nFCE0\n0820\n5FE0\nA820\nAFE0\nENDCHAR\nSTARTCHAR U_7DE8\nENCODING 32232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5820\nFFE0\n2800\n5FE0\nEAA0\n0FE0\n5AA0\nAAA0\nAA60\nENDCHAR\nSTARTCHAR U_7DE9\nENCODING 32233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\n5280\nF7E0\n2100\n5FE0\nEA00\n03E0\n5540\nA880\nAB60\nENDCHAR\nSTARTCHAR U_7DEA\nENCODING 32234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2480\n5480\nEEE0\n2520\n55A0\nF560\n06A0\n5440\nAC40\n07E0\nENDCHAR\nSTARTCHAR U_7DEB\nENCODING 32235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\n5AA0\nE6A0\n2D20\n52E0\nF000\n0A40\n5520\nAC40\n13C0\nENDCHAR\nSTARTCHAR U_7DEC\nENCODING 32236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2200\n5FE0\nEAA0\n2AA0\n5BA0\nFAA0\n0BA0\n5AA0\nAFE0\nA820\nENDCHAR\nSTARTCHAR U_7DED\nENCODING 32237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\n57E0\nF520\n27E0\n5240\nFBC0\n0240\n53C0\nAA40\n02C0\nENDCHAR\nSTARTCHAR U_7DEE\nENCODING 32238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n5400\nFBC0\n2240\n53C0\nEA40\n07C0\n5A40\nA980\n0660\nENDCHAR\nSTARTCHAR U_7DEF\nENCODING 32239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n5240\nFFE0\n2440\n57C0\nE880\n07E0\n5480\nAFE0\nA880\nENDCHAR\nSTARTCHAR U_7DF0\nENCODING 32240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n2440\n4BA0\nF000\n2EA0\n5AA0\nFEA0\n0AA0\n5EA0\nAA20\nAA60\nENDCHAR\nSTARTCHAR U_7DF1\nENCODING 32241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25C0\n2440\n57E0\nED00\n25E0\n5680\nFC80\n07E0\n5480\nAD40\nA620\nENDCHAR\nSTARTCHAR U_7DF2\nENCODING 32242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n4A80\n5EC0\nEAA0\n2B80\n5EA0\nEAA0\n0A40\n5E80\nA900\nAA00\nENDCHAR\nSTARTCHAR U_7DF3\nENCODING 32243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n5000\n7DE0\n50A0\n7D60\n5500\n4A80\n7FC0\n8A80\nB660\nENDCHAR\nSTARTCHAR U_7DF4\nENCODING 32244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5100\nF7E0\n26A0\n5520\nEFE0\n0180\n5340\nAD20\nA920\nENDCHAR\nSTARTCHAR U_7DF5\nENCODING 32245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2AA0\n4920\n5AA0\nEFE0\n2440\n5A20\nF3C0\n0640\n5180\nAE60\nENDCHAR\nSTARTCHAR U_7DF6\nENCODING 32246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n4880\n9BE0\nEAA0\n2BE0\n4AA0\nFBE0\n0A80\n5900\nAA80\nAC60\nENDCHAR\nSTARTCHAR U_7DF7\nENCODING 32247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\n5FE0\nE540\n27C0\n5540\nEFC0\n0100\n5FE0\nA900\nA900\nENDCHAR\nSTARTCHAR U_7DF8\nENCODING 32248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n4280\n5FE0\nEAA0\n2FE0\n5100\nF7C0\n0100\n5100\nAFE0\nENDCHAR\nSTARTCHAR U_7DF9\nENCODING 32249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n57C0\nF440\n27C0\n5000\nEFE0\n0480\n54E0\nAA80\nA9E0\nENDCHAR\nSTARTCHAR U_7DFA\nENCODING 32250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n5740\nE540\n2FE0\n5820\nFBA0\n0AA0\n5BA0\nA820\nA860\nENDCHAR\nSTARTCHAR U_7DFB\nENCODING 32251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F80\n4480\n9AE0\nEFA0\n44A0\n94A0\nFEA0\n04A0\n5440\nAEA0\nA920\nENDCHAR\nSTARTCHAR U_7DFC\nENCODING 32252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n57C0\nE440\n27C0\n5000\nFFE0\n0AA0\nAAA0\nAAA0\n1FE0\nENDCHAR\nSTARTCHAR U_7DFD\nENCODING 32253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2100\n47E0\nF420\n27E0\n5420\nF7E0\n0420\n57E0\n5240\n8420\nENDCHAR\nSTARTCHAR U_7DFE\nENCODING 32254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\n5BE0\nEAA0\n2BE0\n5AA0\nFBE0\n0880\nABE0\nA880\n13E0\nENDCHAR\nSTARTCHAR U_7DFF\nENCODING 32255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2240\n57C0\nF000\n27C0\n5440\nF7C0\n0200\n5560\n9440\n03C0\nENDCHAR\nSTARTCHAR U_7E00\nENCODING 32256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2760\n2520\n4520\n5760\nE400\n27E0\n54A0\nFEA0\n0440\n54A0\nAD20\nENDCHAR\nSTARTCHAR U_7E01\nENCODING 32257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\n57C0\nE040\n2FE0\n5300\nFDA0\n02C0\nADC0\nD2A0\n0D80\nENDCHAR\nSTARTCHAR U_7E02\nENCODING 32258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n47C0\n5440\nE440\n27C0\n5200\nF540\n0C20\n5440\nABC0\nENDCHAR\nSTARTCHAR U_7E03\nENCODING 32259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2920\n55C0\nF700\n29E0\n5240\nFBC0\n0240\nABC0\nAA40\n02C0\nENDCHAR\nSTARTCHAR U_7E04\nENCODING 32260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\n47E0\n5520\nE7E0\n2520\n57E0\nFD20\n07E0\n5100\nA8E0\nENDCHAR\nSTARTCHAR U_7E05\nENCODING 32261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20A0\n2FE0\n4880\n5FA0\nEAA0\n2FA0\n4AA0\nFD40\n0A40\nADA0\n5120\nENDCHAR\nSTARTCHAR U_7E06\nENCODING 32262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n2FE0\n4800\nFBC0\n2E40\n4BC0\nFA40\n0BC0\nA800\nAFE0\n0800\nENDCHAR\nSTARTCHAR U_7E07\nENCODING 32263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n4100\n4FE0\nA820\nE7C0\n4000\n97C0\nFC40\n07C0\n5440\nAFE0\nENDCHAR\nSTARTCHAR U_7E08\nENCODING 32264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n5AE0\n9480\n2940\nFFE0\n8520\n3E00\n1080\n7F40\n1500\nECE0\nENDCHAR\nSTARTCHAR U_7E09\nENCODING 32265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n5AA0\nF6C0\n2FE0\n5000\nEFC0\n0440\n57C0\nAC40\nAFC0\nENDCHAR\nSTARTCHAR U_7E0A\nENCODING 32266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n57E0\nF280\n2440\n5820\nEFC0\n0540\n5540\nAD40\nAFE0\nENDCHAR\nSTARTCHAR U_7E0B\nENCODING 32267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n25E0\n5520\nF1E0\n2500\n55E0\nED20\n0520\n55E0\nAA00\nA9E0\nENDCHAR\nSTARTCHAR U_7E0C\nENCODING 32268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5220\n4940\n8BE0\nE080\n3AA0\n4AA0\nEBE0\n0880\n5880\nA500\nABE0\nENDCHAR\nSTARTCHAR U_7E0D\nENCODING 32269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n8240\nFFE0\n2920\n5FE0\nF200\n03C0\n5240\nAC40\nA980\nENDCHAR\nSTARTCHAR U_7E0E\nENCODING 32270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n5740\nF540\n2FE0\n5440\nEFC0\n0440\n57C0\nAC40\nACC0\nENDCHAR\nSTARTCHAR U_7E0F\nENCODING 32271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA60\nAFC0\nFA40\nA980\nAA60\n3F00\n1480\n7F40\n2500\nCCE0\nENDCHAR\nSTARTCHAR U_7E10\nENCODING 32272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n56A0\nF3E0\n22A0\n53C0\nED20\n0560\n57E0\nA920\nAE40\nENDCHAR\nSTARTCHAR U_7E11\nENCODING 32273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n5FE0\n9500\nEFC0\n2540\n5FE0\nF540\n0FC0\n5580\nAD40\nB520\nENDCHAR\nSTARTCHAR U_7E12\nENCODING 32274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n5FE0\nF100\n27C0\n5100\nEFE0\n0200\n57C0\nA900\nAFE0\nENDCHAR\nSTARTCHAR U_7E13\nENCODING 32275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2880\n4BE0\nFA20\n2BE0\n5A20\nFBE0\n0880\n59C0\nAAA0\nADA0\nENDCHAR\nSTARTCHAR U_7E14\nENCODING 32276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2240\n5180\nFEE0\n2AA0\n5440\nEAA0\n0FE0\n5100\nAD40\nA920\nENDCHAR\nSTARTCHAR U_7E15\nENCODING 32277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n5540\nF6C0\n27C0\n5000\nFFE0\n0AA0\n5AA0\nAAA0\nAFE0\nENDCHAR\nSTARTCHAR U_7E16\nENCODING 32278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4920\nFFE0\n2100\n57C0\nF100\n0FE0\n5440\nAC40\nA7C0\nENDCHAR\nSTARTCHAR U_7E17\nENCODING 32279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n5000\nF3C0\n2240\n57E0\nEA40\n03C0\n56A0\nAB40\nAA20\nENDCHAR\nSTARTCHAR U_7E18\nENCODING 32280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2E40\n4A80\n5500\nEFC0\n4400\nEFC0\n0200\nBFE0\n8480\n1860\nENDCHAR\nSTARTCHAR U_7E19\nENCODING 32281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n4280\n4FE0\nF440\n27C0\n5440\nF7C0\n0440\nAFE0\nA040\nENDCHAR\nSTARTCHAR U_7E1A\nENCODING 32282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2720\n5520\nF2C0\n2200\n54E0\nEC20\n0760\n5420\nAC20\nAFE0\nENDCHAR\nSTARTCHAR U_7E1B\nENCODING 32283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n4FE0\n5520\nE7E0\n2520\n57E0\nF520\n0040\n5FE0\nAA40\nA9C0\nENDCHAR\nSTARTCHAR U_7E1C\nENCODING 32284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n4FE0\nF420\n27E0\n5420\nFFE0\n0420\n57E0\nA940\nAE20\nENDCHAR\nSTARTCHAR U_7E1D\nENCODING 32285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5440\nF7C0\n2440\n5740\nEDC0\n0440\n57E0\nAA80\nAC60\nENDCHAR\nSTARTCHAR U_7E1E\nENCODING 32286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n5240\nF3C0\n2000\n5FE0\nE820\n0BA0\n5AA0\nABA0\nA860\nENDCHAR\nSTARTCHAR U_7E1F\nENCODING 32287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\n4BC0\nF800\n2FE0\n5AA0\nFB40\n2840\n57E0\nAA40\nA9C0\nENDCHAR\nSTARTCHAR U_7E20\nENCODING 32288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\n7D40\n1140\nFE60\nAA00\n73E0\n1540\n7F40\n1080\n5540\n9220\nENDCHAR\nSTARTCHAR U_7E21\nENCODING 32289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4920\nFFE0\n2440\n5280\nFFE0\n0100\n57C0\nA900\nA900\nENDCHAR\nSTARTCHAR U_7E22\nENCODING 32290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\nAA80\nBFE0\nE400\nBFE0\nAAC0\nF520\nAFE0\nA580\nA940\nB320\nENDCHAR\nSTARTCHAR U_7E23\nENCODING 32291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n4B80\n7920\n4BC0\n7880\n4920\nFFE0\n1080\n5AC0\n94A0\n3180\nENDCHAR\nSTARTCHAR U_7E24\nENCODING 32292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n47C0\nF100\n2FE0\n4280\nFD40\n07A0\n5140\nAD20\nAB20\nENDCHAR\nSTARTCHAR U_7E25\nENCODING 32293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4100\nFFE0\n2440\n4FA0\nF100\n07E0\nAB80\nA540\n0920\nENDCHAR\nSTARTCHAR U_7E26\nENCODING 32294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2620\n2520\n4840\nF3E0\n4480\nAA80\nFAE0\n0A80\nAA80\nAD80\n8C60\nENDCHAR\nSTARTCHAR U_7E27\nENCODING 32295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n25E0\n5540\nEA80\n2B40\n5AA0\nFBE0\n0880\nAAC0\nAAA0\n8DA0\nENDCHAR\nSTARTCHAR U_7E28\nENCODING 32296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n57C0\nF440\n27C0\n5540\nF380\n0FE0\nB280\nA4A0\n08E0\nENDCHAR\nSTARTCHAR U_7E29\nENCODING 32297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\n49A0\nF640\n2420\n5BC0\nF000\n0FE0\nA100\nA540\n0B20\nENDCHAR\nSTARTCHAR U_7E2A\nENCODING 32298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n47C0\nF540\n27C0\n5540\nFFE0\n0540\n5FE0\nA900\nA900\nENDCHAR\nSTARTCHAR U_7E2B\nENCODING 32299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n25E0\n5140\nE280\n2D40\n57E0\nFC80\n07E0\n5480\nAC80\nABE0\nENDCHAR\nSTARTCHAR U_7E2C\nENCODING 32300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\n4FE0\nFA80\n2B80\n4AA0\nFFA0\n0AC0\nAFA0\nAA60\n9420\nENDCHAR\nSTARTCHAR U_7E2D\nENCODING 32301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5280\nE920\n2AA0\n5FE0\nF100\n0FE0\n5AA0\nAFA0\nA860\nENDCHAR\nSTARTCHAR U_7E2E\nENCODING 32302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n4420\nFBE0\n2480\n5DE0\nF520\n05E0\n5520\nADE0\nA520\nENDCHAR\nSTARTCHAR U_7E2F\nENCODING 32303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n5420\nF7E0\n2100\n57C0\nED40\n07C0\n5540\nAFC0\nAC60\nENDCHAR\nSTARTCHAR U_7E30\nENCODING 32304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n4A80\n92E0\nF680\n23E0\n5880\nFA80\n2AE0\n5A80\nAD80\nA8E0\nENDCHAR\nSTARTCHAR U_7E31\nENCODING 32305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n4940\n96A0\nE800\n2880\n4A80\nFAE0\n2A80\n5A80\nAD80\nA8E0\nENDCHAR\nSTARTCHAR U_7E32\nENCODING 32306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n24A0\n57E0\nE4A0\n27E0\n4140\nF2A0\n0FE0\n5100\nAD40\nAB20\nENDCHAR\nSTARTCHAR U_7E33\nENCODING 32307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5540\nF7C0\n2540\n57C0\nE920\n07E0\n5480\nAA80\nA900\nENDCHAR\nSTARTCHAR U_7E34\nENCODING 32308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4280\nFFE0\n2AA0\n57C0\nF500\n07C0\n5900\nAFE0\nA900\nENDCHAR\nSTARTCHAR U_7E35\nENCODING 32309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n47C0\nF440\n2FE0\n5AA0\nFFE0\n0440\n5280\nA900\nAEE0\nENDCHAR\nSTARTCHAR U_7E36\nENCODING 32310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n5140\nFB40\n22E0\nFD20\n2A00\n1480\n7F40\n1500\nECE0\nENDCHAR\nSTARTCHAR U_7E37\nENCODING 32311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n4540\nFFE0\n2540\n5FE0\nF920\n0FE0\n5480\nAB80\nAE60\nENDCHAR\nSTARTCHAR U_7E38\nENCODING 32312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n4280\nF7C0\n2440\n57C0\nF440\n0FE0\n5100\nAA80\nAC60\nENDCHAR\nSTARTCHAR U_7E39\nENCODING 32313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n4FE0\nFAA0\n2FE0\n4000\nF7C0\n0000\n5FE0\nA540\nAB20\nENDCHAR\nSTARTCHAR U_7E3A\nENCODING 32314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\n4FE0\n82A0\nFBE0\n2AA0\n4BE0\nF880\n0BE0\n5880\nA880\nA7E0\nENDCHAR\nSTARTCHAR U_7E3B\nENCODING 32315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n7FE0\n5DC0\n6AA0\n4A80\n4540\n5FA0\n4A80\nB660\nENDCHAR\nSTARTCHAR U_7E3C\nENCODING 32316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n4900\nBDE0\nD200\n5DE0\nB440\nF540\n1560\nD540\nB6C0\nAE60\nENDCHAR\nSTARTCHAR U_7E3D\nENCODING 32317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n5560\nF6A0\n2520\n56A0\nEFE0\n0140\n56A0\nAA60\nA9C0\nENDCHAR\nSTARTCHAR U_7E3E\nENCODING 32318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5100\nF7C0\n2100\n5FE0\nEC40\n07C0\n5440\nA7C0\nAC60\nENDCHAR\nSTARTCHAR U_7E3F\nENCODING 32319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27C0\n5440\nEAA0\n2FE0\n5240\nFD20\n0280\nA940\nA880\n0300\nENDCHAR\nSTARTCHAR U_7E40\nENCODING 32320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n24A0\n57E0\nF280\n27E0\n5480\nEFE0\n0480\n57E0\nAC80\nA7E0\nENDCHAR\nSTARTCHAR U_7E41\nENCODING 32321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\nD540\n7E80\n5540\n7A20\n1F00\n0880\n7F40\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7E42\nENCODING 32322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4920\nF6C0\n2300\n5540\nFBA0\n0100\n57E0\nA900\nA900\nENDCHAR\nSTARTCHAR U_7E43\nENCODING 32323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2920\n4FE0\nF000\n2EE0\n5AA0\nFEE0\n0AA0\n5EE0\nAAA0\nB760\nENDCHAR\nSTARTCHAR U_7E44\nENCODING 32324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\n9140\nFA20\n93E0\nA940\nFC80\n0B60\n1480\n7FC0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7E45\nENCODING 32325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2A80\n5540\nF7C0\n2540\n57C0\nED40\n0FE0\n5380\nAD40\nA920\nENDCHAR\nSTARTCHAR U_7E46\nENCODING 32326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n25A0\n4360\nFDA0\n2120\n46C0\nFAA0\n0500\n5240\nA880\nAF00\nENDCHAR\nSTARTCHAR U_7E47\nENCODING 32327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C60\nE780\nA880\n5140\n4380\n7D40\n93E0\nFC80\n55C0\n56A0\n7D80\nENDCHAR\nSTARTCHAR U_7E48\nENCODING 32328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5C80\n4520\nA7E0\nDC80\n53E0\nBEA0\nF6A0\n07E0\nD480\nB4A0\n8BE0\nENDCHAR\nSTARTCHAR U_7E49\nENCODING 32329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n57C0\nF440\n27C0\n52A0\nEEC0\n0280\n56C0\nAAA0\nAC60\nENDCHAR\nSTARTCHAR U_7E4A\nENCODING 32330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2EC0\n44A0\nFFE0\n2A80\n4AA0\nFBA0\n0AC0\nABA0\nBD60\n0220\nENDCHAR\nSTARTCHAR U_7E4B\nENCODING 32331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\nAC20\nFBC0\nAA40\nFD80\n2A60\n1500\n7FC0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7E4C\nENCODING 32332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n4D60\nF4A0\n27E0\n5240\nFD20\n03C0\n5540\nA880\nAF60\nENDCHAR\nSTARTCHAR U_7E4D\nENCODING 32333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n5140\nFFE0\n2540\n57E0\nF560\n05A0\nAFE0\nA5A0\n8960\nENDCHAR\nSTARTCHAR U_7E4E\nENCODING 32334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n26C0\n4AA0\nFFE0\n2A80\n5680\nF540\n0A20\nA000\nAAA0\n12A0\nENDCHAR\nSTARTCHAR U_7E4F\nENCODING 32335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n4EE0\nE880\n2EE0\n5480\nFFC0\n0480\nAFE0\nA480\n0860\nENDCHAR\nSTARTCHAR U_7E50\nENCODING 32336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4540\nF7C0\n2540\n57C0\nF140\n0FA0\n5240\nAEA0\nAB80\nENDCHAR\nSTARTCHAR U_7E51\nENCODING 32337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2100\n4FE0\nF440\n2BA0\n5280\nFFE0\n0AA0\n5BA0\nA820\nA860\nENDCHAR\nSTARTCHAR U_7E52\nENCODING 32338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n4FE0\nFAA0\n2FE0\n5820\nF7C0\n0440\n57C0\nAC40\nA7C0\nENDCHAR\nSTARTCHAR U_7E53\nENCODING 32339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n47C0\nF440\n2FE0\n5A00\nFEE0\n0AA0\n5EA0\nAB40\nAEA0\nENDCHAR\nSTARTCHAR U_7E54\nENCODING 32340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24C0\n2FA0\n4A80\nEFE0\n2080\n5EA0\nFAA0\n0EC0\n5A40\nAEE0\nA120\nENDCHAR\nSTARTCHAR U_7E55\nENCODING 32341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n4100\nF7C0\n2100\n5FE0\nF280\n0FE0\nB440\nAC40\n07C0\nENDCHAR\nSTARTCHAR U_7E56\nENCODING 32342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A80\n5F80\n8AE0\nFFA0\n40A0\nAEA0\nFAA0\n0EA0\nAA40\nAEA0\n0B20\nENDCHAR\nSTARTCHAR U_7E57\nENCODING 32343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\n4FE0\nF540\n2920\n5440\nF7E0\n0A40\n5740\nA5E0\nA840\nENDCHAR\nSTARTCHAR U_7E58\nENCODING 32344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2280\n4FE0\nF540\n2900\n5FE0\nFAA0\n2FE0\n5AA0\nABA0\nA860\nENDCHAR\nSTARTCHAR U_7E59\nENCODING 32345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2F20\n5540\nEFE0\n2540\n4920\nFFE0\n0520\nB7E0\nAD20\n07E0\nENDCHAR\nSTARTCHAR U_7E5A\nENCODING 32346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5FE0\n8AA0\nF7C0\n2C60\n57C0\nF440\n07C0\n5540\nA920\nAB20\nENDCHAR\nSTARTCHAR U_7E5B\nENCODING 32347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n7CE0\n1080\nFFE0\n2A20\n73E0\n2A20\nFFE0\n5480\n93E0\n3080\nENDCHAR\nSTARTCHAR U_7E5C\nENCODING 32348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n5FE0\nEAA0\n2FE0\n5820\nFFE0\n0040\nAFE0\nA440\n02C0\nENDCHAR\nSTARTCHAR U_7E5D\nENCODING 32349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n4EE0\nFAA0\n2FE0\n5AA0\nFBA0\n0AA0\nABA0\nACA0\n0860\nENDCHAR\nSTARTCHAR U_7E5E\nENCODING 32350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n5100\nEFE0\n2440\n5EE0\nF440\n07E0\n5280\nAAA0\nAC60\nENDCHAR\nSTARTCHAR U_7E5F\nENCODING 32351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n4FE0\nF540\n27C0\n5540\nF7C0\n0100\nB7E0\nA900\n0100\nENDCHAR\nSTARTCHAR U_7E60\nENCODING 32352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5480\n5140\n9F00\n52A0\nCE40\n79C0\n0A00\n1480\n7FC0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7E61\nENCODING 32353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n47C0\n5140\nE7E0\n2140\n57C0\nFD20\n07E0\nAD20\nB7E0\n8920\nENDCHAR\nSTARTCHAR U_7E62\nENCODING 32354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n47C0\n9540\nEFE0\n2440\n57C0\nEC40\n07C0\n5440\nAFC0\nAC60\nENDCHAR\nSTARTCHAR U_7E63\nENCODING 32355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2140\n4FE0\nF140\n27E0\n5100\nFFE0\n2540\n57C0\nA540\nAFE0\nENDCHAR\nSTARTCHAR U_7E64\nENCODING 32356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2480\nFFE0\n2A80\nD560\n3F80\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7E65\nENCODING 32357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n4100\n97C0\nE440\n57C0\nF280\n0FE0\nA7C0\nA440\n07C0\nENDCHAR\nSTARTCHAR U_7E66\nENCODING 32358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3DE0\n4520\nBDE0\nD080\n5FE0\nA6A0\nE7E0\n0480\nB4A0\nABE0\nENDCHAR\nSTARTCHAR U_7E67\nENCODING 32359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n4FE0\n5920\nE540\n2920\n57C0\nF000\n0FE0\nB240\nAFE0\nENDCHAR\nSTARTCHAR U_7E68\nENCODING 32360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n25C0\n5480\nF3E0\n2D40\n5480\nF7E0\n0480\n57E0\nAC80\nABE0\nENDCHAR\nSTARTCHAR U_7E69\nENCODING 32361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n4EE0\nF280\n2EE0\n5AA0\nFEE0\n0AA0\n5EE0\nAA80\nA9E0\nENDCHAR\nSTARTCHAR U_7E6A\nENCODING 32362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n47C0\nF820\n2FE0\n4AA0\nFFE0\n0440\n57C0\nAC40\nA7C0\nENDCHAR\nSTARTCHAR U_7E6B\nENCODING 32363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFF40\n5460\nFFC0\n5540\n7C80\n1260\n2480\n7F40\n2280\nCE60\nENDCHAR\nSTARTCHAR U_7E6C\nENCODING 32364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5540\nFBA0\n2FE0\n5000\nF7E0\n0420\n57A0\n96A0\n07E0\nENDCHAR\nSTARTCHAR U_7E6D\nENCODING 32365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\nFFE0\n9520\nA7E0\nFD60\n97E0\nA520\nFD60\nAFA0\nD420\nENDCHAR\nSTARTCHAR U_7E6E\nENCODING 32366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\n47C0\nF540\n27C0\n5000\nFFE0\n0540\nA7C0\nA540\n0FE0\nENDCHAR\nSTARTCHAR U_7E6F\nENCODING 32367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n5FE0\nF000\n2FE0\n5440\nEFC0\n02A0\n56C0\nAA40\nAB20\nENDCHAR\nSTARTCHAR U_7E70\nENCODING 32368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n4440\nFFE0\n2AA0\n5EE0\nF100\n0FE0\n5580\nA940\nA920\nENDCHAR\nSTARTCHAR U_7E71\nENCODING 32369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\n2480\n57C0\nFAC0\n2540\n4240\nF580\n0E40\nACA0\nB380\nENDCHAR\nSTARTCHAR U_7E72\nENCODING 32370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n4EA0\n9520\nFF40\n5540\n9FE0\nF540\n1FE0\n5540\nB540\nA340\nENDCHAR\nSTARTCHAR U_7E73\nENCODING 32371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4E80\nAAE0\nEFA0\n4AA0\nAFA0\nF4A0\n1F40\nAA40\nAAA0\n16A0\nENDCHAR\nSTARTCHAR U_7E74\nENCODING 32372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n7940\n43E0\n7880\nABE0\n3E80\n1500\n7FC0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7E75\nENCODING 32373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n9B40\nE840\n2FC0\n5000\nF7C0\n0440\n57C0\nAC40\nAFE0\nENDCHAR\nSTARTCHAR U_7E76\nENCODING 32374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4280\nFFE0\n2440\n57C0\nF440\n07C0\n5540\nAAA0\nABA0\nENDCHAR\nSTARTCHAR U_7E77\nENCODING 32375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n4AA0\nFFE0\n2AA0\n4FE0\nF800\n0FE0\n5AA0\nAA40\nAB20\nENDCHAR\nSTARTCHAR U_7E78\nENCODING 32376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2BE0\n5480\nE5A0\n22A0\n4DC0\nF6A0\n05A0\n5680\nAD80\nABE0\nENDCHAR\nSTARTCHAR U_7E79\nENCODING 32377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4AA0\n8FE0\nF100\n27C0\n4100\nFFE0\n0280\n5FE0\nA900\nA900\nENDCHAR\nSTARTCHAR U_7E7A\nENCODING 32378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n4E80\n94E0\nEFA0\n42A0\nAF40\nF2C0\n0F20\n5000\nAAA0\nAAA0\nENDCHAR\nSTARTCHAR U_7E7B\nENCODING 32379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4100\n8FE0\nFBA0\n2540\n5FE0\nF100\n0FE0\n5AA0\nAAA0\nA860\nENDCHAR\nSTARTCHAR U_7E7C\nENCODING 32380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n4DA0\n8A40\nFDA0\n2800\n4FE0\nFA40\n0DA0\n5A40\nADA0\nAFE0\nENDCHAR\nSTARTCHAR U_7E7D\nENCODING 32381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n8820\nF780\n2540\n5BC0\nFC40\n07C0\n5440\nAFC0\nAC60\nENDCHAR\nSTARTCHAR U_7E7E\nENCODING 32382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\n4BE0\n92A0\nE7E0\n3D40\n5540\nF5E0\n0520\n55E0\nAA00\nA9E0\nENDCHAR\nSTARTCHAR U_7E7F\nENCODING 32383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2740\n2540\n4760\n9540\nE7A0\n4720\nF000\n0FE0\nAAA0\nAAA0\n1FE0\nENDCHAR\nSTARTCHAR U_7E80\nENCODING 32384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4560\n4B40\n9FE0\nE940\n2BE0\n4880\nFBC0\n0880\n5FE0\nA940\nAE20\nENDCHAR\nSTARTCHAR U_7E81\nENCODING 32385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4100\n9FE0\nEAA0\n2FE0\n5100\nF7C0\n0100\n5FE0\nA540\nAAA0\nENDCHAR\nSTARTCHAR U_7E82\nENCODING 32386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9480\n3F80\n2480\nFFE0\n4A40\n9520\n7FC0\n2480\n4C40\nENDCHAR\nSTARTCHAR U_7E83\nENCODING 32387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5280\nFD60\n2540\n4960\nF440\n07C0\nA440\nA7C0\n0840\nENDCHAR\nSTARTCHAR U_7E84\nENCODING 32388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n5FE0\nA480\nE7C0\n5280\nA900\nFEE0\n0900\nAFE0\nA900\n97E0\nENDCHAR\nSTARTCHAR U_7E85\nENCODING 32389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n4BA0\nAAE0\nE7C0\n4AA0\nAFE0\nE100\n0FE0\nA540\nA520\n8920\nENDCHAR\nSTARTCHAR U_7E86\nENCODING 32390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4AA0\n9FE0\nE100\n27C0\n5100\nFFE0\n0AA0\n5FE0\nA100\nAFE0\nENDCHAR\nSTARTCHAR U_7E87\nENCODING 32391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n95E0\n5880\nFFE0\n5520\n93E0\n7920\n25E0\nFF20\n11E0\n5540\nB620\nENDCHAR\nSTARTCHAR U_7E88\nENCODING 32392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n4480\n9FE0\nE520\n2FE0\n5120\nFFE0\n2B20\n5BE0\nAE40\nA0A0\nENDCHAR\nSTARTCHAR U_7E89\nENCODING 32393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n4FE0\nE440\n3FE0\n4AA0\nA7C0\nF440\n07C0\nA440\nA7C0\n0C60\nENDCHAR\nSTARTCHAR U_7E8A\nENCODING 32394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n9A40\nEFE0\n2A40\n5FE0\nF940\n0FC0\n5940\nA7C0\nAC60\nENDCHAR\nSTARTCHAR U_7E8B\nENCODING 32395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4440\n97C0\nE440\n4FE0\n9B20\nF640\n0BA0\n5640\nA980\nAE60\nENDCHAR\nSTARTCHAR U_7E8C\nENCODING 32396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n9100\nEFE0\n2AA0\n5FE0\nF440\n07C0\n5440\nAFC0\nAC60\nENDCHAR\nSTARTCHAR U_7E8D\nENCODING 32397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\nFFE0\nAAA0\nFBE0\nAAA0\nFBE0\n1480\n7FC0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7E8E\nENCODING 32398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24C0\n5EA0\n8480\nFFE0\n4540\nADC0\nE560\n0DE0\nA540\nAEA0\n0120\nENDCHAR\nSTARTCHAR U_7E8F\nENCODING 32399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n9940\nEFC0\n4940\n8FE0\nFA40\n2D20\n57E0\nA900\nAFE0\nENDCHAR\nSTARTCHAR U_7E90\nENCODING 32400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n5E80\n8DE0\nF320\n55E0\n9520\nE9E0\n0920\nB5E0\nA2A0\n0120\nENDCHAR\nSTARTCHAR U_7E91\nENCODING 32401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n4100\n9FE0\nE920\n2FC0\n5920\nEBE0\n0AA0\n5FE0\nA540\nAFE0\nENDCHAR\nSTARTCHAR U_7E92\nENCODING 32402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n4800\n8BE0\nEAA0\n2BE0\n4AA0\nEBE0\n0940\nABE0\nA880\n13E0\nENDCHAR\nSTARTCHAR U_7E93\nENCODING 32403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\n9EE0\nEAA0\n4EE0\nAA40\nF1A0\n07E0\nAA40\nA980\n0660\nENDCHAR\nSTARTCHAR U_7E94\nENCODING 32404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n4880\n5FC0\nE840\n2FC0\n5920\nF7E0\n0940\nBFC0\nA520\n09E0\nENDCHAR\nSTARTCHAR U_7E95\nENCODING 32405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n9AA0\nEEE0\n2480\n5FE0\nE480\n0FE0\n5CA0\nA640\nA420\nENDCHAR\nSTARTCHAR U_7E96\nENCODING 32406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AC0\n45A0\n9FE0\nEA80\n5BA0\n8AA0\nFBC0\n2A80\n4AA0\nBF60\nA020\nENDCHAR\nSTARTCHAR U_7E97\nENCODING 32407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n4FE0\n9900\nEFE0\n2900\n5FE0\nE900\n0FE0\n5AA0\nAEE0\nABA0\nENDCHAR\nSTARTCHAR U_7E98\nENCODING 32408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n4FE0\n9A40\nEFE0\n4960\n97C0\nF440\n07C0\n5440\nAFC0\nAC60\nENDCHAR\nSTARTCHAR U_7E99\nENCODING 32409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4AA0\nAFE0\nE540\n4BE0\nA540\nFBE0\n0F40\nA1E0\nAB40\n81E0\nENDCHAR\nSTARTCHAR U_7E9A\nENCODING 32410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4000\n8FE0\nFAA0\n2FE0\n5AA0\nFFE0\n0480\n57C0\nAC80\nA6E0\nENDCHAR\nSTARTCHAR U_7E9B\nENCODING 32411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n2480\nFFE0\n2480\nFFC0\n6940\n5BE0\nFDC0\nAAA0\nENDCHAR\nSTARTCHAR U_7E9C\nENCODING 32412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F80\n2AE0\n5F40\nEAE0\n2FE0\n5440\nF7C0\n0440\n57C0\nAAA0\nACE0\nENDCHAR\nSTARTCHAR U_7E9D\nENCODING 32413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n4540\n87C0\nED60\n4AA0\n8FE0\nE100\n07C0\nA280\nAFE0\n0540\nENDCHAR\nSTARTCHAR U_7E9E\nENCODING 32414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n4BC0\n9C60\nEBA0\n5C20\n93E0\nF6A0\n03A0\nAA00\nAAA0\n11C0\nENDCHAR\nSTARTCHAR U_7E9F\nENCODING 32415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2000\n4000\nF000\n2000\n4000\nF000\n0000\n3000\nC000\n0000\nENDCHAR\nSTARTCHAR U_7EA0\nENCODING 32416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2240\n4A40\n5240\nE240\n2240\n42C0\nF340\n0A40\n3040\nC040\nENDCHAR\nSTARTCHAR U_7EA1\nENCODING 32417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\n4080\nF080\n2FE0\n4080\nF080\n0080\n3080\nC080\n0380\nENDCHAR\nSTARTCHAR U_7EA2\nENCODING 32418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n4100\n5100\nE100\n2100\n4100\nF100\n0100\n3100\nCFE0\nENDCHAR\nSTARTCHAR U_7EA3\nENCODING 32419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2040\n4840\nF7E0\n2040\n4440\nF240\n0240\n3040\nC040\n00C0\nENDCHAR\nSTARTCHAR U_7EA4\nENCODING 32420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\n4900\n5100\nE100\n2FE0\n4100\nF100\n0900\n3100\nC100\nENDCHAR\nSTARTCHAR U_7EA5\nENCODING 32421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n4BE0\n5400\nE3C0\n2040\n4080\nF100\n0A20\n3220\nC1E0\nENDCHAR\nSTARTCHAR U_7EA6\nENCODING 32422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n4BE0\n5420\nE020\n2220\n4120\nF120\n0820\n3120\nC0C0\nENDCHAR\nSTARTCHAR U_7EA7\nENCODING 32423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2240\n4A40\n5280\nE2E0\n2220\n4220\nF540\n0C80\n3540\nCA20\nENDCHAR\nSTARTCHAR U_7EA8\nENCODING 32424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n47C0\n5140\nE540\n2340\n4140\nF2C0\n0A40\n3460\nC820\nENDCHAR\nSTARTCHAR U_7EA9\nENCODING 32425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n4FE0\n5400\nE400\n2400\n4400\nF400\n0400\n3400\nC800\nENDCHAR\nSTARTCHAR U_7EAA\nENCODING 32426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n4040\nF040\n2040\n47C0\nF400\n0400\n3420\nC420\n03E0\nENDCHAR\nSTARTCHAR U_7EAB\nENCODING 32427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n20A0\n48A0\n52A0\nE2A0\n24A0\n40A0\nF0A0\n0920\n32A0\nC440\nENDCHAR\nSTARTCHAR U_7EAC\nENCODING 32428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n4900\n57C0\nE100\n2FE0\n4120\nF120\n0960\n3100\nC100\nENDCHAR\nSTARTCHAR U_7EAD\nENCODING 32429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2000\n4800\n5000\nEFE0\n2100\n4100\nF200\n0C40\n37A0\nC420\nENDCHAR\nSTARTCHAR U_7EAE\nENCODING 32430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4100\n57E0\nE200\n2280\n4480\nF500\n0940\n2A20\nD3E0\nENDCHAR\nSTARTCHAR U_7EAF\nENCODING 32431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4900\n5100\nE540\n2540\n47C0\nF100\n0920\n3120\nC0E0\nENDCHAR\nSTARTCHAR U_7EB0\nENCODING 32432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n4C80\n54A0\nE7C0\n2480\n4480\nF480\n0DA0\n36A0\nC460\nENDCHAR\nSTARTCHAR U_7EB1\nENCODING 32433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4540\n5520\nE520\n2900\n4120\nF040\n0080\n3300\nCC00\nENDCHAR\nSTARTCHAR U_7EB2\nENCODING 32434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n4E60\n5560\nE4A0\n24A0\n4560\nF620\n0C20\n3420\nC460\nENDCHAR\nSTARTCHAR U_7EB3\nENCODING 32435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4FE0\n5520\nE520\n25A0\n4560\nF620\n0C20\n3420\nC4E0\nENDCHAR\nSTARTCHAR U_7EB4\nENCODING 32436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n20C0\n4700\n5100\nE100\n2FE0\n4100\nF100\n0100\n3100\nC7C0\nENDCHAR\nSTARTCHAR U_7EB5\nENCODING 32437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n4480\n5480\nE480\n2680\n4580\nF880\n0940\n3220\nC420\nENDCHAR\nSTARTCHAR U_7EB6\nENCODING 32438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n4C40\n5020\nE200\n2240\n4280\nF300\n0A20\n3220\nC1E0\nENDCHAR\nSTARTCHAR U_7EB7\nENCODING 32439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\n4240\n5440\nE820\n27C0\n4240\nE240\n0A40\n3440\nC8C0\nENDCHAR\nSTARTCHAR U_7EB8\nENCODING 32440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2780\n4C80\n5480\nE7E0\n2480\n4480\nF4A0\n0DA0\n3660\nC420\nENDCHAR\nSTARTCHAR U_7EB9\nENCODING 32441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n4FE0\n5440\nE440\n2280\n4280\nF100\n0A80\n3440\nC820\nENDCHAR\nSTARTCHAR U_7EBA\nENCODING 32442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n4FE0\n5200\nE3C0\n2240\n4240\nF240\n0A40\n3540\nC880\nENDCHAR\nSTARTCHAR U_7EBB\nENCODING 32443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n47E0\n5420\nE840\n2000\n4000\nF000\n0000\n3000\nC7E0\nENDCHAR\nSTARTCHAR U_7EBC\nENCODING 32444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27A0\n20A0\n40A0\n57A0\nE420\n2420\n47A0\nF0A0\n00A0\n3520\nC220\nENDCHAR\nSTARTCHAR U_7EBD\nENCODING 32445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n4A40\n5240\nE240\n27C0\n4240\nF240\n0A40\n3240\nCFE0\nENDCHAR\nSTARTCHAR U_7EBE\nENCODING 32446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2240\n4980\n5080\nEFE0\n20A0\n40C0\nF080\n0880\n3080\nC380\nENDCHAR\nSTARTCHAR U_7EBF\nENCODING 32447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2240\n43C0\n4E00\nE3E0\n2E00\n4240\nF280\n0920\n32A0\nCC60\nENDCHAR\nSTARTCHAR U_7EC0\nENCODING 32448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\n4FE0\n5240\nE240\n23C0\n4240\nF240\n0A40\n33C0\nC240\nENDCHAR\nSTARTCHAR U_7EC1\nENCODING 32449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2540\n4540\n5FE0\nE540\n2540\n45C0\nF540\n0C00\n3400\nC7E0\nENDCHAR\nSTARTCHAR U_7EC2\nENCODING 32450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2240\n4FE0\n5200\nE3E0\n2240\n4240\nF540\n0880\n3140\nC620\nENDCHAR\nSTARTCHAR U_7EC3\nENCODING 32451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n4A00\n5780\nE480\n27E0\n4080\nF2C0\n0CA0\n34A0\nC180\nENDCHAR\nSTARTCHAR U_7EC4\nENCODING 32452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n4440\n5440\nE7C0\n2440\n4440\nF7C0\n0440\n3440\nCFE0\nENDCHAR\nSTARTCHAR U_7EC5\nENCODING 32453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n47E0\n5520\nE7E0\n2520\n4520\nF7E0\n0900\n3100\nC100\nENDCHAR\nSTARTCHAR U_7EC6\nENCODING 32454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n44A0\n54A0\nE4A0\n27E0\n44A0\nF4A0\n04A0\n37E0\nC420\nENDCHAR\nSTARTCHAR U_7EC7\nENCODING 32455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n4C40\n5440\nE440\n27C0\n4000\nF280\n0240\n3420\nC820\nENDCHAR\nSTARTCHAR U_7EC8\nENCODING 32456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n5440\nEA80\n2100\n4280\nEC60\n0100\n30C0\nC300\n00C0\nENDCHAR\nSTARTCHAR U_7EC9\nENCODING 32457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n4480\n5100\nE7E0\n2020\n43E0\nF020\n0020\n37E0\nC020\nENDCHAR\nSTARTCHAR U_7ECA\nENCODING 32458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2920\n4540\n5100\nE7C0\n2100\n5100\nEFE0\n0100\n3100\nC100\nENDCHAR\nSTARTCHAR U_7ECB\nENCODING 32459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n4FE0\n52A0\nEFE0\n2A80\n4FE0\nF2A0\n0AE0\n3480\nC880\nENDCHAR\nSTARTCHAR U_7ECC\nENCODING 32460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\n4540\n5540\nE7C0\n2540\n4100\nF520\n0D20\n37E0\nC420\nENDCHAR\nSTARTCHAR U_7ECD\nENCODING 32461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\n4920\n5220\nE2A0\n2440\n4BE0\nF220\n0A20\n33E0\nC220\nENDCHAR\nSTARTCHAR U_7ECE\nENCODING 32462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2280\n4100\n5280\nEC60\n2100\n47C0\nF100\n0FE0\n3100\nC100\nENDCHAR\nSTARTCHAR U_7ECF\nENCODING 32463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2080\n4900\n5280\nE440\n2820\n47C0\nF100\n0100\n3100\nCFE0\nENDCHAR\nSTARTCHAR U_7ED0\nENCODING 32464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4A00\n5440\nEFA0\n2000\n47C0\nF440\n0C40\n37C0\nC440\nENDCHAR\nSTARTCHAR U_7ED1\nENCODING 32465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n24A0\n4FA0\n54C0\nEEA0\n24A0\n4FA0\nF4E0\n0480\n3880\nC080\nENDCHAR\nSTARTCHAR U_7ED2\nENCODING 32466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2120\n4FE0\n5500\nE520\n2F20\n4540\nF480\n04A0\n3560\nCA20\nENDCHAR\nSTARTCHAR U_7ED3\nENCODING 32467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4FE0\n5100\nE7C0\n2000\n47C0\nF440\n0C40\n37C0\nC440\nENDCHAR\nSTARTCHAR U_7ED4\nENCODING 32468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4FE0\n5280\nE7C0\n2820\n57E0\nF200\n03C0\n3040\nC180\nENDCHAR\nSTARTCHAR U_7ED5\nENCODING 32469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n4FE0\n5240\nE380\n2EA0\n5060\nE7C0\n0280\n32A0\nCCE0\nENDCHAR\nSTARTCHAR U_7ED6\nENCODING 32470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n4200\n5440\nEFE0\n2120\n4100\nF7C0\n0100\n3100\nCFE0\nENDCHAR\nSTARTCHAR U_7ED7\nENCODING 32471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22E0\n2400\n4800\n5200\nE5E0\n2C40\n4440\nF440\n0440\n3440\nC4C0\nENDCHAR\nSTARTCHAR U_7ED8\nENCODING 32472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4280\n5440\nEBA0\n2000\n57E0\nE100\n1240\n2440\nC7A0\nENDCHAR\nSTARTCHAR U_7ED9\nENCODING 32473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n4280\n5440\nE820\n27C0\n4000\nF7C0\n0C40\n3440\nC7C0\nENDCHAR\nSTARTCHAR U_7EDA\nENCODING 32474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n47E0\n5020\nE7A0\n24A0\n47A0\nF4A0\n0FA0\n3020\nC0C0\nENDCHAR\nSTARTCHAR U_7EDB\nENCODING 32475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27E0\n4C40\nF380\n2D60\n4100\nEFE0\n0900\n3FE0\nC100\n0100\nENDCHAR\nSTARTCHAR U_7EDC\nENCODING 32476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n4440\n5680\nE900\n2280\n4C60\nF7C0\n0440\n3440\nC7C0\nENDCHAR\nSTARTCHAR U_7EDD\nENCODING 32477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n4480\n57E0\nECA0\n24A0\n47E0\nF400\n0420\n3420\nC3E0\nENDCHAR\nSTARTCHAR U_7EDE\nENCODING 32478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n4FE0\n5440\nE820\n2480\n4280\nF100\n0A80\n3440\nC820\nENDCHAR\nSTARTCHAR U_7EDF\nENCODING 32479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4200\n5440\nEFE0\n22A0\n4280\nF280\n02A0\n34A0\nC8E0\nENDCHAR\nSTARTCHAR U_7EE0\nENCODING 32480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\n4FE0\n54A0\nE7E0\n24A0\n47E0\nF280\n0900\n3280\nCC60\nENDCHAR\nSTARTCHAR U_7EE1\nENCODING 32481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24A0\n22C0\n4880\n57E0\nE420\n27E0\n4420\nF7E0\n0C20\n3420\nC4E0\nENDCHAR\nSTARTCHAR U_7EE2\nENCODING 32482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n4FC0\n5000\nE7E0\n2420\n47E0\nF420\n0FE0\n3420\nC460\nENDCHAR\nSTARTCHAR U_7EE3\nENCODING 32483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\n4900\n57E0\nE540\n2920\n4780\nF280\n0AE0\n3420\nC8C0\nENDCHAR\nSTARTCHAR U_7EE4\nENCODING 32484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2420\n4920\n5100\nE280\n2440\n4820\nF7C0\n0440\n3440\nC7C0\nENDCHAR\nSTARTCHAR U_7EE5\nENCODING 32485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2F20\n4A20\n5540\nE100\n2200\n4FE0\nF240\n0480\n3380\nCC60\nENDCHAR\nSTARTCHAR U_7EE6\nENCODING 32486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n4E40\n5180\nE660\n2100\n47E0\nF100\n0D40\n3120\nC320\nENDCHAR\nSTARTCHAR U_7EE7\nENCODING 32487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n26A0\n45C0\n5480\nE7E0\n2480\n45C0\nF6A0\n0480\n3480\nC7E0\nENDCHAR\nSTARTCHAR U_7EE8\nENCODING 32488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n4FE0\n5120\nE7E0\n2500\n47E0\nF120\n0BE0\n3540\nC900\nENDCHAR\nSTARTCHAR U_7EE9\nENCODING 32489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4900\n57C0\nE100\n2FE0\n4440\nF540\n0D40\n3280\nCC60\nENDCHAR\nSTARTCHAR U_7EEA\nENCODING 32490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27A0\n4940\n57E0\nE100\n23E0\n4620\nF3E0\n0A20\n33E0\nC220\nENDCHAR\nSTARTCHAR U_7EEB\nENCODING 32491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n4900\n57E0\nE240\n2520\n43C0\nF640\n0980\n3240\nC420\nENDCHAR\nSTARTCHAR U_7EEC\nENCODING 32492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\n4240\n5100\nE7C0\n2540\n4540\nF7E0\n0100\n3280\nCC60\nENDCHAR\nSTARTCHAR U_7EED\nENCODING 32493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n4100\n57E0\nE4A0\n2A80\n4480\nEFE0\n0100\n32C0\nCC20\nENDCHAR\nSTARTCHAR U_7EEE\nENCODING 32494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n4A80\n5440\nEFE0\n2040\n4740\nF540\n0F40\n3040\nC1C0\nENDCHAR\nSTARTCHAR U_7EEF\nENCODING 32495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n4EE0\n5280\nE280\n2EE0\n4280\nF280\n0EE0\n3280\nC280\nENDCHAR\nSTARTCHAR U_7EF0\nENCODING 32496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\n4900\n57C0\nE440\n27C0\n4440\nF7C0\n0100\n3FE0\nC100\nENDCHAR\nSTARTCHAR U_7EF1\nENCODING 32497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\n4900\n5FE0\nE820\n2BA0\n4AA0\nFAA0\n0BA0\n3820\nC860\nENDCHAR\nSTARTCHAR U_7EF2\nENCODING 32498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n4FC0\n5440\nE7C0\n2080\n44A0\nF7C0\n0C80\n35A0\nC6E0\nENDCHAR\nSTARTCHAR U_7EF3\nENCODING 32499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n4FC0\n5100\nEFC0\n2940\n4FC0\nF940\n0FC0\n3120\nC0E0\nENDCHAR\nSTARTCHAR U_7EF4\nENCODING 32500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n2480\n4FE0\n5480\nE7C0\n2480\n4480\nF7C0\n0C80\n3480\nC7E0\nENDCHAR\nSTARTCHAR U_7EF5\nENCODING 32501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n4C40\n57C0\nE440\n27C0\n4100\nF7E0\n0D20\n3560\nC100\nENDCHAR\nSTARTCHAR U_7EF6\nENCODING 32502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2720\n4A20\n5540\nEFE0\n2820\n47C0\nF240\n0980\n3240\nCC20\nENDCHAR\nSTARTCHAR U_7EF7\nENCODING 32503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n4AA0\n5EE0\nEAA0\n2AA0\n4EE0\nFAA0\n0AA0\n2AA0\nD760\nENDCHAR\nSTARTCHAR U_7EF8\nENCODING 32504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\n4BA0\n5920\nEFE0\n2820\n4BA0\nFAA0\n0BA0\n2820\nD0E0\nENDCHAR\nSTARTCHAR U_7EF9\nENCODING 32505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n2FE0\n4420\n57A0\nEA20\n2FA0\n4220\nFAA0\n0FA0\n3020\nC0C0\nENDCHAR\nSTARTCHAR U_7EFA\nENCODING 32506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2740\n4D60\n5540\nE240\n25E0\n4800\nF7E0\n0C20\n3420\nC7E0\nENDCHAR\nSTARTCHAR U_7EFB\nENCODING 32507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\n4FC0\n5200\nE7E0\n2440\n4FA0\nF480\n0DA0\n3420\nC3E0\nENDCHAR\nSTARTCHAR U_7EFC\nENCODING 32508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4820\n57C0\nE000\n27E0\n4100\nF540\n0540\n3920\nC320\nENDCHAR\nSTARTCHAR U_7EFD\nENCODING 32509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n4C20\n5000\nE7E0\n2080\n4280\nF2E0\n0A80\n3580\nC8E0\nENDCHAR\nSTARTCHAR U_7EFE\nENCODING 32510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n4C20\n53C0\nE240\n23C0\n4200\nF3E0\n0A20\n33E0\nC220\nENDCHAR\nSTARTCHAR U_7EFF\nENCODING 32511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\n43C0\nF040\n2FE0\n4120\nF540\n0380\n3540\nC920\n0300\nENDCHAR\nSTARTCHAR U_7F00\nENCODING 32512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2220\n4CC0\n5440\nEAA0\n2000\n4EE0\nEAA0\n0440\n36C0\nC920\nENDCHAR\nSTARTCHAR U_7F01\nENCODING 32513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n22A0\n4D40\n52A0\nE2A0\n2000\n47E0\nF520\n0FE0\n3520\nC7E0\nENDCHAR\nSTARTCHAR U_7F02\nENCODING 32514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\n4240\n53C0\nE100\n27E0\n4520\nF7E0\n0100\n3FE0\nC100\nENDCHAR\nSTARTCHAR U_7F03\nENCODING 32515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n2520\n4F20\n55E0\nE520\n2F20\n55E0\nE520\n0520\n35E0\nC520\nENDCHAR\nSTARTCHAR U_7F04\nENCODING 32516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\n4FE0\n5880\nEF80\n28A0\n4EA0\nFAA0\n0E40\n28A0\nD320\nENDCHAR\nSTARTCHAR U_7F05\nENCODING 32517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2100\n4200\n5FE0\nEAA0\n2BA0\n4AA0\nFBA0\n0AA0\n3FE0\nC820\nENDCHAR\nSTARTCHAR U_7F06\nENCODING 32518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2AE0\n4B40\n5A20\nE7C0\n2440\n4540\nF540\n0900\n3320\nCDE0\nENDCHAR\nSTARTCHAR U_7F07\nENCODING 32519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n47C0\n5440\nE7C0\n2000\n4FE0\nF280\n02E0\n3580\nC8E0\nENDCHAR\nSTARTCHAR U_7F08\nENCODING 32520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n2A80\n4AC0\n5FA0\nEA80\n2EA0\n4AA0\nFA40\n0E80\n3100\nC600\nENDCHAR\nSTARTCHAR U_7F09\nENCODING 32521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n4FC0\n5000\nEFE0\n2440\n47C0\nF440\n0460\n3FC0\nC040\nENDCHAR\nSTARTCHAR U_7F0A\nENCODING 32522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n47C0\n5440\nE7C0\n2000\n4FE0\nFAA0\n0AA0\n3AA0\nCFE0\nENDCHAR\nSTARTCHAR U_7F0B\nENCODING 32523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n4D40\n5FE0\nE000\n27C0\n4540\nF540\n0D40\n3280\nCC60\nENDCHAR\nSTARTCHAR U_7F0C\nENCODING 32524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\n4FE0\n5520\nE520\n27E0\n4140\nF2A0\n0E20\n3A40\nC1C0\nENDCHAR\nSTARTCHAR U_7F0D\nENCODING 32525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\n4900\n5FE0\nE540\n27E0\n4540\nFFE0\n0900\n3100\nC7C0\nENDCHAR\nSTARTCHAR U_7F0E\nENCODING 32526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22E0\n24A0\n4CA0\n5700\nE4E0\n27A0\n44A0\nF7A0\n0C40\n34A0\nC520\nENDCHAR\nSTARTCHAR U_7F0F\nENCODING 32527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2480\n4BE0\n5AA0\nEBE0\n2AA0\n4BE0\nFA80\n0980\n3A40\nCC20\nENDCHAR\nSTARTCHAR U_7F10\nENCODING 32528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\n4440\n57C0\nE440\n27C0\n4120\nEDC0\n0540\n3920\nC300\nENDCHAR\nSTARTCHAR U_7F11\nENCODING 32529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25C0\n2440\n4BE0\n5800\nEA00\n2BE0\n4880\nFBE0\n0880\n3940\nCA20\nENDCHAR\nSTARTCHAR U_7F12\nENCODING 32530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n25E0\n4520\n51E0\nED00\n25E0\n4520\nF520\n05E0\n3600\nC9E0\nENDCHAR\nSTARTCHAR U_7F13\nENCODING 32531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2A20\n4540\n5FE0\nE200\n2FE0\n4200\nF3C0\n0640\n3980\nC660\nENDCHAR\nSTARTCHAR U_7F14\nENCODING 32532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4A80\n5FE0\nE920\n27C0\n4540\nF540\n0D40\n35C0\nC100\nENDCHAR\nSTARTCHAR U_7F15\nENCODING 32533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\n4FE0\n5380\nE540\n2920\n4FE0\nF240\n0C40\n3380\nCE60\nENDCHAR\nSTARTCHAR U_7F16\nENCODING 32534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4820\n5FE0\nE800\n2FE0\n4AA0\nFFE0\n0AA0\n3AA0\nC860\nENDCHAR\nSTARTCHAR U_7F17\nENCODING 32535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n4FC0\n5500\nE7E0\n2440\n47E0\nF440\n0FC0\n3440\nC7C0\nENDCHAR\nSTARTCHAR U_7F18\nENCODING 32536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n4F80\n5080\nEFE0\n2520\n4B40\nF580\n0AC0\n34A0\nC300\nENDCHAR\nSTARTCHAR U_7F19\nENCODING 32537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n4EC0\n5280\nEFE0\n2000\n47C0\nF440\n0FC0\n3440\nC7C0\nENDCHAR\nSTARTCHAR U_7F1A\nENCODING 32538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2FE0\n4D20\n57E0\nE520\n27E0\n4520\nFFE0\n0440\n3240\nC1C0\nENDCHAR\nSTARTCHAR U_7F1B\nENCODING 32539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2800\n4BC0\n5800\nEFE0\n2AA0\n4B40\nFFE0\n0A40\n2940\nD0C0\nENDCHAR\nSTARTCHAR U_7F1C\nENCODING 32540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4100\n57C0\nE440\n27C0\n4440\nF7C0\n0440\n3FE0\nC440\nENDCHAR\nSTARTCHAR U_7F1D\nENCODING 32541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2A40\n4D80\n5240\nEFE0\n2480\n47E0\nF480\n07E0\n3C80\nC3E0\nENDCHAR\nSTARTCHAR U_7F1E\nENCODING 32542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\n4000\n57C0\nE440\n2FE0\n4440\nF7C0\n0540\n3C80\nC760\nENDCHAR\nSTARTCHAR U_7F1F\nENCODING 32543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4A40\n53C0\nE000\n2FE0\n4820\nFBA0\n0AA0\n3BA0\nC860\nENDCHAR\nSTARTCHAR U_7F20\nENCODING 32544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4800\n5BE0\nEAA0\n2AA0\n4BE0\nF880\n0FE0\n2880\nD7E0\nENDCHAR\nSTARTCHAR U_7F21\nENCODING 32545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4D40\n56C0\nE540\n27C0\n4100\nFFE0\n0AA0\n3FE0\nC860\nENDCHAR\nSTARTCHAR U_7F22\nENCODING 32546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n4FE0\n5280\nE440\n2820\n47C0\nF540\n0540\n3540\nCFE0\nENDCHAR\nSTARTCHAR U_7F23\nENCODING 32547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n4FE0\n52A0\nEFE0\n22A0\n4FE0\nF280\n0EC0\n3AA0\nC2A0\nENDCHAR\nSTARTCHAR U_7F24\nENCODING 32548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4820\n5780\nE400\n27E0\n4480\nF480\n0FE0\n3480\nC860\nENDCHAR\nSTARTCHAR U_7F25\nENCODING 32549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n4FE0\n5AA0\nEFE0\n2000\n47C0\nF000\n0FE0\n3540\nCB20\nENDCHAR\nSTARTCHAR U_7F26\nENCODING 32550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n4FC0\n5440\nEFE0\n2AA0\n4FE0\nF440\n0A80\n3100\nCEE0\nENDCHAR\nSTARTCHAR U_7F27\nENCODING 32551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\n4FE0\n5520\nE7E0\n2240\n4F80\nF220\n0FE0\n3540\nCB20\nENDCHAR\nSTARTCHAR U_7F28\nENCODING 32552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\n4AA0\n5AA0\nEAA0\n2540\n4A20\nFFE0\n0A80\n3180\nCE60\nENDCHAR\nSTARTCHAR U_7F29\nENCODING 32553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4A20\n55E0\nE480\n2DE0\n4520\nF5E0\n0D20\n35E0\nC520\nENDCHAR\nSTARTCHAR U_7F2A\nENCODING 32554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n4660\n5AA0\nE300\n2480\n4A60\nF500\n0240\n3080\nC700\nENDCHAR\nSTARTCHAR U_7F2B\nENCODING 32555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2280\n4D40\n57C0\nE540\n27C0\n4540\nFFE0\n0B80\n3540\nC920\nENDCHAR\nSTARTCHAR U_7F2C\nENCODING 32556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4BE0\n4880\n7FE0\n8A20\nEAA0\n5EA0\n82A0\nFEA0\n16A0\n3D40\nC220\nENDCHAR\nSTARTCHAR U_7F2D\nENCODING 32557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n4AA0\n5440\nEFE0\n2440\n47C0\nF440\n0FC0\n3540\nCB20\nENDCHAR\nSTARTCHAR U_7F2E\nENCODING 32558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\n4100\nF7C0\n2100\n4FE0\nF540\n0FE0\n3440\nC440\n07C0\nENDCHAR\nSTARTCHAR U_7F2F\nENCODING 32559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n4FE0\n5AA0\nEFE0\n2000\n47C0\nF440\n0FC0\n3440\nC7C0\nENDCHAR\nSTARTCHAR U_7F30\nENCODING 32560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2540\n4FC0\n5540\nEFE0\n2000\n47C0\nF540\n0FC0\n3540\nCFE0\nENDCHAR\nSTARTCHAR U_7F31\nENCODING 32561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n23E0\n4AA0\n57E0\nE120\n2D20\n45E0\nF500\n05E0\n3520\nCBE0\nENDCHAR\nSTARTCHAR U_7F32\nENCODING 32562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n4440\n5FE0\nEAA0\n2EE0\n4100\nFFE0\n0B80\n3540\nC920\nENDCHAR\nSTARTCHAR U_7F33\nENCODING 32563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n4FE0\n5000\nEFE0\n2440\n47C0\nF520\n0CC0\n3540\nC620\nENDCHAR\nSTARTCHAR U_7F34\nENCODING 32564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n5E80\n9280\nFFE0\n52A0\n9FA0\nE8A0\n1EA0\n2A40\nCAA0\n1720\nENDCHAR\nSTARTCHAR U_7F35\nENCODING 32565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n2FE0\n4240\n5FE0\nE540\n2FE0\n4440\nF540\n0D40\n3280\nCC60\nENDCHAR\nSTARTCHAR U_7F36\nENCODING 32566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1FC0\n2400\n4400\n0400\nFFE0\n0400\n4440\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_7F37\nENCODING 32567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7DE0\n5120\n9120\n7D20\n1120\n5520\n55A0\n5540\n7D00\n0100\nENDCHAR\nSTARTCHAR U_7F38\nENCODING 32568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n43E0\n7880\nA080\n2080\nFC80\n2080\nA880\nA880\nA880\nFBE0\nENDCHAR\nSTARTCHAR U_7F39\nENCODING 32569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FC0\n4400\nFFE0\n0400\n4440\n7FC0\n0000\n5240\n4920\n8920\nENDCHAR\nSTARTCHAR U_7F3A\nENCODING 32570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7BC0\nA140\n2140\nFFE0\n2100\nA900\nAA80\nFA40\n0420\nENDCHAR\nSTARTCHAR U_7F3B\nENCODING 32571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FE0\nA200\n23C0\n2240\nFA40\n2340\nAAC0\nAA40\nFA40\n8B60\nENDCHAR\nSTARTCHAR U_7F3C\nENCODING 32572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7A00\nA3E0\n2520\nF940\n2100\nA900\nAA80\nFA80\n0440\n0820\nENDCHAR\nSTARTCHAR U_7F3D\nENCODING 32573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4080\n7FE0\nA080\n2180\nFAC0\n24A0\nA880\nABE0\nF880\n8880\nENDCHAR\nSTARTCHAR U_7F3E\nENCODING 32574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4280\n7FE0\nA140\n2140\nFFE0\n2140\nA940\nA940\nFA40\n8C40\nENDCHAR\nSTARTCHAR U_7F3F\nENCODING 32575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n4380\n7A00\nA3E0\n2200\nFA00\n22E0\nAAA0\nAAA0\nFAE0\n8CA0\nENDCHAR\nSTARTCHAR U_7F40\nENCODING 32576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7A80\nAAA0\n26C0\nFA80\n22C0\nAEA0\nAA80\nBAA0\nE4A0\n0860\nENDCHAR\nSTARTCHAR U_7F41\nENCODING 32577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4A60\n79A0\nAFE0\nF920\n2D60\nAD60\nAFE0\nF820\n08A0\n0840\nENDCHAR\nSTARTCHAR U_7F42\nENCODING 32578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nAAA0\nAA80\n5140\n9FA0\n2200\nFFE0\n2240\n2240\n3FC0\nENDCHAR\nSTARTCHAR U_7F43\nENCODING 32579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAAA0\nB2C0\n5140\n8A20\nFFE0\nA020\n3F80\n4400\nFFE0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_7F44\nENCODING 32580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DC0\n1140\n7E20\n57C0\n7C80\n5360\n9FC0\n2400\nFFE0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_7F45\nENCODING 32581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n4100\n7FE0\nA520\n27C0\nFD20\n27E0\nAD40\nAFE0\nFC80\n8980\nENDCHAR\nSTARTCHAR U_7F46\nENCODING 32582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n7540\nAFE0\n2540\nFFC0\n2440\nA7C0\nA440\nFFC0\n8440\n0820\nENDCHAR\nSTARTCHAR U_7F47\nENCODING 32583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n77E0\nA140\n27E0\nFDA0\n2660\nAFE0\nA880\nAFE0\nFA80\n0180\nENDCHAR\nSTARTCHAR U_7F48\nENCODING 32584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4280\n7FE0\nAAA0\n2FE0\nF440\n27C0\nAC40\nAFE0\nF900\n8900\nENDCHAR\nSTARTCHAR U_7F49\nENCODING 32585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4520\n7340\nAFE0\n2820\nFB80\n2280\nAFC0\nA900\nAFE0\nF900\n0300\nENDCHAR\nSTARTCHAR U_7F4A\nENCODING 32586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\nA940\nFA60\nAFC0\nF880\nA960\nFFC0\n4400\nFFE0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_7F4B\nENCODING 32587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2480\n47E0\n7480\n2FE0\n7480\n1FE0\n2400\n7FE0\n2440\n3FC0\nENDCHAR\nSTARTCHAR U_7F4C\nENCODING 32588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4A40\n7BC0\n5540\n9FA0\n2400\nFFE0\n2440\n3FC0\nENDCHAR\nSTARTCHAR U_7F4D\nENCODING 32589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\nFFE0\nAAA0\nFBE0\nAAA0\nFFE0\n2400\nFFE0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_7F4E\nENCODING 32590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n7640\nA540\n2FE0\nF920\n2540\nAFC0\nA800\nAFE0\nFA40\n07C0\nENDCHAR\nSTARTCHAR U_7F4F\nENCODING 32591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n4100\n7FE0\nA520\n27E0\nFD40\n27C0\nAD40\nAFE0\nFAA0\n8FE0\nENDCHAR\nSTARTCHAR U_7F50\nENCODING 32592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n47E0\n7A80\nAEE0\n2AA0\nFEE0\n27E0\nAC80\nAFE0\nFC80\n87E0\nENDCHAR\nSTARTCHAR U_7F51\nENCODING 32593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n48A0\n6AA0\n5120\n4920\n56A0\n62A0\n4420\n4020\n40E0\nENDCHAR\nSTARTCHAR U_7F52\nENCODING 32594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9120\n9120\nFFE0\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_7F53\nENCODING 32595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4940\n4640\n5940\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_7F54\nENCODING 32596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5120\n4A20\n5FA0\n4420\n5FA0\n4820\n4820\n4FA0\n4020\n40E0\nENDCHAR\nSTARTCHAR U_7F55\nENCODING 32597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9120\n3080\n4040\n3F80\n0400\n0400\nFFE0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_7F56\nENCODING 32598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n5240\n5240\n7FC0\n0400\n0600\n0900\n3080\nC860\n0400\n0400\nENDCHAR\nSTARTCHAR U_7F57\nENCODING 32599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n4920\n7FE0\n0800\n0FC0\n1080\n2900\n0600\n0C00\n7000\nENDCHAR\nSTARTCHAR U_7F58\nENCODING 32600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n4920\n7FE0\n0000\n7FE0\n0400\n0C80\n3460\nC420\n0400\nENDCHAR\nSTARTCHAR U_7F59\nENCODING 32601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9120\n2080\nC440\n0400\nFFC0\n1500\n2480\nC460\n0400\n0400\nENDCHAR\nSTARTCHAR U_7F5A\nENCODING 32602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n4920\n7FE0\n1000\n0920\n7120\n1120\n1520\n1820\n10E0\nENDCHAR\nSTARTCHAR U_7F5B\nENCODING 32603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9240\n9240\nFFC0\n0080\n7F80\n4880\n4880\n4A80\n4F40\n8920\nENDCHAR\nSTARTCHAR U_7F5C\nENCODING 32604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n4920\n7FE0\n0400\n7FC0\n0400\n3F80\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_7F5D\nENCODING 32605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n4020\n1F80\n1080\n1F80\n1080\n1F80\n1080\nFFE0\nENDCHAR\nSTARTCHAR U_7F5E\nENCODING 32606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0000\n7FC0\n0880\n0500\nFFE0\n1220\n2240\nC600\nENDCHAR\nSTARTCHAR U_7F5F\nENCODING 32607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n4920\n7FE0\n0400\nFFE0\n0400\n3FC0\n2040\n3FC0\n2040\nENDCHAR\nSTARTCHAR U_7F60\nENCODING 32608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n0000\n3FC0\n2040\n3FC0\n2200\n3FE0\n2120\n38E0\nENDCHAR\nSTARTCHAR U_7F61\nENCODING 32609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n0000\n7FE0\n0200\n0200\n13C0\n1200\n1200\nFFE0\nENDCHAR\nSTARTCHAR U_7F62\nENCODING 32610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n0400\n7FC0\n0400\nFFE0\n0800\n1080\n7FC0\n2040\nENDCHAR\nSTARTCHAR U_7F63\nENCODING 32611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0400\n3F80\n0400\n7FC0\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_7F64\nENCODING 32612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4940\n7FC0\n0A00\n7FC0\n0440\n7FC0\n4400\n7FE0\n1420\nE4C0\nENDCHAR\nSTARTCHAR U_7F65\nENCODING 32613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n1080\n3FC0\n2040\n3FC0\n2040\n3FC0\n2040\n21C0\nENDCHAR\nSTARTCHAR U_7F66\nENCODING 32614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0100\n7E80\n1500\n7FC0\n0200\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_7F67\nENCODING 32615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n1080\n1080\n7FE0\n1080\n39C0\n56A0\n94A0\n1080\nENDCHAR\nSTARTCHAR U_7F68\nENCODING 32616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0800\nFFE0\n2480\n7FC0\nA4A0\n3F80\n0420\n03E0\nENDCHAR\nSTARTCHAR U_7F69\nENCODING 32617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n0400\n3FE0\n2080\n3F80\n2080\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7F6A\nENCODING 32618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n0900\n79E0\n0900\n79E0\n0900\n79E0\n0900\n0900\nENDCHAR\nSTARTCHAR U_7F6B\nENCODING 32619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9240\nFFC0\n1080\n7C80\n1080\nFEC0\n10A0\n7CA0\n1080\nFE80\nENDCHAR\nSTARTCHAR U_7F6C\nENCODING 32620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n0000\n7BC0\n5280\n2940\n7BC0\n4A40\n3180\nCA60\nENDCHAR\nSTARTCHAR U_7F6D\nENCODING 32621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0280\nFFE0\n0200\n7A40\n4A80\n7900\n02A0\nF460\nENDCHAR\nSTARTCHAR U_7F6E\nENCODING 32622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0400\nFFE0\n2080\n3F80\n2080\n3F80\n2080\nFFE0\nENDCHAR\nSTARTCHAR U_7F6F\nENCODING 32623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0400\n7FC0\n0A00\nFFE0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_7F70\nENCODING 32624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9120\nFFE0\n1000\nFD20\n0120\n7920\n0120\n7D20\n4420\n7CE0\nENDCHAR\nSTARTCHAR U_7F71\nENCODING 32625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\nFFE0\n0400\n7FC0\n4A40\n5F40\n4440\n5F40\n4440\n44C0\nENDCHAR\nSTARTCHAR U_7F72\nENCODING 32626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n0440\n3F80\n0500\nFFE0\n3080\nDF80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_7F73\nENCODING 32627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n2480\n3F80\n2480\n3F80\n0000\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_7F74\nENCODING 32628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4940\n7FC0\n0400\n7FC0\n0400\nFFE0\n1080\n3FC0\n5240\n8920\nENDCHAR\nSTARTCHAR U_7F75\nENCODING 32629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0000\n7FC0\n4400\n7F80\n4400\n7FE0\n4A20\n9540\nENDCHAR\nSTARTCHAR U_7F76\nENCODING 32630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0800\n77C0\n4A40\n7FC0\n2440\n3FC0\n2440\n3FC0\nENDCHAR\nSTARTCHAR U_7F77\nENCODING 32631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n2200\n4B80\n7E20\n49E0\n7A40\n4B80\n7A20\n59E0\nENDCHAR\nSTARTCHAR U_7F78\nENCODING 32632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n1080\nFFE0\n0480\n7A80\n0080\n7880\n4880\n7980\nENDCHAR\nSTARTCHAR U_7F79\nENCODING 32633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n2280\nA7E0\nBC80\nA7E0\n2480\n27E0\n2480\n27E0\nENDCHAR\nSTARTCHAR U_7F7A\nENCODING 32634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n2480\n3F80\n2480\n3F80\n2480\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_7F7B\nENCODING 32635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n4240\n7E40\n41E0\n5C40\n4140\n7EC0\nAA40\nC9C0\nENDCHAR\nSTARTCHAR U_7F7C\nENCODING 32636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9220\nFFE0\n2480\n3F80\n2480\nFFE0\n1500\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7F7D\nENCODING 32637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n4800\n6AA0\n54A0\n62A0\n48A0\n6AA0\n5420\nA260\nENDCHAR\nSTARTCHAR U_7F7E\nENCODING 32638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4940\n7FC0\n2080\nFFE0\n9520\nFFE0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_7F7F\nENCODING 32639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9220\nFFE0\n1100\nFFE0\n2480\n3F80\n2480\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_7F80\nENCODING 32640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4940\nFFE0\n0A00\n7BC0\n4A40\n7BC0\n0A00\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_7F81\nENCODING 32641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9240\nFFC0\n5000\nFFC0\nAA40\nFBE0\n2020\nFBA0\n2020\n20C0\nENDCHAR\nSTARTCHAR U_7F82\nENCODING 32642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4940\n7FC0\n2240\n4BE0\nF220\n4BE0\nFE20\n03E0\nAA20\nAA60\nENDCHAR\nSTARTCHAR U_7F83\nENCODING 32643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4940\nFFE0\n2080\n3F80\n2080\nFFE0\n1500\nFFE0\n2480\n2580\nENDCHAR\nSTARTCHAR U_7F84\nENCODING 32644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n2100\n51E0\nE7C0\n5440\nFFC0\n0100\n57E0\nA900\nENDCHAR\nSTARTCHAR U_7F85\nENCODING 32645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n2480\n4FE0\nF480\n27E0\n5480\nFFE0\n5480\nAFE0\nENDCHAR\nSTARTCHAR U_7F86\nENCODING 32646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n2A80\n7F20\n4BE0\n7A00\n4BC0\n7A20\n4BE0\n8520\nENDCHAR\nSTARTCHAR U_7F87\nENCODING 32647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\nD900\n57E0\nFA80\nAFE0\nFD40\n2740\nF840\n20C0\nENDCHAR\nSTARTCHAR U_7F88\nENCODING 32648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9240\nFFE0\n5280\nFBE0\nAA80\nFBE0\n2280\nFBE0\n22A0\n2540\nENDCHAR\nSTARTCHAR U_7F89\nENCODING 32649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4940\n7FC0\n2440\n4EA0\nA1E0\nCE80\n50A0\nFFE0\n5B40\nAEA0\nENDCHAR\nSTARTCHAR U_7F8A\nENCODING 32650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1100\n7FC0\n0400\n0400\n3F80\n0400\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7F8B\nENCODING 32651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\nF5E0\n1500\n0000\n0400\n7FC0\n0400\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7F8C\nENCODING 32652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n0A00\n7FC0\n0400\n3F80\n0400\nFFE0\n0A00\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_7F8D\nENCODING 32653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n3180\nCA60\n3F80\n0400\n3F80\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_7F8E\nENCODING 32654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n0400\n3F80\n0400\nFFE0\n0400\n7FC0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7F8F\nENCODING 32655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2840\n7C80\n1120\n7C40\n1080\n1120\nFC20\n1040\n2080\n4300\nENDCHAR\nSTARTCHAR U_7F90\nENCODING 32656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nF1E0\n1500\n7F80\n0400\nFFE0\n1000\n1F80\n6200\n0D00\nF0E0\nENDCHAR\nSTARTCHAR U_7F91\nENCODING 32657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0400\n7FC0\n0400\nFFE0\n0800\n1F00\n6200\n0D00\nF0E0\nENDCHAR\nSTARTCHAR U_7F92\nENCODING 32658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A80\n5280\nFA40\n2420\n2020\nFBC0\n2140\nF940\n2240\n4440\n9880\nENDCHAR\nSTARTCHAR U_7F93\nENCODING 32659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8800\n57C0\nFD40\n2540\n7D40\n27C0\nFC00\n2420\n2420\n43E0\n8000\nENDCHAR\nSTARTCHAR U_7F94\nENCODING 32660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n0A00\nFFE0\n0400\n7FC0\n0400\n0400\nFFE0\n5240\n8920\n8920\nENDCHAR\nSTARTCHAR U_7F95\nENCODING 32661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0400\n7FC0\n0400\nFFE0\n0440\nFC80\n1700\n2480\nCC60\nENDCHAR\nSTARTCHAR U_7F96\nENCODING 32662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8BC0\n5240\nFA40\n2460\n2000\nFFC0\n2240\nFA80\n2100\n4280\n8C60\nENDCHAR\nSTARTCHAR U_7F97\nENCODING 32663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n0A00\n7FC0\n0400\n3F80\n0400\nFFE0\n0D40\n15E0\n2420\nC3E0\nENDCHAR\nSTARTCHAR U_7F98\nENCODING 32664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n7280\n5FE0\n7100\n5FC0\n7100\n5100\n5FE0\n5100\n5100\nB100\nENDCHAR\nSTARTCHAR U_7F99\nENCODING 32665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0400\n7FC0\n0400\nFFE0\n0400\n2440\n4A80\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7F9A\nENCODING 32666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5100\nFA80\n2440\n2120\nF880\n27E0\nF840\n2380\n4080\n8040\nENDCHAR\nSTARTCHAR U_7F9B\nENCODING 32667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n0A00\nFFC0\n0400\nFFE0\n0940\nFFC0\n4900\n7FC0\n1140\nE1C0\nENDCHAR\nSTARTCHAR U_7F9C\nENCODING 32668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n57E0\nFC20\n2000\n27E0\nF880\n2080\nF880\n2080\n4280\n8100\nENDCHAR\nSTARTCHAR U_7F9D\nENCODING 32669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8860\n5780\nFC80\n2480\n27E0\nFC80\n2480\nFCA0\n2560\n46A0\n84A0\nENDCHAR\nSTARTCHAR U_7F9E\nENCODING 32670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n0A00\nFFE0\n0400\n7FC0\n0400\nFFE0\n2480\n5F80\n8480\n7FE0\nENDCHAR\nSTARTCHAR U_7F9F\nENCODING 32671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8BE0\n5040\nF840\n2080\n7140\n2620\nFBE0\n2080\n2080\n4080\n87E0\nENDCHAR\nSTARTCHAR U_7FA0\nENCODING 32672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n57E0\nF900\n27C0\n7140\n27C0\nFD00\n27E0\n2160\n4280\n8C60\nENDCHAR\nSTARTCHAR U_7FA1\nENCODING 32673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0400\n7FC0\n0400\nFFE0\n4800\n2FE0\n3240\nC580\n5860\nENDCHAR\nSTARTCHAR U_7FA2\nENCODING 32674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n88C0\n50A0\nFFE0\n2280\n72A0\n27A0\nFAA0\n22C0\n22A0\n4560\n8A20\nENDCHAR\nSTARTCHAR U_7FA3\nENCODING 32675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n1080\nFFE0\n1F80\n3080\n5F80\n0A00\n3FC0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_7FA4\nENCODING 32676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A20\n2940\nFFE0\n2880\n7BE0\n2080\n7880\nAFE0\n2880\n2880\n3880\nENDCHAR\nSTARTCHAR U_7FA5\nENCODING 32677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5000\nFAA0\n2540\n7540\n22A0\nF800\n23E0\n2080\n4080\n8FE0\nENDCHAR\nSTARTCHAR U_7FA6\nENCODING 32678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5080\nFFE0\n2420\n73C0\n2000\nFFE0\n2280\n22A0\n44A0\n9860\nENDCHAR\nSTARTCHAR U_7FA7\nENCODING 32679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5240\nFFE0\n2240\n7520\n23C0\nFA40\n2640\n2980\n4240\n8C20\nENDCHAR\nSTARTCHAR U_7FA8\nENCODING 32680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0400\n7FC0\n0400\nFFE0\n4400\nB7E0\n2940\nC280\n5C60\nENDCHAR\nSTARTCHAR U_7FA9\nENCODING 32681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n0400\n3F80\n0400\nFFE0\n1240\nFFE0\n3940\nD1A0\n3660\nENDCHAR\nSTARTCHAR U_7FAA\nENCODING 32682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n57C0\nFC40\n27C0\n2440\n7FC0\n2520\nFD40\n2480\n4540\n8620\nENDCHAR\nSTARTCHAR U_7FAB\nENCODING 32683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5080\nFFE0\n2420\n7240\n2420\nFFC0\n2100\n2100\n4100\n8FE0\nENDCHAR\nSTARTCHAR U_7FAC\nENCODING 32684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n88C0\n50A0\nFFE0\n2480\n77A0\n24A0\nFFA0\n2540\n2760\n48A0\n9320\nENDCHAR\nSTARTCHAR U_7FAD\nENCODING 32685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8B80\n5440\nFBA0\n2000\n7E20\n2AA0\nFEA0\n2AA0\n2EA0\n4A20\n8AE0\nENDCHAR\nSTARTCHAR U_7FAE\nENCODING 32686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0400\nFFE0\n2940\n44A0\nFFE0\n0400\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7FAF\nENCODING 32687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8BC0\n5240\nFBC0\n2240\n73C0\n2200\nFFE0\n24A0\n2560\n47A0\n80C0\nENDCHAR\nSTARTCHAR U_7FB0\nENCODING 32688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n54A0\nFFE0\n2100\n77E0\n2280\nFAA0\n25C0\n2480\n4940\n9220\nENDCHAR\nSTARTCHAR U_7FB1\nENCODING 32689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5480\nFDE0\n2520\n75E0\n2520\nFDE0\n2480\n25C0\n4AA0\n95A0\nENDCHAR\nSTARTCHAR U_7FB2\nENCODING 32690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FE0\n0400\n3F80\n0400\nFFE0\n1140\nFFE0\n3940\n4CA0\n3560\nENDCHAR\nSTARTCHAR U_7FB3\nENCODING 32691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n88C0\n5720\nFD40\n27E0\n7340\n2520\nFFC0\n2540\n27C0\n4540\n87C0\nENDCHAR\nSTARTCHAR U_7FB4\nENCODING 32692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n3F80\n0400\n7FE0\n2A40\nFFE0\n1080\n7BC0\n1080\nFFE0\n1080\nENDCHAR\nSTARTCHAR U_7FB5\nENCODING 32693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n57E0\nF540\n2FE0\n7440\n27C0\nFC40\n27C0\n2440\n47C0\n8C60\nENDCHAR\nSTARTCHAR U_7FB6\nENCODING 32694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n57E0\nFDA0\n2420\n77E0\n2000\nFBC0\n2240\n23C0\n4240\n8FE0\nENDCHAR\nSTARTCHAR U_7FB7\nENCODING 32695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5280\nFC40\n2BA0\n7000\n2EE0\nFAA0\n2EE0\n2480\n4D40\n9220\nENDCHAR\nSTARTCHAR U_7FB8\nENCODING 32696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2000\n3F80\n70C0\n5F40\n7540\n5FC0\n7540\n9F40\n9560\nENDCHAR\nSTARTCHAR U_7FB9\nENCODING 32697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n0900\n7FC0\n0400\nFFE0\n4940\nFFE0\n0400\nFFE0\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_7FBA\nENCODING 32698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5100\nFFE0\n2920\n7A80\n2FE0\nF100\n2FE0\n2AA0\n4AA0\n8860\nENDCHAR\nSTARTCHAR U_7FBB\nENCODING 32699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n57E0\nFD40\n27E0\n74A0\n2740\nFD20\n25E0\n2B40\n5480\nA760\nENDCHAR\nSTARTCHAR U_7FBC\nENCODING 32700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4020\n7FE0\n4480\n5FC0\n4200\n7FE0\n6540\n5080\nBFE0\n9080\nENDCHAR\nSTARTCHAR U_7FBD\nENCODING 32701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n0820\n4920\n28A0\n0860\n18A0\n2920\n4A20\n8820\n28A0\n1040\nENDCHAR\nSTARTCHAR U_7FBE\nENCODING 32702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC00\n27E0\nB480\n6C80\n2480\n6C80\nB480\nA480\n2480\n2480\n6FE0\nENDCHAR\nSTARTCHAR U_7FBF\nENCODING 32703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n4A40\n2940\n18C0\n2940\n4A40\n1100\nFFE0\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_7FC0\nENCODING 32704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n2480\nA7E0\n76A0\n2EA0\n26A0\n6FE0\nB6A0\n2480\n2480\n6C80\nENDCHAR\nSTARTCHAR U_7FC1\nENCODING 32705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2500\n4A80\nBF60\n0000\nFBC0\n4A40\n2940\n18C0\nEB40\n5AC0\nENDCHAR\nSTARTCHAR U_7FC2\nENCODING 32706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC40\n2540\n2540\nB620\n6C00\n27E0\n6D20\nB520\n2520\n2620\n6CC0\nENDCHAR\nSTARTCHAR U_7FC3\nENCODING 32707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\nFDA0\n2360\n2920\n4B60\n55A0\n9120\nA120\n2920\n7B60\nENDCHAR\nSTARTCHAR U_7FC4\nENCODING 32708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFFE0\n2480\nB480\n6FE0\n2620\n6D40\nB480\n2540\nB520\n4A20\nENDCHAR\nSTARTCHAR U_7FC5\nENCODING 32709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF920\n25A0\nF360\n9360\n55A0\n5120\n2360\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_7FC6\nENCODING 32710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n4A40\n2940\n4A40\n8C40\n7F00\n1120\n25E0\n4400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_7FC7\nENCODING 32711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n4A40\n2940\n39C0\nCA40\n0900\nFFE0\n1080\n2900\n4600\nB9E0\nENDCHAR\nSTARTCHAR U_7FC8\nENCODING 32712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA920\nADA0\nFB60\nA920\nAB60\nFDA0\n2120\n2120\n25A0\n2240\nENDCHAR\nSTARTCHAR U_7FC9\nENCODING 32713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\nFDA0\n2360\n3120\n6920\nA360\n25A0\nF920\n2120\n2360\nENDCHAR\nSTARTCHAR U_7FCA\nENCODING 32714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2120\nFDA0\n0360\n9120\n5320\n5560\n21A0\n3920\nE120\n0360\nENDCHAR\nSTARTCHAR U_7FCB\nENCODING 32715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n2480\nB7E0\n6C00\n2440\n6E40\nB540\n2540\n2540\n2480\n6FE0\nENDCHAR\nSTARTCHAR U_7FCC\nENCODING 32716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n2940\n18C0\n2940\n4A40\n0400\n7FE0\n1100\n0900\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_7FCD\nENCODING 32717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC40\n25E0\nB560\n6D40\n25E0\n6D20\nB5A0\n25A0\n2640\n24A0\n6D20\nENDCHAR\nSTARTCHAR U_7FCE\nENCODING 32718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1760\n2920\n45A0\nA360\n1120\n7B20\n0D60\n51A0\n2120\n1120\n1360\nENDCHAR\nSTARTCHAR U_7FCF\nENCODING 32719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n4A40\n2940\n18C0\nEF40\n1100\nECE0\n0200\n1C80\n0100\nFE00\nENDCHAR\nSTARTCHAR U_7FD0\nENCODING 32720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n2680\nB7E0\n6E80\n2480\n27E0\n6C80\nB480\n2480\n2540\n6E20\nENDCHAR\nSTARTCHAR U_7FD1\nENCODING 32721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n25E0\nB620\n6C20\n27A0\n26A0\n6FA0\nB6A0\n2420\n24A0\n6C40\nENDCHAR\nSTARTCHAR U_7FD2\nENCODING 32722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\n5960\n28A0\nCD20\n0800\n3FC0\n2040\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_7FD3\nENCODING 32723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF920\n25A0\n7360\n0120\nF360\n95A0\n9120\nF5A0\n9240\nENDCHAR\nSTARTCHAR U_7FD4\nENCODING 32724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5120\nF920\n25A0\n7360\n2120\nFB60\n25A0\n2120\n4120\n8360\nENDCHAR\nSTARTCHAR U_7FD5\nENCODING 32725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n3180\nDF60\n0000\n3F80\n2080\nFFE0\n4920\n38E0\nCB20\n1860\nENDCHAR\nSTARTCHAR U_7FD6\nENCODING 32726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n5120\n8DA0\n7360\n0120\n7360\n55A0\n5120\n75A0\n5240\nENDCHAR\nSTARTCHAR U_7FD7\nENCODING 32727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3920\n4DA0\nAB60\n1120\n6120\n3B60\n4DA0\nA920\n1120\nE360\nENDCHAR\nSTARTCHAR U_7FD8\nENCODING 32728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF120\n55A0\n2B60\nD920\n0360\nFDA0\n5120\n5660\n5020\n8FE0\nENDCHAR\nSTARTCHAR U_7FD9\nENCODING 32729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nAFE0\nA920\nFDA0\n2360\n7920\n4B60\nADA0\n1120\n25A0\nC240\nENDCHAR\nSTARTCHAR U_7FDA\nENCODING 32730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n2940\n4A40\nFFE0\n8820\n7FC0\n1200\n3FC0\n0200\nFFE0\n0200\nENDCHAR\nSTARTCHAR U_7FDB\nENCODING 32731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n5540\n5080\nD760\n5000\n5FE0\n55A0\n5360\n4DA0\n4360\nENDCHAR\nSTARTCHAR U_7FDC\nENCODING 32732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n4920\n38E0\nCB20\n0400\nFFE0\n2480\n5B40\n8A20\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_7FDD\nENCODING 32733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF920\nA920\n25A0\nFB60\n2120\n5360\n55A0\nA920\n79A0\n0360\nENDCHAR\nSTARTCHAR U_7FDE\nENCODING 32734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n27E0\nB400\n6DE0\n2520\n25E0\n6C80\nB5C0\n26A0\n24A0\n6D80\nENDCHAR\nSTARTCHAR U_7FDF\nENCODING 32735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2940\n18C0\nEB40\n1400\n1200\n3FE0\n6200\nBFC0\n2200\n3FE0\nENDCHAR\nSTARTCHAR U_7FE0\nENCODING 32736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n2940\n18C0\n6B40\n0840\n7FC0\n1100\n2A80\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7FE1\nENCODING 32737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFBE0\n0A00\n7BC0\n0A00\nFBE0\n0A00\nFBE0\n4920\n38E0\nCB20\nENDCHAR\nSTARTCHAR U_7FE2\nENCODING 32738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA920\nFDA0\nAB60\nF920\n8920\nBB60\nADA0\nB920\n8920\n9B60\nENDCHAR\nSTARTCHAR U_7FE3\nENCODING 32739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n4920\n38E0\n4920\n7FC0\n0900\nFFE0\n0400\nFFE0\n0900\nF6E0\nENDCHAR\nSTARTCHAR U_7FE4\nENCODING 32740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9120\n95A0\nF360\n0120\nFB60\nADA0\nF920\nA920\nADA0\n9A40\nENDCHAR\nSTARTCHAR U_7FE5\nENCODING 32741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n3F80\n0500\nFFE0\n1480\n1280\nFFC0\n2940\n18C0\n6B40\n18C0\nENDCHAR\nSTARTCHAR U_7FE6\nENCODING 32742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n4840\n7940\n4940\n7940\n4840\nFFE0\n4A20\n29A0\nDA60\nENDCHAR\nSTARTCHAR U_7FE7\nENCODING 32743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n8920\n75A0\n0360\n7120\n5360\n55A0\n7120\n05A0\nFA40\nENDCHAR\nSTARTCHAR U_7FE8\nENCODING 32744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n4920\n38E0\nCB20\n3F80\n2080\nFFE0\n2400\n27C0\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_7FE9\nENCODING 32745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n8920\nFDA0\n8360\nF920\nAB60\nFDA0\nA920\nA920\n8B60\nENDCHAR\nSTARTCHAR U_7FEA\nENCODING 32746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF60\n26A0\nB760\n6FE0\n2540\n2620\n6DC0\nB740\n2480\n2540\n6E20\nENDCHAR\nSTARTCHAR U_7FEB\nENCODING 32747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n2400\nB400\n6FE0\nB540\n1540\n7D40\n4540\n7D40\n4540\n7E60\nENDCHAR\nSTARTCHAR U_7FEC\nENCODING 32748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n4A40\n39C0\n4A40\nFFE0\nA4A0\n3F80\n2480\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_7FED\nENCODING 32749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFCC0\n2540\nB640\n6FE0\n2500\n25E0\n6D40\nB5E0\n2540\n25A0\n6D20\nENDCHAR\nSTARTCHAR U_7FEE\nENCODING 32750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4920\n7DA0\n0360\nFD20\nD760\nFDA0\nA520\nFD20\nA520\n8F60\nENDCHAR\nSTARTCHAR U_7FEF\nENCODING 32751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4920\n38E0\n4920\nFFE0\n1080\n1F80\n0000\n7FE0\n5120\n5F60\nENDCHAR\nSTARTCHAR U_7FF0\nENCODING 32752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\nFA40\n2420\nF000\n97E0\nF920\n95A0\nF360\n25A0\nF920\n2360\nENDCHAR\nSTARTCHAR U_7FF1\nENCODING 32753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF920\n8DA0\nFB60\n8920\nF920\n2360\nFDA0\nA920\nF520\n2260\nENDCHAR\nSTARTCHAR U_7FF2\nENCODING 32754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2920\nFDA0\nAB60\nFD20\n0120\n7B60\n05A0\nFD20\n5520\nB360\nENDCHAR\nSTARTCHAR U_7FF3\nENCODING 32755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9240\nFC60\n93C0\nA980\nC660\nFBC0\n4A40\n39C0\nCA40\n18C0\nENDCHAR\nSTARTCHAR U_7FF4\nENCODING 32756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2C80\nABE0\n7AA0\n2FE0\n2AA0\n7BE0\nAA80\n2BE0\n2A80\n7DE0\nENDCHAR\nSTARTCHAR U_7FF5\nENCODING 32757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n2BC0\nAA40\n7BC0\n2A40\n2BE0\n7A00\nABE0\n2820\n2AA0\n7D60\nENDCHAR\nSTARTCHAR U_7FF6\nENCODING 32758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\nFFE0\n8920\nFDA0\n8B60\nF920\nAB60\n75A0\nA920\nFDA0\n2240\nENDCHAR\nSTARTCHAR U_7FF7\nENCODING 32759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n93E0\n54A0\nFEA0\n55E0\n90A0\n48A0\n7DE0\nAAA0\n7EA0\n48A0\n89E0\nENDCHAR\nSTARTCHAR U_7FF8\nENCODING 32760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF920\n6DA0\nFB60\n4920\n7920\n4B60\n7DA0\n4920\n7920\nCF60\nENDCHAR\nSTARTCHAR U_7FF9\nENCODING 32761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF8A0\n22E0\nF9A0\n48A0\nFDE0\n4AA0\nFCA0\n29E0\n4820\n87E0\nENDCHAR\nSTARTCHAR U_7FFA\nENCODING 32762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\nFFE0\nA920\nDDA0\nAB60\nF920\nAB60\n75A0\nA920\nF9E0\n2340\nENDCHAR\nSTARTCHAR U_7FFB\nENCODING 32763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\nE7E0\nA920\nFDA0\n7360\nA920\nFB60\nADA0\nF920\nA920\nFB60\nENDCHAR\nSTARTCHAR U_7FFC\nENCODING 32764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n4920\n38E0\n4920\n7FC0\n2480\n7FC0\n0900\nFFE0\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_7FFD\nENCODING 32765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n5120\nFDA0\n0B60\nFD20\n8920\nFB60\nADA0\nE920\nB520\nC260\nENDCHAR\nSTARTCHAR U_7FFE\nENCODING 32766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA920\nFDA0\n0360\nFD20\n4920\n7B60\n25A0\nD920\n5920\n6760\nENDCHAR\nSTARTCHAR U_7FFF\nENCODING 32767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n10A0\nFEE0\n11A0\n7CA0\n04A0\nFDE0\nA6A0\nBCA0\nE4A0\n0DE0\nENDCHAR\nSTARTCHAR U_8000\nENCODING 32768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\nADA0\n7360\n27E0\nFC80\n57E0\n5480\n57E0\n9C80\n97E0\nENDCHAR\nSTARTCHAR U_8001\nENCODING 32769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0440\n3F80\n0500\nFFE0\n0800\n1980\n2E00\nC840\n0840\n07C0\nENDCHAR\nSTARTCHAR U_8002\nENCODING 32770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\n7F40\n0840\n0880\nFFE0\n0200\n0400\n0800\n3000\nC000\nENDCHAR\nSTARTCHAR U_8003\nENCODING 32771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0840\n7F80\n0900\nFFE0\n0400\n0FC0\n3400\nCF80\n0080\n0080\n0700\nENDCHAR\nSTARTCHAR U_8004\nENCODING 32772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n7F00\n0A00\nFFC0\n2820\nC7E0\n0300\n7C00\n07C0\nFC20\n03E0\nENDCHAR\nSTARTCHAR U_8005\nENCODING 32773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F40\n0480\n0500\nFFE0\n0800\n3F80\nD080\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_8006\nENCODING 32774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n7E80\n0500\nFFC0\n1200\nF420\n1FE0\n1040\n1FC0\n1040\n1FC0\nENDCHAR\nSTARTCHAR U_8007\nENCODING 32775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0840\n7F80\n0900\nFFE0\n0800\n1FC0\n2040\n5E40\n1240\n1E40\n0180\nENDCHAR\nSTARTCHAR U_8008\nENCODING 32776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F40\n0480\n7FE0\n0840\n37C0\nC800\n1FC0\n6940\n0F40\n00C0\nENDCHAR\nSTARTCHAR U_8009\nENCODING 32777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7F40\n0480\nFFE0\n0800\n3FC0\nC800\n1FC0\n1240\n1240\n1EC0\nENDCHAR\nSTARTCHAR U_800A\nENCODING 32778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F40\n0480\nFFE0\n0600\n3900\nDF80\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_800B\nENCODING 32779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0840\n7F80\n0A00\nFFE0\n3200\n5420\nFFE0\n1100\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_800C\nENCODING 32780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n0800\n7FE0\n4920\n4920\n4920\n4920\n4920\n4920\n40E0\nENDCHAR\nSTARTCHAR U_800D\nENCODING 32781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n7FC0\n4A40\n4A40\n08C0\nFFE0\n1100\n1A00\n0700\n78E0\nENDCHAR\nSTARTCHAR U_800E\nENCODING 32782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n7FC0\n4A40\n4A40\n44C0\n0400\n7FE0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_800F\nENCODING 32783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE40\n1080\n2100\nFE20\nAA40\nAA80\nAB20\nAA20\nAA40\nAA80\n8700\nENDCHAR\nSTARTCHAR U_8010\nENCODING 32784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE40\n1040\n21E0\nFE40\nAA40\nAB40\nAAC0\nAA40\nAA40\nA240\n86C0\nENDCHAR\nSTARTCHAR U_8011\nENCODING 32785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0000\nFFE0\n0400\n7FC0\n4A40\n4A40\n4A40\n40C0\nENDCHAR\nSTARTCHAR U_8012\nENCODING 32786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n0400\nFFE0\n0E00\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_8013\nENCODING 32787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n2080\n7080\n2080\nF880\n2080\n7080\nA880\n2080\n2180\nENDCHAR\nSTARTCHAR U_8014\nENCODING 32788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n2040\nF880\n2080\nFBE0\n2080\n7080\nA880\n2080\n2180\nENDCHAR\nSTARTCHAR U_8015\nENCODING 32789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFA40\n27E0\nFA40\n2240\nFFE0\n2240\n3240\n6A40\nA440\n2840\nENDCHAR\nSTARTCHAR U_8016\nENCODING 32790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF8C0\n22A0\nFAA0\n2480\nFCA0\n20A0\n7040\nA880\nA100\n2E00\nENDCHAR\nSTARTCHAR U_8017\nENCODING 32791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nFF00\n2100\nF9C0\n2700\nF960\n2780\n7100\nA920\n2120\n20E0\nENDCHAR\nSTARTCHAR U_8018\nENCODING 32792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nF800\n2000\nF800\n27E0\nF900\n2100\n7200\nAA40\nA460\n27A0\nENDCHAR\nSTARTCHAR U_8019\nENCODING 32793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n22A0\nFAA0\n22A0\nFBE0\n2200\n7200\nAA20\nA220\n21E0\nENDCHAR\nSTARTCHAR U_801A\nENCODING 32794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n27E0\nFCA0\n2480\nFFE0\n2520\n7540\nAC80\n2540\n2A20\nENDCHAR\nSTARTCHAR U_801B\nENCODING 32795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n2240\nFA60\n27A0\nF800\n23E0\n7220\nAA20\nABE0\n2220\nENDCHAR\nSTARTCHAR U_801C\nENCODING 32796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n2240\nFBC0\n2240\nFA00\n23E0\n7220\nAA20\nABE0\n2220\nENDCHAR\nSTARTCHAR U_801D\nENCODING 32797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBC0\n2240\n7240\n23C0\nFA40\n3240\n6BC0\nA640\n2240\n27E0\nENDCHAR\nSTARTCHAR U_801E\nENCODING 32798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\nFEE0\n2AA0\nFAA0\n2AA0\nFAA0\n2AA0\n7AA0\nAAA0\nAAE0\n34A0\nENDCHAR\nSTARTCHAR U_801F\nENCODING 32799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA00\n2200\nFBE0\n2220\nFA20\n23E0\n7220\nAA00\nAA00\n23E0\nENDCHAR\nSTARTCHAR U_8020\nENCODING 32800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF980\n2240\nFC20\n25C0\nF800\n23E0\n7220\nAA20\nABE0\n2220\nENDCHAR\nSTARTCHAR U_8021\nENCODING 32801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E80\nFA80\n4BE0\nFEA0\n4AA0\nFAA0\n4EA0\n6AA0\nDAA0\n5F20\n4260\nENDCHAR\nSTARTCHAR U_8022\nENCODING 32802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nF7E0\n2140\nFFE0\n2420\nF900\n27E0\n7120\nA920\nAA20\n24C0\nENDCHAR\nSTARTCHAR U_8023\nENCODING 32803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFA80\n2440\n7BA0\n2000\nFFE0\n2AA0\n7FE0\nAAA0\n2AA0\n2840\nENDCHAR\nSTARTCHAR U_8024\nENCODING 32804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFFE0\n2240\nFFE0\n2000\nFBC0\n2240\n73C0\nAA40\nABC0\n2240\nENDCHAR\nSTARTCHAR U_8025\nENCODING 32805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\nF520\n2340\nFFE0\n2820\nFBA0\n2AA0\n7BA0\nAAA0\n2820\n2860\nENDCHAR\nSTARTCHAR U_8026\nENCODING 32806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFD40\n27C0\nFD40\n27C0\nF900\n27E0\n7560\nAFA0\nA420\n2460\nENDCHAR\nSTARTCHAR U_8027\nENCODING 32807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\nFB40\n27E0\nFB80\n2540\nF920\n2100\n77E0\nAA40\n2180\n2660\nENDCHAR\nSTARTCHAR U_8028\nENCODING 32808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF800\n4BC0\nF800\n4FE0\nFAA0\n4B40\n6840\nDFE0\n5440\n62C0\nENDCHAR\nSTARTCHAR U_8029\nENCODING 32809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFFE0\n2240\nFFE0\n2240\nFFE0\n2540\n77C0\nAD40\nAFE0\n24C0\nENDCHAR\nSTARTCHAR U_802A\nENCODING 32810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2280\nFFE0\n2520\nFFE0\n2200\n73C0\nAA40\nA440\n2880\nENDCHAR\nSTARTCHAR U_802B\nENCODING 32811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2100\n77C0\n2100\nFFE0\n3440\n6FC0\nA440\n27C0\n2820\nENDCHAR\nSTARTCHAR U_802C\nENCODING 32812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n2540\nFFE0\n2540\nFFE0\n2520\n77E0\nAA40\nA180\n2E60\nENDCHAR\nSTARTCHAR U_802D\nENCODING 32813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2340\nFD40\n27A0\n7340\n25A0\nFFE0\n34A0\n6EC0\nA4A0\n2960\n3220\nENDCHAR\nSTARTCHAR U_802E\nENCODING 32814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFFE0\n2240\n75A0\n2FE0\nF820\n2100\n77E0\nA920\n2220\n2460\nENDCHAR\nSTARTCHAR U_802F\nENCODING 32815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\nFFE0\n2280\n77E0\n2480\nFFC0\n3480\n6FE0\nA480\n2300\n2CE0\nENDCHAR\nSTARTCHAR U_8030\nENCODING 32816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nFA40\n23C0\n7240\n2FE0\nFAA0\n23C0\n7660\nA980\nAA40\n2420\nENDCHAR\nSTARTCHAR U_8031\nENCODING 32817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2A40\nFFE0\n2A40\nFF60\n2AC0\n7A40\nAFE0\nAA20\n33E0\nENDCHAR\nSTARTCHAR U_8032\nENCODING 32818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2540\n77C0\n2540\nFB80\n3540\n6A20\nA540\n2C80\n3660\nENDCHAR\nSTARTCHAR U_8033\nENCODING 32819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n1080\n1080\n1F80\n1080\n1F80\n1080\n10E0\n7F80\n0080\n0080\nENDCHAR\nSTARTCHAR U_8034\nENCODING 32820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n4900\n4900\n7900\n4900\n7900\n4900\n4D00\nF920\n0920\n08E0\nENDCHAR\nSTARTCHAR U_8035\nENCODING 32821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC00\n4BE0\n4880\n7880\n4880\n7880\n4880\n4C80\nF880\n0A80\n0900\nENDCHAR\nSTARTCHAR U_8036\nENCODING 32822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n4920\n4920\n7940\n4940\n7920\n4920\n4D20\nF9A0\n0940\n0900\nENDCHAR\nSTARTCHAR U_8037\nENCODING 32823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2080\nFFE0\n2100\n3F00\n2100\n3F00\n21E0\nFF00\n0100\nENDCHAR\nSTARTCHAR U_8038\nENCODING 32824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2A80\n4440\nFFE0\n2100\n3F00\n2100\n3F00\n2100\nFFE0\n0100\nENDCHAR\nSTARTCHAR U_8039\nENCODING 32825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n4980\n4A40\n7D20\n4880\n7800\n4FE0\n4840\nFC80\n0880\n0900\nENDCHAR\nSTARTCHAR U_803A\nENCODING 32826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFBC0\n5000\n7000\n57E0\n7100\n5100\n5A40\n77E0\nD240\n1000\nENDCHAR\nSTARTCHAR U_803B\nENCODING 32827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n4880\n4880\n7A80\n4AE0\n7A80\n4A80\n4E80\nFA80\n0A80\n0FE0\nENDCHAR\nSTARTCHAR U_803C\nENCODING 32828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n5240\n5240\n77E0\n5240\n7240\n57E0\n5A40\nF240\n1240\n12C0\nENDCHAR\nSTARTCHAR U_803D\nENCODING 32829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n5100\n57E0\n7520\n5100\n7280\n5280\n5280\nFAA0\n14A0\n1860\nENDCHAR\nSTARTCHAR U_803E\nENCODING 32830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n4900\n4FE0\n7900\n4940\n7940\n4A40\n4A80\nFCA0\n0920\n09E0\nENDCHAR\nSTARTCHAR U_803F\nENCODING 32831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n4880\n4880\n7AA0\n4AC0\n7C80\n4880\n4880\nFD40\n0A20\n0C20\nENDCHAR\nSTARTCHAR U_8040\nENCODING 32832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFD40\n5120\n77E0\n5100\n7140\n5140\n5880\n70A0\nD160\n1220\nENDCHAR\nSTARTCHAR U_8041\nENCODING 32833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFA80\n5280\n7440\n5820\n77C0\n5240\n5A40\n7240\nD540\n1880\nENDCHAR\nSTARTCHAR U_8042\nENCODING 32834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2100\n3F00\n2100\nFFE0\n0100\nFFC0\n4A40\n3180\n4A40\n8420\nENDCHAR\nSTARTCHAR U_8043\nENCODING 32835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n5100\n57C0\n7540\n57C0\n7540\n5540\n5FE0\nF440\n1440\n14C0\nENDCHAR\nSTARTCHAR U_8044\nENCODING 32836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n5280\n7C60\n5100\n7640\n5080\n5920\n7640\nD080\n1700\nENDCHAR\nSTARTCHAR U_8045\nENCODING 32837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFA00\n57C0\n7500\n5900\n77E0\n5100\n5A80\n7280\nD440\n1820\nENDCHAR\nSTARTCHAR U_8046\nENCODING 32838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n4980\n4A40\n7D20\n4880\n7800\n4FE0\n4840\nF980\n0880\n0840\nENDCHAR\nSTARTCHAR U_8047\nENCODING 32839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4880\n4880\n7880\n4A80\n7AE0\n4A80\n4E80\nFA80\n0A80\n0FE0\nENDCHAR\nSTARTCHAR U_8048\nENCODING 32840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n5480\n5880\n7BE0\n5EA0\n74A0\n54A0\n5AA0\nFEA0\n11A0\n1240\nENDCHAR\nSTARTCHAR U_8049\nENCODING 32841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFC80\n52A0\n72A0\n52A0\n73E0\n5080\n5AA0\n72A0\nD2A0\n13E0\nENDCHAR\nSTARTCHAR U_804A\nENCODING 32842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\nACE0\nAAA0\nEAA0\nAAA0\nEAA0\nAAA0\nAEA0\nF2E0\n2480\n2880\nENDCHAR\nSTARTCHAR U_804B\nENCODING 32843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n1480\n2520\nDFE0\n0000\nFFE0\n2100\n3F00\n2100\nFFE0\nENDCHAR\nSTARTCHAR U_804C\nENCODING 32844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4A20\n4A20\n7A20\n4A20\n7BE0\n4800\n4D40\nF940\n0A20\n0C20\nENDCHAR\nSTARTCHAR U_804D\nENCODING 32845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n4BE0\n4A20\n7800\n4FE0\n7880\n4880\n4C80\nF880\n0A80\n0900\nENDCHAR\nSTARTCHAR U_804E\nENCODING 32846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFA80\n52A0\n76C0\n5280\n72C0\n56A0\n5A80\n72A0\nD2A0\n1460\nENDCHAR\nSTARTCHAR U_804F\nENCODING 32847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA100\nA200\nEFE0\nAAA0\nEAA0\nAAA0\nAAA0\nFAA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_8050\nENCODING 32848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n4880\n4FE0\n7880\n4BE0\n7800\n4BE0\n5E20\nEA20\n0BE0\n0A20\nENDCHAR\nSTARTCHAR U_8051\nENCODING 32849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4A40\n4A40\n7BC0\n4A40\n7BC0\n4A40\n4E60\nFBC0\n0840\n0840\nENDCHAR\nSTARTCHAR U_8052\nENCODING 32850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF860\n5380\n5080\n77E0\n5080\n7080\n53E0\n5220\nFA20\n13E0\n1220\nENDCHAR\nSTARTCHAR U_8053\nENCODING 32851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFB80\n22A0\n3BA0\nE2E0\n0400\n7FC0\n1100\n1F00\n11E0\nFF00\n0100\nENDCHAR\nSTARTCHAR U_8054\nENCODING 32852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC40\n5280\n57E0\n7100\n5100\n7FE0\n5100\n5100\nFA80\n1440\n1820\nENDCHAR\nSTARTCHAR U_8055\nENCODING 32853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFA80\n53E0\n7480\n57E0\n7000\n53E0\n5A20\n7220\nD3E0\n1220\nENDCHAR\nSTARTCHAR U_8056\nENCODING 32854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC00\n49E0\n7920\n4920\nFDE0\n0800\n7FC0\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_8057\nENCODING 32855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n57E0\n7540\n5540\n7BA0\n5100\n5A80\n7280\nD440\n1820\nENDCHAR\nSTARTCHAR U_8058\nENCODING 32856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n53E0\n52A0\n73E0\n52A0\n77E0\n5100\n5BE0\nF020\n1020\n11C0\nENDCHAR\nSTARTCHAR U_8059\nENCODING 32857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFC0\n5100\n77C0\n5100\n7FE0\n5440\n5FC0\n7440\nD7C0\n1440\nENDCHAR\nSTARTCHAR U_805A\nENCODING 32858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4520\n7CC0\n44C0\nFF20\n05C0\n7E40\n0A80\n7700\n0A80\n7260\nENDCHAR\nSTARTCHAR U_805B\nENCODING 32859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n5520\n77E0\n5520\n77E0\n5280\n5C80\n77E0\nD080\n1080\nENDCHAR\nSTARTCHAR U_805C\nENCODING 32860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57E0\n5420\n7240\n5420\n7800\n57C0\n5900\nF100\n1100\n1FE0\nENDCHAR\nSTARTCHAR U_805D\nENCODING 32861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8C0\n50A0\n57E0\n7080\n5780\n75A0\n57A0\n50C0\nF960\n16A0\n1120\nENDCHAR\nSTARTCHAR U_805E\nENCODING 32862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\n4920\n79E0\n4920\n7FE0\n4920\n4F20\n4920\n4FE0\n7920\n4160\nENDCHAR\nSTARTCHAR U_805F\nENCODING 32863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3BC0\n5240\nFFC0\n2800\n7FC0\n9100\n1F00\n11E0\nFF00\n0100\nENDCHAR\nSTARTCHAR U_8060\nENCODING 32864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0420\nFA40\n5240\n77E0\n5240\n7240\n57E0\n5A40\n7240\nD240\n1440\nENDCHAR\nSTARTCHAR U_8061\nENCODING 32865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFA80\n5540\n7920\n5240\n77C0\n5200\n5D40\n7520\nDC60\n13C0\nENDCHAR\nSTARTCHAR U_8062\nENCODING 32866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF880\n57E0\n7420\n53C0\n7500\n55C0\n5D00\n7500\nD700\n18E0\nENDCHAR\nSTARTCHAR U_8063\nENCODING 32867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFEC0\n5440\n76C0\n5440\n77C0\n5280\n5A80\n7280\nD2A0\n1460\nENDCHAR\nSTARTCHAR U_8064\nENCODING 32868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57E0\n5240\n73C0\n5000\n77E0\n5420\n53C0\nF880\n1280\n1100\nENDCHAR\nSTARTCHAR U_8065\nENCODING 32869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF900\n57C0\n7540\n57C0\n7100\n57E0\n5D20\n77E0\nD4A0\n1440\nENDCHAR\nSTARTCHAR U_8066\nENCODING 32870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFBE0\n5560\n72A0\n55A0\n7160\n5200\n5D40\n7520\nDC60\n13C0\nENDCHAR\nSTARTCHAR U_8067\nENCODING 32871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF40\n55A0\n52C0\n7440\n5420\n7BC0\n5100\n57E0\nF900\n1280\n1460\nENDCHAR\nSTARTCHAR U_8068\nENCODING 32872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nFDA0\n56E0\n7240\n55A0\n76E0\n5240\n5FE0\n7240\nD240\n1440\nENDCHAR\nSTARTCHAR U_8069\nENCODING 32873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57C0\n5540\n7FE0\n5000\n77C0\n5440\n5540\nFD40\n1280\n1C60\nENDCHAR\nSTARTCHAR U_806A\nENCODING 32874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFA80\n57C0\n5440\n7440\n57C0\n7100\n5AA0\nF6A0\n1A40\n11C0\nENDCHAR\nSTARTCHAR U_806B\nENCODING 32875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nFA40\n55A0\n76C0\n5240\n75A0\n56E0\n5100\n7FE0\nD280\n1460\nENDCHAR\nSTARTCHAR U_806C\nENCODING 32876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n5240\n5520\n7240\n57E0\n7000\n57E0\n55A0\nFB60\n15A0\n1360\nENDCHAR\nSTARTCHAR U_806D\nENCODING 32877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFA00\n57C0\n7540\n57C0\n7540\n57C0\n5940\n73E0\nD520\n18E0\nENDCHAR\nSTARTCHAR U_806E\nENCODING 32878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\nFA40\n55A0\n76E0\n5240\n75A0\n56E0\n5800\n7540\nDAA0\n12A0\nENDCHAR\nSTARTCHAR U_806F\nENCODING 32879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF440\nA440\nAAA0\nE440\nAAA0\nA660\nEAA0\nAAA0\nAEE0\nF280\n2C80\nENDCHAR\nSTARTCHAR U_8070\nENCODING 32880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57E0\n56A0\n7520\n56A0\n77E0\n5100\n52C0\nFE20\n1260\n11C0\nENDCHAR\nSTARTCHAR U_8071\nENCODING 32881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFDE0\n2340\nFC80\n4940\nFFE0\n2080\n3F80\n2080\nFFE0\n0080\nENDCHAR\nSTARTCHAR U_8072\nENCODING 32882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFD40\n5620\n57C0\n7C80\n8140\nFFE0\n1080\n1F80\n1080\nFFE0\nENDCHAR\nSTARTCHAR U_8073\nENCODING 32883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nAB40\n5220\nC9C0\n4D00\n53E0\nFF00\n2100\n3F00\n2100\nFFE0\nENDCHAR\nSTARTCHAR U_8074\nENCODING 32884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n5100\n77E0\n55A0\n77E0\n5200\n5D40\n7520\nDC40\n13C0\nENDCHAR\nSTARTCHAR U_8075\nENCODING 32885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57C0\n5540\n7FE0\n5440\n77C0\n5440\n5FC0\nF440\n17C0\n1C60\nENDCHAR\nSTARTCHAR U_8076\nENCODING 32886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0880\n0F80\n0880\n7FE0\n0080\n7FE0\n4A40\n7BC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_8077\nENCODING 32887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF480\nAFC0\nAAA0\nE480\nBFE0\nA080\nEEA0\nAAC0\nAEA0\nFB60\n2E20\nENDCHAR\nSTARTCHAR U_8078\nENCODING 32888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFB80\n57E0\n5D40\n76A0\n57E0\n7400\n55E0\n5400\nFDE0\n1520\n19E0\nENDCHAR\nSTARTCHAR U_8079\nENCODING 32889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\nAFE0\nAD60\nE7C0\nA820\nEFE0\nAAA0\nAFE0\nF100\n2100\n2300\nENDCHAR\nSTARTCHAR U_807A\nENCODING 32890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n5420\n77E0\n5AA0\n7540\n5820\n5FE0\n7100\nD540\n1B20\nENDCHAR\nSTARTCHAR U_807B\nENCODING 32891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n3F00\nA9E0\n7F40\n8940\nFFE0\n1100\n1F00\n1100\nFFE0\n0100\nENDCHAR\nSTARTCHAR U_807C\nENCODING 32892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n17E0\nF900\n5FE0\n7AA0\n5FE0\n7000\n5FE0\n7540\nDCA0\n1380\nENDCHAR\nSTARTCHAR U_807D\nENCODING 32893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n5FE0\n7100\n5FE0\nFAA0\n1FE0\nF000\n5FE0\nF6A0\n5A40\nF1C0\nENDCHAR\nSTARTCHAR U_807E\nENCODING 32894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n2900\nFFE0\n4500\n7DC0\n4520\nFFE0\n1080\n1F80\n1080\n7FE0\nENDCHAR\nSTARTCHAR U_807F\nENCODING 32895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n0480\nFFE0\n0480\n3F80\n0400\n7FC0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8080\nENCODING 32896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FC0\n0440\nFFE0\n0440\n3FC0\n0440\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_8081\nENCODING 32897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4040\n7FC0\n4400\n5F80\n4480\n5FC0\n4480\nBFC0\n8400\nENDCHAR\nSTARTCHAR U_8082\nENCODING 32898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFC0\n2140\n3FE0\n4940\nB7C0\n1100\n27C0\n4100\n8FE0\n0100\nENDCHAR\nSTARTCHAR U_8083\nENCODING 32899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0440\nFFE0\n0440\n7FC0\n0400\n5640\n5540\n6540\n8440\nENDCHAR\nSTARTCHAR U_8084\nENCODING 32900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n67C0\n4940\n7FE0\n8140\nF7C0\nA100\nFFC0\n2100\n5FE0\n8900\nENDCHAR\nSTARTCHAR U_8085\nENCODING 32901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0440\n7FE0\n0440\n7FC0\n5540\n7FC0\n4440\n75C0\n9540\nENDCHAR\nSTARTCHAR U_8086\nENCODING 32902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n77C0\n4140\n77E0\n4140\n77C0\n4100\nF7C0\n5100\nFFE0\n0100\nENDCHAR\nSTARTCHAR U_8087\nENCODING 32903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7BE0\n4940\n7CC0\n8520\n7FE0\n0480\n3F80\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8088\nENCODING 32904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n7FE0\n4940\n7880\n4560\nBF80\n0480\n7FE0\n0480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8089\nENCODING 32905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4440\n4A40\n7140\n4440\n4440\n4A40\n7140\n4040\n40C0\nENDCHAR\nSTARTCHAR U_808A\nENCODING 32906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7800\n4FC0\n4840\n7840\n4880\n4880\n7900\n4900\n4A20\n8A20\n99E0\nENDCHAR\nSTARTCHAR U_808B\nENCODING 32907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n4900\n7FE0\n4920\n4920\n7920\n4920\n4A20\n8D20\n98C0\nENDCHAR\nSTARTCHAR U_808C\nENCODING 32908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF780\n9480\n9480\nF480\n9480\n9480\nF480\n9480\n94A0\n94A0\nB860\nENDCHAR\nSTARTCHAR U_808D\nENCODING 32909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n5200\n5780\n7280\n5280\n5280\n7280\n5280\n52A0\n94A0\nB860\nENDCHAR\nSTARTCHAR U_808E\nENCODING 32910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n8040\n3F80\n2080\n3F80\n2080\n3F80\n2080\n2080\n2280\n2100\nENDCHAR\nSTARTCHAR U_808F\nENCODING 32911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C00\n0A00\n3180\nC460\n7FC0\n4440\n4A40\n5540\n4A40\n5140\n61C0\nENDCHAR\nSTARTCHAR U_8090\nENCODING 32912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n4A00\n4BE0\n7C00\n4BC0\n4840\n7880\n4900\n4A20\n8A20\n99E0\nENDCHAR\nSTARTCHAR U_8091\nENCODING 32913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n5200\n53E0\n7420\n5820\n5220\n7120\n5120\n5020\n90A0\nB040\nENDCHAR\nSTARTCHAR U_8092\nENCODING 32914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n5200\n5F80\n7280\n5680\n5280\n7380\n5280\n54A0\n98A0\nB060\nENDCHAR\nSTARTCHAR U_8093\nENCODING 32915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2000\n3FC0\n0000\n3F80\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_8094\nENCODING 32916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5100\n5500\n7FC0\n5540\n5540\n7540\n55C0\n5520\n9420\nB3E0\nENDCHAR\nSTARTCHAR U_8095\nENCODING 32917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5120\n5120\n7120\n5520\n5520\n7920\n5120\n5220\n92A0\nB440\nENDCHAR\nSTARTCHAR U_8096\nENCODING 32918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2480\n1500\n3F80\n2080\n3F80\n2080\n3F80\n2080\n2080\n2180\nENDCHAR\nSTARTCHAR U_8097\nENCODING 32919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5100\n5100\n7FE0\n5240\n5240\n7440\n5280\n5100\n9280\nB440\nENDCHAR\nSTARTCHAR U_8098\nENCODING 32920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7840\n4840\n4840\n7FE0\n4840\n4A40\n7940\n4940\n4840\n8940\n9880\nENDCHAR\nSTARTCHAR U_8099\nENCODING 32921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1080\n1F80\n0000\n3FC0\n2040\n3FC0\n2040\n3FC0\n2040\n21C0\nENDCHAR\nSTARTCHAR U_809A\nENCODING 32922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n4900\n7900\n4FC0\n4900\n7900\n4900\n4900\n8900\n9FE0\nENDCHAR\nSTARTCHAR U_809B\nENCODING 32923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7800\n4BE0\n4880\n7880\n4880\n4880\n7880\n4880\n4880\n8FE0\n9800\nENDCHAR\nSTARTCHAR U_809C\nENCODING 32924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78C0\n4880\n4900\n7A60\n4840\n4880\n7900\n4A60\n4840\n8880\n9B00\nENDCHAR\nSTARTCHAR U_809D\nENCODING 32925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4880\n4880\n7880\n4880\n4FE0\n7880\n4880\n4880\n8880\n9880\nENDCHAR\nSTARTCHAR U_809E\nENCODING 32926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5440\n5540\n7540\n5280\n5280\n7100\n5100\n5280\n9440\nB820\nENDCHAR\nSTARTCHAR U_809F\nENCODING 32927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4800\n4800\n7FE0\n4A00\n4FE0\n7820\n4820\n4820\n8920\n98C0\nENDCHAR\nSTARTCHAR U_80A0\nENCODING 32928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4880\n4900\n7A00\n4FE0\n4AA0\n7CA0\n4920\n4A20\n8D20\n98C0\nENDCHAR\nSTARTCHAR U_80A1\nENCODING 32929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n4A40\n7C60\n4800\n4BE0\n7A20\n4940\n4880\n8940\n9E20\nENDCHAR\nSTARTCHAR U_80A2\nENCODING 32930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4880\n4FE0\n7880\n4BE0\n4A20\n7A20\n4940\n4880\n8940\n9E20\nENDCHAR\nSTARTCHAR U_80A3\nENCODING 32931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4A80\n4C40\n7920\n4880\n4800\n7FE0\n4820\n4840\n8880\n9900\nENDCHAR\nSTARTCHAR U_80A4\nENCODING 32932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n4FC0\n7900\n4900\n4FE0\n7900\n4900\n4A80\n8C40\n9820\nENDCHAR\nSTARTCHAR U_80A5\nENCODING 32933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4AA0\n4AA0\n7AA0\n4BE0\n4A20\n7A00\n4A00\n4A20\n8A20\n99E0\nENDCHAR\nSTARTCHAR U_80A6\nENCODING 32934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5280\n5280\n7440\n5820\n57C0\n7240\n5240\n5240\n9540\nB880\nENDCHAR\nSTARTCHAR U_80A7\nENCODING 32935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5100\n5100\n7300\n5300\n5540\n7520\n5920\n5100\n9100\nB100\nENDCHAR\nSTARTCHAR U_80A8\nENCODING 32936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5100\n57C0\n7100\n5100\n57C0\n7100\n5FE0\n5100\n9100\nB100\nENDCHAR\nSTARTCHAR U_80A9\nENCODING 32937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FC0\n2040\n3FC0\n2000\n2FC0\n2840\n2FC0\n2840\n4FC0\n8840\nENDCHAR\nSTARTCHAR U_80AA\nENCODING 32938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4880\n4FE0\n7900\n49E0\n4920\n7920\n4920\n4A20\n8A20\n9CC0\nENDCHAR\nSTARTCHAR U_80AB\nENCODING 32939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4880\n4FE0\n7880\n4AA0\n4AA0\n7BE0\n4880\n48A0\n88A0\n9860\nENDCHAR\nSTARTCHAR U_80AC\nENCODING 32940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7280\n5240\n57E0\n7280\n5280\n7280\n5480\n54A0\n54A0\nB8E0\nENDCHAR\nSTARTCHAR U_80AD\nENCODING 32941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4880\n4BE0\n7AA0\n4AA0\n4AA0\n7B60\n4A20\n4A20\n8A20\n9A60\nENDCHAR\nSTARTCHAR U_80AE\nENCODING 32942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n5100\n5FE0\n7000\n5780\n5480\n7480\n5480\n5480\n94A0\nB860\nENDCHAR\nSTARTCHAR U_80AF\nENCODING 32943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n27C0\n2400\nFFE0\n2080\n3F80\n2080\n3F80\n2080\n2280\n2100\nENDCHAR\nSTARTCHAR U_80B0\nENCODING 32944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5140\n5120\n7FE0\n5100\n5100\n7100\n5280\n5240\nD440\nB820\nENDCHAR\nSTARTCHAR U_80B1\nENCODING 32945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n4FE0\n7900\n4940\n4A40\n7A80\n4A80\n4D40\n8FA0\n9820\nENDCHAR\nSTARTCHAR U_80B2\nENCODING 32946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n7FC0\n0040\n3F80\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_80B3\nENCODING 32947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n5200\n53E0\n7560\n5560\n5AA0\n72A0\n54A0\n5120\n9260\nB440\nENDCHAR\nSTARTCHAR U_80B4\nENCODING 32948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n71C0\n0E00\n71C0\n0400\nFFE0\n1080\n3F80\n5080\n9F80\n1080\n1380\nENDCHAR\nSTARTCHAR U_80B5\nENCODING 32949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n4B80\n4A00\n7A00\n4BE0\n4A40\n7A40\n4A40\n4A40\n8C40\n9840\nENDCHAR\nSTARTCHAR U_80B6\nENCODING 32950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n7480\n5480\n54A0\n77C0\n5480\n7480\n5480\n55A0\n96A0\nB4E0\nENDCHAR\nSTARTCHAR U_80B7\nENCODING 32951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n4A00\n4BE0\n7C20\n4880\n4880\n7880\n4880\n4940\n8A20\n9C20\nENDCHAR\nSTARTCHAR U_80B8\nENCODING 32952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A80\n4A80\n4C40\n7920\n4900\n4900\n7FE0\n4900\n4900\n8900\n9900\nENDCHAR\nSTARTCHAR U_80B9\nENCODING 32953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5280\n5440\n7440\n5FA0\n5200\n77C0\n5040\n5040\n9140\nB080\nENDCHAR\nSTARTCHAR U_80BA\nENCODING 32954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5100\n7100\n57E0\n5520\n7520\n5520\n5560\n9100\nB100\nENDCHAR\nSTARTCHAR U_80BB\nENCODING 32955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\n0400\n7FE0\n4020\nBFA0\n2080\n3F80\n2080\n3F80\n2080\n2180\nENDCHAR\nSTARTCHAR U_80BC\nENCODING 32956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A40\n4A40\n4FE0\n7A40\n4A40\n4FE0\n7A40\n4A40\n4A40\n8C40\n9840\nENDCHAR\nSTARTCHAR U_80BD\nENCODING 32957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n4900\n7FE0\n4900\n4900\n7900\n4980\n4A40\n8D60\n9920\nENDCHAR\nSTARTCHAR U_80BE\nENCODING 32958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n9280\n9100\n96E0\n3F80\n2080\n3F80\n2080\n3F80\n2080\n2380\nENDCHAR\nSTARTCHAR U_80BF\nENCODING 32959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4880\n4BE0\n7AA0\n4AA0\n4AA0\n7BE0\n4AA0\n4880\n8880\n9880\nENDCHAR\nSTARTCHAR U_80C0\nENCODING 32960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A20\n4A40\n4A80\n7B00\n4A00\n4FE0\n7A80\n4A80\n4A80\n8B40\n9A20\nENDCHAR\nSTARTCHAR U_80C1\nENCODING 32961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9100\n9FC0\nF140\n9540\n9540\nFA60\n9240\n9440\n9A40\nB180\nENDCHAR\nSTARTCHAR U_80C2\nENCODING 32962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\n5080\n57E0\n74A0\n57E0\n54A0\n77E0\n54A0\n5080\n9080\nB080\nENDCHAR\nSTARTCHAR U_80C3\nENCODING 32963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n7FC0\n4440\n7FC0\n2080\n3F80\n2080\n3F80\n2080\n2380\nENDCHAR\nSTARTCHAR U_80C4\nENCODING 32964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4440\n7FC0\n4440\n7FC0\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_80C5\nENCODING 32965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5500\n57C0\n7900\n5100\n5FE0\n7100\n5280\n5280\n5440\nB820\nENDCHAR\nSTARTCHAR U_80C6\nENCODING 32966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7800\n4BC0\n4A40\n7A40\n4BC0\n4A40\n7A40\n4BC0\n4800\n8800\n9FE0\nENDCHAR\nSTARTCHAR U_80C7\nENCODING 32967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5FE0\n52A0\n77E0\n5A80\n5FE0\n72A0\n52A0\n52E0\n5480\nB880\nENDCHAR\nSTARTCHAR U_80C8\nENCODING 32968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7940\n4920\n4FE0\n7900\n49C0\n4940\n7940\n4A80\n4AC0\n8D20\n9A20\nENDCHAR\nSTARTCHAR U_80C9\nENCODING 32969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4900\n4BE0\n7A20\n4A20\n4BE0\n7A20\n4A20\n4A20\n8BE0\n9A20\nENDCHAR\nSTARTCHAR U_80CA\nENCODING 32970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n4A00\n4BE0\n7C20\n4BA0\n4AA0\n7AA0\n4BA0\n4820\n8920\n98C0\nENDCHAR\nSTARTCHAR U_80CB\nENCODING 32971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5100\n51E0\n7100\n5100\n57E0\n7420\n5420\n5420\n97E0\nB420\nENDCHAR\nSTARTCHAR U_80CC\nENCODING 32972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\nF380\n1220\n33E0\nC000\n3F80\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_80CD\nENCODING 32973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7060\n57C0\n5540\n7540\n5540\n5540\n7540\n5540\n5540\n95E0\n9940\nENDCHAR\nSTARTCHAR U_80CE\nENCODING 32974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n4A40\n7FE0\n4820\n4BC0\n7A40\n4A40\n4A40\n8BC0\n9A40\nENDCHAR\nSTARTCHAR U_80CF\nENCODING 32975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n48A0\n4BC0\n7A80\n4C80\n4FE0\n79A0\n4AA0\n4CE0\n8880\n9880\nENDCHAR\nSTARTCHAR U_80D0\nENCODING 32976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5520\n5520\n7520\n57E0\n5100\n7520\n5520\n5520\n97E0\nB420\nENDCHAR\nSTARTCHAR U_80D1\nENCODING 32977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4A20\n4A20\n7A20\n4A20\n4BE0\n7800\n4800\n4A40\n8A20\n9C20\nENDCHAR\nSTARTCHAR U_80D2\nENCODING 32978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5440\n57C0\n7400\n5500\n5540\n7580\n5500\n5500\n9520\nB8E0\nENDCHAR\nSTARTCHAR U_80D3\nENCODING 32979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5100\n5540\n7540\n5580\n7FE0\n5100\n5100\n5100\n9100\nB100\nENDCHAR\nSTARTCHAR U_80D4\nENCODING 32980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n5D80\n5120\nFDE0\n0400\n7FC0\n4440\n4B40\n5440\n4A40\n51C0\nENDCHAR\nSTARTCHAR U_80D5\nENCODING 32981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7240\n5240\n5440\n75E0\n5C40\n5640\n7540\n5540\n5440\n9540\nB480\nENDCHAR\nSTARTCHAR U_80D6\nENCODING 32982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7920\n5520\n5540\n7100\n57C0\n5100\n7FE0\n5100\n5100\n9100\n9100\nENDCHAR\nSTARTCHAR U_80D7\nENCODING 32983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4A80\n4C40\n7920\n4A80\n4920\n7A40\n4880\n4900\n8A00\n9C00\nENDCHAR\nSTARTCHAR U_80D8\nENCODING 32984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4880\n4FE0\n7900\n4A40\n4F80\n7880\n4940\n4A20\n8FE0\n9820\nENDCHAR\nSTARTCHAR U_80D9\nENCODING 32985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n4A00\n4BE0\n7D00\n49E0\n4900\n7900\n49E0\n4900\n8900\n9900\nENDCHAR\nSTARTCHAR U_80DA\nENCODING 32986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4880\n4900\n7900\n4B40\n4D20\n7920\n4900\n4900\n8800\n9FE0\nENDCHAR\nSTARTCHAR U_80DB\nENCODING 32987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4AA0\n4AA0\n7BE0\n4AA0\n4AA0\n7BE0\n4880\n4880\n8880\n9880\nENDCHAR\nSTARTCHAR U_80DC\nENCODING 32988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5500\n5500\n77E0\n5900\n5100\n77C0\n5100\n5100\n9100\nBFE0\nENDCHAR\nSTARTCHAR U_80DD\nENCODING 32989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7040\n5780\n5480\n7480\n57E0\n5480\n7480\n5580\n56A0\n9560\nB4A0\nENDCHAR\nSTARTCHAR U_80DE\nENCODING 32990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n53E0\n5420\n7FA0\n54A0\n54A0\n77A0\n54C0\n5420\n9420\nB3E0\nENDCHAR\nSTARTCHAR U_80DF\nENCODING 32991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5440\n5540\n7540\n5FE0\n5440\n7540\n5540\n57E0\n9040\nB180\nENDCHAR\nSTARTCHAR U_80E0\nENCODING 32992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n4FC0\n7900\n4900\n4FE0\n7900\n4900\n4A40\n8C60\n9FA0\nENDCHAR\nSTARTCHAR U_80E1\nENCODING 32993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1220\nFE20\n13E0\n1220\n7A20\n4BE0\n4A20\n7A20\n4C20\n08E0\nENDCHAR\nSTARTCHAR U_80E2\nENCODING 32994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5040\n5740\n7540\n5540\n5540\n7740\n5540\n5040\n9140\nB080\nENDCHAR\nSTARTCHAR U_80E3\nENCODING 32995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n4BE0\n4C80\n7AA0\n4AE0\n4FA0\n7AA0\n4AE0\n4A80\n8A20\n99E0\nENDCHAR\nSTARTCHAR U_80E4\nENCODING 32996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A80\n5C80\n4A80\n5F80\n4080\n5E80\n5280\n5E80\n52A0\n9EA0\n9260\nENDCHAR\nSTARTCHAR U_80E5\nENCODING 32997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2440\n2780\n5400\nBFE0\n2080\n3F80\n2080\n3F80\n2080\n2380\nENDCHAR\nSTARTCHAR U_80E6\nENCODING 32998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5100\n57C0\n7540\n5540\n5FE0\n7100\n5100\n5280\n9440\nB820\nENDCHAR\nSTARTCHAR U_80E7\nENCODING 32999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5240\n5FE0\n7280\n52A0\n52A0\n72C0\n5480\n55A0\n9AA0\nB0E0\nENDCHAR\nSTARTCHAR U_80E8\nENCODING 33000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4FE0\n4900\n7A80\n4A80\n4FE0\n7880\n4AC0\n4AA0\n8CA0\n9980\nENDCHAR\nSTARTCHAR U_80E9\nENCODING 33001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n49E0\n7900\n4FE0\n4900\n7980\n4940\n4920\n8920\n9900\nENDCHAR\nSTARTCHAR U_80EA\nENCODING 33002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n48E0\n4880\n7BE0\n4A20\n4A20\n7BE0\n4A00\n4A00\n8A00\n9C00\nENDCHAR\nSTARTCHAR U_80EB\nENCODING 33003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5040\n5080\n7140\n5620\n5000\n77C0\n5100\n5100\n9100\nBFE0\nENDCHAR\nSTARTCHAR U_80EC\nENCODING 33004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF940\n5080\n3B60\nC400\n7FC0\n4A40\n5540\n4440\n4A40\n5140\nENDCHAR\nSTARTCHAR U_80ED\nENCODING 33005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5520\n5520\n77E0\n5520\n5520\n75A0\n5660\n5420\n97E0\n9420\nENDCHAR\nSTARTCHAR U_80EE\nENCODING 33006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79C0\n4A20\n4940\n7880\n4B40\n4CA0\n7BE0\n4A80\n4FE0\n4880\n9880\nENDCHAR\nSTARTCHAR U_80EF\nENCODING 33007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5440\n7BA0\n5000\n5FE0\n7200\n57C0\n5040\n9040\nB180\nENDCHAR\nSTARTCHAR U_80F0\nENCODING 33008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5100\n77E0\n5120\n57E0\n7500\n57E0\n5160\n9280\nB460\nENDCHAR\nSTARTCHAR U_80F1\nENCODING 33009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5920\n5540\n7100\n5FE0\n5280\n7280\n5280\n52A0\n94A0\nB860\nENDCHAR\nSTARTCHAR U_80F2\nENCODING 33010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n5100\n5FE0\n7240\n5480\n5720\n7240\n5480\n5140\n9220\nB420\nENDCHAR\nSTARTCHAR U_80F3\nENCODING 33011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n53C0\n5680\n7900\n5280\n5440\n7BE0\n5240\n5240\n93C0\nB240\nENDCHAR\nSTARTCHAR U_80F4\nENCODING 33012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5420\n55E0\n7420\n55E0\n5560\n7560\n55E0\n5420\n9420\nB460\nENDCHAR\nSTARTCHAR U_80F5\nENCODING 33013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5100\n5200\n7440\n57A0\n5100\n7100\n57C0\n5100\n9100\nBFE0\nENDCHAR\nSTARTCHAR U_80F6\nENCODING 33014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57E0\n5280\n7440\n5820\n7480\n5280\n5100\n5280\nB440\n8820\nENDCHAR\nSTARTCHAR U_80F7\nENCODING 33015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4A20\nA4A0\n2AA0\n3FC0\n2080\n3F80\n2080\n3F80\n2080\n2180\nENDCHAR\nSTARTCHAR U_80F8\nENCODING 33016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n53E0\n5420\n7920\n56A0\n55A0\n76A0\n54A0\n57A0\n9020\nB0C0\nENDCHAR\nSTARTCHAR U_80F9\nENCODING 33017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA100\nA200\nEFE0\nAAA0\nAAA0\nEAA0\nAAA0\nAAA0\nAAA0\nA860\nENDCHAR\nSTARTCHAR U_80FA\nENCODING 33018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57E0\n5420\n7100\n57E0\n5240\n7240\n5680\n5180\n9240\nB420\nENDCHAR\nSTARTCHAR U_80FB\nENCODING 33019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n72E0\n5400\n5800\n7200\n55E0\n5440\n7C40\n5440\n5440\n9540\nB480\nENDCHAR\nSTARTCHAR U_80FC\nENCODING 33020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7440\n5280\n5FE0\n7280\n5280\n5FE0\n7280\n5280\n5280\n9480\nB880\nENDCHAR\nSTARTCHAR U_80FD\nENCODING 33021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4940\nFD80\n0120\n7DE0\n4400\n7D40\n4580\n7D20\n4520\n4DE0\nENDCHAR\nSTARTCHAR U_80FE\nENCODING 33022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFD40\n1120\nFFE0\n1100\nFD20\n9520\nAD40\nD4A0\nAD60\nCE20\nENDCHAR\nSTARTCHAR U_80FF\nENCODING 33023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n4900\n7900\n4FE0\n4900\n7900\n4FC0\n4900\n4900\n9FE0\nENDCHAR\nSTARTCHAR U_8100\nENCODING 33024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0120\n7640\n1480\n2C40\n7FA0\nA080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_8101\nENCODING 33025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5AA0\n56C0\n7280\n5280\n56C0\n7AA0\n5280\n52A0\n94A0\nB860\nENDCHAR\nSTARTCHAR U_8102\nENCODING 33026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n4A60\n4B80\n7A20\n49E0\n4800\n7BE0\n4A20\n4BE0\n8A20\n9BE0\nENDCHAR\nSTARTCHAR U_8103\nENCODING 33027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BE0\n4C40\n7BE0\n4AA0\n4AA0\n7BE0\n4A00\n4A00\n4A20\n99E0\nENDCHAR\nSTARTCHAR U_8104\nENCODING 33028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4FE0\n4900\n7900\n4A80\n4AA0\n7DC0\n4A80\n4940\n4A20\n9C20\nENDCHAR\nSTARTCHAR U_8105\nENCODING 33029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7F80\n2080\nFBE0\n4920\nBFE0\n2080\n3F80\n2080\n3F80\n2180\nENDCHAR\nSTARTCHAR U_8106\nENCODING 33030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n73C0\n5480\n5FE0\n7400\n55C0\n5540\n7540\n55C0\n5520\n9520\nB8E0\nENDCHAR\nSTARTCHAR U_8107\nENCODING 33031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4FC0\n4940\n7A40\n4C40\n4A80\n7FE0\n4AA0\n4AA0\n4AA0\n9D60\nENDCHAR\nSTARTCHAR U_8108\nENCODING 33032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE0E0\nAF00\nA860\nEB80\nAA80\nAAA0\nEAC0\nAA80\nAAC0\nAB40\nB220\nENDCHAR\nSTARTCHAR U_8109\nENCODING 33033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5080\n5700\n7120\n5D40\n5580\n7540\n5540\n5920\n9120\nB300\nENDCHAR\nSTARTCHAR U_810A\nENCODING 33034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6460\n1680\n6960\n1080\n3FC0\n50A0\n1F80\n1080\n1F80\n1080\n1380\nENDCHAR\nSTARTCHAR U_810B\nENCODING 33035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0880\n1100\nFFE0\n2520\nFFC0\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_810C\nENCODING 33036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BE0\n4C80\n7880\n4BE0\n4A80\n7A80\n4FE0\n4880\n4880\n9880\nENDCHAR\nSTARTCHAR U_810D\nENCODING 33037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5280\n5440\n7820\n53C0\n5000\n77E0\n5100\n5200\n9440\nB7A0\nENDCHAR\nSTARTCHAR U_810E\nENCODING 33038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E60\n4980\n4A40\n7CA0\n4880\n4FE0\n7880\n4AC0\n4CA0\n88A0\nB980\nENDCHAR\nSTARTCHAR U_810F\nENCODING 33039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\n57E0\n5400\n7480\n5480\n57E0\n7480\n5480\n5480\n9880\nB3E0\nENDCHAR\nSTARTCHAR U_8110\nENCODING 33040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5240\n7180\n5240\n5C20\n7240\n5240\n5240\n9440\nB840\nENDCHAR\nSTARTCHAR U_8111\nENCODING 33041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5080\n57E0\n7000\n54A0\n56A0\n7520\n56A0\n5420\n97E0\nB420\nENDCHAR\nSTARTCHAR U_8112\nENCODING 33042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4D20\n4B40\n7900\n4FE0\n4900\n7980\n4B40\n4D20\n8920\nB900\nENDCHAR\nSTARTCHAR U_8113\nENCODING 33043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5920\n7100\n52A0\n56C0\n7A80\n5280\n52C0\n9320\nB220\nENDCHAR\nSTARTCHAR U_8114\nENCODING 33044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2A80\n4A40\n8A20\nFFC0\n8A40\n9540\nA4C0\n8A40\n91C0\nENDCHAR\nSTARTCHAR U_8115\nENCODING 33045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n53C0\n5480\n7FE0\n5520\n5520\n77E0\n5280\n52A0\n94A0\nB8E0\nENDCHAR\nSTARTCHAR U_8116\nENCODING 33046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57E0\n5100\n7FE0\n5820\n57C0\n7080\n5FE0\n5100\n9100\nB300\nENDCHAR\nSTARTCHAR U_8117\nENCODING 33047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BE0\n4D60\n7AA0\n4CA0\n4920\n7A40\n4BE0\n4A20\n4A20\n9BE0\nENDCHAR\nSTARTCHAR U_8118\nENCODING 33048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4880\n4FE0\n7C20\n4BC0\n4800\n7FE0\n4A80\n4AA0\n8CA0\n9860\nENDCHAR\nSTARTCHAR U_8119\nENCODING 33049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7180\n5140\n5FE0\n7100\n5920\n5540\n7380\n5540\n5920\n9120\nB300\nENDCHAR\nSTARTCHAR U_811A\nENCODING 33050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n74E0\n54A0\n5FA0\n74A0\n54A0\n5FA0\n74A0\n5AA0\n5FE0\n9080\nB080\nENDCHAR\nSTARTCHAR U_811B\nENCODING 33051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5540\n5540\n7A80\n5540\n5540\n7000\n57C0\n5100\n9100\nBFE0\nENDCHAR\nSTARTCHAR U_811C\nENCODING 33052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4880\n4900\n7BE0\n4A20\n4BE0\n7A20\n4BE0\n4A20\nAA20\n93E0\nENDCHAR\nSTARTCHAR U_811D\nENCODING 33053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4FE0\n4A40\n7BC0\n4800\n4FE0\n7840\n4880\n4880\n8880\n9980\nENDCHAR\nSTARTCHAR U_811E\nENCODING 33054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5540\n5540\n7540\n5BA0\n5920\n7100\n57C0\n5100\n9100\nBFE0\nENDCHAR\nSTARTCHAR U_811F\nENCODING 33055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n4BA0\n4D20\n7AC0\n4840\n4FE0\n7840\n4A40\n4940\n8840\n99C0\nENDCHAR\nSTARTCHAR U_8120\nENCODING 33056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7060\n5DC0\n5440\n7440\n5960\n5540\n7540\n5D40\n57E0\n5400\n9BE0\nENDCHAR\nSTARTCHAR U_8121\nENCODING 33057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7020\n5EC0\n5240\n7440\n57E0\n5240\n7A40\n57E0\n5200\n9500\nB8E0\nENDCHAR\nSTARTCHAR U_8122\nENCODING 33058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n57E0\n5800\n77C0\n5540\n5FE0\n7540\n5540\n57E0\n9040\nB180\nENDCHAR\nSTARTCHAR U_8123\nENCODING 33059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4000\n7FE0\n5280\n51E0\n5FC0\n9040\n9FC0\n1040\n1FC0\n1040\nENDCHAR\nSTARTCHAR U_8124\nENCODING 33060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5400\n57C0\n7400\n57E0\n5540\n7540\n5560\n5540\n95A0\n9920\nENDCHAR\nSTARTCHAR U_8125\nENCODING 33061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5100\n7540\n5540\n5BA0\n7120\n5100\n5280\n9440\nB820\nENDCHAR\nSTARTCHAR U_8126\nENCODING 33062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n70C0\n50A0\n5FE0\n7080\n5480\n5280\n7580\n54A0\n5DA0\n9360\nB020\nENDCHAR\nSTARTCHAR U_8127\nENCODING 33063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5240\n57A0\n7240\n5520\n53C0\n7240\n5640\n5980\n9240\nB420\nENDCHAR\nSTARTCHAR U_8128\nENCODING 33064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5100\n77E0\n5520\n57E0\n7100\n5380\n5540\n9920\nB100\nENDCHAR\nSTARTCHAR U_8129\nENCODING 33065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27E0\n4A40\n5180\nD7C0\n5C60\n57C0\n5440\n57C0\n4440\n44C0\nENDCHAR\nSTARTCHAR U_812A\nENCODING 33066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7940\n4880\n4B60\n7900\n4FE0\n4A80\n7FE0\n4AA0\n4AA0\n4AA0\n8880\nENDCHAR\nSTARTCHAR U_812B\nENCODING 33067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5440\n5FE0\n7440\n5440\n57C0\n7280\n5280\n52A0\n94A0\nB860\nENDCHAR\nSTARTCHAR U_812C\nENCODING 33068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n70C0\n5F20\n5A20\n7540\n5FC0\n5080\n7100\n5FE0\n5100\n9100\nB300\nENDCHAR\nSTARTCHAR U_812D\nENCODING 33069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5440\n5440\n77C0\n5000\n5FE0\n7100\n57C0\n5100\n9100\nBFE0\nENDCHAR\nSTARTCHAR U_812E\nENCODING 33070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78E0\n4FA0\n4AA0\n7AC0\n4900\n4FE0\n7940\n4A40\n4980\n4980\n9E60\nENDCHAR\nSTARTCHAR U_812F\nENCODING 33071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE140\nA120\nAFE0\nE100\nAFE0\nA920\nEFE0\nA920\nAFE0\nA920\nA960\nENDCHAR\nSTARTCHAR U_8130\nENCODING 33072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4800\n4BC0\n7A40\n4A40\n4BC0\n7A40\n4800\n4A40\n8980\n9FE0\nENDCHAR\nSTARTCHAR U_8131\nENCODING 33073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7440\n5280\n57C0\n7440\n5440\n57C0\n7280\n5280\n52A0\n94A0\nB8E0\nENDCHAR\nSTARTCHAR U_8132\nENCODING 33074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5420\n57E0\n7480\n54A0\n56A0\n75C0\n55A0\n56A0\n94A0\nB980\nENDCHAR\nSTARTCHAR U_8133\nENCODING 33075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D20\n4AA0\n4AC0\n7800\n4A20\n4B60\n7AA0\n4B60\n4A20\n4BE0\n9A20\nENDCHAR\nSTARTCHAR U_8134\nENCODING 33076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4880\n4900\n7B80\n4D40\n4920\n7900\n4BC0\n4A40\n4A40\n9BC0\nENDCHAR\nSTARTCHAR U_8135\nENCODING 33077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5440\n57C0\n7000\n57C0\n5100\n7FE0\n5100\n5280\n5440\nB820\nENDCHAR\nSTARTCHAR U_8136\nENCODING 33078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n73C0\n5240\n5240\n73C0\n5100\n57E0\n7520\n5520\n56A0\n9460\n9460\nENDCHAR\nSTARTCHAR U_8137\nENCODING 33079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7B20\n4E20\n4A20\n7FA0\n4AA0\n4AA0\n7BA0\n4EA0\n4A20\n4A20\n9A60\nENDCHAR\nSTARTCHAR U_8138\nENCODING 33080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4880\n4940\n7A20\n4FC0\n4920\n7CA0\n4AA0\n4A40\n8840\n9FE0\nENDCHAR\nSTARTCHAR U_8139\nENCODING 33081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4A00\n4BC0\n7A00\n4BC0\n4A00\n7FE0\n4AA0\n4A40\n8AA0\n9B20\nENDCHAR\nSTARTCHAR U_813A\nENCODING 33082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4880\n4FE0\n7A40\n4B40\n4CA0\n7880\n4FE0\n4880\n8880\n9880\nENDCHAR\nSTARTCHAR U_813B\nENCODING 33083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n4900\n7FC0\n4940\n4FE0\n7940\n4FC0\n4900\n4900\n9FE0\nENDCHAR\nSTARTCHAR U_813C\nENCODING 33084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5100\n5100\n77E0\n5520\n57A0\n7560\n57A0\n5520\n5520\nB560\nENDCHAR\nSTARTCHAR U_813D\nENCODING 33085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7300\n5280\n57E0\n7480\n5FE0\n5480\n77E0\n5480\n5480\n97E0\nB400\nENDCHAR\nSTARTCHAR U_813E\nENCODING 33086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57E0\n5520\n77E0\n5520\n57E0\n7100\n5280\n57E0\n9080\nB080\nENDCHAR\nSTARTCHAR U_813F\nENCODING 33087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n4900\n7FC0\n4900\n4FE0\n7900\n4B20\n4EC0\n4A40\n9B20\nENDCHAR\nSTARTCHAR U_8140\nENCODING 33088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4980\n4A40\n7FE0\n4800\n4FE0\n7AA0\n4FE0\n4AA0\n4AA0\n9860\nENDCHAR\nSTARTCHAR U_8141\nENCODING 33089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7220\n5440\n5EE0\n7440\n5440\n5440\n7EE0\n5440\n5440\n5440\nB840\nENDCHAR\nSTARTCHAR U_8142\nENCODING 33090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4AA0\n4BE0\n7AA0\n4BE0\n4880\n7FE0\n49C0\n4AA0\n4AA0\n9CA0\nENDCHAR\nSTARTCHAR U_8143\nENCODING 33091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A40\n5680\n5FE0\n7200\n5FE0\n5440\n7FA0\n5480\n55A0\n9420\nB3E0\nENDCHAR\nSTARTCHAR U_8144\nENCODING 33092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5100\n5FE0\n7540\n5540\n5FE0\n7540\n5540\n5FE0\n9100\nB7C0\nENDCHAR\nSTARTCHAR U_8145\nENCODING 33093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7AA0\n4AA0\n4880\n7940\n4A20\n4C80\n7AA0\n49C0\n4880\n4940\n9A20\nENDCHAR\nSTARTCHAR U_8146\nENCODING 33094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE280\nA280\nAFE0\nEAA0\nAAA0\nAFE0\nEAA0\nAAA0\nBFE0\nA280\nAC60\nENDCHAR\nSTARTCHAR U_8147\nENCODING 33095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5100\n5FE0\n7380\n5540\n5920\n7FE0\n5280\n5680\n9180\nBE60\nENDCHAR\nSTARTCHAR U_8148\nENCODING 33096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5100\n77C0\n5100\n5FE0\n7440\n57C0\n5440\n97C0\nB4C0\nENDCHAR\nSTARTCHAR U_8149\nENCODING 33097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4AE0\n4A20\n7B60\n4A20\n4BE0\n7940\n4940\n4940\n4A40\n9460\nENDCHAR\nSTARTCHAR U_814A\nENCODING 33098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5280\n57C0\n7280\n5FE0\n5000\n77C0\n5440\n57C0\n9440\nB7C0\nENDCHAR\nSTARTCHAR U_814B\nENCODING 33099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5280\n74E0\n5D20\n56A0\n7560\n5540\n5480\n9540\nB620\nENDCHAR\nSTARTCHAR U_814C\nENCODING 33100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5280\n7540\n5FE0\n5540\n77C0\n5540\n57C0\n9120\nB0E0\nENDCHAR\nSTARTCHAR U_814D\nENCODING 33101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7380\n5440\n5A20\n7100\n5FC0\n5040\n7180\n5340\n56A0\n9A40\nB1C0\nENDCHAR\nSTARTCHAR U_814E\nENCODING 33102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n9240\nF980\nFA40\n9420\nFF80\n2080\n3F80\n2080\n3F80\n2180\nENDCHAR\nSTARTCHAR U_814F\nENCODING 33103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5120\n56C0\n7240\n55A0\n5FE0\n7220\n54A0\n5240\n95C0\nB920\nENDCHAR\nSTARTCHAR U_8150\nENCODING 33104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4840\n5FE0\n6A40\n4940\n5FE0\n5220\n5520\n5AA0\n9560\nENDCHAR\nSTARTCHAR U_8151\nENCODING 33105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57E0\n5480\n7520\n57E0\n5520\n75A0\n5560\n5520\n9520\nB960\nENDCHAR\nSTARTCHAR U_8152\nENCODING 33106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5420\n57E0\n7480\n57E0\n5480\n75E0\n5520\n5520\n95E0\nB920\nENDCHAR\nSTARTCHAR U_8153\nENCODING 33107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5280\n5EE0\n7280\n5280\n5EE0\n7280\n5280\n5EE0\n9280\nB280\nENDCHAR\nSTARTCHAR U_8154\nENCODING 33108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5820\n7280\n5440\n5820\n77C0\n5100\n5100\n9100\nBFE0\nENDCHAR\nSTARTCHAR U_8155\nENCODING 33109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5820\n7200\n57E0\n58A0\n75A0\n52E0\n5280\n94A0\nB860\nENDCHAR\nSTARTCHAR U_8156\nENCODING 33110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n4880\n7BE0\n4AA0\n4BE0\n7AA0\n4BE0\n49C0\nAAA0\n94A0\nENDCHAR\nSTARTCHAR U_8157\nENCODING 33111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57C0\n5540\n77C0\n5540\n57C0\n7000\n5FE0\n5240\n5240\nB440\nENDCHAR\nSTARTCHAR U_8158\nENCODING 33112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5420\n57E0\n7520\n57E0\n55A0\n7560\n57E0\n5420\n57E0\nB420\nENDCHAR\nSTARTCHAR U_8159\nENCODING 33113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57E0\n5420\n73C0\n5000\n57E0\n7080\n52C0\n54A0\n94A0\nB180\nENDCHAR\nSTARTCHAR U_815A\nENCODING 33114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57E0\n5420\n77E0\n5100\n5500\n75E0\n5500\n5500\n9B00\nB1E0\nENDCHAR\nSTARTCHAR U_815B\nENCODING 33115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5420\n57E0\n7400\n57E0\n5540\n77E0\n5480\n57E0\n9480\nBBE0\nENDCHAR\nSTARTCHAR U_815C\nENCODING 33116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A40\n4FE0\n4A40\n7BC0\n4A40\n4BC0\n7880\n4FE0\n4980\n8AC0\n9CA0\nENDCHAR\nSTARTCHAR U_815D\nENCODING 33117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5200\n5FE0\n7AA0\n5AA0\n5260\n7FE0\n5300\n5280\n5460\nB840\nENDCHAR\nSTARTCHAR U_815E\nENCODING 33118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n73C0\n5240\n57C0\n7080\n5FE0\n5520\n72C0\n5580\n52C0\n94A0\nB320\nENDCHAR\nSTARTCHAR U_815F\nENCODING 33119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5820\n7FE0\n5240\n5FE0\n7100\n57C0\n5100\n5100\nBFE0\nENDCHAR\nSTARTCHAR U_8160\nENCODING 33120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5200\n77C0\n5200\n5FE0\n77C0\n5920\n5FE0\n9280\n9C60\nENDCHAR\nSTARTCHAR U_8161\nENCODING 33121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE7C0\nA440\nA740\nE540\nAFE0\nA820\nEBA0\nAAA0\nABA0\nA820\nA860\nENDCHAR\nSTARTCHAR U_8162\nENCODING 33122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5540\n57C0\n7540\n57C0\n5100\n77E0\n5560\n57A0\n9420\nB460\nENDCHAR\nSTARTCHAR U_8163\nENCODING 33123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5440\n7280\n5FE0\n5920\n77C0\n5540\n5540\n55C0\nB100\nENDCHAR\nSTARTCHAR U_8164\nENCODING 33124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5440\n7280\n5FE0\n5000\n77C0\n5440\n57C0\n9440\nB7C0\nENDCHAR\nSTARTCHAR U_8165\nENCODING 33125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4A20\n4BE0\n7A20\n4BE0\n4A80\n7BE0\n4C80\n4BE0\n8880\n9FE0\nENDCHAR\nSTARTCHAR U_8166\nENCODING 33126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n72A0\n5540\n52A0\n7200\n57E0\n5420\n76A0\n5520\n56A0\n97E0\nB420\nENDCHAR\nSTARTCHAR U_8167\nENCODING 33127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nA280\nA440\nEBA0\nB000\nAEA0\nEAA0\nAEA0\nAAA0\nAE20\nAAE0\nENDCHAR\nSTARTCHAR U_8168\nENCODING 33128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5540\n5540\n77C0\n5000\n5FE0\n7000\n5FE0\n5AA0\n5AA0\nB860\nENDCHAR\nSTARTCHAR U_8169\nENCODING 33129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA100\nEFE0\nAAA0\nAFE0\nE920\nAFE0\nA920\nA920\nA860\nENDCHAR\nSTARTCHAR U_816A\nENCODING 33130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5920\n57C0\n7100\n57C0\n5540\n77C0\n5540\n5FE0\n5100\nB100\nENDCHAR\nSTARTCHAR U_816B\nENCODING 33131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5100\n5FE0\n7540\n57C0\n5540\n77C0\n5100\n57C0\n9100\nBFE0\nENDCHAR\nSTARTCHAR U_816C\nENCODING 33132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5280\n5100\n7FE0\n5540\n5B00\n7100\n5FE0\n5540\n5920\nB100\nENDCHAR\nSTARTCHAR U_816D\nENCODING 33133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7EE0\n5AA0\n5EE0\n7000\n57C0\n5000\n7FE0\n5200\n57C0\n9040\nB380\nENDCHAR\nSTARTCHAR U_816E\nENCODING 33134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5520\n57E0\n7520\n57E0\n5420\n7140\n56A0\n5A20\n9240\nB1C0\nENDCHAR\nSTARTCHAR U_816F\nENCODING 33135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5480\n57E0\n7480\n55E0\n5520\n75E0\n5520\n55E0\n9520\nB9E0\nENDCHAR\nSTARTCHAR U_8170\nENCODING 33136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA280\nAFE0\nEAA0\nAFE0\nA100\nEFE0\nA240\nA680\nA1C0\nAE20\nENDCHAR\nSTARTCHAR U_8171\nENCODING 33137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\n5FE0\n54A0\n75E0\n54A0\n5FE0\n7280\n5BE0\n5480\n9680\nB9E0\nENDCHAR\nSTARTCHAR U_8172\nENCODING 33138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5520\n57E0\n7520\n57E0\n5000\n7FE0\n54A0\n54C0\n9540\nB620\nENDCHAR\nSTARTCHAR U_8173\nENCODING 33139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEAE0\nAAA0\nB1A0\nE4A0\nAAA0\nB1A0\nE0A0\nAEA0\nAAE0\nAA80\nAE80\nENDCHAR\nSTARTCHAR U_8174\nENCODING 33140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAD60\nA920\nEFE0\nA920\nAFE0\nE920\nA100\nA280\nA440\nA820\nENDCHAR\nSTARTCHAR U_8175\nENCODING 33141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7760\n5520\n5520\n7760\n5400\n57E0\n74A0\n57A0\n5440\n54A0\nB520\nENDCHAR\nSTARTCHAR U_8176\nENCODING 33142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n76E0\n54A0\n54A0\n7720\n5400\n57E0\n74A0\n57A0\n5C40\n94A0\nB520\nENDCHAR\nSTARTCHAR U_8177\nENCODING 33143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5000\n53C0\n7240\n53C0\n5000\n77E0\n54A0\n57E0\n94A0\nB7E0\nENDCHAR\nSTARTCHAR U_8178\nENCODING 33144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5440\n57C0\n7440\n5FE0\n5400\n77E0\n5AA0\n52A0\n9520\nBAC0\nENDCHAR\nSTARTCHAR U_8179\nENCODING 33145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7400\n57E0\n5C40\n77C0\n5440\n57C0\n7200\n57C0\n5A40\n9180\nB660\nENDCHAR\nSTARTCHAR U_817A\nENCODING 33146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n57C0\n5440\n77C0\n5440\n57C0\n7100\n5FA0\n5540\n9920\nB300\nENDCHAR\nSTARTCHAR U_817B\nENCODING 33147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE0A0\nBFE0\nA080\nEE80\nA080\nAF80\nEA80\nAA80\nAAA0\nA560\nA8A0\nENDCHAR\nSTARTCHAR U_817C\nENCODING 33148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA100\nAFE0\nEAA0\nABA0\nAAA0\nEAA0\nABA0\nAAA0\nAFE0\nA820\nENDCHAR\nSTARTCHAR U_817D\nENCODING 33149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE7C0\nA440\nA7C0\nE440\nA7C0\nA000\nEFE0\nAAA0\nAAA0\nAAA0\nBFE0\nENDCHAR\nSTARTCHAR U_817E\nENCODING 33150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7540\n5FE0\n5200\n7FE0\n5440\n5FA0\n7480\n57E0\n5020\n97A0\nB040\nENDCHAR\nSTARTCHAR U_817F\nENCODING 33151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n71E0\n5920\n55E0\n7120\n5DE0\n5500\n75A0\n5540\n5520\n9580\nBBE0\nENDCHAR\nSTARTCHAR U_8180\nENCODING 33152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5440\n7280\n5FE0\n5920\n7FE0\n5200\n53E0\n9420\nB9C0\nENDCHAR\nSTARTCHAR U_8181\nENCODING 33153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7480\n5FC0\n5500\n7FC0\n5540\n5FE0\n7540\n5FC0\n5580\n5D40\nB520\nENDCHAR\nSTARTCHAR U_8182\nENCODING 33154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFFE0\n2B20\n4AC0\n9240\n3FA0\n2080\n3F80\n2080\n3F80\n2180\nENDCHAR\nSTARTCHAR U_8183\nENCODING 33155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE7C0\nA540\nA6C0\nE440\nA7C0\nA000\nEFE0\nAAA0\nAAA0\nAAA0\nBFE0\nENDCHAR\nSTARTCHAR U_8184\nENCODING 33156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7760\n5520\n5760\n7520\n57E0\n5100\n77E0\n5240\n5180\n5280\nBC60\nENDCHAR\nSTARTCHAR U_8185\nENCODING 33157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57E0\n5500\n77C0\n5540\n57E0\n7500\n5500\n57C0\n5A40\nBBC0\nENDCHAR\nSTARTCHAR U_8186\nENCODING 33158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5100\n77C0\n5100\n5FE0\n7280\n5540\n5FA0\n9540\nBB20\nENDCHAR\nSTARTCHAR U_8187\nENCODING 33159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\n59E0\n5520\n71E0\n5D00\n55E0\n7520\n55E0\n5520\n9400\nBBE0\nENDCHAR\nSTARTCHAR U_8188\nENCODING 33160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA000\nA7C0\nE440\nA7C0\nA000\nEFE0\nAAA0\nAFE0\nA920\nB960\nENDCHAR\nSTARTCHAR U_8189\nENCODING 33161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE440\nA280\nAFE0\nE280\nA440\nA820\nEFE0\nAAA0\nAAA0\nAAA0\nBFE0\nENDCHAR\nSTARTCHAR U_818A\nENCODING 33162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7140\n5FE0\n5520\n77E0\n5520\n57E0\n7520\n5FE0\n5440\n9240\nB0C0\nENDCHAR\nSTARTCHAR U_818B\nENCODING 33163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n52A0\n94A0\n2940\n4620\nFFE0\nA0A0\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_818C\nENCODING 33164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7940\n5580\n5340\n7EA0\n5440\n5FE0\n7440\n57C0\n5440\n97C0\nB4C0\nENDCHAR\nSTARTCHAR U_818D\nENCODING 33165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57E0\n56A0\n7520\n56A0\n57E0\n7480\n57A0\n54C0\n97A0\nB460\nENDCHAR\nSTARTCHAR U_818E\nENCODING 33166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n70C0\n5F40\n5540\n7280\n5500\n57C0\n7140\n5FE0\n5280\n5460\nB840\nENDCHAR\nSTARTCHAR U_818F\nENCODING 33167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1080\nFFE0\n9120\n3F80\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_8190\nENCODING 33168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA40\n2580\n3AA0\n4B60\nFFA0\n2480\n2A80\n2480\n2A80\n2180\nENDCHAR\nSTARTCHAR U_8191\nENCODING 33169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\n57E0\n5420\n7380\n5200\n53E0\n7280\n5280\n57E0\n9240\nB420\nENDCHAR\nSTARTCHAR U_8192\nENCODING 33170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5400\n55C0\n7540\n55C0\n5400\n77E0\n56A0\n57E0\n5400\nB7E0\nENDCHAR\nSTARTCHAR U_8193\nENCODING 33171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7400\n57E0\n5C40\n77C0\n5440\n5FE0\n7400\n57E0\n5AA0\n5520\nB2C0\nENDCHAR\nSTARTCHAR U_8194\nENCODING 33172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nAA80\nEFE0\nAAA0\nAFE0\nEA80\nABA0\nAAC0\nB3A0\nB2E0\nENDCHAR\nSTARTCHAR U_8195\nENCODING 33173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA960\nAFE0\nE920\nAF20\nAB60\nEEA0\nA9E0\nAE60\nA820\nAFE0\nENDCHAR\nSTARTCHAR U_8196\nENCODING 33174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5BE0\n5540\n7480\n5F60\n7480\n57E0\n5480\n57E0\n5480\nBFE0\nENDCHAR\nSTARTCHAR U_8197\nENCODING 33175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7520\n5520\n57E0\n7280\n57E0\n5480\n7FE0\n5480\n57E0\n9480\nB7E0\nENDCHAR\nSTARTCHAR U_8198\nENCODING 33176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA280\nAFE0\nEAA0\nAFE0\nA000\nE7C0\nA000\nAFE0\nA540\nBB20\nENDCHAR\nSTARTCHAR U_8199\nENCODING 33177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n5520\n55E0\n7480\n5BE0\n5AA0\n7EA0\n57E0\n5480\n94A0\nBBE0\nENDCHAR\nSTARTCHAR U_819A\nENCODING 33178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n5240\n5FC0\n5240\n5FC0\n5080\n5F80\n9080\n9180\nENDCHAR\nSTARTCHAR U_819B\nENCODING 33179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7920\n5540\n5FE0\n7820\n57C0\n5440\n77C0\n5100\n57C0\n5100\nBFE0\nENDCHAR\nSTARTCHAR U_819C\nENCODING 33180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5FE0\n5280\n77C0\n5440\n57C0\n7440\n5FE0\n5100\n9280\nBC60\nENDCHAR\nSTARTCHAR U_819D\nENCODING 33181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5540\n7920\n5380\n5540\n7D60\n5380\n5540\n9920\nB300\nENDCHAR\nSTARTCHAR U_819E\nENCODING 33182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5540\n77C0\n5540\n57C0\n7520\n5FE0\n5480\n9280\nB100\nENDCHAR\nSTARTCHAR U_819F\nENCODING 33183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57E0\n5920\n7740\n5140\n56A0\n7BC0\n5100\n5FE0\n9100\nB100\nENDCHAR\nSTARTCHAR U_81A0\nENCODING 33184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5AA0\n5660\n7AA0\n5100\n56C0\n7AA0\n5500\n5240\n9480\nB300\nENDCHAR\nSTARTCHAR U_81A1\nENCODING 33185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7540\n57C0\n5100\n7FE0\n5280\n7440\n5FE0\n5440\n57C0\n5440\nB7C0\nENDCHAR\nSTARTCHAR U_81A2\nENCODING 33186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57C0\n5D60\n77C0\n5540\n57C0\n7540\n5FE0\n5240\n9180\nBE60\nENDCHAR\nSTARTCHAR U_81A3\nENCODING 33187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5AA0\n7440\n5FE0\n5440\n7FE0\n5100\n57C0\n9100\nBFE0\nENDCHAR\nSTARTCHAR U_81A4\nENCODING 33188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n5100\n5FE0\n7920\n5540\n7100\n57C0\n5040\n57C0\n9040\nB7C0\nENDCHAR\nSTARTCHAR U_81A5\nENCODING 33189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20A0\nFFE0\n2480\nFFA0\n7540\nAAA0\n7FC0\n4A40\n5540\n4A40\n51C0\nENDCHAR\nSTARTCHAR U_81A6\nENCODING 33190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7920\n5540\n5FE0\n7540\n5920\n5440\n77E0\n5D40\n53E0\n9440\nB840\nENDCHAR\nSTARTCHAR U_81A7\nENCODING 33191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5440\n7280\n5FE0\n5540\n77C0\n5540\n5FE0\n9100\nBFE0\nENDCHAR\nSTARTCHAR U_81A8\nENCODING 33192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7220\n5FA0\n5240\n7780\n5020\n5740\n7580\n5700\n5520\n9240\nBF80\nENDCHAR\nSTARTCHAR U_81A9\nENCODING 33193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n70A0\n5FE0\n5080\n7F80\n5480\n5780\n7480\n57A0\n55A0\n9760\nBDA0\nENDCHAR\nSTARTCHAR U_81AA\nENCODING 33194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5280\n7FE0\n5920\n57C0\n7540\n5540\n57C0\n9440\nB7C0\nENDCHAR\nSTARTCHAR U_81AB\nENCODING 33195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5AA0\n77C0\n5C60\n57C0\n7440\n57C0\n5580\n9940\nB320\nENDCHAR\nSTARTCHAR U_81AC\nENCODING 33196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5100\n57C0\n7100\n57C0\n5120\n7FE0\n5480\n5FE0\n94A0\nB360\nENDCHAR\nSTARTCHAR U_81AD\nENCODING 33197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57C0\n5540\n7FE0\n5440\n77C0\n5440\n57C0\n5440\n97C0\nBC60\nENDCHAR\nSTARTCHAR U_81AE\nENCODING 33198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n57C0\n5100\n7FE0\n5440\n5EE0\n7440\n5FE0\n5280\n94A0\nB860\nENDCHAR\nSTARTCHAR U_81AF\nENCODING 33199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7740\n52A0\n56C0\n7440\n5BA0\n5000\n77C0\n5440\n57C0\n5280\nB7E0\nENDCHAR\nSTARTCHAR U_81B0\nENCODING 33200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n70C0\n5F20\n5540\n7FE0\n5540\n5920\n77C0\n5540\n57C0\n9540\nB7C0\nENDCHAR\nSTARTCHAR U_81B1\nENCODING 33201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE480\nBFC0\nAAA0\nFFE0\nA080\nAEA0\nEAC0\nAE80\nAAA0\nAF60\nA220\nENDCHAR\nSTARTCHAR U_81B2\nENCODING 33202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7480\n57E0\n5480\n7FE0\n5480\n57E0\n5480\n77E0\n5540\n9AA0\nB2A0\nENDCHAR\nSTARTCHAR U_81B3\nENCODING 33203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5FE0\n5100\n77C0\n5100\n5FE0\n7280\n5FE0\n5440\n97C0\nB440\nENDCHAR\nSTARTCHAR U_81B4\nENCODING 33204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7400\n5FE0\n5540\n7540\n5FE0\n5540\n7540\n5FE0\n5000\n9540\nBAA0\nENDCHAR\nSTARTCHAR U_81B5\nENCODING 33205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5FE0\n5280\n7FE0\n5240\n5480\n7B40\n5100\n5FE0\n9100\nB100\nENDCHAR\nSTARTCHAR U_81B6\nENCODING 33206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nAEE0\nEAA0\nAEE0\nABA0\nE920\nABA0\nA920\nABA0\nA860\nENDCHAR\nSTARTCHAR U_81B7\nENCODING 33207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEAE0\nABA0\nB2A0\nFFC0\nAAC0\nABA0\nFEA0\nA6A0\nAAC0\nAB80\nA880\nENDCHAR\nSTARTCHAR U_81B8\nENCODING 33208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\nAFE0\nA100\nE3E0\nBC80\nABE0\nE940\nA9C0\nA940\nAD40\nB3E0\nENDCHAR\nSTARTCHAR U_81B9\nENCODING 33209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5540\n7FE0\n5440\n57C0\n7440\n57C0\n5440\n97C0\nBC60\nENDCHAR\nSTARTCHAR U_81BA\nENCODING 33210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5480\n77E0\n5C80\n57E0\n5480\n5FE0\n5040\nDFC0\n90C0\nENDCHAR\nSTARTCHAR U_81BB\nENCODING 33211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nBFE0\nAB40\nE840\nAFC0\nA000\nE7C0\nA440\nA7C0\nA440\nAFE0\nENDCHAR\nSTARTCHAR U_81BC\nENCODING 33212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\nAA40\nAB40\nE7E0\nBC20\nAFA0\nEEA0\nAFA0\nAC20\nAC60\nB3E0\nENDCHAR\nSTARTCHAR U_81BD\nENCODING 33213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE780\nAFE0\nBA40\nECA0\nABE0\nA800\nEBC0\nA800\nABE0\nAA20\nB3E0\nENDCHAR\nSTARTCHAR U_81BE\nENCODING 33214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7300\n5480\n5FC0\n7020\n5FE0\n5AA0\n7FE0\n5440\n57C0\n9440\nB7C0\nENDCHAR\nSTARTCHAR U_81BF\nENCODING 33215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE280\nAFE0\nAAA0\nEFE0\nAAA0\nAFE0\nE800\nAFE0\nAAA0\nAA40\nB320\nENDCHAR\nSTARTCHAR U_81C0\nENCODING 33216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\n8540\nFE20\nA9C0\nFC80\nAB60\n7F80\n2080\n3F80\n2080\n2180\nENDCHAR\nSTARTCHAR U_81C1\nENCODING 33217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nAA80\nEFE0\nAAA0\nAFE0\nEAA0\nAFE0\nAA80\nB6C0\nAAA0\nENDCHAR\nSTARTCHAR U_81C2\nENCODING 33218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n47E0\n7D40\n4BE0\n4880\nBF80\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_81C3\nENCODING 33219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n54C0\n7B40\n5DE0\n5740\n79E0\n5F40\n53E0\n9540\nB9E0\nENDCHAR\nSTARTCHAR U_81C4\nENCODING 33220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n71E0\n5100\n57E0\n7520\n57C0\n5520\n77E0\n5540\n5680\n99C0\nB6A0\nENDCHAR\nSTARTCHAR U_81C5\nENCODING 33221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nAAA0\nAFE0\nE400\nA7E0\nBA20\nEFA0\nAAA0\nAFA0\nA2A0\nAF40\nENDCHAR\nSTARTCHAR U_81C6\nENCODING 33222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5280\n7FE0\n5440\n57C0\n7440\n57C0\n5340\n96A0\nBBA0\nENDCHAR\nSTARTCHAR U_81C7\nENCODING 33223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE500\nAFE0\nA900\nFFE0\nA900\nAFE0\nE900\nAEE0\nAAA0\nABA0\nA860\nENDCHAR\nSTARTCHAR U_81C8\nENCODING 33224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7240\n5FE0\n5240\n57C0\n7640\n5540\n57E0\n7920\n56A0\n97A0\nB060\nENDCHAR\nSTARTCHAR U_81C9\nENCODING 33225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7300\n5480\n5840\n77A0\n5000\n5EE0\n7AA0\n5EE0\n5440\n9AC0\nB120\nENDCHAR\nSTARTCHAR U_81CA\nENCODING 33226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE7C0\nA440\nA7C0\nE000\nAEE0\nAAA0\nEEE0\nA100\nAFE0\nA540\nB920\nENDCHAR\nSTARTCHAR U_81CB\nENCODING 33227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DC0\n4540\n7E20\n51C0\n7C80\nA960\n7FC0\n4A40\n5540\n4A40\n5140\nENDCHAR\nSTARTCHAR U_81CC\nENCODING 33228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE440\nBF40\nA4E0\nFF40\nA0E0\nAEA0\nEAA0\nAEA0\nAA40\nA4A0\nBF20\nENDCHAR\nSTARTCHAR U_81CD\nENCODING 33229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nBFE0\nAAA0\nED40\nB560\nA540\nEFC0\nA840\nAFC0\nA840\nB040\nENDCHAR\nSTARTCHAR U_81CE\nENCODING 33230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7EE0\n5AA0\n5660\n7AA0\n5FE0\n5440\n7AA0\n5100\n5FE0\n9100\nB100\nENDCHAR\nSTARTCHAR U_81CF\nENCODING 33231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5820\n77C0\n5540\n5FC0\n7440\n57C0\n5440\n97C0\nBC60\nENDCHAR\nSTARTCHAR U_81D0\nENCODING 33232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n5100\n5FE0\n76A0\n5520\n57E0\n7100\n5FC0\n5100\n9FE0\nBAA0\nENDCHAR\nSTARTCHAR U_81D1\nENCODING 33233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA100\nAFE0\nE920\nA7C0\nA920\nEFE0\nA100\nAFE0\nAAA0\nAAA0\nENDCHAR\nSTARTCHAR U_81D2\nENCODING 33234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7240\n5FE0\n5480\n7FE0\n5480\n57E0\n7480\n57E0\n5240\n9180\nB660\nENDCHAR\nSTARTCHAR U_81D3\nENCODING 33235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0240\n77E0\n50A0\n57E0\n7540\n57A0\n54C0\n77A0\n5540\n97E0\nA920\nENDCHAR\nSTARTCHAR U_81D4\nENCODING 33236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n54A0\n5740\n75A0\n57E0\n5440\n77C0\n5440\n57C0\n5440\nB820\nENDCHAR\nSTARTCHAR U_81D5\nENCODING 33237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nAAA0\nEFE0\nAA40\nABE0\nEA40\nAB60\nA800\nAD40\nB2A0\nENDCHAR\nSTARTCHAR U_81D6\nENCODING 33238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6EC0\n4A40\n6EC0\n4A40\n6EC0\nFFE0\n2080\n7FC0\nA0A0\n3F80\n2080\nENDCHAR\nSTARTCHAR U_81D7\nENCODING 33239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n5FE0\n5AA0\n7FE0\n5280\n57C0\n7540\n5540\n57C0\n92A0\nBCE0\nENDCHAR\nSTARTCHAR U_81D8\nENCODING 33240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7540\n5A80\n5540\n7FE0\n5AA0\n5FE0\n77C0\n5540\n57C0\n9540\nB7A0\nENDCHAR\nSTARTCHAR U_81D9\nENCODING 33241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n5FE0\n5280\n7380\n5440\n5F60\n7540\n5540\n5F60\n9540\nBAA0\nENDCHAR\nSTARTCHAR U_81DA\nENCODING 33242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE3C0\nA200\nAFE0\nEA20\nAFE0\nA940\nEFC0\nA940\nB7E0\nAAA0\nAFE0\nENDCHAR\nSTARTCHAR U_81DB\nENCODING 33243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFC0\nA100\nAFE0\nE920\nA540\nA920\nEFE0\nB900\nAFE0\nA900\nAFE0\nENDCHAR\nSTARTCHAR U_81DC\nENCODING 33244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7540\n5FE0\n5540\n7FE0\n5AA0\n77C0\n5440\n5540\n5540\nD280\nAC60\nENDCHAR\nSTARTCHAR U_81DD\nENCODING 33245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4000\n7F80\n2080\nFFC0\nA540\nFF40\nA5C0\nFF40\nAD40\nB660\nENDCHAR\nSTARTCHAR U_81DE\nENCODING 33246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nAEE0\nEAA0\nAEE0\nA500\nEFE0\nA900\nBFE0\nA900\nAFE0\nENDCHAR\nSTARTCHAR U_81DF\nENCODING 33247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE480\nBFE0\nA4A0\nFFE0\nBA80\nAFA0\nF960\nBF40\nAA40\nAFA0\nB120\nENDCHAR\nSTARTCHAR U_81E0\nENCODING 33248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nAEA0\n4040\nAEA0\nC0E0\n5E40\nAAA0\n7FC0\n4A40\n5540\n4AC0\nENDCHAR\nSTARTCHAR U_81E1\nENCODING 33249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\nFBE0\n5680\nFBE0\nAA80\nFBE0\n5480\nFFE0\n4A40\n5540\n4AC0\nENDCHAR\nSTARTCHAR U_81E2\nENCODING 33250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nD540\nBFE0\nA540\nFFE0\nAAA0\nB7E0\nE440\nA7C0\nA440\nA7C0\nA820\nENDCHAR\nSTARTCHAR U_81E3\nENCODING 33251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n3FC0\n2200\n2200\n3FC0\n2040\n2040\n3FC0\n2200\n2200\n3FE0\nENDCHAR\nSTARTCHAR U_81E4\nENCODING 33252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFBC0\n9240\n9240\nFA40\n8940\nF980\n9080\n9180\nFE40\n0420\nENDCHAR\nSTARTCHAR U_81E5\nENCODING 33253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n9080\n9080\nFC80\n8480\n8480\nFC80\n9140\n9140\nFA20\n0420\nENDCHAR\nSTARTCHAR U_81E6\nENCODING 33254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2A80\n2A80\nFBE0\n8A20\n8A20\nFBE0\nAAA0\n2A80\n2A80\nFBE0\nENDCHAR\nSTARTCHAR U_81E7\nENCODING 33255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00A0\n5FE0\n5080\n5F80\n74A0\n1EA0\nF2C0\n5E80\n54A0\n9F60\n2220\nENDCHAR\nSTARTCHAR U_81E8\nENCODING 33256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF400\nA7E0\nA800\nF3C0\n9240\n93C0\nF000\nAEE0\nAAA0\nAAA0\nFEE0\nENDCHAR\nSTARTCHAR U_81E9\nENCODING 33257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2A80\nFBE0\n8A20\nFBE0\n2A80\nFFE0\n1100\n2980\nC960\n3100\nENDCHAR\nSTARTCHAR U_81EA\nENCODING 33258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n2080\n3F80\n2080\n3F80\n2080\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_81EB\nENCODING 33259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n7A00\n4A00\n7A00\n4A00\n7A00\n4A00\n4A00\n7A20\n49E0\nENDCHAR\nSTARTCHAR U_81EC\nENCODING 33260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3F80\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_81ED\nENCODING 33261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3F80\n0480\nFFE0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_81EE\nENCODING 33262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3F80\n01C0\n7E00\n2480\n5540\n8E20\nENDCHAR\nSTARTCHAR U_81EF\nENCODING 33263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3F80\n2480\n1500\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_81F0\nENCODING 33264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\nFFE0\n2200\n3A40\nEB80\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_81F1\nENCODING 33265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2880\n2480\nFFE0\nA4A0\n5F40\n0800\n0F80\n1080\n6380\nENDCHAR\nSTARTCHAR U_81F2\nENCODING 33266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nF3C0\n9480\nFFE0\n9400\nF5C0\n2540\nFD40\n25C0\n7520\nA9E0\nENDCHAR\nSTARTCHAR U_81F3\nENCODING 33267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0800\n1100\n2080\n7FC0\n0400\n0400\n3F80\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_81F4\nENCODING 33268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n2100\n29E0\n4A40\n7540\n1140\n7D40\n1140\n1080\n1D40\nE220\nENDCHAR\nSTARTCHAR U_81F5\nENCODING 33269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFBC0\n2240\n4D80\nF980\n2240\n77E0\n2240\n3A40\nE3C0\n4240\nENDCHAR\nSTARTCHAR U_81F6\nENCODING 33270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\n2400\n57E0\nFC40\n2480\nFFE0\n2480\n2480\n3C80\nC580\nENDCHAR\nSTARTCHAR U_81F7\nENCODING 33271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D40\n1120\nFFE0\n0100\nFD40\n2940\n7D40\n10A0\n7CA0\n1160\nFE20\nENDCHAR\nSTARTCHAR U_81F8\nENCODING 33272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2100\n4900\nF640\n23A0\n2080\nF880\n23E0\n2080\n3880\nC7E0\nENDCHAR\nSTARTCHAR U_81F9\nENCODING 33273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0C0\n40A0\nAFE0\nF880\n48A0\n4EA0\nFAC0\n4A80\n4EA0\nF960\n1220\nENDCHAR\nSTARTCHAR U_81FA\nENCODING 33274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n3FC0\n1080\nFFE0\n8920\n1480\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_81FB\nENCODING 33275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2100\n57C0\nF100\n2FE0\nF540\n2FE0\n2380\n3540\nC920\nENDCHAR\nSTARTCHAR U_81FC\nENCODING 33276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n71E0\n4020\n4020\n4020\n7DE0\n4020\n4020\n4020\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_81FD\nENCODING 33277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3FC0\n4080\n8100\n0800\n71C0\n4040\n79C0\n4040\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_81FE\nENCODING 33278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n65C0\n4440\n75C0\n4440\n4440\n7FC0\n4440\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_81FF\nENCODING 33279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n7C00\n0400\nFFE0\n1400\n65C0\n4440\n75C0\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_8200\nENCODING 33280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nFF00\n4840\n2480\n2500\n73C0\n4040\n7BC0\n4040\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_8201\nENCODING 33281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n73C0\n4040\n7BC0\n4040\n7FC0\n4040\n1100\nFFE0\n1100\n2100\nC100\nENDCHAR\nSTARTCHAR U_8202\nENCODING 33282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\n3F80\n0800\nFFE0\n2080\n5BC0\nA0A0\n3B80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8203\nENCODING 33283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n73C0\n4040\n7DC0\n4040\n7FC0\n2000\n3FE0\n0020\n6AA0\n9560\nENDCHAR\nSTARTCHAR U_8204\nENCODING 33284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79C0\n4040\n79C0\n4040\n7FC0\n1000\n3FE0\nC020\n2AA0\n4AA0\n0040\nENDCHAR\nSTARTCHAR U_8205\nENCODING 33285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4040\n79C0\n4040\n7FC0\n2480\n3F80\n2480\n7FE0\n0820\n70C0\nENDCHAR\nSTARTCHAR U_8206\nENCODING 33286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n6EC0\n4840\n74C0\n5E40\n4440\n6EC0\n4440\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_8207\nENCODING 33287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\n6EC0\n4840\n7FC0\n4240\n4A40\n7BC0\n4A40\nFFE0\n2080\nC060\nENDCHAR\nSTARTCHAR U_8208\nENCODING 33288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n71C0\n5F40\n71C0\n5D40\n75C0\n5D40\n5140\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_8209\nENCODING 33289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6EC0\n4840\n6EC0\n62C0\n4A40\nFFE0\n2480\n7FC0\n8420\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_820A\nENCODING 33290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0A80\n3FE0\n6200\nBFC0\n2200\n3FE0\n2040\n3DC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_820B\nENCODING 33291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n5140\n5F40\n7FC0\n5540\n5540\nFFE0\nA0A0\n3F80\n2080\nFFE0\nENDCHAR\nSTARTCHAR U_820C\nENCODING 33292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n3E00\n0200\n7FE0\n0200\n0200\n1FC0\n1040\n1040\n1FC0\n1040\nENDCHAR\nSTARTCHAR U_820D\nENCODING 33293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1100\n3F80\nC460\n3F80\n0400\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_820E\nENCODING 33294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1B00\n64C0\n9F20\n0400\n7FE0\n0000\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_820F\nENCODING 33295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0020\n7D20\n1120\nFD20\n1120\n7D60\n45A0\n4520\n4420\n7C20\n4420\nENDCHAR\nSTARTCHAR U_8210\nENCODING 33296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0820\nF3C0\n2280\nFA80\n23E0\n2280\n7A80\n4AA0\n4AA0\n7B60\n4A20\nENDCHAR\nSTARTCHAR U_8211\nENCODING 33297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nE7C0\n4540\n47C0\nF540\n4540\nFFE0\n9440\n9440\nF440\n94C0\nENDCHAR\nSTARTCHAR U_8212\nENCODING 33298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n2840\n4580\nB880\n13E0\nFCA0\n10C0\n7C80\n4480\n4480\n7D80\nENDCHAR\nSTARTCHAR U_8213\nENCODING 33299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1BC0\n6240\n23C0\nFA40\n23C0\n7A00\n4BE0\n4D60\n4AA0\n7920\n4A40\nENDCHAR\nSTARTCHAR U_8214\nENCODING 33300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\nE100\n2FE0\n2280\nF540\n2920\nF540\n95A0\n9560\nF900\n9300\nENDCHAR\nSTARTCHAR U_8215\nENCODING 33301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1520\nE540\n4900\n4180\nFA40\n4520\nF140\n9580\n9A80\nF440\n9820\nENDCHAR\nSTARTCHAR U_8216\nENCODING 33302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n5120\n8FE0\nF900\n27E0\nFD20\n27E0\nF520\n97E0\nF520\n9560\nENDCHAR\nSTARTCHAR U_8217\nENCODING 33303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n50A0\nABE0\nF880\n23E0\nFAA0\n03E0\nFAA0\n8BE0\nFAA0\n8A60\nENDCHAR\nSTARTCHAR U_8218\nENCODING 33304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8C20\nFBC0\n2240\nFBC0\n2200\nFBE0\n8A20\nFBE0\n8A20\nENDCHAR\nSTARTCHAR U_8219\nENCODING 33305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n2080\n3F80\n0000\nFBE0\n2080\nFFE0\n4A40\n7BC0\nENDCHAR\nSTARTCHAR U_821A\nENCODING 33306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n33C0\nC480\n47E0\nF540\n47E0\nF400\n97E0\n9400\n95E0\nF520\n99E0\nENDCHAR\nSTARTCHAR U_821B\nENCODING 33307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n3BE0\n4880\n4A80\nBA80\n0FE0\n1080\n2080\n4080\n8080\nENDCHAR\nSTARTCHAR U_821C\nENCODING 33308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n7E40\n2480\nFFE0\nA0A0\n3BE0\n4A80\nAA80\n17E0\n2080\nC080\nENDCHAR\nSTARTCHAR U_821D\nENCODING 33309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7F80\n1080\nFFE0\n4900\nFFE0\n9120\n7FC0\n2400\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_821E\nENCODING 33310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FE0\nAA80\nFFE0\n2A80\nFFE0\n2080\n3BE0\nCA80\n37E0\nC080\nENDCHAR\nSTARTCHAR U_821F\nENCODING 33311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1F80\n1080\n1480\n1280\nFFE0\n1480\n1280\n2280\n4080\n8380\nENDCHAR\nSTARTCHAR U_8220\nENCODING 33312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7FE0\n4920\n6920\n5920\n4920\nF920\n6920\n5920\n4AA0\n9C40\nENDCHAR\nSTARTCHAR U_8221\nENCODING 33313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7BE0\n4880\n6880\n5880\n4880\nF880\n6880\n5880\n4880\n9FE0\nENDCHAR\nSTARTCHAR U_8222\nENCODING 33314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7880\n4880\n6AA0\n5AA0\n4AA0\nFAA0\n6AA0\n5AA0\n4BE0\n9A20\nENDCHAR\nSTARTCHAR U_8223\nENCODING 33315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7540\n5540\n7440\n5440\nF280\n5280\n7100\n5280\n5440\nB820\nENDCHAR\nSTARTCHAR U_8224\nENCODING 33316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7780\n5480\n7480\n5680\nF580\n5480\n7480\n54A0\n54A0\nB860\nENDCHAR\nSTARTCHAR U_8225\nENCODING 33317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7BE0\n4AA0\n6AA0\n5AA0\n4BE0\nFA20\n6A00\n5A20\n4A20\n99E0\nENDCHAR\nSTARTCHAR U_8226\nENCODING 33318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7100\n5100\n7FE0\n5100\nF100\n5280\n7280\n5240\n5540\nB820\nENDCHAR\nSTARTCHAR U_8227\nENCODING 33319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7780\n5480\n7480\n5480\nF680\n5580\n7480\n54A0\n54A0\nB860\nENDCHAR\nSTARTCHAR U_8228\nENCODING 33320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n7BC0\n4A00\n6BE0\n5AA0\n4AA0\nFAA0\n6AA0\n5A40\n4CA0\n9920\nENDCHAR\nSTARTCHAR U_8229\nENCODING 33321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7280\n5280\n7280\n5440\nF540\n5920\n7200\n5440\n5FE0\nB440\nENDCHAR\nSTARTCHAR U_822A\nENCODING 33322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7880\n4FE0\n6800\n5B80\nFA80\n4A80\n6A80\n5AA0\n4AA0\n9CE0\nENDCHAR\nSTARTCHAR U_822B\nENCODING 33323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7880\n4FE0\n6900\n59E0\nF920\n4920\n6920\n5A20\n4AA0\n9C40\nENDCHAR\nSTARTCHAR U_822C\nENCODING 33324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n7A40\n4A40\n6A60\n5C00\nFBE0\n4A20\n6940\n5880\n4940\n9A20\nENDCHAR\nSTARTCHAR U_822D\nENCODING 33325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7A80\n4A80\n6AA0\n5BC0\n4A80\nFA80\n6A80\n5AA0\n4BA0\n9AE0\nENDCHAR\nSTARTCHAR U_822E\nENCODING 33326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7880\n4BE0\n7A20\n4A20\nFBE0\n4A20\n7A00\n4A00\n6C00\n9400\nENDCHAR\nSTARTCHAR U_822F\nENCODING 33327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7880\n4BE0\n6AA0\n5AA0\n4AA0\nFBE0\n6AA0\n5880\n4880\n9880\nENDCHAR\nSTARTCHAR U_8230\nENCODING 33328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n77C0\n5440\n7540\n5540\nF540\n5540\n7540\n52A0\n52A0\nBC60\nENDCHAR\nSTARTCHAR U_8231\nENCODING 33329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7940\n4A20\n6C00\n5BC0\n4A40\nFA40\n6AC0\n5A20\n4A20\n99E0\nENDCHAR\nSTARTCHAR U_8232\nENCODING 33330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7100\n5280\n7640\n5920\nF100\n5FE0\n7040\n5280\n5100\nB080\nENDCHAR\nSTARTCHAR U_8233\nENCODING 33331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7880\n4BE0\n6AA0\n5AA0\n4BE0\nFAA0\n6AA0\n5AA0\n4BE0\n9A20\nENDCHAR\nSTARTCHAR U_8234\nENCODING 33332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7900\n4BE0\n6D00\n5900\n49E0\nF900\n69E0\n5900\n4900\n9900\nENDCHAR\nSTARTCHAR U_8235\nENCODING 33333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7880\n4FE0\n6C20\n5920\n4940\nF980\n6900\n5920\n4920\n98E0\nENDCHAR\nSTARTCHAR U_8236\nENCODING 33334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7900\n4BE0\n6A20\n5A20\n4BE0\nFA20\n6A20\n5A20\n4BE0\n9A20\nENDCHAR\nSTARTCHAR U_8237\nENCODING 33335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7880\n4FE0\n6900\n5A40\nFFC0\n4880\n6900\n5A40\n4FE0\n9820\nENDCHAR\nSTARTCHAR U_8238\nENCODING 33336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n7040\n5040\n7740\n5540\nF540\n5740\n7540\n5040\n5040\nB0C0\nENDCHAR\nSTARTCHAR U_8239\nENCODING 33337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n7A40\n4A40\n6A40\n5A60\n4C00\nFBE0\n6A20\n5A20\n4BE0\n9A20\nENDCHAR\nSTARTCHAR U_823A\nENCODING 33338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n7AA0\n4AA0\n6BE0\n5AA0\n4AA0\nFBE0\n6AA0\n5880\n4880\n9880\nENDCHAR\nSTARTCHAR U_823B\nENCODING 33339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n78E0\n4880\n6BE0\n5A20\n4A20\nFBE0\n6A20\n5A00\n4C00\n9800\nENDCHAR\nSTARTCHAR U_823C\nENCODING 33340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n7A40\n4A40\n6FE0\n5A40\n4A40\nFFE0\n6800\n5A40\n4C20\n9820\nENDCHAR\nSTARTCHAR U_823D\nENCODING 33341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7BC0\n4E40\n6980\n5A40\n4CA0\nFFE0\n6C80\n5FE0\n4880\n9880\nENDCHAR\nSTARTCHAR U_823E\nENCODING 33342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n7140\n5140\n77E0\n5560\nF560\n5560\n7660\n5420\n57E0\nB420\nENDCHAR\nSTARTCHAR U_823F\nENCODING 33343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n4A80\n6C40\n5BA0\n4800\nFFE0\n6900\n5BE0\n4820\n99C0\nENDCHAR\nSTARTCHAR U_8240\nENCODING 33344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n7F80\n4AA0\n6940\n5BE0\n4840\nF880\n6FE0\n5880\n4880\n9980\nENDCHAR\nSTARTCHAR U_8241\nENCODING 33345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7A80\n4BE0\n7A80\n4C80\nFFE0\n4800\n7BE0\n4A20\n4BE0\n9A20\nENDCHAR\nSTARTCHAR U_8242\nENCODING 33346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n7A40\n4D80\n6A40\n5CA0\n4BE0\nF880\n6BE0\n5880\n4FE0\n9880\nENDCHAR\nSTARTCHAR U_8243\nENCODING 33347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n7AA0\n4AA0\n7BE0\n4AA0\nFBE0\n6880\n5BE0\n4880\n4880\n9FE0\nENDCHAR\nSTARTCHAR U_8244\nENCODING 33348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7AA0\n49C0\n6BE0\n5A20\n4BE0\nFA20\n6BE0\n5A20\n4A20\n9A60\nENDCHAR\nSTARTCHAR U_8245\nENCODING 33349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7940\n4A20\n6DC0\n5880\n4FE0\nF880\n6AC0\n5AA0\n4CA0\n9980\nENDCHAR\nSTARTCHAR U_8246\nENCODING 33350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BC0\n4A40\n7BC0\n4A40\nFBC0\n4A20\n6B40\n5A80\n4A40\n9B20\nENDCHAR\nSTARTCHAR U_8247\nENCODING 33351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7EE0\n5240\n7440\n5E40\nF2E0\n5A40\n7640\n52E0\n5500\nB8E0\nENDCHAR\nSTARTCHAR U_8248\nENCODING 33352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n5200\n7440\n5FE0\nF000\n5540\n7540\n5540\n5540\nB960\nENDCHAR\nSTARTCHAR U_8249\nENCODING 33353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n7420\n57E0\n7400\n57E0\nF480\n57E0\n7480\n57E0\n54A0\nB8E0\nENDCHAR\nSTARTCHAR U_824A\nENCODING 33354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7BE0\n4A20\n7BE0\n4A20\nFBE0\n4880\n6BE0\n5AA0\n4AE0\n9880\nENDCHAR\nSTARTCHAR U_824B\nENCODING 33355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n7840\n4880\n6FE0\n5880\n4980\nF800\n6FE0\n5AA0\n4AA0\n9FE0\nENDCHAR\nSTARTCHAR U_824C\nENCODING 33356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7280\n5640\n7920\n57C0\nF080\n5100\n7640\n5D20\n9440\nB3C0\nENDCHAR\nSTARTCHAR U_824D\nENCODING 33357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n77E0\n5420\n77E0\n5480\nF7E0\n5480\n75E0\n5520\n7520\n9DE0\nENDCHAR\nSTARTCHAR U_824E\nENCODING 33358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n4A20\n6BE0\n5A20\n4FE0\nF880\n6880\n5BE0\n4880\n9FE0\nENDCHAR\nSTARTCHAR U_824F\nENCODING 33359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n7940\n4BE0\n6880\n5BE0\n4A20\nFBE0\n6A20\n5BE0\n4A20\n9BE0\nENDCHAR\nSTARTCHAR U_8250\nENCODING 33360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n7D20\n4EA0\n6FE0\n5A40\n4A20\nFD20\n6BC0\n5E40\n4980\n9E60\nENDCHAR\nSTARTCHAR U_8251\nENCODING 33361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BE0\n4A20\n6BE0\n5A00\n4BE0\nFAA0\n6BE0\n5EA0\n4AA0\n9A60\nENDCHAR\nSTARTCHAR U_8252\nENCODING 33362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n7C20\n4FE0\n6C20\n5FE0\n4A40\nFBC0\n6A40\n5BC0\n4A40\n9BC0\nENDCHAR\nSTARTCHAR U_8253\nENCODING 33363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n7FE0\n5540\n75C0\n5400\nF7E0\n5100\n7FE0\n5380\n9540\nB920\nENDCHAR\nSTARTCHAR U_8254\nENCODING 33364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n77E0\n5540\n77E0\n5540\nF5C0\n5400\n77E0\n5540\n5480\nBB60\nENDCHAR\nSTARTCHAR U_8255\nENCODING 33365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n4A80\n6FE0\n5D20\n4880\nFFE0\n6A00\n5BE0\n4A20\n9CC0\nENDCHAR\nSTARTCHAR U_8256\nENCODING 33366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n7FE0\n4880\n6BE0\n5880\n4FE0\nFA00\n6BE0\n5C80\n4880\n9FE0\nENDCHAR\nSTARTCHAR U_8257\nENCODING 33367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nF280\n9000\nD7E0\nB240\n9420\nFFC0\nD540\nB540\n9540\nBFE0\nENDCHAR\nSTARTCHAR U_8258\nENCODING 33368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n74E0\n54A0\n76E0\n54A0\nF7E0\n5080\n77E0\n5240\n5180\nB660\nENDCHAR\nSTARTCHAR U_8259\nENCODING 33369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n7540\n5FE0\n7440\n57C0\nF440\n57C0\n7400\n57C0\n5A40\nB3C0\nENDCHAR\nSTARTCHAR U_825A\nENCODING 33370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n7FE0\n5280\n7FE0\n5AA0\nFFE0\n5440\n77C0\n5440\n57C0\nB440\nENDCHAR\nSTARTCHAR U_825B\nENCODING 33371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n77C0\n5540\n7FE0\n5540\nF7C0\n5540\n7FE0\n5480\n5380\nBC60\nENDCHAR\nSTARTCHAR U_825C\nENCODING 33372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n7FE0\n5540\n7DE0\n5000\nFFE0\n5920\n77C0\n5540\n55C0\nB100\nENDCHAR\nSTARTCHAR U_825D\nENCODING 33373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n7100\n5FE0\n7560\n5540\nF000\n57C0\n7040\n57C0\n5040\nB7C0\nENDCHAR\nSTARTCHAR U_825E\nENCODING 33374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n77E0\n5A40\n7280\n5AA0\nF6C0\n5280\n76C0\n5AA0\n52A0\nB4E0\nENDCHAR\nSTARTCHAR U_825F\nENCODING 33375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n5280\n7FE0\n5540\nF540\n57C0\n7540\n5FE0\n5100\nBFE0\nENDCHAR\nSTARTCHAR U_8260\nENCODING 33376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F40\n7AA0\n5640\n77E0\n5800\nF7C0\n5440\n77C0\n5440\n5280\nBFE0\nENDCHAR\nSTARTCHAR U_8261\nENCODING 33377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n7540\n5FE0\n7820\n53C0\nF240\n57E0\n7520\n57E0\n5520\nB7E0\nENDCHAR\nSTARTCHAR U_8262\nENCODING 33378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n77E0\n5540\n7FE0\n5000\nF7E0\n5420\n75A0\n55A0\n9420\nB7E0\nENDCHAR\nSTARTCHAR U_8263\nENCODING 33379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n7100\n57E0\n7520\n57C0\nF520\n57E0\n7540\n57E0\n5A20\nB4E0\nENDCHAR\nSTARTCHAR U_8264\nENCODING 33380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n7FE0\n5100\n77C0\n5100\nFFE0\n54A0\n7FE0\n54C0\n5EA0\nB560\nENDCHAR\nSTARTCHAR U_8265\nENCODING 33381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2740\n7560\n5740\n7040\n5FE0\nF540\n5740\n7560\n5540\n9FC0\nB120\nENDCHAR\nSTARTCHAR U_8266\nENCODING 33382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F40\n7A40\n4F60\n6980\n5F40\n4A20\nFF00\n6800\n5FE0\n4AA0\n9FE0\nENDCHAR\nSTARTCHAR U_8267\nENCODING 33383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n7FE0\n5240\n77E0\n5C80\nF7E0\n5480\n7FE0\n5240\n9180\nB660\nENDCHAR\nSTARTCHAR U_8268\nENCODING 33384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n7FE0\n5280\n7FE0\n5820\nF7C0\n5000\n7FE0\n5540\n9BC0\nB520\nENDCHAR\nSTARTCHAR U_8269\nENCODING 33385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n5AA0\n7540\n5D60\nF540\n57C0\n5440\n77C0\n9440\nB840\nENDCHAR\nSTARTCHAR U_826A\nENCODING 33386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n7500\n5FC0\n7540\n57C0\nF540\n57C0\n7AA0\n57C0\n9540\nB7C0\nENDCHAR\nSTARTCHAR U_826B\nENCODING 33387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n7100\n57E0\n7520\n57E0\nF4A0\n57E0\n74A0\n57E0\n5AA0\nB7E0\nENDCHAR\nSTARTCHAR U_826C\nENCODING 33388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n7880\n57C0\n7440\n57C0\nF4A0\n5FE0\n7540\n57C0\n92A0\nBCE0\nENDCHAR\nSTARTCHAR U_826D\nENCODING 33389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\nFFE0\n9540\nDFE0\nB540\nFFE0\n9000\nD7E0\nB240\n9180\n9660\nENDCHAR\nSTARTCHAR U_826E\nENCODING 33390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n2420\n2440\n2280\n2500\n28E0\n3040\nENDCHAR\nSTARTCHAR U_826F\nENCODING 33391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n2080\n3F80\n2080\n3F80\n2440\n2280\n2100\n2880\n3060\nENDCHAR\nSTARTCHAR U_8270\nENCODING 33392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nFC40\n17C0\n9440\n57C0\n2520\n1540\n3480\n4C80\n8540\n0620\nENDCHAR\nSTARTCHAR U_8271\nENCODING 33393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nFE20\n53E0\n2220\nFBE0\nAA80\nFEA0\n22A0\nFE40\n5340\n8A20\nENDCHAR\nSTARTCHAR U_8272\nENCODING 33394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1F80\n2200\n7FC0\nA440\n2440\n3FC0\n2000\n2020\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_8273\nENCODING 33395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\nFC80\n27E0\nFD20\n2520\nFFE0\n2400\n2420\n2420\n23E0\nENDCHAR\nSTARTCHAR U_8274\nENCODING 33396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n51C0\nFE40\n57E0\nFEA0\nD2A0\nFFE0\n5600\n5E20\n5220\n91E0\nENDCHAR\nSTARTCHAR U_8275\nENCODING 33397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n51C0\nFA40\n57E0\n52A0\nFAA0\n53E0\n5200\n5220\n5220\n91E0\nENDCHAR\nSTARTCHAR U_8276\nENCODING 33398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\nFFE0\nAA40\nFFE0\n02A0\nFEA0\n03E0\n7A00\n4A20\n3220\nFDE0\nENDCHAR\nSTARTCHAR U_8277\nENCODING 33399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\nFFE0\nAA40\nFFE0\nAAA0\nFEA0\n4BE0\n7A00\n4A20\n3220\nFDE0\nENDCHAR\nSTARTCHAR U_8278\nENCODING 33400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nAAA0\nAAA0\nAAA0\nAAA0\nFBE0\nAAA0\n2080\n4080\n8080\nENDCHAR\nSTARTCHAR U_8279\nENCODING 33401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\nFFE0\n1100\n1100\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_827A\nENCODING 33402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n0900\n3F80\n0100\n0600\n1800\n2020\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_827B\nENCODING 33403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n7FC0\n0440\n0440\n0840\n1040\n2140\n4080\nENDCHAR\nSTARTCHAR U_827C\nENCODING 33404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n0000\n7FE0\n0200\n0200\n0200\n0200\n0200\n0E00\nENDCHAR\nSTARTCHAR U_827D\nENCODING 33405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0800\n7F00\n0900\n0900\n0900\n1120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_827E\nENCODING 33406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n0000\n1100\n1100\n0A00\n0A00\n0600\n1980\n6060\nENDCHAR\nSTARTCHAR U_827F\nENCODING 33407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n7F00\n0900\n09C0\n0840\n1040\n1040\n2240\n4180\nENDCHAR\nSTARTCHAR U_8280\nENCODING 33408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n0000\n7FC0\n0840\n0840\n0840\n1040\n2240\n4180\nENDCHAR\nSTARTCHAR U_8281\nENCODING 33409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n0000\n0F00\n0900\n0900\n0900\n1120\n2120\n40E0\nENDCHAR\nSTARTCHAR U_8282\nENCODING 33410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n7F80\n0880\n0880\n0880\n0B80\n0800\n0800\nENDCHAR\nSTARTCHAR U_8283\nENCODING 33411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n0000\n1F00\n1100\n1900\n1500\n2120\n4120\n80E0\nENDCHAR\nSTARTCHAR U_8284\nENCODING 33412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n0400\n7F80\n0480\n1C80\n0480\n0AA0\n10A0\n6060\nENDCHAR\nSTARTCHAR U_8285\nENCODING 33413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n0480\n0440\n07E0\n7C00\n0400\n0220\n0120\n00E0\nENDCHAR\nSTARTCHAR U_8286\nENCODING 33414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n7F80\n2480\n1100\n0A00\n0400\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_8287\nENCODING 33415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n3F80\n2480\n2480\n2480\n2580\n0400\n0400\nENDCHAR\nSTARTCHAR U_8288\nENCODING 33416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\n1500\nF5E0\n1500\n7FC0\n0400\n0400\nFFE0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_8289\nENCODING 33417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n7FC0\n0400\n0400\nFFE0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_828A\nENCODING 33418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n03C0\n7C00\n0400\nFFE0\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_828B\nENCODING 33419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n0000\n3FC0\n0200\n7FE0\n0200\n0200\n0200\n0E00\nENDCHAR\nSTARTCHAR U_828C\nENCODING 33420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n0000\nFFE0\n1000\n3F80\n0080\n0080\n0300\nENDCHAR\nSTARTCHAR U_828D\nENCODING 33421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n2000\n3FC0\n4040\n8840\n0440\n0440\n0040\n0180\nENDCHAR\nSTARTCHAR U_828E\nENCODING 33422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n0080\n1F80\n2000\n3FC0\n0040\n0240\n0180\nENDCHAR\nSTARTCHAR U_828F\nENCODING 33423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1100\n0400\n0400\n7FC0\n0400\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_8290\nENCODING 33424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n0400\n0400\n0600\n0580\n0480\n0400\n0400\nENDCHAR\nSTARTCHAR U_8291\nENCODING 33425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7F80\n0080\n0080\n3F80\n2000\n2020\n2020\n3FE0\nENDCHAR\nSTARTCHAR U_8292\nENCODING 33426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n0200\nFFE0\n2000\n2000\n2000\n2000\n3FC0\nENDCHAR\nSTARTCHAR U_8293\nENCODING 33427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n3F80\n0200\n0400\nFFE0\n0400\n0400\n1400\n0800\nENDCHAR\nSTARTCHAR U_8294\nENCODING 33428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2480\n2480\n3F80\n0400\n2080\nAAA0\nAAA0\nFBE0\n2080\nC080\nENDCHAR\nSTARTCHAR U_8295\nENCODING 33429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0800\n0FC0\n1080\n2900\n0600\n0400\n1800\n6000\nENDCHAR\nSTARTCHAR U_8296\nENCODING 33430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n0400\n7FC0\n0400\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_8297\nENCODING 33431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n1100\n7E00\n0840\n1080\n7F00\n0200\n0C00\nF000\nENDCHAR\nSTARTCHAR U_8298\nENCODING 33432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4200\n4240\n7A80\n4300\n4200\n4220\n5220\n61E0\nENDCHAR\nSTARTCHAR U_8299\nENCODING 33433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n7FC0\n0400\nFFE0\n0400\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_829A\nENCODING 33434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\nFFE0\n2480\n2480\n3F80\n0420\n0420\n03E0\nENDCHAR\nSTARTCHAR U_829B\nENCODING 33435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n3F80\n0880\n7FE0\n0880\n3F80\n0800\n1000\n6000\nENDCHAR\nSTARTCHAR U_829C\nENCODING 33436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n0400\n0400\nFFE0\n0A00\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_829D\nENCODING 33437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n0400\n0200\n7F80\n0100\n0600\n0800\n3000\n4FE0\nENDCHAR\nSTARTCHAR U_829E\nENCODING 33438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n3FE0\n4000\n1F80\n0000\n3F80\n00A0\n0060\n0020\nENDCHAR\nSTARTCHAR U_829F\nENCODING 33439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n1F00\n1100\n60E0\n3F80\n0900\n0600\n1980\n6060\nENDCHAR\nSTARTCHAR U_82A0\nENCODING 33440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0800\n0400\nFFE0\n1100\n0A00\n0400\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_82A1\nENCODING 33441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n1000\n1FC0\n2480\n4400\n0A00\n1100\n20E0\n4040\nENDCHAR\nSTARTCHAR U_82A2\nENCODING 33442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n1000\n1000\n27C0\n6000\nA000\n2000\n2FE0\n2000\nENDCHAR\nSTARTCHAR U_82A3\nENCODING 33443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n7FE0\n0400\n0C00\n1500\n24C0\n4440\n0400\n0400\nENDCHAR\nSTARTCHAR U_82A4\nENCODING 33444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n7D00\n0900\n1100\n1D00\nF100\n1120\n1120\n30E0\nENDCHAR\nSTARTCHAR U_82A5\nENCODING 33445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n0600\n0900\n30E0\nC940\n0900\n0900\n1100\n6100\nENDCHAR\nSTARTCHAR U_82A6\nENCODING 33446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0D00\n0200\n3FC0\n2040\n3FC0\n2040\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_82A7\nENCODING 33447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3FC0\n0900\n0600\nFFE0\n0240\n0200\n0200\n0E00\nENDCHAR\nSTARTCHAR U_82A8\nENCODING 33448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7F00\n1100\n13C0\n1840\n1480\n2300\n4500\n98E0\nENDCHAR\nSTARTCHAR U_82A9\nENCODING 33449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n0600\n1980\n6460\n0200\n3F80\n0100\n0200\n0400\nENDCHAR\nSTARTCHAR U_82AA\nENCODING 33450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n03C0\n3C00\n2400\n3FC0\n2200\n2100\n28A0\n3060\nENDCHAR\nSTARTCHAR U_82AB\nENCODING 33451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n3F80\n0000\nFFE0\n1200\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_82AC\nENCODING 33452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0A00\n1100\n2080\n5FC0\n88A0\n0880\n3480\nC300\nENDCHAR\nSTARTCHAR U_82AD\nENCODING 33453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n3FC0\n2240\n2240\n3FC0\n2000\n2020\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_82AE\nENCODING 33454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n0400\n7FC0\n4440\n4A40\n4940\n5140\n4040\n41C0\nENDCHAR\nSTARTCHAR U_82AF\nENCODING 33455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n0000\n0400\n0A40\n2A20\n2820\n2880\n4880\n0780\nENDCHAR\nSTARTCHAR U_82B0\nENCODING 33456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n0400\n3F80\n1100\n0A00\n0400\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_82B1\nENCODING 33457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n1240\n2280\n6300\nA600\n3A20\n2220\n21E0\nENDCHAR\nSTARTCHAR U_82B2\nENCODING 33458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n0A00\n1100\n2080\nD360\n1C00\n7080\n1080\n0F80\nENDCHAR\nSTARTCHAR U_82B3\nENCODING 33459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n0200\n7FE0\n0800\n0FC0\n0840\n0840\n1040\n6180\nENDCHAR\nSTARTCHAR U_82B4\nENCODING 33460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n1000\n3FC0\n4A40\n9240\n2440\n4840\n1240\n2180\nENDCHAR\nSTARTCHAR U_82B5\nENCODING 33461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n3F80\n0480\n7FE0\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_82B6\nENCODING 33462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2000\n3FC0\n4840\n9040\n2240\n3F40\n0040\n0180\nENDCHAR\nSTARTCHAR U_82B7\nENCODING 33463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0200\n0200\n1200\n13C0\n1200\n1200\n1200\nFFE0\nENDCHAR\nSTARTCHAR U_82B8\nENCODING 33464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n3F80\n0000\nFFE0\n0800\n1080\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_82B9\nENCODING 33465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n3F80\n2000\n3FE0\n2100\n2100\n2100\n4100\n8100\nENDCHAR\nSTARTCHAR U_82BA\nENCODING 33466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n03C0\n7C00\n0400\nFFE0\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_82BB\nENCODING 33467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n5520\n9F20\n08C0\n3000\n3FE0\nD520\n1F20\n0820\n70C0\nENDCHAR\nSTARTCHAR U_82BC\nENCODING 33468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0380\n3C00\n0400\n7FC0\n0400\nFFC0\n0420\n03E0\nENDCHAR\nSTARTCHAR U_82BD\nENCODING 33469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n1100\n2100\n7FE0\n0500\n0900\n3100\nC300\nENDCHAR\nSTARTCHAR U_82BE\nENCODING 33470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n2480\nFFE0\n0400\n7FC0\n4440\n4440\n4440\n45C0\n0400\nENDCHAR\nSTARTCHAR U_82BF\nENCODING 33471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1FC0\n2240\n6280\nA2E0\n2220\n2420\n24A0\n2840\nENDCHAR\nSTARTCHAR U_82C0\nENCODING 33472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\nFFE0\n0000\n1F00\n1100\n1120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_82C1\nENCODING 33473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2100\n2100\n2100\n2100\n3100\n2A80\n4440\n8820\nENDCHAR\nSTARTCHAR U_82C2\nENCODING 33474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n2440\n2480\n4500\n0A00\n1100\n20E0\nC040\nENDCHAR\nSTARTCHAR U_82C3\nENCODING 33475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0800\nFFE0\n0800\n1F00\n2900\n4600\n9980\n6060\nENDCHAR\nSTARTCHAR U_82C4\nENCODING 33476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n0200\nFFE0\n0400\n0700\n04C0\n0440\n0400\n0400\nENDCHAR\nSTARTCHAR U_82C5\nENCODING 33477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0040\n4840\n2940\n1140\n2940\n4540\n8440\n00C0\nENDCHAR\nSTARTCHAR U_82C6\nENCODING 33478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2000\n27C0\nF940\n2140\n2140\n3240\n2440\n08C0\nENDCHAR\nSTARTCHAR U_82C7\nENCODING 33479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n0400\n7FC0\n0400\nFFE0\n0420\n04E0\n0400\nENDCHAR\nSTARTCHAR U_82C8\nENCODING 33480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FE0\n4400\n7FC0\n4440\n4440\n4440\n8840\nB180\nENDCHAR\nSTARTCHAR U_82C9\nENCODING 33481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n7FC0\n4A00\n4A00\n5240\n61C0\n4000\n7FE0\nENDCHAR\nSTARTCHAR U_82CA\nENCODING 33482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FE0\n4000\n4F80\n4880\n4880\n4B20\n4820\n87E0\nENDCHAR\nSTARTCHAR U_82CB\nENCODING 33483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n2480\n2480\n2680\n0A20\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_82CC\nENCODING 33484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n1080\n1300\n1C00\nFFE0\n1200\n1100\n1480\n1860\nENDCHAR\nSTARTCHAR U_82CD\nENCODING 33485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0E00\n3180\nC060\n1F00\n1100\n1240\n1040\n0FC0\nENDCHAR\nSTARTCHAR U_82CE\nENCODING 33486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\nFFE0\n8020\n0000\n0000\n0000\nFFE0\n0000\nENDCHAR\nSTARTCHAR U_82CF\nENCODING 33487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0800\n7F80\n0880\n48C0\n48A0\n90A0\n2080\nC300\nENDCHAR\nSTARTCHAR U_82D0\nENCODING 33488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n0440\n7FC0\n4400\n7FC0\n1440\n2540\nC480\nENDCHAR\nSTARTCHAR U_82D1\nENCODING 33489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2000\n3FC0\n2640\n6A40\n9A80\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_82D2\nENCODING 33490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3FC0\n2440\n3FC0\n2440\nFFE0\n2040\n2040\n20C0\nENDCHAR\nSTARTCHAR U_82D3\nENCODING 33491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0E00\n1100\n2480\nC260\n3F80\n0100\n0A00\n0400\nENDCHAR\nSTARTCHAR U_82D4\nENCODING 33492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0800\n1080\n7FC0\n0040\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_82D5\nENCODING 33493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n7FC0\n0840\n1140\n6080\n1FC0\n1040\n1FC0\n1040\nENDCHAR\nSTARTCHAR U_82D6\nENCODING 33494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n7FC0\n4440\n7FC0\n4440\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_82D7\nENCODING 33495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n7FC0\n4440\n7FC0\n4440\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_82D8\nENCODING 33496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4040\n5F40\n5140\n5F40\n5140\n4040\n41C0\nENDCHAR\nSTARTCHAR U_82D9\nENCODING 33497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n0200\n7FC0\n1080\n1080\n0900\n0900\n0200\nFFE0\nENDCHAR\nSTARTCHAR U_82DA\nENCODING 33498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4440\n7FC0\n4440\n7FC0\n4440\n4440\n84C0\nENDCHAR\nSTARTCHAR U_82DB\nENCODING 33499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n0080\n3C80\n2480\n3C80\n2480\n0080\n0180\nENDCHAR\nSTARTCHAR U_82DC\nENCODING 33500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n3F80\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_82DD\nENCODING 33501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n1200\nF260\n1380\n1200\n3200\nD220\n11E0\nENDCHAR\nSTARTCHAR U_82DE\nENCODING 33502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3FC0\n4040\nBE40\n2240\n3E40\n20A0\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_82DF\nENCODING 33503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3FC0\n4040\n9E40\n1240\n1E40\n1240\n0040\n0180\nENDCHAR\nSTARTCHAR U_82E0\nENCODING 33504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7F80\n4080\n7F80\n4200\n7FE0\n4200\n5920\nE0E0\nENDCHAR\nSTARTCHAR U_82E1\nENCODING 33505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n2480\n2280\n2280\n2080\n2880\n3140\n6220\n0C20\nENDCHAR\nSTARTCHAR U_82E2\nENCODING 33506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n3FC0\n2040\n3FC0\n2000\n3FC0\n2040\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_82E3\nENCODING 33507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4000\n7F80\n4080\n7F80\n4000\n4000\n7FC0\nENDCHAR\nSTARTCHAR U_82E4\nENCODING 33508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n0400\n0D00\n14C0\n6440\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_82E5\nENCODING 33509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n7FE0\n0880\n0400\n7FE0\n0800\n1FC0\n2840\n4840\n0FC0\n0840\nENDCHAR\nSTARTCHAR U_82E6\nENCODING 33510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1100\n0400\nFFE0\n0400\n3F80\n2080\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_82E7\nENCODING 33511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n8020\n7FC0\n0200\n0200\n0200\n0200\n0E00\nENDCHAR\nSTARTCHAR U_82E8\nENCODING 33512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n3FC0\n2040\n3FC0\n2840\n2980\n2E20\n4820\n87E0\nENDCHAR\nSTARTCHAR U_82E9\nENCODING 33513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0800\n3F80\n2080\n2080\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_82EA\nENCODING 33514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n0400\n7FC0\n4640\n4940\n50C0\n6040\n41C0\nENDCHAR\nSTARTCHAR U_82EB\nENCODING 33515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1500\n07C0\n0400\n3FC0\n2040\n2040\n3FC0\n2040\nENDCHAR\nSTARTCHAR U_82EC\nENCODING 33516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4440\n4440\n4640\n4940\n50C0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_82ED\nENCODING 33517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2100\n47E0\nF120\n2120\n4920\nF620\n44A0\n0840\nENDCHAR\nSTARTCHAR U_82EE\nENCODING 33518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1100\n2200\n6A40\nAA40\n2A40\n2A40\n2FC0\n2000\nENDCHAR\nSTARTCHAR U_82EF\nENCODING 33519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\nFFE0\n0400\n1500\n2480\n5F40\n8420\n0400\nENDCHAR\nSTARTCHAR U_82F0\nENCODING 33520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7880\n0880\n7900\n4100\n7A00\n0A40\n4FA0\n3220\nENDCHAR\nSTARTCHAR U_82F1\nENCODING 33521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n3F80\n2480\n2480\nFFE0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_82F2\nENCODING 33522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n1000\n1FE0\n2400\n47C0\n0400\n07E0\n0400\n0400\nENDCHAR\nSTARTCHAR U_82F3\nENCODING 33523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0F80\n1900\n6600\n1980\nE660\n0100\n0C00\n0200\nENDCHAR\nSTARTCHAR U_82F4\nENCODING 33524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n3F80\n2080\n3F80\n2080\n3F80\n2080\nFFE0\nENDCHAR\nSTARTCHAR U_82F5\nENCODING 33525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2400\n3FC0\n4400\n0400\nFFE0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_82F6\nENCODING 33526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n0A00\n3180\nC460\n0400\n2480\n4440\n0C00\nENDCHAR\nSTARTCHAR U_82F7\nENCODING 33527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n2080\nFFE0\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_82F8\nENCODING 33528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n2480\n1500\nFFE0\n0400\n0400\n1400\n0800\nENDCHAR\nSTARTCHAR U_82F9\nENCODING 33529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n2480\n1480\n1500\nFFE0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_82FA\nENCODING 33530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2880\n2480\nFFE0\n4480\n7FE0\n0080\n0300\nENDCHAR\nSTARTCHAR U_82FB\nENCODING 33531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2080\n2FE0\n6080\nA880\n2480\n2480\n2080\n2180\nENDCHAR\nSTARTCHAR U_82FC\nENCODING 33532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FE0\n1100\n2400\n2400\n3FC0\n4400\n9F80\n0400\n0400\n7FE0\nENDCHAR\nSTARTCHAR U_82FD\nENCODING 33533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n03C0\n3D00\n2500\n2480\n2480\n2540\n46A0\n8480\nENDCHAR\nSTARTCHAR U_82FE\nENCODING 33534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0480\n1280\n5100\n5240\n5420\n98A0\n1080\n6F80\nENDCHAR\nSTARTCHAR U_82FF\nENCODING 33535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n3F80\n0400\nFFE0\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_8300\nENCODING 33536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n1280\n7FC0\n1240\n7FC0\n5200\n7FC0\n1240\n22C0\n4200\nENDCHAR\nSTARTCHAR U_8301\nENCODING 33537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2480\n2480\n3F80\n0400\n4440\n4440\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_8302\nENCODING 33538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1080\n0440\n3FE0\n2400\n2480\n2500\n2220\n4520\n98E0\nENDCHAR\nSTARTCHAR U_8303\nENCODING 33539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n27C0\n9440\n5440\n2440\nE580\n4420\n4420\n43E0\nENDCHAR\nSTARTCHAR U_8304\nENCODING 33540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2000\nFDE0\n2520\n2520\n2520\n2520\n45E0\n9920\nENDCHAR\nSTARTCHAR U_8305\nENCODING 33541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n7F80\n0900\n0600\nFFE0\n0A20\n1240\n2200\nCE00\nENDCHAR\nSTARTCHAR U_8306\nENCODING 33542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n0800\n71E0\n4920\n4920\n5920\n69E0\n1100\n6100\nENDCHAR\nSTARTCHAR U_8307\nENCODING 33543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0880\nFFE0\n0800\n0F80\n1500\n2200\n4D80\nB060\nENDCHAR\nSTARTCHAR U_8308\nENCODING 33544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1100\n5120\n5D40\n5180\n5100\n5D20\nF120\n40E0\nENDCHAR\nSTARTCHAR U_8309\nENCODING 33545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\nFFE0\n0400\n7FC0\n0E00\n1500\n24E0\nC440\nENDCHAR\nSTARTCHAR U_830A\nENCODING 33546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n0000\n03C0\n3C00\n2000\n3FC0\n2200\n2200\nFFE0\nENDCHAR\nSTARTCHAR U_830B\nENCODING 33547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n03C0\n7C00\n4200\n7FC0\n4200\n5100\n58A0\n6460\nENDCHAR\nSTARTCHAR U_830C\nENCODING 33548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n1100\n1100\n2FE0\n6100\nA100\n2100\n2100\n27C0\nENDCHAR\nSTARTCHAR U_830D\nENCODING 33549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n79E0\n0900\n2000\n3FC0\n4040\n1E40\n1240\n1E40\n0040\n0380\nENDCHAR\nSTARTCHAR U_830E\nENCODING 33550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7F00\n0600\n1980\nE060\n3F80\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_830F\nENCODING 33551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0900\nFFE0\n0A00\n0A40\n0A80\n1320\n2220\nCDE0\nENDCHAR\nSTARTCHAR U_8310\nENCODING 33552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n1000\n1FC0\n3540\n4940\n1640\n6540\n0940\n3080\nENDCHAR\nSTARTCHAR U_8311\nENCODING 33553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3F80\n2880\n2580\n2000\n3FE0\n0020\n7F20\n00C0\nENDCHAR\nSTARTCHAR U_8312\nENCODING 33554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n23C0\n3A40\n4A80\nAA40\n1220\n22A0\n4240\n0200\nENDCHAR\nSTARTCHAR U_8313\nENCODING 33555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n7FE0\n4040\n0A00\n0A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_8314\nENCODING 33556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n7FE0\n4020\n8240\n0200\n3FC0\n0200\n0200\n7FE0\nENDCHAR\nSTARTCHAR U_8315\nENCODING 33557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8020\n7F80\n0880\n7E80\n08A0\n0860\n0820\nENDCHAR\nSTARTCHAR U_8316\nENCODING 33558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0F80\n1900\n6600\n1980\n6060\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_8317\nENCODING 33559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0800\n1F00\n3200\nCC00\n1FC0\nF040\n1FC0\n1040\nENDCHAR\nSTARTCHAR U_8318\nENCODING 33560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n3F80\n0880\n1080\n7BC0\n2940\n2940\n6B40\n9480\nENDCHAR\nSTARTCHAR U_8319\nENCODING 33561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n0240\n7FE0\n1200\n7E40\n1280\n1120\n22A0\n4C60\nENDCHAR\nSTARTCHAR U_831A\nENCODING 33562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BE0\n4220\n7A20\n4220\n4220\n5AE0\nE240\n4200\nENDCHAR\nSTARTCHAR U_831B\nENCODING 33563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n3F80\n2080\n3FC0\n2280\n2900\n30E0\nENDCHAR\nSTARTCHAR U_831C\nENCODING 33564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n0A00\n7FC0\n4A40\n5240\n63C0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_831D\nENCODING 33565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n7FC0\n4200\n5F80\n5080\n5F80\n4200\n4200\n7FE0\nENDCHAR\nSTARTCHAR U_831E\nENCODING 33566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4400\n7F80\n4080\n7F80\n4480\n4400\n7FE0\nENDCHAR\nSTARTCHAR U_831F\nENCODING 33567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3F80\n0480\nFFE0\n0480\n3FC0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8320\nENCODING 33568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n1100\n2FE0\n2100\n6300\nA580\n2940\n3120\n2100\nENDCHAR\nSTARTCHAR U_8321\nENCODING 33569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FE0\n1500\n7FE0\n8040\n1F00\n0200\n0400\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_8322\nENCODING 33570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n7E20\n1120\n3D20\n2520\n5520\n0920\n1020\n60E0\nENDCHAR\nSTARTCHAR U_8323\nENCODING 33571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n7FC0\n0400\n7FC0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_8324\nENCODING 33572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n0F80\n3100\n0E00\n13C0\n6C80\n1500\n0200\n7C00\nENDCHAR\nSTARTCHAR U_8325\nENCODING 33573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n7FC0\n0400\nFFE0\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_8326\nENCODING 33574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n0400\n7FC0\n4440\n4EC0\n1500\n24E0\nC440\nENDCHAR\nSTARTCHAR U_8327\nENCODING 33575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n7FC0\n4440\n4440\n7FC0\n0480\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_8328\nENCODING 33576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n4200\n2BE0\n1420\n1940\n6100\n2280\n2440\n3820\nENDCHAR\nSTARTCHAR U_8329\nENCODING 33577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0940\n3F80\n2000\n3FE0\n2000\n2FC0\n2840\n4FC0\n8840\nENDCHAR\nSTARTCHAR U_832A\nENCODING 33578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0440\n2480\n1500\nFFE0\n0A00\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_832B\nENCODING 33579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n2200\n9100\n5FE0\n2400\n2400\nC400\n4400\n47E0\nENDCHAR\nSTARTCHAR U_832C\nENCODING 33580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0800\nFFE0\n1100\n3100\n57C0\n9100\n1100\n1FE0\nENDCHAR\nSTARTCHAR U_832D\nENCODING 33581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\nFFE0\n2080\n5140\n8A20\n0400\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_832E\nENCODING 33582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n0780\n0400\nFFE0\n0400\n2480\n2440\n4C40\nENDCHAR\nSTARTCHAR U_832F\nENCODING 33583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0180\n2140\n2FE0\n6100\nA100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_8330\nENCODING 33584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n4440\n7FC0\n4440\n7FC0\n2400\n1C00\nE3E0\nENDCHAR\nSTARTCHAR U_8331\nENCODING 33585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1000\n2400\n3FC0\n4400\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_8332\nENCODING 33586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1080\n2100\n4A40\nF380\n2100\n4A40\nFFE0\n0420\nENDCHAR\nSTARTCHAR U_8333\nENCODING 33587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2000\n97C0\n5100\n2100\n2100\nC100\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_8334\nENCODING 33588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4040\n5F40\n5140\n5140\n5F40\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_8335\nENCODING 33589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4440\n4440\n5F40\n4440\n4A40\n5140\n7FC0\nENDCHAR\nSTARTCHAR U_8336\nENCODING 33590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n0A00\n3580\nC460\n3F80\n1500\n2480\nCC60\nENDCHAR\nSTARTCHAR U_8337\nENCODING 33591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1280\n1240\n13E0\n2E00\n6240\nA280\n2120\n22A0\n2C60\nENDCHAR\nSTARTCHAR U_8338\nENCODING 33592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n7FE0\n1080\n1F80\n1080\n1F80\n10E0\n7F80\n0080\nENDCHAR\nSTARTCHAR U_8339\nENCODING 33593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n1000\nFDE0\n2920\n2920\n4920\n3120\n19E0\nE520\nENDCHAR\nSTARTCHAR U_833A\nENCODING 33594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n0800\n1080\n3F40\n0900\n0920\n1120\nE0E0\nENDCHAR\nSTARTCHAR U_833B\nENCODING 33595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAAA0\nAAA0\nFBE0\n2080\nC000\n2080\nAAA0\nAAA0\nFBE0\n2080\nC080\nENDCHAR\nSTARTCHAR U_833C\nENCODING 33596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4040\n5F40\n4040\n5F40\n5140\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_833D\nENCODING 33597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n3100\n2FE0\n6920\nA920\n2FE0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_833E\nENCODING 33598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n7FC0\n1100\n1100\nFFE0\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_833F\nENCODING 33599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFF80\n2480\n2680\n2580\n3C80\nE4A0\n48A0\n1060\nENDCHAR\nSTARTCHAR U_8340\nENCODING 33600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n8040\n3E40\n2240\n3E40\n2240\n3E40\n0180\nENDCHAR\nSTARTCHAR U_8341\nENCODING 33601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\nFFE0\n1080\n1F80\n1080\n1F80\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_8342\nENCODING 33602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n1500\n2080\nDF60\n0800\n1F80\n0080\n0300\nENDCHAR\nSTARTCHAR U_8343\nENCODING 33603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0E00\n1100\n2080\nDF60\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_8344\nENCODING 33604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n1100\n3E00\n0480\n1900\n6200\n0D80\n7060\nENDCHAR\nSTARTCHAR U_8345\nENCODING 33605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0E00\n3180\nDF60\n0000\n1F80\n1080\n1F80\n1080\nENDCHAR\nSTARTCHAR U_8346\nENCODING 33606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2420\nFF20\n24A0\n00A0\n7EA0\n24A0\nFFA0\n24A0\n2420\n4420\n84E0\nENDCHAR\nSTARTCHAR U_8347\nENCODING 33607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n23C0\n4000\n9000\n2FE0\n6080\nA080\n2080\n2180\nENDCHAR\nSTARTCHAR U_8348\nENCODING 33608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2080\n3FE0\n4880\nAA80\n13E0\n2080\n4080\n8080\nENDCHAR\nSTARTCHAR U_8349\nENCODING 33609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n3F80\n2080\n3F80\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_834A\nENCODING 33610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0020\n7EA0\n14A0\n14A0\nFFA0\n14A0\n2420\n44E0\nENDCHAR\nSTARTCHAR U_834B\nENCODING 33611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n0400\n7FC0\n4A40\n4A40\n4A40\n4A40\n40C0\nENDCHAR\nSTARTCHAR U_834C\nENCODING 33612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n8820\n0800\nFFE0\n1100\n3200\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_834D\nENCODING 33613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0A00\n4BE0\n4A40\n4D40\n5940\nE880\n4940\n0A20\nENDCHAR\nSTARTCHAR U_834E\nENCODING 33614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n0800\n1080\n3F40\n0400\n3FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_834F\nENCODING 33615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n11C0\n1F00\n2100\n7FE0\nA100\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_8350\nENCODING 33616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n1000\n27C0\n6080\nBFE0\n2100\n2100\n2300\nENDCHAR\nSTARTCHAR U_8351\nENCODING 33617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n0480\n7F80\n4400\n7FC0\n04C0\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_8352\nENCODING 33618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n2000\n3FC0\n0000\n2480\n2480\n44A0\n8460\nENDCHAR\nSTARTCHAR U_8353\nENCODING 33619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n2080\n1100\n7FC0\n1100\nFFE0\n1100\n2100\nC100\nENDCHAR\nSTARTCHAR U_8354\nENCODING 33620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7F80\n0880\nF700\n2080\nFBE0\n2920\n4A20\nB4C0\nENDCHAR\nSTARTCHAR U_8355\nENCODING 33621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7A00\n4FC0\n7A40\n4A40\n7A40\n4A40\n4A40\n9CC0\nENDCHAR\nSTARTCHAR U_8356\nENCODING 33622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3F40\n0480\nFFE0\n0C00\n1980\nEE20\n0820\n07E0\nENDCHAR\nSTARTCHAR U_8357\nENCODING 33623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0440\n7FE0\n4400\n4240\n6280\n5120\n82A0\n8C60\nENDCHAR\nSTARTCHAR U_8358\nENCODING 33624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0000\n9100\n5100\n1FE0\n3100\n5100\n9100\n17C0\nENDCHAR\nSTARTCHAR U_8359\nENCODING 33625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n4900\n2100\n0100\nEFE0\n2100\n2280\n2440\n5820\n8FE0\nENDCHAR\nSTARTCHAR U_835A\nENCODING 33626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\nFFE0\n2480\n1500\nFFE0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_835B\nENCODING 33627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n0500\n3B40\n00C0\nFFE0\n1200\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_835C\nENCODING 33628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4240\n7B80\n4220\n73E0\n4400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_835D\nENCODING 33629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7C40\n4540\n5540\n5540\n5540\n5540\n2840\nC4C0\nENDCHAR\nSTARTCHAR U_835E\nENCODING 33630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7F80\n0800\nFFE0\n2080\nD160\n1100\n1100\nE100\nENDCHAR\nSTARTCHAR U_835F\nENCODING 33631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0E00\n3180\nDF60\n0000\n7FC0\n1100\n2080\n7FC0\nENDCHAR\nSTARTCHAR U_8360\nENCODING 33632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\nFFE0\n1100\n0E00\nF1E0\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_8361\nENCODING 33633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5100\n2780\n8A00\n57E0\n12A0\n24A0\nE920\n2220\n24C0\nENDCHAR\nSTARTCHAR U_8362\nENCODING 33634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\nFFE0\n8020\n3F80\n0400\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_8363\nENCODING 33635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8420\n0400\nFFE0\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_8364\nENCODING 33636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8820\n7FC0\n1400\n3FC0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8365\nENCODING 33637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8020\n0440\nF680\n1500\n2480\n4460\n8C20\nENDCHAR\nSTARTCHAR U_8366\nENCODING 33638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8420\n2400\n3FC0\n4400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_8367\nENCODING 33639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\nFFE0\n8420\n2440\n2480\n4500\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_8368\nENCODING 33640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n0040\n7FC0\n0040\nFFE0\n2100\n1100\n0300\nENDCHAR\nSTARTCHAR U_8369\nENCODING 33641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3FC0\n2040\n3FC0\n2100\n4C80\n8260\n1C00\n0300\nENDCHAR\nSTARTCHAR U_836A\nENCODING 33642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF880\n1080\n2080\n3AC0\nE2A0\n24A0\n2080\n6180\nENDCHAR\nSTARTCHAR U_836B\nENCODING 33643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BC0\n5240\n63C0\n5240\n4BC0\n6A40\n5440\n48C0\nENDCHAR\nSTARTCHAR U_836C\nENCODING 33644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\nFFE0\n1240\n4A00\n2200\nFFE0\n0200\n0D80\nF060\nENDCHAR\nSTARTCHAR U_836D\nENCODING 33645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4000\n97C0\nE100\n4100\nF100\n0100\nF100\n4FE0\nENDCHAR\nSTARTCHAR U_836E\nENCODING 33646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2080\n57E0\nE080\n4480\nF280\n0080\n3080\nC180\nENDCHAR\nSTARTCHAR U_836F\nENCODING 33647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2400\n47C0\nE440\n4A40\nA140\nC040\n3040\nC180\nENDCHAR\nSTARTCHAR U_8370\nENCODING 33648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1100\n2000\nF900\n27C0\n7100\n6900\nA100\n2FE0\nENDCHAR\nSTARTCHAR U_8371\nENCODING 33649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n7FC0\n4040\n7FC0\n4700\n5C00\n4780\n5C20\n83E0\nENDCHAR\nSTARTCHAR U_8372\nENCODING 33650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2480\n2480\n3F80\n2480\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_8373\nENCODING 33651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n0000\n3F80\n2080\n3F80\n1100\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_8374\nENCODING 33652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2100\nFFC0\n2100\n3100\nEFE0\n2280\n2440\nE820\nENDCHAR\nSTARTCHAR U_8375\nENCODING 33653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFC0\n2440\n0840\n7180\n0400\n5240\n90A0\n0F80\nENDCHAR\nSTARTCHAR U_8376\nENCODING 33654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0100\nF280\n9440\n9920\n97C0\nF040\n0080\n0100\nENDCHAR\nSTARTCHAR U_8377\nENCODING 33655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2FE0\n2040\n6F40\nA940\n2940\n2F40\n2040\n21C0\nENDCHAR\nSTARTCHAR U_8378\nENCODING 33656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n0400\nFFE0\n8220\n0400\nFFE0\n0400\n0C00\nENDCHAR\nSTARTCHAR U_8379\nENCODING 33657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n27C0\n2400\nFFE0\n0400\n2440\n4580\n0600\nF800\nENDCHAR\nSTARTCHAR U_837A\nENCODING 33658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2400\n27E0\nFC20\n2120\n20A0\n38A0\nE720\n40C0\nENDCHAR\nSTARTCHAR U_837B\nENCODING 33659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n1080\n5100\n2100\n5520\nB940\n5100\n9280\n1440\n6820\nENDCHAR\nSTARTCHAR U_837C\nENCODING 33660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0E00\n3180\nDF60\n0400\n7FC0\n2480\n4440\n8C20\nENDCHAR\nSTARTCHAR U_837D\nENCODING 33661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7E40\n4880\n2500\nFFE0\n1100\n3200\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_837E\nENCODING 33662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2080\n7FC0\n2080\nDF60\n3100\n4A00\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_837F\nENCODING 33663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1140\n0240\n7FE0\n4200\n7A40\n4A80\n4920\n5AA0\n8460\nENDCHAR\nSTARTCHAR U_8380\nENCODING 33664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4000\n5F80\n4000\n7FE0\n5240\n5580\n98E0\nENDCHAR\nSTARTCHAR U_8381\nENCODING 33665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n0400\n2480\n2480\n5540\n9640\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_8382\nENCODING 33666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7840\n4940\n7940\n2140\nFD40\n2540\n4440\n8CC0\nENDCHAR\nSTARTCHAR U_8383\nENCODING 33667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0E00\n3580\nFFE0\n1400\n3FC0\nE440\n24C0\n0400\nENDCHAR\nSTARTCHAR U_8384\nENCODING 33668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n2480\n3F80\n2480\n3F80\n2400\n1800\nE7E0\nENDCHAR\nSTARTCHAR U_8385\nENCODING 33669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1200\n1100\n2FE0\n2000\n6440\nA240\n2280\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_8386\nENCODING 33670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1540\nFFE0\n0400\n7FC0\n4440\n7FC0\n4440\n7FC0\n44C0\nENDCHAR\nSTARTCHAR U_8387\nENCODING 33671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7900\n4FE0\n7920\n4920\n7920\n4A20\nFC20\n08C0\nENDCHAR\nSTARTCHAR U_8388\nENCODING 33672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4780\n2480\n8480\n6860\n2FC0\nC480\n4300\n5CE0\nENDCHAR\nSTARTCHAR U_8389\nENCODING 33673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n0C20\n7120\n1120\nFD20\n1120\n3920\n5420\n92E0\nENDCHAR\nSTARTCHAR U_838A\nENCODING 33674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4880\n4880\n7FE0\n0880\nF880\n4880\n4880\n8BE0\nENDCHAR\nSTARTCHAR U_838B\nENCODING 33675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1400\n27E0\n6A00\nB3C0\n2200\n23E0\n2200\n2200\nENDCHAR\nSTARTCHAR U_838C\nENCODING 33676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0A00\n3F80\n2080\n2080\n3F80\n0A20\n3220\nC1E0\nENDCHAR\nSTARTCHAR U_838D\nENCODING 33677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1140\n0420\nFFE0\n2440\n1680\n0D00\n3500\nC4E0\n1C40\nENDCHAR\nSTARTCHAR U_838E\nENCODING 33678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4100\nA540\n4520\n2920\nC940\n4080\n4300\n4C00\nENDCHAR\nSTARTCHAR U_838F\nENCODING 33679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2100\nFB40\n2520\n3920\nE940\n2080\n2300\nEC00\nENDCHAR\nSTARTCHAR U_8390\nENCODING 33680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4100\n2FE0\n9920\n5180\n2280\nE2A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_8391\nENCODING 33681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1F80\n7100\n1F00\nE4E0\n3F80\n0400\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_8392\nENCODING 33682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n3F80\n0000\n7FC0\n4040\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_8393\nENCODING 33683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n2900\n7FC0\nA880\n2480\nFFE0\n2480\n3FE0\n0080\n0300\nENDCHAR\nSTARTCHAR U_8394\nENCODING 33684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4A40\n5140\n60C0\n5F40\n5140\n5140\n7FC0\nENDCHAR\nSTARTCHAR U_8395\nENCODING 33685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n1500\n2480\nC460\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8396\nENCODING 33686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n2480\n4900\n2480\n7FC0\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_8397\nENCODING 33687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n0400\n3F80\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8398\nENCODING 33688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n1100\n0A00\nFFE0\n0400\n7FC0\n0400\n0400\nENDCHAR\nSTARTCHAR U_8399\nENCODING 33689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7F80\n0880\nFFE0\n1080\n7F80\n3080\nD080\n1F80\nENDCHAR\nSTARTCHAR U_839A\nENCODING 33690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF7E0\n2100\n71E0\n1500\n9500\n67E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_839B\nENCODING 33691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF0C0\n2700\n7100\n17C0\n5100\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_839C\nENCODING 33692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2200\n53E0\nD440\n5A40\n5140\n5080\n4140\n4620\nENDCHAR\nSTARTCHAR U_839D\nENCODING 33693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2480\n2480\n5540\n8420\n7FC0\n0400\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_839E\nENCODING 33694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n8020\n3F80\n0000\nFFE0\n1200\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_839F\nENCODING 33695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\n0A00\n3580\nDF60\n0200\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_83A0\nENCODING 33696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n0400\nFFE0\n2480\nDF60\n09C0\n3040\nC380\nENDCHAR\nSTARTCHAR U_83A1\nENCODING 33697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n3F80\n0400\n27C0\n2400\n5C00\n83E0\nENDCHAR\nSTARTCHAR U_83A2\nENCODING 33698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\nFFE0\n2480\n2480\n5540\n8A20\n3180\nC060\nENDCHAR\nSTARTCHAR U_83A3\nENCODING 33699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0400\nFFE0\n2000\n3FC0\n0440\n5220\n9080\n0F80\nENDCHAR\nSTARTCHAR U_83A4\nENCODING 33700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n0A00\n7FC0\n4A40\n51C0\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_83A5\nENCODING 33701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n57C0\n2240\n5240\nB7C0\n5240\n9240\n1240\n6FE0\nENDCHAR\nSTARTCHAR U_83A6\nENCODING 33702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n2480\n1500\n3F80\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_83A7\nENCODING 33703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n3F80\n2080\n3F80\n0A20\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_83A8\nENCODING 33704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3F80\n2080\n3F80\n2080\n3FA0\n2240\n2980\n7060\nENDCHAR\nSTARTCHAR U_83A9\nENCODING 33705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n1480\n7F80\n0200\nFFE0\n0400\n0400\n0C00\nENDCHAR\nSTARTCHAR U_83AA\nENCODING 33706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7A80\n1240\nFFE0\n1240\n1E80\nF120\n12A0\n3460\nENDCHAR\nSTARTCHAR U_83AB\nENCODING 33707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n3F80\n2080\n3F80\n2080\n3F80\n0400\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_83AC\nENCODING 33708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nFFE0\n1200\n3F80\n4200\nFFC0\n4440\n7FC0\n0C00\n3420\nC3E0\nENDCHAR\nSTARTCHAR U_83AD\nENCODING 33709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BC0\n4A40\n7A40\n4A40\n7A40\n5340\n6A80\n4600\nENDCHAR\nSTARTCHAR U_83AE\nENCODING 33710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3FC0\n2440\n3FC0\n2440\n7FE0\n0420\n1820\nE1C0\nENDCHAR\nSTARTCHAR U_83AF\nENCODING 33711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4000\n2100\n8FE0\n6100\n2380\nC540\n4920\n4100\nENDCHAR\nSTARTCHAR U_83B0\nENCODING 33712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2200\n23E0\nFC20\n2140\n3900\nE280\n4440\n1820\nENDCHAR\nSTARTCHAR U_83B1\nENCODING 33713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n2480\n1500\nFFE0\n1500\n2480\n4440\n8420\nENDCHAR\nSTARTCHAR U_83B2\nENCODING 33714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1200\n5FC0\n0500\nEFC0\n2100\n3FE0\n2100\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_83B3\nENCODING 33715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF080\n97E0\n9080\nF480\n9280\n9280\nF080\n0180\nENDCHAR\nSTARTCHAR U_83B4\nENCODING 33716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n3F80\n0400\n7FC0\n4A40\n5140\n4080\nENDCHAR\nSTARTCHAR U_83B5\nENCODING 33717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n0800\n3FC0\n2440\n3FC0\n0A80\n0A60\n3220\nC1E0\nENDCHAR\nSTARTCHAR U_83B6\nENCODING 33718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0E00\n3180\nDF60\n0080\n4900\n2500\n1200\nFFE0\nENDCHAR\nSTARTCHAR U_83B7\nENCODING 33719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n5180\n2140\n57E0\n9100\n3100\n5280\n1440\n6820\nENDCHAR\nSTARTCHAR U_83B8\nENCODING 33720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n5180\n2940\n57E0\nB100\n5280\n92A0\n14A0\n6860\nENDCHAR\nSTARTCHAR U_83B9\nENCODING 33721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8020\n3FC0\n0400\n3F80\n0500\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_83BA\nENCODING 33722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8820\n3F80\n2500\n3FE0\n0020\n7F20\n00C0\nENDCHAR\nSTARTCHAR U_83BB\nENCODING 33723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n7F80\n09C0\n1040\n21C0\n7A00\n4BC0\n4A20\n7BE0\nENDCHAR\nSTARTCHAR U_83BC\nENCODING 33724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4100\n9FE0\nE100\n2540\n57C0\nE100\n3120\nC0E0\nENDCHAR\nSTARTCHAR U_83BD\nENCODING 33725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0880\nFFE0\n2080\nC960\n0900\nFFE0\n1100\n6100\nENDCHAR\nSTARTCHAR U_83BE\nENCODING 33726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n2480\nDF60\n0400\n1100\nFFE0\n1100\n2100\nENDCHAR\nSTARTCHAR U_83BF\nENCODING 33727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7C40\n1140\n7D40\n5540\n5D40\n3140\n5840\n95C0\nENDCHAR\nSTARTCHAR U_83C0\nENCODING 33728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\nA020\n3FC0\n4640\nAA40\n12A0\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_83C1\nENCODING 33729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n0400\nFFE0\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_83C2\nENCODING 33730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2200\nFBE0\n8C20\n8A20\nF920\n8920\nF820\n88C0\nENDCHAR\nSTARTCHAR U_83C3\nENCODING 33731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4000\n27E0\n8400\n47C0\n1440\n27C0\nC400\n47E0\nENDCHAR\nSTARTCHAR U_83C4\nENCODING 33732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n2480\n3F80\n2480\n3F80\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_83C5\nENCODING 33733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FE0\n1500\n7FE0\n4020\n1F80\n1080\n1FC0\n1040\n1FC0\n1040\nENDCHAR\nSTARTCHAR U_83C6\nENCODING 33734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFC00\n4BC0\n7940\n4940\n7940\n4880\nFD40\n0A20\nENDCHAR\nSTARTCHAR U_83C7\nENCODING 33735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n1080\n7FE0\n2880\n2BE0\n6A20\n1220\n2BE0\n4220\nENDCHAR\nSTARTCHAR U_83C8\nENCODING 33736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2100\nF7E0\n2000\n3440\nE240\n2280\n2100\n6FE0\nENDCHAR\nSTARTCHAR U_83C9\nENCODING 33737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n0080\nFFE0\n4440\n2E80\n1500\n2480\nCC60\nENDCHAR\nSTARTCHAR U_83CA\nENCODING 33738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n2900\n3FE0\n4420\n94A0\n0D20\n7FA0\n1620\n2520\nC4C0\nENDCHAR\nSTARTCHAR U_83CB\nENCODING 33739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n0100\nF7C0\n9100\n9FE0\n9100\nF380\n9540\n0920\nENDCHAR\nSTARTCHAR U_83CC\nENCODING 33740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4140\n5E40\n4440\n7FC0\n5540\n64C0\n7FC0\nENDCHAR\nSTARTCHAR U_83CD\nENCODING 33741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n0A00\n3180\nC460\n1F00\n0200\n54A0\n90A0\n0F00\nENDCHAR\nSTARTCHAR U_83CE\nENCODING 33742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0900\n3F80\n2080\n3F80\n2080\n3FA0\n2140\n3D80\n2120\n3CE0\nENDCHAR\nSTARTCHAR U_83CF\nENCODING 33743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4FE0\n2040\n8740\n6540\n2540\nC740\n4040\n41C0\nENDCHAR\nSTARTCHAR U_83D0\nENCODING 33744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n2A80\nFFE0\n1100\n7FE0\n0400\n3F80\n0400\n7FE0\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_83D1\nENCODING 33745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2480\n4900\n2480\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_83D2\nENCODING 33746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n3F80\n2480\n2280\n3F80\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_83D3\nENCODING 33747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2480\n3F80\n2480\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_83D4\nENCODING 33748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n7BC0\n4A40\n7A80\n4BE0\n7B40\n4A80\n4B40\n9A20\nENDCHAR\nSTARTCHAR U_83D5\nENCODING 33749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n1B00\n2080\nDF60\n0000\n7FC0\n4A40\n7FC0\n4AC0\nENDCHAR\nSTARTCHAR U_83D6\nENCODING 33750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n3F80\n2880\n2480\n7FC0\n4040\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_83D7\nENCODING 33751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n2100\nFFE0\n2520\n3D20\nE7E0\n2520\n27E0\nE420\nENDCHAR\nSTARTCHAR U_83D8\nENCODING 33752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n1080\n7E80\n1280\n1D40\n3520\n5200\n1440\n17A0\nENDCHAR\nSTARTCHAR U_83D9\nENCODING 33753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1F00\nFFE0\n2480\nFFE0\n2480\nFFE0\n0400\n7FC0\nENDCHAR\nSTARTCHAR U_83DA\nENCODING 33754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n7FE0\n0900\n0600\n1940\n7FC0\n0900\n0640\n79C0\nENDCHAR\nSTARTCHAR U_83DB\nENCODING 33755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BC0\n4A40\n7BC0\n4A40\n7BC0\n4040\n4140\n4080\nENDCHAR\nSTARTCHAR U_83DC\nENCODING 33756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n01C0\n7E80\n2880\n1500\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_83DD\nENCODING 33757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n2240\nFFE0\n2200\n3BC0\nE340\n2480\n2940\nD620\nENDCHAR\nSTARTCHAR U_83DE\nENCODING 33758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n7900\n11E0\nFEA0\n10A0\n3920\n5520\n92A0\n1440\nENDCHAR\nSTARTCHAR U_83DF\nENCODING 33759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1F00\n2200\nFFC0\n2240\n3FC0\n0A20\n32A0\nC1E0\nENDCHAR\nSTARTCHAR U_83E0\nENCODING 33760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4100\n27E0\n9520\n57C0\n2540\nE480\n2940\n3620\nENDCHAR\nSTARTCHAR U_83E1\nENCODING 33761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n3F80\n0200\n55A0\n4E20\n5520\n6CE0\n4020\n7FE0\nENDCHAR\nSTARTCHAR U_83E2\nENCODING 33762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n2400\nF7C0\n2840\n3740\nE540\n27A0\n2420\n63E0\nENDCHAR\nSTARTCHAR U_83E3\nENCODING 33763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n7FE0\n5220\n7E20\n4540\n4540\n7C80\n5140\n7E20\nENDCHAR\nSTARTCHAR U_83E4\nENCODING 33764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n0800\nFFE0\n2080\nDF60\n1100\n1240\n0FC0\nENDCHAR\nSTARTCHAR U_83E5\nENCODING 33765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n23C0\nFA00\n23E0\n3240\n6A40\nA240\n2440\n2840\nENDCHAR\nSTARTCHAR U_83E6\nENCODING 33766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n0A00\n4040\n2780\n6400\n27E0\n2900\n2900\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_83E7\nENCODING 33767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n4080\n5F00\n5100\n5FE0\n5100\n54A0\n9A60\nENDCHAR\nSTARTCHAR U_83E8\nENCODING 33768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n1100\n7FC0\n0800\nFFE0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_83E9\nENCODING 33769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n1100\nFFE0\n0000\n3F80\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_83EA\nENCODING 33770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n8020\nFFE0\n0800\n1FC0\n3040\nDFC0\n1040\nENDCHAR\nSTARTCHAR U_83EB\nENCODING 33771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n2480\n2480\n7FC0\n0400\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_83EC\nENCODING 33772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n4FE0\n2220\n9540\n5880\n27E0\nC420\n47E0\n4420\nENDCHAR\nSTARTCHAR U_83ED\nENCODING 33773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n4200\n2440\n8FE0\n6020\n2FC0\nC840\n4FC0\n4840\nENDCHAR\nSTARTCHAR U_83EE\nENCODING 33774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n4440\n7FC0\n4460\n5FC0\n4600\n4900\nB0E0\nENDCHAR\nSTARTCHAR U_83EF\nENCODING 33775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n2480\nFFE0\n2480\n7FC0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_83F0\nENCODING 33776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF860\n17C0\n2540\n3D40\nE540\n2520\n25A0\nE9A0\nENDCHAR\nSTARTCHAR U_83F1\nENCODING 33777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n0400\nFFE0\n2880\nDF60\n2900\n0600\nF9E0\nENDCHAR\nSTARTCHAR U_83F2\nENCODING 33778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0A00\n7BC0\n0A00\n7BC0\n0A00\nFBE0\n0A00\n0A00\nENDCHAR\nSTARTCHAR U_83F3\nENCODING 33779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0E00\n3180\nDF60\n0400\n7FC0\n2480\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_83F4\nENCODING 33780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n1500\n3F80\nE4E0\n3F80\n24A0\n3FA0\n03E0\nENDCHAR\nSTARTCHAR U_83F5\nENCODING 33781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4A40\n7FC0\n4440\n7FC0\n5040\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_83F6\nENCODING 33782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n0800\n7FC0\n2480\nDF60\n0400\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_83F7\nENCODING 33783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n0A00\n3F80\n0080\nFFE0\n8420\nBF80\n2480\n2580\n0400\nENDCHAR\nSTARTCHAR U_83F8\nENCODING 33784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1100\nFA80\n2440\n3920\n28C0\n4A00\n4900\nB0C0\nENDCHAR\nSTARTCHAR U_83F9\nENCODING 33785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n27C0\n9440\n57C0\n2440\n27C0\nC440\n4440\n5FE0\nENDCHAR\nSTARTCHAR U_83FA\nENCODING 33786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3FC0\n2040\n3FC0\n2840\n2FC0\n2840\n4FC0\n88C0\nENDCHAR\nSTARTCHAR U_83FB\nENCODING 33787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n1080\nFFE0\n1080\n3980\n56C0\n94A0\n18A0\n1080\nENDCHAR\nSTARTCHAR U_83FC\nENCODING 33788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n2440\n4A80\n1180\n6440\n14A0\n6B00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_83FD\nENCODING 33789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n13E0\n1D40\n1140\nFF40\n5540\n5280\n9140\n3620\nENDCHAR\nSTARTCHAR U_83FE\nENCODING 33790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n0800\nFFE0\n2440\nC6A0\n1540\n64A0\n0C00\nENDCHAR\nSTARTCHAR U_83FF\nENCODING 33791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\nFE20\n24A0\n7AA0\n10A0\n7CA0\n10A0\n1E20\nF0E0\nENDCHAR\nSTARTCHAR U_8400\nENCODING 33792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n4840\n7F00\n4880\n4F80\n4900\n8920\nB0E0\nENDCHAR\nSTARTCHAR U_8401\nENCODING 33793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n1100\n1D00\n1700\n1100\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_8402\nENCODING 33794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n0A00\n7C00\n13C0\n7E40\n1240\n3A40\n57C0\n9240\n1000\nENDCHAR\nSTARTCHAR U_8403\nENCODING 33795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n2100\n5280\n8C40\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_8404\nENCODING 33796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3FE0\n5020\nBF20\n0820\nFFA0\n4920\n7F20\n00C0\nENDCHAR\nSTARTCHAR U_8405\nENCODING 33797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFC0\n4480\n7F80\n0420\n03E0\n3FC0\n2440\n3FC0\nENDCHAR\nSTARTCHAR U_8406\nENCODING 33798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FE0\n1500\n3FC0\n2440\n3FC0\n2440\n3FC0\n1200\n7FE0\n0200\nENDCHAR\nSTARTCHAR U_8407\nENCODING 33799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n1FC0\n1000\n1F80\n1000\nFFE0\n1280\n1500\n18E0\nENDCHAR\nSTARTCHAR U_8408\nENCODING 33800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n0A00\n3F80\n2080\n3F80\n2080\n3F80\n0A80\n1220\n61E0\nENDCHAR\nSTARTCHAR U_8409\nENCODING 33801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n77C0\n5540\n7540\n5540\n77C0\n5420\n5420\nB3E0\nENDCHAR\nSTARTCHAR U_840A\nENCODING 33802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n2480\n5540\n8E20\n1500\n2480\n4440\n8420\nENDCHAR\nSTARTCHAR U_840B\nENCODING 33803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n0480\nFFE0\n0480\n7FE0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_840C\nENCODING 33804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BC0\n4A40\n7BC0\n4A40\n7BC0\n4A40\n0440\n08C0\nENDCHAR\nSTARTCHAR U_840D\nENCODING 33805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5100\n2FE0\n9920\n5540\n2540\n2FE0\nC100\n4100\n4100\nENDCHAR\nSTARTCHAR U_840E\nENCODING 33806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n3F80\n0400\nFFE0\n2480\nFFE0\n1100\n0E00\nF9E0\nENDCHAR\nSTARTCHAR U_840F\nENCODING 33807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n0F00\n1200\n2BC0\n6040\n3BC0\n2040\n3FC0\n2040\nENDCHAR\nSTARTCHAR U_8410\nENCODING 33808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n0480\n7FE0\n0480\n3F80\n27E0\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_8411\nENCODING 33809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2200\n3FE0\n6200\nBFC0\n2200\n3FC0\n2200\n3FE0\nENDCHAR\nSTARTCHAR U_8412\nENCODING 33810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n2100\n4880\n9240\n3F00\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_8413\nENCODING 33811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FE0\n1500\n7FE0\n4020\n5FA0\n1080\n1E80\n1780\n1080\n7FE0\nENDCHAR\nSTARTCHAR U_8414\nENCODING 33812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n0A00\n2000\nF7C0\n2240\n3240\nE480\n27C0\n2440\n67C0\nENDCHAR\nSTARTCHAR U_8415\nENCODING 33813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n1100\n0E00\n3180\nDFE0\n1080\n1F80\n2080\nENDCHAR\nSTARTCHAR U_8416\nENCODING 33814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3780\n2080\n3B80\n2080\n3F80\n1200\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_8417\nENCODING 33815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n8020\n3F80\n0000\nFFE0\n2480\n4440\n8C20\nENDCHAR\nSTARTCHAR U_8418\nENCODING 33816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n1100\n2E80\nC060\n7FC0\n1500\n2480\nCC60\nENDCHAR\nSTARTCHAR U_8419\nENCODING 33817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2100\n27E0\nFD20\n2100\n7180\nAAA0\n22A0\n24E0\nENDCHAR\nSTARTCHAR U_841A\nENCODING 33818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n27C0\nF440\n2380\n3D60\nE7C0\n2100\n2FE0\n6100\nENDCHAR\nSTARTCHAR U_841B\nENCODING 33819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n3280\n2980\n3F80\n1100\nFFE0\n1100\n2100\nENDCHAR\nSTARTCHAR U_841C\nENCODING 33820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2080\nF8E0\nA880\nABE0\nAA20\nB220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_841D\nENCODING 33821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4A40\n7FC0\n1000\n3F80\n5100\n0E00\nF800\nENDCHAR\nSTARTCHAR U_841E\nENCODING 33822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n0A00\n7FC0\n4440\n4A40\n0000\n4AC0\n7320\n4220\n71E0\nENDCHAR\nSTARTCHAR U_841F\nENCODING 33823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7A00\n2780\nFA80\n2680\n73A0\nA2A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_8420\nENCODING 33824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n0A00\n7BC0\n4A40\n7BC0\n4A40\n7BC0\n4A40\n4A40\n9480\nENDCHAR\nSTARTCHAR U_8421\nENCODING 33825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n0A00\n4200\n27C0\n8440\n57C0\n2440\nC440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_8422\nENCODING 33826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4400\n27C0\n0840\n6740\n1540\n6740\n24A0\n23E0\nENDCHAR\nSTARTCHAR U_8423\nENCODING 33827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n0200\nFFE0\n8020\n3F80\n1200\n13C0\n2A00\nC7E0\nENDCHAR\nSTARTCHAR U_8424\nENCODING 33828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8420\n7FC0\n4440\n7FC0\n0480\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_8425\nENCODING 33829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n7FE0\n4020\n5F80\n1080\n3FC0\n2040\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_8426\nENCODING 33830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n9120\n3E00\n0880\n7FC0\n2480\n4440\n8C20\nENDCHAR\nSTARTCHAR U_8427\nENCODING 33831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7F80\n0480\nFFE0\n0480\n3F80\n5540\n64C0\n8440\nENDCHAR\nSTARTCHAR U_8428\nENCODING 33832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF7E0\nA440\nC280\nA7E0\n9400\nE400\n8800\n9000\nENDCHAR\nSTARTCHAR U_8429\nENCODING 33833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF100\n2540\nF540\n2580\n7100\nAA80\n2440\n2820\nENDCHAR\nSTARTCHAR U_842A\nENCODING 33834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n7A40\n1140\n7A40\n1160\n39C0\n5640\n9040\n1040\nENDCHAR\nSTARTCHAR U_842B\nENCODING 33835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n7F80\n0400\nFFE0\n1480\n3FC0\nD0A0\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_842C\nENCODING 33836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2480\n3F80\n2480\nFFC0\n8540\n9F40\n80C0\nENDCHAR\nSTARTCHAR U_842D\nENCODING 33837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1140\n7F80\n0400\n3F80\n2480\n7FC0\n4540\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_842E\nENCODING 33838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n1A00\n2D80\nC060\n7D40\n4540\n7D40\n4440\n4C80\nENDCHAR\nSTARTCHAR U_842F\nENCODING 33839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1F00\n2200\n7F80\nA080\n3F80\n2080\n3F80\n60C0\nENDCHAR\nSTARTCHAR U_8430\nENCODING 33840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n0400\n7FC0\n5540\n7FC0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_8431\nENCODING 33841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n8020\n7FC0\n2080\n3F80\n2080\n3F80\nFFE0\nENDCHAR\nSTARTCHAR U_8432\nENCODING 33842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n7FC0\n2480\n7FE0\n0800\nFFE0\n2900\n4600\nB9E0\nENDCHAR\nSTARTCHAR U_8433\nENCODING 33843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n0400\n7FC0\n4A40\n5F40\n4440\n7FC0\n4440\nENDCHAR\nSTARTCHAR U_8434\nENCODING 33844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7C40\n4540\n7D40\n4540\n7D40\n4540\n7C40\nC6C0\nENDCHAR\nSTARTCHAR U_8435\nENCODING 33845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n3C80\n2480\nFFE0\n9120\n9120\n9F60\nENDCHAR\nSTARTCHAR U_8436\nENCODING 33846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n0800\nFFE0\n1F80\n30C0\nDFA0\n1080\n1F80\nENDCHAR\nSTARTCHAR U_8437\nENCODING 33847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n9220\n54A0\n7EA0\n42A0\n7EA0\n42A0\n7E20\n46E0\nENDCHAR\nSTARTCHAR U_8438\nENCODING 33848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n65C0\n4440\n75C0\n4440\n7FC0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_8439\nENCODING 33849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n4040\n7FC0\n4000\n5FC0\n5540\n5FC0\n9540\nENDCHAR\nSTARTCHAR U_843A\nENCODING 33850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n5F40\n4040\n7FC0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_843B\nENCODING 33851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n1100\nFFE0\n2080\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_843C\nENCODING 33852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BC0\n4A40\n4A40\nFFE0\n1000\n3F80\n0080\n0700\nENDCHAR\nSTARTCHAR U_843D\nENCODING 33853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4780\n2C80\n8300\n5480\n2860\nC780\n4480\n4780\nENDCHAR\nSTARTCHAR U_843E\nENCODING 33854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n0A00\n7F80\n1AC0\n2440\nCAC0\n0000\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_843F\nENCODING 33855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n27C0\n9100\n5FE0\n2100\nE7C0\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_8440\nENCODING 33856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n20C0\nFF00\n2100\n37E0\nE100\n27C0\n2440\n67C0\nENDCHAR\nSTARTCHAR U_8441\nENCODING 33857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0A00\nFFE0\n0400\n7FC0\n0400\nFFE0\n1100\n0E00\n71C0\nENDCHAR\nSTARTCHAR U_8442\nENCODING 33858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n7880\n53E0\nFCA0\n54A0\n7D20\n2AC0\n4820\n87E0\nENDCHAR\nSTARTCHAR U_8443\nENCODING 33859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7A00\n4BE0\n4D00\n79E0\n4900\n49E0\n7900\n0100\nENDCHAR\nSTARTCHAR U_8444\nENCODING 33860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7A00\n4BE0\n7D00\n49C0\n7900\n49E0\n4900\n9900\nENDCHAR\nSTARTCHAR U_8445\nENCODING 33861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n27C0\n2440\n57C0\nA440\n27C0\n5440\n8440\n0FE0\nENDCHAR\nSTARTCHAR U_8446\nENCODING 33862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n17C0\n2440\n27C0\n6100\nBFE0\n2540\n2940\n3120\nENDCHAR\nSTARTCHAR U_8447\nENCODING 33863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7F80\n0A00\nFFE0\n1440\n2400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_8448\nENCODING 33864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2080\n7FC0\n2080\n3F80\n0400\nFFE0\n2480\nC460\nENDCHAR\nSTARTCHAR U_8449\nENCODING 33865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n2900\nFFE0\n2900\n2F00\n3FC0\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_844A\nENCODING 33866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n0A00\n3F80\nD160\n1F00\n1100\nFFE0\n1100\n2100\nENDCHAR\nSTARTCHAR U_844B\nENCODING 33867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7A00\n4BE0\n7C20\n4BA0\n7AA0\n4BA0\n4820\n98C0\nENDCHAR\nSTARTCHAR U_844C\nENCODING 33868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1500\nFFE0\n1080\n0F00\n78C0\n2100\nFFE0\n4A40\n3180\nCE60\nENDCHAR\nSTARTCHAR U_844D\nENCODING 33869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n3F80\n2080\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_844E\nENCODING 33870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2FC0\n4140\n8FE0\n2140\n6FE0\nA100\n3FE0\n2100\nENDCHAR\nSTARTCHAR U_844F\nENCODING 33871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1200\n4FC0\nA240\n5FE0\n2240\n2FC0\nC200\n5FE0\n4200\nENDCHAR\nSTARTCHAR U_8450\nENCODING 33872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2080\nDF60\n0900\n1200\n3F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_8451\nENCODING 33873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2040\nF840\n23E0\nFC40\n2240\nF940\n2040\nFDC0\nENDCHAR\nSTARTCHAR U_8452\nENCODING 33874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n2000\n57C0\nE100\n4900\nF500\n5100\nA900\nAFE0\nENDCHAR\nSTARTCHAR U_8453\nENCODING 33875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5100\n2480\n8FE0\n2480\n2480\nDFE0\n4480\n4840\n5020\nENDCHAR\nSTARTCHAR U_8454\nENCODING 33876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n2F80\n2080\n5FE0\nC800\n4FC0\n5200\n5FE0\n4500\n58C0\nENDCHAR\nSTARTCHAR U_8455\nENCODING 33877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n24E0\n5200\nA9E0\n6240\nA440\n2C40\n2440\n20C0\nENDCHAR\nSTARTCHAR U_8456\nENCODING 33878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n9120\n64C0\n0500\nFFE0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_8457\nENCODING 33879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1540\n7F80\n0500\nFFE0\n1F80\n3080\nDF80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_8458\nENCODING 33880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1240\n2480\nFFE0\n1240\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_8459\nENCODING 33881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n13E0\nFE20\n13E0\n3220\n5BE0\n9620\n13E0\n1220\nENDCHAR\nSTARTCHAR U_845A\nENCODING 33882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFC0\n1100\n1F00\n1100\nFFE0\n2900\n3080\n3FC0\nENDCHAR\nSTARTCHAR U_845B\nENCODING 33883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n3F80\n2080\n3FE0\n6420\nAA20\n3F60\nENDCHAR\nSTARTCHAR U_845C\nENCODING 33884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n23C0\nF940\n2140\nFA40\n2480\nFFE0\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_845D\nENCODING 33885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFD00\n57E0\nA920\n5520\nFD20\n2120\n3A20\nC4C0\nENDCHAR\nSTARTCHAR U_845E\nENCODING 33886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF7E0\n1240\n73C0\n8240\nF3C0\n1240\n17E0\n6040\nENDCHAR\nSTARTCHAR U_845F\nENCODING 33887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1500\n3F80\n2080\n3F80\n2080\n7FC0\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_8460\nENCODING 33888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2FC0\n4040\n4FC0\nC040\n5FE0\n54A0\n4300\n5CE0\nENDCHAR\nSTARTCHAR U_8461\nENCODING 33889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3FE0\n4A20\nBFA0\n2920\n3F20\n2920\n3F20\n2940\nENDCHAR\nSTARTCHAR U_8462\nENCODING 33890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n0A00\n3580\nC260\n3F80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_8463\nENCODING 33891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n3F80\n0400\nFFE0\n2480\n3F80\n2480\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_8464\nENCODING 33892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n2940\n4040\nF7E0\n2840\nFA40\n0140\nA840\nA940\n8080\nENDCHAR\nSTARTCHAR U_8465\nENCODING 33893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n4440\n7D40\n4540\n7D40\n4540\n5440\n49C0\nENDCHAR\nSTARTCHAR U_8466\nENCODING 33894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3F80\n0880\nFFE0\n1080\n3FC0\n2200\n7FE0\n0200\nENDCHAR\nSTARTCHAR U_8467\nENCODING 33895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7D00\n13E0\nFD20\n8D20\n1120\nFD20\n12A0\n7440\nENDCHAR\nSTARTCHAR U_8468\nENCODING 33896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2480\n3F80\n2480\nFFE0\n2280\n2900\n70E0\nENDCHAR\nSTARTCHAR U_8469\nENCODING 33897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n4000\nF7C0\n9540\n9540\nF7C0\n9420\nF420\n03E0\nENDCHAR\nSTARTCHAR U_846A\nENCODING 33898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n2A00\n3C40\n4940\nFD40\n5540\n7D40\n5540\n7C40\n94C0\nENDCHAR\nSTARTCHAR U_846B\nENCODING 33899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n23C0\nFA40\n23C0\n7A40\n4BC0\n7A40\n0440\n08C0\nENDCHAR\nSTARTCHAR U_846C\nENCODING 33900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n2A80\nD320\n21E0\n5100\nFFE0\n1100\nE100\nENDCHAR\nSTARTCHAR U_846D\nENCODING 33901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BC0\n4840\n7BC0\n4000\n7BC0\n4240\n7980\n4660\nENDCHAR\nSTARTCHAR U_846E\nENCODING 33902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7B80\n4280\n74E0\n4000\n7FC0\n4280\nF900\n4EE0\nENDCHAR\nSTARTCHAR U_846F\nENCODING 33903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4200\n93E0\nE420\n4920\nF4A0\n5020\nA920\nA8C0\nENDCHAR\nSTARTCHAR U_8470\nENCODING 33904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n2840\n3FA0\n6480\nAA40\n37A0\n2C80\n2300\n3CE0\nENDCHAR\nSTARTCHAR U_8471\nENCODING 33905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5100\n7FC0\n9240\n1C40\n6640\n1B80\n4A40\n48A0\n87A0\nENDCHAR\nSTARTCHAR U_8472\nENCODING 33906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0800\n3F80\n2480\n3F80\n0440\n7580\n2480\nCC60\nENDCHAR\nSTARTCHAR U_8473\nENCODING 33907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1140\n7FE0\n4100\n7F20\n4940\n7F40\n5580\n4CA0\nB360\nENDCHAR\nSTARTCHAR U_8474\nENCODING 33908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1140\n7FE0\n4100\n5D20\n4140\n5D80\n5520\n5EA0\n8460\nENDCHAR\nSTARTCHAR U_8475\nENCODING 33909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFE80\n5340\n2180\n5E80\n8460\n7F80\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_8476\nENCODING 33910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n2080\nFFE0\n8020\n3F80\n0400\n1400\n0800\nENDCHAR\nSTARTCHAR U_8477\nENCODING 33911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8420\nFFE0\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8478\nENCODING 33912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4440\n7FC0\n4440\n7FC0\n1440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_8479\nENCODING 33913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n2900\n7BE0\n2480\n3AE0\n2BA0\n2EE0\n2A80\n4A20\nB1E0\nENDCHAR\nSTARTCHAR U_847A\nENCODING 33914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n1F80\n1080\n7FE0\n1080\n1F80\n1080\n7FC0\n0080\nENDCHAR\nSTARTCHAR U_847B\nENCODING 33915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4440\n5F40\n5540\n5F40\n4540\n5FA0\n80A0\nENDCHAR\nSTARTCHAR U_847C\nENCODING 33916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4E40\n5140\n7FC0\n2880\nDF60\n2900\n4600\n39C0\nENDCHAR\nSTARTCHAR U_847D\nENCODING 33917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n4A40\n7FC0\n0800\nFFE0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_847E\nENCODING 33918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3BC0\n4A40\nAAC0\n1220\nE1E0\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_847F\nENCODING 33919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n3FC0\n2240\n3FC0\n2940\n2A40\n2CC0\n4940\n8FC0\nENDCHAR\nSTARTCHAR U_8480\nENCODING 33920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n1F80\n1080\n1F80\n1080\n3FC0\n2940\n2940\nFFE0\nENDCHAR\nSTARTCHAR U_8481\nENCODING 33921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4240\n3FE0\nE700\n2A80\n3240\n2220\n5200\n8FE0\nENDCHAR\nSTARTCHAR U_8482\nENCODING 33922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n1100\nFFE0\n8420\n3F80\n2480\n2580\n0400\nENDCHAR\nSTARTCHAR U_8483\nENCODING 33923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n0F80\n1100\nFFE0\n1480\n6B00\n1680\n0A60\n3600\nENDCHAR\nSTARTCHAR U_8484\nENCODING 33924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n80A0\n7BC0\n0480\nFA80\n2A80\n4920\n87E0\nENDCHAR\nSTARTCHAR U_8485\nENCODING 33925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n2900\n4200\n1780\n62A0\n2460\n7FC0\n0E00\n3580\nC460\nENDCHAR\nSTARTCHAR U_8486\nENCODING 33926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n77C0\n2540\nF860\n0400\nFFE0\n0900\n0600\nF9E0\nENDCHAR\nSTARTCHAR U_8487\nENCODING 33927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0940\n7FE0\n4100\n5F20\n5120\n5540\n54A0\n4B60\nB220\nENDCHAR\nSTARTCHAR U_8488\nENCODING 33928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5240\n7B80\n4220\n71E0\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8489\nENCODING 33929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3F80\n2480\nFFE0\n2080\n2480\n2480\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_848A\nENCODING 33930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nFFC0\n1200\n32C0\n6700\nBA20\n21E0\n0200\n7B80\n4A20\n79E0\nENDCHAR\nSTARTCHAR U_848B\nENCODING 33931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n27C0\nAC80\n6300\n2480\n7FE0\nA480\n2280\n2180\nENDCHAR\nSTARTCHAR U_848C\nENCODING 33932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5140\n2480\nFFE0\n2480\n4C40\nFFE0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_848D\nENCODING 33933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5500\n2800\nFF80\n0900\n0FC0\n1080\n7FE0\n9520\n2AE0\nENDCHAR\nSTARTCHAR U_848E\nENCODING 33934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n4900\n2FC0\n8840\n4B80\n2AA0\n2AC0\nCA80\n4B40\n5620\nENDCHAR\nSTARTCHAR U_848F\nENCODING 33935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8A20\n7FC0\n4A40\n5340\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_8490\nENCODING 33936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3FC0\n2440\n3FC0\n2440\n3FC0\n0B60\n12A0\nE1E0\nENDCHAR\nSTARTCHAR U_8491\nENCODING 33937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BC0\n4A40\n7C20\n4BC0\n7D40\n4540\n4480\n9B60\nENDCHAR\nSTARTCHAR U_8492\nENCODING 33938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n2100\n77E0\n5100\n77C0\n4540\n7540\n5540\n7540\n0100\nENDCHAR\nSTARTCHAR U_8493\nENCODING 33939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nFFE0\n1200\n2100\n57C0\n7100\n2D40\n7FC0\n0100\nA920\nA8E0\nENDCHAR\nSTARTCHAR U_8494\nENCODING 33940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF7C0\n9100\n9FE0\nF080\n9FE0\n9480\nF280\n0100\nENDCHAR\nSTARTCHAR U_8495\nENCODING 33941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2480\n2A80\n3180\n7FC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_8496\nENCODING 33942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n0400\n3F80\n2A80\n3580\n2A80\nFFE0\n2080\nENDCHAR\nSTARTCHAR U_8497\nENCODING 33943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4200\n2F80\n8880\n5F80\n2880\nCFA0\n4940\n4EE0\nENDCHAR\nSTARTCHAR U_8498\nENCODING 33944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5100\nFBC0\n5240\n33C0\nC800\n3F80\n0400\nFFE0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_8499\nENCODING 33945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8020\n7FC0\nD440\n2680\nCB00\n1280\nEC60\nENDCHAR\nSTARTCHAR U_849A\nENCODING 33946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\nFFE0\n1100\n1F00\n0000\n7FC0\n4A40\n7FC0\n4440\nENDCHAR\nSTARTCHAR U_849B\nENCODING 33947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4100\nFBC0\n2140\nF940\nAFE0\nA980\nFA40\n0420\nENDCHAR\nSTARTCHAR U_849C\nENCODING 33948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BC0\n0000\nFBE0\n2080\n72C0\nAAA0\n24A0\n6180\nENDCHAR\nSTARTCHAR U_849D\nENCODING 33949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FE0\n5040\n5FC0\n5040\n5FC0\n4A80\n9240\nA620\nENDCHAR\nSTARTCHAR U_849E\nENCODING 33950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4480\n2FE0\nA800\n7A40\n2940\nC940\n4880\n4FE0\nENDCHAR\nSTARTCHAR U_849F\nENCODING 33951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2200\nFBE0\n0420\n53A0\n52A0\n2BA0\nF020\n00C0\nENDCHAR\nSTARTCHAR U_84A0\nENCODING 33952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3F80\n2080\n3F80\n2080\n3F80\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_84A1\nENCODING 33953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1500\n7FE0\n0900\nFFE0\n8420\nFFE0\n0800\n1FC0\n2040\nC380\nENDCHAR\nSTARTCHAR U_84A2\nENCODING 33954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF100\n9280\nAFE0\n9100\nDFE0\nA540\n8920\n9320\nENDCHAR\nSTARTCHAR U_84A3\nENCODING 33955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n1080\n2300\n54C0\nABA0\n6100\nAFE0\n2540\n2920\n2300\nENDCHAR\nSTARTCHAR U_84A4\nENCODING 33956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4300\n2480\n9FC0\n7120\n2FC0\nC580\n4940\n5720\nENDCHAR\nSTARTCHAR U_84A5\nENCODING 33957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n1900\n63C0\n5140\n6AC0\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_84A6\nENCODING 33958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n2200\n7FC0\nA200\n3F80\n2200\n7FC0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_84A7\nENCODING 33959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1140\n7FE0\n4900\n4D40\n4940\n5CC0\n54A0\n9D60\n8220\nENDCHAR\nSTARTCHAR U_84A8\nENCODING 33960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n27C0\n2100\n7FE0\nA440\n27C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_84A9\nENCODING 33961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BC0\n1240\nFBC0\n3240\n5BC0\n9640\n1240\n1FE0\nENDCHAR\nSTARTCHAR U_84AA\nENCODING 33962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n2480\n3F80\n2480\n0100\nFFE0\n2100\n1300\nENDCHAR\nSTARTCHAR U_84AB\nENCODING 33963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFC0\n0400\n3F80\n0400\nFFE0\n2200\n4200\nBFE0\nENDCHAR\nSTARTCHAR U_84AC\nENCODING 33964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\nA220\n7FC0\nA440\n3FC0\n0A00\n12A0\nE1E0\nENDCHAR\nSTARTCHAR U_84AD\nENCODING 33965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n2900\n3FC0\n5540\n9F40\n2840\n3FC0\nD540\n1F40\n08C0\nENDCHAR\nSTARTCHAR U_84AE\nENCODING 33966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n8A20\n1200\n3FE0\n6200\nBFC0\n2200\n3FE0\nENDCHAR\nSTARTCHAR U_84AF\nENCODING 33967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2420\nFF20\n24A0\nEEA0\nAAA0\nEEA0\nAAA0\nEEA0\nAA20\nAA20\nB6E0\nENDCHAR\nSTARTCHAR U_84B0\nENCODING 33968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7DC0\n5540\n5660\nFC00\n57E0\n5540\n4480\n9F60\nENDCHAR\nSTARTCHAR U_84B1\nENCODING 33969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n2140\nFFE0\n2540\n37C0\nE540\n27C0\n2540\n65C0\nENDCHAR\nSTARTCHAR U_84B2\nENCODING 33970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1140\n5FE0\n2920\n8FE0\n6920\n2FE0\nC920\n4920\n4960\nENDCHAR\nSTARTCHAR U_84B3\nENCODING 33971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nFFE0\n1200\n2100\n57C0\n7540\n2D40\nFEC0\n0440\nAC40\nACC0\nENDCHAR\nSTARTCHAR U_84B4\nENCODING 33972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5100\n29E0\nFF20\n55E0\n5520\n7DE0\n1120\n2220\nC460\nENDCHAR\nSTARTCHAR U_84B5\nENCODING 33973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n1480\n0900\n7FC0\n0400\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_84B6\nENCODING 33974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n2900\n2240\n5420\nFBE0\n2140\n5140\nF940\n5240\nACC0\nENDCHAR\nSTARTCHAR U_84B7\nENCODING 33975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1F00\n1100\n3F80\n2080\n3F80\n2080\n3F80\n60C0\nENDCHAR\nSTARTCHAR U_84B8\nENCODING 33976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n0240\nF580\n2480\n4460\nBF80\n5240\n8920\nENDCHAR\nSTARTCHAR U_84B9\nENCODING 33977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n7FE0\n0A40\n7FE0\n0A40\n3FC0\n1A80\n2A40\nCA20\nENDCHAR\nSTARTCHAR U_84BA\nENCODING 33978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nBFE0\n6800\n2FC0\n6200\nBFE0\n2500\n4880\nB060\nENDCHAR\nSTARTCHAR U_84BB\nENCODING 33979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBE0\n0820\n79E0\n8200\nFBE0\n4920\n28A0\nD340\nENDCHAR\nSTARTCHAR U_84BC\nENCODING 33980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n1480\n3FC0\nD0A0\n1F80\n1080\n1FC0\n2840\nCFC0\nENDCHAR\nSTARTCHAR U_84BD\nENCODING 33981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n3FC0\n2240\n2FC0\n2540\n3FC0\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_84BE\nENCODING 33982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4200\n0A40\nE680\n3FE0\n2680\n2A40\n5200\n8FE0\nENDCHAR\nSTARTCHAR U_84BF\nENCODING 33983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n1100\n1F00\n0000\n7FC0\n5140\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_84C0\nENCODING 33984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n1240\n2780\n3940\nE7E0\n2080\n24C0\n69A0\nENDCHAR\nSTARTCHAR U_84C1\nENCODING 33985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7F80\n0800\nFFE0\n2E80\nC460\n3F80\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_84C2\nENCODING 33986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\nA0A0\n3F80\n2080\nFFE0\n0000\n2080\n4040\nENDCHAR\nSTARTCHAR U_84C3\nENCODING 33987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n75C0\n4440\n75C0\n4440\n7FC0\n1100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_84C4\nENCODING 33988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n1200\n2480\n7FC0\n2480\n3F80\n2480\n3F80\nENDCHAR\nSTARTCHAR U_84C5\nENCODING 33989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4FE0\nA440\n5FA0\n2000\n2A80\nCA80\n52A0\n6260\nENDCHAR\nSTARTCHAR U_84C6\nENCODING 33990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n4880\n7FE0\n4880\n5FC0\n5240\n52C0\n8200\nENDCHAR\nSTARTCHAR U_84C7\nENCODING 33991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2480\nFFE0\nA0A0\nBF80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_84C8\nENCODING 33992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n2100\n7BC0\n4A40\n7A80\n4A40\n7A40\n5340\n6A80\n4A00\nENDCHAR\nSTARTCHAR U_84C9\nENCODING 33993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n9120\n6AC0\n1100\n3F80\nD160\n1100\n1F00\nENDCHAR\nSTARTCHAR U_84CA\nENCODING 33994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1480\n2940\nDFA0\n0000\nFBE0\n4920\n28A0\nDB60\nENDCHAR\nSTARTCHAR U_84CB\nENCODING 33995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7F80\n0400\nFFE0\n1080\n3FC0\n2940\n2940\nFFE0\nENDCHAR\nSTARTCHAR U_84CC\nENCODING 33996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2480\n5540\nBFA0\n0400\nFFE0\n5100\n8E00\nF1E0\nENDCHAR\nSTARTCHAR U_84CD\nENCODING 33997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1540\n7F80\n0500\nFFE0\n3040\nDFC0\n1080\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_84CE\nENCODING 33998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1500\n7FE0\n4240\n7FE0\n4240\n5FC0\n4200\n5FC0\n9040\n9FC0\nENDCHAR\nSTARTCHAR U_84CF\nENCODING 33999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nFFE0\n0880\n0CE0\n7740\n5540\n5540\n5540\n5540\n5DA0\n9520\nENDCHAR\nSTARTCHAR U_84D0\nENCODING 34000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4000\n7FE0\n5540\n5880\n7FE0\n5080\n8B80\nENDCHAR\nSTARTCHAR U_84D1\nENCODING 34001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n2080\nFFE0\n2080\n3FA0\n1140\n3480\nD860\nENDCHAR\nSTARTCHAR U_84D2\nENCODING 34002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n5480\n7C80\n57E0\n7C80\n1080\nFE80\n1080\nENDCHAR\nSTARTCHAR U_84D3\nENCODING 34003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2FE0\n2480\n3FE0\n6000\nA7C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_84D4\nENCODING 34004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0A00\nFFC0\n0400\n7F80\n0400\nFFE0\n4A40\n8920\nENDCHAR\nSTARTCHAR U_84D5\nENCODING 34005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nFFE0\n1200\n2100\nF7C0\n2100\n77E0\n6900\nA7C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_84D6\nENCODING 34006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n5540\n4A40\n7FC0\n4200\n7BC0\n4220\n79E0\nENDCHAR\nSTARTCHAR U_84D7\nENCODING 34007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2100\n47C0\n9100\n2FE0\n6500\nA5C0\n2B00\n31E0\nENDCHAR\nSTARTCHAR U_84D8\nENCODING 34008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n1500\n2A80\n7F40\n0A00\n3140\nD080\n1860\nENDCHAR\nSTARTCHAR U_84D9\nENCODING 34009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n5480\n5480\n6D40\n4400\n5F80\n8400\nBFC0\nENDCHAR\nSTARTCHAR U_84DA\nENCODING 34010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1200\n25C0\n6A40\nA9A0\n2E40\n2980\n2A40\n2180\n2600\nENDCHAR\nSTARTCHAR U_84DB\nENCODING 34011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2100\nFFE0\n2340\nF940\nA940\n3080\n6940\nA620\nENDCHAR\nSTARTCHAR U_84DC\nENCODING 34012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2100\nFBC0\n5040\nF840\nABC0\nAA00\nDA20\n8A20\nF9E0\nENDCHAR\nSTARTCHAR U_84DD\nENCODING 34013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n5200\n53C0\n5500\n1080\n7FC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_84DE\nENCODING 34014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n0A00\n7FC0\n2880\n1500\n73C0\n4040\n7BC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_84DF\nENCODING 34015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n30A0\n7CA0\nD4A0\n7CA0\n54A0\n7CA0\n0020\n7CE0\nENDCHAR\nSTARTCHAR U_84E0\nENCODING 34016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n2A80\n2480\n2A80\n7FC0\n4A40\n5F40\n41C0\nENDCHAR\nSTARTCHAR U_84E1\nENCODING 34017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4FC0\n2040\n9FE0\n5020\n2F80\nC480\n4300\n5CE0\nENDCHAR\nSTARTCHAR U_84E2\nENCODING 34018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BC0\n4A40\n7BC0\n4A40\n7BC0\n5240\n5A40\n6CC0\nENDCHAR\nSTARTCHAR U_84E3\nENCODING 34019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBE0\n5100\n23E0\nFA20\n2AA0\n22A0\n2140\nE620\nENDCHAR\nSTARTCHAR U_84E4\nENCODING 34020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n1280\n4FC0\n2200\n1FE0\n2A40\nD7A0\n4C80\n4300\n5CE0\nENDCHAR\nSTARTCHAR U_84E5\nENCODING 34021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8A20\n1100\n3F80\nC460\n3F80\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_84E6\nENCODING 34022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\nFFE0\n3140\nDFE0\n0040\n7E40\n0180\nENDCHAR\nSTARTCHAR U_84E7\nENCODING 34023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n27C0\n4A80\nD180\n5660\n5100\n5FE0\n4940\n5720\nENDCHAR\nSTARTCHAR U_84E8\nENCODING 34024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n23E0\n5640\n5980\nD660\n57C0\n5440\n57C0\n44C0\nENDCHAR\nSTARTCHAR U_84E9\nENCODING 34025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBE0\n5640\nF980\n2E60\n6100\nA7E0\n2220\n6CC0\nENDCHAR\nSTARTCHAR U_84EA\nENCODING 34026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n9100\n4FC0\n0280\nEFC0\n2940\n2FC0\n2940\n58C0\n8FE0\nENDCHAR\nSTARTCHAR U_84EB\nENCODING 34027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n5FE0\n2520\nFAC0\n2580\n3AC0\n24A0\n5900\n8FE0\nENDCHAR\nSTARTCHAR U_84EC\nENCODING 34028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1380\n4480\n2380\n0D60\nE380\n2100\n27C0\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_84ED\nENCODING 34029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n1280\n7FE0\n4200\n7FC0\n4A80\n5FE0\n6A80\n8FA0\n81E0\nENDCHAR\nSTARTCHAR U_84EE\nENCODING 34030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n9FE0\n4940\nEFC0\n2940\n3FE0\n2100\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_84EF\nENCODING 34031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2440\n4440\n9BA0\n2100\n65E0\nA500\n2B00\n31E0\nENDCHAR\nSTARTCHAR U_84F0\nENCODING 34032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2100\n45C0\nA500\n7FE0\nA500\n25E0\n2B00\n31E0\nENDCHAR\nSTARTCHAR U_84F1\nENCODING 34033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4440\n2280\n9FE0\n6480\n2FE0\nC480\n4880\n5080\nENDCHAR\nSTARTCHAR U_84F2\nENCODING 34034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4900\n4900\n5FC0\n5540\n5DC0\n4000\n7FE0\nENDCHAR\nSTARTCHAR U_84F3\nENCODING 34035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n0A00\n0A00\n3F80\n2480\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_84F4\nENCODING 34036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFC0\n2440\n3FC0\n2440\n7FC0\n0120\nFFE0\n1300\nENDCHAR\nSTARTCHAR U_84F5\nENCODING 34037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2FE0\nF140\n27E0\n3140\n67C0\nA580\n2700\n69E0\nENDCHAR\nSTARTCHAR U_84F6\nENCODING 34038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7280\n57E0\n5C80\n57E0\n5480\n77E0\n5480\n07E0\nENDCHAR\nSTARTCHAR U_84F7\nENCODING 34039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2280\nFFE0\n2480\n3FE0\nE480\n27E0\n2480\n67E0\nENDCHAR\nSTARTCHAR U_84F8\nENCODING 34040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n2A80\nFFE0\n4A40\n7FC0\n4A40\n7FC0\n2480\n2280\n3F80\nENDCHAR\nSTARTCHAR U_84F9\nENCODING 34041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n48E0\nAFA0\n44A0\nDFA0\n44A0\n57E0\n5480\n5F80\nENDCHAR\nSTARTCHAR U_84FA\nENCODING 34042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF900\n23C0\nFD40\n4B40\nA5C0\nF940\n2220\nFC20\nENDCHAR\nSTARTCHAR U_84FB\nENCODING 34043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFC0\n2140\nFF40\n5140\nFDC0\n2140\nFE20\n2420\nENDCHAR\nSTARTCHAR U_84FC\nENCODING 34044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBC0\n2940\n18C0\n2E40\nF1E0\n1E00\n00C0\n1F00\nENDCHAR\nSTARTCHAR U_84FD\nENCODING 34045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4440\n7FC0\n2480\nFFE0\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_84FE\nENCODING 34046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n07C0\n0400\n7FC0\n4A40\n5540\n4A40\n5540\n7FC0\nENDCHAR\nSTARTCHAR U_84FF\nENCODING 34047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n87E0\n2100\n67C0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_8500\nENCODING 34048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n4520\n2940\nFF40\n0120\n7DA0\n4540\n7D00\nENDCHAR\nSTARTCHAR U_8501\nENCODING 34049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n1100\nFFE0\n2080\n3F80\n0400\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_8502\nENCODING 34050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n4440\n7FC0\n4440\n7FC0\n0A00\n1480\n7F40\n2500\nCCE0\nENDCHAR\nSTARTCHAR U_8503\nENCODING 34051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nE780\n2480\nE780\n8FC0\nE940\n2FC0\n2140\nCFE0\nENDCHAR\nSTARTCHAR U_8504\nENCODING 34052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BC0\n4A40\n7BC0\n4A40\n7FC0\n5140\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_8505\nENCODING 34053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BC0\n4A40\n7BC0\n4440\n5F40\n4A40\n4440\n5AC0\nENDCHAR\nSTARTCHAR U_8506\nENCODING 34054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4FE0\nA100\n5FE0\n2A40\nD3A0\n4C80\n4300\n4CE0\nENDCHAR\nSTARTCHAR U_8507\nENCODING 34055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF7E0\n9280\nF480\n97E0\nF080\n91A0\n9AA0\nEC60\nENDCHAR\nSTARTCHAR U_8508\nENCODING 34056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\nFFE0\n4A40\n4A40\n7FC0\n0000\n7FE0\n2500\nCCE0\nENDCHAR\nSTARTCHAR U_8509\nENCODING 34057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n2080\nDF60\n1100\n1F40\n3280\nD500\n18E0\nENDCHAR\nSTARTCHAR U_850A\nENCODING 34058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n27C0\n2C40\nB7C0\nA440\nAFE0\n2100\n5FE0\n8900\nENDCHAR\nSTARTCHAR U_850B\nENCODING 34059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n44E0\nA6A0\n44A0\n3EA0\nC4A0\n4E40\n55A0\n4D20\nENDCHAR\nSTARTCHAR U_850C\nENCODING 34060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFD00\n11E0\n7E20\n5480\n7C80\n3880\n5540\n9220\nENDCHAR\nSTARTCHAR U_850D\nENCODING 34061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n4940\n7FC0\n5100\n5D40\n5180\n5520\n98E0\nENDCHAR\nSTARTCHAR U_850E\nENCODING 34062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2380\nFA80\n02E0\nF400\n07C0\nF280\n9100\nFEE0\nENDCHAR\nSTARTCHAR U_850F\nENCODING 34063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n1100\n7FC0\n4940\n5FC0\n4940\n4F40\n40C0\nENDCHAR\nSTARTCHAR U_8510\nENCODING 34064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n1100\n7FC0\n4440\n7FC0\n5140\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_8511\nENCODING 34065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4A40\n7FE0\n4200\n7240\n4A80\n8320\n9CE0\nENDCHAR\nSTARTCHAR U_8512\nENCODING 34066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7F80\n0880\n7FE0\n1080\n3FC0\nD040\n5FC0\n8920\nENDCHAR\nSTARTCHAR U_8513\nENCODING 34067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\n7FC0\n4A40\n7FC0\n0900\n0600\n79E0\nENDCHAR\nSTARTCHAR U_8514\nENCODING 34068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n2900\n3FE0\n5220\nBF20\n2920\n3F20\n2920\n3F20\n00C0\nENDCHAR\nSTARTCHAR U_8515\nENCODING 34069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n2A80\nFFE0\n2A80\n44E0\nFFE0\n8420\n3F80\n2480\n2580\nENDCHAR\nSTARTCHAR U_8516\nENCODING 34070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1780\n0400\n7FE0\n4420\n5FE0\n5040\n5FC0\n9040\nBFE0\nENDCHAR\nSTARTCHAR U_8517\nENCODING 34071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n4900\n7FE0\n4900\n4F00\n5540\n94A0\nA4A0\nENDCHAR\nSTARTCHAR U_8518\nENCODING 34072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2940\nFBC0\n2C80\nD260\n0C80\n3300\n0C00\nENDCHAR\nSTARTCHAR U_8519\nENCODING 34073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2200\nFBE0\n4400\n77E0\n52A0\n52E0\n9580\nA8E0\nENDCHAR\nSTARTCHAR U_851A\nENCODING 34074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7C40\n45E0\n7C40\n4140\n7EC0\n4840\nAC40\nDAC0\nENDCHAR\nSTARTCHAR U_851B\nENCODING 34075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2100\n7A40\n9140\n7E40\n5540\n7C60\n57C0\n7C40\n9440\nENDCHAR\nSTARTCHAR U_851C\nENCODING 34076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFD00\n11E0\n7F40\n1140\nFD40\n2880\n4940\n9620\nENDCHAR\nSTARTCHAR U_851D\nENCODING 34077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1920\nF540\n9100\nFFE0\n9100\nF380\n9540\nF920\n0100\nENDCHAR\nSTARTCHAR U_851E\nENCODING 34078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\nE4E0\n3F80\n4440\nFFE0\n1100\n0E00\nF9E0\nENDCHAR\nSTARTCHAR U_851F\nENCODING 34079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2200\nFBE0\n4500\n73E0\n5480\n57E0\n9140\nB620\nENDCHAR\nSTARTCHAR U_8520\nENCODING 34080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n27C0\n4A80\nF100\n22C0\n5520\nF0C0\n5300\nA8C0\nENDCHAR\nSTARTCHAR U_8521\nENCODING 34081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3FE0\n4940\nBE80\n2060\nDF80\n1500\n2480\nCC60\nENDCHAR\nSTARTCHAR U_8522\nENCODING 34082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5200\n8FC0\n2A40\nCF80\n4900\n5680\nFFE0\n1200\n7F80\nENDCHAR\nSTARTCHAR U_8523\nENCODING 34083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n57C0\n5A80\n7500\n1280\nFFE0\n5480\n5280\n9100\nENDCHAR\nSTARTCHAR U_8524\nENCODING 34084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n8920\n5640\n5CA0\nEFA0\n2440\n2440\n3FC0\nENDCHAR\nSTARTCHAR U_8525\nENCODING 34085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3F80\n2580\n2A80\n2480\n3F80\n1440\n52A0\n8F80\nENDCHAR\nSTARTCHAR U_8526\nENCODING 34086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3F80\n2080\n3F80\n2080\n3FE0\n2000\n7FE0\n92A0\nENDCHAR\nSTARTCHAR U_8527\nENCODING 34087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBC0\n1100\nFFE0\n3FC0\n0040\n3FC0\n0040\n3FC0\nENDCHAR\nSTARTCHAR U_8528\nENCODING 34088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n5540\n7FC0\n5140\n7EC0\n5040\n5140\n7FC0\nENDCHAR\nSTARTCHAR U_8529\nENCODING 34089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n8420\n7FC0\n2480\n3F80\n2480\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_852A\nENCODING 34090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n5500\n7DE0\n5540\n7D40\n1140\nFE40\n1440\nENDCHAR\nSTARTCHAR U_852B\nENCODING 34091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n1200\nFFE0\n2000\n3FE0\n0020\n5520\n8AC0\nENDCHAR\nSTARTCHAR U_852C\nENCODING 34092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n1240\n27E0\nA000\nB540\nA540\nB540\nE960\nENDCHAR\nSTARTCHAR U_852D\nENCODING 34093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1380\nF540\nABA0\nC080\nA7C0\n9000\nEFE0\n8440\n8FA0\nENDCHAR\nSTARTCHAR U_852E\nENCODING 34094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4540\n7FC0\n5440\n72C0\n4940\n52C0\n7FC0\nENDCHAR\nSTARTCHAR U_852F\nENCODING 34095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\nFFE0\n9540\nA7C0\n9540\n97C0\nE380\n8540\n8920\nENDCHAR\nSTARTCHAR U_8530\nENCODING 34096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1500\n7FC0\n4040\n7FC0\n4880\n5FC0\n5240\n5FC0\n5020\n8FE0\nENDCHAR\nSTARTCHAR U_8531\nENCODING 34097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4BC0\n3240\nCA40\n2420\nFBC0\n2240\n7180\nAE60\nENDCHAR\nSTARTCHAR U_8532\nENCODING 34098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n8120\n7BC0\n0680\nFA80\n5120\n52A0\n8FE0\nENDCHAR\nSTARTCHAR U_8533\nENCODING 34099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n47C0\n2100\n8FE0\n6440\n27C0\nC440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_8534\nENCODING 34100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n4900\n7FC0\n4900\n5D80\n6B40\n4D20\n8900\nENDCHAR\nSTARTCHAR U_8535\nENCODING 34101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1140\n7FE0\n5100\n7D40\n4540\n7D40\n50A0\n7D60\n8220\nENDCHAR\nSTARTCHAR U_8536\nENCODING 34102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3F80\n0400\n7FC0\n2880\n2480\n3F80\n1100\n60C0\nENDCHAR\nSTARTCHAR U_8537\nENCODING 34103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n2480\n1500\nFFE0\n2940\n2F40\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_8538\nENCODING 34104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nEEE0\n8A20\n9E20\nEAE0\n0E00\n1100\n1120\nE1E0\nENDCHAR\nSTARTCHAR U_8539\nENCODING 34105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3900\n45E0\nFA40\n2540\nA940\n4880\n5140\nFA20\nENDCHAR\nSTARTCHAR U_853A\nENCODING 34106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n2900\n17E0\n4A20\n5220\n5FA0\n7220\n5FA0\n5220\n5FE0\nENDCHAR\nSTARTCHAR U_853B\nENCODING 34107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1500\nFFE0\n8120\n79C0\n0100\nFFC0\n2A80\n2920\n4AA0\n87E0\nENDCHAR\nSTARTCHAR U_853C\nENCODING 34108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n47C0\n2440\nE7C0\n2440\n2FE0\n2920\n3AA0\n2FA0\nENDCHAR\nSTARTCHAR U_853D\nENCODING 34109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n9280\n55E0\nFEA0\n92A0\n9AA0\nB640\nD2A0\n9520\nENDCHAR\nSTARTCHAR U_853E\nENCODING 34110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n73E0\nFD20\n3A20\n54C0\n9400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_853F\nENCODING 34111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n7FC0\n2480\n3F00\n2100\n3F80\n2080\n3FC0\n2140\nD4C0\nENDCHAR\nSTARTCHAR U_8540\nENCODING 34112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n2080\nFBE0\n2080\nFBE0\nAAA0\nBAE0\n2180\n72C0\nACA0\nENDCHAR\nSTARTCHAR U_8541\nENCODING 34113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0900\n3FC0\n0040\n3FC0\n0040\n7FC0\n1240\nFFE0\n1080\n0B80\nENDCHAR\nSTARTCHAR U_8542\nENCODING 34114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n7540\n57C0\n7100\n5FE0\n5540\n7BE0\n5140\n5240\nB4C0\nENDCHAR\nSTARTCHAR U_8543\nENCODING 34115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7F80\n1500\nFFE0\n2480\n7FC0\nA4A0\n3F80\n2080\nENDCHAR\nSTARTCHAR U_8544\nENCODING 34116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n79E0\n4920\n79E0\n4920\n79E0\n4CA0\n5B60\n6F60\nENDCHAR\nSTARTCHAR U_8545\nENCODING 34117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4FC0\n2940\n9FC0\n6940\n3FE0\nD160\n57A0\n5060\nENDCHAR\nSTARTCHAR U_8546\nENCODING 34118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1140\nFFE0\nA500\nBD20\nA540\nBD40\nA4A0\nBD60\nE620\nENDCHAR\nSTARTCHAR U_8547\nENCODING 34119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BC0\n4A40\n7FC0\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8548\nENCODING 34120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4A40\n7FC0\n2080\n3F80\n2080\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8549\nENCODING 34121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3FC0\n2400\n7FC0\nA400\n3FC0\n2400\n7FE0\n8920\nENDCHAR\nSTARTCHAR U_854A\nENCODING 34122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n5240\n50A0\n8FA0\n2080\n5180\nCB20\n5540\n71C0\nENDCHAR\nSTARTCHAR U_854B\nENCODING 34123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2500\n1780\n1400\n7FC0\n1080\n1080\n5AE0\n5280\nFFE0\nENDCHAR\nSTARTCHAR U_854C\nENCODING 34124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2480\n3F80\n7BC0\n4A40\n7BC0\n4A40\n7BC0\nENDCHAR\nSTARTCHAR U_854D\nENCODING 34125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n4300\n2CC0\n9FA0\n52A0\n3EA0\nD2A0\n5E20\n5660\nENDCHAR\nSTARTCHAR U_854E\nENCODING 34126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n2080\n5F40\n9120\n7FC0\n5140\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_854F\nENCODING 34127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n5100\n27A0\nD140\n3FE0\n5440\n9FC0\n1440\n77C0\nENDCHAR\nSTARTCHAR U_8550\nENCODING 34128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n2480\n5540\n2480\n7FC0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8551\nENCODING 34129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n4A20\n7BE0\n4F20\n79E0\n4F20\n4920\n4F20\n4920\n5360\nENDCHAR\nSTARTCHAR U_8552\nENCODING 34130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n7FC0\n4A40\n7FC0\n2080\n3F80\n2080\n3F80\n1100\n60C0\nENDCHAR\nSTARTCHAR U_8553\nENCODING 34131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n0400\nFFE0\n9520\n2480\nFFE0\n1080\n3F40\nENDCHAR\nSTARTCHAR U_8554\nENCODING 34132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BC0\n1240\nFEC0\n2A00\nFFE0\n1340\nFE80\n1360\nENDCHAR\nSTARTCHAR U_8555\nENCODING 34133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1540\nAFE0\n4280\nAFE0\n2AA0\n6CE0\nAFE0\n2820\nCFE0\nENDCHAR\nSTARTCHAR U_8556\nENCODING 34134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5100\nAFC0\n5400\n27C0\nE7C0\n2400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_8557\nENCODING 34135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBC0\n8E40\nF980\n2240\nBFE0\nA240\nA3C0\nFA40\nENDCHAR\nSTARTCHAR U_8558\nENCODING 34136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n2080\nFBC0\n2080\nFFE0\n0900\n1120\nE0E0\nENDCHAR\nSTARTCHAR U_8559\nENCODING 34137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n2440\n3FC0\n2440\nFFA0\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_855A\nENCODING 34138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n1200\n3F00\n2100\n7F80\n5280\nFFC0\n1000\n3F80\n0080\n0380\nENDCHAR\nSTARTCHAR U_855B\nENCODING 34139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0940\n7A80\n27E0\nF920\n27E0\n3500\n6FE0\nA520\n2960\nENDCHAR\nSTARTCHAR U_855C\nENCODING 34140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0A00\n7BC0\n0A00\n7BC0\n0400\n5240\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_855D\nENCODING 34141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n21C0\n4A40\nF7E0\n4AA0\nFBE0\n5200\nAA20\nA9E0\nENDCHAR\nSTARTCHAR U_855E\nENCODING 34142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n3F80\n2080\n3F80\n2080\nFFE0\n4A40\n7A40\n4980\nFE60\nENDCHAR\nSTARTCHAR U_855F\nENCODING 34143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0100\n7A40\n2980\n2BE0\nFA80\n44C0\n7380\n1100\n36C0\nENDCHAR\nSTARTCHAR U_8560\nENCODING 34144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBC0\n5240\n33C0\nCA00\n1480\n7F40\n2500\nCCE0\nENDCHAR\nSTARTCHAR U_8561\nENCODING 34145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n2480\n7FE0\n2040\n3FC0\n2040\n3FC0\nE060\nENDCHAR\nSTARTCHAR U_8562\nENCODING 34146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3F80\n2480\nFFE0\n2080\n3F80\n2080\n3F80\nF0E0\nENDCHAR\nSTARTCHAR U_8563\nENCODING 34147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n2480\nFFE0\nA0A0\n3BE0\n6A80\n33E0\nC080\nENDCHAR\nSTARTCHAR U_8564\nENCODING 34148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFA80\n2680\nEBE0\n3480\n5BE0\nB480\n5080\n67E0\nENDCHAR\nSTARTCHAR U_8565\nENCODING 34149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFA80\n53E0\n5480\nFFE0\n3480\n57E0\n9480\n37E0\nENDCHAR\nSTARTCHAR U_8566\nENCODING 34150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2FE0\n4100\n97C0\n2440\n47C0\n9440\n27C0\nCC60\nENDCHAR\nSTARTCHAR U_8567\nENCODING 34151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n27E0\n4C40\nA7C0\n6440\nA7C0\n2A40\n3180\n2E60\nENDCHAR\nSTARTCHAR U_8568\nENCODING 34152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n9500\nFFE0\n8820\nAA80\nBE80\n8940\nB620\nENDCHAR\nSTARTCHAR U_8569\nENCODING 34153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n4900\n27C0\n9440\n57C0\n2440\n2FE0\nD2A0\n4520\n42C0\nENDCHAR\nSTARTCHAR U_856A\nENCODING 34154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5100\n7FE0\nAA80\n2A80\nFFE0\n2A80\nFFE0\n5240\n8920\nENDCHAR\nSTARTCHAR U_856B\nENCODING 34155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1500\n7FC0\n1100\nFFE0\n2480\n3F80\n2480\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_856C\nENCODING 34156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2080\n4920\nF3C0\n4920\nFBE0\n5080\nAAC0\nADA0\nENDCHAR\nSTARTCHAR U_856D\nENCODING 34157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n0440\nFFE0\n5540\n7FC0\n4440\nB5C0\n9540\nENDCHAR\nSTARTCHAR U_856E\nENCODING 34158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n39C0\n2040\n39C0\n2040\n7FE0\n9520\n2AA0\n4A40\nENDCHAR\nSTARTCHAR U_856F\nENCODING 34159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0200\n77C0\n5100\n6EE0\n57C0\n5100\n77C0\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_8570\nENCODING 34160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4F80\nA880\n4F80\n4880\n3FC0\nD540\n5540\n7FE0\nENDCHAR\nSTARTCHAR U_8571\nENCODING 34161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1520\nF340\n27E0\nFC20\n27E0\n3420\n6FE0\nA420\n2460\nENDCHAR\nSTARTCHAR U_8572\nENCODING 34162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5480\n29E0\n7D00\n5500\n7DE0\n5540\nFF40\n1240\n1440\nENDCHAR\nSTARTCHAR U_8573\nENCODING 34163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BC0\n4A40\n7FC0\n5140\n5F40\n5140\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_8574\nENCODING 34164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n27C0\n5440\nE7C0\n2440\n4FE0\nEAA0\n2AA0\nDFE0\nENDCHAR\nSTARTCHAR U_8575\nENCODING 34165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1380\n4540\n7FE0\n5440\nB7C0\n1440\n27E0\n44C0\n8620\nENDCHAR\nSTARTCHAR U_8576\nENCODING 34166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n94A0\n2440\n1B00\nE0E0\n3F80\n0900\n0600\nENDCHAR\nSTARTCHAR U_8577\nENCODING 34167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\nFFE0\n5100\n23C0\nFA40\n2BC0\n2240\n23C0\n6E60\nENDCHAR\nSTARTCHAR U_8578\nENCODING 34168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n4900\n2EE0\n0A20\nEEE0\n2800\n2EE0\n2840\n58A0\n8FE0\nENDCHAR\nSTARTCHAR U_8579\nENCODING 34169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n2500\n5480\nEFE0\n5480\nF7E0\n2480\n47E0\nENDCHAR\nSTARTCHAR U_857A\nENCODING 34170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7940\n4920\nFDE0\n4B20\n7940\n48A0\nFD60\n0A20\nENDCHAR\nSTARTCHAR U_857B\nENCODING 34171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7940\n4140\n7BE0\n4140\nF940\n27E0\n5140\nEE20\nENDCHAR\nSTARTCHAR U_857C\nENCODING 34172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FE0\n40A0\n7BE0\n40A0\nFFE0\n2080\n4FE0\nF880\nENDCHAR\nSTARTCHAR U_857D\nENCODING 34173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0A00\n3F80\n2A80\n2A80\n7FC0\n4000\n7FC0\n5280\n99E0\nENDCHAR\nSTARTCHAR U_857E\nENCODING 34174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n7FC0\n0400\nFFE0\n94A0\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_857F\nENCODING 34175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1140\n2F80\nB500\nAFC0\nA200\n2FC0\n2280\n5500\n8AC0\nENDCHAR\nSTARTCHAR U_8580\nENCODING 34176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5100\n27C0\n9540\n66C0\n2440\nCFE0\n4AA0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_8581\nENCODING 34177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n5540\n7FC0\n4E40\n5540\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_8582\nENCODING 34178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nFFE0\n0880\n7D00\n45E0\n7EA0\n44A0\nFEA0\n2440\n24A0\nD920\nENDCHAR\nSTARTCHAR U_8583\nENCODING 34179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5100\n2FE0\n9440\n67C0\n2000\nDFE0\n54A0\n57A0\n5060\nENDCHAR\nSTARTCHAR U_8584\nENCODING 34180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n9280\n5FC0\n9240\n7FC0\n3240\nD280\n7FE0\n4880\n4180\nENDCHAR\nSTARTCHAR U_8585\nENCODING 34181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4FE0\nE800\n4FE0\nAAA0\nAB40\n6FE0\n6A80\n9180\nENDCHAR\nSTARTCHAR U_8586\nENCODING 34182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n2480\nFFE0\nB4A0\n1F80\n3100\n0E00\nF1E0\nENDCHAR\nSTARTCHAR U_8587\nENCODING 34183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0900\n6A80\nBE80\n42E0\nDF40\n4140\n5C80\n5540\n6220\nENDCHAR\nSTARTCHAR U_8588\nENCODING 34184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1B00\n64C0\nFFE0\n5540\n7FC0\n1080\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_8589\nENCODING 34185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1780\n2400\nFFE0\n0100\n7FE0\n4940\n5AA0\n6D60\n9620\nENDCHAR\nSTARTCHAR U_858A\nENCODING 34186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n3820\n7EA0\nAAA0\n3EA0\n2AA0\n7EA0\n6A20\n9560\nENDCHAR\nSTARTCHAR U_858B\nENCODING 34187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nC7E0\n2A20\nC580\n68C0\n3FA0\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_858C\nENCODING 34188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n5EE0\n52A0\nFEC0\n52A0\n5EA0\nF4E0\n5680\n9A80\nENDCHAR\nSTARTCHAR U_858D\nENCODING 34189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\nFA80\n5480\n7E80\n1480\nFE80\nAAA0\n92A0\nEEE0\nENDCHAR\nSTARTCHAR U_858E\nENCODING 34190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n5140\nFFE0\n92A0\n63C0\nAE40\n21A0\n2EE0\nENDCHAR\nSTARTCHAR U_858F\nENCODING 34191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n1100\nFFE0\n2080\n3F80\n1440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_8590\nENCODING 34192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF7C0\n2100\nFFE0\n2440\n73E0\nAE40\n2180\n2E60\nENDCHAR\nSTARTCHAR U_8591\nENCODING 34193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n2480\n2480\nFFE0\n2480\n3F80\n2480\nFFE0\nENDCHAR\nSTARTCHAR U_8592\nENCODING 34194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n53C0\n7880\n9340\n2C80\nD500\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_8593\nENCODING 34195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n4780\n2080\n9FE0\n5120\n0FC0\n4540\nC7C0\n4280\n4FC0\nENDCHAR\nSTARTCHAR U_8594\nENCODING 34196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n2480\n5540\nFFE0\n5140\n5F40\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_8595\nENCODING 34197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FE0\n1500\n3FE0\n2540\n3FE0\n2540\n3FC0\n2D80\n5540\nA520\nENDCHAR\nSTARTCHAR U_8596\nENCODING 34198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4F80\n2880\nCE80\n5FC0\n5540\n5740\nB040\n9FE0\nENDCHAR\nSTARTCHAR U_8597\nENCODING 34199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n7FC0\n4440\n5F40\n4440\n7FC0\n4940\n5E40\n4940\n7FC0\nENDCHAR\nSTARTCHAR U_8598\nENCODING 34200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n97C0\n4100\n0FC0\nE480\n2FE0\n2100\n2FE0\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_8599\nENCODING 34201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4280\nFFE0\nA480\nFFE0\n2480\n27E0\n5480\n8FE0\nENDCHAR\nSTARTCHAR U_859A\nENCODING 34202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1440\nF7C0\n4440\n7FE0\n9400\nD7E0\n2AA0\n4520\n8AC0\nENDCHAR\nSTARTCHAR U_859B\nENCODING 34203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4100\nF7C0\n9280\nFFE0\n8100\nF7E0\n9100\nF100\nENDCHAR\nSTARTCHAR U_859C\nENCODING 34204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n7FE0\n4540\n7C80\n43E0\n7C80\n67E0\nA480\nBC80\nENDCHAR\nSTARTCHAR U_859D\nENCODING 34205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FE0\nD480\n6240\n5FC0\n4000\n5FC0\n5040\n9FC0\nENDCHAR\nSTARTCHAR U_859E\nENCODING 34206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFA80\n4540\n7FE0\n5440\nD7E0\n2540\n4480\n8660\nENDCHAR\nSTARTCHAR U_859F\nENCODING 34207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n0A00\n3180\nCE60\n7BC0\n4A40\n7BC0\n2080\nDB60\nENDCHAR\nSTARTCHAR U_85A0\nENCODING 34208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2FE0\n2900\nB7C0\nA440\n27C0\n2440\n57C0\n8C60\nENDCHAR\nSTARTCHAR U_85A1\nENCODING 34209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n5F40\n5140\n5F40\n7FC0\n0A00\nFBE0\n4A40\n8A40\nENDCHAR\nSTARTCHAR U_85A2\nENCODING 34210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n77E0\n9120\nFE60\nAA80\nFBE0\nAC80\nFFE0\nA880\nENDCHAR\nSTARTCHAR U_85A3\nENCODING 34211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBE0\n1080\nFFE0\n4940\n7940\n5080\n2140\nFA20\nENDCHAR\nSTARTCHAR U_85A4\nENCODING 34212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF280\n4EE0\n7280\n9EE0\n5280\n2EE0\n4280\n9FE0\nENDCHAR\nSTARTCHAR U_85A5\nENCODING 34213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4A40\n7FE0\n2420\n5F20\n9520\n1FA0\n3CE0\nENDCHAR\nSTARTCHAR U_85A6\nENCODING 34214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n4A40\n7FC0\n4A40\n5FE0\n5000\n5FE0\nAAA0\nENDCHAR\nSTARTCHAR U_85A7\nENCODING 34215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n2080\nFFE0\nA220\n3A80\n6B20\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_85A8\nENCODING 34216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4A40\nFFE0\nA220\n3A40\n6B80\n1A20\nF1E0\nENDCHAR\nSTARTCHAR U_85A9\nENCODING 34217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nEFE0\nA280\nCFE0\nABE0\nAD00\nCBC0\n9100\nAFE0\nENDCHAR\nSTARTCHAR U_85AA\nENCODING 34218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFDE0\n2900\nFFE0\n1140\nFD40\n5940\n9540\n3240\nENDCHAR\nSTARTCHAR U_85AB\nENCODING 34219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1100\n3F80\n0400\nFFE0\n2480\n7FC0\n0400\nFFE0\n4A40\nENDCHAR\nSTARTCHAR U_85AC\nENCODING 34220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n1480\n4E40\n3B80\n2E80\n4A40\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_85AD\nENCODING 34221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n0A00\nF7C0\n2540\nFFC0\n2540\n77C0\nA900\n3FE0\n2100\nENDCHAR\nSTARTCHAR U_85AE\nENCODING 34222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5500\n3900\nFDE0\n3A20\n5540\nFD40\n2880\n1140\nEE20\nENDCHAR\nSTARTCHAR U_85AF\nENCODING 34223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n7FC0\n4A40\n7FC0\n0480\nFFE0\n0840\n3FC0\nD040\n1FC0\nENDCHAR\nSTARTCHAR U_85B0\nENCODING 34224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n5540\n7FC0\n0400\n7FC0\n0400\nFFE0\n8920\nENDCHAR\nSTARTCHAR U_85B1\nENCODING 34225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n5440\nFFE0\n2840\nFE40\n1140\n7D40\n1040\nFDC0\nENDCHAR\nSTARTCHAR U_85B2\nENCODING 34226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1080\n7FE0\n4AA0\n1300\n1F80\n7080\n1680\n1080\n1F80\n30C0\nENDCHAR\nSTARTCHAR U_85B3\nENCODING 34227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1200\n4F80\n2200\n1FE0\nE480\n27A0\n2AC0\n5260\n8FE0\nENDCHAR\nSTARTCHAR U_85B4\nENCODING 34228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n9420\n52C0\nBFA0\n2A80\nFFE0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_85B5\nENCODING 34229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n0400\nFFE0\n04A0\n7FC0\n5480\n7280\n0100\nENDCHAR\nSTARTCHAR U_85B6\nENCODING 34230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n27C0\nDD40\n27C0\nD540\n5FE0\nB100\n5100\nB7E0\nENDCHAR\nSTARTCHAR U_85B7\nENCODING 34231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n4A40\n5140\nFFE0\n0800\n7FE0\n4920\n4960\nENDCHAR\nSTARTCHAR U_85B8\nENCODING 34232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n4100\n3FE0\n8AA0\n5AA0\n2FE0\n2000\nCFE0\n4540\n5920\nENDCHAR\nSTARTCHAR U_85B9\nENCODING 34233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n0400\n7FC0\n2080\nFFE0\n9120\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_85BA\nENCODING 34234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n5B40\n5520\nA480\n3F80\n2080\n3F80\nC080\nENDCHAR\nSTARTCHAR U_85BB\nENCODING 34235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5540\n27C0\n8540\n57C0\n1540\n27C0\nE100\n4FE0\n4540\nENDCHAR\nSTARTCHAR U_85BC\nENCODING 34236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n4A80\n7F80\n59C0\n5500\n5FC0\n4400\nBFE0\nENDCHAR\nSTARTCHAR U_85BD\nENCODING 34237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0900\nFDE0\n2880\nFFE0\nA920\nFFA0\n1160\n7D20\n11A0\nFD20\nENDCHAR\nSTARTCHAR U_85BE\nENCODING 34238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\nFFE0\n2440\nFFE0\n6EC0\n5540\n6EC0\n5540\n6EC0\nENDCHAR\nSTARTCHAR U_85BF\nENCODING 34239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n4900\n73E0\n4540\n7FE0\n90A0\nFE80\n22E0\n5280\n8DE0\nENDCHAR\nSTARTCHAR U_85C0\nENCODING 34240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n5AC0\n5280\n2940\nFFE0\n94A0\n2500\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_85C1\nENCODING 34241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1500\nFFE0\n1100\n7FC0\n5140\n5F40\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_85C2\nENCODING 34242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBC0\n4940\n7880\n4B40\nFC20\n2680\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_85C3\nENCODING 34243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFF00\n29E0\nFE20\n8280\nBA80\nAA80\nBB40\n8620\nENDCHAR\nSTARTCHAR U_85C4\nENCODING 34244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n1100\nFFE0\n4A40\n94A0\n7F80\n2500\nCCE0\nENDCHAR\nSTARTCHAR U_85C5\nENCODING 34245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0900\n7FE0\n4920\n7FE0\n1020\nFF20\n3920\n7D20\n4420\n7CE0\nENDCHAR\nSTARTCHAR U_85C6\nENCODING 34246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n9120\n7FC0\n1500\nEEE0\n0400\n7FC0\n0C00\nENDCHAR\nSTARTCHAR U_85C7\nENCODING 34247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n6EC0\n4840\n6EC0\n4A40\nFFE0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_85C8\nENCODING 34248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0940\nE680\nAAA0\nE440\nABA0\nE100\nAFE0\nE280\n1C60\nENDCHAR\nSTARTCHAR U_85C9\nENCODING 34249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n2140\nFFE0\n2240\nFBC0\n6A40\nA7C0\n2240\nENDCHAR\nSTARTCHAR U_85CA\nENCODING 34250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n77C0\n2440\nFFC0\n3400\n67E0\nA6A0\n2BE0\n2AA0\nENDCHAR\nSTARTCHAR U_85CB\nENCODING 34251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\nFFC0\n4A40\n39C0\n4A40\n3FC0\n6200\nBFC0\n2200\n3FE0\nENDCHAR\nSTARTCHAR U_85CC\nENCODING 34252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n5240\nEFC0\n3F80\nD480\n1F80\n0440\n7FC0\nENDCHAR\nSTARTCHAR U_85CD\nENCODING 34253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n9100\nF9E0\n8A80\nFC40\n9000\nFFC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_85CE\nENCODING 34254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1500\n3FC0\n0440\nFFE0\n0440\n7FE0\n4920\n3FC0\n2A40\nFFE0\nENDCHAR\nSTARTCHAR U_85CF\nENCODING 34255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0940\nBFE0\nAA80\nEFA0\n28A0\nEFC0\nAAA0\nAFA0\n4160\nENDCHAR\nSTARTCHAR U_85D0\nENCODING 34256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n47C0\nAC40\n57C0\nE440\n57C0\nB2A0\n52A0\nB460\nENDCHAR\nSTARTCHAR U_85D1\nENCODING 34257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n4940\n7FC0\n2480\n3F80\n1880\n2700\nF8E0\nENDCHAR\nSTARTCHAR U_85D2\nENCODING 34258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\nF7C0\n2440\nFFC0\n2240\n77E0\nACA0\n2560\n27A0\nENDCHAR\nSTARTCHAR U_85D3\nENCODING 34259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1120\n7140\n7FC0\nD480\n7FC0\n5480\n7FE0\n0080\nFC80\nENDCHAR\nSTARTCHAR U_85D4\nENCODING 34260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n8420\n7FE0\n34C0\nD2A0\n1F80\n1280\n6E60\nENDCHAR\nSTARTCHAR U_85D5\nENCODING 34261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBE0\n22A0\n73E0\n22A0\nFFE0\n24A0\n77E0\nAC60\nENDCHAR\nSTARTCHAR U_85D6\nENCODING 34262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BC0\n5680\n7900\n56E0\n7F80\n2A80\n3F80\n60C0\nENDCHAR\nSTARTCHAR U_85D7\nENCODING 34263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nFFE0\n0880\n9F80\n44E0\n1FC0\nD540\n5F40\n4EA0\n5520\nBFE0\nENDCHAR\nSTARTCHAR U_85D8\nENCODING 34264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1500\nFFE0\n8420\nBF80\n8420\nBFE0\nA440\nBFC0\nAAA0\nCFA0\nENDCHAR\nSTARTCHAR U_85D9\nENCODING 34265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFB80\n52E0\nFC00\nABC0\n5240\n3D80\nD240\n3420\nENDCHAR\nSTARTCHAR U_85DA\nENCODING 34266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n4A40\n7FC0\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_85DB\nENCODING 34267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\nA0A0\n3B80\n2080\n3FE0\n5520\n2AA0\n4AC0\nENDCHAR\nSTARTCHAR U_85DC\nENCODING 34268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n79E0\n12A0\nFCA0\n5660\n8900\n3580\nC660\n1D00\nE4E0\nENDCHAR\nSTARTCHAR U_85DD\nENCODING 34269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\nFFC0\n5140\nF940\n22A0\nFFC0\n0000\nFFE0\n1080\n3F40\nENDCHAR\nSTARTCHAR U_85DE\nENCODING 34270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FC0\n3080\nDF80\n1080\nFFE0\n4B20\nFDE0\n4920\nENDCHAR\nSTARTCHAR U_85DF\nENCODING 34271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n7FC0\n4440\n7FC0\n4440\nFFE0\nAAA0\nFBE0\nAAA0\nFBE0\nENDCHAR\nSTARTCHAR U_85E0\nENCODING 34272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3F80\n2480\n3F80\n4080\nFBE0\nCB20\nAAA0\nFBE0\nENDCHAR\nSTARTCHAR U_85E1\nENCODING 34273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n9FE0\n4480\n1FE0\nE920\n2FE0\n2920\n2BA0\n7AA0\n8FE0\nENDCHAR\nSTARTCHAR U_85E2\nENCODING 34274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1900\n2A80\n5FE0\n94A0\n6FA0\nA4A0\n3F40\n24A0\n3F20\nENDCHAR\nSTARTCHAR U_85E3\nENCODING 34275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n4A40\n7FC0\n2A40\nFEA0\n4BE0\n7A40\n4B80\n7A20\n4BE0\nENDCHAR\nSTARTCHAR U_85E4\nENCODING 34276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1540\nF280\n9FE0\nF200\n9FE0\nF540\n9B60\n9580\nB960\nENDCHAR\nSTARTCHAR U_85E5\nENCODING 34277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5540\nAAA0\n4E40\nAAA0\nEEE0\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_85E6\nENCODING 34278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1500\nFFE0\n9080\nFFE0\nBAC0\nD4A0\nBF80\n8200\nFFE0\n8E00\nENDCHAR\nSTARTCHAR U_85E7\nENCODING 34279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n2A00\n27E0\n5540\n77C0\n2100\n5FE0\n7640\n5980\n9660\nENDCHAR\nSTARTCHAR U_85E8\nENCODING 34280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n9240\nFFC0\nA200\nBBC0\nA220\nBDE0\nA4A0\nENDCHAR\nSTARTCHAR U_85E9\nENCODING 34281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n4B20\n2540\n1FE0\n6540\n2FE0\nD940\n4FC0\n4940\n4FC0\nENDCHAR\nSTARTCHAR U_85EA\nENCODING 34282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7C80\n54E0\nFFA0\n54A0\nFEA0\n2440\n38A0\nC720\nENDCHAR\nSTARTCHAR U_85EB\nENCODING 34283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n9480\n5FE0\n14A0\n9FE0\n6840\n2FC0\nC840\n5FE0\n4200\nENDCHAR\nSTARTCHAR U_85EC\nENCODING 34284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\nF7C0\nA540\nCFE0\nA440\n97C0\nD440\nA7C0\n8C60\nENDCHAR\nSTARTCHAR U_85ED\nENCODING 34285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1500\nFFE0\nA0A0\n7BC0\nC8A0\n7B80\n4A00\nFBC0\n2840\nC980\nENDCHAR\nSTARTCHAR U_85EE\nENCODING 34286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n27E0\nFC80\n27C0\n7480\n6FC0\nA480\n27E0\n2AA0\nENDCHAR\nSTARTCHAR U_85EF\nENCODING 34287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\n7C40\n47E0\n7D40\nACC0\n5AC0\n1440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_85F0\nENCODING 34288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nCE20\nAAA0\nD2A0\n6EA0\n12A0\nFEA0\n5420\nFEE0\nENDCHAR\nSTARTCHAR U_85F1\nENCODING 34289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nBFE0\n6A80\n2F80\n6A80\nAFC0\n26A0\n4A60\nB3E0\nENDCHAR\nSTARTCHAR U_85F2\nENCODING 34290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2FE0\nF800\n29C0\n3940\n6BE0\nAAA0\n2AA0\n2FE0\nENDCHAR\nSTARTCHAR U_85F3\nENCODING 34291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n0A00\n7FC0\n5F40\n0400\nFFE0\n1500\nE4C0\nENDCHAR\nSTARTCHAR U_85F4\nENCODING 34292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n3100\n47C0\n9540\nE7C0\n5000\nEFE0\n0AA0\n5AA0\nAFE0\nENDCHAR\nSTARTCHAR U_85F5\nENCODING 34293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nFFE0\n1200\n17C0\n2440\n7FE0\nA540\n2920\n7FE0\n2940\nCCE0\nENDCHAR\nSTARTCHAR U_85F6\nENCODING 34294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n9080\nFFE0\nB9C0\nD6A0\n83C0\n9200\nFFE0\nENDCHAR\nSTARTCHAR U_85F7\nENCODING 34295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1120\nF7A0\n0140\nFFE0\n0240\nF7C0\n9A40\nF3C0\n9240\nENDCHAR\nSTARTCHAR U_85F8\nENCODING 34296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFA0\n4940\nB7E0\n6240\nB7C0\n6A40\nA3C0\n6240\nENDCHAR\nSTARTCHAR U_85F9\nENCODING 34297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n2900\nF7C0\n0440\nF7C0\n0240\nFFE0\n94A0\nF560\n97A0\nENDCHAR\nSTARTCHAR U_85FA\nENCODING 34298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n4920\n79E0\n4920\n7BE0\n5FA0\n5220\n5FA0\n5220\n5FE0\nENDCHAR\nSTARTCHAR U_85FB\nENCODING 34299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n4900\n27C0\n9440\n6FE0\n2AA0\n3FE0\nC540\n4520\n5920\nENDCHAR\nSTARTCHAR U_85FC\nENCODING 34300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0900\nFFE0\n8420\n3F80\n0400\n3F80\n2A80\n3F80\n5540\n8F20\nENDCHAR\nSTARTCHAR U_85FD\nENCODING 34301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n2900\nFBE0\n5220\nFFA0\n22E0\nFE20\n73E0\nA940\n6660\nENDCHAR\nSTARTCHAR U_85FE\nENCODING 34302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF9C0\n2240\nFBE0\nAA20\nFBE0\n7220\nABE0\n2620\nENDCHAR\nSTARTCHAR U_85FF\nENCODING 34303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n7FC0\n1480\nFFE0\n94A0\n3FC0\n6400\nBFC0\n2400\n3FE0\nENDCHAR\nSTARTCHAR U_8600\nENCODING 34304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2FE0\nFAA0\n2FE0\n3100\nE7C0\n2280\n2FE0\n6100\nENDCHAR\nSTARTCHAR U_8601\nENCODING 34305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n5540\n5540\nFFE0\n0400\n75C0\n5540\nFFE0\nENDCHAR\nSTARTCHAR U_8602\nENCODING 34306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n7FE0\n0A00\n5540\n8F20\n26A0\nBBE0\n0400\nFFE0\n1480\n6460\nENDCHAR\nSTARTCHAR U_8603\nENCODING 34307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1500\nFFE0\n1080\n5AE0\n5280\nFFE0\n0400\nFFE0\n3500\nC4E0\nENDCHAR\nSTARTCHAR U_8604\nENCODING 34308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nEFE0\nAB00\nFFE0\n5540\n7D40\n5540\nFF40\n1240\nENDCHAR\nSTARTCHAR U_8605\nENCODING 34309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4EE0\n9200\n75E0\n5F40\nD540\n7FC0\n4A40\n71C0\nENDCHAR\nSTARTCHAR U_8606\nENCODING 34310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n7FE0\n4420\n5FE0\n4A80\n5FC0\n5540\n9540\nFFE0\nENDCHAR\nSTARTCHAR U_8607\nENCODING 34311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n73C0\n7C80\nD7E0\n7C80\n55C0\n7EA0\n5480\nAA80\nENDCHAR\nSTARTCHAR U_8608\nENCODING 34312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7BE0\n2080\nFBE0\n7220\nAAA0\n73E0\n5940\n9220\nENDCHAR\nSTARTCHAR U_8609\nENCODING 34313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFFE0\n4A40\nFFE0\nA0A0\n4780\nC080\n5FC0\n5540\n4700\n58C0\nENDCHAR\nSTARTCHAR U_860A\nENCODING 34314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n2900\n47C0\n5540\nE5C0\n4640\nFFE0\n0AA0\nAAA0\nAFE0\nENDCHAR\nSTARTCHAR U_860B\nENCODING 34315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n53E0\n5D00\n53E0\nFE20\n53E0\n9A20\n13E0\nE620\nENDCHAR\nSTARTCHAR U_860C\nENCODING 34316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5100\nAFE0\n44A0\nD6E0\n5F80\n4000\nFFE0\n2500\nCCE0\nENDCHAR\nSTARTCHAR U_860D\nENCODING 34317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7C80\n1080\nFDE0\n54A0\n7CA0\n10A0\nFD20\nAA40\nENDCHAR\nSTARTCHAR U_860E\nENCODING 34318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FE0\n9540\n7BE0\n4AA0\n7AA0\n4BE0\n7A00\n89E0\nENDCHAR\nSTARTCHAR U_860F\nENCODING 34319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n43E0\n7900\n43E0\n7A20\n02A0\nFBE0\n7140\nAA20\nENDCHAR\nSTARTCHAR U_8610\nENCODING 34320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4FE0\nF540\n0FE0\nF200\n0FE0\nF540\n9480\nF960\nENDCHAR\nSTARTCHAR U_8611\nENCODING 34321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nFFE0\n0A80\n7FE0\n4880\n7FE0\n6AA0\n7FE0\n4840\n7840\n8FC0\nENDCHAR\nSTARTCHAR U_8612\nENCODING 34322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n77C0\n2880\nFFC0\n3540\n6FC0\n6540\nA7E0\n21E0\nENDCHAR\nSTARTCHAR U_8613\nENCODING 34323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBC0\n2480\nFFC0\n3540\n6FC0\n6540\nA7C0\n2AA0\nENDCHAR\nSTARTCHAR U_8614\nENCODING 34324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nF3E0\n8900\n7BE0\n0220\nFAA0\n23E0\nFD40\nAA20\nENDCHAR\nSTARTCHAR U_8615\nENCODING 34325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n29E0\n5340\nFC80\n2760\n5480\nF7E0\n0480\nABE0\nENDCHAR\nSTARTCHAR U_8616\nENCODING 34326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4900\nF7E0\n9280\nFFE0\n8900\nFFE0\n0500\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_8617\nENCODING 34327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n7BE0\n4940\n7FE0\nC480\n7FE0\n0480\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_8618\nENCODING 34328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n4A40\n7BC0\n1100\nFFE0\n3120\n5540\n98E0\nENDCHAR\nSTARTCHAR U_8619\nENCODING 34329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n9380\nFAE0\n9340\nFC80\nAB60\nFFC0\n4A40\n39C0\n5AC0\nENDCHAR\nSTARTCHAR U_861A\nENCODING 34330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0940\n7080\nFFE0\n5480\n7FC0\n5480\n7FE0\n5480\nAA80\nENDCHAR\nSTARTCHAR U_861B\nENCODING 34331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n53E0\nF940\n53E0\n7220\n53E0\nFE20\nABE0\nFE60\nENDCHAR\nSTARTCHAR U_861C\nENCODING 34332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5500\nFFE0\n5160\nFDA0\nAB20\nFFE0\n21A0\nFB60\n2540\nENDCHAR\nSTARTCHAR U_861D\nENCODING 34333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n29E0\nD640\n0080\nEE80\nAA80\nEE80\n4540\nAA20\nENDCHAR\nSTARTCHAR U_861E\nENCODING 34334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n6D00\nB9E0\n0340\nFD40\n9580\nFC80\n4940\nB620\nENDCHAR\nSTARTCHAR U_861F\nENCODING 34335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nEFE0\nA540\nCFE0\nA040\nAFE0\nE540\n8CA0\n97A0\nENDCHAR\nSTARTCHAR U_8620\nENCODING 34336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nAFE0\nA540\nEBA0\n3FE0\nEAA0\nABA0\nA820\nAFE0\nENDCHAR\nSTARTCHAR U_8621\nENCODING 34337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n4A40\n7BC0\n4A40\n7BC0\n4A40\nFFE0\n1100\n0E00\nF9E0\nENDCHAR\nSTARTCHAR U_8622\nENCODING 34338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFDE0\n2BC0\nFC40\n45C0\n7D00\n45C0\n7D20\n4DE0\nENDCHAR\nSTARTCHAR U_8623\nENCODING 34339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n2900\n7C80\n2BE0\nFE80\n5480\n7FE0\n5480\n7C80\nC7E0\nENDCHAR\nSTARTCHAR U_8624\nENCODING 34340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4FC0\nEA40\nA580\nAFC0\nE240\nAFE0\nB560\nEAA0\nENDCHAR\nSTARTCHAR U_8625\nENCODING 34341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n3F80\n4040\nF7E0\n5540\n7FC0\n4A40\n7FC0\n4A40\nENDCHAR\nSTARTCHAR U_8626\nENCODING 34342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n9520\n2480\nEEE0\nAAA0\nAAA0\nEEE0\nAAA0\nENDCHAR\nSTARTCHAR U_8627\nENCODING 34343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n8200\n4FE0\n0A20\nEFE0\n2A20\n2DC0\n32A0\n65A0\n9FE0\nENDCHAR\nSTARTCHAR U_8628\nENCODING 34344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBC0\n5100\nFBC0\n2080\nFBE0\n2080\nAAA0\nF900\nENDCHAR\nSTARTCHAR U_8629\nENCODING 34345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4900\nFD00\n55E0\n7F20\n54C0\n7D20\n1200\n3FE0\n1280\nEE60\nENDCHAR\nSTARTCHAR U_862A\nENCODING 34346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1500\nFFC0\n9240\nFFC0\nA9A0\nBBE0\n9500\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_862B\nENCODING 34347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n9E80\n54E0\n9E80\n54C0\n1520\nDFC0\n9540\nBFE0\nENDCHAR\nSTARTCHAR U_862C\nENCODING 34348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5100\nF7C0\n9040\nFFC0\n8840\nFFE0\n2520\nBFC0\nA540\nFDC0\nENDCHAR\nSTARTCHAR U_862D\nENCODING 34349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFBE0\n8A20\nFBE0\nFFE0\nAAA0\nBFA0\n9520\nA4E0\nENDCHAR\nSTARTCHAR U_862E\nENCODING 34350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n7FC0\n4940\nFFE0\nB440\nD940\nA540\nB540\nD940\nA4C0\nENDCHAR\nSTARTCHAR U_862F\nENCODING 34351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFC0\n1100\n57C0\n2540\n8FE0\n1520\n4AE0\nBF80\n2A80\n7FE0\nENDCHAR\nSTARTCHAR U_8630\nENCODING 34352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n27C0\n4540\nEFE0\n4AA0\nFFE0\n0440\nAB80\n8C60\nENDCHAR\nSTARTCHAR U_8631\nENCODING 34353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\nA100\n6BE0\nFC80\n23E0\n7220\nABE0\nFE20\n53E0\n8E60\nENDCHAR\nSTARTCHAR U_8632\nENCODING 34354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n3F80\n2480\nFFE0\nAAA0\nFBE0\nAAA0\nFBE0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_8633\nENCODING 34355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFC80\n53E0\nFC80\nABE0\nF880\nABE0\nF880\nCFE0\nENDCHAR\nSTARTCHAR U_8634\nENCODING 34356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n5540\n7FC0\n5540\nFFE0\n2080\n3F80\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_8635\nENCODING 34357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\nF4C0\nBFA0\nEA80\nBFE0\nEAA0\nAEC0\nAA80\nFF60\n2220\nENDCHAR\nSTARTCHAR U_8636\nENCODING 34358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0880\n73E0\n12A0\nFFE0\n5AA0\n97E0\nFCA0\n29C0\n1AA0\n64E0\nENDCHAR\nSTARTCHAR U_8637\nENCODING 34359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\nFFE0\n24A0\nBEE0\nAA80\nFFE0\n2900\nC600\n39E0\nENDCHAR\nSTARTCHAR U_8638\nENCODING 34360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0900\nFDE0\n2940\nFDE0\nAF40\nEDE0\n8540\nFDE0\n5240\n8920\nENDCHAR\nSTARTCHAR U_8639\nENCODING 34361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2FE0\nBAA0\nAFE0\nA380\n2540\n3D20\n28C0\n2E60\nENDCHAR\nSTARTCHAR U_863A\nENCODING 34362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\nFA80\nDBE0\nAA80\nFBE0\n2280\nFBE0\nCA80\nFBE0\n8A00\nENDCHAR\nSTARTCHAR U_863B\nENCODING 34363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\nFDC0\nA940\nFBE0\nAA40\nFD80\nAA60\nFFC0\n2520\nCCE0\nENDCHAR\nSTARTCHAR U_863C\nENCODING 34364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1500\nFFE0\n9080\nFFE0\nB9C0\nD6A0\nBDE0\n8500\nFDE0\n8500\nENDCHAR\nSTARTCHAR U_863D\nENCODING 34365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2480\n7FC0\n56C0\n6D40\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_863E\nENCODING 34366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n2FE0\n2AA0\nFFE0\n2380\n2C60\n3940\nCE80\n0860\nENDCHAR\nSTARTCHAR U_863F\nENCODING 34367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0900\n7FE0\n4920\n7FE0\n2A80\n57E0\nFA80\n43E0\nFA80\nABE0\nENDCHAR\nSTARTCHAR U_8640\nENCODING 34368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1500\nFFE0\n5A80\n5540\nA520\nFBE0\n0A00\nFBE0\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_8641\nENCODING 34369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n24A0\nBEE0\nEA80\n3FE0\nD100\n0E00\n71C0\nENDCHAR\nSTARTCHAR U_8642\nENCODING 34370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7FC0\n0400\nFFE0\nD4A0\n7300\nB7C0\nACA0\nF780\nENDCHAR\nSTARTCHAR U_8643\nENCODING 34371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n8AC0\n55A0\n3FE0\n8A80\n7BA0\n2AA0\nDB40\n4A60\n5F20\nENDCHAR\nSTARTCHAR U_8644\nENCODING 34372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n23C0\nFE80\nAB80\nAD60\nF900\n27C0\n3900\nEFE0\nENDCHAR\nSTARTCHAR U_8645\nENCODING 34373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1540\n77C0\n5280\n77C0\n5AA0\n73C0\n5280\n53E0\n9AA0\nENDCHAR\nSTARTCHAR U_8646\nENCODING 34374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1200\n7FC0\n4440\nFFE0\nAAA0\nFBE0\n1480\nFFC0\n2500\nCCE0\nENDCHAR\nSTARTCHAR U_8647\nENCODING 34375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n17E0\nE240\n2FE0\nEAA0\n87E0\nEC80\n37E0\n2480\nC7E0\nENDCHAR\nSTARTCHAR U_8648\nENCODING 34376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0900\nFFE0\nA4A0\nEEE0\n0A00\nEEE0\nAAA0\nEEE0\n1B00\nENDCHAR\nSTARTCHAR U_8649\nENCODING 34377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nFFC0\n1280\nFBC0\n5240\n73C0\n0240\nFBE0\nAA00\nFFE0\nAAA0\nENDCHAR\nSTARTCHAR U_864A\nENCODING 34378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nFFC0\n1200\n4480\nAD40\nE1C0\n4C80\nA140\nFFE0\n1500\n64C0\nENDCHAR\nSTARTCHAR U_864B\nENCODING 34379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nFFE0\n52C0\n5240\nFFE0\nAAA0\n2A80\n3580\n7F80\n9160\n6700\nENDCHAR\nSTARTCHAR U_864C\nENCODING 34380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1200\nABE0\nFD40\nA880\nFBE0\n8A40\nFBC0\n8BC0\nFA20\n0FE0\nENDCHAR\nSTARTCHAR U_864D\nENCODING 34381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n07E0\n0400\n7FE0\n4440\n4780\n7C40\n47C0\n4000\n4000\n8000\nENDCHAR\nSTARTCHAR U_864E\nENCODING 34382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n4840\n7F80\n4820\n4FE0\n4000\n4F00\n4920\nB0E0\nENDCHAR\nSTARTCHAR U_864F\nENCODING 34383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n4840\n7F80\n4820\n4FE0\n4400\n5FC0\n8440\nB980\nENDCHAR\nSTARTCHAR U_8650\nENCODING 34384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n4420\n5F80\n4420\n4FE0\n4800\n7FE0\n4800\n8FC0\nENDCHAR\nSTARTCHAR U_8651\nENCODING 34385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n4420\n5F80\n4420\n47E0\n4A00\n5940\nA8A0\n87A0\nENDCHAR\nSTARTCHAR U_8652\nENCODING 34386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01E0\n7F80\n4200\n5FE0\n5220\n5F80\n5220\n57E0\n9480\nA4A0\nD8E0\nENDCHAR\nSTARTCHAR U_8653\nENCODING 34387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n4100\nF7E0\n5520\n57C0\n5500\n5520\n5DE0\n5540\n4540\n8A60\nENDCHAR\nSTARTCHAR U_8654\nENCODING 34388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n4500\n5E20\n43E0\n4200\n7FE0\n4480\n4300\nBCE0\nENDCHAR\nSTARTCHAR U_8655\nENCODING 34389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n4540\n5E20\n57E0\n5C00\n55C0\n7560\n4E00\nB1E0\nENDCHAR\nSTARTCHAR U_8656\nENCODING 34390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n4420\n5F80\n4420\n5FE0\n4A80\n7FE0\n4200\n8E00\nENDCHAR\nSTARTCHAR U_8657\nENCODING 34391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\n0400\n7FE0\n4440\n5F80\n4440\n4FC0\n4800\n4FC0\n4880\nBFE0\nENDCHAR\nSTARTCHAR U_8658\nENCODING 34392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\n0400\n7FE0\n4400\n7F80\n4420\n5FC0\n5080\n5480\n5280\nBFE0\nENDCHAR\nSTARTCHAR U_8659\nENCODING 34393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n4420\n7FC0\n4420\n47E0\n5900\n6A40\n8C20\nB7C0\nENDCHAR\nSTARTCHAR U_865A\nENCODING 34394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n4420\n7F80\n4420\n47E0\n6940\n5980\n8900\nFFE0\nENDCHAR\nSTARTCHAR U_865B\nENCODING 34395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\n0400\n7FE0\n4420\n7F80\n4420\n57E0\n5540\n5DC0\n8500\nFFE0\nENDCHAR\nSTARTCHAR U_865C\nENCODING 34396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n4420\n5FE0\n5240\n7FE0\n5240\n7FE0\n4420\nB9C0\nENDCHAR\nSTARTCHAR U_865D\nENCODING 34397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1D00\n1100\n7DE0\n5AA0\n7560\n5D60\n42A0\n5CA0\n5520\n9440\nA7E0\nENDCHAR\nSTARTCHAR U_865E\nENCODING 34398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n4820\n5FE0\n6880\n7FC0\n4240\n7FE0\n4500\nB8E0\nENDCHAR\nSTARTCHAR U_865F\nENCODING 34399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF1E0\n9100\nF7E0\n0520\nFFC0\n4520\nF5E0\n1400\n1780\n9AA0\n64E0\nENDCHAR\nSTARTCHAR U_8660\nENCODING 34400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2100\nFFE0\n5500\n8FC0\n5520\n55E0\n2400\n55C0\n4540\n8A60\nENDCHAR\nSTARTCHAR U_8661\nENCODING 34401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n4440\n5FE0\n5540\n4D80\n4500\n7FE0\n4500\nB8E0\nENDCHAR\nSTARTCHAR U_8662\nENCODING 34402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n09E0\nF100\n4FE0\nB520\n57C0\nFD20\n15E0\n9400\n55C0\n1940\n6260\nENDCHAR\nSTARTCHAR U_8663\nENCODING 34403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n08E0\nEC80\n0BE0\nFEA0\n2BE0\nAAA0\nBAE0\nAE00\nABC0\nF540\n0A60\nENDCHAR\nSTARTCHAR U_8664\nENCODING 34404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n38E0\n2080\nFBE0\nAAA0\nF3C0\nAAA0\nBAE0\n8200\nF3C0\nD540\n9A60\nENDCHAR\nSTARTCHAR U_8665\nENCODING 34405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3A40\n23E0\nFE80\nA9A0\nF260\nAE80\nBA40\n87E0\nF280\nD1A0\n9E60\nENDCHAR\nSTARTCHAR U_8666\nENCODING 34406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n61C0\n5100\nFFE0\n5500\n27C0\n5520\nADE0\nF400\n2DC0\n3540\nDE60\nENDCHAR\nSTARTCHAR U_8667\nENCODING 34407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1E00\n11E0\nFE00\n9200\nFFE0\nA880\nFEE0\nA820\nBE20\nA920\nBEC0\nENDCHAR\nSTARTCHAR U_8668\nENCODING 34408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\n1E40\n1080\n7E00\n5260\n7E40\n5480\n7E20\n5420\nBF40\nD580\nENDCHAR\nSTARTCHAR U_8669\nENCODING 34409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA8E0\n7080\n23E0\nFAA0\n8BC0\nFAA0\n8AE0\nFA00\n75C0\nAD40\n6260\nENDCHAR\nSTARTCHAR U_866A\nENCODING 34410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n31E0\n2B20\nFEC0\nAB20\nFBE0\nAAA0\nBBE0\n8A80\nFBE0\nD940\n9AA0\nENDCHAR\nSTARTCHAR U_866B\nENCODING 34411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n4440\n4440\n7FC0\n0400\n0480\n0440\n07E0\nF820\nENDCHAR\nSTARTCHAR U_866C\nENCODING 34412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFA00\nAA00\nAA00\nAA00\nFA00\n2200\n2A20\n3A20\nC5E0\nENDCHAR\nSTARTCHAR U_866D\nENCODING 34413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF920\nA920\nA920\nA920\nF920\n2120\n2A20\n3CA0\nE840\nENDCHAR\nSTARTCHAR U_866E\nENCODING 34414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n2280\nFA80\nAA80\nAA80\nAA80\nFA80\n2280\n2AA0\n3AA0\nEC60\nENDCHAR\nSTARTCHAR U_866F\nENCODING 34415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n2220\nFA20\nAA20\nAA20\nAA20\nFAE0\n2320\n2A20\n3820\nE820\nENDCHAR\nSTARTCHAR U_8670\nENCODING 34416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF880\nA880\nA880\nA880\nF880\n2080\n2C80\n3A80\nE900\nENDCHAR\nSTARTCHAR U_8671\nENCODING 34417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF80\n0080\n0C80\nF080\n1080\nFE80\n9280\nFEA0\n10A0\n1260\nFD20\nENDCHAR\nSTARTCHAR U_8672\nENCODING 34418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n7D00\n5580\n5540\n7D60\n5140\n1500\n1D00\nF500\n0100\nENDCHAR\nSTARTCHAR U_8673\nENCODING 34419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\nAC20\nA820\nAA20\nF920\n2120\n2820\n3920\nE8C0\nENDCHAR\nSTARTCHAR U_8674\nENCODING 34420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2780\nF900\nA900\nA900\nA9E0\nFF00\n2100\n2920\n3920\nE8E0\nENDCHAR\nSTARTCHAR U_8675\nENCODING 34421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\n2280\nFAE0\nABA0\nAEA0\nFAA0\n22E0\n3A80\nEA20\n01E0\nENDCHAR\nSTARTCHAR U_8676\nENCODING 34422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nF900\nA900\nAFE0\nF900\n2100\n2900\n3900\nC900\n0300\nENDCHAR\nSTARTCHAR U_8677\nENCODING 34423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2080\nF880\nA880\nA880\nAFE0\nF880\n2080\n2880\n3880\nE880\nENDCHAR\nSTARTCHAR U_8678\nENCODING 34424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nF880\nA900\nAFE0\nF900\nA100\n2900\n3900\nC900\n0200\nENDCHAR\nSTARTCHAR U_8679\nENCODING 34425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\nF880\nA880\nA880\nA880\nF880\n2080\n2880\n3880\nEFE0\nENDCHAR\nSTARTCHAR U_867A\nENCODING 34426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n5100\n57C0\n5540\n5540\n57C0\n5140\n51C0\n5620\n9020\n8FE0\nENDCHAR\nSTARTCHAR U_867B\nENCODING 34427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\nAA00\nAA00\nAA00\nFA00\n2200\n2A00\n3A40\nEBE0\nENDCHAR\nSTARTCHAR U_867C\nENCODING 34428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\nFBE0\nAC00\nABC0\nA840\nF880\n2100\n2A20\n3A20\nE9E0\nENDCHAR\nSTARTCHAR U_867D\nENCODING 34429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2480\n0400\n7FC0\n4440\n7FC0\n0400\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_867E\nENCODING 34430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\nF900\nA900\nA980\nA940\nF920\n2100\n2900\n3900\nC500\nENDCHAR\nSTARTCHAR U_867F\nENCODING 34431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0800\n0FC0\n0840\n3180\nC400\n3FC0\n2440\n3FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_8680\nENCODING 34432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7FE0\n4D20\n9520\n27E0\n2520\n2100\n2940\n31E0\n2620\nENDCHAR\nSTARTCHAR U_8681\nENCODING 34433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n22A0\n22A0\nFA20\nAA20\nA940\nF940\n2080\n2940\n3A40\nCC20\nENDCHAR\nSTARTCHAR U_8682\nENCODING 34434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2040\nFA40\nAA40\nAA40\nABE0\nF820\n27A0\n2820\n3920\nC8C0\nENDCHAR\nSTARTCHAR U_8683\nENCODING 34435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1080\n7F00\n0240\n3F80\n0400\n7FC0\n4440\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_8684\nENCODING 34436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n2FE0\nFA00\nAA00\nABC0\nFA40\n2240\n2A40\n3C40\nC8C0\nENDCHAR\nSTARTCHAR U_8685\nENCODING 34437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\n2400\nFDE0\nAD20\nAD20\nFD60\n2500\n2520\n3920\nC8E0\nENDCHAR\nSTARTCHAR U_8686\nENCODING 34438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n22A0\nFAA0\nAAA0\nABE0\nAA20\nFA00\n2200\n2A20\n3A20\nE9E0\nENDCHAR\nSTARTCHAR U_8687\nENCODING 34439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\n2220\nFA20\nABE0\nAAA0\nFA80\n2240\n2A40\n3C20\nC820\nENDCHAR\nSTARTCHAR U_8688\nENCODING 34440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n2280\nFA80\nAFC0\nAA80\nFA80\n2280\n2280\n3C80\nCC80\nENDCHAR\nSTARTCHAR U_8689\nENCODING 34441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n0E00\n3580\nC460\n3F80\n2480\n3F80\n0440\n7FE0\nENDCHAR\nSTARTCHAR U_868A\nENCODING 34442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\nAA40\nAA40\nAA40\nF940\n2080\n2980\n3A40\nEC20\nENDCHAR\nSTARTCHAR U_868B\nENCODING 34443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nFBE0\nAAA0\nAAA0\nAAA0\nFB60\n2220\n2A20\n3A20\nEA60\nENDCHAR\nSTARTCHAR U_868C\nENCODING 34444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n23E0\n2080\nF880\nABE0\nA880\nF880\n27E0\n2080\n3880\nC880\nENDCHAR\nSTARTCHAR U_868D\nENCODING 34445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFA80\nAAA0\nABC0\nAA80\nFA80\n2280\n2AA0\n3BA0\nEA60\nENDCHAR\nSTARTCHAR U_868E\nENCODING 34446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\nFA20\nAA20\nAA20\nABE0\nFA20\n2220\n2A20\n3BE0\nEA20\nENDCHAR\nSTARTCHAR U_868F\nENCODING 34447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\n2220\nFA20\nABE0\nAA20\nFBE0\n2220\n2A20\n3AA0\nCC40\nENDCHAR\nSTARTCHAR U_8690\nENCODING 34448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n23E0\nFC20\nA920\nA8A0\nF8E0\n2320\n2C20\n3920\nC8C0\nENDCHAR\nSTARTCHAR U_8691\nENCODING 34449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n27E0\nF880\nA880\nABE0\nF940\n2140\n2880\n3940\nCE20\nENDCHAR\nSTARTCHAR U_8692\nENCODING 34450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n2340\nFAC0\nAA40\nAFE0\nFA40\n2240\n2A40\n3B40\nCC80\nENDCHAR\nSTARTCHAR U_8693\nENCODING 34451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23A0\n20A0\n20A0\nFBA0\nAA20\nABA0\nF8A0\n20A0\n28A0\n38A0\nCB20\nENDCHAR\nSTARTCHAR U_8694\nENCODING 34452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2380\n2280\nFA80\nABE0\nAA80\nFA80\n22A0\n2AA0\n3B60\nCA20\nENDCHAR\nSTARTCHAR U_8695\nENCODING 34453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0800\n0800\nFFE0\n1480\n2440\nFFA0\n2480\n3F80\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_8696\nENCODING 34454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2000\n2000\nF800\nAFE0\nAA80\nFA80\n2280\n2AA0\n3CA0\nC860\nENDCHAR\nSTARTCHAR U_8697\nENCODING 34455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n23C0\nF940\nA940\nAFE0\nF900\n2100\n2A80\n3C40\nC820\nENDCHAR\nSTARTCHAR U_8698\nENCODING 34456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2140\n2120\nFFE0\nA900\nA980\nF980\n2280\n2AA0\n3CA0\nC860\nENDCHAR\nSTARTCHAR U_8699\nENCODING 34457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2180\n2240\nFD20\nA880\nA800\nFFE0\n2040\n2880\n3880\nC900\nENDCHAR\nSTARTCHAR U_869A\nENCODING 34458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n23C0\n2200\nFA00\nABE0\nAA40\nFA40\n2240\n2A40\n3A40\nCC40\nENDCHAR\nSTARTCHAR U_869B\nENCODING 34459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n23E0\nFAA0\nAAA0\nAAA0\nFBE0\n2080\n2880\n3880\nC880\nENDCHAR\nSTARTCHAR U_869C\nENCODING 34460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2140\n2140\nFA40\nAFE0\nA840\nF8C0\n2140\n2A40\n3D40\nC880\nENDCHAR\nSTARTCHAR U_869D\nENCODING 34461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\n2100\nF9E0\nAF00\nA900\nF9E0\n2700\n2920\n3920\nC8E0\nENDCHAR\nSTARTCHAR U_869E\nENCODING 34462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n27E0\nF900\nA900\nA980\nFB40\n2540\n2920\n3920\nC900\nENDCHAR\nSTARTCHAR U_869F\nENCODING 34463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n2100\nF900\nA900\nAFC0\nF900\n2500\n2900\n3900\nCFE0\nENDCHAR\nSTARTCHAR U_86A0\nENCODING 34464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n1080\n3F40\nC920\n1300\n2400\n7FC0\n4440\n7FC0\n0400\n7FC0\nENDCHAR\nSTARTCHAR U_86A1\nENCODING 34465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n2240\nFC20\nA800\nABE0\nF920\n2120\n2920\n3AA0\nCC40\nENDCHAR\nSTARTCHAR U_86A2\nENCODING 34466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n27E0\nF800\nAB80\nAA80\nFA80\n2280\n2AA0\n3CA0\nC860\nENDCHAR\nSTARTCHAR U_86A3\nENCODING 34467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2280\n2240\nFA40\nAC20\nA900\nF900\n2200\n2A40\n3CE0\nCB20\nENDCHAR\nSTARTCHAR U_86A4\nENCODING 34468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n2880\n1500\n0E00\n3180\nC460\n3FC0\n2440\n3FC0\n0440\n7FA0\nENDCHAR\nSTARTCHAR U_86A5\nENCODING 34469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2220\n2220\nFC00\nA940\nA940\nF940\n2140\n2880\n3940\nCA20\nENDCHAR\nSTARTCHAR U_86A6\nENCODING 34470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n2240\nFFE0\nAA40\nAA40\nFFE0\n2240\n2A40\n3A40\nCAC0\nENDCHAR\nSTARTCHAR U_86A7\nENCODING 34471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2180\n2240\nFC20\nAA40\nAA40\nFA40\n2240\n2A40\n3C40\nC840\nENDCHAR\nSTARTCHAR U_86A8\nENCODING 34472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n27C0\nF900\nA900\nAFE0\nF900\n2100\n2A80\n3C40\nC820\nENDCHAR\nSTARTCHAR U_86A9\nENCODING 34473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n0800\nFFE0\n0400\n3F80\n2480\n3F80\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_86AA\nENCODING 34474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2240\n2140\nF940\nAA40\nA940\nF940\n20E0\n2F40\n3840\nC840\nENDCHAR\nSTARTCHAR U_86AB\nENCODING 34475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n2420\nFBA0\nAAA0\nAAA0\nFBA0\n2260\n2A00\n3A20\nCBE0\nENDCHAR\nSTARTCHAR U_86AC\nENCODING 34476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n2540\nFD40\nAD40\nAD40\nFDC0\n2580\n2AA0\n3CA0\nC860\nENDCHAR\nSTARTCHAR U_86AD\nENCODING 34477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\n2220\nFBE0\nAA00\nAAA0\nFAC0\n2280\n2AA0\n3AA0\nCCE0\nENDCHAR\nSTARTCHAR U_86AE\nENCODING 34478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n22C0\n22A0\nFA80\nAEE0\nAB80\nFA80\n22A0\n2AA0\n3A60\nCA20\nENDCHAR\nSTARTCHAR U_86AF\nENCODING 34479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2380\n2200\nFA00\nABE0\nAA40\nFA40\n2240\n2A40\n3A40\nCFE0\nENDCHAR\nSTARTCHAR U_86B0\nENCODING 34480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n23E0\nFAA0\nAAA0\nAAA0\nFBE0\n22A0\n2AA0\n3BE0\nCA20\nENDCHAR\nSTARTCHAR U_86B1\nENCODING 34481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n23E0\nFD00\nA900\nA9E0\nF900\n21E0\n2900\n3900\nC900\nENDCHAR\nSTARTCHAR U_86B2\nENCODING 34482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27E0\n2080\nFAA0\nA9C0\nAFE0\nF880\n2080\n2880\n3880\nC880\nENDCHAR\nSTARTCHAR U_86B3\nENCODING 34483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2380\n2280\nFA80\nABE0\nAA80\nFA80\n22A0\n2AA0\n3B60\nCAA0\nENDCHAR\nSTARTCHAR U_86B4\nENCODING 34484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n2480\nFFE0\nAAA0\nAAA0\nFCA0\n27A0\n2920\n3A20\nCCC0\nENDCHAR\nSTARTCHAR U_86B5\nENCODING 34485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2040\n2040\nFBC0\nAAC0\nAAC0\nFBC0\n2240\n2840\n3940\nC880\nENDCHAR\nSTARTCHAR U_86B6\nENCODING 34486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\n2240\nFFE0\nAA40\nAA40\nFBC0\n2240\n2A40\n3BC0\nCA40\nENDCHAR\nSTARTCHAR U_86B7\nENCODING 34487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2200\n2200\nFBC0\nAA40\nAA40\nFBC0\n2240\n2A00\n3A00\nCBE0\nENDCHAR\nSTARTCHAR U_86B8\nENCODING 34488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n23C0\n2200\nFBE0\nAA80\nAA80\nFB80\n22E0\n2AA0\n3C80\nC880\nENDCHAR\nSTARTCHAR U_86B9\nENCODING 34489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2240\n2240\nFDE0\nAC40\nAE40\nFD40\n2540\n2C40\n3D40\nCC80\nENDCHAR\nSTARTCHAR U_86BA\nENCODING 34490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n27C0\nFD40\nAD40\nAFC0\nFD40\n27E0\n2C40\n3C40\nCCC0\nENDCHAR\nSTARTCHAR U_86BB\nENCODING 34491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFD00\n1100\n3920\n54E0\n9400\n3FC0\n2440\n3FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_86BC\nENCODING 34492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n23E0\nFC20\nABA0\nAAA0\nFAA0\n23A0\n2820\n3920\nC8C0\nENDCHAR\nSTARTCHAR U_86BD\nENCODING 34493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\n2080\nF980\nAAC0\nACA0\nF8A0\n2080\n2880\n3800\nCFE0\nENDCHAR\nSTARTCHAR U_86BE\nENCODING 34494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n23E0\nFAA0\nAA80\nABE0\nFAA0\n22A0\n2A40\n3CA0\nC920\nENDCHAR\nSTARTCHAR U_86BF\nENCODING 34495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n27E0\nF900\nAA40\nAFC0\nF880\n2100\n2A40\n3FE0\nCA20\nENDCHAR\nSTARTCHAR U_86C0\nENCODING 34496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n27E0\nF900\nA900\nA900\nFFC0\n2100\n2900\n3900\nCFE0\nENDCHAR\nSTARTCHAR U_86C1\nENCODING 34497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\n2120\nF920\nAAE0\nAC40\nFBE0\n2220\n2A20\n3BE0\nCA20\nENDCHAR\nSTARTCHAR U_86C2\nENCODING 34498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2220\n27E0\nFA00\nABC0\nAA40\nFB40\n2280\n2C80\n3940\nCA20\nENDCHAR\nSTARTCHAR U_86C3\nENCODING 34499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\n2080\nFBE0\nAAA0\nAAA0\nFB60\n2220\n2A20\n3A20\nCA60\nENDCHAR\nSTARTCHAR U_86C4\nENCODING 34500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n27E0\nF880\nA880\nABE0\nFA20\n2220\n2A20\n3BE0\nCA20\nENDCHAR\nSTARTCHAR U_86C5\nENCODING 34501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n20E0\nF880\nA880\nABE0\nFA20\n2220\n2A20\n3BE0\nCA20\nENDCHAR\nSTARTCHAR U_86C6\nENCODING 34502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n2240\nFA40\nABC0\nAA40\nFA40\n23C0\n2A40\n3A40\nCFE0\nENDCHAR\nSTARTCHAR U_86C7\nENCODING 34503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n27E0\nFC20\nAA00\nAA40\nFB80\n2200\n2A20\n3A20\nC9E0\nENDCHAR\nSTARTCHAR U_86C8\nENCODING 34504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2500\n27C0\nF900\nA900\nAFE0\nF900\n2100\n2A80\n3C40\nC820\nENDCHAR\nSTARTCHAR U_86C9\nENCODING 34505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2440\nF920\nA880\nAFE0\nF840\n2280\n2900\n3880\nC880\nENDCHAR\nSTARTCHAR U_86CA\nENCODING 34506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4440\n7FC0\n0480\nFFE0\n0020\n7FC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_86CB\nENCODING 34507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0440\n2780\n3400\n4FE0\n8400\n3FC0\n2440\n3FC0\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_86CC\nENCODING 34508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n23E0\n22A0\nFAA0\nAAA0\nAAA0\nFAA0\n22A0\n2AA0\n3CE0\nC8A0\nENDCHAR\nSTARTCHAR U_86CD\nENCODING 34509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n1240\n1280\n7FE0\n8440\n3F80\n2480\n3F80\n0440\n07C0\n7840\nENDCHAR\nSTARTCHAR U_86CE\nENCODING 34510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2200\n23E0\nFA80\nAA80\nAAE0\nFAA0\n22A0\n2AA0\n3D20\nCAC0\nENDCHAR\nSTARTCHAR U_86CF\nENCODING 34511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2220\n2140\nF880\nA940\nAE20\nF880\n23E0\n2880\n3880\nCFE0\nENDCHAR\nSTARTCHAR U_86D0\nENCODING 34512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFFE0\nAAA0\nAAA0\nAFE0\nFAA0\n2AA0\n2AA0\n3FE0\nE820\nENDCHAR\nSTARTCHAR U_86D1\nENCODING 34513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2240\n27A0\nF820\nAA80\nAFE0\nF880\n27E0\n2880\n3880\nC880\nENDCHAR\nSTARTCHAR U_86D2\nENCODING 34514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23E0\n2520\nF940\nA880\nA940\nFE20\n23E0\n2A20\n3A20\nCBE0\nENDCHAR\nSTARTCHAR U_86D3\nENCODING 34515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\nFD40\n2100\nFFE0\n2100\nF920\nA940\nF980\n28A0\n3560\nC220\nENDCHAR\nSTARTCHAR U_86D4\nENCODING 34516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\n23A0\nFAA0\nAAA0\nAAA0\nFBA0\n2220\n2A20\n3BE0\nCA20\nENDCHAR\nSTARTCHAR U_86D5\nENCODING 34517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2100\nFA00\nAFE0\nAA20\nFBE0\n2220\n2BE0\n3A20\nCA60\nENDCHAR\nSTARTCHAR U_86D6\nENCODING 34518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2240\n27E0\nFA40\nABA0\nAB40\nFDA0\n2540\n2DA0\n3920\nC8E0\nENDCHAR\nSTARTCHAR U_86D7\nENCODING 34519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3FC0\n2040\n3FC0\n2440\n2440\n3FC0\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_86D8\nENCODING 34520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2140\n23E0\nF880\nA880\nABE0\nF880\n2080\n2FE0\n3880\nC880\nENDCHAR\nSTARTCHAR U_86D9\nENCODING 34521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2100\nF900\nAFE0\nA800\nF900\n27C0\n2900\n3900\nCFE0\nENDCHAR\nSTARTCHAR U_86DA\nENCODING 34522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2720\n2420\n24A0\nFFA0\nADA0\nADA0\nFBA0\n21A0\n2A20\n3C20\nC8E0\nENDCHAR\nSTARTCHAR U_86DB\nENCODING 34523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n23E0\nFC80\nA880\nAFE0\nF880\n21C0\n2AA0\n3CA0\nC880\nENDCHAR\nSTARTCHAR U_86DC\nENCODING 34524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27C0\n2540\nFFE0\nAD40\nAD40\nFFC0\n2500\n2D00\n3E00\nCC00\nENDCHAR\nSTARTCHAR U_86DD\nENCODING 34525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n2240\nFBC0\nAA40\nABC0\nFAA0\n22C0\n2A80\n3B60\nCE20\nENDCHAR\nSTARTCHAR U_86DE\nENCODING 34526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2380\n2080\nF880\nAFE0\nA880\nFBE0\n2220\n2A20\n3BE0\nCA20\nENDCHAR\nSTARTCHAR U_86DF\nENCODING 34527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n27E0\nFA40\nAC20\nAA40\nFA40\n2140\n2880\n3940\nCE20\nENDCHAR\nSTARTCHAR U_86E0\nENCODING 34528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\n2240\nFA40\nAC40\nAA80\nFFE0\n22A0\n2AA0\n3AA0\nCD60\nENDCHAR\nSTARTCHAR U_86E1\nENCODING 34529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\n25A0\nFB60\nA920\nAB20\nFD60\n21A0\n2920\n3920\nCF60\nENDCHAR\nSTARTCHAR U_86E2\nENCODING 34530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2140\n27E0\nF940\nA940\nAFE0\nF940\n2140\n2940\n3A40\nCC40\nENDCHAR\nSTARTCHAR U_86E3\nENCODING 34531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\n27E0\nF880\nABE0\nA800\nFBE0\n2220\n2A20\n3BE0\nCA20\nENDCHAR\nSTARTCHAR U_86E4\nENCODING 34532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2180\n2240\nFC20\nABC0\nA800\nFBE0\n2220\n2A20\n3BE0\nCA20\nENDCHAR\nSTARTCHAR U_86E5\nENCODING 34533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2220\n2540\nF880\nA900\nABE0\nFD20\n2220\n2940\n3880\nCF00\nENDCHAR\nSTARTCHAR U_86E6\nENCODING 34534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\n2080\nFBE0\nA8A0\nAFE0\nFC80\n27E0\n28A0\n3940\nCE20\nENDCHAR\nSTARTCHAR U_86E7\nENCODING 34535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n26A0\nFD20\nAD60\nAEA0\nFCA0\n2560\n2620\n3C20\nCC60\nENDCHAR\nSTARTCHAR U_86E8\nENCODING 34536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\n2100\nFBE0\nAA20\nAA20\nFBE0\n2220\n2A20\n3BE0\nCA20\nENDCHAR\nSTARTCHAR U_86E9\nENCODING 34537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\nFC80\n2680\n25A0\nFCE0\n0400\n7FC0\n4440\n7FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_86EA\nENCODING 34538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n1120\n7D20\n1120\n7EA0\n1440\n3FC0\n2440\n3FC0\n0440\n7FA0\nENDCHAR\nSTARTCHAR U_86EB\nENCODING 34539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n2240\nFFE0\nAA00\nAAE0\nFAA0\n22E0\n2A80\n3CA0\nC8E0\nENDCHAR\nSTARTCHAR U_86EC\nENCODING 34540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FE0\n1100\nFFE0\n2100\n64C0\nBFA0\n2480\n3F80\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_86ED\nENCODING 34541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\n2200\nFA40\nAFA0\nA880\nF880\n23E0\n2880\n3880\nCFE0\nENDCHAR\nSTARTCHAR U_86EE\nENCODING 34542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n3180\n5540\n8420\n3F80\n2480\n3F80\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_86EF\nENCODING 34543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2140\nFFE0\nA880\nA900\nFA40\n2780\n2A20\n3A20\nCBE0\nENDCHAR\nSTARTCHAR U_86F0\nENCODING 34544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF7C0\n2140\nF340\n22C0\n6420\n3FC0\n2440\n3FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_86F1\nENCODING 34545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\nAD20\nAB40\nFFE0\n2100\n2900\n3A80\nC440\n0820\nENDCHAR\nSTARTCHAR U_86F2\nENCODING 34546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27E0\n2140\nF9A0\nAA60\nAC20\nFFE0\n2280\n2AA0\n3CA0\nC860\nENDCHAR\nSTARTCHAR U_86F3\nENCODING 34547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\n2880\n2880\nFBE0\nAAA0\nAAA0\nFAA0\n2AA0\n2AE0\n3880\nD080\nENDCHAR\nSTARTCHAR U_86F4\nENCODING 34548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2240\nF980\nAE60\nA800\nFA40\n2240\n2A40\n3C40\nC840\nENDCHAR\nSTARTCHAR U_86F5\nENCODING 34549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n22A0\n22A0\nFD40\nAAA0\nAAA0\nF800\n27E0\n2880\n3880\nCFE0\nENDCHAR\nSTARTCHAR U_86F6\nENCODING 34550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n2780\n2520\nFAC0\nA840\nAFE0\nF840\n2240\n2940\n3840\nC9C0\nENDCHAR\nSTARTCHAR U_86F7\nENCODING 34551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n2140\n27E0\nF920\nADC0\nAB80\nF940\n2340\n2D20\n3920\nCB00\nENDCHAR\nSTARTCHAR U_86F8\nENCODING 34552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24A0\n22C0\n2080\nFBE0\nAA20\nABE0\nFA20\n23E0\n2A20\n3A20\nCA60\nENDCHAR\nSTARTCHAR U_86F9\nENCODING 34553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2140\n23E0\nFAA0\nABE0\nAAA0\nFAA0\n23E0\n2AA0\n3AA0\nCAE0\nENDCHAR\nSTARTCHAR U_86FA\nENCODING 34554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n27E0\nF940\nAB40\nAD40\nFBA0\n2100\n2A80\n3C40\nC820\nENDCHAR\nSTARTCHAR U_86FB\nENCODING 34555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2C40\n27E0\nFC40\nAC40\nAFC0\nFA80\n2280\n2AA0\n3CA0\nC860\nENDCHAR\nSTARTCHAR U_86FC\nENCODING 34556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\n2080\nFBE0\nAAA0\nABE0\nFAA0\n23E0\n2880\n3FE0\nC880\nENDCHAR\nSTARTCHAR U_86FD\nENCODING 34557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\n2220\nFBE0\nAA20\nABE0\nFA20\n23E0\n2940\n3A20\nCC20\nENDCHAR\nSTARTCHAR U_86FE\nENCODING 34558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n26C0\n22A0\nFFE0\nAA80\nAA80\nFBA0\n26C0\n2AA0\n3B60\nCE20\nENDCHAR\nSTARTCHAR U_86FF\nENCODING 34559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2440\nF920\nAFC0\nA880\nF900\n23C0\n2A40\n3A40\nCBC0\nENDCHAR\nSTARTCHAR U_8700\nENCODING 34560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4920\n7FE0\n1000\n3FE0\n4420\nBFA0\n24A0\n3FA0\n04A0\n3F40\nENDCHAR\nSTARTCHAR U_8701\nENCODING 34561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n2400\nFFE0\nA8A0\nA8C0\nFA80\n22E0\n2A80\n3D80\nC8E0\nENDCHAR\nSTARTCHAR U_8702\nENCODING 34562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n2480\nFB60\nA880\nAFE0\nF880\n23E0\n2880\n3FE0\nC880\nENDCHAR\nSTARTCHAR U_8703\nENCODING 34563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5FC0\n4000\n7FE0\n5180\n5260\n7FC0\n6240\n7FC0\n4240\nBFA0\nENDCHAR\nSTARTCHAR U_8704\nENCODING 34564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2400\n25C0\nFC00\nAFE0\nAD40\nFD40\n2560\n2D40\n39A0\nCB20\nENDCHAR\nSTARTCHAR U_8705\nENCODING 34565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\n27E0\nF880\nABE0\nAAA0\nFBE0\n22A0\n2BE0\n3AA0\nCAE0\nENDCHAR\nSTARTCHAR U_8706\nENCODING 34566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n23C0\nFA40\nAA40\nABC0\nFA40\n23C0\n29A0\n3AA0\nCCE0\nENDCHAR\nSTARTCHAR U_8707\nENCODING 34567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFB80\n2200\n3FE0\nE480\n2480\n3FC0\n2440\n3FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_8708\nENCODING 34568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFBC0\nA800\nABC0\nA900\nFFE0\n2100\n2A80\n3C40\nC820\nENDCHAR\nSTARTCHAR U_8709\nENCODING 34569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n27A0\n2520\nFAC0\nAFE0\nA840\nF880\n27E0\n2880\n3880\nC980\nENDCHAR\nSTARTCHAR U_870A\nENCODING 34570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n2620\n22A0\nFAA0\nAFA0\nAAA0\nFBA0\n26A0\n2A20\n3A20\nCAE0\nENDCHAR\nSTARTCHAR U_870B\nENCODING 34571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23E0\n2220\nFBE0\nAA20\nABE0\nFA80\n22A0\n2A40\n3AA0\nCB20\nENDCHAR\nSTARTCHAR U_870C\nENCODING 34572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n24A0\n27C0\nF4A0\n94A0\n9660\nF100\n27C0\n2900\n3900\nCFE0\nENDCHAR\nSTARTCHAR U_870D\nENCODING 34573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2440\nFBE0\nA900\nAFE0\nF900\n2380\n2540\n3920\nC900\nENDCHAR\nSTARTCHAR U_870E\nENCODING 34574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\n23E0\nF800\nABE0\nAA20\nFBE0\n2220\n2BE0\n3A20\nCA60\nENDCHAR\nSTARTCHAR U_870F\nENCODING 34575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\n2100\nFFE0\nAB80\nAD40\nFBA0\n2280\n2AE0\n3A20\nCC60\nENDCHAR\nSTARTCHAR U_8710\nENCODING 34576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2780\n2280\nFBE0\nAAA0\nAFA0\nFAA0\n24A0\n27A0\n38A0\nC960\nENDCHAR\nSTARTCHAR U_8711\nENCODING 34577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n2100\n45E0\nA500\n5FE0\n8400\n3F80\n2480\n3F80\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_8712\nENCODING 34578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n26C0\n2240\nFA40\nAF60\nAB40\nFB40\n2540\n2DE0\n3A00\nC9E0\nENDCHAR\nSTARTCHAR U_8713\nENCODING 34579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2720\n21C0\nF940\nAA40\nABE0\nF940\n2540\n2A40\n3AE0\nC500\n08E0\nENDCHAR\nSTARTCHAR U_8714\nENCODING 34580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n2420\nFBE0\nAAA0\nABE0\nFAA0\n23E0\n2820\n38A0\nC840\nENDCHAR\nSTARTCHAR U_8715\nENCODING 34581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2140\n27E0\nFC20\nAC20\nAFE0\nFA80\n2280\n2AA0\n3AA0\nCC60\nENDCHAR\nSTARTCHAR U_8716\nENCODING 34582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2AA0\nFAA0\nABA0\nAAA0\nFAA0\n2BA0\n2AA0\n3AA0\nCFE0\nENDCHAR\nSTARTCHAR U_8717\nENCODING 34583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\n2220\nFBE0\nA880\nABE0\nFAA0\n22A0\n2B60\n3A20\nCA60\nENDCHAR\nSTARTCHAR U_8718\nENCODING 34584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n27E0\nFAA0\nAAA0\nAAA0\nFFA0\n22A0\n2AA0\n3BE0\nCCA0\nENDCHAR\nSTARTCHAR U_8719\nENCODING 34585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n22C0\n27A0\nFA20\nAB40\nAE40\nFA40\n2240\n2AA0\n3BE0\nCA20\nENDCHAR\nSTARTCHAR U_871A\nENCODING 34586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3E0\n1200\nF3C0\n1200\nF3E0\n1600\n7FC0\n4440\n7FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_871B\nENCODING 34587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\n23E0\nFA80\nABE0\nAA80\nFA80\n23E0\n2D20\n3920\nC9E0\nENDCHAR\nSTARTCHAR U_871C\nENCODING 34588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8A20\n5540\n9F20\n6400\nBF80\n2480\n3F80\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_871D\nENCODING 34589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1900\n1500\nFFE0\n2480\n7FC0\nA4A0\n3F80\n0480\n7FC0\nENDCHAR\nSTARTCHAR U_871E\nENCODING 34590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\n2240\nFBC0\nAA40\nABC0\nFA40\n27E0\n2940\n3A20\nCC20\nENDCHAR\nSTARTCHAR U_871F\nENCODING 34591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2240\nFFE0\nA800\nABC0\nFA40\n23C0\n2A40\n3BC0\nCA40\nENDCHAR\nSTARTCHAR U_8720\nENCODING 34592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2460\n27A0\nFCA0\nAFE0\nACA0\nFDE0\n26A0\n2CA0\n3FE0\nCC20\nENDCHAR\nSTARTCHAR U_8721\nENCODING 34593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\n2240\nFA40\nAFE0\nA800\nFBE0\n2220\n2BE0\n3A20\nCBE0\nENDCHAR\nSTARTCHAR U_8722\nENCODING 34594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2040\n2080\nFFE0\nA880\nA880\nFFE0\n2560\n2D60\n3D60\nCFE0\nENDCHAR\nSTARTCHAR U_8723\nENCODING 34595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2140\n27E0\nF880\nABE0\nA880\nFFE0\n2180\n2980\n3AA0\nCC60\nENDCHAR\nSTARTCHAR U_8724\nENCODING 34596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFE00\n23E0\n7240\nAC40\n0400\n3FC0\n2440\n3FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_8725\nENCODING 34597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n22C0\n2280\nFF80\nAAE0\nABA0\nFEA0\n22A0\n2AA0\n3B20\nCA20\nENDCHAR\nSTARTCHAR U_8726\nENCODING 34598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n2240\nFC20\nABC0\nA800\nAFE0\nFAA0\n2AA0\n2FE0\n3AA0\nE860\nENDCHAR\nSTARTCHAR U_8727\nENCODING 34599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n23E0\n2220\nFBE0\nAAC0\nAAA0\nFBE0\n2280\n2C80\n3940\nCA20\nENDCHAR\nSTARTCHAR U_8728\nENCODING 34600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2140\nFFE0\nA940\nAFC0\nF900\n25E0\n2D00\n3B00\nC9E0\nENDCHAR\nSTARTCHAR U_8729\nENCODING 34601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2520\n27E0\nFD20\nAFE0\nAC20\nFDE0\n2560\n2DE0\n3C20\nC8E0\nENDCHAR\nSTARTCHAR U_872A\nENCODING 34602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n2620\nFBA0\nA920\nAFE0\nF920\n2560\n2FE0\n3820\nC8C0\nENDCHAR\nSTARTCHAR U_872B\nENCODING 34603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nFC40\nAFC0\nAC80\nFCA0\n27C0\n2480\n3EA0\nC4E0\nENDCHAR\nSTARTCHAR U_872C\nENCODING 34604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2040\n2080\nFCA0\nAEE0\nADA0\nFDA0\n26E0\n2CA0\n3D20\nCFE0\nENDCHAR\nSTARTCHAR U_872D\nENCODING 34605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n21E0\n2240\nFC80\nA960\nAE20\nFC20\n2760\n2C20\n3FE0\nCC20\nENDCHAR\nSTARTCHAR U_872E\nENCODING 34606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\n27E0\nF880\nABA0\nAAA0\nFBA0\n2040\n2FE0\n38A0\nC920\nENDCHAR\nSTARTCHAR U_872F\nENCODING 34607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2100\nFFE0\nAA00\nAFE0\nF940\n23A0\n2900\n3FE0\nC900\nENDCHAR\nSTARTCHAR U_8730\nENCODING 34608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4AA0\n7BE0\n4A20\n7BE0\n9400\n7FC0\n4440\n7FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_8731\nENCODING 34609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2520\nFFE0\nAD20\nAFE0\nFA80\n27E0\n2880\n3880\nC880\nENDCHAR\nSTARTCHAR U_8732\nENCODING 34610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n2380\n2100\nFFE0\nAB40\nAD20\nFFE0\n2240\n2B80\n3940\nCE20\nENDCHAR\nSTARTCHAR U_8733\nENCODING 34611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2240\nFBC0\nA800\nABC0\nF840\n2080\n2FE0\n3880\nC980\nENDCHAR\nSTARTCHAR U_8734\nENCODING 34612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nFC40\nAFC0\nAA00\nFFE0\n22A0\n2CA0\n3920\nCAC0\nENDCHAR\nSTARTCHAR U_8735\nENCODING 34613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\n2AA0\n2AA0\nFEE0\nA820\nAFE0\nF820\n2EE0\n2AA0\n3AA0\nD2A0\nENDCHAR\nSTARTCHAR U_8736\nENCODING 34614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2240\nFA40\nAEA0\nA900\nF900\n27E0\n2900\n3900\nC900\nENDCHAR\nSTARTCHAR U_8737\nENCODING 34615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n2340\nFFE0\nA900\nAFE0\nAA40\nFFA0\n2280\n2BA0\n3A20\nE9E0\nENDCHAR\nSTARTCHAR U_8738\nENCODING 34616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5140\n7D40\n4480\n7F40\n5420\n7F80\n2480\n3F80\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_8739\nENCODING 34617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\n2240\nF880\nAFE0\nFCA0\n24A0\n2560\n3E20\nCCA0\n0440\nENDCHAR\nSTARTCHAR U_873A\nENCODING 34618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n26E0\n2420\nFF60\nAC20\nAFE0\nFA80\n2280\n2AA0\n3AA0\nCC60\nENDCHAR\nSTARTCHAR U_873B\nENCODING 34619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\n27C0\nF900\nAFE0\nAA40\nFBC0\n2240\n2BC0\n3A40\nCAC0\nENDCHAR\nSTARTCHAR U_873C\nENCODING 34620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\n23E0\nFE80\nABE0\nAA80\nFA80\n23E0\n2A80\n3A80\nCBE0\nENDCHAR\nSTARTCHAR U_873D\nENCODING 34621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2100\nFFE0\nA920\nFDA0\n2DA0\n2B60\n3920\nD920\n0960\nENDCHAR\nSTARTCHAR U_873E\nENCODING 34622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n22A0\n23E0\nFAA0\nABE0\nA880\nFFE0\n2080\n29C0\n3AA0\nCCA0\nENDCHAR\nSTARTCHAR U_873F\nENCODING 34623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2420\nFAE0\nABA0\nACA0\nFAA0\n21E0\n2A80\n3CA0\nC8E0\nENDCHAR\nSTARTCHAR U_8740\nENCODING 34624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2100\nFFC0\nAD40\nAFC0\nFD40\n27C0\n2B80\n3D40\nC920\nENDCHAR\nSTARTCHAR U_8741\nENCODING 34625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7BC0\n4040\n7BC0\n0A00\nFFE0\n2480\n3F80\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_8742\nENCODING 34626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A20\n2AC0\nFA80\nAFE0\nA8A0\nAFA0\nFAA0\n2AA0\n2B40\n3AA0\nE920\nENDCHAR\nSTARTCHAR U_8743\nENCODING 34627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\n25A0\nFA40\nADA0\nAFE0\nFAA0\n26A0\n2A40\n3DA0\nC8A0\nENDCHAR\nSTARTCHAR U_8744\nENCODING 34628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\nFAA0\nAFE0\nA920\nFFE0\n2A20\n2BA0\n3820\nC8A0\n0840\nENDCHAR\nSTARTCHAR U_8745\nENCODING 34629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n1080\nFFE0\n2940\n4620\nBF80\n2480\n3F80\n0480\n07C0\n7840\nENDCHAR\nSTARTCHAR U_8746\nENCODING 34630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\n2560\nFD40\nA900\nAFC0\nF900\n27E0\n2900\n3900\nC900\nENDCHAR\nSTARTCHAR U_8747\nENCODING 34631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nF900\nAFE0\nAD20\nFFE0\n2520\n2FE0\n3920\nC9E0\nENDCHAR\nSTARTCHAR U_8748\nENCODING 34632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n27E0\nF520\n97E0\n9520\nF5A0\n27E0\n2420\n37E0\nD420\nENDCHAR\nSTARTCHAR U_8749\nENCODING 34633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2140\n23E0\nFAA0\nABE0\nAAA0\nFBE0\n2080\n2FE0\n3880\nC880\nENDCHAR\nSTARTCHAR U_874A\nENCODING 34634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2420\nF800\nAFC0\nA900\nFD00\n25E0\n2D00\n3B00\nC9E0\nENDCHAR\nSTARTCHAR U_874B\nENCODING 34635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n2540\n2580\nFFC0\nAA40\nAFC0\nFA40\n2FC0\n3A60\nCA60\n1220\nENDCHAR\nSTARTCHAR U_874C\nENCODING 34636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n2640\n22C0\nFF40\nAA40\nABC0\nFE40\n2260\n2BC0\n3A40\nCA40\nENDCHAR\nSTARTCHAR U_874D\nENCODING 34637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n2AA0\nFEA0\nAAA0\nAEA0\nF8A0\n2AA0\n2EE0\n3A80\nC080\nENDCHAR\nSTARTCHAR U_874E\nENCODING 34638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n23C0\nFA40\nABC0\nAA00\nFFE0\n22A0\n2B60\n3BA0\nC840\nENDCHAR\nSTARTCHAR U_874F\nENCODING 34639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2240\nFBC0\nA800\nAFE0\nFC20\n23C0\n2880\n3A80\nC900\nENDCHAR\nSTARTCHAR U_8750\nENCODING 34640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\n25A0\nFC20\nABE0\nAA20\nFBE0\n2220\n2BE0\n3A20\nCBE0\nENDCHAR\nSTARTCHAR U_8751\nENCODING 34641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\n25C0\nFB00\nAFE0\nAA20\nFBE0\n2220\n2BE0\n3A20\nCA60\nENDCHAR\nSTARTCHAR U_8752\nENCODING 34642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\n2100\nFFE0\nAAA0\nABA0\nFAA0\n23A0\n2AA0\n3FE0\nC820\nENDCHAR\nSTARTCHAR U_8753\nENCODING 34643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2440\nFBA0\nA800\nAEA0\nFAA0\n2EA0\n2AA0\n3E20\nCAE0\nENDCHAR\nSTARTCHAR U_8754\nENCODING 34644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n24A0\n27C0\nFCA0\nAFE0\nA900\nFBE0\n2220\n2BE0\n3A20\nCBE0\nENDCHAR\nSTARTCHAR U_8755\nENCODING 34645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5080\nABE0\n7AA0\n4AA0\n7AA0\n4BE0\n7880\n50A0\n78E0\nCBA0\nENDCHAR\nSTARTCHAR U_8756\nENCODING 34646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2420\nF800\nAFE0\nAA40\nFBC0\n2240\n2BC0\n3800\nCFE0\nENDCHAR\nSTARTCHAR U_8757\nENCODING 34647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n23E0\n2220\nFBE0\nAA20\nAFE0\nF880\n2080\n2BE0\n3880\nCFE0\nENDCHAR\nSTARTCHAR U_8758\nENCODING 34648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2540\n25C0\nFD40\nADC0\nAC80\nFFE0\n2540\n2C80\n3D40\nCFE0\nENDCHAR\nSTARTCHAR U_8759\nENCODING 34649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF820\nAFE0\nA800\nAFE0\nFAA0\nAFE0\n2AA0\n3AA0\nE860\nENDCHAR\nSTARTCHAR U_875A\nENCODING 34650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2140\n2080\nFFE0\nA9A0\nAE80\nF900\n27E0\n2B80\n3D40\nC920\nENDCHAR\nSTARTCHAR U_875B\nENCODING 34651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\n2FE0\nF880\nAF80\nAAA0\nFFA0\n2AC0\n2940\n3AA0\nD520\nENDCHAR\nSTARTCHAR U_875C\nENCODING 34652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2240\n27E0\nFA20\nABE0\nAA20\nFBE0\n2220\n2BE0\n3940\nCE20\nENDCHAR\nSTARTCHAR U_875D\nENCODING 34653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n23C0\nF880\nAFE0\nAAA0\nFDC0\n2280\n2DC0\n3AA0\nCDA0\nENDCHAR\nSTARTCHAR U_875E\nENCODING 34654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2920\nFFE0\nA800\nABE0\nAA20\nFBE0\n2A20\n2BE0\n3A20\nEBE0\nENDCHAR\nSTARTCHAR U_875F\nENCODING 34655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n24A0\nFFE0\nACA0\nAFE0\nAA20\nFBE0\n2220\n2BE0\n3A20\nEAE0\nENDCHAR\nSTARTCHAR U_8760\nENCODING 34656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2000\n23E0\nFA20\nABE0\nA800\nFBE0\n22A0\n2BE0\n3AA0\nCBE0\nENDCHAR\nSTARTCHAR U_8761\nENCODING 34657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nFFE0\nAAA0\nAAA0\nAAA0\nF900\n27E0\n2900\n3A80\nEC60\nENDCHAR\nSTARTCHAR U_8762\nENCODING 34658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\n23E0\nFA20\nABE0\nAA20\nFBE0\n2220\n2BE0\n3940\nCE20\nENDCHAR\nSTARTCHAR U_8763\nENCODING 34659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n22E0\nFF00\nAAE0\nAF20\nAD40\nFDE0\n2540\n2D40\n3940\nEAC0\nENDCHAR\nSTARTCHAR U_8764\nENCODING 34660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\nFFE0\nAA80\nAFE0\nADA0\nFEE0\n2420\n2FE0\n3C20\nEFE0\nENDCHAR\nSTARTCHAR U_8765\nENCODING 34661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n53E0\nFD40\n6980\nAE60\n6400\n3FC0\n2440\n3FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_8766\nENCODING 34662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2A20\nFA20\nAEE0\nA800\nAFE0\nF8A0\n2EA0\n2840\n38A0\nE920\nENDCHAR\nSTARTCHAR U_8767\nENCODING 34663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\n2240\nF900\nAFC0\nAD40\nFFE0\n2100\n2A80\n3C40\nC820\nENDCHAR\nSTARTCHAR U_8768\nENCODING 34664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0880\n0880\n7EA0\n0860\n2080\nFBE0\nAAA0\nFBE0\n28A0\nFBE0\nENDCHAR\nSTARTCHAR U_8769\nENCODING 34665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2080\n27E0\nFAA0\nABE0\nAAA0\nFBE0\n2080\n2BE0\n3880\nCFE0\nENDCHAR\nSTARTCHAR U_876A\nENCODING 34666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n27C0\nFC40\nAFE0\nAA00\nFFE0\n22A0\n2AA0\n3D20\nCAC0\nENDCHAR\nSTARTCHAR U_876B\nENCODING 34667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n27A0\n2140\nFFE0\nA900\nABE0\nFE20\n23E0\n2A20\n3BE0\nCA20\nENDCHAR\nSTARTCHAR U_876C\nENCODING 34668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n26A0\n2520\n26A0\nFFE0\nAA40\nAD20\nFBC0\n2640\n2980\n3A40\nCC20\nENDCHAR\nSTARTCHAR U_876D\nENCODING 34669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n23C0\nFA40\nABC0\nA800\nFFE0\n2280\n2AE0\n3D80\nC8E0\nENDCHAR\nSTARTCHAR U_876E\nENCODING 34670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n2620\nFBE0\nAA20\nABE0\nF900\n23E0\n2E40\n3980\nCE60\nENDCHAR\nSTARTCHAR U_876F\nENCODING 34671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n27A0\n22C0\nFFE0\nA900\nAFE0\nF920\n21A0\n2A40\n3CA0\nCB20\nENDCHAR\nSTARTCHAR U_8770\nENCODING 34672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2240\nFD20\nABC0\nA900\nFFE0\n2100\n2BC0\n3900\nCFE0\nENDCHAR\nSTARTCHAR U_8771\nENCODING 34673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2000\n3FC0\n1080\n7FE0\n56A0\n7FE0\n1080\n1CE0\nE720\nENDCHAR\nSTARTCHAR U_8772\nENCODING 34674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n2FA0\nFAA0\nAFA0\nAAA0\nFFA0\n22A0\n2720\n3AA0\nCA20\n0260\nENDCHAR\nSTARTCHAR U_8773\nENCODING 34675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2100\nFBC0\nA900\nAFE0\nFAA0\n27E0\n2AA0\n3BE0\nC840\nENDCHAR\nSTARTCHAR U_8774\nENCODING 34676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n24A0\n2FA0\nF4E0\nAEA0\nAAA0\nFAE0\n2AA0\n2EA0\n3920\nCA60\nENDCHAR\nSTARTCHAR U_8775\nENCODING 34677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF920\n2540\nFD80\n3580\n6A40\nA420\n3FC0\n2440\n3FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_8776\nENCODING 34678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\n2540\nFDC0\nAC00\nAFE0\nF900\n27E0\n2B80\n3D40\nC920\nENDCHAR\nSTARTCHAR U_8777\nENCODING 34679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2FE0\nFA20\nA940\nABE0\nA880\nFAA0\n22A0\n2BE0\n3900\nEE00\nENDCHAR\nSTARTCHAR U_8778\nENCODING 34680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFF40\nAD40\nAFE0\nA820\nFBA0\n2AA0\n2BA0\n3820\nE8E0\nENDCHAR\nSTARTCHAR U_8779\nENCODING 34681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFBC0\nAA40\nABC0\nA800\nFFC0\n2540\n2D40\n3D40\nEFE0\nENDCHAR\nSTARTCHAR U_877A\nENCODING 34682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\n23E0\nFAA0\nABE0\nA880\nFFE0\n24A0\n2FE0\n3C20\nCC60\nENDCHAR\nSTARTCHAR U_877B\nENCODING 34683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2100\nFFE0\nAAA0\nA920\nFFE0\n2920\n2FE0\n3920\nC960\nENDCHAR\nSTARTCHAR U_877C\nENCODING 34684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n2340\n2100\nFFE0\nAB40\nAD20\nF900\n27E0\n2A40\n3980\nCE60\nENDCHAR\nSTARTCHAR U_877D\nENCODING 34685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\n27E0\nFA00\nAFE0\nAC40\nFBE0\n2240\n2BC0\n3A40\nCBC0\nENDCHAR\nSTARTCHAR U_877E\nENCODING 34686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\n2240\nFFE0\nAC20\nA900\nFFE0\n2100\n2B80\n3D40\nC920\nENDCHAR\nSTARTCHAR U_877F\nENCODING 34687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n27C0\nFD40\nAFE0\nA920\nFFE0\n2920\n2FE0\n3920\nC8E0\nENDCHAR\nSTARTCHAR U_8780\nENCODING 34688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n93C0\n5680\n1980\n3FE0\nD480\n1280\n3F80\n2480\n3F80\n0440\n7FC0\nENDCHAR\nSTARTCHAR U_8781\nENCODING 34689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2520\nFBE0\nA920\nADE0\nAD40\nFD60\n2540\n2DA0\n3C00\nEBE0\nENDCHAR\nSTARTCHAR U_8782\nENCODING 34690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n24E0\nFEA0\nAAA0\nAEC0\nAAA0\nFEA0\n28A0\n2AE0\n3E80\nE980\nENDCHAR\nSTARTCHAR U_8783\nENCODING 34691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFA80\nAFE0\nACA0\nAFE0\nFA00\n23E0\n2A20\n3C20\nE8C0\nENDCHAR\nSTARTCHAR U_8784\nENCODING 34692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n2480\nFE80\nABE0\nAEA0\nAAA0\nFEA0\n2AA0\n2AE0\n3E80\nE880\nENDCHAR\nSTARTCHAR U_8785\nENCODING 34693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23E0\n2220\nFBE0\nAA20\nABE0\nFA20\n23E0\n2B40\n3D20\nC9C0\nENDCHAR\nSTARTCHAR U_8786\nENCODING 34694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n2FE0\nFA40\nAA40\nADA0\nFEC0\n2440\n2AA0\n3FE0\nC920\nENDCHAR\nSTARTCHAR U_8787\nENCODING 34695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2720\n2540\nFA40\nAF80\nA940\nFFE0\n2120\n2FE0\n3A80\nCC60\nENDCHAR\nSTARTCHAR U_8788\nENCODING 34696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2480\n25E0\nFD20\nADE0\nAD20\nFDE0\n2480\n29C0\n3AA0\nCDA0\nENDCHAR\nSTARTCHAR U_8789\nENCODING 34697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2520\nFA40\nAFA0\nA800\nAFE0\nF920\n25A0\n2B60\n3DA0\nEB60\nENDCHAR\nSTARTCHAR U_878A\nENCODING 34698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n27E0\n2280\nFFE0\nAAA0\nAFE0\nFAA0\n27E0\n2EC0\n3AA0\nCAA0\nENDCHAR\nSTARTCHAR U_878B\nENCODING 34699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n26E0\n24A0\nFEE0\nACA0\nAFE0\nF880\n27E0\n2A40\n3980\nCE60\nENDCHAR\nSTARTCHAR U_878C\nENCODING 34700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n7940\n6A60\nFFC0\n4980\n9660\n3FC0\n2480\n3F80\n0440\n7FC0\nENDCHAR\nSTARTCHAR U_878D\nENCODING 34701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n0080\n7BE0\n4AA0\n7AA0\n02A0\nFFE0\nD480\nFCA0\nA4E0\nAF20\nENDCHAR\nSTARTCHAR U_878E\nENCODING 34702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2000\n23C0\nFA40\nABC0\nA800\nFFE0\n26A0\n27E0\n3D20\nC560\nENDCHAR\nSTARTCHAR U_878F\nENCODING 34703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\n2400\nFD00\nADE0\nAE80\nFC80\n27E0\n2C80\n3940\nCA20\nENDCHAR\nSTARTCHAR U_8790\nENCODING 34704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2440\nFFC0\nAC00\nAFE0\nFC00\n27E0\n2AA0\n3D60\nCD40\nENDCHAR\nSTARTCHAR U_8791\nENCODING 34705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2440\nFFC0\nAC40\nAFC0\nF920\n27E0\n2900\n3A80\nCC60\nENDCHAR\nSTARTCHAR U_8792\nENCODING 34706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF940\n2220\nFC80\n8BE0\nFAA0\n8AA0\nFBE0\n2080\nF8A0\n27E0\nENDCHAR\nSTARTCHAR U_8793\nENCODING 34707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\n27C0\nFA00\nAFE0\nAA40\nFFA0\n2100\n2FE0\n3D40\nC920\nENDCHAR\nSTARTCHAR U_8794\nENCODING 34708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n28E0\nF880\nABE0\nAAA0\nABC0\nFAA0\n22E0\n2D40\n3940\nEA60\nENDCHAR\nSTARTCHAR U_8795\nENCODING 34709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FC0\nFAC0\nA940\nAAC0\nFFC0\n2900\n2DC0\n3900\nCD20\n08E0\nENDCHAR\nSTARTCHAR U_8796\nENCODING 34710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFB40\nAFE0\nAC20\nABC0\nFA40\n23C0\n2A40\n3BC0\nEA40\nENDCHAR\nSTARTCHAR U_8797\nENCODING 34711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2480\nF7E0\n94A0\n97E0\nF480\n27E0\n2A20\n3A20\nCBE0\nENDCHAR\nSTARTCHAR U_8798\nENCODING 34712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24A0\n27E0\n2000\nFFE0\nA800\nABE0\nFA20\n23E0\n2940\n3880\nCFE0\nENDCHAR\nSTARTCHAR U_8799\nENCODING 34713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0E00\n1580\n6460\n2080\nFBE0\nAAA0\nFBE0\n28A0\nFFE0\nENDCHAR\nSTARTCHAR U_879A\nENCODING 34714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n4A20\nFBE0\n4A40\n7B80\n4A20\n7FE0\n4440\n7FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_879B\nENCODING 34715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\nFCA0\nAFE0\nA880\nFBE0\n2080\n2FE0\n3A20\nCA20\n03E0\nENDCHAR\nSTARTCHAR U_879C\nENCODING 34716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2660\nFBC0\n8A40\n7180\n0660\n7FC0\n4440\n7FC0\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_879D\nENCODING 34717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\nF920\nAFE0\nA920\nFFE0\n2340\n2BA0\n3D60\nC920\n11E0\nENDCHAR\nSTARTCHAR U_879E\nENCODING 34718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2280\nFBE0\nAA80\nABE0\nFA80\n23E0\n2820\n3AA0\nCAA0\n0060\nENDCHAR\nSTARTCHAR U_879F\nENCODING 34719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2420\nFBC0\nAA40\nABC0\nFA40\n23C0\n2900\n3FE0\nCA40\n0420\nENDCHAR\nSTARTCHAR U_87A0\nENCODING 34720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2280\n2FE0\nFA80\nAC40\nA820\nFFC0\n2540\n3D40\nE540\n0FE0\nENDCHAR\nSTARTCHAR U_87A1\nENCODING 34721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\n0E00\nF1E0\n2080\nFBE0\nAAA0\nFBE0\n28A0\nFBE0\nENDCHAR\nSTARTCHAR U_87A2\nENCODING 34722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n56A0\n59C0\n9140\n2A20\nFFE0\n8420\n3F80\n2480\n3F80\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_87A3\nENCODING 34723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEA40\nA680\nBFE0\nE400\nBFE0\nAA40\nFFA0\nAA80\nAF80\nA240\nBFE0\nENDCHAR\nSTARTCHAR U_87A4\nENCODING 34724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n53E0\n22A0\n53E0\nAAA0\nFBE0\nA880\nF940\n2A20\nF420\nENDCHAR\nSTARTCHAR U_87A5\nENCODING 34725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2540\nFFE0\nA540\nA540\nFFC0\n2400\n27C0\n3A40\nCBC0\nENDCHAR\nSTARTCHAR U_87A6\nENCODING 34726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2100\nFFC0\nA900\nAFE0\nFA40\n2780\n2D60\n3D40\nCB20\nENDCHAR\nSTARTCHAR U_87A7\nENCODING 34727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n27C0\nF940\nAFE0\nAA00\nFFC0\n2220\n2BE0\n3A40\nCA40\n03C0\nENDCHAR\nSTARTCHAR U_87A8\nENCODING 34728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n2280\nFFE0\nAA80\nAFE0\nFAA0\n2BA0\n2CE0\n3920\nC860\nENDCHAR\nSTARTCHAR U_87A9\nENCODING 34729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n25E0\n2B40\nFA80\nAB60\nAA80\nFBE0\n2A80\n3BC0\n6AA0\n8880\nENDCHAR\nSTARTCHAR U_87AA\nENCODING 34730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFC40\nAA80\nAFE0\nAAA0\nFC60\n2BA0\n2AA0\n3BA0\nE860\nENDCHAR\nSTARTCHAR U_87AB\nENCODING 34731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7DE0\n1140\nFE80\n6D40\nAA20\n7FC0\n2440\n3FC0\n0440\n7FA0\nENDCHAR\nSTARTCHAR U_87AC\nENCODING 34732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2280\nFFE0\nAAA0\nAFE0\nAAA0\nFFE0\n2240\n2BC0\n3A40\nEBC0\nENDCHAR\nSTARTCHAR U_87AD\nENCODING 34733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\nA920\nAAA0\nAFE0\nF900\nAFE0\n2AA0\n3BA0\nE860\nENDCHAR\nSTARTCHAR U_87AE\nENCODING 34734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nFA80\nAFE0\nA800\nFFE0\n2920\n27C0\n3540\nCDC0\n0100\nENDCHAR\nSTARTCHAR U_87AF\nENCODING 34735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7DE0\n1340\nFC80\n2540\n4A20\nBFC0\n2440\n3FC0\n0440\n7FA0\nENDCHAR\nSTARTCHAR U_87B0\nENCODING 34736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFA80\nAFE0\nAAA0\nAFE0\nFA80\n2AA0\n2BC0\n3AA0\nEFE0\nENDCHAR\nSTARTCHAR U_87B1\nENCODING 34737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n47E0\n7D40\n5440\nD2C0\n0400\n7FC0\n4440\n7FC0\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_87B2\nENCODING 34738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n2AA0\nF440\nAFE0\nA240\nFFA0\n2100\n2FC0\n3900\nCFE0\nENDCHAR\nSTARTCHAR U_87B3\nENCODING 34739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n2340\n27E0\nFC20\nABC0\nAA40\nFBC0\n2100\n2BC0\n3900\nCFE0\nENDCHAR\nSTARTCHAR U_87B4\nENCODING 34740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\nAFE0\nC540\nA7C0\nE540\n8920\nBFE0\n2440\n3FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_87B5\nENCODING 34741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2280\n2FE0\nFAA0\nAFE0\nA800\nFBC0\n2000\n2FE0\n3D40\nCB20\nENDCHAR\nSTARTCHAR U_87B6\nENCODING 34742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4000\n7F80\n4080\n7F80\n4000\nFFE0\nAAA0\nFBE0\n28A0\nF7E0\nENDCHAR\nSTARTCHAR U_87B7\nENCODING 34743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n5240\n5240\n5FC0\n4900\n7FE0\n5240\n5FC0\n8240\nBFE0\nENDCHAR\nSTARTCHAR U_87B8\nENCODING 34744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\nB5E0\n4AA0\nFC80\n4940\n4A20\n7FC0\n4440\n7FC0\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_87B9\nENCODING 34745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22E0\n2F80\nF280\nAFE0\nAAA0\nAFA0\nFAA0\n2FA0\n2AA0\n3FA0\nEB20\nENDCHAR\nSTARTCHAR U_87BA\nENCODING 34746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n24A0\n27E0\nFCA0\nAFE0\nA940\nFF80\n2120\n2FE0\n3AC0\nCDA0\nENDCHAR\nSTARTCHAR U_87BB\nENCODING 34747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n23E0\n26A0\nFBE0\nAAA0\nAFE0\nFCA0\n27E0\n2A40\n3980\nCE60\nENDCHAR\nSTARTCHAR U_87BC\nENCODING 34748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27E0\n2280\nF900\nAFC0\nAD40\nFFE0\n2100\n2FC0\n3900\nCFE0\nENDCHAR\nSTARTCHAR U_87BD\nENCODING 34749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F80\n7900\n0F00\nF2E0\n0900\n2480\nFBE0\nAAA0\nFBE0\n28A0\nF7E0\nENDCHAR\nSTARTCHAR U_87BE\nENCODING 34750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2420\nFFE0\nA880\nABE0\nFAA0\n23E0\n2AA0\n3BE0\nCC20\nENDCHAR\nSTARTCHAR U_87BF\nENCODING 34751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57C0\n7A80\n1480\nFFE0\n5480\n9280\n7FC0\n4440\n7FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_87C0\nENCODING 34752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2120\nFEC0\nAB00\nACC0\nFBA0\n2100\n2FE0\n3900\nC900\nENDCHAR\nSTARTCHAR U_87C1\nENCODING 34753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n4080\n7FE0\n4200\n71C0\n2080\nFBE0\nAAA0\nFBE0\n28A0\nFFE0\nENDCHAR\nSTARTCHAR U_87C2\nENCODING 34754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\n2440\nFFC0\nAC40\nAFE0\nF920\n27E0\n2BA0\n3540\nC920\nENDCHAR\nSTARTCHAR U_87C3\nENCODING 34755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFBC0\nAA40\nAFE0\nAAA0\nFFE0\n2440\n2A80\n3900\nEEE0\nENDCHAR\nSTARTCHAR U_87C4\nENCODING 34756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n27C0\nFD40\n5340\nFAE0\n2420\n3F80\n2480\n3F80\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_87C5\nENCODING 34757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFA40\nAFE0\nAA40\nAA40\nFBC0\n2800\n2D40\n3AA0\nEAA0\nENDCHAR\nSTARTCHAR U_87C6\nENCODING 34758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27E0\n2280\nFBC0\nAA40\nABC0\nFA40\n27E0\n2980\n3A40\nCC20\nENDCHAR\nSTARTCHAR U_87C7\nENCODING 34759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n2A80\n2480\nFFE0\n1500\n3FC0\nE4A0\n3F80\n0440\n7FE0\nENDCHAR\nSTARTCHAR U_87C8\nENCODING 34760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2960\nFFE0\nA8A0\nAEA0\nAAE0\nFEA0\n28A0\n2F60\n38A0\nEFE0\nENDCHAR\nSTARTCHAR U_87C9\nENCODING 34761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\n25A0\nFB60\nADA0\nAB80\nFD60\n2280\n2920\n3840\nCF80\nENDCHAR\nSTARTCHAR U_87CA\nENCODING 34762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0500\nFFE0\n0A40\n7280\n2680\nFBE0\nAAA0\nFBE0\n28A0\nF7E0\nENDCHAR\nSTARTCHAR U_87CB\nENCODING 34763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2720\n2520\nFB40\nAFE0\nAB40\nFD20\n2340\n2EA0\n3A60\nC9C0\nENDCHAR\nSTARTCHAR U_87CC\nENCODING 34764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nF920\nAAE0\nADA0\nAAA0\nFFE0\n2340\n2AA0\n3E60\nE9C0\nENDCHAR\nSTARTCHAR U_87CD\nENCODING 34765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2720\n2220\n27A0\nFB20\nAEA0\nAA60\nF900\n27E0\n2B80\n3540\nC920\nENDCHAR\nSTARTCHAR U_87CE\nENCODING 34766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n27E0\n2440\nFFC0\nA900\nAFE0\nF920\n25A0\n2B60\n3DA0\nC960\nENDCHAR\nSTARTCHAR U_87CF\nENCODING 34767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n2540\nFFC0\nA940\nAFE0\nF940\n27C0\n2940\n3FC0\nC940\nENDCHAR\nSTARTCHAR U_87D0\nENCODING 34768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\n2FE0\nFAA0\nAB80\nA900\nFFC0\n2540\n2540\n3DC0\nC100\nENDCHAR\nSTARTCHAR U_87D1\nENCODING 34769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2240\nFFE0\nAA40\nABC0\nFA40\n23C0\n2880\n3FE0\nC880\nENDCHAR\nSTARTCHAR U_87D2\nENCODING 34770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27E0\n2280\nF940\nAFE0\nAA40\nFCA0\n2280\n2FE0\n3A80\nCC80\nENDCHAR\nSTARTCHAR U_87D3\nENCODING 34771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2480\nFFE0\nACA0\nAFE0\nAA20\nFDC0\n2280\n29C0\n3EA0\nE920\nENDCHAR\nSTARTCHAR U_87D4\nENCODING 34772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n22A0\n23E0\nFAA0\nABE0\nA880\nFBE0\n2080\n2FE0\n3D40\nCAA0\nENDCHAR\nSTARTCHAR U_87D5\nENCODING 34773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2BE0\n2A80\nFEE0\nAB80\nAA80\nFFC0\n2540\n2FC0\n7540\n85C0\nENDCHAR\nSTARTCHAR U_87D6\nENCODING 34774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A60\n2A80\n2F80\nFAE0\nAEA0\nAAA0\nFEA0\n2AA0\n2FA0\n7AA0\n9120\nENDCHAR\nSTARTCHAR U_87D7\nENCODING 34775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4440\nFFE0\nA4A0\n3F80\n4440\n7FC0\n0400\n7F80\n44C0\nFFA0\nENDCHAR\nSTARTCHAR U_87D8\nENCODING 34776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n22E0\nFF80\nAA40\nABE0\nAA40\nFB40\n23C0\n2A40\n3BC0\nEC60\nENDCHAR\nSTARTCHAR U_87D9\nENCODING 34777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FC0\nF5A0\nB280\nBFE0\nB080\nFEA0\n2AC0\n2EA0\n3B60\nEE20\nENDCHAR\nSTARTCHAR U_87DA\nENCODING 34778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\nFF20\n44C0\n7D20\n44C0\n2900\nFFC0\n4440\n7FC0\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_87DB\nENCODING 34779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FA0\nFA40\nAF80\nA820\nAF40\nF980\n2700\n2D20\n3A40\nEF80\nENDCHAR\nSTARTCHAR U_87DC\nENCODING 34780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2100\nFFE0\nAA40\nAE60\nABC0\nF800\n2FE0\n2AA0\n3BA0\nE860\nENDCHAR\nSTARTCHAR U_87DD\nENCODING 34781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n2280\nFDE0\nAAA0\nAEE0\nAA80\nFAE0\n2080\n2FE0\n3AC0\nECA0\nENDCHAR\nSTARTCHAR U_87DE\nENCODING 34782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\nFDE0\nA740\nB480\nED40\nAA20\n7FC0\n4440\n7FC0\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_87DF\nENCODING 34783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFD20\nABC0\nAE60\nABC0\nFA40\n23C0\n2880\n3AC0\nEDA0\nENDCHAR\nSTARTCHAR U_87E0\nENCODING 34784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n27A0\nFAA0\nAFE0\nA9C0\nAAA0\nFFE0\n22A0\n2BE0\n3AA0\nEBE0\nENDCHAR\nSTARTCHAR U_87E1\nENCODING 34785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2F20\nF940\nAFC0\nA840\nFFC0\n2840\n2FE0\n3AA0\nCD20\n1060\nENDCHAR\nSTARTCHAR U_87E2\nENCODING 34786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nF900\nABC0\nAA40\nFBC0\n2240\n2980\n3FE0\nCA40\n03C0\nENDCHAR\nSTARTCHAR U_87E3\nENCODING 34787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2BA0\n2540\nFFE0\nA940\nAFE0\nFCA0\n24C0\n2AA0\n3960\nCA20\nENDCHAR\nSTARTCHAR U_87E4\nENCODING 34788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\nA880\nAEE0\nAA80\nFFE0\n2280\n2FE0\n3A80\nEC60\nENDCHAR\nSTARTCHAR U_87E5\nENCODING 34789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n27E0\n2140\nFFE0\nA880\nABE0\nFAA0\n23E0\n2AA0\n3BE0\nCE20\nENDCHAR\nSTARTCHAR U_87E6\nENCODING 34790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n2540\nFFE0\nAC40\nAFC0\nFC40\n27C0\n2C40\n3FC0\nCC60\nENDCHAR\nSTARTCHAR U_87E7\nENCODING 34791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n25E0\n2540\nFAA0\nA800\nAFE0\nF920\n27C0\n2940\n3A40\nCCC0\nENDCHAR\nSTARTCHAR U_87E8\nENCODING 34792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA900\nFDE0\nD6A0\nFC80\n9140\nBFA0\nA480\nBF80\n8440\nFFE0\nENDCHAR\nSTARTCHAR U_87E9\nENCODING 34793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2840\nFDE0\nAAA0\nAFC0\nFA40\n2FC0\n2A40\n7AA0\n9520\nENDCHAR\nSTARTCHAR U_87EA\nENCODING 34794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\n22A0\nFBE0\nAAA0\nABE0\nF8A0\n27E0\n2B40\n3D20\nC9E0\nENDCHAR\nSTARTCHAR U_87EB\nENCODING 34795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2280\nFFE0\nAAA0\nAFE0\nFA40\n23C0\n2A40\n3FE0\nC100\n0100\nENDCHAR\nSTARTCHAR U_87EC\nENCODING 34796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n25A0\n27E0\nFBE0\nAAA0\nABE0\nFAA0\n23E0\n2880\n3FE0\nC880\nENDCHAR\nSTARTCHAR U_87ED\nENCODING 34797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n23E0\nFE80\nABE0\nAA80\nFBE0\n2280\n2BE0\n3D40\nCAA0\nENDCHAR\nSTARTCHAR U_87EE\nENCODING 34798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n27E0\n2080\nFBE0\nA880\nAFE0\nFAA0\n27E0\n2A40\n3A40\nCBC0\nENDCHAR\nSTARTCHAR U_87EF\nENCODING 34799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2100\nFFE0\nAA40\nAFE0\nFA40\n27E0\n2A80\n3AA0\nCC60\nENDCHAR\nSTARTCHAR U_87F0\nENCODING 34800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2140\nFFE0\nA940\nAFC0\nFAA0\n2920\n2FE0\n7AA0\n92A0\nENDCHAR\nSTARTCHAR U_87F1\nENCODING 34801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2400\n27E0\nFAA0\nAAA0\nAFE0\nFAA0\n2FE0\n2540\n3AA0\nCAA0\nENDCHAR\nSTARTCHAR U_87F2\nENCODING 34802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n0480\n7F40\n2080\nFBE0\nAAA0\nFBE0\n28A0\nF7E0\nENDCHAR\nSTARTCHAR U_87F3\nENCODING 34803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2020\nFFE0\nA820\nAFE0\nFAA0\n27E0\n2840\n3FE0\nC440\n02C0\nENDCHAR\nSTARTCHAR U_87F4\nENCODING 34804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n4A00\n7BE0\n4A40\nFE40\n4440\n3FC0\n2440\n3FC0\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_87F5\nENCODING 34805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n2840\nFE40\nA9E0\nAE40\nFB40\n2EC0\n2A40\n7F40\n90C0\nENDCHAR\nSTARTCHAR U_87F6\nENCODING 34806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F00\n2AE0\nFEA0\nAAA0\nAEE0\nAF00\nFFC0\n2100\n27C0\n3100\nEFE0\nENDCHAR\nSTARTCHAR U_87F7\nENCODING 34807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nFFE0\nAAA0\nAB80\nA800\nFBE0\n22A0\n2BE0\n3AA0\nEBE0\nENDCHAR\nSTARTCHAR U_87F8\nENCODING 34808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2880\nD900\n2E00\nD5C0\n2C80\nFBE0\nAAA0\nFBE0\n28A0\nFFE0\nENDCHAR\nSTARTCHAR U_87F9\nENCODING 34809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BE0\n4920\nFD60\n5480\n7FE0\n5480\nBFE0\n2440\n3FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_87FA\nENCODING 34810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\nAAA0\nAFE0\nAA40\nFBC0\n2240\n2BC0\n3800\nEFE0\nENDCHAR\nSTARTCHAR U_87FB\nENCODING 34811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27E0\nF900\nAFE0\nA900\nAFE0\nFCA0\n27E0\n2EA0\n34C0\nED20\nENDCHAR\nSTARTCHAR U_87FC\nENCODING 34812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n29E0\n7F40\nD480\n7540\n0A20\n3FC0\n2240\n3FC0\n0240\n7FA0\nENDCHAR\nSTARTCHAR U_87FD\nENCODING 34813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n25E0\n2280\nFBE0\nA940\nAE80\nFBE0\n2280\n2BE0\n3A80\nCDE0\nENDCHAR\nSTARTCHAR U_87FE\nENCODING 34814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2480\nFFE0\nAAA0\nAFE0\nA800\nFFE0\n2800\n2BE0\n3A20\nEBE0\nENDCHAR\nSTARTCHAR U_87FF\nENCODING 34815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\nA940\nFA60\nA9C0\nFC80\nAD40\nFFC0\n4440\n7FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_8800\nENCODING 34816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n25E0\nFAA0\nAC80\nA940\nFFC0\n2540\n26C0\n3D40\nC7C0\n0C60\nENDCHAR\nSTARTCHAR U_8801\nENCODING 34817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\nAAA0\n5EC0\nEAA0\n2EE0\nCA80\n7FC0\n4440\n7FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_8802\nENCODING 34818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\nF540\nAFE0\nA540\nFFE0\n2100\n2FE0\n3380\nD540\n0920\nENDCHAR\nSTARTCHAR U_8803\nENCODING 34819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4000\n7F80\n2080\nFFC0\nA540\nFF40\nB5C0\nFF40\nA540\nAE60\nENDCHAR\nSTARTCHAR U_8804\nENCODING 34820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n2540\nFFE0\nAD40\nF6C0\n2FE0\n2920\n3AA0\nCFA0\n0860\nENDCHAR\nSTARTCHAR U_8805\nENCODING 34821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFEE0\nAA80\nAEE0\nFAA0\n2EE0\n2AA0\n3EE0\nCA80\n03E0\nENDCHAR\nSTARTCHAR U_8806\nENCODING 34822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n7FC0\n4440\nFFE0\n8420\nFFE0\n4440\n7FC0\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_8807\nENCODING 34823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nF900\nAFC0\nAD40\nFFC0\n2540\n2FE0\n3AA0\nCFA0\n0860\nENDCHAR\nSTARTCHAR U_8808\nENCODING 34824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF140\n9FE0\nF4A0\n9FC0\nF4A0\n5560\nBFC0\n2440\n3FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_8809\nENCODING 34825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFFE0\nA800\nAFE0\nFC40\n27C0\n2280\n36A0\nDA40\n0320\nENDCHAR\nSTARTCHAR U_880A\nENCODING 34826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFA40\nAFE0\nAAA0\nFFE0\n2AA0\n2FE0\n3A80\nCEC0\n12A0\nENDCHAR\nSTARTCHAR U_880B\nENCODING 34827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\n2FE0\nFA00\nAFE0\nA920\nFFE0\n2560\n2FE0\n3920\nCFE0\nENDCHAR\nSTARTCHAR U_880C\nENCODING 34828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2AA0\nFFE0\nA900\nAFE0\nFA80\n2100\n2FC0\n3100\nCFE0\n0100\nENDCHAR\nSTARTCHAR U_880D\nENCODING 34829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F00\n2980\nFFE0\nA920\nAF40\nA440\nFF40\n2B40\n2940\n3DA0\nCB20\nENDCHAR\nSTARTCHAR U_880E\nENCODING 34830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n2FE0\n2100\nFFE0\nAA80\nFD40\n2BA0\n2540\n3FE0\nC440\n0840\nENDCHAR\nSTARTCHAR U_880F\nENCODING 34831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n4FE0\nF2A0\nDF60\nD540\nFFE0\n5540\n5FE0\n7540\n9540\n2340\nENDCHAR\nSTARTCHAR U_8810\nENCODING 34832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\nAB40\nAD60\nF900\n2440\n27C0\n3440\nC7C0\n0840\nENDCHAR\nSTARTCHAR U_8811\nENCODING 34833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2560\nFD40\nAB40\nACA0\nFFE0\n2120\n2FE0\n3B80\nC540\n0920\nENDCHAR\nSTARTCHAR U_8812\nENCODING 34834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2480\nFFE0\n6EC0\n5540\n6EC0\n3F80\n2480\n3F80\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_8813\nENCODING 34835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27E0\nFA80\nAFE0\nA820\nAFE0\nFAA0\n25C0\n2AA0\n39A0\nEE80\nENDCHAR\nSTARTCHAR U_8814\nENCODING 34836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFA40\nAFE0\nA820\nAFC0\nFD20\n22C0\n2D80\n3AC0\nED20\nENDCHAR\nSTARTCHAR U_8815\nENCODING 34837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\n27E0\nFD20\nAB40\nAD20\nFFE0\n2100\n2FE0\n3AA0\nCAA0\nENDCHAR\nSTARTCHAR U_8816\nENCODING 34838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nFA80\nAFE0\nAA80\nABE0\nFA80\n27E0\n2A40\n3980\nEE60\nENDCHAR\nSTARTCHAR U_8817\nENCODING 34839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n25A0\nFB60\nADA0\nAFE0\nAC80\nFFE0\n2480\n27E0\n3C80\nE7E0\nENDCHAR\nSTARTCHAR U_8818\nENCODING 34840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27C0\nFAA0\nAFE0\nAA80\nFFA0\n2AA0\n2FC0\n3AA0\nCF60\n0820\nENDCHAR\nSTARTCHAR U_8819\nENCODING 34841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\nFC20\nABE0\nAC80\nABC0\nFE40\n23C0\n2A40\n3BC0\nEE60\nENDCHAR\nSTARTCHAR U_881A\nENCODING 34842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\nFFE0\n3080\nD080\n7FE0\n56A0\n7FE0\n14A0\nFFE0\nENDCHAR\nSTARTCHAR U_881B\nENCODING 34843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n27E0\nFA80\nAFE0\nAAA0\nAFE0\nF940\n27E0\n24A0\n3640\nC9A0\nENDCHAR\nSTARTCHAR U_881C\nENCODING 34844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\nF5E0\n4A40\nE4E0\n5B40\n4440\nFFE0\n64C0\nBFA0\n0440\n7FA0\nENDCHAR\nSTARTCHAR U_881D\nENCODING 34845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\nFFC0\nAD40\nAFC0\nA800\nFFE0\n2AA0\n2FE0\n3AA0\nEFE0\nENDCHAR\nSTARTCHAR U_881E\nENCODING 34846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n9480\n79E0\n4920\n7960\n5500\n7FC0\n4440\n7FC0\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_881F\nENCODING 34847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n2540\nFAA0\nAFE0\nAAA0\nAFE0\nFD20\n2BA0\n2D60\n3BA0\nED20\nENDCHAR\nSTARTCHAR U_8820\nENCODING 34848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n7FC0\n5140\n5F40\n7FC0\nFBE0\nAAA0\nFBE0\n28A0\nF7E0\nENDCHAR\nSTARTCHAR U_8821\nENCODING 34849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F80\n1100\nFFE0\n1500\nEAE0\n3680\nFBE0\nAAA0\nFBE0\n28A0\nF7E0\nENDCHAR\nSTARTCHAR U_8822\nENCODING 34850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n3180\nDF60\n1100\nFFE0\nAAA0\nFBE0\n28A0\nF7E0\nENDCHAR\nSTARTCHAR U_8823\nENCODING 34851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2A40\nFFE0\nA940\nAFC0\nA940\nFFE0\n2D20\n3DA0\nD760\n2420\nENDCHAR\nSTARTCHAR U_8824\nENCODING 34852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n4A40\n71C0\n5F40\n4040\nFFE0\nAAA0\nFBE0\n28A0\nF7E0\nENDCHAR\nSTARTCHAR U_8825\nENCODING 34853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAFE0\nFA80\n57E0\nD100\n7FC0\n4900\n7FC0\n4440\n7FC0\n0440\nFFE0\nENDCHAR\nSTARTCHAR U_8826\nENCODING 34854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2100\nFFE0\nA920\nAFC0\nA920\nFFE0\n2940\n2FE0\n3AA0\nEFE0\nENDCHAR\nSTARTCHAR U_8827\nENCODING 34855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\nFFE0\n9020\n7F80\n2080\nFFC0\nAD40\nFFC0\n2520\nFFE0\nENDCHAR\nSTARTCHAR U_8828\nENCODING 34856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\nFA80\nAFE0\nA940\nAFC0\nFAA0\n2FE0\n28A0\n2EE0\nFAA0\nENDCHAR\nSTARTCHAR U_8829\nENCODING 34857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24A0\n2FE0\nF0A0\nBFE0\nB040\nBE80\nF1E0\n2EA0\n2AE0\n3EA0\nEAE0\nENDCHAR\nSTARTCHAR U_882A\nENCODING 34858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n2A00\nFFE0\n4A00\n7BE0\n4A20\n7FE0\n4440\n7FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_882B\nENCODING 34859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1840\n6D40\nF940\n5540\nA540\n48C0\nFBE0\nAAA0\nFBE0\n28A0\nF7E0\nENDCHAR\nSTARTCHAR U_882C\nENCODING 34860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n2F80\nFAE0\nBF20\nB0E0\nBE80\nFAE0\n2E80\n2AE0\n3EA0\nEAE0\nENDCHAR\nSTARTCHAR U_882D\nENCODING 34861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F80\nD880\n4700\n5AC0\n4F80\nA200\nFFC0\nAD40\nFFC0\n2920\nFFE0\nENDCHAR\nSTARTCHAR U_882E\nENCODING 34862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n28A0\nFFE0\nAAA0\nAF40\nA9A0\nFFE0\n25A0\n2B60\n3DA0\nEB60\nENDCHAR\nSTARTCHAR U_882F\nENCODING 34863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA440\nBFC0\nA440\nFFE0\n9080\nFFE0\nD6A0\nFFE0\n94A0\nFBE0\nENDCHAR\nSTARTCHAR U_8830\nENCODING 34864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\nFAA0\nAEE0\nAA80\nAFE0\nFA80\n2FE0\n26A0\n3A40\nEB20\nENDCHAR\nSTARTCHAR U_8831\nENCODING 34865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n0440\nFFE0\nAAA0\nFBE0\n28A0\nFFE0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_8832\nENCODING 34866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n2AA0\nFFE0\n2900\n53E0\n88A0\nFBE0\nAAA0\nABE0\nFCA0\n03E0\nENDCHAR\nSTARTCHAR U_8833\nENCODING 34867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\nAAA0\nAEE0\nAA40\nFCA0\n2FE0\n2940\n3980\nEE60\nENDCHAR\nSTARTCHAR U_8834\nENCODING 34868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2FE0\n2480\nFFE0\nAAA0\nFFE0\n2940\n3FE0\nC540\n1CC0\n07C0\nENDCHAR\nSTARTCHAR U_8835\nENCODING 34869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n2520\nFFE0\nA900\nAFE0\nA900\nFFE0\n2AA0\n2FE0\n3AA0\nEBA0\nENDCHAR\nSTARTCHAR U_8836\nENCODING 34870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA280\nFBE0\n5140\nBFE0\n2040\nFFE0\nAAA0\nFBE0\n28A0\nF7E0\nENDCHAR\nSTARTCHAR U_8837\nENCODING 34871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFEE0\nAAA0\nAEE0\nA900\nFFE0\n2900\n2FE0\n3900\nEFE0\nENDCHAR\nSTARTCHAR U_8838\nENCODING 34872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2240\nFEE0\nAAA0\nAFE0\nA480\nFFE0\n2480\n27E0\n3C80\nC7E0\nENDCHAR\nSTARTCHAR U_8839\nENCODING 34873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2480\nFFE0\n90A0\nBFA0\n5080\nFFE0\nAAA0\nFBE0\n28A0\nF7E0\nENDCHAR\nSTARTCHAR U_883A\nENCODING 34874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n2080\nFFE0\n4940\nBFA0\n2480\nFBE0\nAAA0\nFBE0\n24A0\nFFE0\nENDCHAR\nSTARTCHAR U_883B\nENCODING 34875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nEEE0\n4040\nEEE0\n5AA0\nAF40\n7FC0\n4440\n7FC0\n0440\nFFA0\nENDCHAR\nSTARTCHAR U_883C\nENCODING 34876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\nFAA0\nAFE0\nA480\nFFE0\n2880\n2FE0\n3240\nC980\n0660\nENDCHAR\nSTARTCHAR U_883D\nENCODING 34877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6940\nA520\n3FE0\nD140\n7C80\n5160\nFFE0\nAAA0\nFBE0\n28A0\nFFE0\nENDCHAR\nSTARTCHAR U_883E\nENCODING 34878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2820\nFFE0\nAD40\nAFE0\nFAA0\n2BE0\n2D20\n3BA0\nC920\n17E0\nENDCHAR\nSTARTCHAR U_883F\nENCODING 34879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5520\n2AA0\nFFE0\n2AA0\n5520\n2AA0\nFFE0\nAAA0\nFBE0\n28A0\nFFE0\nENDCHAR\nSTARTCHAR U_8840\nENCODING 34880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1000\n7FC0\n4A40\n4A40\n4A40\n4A40\n4A40\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_8841\nENCODING 34881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\n2000\n2000\n3FC0\n0400\n7FC0\n4A40\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_8842\nENCODING 34882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n47E0\nF920\nA920\nAB20\nAD20\nA920\nBD20\nC220\n02A0\n0440\nENDCHAR\nSTARTCHAR U_8843\nENCODING 34883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n4080\nF880\nA880\nA9C0\nAAA0\nACA0\nA880\nBC80\nC080\n0080\nENDCHAR\nSTARTCHAR U_8844\nENCODING 34884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n4140\nF940\nA940\nA940\nABC0\nA940\nA940\nBD40\nC140\n07E0\nENDCHAR\nSTARTCHAR U_8845\nENCODING 34885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n44A0\nFAC0\nA880\nABE0\nA880\nABE0\nA880\nBC80\nC080\n0080\nENDCHAR\nSTARTCHAR U_8846\nENCODING 34886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3FC0\n2A40\nFFE0\n0380\n7C40\n2680\n5500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_8847\nENCODING 34887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n4700\nFCC0\nAD00\nAD40\nAD60\nAD40\nBD40\nC5A0\n0920\n1000\nENDCHAR\nSTARTCHAR U_8848\nENCODING 34888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n4240\nFA40\nABC0\nAA40\nABC0\nAA40\nAA60\nBFC0\nC040\n0040\nENDCHAR\nSTARTCHAR U_8849\nENCODING 34889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n4200\nFBC0\nAE40\nA980\nA980\nAA40\nAFE0\nBA40\nC3C0\n0240\nENDCHAR\nSTARTCHAR U_884A\nENCODING 34890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n47E0\nFA80\nAFE0\nAAA0\nAFE0\nA940\nAFE0\nAD40\nFAA0\n0B60\nENDCHAR\nSTARTCHAR U_884B\nENCODING 34891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n7FE0\n0440\nFFE0\n2480\n5540\n75C0\n5540\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_884C\nENCODING 34892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n4000\n8000\n1000\n2FE0\n6080\nA080\n2080\n2080\n2080\n2380\nENDCHAR\nSTARTCHAR U_884D\nENCODING 34893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n25E0\n4000\n9000\n2BE0\n6240\nA440\n2C40\n2440\n2440\n25C0\nENDCHAR\nSTARTCHAR U_884E\nENCODING 34894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n4E00\n8400\n1400\n3EE0\n6440\nA440\n2440\n2440\n2540\n2480\nENDCHAR\nSTARTCHAR U_884F\nENCODING 34895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2EE0\n4000\nA000\n5EE0\nCA40\n4A40\n4A40\n5340\n6240\n40C0\nENDCHAR\nSTARTCHAR U_8850\nENCODING 34896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2EE0\n4800\nA9E0\n4E40\nCA40\n4A40\n4E40\n4840\n4E40\n40C0\nENDCHAR\nSTARTCHAR U_8851\nENCODING 34897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n29E0\n5400\nB3E0\n4840\nDE40\n4240\n5440\n4840\n4540\n4080\nENDCHAR\nSTARTCHAR U_8852\nENCODING 34898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n2200\n4F00\nA4E0\n2940\n5E40\nC240\n4440\n4940\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_8853\nENCODING 34899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n4DE0\n8A00\n3E00\n49E0\nDC40\n5A40\n6A40\n4840\n4840\n49C0\nENDCHAR\nSTARTCHAR U_8854\nENCODING 34900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n48E0\n4E00\nB000\n2EE0\n4440\nDF40\n4440\n4440\n4640\n4440\n40C0\nENDCHAR\nSTARTCHAR U_8855\nENCODING 34901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n5F00\n9100\n3DE0\n5140\nDD40\n5540\n5540\n5D40\n5140\n52C0\nENDCHAR\nSTARTCHAR U_8856\nENCODING 34902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AE0\n4A00\n9F00\n2AE0\n4A40\nCA40\n5F40\n4040\n4A40\n5140\n6080\nENDCHAR\nSTARTCHAR U_8857\nENCODING 34903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n5E00\n8400\n3F00\n44E0\nC440\n5F40\n4440\n4740\n5C40\n40C0\nENDCHAR\nSTARTCHAR U_8858\nENCODING 34904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n2EE0\n5400\nA400\n5EE0\nC440\n5740\n5440\n5740\n7840\n40C0\nENDCHAR\nSTARTCHAR U_8859\nENCODING 34905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3EE0\n4400\n9E00\n2AE0\n4A40\nDF40\n4040\n5E40\n5240\n5E40\n52C0\nENDCHAR\nSTARTCHAR U_885A\nENCODING 34906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37E0\n5500\n9500\n3FE0\n5540\nFD40\n6F40\n6D40\n7D40\n4540\n4BC0\nENDCHAR\nSTARTCHAR U_885B\nENCODING 34907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n28E0\n5E00\n8A00\n3FE0\n5240\nDE40\n4440\n5F40\n5440\n7F40\n44C0\nENDCHAR\nSTARTCHAR U_885C\nENCODING 34908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5200\n4CE0\nBE00\n49E0\nDE40\n5A40\n5640\n5A40\n5640\n5F40\n4080\nENDCHAR\nSTARTCHAR U_885D\nENCODING 34909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3EE0\n4400\n9F00\n35E0\n5F40\nD540\n5F40\n4440\n4E40\n4440\n5FC0\nENDCHAR\nSTARTCHAR U_885E\nENCODING 34910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n3FE0\n4500\nBFE0\n5140\nDF40\n4440\n5F40\n5540\n5540\n44C0\nENDCHAR\nSTARTCHAR U_885F\nENCODING 34911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A00\n34E0\n4A00\nA000\n5FE0\nC840\n5E40\n5240\n5E40\n5240\n5EC0\nENDCHAR\nSTARTCHAR U_8860\nENCODING 34912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n3EE0\n4800\nBFE0\n5240\nDE40\n5240\n5E40\n5240\n7F40\n52C0\nENDCHAR\nSTARTCHAR U_8861\nENCODING 34913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n5400\n9F00\n35E0\n5F40\nD540\n5F40\n4440\n5F40\n4A40\n51C0\nENDCHAR\nSTARTCHAR U_8862\nENCODING 34914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n5500\n9F00\n35E0\n5F40\n5240\nFF40\n5240\n5F40\n5240\n5FC0\nENDCHAR\nSTARTCHAR U_8863\nENCODING 34915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0200\nFFE0\n0400\n0A40\n1280\n3100\n5100\n9480\n1840\n1020\nENDCHAR\nSTARTCHAR U_8864\nENCODING 34916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\n1F00\n0200\n0500\n0E00\n1500\n0500\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_8865\nENCODING 34917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF900\n1100\n2980\n7160\nA920\n2900\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_8866\nENCODING 34918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\nF900\n1100\n2900\n77E0\nA900\n2900\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_8867\nENCODING 34919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n2080\nF880\n1080\n2FE0\n7080\nA880\n2880\n2080\n2280\n2100\nENDCHAR\nSTARTCHAR U_8868\nENCODING 34920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n3F80\n0400\nFFE0\n0A40\n1280\n3100\nD480\n1860\nENDCHAR\nSTARTCHAR U_8869\nENCODING 34921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2FE0\nFD40\n1540\n2A40\n7280\nAA80\n2900\n2280\n2460\n2820\nENDCHAR\nSTARTCHAR U_886A\nENCODING 34922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2280\nFAA0\n12E0\n2FA0\n72A0\nAAA0\n2AC0\n2280\n2220\n21E0\nENDCHAR\nSTARTCHAR U_886B\nENCODING 34923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2080\nFB00\n1020\n2840\n7080\nAB00\n2820\n2040\n2180\n2600\nENDCHAR\nSTARTCHAR U_886C\nENCODING 34924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2040\nFFE0\n1040\n2A40\n7140\nA940\n2840\n2040\n2040\n21C0\nENDCHAR\nSTARTCHAR U_886D\nENCODING 34925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFC0\n1100\n2900\n77E0\nA900\n2900\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_886E\nENCODING 34926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1080\n2440\n48A0\n3F00\n0C40\n3280\nD100\n14E0\n1840\nENDCHAR\nSTARTCHAR U_886F\nENCODING 34927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2280\nF440\n1440\n2820\n77C0\nA940\n2940\n2240\n2440\n2980\nENDCHAR\nSTARTCHAR U_8870\nENCODING 34928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n3F80\n2080\nFFE0\n2080\n3FA0\n1240\n3180\nD480\n1860\nENDCHAR\nSTARTCHAR U_8871\nENCODING 34929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2240\nFA80\n12E0\n2A40\n7240\nAA40\n2B40\n2480\n2940\n3220\nENDCHAR\nSTARTCHAR U_8872\nENCODING 34930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFE0\n1520\n2D20\n75A0\nB660\n2C20\n2420\n2420\n2460\nENDCHAR\nSTARTCHAR U_8873\nENCODING 34931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2280\nF280\n1440\n2540\n2920\n7200\nAA00\n2440\n2FE0\n2420\nENDCHAR\nSTARTCHAR U_8874\nENCODING 34932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFE0\n1520\n2900\n7180\nA980\n2A80\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_8875\nENCODING 34933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n23E0\nFA20\n1220\n2A20\n73E0\nAA20\n2A20\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_8876\nENCODING 34934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2080\nFFE0\n14A0\n2CA0\n74A0\nAFE0\n24A0\n2080\n2080\n2080\nENDCHAR\nSTARTCHAR U_8877\nENCODING 34935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n4440\n7FC0\n0A20\n1140\n3080\nD440\n1820\nENDCHAR\nSTARTCHAR U_8878\nENCODING 34936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF280\n1240\n2420\n6A40\nB240\n2A40\n2A40\n2240\n2440\nENDCHAR\nSTARTCHAR U_8879\nENCODING 34937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4020\n27C0\nFC80\n1480\n2FE0\n7480\nAC80\n2C80\n24A0\n2560\n2620\nENDCHAR\nSTARTCHAR U_887A\nENCODING 34938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0000\n7FC0\n4200\n7FC0\n1240\nE680\n1B00\n6880\n0E60\nENDCHAR\nSTARTCHAR U_887B\nENCODING 34939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\nFC40\n1440\n2FE0\n7440\nAFE0\n2C40\n2440\n2440\n24C0\nENDCHAR\nSTARTCHAR U_887C\nENCODING 34940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2080\nFFE0\n1080\n2880\n73E0\nA940\n2940\n2080\n2140\n2620\nENDCHAR\nSTARTCHAR U_887D\nENCODING 34941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4020\n27C0\nF900\n1100\n2900\n77E0\nA900\n2900\n2100\n2100\n27E0\nENDCHAR\nSTARTCHAR U_887E\nENCODING 34942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n1500\n2480\nDF60\n0900\n0600\nFFE0\n1440\n3280\nD500\n18E0\nENDCHAR\nSTARTCHAR U_887F\nENCODING 34943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFA80\n1640\n2920\n7000\nAFE0\n2840\n2080\n2080\n2100\nENDCHAR\nSTARTCHAR U_8880\nENCODING 34944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nFBE0\n1420\n2120\n28A0\n7020\nA8A0\n2320\n2020\n20C0\nENDCHAR\nSTARTCHAR U_8881\nENCODING 34945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\nFFE0\n2080\n3F80\n0C40\n1280\n3100\nD480\n1860\nENDCHAR\nSTARTCHAR U_8882\nENCODING 34946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFC0\n1140\n2140\n2FE0\n7100\nA900\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_8883\nENCODING 34947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\nF920\n4120\n5A20\n6460\n0400\nFFE0\n1240\n3180\nD480\n1860\nENDCHAR\nSTARTCHAR U_8884\nENCODING 34948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2700\nF900\n1100\n27E0\n2900\n7100\nA900\n2280\n2460\n2820\nENDCHAR\nSTARTCHAR U_8885\nENCODING 34949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7F80\n4880\n4500\n7FE0\n0440\nFFE0\n0A40\n3180\nD480\n1860\nENDCHAR\nSTARTCHAR U_8886\nENCODING 34950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27E0\nF900\n17C0\n2900\n77E0\nA920\n2920\n21A0\n2140\n2100\nENDCHAR\nSTARTCHAR U_8887\nENCODING 34951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nF640\n1540\n2D40\n77E0\nAC40\n2440\n2440\n2440\n28C0\nENDCHAR\nSTARTCHAR U_8888\nENCODING 34952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n2A40\n4BC0\n9400\n0200\nFFE0\n1240\n3180\nD480\n1860\nENDCHAR\nSTARTCHAR U_8889\nENCODING 34953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2080\nFFE0\n1420\n2200\n2A40\n7380\nAA00\n2220\n2220\n21E0\nENDCHAR\nSTARTCHAR U_888A\nENCODING 34954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF280\n1440\n2920\n7100\nAFE0\n2040\n2280\n2100\n2080\nENDCHAR\nSTARTCHAR U_888B\nENCODING 34955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n2240\n7FE0\nA100\n24A0\n2260\nFFE0\n1240\n3180\nD480\n1860\nENDCHAR\nSTARTCHAR U_888C\nENCODING 34956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2000\n3F80\n4280\nBE80\n2120\n3FE0\n3240\nD580\n18E0\nENDCHAR\nSTARTCHAR U_888D\nENCODING 34957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\nFC20\n13A0\n22A0\n2AA0\n73A0\nAA40\n2220\n2220\n21E0\nENDCHAR\nSTARTCHAR U_888E\nENCODING 34958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2480\nF5E0\n14A0\n2AA0\n2EA0\n74A0\nAAA0\n2FA0\n2120\n22C0\nENDCHAR\nSTARTCHAR U_888F\nENCODING 34959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF7E0\n1100\n2200\n2BE0\n7480\nA880\n3080\n27E0\n2000\nENDCHAR\nSTARTCHAR U_8890\nENCODING 34960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2080\nF2A0\n1220\n2A40\n6A80\nB340\n2A20\n2640\n2A40\n33C0\nENDCHAR\nSTARTCHAR U_8891\nENCODING 34961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2120\nF920\n1220\n24E0\n2840\n77E0\nAC20\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_8892\nENCODING 34962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2240\nFA40\n1240\n2BC0\n7240\nAA40\n2BC0\n2240\n2000\n2FE0\nENDCHAR\nSTARTCHAR U_8893\nENCODING 34963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2240\nFA40\n1240\n2BC0\n7240\nAA40\n2BC0\n2240\n2240\n2FE0\nENDCHAR\nSTARTCHAR U_8894\nENCODING 34964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27E0\nF040\n1040\n2740\n2D40\n7540\nAF40\n2840\n2040\n20C0\nENDCHAR\nSTARTCHAR U_8895\nENCODING 34965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2080\nFFE0\n1420\n2880\n7280\nAA80\n2A40\n2440\n2420\n2820\nENDCHAR\nSTARTCHAR U_8896\nENCODING 34966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF900\n17E0\n2D20\n7520\nAFE0\n2D20\n2520\n27E0\n2420\nENDCHAR\nSTARTCHAR U_8897\nENCODING 34967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\nFC40\n1120\n2A00\n7480\nA920\n2A40\n2080\n2100\n2600\nENDCHAR\nSTARTCHAR U_8898\nENCODING 34968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\nFC80\n12A0\n2AE0\n77A0\nAAA0\n2AC0\n22A0\n2220\n21E0\nENDCHAR\nSTARTCHAR U_8899\nENCODING 34969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4180\n2100\nFBE0\n1220\n2A20\n7220\nABE0\n2A20\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_889A\nENCODING 34970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2240\nFFE0\n1200\n2A00\n73C0\nAA40\n2540\n2480\n2940\n3220\nENDCHAR\nSTARTCHAR U_889B\nENCODING 34971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4460\n2780\nFC80\n1480\n2FE0\n7480\nAC80\n2CA0\n2560\n2720\n24A0\nENDCHAR\nSTARTCHAR U_889C\nENCODING 34972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFE0\n1100\n2FC0\n7100\nA980\n2B40\n2520\n2920\n3100\nENDCHAR\nSTARTCHAR U_889D\nENCODING 34973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n2240\nF440\n17E0\n2440\n6E40\nB540\n2D40\n2440\n2540\n2480\nENDCHAR\nSTARTCHAR U_889E\nENCODING 34974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2080\n7FC0\nA0A0\n3F80\n0C40\n3280\nD100\n1480\n1860\nENDCHAR\nSTARTCHAR U_889F\nENCODING 34975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2500\nFFC0\n1100\n2900\n77E0\nA900\n2900\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_88A0\nENCODING 34976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2400\n3F80\n4400\nFFE0\n2080\nCC60\n1A80\nE980\n0C60\nENDCHAR\nSTARTCHAR U_88A1\nENCODING 34977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFC0\n1540\n2FC0\n7540\nAFE0\n2C40\n2440\n2440\n24C0\nENDCHAR\nSTARTCHAR U_88A2\nENCODING 34978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2520\nFB40\n1100\n2FE0\n7100\nA900\n2FE0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_88A3\nENCODING 34979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n2540\nF540\n1FE0\n2540\n6D40\nB540\n2DC0\n2400\n27E0\n2000\nENDCHAR\nSTARTCHAR U_88A4\nENCODING 34980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n0A00\n7FC0\n0A40\nF200\n0640\n1980\nE880\n0C60\nENDCHAR\nSTARTCHAR U_88A5\nENCODING 34981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\nF200\n1200\n2400\n6FC0\nB440\n2C40\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_88A6\nENCODING 34982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF520\n1520\n27E0\n7100\nA900\n2520\n2520\n2520\n27E0\nENDCHAR\nSTARTCHAR U_88A7\nENCODING 34983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\nFC20\n1020\n2BA0\n72A0\nAAA0\n2BA0\n2020\n20A0\n2040\nENDCHAR\nSTARTCHAR U_88A8\nENCODING 34984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n2100\nFFE0\n1100\n2A40\n7780\nA880\n2900\n2240\n2FA0\n2420\nENDCHAR\nSTARTCHAR U_88A9\nENCODING 34985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF1E0\n1100\n2900\n77C0\nAC40\n2440\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_88AA\nENCODING 34986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFE0\n1100\n2900\n77E0\nA900\n2A00\n2440\n2FA0\n2420\nENDCHAR\nSTARTCHAR U_88AB\nENCODING 34987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2080\nFFE0\n14A0\n2C80\n77E0\nAD40\n2540\n2480\n2940\n3620\nENDCHAR\nSTARTCHAR U_88AC\nENCODING 34988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1080\n7FC0\n0040\n3F80\n2080\n3F80\n1240\n3580\nD8E0\nENDCHAR\nSTARTCHAR U_88AD\nENCODING 34989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nFFE0\n0A80\n1320\n6DE0\n0400\nFFE0\n1240\n3280\nD900\n10E0\nENDCHAR\nSTARTCHAR U_88AE\nENCODING 34990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nF7E0\n1400\n2900\n7100\nAD40\n2520\n2920\n2100\n2300\nENDCHAR\nSTARTCHAR U_88AF\nENCODING 34991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2540\nF520\n17E0\n2900\n73C0\nAA40\n2540\n2480\n2940\n2220\nENDCHAR\nSTARTCHAR U_88B0\nENCODING 34992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2440\nFFE0\n2240\n3FE0\n0440\nFFE0\n0A80\n3100\nD4E0\n1840\nENDCHAR\nSTARTCHAR U_88B1\nENCODING 34993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n22C0\nF4A0\n1480\n27E0\n6C80\nB480\n2C80\n2540\n2540\n2620\nENDCHAR\nSTARTCHAR U_88B2\nENCODING 34994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n3100\n0E00\n77C0\n1880\n0500\n7E40\n3280\nD100\n18E0\nENDCHAR\nSTARTCHAR U_88B3\nENCODING 34995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n23E0\nF220\n1540\n2880\n73E0\nAD20\n2AA0\n2040\n2180\n2600\nENDCHAR\nSTARTCHAR U_88B4\nENCODING 34996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF280\n17C0\n2820\n77C0\nAA00\n23C0\n2040\n2140\n2080\nENDCHAR\nSTARTCHAR U_88B5\nENCODING 34997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2260\nF380\n1480\n2C80\n77E0\nAC80\n2480\n2480\n2480\n27E0\nENDCHAR\nSTARTCHAR U_88B6\nENCODING 34998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\nFE40\n1180\n2E60\n7080\nAFE0\n2C80\n27E0\n2080\n2080\nENDCHAR\nSTARTCHAR U_88B7\nENCODING 34999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2180\nFA40\n1420\n2BC0\n7000\nABE0\n2A20\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_88B8\nENCODING 35000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27E0\nFA00\n13E0\n2A40\n7480\nAFE0\n2480\n2480\n2480\n2580\nENDCHAR\nSTARTCHAR U_88B9\nENCODING 35001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2080\nF900\n13E0\n2A20\n7220\nABE0\n2A20\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_88BA\nENCODING 35002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2080\nFFE0\n1080\n2BE0\n7000\nABE0\n2A20\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_88BB\nENCODING 35003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\nF200\n1FE0\n2AA0\n7AA0\nAAA0\n3AA0\n2AA0\n2860\n2000\nENDCHAR\nSTARTCHAR U_88BC\nENCODING 35004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\nF440\n1A40\n2980\n7240\nAC20\n2BC0\n2240\n2240\n23C0\nENDCHAR\nSTARTCHAR U_88BD\nENCODING 35005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n24E0\nFFA0\n1AA0\n2AA0\n2AA0\n7AA0\nAAA0\n24A0\n2AE0\n31A0\nENDCHAR\nSTARTCHAR U_88BE\nENCODING 35006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2500\nFFC0\n1500\n2900\n77E0\nA900\n2B80\n2540\n2920\n2100\nENDCHAR\nSTARTCHAR U_88BF\nENCODING 35007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF7C0\n1100\n2FE0\n7100\nA900\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_88C0\nENCODING 35008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2420\nFD20\n17E0\n2D20\n7520\nADA0\n2660\n2420\n27E0\n2420\nENDCHAR\nSTARTCHAR U_88C1\nENCODING 35009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7D40\n1120\nFFE0\n1100\nFF20\n2540\n7880\nA5A0\n3260\n2420\nENDCHAR\nSTARTCHAR U_88C2\nENCODING 35010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC20\n2120\n7D20\nA920\n10E0\n2400\nFFE0\n1220\n3140\nD480\n1860\nENDCHAR\nSTARTCHAR U_88C3\nENCODING 35011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23C0\nF200\n17E0\n2800\n77E0\nAA00\n2280\n2240\n2240\n2200\nENDCHAR\nSTARTCHAR U_88C4\nENCODING 35012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n22E0\nF400\n1A00\n25E0\n2C40\n7440\nAC40\n2440\n2440\n24C0\nENDCHAR\nSTARTCHAR U_88C5\nENCODING 35013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n9FE0\n5100\n3100\nD7C0\n1200\nFFE0\n0C40\n3280\nD100\n18E0\nENDCHAR\nSTARTCHAR U_88C6\nENCODING 35014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2520\nFD40\n1100\n2FE0\n7020\nA820\n2FE0\n2020\n27E0\n2020\nENDCHAR\nSTARTCHAR U_88C7\nENCODING 35015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2200\nFFE0\n1AA0\n2AA0\n7AA0\nAAA0\n3AA0\n2AA0\n3FE0\n2000\nENDCHAR\nSTARTCHAR U_88C8\nENCODING 35016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2420\nF900\n17C0\n2B00\n7500\nAFC0\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_88C9\nENCODING 35017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nFFC0\n1440\n2FC0\n7500\nAD20\n24C0\n2480\n2640\n2420\nENDCHAR\nSTARTCHAR U_88CA\nENCODING 35018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3F00\n2100\n3F00\n2100\n3FE0\n0820\nFFE0\n3500\nD200\n19C0\nENDCHAR\nSTARTCHAR U_88CB\nENCODING 35019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27E0\nF800\n13C0\n2A40\n7240\nABC0\n2000\n2240\n2080\n2FE0\nENDCHAR\nSTARTCHAR U_88CC\nENCODING 35020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFE0\n1100\n2D40\n7540\nABA0\n2100\n2280\n2440\n2820\nENDCHAR\nSTARTCHAR U_88CD\nENCODING 35021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2420\nFCA0\n17E0\n2CA0\n74E0\nADA0\n26A0\n24A0\n27E0\n2420\nENDCHAR\nSTARTCHAR U_88CE\nENCODING 35022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nFC40\n17C0\n2800\n77E0\nA900\n27C0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_88CF\nENCODING 35023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n3F80\n2480\n7FC0\n0400\nFFE0\n3280\nD500\n18E0\nENDCHAR\nSTARTCHAR U_88D0\nENCODING 35024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2420\nF7E0\n1000\n2FE0\n7420\nAFE0\n2420\n27E0\n2420\n2460\nENDCHAR\nSTARTCHAR U_88D1\nENCODING 35025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27C0\nFC40\n17C0\n2440\n6FE0\nB440\n2FC0\n2140\n2240\n2CC0\nENDCHAR\nSTARTCHAR U_88D2\nENCODING 35026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0000\n3BC0\n2040\n3BC0\n2040\n3FC0\n1940\n2880\nCC60\nENDCHAR\nSTARTCHAR U_88D3\nENCODING 35027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n20A0\nFFE0\n1080\n2AA0\n7FA0\nAAC0\n3A80\n2AA0\n3160\n2220\nENDCHAR\nSTARTCHAR U_88D4\nENCODING 35028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1240\nF580\n1860\n7FC0\n4A40\n71C0\n4E40\n4A40\n4EC0\nENDCHAR\nSTARTCHAR U_88D5\nENCODING 35029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2240\nF420\n1180\n2A40\n7420\nABC0\n2240\n2240\n23C0\n2240\nENDCHAR\nSTARTCHAR U_88D6\nENCODING 35030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2400\nF7C0\n1400\n2FE0\n7680\nAEA0\n26C0\n2A80\n2B40\n3220\nENDCHAR\nSTARTCHAR U_88D7\nENCODING 35031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF200\n1440\n2FE0\n7020\nAD40\n2540\n2540\n2540\n2960\nENDCHAR\nSTARTCHAR U_88D8\nENCODING 35032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\n2480\n1700\n3580\nCC40\n0420\nFFE0\n3240\nD580\n1860\nENDCHAR\nSTARTCHAR U_88D9\nENCODING 35033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2240\nFFE0\n1240\n2FC0\n7400\nAFC0\n2440\n2C40\n37C0\n2440\nENDCHAR\nSTARTCHAR U_88DA\nENCODING 35034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFC00\n27E0\nF480\n2480\n4480\nFFE0\n1240\n3180\nD480\n1860\nENDCHAR\nSTARTCHAR U_88DB\nENCODING 35035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2080\n7FC0\n4440\n7FC0\n4020\n7FE0\n3280\nD500\n18E0\nENDCHAR\nSTARTCHAR U_88DC\nENCODING 35036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n27E0\nF900\n17E0\n2D20\n77E0\nAD20\n27E0\n2520\n2520\n2560\nENDCHAR\nSTARTCHAR U_88DD\nENCODING 35037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n7FE0\n1100\nF100\n57C0\n8400\nFFE0\n1480\n3300\nD580\n1860\nENDCHAR\nSTARTCHAR U_88DE\nENCODING 35038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\nFFC0\n1440\n2C40\n77C0\nAA80\n2A80\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_88DF\nENCODING 35039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2540\n8920\n2140\nC080\n5F00\n0400\nFFE0\n1A40\nE980\n0C60\nENDCHAR\nSTARTCHAR U_88E0\nENCODING 35040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0880\nFFE0\n1080\n7F80\n3080\nDF80\n0400\nFFE0\n3280\nD9E0\nENDCHAR\nSTARTCHAR U_88E1\nENCODING 35041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2540\nFD40\n17C0\n2D40\n77C0\nA900\n2FC0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_88E2\nENCODING 35042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9080\n4880\nE3E0\n3900\n4A80\n5BE0\nE880\n5BE0\n4880\n5480\n63E0\nENDCHAR\nSTARTCHAR U_88E3\nENCODING 35043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF280\n1440\n2BA0\n6800\nB240\n2D40\n2240\n2280\n2FE0\nENDCHAR\nSTARTCHAR U_88E4\nENCODING 35044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4FE0\nF900\n2FE0\n4900\nDA80\n6BE0\n5880\n4FE0\n5080\n5080\nENDCHAR\nSTARTCHAR U_88E5\nENCODING 35045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8800\n45E0\nE820\n2BA0\n5AA0\n6BA0\nDAA0\n4BA0\n4820\n4820\n4860\nENDCHAR\nSTARTCHAR U_88E6\nENCODING 35046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n3280\n4100\n6FE0\n4540\n6B00\n1480\n3300\nD4E0\n1840\nENDCHAR\nSTARTCHAR U_88E7\nENCODING 35047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4520\nF540\n2980\n4240\n5D20\nE120\n5540\n4980\n4240\n4C20\nENDCHAR\nSTARTCHAR U_88E8\nENCODING 35048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27E0\nFD20\n17E0\n2520\n2FE0\n7100\nAA80\n2FE0\n2080\n2080\nENDCHAR\nSTARTCHAR U_88E9\nENCODING 35049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nF7C0\n1440\n2FC0\n7000\nAC80\n26E0\n2480\n26A0\n24E0\nENDCHAR\nSTARTCHAR U_88EA\nENCODING 35050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2FE0\nF420\n17A0\n2A20\n77E0\nAA20\n2AA0\n2FA0\n2020\n20C0\nENDCHAR\nSTARTCHAR U_88EB\nENCODING 35051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8AA0\n4AA0\nFAA0\n2EE0\n5820\n6FE0\nD820\n4EE0\n4AA0\n4AA0\n52A0\nENDCHAR\nSTARTCHAR U_88EC\nENCODING 35052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27E0\nF900\n17E0\n2A40\n7520\nABC0\n2A40\n2180\n2240\n2C20\nENDCHAR\nSTARTCHAR U_88ED\nENCODING 35053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2100\nFFE0\n1520\n2FC0\n7520\nADE0\n2400\n25C0\n2940\n3260\nENDCHAR\nSTARTCHAR U_88EE\nENCODING 35054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2240\nFBC0\n1240\n2BC0\n7000\nAFE0\n2C20\n27E0\n2420\n27E0\nENDCHAR\nSTARTCHAR U_88EF\nENCODING 35055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4920\nFBA0\n2920\n4BA0\n5820\nEBA0\n5AA0\n4BA0\n4820\n50E0\nENDCHAR\nSTARTCHAR U_88F0\nENCODING 35056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n29A0\nF540\n12A0\n2D20\n7000\nAFE0\n2AA0\n2440\n2AA0\n3120\nENDCHAR\nSTARTCHAR U_88F1\nENCODING 35057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4FE0\nF100\n17C0\n2100\n2FE0\n7320\nACC0\n3480\n2640\n2420\nENDCHAR\nSTARTCHAR U_88F2\nENCODING 35058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\nF100\n1FE0\n2920\n7DA0\nAB60\n3DA0\n2920\n2920\n2860\nENDCHAR\nSTARTCHAR U_88F3\nENCODING 35059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\n7FE0\n50A0\n1F80\n0400\nFFE0\n0A40\n3180\nD480\n1860\nENDCHAR\nSTARTCHAR U_88F4\nENCODING 35060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n0A00\n7BC0\n0A00\nFBE0\n0400\nFFE0\n0920\n3940\nCA80\n0C60\nENDCHAR\nSTARTCHAR U_88F5\nENCODING 35061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0A00\n7BC0\n0A00\n7BC0\n0400\n1AC0\n2900\nCCE0\n0840\nENDCHAR\nSTARTCHAR U_88F6\nENCODING 35062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2280\nFEE0\n1280\n2EE0\n7280\nAA80\n2EE0\n2280\n2280\n2280\nENDCHAR\nSTARTCHAR U_88F7\nENCODING 35063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2540\nFFE0\n1200\n2FE0\n7440\nAFA0\n2480\n25A0\n2420\n23E0\nENDCHAR\nSTARTCHAR U_88F8\nENCODING 35064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2540\nFFC0\n1540\n2FC0\n7100\nAFE0\n2900\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_88F9\nENCODING 35065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n3F80\n2480\nFFE0\n2480\nCD60\n3200\nD900\n10E0\nENDCHAR\nSTARTCHAR U_88FA\nENCODING 35066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27E0\nFA80\n1540\n2FE0\n7540\nAFC0\n2540\n27C0\n2120\n20E0\nENDCHAR\nSTARTCHAR U_88FB\nENCODING 35067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\n13E0\nFD40\n5880\n9540\n2620\nFFE0\n1220\n3140\nD480\n1860\nENDCHAR\nSTARTCHAR U_88FC\nENCODING 35068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nFFC0\n1440\n2FC0\n7200\nAFE0\n2AA0\n2D20\n2220\n24C0\nENDCHAR\nSTARTCHAR U_88FD\nENCODING 35069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5020\n7D20\n9120\nFD20\n1120\n7C60\n5400\nFFE0\n3140\nD480\n1860\nENDCHAR\nSTARTCHAR U_88FE\nENCODING 35070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2420\nFFE0\n1480\n2FE0\n7480\nAC80\n27E0\n2A20\n33E0\n2220\nENDCHAR\nSTARTCHAR U_88FF\nENCODING 35071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\nF900\n1280\n2FE0\n7040\nA740\n3540\n2740\n2040\n20C0\nENDCHAR\nSTARTCHAR U_8900\nENCODING 35072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n27E0\nFA40\n13C0\n2A40\n73C0\nAA40\n2FE0\n2000\n2240\n2420\nENDCHAR\nSTARTCHAR U_8901\nENCODING 35073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n2480\nFFE0\n1500\nE4E0\n1A80\n3100\nD480\n1860\nENDCHAR\nSTARTCHAR U_8902\nENCODING 35074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2F80\nF280\n12C0\n2FA0\n72A0\nAF80\n2A80\n2280\n2380\n2C80\nENDCHAR\nSTARTCHAR U_8903\nENCODING 35075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n25C0\nF500\n1FE0\n2800\n77C0\nAC40\n27C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_8904\nENCODING 35076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF140\n17E0\n2940\n77C0\nA900\n2FE0\n2240\n2180\n2660\nENDCHAR\nSTARTCHAR U_8905\nENCODING 35077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4FE0\nF440\n2280\n4FE0\n5920\nE7C0\n5540\n4540\n45C0\n4100\nENDCHAR\nSTARTCHAR U_8906\nENCODING 35078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nFFC0\n1440\n2FC0\n7000\nAFE0\n2500\n25E0\n2B00\n31E0\nENDCHAR\nSTARTCHAR U_8907\nENCODING 35079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\nF800\n17C0\n2C40\n77C0\nAC40\n27C0\n2C40\n3380\n2C60\nENDCHAR\nSTARTCHAR U_8908\nENCODING 35080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\nFFE0\n1100\n2FC0\n7540\nAFC0\n2540\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_8909\nENCODING 35081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8400\n4FE0\nF4A0\n2EA0\n44A0\n5F60\nE500\n5FE0\n4100\n4280\n4C60\nENDCHAR\nSTARTCHAR U_890A\nENCODING 35082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4FE0\nF820\n2FE0\n4800\n5FE0\nEAA0\n5FE0\n4AA0\n5AA0\n6860\nENDCHAR\nSTARTCHAR U_890B\nENCODING 35083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n27E0\nFD40\n15C0\n2C00\n77E0\nA900\n2FE0\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_890C\nENCODING 35084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\nF7C0\n1100\n2FC0\n7540\nAFC0\n2540\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_890D\nENCODING 35085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2540\nFD40\n17C0\n3000\n6FE0\nB200\n2FE0\n2AA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_890E\nENCODING 35086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2100\n47E0\n7380\n4540\n7D20\n0A40\n3180\nD480\n1860\nENDCHAR\nSTARTCHAR U_890F\nENCODING 35087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n3100\n47C0\n7540\n4540\n77C0\n1C80\n3300\nD8E0\n1040\nENDCHAR\nSTARTCHAR U_8910\nENCODING 35088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nFFC0\n1440\n2FC0\n7200\nAFE0\n2CA0\n2560\n27A0\n2040\nENDCHAR\nSTARTCHAR U_8911\nENCODING 35089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n80C0\n4F20\nF540\n2FE0\n5200\n6FE0\nD400\n47C0\n4A40\n5180\n4660\nENDCHAR\nSTARTCHAR U_8912\nENCODING 35090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1440\n27C0\n7100\nAFE0\n2540\n0920\n3480\nD300\n18E0\nENDCHAR\nSTARTCHAR U_8913\nENCODING 35091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23C0\nF540\n1DC0\n2480\n6FE0\nB480\n2DC0\n26A0\n2480\n2480\nENDCHAR\nSTARTCHAR U_8914\nENCODING 35092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2000\nFBC0\n1240\n2BC0\n7000\nAFE0\n2520\n27E0\n2520\n27E0\nENDCHAR\nSTARTCHAR U_8915\nENCODING 35093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8380\n4440\nFBA0\n2000\n4EA0\n5AA0\nEEA0\n5AA0\n4EA0\n4A20\n4A60\nENDCHAR\nSTARTCHAR U_8916\nENCODING 35094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n83C0\n4440\nF780\n2080\n5FE0\n6220\nDD40\n4280\n4DC0\n42A0\n4D80\nENDCHAR\nSTARTCHAR U_8917\nENCODING 35095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4A40\nFBC0\n2A40\n4BC0\n5900\nEFE0\n5A40\n4980\n4A40\n4FE0\nENDCHAR\nSTARTCHAR U_8918\nENCODING 35096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\nF940\n17E0\n2240\n2BC0\n7080\nAFE0\n2480\n2FE0\n2080\nENDCHAR\nSTARTCHAR U_8919\nENCODING 35097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n2EC0\nF280\n16E0\n2800\n77C0\nAC40\n27C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_891A\nENCODING 35098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2120\nF7C0\n1140\n2FE0\n7100\nABC0\n2640\n3BC0\n2240\n23C0\nENDCHAR\nSTARTCHAR U_891B\nENCODING 35099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2540\nFFE0\n1380\n2D40\n7120\nAFE0\n2240\n2680\n2140\n2620\nENDCHAR\nSTARTCHAR U_891C\nENCODING 35100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7200\n57C0\n7D40\n5740\n74A0\n9BE0\n0400\nFFE0\n3240\nD580\n1860\nENDCHAR\nSTARTCHAR U_891D\nENCODING 35101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A20\n2540\nF7C0\n1540\n2FC0\n7540\nAFC0\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_891E\nENCODING 35102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nFFC0\n1440\n2FC0\n7000\nAFE0\n2AA0\n2AA0\n2AA0\n3FE0\nENDCHAR\nSTARTCHAR U_891F\nENCODING 35103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nFFC0\n1440\n2FC0\n7000\nAFE0\n2AA0\n2660\n2AA0\n2660\nENDCHAR\nSTARTCHAR U_8920\nENCODING 35104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\nF280\n17E0\n2280\n6FE0\nB540\n2FC0\n2540\n3FE0\n2440\nENDCHAR\nSTARTCHAR U_8921\nENCODING 35105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\nF280\n1100\n2A80\n7440\nABA0\n2000\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_8922\nENCODING 35106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n3F80\n2480\n3FC0\n1220\nEDE0\n1A80\nE900\n0CE0\nENDCHAR\nSTARTCHAR U_8923\nENCODING 35107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nFAA0\n1440\n29A0\n7240\nAC20\n2FC0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_8924\nENCODING 35108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\nF100\n1FE0\n2000\n77C0\nA440\n37E0\n2D40\n3680\n2460\nENDCHAR\nSTARTCHAR U_8925\nENCODING 35109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n25C0\nFC00\n17E0\n2DA0\n7540\nAD20\n2FE0\n2640\n2940\n3080\nENDCHAR\nSTARTCHAR U_8926\nENCODING 35110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n84A0\n4AC0\nFF80\n20A0\n4EE0\n5A00\nEEA0\n5AC0\n4E80\n4AA0\n4AE0\nENDCHAR\nSTARTCHAR U_8927\nENCODING 35111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n4AA0\n7AC0\n4C80\n7940\n4A20\nFFE0\n1220\n3140\nD680\n1860\nENDCHAR\nSTARTCHAR U_8928\nENCODING 35112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\nFFE0\n1100\n27C0\n7100\nAFE0\n3200\n27C0\n2900\n37E0\nENDCHAR\nSTARTCHAR U_8929\nENCODING 35113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n7A40\n4C20\n4BC0\nFE40\n4980\n8A40\nFFE0\n3280\nD500\n18E0\nENDCHAR\nSTARTCHAR U_892A\nENCODING 35114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n93C0\n4A40\nE3C0\n3A40\n4BC0\nDA80\n6AA0\n5A40\n4B20\n5400\n63E0\nENDCHAR\nSTARTCHAR U_892B\nENCODING 35115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n80E0\n4F80\nF880\n2BE0\n4AA0\n5BC0\nEAA0\n5AE0\n4B40\n5540\n6A60\nENDCHAR\nSTARTCHAR U_892C\nENCODING 35116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n87C0\n4240\nF180\n2EE0\n5AA0\n6440\nDAA0\n4100\n4FE0\n4540\n4920\nENDCHAR\nSTARTCHAR U_892D\nENCODING 35117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n4400\n7F80\n4400\n7FC0\n5540\n8AC0\n3280\nD500\n18E0\nENDCHAR\nSTARTCHAR U_892E\nENCODING 35118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n14A0\n5AC0\n5280\n2940\n4200\nFFE0\n8420\n7FC0\n3140\nD480\n1860\nENDCHAR\nSTARTCHAR U_892F\nENCODING 35119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4FE0\nFA40\n2FE0\n4A40\n5BC0\nE880\n5BE0\n4AA0\n4AE0\n5080\nENDCHAR\nSTARTCHAR U_8930\nENCODING 35120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8920\n7FC0\n0900\nFFE0\n2480\n7F40\n9AA0\n2900\n4CE0\nENDCHAR\nSTARTCHAR U_8931\nENCODING 35121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n4A40\n7FC0\n2480\n1500\n6CC0\n1220\n3140\nD480\n1860\nENDCHAR\nSTARTCHAR U_8932\nENCODING 35122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4FE0\nF880\n2FE0\n4AA0\n5BE0\nEAA0\n5BE0\n4880\n4FE0\n5080\nENDCHAR\nSTARTCHAR U_8933\nENCODING 35123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8080\n57E0\nEAA0\n23E0\n5EA0\n57E0\nE480\n57E0\n4480\n4480\n4BE0\nENDCHAR\nSTARTCHAR U_8934\nENCODING 35124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8280\n4A80\nEAE0\n2B00\n4A40\n5220\nE000\n5FE0\n4AA0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_8935\nENCODING 35125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27E0\nFA80\n1520\n2EA0\n77E0\nA900\n2FE0\n2AA0\n2FE0\n2820\nENDCHAR\nSTARTCHAR U_8936\nENCODING 35126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8EE0\n4220\nFAA0\n2660\n4AA0\n5100\nE7E0\n5420\n47E0\n4420\n47E0\nENDCHAR\nSTARTCHAR U_8937\nENCODING 35127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8480\n4880\nF2E0\n2280\n4FE0\n5880\nEA80\n5AE0\n4A80\n4A80\n4DE0\nENDCHAR\nSTARTCHAR U_8938\nENCODING 35128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n47C0\nF540\n2FE0\n5540\n6FE0\nD920\n4FE0\n4440\n4380\n4C60\nENDCHAR\nSTARTCHAR U_8939\nENCODING 35129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n5D00\nEBC0\n3D40\n5540\nEB40\n5D40\n49C0\n4E60\n5260\n4420\nENDCHAR\nSTARTCHAR U_893A\nENCODING 35130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7780\n2280\nFEA0\n52A0\nFD60\n2400\nFFC0\n3280\nD100\n18E0\nENDCHAR\nSTARTCHAR U_893B\nENCODING 35131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2100\nFBC0\n5140\nABC0\n2560\nFA20\n1940\n2A80\nCC60\nENDCHAR\nSTARTCHAR U_893C\nENCODING 35132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4280\nFFE0\n2AA0\n4FE0\n5440\nEFA0\n5480\n57A0\n4420\n43E0\nENDCHAR\nSTARTCHAR U_893D\nENCODING 35133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n4440\n7FE0\n4240\nBD40\n54C0\nFFE0\n0A20\n1940\nEA80\n0C60\nENDCHAR\nSTARTCHAR U_893E\nENCODING 35134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4280\nFFE0\n2AA0\n4FE0\n5000\nE7C0\n5000\n4FE0\n4540\n5B20\nENDCHAR\nSTARTCHAR U_893F\nENCODING 35135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\nF280\n1FE0\n2AA0\n7AA0\nAFE0\n3440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_8940\nENCODING 35136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF100\n2FC0\n7100\nAFE0\n2540\n26C0\n2540\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_8941\nENCODING 35137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8DE0\n4520\nF5E0\n2C80\n4BE0\n5AA0\nEEA0\n57E0\n4480\n44A0\n5BE0\nENDCHAR\nSTARTCHAR U_8942\nENCODING 35138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8280\n47C0\nF440\n2AA0\n4FE0\n5280\nE560\n5A80\n4540\n4280\n4700\nENDCHAR\nSTARTCHAR U_8943\nENCODING 35139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2440\n47C0\n7100\n47E0\n6B40\n1560\n3280\nD900\n10C0\nENDCHAR\nSTARTCHAR U_8944\nENCODING 35140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n4A40\n7BC0\n1100\n7FC0\n1100\nFFE0\n3280\nD500\n18E0\nENDCHAR\nSTARTCHAR U_8945\nENCODING 35141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\nFFE0\n1920\n2FE0\n7540\nAFE0\n2540\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_8946\nENCODING 35142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8AA0\n46C0\nFFE0\n2280\n4FE0\n5100\nE7C0\n5100\n4FE0\n4280\n4C60\nENDCHAR\nSTARTCHAR U_8947\nENCODING 35143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\nFEE0\n2AA0\n3FE0\n6AA0\nBBA0\n2AA0\n2BA0\n2820\n2860\nENDCHAR\nSTARTCHAR U_8948\nENCODING 35144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2B40\nFFC0\n1920\n2FE0\n7280\nAFE0\n2280\n2FE0\n2440\n2820\nENDCHAR\nSTARTCHAR U_8949\nENCODING 35145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8EE0\n4AA0\nEEE0\n2AA0\n4FE0\n5AA0\nEBA0\n5AA0\n4BA0\n4AA0\n4DE0\nENDCHAR\nSTARTCHAR U_894A\nENCODING 35146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nF7C0\n2440\n5FE0\nDA00\n6FE0\n5B20\n4EC0\n5AC0\n4320\nENDCHAR\nSTARTCHAR U_894B\nENCODING 35147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8480\n5FE0\nE480\n3FE0\n55A0\n55A0\nF5E0\n4EC0\n55A0\n66A0\n4480\nENDCHAR\nSTARTCHAR U_894C\nENCODING 35148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\nFFE0\n1540\n2FC0\n7540\nAFC0\n2100\n2FE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_894D\nENCODING 35149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n27C0\nFD00\n17C0\n2D00\n77C0\nAD00\n2FE0\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_894E\nENCODING 35150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2F40\nFA80\n2FC0\n3680\n6A60\nAFC0\n2A40\n2FC0\n2A40\n2FC0\nENDCHAR\nSTARTCHAR U_894F\nENCODING 35151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8F40\n4A80\nE4A0\n2840\n5DC0\n5560\nEC00\n5BC0\n4D40\n4480\n5B60\nENDCHAR\nSTARTCHAR U_8950\nENCODING 35152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n83C0\n4480\nFFE0\n2920\n4FE0\n5220\nED40\n5280\n4DC0\n42A0\n4D20\nENDCHAR\nSTARTCHAR U_8951\nENCODING 35153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n4040\nF7C0\n2040\n4FE0\n5520\nEFE0\n5080\n4FE0\n4880\n4580\nENDCHAR\nSTARTCHAR U_8952\nENCODING 35154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9540\n4E40\nE440\n3F60\n55A0\n7520\nDFA0\n7540\n5540\n55A0\n5120\nENDCHAR\nSTARTCHAR U_8953\nENCODING 35155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n47C0\nE100\n2FE0\n4440\n5EE0\nE440\n5FE0\n4280\n44A0\n5860\nENDCHAR\nSTARTCHAR U_8954\nENCODING 35156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n2FE0\nF240\n23C0\n3100\n6FE0\nB920\n2DA0\n2B60\n2920\n2960\nENDCHAR\nSTARTCHAR U_8955\nENCODING 35157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n23E0\nF920\n1FE0\n2920\n7FE0\nAD60\n2FE0\n2BA0\n2D60\n2920\nENDCHAR\nSTARTCHAR U_8956\nENCODING 35158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n4FC0\nED40\n2B40\n4FC0\n5B40\nEDC0\n5940\n4FE0\n4280\n5C60\nENDCHAR\nSTARTCHAR U_8957\nENCODING 35159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\nFFE0\n17C0\n3100\n6FE0\nB280\n2FE0\n2100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_8958\nENCODING 35160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n2440\nFBA0\n1000\n2FE0\n7AA0\nAFE0\n3440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_8959\nENCODING 35161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n87C0\n4440\nF7C0\n2000\n4EE0\n5AA0\nEEE0\n5100\n4FE0\n4540\n4920\nENDCHAR\nSTARTCHAR U_895A\nENCODING 35162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9440\n4A80\nE7E0\n2120\n52C0\n5D80\nEAC0\n4DA0\n4AA0\n5500\n63E0\nENDCHAR\nSTARTCHAR U_895B\nENCODING 35163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8280\n4FE0\nEAA0\n2FE0\n4AA0\n5FE0\nE800\n5FE0\n4AA0\n4A40\n5720\nENDCHAR\nSTARTCHAR U_895C\nENCODING 35164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2440\nF7E0\n1D40\n27E0\n6C00\nB7E0\n2C00\n27E0\n2A20\n33E0\nENDCHAR\nSTARTCHAR U_895D\nENCODING 35165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8300\n4480\nE840\n37A0\n4000\n5EE0\nEAA0\n5EE0\n4440\n4AA0\n5120\nENDCHAR\nSTARTCHAR U_895E\nENCODING 35166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n7940\n4080\n7BE0\nA880\nFFE0\n0A40\n3180\nD480\n1860\nENDCHAR\nSTARTCHAR U_895F\nENCODING 35167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8440\n4FE0\nE440\n2EE0\n5540\n57C0\nE000\n5FE0\n4580\n4940\n5320\nENDCHAR\nSTARTCHAR U_8960\nENCODING 35168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2540\nFFE0\n1AA0\n2380\n6800\nB7E0\n2D20\n27E0\n2520\n27E0\nENDCHAR\nSTARTCHAR U_8961\nENCODING 35169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FC0\n5540\nFFC0\n2400\n47E0\n5A20\nEFA0\n5AA0\n4FA0\n42A0\n4FC0\nENDCHAR\nSTARTCHAR U_8962\nENCODING 35170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4FE0\nFBA0\n2820\n4FE0\n5000\nE7C0\n5440\n47C0\n4440\n5FE0\nENDCHAR\nSTARTCHAR U_8963\nENCODING 35171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n47C0\nF440\n2FE0\n4920\n5FE0\nE920\n5FE0\n5240\n4440\n4840\nENDCHAR\nSTARTCHAR U_8964\nENCODING 35172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8F80\n4A80\nFEE0\n2980\n4F40\n5A20\nEA00\n5FE0\n4AA0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_8965\nENCODING 35173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AA0\n2EC0\nEFE0\n3A80\n5FC0\nE900\n5BC0\n4900\n4FE0\n4A80\n4C60\nENDCHAR\nSTARTCHAR U_8966\nENCODING 35174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4100\nEFE0\n2920\n4540\n5920\nEFE0\n5200\n4FE0\n4AA0\n4AE0\nENDCHAR\nSTARTCHAR U_8967\nENCODING 35175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2540\nF920\n2FE0\n5D60\nEBA0\n5D60\n4BA0\n4D60\n4920\n4860\nENDCHAR\nSTARTCHAR U_8968\nENCODING 35176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAAA0\n5B20\nEA20\n3FE0\n4A20\nDFA0\n6460\n5F20\n4420\n47A0\n5840\nENDCHAR\nSTARTCHAR U_8969\nENCODING 35177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4FE0\nF100\n2FE0\n4AA0\n5FE0\nE440\n57C0\n4440\n47C0\n4C60\nENDCHAR\nSTARTCHAR U_896A\nENCODING 35178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8280\n4FE0\nF280\n2FE0\n4AA0\n5FE0\nE140\n5FE0\n4D40\n4AA0\n5360\nENDCHAR\nSTARTCHAR U_896B\nENCODING 35179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4FE0\nF540\n2FE0\n4920\n5FE0\nE920\n5FE0\n4280\n4440\n4820\nENDCHAR\nSTARTCHAR U_896C\nENCODING 35180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4AA0\nFFE0\n24A0\n4AC0\n5FA0\nEAE0\n5EA0\n4AC0\n4EA0\n4AE0\nENDCHAR\nSTARTCHAR U_896D\nENCODING 35181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n85E0\n4E80\nF5E0\n2520\n4FE0\n5120\nEFE0\n5B20\n4BE0\n4EC0\n4920\nENDCHAR\nSTARTCHAR U_896E\nENCODING 35182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n87C0\n4440\nF7C0\n2440\n4FE0\n5280\nEFE0\n5540\n5BA0\n4540\n4B20\nENDCHAR\nSTARTCHAR U_896F\nENCODING 35183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n85E0\n4F20\nEBE0\n2520\n5FE0\n5520\nEFE0\n5440\n4EC0\n5540\n6E60\nENDCHAR\nSTARTCHAR U_8970\nENCODING 35184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8480\n5EE0\nE540\n3FE0\n55A0\nFFE0\n44A0\n4EE0\n55A0\n64E0\n44A0\nENDCHAR\nSTARTCHAR U_8971\nENCODING 35185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n84E0\n4E80\nFAE0\n2420\n4EE0\n5A80\nEEE0\n5A80\n4EE0\n4AA0\n4AE0\nENDCHAR\nSTARTCHAR U_8972\nENCODING 35186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFE00\n53E0\nFC20\n4BE0\n7A00\n4A20\nFFE0\n3140\nDC80\n1060\nENDCHAR\nSTARTCHAR U_8973\nENCODING 35187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8AC0\n55A0\nFFE0\n2A80\n5B80\n4AA0\nFBA0\n4AA0\n5BC0\n4AA0\n5F60\nENDCHAR\nSTARTCHAR U_8974\nENCODING 35188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8EE0\n4AA0\nEEE0\n2AA0\n4EE0\n5920\nEFE0\n5AA0\n4FE0\n4BA0\n4D60\nENDCHAR\nSTARTCHAR U_8975\nENCODING 35189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n22C0\nF340\n1FE0\n2040\n7FE0\nAAA0\n2EE0\n2AA0\n3FE0\n2220\nENDCHAR\nSTARTCHAR U_8976\nENCODING 35190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n22A0\nFFE0\n2A80\n4F80\nDAA0\n6FA0\n5AC0\n4FA0\n4AE0\n5120\nENDCHAR\nSTARTCHAR U_8977\nENCODING 35191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4600\n2B60\nFA20\n1D60\n2920\n7FE0\nA540\n2FE0\n3100\n2FE0\n2100\nENDCHAR\nSTARTCHAR U_8978\nENCODING 35192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2FE0\nF540\n2FE0\n5AA0\nE7C0\n5540\n46C0\n4540\n47C0\n4C60\nENDCHAR\nSTARTCHAR U_8979\nENCODING 35193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4000\nFFE0\n2AA0\n5FE0\n54A0\nFFE0\n5480\n56E0\n5480\n6EE0\nENDCHAR\nSTARTCHAR U_897A\nENCODING 35194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8280\n4FE0\nF280\n2FE0\n4B20\n5DE0\nEB20\n5DE0\n4F60\n4DE0\n4B20\nENDCHAR\nSTARTCHAR U_897B\nENCODING 35195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8AC0\n5D60\nEAC0\n3D60\n4AC0\n5FE0\nE540\n5FE0\n4100\n5FE0\n4300\nENDCHAR\nSTARTCHAR U_897C\nENCODING 35196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4480\nFFE0\n24A0\n4FA0\n5560\nEFA0\n5000\n5FE0\n4240\n4FA0\nENDCHAR\nSTARTCHAR U_897D\nENCODING 35197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2FE0\nFAA0\n1EE0\n2AA0\n7FE0\nAD60\n2FE0\n2BA0\n2D60\n2920\nENDCHAR\nSTARTCHAR U_897E\nENCODING 35198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0900\n0900\n7FE0\n4920\n4920\n4920\n4F20\n4920\n4020\n4020\nENDCHAR\nSTARTCHAR U_897F\nENCODING 35199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n0A00\n7FC0\n4A40\n4A40\n5240\n61C0\n4040\n7FC0\n4040\nENDCHAR\nSTARTCHAR U_8980\nENCODING 35200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n0A00\n7FC0\n4A40\n7FC0\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_8981\nENCODING 35201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n7FC0\n0800\nFFE0\n1100\n3A00\n0F00\n70C0\nENDCHAR\nSTARTCHAR U_8982\nENCODING 35202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n7FC0\n0080\n7F00\n0400\n7F80\n1800\nE7E0\nENDCHAR\nSTARTCHAR U_8983\nENCODING 35203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n7FC0\n2080\n3F80\n2080\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_8984\nENCODING 35204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n7FC0\n1500\n2480\n7FE0\nA600\n2980\n3060\nENDCHAR\nSTARTCHAR U_8985\nENCODING 35205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\n2900\nFFE0\nAAA0\nFEA0\n2120\nFE60\n4460\n28A0\n1920\nE6C0\nENDCHAR\nSTARTCHAR U_8986\nENCODING 35206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n7FE0\nCD40\n3540\nE7C0\n2A80\n3100\n2EE0\nENDCHAR\nSTARTCHAR U_8987\nENCODING 35207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4A40\n7FC0\n2800\nFFC0\n2A40\n7FC0\n5640\nFFC0\n1240\n14C0\nENDCHAR\nSTARTCHAR U_8988\nENCODING 35208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4A40\n7FC0\n2100\n7BE0\n4D40\n7940\n2080\nFC80\n4940\n9A20\nENDCHAR\nSTARTCHAR U_8989\nENCODING 35209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4A40\n7FC0\n2900\nFFE0\n2A80\n7FE0\n5740\n7D40\nFF40\n10C0\nENDCHAR\nSTARTCHAR U_898A\nENCODING 35210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4A40\n7FC0\n5000\nFFC0\n5480\nFFC0\nAC80\nFFE0\nFAA0\n2560\nENDCHAR\nSTARTCHAR U_898B\nENCODING 35211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n2080\n3F80\n0A00\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_898C\nENCODING 35212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n17C0\n9440\n57C0\n2440\n57C0\n4A80\n8280\n04A0\n0860\nENDCHAR\nSTARTCHAR U_898D\nENCODING 35213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n4440\nBFA0\n2080\n3F80\n2080\n3F80\n2080\n3F80\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_898E\nENCODING 35214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8840\nF880\n8880\nFBE0\n8880\nF880\n5280\n5120\n5020\n8FC0\nENDCHAR\nSTARTCHAR U_898F\nENCODING 35215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n2440\n27C0\nFC40\n27C0\n3280\n2AA0\n44A0\n8860\nENDCHAR\nSTARTCHAR U_8990\nENCODING 35216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E40\n4540\n7C80\n4540\n7E20\n4540\n7C80\n2940\n2A20\n47E0\n8000\nENDCHAR\nSTARTCHAR U_8991\nENCODING 35217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57C0\n5440\n57C0\n7C40\n47C0\n7440\n57C0\n5280\n5280\n94A0\n0860\nENDCHAR\nSTARTCHAR U_8992\nENCODING 35218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\nE440\n3FC0\nE440\n3FC0\nE440\n27C0\n2280\n3280\n24A0\n0860\nENDCHAR\nSTARTCHAR U_8993\nENCODING 35219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\nFE40\n4480\n3F80\n2080\n3E80\n2F80\n2080\n3FA0\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_8994\nENCODING 35220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0E00\n3580\nC460\n3F80\n2A80\n3480\n3F80\n0A00\n1220\n61E0\nENDCHAR\nSTARTCHAR U_8995\nENCODING 35221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n1A20\n2BE0\n2A20\nABE0\nAE20\nB3E0\n2540\n2540\n5940\n8660\nENDCHAR\nSTARTCHAR U_8996\nENCODING 35222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nFFC0\n1440\n27C0\n7440\nAFC0\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_8997\nENCODING 35223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n0A20\nEBE0\n0A20\nEA20\nABE0\nAA20\nEBE0\n0940\n3940\n1660\nENDCHAR\nSTARTCHAR U_8998\nENCODING 35224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\n7FC0\n4440\n47C0\nF440\n97C0\n9280\nF280\n94A0\n0860\nENDCHAR\nSTARTCHAR U_8999\nENCODING 35225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7E40\n4BC0\n9240\n13C0\n5A40\n97C0\n1280\n1280\n54A0\n2860\nENDCHAR\nSTARTCHAR U_899A\nENCODING 35226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\n2480\n7FE0\n8020\n3F80\n2580\n2A80\n3480\n3F80\n1220\n61E0\nENDCHAR\nSTARTCHAR U_899B\nENCODING 35227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1BE0\nE220\n8BE0\nB220\nA3E0\nB620\nAA20\nABE0\nA540\nB140\nA660\nENDCHAR\nSTARTCHAR U_899C\nENCODING 35228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BE0\nAA20\n6FE0\n2A20\n2BE0\n6E20\nAA20\n2BE0\n2D40\n4940\n8260\nENDCHAR\nSTARTCHAR U_899D\nENCODING 35229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2220\nFFE0\n2220\n23E0\n0220\nA7E0\nA880\n3180\n4AA0\n84E0\nENDCHAR\nSTARTCHAR U_899E\nENCODING 35230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8A20\nFBE0\n5080\n54A0\n59A0\n96E0\nENDCHAR\nSTARTCHAR U_899F\nENCODING 35231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1220\nFFE0\n1220\n7FE0\n1220\n2BE0\nA680\nA880\n39A0\n06E0\nENDCHAR\nSTARTCHAR U_89A0\nENCODING 35232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n2A40\nFFC0\n2A40\n7BC0\n2240\n7BC0\nAA80\n2AA0\n3CA0\n0860\nENDCHAR\nSTARTCHAR U_89A1\nENCODING 35233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n1120\n55E0\n5520\n55E0\nBB20\n1120\n11E0\n1CC0\nE140\n4260\nENDCHAR\nSTARTCHAR U_89A2\nENCODING 35234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BC0\nB240\nA3C0\n5240\nABC0\n2240\n2BC0\nB080\nA1A0\n52A0\n8C60\nENDCHAR\nSTARTCHAR U_89A3\nENCODING 35235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2240\nFBC0\n2240\n73C0\nAA40\n23C0\nFC80\n49A0\n32A0\nCC60\nENDCHAR\nSTARTCHAR U_89A4\nENCODING 35236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1DE0\n1120\n7DE0\n5520\n79E0\n5520\n5DE0\n4040\nB8C0\nAD40\n4A60\nENDCHAR\nSTARTCHAR U_89A5\nENCODING 35237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BC0\n2A40\nFFC0\nAA40\nFFC0\nAA40\nFFC0\n0180\n52A0\n4AA0\n8460\nENDCHAR\nSTARTCHAR U_89A6\nENCODING 35238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n31E0\n4920\nB5E0\n0120\nE5E0\nAD20\nEDE0\nAC40\nE4C0\nA540\nAE60\nENDCHAR\nSTARTCHAR U_89A7\nENCODING 35239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n51E0\n7900\n4A80\n7F40\n5100\n7F00\n1100\n1F00\n0A40\n73C0\nENDCHAR\nSTARTCHAR U_89A8\nENCODING 35240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\nB640\nFFC0\n0240\n7BC0\n0240\nFFC0\n2180\n3980\n0AA0\n34E0\nENDCHAR\nSTARTCHAR U_89A9\nENCODING 35241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n7E40\n2BC0\nFE40\n23C0\n7A40\nCBC0\n7980\n4AA0\n7AA0\n4C60\nENDCHAR\nSTARTCHAR U_89AA\nENCODING 35242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\nFE20\n4BE0\n2A20\nFFE0\n1220\n7FE0\n1080\n39A0\n56A0\nB460\nENDCHAR\nSTARTCHAR U_89AB\nENCODING 35243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n7E40\n2BC0\nFE40\n93C0\n7E40\n23C0\n3980\n2A80\n6AA0\n9460\nENDCHAR\nSTARTCHAR U_89AC\nENCODING 35244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nABE0\nFA20\n03E0\nFA20\n03E0\nFA20\n8BE0\nF940\n8940\n5240\nFC60\nENDCHAR\nSTARTCHAR U_89AD\nENCODING 35245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8620\n7BE0\n4A20\n7BE0\n4A20\n7BE0\n20C0\nFD40\n5240\n8C60\nENDCHAR\nSTARTCHAR U_89AE\nENCODING 35246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n56A0\n5AC0\n1080\n2940\nFFE0\nA0A0\n3F80\n2080\n3F80\n0A20\nF1E0\nENDCHAR\nSTARTCHAR U_89AF\nENCODING 35247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nFE20\n53E0\nFE20\n53E0\nFE20\nABE0\nF940\nA940\nFE40\n8C60\nENDCHAR\nSTARTCHAR U_89B0\nENCODING 35248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C00\n13C0\n7E40\n53C0\n7E40\n57C0\n7A40\n6BC0\n7980\nAAA0\n7C60\nENDCHAR\nSTARTCHAR U_89B1\nENCODING 35249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFE00\nABE0\nFA40\nAA40\nFFC0\n2080\n3F80\n2080\n3FA0\nE1E0\nENDCHAR\nSTARTCHAR U_89B2\nENCODING 35250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nFE20\n53E0\n2220\nFBE0\nAA20\nFBE0\n2080\nF980\n22A0\nFCE0\nENDCHAR\nSTARTCHAR U_89B3\nENCODING 35251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FC0\n9240\nFFC0\n2240\n4BC0\nFE40\n4BC0\n7D80\n4AA0\n7CE0\nENDCHAR\nSTARTCHAR U_89B4\nENCODING 35252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEBC0\nAE40\n47C0\nBA40\n03C0\n7A40\n4BC0\n7A80\n4A80\n34A0\nC860\nENDCHAR\nSTARTCHAR U_89B5\nENCODING 35253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nEEE0\nAAA0\nFEE0\nAAA0\nBAE0\nAA40\nBAC0\nCB40\n8660\nENDCHAR\nSTARTCHAR U_89B6\nENCODING 35254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0DE0\nF520\nA9E0\nFD20\n51E0\nFD20\nA5E0\nF440\nD4C0\nA540\nD660\nENDCHAR\nSTARTCHAR U_89B7\nENCODING 35255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n39E0\n2120\nFDE0\nA520\nF9E0\nA520\nBDE0\nA840\nECC0\nA940\nFE60\nENDCHAR\nSTARTCHAR U_89B8\nENCODING 35256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nEEE0\nAAA0\nFEE0\nAAA0\nBAE0\nAA40\nBAC0\n8340\n8660\nENDCHAR\nSTARTCHAR U_89B9\nENCODING 35257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEA80\nBA80\nEFE0\nB8A0\nEFA0\nA8A0\nEFA0\n4DA0\n5D40\nE9A0\n48A0\nENDCHAR\nSTARTCHAR U_89BA\nENCODING 35258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6AC0\n4440\n6AC0\n4440\nFFE0\nA0A0\n3E80\n2F80\n20A0\n3FA0\nF1E0\nENDCHAR\nSTARTCHAR U_89BB\nENCODING 35259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\n1240\n7FC0\n5240\n7BC0\n5640\n7FC0\n6980\n7AA0\n92A0\nBC60\nENDCHAR\nSTARTCHAR U_89BC\nENCODING 35260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\n54A0\n92E0\nFEA0\nD6E0\nBAA0\nD6E0\nBA40\nD6C0\n9340\n9660\nENDCHAR\nSTARTCHAR U_89BD\nENCODING 35261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE00\nA3E0\nFC80\nABE0\nFFA0\n20E0\n3F80\n2080\n3FA0\n1220\nE3E0\nENDCHAR\nSTARTCHAR U_89BE\nENCODING 35262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFF20\n55E0\nFF20\n55E0\n9320\n7DE0\n5440\n7CC0\n5540\n7E60\nENDCHAR\nSTARTCHAR U_89BF\nENCODING 35263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n7D20\n11E0\nFF20\nABE0\nFF20\n45E0\n7C40\n44C0\n7D40\nC660\nENDCHAR\nSTARTCHAR U_89C0\nENCODING 35264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2A20\nEFE0\nAA20\nEFE0\n5220\n7FE0\nD140\n7D40\n5140\n7E60\nENDCHAR\nSTARTCHAR U_89C1\nENCODING 35265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2480\n2480\n2480\n2480\n2480\n0A00\n1220\n2220\nC1E0\nENDCHAR\nSTARTCHAR U_89C2\nENCODING 35266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\nF440\n1540\n9540\n5540\n2540\n2540\n5180\n52A0\n84A0\n1860\nENDCHAR\nSTARTCHAR U_89C3\nENCODING 35267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4440\n5480\n57E0\n5480\n5480\n3080\n2A80\n4920\n4820\n87E0\nENDCHAR\nSTARTCHAR U_89C4\nENCODING 35268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFD40\n2540\n2540\nFD40\n2540\n3180\n2AA0\n44A0\n9860\nENDCHAR\nSTARTCHAR U_89C5\nENCODING 35269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n7C40\n2480\n1500\n3F80\n2080\n2480\n2680\n26A0\n0A20\nF1E0\nENDCHAR\nSTARTCHAR U_89C6\nENCODING 35270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nF540\n1540\n2540\n7540\nA540\n2100\n2320\n2520\n28E0\nENDCHAR\nSTARTCHAR U_89C7\nENCODING 35271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\n7540\n4540\n4540\nF540\n9540\n9180\nF2A0\n94A0\n0860\nENDCHAR\nSTARTCHAR U_89C8\nENCODING 35272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n53E0\n5480\n5040\n3F80\n2080\n2480\n2480\n24A0\n1A20\nE3E0\nENDCHAR\nSTARTCHAR U_89C9\nENCODING 35273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n1280\n7FE0\n4020\n9F80\n1080\n1480\n1480\n14A0\n0A20\n73E0\nENDCHAR\nSTARTCHAR U_89CA\nENCODING 35274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nABE0\nAA20\nFAA0\n02A0\nFAA0\n0AA0\n7AA0\n4080\n51A0\n62A0\n44E0\nENDCHAR\nSTARTCHAR U_89CB\nENCODING 35275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1220\n56A0\n56A0\n5AA0\nB2A0\n92A0\n1280\n1DA0\nE2A0\n4460\nENDCHAR\nSTARTCHAR U_89CC\nENCODING 35276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\nFE20\n12A0\nFEA0\n56A0\nB2A0\n52A0\nF880\n11A0\n2AA0\nC4E0\nENDCHAR\nSTARTCHAR U_89CD\nENCODING 35277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\n2BE0\nFE20\nAAA0\nFEA0\nAAA0\nFEA0\n0180\n4980\n86A0\n0460\nENDCHAR\nSTARTCHAR U_89CE\nENCODING 35278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BE0\n4620\nBAA0\n02A0\nEAA0\nAAA0\nEAA0\nAA80\nEBA0\nA2A0\nA6E0\nENDCHAR\nSTARTCHAR U_89CF\nENCODING 35279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nFE20\n52A0\nFAA0\n52A0\nFEA0\nAAA0\nF880\nA9A0\nFEA0\n98E0\nENDCHAR\nSTARTCHAR U_89D0\nENCODING 35280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nFE20\n52A0\n22A0\nFAA0\nAAA0\nFAA0\n2080\nF8A0\n21A0\nFEE0\nENDCHAR\nSTARTCHAR U_89D1\nENCODING 35281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BE0\n2220\nFEA0\nA2A0\nFAA0\nA6A0\nBAA0\nAC80\nE9A0\nBAA0\nE4E0\nENDCHAR\nSTARTCHAR U_89D2\nENCODING 35282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F00\n2200\n7FC0\nA440\n3FC0\n2440\n3FC0\n2440\n4540\n8080\nENDCHAR\nSTARTCHAR U_89D3\nENCODING 35283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4020\n7920\n5120\nFD20\n5520\n7D20\n5560\n7FA0\n5520\n5420\n9420\nENDCHAR\nSTARTCHAR U_89D4\nENCODING 35284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3C80\n4880\nFFE0\n54A0\n7CA0\n54A0\n7CA0\n54A0\n5520\n9E60\nENDCHAR\nSTARTCHAR U_89D5\nENCODING 35285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nA3C0\nA480\nFFE0\nA4A0\n37E0\n64A0\nA7E0\n24A0\n24A0\n28E0\nENDCHAR\nSTARTCHAR U_89D6\nENCODING 35286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n53C0\nFD40\n5540\n7FE0\n5500\n7D80\n5540\n5620\n8C20\nENDCHAR\nSTARTCHAR U_89D7\nENCODING 35287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n7B80\n9280\nFA80\nABE0\nFA80\nAA80\nFA80\nAAA0\nAB60\n9220\nENDCHAR\nSTARTCHAR U_89D8\nENCODING 35288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n9140\nFB20\nAB20\nFD40\nA940\nF880\nA900\nAA00\n9400\nENDCHAR\nSTARTCHAR U_89D9\nENCODING 35289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7920\n5140\nFD40\n5560\n7D20\n5520\n7DA0\n5640\n54A0\n9520\nENDCHAR\nSTARTCHAR U_89DA\nENCODING 35290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n7FC0\n5540\nFD40\n5540\n7D40\n5540\n7D40\n55A0\n55E0\n9540\nENDCHAR\nSTARTCHAR U_89DB\nENCODING 35291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BE0\n5220\nFE20\n57E0\n7E20\n5620\n7FE0\n5400\n5400\n9FE0\nENDCHAR\nSTARTCHAR U_89DC\nENCODING 35292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n5F80\n5220\nFFE0\n1100\n3FC0\n2440\n3FC0\n2440\n7FC0\n84C0\nENDCHAR\nSTARTCHAR U_89DD\nENCODING 35293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8020\nF3C0\nA280\nFA80\nABE0\nFA80\nAA80\nFAA0\nAB60\nAAA0\n9CA0\nENDCHAR\nSTARTCHAR U_89DE\nENCODING 35294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\nF3E0\nA400\nFBC0\nA880\nFBE0\nA960\nFAA0\nAD20\nAA20\n9CC0\nENDCHAR\nSTARTCHAR U_89DF\nENCODING 35295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n53E0\nFC80\n57E0\n7C80\n5480\n7FE0\n5480\n5480\n8FE0\nENDCHAR\nSTARTCHAR U_89E0\nENCODING 35296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n7FE0\n0800\nFFE0\n5240\nBFE0\n6440\n3FC0\n2440\n7FC0\n84C0\nENDCHAR\nSTARTCHAR U_89E1\nENCODING 35297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\n5120\nFEC0\n5540\n7E20\n55E0\n7D20\n5520\n55E0\n8D20\nENDCHAR\nSTARTCHAR U_89E2\nENCODING 35298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF920\n2220\nFEC0\n2900\n3FC0\n6440\n3FC0\n2440\n3FC0\nC4C0\nENDCHAR\nSTARTCHAR U_89E3\nENCODING 35299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n7920\n5220\nFCC0\n5680\n7FE0\n5480\n7FE0\n5480\n5480\n8C80\nENDCHAR\nSTARTCHAR U_89E4\nENCODING 35300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BC0\n5240\nFFE0\n5400\n7DE0\n5520\n7D60\n5500\n5520\n8CE0\nENDCHAR\nSTARTCHAR U_89E5\nENCODING 35301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44A0\n7AA0\n52C0\nFC80\n57E0\n7D40\n5540\n7D40\n5540\n5640\n9460\nENDCHAR\nSTARTCHAR U_89E6\nENCODING 35302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n9080\nFBE0\nAAA0\nFAA0\nABE0\nF880\nA8A0\nA8E0\n9BA0\nENDCHAR\nSTARTCHAR U_89E7\nENCODING 35303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n3D40\n4BE0\nFC80\n55C0\n7C80\n5480\n7FE0\n5480\n5480\n8C80\nENDCHAR\nSTARTCHAR U_89E8\nENCODING 35304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4880\nFC80\n57E0\n7C80\n57A0\n7DC0\n56A0\n54A0\n8D80\nENDCHAR\nSTARTCHAR U_89E9\nENCODING 35305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n38A0\n53E0\nFC80\n56A0\n7DA0\n54C0\n7DC0\n56A0\n54A0\n8D80\nENDCHAR\nSTARTCHAR U_89EA\nENCODING 35306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3FE0\n4A20\nFD40\n57E0\n7C80\n5480\n7FE0\n5480\n5480\n8C80\nENDCHAR\nSTARTCHAR U_89EB\nENCODING 35307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3BE0\n5080\nFFE0\n54A0\n7FE0\n5480\n7DC0\n56A0\n54A0\n8C80\nENDCHAR\nSTARTCHAR U_89EC\nENCODING 35308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3A60\n5220\nFF60\n5620\n7E20\n57E0\n7D40\n5540\n5540\n8E60\nENDCHAR\nSTARTCHAR U_89ED\nENCODING 35309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7BE0\n9140\nFA20\nAFE0\nF820\nABA0\nFAA0\nABA0\nA820\nA860\nENDCHAR\nSTARTCHAR U_89EE\nENCODING 35310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7840\n93C0\nF840\nAFE0\nF900\nAD40\nFB80\nAD40\nA920\n9B00\nENDCHAR\nSTARTCHAR U_89EF\nENCODING 35311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7940\n53E0\nFEA0\n57E0\n7EA0\n57E0\n7E80\n57E0\n5480\n8C80\nENDCHAR\nSTARTCHAR U_89F0\nENCODING 35312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40A0\n7BE0\n50A0\nFFE0\n5480\n7DE0\n5720\n7DE0\n5520\n55E0\n8D20\nENDCHAR\nSTARTCHAR U_89F1\nENCODING 35313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\n7FE0\n5500\n5D40\n41A0\n9EE0\n2420\nFFC0\n2240\n3FC0\nC2C0\nENDCHAR\nSTARTCHAR U_89F2\nENCODING 35314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n7BE0\n5080\nFDE0\n5480\n7DE0\n5680\n7FE0\n5680\n57E0\n8C80\nENDCHAR\nSTARTCHAR U_89F3\nENCODING 35315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\n1140\nFD40\n8660\nF800\n49C0\n7D40\nD540\n7C80\n5540\n8E20\nENDCHAR\nSTARTCHAR U_89F4\nENCODING 35316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n73E0\nA640\nFBC0\nAA40\nFFE0\nAA00\nFFE0\nAAA0\nAD20\n9AC0\nENDCHAR\nSTARTCHAR U_89F5\nENCODING 35317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n7BE0\n9140\nFFE0\nA880\nFBE0\nAAA0\nFBE0\nAAA0\nABE0\n9620\nENDCHAR\nSTARTCHAR U_89F6\nENCODING 35318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF5A0\nA7E0\nFAA0\nABE0\nFAA0\nABE0\nF880\nAFE0\nA880\n9880\nENDCHAR\nSTARTCHAR U_89F7\nENCODING 35319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6AC0\n4440\n6AC0\nFFE0\n9220\n3FC0\n6440\n3FC0\n2440\n3FC0\n44C0\nENDCHAR\nSTARTCHAR U_89F8\nENCODING 35320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n7D40\nAFC0\nF200\nAFE0\nF920\nAFE0\nFD60\nAFE0\nA920\n9FE0\nENDCHAR\nSTARTCHAR U_89F9\nENCODING 35321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n3BE0\n5480\nFFE0\n5480\n7FE0\n5400\n7F60\n55A0\n5420\n9460\nENDCHAR\nSTARTCHAR U_89FA\nENCODING 35322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n73E0\n4940\n7FE0\nA280\nFAE0\n5780\n8960\n7FC0\n2440\n3FC0\nC440\nENDCHAR\nSTARTCHAR U_89FB\nENCODING 35323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4520\n7BC0\nAEA0\nFBC0\nAEA0\nFBE0\nA900\nFFE0\nAB80\nAD40\n9920\nENDCHAR\nSTARTCHAR U_89FC\nENCODING 35324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n77E0\nA6A0\nFFE0\nAA40\nFBC0\nAA40\nFBE0\nAE40\nA980\nAE60\nENDCHAR\nSTARTCHAR U_89FD\nENCODING 35325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n5BE0\n9280\n27E0\nFA80\nABE0\nF800\nAB60\nFAA0\nAA20\nAA60\nENDCHAR\nSTARTCHAR U_89FE\nENCODING 35326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n77E0\nA240\nFBC0\nA800\nFFE0\nA940\nFFE0\nAD40\nAAA0\n9AA0\nENDCHAR\nSTARTCHAR U_89FF\nENCODING 35327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44A0\n77E0\nA280\nFBE0\nAE80\nFBE0\nAA80\nFFE0\nAE60\nADA0\n9DA0\nENDCHAR\nSTARTCHAR U_8A00\nENCODING 35328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0400\nFFE0\n0000\n3F80\n0000\n3F80\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8A01\nENCODING 35329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n1000\nFC00\n0000\n7800\n0000\n7800\n0000\n7800\n4800\n7800\nENDCHAR\nSTARTCHAR U_8A02\nENCODING 35330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\nF7E0\n0080\nF080\n0080\nF080\n0080\nF080\n9080\nF080\n9380\nENDCHAR\nSTARTCHAR U_8A03\nENCODING 35331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFD00\n0100\n7900\n0180\n7940\n0120\n7920\n4900\n7900\n4900\nENDCHAR\nSTARTCHAR U_8A04\nENCODING 35332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\n27E0\nF800\n2BC0\n2800\n2BC0\n2A40\n2BC0\n4820\n87E0\nENDCHAR\nSTARTCHAR U_8A05\nENCODING 35333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nFA00\n0780\n7280\n0280\n7280\n0280\n7280\n54A0\n7860\nENDCHAR\nSTARTCHAR U_8A06\nENCODING 35334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4020\n2120\nFD20\n0120\n7920\n0120\n79E0\n0120\n7820\n4820\n7820\nENDCHAR\nSTARTCHAR U_8A07\nENCODING 35335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4820\n8420\n3F20\n0020\n3F20\n0020\n3F20\n2120\n3FC0\nENDCHAR\nSTARTCHAR U_8A08\nENCODING 35336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1080\nFC80\n0080\n7FE0\n0080\n7880\n0080\n7880\n4880\n7880\nENDCHAR\nSTARTCHAR U_8A09\nENCODING 35337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2380\nFE80\n0280\n7A80\n0380\n7A80\n0280\n7AA0\n4AA0\n7C60\nENDCHAR\nSTARTCHAR U_8A0A\nENCODING 35338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\nF240\n0240\nF240\n0240\nFFC0\n0240\nF240\n9260\nF260\n9220\nENDCHAR\nSTARTCHAR U_8A0B\nENCODING 35339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nFBE0\n0420\n7820\n0220\n7920\n0120\n7820\n4820\n78C0\nENDCHAR\nSTARTCHAR U_8A0C\nENCODING 35340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\nF7E0\n0100\nF100\n0100\nF100\n0100\nF100\n9100\nF100\n9FE0\nENDCHAR\nSTARTCHAR U_8A0D\nENCODING 35341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27E0\nFA20\n0320\n7AA0\n0140\n7940\n0080\n7980\n4A40\n7C20\nENDCHAR\nSTARTCHAR U_8A0E\nENCODING 35342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n1040\nFC40\n03E0\n7840\n0240\n7940\n0040\n7840\n4840\n78C0\nENDCHAR\nSTARTCHAR U_8A0F\nENCODING 35343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n1080\nF880\n0080\n7FE0\n0080\n7880\n0080\n7880\n4880\n7980\nENDCHAR\nSTARTCHAR U_8A10\nENCODING 35344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2080\nF880\n0080\n7FE0\n0080\n7880\n0080\n7880\n4880\n7880\nENDCHAR\nSTARTCHAR U_8A11\nENCODING 35345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nF2A0\n02E0\nF3A0\n0EA0\nF2A0\n02E0\nF280\n9220\nF220\n91E0\nENDCHAR\nSTARTCHAR U_8A12\nENCODING 35346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF0A0\n00A0\nF2A0\n02A0\nF2A0\n04A0\nF120\n9120\nF2E0\n9440\nENDCHAR\nSTARTCHAR U_8A13\nENCODING 35347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\nF2A0\n02A0\nF2A0\n02A0\nF2A0\n02A0\nF2A0\n92A0\nF420\n9820\nENDCHAR\nSTARTCHAR U_8A14\nENCODING 35348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n4440\n7FC0\n0400\nFFE0\n0000\n7FC0\n0000\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_8A15\nENCODING 35349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nF080\n0080\nF4A0\n04A0\nF4A0\n04A0\nF4A0\n94A0\nF7E0\n9420\nENDCHAR\nSTARTCHAR U_8A16\nENCODING 35350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nF3E0\n0400\nF800\n07C0\nF080\n0100\nF200\n9420\nF420\n93E0\nENDCHAR\nSTARTCHAR U_8A17\nENCODING 35351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\nF700\n0100\nF100\n01E0\nF700\n0100\nF100\n9120\nF120\n90E0\nENDCHAR\nSTARTCHAR U_8A18\nENCODING 35352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\nF7C0\n0040\nF040\n07C0\nF440\n0400\nF400\n9420\nF420\n93E0\nENDCHAR\nSTARTCHAR U_8A19\nENCODING 35353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nFF80\n0280\n7A80\n0680\n7B80\n0280\n7AA0\n4C60\n7820\nENDCHAR\nSTARTCHAR U_8A1A\nENCODING 35354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FC0\n0440\n5F40\n4040\n5F40\n4040\n5F40\n4040\n5F40\n5140\n5FC0\nENDCHAR\nSTARTCHAR U_8A1B\nENCODING 35355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nF280\n04A0\nF4A0\n0CC0\nF480\n0580\nF680\n94A0\nF4A0\n9460\nENDCHAR\nSTARTCHAR U_8A1C\nENCODING 35356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2280\nFA40\n0440\nF820\n07C0\nF240\n0240\nF240\n9440\nF8C0\nENDCHAR\nSTARTCHAR U_8A1D\nENCODING 35357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF040\n0240\nF240\n07E0\nF0C0\n0140\nF240\n9440\nF940\n9080\nENDCHAR\nSTARTCHAR U_8A1E\nENCODING 35358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\nF780\n0100\nF100\n0FE0\nF100\n0100\nF280\n9280\nF440\n9820\nENDCHAR\nSTARTCHAR U_8A1F\nENCODING 35359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nF280\n0280\nF440\n0440\nF920\n0100\nF200\n9240\nF440\n9FE0\nENDCHAR\nSTARTCHAR U_8A20\nENCODING 35360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4720\n2120\nF920\n0720\n7420\n0420\n7720\n0120\n7120\n5520\n7220\nENDCHAR\nSTARTCHAR U_8A21\nENCODING 35361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFA80\n0440\n7920\n0080\n77E0\n0040\n7080\n5080\n7100\nENDCHAR\nSTARTCHAR U_8A22\nENCODING 35362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\nF780\n0400\nF400\n07E0\nF480\n0480\nF480\n9480\nF880\n9080\nENDCHAR\nSTARTCHAR U_8A23\nENCODING 35363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF100\n07C0\nF140\n0140\nF7E0\n0100\nF100\n9280\nF440\n9820\nENDCHAR\nSTARTCHAR U_8A24\nENCODING 35364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\nF900\n0280\n7460\n0000\n7C40\n0280\n7100\n5280\n7C60\nENDCHAR\nSTARTCHAR U_8A25\nENCODING 35365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF100\n07E0\nF520\n0520\nF5A0\n0560\nF620\n9420\nF420\n94E0\nENDCHAR\nSTARTCHAR U_8A26\nENCODING 35366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFE0\n0920\n7100\n0280\n7280\n0280\n74A0\n54A0\n78E0\nENDCHAR\nSTARTCHAR U_8A27\nENCODING 35367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\nF120\n0100\nFFE0\n0100\nF180\n0180\nF280\n92A0\nF4A0\n9860\nENDCHAR\nSTARTCHAR U_8A28\nENCODING 35368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF900\n0500\n7500\n05E0\n7500\n0500\n7500\n5500\n7FE0\nENDCHAR\nSTARTCHAR U_8A29\nENCODING 35369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2420\nFC60\n06A0\n7520\n0520\n76A0\n0460\n7420\n57E0\n7420\nENDCHAR\nSTARTCHAR U_8A2A\nENCODING 35370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF080\n0FE0\nF200\n0200\nF3C0\n0240\nF240\n9240\nF540\n9880\nENDCHAR\nSTARTCHAR U_8A2B\nENCODING 35371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2100\nF880\n0080\n7200\n0240\n7620\n0A20\n7240\n5240\n71C0\nENDCHAR\nSTARTCHAR U_8A2C\nENCODING 35372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nF080\n02C0\nF2A0\n04A0\nF480\n00A0\nF040\n9080\nF300\n9C00\nENDCHAR\nSTARTCHAR U_8A2D\nENCODING 35373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\nF480\n0480\nF4E0\n0800\nF7C0\n0440\nF280\n9100\nF280\n9C60\nENDCHAR\nSTARTCHAR U_8A2E\nENCODING 35374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2240\nFA40\n0FE0\n7240\n0240\n7240\n0240\n7240\n5440\n7840\nENDCHAR\nSTARTCHAR U_8A2F\nENCODING 35375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27E0\nFA20\n0240\n7A80\n02E0\n7B20\n02A0\n7A40\n4CA0\n7D20\nENDCHAR\nSTARTCHAR U_8A30\nENCODING 35376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF100\n0FE0\nF100\n0540\nF540\n07C0\nF100\n9120\nF120\n90E0\nENDCHAR\nSTARTCHAR U_8A31\nENCODING 35377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nF200\n03E0\nF480\n0080\nF7E0\n0080\nF080\n9080\nF080\n9080\nENDCHAR\nSTARTCHAR U_8A32\nENCODING 35378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF900\n07C0\n7540\n0540\n77C0\n0100\n7100\n5100\n7100\nENDCHAR\nSTARTCHAR U_8A33\nENCODING 35379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\nFC40\n0440\nF7C0\n0500\nF500\n0480\nF480\n9440\nF820\nENDCHAR\nSTARTCHAR U_8A34\nENCODING 35380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40E0\nF700\n0400\nF400\n07E0\nF480\n0480\nF4C0\n94A0\nF480\n9880\nENDCHAR\nSTARTCHAR U_8A35\nENCODING 35381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4FE0\nEAA0\n0AA0\nEAA0\n0AA0\nEAA0\n0AA0\nEC60\nA820\nEFE0\nENDCHAR\nSTARTCHAR U_8A36\nENCODING 35382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF040\n0040\nF740\n0540\nF540\n0740\nF540\n9040\nF140\n9080\nENDCHAR\nSTARTCHAR U_8A37\nENCODING 35383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF900\n07E0\n7520\n07E0\n7520\n07E0\n7100\n5100\n7100\nENDCHAR\nSTARTCHAR U_8A38\nENCODING 35384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2700\nF900\n0100\n7FE0\n0380\n7380\n0540\n7540\n5920\n7100\nENDCHAR\nSTARTCHAR U_8A39\nENCODING 35385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\nF120\n0FE0\nF100\n0380\nF380\n0540\nF540\n9920\nF100\n9100\nENDCHAR\nSTARTCHAR U_8A3A\nENCODING 35386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF280\n0440\nF920\n0200\nF480\n0120\nF640\n9080\nF100\n9600\nENDCHAR\nSTARTCHAR U_8A3B\nENCODING 35387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nF100\n0FE0\nF100\n0100\nF100\n07C0\nF100\n9100\nF100\n9FE0\nENDCHAR\nSTARTCHAR U_8A3C\nENCODING 35388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF100\n0100\nF100\n0500\nF5E0\n0500\nF500\n9500\nF500\n9FE0\nENDCHAR\nSTARTCHAR U_8A3D\nENCODING 35389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\nFA20\n0420\n73A0\n02A0\n72A0\n02A0\n73A0\n5020\n70E0\nENDCHAR\nSTARTCHAR U_8A3E\nENCODING 35390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E80\n5320\nFFE0\n0400\nFFE0\n0000\n3F80\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8A3F\nENCODING 35391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nF280\n0280\nFAA0\n0BC0\nFA80\n0A80\nFA80\n9BA0\nFEA0\n9060\nENDCHAR\nSTARTCHAR U_8A40\nENCODING 35392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFC80\n00E0\n7880\n0080\n7BE0\n0220\n7A20\n4A20\n7BE0\n4A20\nENDCHAR\nSTARTCHAR U_8A41\nENCODING 35393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF100\n0100\nFFE0\n0100\nF100\n07C0\nF440\n9440\nF7C0\n9440\nENDCHAR\nSTARTCHAR U_8A42\nENCODING 35394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n2240\nF440\n0DE0\n7440\n0540\n74C0\n0440\n7440\n5440\n74C0\nENDCHAR\nSTARTCHAR U_8A43\nENCODING 35395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2080\nF7E0\n0100\n7200\n0440\n7780\n0100\n7240\n5420\n77E0\nENDCHAR\nSTARTCHAR U_8A44\nENCODING 35396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF500\n07C0\nF900\n0100\nFFE0\n0100\nF100\n9280\nF440\n9820\nENDCHAR\nSTARTCHAR U_8A45\nENCODING 35397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF100\n0280\nF440\n0920\nF080\n07E0\nF040\n9280\nF100\n9080\nENDCHAR\nSTARTCHAR U_8A46\nENCODING 35398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\nF780\n0480\nF480\n07E0\nF480\n0480\nF480\n95A0\nF760\n94A0\nENDCHAR\nSTARTCHAR U_8A47\nENCODING 35399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFC0\n0540\n7540\n0540\n7FE0\n0100\n7280\n5440\n7820\nENDCHAR\nSTARTCHAR U_8A48\nENCODING 35400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n7FC0\n0400\nFFE0\n0000\n3FC0\n0000\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_8A49\nENCODING 35401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n25C0\nFF40\n0540\n7540\n0540\n7540\n0580\n7280\n5540\n7A20\nENDCHAR\nSTARTCHAR U_8A4A\nENCODING 35402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\nF540\n0100\nF7C0\n0100\nF100\n0FE0\nF100\n9100\nF100\n9100\nENDCHAR\nSTARTCHAR U_8A4B\nENCODING 35403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\nFC40\n0440\n7440\n07C0\n7280\n0280\n7280\n54A0\n78E0\nENDCHAR\nSTARTCHAR U_8A4C\nENCODING 35404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\nF240\n07E0\nF240\n0240\nF240\n03C0\nF240\n9240\nF3C0\n9240\nENDCHAR\nSTARTCHAR U_8A4D\nENCODING 35405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\nF540\n0540\nFFE0\n0540\nF540\n0540\nF5C0\n9400\nF400\n97E0\nENDCHAR\nSTARTCHAR U_8A4E\nENCODING 35406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF400\n0400\nF7C0\n0440\nF440\n07C0\nF440\n9400\nF400\n97E0\nENDCHAR\nSTARTCHAR U_8A4F\nENCODING 35407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nF280\n0480\nF9E0\n0EA0\nF4A0\n0AA0\nFFA0\n9120\nF220\n94C0\nENDCHAR\nSTARTCHAR U_8A50\nENCODING 35408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nF200\n03E0\nF500\n09E0\nF100\n0100\nF1E0\n9100\nF100\n9100\nENDCHAR\nSTARTCHAR U_8A51\nENCODING 35409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nF100\n0FE0\nF820\n0200\nF240\n0280\nF300\n9220\nF220\n91E0\nENDCHAR\nSTARTCHAR U_8A52\nENCODING 35410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF100\n0200\nF440\n0FE0\nF000\n07C0\nF440\n9440\nF7C0\n9440\nENDCHAR\nSTARTCHAR U_8A53\nENCODING 35411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFC0\n0100\n7100\n0FE0\n7100\n0100\n7240\n5420\n77E0\nENDCHAR\nSTARTCHAR U_8A54\nENCODING 35412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF120\n0120\nF220\n04E0\nF040\n03E0\nF220\n9220\nF3E0\n9220\nENDCHAR\nSTARTCHAR U_8A55\nENCODING 35413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF100\n0520\nF340\n0100\nFFE0\n0100\nF100\n9100\nF100\n9100\nENDCHAR\nSTARTCHAR U_8A56\nENCODING 35414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF100\n07E0\nF520\n0500\nF7E0\n0640\nF540\n9480\nF940\n9620\nENDCHAR\nSTARTCHAR U_8A57\nENCODING 35415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF820\n0820\nFBA0\n0AA0\nFAA0\n0BA0\nFAA0\n9820\nF820\n98E0\nENDCHAR\nSTARTCHAR U_8A58\nENCODING 35416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nF080\n04A0\nF4A0\n07E0\nF080\n04A0\nF4A0\n94A0\nF7E0\n9420\nENDCHAR\nSTARTCHAR U_8A59\nENCODING 35417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nF240\n0FE0\nF200\n0200\nF3C0\n0240\nF540\n9480\nF940\n9220\nENDCHAR\nSTARTCHAR U_8A5A\nENCODING 35418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n23C0\nFA40\n0240\n73C0\n0240\n7240\n03C0\n7240\n5000\n77E0\nENDCHAR\nSTARTCHAR U_8A5B\nENCODING 35419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\nF240\n0240\nF240\n03C0\nF240\n0240\nF3C0\n9240\nF240\n9FE0\nENDCHAR\nSTARTCHAR U_8A5C\nENCODING 35420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2540\nFD40\n07C0\n7100\n07C0\n7440\n0280\n7100\n5280\n7C60\nENDCHAR\nSTARTCHAR U_8A5D\nENCODING 35421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2080\nFFE0\n0420\n7000\n07E0\n7080\n0080\n7080\n5080\n7380\nENDCHAR\nSTARTCHAR U_8A5E\nENCODING 35422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF020\n07A0\nF020\n07A0\nF4A0\n04A0\nF7A0\n94A0\nF020\n9060\nENDCHAR\nSTARTCHAR U_8A5F\nENCODING 35423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n7FE0\n0A80\n1320\n25E0\nC200\n7FC0\n0000\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_8A60\nENCODING 35424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\nF700\n0120\nFF40\n0380\nF580\n0540\nF940\n9120\nF300\nENDCHAR\nSTARTCHAR U_8A61\nENCODING 35425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF120\n05A0\nF360\n0120\nF160\n03A0\nF520\n9120\nF120\n9360\nENDCHAR\nSTARTCHAR U_8A62\nENCODING 35426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\nF7E0\n0820\nF7A0\n04A0\nF7A0\n04A0\nF4A0\n97A0\nF020\n9060\nENDCHAR\nSTARTCHAR U_8A63\nENCODING 35427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nF480\n0720\nF420\n03E0\nF000\n07E0\nF420\n97E0\nF420\n97E0\nENDCHAR\nSTARTCHAR U_8A64\nENCODING 35428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\nFD40\n0400\n77E0\n0000\n7540\n0540\n7540\n5540\n7960\nENDCHAR\nSTARTCHAR U_8A65\nENCODING 35429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFA80\n0440\n7820\n07C0\n7000\n07C0\n7440\n5440\n77C0\nENDCHAR\nSTARTCHAR U_8A66\nENCODING 35430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\nF0A0\n0FE0\nF080\n0780\nF280\n0280\nF280\n93A0\nFC60\n9020\nENDCHAR\nSTARTCHAR U_8A67\nENCODING 35431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BC0\n4A40\nA940\n5480\n2F40\n4020\n7FC0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8A68\nENCODING 35432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\nFFE0\n0240\nF420\n0A40\nF240\n0180\nF180\n9240\nFC20\nENDCHAR\nSTARTCHAR U_8A69\nENCODING 35433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7C0\n0100\nF7E0\n0040\nF040\n07E0\nF240\n9140\nF040\n90C0\nENDCHAR\nSTARTCHAR U_8A6A\nENCODING 35434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\nFC40\n07C0\n7440\n07C0\n7520\n0540\n7480\n5540\n7620\nENDCHAR\nSTARTCHAR U_8A6B\nENCODING 35435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7E0\n0420\nF0C0\n0700\nF100\n01E0\nF700\n9120\nF120\n90E0\nENDCHAR\nSTARTCHAR U_8A6C\nENCODING 35436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40E0\nF700\n0400\nF7E0\n0400\nF400\n05E0\nF520\n9520\nF5E0\n9920\nENDCHAR\nSTARTCHAR U_8A6D\nENCODING 35437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nF3C0\n0480\nFFE0\n0400\nF5C0\n0540\nF5C0\n9520\nF520\n98E0\nENDCHAR\nSTARTCHAR U_8A6E\nENCODING 35438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF280\n0440\nF820\n07C0\nF100\n0100\nF7C0\n9100\nF100\n9FE0\nENDCHAR\nSTARTCHAR U_8A6F\nENCODING 35439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1100\nFFE0\n0220\n7BE0\n0220\n7A20\n03E0\n7A20\n4A20\n7BE0\nENDCHAR\nSTARTCHAR U_8A70\nENCODING 35440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF100\n0FE0\nF100\n07C0\nF000\n07C0\nF440\n9440\nF7C0\n9440\nENDCHAR\nSTARTCHAR U_8A71\nENCODING 35441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\nF700\n0100\nFFE0\n0100\nF100\n07C0\nF440\n9440\nF7C0\n9440\nENDCHAR\nSTARTCHAR U_8A72\nENCODING 35442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0200\nF440\n0E80\nF120\n0240\nFC80\n9180\nF260\n9C20\nENDCHAR\nSTARTCHAR U_8A73\nENCODING 35443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nF280\n0FE0\nF100\n07C0\nF100\n0100\nFFE0\n9100\nF100\n9100\nENDCHAR\nSTARTCHAR U_8A74\nENCODING 35444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7E0\n0200\nF3E0\n0620\nFBE0\n0220\nF3E0\n9220\nF220\n9260\nENDCHAR\nSTARTCHAR U_8A75\nENCODING 35445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF500\n07E0\nF900\n0100\nFFE0\n0280\nF280\n92A0\nF2A0\n9460\nENDCHAR\nSTARTCHAR U_8A76\nENCODING 35446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\nF2A0\n02A0\nF2A0\n07E0\nFAA0\n02A0\nF2A0\n92A0\nF4A0\n98A0\nENDCHAR\nSTARTCHAR U_8A77\nENCODING 35447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF820\n0BA0\nF820\n0BA0\nFAA0\n0AA0\nFBA0\n9820\nF820\n9860\nENDCHAR\nSTARTCHAR U_8A78\nENCODING 35448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2540\nFB80\n0100\nFFE0\n0100\nF380\n0380\nF540\n9920\nF100\nENDCHAR\nSTARTCHAR U_8A79\nENCODING 35449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n1100\n3FE0\n6A40\nBFE0\n2000\n2FC0\n2000\n2FC0\n4840\n8FC0\nENDCHAR\nSTARTCHAR U_8A7A\nENCODING 35450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF1E0\n0220\nF540\n0080\nF100\n07E0\nF220\n9220\nF3E0\n9220\nENDCHAR\nSTARTCHAR U_8A7B\nENCODING 35451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nF3C0\n0640\nF980\n0180\nF240\n07E0\nF240\n9240\nF3C0\n9240\nENDCHAR\nSTARTCHAR U_8A7C\nENCODING 35452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nF200\n0FE0\nF280\n0280\nF2A0\n05C0\nF480\n9940\nF240\n9420\nENDCHAR\nSTARTCHAR U_8A7D\nENCODING 35453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2EE0\nF440\n0440\n7EE0\n0440\n7440\n0440\n7440\n5440\n7840\nENDCHAR\nSTARTCHAR U_8A7E\nENCODING 35454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\nFDE0\n0020\n7660\n05A0\n75A0\n0660\n77E0\n5020\n7060\nENDCHAR\nSTARTCHAR U_8A7F\nENCODING 35455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7C0\n0100\nF100\n0FE0\nF100\n0100\nF7C0\n9100\nF100\n9FE0\nENDCHAR\nSTARTCHAR U_8A80\nENCODING 35456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27E0\nFA40\n03C0\n7A40\n0240\n7BC0\n0240\n7BE0\n4E40\n7840\nENDCHAR\nSTARTCHAR U_8A81\nENCODING 35457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nF280\n0FE0\nF280\n0280\nFFE0\n0280\nF280\n9280\nF480\n9880\nENDCHAR\nSTARTCHAR U_8A82\nENCODING 35458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nF2A0\n0AC0\nF680\n0280\nF6C0\n0AA0\nF280\n92A0\nF4A0\n9860\nENDCHAR\nSTARTCHAR U_8A83\nENCODING 35459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF3E0\n0540\nF080\n0180\nF6E0\n0120\nF6A0\n9040\nF180\n9600\nENDCHAR\nSTARTCHAR U_8A84\nENCODING 35460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0100\nF7C0\n0100\nFFE0\n0100\nF380\n9540\nF920\n9120\nENDCHAR\nSTARTCHAR U_8A85\nENCODING 35461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF500\n07C0\nF900\n0100\nFFE0\n0100\nF380\n9540\nF920\n9100\nENDCHAR\nSTARTCHAR U_8A86\nENCODING 35462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF800\n0BE0\nF880\n0880\nFBE0\n0880\nF880\n9BE0\nF800\n9FE0\nENDCHAR\nSTARTCHAR U_8A87\nENCODING 35463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0280\nF440\n0BA0\nF000\n0FE0\nF200\n97C0\nF040\n9380\nENDCHAR\nSTARTCHAR U_8A88\nENCODING 35464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27E0\nF900\n0240\n77E0\n0100\n7100\n07E0\n7100\n5100\n77E0\nENDCHAR\nSTARTCHAR U_8A89\nENCODING 35465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n1500\nFFE0\n2500\n7FC0\n8020\n3F80\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8A8A\nENCODING 35466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\n7FC0\n0800\nFFE0\n2480\nDF60\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8A8B\nENCODING 35467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF040\n07C0\nF400\n0420\nF3E0\n0100\nF2C0\n9620\nFA40\n91C0\nENDCHAR\nSTARTCHAR U_8A8C\nENCODING 35468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF100\n0FE0\nF100\n07C0\nF100\n0080\nF220\n9620\nFA40\n91C0\nENDCHAR\nSTARTCHAR U_8A8D\nENCODING 35469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF920\n0520\nF520\n02E0\nF440\n0300\nF2A0\n9620\nFA40\n91C0\nENDCHAR\nSTARTCHAR U_8A8E\nENCODING 35470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFFE0\n0100\n77C0\n0540\n77C0\n0100\n7380\n5540\n7920\nENDCHAR\nSTARTCHAR U_8A8F\nENCODING 35471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7C0\n0440\nF7C0\n0440\nF7C0\n0520\nF540\n9480\nF540\n9620\nENDCHAR\nSTARTCHAR U_8A90\nENCODING 35472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n26C0\nFAA0\n0FE0\n7280\n03A0\n76A0\n0AC0\n7280\n5AC0\n7520\nENDCHAR\nSTARTCHAR U_8A91\nENCODING 35473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\nF640\n0440\nFA40\n0240\nF7E0\n0A40\nF240\n9240\nF240\n9DE0\nENDCHAR\nSTARTCHAR U_8A92\nENCODING 35474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF200\n0440\nFFA0\n0400\nF7E0\n0900\nFFE0\n9280\nF440\n9820\nENDCHAR\nSTARTCHAR U_8A93\nENCODING 35475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n2400\nF7E0\n2880\nFFE0\n0000\n3F80\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8A94\nENCODING 35476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2E60\nFB80\n0280\n75E0\n0E80\n7280\n0A80\n77E0\n5400\n7BE0\nENDCHAR\nSTARTCHAR U_8A95\nENCODING 35477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\nFDC0\n0440\nF540\n0960\nF540\n0540\nF7E0\n9C00\nF600\n99E0\nENDCHAR\nSTARTCHAR U_8A96\nENCODING 35478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7C0\n0100\nFFE0\n0820\nF7C0\n0080\nFFE0\n9100\nF100\n9300\nENDCHAR\nSTARTCHAR U_8A97\nENCODING 35479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8320\n5CA0\nE4A0\n1FA0\nE4A0\n0EA0\nEDA0\n14A0\nE420\nA420\nE460\nENDCHAR\nSTARTCHAR U_8A98\nENCODING 35480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nF700\n0100\nFFE0\n0540\nF920\n07C0\nF280\n92E0\nF420\n98C0\nENDCHAR\nSTARTCHAR U_8A99\nENCODING 35481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF000\n0540\nFA80\n0540\nF000\n0FE0\nF100\n9100\nF100\n9FE0\nENDCHAR\nSTARTCHAR U_8A9A\nENCODING 35482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\nF540\n0100\nF7E0\n0420\nF7E0\n0420\nF7E0\n9420\nF420\n94E0\nENDCHAR\nSTARTCHAR U_8A9B\nENCODING 35483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2040\nFBC0\n0040\n7FE0\n0820\n77C0\n0440\n7280\n5100\n7EE0\nENDCHAR\nSTARTCHAR U_8A9C\nENCODING 35484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2240\nF7E0\n0280\n7440\n0A20\n73C0\n0640\n7980\n5180\n7660\nENDCHAR\nSTARTCHAR U_8A9D\nENCODING 35485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nFA80\n0540\n7BA0\n0080\n7100\n07C0\n7440\n57C0\n7440\nENDCHAR\nSTARTCHAR U_8A9E\nENCODING 35486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF100\n07C0\nF240\n0240\nF7E0\n0000\nF7C0\n9440\nF7C0\n9440\nENDCHAR\nSTARTCHAR U_8A9F\nENCODING 35487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4120\n27A0\nF940\n07E0\n7100\n03C0\n7440\n0880\n77E0\n5080\n7180\nENDCHAR\nSTARTCHAR U_8AA0\nENCODING 35488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\nF0A0\n0FE0\nF880\n0880\nFEA0\n0AA0\nFAC0\n9A80\nFD60\n9220\nENDCHAR\nSTARTCHAR U_8AA1\nENCODING 35489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\nF0A0\n0FE0\nF080\n0A80\nFAA0\n0FA0\nFAC0\n9AA0\nF160\n9220\nENDCHAR\nSTARTCHAR U_8AA2\nENCODING 35490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nFFC0\n0440\n77C0\n0440\n77C0\n0280\n72A0\n54A0\n7860\nENDCHAR\nSTARTCHAR U_8AA3\nENCODING 35491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF100\n0540\nF540\n0540\nF540\n0BA0\nF920\n9100\nF100\n9FE0\nENDCHAR\nSTARTCHAR U_8AA4\nENCODING 35492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF440\n0440\nF7C0\n0000\nF7C0\n0100\nFFE0\n9280\nF440\n9820\nENDCHAR\nSTARTCHAR U_8AA5\nENCODING 35493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF500\n07C0\nF900\n0100\nF7E0\n0000\nF7C0\n9440\nF7C0\n9440\nENDCHAR\nSTARTCHAR U_8AA6\nENCODING 35494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF240\n0180\nF7E0\n04A0\nF7E0\n04A0\nF7E0\n94A0\nF4A0\n9460\nENDCHAR\nSTARTCHAR U_8AA7\nENCODING 35495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\nF7E0\n0100\nF7E0\n0520\nF7E0\n0520\nF7E0\n9520\nF520\n9560\nENDCHAR\nSTARTCHAR U_8AA8\nENCODING 35496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\nF7E0\n0800\nF7C0\n0540\nFFE0\n0540\nF540\n97E0\nF040\n9180\nENDCHAR\nSTARTCHAR U_8AA9\nENCODING 35497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2080\nFBE0\n0000\n7BC0\n0000\n7BC0\n0000\n7BC0\n4A40\n7BC0\nENDCHAR\nSTARTCHAR U_8AAA\nENCODING 35498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nF280\n0440\nFFE0\n0440\nF440\n07C0\nF280\n92A0\nF4A0\n9860\nENDCHAR\nSTARTCHAR U_8AAB\nENCODING 35499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF800\n0BC0\nF800\n0FE0\nFA80\n0AA0\nFAC0\n9A80\nF340\n9220\nENDCHAR\nSTARTCHAR U_8AAC\nENCODING 35500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\nFFC0\n0440\n7440\n07C0\n7280\n0280\n72A0\n54A0\n7860\nENDCHAR\nSTARTCHAR U_8AAD\nENCODING 35501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\nF900\n0380\n7000\n0FE0\n7820\n0280\n7280\n54A0\n78E0\nENDCHAR\nSTARTCHAR U_8AAE\nENCODING 35502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2280\nFFE0\n0280\n7400\n0CA0\n74C0\n0580\n7480\n54A0\n74E0\nENDCHAR\nSTARTCHAR U_8AAF\nENCODING 35503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2240\nFBC0\n0240\n73C0\n0000\n77E0\n0420\n77E0\n5420\n77E0\nENDCHAR\nSTARTCHAR U_8AB0\nENCODING 35504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\nF480\n07E0\nF480\n0FE0\nF480\n0480\nF7E0\n9480\nF7E0\n9400\nENDCHAR\nSTARTCHAR U_8AB1\nENCODING 35505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\nF900\n07C0\n7140\n07E0\n7140\n07C0\n7500\n5700\n7DE0\nENDCHAR\nSTARTCHAR U_8AB2\nENCODING 35506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF520\n07E0\nF520\n07E0\nF100\n0FE0\nF100\n9380\nF540\n9920\nENDCHAR\nSTARTCHAR U_8AB3\nENCODING 35507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n2220\nFFE0\n0280\n7AA0\n03E0\n7A80\n02A0\n7AA0\n4AA0\n7FE0\nENDCHAR\nSTARTCHAR U_8AB4\nENCODING 35508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF820\n07C0\n7000\n07C0\n7100\n0380\n7540\n5920\n7300\nENDCHAR\nSTARTCHAR U_8AB5\nENCODING 35509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n2180\nFA40\n0100\n77E0\n0220\n77E0\n0A20\n73E0\n5220\n7220\nENDCHAR\nSTARTCHAR U_8AB6\nENCODING 35510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0440\nF440\n0AA0\nF920\n0100\nFFE0\n9100\nF100\n9100\nENDCHAR\nSTARTCHAR U_8AB7\nENCODING 35511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2660\nFDA0\n07E0\n74A0\n07E0\n7520\n0520\n75E0\n5420\n7460\nENDCHAR\nSTARTCHAR U_8AB8\nENCODING 35512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E80\nF240\n03E0\nFE40\n0880\nFFA0\n0240\nF240\n92A0\nFFE0\n9420\nENDCHAR\nSTARTCHAR U_8AB9\nENCODING 35513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nF280\n0EE0\nF280\n0EE0\nF280\n0280\nFEE0\n9280\nF280\n9280\nENDCHAR\nSTARTCHAR U_8ABA\nENCODING 35514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0100\nF540\n0540\nFBA0\n0120\nF380\n9540\nF920\n9120\nENDCHAR\nSTARTCHAR U_8ABB\nENCODING 35515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4120\nFF40\n0580\nF540\n0920\nF7C0\n0440\nF7C0\n9440\nF7C0\n9440\nENDCHAR\nSTARTCHAR U_8ABC\nENCODING 35516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nF100\n07E0\nF420\n03C0\nF240\n03C0\nF240\n93C0\nF240\n9FE0\nENDCHAR\nSTARTCHAR U_8ABD\nENCODING 35517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nFCE0\n0820\nFEE0\n0820\nFFE0\n0280\nF280\n92A0\nF4A0\n9860\nENDCHAR\nSTARTCHAR U_8ABE\nENCODING 35518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n8020\n9F20\n8020\n9F20\n9120\n9F60\nENDCHAR\nSTARTCHAR U_8ABF\nENCODING 35519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF420\n0520\nF7A0\n0520\nF7E0\n0420\nF7A0\n96A0\nF7A0\n9860\nENDCHAR\nSTARTCHAR U_8AC0\nENCODING 35520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7E0\n0520\nF7E0\n0520\nF7E0\n0280\nFFE0\n9080\nF080\n9080\nENDCHAR\nSTARTCHAR U_8AC1\nENCODING 35521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2EE0\nFAA0\n0440\n7AA0\n0000\n7EE0\n0AA0\n7AA0\n5440\n7AA0\nENDCHAR\nSTARTCHAR U_8AC2\nENCODING 35522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nF3E0\n0240\nF480\n0900\nF660\n0420\nF6E0\n9420\nF7E0\n9420\nENDCHAR\nSTARTCHAR U_8AC3\nENCODING 35523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nF480\n0FE0\nF480\n0480\nFEC0\n0DA0\nF6A0\n9480\nF480\n9480\nENDCHAR\nSTARTCHAR U_8AC4\nENCODING 35524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0440\nF7C0\n0000\nF7C0\n0080\nF100\n9FE0\nF100\n9300\nENDCHAR\nSTARTCHAR U_8AC5\nENCODING 35525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1500\n1300\nFFE0\n2480\nDF60\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8AC6\nENCODING 35526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\nF7E0\n0240\nF3C0\n0240\nF3C0\n0240\nFFE0\n9000\nF240\n9420\nENDCHAR\nSTARTCHAR U_8AC7\nENCODING 35527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4120\nF540\n0580\nF980\n0240\nF520\n0520\nF540\n9A80\nF440\n9820\nENDCHAR\nSTARTCHAR U_8AC8\nENCODING 35528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\nFF00\n0100\nFFE0\n0540\nFFE0\n0540\nFFE0\n9100\nF100\n97C0\nENDCHAR\nSTARTCHAR U_8AC9\nENCODING 35529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\nF700\n0100\nFFE0\n0540\nF920\n0FE0\nF240\n9480\nF380\n9C60\nENDCHAR\nSTARTCHAR U_8ACA\nENCODING 35530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\nF920\n0560\nF3A0\n07E0\nF120\n03A0\nF560\n9920\nF160\nENDCHAR\nSTARTCHAR U_8ACB\nENCODING 35531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0100\nF7C0\n0100\nFFE0\n0440\nF7C0\n9440\nF7C0\n9440\nENDCHAR\nSTARTCHAR U_8ACC\nENCODING 35532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF100\n07C0\nF540\n07C0\nF540\n07C0\nF380\n9540\nF920\nENDCHAR\nSTARTCHAR U_8ACD\nENCODING 35533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\nF480\n0900\nF7C0\n0140\nFFE0\n0140\nF7C0\n9100\nF100\n9300\nENDCHAR\nSTARTCHAR U_8ACE\nENCODING 35534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n27C0\nFA80\n0280\nFFE0\n0000\nF7C0\n0440\nF7C0\n9440\nF7C0\nENDCHAR\nSTARTCHAR U_8ACF\nENCODING 35535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F00\nEAE0\n0AA0\nEEA0\n0AA0\nEEA0\n0AA0\nEB40\nAE40\nFAA0\nA320\nENDCHAR\nSTARTCHAR U_8AD0\nENCODING 35536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n5040\nDFC0\n4A80\n4AA0\n5260\nFFE0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8AD1\nENCODING 35537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF200\n0500\nF920\n0AC0\nF480\n0580\nF2C0\n94A0\nF8A0\n9300\nENDCHAR\nSTARTCHAR U_8AD2\nENCODING 35538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0000\nF7C0\n0440\nF7C0\n0100\nF540\n9520\nF920\n9300\nENDCHAR\nSTARTCHAR U_8AD3\nENCODING 35539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\nFFE0\n0240\nF1A0\n0660\nF280\n0240\nFFE0\n9240\nF1A0\n9660\nENDCHAR\nSTARTCHAR U_8AD4\nENCODING 35540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\nF4E0\n07A0\nF4A0\n0FA0\nF4A0\n0EA0\nF5A0\n9440\nF4A0\n9D20\nENDCHAR\nSTARTCHAR U_8AD5\nENCODING 35541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\nF100\n07E0\nF520\n07C0\nF520\n05E0\nF400\n95C0\nF940\n9660\nENDCHAR\nSTARTCHAR U_8AD6\nENCODING 35542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nE280\n0440\nEBA0\n0000\nEFE0\n0AA0\nEFE0\nAAA0\nEAA0\nA860\nENDCHAR\nSTARTCHAR U_8AD7\nENCODING 35543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF280\n0440\nF920\n07C0\nF080\n0100\nF2A0\n96A0\nFA40\n91C0\nENDCHAR\nSTARTCHAR U_8AD8\nENCODING 35544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0100\nF7C0\n0100\nFFE0\n0220\nF540\n9C80\nF540\n9620\nENDCHAR\nSTARTCHAR U_8AD9\nENCODING 35545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF480\n07E0\nF480\n0740\nF020\n07C0\nF440\n97C0\nF440\n97C0\nENDCHAR\nSTARTCHAR U_8ADA\nENCODING 35546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF820\n07C0\n7100\n0500\n75E0\n0500\n7700\n5500\n78E0\nENDCHAR\nSTARTCHAR U_8ADB\nENCODING 35547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF560\n0920\nFFE0\n0920\nFFE0\n0100\nF280\n9280\nF440\n9820\nENDCHAR\nSTARTCHAR U_8ADC\nENCODING 35548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\nFFE0\n0540\nF5C0\n0400\nF7E0\n0100\nFFE0\n9380\nF540\n9920\nENDCHAR\nSTARTCHAR U_8ADD\nENCODING 35549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF520\n05C0\nF500\n0BE0\nF7C0\n0440\nF7C0\n9440\nF7C0\n94C0\nENDCHAR\nSTARTCHAR U_8ADE\nENCODING 35550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\nFFE0\n0820\nFFE0\n0800\nFFE0\n0AA0\nFFE0\n9AA0\nFAA0\n9A60\nENDCHAR\nSTARTCHAR U_8ADF\nENCODING 35551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF440\n07C0\nF440\n07C0\nF000\n0FE0\nF100\n95E0\nFB00\n91E0\nENDCHAR\nSTARTCHAR U_8AE0\nENCODING 35552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nF100\n0FE0\nF820\n0FE0\nF440\n07C0\nF440\n97C0\nF000\n9FE0\nENDCHAR\nSTARTCHAR U_8AE1\nENCODING 35553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nF440\n0BA0\nF100\n07C0\nF040\n0380\nF000\n9FE0\nFAA0\n9FE0\nENDCHAR\nSTARTCHAR U_8AE2\nENCODING 35554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF920\n0FE0\nF540\n07C0\nF540\n07C0\nF100\n9FE0\nF100\n9100\nENDCHAR\nSTARTCHAR U_8AE3\nENCODING 35555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n87C0\n4440\nF740\n0540\nEFE0\n0820\nEBA0\n0AA0\nEBA0\nA820\nE860\nENDCHAR\nSTARTCHAR U_8AE4\nENCODING 35556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\nFAA0\n0EE0\nF000\n07C0\nF000\n0FE0\nF200\n97E0\nF020\n91C0\nENDCHAR\nSTARTCHAR U_8AE5\nENCODING 35557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\nFFE0\n0540\n77C0\n0540\n77C0\n0100\n77C0\n5100\n7FE0\nENDCHAR\nSTARTCHAR U_8AE6\nENCODING 35558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0280\nFFE0\n0920\nF7C0\n0540\nF540\n9540\nF5C0\n9100\nENDCHAR\nSTARTCHAR U_8AE7\nENCODING 35559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nF4A0\n07C0\nF4A0\n06E0\nF100\n07C0\nF440\n97C0\nF440\n97C0\nENDCHAR\nSTARTCHAR U_8AE8\nENCODING 35560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF000\n03C0\nF240\n03C0\nF000\n07E0\nF520\n97E0\nF520\n97E0\nENDCHAR\nSTARTCHAR U_8AE9\nENCODING 35561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\nFFE0\n0280\n7280\n0AA0\n76C0\n0280\n7280\n5280\n7FE0\nENDCHAR\nSTARTCHAR U_8AEA\nENCODING 35562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF800\n0380\n7280\n0FE0\n7820\n07C0\n7100\n5100\n7300\nENDCHAR\nSTARTCHAR U_8AEB\nENCODING 35563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0100\nEFE0\n0D60\nFBA0\n0FE0\nF100\n9380\nF540\n9920\nENDCHAR\nSTARTCHAR U_8AEC\nENCODING 35564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n27E0\nFA80\n72A0\nAC60\n0400\nFFE0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8AED\nENCODING 35565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\nF440\n0BA0\nF000\n0E20\nFAA0\n0EA0\nFAA0\n9EA0\nFA20\n9AE0\nENDCHAR\nSTARTCHAR U_8AEE\nENCODING 35566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\nF5E0\n0220\nF480\n0C80\nF540\n0620\nF7E0\n9420\nF7E0\n9420\nENDCHAR\nSTARTCHAR U_8AEF\nENCODING 35567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4520\nF520\n07E0\nF000\n0FE0\nF100\n0FE0\nFAA0\n9AA0\nFAA0\n9860\nENDCHAR\nSTARTCHAR U_8AF0\nENCODING 35568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF520\n0520\nF7E0\n0520\nF7E0\n0100\nF280\n9620\nFA60\n93C0\nENDCHAR\nSTARTCHAR U_8AF1\nENCODING 35569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7C0\n0240\nFFE0\n0440\nF7C0\n0080\nFFE0\n9480\nF7E0\n9080\nENDCHAR\nSTARTCHAR U_8AF2\nENCODING 35570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF280\n0FE0\nFAA0\n0AA0\nFFE0\n0100\nF100\n97C0\nF100\n9FE0\nENDCHAR\nSTARTCHAR U_8AF3\nENCODING 35571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0440\nF280\n0FE0\nF000\n07C0\nF440\n97C0\nF440\n97C0\nENDCHAR\nSTARTCHAR U_8AF4\nENCODING 35572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\nE0A0\n0FE0\nE880\n0F80\nE8A0\n0EA0\nEAA0\nAEC0\nE8A0\nB320\nENDCHAR\nSTARTCHAR U_8AF5\nENCODING 35573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nEFE0\n0100\nEFE0\n0AA0\nE920\n0FE0\nE920\nAFE0\nA920\nE960\nENDCHAR\nSTARTCHAR U_8AF6\nENCODING 35574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\nF7E0\n0240\nF3C0\n0240\nF3C0\n0240\nFFE0\n9540\nF620\n97E0\nENDCHAR\nSTARTCHAR U_8AF7\nENCODING 35575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF440\n07C0\nF540\n07C0\nF540\n0540\nF7C0\n9540\nF560\n9BA0\nENDCHAR\nSTARTCHAR U_8AF8\nENCODING 35576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\nF7A0\n0240\nFFE0\n0100\nF3C0\n0640\nFBC0\n9240\nF3C0\n9240\nENDCHAR\nSTARTCHAR U_8AF9\nENCODING 35577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2240\nF3C0\n0240\nFFE0\n0200\nF7E0\n0AA0\nF4A0\n9120\nF660\nENDCHAR\nSTARTCHAR U_8AFA\nENCODING 35578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0280\nFFE0\n0840\nFB80\n0840\nFBA0\n9840\nF180\n9E00\nENDCHAR\nSTARTCHAR U_8AFB\nENCODING 35579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7C0\n0440\nF7C0\n0440\nFFE0\n0100\nF100\n97C0\nF100\n9FE0\nENDCHAR\nSTARTCHAR U_8AFC\nENCODING 35580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF520\n0240\nF7E0\n0100\nFFE0\n0200\nF3E0\n9540\nF880\n9360\nENDCHAR\nSTARTCHAR U_8AFD\nENCODING 35581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\nFA80\n0380\n7100\n07C0\n7540\n07C0\n7100\n5FE0\n7100\nENDCHAR\nSTARTCHAR U_8AFE\nENCODING 35582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nFFE0\n0480\nF200\n0FE0\nF200\n07C0\nFC40\n9440\nF7C0\n9440\nENDCHAR\nSTARTCHAR U_8AFF\nENCODING 35583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF440\n07C0\nF000\n0FE0\nF540\n04C0\nF640\n9540\nFFE0\n9040\nENDCHAR\nSTARTCHAR U_8B00\nENCODING 35584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n27E0\nFA40\n03C0\n7240\n03C0\n7100\n07E0\n7380\n5540\n7920\nENDCHAR\nSTARTCHAR U_8B01\nENCODING 35585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF440\n07C0\nF440\n07C0\nF200\n07E0\nFCA0\n9560\nF7A0\n90C0\nENDCHAR\nSTARTCHAR U_8B02\nENCODING 35586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF920\n0FE0\nF920\n0FE0\nF440\n07C0\nF440\n97C0\nF440\n94C0\nENDCHAR\nSTARTCHAR U_8B03\nENCODING 35587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n2220\nFBE0\n0220\n73E0\n0480\n7BE0\n0080\n73E0\n5080\n77E0\nENDCHAR\nSTARTCHAR U_8B04\nENCODING 35588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF540\n9FE0\n9200\nFFE0\n9440\n9920\nF7C0\n9000\n97C0\n9440\nB7C0\nENDCHAR\nSTARTCHAR U_8B05\nENCODING 35589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\nF7E0\n0D20\nF7E0\n0120\nF640\n0BE0\nF520\n97E0\nF220\n9CC0\nENDCHAR\nSTARTCHAR U_8B06\nENCODING 35590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0820\nFFE0\n0800\nFFE0\n0DA0\nFB60\n9DA0\nF920\n9360\nENDCHAR\nSTARTCHAR U_8B07\nENCODING 35591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n3F80\n1100\nFFE0\n2480\nDF60\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8B08\nENCODING 35592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n3F80\n1100\nFFE0\n1100\nFFE0\n2480\nDF60\n1100\n1F00\nENDCHAR\nSTARTCHAR U_8B09\nENCODING 35593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2FC0\nFA40\n0FC0\nFA40\n0FC0\nF280\n0340\nF5E0\n9520\nF9E0\nENDCHAR\nSTARTCHAR U_8B0A\nENCODING 35594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nFFE0\n0540\nFFE0\n0400\nF7C0\n0000\nF540\n9540\nF540\n9960\nENDCHAR\nSTARTCHAR U_8B0B\nENCODING 35595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nF7E0\n0D40\nF3E0\n0440\nF940\n0FE0\nF100\n9380\nF540\n9920\nENDCHAR\nSTARTCHAR U_8B0C\nENCODING 35596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2040\nF740\n0540\n7740\n0000\n77E0\n0540\n7740\n5040\n70C0\nENDCHAR\nSTARTCHAR U_8B0D\nENCODING 35597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n56A0\n5AC0\n1080\n2940\nFFE0\n8420\n7FC0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8B0E\nENCODING 35598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n48A0\nF6A0\n01C0\nF080\n0FE0\nF480\n05C0\nF6A0\n94A0\nFA00\n91E0\nENDCHAR\nSTARTCHAR U_8B0F\nENCODING 35599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\nF5E0\n0520\nF7E0\n0520\nF7E0\n0100\nF7E0\n9240\nF180\n9660\nENDCHAR\nSTARTCHAR U_8B10\nENCODING 35600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4120\nF240\n0AA0\nFB20\n05C0\nF800\n07C0\nF540\n9540\nF540\n9FE0\nENDCHAR\nSTARTCHAR U_8B11\nENCODING 35601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\nFE20\n0540\nF280\n0500\nF240\n07E0\nF100\n9FE0\nF280\n9C60\nENDCHAR\nSTARTCHAR U_8B12\nENCODING 35602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\nF540\n0FE0\nF440\n07C0\nF440\n07C0\nF400\n97C0\nFA40\n93C0\nENDCHAR\nSTARTCHAR U_8B13\nENCODING 35603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0200\nF7C0\n0440\nF7C0\n0440\nF7C0\n9440\nFFE0\n9440\nENDCHAR\nSTARTCHAR U_8B14\nENCODING 35604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\nF100\n07E0\nF520\n07C0\nF520\n05E0\nF500\n97E0\nF500\n99E0\nENDCHAR\nSTARTCHAR U_8B15\nENCODING 35605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\nEF00\n09C0\nE900\n0FE0\nE920\n0FC0\nE920\nABE0\nEA80\nB4E0\nENDCHAR\nSTARTCHAR U_8B16\nENCODING 35606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF920\n0FE0\nF920\n0FE0\nF440\n0A20\nF7C0\n9A40\nF180\n9E60\nENDCHAR\nSTARTCHAR U_8B17\nENCODING 35607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0280\nFFE0\n0920\nFFE0\n0200\nF3C0\n9240\nF540\n9880\nENDCHAR\nSTARTCHAR U_8B18\nENCODING 35608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF420\n07E0\nF480\n07E0\nF540\n07E0\nF480\n97E0\nF480\n9880\nENDCHAR\nSTARTCHAR U_8B19\nENCODING 35609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\nFFE0\n0280\nF7E0\n02A0\nFFE0\n02A0\nF7E0\n9280\nF6C0\n9AA0\nENDCHAR\nSTARTCHAR U_8B1A\nENCODING 35610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nF280\n0100\nFFE0\n0440\nF820\n0FC0\nF540\n9540\nF540\n9FE0\nENDCHAR\nSTARTCHAR U_8B1B\nENCODING 35611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF280\n07C0\nF280\n0FE0\nF540\n07C0\nF540\n9FE0\nF440\n94C0\nENDCHAR\nSTARTCHAR U_8B1C\nENCODING 35612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF900\n0BE0\nFA20\n0BE0\nFA20\n0BE0\nF880\n99C0\nFAA0\n95A0\nENDCHAR\nSTARTCHAR U_8B1D\nENCODING 35613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nFE40\n0A40\nFFE0\n0A40\nFF40\n0AC0\nFE40\n9640\nFA40\n96C0\nENDCHAR\nSTARTCHAR U_8B1E\nENCODING 35614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0240\nF3C0\n0000\nFFE0\n0820\nFBA0\n9AA0\nFBA0\n9860\nENDCHAR\nSTARTCHAR U_8B1F\nENCODING 35615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2720\nF520\n02C0\nF100\n0660\nF420\n0760\nF420\n9420\nF7E0\nENDCHAR\nSTARTCHAR U_8B20\nENCODING 35616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF3E0\n0D40\nF580\n0E00\nF3E0\n0480\nF7E0\n9080\nF4A0\n97E0\nENDCHAR\nSTARTCHAR U_8B21\nENCODING 35617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2620\nF940\n0540\n7400\n0BE0\n7080\n07E0\n7080\n54A0\n77E0\nENDCHAR\nSTARTCHAR U_8B22\nENCODING 35618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nF7E0\n0C80\nF7E0\n0480\nF7E0\n0480\nFFE0\n9240\nF180\n9E60\nENDCHAR\nSTARTCHAR U_8B23\nENCODING 35619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF100\n0FE0\nFAA0\n07C0\nF000\n0FE0\nF200\n97C0\nF040\n9380\nENDCHAR\nSTARTCHAR U_8B24\nENCODING 35620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF280\n0FE0\nFAA0\n0FE0\nF000\n07C0\nF000\n9FE0\nF540\n9B20\nENDCHAR\nSTARTCHAR U_8B25\nENCODING 35621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\nFFE0\n0920\nFAE0\n0920\nFAA0\n0FE0\nF100\n96A0\nFA60\n91C0\nENDCHAR\nSTARTCHAR U_8B26\nENCODING 35622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\n1140\n7E20\n57C0\n7D40\n8480\nFFE0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8B27\nENCODING 35623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0540\nF6C0\n07C0\nF100\n0FE0\nF920\n9AA0\nFBA0\n9860\nENDCHAR\nSTARTCHAR U_8B28\nENCODING 35624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nFFE0\n0280\nF7C0\n0440\nF7C0\n0440\nFFE0\n9100\nF280\n9C60\nENDCHAR\nSTARTCHAR U_8B29\nENCODING 35625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FE0\n0900\n3F80\n2480\nFFE0\n1900\n2480\nDF60\n1100\n1F00\nENDCHAR\nSTARTCHAR U_8B2A\nENCODING 35626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0440\nF280\n0FE0\nFAA0\n0C60\nFBA0\n9AA0\nFBA0\n9860\nENDCHAR\nSTARTCHAR U_8B2B\nENCODING 35627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0280\nFFE0\n0920\nFFE0\n0920\nFBA0\n9AA0\nFBA0\n9860\nENDCHAR\nSTARTCHAR U_8B2C\nENCODING 35628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\nFAA0\n0660\nFAA0\n0300\nF480\n0B60\nF000\n9740\nF080\n9700\nENDCHAR\nSTARTCHAR U_8B2D\nENCODING 35629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8440\n5FE0\nEA20\n0EA0\nEAA0\n0E60\nE000\n0FE0\nE220\nA4A0\nE840\nENDCHAR\nSTARTCHAR U_8B2E\nENCODING 35630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0100\nF7C0\n0100\nFFE0\n0440\nF7C0\n9440\nF7C0\n9C60\nENDCHAR\nSTARTCHAR U_8B2F\nENCODING 35631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\nF100\n0FE0\nF920\n0FC0\nF920\n0BE0\nFA40\n9BC0\nFA40\n97E0\nENDCHAR\nSTARTCHAR U_8B30\nENCODING 35632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nE880\n0BE0\nE2A0\n1BE0\nEAA0\n0BE0\nE880\nABE0\nF480\nA3E0\nENDCHAR\nSTARTCHAR U_8B31\nENCODING 35633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7C0\n0540\nFFE0\n0540\nFFE0\n0920\nFFE0\n9480\nF380\n9C60\nENDCHAR\nSTARTCHAR U_8B32\nENCODING 35634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\nFFC0\n0540\n7FE0\n02A0\n7540\n0AA0\n7140\n5080\n7700\nENDCHAR\nSTARTCHAR U_8B33\nENCODING 35635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF800\n0BC0\nFA40\n0BC0\nF800\n0EE0\nFAA0\n9EE0\nF800\n9FE0\nENDCHAR\nSTARTCHAR U_8B34\nENCODING 35636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nF540\n0FE0\n7540\n07C0\n7000\n07C0\n7540\n56C0\n77C0\n0C60\nENDCHAR\nSTARTCHAR U_8B35\nENCODING 35637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\nF220\n0AA0\nF660\n0AA0\nF100\n07C0\nF440\n97C0\nF440\n97C0\nENDCHAR\nSTARTCHAR U_8B36\nENCODING 35638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nF7E0\n0400\nF540\n07E0\nF540\n05C0\nF400\n9940\nF2A0\n92A0\nENDCHAR\nSTARTCHAR U_8B37\nENCODING 35639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7DE0\n1340\nFC80\n2760\n4800\nFFE0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8B38\nENCODING 35640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nEE80\n0480\nEFE0\n0540\nFF40\n0940\nEE80\nAA80\nEB40\nB520\nENDCHAR\nSTARTCHAR U_8B39\nENCODING 35641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nFFE0\n0280\nF100\n07C0\nF540\n0FE0\nF100\n97C0\nF100\n9FE0\nENDCHAR\nSTARTCHAR U_8B3A\nENCODING 35642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n27C0\nF940\n5340\nFAC0\n2420\nFFE0\n0000\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_8B3B\nENCODING 35643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nFCE0\n0520\nFEC0\n0480\nF760\n0CA0\nF520\n96C0\nF480\n9700\nENDCHAR\nSTARTCHAR U_8B3C\nENCODING 35644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\nF100\n0FE0\nF920\n0FC0\nF920\n0FE0\nFAA0\n9FE0\nF880\n9180\nENDCHAR\nSTARTCHAR U_8B3D\nENCODING 35645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n1240\nF7E0\n8520\nF7E0\n1520\nFFE0\n0000\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_8B3E\nENCODING 35646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF440\n07C0\nF440\n0FE0\nFAA0\n0FE0\nF440\n9280\nF100\n9EE0\nENDCHAR\nSTARTCHAR U_8B3F\nENCODING 35647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2EE0\nF4A0\n0EE0\n7AA0\n0EA0\n74E0\n0EA0\n74A0\n5520\n7660\nENDCHAR\nSTARTCHAR U_8B40\nENCODING 35648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4D00\nF500\n0FE0\nFAA0\n0EA0\nFAA0\n0AA0\nFEA0\n9B40\nFEA0\n9320\nENDCHAR\nSTARTCHAR U_8B41\nENCODING 35649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nFFE0\n0280\nFFE0\n0540\nFFE0\n0540\nFFE0\n9100\nF7C0\n9100\nENDCHAR\nSTARTCHAR U_8B42\nENCODING 35650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\nFAA0\n0FE0\nF540\n07C0\nF540\n07C0\nF100\n9FE0\nF100\n9100\nENDCHAR\nSTARTCHAR U_8B43\nENCODING 35651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n2100\nFFE0\n0520\n77C0\n0520\n74E0\n0540\n7760\n5940\n77E0\nENDCHAR\nSTARTCHAR U_8B44\nENCODING 35652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nFFE0\n0D60\n7BA0\n0FE0\n7000\n07C0\n7440\n57C0\n7440\n57C0\nENDCHAR\nSTARTCHAR U_8B45\nENCODING 35653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\nEAA0\n1BA0\nE2A0\n0D40\nE440\n0440\nF760\n9540\nF540\n9FE0\nENDCHAR\nSTARTCHAR U_8B46\nENCODING 35654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0100\nFFE0\n0440\nF7C0\n0280\nFFE0\n9440\nF440\n97C0\nENDCHAR\nSTARTCHAR U_8B47\nENCODING 35655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0540\nFBA0\n0140\nFFE0\n0240\nF7C0\n9A40\nF3C0\n9240\nENDCHAR\nSTARTCHAR U_8B48\nENCODING 35656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nFE80\n0BE0\nFEA0\n00A0\nFEA0\n02A0\nF4A0\n9E40\nF4A0\n9D20\nENDCHAR\nSTARTCHAR U_8B49\nENCODING 35657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F40\nF580\n02A0\nF240\n07C0\nF820\n07C0\nF440\n97C0\nF280\n9FE0\nENDCHAR\nSTARTCHAR U_8B4A\nENCODING 35658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7C0\n0100\nFFE0\n0440\nFEE0\n0440\nFFE0\n9280\nF4A0\n9860\nENDCHAR\nSTARTCHAR U_8B4B\nENCODING 35659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\nFAA0\n0EE0\nFAA0\n0FE0\nFAA0\n0BA0\nFAA0\n9BA0\nFAA0\n9DE0\nENDCHAR\nSTARTCHAR U_8B4C\nENCODING 35660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\nEFC0\n0540\nEFC0\n0880\nEFC0\n0840\nEFE0\nA820\nEAA0\nB540\nENDCHAR\nSTARTCHAR U_8B4D\nENCODING 35661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4A80\n57E0\n7C80\n57E0\n5480\n7FE0\n4840\n4840\n8FC0\nENDCHAR\nSTARTCHAR U_8B4E\nENCODING 35662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\nF280\n0FE0\nF540\n0900\nFFE0\n0AA0\nFFE0\n9AA0\nFBA0\n9860\nENDCHAR\nSTARTCHAR U_8B4F\nENCODING 35663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\nF5A0\n0B40\nFDE0\n0340\nFFE0\n0500\nF540\n96A0\nF960\n9220\nENDCHAR\nSTARTCHAR U_8B50\nENCODING 35664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nFFE0\n0280\nFFE0\n0AA0\nFCE0\n0BA0\nF8A0\n9FE0\nF480\n9380\nENDCHAR\nSTARTCHAR U_8B51\nENCODING 35665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\nF200\n0FE0\nFCC0\n07A0\nF000\n0FE0\nF820\n9BA0\nFAA0\n9BE0\nENDCHAR\nSTARTCHAR U_8B52\nENCODING 35666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\nFF20\n0540\nFFE0\n0380\nF540\n0FE0\nF540\n97C0\nF540\n97C0\nENDCHAR\nSTARTCHAR U_8B53\nENCODING 35667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0540\nF7C0\n0540\nF7C0\n0140\nFFA0\n9540\nFC60\n97C0\nENDCHAR\nSTARTCHAR U_8B54\nENCODING 35668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\nFAA0\n0EE0\nF880\n0EE0\nF240\n07E0\nF240\n9FE0\nF240\n9C20\nENDCHAR\nSTARTCHAR U_8B55\nENCODING 35669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\nF7E0\n0D40\nF540\n0FE0\nF540\n0540\nFFE0\n9540\nFAA0\n92A0\nENDCHAR\nSTARTCHAR U_8B56\nENCODING 35670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\nF540\n1FE0\nECC0\n1760\nE000\n07C0\nE440\nA7C0\nE440\nA7C0\nENDCHAR\nSTARTCHAR U_8B57\nENCODING 35671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nF7E0\n0A40\nF120\n0280\nF440\n0BA0\nF000\n97C0\nF440\n97C0\nENDCHAR\nSTARTCHAR U_8B58\nENCODING 35672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nEFC0\n0AA0\nE480\n0FE0\nE080\n0EA0\nEAC0\nAEA0\nEB60\nAE20\nENDCHAR\nSTARTCHAR U_8B59\nENCODING 35673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nF7E0\n0C80\nF7C0\n0480\nF7C0\n0480\nF7E0\n9540\nFAA0\n92A0\nENDCHAR\nSTARTCHAR U_8B5A\nENCODING 35674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF280\n0FE0\nFAA0\n0FE0\nF440\n07C0\nF440\n9FE0\nF100\n9100\nENDCHAR\nSTARTCHAR U_8B5B\nENCODING 35675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2EE0\nF440\n0FE0\n76C0\n0920\n77C0\n0440\n77C0\n5440\n77C0\nENDCHAR\nSTARTCHAR U_8B5C\nENCODING 35676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nFFE0\n0AA0\nF6C0\n0FE0\nF000\n07C0\nF440\n97C0\nF440\n97C0\nENDCHAR\nSTARTCHAR U_8B5D\nENCODING 35677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nFAA0\n0EE0\nF280\n0EE0\nFAA0\n0EE0\nFAA0\n9EE0\nF2A0\n93E0\nENDCHAR\nSTARTCHAR U_8B5E\nENCODING 35678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\nFFE0\n0000\n77C0\n0440\n77C0\n0320\n76C0\n5A40\n7320\nENDCHAR\nSTARTCHAR U_8B5F\nENCODING 35679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF440\n07C0\nF000\n0EE0\nFAA0\n0EE0\nF100\n9FE0\nF540\n9920\nENDCHAR\nSTARTCHAR U_8B60\nENCODING 35680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0BA0\nF820\n0FE0\nF440\n07C0\nF440\n97C0\nF000\n9FE0\nENDCHAR\nSTARTCHAR U_8B61\nENCODING 35681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2540\nFFE0\n0820\n7380\n0280\n77E0\n0520\n77E0\n5520\n77E0\nENDCHAR\nSTARTCHAR U_8B62\nENCODING 35682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\nF7E0\n0900\nE2A0\n1DC0\nEA80\n0DC0\nEAA0\nA880\nED00\nB3E0\nENDCHAR\nSTARTCHAR U_8B63\nENCODING 35683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF280\n0440\nFBA0\n0000\nFEE0\n0AA0\nFEE0\n9440\nFAA0\n9120\nENDCHAR\nSTARTCHAR U_8B64\nENCODING 35684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8480\n4E80\nFA80\n0EE0\nEB20\n0F20\nE4A0\n1F40\nE440\nAAA0\nF520\nENDCHAR\nSTARTCHAR U_8B65\nENCODING 35685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBE0\nA940\nFC80\n5140\n8A20\nFFE0\n0000\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_8B66\nENCODING 35686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n49E0\nFE80\n5540\nFFE0\n0000\n7FC0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8B67\nENCODING 35687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nEFE0\n0A80\nEFE0\n0AA0\nEFE0\n0AA0\nEFE0\nAA80\nEEC0\nB2A0\nENDCHAR\nSTARTCHAR U_8B68\nENCODING 35688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nFFE0\n0AA0\nFFE0\n0AA0\nFFE0\n0800\nFFE0\n9AA0\nFA40\n9720\nENDCHAR\nSTARTCHAR U_8B69\nENCODING 35689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF240\n0FE0\n7440\n07C0\n7440\n07C0\n7520\n5A40\n73C0\nENDCHAR\nSTARTCHAR U_8B6A\nENCODING 35690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nFFE0\n0440\nF7C0\n0440\nF7E0\n0520\nFEA0\n9460\nF7A0\n9040\nENDCHAR\nSTARTCHAR U_8B6B\nENCODING 35691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\nE480\n0FE0\nEA40\n0DA0\nE800\n0BC0\nE800\nABC0\nEA40\nB3C0\nENDCHAR\nSTARTCHAR U_8B6C\nENCODING 35692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8A80\nFFC0\n9100\nFFE0\n0000\n3F80\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8B6D\nENCODING 35693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AE0\nF2A0\n1EA0\nF2A0\n1F00\nE0E0\n1FA0\nE4A0\nA440\nE6A0\nB920\nENDCHAR\nSTARTCHAR U_8B6E\nENCODING 35694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\nF440\n0FE0\n7D60\n0BA0\n7FE0\n0440\n77C0\n5440\n77C0\nENDCHAR\nSTARTCHAR U_8B6F\nENCODING 35695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nFAA0\n0FE0\nF7C0\n0100\nFFE0\n0280\nFFE0\n9100\nFFE0\n9100\nENDCHAR\nSTARTCHAR U_8B70\nENCODING 35696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\nFFE0\n0100\nF7C0\n0100\nFFE0\n04A0\nFFE0\n94A0\nFE40\n95A0\nENDCHAR\nSTARTCHAR U_8B71\nENCODING 35697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0400\n7FC0\n0400\nFFE0\n2480\nFFE0\n75C0\n5540\n75C0\nENDCHAR\nSTARTCHAR U_8B72\nENCODING 35698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nEFE0\n0440\nEAA0\n0FC0\nE280\n1FE0\nE540\nAC80\nF640\n0420\nENDCHAR\nSTARTCHAR U_8B73\nENCODING 35699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n4100\nFFE0\n0BA0\nE540\n0FE0\nE200\n0FE0\nEAA0\nAAA0\nE860\nENDCHAR\nSTARTCHAR U_8B74\nENCODING 35700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nEBE0\n06A0\nF2A0\n0FE0\nF520\n05E0\nF500\n95E0\nF520\n9BE0\nENDCHAR\nSTARTCHAR U_8B75\nENCODING 35701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A20\nEAA0\n1B20\nFFE0\n0A20\nEEA0\n0460\nEE20\nA420\nE6A0\n1840\nENDCHAR\nSTARTCHAR U_8B76\nENCODING 35702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0000\n3F80\n2080\n3F80\n2100\nFFE0\n4A40\n4A40\n7BC0\nENDCHAR\nSTARTCHAR U_8B77\nENCODING 35703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF240\n0480\nF7E0\n0C80\nF7E0\n0480\nF7E0\n9240\nF180\n9E60\nENDCHAR\nSTARTCHAR U_8B78\nENCODING 35704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nEFE0\n0100\nEFE0\n0120\nEFC0\n0040\nEFE0\nAB40\nEEC0\nA0C0\nENDCHAR\nSTARTCHAR U_8B79\nENCODING 35705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0440\nFFE0\n0820\nFFE0\n0520\nFAC0\n9580\nFAC0\n9520\nENDCHAR\nSTARTCHAR U_8B7A\nENCODING 35706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n55E0\nF8A0\n1240\nFFE0\n0860\nFF40\n0940\nFF60\nA940\nF540\nA2E0\nENDCHAR\nSTARTCHAR U_8B7B\nENCODING 35707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4A40\nFFE0\n0000\n7FC0\n0000\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_8B7C\nENCODING 35708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n5500\n7BE0\n52A0\n7FE0\n0400\nFFE0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8B7D\nENCODING 35709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6EC0\n4840\n7FC0\n4A40\nFFE0\n4040\nBFA0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8B7E\nENCODING 35710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\nFFE0\n0A20\nFEA0\n0AA0\nFA60\n0FE0\nFAA0\n9660\nFBA0\n9660\nENDCHAR\nSTARTCHAR U_8B7F\nENCODING 35711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\nE440\n0EE0\nE440\n0EE0\nE7C0\n0040\nEFC0\nA520\nECA0\nB7C0\nENDCHAR\nSTARTCHAR U_8B80\nENCODING 35712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0100\nFFE0\n0AA0\nFFE0\n0440\nF7C0\n9440\nF7C0\n9C60\nENDCHAR\nSTARTCHAR U_8B81\nENCODING 35713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nF7E0\n0940\nE3E0\n1AA0\nEBE0\n0AA0\nEBE0\nAB60\nEAA0\n17E0\nENDCHAR\nSTARTCHAR U_8B82\nENCODING 35714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\nF480\n0FE0\nFAA0\n07C0\nF640\n0540\nF7C0\n9C40\nF380\n9C60\nENDCHAR\nSTARTCHAR U_8B83\nENCODING 35715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\nFFE0\n0440\n7FE0\n0AA0\n77C0\n0540\n76C0\n5540\n77C0\n0C60\nENDCHAR\nSTARTCHAR U_8B84\nENCODING 35716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF540\n07C0\nF540\n07C0\nF000\n0FE0\nFAA0\n9FE0\nFAA0\n9FE0\nENDCHAR\nSTARTCHAR U_8B85\nENCODING 35717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0920\nF540\n0FE0\nF540\n0FE0\nF540\n97C0\nF540\n97C0\nENDCHAR\nSTARTCHAR U_8B86\nENCODING 35718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n4A00\nBFE0\n6A40\n3F40\n22C0\n7FE0\n0000\n3FC0\n2040\n3FC0\nENDCHAR\nSTARTCHAR U_8B87\nENCODING 35719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\nEAA0\n0EE0\nEAA0\n0FE0\nE920\n0AA0\nEAA0\nAAA0\nEBA0\n0860\nENDCHAR\nSTARTCHAR U_8B88\nENCODING 35720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nFEC0\n0A40\nFFE0\n0A40\nFFE0\n0A40\nF880\n92E0\nF280\n9FE0\nENDCHAR\nSTARTCHAR U_8B89\nENCODING 35721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nE7C0\n1540\nEFE0\n0240\nFBC0\n0A40\nEBC0\nAA40\nEC20\n17E0\nENDCHAR\nSTARTCHAR U_8B8A\nENCODING 35722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nAEA0\n4040\nAEA0\nEAE0\n5E40\nA0A0\n1FC0\n6900\n0600\n79E0\nENDCHAR\nSTARTCHAR U_8B8B\nENCODING 35723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5200\nFBE0\n4A00\n7BC0\n4A20\nFFE0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8B8C\nENCODING 35724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nFFE0\n0280\nF380\n0440\nFFE0\n0440\nFFE0\n9540\nFAA0\n92A0\nENDCHAR\nSTARTCHAR U_8B8D\nENCODING 35725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\nE200\n0EE0\nEAA0\n0EE0\nE200\n1FE0\nEAA0\nAEE0\nE200\nBFE0\nENDCHAR\nSTARTCHAR U_8B8E\nENCODING 35726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nAF40\nF1E0\nAF40\nA140\nFFE0\nA140\nFFE0\nA940\nAF40\nF1E0\nENDCHAR\nSTARTCHAR U_8B8F\nENCODING 35727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n4F60\nA500\n5FE0\nC540\n4940\nFFE0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8B90\nENCODING 35728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\n7BE0\nD680\n5280\n7BE0\n0400\n7FC0\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8B91\nENCODING 35729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nE280\n0440\nEFE0\n0AA0\nEFE0\n0000\nEFE0\nAAA0\nEFE0\nAAA0\nENDCHAR\nSTARTCHAR U_8B92\nENCODING 35730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\nFFC0\n0440\nF7C0\n0480\nF7A0\n0FE0\nF540\n97C0\nF2A0\n9CE0\nENDCHAR\nSTARTCHAR U_8B93\nENCODING 35731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\n0AA0\nFEE0\n0280\nFFE0\n0280\nFFE0\n96A0\nFA40\n9320\nENDCHAR\nSTARTCHAR U_8B94\nENCODING 35732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\nFAA0\n0BE0\nFC20\n0BE0\nFA20\n0BE0\nFC80\n9B20\nFD40\n99C0\nENDCHAR\nSTARTCHAR U_8B95\nENCODING 35733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\nFAA0\n0EE0\nFAA0\n0EE0\nFFE0\n0AA0\nFFE0\n9BA0\nFD60\n9960\nENDCHAR\nSTARTCHAR U_8B96\nENCODING 35734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AC0\nF5A0\n1FE0\nEA80\n1B80\nEAA0\n1BA0\nEAC0\nAAA0\nFF60\nA220\nENDCHAR\nSTARTCHAR U_8B97\nENCODING 35735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\nEFE0\n0900\nEFC0\n1900\nEFE0\n0000\nEFE0\nAAA0\nEBA0\nA860\nENDCHAR\nSTARTCHAR U_8B98\nENCODING 35736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF440\n07C0\nF440\n0FE0\nF040\n0FE0\nFAA0\n9EE0\nFAA0\n9FE0\nENDCHAR\nSTARTCHAR U_8B99\nENCODING 35737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\nF280\n0EE0\nFAA0\n0EE0\nF480\n0FE0\nF480\n97E0\nF480\n97E0\nENDCHAR\nSTARTCHAR U_8B9A\nENCODING 35738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\nEFE0\n0240\nEFE0\n0540\nEFE0\n0440\nE7C0\nA440\nE7C0\nAC60\nENDCHAR\nSTARTCHAR U_8B9B\nENCODING 35739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nEFE0\n0480\nEFE0\n0AA0\nE5A0\n0EE0\nE000\nAFE0\nE280\nA7C0\nENDCHAR\nSTARTCHAR U_8B9C\nENCODING 35740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\nEFE0\n0AA0\nEFE0\n0AA0\nEFE0\n0100\nE7C0\nA100\nEFE0\nAAA0\nENDCHAR\nSTARTCHAR U_8B9D\nENCODING 35741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\nEAA0\n0FE0\nE940\n0940\nEFE0\n0AA0\nEBA0\nAAA0\nEFC0\n90A0\nENDCHAR\nSTARTCHAR U_8B9E\nENCODING 35742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4740\nE460\n1F40\nF5E0\n1F40\nF040\n1740\nF540\n9F40\nF5A0\n9520\nENDCHAR\nSTARTCHAR U_8B9F\nENCODING 35743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nFFE0\n0400\nFFE0\n1500\nFFE0\n0A00\nEEE0\nAAA0\nEEE0\nBBA0\nENDCHAR\nSTARTCHAR U_8BA0\nENCODING 35744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2000\n2000\n0000\nE000\n2000\n2000\n2800\n3000\n2000\n0000\nENDCHAR\nSTARTCHAR U_8BA1\nENCODING 35745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n0100\n0FE0\nE100\n2100\n2100\n2900\n3100\n2100\n0100\nENDCHAR\nSTARTCHAR U_8BA2\nENCODING 35746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\n0080\n0080\nE080\n2080\n2080\n2080\n2880\n3080\n2380\nENDCHAR\nSTARTCHAR U_8BA3\nENCODING 35747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n0100\n0100\nE180\n2140\n2120\n2920\n3100\n2100\n0100\nENDCHAR\nSTARTCHAR U_8BA4\nENCODING 35748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n0100\n0100\nE100\n2100\n2280\n2A80\n3440\n2840\n1020\nENDCHAR\nSTARTCHAR U_8BA5\nENCODING 35749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\n2480\n0480\n0480\nE480\n2480\n2480\n2C80\n34A0\n28A0\n1060\nENDCHAR\nSTARTCHAR U_8BA6\nENCODING 35750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\n0100\n0100\nEFE0\n2100\n2100\n2100\n2900\n3100\n2100\nENDCHAR\nSTARTCHAR U_8BA7\nENCODING 35751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\n0100\n0100\nE100\n2100\n2100\n2900\n3100\n2FE0\n0000\nENDCHAR\nSTARTCHAR U_8BA8\nENCODING 35752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2040\n0040\nE7E0\n2040\n2240\n2140\n2140\n2840\n3040\n21C0\nENDCHAR\nSTARTCHAR U_8BA9\nENCODING 35753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n2100\n0100\nE1E0\n2100\n2100\n2100\n2900\n3100\n2FE0\nENDCHAR\nSTARTCHAR U_8BAA\nENCODING 35754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n0100\n0520\nE520\n2520\n2520\n2D20\n3520\n27E0\n0420\nENDCHAR\nSTARTCHAR U_8BAB\nENCODING 35755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\n0400\n0800\nE7C0\n2080\n2100\n2A00\n3420\n2420\n03E0\nENDCHAR\nSTARTCHAR U_8BAC\nENCODING 35756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n41C0\n4E00\n0200\nE200\n23C0\n2E00\n2200\n2220\n3220\n21E0\nENDCHAR\nSTARTCHAR U_8BAD\nENCODING 35757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n2520\n0520\nE520\n2520\n2520\n2520\n2D20\n3520\n2420\n0820\nENDCHAR\nSTARTCHAR U_8BAE\nENCODING 35758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2140\n0540\n0440\nE440\n2280\n2280\n2900\n3280\n2440\n0820\nENDCHAR\nSTARTCHAR U_8BAF\nENCODING 35759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9F80\n4480\n4480\n0480\nC480\n5F80\n4480\n54A0\n64A0\n4460\n0420\nENDCHAR\nSTARTCHAR U_8BB0\nENCODING 35760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n27C0\n0040\n0040\nE040\n27C0\n2400\n2400\n2C20\n3420\n23E0\nENDCHAR\nSTARTCHAR U_8BB1\nENCODING 35761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n4FE0\n2120\n0120\nE520\n2520\n2920\n2220\n2220\n3540\n2880\nENDCHAR\nSTARTCHAR U_8BB2\nENCODING 35762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8480\n4480\n1FE0\nC480\n4480\n5FE0\n4480\n5480\n6480\n4880\n1080\nENDCHAR\nSTARTCHAR U_8BB3\nENCODING 35763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n07C0\nE100\n2FE0\n2120\n2920\n31A0\n2140\n0100\nENDCHAR\nSTARTCHAR U_8BB4\nENCODING 35764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2400\n0440\n0640\nE540\n2480\n2480\n2D40\n3640\n2400\n07E0\nENDCHAR\nSTARTCHAR U_8BB5\nENCODING 35765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2400\n0400\nE7C0\n2440\n2440\n27C0\n2C40\n3400\n2400\n07E0\nENDCHAR\nSTARTCHAR U_8BB6\nENCODING 35766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2080\n0480\nC480\n4FE0\n4080\n4180\n5280\n6480\n4A80\n1100\nENDCHAR\nSTARTCHAR U_8BB7\nENCODING 35767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n07E0\n0520\nE520\n25A0\n2660\n2C20\n3420\n2420\n0460\nENDCHAR\nSTARTCHAR U_8BB8\nENCODING 35768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2400\n07C0\n0900\nE100\n2FE0\n2100\n2900\n3100\n2100\n0100\nENDCHAR\nSTARTCHAR U_8BB9\nENCODING 35769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8500\n4500\n0920\nC940\n5980\n4900\n4B00\n5900\n6920\n4920\n09E0\nENDCHAR\nSTARTCHAR U_8BBA\nENCODING 35770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n0280\n0440\nE820\n2240\n2280\n2300\n2A20\n3220\n23E0\nENDCHAR\nSTARTCHAR U_8BBB\nENCODING 35771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8840\n4440\n4AA0\n0AA0\nC920\n4920\n4AA0\n5C60\n6820\n4FE0\n0820\nENDCHAR\nSTARTCHAR U_8BBC\nENCODING 35772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2280\n0240\n0440\nE420\n2900\n2100\n2A40\n3240\n27A0\n0420\nENDCHAR\nSTARTCHAR U_8BBD\nENCODING 35773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n04C0\nE6C0\n2540\n2540\n2540\n2EC0\n3440\n2820\n1020\nENDCHAR\nSTARTCHAR U_8BBE\nENCODING 35774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\n2480\n0480\n08E0\nE000\n2FC0\n2440\n2280\n3100\n2280\n1C60\nENDCHAR\nSTARTCHAR U_8BBF\nENCODING 35775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n0FE0\n0200\nE3C0\n2240\n2240\n2A40\n3240\n2440\n0980\nENDCHAR\nSTARTCHAR U_8BC0\nENCODING 35776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n07C0\n0140\nE140\n2FE0\n2100\n2900\n3280\n2440\n0820\nENDCHAR\nSTARTCHAR U_8BC1\nENCODING 35777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2FE0\n2100\n0100\nE500\n25C0\n2500\n2D00\n3500\n2500\n1FE0\nENDCHAR\nSTARTCHAR U_8BC2\nENCODING 35778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n8200\n4200\n1FE0\nC200\n4200\n4FC0\n4840\n5840\n6FC0\n4840\nENDCHAR\nSTARTCHAR U_8BC3\nENCODING 35779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2040\n0040\nE740\n2540\n2540\n2740\n2D40\n3040\n2140\n0080\nENDCHAR\nSTARTCHAR U_8BC4\nENCODING 35780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n0920\n0540\nE100\n2FE0\n2100\n2900\n3100\n2100\n0100\nENDCHAR\nSTARTCHAR U_8BC5\nENCODING 35781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n0440\n0440\nE7C0\n2440\n2440\n2FC0\n3440\n6440\n0FE0\nENDCHAR\nSTARTCHAR U_8BC6\nENCODING 35782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2420\n0420\n0420\nE420\n27E0\n2420\n2A80\n3240\n2420\n0820\nENDCHAR\nSTARTCHAR U_8BC7\nENCODING 35783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4820\n0820\nCBA0\n4AA0\n4AA0\n4AA0\n4BA0\n6820\n48A0\n0840\nENDCHAR\nSTARTCHAR U_8BC8\nENCODING 35784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n03E0\n0500\nE900\n21E0\n2100\n2100\n29E0\n3100\n2100\nENDCHAR\nSTARTCHAR U_8BC9\nENCODING 35785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2700\n0400\n07E0\nE480\n2580\n24C0\n2CA0\n34A0\n2480\n0880\nENDCHAR\nSTARTCHAR U_8BCA\nENCODING 35786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\n0440\n0920\nE200\n2480\n2120\n2A40\n3080\n6100\n0600\nENDCHAR\nSTARTCHAR U_8BCB\nENCODING 35787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n2780\n0480\nE480\n27E0\n2480\n2480\n2CA0\n35A0\n2660\n0520\nENDCHAR\nSTARTCHAR U_8BCC\nENCODING 35788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23E0\n0440\n0FE0\nE020\n2020\n27E0\n2820\n3020\n27E0\n0020\nENDCHAR\nSTARTCHAR U_8BCD\nENCODING 35789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2020\n0FA0\nE020\n2720\n2520\n2520\n2720\n3020\n20A0\n0040\nENDCHAR\nSTARTCHAR U_8BCE\nENCODING 35790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2520\n0520\n0520\nE7E0\n2100\n2520\n2D20\n3520\n27E0\n0420\nENDCHAR\nSTARTCHAR U_8BCF\nENCODING 35791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2120\n2120\n0220\nE4A0\n2840\n27E0\n2420\n3420\n27E0\n0420\nENDCHAR\nSTARTCHAR U_8BD0\nENCODING 35792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4100\n0FE0\nC920\n4900\n4FE0\n4A40\n4980\n6980\n5240\n2420\nENDCHAR\nSTARTCHAR U_8BD1\nENCODING 35793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n0280\n0380\nEC60\n2100\n27C0\n2100\n37E0\n2100\n0100\nENDCHAR\nSTARTCHAR U_8BD2\nENCODING 35794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2200\n0440\n0FE0\nE020\n2000\n27C0\n2C40\n3440\n27C0\n0440\nENDCHAR\nSTARTCHAR U_8BD3\nENCODING 35795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2400\n07E0\n0480\nE480\n25C0\n2480\n2480\n37E0\n2400\n07E0\nENDCHAR\nSTARTCHAR U_8BD4\nENCODING 35796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n07C0\nE100\n2FE0\n2100\n2B80\n3540\n6920\n1120\nENDCHAR\nSTARTCHAR U_8BD5\nENCODING 35797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n2120\n1FE0\n0100\nEF00\n2500\n2500\n24A0\n26A0\n3860\n2020\nENDCHAR\nSTARTCHAR U_8BD6\nENCODING 35798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n0100\nE100\n2FE0\n2000\n2100\n2FC0\n3100\n2100\n0FE0\nENDCHAR\nSTARTCHAR U_8BD7\nENCODING 35799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FC0\n0100\nDFE0\n4080\n4FE0\n4080\n5480\n6280\n4080\n0180\nENDCHAR\nSTARTCHAR U_8BD8\nENCODING 35800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\n0100\nE7C0\n2000\n27C0\n2440\n3440\n27C0\n0440\nENDCHAR\nSTARTCHAR U_8BD9\nENCODING 35801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FE0\n0200\n0280\nE4A0\n2AA0\n22C0\n2880\n3140\n6220\n0420\nENDCHAR\nSTARTCHAR U_8BDA\nENCODING 35802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n2120\n1FE0\nD100\n5100\n5D40\n5540\n5480\n74A0\n5960\n2220\nENDCHAR\nSTARTCHAR U_8BDB\nENCODING 35803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2500\n07E0\nC900\n4100\n5FE0\n4100\n5380\n6540\n4920\n0100\nENDCHAR\nSTARTCHAR U_8BDC\nENCODING 35804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2500\n07C0\n0900\nE100\n2FE0\n2280\n2280\n32A0\n24A0\n0860\nENDCHAR\nSTARTCHAR U_8BDD\nENCODING 35805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2700\n0100\nEFE0\n2100\n2100\n27C0\n2440\n3440\n27C0\n0440\nENDCHAR\nSTARTCHAR U_8BDE\nENCODING 35806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8060\n5B80\n0880\nC880\n52E0\n4A80\n4A80\n5A80\n6BE0\n5400\n23E0\nENDCHAR\nSTARTCHAR U_8BDF\nENCODING 35807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n2780\n0400\n07E0\nE400\n2400\n25E0\n2D20\n3520\n29E0\n1120\nENDCHAR\nSTARTCHAR U_8BE0\nENCODING 35808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\n0440\n0820\nE7C0\n2100\n2100\n2FC0\n3100\n6100\n0FE0\nENDCHAR\nSTARTCHAR U_8BE1\nENCODING 35809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8400\n4780\n0900\n1FE0\nC800\n4BC0\n4A40\n5AC0\n6A20\n5220\n23E0\nENDCHAR\nSTARTCHAR U_8BE2\nENCODING 35810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n0820\nF7A0\n24A0\n27A0\n24A0\n24A0\n37A0\n2020\n00C0\nENDCHAR\nSTARTCHAR U_8BE3\nENCODING 35811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n24C0\n0700\nE420\n23E0\n2000\n27E0\n2C20\n37E0\n6420\n07E0\nENDCHAR\nSTARTCHAR U_8BE4\nENCODING 35812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23C0\n2480\n0FC0\nE140\n2FE0\n2140\n27C0\n3100\n2100\n0300\nENDCHAR\nSTARTCHAR U_8BE5\nENCODING 35813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n0FE0\nE100\n2240\n2780\n2120\n2A40\n3480\n2140\n0620\nENDCHAR\nSTARTCHAR U_8BE6\nENCODING 35814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n0FE0\nE100\n27C0\n2100\n2100\n2FE0\n3100\n2100\n0100\nENDCHAR\nSTARTCHAR U_8BE7\nENCODING 35815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5FE0\n1020\n0180\nEE00\n2260\n2380\n2E00\n2A20\n3220\n21E0\nENDCHAR\nSTARTCHAR U_8BE8\nENCODING 35816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n0200\nEFE0\n2200\n2500\n2FC0\n2100\n3FE0\n2100\n0100\nENDCHAR\nSTARTCHAR U_8BE9\nENCODING 35817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2120\n25A0\n0360\nE120\n2360\n25A0\n2920\n3120\n25A0\n0240\nENDCHAR\nSTARTCHAR U_8BEA\nENCODING 35818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5FE0\n0200\nCFC0\n4200\n5FE0\n4440\n4FE0\n6A40\n5140\n2080\nENDCHAR\nSTARTCHAR U_8BEB\nENCODING 35819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n80C0\n40A0\n1FE0\nCA80\n4A80\n5FA0\n4AC0\n5A80\n6AA0\n4960\n1220\nENDCHAR\nSTARTCHAR U_8BEC\nENCODING 35820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n0540\nE540\n2540\n2540\n2BA0\n2920\n3100\n2100\n0FE0\nENDCHAR\nSTARTCHAR U_8BED\nENCODING 35821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n07C0\nE240\n2240\n2FE0\n2000\n2FC0\n3440\n2440\n07C0\nENDCHAR\nSTARTCHAR U_8BEE\nENCODING 35822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2540\n0100\n07E0\nE420\n27E0\n2420\n2FE0\n3420\n2420\n0460\nENDCHAR\nSTARTCHAR U_8BEF\nENCODING 35823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n0440\n07C0\nE000\n27C0\n2100\n2FE0\n3280\n2440\n0820\nENDCHAR\nSTARTCHAR U_8BF0\nENCODING 35824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2500\n27C0\n0900\nF100\n2FE0\n2000\n2FC0\n3440\n2440\n07C0\nENDCHAR\nSTARTCHAR U_8BF1\nENCODING 35825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n2F80\n0100\nEFE0\n2540\n2920\n27C0\n2A80\n32E0\n2420\n08C0\nENDCHAR\nSTARTCHAR U_8BF2\nENCODING 35826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n0800\nE7C0\n2540\n2FE0\n2540\n2D40\n37E0\n2040\n0180\nENDCHAR\nSTARTCHAR U_8BF3\nENCODING 35827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97E0\n4880\n1480\n0480\nE480\n2FE0\n3480\n2C80\n3480\n2480\n0FE0\nENDCHAR\nSTARTCHAR U_8BF4\nENCODING 35828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n07C0\n0440\nE440\n27C0\n2280\n2A80\n32A0\n24A0\n08E0\nENDCHAR\nSTARTCHAR U_8BF5\nENCODING 35829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2240\n0180\nEFE0\n2920\n2FE0\n2920\n2FE0\n3920\n2920\n0860\nENDCHAR\nSTARTCHAR U_8BF6\nENCODING 35830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n4440\n2FC0\n2400\n07C0\nE900\n2100\n2FE0\n3280\n2440\n1820\nENDCHAR\nSTARTCHAR U_8BF7\nENCODING 35831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n2100\n07C0\nE100\n2FE0\n2440\n27C0\n2440\n37C0\n2440\nENDCHAR\nSTARTCHAR U_8BF8\nENCODING 35832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27A0\n0240\nEFE0\n2200\n27C0\n2440\n2FC0\n3440\n27C0\n0440\nENDCHAR\nSTARTCHAR U_8BF9\nENCODING 35833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F00\n2A00\n0BE0\nEEA0\n2AA0\n2EA0\n2AA0\n2BA0\n3E40\n62A0\n0320\nENDCHAR\nSTARTCHAR U_8BFA\nENCODING 35834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n2FE0\n0240\n0100\nEFE0\n2200\n23E0\n2E20\n3220\n23E0\n0220\nENDCHAR\nSTARTCHAR U_8BFB\nENCODING 35835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n0100\nEFE0\n22A0\n2580\n2280\n2FE0\n3180\n2240\n0C20\nENDCHAR\nSTARTCHAR U_8BFC\nENCODING 35836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2200\n0420\n0A40\nFB80\n2580\n2D40\n2B40\n3520\n6920\n0600\nENDCHAR\nSTARTCHAR U_8BFD\nENCODING 35837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2280\n0EE0\nE280\n2EE0\n2280\n2280\n2EE0\n3280\n2280\n0280\nENDCHAR\nSTARTCHAR U_8BFE\nENCODING 35838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2940\n0FC0\nC940\n4FC0\n4100\n5FE0\n4300\n6580\n4940\n1120\nENDCHAR\nSTARTCHAR U_8BFF\nENCODING 35839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2700\n0100\n0FE0\nE540\n2920\n2200\n2FE0\n3480\n2300\n0CE0\nENDCHAR\nSTARTCHAR U_8C00\nENCODING 35840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2D60\n0920\nEFE0\n2920\n2FE0\n2100\n2280\n3280\n2440\n0820\nENDCHAR\nSTARTCHAR U_8C01\nENCODING 35841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2480\n0FE0\nF480\n27E0\n2480\n27E0\n2C80\n3480\n27E0\n0400\nENDCHAR\nSTARTCHAR U_8C02\nENCODING 35842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\n0440\n0920\nF7C0\n2080\n2100\n2AA0\n36A0\n2A40\n01C0\nENDCHAR\nSTARTCHAR U_8C03\nENCODING 35843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n0BA0\nE920\n2FE0\n2820\n2BA0\n2AA0\n3BA0\n2820\n10E0\nENDCHAR\nSTARTCHAR U_8C04\nENCODING 35844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n23C0\n0480\n0900\nE6E0\n2820\n2820\n2EE0\n3820\n2FE0\n0820\nENDCHAR\nSTARTCHAR U_8C05\nENCODING 35845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0000\nE7C0\n2440\n27C0\n2100\n2100\n3540\n2920\n0300\nENDCHAR\nSTARTCHAR U_8C06\nENCODING 35846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0440\nE7C0\n2000\n2FC0\n2080\n2100\n3FE0\n2100\n0300\nENDCHAR\nSTARTCHAR U_8C07\nENCODING 35847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0440\n0440\nE6A0\n2920\n2100\n2FE0\n3100\n2100\n0100\nENDCHAR\nSTARTCHAR U_8C08\nENCODING 35848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4120\n2540\n2980\n0240\nEC20\n2100\n2520\n3540\n2980\n2240\n0C20\nENDCHAR\nSTARTCHAR U_8C09\nENCODING 35849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n5FE0\n1220\nCFC0\n4A40\n4FC0\n4A40\n4FC0\n6200\n4200\n0200\nENDCHAR\nSTARTCHAR U_8C0A\nENCODING 35850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0820\nE7C0\n2440\n2440\n27C0\n2C40\n37C0\n2440\n1FE0\nENDCHAR\nSTARTCHAR U_8C0B\nENCODING 35851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2FE0\n0440\nE7C0\n2440\n27C0\n2100\n2FE0\n3380\n2540\n0920\nENDCHAR\nSTARTCHAR U_8C0C\nENCODING 35852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n2FE0\n0240\n03C0\nE240\n23C0\n2240\n2FE0\n3540\n2620\n07E0\nENDCHAR\nSTARTCHAR U_8C0D\nENCODING 35853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2FE0\n0540\nE5C0\n2400\n27E0\n2100\n2FE0\n3380\n2540\n0920\nENDCHAR\nSTARTCHAR U_8C0E\nENCODING 35854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n2FE0\n0240\nEFE0\n2400\n27E0\n2000\n2D40\n3540\n2540\n0960\nENDCHAR\nSTARTCHAR U_8C0F\nENCODING 35855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0100\nEFE0\n2AA0\n2920\n2FE0\n2900\n3380\n2540\n1920\nENDCHAR\nSTARTCHAR U_8C10\nENCODING 35856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n24A0\n07C0\nE4A0\n2E60\n2100\n27C0\n2C40\n37C0\n2440\n07C0\nENDCHAR\nSTARTCHAR U_8C11\nENCODING 35857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n2100\n07E0\nE520\n27C0\n2520\n25E0\n2D00\n37E0\n2900\n11E0\nENDCHAR\nSTARTCHAR U_8C12\nENCODING 35858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n07C0\n0440\nE7C0\n2200\n27E0\n2CA0\n3560\n27A0\n0040\nENDCHAR\nSTARTCHAR U_8C13\nENCODING 35859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n0FE0\nE920\n2FE0\n2440\n27C0\n2C40\n37C0\n2440\n04C0\nENDCHAR\nSTARTCHAR U_8C14\nENCODING 35860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n0EE0\n0000\nE7C0\n2000\n2FE0\n2A00\n33C0\n2040\n0380\nENDCHAR\nSTARTCHAR U_8C15\nENCODING 35861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n2440\n0BA0\nE000\n2E20\n2AA0\n2EA0\n2AA0\n3EA0\n6A20\n0A60\nENDCHAR\nSTARTCHAR U_8C16\nENCODING 35862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2F20\n0540\nEFE0\n2200\n2FE0\n2200\n2FC0\n3640\n2980\n0660\nENDCHAR\nSTARTCHAR U_8C17\nENCODING 35863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\n2900\n1FC0\n0A40\nEFC0\n22A0\n24E0\n2B00\n3080\n2600\n0180\nENDCHAR\nSTARTCHAR U_8C18\nENCODING 35864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n25E0\n0220\nEC80\n2540\n2620\n2000\n2FC0\n3440\n27C0\n0440\nENDCHAR\nSTARTCHAR U_8C19\nENCODING 35865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0280\n0FE0\nE000\n27C0\n2440\n2FC0\n3440\n27C0\n0440\nENDCHAR\nSTARTCHAR U_8C1A\nENCODING 35866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0240\n07E0\nE440\n2480\n2760\n2C80\n3720\n2840\n1380\nENDCHAR\nSTARTCHAR U_8C1B\nENCODING 35867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0280\n0FE0\nE920\n27C0\n2540\n2D40\n3540\n25C0\n0100\nENDCHAR\nSTARTCHAR U_8C1C\nENCODING 35868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2AA0\n05C0\nE080\n3FE0\n2480\n25C0\n2EA0\n3480\n2A00\n11E0\nENDCHAR\nSTARTCHAR U_8C1D\nENCODING 35869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0820\nEFE0\n2800\n2FE0\n2AA0\n2FE0\n3AA0\n2AA0\n1060\nENDCHAR\nSTARTCHAR U_8C1E\nENCODING 35870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4520\n05C0\nCB00\n57E0\n4440\n47C0\n5440\n67C0\n4440\n04C0\nENDCHAR\nSTARTCHAR U_8C1F\nENCODING 35871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n0280\nE7C0\n2440\n27C0\n2440\n2FE0\n3100\n6280\n0C60\nENDCHAR\nSTARTCHAR U_8C20\nENCODING 35872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9240\n4A80\n5FE0\n1020\nCF80\n4880\n4880\n5F80\n6520\n4920\n10E0\nENDCHAR\nSTARTCHAR U_8C21\nENCODING 35873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2540\n07C0\n0540\nE7C0\n2440\n2A20\n23C0\n3640\n2180\n0E60\nENDCHAR\nSTARTCHAR U_8C22\nENCODING 35874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8840\n5E40\n1240\nDFE0\n5240\n5F40\n52C0\n5E40\n6A40\n5240\n26C0\nENDCHAR\nSTARTCHAR U_8C23\nENCODING 35875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2F20\n0A20\n0540\nE7C0\n2900\n2FE0\n2100\n2520\n3520\n27E0\nENDCHAR\nSTARTCHAR U_8C24\nENCODING 35876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0280\n0FE0\nE920\n2FE0\n2200\n2BC0\n3240\n2440\n1980\nENDCHAR\nSTARTCHAR U_8C25\nENCODING 35877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\n2480\n0FE0\n0280\nE440\n2820\n2FE0\n2AA0\n3AA0\n2AA0\n1FE0\nENDCHAR\nSTARTCHAR U_8C26\nENCODING 35878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n5FE0\n0500\nCFC0\n4540\n5FE0\n4540\n5FC0\n6D80\n5540\n2520\nENDCHAR\nSTARTCHAR U_8C27\nENCODING 35879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8320\n4A40\n0AA0\nCB60\n55C0\n4000\n4FE0\n5AA0\n6AA0\nCAA0\n1FE0\nENDCHAR\nSTARTCHAR U_8C28\nENCODING 35880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n0280\nE100\n27C0\n2540\n2FE0\n2900\n37C0\n2100\n0FE0\nENDCHAR\nSTARTCHAR U_8C29\nENCODING 35881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n07C0\nE440\n2FE0\n2AA0\n2FE0\n2C40\n3280\n6100\n0EE0\nENDCHAR\nSTARTCHAR U_8C2A\nENCODING 35882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n0280\nEFE0\n2920\n2FE0\n2920\n2BA0\n3AA0\n6BA0\n0860\nENDCHAR\nSTARTCHAR U_8C2B\nENCODING 35883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2FE0\n0A20\nEEA0\n2AA0\n2EA0\n2A60\n2FE0\n3120\n6220\n0CC0\nENDCHAR\nSTARTCHAR U_8C2C\nENCODING 35884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\n0660\nEAA0\n2300\n2480\n3A60\n2500\n3240\n2180\n0E00\nENDCHAR\nSTARTCHAR U_8C2D\nENCODING 35885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2280\n0FE0\nEAA0\n2FE0\n2440\n27C0\n3440\n2FE0\n2100\n0100\nENDCHAR\nSTARTCHAR U_8C2E\nENCODING 35886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n5540\n1FE0\n0CC0\nD760\n4000\n4FC0\n4840\n6FC0\n4840\n0FC0\nENDCHAR\nSTARTCHAR U_8C2F\nENCODING 35887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n27E0\n0480\n0FC0\nE480\n27C0\n2480\n2FE0\n3540\n2AA0\n0AA0\nENDCHAR\nSTARTCHAR U_8C30\nENCODING 35888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4BE0\n2520\n0FE0\n0920\nEFE0\n2AA0\n2FE0\n2920\n3BA0\n6D60\n0860\nENDCHAR\nSTARTCHAR U_8C31\nENCODING 35889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2FE0\n0AA0\n06C0\nEFE0\n2000\n27C0\n2C40\n37C0\n2440\n07C0\nENDCHAR\nSTARTCHAR U_8C32\nENCODING 35890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2280\n0FE0\nE520\n2900\n2FE0\n2AA0\n2C60\n3BA0\n2AA0\n0BE0\nENDCHAR\nSTARTCHAR U_8C33\nENCODING 35891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8440\n5F60\n0440\nDFE0\n5B40\n5540\n5F40\n5540\n7F40\nD5A0\n1320\nENDCHAR\nSTARTCHAR U_8C34\nENCODING 35892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\n2BE0\n0AA0\nE7E0\n3A40\n2A40\n2BE0\n2A20\n3BE0\n2C00\n13E0\nENDCHAR\nSTARTCHAR U_8C35\nENCODING 35893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2440\n0FE0\n06A0\nE7E0\n2400\n25E0\n2C00\n35E0\n2520\n09E0\nENDCHAR\nSTARTCHAR U_8C36\nENCODING 35894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8AC0\n55A0\n1FE0\nCA80\n5B80\n4AA0\n5BA0\n4A40\n7BE0\nCAA0\n1F20\nENDCHAR\nSTARTCHAR U_8C37\nENCODING 35895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n1080\n2440\n4620\n0900\n1080\n3FC0\nD0A0\n1080\n1F80\n1080\nENDCHAR\nSTARTCHAR U_8C38\nENCODING 35896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1880\nE240\n2420\n2120\nFA80\n2440\n2FE0\n2440\n4440\n47C0\n8440\nENDCHAR\nSTARTCHAR U_8C39\nENCODING 35897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4900\n87E0\n3100\n4940\n8640\n7A80\n4A80\n4D20\n7BE0\n4920\nENDCHAR\nSTARTCHAR U_8C3A\nENCODING 35898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\n8840\n2240\n57E0\n88C0\n7140\n5140\n5240\n7440\n0940\n0080\nENDCHAR\nSTARTCHAR U_8C3B\nENCODING 35899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57C0\n8940\n1140\n33C0\n4940\n8940\n7BC0\n4940\n4940\n7920\n4920\nENDCHAR\nSTARTCHAR U_8C3C\nENCODING 35900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5140\n4940\n83E0\n3140\n4940\n8540\n7BE0\n4800\n4940\n7A20\n4C20\nENDCHAR\nSTARTCHAR U_8C3D\nENCODING 35901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1180\n4A40\n8520\n3080\n4BE0\n8440\n7880\n4BE0\n4A20\n7BE0\n4A20\nENDCHAR\nSTARTCHAR U_8C3E\nENCODING 35902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n4FE0\n8420\n3140\n4A20\n8400\n7BE0\n4880\n4880\n7880\n4FE0\nENDCHAR\nSTARTCHAR U_8C3F\nENCODING 35903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D40\n9520\n5200\n28C0\n5520\n7E00\n11E0\nFD20\n1120\n29E0\nC520\nENDCHAR\nSTARTCHAR U_8C40\nENCODING 35904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n5520\n8AC0\nA100\n5240\n8FE0\n7100\n5FE0\n5280\n7440\n5820\nENDCHAR\nSTARTCHAR U_8C41\nENCODING 35905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\nFD20\n9600\n78C0\n1120\n7A00\n11E0\nFD20\n4920\n49E0\n7920\nENDCHAR\nSTARTCHAR U_8C42\nENCODING 35906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n4DA0\n8360\n35A0\n4B00\n8480\n7A60\n4D00\n4A40\n7880\n4F00\nENDCHAR\nSTARTCHAR U_8C43\nENCODING 35907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6E80\n9480\n2FE0\n5AA0\n8EA0\n0AA0\nEEA0\nAAA0\nBF40\nE2A0\nA320\nENDCHAR\nSTARTCHAR U_8C44\nENCODING 35908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n4FE0\nA100\n2FE0\n5AA0\n8FE0\n7440\n57C0\n5440\n77C0\n5820\nENDCHAR\nSTARTCHAR U_8C45\nENCODING 35909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n64E0\n9E80\n0AE0\n6F20\n90E0\n0E80\nEAE0\nAE80\nAAE0\nEE80\nAAE0\nENDCHAR\nSTARTCHAR U_8C46\nENCODING 35910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n7FC0\n0000\n3F80\n2080\n3F80\n2080\n1100\n0900\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_8C47\nENCODING 35911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC00\n03E0\n0080\n7C80\n4480\n7C80\n0080\n4480\n2880\n1C80\nE3E0\nENDCHAR\nSTARTCHAR U_8C48\nENCODING 35912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4440\n7FC0\n0000\nFFE0\n0000\n3F80\n2080\n3F80\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_8C49\nENCODING 35913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n03E0\nF880\n8880\n8BE0\nFA20\n0140\n8940\n5080\n3940\nC620\nENDCHAR\nSTARTCHAR U_8C4A\nENCODING 35914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n7FC0\n4A40\n7FC0\n4A40\nFFE0\n2080\n3F80\n1100\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_8C4B\nENCODING 35915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3DE0\n4540\nA880\n5FC0\n2020\nDF80\n1080\n1F80\n0900\nFFE0\nENDCHAR\nSTARTCHAR U_8C4C\nENCODING 35916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n07E0\nF420\n9200\n93E0\nF4A0\n02A0\n91E0\n6280\n34A0\nC8E0\nENDCHAR\nSTARTCHAR U_8C4D\nENCODING 35917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n07E0\nF520\n97E0\n9520\nF7E0\n1280\n9FE0\n6080\n3880\nC080\nENDCHAR\nSTARTCHAR U_8C4E\nENCODING 35918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\nA240\nFA40\n8980\nFA40\nA420\nFFE0\n2080\n3F80\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_8C4F\nENCODING 35919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nF500\n0FE0\nF540\n9FE0\n9540\nFFC0\n9500\n6D80\n3540\nC520\nENDCHAR\nSTARTCHAR U_8C50\nENCODING 35920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n7FC0\n5540\n7FC0\n5540\nFFE0\n2080\n3F80\n1100\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_8C51\nENCODING 35921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nFBE0\nA8A0\nFBE0\n0280\nFFE0\n49A0\n7AA0\n4AE0\n3480\nF880\nENDCHAR\nSTARTCHAR U_8C52\nENCODING 35922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA940\nFFE0\nA8A0\nFBE0\n0280\nFFE0\n48A0\n79A0\n4EE0\n3080\nF880\nENDCHAR\nSTARTCHAR U_8C53\nENCODING 35923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\nFFE0\nA900\nFA80\n0540\nF8A0\n57C0\n7540\n5540\n2540\nFFE0\nENDCHAR\nSTARTCHAR U_8C54\nENCODING 35924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nD480\nFFE0\nD480\nFFE0\nD540\nFFE0\n4800\n7BE0\n4AA0\n32A0\nFFE0\nENDCHAR\nSTARTCHAR U_8C55\nENCODING 35925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n0840\n1880\n6500\n0A00\n1300\n6680\n0A40\n7220\n0C00\nENDCHAR\nSTARTCHAR U_8C56\nENCODING 35926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n0840\n1480\n7700\n0A00\n1B00\n6680\n0A60\n7200\n0C00\nENDCHAR\nSTARTCHAR U_8C57\nENCODING 35927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5120\n5340\n5580\n52C0\n55A0\n52A0\n5480\n5320\n5020\n8FE0\nENDCHAR\nSTARTCHAR U_8C58\nENCODING 35928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n27E0\n2900\nD540\n3540\nD7C0\n3900\nD520\n5120\n20E0\nENDCHAR\nSTARTCHAR U_8C59\nENCODING 35929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\nFFE0\n1080\n6900\n1600\n6D00\n14E0\n6440\n0800\nENDCHAR\nSTARTCHAR U_8C5A\nENCODING 35930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5100\n5220\n7C40\n5380\n5580\n7940\n5340\n5520\n9920\nB600\nENDCHAR\nSTARTCHAR U_8C5B\nENCODING 35931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2240\n2240\nD460\n2800\nDBC0\n2E40\nC980\n0980\n5260\n2440\nENDCHAR\nSTARTCHAR U_8C5C\nENCODING 35932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2140\n6540\n9940\n37E0\n5940\nB540\n5140\n9140\n1240\n6440\nENDCHAR\nSTARTCHAR U_8C5D\nENCODING 35933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n22A0\n66A0\nAAA0\n33E0\n5A20\nB600\n5200\n9220\n5220\n21E0\nENDCHAR\nSTARTCHAR U_8C5E\nENCODING 35934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFA00\n23E0\nD420\n3BA0\nD2A0\n3AA0\nD7A0\n1020\n50A0\n2040\nENDCHAR\nSTARTCHAR U_8C5F\nENCODING 35935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n23E0\n6620\nABE0\n3200\n5BE0\nB640\n5280\n9520\n7520\n29E0\nENDCHAR\nSTARTCHAR U_8C60\nENCODING 35936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2240\n2BC0\n6A40\nB240\n5BC0\nB640\n5240\n9240\n5FE0\n2000\nENDCHAR\nSTARTCHAR U_8C61\nENCODING 35937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n2200\n7FC0\nA440\n3FC0\n1440\n6E80\n1300\n6680\n1A60\nE600\nENDCHAR\nSTARTCHAR U_8C62\nENCODING 35938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\n7FC0\n0800\nFFE0\n2040\nDFA0\n0880\n7500\n0A80\n7240\n0C20\nENDCHAR\nSTARTCHAR U_8C63\nENCODING 35939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF6E0\n4240\n4A40\nAA40\n56E0\nB240\n5A40\n9640\n1240\n5440\n2840\nENDCHAR\nSTARTCHAR U_8C64\nENCODING 35940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n2240\n67C0\nAA40\n33C0\n5A80\nB6A0\n5240\n9240\n5320\n2200\nENDCHAR\nSTARTCHAR U_8C65\nENCODING 35941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n23E0\n6480\nA920\n33C0\n5880\nB520\n5240\n9080\n5140\n2620\nENDCHAR\nSTARTCHAR U_8C66\nENCODING 35942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n4420\n7F80\n4420\n7FE0\n4A40\n7580\n8940\nB620\nENDCHAR\nSTARTCHAR U_8C67\nENCODING 35943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\nF920\n27E0\n6100\nBFE0\n5520\nB7E0\n5D20\n97E0\n5520\n2560\nENDCHAR\nSTARTCHAR U_8C68\nENCODING 35944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA20\n21C0\n6620\nA900\n37E0\n5A80\nB7E0\n52A0\n92A0\n52E0\n2080\nENDCHAR\nSTARTCHAR U_8C69\nENCODING 35945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2100\n6320\nAD40\n3180\n5AC0\nB5A0\n52A0\n9480\n5380\n2100\nENDCHAR\nSTARTCHAR U_8C6A\nENCODING 35946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\nFFE0\n8020\n3F80\n1400\n6A80\n1700\n0A80\n7460\nENDCHAR\nSTARTCHAR U_8C6B\nENCODING 35947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF780\n1480\nAFE0\n4920\nFFE0\n5220\n4540\n5B80\n4540\n5920\nC600\nENDCHAR\nSTARTCHAR U_8C6C\nENCODING 35948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7A0\n2140\n6FE0\nB100\n5BC0\nB640\n5BC0\n9240\n13C0\n6240\nENDCHAR\nSTARTCHAR U_8C6D\nENCODING 35949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF60\n2520\n6520\nAF60\n3400\n5FE0\nB4A0\n57A0\n9440\n54A0\n2520\nENDCHAR\nSTARTCHAR U_8C6E\nENCODING 35950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2540\n6FE0\nAC40\n57C0\nB440\n5D40\n9540\n5280\n2460\nENDCHAR\nSTARTCHAR U_8C6F\nENCODING 35951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2520\n62C0\nA900\n3340\n58A0\nB7E0\n5100\n9FE0\n7280\n2C60\nENDCHAR\nSTARTCHAR U_8C70\nENCODING 35952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\n1140\nFD40\n8660\nFC00\n27E0\n5940\n9140\n3880\nD540\n3220\nENDCHAR\nSTARTCHAR U_8C71\nENCODING 35953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n2440\n6FC0\nB440\n27C0\n7000\nAFE0\n6AA0\nAAA0\n2AA0\nDFE0\nENDCHAR\nSTARTCHAR U_8C72\nENCODING 35954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2480\n65E0\nAD20\n35E0\n5D20\nB5E0\n5480\n95C0\n76A0\n29A0\nENDCHAR\nSTARTCHAR U_8C73\nENCODING 35955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\nA520\nEF60\nB5A0\nD6A0\nBDE0\nD6A0\n94A0\nB5A0\nFFE0\n8020\nENDCHAR\nSTARTCHAR U_8C74\nENCODING 35956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFE0\n4240\n4FE0\nB920\n6FE0\nA920\n7BA0\nAAA0\n2BA0\n6860\nENDCHAR\nSTARTCHAR U_8C75\nENCODING 35957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF540\n4940\nD6A0\n2A20\n6880\nB880\n2A80\n6AE0\nAA80\n2D80\nC8E0\nENDCHAR\nSTARTCHAR U_8C76\nENCODING 35958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n27E0\n6D40\nAFE0\n3440\n5FC0\nB440\n57C0\n9440\n77C0\n2C60\nENDCHAR\nSTARTCHAR U_8C77\nENCODING 35959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2100\n67E0\nAC20\n37E0\n5800\nB7C0\n5440\n97C0\n7280\n2FE0\nENDCHAR\nSTARTCHAR U_8C78\nENCODING 35960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\n0C00\n32C0\n0B00\n0D80\n3280\n0D80\n3280\n0C80\n3080\n0300\nENDCHAR\nSTARTCHAR U_8C79\nENCODING 35961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nD100\n59E0\n6220\nD520\n28A0\n58A0\nA820\n4820\nA920\n10C0\nENDCHAR\nSTARTCHAR U_8C7A\nENCODING 35962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3040\nD040\n5840\n67E0\nD040\n28C0\n5940\nAA40\n4C40\nA940\n1080\nENDCHAR\nSTARTCHAR U_8C7B\nENCODING 35963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n33E0\nD080\n5880\n6080\nD080\n2FE0\n5880\nA880\n4880\nA880\n1080\nENDCHAR\nSTARTCHAR U_8C7C\nENCODING 35964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1880\nE480\n5C80\n24E0\nD780\n3480\nD480\n3480\nD6A0\n54E0\n2000\nENDCHAR\nSTARTCHAR U_8C7D\nENCODING 35965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nE880\n5FE0\n24A0\nD4A0\n34A0\n5560\nB620\n5420\n9420\n2460\nENDCHAR\nSTARTCHAR U_8C7E\nENCODING 35966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3000\nE7E0\n5080\n2100\nD380\n2D40\nD920\n2900\nC900\n2FE0\n1000\nENDCHAR\nSTARTCHAR U_8C7F\nENCODING 35967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nF100\n4BE0\n3420\nD3A0\n2AA0\nDAA0\n2BA0\nC820\n28A0\n1040\nENDCHAR\nSTARTCHAR U_8C80\nENCODING 35968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3080\nD2A0\n5AA0\n62A0\nD3E0\n2880\n5AA0\nAAA0\n4AA0\nABE0\n1220\nENDCHAR\nSTARTCHAR U_8C81\nENCODING 35969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nE100\n5FE0\n6820\nA280\n3280\nD280\n3280\nD440\n1440\n6820\nENDCHAR\nSTARTCHAR U_8C82\nENCODING 35970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37E0\nD120\n5920\n62E0\nD440\n2800\n5BE0\nAA20\n4A20\nABE0\n1220\nENDCHAR\nSTARTCHAR U_8C83\nENCODING 35971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1880\nF100\n4BE0\n3220\nD220\n2BE0\nDA20\n2A20\nCA20\n2BE0\n1000\nENDCHAR\nSTARTCHAR U_8C84\nENCODING 35972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nD7C0\n5940\n67E0\nD140\n2FC0\n5900\nAFC0\n4900\nAFE0\n1100\nENDCHAR\nSTARTCHAR U_8C85\nENCODING 35973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n5280\nA480\n47E0\nAC80\n54C0\nB5C0\n56A0\n94A0\n1480\n6480\nENDCHAR\nSTARTCHAR U_8C86\nENCODING 35974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37E0\nD000\n5800\n63C0\nD240\n2BC0\n5A40\nABC0\n4A40\nA800\n17E0\nENDCHAR\nSTARTCHAR U_8C87\nENCODING 35975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1BC0\nE240\n5FC0\n3240\nD3C0\n2A20\nDB40\n2A80\nCA40\n2B60\n1200\nENDCHAR\nSTARTCHAR U_8C88\nENCODING 35976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nF3C0\n4A40\n3340\nD240\n2FE0\nDA40\n2B40\nCA40\n2A40\n14C0\nENDCHAR\nSTARTCHAR U_8C89\nENCODING 35977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3200\nD3C0\n5D40\n6080\nD140\n2A20\n5BC0\nAA40\n4A40\nABC0\n1240\nENDCHAR\nSTARTCHAR U_8C8A\nENCODING 35978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n33E0\nD080\n5900\n63E0\nD220\n2A20\n5BE0\nAA20\n4A20\nABE0\n1220\nENDCHAR\nSTARTCHAR U_8C8B\nENCODING 35979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\nE440\n5FC0\n2440\nD7C0\n2800\nDFC0\n2900\nCFE0\n2900\n1100\nENDCHAR\nSTARTCHAR U_8C8C\nENCODING 35980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nD7E0\n5C20\n67E0\nD420\n2FE0\n5A80\nAA80\n4A80\nAAA0\n1460\nENDCHAR\nSTARTCHAR U_8C8D\nENCODING 35981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n33E0\nD2A0\n5AA0\n63E0\nD2A0\n2BE0\n5880\nABE0\n4880\nA880\n17E0\nENDCHAR\nSTARTCHAR U_8C8E\nENCODING 35982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3A00\nE4C0\n5C40\n26C0\nD440\n37C0\nD280\n3280\nD2A0\n54A0\n2860\nENDCHAR\nSTARTCHAR U_8C8F\nENCODING 35983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nD7E0\n5D20\n67E0\nD520\n2FE0\n5A80\nAFE0\n4880\nA880\n1080\nENDCHAR\nSTARTCHAR U_8C90\nENCODING 35984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\nE440\n5BA0\n2000\nCE20\n2AA0\n6EA0\nAAA0\n6EA0\nAA20\n6A60\nENDCHAR\nSTARTCHAR U_8C91\nENCODING 35985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2760\nE520\n5D20\n2760\nD400\n36E0\n54A0\nB4A0\n5740\n94A0\n6520\nENDCHAR\nSTARTCHAR U_8C92\nENCODING 35986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3520\nD520\n5FE0\n6000\nDFE0\n2200\n5FE0\nAAA0\n4AA0\nAAA0\n1060\nENDCHAR\nSTARTCHAR U_8C93\nENCODING 35987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3240\nD240\n5FE0\n6240\nD3E0\n2AA0\n5AA0\nABE0\n4AA0\nABE0\n1220\nENDCHAR\nSTARTCHAR U_8C94\nENCODING 35988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nD7E0\n5D20\n66A0\nD520\n2FE0\n5AA0\nABC0\n4A80\nABA0\n12E0\nENDCHAR\nSTARTCHAR U_8C95\nENCODING 35989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37C0\nD4A0\n5D40\n6380\nD140\n2FE0\n5900\nAFE0\n4900\nAA80\n1460\nENDCHAR\nSTARTCHAR U_8C96\nENCODING 35990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3440\nE240\n5080\n2FE0\nD440\n3820\nD7C0\n3540\nD540\n5FE0\n2000\nENDCHAR\nSTARTCHAR U_8C97\nENCODING 35991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nD7C0\n5D40\n67E0\nD540\n2FE0\n5920\nAFE0\n4C80\nAB80\n1460\nENDCHAR\nSTARTCHAR U_8C98\nENCODING 35992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n5FE0\nA280\n47C0\nA440\n57C0\nB440\n5FE0\n9100\n1280\n6C60\nENDCHAR\nSTARTCHAR U_8C99\nENCODING 35993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n6800\nDBC0\n2A40\nDBC0\n2800\nDFE0\n2920\nCFE0\n3800\n17E0\nENDCHAR\nSTARTCHAR U_8C9A\nENCODING 35994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3EE0\n6AA0\n9FE0\n6540\nD7C0\n2D40\n5FC0\nA900\n4FE0\nA900\n1100\nENDCHAR\nSTARTCHAR U_8C9B\nENCODING 35995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1A40\nE7E0\n5A40\n2EE0\nDAA0\n3EE0\nD7E0\n3C80\nD7C0\n5480\n27E0\nENDCHAR\nSTARTCHAR U_8C9C\nENCODING 35996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\nEAA0\n5AA0\n2FE0\nD480\n3FE0\n5480\nB7E0\n5240\n9180\n2660\nENDCHAR\nSTARTCHAR U_8C9D\nENCODING 35997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n2080\n2080\n3F80\n1100\n2080\n4040\nENDCHAR\nSTARTCHAR U_8C9E\nENCODING 35998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n07E0\n0400\n3F80\n2080\n3F80\n2080\n3F80\n2080\n3F80\n60C0\nENDCHAR\nSTARTCHAR U_8C9F\nENCODING 35999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n2080\n7FC0\n0000\n3F80\n2080\n3F80\n2080\n3F80\n1100\n60C0\nENDCHAR\nSTARTCHAR U_8CA0\nENCODING 36000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n2200\nFF80\n2080\n3F80\n2080\n3F80\n2080\n3F80\n1100\n60C0\nENDCHAR\nSTARTCHAR U_8CA1\nENCODING 36001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0040\n7840\n4FE0\n7840\n48C0\n7940\n4A40\n7C40\n0040\n4940\n8480\nENDCHAR\nSTARTCHAR U_8CA2\nENCODING 36002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n2080\n3F80\n2080\n3F80\n2080\n3F80\n2080\n4040\nENDCHAR\nSTARTCHAR U_8CA3\nENCODING 36003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n0BE0\nFC00\n0320\n00E0\n3F80\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CA4\nENCODING 36004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4A80\n7AE0\n4BA0\n7EA0\n4AA0\n7AE0\n4A80\n3220\n4A20\n81E0\nENDCHAR\nSTARTCHAR U_8CA5\nENCODING 36005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9100\nFFE0\n9000\nF380\n9280\n9280\nF280\n02A0\n94A0\n8860\nENDCHAR\nSTARTCHAR U_8CA6\nENCODING 36006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4800\n7800\n4FE0\n7A80\n4A80\n7A80\n02A0\n4AA0\n8460\n0800\nENDCHAR\nSTARTCHAR U_8CA7\nENCODING 36007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2080\nFFE0\n1100\nFF80\n2080\n3F80\n2080\n3F80\n1100\n60C0\nENDCHAR\nSTARTCHAR U_8CA8\nENCODING 36008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n2280\n6320\nADE0\n0000\n3F80\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CA9\nENCODING 36009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0E0\n9700\nF400\n9400\nF7E0\n9420\n9640\nF540\n0480\nA940\n9220\nENDCHAR\nSTARTCHAR U_8CAA\nENCODING 36010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n3580\nDF60\n0200\n3F80\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CAB\nENCODING 36011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\nFFE0\n2480\n3F80\n2080\n3F80\n2080\n3F80\n1100\n2080\nENDCHAR\nSTARTCHAR U_8CAC\nENCODING 36012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n3F80\n0400\nFFE0\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CAD\nENCODING 36013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4200\n7FE0\n4200\n5FC0\n5040\n5FC0\n5040\n5FC0\n4880\n9040\nENDCHAR\nSTARTCHAR U_8CAE\nENCODING 36014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n7A40\n0200\nFFE0\n4A00\n7A00\n4900\n7900\n4880\n78A0\n8460\nENDCHAR\nSTARTCHAR U_8CAF\nENCODING 36015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n97E0\nF420\n9000\nF7E0\n9080\n9080\nF080\n0080\nA080\n9180\nENDCHAR\nSTARTCHAR U_8CB0\nENCODING 36016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\nFFE0\n2500\n2700\n2000\n3FC0\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CB1\nENCODING 36017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n77E0\n54A0\n7480\n57E0\n7620\n5540\n7540\n0480\n5540\n8A20\nENDCHAR\nSTARTCHAR U_8CB2\nENCODING 36018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n5D80\n5120\n5DE0\nE000\n3F80\n2080\n3F80\n2080\n3F80\n60C0\nENDCHAR\nSTARTCHAR U_8CB3\nENCODING 36019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\nFFE0\n0100\n7D00\n0100\nFF00\n4500\n7D20\n44A0\n7C60\nC620\nENDCHAR\nSTARTCHAR U_8CB4\nENCODING 36020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n2480\nFFE0\n2080\n3F80\n2080\n3F80\n2080\n3F80\nC060\nENDCHAR\nSTARTCHAR U_8CB5\nENCODING 36021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1100\n3F80\n0800\nFFE0\n2080\n7EC0\nAFA0\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CB6\nENCODING 36022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF020\n97C0\nF100\n9080\nF7E0\n9040\n9080\nF100\n0200\n5500\n88E0\nENDCHAR\nSTARTCHAR U_8CB7\nENCODING 36023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n4A40\n7FC0\n2080\n3F80\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CB8\nENCODING 36024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2240\n7FE0\nA100\n20E0\n3F80\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CB9\nENCODING 36025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9280\nF3E0\n9480\nF880\n9080\n93E0\nF080\n2080\n5080\n8FE0\nENDCHAR\nSTARTCHAR U_8CBA\nENCODING 36026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\nF420\n9420\nF7E0\n9280\n9280\nF280\n22A0\n54A0\n9860\nENDCHAR\nSTARTCHAR U_8CBB\nENCODING 36027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n7FC0\n1240\nFFE0\n2220\nFFE0\n2080\n3F80\n2080\n3F80\nC060\nENDCHAR\nSTARTCHAR U_8CBC\nENCODING 36028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4880\n48E0\n7880\n4880\n7BE0\n4A20\n7A20\n3220\n4BE0\n8620\nENDCHAR\nSTARTCHAR U_8CBD\nENCODING 36029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9100\nF240\n9420\nFFE0\n9000\n97C0\nF440\n0440\n57C0\n8C40\nENDCHAR\nSTARTCHAR U_8CBE\nENCODING 36030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0E0\n9780\nF480\n9480\nF7E0\n9480\n9480\nF480\n0540\nA740\n94A0\nENDCHAR\nSTARTCHAR U_8CBF\nENCODING 36031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n4240\n5240\n6C40\n3F80\n2080\n3F80\n2080\n3F80\n1100\n60C0\nENDCHAR\nSTARTCHAR U_8CC0\nENCODING 36032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n2A20\n4BE0\n9000\n3F80\n2080\n3F80\n2080\n3F80\nC060\nENDCHAR\nSTARTCHAR U_8CC1\nENCODING 36033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1500\nFFE0\n1100\n3F80\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CC2\nENCODING 36034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n93C0\n9440\nFA80\n9100\nF280\n9C60\nF7C0\n0440\nA440\n97C0\nENDCHAR\nSTARTCHAR U_8CC3\nENCODING 36035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n2200\n7FE0\nA200\n3FE0\n2080\n3C80\n2780\n2080\n3F80\nC060\nENDCHAR\nSTARTCHAR U_8CC4\nENCODING 36036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\nF200\n93E0\nF620\n9BE0\n9220\nF3E0\n0220\nA220\n9260\nENDCHAR\nSTARTCHAR U_8CC5\nENCODING 36037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9100\nF240\n9780\nF120\n9240\nF480\n0140\n6220\n9420\nENDCHAR\nSTARTCHAR U_8CC6\nENCODING 36038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA20\n8940\nFFE0\n8A40\nFA40\n8A40\nFFE0\n0240\n5240\n8A40\n8C40\nENDCHAR\nSTARTCHAR U_8CC7\nENCODING 36039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2FE0\n1120\n7F80\n30E0\n1F80\n1080\n1F80\n1080\n1F80\n70E0\nENDCHAR\nSTARTCHAR U_8CC8\nENCODING 36040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n7FC0\n2080\n3C80\n2780\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CC9\nENCODING 36041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF200\n97C0\nF540\n9540\nF540\n9540\nF540\n0540\n6540\n9FE0\nENDCHAR\nSTARTCHAR U_8CCA\nENCODING 36042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0C0\n90A0\nFFE0\n9280\nF2A0\n9FA0\n92C0\nF2A0\n2260\n54A0\n8920\nENDCHAR\nSTARTCHAR U_8CCB\nENCODING 36043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8880\nFFE0\n8A40\nFC20\n8A40\nFA40\n0180\n5180\n8A40\n8C20\nENDCHAR\nSTARTCHAR U_8CCC\nENCODING 36044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1200\n3C80\n0B80\n1C40\nE080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CCD\nENCODING 36045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8BE0\nFA80\n8A80\nFA80\n8BE0\nFA80\n8A80\n5280\n4C80\n8BE0\nENDCHAR\nSTARTCHAR U_8CCE\nENCODING 36046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n93C0\nFE00\n93C0\n9E00\nF3C0\n9E00\nF240\n5180\n56A0\n8860\nENDCHAR\nSTARTCHAR U_8CCF\nENCODING 36047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\n8A20\nFBE0\n8A20\nFBE0\n8A20\n8A20\nFBE0\n5140\n8E20\nENDCHAR\nSTARTCHAR U_8CD0\nENCODING 36048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF240\n97E0\nF240\n9520\nF1C0\n9240\nF640\n0140\n6180\n9660\nENDCHAR\nSTARTCHAR U_8CD1\nENCODING 36049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9400\n95C0\nF400\n97E0\nF540\n9540\nF560\n2540\n55A0\n8920\nENDCHAR\nSTARTCHAR U_8CD2\nENCODING 36050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF380\n9440\n9820\nF380\n9000\nFFE0\n9100\nF540\n2940\n5120\n8B20\nENDCHAR\nSTARTCHAR U_8CD3\nENCODING 36051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n3F80\n2500\nFF80\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CD4\nENCODING 36052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\n7FC0\n4440\n7FC0\n5040\n5FC0\n5040\n5FC0\n8880\nENDCHAR\nSTARTCHAR U_8CD5\nENCODING 36053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n8920\n8FE0\nF900\n8D40\nFB80\n8B40\nFD40\n2920\n5720\n8A00\nENDCHAR\nSTARTCHAR U_8CD6\nENCODING 36054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8940\nFE20\n8BC0\nF880\n8FE0\nF880\n8AC0\n54A0\n4880\n8580\nENDCHAR\nSTARTCHAR U_8CD7\nENCODING 36055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n97E0\nF4A0\n97E0\n9080\nF7E0\n94A0\nF7E0\n24A0\n5080\n8880\nENDCHAR\nSTARTCHAR U_8CD8\nENCODING 36056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nE100\nAFE0\nE900\nA900\nEFC0\nA900\nE940\n4920\n5100\nAFE0\nENDCHAR\nSTARTCHAR U_8CD9\nENCODING 36057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9520\nF7E0\n9520\nF7E0\n9420\n97A0\nF6A0\n27A0\n5420\n9860\nENDCHAR\nSTARTCHAR U_8CDA\nENCODING 36058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n5F40\nE4E0\n3F80\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CDB\nENCODING 36059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7BC0\n2080\n7BC0\n2080\nDB60\n3F80\n2280\n2C80\n3F80\n71C0\nENDCHAR\nSTARTCHAR U_8CDC\nENCODING 36060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n97C0\nF440\n97C0\nF200\n97E0\nFAA0\n24A0\n5120\n8AC0\nENDCHAR\nSTARTCHAR U_8CDD\nENCODING 36061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9820\n9280\nF440\n9900\nFFE0\n9100\nF380\n2540\n5920\n8920\nENDCHAR\nSTARTCHAR U_8CDE\nENCODING 36062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nFFE0\n9120\n3F80\n2080\n3F80\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CDF\nENCODING 36063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE280\nAFE0\nEAA0\nAAA0\nEFE0\nAAA0\nAAA0\nEFE0\n2280\n5440\n8820\nENDCHAR\nSTARTCHAR U_8CE0\nENCODING 36064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\nF440\n9280\nFFE0\n9000\nF3C0\n9240\n2240\n53C0\n8A40\nENDCHAR\nSTARTCHAR U_8CE1\nENCODING 36065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4440\n7FE0\n4840\n7FC0\n5080\n7FC0\n50A0\n9F80\n70E0\nENDCHAR\nSTARTCHAR U_8CE2\nENCODING 36066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA240\nF980\n8A40\nFC20\nFF80\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CE3\nENCODING 36067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n4A40\n7FC0\n2080\n3F80\n2080\n3F80\nF0E0\nENDCHAR\nSTARTCHAR U_8CE4\nENCODING 36068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9FE0\nF140\n90A0\nF760\n9280\n9240\nFFE0\n2140\n50A0\n9F60\nENDCHAR\nSTARTCHAR U_8CE5\nENCODING 36069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\nF440\n9440\nFAA0\n9120\n9100\nFFE0\n2100\n5100\n9100\nENDCHAR\nSTARTCHAR U_8CE6\nENCODING 36070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n9EC0\nF0A0\n9FE0\nF280\n9280\n9B80\nFAA0\n2AA0\n5F60\n9020\nENDCHAR\nSTARTCHAR U_8CE7\nENCODING 36071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF520\n9540\nF980\n9140\nF220\n9D00\n9520\nF540\n2980\n5240\n8C20\nENDCHAR\nSTARTCHAR U_8CE8\nENCODING 36072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8020\nFFE0\n2480\n7FC0\nA0A0\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CE9\nENCODING 36073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n7A20\n49C0\n4800\n7BE0\n4880\n49C0\n7AA0\n4880\n8580\nENDCHAR\nSTARTCHAR U_8CEA\nENCODING 36074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4200\n7FE0\n5280\n9480\n3F80\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CEB\nENCODING 36075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n2480\n5540\nFFE0\nA0A0\n3F80\n2080\n3F80\n1100\n60C0\nENDCHAR\nSTARTCHAR U_8CEC\nENCODING 36076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9400\nF7C0\n9400\nF7C0\n9400\n9FE0\nF540\n2480\n5540\n8E20\nENDCHAR\nSTARTCHAR U_8CED\nENCODING 36077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9120\nF7A0\n9140\nFFE0\n9200\n97C0\nFA40\n23C0\n5240\n8BC0\nENDCHAR\nSTARTCHAR U_8CEE\nENCODING 36078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7F80\n0880\nFFE0\n5240\n3F80\n2080\n3F80\n2080\n3F80\nC060\nENDCHAR\nSTARTCHAR U_8CEF\nENCODING 36079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF7E0\n9AA0\nF3A0\n92A0\nF3A0\n97C0\nF080\n0FE0\n5100\n9300\nENDCHAR\nSTARTCHAR U_8CF0\nENCODING 36080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\nF100\n97C0\nF200\n9FE0\n9660\nFBC0\n2240\n53C0\n9A40\nENDCHAR\nSTARTCHAR U_8CF1\nENCODING 36081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9920\nFFE0\n9540\nF7C0\n9540\n97C0\nF100\n2FE0\n5100\n8900\nENDCHAR\nSTARTCHAR U_8CF2\nENCODING 36082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1780\n2480\nEFE0\n2380\n2540\n3F80\n2080\n3F80\n2080\n3F80\n60C0\nENDCHAR\nSTARTCHAR U_8CF3\nENCODING 36083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF480\n94C0\nFEA0\n9480\nFFE0\n9080\n9EA0\nFAA0\n2EC0\n5120\n8A20\nENDCHAR\nSTARTCHAR U_8CF4\nENCODING 36084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA40\n27E0\nFA20\nABE0\nAA20\nFBE0\n2220\n73E0\nA940\n2620\nENDCHAR\nSTARTCHAR U_8CF5\nENCODING 36085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\nF5A0\n9420\nF3C0\n9240\n93C0\nF240\n23C0\n5240\n9BC0\nENDCHAR\nSTARTCHAR U_8CF6\nENCODING 36086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF280\n9440\nF920\n97E0\nF520\n94A0\nF7E0\n0540\n5540\n99C0\nENDCHAR\nSTARTCHAR U_8CF7\nENCODING 36087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n5540\nFFE0\n8020\n3F80\n2080\n3F80\n2080\n3F80\nC060\nENDCHAR\nSTARTCHAR U_8CF8\nENCODING 36088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7920\n5540\n5FE0\n7200\n5FE0\n5440\n7F60\n55C0\n5440\n97C0\nBC60\nENDCHAR\nSTARTCHAR U_8CF9\nENCODING 36089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF440\n9280\nF7E0\n9280\nF440\n9820\n97C0\nF540\n2540\n5540\n9FE0\nENDCHAR\nSTARTCHAR U_8CFA\nENCODING 36090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF440\n9FE0\nF280\n9FE0\nF2A0\n9FE0\n92A0\nFFE0\n0280\n56C0\n8AA0\nENDCHAR\nSTARTCHAR U_8CFB\nENCODING 36091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF140\n9FE0\nF520\n97E0\nF520\n97E0\n9040\nFFE0\n2240\n5140\n9880\nENDCHAR\nSTARTCHAR U_8CFC\nENCODING 36092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9FE0\nF280\n97C0\n9280\nFFE0\n9540\n97C0\nF540\n6FE0\n9440\nENDCHAR\nSTARTCHAR U_8CFD\nENCODING 36093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8A20\n7FC0\n1200\nFFC0\n2080\n7FC0\nA0A0\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8CFE\nENCODING 36094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA7E0\nA100\nF7C0\nD100\nD7E0\nF440\nA7C0\nA440\nFFC0\n0C60\nENDCHAR\nSTARTCHAR U_8CFF\nENCODING 36095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF60\n95A0\nF360\n95A0\nF240\n9D20\n9280\nF120\n0640\n6080\n9700\nENDCHAR\nSTARTCHAR U_8D00\nENCODING 36096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\n9360\nF940\n9080\nF960\n3F80\n2080\n3F80\n2080\n3F80\n60C0\nENDCHAR\nSTARTCHAR U_8D01\nENCODING 36097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n79E0\n4940\n7A40\n9140\n7940\n4880\n7880\n5140\n8A20\nENDCHAR\nSTARTCHAR U_8D02\nENCODING 36098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n97A0\nF540\n97E0\n9180\nF660\n9140\nF6A0\n2120\n5040\n8B80\nENDCHAR\nSTARTCHAR U_8D03\nENCODING 36099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9540\nF7C0\n9100\nF7E0\n9520\nF7E0\n0140\n66A0\n9BC0\nENDCHAR\nSTARTCHAR U_8D04\nENCODING 36100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n5140\nFB40\n22A0\n3F80\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8D05\nENCODING 36101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFDE0\n1340\nFC80\n4940\nBFA0\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8D06\nENCODING 36102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF140\n9FE0\nF100\n9280\n9C60\nF280\n95A0\nFFE0\n2480\n5B40\n8920\nENDCHAR\nSTARTCHAR U_8D07\nENCODING 36103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n46C0\nF0A0\nAFE0\n4A80\nABE0\n3FA0\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8D08\nENCODING 36104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF440\n9280\nFFE0\n9AA0\n9FE0\nF000\n97C0\nF440\n27C0\n5440\n8FC0\nENDCHAR\nSTARTCHAR U_8D09\nENCODING 36105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9280\nFFE0\n9AA0\n9FE0\nF440\n97C0\nF440\n2FE0\n5100\n8900\nENDCHAR\nSTARTCHAR U_8D0A\nENCODING 36106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA500\nFFC0\nA500\nFFE0\n5A80\nBFE0\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8D0B\nENCODING 36107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5480\n7FE0\n5480\n57E0\n5400\n4FC0\n4840\n4FC0\n4480\n9860\nENDCHAR\nSTARTCHAR U_8D0C\nENCODING 36108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0AA0\nF6C0\n9FE0\nF280\n97C0\nF100\n97C0\nF100\n0FE0\n5280\n8C60\nENDCHAR\nSTARTCHAR U_8D0D\nENCODING 36109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF380\n9480\nF7E0\n9CA0\n97E0\nF400\n97C0\nF400\n2BC0\n5240\n93C0\nENDCHAR\nSTARTCHAR U_8D0E\nENCODING 36110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nFFE0\n9280\nF7C0\n9540\nF7C0\n9540\nFFE0\n0920\n6BA0\n9860\nENDCHAR\nSTARTCHAR U_8D0F\nENCODING 36111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2000\n3FC0\n2080\n7FC0\n4940\n7F40\n49C0\n7F40\n8A60\nENDCHAR\nSTARTCHAR U_8D10\nENCODING 36112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\nF160\n97C0\n9140\nFFE0\n9280\nF540\n2FE0\n5AA0\n8FE0\nENDCHAR\nSTARTCHAR U_8D11\nENCODING 36113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBC0\n5080\nFFE0\n8A40\nFBC0\n8A40\nFBC0\n2240\nFBC0\n2420\nENDCHAR\nSTARTCHAR U_8D12\nENCODING 36114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA2A0\nFBE0\n8920\nFFE0\n2080\n3F80\n2080\n3F80\n1100\n60C0\nENDCHAR\nSTARTCHAR U_8D13\nENCODING 36115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE0C0\nA0A0\nEFE0\nBA80\nAF80\nF9A0\nAFA0\nEAC0\n4F60\nA8A0\nB120\nENDCHAR\nSTARTCHAR U_8D14\nENCODING 36116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\n3F80\n7BC0\nCA60\n7BC0\n4A40\n7BC0\nCE60\nENDCHAR\nSTARTCHAR U_8D15\nENCODING 36117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\nAFE0\nA880\nBFE0\nEAA0\nAFE0\nAA40\nEBC0\n2240\n63C0\nA660\nENDCHAR\nSTARTCHAR U_8D16\nENCODING 36118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\nF100\n9FE0\n9AA0\nFFE0\n9440\nF7C0\n2440\n57C0\n8C60\nENDCHAR\nSTARTCHAR U_8D17\nENCODING 36119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nAFC0\nE840\nAFE0\nAAA0\nBFE0\n9040\n9FC0\n9040\n9FC0\nB060\nENDCHAR\nSTARTCHAR U_8D18\nENCODING 36120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\nFFE0\n9AA0\nF7C0\n9540\nF4C0\n9640\nF540\n07C0\n5280\n9440\nENDCHAR\nSTARTCHAR U_8D19\nENCODING 36121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1CE0\n1080\nFFE0\n92A0\nBFE0\nA940\n3FE0\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_8D1A\nENCODING 36122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nEEE0\nAA80\nFFE0\nA020\nEEE0\nAA80\nEEE0\n0A80\nAEA0\nAAE0\nENDCHAR\nSTARTCHAR U_8D1B\nENCODING 36123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBE0\n5540\nFFE0\n4880\n7FE0\n4A40\n7BC0\n2240\nFBC0\n2420\nENDCHAR\nSTARTCHAR U_8D1C\nENCODING 36124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nEFE0\nA080\nE7E0\nB480\nFFA0\nA5A0\nFFC0\n1540\nB7C0\nA8A0\nENDCHAR\nSTARTCHAR U_8D1D\nENCODING 36125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2480\n2480\n2480\n2480\n2480\n2480\n0A00\n1180\n6080\nENDCHAR\nSTARTCHAR U_8D1E\nENCODING 36126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n07E0\n0400\n3F80\n2080\n2480\n2480\n2480\n2480\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_8D1F\nENCODING 36127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F00\n2200\n7F80\nA080\n2480\n2480\n2480\n2480\n1B00\nE0C0\nENDCHAR\nSTARTCHAR U_8D20\nENCODING 36128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1900\n2080\n7FC0\n0080\n3F80\n2480\n2480\n2A80\n1100\n60C0\nENDCHAR\nSTARTCHAR U_8D21\nENCODING 36129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n0000\n3F80\n2080\n2480\n2480\n2A80\n1100\n60C0\nENDCHAR\nSTARTCHAR U_8D22\nENCODING 36130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8880\nAFE0\nA880\nA980\nA980\nAA80\n2280\n5480\n4880\n8180\nENDCHAR\nSTARTCHAR U_8D23\nENCODING 36131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n7FC0\n0400\nFFE0\n2080\n2480\n2480\n0900\nF0E0\nENDCHAR\nSTARTCHAR U_8D24\nENCODING 36132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n9240\n9180\n9240\n3FA0\n2080\n2480\n2480\n2480\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_8D25\nENCODING 36133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8900\nA9E0\nA940\nAB40\nAD40\nA940\n2140\n5080\n4940\n8A20\nENDCHAR\nSTARTCHAR U_8D26\nENCODING 36134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA40\n8A40\nAA80\nAB00\nAA00\nAFE0\nAA80\n2280\n5240\n4B40\n8A20\nENDCHAR\nSTARTCHAR U_8D27\nENCODING 36135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n2380\n6E20\nA1E0\n0000\n3F80\n2080\n2480\n2480\n0A00\n71C0\nENDCHAR\nSTARTCHAR U_8D28\nENCODING 36136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01C0\n7E00\n4200\n7FE0\n4200\n5FC0\n5040\n5240\n5240\n8500\nB8E0\nENDCHAR\nSTARTCHAR U_8D29\nENCODING 36137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF820\n8BC0\nAA00\nABE0\nAAA0\nAAA0\nAAA0\n22A0\n5240\n4CA0\n8920\nENDCHAR\nSTARTCHAR U_8D2A\nENCODING 36138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n3580\nDF60\n0100\n3F80\n2480\n2480\n2A80\n1100\n60C0\nENDCHAR\nSTARTCHAR U_8D2B\nENCODING 36139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2080\nDFE0\n0880\n1100\n7F80\n2080\n2480\n2480\n0A00\n71C0\nENDCHAR\nSTARTCHAR U_8D2C\nENCODING 36140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF860\n8F80\nA900\nA880\nAFE0\nA840\nA880\nA900\n5200\n4D00\n88E0\nENDCHAR\nSTARTCHAR U_8D2D\nENCODING 36141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n8A00\nABE0\nAC20\nA920\nAA20\nAAA0\n2760\n5020\n4820\n88C0\nENDCHAR\nSTARTCHAR U_8D2E\nENCODING 36142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8880\nABE0\nAA20\nAA20\nA800\nA800\n2000\n5000\n4BE0\n8800\nENDCHAR\nSTARTCHAR U_8D2F\nENCODING 36143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\nFFE0\n2480\n3F80\n0000\n3F80\n2480\n2480\n0A00\n71C0\nENDCHAR\nSTARTCHAR U_8D30\nENCODING 36144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n0140\nFFE0\n0100\n7D00\n0100\n7D00\n5520\n54A0\n2860\nC620\nENDCHAR\nSTARTCHAR U_8D31\nENCODING 36145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n8A40\nAFC0\nAA00\nAA60\nAF80\nA920\n2140\n50A0\n4960\n8620\nENDCHAR\nSTARTCHAR U_8D32\nENCODING 36146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1500\nFFE0\n1100\n3F80\n2080\n2480\n2480\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_8D33\nENCODING 36147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nFFE0\n2480\n2780\n2000\n3FE0\n2080\n2480\n2480\n0B00\n70C0\nENDCHAR\nSTARTCHAR U_8D34\nENCODING 36148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8880\nA8E0\nA880\nA880\nABE0\nAA20\nAA20\n2220\n53E0\n8A20\nENDCHAR\nSTARTCHAR U_8D35\nENCODING 36149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n2480\n3F80\n0400\nFFE0\n2080\n2480\n2480\n0B00\nF0E0\nENDCHAR\nSTARTCHAR U_8D36\nENCODING 36150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nAA20\nAA20\nAA20\nABE0\nA940\nA940\n3140\n4A40\n8460\nENDCHAR\nSTARTCHAR U_8D37\nENCODING 36151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\n24E0\n6F00\nA120\n20E0\n3F80\n2080\n2480\n2480\n1900\nE0E0\nENDCHAR\nSTARTCHAR U_8D38\nENCODING 36152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n4120\n5120\nFAC0\n0800\n3F80\n2080\n2480\n2480\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_8D39\nENCODING 36153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n7FC0\n0940\n7FC0\n4900\n7FE0\n20A0\n2480\n2480\n0B00\n70C0\nENDCHAR\nSTARTCHAR U_8D3A\nENCODING 36154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFD20\n25E0\n4400\n9FC0\n1040\n1240\n1240\n1240\n0D80\n7060\nENDCHAR\nSTARTCHAR U_8D3B\nENCODING 36155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8900\nAA40\nAFE0\nA820\nA800\nABE0\n2220\n5220\n4BE0\n8A20\nENDCHAR\nSTARTCHAR U_8D3C\nENCODING 36156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8C0\n88A0\nAFE0\nAA80\nAAA0\nAFA0\nAAC0\nA280\n54A0\n4960\n9220\nENDCHAR\nSTARTCHAR U_8D3D\nENCODING 36157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFF80\n2280\nF780\n22A0\n6460\n3F80\n2080\n2480\n0B00\n70C0\nENDCHAR\nSTARTCHAR U_8D3E\nENCODING 36158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n7FC0\n4A40\n7FC0\n0000\n3F80\n2480\n2480\n0A00\n71C0\nENDCHAR\nSTARTCHAR U_8D3F\nENCODING 36159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8FE0\nA900\nABE0\nAA20\nAFE0\nAA20\n23E0\n5220\n4A20\n8A60\nENDCHAR\nSTARTCHAR U_8D40\nENCODING 36160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nBA80\nA320\nFBE0\n0000\n3F80\n2080\n2480\n2480\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_8D41\nENCODING 36161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n4200\nDFE0\n4200\n4FC0\n0000\n3F80\n2480\n2480\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_8D42\nENCODING 36162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n8BE0\nAA40\nAD80\nAA40\nAC20\nABC0\n2240\n5240\n4BC0\n8A40\nENDCHAR\nSTARTCHAR U_8D43\nENCODING 36163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8BE0\nAA00\nAA80\nAA80\nABE0\nAA80\n2280\n5480\n4880\n8BE0\nENDCHAR\nSTARTCHAR U_8D44\nENCODING 36164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n2FE0\nD240\n4500\n48C0\n3F80\n2080\n2480\n2480\n0A00\n71C0\nENDCHAR\nSTARTCHAR U_8D45\nENCODING 36165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8FE0\nA900\nAA40\nABC0\nA880\nA920\n2640\n5080\n4940\n8E20\nENDCHAR\nSTARTCHAR U_8D46\nENCODING 36166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nAA20\nABE0\nAA40\nAA20\nAA80\n2460\n5580\n4840\n8820\nENDCHAR\nSTARTCHAR U_8D47\nENCODING 36167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8C0\n88A0\nAFE0\nA880\nACA0\nAAC0\nA9C0\n22A0\n54A0\n4AA0\n8900\nENDCHAR\nSTARTCHAR U_8D48\nENCODING 36168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8800\nABE0\nA800\nAFE0\nAA80\nAAA0\nAA40\n2A40\n5AA0\n8B20\nENDCHAR\nSTARTCHAR U_8D49\nENCODING 36169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1480\nFFE0\n2480\n7FC0\nA0A0\n2480\n2480\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_8D4A\nENCODING 36170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8940\nAA20\nADC0\nA800\nAFE0\nA880\n22C0\n54A0\n4CA0\n8980\nENDCHAR\nSTARTCHAR U_8D4B\nENCODING 36171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8EC0\nA8A0\nAFE0\nAA80\nAA80\nAB80\nAAA0\n2AA0\n5B60\n8C20\nENDCHAR\nSTARTCHAR U_8D4C\nENCODING 36172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8FA0\nA940\nAFE0\nA900\nABC0\nAA40\n27C0\n5240\n4A40\n8BC0\nENDCHAR\nSTARTCHAR U_8D4D\nENCODING 36173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n5540\nFFE0\n8020\n3F80\n2480\n2480\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_8D4E\nENCODING 36174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8FE0\nA900\nAFE0\nAAA0\nAD80\nAA80\nA7E0\n3100\n4A80\n8C60\nENDCHAR\nSTARTCHAR U_8D4F\nENCODING 36175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\nFFE0\n9120\n1F00\n0000\n3F80\n2480\n2480\n0A00\n71C0\nENDCHAR\nSTARTCHAR U_8D50\nENCODING 36176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n8A40\nABC0\nAA40\nABC0\nAA00\nAFE0\nA2A0\n24A0\n5120\n8AC0\nENDCHAR\nSTARTCHAR U_8D51\nENCODING 36177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\n2480\n0A00\n1100\nFBE0\nAAA0\nAAA0\n2080\n5140\n8A20\nENDCHAR\nSTARTCHAR U_8D52\nENCODING 36178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8AA0\nAAA0\nABE0\nAAA0\nABE0\nAA20\nABA0\n52A0\n4BA0\n8460\nENDCHAR\nSTARTCHAR U_8D53\nENCODING 36179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4240\n7FE0\n4240\n5FC0\n4880\n5AC0\n6AA0\n8500\n98E0\nENDCHAR\nSTARTCHAR U_8D54\nENCODING 36180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF880\n8FE0\nAA40\nA980\nAFE0\nA800\n23C0\n5240\n4A40\n8BC0\nENDCHAR\nSTARTCHAR U_8D55\nENCODING 36181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFAA0\n8AC0\nAC80\nA940\nAAA0\nAC80\nAAA0\n22C0\n5580\n4A40\n8C20\nENDCHAR\nSTARTCHAR U_8D56\nENCODING 36182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF9E0\n2240\nFFE0\nAA20\nAAA0\nFAA0\n22A0\n7080\nA940\n2620\nENDCHAR\nSTARTCHAR U_8D57\nENCODING 36183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nAAA0\nAA20\nAAA0\nA800\nABE0\n22A0\n5360\n4AA0\n8BE0\nENDCHAR\nSTARTCHAR U_8D58\nENCODING 36184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n11E0\nFF40\n2480\n4960\nBF80\n2080\n2480\n2480\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_8D59\nENCODING 36185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8A0\n8FE0\nAAA0\nABE0\nAAA0\nABE0\nAAA0\n2040\n57E0\n4A40\n89C0\nENDCHAR\nSTARTCHAR U_8D5A\nENCODING 36186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\nFFE0\n8A80\nAFE0\nAAA0\nAFE0\nAAA0\n2FE0\n5280\n56C0\n8AA0\nENDCHAR\nSTARTCHAR U_8D5B\nENCODING 36187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9220\n7FC0\n1200\nFFE0\n3180\nD560\n1500\n0B00\n70C0\nENDCHAR\nSTARTCHAR U_8D5C\nENCODING 36188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n97E0\n9080\nBBE0\nA880\nABE0\nBA20\n92A0\n92A0\n9140\nFE20\nENDCHAR\nSTARTCHAR U_8D5D\nENCODING 36189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA900\nEFC0\nA900\nAFC0\nA900\nBFC0\n9040\n9240\n8500\nF8E0\nENDCHAR\nSTARTCHAR U_8D5E\nENCODING 36190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\n7BC0\n9480\nFFE0\n35A0\n5AE0\nBF80\n2480\n2480\n0A00\n71C0\nENDCHAR\nSTARTCHAR U_8D5F\nENCODING 36191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n26C0\nF880\n57E0\n2280\n5B40\n8A40\n3FA0\n2480\n2480\n0A00\n3180\nENDCHAR\nSTARTCHAR U_8D60\nENCODING 36192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n8FE0\nA920\nADA0\nAFE0\nA800\nA7C0\n2440\n57C0\n5440\n87C0\nENDCHAR\nSTARTCHAR U_8D61\nENCODING 36193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n8A40\nAFE0\nAA40\nABE0\nAA00\nAAE0\nA200\n35E0\n4D20\n89E0\nENDCHAR\nSTARTCHAR U_8D62\nENCODING 36194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2000\n3FC0\n1080\n7FC0\n5140\n7540\n55C0\n7540\n9A60\nENDCHAR\nSTARTCHAR U_8D63\nENCODING 36195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\nFA80\n5140\nFFE0\n9080\nF7E0\n9220\nF2A0\n22A0\nF940\n2620\nENDCHAR\nSTARTCHAR U_8D64\nENCODING 36196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n3FC0\n0400\nFFE0\n0900\n2940\n2920\n4920\n1500\n6200\nENDCHAR\nSTARTCHAR U_8D65\nENCODING 36197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFA00\n23E0\n2420\nF940\n5100\n5900\nD680\n5280\n9440\nB820\nENDCHAR\nSTARTCHAR U_8D66\nENCODING 36198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7D00\n11E0\n1340\nFD40\n2940\n6D40\nAB40\n2A80\n4940\n9A20\nENDCHAR\nSTARTCHAR U_8D67\nENCODING 36199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n7D20\n1160\n1100\nFFE0\n2920\n6D20\nABA0\nA940\n49A0\n9920\nENDCHAR\nSTARTCHAR U_8D68\nENCODING 36200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n7C80\n13E0\nFEA0\n2AA0\n6EA0\nABE0\nAA80\n28A0\n48A0\n9BE0\nENDCHAR\nSTARTCHAR U_8D69\nENCODING 36201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7DC0\n1280\nFFE0\n2AA0\n2AA0\n6FE0\nAA00\n2A20\n4A20\n99E0\nENDCHAR\nSTARTCHAR U_8D6A\nENCODING 36202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF8E0\n2080\nFFE0\n5220\n5AA0\nD6A0\n52A0\n52A0\n9140\nB220\nENDCHAR\nSTARTCHAR U_8D6B\nENCODING 36203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n7FE0\n1080\nFFE0\n2940\n6D40\nAB60\nAD60\n2940\n4A40\n98C0\nENDCHAR\nSTARTCHAR U_8D6C\nENCODING 36204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\n7C80\n13E0\nFE20\n2BE0\n2A20\n6FE0\nAA20\n2BE0\n4940\n9A20\nENDCHAR\nSTARTCHAR U_8D6D\nENCODING 36205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1120\n7FA0\n1140\n13E0\nFD00\n2BE0\n6E20\nABE0\n2A20\n4BE0\n9A20\nENDCHAR\nSTARTCHAR U_8D6E\nENCODING 36206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2760\nFD20\n2520\nFF60\n5400\n57E0\nDCA0\n57A0\n5440\n94A0\n3520\nENDCHAR\nSTARTCHAR U_8D6F\nENCODING 36207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n7FE0\n12A0\n13E0\nFEA0\n2BE0\n6E80\nABE0\n2A20\n4FE0\n9A20\nENDCHAR\nSTARTCHAR U_8D70\nENCODING 36208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n0400\nFFE0\n0400\n2400\n27C0\n2400\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_8D71\nENCODING 36209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n0400\nFFE0\n2080\n1100\n0600\n1800\nE600\n41E0\nENDCHAR\nSTARTCHAR U_8D72\nENCODING 36210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n7FE0\n1120\nFD20\n1120\n5D20\n5220\n54C0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_8D73\nENCODING 36211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\n1140\n7D40\n1140\nFF40\n11C0\n5F40\n5040\n7040\n9840\n87E0\nENDCHAR\nSTARTCHAR U_8D74\nENCODING 36212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1080\n7C80\n10C0\nFEA0\n10A0\n5E80\n5080\n7080\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D75\nENCODING 36213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1240\n7D40\n1080\nFE80\n1080\n5D40\n5140\n7240\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D76\nENCODING 36214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1080\n7C80\n1080\nFFE0\n1080\n5C80\n5080\n5080\n7080\n8FE0\nENDCHAR\nSTARTCHAR U_8D77\nENCODING 36215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n13C0\n7C40\n1040\nFFC0\n1200\n5220\n5E20\n53E0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_8D78\nENCODING 36216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1080\n7EA0\n12A0\nFEA0\n12A0\n5EA0\n53E0\n7220\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D79\nENCODING 36217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n11E0\n7E20\n1120\nFCA0\n1060\n5FA0\n5120\n70C0\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D7A\nENCODING 36218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n2080\nF940\n2220\nFCA0\n5080\n5BE0\n5040\n5080\nB100\n8FE0\nENDCHAR\nSTARTCHAR U_8D7B\nENCODING 36219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n10C0\n7DA0\n12A0\nFC80\n10A0\n5C40\n5080\n7300\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D7C\nENCODING 36220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1100\n7BE0\n1420\nF940\n1100\n5E80\n5240\n5460\n7440\n8FE0\nENDCHAR\nSTARTCHAR U_8D7D\nENCODING 36221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n13C0\n7D40\n1140\nFD40\n13E0\n5D00\n5280\n7460\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D7E\nENCODING 36222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\n7980\n1100\n11E0\nFF40\n1140\n5D40\n5240\n5240\n7400\n8FE0\nENDCHAR\nSTARTCHAR U_8D7F\nENCODING 36223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\n1380\n7A80\n1280\nFFE0\n1280\n5A80\n52A0\n5360\n7220\n8FC0\nENDCHAR\nSTARTCHAR U_8D80\nENCODING 36224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n13E0\n7E80\n1280\nFFE0\n10A0\n5DA0\n52E0\n7480\n9880\n87E0\nENDCHAR\nSTARTCHAR U_8D81\nENCODING 36225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1140\n7E20\n1080\nFD20\n1240\n5C80\n5120\n7040\n9880\n87E0\nENDCHAR\nSTARTCHAR U_8D82\nENCODING 36226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n7A00\n17E0\n14A0\nFC80\n12C0\n5AA0\n54A0\n5280\n7100\n8FE0\nENDCHAR\nSTARTCHAR U_8D83\nENCODING 36227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7880\n1280\n13C0\nFC80\n57E0\n5080\n5D40\n5140\n7220\n8FE0\nENDCHAR\nSTARTCHAR U_8D84\nENCODING 36228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n1240\n7E40\n13C0\nFE40\n13C0\n5E40\n5240\n77E0\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D85\nENCODING 36229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n1140\n7D40\n12C0\nFC00\n13C0\n5E40\n5240\n73C0\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D86\nENCODING 36230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\nF780\n2480\n2480\nFFE0\n2480\nBCA0\nA560\nE6A0\n9040\n8FE0\nENDCHAR\nSTARTCHAR U_8D87\nENCODING 36231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF080\n27E0\n2000\nFA40\n2140\nB940\nA080\nE7E0\n9000\n8FE0\nENDCHAR\nSTARTCHAR U_8D88\nENCODING 36232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF100\n21E0\n2100\nFFC0\n2440\nBC40\nA440\nE7C0\n9000\n8FE0\nENDCHAR\nSTARTCHAR U_8D89\nENCODING 36233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n12A0\n7EA0\n13E0\nFC80\n12A0\n5EA0\n53E0\n7220\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D8A\nENCODING 36234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n10A0\n7FE0\n1280\nFEA0\n12A0\n5E40\n52A0\n7120\n9A00\n87E0\nENDCHAR\nSTARTCHAR U_8D8B\nENCODING 36235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n11C0\n7E40\n1080\nFFE0\n1020\n5DE0\n5020\n73E0\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D8C\nENCODING 36236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1080\n7FE0\n1080\nFDC0\n1000\n5FE0\n5220\n73E0\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D8D\nENCODING 36237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n11C0\n7A40\n1580\nFD00\n12E0\n5D20\n5340\n7480\n9100\n8FE0\nENDCHAR\nSTARTCHAR U_8D8E\nENCODING 36238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1280\n7FE0\n1080\nFFE0\n1080\n5DC0\n52A0\n74A0\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D8F\nENCODING 36239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n13C0\n7C80\n13E0\nFC80\n13E0\n5E20\n5220\n73E0\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D90\nENCODING 36240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2120\nFDA0\n2360\nF920\n2360\nBDA0\nA120\nE360\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_8D91\nENCODING 36241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n1180\n7CE0\n11A0\nFE40\n1240\n5E40\n52A0\n7120\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D92\nENCODING 36242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n1140\n7D60\n1340\nFD40\n1360\n5D40\n5240\n7060\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D93\nENCODING 36243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n1240\n7E40\n1260\nFC80\n13E0\n5D80\n52C0\n74A0\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D94\nENCODING 36244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F20\n22A0\nFBA0\n24A0\nFEA0\n29A0\nBAA0\nA420\nE8E0\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_8D95\nENCODING 36245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1220\n7FE0\n1220\nFFE0\n1000\n5FE0\n5080\n77E0\n9880\n87E0\nENDCHAR\nSTARTCHAR U_8D96\nENCODING 36246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1540\n7D40\n17A0\nF920\n1100\n5FC0\n5100\n77E0\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D97\nENCODING 36247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\nFA20\n1220\n13E0\nFC80\n12E0\n5A80\n5380\n74E0\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D98\nENCODING 36248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFC40\n27C0\n2480\nFF00\n25C0\nBF00\nA5C0\nE720\n98E0\n8FE0\nENDCHAR\nSTARTCHAR U_8D99\nENCODING 36249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n12A0\n11C0\n7C80\n13E0\nFE20\n13E0\n5E20\n53E0\n7220\n9A20\n87E0\nENDCHAR\nSTARTCHAR U_8D9A\nENCODING 36250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF7C0\n2100\n27C0\nFD40\n27C0\nBB80\nA540\nE540\n9120\n8FE0\nENDCHAR\nSTARTCHAR U_8D9B\nENCODING 36251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1140\n7E20\n11C0\nFC80\n13E0\n5CA0\n52C0\n77E0\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8D9C\nENCODING 36252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n13E0\n7D60\n13A0\nF920\n17E0\n59A0\n5360\n7520\n9840\n87E0\nENDCHAR\nSTARTCHAR U_8D9D\nENCODING 36253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF280\n2D60\n2380\nF880\n2140\nBAA0\nAA40\nE1C0\n9000\n8FE0\nENDCHAR\nSTARTCHAR U_8D9E\nENCODING 36254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nF7C0\n2280\n2FE0\nF800\n27C0\nBC40\nA7C0\nE440\n97C0\n8FE0\nENDCHAR\nSTARTCHAR U_8D9F\nENCODING 36255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\nF100\n2FE0\nF820\n2BA0\nBAA0\nABA0\nE860\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8DA0\nENCODING 36256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\n1080\n7FE0\n1220\nFFE0\n1220\n5FE0\n5080\n77E0\n9880\n87E0\nENDCHAR\nSTARTCHAR U_8DA1\nENCODING 36257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1300\n1280\n7FE0\n1280\nFFE0\n1280\n5FE0\n5280\n73E0\n9A00\n87E0\nENDCHAR\nSTARTCHAR U_8DA2\nENCODING 36258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nF840\n23C0\n2040\nFBE0\n2080\nBAA0\nA1C0\nE2A0\n94A0\n8FE0\nENDCHAR\nSTARTCHAR U_8DA3\nENCODING 36259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F80\n2500\nF7E0\n2520\nF720\n25A0\nB540\nAF40\nE1A0\nB100\n8FE0\nENDCHAR\nSTARTCHAR U_8DA4\nENCODING 36260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF7E0\n2420\n23C0\nF900\n23E0\nB620\nAA20\nE3E0\n9220\n8FE0\nENDCHAR\nSTARTCHAR U_8DA5\nENCODING 36261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n13E0\n7D40\n17E0\nFD60\n1620\n5FE0\n5420\n77E0\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8DA6\nENCODING 36262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\nF5E0\n22A0\n2480\nF940\n2220\nBBE0\nA220\nE3E0\n9000\n8FE0\nENDCHAR\nSTARTCHAR U_8DA7\nENCODING 36263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n1240\n7FC0\n1240\nFFE0\n1080\n5EE0\n5280\n75E0\n9800\n87E0\nENDCHAR\nSTARTCHAR U_8DA8\nENCODING 36264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n12A0\n7FE0\n11A0\nFD40\n13E0\n5EA0\n53E0\n70A0\n9940\n87E0\nENDCHAR\nSTARTCHAR U_8DA9\nENCODING 36265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFD40\n27C0\n2540\nFFC0\n2280\nBFE0\nA280\nEFE0\n9440\n8FE0\nENDCHAR\nSTARTCHAR U_8DAA\nENCODING 36266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\nFA40\n27E0\nFAA0\n23E0\nBAA0\nA3E0\nE140\nB220\n8FE0\nENDCHAR\nSTARTCHAR U_8DAB\nENCODING 36267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2100\nFFE0\n2440\nFBA0\n2280\nBFE0\nAAA0\nEBA0\nA820\n9FE0\nENDCHAR\nSTARTCHAR U_8DAC\nENCODING 36268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nF100\n27E0\nFA40\n27E0\nB240\nAFE0\nE280\nB460\n8FE0\nENDCHAR\nSTARTCHAR U_8DAD\nENCODING 36269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n23E0\nFE80\n23E0\nFE80\n23E0\nBA80\nA7E0\nE540\nAAA0\n9FE0\nENDCHAR\nSTARTCHAR U_8DAE\nENCODING 36270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\nFBC0\n2EE0\nFAA0\n2EE0\nA100\nBFE0\nE540\nA920\n9FE0\nENDCHAR\nSTARTCHAR U_8DAF\nENCODING 36271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n25A0\nFB60\n25A0\nFFE0\n2480\nBFE0\nA480\nE7E0\nB480\n8FE0\nENDCHAR\nSTARTCHAR U_8DB0\nENCODING 36272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nF540\n2920\nFFE0\n2920\nABA0\nBD60\nABA0\nED60\nB920\n8FE0\nENDCHAR\nSTARTCHAR U_8DB1\nENCODING 36273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n2FE0\nF240\n2FE0\nFAA0\n27E0\nA520\nB5A0\nE240\nB420\n8FE0\nENDCHAR\nSTARTCHAR U_8DB2\nENCODING 36274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A40\n2FE0\nF240\n2FE0\nF520\n27C0\nA640\nBD40\nE7C0\nA820\n9FE0\nENDCHAR\nSTARTCHAR U_8DB3\nENCODING 36275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n2080\n3F80\n0400\n2400\n27C0\n2400\n5400\n4C00\n83E0\nENDCHAR\nSTARTCHAR U_8DB4\nENCODING 36276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n9280\n9280\nF280\n2280\nBA80\nA280\nA440\nB440\nC820\n1020\nENDCHAR\nSTARTCHAR U_8DB5\nENCODING 36277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7A00\n4BE0\n4C20\n7820\n1220\n5920\n5120\n5020\n5820\nE0C0\nENDCHAR\nSTARTCHAR U_8DB6\nENCODING 36278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4880\n4880\n7880\n17E0\n5080\n5880\n5080\n5880\nE280\n0100\nENDCHAR\nSTARTCHAR U_8DB7\nENCODING 36279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7BE0\n4C00\n4800\n7BC0\n1080\n5900\n5200\n5420\n5C20\nE3E0\nENDCHAR\nSTARTCHAR U_8DB8\nENCODING 36280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0800\n0F80\n1080\n3FC0\nE040\n3FC0\n2400\n27C0\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_8DB9\nENCODING 36281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7900\n4FC0\n4940\n7940\n17E0\n5900\n5100\n5A80\nE440\n0820\nENDCHAR\nSTARTCHAR U_8DBA\nENCODING 36282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n4FC0\n7900\n1100\n5FE0\n5100\n5280\n5A80\nE440\n0820\nENDCHAR\nSTARTCHAR U_8DBB\nENCODING 36283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7900\n4A80\n4C40\n7A20\n1100\n5FE0\n5040\n5880\nE080\n0100\nENDCHAR\nSTARTCHAR U_8DBC\nENCODING 36284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4A40\n4A40\n7A40\n1240\n5FE0\n5240\n5240\n5A40\nE440\n0840\nENDCHAR\nSTARTCHAR U_8DBD\nENCODING 36285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7880\n4FE0\n4900\n7900\n11E0\n5920\n5120\n5220\n5A20\nE4C0\nENDCHAR\nSTARTCHAR U_8DBE\nENCODING 36286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n7880\n4880\n4A80\n7AE0\n1280\n5A80\n5280\n5280\n5A80\nE7E0\nENDCHAR\nSTARTCHAR U_8DBF\nENCODING 36287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A40\n4A40\n7A80\n12E0\n5A20\n5220\n5340\n5C80\nE540\n0A20\nENDCHAR\nSTARTCHAR U_8DC0\nENCODING 36288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4A20\n4A20\n7BE0\n1220\n5A20\n53E0\n5220\n5A20\nE420\n0860\nENDCHAR\nSTARTCHAR U_8DC1\nENCODING 36289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\n7AA0\n4AA0\n4AA0\n7BE0\n1220\n5A00\n5200\n5220\n5A20\nE1E0\nENDCHAR\nSTARTCHAR U_8DC2\nENCODING 36290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n7880\n4FE0\n4880\n7880\n17E0\n5A20\n5240\n5180\n5A40\nE420\nENDCHAR\nSTARTCHAR U_8DC3\nENCODING 36291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78C0\n4F00\n4900\n7900\n17E0\n5100\n5900\n5280\n5A80\nE440\n0820\nENDCHAR\nSTARTCHAR U_8DC4\nENCODING 36292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7A80\n4C40\n4820\n7BC0\n1240\n5A40\n52C0\n5220\n5E20\nE3E0\nENDCHAR\nSTARTCHAR U_8DC5\nENCODING 36293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n4B80\n4A00\n7BE0\n1240\n5240\n5AC0\n5260\n5A40\nE440\n0840\nENDCHAR\nSTARTCHAR U_8DC6\nENCODING 36294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n7880\n4940\n4A20\n7BE0\n1000\n5BE0\n5220\n5220\n5A20\nE3E0\nENDCHAR\nSTARTCHAR U_8DC7\nENCODING 36295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\n7D40\n4D40\n4FE0\n7D40\n1540\n5DC0\n5540\n5400\n5C00\nE7E0\nENDCHAR\nSTARTCHAR U_8DC8\nENCODING 36296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7A80\n4C40\n48A0\n7900\n1240\n5880\n5320\n5040\n5980\nE600\nENDCHAR\nSTARTCHAR U_8DC9\nENCODING 36297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n4A80\n7C40\n1120\n5880\n57E0\n5040\n5A80\nE100\n0080\nENDCHAR\nSTARTCHAR U_8DCA\nENCODING 36298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4FC0\n4900\n7900\n17E0\n5100\n5B80\n5540\n5920\nE100\n0100\nENDCHAR\nSTARTCHAR U_8DCB\nENCODING 36299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n7A40\n4FE0\n4A00\n7BC0\n1240\n5B40\n5540\n5480\n5940\nE620\nENDCHAR\nSTARTCHAR U_8DCC\nENCODING 36300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n7A80\n4BE0\n4C80\n7880\n17E0\n5880\n5140\n5140\n5A20\nE420\nENDCHAR\nSTARTCHAR U_8DCD\nENCODING 36301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4880\n4FE0\n7880\n1080\n5BE0\n5220\n5220\n5A20\nE3E0\n0220\nENDCHAR\nSTARTCHAR U_8DCE\nENCODING 36302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4FE0\n4C20\n7800\n1200\n5240\n5B80\n5200\n5A20\nE220\n01E0\nENDCHAR\nSTARTCHAR U_8DCF\nENCODING 36303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF400\n94E0\n9FA0\nF4A0\n24A0\nA4A0\nB4A0\nA4A0\nB4A0\nCAE0\n1120\nENDCHAR\nSTARTCHAR U_8DD0\nENCODING 36304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9280\n9280\nF2A0\n2BC0\nAA80\nBA80\nAA80\nABA0\nBEA0\nE460\nENDCHAR\nSTARTCHAR U_8DD1\nENCODING 36305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nF7C0\n9840\n9740\nF540\n2540\nB740\nA4A0\nA420\nB420\nC3E0\nENDCHAR\nSTARTCHAR U_8DD2\nENCODING 36306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\n7820\n4BA0\n4AA0\n7AA0\n12A0\n5AA0\n53A0\n5020\n5820\nE0E0\nENDCHAR\nSTARTCHAR U_8DD3\nENCODING 36307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7880\n4FE0\n4880\n7880\n1080\n5BE0\n5080\n5080\n5880\nE7E0\nENDCHAR\nSTARTCHAR U_8DD4\nENCODING 36308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n4BE0\n4C20\n7BA0\n12A0\n52A0\n5AA0\n53A0\n5820\nE0A0\n0040\nENDCHAR\nSTARTCHAR U_8DD5\nENCODING 36309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4880\n48E0\n7880\n1080\n5BE0\n5220\n5220\n5A20\nE3E0\n0220\nENDCHAR\nSTARTCHAR U_8DD6\nENCODING 36310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4900\n4900\n7A00\n13E0\n5620\n5A20\n5220\n5A20\nE3E0\n0220\nENDCHAR\nSTARTCHAR U_8DD7\nENCODING 36311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n9240\n9440\nFDE0\n2440\nA640\nB540\nA440\nA440\nB440\nC4C0\nENDCHAR\nSTARTCHAR U_8DD8\nENCODING 36312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4CA0\n4AC0\n7880\n13E0\n5880\n5080\n57E0\n5880\nE080\n0080\nENDCHAR\nSTARTCHAR U_8DD9\nENCODING 36313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n4A40\n7BC0\n1240\n5240\n5A40\n53C0\n5A40\nE240\n07E0\nENDCHAR\nSTARTCHAR U_8DDA\nENCODING 36314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\n9AA0\n9AA0\nFAA0\n2AA0\nAFE0\nBAA0\nAAA0\nBAA0\nCAA0\n1560\nENDCHAR\nSTARTCHAR U_8DDB\nENCODING 36315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n97E0\n94A0\nF480\n27E0\nA640\nB540\nA540\nB480\nC940\n1220\nENDCHAR\nSTARTCHAR U_8DDC\nENCODING 36316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\n9420\n97E0\nF400\n2520\nBD40\nA580\nA520\nB920\nC8E0\nENDCHAR\nSTARTCHAR U_8DDD\nENCODING 36317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4A00\n4A00\n7BE0\n1220\n5220\n5A20\n53E0\n5200\n5E00\nE3E0\nENDCHAR\nSTARTCHAR U_8DDE\nENCODING 36318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0E0\n9700\n9480\n9480\nF7E0\n2080\nB2C0\nA2A0\nB4A0\nC080\n0180\nENDCHAR\nSTARTCHAR U_8DDF\nENCODING 36319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n97C0\n9440\nF7C0\n2500\nB520\nA4C0\nA480\nB540\nC620\nENDCHAR\nSTARTCHAR U_8DE0\nENCODING 36320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9100\nF7C0\n2140\nA7C0\nB500\nA7E0\nA120\nB280\nCC60\nENDCHAR\nSTARTCHAR U_8DE1\nENCODING 36321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF100\n9FE0\n9280\nF280\n26C0\nBAA0\nA2A0\nB280\nC480\n0980\nENDCHAR\nSTARTCHAR U_8DE2\nENCODING 36322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n93C0\n9440\n9A80\nF100\n2680\nB1E0\nA620\nA140\nB180\nCE00\nENDCHAR\nSTARTCHAR U_8DE3\nENCODING 36323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\n7D00\n4FE0\n4900\n7900\n17E0\n5A80\n5280\n52A0\n5CA0\nE460\nENDCHAR\nSTARTCHAR U_8DE4\nENCODING 36324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7900\n4FE0\n4A40\n7C20\n1240\n5A40\n5180\n5180\n5A40\nE420\nENDCHAR\nSTARTCHAR U_8DE5\nENCODING 36325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n8A40\n8A60\nFA20\n2560\n2100\nBFE0\nA380\nA540\nB540\nC920\nENDCHAR\nSTARTCHAR U_8DE6\nENCODING 36326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF500\n9500\n97E0\nF900\n2100\nAFE0\nB100\nA380\nB540\nC920\n0100\nENDCHAR\nSTARTCHAR U_8DE7\nENCODING 36327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9280\n9440\n9820\nF7C0\n2100\nB100\nA7C0\nA100\nB100\nCFE0\nENDCHAR\nSTARTCHAR U_8DE8\nENCODING 36328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9280\nF440\n2BA0\nB000\nAFE0\nA200\nB7C0\nC040\n0180\nENDCHAR\nSTARTCHAR U_8DE9\nENCODING 36329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7FE0\n4D20\n4FE0\n7D20\n17E0\n5920\n5140\n50A0\n5960\nE620\nENDCHAR\nSTARTCHAR U_8DEA\nENCODING 36330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3E0\n9240\n9FE0\n9400\nF5E0\n2520\nBD20\nA560\nA500\nBD20\nE0E0\nENDCHAR\nSTARTCHAR U_8DEB\nENCODING 36331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFB80\n2280\n3BA0\nC4E0\n3F80\n2080\n3F80\n2400\n27C0\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_8DEC\nENCODING 36332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n7880\n4BE0\n4880\n7880\n17E0\n5880\n53E0\n5080\n5880\nE7E0\nENDCHAR\nSTARTCHAR U_8DED\nENCODING 36333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n8C40\n8A80\nF900\n26E0\n2080\nBFE0\nA280\nA7E0\nB880\nC080\nENDCHAR\nSTARTCHAR U_8DEE\nENCODING 36334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9100\n9100\n9240\nF7A0\n2120\nB900\nA7C0\nA100\nB900\nEFE0\nENDCHAR\nSTARTCHAR U_8DEF\nENCODING 36335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF400\n97C0\n9440\n9A80\nF100\n2280\nB440\nAFE0\nA440\nB440\nC7C0\nENDCHAR\nSTARTCHAR U_8DF0\nENCODING 36336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF420\n9240\n97E0\n9240\nF240\n27E0\nBA40\nA240\nA240\nBC40\nE840\nENDCHAR\nSTARTCHAR U_8DF1\nENCODING 36337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\n9100\n9100\nF7E0\n2040\nBFE0\nA240\nA140\nB840\nE1C0\nENDCHAR\nSTARTCHAR U_8DF2\nENCODING 36338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9280\n9440\n9820\nF7C0\n2000\nBBC0\nA240\nA240\nBBC0\nE240\nENDCHAR\nSTARTCHAR U_8DF3\nENCODING 36339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9AA0\n96C0\nF280\n2280\n26C0\nBAA0\nA280\nBAA0\nC4A0\n0860\nENDCHAR\nSTARTCHAR U_8DF4\nENCODING 36340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9280\n9280\n9FE0\nFAA0\n2AA0\nBAE0\nAC20\nA820\nBFE0\nE820\nENDCHAR\nSTARTCHAR U_8DF5\nENCODING 36341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9240\n9FE0\nF200\n2FE0\nA220\nB240\nA140\nB0A0\nC360\n0C20\nENDCHAR\nSTARTCHAR U_8DF6\nENCODING 36342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n9480\n93E0\nFC80\n2480\n2480\nB540\nA540\nB620\nCA00\n11E0\nENDCHAR\nSTARTCHAR U_8DF7\nENCODING 36343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9FE0\n9240\n9180\nF2A0\n2460\nBFE0\nA280\nA2A0\nBCA0\nE860\nENDCHAR\nSTARTCHAR U_8DF8\nENCODING 36344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF480\n94A0\n97C0\n9480\nF5A0\n26E0\nB880\nA7E0\nA080\nB880\nE080\nENDCHAR\nSTARTCHAR U_8DF9\nENCODING 36345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF020\n99C0\n9480\n9080\nFC80\n27E0\nBC80\nA480\nA480\nBA00\nE9E0\nENDCHAR\nSTARTCHAR U_8DFA\nENCODING 36346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF380\n9280\n9280\n94E0\nF100\n27E0\nB900\nA380\nA540\nB920\nE100\nENDCHAR\nSTARTCHAR U_8DFB\nENCODING 36347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97E0\n9240\n9180\nF660\n2000\nBA40\nA240\nA240\nB440\nE840\nENDCHAR\nSTARTCHAR U_8DFC\nENCODING 36348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\n97E0\n9400\nF7E0\n2420\nBDE0\nA560\nA5E0\nB820\nE0C0\nENDCHAR\nSTARTCHAR U_8DFD\nENCODING 36349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9040\n97C0\n9400\nF420\n27E0\nB940\nA2A0\nA620\nBA40\nE3C0\nENDCHAR\nSTARTCHAR U_8DFE\nENCODING 36350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5A40\nD180\n5260\n7F80\n2080\n3F80\n2400\n27C0\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_8DFF\nENCODING 36351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\n9100\n9100\nF7E0\n2100\nBDE0\nA500\nA500\nBB00\nE1E0\nENDCHAR\nSTARTCHAR U_8E00\nENCODING 36352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n9440\nF7C0\n2100\nA500\nB5E0\nA500\nB700\nE900\n90E0\nENDCHAR\nSTARTCHAR U_8E01\nENCODING 36353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8800\n8AA0\nFD40\n22A0\n22A0\nB800\nA3E0\nA080\nB880\nC7E0\nENDCHAR\nSTARTCHAR U_8E02\nENCODING 36354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9540\n9740\nF540\n2540\nA740\nBD40\nA5C0\nAF40\nB160\nE160\nENDCHAR\nSTARTCHAR U_8E03\nENCODING 36355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF520\n9340\n9100\n97E0\nF420\n27E0\nBC20\nA7E0\nA420\nBC20\nE4E0\nENDCHAR\nSTARTCHAR U_8E04\nENCODING 36356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n92E0\n9280\n9280\nF7E0\n2080\nBAA0\nA4A0\nA040\nB980\nE600\nENDCHAR\nSTARTCHAR U_8E05\nENCODING 36357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFC00\n27E0\nF480\n2880\n3F80\n2080\n3F80\n23C0\n5200\n8FE0\nENDCHAR\nSTARTCHAR U_8E06\nENCODING 36358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9240\n97C0\n9120\nF240\n2520\nBBC0\nA640\nA180\nBA40\nE420\nENDCHAR\nSTARTCHAR U_8E07\nENCODING 36359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF400\n97E0\n9800\n97C0\nF540\n2540\nBFE0\nA540\nA7E0\nB840\nE180\nENDCHAR\nSTARTCHAR U_8E08\nENCODING 36360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8FE0\n8900\nFFC0\n2540\n27C0\nBB80\nA540\nA540\nB920\nC120\nENDCHAR\nSTARTCHAR U_8E09\nENCODING 36361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\n9440\n97C0\nF440\n27C0\nBD20\nA4C0\nA480\nBD40\nE620\nENDCHAR\nSTARTCHAR U_8E0A\nENCODING 36362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9280\n9100\n97E0\nF520\n27E0\nBD20\nA7E0\nA520\nBD20\nE560\nENDCHAR\nSTARTCHAR U_8E0B\nENCODING 36363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF400\n94E0\n9FA0\nF4A0\n24A0\nA4A0\nBFE0\nA4A0\nAA80\nBF80\nE080\nENDCHAR\nSTARTCHAR U_8E0C\nENCODING 36364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9100\nF7C0\n2200\nAFE0\nB440\nA7E0\nAA40\nB940\nE080\nENDCHAR\nSTARTCHAR U_8E0D\nENCODING 36365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF120\n97A0\n9140\n97E0\nF100\n23E0\nBA40\nA7E0\nA080\nBA80\nE100\nENDCHAR\nSTARTCHAR U_8E0E\nENCODING 36366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8880\n8900\nFB40\n2520\n2120\nB900\nA7E0\nA420\nBC20\nC7E0\nENDCHAR\nSTARTCHAR U_8E0F\nENCODING 36367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF120\n9F40\n9380\n9540\nF920\n27C0\nBC40\nA7C0\nA440\nBFC0\nE440\nENDCHAR\nSTARTCHAR U_8E10\nENCODING 36368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n97E0\n92A0\n91A0\nF660\n2280\nBFE0\nA240\nA2A0\nB9A0\nE660\nENDCHAR\nSTARTCHAR U_8E11\nENCODING 36369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n97E0\n9240\n93C0\nF240\n2240\nBBC0\nA240\nA7E0\nBA40\nE420\nENDCHAR\nSTARTCHAR U_8E12\nENCODING 36370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n9080\n97E0\n92C0\nF4A0\n2100\nBFE0\nA240\nA240\nB980\nE660\nENDCHAR\nSTARTCHAR U_8E13\nENCODING 36371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF300\n9280\n93E0\n9680\nFBE0\n2280\nBA80\nA3E0\nA280\nBBE0\nE200\nENDCHAR\nSTARTCHAR U_8E14\nENCODING 36372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF1E0\n9100\n97C0\n9440\nF7C0\n2440\nBFC0\nA100\nAFE0\nB900\nE100\nENDCHAR\nSTARTCHAR U_8E15\nENCODING 36373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9100\n97C0\n9140\nF7E0\n2140\nBFC0\nA500\nA5E0\nBB00\nE9E0\nENDCHAR\nSTARTCHAR U_8E16\nENCODING 36374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n9240\n97E0\n9240\nF7E0\n2000\nBBE0\nA220\nA3E0\nBA20\nE3E0\nENDCHAR\nSTARTCHAR U_8E17\nENCODING 36375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9280\n9540\n98A0\nF7C0\n2080\nB900\nA2A0\nA620\nBA40\nE1C0\nENDCHAR\nSTARTCHAR U_8E18\nENCODING 36376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF400\n97E0\n9960\n95A0\nF320\n2FE0\nB920\nA3A0\nA560\nB920\nE0C0\nENDCHAR\nSTARTCHAR U_8E19\nENCODING 36377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF00\n9BE0\n9AA0\nFEA0\n2AA0\nAEA0\nBAA0\nAAA0\nAF40\nB2A0\nE320\nENDCHAR\nSTARTCHAR U_8E1A\nENCODING 36378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9280\n9440\n9BA0\nF000\n2FE0\nBAA0\nAFE0\nAAA0\nBAA0\nE860\nENDCHAR\nSTARTCHAR U_8E1B\nENCODING 36379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\n9100\n9FE0\nF280\n2440\nB920\nA7C0\nA100\nB900\nEFE0\nENDCHAR\nSTARTCHAR U_8E1C\nENCODING 36380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\n9100\nFFE0\n2240\nA520\nBBC0\nA440\nBA80\nC180\n0E60\nENDCHAR\nSTARTCHAR U_8E1D\nENCODING 36381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9540\n97C0\n9540\nF7C0\n2100\nBFE0\nA100\nA380\nB540\nE920\nENDCHAR\nSTARTCHAR U_8E1E\nENCODING 36382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\n97E0\n9480\nF480\n27E0\nBC80\nA7E0\nA620\nBBE0\nE220\nENDCHAR\nSTARTCHAR U_8E1F\nENCODING 36383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF400\n94E0\n97A0\nFAA0\n22A0\nAFA0\nB2A0\nA2A0\nB5E0\nE8A0\n1000\nENDCHAR\nSTARTCHAR U_8E20\nENCODING 36384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9820\n9400\nF7E0\n24A0\nBAA0\nA1E0\nA280\nBCA0\nE0E0\nENDCHAR\nSTARTCHAR U_8E21\nENCODING 36385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF920\n9540\n9FE0\n9100\nFFE0\n2440\nBBA0\nA280\nA3A0\nBA20\nE1E0\nENDCHAR\nSTARTCHAR U_8E22\nENCODING 36386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n97C0\n9440\nF7C0\n2200\nBFE0\nA2A0\nA520\nBA20\nE4C0\nENDCHAR\nSTARTCHAR U_8E23\nENCODING 36387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97E0\n9440\n9280\nF7E0\n2000\nBBE0\nA220\nA220\nBBE0\nE220\nENDCHAR\nSTARTCHAR U_8E24\nENCODING 36388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97E0\n9240\n9240\nF5A0\n2900\nB900\nAFE0\nA100\nB900\nE100\nENDCHAR\nSTARTCHAR U_8E25\nENCODING 36389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97E0\n9440\n9280\nF7E0\n2100\nBFE0\nA240\nA680\nB940\nE620\nENDCHAR\nSTARTCHAR U_8E26\nENCODING 36390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97E0\n9280\n9440\nFFE0\n2040\nBF40\nA540\nA740\nB840\nE1C0\nENDCHAR\nSTARTCHAR U_8E27\nENCODING 36391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n93E0\n92A0\n92A0\nFFA0\n22A0\nB7A0\nAAA0\nA240\nBAA0\nE720\nENDCHAR\nSTARTCHAR U_8E28\nENCODING 36392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF440\n9440\n9AA0\nF120\n2100\n2500\nBD00\nA5C0\nA500\nBB00\nC9E0\nENDCHAR\nSTARTCHAR U_8E29\nENCODING 36393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0C0\n9F20\n9540\nF280\n2100\nBFE0\nA100\nA380\nB540\nE920\n8100\nENDCHAR\nSTARTCHAR U_8E2A\nENCODING 36394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97E0\n9420\n9380\nF000\n27C0\nB900\nA540\nA520\nB920\nE300\nENDCHAR\nSTARTCHAR U_8E2B\nENCODING 36395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF440\n9280\n97E0\n9280\nF280\n2AA0\nBAA0\nA6C0\nA280\nBA80\nEFE0\nENDCHAR\nSTARTCHAR U_8E2C\nENCODING 36396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF840\n8F80\n8880\nFFE0\n2880\nABE0\nBA20\nAAA0\nAAA0\nB940\nCA20\nENDCHAR\nSTARTCHAR U_8E2D\nENCODING 36397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n93C0\n9480\nFFC0\n2140\nAFE0\nB140\nAFC0\nB100\nC100\n0300\nENDCHAR\nSTARTCHAR U_8E2E\nENCODING 36398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF080\n97E0\n9480\nF4E0\n2480\nA480\nB7E0\nAA20\nAA20\nF3E0\nENDCHAR\nSTARTCHAR U_8E2F\nENCODING 36399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF5E0\n92A0\n9FA0\nF2A0\n2FC0\n22A0\nBAA0\nA2A0\nA5E0\nB880\nC080\nENDCHAR\nSTARTCHAR U_8E30\nENCODING 36400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF380\n9440\n9BA0\nF000\n2E20\nAAA0\nBEA0\nAAA0\nAEA0\nBA20\nCAE0\nENDCHAR\nSTARTCHAR U_8E31\nENCODING 36401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n97C0\n9540\nF7C0\n2540\nA5C0\nBC00\nA7C0\nA540\nB880\nCB40\nENDCHAR\nSTARTCHAR U_8E32\nENCODING 36402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9480\n97E0\nF480\n25E0\nA520\nBDE0\nA520\nA5E0\nBD20\nE9E0\nENDCHAR\nSTARTCHAR U_8E33\nENCODING 36403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9100\nF7C0\n2200\nAFE0\nB440\nAC60\nA7C0\nBC40\nC7C0\nENDCHAR\nSTARTCHAR U_8E34\nENCODING 36404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9140\n97E0\n94A0\nF7E0\n24A0\nBFE0\nA100\nA7E0\nBA20\nE4C0\nENDCHAR\nSTARTCHAR U_8E35\nENCODING 36405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9100\n9FE0\n9540\nF7C0\n2540\nBFC0\nA100\nA7C0\nB900\nEFE0\nENDCHAR\nSTARTCHAR U_8E36\nENCODING 36406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n97C0\n9440\nF7C0\n2000\nBFE0\nA500\nA5E0\nBB00\nE1E0\nENDCHAR\nSTARTCHAR U_8E37\nENCODING 36407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF120\n97E0\n9140\nFFE0\n2100\nBBC0\nA640\nABC0\nA240\nBA40\nC3C0\nENDCHAR\nSTARTCHAR U_8E38\nENCODING 36408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n97E0\n9240\n93C0\nF240\n23C0\nBA40\nA7E0\nA540\nBE20\nE7E0\nENDCHAR\nSTARTCHAR U_8E39\nENCODING 36409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF520\n9520\n97E0\n9000\nFFE0\n2100\nBFE0\nAAA0\nAAA0\nBAA0\nC820\nENDCHAR\nSTARTCHAR U_8E3A\nENCODING 36410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE80\n93E0\n92A0\n95E0\nFEA0\n23E0\nB280\nABE0\nA480\nBA80\nC1E0\nENDCHAR\nSTARTCHAR U_8E3B\nENCODING 36411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n9740\nF540\n2FE0\nA820\nBBA0\nAAA0\nABA0\nB820\nE860\nENDCHAR\nSTARTCHAR U_8E3C\nENCODING 36412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n97C0\n9440\nF7E0\n2200\nBFE0\nAAA0\nA2A0\nB520\nCAC0\nENDCHAR\nSTARTCHAR U_8E3D\nENCODING 36413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9100\n97C0\n9540\nF7C0\n2100\nBFE0\nA520\nA560\nBFA0\nE460\nENDCHAR\nSTARTCHAR U_8E3E\nENCODING 36414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9000\n93C0\n9240\nF3C0\n2000\nBFE0\nA520\nA7E0\nBD20\nE7E0\nENDCHAR\nSTARTCHAR U_8E3F\nENCODING 36415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n9C40\n9540\nFF60\n2540\nA440\nBE40\nA540\nA4A0\nB520\nC620\nENDCHAR\nSTARTCHAR U_8E40\nENCODING 36416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF540\n9FE0\n9540\nF5C0\n2400\nA7E0\nB100\nAFE0\nA380\nB540\nC920\nENDCHAR\nSTARTCHAR U_8E41\nENCODING 36417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n9FE0\n9820\nFFE0\n2800\nAFE0\nBAA0\nAFE0\nAAA0\nBAA0\nC860\nENDCHAR\nSTARTCHAR U_8E42\nENCODING 36418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9280\n9FE0\nF2A0\n2D80\nA100\nBFE0\nA100\nA380\nB540\nC920\nENDCHAR\nSTARTCHAR U_8E43\nENCODING 36419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9FE0\n9280\nF100\n2FE0\nA200\nB7C0\nAA40\nA240\nBBC0\nE240\nENDCHAR\nSTARTCHAR U_8E44\nENCODING 36420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9280\nFFE0\n2920\nA7C0\nB540\nA540\nA540\nBDC0\nC100\nENDCHAR\nSTARTCHAR U_8E45\nENCODING 36421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9380\nF540\n2FE0\nA440\nB7C0\nA440\nA7C0\nB000\nCFE0\nENDCHAR\nSTARTCHAR U_8E46\nENCODING 36422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9E0\n9520\n95E0\nFD20\n25E0\nA540\nB560\nA540\nA5A0\nBA00\nE9E0\nENDCHAR\nSTARTCHAR U_8E47\nENCODING 36423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n7FC0\n1100\nFFE0\n3140\nDF20\n2480\n3500\nCFE0\nENDCHAR\nSTARTCHAR U_8E48\nENCODING 36424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0C0\n9F20\n9520\n9040\nF6E0\n2420\nBC20\nA6E0\nA420\nBFE0\nE420\nENDCHAR\nSTARTCHAR U_8E49\nENCODING 36425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF220\n9140\n97E0\nF080\n23E0\nA080\nBFE0\nA200\nA7C0\nB880\nC7E0\nENDCHAR\nSTARTCHAR U_8E4A\nENCODING 36426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF040\n9FA0\n9940\nF500\n22C0\nA520\nBFE0\nA100\nAFE0\nB280\nCC60\nENDCHAR\nSTARTCHAR U_8E4B\nENCODING 36427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n97C0\n9440\nF7C0\n2000\nBFE0\nAAA0\nA660\nBAA0\nE660\nENDCHAR\nSTARTCHAR U_8E4C\nENCODING 36428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF380\n9440\n9920\nF7C0\n2440\nA7C0\nBC40\nA7E0\nAA20\nBBE0\nC220\nENDCHAR\nSTARTCHAR U_8E4D\nENCODING 36429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\n97E0\nF540\n27E0\nA540\nBFE0\nA540\nA560\nBDC0\nC920\nENDCHAR\nSTARTCHAR U_8E4E\nENCODING 36430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9100\nF7C0\n2440\nA740\nB5C0\nA440\nAFE0\nB280\nCC60\nENDCHAR\nSTARTCHAR U_8E4F\nENCODING 36431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9500\n97E0\nF520\n27C0\n3500\nA5E0\nA400\nB5C0\nE940\n1260\nENDCHAR\nSTARTCHAR U_8E50\nENCODING 36432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF540\n9380\n9540\nFAA0\n2440\nAFE0\nB440\nA7C0\nA440\nB7C0\nC440\nENDCHAR\nSTARTCHAR U_8E51\nENCODING 36433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9240\n93C0\nF240\n27E0\nA040\nBFE0\nA5A0\nA240\nBDA0\nC520\nENDCHAR\nSTARTCHAR U_8E52\nENCODING 36434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9FE0\n9280\n9FE0\nF280\n2FE0\nBAA0\nABA0\nACE0\nB920\nC8E0\nENDCHAR\nSTARTCHAR U_8E53\nENCODING 36435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF6E0\n94A0\n96A0\n95A0\nF6A0\n2540\nB7E0\nA520\nA7E0\nB520\nC7E0\nENDCHAR\nSTARTCHAR U_8E54\nENCODING 36436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFF00\n55E0\n7D40\n5540\nFFC0\n1080\n1F80\n13E0\n2A00\nC7E0\nENDCHAR\nSTARTCHAR U_8E55\nENCODING 36437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9920\n9FE0\n9920\nFFE0\n2540\nBFE0\nA540\nBFE0\nC100\n0100\nENDCHAR\nSTARTCHAR U_8E56\nENCODING 36438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9100\n97C0\nF200\n2FE0\nA440\nBEE0\nA440\nA6C0\nB440\nC7C0\nENDCHAR\nSTARTCHAR U_8E57\nENCODING 36439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9A80\nFFE0\n2AA0\nAFE0\nBAA0\nABC0\nAA80\nBBA0\nCAE0\nENDCHAR\nSTARTCHAR U_8E58\nENCODING 36440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nA660\nEAA0\n2300\n3480\nAA60\nA540\nB280\nE100\n8E00\nENDCHAR\nSTARTCHAR U_8E59\nENCODING 36441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0140\nFFE0\n9100\nFF40\n94A0\nBFA0\nA0E0\n3F80\n27C0\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_8E5A\nENCODING 36442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF920\n9540\n9FE0\n9820\nFFC0\n2440\nA7C0\nB900\nA7C0\nB100\nCFE0\nENDCHAR\nSTARTCHAR U_8E5B\nENCODING 36443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9FE0\n9280\nFFE0\n2000\n2FE0\nB920\nA7C0\nB540\nC5C0\n0100\nENDCHAR\nSTARTCHAR U_8E5C\nENCODING 36444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9820\n97E0\nF480\n25E0\nBD20\nA5E0\nA520\nBDE0\nE520\nENDCHAR\nSTARTCHAR U_8E5D\nENCODING 36445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF480\n9A80\n92E0\nF680\n2BE0\nA880\nBAE0\nAA80\nAA80\nBD80\nC8E0\nENDCHAR\nSTARTCHAR U_8E5E\nENCODING 36446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3E0\n9480\n95E0\nF720\n25E0\nBD20\nA5E0\nA720\nB5E0\nC140\n0220\nENDCHAR\nSTARTCHAR U_8E5F\nENCODING 36447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9100\nF7C0\n2100\nB7E0\nA440\nA7C0\nB440\nC7C0\n0820\nENDCHAR\nSTARTCHAR U_8E60\nENCODING 36448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n97E0\n9400\nF540\n27E0\nA540\nBDC0\nA400\nAD40\nBAA0\nCAA0\nENDCHAR\nSTARTCHAR U_8E61\nENCODING 36449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF2E0\n92A0\n9360\nFEA0\n2240\nBEA0\nABE0\nAAA0\nBA60\nCA20\n1260\nENDCHAR\nSTARTCHAR U_8E62\nENCODING 36450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9280\nFFE0\n2920\nAFE0\nB920\nABA0\nAAA0\nBBA0\nC860\nENDCHAR\nSTARTCHAR U_8E63\nENCODING 36451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n9FE0\n9240\nF3C0\n2100\nAFE0\nB920\nADA0\nAB60\nBDA0\nC960\nENDCHAR\nSTARTCHAR U_8E64\nENCODING 36452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF540\n9940\n96A0\nFA80\n2880\nAA80\nBAE0\nAA80\nAA80\nBD80\nC8E0\nENDCHAR\nSTARTCHAR U_8E65\nENCODING 36453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n9BE0\n9480\nF3E0\n2AA0\nABE0\nBAA0\nAFE0\nB880\nCC80\n13E0\nENDCHAR\nSTARTCHAR U_8E66\nENCODING 36454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE920\nA920\nAFE0\nE000\n2EE0\nAAA0\nBEE0\nAAA0\nAEE0\nBAA0\nC760\nENDCHAR\nSTARTCHAR U_8E67\nENCODING 36455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9FE0\n9AA0\nFFE0\n2AA0\nAFE0\nBC40\nA7C0\nA440\nBFC0\nC440\nENDCHAR\nSTARTCHAR U_8E68\nENCODING 36456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n08A0\nFE80\n8BE0\nF680\n2A80\nA540\nB540\nAA20\nA000\nBAA0\nCAA0\nENDCHAR\nSTARTCHAR U_8E69\nENCODING 36457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\nFBE0\nAE40\nF980\nBFE0\n2080\n3F80\n0400\n2780\n3400\nCFE0\nENDCHAR\nSTARTCHAR U_8E6A\nENCODING 36458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\n9540\nFFE0\n2440\nA7C0\nB440\nA7C0\nB440\nC7C0\n0820\nENDCHAR\nSTARTCHAR U_8E6B\nENCODING 36459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9280\n9FE0\nF340\n2500\nAFE0\nBAA0\nAFE0\nAAA0\nBBA0\nC860\nENDCHAR\nSTARTCHAR U_8E6C\nENCODING 36460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF740\n95A0\n9240\nF7A0\n2800\nA7C0\nBC40\nA7C0\nA440\nB280\nCFE0\nENDCHAR\nSTARTCHAR U_8E6D\nENCODING 36461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF440\n9FE0\n9AA0\nF920\n2FE0\nA000\nB7C0\nA440\nB7C0\nC440\n07C0\nENDCHAR\nSTARTCHAR U_8E6E\nENCODING 36462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF280\n9FE0\nFAA0\n2FE0\n2100\nBFE0\nA440\nBFA0\nC440\n07C0\nENDCHAR\nSTARTCHAR U_8E6F\nENCODING 36463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0C0\n9F20\n9540\nFFE0\n2540\nA920\nBFE0\nA520\nA7E0\nB520\nC7E0\nENDCHAR\nSTARTCHAR U_8E70\nENCODING 36464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9800\n9F40\nF840\n2FE0\nAD40\nBFC0\nAD40\nAA40\nBA40\nC7C0\nENDCHAR\nSTARTCHAR U_8E71\nENCODING 36465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9440\nF280\n2FE0\n2540\nB7C0\nA540\nA7C0\nB100\nCFE0\nENDCHAR\nSTARTCHAR U_8E72\nENCODING 36466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE440\nAFE0\nA280\nEFE0\n2AA0\nABE0\nBFE0\nA080\nAFE0\nB480\nC380\nENDCHAR\nSTARTCHAR U_8E73\nENCODING 36467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF40\n95A0\n9240\nFDE0\n2540\nAE60\nB9C0\nAF40\nA280\nB340\nCC20\nENDCHAR\nSTARTCHAR U_8E74\nENCODING 36468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF440\n9F60\n9040\nFFE0\n2940\nAF40\nBA40\nA740\nAAC0\nB340\nC660\nENDCHAR\nSTARTCHAR U_8E75\nENCODING 36469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFEA0\n45E0\n7C80\n5540\nB260\n1F80\n1080\n1FC0\n1200\n6FE0\nENDCHAR\nSTARTCHAR U_8E76\nENCODING 36470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n96C0\n9540\nF7E0\n2520\nA540\nBFC0\nA940\nA940\nBAA0\nC520\nENDCHAR\nSTARTCHAR U_8E77\nENCODING 36471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4A80\n7EE0\n5540\n5C40\n4FA0\n4880\n4F80\n43C0\n8A00\nB7E0\nENDCHAR\nSTARTCHAR U_8E78\nENCODING 36472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF920\n9540\n9FE0\nF540\n2920\nA440\nB7E0\nAD40\nA3E0\nB240\nCC40\nENDCHAR\nSTARTCHAR U_8E79\nENCODING 36473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFA80\n8C40\nFBA0\n2000\nB7C0\nA440\nA7E0\nBAA0\nE660\n0AA0\nENDCHAR\nSTARTCHAR U_8E7A\nENCODING 36474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\n9100\nFFE0\n2440\nAEE0\nB440\nAFE0\nA280\nB4A0\nC8E0\nENDCHAR\nSTARTCHAR U_8E7B\nENCODING 36475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9100\n9FE0\nF440\n2BA0\nA280\nBFE0\nAAA0\nABA0\nB820\nC860\nENDCHAR\nSTARTCHAR U_8E7C\nENCODING 36476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFAA0\n96C0\n9FE0\nF280\n2FE0\nA100\nB7C0\nA100\nAFE0\nB280\nCC60\nENDCHAR\nSTARTCHAR U_8E7D\nENCODING 36477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n9540\nF280\n27C0\nAC60\nB7C0\nA440\nB7C0\nC540\n0B20\nENDCHAR\nSTARTCHAR U_8E7E\nENCODING 36478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFF80\nAA80\nAEE0\nE140\n2F40\nB540\nAE80\nB480\nC540\n8E20\nENDCHAR\nSTARTCHAR U_8E7F\nENCODING 36479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9AA0\nF540\n2FE0\nA540\nBFE0\nA920\nAFE0\nB920\nC100\nENDCHAR\nSTARTCHAR U_8E80\nENCODING 36480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9540\n9FE0\nF540\n27C0\n2440\nB7C0\nA440\nA7C0\nB280\nCC60\nENDCHAR\nSTARTCHAR U_8E81\nENCODING 36481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\n97C0\nFEE0\n2AA0\nAEE0\nB100\nAFE0\nA380\nB540\nC920\nENDCHAR\nSTARTCHAR U_8E82\nENCODING 36482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n95E0\n9080\nF3E0\n2D40\nA7E0\nBC80\nA7E0\nA480\nBA80\nD1E0\nENDCHAR\nSTARTCHAR U_8E83\nENCODING 36483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF040\n97E0\n95A0\nF540\n27E0\nBC40\nA740\nA5E0\nBD40\nCF40\n1540\nENDCHAR\nSTARTCHAR U_8E84\nENCODING 36484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4540\n7FE0\n6880\nBFE0\n1040\n1FC0\n1200\n13E0\n2A00\nC7E0\nENDCHAR\nSTARTCHAR U_8E85\nENCODING 36485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9540\n9FC0\nF400\n2FE0\nAA20\nBFA0\nAAA0\nAFA0\nB2A0\nCF40\nENDCHAR\nSTARTCHAR U_8E86\nENCODING 36486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF1E0\n9100\n9FE0\nF920\n2FE0\nAA00\nBD60\nAA80\nA9C0\nBEA0\nC920\nENDCHAR\nSTARTCHAR U_8E87\nENCODING 36487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF440\n9FE0\n9540\nFFA0\n2140\nAFE0\nB180\nA240\nAFC0\nB240\nC3C0\nENDCHAR\nSTARTCHAR U_8E88\nENCODING 36488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE480\nAE80\nAAE0\nEFA0\n2AA0\nBEA0\nA4A0\nBFA0\nAA40\nAAC0\nD520\nENDCHAR\nSTARTCHAR U_8E89\nENCODING 36489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n2480\nFFE0\nA4A0\nBFA0\nA0A0\n3F80\n27C0\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_8E8A\nENCODING 36490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9100\nFFE0\n2120\nAFC0\nB040\nAFE0\nAB40\nBEC0\nC0C0\nENDCHAR\nSTARTCHAR U_8E8B\nENCODING 36491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n92A0\nFD40\n25A0\nA520\nBFC0\nA440\nA7C0\nB440\nC840\nENDCHAR\nSTARTCHAR U_8E8C\nENCODING 36492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF400\n97E0\n9AA0\nF7E0\n22A0\nA7E0\nB440\nAFE0\nA540\nBBE0\nC440\nENDCHAR\nSTARTCHAR U_8E8D\nENCODING 36493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9AA0\n9660\nFAA0\n27E0\nAC80\nB7E0\nA480\nA7E0\nBC80\nC7E0\nENDCHAR\nSTARTCHAR U_8E8E\nENCODING 36494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA540\nA920\nEFE0\n2920\nADA0\nBB60\nADA0\nAB60\nBDA0\nC960\nENDCHAR\nSTARTCHAR U_8E8F\nENCODING 36495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n9FE0\n9240\nF9E0\n24A0\nAAA0\nBFE0\nAAA0\nABE0\nBAA0\nCBE0\nENDCHAR\nSTARTCHAR U_8E90\nENCODING 36496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF2A0\n9540\n92A0\nFFE0\n2AA0\nAFE0\nBDA0\nAB60\nADA0\nBB60\nCDA0\nENDCHAR\nSTARTCHAR U_8E91\nENCODING 36497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEAE0\nBFA0\nA4A0\nEFA0\n2AC0\nADA0\nBAA0\nAFA0\nA2E0\nB680\nC980\nENDCHAR\nSTARTCHAR U_8E92\nENCODING 36498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF520\n9BC0\n96A0\nFBA0\n2AC0\nAFE0\nB100\nAFE0\nA380\nBD40\nC920\nENDCHAR\nSTARTCHAR U_8E93\nENCODING 36499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nA880\nAFE0\nEAA0\n2AA0\nA7C0\nBC40\nA7C0\nA440\nB7C0\nCC60\nENDCHAR\nSTARTCHAR U_8E94\nENCODING 36500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\n9AA0\nFBE0\n2AA0\nAFE0\nB940\nAAA0\nAFE0\nB880\nDFE0\nENDCHAR\nSTARTCHAR U_8E95\nENCODING 36501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nAA20\nEF20\n2AE0\nAF20\nB9A0\nAF60\nBD20\nCA20\n1760\nENDCHAR\nSTARTCHAR U_8E96\nENCODING 36502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFB60\n94A0\n9B60\nF4A0\n2FE0\nA4A0\nBB60\nA4A0\nAB60\nB4A0\nCFE0\nENDCHAR\nSTARTCHAR U_8E97\nENCODING 36503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\n8A00\n7FE0\nD440\n5F40\n44C0\n3F80\n2080\n3F80\n3400\nCFE0\nENDCHAR\nSTARTCHAR U_8E98\nENCODING 36504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE4E0\nBF80\nAAE0\nFF20\n2AE0\nAE80\nBAE0\nAE80\nAAE0\nBAA0\nCEE0\nENDCHAR\nSTARTCHAR U_8E99\nENCODING 36505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nEAA0\nAEE0\nEAA0\n2EE0\nB920\nAFE0\nAAA0\nBBE0\nCAA0\n0BE0\nENDCHAR\nSTARTCHAR U_8E9A\nENCODING 36506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\nA940\nA7E0\nE560\n3FE0\nA940\nBFE0\nAA40\nAA20\nA9E0\nD7E0\nENDCHAR\nSTARTCHAR U_8E9B\nENCODING 36507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n5E00\nAAE0\n7F40\nD540\n44C0\n3F80\n2080\n3F80\n2400\nDFE0\nENDCHAR\nSTARTCHAR U_8E9C\nENCODING 36508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA40\n9FE0\n9240\nFFE0\n2540\nAFE0\nB440\nA540\nA540\nB280\nCC60\nENDCHAR\nSTARTCHAR U_8E9D\nENCODING 36509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nAEE0\nEAA0\n2FE0\nA920\nBFE0\nAAA0\nAFE0\nBBA0\nCD60\nENDCHAR\nSTARTCHAR U_8E9E\nENCODING 36510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF540\n97C0\n9C60\nF7C0\n2440\nABA0\nB280\nAFE0\nA240\nB980\nC660\nENDCHAR\nSTARTCHAR U_8E9F\nENCODING 36511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nBFE0\nAAA0\nEEE0\n2280\nAFE0\nB280\nAFE0\nA4A0\nBD40\nC620\nENDCHAR\nSTARTCHAR U_8EA0\nENCODING 36512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2900\n7BE0\n4940\n7FE0\n4880\n7F80\n2480\n3FC0\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_8EA1\nENCODING 36513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9240\n93C0\nF240\n27E0\nA040\nBFE0\nA540\nA7C0\nB540\nCFE0\nENDCHAR\nSTARTCHAR U_8EA2\nENCODING 36514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nFAA0\n9EE0\nFBA0\n2EE0\nBBA0\nA820\nAEE0\nBAA0\nEE60\n0AA0\nENDCHAR\nSTARTCHAR U_8EA3\nENCODING 36515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nAEE0\nEAA0\n2EE0\nA480\nBFE0\nA480\nA7E0\nBC80\nC7E0\nENDCHAR\nSTARTCHAR U_8EA4\nENCODING 36516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9FE0\n92A0\nFFE0\n24A0\nBFE0\nA400\nBFE0\nA4A0\nAEA0\nD5E0\nENDCHAR\nSTARTCHAR U_8EA5\nENCODING 36517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nAAA0\nAEC0\nE840\n2EC0\nA840\nBFC0\nAD40\nABC0\nBD40\nCFA0\nENDCHAR\nSTARTCHAR U_8EA6\nENCODING 36518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF540\n9FE0\n9540\nFFE0\n2540\nAFE0\nB440\nA7C0\nA440\nB7C0\nCC60\nENDCHAR\nSTARTCHAR U_8EA7\nENCODING 36519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n06E0\nF000\n96E0\nF4A0\n2100\nBFE0\nAAA0\nAFE0\nBA80\nEAA0\n13E0\nENDCHAR\nSTARTCHAR U_8EA8\nENCODING 36520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA900\nABE0\nEEA0\n2B80\nAEE0\nB240\nA7A0\nAA80\nB380\nCC60\nENDCHAR\nSTARTCHAR U_8EA9\nENCODING 36521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nAEE0\nEAA0\n2FE0\nA7C0\nBC80\nA7E0\nA440\nB380\nCC60\nENDCHAR\nSTARTCHAR U_8EAA\nENCODING 36522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE280\nAFE0\nAAA0\nEEE0\n2AA0\nAEE0\nBAA0\nAFE0\nAAA0\nBBE0\nCA60\nENDCHAR\nSTARTCHAR U_8EAB\nENCODING 36523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1F80\n1080\n1F80\n10A0\n1FC0\n1080\n7F80\n0480\n1A80\n6100\nENDCHAR\nSTARTCHAR U_8EAC\nENCODING 36524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n7C20\n4420\n7DE0\n4500\n7D00\n45E0\nFC20\n1420\n2520\nDCC0\nENDCHAR\nSTARTCHAR U_8EAD\nENCODING 36525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7900\n4FE0\n7D20\n4900\n7980\n4980\nFA80\n2A80\n4AA0\n9CE0\nENDCHAR\nSTARTCHAR U_8EAE\nENCODING 36526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7A80\n4A40\n7A40\n4C20\n7BC0\n4940\nF940\n2A40\n4A40\n9480\nENDCHAR\nSTARTCHAR U_8EAF\nENCODING 36527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF400\n9440\nF640\n9540\nF480\n9480\nF540\n3620\n5400\nB7E0\nENDCHAR\nSTARTCHAR U_8EB0\nENCODING 36528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7900\n4FE0\n7900\n4B80\n7B80\n4D40\nFD40\n2BA0\n4900\n9900\nENDCHAR\nSTARTCHAR U_8EB1\nENCODING 36529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7BC0\n4940\n7960\n4A20\n7880\n4BE0\nF880\n29C0\n4AA0\n9080\nENDCHAR\nSTARTCHAR U_8EB2\nENCODING 36530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n7A40\n4A40\n7C60\n4880\n7FE0\n4880\nF980\n2AC0\n4CA0\n9880\nENDCHAR\nSTARTCHAR U_8EB3\nENCODING 36531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7BE0\n4A20\n7A20\n4BE0\n7800\n4BE0\nFA20\n2A20\n4A20\n9BE0\nENDCHAR\nSTARTCHAR U_8EB4\nENCODING 36532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BC0\n4A40\n7BC0\n4A40\n7BC0\n4B20\nFAC0\n2A80\n4A40\n9B20\nENDCHAR\nSTARTCHAR U_8EB5\nENCODING 36533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7BC0\n4940\n7D40\n4B40\n7C80\n4800\nF940\n2AA0\n4E40\n99C0\nENDCHAR\nSTARTCHAR U_8EB6\nENCODING 36534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n7540\n57C0\n7540\n57C0\n7100\n5FE0\nF380\n3540\n5920\nB100\nENDCHAR\nSTARTCHAR U_8EB7\nENCODING 36535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n7900\n4FE0\n7B40\n4D20\n7900\n4FE0\nFA40\n2B80\n4940\n9A20\nENDCHAR\nSTARTCHAR U_8EB8\nENCODING 36536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n4900\n7A80\n4C40\n7FE0\n4840\nFF40\n2D40\n4F40\n98C0\nENDCHAR\nSTARTCHAR U_8EB9\nENCODING 36537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7BE0\n4C20\n7D60\n4BA0\n7FE0\n4BA0\nFD60\n2920\n49A0\n9840\nENDCHAR\nSTARTCHAR U_8EBA\nENCODING 36538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n7540\n5100\n77E0\n5420\n77A0\n56A0\nF7A0\n3420\n5420\nB460\nENDCHAR\nSTARTCHAR U_8EBB\nENCODING 36539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7FE0\n4C20\n7A80\n4C40\n7820\n4FC0\nF900\n2900\n4900\n9FE0\nENDCHAR\nSTARTCHAR U_8EBC\nENCODING 36540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7BC0\n4A00\n7BC0\n4A00\n7FE0\n4B00\nFAA0\n2A40\n4B20\n9A00\nENDCHAR\nSTARTCHAR U_8EBD\nENCODING 36541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF520\n95E0\nF520\n95E0\nF480\n97E0\nF540\n3480\n5540\nB7E0\nENDCHAR\nSTARTCHAR U_8EBE\nENCODING 36542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n7FE0\n4900\n7BC0\n4900\n7FE0\n4900\nFFE0\n2980\n4A40\n9C20\nENDCHAR\nSTARTCHAR U_8EBF\nENCODING 36543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n77E0\n5540\n77E0\n5540\n77C0\n5540\nF740\n5580\n9F60\n3100\nENDCHAR\nSTARTCHAR U_8EC0\nENCODING 36544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF400\n95C0\nF540\n95C0\nF400\n97E0\nF6A0\n37E0\n5400\nB7E0\nENDCHAR\nSTARTCHAR U_8EC1\nENCODING 36545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n7540\n5FE0\n7540\n57C0\n7540\n57C0\nF100\n5FE0\n9280\n2D60\nENDCHAR\nSTARTCHAR U_8EC2\nENCODING 36546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\nEBE0\nB240\nE5A0\nAFE0\nE820\nA100\nE7C0\n2240\n6440\nA980\nENDCHAR\nSTARTCHAR U_8EC3\nENCODING 36547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n7AA0\n5EE0\n7000\n57C0\n7540\n57C0\nF540\n5FE0\n9100\n3100\nENDCHAR\nSTARTCHAR U_8EC4\nENCODING 36548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n7EC0\n5AA0\n7FE0\n5080\n7EA0\n5AA0\nFEC0\n3AA0\n5F60\nB220\nENDCHAR\nSTARTCHAR U_8EC5\nENCODING 36549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\nEFE0\nAD40\nED40\nAFE0\nED40\nADE0\nED40\n6DE0\nAD40\n75E0\nENDCHAR\nSTARTCHAR U_8EC6\nENCODING 36550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n7FE0\n5AA0\n7FE0\n5AA0\n7FE0\n5240\nF3C0\n3240\n5180\nB7E0\nENDCHAR\nSTARTCHAR U_8EC7\nENCODING 36551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n77E0\n5100\n7FE0\n5120\n77E0\n5040\nFFE0\n3540\n5740\nB0C0\nENDCHAR\nSTARTCHAR U_8EC8\nENCODING 36552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nEFE0\nA940\nEDE0\nAF40\nEDE0\nAD40\nEDE0\n6940\nB660\n69C0\nENDCHAR\nSTARTCHAR U_8EC9\nENCODING 36553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFFE0\nB520\nEFE0\nA540\nEFE0\nA440\nE7C0\n6440\nA7C0\n6C60\nENDCHAR\nSTARTCHAR U_8ECA\nENCODING 36554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n3F80\n2480\n3F80\n2480\n3F80\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8ECB\nENCODING 36555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFF00\n1100\n7D00\n5500\n7D00\n5500\n7D00\n1120\nFF20\n10E0\nENDCHAR\nSTARTCHAR U_8ECC\nENCODING 36556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFA00\n2780\nFA80\nAA80\nFA80\nAA80\nFA80\n22A0\nFCA0\n2860\nENDCHAR\nSTARTCHAR U_8ECD\nENCODING 36557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8420\nFFE0\n2480\n3F80\n2480\n3F80\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_8ECE\nENCODING 36558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n3F80\n2480\n3F80\n0400\nFFE0\n2080\n2080\n3F80\nENDCHAR\nSTARTCHAR U_8ECF\nENCODING 36559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n2280\nFA80\nAA80\nFA80\nAA80\nFA80\n22A0\nFAA0\n24E0\nENDCHAR\nSTARTCHAR U_8ED0\nENCODING 36560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFF80\n2280\nFA80\nAA80\nFF80\nAA80\nFA80\n22A0\nFA60\n2220\nENDCHAR\nSTARTCHAR U_8ED1\nENCODING 36561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n2100\nFFE0\nA900\nF900\nA900\nFA80\n2280\nF440\n2820\nENDCHAR\nSTARTCHAR U_8ED2\nENCODING 36562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF880\n2080\nF880\nA880\nFBE0\nA880\nF880\n2080\nF880\n2080\nENDCHAR\nSTARTCHAR U_8ED3\nENCODING 36563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n2240\nFA40\nAB40\nFAC0\nAA40\nFA40\n2240\nFC40\n2860\nENDCHAR\nSTARTCHAR U_8ED4\nENCODING 36564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n20A0\nF8A0\nAAA0\nFAA0\nACA0\nF8A0\n2120\nFA20\n24C0\nENDCHAR\nSTARTCHAR U_8ED5\nENCODING 36565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFC80\n2080\nFAA0\nAAA0\nFAA0\nAAA0\nFAA0\n22A0\nFBE0\n2220\nENDCHAR\nSTARTCHAR U_8ED6\nENCODING 36566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n2100\nF900\nA900\nFBC0\nA900\nF900\n2100\nFFE0\n2000\nENDCHAR\nSTARTCHAR U_8ED7\nENCODING 36567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n2240\nFA60\nAC00\nFFC0\nAA40\nFA40\n2180\nFA40\n2420\nENDCHAR\nSTARTCHAR U_8ED8\nENCODING 36568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n23E0\nF880\nAAA0\nFAA0\nABE0\nF880\n20A0\nF8A0\n2060\nENDCHAR\nSTARTCHAR U_8ED9\nENCODING 36569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF8E0\n2080\nF880\nAFE0\nFA20\nAA20\nF940\n2080\nF940\n2220\nENDCHAR\nSTARTCHAR U_8EDA\nENCODING 36570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n27E0\nF900\nA900\nF900\nAA80\nFA80\n2640\nF540\n2920\nENDCHAR\nSTARTCHAR U_8EDB\nENCODING 36571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA00\n2200\nFAE0\nAAA0\nFAA0\nAAE0\nFA80\n22A0\nFAA0\n2460\nENDCHAR\nSTARTCHAR U_8EDC\nENCODING 36572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n23E0\nFAA0\nAAA0\nFAA0\nAB60\nFA20\n2220\nFA20\n2260\nENDCHAR\nSTARTCHAR U_8EDD\nENCODING 36573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFB80\n2280\nFA80\nABE0\nFA80\nAA80\nFA80\n22A0\nFB60\n2220\nENDCHAR\nSTARTCHAR U_8EDE\nENCODING 36574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nFF00\n2100\nF900\nAFE0\nF900\nA900\nFFE0\n2100\nF920\n20E0\nENDCHAR\nSTARTCHAR U_8EDF\nENCODING 36575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFA00\n23E0\nFD20\nA940\nF900\nA900\nF980\n2280\nFA40\n2420\nENDCHAR\nSTARTCHAR U_8EE0\nENCODING 36576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nFB80\n2080\nF880\nA880\nFFE0\nA880\nF880\n2080\nF880\n23E0\nENDCHAR\nSTARTCHAR U_8EE1\nENCODING 36577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n2280\nFC40\nA920\nF880\nAFE0\nF840\n2080\nF880\n2100\nENDCHAR\nSTARTCHAR U_8EE2\nENCODING 36578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBC0\n2000\nF800\nAFE0\nF900\nAA00\nFA40\n2420\nFFE0\n2020\nENDCHAR\nSTARTCHAR U_8EE3\nENCODING 36579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0400\n3F80\n2480\n3F80\n2480\nFFE0\n2480\n1100\n60C0\nENDCHAR\nSTARTCHAR U_8EE4\nENCODING 36580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nFB80\n2080\nFAA0\nA9C0\nF880\nAFE0\nF880\n2080\nF880\n2180\nENDCHAR\nSTARTCHAR U_8EE5\nENCODING 36581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFA00\n23E0\nFC20\nABA0\nFAA0\nAAA0\nFBA0\n22A0\nF820\n20C0\nENDCHAR\nSTARTCHAR U_8EE6\nENCODING 36582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFC40\n2440\nFC40\nAC40\nFFC0\nAA80\nFA80\n22A0\nFCA0\n28E0\nENDCHAR\nSTARTCHAR U_8EE7\nENCODING 36583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\nFBC0\n2280\nFA80\nABE0\nFA80\nAA80\nFA80\n22A0\nFB60\n22A0\nENDCHAR\nSTARTCHAR U_8EE8\nENCODING 36584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF980\n2240\nFC20\nA900\nF880\nAFE0\nF840\n2180\nF880\n2040\nENDCHAR\nSTARTCHAR U_8EE9\nENCODING 36585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n2240\nFA20\nAFE0\nF800\nABE0\nFA20\n2220\nFBE0\n2220\nENDCHAR\nSTARTCHAR U_8EEA\nENCODING 36586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nFA80\n2480\nFFE0\nAAA0\nFAA0\nADA0\nFFA0\n2120\nFAA0\n2440\nENDCHAR\nSTARTCHAR U_8EEB\nENCODING 36587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF940\n2220\nFC80\nA900\nFA40\nAC80\nF920\n2240\nF880\n2300\nENDCHAR\nSTARTCHAR U_8EEC\nENCODING 36588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7FC0\n0400\nFFE0\n2480\n7FC0\nA4A0\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8EED\nENCODING 36589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n2400\nFFC0\nAC80\nFDC0\nAC80\nFC80\n27E0\nFC00\n27E0\nENDCHAR\nSTARTCHAR U_8EEE\nENCODING 36590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n23E0\nFAA0\nAAA0\nFAA0\nAFE0\nF880\n2140\nFA20\n2420\nENDCHAR\nSTARTCHAR U_8EEF\nENCODING 36591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF880\n24A0\nFAA0\nAAC0\nF880\nAFE0\nF880\n2080\nF880\n2080\nENDCHAR\nSTARTCHAR U_8EF0\nENCODING 36592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A40\n7B80\n0A20\n79E0\n0400\nFFE0\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8EF1\nENCODING 36593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nFFC0\n2540\nFD40\nAD40\nFD40\nAD40\nFD40\n2520\nFDE0\n2940\nENDCHAR\nSTARTCHAR U_8EF2\nENCODING 36594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n23E0\nF880\nA880\nFBE0\nAA20\nFA20\n2220\nFBE0\n2220\nENDCHAR\nSTARTCHAR U_8EF3\nENCODING 36595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFBE0\n2420\nFBA0\nAAA0\nFBA0\nAAA0\nFA40\n2220\nFA20\n21E0\nENDCHAR\nSTARTCHAR U_8EF4\nENCODING 36596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF880\n27E0\nF880\nA880\nF880\nABE0\nF880\n2080\nF880\n27E0\nENDCHAR\nSTARTCHAR U_8EF5\nENCODING 36597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nF940\n2240\nFFE0\nAA40\nFB40\nAAC0\nFA40\n2240\nFA40\n22C0\nENDCHAR\nSTARTCHAR U_8EF6\nENCODING 36598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2220\nFBE0\nAA00\nFBE0\nAA40\nFA80\n22A0\nFD20\n25E0\nENDCHAR\nSTARTCHAR U_8EF7\nENCODING 36599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nF920\n27E0\nF900\nA900\nF9E0\nA920\nFAA0\n2240\nFCA0\n2320\nENDCHAR\nSTARTCHAR U_8EF8\nENCODING 36600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n23E0\nFAA0\nAAA0\nFAA0\nABE0\nFAA0\n22A0\nFBE0\n2220\nENDCHAR\nSTARTCHAR U_8EF9\nENCODING 36601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA20\n2220\nFA20\nAA20\nFBE0\nA800\nF940\n2140\nFA20\n2420\nENDCHAR\nSTARTCHAR U_8EFA\nENCODING 36602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF920\n2120\nF920\nAAE0\nFC40\nABE0\nFA20\n2220\nFBE0\n2220\nENDCHAR\nSTARTCHAR U_8EFB\nENCODING 36603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFC20\n2020\nFBA0\nAAA0\nFAA0\nABA0\nF820\n2020\nFC20\n2060\nENDCHAR\nSTARTCHAR U_8EFC\nENCODING 36604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFA80\n2280\nFBE0\nAC80\nF880\nAFE0\nF880\n2080\nF940\n2620\nENDCHAR\nSTARTCHAR U_8EFD\nENCODING 36605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFC0\n2240\nF980\nAA80\nFD60\nA900\nFFC0\n2100\nF900\n27E0\nENDCHAR\nSTARTCHAR U_8EFE\nENCODING 36606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nF8A0\n27E0\nF880\nAF80\nFA80\nAA80\nFAA0\n23A0\nFE60\n2020\nENDCHAR\nSTARTCHAR U_8EFF\nENCODING 36607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\nF940\n27E0\nF940\nA940\nF940\nAFE0\nF940\n2140\nFA40\n2440\nENDCHAR\nSTARTCHAR U_8F00\nENCODING 36608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n2100\nFA00\nAFE0\nFAA0\nAAA0\nFAA0\n2AA0\nFAA0\n2860\nENDCHAR\nSTARTCHAR U_8F01\nENCODING 36609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFA40\n27E0\nFA40\nAA40\nFA40\nAFE0\nF800\n2240\nFC20\n2420\nENDCHAR\nSTARTCHAR U_8F02\nENCODING 36610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1100\nFFE0\n2480\nFFE0\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8F03\nENCODING 36611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF880\n27E0\nFA40\nAC20\nFA40\nAA40\nF980\n2180\nFA40\n2420\nENDCHAR\nSTARTCHAR U_8F04\nENCODING 36612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF920\n2540\nFB80\nA900\nFFE0\nAA80\nFA80\n22A0\nFCA0\n2860\nENDCHAR\nSTARTCHAR U_8F05\nENCODING 36613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF9E0\n2140\nFA80\nA940\nFA20\nABE0\nFA20\n2220\nFBE0\n2220\nENDCHAR\nSTARTCHAR U_8F06\nENCODING 36614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nF920\nAB40\nF880\nA920\nFA40\n2080\nFD40\n2220\nENDCHAR\nSTARTCHAR U_8F07\nENCODING 36615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFA80\n2440\nF820\nAFC0\nF900\nA900\nFFC0\n2100\nF900\n27E0\nENDCHAR\nSTARTCHAR U_8F08\nENCODING 36616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBE0\n2220\nFB20\nAAA0\nFFE0\nAA20\nFB20\n22A0\nFC20\n20E0\nENDCHAR\nSTARTCHAR U_8F09\nENCODING 36617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1180\n7D40\n1100\nFFE0\n1100\nFF20\n5540\n7C80\n54A0\nFF60\n1220\nENDCHAR\nSTARTCHAR U_8F0A\nENCODING 36618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n2100\nFA40\nAFA0\nF820\nA880\nFBE0\n2080\nF880\n27E0\nENDCHAR\nSTARTCHAR U_8F0B\nENCODING 36619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FC0\n0800\nFFE0\n4440\nBFA0\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8F0C\nENCODING 36620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n2100\nFFE0\nA920\nFD60\nAD60\nFFE0\n2820\nF8A0\n2840\nENDCHAR\nSTARTCHAR U_8F0D\nENCODING 36621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nFA20\n2080\nF940\nAA20\nF800\nABE0\nFA20\n2220\nFBE0\n2220\nENDCHAR\nSTARTCHAR U_8F0E\nENCODING 36622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24A0\nFAC0\n2080\nFBE0\nAA20\nFBE0\nAA20\nFBE0\n2220\nFA20\n2260\nENDCHAR\nSTARTCHAR U_8F0F\nENCODING 36623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n2180\nFFE0\nADA0\nFDA0\nAEE0\nFC20\n27E0\nFC20\n27E0\nENDCHAR\nSTARTCHAR U_8F10\nENCODING 36624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2420\nFBC0\nA800\nFFE0\nAA80\nFA80\n22A0\nFAA0\n2460\nENDCHAR\nSTARTCHAR U_8F11\nENCODING 36625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nF940\n27E0\nF940\nAFC0\nF940\nAA00\nFFE0\n2220\nFBE0\n2220\nENDCHAR\nSTARTCHAR U_8F12\nENCODING 36626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nFD40\n2540\nFF40\nAD40\nFF40\nAD40\nFD40\n27C0\nF940\n2160\nENDCHAR\nSTARTCHAR U_8F13\nENCODING 36627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF9C0\n2240\nFFE0\nAAA0\nFAA0\nABE0\nF880\n21A0\nFAA0\n2460\nENDCHAR\nSTARTCHAR U_8F14\nENCODING 36628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nF8A0\n23E0\nF880\nABE0\nFAA0\nABE0\nFAA0\n23E0\nFAA0\n22E0\nENDCHAR\nSTARTCHAR U_8F15\nENCODING 36629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF800\n22A0\nFD40\nAD40\nFAA0\nA800\nFBC0\n2080\nF880\n27E0\nENDCHAR\nSTARTCHAR U_8F16\nENCODING 36630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nFD20\n27A0\nFD20\nAFE0\nFC20\nAFA0\nFEA0\n27A0\nFC20\n2460\nENDCHAR\nSTARTCHAR U_8F17\nENCODING 36631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFEE0\n2420\nFEE0\nAC20\nFC20\nAFE0\nFA80\n22A0\nFAA0\n2460\nENDCHAR\nSTARTCHAR U_8F18\nENCODING 36632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFFE0\nA940\nFA20\nADC0\nFB40\n2480\nF940\n2620\nENDCHAR\nSTARTCHAR U_8F19\nENCODING 36633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFF80\n2500\nFDE0\nA720\nFDA0\nA740\nFD40\n27A0\nF920\n2100\nENDCHAR\nSTARTCHAR U_8F1A\nENCODING 36634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nFA40\n27E0\nF940\nA9A0\nFE60\nAA80\nFFE0\n2280\nF9A0\n2660\nENDCHAR\nSTARTCHAR U_8F1B\nENCODING 36635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF900\n2100\nFFE0\nA920\nFDA0\nAB60\nFDA0\n2920\nF920\n2960\nENDCHAR\nSTARTCHAR U_8F1C\nENCODING 36636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\nFAA0\n2540\nFAA0\nAAA0\nF800\nABE0\nFAA0\n23E0\nFAA0\n23E0\nENDCHAR\nSTARTCHAR U_8F1D\nENCODING 36637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nACA0\n73C0\n2080\nFBE0\n52A0\n53E0\n52A0\n57E0\n5880\n9080\nENDCHAR\nSTARTCHAR U_8F1E\nENCODING 36638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nFC20\n26A0\nFFE0\nAD20\nFFE0\nAD20\nFD20\n25E0\nFC20\n2460\nENDCHAR\nSTARTCHAR U_8F1F\nENCODING 36639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF920\n23C0\nFAA0\nAD00\nFFE0\nA920\nFDA0\n2240\nFAA0\n25A0\nENDCHAR\nSTARTCHAR U_8F20\nENCODING 36640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFAA0\n23E0\nFAA0\nABE0\nF880\nAFE0\nF880\n21C0\nFAA0\n2480\nENDCHAR\nSTARTCHAR U_8F21\nENCODING 36641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF9E0\n2120\nFA40\nA900\nFAE0\nAA20\nFB60\n2220\nFA20\n23E0\nENDCHAR\nSTARTCHAR U_8F22\nENCODING 36642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n2100\nFA80\nAFE0\nF840\nAF40\nFD40\n2740\nF840\n20C0\nENDCHAR\nSTARTCHAR U_8F23\nENCODING 36643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\nFAA0\n2AA0\nFEE0\nAAA0\nFAA0\nAEE0\nFAA0\n2AA0\nFAA0\n2B60\nENDCHAR\nSTARTCHAR U_8F24\nENCODING 36644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n2080\nFBE0\nA880\nFFE0\nAA20\nFBE0\n2220\nFBE0\n2260\nENDCHAR\nSTARTCHAR U_8F25\nENCODING 36645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA20\n23E0\nFA20\nABE0\nFA80\nAAA0\nFBC0\n22A0\nFBA0\n22E0\nENDCHAR\nSTARTCHAR U_8F26\nENCODING 36646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\nFBE0\n5540\n8420\n7FC0\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8F27\nENCODING 36647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\nFA40\n27E0\nFA40\nAA40\nFFE0\nAA40\nFA40\n2240\nFA40\n2440\nENDCHAR\nSTARTCHAR U_8F28\nENCODING 36648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2420\nFBC0\nAA40\nFBC0\nAA00\nFBC0\n2240\nFA40\n23C0\nENDCHAR\nSTARTCHAR U_8F29\nENCODING 36649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nF1E0\n1100\nF1E0\n1500\nFFE0\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8F2A\nENCODING 36650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFA80\n2440\nFBA0\nA800\nFFE0\nAAA0\nFFE0\n2AA0\nFAA0\n2860\nENDCHAR\nSTARTCHAR U_8F2B\nENCODING 36651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nFA80\n2EE0\nFA80\nAEE0\nFA80\nAA80\nFEE0\n2280\nFA80\n2280\nENDCHAR\nSTARTCHAR U_8F2C\nENCODING 36652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2000\nFBE0\nAA20\nFA20\nABE0\nF880\n22C0\nFAA0\n25A0\nENDCHAR\nSTARTCHAR U_8F2D\nENCODING 36653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nF900\n27E0\nFAA0\nAAA0\nFAA0\nA900\nFFE0\n2280\nFC60\n2840\nENDCHAR\nSTARTCHAR U_8F2E\nENCODING 36654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFD40\n27C0\nFD40\nAFC0\nF800\nAFE0\nFAA0\n2FE0\nFAA0\n2FE0\nENDCHAR\nSTARTCHAR U_8F2F\nENCODING 36655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n23C0\nF800\nAFE0\nFA40\nABC0\nFA40\n22E0\nFF40\n2040\nENDCHAR\nSTARTCHAR U_8F30\nENCODING 36656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n23C0\nFA40\nAFE0\nFA00\nAFE0\nFAA0\n2520\nFAA0\n2440\nENDCHAR\nSTARTCHAR U_8F31\nENCODING 36657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nF8A0\n27E0\nFC80\nAFA0\nFCA0\nAFA0\nFD40\n2760\nF4A0\n2920\nENDCHAR\nSTARTCHAR U_8F32\nENCODING 36658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\nFD40\n27C0\nF800\nAFE0\nF900\nAFE0\nFAA0\n2AA0\nFAA0\n2860\nENDCHAR\nSTARTCHAR U_8F33\nENCODING 36659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF900\n27C0\nF900\nAFE0\nFA40\nAFA0\nF900\n27C0\nFA80\n2460\nENDCHAR\nSTARTCHAR U_8F34\nENCODING 36660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nFC80\n27E0\nFC80\nADE0\nFD20\nADE0\nFD20\n25E0\nFD20\n21E0\nENDCHAR\nSTARTCHAR U_8F35\nENCODING 36661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFC40\n27C0\nFC40\nAFC0\nFA00\nABE0\nFCA0\n2560\nFFA0\n20C0\nENDCHAR\nSTARTCHAR U_8F36\nENCODING 36662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\nFA80\n27E0\nFA80\nAFE0\nFAA0\nACE0\nF820\n2FE0\nF820\n2FE0\nENDCHAR\nSTARTCHAR U_8F37\nENCODING 36663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFBE0\n2520\nFFE0\nA820\nFBA0\nA820\nFBA0\n22A0\nFBA0\n2040\nENDCHAR\nSTARTCHAR U_8F38\nENCODING 36664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFA80\n2460\nFB80\nAE20\nFAA0\nAEA0\nFAA0\n2EA0\nFA20\n2A60\nENDCHAR\nSTARTCHAR U_8F39\nENCODING 36665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFBE0\n2640\nFBC0\nAA40\nFBC0\nA900\nFBE0\n2640\nF980\n2660\nENDCHAR\nSTARTCHAR U_8F3A\nENCODING 36666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\nFAA0\n2540\nFFE0\nAD40\nFAA0\nABE0\nFAA0\n23E0\nFAA0\n23E0\nENDCHAR\nSTARTCHAR U_8F3B\nENCODING 36667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF800\n21C0\nF940\nA9C0\nF800\nABE0\nFAA0\n23E0\nFAA0\n23E0\nENDCHAR\nSTARTCHAR U_8F3C\nENCODING 36668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n23C0\nFA40\nABC0\nF800\nAFE0\nFAA0\n2AA0\nFAA0\n2FE0\nENDCHAR\nSTARTCHAR U_8F3D\nENCODING 36669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFFC0\n2100\nFFE0\nAA80\nFC40\nAFE0\nFD40\n27C0\nFD40\n27C0\nENDCHAR\nSTARTCHAR U_8F3E\nENCODING 36670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nFC20\n27E0\nFD40\nAFE0\nFD40\nAFE0\nFD00\n25A0\nFD40\n25A0\nENDCHAR\nSTARTCHAR U_8F3F\nENCODING 36671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n64C0\n5F40\n64C0\n5F40\n75C0\n5540\n7FC0\n4440\nFFE0\n2080\nC060\nENDCHAR\nSTARTCHAR U_8F40\nENCODING 36672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFAA0\n22A0\nFB60\nABE0\nF800\nAFE0\nFAA0\n2AA0\nFAA0\n2FE0\nENDCHAR\nSTARTCHAR U_8F41\nENCODING 36673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\nFF20\n2520\nFAC0\nA900\nFE60\nAC20\nFEE0\n2420\nFFE0\n2420\nENDCHAR\nSTARTCHAR U_8F42\nENCODING 36674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\nFF40\n1140\nFF60\n9200\nFDE0\n5620\n7D40\n5480\nFD40\n1220\nENDCHAR\nSTARTCHAR U_8F43\nENCODING 36675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2100\nFFE0\nAA40\nFFA0\nA900\nFFE0\n2380\nFD40\n2920\nENDCHAR\nSTARTCHAR U_8F44\nENCODING 36676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2520\nFFC0\nA900\nFFC0\nA900\nFFE0\n2440\nFC40\n27C0\nENDCHAR\nSTARTCHAR U_8F45\nENCODING 36677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n2100\nFFE0\nA800\nFBC0\nAA40\nFBC0\n26A0\nFA40\n2720\nENDCHAR\nSTARTCHAR U_8F46\nENCODING 36678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2A80\nFFE0\nAAA0\nFFE0\nA800\nFAA0\n2BC0\nFAA0\n37E0\nENDCHAR\nSTARTCHAR U_8F47\nENCODING 36679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF920\n25A0\nFB60\nADA0\nFA80\nAD40\nFAA0\n2140\nF880\n2700\nENDCHAR\nSTARTCHAR U_8F48\nENCODING 36680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\nFD40\n22A0\nFBE0\nAAA0\nFBE0\nAAA0\nFFE0\n2180\nFAC0\n24A0\nENDCHAR\nSTARTCHAR U_8F49\nENCODING 36681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2540\nFFC0\nAD40\nFFC0\nA960\nFFE0\n2440\nFA40\n20C0\nENDCHAR\nSTARTCHAR U_8F4A\nENCODING 36682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFFE0\n2240\nFFE0\nAA40\nFA40\nAFE0\nF820\n27E0\nF820\n27E0\nENDCHAR\nSTARTCHAR U_8F4B\nENCODING 36683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n22A0\nFBE0\nAEA0\nFFE0\nAC80\nFFE0\n2480\nFC00\n23E0\nENDCHAR\nSTARTCHAR U_8F4C\nENCODING 36684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF900\n27E0\nFD20\nAB40\nFD20\nAFE0\nF820\n27E0\nF820\n27E0\nENDCHAR\nSTARTCHAR U_8F4D\nENCODING 36685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nFF80\n2AE0\nFFA0\nA9A0\nFEA0\nAAA0\nFEA0\n2A40\nFEA0\n2B20\nENDCHAR\nSTARTCHAR U_8F4E\nENCODING 36686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nF900\n27E0\nFA40\nAFE0\nFA40\nAFE0\nFAA0\n2BA0\nF820\n2860\nENDCHAR\nSTARTCHAR U_8F4F\nENCODING 36687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nF820\n2FE0\nF900\nAFC0\nF900\nAFE0\nFA40\n2FE0\nFA40\n26C0\nENDCHAR\nSTARTCHAR U_8F50\nENCODING 36688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n26A0\nFAC0\n2FE0\nFA80\nAFE0\nF900\nAFC0\nF900\n27E0\nFA80\n2C60\nENDCHAR\nSTARTCHAR U_8F51\nENCODING 36689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF7E0\n25A0\nFBC0\nAE60\nFBC0\nAA40\nFBC0\n2580\nF940\n2320\nENDCHAR\nSTARTCHAR U_8F52\nENCODING 36690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n22A0\nFFE0\nAA40\nFBC0\nAA40\nFBC0\n2240\nFBC0\n2660\nENDCHAR\nSTARTCHAR U_8F53\nENCODING 36691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nF920\n2540\nFFE0\nA940\nFFE0\nAD40\nFFC0\n2540\nFFC0\n2440\nENDCHAR\nSTARTCHAR U_8F54\nENCODING 36692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\nFB40\n27E0\nFB40\nAD20\nFA40\nABE0\nFD40\n25E0\nFA40\n2440\nENDCHAR\nSTARTCHAR U_8F55\nENCODING 36693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nFA80\n23C0\nFA40\nABC0\nFA40\nAFE0\nFCA0\n2560\nFFA0\n2040\nENDCHAR\nSTARTCHAR U_8F56\nENCODING 36694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2540\nFFC0\nA920\nFFE0\nADA0\nFDA0\n2420\nFFE0\n2420\nENDCHAR\nSTARTCHAR U_8F57\nENCODING 36695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20A0\nFFE0\n2880\nFFA0\nA8A0\nFEC0\nAA60\nFE80\n22A0\nF660\n2BC0\nENDCHAR\nSTARTCHAR U_8F58\nENCODING 36696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nFAA0\n2FE0\nF800\nAFE0\nFA40\nABC0\nFA80\n26A0\nFB40\n2220\nENDCHAR\nSTARTCHAR U_8F59\nENCODING 36697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nFFC0\n2100\nFFE0\nAAC0\nFAA0\nAFE0\nFAA0\n2740\nFAE0\n2720\nENDCHAR\nSTARTCHAR U_8F5A\nENCODING 36698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\nAA60\nFFC0\nA940\nFC80\n7FE0\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8F5B\nENCODING 36699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\nF720\n2720\nF9E0\nAA20\nFF20\nAAA0\nFF60\n2220\nFB20\n26E0\nENDCHAR\nSTARTCHAR U_8F5C\nENCODING 36700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nF900\n27E0\nFD60\nAB80\nFD40\nAFE0\nFA00\n27E0\nFD20\n2560\nENDCHAR\nSTARTCHAR U_8F5D\nENCODING 36701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6DC0\n4E40\n4A40\nFFE0\n2480\n7FC0\nA4A0\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8F5E\nENCODING 36702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F40\nFA40\n2F60\nF940\nAF40\nFAA0\nAFA0\nF000\n2FE0\nFAA0\n2FE0\nENDCHAR\nSTARTCHAR U_8F5F\nENCODING 36703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n2480\n3F80\n2480\nFFE0\n5540\n7FC0\n5540\nFFE0\n1080\nENDCHAR\nSTARTCHAR U_8F60\nENCODING 36704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFD40\n27C0\nFD40\nAFC0\nF800\nAFE0\nFAA0\n2FE0\nFAA0\n2FE0\nENDCHAR\nSTARTCHAR U_8F61\nENCODING 36705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n5F40\nB5A0\n5F40\nF5E0\n5F40\nA4A0\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_8F62\nENCODING 36706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\nFBA0\n26C0\nFBA0\nAAC0\nFFE0\nA900\nFFE0\n2380\nF540\n2920\nENDCHAR\nSTARTCHAR U_8F63\nENCODING 36707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nFEC0\n2A40\nFFE0\nAA40\nFEE0\nAA40\nF880\n2AE0\nFA80\n2FE0\nENDCHAR\nSTARTCHAR U_8F64\nENCODING 36708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\nF100\n2FE0\nF920\nAFE0\nFD40\nAFC0\nFD40\n2FE0\nFAA0\n27E0\nENDCHAR\nSTARTCHAR U_8F65\nENCODING 36709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\nFFE0\n2AA0\nFEE0\nAAA0\nFEE0\nAAA0\nFFE0\n2AA0\nFBE0\n2A60\nENDCHAR\nSTARTCHAR U_8F66\nENCODING 36710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n0800\n7FC0\n1000\n2400\n3F80\n0400\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_8F67\nENCODING 36711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nFD00\n2100\n5100\n7D00\n1100\n1D00\nF120\n1120\n10E0\nENDCHAR\nSTARTCHAR U_8F68\nENCODING 36712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\nF280\n4FC0\nA280\nF280\n2280\n34A0\nE4A0\n28A0\n3060\nENDCHAR\nSTARTCHAR U_8F69\nENCODING 36713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47C0\nF100\n4100\nAFE0\nF100\n2100\n3100\nE100\n2100\n2100\nENDCHAR\nSTARTCHAR U_8F6A\nENCODING 36714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n4100\n67C0\nA100\nF900\n2280\n3A80\nE240\n2460\n2840\nENDCHAR\nSTARTCHAR U_8F6B\nENCODING 36715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n40A0\n62A0\nA2A0\nFD20\n2120\n3920\nE220\n22A0\n2440\nENDCHAR\nSTARTCHAR U_8F6C\nENCODING 36716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF7C0\n4100\n6FE0\nA200\nF7C0\n2040\n3A80\nE100\n2080\n2080\nENDCHAR\nSTARTCHAR U_8F6D\nENCODING 36717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nFC00\n4400\n65E0\nA520\nFD20\n2560\n3D00\nE500\n2520\n28E0\nENDCHAR\nSTARTCHAR U_8F6E\nENCODING 36718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF980\n4240\n6420\nA000\nFA40\n2280\n3B00\nE220\n2220\n21E0\nENDCHAR\nSTARTCHAR U_8F6F\nENCODING 36719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\nFBE0\n4220\nA540\nF900\n2100\n3A80\nE280\n2440\n2820\nENDCHAR\nSTARTCHAR U_8F70\nENCODING 36720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7FC0\n2400\n3F80\n0400\nFFE0\n0400\nFBC0\n4A40\n3180\nCE60\nENDCHAR\nSTARTCHAR U_8F71\nENCODING 36721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n47E0\n6080\nA080\nFBE0\n2220\n3A20\nE220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_8F72\nENCODING 36722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF840\n4040\n6740\nA540\nFD40\n2740\n3840\nE040\n2140\n2080\nENDCHAR\nSTARTCHAR U_8F73\nENCODING 36723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF9E0\n4100\n67E0\nA420\nFC20\n27E0\n3C00\nE400\n2400\n2800\nENDCHAR\nSTARTCHAR U_8F74\nENCODING 36724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\n47E0\n64A0\nA4A0\nFCA0\n27E0\n3CA0\nE4A0\n27E0\n2420\nENDCHAR\nSTARTCHAR U_8F75\nENCODING 36725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA20\n4220\n6220\nA220\nFBE0\n2220\n3940\nE240\n2420\n2820\nENDCHAR\nSTARTCHAR U_8F76\nENCODING 36726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nFA80\n43E0\n6480\nA080\nFFE0\n2080\n3880\nE140\n2220\n2420\nENDCHAR\nSTARTCHAR U_8F77\nENCODING 36727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFB80\n44A0\n62A0\nA2C0\nF880\n27E0\n2080\nF880\n2080\n2180\nENDCHAR\nSTARTCHAR U_8F78\nENCODING 36728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF980\n4240\n64A0\nA100\nFA40\n2080\n3920\nE040\n2180\n2600\nENDCHAR\nSTARTCHAR U_8F79\nENCODING 36729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\nFB80\n4200\n6280\nA280\nFFE0\n2080\n3AC0\nE2A0\n24A0\n2180\nENDCHAR\nSTARTCHAR U_8F7A\nENCODING 36730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n4120\n6120\nA2A0\nFC40\n23E0\n3A20\nE220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_8F7B\nENCODING 36731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nF840\n4080\n6140\nA620\nF800\n23E0\n3880\nE080\n2080\n27E0\nENDCHAR\nSTARTCHAR U_8F7C\nENCODING 36732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nF8A0\n47E0\n6080\nA780\nFA80\n2280\n3AA0\nE3A0\n2C60\n2020\nENDCHAR\nSTARTCHAR U_8F7D\nENCODING 36733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7D40\n1120\nFFE0\n2100\nFD20\n5140\n7C80\n10A0\nFD60\n1220\nENDCHAR\nSTARTCHAR U_8F7E\nENCODING 36734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF900\n4100\n6240\nA7E0\nF920\n2100\n3FC0\nE100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_8F7F\nENCODING 36735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nFF00\n4100\n67E0\nA240\nFC20\n2240\n3A40\nE240\n2440\n2840\nENDCHAR\nSTARTCHAR U_8F80\nENCODING 36736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nFC40\n4640\nA540\nFFE0\n2440\n3640\n6540\nA440\n28C0\nENDCHAR\nSTARTCHAR U_8F81\nENCODING 36737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFA80\n4440\n6020\nA7C0\nF900\n2100\n3FC0\nE100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_8F82\nENCODING 36738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFBC0\n4640\n6240\nA180\nFA40\n27E0\n3A40\nE240\n23C0\n2240\nENDCHAR\nSTARTCHAR U_8F83\nENCODING 36739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF880\n47E0\n6240\nA420\nFA40\n2240\n3980\nE080\n2140\n2620\nENDCHAR\nSTARTCHAR U_8F84\nENCODING 36740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n4A00\nFA80\n4E80\nAA80\nFE80\n2A80\n3B80\nEEA0\n22A0\n22E0\nENDCHAR\nSTARTCHAR U_8F85\nENCODING 36741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nFFE0\n4100\n67E0\nA520\nFFE0\n2520\n3FE0\nE520\n2520\n2560\nENDCHAR\nSTARTCHAR U_8F86\nENCODING 36742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nFA80\n4280\n6FE0\nAAA0\nFAA0\n2BE0\n3CA0\nE920\n2820\n2860\nENDCHAR\nSTARTCHAR U_8F87\nENCODING 36743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2080\nFBE0\n4B40\nBFE0\n1400\n3FC0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_8F88\nENCODING 36744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFBE0\n0A00\nFBE0\n0A00\n7FC0\n1400\n3FC0\n0400\n7FE0\n0400\nENDCHAR\nSTARTCHAR U_8F89\nENCODING 36745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nAC20\n7100\n27E0\nFA00\n5480\n57C0\n5080\n5FE0\n5080\n8080\nENDCHAR\nSTARTCHAR U_8F8A\nENCODING 36746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nFC20\n47E0\n6420\nA7E0\nF880\n24A0\n3FC0\nE480\n25A0\n2660\nENDCHAR\nSTARTCHAR U_8F8B\nENCODING 36747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nF820\n4AA0\n6920\nAFE0\nF920\n2FE0\n3A20\nEBA0\n2820\n2860\nENDCHAR\nSTARTCHAR U_8F8C\nENCODING 36748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\nFFE0\n4000\nA7C0\nF440\n27C0\n3100\n6540\nA920\n2300\nENDCHAR\nSTARTCHAR U_8F8D\nENCODING 36749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nFDA0\n4240\n65A0\nA500\nFFE0\n2120\n3DA0\nE240\n25A0\n2920\nENDCHAR\nSTARTCHAR U_8F8E\nENCODING 36750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\nFAA0\n4540\n62A0\nA2A0\nFFE0\n2520\n3FE0\nE520\n27E0\n2420\nENDCHAR\nSTARTCHAR U_8F8F\nENCODING 36751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF900\n47C0\n6100\nA7E0\nFC40\n23A0\n3900\nE7E0\n2280\n2C60\nENDCHAR\nSTARTCHAR U_8F90\nENCODING 36752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4000\nF3C0\n4240\nA3C0\nF800\n27E0\n3CA0\nE7E0\n24A0\n27E0\nENDCHAR\nSTARTCHAR U_8F91\nENCODING 36753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n43C0\n6000\nA7E0\nFA40\n2340\n3AC0\nE260\n2FC0\n2040\nENDCHAR\nSTARTCHAR U_8F92\nENCODING 36754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\nFFC0\n4440\nA7C0\nF000\n27C0\n3540\n6540\nA540\n2FE0\nENDCHAR\nSTARTCHAR U_8F93\nENCODING 36755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4280\nF440\n4BA0\nA000\nFE20\n2AA0\n3EA0\nEAA0\n2EA0\n2A60\nENDCHAR\nSTARTCHAR U_8F94\nENCODING 36756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\n9E80\nF5E0\n3E40\nE5E0\n3F20\nC4C0\n3F80\n2080\n3F80\n2080\nENDCHAR\nSTARTCHAR U_8F95\nENCODING 36757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n4100\n67E0\nA000\nFFC0\n2440\n3FC0\nE6A0\n2A40\n2320\nENDCHAR\nSTARTCHAR U_8F96\nENCODING 36758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n4920\n67C0\nA100\nF7C0\n2900\n3FE0\nE440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_8F97\nENCODING 36759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4820\nFFE0\n4940\nAFE0\nF940\n2FE0\n3AA0\nEA40\n2B20\n3220\nENDCHAR\nSTARTCHAR U_8F98\nENCODING 36760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\nFA80\n4FE0\nAAA0\nFFE0\n2AA0\n3BC0\nEA80\n2BA0\n32E0\nENDCHAR\nSTARTCHAR U_8F99\nENCODING 36761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4F80\nFAE0\n4FA0\nA0A0\nFEA0\n2AA0\n3EA0\nEA40\n2EA0\n2B20\nENDCHAR\nSTARTCHAR U_8F9A\nENCODING 36762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\nFB40\n47E0\n6340\nA520\nFC40\n27E0\n3D40\nE3E0\n2240\n2440\nENDCHAR\nSTARTCHAR U_8F9B\nENCODING 36763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n2080\n1900\n0A00\nFFE0\n0400\n7FC0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_8F9C\nENCODING 36764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2080\n3F80\n0400\n7FC0\n0A00\nFFE0\n0400\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_8F9D\nENCODING 36765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2100\n4FE0\n9440\nFA80\n0FE0\nF100\n97C0\n9100\nF100\n0100\nENDCHAR\nSTARTCHAR U_8F9E\nENCODING 36766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nE7E0\n2220\nF940\n27E0\n2080\nF880\n8BE0\n8880\nF880\n8880\nENDCHAR\nSTARTCHAR U_8F9F\nENCODING 36767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3C80\n27E0\n2620\n3D40\n2080\n3FE0\n5480\n57E0\n5480\n9C80\n0080\nENDCHAR\nSTARTCHAR U_8FA0\nENCODING 36768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n7FC0\n1100\nFFE0\n0400\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_8FA1\nENCODING 36769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n1080\n7BE0\n2940\n1080\nFBE0\n1080\n7BE0\n1080\n2080\n4080\nENDCHAR\nSTARTCHAR U_8FA2\nENCODING 36770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2080\nFFE0\n2140\nF880\nAFE0\nF880\n23E0\n7080\nA880\n2080\nENDCHAR\nSTARTCHAR U_8FA3\nENCODING 36771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27E0\nF900\n57E0\n2520\nFFE0\n2100\nFB80\n2540\n4920\n8100\nENDCHAR\nSTARTCHAR U_8FA4\nENCODING 36772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3900\nC080\nAFE0\n5140\nF880\n8FE0\n7080\n13E0\n6080\n5080\n8880\nENDCHAR\nSTARTCHAR U_8FA5\nENCODING 36773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA880\nFFE0\n5140\nF880\n4FE0\n7880\n43E0\n7880\n4880\n7880\nENDCHAR\nSTARTCHAR U_8FA6\nENCODING 36774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\nF5E0\n54A0\n2F40\nF5E0\n2540\n2540\nF5E0\n2540\n4940\n9240\nENDCHAR\nSTARTCHAR U_8FA7\nENCODING 36775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8080\n4040\nFFE0\nAAA0\n4A40\nFBE0\n4A40\nEAE0\n4A40\n5240\nA640\nENDCHAR\nSTARTCHAR U_8FA8\nENCODING 36776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFBE0\n52A0\n2A40\nFBE0\n2A40\n3A40\nE3E0\n2440\n4840\n9040\nENDCHAR\nSTARTCHAR U_8FA9\nENCODING 36777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\nFBE0\n52A0\n2C40\nF5E0\n2440\n3C40\nE5E0\n2640\n4440\n8040\nENDCHAR\nSTARTCHAR U_8FAA\nENCODING 36778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5C80\n53E0\n5140\nFC80\n4BE0\n7880\n43E0\n7880\n4880\n7880\nENDCHAR\nSTARTCHAR U_8FAB\nENCODING 36779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFCE0\n55A0\n2640\nFBE0\n2440\n3E40\nE1E0\n2640\n4840\n8040\nENDCHAR\nSTARTCHAR U_8FAC\nENCODING 36780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n4440\nF5E0\nA0A0\n4F40\nF1E0\n4A40\nE5E0\n4A40\n5040\n8040\nENDCHAR\nSTARTCHAR U_8FAD\nENCODING 36781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C80\nF7E0\n5540\n7C80\n2BE0\nFE80\nAA80\nBBE0\nAA80\n9280\nAE80\nENDCHAR\nSTARTCHAR U_8FAE\nENCODING 36782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\nF9E0\n5EA0\n2440\nFBE0\n2E40\n3440\nE5E0\n2E40\n5540\n8C40\nENDCHAR\nSTARTCHAR U_8FAF\nENCODING 36783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFFE0\n50A0\n2740\nF8E0\n2740\n2040\nFFE0\n2540\n4740\n8540\nENDCHAR\nSTARTCHAR U_8FB0\nENCODING 36784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2000\n2FC0\n2000\n3FE0\n2A00\n2A40\n2980\n4880\n4A40\n8C20\nENDCHAR\nSTARTCHAR U_8FB1\nENCODING 36785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4000\n5F80\n4000\n7FE0\n5240\n9980\n9140\nFFE0\n1100\n0B00\nENDCHAR\nSTARTCHAR U_8FB2\nENCODING 36786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n3FC0\n2940\n3FC0\n2940\n3FE0\n2000\n3FE0\n2A80\n4900\n8EE0\nENDCHAR\nSTARTCHAR U_8FB3\nENCODING 36787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n5540\n9120\n7FE0\n4000\n5F80\n4000\n7FE0\n5280\n99C0\nENDCHAR\nSTARTCHAR U_8FB4\nENCODING 36788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAA00\nFAC0\nAA00\nFBE0\nAA80\nFAA0\n22C0\nFA40\n26A0\n2B20\nENDCHAR\nSTARTCHAR U_8FB5\nENCODING 36789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03C0\n7C00\n03C0\n3C00\n03C0\n7C00\n0400\n27C0\n2400\n5C00\n83E0\nENDCHAR\nSTARTCHAR U_8FB6\nENCODING 36790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n2000\n2000\n0000\nE000\n2000\n2000\n2000\n2000\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FB7\nENCODING 36791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8000\n4000\n4000\n0000\nEFC0\n2000\n2000\n2000\n5000\n4FE0\n8000\nENDCHAR\nSTARTCHAR U_8FB8\nENCODING 36792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8000\n5FC0\n4480\n0500\nE5E0\n2420\n2820\n2940\n3080\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FB9\nENCODING 36793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n2FE0\n0120\nE120\n2120\n2220\n2420\n28C0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FBA\nENCODING 36794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8000\n4FC0\n4240\n0240\nE240\n2440\n2440\n2940\n3080\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FBB\nENCODING 36795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4100\n4100\n0FE0\nE100\n2100\n2100\n2100\n2100\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FBC\nENCODING 36796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8400\n4200\n4100\n0100\nE280\n2280\n2460\n2840\n5000\n4FE0\n8000\nENDCHAR\nSTARTCHAR U_8FBD\nENCODING 36797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2040\n2080\n0100\nE100\n2100\n2100\n2500\n2200\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FBE\nENCODING 36798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n2100\n0FE0\nE100\n2100\n2280\n2440\n2820\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FBF\nENCODING 36799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n2520\n0520\nE520\n2520\n2520\n27E0\n2420\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FC0\nENCODING 36800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\n2100\n0100\nEFE0\n2100\n2100\n2100\n2100\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FC1\nENCODING 36801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2700\n2100\n0100\nEFE0\n2100\n2100\n2100\n2100\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FC2\nENCODING 36802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\n2100\n0100\nEFE0\n2100\n2100\n2100\n2500\n5200\n8FE0\nENDCHAR\nSTARTCHAR U_8FC3\nENCODING 36803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8000\n4FC0\n4000\n1FE0\nE400\n2FC0\n2040\n2040\n2140\n5080\n8FE0\nENDCHAR\nSTARTCHAR U_8FC4\nENCODING 36804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n2800\n07C0\nE080\n2100\n2220\n2420\n23E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FC5\nENCODING 36805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F80\n2280\n2280\n0280\nEF80\n2280\n22A0\n2260\n2220\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FC6\nENCODING 36806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2500\n2560\n07A0\nED20\n25A0\n2540\n2420\n23E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FC7\nENCODING 36807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n2080\n2FE0\n0080\nE480\n2280\n2080\n2080\n2180\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FC8\nENCODING 36808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2200\n2200\n03C0\nE240\n2240\n2440\n2540\n2880\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FC9\nENCODING 36809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2420\n2420\n07E0\nE420\n2400\n2400\n2400\n2800\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FCA\nENCODING 36810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n2100\n0FE0\nE920\n2920\n2920\n2960\n2100\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FCB\nENCODING 36811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n2100\n0100\nE7C0\n2100\n2100\n2100\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FCC\nENCODING 36812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n2440\n07C0\nE440\n2440\n27C0\n2440\n2940\n5080\n8FE0\nENDCHAR\nSTARTCHAR U_8FCD\nENCODING 36813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n2100\n0940\nE940\n2FC0\n2120\n2120\n20E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FCE\nENCODING 36814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2DE0\n2920\n0920\nE920\n2920\n2B20\n2D60\n2100\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FCF\nENCODING 36815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n2200\n1FE0\nE200\n2500\n2480\n2A40\n3120\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FD0\nENCODING 36816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2000\n2000\n0FE0\nE200\n2280\n2440\n2FA0\n2420\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FD1\nENCODING 36817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2700\n2400\n07E0\nE480\n2480\n2480\n2480\n2880\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FD2\nENCODING 36818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n2000\n0780\nE480\n2480\n24A0\n24A0\n2860\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FD3\nENCODING 36819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2080\n2480\n0480\nEFE0\n2280\n2480\n2880\n2280\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_8FD4\nENCODING 36820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n2780\n2400\n07E0\nE620\n2540\n2480\n2940\n2620\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FD5\nENCODING 36821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27C0\n2900\n0100\nE100\n2FE0\n2100\n2100\n2100\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FD6\nENCODING 36822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4180\n2140\n2100\n0FE0\nE100\n2100\n2280\n2440\n2820\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FD7\nENCODING 36823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\n2100\n0100\nEFE0\n2100\n2280\n2440\n2820\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FD8\nENCODING 36824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2080\n2100\n0100\nE340\n2520\n2920\n2100\n2100\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FD9\nENCODING 36825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n0FE0\nE080\n2480\n2280\n2100\n2280\n2C40\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FDA\nENCODING 36826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n4100\n4FE0\n0920\nE920\n2FE0\n2100\n2100\n5100\n4FE0\n8000\nENDCHAR\nSTARTCHAR U_8FDB\nENCODING 36827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\n2FC0\n0480\nE480\n3FE0\n2480\n2480\n2880\n5080\n8FE0\nENDCHAR\nSTARTCHAR U_8FDC\nENCODING 36828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2000\n2000\n0FE0\nE280\n2280\n22A0\n24A0\n2860\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FDD\nENCODING 36829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n2100\n07C0\nE100\n2FE0\n2120\n21A0\n2140\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_8FDE\nENCODING 36830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FE0\n2200\n0500\nEFC0\n2100\n2FE0\n2100\n2100\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_8FDF\nENCODING 36831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n2440\n07C0\nE400\n2500\n2480\n2840\n2840\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FE0\nENCODING 36832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n21E0\n0100\nE100\n27E0\n2420\n27E0\n2420\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FE1\nENCODING 36833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2420\n27E0\n0400\nE520\n2540\n25A0\n2520\n28E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FE2\nENCODING 36834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2220\n2220\n04A0\nE840\n37E0\n2420\n2420\n27E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FE3\nENCODING 36835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n2540\n2540\n0FE0\nE540\n2540\n25C0\n2400\n27E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FE4\nENCODING 36836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n2900\n15C0\nEF40\n2540\n25C0\n2420\n23E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FE5\nENCODING 36837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n2820\n0BA0\nEAA0\n2AA0\n2BA0\n2820\n2860\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FE6\nENCODING 36838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n2800\n3EE0\n0AA0\nEAA0\n2AA0\n2AA0\n32A0\n26E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FE7\nENCODING 36839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2200\n2FC0\n0A40\nEFC0\n2A40\n2FC0\n2200\n2200\n5200\n8FE0\nENDCHAR\nSTARTCHAR U_8FE8\nENCODING 36840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2200\n2440\n0FE0\nE020\n27C0\n2440\n2440\n27C0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FE9\nENCODING 36841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n2820\n0940\nE100\n2540\n2520\n2920\n2500\n5200\n8FE0\nENDCHAR\nSTARTCHAR U_8FEA\nENCODING 36842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n2FE0\n0920\nE920\n2FE0\n2920\n2920\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FEB\nENCODING 36843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2200\n27C0\n0440\nE440\n27C0\n2440\n2440\n27C0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FEC\nENCODING 36844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n4100\n4FE0\n0100\nE100\n27C0\n2100\n2100\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FED\nENCODING 36845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2500\n27C0\n0900\nE100\n2FE0\n2280\n2440\n2820\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FEE\nENCODING 36846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2400\n27E0\n0A00\nE3C0\n2200\n2200\n23E0\n2200\n5200\n8FE0\nENDCHAR\nSTARTCHAR U_8FEF\nENCODING 36847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n2480\n2880\n0EC0\nEAA0\n36A0\n2480\n2480\n2880\n5080\n8FE0\nENDCHAR\nSTARTCHAR U_8FF0\nENCODING 36848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n2120\n2FE0\n0100\nE380\n2540\n2540\n2920\n2100\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FF1\nENCODING 36849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n9FC0\n5040\n2880\nC9C0\n4E00\n4840\n4840\n47C0\nA000\n9FE0\nENDCHAR\nSTARTCHAR U_8FF2\nENCODING 36850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n8200\n4FC0\n0200\nDFE0\n4200\n4480\n4440\n4FE0\nA040\n9FE0\nENDCHAR\nSTARTCHAR U_8FF3\nENCODING 36851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2080\n2180\n0240\nEC20\n27C0\n2100\n2100\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FF4\nENCODING 36852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n2BA0\n0AA0\nEAA0\n2BA0\n2820\n2FE0\n2820\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FF5\nENCODING 36853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n2BA0\n0820\nEBA0\n2AA0\n2BA0\n2820\n28E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FF6\nENCODING 36854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FE0\n2200\n07C0\nE440\n2FC0\n3440\n27C0\n2440\n5440\n8FE0\nENDCHAR\nSTARTCHAR U_8FF7\nENCODING 36855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2920\n2540\n0100\nEFE0\n2100\n2380\n2540\n2920\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_8FF8\nENCODING 36856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n2FE0\n0280\nE280\n2FE0\n2280\n2480\n2880\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FF9\nENCODING 36857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n2FE0\n0280\nEAC0\n2AA0\n32A0\n2480\n2980\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FFA\nENCODING 36858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2280\n2280\n0FE0\nEAA0\n2AE0\n2C20\n2820\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FFB\nENCODING 36859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27C0\n2880\n0500\nE200\n2FE0\n2440\n2A80\n2100\n5600\n8FE0\nENDCHAR\nSTARTCHAR U_8FFC\nENCODING 36860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\n2FE0\n0100\nE7C0\n2000\n27C0\n2440\n27C0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FFD\nENCODING 36861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27C0\n2440\n07C0\nE400\n27E0\n2420\n2420\n27E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FFE\nENCODING 36862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F20\n24A0\n24A0\n07A0\nE9A0\n36A0\n2220\n24A0\n2840\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_8FFF\nENCODING 36863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n27E0\n2820\n17A0\nE4A0\n27A0\n24A0\n27A0\n20A0\n5040\n8FE0\nENDCHAR\nSTARTCHAR U_9000\nENCODING 36864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FC0\n4840\n4FC0\n0840\nCFC0\n4800\n4B40\n4880\n4E40\nB000\n8FE0\nENDCHAR\nSTARTCHAR U_9001\nENCODING 36865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n27C0\n0100\nE100\n2FE0\n2100\n2280\n2440\n5820\n8FE0\nENDCHAR\nSTARTCHAR U_9002\nENCODING 36866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2F00\n2100\n0FE0\nE100\n27C0\n2440\n27C0\n2440\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9003\nENCODING 36867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n22A0\n2AC0\n0680\nE2C0\n26A0\n2A80\n24A0\n2860\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9004\nENCODING 36868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n27C0\n2C40\n0380\nEC60\n2100\n27C0\n2900\n2FE0\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_9005\nENCODING 36869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n2F00\n2800\n0FE0\nE800\n2BC0\n2A40\n2A40\n2BC0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9006\nENCODING 36870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n2FE0\n0100\nE920\n2920\n2FE0\n2100\n2200\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_9007\nENCODING 36871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\n8880\n5EE0\n0BA0\nCEA0\n4AA0\n4A80\n4E20\n53E0\nA000\n9FE0\nENDCHAR\nSTARTCHAR U_9008\nENCODING 36872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n8400\n5FC0\n1040\nD740\n5540\n5740\n5040\n5140\nA080\n9FE0\nENDCHAR\nSTARTCHAR U_9009\nENCODING 36873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2500\n27C0\n0900\nEFE0\n2280\n22A0\n24A0\n2860\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_900A\nENCODING 36874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E80\n2280\n2480\n05C0\nE6A0\n3CA0\n2480\n2480\n3D80\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_900B\nENCODING 36875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n2FE0\n2100\n0FE0\nE920\n2FE0\n2920\n2FE0\n2920\n5060\n8FE0\nENDCHAR\nSTARTCHAR U_900C\nENCODING 36876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n2100\n2FE0\n0820\nEFA0\n28A0\n2FA0\n2820\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_900D\nENCODING 36877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2540\n27C0\n0440\nE7C0\n2440\n27C0\n2440\n25C0\n5800\n87E0\nENDCHAR\nSTARTCHAR U_900E\nENCODING 36878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\n8500\n5FC0\n1540\nDDC0\n5040\n5FC0\n5040\n5FC0\nA000\n9FE0\nENDCHAR\nSTARTCHAR U_900F\nENCODING 36879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2100\n3FE0\n0540\nEFA0\n3280\n22C0\n2440\n2940\n5080\n8FE0\nENDCHAR\nSTARTCHAR U_9010\nENCODING 36880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n2200\n0D20\nE2C0\n2D80\n22C0\n2CA0\n2300\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9011\nENCODING 36881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4180\n2140\n3FE0\n0920\nE540\n2380\n2540\n3920\n2300\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9012\nENCODING 36882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n2FE0\n0120\nE7E0\n2900\n2FE0\n2320\n2560\n5900\n8FE0\nENDCHAR\nSTARTCHAR U_9013\nENCODING 36883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n8900\n4FC0\n0900\nCFE0\n4900\n57C0\n5540\n5540\nA100\n9FE0\nENDCHAR\nSTARTCHAR U_9014\nENCODING 36884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\n2440\n0BA0\nE100\n2FE0\n2540\n2920\n3520\n5200\n8FE0\nENDCHAR\nSTARTCHAR U_9015\nENCODING 36885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2540\n2540\n0A80\nE540\n2000\n2FE0\n2100\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9016\nENCODING 36886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\n2C80\n2DA0\n15C0\nE680\n2C80\n34C0\n2520\n2E20\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9017\nENCODING 36887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2000\n27C0\n0440\nE7C0\n2000\n2440\n2280\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9018\nENCODING 36888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n8440\n4FC0\n0400\nCFE0\n5100\n4FE0\n4100\n4280\nA440\n9FE0\nENDCHAR\nSTARTCHAR U_9019\nENCODING 36889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2100\n2FE0\n0000\nE7C0\n2000\n27C0\n2440\n27C0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_901A\nENCODING 36890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2280\n2FE0\n0920\nEFE0\n2920\n2FE0\n2920\n2960\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_901B\nENCODING 36891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\n2C80\n2C80\n1480\nE5E0\n2C80\n3480\n2480\n2BE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_901C\nENCODING 36892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\n27C0\n0240\nEFE0\n2000\n27C0\n2440\n27C0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_901D\nENCODING 36893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n25C0\n3F00\n05E0\nE740\n2D40\n3540\n2540\n2E40\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_901E\nENCODING 36894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n27C0\n0000\nEFC0\n2100\n27C0\n2100\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_901F\nENCODING 36895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n2100\n0FE0\nE920\n2FE0\n2380\n2540\n2920\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_9020\nENCODING 36896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2500\n27C0\n0900\nEFE0\n2000\n27C0\n2440\n27C0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9021\nENCODING 36897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2440\n2FE0\n0440\nE920\n23C0\n2640\n2980\n2240\n5420\n8FE0\nENDCHAR\nSTARTCHAR U_9022\nENCODING 36898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2480\n2B00\n0FE0\nE100\n27C0\n2100\n2FE0\n2100\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_9023\nENCODING 36899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n2540\n07C0\nE540\n27C0\n2100\n2FE0\n2100\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9024\nENCODING 36900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9080\n48C0\n42A0\n1AA0\nCC80\n50A0\n7040\n5080\n5300\nA000\n9FE0\nENDCHAR\nSTARTCHAR U_9025\nENCODING 36901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n9FC0\n5540\n1740\nD540\n5740\n5540\n5FC0\n5040\nA000\n9FE0\nENDCHAR\nSTARTCHAR U_9026\nENCODING 36902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2000\n2FE0\n0920\nEDA0\n2B60\n2920\n2920\n2B60\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9027\nENCODING 36903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\n8440\n4820\n1300\nC480\n4840\n5FE0\n4840\n4FC0\nA840\n9FE0\nENDCHAR\nSTARTCHAR U_9028\nENCODING 36904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n9FC0\n4A80\n0A80\nD740\n6220\n4700\n4A80\n5260\nA200\n9FE0\nENDCHAR\nSTARTCHAR U_9029\nENCODING 36905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n2280\n0540\nEBA0\n2100\n2440\n3FE0\n2440\n5840\n8FE0\nENDCHAR\nSTARTCHAR U_902A\nENCODING 36906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n8FC0\n4480\n1FE0\nC000\n4FC0\n4AC0\n4D40\n4FC0\nA000\n9FE0\nENDCHAR\nSTARTCHAR U_902B\nENCODING 36907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n9320\n4CC0\n1320\nC000\n5FE0\n5320\n4CC0\n5320\nA000\n9FE0\nENDCHAR\nSTARTCHAR U_902C\nENCODING 36908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0440\n8880\n5DE0\n0880\nC880\n5DE0\n4880\n4880\n5080\nA080\n9FE0\nENDCHAR\nSTARTCHAR U_902D\nENCODING 36909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n2820\n0780\nE480\n27C0\n2440\n27C0\n2440\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_902E\nENCODING 36910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n2140\n0FE0\nE140\n27C0\n2920\n2540\n2B20\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_902F\nENCODING 36911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2040\n27C0\n0040\nEFE0\n2920\n2540\n2380\n2540\n5920\n8FE0\nENDCHAR\nSTARTCHAR U_9030\nENCODING 36912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n89E0\n5E00\n0BC0\nCC40\n5880\n4BE0\n4880\n5A80\nA900\n9FE0\nENDCHAR\nSTARTCHAR U_9031\nENCODING 36913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n2BA0\n0920\nEBA0\n2820\n2BA0\n2AA0\n2BA0\n5060\n8FE0\nENDCHAR\nSTARTCHAR U_9032\nENCODING 36914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n2480\n27E0\n0C80\nF7E0\n2480\n27E0\n2480\n27E0\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_9033\nENCODING 36915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n8FC0\n4480\n1FE0\nC000\n4FC0\n4840\n4FC0\n4840\nA880\n9FE0\nENDCHAR\nSTARTCHAR U_9034\nENCODING 36916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n2100\n27C0\n0440\nE7C0\n2440\n27C0\n2100\n2FE0\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_9035\nENCODING 36917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27E0\n2100\n0FE0\nE440\n2920\n27C0\n2100\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9036\nENCODING 36918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n2F80\n2100\n0FE0\nE540\n2920\n2FE0\n2280\n2340\n5420\n8FE0\nENDCHAR\nSTARTCHAR U_9037\nENCODING 36919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F80\n8880\n4F80\n0880\nCF80\n4800\n5FC0\n6540\n4A40\nA480\n9FE0\nENDCHAR\nSTARTCHAR U_9038\nENCODING 36920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n2780\n2900\n1FC0\nEA40\n2FC0\n2540\n2520\n29E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9039\nENCODING 36921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n8F80\n4200\n1FC0\nC500\n5FC0\n4200\n5FC0\n4200\nA200\n9FE0\nENDCHAR\nSTARTCHAR U_903A\nENCODING 36922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n8F80\n4200\n1FC0\nC480\n4F40\n4280\n4540\n5C80\nA640\n9FE0\nENDCHAR\nSTARTCHAR U_903B\nENCODING 36923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\n2FE0\n0200\nE7C0\n2840\n2480\n2300\n2C00\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_903C\nENCODING 36924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2440\n27C0\n0000\nEFE0\n2920\n2FE0\n2920\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_903D\nENCODING 36925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3FE0\n2480\n0200\nEFE0\n2400\n2FC0\n3440\n27C0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_903E\nENCODING 36926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2280\n2440\n1BA0\nEE00\n2AA0\n2EA0\n2AA0\n2EA0\n5A40\n8FE0\nENDCHAR\nSTARTCHAR U_903F\nENCODING 36927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n27C0\n0440\nEFE0\n2400\n27E0\n2AA0\n2520\n5A40\n8FE0\nENDCHAR\nSTARTCHAR U_9040\nENCODING 36928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n8FC0\n4400\n0FC0\nD100\n4FE0\n4440\n47C0\n4440\nA440\n9FE0\nENDCHAR\nSTARTCHAR U_9041\nENCODING 36929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n2F80\n2880\n0FE0\nEA20\n2BE0\n2A20\n2BE0\n2A20\n53E0\n8FE0\nENDCHAR\nSTARTCHAR U_9042\nENCODING 36930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n3FE0\n0620\nE940\n2280\n2DC0\n22A0\n2CA0\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_9043\nENCODING 36931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n8FE0\n4280\n0FE0\nC900\n4AA0\n4D20\n4A40\n5480\nA100\n9FE0\nENDCHAR\nSTARTCHAR U_9044\nENCODING 36932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2FE0\n2000\n1FE0\nE200\n2FE0\n2AA0\n2AA0\n2AE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9045\nENCODING 36933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\n8840\n4FC0\n0A80\nCFE0\n4900\n57C0\n5100\n6FE0\nA100\n9FE0\nENDCHAR\nSTARTCHAR U_9046\nENCODING 36934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n8FE0\n4280\n1FE0\nD120\n4FE0\n4920\n4920\n4960\nA100\n9FE0\nENDCHAR\nSTARTCHAR U_9047\nENCODING 36935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\n8A40\n4FC0\n0A40\nCFC0\n4200\n5FE0\n52A0\n57A0\nB040\n9FE0\nENDCHAR\nSTARTCHAR U_9048\nENCODING 36936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F80\n8880\n4F80\n0880\nDFC0\n4200\n4B80\n4E00\n53C0\n6000\n9FE0\nENDCHAR\nSTARTCHAR U_9049\nENCODING 36937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n2100\n27C0\n0440\nE7C0\n2440\n27C0\n2440\n27C0\n5C60\n8FE0\nENDCHAR\nSTARTCHAR U_904A\nENCODING 36938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n24E0\n3F00\n08E0\nEE40\n2BE0\n2A40\n2A40\n36C0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_904B\nENCODING 36939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2920\n2FE0\n0540\nE7C0\n2540\n27C0\n2100\n2FE0\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_904C\nENCODING 36940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0EE0\nCAA0\n4EE0\n0000\nC7C0\n4000\n4FE0\n4200\n4380\n6080\n9FE0\nENDCHAR\nSTARTCHAR U_904D\nENCODING 36941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n2820\n0FE0\nE800\n2FE0\n3AA0\n2FE0\n2AA0\n5820\n8FE0\nENDCHAR\nSTARTCHAR U_904E\nENCODING 36942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n2740\n0540\nEFE0\n2820\n2BA0\n2AA0\n2BA0\n5860\n8FE0\nENDCHAR\nSTARTCHAR U_904F\nENCODING 36943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n27C0\n0440\nE7E0\n2920\n3AA0\n2820\n2FA0\n5040\n8FE0\nENDCHAR\nSTARTCHAR U_9050\nENCODING 36944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2A20\n2EE0\n0800\nEEE0\n28A0\n2F40\n28A0\n2920\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9051\nENCODING 36945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n2440\n07C0\nE440\n2FE0\n2100\n27C0\n2100\n57E0\n8FE0\nENDCHAR\nSTARTCHAR U_9052\nENCODING 36946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n2FE0\n2280\n0FE0\nEAA0\n2CE0\n2BA0\n2820\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9053\nENCODING 36947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n2280\n2FE0\n0100\nE7C0\n2440\n27C0\n2440\n27C0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9054\nENCODING 36948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n2100\n0FE0\nE280\n2FE0\n2100\n2FE0\n2100\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_9055\nENCODING 36949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2240\n2FE0\n0440\nE7C0\n2100\n27E0\n2500\n2FE0\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_9056\nENCODING 36950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n9FE0\n4400\n1FC0\nD540\n5FC0\n5240\n5FC0\n5240\n72C0\n9FE0\nENDCHAR\nSTARTCHAR U_9057\nENCODING 36951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FC0\n2940\n1FE0\nE000\n2FC0\n2940\n2940\n2280\n5440\n8FE0\nENDCHAR\nSTARTCHAR U_9058\nENCODING 36952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n2280\n0FE0\nE540\n27C0\n2540\n2FE0\n2440\n54C0\n8FE0\nENDCHAR\nSTARTCHAR U_9059\nENCODING 36953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2440\n2A80\n0500\nEFE0\n2500\n2FE0\n2540\n27C0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_905A\nENCODING 36954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0AC0\n5240\n5AC0\n1240\nDFC0\n4200\n5F80\n4500\n4200\n6D80\n9FE0\nENDCHAR\nSTARTCHAR U_905B\nENCODING 36955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n28A0\n2AA0\n0D60\nEFE0\n2920\n2FE0\n2920\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_905C\nENCODING 36956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E80\n2540\n26A0\n09C0\nEAA0\n3FE0\n2880\n2AC0\n3CA0\n6100\n9FE0\nENDCHAR\nSTARTCHAR U_905D\nENCODING 36957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\n2FE0\n0100\nE540\n2920\n2580\n2940\n2120\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_905E\nENCODING 36958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2880\n2BE0\n0AA0\nEBC0\n2AA0\n2AE0\n3540\n2940\n5220\n8FE0\nENDCHAR\nSTARTCHAR U_905F\nENCODING 36959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n4840\n0FC0\nC900\n4FC0\n4A80\n57E0\n5100\n57C0\n6100\n9FE0\nENDCHAR\nSTARTCHAR U_9060\nENCODING 36960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n2100\n0FE0\nE440\n27C0\n2320\n26C0\n2A40\n5220\n8FE0\nENDCHAR\nSTARTCHAR U_9061\nENCODING 36961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA2E0\n54A0\n7EE0\n08A0\nEAE0\n6AA0\n7EA0\n48A0\n5140\n7000\n9FE0\nENDCHAR\nSTARTCHAR U_9062\nENCODING 36962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\n27C0\n0440\nEFE0\n2AA0\n2660\n2AA0\n3320\n5660\n8FE0\nENDCHAR\nSTARTCHAR U_9063\nENCODING 36963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n2540\n1FE0\nE7C0\n2440\n27E0\n2420\n27E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9064\nENCODING 36964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2900\n0FC0\n0900\nEFC0\n2900\n2FE0\n2AA0\n2D60\n5020\n8FE0\nENDCHAR\nSTARTCHAR U_9065\nENCODING 36965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40E0\n2F20\n2540\n07E0\nE900\n3FE0\n2100\n2920\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9066\nENCODING 36966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nCA40\n5FE0\n0A40\nCFC0\n4000\n4FC0\n4940\n4FC0\n6480\n9FE0\nENDCHAR\nSTARTCHAR U_9067\nENCODING 36967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FC0\n2280\n0100\nEFE0\n2440\n27C0\n2440\n2FE0\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_9068\nENCODING 36968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F80\n2480\n2EE0\n04A0\nFFA0\n28A0\n2EA0\n2A40\n2AA0\n5320\n8FE0\nENDCHAR\nSTARTCHAR U_9069\nENCODING 36969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n2280\n0FE0\nE920\n2FE0\n2AA0\n2BA0\n2860\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_906A\nENCODING 36970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n8FC0\n4480\n0B40\nDFE0\n4A80\n5560\n4A80\n4500\n6200\n9FE0\nENDCHAR\nSTARTCHAR U_906B\nENCODING 36971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n3F80\n24E0\n1FA0\nF5A0\n3FA0\n24A0\n2E40\n34A0\n5520\n8FE0\nENDCHAR\nSTARTCHAR U_906C\nENCODING 36972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\n9E80\n44E0\n5F20\n1540\nFF40\n2440\n2C40\n36A0\n6520\n9FE0\nENDCHAR\nSTARTCHAR U_906D\nENCODING 36973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8500\n7FE0\n5540\n1FC0\nD540\n5FC0\n4880\n4F80\n4880\nAF80\n9FE0\nENDCHAR\nSTARTCHAR U_906E\nENCODING 36974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n2A40\n0FE0\nEA40\n2BC0\n2800\n3540\n2AA0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_906F\nENCODING 36975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n5480\n5520\n1EC0\nD580\n5680\n5DC0\n56A0\n57A0\nAD00\n9FE0\nENDCHAR\nSTARTCHAR U_9070\nENCODING 36976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AA0\n3FE0\n2AA0\n13A0\nEFE0\n2920\n27C0\n2540\n25C0\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_9071\nENCODING 36977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8200\n4FC0\n4A40\n1FE0\n0A40\nCFC0\n4200\n5FE0\n4480\n6300\n9FE0\nENDCHAR\nSTARTCHAR U_9072\nENCODING 36978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n2FE0\n0AA0\nE9C0\n2AA0\n2BE0\n2A80\n37E0\n5080\n8FE0\nENDCHAR\nSTARTCHAR U_9073\nENCODING 36979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n3FE0\n2440\n0540\nEBA0\n2100\n27C0\n2100\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9074\nENCODING 36980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n2540\n2FE0\n0540\nE920\n26E0\n2B40\n35E0\n2840\n5040\n8FE0\nENDCHAR\nSTARTCHAR U_9075\nENCODING 36981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n2FE0\n2280\n0FE0\nEAA0\n2FE0\n28A0\n3FE0\n2280\n5080\n8FE0\nENDCHAR\nSTARTCHAR U_9076\nENCODING 36982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n2100\n0FE0\nE440\n2FE0\n2440\n2FE0\n2280\n54E0\n8FE0\nENDCHAR\nSTARTCHAR U_9077\nENCODING 36983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2280\n2FE0\n0AA0\nFFE0\n2440\n2FA0\n24A0\n27E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9078\nENCODING 36984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n2EE0\n0880\nEAA0\n2FE0\n2280\n2FE0\n2240\n5420\n8FE0\nENDCHAR\nSTARTCHAR U_9079\nENCODING 36985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\n2280\n2FE0\n02A0\nE480\n2FE0\n2AA0\n2C60\n2BA0\n5AA0\n87E0\nENDCHAR\nSTARTCHAR U_907A\nENCODING 36986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\n2540\n0FE0\nE440\n27C0\n2440\n27C0\n2280\n5440\n8FE0\nENDCHAR\nSTARTCHAR U_907B\nENCODING 36987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2AA0\n2EE0\n0280\nEFE0\n2540\n2540\n27C0\n2200\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_907C\nENCODING 36988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FE0\n2AA0\n07C0\nEC60\n37C0\n2440\n27C0\n2940\n5320\n8FE0\nENDCHAR\nSTARTCHAR U_907D\nENCODING 36989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n2200\n2FE0\n0A20\nEFE0\n2D40\n2A80\n2DC0\n32A0\n5480\n8FE0\nENDCHAR\nSTARTCHAR U_907E\nENCODING 36990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2EE0\n3540\n0FE0\nE100\n2540\n2BA0\n2100\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_907F\nENCODING 36991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9C80\n57E0\n1540\n1C80\nD3E0\n5C80\n77E0\n5480\n5C80\nA080\n9FE0\nENDCHAR\nSTARTCHAR U_9080\nENCODING 36992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n5E80\n52E0\n1FA0\nD2A0\n7FA0\n48A0\n4E40\n52A0\nA520\n9FE0\nENDCHAR\nSTARTCHAR U_9081\nENCODING 36993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2FE0\n2540\n07C0\nE540\n2FE0\n2960\n2FE0\n2820\n5060\n8FE0\nENDCHAR\nSTARTCHAR U_9082\nENCODING 36994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n4AA0\n5FA0\n1540\nDF40\n55E0\n5F40\n55E0\n5540\nB340\n8FE0\nENDCHAR\nSTARTCHAR U_9083\nENCODING 36995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\n2AA0\n0440\nEFE0\n2500\n2AA0\n25C0\n2AA0\n5500\n8FE0\nENDCHAR\nSTARTCHAR U_9084\nENCODING 36996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FC0\n5540\n5FC0\n0000\nFFE0\n2880\n2FA0\n2740\n2A80\n5240\n8FE0\nENDCHAR\nSTARTCHAR U_9085\nENCODING 36997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n5FE0\n4BA0\n0820\nEFE0\n2440\n27C0\n2440\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9086\nENCODING 36998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F40\n2AA0\n27C0\n0820\nE7C0\n2440\n27C0\n2280\n2FE0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_9087\nENCODING 36999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n4540\n4FE0\n1920\nEDA0\n2B60\n2DA0\n2B60\n2DA0\n5920\n8FE0\nENDCHAR\nSTARTCHAR U_9088\nENCODING 37000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4C80\n35E0\n2B20\n0DE0\nF720\n2BE0\n3680\n2AA0\n3360\n5400\n8FE0\nENDCHAR\nSTARTCHAR U_9089\nENCODING 37001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nCFC0\n4840\n0FC0\nC840\n5FE0\n54A0\n4FC0\n54A0\n6480\n9FE0\nENDCHAR\nSTARTCHAR U_908A\nENCODING 37002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n2FC0\n2840\n1FE0\nF4A0\n2940\n3FE0\n2200\n27C0\n58C0\n8FE0\nENDCHAR\nSTARTCHAR U_908B\nENCODING 37003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n2A80\n2540\n0FE0\nEAA0\n2FE0\n2DC0\n2B40\n2DC0\n5320\n8FE0\nENDCHAR\nSTARTCHAR U_908C\nENCODING 37004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9E80\n44E0\n5F60\n0EA0\nD520\n4740\n4A80\n7AE0\n4700\n6A80\n9FE0\nENDCHAR\nSTARTCHAR U_908D\nENCODING 37005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n87C0\n5C80\n47C0\n1D60\nE7C0\n2040\n3FE0\n2540\n2380\n5540\n8FE0\nENDCHAR\nSTARTCHAR U_908E\nENCODING 37006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8860\n4D80\n5480\n0940\nDF80\n6120\n5FE0\n5480\n5DC0\n62A0\n9FE0\nENDCHAR\nSTARTCHAR U_908F\nENCODING 37007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2AA0\n2FE0\n0440\nEBE0\n3D40\n25E0\n2940\n2FE0\n5500\n8FE0\nENDCHAR\nSTARTCHAR U_9090\nENCODING 37008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n2000\n2EE0\n0AA0\nEFE0\n2AA0\n2FE0\n2C80\n27E0\n5480\n8FE0\nENDCHAR\nSTARTCHAR U_9091\nENCODING 37009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F00\n2100\n3F00\n0000\n7F80\n4480\n7F80\n4000\n4040\n4040\n3FC0\nENDCHAR\nSTARTCHAR U_9092\nENCODING 37010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1220\n1240\n1280\n1280\n1240\n1220\n1220\n12A0\n5240\n2200\nENDCHAR\nSTARTCHAR U_9093\nENCODING 37011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n03E0\nFA20\n0A40\n8A40\n4A80\n3240\n1220\n2A20\n4AA0\n8240\n0200\nENDCHAR\nSTARTCHAR U_9094\nENCODING 37012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n0520\n0540\n0540\n7D80\n4140\n4120\n4520\n49A0\n5140\n6100\nENDCHAR\nSTARTCHAR U_9095\nENCODING 37013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n2480\n1240\n3F80\n2080\n7FC0\n4440\n7FC0\n4020\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_9096\nENCODING 37014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\n2240\nAA80\nAA80\nAA40\nAA20\nAA20\nFAA0\n0240\n0200\nENDCHAR\nSTARTCHAR U_9097\nENCODING 37015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n1120\n1140\n1140\nFF80\n1140\n1120\n1120\n11A0\n1140\n1100\nENDCHAR\nSTARTCHAR U_9098\nENCODING 37016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n1120\n1140\n1140\nFD80\n1140\n1120\n1120\n11A0\n5140\n2100\nENDCHAR\nSTARTCHAR U_9099\nENCODING 37017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n1120\nFF40\n4140\n4180\n4140\n4120\n4120\n41A0\n7D40\n0100\nENDCHAR\nSTARTCHAR U_909A\nENCODING 37018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n1120\nFF20\n2540\n2580\n4540\n2920\n1120\n19A0\n2540\nC100\nENDCHAR\nSTARTCHAR U_909B\nENCODING 37019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2220\n2240\n2240\n2280\n2240\n2220\n3A20\nE2A0\n0240\n0200\nENDCHAR\nSTARTCHAR U_909C\nENCODING 37020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n23E0\n3E40\n4A80\n6A80\n9A40\n1220\n1220\n22A0\n4240\n8200\nENDCHAR\nSTARTCHAR U_909D\nENCODING 37021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n1120\n7F40\n4140\n4180\n4140\n4120\n4120\n41A0\n8140\n8100\nENDCHAR\nSTARTCHAR U_909E\nENCODING 37022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n1120\n7D40\n1140\n1180\n7F40\n1120\n1920\n25A0\n4540\n8100\nENDCHAR\nSTARTCHAR U_909F\nENCODING 37023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFF20\n0140\n3D40\n2580\n2540\n2520\n2520\n27A0\n4540\n8100\nENDCHAR\nSTARTCHAR U_90A0\nENCODING 37024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\n2520\n4340\n8140\n7D80\n1540\n1520\n1520\n25A0\n5540\n8900\nENDCHAR\nSTARTCHAR U_90A1\nENCODING 37025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n1120\nFF40\n2140\n3D80\n2540\n2520\n2520\n45A0\n5540\n8900\nENDCHAR\nSTARTCHAR U_90A2\nENCODING 37026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n2920\n2940\n2940\nFF80\n2940\n2920\n2920\n29E0\n4940\n8900\nENDCHAR\nSTARTCHAR U_90A3\nENCODING 37027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n2520\n2540\nFD40\n2540\n2520\nFD20\n25A0\n2540\n4500\n8D00\nENDCHAR\nSTARTCHAR U_90A4\nENCODING 37028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\n63E0\n4240\n7E80\n4A80\n4A40\n4A20\n4A20\n4AA0\n8A40\n8A00\nENDCHAR\nSTARTCHAR U_90A5\nENCODING 37029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n1120\n7F40\n5540\n1180\n1940\n2920\n2920\n2BA0\n4D40\n8900\nENDCHAR\nSTARTCHAR U_90A6\nENCODING 37030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n7D20\n1140\n1140\n7D80\n1140\nFF20\n1120\n11A0\n2140\nC100\nENDCHAR\nSTARTCHAR U_90A7\nENCODING 37031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n0120\n0140\nFF40\n2980\n2940\n2920\n2B20\n2DE0\n4940\n8100\nENDCHAR\nSTARTCHAR U_90A8\nENCODING 37032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n11E0\nFF20\n1140\n5580\n5540\n7D20\n11A0\n1540\n1900\n0100\nENDCHAR\nSTARTCHAR U_90A9\nENCODING 37033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n13E0\n1240\n5680\n5A80\n9240\n1220\n2AA0\n2640\n4200\n8200\nENDCHAR\nSTARTCHAR U_90AA\nENCODING 37034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n0920\n2940\n4940\n7D80\n0940\n1920\n2920\n49A0\nA940\n1100\nENDCHAR\nSTARTCHAR U_90AB\nENCODING 37035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\nFC40\n27C0\n7800\n27C0\nFD40\n27C0\n2400\n4420\n83E0\nENDCHAR\nSTARTCHAR U_90AC\nENCODING 37036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n7D20\n4540\n4540\n5980\n4140\n7D20\n0520\n35A0\nC540\n1900\nENDCHAR\nSTARTCHAR U_90AD\nENCODING 37037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7DE0\n8540\n7580\n5540\n5520\n7520\n05A0\n3540\n0900\n0100\nENDCHAR\nSTARTCHAR U_90AE\nENCODING 37038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2220\nFA40\nAA40\nAA80\nFA40\nAA20\nAA20\nFAA0\n8A40\n0200\nENDCHAR\nSTARTCHAR U_90AF\nENCODING 37039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n2520\nFF40\n2540\n2580\n3D40\n2520\n2520\n25A0\n3D40\n2500\nENDCHAR\nSTARTCHAR U_90B0\nENCODING 37040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n2120\n4540\nFB40\n0180\n7D40\n4520\n4520\n45E0\n7D40\n4500\nENDCHAR\nSTARTCHAR U_90B1\nENCODING 37041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0DE0\n7120\n4140\n4140\n7F80\n4940\n4920\n4920\n5FA0\nE140\n0100\nENDCHAR\nSTARTCHAR U_90B2\nENCODING 37042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0D20\n0540\n2540\n2580\n6540\n6B20\nAB20\n35E0\n2540\nDD00\n0100\nENDCHAR\nSTARTCHAR U_90B3\nENCODING 37043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n01E0\nFD20\n1140\n1940\n3580\n5540\n9120\n1120\n1DA0\nE140\n4100\nENDCHAR\nSTARTCHAR U_90B4\nENCODING 37044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n2120\n2140\nFD40\nA580\nA540\nB520\nCD20\n85E0\n8540\n8D00\nENDCHAR\nSTARTCHAR U_90B5\nENCODING 37045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n2520\n2540\n2540\n5580\n8940\n7D20\n4520\n45A0\n7D40\n4500\nENDCHAR\nSTARTCHAR U_90B6\nENCODING 37046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\n2920\n2940\nEB40\n2D80\n2940\n2920\n2B20\nEDA0\n2940\n2100\nENDCHAR\nSTARTCHAR U_90B7\nENCODING 37047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n2120\n3940\n4980\n6940\n5920\n4920\n49A0\n6B40\n4700\n0100\nENDCHAR\nSTARTCHAR U_90B8\nENCODING 37048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n09E0\nF120\n9140\n9140\nFD80\n9140\n9120\nB520\nCDE0\nA540\n1100\nENDCHAR\nSTARTCHAR U_90B9\nENCODING 37049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n3D20\n4940\nBD40\n0580\n0540\n7D20\n0520\n05A0\n7D40\n0100\nENDCHAR\nSTARTCHAR U_90BA\nENCODING 37050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\n2920\nA940\nAB40\n6D80\n2940\n2920\n2920\n2FA0\nF140\n4100\nENDCHAR\nSTARTCHAR U_90BB\nENCODING 37051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n1920\n2540\n5340\n8980\n0140\n7F20\n0520\n29E0\n1140\n0900\nENDCHAR\nSTARTCHAR U_90BC\nENCODING 37052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n8120\nFD40\n9180\nFD40\n9120\nFD20\n81A0\nFD40\n0100\n0100\nENDCHAR\nSTARTCHAR U_90BD\nENCODING 37053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n7D20\n1140\n1140\nFF80\n1140\n7D20\n1120\n1FE0\nF140\n4100\nENDCHAR\nSTARTCHAR U_90BE\nENCODING 37054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n51E0\n5120\n7D20\n9140\nFF20\n1120\n3920\n55A0\n9340\n1100\n1100\nENDCHAR\nSTARTCHAR U_90BF\nENCODING 37055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n7D20\n1120\nFF40\n0980\nFF40\n8920\n4920\n09A0\n2940\n1100\nENDCHAR\nSTARTCHAR U_90C0\nENCODING 37056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n7F20\n2920\n4540\nBB80\n0140\nFF20\n2120\n3DA0\n0540\n1900\nENDCHAR\nSTARTCHAR U_90C1\nENCODING 37057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFF20\n2120\n3D40\n6580\nBD40\n2520\n3D20\n25A0\n2540\n2D00\nENDCHAR\nSTARTCHAR U_90C2\nENCODING 37058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFD20\n2120\n4940\n7980\n1140\n2920\nD120\n29A0\nC540\n0100\nENDCHAR\nSTARTCHAR U_90C3\nENCODING 37059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n2920\n4520\n8340\n7D80\n0140\n7D20\n4520\n45A0\n7D40\n4500\nENDCHAR\nSTARTCHAR U_90C4\nENCODING 37060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n1920\n1520\n6340\n1180\n7F40\n2120\n2920\n51A0\nA540\n3F00\nENDCHAR\nSTARTCHAR U_90C5\nENCODING 37061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n2120\n4920\nFD40\n1580\n1140\n7D20\n1120\n1DA0\nF140\n4100\nENDCHAR\nSTARTCHAR U_90C6\nENCODING 37062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n1120\nFF20\n1140\n7D80\n0140\n7D20\n4520\n45A0\n7D40\n0100\nENDCHAR\nSTARTCHAR U_90C7\nENCODING 37063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n7D20\n8520\n7540\n5580\n7540\n5520\n7520\n55A0\n0540\n1900\nENDCHAR\nSTARTCHAR U_90C8\nENCODING 37064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0DE0\nF120\n8120\nFD40\n8180\nBD40\nA520\nA520\nA5A0\nBD40\nA500\nENDCHAR\nSTARTCHAR U_90C9\nENCODING 37065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEDE0\n4920\n4920\n4940\nFF80\n4940\n4920\n4920\n49A0\n8940\n8900\nENDCHAR\nSTARTCHAR U_90CA\nENCODING 37066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n1120\nFF20\n2540\n4380\nA540\n1920\n0920\n15A0\n2340\nC100\nENDCHAR\nSTARTCHAR U_90CB\nENCODING 37067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n2120\n7D20\n4540\n7D80\n4540\n4520\n7D20\n45A0\n7D40\n4500\nENDCHAR\nSTARTCHAR U_90CC\nENCODING 37068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nF440\n27C0\nF800\n27C0\n2540\nF540\n27C0\n3400\nC420\n03E0\nENDCHAR\nSTARTCHAR U_90CD\nENCODING 37069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n3D20\n2520\n3540\n2D80\nFF40\n2520\n3520\n2DA0\n4540\n8D00\nENDCHAR\nSTARTCHAR U_90CE\nENCODING 37070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n7D20\n4520\n7D40\n4540\n7D20\n5120\n4920\n55A0\n6540\n0100\nENDCHAR\nSTARTCHAR U_90CF\nENCODING 37071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFF20\n1120\n9340\n5580\nFF40\n1120\n1120\n29A0\n4540\n8300\nENDCHAR\nSTARTCHAR U_90D0\nENCODING 37072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n2920\n4520\nBB40\n0180\nFD40\n2120\n2120\n49A0\nFD40\n0300\nENDCHAR\nSTARTCHAR U_90D1\nENCODING 37073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n29E0\n7D20\n1140\n1180\nFD40\n1120\n2920\n25A0\n4540\n8100\nENDCHAR\nSTARTCHAR U_90D2\nENCODING 37074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nF440\n97C0\nF000\n97C0\nF540\n8540\nA7C0\nB400\nD420\n83E0\nENDCHAR\nSTARTCHAR U_90D3\nENCODING 37075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n8520\n2120\nFD40\n5180\nFD40\n1120\n1D20\nF1A0\n1140\n1100\nENDCHAR\nSTARTCHAR U_90D4\nENCODING 37076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nC3E0\n5D20\n4520\n8540\nD780\n5540\n5520\nD520\n5FA0\nA140\n9F00\nENDCHAR\nSTARTCHAR U_90D5\nENCODING 37077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0DE0\n0B20\nFF20\n8940\nE980\nA940\nAB20\nAD20\nE9A0\n9540\nA300\nENDCHAR\nSTARTCHAR U_90D6\nENCODING 37078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0120\n7D20\n4540\n4580\n7D40\n0520\n4920\n2DA0\nF140\n4100\nENDCHAR\nSTARTCHAR U_90D7\nENCODING 37079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nCDE0\n3120\nCD20\n2140\nFF80\n5140\n7D20\nD520\n55A0\n5D40\n1100\nENDCHAR\nSTARTCHAR U_90D8\nENCODING 37080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\n4920\n4920\n7940\n0180\n0140\nFD20\n8520\n85A0\nFD40\n8500\nENDCHAR\nSTARTCHAR U_90D9\nENCODING 37081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n15E0\nFF20\n1120\nFD40\n9580\nFD40\n9520\nFD20\n95A0\n9540\n9D00\nENDCHAR\nSTARTCHAR U_90DA\nENCODING 37082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1120\n7D20\n2540\nFF80\n0140\n7D20\n4520\n45A0\n7D40\n4500\nENDCHAR\nSTARTCHAR U_90DB\nENCODING 37083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n09E0\nF520\nA520\n5940\nFD80\n0940\n1D20\nF120\n11A0\n5140\n2100\nENDCHAR\nSTARTCHAR U_90DC\nENCODING 37084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n51E0\n7D20\n9120\n1140\nFF80\n0140\n7D20\n4520\n45A0\n7D40\n4500\nENDCHAR\nSTARTCHAR U_90DD\nENCODING 37085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n7D20\n1120\nFF40\n2980\nAD40\nAB20\nA920\n29A0\n4940\n9900\nENDCHAR\nSTARTCHAR U_90DE\nENCODING 37086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA20\n8A20\nFA40\n8A80\nFA40\nAA20\n9220\nAB20\nCAC0\n0200\nENDCHAR\nSTARTCHAR U_90DF\nENCODING 37087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFF20\n1120\n5540\n5580\nBB40\n9120\n1120\n29A0\n4540\n8300\nENDCHAR\nSTARTCHAR U_90E0\nENCODING 37088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n1120\nFD20\n9540\nFD80\n9540\nFD20\n5120\n21A0\n5140\n8D00\nENDCHAR\nSTARTCHAR U_90E1\nENCODING 37089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n2520\nFF20\n2540\n7D80\n2140\n3D20\n6520\nA5A0\n3D40\n2500\nENDCHAR\nSTARTCHAR U_90E2\nENCODING 37090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9E0\n8920\n8920\nF940\n0180\nF940\n2120\nF920\n21A0\n3940\nC100\nENDCHAR\nSTARTCHAR U_90E3\nENCODING 37091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n7D20\n1120\nFF40\n8380\n7D40\n0920\nFD20\n11A0\n1140\n3100\nENDCHAR\nSTARTCHAR U_90E4\nENCODING 37092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\n4520\n8320\n1140\n2980\n4540\nFF20\n4520\n45A0\n7D40\n4500\nENDCHAR\nSTARTCHAR U_90E5\nENCODING 37093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4520\n4520\n7D40\n4580\n7D40\n4520\n7D20\n29A0\n4540\n8300\nENDCHAR\nSTARTCHAR U_90E6\nENCODING 37094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\n00A0\nFEA0\n92A0\n92C0\nDAA0\nB6A0\n92A0\n92E0\n9280\nB680\nENDCHAR\nSTARTCHAR U_90E7\nENCODING 37095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4520\n7D20\n0140\n7D80\n4540\n5520\n5520\n55A0\n2940\nC700\nENDCHAR\nSTARTCHAR U_90E8\nENCODING 37096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFF20\n4520\n2940\nFF80\n0140\n7D20\n4520\n45A0\n7D40\n4500\nENDCHAR\nSTARTCHAR U_90E9\nENCODING 37097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n3120\n4920\nFF40\n2180\n7D40\nC520\n7D20\n45A0\n7D40\n4500\nENDCHAR\nSTARTCHAR U_90EA\nENCODING 37098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\nFF20\n2520\nFF40\n2580\nFD40\n2120\nFF20\n49A0\n3140\nCD00\nENDCHAR\nSTARTCHAR U_90EB\nENCODING 37099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\nFD20\n9520\nFD40\n9580\nFD40\n2920\n4920\nFFA0\n0940\n0900\nENDCHAR\nSTARTCHAR U_90EC\nENCODING 37100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFF20\n1120\n7D40\n1180\nFF40\n4520\n7D20\n45A0\n7D40\n4500\nENDCHAR\nSTARTCHAR U_90ED\nENCODING 37101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nFFE0\n4520\n7D40\n0180\n7D40\n0920\n1F20\nF120\n11C0\n3100\nENDCHAR\nSTARTCHAR U_90EE\nENCODING 37102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\n92A0\nFEA0\n92A0\nFEC0\n82A0\nBAA0\nAAA0\nBAE0\n8280\n8680\nENDCHAR\nSTARTCHAR U_90EF\nENCODING 37103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n5320\n9520\n1140\n2980\nC740\n1120\n5520\n95A0\n2940\nC700\nENDCHAR\nSTARTCHAR U_90F0\nENCODING 37104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8E0\n50A0\n5FA0\n71C0\n55A0\n72A0\n56A0\nFDA0\n18E0\n1080\n1080\nENDCHAR\nSTARTCHAR U_90F1\nENCODING 37105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n2920\n7D20\n2940\n2980\nFF40\n2920\n2920\n29A0\n4940\n8900\nENDCHAR\nSTARTCHAR U_90F2\nENCODING 37106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFF20\n1120\n5540\n5580\nBB40\n1120\n3920\n55A0\n9340\n1100\nENDCHAR\nSTARTCHAR U_90F3\nENCODING 37107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n9D20\n8520\nDD40\n8580\nFD40\n5120\n5120\n55A0\n5940\n9100\nENDCHAR\nSTARTCHAR U_90F4\nENCODING 37108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n2520\nFF20\n2540\n3780\n6D40\nB520\nA520\n25A0\n2540\n2500\nENDCHAR\nSTARTCHAR U_90F5\nENCODING 37109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n05E0\n7920\n1120\nFF40\n5580\nFF40\n5520\nFF20\n11A0\n1D40\nE100\nENDCHAR\nSTARTCHAR U_90F6\nENCODING 37110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA20\n4BE0\n5000\nFBE0\n02A0\n7AA0\n4BE0\n4A00\n7A20\n49E0\nENDCHAR\nSTARTCHAR U_90F7\nENCODING 37111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n4EA0\n9AC0\nEAA0\n4EA0\n98A0\nEAA0\n2DE0\n4880\n8080\nENDCHAR\nSTARTCHAR U_90F8\nENCODING 37112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n2920\n7D20\n5540\n7D80\n5540\n7D20\n1120\nFFA0\n1140\n1100\nENDCHAR\nSTARTCHAR U_90F9\nENCODING 37113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4520\n7D20\n4540\n7D80\n4540\n7D20\n1520\nFFA0\n2940\nC700\nENDCHAR\nSTARTCHAR U_90FA\nENCODING 37114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n3D40\n4AA0\nD7C0\n2440\n57E0\nBD20\n4FE0\n3400\n2420\nC3E0\nENDCHAR\nSTARTCHAR U_90FB\nENCODING 37115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3DE0\nA520\nBD20\nA540\nBD80\nA540\nFF20\n5520\nA9A0\nA940\n5500\nENDCHAR\nSTARTCHAR U_90FC\nENCODING 37116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n7D20\n2520\nFF40\n4580\n7D40\n1120\nFD20\n51A0\n7F40\n1100\nENDCHAR\nSTARTCHAR U_90FD\nENCODING 37117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n7D20\n1540\nFF80\n2140\n3D20\n6520\nBD20\n25A0\n3D40\n2500\nENDCHAR\nSTARTCHAR U_90FE\nENCODING 37118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA520\nBD20\nA540\nBD80\n9140\nFF20\nA520\n99A0\nA540\nFF00\nENDCHAR\nSTARTCHAR U_90FF\nENCODING 37119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n5520\n7D20\n4140\n5D80\n5540\n5D20\n5520\n5DA0\n5540\n9D00\nENDCHAR\nSTARTCHAR U_9100\nENCODING 37120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\nFF20\n2520\n1140\nFF80\n2140\n7D20\nA520\n25A0\n3D40\n0100\nENDCHAR\nSTARTCHAR U_9101\nENCODING 37121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BE0\nED20\n2920\nEF40\n0180\n7D40\n4520\n7D20\n45A0\n7D40\n4D00\nENDCHAR\nSTARTCHAR U_9102\nENCODING 37122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nAB20\nEF20\n0140\n7D80\n0140\nFF20\n2120\n3DA0\n0540\n3900\nENDCHAR\nSTARTCHAR U_9103\nENCODING 37123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\n28A0\n44A0\nBAA0\n00C0\nE2A0\nAAA0\nEAA0\nAAA0\nEAC0\nA680\nENDCHAR\nSTARTCHAR U_9104\nENCODING 37124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2920\nFF20\nAB40\nAB80\nFF40\n1120\n7D20\n11A0\n1D40\nE100\nENDCHAR\nSTARTCHAR U_9105\nENCODING 37125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0DE0\nF120\n1120\nFD40\n9580\nFD40\n1120\nFD20\n95A0\nFD40\n8D00\nENDCHAR\nSTARTCHAR U_9106\nENCODING 37126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\n82A0\n10A0\nFEA0\n54C0\n7CA0\n54A0\n7CA0\n10E0\nFE80\n1080\nENDCHAR\nSTARTCHAR U_9107\nENCODING 37127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n22A0\n42A0\n5FA0\nC8C0\n5EA0\n44A0\n5FA0\n44A0\n4AE0\n5180\nENDCHAR\nSTARTCHAR U_9108\nENCODING 37128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFAE0\n95A0\n66A0\n42A0\nBDC0\n10A0\nFEA0\n10A0\n18A0\n24E0\nC280\nENDCHAR\nSTARTCHAR U_9109\nENCODING 37129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2EE0\n4AA0\n9EA0\nEAC0\n4EA0\n9CA0\nEAA0\n2DE0\n4880\n8080\nENDCHAR\nSTARTCHAR U_910A\nENCODING 37130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n5FE0\n9AA0\nEEC0\n4AA0\n9EA0\nEBA0\n2EA0\n52C0\n8280\n0280\nENDCHAR\nSTARTCHAR U_910B\nENCODING 37131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n31E0\nDD20\n9520\nFD40\n9580\nFD40\n1120\nFD20\n49A0\n3140\nCD00\nENDCHAR\nSTARTCHAR U_910C\nENCODING 37132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n7F20\n5120\n7D40\n5580\n7F40\n5520\n7D20\n65A0\nA540\n3D00\nENDCHAR\nSTARTCHAR U_910D\nENCODING 37133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8320\n7D20\n4540\n7D80\n4540\n7D20\n1120\nFFA0\n2940\nC700\nENDCHAR\nSTARTCHAR U_910E\nENCODING 37134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n7D20\n4520\n7D40\n4580\n7D40\n4520\n7D20\n2BA0\n6540\nBD00\nENDCHAR\nSTARTCHAR U_910F\nENCODING 37135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\n80A0\nBCA0\n80A0\nFEC0\nAAA0\nB4A0\nA6A0\nFEE0\nA480\n9C80\nENDCHAR\nSTARTCHAR U_9110\nENCODING 37136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFF20\n2920\n5540\nFB80\n0140\n7D20\n5520\n7DA0\n5540\n7D00\nENDCHAR\nSTARTCHAR U_9111\nENCODING 37137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2920\n6D20\n2940\nFF80\n0140\n7D20\n4520\n7DA0\n4540\n7D00\nENDCHAR\nSTARTCHAR U_9112\nENCODING 37138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n7D20\nD520\n7D40\n2580\n4940\n3D20\nD520\n7DA0\n2540\nC900\nENDCHAR\nSTARTCHAR U_9113\nENCODING 37139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n7D20\n4520\n7D40\n4580\n7D40\n1520\nFF20\n11A0\n2940\nC500\nENDCHAR\nSTARTCHAR U_9114\nENCODING 37140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\nF920\n8920\nF940\n8180\nFD40\n8120\nFD20\n55A0\nAD40\n0900\nENDCHAR\nSTARTCHAR U_9115\nENCODING 37141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n4EA0\nAAA0\nEEC0\n4AC0\nAEA0\nE8A0\n2EA0\n48E0\n4680\n8080\nENDCHAR\nSTARTCHAR U_9116\nENCODING 37142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4520\n7D20\n0140\n7D80\n4540\n7D20\n4520\n7DA0\n2940\n4500\nENDCHAR\nSTARTCHAR U_9117\nENCODING 37143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10E0\nFEA0\n24A0\n3CA0\n00C0\nFEA0\n82A0\nBAA0\nAAE0\nBA80\n8680\nENDCHAR\nSTARTCHAR U_9118\nENCODING 37144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n08E0\nFFA0\n8AA0\nFFA0\n8AC0\nFEA0\nAAA0\nBEA0\nAAE0\nBE80\nAE80\nENDCHAR\nSTARTCHAR U_9119\nENCODING 37145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CE0\n44A0\n7CA0\n10C0\nFEA0\n10A0\nFEA0\nAAA0\nBAE0\n8280\nFE80\nENDCHAR\nSTARTCHAR U_911A\nENCODING 37146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\nFF20\n2920\n7D40\n4580\n7D40\n4520\nFF20\n11A0\n2940\nC500\nENDCHAR\nSTARTCHAR U_911B\nENCODING 37147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n55E0\nA920\n5520\n7D40\n5580\n7D40\n5520\nFF20\n39A0\n5540\n9300\nENDCHAR\nSTARTCHAR U_911C\nENCODING 37148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n08E0\n7FA0\n54A0\n7F80\n54C0\n7FA0\n54A0\n5FA0\n54E0\n5D80\n9680\nENDCHAR\nSTARTCHAR U_911D\nENCODING 37149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n2520\nB540\n6D40\nB580\n5540\nAB20\n5520\n29E0\n1140\nE100\nENDCHAR\nSTARTCHAR U_911E\nENCODING 37150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\nFF20\n2920\n1140\n7D80\n5540\n7D20\n1120\n7DA0\n1140\nFD00\nENDCHAR\nSTARTCHAR U_911F\nENCODING 37151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFF20\n9520\nFD40\n9580\nFD40\n1520\nFF20\n49A0\n2940\n1900\nENDCHAR\nSTARTCHAR U_9120\nENCODING 37152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n1120\nFF40\nB540\n7D80\n0140\nFF20\n1120\n3DE0\n0540\n1900\nENDCHAR\nSTARTCHAR U_9121\nENCODING 37153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4520\n7D40\n4540\n7F80\n4140\n7F20\n1120\nFFA0\n5540\n9300\nENDCHAR\nSTARTCHAR U_9122\nENCODING 37154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\n10A0\n5EA0\n50A0\nFFC0\n40A0\n7EA0\n40A0\n7EE0\n5280\nAE80\nENDCHAR\nSTARTCHAR U_9123\nENCODING 37155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n7D20\n2940\nFF40\n4580\n7D40\n4520\n7D20\n11A0\nFF40\n1100\nENDCHAR\nSTARTCHAR U_9124\nENCODING 37156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4520\n7D40\n4540\nFF80\nAB40\nAB20\nFF20\n25A0\n1940\nE700\nENDCHAR\nSTARTCHAR U_9125\nENCODING 37157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n7D20\n4520\n7D40\n4580\n7F40\n4120\n7DA0\n0540\nA500\n0D00\nENDCHAR\nSTARTCHAR U_9126\nENCODING 37158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n7F20\nD540\n5540\nFF80\n5540\n5520\nFF20\n01A0\nAB40\nA900\nENDCHAR\nSTARTCHAR U_9127\nENCODING 37159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n5320\n2D20\n4540\nBB80\n0140\n7D20\n4520\n7DA0\n2940\nFF00\nENDCHAR\nSTARTCHAR U_9128\nENCODING 37160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\nFFE0\nB540\nEC80\nBF60\n2100\n7F80\n4480\n7FA0\n4020\n3FE0\nENDCHAR\nSTARTCHAR U_9129\nENCODING 37161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n0520\n7D20\n0540\nFD80\n5540\nFD20\n0520\nFFA0\n4540\n2D00\nENDCHAR\nSTARTCHAR U_912A\nENCODING 37162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n28E0\nFEA0\nAAA0\nFFA0\n49C0\nFFA0\n42A0\n7EA0\n42E0\n7E80\nC380\nENDCHAR\nSTARTCHAR U_912B\nENCODING 37163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n28A0\nFEA0\nAAA0\nFEC0\n00A0\n7CA0\n44A0\n7CE0\n4480\n7C80\nENDCHAR\nSTARTCHAR U_912C\nENCODING 37164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1DE0\nE520\nA920\nF940\n8980\nFD40\n8520\nFF20\n83A0\nAB40\n0D00\nENDCHAR\nSTARTCHAR U_912D\nENCODING 37165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\nFFA0\n28A0\n7EA0\n5AC0\n66A0\n5AA0\n42A0\nFFE0\n2480\nC380\nENDCHAR\nSTARTCHAR U_912E\nENCODING 37166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\nDEA0\nAAA0\nD2A0\n04C0\n7CA0\n44A0\n7CA0\n44E0\n7C80\nC680\nENDCHAR\nSTARTCHAR U_912F\nENCODING 37167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\nFF20\n1140\n7D40\n1180\nFF40\n2920\nFF20\n45A0\n4540\n7D00\nENDCHAR\nSTARTCHAR U_9130\nENCODING 37168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n93E0\n5520\nFF20\n5540\n9380\n4540\n7F20\n5520\nBFA0\n4540\n8500\nENDCHAR\nSTARTCHAR U_9131\nENCODING 37169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0DE0\nF320\n5540\nFF40\n5580\n9340\n7D20\n5520\n7DA0\n5540\n7D00\nENDCHAR\nSTARTCHAR U_9132\nENCODING 37170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEEE0\nAAA0\nFEA0\n54A0\n7CC0\n54A0\n7CA0\n10A0\nFEE0\n1080\n1080\nENDCHAR\nSTARTCHAR U_9133\nENCODING 37171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\nAAA0\nEEA0\n28A0\nEEC0\nAAA0\nEEA0\nAAA0\nEEE0\n2880\n1F80\nENDCHAR\nSTARTCHAR U_9134\nENCODING 37172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nABE0\n6D20\nFF20\n4940\nFF80\n1140\nFD20\n1120\nFFA0\n5540\n9300\nENDCHAR\nSTARTCHAR U_9135\nENCODING 37173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4520\n7D40\n0140\nEF80\nAB40\nEF20\n1120\nFFA0\n5540\n9300\nENDCHAR\nSTARTCHAR U_9136\nENCODING 37174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n2920\n7D40\n8340\nFF80\nAB40\nFF20\n4520\n7DA0\n4540\n7D00\nENDCHAR\nSTARTCHAR U_9137\nENCODING 37175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\nFF20\nAB20\nFF40\nA980\nFF40\n4520\n7D20\n49A0\n2D40\nF100\nENDCHAR\nSTARTCHAR U_9138\nENCODING 37176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\nFF20\n2920\nFF40\nAB80\nFF40\nA320\n3D20\n69A0\n1140\nE100\nENDCHAR\nSTARTCHAR U_9139\nENCODING 37177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9E0\n5720\n7B20\n5540\nFB80\n1140\nFF20\n5520\nB9A0\n5540\n9300\nENDCHAR\nSTARTCHAR U_913A\nENCODING 37178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n08E0\n7FA0\n54A0\n7FA0\n54C0\n7FA0\n4AA0\n7EA0\n4AE0\n7E80\nA280\nENDCHAR\nSTARTCHAR U_913B\nENCODING 37179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n44A0\nEFA0\n44A0\nAAC0\nFFA0\n4AA0\n7EA0\n5AE0\nFF80\n0880\nENDCHAR\nSTARTCHAR U_913C\nENCODING 37180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\nFD20\n2920\nFF40\n5580\nFF40\n5520\n55A0\n7D40\n4500\n8300\nENDCHAR\nSTARTCHAR U_913D\nENCODING 37181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7FE0\n6AA0\n7EA0\n48C0\n7FA0\n52A0\n6AE0\n5D80\n8880\n3E80\nENDCHAR\nSTARTCHAR U_913E\nENCODING 37182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\n44A0\n7CA0\n44A0\nFFC0\nA5A0\n52A0\nFEA0\n68E0\n1080\nEE80\nENDCHAR\nSTARTCHAR U_913F\nENCODING 37183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29E0\nFF20\n2940\nEF40\nAB80\nFF40\n5520\n7D20\n55A0\nFF40\n1100\nENDCHAR\nSTARTCHAR U_9140\nENCODING 37184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\nFFA0\n24A0\n3CA0\n45C0\nDEA0\n54A0\nDCA0\n47E0\nAA80\nAA80\nENDCHAR\nSTARTCHAR U_9141\nENCODING 37185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CE0\n88A0\n7EA0\n42A0\n7EC0\n49A0\n7FA0\nD2A0\n7EE0\n2A80\nCF80\nENDCHAR\nSTARTCHAR U_9142\nENCODING 37186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA800\nFFE0\n2920\nFF40\n5580\nAB40\n7D20\n45A0\n5560\n2900\nC500\nENDCHAR\nSTARTCHAR U_9143\nENCODING 37187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\n10A0\nFEA0\n92A0\n54C0\n92A0\n00A0\nFEA0\nAAE0\nAA80\nFE80\nENDCHAR\nSTARTCHAR U_9144\nENCODING 37188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n28A0\nEEA0\nAAA0\nEEC0\n48A0\nFFA0\n48A0\n7EE0\n4880\n7F80\nENDCHAR\nSTARTCHAR U_9145\nENCODING 37189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n92E0\nFEA0\n48A0\nFEA0\n48C0\nFEA0\nAAA0\nFEA0\nAAE0\nBA80\n8680\nENDCHAR\nSTARTCHAR U_9146\nENCODING 37190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAAE0\nFEA0\nAAA0\nFEA0\nAAC0\nFFA0\n44A0\n7CA0\n44E0\n2880\nFE80\nENDCHAR\nSTARTCHAR U_9147\nENCODING 37191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA4E0\nFFA0\n24A0\nFFA0\n4AC0\nFFA0\n42A0\n7EA0\n42E0\n7E80\n8180\nENDCHAR\nSTARTCHAR U_9148\nENCODING 37192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\nAAA0\nEEA0\nAAA0\nFEC0\nAAA0\nFEA0\nAAA0\nBCE0\nA880\nBE80\nENDCHAR\nSTARTCHAR U_9149\nENCODING 37193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0A00\n0A00\n7FC0\n4A40\n4A40\n71C0\n4040\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_914A\nENCODING 37194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n2840\n2840\nFE40\nAA40\nCE40\n8240\nFE40\n8240\nFE40\n82C0\nENDCHAR\nSTARTCHAR U_914B\nENCODING 37195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n0A00\nFFE0\n0A00\n7FC0\n4A40\n73C0\n4040\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_914C\nENCODING 37196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF00\n2900\n29E0\nFE20\nAA20\nCF20\n82A0\nFEA0\n8220\nFE20\n82C0\nENDCHAR\nSTARTCHAR U_914D\nENCODING 37197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5020\n5020\nF820\nABE0\nDA00\n8A00\nFA00\n8A20\nFA20\n8BE0\nENDCHAR\nSTARTCHAR U_914E\nENCODING 37198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC40\n5040\n53E0\nFC40\nB640\nDD40\n8540\nFC40\n8440\nFD40\n8480\nENDCHAR\nSTARTCHAR U_914F\nENCODING 37199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n5280\n52A0\nFAE0\nAFA0\nDAA0\n8AE0\nFA80\n8A20\nFA20\n89E0\nENDCHAR\nSTARTCHAR U_9150\nENCODING 37200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5080\n5080\nF880\nA880\nDFE0\n8880\nF880\n8880\nF880\n8880\nENDCHAR\nSTARTCHAR U_9151\nENCODING 37201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5080\nF880\nA880\nAFE0\nD880\n8880\nF880\n8880\nF880\n0180\nENDCHAR\nSTARTCHAR U_9152\nENCODING 37202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2280\n8280\n5FE0\n2AA0\n2CE0\n2820\nCFE0\n4820\n4FE0\n4820\nENDCHAR\nSTARTCHAR U_9153\nENCODING 37203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n1900\n2480\nDF60\n0200\nFFE0\n0A00\n7FC0\n4A40\n5140\n7FC0\nENDCHAR\nSTARTCHAR U_9154\nENCODING 37204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFF80\n5280\nFAA0\nAAA0\nFD60\n8900\nFFE0\n8900\nF900\n8900\nENDCHAR\nSTARTCHAR U_9155\nENCODING 37205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8E0\n5700\n5100\nF900\nAFE0\nD900\n8900\nFFE0\n8900\nF920\n88E0\nENDCHAR\nSTARTCHAR U_9156\nENCODING 37206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n5080\n53E0\nFAA0\nAC80\nD880\n8980\nF980\n8AA0\nFAA0\n8C60\nENDCHAR\nSTARTCHAR U_9157\nENCODING 37207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF840\n5140\n52A0\nFAA0\nAAA0\nDAA0\n8B60\nFB20\n8A20\nFBE0\n8A20\nENDCHAR\nSTARTCHAR U_9158\nENCODING 37208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n5240\n5240\nFA60\nAC00\nDFC0\n8A40\nF940\n8880\nF940\n8E20\nENDCHAR\nSTARTCHAR U_9159\nENCODING 37209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF840\n2240\nF940\nA840\nAA40\nD940\n8840\nFFE0\n8840\n8840\nF840\nENDCHAR\nSTARTCHAR U_915A\nENCODING 37210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n5280\n5240\nFA40\nAC20\nDBC0\n8940\nF940\n8A40\nFD40\n8880\nENDCHAR\nSTARTCHAR U_915B\nENCODING 37211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n5000\n5000\nFFE0\nAA80\nFA80\n8A80\nFA80\n8AA0\nFCA0\n8860\nENDCHAR\nSTARTCHAR U_915C\nENCODING 37212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n5100\nFFC0\nA900\nA900\nDFE0\n8900\nFA80\n8A80\nFC40\n8820\nENDCHAR\nSTARTCHAR U_915D\nENCODING 37213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF800\n53E0\n5000\nF800\nAFE0\nD900\n8900\nF940\n8A20\nFFE0\n8820\nENDCHAR\nSTARTCHAR U_915E\nENCODING 37214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n5100\n5100\nFFE0\nA900\nD900\n8900\nFA80\n8A80\n8D40\nF820\nENDCHAR\nSTARTCHAR U_915F\nENCODING 37215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n5080\n50E0\nF880\nA880\nDBE0\n8A20\nFA20\n8A20\n8BE0\nFA20\nENDCHAR\nSTARTCHAR U_9160\nENCODING 37216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5020\n5020\nFBA0\nAAA0\nDAA0\n8BA0\nF820\n8820\n8820\nF860\nENDCHAR\nSTARTCHAR U_9161\nENCODING 37217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n53E0\n5220\nF900\nA920\nA940\nD980\n8900\nF920\n8920\nF8E0\nENDCHAR\nSTARTCHAR U_9162\nENCODING 37218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n5100\n51E0\nFB00\nADE0\nA900\nD900\n89E0\nF900\n8900\nF900\nENDCHAR\nSTARTCHAR U_9163\nENCODING 37219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA40\n5240\n5240\nFFE0\nAA40\nDA40\n8BC0\n8A40\nFA40\n8A40\nFBC0\nENDCHAR\nSTARTCHAR U_9164\nENCODING 37220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n5080\n53E0\nF880\nA880\nDBE0\n8A20\nFA20\n8A20\nFBE0\n8A20\nENDCHAR\nSTARTCHAR U_9165\nENCODING 37221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF860\n5380\n5080\nF880\nAFE0\nD880\n89C0\nFAC0\n8CA0\nF8A0\n8880\nENDCHAR\nSTARTCHAR U_9166\nENCODING 37222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFAC0\n52A0\nFFE0\nA900\nA9E0\nDB20\n8D40\nF880\n8940\nFE20\nENDCHAR\nSTARTCHAR U_9167\nENCODING 37223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n5420\nF840\nAFE0\nF840\n8A40\nF940\n8840\nF840\n88C0\nENDCHAR\nSTARTCHAR U_9168\nENCODING 37224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CC0\n10A0\nFFE0\n2880\nFEA0\nAAA0\nEEA0\n8240\nFE40\n83A0\nFE20\nENDCHAR\nSTARTCHAR U_9169\nENCODING 37225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n51E0\n5220\nFD40\nA880\nD900\n8BE0\nFD20\n8920\nF9E0\n8920\nENDCHAR\nSTARTCHAR U_916A\nENCODING 37226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n51E0\n5340\nFC80\nA940\nDA20\n8FE0\nFA20\n8A20\nFBE0\n8A20\nENDCHAR\nSTARTCHAR U_916B\nENCODING 37227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF900\n5280\nFC40\nAFE0\nA900\nD900\n8BC0\nF900\n8900\nFFE0\nENDCHAR\nSTARTCHAR U_916C\nENCODING 37228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA20\n52A0\n52A0\nFAA0\nABE0\nDEA0\n8AA0\nFAA0\n8AA0\nFAA0\n8C20\nENDCHAR\nSTARTCHAR U_916D\nENCODING 37229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57E0\n5100\nFBE0\nAE20\nABE0\nDA20\n8BE0\nFA20\n8A20\nFA60\nENDCHAR\nSTARTCHAR U_916E\nENCODING 37230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5220\n53E0\nFA20\nABA0\nDAA0\n8AA0\nFBA0\n8A20\nFA20\n8A60\nENDCHAR\nSTARTCHAR U_916F\nENCODING 37231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n5260\n5380\nFA20\nA9E0\nD800\n8BE0\nFA20\n8BE0\nFA20\n8BE0\nENDCHAR\nSTARTCHAR U_9170\nENCODING 37232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n5280\n53E0\nFC80\nA880\nDFE0\n8940\nF940\n8940\nFA40\n8C60\nENDCHAR\nSTARTCHAR U_9171\nENCODING 37233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5200\n37C0\nDC80\n1300\nFFE0\n0A00\n7FC0\n4A40\n7FC0\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_9172\nENCODING 37234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5220\n5220\nFBE0\nA800\nABE0\nD880\n8BE0\nF880\n8880\nFFE0\nENDCHAR\nSTARTCHAR U_9173\nENCODING 37235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n5140\n5280\nF920\nABE0\nD800\n8BE0\nFA20\n8BE0\nFA20\n8A60\nENDCHAR\nSTARTCHAR U_9174\nENCODING 37236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF980\n5240\n5420\nFBE0\nA880\nDFE0\n8880\nFAC0\n8CA0\nF880\n8980\nENDCHAR\nSTARTCHAR U_9175\nENCODING 37237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57A0\n5140\nFFE0\nA900\nDFE0\n8A40\nFC80\n8FE0\nF880\n8980\nENDCHAR\nSTARTCHAR U_9176\nENCODING 37238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n53E0\n5400\nFFC0\nAD40\nDFE0\n8D40\nFD40\n8FE0\nF840\n8980\nENDCHAR\nSTARTCHAR U_9177\nENCODING 37239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n5280\n53E0\nFC80\nA880\nDBE0\n8800\nFBE0\n8A20\nFBE0\n8A20\nENDCHAR\nSTARTCHAR U_9178\nENCODING 37240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n5240\n57A0\nFA40\nAC20\nD9C0\n8940\nFB40\n8C80\nF940\n8A20\nENDCHAR\nSTARTCHAR U_9179\nENCODING 37241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF840\n57A0\n5520\nFAC0\nA840\nDFE0\n8A40\nF940\n8840\nF940\n8880\nENDCHAR\nSTARTCHAR U_917A\nENCODING 37242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8A0\n53E0\n5080\nFBE0\nAAA0\nDBE0\n8AA0\nFBE0\n8AA0\nFAA0\n8AE0\nENDCHAR\nSTARTCHAR U_917B\nENCODING 37243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0060\nFBA0\n2520\nFAC0\nA800\nABC0\nD880\n8FE0\nF880\n8880\nF980\nENDCHAR\nSTARTCHAR U_917C\nENCODING 37244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2100\nFA40\nAFE0\nA820\nDD40\n8D40\nFD40\n8D40\nF960\nENDCHAR\nSTARTCHAR U_917D\nENCODING 37245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5540\n5360\nF940\nABE0\nDA00\n8A00\nFA00\n8A00\nFA00\n8C00\nENDCHAR\nSTARTCHAR U_917E\nENCODING 37246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5000\n53E0\nFAA0\nAAA0\nDBA0\n8AE0\nFAA0\n8AA0\nFAA0\n8AE0\nENDCHAR\nSTARTCHAR U_917F\nENCODING 37247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n53C0\n5240\nFBC0\nAA40\nDBC0\n8AA0\nFAC0\n8A40\nFAA0\n8B20\nENDCHAR\nSTARTCHAR U_9180\nENCODING 37248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n5240\n57E0\nFA80\nABE0\nDA80\n8A80\nFBE0\n8A80\nFBE0\n8A00\nENDCHAR\nSTARTCHAR U_9181\nENCODING 37249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n5040\n53C0\nF840\nAFE0\nDCA0\n8AC0\nF980\n8AC0\nFCA0\n8980\nENDCHAR\nSTARTCHAR U_9182\nENCODING 37250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA40\n5240\n57E0\nFA40\nAA40\nDB40\n8EE0\nFB60\n8A40\nFA40\n8A40\nENDCHAR\nSTARTCHAR U_9183\nENCODING 37251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57E0\n5280\nFD40\nAFE0\nDD40\n8FC0\nFD40\n8FC0\nF920\n88E0\nENDCHAR\nSTARTCHAR U_9184\nENCODING 37252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n53E0\n5420\nFBA0\nAD20\nDFE0\n8920\nFD60\n8FE0\nF820\n88C0\nENDCHAR\nSTARTCHAR U_9185\nENCODING 37253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n57E0\n5220\nF940\nAFE0\nD800\n8BE0\nFA20\n8A20\nFBE0\n8A20\nENDCHAR\nSTARTCHAR U_9186\nENCODING 37254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n5240\n57C0\nF940\nA9A0\nDE60\n8A80\nFFE0\n8940\nF9A0\n8E60\nENDCHAR\nSTARTCHAR U_9187\nENCODING 37255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57E0\n5240\nFBC0\nA800\nDBE0\n8840\nFFE0\n8880\nF880\n8B80\nENDCHAR\nSTARTCHAR U_9188\nENCODING 37256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFD40\n2380\nFA80\nAC60\nA900\nDD40\n8B80\nF980\n8A60\nFC40\nENDCHAR\nSTARTCHAR U_9189\nENCODING 37257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57E0\n5240\nFA40\nADA0\nD880\n8880\nFFE0\n8880\nF880\n8880\nENDCHAR\nSTARTCHAR U_918A\nENCODING 37258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n55A0\n5240\nFDA0\nA800\nDFE0\n8DA0\nFDA0\n8A40\nFA40\n8DA0\nENDCHAR\nSTARTCHAR U_918B\nENCODING 37259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n5140\n57E0\nF940\nAFE0\nD800\n8BE0\nFA20\n8BE0\nFA20\n8BE0\nENDCHAR\nSTARTCHAR U_918C\nENCODING 37260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5220\n53E0\nFA20\nABE0\nDA80\n8BA0\nFAC0\n8A80\nFBA0\n8AE0\nENDCHAR\nSTARTCHAR U_918D\nENCODING 37261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n5240\n53C0\nFA40\nABC0\nD800\n8FE0\nF880\n8AE0\nFD80\n88E0\nENDCHAR\nSTARTCHAR U_918E\nENCODING 37262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n00C0\nF8A0\n27E0\nF880\nAF80\nA8A0\nDFA0\n89C0\nFFC0\n88A0\nF920\nENDCHAR\nSTARTCHAR U_918F\nENCODING 37263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF920\n53E0\n5140\nFFE0\nA900\nDBE0\n8E20\nFBE0\n8A20\nFBE0\n8A20\nENDCHAR\nSTARTCHAR U_9190\nENCODING 37264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFAE0\n52A0\n57A0\nFAE0\nAAA0\nDFA0\n8CE0\nFCA0\n8FA0\nF920\n8A60\nENDCHAR\nSTARTCHAR U_9191\nENCODING 37265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5120\n55C0\nFD00\nABE0\nDA40\n8BC0\nFA40\n8BC0\nFA40\n8AC0\nENDCHAR\nSTARTCHAR U_9192\nENCODING 37266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5220\n53E0\nFA20\nABE0\nDA80\n8BE0\nFC80\n8BE0\nF880\n8FE0\nENDCHAR\nSTARTCHAR U_9193\nENCODING 37267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n57E0\n5520\nF980\nAAA0\nDCE0\n8800\nFFE0\n8AA0\nFAA0\n8FE0\nENDCHAR\nSTARTCHAR U_9194\nENCODING 37268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D40\n1380\n7D00\n3A80\n5440\nFFE0\n0A00\n7FC0\n4A40\n5140\n7FC0\nENDCHAR\nSTARTCHAR U_9195\nENCODING 37269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFBE0\n2000\nF9C0\nA940\nA940\nDBE0\n8A20\nFBE0\n8A20\nFBE0\nENDCHAR\nSTARTCHAR U_9196\nENCODING 37270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n2240\nFBC0\nAA40\nABC0\nD800\n8FE0\nFAA0\n8AA0\nFAA0\n8FE0\nENDCHAR\nSTARTCHAR U_9197\nENCODING 37271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF7A0\n2540\nFA40\nAC20\nAFC0\nDA80\n8FC0\nFA80\n8AA0\nFC60\nENDCHAR\nSTARTCHAR U_9198\nENCODING 37272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n2100\nFFE0\nAA40\nAFE0\nD800\n8FE0\nFAA0\n8AA0\nFFE0\nENDCHAR\nSTARTCHAR U_9199\nENCODING 37273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF980\n56E0\n54A0\nFFE0\nACA0\nDFE0\n8880\nFFE0\n8A40\nF980\n8E60\nENDCHAR\nSTARTCHAR U_919A\nENCODING 37274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n55A0\n52C0\nFE80\nABE0\nDA80\n8AC0\nFBA0\n8A80\nFA80\n8DE0\nENDCHAR\nSTARTCHAR U_919B\nENCODING 37275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA40\n57E0\n5240\nF980\nAA40\nDC20\n8BE0\nF880\n8BE0\nF880\n8FE0\nENDCHAR\nSTARTCHAR U_919C\nENCODING 37276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57E0\n5520\nFFE0\nAD20\nDFE0\n8940\nF9A0\n8AE0\nFAA0\n8CE0\nENDCHAR\nSTARTCHAR U_919D\nENCODING 37277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n53E0\n5080\nFBE0\nA880\nDFE0\n8900\nFBE0\n8C80\nF880\n8FE0\nENDCHAR\nSTARTCHAR U_919E\nENCODING 37278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n52A0\n52A0\nFB60\nABE0\nA800\nDFE0\n8AA0\nFAA0\n8AA0\nFFE0\nENDCHAR\nSTARTCHAR U_919F\nENCODING 37279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n56A0\n5AC0\n2980\n4640\nFFE0\n8A20\n7FC0\n5240\n61C0\n4E40\n7FC0\nENDCHAR\nSTARTCHAR U_91A0\nENCODING 37280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n53E0\n52A0\nFFE0\nA880\nD940\n8A20\nFFE0\n8AA0\nFAA0\n8FE0\nENDCHAR\nSTARTCHAR U_91A1\nENCODING 37281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57E0\n55A0\nFA40\nABE0\nDD00\n89E0\nF900\n89E0\nF900\n8900\nENDCHAR\nSTARTCHAR U_91A2\nENCODING 37282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57E0\n5100\nFBC0\nAE40\nABC0\nD800\n8FE0\nFAA0\n8AA0\nFFE0\nENDCHAR\nSTARTCHAR U_91A3\nENCODING 37283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57E0\n5540\nFFE0\nAD40\nDFC0\n8D00\nFFC0\n8A40\nFBC0\n8A40\nENDCHAR\nSTARTCHAR U_91A4\nENCODING 37284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n5540\n3FE0\nD240\n11C0\n7FE0\n0A00\n7FC0\n4A40\n5140\n7FC0\nENDCHAR\nSTARTCHAR U_91A5\nENCODING 37285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5280\n57E0\nFAA0\nAFE0\nA800\nDBC0\n8800\nFFE0\n8AC0\nFDA0\nENDCHAR\nSTARTCHAR U_91A6\nENCODING 37286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n27C0\nFA40\nADA0\nAFE0\nDA40\n8D20\nFA80\n8940\nF880\n8B00\nENDCHAR\nSTARTCHAR U_91A7\nENCODING 37287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5200\n53C0\nFA40\nABC0\nDA00\n8BE0\nFAA0\n8BE0\nFA00\n8BE0\nENDCHAR\nSTARTCHAR U_91A8\nENCODING 37288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n53E0\n5360\nFAA0\nAB60\nDBE0\n8880\nFBE0\n8AA0\nFBE0\n8A20\nENDCHAR\nSTARTCHAR U_91A9\nENCODING 37289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nFA80\n2FE0\nFAA0\nAFE0\nAAA0\nDFE0\n8A40\nFBC0\n8A40\nFBC0\nENDCHAR\nSTARTCHAR U_91AA\nENCODING 37290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n55A0\n5360\nFCA0\nA980\nDA40\n8D20\nFA80\n8940\nF880\n8F00\nENDCHAR\nSTARTCHAR U_91AB\nENCODING 37291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\n9140\nFFE0\n9940\nA480\nFFE0\n4A40\n71C0\n4E40\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_91AC\nENCODING 37292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\n7540\n1D40\nF7E0\n5240\nFFE0\n4A40\n73C0\n5E40\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_91AD\nENCODING 37293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEA0\n52C0\n57E0\nFA40\nAFE0\nD900\n8FE0\nF900\n8FE0\nFA40\n8C20\nENDCHAR\nSTARTCHAR U_91AE\nENCODING 37294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n53E0\n5680\nFBE0\nAA80\nDBE0\n8A80\nFBE0\n8D40\nFAA0\n8AA0\nENDCHAR\nSTARTCHAR U_91AF\nENCODING 37295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57E0\n5240\nFFE0\nAB40\nDB40\n8D60\nF800\n8FE0\nFAA0\n8FE0\nENDCHAR\nSTARTCHAR U_91B0\nENCODING 37296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5280\n5FE0\nFAA0\nAFE0\nDA40\n8BC0\nFA40\n8FE0\nF880\n8880\nENDCHAR\nSTARTCHAR U_91B1\nENCODING 37297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF40\n55A0\n52C0\nFC40\nAEE0\nD920\n8FE0\nFCA0\n8E40\nFAA0\n8D20\nENDCHAR\nSTARTCHAR U_91B2\nENCODING 37298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n57E0\n52A0\nFFE0\nAAA0\nDFE0\n8800\nFFE0\n8AA0\nFA40\n8B20\nENDCHAR\nSTARTCHAR U_91B3\nENCODING 37299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n52A0\n56A0\nFFE0\nA880\nDFE0\n8A40\nFFE0\n8880\nFFE0\n8880\nENDCHAR\nSTARTCHAR U_91B4\nENCODING 37300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n57E0\n52A0\nFFE0\nAAA0\nDFE0\n8A40\nFBC0\n8A40\nF980\n8FE0\nENDCHAR\nSTARTCHAR U_91B5\nENCODING 37301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9C0\n5100\n57E0\nFD20\nAFC0\nDD20\n8FE0\nFD00\n8EA0\nFDC0\n8AA0\nENDCHAR\nSTARTCHAR U_91B6\nENCODING 37302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\nFA40\n2420\nFBC0\nA800\nAFE0\nDDA0\n8FE0\nFA40\n8A40\nFDA0\nENDCHAR\nSTARTCHAR U_91B7\nENCODING 37303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57E0\n5240\nFFE0\nAA40\nDBC0\n8A40\nFBC0\n8AA0\nFE40\n89C0\nENDCHAR\nSTARTCHAR U_91B8\nENCODING 37304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2440\nFAA0\nAFC0\nDA80\n8FE0\nFA80\n8EA0\nFB40\n8A20\nENDCHAR\nSTARTCHAR U_91B9\nENCODING 37305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5100\n57E0\nFD20\nABA0\nDD40\n8FE0\nF900\n8FE0\nFAA0\n8AA0\nENDCHAR\nSTARTCHAR U_91BA\nENCODING 37306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5100\n57E0\nFAA0\nAFE0\nD880\n8BE0\nF880\n8FE0\nF940\n8AA0\nENDCHAR\nSTARTCHAR U_91BB\nENCODING 37307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFC0\n2100\nFFE0\nA940\nD900\n8FE0\nF840\n8FE0\nFA40\n88C0\nENDCHAR\nSTARTCHAR U_91BC\nENCODING 37308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\n57E0\n5280\nFB80\nAA40\nDFE0\n8A40\nFFE0\n8800\nFAA0\n8AA0\nENDCHAR\nSTARTCHAR U_91BD\nENCODING 37309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5100\n57E0\nFD20\nAB40\nDD20\n8FE0\nFAA0\n8AA0\n8AA0\nFFE0\nENDCHAR\nSTARTCHAR U_91BE\nENCODING 37310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n57E0\n5540\nFFE0\nAD40\nDFE0\n8EA0\nFDC0\n8FE0\nF9C0\n8AA0\nENDCHAR\nSTARTCHAR U_91BF\nENCODING 37311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFE0\n2A40\nFFE0\nAAC0\nDD20\n8BC0\nFA40\n8FE0\nF540\n1920\nENDCHAR\nSTARTCHAR U_91C0\nENCODING 37312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57E0\n55A0\nFFE0\nAA80\nDFE0\n8A80\nFFE0\n8AA0\nFE40\n8B20\nENDCHAR\nSTARTCHAR U_91C1\nENCODING 37313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n5140\n7FC0\n5540\nFFE0\nAAA0\n3F80\n1080\n3F80\nC960\n3300\nENDCHAR\nSTARTCHAR U_91C2\nENCODING 37314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n52A0\n57E0\nFAA0\nAFE0\nD920\n8FE0\nF920\n8FA0\nFA20\n8D60\nENDCHAR\nSTARTCHAR U_91C3\nENCODING 37315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5000\n57E0\nFD20\nAFE0\nDAA0\n8FE0\nFAA0\n8BC0\nFAA0\n8BE0\nENDCHAR\nSTARTCHAR U_91C4\nENCODING 37316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nF7E0\n2540\nF7E0\nB540\nB760\nD400\n9760\nF540\n9760\nF940\nENDCHAR\nSTARTCHAR U_91C5\nENCODING 37317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\n5AA0\n5FE0\nFA80\nAFE0\nD920\n8F20\nF9A0\n8F40\nF940\n89A0\nENDCHAR\nSTARTCHAR U_91C6\nENCODING 37318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\n7C40\n2480\n1500\n7FE0\n0400\n0E00\n1500\n2480\nC460\n0400\nENDCHAR\nSTARTCHAR U_91C7\nENCODING 37319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\n7840\n2480\n1100\n0400\nFFE0\n0E00\n1500\n2480\n4460\n8420\nENDCHAR\nSTARTCHAR U_91C8\nENCODING 37320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\nEBC0\nAA40\n7240\nFBC0\n2300\n7280\nAA80\nA440\n2460\n2840\nENDCHAR\nSTARTCHAR U_91C9\nENCODING 37321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nE100\nA900\n77E0\nFD20\n6520\n77E0\nAD20\nA520\n27E0\n2420\nENDCHAR\nSTARTCHAR U_91CA\nENCODING 37322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\nE280\nA900\n7280\nFD60\n3100\n6FC0\nA100\nAFE0\n2100\n2100\nENDCHAR\nSTARTCHAR U_91CB\nENCODING 37323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2AA0\nAFE0\n7100\nFFE0\n2280\n77E0\n6900\nA7E0\nA100\n2100\nENDCHAR\nSTARTCHAR U_91CC\nENCODING 37324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n4440\n7FC0\n4440\n4440\n7FC0\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_91CD\nENCODING 37325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n2480\n3F80\n2480\n3F80\n0400\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_91CE\nENCODING 37326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA840\nF980\nA880\nAFE0\nF8A0\n2080\nF880\n2080\n3880\nC380\nENDCHAR\nSTARTCHAR U_91CF\nENCODING 37327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n2080\nFFE0\n2480\n3F80\n2480\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_91D0\nENCODING 37328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n23E0\nFC80\nA940\nFFE0\n5240\n5FC0\n5240\n5FC0\n8200\nBFE0\nENDCHAR\nSTARTCHAR U_91D1\nENCODING 37329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1100\n2080\nDF60\n0400\n7FC0\n0400\n2480\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_91D2\nENCODING 37330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n2800\n4400\nFE00\n1000\n7C00\n1000\n5400\n3800\n1C00\nE000\nENDCHAR\nSTARTCHAR U_91D3\nENCODING 37331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5100\n8900\n7900\n2100\nF900\n2100\nA900\n7120\n3920\nC0E0\nENDCHAR\nSTARTCHAR U_91D4\nENCODING 37332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n5020\n8840\nF840\n2080\nF880\n2100\nA900\n7220\n3A20\nC1E0\nENDCHAR\nSTARTCHAR U_91D5\nENCODING 37333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5040\n8880\n7880\n2080\nF880\n2080\nA880\n7080\n3A80\nC100\nENDCHAR\nSTARTCHAR U_91D6\nENCODING 37334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n2BE0\n44A0\nBCA0\n10A0\n7CA0\n1120\n5520\n3A20\n1AA0\n6440\nENDCHAR\nSTARTCHAR U_91D7\nENCODING 37335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n2820\n4520\nBD20\n1120\n7D20\n1120\n5520\n3920\n1C20\nE060\nENDCHAR\nSTARTCHAR U_91D8\nENCODING 37336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n57E0\n8880\n7880\n2080\nF880\n2080\nA880\n7080\n3880\nC380\nENDCHAR\nSTARTCHAR U_91D9\nENCODING 37337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5100\n8900\nFD80\n2140\nF920\n2120\nA900\n7100\n3900\nC100\nENDCHAR\nSTARTCHAR U_91DA\nENCODING 37338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n5200\n8F80\nFA80\n2280\nFA80\n2280\nAA80\n72A0\n34A0\nC860\nENDCHAR\nSTARTCHAR U_91DB\nENCODING 37339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2900\n4500\nBBE0\n1120\n7920\n1520\n5920\n3220\n1AA0\n6440\nENDCHAR\nSTARTCHAR U_91DC\nENCODING 37340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3180\n5240\n0C00\n1300\nE0E0\n3F80\n0400\n7FC0\n2480\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_91DD\nENCODING 37341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5080\n8880\n7880\n27E0\nF880\n2080\nA880\n7080\n3880\nC080\nENDCHAR\nSTARTCHAR U_91DE\nENCODING 37342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3100\n4900\nF100\n2100\nF900\n2280\nAA80\n7240\n3460\nC840\nENDCHAR\nSTARTCHAR U_91DF\nENCODING 37343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3280\n4A80\nF680\n2280\nFE80\n2280\nAA80\n7440\n3440\nC820\nENDCHAR\nSTARTCHAR U_91E0\nENCODING 37344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1380\n2A80\n4680\nFA80\n1280\n7A80\n1680\n5AA0\n34A0\nC860\nENDCHAR\nSTARTCHAR U_91E1\nENCODING 37345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n64C0\n0A40\n1100\n2080\nDF60\n0400\n1F00\n2480\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_91E2\nENCODING 37346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5240\n8A40\n7A80\n22E0\nFA20\n2220\nAA20\n7220\n3CA0\nE840\nENDCHAR\nSTARTCHAR U_91E3\nENCODING 37347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5100\n89E0\n7A20\n2420\nF920\n20A0\nA8A0\n7020\n3820\nC0C0\nENDCHAR\nSTARTCHAR U_91E4\nENCODING 37348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n5080\n8900\n7A20\n2040\nF880\n2300\nA820\n7040\n3880\nC300\nENDCHAR\nSTARTCHAR U_91E5\nENCODING 37349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n4880\nF880\n22C0\nFAA0\n24A0\nA8A0\n7080\n3A80\nC100\nENDCHAR\nSTARTCHAR U_91E6\nENCODING 37350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n33E0\n4A20\nFA20\n2220\nFA20\n2220\nAA20\n7220\n3BE0\nC220\nENDCHAR\nSTARTCHAR U_91E7\nENCODING 37351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n52A0\n8AA0\n7AA0\n22A0\nFAA0\n22A0\nAAA0\n72A0\n3C20\nE020\nENDCHAR\nSTARTCHAR U_91E8\nENCODING 37352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3040\n4880\nF880\n2080\nFFE0\n2080\nA880\n7080\n3880\nC380\nENDCHAR\nSTARTCHAR U_91E9\nENCODING 37353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\n3480\n4C80\nFC80\n2680\nFD80\n2480\nAC80\n74A0\n38A0\nD060\nENDCHAR\nSTARTCHAR U_91EA\nENCODING 37354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n3080\n4880\nF880\n27E0\nF880\n2080\nA880\n7080\n3A80\nC100\nENDCHAR\nSTARTCHAR U_91EB\nENCODING 37355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n3000\n4800\nFFE0\n2200\nFA00\n23E0\nA820\n7020\n3820\nC0C0\nENDCHAR\nSTARTCHAR U_91EC\nENCODING 37356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n33E0\n4880\nF880\n2080\nFFE0\n2080\nA880\n7080\n3880\nC080\nENDCHAR\nSTARTCHAR U_91ED\nENCODING 37357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n33E0\n4880\nF880\n2080\nFC80\n2080\nA880\n7080\n3880\nC7E0\nENDCHAR\nSTARTCHAR U_91EE\nENCODING 37358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n3040\n4840\nFFE0\n2040\nFCC0\n2140\nAA40\n7440\n3940\nC080\nENDCHAR\nSTARTCHAR U_91EF\nENCODING 37359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3080\n4FE0\nF200\n2200\nFA00\n2200\nAA00\n7200\n3A00\nC3E0\nENDCHAR\nSTARTCHAR U_91F0\nENCODING 37360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n33E0\n48A0\nF0A0\n22A0\nFAA0\n2120\nA920\n7220\n3AA0\nC440\nENDCHAR\nSTARTCHAR U_91F1\nENCODING 37361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n4880\nFBE0\n2080\nF880\n2080\nA880\n7140\n3A20\nE420\nENDCHAR\nSTARTCHAR U_91F2\nENCODING 37362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n33C0\n4A40\nFA40\n2240\nFBC0\n2200\nAA00\n7220\n3A20\nC1E0\nENDCHAR\nSTARTCHAR U_91F3\nENCODING 37363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n31E0\n4A00\nFC00\n23C0\nF880\n2100\nA900\n7220\n3A20\nC1E0\nENDCHAR\nSTARTCHAR U_91F4\nENCODING 37364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5140\n8920\n7BE0\n2100\nFD00\n2100\nA8A0\n70A0\n3860\nC020\nENDCHAR\nSTARTCHAR U_91F5\nENCODING 37365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n57E0\n8A20\n7B20\n22A0\nF940\n2140\nA880\n7140\n3A40\nC420\nENDCHAR\nSTARTCHAR U_91F6\nENCODING 37366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4D00\nFFC0\n2540\nFD40\n2540\nADC0\n7500\n3C20\nC3E0\nENDCHAR\nSTARTCHAR U_91F7\nENCODING 37367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5080\n8880\n7880\n23E0\nFC80\n2080\nA880\n7080\n3880\nC7E0\nENDCHAR\nSTARTCHAR U_91F8\nENCODING 37368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n49E0\nF920\n2220\nFD40\n2140\nA880\n7100\n3A00\nC400\nENDCHAR\nSTARTCHAR U_91F9\nENCODING 37369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5100\n8900\n7BE0\n2140\nFA40\n2240\nA940\n7080\n3940\nC620\nENDCHAR\nSTARTCHAR U_91FA\nENCODING 37370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n3300\n4900\nF100\n27E0\nF900\n2100\nA900\n7100\n3900\nC100\nENDCHAR\nSTARTCHAR U_91FB\nENCODING 37371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3200\n4A00\nF780\n2280\nFA80\n2680\nAA80\n73A0\n3CA0\nC060\nENDCHAR\nSTARTCHAR U_91FC\nENCODING 37372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n37C0\n4A40\nF240\n2640\nFA40\n2340\nAAC0\n7460\n3D40\nC080\nENDCHAR\nSTARTCHAR U_91FD\nENCODING 37373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n5740\n8D40\n7D40\n2540\nFD40\n2540\nAD40\n7520\n3920\nC920\nENDCHAR\nSTARTCHAR U_91FE\nENCODING 37374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n37C0\n4A80\nF480\n27E0\nF980\n2280\nAA80\n7480\n3A80\nC100\nENDCHAR\nSTARTCHAR U_91FF\nENCODING 37375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n5380\n8A00\n7A00\n23E0\nFA40\n2240\nAA40\n7240\n3440\nC840\nENDCHAR\nSTARTCHAR U_9200\nENCODING 37376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n37C0\n4D40\nF540\n2540\nFFC0\n2400\nAC00\n7420\n3C20\nC3E0\nENDCHAR\nSTARTCHAR U_9201\nENCODING 37377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5080\n8FE0\n7A00\n2200\nFBE0\n2220\nAA20\n7220\n3C20\nC8C0\nENDCHAR\nSTARTCHAR U_9202\nENCODING 37378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5100\n8FE0\n7D20\n2100\nF980\n2180\nAA80\n72A0\n3CA0\nC860\nENDCHAR\nSTARTCHAR U_9203\nENCODING 37379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3240\n4A40\nFA40\n27E0\nFA40\n2240\nAA40\n7240\n3C40\nC840\nENDCHAR\nSTARTCHAR U_9204\nENCODING 37380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n3240\n4940\nF840\n2240\nF940\n20E0\nAF40\n7040\n3840\nC040\nENDCHAR\nSTARTCHAR U_9205\nENCODING 37381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n5220\n8A20\n7BE0\n2220\nFA20\n23E0\nAA20\n7220\n3420\nC860\nENDCHAR\nSTARTCHAR U_9206\nENCODING 37382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5280\n8A40\n7A40\n2420\nF900\n2100\nAA00\n7240\n3C40\nC7E0\nENDCHAR\nSTARTCHAR U_9207\nENCODING 37383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n4BE0\nF880\n2080\nFFE0\n2080\nA940\n7140\n3A40\nC420\nENDCHAR\nSTARTCHAR U_9208\nENCODING 37384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n37E0\n4900\nF100\n2380\nFB40\n2520\nA920\n7100\n3900\nC100\nENDCHAR\nSTARTCHAR U_9209\nENCODING 37385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n57E0\nF520\n2520\nFD20\n25A0\nAE60\n7420\n3C20\nC460\nENDCHAR\nSTARTCHAR U_920A\nENCODING 37386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5080\n8880\n7200\n2240\nF220\n2A20\nBA00\n6A40\n3240\nC1C0\nENDCHAR\nSTARTCHAR U_920B\nENCODING 37387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3280\n4A80\nF2A0\n26A0\nFAC0\n2280\nAB80\n72A0\n3AA0\nC260\nENDCHAR\nSTARTCHAR U_920C\nENCODING 37388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4FC0\nF940\n2140\nFFE0\n2100\nA900\n7280\n3440\nC820\nENDCHAR\nSTARTCHAR U_920D\nENCODING 37389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n37E0\n4880\nFAA0\n22A0\nFAA0\n23E0\nA880\n70A0\n38A0\nC060\nENDCHAR\nSTARTCHAR U_920E\nENCODING 37390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n49E0\nF620\n2120\nF920\n22A0\nABA0\n7020\n38A0\nC040\nENDCHAR\nSTARTCHAR U_920F\nENCODING 37391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23A0\n30A0\n48A0\nFBA0\n2220\nFBA0\n20A0\nA8A0\n70A0\n3AA0\nC120\nENDCHAR\nSTARTCHAR U_9210\nENCODING 37392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n4940\nFA20\n2480\nF840\n23E0\nA840\n7040\n3880\nC080\nENDCHAR\nSTARTCHAR U_9211\nENCODING 37393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n3380\n4A00\nFA00\n23E0\nFA20\n2220\nAB40\n7280\n3540\nCA20\nENDCHAR\nSTARTCHAR U_9212\nENCODING 37394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3240\n4A40\nFA80\n22E0\nFA20\n2220\nAB40\n7280\n3540\nCA20\nENDCHAR\nSTARTCHAR U_9213\nENCODING 37395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n3700\n4900\nF100\n2100\nFFE0\n2100\nA900\n7100\n3900\nC7C0\nENDCHAR\nSTARTCHAR U_9214\nENCODING 37396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n4880\nFAC0\n22A0\nFC80\n20A0\nA840\n7080\n3900\nC600\nENDCHAR\nSTARTCHAR U_9215\nENCODING 37397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n3140\n4940\nF940\n2140\nFFC0\n2240\nAA40\n7240\n3A40\nC7E0\nENDCHAR\nSTARTCHAR U_9216\nENCODING 37398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3280\n4A40\nFA40\n2420\nFBC0\n2140\nA940\n7140\n3A40\nC4C0\nENDCHAR\nSTARTCHAR U_9217\nENCODING 37399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4A40\nFFE0\n2000\nFA80\n2280\nAA80\n72A0\n34A0\nC860\nENDCHAR\nSTARTCHAR U_9218\nENCODING 37400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4FE0\nF100\n2100\nFFC0\n2440\nAA80\n7100\n3AE0\nC440\nENDCHAR\nSTARTCHAR U_9219\nENCODING 37401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n49E0\nF900\n27C0\nFA40\n2240\nAA80\n7100\n3A80\nC460\nENDCHAR\nSTARTCHAR U_921A\nENCODING 37402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2480\n5480\nF4A0\n27C0\nFC80\n2480\nAC80\n75A0\n36A0\nC460\nENDCHAR\nSTARTCHAR U_921B\nENCODING 37403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3280\n4A40\nF7E0\n2200\nFA40\n2140\nA980\n71A0\n3A60\nC420\nENDCHAR\nSTARTCHAR U_921C\nENCODING 37404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4900\nFFE0\n2200\nFA80\n2280\nAD00\n7540\n3A20\nC7E0\nENDCHAR\nSTARTCHAR U_921D\nENCODING 37405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3500\n4D00\nF7C0\n2100\nF900\n27E0\nA900\n7100\n3900\nC100\nENDCHAR\nSTARTCHAR U_921E\nENCODING 37406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3200\n4BE0\nFC20\n2220\nF920\n20A0\nA920\n7620\n3820\nC0C0\nENDCHAR\nSTARTCHAR U_921F\nENCODING 37407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n37C0\n4940\nF140\n27C0\nFD00\n27E0\nA920\n71A0\n3940\nC100\nENDCHAR\nSTARTCHAR U_9220\nENCODING 37408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n3240\n4A40\nF240\n2420\nFBC0\n2240\nA980\n7180\n3A40\nC420\nENDCHAR\nSTARTCHAR U_9221\nENCODING 37409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n4880\nF7E0\n24A0\nFCA0\n27E0\nA880\n7080\n3880\nC080\nENDCHAR\nSTARTCHAR U_9222\nENCODING 37410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4900\nF7E0\n2100\nFB80\n2340\nAD20\n7100\n3900\nC100\nENDCHAR\nSTARTCHAR U_9223\nENCODING 37411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3080\n4880\nFAE0\n2280\nFA80\n23E0\nA820\n7020\n3820\nC0C0\nENDCHAR\nSTARTCHAR U_9224\nENCODING 37412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n3220\n4A20\nFA20\n2220\nFBE0\n2220\nAA20\n7220\n3BE0\nC220\nENDCHAR\nSTARTCHAR U_9225\nENCODING 37413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n4AA0\nFAA0\n22C0\nF880\n2080\nA940\n7140\n3A20\nC420\nENDCHAR\nSTARTCHAR U_9226\nENCODING 37414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4900\nFFE0\n2100\nF900\n2280\nAA80\n7540\n3540\nC820\nENDCHAR\nSTARTCHAR U_9227\nENCODING 37415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3100\n4FE0\nF800\n2380\nFA80\n2280\nAA80\n72A0\n34A0\nC8E0\nENDCHAR\nSTARTCHAR U_9228\nENCODING 37416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n33C0\n4800\nF000\n27C0\nFA80\n2280\nAA80\n7280\n3AA0\nC460\nENDCHAR\nSTARTCHAR U_9229\nENCODING 37417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3080\n4BE0\nF220\n23E0\nFA00\n2200\nAA00\n7200\n3C00\nC000\nENDCHAR\nSTARTCHAR U_922A\nENCODING 37418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n37E0\n4C00\nF5C0\n2540\nFD40\n25C0\nAD00\n7520\n3D20\nC0E0\nENDCHAR\nSTARTCHAR U_922B\nENCODING 37419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3100\n4FE0\nF440\n2440\nFA80\n2280\nA900\n7100\n3A80\nC460\nENDCHAR\nSTARTCHAR U_922C\nENCODING 37420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n33C0\n4A40\nF240\n23C0\nFA00\n2300\nB280\n6280\n3440\nC820\nENDCHAR\nSTARTCHAR U_922D\nENCODING 37421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1160\n5D80\n5120\n59E0\nE600\n1980\n6F60\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_922E\nENCODING 37422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n3220\n4A20\nFBE0\n2200\nFA80\n22A0\nAAC0\n72A0\n3AA0\nC4E0\nENDCHAR\nSTARTCHAR U_922F\nENCODING 37423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n4AA0\nF2A0\n22A0\nFBE0\n2080\nACA0\n74A0\n3CA0\nC7E0\nENDCHAR\nSTARTCHAR U_9230\nENCODING 37424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4FE0\nF900\n27E0\nFD20\n2520\nAD20\n7520\n3D60\nC100\nENDCHAR\nSTARTCHAR U_9231\nENCODING 37425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3420\n4FE0\nFC80\n2480\nFFE0\n2480\nAC80\n74A0\n3E60\nC420\nENDCHAR\nSTARTCHAR U_9232\nENCODING 37426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n3740\n4D40\nFD40\n2540\nFD40\n2540\nAD40\n7540\n35A0\nC960\nENDCHAR\nSTARTCHAR U_9233\nENCODING 37427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3040\n4840\nFF40\n2540\nFD40\n2740\nA840\n7040\n3940\nC080\nENDCHAR\nSTARTCHAR U_9234\nENCODING 37428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n4940\nFB20\n24A0\nF800\n23E0\nA840\n7180\n3880\nC040\nENDCHAR\nSTARTCHAR U_9235\nENCODING 37429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n37E0\n4900\nF7E0\n2520\nFD20\n26A0\nAE60\n7420\n3CA0\nC440\nENDCHAR\nSTARTCHAR U_9236\nENCODING 37430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n5240\nFA20\n27E0\nF800\n23E0\nAA20\n7220\n3A20\nC3E0\nENDCHAR\nSTARTCHAR U_9237\nENCODING 37431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n4880\nFBE0\n2080\nF880\n23E0\nAA20\n7220\n3A20\nC3E0\nENDCHAR\nSTARTCHAR U_9238\nENCODING 37432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n3240\n4FE0\nFA00\n2200\nFBC0\n2240\nAB40\n7480\n3540\nCA20\nENDCHAR\nSTARTCHAR U_9239\nENCODING 37433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n4FE0\nFCA0\n2480\nFFE0\n2520\nAD40\n7480\n3940\nCA20\nENDCHAR\nSTARTCHAR U_923A\nENCODING 37434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n3100\n4900\nF900\n2100\nFFC0\n2100\nA940\n7120\n3900\nCFE0\nENDCHAR\nSTARTCHAR U_923B\nENCODING 37435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n33C0\n4A40\nF240\n23C0\nFA00\n23E0\nAA20\n7220\n3BE0\nC220\nENDCHAR\nSTARTCHAR U_923C\nENCODING 37436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3200\n4FE0\nF200\n23C0\nFA00\n2200\nABE0\n7200\n3A00\nC200\nENDCHAR\nSTARTCHAR U_923D\nENCODING 37437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n37E0\n4900\nFA80\n27E0\nFAA0\n22A0\nAAA0\n72A0\n3AE0\nC080\nENDCHAR\nSTARTCHAR U_923E\nENCODING 37438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n4BE0\nFAA0\n22A0\nFAA0\n23E0\nAAA0\n72A0\n3BE0\nC220\nENDCHAR\nSTARTCHAR U_923F\nENCODING 37439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n53E0\n8AA0\n7AA0\n22A0\nFBE0\n22A0\nAAA0\n72A0\n3BE0\nC220\nENDCHAR\nSTARTCHAR U_9240\nENCODING 37440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n52A0\n8AA0\n7BE0\n22A0\nFAA0\n23E0\nAAA0\n7080\n3880\nE080\nENDCHAR\nSTARTCHAR U_9241\nENCODING 37441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4A80\nF4C0\n2120\nFE80\n2100\nAE40\n7080\n3900\nC600\nENDCHAR\nSTARTCHAR U_9242\nENCODING 37442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4FC0\nF540\n2540\nFFC0\n2500\nAB00\n7100\n3A80\nCC60\nENDCHAR\nSTARTCHAR U_9243\nENCODING 37443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3200\n4BC0\nF500\n2100\nFFE0\n2100\nAA80\n7280\n3C40\nC820\nENDCHAR\nSTARTCHAR U_9244\nENCODING 37444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3280\n4A80\nF7E0\n2080\nFFE0\n2080\nA940\n7140\n3A20\nC420\nENDCHAR\nSTARTCHAR U_9245\nENCODING 37445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n5200\n8A00\n7BE0\n2220\nFA20\n23E0\nAA20\n7200\n3A00\nE3E0\nENDCHAR\nSTARTCHAR U_9246\nENCODING 37446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5080\n88E0\n7880\n2080\nFBE0\n2220\nAA20\n7220\n3BE0\nE220\nENDCHAR\nSTARTCHAR U_9247\nENCODING 37447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n37E0\n4C00\nF100\n25C0\nFF40\n2540\nAD40\n7580\n3C20\nC3E0\nENDCHAR\nSTARTCHAR U_9248\nENCODING 37448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5080\n8FE0\n7C20\n2200\nFA40\n2280\nAB00\n7220\n3A20\nE1E0\nENDCHAR\nSTARTCHAR U_9249\nENCODING 37449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5080\n8FE0\n7900\n2240\nFB80\n2080\nA900\n7240\n3FA0\nE220\nENDCHAR\nSTARTCHAR U_924A\nENCODING 37450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5120\n8920\n7920\n22E0\nFC40\n23E0\nAA20\n7220\n3BE0\nE220\nENDCHAR\nSTARTCHAR U_924B\nENCODING 37451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n53E0\n8C20\n7BA0\n22A0\nFAA0\n23A0\nAA40\n7220\n3A20\nE1E0\nENDCHAR\nSTARTCHAR U_924C\nENCODING 37452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n53C0\n8880\n7BE0\n2080\nF980\n22C0\nACA0\n70A0\n3880\nE080\nENDCHAR\nSTARTCHAR U_924D\nENCODING 37453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n50A0\n8A20\n7A40\n2640\nFAC0\n22A0\nAB20\n7240\n3A40\nE5C0\nENDCHAR\nSTARTCHAR U_924E\nENCODING 37454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5280\n8A80\n7BE0\n2480\nF880\n23E0\nA880\n7080\n3880\nE7E0\nENDCHAR\nSTARTCHAR U_924F\nENCODING 37455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5240\n8A40\n7A40\n23C0\nFA40\n2240\nABC0\n7240\n3A40\nE7E0\nENDCHAR\nSTARTCHAR U_9250\nENCODING 37456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n57E0\n8880\n7900\n2100\nFBE0\n2520\nA920\n7120\n39E0\nE120\nENDCHAR\nSTARTCHAR U_9251\nENCODING 37457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5100\n8BE0\n7A20\n2220\nFBE0\n2220\nAA20\n7220\n3BE0\nE220\nENDCHAR\nSTARTCHAR U_9252\nENCODING 37458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5080\n8BE0\n7880\n2080\nF880\n23E0\nA880\n7080\n3880\nE7E0\nENDCHAR\nSTARTCHAR U_9253\nENCODING 37459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n5200\n8BE0\n7C80\n23E0\nFAA0\n22A0\nAAA0\n72E0\n3880\nE080\nENDCHAR\nSTARTCHAR U_9254\nENCODING 37460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5400\n8C80\n77E0\n26A0\nFEA0\n26A0\nAEE0\n7480\n3C80\nE7E0\nENDCHAR\nSTARTCHAR U_9255\nENCODING 37461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n37E0\n4C00\nF5C0\n2540\nFD40\n2540\nADC0\n7400\n3C00\nC7E0\nENDCHAR\nSTARTCHAR U_9256\nENCODING 37462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n51E0\n8B40\n7C80\n2140\nFA20\n2520\nA880\n7040\n3B00\nE0C0\nENDCHAR\nSTARTCHAR U_9257\nENCODING 37463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n5240\n8A40\n7FE0\n2240\nFA40\n23C0\nAA40\n7240\n3BC0\nE240\nENDCHAR\nSTARTCHAR U_9258\nENCODING 37464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n3280\n4FE0\nF2A0\n27E0\nFE80\n27E0\nAAA0\n72A0\n3AE0\nC480\nENDCHAR\nSTARTCHAR U_9259\nENCODING 37465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n33E0\n4A20\nF220\n2220\nFBE0\n2000\nA940\n7120\n3A20\nC420\nENDCHAR\nSTARTCHAR U_925A\nENCODING 37466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n5AE0\n8AA0\n7AA0\n2AA0\nFAA0\n2EA0\nB2A0\n62E0\n3480\nC880\nENDCHAR\nSTARTCHAR U_925B\nENCODING 37467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5240\n8A40\n7A40\n2460\nF800\n23E0\nAA20\n7220\n3BE0\nE220\nENDCHAR\nSTARTCHAR U_925C\nENCODING 37468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n3240\n4A40\nF7E0\n2440\nFE40\n2540\nAD40\n7440\n3D40\nC480\nENDCHAR\nSTARTCHAR U_925D\nENCODING 37469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3100\n4880\nF7E0\n2000\nFA20\n2120\nA940\n7140\n3800\nC7E0\nENDCHAR\nSTARTCHAR U_925E\nENCODING 37470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n50A0\n8FE0\n7C80\n24A0\nFCA0\n24A0\nACC0\n76A0\n3D60\nE220\nENDCHAR\nSTARTCHAR U_925F\nENCODING 37471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n37E0\n4880\nF500\n2100\nFB80\n2540\nA920\n7100\n3900\nC7E0\nENDCHAR\nSTARTCHAR U_9260\nENCODING 37472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5080\n8BE0\n7AA0\n22A0\nFAA0\n27E0\nA880\n7140\n3A20\nE420\nENDCHAR\nSTARTCHAR U_9261\nENCODING 37473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n52A0\n89C0\n7880\n23E0\nF880\n23E0\nA880\n7080\n3880\nE080\nENDCHAR\nSTARTCHAR U_9262\nENCODING 37474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4900\nF7C0\n2100\nFB80\n2540\nA940\n73A0\n3900\nC100\nENDCHAR\nSTARTCHAR U_9263\nENCODING 37475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5080\n8FE0\n7880\n2080\nFFE0\n2100\nA900\n7240\n3FA0\nE420\nENDCHAR\nSTARTCHAR U_9264\nENCODING 37476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n5200\n8BE0\n7C20\n23A0\nFAA0\n22A0\nABA0\n7020\n3920\nE0C0\nENDCHAR\nSTARTCHAR U_9265\nENCODING 37477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n3120\n4FE0\nF900\n2380\nFB80\n2540\nAD40\n7520\n3900\nE100\nENDCHAR\nSTARTCHAR U_9266\nENCODING 37478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n57E0\n8880\n7880\n2280\nFAE0\n2280\nAA80\n7280\n3A80\nE7E0\nENDCHAR\nSTARTCHAR U_9267\nENCODING 37479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5440\n8D40\n7D40\n27E0\nFC40\n2540\nAD40\n77E0\n3840\nE180\nENDCHAR\nSTARTCHAR U_9268\nENCODING 37480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3200\n4BE0\nF440\n2100\nF540\n2540\nA920\n7120\n3900\nC300\nENDCHAR\nSTARTCHAR U_9269\nENCODING 37481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4A80\nF460\n2100\nF540\n2540\nA920\n7120\n3900\nC300\nENDCHAR\nSTARTCHAR U_926A\nENCODING 37482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n3540\n4D40\nF540\n2FE0\nF540\n2540\nADC0\n7400\n3C00\nC7E0\nENDCHAR\nSTARTCHAR U_926B\nENCODING 37483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3400\n4CE0\nFFA0\n25A0\nF5A0\n25A0\nADA0\n75A0\n39E0\nCB00\nENDCHAR\nSTARTCHAR U_926C\nENCODING 37484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n5220\n8A20\n7BE0\n2220\nFA20\n23E0\nAA20\n7220\n3BE0\nE220\nENDCHAR\nSTARTCHAR U_926D\nENCODING 37485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n53E0\n8A20\n7A20\n23E0\nFA20\n2220\nABE0\n7220\n3800\nE7E0\nENDCHAR\nSTARTCHAR U_926E\nENCODING 37486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3080\n4FE0\nF4A0\n27E0\nFCA0\n27E0\nA880\n7080\n3880\nC080\nENDCHAR\nSTARTCHAR U_926F\nENCODING 37487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n5440\n8D40\n7CC0\n2440\nFC40\n2540\nAE40\n74C0\n3920\nE220\nENDCHAR\nSTARTCHAR U_9270\nENCODING 37488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5020\n8BA0\n7820\n23A0\nFAA0\n22A0\nABA0\n7020\n3820\nE0E0\nENDCHAR\nSTARTCHAR U_9271\nENCODING 37489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3080\n4FE0\nF400\n2480\nFC80\n2480\nAD00\n7540\n3BE0\nC820\nENDCHAR\nSTARTCHAR U_9272\nENCODING 37490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5100\n89E0\n7900\n27E0\nF900\n2100\nA980\n7140\n3920\nE100\nENDCHAR\nSTARTCHAR U_9273\nENCODING 37491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n3280\n4A80\nF6E0\n2280\nFA80\n2280\nAA80\n7680\n3AA0\nC260\nENDCHAR\nSTARTCHAR U_9274\nENCODING 37492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n93E0\n9500\n9480\n0A00\n3180\nDF60\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_9275\nENCODING 37493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4900\nF7C0\n2540\nFD40\n27C0\nA900\n7140\n39E0\nC620\nENDCHAR\nSTARTCHAR U_9276\nENCODING 37494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F20\n5A20\n8AA0\nFAA0\n4FA0\nFAA0\n4AA0\n5AA0\nEA20\n4A20\nF260\nENDCHAR\nSTARTCHAR U_9277\nENCODING 37495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3240\n4A40\nF7E0\n2240\nFA40\n27E0\nA800\n7240\n3A20\nC420\nENDCHAR\nSTARTCHAR U_9278\nENCODING 37496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5080\n8FE0\n7A40\n2420\nFA40\n2140\nA880\n7180\n3A40\nE420\nENDCHAR\nSTARTCHAR U_9279\nENCODING 37497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n51E0\n8A20\n7940\n2080\nFB80\n20E0\nAB20\n70A0\n3C40\nE380\nENDCHAR\nSTARTCHAR U_927A\nENCODING 37498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5240\n8A40\n7BC0\n2240\nFBC0\n2240\nAA60\n77C0\n3840\nE040\nENDCHAR\nSTARTCHAR U_927B\nENCODING 37499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n53C0\n8C40\n7A80\n2180\nFA40\n27E0\nAA40\n7240\n3BC0\nE240\nENDCHAR\nSTARTCHAR U_927C\nENCODING 37500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n5140\n8FE0\n7940\n2140\nF940\n27E0\nA940\n7140\n3A40\nE440\nENDCHAR\nSTARTCHAR U_927D\nENCODING 37501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n50A0\n8FE0\n7880\n2780\nFA80\n2280\nAAA0\n73A0\n3C60\nE020\nENDCHAR\nSTARTCHAR U_927E\nENCODING 37502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5240\n8FA0\n7820\n2280\nFBE0\n2480\nAFE0\n7080\n3880\nE080\nENDCHAR\nSTARTCHAR U_927F\nENCODING 37503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5140\n8A20\n7C00\n23E0\nF800\n23E0\nAA20\n7220\n3BE0\nE220\nENDCHAR\nSTARTCHAR U_9280\nENCODING 37504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5440\n8FC0\n7C40\n27C0\nFD00\n2520\nAD40\n7480\n3D40\nE620\nENDCHAR\nSTARTCHAR U_9281\nENCODING 37505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n33E0\n4C20\nF3A0\n22A0\nFBA0\n22A0\nABA0\n7020\n3CA0\nC040\nENDCHAR\nSTARTCHAR U_9282\nENCODING 37506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n52A0\n8AA0\n7AA0\n27E0\nFAA0\n22A0\nAAA0\n72A0\n3CA0\nE0A0\nENDCHAR\nSTARTCHAR U_9283\nENCODING 37507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8900\n7A40\n27A0\nF800\n2280\nAA80\n72A0\n3AA0\nE460\nENDCHAR\nSTARTCHAR U_9284\nENCODING 37508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3200\n4FE0\nF420\n25E0\nFD60\n2560\nADE0\n7420\n3C20\nC460\nENDCHAR\nSTARTCHAR U_9285\nENCODING 37509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5420\n8FA0\n7C20\n27A0\nFEA0\n26A0\nAFA0\n7420\n3C20\nE460\nENDCHAR\nSTARTCHAR U_9286\nENCODING 37510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5080\n8900\n7BE0\n2220\nFA20\n23E0\nAA20\n7220\n3BE0\nE220\nENDCHAR\nSTARTCHAR U_9287\nENCODING 37511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n57E0\n8880\n7BE0\n2080\nFFE0\n2080\nA9C0\n72A0\n3CA0\nE080\nENDCHAR\nSTARTCHAR U_9288\nENCODING 37512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5100\n8FC0\n7900\n27E0\nF900\n2100\nAFC0\n7100\n3900\nE7E0\nENDCHAR\nSTARTCHAR U_9289\nENCODING 37513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n33C0\n4940\nF7E0\n2140\nFBC0\n2100\nABC0\n7100\n3BE0\nC100\nENDCHAR\nSTARTCHAR U_928A\nENCODING 37514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n50A0\n8FE0\n7C80\n24A0\nFEA0\n24C0\nAC80\n74A0\n3D60\nE220\nENDCHAR\nSTARTCHAR U_928B\nENCODING 37515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n5220\n8DC0\n7C80\n2480\nFFE0\n2480\nAC80\n7480\n3C80\nE7E0\nENDCHAR\nSTARTCHAR U_928C\nENCODING 37516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8900\n7AE0\n2220\nFA40\n23E0\nAA40\n7240\n3A40\nE2C0\nENDCHAR\nSTARTCHAR U_928D\nENCODING 37517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5100\n8900\n7A40\n27A0\nF920\n2100\nAFC0\n7100\n3900\nE7E0\nENDCHAR\nSTARTCHAR U_928E\nENCODING 37518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF80\n2480\n3EA0\nE5A0\n06E0\n3180\nDF60\n0400\n7FC0\n2480\nFFE0\nENDCHAR\nSTARTCHAR U_928F\nENCODING 37519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2EE0\n5AA0\nFAA0\n2AA0\nFFE0\n2AA0\nBAA0\n6AA0\n3AA0\nD760\nENDCHAR\nSTARTCHAR U_9290\nENCODING 37520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE40\n2140\n7940\nA940\n3440\nCAC0\n3F80\nC460\n3F80\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_9291\nENCODING 37521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5500\n8FC0\n7900\n2100\nFFE0\n2280\nAA80\n72A0\n3CA0\nE060\nENDCHAR\nSTARTCHAR U_9292\nENCODING 37522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n36E0\n4C40\nF440\n2EE0\nFC40\n2440\nA440\n7440\n3C40\nC840\nENDCHAR\nSTARTCHAR U_9293\nENCODING 37523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3280\n4C40\nF820\n27C0\nF900\n2100\nB7C0\n6100\n3900\nC7E0\nENDCHAR\nSTARTCHAR U_9294\nENCODING 37524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5080\n89C0\n7AA0\n24A0\nF800\n2080\nB7E0\n6080\n3880\nC080\nENDCHAR\nSTARTCHAR U_9295\nENCODING 37525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8900\n7FE0\n2120\nFFE0\n2500\nAFE0\n7160\n3A80\nEC60\nENDCHAR\nSTARTCHAR U_9296\nENCODING 37526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n5280\n8BE0\n7C80\n2080\nFFE0\n2180\nAAC0\n74A0\n38A0\nE080\nENDCHAR\nSTARTCHAR U_9297\nENCODING 37527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n53C0\n8A00\n7BE0\n2200\nFA00\n23E0\nAB20\n7520\n3DE0\nE120\nENDCHAR\nSTARTCHAR U_9298\nENCODING 37528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n51E0\n8A20\n7D40\n2080\nF900\n23E0\nAE20\n7220\n3BE0\nE220\nENDCHAR\nSTARTCHAR U_9299\nENCODING 37529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8A40\n7DA0\n2000\nFBE0\n2100\nABE0\n7020\n3920\nE0C0\nENDCHAR\nSTARTCHAR U_929A\nENCODING 37530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n52A0\n8EA0\n7AC0\n2280\nFAC0\n26A0\nAA80\n72A0\n3CA0\nE060\nENDCHAR\nSTARTCHAR U_929B\nENCODING 37531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n5380\n8880\n7BE0\n2080\nF880\n23E0\nAA20\n7220\n3BE0\nE220\nENDCHAR\nSTARTCHAR U_929C\nENCODING 37532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n4A00\n9F00\n24E0\n5F40\n4440\nD540\n4E40\n4440\n4740\n58C0\nENDCHAR\nSTARTCHAR U_929D\nENCODING 37533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n5280\n8C80\n7FE0\n2480\nFC80\n25C0\nAEA0\n74A0\n3C80\nE480\nENDCHAR\nSTARTCHAR U_929E\nENCODING 37534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n6140\nBF40\n2140\n3F40\n0AC0\n1F00\nE4E0\n3F80\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_929F\nENCODING 37535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n32A0\n4AA0\nF3E0\n2080\nFBE0\n22A0\nAAA0\n72A0\n3AE0\nC080\nENDCHAR\nSTARTCHAR U_92A0\nENCODING 37536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57A0\n8940\n7980\n27E0\nFA00\n2240\nAF80\n7220\n3A20\nE1E0\nENDCHAR\nSTARTCHAR U_92A1\nENCODING 37537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5080\n8FE0\n7880\n23E0\nF800\n23E0\nAA20\n7220\n3BE0\nE220\nENDCHAR\nSTARTCHAR U_92A2\nENCODING 37538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5000\n8FE0\n7800\n20A0\nFFC0\n2280\nAAC0\n74A0\n3AA0\nE100\nENDCHAR\nSTARTCHAR U_92A3\nENCODING 37539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n64E0\n9FA0\nEAA0\n4AA0\nFAA0\n4AA0\nE4A0\n46A0\n75E0\n88A0\nENDCHAR\nSTARTCHAR U_92A4\nENCODING 37540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n52A0\n89C0\n7880\n27E0\nF880\n21C0\nAAA0\n74A0\n3880\nE080\nENDCHAR\nSTARTCHAR U_92A5\nENCODING 37541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5080\n8FE0\n7880\n21A0\nFAC0\n2680\nAA40\n7240\n3AA0\nE320\nENDCHAR\nSTARTCHAR U_92A6\nENCODING 37542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n54A0\n8CA0\n7FE0\n24A0\nFCA0\n24A0\nAD60\n7620\n3FE0\nE420\nENDCHAR\nSTARTCHAR U_92A7\nENCODING 37543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5520\n8B40\n7900\n27E0\nFA80\n2280\nAA80\n72A0\n3CA0\nE060\nENDCHAR\nSTARTCHAR U_92A8\nENCODING 37544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5080\n8FE0\n7D20\n2100\nFFE0\n2240\nAA40\n7180\n3940\nE620\nENDCHAR\nSTARTCHAR U_92A9\nENCODING 37545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n5780\n8880\n7BE0\n2080\nFFE0\n2080\nA900\n7240\n3CE0\nE720\nENDCHAR\nSTARTCHAR U_92AA\nENCODING 37546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5100\n8FE0\n7A00\n23E0\nFE20\n23E0\nAA20\n73E0\n3A20\nE260\nENDCHAR\nSTARTCHAR U_92AB\nENCODING 37547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n53C0\n8A80\n7FE0\n22A0\nFAA0\n23E0\nAA00\n7220\n3A20\nE1E0\nENDCHAR\nSTARTCHAR U_92AC\nENCODING 37548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n53A0\n8940\n7FE0\n2100\nFBE0\n2500\nA9E0\n7020\n3920\nE0C0\nENDCHAR\nSTARTCHAR U_92AD\nENCODING 37549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n3240\n4BE0\nF600\n23E0\nF600\n23E0\nAE80\n7120\n3AA0\nC460\nENDCHAR\nSTARTCHAR U_92AE\nENCODING 37550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0900\n2940\n4620\n0900\nFFE0\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_92AF\nENCODING 37551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4A40\nF7C0\n2100\nFA40\n27E0\nA920\n7540\n3520\nCB20\nENDCHAR\nSTARTCHAR U_92B0\nENCODING 37552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n3240\n4FE0\nF240\n2000\nFA40\n2240\nA940\n7080\n3940\nC620\nENDCHAR\nSTARTCHAR U_92B1\nENCODING 37553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n3440\n4C40\nF7C0\n2100\nFFE0\n2520\nAD20\n7520\n3D60\nC100\nENDCHAR\nSTARTCHAR U_92B2\nENCODING 37554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n5220\n8BE0\n7A20\n23E0\nF800\n23E0\nA880\n77E0\n3880\nE080\nENDCHAR\nSTARTCHAR U_92B3\nENCODING 37555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n5440\n8FE0\n7C40\n2440\nFFC0\n2280\nAA80\n72A0\n3AA0\nE460\nENDCHAR\nSTARTCHAR U_92B4\nENCODING 37556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA00\n23E0\nF280\n2480\n6A80\nFFE0\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_92B5\nENCODING 37557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n53E0\n8A20\n7BE0\n2220\nFBE0\n2220\nAFE0\n7120\n3A20\nE4E0\nENDCHAR\nSTARTCHAR U_92B6\nENCODING 37558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n5120\n8FE0\n7900\n2520\nFB40\n2180\nAB40\n7540\n3920\nE320\nENDCHAR\nSTARTCHAR U_92B7\nENCODING 37559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n52A0\n89C0\n7880\n23E0\nFA20\n23E0\nAA20\n73E0\n3A20\nE260\nENDCHAR\nSTARTCHAR U_92B8\nENCODING 37560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4A00\nFA80\n2E80\nFA80\n2E80\nBB80\n6EA0\n32A0\nC2E0\nENDCHAR\nSTARTCHAR U_92B9\nENCODING 37561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5100\n8FE0\n7980\n2340\nFD20\n27C0\nAA40\n72E0\n3A20\nE4C0\nENDCHAR\nSTARTCHAR U_92BA\nENCODING 37562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n2900\n7FE0\n0900\n7BC0\n2C00\nDF00\n24E0\nDF80\n1500\n7FC0\nENDCHAR\nSTARTCHAR U_92BB\nENCODING 37563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5280\n8FE0\n7920\n27E0\nFD00\n27E0\nA920\n7360\n3D00\nE100\nENDCHAR\nSTARTCHAR U_92BC\nENCODING 37564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5540\n8D40\n7D40\n23A0\nF920\n2100\nAFC0\n7100\n3900\nEFE0\nENDCHAR\nSTARTCHAR U_92BD\nENCODING 37565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n3780\n4C80\nF7E0\n2480\nFE60\n2020\nAFC0\n7440\n3C40\nC7C0\nENDCHAR\nSTARTCHAR U_92BE\nENCODING 37566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n3100\n4FE0\nF000\n2100\nF740\n2380\nAB40\n7520\n3900\nC300\nENDCHAR\nSTARTCHAR U_92BF\nENCODING 37567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n3280\n4900\nF7E0\n2520\nFFE0\n2520\nAFE0\n7520\n3D20\nC440\nENDCHAR\nSTARTCHAR U_92C0\nENCODING 37568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5000\n8BC0\n7A40\n2240\nFBC0\n2000\nAA20\n7140\n3880\nE7E0\nENDCHAR\nSTARTCHAR U_92C1\nENCODING 37569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n5220\n8A20\n7BE0\n2000\nF800\n27E0\nAC20\n7420\n3FE0\nE420\nENDCHAR\nSTARTCHAR U_92C2\nENCODING 37570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n53E0\n8C00\n7BE0\n22A0\nFFE0\n22A0\nAAA0\n77E0\n3820\nE0C0\nENDCHAR\nSTARTCHAR U_92C3\nENCODING 37571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n53E0\n8A20\n7BE0\n2220\nFBE0\n2280\nAAA0\n7240\n3AA0\nE320\nENDCHAR\nSTARTCHAR U_92C4\nENCODING 37572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5080\n8AA0\n7CC0\n2180\nFA40\n2420\nABE0\n7240\n3980\nE660\nENDCHAR\nSTARTCHAR U_92C5\nENCODING 37573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5080\n8FE0\n7A20\n2140\nFFE0\n2080\nABE0\n7080\n3880\nE080\nENDCHAR\nSTARTCHAR U_92C6\nENCODING 37574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFBE0\n2520\n20A0\nF720\n0A40\n7FE0\n0400\n3FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_92C7\nENCODING 37575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n5220\n8A20\n7BE0\n2220\nFBE0\n2220\nABE0\n7080\n3940\nE620\nENDCHAR\nSTARTCHAR U_92C8\nENCODING 37576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\nA200\n5FE0\nC500\n58E0\n4A00\nFFE0\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_92C9\nENCODING 37577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8900\n7FE0\n2520\nFFE0\n2520\nA900\n7380\n3D40\nE520\nENDCHAR\nSTARTCHAR U_92CA\nENCODING 37578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n5240\n8C20\n7980\n2240\nFC20\n23C0\nAA40\n7240\n3BC0\nE240\nENDCHAR\nSTARTCHAR U_92CB\nENCODING 37579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E20\n52C0\n8A40\n7440\n2F60\nF340\n2540\nAD40\n75E0\n2A00\nF1E0\nENDCHAR\nSTARTCHAR U_92CC\nENCODING 37580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E20\n53C0\n8A40\nFA40\n27E0\nFA40\n2240\nAFE0\n7200\n2500\nF8E0\nENDCHAR\nSTARTCHAR U_92CD\nENCODING 37581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8900\n7FE0\n2820\nFBC0\n2040\nAFE0\n7080\n3A80\nE100\nENDCHAR\nSTARTCHAR U_92CE\nENCODING 37582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8C20\n7BC0\n2000\nFFE0\n2280\nAA80\n72A0\n3CA0\nE060\nENDCHAR\nSTARTCHAR U_92CF\nENCODING 37583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8940\n7D40\n2540\nFBA0\n2100\nA900\n7180\n3A40\nE420\nENDCHAR\nSTARTCHAR U_92D0\nENCODING 37584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8C20\n7900\n27E0\nF900\n2140\nAA40\n7280\n3D20\nE3E0\nENDCHAR\nSTARTCHAR U_92D1\nENCODING 37585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5240\n8FE0\n7940\n2220\nF900\n23C0\nAD40\n7080\n3940\nE620\nENDCHAR\nSTARTCHAR U_92D2\nENCODING 37586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n5340\n8C80\n7B60\n2080\nFFE0\n2080\nABE0\n7080\n3FE0\nE080\nENDCHAR\nSTARTCHAR U_92D3\nENCODING 37587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2120\n5620\n8AA0\n7AA0\n27A0\nFAA0\n27A0\nAAA0\n7220\n3A20\nE260\nENDCHAR\nSTARTCHAR U_92D4\nENCODING 37588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n33C0\n4C80\nF7E0\n2520\nFFE0\n2280\nAA80\n72A0\n3AA0\nC4E0\nENDCHAR\nSTARTCHAR U_92D5\nENCODING 37589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5080\n8FE0\n7880\n2080\nFBE0\n2080\nA940\n7320\n3D40\nE1C0\nENDCHAR\nSTARTCHAR U_92D6\nENCODING 37590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3520\n4AC0\nF100\n2100\nFFE0\n2240\nAC40\n7280\n3900\nC6E0\nENDCHAR\nSTARTCHAR U_92D7\nENCODING 37591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5240\n8BC0\n7800\n27E0\nFC20\n27E0\nAC20\n77E0\n3C20\nE460\nENDCHAR\nSTARTCHAR U_92D8\nENCODING 37592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5240\n8A40\n7BC0\n2000\nFBC0\n2100\nAFE0\n7100\n3A80\nE460\nENDCHAR\nSTARTCHAR U_92D9\nENCODING 37593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5080\n8BC0\n7940\n2140\nFFE0\n2000\nABE0\n7220\n3BE0\nE220\nENDCHAR\nSTARTCHAR U_92DA\nENCODING 37594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n5640\nD980\n5660\n5900\nEEE0\n0400\n3F80\n1500\nFFC0\nENDCHAR\nSTARTCHAR U_92DB\nENCODING 37595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37C0\n4D40\nF7C0\n2100\nFFE0\n2520\nAD20\n77E0\n3900\nC100\nENDCHAR\nSTARTCHAR U_92DC\nENCODING 37596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n3440\n4C40\nF7C0\n2100\nF900\n25C0\nAD00\n7500\n3B00\nC8E0\nENDCHAR\nSTARTCHAR U_92DD\nENCODING 37597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n57A0\n8D20\n7AC0\n2040\nFFE0\n2440\nAA40\n7240\n3940\nE080\nENDCHAR\nSTARTCHAR U_92DE\nENCODING 37598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n52A0\n8AA0\n7D40\n22A0\nFAA0\n2000\nABE0\n7080\n3880\nE7E0\nENDCHAR\nSTARTCHAR U_92DF\nENCODING 37599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5040\n8BC0\n7840\n27E0\nFC20\n23C0\nAA40\n7180\n3A40\nE420\nENDCHAR\nSTARTCHAR U_92E0\nENCODING 37600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5400\n8DC0\n7C00\n27E0\nFD00\n25A0\nAD40\n7540\n3DA0\nE520\nENDCHAR\nSTARTCHAR U_92E1\nENCODING 37601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5280\n8D40\n78A0\n27C0\nF840\n2080\nABE0\n7220\n3BE0\nE220\nENDCHAR\nSTARTCHAR U_92E2\nENCODING 37602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n3720\n4D40\nF280\n27C0\nF880\n2100\nAFE0\n7100\n3900\nC300\nENDCHAR\nSTARTCHAR U_92E3\nENCODING 37603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n52A0\nFAA0\n2FC0\nF2A0\n2AA0\nB6A0\n6AC0\n2A80\nD680\nENDCHAR\nSTARTCHAR U_92E4\nENCODING 37604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n5A80\n8A80\n7FE0\n2AA0\nFEA0\n2AA0\nABA0\n7EA0\n3920\nE240\nENDCHAR\nSTARTCHAR U_92E5\nENCODING 37605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n3440\n4C40\nF7C0\n2000\nF7C0\n2100\nB7C0\n6100\n3100\nCFE0\nENDCHAR\nSTARTCHAR U_92E6\nENCODING 37606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5440\n8FC0\n7C00\n27E0\nFC20\n27A0\nAEA0\n77A0\n3C20\nE0C0\nENDCHAR\nSTARTCHAR U_92E7\nENCODING 37607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5440\n8FC0\n7C40\n27C0\nFC40\n27C0\nAA80\n72A0\n3AA0\nE460\nENDCHAR\nSTARTCHAR U_92E8\nENCODING 37608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n56C0\n8AA0\n7FE0\n2280\nFAA0\n23A0\nAEC0\n72A0\n3B60\nE620\nENDCHAR\nSTARTCHAR U_92E9\nENCODING 37609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n57E0\n8A40\n7900\n2080\nFFE0\n2200\nAA00\n7200\n3A00\nE3E0\nENDCHAR\nSTARTCHAR U_92EA\nENCODING 37610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n5120\n8FE0\n7900\n27E0\nFD20\n27E0\nAD20\n77E0\n3D20\nE560\nENDCHAR\nSTARTCHAR U_92EB\nENCODING 37611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n1140\nFD40\n3940\nD4C0\n3B00\nCEE0\n0400\n3F80\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_92EC\nENCODING 37612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nF400\n27C0\nF540\n2480\n6B60\n1E80\nE460\n3F80\n1500\n7FC0\nENDCHAR\nSTARTCHAR U_92ED\nENCODING 37613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n3280\n4FC0\nF440\n2440\nFFC0\n2280\nB280\n62A0\n3AA0\nC460\nENDCHAR\nSTARTCHAR U_92EE\nENCODING 37614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n20A0\n5FE0\nF880\n2880\nFEA0\n2AA0\nBAC0\n6AA0\n3D60\nD220\nENDCHAR\nSTARTCHAR U_92EF\nENCODING 37615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n5280\n8BE0\n7C80\n2080\nFFE0\n2000\nABE0\n7220\n3BE0\nE220\nENDCHAR\nSTARTCHAR U_92F0\nENCODING 37616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n52A0\n8AA0\n7BE0\n22A0\nFBE0\n2080\nABE0\n7080\n3880\nE7E0\nENDCHAR\nSTARTCHAR U_92F1\nENCODING 37617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n5040\n8FE0\n7A40\n2140\nFA40\n22C0\nAA40\n7640\n3AA0\nE3A0\nENDCHAR\nSTARTCHAR U_92F2\nENCODING 37618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n3700\n4C00\nF400\n27C0\nFC80\n2480\nAFE0\n7280\n3440\nC820\nENDCHAR\nSTARTCHAR U_92F3\nENCODING 37619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4900\nF7C0\n2200\nFFE0\n2280\nAFE0\n7480\n3A80\nC100\nENDCHAR\nSTARTCHAR U_92F4\nENCODING 37620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4900\nF7C0\n2440\nFFC0\n2280\nAA80\n7280\n3AA0\nC460\nENDCHAR\nSTARTCHAR U_92F5\nENCODING 37621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n3700\n4900\nF7E0\n2380\nF540\n2920\nB780\n64A0\n34A0\nC860\nENDCHAR\nSTARTCHAR U_92F6\nENCODING 37622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3100\n4FE0\nF200\n2480\nFFC0\n2A80\nBA80\n6AA0\n32A0\nD060\nENDCHAR\nSTARTCHAR U_92F7\nENCODING 37623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F00\nAA00\n1FE0\nFAA0\n4AA0\nFEA0\n4AA0\n5BA0\nEE40\n42A0\nF320\nENDCHAR\nSTARTCHAR U_92F8\nENCODING 37624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5420\n8FE0\n7C80\n2480\nFFE0\n2480\nB7E0\n6A20\n3A20\nCBE0\nENDCHAR\nSTARTCHAR U_92F9\nENCODING 37625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n5200\n8BC0\n7A00\n23C0\nFA00\n27E0\nAAA0\n7240\n3AA0\nE320\nENDCHAR\nSTARTCHAR U_92FA\nENCODING 37626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5080\n8FE0\n7A20\n27C0\nFD40\n2740\nB9C0\n6280\n3AA0\nC460\nENDCHAR\nSTARTCHAR U_92FB\nENCODING 37627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA240\nF940\n8880\nFD60\nAA00\nFFE0\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_92FC\nENCODING 37628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5AA0\n8920\nFFE0\n2920\nFD60\n2D60\nBFE0\n6820\n2820\nF860\nENDCHAR\nSTARTCHAR U_92FD\nENCODING 37629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n31C0\n4900\nF7C0\n2440\nF7C0\n2440\nB7C0\n6100\n3FE0\nC100\nENDCHAR\nSTARTCHAR U_92FE\nENCODING 37630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n53E0\n8C20\n7A20\n23E0\nFD20\n27E0\nAD60\n77E0\n3820\nE0C0\nENDCHAR\nSTARTCHAR U_92FF\nENCODING 37631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24A0\n52C0\n8880\n7FE0\n2420\nFDE0\n2560\nADE0\n7420\n3C20\nE460\nENDCHAR\nSTARTCHAR U_9300\nENCODING 37632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2280\n5440\nFBA0\n2000\nFFE0\n2AA0\nBFE0\n6AA0\n3AA0\nC860\nENDCHAR\nSTARTCHAR U_9301\nENCODING 37633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n54A0\n8FE0\n7CA0\n27E0\nF880\n27E0\nA880\n71C0\n3AA0\nE4A0\nENDCHAR\nSTARTCHAR U_9302\nENCODING 37634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57C0\n8900\n77E0\n2240\nF520\n23C0\nAE40\n7180\n3180\nC660\nENDCHAR\nSTARTCHAR U_9303\nENCODING 37635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n17E0\n44A0\n17C0\n6540\n2C80\n1B40\nE4E0\n3F80\n1500\n7FE0\nENDCHAR\nSTARTCHAR U_9304\nENCODING 37636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5240\n8BC0\n7840\n27E0\nF880\n22A0\nA9C0\n72A0\n3CA0\nE180\nENDCHAR\nSTARTCHAR U_9305\nENCODING 37637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n11E0\nFEA0\n38A0\n5520\n9B60\n3E80\nC460\n3F80\n1500\n7FE0\nENDCHAR\nSTARTCHAR U_9306\nENCODING 37638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8900\n7FC0\n2100\nFFE0\n2440\nAFC0\n7440\n3FC0\nE4C0\nENDCHAR\nSTARTCHAR U_9307\nENCODING 37639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3100\n4FE0\nF440\n2280\nFFE0\n2000\nAFC0\n7440\n3C40\nC7C0\nENDCHAR\nSTARTCHAR U_9308\nENCODING 37640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n5340\n8FE0\n7900\n27E0\nFA40\n27E0\nAA40\n72C0\n3A20\nE1E0\nENDCHAR\nSTARTCHAR U_9309\nENCODING 37641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5480\n8FE0\n7C80\n2540\nFE20\n23E0\nAA20\n73E0\n3A20\nE3E0\nENDCHAR\nSTARTCHAR U_930A\nENCODING 37642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3100\n4FE0\nF440\n2440\nFAA0\n2100\nAFE0\n7100\n3900\nC100\nENDCHAR\nSTARTCHAR U_930B\nENCODING 37643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n5AA0\n8AA0\nFEE0\n2AA0\nFAA0\n2EE0\nBAA0\n6AA0\n2AA0\nF560\nENDCHAR\nSTARTCHAR U_930C\nENCODING 37644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n52A0\n8BE0\n7800\n27E0\nFC00\n25C0\nAC80\n77E0\n3C80\nE480\nENDCHAR\nSTARTCHAR U_930D\nENCODING 37645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8CA0\n7FE0\n24A0\nFFE0\n2280\nAC80\n77E0\n3880\nE080\nENDCHAR\nSTARTCHAR U_930E\nENCODING 37646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n53E0\n8C40\n7880\n2360\nFC20\n2420\nAF60\n7420\n3FE0\nE420\nENDCHAR\nSTARTCHAR U_930F\nENCODING 37647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5280\n8A80\n7EE0\n2420\nFC20\n2420\nAEE0\n7280\n3A80\nEFE0\nENDCHAR\nSTARTCHAR U_9310\nENCODING 37648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5280\n8FE0\n7A80\n23E0\nFA80\n2280\nABE0\n7280\n3A80\nE3E0\nENDCHAR\nSTARTCHAR U_9311\nENCODING 37649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4C20\nF7E0\n2540\nFD20\n27E0\nB500\n6900\n2A80\nD460\nENDCHAR\nSTARTCHAR U_9312\nENCODING 37650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5A20\n8A20\n7DE0\n2B60\nFB60\n2B60\nADE0\n7820\n3820\nE860\nENDCHAR\nSTARTCHAR U_9313\nENCODING 37651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5280\n8FE0\n7900\n27E0\nF900\n27E0\nAA80\n72A0\n3CA0\nE060\nENDCHAR\nSTARTCHAR U_9314\nENCODING 37652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n57A0\n8AC0\n7AA0\n24A0\nFBE0\n2220\nABE0\n7220\n3BE0\nE220\nENDCHAR\nSTARTCHAR U_9315\nENCODING 37653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5440\n8FC0\n7C40\n27C0\nFC80\n24A0\nAFC0\n74A0\n3DA0\nE6E0\nENDCHAR\nSTARTCHAR U_9316\nENCODING 37654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BE0\n2120\nFCC0\n6940\nAE20\n3100\nFFE0\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_9317\nENCODING 37655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n3100\n4FE0\nF380\n2540\nF920\n27E0\nAA40\n7680\n3980\nC660\nENDCHAR\nSTARTCHAR U_9318\nENCODING 37656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n5780\n8900\n7FE0\n2540\nFFE0\n2540\nAD40\n77E0\n3900\nE7C0\nENDCHAR\nSTARTCHAR U_9319\nENCODING 37657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n52A0\n8D40\n7AA0\n22A0\nFFE0\n24A0\nAFE0\n74A0\n3FE0\nE420\nENDCHAR\nSTARTCHAR U_931A\nENCODING 37658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n53C0\n8480\n77C0\n2140\nFFE0\n2140\nB7C0\n6100\n3900\nC300\nENDCHAR\nSTARTCHAR U_931B\nENCODING 37659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8A40\n7D20\n27C0\nF900\n2240\nAFE0\n7240\n3A40\nE440\nENDCHAR\nSTARTCHAR U_931C\nENCODING 37660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4A80\nF560\n2080\nF7C0\n2080\nA940\n7220\n3640\nC9C0\nENDCHAR\nSTARTCHAR U_931D\nENCODING 37661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8C20\n7BC0\n2000\nFFE0\n2100\nAB40\n7520\n3920\nE300\nENDCHAR\nSTARTCHAR U_931E\nENCODING 37662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8A40\n7BC0\n2000\nFFE0\n2040\nA880\n77E0\n3880\nE180\nENDCHAR\nSTARTCHAR U_931F\nENCODING 37663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n52C0\n8C80\n7940\n22A0\nFC80\n22A0\nAAC0\n7480\n3940\nE620\nENDCHAR\nSTARTCHAR U_9320\nENCODING 37664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8C20\n7800\n27E0\nF880\n2280\nAAE0\n7280\n3D80\nE0E0\nENDCHAR\nSTARTCHAR U_9321\nENCODING 37665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8A80\n7C40\n27E0\nF840\n2740\nAD40\n7740\n3840\nE1C0\nENDCHAR\nSTARTCHAR U_9322\nENCODING 37666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n3240\n4FC0\nF940\n21A0\nFE60\n2A40\nB7E0\n6140\n39A0\nC660\nENDCHAR\nSTARTCHAR U_9323\nENCODING 37667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5520\n8AC0\n7A40\n25A0\nFFE0\n2120\nADA0\n7240\n3DA0\nE120\nENDCHAR\nSTARTCHAR U_9324\nENCODING 37668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n5240\n8FE0\n7A40\n23C0\nFA40\n23C0\nAA40\n77E0\n3A40\nE420\nENDCHAR\nSTARTCHAR U_9325\nENCODING 37669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n57E0\n8940\n7BE0\n2000\nFBC0\n2240\nB3C0\n6240\n3BC0\nC240\nENDCHAR\nSTARTCHAR U_9326\nENCODING 37670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n53E0\n8A20\n7BE0\n2220\nFBE0\n2080\nAFE0\n74A0\n3CE0\nE080\nENDCHAR\nSTARTCHAR U_9327\nENCODING 37671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8C20\n7BC0\n2240\nFBC0\n2200\nABE0\n7220\n3BE0\nE220\nENDCHAR\nSTARTCHAR U_9328\nENCODING 37672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n5240\n8FE0\n7A40\n27E0\nFCA0\n24A0\nAFE0\n74A0\n3FE0\nE420\nENDCHAR\nSTARTCHAR U_9329\nENCODING 37673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5240\n8BC0\n7A40\n23C0\nF800\n27E0\nAC20\n77E0\n3C20\nE7E0\nENDCHAR\nSTARTCHAR U_932A\nENCODING 37674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n5280\n8FE0\nFAA0\n2FE0\nFAA0\n2AA0\nBFE0\n6280\n3440\nC820\nENDCHAR\nSTARTCHAR U_932B\nENCODING 37675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5440\n8FC0\n7C40\n27C0\nFA00\n27E0\nAAA0\n74A0\n3920\nE240\nENDCHAR\nSTARTCHAR U_932C\nENCODING 37676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4900\nF7C0\n2540\nFFC0\n2540\nB7C0\n6380\n3540\nC920\nENDCHAR\nSTARTCHAR U_932D\nENCODING 37677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5520\n8FA0\n7D20\n27E0\nFC20\n27A0\nAEA0\n77A0\n3C20\nE060\nENDCHAR\nSTARTCHAR U_932E\nENCODING 37678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5820\n8920\nFFE0\n2920\nFBA0\n2AA0\nBBA0\n6820\n2FE0\nF820\nENDCHAR\nSTARTCHAR U_932F\nENCODING 37679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n57E0\n8A40\n7A40\n27E0\nF800\n23E0\nAA20\n73E0\n3A20\nE3E0\nENDCHAR\nSTARTCHAR U_9330\nENCODING 37680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4FE0\nF100\n2380\nFD40\n2920\nB100\n6540\n3AA0\nCAA0\nENDCHAR\nSTARTCHAR U_9331\nENCODING 37681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n1100\nEEE0\n1500\n7FC0\n0000\nFBC0\n2100\n7BC0\n2100\nFBE0\nENDCHAR\nSTARTCHAR U_9332\nENCODING 37682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n3040\n4BC0\nF040\n2FE0\nF120\n2540\nB380\n6540\n3520\nCB00\nENDCHAR\nSTARTCHAR U_9333\nENCODING 37683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5040\n8880\n7FE0\n2080\nFB80\n2100\nAFE0\n7AA0\n3AA0\nEFE0\nENDCHAR\nSTARTCHAR U_9334\nENCODING 37684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n53E0\n8880\n7FE0\n2140\nFA20\n2480\nABE0\n7080\n3880\nE7E0\nENDCHAR\nSTARTCHAR U_9335\nENCODING 37685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n57E0\n8A40\n7800\n2280\nFAA0\n26C0\nAB80\n72A0\n3AA0\nE260\nENDCHAR\nSTARTCHAR U_9336\nENCODING 37686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8900\n7FC0\n2100\nFFE0\n22A0\nAE40\n7240\n3AA0\nE320\nENDCHAR\nSTARTCHAR U_9337\nENCODING 37687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n5F40\nA440\nFF40\n5540\nFF40\n5540\n7F40\nC440\n6F40\n8460\nENDCHAR\nSTARTCHAR U_9338\nENCODING 37688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8900\nF540\n2540\nFBA0\n2100\nB380\n6540\n2920\nF100\nENDCHAR\nSTARTCHAR U_9339\nENCODING 37689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22E0\n5280\n8FE0\n7800\n23E0\nFA20\n23E0\nAA20\n73E0\n3A20\nE260\nENDCHAR\nSTARTCHAR U_933A\nENCODING 37690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n37E0\n4A80\nF100\n2FE0\nF200\n23C0\nAA40\n7240\n3540\nC880\nENDCHAR\nSTARTCHAR U_933B\nENCODING 37691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n36C0\n48A0\nFFE0\n2280\nF380\n2A80\nBAA0\n6BA0\n2C60\nC020\nENDCHAR\nSTARTCHAR U_933C\nENCODING 37692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8A80\n7C40\n23A0\nF800\n27E0\nA900\n7540\n3920\nE320\nENDCHAR\nSTARTCHAR U_933D\nENCODING 37693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n37E0\n4940\nF580\n2240\nF420\n23C0\nB440\n6A80\n3100\nCEE0\nENDCHAR\nSTARTCHAR U_933E\nENCODING 37694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA200\nFBE0\n2240\nF640\n1980\nEF60\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_933F\nENCODING 37695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n3100\n4FE0\nFA40\n2F80\nFA40\n2BC0\nB800\n6BA0\n2AA0\nD460\nENDCHAR\nSTARTCHAR U_9340\nENCODING 37696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n3440\n4FC0\nF440\n27C0\nF800\n27C0\nB080\n6FE0\n3280\nC180\nENDCHAR\nSTARTCHAR U_9341\nENCODING 37697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n3C80\n48E0\nF920\n2F00\nFA80\n2A80\nBA80\n6A80\n2B40\nD220\nENDCHAR\nSTARTCHAR U_9342\nENCODING 37698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3100\n4A80\nF460\n27C0\nF900\n27C0\nB100\n6540\n3B80\nC7E0\nENDCHAR\nSTARTCHAR U_9343\nENCODING 37699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n33E0\n4AA0\nF560\n22A0\nF160\n2000\nB240\n65A0\n34A0\nC380\nENDCHAR\nSTARTCHAR U_9344\nENCODING 37700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2FE0\n5000\nF7C0\n2440\nF7C0\n2100\nB580\n6540\n2920\nC300\nENDCHAR\nSTARTCHAR U_9345\nENCODING 37701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n3280\n4880\nF5C0\n2480\nF3E0\n2480\nB500\n6D40\n37E0\nC520\nENDCHAR\nSTARTCHAR U_9346\nENCODING 37702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n6AA0\n9EE0\nFAA0\n2EE0\nF820\n2820\nB820\n6820\n2820\nF8E0\nENDCHAR\nSTARTCHAR U_9347\nENCODING 37703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n54A0\n8EC0\n7DA0\n26E0\nF900\n27C0\nAC40\n77C0\n3C40\nE7C0\nENDCHAR\nSTARTCHAR U_9348\nENCODING 37704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n3FE0\n4440\nF100\n27C0\nFD40\n2540\nBFE0\n6280\n3440\nC820\nENDCHAR\nSTARTCHAR U_9349\nENCODING 37705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n5220\n8BE0\n7A20\n23E0\nF800\n27E0\nAA80\n72E0\n3D80\nE0E0\nENDCHAR\nSTARTCHAR U_934A\nENCODING 37706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8900\n7FE0\n2AA0\nF920\n2FE0\nB100\n6380\n3D40\nC920\nENDCHAR\nSTARTCHAR U_934B\nENCODING 37707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5240\n8B40\n7B40\n27E0\nFC20\n27A0\nB6A0\n67A0\n3C20\nC460\nENDCHAR\nSTARTCHAR U_934C\nENCODING 37708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\nB7C0\n4900\nEFE0\n4500\n58E0\nFFE0\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_934D\nENCODING 37709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n57E0\n8D40\n7FE0\n2540\nFDC0\n2400\nAFE0\n7540\n3C80\nE360\nENDCHAR\nSTARTCHAR U_934E\nENCODING 37710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5480\n8FE0\n7C80\n25E0\nFD20\n25E0\nAD20\n75E0\n3D20\nE5E0\nENDCHAR\nSTARTCHAR U_934F\nENCODING 37711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n53C0\n8940\n7FE0\n2240\nFBC0\n2080\nAFE0\n7280\n3FE0\nE080\nENDCHAR\nSTARTCHAR U_9350\nENCODING 37712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n26A0\n5520\n8EA0\n7FE0\n2240\nFC20\n23C0\nAA40\n7580\n3A40\nE420\nENDCHAR\nSTARTCHAR U_9351\nENCODING 37713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n53E0\n8E40\n7BC0\n2240\nFBC0\n2200\nABC0\n7640\n3980\nE660\nENDCHAR\nSTARTCHAR U_9352\nENCODING 37714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5140\n8FE0\n7AA0\n24C0\nFB80\n2100\nAFE0\n7380\n3D40\nE120\nENDCHAR\nSTARTCHAR U_9353\nENCODING 37715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n3240\n4BC0\nF000\n27E0\nFA40\n23C0\nB240\n62E0\n3740\nC040\nENDCHAR\nSTARTCHAR U_9354\nENCODING 37716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n5AA0\n8EE0\n7800\n23C0\nF800\n27E0\nA900\n73E0\n3820\nE1C0\nENDCHAR\nSTARTCHAR U_9355\nENCODING 37717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5520\n8FE0\n7D40\n27C0\nFD40\n27C0\nA900\n77E0\n3900\nE100\nENDCHAR\nSTARTCHAR U_9356\nENCODING 37718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n57E0\n8A40\n7BC0\n2240\nFBC0\n2240\nAFE0\n7540\n3E20\nE7E0\nENDCHAR\nSTARTCHAR U_9357\nENCODING 37719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8A80\n7FE0\n2520\nFFC0\n2540\nAD40\n7540\n3DC0\nE100\nENDCHAR\nSTARTCHAR U_9358\nENCODING 37720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E20\n5A20\n8EA0\nFAA0\n2EA0\nFAA0\n2AA0\nAEA0\n7020\n2A20\nF160\nENDCHAR\nSTARTCHAR U_9359\nENCODING 37721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nAFE0\n4480\nDFE0\n4680\n4940\nFFE0\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_935A\nENCODING 37722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5240\n8BC0\n7A40\n27E0\nFA00\n27E0\nAAA0\n74A0\n3920\nE6C0\nENDCHAR\nSTARTCHAR U_935B\nENCODING 37723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5540\n8F40\n7C20\n25E0\nFF40\n2540\nAF40\n7480\n3D40\nE620\nENDCHAR\nSTARTCHAR U_935C\nENCODING 37724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5520\n8D20\n7FE0\n2400\nFFE0\n24A0\nAFA0\n7440\n3CA0\nE520\nENDCHAR\nSTARTCHAR U_935D\nENCODING 37725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n3540\n4FC0\nF540\n27C0\nF900\n27E0\nAD60\n77E0\n3C20\nC460\nENDCHAR\nSTARTCHAR U_935E\nENCODING 37726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n5100\n8FC0\n7C40\n27C0\nFC40\n27C0\nAC40\n77C0\n3A80\nEC60\nENDCHAR\nSTARTCHAR U_935F\nENCODING 37727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n3440\n4FC0\nF440\n27C0\nF500\n27E0\nB900\n67C0\n3100\nCFE0\nENDCHAR\nSTARTCHAR U_9360\nENCODING 37728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n53C0\n8A40\n7BC0\n2240\nFFE0\n2100\nA900\n73C0\n3900\nE7E0\nENDCHAR\nSTARTCHAR U_9361\nENCODING 37729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n52A0\n8BE0\n7AA0\n23E0\nF800\n27E0\nAAA0\n7240\n3B40\nE220\nENDCHAR\nSTARTCHAR U_9362\nENCODING 37730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3000\n4BC0\nF240\n23C0\nF800\n27E0\nB520\n67E0\n3520\nC7E0\nENDCHAR\nSTARTCHAR U_9363\nENCODING 37731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n57E0\n8A40\n7FE0\n2120\nFAA0\n2440\nAFE0\n7420\n3FE0\nE420\nENDCHAR\nSTARTCHAR U_9364\nENCODING 37732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n5700\n8900\n7FE0\n2100\nFF60\n2520\nAFE0\n7520\n3FE0\nE420\nENDCHAR\nSTARTCHAR U_9365\nENCODING 37733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n5FE0\n84A0\nFEA0\n24A0\nFF20\n2540\nAFE0\n7280\n2440\nF820\nENDCHAR\nSTARTCHAR U_9366\nENCODING 37734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2900\n55E0\nFE80\n28A0\nFEE0\n2BA0\nBAE0\n6A80\n2AA0\nD660\nENDCHAR\nSTARTCHAR U_9367\nENCODING 37735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n53E0\n8D20\n7FE0\n2020\nFBA0\n2020\nABA0\n72A0\n3BA0\nE0C0\nENDCHAR\nSTARTCHAR U_9368\nENCODING 37736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n3680\n4AA0\nF440\n2820\nF7E0\n2100\nB7E0\n6100\n3A80\nC460\nENDCHAR\nSTARTCHAR U_9369\nENCODING 37737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n37E0\n4C40\nF100\n27E0\nF900\n23C0\nB640\n6A40\n33C0\nC240\nENDCHAR\nSTARTCHAR U_936A\nENCODING 37738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n2FE0\nFA80\n5180\n9E40\n3100\nFFE0\n0400\n7F80\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_936B\nENCODING 37739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n6520\n2540\nFA80\n7440\nAB20\n3E80\nC460\n3F80\n1500\n7FC0\nENDCHAR\nSTARTCHAR U_936C\nENCODING 37740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n5480\n85A0\nFEC0\n2480\nF680\n2D80\nA480\n7540\n2620\nF420\nENDCHAR\nSTARTCHAR U_936D\nENCODING 37741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5440\n8FE0\n7D00\n25E0\nFE80\n27E0\nAC80\n7480\n3D40\nE620\nENDCHAR\nSTARTCHAR U_936E\nENCODING 37742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3280\n4C40\nF7A0\n2000\nFEA0\n2AA0\nBEA0\n6AA0\n3E20\nCAE0\nENDCHAR\nSTARTCHAR U_936F\nENCODING 37743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\n5AA0\nF7A0\n2520\nFAC0\n2140\nB2A0\n6620\n3A40\nC1C0\nENDCHAR\nSTARTCHAR U_9370\nENCODING 37744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20E0\n2740\n5280\nFFE0\n2100\nF7E0\n2200\nB3C0\n6640\n3980\nC660\nENDCHAR\nSTARTCHAR U_9371\nENCODING 37745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n57E0\n8AA0\nFAE0\n2200\nFBE0\n2080\nAFE0\n7180\n22C0\nFCA0\nENDCHAR\nSTARTCHAR U_9372\nENCODING 37746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5440\n8FC0\n7D00\n27E0\nFC80\n27E0\nAC60\n77C0\n3C40\nC7C0\nENDCHAR\nSTARTCHAR U_9373\nENCODING 37747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n53E0\n7D00\n5080\n7E80\n0900\n3F80\nC460\n1F00\n1500\n7FC0\nENDCHAR\nSTARTCHAR U_9374\nENCODING 37748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2540\n5540\nFFC0\n2000\nFFE0\n2200\nBFE0\n6AA0\n3AA0\nC860\nENDCHAR\nSTARTCHAR U_9375\nENCODING 37749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2C80\n25E0\n54A0\nFBE0\n2CA0\nF7E0\n2480\nB7E0\n6C80\n3480\nCBE0\nENDCHAR\nSTARTCHAR U_9376\nENCODING 37750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5D20\n8520\nFFE0\n2520\nFFE0\n2140\nAAA0\n7620\n2A40\nF1C0\nENDCHAR\nSTARTCHAR U_9377\nENCODING 37751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8A40\nFD20\n27C0\nF900\n27E0\nA900\n77C0\n2100\nFFE0\nENDCHAR\nSTARTCHAR U_9378\nENCODING 37752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n34E0\n4CA0\nFFA0\n24E0\nFCA0\n2EE0\nBAA0\n7EA0\nC120\n0260\nENDCHAR\nSTARTCHAR U_9379\nENCODING 37753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8820\nF000\n27E0\nFA40\n23C0\nAA40\n73C0\n2000\nFFE0\nENDCHAR\nSTARTCHAR U_937A\nENCODING 37754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n53A0\n8940\nFFE0\n2100\nFBE0\n2220\nAFE0\n7220\n23E0\nFA20\nENDCHAR\nSTARTCHAR U_937B\nENCODING 37755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5440\n8FC0\nFC40\n23C0\nFA00\n27E0\nAD20\n76A0\n27A0\nF840\nENDCHAR\nSTARTCHAR U_937C\nENCODING 37756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n50A0\n8FE0\nF880\n2F80\nF8A0\n2EA0\nAAC0\n7EA0\n2960\nF220\nENDCHAR\nSTARTCHAR U_937D\nENCODING 37757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37C0\n4C40\nFFC0\n2400\nFFE0\n2EA0\nB7E0\n7AA0\nCAA0\n1260\nENDCHAR\nSTARTCHAR U_937E\nENCODING 37758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5100\n8FE0\nFD40\n27C0\nFD40\n27C0\nA900\n77C0\n2100\nFFE0\nENDCHAR\nSTARTCHAR U_937F\nENCODING 37759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n22A0\n57E0\nFAA0\n2140\nF7E0\n2520\nAFE0\n7520\n3FE0\nC420\nENDCHAR\nSTARTCHAR U_9380\nENCODING 37760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n54E0\n88A0\nFB40\n2AA0\nFB40\n2AA0\nAA40\n7AA0\n2A40\nF980\nENDCHAR\nSTARTCHAR U_9381\nENCODING 37761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n5AA0\nFEA0\n2AC0\nFEA0\n2AA0\nBEE0\n6A80\nF280\n0280\nENDCHAR\nSTARTCHAR U_9382\nENCODING 37762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5280\n8FE0\nF900\n27C0\nF900\n27E0\nA900\n77E0\n2280\nFC60\nENDCHAR\nSTARTCHAR U_9383\nENCODING 37763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n28C0\n5700\n8420\n75C0\n2D40\nF560\n2540\nB540\n6520\n39A0\nC920\nENDCHAR\nSTARTCHAR U_9384\nENCODING 37764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4800\nF7C0\n2440\nF7C0\n2280\nB2A0\n7640\nCB20\n0200\nENDCHAR\nSTARTCHAR U_9385\nENCODING 37765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2540\n57C0\nFD40\n27C0\nF280\n2C60\nB280\n7280\nC280\n0480\nENDCHAR\nSTARTCHAR U_9386\nENCODING 37766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n3280\n4FE0\nF020\n2EA0\nFAA0\n2EA0\nBAA0\n6EA0\nFA20\n0A60\nENDCHAR\nSTARTCHAR U_9387\nENCODING 37767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3520\n4FE0\nFC00\n27E0\nFE20\n2FE0\nB620\n7BE0\nCA20\n13E0\nENDCHAR\nSTARTCHAR U_9388\nENCODING 37768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n5140\n8BE0\nF880\n23E0\nFC80\n23E0\nAA00\n77E0\n2880\nF7E0\nENDCHAR\nSTARTCHAR U_9389\nENCODING 37769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5440\n8FC0\nFC40\n27C0\nF800\n27E0\nADA0\n7360\n25A0\nFA60\nENDCHAR\nSTARTCHAR U_938A\nENCODING 37770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8A40\n77E0\n2920\nF7E0\n2100\nB1E0\n6220\n3A20\nC4C0\nENDCHAR\nSTARTCHAR U_938B\nENCODING 37771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4D20\nFBC0\n2100\nFBC0\n2100\nAFE0\n73C0\n3A40\nC3C0\nENDCHAR\nSTARTCHAR U_938C\nENCODING 37772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5280\n8FE0\nFAA0\n27E0\nFAA0\n27E0\nAA80\n76C0\n2AA0\nF2A0\nENDCHAR\nSTARTCHAR U_938D\nENCODING 37773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57C0\n8100\nFFE0\n2AA0\nF700\n2140\nAFE0\n7380\n2540\nFB20\nENDCHAR\nSTARTCHAR U_938E\nENCODING 37774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n57E0\n8800\nFFC0\n2AC0\nF740\n2240\nAFC0\n7240\n2720\nFAA0\nENDCHAR\nSTARTCHAR U_938F\nENCODING 37775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nAFE0\n6480\nCFC0\n4AA0\n56E0\nFFE0\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_9390\nENCODING 37776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n3640\n4D40\nFA80\n23C0\nFD00\n27E0\nB100\n6540\n3D40\nC7C0\nENDCHAR\nSTARTCHAR U_9391\nENCODING 37777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57C0\n8900\nFFE0\n2480\nFFC0\n2040\nAFE0\n7AA0\n2AA0\nFFE0\nENDCHAR\nSTARTCHAR U_9392\nENCODING 37778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5800\n8FE0\nFAA0\n2A40\nFB20\n2A40\nAFE0\n7A40\n2940\nF880\nENDCHAR\nSTARTCHAR U_9393\nENCODING 37779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n3540\n4AA0\nF7C0\n2000\nFEE0\n2AA0\nB660\n6AA0\n3AA0\nC440\nENDCHAR\nSTARTCHAR U_9394\nENCODING 37780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8C20\nFA40\n2520\nFA40\n27E0\nAA40\n7240\n23C0\nFA40\nENDCHAR\nSTARTCHAR U_9395\nENCODING 37781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8D40\nFFE0\n2540\nFFC0\n2500\nAFE0\n7620\n2BE0\nFA20\nENDCHAR\nSTARTCHAR U_9396\nENCODING 37782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24A0\n52C0\n8BE0\nFA20\n23E0\nFA20\n23E0\nAA20\n73E0\n2140\nFE20\nENDCHAR\nSTARTCHAR U_9397\nENCODING 37783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n5240\n8D20\nFFC0\n2440\nFFC0\n2440\nAFE0\n7620\n23E0\nFA20\nENDCHAR\nSTARTCHAR U_9398\nENCODING 37784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5240\n8BC0\nF000\n27E0\nFEA0\n2520\nAFE0\n7520\n2520\nFC60\nENDCHAR\nSTARTCHAR U_9399\nENCODING 37785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n52A0\n8FA0\nF2E0\n2BA0\nFBA0\n2FE0\nAAA0\n72A0\n24A0\nF960\nENDCHAR\nSTARTCHAR U_939A\nENCODING 37786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n52E0\n8AA0\nF8E0\n2680\nFAE0\n22A0\nAAA0\n72E0\n2500\nF8E0\nENDCHAR\nSTARTCHAR U_939B\nENCODING 37787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20A0\n57E0\n8AA0\nFBE0\n22A0\nFBE0\n22A0\nAFE0\n7240\n2140\nF880\nENDCHAR\nSTARTCHAR U_939C\nENCODING 37788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n7A40\n4C60\nFBC0\n6E80\n9140\n2E80\nC460\n1F00\n1500\n7FC0\nENDCHAR\nSTARTCHAR U_939D\nENCODING 37789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n57E0\n8A40\nFB80\n2440\nFBA0\n2000\nAFC0\n7440\n27C0\nFC40\nENDCHAR\nSTARTCHAR U_939E\nENCODING 37790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8EA0\nFD20\n26A0\nFFE0\n2480\nAFA0\n74C0\n27A0\nFCE0\nENDCHAR\nSTARTCHAR U_939F\nENCODING 37791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5280\n8140\nFFE0\n25A0\nF240\n25A0\nAFE0\n7380\n2540\nF920\nENDCHAR\nSTARTCHAR U_93A0\nENCODING 37792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n5AA0\n8FE0\nF000\n2FE0\nF100\n2DC0\nB500\n7500\nCFE0\nENDCHAR\nSTARTCHAR U_93A1\nENCODING 37793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5280\n8FE0\nFA40\n2240\nFCA0\n27E0\nAA40\n74A0\n27E0\nF920\nENDCHAR\nSTARTCHAR U_93A2\nENCODING 37794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57C0\n8C40\nFFC0\n2400\nFFE0\n2400\nAFE0\n7560\n2AA0\nFAC0\nENDCHAR\nSTARTCHAR U_93A3\nENCODING 37795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5EE0\nB580\n4A40\nFFE0\n8420\n0A00\nFFE0\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_93A4\nENCODING 37796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5420\n8FE0\nFC20\n27E0\nFD20\n2340\nAFE0\n7180\n22A0\nFCE0\nENDCHAR\nSTARTCHAR U_93A5\nENCODING 37797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5A80\nD540\n5FE0\n5540\n0A20\n7FE0\n0400\n7FC0\n1480\nFFE0\nENDCHAR\nSTARTCHAR U_93A6\nENCODING 37798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n58A0\n8AA0\nFAA0\n2D20\nF240\n27E0\nAD20\n77E0\n2520\nFFE0\nENDCHAR\nSTARTCHAR U_93A7\nENCODING 37799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n57E0\n8800\nFFE0\n2000\nFFC0\n2440\nAFC0\n7440\n2280\nFFE0\nENDCHAR\nSTARTCHAR U_93A8\nENCODING 37800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n57E0\n8C80\nFFE0\n2480\nFFE0\n2480\nAFE0\n7100\n2FE0\nF900\nENDCHAR\nSTARTCHAR U_93A9\nENCODING 37801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n52A0\n8DA0\nFAA0\n2700\nFAE0\n23A0\nAEA0\n7240\n22A0\nFB20\nENDCHAR\nSTARTCHAR U_93AA\nENCODING 37802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n55E0\n8D20\nFFE0\n2520\nFFE0\n2100\nAFE0\n7240\n2180\nFE60\nENDCHAR\nSTARTCHAR U_93AB\nENCODING 37803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4D60\nFCA0\n2340\nFC20\n23C0\nAA40\n7580\n3980\nC660\nENDCHAR\nSTARTCHAR U_93AC\nENCODING 37804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8A40\nFBC0\n2000\nFFE0\n2420\nAFA0\n76A0\n27A0\nFC60\nENDCHAR\nSTARTCHAR U_93AD\nENCODING 37805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22C0\n2300\n53E0\n8800\n75C0\n2540\nF5C0\n2540\nB7E0\n7A40\nC420\nENDCHAR\nSTARTCHAR U_93AE\nENCODING 37806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8900\nFFC0\n2440\nFF40\n25C0\nAC40\n7FE0\n2280\nFC60\nENDCHAR\nSTARTCHAR U_93AF\nENCODING 37807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n5EA0\n8AA0\nFAA0\n2EC0\nFAA0\n2EA0\nA8A0\n7AE0\n2D80\nF880\nENDCHAR\nSTARTCHAR U_93B0\nENCODING 37808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5280\n8FE0\nF280\n2440\nF820\n2FE0\nAAA0\n7AA0\n2AA0\nFFE0\nENDCHAR\nSTARTCHAR U_93B1\nENCODING 37809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57C0\n8900\nFFE0\n2000\nFFC0\n2440\nAFC0\n72A0\n2640\nFB20\nENDCHAR\nSTARTCHAR U_93B2\nENCODING 37810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n5540\n8FE0\nF820\n27C0\nFC40\n27C0\nAA80\n72A0\n24A0\nF860\nENDCHAR\nSTARTCHAR U_93B3\nENCODING 37811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57C0\n8C40\nFFC0\n2440\nFFC0\n2100\nAFE0\n7380\n2540\nF920\nENDCHAR\nSTARTCHAR U_93B4\nENCODING 37812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57C0\n8C40\nFFC0\n2440\nFFC0\n2440\nAFC0\n7280\n2660\nFBC0\nENDCHAR\nSTARTCHAR U_93B5\nENCODING 37813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8820\nF7C0\n2220\nFD40\n2280\nAD80\n72C0\n24A0\nFB20\nENDCHAR\nSTARTCHAR U_93B6\nENCODING 37814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3040\n4F40\nF540\n2FE0\nF040\n2F40\nB540\n7F40\nC140\n0080\nENDCHAR\nSTARTCHAR U_93B7\nENCODING 37815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5480\n8FE0\nFC80\n27E0\nFC80\n27E0\nA820\n7560\n2AA0\nFAE0\nENDCHAR\nSTARTCHAR U_93B8\nENCODING 37816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n37E0\n4C80\nFFC0\n2480\nFFE0\n2000\nAFC0\n72E0\n3A20\nC460\nENDCHAR\nSTARTCHAR U_93B9\nENCODING 37817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3220\n4940\n8BE0\nF480\n23E0\nFC80\n3540\nA620\n7600\nC9E0\nENDCHAR\nSTARTCHAR U_93BA\nENCODING 37818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\n65C0\n9D40\nE5C0\n4940\nED40\n5BC0\nE940\n6940\nCBE0\n0800\nENDCHAR\nSTARTCHAR U_93BB\nENCODING 37819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n3540\n4AA0\nFFC0\n2540\nFCC0\n2E40\nB540\n7FC0\nC440\n0820\nENDCHAR\nSTARTCHAR U_93BC\nENCODING 37820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n3100\n4FE0\nFD20\n27E0\nFD20\n25E0\nB480\n67E0\n3880\nC980\nENDCHAR\nSTARTCHAR U_93BD\nENCODING 37821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n37C0\n4A00\nF7C0\n2280\nF560\n2900\nA380\n7100\n3FC0\nC100\nENDCHAR\nSTARTCHAR U_93BE\nENCODING 37822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n2440\n57C0\n8C40\nFFC0\n2000\nFFE0\n3AA0\nAAA0\n7AA0\nCFE0\nENDCHAR\nSTARTCHAR U_93BF\nENCODING 37823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n3240\n4FE0\nFA40\n23C0\nF880\n23C0\nA880\n77E0\n3880\nC180\nENDCHAR\nSTARTCHAR U_93C0\nENCODING 37824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n5100\n8FE0\nF920\n2D60\nFAA0\n2D60\nAAA0\n7D60\n28A0\nFFE0\nENDCHAR\nSTARTCHAR U_93C1\nENCODING 37825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2A80\n5540\nFFC0\n2540\nFFC0\n2540\nBFE0\n6380\n3540\nC920\nENDCHAR\nSTARTCHAR U_93C2\nENCODING 37826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5800\n8BC0\nFA40\n2BC0\nF800\n2BE0\nAAA0\n7BE0\n2800\nFFE0\nENDCHAR\nSTARTCHAR U_93C3\nENCODING 37827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n5FE0\n8440\nF4E0\n2F40\nF540\n25E0\nA540\n7540\n29A0\nF320\nENDCHAR\nSTARTCHAR U_93C4\nENCODING 37828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8D40\nFFC0\n2540\nFFC0\n2120\nAFE0\n7440\n2240\nF9C0\nENDCHAR\nSTARTCHAR U_93C5\nENCODING 37829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n35E0\n4940\nF880\n2F60\nFDC0\n2D40\nBDC0\n6D40\n39C0\nC940\nENDCHAR\nSTARTCHAR U_93C6\nENCODING 37830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n3540\n4FE0\nF540\n27C0\nF800\n2FC0\nB540\n76C0\nC7C0\n0C60\nENDCHAR\nSTARTCHAR U_93C7\nENCODING 37831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n5EE0\n8900\nF9E0\n2EA0\nFA80\n2AE0\nAA80\n7A80\n2B80\nF4E0\nENDCHAR\nSTARTCHAR U_93C8\nENCODING 37832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n57E0\n8AA0\nFBE0\n26A0\nFFE0\n2480\nAFE0\n7480\n2480\nFBE0\nENDCHAR\nSTARTCHAR U_93C9\nENCODING 37833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4480\nAE80\nF5E0\n5F20\nF580\n5F80\nE480\n6F40\n9540\n0620\nENDCHAR\nSTARTCHAR U_93CA\nENCODING 37834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n11E0\nFF40\n2880\n4F60\n9100\nFFE0\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_93CB\nENCODING 37835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\n5240\n8BC0\n7100\n2FE0\nF920\n2DA0\nBB60\n7920\nC860\nENDCHAR\nSTARTCHAR U_93CC\nENCODING 37836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n5FE0\n8A40\nFFC0\n2440\nFFC0\n2440\nAFE0\n7100\n2280\nFC60\nENDCHAR\nSTARTCHAR U_93CD\nENCODING 37837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5520\n8FE0\nFD20\n27E0\nFA40\n2780\nA920\n77E0\n2540\nFB20\nENDCHAR\nSTARTCHAR U_93CE\nENCODING 37838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5520\n87E0\nF520\n27E0\nF540\n2FE0\nA540\n7FE0\n2100\nF100\nENDCHAR\nSTARTCHAR U_93CF\nENCODING 37839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5240\n8FE0\nFA40\n27E0\nFA40\n23E0\nA820\n77E0\n2020\nFBE0\nENDCHAR\nSTARTCHAR U_93D0\nENCODING 37840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n55A0\n8B60\nFDA0\n2120\nFA80\n2560\nAA80\n7140\n2080\nFF00\nENDCHAR\nSTARTCHAR U_93D1\nENCODING 37841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8280\nFFE0\n2920\nFBA0\n2920\nABA0\n7AA0\n2BA0\nF860\nENDCHAR\nSTARTCHAR U_93D2\nENCODING 37842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n57A0\n84A0\nFFE0\n2300\nF480\n2AC0\nA520\n7240\n2080\nF700\nENDCHAR\nSTARTCHAR U_93D3\nENCODING 37843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n27C0\n5540\n8DC0\n76C0\n2540\nF7C0\n2A00\nB540\n7C60\nCBC0\nENDCHAR\nSTARTCHAR U_93D4\nENCODING 37844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8820\nFFE0\n2100\nFFC0\n2540\nAFC0\n7540\n27C0\nF820\nENDCHAR\nSTARTCHAR U_93D5\nENCODING 37845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8A80\nFFE0\n2AA0\nFFE0\n2A80\nBBA0\n6AC0\n3BA0\nD2E0\nENDCHAR\nSTARTCHAR U_93D6\nENCODING 37846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4940\n7FC0\n4920\n4920\n5FC0\n6220\n5FC0\n8A80\nBFE0\nENDCHAR\nSTARTCHAR U_93D7\nENCODING 37847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5AA0\n8FA0\nF9A0\n2F40\nFAA0\n2F20\nA900\n77C0\n2100\nFFE0\nENDCHAR\nSTARTCHAR U_93D8\nENCODING 37848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n5AE0\n8B20\nFEA0\n2240\nF2A0\n2FE0\nAB20\n7AA0\n2A20\nF2E0\nENDCHAR\nSTARTCHAR U_93D9\nENCODING 37849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24A0\n54A0\n8FE0\nFA80\n23E0\nFE80\n23E0\nAA80\n73E0\n2280\nFBE0\nENDCHAR\nSTARTCHAR U_93DA\nENCODING 37850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n50A0\n8FE0\nFA80\n2B80\nFA80\n2FA0\nAAA0\n7F40\n2AE0\nF720\nENDCHAR\nSTARTCHAR U_93DB\nENCODING 37851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n37E0\n4C20\nF3C0\n2240\nFBC0\n2100\nAFE0\n7520\n3D60\nC100\nENDCHAR\nSTARTCHAR U_93DC\nENCODING 37852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n5340\n8FE0\nFC20\n23C0\nFA40\n23C0\nA900\n73C0\n2100\nFFE0\nENDCHAR\nSTARTCHAR U_93DD\nENCODING 37853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5440\n87C0\nF440\n2FE0\nFAA0\n2FE0\nAA40\n7240\n2180\nFE60\nENDCHAR\nSTARTCHAR U_93DE\nENCODING 37854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8940\nFFE0\n2940\nFFE0\n2D20\nAFE0\n7520\n27E0\nF560\nENDCHAR\nSTARTCHAR U_93DF\nENCODING 37855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n57E0\n8940\nFFE0\n2400\nFE80\n27E0\nAC80\n75E0\n2480\nFBE0\nENDCHAR\nSTARTCHAR U_93E0\nENCODING 37856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n33E0\n4A40\nF580\n2240\nFCA0\n25C0\nAC80\n77E0\n3C80\nCBE0\nENDCHAR\nSTARTCHAR U_93E1\nENCODING 37857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8A80\nFFE0\n2440\nFFC0\n2440\nAFC0\n7280\n22A0\nFC60\nENDCHAR\nSTARTCHAR U_93E2\nENCODING 37858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5280\n8FE0\nFAA0\n2FE0\nF000\n27C0\nA000\n77E0\n2940\nF320\nENDCHAR\nSTARTCHAR U_93E3\nENCODING 37859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n57E0\n8D40\nFFE0\n2540\nFD40\n25C0\nAC00\n7540\n26A0\nFAA0\nENDCHAR\nSTARTCHAR U_93E4\nENCODING 37860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57C0\n8540\nFFE0\n2540\nFFE0\n2920\nAFE0\n7240\n2380\nFC60\nENDCHAR\nSTARTCHAR U_93E5\nENCODING 37861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3FE0\n4A20\nF3E0\n2480\nFDE0\n2520\nADE0\n7520\n3D20\nC5E0\nENDCHAR\nSTARTCHAR U_93E6\nENCODING 37862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n5940\n81C0\nF220\n2C80\nF880\n2A80\nAAE0\n7A80\n2D80\nF8E0\nENDCHAR\nSTARTCHAR U_93E7\nENCODING 37863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DC0\n1160\n7E00\n55C0\n7E80\n8940\nFFE0\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_93E8\nENCODING 37864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\nAA00\nFBE0\nAA80\nFE80\n2900\nFFE0\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_93E9\nENCODING 37865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2F60\n5280\nFF80\n2AE0\nFFA0\n2AA0\nBFA0\n62A0\n3FA0\nC2A0\nENDCHAR\nSTARTCHAR U_93EA\nENCODING 37866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n37E0\n4A80\nFFE0\n2AA0\nFFE0\n2AA0\nBFE0\n6540\n3CC0\nC7C0\nENDCHAR\nSTARTCHAR U_93EB\nENCODING 37867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E20\n34A0\n4FA0\nF6A0\n2DA0\nF560\n2FE0\nA900\n7380\n3D40\nC920\nENDCHAR\nSTARTCHAR U_93EC\nENCODING 37868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n5100\n8FE0\nF920\n2FC0\nF920\n2FE0\nAAA0\n7FE0\n2880\nF980\nENDCHAR\nSTARTCHAR U_93ED\nENCODING 37869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n3520\n4B40\nF7E0\n2380\nFD40\n2220\nA940\n72A0\n36A0\nCB80\nENDCHAR\nSTARTCHAR U_93EE\nENCODING 37870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8900\nFFC0\n2940\nFFE0\n2940\nBFC0\n6B20\n3D40\nD320\nENDCHAR\nSTARTCHAR U_93EF\nENCODING 37871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4900\nFBA0\n2540\nFBA0\n2540\nABA0\n7100\n3A80\nC460\nENDCHAR\nSTARTCHAR U_93F0\nENCODING 37872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3520\n4FE0\nF000\n2EE0\nFAA0\n2EE0\nBAA0\n6EE0\n3AA0\nD560\nENDCHAR\nSTARTCHAR U_93F1\nENCODING 37873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37C0\n4A80\nFFE0\n2440\nFFC0\n2440\nAFC0\n7100\n3FE0\nC100\nENDCHAR\nSTARTCHAR U_93F2\nENCODING 37874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4A00\nFFE0\n2AA0\nFBC0\n2280\nABC0\n7480\n37E0\nC080\nENDCHAR\nSTARTCHAR U_93F3\nENCODING 37875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n3280\n4FE0\nF660\n25A0\nFFE0\n2240\nAA40\n73C0\n3A40\nC3C0\nENDCHAR\nSTARTCHAR U_93F4\nENCODING 37876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E80\n6AE0\n9BA0\nEEA0\n4440\nE5A0\n5600\nD4E0\n74A0\n56A0\nF8E0\nENDCHAR\nSTARTCHAR U_93F5\nENCODING 37877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n5FE0\n8280\nFFE0\n2540\nFFE0\n2540\nAFE0\n7100\n27C0\nF900\nENDCHAR\nSTARTCHAR U_93F6\nENCODING 37878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n57E0\n8C80\nFFE0\n2480\nFFE0\n2480\nB7E0\n6180\n3AC0\nC4A0\nENDCHAR\nSTARTCHAR U_93F7\nENCODING 37879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\n56C0\n8FE0\nF280\n2FE0\nF100\n27C0\nA900\n77E0\n2280\nFC60\nENDCHAR\nSTARTCHAR U_93F8\nENCODING 37880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8540\nF7C0\n2540\nF7C0\n2940\nAFA0\n76A0\n2A40\nF3C0\nENDCHAR\nSTARTCHAR U_93F9\nENCODING 37881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2DE0\n5520\n85E0\nFC80\n2BE0\nFAA0\n2EA0\nABE0\n7280\n22A0\nFDE0\nENDCHAR\nSTARTCHAR U_93FA\nENCODING 37882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F40\n55A0\n8240\nFDE0\n2540\nFE60\n29C0\nAE40\n7280\n2340\nFC20\nENDCHAR\nSTARTCHAR U_93FB\nENCODING 37883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n5340\n8FE0\nFB40\n2520\nFA40\n27E0\nA940\n75E0\n2240\nFC40\nENDCHAR\nSTARTCHAR U_93FC\nENCODING 37884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n27E0\n5940\nF7E0\n2100\nF7E0\n2520\nB560\n6380\n3540\nC920\nENDCHAR\nSTARTCHAR U_93FD\nENCODING 37885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5140\n8FE0\nF140\n27C0\nFBA0\n2D60\nABA0\n7D60\n2BA0\nF120\nENDCHAR\nSTARTCHAR U_93FE\nENCODING 37886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\n5F80\n8AE0\nFAA0\n2FA0\nFAA0\n2EA0\nAAA0\n7E40\n2AA0\nFB20\nENDCHAR\nSTARTCHAR U_93FF\nENCODING 37887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n5FE0\n8820\nF7C0\n2440\nF7C0\n2100\nAFE0\n7580\n2940\nF120\nENDCHAR\nSTARTCHAR U_9400\nENCODING 37888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37C0\n4D40\nF7C0\n2000\nFFE0\n2540\nB4C0\n67C0\n3280\nCC60\nENDCHAR\nSTARTCHAR U_9401\nENCODING 37889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A00\n5F20\nAAC0\nEE80\n4A80\nEEE0\n4AA0\n6AA0\nDFA0\n6AA0\nD120\nENDCHAR\nSTARTCHAR U_9402\nENCODING 37890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n3280\n4EE0\nFAA0\n2EE0\nF280\n2FE0\nB920\n6FE0\n3920\nCFE0\nENDCHAR\nSTARTCHAR U_9403\nENCODING 37891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57C0\n8900\nFFE0\n2440\nFEE0\n2440\nAFE0\n7280\n22A0\nFC60\nENDCHAR\nSTARTCHAR U_9404\nENCODING 37892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n37C0\n4A80\nFFE0\n2100\nFFC0\n2540\nAFC0\n7540\n37C0\nCC60\nENDCHAR\nSTARTCHAR U_9405\nENCODING 37893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5500\n39E0\n7E20\n5540\n7E80\n5560\n1F80\n6260\n1FC0\n0A80\n7FE0\nENDCHAR\nSTARTCHAR U_9406\nENCODING 37894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE440\nAFE0\nC540\nAB80\nE540\n8A20\nFFE0\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_9407\nENCODING 37895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5920\n8540\nFFE0\n2540\nF920\n27C0\nAD40\n77C0\n2540\nFFC0\nENDCHAR\nSTARTCHAR U_9408\nENCODING 37896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n3100\n4FE0\nF280\n27C0\nFAA0\n2FE0\nB820\n6BA0\n3AA0\nCBE0\nENDCHAR\nSTARTCHAR U_9409\nENCODING 37897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n54A0\n8FE0\nFC80\n27E0\nFA40\n27E0\nAA40\n77E0\n2240\nFC20\nENDCHAR\nSTARTCHAR U_940A\nENCODING 37898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n5B40\n8BC0\nFB40\n2DE0\nFA80\n2BE0\nADA0\n7EA0\n2920\nF860\nENDCHAR\nSTARTCHAR U_940B\nENCODING 37899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BC0\n5640\n87C0\nFA40\n27E0\nF900\n2BE0\nAD60\n7AA0\n2D20\nFAC0\nENDCHAR\nSTARTCHAR U_940C\nENCODING 37900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n5480\n8FE0\nFD20\n27E0\nFA40\n2580\nAA80\n75C0\n22A0\nFD80\nENDCHAR\nSTARTCHAR U_940D\nENCODING 37901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5140\n8FE0\nF2A0\n2480\nFFE0\n2AA0\nAC60\n7BA0\n2AA0\nFBE0\nENDCHAR\nSTARTCHAR U_940E\nENCODING 37902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n57E0\n8C80\nFFE0\n2480\nFFE0\n2480\nAFE0\n7540\n2AA0\nFAA0\nENDCHAR\nSTARTCHAR U_940F\nENCODING 37903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n5FE0\n8280\nFFE0\n2AA0\nFC60\n2FE0\nA040\n7FE0\n2440\nF2C0\nENDCHAR\nSTARTCHAR U_9410\nENCODING 37904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8AA0\nF440\n27E0\nFC40\n27C0\nAC40\n77C0\n2540\nFB20\nENDCHAR\nSTARTCHAR U_9411\nENCODING 37905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5440\n89E0\nFA40\n2DE0\nF400\n2AE0\nAFA0\n74A0\n2BE0\nFAA0\nENDCHAR\nSTARTCHAR U_9412\nENCODING 37906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n57E0\n8A40\nF5C0\n2920\nFFE0\n2220\nAFC0\n7240\n2540\nF880\nENDCHAR\nSTARTCHAR U_9413\nENCODING 37907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n5F80\n8AE0\nFEA0\n21A0\nFEA0\n22A0\nA440\n7E40\n24A0\nFD20\nENDCHAR\nSTARTCHAR U_9414\nENCODING 37908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5280\n8FE0\nFAA0\n2FE0\nF440\n27C0\nAC40\n7FE0\n2100\nF900\nENDCHAR\nSTARTCHAR U_9415\nENCODING 37909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5540\n8FE0\nFA40\n26C0\nFB60\n27C0\nAC40\n77C0\n2440\nFFC0\nENDCHAR\nSTARTCHAR U_9416\nENCODING 37910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2320\n5540\n8FE0\nF540\n2FE0\nF900\n27E0\nACA0\n7640\n24A0\nFB20\nENDCHAR\nSTARTCHAR U_9417\nENCODING 37911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n3AA0\n4EE0\nFAA0\n2EE0\nFBA0\n2AA0\nBBA0\n6AA0\n3DA0\nC860\nENDCHAR\nSTARTCHAR U_9418\nENCODING 37912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8C40\nFA80\n27E0\nFD40\n27C0\nB540\n6FE0\n3100\nCFE0\nENDCHAR\nSTARTCHAR U_9419\nENCODING 37913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2740\n55A0\n8A40\nFBA0\n2420\nFFC0\n2440\nAFC0\n7440\n2280\nFFE0\nENDCHAR\nSTARTCHAR U_941A\nENCODING 37914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3280\n4EE0\nF420\n26E0\nFA80\n27E0\nA940\n7620\n3A60\nC1C0\nENDCHAR\nSTARTCHAR U_941B\nENCODING 37915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n3440\n4FC0\nF440\n2FE0\nF800\n27C0\nAC40\n77C0\n3540\nCB20\nENDCHAR\nSTARTCHAR U_941C\nENCODING 37916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7DE0\n2640\n7D40\n0880\n7560\n1F00\n3480\nDF60\n1500\n7FE0\nENDCHAR\nSTARTCHAR U_941D\nENCODING 37917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n3FE0\n4D40\nFA40\n2FE0\nFAA0\n2FC0\nBA40\n6A40\n3AA0\nD520\nENDCHAR\nSTARTCHAR U_941E\nENCODING 37918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n3040\n4BC0\nF040\n27E0\nFAA0\n27E0\nA840\n77E0\n3A40\nC0C0\nENDCHAR\nSTARTCHAR U_941F\nENCODING 37919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2EE0\n5440\nFEE0\n2440\nFAA0\n27C0\nAC40\n77C0\n3C40\nC7C0\nENDCHAR\nSTARTCHAR U_9420\nENCODING 37920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5280\n8FE0\nFAA0\n26C0\nFA80\n2FE0\nAC40\n77C0\n2440\nFFC0\nENDCHAR\nSTARTCHAR U_9421\nENCODING 37921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n2EC0\n54A0\nFFE0\n2080\nFEA0\n2AC0\nBE80\n6AA0\n3560\nCE20\nENDCHAR\nSTARTCHAR U_9422\nENCODING 37922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\nF5E0\n2880\n75C0\n6AA0\nA4A0\n3B80\nC4E0\n1F80\n1500\n7FC0\nENDCHAR\nSTARTCHAR U_9423\nENCODING 37923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n3540\n4FE0\nFAA0\n2380\nF900\n27C0\nA900\n77E0\n3900\nC300\nENDCHAR\nSTARTCHAR U_9424\nENCODING 37924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n3280\n4BA0\nFAA0\n2BA0\nF820\n2EE0\nA280\n7EE0\n2AA0\nD2A0\nENDCHAR\nSTARTCHAR U_9425\nENCODING 37925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n37C0\n4900\nF7C0\n2100\nFFE0\n2540\nAFE0\n7440\n3C40\nC7C0\nENDCHAR\nSTARTCHAR U_9426\nENCODING 37926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n3AA0\n4EE0\nFAA0\n2FE0\nFAA0\n2FE0\nBAA0\n6AA0\n3CA0\nC860\nENDCHAR\nSTARTCHAR U_9427\nENCODING 37927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n5EE0\nFAA0\n2FE0\nFAA0\n2BA0\nBAA0\n6BA0\n3820\nC860\nENDCHAR\nSTARTCHAR U_9428\nENCODING 37928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n57E0\n8A80\nFFE0\n24A0\nFFE0\n2440\nAFC0\n7440\n27C0\nFC60\nENDCHAR\nSTARTCHAR U_9429\nENCODING 37929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A20\n5540\n8BE0\nF920\n26C0\nFD80\n26C0\nADA0\n76A0\n2500\nFBE0\nENDCHAR\nSTARTCHAR U_942A\nENCODING 37930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n5100\n8FE0\nFD20\n27E0\nFD40\n27E0\nAD40\n77E0\n2520\nFA40\nENDCHAR\nSTARTCHAR U_942B\nENCODING 37931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n57E0\n8C80\nF7E0\n2480\nF7E0\n2400\nAEE0\n7BA0\n2820\nF860\nENDCHAR\nSTARTCHAR U_942C\nENCODING 37932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25C0\n5500\n8FE0\nF0A0\n2FE0\nF880\n2FA0\nAAA0\n7F40\n2AA0\nF520\nENDCHAR\nSTARTCHAR U_942D\nENCODING 37933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n37E0\n4DA0\nF7E0\n27A0\nFD60\n2100\nB7E0\n6100\n3A80\nC460\nENDCHAR\nSTARTCHAR U_942E\nENCODING 37934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8A80\nFFE0\n2AA0\nFFE0\n2AA0\nAFE0\n7A80\n2EC0\nF2A0\nENDCHAR\nSTARTCHAR U_942F\nENCODING 37935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n37E0\n4A40\nF100\n27E0\nF900\n27E0\nB240\n67C0\n3A40\nC3C0\nENDCHAR\nSTARTCHAR U_9430\nENCODING 37936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5240\n83C0\nF800\n2EE0\nFAA0\n2EE0\nA100\n7FE0\n2540\nF920\nENDCHAR\nSTARTCHAR U_9431\nENCODING 37937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5280\n8440\nFBA0\n2000\nFEE0\n2AA0\nAEE0\n7440\n2AA0\nF120\nENDCHAR\nSTARTCHAR U_9432\nENCODING 37938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5AA0\n8FE0\nF400\n27E0\nF920\n27E0\nAD60\n77E0\n2120\nF7C0\nENDCHAR\nSTARTCHAR U_9433\nENCODING 37939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5100\n8FE0\nF920\n2BA0\nFD60\n27C0\nAD40\n77C0\n2540\nFFC0\nENDCHAR\nSTARTCHAR U_9434\nENCODING 37940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n37E0\n4D00\nF5A0\n2740\nFCE0\n2740\nADE0\n7540\n3F40\nC840\nENDCHAR\nSTARTCHAR U_9435\nENCODING 37941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n54A0\n8FE0\nFA80\n2E80\nF0A0\n2FA0\nA4C0\n7EA0\n2560\nFE20\nENDCHAR\nSTARTCHAR U_9436\nENCODING 37942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5AA0\n8FE0\nF000\n2FE0\nFC40\n27C0\nA920\n76C0\n2240\nF320\nENDCHAR\nSTARTCHAR U_9437\nENCODING 37943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n57E0\n8A40\nFFE0\n2540\nFDC0\n27E0\nA900\n77E0\n2540\nF920\nENDCHAR\nSTARTCHAR U_9438\nENCODING 37944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5AA0\n8FE0\nF900\n27E0\nFA80\n27C0\nA900\n77E0\n2100\nF900\nENDCHAR\nSTARTCHAR U_9439\nENCODING 37945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BC0\n3640\n4B40\nF7E0\n2420\nFFA0\n26A0\nB7A0\n6460\n3800\nC7E0\nENDCHAR\nSTARTCHAR U_943A\nENCODING 37946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n5540\n8FE0\nFAA0\n2380\nF800\n27E0\nAD20\n77E0\n2520\nFFE0\nENDCHAR\nSTARTCHAR U_943B\nENCODING 37947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n5100\n8FE0\nFD20\n27E0\nFD00\n26A0\nADC0\n7680\n25C0\nFAA0\nENDCHAR\nSTARTCHAR U_943C\nENCODING 37948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\n8D40\nFFE0\n2440\nFFC0\n2440\nAFC0\n7440\n27C0\nFC60\nENDCHAR\nSTARTCHAR U_943D\nENCODING 37949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n57E0\n8880\nFBE0\n2540\nFFE0\n2480\nAFE0\n7480\n2C80\nF3E0\nENDCHAR\nSTARTCHAR U_943E\nENCODING 37950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n7940\nCBE0\n7C80\n0A80\nFFE0\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_943F\nENCODING 37951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57C0\n8A80\nFFE0\n2440\nFFC0\n2440\nAFC0\n72A0\n2660\nF9C0\nENDCHAR\nSTARTCHAR U_9440\nENCODING 37952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n5540\n8FE0\nF520\n2C40\nF7A0\n2200\nA7C0\n7C80\n2300\nFCE0\nENDCHAR\nSTARTCHAR U_9441\nENCODING 37953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n26A0\n5560\nFCA0\n27E0\nFA40\n23A0\nB4A0\n6300\n3980\nC660\nENDCHAR\nSTARTCHAR U_9442\nENCODING 37954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n2700\n5100\nFFE0\n2540\nFEC0\n27C0\nB100\n67E0\n3D40\nCAA0\nENDCHAR\nSTARTCHAR U_9443\nENCODING 37955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2760\n25A0\n5360\nFCA0\n27E0\nFC80\n27E0\nB480\n67E0\n3C80\nC7E0\nENDCHAR\nSTARTCHAR U_9444\nENCODING 37956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8100\nFFE0\n2120\nFFC0\n2040\nAFE0\n7B40\n2EC0\nF0C0\nENDCHAR\nSTARTCHAR U_9445\nENCODING 37957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5EE0\n8540\nFAA0\n2FE0\nF920\n2FE0\nA900\n7380\n2540\nF920\nENDCHAR\nSTARTCHAR U_9446\nENCODING 37958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2B40\n5A40\n8F40\nFAE0\n2440\nFF40\n24C0\nAF40\n7440\n2740\nFCC0\nENDCHAR\nSTARTCHAR U_9447\nENCODING 37959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n82A0\nFD40\n2560\nFD40\n27C0\nAC40\n77C0\n2840\nF040\nENDCHAR\nSTARTCHAR U_9448\nENCODING 37960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5540\n8FE0\nF920\n2DA0\nFB60\n2DA0\nAB60\n7DA0\n2920\nF960\nENDCHAR\nSTARTCHAR U_9449\nENCODING 37961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5FE0\n8540\nFFE0\n2100\nFFE0\n2440\nBFE0\n6AA0\n2AA0\nFFE0\nENDCHAR\nSTARTCHAR U_944A\nENCODING 37962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n5FE0\n8240\nFFE0\n2480\nFFE0\n2480\nAFE0\n7240\n2180\nFE60\nENDCHAR\nSTARTCHAR U_944B\nENCODING 37963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA940\nFAA0\nA940\nFFE0\n2A80\nFFE0\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_944C\nENCODING 37964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8820\nFFE0\n2540\nF7C0\n2C40\nAFC0\n7440\n27C0\nFC60\nENDCHAR\nSTARTCHAR U_944D\nENCODING 37965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nAAA0\nAAA0\nFBE0\n5540\n8A20\n3F80\nC460\n3F80\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_944E\nENCODING 37966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2480\n55C0\nFD40\n27E0\nFD40\n25C0\nB540\n6480\n3D40\nC7E0\nENDCHAR\nSTARTCHAR U_944F\nENCODING 37967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8AA0\nF5E0\n2000\nFFE0\n2AA0\nAFE0\n77C0\n2100\nF300\nENDCHAR\nSTARTCHAR U_9450\nENCODING 37968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5100\n8FE0\nF920\n2BA0\nFD60\n2FE0\nA100\n7FE0\n2AA0\nFAE0\nENDCHAR\nSTARTCHAR U_9451\nENCODING 37969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F40\n5A40\n8F60\nF940\n2FA0\nFA20\n2A00\nAFE0\n7AA0\n2AA0\nFFE0\nENDCHAR\nSTARTCHAR U_9452\nENCODING 37970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\nA3E0\nFD00\n8880\nFFE0\nAAA0\nFFE0\n0400\n7FC0\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_9453\nENCODING 37971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2BE0\n52A0\nFFE0\n2A40\nFA80\n2BE0\nBA20\n6BE0\n3800\nD7E0\nENDCHAR\nSTARTCHAR U_9454\nENCODING 37972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27E0\n5420\nFFE0\n2540\nFB80\n2440\nBFE0\n6100\n3540\nCB20\nENDCHAR\nSTARTCHAR U_9455\nENCODING 37973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n5880\n8FE0\nFAA0\n2AA0\nFFC0\n2440\nAFC0\n7440\n27C0\nFC60\nENDCHAR\nSTARTCHAR U_9456\nENCODING 37974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n27E0\n5240\nFFE0\n2520\nFFE0\n2140\nBFE0\n6540\n3EA0\nC960\nENDCHAR\nSTARTCHAR U_9457\nENCODING 37975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2E80\n54E0\n8FA0\nF4A0\n2FA0\nF440\n2920\nAD40\n7380\n2D40\nF320\nENDCHAR\nSTARTCHAR U_9458\nENCODING 37976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n27C0\n5540\nFFC0\n2540\nFFE0\n2AA0\nBFE0\n6AA0\n3FE0\nC820\nENDCHAR\nSTARTCHAR U_9459\nENCODING 37977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2CA0\n55E0\nFE80\n25A0\nFD40\n27E0\nB420\n67E0\n3C20\nC7E0\nENDCHAR\nSTARTCHAR U_945A\nENCODING 37978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2EE0\n5440\nFFE0\n2AA0\nFFE0\n2440\nB7C0\n6440\n37C0\nCC60\nENDCHAR\nSTARTCHAR U_945B\nENCODING 37979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n27E0\n5540\nFFE0\n2540\nFFE0\n2540\nB7C0\n6540\n3BC0\nCA20\nENDCHAR\nSTARTCHAR U_945C\nENCODING 37980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\n5AA0\nF380\n2000\nFFC0\n2540\nB540\n67C0\n3A80\nC440\nENDCHAR\nSTARTCHAR U_945D\nENCODING 37981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n57E0\n8A40\nF9E0\n2540\nFCA0\n27E0\nAC80\n77E0\n2A80\nF1E0\nENDCHAR\nSTARTCHAR U_945E\nENCODING 37982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n5540\n8AA0\nFFE0\n2AA0\nFFE0\n2540\nAFC0\n7540\n25C0\nFF20\nENDCHAR\nSTARTCHAR U_945F\nENCODING 37983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n5100\nFFE0\n2AA0\nFFE0\n2540\nB540\n67C0\n3A80\nC440\nENDCHAR\nSTARTCHAR U_9460\nENCODING 37984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n5BC0\n86A0\nFBA0\n2AC0\nFFA0\n2100\nAFE0\n7380\n2540\nF920\nENDCHAR\nSTARTCHAR U_9461\nENCODING 37985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n25E0\n5500\nFFE0\n2000\nFFE0\n2AA0\nBFE0\n6AA0\n3920\nCFE0\nENDCHAR\nSTARTCHAR U_9462\nENCODING 37986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n5100\n8FE0\nFD20\n27E0\nFD40\n27C0\nAD40\n77C0\n2AA0\nF5C0\nENDCHAR\nSTARTCHAR U_9463\nENCODING 37987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8AA0\nFFE0\n2A00\nFAA0\n2BC0\nAAA0\n7BE0\n2540\nFAA0\nENDCHAR\nSTARTCHAR U_9464\nENCODING 37988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5440\n87C0\nF440\n2FE0\nF280\n2FE0\nA540\n7BA0\n2540\nFB20\nENDCHAR\nSTARTCHAR U_9465\nENCODING 37989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2480\n57E0\nFCA0\n27E0\nFCA0\n27E0\nBC20\n67E0\n3C20\nC7E0\nENDCHAR\nSTARTCHAR U_9466\nENCODING 37990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F00\n2AE0\n5FA0\nEA40\n2FA0\nF000\n27C0\nB540\n67C0\n3A80\nC440\nENDCHAR\nSTARTCHAR U_9467\nENCODING 37991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5AA0\nF7C0\n2280\nF7C0\n2640\nB540\n67C0\n3AA0\nC4E0\nENDCHAR\nSTARTCHAR U_9468\nENCODING 37992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n24E0\n5F80\n8AE0\nF420\n2FE0\nFA80\n2EE0\nAA80\n7EE0\n2A80\nFAE0\nENDCHAR\nSTARTCHAR U_9469\nENCODING 37993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5100\n8FE0\nFBA0\n2FE0\nF100\n2FE0\nABA0\n7FE0\n2100\nFFE0\nENDCHAR\nSTARTCHAR U_946A\nENCODING 37994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n5100\n8FE0\nFD20\n27E0\nFD40\n27C0\nAD40\n77E0\n24A0\nFFE0\nENDCHAR\nSTARTCHAR U_946B\nENCODING 37995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n1500\n7FC0\n1500\nFFE0\n2080\n5140\nAAA0\nFFE0\nAAA0\nFFE0\nENDCHAR\nSTARTCHAR U_946C\nENCODING 37996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2F80\n2AE0\n5F40\nEA20\n2FC0\nF540\n26C0\nB540\n67C0\n3AA0\nC4E0\nENDCHAR\nSTARTCHAR U_946D\nENCODING 37997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n5AA0\n8EE0\nFAA0\n2FE0\nF920\n2FE0\nAAA0\n7FE0\n2BA0\nFD60\nENDCHAR\nSTARTCHAR U_946E\nENCODING 37998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n57E0\n8A40\nF7E0\n2AA0\nF7E0\n2AA0\nAC40\n77E0\n2540\nF4C0\nENDCHAR\nSTARTCHAR U_946F\nENCODING 37999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AC0\n55A0\n8FE0\nFA80\n2BA0\nFAA0\n2BC0\nAA80\n7AA0\n2B60\nFE20\nENDCHAR\nSTARTCHAR U_9470\nENCODING 38000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n5440\n8BA0\nF000\n2FE0\nFAA0\n2FE0\nAAA0\n7FE0\n2AA0\nFAA0\nENDCHAR\nSTARTCHAR U_9471\nENCODING 38001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n57C0\n8C40\nF7C0\n24C0\nF4A0\n27E0\nAD40\n77C0\n22A0\nFCE0\nENDCHAR\nSTARTCHAR U_9472\nENCODING 38002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8AA0\nFEE0\n2280\nFFE0\n2280\nAFE0\n72A0\n2640\nFB20\nENDCHAR\nSTARTCHAR U_9473\nENCODING 38003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\n8AA0\nF7C0\n2280\nFFE0\n2440\nAFC0\n75E0\n2500\nFBE0\nENDCHAR\nSTARTCHAR U_9474\nENCODING 38004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2520\n57E0\n8D00\nFFE0\n2480\nF7E0\n2480\nAFE0\n7BA0\n2EE0\nFBA0\nENDCHAR\nSTARTCHAR U_9475\nENCODING 38005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n5FE0\n8280\nFEE0\n2AA0\nFFE0\n2480\nAFE0\n7480\n2480\nFFE0\nENDCHAR\nSTARTCHAR U_9476\nENCODING 38006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n57E0\n8AA0\nF7E0\n5440\nFFC0\n4540\nDFE0\n7540\n57C0\nECA0\nENDCHAR\nSTARTCHAR U_9477\nENCODING 38007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5240\n8BC0\nFA60\n27C0\nF840\n27E0\nAD40\n77C0\n2540\nFFC0\nENDCHAR\nSTARTCHAR U_9478\nENCODING 38008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5540\n87C0\nF540\n2FE0\nFAA0\n2FE0\nAAA0\n7FE0\n2100\nFFE0\nENDCHAR\nSTARTCHAR U_9479\nENCODING 38009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5AA0\nF540\n2C60\nF7C0\n2540\nB7C0\n6540\n3FC0\nC560\nENDCHAR\nSTARTCHAR U_947A\nENCODING 38010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n2AA0\n5EE0\nEAA0\n2EE0\nF500\n2FE0\nB900\n6FE0\n3900\nCFE0\nENDCHAR\nSTARTCHAR U_947B\nENCODING 38011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2EE0\n5540\nFEE0\n2540\nF7C0\n2540\nB920\n67C0\n3100\nC300\nENDCHAR\nSTARTCHAR U_947C\nENCODING 38012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5AA0\n8FE0\nF540\n2BE0\nFF40\n25E0\nA940\n7FE0\n2B40\nF5E0\nENDCHAR\nSTARTCHAR U_947D\nENCODING 38013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n5FE0\n8440\nFFE0\n2A40\nFFE0\n2440\nAFC0\n7440\n27C0\nFC60\nENDCHAR\nSTARTCHAR U_947E\nENCODING 38014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E40\nA0A0\n4E40\nE0E0\n4E40\nAAA0\n1F00\nE4E0\n3F80\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_947F\nENCODING 38015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n29C0\nFD40\n2A60\nFDC0\nA480\nFF40\n1520\nE4E0\n3F80\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_9480\nENCODING 38016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4740\nA460\n1F40\nF5E0\n5F40\nF040\n5E40\nDA40\nFF40\n55A0\nF520\nENDCHAR\nSTARTCHAR U_9481\nENCODING 38017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n5AA0\n8EE0\nFAA0\n2FE0\nF7E0\n2480\nAFE0\n7240\n2180\nFE60\nENDCHAR\nSTARTCHAR U_9482\nENCODING 38018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n5FE0\n84A0\nFFE0\n2AA0\nFFE0\n2100\nAFC0\n7100\n2FE0\nFAA0\nENDCHAR\nSTARTCHAR U_9483\nENCODING 38019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5820\n8FE0\nF900\n2FE0\nFAA0\n2FE0\nAD60\n7FA0\n2920\nFFC0\nENDCHAR\nSTARTCHAR U_9484\nENCODING 38020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n2FE0\n5440\nFEE0\n2AA0\nFEE0\n2AA0\nBFE0\n6920\n3BA0\nCD60\nENDCHAR\nSTARTCHAR U_9485\nENCODING 38021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2000\n7C00\n8000\n7800\n2000\nFC00\n2000\n2800\n3000\n2000\nENDCHAR\nSTARTCHAR U_9486\nENCODING 38022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\n7A00\n8200\nFA00\n2200\nFA00\n2200\n2A20\n3220\n21E0\nENDCHAR\nSTARTCHAR U_9487\nENCODING 38023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n43C0\n7840\n8080\nF880\n2100\nF900\n2200\n2A20\n3220\n21E0\nENDCHAR\nSTARTCHAR U_9488\nENCODING 38024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4080\n7880\n8080\nFBE0\n2080\nF880\n2080\n2880\n3080\n2080\nENDCHAR\nSTARTCHAR U_9489\nENCODING 38025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47E0\n7880\n8080\nF880\n2080\nF880\n2080\n2880\n3080\n2380\nENDCHAR\nSTARTCHAR U_948A\nENCODING 38026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4020\n4020\n7920\n8120\nF920\n2120\nF920\n2120\n2820\n3020\n20E0\nENDCHAR\nSTARTCHAR U_948B\nENCODING 38027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7900\n8100\nF980\n2140\nF920\n2120\n2900\n3100\n2100\nENDCHAR\nSTARTCHAR U_948C\nENCODING 38028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4020\n7840\n8080\nF880\n2080\nF880\n2080\n2C80\n3280\n2100\nENDCHAR\nSTARTCHAR U_948D\nENCODING 38029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4080\n7880\n8080\nFBE0\n2080\nF880\n2080\n2880\n3080\n27E0\nENDCHAR\nSTARTCHAR U_948E\nENCODING 38030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n4380\n7880\n8080\nF880\n27E0\nF880\n2080\n2880\n3080\n2080\nENDCHAR\nSTARTCHAR U_948F\nENCODING 38031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n4220\n7AA0\n82A0\nFAA0\n22A0\nFAA0\n22A0\n2AA0\n34A0\n2820\nENDCHAR\nSTARTCHAR U_9490\nENCODING 38032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n4080\n7900\n8220\nF840\n2080\nF920\n2040\n2880\n3100\n2600\nENDCHAR\nSTARTCHAR U_9491\nENCODING 38033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7A40\n4240\nFA80\n22E0\n2240\nFB40\n2280\n2C80\n3540\n2A20\nENDCHAR\nSTARTCHAR U_9492\nENCODING 38034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n4240\n7A40\n8240\nFB40\n22C0\nFA40\n2240\n2A40\n3440\n2860\nENDCHAR\nSTARTCHAR U_9493\nENCODING 38035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\n7BE0\n8420\nF820\n2220\nF920\n2120\n2820\n3120\n20C0\nENDCHAR\nSTARTCHAR U_9494\nENCODING 38036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n42E0\n7820\n8420\nFC20\n2420\nFC20\n2420\n2C20\n3420\n2460\nENDCHAR\nSTARTCHAR U_9495\nENCODING 38037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7900\n87E0\nFA40\n2240\nFC40\n2280\n2980\n3140\n2620\nENDCHAR\nSTARTCHAR U_9496\nENCODING 38038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n7880\n4100\nFA00\n27E0\n22A0\nFCA0\n2120\n2A20\n34A0\n2040\nENDCHAR\nSTARTCHAR U_9497\nENCODING 38039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47E0\n7AA0\n82A0\nFA40\n2240\nF940\n2080\n2980\n3240\n2420\nENDCHAR\nSTARTCHAR U_9498\nENCODING 38040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7A40\n4240\nFA40\n2FE0\n2240\nFA40\n2240\n2A40\n3440\n2840\nENDCHAR\nSTARTCHAR U_9499\nENCODING 38041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4080\n7A80\n82E0\nFC80\n27E0\nF820\n2020\n2820\n3120\n20C0\nENDCHAR\nSTARTCHAR U_949A\nENCODING 38042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47E0\n7880\n8080\nF9C0\n22A0\nFCA0\n2080\n2880\n3080\n2080\nENDCHAR\nSTARTCHAR U_949B\nENCODING 38043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7900\n87E0\nF900\n2100\nF900\n2180\n2A40\n3560\n2920\nENDCHAR\nSTARTCHAR U_949C\nENCODING 38044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n4200\n7A00\n83E0\nFA20\n2220\nFBE0\n2220\n2A00\n3200\n23E0\nENDCHAR\nSTARTCHAR U_949D\nENCODING 38045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\n7900\n8540\nFD40\n2540\nFFC0\n2100\n2920\n3120\n20E0\nENDCHAR\nSTARTCHAR U_949E\nENCODING 38046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4080\n7AC0\n82A0\nFAA0\n2480\nF8A0\n2020\n2840\n3180\n2600\nENDCHAR\nSTARTCHAR U_949F\nENCODING 38047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7FE0\n8520\n7520\n2520\nFFE0\n2100\n2900\n3100\n2100\nENDCHAR\nSTARTCHAR U_94A0\nENCODING 38048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4080\n7FE0\n84A0\nFCA0\n24A0\nFD60\n2620\n2C20\n3420\n2460\nENDCHAR\nSTARTCHAR U_94A1\nENCODING 38049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\n7D40\n8540\nFD40\n2540\nFD40\n2540\n2A80\n3440\n2820\nENDCHAR\nSTARTCHAR U_94A2\nENCODING 38050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4420\n7CA0\n86A0\nFD20\n2520\nFDA0\n2660\n2C20\n3420\n24E0\nENDCHAR\nSTARTCHAR U_94A3\nENCODING 38051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n4380\n7A00\n83E0\nFA20\n2220\nFB40\n22C0\n2A80\n3540\n2A20\nENDCHAR\nSTARTCHAR U_94A4\nENCODING 38052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4280\n7C40\n8120\nF880\n2000\nFFC0\n2080\n2880\n3100\n2100\nENDCHAR\nSTARTCHAR U_94A5\nENCODING 38053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n4220\n7A20\n83E0\nFA20\n2220\nFBE0\n2220\n2A20\n34A0\n2840\nENDCHAR\nSTARTCHAR U_94A6\nENCODING 38054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\n7BE0\n8220\nFD40\n2100\nF900\n2280\n2A80\n3440\n2820\nENDCHAR\nSTARTCHAR U_94A7\nENCODING 38055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\n7BE0\n8420\nF920\n20A0\nF8A0\n2720\n2A20\n3020\n20C0\nENDCHAR\nSTARTCHAR U_94A8\nENCODING 38056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\n7C40\n8440\nFD80\n2400\nFFE0\n2020\n2FA0\n3020\n20C0\nENDCHAR\nSTARTCHAR U_94A9\nENCODING 38057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\n7BE0\n8420\nF920\n2120\nFAA0\n27E0\n2820\n3020\n20C0\nENDCHAR\nSTARTCHAR U_94AA\nENCODING 38058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4080\n7FE0\n8000\nFB80\n2280\nFA80\n2280\n2AA0\n34A0\n2860\nENDCHAR\nSTARTCHAR U_94AB\nENCODING 38059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4080\n7FE0\n8100\nF9E0\n2120\nF920\n2120\n2A20\n34E0\n2840\nENDCHAR\nSTARTCHAR U_94AC\nENCODING 38060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4080\n7AA0\n82A0\nFAC0\n2480\nF880\n2080\n2980\n3240\n2420\nENDCHAR\nSTARTCHAR U_94AD\nENCODING 38061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n4240\n7940\n8040\nFA40\n2140\nF8E0\n2740\n2840\n3040\n2040\nENDCHAR\nSTARTCHAR U_94AE\nENCODING 38062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47C0\n7940\n8140\nF940\n27C0\nFA40\n2240\n2A40\n3240\n2FE0\nENDCHAR\nSTARTCHAR U_94AF\nENCODING 38063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47E0\n7CA0\n84A0\nFCA0\n27E0\nFC00\n2400\n2C20\n3420\n23E0\nENDCHAR\nSTARTCHAR U_94B0\nENCODING 38064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47E0\n7900\n8100\nF900\n27C0\nF900\n2140\n2920\n3100\n2FE0\nENDCHAR\nSTARTCHAR U_94B1\nENCODING 38065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4240\n72E0\n8700\nF260\n2780\nF240\n2280\n2120\n32A0\n2C60\nENDCHAR\nSTARTCHAR U_94B2\nENCODING 38066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4080\n7880\n8080\nFA80\n22E0\nFA80\n2280\n2A80\n3280\n2FE0\nENDCHAR\nSTARTCHAR U_94B3\nENCODING 38067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n4240\n7FE0\n8240\nFA40\n23C0\nFA40\n2240\n2A40\n33C0\n2240\nENDCHAR\nSTARTCHAR U_94B4\nENCODING 38068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4080\n7FE0\n8080\nF880\n23E0\nFA20\n2220\n2A20\n33E0\n2220\nENDCHAR\nSTARTCHAR U_94B5\nENCODING 38069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7FE0\n8100\nFB80\n2540\nF920\n2100\n2FC0\n3100\n2100\nENDCHAR\nSTARTCHAR U_94B6\nENCODING 38070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4040\n7840\n8740\nFD40\n2540\nFF40\n2540\n2840\n3140\n2080\nENDCHAR\nSTARTCHAR U_94B7\nENCODING 38071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4400\n7C00\n85C0\nFD40\n2540\nFDC0\n2540\n2C00\n3400\n27E0\nENDCHAR\nSTARTCHAR U_94B8\nENCODING 38072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n43E0\n7900\n8280\nFBE0\n26A0\nFAA0\n22A0\n2AA0\n32E0\n2080\nENDCHAR\nSTARTCHAR U_94B9\nENCODING 38073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4240\n7FE0\n8200\nFBC0\n2240\nFA40\n2340\n2C80\n3940\n2620\nENDCHAR\nSTARTCHAR U_94BA\nENCODING 38074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n40A0\n7FE0\n8480\nFCA0\n24A0\nFCA0\n24C0\n2EA0\n3560\n2220\nENDCHAR\nSTARTCHAR U_94BB\nENCODING 38075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n79E0\n8100\nF900\n27E0\nFC20\n2420\n2C20\n37E0\n2420\nENDCHAR\nSTARTCHAR U_94BC\nENCODING 38076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n4220\n7A20\n83E0\nFA20\n2220\nFBE0\n2220\n2A20\n33E0\n2220\nENDCHAR\nSTARTCHAR U_94BD\nENCODING 38077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n4240\n7A40\n8240\nFBC0\n2240\nFA40\n23C0\n2A40\n3000\n27E0\nENDCHAR\nSTARTCHAR U_94BE\nENCODING 38078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n44A0\n7CA0\n87E0\nFCA0\n24A0\nFFE0\n2080\n2880\n3080\n2080\nENDCHAR\nSTARTCHAR U_94BF\nENCODING 38079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47E0\n7CA0\n84A0\nFCA0\n27E0\nFCA0\n24A0\n2CA0\n37E0\n2420\nENDCHAR\nSTARTCHAR U_94C0\nENCODING 38080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4080\n7FE0\n84A0\nFCA0\n24A0\nFFE0\n24A0\n2CA0\n37E0\n2420\nENDCHAR\nSTARTCHAR U_94C1\nENCODING 38081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n7500\n47C0\n7900\nA100\n2FE0\nF100\n2280\n2A80\n3440\n2820\nENDCHAR\nSTARTCHAR U_94C2\nENCODING 38082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4100\n7BE0\n8220\nFA20\n23E0\nFA20\n2220\n2A20\n33E0\n2220\nENDCHAR\nSTARTCHAR U_94C3\nENCODING 38083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4180\n7A40\n8520\nF880\n2000\nFBE0\n2040\n2A80\n3100\n2080\nENDCHAR\nSTARTCHAR U_94C4\nENCODING 38084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n4380\n7A00\n8280\nFA80\n27E0\nF880\n22C0\n2AA0\n34A0\n2980\nENDCHAR\nSTARTCHAR U_94C5\nENCODING 38085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n4240\n7A40\n8240\nFC60\n2000\nFBE0\n2220\n2A20\n33E0\n2220\nENDCHAR\nSTARTCHAR U_94C6\nENCODING 38086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4CE0\n78A0\n8AA0\nFAA0\n2AA0\nFEA0\n2AA0\n2AE0\n3480\n2880\nENDCHAR\nSTARTCHAR U_94C7\nENCODING 38087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n2200\n77C0\n8840\n7740\n2540\nF740\n24C0\n2420\n3420\n23E0\nENDCHAR\nSTARTCHAR U_94C8\nENCODING 38088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n47E0\n7880\n83E0\nFAA0\n22A0\nFAA0\n22A0\n2AA0\n32E0\n2080\nENDCHAR\nSTARTCHAR U_94C9\nENCODING 38089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4100\n7FE0\n8100\nFA20\n27C0\nF880\n2100\n2A40\n37A0\n2020\nENDCHAR\nSTARTCHAR U_94CA\nENCODING 38090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n47E0\n7C20\n8000\nFA00\n2240\nFA80\n2300\n2A20\n3220\n21E0\nENDCHAR\nSTARTCHAR U_94CB\nENCODING 38091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4120\n40A0\n78A0\n8140\nF940\n2560\nFDA0\n2100\n2B20\n3520\n28E0\nENDCHAR\nSTARTCHAR U_94CC\nENCODING 38092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4420\n7C20\n87E0\nFC00\n2520\nFD40\n2580\n2D20\n3520\n28E0\nENDCHAR\nSTARTCHAR U_94CD\nENCODING 38093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n43E0\n7AA0\n8280\nFA80\n23E0\nFA40\n2340\n2A80\n3540\n2A20\nENDCHAR\nSTARTCHAR U_94CE\nENCODING 38094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4240\n7980\n8660\nF880\n2080\nFBE0\n2080\n2FE0\n3080\n2080\nENDCHAR\nSTARTCHAR U_94CF\nENCODING 38095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4020\n5F20\n6AA0\n8AA0\nFFA0\n4AA0\nEAA0\n4AA0\n4A20\n6A20\n5260\nENDCHAR\nSTARTCHAR U_94D0\nENCODING 38096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4120\n47A0\n7940\n87E0\nF900\n23E0\nFD00\n23E0\n2820\n3120\n20C0\nENDCHAR\nSTARTCHAR U_94D1\nENCODING 38097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4120\n7FA0\n8140\nFFE0\n2100\nFA40\n2680\n2B20\n3220\n21E0\nENDCHAR\nSTARTCHAR U_94D2\nENCODING 38098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4240\n7A40\n83C0\nFA40\n23C0\nFA40\n2260\n2FC0\n3040\n2040\nENDCHAR\nSTARTCHAR U_94D3\nENCODING 38099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n4FE0\n7240\n8240\n7100\n2FE0\nF200\n2200\n2200\n3200\n23C0\nENDCHAR\nSTARTCHAR U_94D4\nENCODING 38100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4FE0\n7280\n8280\n7AA0\n26A0\nF6C0\n2280\n2A80\n37E0\n2000\nENDCHAR\nSTARTCHAR U_94D5\nENCODING 38101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\n7900\n83E0\nFA20\n27E0\nFA20\n23E0\n2A20\n3220\n2260\nENDCHAR\nSTARTCHAR U_94D6\nENCODING 38102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n40A0\n7FE0\n8880\nFE80\n4AA0\nFAA0\n4A40\n5EC0\n6960\n5220\nENDCHAR\nSTARTCHAR U_94D7\nENCODING 38103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\n7900\n8520\nFB40\n2100\nFFE0\n2100\n2980\n3240\n2C20\nENDCHAR\nSTARTCHAR U_94D8\nENCODING 38104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n42A0\n7AA0\n8AC0\nFFA0\n22A0\nFAA0\n26A0\n2AE0\n3280\n2680\nENDCHAR\nSTARTCHAR U_94D9\nENCODING 38105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n47E0\n7A80\n8120\nFAA0\n2440\nFFE0\n2280\n2AA0\n34A0\n2860\nENDCHAR\nSTARTCHAR U_94DA\nENCODING 38106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4FE0\n7100\n8240\nF7E0\n4100\nF100\n47C0\n5100\n6100\n4FE0\nENDCHAR\nSTARTCHAR U_94DB\nENCODING 38107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44A0\n42A0\n7AC0\n8080\nFBE0\n2020\nF820\n23E0\n2820\n37E0\n2020\nENDCHAR\nSTARTCHAR U_94DC\nENCODING 38108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4820\n7820\n8BA0\nF820\n4BA0\nFAA0\n4BA0\n5820\n6820\n48E0\nENDCHAR\nSTARTCHAR U_94DD\nENCODING 38109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n4240\n7A40\n83C0\nFA40\n2000\nFFE0\n2420\n2C20\n37E0\n2420\nENDCHAR\nSTARTCHAR U_94DE\nENCODING 38110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n4220\n7A20\n83E0\nF880\n27E0\nFCA0\n24A0\n2CA0\n34E0\n2080\nENDCHAR\nSTARTCHAR U_94DF\nENCODING 38111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4920\n7920\n8FE0\nF920\n4920\nF9A0\n4A60\n5C20\n6FE0\n4820\nENDCHAR\nSTARTCHAR U_94E0\nENCODING 38112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44A0\n44A0\n7FE0\n8000\nFFE0\n2020\nFBE0\n2200\n2A20\n3220\n21E0\nENDCHAR\nSTARTCHAR U_94E1\nENCODING 38113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F20\n5120\n7520\n95A0\nF5A0\n55A0\nF5A0\n5520\n4420\n6A20\n5160\nENDCHAR\nSTARTCHAR U_94E2\nENCODING 38114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4500\n77E0\n8900\nF100\n2FE0\nF100\n2380\n2540\n3920\n2100\nENDCHAR\nSTARTCHAR U_94E3\nENCODING 38115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4500\n7FE0\n8500\nF900\n27E0\nFA80\n2280\n2AA0\n34A0\n2860\nENDCHAR\nSTARTCHAR U_94E4\nENCODING 38116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E20\n43C0\n7240\n8440\nFFE0\n2240\nFA40\n25E0\n2A00\n3500\n28E0\nENDCHAR\nSTARTCHAR U_94E5\nENCODING 38117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4020\n43C0\n7880\n83E0\nF880\n27E0\nF880\n2100\n2A40\n37A0\n2220\nENDCHAR\nSTARTCHAR U_94E6\nENCODING 38118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n7700\n8100\n7100\n2FE0\n2100\nF7C0\n2440\n2440\n37C0\n2440\nENDCHAR\nSTARTCHAR U_94E7\nENCODING 38119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n42A0\n7EC0\n8380\nFAA0\n22E0\nF880\n27E0\n2880\n3080\n2080\nENDCHAR\nSTARTCHAR U_94E8\nENCODING 38120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4280\n7C40\n8020\nFFC0\n2100\nF900\n27C0\n2900\n3100\n27E0\nENDCHAR\nSTARTCHAR U_94E9\nENCODING 38121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n4240\n7980\n8660\nF880\n27E0\nF880\n22C0\n2AA0\n34A0\n2180\nENDCHAR\nSTARTCHAR U_94EA\nENCODING 38122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4180\n7240\n8420\nFBC0\n2000\nFBC0\n2240\n2A40\n33C0\n2240\nENDCHAR\nSTARTCHAR U_94EB\nENCODING 38123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4280\n7AA0\n86C0\nFA80\n22C0\nFEA0\n2280\n2AA0\n34A0\n2860\nENDCHAR\nSTARTCHAR U_94EC\nENCODING 38124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n43C0\n7A40\n8580\nFA40\n2420\nFBE0\n2240\n2A40\n33C0\n2240\nENDCHAR\nSTARTCHAR U_94ED\nENCODING 38125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n41E0\n7A20\n8540\nF880\n2100\nFBE0\n2620\n2A20\n33E0\n2220\nENDCHAR\nSTARTCHAR U_94EE\nENCODING 38126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4380\n7500\n8FC0\nF140\n2FE0\nF140\n27C0\n2100\n3100\n2300\nENDCHAR\nSTARTCHAR U_94EF\nENCODING 38127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n43C0\n7A80\n87E0\nFAA0\n22A0\nFBE0\n2220\n2A00\n3220\n21E0\nENDCHAR\nSTARTCHAR U_94F0\nENCODING 38128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4080\n7FE0\n8240\nFC20\n2040\nFA40\n2180\n2980\n3240\n2420\nENDCHAR\nSTARTCHAR U_94F1\nENCODING 38129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4100\n7FE0\n8100\nFA80\n26A0\nFAC0\n2280\n2A40\n3320\n2620\nENDCHAR\nSTARTCHAR U_94F2\nENCODING 38130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\n7A20\n8140\nFFE0\n2400\nFC00\n2400\n2C00\n3400\n2800\nENDCHAR\nSTARTCHAR U_94F3\nENCODING 38131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\n7900\n8240\nFFA0\n2000\nFA80\n2280\n2AA0\n34A0\n2860\nENDCHAR\nSTARTCHAR U_94F4\nENCODING 38132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4BE0\n4440\n7080\n8900\nF7E0\n42A0\nF520\n4E60\n54A0\n6520\n46C0\nENDCHAR\nSTARTCHAR U_94F5\nENCODING 38133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\n7C20\n8100\nFFE0\n2140\nF940\n2240\n2A80\n3140\n2620\nENDCHAR\nSTARTCHAR U_94F6\nENCODING 38134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\n7C40\n87C0\nFC40\n27C0\nFD20\n2540\n2C80\n3540\n2620\nENDCHAR\nSTARTCHAR U_94F7\nENCODING 38135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n4400\n7FE0\n8AA0\nFAA0\n2AA0\nFAA0\n2AA0\n26A0\n35E0\n28A0\nENDCHAR\nSTARTCHAR U_94F8\nENCODING 38136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7100\n87E0\nF200\n2FE0\nF440\n27E0\n2C40\n3240\n20C0\nENDCHAR\nSTARTCHAR U_94F9\nENCODING 38137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4FE0\n7280\n8FE0\nF820\n2100\nFFE0\n2120\n2920\n32E0\n2C40\nENDCHAR\nSTARTCHAR U_94FA\nENCODING 38138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4180\n4140\n7FE0\n8100\nFFE0\n2520\nFFE0\n2520\n2FE0\n3520\n2560\nENDCHAR\nSTARTCHAR U_94FB\nENCODING 38139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4100\n77C0\n8140\n7140\n27E0\nF000\n23C0\n2A40\n3240\n23C0\nENDCHAR\nSTARTCHAR U_94FC\nENCODING 38140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\n7900\n8540\nFB80\n27E0\nF900\n2380\n2B40\n3520\n2100\nENDCHAR\nSTARTCHAR U_94FD\nENCODING 38141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n70A0\n8FE0\nF280\n2580\n2680\nFD80\n24A0\n2DA0\n3760\n2020\nENDCHAR\nSTARTCHAR U_94FE\nENCODING 38142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4BE0\n7500\n8280\nFFE0\n2480\nFFE0\n2480\n2480\n3A00\n29E0\nENDCHAR\nSTARTCHAR U_94FF\nENCODING 38143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4AE0\n7AA0\n8AA0\nFA40\n22A0\nF120\n2100\n2FC0\n3100\n2FE0\nENDCHAR\nSTARTCHAR U_9500\nENCODING 38144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4520\n7B40\n87E0\nFC20\n27E0\nFC20\n27E0\n2C20\n3420\n24E0\nENDCHAR\nSTARTCHAR U_9501\nENCODING 38145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2920\n2540\n4100\n77C0\n8440\n7540\n2540\nF540\n2540\n3280\n2C60\nENDCHAR\nSTARTCHAR U_9502\nENCODING 38146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n42A0\n7AA0\n83E0\nFAA0\n23E0\nF880\n23E0\n2880\n3080\n27E0\nENDCHAR\nSTARTCHAR U_9503\nENCODING 38147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n4220\n7A20\n83E0\nF800\n27E0\nF880\n23E0\n2880\n3080\n27E0\nENDCHAR\nSTARTCHAR U_9504\nENCODING 38148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4E80\n7BE0\n8EA0\nFAA0\n4AA0\nFEA0\n4AA0\n5AA0\n6F20\n42C0\nENDCHAR\nSTARTCHAR U_9505\nENCODING 38149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n4240\n7A40\n83C0\nF900\n27E0\nFD20\n25A0\n2E60\n3420\n2460\nENDCHAR\nSTARTCHAR U_9506\nENCODING 38150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4280\n7BE0\n8480\nF880\n27E0\nF800\n23E0\n2A20\n33E0\n2220\nENDCHAR\nSTARTCHAR U_9507\nENCODING 38151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4180\n46C0\n7AA0\n87E0\nFA80\n23A0\nFEA0\n22C0\n2A80\n3360\n2620\nENDCHAR\nSTARTCHAR U_9508\nENCODING 38152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n7100\n8FE0\nF540\n2920\nF7C0\n2280\n22E0\n2A20\n3420\n28C0\nENDCHAR\nSTARTCHAR U_9509\nENCODING 38153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4540\n7D40\n8540\nFBA0\n2120\nF900\n27C0\n2900\n3100\n2FE0\nENDCHAR\nSTARTCHAR U_950A\nENCODING 38154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n47A0\n7D20\n82C0\nF840\n27E0\nF840\n2240\n2940\n3040\n20C0\nENDCHAR\nSTARTCHAR U_950B\nENCODING 38155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n4640\n7980\n8660\nF900\n27E0\nF900\n23C0\n2900\n37E0\n2100\nENDCHAR\nSTARTCHAR U_950C\nENCODING 38156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n37E0\n4220\nF940\n27E0\nF880\n2080\n23E0\n2880\n3080\n2080\nENDCHAR\nSTARTCHAR U_950D\nENCODING 38157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\n7900\n8240\nFFA0\n2000\nFD40\n2540\n2D40\n3540\n2960\nENDCHAR\nSTARTCHAR U_950E\nENCODING 38158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n4220\n7820\n8FE0\nFAA0\n4FE0\nFAA0\n4AA0\n5AA0\n6CA0\n4860\nENDCHAR\nSTARTCHAR U_950F\nENCODING 38159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\n4220\n7820\n8BA0\nFAA0\n4BA0\nFAA0\n4BA0\n5820\n6820\n4860\nENDCHAR\nSTARTCHAR U_9510\nENCODING 38160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4280\n77C0\n8440\nF440\n27C0\nF280\n2280\n2AA0\n34A0\n28E0\nENDCHAR\nSTARTCHAR U_9511\nENCODING 38161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4280\n7FE0\n8120\nFFE0\n2500\nFFE0\n2120\n2B20\n3560\n2900\nENDCHAR\nSTARTCHAR U_9512\nENCODING 38162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\n7C40\n87C0\nFC40\n27C0\nFD20\n2540\n2C80\n3540\n2620\nENDCHAR\nSTARTCHAR U_9513\nENCODING 38163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4040\n7BC0\n8040\nFFE0\n2420\nFBC0\n2240\n2980\n3180\n2660\nENDCHAR\nSTARTCHAR U_9514\nENCODING 38164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4420\n7FE0\n8400\nFFE0\n2420\nFFA0\n26A0\n2FA0\n3420\n28C0\nENDCHAR\nSTARTCHAR U_9515\nENCODING 38165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DE0\n5440\n7440\n99C0\nF540\n5540\nF5C0\n5C40\n5040\n7040\n50C0\nENDCHAR\nSTARTCHAR U_9516\nENCODING 38166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4100\n77C0\n8100\nFFE0\n2240\nFBC0\n2240\n2BC0\n3240\n22C0\nENDCHAR\nSTARTCHAR U_9517\nENCODING 38167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47A0\n7940\n87E0\nF900\n23C0\nFE40\n23C0\n2A40\n33C0\n2240\nENDCHAR\nSTARTCHAR U_9518\nENCODING 38168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n47E0\n7A40\n8100\nFFE0\n2100\nFBE0\n2620\n2A20\n33E0\n2220\nENDCHAR\nSTARTCHAR U_9519\nENCODING 38169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4FE0\n7280\n8280\nEFE0\n4000\nF7C0\n4440\n47C0\n5440\n67C0\nENDCHAR\nSTARTCHAR U_951A\nENCODING 38170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n47E0\n7A40\n8000\nFFE0\n24A0\nFCA0\n27E0\n2CA0\n37E0\n2420\nENDCHAR\nSTARTCHAR U_951B\nENCODING 38171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7280\n8540\nFFE0\n2100\nF240\n2FE0\n2240\n3440\n2840\nENDCHAR\nSTARTCHAR U_951C\nENCODING 38172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n77C0\n4280\nF440\n2FE0\nF040\n2F40\n2540\n3740\n2140\n0080\nENDCHAR\nSTARTCHAR U_951D\nENCODING 38173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n4240\n7BC0\n8240\nFBC0\n2000\nFBE0\n2040\n2FE0\n3240\n21C0\nENDCHAR\nSTARTCHAR U_951E\nENCODING 38174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4540\n7FC0\n8540\nFFC0\n2100\nFFE0\n2180\n2B40\n3520\n2920\nENDCHAR\nSTARTCHAR U_951F\nENCODING 38175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4420\n7FE0\n8420\nFFE0\n2480\nFCA0\n27C0\n2C80\n35A0\n2660\nENDCHAR\nSTARTCHAR U_9520\nENCODING 38176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n2240\n3BC0\n4240\nFBC0\n2000\nFFE0\n2420\n27E0\n3420\n27E0\nENDCHAR\nSTARTCHAR U_9521\nENCODING 38177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\n77C0\n8440\nFFC0\n2400\nF7E0\n2AA0\n22A0\n3520\n22C0\nENDCHAR\nSTARTCHAR U_9522\nENCODING 38178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4820\n7920\n8FE0\nF920\n4BA0\nFAA0\n4BA0\n5820\n6FE0\n4820\nENDCHAR\nSTARTCHAR U_9523\nENCODING 38179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4AA0\n7AA0\n8FE0\nF900\n21E0\nF220\n2540\n2880\n3300\n2C00\nENDCHAR\nSTARTCHAR U_9524\nENCODING 38180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n4700\n7100\n8FE0\nF540\n2FE0\nF540\n2540\n2FE0\n3100\n27C0\nENDCHAR\nSTARTCHAR U_9525\nENCODING 38181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n4480\n7FE0\n8480\nFFE0\n2480\nFFE0\n2480\n2C80\n37E0\n2400\nENDCHAR\nSTARTCHAR U_9526\nENCODING 38182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\n7C40\n87C0\nFC40\n27C0\nF900\n2FE0\n2920\n3960\n2100\nENDCHAR\nSTARTCHAR U_9527\nENCODING 38183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n6880\n8FE0\nE880\n4BE0\nEA20\n4AA0\n4AA0\n6AA0\n5140\n2220\nENDCHAR\nSTARTCHAR U_9528\nENCODING 38184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4C80\n78E0\n8920\nFE80\n4A80\nFA80\n4A80\n5A80\n6B40\n5220\nENDCHAR\nSTARTCHAR U_9529\nENCODING 38185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n4540\n7FE0\n8100\nFFE0\n2240\nFFE0\n2240\n2AC0\n3220\n21E0\nENDCHAR\nSTARTCHAR U_952A\nENCODING 38186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n47E0\n7AA0\n84A0\nF920\n22C0\nF900\n22C0\n2A20\n3660\n29C0\nENDCHAR\nSTARTCHAR U_952B\nENCODING 38187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\n7A20\n8140\nFFE0\n2000\nFBE0\n2220\n2A20\n33E0\n2220\nENDCHAR\nSTARTCHAR U_952C\nENCODING 38188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40A0\n42C0\n7A80\n8540\nFAA0\n2080\nFAA0\n22C0\n2C80\n3140\n2620\nENDCHAR\nSTARTCHAR U_952D\nENCODING 38189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\n7C20\n8000\nFFE0\n2080\nFAE0\n2280\n2A80\n3580\n28E0\nENDCHAR\nSTARTCHAR U_952E\nENCODING 38190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5C80\n47E0\n68A0\n8BE0\nFCA0\n47E0\nE480\n57E0\n4880\n6C80\n53E0\nENDCHAR\nSTARTCHAR U_952F\nENCODING 38191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4420\n7C20\n87E0\nFC80\n27E0\nFC80\n27E0\n2A20\n33E0\n2220\nENDCHAR\nSTARTCHAR U_9530\nENCODING 38192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4080\n7100\n8FE0\nF100\n4300\nF000\n4FE0\n5AA0\n6AA0\n5FE0\nENDCHAR\nSTARTCHAR U_9531\nENCODING 38193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n42A0\n7D40\n82A0\nFAA0\n27E0\nFCA0\n27E0\n2CA0\n37E0\n2420\nENDCHAR\nSTARTCHAR U_9532\nENCODING 38194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n4FE0\n74A0\n8EA0\nF4A0\n4EA0\nF540\n4FE0\n5100\n6280\n4C60\nENDCHAR\nSTARTCHAR U_9533\nENCODING 38195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n2FE0\n7280\n4100\nF7C0\n2540\nF540\n2FE0\n2280\n3440\n2820\nENDCHAR\nSTARTCHAR U_9534\nENCODING 38196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n44A0\n7FC0\n84A0\nFEE0\n2080\nFBE0\n2220\n2BE0\n3220\n23E0\nENDCHAR\nSTARTCHAR U_9535\nENCODING 38197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n42E0\n7B20\n86A0\nFA40\n22C0\nFBE0\n2740\n2AC0\n3240\n22C0\nENDCHAR\nSTARTCHAR U_9536\nENCODING 38198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n44A0\n7CA0\n87E0\nFCA0\n27E0\nF900\n22C0\n2A20\n3640\n29C0\nENDCHAR\nSTARTCHAR U_9537\nENCODING 38199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\n7EE0\n8000\nF7C0\n2000\nFFE0\n2200\n27C0\n3040\n2180\nENDCHAR\nSTARTCHAR U_9538\nENCODING 38200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n4380\n7080\n87E0\nF880\n22E0\nFCA0\n27E0\n2CA0\n37E0\n2420\nENDCHAR\nSTARTCHAR U_9539\nENCODING 38201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n4C40\n7540\n8F60\nF540\n2640\nF540\n2C40\n2CA0\n3520\n2620\nENDCHAR\nSTARTCHAR U_953A\nENCODING 38202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4100\n7FE0\n8540\nFFC0\n2540\nFFC0\n2100\n2FC0\n3100\n2FE0\nENDCHAR\nSTARTCHAR U_953B\nENCODING 38203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7D40\n4940\n8E60\nF800\n4FE0\nF940\n4F40\n5880\n6940\n4A20\nENDCHAR\nSTARTCHAR U_953C\nENCODING 38204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n4D60\n7920\n8FE0\nF920\n4FE0\nF100\n47E0\n5240\n6180\n4E60\nENDCHAR\nSTARTCHAR U_953D\nENCODING 38205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n47C0\n7440\n87C0\n7440\n27C0\nF900\n2100\n27C0\n3100\n2FE0\nENDCHAR\nSTARTCHAR U_953E\nENCODING 38206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4520\n7AC0\n87E0\nF900\n27E0\nFA00\n23E0\n2D40\n3880\n2360\nENDCHAR\nSTARTCHAR U_953F\nENCODING 38207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\n7800\n83C0\nFA40\n23C0\nF900\n22A0\n2E40\n3320\n2220\nENDCHAR\nSTARTCHAR U_9540\nENCODING 38208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n47E0\n7D40\n87E0\nFD40\n25C0\nFC00\n27E0\n2D40\n3480\n2B60\nENDCHAR\nSTARTCHAR U_9541\nENCODING 38209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n4FE0\n7100\n87C0\nF900\n27E0\nF900\n27E0\n2980\n3240\n2C20\nENDCHAR\nSTARTCHAR U_9542\nENCODING 38210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44A0\n42C0\n77E0\n8080\nF9C0\n26A0\nF900\n27E0\n2A40\n3180\n2660\nENDCHAR\nSTARTCHAR U_9543\nENCODING 38211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\n4480\n7FE0\n8440\nE880\n4AA0\nFFE0\n4440\n4AA0\n7FE0\n4220\nENDCHAR\nSTARTCHAR U_9544\nENCODING 38212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n47E0\n72A0\n87C0\nFAA0\n24A0\nFFE0\n2540\n2D40\n3280\n2460\nENDCHAR\nSTARTCHAR U_9545\nENCODING 38213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n44A0\n77E0\n8400\nFDE0\n2520\nFDE0\n2520\n2DE0\n3520\n29E0\nENDCHAR\nSTARTCHAR U_9546\nENCODING 38214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4FE0\n7280\n87C0\nFC40\n27C0\nFC40\n27E0\n2900\n3280\n2C60\nENDCHAR\nSTARTCHAR U_9547\nENCODING 38215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7100\n87C0\nFC40\n2740\nFDC0\n2440\n2FE0\n3280\n2C60\nENDCHAR\nSTARTCHAR U_9548\nENCODING 38216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n7FE0\n8540\nF7C0\n4540\nF7C0\n4540\n5FE0\n6240\n4340\n0080\nENDCHAR\nSTARTCHAR U_9549\nENCODING 38217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4000\n73C0\n8240\nFA40\n27E0\nFD60\n24A0\n2FE0\n34A0\n24E0\nENDCHAR\nSTARTCHAR U_954A\nENCODING 38218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4240\n73C0\n8240\nFFE0\n4040\nFEE0\n4AA0\n5440\n6AA0\n5120\nENDCHAR\nSTARTCHAR U_954B\nENCODING 38219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4540\n7FE0\n9020\nE780\n4480\nE780\n4300\n5520\n6520\n48E0\nENDCHAR\nSTARTCHAR U_954C\nENCODING 38220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n4480\n7FE0\n8480\nFFE0\n2480\nFFE0\n2280\n2AE0\n3420\n28E0\nENDCHAR\nSTARTCHAR U_954D\nENCODING 38221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\n7C40\n87C0\nFC40\n27C0\nF900\n27E0\n2B80\n3540\n2920\nENDCHAR\nSTARTCHAR U_954E\nENCODING 38222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n46C0\n79A0\n87C0\nF440\n27C0\nF900\n27C0\n2900\n37E0\n2300\nENDCHAR\nSTARTCHAR U_954F\nENCODING 38223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n45E0\n74A0\n86A0\nFDE0\n2240\nFFE0\n2520\n2FE0\n3520\n27E0\nENDCHAR\nSTARTCHAR U_9550\nENCODING 38224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n4FE0\n7240\n83C0\nF000\n4FE0\nF820\n4BA0\n5AA0\n6BA0\n4860\nENDCHAR\nSTARTCHAR U_9551\nENCODING 38225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\n7280\n8FE0\nF920\n2FE0\nFA00\n23C0\n2A40\n3440\n2980\nENDCHAR\nSTARTCHAR U_9552\nENCODING 38226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n4A80\n77E0\n8800\nF280\n4440\nF820\n4FE0\n5AA0\n6AA0\n4FE0\nENDCHAR\nSTARTCHAR U_9553\nENCODING 38227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7820\n8FE0\nF220\n4D40\nF280\n4D40\n52A0\n6CA0\n4300\nENDCHAR\nSTARTCHAR U_9554\nENCODING 38228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n47E0\n7420\n81C0\nFA00\n23E0\nFA40\n27E0\n2A80\n3440\n2820\nENDCHAR\nSTARTCHAR U_9555\nENCODING 38229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7820\n8440\n7920\n2280\nF440\n2FE0\n2440\n37C0\n2440\nENDCHAR\nSTARTCHAR U_9556\nENCODING 38230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4280\n7FE0\n8AA0\nFFE0\n4000\nF7C0\n4000\n5FE0\n6940\n5320\nENDCHAR\nSTARTCHAR U_9557\nENCODING 38231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4920\n4540\n7FE0\n8820\nF7C0\n4440\nF7C0\n4100\n57C0\n6100\n4FE0\nENDCHAR\nSTARTCHAR U_9558\nENCODING 38232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\n77C0\n8440\nFFE0\n4AA0\nFFE0\n4440\n5280\n6100\n4EE0\nENDCHAR\nSTARTCHAR U_9559\nENCODING 38233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4520\n77E0\n8520\nF7E0\n4240\nF780\n4240\n5FE0\n6540\n4B20\nENDCHAR\nSTARTCHAR U_955A\nENCODING 38234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4920\n6FE0\n8000\nEEE0\n4AA0\nEEE0\n4AA0\n4EE0\n6AA0\n5360\nENDCHAR\nSTARTCHAR U_955B\nENCODING 38235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7940\n8FE0\nF940\n4FE0\nF920\n4FE0\n5920\n6FE0\n4920\nENDCHAR\nSTARTCHAR U_955C\nENCODING 38236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7280\n8FE0\nF440\n27C0\nF440\n27C0\n2A80\n32A0\n2C60\nENDCHAR\nSTARTCHAR U_955D\nENCODING 38237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7280\n8FE0\nF920\n4FE0\nF920\n4BA0\n5AA0\n6BA0\n4AE0\nENDCHAR\nSTARTCHAR U_955E\nENCODING 38238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n44E0\n7F00\n8880\nFEE0\n4B40\nFBE0\n4A40\n5A40\n6EA0\n5520\nENDCHAR\nSTARTCHAR U_955F\nENCODING 38239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n44E0\n7F00\n89E0\nFC60\n5540\nF560\n5540\n5540\n76C0\n5C60\nENDCHAR\nSTARTCHAR U_9560\nENCODING 38240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n4AA0\n7660\n8AA0\n7100\n2280\nFD60\n2280\n2140\n3080\n2700\nENDCHAR\nSTARTCHAR U_9561\nENCODING 38241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4280\n7FE0\n8AA0\nFFE0\n4440\nF7C0\n4440\n5FE0\n6100\n4100\nENDCHAR\nSTARTCHAR U_9562\nENCODING 38242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4D40\n7A40\n8FE0\nFAA0\n4AC0\nFFC0\n4A40\n5A40\n6CA0\n4920\nENDCHAR\nSTARTCHAR U_9563\nENCODING 38243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7B40\n8480\nFFE0\n2440\nFFC0\n2440\n2FC0\n3540\n2B20\nENDCHAR\nSTARTCHAR U_9564\nENCODING 38244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AA0\n46C0\n7FE0\n8280\nFFE0\n2100\nF7C0\n2100\n2FE0\n3280\n2C60\nENDCHAR\nSTARTCHAR U_9565\nENCODING 38245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n4480\n7FC0\n8540\nFFC0\n2540\nFFE0\n2440\n27C0\n2C40\n37C0\nENDCHAR\nSTARTCHAR U_9566\nENCODING 38246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n4F80\n7AE0\n8EA0\nF0A0\n4FA0\nF2A0\n44A0\n5E40\n64A0\n4D20\nENDCHAR\nSTARTCHAR U_9567\nENCODING 38247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\n4420\n7920\n8FE0\nF920\n4FE0\nFAA0\n4FE0\n5920\n6BA0\n4D60\nENDCHAR\nSTARTCHAR U_9568\nENCODING 38248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4FE0\n7AA0\n86C0\nFFE0\n2000\nF7C0\n2440\n2FC0\n3440\n27C0\nENDCHAR\nSTARTCHAR U_9569\nENCODING 38249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7AA0\n8540\nF7C0\n4540\nFFE0\n4920\n5FE0\n6100\n4100\nENDCHAR\nSTARTCHAR U_956A\nENCODING 38250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4DE0\n4520\n7DE0\n8880\nFBE0\n2EA0\nF2A0\n23E0\n2A80\n32A0\n2DE0\nENDCHAR\nSTARTCHAR U_956B\nENCODING 38251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F40\n4AA0\n7440\n87A0\nF800\n47C0\nF440\n47C0\n5440\n6280\n4FE0\nENDCHAR\nSTARTCHAR U_956C\nENCODING 38252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n4FE0\n7240\n87E0\nFC80\n27E0\nFC80\n27E0\n2A40\n3180\n2660\nENDCHAR\nSTARTCHAR U_956D\nENCODING 38253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4100\n7FE0\n8920\nFBA0\n2540\nFFE0\n2520\n2FE0\n3520\n27E0\nENDCHAR\nSTARTCHAR U_956E\nENCODING 38254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4540\n77C0\n8000\nFFE0\n4000\nF7C0\n4440\n47C0\n6C80\n5660\nENDCHAR\nSTARTCHAR U_956F\nENCODING 38255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4AA0\n7FE0\n8400\nFBE0\n4220\nFFA0\n4AA0\n5FA0\n62A0\n4FC0\nENDCHAR\nSTARTCHAR U_9570\nENCODING 38256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7A80\n8FE0\nFAA0\n4FE0\nFAA0\n4FE0\n5A80\n66C0\n4AA0\nENDCHAR\nSTARTCHAR U_9571\nENCODING 38257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7280\n8FE0\nF440\n47C0\nF440\n47C0\n52A0\n6660\n49C0\nENDCHAR\nSTARTCHAR U_9572\nENCODING 38258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7820\n87E0\nFAA0\n4A40\nF7E0\n4800\n5FE0\n6540\n4B20\nENDCHAR\nSTARTCHAR U_9573\nENCODING 38259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7A80\n8FE0\nFAA0\n4FE0\nFA80\n4BA0\n5BE0\n6D40\n4AA0\nENDCHAR\nSTARTCHAR U_9574\nENCODING 38260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n4A80\n7540\n8FC0\nFAC0\n4F40\nFAC0\n4F40\n4AC0\n6F60\n4A20\nENDCHAR\nSTARTCHAR U_9575\nENCODING 38261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n4FC0\n7440\n87C0\nF6C0\n44A0\nF7E0\n4D40\n47C0\n62A0\n4CE0\nENDCHAR\nSTARTCHAR U_9576\nENCODING 38262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7AA0\n8EE0\nF280\n4FE0\nF280\n4FE0\n54A0\n6D40\n4620\nENDCHAR\nSTARTCHAR U_9577\nENCODING 38263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\n1000\n1F80\n1000\n1F80\n1000\n7FE0\n1240\n1180\n1480\n1860\nENDCHAR\nSTARTCHAR U_9578\nENCODING 38264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FC0\n1000\n1F80\n1000\n1FC0\n1000\nFFE0\n0800\n1080\n3FC0\n0040\nENDCHAR\nSTARTCHAR U_9579\nENCODING 38265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n4100\n79C0\n4240\n7C40\n4080\nFC80\n2140\n4940\nFE20\n0420\nENDCHAR\nSTARTCHAR U_957A\nENCODING 38266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4380\n7880\n4080\n7BE0\n4080\nFC80\n2880\n4540\nFA20\n0420\nENDCHAR\nSTARTCHAR U_957B\nENCODING 38267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n4280\n7BE0\n4480\n7880\n43E0\nFC80\n2880\n4540\nFA20\n0420\nENDCHAR\nSTARTCHAR U_957C\nENCODING 38268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8420\nF7E0\n8480\nF6A0\n86A0\nFFE0\n4480\n96A0\nFFE0\n0A20\nENDCHAR\nSTARTCHAR U_957D\nENCODING 38269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n47E0\n7CA0\n43C0\n7E60\n43C0\nFA40\n23C0\n4B40\nF520\n0B20\nENDCHAR\nSTARTCHAR U_957E\nENCODING 38270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n4540\n7920\n4FE0\n7BA0\n4D60\nFBA0\n2D60\n5BA0\nF920\n0840\nENDCHAR\nSTARTCHAR U_957F\nENCODING 38271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n1100\n1200\n1400\n1800\n7FE0\n1400\n1200\n1100\n1480\n1860\nENDCHAR\nSTARTCHAR U_9580\nENCODING 38272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\n4920\n79E0\n4920\n79E0\n4020\n4020\n4020\n4020\n4020\n40E0\nENDCHAR\nSTARTCHAR U_9581\nENCODING 38273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9E0\n8920\nF9E0\n8920\nF9E0\n8020\n8220\n8220\n8420\n88A0\n8040\nENDCHAR\nSTARTCHAR U_9582\nENCODING 38274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\n4920\n79E0\n4920\n79E0\n4020\n4020\n5FA0\n4020\n4020\n40E0\nENDCHAR\nSTARTCHAR U_9583\nENCODING 38275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\n4920\n79E0\n4920\n79E0\n4420\n4420\n4420\n4A20\n51A0\n4060\nENDCHAR\nSTARTCHAR U_9584\nENCODING 38276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE80\nAA80\nEE80\nAA80\nEE80\n8280\n8280\n8280\n8340\n8240\n8620\nENDCHAR\nSTARTCHAR U_9585\nENCODING 38277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9E0\n8920\nF9E0\n8920\nF9E0\n8020\nBFA0\n8420\n9420\n88A0\n8040\nENDCHAR\nSTARTCHAR U_9586\nENCODING 38278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8020\nBF20\n8020\n9E20\n8020\nBF60\nENDCHAR\nSTARTCHAR U_9587\nENCODING 38279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8020\nBFA0\n8820\n8A20\n8920\n8860\nENDCHAR\nSTARTCHAR U_9588\nENCODING 38280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8020\n9F20\n8420\nBFA0\n8420\n8460\nENDCHAR\nSTARTCHAR U_9589\nENCODING 38281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8220\nBFA0\n8A20\n9220\nA220\n86E0\nENDCHAR\nSTARTCHAR U_958A\nENCODING 38282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8420\n9520\n9520\n9F20\n80A0\n8040\nENDCHAR\nSTARTCHAR U_958B\nENCODING 38283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8020\n9F20\n8A20\nBFA0\n8A20\n92E0\nENDCHAR\nSTARTCHAR U_958C\nENCODING 38284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8420\nBFA0\n8020\n9E20\n92A0\nA3E0\nENDCHAR\nSTARTCHAR U_958D\nENCODING 38285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8420\nBFA0\n8820\n8F20\n9120\nA660\nENDCHAR\nSTARTCHAR U_958E\nENCODING 38286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8420\nBFA0\n8A20\n9420\nA920\n8EE0\nENDCHAR\nSTARTCHAR U_958F\nENCODING 38287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8020\nBFA0\n8420\n9F20\n8420\nBFE0\nENDCHAR\nSTARTCHAR U_9590\nENCODING 38288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n8820\nBF20\n8820\nBF20\n88A0\n8FA0\nENDCHAR\nSTARTCHAR U_9591\nENCODING 38289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8420\nBFA0\n8420\n8E20\n9520\nA4E0\nENDCHAR\nSTARTCHAR U_9592\nENCODING 38290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n9120\n9F20\n9120\n9F20\n9120\nA360\nENDCHAR\nSTARTCHAR U_9593\nENCODING 38291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n9F20\n9120\n9F20\n9120\n9F20\n80E0\nENDCHAR\nSTARTCHAR U_9594\nENCODING 38292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8420\nBFA0\n8A20\n8420\n8A20\nB160\nENDCHAR\nSTARTCHAR U_9595\nENCODING 38293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8F20\n9220\n9F20\n8620\n8A20\n9640\nENDCHAR\nSTARTCHAR U_9596\nENCODING 38294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n84A0\nB520\n9620\n9520\nA4A0\n8860\nENDCHAR\nSTARTCHAR U_9597\nENCODING 38295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8A20\n9620\n8A20\nBFA0\n8220\n8240\nENDCHAR\nSTARTCHAR U_9598\nENCODING 38296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n9520\n9F20\n9520\n9F20\n8420\n8460\nENDCHAR\nSTARTCHAR U_9599\nENCODING 38297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8420\nBFE0\n8420\nBFA0\nA4A0\nA4A0\nA5A0\n8460\nENDCHAR\nSTARTCHAR U_959A\nENCODING 38298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n8A40\nFBC0\n8A40\nFBC0\n8440\nBF40\n9140\n8A40\nBF40\n80C0\nENDCHAR\nSTARTCHAR U_959B\nENCODING 38299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\nBFA0\nA4A0\n9520\nBFA0\n8420\n8460\nENDCHAR\nSTARTCHAR U_959C\nENCODING 38300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\nBFA0\n8120\n9D20\n9520\n9D20\n8360\nENDCHAR\nSTARTCHAR U_959D\nENCODING 38301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nF5E0\n8A20\n9520\nEEE0\n8220\n8C20\n8440\nENDCHAR\nSTARTCHAR U_959E\nENCODING 38302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n8A20\n9F20\n9220\nBFA0\n9220\nA260\nENDCHAR\nSTARTCHAR U_959F\nENCODING 38303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8D20\nAAA0\nAC60\n8920\nB720\n8060\nENDCHAR\nSTARTCHAR U_95A0\nENCODING 38304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n9F20\n8420\n9F20\n8520\nBFA0\n8040\nENDCHAR\nSTARTCHAR U_95A1\nENCODING 38305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8420\nBFA0\n9520\n8A20\n9520\n8960\nENDCHAR\nSTARTCHAR U_95A2\nENCODING 38306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nFBE0\n8A20\nFBE0\n9120\nBFA0\n8420\nBFA0\n8A20\nB1A0\n8040\nENDCHAR\nSTARTCHAR U_95A3\nENCODING 38307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79E0\n4920\n79E0\n4920\n79E0\n4F20\n4A20\n4520\n5FA0\n4920\n4F60\nENDCHAR\nSTARTCHAR U_95A4\nENCODING 38308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8E20\n9520\nE0E0\n9F20\n9120\n9F60\nENDCHAR\nSTARTCHAR U_95A5\nENCODING 38309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n9520\nBFA0\nD520\n92A0\n95A0\n98E0\nENDCHAR\nSTARTCHAR U_95A6\nENCODING 38310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8420\nBBA0\n9220\n9220\nADA0\n8040\nENDCHAR\nSTARTCHAR U_95A7\nENCODING 38311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nF1E0\n8A20\n9F20\n8A20\nBFA0\n9120\nA0E0\nENDCHAR\nSTARTCHAR U_95A8\nENCODING 38312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n8420\nBFA0\n8420\n9F20\n8420\nBFE0\nENDCHAR\nSTARTCHAR U_95A9\nENCODING 38313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8420\nBFA0\nA4A0\nBFA0\n8520\nBEE0\nENDCHAR\nSTARTCHAR U_95AA\nENCODING 38314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nF1E0\n9F20\n8A20\nBFA0\nAAA0\nBFA0\n8040\nENDCHAR\nSTARTCHAR U_95AB\nENCODING 38315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\nA4A0\nBFA0\nA4A0\nAEA0\nB5A0\nBFE0\nENDCHAR\nSTARTCHAR U_95AC\nENCODING 38316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n9120\n9F20\n9120\n9F20\n92A0\n99E0\nENDCHAR\nSTARTCHAR U_95AD\nENCODING 38317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n9F20\n9120\nBFA0\nA0A0\nBFA0\n8060\nENDCHAR\nSTARTCHAR U_95AE\nENCODING 38318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n9120\n9BA0\nA920\n97A0\nA820\nC7E0\nENDCHAR\nSTARTCHAR U_95AF\nENCODING 38319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\nA220\nDAA0\nAA60\n9120\nE220\nAC40\nENDCHAR\nSTARTCHAR U_95B0\nENCODING 38320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8820\nB3A0\nA0A0\nBBA0\nA0A0\nBFE0\nENDCHAR\nSTARTCHAR U_95B1\nENCODING 38321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n9120\nBFA0\n9120\n9F20\n8AA0\nB3E0\nENDCHAR\nSTARTCHAR U_95B2\nENCODING 38322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n9F20\n9120\n9F20\n8AA0\nB3A0\n8060\nENDCHAR\nSTARTCHAR U_95B3\nENCODING 38323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nF5E0\nBFA0\n9520\n9F20\n9520\nBFA0\n8440\nENDCHAR\nSTARTCHAR U_95B4\nENCODING 38324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n9120\n9F20\n9120\n9F20\n8A20\n9140\nENDCHAR\nSTARTCHAR U_95B5\nENCODING 38325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n9220\nBFA0\nD220\n9FA0\n9220\n9FE0\nENDCHAR\nSTARTCHAR U_95B6\nENCODING 38326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n9120\n9F20\n9120\nBFA0\nA4A0\nBFA0\nENDCHAR\nSTARTCHAR U_95B7\nENCODING 38327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAEE0\n4AA0\nAEE0\n5AA0\n4EE0\nF920\n4920\nE9A0\n5A60\n4C20\n4860\nENDCHAR\nSTARTCHAR U_95B8\nENCODING 38328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nF1E0\nBFA0\n8A20\n9120\n8A20\nBFA0\n8040\nENDCHAR\nSTARTCHAR U_95B9\nENCODING 38329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n9520\nBFA0\nD560\n9F20\n84A0\n83A0\nENDCHAR\nSTARTCHAR U_95BA\nENCODING 38330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n9F20\nF1E0\n9F20\n9120\nFFA0\n9220\n8C20\nB360\nENDCHAR\nSTARTCHAR U_95BB\nENCODING 38331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n8A20\nBB20\n9120\n9B20\n9120\n9F60\nENDCHAR\nSTARTCHAR U_95BC\nENCODING 38332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n9120\nFEA0\n9160\n9CA0\nA520\nCCE0\nENDCHAR\nSTARTCHAR U_95BD\nENCODING 38333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n9220\n9FA0\n9120\n9FA0\n9120\n9F60\nENDCHAR\nSTARTCHAR U_95BE\nENCODING 38334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8520\nBFA0\nAB20\nBAA0\n83A0\nBCE0\nENDCHAR\nSTARTCHAR U_95BF\nENCODING 38335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n94A0\n8B20\nBFA0\nAAA0\n8620\nB9A0\nENDCHAR\nSTARTCHAR U_95C0\nENCODING 38336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n8A20\nFFA0\nAAA0\nCE60\n88A0\n87E0\nENDCHAR\nSTARTCHAR U_95C1\nENCODING 38337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8020\nBBA0\nAAA0\nBBA0\nA0A0\n8060\nENDCHAR\nSTARTCHAR U_95C2\nENCODING 38338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n9520\nBFA0\n8420\nFFE0\n99A0\nAF60\nENDCHAR\nSTARTCHAR U_95C3\nENCODING 38339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n9120\n9F20\n9120\nBFA0\n8A20\nB1E0\nENDCHAR\nSTARTCHAR U_95C4\nENCODING 38340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n9F20\n9520\nBFA0\n8A20\n8420\n9B60\nENDCHAR\nSTARTCHAR U_95C5\nENCODING 38341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n9F20\n9520\n9FA0\n8420\nBFA0\n8920\n8620\nB9A0\nENDCHAR\nSTARTCHAR U_95C6\nENCODING 38342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n9120\n9F20\n8020\nBBA0\nAAA0\nBBE0\nENDCHAR\nSTARTCHAR U_95C7\nENCODING 38343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n8A20\nBFA0\n9120\n9F20\n9120\n9F60\nENDCHAR\nSTARTCHAR U_95C8\nENCODING 38344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n9F20\n8920\nBFA0\n9120\nBFA0\n9420\nBFA0\n8460\nENDCHAR\nSTARTCHAR U_95C9\nENCODING 38345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\nBFA0\nAAA0\nB1A0\nBFA0\n8420\n9F20\n8420\nBFA0\nENDCHAR\nSTARTCHAR U_95CA\nENCODING 38346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n9220\nAFA0\n9220\nB7A0\n94A0\n97E0\nENDCHAR\nSTARTCHAR U_95CB\nENCODING 38347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\nAAA0\nAF20\n94A0\nBFA0\n8A20\nB1E0\nENDCHAR\nSTARTCHAR U_95CC\nENCODING 38348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n8420\nFFE0\nAAA0\nBFA0\n9520\nE4E0\nENDCHAR\nSTARTCHAR U_95CD\nENCODING 38349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n8A20\nBFA0\n9920\nAF20\n8920\n8F60\nENDCHAR\nSTARTCHAR U_95CE\nENCODING 38350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4A40\n7FC0\n5540\n5F40\n45C0\n7640\n5540\n6C80\nENDCHAR\nSTARTCHAR U_95CF\nENCODING 38351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8020\nBFA0\nA4A0\nBFA0\nB5A0\nBFA0\nA4A0\nDF60\nENDCHAR\nSTARTCHAR U_95D0\nENCODING 38352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\nBFA0\n9120\n9D20\n9720\n9120\nBFA0\n8A20\nB1A0\nENDCHAR\nSTARTCHAR U_95D1\nENCODING 38353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n9120\n9F20\n9120\nBFA0\n9520\nE4E0\nENDCHAR\nSTARTCHAR U_95D2\nENCODING 38354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n9F20\nF1E0\n9F20\n9120\nBFA0\nAAA0\n99A0\nAAE0\nENDCHAR\nSTARTCHAR U_95D3\nENCODING 38355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\nA4A0\nBFA0\n9120\n9F20\n8A20\nBFA0\nENDCHAR\nSTARTCHAR U_95D4\nENCODING 38356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n8420\nBFA0\n9120\nBFA0\nAAA0\nBFA0\nENDCHAR\nSTARTCHAR U_95D5\nENCODING 38357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\nAA20\nFFE0\n9560\nFD20\n92A0\nA460\nENDCHAR\nSTARTCHAR U_95D6\nENCODING 38358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n9420\n9F20\n9420\n9FA0\nAAA0\nD560\nENDCHAR\nSTARTCHAR U_95D7\nENCODING 38359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n88A0\n9120\nBBE0\n9120\nA260\nBBA0\nAAA0\nD560\nENDCHAR\nSTARTCHAR U_95D8\nENCODING 38360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8020\nBCA0\n83E0\nBCA0\nA7A0\nBCA0\n95A0\nBE60\nENDCHAR\nSTARTCHAR U_95D9\nENCODING 38361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n9220\nBBA0\nAEA0\nB920\nA2A0\nDF60\n9120\n9F60\nENDCHAR\nSTARTCHAR U_95DA\nENCODING 38362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFFE0\n94A0\nBFA0\n94A0\nFFA0\nAAA0\nC4E0\nENDCHAR\nSTARTCHAR U_95DB\nENCODING 38363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n9520\nBFA0\nA0A0\n9F20\n9120\nBFA0\n8420\nFFE0\nENDCHAR\nSTARTCHAR U_95DC\nENCODING 38364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nF5E0\nAAA0\nBBA0\nAAA0\nBBA0\n8A20\nB260\nENDCHAR\nSTARTCHAR U_95DD\nENCODING 38365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\nAA20\nBBA0\nAEA0\nB920\n92A0\nAC60\nENDCHAR\nSTARTCHAR U_95DE\nENCODING 38366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nFBE0\n9220\nFFA0\nAAA0\nB920\nAAA0\nFC60\nENDCHAR\nSTARTCHAR U_95DF\nENCODING 38367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFFE0\n9120\nBFA0\nD160\n9F20\nBFA0\nAAA0\n99A0\nAAE0\nENDCHAR\nSTARTCHAR U_95E0\nENCODING 38368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n9F20\n9520\nBFA0\n9120\n9F20\n9120\n9F20\nF1E0\nENDCHAR\nSTARTCHAR U_95E1\nENCODING 38369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\nBBA0\nAAA0\nBFA0\nA4A0\nBFA0\nA4A0\nFFE0\n8420\nENDCHAR\nSTARTCHAR U_95E2\nENCODING 38370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8120\nBBA0\nAAA0\nB920\nEFE0\nA920\nABA0\nB960\nENDCHAR\nSTARTCHAR U_95E3\nENCODING 38371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\nA4A0\n9520\nBFA0\nAAA0\n8A20\n9F20\n9520\n9F60\nENDCHAR\nSTARTCHAR U_95E4\nENCODING 38372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\nBFA0\nAAA0\nBFA0\n9120\n9F20\n8AA0\nB920\n8CE0\nENDCHAR\nSTARTCHAR U_95E5\nENCODING 38373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8220\nAFA0\n9520\nFFA0\n9220\n9FA0\n9220\nAFA0\nENDCHAR\nSTARTCHAR U_95E6\nENCODING 38374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8A20\nBFA0\nAAA0\nFFE0\n9120\n9F20\n8A20\nBF60\nENDCHAR\nSTARTCHAR U_95E7\nENCODING 38375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFBE0\n8720\nA220\n9FA0\nB2A0\n9720\n9AA0\nAFA0\n8060\nENDCHAR\nSTARTCHAR U_95E8\nENCODING 38376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n1020\n4020\n4020\n4020\n4020\n4020\n4020\n4020\n4020\n40E0\nENDCHAR\nSTARTCHAR U_95E9\nENCODING 38377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n1020\n4020\n4020\n4020\n5FA0\n4020\n4020\n4020\n4020\n40E0\nENDCHAR\nSTARTCHAR U_95EA\nENCODING 38378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n1020\n4420\n4420\n4420\n4620\n4920\n50A0\n6020\n4020\n40E0\nENDCHAR\nSTARTCHAR U_95EB\nENCODING 38379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n1020\n4020\n5FA0\n4020\n4020\n4F20\n4020\n4020\n5FA0\n4060\nENDCHAR\nSTARTCHAR U_95EC\nENCODING 38380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n17C0\n4040\n5F40\n4440\n4440\n5F40\n4440\n4440\n4440\n40C0\nENDCHAR\nSTARTCHAR U_95ED\nENCODING 38381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2020\n8220\n8220\nBFA0\n8620\n8A20\n9220\nA220\n8620\n80E0\nENDCHAR\nSTARTCHAR U_95EE\nENCODING 38382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n1020\n4020\n4F20\n4920\n4920\n4920\n4F20\n4020\n4020\n40E0\nENDCHAR\nSTARTCHAR U_95EF\nENCODING 38383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2020\n5F20\n4920\n4920\n4FA0\n40A0\n5EA0\n40A0\n4320\n4060\nENDCHAR\nSTARTCHAR U_95F0\nENCODING 38384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n9020\n8020\n9F20\n8420\n8420\n9F20\n8420\n8420\nBFA0\n80E0\nENDCHAR\nSTARTCHAR U_95F1\nENCODING 38385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\n8420\nBFA0\n8420\n9F20\n8420\nBFA0\n84A0\n85A0\n80E0\nENDCHAR\nSTARTCHAR U_95F2\nENCODING 38386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\n8420\n8420\nBFA0\n8420\n8E20\n9520\nA4A0\n8420\n80E0\nENDCHAR\nSTARTCHAR U_95F3\nENCODING 38387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\n8420\n8420\nBFA0\n8A20\n9220\nA520\n8FA0\n80A0\n8060\nENDCHAR\nSTARTCHAR U_95F4\nENCODING 38388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n1020\n4020\n4F20\n4920\n4F20\n4920\n4920\n4F20\n4020\n40E0\nENDCHAR\nSTARTCHAR U_95F5\nENCODING 38389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n9020\n8420\nBFA0\n8220\n8A20\n8420\n8A20\n9120\nA120\n8060\nENDCHAR\nSTARTCHAR U_95F6\nENCODING 38390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\n8420\nBFA0\n8020\n8E20\n8A20\n8AA0\n92A0\nA1A0\n8060\nENDCHAR\nSTARTCHAR U_95F7\nENCODING 38391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n1020\n8420\n8A20\n8820\nA920\nA8A0\nC920\n8720\n8020\n80E0\nENDCHAR\nSTARTCHAR U_95F8\nENCODING 38392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n1020\n5FA0\n54A0\n5FA0\n54A0\n5FA0\n54A0\n4420\n4420\n4060\nENDCHAR\nSTARTCHAR U_95F9\nENCODING 38393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\n8420\nBFA0\n8420\nBFA0\nA4A0\nA4A0\nA5A0\n8420\n8060\nENDCHAR\nSTARTCHAR U_95FA\nENCODING 38394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\n8420\n9F20\n8420\nBFA0\n8420\n9F20\n8420\nBFA0\n8060\nENDCHAR\nSTARTCHAR U_95FB\nENCODING 38395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n1020\n5FA0\n4920\n4F20\n4920\n4F20\n49A0\n5F20\n4120\n4060\nENDCHAR\nSTARTCHAR U_95FC\nENCODING 38396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n1020\n6120\n57A0\n4120\n7920\n4AA0\n4C60\n5420\n63A0\n4060\nENDCHAR\nSTARTCHAR U_95FD\nENCODING 38397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n1020\n4420\n5FA0\n54A0\n54A0\n5FA0\n4420\n44A0\n5FA0\n4060\nENDCHAR\nSTARTCHAR U_95FE\nENCODING 38398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n1020\n4F20\n4920\n4F20\n4020\n5FA0\n50A0\n5FA0\n4020\n4060\nENDCHAR\nSTARTCHAR U_95FF\nENCODING 38399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FC0\n0040\n5540\n5F40\n4040\n5E40\n4240\n5E40\n5140\n4F40\n40C0\nENDCHAR\nSTARTCHAR U_9600\nENCODING 38400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\n8D20\n94A0\n9FE0\nB420\nD520\n92A0\n95A0\n98A0\n8060\nENDCHAR\nSTARTCHAR U_9601\nENCODING 38401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n4820\n0F20\n9920\nA620\n8920\nBFA0\n9120\n9F20\n9120\n8060\nENDCHAR\nSTARTCHAR U_9602\nENCODING 38402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2820\n8420\nBFA0\n8920\n9E20\n84A0\n9920\n8620\n99A0\n8060\nENDCHAR\nSTARTCHAR U_9603\nENCODING 38403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\nBFA0\nA4A0\nBFA0\nA4A0\nAEA0\nB5A0\nA4A0\nBFA0\n8060\nENDCHAR\nSTARTCHAR U_9604\nENCODING 38404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5020\n4E20\n5220\n7F20\n5520\n5F20\n5520\n5F20\n44A0\n43E0\nENDCHAR\nSTARTCHAR U_9605\nENCODING 38405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n9020\n9120\n8A20\n9F20\n9120\n9F20\n8A20\n8AA0\nB1A0\n8060\nENDCHAR\nSTARTCHAR U_9606\nENCODING 38406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n1020\n4420\n5F20\n5120\n5F20\n5120\n5F20\n54A0\n5B20\n40E0\nENDCHAR\nSTARTCHAR U_9607\nENCODING 38407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n44A0\n9FA0\n8520\nBFE0\n8820\n9F20\nA920\n8F20\n8920\n8F60\nENDCHAR\nSTARTCHAR U_9608\nENCODING 38408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n1120\n82A0\nBFE0\n8220\nBAA0\nAAA0\nB920\n8120\nBAA0\n8460\nENDCHAR\nSTARTCHAR U_9609\nENCODING 38409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n1420\nFFA0\n8920\nBFA0\nD560\n9F20\n9520\n9F20\n84A0\n83E0\nENDCHAR\nSTARTCHAR U_960A\nENCODING 38410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\n9F20\n9120\n9F20\n9120\nBFA0\nA0A0\nBFA0\nA0A0\nBFE0\nENDCHAR\nSTARTCHAR U_960B\nENCODING 38411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\n8820\nB3A0\nA0A0\nBBA0\nA0A0\nBFA0\n8A20\n8AA0\nB1E0\nENDCHAR\nSTARTCHAR U_960C\nENCODING 38412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\n9FA0\nA4A0\n9520\nBFA0\nA0A0\n9F20\n9220\n8C20\nB360\nENDCHAR\nSTARTCHAR U_960D\nENCODING 38413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n20A0\n9F20\n9220\n9FA0\n9120\n9FA0\n9120\n9F20\n9120\n9F60\nENDCHAR\nSTARTCHAR U_960E\nENCODING 38414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n9020\n8820\n9F20\nA220\n9BA0\nA0A0\nBBA0\nA0A0\nBFA0\n8060\nENDCHAR\nSTARTCHAR U_960F\nENCODING 38415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n1020\n8920\nBDA0\n9260\n9D20\n94A0\n9420\n9520\nA4A0\nC860\nENDCHAR\nSTARTCHAR U_9610\nENCODING 38416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n9120\nBFA0\nA4A0\nBFA0\nA4A0\nBFA0\n8420\nBFA0\n8420\n8060\nENDCHAR\nSTARTCHAR U_9611\nENCODING 38417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2420\nBFA0\n8420\nBFA0\nAAA0\nBFA0\n8E20\n9520\nA4A0\n8060\nENDCHAR\nSTARTCHAR U_9612\nENCODING 38418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\n9F20\n9120\n9F20\n9120\n9F20\n8520\nBFA0\n8A20\nB1E0\nENDCHAR\nSTARTCHAR U_9613\nENCODING 38419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n4420\n1F20\n9520\nFFE0\n8020\n9F20\n9520\n9520\n8A20\nB160\nENDCHAR\nSTARTCHAR U_9614\nENCODING 38420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\nA1A0\n9620\nC220\nAFA0\n9220\nAFA0\nE8A0\nAFA0\nA060\nENDCHAR\nSTARTCHAR U_9615\nENCODING 38421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\n9F20\nAAA0\n9120\n9EA0\nA460\nBFA0\n8420\n8A20\n9160\nENDCHAR\nSTARTCHAR U_9616\nENCODING 38422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n9420\n9F20\n8420\nBFA0\n8920\n9FA0\n8020\nBFA0\nAAA0\nBFE0\nENDCHAR\nSTARTCHAR U_9617\nENCODING 38423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n9420\nBFA0\n8420\n9F20\n9120\n9F20\n9120\nBFA0\n8A20\nB1E0\nENDCHAR\nSTARTCHAR U_9618\nENCODING 38424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\n9F20\n9520\n9F20\n8020\nBFA0\n96A0\n8DA0\n96A0\nADE0\nENDCHAR\nSTARTCHAR U_9619\nENCODING 38425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\nAA20\n9220\nFFE0\n9560\nD520\nFD20\n92A0\nA4A0\nC060\nENDCHAR\nSTARTCHAR U_961A\nENCODING 38426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2020\nBA20\n8A20\nBFE0\nAAA0\nBAA0\nAAA0\nB920\nAAA0\nFC60\nENDCHAR\nSTARTCHAR U_961B\nENCODING 38427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9FE0\n4020\nBFA0\nAAA0\nFFE0\n9120\n9F20\n8D20\n9A20\nEDA0\n8860\nENDCHAR\nSTARTCHAR U_961C\nENCODING 38428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n7F80\n4080\n7F80\n4000\n7FC0\n4040\n7FC0\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_961D\nENCODING 38429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF800\n8800\n9000\nA000\n9000\n8800\n8800\nC800\nB000\n8000\n8000\nENDCHAR\nSTARTCHAR U_961E\nENCODING 38430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9100\nAFE0\nC120\nA120\n9120\n9120\nD220\nA220\n84A0\n9840\nENDCHAR\nSTARTCHAR U_961F\nENCODING 38431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9100\nA100\nC100\nA100\n9100\n9100\nD280\nA280\n8440\n9820\nENDCHAR\nSTARTCHAR U_9620\nENCODING 38432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF80\n9280\nA280\nC280\nA280\n9F80\n9280\nF2A0\nA2A0\n8260\n8220\nENDCHAR\nSTARTCHAR U_9621\nENCODING 38433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0C0\n9700\nA100\nC100\nAFE0\n9100\n9100\nF100\nA100\n8100\n8100\nENDCHAR\nSTARTCHAR U_9622\nENCODING 38434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9280\nA280\nC280\nA280\n9280\n9280\nF280\nA4A0\n88A0\n9060\nENDCHAR\nSTARTCHAR U_9623\nENCODING 38435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF400\n9400\nA7E0\nC800\nA780\n9080\n9100\nF200\nA420\n8420\n83E0\nENDCHAR\nSTARTCHAR U_9624\nENCODING 38436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9520\nA560\nC5A0\nA720\n9D20\n9560\nF500\nA420\n8420\n83E0\nENDCHAR\nSTARTCHAR U_9625\nENCODING 38437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nA200\nA240\nDB80\nAB00\nAA80\nAA80\nCA40\n9220\nA200\n8600\nENDCHAR\nSTARTCHAR U_9626\nENCODING 38438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9200\nA240\nCA80\nAB00\n9200\nD200\nA500\n8500\n8880\n9060\nENDCHAR\nSTARTCHAR U_9627\nENCODING 38439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n9480\nA280\nC880\nA480\n94E0\nD380\nAC80\n8080\n8080\n8080\nENDCHAR\nSTARTCHAR U_9628\nENCODING 38440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9400\nA5E0\nC520\nA520\n9520\n9560\nF500\nA520\n8920\n90E0\nENDCHAR\nSTARTCHAR U_9629\nENCODING 38441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9C80\nA480\nC480\nAFE0\n9480\nD480\nA480\n8480\n8880\n9080\nENDCHAR\nSTARTCHAR U_962A\nENCODING 38442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF060\n9780\nA400\nC7E0\nA540\n9540\n9540\nF540\nA480\n8940\n9220\nENDCHAR\nSTARTCHAR U_962B\nENCODING 38443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF000\n9FE0\nA080\nA100\n9300\nD580\nA960\n9120\n8100\n8100\n8100\nENDCHAR\nSTARTCHAR U_962C\nENCODING 38444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9100\nAFE0\nC000\nA780\n9480\n9480\nF480\nA4A0\n88A0\n9060\nENDCHAR\nSTARTCHAR U_962D\nENCODING 38445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9200\nA440\nCFA0\nA020\n9480\n9480\nF480\nA4A0\n88A0\n9060\nENDCHAR\nSTARTCHAR U_962E\nENCODING 38446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9000\nA000\nCFE0\nA280\n9280\n9280\nF280\nA2A0\n84A0\n9860\nENDCHAR\nSTARTCHAR U_962F\nENCODING 38447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n9080\nA080\nC480\nA4E0\n9480\n9480\nF480\nA480\n8480\n9FE0\nENDCHAR\nSTARTCHAR U_9630\nENCODING 38448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF480\n9480\nA480\nC4A0\nA7C0\n9480\n9480\nF480\nA5A0\n86A0\n8C60\nENDCHAR\nSTARTCHAR U_9631\nENCODING 38449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n9240\nA7E0\nC240\nA240\n9240\n9FE0\nF240\nA240\n8440\n8840\nENDCHAR\nSTARTCHAR U_9632\nENCODING 38450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9100\nAFE0\nC200\nA3C0\n9240\n9240\nD240\nA440\n8840\n9180\nENDCHAR\nSTARTCHAR U_9633\nENCODING 38451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\nA420\nC420\nA7E0\n9420\n9420\nD420\nA420\n87E0\n8420\nENDCHAR\nSTARTCHAR U_9634\nENCODING 38452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3E0\n9220\nA220\nC3E0\nA220\n9220\n93E0\nD220\nA220\n8420\n88E0\nENDCHAR\nSTARTCHAR U_9635\nENCODING 38453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9FE0\nA400\nC500\nAFC0\n9100\n9100\nDFE0\nA100\n8100\n8100\nENDCHAR\nSTARTCHAR U_9636\nENCODING 38454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9100\nA280\nC440\nA820\n9240\n9240\nD240\nA240\n8440\n8840\nENDCHAR\nSTARTCHAR U_9637\nENCODING 38455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA100\nA100\nC100\nA9C0\nA900\nA900\nC900\n8900\nBFE0\n8000\nENDCHAR\nSTARTCHAR U_9638\nENCODING 38456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nAFC0\nA840\nCFC0\nA800\nAFC0\nA880\nC900\n9220\n9420\nA3E0\nENDCHAR\nSTARTCHAR U_9639\nENCODING 38457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9100\nA7C0\nC100\nA100\n9FE0\n9200\nF200\nA440\n8FA0\n8420\nENDCHAR\nSTARTCHAR U_963A\nENCODING 38458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF060\n9780\nA480\nC480\nA7E0\n9480\n9480\nF4A0\nA560\n8EA0\n84A0\nENDCHAR\nSTARTCHAR U_963B\nENCODING 38459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\nA440\nC7C0\nA440\n9440\n9440\nD7C0\nA440\n8440\n9FE0\nENDCHAR\nSTARTCHAR U_963C\nENCODING 38460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9200\nA3E0\nC500\nA9E0\n9100\n9100\nF1E0\nA100\n8100\n8100\nENDCHAR\nSTARTCHAR U_963D\nENCODING 38461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9100\nA1E0\nC100\nA100\n97E0\n9420\nF420\nA420\n87E0\n8420\nENDCHAR\nSTARTCHAR U_963E\nENCODING 38462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nA200\nA500\nC880\nB260\nA200\nAFC0\nC080\n8500\n8200\n8100\nENDCHAR\nSTARTCHAR U_963F\nENCODING 38463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9040\nA040\nA740\nA540\n9540\n9540\nD740\nA040\n8040\n80C0\nENDCHAR\nSTARTCHAR U_9640\nENCODING 38464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9100\nAFE0\nC820\nA200\n9240\n9280\nD300\nA220\n8220\n81E0\nENDCHAR\nSTARTCHAR U_9641\nENCODING 38465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE800\nAFE0\nB000\nC240\nABC0\nAE40\nBB40\nAA80\nCA20\n8820\n87E0\nENDCHAR\nSTARTCHAR U_9642\nENCODING 38466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9100\nA7E0\nC520\nA500\n97C0\n9540\nF540\nA480\n8940\n9620\nENDCHAR\nSTARTCHAR U_9643\nENCODING 38467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9100\nA100\nC7E0\nA520\n95A0\n9560\nF620\nA420\n8420\n84E0\nENDCHAR\nSTARTCHAR U_9644\nENCODING 38468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n9240\nA440\nC7E0\nAC40\n9540\n94C0\nD440\nA440\n8440\n84C0\nENDCHAR\nSTARTCHAR U_9645\nENCODING 38469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9000\nA000\nCFE0\nA100\n9540\n9540\nD520\nA920\n8100\n8300\nENDCHAR\nSTARTCHAR U_9646\nENCODING 38470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\nA100\nC100\nAFE0\n9100\n9520\nF520\nA520\n87E0\n8420\nENDCHAR\nSTARTCHAR U_9647\nENCODING 38471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9240\nAFE0\nC200\nA300\n9540\n9540\nD580\nA920\n8B20\n94E0\nENDCHAR\nSTARTCHAR U_9648\nENCODING 38472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9FE0\nA400\nC500\nAFE0\n9100\n9580\nF540\nA920\n9520\n8200\nENDCHAR\nSTARTCHAR U_9649\nENCODING 38473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9040\nA080\nC140\nA620\n9000\n97C0\nF100\nA100\n8100\n8FE0\nENDCHAR\nSTARTCHAR U_964A\nENCODING 38474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n93E0\nA440\nCA80\nA100\n9700\n91E0\nF640\nA180\n8100\n8E00\nENDCHAR\nSTARTCHAR U_964B\nENCODING 38475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE7E0\nA080\nA3E0\nAAA0\nCAA0\nAB60\nAA20\nAA20\nEA60\n8800\n8FE0\nENDCHAR\nSTARTCHAR U_964C\nENCODING 38476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9080\nA100\nC7E0\nA420\n9420\n97E0\nF420\nA420\n87E0\n8420\nENDCHAR\nSTARTCHAR U_964D\nENCODING 38477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n93E0\nA640\nC180\nA660\n9100\n97E0\nD500\nAFE0\n8100\n8100\nENDCHAR\nSTARTCHAR U_964E\nENCODING 38478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF500\n9500\nA7C0\nC900\nA100\n9FE0\n9100\nF380\nA540\n8920\n9120\nENDCHAR\nSTARTCHAR U_964F\nENCODING 38479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\nA200\nC3E0\nA620\n9BE0\n9220\nF3E0\nA220\n8220\n8260\nENDCHAR\nSTARTCHAR U_9650\nENCODING 38480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\nA7C0\nC440\nA7C0\n9500\n9520\nD540\nA480\n8540\n8620\nENDCHAR\nSTARTCHAR U_9651\nENCODING 38481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9100\nA200\nCFE0\nAAA0\n9AA0\n9AA0\nFAA0\nAAA0\n8A20\n8860\nENDCHAR\nSTARTCHAR U_9652\nENCODING 38482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nA3C0\nC480\nBFE0\nA800\nAFC0\nEA40\n8AC0\n8A00\n9220\nA1E0\nENDCHAR\nSTARTCHAR U_9653\nENCODING 38483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9FE0\nA480\nCB40\nA020\n9FE0\n9200\nF7C0\nA040\n8240\n8180\nENDCHAR\nSTARTCHAR U_9654\nENCODING 38484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF300\n9100\nAFE0\nC200\nA440\n9780\n9120\nF240\nAC80\n8160\n8E20\nENDCHAR\nSTARTCHAR U_9655\nENCODING 38485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\nA920\nC540\nA580\n9FE0\nD100\nA280\n8280\n8440\n8820\nENDCHAR\nSTARTCHAR U_9656\nENCODING 38486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nA480\nCFC0\nA480\nAA40\nB3A0\nE480\n8A80\n8100\n8280\n8C60\nENDCHAR\nSTARTCHAR U_9657\nENCODING 38487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF220\nAA40\nA680\nCFC0\nA840\nAFC0\nA840\nEFC0\n8840\n8940\n8880\nENDCHAR\nSTARTCHAR U_9658\nENCODING 38488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9540\nA540\nCA80\nA540\n9540\n97C0\nF100\nA100\n8100\n8FE0\nENDCHAR\nSTARTCHAR U_9659\nENCODING 38489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFC0\nA800\nABC0\nC800\nAFE0\nAA80\nAAA0\nEA40\n8A40\n9340\nA220\nENDCHAR\nSTARTCHAR U_965A\nENCODING 38490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE080\nAEC0\nC0A0\nBFE0\nA280\nAB80\nAA80\nEA80\n8BA0\n9C60\n8020\nENDCHAR\nSTARTCHAR U_965B\nENCODING 38491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF480\n94A0\nA7C0\nC480\nA5A0\n96E0\n9100\nF7C0\nA100\n8100\n9FE0\nENDCHAR\nSTARTCHAR U_965C\nENCODING 38492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\nA100\nC540\nA540\n9BA0\n9100\nF100\nA280\n8440\n8820\nENDCHAR\nSTARTCHAR U_965D\nENCODING 38493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\nA100\nC980\nA540\n9BA0\n9100\nF100\nA280\n8440\n8820\nENDCHAR\nSTARTCHAR U_965E\nENCODING 38494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF140\n9640\nA240\nCFE0\nA240\n9440\n9100\nF7C0\nA100\n8100\n9FE0\nENDCHAR\nSTARTCHAR U_965F\nENCODING 38495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n95E0\nA500\nC500\nAFE0\n9100\n9520\nF540\nA880\n8300\n8C00\nENDCHAR\nSTARTCHAR U_9660\nENCODING 38496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE280\nBFE0\nC200\nAFC0\nAA40\nAFC0\nAA40\nEFC0\n8A40\n8A40\n8AC0\nENDCHAR\nSTARTCHAR U_9661\nENCODING 38497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9100\nA7C0\nC100\nAFE0\n9100\n95E0\nF500\nA500\n8B00\n91E0\nENDCHAR\nSTARTCHAR U_9662\nENCODING 38498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9100\nAFE0\nC820\nA7C0\n9000\n9FE0\nD480\nA4A0\n88A0\n9060\nENDCHAR\nSTARTCHAR U_9663\nENCODING 38499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\nA100\nC7E0\nA520\n97E0\n9520\nF7E0\nA100\n8FE0\n8100\nENDCHAR\nSTARTCHAR U_9664\nENCODING 38500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9280\nA440\nCBA0\nA100\n9FE0\n9100\nE540\n8920\n9120\n8300\nENDCHAR\nSTARTCHAR U_9665\nENCODING 38501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n91E0\nA240\nC480\nA000\n95E0\nD520\nA5E0\n8520\n85E0\n8520\nENDCHAR\nSTARTCHAR U_9666\nENCODING 38502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nAFE0\nC200\nA7C0\nA200\nBFE0\nC440\n8FE0\n9240\nA140\n8080\nENDCHAR\nSTARTCHAR U_9667\nENCODING 38503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\nA7E0\nC420\nA7E0\n9420\n9100\nF7E0\nA100\n8100\n9FE0\nENDCHAR\nSTARTCHAR U_9668\nENCODING 38504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\nA7C0\nC000\nA7E0\n9420\n9520\nD520\nA520\n8280\n8C60\nENDCHAR\nSTARTCHAR U_9669\nENCODING 38505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9280\nA440\nC820\nA7C0\n9000\n9A40\nD540\nA540\n8080\n8FE0\nENDCHAR\nSTARTCHAR U_966A\nENCODING 38506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA440\nC280\nAFE0\nA000\nA7C0\nC440\n8440\n87C0\n8440\nENDCHAR\nSTARTCHAR U_966B\nENCODING 38507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\n9EE0\nA280\nC280\nAEE0\n9280\n9280\nFEE0\nA280\n8280\n8280\nENDCHAR\nSTARTCHAR U_966C\nENCODING 38508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF00\nABE0\nAEA0\nAAA0\nCAA0\nAEA0\nAAA0\nAAA0\nEF40\n9AA0\n8320\nENDCHAR\nSTARTCHAR U_966D\nENCODING 38509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\nA280\nC440\nAFE0\n9040\n9740\nF540\nA740\n8040\n81C0\nENDCHAR\nSTARTCHAR U_966E\nENCODING 38510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE500\nA480\nAFE0\nC900\nBFC0\nA900\nAFC0\nE900\n8900\n8FE0\n8800\nENDCHAR\nSTARTCHAR U_966F\nENCODING 38511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE300\nA480\nA840\nB7A0\nC000\nAFE0\nAAA0\nAFE0\nEAA0\n8AA0\n8860\nENDCHAR\nSTARTCHAR U_9670\nENCODING 38512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF300\n9480\nAA40\nD120\nA780\n9100\n9FE0\nF000\nAFE0\n8440\n8FA0\nENDCHAR\nSTARTCHAR U_9671\nENCODING 38513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF400\n97E0\nA920\nC560\nA3A0\n97E0\n9320\nF5A0\nA960\n9120\n80C0\nENDCHAR\nSTARTCHAR U_9672\nENCODING 38514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9100\nAFE0\nC540\nA540\n9FE0\n9540\nF540\nAFE0\n8100\n87C0\nENDCHAR\nSTARTCHAR U_9673\nENCODING 38515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\nA100\nCFE0\nA920\n9FE0\n9920\nFFE0\nA540\n8920\n9120\nENDCHAR\nSTARTCHAR U_9674\nENCODING 38516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n97E0\nA520\nC7E0\nA520\n97E0\n9280\nF480\nAFE0\n8080\n8080\nENDCHAR\nSTARTCHAR U_9675\nENCODING 38517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\nA100\nCFE0\nA440\n9A20\n9380\nD480\nAB00\n8280\n8C60\nENDCHAR\nSTARTCHAR U_9676\nENCODING 38518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE400\nA7E0\nA820\nD7A0\nAA20\nAFA0\nA220\nEAA0\n8FA0\n8020\n80C0\nENDCHAR\nSTARTCHAR U_9677\nENCODING 38519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n93E0\nA440\nC880\nA200\n94E0\n9420\nD6E0\nA420\n87E0\n8420\nENDCHAR\nSTARTCHAR U_9678\nENCODING 38520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\nA100\nCFE0\nA240\n9420\n9900\nF7C0\nA100\n8100\n9FE0\nENDCHAR\nSTARTCHAR U_9679\nENCODING 38521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE80\nA480\nDFE0\nA480\nA480\nA880\nEFC0\n8840\n8FC0\n8840\n8FC0\nENDCHAR\nSTARTCHAR U_967A\nENCODING 38522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nA500\nA880\nDFE0\nA200\nAF80\nAA80\nCF80\n8200\n8500\n98C0\nENDCHAR\nSTARTCHAR U_967B\nENCODING 38523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA280\nAFE0\nCAA0\nAAA0\nAFE0\nA100\nE7C0\n8100\n8100\n9FE0\nENDCHAR\nSTARTCHAR U_967C\nENCODING 38524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97A0\n9120\nA140\nAFE0\n9100\n93E0\nF620\nABE0\n8220\n83E0\nENDCHAR\nSTARTCHAR U_967D\nENCODING 38525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\nA7C0\nC440\nAFE0\n9400\n97E0\nFAA0\nA4A0\n8920\n86C0\nENDCHAR\nSTARTCHAR U_967E\nENCODING 38526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9200\nAFE0\nCAA0\nAAA0\n9860\n9100\nFFE0\nA100\n8280\n8C60\nENDCHAR\nSTARTCHAR U_967F\nENCODING 38527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nB100\nBFE0\nD540\nB540\nBBA0\nB100\nD280\n9440\n9820\n9FE0\nENDCHAR\nSTARTCHAR U_9680\nENCODING 38528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9100\nAFE0\nC540\nA7C0\n9540\n97C0\nF100\nA7C0\n8100\n8FE0\nENDCHAR\nSTARTCHAR U_9681\nENCODING 38529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9440\nB7C0\nD440\nB7C0\n9100\n9FC0\nF280\n9100\n9280\n9FE0\nENDCHAR\nSTARTCHAR U_9682\nENCODING 38530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE300\nA480\nAFE0\nD400\nA780\nA400\nA780\nE400\n9FE0\n8480\n8FC0\nENDCHAR\nSTARTCHAR U_9683\nENCODING 38531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF380\n9440\nABA0\nC000\nAE20\n9AA0\n9EA0\nFAA0\nAEA0\n8A20\n8AE0\nENDCHAR\nSTARTCHAR U_9684\nENCODING 38532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\nA7C0\nC440\nA7C0\n9000\n9FE0\nF500\nA5E0\n8B00\n91E0\nENDCHAR\nSTARTCHAR U_9685\nENCODING 38533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9540\nA7C0\nC540\nA7C0\n9100\n9FE0\nD960\nAFE0\n8820\n8860\nENDCHAR\nSTARTCHAR U_9686\nENCODING 38534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF400\n97C0\nAC40\nC380\nAC60\n9500\n97E0\nF900\nA7C0\n8100\n9FE0\nENDCHAR\nSTARTCHAR U_9687\nENCODING 38535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0A0\n9FE0\nA880\nCF80\nAAA0\nAFA0\nADA0\nADC0\nEAA0\n9560\nA920\nENDCHAR\nSTARTCHAR U_9688\nENCODING 38536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9540\nA7C0\nC540\nA7C0\n9000\n9FE0\nF520\nA4C0\n8540\n8E20\nENDCHAR\nSTARTCHAR U_9689\nENCODING 38537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9CE0\nA820\nCEE0\nA820\n9FE0\n9000\nD7C0\nA100\n8100\n8FE0\nENDCHAR\nSTARTCHAR U_968A\nENCODING 38538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF440\n9280\nAFE0\nC620\nA940\n9380\n9580\nFB40\nA540\n8920\n8620\nENDCHAR\nSTARTCHAR U_968B\nENCODING 38539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97E0\nA200\nC3E0\nA480\n9BE0\n9220\nD3E0\nA220\n83E0\n8220\nENDCHAR\nSTARTCHAR U_968C\nENCODING 38540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA440\nC280\nBFE0\nA000\nA7C0\nE440\n87C0\n8440\n87C0\nENDCHAR\nSTARTCHAR U_968D\nENCODING 38541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n97C0\nA440\nA7C0\nC440\nAFE0\n9100\n97C0\nE100\n8100\n8FE0\nENDCHAR\nSTARTCHAR U_968E\nENCODING 38542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n98A0\nAEC0\nC8A0\nAEE0\n9200\n97C0\nF440\nA7C0\n8440\n87C0\nENDCHAR\nSTARTCHAR U_968F\nENCODING 38543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nB7E0\nAA00\nC7C0\nA240\nBBC0\nAA40\nCBC0\n8A40\n8C00\n93E0\nENDCHAR\nSTARTCHAR U_9690\nENCODING 38544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF780\n9480\nAFC0\nD040\nA7C0\n9040\n97C0\nD200\nAD40\n94A0\n8780\nENDCHAR\nSTARTCHAR U_9691\nENCODING 38545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF520\n9520\nA7E0\nC000\nAFE0\n9000\n97C0\nF440\nA7C0\n8280\n9FE0\nENDCHAR\nSTARTCHAR U_9692\nENCODING 38546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF440\n9FE0\nA280\nCFE0\nA2A0\n9FE0\n92A0\nFFE0\nA680\n8AC0\n92A0\nENDCHAR\nSTARTCHAR U_9693\nENCODING 38547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9200\nA5C0\nC880\nA7E0\n9200\n9FE0\nF200\nA7C0\n8880\n97E0\nENDCHAR\nSTARTCHAR U_9694\nENCODING 38548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA440\nA7C0\nC000\nAFE0\nAAA0\nA920\nAFE0\nE920\n8920\n8860\nENDCHAR\nSTARTCHAR U_9695\nENCODING 38549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n9440\nA7C0\nC000\nA7C0\n9440\n9740\nF5C0\nA440\n87C0\n8C60\nENDCHAR\nSTARTCHAR U_9696\nENCODING 38550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE400\nAFC0\nA840\nCFC0\nA800\nAFE0\nA800\nEFE0\n8AA0\n9560\n8060\nENDCHAR\nSTARTCHAR U_9697\nENCODING 38551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\nA540\nC7C0\nA540\n97C0\n9140\nF1A0\nA3E0\n8520\n98E0\nENDCHAR\nSTARTCHAR U_9698\nENCODING 38552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE880\nA500\nBFE0\nC500\nA880\n9040\nBFE0\nD540\n9540\n9540\nBFE0\nENDCHAR\nSTARTCHAR U_9699\nENCODING 38553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9540\nA920\nD7C0\nA440\n97C0\n9440\nF7C0\nA540\n8920\n9320\nENDCHAR\nSTARTCHAR U_969A\nENCODING 38554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEA80\nA700\nDFE0\nD020\nAF80\nA880\nAF80\nC200\n9FC0\n8200\nBFE0\nENDCHAR\nSTARTCHAR U_969B\nENCODING 38555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n95A0\nAAC0\nC440\nABA0\n9000\n9FE0\nD100\nA540\n8920\n9320\nENDCHAR\nSTARTCHAR U_969C\nENCODING 38556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\nA480\nCFE0\nA440\n97C0\n9440\nF7C0\nA100\n8FE0\n8100\nENDCHAR\nSTARTCHAR U_969D\nENCODING 38557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nEF80\nA880\nCF80\nA880\nAFE0\nE800\n8FC0\n8040\n9540\n8080\nENDCHAR\nSTARTCHAR U_969E\nENCODING 38558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE480\nBF80\nA4E0\nCEA0\nA4A0\nBFA0\nA8A0\nEEA0\n8A40\n92A0\nA520\nENDCHAR\nSTARTCHAR U_969F\nENCODING 38559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE540\nAA80\nA540\nCFC0\nAA40\nAFC0\nAA40\nDFE0\n8700\n8A80\nB260\nENDCHAR\nSTARTCHAR U_96A0\nENCODING 38560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE1C0\nAE40\nAA80\nCFC0\nA040\nAFC0\nA040\nDFC0\n8540\n94A0\n9380\nENDCHAR\nSTARTCHAR U_96A1\nENCODING 38561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9FE0\nA240\nC180\nAFE0\n9A80\n9BE0\nFC80\nABE0\n9080\nA7E0\nENDCHAR\nSTARTCHAR U_96A2\nENCODING 38562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\nA100\nCFE0\nA440\n9EE0\n9440\nFFE0\nA280\n84A0\n9860\nENDCHAR\nSTARTCHAR U_96A3\nENCODING 38563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A80\nE700\nBFE0\nC700\nAAC0\nB240\nDFE0\n9540\nB5E0\n8840\nB040\nENDCHAR\nSTARTCHAR U_96A4\nENCODING 38564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\nA540\nCFE0\nA440\n97C0\n9440\nF7C0\nA440\n87C0\n8C60\nENDCHAR\nSTARTCHAR U_96A5\nENCODING 38565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\nB540\nA880\nD740\nA020\nAF80\nA880\nCF80\n8880\n8500\nBFE0\nENDCHAR\nSTARTCHAR U_96A6\nENCODING 38566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE40\nABE0\nAA20\nCEA0\nA840\nAFE0\nBA40\nDBE0\nAA40\n8E40\n8040\nENDCHAR\nSTARTCHAR U_96A7\nENCODING 38567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n9FE0\nA500\nC2A0\nADC0\n96C0\n95A0\nF6A0\nA580\n8A00\n91E0\nENDCHAR\nSTARTCHAR U_96A8\nENCODING 38568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n9BE0\nA480\nC7E0\nA140\n9DC0\n9540\nF5C0\nA540\n8A40\n91E0\nENDCHAR\nSTARTCHAR U_96A9\nENCODING 38569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n9FE0\nAD60\nCBA0\nAFE0\n9920\n9BA0\nF560\nAFE0\n8280\n8C60\nENDCHAR\nSTARTCHAR U_96AA\nENCODING 38570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF300\n9480\nA840\nC7A0\nA000\n9EE0\n9AA0\nFEE0\nA440\n8AA0\n9120\nENDCHAR\nSTARTCHAR U_96AB\nENCODING 38571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA540\nDFE0\nA440\nA7C0\nA540\nC6C0\n8540\n87C0\n8820\nENDCHAR\nSTARTCHAR U_96AC\nENCODING 38572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\nA540\nA920\nBFE0\nC920\nADA0\nAB60\nADA0\nEB60\n8DA0\n8960\nENDCHAR\nSTARTCHAR U_96AD\nENCODING 38573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFC0\nA200\nDFE0\nD2A0\nAB00\nB280\nAFC0\nC400\n9FC0\n9540\n95C0\nENDCHAR\nSTARTCHAR U_96AE\nENCODING 38574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nAFE0\nA2A0\nAD40\nD560\nA540\nA440\nA7C0\nE440\n87C0\n9840\nENDCHAR\nSTARTCHAR U_96AF\nENCODING 38575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nEFC0\nA200\nDFE0\nA220\nBFE0\nA040\nDFE0\n9540\n9D40\n80C0\nENDCHAR\nSTARTCHAR U_96B0\nENCODING 38576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9420\nA7E0\nC420\nA7E0\n9240\n95A0\nF2A0\nA7E0\n8540\n8AA0\nENDCHAR\nSTARTCHAR U_96B1\nENCODING 38577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9540\n9FE0\nA100\nCFE0\nA040\n9FC0\n9200\nF540\nACA0\n93A0\nENDCHAR\nSTARTCHAR U_96B2\nENCODING 38578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nAAC0\nB300\nCFE0\nB900\nAFC0\nA900\nCFE0\n8020\n95A0\n8060\nENDCHAR\nSTARTCHAR U_96B3\nENCODING 38579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\nAFE0\nA500\nCFE0\nA440\nE7C0\n8C40\nBB00\nC8E0\n2A80\n5940\nENDCHAR\nSTARTCHAR U_96B4\nENCODING 38580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE4E0\nBF80\nAAE0\nC420\nBFE0\nAA80\nAEE0\nEA80\n8EE0\n8AA0\n8AE0\nENDCHAR\nSTARTCHAR U_96B5\nENCODING 38581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE780\nA4C0\nDFA0\nD4E0\nBF80\nB4A0\nDFA0\n9AA0\n9E40\nAAC0\nDF20\nENDCHAR\nSTARTCHAR U_96B6\nENCODING 38582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n0480\n7FE0\n0480\n7F80\n2640\n1D80\n1480\nE460\n0C20\nENDCHAR\nSTARTCHAR U_96B7\nENCODING 38583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n2140\n77E0\n0140\n77C0\n2540\nFB80\n7540\nA960\n6300\nENDCHAR\nSTARTCHAR U_96B8\nENCODING 38584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n2140\n77E0\nA940\n77C0\n0120\nFDC0\n2B40\nA520\n6320\nENDCHAR\nSTARTCHAR U_96B9\nENCODING 38585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1100\n3FE0\n2200\n7FC0\nA200\n2200\n3FC0\n2200\n3FE0\n2000\nENDCHAR\nSTARTCHAR U_96BA\nENCODING 38586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4840\n1200\n3FC0\nE200\n3F80\n2200\n3F80\n2200\n3FC0\nENDCHAR\nSTARTCHAR U_96BB\nENCODING 38587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n3FE0\n2200\n7FE0\nA200\n3FE0\n2200\n7FE0\n10C0\n0F00\nF1E0\nENDCHAR\nSTARTCHAR U_96BC\nENCODING 38588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n3FE0\n6200\nBFC0\n2200\n3FC0\n2200\n3FE0\n0200\nFFE0\n0200\nENDCHAR\nSTARTCHAR U_96BD\nENCODING 38589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n2200\n3FE0\n6200\nBFC0\n2200\n7FE0\n0880\n09E0\n3020\nC0C0\nENDCHAR\nSTARTCHAR U_96BE\nENCODING 38590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0280\nF280\n17E0\n9C80\n5480\n27E0\n2480\n57E0\n5480\n8480\n07E0\nENDCHAR\nSTARTCHAR U_96BF\nENCODING 38591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6300\n5480\n47E0\n7C80\nC480\n47E0\n4480\n57E0\n5480\n37E0\n1400\nENDCHAR\nSTARTCHAR U_96C0\nENCODING 38592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n2560\n4620\n8500\n1FE0\n3200\nDFC0\n1200\n1FC0\n1200\n1FE0\nENDCHAR\nSTARTCHAR U_96C1\nENCODING 38593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4A00\n4A80\n53E0\n5680\n7BC0\n5280\n53C0\n5280\n93E0\n9200\nENDCHAR\nSTARTCHAR U_96C2\nENCODING 38594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\n3280\n6BE0\n9680\n03E0\nFA80\n0BE0\n1280\n13E0\n2200\nENDCHAR\nSTARTCHAR U_96C3\nENCODING 38595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFB00\n5280\n53E0\n5680\n53E0\nFE80\n53E0\n5280\n5280\n53E0\n9200\nENDCHAR\nSTARTCHAR U_96C4\nENCODING 38596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n1280\nFFE0\n2280\n2680\n53E0\n5280\n93E0\nA280\n2A80\n7BE0\nENDCHAR\nSTARTCHAR U_96C5\nENCODING 38597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFB00\n1280\n53E0\n5680\nFBE0\n1280\n3280\n53E0\n9280\n1280\n73E0\nENDCHAR\nSTARTCHAR U_96C6\nENCODING 38598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n2200\n7FE0\nA400\n3FC0\n2400\n3FC0\n2400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_96C7\nENCODING 38599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n4040\n7FC0\n4A00\n4900\n5FE0\n6900\n4FC0\n4900\n8FE0\nENDCHAR\nSTARTCHAR U_96C8\nENCODING 38600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nF9E0\n0900\n1200\n3FE0\n6200\nBFC0\n2200\n3FC0\n2200\n3FE0\nENDCHAR\nSTARTCHAR U_96C9\nENCODING 38601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n4280\n7BE0\nA680\n2280\nFBE0\n2280\n23E0\n3280\n4A80\n83E0\nENDCHAR\nSTARTCHAR U_96CA\nENCODING 38602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4180\n4280\n7BE0\n8E80\nEA80\nABE0\nAA80\nEBE0\n0A80\n0BE0\n3200\nENDCHAR\nSTARTCHAR U_96CB\nENCODING 38603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n3FE0\n2200\n7FC0\nA200\n3FE0\n2000\n79E0\n4920\n4F20\n4060\nENDCHAR\nSTARTCHAR U_96CC\nENCODING 38604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n2A80\n2BE0\nBE80\nABE0\nAA80\nABE0\nAA80\nBE80\nCBE0\n0200\nENDCHAR\nSTARTCHAR U_96CD\nENCODING 38605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n57E0\nE480\n2FC0\n4C80\nF7C0\n1480\n27E0\nC400\nENDCHAR\nSTARTCHAR U_96CE\nENCODING 38606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7B00\n4A80\n4BE0\n7E80\n4BE0\n4A80\n7BE0\n4E80\nFA80\n43E0\n0200\nENDCHAR\nSTARTCHAR U_96CF\nENCODING 38607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n7A80\n4BE0\n9680\nFA80\n0BE0\n0A80\n7BE0\n0A80\nFBE0\n0A00\nENDCHAR\nSTARTCHAR U_96D0\nENCODING 38608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\n0400\n7FE0\n4420\n5F00\n5440\n5FC0\n7200\n5FC0\n9200\n9FC0\nENDCHAR\nSTARTCHAR U_96D1\nENCODING 38609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n7A80\n2BE0\n2A80\n4E80\n13C0\nFE80\n13C0\n5A80\n97E0\n3200\nENDCHAR\nSTARTCHAR U_96D2\nENCODING 38610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4300\n7280\n93E0\n6680\n2BE0\n5280\nF280\n53E0\n5280\n73E0\n5200\nENDCHAR\nSTARTCHAR U_96D3\nENCODING 38611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\n5480\n8FE0\n7480\n2480\nFFE0\n2480\n77E0\nAC80\n27E0\n6400\nENDCHAR\nSTARTCHAR U_96D4\nENCODING 38612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6100\n9280\nFFE0\n9280\n9280\nFFE0\n9280\nFFE0\n9280\nFFE0\n8200\nENDCHAR\nSTARTCHAR U_96D5\nENCODING 38613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF980\nAA40\nFBE0\nAE40\nFBE0\n8A40\nFA40\nDBE0\nFA40\n8A40\n9BE0\nENDCHAR\nSTARTCHAR U_96D6\nENCODING 38614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8A80\nFBE0\n2680\nFBE0\nAA80\nAA80\nFBE0\n2A80\n3A80\nC7E0\nENDCHAR\nSTARTCHAR U_96D7\nENCODING 38615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFBE0\n2480\nFA40\n8BE0\nFE80\n8BE0\nFA80\n23E0\nFA80\n23E0\nENDCHAR\nSTARTCHAR U_96D8\nENCODING 38616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A40\n4FE0\n6A40\n5FE0\n4A80\nFBE0\n4A80\n4FE0\n4A40\n8980\n9E60\nENDCHAR\nSTARTCHAR U_96D9\nENCODING 38617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\n3FE0\n6A80\nBFC0\n2A80\n3FE0\n0000\n3FC0\n0880\n0700\n78E0\nENDCHAR\nSTARTCHAR U_96DA\nENCODING 38618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0900\n7BC0\n4A40\n7BC0\n2200\n3FE0\n6200\nBFC0\n2200\n3FE0\nENDCHAR\nSTARTCHAR U_96DB\nENCODING 38619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFA80\nABE0\nFE80\n2A80\nCBE0\n7A80\nABE0\nFA80\n2BE0\nD200\nENDCHAR\nSTARTCHAR U_96DC\nENCODING 38620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFE80\n4BE0\n4A80\nB7E0\n1280\nFE80\n13E0\n3A80\n5680\n93E0\nENDCHAR\nSTARTCHAR U_96DD\nENCODING 38621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5580\nAA80\n57E0\nFE80\n8BE0\nFA80\nAA80\nABE0\nFA80\n87E0\n7E00\nENDCHAR\nSTARTCHAR U_96DE\nENCODING 38622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1980\nEA80\nA7E0\n5280\n23E0\nCA80\n7280\n23E0\nFA80\n5280\n8BE0\nENDCHAR\nSTARTCHAR U_96DF\nENCODING 38623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7FE0\n1200\n3FC0\n6200\nBFC0\n2200\n7FE0\n59A0\n6F60\n4060\nENDCHAR\nSTARTCHAR U_96E0\nENCODING 38624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA940\nF5E0\nA140\nAD40\nF5E0\nA540\nA540\nF5E0\nA740\nA540\nF1E0\nENDCHAR\nSTARTCHAR U_96E1\nENCODING 38625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\nB540\n6FE0\nB540\n25E0\n3940\n4540\n93E0\n6940\n1140\n61E0\nENDCHAR\nSTARTCHAR U_96E2\nENCODING 38626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1180\nFD40\n55E0\n6F40\n55E0\n7D40\n2140\nFDE0\nAD40\nB540\n8DE0\nENDCHAR\nSTARTCHAR U_96E3\nENCODING 38627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5180\nFE80\n53E0\n2680\nFBC0\nAA80\nFA80\n23C0\nFE80\n5280\n8BE0\nENDCHAR\nSTARTCHAR U_96E4\nENCODING 38628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AC0\n4440\n7BC0\n4440\nFFE0\nA420\n7FC0\nC400\n7FC0\n4400\n7FC0\nENDCHAR\nSTARTCHAR U_96E5\nENCODING 38629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n6200\nBFC0\n2200\n3FE0\n5280\n7FE0\nD280\n7BC0\n5280\n7FE0\nENDCHAR\nSTARTCHAR U_96E6\nENCODING 38630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nCCC0\nAAA0\nFFE0\nAAA0\nFFE0\nAAA0\nFFE0\nAAA0\nAAA0\nFFE0\n8880\nENDCHAR\nSTARTCHAR U_96E7\nENCODING 38631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n3F80\n1200\n7FC0\n5280\nFFC0\n5280\nFFE0\n0E00\n1500\n64C0\nENDCHAR\nSTARTCHAR U_96E8\nENCODING 38632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n0400\n7FC0\n4440\n5540\n4CC0\n6640\n5540\n4440\n44C0\nENDCHAR\nSTARTCHAR U_96E9\nENCODING 38633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n7FC0\n0000\nFFE0\n1000\n3F80\n0080\n0300\nENDCHAR\nSTARTCHAR U_96EA\nENCODING 38634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n8420\nB5A0\n0000\n7FC0\n0040\n3FC0\n0040\n7FC0\nENDCHAR\nSTARTCHAR U_96EB\nENCODING 38635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n1500\n2480\nFFE0\n0600\n0580\n0480\n0400\nENDCHAR\nSTARTCHAR U_96EC\nENCODING 38636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n1500\n2080\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_96ED\nENCODING 38637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n1500\n7F80\n1100\n1380\n2900\n4600\n99C0\nENDCHAR\nSTARTCHAR U_96EE\nENCODING 38638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n1500\n2480\n0780\n7C00\n07C0\n7C20\n03E0\nENDCHAR\nSTARTCHAR U_96EF\nENCODING 38639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n8420\nB5A0\n0400\nFFE0\n1100\n0A00\n1F00\nE0E0\nENDCHAR\nSTARTCHAR U_96F0\nENCODING 38640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nA4A0\n1100\n2080\n7FC0\n88A0\n1080\n6300\nENDCHAR\nSTARTCHAR U_96F1\nENCODING 38641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nA4A0\n0400\nFFE0\n0800\n0FC0\n3040\nC380\nENDCHAR\nSTARTCHAR U_96F2\nENCODING 38642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nA4A0\n7F80\n0000\nFFE0\n1100\nFF80\n6040\nENDCHAR\nSTARTCHAR U_96F3\nENCODING 38643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nA4A0\n7FC0\n4200\n5FC0\n4440\n4840\nB180\nENDCHAR\nSTARTCHAR U_96F4\nENCODING 38644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0400\nFFE0\nA4A0\n1500\n2880\n0400\n7FC0\n1100\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_96F5\nENCODING 38645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nA4A0\n7FC0\n4440\nFFE0\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_96F6\nENCODING 38646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n0E00\n3180\nC460\n3F80\n0100\n0E00\n0300\nENDCHAR\nSTARTCHAR U_96F7\nENCODING 38647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n8420\nB5A0\n0400\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_96F8\nENCODING 38648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nA4A0\n1080\nFFE0\n1080\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_96F9\nENCODING 38649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n3FC0\n4040\nBE40\n2240\n3EA0\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_96FA\nENCODING 38650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nA4A0\n7F80\n0900\nFFE0\n0A40\n1200\n6E00\nENDCHAR\nSTARTCHAR U_96FB\nENCODING 38651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n7FC0\n4440\n7FC0\n4440\n7FC0\n0420\n07E0\nENDCHAR\nSTARTCHAR U_96FC\nENCODING 38652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n1500\n2080\nFFE0\n0800\n1F80\nF080\n1F80\nENDCHAR\nSTARTCHAR U_96FD\nENCODING 38653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nA4A0\n01C0\n7E80\n2500\nFFE0\n0400\n1C00\nENDCHAR\nSTARTCHAR U_96FE\nENCODING 38654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n3F80\n5200\n1F00\nE4E0\n3F80\n0880\n7300\nENDCHAR\nSTARTCHAR U_96FF\nENCODING 38655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nA4A0\n2A40\n1A80\n3B00\nCAA0\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_9700\nENCODING 38656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nB5A0\n0400\nFFE0\n0800\n7FC0\n4A40\n4A40\n4AC0\nENDCHAR\nSTARTCHAR U_9701\nENCODING 38657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nA4A0\n7FC0\n1100\n0E00\nF1E0\n1100\n6100\nENDCHAR\nSTARTCHAR U_9702\nENCODING 38658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nA4A0\n9100\n6FC0\n2300\nC580\n4940\n5120\nENDCHAR\nSTARTCHAR U_9703\nENCODING 38659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n0400\nFFE0\n9520\n2480\n0200\n2FC0\n4A40\n1200\n6540\n29C0\nENDCHAR\nSTARTCHAR U_9704\nENCODING 38660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n1500\n3F80\n2080\n3F80\n2080\n3F80\n2180\nENDCHAR\nSTARTCHAR U_9705\nENCODING 38661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\nFFE0\n0000\n3F80\n0000\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_9706\nENCODING 38662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\nF7C0\n2100\n77C0\n1100\n5FE0\n2000\nDFE0\nENDCHAR\nSTARTCHAR U_9707\nENCODING 38663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA520\n94A0\n7FC0\n4000\n7FC0\n5280\n9100\n98E0\nENDCHAR\nSTARTCHAR U_9708\nENCODING 38664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n4200\nBFE0\n6200\n2FC0\nCA40\n4AC0\n4200\nENDCHAR\nSTARTCHAR U_9709\nENCODING 38665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n9520\n7FE0\n2880\nFFE0\n2480\n3FE0\n0100\nENDCHAR\nSTARTCHAR U_970A\nENCODING 38666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n2480\n7FC0\n0000\n7FC0\n4A40\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_970B\nENCODING 38667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nFFC0\n0480\n7FC0\n0480\nFFE0\n1200\nFDC0\nENDCHAR\nSTARTCHAR U_970C\nENCODING 38668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n5540\n7FC0\n4440\n5F40\n4E40\n4A40\n8EC0\nENDCHAR\nSTARTCHAR U_970D\nENCODING 38669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n3FE0\n1200\n3FC0\n5200\n9FC0\n1200\n1FE0\nENDCHAR\nSTARTCHAR U_970E\nENCODING 38670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n7FC0\n0900\nFFE0\n0400\n7FC0\n1200\nFDC0\nENDCHAR\nSTARTCHAR U_970F\nENCODING 38671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n0A00\nFBE0\n0A00\n7BC0\n0A00\nFBE0\n0A00\nENDCHAR\nSTARTCHAR U_9710\nENCODING 38672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n94A0\nAE40\n4280\nBE80\n5080\nDD00\n4520\n4DE0\nENDCHAR\nSTARTCHAR U_9711\nENCODING 38673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nA4A0\n4100\nA9E0\n5100\nE7C0\n4440\n47C0\nENDCHAR\nSTARTCHAR U_9712\nENCODING 38674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n1080\nFF40\n9220\n6C80\n3840\n03E0\nFC20\n2840\nFC40\n4480\nENDCHAR\nSTARTCHAR U_9713\nENCODING 38675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n73C0\n4040\n7BC0\n4040\n7FC0\n1220\nE3E0\nENDCHAR\nSTARTCHAR U_9714\nENCODING 38676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n0400\nFFE0\nA4A0\n5540\n4100\n2FE0\n8100\n2FC0\n4100\n5FE0\nENDCHAR\nSTARTCHAR U_9715\nENCODING 38677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n2100\nFFE0\nA900\n7540\nAD40\nFD40\n07C0\nF920\n5120\nF8E0\nENDCHAR\nSTARTCHAR U_9716\nENCODING 38678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nA4A0\n1100\nFBE0\n1100\n3B80\n5540\n9120\nENDCHAR\nSTARTCHAR U_9717\nENCODING 38679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n0400\nFFE0\n94A0\n2500\n4280\n2D40\n87E0\n2080\n4300\n4100\nENDCHAR\nSTARTCHAR U_9718\nENCODING 38680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n4FE0\n2820\nABA0\n4820\nCBA0\n4AA0\n4BA0\nENDCHAR\nSTARTCHAR U_9719\nENCODING 38681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nFFE0\n1100\n3F80\n2480\nFFE0\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_971A\nENCODING 38682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n0400\nFFE0\n9520\n2480\n7A00\n13E0\n7A40\n3580\n5180\nB660\nENDCHAR\nSTARTCHAR U_971B\nENCODING 38683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n2480\n6EC0\n2240\n4480\n66C0\n2240\n66C0\nENDCHAR\nSTARTCHAR U_971C\nENCODING 38684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n23C0\nFA40\n23C0\n3240\n6BC0\nAA40\n23C0\nENDCHAR\nSTARTCHAR U_971D\nENCODING 38685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nA0A0\n0000\nEEE0\nAAA0\nAAA0\nEEE0\nAAA0\nENDCHAR\nSTARTCHAR U_971E\nENCODING 38686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nFBC0\n4840\n7FC0\n4240\n7A40\n4180\n4E60\nENDCHAR\nSTARTCHAR U_971F\nENCODING 38687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n4480\n2FC0\nA480\n4480\nDFE0\n4480\n5860\nENDCHAR\nSTARTCHAR U_9720\nENCODING 38688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n2500\n1280\nFD40\n9120\n57C0\n2080\nF100\nENDCHAR\nSTARTCHAR U_9721\nENCODING 38689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n94A0\n2540\n7300\n5140\n7D80\n5580\n7960\n9340\nENDCHAR\nSTARTCHAR U_9722\nENCODING 38690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\nF7C0\n9440\nF580\n9540\nF580\n9540\nB920\nENDCHAR\nSTARTCHAR U_9723\nENCODING 38691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n3F80\n2080\n7FC0\n4040\n7FC0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_9724\nENCODING 38692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n73C0\n4940\n7540\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_9725\nENCODING 38693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nFFE0\n8020\n7FC0\n1480\n6F00\n1500\n6CE0\nENDCHAR\nSTARTCHAR U_9726\nENCODING 38694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n2440\nFE80\n2520\n6E40\nB5A0\n2440\n2580\nENDCHAR\nSTARTCHAR U_9727\nENCODING 38695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nFBE0\n5540\nFC80\n2940\n6FE0\nA120\n6260\nENDCHAR\nSTARTCHAR U_9728\nENCODING 38696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n7C40\n47E0\n7C40\n4240\n7D40\n5840\nB4C0\nENDCHAR\nSTARTCHAR U_9729\nENCODING 38697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nFDE0\n4920\n7D40\n0940\nFD20\n11A0\n7140\nENDCHAR\nSTARTCHAR U_972A\nENCODING 38698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n4FE0\nAA40\n47C0\n6100\nDFE0\n4100\n4FE0\nENDCHAR\nSTARTCHAR U_972B\nENCODING 38699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n7FC0\n1540\n0CC0\n7540\n3FC0\n2240\n3FC0\nENDCHAR\nSTARTCHAR U_972C\nENCODING 38700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n7FC0\n4440\n7FC0\n1100\n7FC0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_972D\nENCODING 38701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n27C0\n1540\nE440\n27E0\n2D20\n36A0\n27C0\nENDCHAR\nSTARTCHAR U_972E\nENCODING 38702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n9FE0\n4480\nA780\n4480\nDFE0\n4A80\n4FE0\nENDCHAR\nSTARTCHAR U_972F\nENCODING 38703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n7A80\n5120\n3FC0\n60A0\nBF80\n1200\nFFC0\nENDCHAR\nSTARTCHAR U_9730\nENCODING 38704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nFDE0\n5140\nFF40\n4940\n7880\n4940\n5A20\nENDCHAR\nSTARTCHAR U_9731\nENCODING 38705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n2480\nFFC0\n1480\nFFC0\n5B40\n6EC0\n40C0\nENDCHAR\nSTARTCHAR U_9732\nENCODING 38706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nF3C0\n9640\nF180\n2660\nBBC0\nA240\nF3C0\nENDCHAR\nSTARTCHAR U_9733\nENCODING 38707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n7380\n5280\n6D60\n5500\n67C0\n4900\n4FE0\nENDCHAR\nSTARTCHAR U_9734\nENCODING 38708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n23C0\nFD40\nAFE0\n7140\nAFE0\nF540\n0380\nFD60\n5140\nFB00\nENDCHAR\nSTARTCHAR U_9735\nENCODING 38709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nFCA0\n4940\nFD20\n8BE0\nF940\n88A0\nFD60\nENDCHAR\nSTARTCHAR U_9736\nENCODING 38710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n1500\n4FE0\n8280\n2FE0\nCA20\n43C0\n4C40\nENDCHAR\nSTARTCHAR U_9737\nENCODING 38711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n94A0\n2500\n77C0\n5540\n7FE0\n5400\n57E0\n7AA0\nENDCHAR\nSTARTCHAR U_9738\nENCODING 38712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nFFC0\n4A40\nFBC0\nAA40\nFFC0\n2240\n24C0\nENDCHAR\nSTARTCHAR U_9739\nENCODING 38713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n7BE0\n4940\n7880\n47E0\n7880\nABE0\n3880\nENDCHAR\nSTARTCHAR U_973A\nENCODING 38714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n6AE0\nBFA0\n40A0\nFEA0\n5440\n54A0\n6720\nENDCHAR\nSTARTCHAR U_973B\nENCODING 38715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n7FC0\n4A40\nFFE0\n2080\n3F80\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_973C\nENCODING 38716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n23E0\nFC00\nABC0\n7000\nAFC0\n7AC0\n0740\nFFC0\n5720\nFAA0\nENDCHAR\nSTARTCHAR U_973D\nENCODING 38717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nFFE0\n5A80\n94C0\n3FA0\n2080\n3F80\n4080\nENDCHAR\nSTARTCHAR U_973E\nENCODING 38718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n57C0\nA540\n57C0\nB540\n57C0\n9100\n2FE0\nENDCHAR\nSTARTCHAR U_973F\nENCODING 38719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nF9C0\n5280\nFFE0\n6A40\nA3C0\n2240\n63C0\nENDCHAR\nSTARTCHAR U_9740\nENCODING 38720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n5540\n7FC0\n1100\nFFE0\n2D00\nD600\n2DC0\nENDCHAR\nSTARTCHAR U_9741\nENCODING 38721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n3F80\n2480\n3F80\n2480\nFFE0\nAAA0\nFBE0\nENDCHAR\nSTARTCHAR U_9742\nENCODING 38722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nFFE0\n9080\nFBC0\nD4A0\n97C0\nA400\nFFE0\nENDCHAR\nSTARTCHAR U_9743\nENCODING 38723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nA4A0\nA280\nFFE0\nA280\nFBC0\nA280\nFBE0\nENDCHAR\nSTARTCHAR U_9744\nENCODING 38724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nF7C0\n0440\nF3E0\n0CA0\nF560\n9720\nF0C0\nENDCHAR\nSTARTCHAR U_9745\nENCODING 38725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A80\n27E0\nFAA0\nAFE0\n72A0\nACE0\n77C0\n0340\nFAC0\n53C0\nFE60\nENDCHAR\nSTARTCHAR U_9746\nENCODING 38726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n23E0\nF8A0\nABE0\nFCA0\nAFE0\n76A0\n05C0\nFEA0\n4D80\nFBE0\nENDCHAR\nSTARTCHAR U_9747\nENCODING 38727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nFBE0\n5200\nFBC0\n8840\nFBC0\n8A20\n9BE0\nENDCHAR\nSTARTCHAR U_9748\nENCODING 38728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n2480\nEEE0\nAAA0\nFFE0\n2480\n5540\nFFE0\nENDCHAR\nSTARTCHAR U_9749\nENCODING 38729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n22A0\nFFE0\nAAA0\nFAC0\n8D20\n73C0\n0640\nF980\n5240\nFC20\nENDCHAR\nSTARTCHAR U_974A\nENCODING 38730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\n7FC0\n5540\nFFE0\n2040\n3FC0\n0900\nFFE0\nENDCHAR\nSTARTCHAR U_974B\nENCODING 38731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n9FC0\n5480\nBFE0\n54A0\nD5C0\n6900\n9FE0\nENDCHAR\nSTARTCHAR U_974C\nENCODING 38732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA4A0\n7FC0\n5540\n1540\n3F80\n2A80\n3F80\n1100\nENDCHAR\nSTARTCHAR U_974D\nENCODING 38733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\nA520\n3BE0\n52A0\nFBE0\n5200\n7BE0\n52A0\n7D60\nENDCHAR\nSTARTCHAR U_974E\nENCODING 38734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n0400\nFFE0\n9520\n2BE0\n7EA0\n93E0\n7E00\n57E0\n3AA0\nF960\nENDCHAR\nSTARTCHAR U_974F\nENCODING 38735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n9520\nFFE0\nA6A0\n7BE0\nD200\n7BE0\n52A0\n7D60\nENDCHAR\nSTARTCHAR U_9750\nENCODING 38736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n8420\n3F80\n2480\nFFE0\n2080\nFBE0\nAAA0\nFBE0\nENDCHAR\nSTARTCHAR U_9751\nENCODING 38737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n7FC0\n0400\nFFE0\n2480\n3F80\n2080\n2280\n2100\nENDCHAR\nSTARTCHAR U_9752\nENCODING 38738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n3F80\n0400\nFFE0\n1080\n1F80\n1080\n1F80\n1080\nENDCHAR\nSTARTCHAR U_9753\nENCODING 38739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFC40\n2540\nFD40\n2540\nFD40\n5540\n7280\n52A0\n74A0\n58E0\nENDCHAR\nSTARTCHAR U_9754\nENCODING 38740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFBE0\n2400\nFBC0\n2000\nFFC0\n4840\n7840\n4840\n7820\n4820\nENDCHAR\nSTARTCHAR U_9755\nENCODING 38741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n2100\n27C0\n2100\nBFE0\nA440\nA7C0\nB440\nC7C0\n0440\nENDCHAR\nSTARTCHAR U_9756\nENCODING 38742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27E0\nF900\n07C0\n9100\n5FE0\n5440\n27C0\n3440\nC7C0\n0440\nENDCHAR\nSTARTCHAR U_9757\nENCODING 38743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF140\n2540\nF380\n27E0\nFA80\n5280\n7280\n52A0\n74A0\n5860\nENDCHAR\nSTARTCHAR U_9758\nENCODING 38744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF9C0\n2280\nFBE0\n26A0\nFAA0\n8BE0\nFA00\n8A20\nFA20\n99E0\nENDCHAR\nSTARTCHAR U_9759\nENCODING 38745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFDC0\n2280\n7BC0\n2140\nFFE0\n4940\n6BC0\n5900\n4900\n5B00\nENDCHAR\nSTARTCHAR U_975A\nENCODING 38746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2220\nFBE0\n2220\nFFE0\n4A20\n7BE0\n4940\n7940\n4A40\n5C60\nENDCHAR\nSTARTCHAR U_975B\nENCODING 38747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBE0\n2220\n7800\n23E0\nFC80\n4A80\n7AE0\n4A80\n7B80\n4CE0\nENDCHAR\nSTARTCHAR U_975C\nENCODING 38748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n2520\nFAC0\n27C0\nF940\n97E0\nF140\n97C0\nF100\n9500\nB200\nENDCHAR\nSTARTCHAR U_975D\nENCODING 38749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\nF7E0\n2800\nF780\n2000\nFFC0\n5AC0\n7740\n5FC0\n7760\n5AA0\nENDCHAR\nSTARTCHAR U_975E\nENCODING 38750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\n0A00\nFBE0\n0A00\n0A00\n7BC0\n0A00\n0A00\nFBE0\n0A00\n0A00\nENDCHAR\nSTARTCHAR U_975F\nENCODING 38751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0A00\nFBE0\n0A00\n7BE0\n0A00\n03C0\n7C00\n0400\n7FA0\n0420\n03E0\nENDCHAR\nSTARTCHAR U_9760\nENCODING 38752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n3FC0\n4400\nFFE0\n2080\n3F80\n0A00\nFBE0\n0A00\nFBE0\n0A00\nENDCHAR\nSTARTCHAR U_9761\nENCODING 38753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\n9080\nFFE0\nB9C0\nD6A0\nFBE0\n8A00\nBBC0\n8A00\nFBE0\nENDCHAR\nSTARTCHAR U_9762\nENCODING 38754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n0400\n0800\n7FE0\n4920\n4F20\n4920\n4F20\n4920\n7FE0\n4020\nENDCHAR\nSTARTCHAR U_9763\nENCODING 38755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\nFFE0\n0400\n0800\n7FC0\n4040\n5F40\n5140\n5F40\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_9764\nENCODING 38756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFDE0\n2220\nFDA0\nA6A0\nB5A0\nA520\nB560\nA500\nA520\nFDE0\nENDCHAR\nSTARTCHAR U_9765\nENCODING 38757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4280\n7FE0\n4500\n7FE0\n4200\n5FE0\n5520\n5720\n9520\n9FE0\nENDCHAR\nSTARTCHAR U_9766\nENCODING 38758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2120\nFFE0\nAB20\nBBE0\nAB20\nBBE0\nAA40\nAAC0\nFF40\n8260\nENDCHAR\nSTARTCHAR U_9767\nENCODING 38759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFC0\n4540\nFFE0\nA800\nBBC0\nAB40\nBAC0\nAB40\nFBC0\n0660\nENDCHAR\nSTARTCHAR U_9768\nENCODING 38760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA4C0\nBCA0\nA7E0\nBC80\nA540\nFFE0\n2940\n2F40\n2940\n3FC0\nENDCHAR\nSTARTCHAR U_9769\nENCODING 38761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1F00\n0400\n3F80\n2480\n3F80\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_976A\nENCODING 38762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BE0\nFC40\n2840\n3840\n1040\n7C40\n5440\n7C40\n1240\nFD40\n1080\nENDCHAR\nSTARTCHAR U_976B\nENCODING 38763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\nFFC0\n5440\n7640\n2540\nFA80\nAA80\nF900\n2280\nFC60\n2840\nENDCHAR\nSTARTCHAR U_976C\nENCODING 38764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BE0\nFC80\n2880\n3880\n1080\n7FE0\n5480\n7C80\n1080\nFC80\n1080\nENDCHAR\nSTARTCHAR U_976D\nENCODING 38765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2800\nFDE0\n28A0\n38A0\n11A0\n7EA0\n54A0\n7D20\n1120\nFEA0\n1440\nENDCHAR\nSTARTCHAR U_976E\nENCODING 38766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF900\n53E0\n7420\n2120\nF8A0\nA8A0\nF820\n2020\nF920\n20C0\nENDCHAR\nSTARTCHAR U_976F\nENCODING 38767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF900\n5100\n7100\n27C0\nF900\nA900\nF900\n2100\nF900\n27E0\nENDCHAR\nSTARTCHAR U_9770\nENCODING 38768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\nFA80\n5280\n7280\n2280\nFA80\nAA80\nFA80\n22A0\nFAA0\n24E0\nENDCHAR\nSTARTCHAR U_9771\nENCODING 38769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\nFBC0\n5140\n7140\n2540\nFB40\nA940\nFAC0\n2260\nFD40\n2080\nENDCHAR\nSTARTCHAR U_9772\nENCODING 38770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nF980\n5240\n7520\n2080\nF800\nABE0\nF840\n2040\nF880\n2080\nENDCHAR\nSTARTCHAR U_9773\nENCODING 38771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2860\nFF80\n2900\n3900\n11E0\n7D40\n5540\n7D40\n1140\nFE40\n1440\nENDCHAR\nSTARTCHAR U_9774\nENCODING 38772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5180\nFA80\n5280\n76A0\n22C0\nFA80\nAB80\nFA80\n26A0\nFAA0\n2260\nENDCHAR\nSTARTCHAR U_9775\nENCODING 38773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\nFBC0\n5140\n7140\n23C0\nF940\nA940\nF940\n2140\nFFE0\n2000\nENDCHAR\nSTARTCHAR U_9776\nENCODING 38774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\nFFE0\n52A0\n72A0\n22A0\nFBE0\nAA00\nFA00\n2220\nFE20\n23E0\nENDCHAR\nSTARTCHAR U_9777\nENCODING 38775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53A0\nF8A0\n50A0\n73A0\n2220\nFBA0\nA8A0\nF8A0\n20A0\nFCA0\n2320\nENDCHAR\nSTARTCHAR U_9778\nENCODING 38776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57C0\nFA40\n5240\n7280\n22E0\nFA20\nAA40\nFB40\n2480\nF940\n2A20\nENDCHAR\nSTARTCHAR U_9779\nENCODING 38777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nF880\n5080\n73E0\n22A0\nFAA0\nAB60\nFA20\n2220\nFA20\n2260\nENDCHAR\nSTARTCHAR U_977A\nENCODING 38778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFBE0\n5080\n7080\n23E0\nF880\nA880\nF9C0\n22A0\nFCA0\n2080\nENDCHAR\nSTARTCHAR U_977B\nENCODING 38779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53C0\nFA40\n5240\n7240\n23C0\nFA40\nAA40\nFBC0\n2240\nFA40\n27E0\nENDCHAR\nSTARTCHAR U_977C\nENCODING 38780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\nFBC0\n5240\n7240\n23C0\nFA40\nAA40\nFBC0\n2240\nF800\n27E0\nENDCHAR\nSTARTCHAR U_977D\nENCODING 38781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFEA0\n51C0\n7080\n23E0\nF880\nA880\nFFE0\n2080\nFC80\n2080\nENDCHAR\nSTARTCHAR U_977E\nENCODING 38782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n52A0\nFAA0\n52A0\n77E0\n22A0\nFAA0\nAAA0\nFAE0\n2200\nFA00\n23E0\nENDCHAR\nSTARTCHAR U_977F\nENCODING 38783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\nFA80\n5480\n75E0\n22A0\nFAA0\nAAA0\nFDA0\n26A0\nF920\n2240\nENDCHAR\nSTARTCHAR U_9780\nENCODING 38784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\nF920\n5120\n7120\n22E0\nFC40\nABE0\nFA20\n2220\nFBE0\n2220\nENDCHAR\nSTARTCHAR U_9781\nENCODING 38785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFBE0\n52A0\n7280\n23E0\nFA40\nAA40\nFB40\n2280\nFD40\n2A20\nENDCHAR\nSTARTCHAR U_9782\nENCODING 38786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5060\nFB80\n5080\n77E0\n2080\nF880\nA9C0\nFAA0\n24A0\nF880\n2080\nENDCHAR\nSTARTCHAR U_9783\nENCODING 38787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5740\nF940\n5140\n7740\n2440\nFE40\nAA80\nFAA0\n22A0\nFAA0\n25E0\nENDCHAR\nSTARTCHAR U_9784\nENCODING 38788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5200\nFBE0\n5420\n73A0\n22A0\nFAA0\nABA0\nFA60\n2200\nFA20\n21E0\nENDCHAR\nSTARTCHAR U_9785\nENCODING 38789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nF880\n53E0\n72A0\n22A0\nFAA0\nAFE0\nF880\n2140\nFA20\n2420\nENDCHAR\nSTARTCHAR U_9786\nENCODING 38790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\nFFE0\n5100\n77C0\n2540\nFD40\nAEC0\nFC40\n2440\nFC40\n24C0\nENDCHAR\nSTARTCHAR U_9787\nENCODING 38791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5000\nFFE0\n5520\n77E0\n2520\nFD20\nADA0\nFE60\n2420\nFFE0\n2420\nENDCHAR\nSTARTCHAR U_9788\nENCODING 38792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF980\n5240\n7420\n23C0\nF800\nABC0\nFA40\n2240\nFBC0\n2240\nENDCHAR\nSTARTCHAR U_9789\nENCODING 38793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\nFA80\n52A0\n7AC0\n2680\nFAC0\nAAA0\nFE80\n22A0\nFCA0\n2860\nENDCHAR\nSTARTCHAR U_978A\nENCODING 38794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nF880\n57E0\n7080\n23E0\nF800\nABE0\nFA20\n2220\nFBE0\n2220\nENDCHAR\nSTARTCHAR U_978B\nENCODING 38795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nF880\n53E0\n7080\n27E0\nF880\nA880\nFBE0\n2080\nF880\n27E0\nENDCHAR\nSTARTCHAR U_978C\nENCODING 38796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n1F00\n6A80\n3FC0\n0A00\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_978D\nENCODING 38797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFFE0\n5420\n7100\n2100\nFFE0\nA940\nFA40\n2180\nF940\n2620\nENDCHAR\nSTARTCHAR U_978E\nENCODING 38798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nFA20\n53E0\n7220\n23E0\nFA80\nAAA0\nFAC0\n2240\nFAA0\n2320\nENDCHAR\nSTARTCHAR U_978F\nENCODING 38799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF80\n24A0\n3EA0\nE5E0\n1100\nFFE0\n1100\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_9790\nENCODING 38800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFDC0\n5100\n77E0\n2000\nFFE0\nA900\nF940\n2120\nF900\n2100\nENDCHAR\nSTARTCHAR U_9791\nENCODING 38801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFC80\n5280\n71E0\n2E80\nFA80\nAAC0\nFB20\n2200\nFD00\n28E0\nENDCHAR\nSTARTCHAR U_9792\nENCODING 38802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5040\nFB80\n5100\n77E0\n2140\nFE20\nAA40\nFA40\n2240\nFA40\n2440\nENDCHAR\nSTARTCHAR U_9793\nENCODING 38803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53C0\nFA40\n53C0\n7000\n27C0\nF900\nA900\nFFC0\n2100\nF900\n27E0\nENDCHAR\nSTARTCHAR U_9794\nENCODING 38804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF9C0\n5240\n77E0\n22A0\nFAA0\nABE0\nF880\n21A0\nFAA0\n2460\nENDCHAR\nSTARTCHAR U_9795\nENCODING 38805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\nF900\n57C0\n7540\n27C0\nFD40\nAFC0\nFD00\n2300\nFA80\n2460\nENDCHAR\nSTARTCHAR U_9796\nENCODING 38806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n50E0\nFF40\n5540\n7280\n2100\nFFE0\nA940\nFA40\n2180\nFA40\n2420\nENDCHAR\nSTARTCHAR U_9797\nENCODING 38807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n27E0\n5A40\n5180\nD240\n5FE0\n5280\n57C0\n5540\n4FE0\n4100\nENDCHAR\nSTARTCHAR U_9798\nENCODING 38808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFAA0\n51C0\n7080\n23E0\nFA20\nABE0\nFA20\n23E0\nFA20\n2260\nENDCHAR\nSTARTCHAR U_9799\nENCODING 38809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nFA20\n53E0\n7000\n23E0\nFA20\nABE0\nFA20\n23E0\nFA20\n2260\nENDCHAR\nSTARTCHAR U_979A\nENCODING 38810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFFE0\n5420\n7140\n2220\nF800\nABC0\nF880\n2080\nF880\n27E0\nENDCHAR\nSTARTCHAR U_979B\nENCODING 38811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFFE0\n5040\n7240\n2180\nFFE0\nA800\nFBC0\n2240\nFBC0\n2240\nENDCHAR\nSTARTCHAR U_979C\nENCODING 38812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nF8A0\n57C0\n72A0\n24A0\nF980\nABE0\nFA20\n23E0\nFA20\n23E0\nENDCHAR\nSTARTCHAR U_979D\nENCODING 38813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5520\nFB40\n5100\n7FE0\n2820\nFBA0\nAAA0\nFAA0\n2BA0\nF820\n2860\nENDCHAR\nSTARTCHAR U_979E\nENCODING 38814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFFE0\n5520\n77E0\n2520\nFFE0\nA980\nFA80\n27E0\nF880\n2080\nENDCHAR\nSTARTCHAR U_979F\nENCODING 38815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFFE0\n5000\n73C0\n2240\nFBC0\nA880\nFBE0\n2080\nFA80\n2100\nENDCHAR\nSTARTCHAR U_97A0\nENCODING 38816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5200\nFBE0\n5560\n75A0\n2320\nFFE0\nA920\nFBA0\n2560\nF920\n21C0\nENDCHAR\nSTARTCHAR U_97A1\nENCODING 38817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\nFA40\n57E0\n7200\n2220\nFBA0\nAEA0\nFAA0\n2240\nFA40\n27E0\nENDCHAR\nSTARTCHAR U_97A2\nENCODING 38818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\nFFE0\n5540\n75C0\n2400\nFFE0\nA900\nFFE0\n2380\nFD40\n2920\nENDCHAR\nSTARTCHAR U_97A3\nENCODING 38819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\nF940\n57E0\n72A0\n2580\nF900\nAFE0\nF900\n2380\nFD40\n2920\nENDCHAR\nSTARTCHAR U_97A4\nENCODING 38820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFBE0\n2140\nF8C0\n2900\nFFC0\n0900\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_97A5\nENCODING 38821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5180\nFA40\n55A0\n7000\n23C0\nFA40\nABC0\nFA40\n27E0\nFA40\n2440\nENDCHAR\nSTARTCHAR U_97A6\nENCODING 38822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5140\nFE40\n5240\n72C0\n2F60\nFA40\nAB40\nFEC0\n2240\nFAA0\n2320\nENDCHAR\nSTARTCHAR U_97A7\nENCODING 38823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5240\nFFE0\n5280\n77E0\n26A0\nFEE0\nAC20\nFFE0\n2420\nFFE0\n2420\nENDCHAR\nSTARTCHAR U_97A8\nENCODING 38824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nFA20\n53E0\n7220\n23E0\nF900\nAFE0\nFAA0\n2360\nFFA0\n2040\nENDCHAR\nSTARTCHAR U_97A9\nENCODING 38825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5220\nFAA0\n5720\n7F60\n2960\nFF60\nA960\nFF60\n2920\nF920\n2B60\nENDCHAR\nSTARTCHAR U_97AA\nENCODING 38826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n53E0\nF940\n6880\nA940\nFFE0\n0900\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_97AB\nENCODING 38827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5200\nFBE0\n5520\n77E0\n2020\nFBA0\nA820\nFBA0\n22A0\nFBA0\n2040\nENDCHAR\nSTARTCHAR U_97AC\nENCODING 38828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\nFAA0\n53E0\n74A0\n27E0\nFA80\nABE0\nFA80\n27E0\nFA80\n29E0\nENDCHAR\nSTARTCHAR U_97AD\nENCODING 38829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nFA80\n53E0\n76A0\n27E0\nFEA0\nAFE0\nFC80\n2580\nFD40\n2620\nENDCHAR\nSTARTCHAR U_97AE\nENCODING 38830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nFA20\n53E0\n7220\n23E0\nF800\nAFE0\nFA80\n22E0\nFD80\n24E0\nENDCHAR\nSTARTCHAR U_97AF\nENCODING 38831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5140\nFFE0\n5140\n77E0\n2100\nFAE0\nAE40\nFBE0\n2240\nFA40\n22C0\nENDCHAR\nSTARTCHAR U_97B0\nENCODING 38832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53C0\nFA40\n53C0\n7240\n23C0\nF800\nAFE0\nFAA0\n2AA0\nFAA0\n2FE0\nENDCHAR\nSTARTCHAR U_97B1\nENCODING 38833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n50E0\nFF20\n52A0\n7140\n2100\nFA60\nAA20\nFB60\n2220\nFFE0\n2220\nENDCHAR\nSTARTCHAR U_97B2\nENCODING 38834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\nFFE0\n5280\n77C0\n2280\nFFE0\nAD40\nFFC0\n2540\nFFE0\n24C0\nENDCHAR\nSTARTCHAR U_97B3\nENCODING 38835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5240\nFBE0\n5240\n7180\n2240\nFDA0\nA800\nFBC0\n2240\nFBC0\n2240\nENDCHAR\nSTARTCHAR U_97B4\nENCODING 38836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5140\nFBE0\n5140\n77E0\n2200\nFBE0\nAEA0\nFBE0\n22A0\nFBE0\n22A0\nENDCHAR\nSTARTCHAR U_97B5\nENCODING 38837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n51C0\nFE40\n5540\n7280\n2780\nF940\nAFC0\nF900\n27E0\nFA80\n2460\nENDCHAR\nSTARTCHAR U_97B6\nENCODING 38838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFE60\nAB80\nF900\nAA80\n7FE0\n0900\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_97B7\nENCODING 38839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2080\n7FC0\n4A40\n4440\nFFE0\n1100\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_97B8\nENCODING 38840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nFAA0\n53E0\n72A0\n23E0\nFAA0\nAFE0\nFAA0\n27E0\nF880\n2080\nENDCHAR\nSTARTCHAR U_97B9\nENCODING 38841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n52E0\nFFA0\n55A0\n77C0\n20A0\nFFA0\nAAA0\nFAA0\n27E0\nFA80\n2680\nENDCHAR\nSTARTCHAR U_97BA\nENCODING 38842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\nFB80\n57E0\n7820\n2380\nFA80\nAB80\nF900\n27C0\nF900\n27E0\nENDCHAR\nSTARTCHAR U_97BB\nENCODING 38843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFFC0\n5540\n77E0\n2540\nFFE0\nA920\nFFE0\n2240\nF980\n2660\nENDCHAR\nSTARTCHAR U_97BC\nENCODING 38844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFFC0\n5540\n77E0\n2000\nFBC0\nAB40\nFAC0\n2340\nFBC0\n2660\nENDCHAR\nSTARTCHAR U_97BD\nENCODING 38845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53C0\nF900\n5FE0\n7280\n27E0\nFA80\nAFE0\nFEA0\n27A0\nFC20\n2460\nENDCHAR\nSTARTCHAR U_97BE\nENCODING 38846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5240\nFFE0\n5240\n77E0\n2540\nFFE0\nAD40\nFFE0\n2100\nFFE0\n2100\nENDCHAR\nSTARTCHAR U_97BF\nENCODING 38847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\nF5A0\n5FC0\n7540\n2FE0\nF920\nAFE0\nFB40\n22A0\nFD60\n2220\nENDCHAR\nSTARTCHAR U_97C0\nENCODING 38848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFFE0\n5540\n77E0\n2560\nFFE0\nAD00\nFDE0\n2500\nFDE0\n2AA0\nENDCHAR\nSTARTCHAR U_97C1\nENCODING 38849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\nFAA0\n53E0\n72A0\n27E0\nF800\nABE0\nFAA0\n23E0\nFAA0\n27E0\nENDCHAR\nSTARTCHAR U_97C2\nENCODING 38850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5200\nFBC0\n5480\n77E0\n2540\nFEA0\nADC0\nFC00\n25C0\nF940\n29C0\nENDCHAR\nSTARTCHAR U_97C3\nENCODING 38851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFDC0\n5280\n71E0\n2740\nFBE0\nAA80\nFBE0\n2280\nFA80\n25E0\nENDCHAR\nSTARTCHAR U_97C4\nENCODING 38852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5140\nFFE0\n5140\n73E0\n2680\nFBE0\nAA80\nFBE0\n2240\nF980\n2660\nENDCHAR\nSTARTCHAR U_97C5\nENCODING 38853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\nFC20\n57E0\n7420\n27E0\nFA40\nADA0\nFA40\n27E0\nF540\n2AA0\nENDCHAR\nSTARTCHAR U_97C6\nENCODING 38854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\nFA80\n57E0\n7EA0\n27E0\nF940\nAFE0\nFD40\n2520\nFDE0\n2BE0\nENDCHAR\nSTARTCHAR U_97C7\nENCODING 38855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFFE0\n5080\n7FE0\n2AA0\nFFE0\nAA40\nFBC0\n2240\nFBC0\n2660\nENDCHAR\nSTARTCHAR U_97C8\nENCODING 38856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5240\nFFE0\n5280\nFFE0\nAAA0\nFFE0\n24A0\nFEA0\n24C0\n2760\n2820\nENDCHAR\nSTARTCHAR U_97C9\nENCODING 38857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\nFA40\n5FE0\n7AA0\n2FE0\nFA00\nABE0\nFA00\n2BE0\nFAA0\n2D60\nENDCHAR\nSTARTCHAR U_97CA\nENCODING 38858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5280\nFFE0\n5AA0\n7EE0\n2AA0\nFFE0\nA920\nFFE0\n2D60\nFBA0\n2D60\nENDCHAR\nSTARTCHAR U_97CB\nENCODING 38859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n3F80\n0880\nFFE0\n2080\n3F80\n0400\n7FC0\n2400\n7FE0\n0400\nENDCHAR\nSTARTCHAR U_97CC\nENCODING 38860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\nF7E0\n50A0\nFAA0\n52A0\n74A0\n20A0\nF920\nA120\nFA20\n24C0\nENDCHAR\nSTARTCHAR U_97CD\nENCODING 38861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4180\nF140\n57E0\nF900\n91C0\nF240\n2340\nFAC0\nA280\nFD40\n2A20\nENDCHAR\nSTARTCHAR U_97CE\nENCODING 38862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7880\n2BE0\nFC80\n4880\n7BE0\n1080\nFDC0\n52A0\nFCA0\n1080\nENDCHAR\nSTARTCHAR U_97CF\nENCODING 38863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n7FE0\n0800\nFFE0\n4940\nBFA0\n1100\n7FC0\n2200\n7FC0\n0200\nENDCHAR\nSTARTCHAR U_97D0\nENCODING 38864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7940\n2A20\nFE20\n49C0\n7800\n13E0\nFE20\n5220\nFFE0\n1220\nENDCHAR\nSTARTCHAR U_97D1\nENCODING 38865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\nA940\n77E0\nFA40\n53C0\n5FE0\n5280\n53C0\n50A0\n8FE0\nENDCHAR\nSTARTCHAR U_97D2\nENCODING 38866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7AA0\n29C0\nFFE0\n4A20\n7BE0\n1220\nFBE0\n5220\n7E20\n1260\nENDCHAR\nSTARTCHAR U_97D3\nENCODING 38867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n2140\nFFE0\n8A40\nFBC0\n8880\nFFE0\n2280\nFFE0\n2080\nENDCHAR\nSTARTCHAR U_97D4\nENCODING 38868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n7A00\n2BC0\nFE00\n4BC0\n7A00\n13E0\nFE80\n52A0\nFE40\n1320\nENDCHAR\nSTARTCHAR U_97D5\nENCODING 38869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7FE0\n2A40\nFFC0\n4800\n7BE0\n1040\nFC80\n53E0\nFC80\n1180\nENDCHAR\nSTARTCHAR U_97D6\nENCODING 38870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF140\n57E0\nFAA0\n9480\nF100\n27E0\nF900\nA380\nFD40\n2920\nENDCHAR\nSTARTCHAR U_97D7\nENCODING 38871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF420\n5080\nFFE0\n92A0\nF3E0\n22A0\nFBE0\nA080\nFFE0\n2080\nENDCHAR\nSTARTCHAR U_97D8\nENCODING 38872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\nFFE0\n5540\nFDC0\n9400\nF7E0\n2100\nFFE0\nA380\nFD40\n2920\nENDCHAR\nSTARTCHAR U_97D9\nENCODING 38873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4940\n7FE0\n4A40\n7BC0\n0080\nFFE0\n5280\n5FE0\nB080\n9FE0\nENDCHAR\nSTARTCHAR U_97DA\nENCODING 38874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n7BE0\n2940\nF9C0\n4880\n7BE0\n12A0\nFBE0\n5080\n7FE0\n1080\nENDCHAR\nSTARTCHAR U_97DB\nENCODING 38875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n7BE0\n2940\nFFE0\n4900\n7BE0\n16A0\nFFE0\n52A0\n7BE0\n12A0\nENDCHAR\nSTARTCHAR U_97DC\nENCODING 38876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\nF7A0\n5520\nFAC0\n9000\nF660\n2420\nFF60\nA420\nFFE0\n2420\nENDCHAR\nSTARTCHAR U_97DD\nENCODING 38877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nF7E0\n5280\nFFE0\n9280\nFFE0\n2540\nFFC0\nA540\nFFE0\n24C0\nENDCHAR\nSTARTCHAR U_97DE\nENCODING 38878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n7A40\n2BC0\nFE40\n4BC0\n7800\n13E0\nFEA0\n52A0\nFEA0\n17E0\nENDCHAR\nSTARTCHAR U_97DF\nENCODING 38879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7C0\n5440\nFFC0\n9440\nF7C0\n2100\nFFE0\nA540\nFBA0\n2100\nENDCHAR\nSTARTCHAR U_97E0\nENCODING 38880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF540\n57C0\nFD40\n97C0\nF540\n2FE0\nF540\nAFE0\nF100\n2100\nENDCHAR\nSTARTCHAR U_97E1\nENCODING 38881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\nFFE0\n5280\nFFE0\n9540\nFFE0\n2540\nFFE0\nA100\nFFC0\n2100\nENDCHAR\nSTARTCHAR U_97E2\nENCODING 38882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7E0\n5100\nFFC0\n9540\nF7C0\n2560\nFFE0\nA540\nFA60\n23C0\nENDCHAR\nSTARTCHAR U_97E3\nENCODING 38883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\nFAA0\n4FE0\nF200\n93E0\nF520\n27E0\nFD60\nA7E0\nF920\n27C0\nENDCHAR\nSTARTCHAR U_97E4\nENCODING 38884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\nFFE0\n5240\nFFE0\n9AA0\nFFE0\n2140\nF7E0\nA540\nF6A0\n2960\nENDCHAR\nSTARTCHAR U_97E5\nENCODING 38885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7E0\n5100\nFFE0\n9AA0\nFFE0\n2240\nFBC0\nA240\nFBC0\n2E60\nENDCHAR\nSTARTCHAR U_97E6\nENCODING 38886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n0400\n3FC0\n0400\n0400\n7FE0\n0420\n0420\n04C0\n0400\nENDCHAR\nSTARTCHAR U_97E7\nENCODING 38887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBE0\n20A0\nFAA0\n22A0\nFCA0\n28A0\n2920\n3920\n2220\n24C0\nENDCHAR\nSTARTCHAR U_97E8\nENCODING 38888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nFA40\n27E0\n7A00\n23C0\nFA40\n2A40\n2D80\n3980\n2260\n2440\nENDCHAR\nSTARTCHAR U_97E9\nENCODING 38889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2100\nFFC0\n8900\nF900\n8FE0\nF920\n2120\nF960\n2100\nENDCHAR\nSTARTCHAR U_97EA\nENCODING 38890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n7880\n4BE0\n7880\n03E0\nFCA0\n50E0\n5C80\n7000\n9FE0\nENDCHAR\nSTARTCHAR U_97EB\nENCODING 38891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\nF440\n47C0\nF440\n47C0\nF000\n5FE0\n5AA0\n7AA0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_97EC\nENCODING 38892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\nFF20\n4520\nF2C0\n4000\nF760\n5420\n5760\n7420\n47E0\n4420\nENDCHAR\nSTARTCHAR U_97ED\nENCODING 38893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n0900\n79E0\n0900\n0900\n39C0\n0900\n79E0\n0900\n0900\n7FE0\nENDCHAR\nSTARTCHAR U_97EE\nENCODING 38894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n0A00\n7BC0\n0A00\n7BC0\n0A00\n7BC0\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_97EF\nENCODING 38895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7D40\n1120\nFFE0\n2900\n6D20\n2920\n6CC0\n28A0\n3D60\nE220\nENDCHAR\nSTARTCHAR U_97F0\nENCODING 38896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1FE0\n1140\n3C80\nE940\n3220\nEA00\n7BC0\n0A00\n7BE0\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_97F1\nENCODING 38897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4940\n7520\n9500\nFFE0\n2900\nEF20\n2940\nEE80\n28A0\nFD60\n0220\nENDCHAR\nSTARTCHAR U_97F2\nENCODING 38898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n0A40\nF580\n5540\n9520\n7BC0\n0A00\n7BC0\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_97F3\nENCODING 38899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n1100\n0A00\nFFE0\n0000\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_97F4\nENCODING 38900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n4880\n33E0\nFEA0\n02A0\n7AA0\n4AE0\n7880\n4880\n7880\nENDCHAR\nSTARTCHAR U_97F5\nENCODING 38901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFA00\n8BE0\n5420\nFA20\n0120\nF820\n89A0\nFE20\n8820\nF8C0\nENDCHAR\nSTARTCHAR U_97F6\nENCODING 38902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF920\n8920\n51E0\nFA40\n0400\nFBE0\n8A20\nFA20\n8BE0\nFA20\nENDCHAR\nSTARTCHAR U_97F7\nENCODING 38903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n5520\n2520\nFD20\n07E0\n7100\n5520\n7520\n57E0\n7420\nENDCHAR\nSTARTCHAR U_97F8\nENCODING 38904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFBE0\n8E40\n5180\nFB40\n07E0\nF900\n8FC0\nF900\n8FE0\nF900\nENDCHAR\nSTARTCHAR U_97F9\nENCODING 38905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFDE0\n4520\n29E0\nFD20\n03E0\n7880\n4880\n7BE0\n4880\n7FE0\nENDCHAR\nSTARTCHAR U_97FA\nENCODING 38906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFFE0\n8A40\n5080\nFFE0\n02A0\n7FE0\n4880\n7940\n4A20\n7C20\nENDCHAR\nSTARTCHAR U_97FB\nENCODING 38907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n8BC0\n5000\nF7C0\n0440\nF7C0\n9440\nF7C0\n9280\nFC60\nENDCHAR\nSTARTCHAR U_97FC\nENCODING 38908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF9E0\n5740\n2480\nFB60\n0C80\n75C0\n5480\n77E0\n5480\n7BE0\nENDCHAR\nSTARTCHAR U_97FD\nENCODING 38909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\nABE0\n7540\n1080\nFFE0\n5000\nFDE0\n9520\nFDE0\n8520\nFDE0\nENDCHAR\nSTARTCHAR U_97FE\nENCODING 38910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DC0\n1220\nFDC0\n5540\n7FE0\n8900\nFFE0\n1080\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_97FF\nENCODING 38911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n44E0\nAEA0\n4AC0\nEEA0\n2AC0\nFFE0\n0900\nFFE0\n1480\n1280\n1F80\nENDCHAR\nSTARTCHAR U_9800\nENCODING 38912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nFFE0\n5280\n27C0\nFC80\n07C0\n7480\n57C0\n7280\n5100\n76C0\nENDCHAR\nSTARTCHAR U_9801\nENCODING 38913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n3F80\n2080\n3F80\n2080\n3F80\n2080\n3F80\n0900\n70E0\nENDCHAR\nSTARTCHAR U_9802\nENCODING 38914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF900\n27E0\n2420\n27E0\n2420\n27E0\n2420\n27E0\nA280\n4C60\nENDCHAR\nSTARTCHAR U_9803\nENCODING 38915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4100\n47C0\n7440\n47C0\n4440\n47C0\n5440\n67C0\nC280\n0C60\nENDCHAR\nSTARTCHAR U_9804\nENCODING 38916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4100\nF3E0\n5220\n53E0\n5220\n53E0\n5620\n5BE0\n5140\n8620\nENDCHAR\nSTARTCHAR U_9805\nENCODING 38917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF900\n27E0\n2420\n27E0\n2420\n3FE0\nC420\n07E0\n0240\n0C20\nENDCHAR\nSTARTCHAR U_9806\nENCODING 38918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n5480\n55E0\n5520\n55E0\n5520\n55E0\n5520\n45E0\n8540\n8620\nENDCHAR\nSTARTCHAR U_9807\nENCODING 38919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\n23E0\n2220\nFBE0\n2220\n23E0\n2220\n23E0\n2140\n2620\nENDCHAR\nSTARTCHAR U_9808\nENCODING 38920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n2100\n47C0\n9440\n27C0\n4440\n97C0\n1440\n27C0\n4280\n9C60\nENDCHAR\nSTARTCHAR U_9809\nENCODING 38921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n1100\n53C0\n5E40\n53C0\n5240\n53C0\n5E40\nE3C0\n0240\n0420\nENDCHAR\nSTARTCHAR U_980A\nENCODING 38922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF900\n27E0\n2420\n77E0\n2420\n27E0\n3C20\nE7E0\n4240\n0420\nENDCHAR\nSTARTCHAR U_980B\nENCODING 38923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8100\nFBC0\nAA40\nABC0\nBA40\nABC0\nA240\nB3C0\nA240\n0420\nENDCHAR\nSTARTCHAR U_980C\nENCODING 38924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n5100\n4BE0\n8A20\n23E0\n2220\n43E0\n4A20\nFBE0\n0240\n0C20\nENDCHAR\nSTARTCHAR U_980D\nENCODING 38925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1080\nFFE0\n1220\nFFE0\n4A20\n2BE0\n1220\n33E0\n4940\n8620\nENDCHAR\nSTARTCHAR U_980E\nENCODING 38926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\n7080\n43E0\n7A20\n53E0\n5220\n53E0\n5220\n53E0\n5140\n9620\nENDCHAR\nSTARTCHAR U_980F\nENCODING 38927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2100\nFFE0\n0220\n73E0\n5220\n53E0\n5620\n5BE0\n5240\n8C20\nENDCHAR\nSTARTCHAR U_9810\nENCODING 38928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9100\n67C0\n2440\nFFC0\n2440\n27C0\n2440\n27C0\n2280\nEC60\nENDCHAR\nSTARTCHAR U_9811\nENCODING 38929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n0080\n03E0\nFA20\n53E0\n5220\n53E0\n5620\n5BE0\n9240\n8C20\nENDCHAR\nSTARTCHAR U_9812\nENCODING 38930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\n5080\n8BE0\n8A20\n03E0\nF220\n53E0\n5220\n53E0\n9240\n2C20\nENDCHAR\nSTARTCHAR U_9813\nENCODING 38931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF880\n23E0\nAA20\nABE0\nAA20\nFBE0\n2220\n2BE0\n3240\n2420\nENDCHAR\nSTARTCHAR U_9814\nENCODING 38932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nFBC0\nAA40\nABC0\nFA40\nABC0\nAA40\nFBC0\n8A40\n0420\nENDCHAR\nSTARTCHAR U_9815\nENCODING 38933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4200\n77C0\n4440\n47C0\nF440\n97C0\n9440\nF7C0\n9440\n0820\nENDCHAR\nSTARTCHAR U_9816\nENCODING 38934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nA880\n73E0\n2220\nFBE0\n2220\n23E0\nFA20\n23E0\n4240\n8420\nENDCHAR\nSTARTCHAR U_9817\nENCODING 38935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\nFBE0\nAA20\nA3E0\nFA20\nABE0\nAA20\n93E0\nAA40\nC420\nENDCHAR\nSTARTCHAR U_9818\nENCODING 38936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n3080\n4BE0\nA620\n13E0\nFA20\n0BE0\n5220\n23E0\n1240\n1420\nENDCHAR\nSTARTCHAR U_9819\nENCODING 38937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF900\n13C0\n1240\n5BC0\n5240\n53C0\n5E40\nE3C0\n0240\n0420\nENDCHAR\nSTARTCHAR U_981A\nENCODING 38938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4900\n33C0\n4A40\n87C0\n2240\n7BC0\n2240\n3BC0\nC240\n0420\nENDCHAR\nSTARTCHAR U_981B\nENCODING 38939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2080\nFBE0\n2220\nFBE0\n2220\nFBE0\n2220\n73E0\nAA40\n2420\nENDCHAR\nSTARTCHAR U_981C\nENCODING 38940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5080\n8BE0\n7220\n03E0\n7A20\n4BE0\n4A20\n7BE0\n4A40\n0420\nENDCHAR\nSTARTCHAR U_981D\nENCODING 38941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n1080\nFFE0\n4A20\n87E0\n2A20\n2BE0\n1220\n33E0\n4A40\n8420\nENDCHAR\nSTARTCHAR U_981E\nENCODING 38942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\nFC80\n87E0\n2220\nFFE0\n2A20\n4BE0\n4A20\n33E0\n4A40\n8420\nENDCHAR\nSTARTCHAR U_981F\nENCODING 38943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3900\n4BC0\nB240\n33C0\n4A40\nFFC0\n4A40\n4BC0\n7A40\n4C20\nENDCHAR\nSTARTCHAR U_9820\nENCODING 38944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7880\n93E0\nFE20\n83E0\nBA20\nABE0\nBA20\nA3E0\nBA40\nA420\nENDCHAR\nSTARTCHAR U_9821\nENCODING 38945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF880\n23E0\n2220\nFBE0\n0220\n7BE0\n4A20\n7BE0\n4A40\n0420\nENDCHAR\nSTARTCHAR U_9822\nENCODING 38946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37E0\nE100\n23C0\nFA40\n23C0\n2240\nFBC0\n8A40\n8BC0\nF940\n8A20\nENDCHAR\nSTARTCHAR U_9823\nENCODING 38947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA100\nA7C0\nF440\n97C0\nF440\nA7C0\nA440\nA7C0\nFC40\n0820\nENDCHAR\nSTARTCHAR U_9824\nENCODING 38948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9080\n93E0\nBA20\nABE0\nAA20\nBBE0\n9220\n93E0\nFA40\n0420\nENDCHAR\nSTARTCHAR U_9825\nENCODING 38949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n87E0\nBD00\nABC0\nAA40\nBFC0\nA640\nBFC0\nAA40\nABC0\nBA40\n8420\nENDCHAR\nSTARTCHAR U_9826\nENCODING 38950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n1080\nFFE0\n2620\n7BE0\n1220\n27E0\n4A20\n1BE0\n2940\nC620\nENDCHAR\nSTARTCHAR U_9827\nENCODING 38951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n7880\n4BE0\n4A20\n7BE0\n4220\n7BE0\n4A20\n4BE0\n7A40\n4420\nENDCHAR\nSTARTCHAR U_9828\nENCODING 38952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2480\nB5E0\n6D20\n25E0\n2520\n6DE0\nB520\n25E0\n2540\n4E20\nENDCHAR\nSTARTCHAR U_9829\nENCODING 38953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8FE0\n5080\nFFE0\n2A20\n2BE0\nFE20\n2BE0\n2A20\n4BE0\n4940\n8E20\nENDCHAR\nSTARTCHAR U_982A\nENCODING 38954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nA900\n6BC0\n3240\nFBC0\n2240\n73C0\n6A40\nA3C0\n2240\n2420\nENDCHAR\nSTARTCHAR U_982B\nENCODING 38955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n2880\nABE0\n6E20\n2BE0\n6E20\nABE0\n2A20\n2FE0\n4A40\n8420\nENDCHAR\nSTARTCHAR U_982C\nENCODING 38956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n2100\nFBC0\nAA40\n73C0\nFE40\n23C0\n3240\n4BC0\n8240\n0420\nENDCHAR\nSTARTCHAR U_982D\nENCODING 38957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n0080\n7BE0\n4A20\n4BE0\n7A20\n8BE0\n5220\n3BE0\nC140\n0220\nENDCHAR\nSTARTCHAR U_982E\nENCODING 38958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\nD500\n5BC0\n9640\n33C0\n4A40\n4BC0\nFE40\n4BC0\n4A40\n8C20\nENDCHAR\nSTARTCHAR U_982F\nENCODING 38959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n3880\nEBE0\n5A20\n23E0\nEA20\n2BE0\nFE20\n2BE0\n4940\n8A20\nENDCHAR\nSTARTCHAR U_9830\nENCODING 38960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\nFC80\n13E0\n5620\n5BE0\nB620\n93E0\n2A20\n27E0\n4140\n8620\nENDCHAR\nSTARTCHAR U_9831\nENCODING 38961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1BE0\nE900\nABC0\n5240\n13C0\nFA40\n93C0\n5240\n13C0\n5240\n2420\nENDCHAR\nSTARTCHAR U_9832\nENCODING 38962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE5E0\n3880\n29E0\n4920\nFFE0\n2920\nA9E0\n7F20\n41E0\nA140\n9E20\nENDCHAR\nSTARTCHAR U_9833\nENCODING 38963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n7900\n13C0\nFE40\n2BC0\nAA40\nAFC0\n2A40\n4BC0\nAA40\n1420\nENDCHAR\nSTARTCHAR U_9834\nENCODING 38964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7100\n43C0\n3A40\n03C0\n7A40\n03C0\nFE40\n23C0\nAA40\nA420\nENDCHAR\nSTARTCHAR U_9835\nENCODING 38965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n2880\nFFE0\n2A20\n7BE0\n2220\n7BE0\nAA20\n2BE0\n3940\n2E20\nENDCHAR\nSTARTCHAR U_9836\nENCODING 38966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n5100\n7BC0\n9240\nFFC0\n0240\n7BC0\n4A40\n4BC0\n7A40\n0420\nENDCHAR\nSTARTCHAR U_9837\nENCODING 38967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5080\nABE0\n1220\nFBE0\n1220\n7BE0\n4A20\n4BE0\n7A40\n4C20\nENDCHAR\nSTARTCHAR U_9838\nENCODING 38968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5480\nABE0\nAA20\n57E0\n5220\nFBE0\n2220\n3FE0\nE240\n4420\nENDCHAR\nSTARTCHAR U_9839\nENCODING 38969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FE0\nF080\n13E0\nFE20\n5BE0\n9620\n2BE0\n2A20\n2FE0\n4A40\n8420\nENDCHAR\nSTARTCHAR U_983A\nENCODING 38970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n2100\nFBC0\n7240\nAFC0\nFA40\n53C0\n5A40\n4BC0\n6A40\n9420\nENDCHAR\nSTARTCHAR U_983B\nENCODING 38971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n5080\n5FE0\n5220\nFFE0\n1220\n57E0\n5A20\n93E0\n2140\nC620\nENDCHAR\nSTARTCHAR U_983C\nENCODING 38972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF900\n23C0\nFA40\nABC0\nFA40\n63C0\n7240\nABC0\nA240\n2420\nENDCHAR\nSTARTCHAR U_983D\nENCODING 38973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n1100\nFFC0\n3A40\n57C0\n9240\n3BC0\n2A40\n2FC0\n4A40\n8420\nENDCHAR\nSTARTCHAR U_983E\nENCODING 38974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37C0\nC200\n37C0\nC540\n37C0\nC280\n1640\n5A40\n5380\n5A20\nE1E0\nENDCHAR\nSTARTCHAR U_983F\nENCODING 38975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1BE0\nE100\n1BC0\nE240\n1BC0\nEA40\n2FC0\nBA40\nAFC0\nBA40\nE420\nENDCHAR\nSTARTCHAR U_9840\nENCODING 38976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\n5100\n7BC0\nD240\n7BC0\n5240\n7BC0\n5240\n53C0\n7A40\n0420\nENDCHAR\nSTARTCHAR U_9841\nENCODING 38977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\nFC80\n87E0\n0220\nFFE0\n1220\n5FE0\n5220\n53E0\nB140\n8E20\nENDCHAR\nSTARTCHAR U_9842\nENCODING 38978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF900\n23C0\n6A40\n6BC0\nB640\n23C0\n7240\nAFC0\n2240\n2420\nENDCHAR\nSTARTCHAR U_9843\nENCODING 38979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n5880\n53E0\nAA20\n47E0\n9220\n57E0\n5A20\n93E0\n2940\nC620\nENDCHAR\nSTARTCHAR U_9844\nENCODING 38980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n0880\n11E0\n9520\nDDE0\nB520\nDDE0\n9520\nA5E0\nFD40\n0220\nENDCHAR\nSTARTCHAR U_9845\nENCODING 38981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\nFC80\n85E0\nFD20\n81E0\nBD20\nA5E0\nBD20\nA5E0\nBD40\nA620\nENDCHAR\nSTARTCHAR U_9846\nENCODING 38982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA880\nFBE0\nAA20\nFBE0\n2220\nFBE0\n2220\n73E0\nA940\nA620\nENDCHAR\nSTARTCHAR U_9847\nENCODING 38983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF900\n53C0\n5240\nABC0\n2240\nFFC0\n2240\n23C0\n2240\n2420\nENDCHAR\nSTARTCHAR U_9848\nENCODING 38984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n83E0\nF080\n83E0\nFA20\n4BE0\nF220\n4BE0\nFA20\n27E0\n7140\nAA20\nENDCHAR\nSTARTCHAR U_9849\nENCODING 38985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n5080\n8BE0\nFA20\n23E0\nFA20\nABE0\n7220\n3BE0\nE140\n4620\nENDCHAR\nSTARTCHAR U_984A\nENCODING 38986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF080\n93E0\nFA20\n8BE0\nFA20\n23E0\nFE20\n23E0\n2140\n2620\nENDCHAR\nSTARTCHAR U_984B\nENCODING 38987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA900\nFBC0\nAA40\nFBC0\n4240\n2BC0\nD640\nCBC0\n4A40\n7420\nENDCHAR\nSTARTCHAR U_984C\nENCODING 38988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4880\n7BE0\n4A20\n7BE0\n0220\nFFE0\n5220\n5FE0\nB140\n8FE0\nENDCHAR\nSTARTCHAR U_984D\nENCODING 38989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFC80\nA7E0\n3A20\n4BE0\nB220\n4BE0\nFE20\n4BE0\n7940\n4E20\nENDCHAR\nSTARTCHAR U_984E\nENCODING 38990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA880\nFBE0\n0220\n7BE0\n0220\nFBE0\n2220\n7BE0\n0940\n3620\nENDCHAR\nSTARTCHAR U_984F\nENCODING 38991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF880\n53E0\n2220\nFBE0\n9220\nEBE0\n9220\nEBE0\n9140\nE620\nENDCHAR\nSTARTCHAR U_9850\nENCODING 38992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA480\nFFE0\nAA20\nFBE0\nAA20\nFBE0\n2220\nFFE0\n2140\n2620\nENDCHAR\nSTARTCHAR U_9851\nENCODING 38993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1BE0\n1480\nFFE0\n9220\nF3E0\n9620\nEBE0\nAA20\nEFE0\n9140\nA620\nENDCHAR\nSTARTCHAR U_9852\nENCODING 38994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA880\nFBE0\nAA20\nFBE0\n2220\nFBE0\nAA20\nBBE0\nC940\n8E20\nENDCHAR\nSTARTCHAR U_9853\nENCODING 38995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nABE0\nA880\nFBE0\n0220\nFBE0\n2220\nFBE0\nAA20\nABE0\nA940\n8E20\nENDCHAR\nSTARTCHAR U_9854\nENCODING 38996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n7900\n4BC0\n3240\n7FC0\n5240\n6BC0\n5240\n6BC0\n9240\nE420\nENDCHAR\nSTARTCHAR U_9855\nENCODING 38997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8900\nFBC0\n8A40\nFBC0\n5240\nDBC0\n5240\n7FC0\nC240\n0420\nENDCHAR\nSTARTCHAR U_9856\nENCODING 38998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF900\nDBC0\nAA40\nDBC0\nFA40\n03C0\n2A40\n47C0\nCA40\n3C20\nENDCHAR\nSTARTCHAR U_9857\nENCODING 38999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nABE0\nA880\nFBE0\n0220\nFBE0\n4A20\n7BE0\n0A20\n53E0\n3940\nE620\nENDCHAR\nSTARTCHAR U_9858\nENCODING 39000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n9080\nBDE0\nA520\nBDE0\nA520\nBDE0\n8920\nADE0\nCB40\n9A20\nENDCHAR\nSTARTCHAR U_9859\nENCODING 39001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5080\n23E0\nDA20\n4BE0\nDA20\nA7E0\nFA20\n23E0\n7140\nAE20\nENDCHAR\nSTARTCHAR U_985A\nENCODING 39002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n4100\n7BC0\n0240\nBBC0\nAA40\nBBC0\nAA40\nFFC0\n5240\n8C20\nENDCHAR\nSTARTCHAR U_985B\nENCODING 39003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF880\n23E0\nFA20\n8BE0\nEA20\nBBE0\n8A20\nFFE0\n5140\n8E20\nENDCHAR\nSTARTCHAR U_985C\nENCODING 39004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n53E0\nFC80\n53E0\nFA20\n53E0\nFE20\nABE0\nFA20\nABE0\nFD40\n9A20\nENDCHAR\nSTARTCHAR U_985D\nENCODING 39005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4880\n6BE0\nFE20\n87E0\n7A20\n4BE0\n7A20\n4BE0\n7940\n5E20\nENDCHAR\nSTARTCHAR U_985E\nENCODING 39006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nABE0\n7080\n23E0\nFA20\n73E0\nAA20\n23E0\nFA20\n23E0\n5140\n8E20\nENDCHAR\nSTARTCHAR U_985F\nENCODING 39007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\nB480\n6DE0\nB520\n35E0\n4920\nA5E0\n5120\n29E0\n1140\nE220\nENDCHAR\nSTARTCHAR U_9860\nENCODING 39008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n2880\nFFE0\nAB20\nFFE0\n0120\n79E0\n0120\nFDE0\n5540\nB220\nENDCHAR\nSTARTCHAR U_9861\nENCODING 39009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF900\n53C0\nFE40\n23C0\n5A40\nB3C0\n5A40\nB7C0\n5240\nB420\nENDCHAR\nSTARTCHAR U_9862\nENCODING 39010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n49E0\nFC80\n49E0\n7920\n21E0\nFD20\nA5E0\nF520\nADE0\nF540\nAE20\nENDCHAR\nSTARTCHAR U_9863\nENCODING 39011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n05E0\nFE80\nA5E0\nBD20\nA5E0\nFD20\nA5E0\nB720\nEDE0\nA540\nBA20\nENDCHAR\nSTARTCHAR U_9864\nENCODING 39012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n7C80\n13E0\nFE20\n4BE0\nFE20\n4BE0\nFE20\n2BE0\n4940\n8E20\nENDCHAR\nSTARTCHAR U_9865\nENCODING 39013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4480\n7DE0\n4520\n7DE0\n1120\nFFE0\n4520\n7DE0\n5540\nB220\nENDCHAR\nSTARTCHAR U_9866\nENCODING 39014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\n5100\n7FC0\nD240\n7FC0\n5240\n7FC0\n5240\n7FC0\nAA40\nD420\nENDCHAR\nSTARTCHAR U_9867\nENCODING 39015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\nFC80\n87E0\nFE20\nABE0\nAA20\nFFE0\nAA20\nBFE0\nA940\nBE20\nENDCHAR\nSTARTCHAR U_9868\nENCODING 39016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n2100\n7BC0\n6B40\n5AC0\n7BC0\n4A40\nFFE0\n1100\n2100\n4100\nENDCHAR\nSTARTCHAR U_9869\nENCODING 39017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BE0\n4480\nB9E0\n0120\nEFE0\nAB20\nEFE0\n4520\n45E0\nAD40\n9220\nENDCHAR\nSTARTCHAR U_986A\nENCODING 39018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n5080\nFFE0\n1220\nFFE0\n8A20\nFBE0\nAE20\nFBE0\nAD40\nD620\nENDCHAR\nSTARTCHAR U_986B\nENCODING 39019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\nFC80\nB5E0\n8520\nFDE0\n4920\n79E0\n4920\n79E0\n0140\nFE20\nENDCHAR\nSTARTCHAR U_986C\nENCODING 39020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n1100\nFFC0\nD640\n3BC0\n5640\nFFC0\n2240\nFFC0\nAA40\nAA20\nENDCHAR\nSTARTCHAR U_986D\nENCODING 39021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4BE0\nFD00\n4BC0\nFE40\nABC0\nFE40\nA7C0\n3A40\n6BC0\n1240\n6420\nENDCHAR\nSTARTCHAR U_986E\nENCODING 39022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFD00\n87C0\n7A40\nABC0\n7A40\nEBC0\n5A40\n6BC0\n7A40\n8C20\nENDCHAR\nSTARTCHAR U_986F\nENCODING 39023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4480\n7DE0\n4520\n7DE0\n4B20\n35E0\n5520\n6FE0\n5540\nAA20\nENDCHAR\nSTARTCHAR U_9870\nENCODING 39024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n5240\nFE40\n57C0\nAA40\n7FE0\n2440\n3FC0\n0A00\nFFE0\n0200\nENDCHAR\nSTARTCHAR U_9871\nENCODING 39025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BE0\n2080\nFBE0\nAA20\nFFE0\nAA20\nFBE0\nAA20\nFFE0\n9540\nFE20\nENDCHAR\nSTARTCHAR U_9872\nENCODING 39026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DE0\n9080\n29E0\nDF20\n51E0\nA920\n45E0\nFF20\nBBE0\n82C0\nFF20\nENDCHAR\nSTARTCHAR U_9873\nENCODING 39027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n4880\n79E0\n4920\nFDE0\n0920\nFFE0\nA520\nFDE0\nA540\nFE20\nENDCHAR\nSTARTCHAR U_9874\nENCODING 39028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2880\nEFE0\nAB20\nEFE0\n4920\nFFE0\n4920\n7DE0\n4940\n7E20\nENDCHAR\nSTARTCHAR U_9875\nENCODING 39029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0400\n3F80\n2080\n2480\n2480\n2480\n2680\n0900\n10C0\n6040\nENDCHAR\nSTARTCHAR U_9876\nENCODING 39030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF900\n27E0\n2420\n2520\n2520\n2520\n2520\n2180\n6240\n0C20\nENDCHAR\nSTARTCHAR U_9877\nENCODING 39031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4100\n47C0\n7440\n4540\n4540\n4540\n5540\n6100\n42C0\n0C20\nENDCHAR\nSTARTCHAR U_9878\nENCODING 39032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2080\n23E0\n2220\nFEA0\n22A0\n22A0\n22A0\n2180\n2240\n2C20\nENDCHAR\nSTARTCHAR U_9879\nENCODING 39033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF900\n27E0\n2420\n2520\n2520\n2520\n3D20\nC180\n0240\n0C20\nENDCHAR\nSTARTCHAR U_987A\nENCODING 39034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8BE0\nA880\nABE0\nAA20\nAAA0\nAAA0\nAAA0\nAAA0\nA880\n8940\n8A20\nENDCHAR\nSTARTCHAR U_987B\nENCODING 39035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n4100\n87C0\n1440\n2540\n4540\n8540\n1540\n2180\n4240\n8C20\nENDCHAR\nSTARTCHAR U_987C\nENCODING 39036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF900\n27E0\n2420\n74A0\n24A0\n24A0\n3CA0\nE180\n4240\n0C20\nENDCHAR\nSTARTCHAR U_987D\nENCODING 39037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77E0\n0080\n0100\nFFE0\n5220\n52A0\n52A0\n56A0\n5AA0\n5140\n8620\nENDCHAR\nSTARTCHAR U_987E\nENCODING 39038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8100\nBBE0\nAA20\nAAA0\nAAA0\nBAA0\nA2A0\nA880\nB360\nAC20\nENDCHAR\nSTARTCHAR U_987F\nENCODING 39039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2080\nFBE0\n2220\nAAA0\nAAA0\nFAA0\n22A0\n2880\n3140\n0620\nENDCHAR\nSTARTCHAR U_9880\nENCODING 39040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0BE0\n7080\n43E0\n7E20\n52A0\n52A0\n52A0\n52A0\n52A0\n5140\n8620\nENDCHAR\nSTARTCHAR U_9881\nENCODING 39041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\n5080\n4BE0\n8620\n7AA0\n2AA0\n2AA0\n2AA0\n2AA0\n4940\n9620\nENDCHAR\nSTARTCHAR U_9882\nENCODING 39042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n5080\n4900\n8BE0\nA220\n22A0\n42A0\n52A0\nFAA0\n0940\n0620\nENDCHAR\nSTARTCHAR U_9883\nENCODING 39043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFC80\n03E0\n7220\n52A0\n52A0\n52A0\n52A0\n56A0\n9940\n8620\nENDCHAR\nSTARTCHAR U_9884\nENCODING 39044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n1080\n63E0\n2220\nFAA0\n2AA0\n22A0\n22A0\n22A0\n2140\n6620\nENDCHAR\nSTARTCHAR U_9885\nENCODING 39045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n3880\n23E0\n7E20\n46A0\n7EA0\n42A0\n42A0\n42A0\n8140\n8620\nENDCHAR\nSTARTCHAR U_9886\nENCODING 39046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n1080\n2900\n67E0\n9220\n02A0\n7AA0\n0AA0\n1080\n2140\n1220\nENDCHAR\nSTARTCHAR U_9887\nENCODING 39047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n7C80\n57E0\n5220\n7AA0\n4AA0\n6AA0\n52A0\n5880\n6540\n8220\nENDCHAR\nSTARTCHAR U_9888\nENCODING 39048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n1080\n3100\n4BE0\n8620\nFAA0\n22A0\n22A0\n3A80\nE140\n4620\nENDCHAR\nSTARTCHAR U_9889\nENCODING 39049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n2080\nFBE0\n2220\n7AA0\n02A0\n7AA0\n4AA0\n4AA0\n7940\n4E20\nENDCHAR\nSTARTCHAR U_988A\nENCODING 39050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\nFC80\n13E0\n9620\n5AA0\nFEA0\n12A0\n12A0\n2AA0\n4540\n8220\nENDCHAR\nSTARTCHAR U_988B\nENCODING 39051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\nF880\n2BE0\n4A20\nFEA0\n2AA0\nAAA0\n7EA0\n22A0\n5140\n8E20\nENDCHAR\nSTARTCHAR U_988C\nENCODING 39052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n2880\n47E0\n8220\n7AA0\n02A0\n7AA0\n4AA0\n4AA0\n7940\n4E20\nENDCHAR\nSTARTCHAR U_988D\nENCODING 39053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4BE0\n5080\n67E0\n4220\n7EA0\n12A0\nF6A0\n3AA0\n5EA0\n9140\n3220\nENDCHAR\nSTARTCHAR U_988E\nENCODING 39054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n97E0\nE100\n97C0\n7440\n0540\n2540\nAD40\nB540\n2100\n5280\n8C40\nENDCHAR\nSTARTCHAR U_988F\nENCODING 39055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n2080\nFBE0\n4220\n92A0\nE2A0\n2AA0\n4AA0\n9280\n2940\nC620\nENDCHAR\nSTARTCHAR U_9890\nENCODING 39056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9080\n93E0\nBA20\nAAA0\nAAA0\nBAA0\n92A0\n92A0\nFD40\n0220\nENDCHAR\nSTARTCHAR U_9891\nENCODING 39057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n5080\n5FE0\n5220\nFEA0\n12A0\n56A0\n5AA0\n92A0\n2140\nC620\nENDCHAR\nSTARTCHAR U_9892\nENCODING 39058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nD7E0\n5880\n97E0\n3220\n4AA0\n4AA0\nFEA0\n4AA0\n4940\n8A20\nENDCHAR\nSTARTCHAR U_9893\nENCODING 39059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n2080\nFBE0\n3220\n6AA0\nA2A0\n72A0\n52A0\n56A0\n5940\n8620\nENDCHAR\nSTARTCHAR U_9894\nENCODING 39060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n37E0\n4900\nA7E0\n1220\n7AA0\n0AA0\n12A0\n7AA0\n4AA0\n7940\n4A20\nENDCHAR\nSTARTCHAR U_9895\nENCODING 39061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\n6100\n47C0\n7440\n0540\n7540\n0540\nFD40\n7100\nAAC0\n2440\nENDCHAR\nSTARTCHAR U_9896\nENCODING 39062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n93E0\nE080\n8BE0\nFA20\n0AA0\nF2A0\n22A0\nFEA0\n32A0\n6940\nA620\nENDCHAR\nSTARTCHAR U_9897\nENCODING 39063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA880\nFBE0\nAA20\nFAA0\n22A0\nFAA0\n22A0\n72A0\nA940\n2620\nENDCHAR\nSTARTCHAR U_9898\nENCODING 39064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4880\n7BE0\n4A20\n7AA0\n02A0\nFEA0\n5280\n5D40\nB220\n8FE0\nENDCHAR\nSTARTCHAR U_9899\nENCODING 39065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA880\nFBE0\nAA20\nFA20\n22A0\nFEA0\nA6A0\nFEA0\n8540\n8E20\nENDCHAR\nSTARTCHAR U_989A\nENCODING 39066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA880\nFBE0\n0220\n7AA0\n02A0\nFAA0\n22A0\n7AA0\n0940\n3220\nENDCHAR\nSTARTCHAR U_989B\nENCODING 39067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nABE0\nA880\nFBE0\n0220\nFAA0\n22A0\nFAA0\nAAA0\nAAA0\nA940\n8A20\nENDCHAR\nSTARTCHAR U_989C\nENCODING 39068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nF880\n53E0\nFA20\n8AA0\n92A0\nEAA0\n92A0\nEAA0\n9140\nE620\nENDCHAR\nSTARTCHAR U_989D\nENCODING 39069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFC80\n87E0\n7A20\nCAA0\n32A0\n4AA0\nFEA0\n4AA0\n7940\n4E20\nENDCHAR\nSTARTCHAR U_989E\nENCODING 39070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4880\n7BE0\n4A20\nFEA0\n0AA0\nFEA0\nB6A0\n6AA0\n9540\n2620\nENDCHAR\nSTARTCHAR U_989F\nENCODING 39071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BE0\nFC80\n2BE0\nFE20\n52A0\nFAA0\nBAA0\nAAA0\nD880\nA940\n8A20\nENDCHAR\nSTARTCHAR U_98A0\nENCODING 39072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFC80\n23E0\nFA20\n8AA0\nEAA0\nBAA0\n8AA0\nFE80\n4940\n8620\nENDCHAR\nSTARTCHAR U_98A1\nENCODING 39073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n5080\n23E0\nFE20\n4AA0\nB6A0\nFAA0\n22A0\n72A0\nA940\n2620\nENDCHAR\nSTARTCHAR U_98A2\nENCODING 39074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4880\n7BE0\n4A20\n7AA0\n22A0\nFEA0\n4AA0\n7AA0\n5540\nB620\nENDCHAR\nSTARTCHAR U_98A3\nENCODING 39075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\n3880\nFFE0\n3A20\n56A0\n2AA0\n16A0\n7EA0\n52A0\n9540\n3220\nENDCHAR\nSTARTCHAR U_98A4\nENCODING 39076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\nFD00\nBBE0\n8A20\nFAA0\n4AA0\n7AA0\n4AA0\n7A80\n0140\nFE20\nENDCHAR\nSTARTCHAR U_98A5\nENCODING 39077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\nFBE0\nAA20\nFAA0\nAAA0\nFEA0\n22A0\nFA80\nA940\nAE20\nENDCHAR\nSTARTCHAR U_98A6\nENCODING 39078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n5080\nFFE0\n6AA0\nA940\n7FE0\n2440\n3FC0\n2A40\nFFE0\n0200\nENDCHAR\nSTARTCHAR U_98A7\nENCODING 39079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDE0\n2900\nEFE0\nAA20\nEEA0\n52A0\nFEA0\n52A0\n7EA0\n5140\n7E20\nENDCHAR\nSTARTCHAR U_98A8\nENCODING 39080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2140\n2E40\n2440\n3F40\n3540\n3F40\n2540\n2760\n5CA0\n8820\nENDCHAR\nSTARTCHAR U_98A9\nENCODING 39081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n4C80\n7520\n5440\n7C80\n5520\n7C40\n5480\n5520\n5620\nB9E0\nENDCHAR\nSTARTCHAR U_98AA\nENCODING 39082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0500\n0480\n7FC0\n4040\n7FC0\n5540\n5F40\n4560\n7F60\n80A0\nENDCHAR\nSTARTCHAR U_98AB\nENCODING 39083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n4480\n7FC0\n5480\n7FE0\n5480\n7D40\n5620\n5400\n7A20\n81E0\nENDCHAR\nSTARTCHAR U_98AC\nENCODING 39084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n4C40\n7540\n57E0\n7C40\n54C0\n7D40\n5640\n54C0\n5220\nBDE0\nENDCHAR\nSTARTCHAR U_98AD\nENCODING 39085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n4C80\n74E0\n5480\n7DE0\n5520\n7D20\n55E0\n5520\n5220\nBDE0\nENDCHAR\nSTARTCHAR U_98AE\nENCODING 39086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n9BE0\nEC20\nABA0\nFAA0\nABC0\nFA20\nABE0\nA800\nA420\nFBE0\nENDCHAR\nSTARTCHAR U_98AF\nENCODING 39087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n24C0\nFF40\n1540\n97C0\n5540\n57C0\n2940\nF940\n57A0\n2020\nENDCHAR\nSTARTCHAR U_98B0\nENCODING 39088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D40\n4520\n7FE0\n5500\n7DC0\n5540\n7E80\n5540\n5620\n7E20\n81E0\nENDCHAR\nSTARTCHAR U_98B1\nENCODING 39089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n9880\nE920\nABE0\nF800\nA9E0\nF920\nA920\nA9E0\nA420\nFBE0\nENDCHAR\nSTARTCHAR U_98B2\nENCODING 39090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFA0\n9A20\nEBA0\nAAA0\nFDA0\nA8A0\nF920\nAA60\nA800\nA420\nFBE0\nENDCHAR\nSTARTCHAR U_98B3\nENCODING 39091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C20\n4DC0\n7480\n55E0\n7C80\n55E0\n7D20\n55E0\n5400\n5220\nBDE0\nENDCHAR\nSTARTCHAR U_98B4\nENCODING 39092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n45E0\n7E00\n57E0\n7CA0\n54C0\n7E80\n5780\n7C60\n4200\n81E0\nENDCHAR\nSTARTCHAR U_98B5\nENCODING 39093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFAA0\n89C0\nFBE0\nAA20\nFBE0\nAA20\nFBE0\nAA20\nAA60\nF400\n8BE0\nENDCHAR\nSTARTCHAR U_98B6\nENCODING 39094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n9A40\nEB40\nAAC0\nFA40\nABC0\nFA40\nAFE0\nA940\nA620\nFBE0\nENDCHAR\nSTARTCHAR U_98B7\nENCODING 39095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7EA0\n45C0\n7D40\n5620\n7EA0\n55C0\n7C80\n5540\n5620\n7A20\n81E0\nENDCHAR\nSTARTCHAR U_98B8\nENCODING 39096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n9AA0\nEBE0\nAAA0\nFBE0\nA940\nFB20\nAD40\nA9C0\nA420\nFBE0\nENDCHAR\nSTARTCHAR U_98B9\nENCODING 39097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8BC0\nF940\nAFE0\nFA40\nABC0\nFFE0\nAA80\nABE0\nF880\n87E0\nENDCHAR\nSTARTCHAR U_98BA\nENCODING 39098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n9A40\nEBC0\nAA40\nFFE0\nA900\nFFE0\nAAA0\nAD40\nA420\nFBE0\nENDCHAR\nSTARTCHAR U_98BB\nENCODING 39099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BE0\nC260\nABA0\n52A0\n43E0\n7AA0\nA3E0\nFAA0\n22A0\nABE0\nFC20\nENDCHAR\nSTARTCHAR U_98BC\nENCODING 39100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9E0\n9AA0\nEBE0\nAAA0\nFBE0\nA880\nFBE0\nA940\nA880\nF660\n83E0\nENDCHAR\nSTARTCHAR U_98BD\nENCODING 39101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nABE0\nFA60\n03A0\nFAA0\n03E0\nFAA0\n8BE0\nFAA0\n8CA0\n57E0\nF420\nENDCHAR\nSTARTCHAR U_98BE\nENCODING 39102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n9AA0\nE9C0\nAAA0\nFBE0\nAAA0\nFBE0\nA880\nABE0\nB420\nEBE0\nENDCHAR\nSTARTCHAR U_98BF\nENCODING 39103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA460\nF7A0\nA4A0\nF7E0\nA6A0\nFFE0\n5CA0\nACA0\nAFE0\n1020\nENDCHAR\nSTARTCHAR U_98C0\nENCODING 39104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFB00\n9AE0\nEBA0\nAAA0\nFBE0\nAAA0\nFBE0\nAAA0\nABE0\nA420\nFBE0\nENDCHAR\nSTARTCHAR U_98C1\nENCODING 39105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nAA60\n67A0\nAAA0\n13E0\n7AA0\n4BE0\n7AA0\n4AA0\n7BE0\n4C20\nENDCHAR\nSTARTCHAR U_98C2\nENCODING 39106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9DA0\nEB60\nADA0\nF940\nAAA0\nFD20\nAA40\nA880\nA520\nFBE0\nENDCHAR\nSTARTCHAR U_98C3\nENCODING 39107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8940\nFBE0\nAAA0\nFBE0\nA800\nFBE0\nA8C0\nAAA0\nF4A0\n83E0\nENDCHAR\nSTARTCHAR U_98C4\nENCODING 39108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2A60\nFFA0\nAAA0\nFFE0\n02A0\n7BE0\n02A0\nFEA0\n57E0\nB420\nENDCHAR\nSTARTCHAR U_98C5\nENCODING 39109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8940\nFB60\nAA20\nFBE0\nAAA0\nFBE0\nAAA0\nABE0\nFC00\n83E0\nENDCHAR\nSTARTCHAR U_98C6\nENCODING 39110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2BE0\n2660\nFFA0\n32A0\nCBE0\n6EA0\n4BE0\nFEA0\n4AA0\nB7E0\nA420\nENDCHAR\nSTARTCHAR U_98C7\nENCODING 39111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\n8FE0\nF980\nAE60\nFA40\nAFE0\nFA40\nADA0\nA800\nFC20\n83E0\nENDCHAR\nSTARTCHAR U_98C8\nENCODING 39112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7EA0\n45C0\n7C80\n5540\n7E20\n5540\n7FE0\n5540\n56A0\nBE00\n81E0\nENDCHAR\nSTARTCHAR U_98C9\nENCODING 39113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n9BE0\nED40\nABE0\nFE40\nABC0\nF880\nAAC0\nADA0\nA420\nFBE0\nENDCHAR\nSTARTCHAR U_98CA\nENCODING 39114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\nB440\n27C0\n5540\n8FC0\n5540\nFFC0\n5540\nAFC0\n4860\n1020\nENDCHAR\nSTARTCHAR U_98CB\nENCODING 39115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9A40\nEFE0\nAA40\nFFE0\nAB40\nFDA0\nA920\nABC0\nA420\nFBE0\nENDCHAR\nSTARTCHAR U_98CC\nENCODING 39116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5260\nEFA0\nAAA0\nEFE0\n52A0\nFFE0\n52A0\n7EA0\n53E0\n7C20\nENDCHAR\nSTARTCHAR U_98CD\nENCODING 39117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n5540\n5F40\n84A0\n7FC0\n4440\n7FC0\n5540\n7FC0\nD520\n7BE0\nENDCHAR\nSTARTCHAR U_98CE\nENCODING 39118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n4080\n4280\n5280\n4C80\n4480\n4C80\n5280\n62A0\n8060\n8020\nENDCHAR\nSTARTCHAR U_98CF\nENCODING 39119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4880\n4900\n4BC0\n6940\n5AC0\n6D40\n4A40\n48C0\n4420\n83E0\nENDCHAR\nSTARTCHAR U_98D0\nENCODING 39120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\n7C80\n44E0\n4480\n6C80\n55C0\n5540\n6D40\n45C0\n4420\n83E0\nENDCHAR\nSTARTCHAR U_98D1\nENCODING 39121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n8BE0\nDC20\nABA0\nAAA0\nABC0\nDA20\n8BE0\n8800\n8420\n83E0\nENDCHAR\nSTARTCHAR U_98D2\nENCODING 39122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n2440\nFC40\n16C0\n9540\n5540\n66C0\n3C40\nC440\n0820\n1020\nENDCHAR\nSTARTCHAR U_98D3\nENCODING 39123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n8A40\nDB40\nAAC0\nAA40\nABC0\nDA40\n8FE0\n8940\n8620\n83E0\nENDCHAR\nSTARTCHAR U_98D4\nENCODING 39124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8AA0\n8BE0\nDAA0\nABE0\nA940\nDAA0\n8E40\n89C0\n8420\n83E0\nENDCHAR\nSTARTCHAR U_98D5\nENCODING 39125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF960\n8AA0\nDBE0\nAAA0\nABE0\nA880\nDBE0\n8940\n8880\n8560\n83E0\nENDCHAR\nSTARTCHAR U_98D6\nENCODING 39126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1800\nE7C0\nA440\n5C40\nFEC0\n2540\nFD40\n26C0\nAC40\nAC60\nF820\nENDCHAR\nSTARTCHAR U_98D7\nENCODING 39127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8AE0\nFBA0\nAAA0\nFBE0\nAAA0\nFBE0\nAAA0\nABE0\nF420\n8BE0\nENDCHAR\nSTARTCHAR U_98D8\nENCODING 39128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n2A20\nFE20\nAB60\nFEA0\n02A0\n7BA0\n0260\nFE20\n5420\nB420\nENDCHAR\nSTARTCHAR U_98D9\nENCODING 39129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\nFC40\n2440\n56C0\n8D40\n5540\nFD40\n56C0\n5440\n6C40\nA860\nENDCHAR\nSTARTCHAR U_98DA\nENCODING 39130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFAA0\n8AC0\n9940\nEE20\nAA40\nAFE0\nDA40\n8A40\n8DA0\n8420\n83E0\nENDCHAR\nSTARTCHAR U_98DB\nENCODING 39131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF00\n0140\n1580\n6540\n24A0\nFF60\n2540\n2580\n2540\n44A0\n8460\nENDCHAR\nSTARTCHAR U_98DC\nENCODING 39132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\nAA60\n7540\nFD60\n7540\nAFC0\nFD60\nAD40\nFD60\nAD40\nF920\nENDCHAR\nSTARTCHAR U_98DD\nENCODING 39133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F40\n1580\nFF60\n2540\n44C0\nFFE0\nAB40\nFFE0\nAB40\nAB40\n2520\nENDCHAR\nSTARTCHAR U_98DE\nENCODING 39134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC00\n0440\n0480\n0500\n0700\n0480\n0440\n0200\n0220\n0120\n00E0\nENDCHAR\nSTARTCHAR U_98DF\nENCODING 39135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0A00\n1500\n3FE0\nD080\n1F80\n1080\n1F80\n1240\n1580\n1860\nENDCHAR\nSTARTCHAR U_98E0\nENCODING 39136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n3000\n4800\nA000\n7800\n4800\n7800\n4800\n7800\n5000\n7800\nENDCHAR\nSTARTCHAR U_98E1\nENCODING 39137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n8280\n4540\n2FE0\n2440\n17C0\n2440\nC7C0\n4520\n44C0\n0760\nENDCHAR\nSTARTCHAR U_98E2\nENCODING 39138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n5280\nAA80\nFA80\n8A80\nFA80\n8A80\nFA80\n92A0\nACA0\nC860\nENDCHAR\nSTARTCHAR U_98E3\nENCODING 39139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n53E0\nA880\nF880\n8880\nF880\n8880\nF880\n9480\nAA80\nC900\nENDCHAR\nSTARTCHAR U_98E4\nENCODING 39140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2900\n5500\nF900\n4900\n7900\n4A80\n7A80\n5240\n6C60\n4440\nENDCHAR\nSTARTCHAR U_98E5\nENCODING 39141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\n5780\nA900\nF900\n8960\nFF80\n8900\nF900\n9120\nA920\nC8E0\nENDCHAR\nSTARTCHAR U_98E6\nENCODING 39142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n2BC0\n5500\nF900\n4900\n7FE0\n4900\n7900\n5100\n6900\n4100\nENDCHAR\nSTARTCHAR U_98E7\nENCODING 39143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n4440\n7920\n57C0\n5440\nB7C0\n1440\n27C0\n24A0\n4540\n8620\nENDCHAR\nSTARTCHAR U_98E8\nENCODING 39144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2380\n2440\n5920\nE7C0\n2440\n57C0\nF440\n17C0\n24A0\n4640\n8420\nENDCHAR\nSTARTCHAR U_98E9\nENCODING 39145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n57E0\nA880\nFAA0\n8AA0\nFAA0\n8BE0\nF880\n90A0\nA8A0\nC860\nENDCHAR\nSTARTCHAR U_98EA\nENCODING 39146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n53C0\nA880\nF880\n8880\nFFE0\n8880\nF880\n9080\nA880\nCBE0\nENDCHAR\nSTARTCHAR U_98EB\nENCODING 39147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n53C0\nA880\nF880\n8BE0\nF880\n8880\nF880\n9140\nAA20\nCC20\nENDCHAR\nSTARTCHAR U_98EC\nENCODING 39148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\n7FC0\n0800\nFFE0\n1100\n3F80\nD160\n1F00\n1480\n1300\n18C0\nENDCHAR\nSTARTCHAR U_98ED\nENCODING 39149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n51E0\nAA00\nFD00\n8900\nFBE0\n8920\nF920\n9220\nACA0\nC840\nENDCHAR\nSTARTCHAR U_98EE\nENCODING 39150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2900\n53E0\nFA40\n4D00\n7900\n4900\n7A80\n4280\n7A40\n4420\nENDCHAR\nSTARTCHAR U_98EF\nENCODING 39151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2060\n3380\n4A00\nFFE0\n4A20\n7A20\n4B40\n7AC0\n5280\n6D40\n4620\nENDCHAR\nSTARTCHAR U_98F0\nENCODING 39152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2900\n57E0\nF900\n4900\n7980\n4960\n7920\n5100\n5900\n6900\nENDCHAR\nSTARTCHAR U_98F1\nENCODING 39153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFA80\n4540\n4FE0\n7440\n97C0\n5440\n27C0\n2540\n4680\n8460\nENDCHAR\nSTARTCHAR U_98F2\nENCODING 39154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5100\nABE0\nFC20\n88A0\nF880\n8880\nF880\n9140\nAA20\nCC20\nENDCHAR\nSTARTCHAR U_98F3\nENCODING 39155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2900\n57E0\nF900\n4900\n7900\n4BC0\n7900\n5100\n5900\n6FE0\nENDCHAR\nSTARTCHAR U_98F4\nENCODING 39156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n5080\nA900\nF940\n8BA0\nF800\n8BE0\nFA20\n9220\nABE0\nCA20\nENDCHAR\nSTARTCHAR U_98F5\nENCODING 39157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2A00\n53E0\nFD00\n4900\n79E0\n4900\n79E0\n5100\n5900\n6900\nENDCHAR\nSTARTCHAR U_98F6\nENCODING 39158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n50A0\nAA20\nFA40\n8A40\nFEA0\n8AA0\nFB00\n9220\nAE20\nC9E0\nENDCHAR\nSTARTCHAR U_98F7\nENCODING 39159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n2BC0\n5640\nFA40\n4BC0\n7A40\n4A40\n7BC0\n5240\n5A40\n6FE0\nENDCHAR\nSTARTCHAR U_98F8\nENCODING 39160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7A80\n4D40\n7BE0\n0240\nFFC0\n2240\n7BE0\n0B40\n2A80\n1360\nENDCHAR\nSTARTCHAR U_98F9\nENCODING 39161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n5CE0\nAAA0\n7AA0\n4AA0\n7AA0\n4AA0\n7EA0\n52E0\n7480\n4880\nENDCHAR\nSTARTCHAR U_98FA\nENCODING 39162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5DC0\n5120\nFDE0\n0400\n3B80\nE4E0\n3F80\n2080\n3FA0\n2240\n39E0\nENDCHAR\nSTARTCHAR U_98FB\nENCODING 39163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2900\n5280\nFC60\n4900\n7A80\n4900\n7A40\n5080\n5900\n6E00\nENDCHAR\nSTARTCHAR U_98FC\nENCODING 39164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5020\nABA0\nF820\n8BA0\nFAA0\n8AA0\nFBA0\n92A0\nA820\nC8E0\nENDCHAR\nSTARTCHAR U_98FD\nENCODING 39165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n5200\nABE0\nFC20\n8BA0\nFAA0\n8BA0\nFA40\n9220\nAA20\nC9E0\nENDCHAR\nSTARTCHAR U_98FE\nENCODING 39166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n5200\nABE0\nFC80\n8BE0\nFAA0\n8AA0\nFAA0\n92A0\nAAE0\nC880\nENDCHAR\nSTARTCHAR U_98FF\nENCODING 39167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n2AA0\n56A0\nFAA0\n4BE0\n7880\n4AA0\n7AA0\n52A0\n5AA0\n6BE0\nENDCHAR\nSTARTCHAR U_9900\nENCODING 39168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n2A80\n57E0\nFA80\n4800\n7C40\n4A40\n7A80\n5100\n5A80\n6C60\nENDCHAR\nSTARTCHAR U_9901\nENCODING 39169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2A60\n5780\nFA80\n4E80\n7BE0\n4A80\n7A80\n5280\n5BE0\n6A00\nENDCHAR\nSTARTCHAR U_9902\nENCODING 39170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n53C0\nA880\nFBE0\n8880\nF880\n8BE0\nFA20\n9220\nABE0\nCA20\nENDCHAR\nSTARTCHAR U_9903\nENCODING 39171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5080\nAFE0\nFA40\n8C20\nFA40\n8940\nF880\n9180\nAA40\nCC20\nENDCHAR\nSTARTCHAR U_9904\nENCODING 39172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2980\n5640\nFC20\n4BC0\n7800\n4BC0\n7A40\n5240\n5BC0\n6A40\nENDCHAR\nSTARTCHAR U_9905\nENCODING 39173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5280\nAFE0\nFA40\n8A40\nFFE0\n8A40\nFA40\n9240\nAC40\nC840\nENDCHAR\nSTARTCHAR U_9906\nENCODING 39174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n2A80\n56A0\nFAC0\n4E80\n7AC0\n4EA0\n7A80\n5280\n5AA0\n6C60\nENDCHAR\nSTARTCHAR U_9907\nENCODING 39175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5420\nADE0\nF420\n95E0\nF560\n9560\nF5E0\n8420\nA420\nD460\nENDCHAR\nSTARTCHAR U_9908\nENCODING 39176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n37E0\nE940\n46E0\n1F00\nE4E0\n3F80\n2080\n3FA0\n2140\n38E0\nENDCHAR\nSTARTCHAR U_9909\nENCODING 39177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5200\nAFE0\nF820\n8BA0\nFAA0\n8AA0\nFBA0\n9820\nA820\nC860\nENDCHAR\nSTARTCHAR U_990A\nENCODING 39178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n0400\nFFE0\n1500\n62C0\nBFA0\n2080\n3FA0\n2240\n39E0\nENDCHAR\nSTARTCHAR U_990B\nENCODING 39179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\n7FC0\n0400\nFFE0\n2A80\nD560\n3F80\nD160\n1F40\n1280\n19E0\nENDCHAR\nSTARTCHAR U_990C\nENCODING 39180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5240\nAA40\nFBC0\n8A40\nFBC0\n8A40\nFA60\n97C0\nA840\nC840\nENDCHAR\nSTARTCHAR U_990D\nENCODING 39181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8500\nBFE0\n9280\nAF40\n90E0\nFF80\n9080\n9FA0\n9140\n9CE0\nENDCHAR\nSTARTCHAR U_990E\nENCODING 39182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2900\n55E0\nFE20\n4940\n7880\n4940\n7FE0\n5240\n5A40\n6BC0\nENDCHAR\nSTARTCHAR U_990F\nENCODING 39183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2880\n57E0\nF900\n4A00\n7EA0\n4AC0\n7A80\n5240\n5B40\n6A20\nENDCHAR\nSTARTCHAR U_9910\nENCODING 39184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2240\n7580\nAA40\n5FC0\nB0A0\n5F80\n1080\n1FA0\n1540\n18E0\nENDCHAR\nSTARTCHAR U_9911\nENCODING 39185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n57E0\nA880\nFFE0\n8C20\nFBE0\n8840\nFFE0\n9080\nA880\nC980\nENDCHAR\nSTARTCHAR U_9912\nENCODING 39186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n5720\nACA0\nFA40\n8900\nFFE0\n8940\nFA40\n9180\nA940\nCE20\nENDCHAR\nSTARTCHAR U_9913\nENCODING 39187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n56C0\nAAA0\nFA80\n8FE0\nFA80\n8BA0\nFEA0\n9240\nAAE0\nCF20\nENDCHAR\nSTARTCHAR U_9914\nENCODING 39188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n50A0\nAFE0\nF880\n8BE0\nFAA0\n8BE0\nFAA0\n93E0\nAAA0\nCA60\nENDCHAR\nSTARTCHAR U_9915\nENCODING 39189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5240\nAFA0\nF940\n8A20\nF900\n8BC0\nFD40\n9080\nA940\nCE20\nENDCHAR\nSTARTCHAR U_9916\nENCODING 39190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5000\nABC0\nFA40\n8A40\nFBC0\n8A40\nFC20\n9240\nAA80\nCFE0\nENDCHAR\nSTARTCHAR U_9917\nENCODING 39191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n57E0\nA880\nFBE0\n8AA0\nFBE0\n8880\nF9C0\n92A0\nACA0\nC880\nENDCHAR\nSTARTCHAR U_9918\nENCODING 39192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5280\nAC40\nF820\n8FC0\nF900\n8FE0\nF900\n9540\nB920\nCB00\nENDCHAR\nSTARTCHAR U_9919\nENCODING 39193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n2980\n5660\nF880\n4FE0\n7980\n4BE0\n7EA0\n52A0\n5AE0\n6880\nENDCHAR\nSTARTCHAR U_991A\nENCODING 39194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2360\n5080\nAB60\nF900\n8FE0\nFA20\n8BE0\nFE20\n93E0\nAA20\nCA60\nENDCHAR\nSTARTCHAR U_991B\nENCODING 39195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5440\nAFC0\nFC40\n8FC0\nFC80\n8CA0\nFFC0\n94A0\nADA0\nCEE0\nENDCHAR\nSTARTCHAR U_991C\nENCODING 39196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n2AA0\n57E0\nFAA0\n4BE0\n7880\n4FE0\n7980\n52C0\n5CA0\n6880\nENDCHAR\nSTARTCHAR U_991D\nENCODING 39197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n2FE0\n5280\nF900\n4880\n7FE0\n4900\n79C0\n5240\n5A40\n6CC0\nENDCHAR\nSTARTCHAR U_991E\nENCODING 39198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n5240\nAFE0\nFA40\n89A0\nFE60\n8A40\nFFE0\n9280\nAB20\nCCE0\nENDCHAR\nSTARTCHAR U_991F\nENCODING 39199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5520\nAAA0\nFB40\n8CA0\nF900\n8FE0\nFD20\n92A0\nAD40\nC9A0\nENDCHAR\nSTARTCHAR U_9920\nENCODING 39200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1120\n2A40\n57E0\nFA40\n4A40\n7FE0\n4A40\n7A40\n5240\n5A40\n6C40\nENDCHAR\nSTARTCHAR U_9921\nENCODING 39201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n51E0\nAA40\nFC00\n8960\nFA20\n8A20\nFB60\n9220\nABE0\nCA20\nENDCHAR\nSTARTCHAR U_9922\nENCODING 39202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n2900\n57E0\nFA40\n4A80\n7FE0\n4800\n7BC0\n5240\n5A40\n6BC0\nENDCHAR\nSTARTCHAR U_9923\nENCODING 39203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n2FE0\n5140\nFEA0\n4BE0\n7AA0\n4BE0\n7AA0\n53E0\n5880\n68E0\nENDCHAR\nSTARTCHAR U_9924\nENCODING 39204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n52A0\nAAC0\nFC80\n8940\nFEA0\n8AA0\nFAC0\n9080\nA940\nCA20\nENDCHAR\nSTARTCHAR U_9925\nENCODING 39205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n0A00\n7BC0\n0A00\nFFE0\n1580\n7F60\nA100\n3F40\n2280\n79C0\nENDCHAR\nSTARTCHAR U_9926\nENCODING 39206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n2A00\n57C0\nFA00\n4BC0\n7A00\n4FE0\n7B40\n5280\n5A40\n6B20\nENDCHAR\nSTARTCHAR U_9927\nENCODING 39207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5080\nAFE0\nFAC0\n8CA0\nF900\n8FE0\nFA40\n9180\nA940\nCE20\nENDCHAR\nSTARTCHAR U_9928\nENCODING 39208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\nAC20\nFBC0\n8A40\nFBC0\n8A00\nFBC0\n9240\nABC0\nCA40\nENDCHAR\nSTARTCHAR U_9929\nENCODING 39209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n5220\nAC80\nFBE0\n8900\nFA40\n8B80\nF920\n9240\nA8A0\nCB20\nENDCHAR\nSTARTCHAR U_992A\nENCODING 39210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5100\nAFE0\nFAA0\n8AA0\nFAA0\n8900\nFFE0\n9100\nAA80\nCC60\nENDCHAR\nSTARTCHAR U_992B\nENCODING 39211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n54A0\nAFE0\nFAA0\n8BE0\nFAA0\n8BE0\nF880\n97E0\nA880\nC880\nENDCHAR\nSTARTCHAR U_992C\nENCODING 39212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22E0\n52A0\nAFA0\nF2E0\n92A0\nF7A0\n95E0\nF7A0\n94A0\nA920\nCA60\nENDCHAR\nSTARTCHAR U_992D\nENCODING 39213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n53C0\nAA40\nFBC0\n8A40\nFFE0\n8880\nF880\n93E0\nA880\nCFE0\nENDCHAR\nSTARTCHAR U_992E\nENCODING 39214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFB80\n4540\n72A0\n9540\n3B00\n6480\nFF60\n2100\n3F40\n2280\n79C0\nENDCHAR\nSTARTCHAR U_992F\nENCODING 39215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5240\nABC0\nF880\n8FE0\nFA00\n8DA0\nFAC0\n95A0\nAEA0\nC900\nENDCHAR\nSTARTCHAR U_9930\nENCODING 39216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n74E0\n8800\n2200\nF6E0\n9D20\nF520\n9520\nF720\nA520\nF5E0\n9540\nENDCHAR\nSTARTCHAR U_9931\nENCODING 39217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5240\nAFE0\nFA00\n8BE0\nFA40\n8BE0\nFA40\n9240\nAAA0\nCB20\nENDCHAR\nSTARTCHAR U_9932\nENCODING 39218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5240\nABC0\nFA40\n8BC0\nF900\n8BE0\nFCA0\n9560\nAFA0\nC840\nENDCHAR\nSTARTCHAR U_9933\nENCODING 39219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5240\nABC0\nFA40\n8FE0\nFC00\n8FE0\nFAA0\n92A0\nAD20\nCA40\nENDCHAR\nSTARTCHAR U_9934\nENCODING 39220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n2BE0\n5540\nFAA0\n4BC0\n7880\n4AA0\n7FE0\n5220\n5A20\n6C20\nENDCHAR\nSTARTCHAR U_9935\nENCODING 39221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n5540\nAFC0\nF540\n97C0\nF000\n9FE0\nF500\n8540\nA480\nD660\nENDCHAR\nSTARTCHAR U_9936\nENCODING 39222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n2A40\n53C0\nFAC0\n4FE0\n7C20\n4BC0\n7A40\n53C0\n5A40\n6EC0\nENDCHAR\nSTARTCHAR U_9937\nENCODING 39223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2FE0\n5380\nFD40\n4BE0\n7A40\n4BC0\n7A40\n53C0\n5800\n6FE0\nENDCHAR\nSTARTCHAR U_9938\nENCODING 39224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1220\n2940\n5600\nFBE0\n4880\n7FE0\n4A80\n7A80\n5340\n5A20\n6DE0\nENDCHAR\nSTARTCHAR U_9939\nENCODING 39225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n2BE0\n5680\nFBE0\n4AA0\n7BE0\n4BE0\n7A80\n53E0\n5D20\n69E0\nENDCHAR\nSTARTCHAR U_993A\nENCODING 39226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20A0\n57E0\nAAA0\nFBE0\n8AA0\nFBE0\n8AA0\nF840\n97E0\nAA40\nC9C0\nENDCHAR\nSTARTCHAR U_993B\nENCODING 39227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n2A80\n57E0\nF900\n4BC0\n7900\n4FE0\n7800\n5540\n5AA0\n6AA0\nENDCHAR\nSTARTCHAR U_993C\nENCODING 39228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n53E0\nAC00\nFBE0\n8D60\nFBA0\n8920\nFFE0\n93A0\nAD60\nC920\nENDCHAR\nSTARTCHAR U_993D\nENCODING 39229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\nAD20\nFFE0\n8D20\nFFE0\n8940\nF980\n93E0\nAD20\nC8E0\nENDCHAR\nSTARTCHAR U_993E\nENCODING 39230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22E0\n54A0\nACA0\nFDA0\n8E40\nFBE0\n8AA0\nFBE0\n92A0\nABE0\nCA20\nENDCHAR\nSTARTCHAR U_993F\nENCODING 39231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n51E0\nAAA0\nFBE0\n8AA0\nFBE0\n8880\nFFE0\n9240\nA980\nCE60\nENDCHAR\nSTARTCHAR U_9940\nENCODING 39232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\n2B00\n54A0\nFAA0\n4940\n7AE0\n4A20\n7B60\n5220\n5A20\n6BE0\nENDCHAR\nSTARTCHAR U_9941\nENCODING 39233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57C0\nA900\nF7E0\n9240\nF7A0\n9000\nFFE0\nAAA0\nBAA0\nDFE0\nENDCHAR\nSTARTCHAR U_9942\nENCODING 39234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n2A40\n57C0\nFA40\n4BC0\n7800\n4BE0\n7AA0\n52A0\n5AA0\n6FE0\nENDCHAR\nSTARTCHAR U_9943\nENCODING 39235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n57E0\nAA40\nF7C0\n9440\nF7C0\n9440\nFFE0\n9100\nB280\nCC60\nENDCHAR\nSTARTCHAR U_9944\nENCODING 39236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1520\n2B40\n57E0\nFC20\n4BC0\n7A40\n4BC0\n7880\n53C0\n5880\n6FE0\nENDCHAR\nSTARTCHAR U_9945\nENCODING 39237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n5240\nABC0\nF240\n9FE0\nFAA0\n9FE0\nF440\nA280\nF100\n8EE0\nENDCHAR\nSTARTCHAR U_9946\nENCODING 39238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n2AA0\n57E0\nFAA0\n4BE0\n7AA0\n4FE0\n7AA0\n57E0\n5880\n6880\nENDCHAR\nSTARTCHAR U_9947\nENCODING 39239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5800\nABC0\nFA40\n8BC0\nF800\n8BE0\nFAA0\nABE0\nA800\nDFE0\nENDCHAR\nSTARTCHAR U_9948\nENCODING 39240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n5280\nAFE0\nF880\n8FE0\nFA00\n8BE0\nFCA0\n93E0\nA8A0\nCFE0\nENDCHAR\nSTARTCHAR U_9949\nENCODING 39241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n57E0\nA940\nF880\n8BE0\nFAA0\n8FE0\nF880\n93E0\nA880\nCFE0\nENDCHAR\nSTARTCHAR U_994A\nENCODING 39242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n5FC0\nA540\nFFE0\n9020\nF7A0\n9540\nF740\nA540\nB7A0\nD520\nENDCHAR\nSTARTCHAR U_994B\nENCODING 39243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57C0\nAD40\nFFE0\n8A40\nFBC0\n8A40\nFBC0\n9240\nABC0\nCE60\nENDCHAR\nSTARTCHAR U_994C\nENCODING 39244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2EE0\n5AA0\nAEE0\nF880\n9EE0\nF280\n97C0\nF280\n97E0\nBA80\nCC60\nENDCHAR\nSTARTCHAR U_994D\nENCODING 39245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n2FE0\n5100\nFFC0\n4900\n7FE0\n4D40\n7B80\n57E0\n5A40\n6BC0\nENDCHAR\nSTARTCHAR U_994E\nENCODING 39246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n57E0\nA880\nFFE0\n8A40\nFBC0\n8A80\nFFE0\n9240\nABC0\nCA40\nENDCHAR\nSTARTCHAR U_994F\nENCODING 39247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n0900\nFFE0\n2A40\nFD80\n0A60\n3F80\nD560\n1F00\n1200\n1980\nENDCHAR\nSTARTCHAR U_9950\nENCODING 39248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57E0\nA900\nFFE0\n8C20\nFFE0\n8A40\nFBC0\n9140\nA880\nCFE0\nENDCHAR\nSTARTCHAR U_9951\nENCODING 39249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n5BA0\nAD40\nF520\n9FE0\nF140\n9FE0\nF4A0\nA4C0\nFAA0\n9360\nENDCHAR\nSTARTCHAR U_9952\nENCODING 39250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n57C0\nA900\nFFE0\n8A40\nFFE0\n8A40\nFFE0\n9280\nACA0\nC860\nENDCHAR\nSTARTCHAR U_9953\nENCODING 39251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n57E0\nAC20\nFBC0\n8A40\nFBC0\n8900\nFFE0\n9380\nAD40\nC920\nENDCHAR\nSTARTCHAR U_9954\nENCODING 39252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n5500\n5FC0\nF500\n2FE0\nD200\n3FE0\nE100\n3F00\n2480\n7BC0\nENDCHAR\nSTARTCHAR U_9955\nENCODING 39253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF1C0\n9100\nFFE0\n4520\n7DC0\n1560\n7FC0\nA100\n3F40\n2280\n39E0\nENDCHAR\nSTARTCHAR U_9956\nENCODING 39254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n25E0\n5500\nAFE0\nF8A0\n8FE0\nF880\n8FA0\nFAA0\n9F40\nAAA0\nCD20\nENDCHAR\nSTARTCHAR U_9957\nENCODING 39255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n48E0\nBEA0\n52C0\nBEA0\n54E0\n8E80\n3F80\nE160\n3F40\n2680\n39C0\nENDCHAR\nSTARTCHAR U_9958\nENCODING 39256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\nABA0\nF820\n9FE0\nF440\n97C0\nF440\n97C0\nB000\nCFE0\nENDCHAR\nSTARTCHAR U_9959\nENCODING 39257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n57E0\nAAA0\nFFE0\n8A20\nFBC0\n8A40\nFBC0\n9240\nABC0\nCE60\nENDCHAR\nSTARTCHAR U_995A\nENCODING 39258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n2FE0\n5540\nFFE0\n4900\n7FE0\n4A40\n7BE0\n52A0\n5AA0\n6FE0\nENDCHAR\nSTARTCHAR U_995B\nENCODING 39259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n5FE0\nA280\nFFE0\n9820\nF7E0\n9540\nFB80\nA5C0\nFAA0\n9520\nENDCHAR\nSTARTCHAR U_995C\nENCODING 39260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA4C0\nBCA0\nA7E0\nBC80\nAB40\n9FC0\nF0A0\n9FA0\n9240\n99E0\nENDCHAR\nSTARTCHAR U_995D\nENCODING 39261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nAFE0\nDA40\nEFE0\nAAC0\nEF60\nAFE0\nEA00\nCFC0\nAA40\nD3C0\nENDCHAR\nSTARTCHAR U_995E\nENCODING 39262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\n5480\nAFE0\nF420\n97E0\nF480\n9FE0\nF540\nA7C0\nF2A0\n8CE0\nENDCHAR\nSTARTCHAR U_995F\nENCODING 39263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\nAAA0\nFEE0\n9240\nFFE0\n9240\nFFE0\nA2A0\nF640\n8B20\nENDCHAR\nSTARTCHAR U_9960\nENCODING 39264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FE0\n5AA0\nAFE0\n7480\n55E0\n7B40\n55E0\n7940\n6FE0\n5540\n6BE0\nENDCHAR\nSTARTCHAR U_9961\nENCODING 39265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n5FE0\nA540\nFFE0\n9540\nFFE0\n9440\nF7C0\nA440\nB7C0\nCC60\nENDCHAR\nSTARTCHAR U_9962\nENCODING 39266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n5FE0\nA540\n7FE0\n5560\n7FC0\n5540\n7FE0\n6540\n5D80\n6660\nENDCHAR\nSTARTCHAR U_9963\nENCODING 39267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4000\n7C00\n4800\n8000\n2000\n2000\n2000\n2800\n3000\n2000\nENDCHAR\nSTARTCHAR U_9964\nENCODING 39268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n47E0\n7880\n4880\nB080\n2080\n2080\n2080\n2880\n3280\n2100\nENDCHAR\nSTARTCHAR U_9965\nENCODING 39269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\n4480\n7C80\n4C80\nA480\n2480\n2480\n2C80\n34A0\n28A0\n1060\nENDCHAR\nSTARTCHAR U_9966\nENCODING 39270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n4600\n7A00\n5200\n83E0\n2E00\n2200\n2200\n2A00\n3220\n21E0\nENDCHAR\nSTARTCHAR U_9967\nENCODING 39271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F80\n4100\n7A00\n9400\n87E0\n22A0\n22A0\n24A0\n2920\n3220\n04C0\nENDCHAR\nSTARTCHAR U_9968\nENCODING 39272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7FE0\n8900\nA520\n2520\n27E0\n2900\n3120\n2120\n00E0\nENDCHAR\nSTARTCHAR U_9969\nENCODING 39273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n43E0\n7C00\n93C0\n8000\n2780\n2080\n2880\n30A0\n2060\n0020\nENDCHAR\nSTARTCHAR U_996A\nENCODING 39274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n4700\n7900\n5100\n8100\n27E0\n2100\n2100\n2900\n3100\n27E0\nENDCHAR\nSTARTCHAR U_996B\nENCODING 39275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n4700\n7900\n9100\nA7E0\n2100\n2100\n2900\n3280\n2440\n0820\nENDCHAR\nSTARTCHAR U_996C\nENCODING 39276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\n7BE0\n4D00\nA100\n27E0\n2120\n2120\n3220\n2420\n08C0\nENDCHAR\nSTARTCHAR U_996D\nENCODING 39277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n4700\n7C00\n4FC0\nA440\n2640\n2540\n2D40\n3480\n2940\n1620\nENDCHAR\nSTARTCHAR U_996E\nENCODING 39278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4200\n7BE0\n4A20\nA540\n2100\n2100\n2100\n2280\n3440\n2820\nENDCHAR\nSTARTCHAR U_996F\nENCODING 39279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n4240\n7BE0\n4E00\nA2E0\n2F00\n2120\n2940\n30A0\n2360\n0C20\nENDCHAR\nSTARTCHAR U_9970\nENCODING 39280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n43E0\n7C80\n4880\nA7E0\n24A0\n24A0\n2CA0\n34A0\n24E0\n0080\nENDCHAR\nSTARTCHAR U_9971\nENCODING 39281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4400\n47C0\n7C40\n9740\nAD40\n2540\n2740\n24C0\n2C20\n3420\n23E0\nENDCHAR\nSTARTCHAR U_9972\nENCODING 39282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4020\n7BA0\n8820\nA3A0\n22A0\n22A0\n23A0\n2AA0\n3020\n2060\nENDCHAR\nSTARTCHAR U_9973\nENCODING 39283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7540\n9540\n6540\n47C0\n4100\n4920\n5920\n6FE0\n4820\nENDCHAR\nSTARTCHAR U_9974\nENCODING 39284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7A40\n97A0\n8020\n2000\n23E0\n2A20\n3220\n23E0\n0220\nENDCHAR\nSTARTCHAR U_9975\nENCODING 39285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4240\n7A40\n8BC0\nA240\n23C0\n2240\n2A60\n37C0\n2040\n0040\nENDCHAR\nSTARTCHAR U_9976\nENCODING 39286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n47E0\n7A80\n9120\nAEE0\n2000\n27E0\n2A80\n32A0\n24A0\n0860\nENDCHAR\nSTARTCHAR U_9977\nENCODING 39287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4200\n7FE0\n9820\n0BA0\n4AA0\n4BA0\n4AA0\n6820\n4820\n08E0\nENDCHAR\nSTARTCHAR U_9978\nENCODING 39288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7A80\n5440\nA820\n2780\n2000\n27C0\n2C40\n3440\n27C0\nENDCHAR\nSTARTCHAR U_9979\nENCODING 39289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n43C0\n7C40\n9280\n6900\n4280\n4C60\n47C0\n5440\n6440\n47C0\nENDCHAR\nSTARTCHAR U_997A\nENCODING 39290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4080\n7FE0\n4A40\nA420\n2A80\n2280\n2900\n3280\n2440\n0820\nENDCHAR\nSTARTCHAR U_997B\nENCODING 39291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4100\n7FE0\n9200\n4600\n4540\n4D40\n5480\n4480\n6640\n4420\nENDCHAR\nSTARTCHAR U_997C\nENCODING 39292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n4140\n7FE0\n8940\nA140\n27E0\n2140\n2940\n3240\n2440\n0840\nENDCHAR\nSTARTCHAR U_997D\nENCODING 39293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\n7900\n8FE0\nA420\n23C0\n2080\n2FE0\n3100\n2500\n0200\nENDCHAR\nSTARTCHAR U_997E\nENCODING 39294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n4FE0\n7000\n97C0\n6440\n4440\n47C0\n4440\n5240\n6280\n4FE0\nENDCHAR\nSTARTCHAR U_997F\nENCODING 39295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4180\n46C0\n7AA0\n8FE0\nA280\n22A0\n27A0\n2AC0\n22A0\n3360\n2620\nENDCHAR\nSTARTCHAR U_9980\nENCODING 39296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4280\n7440\n5820\nA7C0\n2100\n2FE0\n2900\n3540\n2920\n1320\nENDCHAR\nSTARTCHAR U_9981\nENCODING 39297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n4780\n7D20\n4AA0\nA140\n2FE0\n2140\n2A40\n3180\n2340\n0C20\nENDCHAR\nSTARTCHAR U_9982\nENCODING 39298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4100\n7240\n97E0\n6440\n4A20\n47C0\n4A40\n4180\n6180\n4660\nENDCHAR\nSTARTCHAR U_9983\nENCODING 39299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4540\n7FC0\n9540\n67C0\n4100\n4FE0\n4380\n6540\n4920\n0100\nENDCHAR\nSTARTCHAR U_9984\nENCODING 39300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n4420\n7FE0\n9420\nA7E0\n2480\n24A0\n2FC0\n34A0\n25A0\n0660\nENDCHAR\nSTARTCHAR U_9985\nENCODING 39301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n43E0\n7A40\n9480\nA200\n24E0\n2420\n2760\n2C20\n37E0\n2420\nENDCHAR\nSTARTCHAR U_9986\nENCODING 39302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47E0\n7C20\n53C0\nA240\n23C0\n2200\n2BE0\n3220\n23E0\n0220\nENDCHAR\nSTARTCHAR U_9987\nENCODING 39303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4FE0\n7540\n5920\n87C0\n2440\n27C0\n2C40\n37C0\n2000\n0FE0\nENDCHAR\nSTARTCHAR U_9988\nENCODING 39304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\n7540\n9FE0\nA000\n27C0\n2440\n2D40\n3540\n2280\n0C60\nENDCHAR\nSTARTCHAR U_9989\nENCODING 39305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\n7740\n9540\n6FE0\n4820\n47C0\n4440\n57C0\n6440\n44C0\nENDCHAR\nSTARTCHAR U_998A\nENCODING 39306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n4760\n7D20\n4F60\nA520\n27E0\n2100\n2FE0\n3240\n2180\n0E60\nENDCHAR\nSTARTCHAR U_998B\nENCODING 39307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n4480\n7FE0\n5520\nA7E0\n2280\n24E0\n2900\n2080\n3300\n20C0\nENDCHAR\nSTARTCHAR U_998C\nENCODING 39308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\n7100\n9FE0\n6240\n4FE0\n4000\n47C0\n5540\n6540\n4FE0\nENDCHAR\nSTARTCHAR U_998D\nENCODING 39309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n47E0\n7A80\n57C0\nA440\n27C0\n2440\n2FE0\n3100\n2280\n0C60\nENDCHAR\nSTARTCHAR U_998E\nENCODING 39310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n4FE0\n7540\n57C0\nA540\n47C0\n4540\n5FE0\n4440\n6240\n40C0\nENDCHAR\nSTARTCHAR U_998F\nENCODING 39311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n4DE0\n7AA0\n5AA0\n8D20\n4240\n47E0\n4520\n57E0\n6520\n47E0\nENDCHAR\nSTARTCHAR U_9990\nENCODING 39312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n4140\n7FE0\n5100\n8FE0\n2100\n27E0\n2D40\n33C0\n2140\n0FE0\nENDCHAR\nSTARTCHAR U_9991\nENCODING 39313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n47E0\n7A40\n4BC0\nA7E0\n2520\n27E0\n2900\n37C0\n2100\n0FE0\nENDCHAR\nSTARTCHAR U_9992\nENCODING 39314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n4440\n77C0\n5440\nAFE0\n2AA0\n2FE0\n2C40\n3280\n2100\n0EE0\nENDCHAR\nSTARTCHAR U_9993\nENCODING 39315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8A80\n9F80\nEAE0\nBFA0\n8AA0\n4EA0\n4AA0\n5EA0\n6A40\n4AA0\n0D20\nENDCHAR\nSTARTCHAR U_9994\nENCODING 39316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4920\n7FE0\n5880\nAFE0\n2240\n27E0\n2240\n3FE0\n2440\n0820\nENDCHAR\nSTARTCHAR U_9995\nENCODING 39317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n4540\n7FE0\nAB40\n4FC0\n4280\n4FE0\n5280\n6FE0\n4D40\n06E0\nENDCHAR\nSTARTCHAR U_9996\nENCODING 39318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n1100\nFFE0\n0800\n3F80\n2080\n3F80\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_9997\nENCODING 39319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n4FE0\n4100\nF7C0\n5440\n5740\n55C0\n5440\n57E0\n5020\n8FE0\nENDCHAR\nSTARTCHAR U_9998\nENCODING 39320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n88C0\n50A0\nFFE0\n2080\nFEA0\n9AA0\nFEA0\n90C0\nFEA0\n9160\nF220\nENDCHAR\nSTARTCHAR U_9999\nENCODING 39321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0180\n7E00\n0400\nFFE0\n1500\n2480\nFFE0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_999A\nENCODING 39322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n2280\nFA40\n7440\nA820\n27C0\n7A40\n4A40\n7A40\n4B40\n7C80\nENDCHAR\nSTARTCHAR U_999B\nENCODING 39323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7940\n2120\nFFE0\n7100\nA900\n21C0\n7240\n5340\n7480\n5540\n7A20\nENDCHAR\nSTARTCHAR U_999C\nENCODING 39324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0BE0\nF220\n1220\nFFE0\n5A80\n96A0\n7AC0\n4A80\n7AA0\n4AA0\n7CE0\nENDCHAR\nSTARTCHAR U_999D\nENCODING 39325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7240\n2140\nFE80\n2A80\n66C0\nA2A0\n7AA0\n4A80\n7B40\n4A40\n7DC0\nENDCHAR\nSTARTCHAR U_999E\nENCODING 39326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n67E0\n2080\nFFE0\n3420\n6BC0\nF840\n4FE0\n7880\n4880\n7980\nENDCHAR\nSTARTCHAR U_999F\nENCODING 39327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78C0\n2720\nFAA0\n7140\nABC0\n2080\n7080\n57E0\n7080\n5280\n7100\nENDCHAR\nSTARTCHAR U_99A0\nENCODING 39328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n2280\nFA40\n7520\nABC0\n2080\n7100\n57C0\n7440\n57C0\n7440\nENDCHAR\nSTARTCHAR U_99A1\nENCODING 39329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n6280\n26E0\nFA80\n3280\n6EE0\nFA80\n4A80\n7EE0\n4A80\n7A80\nENDCHAR\nSTARTCHAR U_99A2\nENCODING 39330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7280\n2240\nFFC0\n7140\nA8A0\n2360\n7A80\n4FC0\n7940\n48A0\n7B60\nENDCHAR\nSTARTCHAR U_99A3\nENCODING 39331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n67E0\n2280\nFD40\n37E0\n6D40\nFFC0\n4D40\n7FC0\n4920\n78E0\nENDCHAR\nSTARTCHAR U_99A4\nENCODING 39332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n77C0\n2540\nFCC0\n77C0\nAC00\n77E0\n5920\n7520\n56A0\n77A0\n0060\nENDCHAR\nSTARTCHAR U_99A5\nENCODING 39333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n63E0\n2620\nFBE0\n3220\n6BE0\nF900\n4BE0\n7D40\n4880\n7B60\nENDCHAR\nSTARTCHAR U_99A6\nENCODING 39334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1440\n6280\n27E0\nFAA0\n37E0\n6AA0\nFFE0\n4A80\n7EC0\n4AA0\n7AA0\nENDCHAR\nSTARTCHAR U_99A7\nENCODING 39335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n6240\n23C0\nFA40\n33C0\n6800\nFFE0\n4AA0\n7AA0\n4AA0\n7FE0\nENDCHAR\nSTARTCHAR U_99A8\nENCODING 39336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DC0\n1140\n7FE0\n5540\n7C80\n8540\nFFE0\n1480\n7FE0\n1080\n1F80\nENDCHAR\nSTARTCHAR U_99A9\nENCODING 39337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n27E0\nFA40\n77E0\nAA40\n7BC0\n4B40\n7AC0\n4B40\n7BC0\n0660\nENDCHAR\nSTARTCHAR U_99AA\nENCODING 39338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n27E0\nF820\n77E0\nAD40\n7BC0\n4E40\n7BC0\n4A40\n7BC0\n4E60\nENDCHAR\nSTARTCHAR U_99AB\nENCODING 39339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\nFFE0\n2480\nFFE0\n2080\n3F80\nFBE0\n2AC0\nFFE0\n4A40\n7BC0\nENDCHAR\nSTARTCHAR U_99AC\nENCODING 39340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2400\n3F80\n2400\n3F80\n2400\n3FE0\n0020\n5520\n4AA0\n8AC0\nENDCHAR\nSTARTCHAR U_99AD\nENCODING 39341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5120\n7D20\n5120\n7D40\n5140\n7CC0\n5480\nAC80\nA540\n1A20\nENDCHAR\nSTARTCHAR U_99AE\nENCODING 39342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n2500\n17C0\n1500\n27C0\n2500\nC7E0\n4020\n4560\n4AA0\n0AC0\nENDCHAR\nSTARTCHAR U_99AF\nENCODING 39343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n5080\n7880\n5080\n7BE0\n5080\n7C80\n5480\nAC80\nA480\n1880\nENDCHAR\nSTARTCHAR U_99B0\nENCODING 39344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n5100\n7FE0\n5220\n7C20\n5120\n7CA0\n54A0\nAC20\nA520\n18C0\nENDCHAR\nSTARTCHAR U_99B1\nENCODING 39345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n5080\n7880\n53E0\n7880\n5080\n7C80\n5480\nAD40\nA620\n1820\nENDCHAR\nSTARTCHAR U_99B2\nENCODING 39346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n5380\n7900\n5100\n7960\n5380\n7D00\n5500\nAD20\nA520\n18E0\nENDCHAR\nSTARTCHAR U_99B3\nENCODING 39347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA2A0\nFAE0\nA3A0\nFEA0\nA2A0\nFAE0\n5A80\nAA20\nAA20\n11E0\nENDCHAR\nSTARTCHAR U_99B4\nENCODING 39348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA20\nA2A0\nF2A0\nA2A0\nF2A0\nA2A0\nFAA0\n5AA0\nAAA0\nAA20\n1420\nENDCHAR\nSTARTCHAR U_99B5\nENCODING 39349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n2400\n3FC0\n2400\n3FE0\n2A20\n5540\n1100\nFFE0\n1100\n6100\nENDCHAR\nSTARTCHAR U_99B6\nENCODING 39350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n5100\n7FE0\n5100\n7BC0\n5240\n7A40\n0980\nD900\nAAE0\n1C40\nENDCHAR\nSTARTCHAR U_99B7\nENCODING 39351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n53E0\n7880\n53E0\n7AA0\n52A0\n7AA0\n0AA0\nDAE0\nA880\n1880\nENDCHAR\nSTARTCHAR U_99B8\nENCODING 39352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n5380\n7A00\n5200\n7BE0\n5240\n7A40\n0A40\nDA40\nAC40\n1440\nENDCHAR\nSTARTCHAR U_99B9\nENCODING 39353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5220\n7A20\n5220\n7BE0\n5220\n7E20\n5620\nAE20\nA7E0\n1A20\nENDCHAR\nSTARTCHAR U_99BA\nENCODING 39354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n5120\n7920\n5140\n7960\n5120\n7D20\n5540\nAE80\nA540\n1A20\nENDCHAR\nSTARTCHAR U_99BB\nENCODING 39355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA100\nF240\nA420\nF7E0\nA280\nFA80\n5A80\nAAA0\nAAA0\n3460\nENDCHAR\nSTARTCHAR U_99BC\nENCODING 39356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n5080\n7FE0\n5040\n7A40\n5240\n7980\n0980\nD980\nAA40\n1420\nENDCHAR\nSTARTCHAR U_99BD\nENCODING 39357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4400\n7F80\n4400\n7FC0\n4A40\nA540\n7FC0\n4440\n7FC0\n0400\nENDCHAR\nSTARTCHAR U_99BE\nENCODING 39358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n5100\n7FE0\n5520\n7940\n5100\n7980\n0A80\n5AA0\nACA0\n1860\nENDCHAR\nSTARTCHAR U_99BF\nENCODING 39359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n5080\n7BE0\n5220\n7BE0\n5200\n7A00\n0A00\nDA00\nAC00\n1400\nENDCHAR\nSTARTCHAR U_99C0\nENCODING 39360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A80\n5240\n7A00\n57E0\n7A80\n5280\n7A80\n0A80\nDAA0\nACA0\n1860\nENDCHAR\nSTARTCHAR U_99C1\nENCODING 39361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E20\n5140\n7C80\n5140\n7E20\n5040\n7E40\n5580\nAC80\nA540\n1A20\nENDCHAR\nSTARTCHAR U_99C2\nENCODING 39362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n83E0\n9280\nE280\n8BE0\n7A80\n23E0\nFE80\n23E0\n22A0\n2560\n2940\nENDCHAR\nSTARTCHAR U_99C3\nENCODING 39363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA100\nFBC0\nA140\nF940\nA140\nFFE0\n5900\nAA80\nAC40\n1020\nENDCHAR\nSTARTCHAR U_99C4\nENCODING 39364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n5100\n7900\n57E0\n7900\n5100\n7A80\n0A80\nDD40\nA960\n1000\nENDCHAR\nSTARTCHAR U_99C5\nENCODING 39365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n5240\n7A40\n5240\n7BC0\n5300\n7B00\n0A80\nDA80\nAC60\n1840\nENDCHAR\nSTARTCHAR U_99C6\nENCODING 39366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n5200\n7A00\n5320\n7AC0\n5240\n7EA0\n0720\nAE00\nD7E0\n0800\nENDCHAR\nSTARTCHAR U_99C7\nENCODING 39367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n5100\n79E0\n5140\n7B40\n5140\n7D40\n5540\nAC80\nA540\n1A20\nENDCHAR\nSTARTCHAR U_99C8\nENCODING 39368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n5380\n7A00\n5200\n7BE0\n5240\n7A40\n0A40\nDA40\nAFE0\n1000\nENDCHAR\nSTARTCHAR U_99C9\nENCODING 39369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA420\nF420\nA7A0\nF6A0\nA6A0\nFFA0\n5EA0\nAC20\nAC20\n3460\nENDCHAR\nSTARTCHAR U_99CA\nENCODING 39370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n5100\n7FE0\n5540\n7D00\n57C0\n7E40\n0580\nAD80\nD640\n0820\nENDCHAR\nSTARTCHAR U_99CB\nENCODING 39371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n5120\n7920\n5120\n7AE0\n5440\n7DE0\n5520\nAD20\nA5E0\n1920\nENDCHAR\nSTARTCHAR U_99CC\nENCODING 39372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n7E40\nCAC0\n3220\n3FE0\nC400\n7F80\n4400\n7FE0\n5520\n8AC0\nENDCHAR\nSTARTCHAR U_99CD\nENCODING 39373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5080\n7AA0\n51C0\n7880\n5080\n7FE0\n5480\nAC80\nA480\n1880\nENDCHAR\nSTARTCHAR U_99CE\nENCODING 39374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA080\nFBE0\nA2A0\nFAA0\nA3E0\nFAA0\n5AA0\nAAA0\nABE0\n1220\nENDCHAR\nSTARTCHAR U_99CF\nENCODING 39375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n5100\n7D00\n51E0\n7D20\n5120\n7DE0\n5500\nAD00\nA500\n19E0\nENDCHAR\nSTARTCHAR U_99D0\nENCODING 39376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n5080\n7BE0\n5080\n7880\n5080\n7FE0\n5480\nAC80\nA480\n1BE0\nENDCHAR\nSTARTCHAR U_99D1\nENCODING 39377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFC0\n4A40\n3180\n3FE0\nE400\n3F80\n2400\n3FE0\n6A20\n95C0\nENDCHAR\nSTARTCHAR U_99D2\nENCODING 39378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\nA3E0\nFC20\nA3A0\nFAA0\nA2A0\nFBA0\n5AA0\nA820\nA920\n30C0\nENDCHAR\nSTARTCHAR U_99D3\nENCODING 39379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5080\n7880\n5080\n79C0\n52A0\n7CA0\n0480\n5480\nAC00\n1BE0\nENDCHAR\nSTARTCHAR U_99D4\nENCODING 39380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\nA240\nF240\nA240\nF3C0\nA240\nFA40\n2BC0\n5A40\nAA40\nB7E0\nENDCHAR\nSTARTCHAR U_99D5\nENCODING 39381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n2BC0\n5000\nBFC0\n2400\n3F80\n2400\n3FE0\n6A20\n95C0\nENDCHAR\nSTARTCHAR U_99D6\nENCODING 39382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n5180\n7A40\n5520\n7880\n53E0\n7C40\n0480\n5500\nAC80\n1840\nENDCHAR\nSTARTCHAR U_99D7\nENCODING 39383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n5140\n7E20\n5080\n7D20\n5040\n7C80\n0520\n5440\nAC80\nBB00\nENDCHAR\nSTARTCHAR U_99D8\nENCODING 39384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n5100\n7940\n5220\n7BE0\n5000\n7DE0\n0520\n5520\nADE0\nAD20\nENDCHAR\nSTARTCHAR U_99D9\nENCODING 39385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA40\nA240\nF240\nA7E0\nFA40\nA340\nFAC0\n5A40\nAA40\nAA40\n32C0\nENDCHAR\nSTARTCHAR U_99DA\nENCODING 39386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n5100\n7FC0\n5540\n7D40\n5540\n7FE0\n0900\nDA80\nAA40\n1420\nENDCHAR\nSTARTCHAR U_99DB\nENCODING 39387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA080\nFBE0\nA2A0\nFAA0\nA3E0\nF880\n5A80\nA900\nAA80\n3460\nENDCHAR\nSTARTCHAR U_99DC\nENCODING 39388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF920\nA0A0\nFA40\nA240\nFAA0\nA6A0\nFA80\n5B00\nAA20\nAA20\n35E0\nENDCHAR\nSTARTCHAR U_99DD\nENCODING 39389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n5080\n7BE0\n5220\n7900\n5140\n7D80\n5500\nAD20\nA520\n18E0\nENDCHAR\nSTARTCHAR U_99DE\nENCODING 39390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n53E0\n7A00\n5480\n7A80\n57E0\n7AA0\n0AE0\nDA80\nAA20\n11E0\nENDCHAR\nSTARTCHAR U_99DF\nENCODING 39391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF000\nAFE0\nFAA0\nAAA0\nFAA0\nAAA0\nFAE0\n5C20\nA820\nAFE0\n3820\nENDCHAR\nSTARTCHAR U_99E0\nENCODING 39392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF300\nACE0\nFAA0\nAAA0\nFAA0\nAEA0\nFAE0\n1280\nB280\nD280\n3480\nENDCHAR\nSTARTCHAR U_99E1\nENCODING 39393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n0000\n3FC0\n2400\n3F80\n2400\n3FE0\n5520\n8AE0\nENDCHAR\nSTARTCHAR U_99E2\nENCODING 39394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A20\n5140\n7FE0\n5140\n7940\n53E0\n7D40\n5540\nAD40\nA540\n1A40\nENDCHAR\nSTARTCHAR U_99E3\nENCODING 39395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\nA2A0\nFAC0\nA680\nFA80\nA6C0\nFAA0\n5A80\nAAA0\nAAA0\n3460\nENDCHAR\nSTARTCHAR U_99E4\nENCODING 39396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5080\n7940\n53E0\n7820\n5080\n7C80\n57E0\nAC80\nA480\n1BE0\nENDCHAR\nSTARTCHAR U_99E5\nENCODING 39397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8C0\nA0A0\nFFE0\nA080\nFAA0\nA7A0\nFAA0\n5AC0\nAAA0\nAD60\n3220\nENDCHAR\nSTARTCHAR U_99E6\nENCODING 39398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1500\n3F80\n0800\nFFE0\n2080\nFF60\n2400\n3F00\n2400\n3FC0\n5540\nENDCHAR\nSTARTCHAR U_99E7\nENCODING 39399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA820\nF820\nABA0\nF820\nABA0\nFAA0\n4AA0\nABA0\nA820\n1860\nENDCHAR\nSTARTCHAR U_99E8\nENCODING 39400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n53E0\n7C20\n53A0\n7AA0\n53A0\n7EA0\n07A0\nAC20\nD4A0\n0840\nENDCHAR\nSTARTCHAR U_99E9\nENCODING 39401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D80\n5240\n7C20\n53C0\n7C80\n5080\n7FE0\n5480\nAC80\nA480\n1BE0\nENDCHAR\nSTARTCHAR U_99EA\nENCODING 39402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA500\nFFC0\nA500\nF900\nAFE0\nFA80\n5A80\nAAA0\nACA0\n3060\nENDCHAR\nSTARTCHAR U_99EB\nENCODING 39403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n5140\n7D40\n5380\n7FE0\n5280\n7A80\n0A80\nDAA0\nACA0\n1860\nENDCHAR\nSTARTCHAR U_99EC\nENCODING 39404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA240\nF240\nA3C0\nF240\nA3C0\nFA40\n5A60\nAFC0\nA840\n3040\nENDCHAR\nSTARTCHAR U_99ED\nENCODING 39405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n53E0\n7880\n5120\n7BC0\n5040\n7CA0\n5540\nAEC0\nA520\n1A20\nENDCHAR\nSTARTCHAR U_99EE\nENCODING 39406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n53E0\n7D40\n5220\n7D40\n5140\n7D40\n5540\nAC80\nA540\n1A20\nENDCHAR\nSTARTCHAR U_99EF\nENCODING 39407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n5500\n7FC0\n5100\n7FE0\n5100\n7B80\n0B40\nDD60\nA900\n1100\nENDCHAR\nSTARTCHAR U_99F0\nENCODING 39408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA520\nF520\nA7E0\nF520\nA520\nFDA0\n5660\nAC20\nA7E0\n0C20\nENDCHAR\nSTARTCHAR U_99F1\nENCODING 39409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n53E0\n7E20\n5140\n7C80\n5340\n7DE0\n5520\nAD20\nA5E0\n1920\nENDCHAR\nSTARTCHAR U_99F2\nENCODING 39410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7AA0\n52A0\n7AA0\n52A0\n7FA0\n52E0\n7AA0\n0AA0\nDAA0\nACA0\n1820\nENDCHAR\nSTARTCHAR U_99F3\nENCODING 39411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF060\nADC0\nF440\nA440\nF960\nAD40\nF540\n1540\nBDE0\nD600\n29E0\nENDCHAR\nSTARTCHAR U_99F4\nENCODING 39412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF860\nA040\nFFE0\nA040\nFD40\nA7C0\nFD60\n5540\nA540\nA4A0\n3920\nENDCHAR\nSTARTCHAR U_99F5\nENCODING 39413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\nA280\nFEE0\nAAA0\nFAA0\nAAA0\nFEE0\n0A80\nDA80\nAA80\n1480\nENDCHAR\nSTARTCHAR U_99F6\nENCODING 39414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA420\nF7E0\nA400\nF7E0\nA420\nFFA0\n56A0\nABA0\nA820\n30C0\nENDCHAR\nSTARTCHAR U_99F7\nENCODING 39415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n53E0\n7880\n53E0\n7AA0\n53E0\n7C80\n55C0\nAEA0\nA4A0\n1880\nENDCHAR\nSTARTCHAR U_99F8\nENCODING 39416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n5040\n7BC0\n5040\n7FE0\n5220\n7DC0\n5540\nAC80\nA540\n1A20\nENDCHAR\nSTARTCHAR U_99F9\nENCODING 39417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\nA120\nFFE0\nA2A0\nFAC0\nA2A0\nFAC0\n4AA0\nAAC0\nABA0\n34E0\nENDCHAR\nSTARTCHAR U_99FA\nENCODING 39418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n53E0\n7A20\n53E0\n7A20\n53E0\n7AA0\n5AC0\nAA80\nAA40\n3320\nENDCHAR\nSTARTCHAR U_99FB\nENCODING 39419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA220\nFBE0\nA220\nFBE0\nA000\nFBE0\n5880\nAFE0\nA880\n3080\nENDCHAR\nSTARTCHAR U_99FC\nENCODING 39420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF980\nA240\nFC20\nA7C0\nF900\nA7E0\nF900\n5B40\nAD20\nA920\n3300\nENDCHAR\nSTARTCHAR U_99FD\nENCODING 39421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n5120\n79E0\n5000\n79E0\n5120\n7DE0\n5520\nADE0\nA520\n1960\nENDCHAR\nSTARTCHAR U_99FE\nENCODING 39422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC40\nA280\nFFC0\nA440\nFC40\nA7C0\nFA80\n5A80\nAAA0\nAAA0\n3460\nENDCHAR\nSTARTCHAR U_99FF\nENCODING 39423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n5240\n7FE0\n5240\n7C20\n5200\n7BC0\n4E80\nA980\nA940\n1620\nENDCHAR\nSTARTCHAR U_9A00\nENCODING 39424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF180\nA6C0\nF2A0\nAFE0\nF280\nA3A0\nFEC0\n0A80\nABA0\n5E60\n2220\nENDCHAR\nSTARTCHAR U_9A01\nENCODING 39425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n53E0\n7AA0\n53E0\n7AA0\n53E0\n7D00\n55E0\nAC20\nA520\n18C0\nENDCHAR\nSTARTCHAR U_9A02\nENCODING 39426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n5080\n7BE0\n5220\n7940\n53E0\n7C80\n57E0\nAC80\nA480\n1880\nENDCHAR\nSTARTCHAR U_9A03\nENCODING 39427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n5240\n7FE0\n5020\n7A00\n53C0\n7C80\n57E0\nAC80\nA540\n1A20\nENDCHAR\nSTARTCHAR U_9A04\nENCODING 39428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DC0\n5040\n7BC0\n5040\n7BE0\n50A0\n7EC0\n55C0\nAEA0\nA4A0\n1980\nENDCHAR\nSTARTCHAR U_9A05\nENCODING 39429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA280\nF3E0\nA680\nF3E0\nA280\nFA80\n5BE0\nAA80\nAA80\n33E0\nENDCHAR\nSTARTCHAR U_9A06\nENCODING 39430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA520\nF7E0\nA520\nF7E0\nA420\nFFA0\n5EA0\nAAA0\nABA0\n3060\nENDCHAR\nSTARTCHAR U_9A07\nENCODING 39431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n5140\n7A20\n57E0\n7880\n53E0\n7C80\n55E0\nAD20\nA5E0\n1920\nENDCHAR\nSTARTCHAR U_9A08\nENCODING 39432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF120\nA240\nF7E0\nA240\nF240\nA240\nFFE0\n0A40\nDA40\nAA40\n1440\nENDCHAR\nSTARTCHAR U_9A09\nENCODING 39433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA220\nF3E0\nA220\nF3E0\nA280\nFAA0\n5BC0\nAA80\nABA0\n36E0\nENDCHAR\nSTARTCHAR U_9A0A\nENCODING 39434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n53E0\n7D20\n55E0\n7AA0\n53E0\n78A0\n5AA0\nABE0\nA820\n10C0\nENDCHAR\nSTARTCHAR U_9A0B\nENCODING 39435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA7E0\nF100\nA540\nF740\nA9A0\nF980\n4B40\nAD20\nA920\n3100\nENDCHAR\nSTARTCHAR U_9A0C\nENCODING 39436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\nA7E0\nF420\nA3C0\nF000\nA7E0\nF880\n0AC0\nDAA0\nACA0\n1100\nENDCHAR\nSTARTCHAR U_9A0D\nENCODING 39437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA520\nF7E0\nA520\nF7E0\nA100\nFFE0\n5980\nAB40\nAD20\n1120\nENDCHAR\nSTARTCHAR U_9A0E\nENCODING 39438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n57E0\n7980\n5240\n7FE0\n5020\n7BA0\n5AA0\nABA0\nA820\n10E0\nENDCHAR\nSTARTCHAR U_9A0F\nENCODING 39439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A40\n5240\n7FE0\n5240\n7BC0\n5240\n7BC0\n5A40\nAFE0\nAA40\n1420\nENDCHAR\nSTARTCHAR U_9A10\nENCODING 39440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\nA100\nF280\nAD60\nF3C0\nA080\nF900\n0940\nDEA0\nAA40\n11C0\nENDCHAR\nSTARTCHAR U_9A11\nENCODING 39441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A80\n56E0\n7A80\n5280\n7EE0\n5280\n7A80\n5EE0\nAA80\nAA80\n1280\nENDCHAR\nSTARTCHAR U_9A12\nENCODING 39442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\nA240\nF180\nA280\nFD60\nA7C0\nFD40\n0FC0\nD940\nA9E0\n1620\nENDCHAR\nSTARTCHAR U_9A13\nENCODING 39443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\nA280\nF440\nABA0\nF100\nA7C0\nFD40\n0FC0\nD900\nAA80\n1440\nENDCHAR\nSTARTCHAR U_9A14\nENCODING 39444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n5240\n7BC0\n5240\n7BC0\n5100\n7BE0\n5EA0\nAB60\nABA0\n1040\nENDCHAR\nSTARTCHAR U_9A15\nENCODING 39445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5280\n7FE0\n52A0\n7FE0\n5100\n7FE0\n5A40\nAA80\nA940\n1620\nENDCHAR\nSTARTCHAR U_9A16\nENCODING 39446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n53E0\nFD40\n5480\n9160\n7FC0\n4400\n7F80\n4400\n7FC0\nAAC0\nENDCHAR\nSTARTCHAR U_9A17\nENCODING 39447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n7A80\n4BC0\n7A80\n43C0\n7E80\n57E0\n7C20\n5560\nD6A0\n4C40\nENDCHAR\nSTARTCHAR U_9A18\nENCODING 39448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\nA3E0\nF560\nA3A0\nFDA0\nA260\nF800\n0B40\nDCA0\nAA40\n11C0\nENDCHAR\nSTARTCHAR U_9A19\nENCODING 39449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA7E0\nF420\nA7E0\nF400\nA7E0\nFAA0\n5BE0\nAAA0\nAAA0\n1260\nENDCHAR\nSTARTCHAR U_9A1A\nENCODING 39450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF440\nA280\nF7E0\nA020\nFEA0\nAAA0\nFEA0\n5AA0\nAEA0\nAA20\n3A60\nENDCHAR\nSTARTCHAR U_9A1B\nENCODING 39451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF780\nA0A0\nFEC0\nA5A0\nF540\nAFE0\nF560\n5540\nB560\n9540\n2920\nENDCHAR\nSTARTCHAR U_9A1C\nENCODING 39452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n53C0\n7A40\n53C0\n7A40\n57E0\n7880\n5880\nABE0\nA880\n17E0\nENDCHAR\nSTARTCHAR U_9A1D\nENCODING 39453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n52A0\n7BE0\n54A0\n7FE0\n5280\n7BE0\n5A80\nAFE0\nAA80\n15E0\nENDCHAR\nSTARTCHAR U_9A1E\nENCODING 39454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA080\nF3E0\nA080\nF7E0\nA080\nFFE0\n5A00\nAFE0\nAA20\n13E0\nENDCHAR\nSTARTCHAR U_9A1F\nENCODING 39455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\nA280\nF440\nABA0\nF000\nA720\nF5A0\n17A0\nB5A0\nD7A0\n2560\nENDCHAR\nSTARTCHAR U_9A20\nENCODING 39456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n5240\n7BC0\n5240\n7BC0\n5000\n7FE0\n5A80\nAAE0\nAD80\n14E0\nENDCHAR\nSTARTCHAR U_9A21\nENCODING 39457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\nA7C0\nF440\nA7C0\nF440\nA7C0\nF900\n0F40\nDB80\nAD40\n1A20\nENDCHAR\nSTARTCHAR U_9A22\nENCODING 39458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF760\nA520\nF520\nA760\nF400\nA4E0\nF720\n54A0\nB740\n94A0\n2520\nENDCHAR\nSTARTCHAR U_9A23\nENCODING 39459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7B60\n52A0\n7B60\n53E0\n7940\n5620\n79E0\n5B40\nA880\nA940\n1620\nENDCHAR\nSTARTCHAR U_9A24\nENCODING 39460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F40\n5580\n7AA0\n5440\n7BE0\n5080\n7FE0\n5880\nA940\nAA20\n1420\nENDCHAR\nSTARTCHAR U_9A25\nENCODING 39461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n5140\n7FE0\n52A0\n7CC0\n5180\n7900\n5FE0\nAB80\nAD40\n1120\nENDCHAR\nSTARTCHAR U_9A26\nENCODING 39462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n52A0\n7BE0\n52A0\n7AA0\n53E0\n7880\n0AA0\nDD20\nA940\n19C0\nENDCHAR\nSTARTCHAR U_9A27\nENCODING 39463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\nA440\nF740\nA540\nFFE0\nA820\nFBA0\n5AA0\nABA0\n8AA0\n3060\nENDCHAR\nSTARTCHAR U_9A28\nENCODING 39464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D20\n52C0\n7BE0\n52A0\n7BE0\n52A0\n7BE0\n0880\nDFE0\nA880\n1080\nENDCHAR\nSTARTCHAR U_9A29\nENCODING 39465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n57E0\n7D20\n57E0\n7D20\n57E0\n7940\n59A0\nABE0\nAD20\n11E0\nENDCHAR\nSTARTCHAR U_9A2A\nENCODING 39466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7980\n52E0\n7AA0\n53E0\n7AA0\n53E0\n7880\n5BE0\nA940\nA880\n1760\nENDCHAR\nSTARTCHAR U_9A2B\nENCODING 39467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9220\n7F80\n1200\n7FE0\n2480\n7F40\nA420\n3FC0\n5540\nENDCHAR\nSTARTCHAR U_9A2C\nENCODING 39468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\nA100\nFFE0\nA540\nFD60\nA540\nFD60\n5100\nB380\n9540\n2920\nENDCHAR\nSTARTCHAR U_9A2D\nENCODING 39469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF5C0\nA500\nDFE0\nA540\nA980\nFFC0\n4400\n7F80\n4400\n7FE0\n92A0\nENDCHAR\nSTARTCHAR U_9A2E\nENCODING 39470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA8A0\nFAA0\nAEA0\nF140\nA7E0\nF520\n57E0\nB520\n97E0\n2420\nENDCHAR\nSTARTCHAR U_9A2F\nENCODING 39471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\nA7E0\nF240\nA280\nFFE0\nA920\nF7C0\n1200\nB3C0\n9240\n34C0\nENDCHAR\nSTARTCHAR U_9A30\nENCODING 39472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE540\nAFE0\nA200\nEFE0\nA540\nAFE0\nF500\nA7C0\nA500\nA7E0\nAAA0\nENDCHAR\nSTARTCHAR U_9A31\nENCODING 39473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7840\n57A0\n7AA0\n5340\n7AA0\n53E0\n7880\n5FE0\nA880\nA940\n1620\nENDCHAR\nSTARTCHAR U_9A32\nENCODING 39474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7940\n53E0\n7940\n53E0\n7A20\n53E0\n7A20\n5BE0\nA880\nABE0\n1080\nENDCHAR\nSTARTCHAR U_9A33\nENCODING 39475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA280\nFBE0\nA280\nFBE0\nA280\nFBE0\n0820\nAAE0\n8A20\n30C0\nENDCHAR\nSTARTCHAR U_9A34\nENCODING 39476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n5220\n7BE0\n5220\n7FE0\n5420\n7900\n5FE0\nA940\nA880\n1760\nENDCHAR\nSTARTCHAR U_9A35\nENCODING 39477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA480\nF5E0\nA520\nF5E0\nA520\nFDE0\n5480\nADC0\nAEA0\n11A0\nENDCHAR\nSTARTCHAR U_9A36\nENCODING 39478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A00\n53E0\n7EA0\n53E0\n78A0\n5140\n7FE0\n5AA0\nABE0\nA920\n1640\nENDCHAR\nSTARTCHAR U_9A37\nENCODING 39479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n52A0\n7940\n5180\n7A40\n54A0\n7BE0\n5AA0\nABE0\nA8A0\n17E0\nENDCHAR\nSTARTCHAR U_9A38\nENCODING 39480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n53E0\n7A20\n53E0\n7A00\n53E0\n7AA0\n5BE0\nAAA0\nABE0\n14A0\nENDCHAR\nSTARTCHAR U_9A39\nENCODING 39481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7940\n57E0\n7940\n53E0\n7AA0\n52A0\n7BE0\n5880\nABE0\nA880\n17E0\nENDCHAR\nSTARTCHAR U_9A3A\nENCODING 39482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n5140\nFBC0\n2240\nFFE0\n4400\n7F80\n4400\n7FE0\n94A0\nENDCHAR\nSTARTCHAR U_9A3B\nENCODING 39483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n57E0\n7BA0\n5540\n7BA0\n53A0\n7D40\n0BA0\n5980\nAA60\n1C40\nENDCHAR\nSTARTCHAR U_9A3C\nENCODING 39484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\nAFE0\nFA80\nAFE0\nFAA0\nAFE0\nFA80\n0BE0\nDA80\nABA0\n1260\nENDCHAR\nSTARTCHAR U_9A3D\nENCODING 39485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5120\n7DA0\n5360\n7DA0\n5080\n7BE0\n5A20\nABE0\nAA20\n13E0\nENDCHAR\nSTARTCHAR U_9A3E\nENCODING 39486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n52A0\n7BE0\n52A0\n7BE0\n5120\n7BC0\n5A20\nAFE0\nAAC0\n15A0\nENDCHAR\nSTARTCHAR U_9A3F\nENCODING 39487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n53E0\n7940\n57E0\n7A20\n53E0\n7A20\n5BE0\nA880\nABE0\n1080\nENDCHAR\nSTARTCHAR U_9A40\nENCODING 39488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n3F80\n2080\nFFE0\n2480\n7FC0\nA420\n3FE0\n4AA0\nENDCHAR\nSTARTCHAR U_9A41\nENCODING 39489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\n2140\nFC80\n4940\nFFC0\n4400\n7F80\n4400\n7FE0\n94A0\nENDCHAR\nSTARTCHAR U_9A42\nENCODING 39490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\nA7C0\nF440\nAAA0\nFFE0\nA240\nF520\n5280\nB340\n9080\n2700\nENDCHAR\nSTARTCHAR U_9A43\nENCODING 39491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA280\nFFE0\nAAA0\nFFE0\nA000\nF7C0\n5000\nBFE0\n92C0\n2DA0\nENDCHAR\nSTARTCHAR U_9A44\nENCODING 39492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA7E0\nF560\nA6A0\nF5A0\nA660\nF7E0\n5340\nB6A0\n9A40\n21C0\nENDCHAR\nSTARTCHAR U_9A45\nENCODING 39493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5400\n7DC0\n5540\n7DC0\n5400\n7FE0\n5EA0\nAFE0\nAC00\n17E0\nENDCHAR\nSTARTCHAR U_9A46\nENCODING 39494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\nA540\nF7C0\nA540\nF7C0\nA540\nFFE0\n5540\nBFE0\n9100\n2100\nENDCHAR\nSTARTCHAR U_9A47\nENCODING 39495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\nA940\nF760\n22A0\nFFE0\n2400\n3FC0\n2400\n3FE0\n52A0\nENDCHAR\nSTARTCHAR U_9A48\nENCODING 39496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\nA280\nF7E0\nA2A0\nF480\nAFE0\nFAA0\n5FE0\nAAA0\nABA0\n3820\nENDCHAR\nSTARTCHAR U_9A49\nENCODING 39497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9C0\nA100\nF7E0\nA520\nF7C0\nA520\nF5E0\n5540\nB760\n9540\n2BE0\nENDCHAR\nSTARTCHAR U_9A4A\nENCODING 39498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\nA7E0\nFA80\nA7E0\nFD40\nA7E0\nFD40\n57E0\nB100\n97C0\n2100\nENDCHAR\nSTARTCHAR U_9A4B\nENCODING 39499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF6A0\nA2C0\nF6A0\nA440\nF820\nA6E0\nFAA0\n0C00\nDAE0\nAA40\n16A0\nENDCHAR\nSTARTCHAR U_9A4C\nENCODING 39500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\nA7C0\nF140\nA7E0\nF140\nA7E0\nF9A0\n5FE0\nA920\nAFE0\n39A0\nENDCHAR\nSTARTCHAR U_9A4D\nENCODING 39501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n53E0\n7880\n53E0\n7A40\n57E0\n7A40\n5FE0\nAA80\nAAA0\n1460\nENDCHAR\nSTARTCHAR U_9A4E\nENCODING 39502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CA0\n52C0\n7FE0\n52C0\n7CA0\n5240\n7BE0\n5D40\nABE0\nAA40\n1440\nENDCHAR\nSTARTCHAR U_9A4F\nENCODING 39503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\nA420\nF7E0\nA480\nF7E0\nA480\nFFE0\n5A40\nAFE0\nAA40\n36C0\nENDCHAR\nSTARTCHAR U_9A50\nENCODING 39504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF480\nAF80\nFAE0\nAEA0\nF0A0\nAEA0\nF2A0\n54A0\nBE40\n94A0\n2520\nENDCHAR\nSTARTCHAR U_9A51\nENCODING 39505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\nA280\nFEE0\nAAA0\nFEE0\nA280\nF7E0\n1520\nB7E0\n5520\n27E0\nENDCHAR\nSTARTCHAR U_9A52\nENCODING 39506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n52A0\n7BE0\n5000\n7BE0\n52A0\n7BE0\n5AA0\nAFE0\nA880\n1080\nENDCHAR\nSTARTCHAR U_9A53\nENCODING 39507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF280\nAFE0\nF920\nABA0\nFFE0\nA000\nFBC0\n0A40\nABC0\n8A40\n33C0\nENDCHAR\nSTARTCHAR U_9A54\nENCODING 39508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\nA280\nFFE0\nAAA0\nFFE0\nA440\nF7C0\n5440\nBFE0\n9100\n2100\nENDCHAR\nSTARTCHAR U_9A55\nENCODING 39509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\nA100\nF7E0\nA240\nFFE0\nA240\nFFE0\n5820\nABA0\nAAA0\n3BE0\nENDCHAR\nSTARTCHAR U_9A56\nENCODING 39510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n52A0\n7FE0\n5580\n7FA0\n50A0\n7FA0\n5AC0\nAF40\nAAA0\n1720\nENDCHAR\nSTARTCHAR U_9A57\nENCODING 39511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n5280\n7C40\n53A0\n7800\n57E0\n7D20\n5FE0\nAA40\nADA0\n1120\nENDCHAR\nSTARTCHAR U_9A58\nENCODING 39512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1000\n3FC0\n2040\n7FC0\n5540\n7F40\n55C0\n7F40\n9560\nENDCHAR\nSTARTCHAR U_9A59\nENCODING 39513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\nAFE0\nFBA0\nA820\nFFE0\nA440\nF7C0\n5440\nB7C0\n9000\n2FE0\nENDCHAR\nSTARTCHAR U_9A5A\nENCODING 39514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n53E0\nFD40\n56A0\n7FE0\n2400\n3FC0\n2400\n3FE0\n4A20\n9540\nENDCHAR\nSTARTCHAR U_9A5B\nENCODING 39515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nAAA0\nFFE0\nA100\nF7E0\nA100\nFFE0\n4A80\nAFE0\nA900\n1100\nENDCHAR\nSTARTCHAR U_9A5C\nENCODING 39516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D40\n5360\n7FE0\n5140\n7FE0\n5080\n7BE0\n0880\nDFE0\nAAC0\n14A0\nENDCHAR\nSTARTCHAR U_9A5D\nENCODING 39517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n57C0\n7900\n57E0\n7A20\n57C0\n7A40\n0FE0\nDB80\nAD40\n1120\nENDCHAR\nSTARTCHAR U_9A5E\nENCODING 39518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n57E0\n7C20\n53E0\n7AA0\n53C0\n7E40\n5BC0\nAA40\nABC0\n1660\nENDCHAR\nSTARTCHAR U_9A5F\nENCODING 39519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA520\nF740\nA5A0\nF740\nA1A0\nF340\n5580\nBB40\n9520\n2920\nENDCHAR\nSTARTCHAR U_9A60\nENCODING 39520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\nAFE0\nF240\nA3C0\nF440\nADE0\nF540\n1DE0\nB000\n9540\n3AA0\nENDCHAR\nSTARTCHAR U_9A61\nENCODING 39521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\n7E00\n2BC0\nFC40\n57C0\n6EA0\n55E0\n3F80\n2400\n3FE0\nD2A0\nENDCHAR\nSTARTCHAR U_9A62\nENCODING 39522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF1C0\nA100\nF7E0\nA540\nF7E0\nA540\nF7C0\n5540\nB7E0\n9AA0\n27E0\nENDCHAR\nSTARTCHAR U_9A63\nENCODING 39523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF540\nA7C0\nF200\nAFE0\nF440\nAFE0\nFA80\n0BC0\nDA80\nABE0\n1520\nENDCHAR\nSTARTCHAR U_9A64\nENCODING 39524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n57E0\n7DA0\n57E0\n7940\n53E0\n7940\n5BE0\nAEA0\nAA40\n1320\nENDCHAR\nSTARTCHAR U_9A65\nENCODING 39525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF2A0\nAEC0\nF280\nAFE0\nF540\nA7C0\nF540\n5FE0\nB280\n9FE0\n2440\nENDCHAR\nSTARTCHAR U_9A66\nENCODING 39526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\nA100\nFFE0\nA920\nF2E0\nAFA0\nF2E0\n53A0\nB6E0\n9AA0\n22E0\nENDCHAR\nSTARTCHAR U_9A67\nENCODING 39527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\nAF80\nFAE0\nAEA0\nF5E0\nAEA0\nFBE0\n5EA0\nB5E0\n9EA0\n2440\nENDCHAR\nSTARTCHAR U_9A68\nENCODING 39528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF520\nA7E0\nF280\nA7E0\nFC80\nA7E0\nFC80\n5FE0\nABA0\nAEE0\n1BA0\nENDCHAR\nSTARTCHAR U_9A69\nENCODING 39529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n5240\n7FE0\n55A0\n7FE0\n5280\n7BE0\n5E80\nABE0\nAA80\n13E0\nENDCHAR\nSTARTCHAR U_9A6A\nENCODING 39530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\nA000\nFEE0\nAAA0\nFFE0\nAAA0\nFFE0\n5AA0\nABC0\nAAA0\n13E0\nENDCHAR\nSTARTCHAR U_9A6B\nENCODING 39531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2400\n3F80\n2400\n3FC0\n5540\nFBE0\nA280\nFBE0\n5520\nAAE0\nENDCHAR\nSTARTCHAR U_9A6C\nENCODING 39532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n0080\n1080\n1100\n2100\n3FE0\n0020\n0020\nFF20\n0020\n00C0\nENDCHAR\nSTARTCHAR U_9A6D\nENCODING 39533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n1220\n5220\n5220\n5240\n7940\n0940\nE880\n0980\n0A40\n3420\nENDCHAR\nSTARTCHAR U_9A6E\nENCODING 39534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1100\n5100\n57E0\n5100\n7900\n0900\nE900\n0A80\n0A40\n3420\nENDCHAR\nSTARTCHAR U_9A6F\nENCODING 39535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF220\n12A0\n52A0\n52A0\n52A0\n7AA0\n0AA0\nEAA0\n0AA0\n0A20\n3420\nENDCHAR\nSTARTCHAR U_9A70\nENCODING 39536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n12A0\n52E0\n53A0\n56A0\n7AA0\n0AC0\nEA80\n0A20\n0A20\n31E0\nENDCHAR\nSTARTCHAR U_9A71\nENCODING 39537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3E0\n1200\n5220\n5320\n52A0\n7A40\n0A40\nEAA0\n0B20\n0A00\n33E0\nENDCHAR\nSTARTCHAR U_9A72\nENCODING 39538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3E0\n1220\n5220\n5220\n5220\n7BE0\n0A20\nEA20\n0A20\n0BE0\n3220\nENDCHAR\nSTARTCHAR U_9A73\nENCODING 39539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF440\n1280\n5100\n5280\n5440\n7820\n0C40\nEA80\n0980\n0A40\n3420\nENDCHAR\nSTARTCHAR U_9A74\nENCODING 39540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1080\n53E0\n5220\n5220\n7BE0\n0A00\nEA00\n0A00\n0C00\n3000\nENDCHAR\nSTARTCHAR U_9A75\nENCODING 39541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n1240\n5240\n53C0\n5240\n7A40\n0A40\nEBC0\n0A40\n0A40\n37E0\nENDCHAR\nSTARTCHAR U_9A76\nENCODING 39542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n1080\n57E0\n54A0\n54A0\n7FE0\n08A0\nEA80\n0900\n0A80\n3460\nENDCHAR\nSTARTCHAR U_9A77\nENCODING 39543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE000\n27E0\nA520\nA520\nA520\nF520\n16E0\nF420\n1420\n17E0\n6020\nENDCHAR\nSTARTCHAR U_9A78\nENCODING 39544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n1240\n5240\n57E0\n5240\n7B40\n0AC0\nEA40\n0A40\n0A40\n32C0\nENDCHAR\nSTARTCHAR U_9A79\nENCODING 39545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n1200\n53E0\n5420\n53A0\n7AA0\n0AA0\nEBA0\n0AA0\n0820\n30C0\nENDCHAR\nSTARTCHAR U_9A7A\nENCODING 39546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n11E0\n5240\n5480\n57E0\n7820\n0820\nEBE0\n0820\n0BE0\n3020\nENDCHAR\nSTARTCHAR U_9A7B\nENCODING 39547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1080\n57E0\n5080\n5080\n7880\n0BE0\nE880\n0880\n0880\n37E0\nENDCHAR\nSTARTCHAR U_9A7C\nENCODING 39548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n17E0\n5420\n5000\n5220\n7A40\n0B80\nEA00\n0A20\n0A20\n31E0\nENDCHAR\nSTARTCHAR U_9A7D\nENCODING 39549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFE40\n5180\n3140\n4A20\nFF80\n1100\n3FC0\n0040\n7E40\n0080\nENDCHAR\nSTARTCHAR U_9A7E\nENCODING 39550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFDE0\n2520\n5DE0\n8000\n7F80\n1080\n1FE0\n0020\nFF20\n00C0\nENDCHAR\nSTARTCHAR U_9A7F\nENCODING 39551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n1280\n5100\n5280\n5560\n7900\n0BC0\n2900\nCFE0\n0900\n3100\nENDCHAR\nSTARTCHAR U_9A80\nENCODING 39552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1140\n5220\n57E0\n5000\n7BE0\n0A20\nEA20\n0A20\n0BE0\n3220\nENDCHAR\nSTARTCHAR U_9A81\nENCODING 39553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n17E0\n5240\n51A0\n5660\n7820\n0FE0\nEA80\n0AA0\n0CA0\n3060\nENDCHAR\nSTARTCHAR U_9A82\nENCODING 39554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n0000\n7F80\n1080\n1FE0\n0020\nFFA0\n0020\n00C0\nENDCHAR\nSTARTCHAR U_9A83\nENCODING 39555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3E0\n52A0\n52A0\n53E0\n52A0\n7AA0\n0AA0\n2B60\nCA20\n2BE0\n1220\nENDCHAR\nSTARTCHAR U_9A84\nENCODING 39556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF0C0\n1700\n5100\n57E0\n5240\n7C20\n0A40\nEA40\n0A40\n0A40\n3440\nENDCHAR\nSTARTCHAR U_9A85\nENCODING 39557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF180\n12A0\n56C0\n53A0\n52A0\n7A60\n0880\nEFE0\n0880\n0880\n3080\nENDCHAR\nSTARTCHAR U_9A86\nENCODING 39558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n13C0\n5640\n5180\n5240\n7C20\n0BC0\nEA40\n0A40\n0BC0\n3240\nENDCHAR\nSTARTCHAR U_9A87\nENCODING 39559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n17E0\n5100\n5240\n5780\n78A0\n0920\nEA40\n0C80\n0940\n3220\nENDCHAR\nSTARTCHAR U_9A88\nENCODING 39560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF220\n1140\n57E0\n5140\n5140\n7FE0\n0940\nE940\n0940\n0A40\n3440\nENDCHAR\nSTARTCHAR U_9A89\nENCODING 39561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n1080\n1FC0\n0040\nFE80\n73C0\n5240\n7BE0\n0820\nEBA0\n1860\nENDCHAR\nSTARTCHAR U_9A8A\nENCODING 39562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n2000\nAEE0\nAAA0\nAAA0\nEAA0\n2EE0\n6AA0\nAAA0\n2AA0\n6AA0\nENDCHAR\nSTARTCHAR U_9A8B\nENCODING 39563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n13E0\n52A0\n53E0\n52A0\n7FE0\n0900\nEBE0\n0820\n0920\n30C0\nENDCHAR\nSTARTCHAR U_9A8C\nENCODING 39564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1100\n5280\n5C60\n5380\n7800\n0A40\n3D40\nCA80\n0900\n37E0\nENDCHAR\nSTARTCHAR U_9A8D\nENCODING 39565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1FE0\n5440\n5280\n57E0\n7900\n0900\nEFC0\n0900\n0900\n3100\nENDCHAR\nSTARTCHAR U_9A8E\nENCODING 39566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n5040\n53C0\n5040\n57E0\n7C20\n0BC0\n2A40\nC980\n2980\n1660\nENDCHAR\nSTARTCHAR U_9A8F\nENCODING 39567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1240\n57E0\n5240\n5420\n7900\n0BE0\nED40\n0880\n0940\n3620\nENDCHAR\nSTARTCHAR U_9A90\nENCODING 39568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n17E0\n5240\n53C0\n5240\n7BC0\n0A40\nEFE0\n0A80\n0C40\n3020\nENDCHAR\nSTARTCHAR U_9A91\nENCODING 39569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n17E0\n5140\n5220\n57E0\n7820\n0BA0\nEAA0\n0BA0\n0820\n3060\nENDCHAR\nSTARTCHAR U_9A92\nENCODING 39570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n1540\n57C0\n5540\n57C0\n7900\n0FE0\nE900\n0B80\n0D40\n3120\nENDCHAR\nSTARTCHAR U_9A93\nENCODING 39571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF300\n1280\n53E0\n5680\n53C0\n7A80\n0A80\nEBC0\n0A80\n0A80\n33E0\nENDCHAR\nSTARTCHAR U_9A94\nENCODING 39572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n1FE0\n5820\n57C0\n5000\n7FC0\n0900\nE940\n0D20\n0920\n3300\nENDCHAR\nSTARTCHAR U_9A95\nENCODING 39573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE100\nA7C0\nA140\nAFE0\nA140\nF7C0\n1540\n57C0\n9540\n5540\n2940\nENDCHAR\nSTARTCHAR U_9A96\nENCODING 39574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF240\n17A0\n5100\n57E0\n5140\n7AA0\n0D40\nEA80\n0920\n0840\n3180\nENDCHAR\nSTARTCHAR U_9A97\nENCODING 39575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n17E0\n5420\n57E0\n5400\n7FE0\n0AA0\nEFE0\n0AA0\n0AA0\n3060\nENDCHAR\nSTARTCHAR U_9A98\nENCODING 39576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n75C0\n5500\n6FE0\n5540\n7980\n7F80\n2100\n3FC0\n0040\nFF40\n0180\nENDCHAR\nSTARTCHAR U_9A99\nENCODING 39577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF40\n15A0\n5240\n5420\n5BC0\n7900\n0FE0\n2900\nCA80\n2C40\n1020\nENDCHAR\nSTARTCHAR U_9A9A\nENCODING 39578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n1540\n5280\n5180\n5760\n7900\n0FE0\nE920\n0FE0\n0940\n37E0\nENDCHAR\nSTARTCHAR U_9A9B\nENCODING 39579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n57E0\nFA40\n6980\nA660\n7F80\n1100\n3FC0\n0040\nFE40\n0180\nENDCHAR\nSTARTCHAR U_9A9C\nENCODING 39580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7DE0\n1340\nFC80\n4940\nBFA0\n1100\n3FE0\n0020\n7F20\n00C0\nENDCHAR\nSTARTCHAR U_9A9D\nENCODING 39581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE200\n2DE0\nA8A0\nAAA0\nACA0\nF140\n17E0\n3520\nD7E0\n1520\n67E0\nENDCHAR\nSTARTCHAR U_9A9E\nENCODING 39582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n7FC0\n1100\nFFE0\n3080\nDFE0\n0040\n7E40\n0180\nENDCHAR\nSTARTCHAR U_9A9F\nENCODING 39583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nE080\n27E0\nA420\nA7E0\nA400\nF7E0\n14A0\nF6E0\n15A0\n1AE0\n61A0\nENDCHAR\nSTARTCHAR U_9AA0\nENCODING 39584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEFE0\n2280\nAFE0\nAAA0\nAFE0\nF000\n17C0\nF000\n1FE0\n1540\n6B20\nENDCHAR\nSTARTCHAR U_9AA1\nENCODING 39585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n14A0\n57E0\n54A0\n57E0\n7900\n0FC0\nEA20\n0FE0\n0940\n3320\nENDCHAR\nSTARTCHAR U_9AA2\nENCODING 39586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n17E0\n5520\n56A0\n5560\n7E20\n0FE0\nEB40\n0EA0\n0A40\n31C0\nENDCHAR\nSTARTCHAR U_9AA3\nENCODING 39587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n1420\n57E0\n5480\n57E0\n7C80\n0FE0\nEA40\n0FE0\n0A40\n36C0\nENDCHAR\nSTARTCHAR U_9AA4\nENCODING 39588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n1520\n57A0\n5540\n57A0\n79C0\n0B20\nED40\n0B80\n0D40\n3120\nENDCHAR\nSTARTCHAR U_9AA5\nENCODING 39589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF760\n1140\n5760\n5000\n53E0\n7AA0\n0BE0\nE940\n0FE0\n0940\n3220\nENDCHAR\nSTARTCHAR U_9AA6\nENCODING 39590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7C0\n1100\n5FE0\n5D60\n5380\n7D40\n0AE0\n2FA0\nCAE0\n57A0\n2AE0\nENDCHAR\nSTARTCHAR U_9AA7\nENCODING 39591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF080\n17E0\n55A0\n57E0\n5140\n7FE0\n0940\nEFE0\n0AA0\n0E40\n3320\nENDCHAR\nSTARTCHAR U_9AA8\nENCODING 39592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3C80\n2480\nFFE0\nA0A0\nBFA0\n2080\n3F80\n2080\n2380\nENDCHAR\nSTARTCHAR U_9AA9\nENCODING 39593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n6900\n5900\nFFC0\n8540\n7940\n4940\n7940\n4940\n7A60\n4C60\nENDCHAR\nSTARTCHAR U_9AAA\nENCODING 39594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7B80\n6A80\n5A80\nFE80\n8680\n7B80\n4A80\n7A80\n4AA0\n7CA0\n48E0\nENDCHAR\nSTARTCHAR U_9AAB\nENCODING 39595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4900\n6BC0\nFD40\n8540\n7B40\n49C0\n7940\n4940\n7A20\n4C20\nENDCHAR\nSTARTCHAR U_9AAC\nENCODING 39596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7800\n6BC0\n5880\nFC80\n87E0\n7880\n4880\n7880\n4880\n7A80\n4900\nENDCHAR\nSTARTCHAR U_9AAD\nENCODING 39597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4880\n6880\nFC80\n87E0\n7880\n4880\n7880\n4880\n7880\n4880\nENDCHAR\nSTARTCHAR U_9AAE\nENCODING 39598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n6980\n5940\nFDE0\n8700\n7900\n4900\n7880\n48A0\n7860\n4820\nENDCHAR\nSTARTCHAR U_9AAF\nENCODING 39599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4880\n6BE0\nFC00\n85C0\n7940\n4940\n7940\n4940\n7A40\n4C60\nENDCHAR\nSTARTCHAR U_9AB0\nENCODING 39600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79C0\n4940\n6940\nFD60\n8600\n79C0\n4940\n7940\n4880\n7940\n4A20\nENDCHAR\nSTARTCHAR U_9AB1\nENCODING 39601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4940\n6A20\nFC00\n8540\n7940\n4940\n7940\n4940\n7A40\n4840\nENDCHAR\nSTARTCHAR U_9AB2\nENCODING 39602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n6900\n5BE0\nFC20\n87A0\n7AA0\n4BA0\n7A40\n4A00\n7A20\n49E0\nENDCHAR\nSTARTCHAR U_9AB3\nENCODING 39603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n6AA0\nFEA0\n8680\n7BE0\n4A40\n7B40\n4A80\n7D40\n4A20\nENDCHAR\nSTARTCHAR U_9AB4\nENCODING 39604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7940\n4940\n6940\nFD60\n85C0\n7D40\n4D40\n7D40\n4D40\n7FC0\n4860\nENDCHAR\nSTARTCHAR U_9AB5\nENCODING 39605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n6880\n5BE0\nFC80\n81C0\n79C0\n4AA0\n7FE0\n4880\n7880\n4880\nENDCHAR\nSTARTCHAR U_9AB6\nENCODING 39606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n4B80\n6A80\nFE80\n87E0\n7A80\n4A80\n7A80\n4AA0\n7B60\n4AA0\nENDCHAR\nSTARTCHAR U_9AB7\nENCODING 39607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4880\n6BE0\nFC80\n8480\n7BE0\n4A20\n7A20\n4A20\n7BE0\n4A20\nENDCHAR\nSTARTCHAR U_9AB8\nENCODING 39608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n6900\nFD40\n8780\n7920\n4A40\n7C80\n4940\n7A20\n4820\nENDCHAR\nSTARTCHAR U_9AB9\nENCODING 39609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n6940\nFE20\n8540\n7940\n4940\n7940\n4880\n7940\n4A20\nENDCHAR\nSTARTCHAR U_9ABA\nENCODING 39610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n4B80\n6A00\nFFE0\n8600\n7AE0\n4AA0\n7AA0\n4AA0\n7AE0\n4CA0\nENDCHAR\nSTARTCHAR U_9ABB\nENCODING 39611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n6940\nFE20\n85C0\n7800\n4FE0\n7900\n4BE0\n7820\n49C0\nENDCHAR\nSTARTCHAR U_9ABC\nENCODING 39612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n49C0\n6B40\nFC80\n8540\n7A20\n4FC0\n7A40\n4A40\n7BC0\n4A40\nENDCHAR\nSTARTCHAR U_9ABD\nENCODING 39613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78C0\n6B20\n5940\nFE80\n8500\n7900\n4FE0\n7940\n4A80\n7940\n4E20\nENDCHAR\nSTARTCHAR U_9ABE\nENCODING 39614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4880\n6BE0\nFEA0\n87E0\n7AA0\n4BE0\n7A80\n4900\n7A80\n4C60\nENDCHAR\nSTARTCHAR U_9ABF\nENCODING 39615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A20\n4940\n6BE0\nFD40\n8540\n7BE0\n4940\n7940\n4940\n7A40\n4C40\nENDCHAR\nSTARTCHAR U_9AC0\nENCODING 39616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n6AA0\nFFE0\n86A0\n7BE0\n4AA0\n7940\n4FE0\n7840\n4840\nENDCHAR\nSTARTCHAR U_9AC1\nENCODING 39617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4AA0\n6BE0\nFEA0\n87E0\n7880\n4BE0\n7880\n49C0\n7AA0\n4CA0\nENDCHAR\nSTARTCHAR U_9AC2\nENCODING 39618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n6B20\nFDE0\n8640\n7980\n4A60\n7FC0\n4A40\n7BC0\n4A40\nENDCHAR\nSTARTCHAR U_9AC3\nENCODING 39619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n6AA0\n5BE0\nFEA0\n87E0\n7880\n4BE0\n7AA0\n4BE0\n7A20\n4A60\nENDCHAR\nSTARTCHAR U_9AC4\nENCODING 39620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n6BE0\n5900\nFFC0\n8540\n71C0\n5D40\n75C0\n5540\n7600\n59E0\nENDCHAR\nSTARTCHAR U_9AC5\nENCODING 39621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7AA0\n49C0\n6BE0\nFC80\n85C0\n7AA0\n4FE0\n7940\n4940\n7880\n4B60\nENDCHAR\nSTARTCHAR U_9AC6\nENCODING 39622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78A0\n4FE0\n6AA0\nFFE0\n86A0\n7BE0\n4AA0\n7FE0\n4A40\n7940\n4880\nENDCHAR\nSTARTCHAR U_9AC7\nENCODING 39623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4FE0\n6940\nFDC0\n8400\n77E0\n5420\n75A0\n55A0\n7420\n5460\nENDCHAR\nSTARTCHAR U_9AC8\nENCODING 39624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n6BE0\n5A40\nFD80\n87E0\n7CA0\n4FC0\n7900\n49C0\n7A40\n4C80\nENDCHAR\nSTARTCHAR U_9AC9\nENCODING 39625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n6BE0\n5D20\nFA80\n87E0\n7A80\n4BC0\n7A80\n4BC0\n7A80\n4BE0\nENDCHAR\nSTARTCHAR U_9ACA\nENCODING 39626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A20\n4940\n6BE0\nFC80\n85E0\n7880\n4FE0\n7A00\n4FC0\n7880\n4FE0\nENDCHAR\nSTARTCHAR U_9ACB\nENCODING 39627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n6AA0\nFFE0\n8540\n7BE0\n4A20\n7AA0\n4A80\n79A0\n4AE0\nENDCHAR\nSTARTCHAR U_9ACC\nENCODING 39628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4FE0\n6820\nFFC0\n8600\n7BE0\n4A40\n7FE0\n4800\n7A40\n4C20\nENDCHAR\nSTARTCHAR U_9ACD\nENCODING 39629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4FE0\n6A40\nFFE0\n8640\n7A40\n4F60\n7AE0\n4A40\n7A40\n4A40\nENDCHAR\nSTARTCHAR U_9ACE\nENCODING 39630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n6DA0\n5B60\nFDA0\n8580\n7A40\n4D20\n7A80\n4940\n7880\n4B00\nENDCHAR\nSTARTCHAR U_9ACF\nENCODING 39631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n6AA0\nFFE0\n86A0\n7BE0\n4AA0\n7FE0\n4940\n78C0\n4B20\nENDCHAR\nSTARTCHAR U_9AD0\nENCODING 39632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n6880\nFFE0\n8640\n7BE0\n4A40\n7FE0\n4A80\n7AA0\n4C60\nENDCHAR\nSTARTCHAR U_9AD1\nENCODING 39633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4AA0\n6BE0\nFE00\n87E0\n78A0\n4BE0\n7AA0\n4BE0\n78A0\n4FC0\nENDCHAR\nSTARTCHAR U_9AD2\nENCODING 39634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7940\n4FE0\n6940\nFBE0\n86C0\n7D60\n4A60\n7940\n4FE0\n7940\n4A40\nENDCHAR\nSTARTCHAR U_9AD3\nENCODING 39635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n6A40\nFDE0\n80A0\n7EE0\n4AA0\n7AE0\n4AA0\n7AA0\n4DE0\nENDCHAR\nSTARTCHAR U_9AD4\nENCODING 39636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7940\n6BE0\n5AA0\nFFE0\n86A0\n7FE0\n4A40\n7BC0\n4A40\n7980\n4FE0\nENDCHAR\nSTARTCHAR U_9AD5\nENCODING 39637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n4BE0\n6A20\nFFE0\n82A0\n7FC0\n4A40\n7BC0\n4A40\n7BC0\n4E60\nENDCHAR\nSTARTCHAR U_9AD6\nENCODING 39638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4EA0\n6BC0\nFE80\n87E0\n7A40\n4BC0\n7A40\n4BC0\n7AA0\n4CE0\nENDCHAR\nSTARTCHAR U_9AD7\nENCODING 39639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n79C0\n6900\n5FE0\nFD20\n87E0\n7D20\n4EC0\n7D40\n4FE0\n7AA0\n4FE0\nENDCHAR\nSTARTCHAR U_9AD8\nENCODING 39640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0000\n1F00\n1100\n7FC0\n4040\n5F40\n5140\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_9AD9\nENCODING 39641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n1F00\n1100\n7FC0\n4040\n5F40\n5140\n5F40\n40C0\nENDCHAR\nSTARTCHAR U_9ADA\nENCODING 39642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nF900\n57E0\n5000\nFB80\n8A80\nEA80\nAA80\nEAA0\n8AA0\n9C60\nENDCHAR\nSTARTCHAR U_9ADB\nENCODING 39643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFC40\n0440\n77C0\n5500\nFD00\n8FC0\nED40\nA940\nEA40\n9C60\nENDCHAR\nSTARTCHAR U_9ADC\nENCODING 39644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFA20\n53E0\n7220\n03E0\nF940\n8E40\nEA40\nAFE0\nEA40\n9C40\nENDCHAR\nSTARTCHAR U_9ADD\nENCODING 39645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFAE0\n0740\n7340\n54A0\nFFE0\n8920\nEFC0\nA940\nEA40\n9CC0\nENDCHAR\nSTARTCHAR U_9ADE\nENCODING 39646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFA40\n03C0\n77E0\n55A0\nFFE0\n8900\nEFE0\nAB80\nED40\n9920\nENDCHAR\nSTARTCHAR U_9ADF\nENCODING 39647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7E40\n4080\n7D00\n4020\n7C40\n4080\nFF00\n2820\n4840\nF480\n0300\nENDCHAR\nSTARTCHAR U_9AE0\nENCODING 39648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78C0\n5300\n60C0\nFB00\n48C0\nFF00\n1000\n7F00\n1100\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_9AE1\nENCODING 39649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n4980\nFFE0\n0900\n0920\n3120\nC0E0\nENDCHAR\nSTARTCHAR U_9AE2\nENCODING 39650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CC0\n5300\n68C0\nFF00\n48C0\nFF00\n25C0\nFE40\n24C0\n2420\n1FE0\nENDCHAR\nSTARTCHAR U_9AE3\nENCODING 39651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n2980\nFFE0\n0800\n0FC0\n3040\nC380\nENDCHAR\nSTARTCHAR U_9AE4\nENCODING 39652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78C0\n5300\n68C0\nFF00\n48C0\nFF00\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_9AE5\nENCODING 39653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78C0\n5300\n68C0\nFB00\n48C0\n7F80\n2080\n7FC0\n2080\n7FC0\n2080\nENDCHAR\nSTARTCHAR U_9AE6\nENCODING 39654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n2B80\n7C00\n07C0\n7C20\n0420\n03E0\nENDCHAR\nSTARTCHAR U_9AE7\nENCODING 39655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n2980\nFFE0\n8A20\n0A00\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_9AE8\nENCODING 39656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78C0\n5300\n68C0\nFB00\n4CC0\nFB00\n0000\n7FC0\n1100\n2120\n40E0\nENDCHAR\nSTARTCHAR U_9AE9\nENCODING 39657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n78C0\n5300\n68C0\nFB00\n48C0\nFFE0\n0400\n27C0\n2440\n3FC0\n0040\nENDCHAR\nSTARTCHAR U_9AEA\nENCODING 39658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CC0\n5300\n68C0\nFF00\n48C0\nFFE0\n0800\n1F80\n2900\nC600\n39C0\nENDCHAR\nSTARTCHAR U_9AEB\nENCODING 39659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3E60\n2180\n3C60\n2180\n7E60\n1480\n7FC0\n1080\n7FC0\n1040\n1FC0\nENDCHAR\nSTARTCHAR U_9AEC\nENCODING 39660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n2980\n4400\nFFE0\n1500\n2480\nFFE0\nENDCHAR\nSTARTCHAR U_9AED\nENCODING 39661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n4980\nF240\n5E80\n5320\n5E20\nE1E0\nENDCHAR\nSTARTCHAR U_9AEE\nENCODING 39662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n4A80\nFFE0\n1000\n2F80\n4500\nBAE0\nENDCHAR\nSTARTCHAR U_9AEF\nENCODING 39663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4980\n5060\nFD80\n4860\n3F80\n2480\n3F80\n2480\nFFE0\n2080\nENDCHAR\nSTARTCHAR U_9AF0\nENCODING 39664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n5340\n6880\nFB40\n5080\nFB00\n2500\nFFE0\n2500\n2700\n3FC0\nENDCHAR\nSTARTCHAR U_9AF1\nENCODING 39665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CC0\n4300\n78C0\n4300\nFCC0\n2900\n7FC0\nA240\n3EA0\n2020\n1FE0\nENDCHAR\nSTARTCHAR U_9AF2\nENCODING 39666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3C60\n2180\nFC60\n29A0\n4440\n3FE0\n2220\n3FC0\n2480\n2300\n5CE0\nENDCHAR\nSTARTCHAR U_9AF3\nENCODING 39667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n2980\n7FC0\n0500\nFFE0\n1240\nE600\nENDCHAR\nSTARTCHAR U_9AF4\nENCODING 39668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n5340\n6880\nFB40\n4A80\n7FC0\n0A40\n7FE0\n0A20\n1260\n2200\nENDCHAR\nSTARTCHAR U_9AF5\nENCODING 39669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n5180\n6820\nFDC0\n2800\nFFE0\n0400\n7FC0\n4A40\n4A40\n4AC0\nENDCHAR\nSTARTCHAR U_9AF6\nENCODING 39670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n2980\nFFE0\n1100\n1F00\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_9AF7\nENCODING 39671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n2980\n7FC0\n4A40\n7FC0\n4A40\n7FC0\nENDCHAR\nSTARTCHAR U_9AF8\nENCODING 39672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n5180\n6840\nFDA0\n4840\nFD80\n1100\n7FC0\n1100\nFFE0\n2080\nENDCHAR\nSTARTCHAR U_9AF9\nENCODING 39673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n2980\n7900\n6FE0\nA380\n2540\n2920\nENDCHAR\nSTARTCHAR U_9AFA\nENCODING 39674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n4980\nFFE0\n0400\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_9AFB\nENCODING 39675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n4580\nFFE0\n0400\n7FC0\n2080\n3F80\nENDCHAR\nSTARTCHAR U_9AFC\nENCODING 39676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\nFC60\n2980\n4660\n3D00\nE4E0\n3F80\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_9AFD\nENCODING 39677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n4980\nFC80\n5540\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_9AFE\nENCODING 39678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n2980\n7FC0\n4040\n7FC0\n4040\n41C0\nENDCHAR\nSTARTCHAR U_9AFF\nENCODING 39679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n5180\n6840\nFDA0\n4840\nF980\n2540\n8920\n2160\nC180\n4E00\nENDCHAR\nSTARTCHAR U_9B00\nENCODING 39680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n5180\nFC40\n4980\nFFC0\n0440\n7FC0\n4400\n7FE0\n14A0\n6440\nENDCHAR\nSTARTCHAR U_9B01\nENCODING 39681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n2980\n7C40\n1140\nFF40\n5540\n92C0\nENDCHAR\nSTARTCHAR U_9B02\nENCODING 39682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7840\n51A0\n6840\nFDA0\n4840\nFF80\n1000\n1F80\n1100\nFFE0\n2080\nENDCHAR\nSTARTCHAR U_9B03\nENCODING 39683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n2980\n7FE0\n4020\n3FC0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_9B04\nENCODING 39684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFFE0\n4080\nFF80\n1080\n7FC0\n1240\n6CC0\nENDCHAR\nSTARTCHAR U_9B05\nENCODING 39685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFFE0\n4A40\n7BC0\n4A40\n7BC0\n4A40\n9CC0\nENDCHAR\nSTARTCHAR U_9B06\nENCODING 39686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n4980\nFA80\n2440\nF920\n7240\nABC0\nENDCHAR\nSTARTCHAR U_9B07\nENCODING 39687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n51A0\n6840\nFDA0\n4840\nFF80\n1100\n3F80\n44E0\n3F80\n0400\nENDCHAR\nSTARTCHAR U_9B08\nENCODING 39688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n4980\n7FC0\n1000\nFFE0\n52C0\n9FA0\nENDCHAR\nSTARTCHAR U_9B09\nENCODING 39689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n5380\n6840\nFF80\n4840\nFF80\n4A40\n7FC0\n5140\nAE20\n3180\nENDCHAR\nSTARTCHAR U_9B0A\nENCODING 39690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\nFC60\n2980\n4460\nFF80\n1100\nFFE0\n5F40\n9120\n1F00\nENDCHAR\nSTARTCHAR U_9B0B\nENCODING 39691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\nFC60\n29A0\n4440\nFFE0\n4440\n7D40\n4540\n7D40\n4CC0\nENDCHAR\nSTARTCHAR U_9B0C\nENCODING 39692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4980\nF460\n3FC0\n4400\nBFE0\n9040\n1FC0\n10C0\nENDCHAR\nSTARTCHAR U_9B0D\nENCODING 39693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n41A0\nFC40\n4BE0\nFE20\n13E0\n7A20\n4BE0\n7A60\nENDCHAR\nSTARTCHAR U_9B0E\nENCODING 39694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n2980\nFE20\n54A0\n7CA0\n3820\nD6E0\nENDCHAR\nSTARTCHAR U_9B0F\nENCODING 39695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n4980\n72A0\nFAC0\n2080\n7140\nAE20\nENDCHAR\nSTARTCHAR U_9B10\nENCODING 39696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4180\nFC60\n2980\nFFE0\n2420\n7FE0\nA080\n3F80\nENDCHAR\nSTARTCHAR U_9B11\nENCODING 39697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\nC980\n3FC0\n0A80\nFFE0\n0A80\n7F80\n2A80\nCA60\nENDCHAR\nSTARTCHAR U_9B12\nENCODING 39698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\nFC60\n2980\n4460\nFFC0\n2100\n3F00\n2100\nFFE0\n6180\nENDCHAR\nSTARTCHAR U_9B13\nENCODING 39699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n4180\n7860\n4980\nFC60\n4580\nFFE0\nA120\nFFE0\n1100\n60C0\nENDCHAR\nSTARTCHAR U_9B14\nENCODING 39700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n5340\n6880\nFB40\n4480\n2FC0\n7380\n2D60\n27C0\n3100\n4FE0\nENDCHAR\nSTARTCHAR U_9B15\nENCODING 39701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CC0\n4300\nFCE0\n4B00\nFFE0\n0A00\n3F80\n2080\nFFE0\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_9B16\nENCODING 39702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CC0\n4300\nFCE0\n4B00\n7F80\n2940\n7FE0\n1500\n6AE0\n0500\n7E00\nENDCHAR\nSTARTCHAR U_9B17\nENCODING 39703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CC0\n4300\nFCC0\n2B20\n4840\nFFE0\n1100\n7FC0\n5540\n6EC0\n45C0\nENDCHAR\nSTARTCHAR U_9B18\nENCODING 39704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CC0\n4300\nFCE0\n2B00\n7F80\n2080\n7FC0\n5240\n3F80\n0900\n76E0\nENDCHAR\nSTARTCHAR U_9B19\nENCODING 39705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CC0\n4300\nFCE0\n2B00\n7FC0\n5540\n7FC0\n2080\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_9B1A\nENCODING 39706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CC0\n4300\nFCC0\n2B20\n4840\n7FE0\n2440\n57C0\n2440\n17C0\nEC60\nENDCHAR\nSTARTCHAR U_9B1B\nENCODING 39707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C40\n5580\n6840\nFDA0\n4840\nFF80\n2A80\n3F80\n3680\n2DA0\n3760\nENDCHAR\nSTARTCHAR U_9B1C\nENCODING 39708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C60\n5180\nFC60\n4980\nFFE0\nAAA0\nFFE0\n9520\n9B20\n95A0\nA340\nENDCHAR\nSTARTCHAR U_9B1D\nENCODING 39709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7880\n5340\nFCA0\n4B40\nFBE0\nAAA0\nFFE0\n9920\n9520\n9FA0\n8040\nENDCHAR\nSTARTCHAR U_9B1E\nENCODING 39710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CC0\n4300\nFCC0\n4B20\n7FC0\n4A40\n7FE0\n4000\n7FE0\n5140\n98E0\nENDCHAR\nSTARTCHAR U_9B1F\nENCODING 39711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CC0\n4300\nFCC0\n2B20\n7FC0\n4A40\nFFE0\n2080\n3F80\nE280\n39E0\nENDCHAR\nSTARTCHAR U_9B20\nENCODING 39712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CC0\n4300\nFCC0\n2B20\n7CC0\n1B00\nFFE0\n5540\n7FC0\n2080\n3F80\nENDCHAR\nSTARTCHAR U_9B21\nENCODING 39713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7860\n5380\nFC60\n4B80\nFA00\nFFE0\nAAA0\n3F80\n2A80\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_9B22\nENCODING 39714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CC0\n4300\nFCC0\n2B20\n4840\nFFE0\n9520\n7F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_9B23\nENCODING 39715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CC0\n4300\nFCE0\n2B00\n7FC0\n5240\n7FC0\n4480\n7680\n45A0\n7E60\nENDCHAR\nSTARTCHAR U_9B24\nENCODING 39716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7CC0\n4300\nFCE0\n4700\nFFE0\n4A40\nFFE0\n1100\nFFE0\n5140\nB8E0\nENDCHAR\nSTARTCHAR U_9B25\nENCODING 39717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBBA0\n9120\nBBA0\n9120\nBBA0\n8020\n8020\n8020\n8020\n8020\n8060\nENDCHAR\nSTARTCHAR U_9B26\nENCODING 39718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBBA0\n9120\nBBA0\n9120\nBBA0\n8A20\nA620\n9220\nBFA0\n82A0\n8240\nENDCHAR\nSTARTCHAR U_9B27\nENCODING 39719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBBA0\n9120\nBBA0\n9120\nBFA0\n8420\nBFA0\n8420\nBFA0\nA5A0\n8460\nENDCHAR\nSTARTCHAR U_9B28\nENCODING 39720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBBA0\n9120\nBBA0\n9120\nBBA0\n8A20\nBFA0\n8A20\nBFA0\n8A20\n9160\nENDCHAR\nSTARTCHAR U_9B29\nENCODING 39721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBBA0\n9120\nBBA0\n9120\nBBA0\n9120\n9B20\n9120\n9F20\n8AA0\nB3E0\nENDCHAR\nSTARTCHAR U_9B2A\nENCODING 39722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBBA0\n9120\nBBA0\n9120\nBBA0\n80A0\nFFE0\nA8A0\nBAA0\nA8A0\nFDE0\nENDCHAR\nSTARTCHAR U_9B2B\nENCODING 39723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBBA0\n9120\nBBA0\n9120\nBBA0\n8A20\nFFA0\nAAA0\nB920\nAAA0\nFCE0\nENDCHAR\nSTARTCHAR U_9B2C\nENCODING 39724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBBA0\n9120\nBBA0\n9120\nBBA0\nAA20\n93E0\nAAA0\nAAA0\n92A0\nBCE0\nENDCHAR\nSTARTCHAR U_9B2D\nENCODING 39725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBBA0\n9120\nBBA0\n9120\nFFA0\nAA20\nEFE0\nAAA0\nEEA0\nAAA0\nFCE0\nENDCHAR\nSTARTCHAR U_9B2E\nENCODING 39726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nBBA0\n9120\nBBA0\n9220\nBFA0\nAAA0\nBBA0\nBAA0\n8BA0\nB8A0\n8FE0\nENDCHAR\nSTARTCHAR U_9B2F\nENCODING 39727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5540\n6A40\n56C0\n5D40\n6240\n7FC0\n2000\n2380\n3C40\n2040\n1FC0\nENDCHAR\nSTARTCHAR U_9B30\nENCODING 39728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\nF5E0\n6AC0\nA4A0\nFFE0\nA840\n5580\n7C40\n21A0\n2C40\n3380\nENDCHAR\nSTARTCHAR U_9B31\nENCODING 39729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4E40\nF5E0\n6EC0\nD540\nFFE0\nA820\n5640\n6AA0\n7F40\n40A0\n7E40\nENDCHAR\nSTARTCHAR U_9B32\nENCODING 39730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n0000\n3F80\n2080\n3F80\n0000\n7FC0\n4A40\n5F40\n4440\n44C0\nENDCHAR\nSTARTCHAR U_9B33\nENCODING 39731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07C0\n0400\n7FE0\n4240\n7FE0\n4840\n7FE0\n6520\n6FA0\nA220\nA260\nENDCHAR\nSTARTCHAR U_9B34\nENCODING 39732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8A0\n03E0\n7080\n53E0\n72A0\n03E0\nFAA0\nDBE0\nFAA0\nAAA0\nAAE0\nENDCHAR\nSTARTCHAR U_9B35\nENCODING 39733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n5280\n7FE0\n31A0\n5AA0\n7FE0\n2080\n7FC0\n5140\n7FC0\n45C0\nENDCHAR\nSTARTCHAR U_9B36\nENCODING 39734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\n7540\n2540\nF2A0\n54E0\nFFE0\n1080\n7FE0\n4920\n7FA0\n4460\nENDCHAR\nSTARTCHAR U_9B37\nENCODING 39735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF60\n02A0\n7B60\n4A20\n79E0\n0140\nFEA0\nD5E0\nFF40\nA480\nA760\nENDCHAR\nSTARTCHAR U_9B38\nENCODING 39736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n76A0\n55A0\n76A0\n0560\nF800\nDBE0\nFAA0\nABE0\nAAA0\n9BE0\nENDCHAR\nSTARTCHAR U_9B39\nENCODING 39737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFAC0\n2340\nFBE0\n5260\nFFC0\n1100\n7FC0\n4A40\n5F40\n44C0\nENDCHAR\nSTARTCHAR U_9B3A\nENCODING 39738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n07E0\n7A40\n4BC0\n7A40\n03E0\nFEA0\nD520\nFE60\nA4A0\nAD40\nENDCHAR\nSTARTCHAR U_9B3B\nENCODING 39739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nD560\n4E20\nDF60\n6E20\nD560\nFFE0\n2080\n7FC0\n4A40\n7FC0\n4440\nENDCHAR\nSTARTCHAR U_9B3C\nENCODING 39740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7F80\n4880\n7F80\n4880\n7F80\n1480\n1540\n25C0\n4420\n83E0\nENDCHAR\nSTARTCHAR U_9B3D\nENCODING 39741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7C40\n5480\n7F20\n5440\n7D80\n2420\n2A40\n5F80\n5020\n8FE0\nENDCHAR\nSTARTCHAR U_9B3E\nENCODING 39742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\nABE0\nF880\nABE0\nA940\nF940\n2880\n3D60\n5220\n9FE0\nENDCHAR\nSTARTCHAR U_9B3F\nENCODING 39743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\nF9C0\nA900\nF9E0\nA940\nF940\n2940\n3540\n2D60\n5220\n9FE0\nENDCHAR\nSTARTCHAR U_9B40\nENCODING 39744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\nA980\nFA40\nAC20\nF940\n2540\n2B40\n5D40\n5260\n8FE0\nENDCHAR\nSTARTCHAR U_9B41\nENCODING 39745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2040\nFA40\nA940\nFA40\nA940\nF860\n2BC0\n3440\n2C60\n5020\n9FE0\nENDCHAR\nSTARTCHAR U_9B42\nENCODING 39746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n77C0\n0540\n07C0\nFD40\n27C0\n5200\n7B40\nC5E0\n0520\n09E0\nENDCHAR\nSTARTCHAR U_9B43\nENCODING 39747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\nF920\nABE0\nF900\nA9E0\nF920\n2AA0\n3440\n3CA0\n5120\n9FE0\nENDCHAR\nSTARTCHAR U_9B44\nENCODING 39748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n47C0\nF540\n97C0\n9540\nF7C0\n9200\n9340\nF5E0\n0520\n09E0\nENDCHAR\nSTARTCHAR U_9B45\nENCODING 39749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF880\nABE0\nF880\nABE0\nF880\n29C0\n36A0\n2C80\n50A0\n9FE0\nENDCHAR\nSTARTCHAR U_9B46\nENCODING 39750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nF8A0\nABE0\nFAA0\nAAA0\nFA40\n2A40\n36A0\n2F20\n5020\n9FE0\nENDCHAR\nSTARTCHAR U_9B47\nENCODING 39751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8500\nFFE0\n9480\nFFE0\n9480\n9F80\n9480\n9FA0\n8AA0\nF3E0\nENDCHAR\nSTARTCHAR U_9B48\nENCODING 39752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\nF9C0\nA880\nFBE0\nAA20\nFBE0\n2A20\n37E0\n2A20\n5060\n9FE0\nENDCHAR\nSTARTCHAR U_9B49\nENCODING 39753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF940\nAFE0\nFD60\nAD60\nFEA0\n2D60\n3620\n2840\n5020\n9FE0\nENDCHAR\nSTARTCHAR U_9B4A\nENCODING 39754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\nF8A0\nAFE0\nF880\nAEA0\nFAA0\n3640\n28A0\n3B20\n6020\nBFE0\nENDCHAR\nSTARTCHAR U_9B4B\nENCODING 39755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2300\nFA80\nABE0\nFE80\nABC0\nFA80\n2BC0\n3680\n2FE0\n5020\n9FE0\nENDCHAR\nSTARTCHAR U_9B4C\nENCODING 39756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFFE0\nAA40\nFBC0\nAA40\nFBC0\n2A40\n37E0\n2940\n5220\n9FE0\nENDCHAR\nSTARTCHAR U_9B4D\nENCODING 39757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nFEA0\nAD20\nFFE0\nAD20\nFFE0\n2D20\n35A0\n2C60\n5420\n9FE0\nENDCHAR\nSTARTCHAR U_9B4E\nENCODING 39758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nF880\nAFE0\nFCA0\nAEE0\nFDA0\n2EE0\n34A0\n2CA0\n5020\n9FE0\nENDCHAR\nSTARTCHAR U_9B4F\nENCODING 39759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n27C0\nFD40\n67C0\nB540\n27C0\nF900\n4940\n53C0\n2520\n49E0\nENDCHAR\nSTARTCHAR U_9B50\nENCODING 39760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nFFE0\nAA80\nFFE0\nAAA0\nFFE0\n2AA0\n37E0\n7EC0\n6AA0\n9FE0\nENDCHAR\nSTARTCHAR U_9B51\nENCODING 39761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\nAAA0\nFB60\nABE0\nF880\n2FE0\n3560\n2FE0\n5420\n9FE0\nENDCHAR\nSTARTCHAR U_9B52\nENCODING 39762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nFA80\nAFE0\nFAA0\nAFE0\nF800\n2FE0\n35C0\n2AA0\n50A0\n9FE0\nENDCHAR\nSTARTCHAR U_9B53\nENCODING 39763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nFAA0\nABE0\nFAA0\nAFE0\nFAA0\n27E0\n2A80\n5FE0\n5080\n8FE0\nENDCHAR\nSTARTCHAR U_9B54\nENCODING 39764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n7FE0\n5DC0\n6AA0\n5FC0\n5240\n5FC0\n8AA0\nB3E0\nENDCHAR\nSTARTCHAR U_9B55\nENCODING 39765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\nFBA0\nAD40\nFBA0\nAD40\nFFE0\n2D20\n34C0\n2EC0\n5520\n9FE0\nENDCHAR\nSTARTCHAR U_9B56\nENCODING 39766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\nF100\nD7E0\nB520\nD7C0\nF540\n5760\n6D40\n57E0\nA820\n9FE0\nENDCHAR\nSTARTCHAR U_9B57\nENCODING 39767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFFC0\n2540\nFFC0\n2540\nFFC0\n0940\nFDA0\nAAE0\nEA80\n1C60\nENDCHAR\nSTARTCHAR U_9B58\nENCODING 39768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA4C0\nBCA0\nA7E0\nBD40\nA620\n9FC0\n9240\n9FC0\n8AA0\nF3E0\nENDCHAR\nSTARTCHAR U_9B59\nENCODING 39769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\nBF00\n55E0\n3F40\nC540\n7F80\n2A80\n2480\n3F80\n1540\nE7E0\nENDCHAR\nSTARTCHAR U_9B5A\nENCODING 39770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1F00\n2200\n7FC0\nA440\n3FC0\n2440\n3FC0\n5240\n4920\n8920\nENDCHAR\nSTARTCHAR U_9B5B\nENCODING 39771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7BE0\n9120\nF920\nA920\nF920\nA920\nF920\n0220\nAAA0\nAC40\nENDCHAR\nSTARTCHAR U_9B5C\nENCODING 39772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n9100\nF900\nA900\nFA80\nAA80\nFA80\n0240\nAA60\nAC40\nENDCHAR\nSTARTCHAR U_9B5D\nENCODING 39773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2020\n3C20\n48A0\nFCA0\n54A0\n7CA0\n54A0\n7CA0\n0020\nAAA0\nAA40\nENDCHAR\nSTARTCHAR U_9B5E\nENCODING 39774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7B00\n9080\nF880\nA880\nF880\nA880\nF940\n0140\nAA20\nAC20\nENDCHAR\nSTARTCHAR U_9B5F\nENCODING 39775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BE0\n9080\nF880\nA880\nF880\nA880\nF880\n0080\nA880\nAFE0\nENDCHAR\nSTARTCHAR U_9B60\nENCODING 39776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n7F00\n9100\nF900\nA9E0\nFF00\nA900\nF900\n0100\nA920\nA8E0\nENDCHAR\nSTARTCHAR U_9B61\nENCODING 39777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7A00\n93E0\nFC20\nA820\nFA20\nA920\nF920\n0020\nA8A0\nA840\nENDCHAR\nSTARTCHAR U_9B62\nENCODING 39778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BC0\n9040\nF840\nA840\nFBC0\nAA00\nFA00\n0220\nAA20\nA9E0\nENDCHAR\nSTARTCHAR U_9B63\nENCODING 39779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FC0\n9280\nF900\nAFE0\nF920\nA940\nF900\n0100\nA900\nAB00\nENDCHAR\nSTARTCHAR U_9B64\nENCODING 39780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7A80\n92A0\nFAA0\nAEC0\nFA80\nAB80\nFA80\n02A0\nAAA0\nAA60\nENDCHAR\nSTARTCHAR U_9B65\nENCODING 39781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FC0\n9240\nFA80\nAB00\nFAC0\nAA40\nFB40\n0280\nA540\nAA20\nENDCHAR\nSTARTCHAR U_9B66\nENCODING 39782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n90C0\nFAA0\nAAA0\nFC80\nA8A0\nF840\n0080\nA900\nAE00\nENDCHAR\nSTARTCHAR U_9B67\nENCODING 39783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7880\n97E0\nF800\nAB80\nFA80\nAA80\nFA80\n02A0\nAAA0\nAC60\nENDCHAR\nSTARTCHAR U_9B68\nENCODING 39784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n93E0\nF880\nAAA0\nFAA0\nABE0\nF880\n00A0\nA8A0\nA860\nENDCHAR\nSTARTCHAR U_9B69\nENCODING 39785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7A00\n93E0\nFD20\nA960\nFAA0\nA8A0\nF920\n0120\nAAA0\nA840\nENDCHAR\nSTARTCHAR U_9B6A\nENCODING 39786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n9280\nFC40\nAAA0\nFA80\nAA80\nFA80\n0280\nAA80\nAC80\nENDCHAR\nSTARTCHAR U_9B6B\nENCODING 39787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n97E0\nFD20\nA940\nF980\nA980\nFA80\n02A0\nAAA0\nAC60\nENDCHAR\nSTARTCHAR U_9B6C\nENCODING 39788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n7B80\n9200\nFA00\nABE0\nFA20\nAB20\nFAC0\n0280\nAD40\nAA20\nENDCHAR\nSTARTCHAR U_9B6D\nENCODING 39789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BC0\n9000\nF800\nAFE0\nFA80\nAA80\nFA80\n0280\nAAA0\nAC60\nENDCHAR\nSTARTCHAR U_9B6E\nENCODING 39790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7A80\n9280\nFA80\nABA0\nFAC0\nAA80\nFA80\n02A0\nABA0\nAA60\nENDCHAR\nSTARTCHAR U_9B6F\nENCODING 39791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n2200\n7FC0\nC440\n7FC0\n4440\n7FC0\nA0A0\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_9B70\nENCODING 39792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7880\n97E0\nFA40\nAA40\nFA40\nA980\nF900\n0180\nAA40\nAC20\nENDCHAR\nSTARTCHAR U_9B71\nENCODING 39793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7900\n9100\nFBC0\nAA40\nFA40\nAA40\nFBC0\n0040\nA840\nAFE0\nENDCHAR\nSTARTCHAR U_9B72\nENCODING 39794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7880\n93E0\nFA20\nAA20\nFBE0\nAA00\nFA00\n0200\nAA00\nAC00\nENDCHAR\nSTARTCHAR U_9B73\nENCODING 39795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BE0\n9080\nFBE0\nAAA0\nFAA0\nAAA0\nFAA0\n02E0\nA880\nA880\nENDCHAR\nSTARTCHAR U_9B74\nENCODING 39796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7880\n97E0\nF900\nA9E0\nF920\nA920\nF920\n0220\nAAA0\nAC40\nENDCHAR\nSTARTCHAR U_9B75\nENCODING 39797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7A80\n9240\nFC40\nA820\nFFC0\nA940\nF940\n0140\nAA40\nAC80\nENDCHAR\nSTARTCHAR U_9B76\nENCODING 39798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n93E0\nFAA0\nAAA0\nFAA0\nAB60\nFA20\n0220\nAA20\nAA60\nENDCHAR\nSTARTCHAR U_9B77\nENCODING 39799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7940\n9120\nFFE0\nA900\nF980\nA980\nFA80\n02A0\nAAA0\nAC60\nENDCHAR\nSTARTCHAR U_9B78\nENCODING 39800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n7A40\n9240\nFBE0\nAA00\nFA00\nABC0\nFA40\n0240\nAA40\nAC40\nENDCHAR\nSTARTCHAR U_9B79\nENCODING 39801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n78C0\n9700\nF900\nA9E0\nFF00\nA9E0\nFF00\n0120\nA920\nA8E0\nENDCHAR\nSTARTCHAR U_9B7A\nENCODING 39802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n77E0\n9020\nFBA0\nAAA0\nFAA0\nABA0\nF820\n0020\nA820\nA8E0\nENDCHAR\nSTARTCHAR U_9B7B\nENCODING 39803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7AA0\n92A0\nFBE0\nAAA0\nFAA0\nABE0\nF880\n0080\nA880\nA880\nENDCHAR\nSTARTCHAR U_9B7C\nENCODING 39804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n93E0\nF880\nA880\nFFE0\nA880\nF900\n0140\nAA20\nAFE0\nENDCHAR\nSTARTCHAR U_9B7D\nENCODING 39805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n7A40\n9240\nFFE0\nAA40\nFA40\nABC0\nFA40\n0240\nABC0\nAA40\nENDCHAR\nSTARTCHAR U_9B7E\nENCODING 39806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7880\n9080\nF980\nAAC0\nFCA0\nA8A0\nF880\n0080\nA800\nAFE0\nENDCHAR\nSTARTCHAR U_9B7F\nENCODING 39807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n9280\nFC40\nAA20\nF900\nAFE0\nF840\n0280\nA900\nA880\nENDCHAR\nSTARTCHAR U_9B80\nENCODING 39808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7880\n97E0\nFC20\nAA00\nFA40\nAA80\nFB00\n0220\nAA20\nA9E0\nENDCHAR\nSTARTCHAR U_9B81\nENCODING 39809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7A40\n9200\nFFE0\nAA00\nFBC0\nAA40\nFD40\n0480\nA940\nAA20\nENDCHAR\nSTARTCHAR U_9B82\nENCODING 39810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BE0\n9220\nFAA0\nAAA0\nFAA0\nAAA0\nFB60\n0220\nABE0\nAA20\nENDCHAR\nSTARTCHAR U_9B83\nENCODING 39811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n77E0\n9100\nFD40\nAB80\nF900\nAFE0\nF900\n0100\nAD00\nA900\nENDCHAR\nSTARTCHAR U_9B84\nENCODING 39812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7A80\n97E0\nFAA0\nAFE0\nFA80\nAFE0\nFAA0\n02E0\nAC80\nA880\nENDCHAR\nSTARTCHAR U_9B85\nENCODING 39813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4120\n78C0\n9240\nFA40\nAE80\nFAA0\nAB20\nFA00\n0620\nAA20\nA9E0\nENDCHAR\nSTARTCHAR U_9B86\nENCODING 39814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1240\n5F80\n5220\nFFE0\n1200\n3F80\nE480\n3F80\n2480\n7FC0\n8920\nENDCHAR\nSTARTCHAR U_9B87\nENCODING 39815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n93E0\nF880\nA880\nFFE0\nA880\nF9C0\n02A0\nACA0\nA880\nENDCHAR\nSTARTCHAR U_9B88\nENCODING 39816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7A00\n93E0\nFC20\nABA0\nFAA0\nAAA0\nFBA0\n0020\nA8A0\nA840\nENDCHAR\nSTARTCHAR U_9B89\nENCODING 39817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BE0\n9120\nF920\nAAA0\nFC40\nABE0\nFA20\n0220\nABE0\nAA20\nENDCHAR\nSTARTCHAR U_9B8A\nENCODING 39818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7900\n93E0\nFA20\nAA20\nFBE0\nAA20\nFA20\n0220\nABE0\nAA20\nENDCHAR\nSTARTCHAR U_9B8B\nENCODING 39819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n9080\nFBE0\nAAA0\nFAA0\nABE0\nFAA0\n02A0\nABE0\nAA20\nENDCHAR\nSTARTCHAR U_9B8C\nENCODING 39820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7900\n97E0\nF900\nAA40\nFFC0\nA880\nF900\n0240\nAFE0\nAA20\nENDCHAR\nSTARTCHAR U_9B8D\nENCODING 39821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n93E0\nFAA0\nAAC0\nFA80\nABE0\nFA20\n0540\nA480\nAB60\nENDCHAR\nSTARTCHAR U_9B8E\nENCODING 39822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n9100\nF9E0\nA900\nF900\nABC0\nFA40\n0240\nAA40\nABC0\nENDCHAR\nSTARTCHAR U_9B8F\nENCODING 39823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n9280\nFBE0\nAC80\nF880\nABE0\nF880\n0080\nA880\nAFE0\nENDCHAR\nSTARTCHAR U_9B90\nENCODING 39824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n9200\nFA40\nAFE0\nF800\nABC0\nFA40\n0240\nAA40\nABC0\nENDCHAR\nSTARTCHAR U_9B91\nENCODING 39825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7A00\n93E0\nFC20\nABA0\nFAA0\nABA0\nFA40\n0220\nAA20\nA9E0\nENDCHAR\nSTARTCHAR U_9B92\nENCODING 39826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n7940\n9240\nFFE0\nAA40\nFB40\nAAC0\nFA40\n0240\nAA40\nAAC0\nENDCHAR\nSTARTCHAR U_9B93\nENCODING 39827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7A00\n93E0\nFD00\nA9C0\nF900\nA900\nF9C0\n0100\nA900\nA900\nENDCHAR\nSTARTCHAR U_9B94\nENCODING 39828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BE0\n9200\nFA00\nABC0\nFA40\nAA40\nFBC0\n0200\nAA00\nABE0\nENDCHAR\nSTARTCHAR U_9B95\nENCODING 39829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n97E0\nF880\nA880\nFBE0\nAA20\nFA20\n0220\nABE0\nAA20\nENDCHAR\nSTARTCHAR U_9B96\nENCODING 39830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n77E0\n9100\nF900\nAA00\nFBC0\nAE40\nFA40\n0240\nABC0\nAA40\nENDCHAR\nSTARTCHAR U_9B97\nENCODING 39831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BC0\n9440\nFA80\nA900\nFA80\nAC60\nF900\n0080\nA900\nA880\nENDCHAR\nSTARTCHAR U_9B98\nENCODING 39832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7AC0\n92A0\nFA80\nABE0\nFE80\nAA80\nFA80\n02A0\nAA60\nAA20\nENDCHAR\nSTARTCHAR U_9B99\nENCODING 39833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7F60\n9120\nFDA0\nAB60\nF920\nAB60\nFDA0\n0120\nAD20\nAB60\nENDCHAR\nSTARTCHAR U_9B9A\nENCODING 39834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n97E0\nF880\nABE0\nF800\nABE0\nFA20\n0220\nABE0\nAA20\nENDCHAR\nSTARTCHAR U_9B9B\nENCODING 39835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n90E0\nF880\nAFE0\nF880\nAAC0\nFAA0\n04A0\nA880\nA980\nENDCHAR\nSTARTCHAR U_9B9C\nENCODING 39836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n7B80\n9200\nFBE0\nAA00\nFA00\nABE0\nFD20\n0520\nA5E0\nA920\nENDCHAR\nSTARTCHAR U_9B9D\nENCODING 39837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1480\n7FC0\n0400\nFFE0\n2080\nDF60\n2200\n7F80\n2480\n7FC0\n8920\nENDCHAR\nSTARTCHAR U_9B9E\nENCODING 39838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7880\n9100\nFFE0\nAAA0\nFAA0\nAAA0\nFAA0\n0AA0\nDA20\nA860\nENDCHAR\nSTARTCHAR U_9B9F\nENCODING 39839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7900\n97E0\nFC20\nA900\nFFE0\nAA40\nFE80\n0100\nAA80\nAC60\nENDCHAR\nSTARTCHAR U_9BA0\nENCODING 39840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\n9240\nFBE0\nAA00\nFAE0\nAAA0\nFAE0\n0280\nACA0\nA8E0\nENDCHAR\nSTARTCHAR U_9BA1\nENCODING 39841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7AA0\n96A0\nFAC0\nAA80\nFEC0\nAAA0\nFA80\n02A0\nACA0\nA860\nENDCHAR\nSTARTCHAR U_9BA2\nENCODING 39842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7A80\n93E0\nFC80\nA880\nFFE0\nA880\nF9C0\n02A0\nACA0\nA880\nENDCHAR\nSTARTCHAR U_9BA3\nENCODING 39843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7AE0\n92A0\nFAA0\nABA0\nFAA0\nAAA0\nFBA0\n06E0\nA880\nA880\nENDCHAR\nSTARTCHAR U_9BA4\nENCODING 39844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F20\n10A0\n1EA0\n64A0\n1820\nEF60\n1200\n7FC0\n2440\n3FC0\nD220\nENDCHAR\nSTARTCHAR U_9BA5\nENCODING 39845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\n9240\nFD40\nA980\nFA40\nAFE0\nFA40\n0240\nABC0\nAA40\nENDCHAR\nSTARTCHAR U_9BA6\nENCODING 39846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n7820\nABA0\nF820\nABA0\nFAA0\nAAA0\nFBA0\n0820\nD820\nA860\nENDCHAR\nSTARTCHAR U_9BA7\nENCODING 39847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7BE0\n9080\nFBE0\nA8A0\nFBE0\nAA80\nFBE0\n00A0\nA940\nAA20\nENDCHAR\nSTARTCHAR U_9BA8\nENCODING 39848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7A60\n9380\nFA20\nA9E0\nF800\nABE0\nFA20\n03E0\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_9BA9\nENCODING 39849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4420\n7A40\n97E0\nFA40\nAA40\nFFE0\nAA40\nFA40\n0240\nA440\nA840\nENDCHAR\nSTARTCHAR U_9BAA\nENCODING 39850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n97E0\nFA00\nABC0\nFE40\nABC0\nFA40\n03C0\nAA40\nAAC0\nENDCHAR\nSTARTCHAR U_9BAB\nENCODING 39851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7880\n97E0\nFA40\nAC20\nFA40\nAA40\nF980\n0180\nAA40\nAC20\nENDCHAR\nSTARTCHAR U_9BAC\nENCODING 39852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n77E0\n9240\nFDA0\nA800\nFFE0\nA900\nFBC0\n0040\nA940\nA880\nENDCHAR\nSTARTCHAR U_9BAD\nENCODING 39853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n93E0\nF880\nABE0\nF880\nA880\nFBE0\n0080\nA880\nAFE0\nENDCHAR\nSTARTCHAR U_9BAE\nENCODING 39854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7940\n93E0\nF880\nABE0\nF880\nA880\nFBE0\n0080\nA880\nA880\nENDCHAR\nSTARTCHAR U_9BAF\nENCODING 39855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7980\n9240\nFC20\nABC0\nF800\nABC0\nFA40\n0240\nABC0\nAA40\nENDCHAR\nSTARTCHAR U_9BB0\nENCODING 39856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BE0\n9220\nFA20\nABA0\nFAA0\nAAA0\nFBA0\n0220\nABE0\nAA20\nENDCHAR\nSTARTCHAR U_9BB1\nENCODING 39857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n77C0\n9120\nF940\nAFE0\nF900\nAA40\nFF80\n0220\nAA20\nA9E0\nENDCHAR\nSTARTCHAR U_9BB2\nENCODING 39858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7AC0\n92A0\nFA80\nABE0\nFE80\nAA80\nFA80\n0340\nAB40\nAA20\nENDCHAR\nSTARTCHAR U_9BB3\nENCODING 39859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BC0\n9140\nFFE0\nA900\nFBC0\nAE00\nFBC0\n0040\nA940\nA880\nENDCHAR\nSTARTCHAR U_9BB4\nENCODING 39860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7A80\n9280\nFBE0\nAA80\nFEC0\nAAA0\nFBA0\n0280\nAA80\nAA80\nENDCHAR\nSTARTCHAR U_9BB5\nENCODING 39861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7940\n93E0\nFA20\nAA20\nFBE0\nA940\nF940\n0140\nAA40\nAC60\nENDCHAR\nSTARTCHAR U_9BB6\nENCODING 39862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7940\n97E0\nF940\nABC0\nF900\nABE0\nFE20\n0220\nABE0\nAA20\nENDCHAR\nSTARTCHAR U_9BB7\nENCODING 39863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n77C0\n9140\nFFC0\nAD00\nFFE0\nA920\nFB20\n05A0\nA940\nA900\nENDCHAR\nSTARTCHAR U_9BB8\nENCODING 39864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n39E0\n5240\nFC80\nABE0\nFAA0\nABE0\nF980\n0180\nAAA0\nA4E0\nENDCHAR\nSTARTCHAR U_9BB9\nENCODING 39865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7AA0\n91C0\nFBE0\nAA20\nFBE0\nAA20\nFBE0\n0220\nAA20\nAA60\nENDCHAR\nSTARTCHAR U_9BBA\nENCODING 39866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n3F80\n0400\nFFE0\n1800\n2F00\nD200\n3FC0\n5240\n1FC0\n6520\nENDCHAR\nSTARTCHAR U_9BBB\nENCODING 39867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7A40\n97E0\nFA40\nAD20\nFBE0\nAA40\nFD40\n0080\nA940\nAE20\nENDCHAR\nSTARTCHAR U_9BBC\nENCODING 39868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7840\n93C0\nF840\nAFE0\nFC20\nABC0\nF940\n0140\nA880\nAB60\nENDCHAR\nSTARTCHAR U_9BBD\nENCODING 39869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7940\n9220\nFFE0\nA880\nFBE0\nA880\nF9C0\n02A0\nACA0\nA980\nENDCHAR\nSTARTCHAR U_9BBE\nENCODING 39870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n7E00\n94A0\nFAA0\nA940\nFFE0\nAA40\nFA80\n0100\nAA80\nAC60\nENDCHAR\nSTARTCHAR U_9BBF\nENCODING 39871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n7540\n9540\nFF40\nAD40\nFF40\nAD40\nFD40\n07C0\nA940\nA960\nENDCHAR\nSTARTCHAR U_9BC0\nENCODING 39872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n7F80\n9100\nFA40\nAB80\nF920\nAFE0\nF880\n02C0\nACA0\nA9A0\nENDCHAR\nSTARTCHAR U_9BC1\nENCODING 39873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7880\n93E0\nFAA0\nABE0\nFAA0\nABE0\nFA80\n0180\nA980\nAE60\nENDCHAR\nSTARTCHAR U_9BC2\nENCODING 39874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7880\n9080\nFBE0\nAAA0\nFB60\nAA20\nFBE0\n0220\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_9BC3\nENCODING 39875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7900\n97C0\nFA40\nAA40\nFFE0\nA800\nFBC0\n0240\nAA40\nABC0\nENDCHAR\nSTARTCHAR U_9BC4\nENCODING 39876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n7920\n97E0\nF900\nAD20\nFB40\nA980\nFB40\n0520\nA920\nAB00\nENDCHAR\nSTARTCHAR U_9BC5\nENCODING 39877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4660\n7BC0\n9240\nFA40\nAC60\nFB40\nAB40\nFB40\n05E0\nA400\nABE0\nENDCHAR\nSTARTCHAR U_9BC6\nENCODING 39878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n70A0\n97E0\nF880\nABE0\nFAA0\nABE0\nFAA0\n03E0\nAAA0\nAA60\nENDCHAR\nSTARTCHAR U_9BC7\nENCODING 39879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n9420\nFBC0\nA800\nFFE0\nAA80\nFA80\n02A0\nACA0\nA860\nENDCHAR\nSTARTCHAR U_9BC8\nENCODING 39880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23E0\n4640\n5980\nD660\n53C0\n5480\n5FE0\n5520\n47E0\n4AA0\nENDCHAR\nSTARTCHAR U_9BC9\nENCODING 39881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7AA0\n92A0\nFBE0\nAAA0\nFBE0\nA880\nFBE0\n0080\nA880\nAFE0\nENDCHAR\nSTARTCHAR U_9BCA\nENCODING 39882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\nA920\n4180\nDE00\n5100\n3FC0\n6440\n3FC0\n2440\n3FC0\nC920\nENDCHAR\nSTARTCHAR U_9BCB\nENCODING 39883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n7480\n90C0\nF9A0\nADA0\nFA80\nAAA0\nFC40\n0480\nA900\nAA00\nENDCHAR\nSTARTCHAR U_9BCC\nENCODING 39884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7A80\n93E0\nFC80\nA880\nFFE0\nA800\nFBE0\n0220\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_9BCD\nENCODING 39885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7900\n97E0\nF900\nAA40\nFFE0\nA800\nFD40\n0540\nA540\nA960\nENDCHAR\nSTARTCHAR U_9BCE\nENCODING 39886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n78C0\n90A0\nFFE0\nA880\nFEA0\nAAA0\nFAC0\n0EA0\nA960\nB220\nENDCHAR\nSTARTCHAR U_9BCF\nENCODING 39887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4320\n7620\n92A0\nFFA0\nAAA0\nFBA0\nAEA0\nFAA0\n0220\nAAA0\nAA40\nENDCHAR\nSTARTCHAR U_9BD0\nENCODING 39888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n93C0\nF900\nA900\nFFE0\nA900\nF9C0\n0500\nA700\nA8E0\nENDCHAR\nSTARTCHAR U_9BD1\nENCODING 39889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n7880\n9360\nF880\nAFE0\nF900\nABE0\nFEA0\n02A0\nAAE0\nA880\nENDCHAR\nSTARTCHAR U_9BD2\nENCODING 39890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7940\n9080\nFBE0\nAAA0\nFBE0\nAAA0\nFBE0\n02A0\nAAA0\nAAE0\nENDCHAR\nSTARTCHAR U_9BD3\nENCODING 39891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BC0\n9240\nFBC0\nAA40\nFBC0\nAA60\nFFC0\n0140\nAA40\nACC0\nENDCHAR\nSTARTCHAR U_9BD4\nENCODING 39892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n7AA0\n9540\nFAA0\nAAA0\nF800\nABE0\nFAA0\n03E0\nAAA0\nABE0\nENDCHAR\nSTARTCHAR U_9BD5\nENCODING 39893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n7A40\n97E0\nFA40\nABC0\nFA40\nABC0\nFA40\n07E0\nAA40\nAC20\nENDCHAR\nSTARTCHAR U_9BD6\nENCODING 39894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BC0\n9100\nFBC0\nA900\nFFE0\nAA40\nFBC0\n0240\nABC0\nAA40\nENDCHAR\nSTARTCHAR U_9BD7\nENCODING 39895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n0400\nFFE0\n2880\n4F40\n9220\n7FC0\n2440\n3FC0\nC920\nENDCHAR\nSTARTCHAR U_9BD8\nENCODING 39896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n7B00\n9100\nFFE0\nAB80\nFD40\nA920\nFFE0\n0240\nA980\nAE60\nENDCHAR\nSTARTCHAR U_9BD9\nENCODING 39897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7FE0\n9240\nFBC0\nA800\nFBE0\nA840\nF880\n07E0\nA880\nA980\nENDCHAR\nSTARTCHAR U_9BDA\nENCODING 39898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7880\n97E0\nF9C0\nAAA0\nFC80\nABE0\nF880\n07E0\nA880\nA980\nENDCHAR\nSTARTCHAR U_9BDB\nENCODING 39899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n7920\nABA0\nF920\nAFE0\nF820\nABA0\nFAA0\n0BA0\nA820\nB060\nENDCHAR\nSTARTCHAR U_9BDC\nENCODING 39900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7FE0\n9220\nF940\nAFE0\nF880\nAFE0\nF940\n0240\nA980\nAE60\nENDCHAR\nSTARTCHAR U_9BDD\nENCODING 39901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FE0\n94A0\nFFE0\nACA0\nFDE0\nAD60\nFDE0\n0420\nAFE0\nAC20\nENDCHAR\nSTARTCHAR U_9BDE\nENCODING 39902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7840\n93C0\nF840\nAFE0\nFCA0\nABE0\nFAA0\n02A0\nAAE0\nA880\nENDCHAR\nSTARTCHAR U_9BDF\nENCODING 39903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7BE0\n9080\nFBE0\nAAA0\nFBE0\nAAA0\nFBE0\n01C0\nAAA0\nACA0\nENDCHAR\nSTARTCHAR U_9BE0\nENCODING 39904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n97E0\nFAA0\nAAC0\nFDA0\nA8A0\nF980\n02C0\nACA0\nA8A0\nENDCHAR\nSTARTCHAR U_9BE1\nENCODING 39905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7A80\n96E0\nFA80\nAA80\nFEE0\nAA80\nFA80\n06E0\nAA80\nAA80\nENDCHAR\nSTARTCHAR U_9BE2\nENCODING 39906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7EE0\n9420\nFC20\nAEE0\nFC20\nAFE0\nFA80\n02A0\nACA0\nA860\nENDCHAR\nSTARTCHAR U_9BE3\nENCODING 39907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n7C40\n97C0\nFC40\nAFC0\nFA00\nAFE0\nFAA0\n0520\nAAA0\nAC40\nENDCHAR\nSTARTCHAR U_9BE4\nENCODING 39908\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7A20\n93E0\nFA20\nABE0\nF800\nAAA0\nFBC0\n02A0\nABA0\nAAE0\nENDCHAR\nSTARTCHAR U_9BE5\nENCODING 39909\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7BE0\n9080\nFFE0\nA940\nFA20\nAC80\nFBE0\n0080\nA880\nAFE0\nENDCHAR\nSTARTCHAR U_9BE6\nENCODING 39910\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7740\n9560\nFD40\nAA40\nFDE0\nA800\nFFC0\n0440\nAC40\nAFC0\nENDCHAR\nSTARTCHAR U_9BE7\nENCODING 39911\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7A40\n93C0\nFA40\nABC0\nF800\nAFE0\nFC20\n07E0\nAC20\nA7E0\nENDCHAR\nSTARTCHAR U_9BE8\nENCODING 39912\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7FE0\n9000\nFBE0\nAA20\nFBE0\nA880\nFAC0\n02A0\nACA0\nA980\nENDCHAR\nSTARTCHAR U_9BE9\nENCODING 39913\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n9140\nFA20\nADC0\nF800\nABE0\nFAA0\n03E0\nAAA0\nAAA0\nENDCHAR\nSTARTCHAR U_9BEA\nENCODING 39914\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FC0\n9100\nFFE0\nAA40\nFD20\nA9C0\nFB40\n0480\nA940\nAE20\nENDCHAR\nSTARTCHAR U_9BEB\nENCODING 39915\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F00\n6A00\nABE0\nFEA0\nAAA0\nFAA0\nAEA0\nFB40\n0E40\nAAA0\nAB20\nENDCHAR\nSTARTCHAR U_9BEC\nENCODING 39916\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n21E0\nFEA0\n6920\nA440\n1F80\n2100\nFFC0\n2440\n7FC0\n8920\nENDCHAR\nSTARTCHAR U_9BED\nENCODING 39917\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7840\n9080\nFFE0\nA880\nFA80\nA900\nFBE0\n02A0\nAAA0\nAFE0\nENDCHAR\nSTARTCHAR U_9BEE\nENCODING 39918\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n77E0\n9420\nFBC0\nA800\nFFE0\nA880\nFAC0\n02A0\nACA0\nA980\nENDCHAR\nSTARTCHAR U_9BEF\nENCODING 39919\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7220\n97A0\nFA20\nAFA0\nFA20\nAFA0\nFAA0\n0AA0\nABA0\nAA60\nENDCHAR\nSTARTCHAR U_9BF0\nENCODING 39920\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7980\n9340\nFCA0\nAFE0\nF840\nA980\nFA80\n0620\nAA60\nA9C0\nENDCHAR\nSTARTCHAR U_9BF1\nENCODING 39921\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n7900\n97E0\nFD20\nAFC0\nFD20\nACE0\nFC00\n05C0\nA940\nAA60\nENDCHAR\nSTARTCHAR U_9BF2\nENCODING 39922\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7A40\n90A0\nFF00\nAA40\nFA20\nAB80\nFA80\n02C0\nAAA0\nAD20\nENDCHAR\nSTARTCHAR U_9BF3\nENCODING 39923\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7BE0\n9200\nFA60\nAB80\nFA80\nABE0\nFA80\n02A0\nAB60\nACA0\nENDCHAR\nSTARTCHAR U_9BF4\nENCODING 39924\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n77C0\n9040\nFFC0\nA940\nFFC0\nA940\nFFC0\n0140\nA9E0\nAE20\nENDCHAR\nSTARTCHAR U_9BF5\nENCODING 39925\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n77C0\n9100\nFFE0\nAA80\nFD60\nAA80\nFD40\n0280\nA900\nAE00\nENDCHAR\nSTARTCHAR U_9BF6\nENCODING 39926\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7CA0\n97E0\nF880\nABE0\nFAA0\nABE0\nFAA0\n07E0\nA880\nA880\nENDCHAR\nSTARTCHAR U_9BF7\nENCODING 39927\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7A40\n93C0\nFA40\nABC0\nF800\nAFE0\nFA80\n02E0\nAD80\nA8E0\nENDCHAR\nSTARTCHAR U_9BF8\nENCODING 39928\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7A40\n97E0\nFD00\nADE0\nFE80\nAC80\nFFE0\n0480\nAD40\nA620\nENDCHAR\nSTARTCHAR U_9BF9\nENCODING 39929\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7A20\n93E0\nFA20\nABE0\nFA80\nABE0\nFC80\n03E0\nA880\nAFE0\nENDCHAR\nSTARTCHAR U_9BFA\nENCODING 39930\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n93E0\nF940\nAFE0\nF900\nABE0\nFE20\n03E0\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_9BFB\nENCODING 39931\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7FA0\n9220\nFFA0\nAAA0\nFFA0\nAAA0\nFBA0\n06A0\nAA20\nAA60\nENDCHAR\nSTARTCHAR U_9BFC\nENCODING 39932\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n74A0\n9760\nFC20\nAFE0\nFA80\nAD60\nFBC0\n0540\nA880\nAB60\nENDCHAR\nSTARTCHAR U_9BFD\nENCODING 39933\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n7AA0\nAAA0\nFEA0\nAAA0\nFEA0\nA8A0\nFCA0\n0AC0\nAD80\nA880\nENDCHAR\nSTARTCHAR U_9BFE\nENCODING 39934\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n7A80\n93E0\nFAA0\nAFE0\nFAA0\nABE0\nFA80\n0380\nAA80\nAB60\nENDCHAR\nSTARTCHAR U_9BFF\nENCODING 39935\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n9820\nFFE0\nA800\nFFE0\nAAA0\nFFE0\n0AA0\nAAA0\nB260\nENDCHAR\nSTARTCHAR U_9C00\nENCODING 39936\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40E0\n7F20\n9540\nFBE0\nA880\nFFE0\nA900\nF9E0\n02A0\nAA40\nADA0\nENDCHAR\nSTARTCHAR U_9C01\nENCODING 39937\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\n9220\nFBE0\nAA20\nFBE0\nA880\nFBA0\n01C0\nAAA0\nADA0\nENDCHAR\nSTARTCHAR U_9C02\nENCODING 39938\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4020\n7E20\n9AA0\nFEA0\nAAA0\nFEA0\nAAA0\nFAA0\n0E20\nA420\nAA60\nENDCHAR\nSTARTCHAR U_9C03\nENCODING 39939\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7AA0\n93E0\nFAA0\nABE0\nF800\nAFE0\nFAA0\n0240\nAAA0\nAB20\nENDCHAR\nSTARTCHAR U_9C04\nENCODING 39940\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n70A0\nAFE0\nF880\nAA80\nFFA0\nAAA0\nFD40\n0A40\nAD60\nB0A0\nENDCHAR\nSTARTCHAR U_9C05\nENCODING 39941\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7AA0\n93E0\nFAA0\nABE0\nF880\nAFE0\nFCA0\n07E0\nAC20\nA460\nENDCHAR\nSTARTCHAR U_9C06\nENCODING 39942\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7900\n93C0\nF900\nAFE0\nFA40\nAFE0\nFA40\n03C0\nAA40\nABC0\nENDCHAR\nSTARTCHAR U_9C07\nENCODING 39943\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n7A80\n97E0\nFAA0\nAC80\nF900\nAFE0\nF900\n0380\nAD40\nA920\nENDCHAR\nSTARTCHAR U_9C08\nENCODING 39944\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n7FE0\n92A0\nFAE0\nAA00\nFBE0\nA880\nFFE0\n01C0\nAAA0\nACA0\nENDCHAR\nSTARTCHAR U_9C09\nENCODING 39945\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\n9220\nFBE0\nAA20\nFFE0\nA880\nF880\n03E0\nA880\nAFE0\nENDCHAR\nSTARTCHAR U_9C0A\nENCODING 39946\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n9100\nFFE0\nAD60\nFBA0\nAFE0\nF980\n0340\nAD20\nA900\nENDCHAR\nSTARTCHAR U_9C0B\nENCODING 39947\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7D40\n95C0\nFD40\nADC0\nFC80\nAFE0\nFD40\n0480\nAD40\nA7E0\nENDCHAR\nSTARTCHAR U_9C0C\nENCODING 39948\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7940\n97E0\nF880\nABE0\nFAA0\nAB60\nFA20\n03E0\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_9C0D\nENCODING 39949\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n7E40\n9240\nFF40\nAAE0\nFB40\nAEC0\nFA40\n0240\nAAA0\nAB20\nENDCHAR\nSTARTCHAR U_9C0E\nENCODING 39950\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4680\n7BE0\n92A0\nFDE0\nAEA0\nFBE0\nAA80\nFFE0\n0280\nAE00\nA9E0\nENDCHAR\nSTARTCHAR U_9C0F\nENCODING 39951\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7800\n91C0\nF940\nA9C0\nF800\nABE0\nFAA0\n03E0\nAAA0\nABE0\nENDCHAR\nSTARTCHAR U_9C10\nENCODING 39952\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n75A0\n97E0\nF800\nABC0\nF800\nAFE0\nF900\n03C0\nA840\nA980\nENDCHAR\nSTARTCHAR U_9C11\nENCODING 39953\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7A40\n93C0\nFA40\nAFE0\nFA00\nABE0\nFAA0\n0520\nAAA0\nAC40\nENDCHAR\nSTARTCHAR U_9C12\nENCODING 39954\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9640\nFBC0\nAA40\nFBC0\nA900\nFBE0\n0640\nA980\nAE60\nENDCHAR\nSTARTCHAR U_9C13\nENCODING 39955\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7AA0\n93E0\nFAA0\nABE0\nF800\nA940\nFAA0\n5620\nAA40\nA9C0\nENDCHAR\nSTARTCHAR U_9C14\nENCODING 39956\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n78A0\n97E0\nFC80\nAF80\nFCA0\nAFA0\nFD40\n07A0\nAD60\nAA20\nENDCHAR\nSTARTCHAR U_9C15\nENCODING 39957\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n7A20\nAA20\nFEE0\nA800\nFEE0\nA8A0\nF8A0\n0E40\nA8A0\nA920\nENDCHAR\nSTARTCHAR U_9C16\nENCODING 39958\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n9200\nFBC0\nAC80\nFFE0\nAA40\nFBC0\n0240\nABC0\nAA40\nENDCHAR\nSTARTCHAR U_9C17\nENCODING 39959\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42E0\n7AA0\n97A0\nFAE0\nAFA0\nFDA0\nADE0\nFFA0\n00A0\nA8A0\nA960\nENDCHAR\nSTARTCHAR U_9C18\nENCODING 39960\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n9420\nFBC0\nA900\nFA40\nABC0\nF900\n03C0\nA900\nAFE0\nENDCHAR\nSTARTCHAR U_9C19\nENCODING 39961\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7A80\n97E0\nFA80\nA900\nFFE0\nAA00\nFBC0\n0640\nAA40\nABC0\nENDCHAR\nSTARTCHAR U_9C1A\nENCODING 39962\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n9420\nFBC0\nA800\nFBC0\nAA40\nFBC0\n0240\nABC0\nAFE0\nENDCHAR\nSTARTCHAR U_9C1B\nENCODING 39963\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7A40\n93C0\nFA40\nABC0\nF800\nABE0\nFAA0\n02A0\nAAA0\nAFE0\nENDCHAR\nSTARTCHAR U_9C1C\nENCODING 39964\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FE0\n9280\nFFE0\nAAA0\nFFE0\nAAA0\nFFE0\n0280\nAEC0\nAAA0\nENDCHAR\nSTARTCHAR U_9C1D\nENCODING 39965\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n9240\nFBC0\nA800\nFFE0\nA820\nFBA0\n5AA0\nABA0\nA860\nENDCHAR\nSTARTCHAR U_9C1E\nENCODING 39966\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BC0\n9240\nFBC0\nAA00\nFBE0\nAA00\nFBE0\n02A0\nAD60\nA860\nENDCHAR\nSTARTCHAR U_9C1F\nENCODING 39967\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n9280\nFFE0\nA920\nFFC0\nAA00\nFBC0\n0240\nA540\nA880\nENDCHAR\nSTARTCHAR U_9C20\nENCODING 39968\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n7D40\n9280\nF900\nAEE0\nF900\nAFC0\nFD40\n07C0\nA920\nAFE0\nENDCHAR\nSTARTCHAR U_9C21\nENCODING 39969\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7AE0\n93A0\nFAA0\nAB60\nF800\nABE0\nFAA0\n53E0\nAAA0\nABE0\nENDCHAR\nSTARTCHAR U_9C22\nENCODING 39970\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7A80\n93C0\nFA80\nABC0\nFA80\nABE0\nFAA0\n0560\nA8A0\nA840\nENDCHAR\nSTARTCHAR U_9C23\nENCODING 39971\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7FE0\n9A80\nFBE0\nAE40\nFBE0\nAA40\nFB40\n0EC0\n5040\nA8C0\nENDCHAR\nSTARTCHAR U_9C24\nENCODING 39972\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n7E80\n9A80\nFBE0\nAEA0\nFAA0\nAEA0\nFAA0\n5AE0\nAE80\nA080\nENDCHAR\nSTARTCHAR U_9C25\nENCODING 39973\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n7AA0\n9FE0\nF900\nAB40\nFD20\nA900\nFB40\n5520\nA920\nA900\nENDCHAR\nSTARTCHAR U_9C26\nENCODING 39974\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7A80\n9000\nFFE0\nAA40\nFC80\nAFE0\nFA40\n04A0\nAFE0\nA920\nENDCHAR\nSTARTCHAR U_9C27\nENCODING 39975\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEA80\nAFC0\nA200\nFFE0\nA880\nB760\nE900\nAF80\nAA80\nAF80\nB540\nENDCHAR\nSTARTCHAR U_9C28\nENCODING 39976\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7A40\n93C0\nFA40\nABC0\nF800\nAFE0\nFDA0\n5360\nADA0\nAA60\nENDCHAR\nSTARTCHAR U_9C29\nENCODING 39977\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n7BA0\n92A0\nF940\nAA00\nFBE0\nAC80\nFFE0\n5080\nAAA0\nABE0\nENDCHAR\nSTARTCHAR U_9C2A\nENCODING 39978\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n77C0\n9100\nFFE0\nAA40\nFFE0\nA820\nFBE0\n02A0\nAAA0\nAFE0\nENDCHAR\nSTARTCHAR U_9C2B\nENCODING 39979\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n9420\nFA40\nADA0\nFA40\nAC20\nFBC0\n5240\nABC0\nAA40\nENDCHAR\nSTARTCHAR U_9C2C\nENCODING 39980\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40E0\n7880\n93E0\nFAA0\nABE0\nFA80\nABE0\nFB40\n5540\nAC80\nAB60\nENDCHAR\nSTARTCHAR U_9C2D\nENCODING 39981\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FA0\n9140\nFFE0\nAA80\nFF20\nABE0\nFA20\n53E0\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_9C2E\nENCODING 39982\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7AA0\n9360\nFA20\nABE0\nF800\nABE0\nFAA0\n02A0\nAAA0\nAFE0\nENDCHAR\nSTARTCHAR U_9C2F\nENCODING 39983\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FE0\n9120\nFBE0\nAA80\nFBE0\nA920\nFDA0\n0360\nADA0\nAB60\nENDCHAR\nSTARTCHAR U_9C30\nENCODING 39984\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n7280\n9FE0\nFAA0\nABE0\nFEA0\nABE0\nFA80\n0280\nAA80\nAA80\nENDCHAR\nSTARTCHAR U_9C31\nENCODING 39985\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7BE0\n96A0\nFBE0\nAEA0\nFBE0\nAA80\nFBE0\n5280\nAA80\nADE0\nENDCHAR\nSTARTCHAR U_9C32\nENCODING 39986\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n21E0\nFF40\n4880\n9340\n3FE0\n6240\nBFC0\n2440\n7FC0\n8920\nENDCHAR\nSTARTCHAR U_9C33\nENCODING 39987\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n7F80\n9480\nFFE0\nAAA0\nFFA0\nAAA0\nFFA0\n52A0\nAF20\nAA60\nENDCHAR\nSTARTCHAR U_9C34\nENCODING 39988\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6A80\nBE80\n00E0\n7EA0\nD2A0\n7EA0\n6AA0\n7EA0\n6A40\n7EA0\n5520\nENDCHAR\nSTARTCHAR U_9C35\nENCODING 39989\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3D00\n55E0\nFE40\n5580\n7E60\n1700\n0A00\n3F80\n1480\n1F80\n6AC0\nENDCHAR\nSTARTCHAR U_9C36\nENCODING 39990\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n96A0\nFD40\nAA20\nFDC0\nA800\nFFE0\n5080\nAAC0\nADA0\nENDCHAR\nSTARTCHAR U_9C37\nENCODING 39991\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n75E0\n9B40\nFAC0\nAB20\nFA80\nABE0\nFA80\n59C0\nAAA0\nADA0\nENDCHAR\nSTARTCHAR U_9C38\nENCODING 39992\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7400\n95C0\nFD40\nADC0\nFC00\nAFE0\nFEA0\n07E0\nA400\nA7E0\nENDCHAR\nSTARTCHAR U_9C39\nENCODING 39993\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6FE0\nAAA0\nFFA0\nA9A0\nFF40\nAA40\nFFA0\n0920\n57C0\nA900\nAFE0\nENDCHAR\nSTARTCHAR U_9C3A\nENCODING 39994\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n7FC0\n9240\nFCA0\nAFE0\nFA40\nAD20\nFA80\n0140\nA880\nAF00\nENDCHAR\nSTARTCHAR U_9C3B\nENCODING 39995\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7A40\n93C0\nFA40\nAFE0\nFAA0\nAFE0\nFA40\n5180\nA980\nAE60\nENDCHAR\nSTARTCHAR U_9C3C\nENCODING 39996\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7920\n95A0\nFB60\nADA0\nF900\nABE0\nFA20\n53E0\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_9C3D\nENCODING 39997\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n77E0\n9280\nFFE0\nAAA0\nFFE0\nAA40\nFBC0\n5240\nABC0\nAA40\nENDCHAR\nSTARTCHAR U_9C3E\nENCODING 39998\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7280\n9FE0\nFAA0\nAFE0\nF800\nAFC0\nF800\n57E0\nAD40\nAB20\nENDCHAR\nSTARTCHAR U_9C3F\nENCODING 39999\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7FE0\n9080\nFBE0\nA880\nFFE0\nAA40\nFBC0\n5240\nABC0\nAE60\nENDCHAR\nSTARTCHAR U_9C40\nENCODING 40000\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\n9100\nF7E0\n9120\nEDE0\n1FC0\n6440\nBFC0\n2440\n7FC0\n9120\nENDCHAR\nSTARTCHAR U_9C41\nENCODING 40001\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n45E0\n7A80\n92A0\nF940\nAEC0\nFB40\nAAE0\nFB40\n5240\nAA80\nADE0\nENDCHAR\nSTARTCHAR U_9C42\nENCODING 40002\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n72E0\nAB20\nFAC0\nAE80\nFB40\nAFE0\nFA40\n0B40\nAA40\nB2C0\nENDCHAR\nSTARTCHAR U_9C43\nENCODING 40003\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n7FE0\n9100\nFFC0\nA900\nFFE0\nABC0\nFD40\n07C0\nA940\nA7E0\nENDCHAR\nSTARTCHAR U_9C44\nENCODING 40004\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n77E0\n9540\nFFC0\nAD40\nFFC0\nA920\nFFE0\n5440\nAA40\nA9C0\nENDCHAR\nSTARTCHAR U_9C45\nENCODING 40005\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7BE0\n92A0\nFBE0\nAAA0\nFBE0\nAA80\nFBE0\n06A0\nA7E0\nAAA0\nENDCHAR\nSTARTCHAR U_9C46\nENCODING 40006\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7FE0\n9140\nFFE0\nAA40\nFBC0\nAA40\nFBC0\n5080\nAFE0\nA880\nENDCHAR\nSTARTCHAR U_9C47\nENCODING 40007\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7BE0\n9280\nFBE0\nAAA0\nFBE0\nAAA0\nFBE0\n02A0\nA5C0\nAAA0\nENDCHAR\nSTARTCHAR U_9C48\nENCODING 40008\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7900\n97E0\nFD20\nAB40\nFD20\nAFE0\nF820\n53E0\nA820\nABE0\nENDCHAR\nSTARTCHAR U_9C49\nENCODING 40009\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5500\nFDE0\nB740\nDC80\n8960\n1FC0\n6240\nBFC0\n2240\n3FC0\n4920\nENDCHAR\nSTARTCHAR U_9C4A\nENCODING 40010\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7140\n97E0\nFAA0\nAC80\nFFE0\nAAA0\nFC60\n5BA0\nAAA0\nABE0\nENDCHAR\nSTARTCHAR U_9C4B\nENCODING 40011\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n7900\n97E0\nFD20\nAFC0\nFD20\nADE0\nFD40\n5760\nA940\nAFE0\nENDCHAR\nSTARTCHAR U_9C4C\nENCODING 40012\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41C0\n7240\n97E0\nFAA0\nABE0\nF900\nAAA0\nFD40\n52E0\nA960\nAAC0\nENDCHAR\nSTARTCHAR U_9C4D\nENCODING 40013\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4740\n75A0\n9240\nFFE0\nA940\nFB60\nAA80\nFBE0\n51A0\nA940\nAEA0\nENDCHAR\nSTARTCHAR U_9C4E\nENCODING 40014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7900\n97E0\nFA40\nAFA0\nFA80\nAFE0\nF820\n5BA0\nAAA0\nABE0\nENDCHAR\nSTARTCHAR U_9C4F\nENCODING 40015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n7280\nAFE0\nF2A0\nBFE0\nD640\nB540\nF7C0\n0100\nDFE0\nA100\nENDCHAR\nSTARTCHAR U_9C50\nENCODING 40016\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n7940\n97E0\nF940\nAFE0\nF920\nAFE0\nF920\n57E0\nA920\nA920\nENDCHAR\nSTARTCHAR U_9C51\nENCODING 40017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n7BE0\n9140\nFFE0\nA880\nFBE0\nAAA0\nFBE0\n02A0\nABE0\nAA20\nENDCHAR\nSTARTCHAR U_9C52\nENCODING 40018\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n77E0\n9140\nFBE0\nAAA0\nFB60\nABE0\nF840\n57E0\nAA40\nA9C0\nENDCHAR\nSTARTCHAR U_9C53\nENCODING 40019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7AA0\n93E0\nF800\nABE0\nFAA0\nABE0\nFAA0\n07E0\nA880\nA880\nENDCHAR\nSTARTCHAR U_9C54\nENCODING 40020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n7FE0\n9080\nFBE0\nA880\nFFE0\nA940\nFFE0\n5240\nAA40\nABC0\nENDCHAR\nSTARTCHAR U_9C55\nENCODING 40021\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7AA0\n91C0\nFFE0\nAAC0\nFCA0\nABE0\nFAA0\n53E0\nAAA0\nABE0\nENDCHAR\nSTARTCHAR U_9C56\nENCODING 40022\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n6D40\nAA40\nFFE0\nAAA0\nFAC0\nAFC0\nFA40\n5A40\nAAA0\nB520\nENDCHAR\nSTARTCHAR U_9C57\nENCODING 40023\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4520\n7340\n97E0\nFB40\nAD20\nFA40\nABE0\nFD40\n53E0\nAA40\nAC40\nENDCHAR\nSTARTCHAR U_9C58\nENCODING 40024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7840\n93C0\nF840\nAFE0\nFAA0\nAFE0\nF840\n57E0\nA940\nA8C0\nENDCHAR\nSTARTCHAR U_9C59\nENCODING 40025\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n77C0\n9100\nFFE0\nAA40\nFFE0\nAA40\nFFE0\n5280\nAAA0\nACE0\nENDCHAR\nSTARTCHAR U_9C5A\nENCODING 40026\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7FE0\n9080\nFFE0\nAA20\nFBE0\nAA20\nF940\n07E0\nAA20\nABE0\nENDCHAR\nSTARTCHAR U_9C5B\nENCODING 40027\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n77E0\n96A0\nFDA0\nAFE0\nF800\nABC0\nFA40\n03C0\nAA40\nABC0\nENDCHAR\nSTARTCHAR U_9C5C\nENCODING 40028\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n7780\nAAE0\nFBA0\nAEA0\nFBC0\nAAA0\nFEA0\n07E0\nAA80\nB080\nENDCHAR\nSTARTCHAR U_9C5D\nENCODING 40029\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n9540\nFFE0\nAA40\nFBC0\nAA40\nFBC0\n0240\nABC0\nAE60\nENDCHAR\nSTARTCHAR U_9C5E\nENCODING 40030\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n6AA0\nBFE0\nF800\nAFE0\nFA40\nABC0\nF920\n56C0\nAA40\nAB20\nENDCHAR\nSTARTCHAR U_9C5F\nENCODING 40031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6AC0\n4440\n6AC0\nFFE0\n9220\n3FC0\n6440\n3FC0\n2440\n7FC0\n8920\nENDCHAR\nSTARTCHAR U_9C60\nENCODING 40032\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4380\n7440\n9BA0\nF800\nAFE0\nFAA0\nAFE0\nFC40\n57C0\nAC40\nA7C0\nENDCHAR\nSTARTCHAR U_9C61\nENCODING 40033\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n6E60\nAA40\nFFE0\nAA40\nFF40\nABE0\nFF40\n0540\nAAA0\nA120\nENDCHAR\nSTARTCHAR U_9C62\nENCODING 40034\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7240\n9240\nFFE0\nAAA0\nFEE0\nA900\nFFE0\n5380\nAD40\nA920\nENDCHAR\nSTARTCHAR U_9C63\nENCODING 40035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n77E0\n95A0\nFC20\nAFE0\nFA40\nABC0\nFA40\n53C0\nA800\nAFE0\nENDCHAR\nSTARTCHAR U_9C64\nENCODING 40036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n7BE0\n9240\nFBC0\nAA60\nFBC0\nAAC0\nFBA0\n0280\nA560\nAAC0\nENDCHAR\nSTARTCHAR U_9C65\nENCODING 40037\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7AE0\n9280\nFFE0\nA880\nFFE0\nACA0\nFF40\n0540\nABA0\nAD20\nENDCHAR\nSTARTCHAR U_9C66\nENCODING 40038\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n7AA0\n9FE0\nF280\nAEE0\nFAA0\nAEE0\nFAA0\n56E0\nAAA0\nABE0\nENDCHAR\nSTARTCHAR U_9C67\nENCODING 40039\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n6FE0\nAAA0\nFFE0\nAAA0\nFFE0\nAA40\nFBC0\n5240\nA980\nAFE0\nENDCHAR\nSTARTCHAR U_9C68\nENCODING 40040\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4540\n6FE0\nAAA0\nFBA0\nAA80\nFB20\nABE0\nFA40\n53C0\nAA40\nABC0\nENDCHAR\nSTARTCHAR U_9C69\nENCODING 40041\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7880\n97E0\nFCA0\nAAC0\nFCA0\nABE0\nFAA0\n03E0\nAAA0\nABE0\nENDCHAR\nSTARTCHAR U_9C6A\nENCODING 40042\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7A40\n93C0\nF900\nAFE0\nF940\nAFE0\nFA40\n07C0\nAA40\nABC0\nENDCHAR\nSTARTCHAR U_9C6B\nENCODING 40043\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40E0\n7F20\n9540\nFFE0\nACA0\nFBC0\nAD20\nFBC0\n0680\nA900\nAEE0\nENDCHAR\nSTARTCHAR U_9C6C\nENCODING 40044\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n7100\nAFE0\nF920\nAB80\nFD40\nAFE0\nF900\n0FE0\nAAA0\nAAE0\nENDCHAR\nSTARTCHAR U_9C6D\nENCODING 40045\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n92A0\nFD40\nAB60\nFD40\nA940\nFFC0\n5440\nA7C0\nA840\nENDCHAR\nSTARTCHAR U_9C6E\nENCODING 40046\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4D60\n69A0\nAD60\nF9A0\nAAA0\nFEE0\nAAA0\nFFE0\n5280\nAC40\nA820\nENDCHAR\nSTARTCHAR U_9C6F\nENCODING 40047\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n7FE0\n9240\nFBE0\nAA80\nFFE0\nAA80\nFBE0\n0140\nA880\nAB60\nENDCHAR\nSTARTCHAR U_9C70\nENCODING 40048\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7CA0\n97E0\nF900\nAFE0\nF940\nAFE0\nFA40\n07C0\nAE40\nABC0\nENDCHAR\nSTARTCHAR U_9C71\nENCODING 40049\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n6A80\nAFE0\nFA80\nAFC0\nF940\nAFE0\nF920\n59E0\nAF20\nA860\nENDCHAR\nSTARTCHAR U_9C72\nENCODING 40050\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n7D40\n92A0\nF800\nABE0\nFAA0\nABE0\nFAC0\n03A0\nAAE0\nABA0\nENDCHAR\nSTARTCHAR U_9C73\nENCODING 40051\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4520\n6BC0\nAEA0\nFBE0\nAAC0\nFFE0\nA900\nFFE0\n5380\nAD40\nA920\nENDCHAR\nSTARTCHAR U_9C74\nENCODING 40052\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n7FE0\n9240\nFFE0\nAAA0\nFFE0\nA8A0\nFFE0\n54C0\nAEA0\nA960\nENDCHAR\nSTARTCHAR U_9C75\nENCODING 40053\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n77E0\n9AA0\nFFE0\nA880\nFFA0\nA8A0\nFEA0\n5A40\nAEC0\nB120\nENDCHAR\nSTARTCHAR U_9C76\nENCODING 40054\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n77E0\n9100\nFBE0\nA900\nFFE0\nAA40\nFFE0\n0640\nABC0\nAA60\nENDCHAR\nSTARTCHAR U_9C77\nENCODING 40055\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7880\n93E0\nFAA0\nAFE0\nF880\nABE0\nFAA0\n53E0\nA880\nAFE0\nENDCHAR\nSTARTCHAR U_9C78\nENCODING 40056\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n41E0\n7100\n97E0\nFD20\nAFE0\nFD40\nAFC0\nFD40\n57E0\nAAA0\nAFE0\nENDCHAR\nSTARTCHAR U_9C79\nENCODING 40057\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7940\n97E0\nFD20\nAFE0\nFA80\nAFE0\nFA80\n53E0\nAA80\nABE0\nENDCHAR\nSTARTCHAR U_9C7A\nENCODING 40058\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4EE0\n6000\nAFE0\nFAA0\nAFE0\nFAA0\nAFE0\nFCA0\n5FC0\nA4A0\nA7E0\nENDCHAR\nSTARTCHAR U_9C7B\nENCODING 40059\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F00\n1200\n3F80\n5480\n1FC0\n65A0\nA280\nFBE0\nAAA0\nFBE0\nA520\nENDCHAR\nSTARTCHAR U_9C7C\nENCODING 40060\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n1F00\n2200\n7FC0\nA240\n3FC0\n2240\n3FC0\n2040\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_9C7D\nENCODING 40061\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BE0\n9120\nF920\nA920\nF920\nA920\nF920\n0220\n1AA0\nE440\nENDCHAR\nSTARTCHAR U_9C7E\nENCODING 40062\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BC0\n9040\nF840\nABC0\nFA00\nAA00\nFA00\n0220\n1A20\nE1E0\nENDCHAR\nSTARTCHAR U_9C7F\nENCODING 40063\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n7920\n9100\nFFE0\nA900\nF900\nA980\nF980\n02A0\n34A0\nC860\nENDCHAR\nSTARTCHAR U_9C80\nENCODING 40064\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n93E0\nF880\nAAA0\nFAA0\nABE0\nF880\n00A0\n18A0\nE060\nENDCHAR\nSTARTCHAR U_9C81\nENCODING 40065\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F00\n2200\n7FC0\nA440\n3FC0\n2440\nFFE0\n1080\n1F80\n1080\n1F80\nENDCHAR\nSTARTCHAR U_9C82\nENCODING 40066\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7880\n97E0\nF900\nA9E0\nF920\nA920\nF920\n0220\n3A20\nC4C0\nENDCHAR\nSTARTCHAR U_9C83\nENCODING 40067\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BE0\n92A0\nFAA0\nAAA0\nFBE0\nAA00\nFA00\n0220\n1A20\nE1E0\nENDCHAR\nSTARTCHAR U_9C84\nENCODING 40068\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7BE0\n9040\nF840\nAF40\nFD40\nAF40\nF840\n0040\n3940\nC080\nENDCHAR\nSTARTCHAR U_9C85\nENCODING 40069\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7A40\n9200\nFFE0\nAA00\nFBC0\nAA40\nFB40\n0480\n3940\nCA20\nENDCHAR\nSTARTCHAR U_9C86\nENCODING 40070\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7880\n94A0\nFAA0\nAAC0\nF880\nAFE0\nF880\n0080\n3880\nC080\nENDCHAR\nSTARTCHAR U_9C87\nENCODING 40071\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n90E0\nF880\nA880\nFBE0\nAA20\nFA20\n0220\n3A20\nC3E0\nENDCHAR\nSTARTCHAR U_9C88\nENCODING 40072\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n79E0\n9100\nFBE0\nAA20\nFA20\nABE0\nFA00\n0200\n3400\nC800\nENDCHAR\nSTARTCHAR U_9C89\nENCODING 40073\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n9080\nFBE0\nAAA0\nFAA0\nABE0\nFAA0\n02A0\n3AA0\nC3E0\nENDCHAR\nSTARTCHAR U_9C8A\nENCODING 40074\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n93E0\nFD00\nA900\nF9E0\nA900\nF9E0\n0100\n1900\nE100\nENDCHAR\nSTARTCHAR U_9C8B\nENCODING 40075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n7940\n9240\nFBE0\nAE40\nFB40\nAAC0\nFA40\n0240\n3A40\nC2C0\nENDCHAR\nSTARTCHAR U_9C8C\nENCODING 40076\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7900\n93E0\nFA20\nAA20\nFA20\nABE0\nFA20\n0220\n3A20\nC3E0\nENDCHAR\nSTARTCHAR U_9C8D\nENCODING 40077\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9420\nFBA0\nAAA0\nFAA0\nABA0\nFA60\n0200\n1A20\nE1E0\nENDCHAR\nSTARTCHAR U_9C8E\nENCODING 40078\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n1280\nFFE0\n9120\n3F80\n6480\nBF80\n2480\n3F80\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_9C8F\nENCODING 40079\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n93E0\nFAA0\nAA80\nFBE0\nAA20\nFB40\n0280\n3AC0\nC520\nENDCHAR\nSTARTCHAR U_9C90\nENCODING 40080\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n9240\nFA20\nAFE0\nF800\nABE0\nFA20\n0220\n3A20\nC3E0\nENDCHAR\nSTARTCHAR U_9C91\nENCODING 40081\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n93E0\nF880\nAFE0\nF880\nA880\nFBE0\n0080\n3880\nC7E0\nENDCHAR\nSTARTCHAR U_9C92\nENCODING 40082\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7880\n97E0\nF880\nABE0\nF800\nABE0\nFA20\n0220\n3A20\nC3E0\nENDCHAR\nSTARTCHAR U_9C93\nENCODING 40083\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\n9140\nFFE0\nA900\nFBE0\nAD00\nF9E0\n0020\n38A0\nC040\nENDCHAR\nSTARTCHAR U_9C94\nENCODING 40084\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7900\n97E0\nFA00\nAFC0\nFA40\nABC0\nFA40\n03C0\n3A40\nC2C0\nENDCHAR\nSTARTCHAR U_9C95\nENCODING 40085\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7900\n9200\nFFE0\nAAA0\nFAA0\nAAA0\nFAA0\n0AA0\n3AA0\nC860\nENDCHAR\nSTARTCHAR U_9C96\nENCODING 40086\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7A20\n93A0\nFA20\nABA0\nFAA0\nABA0\nFA20\n0220\n3A20\nC260\nENDCHAR\nSTARTCHAR U_9C97\nENCODING 40087\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4020\n7FA0\n98A0\nFAA0\nAAA0\nFAA0\nAAA0\nFA20\n0220\n3520\nC860\nENDCHAR\nSTARTCHAR U_9C98\nENCODING 40088\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n7B00\n9400\nFC00\nAFE0\nFC00\nAFE0\nFE20\n0620\n3A20\nCBE0\nENDCHAR\nSTARTCHAR U_9C99\nENCODING 40089\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7980\n9240\nFC20\nABC0\nF800\nAFE0\nF900\n0200\n1C40\nE7E0\nENDCHAR\nSTARTCHAR U_9C9A\nENCODING 40090\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n9240\nF980\nA980\nFE60\nAA40\nFA40\n0240\n3A40\nC440\nENDCHAR\nSTARTCHAR U_9C9B\nENCODING 40091\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7880\n97E0\nFA40\nAC20\nFA40\nAA40\nF980\n0180\n1A40\nE420\nENDCHAR\nSTARTCHAR U_9C9C\nENCODING 40092\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4220\n7940\n97E0\nF880\nABE0\nF880\nA880\nFFE0\n0080\n3880\nC080\nENDCHAR\nSTARTCHAR U_9C9D\nENCODING 40093\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n0400\n3F00\n0800\nFFE0\n2900\n5200\nBF80\n2480\nFFE0\nENDCHAR\nSTARTCHAR U_9C9E\nENCODING 40094\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n7FC0\n0800\nFFE0\n2A80\n52C0\nBFA0\n2480\n3F80\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_9C9F\nENCODING 40095\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7820\n93E0\nF820\nABE0\nF840\nAFE0\nFA40\n0140\n3840\nC0C0\nENDCHAR\nSTARTCHAR U_9CA0\nENCODING 40096\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7880\n93E0\nFAA0\nABE0\nFAA0\nABE0\nFA80\n0180\n3A40\nC420\nENDCHAR\nSTARTCHAR U_9CA1\nENCODING 40097\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7800\n93E0\nFAA0\nAAA0\nFBA0\nAAE0\nFAA0\n02A0\n3AA0\nC2A0\nENDCHAR\nSTARTCHAR U_9CA2\nENCODING 40098\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7DE0\n9280\nF940\nAFE0\nFA40\nABE0\nFA40\n0240\n3B40\nC4E0\nENDCHAR\nSTARTCHAR U_9CA3\nENCODING 40099\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7AE0\nAAA0\nFAA0\nAA40\nFAA0\nA900\nF7C0\n0100\n3100\nCFE0\nENDCHAR\nSTARTCHAR U_9CA4\nENCODING 40100\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7AA0\n92A0\nFBE0\nAAA0\nFBE0\nA880\nFBE0\n0080\n3880\nC7E0\nENDCHAR\nSTARTCHAR U_9CA5\nENCODING 40101\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4040\n7E40\n9A40\nFBE0\nAE40\nFB40\nAAC0\nFA40\n0E40\n3040\nC0C0\nENDCHAR\nSTARTCHAR U_9CA6\nENCODING 40102\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\n9540\nF880\nAB60\nF880\nAFE0\nF880\n02C0\n3CA0\nC180\nENDCHAR\nSTARTCHAR U_9CA7\nENCODING 40103\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4060\n7F80\n9100\nFA40\nAF80\nF940\nAFA0\nF880\n02C0\n34A0\nC9A0\nENDCHAR\nSTARTCHAR U_9CA8\nENCODING 40104\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA540\n5920\n2FC0\nD200\n7FC0\n2440\n7FC0\n2440\n3FC0\n0000\nFFE0\nENDCHAR\nSTARTCHAR U_9CA9\nENCODING 40105\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n9420\nFBC0\nA800\nFFE0\nAA80\nFA80\n0280\n34A0\nC860\nENDCHAR\nSTARTCHAR U_9CAA\nENCODING 40106\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n7FC0\n9140\nFFE0\nA940\nFFC0\nAA00\nFFC0\n0240\n1A40\nE3C0\nENDCHAR\nSTARTCHAR U_9CAB\nENCODING 40107\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4000\n6EE0\nAAA0\nFEA0\nAAA0\nFEA0\nA8A0\nFAA0\n0DE0\n3880\nC080\nENDCHAR\nSTARTCHAR U_9CAC\nENCODING 40108\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7940\n9080\nFBE0\nAAA0\nFBE0\nAAA0\nFBE0\n02A0\n1AA0\nE260\nENDCHAR\nSTARTCHAR U_9CAD\nENCODING 40109\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n9100\nFFC0\nA900\nFFE0\nAA40\nFBC0\n0240\n3BC0\nC240\nENDCHAR\nSTARTCHAR U_9CAE\nENCODING 40110\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FC0\n9100\nFFE0\nAA40\nFC20\nABC0\nFE40\n0180\n3980\nC660\nENDCHAR\nSTARTCHAR U_9CAF\nENCODING 40111\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n7FE0\n9240\nFBC0\nAA40\nFBC0\nAA40\nFFE0\n0000\n3A40\nC420\nENDCHAR\nSTARTCHAR U_9CB0\nENCODING 40112\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5F00\n6A00\nABE0\nFEA0\nAAA0\nFAA0\nAEA0\nFA40\n0F40\n32A0\nC320\nENDCHAR\nSTARTCHAR U_9CB1\nENCODING 40113\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7A80\n96E0\nFA80\nAA80\nFEE0\nAA80\nFA80\n06E0\n3A80\nC280\nENDCHAR\nSTARTCHAR U_9CB2\nENCODING 40114\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7A20\n93E0\nFA20\nABE0\nFA80\nAAA0\nFBC0\n02A0\n3BA0\nC2E0\nENDCHAR\nSTARTCHAR U_9CB3\nENCODING 40115\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7A40\n93C0\nFA40\nABC0\nF800\nAFE0\nFC20\n07E0\n3C20\nC7E0\nENDCHAR\nSTARTCHAR U_9CB4\nENCODING 40116\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n7920\nA920\nFFE0\nA920\nFBA0\nAAA0\nFAA0\n0BA0\n3820\nCFE0\nENDCHAR\nSTARTCHAR U_9CB5\nENCODING 40117\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7EE0\n9420\nFEE0\nAC20\nFFE0\nAA80\nFA80\n0480\n34A0\nC860\nENDCHAR\nSTARTCHAR U_9CB6\nENCODING 40118\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7940\n9320\nFC80\nABE0\nF840\nA880\nFB40\n06A0\n3A40\nC1C0\nENDCHAR\nSTARTCHAR U_9CB7\nENCODING 40119\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n7920\nABA0\nF920\nAFE0\nF820\nABA0\nFAA0\n0BA0\n3820\nC860\nENDCHAR\nSTARTCHAR U_9CB8\nENCODING 40120\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7FE0\n9000\nFBE0\nAA20\nFBE0\nA880\nFAC0\n02A0\n3CA0\nC180\nENDCHAR\nSTARTCHAR U_9CB9\nENCODING 40121\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7A40\n97C0\nF900\nAFE0\nFA40\nAD20\nFA80\n0140\n3880\nC700\nENDCHAR\nSTARTCHAR U_9CBA\nENCODING 40122\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47C0\n7840\n97C0\nF940\nAFC0\nFD40\nAFC0\nF940\n0140\n39A0\nC620\nENDCHAR\nSTARTCHAR U_9CBB\nENCODING 40123\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n7AA0\n9540\nFD40\nAAA0\nF800\nAFE0\nFD20\n07E0\n3D20\nC7E0\nENDCHAR\nSTARTCHAR U_9CBC\nENCODING 40124\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7BE0\n9140\nFFE0\nA940\nFBE0\nAAA0\nFAA0\n02A0\n3940\nC620\nENDCHAR\nSTARTCHAR U_9CBD\nENCODING 40125\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n42A0\n7FE0\n92A0\nFAE0\nAA00\nFBE0\nA880\nFFE0\n01C0\n3AA0\nC4A0\nENDCHAR\nSTARTCHAR U_9CBE\nENCODING 40126\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7800\n93C0\nFA40\nABC0\nF800\nAFE0\nFD20\n07E0\n1D20\nE7E0\nENDCHAR\nSTARTCHAR U_9CBF\nENCODING 40127\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7D20\n9340\nFFE0\nAC20\nFBC0\nA800\nFFE0\n0100\n1A40\nE7E0\nENDCHAR\nSTARTCHAR U_9CC0\nENCODING 40128\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7A40\n93C0\nFA40\nABC0\nF800\nAFE0\nF900\n05C0\n3500\nCBE0\nENDCHAR\nSTARTCHAR U_9CC1\nENCODING 40129\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7A40\n93C0\nFA40\nABC0\nF800\nAFE0\nFAA0\n0AA0\n3AA0\nCFE0\nENDCHAR\nSTARTCHAR U_9CC2\nENCODING 40130\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7AA0\n93E0\nFAA0\nABE0\nF800\nAFE0\nFAA0\n0240\n1B40\nE220\nENDCHAR\nSTARTCHAR U_9CC3\nENCODING 40131\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\n7AA0\n93E0\nFAA0\nABE0\nF800\nA900\nFAC0\n0620\n3A40\nC1C0\nENDCHAR\nSTARTCHAR U_9CC4\nENCODING 40132\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7DA0\n97E0\nF800\nABC0\nF800\nAFE0\nF900\n03E0\n3820\nC1C0\nENDCHAR\nSTARTCHAR U_9CC5\nENCODING 40133\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\n7E40\n9240\nFFE0\nAA40\nFF40\nAAC0\nFA40\n0240\n3AA0\nC320\nENDCHAR\nSTARTCHAR U_9CC6\nENCODING 40134\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4200\n7BE0\n9640\nFBC0\nAA40\nFBC0\nAA00\nFBC0\n0640\n3980\nC660\nENDCHAR\nSTARTCHAR U_9CC7\nENCODING 40135\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\n9220\nFBE0\nAA20\nFFE0\nA880\nFBE0\n0080\n3880\nC7E0\nENDCHAR\nSTARTCHAR U_9CC8\nENCODING 40136\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BE0\n9220\nFBE0\nAA20\nFBE0\nA880\nFEA0\n02C0\n3AA0\nC5A0\nENDCHAR\nSTARTCHAR U_9CC9\nENCODING 40137\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7AE0\n93A0\nFF40\nAAA0\nFBE0\nAE20\nFAA0\n02A0\n1A20\nE260\nENDCHAR\nSTARTCHAR U_9CCA\nENCODING 40138\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n9820\nFFE0\nA800\nFFE0\nAAA0\nFFE0\n0AA0\n3AA0\nD060\nENDCHAR\nSTARTCHAR U_9CCB\nENCODING 40139\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7D40\n9280\nF980\nAE60\nF900\nAFC0\nFD40\n07C0\n3120\nCFE0\nENDCHAR\nSTARTCHAR U_9CCC\nENCODING 40140\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n21E0\nFA40\n2180\n7940\n8A20\n3F80\n6480\n3F80\n2480\nFFE0\nENDCHAR\nSTARTCHAR U_9CCD\nENCODING 40141\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4120\n7FA0\n9140\nFFE0\nAA40\nFEA0\nABE0\nFA20\n03E0\n3A20\nC3E0\nENDCHAR\nSTARTCHAR U_9CCE\nENCODING 40142\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7A40\n93C0\nFA40\nABC0\nF800\nAFE0\nFDA0\n0360\n3DA0\nC360\nENDCHAR\nSTARTCHAR U_9CCF\nENCODING 40143\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7AA0\n97E0\nF800\nA900\nFB40\nAD20\nFB40\n0520\n3920\nC100\nENDCHAR\nSTARTCHAR U_9CD0\nENCODING 40144\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40C0\n7F20\n9520\nFAC0\nAA00\nFBE0\nAC80\nFFE0\n0080\n3CA0\nC7E0\nENDCHAR\nSTARTCHAR U_9CD1\nENCODING 40145\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n77E0\n9240\nFFE0\nA920\nF880\nAFE0\nF900\n01E0\n3A20\nC460\nENDCHAR\nSTARTCHAR U_9CD2\nENCODING 40146\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\n7FE0\n9280\nFFE0\nAAA0\nFFE0\nAAA0\nFFE0\n0280\n36C0\nCAA0\nENDCHAR\nSTARTCHAR U_9CD3\nENCODING 40147\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A80\n7F80\nAA80\nEFE0\nA4A0\nFFA0\nA4A0\nFFA0\n04A0\n3FA0\nC540\nENDCHAR\nSTARTCHAR U_9CD4\nENCODING 40148\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n7280\nAFE0\nFAA0\nAFE0\nF800\nABC0\nF800\n07E0\n3940\nCB20\nENDCHAR\nSTARTCHAR U_9CD5\nENCODING 40149\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7100\n9FE0\nF920\nABA0\nFD40\nAFE0\nF820\n03E0\n3020\nC7E0\nENDCHAR\nSTARTCHAR U_9CD6\nENCODING 40150\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA500\n69E0\nFF40\nB540\nEC80\nA560\n7F80\nA480\n3F80\n2480\nFFE0\nENDCHAR\nSTARTCHAR U_9CD7\nENCODING 40151\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43C0\n7A40\n93C0\nFA40\nAFE0\nFAA0\nAFE0\nFC20\n0240\n3980\nC660\nENDCHAR\nSTARTCHAR U_9CD8\nENCODING 40152\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7DE0\nAB40\nFC80\nA940\nFE20\n7F80\nA480\n3F80\n2480\nFFE0\nENDCHAR\nSTARTCHAR U_9CD9\nENCODING 40153\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n77E0\n9540\nFFE0\nAD40\nFFE0\nAD20\nFFE0\n0D20\n37E0\nD520\nENDCHAR\nSTARTCHAR U_9CDA\nENCODING 40154\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4F20\n7920\n9F20\nF8E0\nAF20\nF8A0\nAF60\nFA20\n0F20\n3AA0\nD660\nENDCHAR\nSTARTCHAR U_9CDB\nENCODING 40155\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\n7DA0\n9360\nFDA0\nA920\nFA00\nAFE0\nFC20\n07E0\n1C20\nE7E0\nENDCHAR\nSTARTCHAR U_9CDC\nENCODING 40156\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n7AC0\n9940\nFFE0\nA920\nF940\nAD40\nFFC0\n0940\n32A0\nC520\nENDCHAR\nSTARTCHAR U_9CDD\nENCODING 40157\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n7FE0\n9100\nFFE0\nA900\nFFE0\nAD40\nFFE0\n0440\n3C40\nC7C0\nENDCHAR\nSTARTCHAR U_9CDE\nENCODING 40158\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4520\n7B40\n97E0\nFB40\nAD20\nFA40\nABE0\nFD40\n0BE0\n3240\nC440\nENDCHAR\nSTARTCHAR U_9CDF\nENCODING 40159\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n7FE0\n9280\nFFE0\nAAA0\nFCE0\nAFE0\nF840\n07E0\n1A40\nE1C0\nENDCHAR\nSTARTCHAR U_9CE0\nENCODING 40160\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n7FE0\n9240\nFBE0\nAE40\nFBE0\nAA40\nFBE0\n0240\n1980\nE660\nENDCHAR\nSTARTCHAR U_9CE1\nENCODING 40161\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n40A0\n7FE0\n9480\nFF80\nACA0\nFFA0\nAD40\nFAA0\n0540\n3A60\nCBC0\nENDCHAR\nSTARTCHAR U_9CE2\nENCODING 40162\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n7FE0\n9AA0\nFFE0\nAAA0\nFFE0\nAA40\nFBC0\n0440\n3280\nCFE0\nENDCHAR\nSTARTCHAR U_9CE3\nENCODING 40163\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FE0\n92A0\nFAA0\nABA0\nF820\nAFE0\nFA40\n03C0\n3A40\nC7E0\nENDCHAR\nSTARTCHAR U_9CE4\nENCODING 40164\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\n7BE0\n96C0\nF920\nAFE0\nFC20\nABC0\nFA40\n03E0\n1A20\nE3E0\nENDCHAR\nSTARTCHAR U_9CE5\nENCODING 40165\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3FE0\n2000\n3FE0\n5520\n4AA0\n8040\nENDCHAR\nSTARTCHAR U_9CE6\nENCODING 40166\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBC0\n8840\nF840\n8880\nFC80\n8100\nFD00\n0620\nAE20\nA9E0\nENDCHAR\nSTARTCHAR U_9CE7\nENCODING 40167\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3FE0\n52A0\n9F40\n1100\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_9CE8\nENCODING 40168\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7900\n4900\n7BE0\n4920\n7D20\n4120\n7D20\n0520\nD6A0\nAA40\nENDCHAR\nSTARTCHAR U_9CE9\nENCODING 40169\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\nF440\n57C0\n5440\n57E0\n5400\n5FE0\n5560\n8AA0\n0040\nENDCHAR\nSTARTCHAR U_9CEA\nENCODING 40170\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\n4440\n67C0\n5440\n47E0\n4400\n47E0\n4AA0\n5560\n4040\nENDCHAR\nSTARTCHAR U_9CEB\nENCODING 40171\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FE0\n2200\n2FC0\n2840\n2FC0\n2840\n2FE0\n2800\n4FE0\n4AA0\n9560\nENDCHAR\nSTARTCHAR U_9CEC\nENCODING 40172\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n3F80\n2080\n3FC0\n2000\n3FC0\n1240\n1220\n61E0\nENDCHAR\nSTARTCHAR U_9CED\nENCODING 40173\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n4A40\n4BC0\n4A40\n4BE0\n4A00\n4BE0\n4AA0\n6D60\n9040\nENDCHAR\nSTARTCHAR U_9CEE\nENCODING 40174\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nF7C0\n1440\n97C0\n5440\n27E0\n2400\n57E0\n9020\n0AA0\n0D40\nENDCHAR\nSTARTCHAR U_9CEF\nENCODING 40175\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4840\n5E40\n5240\n5E40\n5240\n5F40\n5040\n5F40\n5560\nAB20\nENDCHAR\nSTARTCHAR U_9CF0\nENCODING 40176\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n47C0\n2440\n27C0\n2440\n57E0\n5400\n4FE0\n8820\n82A0\n0540\nENDCHAR\nSTARTCHAR U_9CF1\nENCODING 40177\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFC0\n2440\n27C0\nFC40\n27E0\n2400\n27E0\n2AA0\n2DA0\n2040\nENDCHAR\nSTARTCHAR U_9CF2\nENCODING 40178\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7BC0\n4A40\n4BC0\n7A40\n43E0\n4200\n43E0\n42A0\n8560\n8040\nENDCHAR\nSTARTCHAR U_9CF3\nENCODING 40179\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFF80\n8880\nBE80\nA280\nBE80\nA280\nBF80\nA0A0\nBFA0\nD560\nAB20\nENDCHAR\nSTARTCHAR U_9CF4\nENCODING 40180\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9440\n97C0\n9440\n97E0\nF400\n07E0\n0AA0\n1560\n0040\nENDCHAR\nSTARTCHAR U_9CF5\nENCODING 40181\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n53C0\n5240\n53C0\nF240\n53E0\n5600\n53E0\n52A0\n4D60\n4840\nENDCHAR\nSTARTCHAR U_9CF6\nENCODING 40182\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0400\n0A20\n3FE0\n2100\n3F00\n2100\n3FC0\n5540\n8AC0\nENDCHAR\nSTARTCHAR U_9CF7\nENCODING 40183\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFC0\n1240\n13C0\nFE40\n4BE0\n4A00\n2BE0\n12A0\n2D60\nC540\nENDCHAR\nSTARTCHAR U_9CF8\nENCODING 40184\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4020\n7FE0\n4400\n5FC0\n5240\n5FE0\n5000\n9FE0\nAAA0\nENDCHAR\nSTARTCHAR U_9CF9\nENCODING 40185\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\n5240\n8BC0\n2640\n13E0\nFA00\n0BE0\n12A0\n1560\n2040\nENDCHAR\nSTARTCHAR U_9CFA\nENCODING 40186\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\nFA40\n23C0\n2240\nFFE0\n2200\n33E0\n2AA0\n4D60\n8040\nENDCHAR\nSTARTCHAR U_9CFB\nENCODING 40187\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n53C0\n4A40\n8BC0\n0640\nFBE0\n2A00\n2BE0\n2AA0\n6D60\n9040\nENDCHAR\nSTARTCHAR U_9CFC\nENCODING 40188\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n23C0\nFE40\n0BC0\n4A40\n2BE0\n1200\n13E0\n2AA0\n4D60\n8040\nENDCHAR\nSTARTCHAR U_9CFD\nENCODING 40189\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n5240\n53C0\n5240\nFBE0\n5200\n53E0\n5AA0\n5560\n9040\nENDCHAR\nSTARTCHAR U_9CFE\nENCODING 40190\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n2240\nFBC0\nAA40\nABE0\nAA00\nABE0\nB820\n26A0\n2540\nENDCHAR\nSTARTCHAR U_9CFF\nENCODING 40191\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n2240\n23C0\n2240\nFBE0\n2200\n23E0\n3AA0\nC560\n0040\nENDCHAR\nSTARTCHAR U_9D00\nENCODING 40192\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFC0\n1440\n27C0\n2440\n77E0\n6C00\nA7E0\n2520\n2AA0\n2040\nENDCHAR\nSTARTCHAR U_9D01\nENCODING 40193\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7BC0\n2240\n23C0\nFA40\n23E0\n2200\n53E0\n4820\n82A0\n0540\nENDCHAR\nSTARTCHAR U_9D02\nENCODING 40194\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\nFA40\n2BC0\n2A40\nFFE0\n2200\n33E0\n4820\n46A0\n8540\nENDCHAR\nSTARTCHAR U_9D03\nENCODING 40195\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF100\n93C0\nF140\n9140\nFFE0\n8100\nF900\n5A80\nAA40\n9420\nENDCHAR\nSTARTCHAR U_9D04\nENCODING 40196\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\nABC0\nAA40\nABC0\nAA40\nABE0\nAA00\nCFE0\n82A0\nFD60\n0040\nENDCHAR\nSTARTCHAR U_9D05\nENCODING 40197\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n6A40\n5BC0\n4A40\nFFE0\n4A00\n4BE0\n4AA0\n4D60\n9840\nENDCHAR\nSTARTCHAR U_9D06\nENCODING 40198\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\nFA40\nABC0\n2240\n33E0\n3200\n37E0\n3AA0\n5560\n8040\nENDCHAR\nSTARTCHAR U_9D07\nENCODING 40199\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n53C0\n6240\n4BC0\n7A40\n23E0\nFA00\n23E0\n22A0\n2560\n2040\nENDCHAR\nSTARTCHAR U_9D08\nENCODING 40200\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4900\n4BC0\n5240\n53C0\n7240\n53E0\n5200\n53E0\n92A0\n9560\nENDCHAR\nSTARTCHAR U_9D09\nENCODING 40201\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n5240\n93C0\nFE40\n33E0\n3200\n53E0\n92A0\n5560\n2040\nENDCHAR\nSTARTCHAR U_9D0A\nENCODING 40202\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FC0\n1440\n57C0\n5C40\n57E0\n5400\n57E0\n5820\nE6A0\n0540\nENDCHAR\nSTARTCHAR U_9D0B\nENCODING 40203\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n27C0\nFC40\n47C0\n7440\n57E0\n5400\n57E0\n5020\n9AA0\n3540\nENDCHAR\nSTARTCHAR U_9D0C\nENCODING 40204\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n1100\n2880\nFFE0\n2880\n2480\n3FE0\n5520\n8AE0\nENDCHAR\nSTARTCHAR U_9D0D\nENCODING 40205\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1100\n0E00\nF1E0\n0800\n3F80\n2480\n2280\n3FE0\nD520\nENDCHAR\nSTARTCHAR U_9D0E\nENCODING 40206\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n8A40\nCBC0\nB240\n93E0\nAA00\nCBE0\nF820\n06A0\n0540\nENDCHAR\nSTARTCHAR U_9D0F\nENCODING 40207\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22C0\n7AA0\n4A80\n7FE0\n4A80\n7E80\n4280\n7AA0\n0AA0\nAA60\n5A20\nENDCHAR\nSTARTCHAR U_9D10\nENCODING 40208\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7DE0\n2520\n49E0\nBF80\n2080\n3F80\n2080\n3FE0\n5520\n92A0\nENDCHAR\nSTARTCHAR U_9D11\nENCODING 40209\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFBC0\n5240\n3180\nCA60\n3F80\n2480\n3FE0\n2000\n3FE0\nD560\nENDCHAR\nSTARTCHAR U_9D12\nENCODING 40210\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\n5240\n4BC0\nA640\n13E0\nFE00\n0BE0\n52A0\n2560\n1040\nENDCHAR\nSTARTCHAR U_9D13\nENCODING 40211\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2BC0\n4A40\n4BC0\n5240\nD7E0\nE600\n63E0\n4820\nBAA0\n0560\nENDCHAR\nSTARTCHAR U_9D14\nENCODING 40212\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nF3C0\n2240\n13C0\nFA40\n0BE0\n1200\n23E0\n4020\nA2A0\n1D60\nENDCHAR\nSTARTCHAR U_9D15\nENCODING 40213\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7BE0\n4A20\n7800\n4900\n7D20\n4140\n7D80\n5520\nAD20\n08E0\nENDCHAR\nSTARTCHAR U_9D16\nENCODING 40214\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n8A40\nFBC0\nA240\nFBE0\nA200\nA3E0\nA820\nDAA0\n8D40\nENDCHAR\nSTARTCHAR U_9D17\nENCODING 40215\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n23C0\nFA40\n03C0\n4A40\n4BE0\n3200\n23E0\n1AA0\nE560\n0060\nENDCHAR\nSTARTCHAR U_9D18\nENCODING 40216\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\n4A40\nFFC0\n5240\n53E0\nFE00\n53E0\n52A0\n5560\n9040\nENDCHAR\nSTARTCHAR U_9D19\nENCODING 40217\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n43C0\n7A40\nA3C0\n2240\nFBE0\n2200\n23E0\n32A0\n4D60\n8040\nENDCHAR\nSTARTCHAR U_9D1A\nENCODING 40218\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n7BE0\n4820\n7BA0\n4AA0\n7EA0\n43A0\n7C20\n0420\nD420\nAC60\nENDCHAR\nSTARTCHAR U_9D1B\nENCODING 40219\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\nD2A0\n2A60\n7F80\nA080\n3F80\n2080\n3FE0\n5520\n8AC0\nENDCHAR\nSTARTCHAR U_9D1C\nENCODING 40220\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n5BC0\n5220\nF9E0\n0800\n3F80\n2480\n3FC0\n2000\n3FC0\n5540\nENDCHAR\nSTARTCHAR U_9D1D\nENCODING 40221\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n43C0\nFA40\n0BC0\nEA40\nABE0\nAA00\nEBE0\n0AA0\n2D60\n1040\nENDCHAR\nSTARTCHAR U_9D1E\nENCODING 40222\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n93C0\n9240\nF3C0\n0240\nFBE0\n4200\n73E0\n12A0\n5560\n2040\nENDCHAR\nSTARTCHAR U_9D1F\nENCODING 40223\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nF3C0\n9240\n93C0\nFE40\n93E0\n9200\n93E0\nAAA0\nED60\n9440\nENDCHAR\nSTARTCHAR U_9D20\nENCODING 40224\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7BC0\n4A40\n4BC0\n7A40\n4BE0\n7A00\n03E0\n1AA0\nE560\n0040\nENDCHAR\nSTARTCHAR U_9D21\nENCODING 40225\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7BC0\n4A40\n7BC0\n4A40\n7BE0\n4A00\n4BE0\n5C20\nE2A0\n0560\nENDCHAR\nSTARTCHAR U_9D22\nENCODING 40226\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n57C0\n7C40\n97C0\nB440\nF7E0\n5400\n97E0\nF420\n26A0\n4D60\nENDCHAR\nSTARTCHAR U_9D23\nENCODING 40227\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\nFA40\n23C0\n2240\nFBE0\n8A00\n8BE0\nFAA0\n0560\n0060\nENDCHAR\nSTARTCHAR U_9D24\nENCODING 40228\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n79E0\n4A20\n7D40\n4880\n7D40\n4220\n7C80\n0440\n5480\nAC40\nENDCHAR\nSTARTCHAR U_9D25\nENCODING 40229\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\nFBE0\n8A20\nF800\n8940\nFD40\n8140\nF940\n5A20\nAA20\n1C20\nENDCHAR\nSTARTCHAR U_9D26\nENCODING 40230\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\nFFE0\n2880\n7FC0\nA0A0\n3F80\n2080\n3FE0\n5520\n8AE0\nENDCHAR\nSTARTCHAR U_9D27\nENCODING 40231\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n8A40\n03C0\n7240\n53E0\n5200\n57E0\n5820\n92A0\n0560\nENDCHAR\nSTARTCHAR U_9D28\nENCODING 40232\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\nAA40\nFBC0\nAA40\nFBE0\n2200\n23E0\n22A0\n2560\n2040\nENDCHAR\nSTARTCHAR U_9D29\nENCODING 40233\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nA3C0\nA240\nFBC0\n2240\n23E0\nFE00\n23E0\n32A0\n4D60\n8040\nENDCHAR\nSTARTCHAR U_9D2A\nENCODING 40234\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n23C0\nFA40\n8BC0\n0240\n53E0\n4A00\n4BE0\n8020\n8AA0\n0540\nENDCHAR\nSTARTCHAR U_9D2B\nENCODING 40235\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\nAA40\nABC0\nFA40\nABE0\nAA00\nFBE0\n0020\n06A0\n0540\nENDCHAR\nSTARTCHAR U_9D2C\nENCODING 40236\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2500\nFFE0\n8840\n3F80\n2480\n3FC0\n2000\n3FC0\n5540\n8AC0\nENDCHAR\nSTARTCHAR U_9D2D\nENCODING 40237\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7C0\n9440\n97C0\nF440\n87E0\nF400\n97E0\n9020\nFAA0\n0540\nENDCHAR\nSTARTCHAR U_9D2E\nENCODING 40238\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n4A40\nFFC0\n0240\nFFE0\n2200\n7BE0\n0AA0\n2D60\n1040\nENDCHAR\nSTARTCHAR U_9D2F\nENCODING 40239\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFC0\n2240\nFFC0\nAA40\nABE0\nAA00\nABE0\nAAA0\nAD60\n9840\nENDCHAR\nSTARTCHAR U_9D30\nENCODING 40240\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nE3C0\n2240\nFFC0\n2240\n23E0\nFA00\n8BE0\n8AA0\nFD60\n8840\nENDCHAR\nSTARTCHAR U_9D31\nENCODING 40241\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\nFFC0\n2A40\n03C0\n0240\n4BE0\n2A00\n13E0\n2AA0\n4560\n8040\nENDCHAR\nSTARTCHAR U_9D32\nENCODING 40242\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\nB7C0\nC440\n97C0\n7440\n07E0\nF400\n97E0\nF020\n92A0\nF540\nENDCHAR\nSTARTCHAR U_9D33\nENCODING 40243\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n13C0\nFE40\nABC0\n2240\nFBE0\n4A00\n4BE0\n32A0\n2D60\nC040\nENDCHAR\nSTARTCHAR U_9D34\nENCODING 40244\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5BC0\n8240\n7FC0\n4A40\nCBE0\n4A00\n4BE0\n4820\n6AA0\n5540\nENDCHAR\nSTARTCHAR U_9D35\nENCODING 40245\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n2BC0\nAE40\n6BC0\n2A40\n6FE0\nAA00\n2BE0\n2820\n4EA0\n8540\nENDCHAR\nSTARTCHAR U_9D36\nENCODING 40246\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n13C0\nFE40\n13C0\n7E40\n03E0\n7A00\n4BE0\n4AA0\n7D60\n4840\nENDCHAR\nSTARTCHAR U_9D37\nENCODING 40247\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC40\n2140\n3D40\nC940\n3440\nFFC0\n2080\n3F80\n2080\n3FE0\nD2A0\nENDCHAR\nSTARTCHAR U_9D38\nENCODING 40248\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n53C0\n7A40\n93C0\n1240\nFFE0\n1200\n3BE0\n56A0\n9560\n1040\nENDCHAR\nSTARTCHAR U_9D39\nENCODING 40249\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\nFBC0\n2240\n7BC0\n2240\nFBE0\n2200\n23E0\n42A0\n4560\n8040\nENDCHAR\nSTARTCHAR U_9D3A\nENCODING 40250\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n2240\nFBC0\n2A40\nFBE0\nA200\nFBE0\n2820\n52A0\n8D60\nENDCHAR\nSTARTCHAR U_9D3B\nENCODING 40251\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n5FC0\n0A40\nABC0\n6A40\n2BE0\n2E00\nDBE0\n42A0\n4560\n4040\nENDCHAR\nSTARTCHAR U_9D3C\nENCODING 40252\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n79C0\n4E40\n7980\n4A40\n7C20\n43C0\n7A40\n0A40\nAA40\n5BC0\nENDCHAR\nSTARTCHAR U_9D3D\nENCODING 40253\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFC0\n4A40\n33C0\nCC00\n3F80\n2080\n3F80\n2080\n3FE0\nCAA0\nENDCHAR\nSTARTCHAR U_9D3E\nENCODING 40254\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4BC0\nFE40\n13C0\n5240\n7FE0\n9200\nFFE0\n12A0\n1560\n1040\nENDCHAR\nSTARTCHAR U_9D3F\nENCODING 40255\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n23C0\n5240\n8BC0\n7240\n03E0\n7A00\n4BE0\n4AA0\n7D60\n4840\nENDCHAR\nSTARTCHAR U_9D40\nENCODING 40256\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2FC0\n4200\nDFE0\n4200\n4FC0\n1000\n3F80\n2480\n2280\n3FE0\nD4A0\nENDCHAR\nSTARTCHAR U_9D41\nENCODING 40257\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n13C0\nFE40\n2BC0\n4640\nABE0\n2A00\n13E0\n2AA0\n4560\n8040\nENDCHAR\nSTARTCHAR U_9D42\nENCODING 40258\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n2BC0\n4A40\n5FC0\nCA40\n4FE0\n5A00\n6BE0\n4AA0\n4D60\n4D40\nENDCHAR\nSTARTCHAR U_9D43\nENCODING 40259\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7BC0\n4A40\n6BC0\n5A40\nFBE0\n4A00\n6BE0\n5AA0\n4D60\n5D40\nENDCHAR\nSTARTCHAR U_9D44\nENCODING 40260\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n2240\n53C0\nFA40\n23E0\nFA00\n23E0\n3820\nC6A0\n0540\nENDCHAR\nSTARTCHAR U_9D45\nENCODING 40261\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3BC0\n4A40\nABC0\n3240\n4BE0\nFA00\n4BE0\n4AA0\n7D60\n4D40\nENDCHAR\nSTARTCHAR U_9D46\nENCODING 40262\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2400\n2EC0\n4A00\nAFE0\n2A40\n4F40\nC840\n4F40\n4140\n5540\n6BC0\nENDCHAR\nSTARTCHAR U_9D47\nENCODING 40263\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BC0\n5240\n93C0\n7A40\n53E0\n5200\nFBE0\n1020\n12A0\n1540\nENDCHAR\nSTARTCHAR U_9D48\nENCODING 40264\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0080\nFFC0\n4A40\n7BC0\n4A40\n7BE0\n4A00\n4FE0\nF820\n0AA0\n0D40\nENDCHAR\nSTARTCHAR U_9D49\nENCODING 40265\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n5280\n9A40\n7F80\n4480\n7FC0\n4000\n7FC0\nAA40\n9540\nENDCHAR\nSTARTCHAR U_9D4A\nENCODING 40266\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFC0\n1240\n57C0\n5A40\nB7E0\n1200\n13E0\n2AA0\n4560\n8040\nENDCHAR\nSTARTCHAR U_9D4B\nENCODING 40267\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7BC0\n0A40\n7BC0\n4640\n7FE0\n1200\n2BE0\n6420\nAAA0\n1D40\nENDCHAR\nSTARTCHAR U_9D4C\nENCODING 40268\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nF940\n8A20\nFDC0\n8880\nFFE0\n8080\nFDC0\n56A0\nACA0\nA980\nENDCHAR\nSTARTCHAR U_9D4D\nENCODING 40269\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n8A40\n73C0\n0240\nFFE0\n5200\n53E0\n5820\n5560\n82A0\nENDCHAR\nSTARTCHAR U_9D4E\nENCODING 40270\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1D00\nE7C0\nAA40\n53C0\n1240\nFFE0\n2A00\n6BE0\n1020\n2D60\nC2A0\nENDCHAR\nSTARTCHAR U_9D4F\nENCODING 40271\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\n2BC0\nFA40\n23C0\nFA40\nABE0\nFA00\nABE0\nFAA0\nAD60\nB940\nENDCHAR\nSTARTCHAR U_9D50\nENCODING 40272\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n2240\n6BC0\n6A40\n6BE0\nB600\n23E0\n3820\nE560\n02A0\nENDCHAR\nSTARTCHAR U_9D51\nENCODING 40273\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8BC0\nFA40\n03C0\nFA40\n8BE0\nFA00\n8BE0\nFAA0\n8D60\n9840\nENDCHAR\nSTARTCHAR U_9D52\nENCODING 40274\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4BC0\n8640\n23C0\n4A40\n87E0\n7A00\n4BE0\n4AA0\n7D60\n4D40\nENDCHAR\nSTARTCHAR U_9D53\nENCODING 40275\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n2240\nFBC0\n8A40\nFBE0\n1200\n23E0\nFAA0\n2560\n6060\nENDCHAR\nSTARTCHAR U_9D54\nENCODING 40276\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7A40\n4FA0\n7940\n4A20\n7D00\n43C0\n7D40\n5480\nAD40\nAA20\nENDCHAR\nSTARTCHAR U_9D55\nENCODING 40277\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4BC0\nFE40\n4BC0\nA640\n7BE0\n4A00\nABE0\n1020\n2D60\nCAA0\nENDCHAR\nSTARTCHAR U_9D56\nENCODING 40278\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9440\nF7C0\n9440\nF7E0\n8400\nA7E0\nB2A0\nD5A0\n8060\nENDCHAR\nSTARTCHAR U_9D57\nENCODING 40279\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n33C0\n4A40\n23C0\nFE40\n53E0\n7E00\nD7E0\n5420\n5EA0\n1560\nENDCHAR\nSTARTCHAR U_9D58\nENCODING 40280\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n2BC0\nFE40\n2BC0\n7A40\n23E0\n7A00\nCBE0\n4AA0\n7D60\n4840\nENDCHAR\nSTARTCHAR U_9D59\nENCODING 40281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n4A40\n7BC0\n4A40\n7BE0\n4A00\n7BE0\n22A0\n5560\n8D40\nENDCHAR\nSTARTCHAR U_9D5A\nENCODING 40282\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n13C0\nFE40\n33C0\n5A40\n97E0\n7A00\n4BE0\n4AA0\n4D60\n8540\nENDCHAR\nSTARTCHAR U_9D5B\nENCODING 40283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n57C0\nAA40\nABC0\n5640\n03E0\nFA00\n23E0\n22A0\n3D60\nC040\nENDCHAR\nSTARTCHAR U_9D5C\nENCODING 40284\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n53C0\nFA40\n2BC0\nFA40\nA3E0\nFA00\n2BE0\n6AA0\nBD60\n2540\nENDCHAR\nSTARTCHAR U_9D5D\nENCODING 40285\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nDBC0\n5640\nFFC0\n5240\n73E0\nD600\n5BE0\n52A0\n6D60\nC540\nENDCHAR\nSTARTCHAR U_9D5E\nENCODING 40286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7A80\n1240\nFFE0\n1140\nF4A0\n3FA0\n2080\n3F80\n2080\n3FE0\nD520\nENDCHAR\nSTARTCHAR U_9D5F\nENCODING 40287\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n57E0\n3100\n5FC0\n3100\nD5E0\n3F80\n2080\n3F80\n2080\n3FE0\nD4A0\nENDCHAR\nSTARTCHAR U_9D60\nENCODING 40288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n53C0\n7A40\n93C0\nFE40\n03E0\n7A00\n4BE0\n4AA0\n7D60\n0040\nENDCHAR\nSTARTCHAR U_9D61\nENCODING 40289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nEFC0\n0A40\nFFC0\n2A40\n2BE0\nBA00\nABE0\nAAA0\nA560\nF540\nENDCHAR\nSTARTCHAR U_9D62\nENCODING 40290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BC0\n4A40\n7BC0\n4A40\n7FE0\n4A00\nFBE0\n2820\nCD60\n1AA0\nENDCHAR\nSTARTCHAR U_9D63\nENCODING 40291\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFC0\n1240\n7FC0\n5640\n7FE0\n1200\n3BE0\n5420\n9560\n12A0\nENDCHAR\nSTARTCHAR U_9D64\nENCODING 40292\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BC0\n9240\nFBC0\nAA40\nFBE0\nAA00\nFBE0\nA820\nAD60\n9AA0\nENDCHAR\nSTARTCHAR U_9D65\nENCODING 40293\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5420\nFEA0\n10A0\nFE20\n2860\n7F80\n2080\n3F80\n2080\n3FE0\nD520\nENDCHAR\nSTARTCHAR U_9D66\nENCODING 40294\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4780\nF080\n9780\nF080\n9FE0\nF100\n8540\nFB80\n0D40\nD920\nAB00\nENDCHAR\nSTARTCHAR U_9D67\nENCODING 40295\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8900\n53C0\nFE40\n53C0\n5240\nFFE0\n5200\n53E0\n52A0\n5560\n9040\nENDCHAR\nSTARTCHAR U_9D68\nENCODING 40296\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\n4BC0\n8640\n7BC0\n1240\nFFE0\n1200\n7BE0\n4AA0\n7D60\n4840\nENDCHAR\nSTARTCHAR U_9D69\nENCODING 40297\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nABC0\nAA40\nFBC0\nA240\nBFE0\nE600\nBBE0\nAAA0\nB560\nA440\nENDCHAR\nSTARTCHAR U_9D6A\nENCODING 40298\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFC0\n2A40\n47C0\nFA40\nABE0\nFA00\nABE0\nFAA0\n2D60\n3040\nENDCHAR\nSTARTCHAR U_9D6B\nENCODING 40299\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3BC0\n2240\nFBC0\n8A40\nFBE0\n8A00\nFBE0\n22A0\nFD60\n2040\nENDCHAR\nSTARTCHAR U_9D6C\nENCODING 40300\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nABC0\nAA40\nFBC0\nAA40\nFBE0\nAA00\nABE0\nAAA0\nAD60\n5840\nENDCHAR\nSTARTCHAR U_9D6D\nENCODING 40301\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n13C0\n2A40\n7FC0\n9240\n7FE0\n1600\n5BE0\n3020\n1D60\nE2A0\nENDCHAR\nSTARTCHAR U_9D6E\nENCODING 40302\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BC0\n9240\n43C0\n9A40\n8BE0\nDA00\n8BE0\n8820\nFD60\n02A0\nENDCHAR\nSTARTCHAR U_9D6F\nENCODING 40303\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\nAA40\nFBC0\nAA40\nFBE0\n2200\n53E0\nFEA0\n1560\n1040\nENDCHAR\nSTARTCHAR U_9D70\nENCODING 40304\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nABC0\nFA40\nABC0\nFA40\n8BE0\nBA00\nABE0\nBAA0\n8D60\n9840\nENDCHAR\nSTARTCHAR U_9D71\nENCODING 40305\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1240\nFFC0\n2A40\n47E0\n9200\n7BE0\n12A0\n1D60\nE040\nENDCHAR\nSTARTCHAR U_9D72\nENCODING 40306\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFFC0\n5240\nFFC0\n0240\n7BE0\n4A00\n7BE0\n4AA0\n7D60\n4840\nENDCHAR\nSTARTCHAR U_9D73\nENCODING 40307\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n8A40\nFBC0\n8240\nBBE0\nAA00\nBBE0\nAAA0\nBD60\nA840\nENDCHAR\nSTARTCHAR U_9D74\nENCODING 40308\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BC0\nAA40\n7BC0\n2A40\nFBE0\n2A00\n7BE0\nAAA0\n2D60\n1040\nENDCHAR\nSTARTCHAR U_9D75\nENCODING 40309\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BC0\n9240\nFBC0\nAA40\nFBE0\n3200\n3BE0\n36A0\n5D60\n9040\nENDCHAR\nSTARTCHAR U_9D76\nENCODING 40310\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n5240\n53C0\nDA40\n8BE0\nDA00\n53E0\n5820\nE560\n02A0\nENDCHAR\nSTARTCHAR U_9D77\nENCODING 40311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFC0\n8640\n43C0\n7E40\n97E0\n5600\n3FE0\n32A0\n5D60\n9040\nENDCHAR\nSTARTCHAR U_9D78\nENCODING 40312\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n3240\n4BC0\nFE40\n0BE0\nEA00\nABE0\nEAA0\n0D60\n1840\nENDCHAR\nSTARTCHAR U_9D79\nENCODING 40313\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n21E0\nFEA0\n6920\nBFC0\n2080\n3F80\n2080\n3FE0\n5520\n94C0\nENDCHAR\nSTARTCHAR U_9D7A\nENCODING 40314\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n13C0\nFE40\n53C0\n5E40\n67E0\nDE00\n4BE0\n5420\n6560\n42A0\nENDCHAR\nSTARTCHAR U_9D7B\nENCODING 40315\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n7940\n49E0\n7B40\n49E0\n7D40\n4140\n7DE0\n5540\nAD40\nA9E0\nENDCHAR\nSTARTCHAR U_9D7C\nENCODING 40316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n23C0\nFA40\n8BC0\n5240\n8BE0\n7200\n23E0\n2820\n3560\nE2A0\nENDCHAR\nSTARTCHAR U_9D7D\nENCODING 40317\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\nA7C0\n5640\nABC0\n9640\n03E0\nFE00\n27E0\nB820\n4AA0\nB560\nENDCHAR\nSTARTCHAR U_9D7E\nENCODING 40318\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8BC0\nFA40\n8BC0\nFA40\n93E0\nFE00\n93E0\nB020\nDD60\n92A0\nENDCHAR\nSTARTCHAR U_9D7F\nENCODING 40319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\n7A20\n4BE0\n7A20\n4BE0\n7F40\n4140\n7FE0\n5540\nAD40\nAA40\nENDCHAR\nSTARTCHAR U_9D80\nENCODING 40320\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nF240\n97E0\nF240\n93C0\nFA40\n83C0\nFA40\n0FE0\nAA40\n5C20\nENDCHAR\nSTARTCHAR U_9D81\nENCODING 40321\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n0240\n73C0\n5240\n73E0\n2200\n73E0\nAAA0\n2560\n6040\nENDCHAR\nSTARTCHAR U_9D82\nENCODING 40322\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nDBC0\n8A40\n8BC0\nDA40\n8BE0\nFA00\n53E0\n5560\n5AA0\n92C0\nENDCHAR\nSTARTCHAR U_9D83\nENCODING 40323\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF660\n9420\nF6E0\n9420\nF7E0\n8280\nFA80\n0AA0\nDAA0\nAC60\nENDCHAR\nSTARTCHAR U_9D84\nENCODING 40324\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n23C0\nFA40\n23C0\nFE40\n4BE0\n7A00\n4BE0\n7D60\n4AA0\n5840\nENDCHAR\nSTARTCHAR U_9D85\nENCODING 40325\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n57C0\nAA40\nABC0\n5640\n03E0\nFA00\nABE0\nF960\nAAA0\nF840\nENDCHAR\nSTARTCHAR U_9D86\nENCODING 40326\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFC0\n1240\n57C0\n5A40\nB7E0\n1200\n3BE0\n5560\n92A0\n1060\nENDCHAR\nSTARTCHAR U_9D87\nENCODING 40327\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFC0\n2240\nFBC0\nAA40\nFBE0\nAA00\nFBE0\n2160\n72A0\nAAC0\nENDCHAR\nSTARTCHAR U_9D88\nENCODING 40328\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFC0\n2A40\nFFC0\n2A40\nFBE0\n2A00\nFFE0\n5160\n32A0\nCAC0\nENDCHAR\nSTARTCHAR U_9D89\nENCODING 40329\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFC0\n4A40\n7BC0\n0240\n7BE0\n0A00\n13E0\nFAA0\n1560\n7540\nENDCHAR\nSTARTCHAR U_9D8A\nENCODING 40330\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFC0\nA240\nFBC0\nAE40\nFBE0\nAA00\nFBE0\nA2A0\nB560\nCD40\nENDCHAR\nSTARTCHAR U_9D8B\nENCODING 40331\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8BC0\nFA40\n93C0\nFE40\n93E0\n9200\nBBE0\nAAA0\nAD60\nB860\nENDCHAR\nSTARTCHAR U_9D8C\nENCODING 40332\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\n8BC0\nFA40\nA3C0\nAA40\nABE0\nFA00\nA3E0\nAAA0\nAD60\nF840\nENDCHAR\nSTARTCHAR U_9D8D\nENCODING 40333\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8BC0\nFA40\n8BC0\nFA40\n43E0\nFA00\n5BE0\nA820\n4D60\n12A0\nENDCHAR\nSTARTCHAR U_9D8E\nENCODING 40334\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n8A40\n73C0\n0240\nFFE0\n2200\n73E0\nA820\n2D60\n62A0\nENDCHAR\nSTARTCHAR U_9D8F\nENCODING 40335\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1D00\nEBC0\nAA40\n53C0\nFA40\n23E0\nFE00\n23E0\n2020\n5560\n8AA0\nENDCHAR\nSTARTCHAR U_9D90\nENCODING 40336\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8C80\n4BC0\n3F40\n09C0\nC940\n5FE0\n6B00\n49E0\n4820\n4AA0\nBD40\nENDCHAR\nSTARTCHAR U_9D91\nENCODING 40337\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n14A0\n5AC0\n5280\n2940\nC620\n3F80\n2080\n3F80\n2080\n3FE0\nD520\nENDCHAR\nSTARTCHAR U_9D92\nENCODING 40338\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2BC0\nFE40\n2BC0\nFA40\nABE0\nFA00\n2BE0\n7AA0\nAB60\n3660\nENDCHAR\nSTARTCHAR U_9D93\nENCODING 40339\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n53C0\nFA40\n53C0\nFA40\nABE0\nAA00\nFBE0\nA820\nAD60\nFAA0\nENDCHAR\nSTARTCHAR U_9D94\nENCODING 40340\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n2BC0\nFE40\n37C0\n5240\nB3E0\n1200\nFFE0\n3AA0\n5560\n9260\nENDCHAR\nSTARTCHAR U_9D95\nENCODING 40341\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFC0\n4640\n2BC0\nFE40\n03E0\n7A00\n4BE0\n7820\n4D60\n7AA0\nENDCHAR\nSTARTCHAR U_9D96\nENCODING 40342\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7100\n2540\nFD80\n7280\nAC60\n3F80\n2080\n3F80\n2080\n3FE0\nD4A0\nENDCHAR\nSTARTCHAR U_9D97\nENCODING 40343\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n7A40\n4BC0\n7A40\n03E0\nFA00\nA3E0\nBAA0\nE540\nBFE0\nENDCHAR\nSTARTCHAR U_9D98\nENCODING 40344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5C80\n55C0\nF540\n5DC0\n5540\nF5E0\n9500\n9DE0\nF560\n16A0\n2C60\nENDCHAR\nSTARTCHAR U_9D99\nENCODING 40345\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBC0\n5240\nFFC0\nA640\nFBE0\nAA00\nABE0\nAAA0\nBD60\n2060\nENDCHAR\nSTARTCHAR U_9D9A\nENCODING 40346\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nABC0\nFA40\n03C0\nFA40\n03E0\nFE00\n23E0\n7AA0\n0D60\n3040\nENDCHAR\nSTARTCHAR U_9D9B\nENCODING 40347\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n9480\nFBC0\n9240\nDFC0\n2240\nFBE0\n8A00\nFBE0\n8AA0\nFD60\n0040\nENDCHAR\nSTARTCHAR U_9D9C\nENCODING 40348\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\nFFC0\n2A40\nFFC0\n2A40\n13E0\nFE00\n37E0\n52A0\n95A0\n3060\nENDCHAR\nSTARTCHAR U_9D9D\nENCODING 40349\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n03C0\n7A40\n4BC0\n7A40\n03E0\nFA00\nABE0\nFAA0\nAD60\nF940\nENDCHAR\nSTARTCHAR U_9D9E\nENCODING 40350\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n93C0\nFA40\n93C0\nBA40\nABE0\nBA00\nABE0\nBAA0\nAD60\nB840\nENDCHAR\nSTARTCHAR U_9D9F\nENCODING 40351\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n8640\n2BC0\n4640\nABE0\n2600\nFFE0\n22A0\n5560\n8D20\nENDCHAR\nSTARTCHAR U_9DA0\nENCODING 40352\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\nABC0\nBA40\nABC0\nBA40\n93E0\nFE00\nABE0\n9AA0\nA560\nFD20\nENDCHAR\nSTARTCHAR U_9DA1\nENCODING 40353\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n7A40\n4BC0\n7A40\n23E0\n7E00\nD7E0\n6EA0\n7560\n0860\nENDCHAR\nSTARTCHAR U_9DA2\nENCODING 40354\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nE7C0\nAA40\nFBC0\n2240\nFFE0\n2200\n7BE0\nCAA0\n3560\nCC60\nENDCHAR\nSTARTCHAR U_9DA3\nENCODING 40355\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n8A40\n8BC0\nFA40\n83E0\nFE00\nABE0\nFEA0\nAB60\n8460\nENDCHAR\nSTARTCHAR U_9DA4\nENCODING 40356\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\nA7C0\nFE40\nABC0\nFA40\nABE0\nFA00\n23E0\nFAA0\n2560\n2060\nENDCHAR\nSTARTCHAR U_9DA5\nENCODING 40357\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n57C0\n7E40\n43C0\n7A40\n6BE0\n7A00\nABE0\nB820\nAD60\nBAA0\nENDCHAR\nSTARTCHAR U_9DA6\nENCODING 40358\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFE40\n23C0\n7A40\n4CC0\n7F00\n2100\n3F00\n2100\n3FE0\nD520\nENDCHAR\nSTARTCHAR U_9DA7\nENCODING 40359\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFBC0\n5240\n23C0\nFA40\nABE0\nFE00\n23E0\n32A0\n4D60\n8520\nENDCHAR\nSTARTCHAR U_9DA8\nENCODING 40360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n7A40\n0BC0\nFE40\n53E0\nB600\n5BE0\nB6A0\n5560\nA520\nENDCHAR\nSTARTCHAR U_9DA9\nENCODING 40361\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n29E0\nFF40\n5480\n9140\n3FA0\n2080\n3F80\n2080\n3FE0\nD4A0\nENDCHAR\nSTARTCHAR U_9DAA\nENCODING 40362\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n7A40\n4BC0\n7A40\n4BE0\n7A00\n2BE0\nFC20\n52A0\n8D60\nENDCHAR\nSTARTCHAR U_9DAB\nENCODING 40363\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n2240\nFBC0\nAA40\nABE0\nFA00\n23E0\n7020\nAD60\n22A0\nENDCHAR\nSTARTCHAR U_9DAC\nENCODING 40364\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\n6BC0\n9640\n7BC0\n4A40\n7BE0\n4A00\n7BE0\n6AA0\nAD60\n3860\nENDCHAR\nSTARTCHAR U_9DAD\nENCODING 40365\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nDFE0\n2100\nFBE0\n5420\nBFC0\n2080\n3F80\n2080\n3FE0\nD4A0\nENDCHAR\nSTARTCHAR U_9DAE\nENCODING 40366\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n0240\n73C0\n5240\nFBE0\n8A00\nEBE0\nA820\nED60\n9AA0\nENDCHAR\nSTARTCHAR U_9DAF\nENCODING 40367\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAD40\n2100\n5280\n7FE0\n8840\nBF80\n2080\n3F80\n2080\n3FE0\nD2A0\nENDCHAR\nSTARTCHAR U_9DB0\nENCODING 40368\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8BC0\nFA40\n03C0\nFA40\n8BE0\nFA00\n8BE0\nF820\n5560\n8AA0\nENDCHAR\nSTARTCHAR U_9DB1\nENCODING 40369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9120\n7FC0\n1100\nFFE0\n2840\n7FA0\nA480\n3FE0\nD520\nENDCHAR\nSTARTCHAR U_9DB2\nENCODING 40370\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2900\n47C0\nAA40\n7FC0\n0240\nEFE0\n2600\nB7E0\n6C20\nB6A0\n6D60\nENDCHAR\nSTARTCHAR U_9DB3\nENCODING 40371\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4800\nFFE0\n9480\nF7E0\n96A0\nFEA0\n92A0\nFEA0\n56E0\nB480\n3C80\nENDCHAR\nSTARTCHAR U_9DB4\nENCODING 40372\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBC0\nAA40\n53C0\nFA40\n53E0\n7A00\n53E0\n7C20\n52A0\n7D60\nENDCHAR\nSTARTCHAR U_9DB5\nENCODING 40373\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n7BC0\nAA40\nFBC0\n2A40\n53E0\nFA00\nABE0\nFAA0\n2D60\nD540\nENDCHAR\nSTARTCHAR U_9DB6\nENCODING 40374\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFC0\nAA40\nFFC0\nAA40\nFBE0\nA200\nFBE0\nCAA0\nFD60\n8D40\nENDCHAR\nSTARTCHAR U_9DB7\nENCODING 40375\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBC0\nAA40\nFBC0\n2240\nFBE0\n2200\nFFE0\n8820\n8AA0\nFD60\nENDCHAR\nSTARTCHAR U_9DB8\nENCODING 40376\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEC80\n25C0\nED40\n89C0\nED40\n25E0\nB500\n6DE0\nB420\n26A0\n6D60\nENDCHAR\nSTARTCHAR U_9DB9\nENCODING 40377\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nBBC0\nAA40\nEBC0\nAA40\n53E0\nFA00\nABE0\nF820\nAAA0\nFD40\nENDCHAR\nSTARTCHAR U_9DBA\nENCODING 40378\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\n73C0\nAA40\n53C0\nFE40\n4BE0\n7A00\n4BE0\n7AA0\n4D60\n5D40\nENDCHAR\nSTARTCHAR U_9DBB\nENCODING 40379\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n6A40\nFFC0\nCA40\n7BE0\n4A00\n7BE0\n4D20\n4AA0\n5840\nENDCHAR\nSTARTCHAR U_9DBC\nENCODING 40380\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nFFC0\n5240\nFBC0\n5A40\nFFE0\n5A00\nFBE0\n52A0\nDD60\n5540\nENDCHAR\nSTARTCHAR U_9DBD\nENCODING 40381\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n7BC0\nD240\n7BC0\n5240\n7BE0\n1200\nFFE0\n1020\n12A0\n1560\nENDCHAR\nSTARTCHAR U_9DBE\nENCODING 40382\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBE0\n2500\nFBC0\n9240\nF3E0\n9240\nF3E0\n22A0\nFD60\n2520\nENDCHAR\nSTARTCHAR U_9DBF\nENCODING 40383\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n2940\n7380\n2940\nFFE0\n2080\n3F80\n2080\n7FE0\n94A0\nENDCHAR\nSTARTCHAR U_9DC0\nENCODING 40384\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2BC0\nFE40\n4BC0\n9240\nFFE0\n4A00\n4BE0\nB420\nFEA0\n0560\nENDCHAR\nSTARTCHAR U_9DC1\nENCODING 40385\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2BC0\nFE40\n2BC0\n4640\n83E0\n7E00\n57E0\n5420\n56A0\nFD60\nENDCHAR\nSTARTCHAR U_9DC2\nENCODING 40386\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1D00\nEBC0\nAA40\n53C0\n7A40\nA3E0\nFA00\n23E0\nAAA0\nAD60\nF840\nENDCHAR\nSTARTCHAR U_9DC3\nENCODING 40387\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n7A40\n4BC0\nFE40\n8BE0\n2200\nFFE0\n5020\n22A0\nDD40\nENDCHAR\nSTARTCHAR U_9DC4\nENCODING 40388\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1D00\nEBC0\n5A40\n23C0\n5240\n2BE0\n7E00\n13E0\nFC20\n2AA0\nC540\nENDCHAR\nSTARTCHAR U_9DC5\nENCODING 40389\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n2BC0\nFE40\nABC0\nFE40\n13E0\nFE00\n33E0\n5820\n56A0\n9560\nENDCHAR\nSTARTCHAR U_9DC6\nENCODING 40390\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n63C0\n4A40\n7BC0\nAA40\nBBE0\nAA00\nBBE0\nA820\nFAA0\n4D60\nENDCHAR\nSTARTCHAR U_9DC7\nENCODING 40391\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\n7D40\n1140\nFF60\n9200\n7DC0\n4540\n7D40\n4480\n7F40\nAA20\nENDCHAR\nSTARTCHAR U_9DC8\nENCODING 40392\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF480\n94E0\nF480\n97E0\nFCA0\n87C0\nFCA0\n0DE0\nA940\n5A60\nENDCHAR\nSTARTCHAR U_9DC9\nENCODING 40393\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1C80\nF3C0\n9E40\n93C0\nFE40\n93E0\nFE00\n93E0\n9420\nBAA0\nAD40\nENDCHAR\nSTARTCHAR U_9DCA\nENCODING 40394\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n03C0\n7240\n53C0\n7240\n03E0\nFA00\nDBE0\nAAA0\nFD60\nA940\nENDCHAR\nSTARTCHAR U_9DCB\nENCODING 40395\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\nFFC0\n4A40\n33C0\n4A40\nFFE0\n1200\nFFE0\n1020\n5AA0\nB540\nENDCHAR\nSTARTCHAR U_9DCC\nENCODING 40396\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n43E0\nF280\n93C0\nF280\n93C0\nFA80\n83E0\nF820\n5AA0\nAD60\nA940\nENDCHAR\nSTARTCHAR U_9DCD\nENCODING 40397\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BC0\n4A40\n7BC0\n4A40\n7BE0\n1200\nFFE0\n3820\n56A0\n9560\nENDCHAR\nSTARTCHAR U_9DCE\nENCODING 40398\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\nCA40\nABC0\nFA40\n23E0\nFA00\n53E0\nA820\n76A0\n2560\nENDCHAR\nSTARTCHAR U_9DCF\nENCODING 40399\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n2240\n7BC0\n4A40\n6BE0\n5A00\n4BE0\nFC20\n4AA0\n8560\nENDCHAR\nSTARTCHAR U_9DD0\nENCODING 40400\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n7A40\n4BC0\nFE40\n83E0\nFE00\n83E0\nFC20\nAAA0\nB560\nENDCHAR\nSTARTCHAR U_9DD1\nENCODING 40401\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\n4BC0\n7E40\nABC0\n2640\n13E0\nFE00\n4BE0\n2820\n12A0\nFD40\nENDCHAR\nSTARTCHAR U_9DD2\nENCODING 40402\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\nAA40\nFBC0\nAA40\nFFE0\n1200\nFFE0\n5020\n12A0\n3540\nENDCHAR\nSTARTCHAR U_9DD3\nENCODING 40403\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFC0\nAA40\nABC0\nFE40\nABE0\nBA00\n83E0\nAAA0\nD560\n9540\nENDCHAR\nSTARTCHAR U_9DD4\nENCODING 40404\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFBE0\n2640\nF980\n5260\nBF80\n2080\n3F80\n2080\n3FE0\n5520\nENDCHAR\nSTARTCHAR U_9DD5\nENCODING 40405\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0500\nEFE0\nB900\nEFC0\n0900\n3FE0\n2480\n3FC0\n2000\n3FC0\nD540\nENDCHAR\nSTARTCHAR U_9DD6\nENCODING 40406\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n9240\nFFE0\n9240\nA980\nFE60\n0800\n3F80\n2480\n3FE0\nD2A0\nENDCHAR\nSTARTCHAR U_9DD7\nENCODING 40407\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n83C0\nBA40\nABC0\nBA40\n83E0\nFA00\nABE0\nFAA0\n8560\nFD40\nENDCHAR\nSTARTCHAR U_9DD8\nENCODING 40408\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFDE0\nAB40\nF880\n6940\nBFA0\n2080\n3F80\n2080\n3FE0\nD520\nENDCHAR\nSTARTCHAR U_9DD9\nENCODING 40409\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n5540\nFA40\n2520\n3F80\n2080\n3F80\n2080\n3FE0\nD4A0\nENDCHAR\nSTARTCHAR U_9DDA\nENCODING 40410\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\nB7C0\n6E40\nB7C0\n3240\n4BE0\nA600\n53E0\n2820\n12A0\n6540\nENDCHAR\nSTARTCHAR U_9DDB\nENCODING 40411\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n7FC0\n5540\n7FC0\n5540\n7DE0\n5500\n7DE0\n5420\n7EA0\n9560\nENDCHAR\nSTARTCHAR U_9DDC\nENCODING 40412\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\nAA40\nFFC0\nAA40\nFBE0\nAA00\nFFE0\n4820\n32A0\nCD40\nENDCHAR\nSTARTCHAR U_9DDD\nENCODING 40413\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nABC0\nFA40\nABC0\nFA40\nABE0\nFE00\nABE0\nFC20\n22A0\n2540\nENDCHAR\nSTARTCHAR U_9DDE\nENCODING 40414\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFDC0\n1140\nBBC0\n5540\nBBE0\n5500\nBBE0\n3020\n4AA0\n8560\nENDCHAR\nSTARTCHAR U_9DDF\nENCODING 40415\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFD00\n43E0\n7480\n57E0\n9240\n3FA0\n2480\n2280\n3FE0\nD2A0\nENDCHAR\nSTARTCHAR U_9DE0\nENCODING 40416\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BC0\n9240\nFBC0\nAA40\nFBE0\nAA00\nFBE0\n0020\nAAA0\nAD40\nENDCHAR\nSTARTCHAR U_9DE1\nENCODING 40417\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7FC0\nAA40\nABC0\nFE40\nABE0\nAA00\nFFE0\n0020\n56A0\nAD40\nENDCHAR\nSTARTCHAR U_9DE2\nENCODING 40418\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4900\n7DE0\n56A0\nFD40\nA220\n3F80\n2880\n2480\n3FE0\nD4A0\nENDCHAR\nSTARTCHAR U_9DE3\nENCODING 40419\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n2BC0\nFE40\nABC0\nFE40\n4BE0\n7A00\n4BE0\nFC20\n12A0\n1540\nENDCHAR\nSTARTCHAR U_9DE4\nENCODING 40420\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nABC0\nFA40\n03C0\nFA40\nABE0\nFA00\nABE0\nFC20\n22A0\n2560\nENDCHAR\nSTARTCHAR U_9DE5\nENCODING 40421\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n75C0\n2940\nFBE0\nAAA0\n3F80\n2080\n3F80\n2080\n3FE0\nD520\nENDCHAR\nSTARTCHAR U_9DE6\nENCODING 40422\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n7FC0\nD240\n7FC0\n5240\n7FE0\n5200\n7FE0\n5020\nAAA0\nAD40\nENDCHAR\nSTARTCHAR U_9DE7\nENCODING 40423\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n2240\nFFC0\n8640\n7BE0\n4A00\n7BE0\n5020\n3D60\nC2A0\nENDCHAR\nSTARTCHAR U_9DE8\nENCODING 40424\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\nFFC0\n2940\nFFC0\n5540\nFFE0\n5500\nFFE0\n1160\nFEA0\n12A0\nENDCHAR\nSTARTCHAR U_9DE9\nENCODING 40425\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA500\n69E0\nFF40\nA480\nED40\nBF20\n2100\n3F00\n2100\n3FE0\nD4A0\nENDCHAR\nSTARTCHAR U_9DEA\nENCODING 40426\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n0400\nFFE0\n8820\n3F80\n2480\n3FE0\n6A40\n95C0\nENDCHAR\nSTARTCHAR U_9DEB\nENCODING 40427\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFDC0\n1540\nFFC0\n9540\nFDE0\n9500\nFDE0\n9560\nDEA0\nD4A0\nENDCHAR\nSTARTCHAR U_9DEC\nENCODING 40428\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFBC0\n5240\nFFC0\n2240\nFBE0\nAA00\nFBE0\nAAA0\nFD60\n8860\nENDCHAR\nSTARTCHAR U_9DED\nENCODING 40429\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA7C0\n6A40\nFFC0\n6A40\nA7E0\nFA00\nABE0\nF820\nAAA0\nFD60\nENDCHAR\nSTARTCHAR U_9DEE\nENCODING 40430\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n23C0\nFE40\n4BC0\nBE40\n2BE0\nFE00\n87E0\nBEA0\nA560\nBD20\nENDCHAR\nSTARTCHAR U_9DEF\nENCODING 40431\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFC0\nAB40\n7DC0\nC740\n7DE0\n4500\n7DE0\n5820\n96A0\n3540\nENDCHAR\nSTARTCHAR U_9DF0\nENCODING 40432\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n1100\n1F00\nEAE0\n2E80\nE8E0\n1000\n3F80\n2480\n3FE0\nD4A0\nENDCHAR\nSTARTCHAR U_9DF1\nENCODING 40433\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BC0\n4A40\n7BC0\n4A40\n7BE0\n3A00\n57E0\nFC20\n12A0\n1560\nENDCHAR\nSTARTCHAR U_9DF2\nENCODING 40434\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\nFD20\n4BE0\n7A80\n54E0\nBF00\n2100\n3F00\n2100\n3FE0\nD4A0\nENDCHAR\nSTARTCHAR U_9DF3\nENCODING 40435\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE80\nABC0\nEE40\nABC0\nEE40\nBBE0\nAA00\nBBE0\nAA20\nBAA0\nCB60\nENDCHAR\nSTARTCHAR U_9DF4\nENCODING 40436\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nED00\nABC0\nEE40\nABC0\nEE40\n93E0\nFE00\n93E0\nBA20\nD6A0\n9360\nENDCHAR\nSTARTCHAR U_9DF5\nENCODING 40437\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8BC0\nFA40\n97C0\nFE40\n93E0\nFE00\nABE0\nF820\nAAA0\nBD40\nENDCHAR\nSTARTCHAR U_9DF6\nENCODING 40438\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\nABC0\nFE40\n4BC0\n7A40\n4BE0\n7A00\n4BE0\n7820\n4AA0\n8560\nENDCHAR\nSTARTCHAR U_9DF7\nENCODING 40439\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFFC0\n5240\nFBC0\nAA40\nDBE0\n8A00\nFBE0\n9020\n52A0\n3540\nENDCHAR\nSTARTCHAR U_9DF8\nENCODING 40440\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n29C0\nFD40\n55C0\n9140\nFFE0\nAB00\nFFE0\nAA20\nBAA0\n8760\nENDCHAR\nSTARTCHAR U_9DF9\nENCODING 40441\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n5500\n5FE0\n7500\n5FE0\n5040\n5FC0\n5040\n9FE0\n6AA0\nENDCHAR\nSTARTCHAR U_9DFA\nENCODING 40442\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF3C0\n9680\nF140\n27E0\nAA40\nFFC0\n4480\n7FE0\n4000\n7FE0\n94A0\nENDCHAR\nSTARTCHAR U_9DFB\nENCODING 40443\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\nEF80\nAAE0\nEEA0\nA0A0\nFFA0\n82A0\nFBA0\n4E40\nBAA0\nAF20\nENDCHAR\nSTARTCHAR U_9DFC\nENCODING 40444\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nABC0\nFA40\nABC0\nFA40\nABE0\nBA00\nABE0\nB820\n8AA0\n8D60\nENDCHAR\nSTARTCHAR U_9DFD\nENCODING 40445\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n75C0\n4A40\n75C0\n4A40\nFFE0\nA520\n3FC0\n2000\n3FE0\n5520\n94C0\nENDCHAR\nSTARTCHAR U_9DFE\nENCODING 40446\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n5240\nFFC0\n4A40\n7BE0\n4A00\n7BE0\n3020\n6AA0\nBD40\nENDCHAR\nSTARTCHAR U_9DFF\nENCODING 40447\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n47E0\n7D40\n67E0\nA480\n3FC0\n2040\n3FC0\n2040\n3FE0\nCAA0\nENDCHAR\nSTARTCHAR U_9E00\nENCODING 40448\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nABC0\nFA40\n43C0\nFA40\n2BE0\nFA00\nABE0\nF820\n2AA0\nD560\nENDCHAR\nSTARTCHAR U_9E01\nENCODING 40449\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n4000\n7FC0\n2080\nFF80\n95E0\nFEA0\n90E0\nFFA0\n95A0\nBAA0\nENDCHAR\nSTARTCHAR U_9E02\nENCODING 40450\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4C80\n35C0\n8940\n4FC0\n2540\n3FE0\n2900\nFFE0\n4960\n56A0\n6440\nENDCHAR\nSTARTCHAR U_9E03\nENCODING 40451\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\nF7E0\n9080\nF7E0\n9100\nFAA0\n87E0\nFAA0\n0FC0\n5AA0\nAF60\nENDCHAR\nSTARTCHAR U_9E04\nENCODING 40452\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n79E0\n4B40\nFC80\n4940\n9FA0\n2480\n3FE0\n2000\n3FE0\nD2A0\nENDCHAR\nSTARTCHAR U_9E05\nENCODING 40453\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nABC0\nFA40\n23C0\nFE40\n23E0\nFA00\n53E0\nFC20\n22A0\n2560\nENDCHAR\nSTARTCHAR U_9E06\nENCODING 40454\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3900\n23C0\nFE40\nA7C0\nFA40\nA7E0\nBE00\n93E0\nFEA0\nA960\nC420\nENDCHAR\nSTARTCHAR U_9E07\nENCODING 40455\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFDC0\nA540\n95C0\nFD40\n49E0\n7900\n49E0\n7AA0\n0560\nFC20\nENDCHAR\nSTARTCHAR U_9E08\nENCODING 40456\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAD00\n6BC0\nFE40\n2BC0\n7A40\n13E0\n7A00\n13E0\nFC20\n3AA0\n5560\nENDCHAR\nSTARTCHAR U_9E09\nENCODING 40457\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFC40\n37E0\n6AA0\nBFC0\n2080\n3F80\n2080\n3FE0\n5520\n92C0\nENDCHAR\nSTARTCHAR U_9E0A\nENCODING 40458\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0880\nFFC0\nA240\nB7C0\nEA40\n9FE0\nEA00\nBFE0\nA820\nEAA0\n8D40\nENDCHAR\nSTARTCHAR U_9E0B\nENCODING 40459\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFC0\nAA40\n57C0\nFE40\nABE0\nFE00\n03E0\nFAA0\n1560\n3520\nENDCHAR\nSTARTCHAR U_9E0C\nENCODING 40460\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4240\nFFE0\n9280\nF7E0\n9480\nFFC0\n8480\nFFE0\n0A40\nD980\nAE60\nENDCHAR\nSTARTCHAR U_9E0D\nENCODING 40461\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n57C0\n9240\nFFC0\nDA40\nB7E0\nDA00\nB7E0\nDA20\n92A0\n8760\nENDCHAR\nSTARTCHAR U_9E0E\nENCODING 40462\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7BC0\n4A40\nBFA0\n2080\n3F80\n2080\n3FE0\n5520\n8AE0\nENDCHAR\nSTARTCHAR U_9E0F\nENCODING 40463\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFBC0\n5240\nFBC0\n8A40\nFBE0\n5600\nBBE0\n5AA0\n9560\n2520\nENDCHAR\nSTARTCHAR U_9E10\nENCODING 40464\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n4BC0\nEA40\n5BC0\nEA40\n93E0\nFA00\n93E0\nFAA0\n9560\nFD20\nENDCHAR\nSTARTCHAR U_9E11\nENCODING 40465\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA4C0\n5EA0\nA1E0\n3E80\n6340\nBFA0\n2080\n3FE0\n2080\n3FE0\nD520\nENDCHAR\nSTARTCHAR U_9E12\nENCODING 40466\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6EC0\n4840\n6EC0\n4A40\nFFE0\n4840\nBFA0\n2480\n2280\n7FE0\n92A0\nENDCHAR\nSTARTCHAR U_9E13\nENCODING 40467\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n55C0\n7D40\n55C0\n7D40\n01E0\nFF00\nABE0\nFE20\nAAA0\nFF60\nENDCHAR\nSTARTCHAR U_9E14\nENCODING 40468\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n47E0\nF420\n97E0\nF240\n97E0\nFA40\n87E0\nFD40\n5BA0\nAD40\nAB20\nENDCHAR\nSTARTCHAR U_9E15\nENCODING 40469\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3900\n23C0\nFE40\nA7C0\nFA40\nABE0\nFA00\nABE0\nFEA0\n9560\nFD20\nENDCHAR\nSTARTCHAR U_9E16\nENCODING 40470\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n13C0\nFE40\nD7C0\n3A40\n57E0\n7A00\nD3E0\n7820\n52A0\n7D60\nENDCHAR\nSTARTCHAR U_9E17\nENCODING 40471\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE00\n53C0\nFC40\n4BC0\n4A20\n3FE0\n2080\n3F80\n2080\n3FE0\n4AA0\nENDCHAR\nSTARTCHAR U_9E18\nENCODING 40472\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n23C0\nFE40\nABC0\n7240\nABE0\n5E00\nF7E0\n5C20\nF560\n5EA0\nENDCHAR\nSTARTCHAR U_9E19\nENCODING 40473\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\n4BC0\nB640\nFFC0\nAA40\nFFE0\n0200\nFFE0\nAB60\nFEA0\nAA40\nENDCHAR\nSTARTCHAR U_9E1A\nENCODING 40474\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nABC0\nFA40\nABC0\nFA40\n53E0\nAA00\nFBE0\n5020\n26A0\nD960\nENDCHAR\nSTARTCHAR U_9E1B\nENCODING 40475\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n4BC0\nFA40\nABC0\nFA40\n53E0\n7E00\nD3E0\n7C20\n52A0\n7D60\nENDCHAR\nSTARTCHAR U_9E1C\nENCODING 40476\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nABC0\nFA40\nABC0\nFA40\n53E0\nFA00\n53E0\n7820\n52A0\n7D60\nENDCHAR\nSTARTCHAR U_9E1D\nENCODING 40477\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFE80\n01C0\nEF40\nABC0\nFD40\n95E0\nFF00\n95E0\nFE20\nA960\nBEA0\nENDCHAR\nSTARTCHAR U_9E1E\nENCODING 40478\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4440\nAEA0\n50E0\nEE40\n4AE0\nBFA0\n2080\n3FE0\n2080\n3FE0\nD4A0\nENDCHAR\nSTARTCHAR U_9E1F\nENCODING 40479\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2080\n2880\n2480\n2100\n3FE0\n0020\n7FA0\n0020\n01C0\nENDCHAR\nSTARTCHAR U_9E20\nENCODING 40480\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n47C0\nF440\n5540\n5540\n5480\n57E0\n5020\n5FA0\n9020\n80C0\nENDCHAR\nSTARTCHAR U_9E21\nENCODING 40481\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n1440\n9540\n5540\n2480\n27E0\n5020\n4FA0\n8020\n00C0\nENDCHAR\nSTARTCHAR U_9E22\nENCODING 40482\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0480\nFFE0\n1200\n3FA0\n2960\n2500\n2200\n3FC0\n0040\nFF40\n00C0\nENDCHAR\nSTARTCHAR U_9E23\nENCODING 40483\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF7C0\n9440\n9540\n9540\n9480\nF7E0\n0020\n0FA0\n0020\n00C0\nENDCHAR\nSTARTCHAR U_9E24\nENCODING 40484\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7BC0\n4A40\n4B40\n7AC0\n4200\n43E0\n4020\n47A0\n80A0\n8040\nENDCHAR\nSTARTCHAR U_9E25\nENCODING 40485\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n87C0\n9440\nD540\nA540\nA480\nD7E0\n9020\n87A0\nF820\n00C0\nENDCHAR\nSTARTCHAR U_9E26\nENCODING 40486\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFC0\n5440\n9540\nFD40\n3480\n37E0\n5020\n57A0\n9020\n3060\nENDCHAR\nSTARTCHAR U_9E27\nENCODING 40487\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n13C0\n2A40\n46C0\nFA40\n4BE0\n5820\n47A0\n4820\n38A0\n0040\nENDCHAR\nSTARTCHAR U_9E28\nENCODING 40488\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n77C0\n4440\n5540\n7540\n2480\nFFE0\n2020\n27A0\n2020\n20C0\nENDCHAR\nSTARTCHAR U_9E29\nENCODING 40489\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\nFC40\nAD40\n2540\n3480\n37E0\n3020\n5FA0\n5020\n80C0\nENDCHAR\nSTARTCHAR U_9E2A\nENCODING 40490\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n2440\nFD40\n2540\n2480\nFFE0\n8820\n8FA0\nF820\n00C0\nENDCHAR\nSTARTCHAR U_9E2B\nENCODING 40491\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n2440\n5540\n9540\nFC80\n17E0\n5820\n97A0\n1020\n30C0\nENDCHAR\nSTARTCHAR U_9E2C\nENCODING 40492\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3BC0\n2240\nFB40\n8AC0\n8A00\nFBE0\n8020\n87A0\n8020\n80C0\nENDCHAR\nSTARTCHAR U_9E2D\nENCODING 40493\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\nAA40\nFB40\nAAC0\nAA00\nFBE0\n2020\n2FA0\n2020\n20C0\nENDCHAR\nSTARTCHAR U_9E2E\nENCODING 40494\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\n7BC0\n4A40\n7AC0\n0240\nFBE0\n2020\n3BA0\n0820\n28A0\n1040\nENDCHAR\nSTARTCHAR U_9E2F\nENCODING 40495\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\nFFE0\n2480\nDF60\n1900\n1500\n1FC0\n0040\n7F40\n0080\nENDCHAR\nSTARTCHAR U_9E30\nENCODING 40496\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n13C0\n2A40\n5740\n92C0\n7A00\n0BE0\n5020\n27A0\n10A0\n0040\nENDCHAR\nSTARTCHAR U_9E31\nENCODING 40497\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C80\nF3C0\n9240\n9340\nFAC0\n9200\n93E0\n9020\n8FA0\nA8A0\nD440\nENDCHAR\nSTARTCHAR U_9E32\nENCODING 40498\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BC0\n8A40\n0B40\nEAC0\nAA00\nABE0\nE820\n0FA0\n2820\n10C0\nENDCHAR\nSTARTCHAR U_9E33\nENCODING 40499\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3BC0\n4A40\nB2A0\n25E0\n7F80\nA880\n2480\n3FE0\n0020\nFF20\n00C0\nENDCHAR\nSTARTCHAR U_9E34\nENCODING 40500\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4840\n2480\nFFE0\n9040\n3F80\n2880\n2480\n3FC0\n0040\nFF40\n0080\nENDCHAR\nSTARTCHAR U_9E35\nENCODING 40501\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nF7E0\n9420\nD000\nB200\n8240\nFA80\n0B00\nEA20\n0A20\n31E0\nENDCHAR\nSTARTCHAR U_9E36\nENCODING 40502\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2940\n5280\nFBE0\n0000\nFFE0\n2900\n2500\n3FC0\n0040\nFF40\n00C0\nENDCHAR\nSTARTCHAR U_9E37\nENCODING 40503\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nF780\n2A80\nF4A0\n2A60\n7F80\n2480\n3FE0\n0020\nFF20\n00C0\nENDCHAR\nSTARTCHAR U_9E38\nENCODING 40504\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n23C0\n4240\nFB40\nAAC0\nAA00\nABE0\nA820\nAFA0\nA820\n98C0\nENDCHAR\nSTARTCHAR U_9E39\nENCODING 40505\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1900\nE7C0\n2440\nFD40\n2540\n2480\nFFE0\n8820\n8FA0\nF820\n88C0\nENDCHAR\nSTARTCHAR U_9E3A\nENCODING 40506\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2880\n2BE0\n4A20\n5EA0\nCAA0\n4E40\n5BE0\n6820\n4BA0\n4820\n48C0\nENDCHAR\nSTARTCHAR U_9E3B\nENCODING 40507\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n5BC0\n8240\n4340\n7EC0\nCA00\n4BE0\n4820\n4FA0\n48A0\n5840\nENDCHAR\nSTARTCHAR U_9E3C\nENCODING 40508\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7BC0\n4A40\n6B40\n5A40\nFFE0\n4820\n6FE0\n5820\n48A0\n9840\nENDCHAR\nSTARTCHAR U_9E3D\nENCODING 40509\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n27C0\n5440\n8D40\nF540\n0480\nF7E0\n9020\n97A0\nF020\n00C0\nENDCHAR\nSTARTCHAR U_9E3E\nENCODING 40510\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n4940\n8920\n3F80\n2880\n2480\n3FE0\n0020\nFF20\n00C0\nENDCHAR\nSTARTCHAR U_9E3F\nENCODING 40511\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n3FC0\n8A40\n4B40\n2AC0\n2A80\n2FE0\nD820\n47A0\n4020\n40C0\nENDCHAR\nSTARTCHAR U_9E40\nENCODING 40512\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n2240\n2B40\n6AC0\n6BE0\nB420\n27E0\n2020\nF8A0\n0040\nENDCHAR\nSTARTCHAR U_9E41\nENCODING 40513\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFBC0\n2240\nFB40\n8AC0\nFA00\n13E0\n2020\nFFA0\n2020\n6060\nENDCHAR\nSTARTCHAR U_9E42\nENCODING 40514\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFBC0\n0240\nFB40\nAAC0\nAA00\nFBE0\nA820\nAFA0\nA820\nA8C0\nENDCHAR\nSTARTCHAR U_9E43\nENCODING 40515\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF100\n97C0\nF440\n0540\nF540\n9480\nF7E0\n9020\nFFA0\n9020\nB0C0\nENDCHAR\nSTARTCHAR U_9E44\nENCODING 40516\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n53C0\n7E40\n9340\n12C0\nFE00\n03E0\n7C20\n47A0\n7C20\n44C0\nENDCHAR\nSTARTCHAR U_9E45\nENCODING 40517\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3100\nDBC0\n5640\nFF40\n52C0\n7200\nD7E0\n5420\n4BA0\n5620\nE2C0\nENDCHAR\nSTARTCHAR U_9E46\nENCODING 40518\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n4BC0\n8640\n3340\n4AC0\n8600\n7BE0\n4820\n4FA0\n7820\n48C0\nENDCHAR\nSTARTCHAR U_9E47\nENCODING 40519\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8100\n5BC0\n8A40\nAB40\nFAC0\nAA00\nBBE0\nE820\nAFA0\nA820\n98C0\nENDCHAR\nSTARTCHAR U_9E48\nENCODING 40520\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n23C0\nFA40\n2B40\nFAC0\nA200\nFBE0\n6820\n6FA0\nB820\nA0C0\nENDCHAR\nSTARTCHAR U_9E49\nENCODING 40521\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nEFC0\n0A40\nFF40\n2AC0\nBA00\nABE0\nA820\nABA0\nB420\nC260\nENDCHAR\nSTARTCHAR U_9E4A\nENCODING 40522\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\n53C0\nFA40\n5340\nFAC0\n0200\n7BE0\n4820\n7FA0\n4820\n78C0\nENDCHAR\nSTARTCHAR U_9E4B\nENCODING 40523\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nFBC0\n5240\n0340\nFAC0\nAA00\nFBE0\nA820\nAFA0\nF820\n88C0\nENDCHAR\nSTARTCHAR U_9E4C\nENCODING 40524\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n5240\nAB40\nFEC0\nAA80\nFBE0\nA820\nFFA0\n2020\n30C0\nENDCHAR\nSTARTCHAR U_9E4D\nENCODING 40525\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n8BC0\nFA40\n8B40\nFAC0\n9200\nFFE0\n9020\n97A0\nD820\n9060\nENDCHAR\nSTARTCHAR U_9E4E\nENCODING 40526\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\nFBC0\nAA40\nFB40\nAAC0\nFA80\n23E0\n5020\nFFA0\n1020\n10C0\nENDCHAR\nSTARTCHAR U_9E4F\nENCODING 40527\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nEFC0\nAA40\nEF40\nAAC0\nAA00\nEFE0\nAA20\nABA0\nAA20\nB6C0\nENDCHAR\nSTARTCHAR U_9E50\nENCODING 40528\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n7BC0\n4A40\n9340\n42C0\n9A00\n8BE0\nD820\n8BA0\nF820\n0060\nENDCHAR\nSTARTCHAR U_9E51\nENCODING 40529\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\n4A40\n7B40\n02C0\n7A00\n13E0\n1020\nFBA0\n1020\n30C0\nENDCHAR\nSTARTCHAR U_9E52\nENCODING 40530\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFC0\nA240\nFB40\nAAC0\nFE00\nABE0\nF820\nA7A0\nD020\n8860\nENDCHAR\nSTARTCHAR U_9E53\nENCODING 40531\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFC0\n8640\n7F40\n5AC0\n9A00\n6FE0\n2820\n4BA0\n4C20\n8860\nENDCHAR\nSTARTCHAR U_9E54\nENCODING 40532\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n2A40\nFF40\n2AC0\nFA00\nABE0\nF820\nAFA0\nA820\nA860\nENDCHAR\nSTARTCHAR U_9E55\nENCODING 40533\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4080\n5DC0\n5540\nF5C0\n5D40\nF500\n9DE0\n9420\nF7A0\n2420\n4C60\nENDCHAR\nSTARTCHAR U_9E56\nENCODING 40534\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n7A40\n4B40\n7A40\n23E0\n7C20\nD7E0\n6C20\n74A0\n0840\nENDCHAR\nSTARTCHAR U_9E57\nENCODING 40535\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE80\nABC0\nEE40\n0340\n7AC0\n0200\nFFE0\n2020\n7BA0\n0820\n30C0\nENDCHAR\nSTARTCHAR U_9E58\nENCODING 40536\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7900\n4BC0\n6A40\n5B40\nFEC0\n8600\n7BE0\n4820\n7FA0\n4820\n58C0\nENDCHAR\nSTARTCHAR U_9E59\nENCODING 40537\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7080\n22A0\nFC80\n7140\nAA20\n3F80\n2480\n3FE0\n0020\nFF20\n0060\nENDCHAR\nSTARTCHAR U_9E5A\nENCODING 40538\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4500\n2BC0\nFE40\n4B40\n4AC0\nB600\n4BE0\n4820\nB7A0\nFC20\n00C0\nENDCHAR\nSTARTCHAR U_9E5B\nENCODING 40539\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n97C0\nFE40\n8340\nBEC0\nA600\nBFE0\nA420\nBFA0\nA420\nBCC0\nENDCHAR\nSTARTCHAR U_9E5C\nENCODING 40540\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7D00\n2BE0\nFC80\n3540\n5FA0\n9480\n1280\n1FE0\n0020\n7F20\n00C0\nENDCHAR\nSTARTCHAR U_9E5D\nENCODING 40541\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nFFC0\n5240\n7340\n02C0\nFA00\nDBE0\nF820\nAFA0\nA820\nA860\nENDCHAR\nSTARTCHAR U_9E5E\nENCODING 40542\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0C80\nF5E0\nA520\n59A0\n7D60\n9100\nFDE0\n1020\n57A0\n5420\n7C60\nENDCHAR\nSTARTCHAR U_9E5F\nENCODING 40543\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nAFC0\n5240\nFB40\n02C0\nFFE0\n2420\nB7A0\n6C20\nB4A0\n6C40\nENDCHAR\nSTARTCHAR U_9E60\nENCODING 40544\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nDDC0\n9540\nD5C0\nAD40\n01E0\nFC20\nA7A0\nFC20\nA4A0\nFC40\nENDCHAR\nSTARTCHAR U_9E61\nENCODING 40545\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5500\n3BC0\nD640\n2B40\n4680\nFBE0\n4820\n7FA0\n4820\n78A0\n4840\nENDCHAR\nSTARTCHAR U_9E62\nENCODING 40546\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n4BC0\n3240\nFF40\n4AC0\n8600\n7FE0\n5420\n5FA0\nF020\n0060\nENDCHAR\nSTARTCHAR U_9E63\nENCODING 40547\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n8880\n51C0\nFF40\n55C0\nFF40\n5500\nFDE0\n5020\nDBE0\n5420\n5060\nENDCHAR\nSTARTCHAR U_9E64\nENCODING 40548\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFC0\nA640\n5340\n7EC0\nD280\n7BE0\n5020\n7BE0\n5020\n7C60\nENDCHAR\nSTARTCHAR U_9E65\nENCODING 40549\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFDC0\n8140\nFBE0\nA880\nFF60\n0800\n3F80\n2480\n3FC0\n0040\nFF40\nENDCHAR\nSTARTCHAR U_9E66\nENCODING 40550\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nEE80\nABC0\nAA40\nAB40\n44C0\nAA00\n13E0\nFC20\n2BA0\n1020\n6C60\nENDCHAR\nSTARTCHAR U_9E67\nENCODING 40551\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n8120\nA9A0\nFF60\nA900\nB9E0\n8020\nABA0\nD420\n8060\nENDCHAR\nSTARTCHAR U_9E68\nENCODING 40552\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFC80\n25E0\nB520\n6DA0\n9560\n2900\nD5E0\n2020\n4BE0\n1020\n60C0\nENDCHAR\nSTARTCHAR U_9E69\nENCODING 40553\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFC0\n5640\n7B40\nCEC0\n7A00\n4BE0\n7820\n5BA0\n9420\n3060\nENDCHAR\nSTARTCHAR U_9E6A\nENCODING 40554\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\n7DC0\n5140\nFDC0\n5140\n7D00\n51E0\n7C20\n55E0\nAA20\nAA60\nENDCHAR\nSTARTCHAR U_9E6B\nENCODING 40555\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\nFFE0\n4900\n79A0\n56E0\nBF00\n2500\n3FC0\n0040\nFF40\n0080\nENDCHAR\nSTARTCHAR U_9E6C\nENCODING 40556\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n29C0\nFD40\n35C0\n5140\nFF00\nABE0\nC620\nBBE0\nAA20\nBA60\nENDCHAR\nSTARTCHAR U_9E6D\nENCODING 40557\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4D40\n7BC0\nA660\nBBC0\nFF00\n2900\n3FE0\n0020\nFF20\n00C0\nENDCHAR\nSTARTCHAR U_9E6E\nENCODING 40558\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\nABC0\nFE40\n0340\nFE80\n4BE0\n7820\n67E0\nD820\n48A0\n6440\nENDCHAR\nSTARTCHAR U_9E6F\nENCODING 40559\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFC0\nAB40\nBAC0\n8240\nFFE0\n4820\n7BE0\n4820\nFCA0\n0040\nENDCHAR\nSTARTCHAR U_9E70\nENCODING 40560\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n5500\n7FC0\n5500\n5FE0\n5280\n5FE0\n4020\nBF20\n80C0\nENDCHAR\nSTARTCHAR U_9E71\nENCODING 40561\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4140\nF7E0\n9140\nD7E0\nB280\n83E0\nFA80\n0BE0\nE940\n0880\n3360\nENDCHAR\nSTARTCHAR U_9E72\nENCODING 40562\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4900\nFFC0\n4A40\nFF40\n86C0\n7A40\n67E0\nB820\n5BA0\n9420\n30C0\nENDCHAR\nSTARTCHAR U_9E73\nENCODING 40563\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFD00\n4BC0\nEE40\nAB40\nEEC0\n5200\n7FE0\nD020\n7FA0\n5020\n7E60\nENDCHAR\nSTARTCHAR U_9E74\nENCODING 40564\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n13C0\nFF40\nD6C0\n3A40\n57E0\nFC20\n57E0\n7C20\nD4A0\n5C40\nENDCHAR\nSTARTCHAR U_9E75\nENCODING 40565\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n07E0\n0400\n7FC0\n64C0\n5140\n6A40\n56C0\n4640\n4D40\n52C0\n7FC0\nENDCHAR\nSTARTCHAR U_9E76\nENCODING 40566\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n3D00\n2280\nFC40\nA920\nD880\nABC0\nA840\nD880\nA880\nF900\nENDCHAR\nSTARTCHAR U_9E77\nENCODING 40567\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3C80\n2140\nFF20\nAC80\nD400\nBFE0\nD440\nAD80\nD480\nFC40\nENDCHAR\nSTARTCHAR U_9E78\nENCODING 40568\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n3940\n2220\nFDC0\nA880\nDBE0\nAAA0\nDBE0\nA880\nF940\n0620\nENDCHAR\nSTARTCHAR U_9E79\nENCODING 40569\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n20C0\n30A0\n2FE0\nF880\nAE80\nD8A0\nAEA0\nDAC0\nAEA0\nD960\nFA20\nENDCHAR\nSTARTCHAR U_9E7A\nENCODING 40570\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n3FE0\n2080\nFBE0\nA880\nDFE0\nA900\nDBE0\nAC80\n8880\nFBE0\nENDCHAR\nSTARTCHAR U_9E7B\nENCODING 40571\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n3FE0\n2280\nFFE0\nAAA0\nDFE0\nAAA0\nFFE0\nAAC0\nDEA0\nFA80\nENDCHAR\nSTARTCHAR U_9E7C\nENCODING 40572\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2180\n3A40\n25A0\nF800\nABE0\nDAA0\nABE0\nD940\nA940\n8AA0\nFCA0\nENDCHAR\nSTARTCHAR U_9E7D\nENCODING 40573\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF7E0\nAD00\nF7E0\n9540\nF6C0\nA540\nF7C0\n0000\n7FC0\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_9E7E\nENCODING 40574\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\n3940\n23E0\nF880\n89C0\nD880\nAFE0\nA900\nDBC0\n8C80\nFBE0\nENDCHAR\nSTARTCHAR U_9E7F\nENCODING 40575\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4900\n7FE0\n4920\n7FE0\n5120\n5D40\n51A0\n9D20\n90E0\nENDCHAR\nSTARTCHAR U_9E80\nENCODING 40576\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4920\n7FE0\n5540\n59A0\n5DE0\n5000\n5F20\n5020\n8FE0\nENDCHAR\nSTARTCHAR U_9E81\nENCODING 40577\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0F00\n3200\n0C00\n7FE0\n4A40\n7FC0\n5200\n5AC0\n5300\n5A20\n91E0\nENDCHAR\nSTARTCHAR U_9E82\nENCODING 40578\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4940\n7FC0\n5100\n5DC0\n5120\n5FE0\n5100\n9120\nA0E0\nENDCHAR\nSTARTCHAR U_9E83\nENCODING 40579\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4900\n7FE0\n4920\n7FE0\n5140\n5DA0\n5120\n9DE0\nA940\nENDCHAR\nSTARTCHAR U_9E84\nENCODING 40580\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n3E80\nCA60\n1200\n7FE0\n5240\n7FC0\n5240\n5B80\n5220\n99E0\nENDCHAR\nSTARTCHAR U_9E85\nENCODING 40581\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4A40\n7FC0\n5280\n5B20\n51E0\n5F80\n7280\n5220\n8FE0\nENDCHAR\nSTARTCHAR U_9E86\nENCODING 40582\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4940\n7FC0\n5500\n5920\n5FE0\n5080\n5F80\n9080\n7FE0\nENDCHAR\nSTARTCHAR U_9E87\nENCODING 40583\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4940\n7FC0\n5540\n59A0\n5FE0\n4200\n7FE0\n8A80\nB260\nENDCHAR\nSTARTCHAR U_9E88\nENCODING 40584\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4940\n7FC0\n5540\n59A0\n7FE0\n4200\n5FC0\n8200\nFFE0\nENDCHAR\nSTARTCHAR U_9E89\nENCODING 40585\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\nFBE0\n2480\n7FE0\n4A40\n7FC0\n6240\n7BA0\nA220\nB9E0\nENDCHAR\nSTARTCHAR U_9E8A\nENCODING 40586\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n7FE0\n1500\n2480\n7FE0\n4A40\n7FC0\n5140\n5D80\n9120\n9CE0\nENDCHAR\nSTARTCHAR U_9E8B\nENCODING 40587\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4A40\n7FC0\n5120\n5DE0\n6480\n5500\n7FE0\n9500\nA4C0\nENDCHAR\nSTARTCHAR U_9E8C\nENCODING 40588\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4940\n7FC0\n4920\n7FE0\n5100\n7FC0\n4400\nBFE0\n9080\nENDCHAR\nSTARTCHAR U_9E8D\nENCODING 40589\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4940\n7FC0\n5100\n5520\n7FE0\n4840\n7F80\n9520\nA5E0\nENDCHAR\nSTARTCHAR U_9E8E\nENCODING 40590\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4A40\n7FC0\n4920\n5FE0\n5000\n5FE0\n5940\nA880\nAC60\nENDCHAR\nSTARTCHAR U_9E8F\nENCODING 40591\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4A40\n7FC0\n4440\n7FE0\n4440\n7FC0\n5880\nA880\nCF80\nENDCHAR\nSTARTCHAR U_9E90\nENCODING 40592\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n5240\n7FC0\n5220\n5BE0\n4200\n5FC0\n4700\nB8E0\n8F80\nENDCHAR\nSTARTCHAR U_9E91\nENCODING 40593\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9240\nFFC0\nAA40\nB2A0\nBBE0\nA040\nBFC0\n8A20\n33E0\nENDCHAR\nSTARTCHAR U_9E92\nENCODING 40594\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\nFD40\nABE0\nFD40\nA9C0\nFD40\nA9C0\nBD40\nABE0\nB940\nAE20\nENDCHAR\nSTARTCHAR U_9E93\nENCODING 40595\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\n6AC0\nA4A0\n7FE0\n4A40\n7FC0\n6240\n7FA0\nA220\nBBE0\nENDCHAR\nSTARTCHAR U_9E94\nENCODING 40596\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9920\nFFE0\nAA80\nB320\nFFE0\nAA80\nD240\nBFE0\nA080\nBF80\nENDCHAR\nSTARTCHAR U_9E95\nENCODING 40597\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4A40\n7FC0\n4920\n5FE0\n5240\n5FC0\n5740\n9AC0\n1FC0\nENDCHAR\nSTARTCHAR U_9E96\nENCODING 40598\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4940\n7FC0\n4920\n4DE0\n7FC0\n4880\n4F80\n8A80\n1240\nENDCHAR\nSTARTCHAR U_9E97\nENCODING 40599\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n4A40\n6B40\n5AC0\n7FE0\n4A40\n7FC0\n6240\nBFA0\nA220\nBBE0\nENDCHAR\nSTARTCHAR U_9E98\nENCODING 40600\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4940\n7FC0\n4920\n5FE0\n4200\n7FE0\n4F80\n7AE0\n8F80\nENDCHAR\nSTARTCHAR U_9E99\nENCODING 40601\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9240\nFFC0\nA220\nBBE0\nA280\nFFE0\n8240\nBD80\nA520\nBEE0\nENDCHAR\nSTARTCHAR U_9E9A\nENCODING 40602\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9240\nFFC0\nA280\nBB20\nA3E0\nB840\nABC0\nBA40\nA180\nBE60\nENDCHAR\nSTARTCHAR U_9E9B\nENCODING 40603\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9240\nFFC0\nAA80\nB320\nFFE0\n8A40\nFBC0\n8A40\nB7E0\nENDCHAR\nSTARTCHAR U_9E9C\nENCODING 40604\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n9240\nFFC0\nA200\nBBC0\nA200\nFFE0\nAA40\nFFE0\n8E00\nF5C0\nENDCHAR\nSTARTCHAR U_9E9D\nENCODING 40605\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4A40\n7FC0\n5220\n5FE0\n5440\n57E0\n7E40\n9540\nACC0\nENDCHAR\nSTARTCHAR U_9E9E\nENCODING 40606\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4940\n7FC0\n5220\n5FE0\n4880\n4F80\n4880\n7FE0\n8200\nENDCHAR\nSTARTCHAR U_9E9F\nENCODING 40607\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n12A0\nFDC0\nABE0\nFCC0\nADA0\nFD40\nABE0\nBD40\nABE0\nBA40\n2C40\nENDCHAR\nSTARTCHAR U_9EA0\nENCODING 40608\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4920\n7FE0\n5540\n5980\n7FE0\n5240\n7FE0\n9240\nFFE0\nENDCHAR\nSTARTCHAR U_9EA1\nENCODING 40609\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4A40\n7FC0\n5680\n5B20\n7FE0\n4A80\n5540\n5480\n9F80\nA080\nENDCHAR\nSTARTCHAR U_9EA2\nENCODING 40610\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4A40\n7FC0\n5220\n5FE0\n6AA0\n5740\n5FC0\n5540\n9FC0\nENDCHAR\nSTARTCHAR U_9EA3\nENCODING 40611\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27C0\nFD40\nAFE0\nF840\nAF40\nFA60\nAFA0\nBD20\nEB40\nBFA0\n0920\nENDCHAR\nSTARTCHAR U_9EA4\nENCODING 40612\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4A80\n7FC0\n5200\n5F80\n9220\nFBE0\nAAA0\nFBE0\nAB40\nBD60\nENDCHAR\nSTARTCHAR U_9EA5\nENCODING 40613\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n2480\n5F40\n9520\n2880\nCF60\n1100\n6E00\n0500\n78C0\nENDCHAR\nSTARTCHAR U_9EA6\nENCODING 40614\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FC0\n0400\n3F80\n0400\nFFE0\n0800\n1F80\n6900\n0600\n79E0\nENDCHAR\nSTARTCHAR U_9EA7\nENCODING 40615\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFD00\n55E0\nBA00\n3BE0\n5440\nBA80\n2900\n5220\n2A20\nC1E0\nENDCHAR\nSTARTCHAR U_9EA8\nENCODING 40616\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFD00\n5500\n5540\nAB20\n4520\nB940\n4880\nB100\n3200\nCC00\nENDCHAR\nSTARTCHAR U_9EA9\nENCODING 40617\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFE80\n55E0\n7A80\n9080\n3BE0\n5480\nBC80\n6940\n1240\n6C20\nENDCHAR\nSTARTCHAR U_9EAA\nENCODING 40618\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nFFE0\n5480\n5480\nAAE0\n46A0\nBBE0\n6820\n9020\n28A0\nC040\nENDCHAR\nSTARTCHAR U_9EAB\nENCODING 40619\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\nFFE0\n5480\n56E0\nAA80\n47E0\nB820\n6820\n9020\n28A0\nC040\nENDCHAR\nSTARTCHAR U_9EAC\nENCODING 40620\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFC80\n57E0\n56A0\nBA80\n4BC0\nA740\n3A80\n5480\n2540\nDA20\nENDCHAR\nSTARTCHAR U_9EAD\nENCODING 40621\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nFFE0\n5420\nBBA0\n12A0\n3AA0\n57A0\nBE60\n6A00\n1220\n69E0\nENDCHAR\nSTARTCHAR U_9EAE\nENCODING 40622\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFC80\n55E0\n5480\nBA80\n3BE0\n5480\nBC80\n6900\n1220\n6BE0\nENDCHAR\nSTARTCHAR U_9EAF\nENCODING 40623\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFC80\n5480\n57E0\nBAA0\n4AA0\nA7E0\n7AA0\nD2A0\n22A0\nD3E0\nENDCHAR\nSTARTCHAR U_9EB0\nENCODING 40624\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFC80\n5520\n7BE0\n9280\n3BE0\n5480\nBFE0\n6880\n1080\n6880\nENDCHAR\nSTARTCHAR U_9EB1\nENCODING 40625\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n10C0\nFCA0\n57E0\n5480\nBBE0\n4AA0\nA7E0\n3AA0\n6BE0\n12A0\nEA60\nENDCHAR\nSTARTCHAR U_9EB2\nENCODING 40626\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\nFA40\n57C0\n5640\nBBC0\n4A40\nA7C0\n7A80\nD280\n24A0\nD860\nENDCHAR\nSTARTCHAR U_9EB3\nENCODING 40627\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFFE0\nAD40\nAD40\n73A0\n5100\n8B80\n7340\nD560\n2900\nD100\nENDCHAR\nSTARTCHAR U_9EB4\nENCODING 40628\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\nFBE0\n5520\n7D60\n93A0\n2FE0\nD5A0\n3B60\n6D20\n1120\n6860\nENDCHAR\nSTARTCHAR U_9EB5\nENCODING 40629\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\nFD00\n57E0\n7AA0\n92A0\n3BA0\n56A0\nBFA0\n6AA0\n12A0\n6BE0\nENDCHAR\nSTARTCHAR U_9EB6\nENCODING 40630\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFFE0\nAB60\nFAA0\n27E0\n7080\nAFE0\n7CA0\nD560\n27E0\nD420\nENDCHAR\nSTARTCHAR U_9EB7\nENCODING 40631\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2AA0\nFFE0\nAAA0\nFFE0\n2AA0\n7AA0\nAFE0\n7A60\nD3E0\n3140\nCFE0\nENDCHAR\nSTARTCHAR U_9EB8\nENCODING 40632\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n27E0\nF900\n2100\nFFE0\n2100\n3A80\nD280\n2440\nD820\nENDCHAR\nSTARTCHAR U_9EB9\nENCODING 40633\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\nFE00\n23E0\n7D20\n2560\nFBA0\n27E0\n7BA0\nD560\n21A0\nD040\nENDCHAR\nSTARTCHAR U_9EBA\nENCODING 40634\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nFFE0\n2100\n7200\n2FE0\nFAA0\n4BA0\n7AA0\nDBA0\n2AA0\nDFE0\nENDCHAR\nSTARTCHAR U_9EBB\nENCODING 40635\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n4880\n7FE0\n4880\n5DC0\n6AC0\n4CA0\n8880\n8880\nENDCHAR\nSTARTCHAR U_9EBC\nENCODING 40636\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4880\n7FE0\n4DC0\n5AA0\n6AA0\n4480\n4F00\n8240\n9FE0\nENDCHAR\nSTARTCHAR U_9EBD\nENCODING 40637\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n5080\n7FE0\n5180\n7AC0\n54A0\n4A00\n5400\nA880\n9FC0\nENDCHAR\nSTARTCHAR U_9EBE\nENCODING 40638\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4880\n7FE0\n5DC0\n6AA0\n5F80\n4400\n7FC0\n8420\n83E0\nENDCHAR\nSTARTCHAR U_9EBF\nENCODING 40639\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\n7FE0\n4880\n7FE0\n5DC0\n6AA0\n4F80\n4880\n5FC0\n9040\n9FC0\nENDCHAR\nSTARTCHAR U_9EC0\nENCODING 40640\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n8880\nFFE0\nADC0\nCAA0\nFFE0\nA540\nBC80\nA540\nFE20\nENDCHAR\nSTARTCHAR U_9EC1\nENCODING 40641\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4880\n7FC0\n5DC0\n6AA0\n5FC0\n4A80\n7FE0\n8880\n8F80\nENDCHAR\nSTARTCHAR U_9EC2\nENCODING 40642\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n7FE0\n4880\n7FE0\n4A80\n7FE0\n5080\n5F80\n5080\n9F80\nB0C0\nENDCHAR\nSTARTCHAR U_9EC3\nENCODING 40643\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1F00\n0000\nFFE0\n2480\n3F80\n2480\n3F80\nC060\nENDCHAR\nSTARTCHAR U_9EC4\nENCODING 40644\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1100\nFFE0\n0400\n3F80\n2480\n3F80\n2480\n3F80\n60C0\nENDCHAR\nSTARTCHAR U_9EC5\nENCODING 40645\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF900\n5280\nFA40\n2520\nF880\nABC0\nF840\nA880\nF880\n8500\nENDCHAR\nSTARTCHAR U_9EC6\nENCODING 40646\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF900\n57E0\nFD20\n2140\nF900\nA980\nF980\nAA80\nFAA0\n8C60\nENDCHAR\nSTARTCHAR U_9EC7\nENCODING 40647\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF900\n51E0\nFD00\n2100\nFBC0\nAA40\nFA40\nAA40\nFA40\n8FC0\nENDCHAR\nSTARTCHAR U_9EC8\nENCODING 40648\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5100\nF880\n53E0\nF880\n2080\nF880\nABE0\nF880\nA880\nF880\n8FE0\nENDCHAR\nSTARTCHAR U_9EC9\nENCODING 40649\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nFFE0\n9220\n7F80\n1200\nFFE0\n2480\n3F80\n2480\n3F80\nC060\nENDCHAR\nSTARTCHAR U_9ECA\nENCODING 40650\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5080\nF880\n53E0\nF880\n27E0\nF880\nA880\nFBE0\nA880\nF880\n8FE0\nENDCHAR\nSTARTCHAR U_9ECB\nENCODING 40651\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\nAFC0\n7280\n27E0\nFD40\n57C0\n5540\n57C0\n5440\n5820\n8FE0\nENDCHAR\nSTARTCHAR U_9ECC\nENCODING 40652\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n6AC0\n75C0\n4A40\nFFE0\n9120\nFFE0\n4440\n7FC0\n4440\n7FC0\nC060\nENDCHAR\nSTARTCHAR U_9ECD\nENCODING 40653\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n1500\n2480\nCE60\n1500\n74E0\n0F00\n3480\nCC60\nENDCHAR\nSTARTCHAR U_9ECE\nENCODING 40654\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF200\n23E0\nFCA0\n70A0\nAD20\n2AC0\n1500\nF5E0\n0E00\n75C0\n0C00\nENDCHAR\nSTARTCHAR U_9ECF\nENCODING 40655\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7C80\n1080\nFEE0\n5480\n9280\n29E0\nD720\n5520\n3920\n5520\nB3E0\nENDCHAR\nSTARTCHAR U_9ED0\nENCODING 40656\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\n27E0\nFEA0\n7520\nAEA0\n77E0\nA900\nAFE0\n7560\nAFA0\n6460\nENDCHAR\nSTARTCHAR U_9ED1\nENCODING 40657\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n5540\n4E40\n7FC0\n0400\n7FC0\n0400\nFFE0\n5240\n8920\nENDCHAR\nSTARTCHAR U_9ED2\nENCODING 40658\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n4440\n7FC0\n4440\n7FC0\n0400\n7FC0\n0400\nFFE0\n5240\n8920\nENDCHAR\nSTARTCHAR U_9ED3\nENCODING 40659\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF940\nA920\nF900\nAFE0\nF900\n2100\nF900\n20A0\nF8A0\nD460\nA820\nENDCHAR\nSTARTCHAR U_9ED4\nENCODING 40660\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA900\nFA80\nAC40\nF920\n2080\nFBE0\n2040\nFC80\n6880\n9500\nENDCHAR\nSTARTCHAR U_9ED5\nENCODING 40661\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA880\nFBE0\nAAA0\nFAA0\n2080\nF880\n2080\nF9A0\n56A0\n9460\nENDCHAR\nSTARTCHAR U_9ED6\nENCODING 40662\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA880\nFA80\nAA80\nFFE0\n2080\nF880\n2180\nFAA0\n54A0\n9460\nENDCHAR\nSTARTCHAR U_9ED7\nENCODING 40663\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA900\nFFE0\nA900\nFD40\n2540\nF7C0\n2100\nF900\n5120\nA8E0\nENDCHAR\nSTARTCHAR U_9ED8\nENCODING 40664\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA980\nF940\nAFE0\nF900\n2100\nF900\n2280\nFA80\n5440\nA820\nENDCHAR\nSTARTCHAR U_9ED9\nENCODING 40665\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA940\nF920\nAFE0\nF900\n2280\nF280\n2460\nF800\n5240\n8920\nENDCHAR\nSTARTCHAR U_9EDA\nENCODING 40666\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA40\nAA40\nFFE0\nAA40\nFA40\n23C0\nFA40\n2240\nFA40\n6A40\n97C0\nENDCHAR\nSTARTCHAR U_9EDB\nENCODING 40667\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\n5FE0\nC120\n7FE0\n2A80\n3F80\n0400\n3F80\n0400\nFFE0\n4A40\nENDCHAR\nSTARTCHAR U_9EDC\nENCODING 40668\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nAAA0\nFAA0\nAAA0\nFBE0\n2080\nF880\n22A0\nFAA0\n52A0\nABE0\nENDCHAR\nSTARTCHAR U_9EDD\nENCODING 40669\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA80\nAA80\nFC80\nADE0\nFAA0\n22A0\nFDA0\n27A0\nF8A0\n5120\nAAC0\nENDCHAR\nSTARTCHAR U_9EDE\nENCODING 40670\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA880\nF8E0\nA880\nF880\n23E0\nFA20\n2220\nFA20\n5220\nABE0\nENDCHAR\nSTARTCHAR U_9EDF\nENCODING 40671\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nA9E0\nFA20\nA940\nF880\n23E0\nF920\n22A0\nF840\n5080\nAB00\nENDCHAR\nSTARTCHAR U_9EE0\nENCODING 40672\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA880\nFFE0\nA880\nFBE0\n2000\nFBE0\n2220\nFA20\n5220\nABE0\nENDCHAR\nSTARTCHAR U_9EE1\nENCODING 40673\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4240\n7FE0\n4880\n7FE0\n5AC0\n5740\n5FC0\n4200\nBFE0\n94A0\nENDCHAR\nSTARTCHAR U_9EE2\nENCODING 40674\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nAA40\nFFE0\nA940\nFA20\n2500\nF9E0\n2340\nFC80\n5140\nAE20\nENDCHAR\nSTARTCHAR U_9EE3\nENCODING 40675\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\nABE0\nFC00\nAFC0\nFD40\n27E0\nFC40\n2540\nFFE0\nA940\nA880\nENDCHAR\nSTARTCHAR U_9EE4\nENCODING 40676\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nAFE0\nF940\nAAA0\nFFE0\n22A0\nFBE0\n22A0\nFBE0\n50A0\nA8E0\nENDCHAR\nSTARTCHAR U_9EE5\nENCODING 40677\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nAFE0\nF800\nABE0\nFA20\n23E0\nF880\n22C0\nFAA0\n54A0\nA980\nENDCHAR\nSTARTCHAR U_9EE6\nENCODING 40678\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nAFE0\nFC20\nAA00\nFBE0\n22A0\nFCA0\n22E0\nF980\n52A0\nACE0\nENDCHAR\nSTARTCHAR U_9EE7\nENCODING 40679\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n23E0\nFD20\n6A20\nA440\n7FC0\n5540\n7FC0\n0400\nFFC0\n8920\nENDCHAR\nSTARTCHAR U_9EE8\nENCODING 40680\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\nFFE0\nA0A0\n7FC0\n4A40\n7FC0\n0400\n7FC0\n0400\nFFE0\n9220\nENDCHAR\nSTARTCHAR U_9EE9\nENCODING 40681\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nABE0\nF880\nAFE0\nFA20\n2580\nFA80\n27E0\nF880\n5140\nAE20\nENDCHAR\nSTARTCHAR U_9EEA\nENCODING 40682\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nAA40\nFFE0\nA880\nFFE0\n2280\nFD40\n22A0\nFD40\n5280\nA900\nENDCHAR\nSTARTCHAR U_9EEB\nENCODING 40683\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nAA80\nFFE0\nAAA0\nFAA0\n22A0\nFFE0\n2080\nFBE0\n5080\nAFE0\nENDCHAR\nSTARTCHAR U_9EEC\nENCODING 40684\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF8C0\nA8A0\nFFE0\nAC80\nFF80\n24A0\nFFA0\n2540\nFFC0\nD560\nAA20\nENDCHAR\nSTARTCHAR U_9EED\nENCODING 40685\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA940\nFBE0\nAC00\nFBE0\n2220\nFBE0\n2240\nFFE0\n5240\nAC40\nENDCHAR\nSTARTCHAR U_9EEE\nENCODING 40686\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA40\nAFE0\nFA40\nABC0\nFA40\n23C0\nFA40\n27E0\nFD40\n5620\nAFE0\nENDCHAR\nSTARTCHAR U_9EEF\nENCODING 40687\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nAFE0\nFA20\nA940\nFFE0\n2000\nFBE0\n2220\nFBE0\n0220\nABE0\nENDCHAR\nSTARTCHAR U_9EF0\nENCODING 40688\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF900\nAFE0\nF900\nABC0\nFA40\n23C0\nFA40\n23C0\nFA40\n57E0\nAA40\nENDCHAR\nSTARTCHAR U_9EF1\nENCODING 40689\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0540\n77C0\n5100\n5FE0\n7440\n5FE0\n7540\n57C0\n5100\n9FE0\n2AA0\nENDCHAR\nSTARTCHAR U_9EF2\nENCODING 40690\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nA940\nFBE0\nAAA0\nFFE0\n2240\nFD20\n22A0\nF940\n5080\nAB00\nENDCHAR\nSTARTCHAR U_9EF3\nENCODING 40691\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9260\nFFC0\nA940\nFFE0\n5540\n7FC0\n0400\nFFE0\n5240\n8920\nENDCHAR\nSTARTCHAR U_9EF4\nENCODING 40692\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3580\n5F80\n80E0\n3FA0\n55A0\nDFA0\n44A0\n5FA0\n4440\n5FA0\n5520\nENDCHAR\nSTARTCHAR U_9EF5\nENCODING 40693\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9C0\nABE0\nFEA0\nAB40\nFBE0\n2200\nFBE0\n2200\nFDE0\n5120\nA9E0\nENDCHAR\nSTARTCHAR U_9EF6\nENCODING 40694\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\nA4A0\nBFE0\nB480\nAD40\nBFE0\nAAA0\nBFE0\n8200\nFFE0\nA920\nENDCHAR\nSTARTCHAR U_9EF7\nENCODING 40695\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF880\nAFE0\nF880\nAFE0\nFAA0\n2FE0\nFA40\n23C0\nFA40\n53C0\nAC20\nENDCHAR\nSTARTCHAR U_9EF8\nENCODING 40696\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nF9C0\nA900\nFFE0\nAD40\nFF80\n2520\nFCE0\n26A0\nFFE0\nAAA0\nB7E0\nENDCHAR\nSTARTCHAR U_9EF9\nENCODING 40697\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4A40\n2A80\nFFE0\n2480\n1500\n7FC0\n4640\n4D40\n54C0\n6440\n44C0\nENDCHAR\nSTARTCHAR U_9EFA\nENCODING 40698\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAA40\n6D40\n2920\nFE20\n5400\nFFE0\n9520\nB520\nDD20\n95A0\n9640\nENDCHAR\nSTARTCHAR U_9EFB\nENCODING 40699\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA940\n6D20\n2BE0\nFD00\n5500\nFDC0\n9540\nB740\nDE80\n9540\n9620\nENDCHAR\nSTARTCHAR U_9EFC\nENCODING 40700\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nAAC0\n6CA0\n29E0\nFE80\n55E0\nFEA0\n93E0\nBAA0\nD7E0\n92A0\n96E0\nENDCHAR\nSTARTCHAR U_9EFD\nENCODING 40701\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n9240\nF3C0\n1200\nF3C0\n9240\nF3C0\n9240\nF3C0\n1220\n0FE0\nENDCHAR\nSTARTCHAR U_9EFE\nENCODING 40702\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2080\n3F80\n0400\n7FC0\n4440\n7FC0\n4440\n7FC0\n0420\n03E0\nENDCHAR\nSTARTCHAR U_9EFF\nENCODING 40703\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0000\nFFC0\n1220\nFFE0\n4A40\nFBC0\n8A40\nFBC0\n0A20\n07E0\nENDCHAR\nSTARTCHAR U_9F00\nENCODING 40704\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n4040\nBFA0\n2A80\n7BC0\n4A40\n7BC0\n0A20\n07E0\nENDCHAR\nSTARTCHAR U_9F01\nENCODING 40705\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FC0\n0400\nFFE0\n1100\n7FC0\n4A40\nFBC0\n8A40\nFBC0\n0A20\n0FE0\nENDCHAR\nSTARTCHAR U_9F02\nENCODING 40706\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n2480\nFFE0\n0000\n3F80\n2A80\nFBE0\nAAA0\nFBE0\n0A20\n07E0\nENDCHAR\nSTARTCHAR U_9F03\nENCODING 40707\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0400\nFFE0\n0000\nFFE0\n4A40\nFBE0\nAAA0\nFBE0\n0A20\n07E0\nENDCHAR\nSTARTCHAR U_9F04\nENCODING 40708\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3FC0\n4400\nFFE0\n2480\n7FC0\nAAA0\n7BC0\n4A40\n7BC0\n0A20\n07E0\nENDCHAR\nSTARTCHAR U_9F05\nENCODING 40709\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7DE0\n9120\nFFE0\n4400\nBF80\n2A80\n7BC0\n4A40\n7BC0\n0A20\n0FE0\nENDCHAR\nSTARTCHAR U_9F06\nENCODING 40710\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n86A0\n7BE0\n4880\n7BE0\n4AA0\n7BE0\n12A0\nFFE0\n28A0\n44E0\nENDCHAR\nSTARTCHAR U_9F07\nENCODING 40711\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFA00\n23E0\nFD40\n4880\nFFE0\n4A80\nFBC0\n8A40\nFBC0\n0A20\n0FE0\nENDCHAR\nSTARTCHAR U_9F08\nENCODING 40712\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nA900\n73E0\nFD40\nA880\nA960\n3F80\n2A80\n7BC0\n4A40\n7BA0\n07E0\nENDCHAR\nSTARTCHAR U_9F09\nENCODING 40713\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n8A20\nFFE0\n4440\nFFE0\n4A40\nFFC0\n8A40\n8BC0\nFA20\n0FE0\nENDCHAR\nSTARTCHAR U_9F0A\nENCODING 40714\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BE0\n4940\n7FE0\nA480\n7FC0\n4A40\nFBE0\n8A20\nFBE0\n0A20\n07E0\nENDCHAR\nSTARTCHAR U_9F0B\nENCODING 40715\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n0000\n7FC0\n2220\nFFE0\n2080\n7FC0\n4440\n7FC0\n0420\n03E0\nENDCHAR\nSTARTCHAR U_9F0C\nENCODING 40716\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F00\n2500\nFFE0\n2080\n7FC0\n4440\n7FC0\n4440\n7FC0\n0420\n03E0\nENDCHAR\nSTARTCHAR U_9F0D\nENCODING 40717\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4A40\n7FC0\n2480\nFFE0\n2100\n7FC0\n4440\n7FC0\n0420\n03E0\nENDCHAR\nSTARTCHAR U_9F0E\nENCODING 40718\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n1080\n1F80\n50A0\n5FA0\n50A0\n7FE0\n0900\nF9E0\n4920\n8920\nENDCHAR\nSTARTCHAR U_9F0F\nENCODING 40719\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFE0\n8020\n1F00\n5140\n5F40\n5140\n7FC0\n0A00\nFBE0\n4A40\n8A40\nENDCHAR\nSTARTCHAR U_9F10\nENCODING 40720\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7F80\n11E0\n2020\nDF60\n1100\n5F40\n5140\n7FC0\n0A00\n7BE0\n8A20\nENDCHAR\nSTARTCHAR U_9F11\nENCODING 40721\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0780\n0400\n5F40\n5540\n5B40\n5540\n7FC0\n0900\nF9E0\n4920\n8920\nENDCHAR\nSTARTCHAR U_9F12\nENCODING 40722\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0200\nFFE0\n0A00\n7F00\n1100\n5F40\n5140\n7FC0\n0A00\n7BE0\n8A40\nENDCHAR\nSTARTCHAR U_9F13\nENCODING 40723\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nFC80\n23E0\n7880\n03E0\n7A20\n4940\n7940\n4880\n3D40\nC620\nENDCHAR\nSTARTCHAR U_9F14\nENCODING 40724\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFD00\n11E0\n7900\n07E0\n7C40\n4A40\n7980\n2980\n3260\nCC40\nENDCHAR\nSTARTCHAR U_9F15\nENCODING 40725\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\nFBC0\n8940\nFE80\n5140\nFE20\n1100\nE4E0\n0A00\n0400\nENDCHAR\nSTARTCHAR U_9F16\nENCODING 40726\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\n1500\nFFE0\n2080\nFFE0\n2080\nFBE0\n8940\nF880\n5140\nFA20\nENDCHAR\nSTARTCHAR U_9F17\nENCODING 40727\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2A80\n5B40\nF9E0\n2080\nFFE0\n2080\nFBE0\n8940\nF880\n5140\nFA20\nENDCHAR\nSTARTCHAR U_9F18\nENCODING 40728\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\nFBE0\n8940\nF880\n5360\nFA40\n7FC0\n4040\n7BC0\n8A40\nENDCHAR\nSTARTCHAR U_9F19\nENCODING 40729\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\nFBE0\n8940\nF8C0\nFFA0\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_9F1A\nENCODING 40730\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\nFBE0\n8940\nF880\n5160\nFF80\n2000\nFFE0\n2280\n39E0\nENDCHAR\nSTARTCHAR U_9F1B\nENCODING 40731\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\nFBE0\n8940\nF880\n5760\nF980\n5140\n3FE0\nE080\n3F80\nENDCHAR\nSTARTCHAR U_9F1C\nENCODING 40732\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\nFBE0\n8940\nF880\n5360\nFF80\n2A00\n7FC0\nA4A0\nFFC0\nENDCHAR\nSTARTCHAR U_9F1D\nENCODING 40733\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4AA0\nAEE0\n4820\nCEE0\n52A0\nFFE0\n2900\n3BC0\n2A40\n1980\nE660\nENDCHAR\nSTARTCHAR U_9F1E\nENCODING 40734\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2080\nFBE0\n8940\nFC80\n5540\nFFE0\n9120\n3F80\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_9F1F\nENCODING 40735\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n2A80\n3900\n2A80\nFE80\n2940\n3F80\nD160\n0E00\n7FC0\nENDCHAR\nSTARTCHAR U_9F20\nENCODING 40736\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7BC0\n4040\n7BC0\n4040\n7FC0\n0000\n6680\n5580\n66A0\n5560\n7720\nENDCHAR\nSTARTCHAR U_9F21\nENCODING 40737\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4880\n2480\n0100\n3FC0\n2440\n3FC0\n2440\n3FC0\n2440\n4440\n8420\nENDCHAR\nSTARTCHAR U_9F22\nENCODING 40738\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5880\n8940\nD940\n8A20\nFC20\nABE0\nF920\nA920\nFA20\nA4A0\nF240\nENDCHAR\nSTARTCHAR U_9F23\nENCODING 40739\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5880\n88C0\nD8A0\n8880\nFFE0\nA880\nF880\nA940\nF940\nA620\nF220\nENDCHAR\nSTARTCHAR U_9F24\nENCODING 40740\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5900\n8880\nDFE0\n8A40\nFA40\nAA40\nF980\nA880\nF940\nA640\nF220\nENDCHAR\nSTARTCHAR U_9F25\nENCODING 40741\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5940\n8920\nDFE0\n8900\nF900\nA9E0\nFA20\nAD40\nF880\nA540\nF220\nENDCHAR\nSTARTCHAR U_9F26\nENCODING 40742\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5BE0\n8920\nD920\n8920\nFAC0\nAC00\nF9E0\nA920\nF920\nAD20\nE5E0\nENDCHAR\nSTARTCHAR U_9F27\nENCODING 40743\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5900\n8880\nDFE0\n8C20\nFA00\nAA40\nFB80\nAA00\nFA20\nAE20\nF5E0\nENDCHAR\nSTARTCHAR U_9F28\nENCODING 40744\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5900\n8900\nD9E0\n8A20\nFD40\nA880\nF940\nAEA0\nF840\nA480\nF240\nENDCHAR\nSTARTCHAR U_9F29\nENCODING 40745\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5A00\n8A00\nDBE0\n8C20\nFBA0\nAAA0\nFBA0\nA820\nF820\nAAA0\nF640\nENDCHAR\nSTARTCHAR U_9F2A\nENCODING 40746\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5880\n8A80\nDBE0\n8C80\nF880\nA880\nFBE0\nA880\nF880\nA880\nF7E0\nENDCHAR\nSTARTCHAR U_9F2B\nENCODING 40747\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5BE0\n8880\nD880\n8900\nF9E0\nAB20\nFD20\nA920\nFD20\nAD20\nF5E0\nENDCHAR\nSTARTCHAR U_9F2C\nENCODING 40748\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5880\n8880\nDBE0\n8AA0\nFAA0\nAAA0\nFBE0\nAAA0\nFEA0\nAEA0\nF7E0\nENDCHAR\nSTARTCHAR U_9F2D\nENCODING 40749\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5880\n8BE0\nD880\n8FE0\nF840\nAFE0\nF840\nAA40\nF940\nAC40\nF4C0\nENDCHAR\nSTARTCHAR U_9F2E\nENCODING 40750\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5E00\n8AE0\nDA40\n8A40\nFCE0\nAA40\nFA40\nAE40\nFAE0\nAB00\nF4E0\nENDCHAR\nSTARTCHAR U_9F2F\nENCODING 40751\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5FE0\n8900\nDBC0\n8940\nF940\nAFE0\nF800\nABC0\nFA40\nAA40\nF7C0\nENDCHAR\nSTARTCHAR U_9F30\nENCODING 40752\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5BE0\n8A20\nDA20\n8BE0\nFA20\nABE0\nFA20\nAA20\nFBE0\nA940\nF620\nENDCHAR\nSTARTCHAR U_9F31\nENCODING 40753\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5880\n8BE0\nD880\n8BE0\nF880\nAFE0\nFA20\nABE0\nFA20\nABE0\nF620\nENDCHAR\nSTARTCHAR U_9F32\nENCODING 40754\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5BE0\n8CA0\nDBE0\n8AA0\nFBE0\nAAA0\nFBE0\nA880\nFFE0\nA880\nF480\nENDCHAR\nSTARTCHAR U_9F33\nENCODING 40755\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5BE0\n8A20\nDBE0\n8A20\nFBE0\nA940\nF920\nAFE0\nF900\nAA80\nF460\nENDCHAR\nSTARTCHAR U_9F34\nENCODING 40756\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5BE0\n8AA0\nDAE0\n8AA0\nFAE0\nAA40\nFBE0\nAAA0\nFA40\nAAA0\nF7E0\nENDCHAR\nSTARTCHAR U_9F35\nENCODING 40757\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5880\n8FE0\nDC20\n8A40\nFD20\nA940\nFFE0\nA900\nF980\nAA40\nF420\nENDCHAR\nSTARTCHAR U_9F36\nENCODING 40758\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5BE0\n8A80\nDAE0\n8A80\nFBE0\nAAA0\nFBE0\nAA80\nFBE0\nAB40\nF560\nENDCHAR\nSTARTCHAR U_9F37\nENCODING 40759\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n58C0\n8F20\nDAA0\n8940\nFB80\nA940\nFFE0\nA880\nFBE0\nA940\nF620\nENDCHAR\nSTARTCHAR U_9F38\nENCODING 40760\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5A40\n8FE0\nDA80\n8FE0\nFAA0\nAFE0\nFAA0\nAFE0\nFE80\nAAC0\nF6A0\nENDCHAR\nSTARTCHAR U_9F39\nENCODING 40761\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5BC0\n8A40\nDBC0\n8A40\nFFE0\nAD20\nFBE0\nA940\nFA40\nA980\nF660\nENDCHAR\nSTARTCHAR U_9F3A\nENCODING 40762\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5BE0\n8AA0\nDBE0\n8AA0\nFBE0\nA800\nFFE0\nAAA0\nFFE0\nAAA0\nE7E0\nENDCHAR\nSTARTCHAR U_9F3B\nENCODING 40763\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0800\n3F80\n2480\n2280\n7FC0\n4440\n7FC0\n4440\nFFE0\n1100\n6100\nENDCHAR\nSTARTCHAR U_9F3C\nENCODING 40764\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1020\n3C20\n24A0\n7EA0\n52A0\n7EA0\n52E0\nFEA0\n2420\n2420\n4420\nENDCHAR\nSTARTCHAR U_9F3D\nENCODING 40765\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n7900\n4900\n7BC0\n4940\nF940\nA940\nD940\nFE40\n5240\n9460\nENDCHAR\nSTARTCHAR U_9F3E\nENCODING 40766\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7BE0\n4880\n7880\n4880\nFFE0\nD480\nAC80\nFE80\n4880\n8880\nENDCHAR\nSTARTCHAR U_9F3F\nENCODING 40767\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n77E0\n5280\n5280\nFA80\nAA80\nFA80\nAAA0\nFAA0\n54A0\n98E0\nENDCHAR\nSTARTCHAR U_9F40\nENCODING 40768\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n7100\n5100\n5380\nFA80\nAB80\nFA80\nAA80\nFEA0\n52A0\n9360\nENDCHAR\nSTARTCHAR U_9F41\nENCODING 40769\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n7200\n53E0\n5420\nFBA0\nAAA0\nFAA0\nABA0\nF820\n50A0\n9040\nENDCHAR\nSTARTCHAR U_9F42\nENCODING 40770\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n77C0\n5140\n57E0\nF940\nAFC0\nF900\nAD40\nFB80\n5560\n9300\nENDCHAR\nSTARTCHAR U_9F43\nENCODING 40771\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n7240\n53C0\n5240\nFBC0\nA900\nFBE0\nADA0\nFA60\n53A0\n9060\nENDCHAR\nSTARTCHAR U_9F44\nENCODING 40772\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n73E0\n51C0\n52A0\nFFE0\nAA20\nFBE0\nAA20\nFBE0\n5000\n93E0\nENDCHAR\nSTARTCHAR U_9F45\nENCODING 40773\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7BE0\n4A20\n7BE0\n4A20\nFFE0\nA4A0\n97E0\nFC80\n4940\n8A20\nENDCHAR\nSTARTCHAR U_9F46\nENCODING 40774\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n22A0\n7D40\n4AA0\n7BC0\n4A40\nFBE0\nAAA0\nDBE0\nFE00\n4A20\n89E0\nENDCHAR\nSTARTCHAR U_9F47\nENCODING 40775\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\n7100\n57E0\n7520\n57C0\nFD20\nDFE0\nAA40\nFBC0\n5240\n97E0\nENDCHAR\nSTARTCHAR U_9F48\nENCODING 40776\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2280\n7FE0\n4AA0\n7FE0\n4AA0\nFFE0\nA800\nDFE0\nFAA0\n4A40\n8B20\nENDCHAR\nSTARTCHAR U_9F49\nENCODING 40777\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n7240\n57E0\n75A0\n5240\nFFE0\nDA40\nAFE0\nFAA0\n5640\n9B20\nENDCHAR\nSTARTCHAR U_9F4A\nENCODING 40778\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0A40\nF580\n5540\n95A0\n2080\n3F80\n2080\n3F80\nC080\nENDCHAR\nSTARTCHAR U_9F4B\nENCODING 40779\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0A20\nF5C0\n5540\nA020\n3FC0\n2040\n3FC0\n5540\nA4C0\nENDCHAR\nSTARTCHAR U_9F4C\nENCODING 40780\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0A20\nF5C0\n5540\nB5A0\n4040\n7FC0\n5540\n4A40\n9140\nENDCHAR\nSTARTCHAR U_9F4D\nENCODING 40781\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0A20\nF5C0\n5540\nA520\n7FC0\n4040\nFFC0\n5540\nFFE0\nENDCHAR\nSTARTCHAR U_9F4E\nENCODING 40782\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0A20\nF5C0\n5540\nFFE0\n4040\n7FC0\n5540\n5F40\nB1C0\nENDCHAR\nSTARTCHAR U_9F4F\nENCODING 40783\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0A20\nF5C0\n5540\nB5A0\n7FC0\n4A40\n7BC0\n4A40\nBFC0\nENDCHAR\nSTARTCHAR U_9F50\nENCODING 40784\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n1080\n0900\n0600\n1980\nE060\n0900\n0900\n1100\n6100\nENDCHAR\nSTARTCHAR U_9F51\nENCODING 40785\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n0900\n0600\nF9E0\n4A40\n7BC0\n4A40\n7BC0\n4A40\nBFC0\nENDCHAR\nSTARTCHAR U_9F52\nENCODING 40786\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n27C0\n2400\nFFE0\n5140\n6AC0\n4440\n7FC0\n5140\n6AC0\n7FC0\nENDCHAR\nSTARTCHAR U_9F53\nENCODING 40787\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5D00\n5100\nFF00\n0100\nAD00\nD500\nFD00\nAD00\nD520\nFCE0\nENDCHAR\nSTARTCHAR U_9F54\nENCODING 40788\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5D00\n5100\nFD20\nD540\nAD80\nFD00\n8500\nD520\nAD20\nFCE0\nENDCHAR\nSTARTCHAR U_9F55\nENCODING 40789\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nBD00\nA1E0\nFE00\n85E0\nD440\nAC80\nFD00\nD520\nAE20\nFDE0\nENDCHAR\nSTARTCHAR U_9F56\nENCODING 40790\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nBC40\nA140\nFD40\n87E0\nD440\nACC0\nFD40\nD640\nAC40\nFCC0\nENDCHAR\nSTARTCHAR U_9F57\nENCODING 40791\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1060\n5D80\n5100\nFD00\n85E0\nD540\nAD40\nFD40\nD540\nAE40\nFE40\nENDCHAR\nSTARTCHAR U_9F58\nENCODING 40792\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n5C80\n5140\nFE20\n8540\nD540\nAD40\nFD40\nD540\nAD40\nFE40\nENDCHAR\nSTARTCHAR U_9F59\nENCODING 40793\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n5FE0\n5420\nFFA0\n84A0\nD4A0\nAFA0\nFC20\nD4C0\nAC20\nFFE0\nENDCHAR\nSTARTCHAR U_9F5A\nENCODING 40794\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5900\n53E0\nFD00\n0100\nADE0\nD500\nFDE0\nAD00\nD500\nFD00\nENDCHAR\nSTARTCHAR U_9F5B\nENCODING 40795\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n5D40\n5540\nFFE0\n8540\nD540\nAD40\nFD40\nD5C0\nAC00\nFFE0\nENDCHAR\nSTARTCHAR U_9F5C\nENCODING 40796\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n5D40\n5140\nFD60\n85C0\nD540\nAD40\nFD40\nD540\nADC0\nFE60\nENDCHAR\nSTARTCHAR U_9F5D\nENCODING 40797\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n5C80\n5080\nFD20\n87E0\nAC00\nD5E0\nFD20\nD520\nAD20\nFDE0\nENDCHAR\nSTARTCHAR U_9F5E\nENCODING 40798\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\n5D20\n5120\nFD20\n8520\nADE0\nD400\nFC00\nD540\nAD20\nFE20\nENDCHAR\nSTARTCHAR U_9F5F\nENCODING 40799\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\n5D40\n5140\nFF40\n85C0\nAD40\nD540\nFDC0\nD540\nAD40\nFFE0\nENDCHAR\nSTARTCHAR U_9F60\nENCODING 40800\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n5D20\n5120\nFD20\n86C0\nAC00\nD5E0\nFD20\nD520\nAD20\nFDE0\nENDCHAR\nSTARTCHAR U_9F61\nENCODING 40801\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n5C80\n5140\nFE20\n8500\nD480\nAFE0\nFC40\nD580\nAC40\nFC40\nENDCHAR\nSTARTCHAR U_9F62\nENCODING 40802\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5980\n5240\nFD20\n0080\nD800\nAFE0\nF840\nAA80\nD900\nF880\nENDCHAR\nSTARTCHAR U_9F63\nENCODING 40803\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5D00\n51E0\nFE20\n8420\nAFA0\nD6A0\nFEA0\nD7A0\nAC20\nFCC0\nENDCHAR\nSTARTCHAR U_9F64\nENCODING 40804\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2500\n7FC0\n0800\nFFE0\n5240\nFFA0\n5540\n7FC0\n4A40\n5540\n7FC0\nENDCHAR\nSTARTCHAR U_9F65\nENCODING 40805\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nBFE0\nA2A0\nFFE0\nD6A0\nAFE0\nA480\nFCA0\nD440\nACA0\nFD20\nENDCHAR\nSTARTCHAR U_9F66\nENCODING 40806\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\nBD20\nA120\nFDE0\nD520\nADE0\nA5A0\nFD40\nD540\nADA0\nFD20\nENDCHAR\nSTARTCHAR U_9F67\nENCODING 40807\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\n2120\nFE40\n2400\nFFE0\n0A00\n5540\n7FC0\n4A40\n5540\n7FC0\nENDCHAR\nSTARTCHAR U_9F68\nENCODING 40808\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5A60\n5220\nFE20\n0220\nAB60\nDA20\nFA20\nAA20\nDBE0\nFA20\nENDCHAR\nSTARTCHAR U_9F69\nENCODING 40809\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n5BE0\n5140\nFE20\n0140\nAD40\nD540\nFC80\nAC80\nD540\nFE20\nENDCHAR\nSTARTCHAR U_9F6A\nENCODING 40810\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21E0\nBD20\nA120\nFFE0\nD440\nAD40\nA560\nFD40\nD540\nAD40\nFEE0\nENDCHAR\nSTARTCHAR U_9F6B\nENCODING 40811\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nBC20\nA4A0\nFFE0\n84A0\nD5E0\nAEA0\nFCA0\nD4A0\nAC20\nFFE0\nENDCHAR\nSTARTCHAR U_9F6C\nENCODING 40812\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nBC80\nA3E0\nFD20\n87E0\nD400\nADE0\nFD20\nD520\nADE0\nFD20\nENDCHAR\nSTARTCHAR U_9F6D\nENCODING 40813\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1120\n5AC0\n5280\nFBE0\n02A0\nABA0\nDAA0\nFAA0\nAAA0\nDAA0\nFD20\nENDCHAR\nSTARTCHAR U_9F6E\nENCODING 40814\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nBBE0\nA080\nFD40\n87E0\nD420\nAFA0\nFEA0\nD7A0\nAC20\nFC60\nENDCHAR\nSTARTCHAR U_9F6F\nENCODING 40815\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nBB60\nA220\nFF60\nD620\nAE20\nA7E0\nFD40\nD540\nAD40\nFE60\nENDCHAR\nSTARTCHAR U_9F70\nENCODING 40816\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1140\n5BE0\n5140\nFFE0\n8400\nD5E0\nAD20\nFDE0\nD520\nADE0\nFD20\nENDCHAR\nSTARTCHAR U_9F71\nENCODING 40817\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2780\nBD00\nA5E0\nFF20\n8520\nD5A0\nAFA0\nFD40\nD740\nADA0\nFD20\nENDCHAR\nSTARTCHAR U_9F72\nENCODING 40818\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nB880\nA3E0\nFAA0\n03E0\nA880\nDBE0\nFAA0\nABE0\nDA20\nFA60\nENDCHAR\nSTARTCHAR U_9F73\nENCODING 40819\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17E0\n5CA0\n57E0\nF880\n03E0\nAAA0\nDBE0\nFAA0\nAFE0\nD880\nF880\nENDCHAR\nSTARTCHAR U_9F74\nENCODING 40820\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\nBBE0\nA140\nFBE0\n8A20\nAA40\nDAA0\nFA40\nAAA0\nDA40\nFD80\nENDCHAR\nSTARTCHAR U_9F75\nENCODING 40821\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nBAA0\nA3E0\nFEA0\n03E0\nA880\nDBE0\nFAA0\nABE0\nDA20\nFA60\nENDCHAR\nSTARTCHAR U_9F76\nENCODING 40822\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nBAA0\nA3E0\nFC00\n01E0\nD400\nAFE0\nFC80\nD5E0\nAC20\nFCC0\nENDCHAR\nSTARTCHAR U_9F77\nENCODING 40823\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nBC20\nA7E0\nFC00\n07E0\nD540\nAFE0\nFC80\nD7E0\nAC80\nFFE0\nENDCHAR\nSTARTCHAR U_9F78\nENCODING 40824\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2220\nB940\nA3E0\nFC00\n0140\nD620\nAFE0\nFCA0\nD4A0\nACA0\nFFE0\nENDCHAR\nSTARTCHAR U_9F79\nENCODING 40825\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n0400\nFFE0\n1200\nFFC0\n2400\nFFE0\n5140\n6AC0\n7FC0\nENDCHAR\nSTARTCHAR U_9F7A\nENCODING 40826\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n5BE0\n52A0\nFFE0\n84A0\nD740\nADE0\nFEA0\nD7E0\nACA0\nFD40\nENDCHAR\nSTARTCHAR U_9F7B\nENCODING 40827\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n5DE0\n5080\nFDE0\nD520\nADE0\n8520\nFDE0\nD520\nAFE0\nFD20\nENDCHAR\nSTARTCHAR U_9F7C\nENCODING 40828\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1280\n5FE0\n5280\nFFC0\n02A0\nAFE0\nD880\nFAC0\nAA80\nDB80\nFCE0\nENDCHAR\nSTARTCHAR U_9F7D\nENCODING 40829\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2240\nB7E0\nA2C0\nFF60\n0240\nABE0\nD800\nFFE0\nA9C0\nDAA0\nF980\nENDCHAR\nSTARTCHAR U_9F7E\nENCODING 40830\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n38C0\nFCA0\nA7E0\nFC80\nAD40\n9620\nFFE0\n4940\n7FC0\n5240\n7FC0\nENDCHAR\nSTARTCHAR U_9F7F\nENCODING 40831\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n27C0\n2400\nFFE0\n0000\n4440\n4440\n4A40\n5140\n4040\n7FC0\nENDCHAR\nSTARTCHAR U_9F80\nENCODING 40832\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5D00\n5120\nFD40\n0180\n9500\n9700\nAD00\nC520\n8520\nFCE0\nENDCHAR\nSTARTCHAR U_9F81\nENCODING 40833\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n5DE0\n5200\nFC00\n01C0\nA440\nA480\nB500\nCD20\n8620\nFDE0\nENDCHAR\nSTARTCHAR U_9F82\nENCODING 40834\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\n5D80\n5100\nFDE0\n0140\n5540\n5540\n6D40\n4540\n7D40\n0240\nENDCHAR\nSTARTCHAR U_9F83\nENCODING 40835\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11C0\n5D40\n5140\nFFC0\n0140\n9540\n95C0\nAD40\nC540\n8540\nFFE0\nENDCHAR\nSTARTCHAR U_9F84\nENCODING 40836\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\n5C80\n5140\nFD20\n02A0\n9480\n97E0\nAC40\nC580\n9C80\nE440\nENDCHAR\nSTARTCHAR U_9F85\nENCODING 40837\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n5A00\n53E0\nFC20\n03A0\nAAA0\nABA0\nDA60\n8A00\n8A20\nF9E0\nENDCHAR\nSTARTCHAR U_9F86\nENCODING 40838\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n5920\n5120\nFA20\n04C0\nA800\nABE0\nAA20\nDA20\n8A20\nFBE0\nENDCHAR\nSTARTCHAR U_9F87\nENCODING 40839\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1040\n5940\n5540\nFD40\n05E0\nA540\nA540\nDD40\n85C0\nFF40\n8460\nENDCHAR\nSTARTCHAR U_9F88\nENCODING 40840\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n5A20\n53E0\nFA20\n03E0\nAA80\nAAA0\nAAC0\nDA40\n8AA0\nFB20\nENDCHAR\nSTARTCHAR U_9F89\nENCODING 40841\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\nB900\nA3C0\nF940\n07E0\nA800\nABE0\nDA20\n8A20\nFBE0\n8A20\nENDCHAR\nSTARTCHAR U_9F8A\nENCODING 40842\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n5A20\n5220\nFFE0\n0080\nAA80\nAAE0\nAA80\nDA80\n8D80\nF8E0\nENDCHAR\nSTARTCHAR U_9F8B\nENCODING 40843\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13E0\n5880\n53E0\nFAA0\n03E0\nA880\nABE0\nAAA0\nDBE0\n8A20\nFA60\nENDCHAR\nSTARTCHAR U_9F8C\nENCODING 40844\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23E0\nBA20\nA3E0\nFA00\n03E0\nAB40\nABE0\nDA80\n8DE0\n8880\nFBE0\nENDCHAR\nSTARTCHAR U_9F8D\nENCODING 40845\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n11E0\nFD00\n29E0\nFE20\n01E0\n7D00\n45E0\n7D00\n45E0\n7D20\n45E0\nENDCHAR\nSTARTCHAR U_9F8E\nENCODING 40846\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4900\n7FC0\n5500\n7FC0\n5440\n5DC0\n5500\n5DC0\n5520\n95E0\nENDCHAR\nSTARTCHAR U_9F8F\nENCODING 40847\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n7FC0\n2A00\nFFC0\n2840\n3BC0\n2A20\n2BE0\n1100\nFFE0\n2100\nENDCHAR\nSTARTCHAR U_9F90\nENCODING 40848\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\nFFE0\n9100\nFFE0\nA900\nFFE0\nA420\nBDE0\nA500\nBD20\nA5E0\nENDCHAR\nSTARTCHAR U_9F91\nENCODING 40849\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFE00\n53C0\nFC40\n53C0\n5220\n7FE0\n0400\nFFE0\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_9F92\nENCODING 40850\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n13C0\nFE00\n4BC0\nFC40\n6BC0\n5A20\n7FE0\n0000\nFFE0\n2480\nCC60\nENDCHAR\nSTARTCHAR U_9F93\nENCODING 40851\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4480\n44E0\nFF80\n8AE0\nFF20\nAAE0\nEE80\nAAE0\nEE80\nAAA0\nAAE0\nENDCHAR\nSTARTCHAR U_9F94\nENCODING 40852\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\nFE00\n53C0\nFC40\n5BC0\n6A20\n7FE0\n1100\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_9F95\nENCODING 40853\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3F80\nD160\n1F00\n2200\nFBE0\n5200\nFFC0\n4840\n7BC0\n4A20\n5BE0\nENDCHAR\nSTARTCHAR U_9F96\nENCODING 40854\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4940\nEFE0\nAAC0\nEFE0\n0420\nFF60\nB540\nFF60\nB540\nFF40\nAD60\nENDCHAR\nSTARTCHAR U_9F97\nENCODING 40855\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1F80\n0400\nFFE0\nAAA0\n3BC0\n1100\n7DC0\n2840\nFDC0\n6920\n59E0\nENDCHAR\nSTARTCHAR U_9F98\nENCODING 40856\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBC0\n5040\nFFC0\n6A20\n5BE0\nE780\nBAE0\nE780\nBAE0\nE380\nBAE0\nENDCHAR\nSTARTCHAR U_9F99\nENCODING 40857\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\n0880\n0800\nFFE0\n0A00\n0A40\n1280\n1300\n2220\n4620\n99E0\nENDCHAR\nSTARTCHAR U_9F9A\nENCODING 40858\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0900\nFFE0\n0A80\n3320\nCDE0\n0900\n7FC0\n0900\nFFE0\n0900\n70E0\nENDCHAR\nSTARTCHAR U_9F9B\nENCODING 40859\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n1B00\nE0E0\n3F80\n2080\n3F80\n0900\nFFE0\n1280\n2320\nDDE0\nENDCHAR\nSTARTCHAR U_9F9C\nENCODING 40860\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n7FC0\n4040\n7FC0\n2A40\nFB40\n2AC0\nFB40\n2BC0\n6A20\n07E0\nENDCHAR\nSTARTCHAR U_9F9D\nENCODING 40861\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3200\nCFC0\n4840\nFEC0\n4280\nFAE0\nCEE0\n5AA0\n4AE0\n4EA0\n59E0\nENDCHAR\nSTARTCHAR U_9F9E\nENCODING 40862\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n5500\n3BE0\nFE40\nB580\nD640\n1FE0\n7540\n1540\nFDE0\n1520\n73E0\nENDCHAR\nSTARTCHAR U_9F9F\nENCODING 40863\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n1F00\n2200\n7FC0\nA440\n3FC0\n2440\n3FC0\n0400\n0420\n03E0\nENDCHAR\nSTARTCHAR U_9FA0\nENCODING 40864\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0E00\n3180\nDF60\nEEE0\nAAA0\nEEE0\n0000\nFFE0\n9120\nFFE0\n9120\nENDCHAR\nSTARTCHAR U_9FA1\nENCODING 40865\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n2900\n45E0\nFE20\nAAC0\nFE80\n0080\nFE80\nAA80\nFF40\nAA20\nENDCHAR\nSTARTCHAR U_9FA2\nENCODING 40866\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n3840\n4580\nBA80\n01E0\nFE80\nAA80\nFFC0\nAAA0\nFEA0\nAA80\nAE80\nENDCHAR\nSTARTCHAR U_9FA3\nENCODING 40867\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n23C0\n3040\n4BC0\nFC40\nABE0\nF8A0\n02C0\nF980\nAAC0\nFCA0\nA900\nENDCHAR\nSTARTCHAR U_9FA4\nENCODING 40868\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n32A0\n4BC0\nB6A0\nFBE0\nA880\nF900\n03E0\nFA20\nABE0\nFA20\nABE0\nENDCHAR\nSTARTCHAR U_9FA5\nENCODING 40869\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n27E0\n5080\n8BC0\nFE40\nABC0\nFA40\n03C0\nFA40\nABC0\nF980\nAE60\nENDCHAR\nSTARTCHAR U_9FA6\nENCODING 40870\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2540\n2FE0\n2820\nB7C0\nA440\n27C0\n2100\n27E0\n5520\n5560\n8100\nENDCHAR\nSTARTCHAR U_9FA7\nENCODING 40871\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0FC0\nE940\nAFC0\nA240\nEFE0\nA280\nBFE0\nA440\nEFC0\n1440\n07C0\nENDCHAR\nSTARTCHAR U_9FA8\nENCODING 40872\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n7FE0\n4A00\n5FC0\n5200\n7FC0\n5200\n5FC0\n5200\n5FC0\n5000\n7FE0\nENDCHAR\nSTARTCHAR U_9FA9\nENCODING 40873\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1080\nFFE0\n5080\nFC60\n5380\nFA00\nABE0\nFA40\n2240\nFC40\n2440\nENDCHAR\nSTARTCHAR U_9FAA\nENCODING 40874\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2100\nF900\n2100\nF900\n2280\n3A80\nA440\nA820\nE000\n9FE0\nENDCHAR\nSTARTCHAR U_9FAB\nENCODING 40875\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nF900\n2280\nFC40\nABA0\nF900\nA900\nFFE0\n2100\nF900\n2100\nENDCHAR\nSTARTCHAR U_9FAC\nENCODING 40876\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\n2FE0\n5AA0\nF920\n2FE0\nF920\n2FE0\nBA20\n6BA0\n3820\nC860\nENDCHAR\nSTARTCHAR U_9FAD\nENCODING 40877\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFBE0\nA2A0\nF3E0\nA2A0\nF3E0\nA140\nFBE0\n0940\nABE0\n8940\n3220\nENDCHAR\nSTARTCHAR U_9FAE\nENCODING 40878\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFEE0\nAAA0\nF660\nAAA0\nF7C0\nA540\nFFC0\n0A80\nAFE0\n8A80\n3440\nENDCHAR\nSTARTCHAR U_9FAF\nENCODING 40879\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2140\n3120\n4FE0\nF500\n2520\nFD20\n2CC0\nB480\n64A0\n3560\nCA20\nENDCHAR\nSTARTCHAR U_9FB0\nENCODING 40880\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n0000\n0400\n0400\n0400\n0780\n2400\n2400\n3400\n4C00\n83E0\nENDCHAR\nSTARTCHAR U_9FB1\nENCODING 40881\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \nFFC0\n8040\nA140\n9140\n8A40\n8440\n8A40\n9140\nA140\n8040\nFFC0\nENDCHAR\nSTARTCHAR U_9FB2\nENCODING 40882\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\n2FE0\n5880\nFFE0\n2AA0\nFBE0\n2AA0\nBBE0\n6880\n3FE0\nD080\nENDCHAR\nSTARTCHAR U_9FB3\nENCODING 40883\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2080\n7BC0\n2080\nFBE0\n5140\nAAA0\n2080\nFBE0\n2080\n2080\nFBE0\nENDCHAR\nSTARTCHAR U_9FB4\nENCODING 40884\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0000\n0000\n0000\n7FC0\n0080\n0500\n0200\n0100\n0100\n0000\n0000\nENDCHAR\nSTARTCHAR U_9FB5\nENCODING 40885\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0380\n3C00\n0400\n7FC0\n0800\nFFE0\n1000\n2000\nC000\n0000\n0000\nENDCHAR\nSTARTCHAR U_9FB6\nENCODING 40886\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n0400\n7FC0\n0400\n3F80\n0400\nFFE0\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_9FB7\nENCODING 40887\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\n7FC0\n1100\nFFE0\n0000\n0000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_9FB8\nENCODING 40888\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0400\n2480\n1500\n7FE0\n4040\n8000\n0000\n0000\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_9FB9\nENCODING 40889\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2480\n1500\n7FC0\n0400\n0800\nFFE0\n1100\n2080\nC060\n0000\n0000\nENDCHAR\nSTARTCHAR U_9FBA\nENCODING 40890\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2000\nF800\n2000\nF800\n8800\nF800\n8800\nF800\n2000\nF800\n2000\nENDCHAR\nSTARTCHAR U_9FBB\nENCODING 40891\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2440\n4E80\nF1E0\n4E80\nF1E0\n0E00\nAAA0\nAEA0\n0000\n0000\n0000\nENDCHAR\nSTARTCHAR U_9FBC\nENCODING 40892\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n21C0\n2100\n2FE0\nF540\n2AA0\n2440\n2FE0\n3440\nC7C0\n0440\n07C0\nENDCHAR\nSTARTCHAR U_9FBD\nENCODING 40893\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2200\n23C0\n2480\nAFE0\nB4A0\nA7E0\n24A0\n37E0\n4800\n46A0\n8AA0\nENDCHAR\nSTARTCHAR U_9FBE\nENCODING 40894\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1200\n1200\n7FE0\n5520\n5360\n79A0\n4FE0\n6BA0\n5560\nA920\nC060\nENDCHAR\nSTARTCHAR U_9FBF\nENCODING 40895\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n1100\n27C0\n6100\nAFE0\n2100\n27C0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_9FC0\nENCODING 40896\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n7EC0\n4960\n7E80\n5540\nFFE0\n4A40\n5140\n7FC0\nENDCHAR\nSTARTCHAR U_9FC1\nENCODING 40897\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4280\n2280\nFFE0\n0280\nF280\n0280\nFFE0\n0000\nF440\n9420\nF820\nENDCHAR\nSTARTCHAR U_9FC2\nENCODING 40898\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n2100\nFBC0\n2240\nFBC0\nAA40\nFBE0\nAA00\nFBE0\n2020\nFAA0\n2560\nENDCHAR\nSTARTCHAR U_9FC3\nENCODING 40899\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n0100\nF100\n9FE0\n9100\nF980\n9540\nFBA0\n9100\n9280\nF440\n0820\nENDCHAR\nSTARTCHAR U_9FC4\nENCODING 40900\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FC0\nA240\n4E40\n2340\nC440\n4980\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_9FC5\nENCODING 40901\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4FE0\n2100\nFFE0\n1120\n27C0\n7100\nA280\n2FE0\n2080\n2300\n2080\nENDCHAR\nSTARTCHAR U_9FC6\nENCODING 40902\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2100\nF7E0\n1100\n2200\n73C0\nA240\n2540\n2480\n2940\n3220\nENDCHAR\nSTARTCHAR U_9FC7\nENCODING 40903\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1400\n1780\n2900\n6FC0\nA240\n3FE0\n2240\n2FC0\n2200\n2200\n2600\nENDCHAR\nSTARTCHAR U_9FC8\nENCODING 40904\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n17C0\n2440\n4440\n9440\n27C0\n6500\nA500\n2480\n2880\n2840\n3020\nENDCHAR\nSTARTCHAR U_9FC9\nENCODING 40905\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1000\n2FE0\n4100\n9100\n2100\n67C0\nA240\n2240\n2240\n2240\n2FE0\nENDCHAR\nSTARTCHAR U_9FCA\nENCODING 40906\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n1100\nFFE0\n1100\n4000\n2100\n8500\n55E0\n2500\nC500\n4500\n4FE0\nENDCHAR\nSTARTCHAR U_9FCB\nENCODING 40907\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP \n4100\n2FE0\nF100\n2FE0\n3440\n67C0\nB280\n2FE0\n2440\n2440\n27C0\nENDCHAR\nSTARTCHAR U_EEFF\nENCODING 61183\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 2 4 5 2\nBITMAP\nC0\nC0\n40\n80\nENDCHAR\nSTARTCHAR U_F6B1\nENCODING 63153\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4440\n8C20\n8420\n8420\n8420\n8420\n4E40\n2080\n1F00\nENDCHAR\nSTARTCHAR U_F6B2\nENCODING 63154\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4640\n8920\n8120\n8220\n8420\n8920\n4F40\n2080\n1F00\nENDCHAR\nSTARTCHAR U_F6B3\nENCODING 63155\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4640\n8920\n8120\n8220\n8120\n8920\n4640\n2080\n1F00\nENDCHAR\nSTARTCHAR U_F6B4\nENCODING 63156\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4240\n8620\n8A20\n9220\n9F20\n8220\n4740\n2080\n1F00\nENDCHAR\nSTARTCHAR U_F6B5\nENCODING 63157\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4E40\n8820\n8820\n8620\n8120\n8920\n4640\n2080\n1F00\nENDCHAR\nSTARTCHAR U_F6B6\nENCODING 63158\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4640\n8920\n8820\n8E20\n8920\n8920\n4640\n2080\n1F00\nENDCHAR\nSTARTCHAR U_F6B7\nENCODING 63159\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4F40\n8920\n8220\n8220\n8420\n8420\n4440\n2080\n1F00\nENDCHAR\nSTARTCHAR U_F6B8\nENCODING 63160\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4640\n8920\n8920\n8620\n8920\n8920\n4640\n2080\n1F00\nENDCHAR\nSTARTCHAR U_F6B9\nENCODING 63161\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n4640\n8920\n8920\n8720\n8120\n8920\n4640\n2080\n1F00\nENDCHAR\nSTARTCHAR U_F6BA\nENCODING 63162\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2080\n5140\nB2A0\n92A0\n92A0\n92A0\n92A0\n7140\n2080\n1F00\nENDCHAR\nSTARTCHAR U_F6BB\nENCODING 63163\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4440\n8C20\n8420\n8420\n8420\n8420\n8420\n8420\n4E40\n2080\nENDCHAR\nSTARTCHAR U_F6BC\nENCODING 63164\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4E40\n9120\n9120\n8120\n8220\n8420\n8820\n9120\n5F40\n2080\nENDCHAR\nSTARTCHAR U_F6BD\nENCODING 63165\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4E40\n9120\n8120\n8220\n8620\n8120\n8120\n9120\n4E40\n2080\nENDCHAR\nSTARTCHAR U_F6BE\nENCODING 63166\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4240\n8620\n8620\n8A20\n8A20\n9220\n9F20\n8220\n4740\n2080\nENDCHAR\nSTARTCHAR U_F6BF\nENCODING 63167\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n5F40\n9020\n9020\n9020\n9E20\n8120\n8120\n9120\n4E40\n2080\nENDCHAR\nSTARTCHAR U_F6C0\nENCODING 63168\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4E40\n9120\n9020\n9020\n9620\n9920\n9120\n9120\n4E40\n2080\nENDCHAR\nSTARTCHAR U_F6C1\nENCODING 63169\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n5F40\n9120\n8120\n8220\n8220\n8420\n8420\n8420\n4440\n2080\nENDCHAR\nSTARTCHAR U_F6C2\nENCODING 63170\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4E40\n9120\n9120\n9120\n8E20\n9120\n9120\n9120\n4E40\n2080\nENDCHAR\nSTARTCHAR U_F6C3\nENCODING 63171\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n4E40\n9120\n9120\n9120\n8F20\n8120\n8120\n9120\n4E40\n2080\nENDCHAR\nSTARTCHAR U_F6C4\nENCODING 63172\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n5240\nB520\n9520\n9520\n9520\n9520\n9520\n9520\n7A40\n2080\nENDCHAR\nSTARTCHAR U_F6C5\nENCODING 63173\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 10 5 0\nBITMAP\n40\n00\n00\n40\nC0\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_F6C6\nENCODING 63174\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\n44\n00\n00\n44\nCC\n44\n44\n44\n44\nEE\nENDCHAR\nSTARTCHAR U_F6C7\nENCODING 63175\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n4900\n0000\n0000\n4900\nDB00\n4900\n4900\n4900\n4900\nFF80\nENDCHAR\nSTARTCHAR U_F6C8\nENCODING 63176\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\n4000\n0000\n0000\n5DC0\nC880\n4880\n4500\n4500\n4200\nE200\nENDCHAR\nSTARTCHAR U_F6C9\nENCODING 63177\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 7 2 0\nBITMAP\nEE\n44\n44\n28\n28\n10\n10\nENDCHAR\nSTARTCHAR U_F6CA\nENCODING 63178\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\n0080\n0000\n0000\nEE80\n4580\n4480\n2880\n2880\n1080\n11C0\nENDCHAR\nSTARTCHAR U_F6CB\nENCODING 63179\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\n0480\n0000\n0000\nA480\nAD80\nA480\nA480\n4480\n4480\n4FC0\nENDCHAR\nSTARTCHAR U_F6CC\nENCODING 63180\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\n0540\n0000\n0000\nA540\nAFC0\nA540\nA540\n4540\n4540\n4FE0\nENDCHAR\nSTARTCHAR U_F6CD\nENCODING 63181\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\n4000\n0000\n0000\n4EE0\nC440\n4280\n4100\n4280\n4440\nEEE0\nENDCHAR\nSTARTCHAR U_F6CE\nENCODING 63182\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 7 2 0\nBITMAP\nEE\n44\n28\n10\n28\n44\nEE\nENDCHAR\nSTARTCHAR U_F6CF\nENCODING 63183\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 4 4 3\nBITMAP\n80\n40\n20\n20\nENDCHAR\nSTARTCHAR U_F6D0\nENCODING 63184\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 4 11 3 -1\nBITMAP\n10\n10\n10\n10\n10\n10\n10\n20\n20\n40\n80\nENDCHAR\nSTARTCHAR U_F6D1\nENCODING 63185\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 11 4 -1\nBITMAP\n20\n20\n20\n20\n20\n20\n20\n20\n20\nE0\n40\nENDCHAR\nSTARTCHAR U_F6D2\nENCODING 63186\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 4 0 4\nBITMAP\n0400\n0200\n0040\nFFE0\nENDCHAR\nSTARTCHAR U_F6D3\nENCODING 63187\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0080\nFFC0\n8080\n8080\n8080\n8080\n8080\n8080\n8080\n8380\n8100\nENDCHAR\nSTARTCHAR U_F6D4\nENCODING 63188\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 3 0 5\nBITMAP\n7FE0\n4040\n8080\nENDCHAR\nSTARTCHAR U_F6D5\nENCODING 63189\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 4 10 1 0\nBITMAP\n80\n40\n40\n10\n20\n20\nC0\n40\n40\n40\nENDCHAR\nSTARTCHAR U_F6D6\nENCODING 63190\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n2000\n3FC0\n4040\n8040\n0040\n0040\n0040\n0040\n0440\n0380\n0100\nENDCHAR\nSTARTCHAR U_F6D7\nENCODING 63191\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 12 0 -1\nBITMAP\n0040\nFFE0\n4000\n4000\n4000\n4000\n4000\n4000\n4000\n4000\n4040\n7FE0\nENDCHAR\nSTARTCHAR U_F6D8\nENCODING 63192\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 11 3 -1\nBITMAP\n84\nFE\n84\n84\n84\n84\n9C\n88\n80\n80\n80\nENDCHAR\nSTARTCHAR U_F6D9\nENCODING 63193\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0400\n0800\n0800\n1000\n1000\n2100\n2080\n47C0\nF820\n4020\nENDCHAR\nSTARTCHAR U_F6DA\nENCODING 63194\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n2900\n2F80\n1100\n3100\n5200\n8C00\n0C00\n1200\n21C0\nC080\nENDCHAR\nSTARTCHAR U_F6DB\nENCODING 63195\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 5 0 5\nBITMAP\n0800\n0400\n7FE0\n4040\n8080\nENDCHAR\nSTARTCHAR U_F6DC\nENCODING 63196\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\n2220\n2220\n4440\n4440\n8880\n8880\n4440\n4440\n2220\n2220\nENDCHAR\nSTARTCHAR U_F6DD\nENCODING 63197\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n0800\n1100\n1200\n2400\n7C00\n0800\n1100\n2780\nF840\n4040\nENDCHAR\nSTARTCHAR U_F6DE\nENCODING 63198\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0200\n7FE0\n4000\n4000\n4000\n4000\n4000\n4000\n8000\n8000\nENDCHAR\nSTARTCHAR U_F6DF\nENCODING 63199\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF000\n1000\n2000\n2000\n7800\n0800\n4800\n5000\n2000\n5060\n8FC0\nENDCHAR\nSTARTCHAR U_F6E0\nENCODING 63200\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\n0040\n7FE0\n0040\n0040\n0040\n3FC0\n0040\n0040\n0040\nFFE0\nENDCHAR\nSTARTCHAR U_F6E1\nENCODING 63201\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 11 2 -1\nBITMAP\n18\n10\n26\n44\n88\n13\n22\n44\n08\n10\n60\nENDCHAR\nSTARTCHAR U_F6E2\nENCODING 63202\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n0FC0\n0800\n0800\n7F80\n2100\n1100\n0E00\n0400\n1B00\nE0C0\nENDCHAR\nSTARTCHAR U_F6E3\nENCODING 63203\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n0400\n0400\n0400\nFFE0\n0A00\n0A00\n1200\n2220\n4220\n81E0\nENDCHAR\nSTARTCHAR U_F6E4\nENCODING 63204\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0200\n3FE0\nA000\n6000\n2000\n6000\nA000\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_F6E5\nENCODING 63205\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 6 0 4\nBITMAP\nFC80\n4B20\n3140\n2080\n4040\n8020\nENDCHAR\nSTARTCHAR U_F6E6\nENCODING 63206\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0600\n1980\n6600\n18C0\n0700\n7A00\n2200\n23C0\n3200\n4E00\n83E0\nENDCHAR\nSTARTCHAR U_F6E7\nENCODING 63207\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n7F80\n0480\nFFE0\n0480\n7F80\n2680\n1D00\n1480\nE440\n5C20\nENDCHAR\nSTARTCHAR U_F6E8\nENCODING 63208\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 4 1 4 7\nBITMAP\n90\nENDCHAR\nSTARTCHAR U_F6E9\nENCODING 63209\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 2 3 8\nBITMAP\n70\n88\nENDCHAR\nSTARTCHAR U_F6EA\nENCODING 63210\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 7 3 1\nBITMAP\n80\n40\n20\n10\n10\n08\n08\nENDCHAR\nSTARTCHAR U_F6EB\nENCODING 63211\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 2 1\nBITMAP\n02\n89\n44\n20\n10\n10\n08\n08\nENDCHAR\nSTARTCHAR U_F6EC\nENCODING 63212\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 2 0\nBITMAP\n80\n40\n20\n10\n08\n04\n03\n1C\nENDCHAR\nSTARTCHAR U_F6ED\nENCODING 63213\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 1 0\nBITMAP\n0500\n8280\n4000\n2000\n1000\n0800\n0400\n0300\n0C00\nENDCHAR\nSTARTCHAR U_F6EE\nENCODING 63214\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 7 2 2\nBITMAP\n22\n22\n22\n22\n22\n44\n88\nENDCHAR\nSTARTCHAR U_F6EF\nENCODING 63215\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 1 1\nBITMAP\n0800\n1400\n2200\nC180\n3E00\n0800\n0800\nFF80\nENDCHAR\nSTARTCHAR U_F6F0\nENCODING 63216\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 2 1\nBITMAP\n10\n20\n7F\n82\n04\n18\n04\n04\nENDCHAR\nSTARTCHAR U_F6F1\nENCODING 63217\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 2 1\nBITMAP\n01\n01\n32\n4A\n84\n8C\n92\n61\nENDCHAR\nSTARTCHAR U_F6F2\nENCODING 63218\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 2 1\nBITMAP\n3C\n42\n81\n81\n81\n81\n42\n3C\nENDCHAR\nSTARTCHAR U_F6F3\nENCODING 63219\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 1 1 4\nBITMAP\nFFC0\nENDCHAR\nSTARTCHAR U_F6F4\nENCODING 63220\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 10 5 0\nBITMAP\nE0\n80\n80\n80\n80\n80\n80\n80\n80\nE0\nENDCHAR\nSTARTCHAR U_F6F5\nENCODING 63221\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 10 5 0\nBITMAP\nE0\n20\n20\n20\n20\n20\n20\n20\n20\nE0\nENDCHAR\nSTARTCHAR U_F6F6\nENCODING 63222\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 7 3 1\nBITMAP\n10\n92\n54\n38\n54\n92\n10\nENDCHAR\nSTARTCHAR U_F6F7\nENCODING 63223\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 3 1\nBITMAP\n10\nA8\n70\n3C\n6A\nB2\nA4\nD8\nENDCHAR\nSTARTCHAR U_F6F8\nENCODING 63224\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 12 2 -1\nBITMAP\n1000\n0800\n0A00\n7C00\n1000\n1E00\n3580\n5880\n9880\n9880\nE100\n0E00\nENDCHAR\nSTARTCHAR U_F6F9\nENCODING 63225\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 6 3 2\nBITMAP\n88\n84\n82\n86\nC0\n40\nENDCHAR\nSTARTCHAR U_F6FA\nENCODING 63226\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\n8000\n8200\n8100\n8080\n8080\nC180\nC000\n4000\nENDCHAR\nSTARTCHAR U_F6FB\nENCODING 63227\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 4 6 4 2\nBITMAP\n60\n20\nD0\n10\n10\n20\nENDCHAR\nSTARTCHAR U_F6FC\nENCODING 63228\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 11 3 0\nBITMAP\n40\n38\n20\n00\nB8\nC4\n04\n04\n08\n08\n10\nENDCHAR\nSTARTCHAR U_F6FD\nENCODING 63229\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 6 3 2\nBITMAP\n38\n10\n70\n30\n50\n9C\nENDCHAR\nSTARTCHAR U_F6FE\nENCODING 63230\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\n40\n38\n00\n18\nF0\n20\n30\nD0\n90\n0E\nENDCHAR\nSTARTCHAR U_F6FF\nENCODING 63231\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 7 3 2\nBITMAP\n40\n44\nE8\n48\n74\nD4\n58\nENDCHAR\nSTARTCHAR U_F700\nENCODING 63232\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 2 1\nBITMAP\n2000\n2000\n2980\nF000\n2700\n3880\n6880\nA880\nE700\nENDCHAR\nSTARTCHAR U_F701\nENCODING 63233\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\n1000\n1000\nFD00\n2480\n6580\n4400\n8800\n9800\nENDCHAR\nSTARTCHAR U_F702\nENCODING 63234\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 2 1\nBITMAP\n0180\n1100\n1000\n1900\nE480\n2480\n4400\n8800\n9800\nENDCHAR\nSTARTCHAR U_F703\nENCODING 63235\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 10 3 0\nBITMAP\n20\n14\nF8\n14\nF8\n08\n7C\n80\n80\n7C\nENDCHAR\nSTARTCHAR U_F704\nENCODING 63236\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 11 2 0\nBITMAP\n0100\n3280\n1500\nF800\n0E00\nF800\n0400\n7C00\n8000\n8000\n7C00\nENDCHAR\nSTARTCHAR U_F705\nENCODING 63237\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 10 3 0\nBITMAP\n08\n08\n10\n20\nC0\n80\n60\n10\n08\n08\nENDCHAR\nSTARTCHAR U_F706\nENCODING 63238\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n08\n09\n12\n21\nC0\n40\n20\n10\n08\n08\nENDCHAR\nSTARTCHAR U_F707\nENCODING 63239\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n8200\n4200\n4380\n8E00\n8200\n8200\nC200\nC200\n4400\n0400\nENDCHAR\nSTARTCHAR U_F708\nENCODING 63240\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 11 2 0\nBITMAP\n0080\n8300\n4280\n4280\n9F00\n8200\n8200\nC200\nC200\n4400\n0400\nENDCHAR\nSTARTCHAR U_F709\nENCODING 63241\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 2 1\nBITMAP\n7E\n08\n00\n00\n00\n80\n80\n7E\nENDCHAR\nSTARTCHAR U_F70A\nENCODING 63242\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n01\n7F\n08\n10\n00\n00\n80\n80\n80\n7E\nENDCHAR\nSTARTCHAR U_F70B\nENCODING 63243\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 10 3 0\nBITMAP\n20\n24\n18\nF0\n08\n3C\nC0\n80\n80\n7C\nENDCHAR\nSTARTCHAR U_F70C\nENCODING 63244\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 11 3 0\nBITMAP\n02\n06\n20\n2C\n10\nF0\n08\n7C\n80\n80\n78\nENDCHAR\nSTARTCHAR U_F70D\nENCODING 63245\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 9 3 1\nBITMAP\n80\n80\n80\n80\n80\n80\n84\n8C\n70\nENDCHAR\nSTARTCHAR U_F70E\nENCODING 63246\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\n04\n8C\n82\n80\n80\n80\n80\n84\n8C\n70\nENDCHAR\nSTARTCHAR U_F70F\nENCODING 63247\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0400\n0400\n0FC0\nF400\n0C00\n1400\n1400\n0C00\n0400\n0800\n1000\nENDCHAR\nSTARTCHAR U_F710\nENCODING 63248\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 12 1 -1\nBITMAP\n00C0\n0480\n0400\n07C0\nFC00\n0C00\n1400\n1400\n0C00\n0400\n0800\n1000\nENDCHAR\nSTARTCHAR U_F711\nENCODING 63249\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 9 2 0\nBITMAP\n0200\n2200\n23C0\n3E00\nE200\n2600\n2000\n2000\n1F00\nENDCHAR\nSTARTCHAR U_F712\nENCODING 63250\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 1 0\nBITMAP\n0040\n00A0\n0140\n1100\n11C0\n1F00\nF100\n1300\n1000\n1000\n0F80\nENDCHAR\nSTARTCHAR U_F713\nENCODING 63251\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n04\n3C\n08\n33\n7C\n88\n10\n10\n10\n0E\nENDCHAR\nSTARTCHAR U_F714\nENCODING 63252\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\n0680\n3D40\n0800\n1100\n3E00\nC800\n1000\n1000\n1000\n0E00\nENDCHAR\nSTARTCHAR U_F715\nENCODING 63253\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n1000\n1000\n2C00\nF700\n2980\n4000\n4000\n5000\n9000\n8F80\nENDCHAR\nSTARTCHAR U_F716\nENCODING 63254\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 10 2 0\nBITMAP\n2080\n1140\n1080\n1800\nEF80\n4200\n4000\n4000\n9000\n8F00\nENDCHAR\nSTARTCHAR U_F717\nENCODING 63255\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\n20\n2C\n38\nC0\n4C\n72\nC2\n02\n04\n18\nENDCHAR\nSTARTCHAR U_F718\nENCODING 63256\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 12 2 -1\nBITMAP\n0100\n0080\n1000\n1400\nE800\n2000\n2E00\n7100\n0100\n0100\n0600\n3800\nENDCHAR\nSTARTCHAR U_F719\nENCODING 63257\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 6 2 2\nBITMAP\n0E\n71\n81\n01\n02\n0C\nENDCHAR\nSTARTCHAR U_F71A\nENCODING 63258\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 7 1 1\nBITMAP\n0F80\nB040\n4040\n0040\n0040\n0080\n0700\nENDCHAR\nSTARTCHAR U_F71B\nENCODING 63259\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 10 1 0\nBITMAP\n0020\n0040\n0720\n1880\nE040\n0040\n0040\n0080\n0300\n0400\nENDCHAR\nSTARTCHAR U_F71C\nENCODING 63260\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\n1F80\nE400\n0800\n1000\n1000\n1000\n1800\n0E00\nENDCHAR\nSTARTCHAR U_F71D\nENCODING 63261\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\n1F80\nE480\n0900\n1080\n1000\n1000\n1800\n0E00\nENDCHAR\nSTARTCHAR U_F71E\nENCODING 63262\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\n40\n20\n20\n20\n2E\n30\nC0\n80\n80\n7E\nENDCHAR\nSTARTCHAR U_F71F\nENCODING 63263\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n0100\n2280\n2100\n2000\n2600\n3800\n4000\n8000\n8000\n7E00\nENDCHAR\nSTARTCHAR U_F720\nENCODING 63264\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n10\n10\n78\n21\n26\n44\n44\n9C\n27\n1C\nENDCHAR\nSTARTCHAR U_F721\nENCODING 63265\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\n4000\n4E00\n8000\n8000\n8000\nC000\n9000\n8F80\nENDCHAR\nSTARTCHAR U_F722\nENCODING 63266\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\n8800\n4E00\n7900\n5080\n5080\nA080\nB780\nC780\nENDCHAR\nSTARTCHAR U_F723\nENCODING 63267\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 10 2 0\nBITMAP\n2000\n2000\n3300\nFC80\n3080\n2080\n6080\nAF80\nA980\n2640\nENDCHAR\nSTARTCHAR U_F724\nENCODING 63268\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\n3F00\n4880\n9080\n9080\n9080\nA080\n4100\n0600\nENDCHAR\nSTARTCHAR U_F725\nENCODING 63269\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 2 0\nBITMAP\n4200\n4280\n4F00\n8200\n8200\nC200\n8F00\n9280\n8C00\nENDCHAR\nSTARTCHAR U_F726\nENCODING 63270\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 0\nBITMAP\n0080\n0040\n4200\n4200\n4380\n8E00\n8200\n8200\nCE00\n9380\n0E00\nENDCHAR\nSTARTCHAR U_F727\nENCODING 63271\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 1 0\nBITMAP\n0040\n00A0\n42C0\n4200\n4380\n8E00\n8200\n8200\nCE00\n9380\n8E00\nENDCHAR\nSTARTCHAR U_F728\nENCODING 63272\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 9 2 1\nBITMAP\n1300\nF100\n2100\n4180\n4140\n4100\n4200\n6200\n3C00\nENDCHAR\nSTARTCHAR U_F729\nENCODING 63273\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 1 0\nBITMAP\n0040\n00A0\n3240\nD100\n2100\n4180\n4140\n4100\n4200\n6200\n3C00\nENDCHAR\nSTARTCHAR U_F72A\nENCODING 63274\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 10 1 0\nBITMAP\n00C0\n10A0\nF340\n2100\n4180\n4140\n4100\n4200\n6200\n3C00\nENDCHAR\nSTARTCHAR U_F72B\nENCODING 63275\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\n0800\n0400\n1800\n1000\n0F00\n3480\nC480\nBC00\nENDCHAR\nSTARTCHAR U_F72C\nENCODING 63276\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 10 1 0\nBITMAP\n0080\n0960\n0CA0\n1000\n1000\n0E00\n3980\nC480\nC580\n3C00\nENDCHAR\nSTARTCHAR U_F72D\nENCODING 63277\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 9 1 0\nBITMAP\n0880\n0D40\n10C0\n1000\n0F00\n3880\nC480\nC500\n3C00\nENDCHAR\nSTARTCHAR U_F72E\nENCODING 63278\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 6 1 2\nBITMAP\n1800\n2400\n4200\nC100\n0080\n0040\nENDCHAR\nSTARTCHAR U_F72F\nENCODING 63279\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 8 1 2\nBITMAP\n0180\n0140\n1880\n2400\n4200\nC100\n0080\n0040\nENDCHAR\nSTARTCHAR U_F730\nENCODING 63280\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 8 2 1\nBITMAP\n0180\n0280\n1100\n6800\n4400\n8200\n0180\n00C0\nENDCHAR\nSTARTCHAR U_F731\nENCODING 63281\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\n4F00\n4200\n8F80\n8200\n8200\nCE00\n9380\n9E00\nENDCHAR\nSTARTCHAR U_F732\nENCODING 63282\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 8 1 1\nBITMAP\n4FE0\n4240\n8F80\n8200\n8200\nCE00\n9380\n9E40\nENDCHAR\nSTARTCHAR U_F733\nENCODING 63283\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 10 1 1\nBITMAP\n0020\n0040\n4F60\n4200\n9F80\n8200\n8200\nCE00\n9380\n8C00\nENDCHAR\nSTARTCHAR U_F734\nENCODING 63284\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\n10\n10\n16\nF8\n14\n78\n10\n78\n96\n60\nENDCHAR\nSTARTCHAR U_F735\nENCODING 63285\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 10 2 0\nBITMAP\n0400\n3C00\n0800\n0900\n1100\n7D00\nA300\nC2C0\n8400\n1800\nENDCHAR\nSTARTCHAR U_F736\nENCODING 63286\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\n2000\n1000\n9880\n6140\n31C0\nE100\n6100\n6100\n4100\n3E00\nENDCHAR\nSTARTCHAR U_F737\nENCODING 63287\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n0400\n4400\n4E00\n7900\n4880\nB080\nB080\nB080\nC100\n0E00\nENDCHAR\nSTARTCHAR U_F738\nENCODING 63288\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\n10\n10\n20\n78\nA0\nC0\n78\n42\n42\n3C\nENDCHAR\nSTARTCHAR U_F739\nENCODING 63289\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 6 3 2\nBITMAP\n7E\n21\nEE\n10\n10\n10\nENDCHAR\nSTARTCHAR U_F73A\nENCODING 63290\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n0800\n6B00\n5C80\n3080\nE880\n1700\n1000\n0800\n0800\n0800\nENDCHAR\nSTARTCHAR U_F73B\nENCODING 63291\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 2 1\nBITMAP\n18\n5E\n96\nB5\nD5\n56\n0C\n10\nENDCHAR\nSTARTCHAR U_F73C\nENCODING 63292\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n0C00\n5200\n5F00\nB280\nD280\nD280\nD280\n4F00\n0800\n1000\nENDCHAR\nSTARTCHAR U_F73D\nENCODING 63293\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 8 3 1\nBITMAP\n20\n10\n1C\n10\n10\n78\n94\n60\nENDCHAR\nSTARTCHAR U_F73E\nENCODING 63294\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n08\n08\n08\n0E\n08\n08\n08\n7E\n8B\n78\nENDCHAR\nSTARTCHAR U_F73F\nENCODING 63295\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\n38\n38\n40\n40\n9C\nA2\nC2\n02\n04\n78\nENDCHAR\nSTARTCHAR U_F740\nENCODING 63296\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 10 3 0\nBITMAP\n40\n58\n64\nC4\nC4\nC4\nC4\n44\n08\n10\nENDCHAR\nSTARTCHAR U_F741\nENCODING 63297\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\n08\n78\n10\n20\n5C\nE2\n82\n32\n4C\n38\nENDCHAR\nSTARTCHAR U_F742\nENCODING 63298\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 10 2 0\nBITMAP\n2000\n4000\n5000\n7600\nFA00\n4200\n4200\nC240\n4380\n4000\nENDCHAR\nSTARTCHAR U_F743\nENCODING 63299\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n04\n3C\n08\n10\n2E\n71\nC1\n81\n02\n0C\nENDCHAR\nSTARTCHAR U_F744\nENCODING 63300\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 7 3 1\nBITMAP\n20\n20\nFC\n22\n62\nE2\n2C\nENDCHAR\nSTARTCHAR U_F745\nENCODING 63301\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 11 2 -1\nBITMAP\n2000\n2000\n2000\n3600\nF980\n2080\n6080\nA080\nA100\n6300\n2C00\nENDCHAR\nSTARTCHAR U_F746\nENCODING 63302\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n0C00\n3800\n0800\n1600\n1980\n6080\nA080\nA480\nCB00\n4600\nENDCHAR\nSTARTCHAR U_F747\nENCODING 63303\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n0400\n3C00\n1E00\n3100\n5900\n2A00\n1C00\n3700\nC880\n8980\nENDCHAR\nSTARTCHAR U_F748\nENCODING 63304\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 3 0\nBITMAP\n10\n2C\nF0\n40\n79\n8E\n98\n68\n40\n3E\nENDCHAR\nSTARTCHAR U_F749\nENCODING 63305\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n1000\n0800\n1000\n1000\n2000\n5C00\n6400\n4480\n8480\n8700\nENDCHAR\nSTARTCHAR U_F74A\nENCODING 63306\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 5 4 3\nBITMAP\nF8\n30\n20\n40\n40\nENDCHAR\nSTARTCHAR U_F74B\nENCODING 63307\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 9 2 0\nBITMAP\n9F\n61\n0E\n08\n08\n10\n10\n20\n40\nENDCHAR\nSTARTCHAR U_F74C\nENCODING 63308\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 4 6 4 2\nBITMAP\n10\n20\n60\nA0\n20\n20\nENDCHAR\nSTARTCHAR U_F74D\nENCODING 63309\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 10 3 0\nBITMAP\n08\n08\n10\n30\n30\nD0\n10\n10\n10\n10\nENDCHAR\nSTARTCHAR U_F74E\nENCODING 63310\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 7 4 1\nBITMAP\n20\nF8\n88\n90\n10\n20\n40\nENDCHAR\nSTARTCHAR U_F74F\nENCODING 63311\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\n10\n10\n1E\nE2\n82\n84\n04\n08\n10\n20\nENDCHAR\nSTARTCHAR U_F750\nENCODING 63312\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 5 3 3\nBITMAP\n0C\n30\n10\n10\nFE\nENDCHAR\nSTARTCHAR U_F751\nENCODING 63313\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 6 2 2\nBITMAP\n7F00\n0800\n0800\n0800\n0800\nFF80\nENDCHAR\nSTARTCHAR U_F752\nENCODING 63314\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 6 2 2\nBITMAP\n08\n7E\n08\n18\n28\nD8\nENDCHAR\nSTARTCHAR U_F753\nENCODING 63315\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n0800\n0400\n0400\n7F80\n0C00\n1400\n2400\n4400\n8C00\n0400\nENDCHAR\nSTARTCHAR U_F754\nENCODING 63316\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 8 4 1\nBITMAP\n10\n20\nFC\n24\n24\n44\n48\n88\nENDCHAR\nSTARTCHAR U_F755\nENCODING 63317\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 9 3 1\nBITMAP\n03\n12\n20\nFC\n24\n24\n44\n48\n88\nENDCHAR\nSTARTCHAR U_F756\nENCODING 63318\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 2 1\nBITMAP\n1000\n0800\n0F00\n7800\n0F80\nF800\n0800\n0400\n0400\nENDCHAR\nSTARTCHAR U_F757\nENCODING 63319\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n2380\n1000\n1600\nF800\n1000\n1F00\nE800\n0800\n0800\n0800\nENDCHAR\nSTARTCHAR U_F758\nENCODING 63320\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 9 3 0\nBITMAP\n10\n12\n3E\n44\n04\n08\n10\n20\nC0\nENDCHAR\nSTARTCHAR U_F759\nENCODING 63321\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n0080\n0180\n1200\n3E00\n4400\n0400\n0800\n1800\n2000\nC000\nENDCHAR\nSTARTCHAR U_F75A\nENCODING 63322\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 3 1\nBITMAP\n20\n7F\n88\n88\n10\n10\n20\n40\nENDCHAR\nSTARTCHAR U_F75B\nENCODING 63323\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 11 3 0\nBITMAP\n02\n05\n22\n20\n7F\n88\n88\n10\n10\n20\n40\nENDCHAR\nSTARTCHAR U_F75C\nENCODING 63324\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 6 3 2\nBITMAP\nFE\n02\n02\n04\n04\nFE\nENDCHAR\nSTARTCHAR U_F75D\nENCODING 63325\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 2 2\nBITMAP\n0080\n0100\n0080\nFF00\n0200\n0200\n0200\n0200\nFE00\nENDCHAR\nSTARTCHAR U_F75E\nENCODING 63326\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 2 1\nBITMAP\n0400\n2400\n2400\nFF80\n2400\n2400\n0400\n0800\n1000\nENDCHAR\nSTARTCHAR U_F75F\nENCODING 63327\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 11 2 0\nBITMAP\n0100\n0A80\n2500\n2400\n3F00\nE400\n2400\n2400\n0800\n0800\n1000\nENDCHAR\nSTARTCHAR U_F760\nENCODING 63328\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 2 1\nBITMAP\n20\n00\nC1\n01\n02\n04\n18\n60\nENDCHAR\nSTARTCHAR U_F761\nENCODING 63329\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 2 1\nBITMAP\n0180\n6100\n0000\n8100\n4100\n0200\n0C00\n1000\n6000\nENDCHAR\nSTARTCHAR U_F762\nENCODING 63330\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 3 1\nBITMAP\n04\n7C\n08\n08\n10\n3C\n42\n82\nENDCHAR\nSTARTCHAR U_F763\nENCODING 63331\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n01\n02\n05\n7C\n04\n08\n08\n14\n22\nC0\nENDCHAR\nSTARTCHAR U_F764\nENCODING 63332\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 3 1\nBITMAP\n20\n20\n23\n3E\nE4\n20\n20\n1E\nENDCHAR\nSTARTCHAR U_F765\nENCODING 63333\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n0180\n0100\n1000\n1100\n1F00\nF200\n1000\n1000\n1000\n0F00\nENDCHAR\nSTARTCHAR U_F766\nENCODING 63334\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 9 3 0\nBITMAP\n04\n82\n44\n04\n04\n08\n10\n20\nC0\nENDCHAR\nSTARTCHAR U_F767\nENCODING 63335\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0180\n0140\n0080\nC100\n2100\n2200\n0200\n0400\n0400\n0800\n3000\nENDCHAR\nSTARTCHAR U_F768\nENCODING 63336\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 9 3 0\nBITMAP\n10\n2E\n44\n74\n08\n18\n20\n40\n80\nENDCHAR\nSTARTCHAR U_F769\nENCODING 63337\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n0080\n1100\n1E80\n2200\n3400\n4C00\n0C00\n1400\n2000\nC000\nENDCHAR\nSTARTCHAR U_F76A\nENCODING 63338\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 2 1\nBITMAP\n0200\n0C00\n7400\n0780\nFC00\n0400\n0800\n0800\n1000\nENDCHAR\nSTARTCHAR U_F76B\nENCODING 63339\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 8 1 1\nBITMAP\n03E0\n7C40\n0400\nFF80\n0400\n0400\n0800\n1000\nENDCHAR\nSTARTCHAR U_F76C\nENCODING 63340\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 5 4 2\nBITMAP\nA4\n08\n08\n10\n20\nENDCHAR\nSTARTCHAR U_F76D\nENCODING 63341\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 7 2 1\nBITMAP\n91\n49\n42\n02\n04\n08\n10\nENDCHAR\nSTARTCHAR U_F76E\nENCODING 63342\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 2 0\nBITMAP\n0180\n2100\n9100\n4200\n0200\n0400\n0400\n1800\n2000\nENDCHAR\nSTARTCHAR U_F76F\nENCODING 63343\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 9 3 0\nBITMAP\n7C\n00\n3F\nD0\n10\n10\n20\n20\nC0\nENDCHAR\nSTARTCHAR U_F770\nENCODING 63344\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n0080\n7F00\n0000\n0F00\nF800\n0800\n0800\n1000\n2000\n4000\nENDCHAR\nSTARTCHAR U_F771\nENCODING 63345\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 4 9 5 0\nBITMAP\n80\n80\n80\nE0\n90\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_F772\nENCODING 63346\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 10 4 0\nBITMAP\n08\n90\n88\n80\nE0\n90\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_F773\nENCODING 63347\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n1000\n0800\n0800\nFF80\n0800\n0800\n1000\n1000\n2000\n4000\nENDCHAR\nSTARTCHAR U_F774\nENCODING 63348\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 6 2 2\nBITMAP\n4E00\n3000\n0000\n0000\n0000\nFF80\nENDCHAR\nSTARTCHAR U_F775\nENCODING 63349\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 8 4 1\nBITMAP\n0C\n7C\n08\n48\n30\n28\n44\n80\nENDCHAR\nSTARTCHAR U_F776\nENCODING 63350\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n18\n00\n5E\n24\n08\n1A\n29\nC9\n08\n08\nENDCHAR\nSTARTCHAR U_F777\nENCODING 63351\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 8 4 1\nBITMAP\n08\n04\n08\n08\n10\n30\n60\n80\nENDCHAR\nSTARTCHAR U_F778\nENCODING 63352\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 6 2 2\nBITMAP\n1200\n1100\n2080\n2040\n4040\n8000\nENDCHAR\nSTARTCHAR U_F779\nENCODING 63353\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 8 1 2\nBITMAP\n00C0\n0080\n1200\n1100\n2080\n2040\n4040\n8000\nENDCHAR\nSTARTCHAR U_F77A\nENCODING 63354\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 8 2 2\nBITMAP\n0080\n0140\n4080\n2200\n4100\n4080\n8080\n0080\nENDCHAR\nSTARTCHAR U_F77B\nENCODING 63355\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 3 1\nBITMAP\n80\n84\n8C\nB0\nC0\n80\n80\n7E\nENDCHAR\nSTARTCHAR U_F77C\nENCODING 63356\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 3 0\nBITMAP\n03\n06\n80\n84\n98\nE0\n80\n80\n80\n7C\nENDCHAR\nSTARTCHAR U_F77D\nENCODING 63357\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 2 1\nBITMAP\n0180\n8280\n4100\n4600\n4800\n7000\n4000\n4000\n3E00\nENDCHAR\nSTARTCHAR U_F77E\nENCODING 63358\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 3 0\nBITMAP\nFE\n04\n04\n04\n08\n10\n20\n40\nENDCHAR\nSTARTCHAR U_F77F\nENCODING 63359\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n0080\n0100\nFE80\n0200\n0400\n0400\n0800\n1800\n2000\n4000\nENDCHAR\nSTARTCHAR U_F780\nENCODING 63360\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 10 2 0\nBITMAP\n0180\n0140\nFE80\n0600\n0400\n0400\n0800\n1000\n2000\n4000\nENDCHAR\nSTARTCHAR U_F781\nENCODING 63361\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 6 1 2\nBITMAP\n1800\n2400\n4200\nC100\n0080\n0040\nENDCHAR\nSTARTCHAR U_F782\nENCODING 63362\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 8 1 2\nBITMAP\n0180\n0140\n1880\n2400\n4200\nC100\n0080\n0040\nENDCHAR\nSTARTCHAR U_F783\nENCODING 63363\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 8 1 2\nBITMAP\n0080\n0140\n1880\n2400\n4200\nC100\n0080\n0060\nENDCHAR\nSTARTCHAR U_F784\nENCODING 63364\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 9 2 1\nBITMAP\n08\n08\n08\nFF\n08\n0A\n49\n88\n08\nENDCHAR\nSTARTCHAR U_F785\nENCODING 63365\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n0180\n0900\n0800\n1F00\nE800\n0800\n4A00\nC900\n9800\n0800\nENDCHAR\nSTARTCHAR U_F786\nENCODING 63366\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 2 0\nBITMAP\n0080\n1140\n0980\n0800\n1F00\nE800\n0800\n4A00\n8900\n9800\n0800\nENDCHAR\nSTARTCHAR U_F787\nENCODING 63367\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 6 2 2\nBITMAP\n0F80\nF100\n0200\n1400\n0800\n0800\nENDCHAR\nSTARTCHAR U_F788\nENCODING 63368\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 8 4 1\nBITMAP\n70\n00\n00\nF0\n00\n00\nE0\n18\nENDCHAR\nSTARTCHAR U_F789\nENCODING 63369\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 2 1\nBITMAP\n08\n08\n10\n20\n22\n41\nFF\n81\nENDCHAR\nSTARTCHAR U_F78A\nENCODING 63370\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 3 1\nBITMAP\n04\n06\n24\n18\n0C\n14\n20\nC0\nENDCHAR\nSTARTCHAR U_F78B\nENCODING 63371\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\n0300\n3C00\n0800\n0F80\nF800\n0800\n0800\n0F80\nENDCHAR\nSTARTCHAR U_F78C\nENCODING 63372\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 6 3 2\nBITMAP\n20\n2E\nF4\n20\n10\n10\nENDCHAR\nSTARTCHAR U_F78D\nENCODING 63373\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\n1000\n1000\n1F80\nF100\n1200\n0800\n0800\n0800\nENDCHAR\nSTARTCHAR U_F78E\nENCODING 63374\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 4 3 3\nBITMAP\n38\n08\n08\nFE\nENDCHAR\nSTARTCHAR U_F78F\nENCODING 63375\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 6 2 2\nBITMAP\n3E00\n0200\n0200\n0400\n0400\nFF80\nENDCHAR\nSTARTCHAR U_F790\nENCODING 63376\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 4 6 4 2\nBITMAP\n30\nD0\n30\nD0\n10\nF0\nENDCHAR\nSTARTCHAR U_F791\nENCODING 63377\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 7 3 1\nBITMAP\nFC\n04\n04\nFC\n04\n08\nFC\nENDCHAR\nSTARTCHAR U_F792\nENCODING 63378\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 11 3 0\nBITMAP\n9C\n60\n00\nFE\n02\n04\n04\n08\n10\n20\n40\nENDCHAR\nSTARTCHAR U_F793\nENCODING 63379\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 10 4 0\nBITMAP\n10\n88\n88\n88\n88\n88\n10\n10\n20\n40\nENDCHAR\nSTARTCHAR U_F794\nENCODING 63380\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\n4000\n2800\n2800\n2800\n2800\n4980\n4E00\n8000\nENDCHAR\nSTARTCHAR U_F795\nENCODING 63381\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 3 1\nBITMAP\n80\n80\n80\n82\n84\n98\nE0\n80\nENDCHAR\nSTARTCHAR U_F796\nENCODING 63382\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 7 3 1\nBITMAP\n0E\nF2\n84\n84\n84\nFC\nC0\nENDCHAR\nSTARTCHAR U_F797\nENCODING 63383\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 6 3 2\nBITMAP\n80\n7C\n48\n48\n08\n10\nENDCHAR\nSTARTCHAR U_F798\nENCODING 63384\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 9 2 0\nBITMAP\n80\n7F\n42\n42\n02\n04\n04\n08\n30\nENDCHAR\nSTARTCHAR U_F799\nENCODING 63385\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 11 2 -1\nBITMAP\n0400\n0400\n0400\n7F00\n2400\n3F80\nC400\n0400\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_F79A\nENCODING 63386\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 6 2 2\nBITMAP\n3F00\n0200\n0C00\n0800\n0800\nFF80\nENDCHAR\nSTARTCHAR U_F79B\nENCODING 63387\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 7 3 1\nBITMAP\nFA\n04\nFE\n04\n08\n10\n20\nENDCHAR\nSTARTCHAR U_F79C\nENCODING 63388\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 3 1\nBITMAP\n80\n40\n02\n04\n04\n08\n30\nC0\nENDCHAR\nSTARTCHAR U_F79D\nENCODING 63389\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n0100\n1280\n1100\nFE00\n8200\n8400\n0400\n0800\n1000\n2000\nENDCHAR\nSTARTCHAR U_F79E\nENCODING 63390\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 7 4 1\nBITMAP\n10\n9C\n64\n24\n24\n58\n88\nENDCHAR\nSTARTCHAR U_F79F\nENCODING 63391\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 7 3 1\nBITMAP\n20\n7E\n88\n90\n10\n20\n40\nENDCHAR\nSTARTCHAR U_F7A0\nENCODING 63392\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 1 -1\nBITMAP\n0800\n0800\n1400\n1400\n2200\n3E00\n2200\n4100\n4100\nE380\nENDCHAR\nSTARTCHAR U_F7A1\nENCODING 63393\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\nFC\n44\n40\n40\n78\n44\n42\n42\n44\nF8\nENDCHAR\nSTARTCHAR U_F7A2\nENCODING 63394\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 9 2 0\nBITMAP\nFC\n42\n42\n44\n7C\n42\n42\n42\nFC\nENDCHAR\nSTARTCHAR U_F7A3\nENCODING 63395\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\nFE\n42\n42\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_F7A4\nENCODING 63396\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 11 2 -1\nBITMAP\n7F\n22\n22\n22\n22\n42\n42\n42\n42\nFF\n81\nENDCHAR\nSTARTCHAR U_F7A5\nENCODING 63397\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\nFE\n42\n40\n48\n78\n48\n40\n40\n42\nFE\nENDCHAR\nSTARTCHAR U_F7A6\nENCODING 63398\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 11 2 -1\nBITMAP\n44\n00\nFE\n42\n40\n48\n78\n48\n40\n42\nFE\nENDCHAR\nSTARTCHAR U_F7A7\nENCODING 63399\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8E20\n4440\n4440\n2480\n2480\n1F00\n2480\n2480\n4440\n4440\n8E20\nENDCHAR\nSTARTCHAR U_F7A8\nENCODING 63400\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 10 3 0\nBITMAP\nB8\nC4\n84\n04\n38\n04\n84\n84\n48\n30\nENDCHAR\nSTARTCHAR U_F7A9\nENCODING 63401\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\nE7\n43\n45\n45\n49\n51\n51\n61\n41\nE7\nENDCHAR\nSTARTCHAR U_F7AA\nENCODING 63402\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 11 2 0\nBITMAP\n3C\nE7\n43\n45\n45\n49\n51\n51\n61\n41\nE7\nENDCHAR\nSTARTCHAR U_F7AB\nENCODING 63403\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 11 2 0\nBITMAP\n02\nE5\n44\n44\n48\n78\n44\n44\n44\n44\nE2\nENDCHAR\nSTARTCHAR U_F7AC\nENCODING 63404\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n7F00\n2100\n2100\n2100\n2100\n2100\n2100\n2100\nA100\n4380\nENDCHAR\nSTARTCHAR U_F7AD\nENCODING 63405\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\nC0C0\n4180\n6280\n6280\n5280\n5480\n5480\n4C80\n4880\nE1C0\nENDCHAR\nSTARTCHAR U_F7AE\nENCODING 63406\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\nE380\n4100\n4100\n4100\n7F00\n4100\n4100\n4100\n4100\nE380\nENDCHAR\nSTARTCHAR U_F7AF\nENCODING 63407\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n18\n24\n42\n81\n81\n81\n81\n42\n24\n18\nENDCHAR\nSTARTCHAR U_F7B0\nENCODING 63408\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\nFE\n44\n44\n44\n44\n44\n44\n44\n44\nEE\nENDCHAR\nSTARTCHAR U_F7B1\nENCODING 63409\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 9 3 1\nBITMAP\nFC\n42\n42\n42\n7C\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_F7B2\nENCODING 63410\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\n38\n46\n82\n80\n80\n80\n80\n82\n64\n18\nENDCHAR\nSTARTCHAR U_F7B3\nENCODING 63411\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 2 1\nBITMAP\nFF00\n8880\n0800\n0800\n0800\n0800\n0800\n0800\n1C00\nENDCHAR\nSTARTCHAR U_F7B4\nENCODING 63412\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 2 1\nBITMAP\nE380\n4200\n2200\n2400\n1400\n1800\n1000\n1000\n6000\nENDCHAR\nSTARTCHAR U_F7B5\nENCODING 63413\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\n1C00\n0800\n3E00\n4900\n8880\n8880\n4900\n3E00\n0800\n1C00\nENDCHAR\nSTARTCHAR U_F7B6\nENCODING 63414\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\nE700\n6200\n2400\n1800\n1800\n1800\n2400\n2400\n4200\nE780\nENDCHAR\nSTARTCHAR U_F7B7\nENCODING 63415\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\nEE\n44\n44\n44\n44\n44\n44\n44\n44\nFE\nENDCHAR\nSTARTCHAR U_F7B8\nENCODING 63416\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 10 3 0\nBITMAP\nCC\n84\n84\n84\n8C\n74\n04\n04\n04\n0C\nENDCHAR\nSTARTCHAR U_F7B9\nENCODING 63417\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\nEDC0\n4480\n4480\n4480\n4480\n4480\n4480\n4480\n4480\nFFC0\nENDCHAR\nSTARTCHAR U_F7BA\nENCODING 63418\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 1 -1\nBITMAP\nEDC0\n4480\n4480\n4480\n4480\n4480\n4480\n4480\n4480\nFFE0\n0020\nENDCHAR\nSTARTCHAR U_F7BB\nENCODING 63419\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 2 0\nBITMAP\n7800\n9000\n9000\n1000\n1E00\n1100\n1080\n1080\n1100\n3E00\nENDCHAR\nSTARTCHAR U_F7BC\nENCODING 63420\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\n61C0\n4080\n4080\n4080\n7880\n4480\n4280\n4280\n4480\nF9C0\nENDCHAR\nSTARTCHAR U_F7BD\nENCODING 63421\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\nE0\n40\n40\n40\n78\n44\n42\n42\n44\nF8\nENDCHAR\nSTARTCHAR U_F7BE\nENCODING 63422\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\n38\nC4\n04\n02\n3E\n02\n82\n84\n44\n38\nENDCHAR\nSTARTCHAR U_F7BF\nENCODING 63423\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 0\nBITMAP\n0200\nE580\n4880\n5040\n5040\n7040\n5040\n5040\n4880\n4880\nE700\nENDCHAR\nSTARTCHAR U_F7C0\nENCODING 63424\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 3 0\nBITMAP\n7E\n84\n84\n44\n3C\n44\n44\n44\n44\n8E\nENDCHAR\nSTARTCHAR U_F7C1\nENCODING 63425\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 8 3 0\nBITMAP\n30\n48\n08\n18\n68\n88\n88\n70\nENDCHAR\nSTARTCHAR U_F7C2\nENCODING 63426\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 10 4 0\nBITMAP\n08\n30\n60\nD0\n88\n88\n88\n88\n50\n20\nENDCHAR\nSTARTCHAR U_F7C3\nENCODING 63427\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 3 1\nBITMAP\nF8\n44\n44\n78\n44\n42\n42\nFC\nENDCHAR\nSTARTCHAR U_F7C4\nENCODING 63428\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 8 3 1\nBITMAP\nFC\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_F7C5\nENCODING 63429\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 9 3 0\nBITMAP\n7E\n44\n44\n44\n44\n44\n84\n7E\n82\nENDCHAR\nSTARTCHAR U_F7C6\nENCODING 63430\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 8 4 0\nBITMAP\n20\n50\n88\nF8\n80\n80\nC8\n30\nENDCHAR\nSTARTCHAR U_F7C7\nENCODING 63431\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 9 4 0\nBITMAP\n48\n20\n50\n88\nF8\n80\n80\nC8\n30\nENDCHAR\nSTARTCHAR U_F7C8\nENCODING 63432\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\n9C80\n4900\n4900\n3E00\n4900\n4900\n4900\n9C80\nENDCHAR\nSTARTCHAR U_F7C9\nENCODING 63433\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 8 3 1\nBITMAP\n78\n44\n04\n18\n04\nC4\n84\n78\nENDCHAR\nSTARTCHAR U_F7CA\nENCODING 63434\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 2 1\nBITMAP\nE7\n43\n45\n49\n51\n61\n41\nE7\nENDCHAR\nSTARTCHAR U_F7CB\nENCODING 63435\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 9 2 1\nBITMAP\n3C\nE7\n43\n45\n49\n51\n61\n41\nE7\nENDCHAR\nSTARTCHAR U_F7CC\nENCODING 63436\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 8 3 1\nBITMAP\nCC\n48\n50\n70\n48\n48\n48\nCC\nENDCHAR\nSTARTCHAR U_F7CD\nENCODING 63437\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 3 1\nBITMAP\n7E\n22\n22\n22\n22\n22\nA2\nC7\nENDCHAR\nSTARTCHAR U_F7CE\nENCODING 63438\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\nC180\nC100\nA700\nA500\nB500\n9900\n9900\nC380\nENDCHAR\nSTARTCHAR U_F7CF\nENCODING 63439\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 2 1\nBITMAP\nE7\n42\n42\n7E\n42\n42\n42\nE7\nENDCHAR\nSTARTCHAR U_F7D0\nENCODING 63440\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 3 1\nBITMAP\n38\n44\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_F7D1\nENCODING 63441\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 3 1\nBITMAP\nFE\n44\n44\n44\n44\n44\n44\nEE\nENDCHAR\nSTARTCHAR U_F7D2\nENCODING 63442\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 9 3 0\nBITMAP\n70\n4C\n44\n44\n78\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_F7D3\nENCODING 63443\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 8 3 0\nBITMAP\n28\n58\n80\n80\n80\n80\n48\n30\nENDCHAR\nSTARTCHAR U_F7D4\nENCODING 63444\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 3 1\nBITMAP\nFE\n10\n10\n10\n10\n10\n10\n38\nENDCHAR\nSTARTCHAR U_F7D5\nENCODING 63445\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 3 1\nBITMAP\nE7\n44\n24\n28\n18\n10\n20\n60\nENDCHAR\nSTARTCHAR U_F7D6\nENCODING 63446\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 12 2 -1\nBITMAP\n08\n18\n08\n6E\n99\n89\n89\n89\n89\n7E\n08\n1C\nENDCHAR\nSTARTCHAR U_F7D7\nENCODING 63447\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 2 1\nBITMAP\nE7\n24\n28\n10\n18\n24\n44\nE7\nENDCHAR\nSTARTCHAR U_F7D8\nENCODING 63448\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 8 3 1\nBITMAP\nEC\n44\n44\n44\n44\n44\n44\nFC\nENDCHAR\nSTARTCHAR U_F7D9\nENCODING 63449\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 8 4 1\nBITMAP\n8C\n88\n88\n88\nF8\n08\n08\n1C\nENDCHAR\nSTARTCHAR U_F7DA\nENCODING 63450\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\nED80\n4900\n4900\n4900\n4900\n4900\n4900\nFF80\nENDCHAR\nSTARTCHAR U_F7DB\nENCODING 63451\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 9 2 0\nBITMAP\nED80\n4880\n4880\n4880\n4880\n4880\n4880\nC880\n3740\nENDCHAR\nSTARTCHAR U_F7DC\nENCODING 63452\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 3 1\nBITMAP\nF0\n20\n20\n38\n26\n22\n22\n7C\nENDCHAR\nSTARTCHAR U_F7DD\nENCODING 63453\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\nE380\n4100\n4100\n7100\n4D00\n4500\n4500\nFB80\nENDCHAR\nSTARTCHAR U_F7DE\nENCODING 63454\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 8 3 1\nBITMAP\nE0\n40\n40\n70\n4C\n44\n44\nF8\nENDCHAR\nSTARTCHAR U_F7DF\nENCODING 63455\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 8 4 1\nBITMAP\nB0\nC8\n04\n3C\n04\n84\n88\n70\nENDCHAR\nSTARTCHAR U_F7E0\nENCODING 63456\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\nE600\n5900\n5080\n7080\n5080\n5080\n4900\nE600\nENDCHAR\nSTARTCHAR U_F7E1\nENCODING 63457\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 3 1\nBITMAP\n3E\n44\n44\n3C\n44\n44\n44\nCE\nENDCHAR\nSTARTCHAR U_F7E2\nENCODING 63458\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 1 0\nBITMAP\n0400\n0A00\n1100\n2080\n4040\nF9E0\n0900\n0900\n0900\n0900\n0F00\nENDCHAR\nSTARTCHAR U_F7E3\nENCODING 63459\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 9 1 1\nBITMAP\nFFE0\n0000\n7000\n6000\n5000\n0800\n0400\n0200\n0100\nENDCHAR\nSTARTCHAR U_F7E4\nENCODING 63460\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 10 1 0\nBITMAP\n9000\nB000\nFFC0\nB000\n9000\n0120\n01A0\n7FE0\n01A0\n0120\nENDCHAR\nSTARTCHAR U_F7E5\nENCODING 63461\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 10 4 0\nBITMAP\n80\n80\n80\n40\n40\n40\n20\n20\n10\n0C\nENDCHAR\nSTARTCHAR U_F7E6\nENCODING 63462\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 -1\nBITMAP\nFF\n01\n01\n01\n01\n01\n01\n01\n01\n06\nENDCHAR\nSTARTCHAR U_F7E7\nENCODING 63463\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 11 4 -1\nBITMAP\n80\n80\n80\n80\n80\n80\n80\n80\n88\n88\n78\nENDCHAR\nSTARTCHAR U_F7E8\nENCODING 63464\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n1000\n1000\n1F80\n2100\n4100\n8200\n0200\n0400\n0800\n1000\n6000\nENDCHAR\nSTARTCHAR U_F7E9\nENCODING 63465\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 4 11 4 -1\nBITMAP\n10\n90\n90\n90\n90\n90\n90\n90\n90\n10\n70\nENDCHAR\nSTARTCHAR U_F7EA\nENCODING 63466\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 4 1 6\nBITMAP\n2100\n2200\n1400\nFFC0\nENDCHAR\nSTARTCHAR U_F7EB\nENCODING 63467\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 8 1 -1\nBITMAP\n0400\n0400\n2400\n2780\n2400\n2400\n5400\n8FC0\nENDCHAR\nSTARTCHAR U_F7EC\nENCODING 63468\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 11 2 -1\nBITMAP\nFF80\n8080\n8280\nA480\nA480\n9880\n8880\n9480\nA380\n8080\n8180\nENDCHAR\nSTARTCHAR U_F7ED\nENCODING 63469\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nFFC0\n8040\nA240\nA240\n9440\n8840\n9440\nA240\n8140\nFFC0\n8040\nENDCHAR\nSTARTCHAR U_F7EE\nENCODING 63470\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 8 0 -1\nBITMAP\n0400\n0C00\n1240\n2280\nE100\n2080\n2840\n3020\nENDCHAR\nSTARTCHAR U_F7EF\nENCODING 63471\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 2 1\nBITMAP\n40\nC0\n40\n40\n4F\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_F7F0\nENCODING 63472\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 9 2 0\nBITMAP\nE0\n82\n85\nE5\n12\n15\n15\n92\n60\nENDCHAR\nSTARTCHAR U_F7F1\nENCODING 63473\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\n04\n6A\nA6\n22\n4E\n24\n2A\nA4\n4A\n04\nENDCHAR\nSTARTCHAR U_F7F2\nENCODING 63474\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\n6000\n9000\n1000\n6000\n1780\n1000\n9000\n6000\nENDCHAR\nSTARTCHAR U_F7F3\nENCODING 63475\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 11 2 -1\nBITMAP\n46\nA2\n14\n24\n66\n14\n14\n94\n64\n04\n06\nENDCHAR\nSTARTCHAR U_F7F4\nENCODING 63476\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 9 1 0\nBITMAP\n1000\n1000\n3000\n3000\n53C0\n5000\nF800\n1000\n3800\nENDCHAR\nSTARTCHAR U_F7F5\nENCODING 63477\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\nE000\n8000\n8000\nE000\n9780\n1000\n9000\n6000\nENDCHAR\nSTARTCHAR U_F7F6\nENCODING 63478\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 2 1\nBITMAP\n2000\n5000\n8000\n8000\nE000\n9780\n9000\n9000\n6000\nENDCHAR\nSTARTCHAR U_F7F7\nENCODING 63479\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 9 2 1\nBITMAP\n20\nD6\n92\n92\n62\nD2\n92\n96\n60\nENDCHAR\nSTARTCHAR U_F7F8\nENCODING 63480\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\nF000\nA000\n2000\n4000\n4780\n4000\n4000\n4000\nENDCHAR\nSTARTCHAR U_F7F9\nENCODING 63481\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 2 1\nBITMAP\n2000\nD000\n9000\n9000\n6000\n7780\n9000\n9000\n6000\nENDCHAR\nSTARTCHAR U_F7FA\nENCODING 63482\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\nE000\n9000\n9000\n9000\n7780\n1000\nA000\nE000\nENDCHAR\nSTARTCHAR U_F7FB\nENCODING 63483\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\n06\nF6\nA6\n26\n40\n42\n46\n46\n46\n06\nENDCHAR\nSTARTCHAR U_F7FC\nENCODING 63484\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n22\n55\n85\n85\nE2\n97\n96\n92\n62\n02\nENDCHAR\nSTARTCHAR U_F7FD\nENCODING 63485\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 11 2 -1\nBITMAP\n06\nE2\n94\n94\n96\n74\n14\nA4\nE4\n04\n06\nENDCHAR\nSTARTCHAR U_F7FE\nENCODING 63486\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 3 1\nBITMAP\nEC\nA4\n94\n94\n94\n94\nA6\n60\nENDCHAR\nSTARTCHAR U_F7FF\nENCODING 63487\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 11 3 -1\nBITMAP\n0E\nCA\n44\n48\n4E\n44\n44\n44\nE4\n04\n04\nENDCHAR\nSTARTCHAR U_F800\nENCODING 63488\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 9 2 1\nBITMAP\n10\n16\n32\n52\n52\n92\n72\n13\n30\nENDCHAR\nSTARTCHAR U_F801\nENCODING 63489\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 2 1\nBITMAP\n2000\nD000\n9000\n9000\n2000\n4780\n4000\n8000\nF000\nENDCHAR\nSTARTCHAR U_F802\nENCODING 63490\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 11 2 -1\nBITMAP\n06\nE6\n84\n84\nE6\n12\n12\n92\n62\n02\n06\nENDCHAR\nSTARTCHAR U_F803\nENCODING 63491\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 2 1\nBITMAP\nF2\nA6\n22\n42\n42\n42\n46\n40\nENDCHAR\nSTARTCHAR U_F804\nENCODING 63492\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 12 2 -1\nBITMAP\n02\n15\n15\n33\n51\n56\n90\n76\n12\n36\n06\n02\nENDCHAR\nSTARTCHAR U_F805\nENCODING 63493\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 11 2 -1\nBITMAP\n26\nD2\n94\n14\n26\n42\n42\n82\nF2\n02\n06\nENDCHAR\nSTARTCHAR U_F806\nENCODING 63494\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 12 2 -1\nBITMAP\n02\n25\nD5\n93\n11\n26\n42\n46\n84\nF6\n06\n02\nENDCHAR\nSTARTCHAR U_F807\nENCODING 63495\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 11 2 -1\nBITMAP\n26\n52\n84\n84\nE6\n92\n92\n92\n62\n02\n06\nENDCHAR\nSTARTCHAR U_F808\nENCODING 63496\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 11 3 -1\nBITMAP\n04\nCA\n4A\n4A\n44\n44\n4A\n44\nEA\n0A\n04\nENDCHAR\nSTARTCHAR U_F809\nENCODING 63497\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 12 3 -1\nBITMAP\n04\n0A\nC8\n4E\n4A\n44\n44\n4A\n44\nE2\n0A\n04\nENDCHAR\nSTARTCHAR U_F80A\nENCODING 63498\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\n26\nD4\n92\n16\n26\n46\n46\n84\nF2\n06\nENDCHAR\nSTARTCHAR U_F80B\nENCODING 63499\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 11 2 0\nBITMAP\n02\n44\nB4\n96\n26\n60\n10\n16\n92\n62\n06\nENDCHAR\nSTARTCHAR U_F80C\nENCODING 63500\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 12 2 -1\nBITMAP\n02\n14\n16\n35\n55\n52\n96\n72\n14\n33\n05\n02\nENDCHAR\nSTARTCHAR U_F80D\nENCODING 63501\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\n02\nE4\n86\n86\nE6\n10\n16\n92\n62\n06\nENDCHAR\nSTARTCHAR U_F80E\nENCODING 63502\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\n24\n54\n86\n86\nE6\n90\n96\n92\n62\n06\nENDCHAR\nSTARTCHAR U_F80F\nENCODING 63503\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 0\nBITMAP\n06\nF4\nA6\n26\n42\n44\n46\n44\n42\n06\nENDCHAR\nSTARTCHAR U_F810\nENCODING 63504\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 9 2 1\nBITMAP\n20\nD3\n95\n94\n67\n75\n95\n93\n60\nENDCHAR\nSTARTCHAR U_F811\nENCODING 63505\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 11 2 0\nBITMAP\n02\n04\nE4\n96\n96\n96\n76\n14\n24\nE2\n06\nENDCHAR\nSTARTCHAR U_F812\nENCODING 63506\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 11 3 -1\nBITMAP\n0C\nE8\nAE\n9A\n94\n94\n96\nA4\n62\n0A\n04\nENDCHAR\nSTARTCHAR U_F813\nENCODING 63507\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 9 2 1\nBITMAP\n20\nD3\n95\n95\n62\nD5\n95\n93\n60\nENDCHAR\nSTARTCHAR U_F814\nENCODING 63508\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 11 2 -1\nBITMAP\n06\n6A\n9A\n96\n92\n74\n16\n94\n6A\n0A\n04\nENDCHAR\nSTARTCHAR U_F815\nENCODING 63509\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 8 2 1\nBITMAP\n60\n92\n95\n92\n95\n95\n92\n60\nENDCHAR\nSTARTCHAR U_F816\nENCODING 63510\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 8 2 1\nBITMAP\n6000\n9000\n9000\n9000\n9780\n9000\n9000\n6000\nENDCHAR\nSTARTCHAR U_F817\nENCODING 63511\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 3 2 6\nBITMAP\nFF\n01\n01\nENDCHAR\nSTARTCHAR U_F818\nENCODING 63512\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 1 10 6 -1\nBITMAP\n80\n80\n80\n80\n00\n00\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_F819\nENCODING 63513\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 2 4 5 6\nBITMAP\nC0\nC0\n40\n80\nENDCHAR\nSTARTCHAR U_F81A\nENCODING 63514\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 4 4 7\nBITMAP\nD8\nD8\n48\n90\nENDCHAR\nSTARTCHAR U_F81B\nENCODING 63515\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4140\n5540\n9520\nFFE0\n9120\nBFE0\nD120\n93A0\n9560\n5940\n4140\nENDCHAR\nSTARTCHAR U_F81C\nENCODING 63516\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 12 9 0 0\nBITMAP\nCE00\n4400\n6400\n54C0\n5520\n4D20\n4520\nE6C0\n0010\nENDCHAR\nSTARTCHAR U_F81D\nENCODING 63517\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 10 0 0\nBITMAP\nF820\nA860\n2020\n2320\n24A0\n24A0\n27A0\n2420\n24A0\n7320\nENDCHAR\nSTARTCHAR U_F900\nENCODING 63744\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4440\n4440\n7FC0\n0000\nFFE0\n0000\n3F80\n2080\n3F80\n1100\nFFE0\nENDCHAR\nSTARTCHAR U_F901\nENCODING 63745\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FE0\n0200\n3FC0\n2240\n3FC0\n2240\n3FC0\n0A00\n0400\n1B00\nE0E0\nENDCHAR\nSTARTCHAR U_F902\nENCODING 63746\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n7FC0\n0400\n3F80\n2480\n3F80\n2480\n3F80\n0400\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_F903\nENCODING 63747\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n0A00\n7FC0\n4A40\n7FC0\n2080\n3C80\n2780\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_F904\nENCODING 63748\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n47C0\n2440\n05C0\n8540\n5FE0\n3460\n27C0\nC440\n47C0\n4440\n44C0\nENDCHAR\nSTARTCHAR U_F905\nENCODING 63749\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n7FC0\n4440\n7FC0\n0400\nFFE0\n8420\nFFE0\n8420\n0400\n0400\nENDCHAR\nSTARTCHAR U_F906\nENCODING 63750\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n2000\n3FC0\n4040\n8040\n7C40\n4440\n4440\n7C40\n4440\n0040\n0180\nENDCHAR\nSTARTCHAR U_F907\nENCODING 63751\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F00\n2100\nFFC0\n4A40\n7BC0\nFAC0\n2B40\nFAC0\n2BE0\nFA20\n07E0\nENDCHAR\nSTARTCHAR U_F908\nENCODING 63752\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F00\n2100\nFFC0\n4A40\n7BC0\nFAC0\n2B40\nFAC0\n2BE0\nFA20\n07E0\nENDCHAR\nSTARTCHAR U_F909\nENCODING 63753\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1000\n7FE0\n1120\n7D20\n1220\n7CC0\n1400\nFFE0\n0A00\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_F90A\nENCODING 63754\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n0A00\n1100\n20E0\nDF40\n0400\n7FC0\n2480\n1480\n1500\nFFE0\nENDCHAR\nSTARTCHAR U_F90B\nENCODING 63755\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0420\nFF20\nA4A0\nBFA0\nB5A0\nB5A0\nFFA0\nA4A0\n0E20\n1520\n24E0\nENDCHAR\nSTARTCHAR U_F90C\nENCODING 63756\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n7FE0\n0A00\n3180\nCE60\n0000\n7FC0\n0400\n2480\n4460\n8C20\nENDCHAR\nSTARTCHAR U_F90D\nENCODING 63757\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n28E0\n3F40\nA9E0\nBEA0\nAAE0\nAAA0\n3EE0\n28A0\n3CE0\n2AC0\n2920\nENDCHAR\nSTARTCHAR U_F90E\nENCODING 63758\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n3FE0\nA140\n7FE0\n2520\n7FE0\nB520\n3FE0\n2D20\n57E0\nA620\nENDCHAR\nSTARTCHAR U_F90F\nENCODING 63759\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FE0\n4920\n7FE0\n2480\n4FE0\nF480\n47C0\n9480\nF7C0\n5480\nAFE0\nENDCHAR\nSTARTCHAR U_F910\nENCODING 63760\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n0900\n7FE0\n4920\n7FE0\n2A80\n57E0\nFA80\n43E0\nFA80\nABE0\nENDCHAR\nSTARTCHAR U_F911\nENCODING 63761\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n27E0\n24A0\nFFE0\nACA0\nAFE0\nA940\nFF80\n2120\n2FE0\n3AC0\nEDA0\nENDCHAR\nSTARTCHAR U_F912\nENCODING 63762\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n47C0\n2540\nFFC0\n1540\n2FC0\n7100\nAFE0\n2900\n2380\n2540\n2920\nENDCHAR\nSTARTCHAR U_F913\nENCODING 63763\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4FE0\n2AA0\n2FE0\n0440\nEBE0\n3D40\n25E0\n2940\n2FE0\n5500\n8FE0\nENDCHAR\nSTARTCHAR U_F914\nENCODING 63764\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4440\n5E40\n92A0\nFFE0\n5240\nFFE0\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_F915\nENCODING 63765\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4400\n27C0\n8440\n5A80\n1100\n2280\n2FE0\nC440\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_F916\nENCODING 63766\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2200\n23E0\n2A40\nB580\nA240\nAC20\n27C0\n3440\n4C40\n47C0\n8440\nENDCHAR\nSTARTCHAR U_F917\nENCODING 63767\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\nFBC0\n2640\n2980\n7240\n2420\n27C0\n3C40\nE440\n47C0\n0440\nENDCHAR\nSTARTCHAR U_F918\nENCODING 63768\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0900\nFFE0\n4900\n27C0\n8480\n5B80\n1440\n2FE0\nE440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_F919\nENCODING 63769\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF900\n51E0\n5340\nFC80\nA940\nDA20\n8FE0\nFA20\n8A20\nFBE0\n8A20\nENDCHAR\nSTARTCHAR U_F91A\nENCODING 63770\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7D00\n53E0\n7E20\n5140\n7C80\n5340\n7DE0\n5520\nAD20\nA5E0\n1920\nENDCHAR\nSTARTCHAR U_F91B\nENCODING 63771\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFD00\n5500\nFD00\n2900\nFD00\nA500\nFD00\nAD00\n9520\nAD20\n84E0\nENDCHAR\nSTARTCHAR U_F91C\nENCODING 63772\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n1800\nE7C0\n9440\nD440\nB540\n94C0\n9440\nF440\n1540\n2480\nC400\nENDCHAR\nSTARTCHAR U_F91D\nENCODING 63773\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2EE0\n2AA0\nFEE0\n2AA0\n3FE0\n6920\nAFE0\nAAA0\n2FE0\n2AA0\n2D60\nENDCHAR\nSTARTCHAR U_F91E\nENCODING 63774\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2EE0\n2AA0\nAEE0\nBAA0\nAEE0\nA920\n2FE0\n2AA0\n5FE0\n4BA0\n8D60\nENDCHAR\nSTARTCHAR U_F91F\nENCODING 63775\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\nFFE0\n1100\nFBE0\n8A20\nFBE0\nFFE0\nAAA0\nBFA0\n9520\nA4E0\nENDCHAR\nSTARTCHAR U_F920\nENCODING 63776\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4440\nAEA0\n50E0\nEE40\n4AE0\nBFA0\n2080\n3FE0\n2080\n3FE0\nD4A0\nENDCHAR\nSTARTCHAR U_F921\nENCODING 63777\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4440\n4440\n7FC0\n4140\n5E40\n4440\n5F40\n5540\n5F40\n4560\nBEA0\nENDCHAR\nSTARTCHAR U_F922\nENCODING 63778\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n5F80\n3480\n1EE0\n9300\n5E40\n3420\n5F00\nC000\n4FE0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_F923\nENCODING 63779\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\nFFE0\n9100\nF9E0\n8A80\nFC40\n9000\nFFC0\n4A40\n4A40\nFFE0\nENDCHAR\nSTARTCHAR U_F924\nENCODING 63780\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8F80\n4A80\nFFE0\n2900\n4F40\n5A20\nEF00\n5FE0\n4AA0\n4AA0\n5FE0\nENDCHAR\nSTARTCHAR U_F925\nENCODING 63781\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2200\n2100\nF800\n27E0\n2C40\n3440\nE280\n2280\n2280\nA100\n6FE0\nENDCHAR\nSTARTCHAR U_F926\nENCODING 63782\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7540\n5A80\n5540\n7FE0\n5AA0\n5FE0\n77C0\n5540\n57C0\n9540\nB7A0\nENDCHAR\nSTARTCHAR U_F927\nENCODING 63783\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n22A0\n2540\nFAA0\nAFE0\nAAA0\nAFE0\nFD20\n2BA0\n2D60\n3BA0\nED20\nENDCHAR\nSTARTCHAR U_F928\nENCODING 63784\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n7FE0\n4800\n5EE0\n52A0\n5EA0\n52C0\n5EA0\n54E0\n9A80\n8080\nENDCHAR\nSTARTCHAR U_F929\nENCODING 63785\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n21E0\n1120\n7D20\n45E0\n7D20\n4520\n7DE0\n5120\n4920\nF620\n4460\nENDCHAR\nSTARTCHAR U_F92A\nENCODING 63786\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\n27C0\n8440\n57C0\n1440\n27C0\n2520\nC540\n4580\n4640\n4420\nENDCHAR\nSTARTCHAR U_F92B\nENCODING 63787\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8900\n57C0\n2440\n57C0\n9440\n37C0\n5520\n9540\n1480\n7540\n2620\nENDCHAR\nSTARTCHAR U_F92C\nENCODING 63788\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n11E0\n7D20\n4540\n7D40\n4580\n7D40\n4120\n4920\n55E0\nE540\n4100\nENDCHAR\nSTARTCHAR U_F92D\nENCODING 63789\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\nFFE0\n0400\n2480\n2480\n5540\n8E20\n1500\n2480\n4440\n8420\nENDCHAR\nSTARTCHAR U_F92E\nENCODING 63790\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8300\n4480\n0840\n3220\n2100\n4FC0\nC040\n4080\n4700\n4100\n0080\nENDCHAR\nSTARTCHAR U_F92F\nENCODING 63791\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n2100\nB580\nA500\n5280\n8C40\nFFC0\n8840\n7F80\n1080\n2480\nC300\nENDCHAR\nSTARTCHAR U_F930\nENCODING 63792\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n23C0\n2200\nFFE0\n2A20\n2FE0\n3AA0\nEBE0\n2AA0\n37E0\nA220\n6CC0\nENDCHAR\nSTARTCHAR U_F931\nENCODING 63793\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2380\n2480\nFFE0\n2920\n2FE0\n3920\n6FE0\nA440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_F932\nENCODING 63794\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n21C0\n2100\nAFE0\nB920\nAFE0\nAD40\n2FC0\n2D40\n4FE0\n5AA0\nAFE0\nENDCHAR\nSTARTCHAR U_F933\nENCODING 63795\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n07C0\n0400\n7FE0\n4420\n5FC0\n5460\n5FC0\n5240\n5FC0\n9540\nFFE0\nENDCHAR\nSTARTCHAR U_F934\nENCODING 63796\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n0880\n7E80\n0900\nFFC0\n0800\n1180\n3600\nD840\n1040\n0FC0\nENDCHAR\nSTARTCHAR U_F935\nENCODING 63797\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\nFFE0\n1500\n7FE0\n4420\n5FE0\n4A80\n5FC0\n5540\n9540\nFFE0\nENDCHAR\nSTARTCHAR U_F936\nENCODING 63798\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n07C0\n0400\n7FE0\n4420\n5FE0\n5240\n7FE0\n5240\n7FE0\n4420\nB9C0\nENDCHAR\nSTARTCHAR U_F937\nENCODING 63799\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF200\n93C0\n9240\n9640\nF180\n2240\nBFE0\nA240\nA240\nBBC0\nE240\nENDCHAR\nSTARTCHAR U_F938\nENCODING 63800\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n0400\nFFE0\n9520\nF3C0\n9640\nF180\n2660\nBA40\nA3C0\nF240\nENDCHAR\nSTARTCHAR U_F939\nENCODING 63801\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1F00\n2200\n7FC0\nC440\n7FC0\n4440\n7FC0\nA0A0\n3F80\n2080\n3F80\nENDCHAR\nSTARTCHAR U_F93A\nENCODING 63802\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF3C0\n9680\nF140\n27E0\nAA40\nFFC0\n4080\n7FC0\n4080\n7FE0\n94A0\nENDCHAR\nSTARTCHAR U_F93B\nENCODING 63803\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n03C0\nF280\n2780\n2080\n7FE0\nD520\n51C0\n5340\n7520\n5920\n0300\nENDCHAR\nSTARTCHAR U_F93C\nENCODING 63804\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n43C0\n2240\nF7C0\n1080\n27E0\n7120\nAD40\n2380\n2540\n2920\n2300\nENDCHAR\nSTARTCHAR U_F93D\nENCODING 63805\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n23C0\n2240\n5780\nF080\n2FE0\n5120\nED40\n0380\n5540\nA920\nAF20\nENDCHAR\nSTARTCHAR U_F93E\nENCODING 63806\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\nFFE0\n1100\n0F00\n1100\nFFE0\n2440\n1680\n1D00\n2480\nCC60\nENDCHAR\nSTARTCHAR U_F93F\nENCODING 63807\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n23C0\n5240\n8BC0\n7840\n27E0\nF880\n22A0\nA9C0\n72A0\n3CA0\nE180\nENDCHAR\nSTARTCHAR U_F940\nENCODING 63808\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n7FE0\n4900\n7FE0\n4920\n7FE0\n5120\n5D40\n51A0\n9D20\n90E0\nENDCHAR\nSTARTCHAR U_F941\nENCODING 63809\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\nF280\n0440\nFBA0\n0000\nFFE0\n0AA0\nFFE0\n9AA0\nFAA0\n9860\nENDCHAR\nSTARTCHAR U_F942\nENCODING 63810\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n23E0\nFA00\n53E0\nFC20\n8BE0\nEA00\nBBE0\n8A20\n7FE0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_F943\nENCODING 63811\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n0400\n3F80\n0400\nFFE0\n1100\nFFE0\n1100\n1100\n2100\nC100\nENDCHAR\nSTARTCHAR U_F944\nENCODING 63812\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7DE0\n9340\nFDE0\n2900\nFFE0\n4820\n7BE0\n4A00\n7BC0\n4A20\n5BE0\nENDCHAR\nSTARTCHAR U_F945\nENCODING 63813\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7DE0\n2900\nFFE0\n4500\n7DC0\n4520\nFFE0\n1080\n1F80\n1080\n7FE0\nENDCHAR\nSTARTCHAR U_F946\nENCODING 63814\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0400\nFFC0\n8440\n2400\n3F80\n4400\n8400\nFFC0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_F947\nENCODING 63815\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n0800\n1F80\n3080\nDF80\n0000\nFBE0\n4100\nFBE0\n4920\n79E0\nENDCHAR\nSTARTCHAR U_F948\nENCODING 63816\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF200\n93C0\n9680\nF100\n9280\nF460\n9FC0\nF440\n0440\n67C0\n9440\nENDCHAR\nSTARTCHAR U_F949\nENCODING 63817\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n0400\nFFE0\n9520\nA4A0\n0400\n7FC0\n4440\n7FC0\n4440\n7FC0\nENDCHAR\nSTARTCHAR U_F94A\nENCODING 63818\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n2480\n3F80\n2480\nFFE0\nAAA0\nFBE0\nAAA0\nFFE0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_F94B\nENCODING 63819\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FE0\n4020\n7FE0\n4A80\n7FE0\n4A40\n7FE0\n4480\n4880\n8700\nBCE0\nENDCHAR\nSTARTCHAR U_F94C\nENCODING 63820\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n27C0\n2540\nFFE0\n2540\n3FE0\n6520\nAFE0\n2240\n2180\n2E60\nENDCHAR\nSTARTCHAR U_F94D\nENCODING 63821\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\n2FE0\n0820\n8FE0\n5940\n2920\n2FE0\nC900\n4980\n5260\n6C20\nENDCHAR\nSTARTCHAR U_F94E\nENCODING 63822\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4FE0\n2820\n0FE0\n9800\n5FE0\n2900\n2FE0\nCDA0\n4B60\n5DA0\n4960\nENDCHAR\nSTARTCHAR U_F94F\nENCODING 63823\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n4440\n7FC0\n4440\n7FC0\n0900\n3E00\n1080\n7F40\n1500\nECE0\nENDCHAR\nSTARTCHAR U_F950\nENCODING 63824\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n27C0\n4540\nFFE0\n2540\n5FE0\nF920\n0FE0\n5480\nAB80\nAE60\nENDCHAR\nSTARTCHAR U_F951\nENCODING 63825\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nE7E0\nA080\nA3E0\nAAA0\nCAA0\nAB60\nAA20\nAA20\nEA60\n8800\n8FE0\nENDCHAR\nSTARTCHAR U_F952\nENCODING 63826\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n5100\nF900\n5100\n73E0\n2120\nF920\nA920\nF920\n2220\nFCA0\n2440\nENDCHAR\nSTARTCHAR U_F953\nENCODING 63827\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7900\n4900\n4900\n7FE0\n4920\n4920\n7920\n4920\n4A20\n8D20\n98C0\nENDCHAR\nSTARTCHAR U_F954\nENCODING 63828\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8200\n7FE0\n5540\n1740\n1040\n3FC0\nC200\n7FE0\n4A80\n5240\n6220\nENDCHAR\nSTARTCHAR U_F955\nENCODING 63829\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8200\n5FC0\n4200\n1FE0\n2880\n5440\nCFA0\n5480\n4300\n4480\n7860\nENDCHAR\nSTARTCHAR U_F956\nENCODING 63830\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\nE7C0\n2100\nFFE0\n2240\n3520\n2BC0\n6540\nA880\n2340\n2C20\nENDCHAR\nSTARTCHAR U_F957\nENCODING 63831\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n27C0\n5100\nFFE0\n2440\n5A20\nEBC0\n0680\n5900\nAA80\nAC60\nENDCHAR\nSTARTCHAR U_F958\nENCODING 63832\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\nFFE0\n1500\n7FC0\n0400\nFFE0\n2880\nDF60\n2900\n0600\nF9E0\nENDCHAR\nSTARTCHAR U_F959\nENCODING 63833\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF100\n97C0\nA100\nCFE0\nA440\n9A20\n97C0\nFC80\nA300\n8480\n9860\nENDCHAR\nSTARTCHAR U_F95A\nENCODING 63834\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\nFFE0\n0100\nFFE0\n0AA0\nFFE0\n0440\nF7C0\n9440\nF7C0\n9C60\nENDCHAR\nSTARTCHAR U_F95B\nENCODING 63835\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n23E0\nFE40\n4980\n2A60\nDF80\n0200\n3FC0\n0200\nFFE0\n0200\n0E00\nENDCHAR\nSTARTCHAR U_F95C\nENCODING 63836\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4440\n5E40\n92A0\nFFE0\n5240\nFFE0\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_F95D\nENCODING 63837\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4480\nFFE0\n0480\nF200\n0FE0\nF200\n07C0\nFC40\n9440\nF7C0\n9440\nENDCHAR\nSTARTCHAR U_F95E\nENCODING 63838\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n3F00\n2100\n2900\n2500\n2100\nFFC0\n2100\n2100\n2100\n4700\n8200\nENDCHAR\nSTARTCHAR U_F95F\nENCODING 63839\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\nFFE0\n8AA0\nAA60\n5F80\n0000\n3F80\n2A80\nFFE0\n0200\n1E00\nENDCHAR\nSTARTCHAR U_F960\nENCODING 63840\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n27C0\nFA40\n4A40\n4A80\n3180\n2E60\nC000\n1440\n5220\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_F961\nENCODING 63841\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\nFFE0\n8840\n5280\n0C00\n2A80\nDF40\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_F962\nENCODING 63842\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n4440\n7FC0\n4440\n7FC0\n1100\nFFC0\n1100\nFFE0\n1100\nE0E0\nENDCHAR\nSTARTCHAR U_F963\nENCODING 63843\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0900\n0900\n0920\n7940\n0980\n0900\n0900\n0900\n1920\nE920\n48E0\nENDCHAR\nSTARTCHAR U_F964\nENCODING 63844\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n07C0\nF520\n2340\n2FE0\n7340\nD520\n5FE0\n5520\n77E0\n5520\n07E0\nENDCHAR\nSTARTCHAR U_F965\nENCODING 63845\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2FE0\n2100\n2FE0\n2920\n6FE0\nA920\n2FE0\n2500\n2200\n2500\n28E0\nENDCHAR\nSTARTCHAR U_F966\nENCODING 63846\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1400\n27E0\n4C40\n97C0\n2440\n67C0\nA200\n27E0\n2A40\n2180\n2660\nENDCHAR\nSTARTCHAR U_F967\nENCODING 63847\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0040\nFFE0\n0200\n0400\n0D00\n1480\n2460\n4420\n8400\n0400\n0400\nENDCHAR\nSTARTCHAR U_F968\nENCODING 63848\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\n20A0\n8220\n5240\n1240\n2AA0\n2AA0\nD300\n4240\n4640\n49C0\nENDCHAR\nSTARTCHAR U_F969\nENCODING 63849\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\n7D00\n55E0\nFF40\n5540\nFD40\n9540\nFF40\n2880\n1940\nE620\nENDCHAR\nSTARTCHAR U_F96A\nENCODING 63850\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n7FC0\n0400\nFFE0\n8920\n3E00\n0840\n7FC0\n1520\n2480\nCC60\nENDCHAR\nSTARTCHAR U_F96B\nENCODING 63851\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n1100\n3E80\n5140\nFFC0\n2080\nCC60\n3300\n0C80\n0300\n7C00\nENDCHAR\nSTARTCHAR U_F96C\nENCODING 63852\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\nFFE0\n9120\n7FC0\n1100\nFFE0\n1100\n2480\n5F40\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_F96D\nENCODING 63853\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n1480\n2560\nC620\n1FC0\n3040\nDFC0\n1040\n1FC0\n1040\n1FC0\nENDCHAR\nSTARTCHAR U_F96E\nENCODING 63854\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0900\nFFE0\n2900\nFFE0\n2900\n2F00\n3FC0\n0400\nFFE0\n1500\nE4E0\nENDCHAR\nSTARTCHAR U_F96F\nENCODING 63855\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4440\nF280\n07C0\nF440\n0440\nF7C0\n0280\nF280\n92A0\nF4A0\n9860\nENDCHAR\nSTARTCHAR U_F970\nENCODING 63856\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nD9C0\n2140\nD940\n3260\n2800\nFBE0\n2140\n3140\n6880\nA540\n2220\nENDCHAR\nSTARTCHAR U_F971\nENCODING 63857\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3FE0\n2000\n2FC0\n2000\n3FE0\n2A20\n2A40\n2980\n4880\n4A40\n8C20\nENDCHAR\nSTARTCHAR U_F972\nENCODING 63858\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\n2100\n8FE0\n5920\n1140\n2100\n2100\nC100\n4320\n4520\n58E0\nENDCHAR\nSTARTCHAR U_F973\nENCODING 63859\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n2100\nFA80\n2440\n2BA0\n3000\nE7C0\n2440\n2440\nA7C0\n6440\nENDCHAR\nSTARTCHAR U_F974\nENCODING 63860\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n1100\nFFC0\n1100\n0000\nFFC0\n1000\n3F80\n5080\n9080\n1F80\n1080\nENDCHAR\nSTARTCHAR U_F975\nENCODING 63861\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n2FE0\nF000\n27C0\n2440\n37C0\nE540\n2100\n2540\nA920\n7320\nENDCHAR\nSTARTCHAR U_F976\nENCODING 63862\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\nFBC0\nAE40\nA980\nFA40\nAC20\nABC0\nAA40\nFA40\n8BC0\n0240\nENDCHAR\nSTARTCHAR U_F977\nENCODING 63863\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\nFFE0\n2080\n3F80\n0000\nFFE0\n8020\n1F00\n1120\n2120\nC0E0\nENDCHAR\nSTARTCHAR U_F978\nENCODING 63864\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nFFC0\n0400\n7FC0\n4440\n5540\n5540\n5540\n6EC0\n4440\n4440\n40C0\nENDCHAR\nSTARTCHAR U_F979\nENCODING 63865\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8100\n4FE0\n4000\n07C0\n2440\n2440\n27C0\nC100\n4540\n4920\n5320\nENDCHAR\nSTARTCHAR U_F97A\nENCODING 63866\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n5F80\nA280\n4AC0\n2AA0\nD4A0\n4980\n5400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_F97B\nENCODING 63867\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n27C0\nAC40\n77C0\n2440\nFFE0\n2540\n37C0\n6D40\nAFE0\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_F97C\nENCODING 63868\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n7F80\n4080\n7F80\n4080\n7FA0\n4440\n4280\n4100\n4C80\nF060\nENDCHAR\nSTARTCHAR U_F97D\nENCODING 63869\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\nFFE0\n0000\nF7C0\n0440\nF7C0\n0100\nF540\n9540\nF920\n9320\nENDCHAR\nSTARTCHAR U_F97E\nENCODING 63870\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n2080\n3F80\n2080\nFFE0\n2480\n3F80\n2480\n7FC0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_F97F\nENCODING 63871\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFE80\n9480\nBE80\nABE0\nBEA0\nAAA0\nFEA0\nCAA0\nFEA0\nC320\nC640\nENDCHAR\nSTARTCHAR U_F980\nENCODING 63872\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n7F00\n4100\n4100\n7F00\n4900\n1000\nFF80\n8080\n8080\nFF80\n8080\nENDCHAR\nSTARTCHAR U_F981\nENCODING 63873\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n1000\n1000\n1000\nFFC0\n1200\n2200\n2200\n1400\n0E00\n1100\n6080\nENDCHAR\nSTARTCHAR U_F982\nENCODING 63874\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n7FE0\n4200\n5FE0\n5240\n52A0\n57E0\n5540\n6FE0\nAAA0\n9FE0\nENDCHAR\nSTARTCHAR U_F983\nENCODING 63875\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2200\n1200\nFBE0\n4440\n7B80\n4AA0\n4AC0\n4A80\n4A80\n6B40\n9220\nENDCHAR\nSTARTCHAR U_F984\nENCODING 63876\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n43C0\n2200\n0FE0\n8A20\n4FE0\n2920\n2FE0\nC920\n57E0\n6D40\n47A0\nENDCHAR\nSTARTCHAR U_F985\nENCODING 63877\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0FE0\nFA80\n4FE0\n4A80\nEFC0\nA940\nAFC0\nA940\nEFE0\nA960\n17A0\nENDCHAR\nSTARTCHAR U_F986\nENCODING 63878\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFBE0\n8A20\nFBE0\n8A20\nFBE0\n9F20\n9120\nBFA0\nA0A0\nBFA0\n8060\nENDCHAR\nSTARTCHAR U_F987\nENCODING 63879\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFEE0\nA000\nFEE0\nAAA0\nFFE0\nAAA0\nFFE0\n5AA0\nABC0\nAAA0\n13E0\nENDCHAR\nSTARTCHAR U_F988\nENCODING 63880\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFBE0\n4A40\n6B40\n5AC0\n7FE0\n4A40\n7FC0\n6240\nBFA0\nA220\nBBE0\nENDCHAR\nSTARTCHAR U_F989\nENCODING 63881\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF200\n23E0\nFCA0\n20A0\n7520\nAAC0\n1500\nE5E0\n1E00\n3580\nCC60\nENDCHAR\nSTARTCHAR U_F98A\nENCODING 63882\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\n0800\n0800\n0800\nFF80\n0880\n0880\n1080\n1080\n2080\n4480\n8300\nENDCHAR\nSTARTCHAR U_F98B\nENCODING 63883\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FE0\n5DC0\n4880\n7FE0\n5DC0\n6AA0\n5FC0\n5040\n5FC0\n9040\n9FC0\nENDCHAR\nSTARTCHAR U_F98C\nENCODING 63884\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FE0\n4440\n5980\n4880\n7FE0\n4880\n5DC0\n6AA0\n53C0\n9200\nBFE0\nENDCHAR\nSTARTCHAR U_F98D\nENCODING 63885\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2520\nFBA0\n26C0\nFBA0\nAAC0\nFFE0\nA900\nFFE0\n2380\nF540\n2920\nENDCHAR\nSTARTCHAR U_F98E\nENCODING 63886\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4000\n7FE0\n4200\n8200\n3FC0\n2200\n2200\nFFE0\n0200\n0200\n0200\nENDCHAR\nSTARTCHAR U_F98F\nENCODING 63887\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3240\n2A80\nBFE0\nAA80\nB260\nA840\n2FE0\n3140\n2BE0\n2440\n3840\nENDCHAR\nSTARTCHAR U_F990\nENCODING 63888\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4440\nAEA0\nE0C0\n4FA0\nE0C0\n4F40\nAAA0\n0E00\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_F991\nENCODING 63889\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2480\n26C0\nFAA0\n2FE0\n2A80\n3540\nE540\n2A20\n2540\nAAA0\n6AA0\nENDCHAR\nSTARTCHAR U_F992\nENCODING 63890\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n53E0\n2880\n0BE0\n82A0\n5BE0\n2AA0\n2BE0\nC880\n4BE0\n5480\n63E0\nENDCHAR\nSTARTCHAR U_F993\nENCODING 63891\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n2FE0\n2100\nBFE0\nAAA0\nA920\n2FE0\n2300\n5580\n4940\n9120\nENDCHAR\nSTARTCHAR U_F994\nENCODING 63892\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0080\nFFE0\n2AA0\n23E0\n7AA0\n2BE0\n2880\n3BE0\nE880\n5480\n23E0\nENDCHAR\nSTARTCHAR U_F995\nENCODING 63893\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n01C0\n7E00\n0400\nFFE0\n2480\nC560\n1E00\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_F996\nENCODING 63894\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n2FE0\n5100\nF7E0\n26A0\n5520\nEFE0\n0180\n5340\nAD20\nA920\nENDCHAR\nSTARTCHAR U_F997\nENCODING 63895\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF440\nA440\nAAA0\nE440\nAAA0\nA660\nEAA0\nAAA0\nAEE0\nF280\n2C80\nENDCHAR\nSTARTCHAR U_F998\nENCODING 63896\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFBE0\n2080\nFBE0\n5540\n8420\n7FC0\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_F999\nENCODING 63897\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\nFFE0\n1100\n9FE0\n4940\nEFC0\n2940\n3FE0\n2100\n5100\n8FE0\nENDCHAR\nSTARTCHAR U_F99A\nENCODING 63898\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\n2FE0\n2540\n07C0\nE540\n27C0\n2100\n2FE0\n2100\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_F99B\nENCODING 63899\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n57E0\n8900\n7FE0\n2AA0\nFFE0\n2100\nAB80\n7540\n3920\nE100\nENDCHAR\nSTARTCHAR U_F99C\nENCODING 63900\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nFC40\n2140\n2140\n3D40\n4540\nC540\n2940\n1140\n2040\n4040\n81C0\nENDCHAR\nSTARTCHAR U_F99D\nENCODING 63901\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0400\n2500\n4480\n8140\n1E00\nE400\n3FC0\n0440\n0840\n1240\nE180\nENDCHAR\nSTARTCHAR U_F99E\nENCODING 63902\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0FE0\nE820\nA920\nAFE0\nA920\nA920\nA9A0\nEA60\nAC20\n0FE0\n0820\nENDCHAR\nSTARTCHAR U_F99F\nENCODING 63903\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFE20\n2120\n3D20\n4920\nA920\n1120\n20E0\nC040\n1240\n4920\n8920\nENDCHAR\nSTARTCHAR U_F9A0\nENCODING 63904\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFC20\n2120\n7D20\nA920\n10E0\n2400\nFFE0\n1220\n3140\nD480\n1860\nENDCHAR\nSTARTCHAR U_F9A1\nENCODING 63905\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4440\nF280\n07C0\nF440\n0440\nF7C0\n0280\nF280\n92A0\nF4A0\n9860\nENDCHAR\nSTARTCHAR U_F9A2\nENCODING 63906\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n7FE0\n4500\n5FE0\n4540\n7FE0\n4540\n5FC0\n4D80\n9540\nA520\nENDCHAR\nSTARTCHAR U_F9A3\nENCODING 63907\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0E00\n1100\n2480\nC260\n3F80\n0100\n0200\n1440\n52A0\n50A0\n8F80\nENDCHAR\nSTARTCHAR U_F9A4\nENCODING 63908\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n2280\nFC40\n2120\n2FC0\n3080\nE100\n2240\n2AA0\nAA60\n71C0\nENDCHAR\nSTARTCHAR U_F9A5\nENCODING 63909\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF900\n4280\n4440\n7FE0\n5000\n5EE0\nB2A0\n1EE0\n2440\n4AA0\n9120\nENDCHAR\nSTARTCHAR U_F9A6\nENCODING 63910\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7BE0\n9480\n7FE0\n4A00\n7FC0\n4A40\n7FE0\n4A40\nBFC0\n2A80\nCA60\nENDCHAR\nSTARTCHAR U_F9A7\nENCODING 63911\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8520\n5A40\n2520\n6FE0\nAAA0\n2FE0\n6DC0\nAB40\n2DC0\nEB40\n4D20\nENDCHAR\nSTARTCHAR U_F9A8\nENCODING 63912\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0C00\n1200\n2100\n4880\n8440\n7F80\n0100\n0200\n1C00\n0400\n0200\nENDCHAR\nSTARTCHAR U_F9A9\nENCODING 63913\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n8420\n8A20\n9520\nE4E0\n9FA0\n8920\n8620\n8220\nFFE0\n8020\nENDCHAR\nSTARTCHAR U_F9AA\nENCODING 63914\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\nFFE0\n8AA0\nAA60\n5F80\n0000\n3F80\n2A80\nFFE0\n0200\n1E00\nENDCHAR\nSTARTCHAR U_F9AB\nENCODING 63915\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8420\nFFE0\n2100\n57C0\nAC40\n27C0\nFC40\n17C0\nA440\n47C0\n2820\nENDCHAR\nSTARTCHAR U_F9AC\nENCODING 63916\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n2280\nA440\nB920\nA080\nAFE0\n2040\n2280\n2100\n2080\n2080\nENDCHAR\nSTARTCHAR U_F9AD\nENCODING 63917\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0100\nFA80\n2440\n2A20\n7100\n2000\n27E0\n3840\nE280\n4100\n0080\nENDCHAR\nSTARTCHAR U_F9AE\nENCODING 63918\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n56A0\n5AC0\n3180\n4A40\nFFE0\n8020\n7FC0\n0400\n3FC0\n0480\nFFE0\nENDCHAR\nSTARTCHAR U_F9AF\nENCODING 63919\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8900\n5100\nFA80\n2440\n2120\nF880\n27E0\nF840\n2380\n4080\n8040\nENDCHAR\nSTARTCHAR U_F9B0\nENCODING 63920\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFD80\n4A40\n4A40\n7D20\n48A0\n7800\n4FE0\n4840\nF980\n0880\n0840\nENDCHAR\nSTARTCHAR U_F9B1\nENCODING 63921\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n5140\n8A20\n7D00\n2080\nF800\n23E0\nA820\n7140\n3880\nE040\nENDCHAR\nSTARTCHAR U_F9B2\nENCODING 63922\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n0400\nFFE0\n9520\n0E00\n3180\nC460\n3F80\n0100\n0E00\n0300\nENDCHAR\nSTARTCHAR U_F9B3\nENCODING 63923\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n0400\nFFE0\n9520\n2480\nEEE0\nAAA0\nFFE0\n2480\n5540\nFFE0\nENDCHAR\nSTARTCHAR U_F9B4\nENCODING 63924\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n17E0\n3080\n4BE0\nA620\n13E0\nFA20\n0BE0\n5220\n23E0\n1240\n1420\nENDCHAR\nSTARTCHAR U_F9B5\nENCODING 63925\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F20\n2420\n24A0\n2EA0\n72A0\nAAA0\n26A0\n22A0\n2420\n2820\n30E0\nENDCHAR\nSTARTCHAR U_F9B6\nENCODING 63926\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4280\n2FE0\nFAA0\n1FE0\n2AA0\n7FE0\nA440\n27C0\n2280\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_F9B7\nENCODING 63927\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFA80\n57E0\n52A0\nFFE0\nAAA0\nDFE0\n8A40\nFBC0\n8A40\nF980\n8FE0\nENDCHAR\nSTARTCHAR U_F9B8\nENCODING 63928\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\nFFC0\n2140\n77E0\nA940\n77C0\n0120\nFDC0\n2B40\nA520\n6320\nENDCHAR\nSTARTCHAR U_F9B9\nENCODING 63929\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n0A00\n7BC0\n4040\n7BC0\n0A00\nFFE0\n1400\n5240\n50A0\n8FA0\nENDCHAR\nSTARTCHAR U_F9BA\nENCODING 63930\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\nFF80\n0100\n0200\n0400\n0400\n0400\n0400\n0400\n2400\n1C00\n0800\nENDCHAR\nSTARTCHAR U_F9BB\nENCODING 63931\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2200\n3FE0\n5540\n4F80\nD8C0\n6F80\n4880\n4F80\n4A80\n5240\n6620\nENDCHAR\nSTARTCHAR U_F9BC\nENCODING 63932\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\nFFE0\n8420\nFFE0\n5240\n3F80\nE0E0\n3F80\n1500\n2480\nCC60\nENDCHAR\nSTARTCHAR U_F9BD\nENCODING 63933\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3FC0\n2040\n3FC0\n2200\n2260\n3F40\n2680\n2A80\n5240\nAE20\n0400\nENDCHAR\nSTARTCHAR U_F9BE\nENCODING 63934\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2040\nAA40\n7140\n2040\nFA40\n2140\n3060\n6BC0\nA040\n2040\n2040\nENDCHAR\nSTARTCHAR U_F9BF\nENCODING 63935\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4440\n5E40\n92A0\nFFE0\n5240\nFFE0\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_F9C0\nENCODING 63936\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n2FE0\nAAA0\nB7C0\nAC60\n37C0\n2440\n27C0\n5540\n4920\n9320\nENDCHAR\nSTARTCHAR U_F9C1\nENCODING 63937\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n3FE0\nA200\n7FE0\n34A0\n6FC0\nB8A0\n2F80\n2580\n4940\nB320\nENDCHAR\nSTARTCHAR U_F9C2\nENCODING 63938\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\nFFE0\n1100\nFBC0\n2940\n18C0\n2E40\nF1E0\n1E00\n00C0\n1F00\nENDCHAR\nSTARTCHAR U_F9C3\nENCODING 63939\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\n3FE0\n2AA0\n07C0\nEC60\n37C0\n2440\n27C0\n2940\n5320\n8FE0\nENDCHAR\nSTARTCHAR U_F9C4\nENCODING 63940\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n11E0\nFF00\n45E0\n2820\nFFE0\n4500\n7DE0\n4500\n7DE0\n4520\n4DE0\nENDCHAR\nSTARTCHAR U_F9C5\nENCODING 63941\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n2880\n2680\nFFE0\n8420\n7FC0\n2480\n3F80\n2480\nFFE0\n0400\nENDCHAR\nSTARTCHAR U_F9C6\nENCODING 63942\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF7C0\n9000\nA000\nCFE0\nA280\n9280\n9280\nF280\nA2A0\n84A0\n9860\nENDCHAR\nSTARTCHAR U_F9C7\nENCODING 63943\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nDE20\n8A20\nAAA0\nD6A0\n28A0\nFEA0\n10A0\nFEA0\n9220\n5420\nFEE0\nENDCHAR\nSTARTCHAR U_F9C8\nENCODING 63944\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n27C0\n2140\nF940\n2140\n2140\n37C0\n6A40\nA240\n2240\n2240\n2FE0\nENDCHAR\nSTARTCHAR U_F9C9\nENCODING 63945\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2200\n2CE0\nFAA0\n2AA0\n2AA0\n3AA0\n6EA0\nAAA0\n22E0\n2480\n2880\nENDCHAR\nSTARTCHAR U_F9CA\nENCODING 63946\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\n2FE0\n8200\n5440\n1FA0\n2000\n2540\nC540\n4540\n4940\n5160\nENDCHAR\nSTARTCHAR U_F9CB\nENCODING 63947\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4200\n2DE0\n08A0\n9AA0\n5F20\n2140\n2FE0\nC920\n4FE0\n4920\n4FE0\nENDCHAR\nSTARTCHAR U_F9CC\nENCODING 63948\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0100\nF7E0\n2900\n2240\n77A0\n2020\n2540\n3D40\nE540\n4540\n1960\nENDCHAR\nSTARTCHAR U_F9CD\nENCODING 63949\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nF7C0\n8240\n9240\nEDC0\n0880\n7F80\n4880\n7F80\n4880\n7F80\n4080\nENDCHAR\nSTARTCHAR U_F9CE\nENCODING 63950\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0100\nF7E0\n2240\n27C0\n7020\nD540\n5540\n5540\n7540\n5940\n1060\nENDCHAR\nSTARTCHAR U_F9CF\nENCODING 63951\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n27C0\n2240\n5240\nF240\n2240\n57C0\nEA40\n0240\n5240\nAA40\nAFE0\nENDCHAR\nSTARTCHAR U_F9D0\nENCODING 63952\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nABE0\n7080\n23E0\nFA20\n73E0\nAA20\n23E0\nFA20\n23E0\n5140\n8E20\nENDCHAR\nSTARTCHAR U_F9D1\nENCODING 63953\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\n0800\n0400\n0400\nFFC0\n0000\n1200\n1100\n2080\n4040\n8040\nENDCHAR\nSTARTCHAR U_F9D2\nENCODING 63954\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFD40\nB520\n6D00\nB7E0\n3100\n4D20\nA140\n5480\n29A0\n1260\nEC20\nENDCHAR\nSTARTCHAR U_F9D3\nENCODING 63955\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF100\n97C0\nA100\nCFE0\nA240\n9420\n9900\nF7C0\nA100\n8100\n9FE0\nENDCHAR\nSTARTCHAR U_F9D4\nENCODING 63956\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1380\n1440\n2BA0\n2000\n6FE0\nAAA0\n2AA0\n2FE0\n2AA0\n2AA0\n2860\nENDCHAR\nSTARTCHAR U_F9D5\nENCODING 63957\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4440\n7FC0\n0400\n1B00\nEEE0\n0000\n7FC0\n4A40\n7FC0\n4A40\n40C0\nENDCHAR\nSTARTCHAR U_F9D6\nENCODING 63958\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4300\n2480\n0840\n97A0\n5000\n2FE0\n2AA0\nCFE0\n4AA0\n4AA0\n4860\nENDCHAR\nSTARTCHAR U_F9D7\nENCODING 63959\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\nFA80\n2440\nFBA0\nA800\nFFE0\nAAA0\nFFE0\n2AA0\nFAA0\n2860\nENDCHAR\nSTARTCHAR U_F9D8\nENCODING 63960\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2200\n4FC0\n8240\n3FE0\n4240\nCFC0\n4200\n4FC0\n4200\n7FE0\n4200\nENDCHAR\nSTARTCHAR U_F9D9\nENCODING 63961\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2FE0\n2280\nAFE0\nBAA0\nAFE0\nA100\n2FE0\n2100\n2380\n2560\n3920\nENDCHAR\nSTARTCHAR U_F9DA\nENCODING 63962\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFFE0\n0A00\n7FC0\n4A40\n7FC0\n0400\nFFE0\n1500\n2480\n4440\n8420\nENDCHAR\nSTARTCHAR U_F9DB\nENCODING 63963\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\nFFE0\n8840\n5280\n0C00\n2A80\nDF40\n0400\nFFE0\n0400\n0400\nENDCHAR\nSTARTCHAR U_F9DC\nENCODING 63964\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF400\n97C0\nAC40\nC380\nAC60\n9500\n97E0\nF900\nA7C0\n8100\n9FE0\nENDCHAR\nSTARTCHAR U_F9DD\nENCODING 63965\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0C20\nF0A0\n10A0\nFEA0\n10A0\n38A0\n54A0\n92A0\n1020\n1020\n10E0\nENDCHAR\nSTARTCHAR U_F9DE\nENCODING 63966\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0400\nFFC0\n0400\n7F80\n4480\n7F80\n4480\n1400\n0800\n3600\nC1C0\nENDCHAR\nSTARTCHAR U_F9DF\nENCODING 63967\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3FE0\n2020\n3FE0\n2520\n29E0\n3520\n2BE0\n3A40\n4D80\n4940\n8E20\nENDCHAR\nSTARTCHAR U_F9E0\nENCODING 63968\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n3F80\n2080\n3F80\n2080\n3F80\n2000\n3FC0\nD240\n2240\nC440\n1980\nENDCHAR\nSTARTCHAR U_F9E1\nENCODING 63969\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\nFFE0\n1500\n2480\nC460\n1F80\n0100\n0240\n7FE0\n0200\n0E00\nENDCHAR\nSTARTCHAR U_F9E2\nENCODING 63970\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0440\nF940\n1140\nFF40\n5540\n92C0\n0400\nFFE0\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_F9E3\nENCODING 63971\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n47E0\n2420\n8420\n57E0\n1400\n2520\n2540\nC580\n4520\n4920\n50E0\nENDCHAR\nSTARTCHAR U_F9E4\nENCODING 63972\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n07E0\nFD20\n2520\n27E0\n7520\n27E0\n2520\n3900\nE7C0\n4100\n0FE0\nENDCHAR\nSTARTCHAR U_F9E5\nENCODING 63973\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n3FE0\nA100\n6E20\n24A0\n7FA0\nA4A0\n2EA0\n35A0\n4420\n84E0\nENDCHAR\nSTARTCHAR U_F9E6\nENCODING 63974\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FE0\n4920\n7FE0\n2280\nA7E0\nBC80\nA7E0\n2480\n27E0\n2480\n27E0\nENDCHAR\nSTARTCHAR U_F9E7\nENCODING 63975\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\nFFE0\n2480\n3F80\n2480\n7FC0\n0400\nFFE0\n3280\nD500\n18E0\nENDCHAR\nSTARTCHAR U_F9E8\nENCODING 63976\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n47C0\n2540\nFD40\n17C0\n2D40\n77C0\nA900\n2FC0\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_F9E9\nENCODING 63977\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n7F80\n4480\n4480\n7F80\n4480\n7F80\n4480\n0400\n7F80\n0400\nFFC0\nENDCHAR\nSTARTCHAR U_F9EA\nENCODING 63978\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1180\nFD40\n55E0\n6F40\n55E0\n7D40\n2140\nFDE0\nAD40\nB540\n8DE0\nENDCHAR\nSTARTCHAR U_F9EB\nENCODING 63979\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\nFFC0\n9200\nFF80\n9200\nFFC0\n8800\n9F00\nB100\nDF00\n8000\nFFC0\nENDCHAR\nSTARTCHAR U_F9EC\nENCODING 63980\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n5EE0\n2220\n1EE0\n9080\n5EE0\n3220\n2AA0\nC660\n5BA0\n4220\n4CC0\nENDCHAR\nSTARTCHAR U_F9ED\nENCODING 63981\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\nFFC0\n2100\n1200\n0C00\n1200\nFFC0\n2100\n2100\n3F00\n2100\nENDCHAR\nSTARTCHAR U_F9EE\nENCODING 63982\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2920\n2540\nAFE0\nB940\nA520\n2F40\n2940\n25E0\n5340\n45E0\n8840\nENDCHAR\nSTARTCHAR U_F9EF\nENCODING 63983\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0920\nF540\n2FE0\n2540\n7920\n2540\n2FE0\n3B40\nE7E0\n4440\n1840\nENDCHAR\nSTARTCHAR U_F9F0\nENCODING 63984\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0900\nFFE0\n4920\n79E0\n4920\n7BE0\n5FA0\n5220\n5FA0\n5220\n5FE0\nENDCHAR\nSTARTCHAR U_F9F1\nENCODING 63985\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF920\n9540\nAFE0\nC540\nA920\n9440\n97E0\nF940\nABE0\n8440\n9840\nENDCHAR\nSTARTCHAR U_F9F2\nENCODING 63986\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4520\n7340\n97E0\nFB40\nAD20\nFA40\nABE0\nFD40\n53E0\nAA40\nAC40\nENDCHAR\nSTARTCHAR U_F9F3\nENCODING 63987\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n12A0\nFDC0\nABE0\nFCC0\nADA0\nFD40\nABE0\nBD40\nABE0\nBA40\n2C40\nENDCHAR\nSTARTCHAR U_F9F4\nENCODING 63988\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\n1100\nFBE0\n1100\n1100\n3B80\n5540\n9520\n1920\n1100\n1100\nENDCHAR\nSTARTCHAR U_F9F5\nENCODING 63989\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4880\n2880\n9FE0\n4880\n2D80\n3AC0\n2AA0\nCAA0\n4880\n4880\n4880\nENDCHAR\nSTARTCHAR U_F9F6\nENCODING 63990\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF400\nA7E0\nA800\nF3C0\n9240\n93C0\nF000\nAEE0\nAAA0\nAAA0\nFEE0\nENDCHAR\nSTARTCHAR U_F9F7\nENCODING 63991\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0C00\n0400\n7FC0\n0000\n2080\n2080\n1100\n1100\n1200\n0200\nFFE0\nENDCHAR\nSTARTCHAR U_F9F8\nENCODING 63992\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4200\n7BE0\nA500\n9480\n0400\n7FC0\n0100\n1100\n0A00\n0A00\nFFE0\nENDCHAR\nSTARTCHAR U_F9F9\nENCODING 63993\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\nA880\n77E0\n2000\nFA40\n2240\n7140\nA980\nA880\n2080\n2FE0\nENDCHAR\nSTARTCHAR U_F9FA\nENCODING 63994\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n5100\n5180\n5140\n5FE0\n7100\n1100\nF100\n5100\n5280\n5440\n9820\nENDCHAR\nSTARTCHAR U_F9FB\nENCODING 63995\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n1F80\n3100\n4A00\n2C00\nF480\n1500\n2A00\n1100\n2080\nC060\nENDCHAR\nSTARTCHAR U_F9FC\nENCODING 63996\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4480\nEFC0\n0AA0\nE480\n0FE0\nE080\n0EA0\nEAC0\nAEA0\nEB60\nAE20\nENDCHAR\nSTARTCHAR U_F9FD\nENCODING 63997\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\n1100\n2100\n2100\n6FE0\nA100\n2100\n2100\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_F9FE\nENCODING 63998\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\nFFE0\n1100\n0400\n0A00\n3580\nC460\n3F80\n1500\n2480\nC460\nENDCHAR\nSTARTCHAR U_F9FF\nENCODING 63999\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1020\nFEA0\n10A0\nFEA0\n92A0\n92A0\n96A0\n10A0\n3420\n5220\n9160\nENDCHAR\nSTARTCHAR U_FA00\nENCODING 64000\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2000\n27E0\n2120\n3920\nE120\n2120\n2920\n3220\n2220\n04A0\n0840\nENDCHAR\nSTARTCHAR U_FA01\nENCODING 64001\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n7FE0\n4880\n7FE0\n4880\n4F80\n4000\n5FC0\n4880\n8700\nB8E0\nENDCHAR\nSTARTCHAR U_FA02\nENCODING 64002\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2000\n27E0\nF900\n2100\n2A00\n37E0\nEA20\n2220\n2220\nA3E0\n6220\nENDCHAR\nSTARTCHAR U_FA03\nENCODING 64003\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\nAFE0\n7540\n27E0\nFD40\n27C0\n7500\nAFE0\nA620\n2BE0\n3220\nENDCHAR\nSTARTCHAR U_FA04\nENCODING 64004\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n7FE0\n4020\n8340\n3C00\n04C0\n0700\n7C00\n0420\n0420\n03E0\nENDCHAR\nSTARTCHAR U_FA05\nENCODING 64005\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4FE0\n2820\n8820\n5BA0\n1820\n2BA0\n2AA0\nCBA0\n4AA0\n4820\n48E0\nENDCHAR\nSTARTCHAR U_FA06\nENCODING 64006\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n2080\n3F80\n2080\n7FC0\n1100\nFFE0\n5540\n8E20\n1500\n6CC0\nENDCHAR\nSTARTCHAR U_FA07\nENCODING 64007\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n23E0\nF800\n21C0\nF940\nA9C0\nF800\nABE0\nFAA0\n23E0\nFAA0\n23E0\nENDCHAR\nSTARTCHAR U_FA08\nENCODING 64008\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n27C0\n4000\n8000\n1000\n2FE0\n6080\nA080\n2080\n2480\n2380\n2100\nENDCHAR\nSTARTCHAR U_FA09\nENCODING 64009\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF200\n93E0\nA640\nC180\nA660\n9080\n97E0\nF480\nAFE0\n8080\n8080\nENDCHAR\nSTARTCHAR U_FA0A\nENCODING 64010\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n2080\n3F80\n2080\n3F80\n2080\n3F80\n2A80\n0A20\n1220\nE1E0\nENDCHAR\nSTARTCHAR U_FA0B\nENCODING 64011\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0200\n7FE0\n4800\n7FE0\n52A0\n52C0\n7EA0\n48A0\n7EE0\n8880\n9880\nENDCHAR\nSTARTCHAR U_FA0C\nENCODING 64012\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0080\nFFC0\n1200\n1200\n1200\n1200\n1200\n2200\n2240\n4240\n81C0\nENDCHAR\nSTARTCHAR U_FA0D\nENCODING 64013\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n11C0\n7D40\n1140\nFD40\n8660\nFFC0\n0140\n7940\n4880\n7940\n4A20\nENDCHAR\nSTARTCHAR U_FA0E\nENCODING 64014\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1240\nFBE0\n4A40\n37E0\n2A40\nC3E0\n0000\n7FC0\n1080\n0F00\n70E0\nENDCHAR\nSTARTCHAR U_FA0F\nENCODING 64015\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2280\n2440\n2100\nF280\n2440\n2820\n27C0\n3440\nC440\n07C0\n0440\nENDCHAR\nSTARTCHAR U_FA10\nENCODING 64016\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2FE0\n2820\n27C0\nF200\n2520\n2EC0\n3480\nCBC0\n06A0\n1880\n0300\nENDCHAR\nSTARTCHAR U_FA11\nENCODING 64017\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0100\n2FE0\n2440\nAA80\nAFE0\nA840\nAF40\nBD40\nC740\n0040\n00C0\nENDCHAR\nSTARTCHAR U_FA12\nENCODING 64018\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0100\nFFE0\n9100\n97C0\nF100\n9FE0\n9440\nF7C0\n9440\n07C0\n04C0\nENDCHAR\nSTARTCHAR U_FA13\nENCODING 64019\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2280\n2FE0\nF280\n2240\n75E0\n6C40\nA540\n24C0\n2440\n2440\n24C0\nENDCHAR\nSTARTCHAR U_FA14\nENCODING 64020\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2540\n2FE0\nF280\n2440\n6BA0\n7100\nA7C0\n2100\n2FE0\n2100\n2300\nENDCHAR\nSTARTCHAR U_FA15\nENCODING 64021\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nBEE0\n64A0\n24A0\n6EA0\nAAE0\nAE80\nA480\nA4A0\nBEE0\n4A40\n9120\nENDCHAR\nSTARTCHAR U_FA16\nENCODING 64022\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n8920\n57A0\n2140\n57E0\n9100\n33E0\n5620\n9BE0\n1220\n73E0\n2220\nENDCHAR\nSTARTCHAR U_FA17\nENCODING 64023\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n1100\nFFE0\n1100\n2080\n4040\nBFA0\n2A80\n2A80\n2A80\nFFE0\nENDCHAR\nSTARTCHAR U_FA18\nENCODING 64024\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7200\n0200\nFA00\n2200\n2A00\n6A00\n6A00\nAA00\n2220\n2220\n21E0\nENDCHAR\nSTARTCHAR U_FA19\nENCODING 64025\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4080\n2080\nFFE0\n14A0\n27E0\n34A0\n6FE0\nA4A0\n2080\n2080\n2080\nENDCHAR\nSTARTCHAR U_FA1A\nENCODING 64026\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4440\n2280\nFFE0\n1100\n27C0\n7100\nA900\n2FE0\n2100\n2100\n2100\nENDCHAR\nSTARTCHAR U_FA1B\nENCODING 64027\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4FE0\n2000\n07C0\nF440\n17C0\n2000\n3FE0\n6920\nAFE0\n2920\n2FE0\nENDCHAR\nSTARTCHAR U_FA1C\nENCODING 64028\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\n27E0\nF900\n07C0\n9100\n5FE0\n5440\n3FC0\nE440\n47C0\n04C0\nENDCHAR\nSTARTCHAR U_FA1D\nENCODING 64029\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\nAFE0\n7100\n23C0\nF900\n27E0\n3440\n6FC0\nA440\n27C0\n24C0\nENDCHAR\nSTARTCHAR U_FA1E\nENCODING 64030\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nFBE0\n0820\n4920\n28A0\n0860\n18A0\nEB20\n4920\n0820\n79E0\n1040\nENDCHAR\nSTARTCHAR U_FA1F\nENCODING 64031\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\nFFE0\n1100\n7BC0\n4A40\n7BC0\n4A40\n7BE0\n4E20\n8BA0\n9860\nENDCHAR\nSTARTCHAR U_FA22\nENCODING 64034\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4220\nF7A0\n0240\nFFE0\n0100\nF3C0\n0640\nFBC0\n9240\nF3C0\n9240\nENDCHAR\nSTARTCHAR U_FA23\nENCODING 64035\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1040\n1140\n7CC0\n1240\nFD40\n1040\n5CE0\n5340\n5040\n7040\n8FE0\nENDCHAR\nSTARTCHAR U_FA24\nENCODING 64036\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4FC0\n2440\n2480\n05E0\nE420\n2540\n2480\n2940\n2A20\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_FA25\nENCODING 64037\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4200\n2780\n2900\n1FC0\nEA40\n2FC0\n2340\n2520\n28E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_FA26\nENCODING 64038\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n25E0\nFD20\n2940\nFF40\n2180\n7D40\nC520\n7D20\n45E0\n7D40\n4500\nENDCHAR\nSTARTCHAR U_FA2A\nENCODING 64042\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2020\n53C0\nAA00\nFBE0\n8A20\nFA20\n8B20\nFAC0\n9240\nACA0\nCD20\nENDCHAR\nSTARTCHAR U_FA2B\nENCODING 64043\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n27E0\n5020\nABA0\nF820\n8BA0\nFAA0\n8AA0\nFBA0\n92A0\nA820\nC8E0\nENDCHAR\nSTARTCHAR U_FA2C\nENCODING 64044\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n57E0\nAC20\nFBC0\n8A40\nFBC0\n8A00\nFBC0\n9240\nABC0\nCA40\nENDCHAR\nSTARTCHAR U_FA2D\nENCODING 64045\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\nFBC0\nAA40\n53C0\nFA40\n53E0\n7A00\n53E0\n7AA0\n5560\n7D40\nENDCHAR\nSTARTCHAR U_FA30\nENCODING 64048\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n17E0\n1800\n27E0\n2520\n64A0\nAFE0\n2520\n24A0\n2FE0\n2020\n20C0\nENDCHAR\nSTARTCHAR U_FA31\nENCODING 64049\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1440\n1280\n2FE0\n2AA0\n6920\nAFE0\n2440\n27C0\n2440\n27C0\n2440\nENDCHAR\nSTARTCHAR U_FA32\nENCODING 64050\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n2000\n3E00\n4400\n7F80\nC880\n4880\n7F80\n0C00\n1440\n2440\nC3C0\nENDCHAR\nSTARTCHAR U_FA33\nENCODING 64051\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2080\n3880\n4BE0\n7CA0\nD4A0\n54A0\n7D20\n2A20\n2CC0\n4820\n87E0\nENDCHAR\nSTARTCHAR U_FA34\nENCODING 64052\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2880\nFE80\n2880\n7FE0\n54A0\n54A0\nFEA0\n10A0\n7D20\n12A0\nFC40\nENDCHAR\nSTARTCHAR U_FA35\nENCODING 64053\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0800\n7F80\n4480\n7F80\n4480\n7F80\n1400\nFFC0\n0400\n0400\n0400\nENDCHAR\nSTARTCHAR U_FA36\nENCODING 64054\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0FC0\nE840\nAFC0\nA840\nAFC0\nA400\nEFE0\n1920\n0AA0\n0F20\n00C0\nENDCHAR\nSTARTCHAR U_FA37\nENCODING 64055\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0280\nFFE0\nA280\nA7C0\nA540\nAFE0\nE100\nAFE0\n0100\n0680\n1860\nENDCHAR\nSTARTCHAR U_FA38\nENCODING 64056\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7BC0\n4A40\n4A40\n7BC0\n0880\nFFE0\n4080\nFBE0\n4A40\n4A40\n7BC0\nENDCHAR\nSTARTCHAR U_FA39\nENCODING 64057\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n27E0\n2420\n27E0\nFE20\n2540\n27E0\n2540\n3FE0\nE940\n4A40\n1440\nENDCHAR\nSTARTCHAR U_FA3A\nENCODING 64058\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FC0\n5540\n7FC0\n0400\n3F80\n0400\nFFE0\n5540\nBFA0\n0400\nFFE0\nENDCHAR\nSTARTCHAR U_FA3B\nENCODING 64059\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FE0\n4020\n7FE0\n4480\n5FC0\n5540\n5FC0\n4880\n4F80\n4880\n8F80\nENDCHAR\nSTARTCHAR U_FA3C\nENCODING 64060\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n0400\n0400\n4440\n4440\n4440\n7FC0\n4440\n0400\n0800\n3000\nC000\nENDCHAR\nSTARTCHAR U_FA3D\nENCODING 64061\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2400\n27E0\nB000\nAFC0\nA540\nA540\n3FE0\n2940\n2FE0\n2040\n2180\nENDCHAR\nSTARTCHAR U_FA3E\nENCODING 64062\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2FE0\n2A40\nAA40\nBF40\nABE0\nAA40\n2E40\n2AC0\n2D40\n2A40\n2460\nENDCHAR\nSTARTCHAR U_FA3F\nENCODING 64063\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2280\n2FE0\nA920\nBAA0\nAFE0\nA000\n27C0\n2440\n27C0\n2440\n27C0\nENDCHAR\nSTARTCHAR U_FA40\nENCODING 64064\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3500\n5FE0\n84A0\n3FA0\n64A0\nBE40\n24A0\n3F00\n5440\n52A0\n8FA0\nENDCHAR\nSTARTCHAR U_FA41\nENCODING 64065\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\n7D00\n81E0\n7F40\n5540\nFF40\n5540\n5540\nFE80\n0540\n1A20\nENDCHAR\nSTARTCHAR U_FA42\nENCODING 64066\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7BE0\n4880\n4A80\n7A80\n4FE0\n7880\n5080\n4980\n56A0\nE4A0\n4860\nENDCHAR\nSTARTCHAR U_FA43\nENCODING 64067\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n3F80\n2080\n3F80\n2080\n7FC0\n0500\nFFE0\n0880\n3F80\nD080\n1F80\nENDCHAR\nSTARTCHAR U_FA44\nENCODING 64068\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2400\n27E0\nF800\n27C0\n2540\n3540\n6FE0\nA540\n2540\n2FE0\n20C0\nENDCHAR\nSTARTCHAR U_FA45\nENCODING 64069\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4400\n27E0\n8800\n5FC0\n1940\n2FE0\n2A40\nC940\n4FE0\n4040\n4180\nENDCHAR\nSTARTCHAR U_FA46\nENCODING 64070\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4200\n2FA0\n0240\n9FE0\n5200\n27C0\n2C40\nD7C0\n4440\n47C0\n4440\nENDCHAR\nSTARTCHAR U_FA47\nENCODING 64071\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n5FE0\n2480\n0FC0\n8A40\n5FC0\n2200\n2FC0\nC200\n5FE0\n4480\n5860\nENDCHAR\nSTARTCHAR U_FA48\nENCODING 64072\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0440\n3F80\n0500\nFFE0\n1080\n3F80\nD080\n1F80\n4240\n4920\n8920\nENDCHAR\nSTARTCHAR U_FA49\nENCODING 64073\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 5 1 5\nBITMAP\n0380\nFC00\n4980\n2500\n2200\nENDCHAR\nSTARTCHAR U_FA4A\nENCODING 64074\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n07E0\nF100\n2220\n2640\nFB80\n2480\n2BC0\n22C0\nF4A0\n4CA0\n1320\nENDCHAR\nSTARTCHAR U_FA4B\nENCODING 64075\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0100\nF7E0\n2520\n27E0\n7520\nD7E0\n5280\n5FE0\n7080\n5080\n0080\nENDCHAR\nSTARTCHAR U_FA4C\nENCODING 64076\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\n2100\nF900\n0900\n17C0\n3100\n6900\nA900\n2100\n2100\n2FE0\nENDCHAR\nSTARTCHAR U_FA4D\nENCODING 64077\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\n2100\nF500\n1500\n25E0\n3500\n6D00\nA500\n2500\n2500\n3FE0\nENDCHAR\nSTARTCHAR U_FA4E\nENCODING 64078\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4060\n2380\nFA00\n0A00\n13E0\n3240\n6A40\nAA40\n2440\n2440\n2840\nENDCHAR\nSTARTCHAR U_FA4F\nENCODING 64079\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\n2100\nFFE0\n0900\n1200\n33E0\n6E20\nAA20\n2220\n23E0\n2220\nENDCHAR\nSTARTCHAR U_FA50\nENCODING 64080\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n27C0\n1440\nFC40\n1440\n27C0\n3440\n6C40\nA7C0\n2440\n2440\n2FE0\nENDCHAR\nSTARTCHAR U_FA51\nENCODING 64081\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n47C0\n2440\nFC40\n0C40\n17C0\n3280\n6A80\nAA80\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_FA52\nENCODING 64082\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n47C0\n2440\nF5C0\n1540\n2FE0\n2820\n7BA0\nAAA0\n2BA0\n2820\n2860\nENDCHAR\nSTARTCHAR U_FA53\nENCODING 64083\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4100\n21E0\nF100\n17C0\n2440\n77C0\nAC40\n27C0\n2440\n27C0\n2C60\nENDCHAR\nSTARTCHAR U_FA54\nENCODING 64084\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n23C0\nFA40\n2240\nFA60\n8C00\n73E0\n2220\nF940\n2080\n7140\nAE20\nENDCHAR\nSTARTCHAR U_FA55\nENCODING 64085\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\n7FE0\n4920\n9080\n2540\n0480\n7FE0\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_FA56\nENCODING 64086\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n3DE0\n5280\nFDE0\n4520\n7D20\n4520\n7D20\n4920\n5560\n6500\nENDCHAR\nSTARTCHAR U_FA57\nENCODING 64087\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n2FE0\n5100\nF7E0\n26A0\n5520\nEFE0\n0180\n5340\nAD20\nA920\nENDCHAR\nSTARTCHAR U_FA58\nENCODING 64088\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2FE0\n2000\n5440\nFAA0\n2EE0\n5000\nEFE0\n0420\n57E0\nAC20\nAFE0\nENDCHAR\nSTARTCHAR U_FA59\nENCODING 64089\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n2100\n7FE0\nD540\n7E80\n5540\n7A20\n1F00\n0880\n7F40\n2480\nCC60\nENDCHAR\nSTARTCHAR U_FA5A\nENCODING 64090\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n7FE0\n4920\n7FE0\n0440\n3F80\n0500\nFFE0\n3040\nDFC0\n1040\n1FC0\nENDCHAR\nSTARTCHAR U_FA5B\nENCODING 64091\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0420\n7F40\n0480\nFFE0\n0400\n1FC0\n3040\nDFC0\n1040\n1FC0\n1040\nENDCHAR\nSTARTCHAR U_FA5C\nENCODING 64092\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0800\n3F80\n2080\n3E80\n2F80\n2080\n3F80\n0480\nFFE0\n0A00\nF1E0\nENDCHAR\nSTARTCHAR U_FA5D\nENCODING 64093\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 4 1 3\nBITMAP\n1200\nFFC0\n1200\n1200\nENDCHAR\nSTARTCHAR U_FA5E\nENCODING 64094\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 4 1 3\nBITMAP\n1200\nFFC0\n1200\n1200\nENDCHAR\nSTARTCHAR U_FA5F\nENCODING 64095\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n1100\nFFE0\n1540\n7F80\n0500\nFFE0\n0880\n1F80\n7080\n1F80\n1080\nENDCHAR\nSTARTCHAR U_FA60\nENCODING 64096\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n47C0\n2440\nFFC0\n1440\n2FC0\n7200\nAFE0\n2CA0\n2560\n27A0\n2040\nENDCHAR\nSTARTCHAR U_FA61\nENCODING 64097\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n47C0\n2440\nFFC0\n1440\n27C0\n7440\nAFC0\n2280\n22A0\n24A0\n2860\nENDCHAR\nSTARTCHAR U_FA62\nENCODING 64098\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n47C0\nF440\n07C0\nF440\n07C0\nF200\n07E0\nFCA0\n9560\nF7A0\n90C0\nENDCHAR\nSTARTCHAR U_FA63\nENCODING 64099\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4280\nFFE0\n0280\nF100\n07C0\nF540\n0FE0\nF100\n97C0\nF100\n9FE0\nENDCHAR\nSTARTCHAR U_FA64\nENCODING 64100\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0400\nFFE0\n8020\n3F80\n2500\nFF80\n2080\n3F80\n2080\n3F80\nE0E0\nENDCHAR\nSTARTCHAR U_FA65\nENCODING 64101\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\nF440\n9280\nFFE0\n9AA0\n9FE0\nF000\n97C0\nF440\n27C0\n5440\n8FC0\nENDCHAR\nSTARTCHAR U_FA66\nENCODING 64102\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4000\n2000\n2000\n0000\nE000\n2000\n2000\n2000\n2000\n5020\n8FC0\nENDCHAR\nSTARTCHAR U_FA67\nENCODING 64103\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n4200\n2780\n2900\n1FC0\nEA40\n2FC0\n2340\n2520\n28E0\n5000\n8FE0\nENDCHAR\nSTARTCHAR U_FA68\nENCODING 64104\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n5180\nFE80\n53E0\n2680\nFBC0\nAA80\nFA80\n23C0\nFE80\n5280\n8BE0\nENDCHAR\nSTARTCHAR U_FA69\nENCODING 64105\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n44E0\nAEA0\n4AC0\nEEA0\n2AC0\nFFE0\n0900\nFFE0\n1480\n1280\n1F80\nENDCHAR\nSTARTCHAR U_FA6A\nENCODING 64106\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n13E0\n5080\n5FE0\n5220\nFFE0\n1220\n57E0\n5A20\n93E0\n2140\nC620\nENDCHAR\nSTARTCHAR U_FE30\nENCODING 65072\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 2 7 5 1\nBITMAP\nC0\nC0\n00\n00\n00\nC0\nC0\nENDCHAR\nSTARTCHAR U_FE31\nENCODING 65073\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 1 10 6 0\nBITMAP\n80\n80\n80\n80\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_FE33\nENCODING 65075\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 11 5 -1\nBITMAP\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\n8000\nENDCHAR\nSTARTCHAR U_FE34\nENCODING 65076\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 2 12 10 -1\nBITMAP\n80\n40\n40\n80\n80\n40\n40\n80\n80\n40\n40\n80\nENDCHAR\nSTARTCHAR U_FE35\nENCODING 65077\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 3 0 1\nBITMAP\n1F00\n60C0\n8020\nENDCHAR\nSTARTCHAR U_FE36\nENCODING 65078\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 3 0 6\nBITMAP\n8020\n60C0\n1F00\nENDCHAR\nSTARTCHAR U_FE37\nENCODING 65079\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 4 0 1\nBITMAP\n0400\n0A00\n71C0\n8020\nENDCHAR\nSTARTCHAR U_FE38\nENCODING 65080\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 4 0 5\nBITMAP\n8020\n71C0\n0A00\n0400\nENDCHAR\nSTARTCHAR U_FE39\nENCODING 65081\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 3 0 1\nBITMAP\n3F80\n4040\n8020\nENDCHAR\nSTARTCHAR U_FE3A\nENCODING 65082\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 3 0 6\nBITMAP\n8020\n4040\n3F80\nENDCHAR\nSTARTCHAR U_FE3B\nENCODING 65083\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 4 0 0\nBITMAP\nFFE0\nE0E0\nC060\n8020\nENDCHAR\nSTARTCHAR U_FE3C\nENCODING 65084\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 4 0 6\nBITMAP\n8020\nC060\nE0E0\nFFE0\nENDCHAR\nSTARTCHAR U_FE3D\nENCODING 65085\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 7 0 -1\nBITMAP\n0400\n0A00\n3180\nC460\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_FE3E\nENCODING 65086\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 7 0 3\nBITMAP\nC060\n3180\n0A00\nC460\n3180\n0A00\n0400\nENDCHAR\nSTARTCHAR U_FE3F\nENCODING 65087\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 3 0 1\nBITMAP\n0E00\n3180\nC060\nENDCHAR\nSTARTCHAR U_FE40\nENCODING 65088\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 3 0 6\nBITMAP\nC060\n3180\n0E00\nENDCHAR\nSTARTCHAR U_FE41\nENCODING 65089\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 5 2 -1\nBITMAP\nFF80\n0080\n0080\n0080\n0080\nENDCHAR\nSTARTCHAR U_FE42\nENCODING 65090\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 5 1 5\nBITMAP\n8000\n8000\n8000\n8000\nFF80\nENDCHAR\nSTARTCHAR U_FE43\nENCODING 65091\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 6 2 -1\nBITMAP\nFF80\n8080\nFE80\n0280\n0280\n0380\nENDCHAR\nSTARTCHAR U_FE44\nENCODING 65092\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 6 1 4\nBITMAP\nE000\nA000\nA000\nBF80\n8080\nFF80\nENDCHAR\nSTARTCHAR U_FE49\nENCODING 65097\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 1 1 9\nBITMAP\nCCC0\nENDCHAR\nSTARTCHAR U_FE4A\nENCODING 65098\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 1 0 9\nBITMAP\nE4E0\nENDCHAR\nSTARTCHAR U_FE4B\nENCODING 65099\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 3 0 7\nBITMAP\n3180\n4A40\n8420\nENDCHAR\nSTARTCHAR U_FE4C\nENCODING 65100\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 3 0 7\nBITMAP\n3180\n4A40\n8420\nENDCHAR\nSTARTCHAR U_FE4D\nENCODING 65101\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 1 1 -1\nBITMAP\nCCC0\nENDCHAR\nSTARTCHAR U_FE4E\nENCODING 65102\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 1 0 -1\nBITMAP\nE4E0\nENDCHAR\nSTARTCHAR U_FE4F\nENCODING 65103\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 2 0 8\nBITMAP\n6640\n99A0\nENDCHAR\nSTARTCHAR U_FE50\nENCODING 65104\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 2 4 8 0\nBITMAP\nC0\nC0\n40\n80\nENDCHAR\nSTARTCHAR U_FE51\nENCODING 65105\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 3 7 0\nBITMAP\n80\n60\n20\nENDCHAR\nSTARTCHAR U_FE52\nENCODING 65106\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 2 2 8 1\nBITMAP\nC0\nC0\nENDCHAR\nSTARTCHAR U_FE54\nENCODING 65108\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 2 8 5 0\nBITMAP\nC0\nC0\n00\n00\nC0\nC0\n40\n80\nENDCHAR\nSTARTCHAR U_FE55\nENCODING 65109\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 2 7 5 1\nBITMAP\nC0\nC0\n00\n00\n00\nC0\nC0\nENDCHAR\nSTARTCHAR U_FE56\nENCODING 65110\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 10 4 0\nBITMAP\n70\n88\n88\n08\n10\n10\n20\n00\n20\n20\nENDCHAR\nSTARTCHAR U_FE57\nENCODING 65111\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 1 10 6 0\nBITMAP\n80\n80\n80\n80\n80\n80\n80\n00\n80\n80\nENDCHAR\nSTARTCHAR U_FE59\nENCODING 65113\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 8 7 1\nBITMAP\n20\n40\n80\n80\n80\n80\n40\n20\nENDCHAR\nSTARTCHAR U_FE5A\nENCODING 65114\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 8 3 1\nBITMAP\n80\n40\n20\n20\n20\n20\n40\n80\nENDCHAR\nSTARTCHAR U_FE5B\nENCODING 65115\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 9 7 0\nBITMAP\n20\n40\n40\n40\n80\n40\n40\n40\n20\nENDCHAR\nSTARTCHAR U_FE5C\nENCODING 65116\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 9 3 0\nBITMAP\n80\n40\n40\n40\n20\n40\n40\n40\n80\nENDCHAR\nSTARTCHAR U_FE5D\nENCODING 65117\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 10 8 0\nBITMAP\n20\n40\n80\n80\n80\n80\n80\n80\n40\n20\nENDCHAR\nSTARTCHAR U_FE5E\nENCODING 65118\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 10 3 0\nBITMAP\n80\n40\n20\n20\n20\n20\n20\n20\n40\n80\nENDCHAR\nSTARTCHAR U_FE5F\nENCODING 65119\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 11 3 -1\nBITMAP\n50\n50\n50\nF8\n50\n50\n50\nF8\n50\n50\n50\nENDCHAR\nSTARTCHAR U_FE60\nENCODING 65120\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 10 3 0\nBITMAP\n20\n50\n50\n20\n5C\nA8\nA8\n90\n48\n34\nENDCHAR\nSTARTCHAR U_FE61\nENCODING 65121\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 5 3 2\nBITMAP\nA8\n70\n20\n70\nA8\nENDCHAR\nSTARTCHAR U_FE62\nENCODING 65122\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 5 3 2\nBITMAP\n20\n20\nF8\n20\n20\nENDCHAR\nSTARTCHAR U_FE63\nENCODING 65123\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 4 1 4 4\nBITMAP\nF0\nENDCHAR\nSTARTCHAR U_FE64\nENCODING 65124\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 5 4 2\nBITMAP\n18\n60\n80\n60\n18\nENDCHAR\nSTARTCHAR U_FE65\nENCODING 65125\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 5 4 2\nBITMAP\nC0\n30\n08\n30\nC0\nENDCHAR\nSTARTCHAR U_FE66\nENCODING 65126\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 4 4 3\nBITMAP\nF8\n00\n00\nF8\nENDCHAR\nSTARTCHAR U_FE68\nENCODING 65128\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 12 3 -1\nBITMAP\n80\n40\n40\n20\n20\n10\n10\n08\n08\n04\n04\n02\nENDCHAR\nSTARTCHAR U_FE69\nENCODING 65129\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 11 4 0\nBITMAP\n20\n70\nA8\nA8\nA0\n70\n28\nA8\nA8\n70\n20\nENDCHAR\nSTARTCHAR U_FE6A\nENCODING 65130\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 9 3 1\nBITMAP\n42\nA4\nA8\nA8\n54\n2A\n2A\n4A\n44\nENDCHAR\nSTARTCHAR U_FE6B\nENCODING 65131\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 0\nBITMAP\n3C\n42\n42\n95\nAD\nA5\nAA\n54\n42\n3C\nENDCHAR\nSTARTCHAR U_FF01\nENCODING 65281\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 3 11 3 -1\nBITMAP\n40\nE0\nE0\nE0\nE0\n40\n40\n40\n00\n40\n40\nENDCHAR\nSTARTCHAR U_FF02\nENCODING 65282\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 4 1 7\nBITMAP\nD8\nD8\n48\n90\nENDCHAR\nSTARTCHAR U_FF03\nENCODING 65283\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 12 2 -1\nBITMAP\n00\n12\n12\n12\n7F\n24\n24\n24\nFF\n48\n48\n48\nENDCHAR\nSTARTCHAR U_FF04\nENCODING 65284\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 11 3 -1\nBITMAP\n7C\nD2\n92\n90\n50\n3E\n11\nD1\n93\n7C\n10\nENDCHAR\nSTARTCHAR U_FF05\nENCODING 65285\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 12 1 -1\nBITMAP\n7000\n8820\n8840\n8880\n7100\n0200\n0400\n09C0\n1220\n2220\n4220\n81C0\nENDCHAR\nSTARTCHAR U_FF06\nENCODING 65286\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n3800\n4400\n4400\n4400\n2800\n3380\n5100\n8A00\n8440\n8A40\n7180\nENDCHAR\nSTARTCHAR U_FF07\nENCODING 65287\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 2 4 2 7\nBITMAP\nC0\nC0\n40\n80\nENDCHAR\nSTARTCHAR U_FF08\nENCODING 65288\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 3 12 7 -1\nBITMAP\n20\n40\n40\n80\n80\n80\n80\n80\n80\n40\n40\n20\nENDCHAR\nSTARTCHAR U_FF09\nENCODING 65289\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 3 12 3 -1\nBITMAP\n80\n40\n40\n20\n20\n20\n20\n20\n20\n40\n40\n80\nENDCHAR\nSTARTCHAR U_FF0A\nENCODING 65290\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 11 7 0 1\nBITMAP\n1000\n1000\nD600\n3800\n2800\n4400\n4400\nENDCHAR\nSTARTCHAR U_FF0B\nENCODING 65291\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 2 0\nBITMAP\n0800\n0800\n0800\n0800\nFF80\n0800\n0800\n0800\n0800\nENDCHAR\nSTARTCHAR U_FF0C\nENCODING 65292\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 2 4 3 0\nBITMAP\nC0\nC0\n40\n80\nENDCHAR\nSTARTCHAR U_FF0D\nENCODING 65293\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 1 2 4\nBITMAP\nFF80\nENDCHAR\nSTARTCHAR U_FF0E\nENCODING 65294\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 2 2 3 0\nBITMAP\nC0\nC0\nENDCHAR\nSTARTCHAR U_FF0F\nENCODING 65295\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 11 0 -1\nBITMAP\n0020\n0040\n0080\n0100\n0200\n0400\n0800\n1000\n2000\n4000\n8000\nENDCHAR\nSTARTCHAR U_FF10\nENCODING 65296\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\n38\n44\n82\n82\n82\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_FF11\nENCODING 65297\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 4 10 3 -1\nBITMAP\n20\n20\nE0\n20\n20\n20\n20\n20\n20\n70\nENDCHAR\nSTARTCHAR U_FF12\nENCODING 65298\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 10 3 -1\nBITMAP\n78\n84\n84\n04\n08\n10\n20\n40\n80\nFC\nENDCHAR\nSTARTCHAR U_FF13\nENCODING 65299\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 10 3 -1\nBITMAP\n70\n88\n04\n08\n30\n08\n04\n04\n88\n70\nENDCHAR\nSTARTCHAR U_FF14\nENCODING 65300\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\n08\n18\n28\n28\n48\n48\n88\nFE\n08\n1C\nENDCHAR\nSTARTCHAR U_FF15\nENCODING 65301\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 10 3 -1\nBITMAP\nFC\n80\n80\nB0\nC8\n84\n04\n04\n88\n70\nENDCHAR\nSTARTCHAR U_FF16\nENCODING 65302\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\n38\n44\n80\n80\nB8\nC4\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_FF17\nENCODING 65303\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 10 3 -1\nBITMAP\nFC\n84\n84\n08\n08\n10\n10\n20\n20\n20\nENDCHAR\nSTARTCHAR U_FF18\nENCODING 65304\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\n38\n44\n82\n44\n38\n44\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_FF19\nENCODING 65305\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\n38\n44\n82\n82\n46\n3A\n02\n82\n44\n38\nENDCHAR\nSTARTCHAR U_FF1A\nENCODING 65306\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 2 7 6 1\nBITMAP\nC0\nC0\n00\n00\n00\nC0\nC0\nENDCHAR\nSTARTCHAR U_FF1B\nENCODING 65307\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 2 8 6 0\nBITMAP\nC0\nC0\n00\n00\nC0\nC0\n40\n80\nENDCHAR\nSTARTCHAR U_FF1C\nENCODING 65308\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 1 0\nBITMAP\n0180\n0600\n1800\n6000\n8000\n6000\n1800\n0600\n0180\nENDCHAR\nSTARTCHAR U_FF1D\nENCODING 65309\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 4 1 2\nBITMAP\nFF80\n0000\n0000\nFF80\nENDCHAR\nSTARTCHAR U_FF1E\nENCODING 65310\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 9 1 0\nBITMAP\nC000\n3000\n0C00\n0300\n0080\n0300\n0C00\n3000\nC000\nENDCHAR\nSTARTCHAR U_FF1F\nENCODING 65311\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 6 11 4 -1\nBITMAP\n78\nCC\nCC\n0C\n18\n30\n30\n30\n00\n30\n30\nENDCHAR\nSTARTCHAR U_FF20\nENCODING 65312\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 10 2 0\nBITMAP\n1E00\n2100\n4C80\n9240\nA240\nA240\nA680\n5B00\n2080\n1F00\nENDCHAR\nSTARTCHAR U_FF21\nENCODING 65313\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 1 -1\nBITMAP\n0800\n0800\n1400\n1400\n2200\n2200\n3E00\n4100\n4100\nE380\nENDCHAR\nSTARTCHAR U_FF22\nENCODING 65314\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\nF8\n44\n42\n44\n78\n44\n42\n42\n44\nF8\nENDCHAR\nSTARTCHAR U_FF23\nENCODING 65315\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 -1\nBITMAP\n1D\n23\n41\n80\n80\n80\n80\n41\n22\n1C\nENDCHAR\nSTARTCHAR U_FF24\nENCODING 65316\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 8 10 2 -1\nBITMAP\nFC\n42\n41\n41\n41\n41\n41\n41\n42\nFC\nENDCHAR\nSTARTCHAR U_FF25\nENCODING 65317\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 -1\nBITMAP\nFE\n41\n40\n44\n7C\n44\n40\n41\n41\nFE\nENDCHAR\nSTARTCHAR U_FF26\nENCODING 65318\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 -1\nBITMAP\nFE\n41\n40\n44\n7C\n44\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_FF27\nENCODING 65319\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 9 10 1 -1\nBITMAP\n3D00\n4300\n8100\n8000\n8000\n8F80\n8100\n8100\n4300\n3D00\nENDCHAR\nSTARTCHAR U_FF28\nENCODING 65320\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 1 -1\nBITMAP\nE380\n4100\n4100\n4100\n7F00\n4100\n4100\n4100\n4100\nE380\nENDCHAR\nSTARTCHAR U_FF29\nENCODING 65321\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 10 4 -1\nBITMAP\nE0\n40\n40\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_FF2A\nENCODING 65322\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 11 2 -1\nBITMAP\n1C\n08\n08\n08\n08\n08\n08\n08\n08\n90\n60\nENDCHAR\nSTARTCHAR U_FF2B\nENCODING 65323\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 -1\nBITMAP\nEE\n44\n48\n50\n60\n50\n48\n44\n42\nE7\nENDCHAR\nSTARTCHAR U_FF2C\nENCODING 65324\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 -1\nBITMAP\nE0\n40\n40\n40\n40\n40\n40\n41\n42\nFE\nENDCHAR\nSTARTCHAR U_FF2D\nENCODING 65325\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 10 0 -1\nBITMAP\nC060\n4040\n60C0\n60C0\n5140\n5140\n4A40\n4A40\n4440\nE4E0\nENDCHAR\nSTARTCHAR U_FF2E\nENCODING 65326\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 10 2 -1\nBITMAP\nC7\n62\n52\n52\n4A\n4A\n46\n46\n42\nE2\nENDCHAR\nSTARTCHAR U_FF2F\nENCODING 65327\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 1 -1\nBITMAP\n1C00\n2200\n4100\n8080\n8080\n8080\n8080\n4100\n2200\n1C00\nENDCHAR\nSTARTCHAR U_FF30\nENCODING 65328\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\nF8\n44\n42\n42\n44\n78\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_FF31\nENCODING 65329\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 11 1 -1\nBITMAP\n1C00\n2200\n4100\n8080\n8080\n8080\n9880\n4500\n2200\n1D40\n00C0\nENDCHAR\nSTARTCHAR U_FF32\nENCODING 65330\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 11 1 -1\nBITMAP\nFC00\n4200\n4100\n4200\n7C00\n4400\n4200\n4200\n4200\nE280\n0100\nENDCHAR\nSTARTCHAR U_FF33\nENCODING 65331\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\n7A\n86\n82\n40\n30\n08\n04\n82\nC2\nBC\nENDCHAR\nSTARTCHAR U_FF34\nENCODING 65332\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 1 -1\nBITMAP\nFF80\n8880\n8880\n0800\n0800\n0800\n0800\n0800\n0800\n1C00\nENDCHAR\nSTARTCHAR U_FF35\nENCODING 65333\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 1 -1\nBITMAP\nE380\n4100\n4100\n4100\n4100\n4100\n4100\n4100\n2200\n1C00\nENDCHAR\nSTARTCHAR U_FF36\nENCODING 65334\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 1 -1\nBITMAP\nE380\n4100\n4100\n2200\n2200\n2200\n1400\n1400\n0800\n0800\nENDCHAR\nSTARTCHAR U_FF37\nENCODING 65335\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 10 0 -1\nBITMAP\nEEE0\n4440\n4440\n4440\n2A80\n2A80\n2A80\n1100\n1100\n1100\nENDCHAR\nSTARTCHAR U_FF38\nENCODING 65336\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 1 -1\nBITMAP\nE380\n4100\n2200\n1400\n0800\n0800\n1400\n2200\n4100\nE380\nENDCHAR\nSTARTCHAR U_FF39\nENCODING 65337\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 1 -1\nBITMAP\nE380\n4100\n2200\n1400\n0800\n0800\n0800\n0800\n0800\n1C00\nENDCHAR\nSTARTCHAR U_FF3A\nENCODING 65338\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 1 -1\nBITMAP\n3F80\n2100\n4200\n0400\n0800\n0800\n1000\n2080\n4080\nFF80\nENDCHAR\nSTARTCHAR U_FF3B\nENCODING 65339\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 4 12 6 -1\nBITMAP\nF0\n80\n80\n80\n80\n80\n80\n80\n80\n80\n80\nF0\nENDCHAR\nSTARTCHAR U_FF3C\nENCODING 65340\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 12 12 0 -1\nBITMAP\n8000\n4000\n2000\n1000\n0800\n0400\n0200\n0100\n0080\n0040\n0020\n0010\nENDCHAR\nSTARTCHAR U_FF3D\nENCODING 65341\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 4 12 2 -1\nBITMAP\nF0\n10\n10\n10\n10\n10\n10\n10\n10\n10\n10\nF0\nENDCHAR\nSTARTCHAR U_FF3E\nENCODING 65342\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 4 0 0\nBITMAP\n0400\n0A00\n3180\nC060\nENDCHAR\nSTARTCHAR U_FF3F\nENCODING 65343\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 12 1 0 -1\nBITMAP\nFFF0\nENDCHAR\nSTARTCHAR U_FF40\nENCODING 65344\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 2 4 8 7\nBITMAP\n40\n80\nC0\nC0\nENDCHAR\nSTARTCHAR U_FF41\nENCODING 65345\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 7 3 0\nBITMAP\n70\n88\n38\n48\n88\n9A\n64\nENDCHAR\nSTARTCHAR U_FF42\nENCODING 65346\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\nC0\n40\n40\n58\n64\n42\n42\n42\n64\n58\nENDCHAR\nSTARTCHAR U_FF43\nENCODING 65347\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 7 2 -1\nBITMAP\n38\n44\n80\n80\n80\n44\n38\nENDCHAR\nSTARTCHAR U_FF44\nENCODING 65348\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\n0C\n04\n04\n34\n4C\n84\n84\n84\n4C\n36\nENDCHAR\nSTARTCHAR U_FF45\nENCODING 65349\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 7 2 -1\nBITMAP\n30\n48\n84\nFC\n80\n44\n38\nENDCHAR\nSTARTCHAR U_FF46\nENCODING 65350\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 10 2 -1\nBITMAP\n18\n24\n20\nF8\n20\n20\n20\n20\n20\n70\nENDCHAR\nSTARTCHAR U_FF47\nENCODING 65351\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 2 -1\nBITMAP\n3A\n44\n44\n38\n20\n7C\n82\n7C\nENDCHAR\nSTARTCHAR U_FF48\nENCODING 65352\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\nC0\n40\n40\n58\n64\n44\n44\n44\n44\nEE\nENDCHAR\nSTARTCHAR U_FF49\nENCODING 65353\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 10 4 -1\nBITMAP\nC0\nC0\n00\nC0\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_FF4A\nENCODING 65354\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 11 2 -1\nBITMAP\n18\n08\n00\n18\n08\n08\n08\n08\n08\n88\n70\nENDCHAR\nSTARTCHAR U_FF4B\nENCODING 65355\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 10 2 -1\nBITMAP\nC0\n40\n40\n5C\n48\n50\n70\n48\n44\nEE\nENDCHAR\nSTARTCHAR U_FF4C\nENCODING 65356\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 10 4 -1\nBITMAP\nC0\n40\n40\n40\n40\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_FF4D\nENCODING 65357\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 7 1 -1\nBITMAP\nB300\n4C80\n4880\n4880\n4880\n4880\nDDC0\nENDCHAR\nSTARTCHAR U_FF4E\nENCODING 65358\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 7 2 -1\nBITMAP\nD8\n64\n44\n44\n44\n44\nEE\nENDCHAR\nSTARTCHAR U_FF4F\nENCODING 65359\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 7 2 -1\nBITMAP\n38\n44\n82\n82\n82\n44\n38\nENDCHAR\nSTARTCHAR U_FF50\nENCODING 65360\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 8 2 -1\nBITMAP\nF8\n44\n44\n44\n44\n78\n40\nE0\nENDCHAR\nSTARTCHAR U_FF51\nENCODING 65361\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 8 2 -1\nBITMAP\n36\n4C\n84\n84\n4C\n34\n04\n0E\nENDCHAR\nSTARTCHAR U_FF52\nENCODING 65362\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 7 3 -1\nBITMAP\nD8\n64\n40\n40\n40\n40\nE0\nENDCHAR\nSTARTCHAR U_FF53\nENCODING 65363\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 5 7 3 -1\nBITMAP\n70\n88\n80\n70\n08\n88\n70\nENDCHAR\nSTARTCHAR U_FF54\nENCODING 65364\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 6 10 2 -1\nBITMAP\n20\n20\n20\nF8\n20\n20\n20\n20\n24\n18\nENDCHAR\nSTARTCHAR U_FF55\nENCODING 65365\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 7 2 -1\nBITMAP\nEE\n44\n44\n44\n44\n44\n3A\nENDCHAR\nSTARTCHAR U_FF56\nENCODING 65366\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 8 7 1 -1\nBITMAP\nE7\n42\n22\n24\n14\n18\n08\nENDCHAR\nSTARTCHAR U_FF57\nENCODING 65367\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 11 7 0 -1\nBITMAP\nEEE0\n4440\n4440\n2A80\n2A80\n1100\n1100\nENDCHAR\nSTARTCHAR U_FF58\nENCODING 65368\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 7 2 -1\nBITMAP\nEE\n44\n28\n10\n28\n44\nEE\nENDCHAR\nSTARTCHAR U_FF59\nENCODING 65369\nSWIDTH 1000 0\nDWIDTH 12 0\nBBX 7 8 2 -1\nBITMAP\nEE\n44\n28\n28\n10\n10\n10\n60\nENDCHAR\nSTARTCHAR U_FF5A\nENCODING 65370\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 7 2 -1\nBITMAP\n7C\n88\n10\n10\n22\n44\nFC\nENDCHAR\nSTARTCHAR U_FF5B\nENCODING 65371\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 12 7 -1\nBITMAP\n20\n40\n40\n40\n40\n80\n40\n40\n40\n40\n40\n20\nENDCHAR\nSTARTCHAR U_FF5C\nENCODING 65372\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 1 11 6 -1\nBITMAP\n80\n80\n80\n80\n80\n80\n80\n80\n80\n80\n80\nENDCHAR\nSTARTCHAR U_FF5D\nENCODING 65373\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 3 12 2 -1\nBITMAP\n80\n40\n40\n40\n40\n20\n40\n40\n40\n40\n40\n80\nENDCHAR\nSTARTCHAR U_FF5E\nENCODING 65374\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 12 3 0 3\nBITMAP\n1C00\n6310\n80E0\nENDCHAR\nSTARTCHAR U_FFE0\nENCODING 65504\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 7 9 2 0\nBITMAP\n04\n3C\n4A\n88\n90\n90\nA2\n64\n58\nENDCHAR\nSTARTCHAR U_FFE1\nENCODING 65505\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 10 10 1 0\nBITMAP\n0600\n0900\n0800\n0800\n0800\nFE00\n0800\n7040\n9C80\n6300\nENDCHAR\nSTARTCHAR U_FFE3\nENCODING 65507\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 12 1 0 10\nBITMAP\nFFF0\nENDCHAR\nSTARTCHAR U_FFE5\nENCODING 65509\nSWIDTH 0 0\nDWIDTH 12 0\nBBX 9 10 1 0\nBITMAP\nE380\n4100\n2200\n7F00\n1400\n7F00\n0800\n0800\n0800\n1C00\nENDCHAR\nENDFONT\n"
  },
  {
    "path": "scripts/IronOS-mkdocs.yml",
    "content": "# Project info\nsite_name: IronOS\nsite_url: https://ralim.github.io/IronOS/\nsite_description: \"IronOS Open Source Soldering Iron firmware for Miniware and Pinecil\"\n\n# Repo config\nrepo_url: https://github.com/ralim/IronOS/\n\n# Dir & location config\ndocs_dir: ../Documentation\nedit_uri: edit/dev/Documentation/\n\n# Theme and config\ntheme:\n  name: readthedocs\n  highlightsjs: true\n  hljs_languages:\n    - yaml\n\n# Navigation structure\nnav:\n  - Home: index.md\n  - Getting Started: GettingStarted.md\n  - Flashing the firmware:\n      - MHP30: Flashing/MHP30.md\n      - Pinecil V1: Flashing/Pinecil V1.md\n      - Pinecil V2: Flashing/Pinecil V2.md\n      - TS80(P): Flashing/TS80(P).md\n      - TS100: Flashing/TS100.md\n  - Operation:\n      - Main Menu: Menu.md\n      - Settings: Settings.md\n      - Debug Menu: DebugMenu.md\n      - Power: Power.md\n      - Temperature: Temperature.md\n  - Startup Logo: Logo.md\n  - Hardware:\n      - Bluetooth (Pinecil V2): Bluetooth.md\n      - Debugging USB-PD: DebuggingPD.md\n      - Hall Sensor (Pinecil): HallSensor.md\n      - Hardware Notes: Hardware.md\n      - Known Hardware Issues: HardwareIssues.md\n      - New Hardware Requirements: PortingToNewDevice.md\n      - Power sources: PowerSources.md\n      - Troubleshooting: Troubleshooting.md\n      - WS2812B RGB Modding (Pinecil V2): WS2812BModding.md\n  - Translations: Translation.md\n  - Development: Development.md\n  - Changelog: History.md\n\n# Plugins\nplugins:\n  - search\n  - autolinks\n  - awesome-pages\n  - git-revision-date\n\n# Markdown Extensions\nmarkdown_extensions:\n  - attr_list\n  - pymdownx.emoji:\n      emoji_index: !!python/name:pymdownx.emoji.twemoji\n      emoji_generator: !!python/name:pymdownx.emoji.to_svg\n"
  },
  {
    "path": "scripts/IronOS.Dockerfile",
    "content": "# Default Reference Distro for development env & deploy:\r\n# * Alpine Linux, version 3.21 *\r\n\r\nFROM alpine:3.22\r\nLABEL maintainer=\"Ben V. Brown <ralim@ralimtek.com>\"\r\n\r\n# Default current dir when container starts\r\nWORKDIR /build/ironos\r\n\r\n# Installing the two compilers (ARM & RISCV), python3 & pip, clang tools, etc.:\r\n## - compilers: gcc-*, newlib-*\r\n## - python3: py*, black (required to check Python code formatting)\r\n## - misc: findutils, make, git, diffutils, zip\r\n## - musl-dev (required for the multi lang firmwares)\r\n## - clang (required for clang-format to check C++ code formatting)\r\n## - shellcheck (to check sh scripts)\r\n\r\nARG APK_COMPS=\"gcc-riscv-none-elf g++-riscv-none-elf gcc-arm-none-eabi g++-arm-none-eabi newlib-riscv-none-elf newlib-arm-none-eabi\"\r\nARG APK_PYTHON=\"python3 py3-pip black\"\r\nARG APK_MISC=\"findutils make git diffutils zip\"\r\nARG APK_DEV=\"musl-dev clang bash clang-extra-tools shellcheck\"\r\n\r\n# PIP packages to check & test Python code, and generate docs\r\nARG PIP_PKGS='bdflib flake8 pymdown-extensions mkdocs mkdocs-autolinks-plugin mkdocs-awesome-pages-plugin mkdocs-git-revision-date-plugin'\r\n\r\n# Install system packages using alpine package manager\r\nRUN apk add --no-cache ${APK_COMPS} ${APK_PYTHON} ${APK_MISC} ${APK_DEV}\r\n\r\n# Install Python3 packages as modules using pip, yes we dont care if packages break\r\nRUN python3 -m pip install --break-system-packages ${PIP_PKGS}\r\n\r\n# Git trust to avoid related warning\r\nRUN git config --global --add safe.directory /build/ironos\r\n\r\n# Copy the whole source tree working dir into container\r\nCOPY  .  /build/ironos\r\n"
  },
  {
    "path": "scripts/LICENSE_RELEASE.md",
    "content": "This document outlines the license of IronOS and its dependencies.\n\n- IronOS: GPL-3.0-only\n- FreeRTOS Kernel: MIT\n- FUSB302 driver: Apache-2.0\n- CMSIS + STM32F1xx HAL driver: BSD-3-Clause\n- NMSIS: Apache-2.0\n- GD32VF103 board files: BSD-3-Clause\n- WenQuanYi Bitmap Song font: GPL-2.0-or-later\n- BriefLZ compression library: Zlib\n\nThe source code of IronOS can be obtained on the [IronOS GitHub repo][gh].\n\n[gh]: https://github.com/Ralim/IronOS\n\n\nIronOS\n---\n\nCopyright (c) 2016-2020 Ben V. Brown and contributors\n\nFor the license text, see `LICENSE` file.\n\n\nFreeRTOS Kernel\n---\n\n```\nCopyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in al\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITN\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS O\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHE\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n```\n\n\nFUSB302 driver\n---\n\n```\nPD Buddy Firmware Library - USB Power Delivery for everyone\nCopyright 2017-2018 Clayton G. Hobbs\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n\n\nCMSIS + STM32F1xx HAL driver\n---\n\n* Only applies to TS100, TS80 and TS80P releases.\n\n```\nCOPYRIGHT(c) 2017 STMicroelectronics\n\nRedistribution and use in source and binary forms, with or without dification,\nare permitted provided that the following conditions are met:\n  1. Redistributions of source code must retain the above copyright notice,\n     this list of conditions and the following disclaimer.\n  2. Redistributions in binary form must reproduce the above copyright notice,\n     this list of conditions and the following disclaimer in the documentation\n     and/or other materials provided with the distribution.\n  3. Neither the name of STMicroelectronics nor the names of its contributors\n     may be used to endorse or promote products derived from this software\n     without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n```\n\n\nNMSIS\n---\n\n* Only applies to Pinecil releases.\n\n```\nCopyright (c) 2019 Nuclei Limited. All rights reserved.\n\nSPDX-License-Identifier: Apache-2.0\n\nLicensed under the Apache License, Version 2.0 (the License); you may\nnot use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nwww.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an AS IS BASIS, WITHOUT\nWARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n\nGD32VF103 board files\n---\n\n* Only applies to Pinecil releases.\n\n```\nCopyright (c) 2019, GigaDevice Semiconductor Inc.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n    list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright notice,\n    this list of conditions and the following disclaimer in the documentation\n    and/or other materials provided with the distribution.\n3. Neither the name of the copyright holder nor the names of its contributors\n    may be used to endorse or promote products derived from this software without\n    specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\nOF SUCH DAMAGE.\n```\n\n\nWenQuanYi Bitmap Song font\n---\n\n* Only applies to CJK (Chinese, Japanese and Korean) language releases.\n\n```\nCopyright (c) 2004-2010, The WenQuanYi Project \n              Board of Trustees and Qianqian Fang\n\nThis program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n```\n\n\nBriefLZ compression library\n---\n\n* Only applies to multi-language builds.\n\n```\nThe zlib License (Zlib)\n\nCopyright (c) 2002-2020 Joergen Ibsen\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must\n     not claim that you wrote the original software. If you use this\n     software in a product, an acknowledgment in the product\n     documentation would be appreciated but is not required.\n\n  2. Altered source versions must be plainly marked as such, and must\n     not be misrepresented as being the original software.\n\n  3. This notice may not be removed or altered from any source\n     distribution.\n```\n"
  },
  {
    "path": "scripts/deploy.sh",
    "content": "#!/usr/bin/env bash\n\n# little helper for docker deployment to:\n# - start development environment for IronOS (\"shell\" sub-command)\n# - generate full set of builds (\"build\" sub-command)\n# - probably doing some other routines (check source briefly before running undocumented commands!)\n\n#set -x\n#set -e\n\n### helper functions\n\n# brief help (some supported commands may be missing!)\nusage()\n{\n\techo -e \"\\nUsage: ${0} [CMD]\\n\"\n\techo \"CMD (docker related):\"\n\techo -e \"\\tshell - start docker container with shell inside to work on IronOS with all tools needed\"\n\techo -e \"\\tbuild - compile builds of IronOS inside docker container for supported hardware\"\n\techo -e \"\\tclean - delete created docker image for IronOS & its build cache objects\\n\"\n\techo \"CMD (helper routines):\"\n\techo -e \"\\tdocs - high level target to run docs_readme and docs_history (see below)\\n\"\n\techo -e \"\\tdocs_readme - generate & OVERWRITE(!) README.md inside Documentation/ based on nav section from mkdocs.yml if it changed\\n\"\n\techo -e \"\\tdocs_history - check if History.md has the changelog for the latest stable release\\n\"\n\techo -e \"\\tcheck_style_file SRC - run code style checks based on clang-format & custom parsers for source code file SRC\\n\"\n\techo -e \"\\tcheck_style_log - run clang-format using source/Makefile and generate gcc-compatible error log in source/check-style.log\\n\"\n\techo -e \"STORAGE NOTICE: for \\\"shell\\\" and \\\"build\\\" commands extra files will be downloaded so make sure that you have ~5GB of free space.\\n\"\n}\n\n# Documentation/README.md automagical generation routine\ndocs_readme()\n{\n\t# WARNING: ON RUN Documentaion/README.md MAY BE OVERWRITTEN WITHOUT ANY WARNINGS / CONFIRMATIONS !!!\n\t# Returns:\n\t## 0 to the environment & silence - if there are no any changes in README.md nor updates in mkdocs.yml\n\t## 1 to the environment (as error) & note message - if the update of README.md in repo is required\n\tyml=\"scripts/IronOS-mkdocs.yml\"\n\tmd_old=\"Documentation/README.md\"\n\tmd_new=\"Documentation/README\"\n\t# ^^^^ hardcoded paths relative to IronOS/ to make this func very trivial\n# file overwritten section looks out of style but hoping to make shellcheck happy\ncat << EOF > \"${md_new}\"\n\n<!-- THIS FILE IS AUTOGENERATED by \"scripts/deploy.sh docs_readme\" based on nav section in ${yml} config -->\n<!-- THIS FILE IS NOT SUPPOSED TO BE EDITED MANUALLY -->\n\n#### This is autogenerated README for brief navigation through github over official documentation for IronOS project\n#### This documentation is also available [here online](https://ralim.github.io/IronOS)\n\nEOF\n\t# it probably will become unexplainable in a few months but so far it works:\n\tsed '1,/^nav/d; /^ *$/,$d; s,- ,- [,; s,: ,](../Documentation/,; s,.md,.md),; s,:$,],; s,/Pinecil ,/Pinecil%20,; /^  - \\[.*\\]$/ s,\\[,,; s,]$,,' \"${yml}\" >> \"${md_new}\"\n\tret=0\n\tif [ -z \"$(diff -q \"${md_old}\" \"${md_new}\")\" ]; then\n\t\trm \"${md_new}\"\n\t\tret=0\n\telse\n\t\tmv \"${md_new}\" \"${md_old}\"\n\t\techo \"\"\n\t\techo \"${yml} seems to be updated...\"\n\t\techo \"... while ${md_old} is out-of-date!\"\n\t\techo \"\"\n\t\techo \"Please, update ${md_old} in your local working copy by command:\"\n\t\techo \"\"\n\t\techo \" $ ./scripts/deploy.sh docs_readme\"\n\t\techo \"\"\n\t\techo \"And then commit & push changes to update ${md_old} in the repo:\"\n\t\techo \"\"\n\t\techo \" $ git commit ${md_old} -m \\\"${md_old}: update autogenerated file\\\" && git push\"\n\t\techo \"\"\n\t\tret=1\n\tfi;\n\treturn \"${ret}\"\n}\n\n# Documentation/History.md automagical changelog routine\ndocs_history()\n{\n\tmd=\"Documentation/History.md\"\n\tver_md=\"$(sed -ne 's/^## //1p' \"${md}\" | head -1)\"\n\techo \"Latest changelog: ${ver_md}\"\n\tver_git=\"$(git tag -l | sort | grep -e \"^v\" | grep -v \"rc\" | tail -1)\"\n\techo \"Latest release tag: ${ver_git}\"\n\tret=0\n\tif [ \"${ver_md}\" != \"${ver_git}\" ]; then\n\t\tret=1\n\t\techo \"It seems there is no changelog information for ${ver_git} in ${md} yet.\"\n\t\techo \"Please, update changelog information in ${md}.\"\n\tfi;\n\treturn \"${ret}\"\n}\n\n# Check for links to release builds in README.md\ndocs_links()\n{\n\tver_git=\"$(git tag -l | sort | grep -e \"^v\" | grep -v \"rc\" | tail -1)\"\n\tmd=\"README.md\"\n\ttest -f \"${md}\" || (echo \"deploy.sh: docs_links: ERROR with the project directory structure!\" && exit 1)\n\tver_md=\"$(grep -c \"${ver_git}\" \"${md}\")\"\n\tret=0\n\tif [ \"${ver_md}\" -eq 0 ]; then\n\t\tret=1\n\t\techo \"Please, update mention & links in ${md} inside Builds section for release builds with version ${ver_git}.\"\n\tfi;\n\treturn \"${ret}\"\n}\n\n# source/Makefile:ALL_LANGUAGES & Translations/*.json automagical routine\nbuild_langs()\n{\n\tmk=\"../source/Makefile\"\n\tcd Translations/ || (echo \"deploy.sh: build_langs: ERROR with the project directory structure!\" && exit 1)\n\tlangs=\"$(echo \"$(find ./*.json | sed -ne 's,^\\./translation_,,; s,\\.json$,,; /[A-Z]/p' ; sed -ne 's/^ALL_LANGUAGES=//p;' \"${mk}\")\" | sed 's, ,\\n,g; s,\\r,,g' | sort | uniq -u)\"\n\tif [ -n \"${langs}\" ]; then\n\t\techo \"It seems there is mismatch between supported languages and enabled builds.\"\n\t\techo \"Please, check files in Translations/ and ALL_LANGUAGES variable in source/Makefile for:\"\n\t\techo \"${langs}\"\n\t\treturn 1\n\tfi;\n\tcd ..\n\t\n\techo -ne \"\\n\"\n\tgrep -nH $'\\11' Translations/translation*.json\n\tret=\"${?}\"\n\tif [ \"${ret}\" -eq 0 ]; then\n\t\techo -ne \"\\t^^^^\\t^^^^\\n\"\n\t\techo \"Please, remove any tabs as indention from json file(s) in Translations/ directory (see the exact files & lines in the list above).\"\n\t\techo \"Use spaces only to indent in the future, please.\"\n\t\techo -ne \"\\n\"\n\t\treturn 1\n\tfi;\n\t\n\tgrep -nEH -e \"^( {1}| {3}| {5}| {7}| {9}| {11})[^ ]\" Translations/translation*.json\n\tret=\"${?}\"\n\tif [ \"${ret}\" -eq 0 ]; then\n\t\techo -ne \"\\t^^^^\\t^^^^\\n\"\n\t\techo \"Please, remove any odd amount of extra spaces as indention from json file(s) in Translations/ directory (see the exact files & lines in the list above).\"\n\t\techo \"Use even amount of spaces to indent in the future, please (two actual spaces per one indent, not tab).\"\n\t\techo -ne \"\\n\"\n\t\treturn 1\n\tfi;\n\t\n\treturn 0\n}\n\n# Helper function to check code style using clang-format & grep/sed custom parsers:\n# - basic logic moved from source/Makefile : `check-style` target for better maintainance since a lot of sh script involved;\n# - output goes in gcc-like error compatible format for IDEs/editors.\ncheck_style_file()\n{\n\tret=0\n\tsrc=\"${1}\"\n\ttest ! -f \"${src}\" && echo \"ERROR!!! Provided file ${src} is not available to check/read!!!\" && exit 1\n\t# count lines using diff between beauty-fied file & original file to detect format issue\n\tvar=\"$(clang-format \"$src\" | diff \"$src\" - | wc -l)\"\n\tif [ \"${var}\" -ne 0 ]; then\n\t\t# show full log error or, if LIST=anything provided, then show only filename of interest (implemented for debug purposes mainly)\n\t\tif [ -z \"${LIST}\" ]; then\n\t\t\t# sed is here only for pretty logging\n\t\t\tclang-format \"${src}\" | diff \"${src}\" - | sed 's/^---/-------------------------------------------------------------------------------/; s/^< /--- /; s/^> /+++ /; /^[0-9].*/ s/[acd,].*$/ERROR1/; /^[0-9].*/ s,^,\\n\\n\\n\\n'\"${src}\"':,; /ERROR1$/ s,ERROR1$,:1: error: clang-format code style mismatch:,; '\n\t\telse\n\t\t\techo \"${src}\"\n\t\tfi;\n\t\tret=1\n\tfi;\n\treturn \"${ret}\"\n}\n\n# check_style routine for those who too lazy to do it everytime manually\ncheck_style_log()\n{\n\tlog=\"source/check-style.log\"\n\tmake  -C source  check-style  2>&1  |  tee  \"${log}\"\n\tchmod  0666  \"${log}\"\n\tsed -i -e 's,\\r,,g' \"${log}\"\n\treturn 0\n}\n\n### main\n\ndocker_conf=\"Env.yml\"\n\n# get absolute location of project root dir to make docker happy with config(s)\n# (successfully tested on relatively POSIX-compliant Dash shell)\n\n# this script\nscript_file=\"/deploy.sh\"\n# IronOS/scripts/deploy.sh\nscript_path=\"${PWD}\"/\"${0}\"\n# IronOS/scripts/\nscript_dir=${script_path%\"${script_file}\"}\n# IronOS/\nroot_dir=\"${script_dir}/..\"\n# IronOS/Env.yml\ndocker_file=\"-f ${root_dir}/${docker_conf}\"\n\n# allow providing custom path to docker tool using DOCKER_BIN external env. var.\n# (compose sub-command must be included, i.e. DOCKER_BIN=\"/usr/local/bin/docker compose\" ./deploy.sh)\n\nif [ -z \"${DOCKER_BIN}\" ]; then\n\tdocker_app=\"\"\nelse\n\tdocker_app=\"${DOCKER_BIN}\"\nfi;\n\n# detect availability of docker\n\ndocker_compose=\"$(command -v docker-compose)\"\nif [ -n \"${docker_compose}\" ] && [ -z \"${docker_app}\" ]; then\n\tdocker_app=\"${docker_compose}\"\nfi;\n\ndocker_tool=\"$(command -v docker)\"\nif [ -n \"${docker_tool}\" ] && [ -z \"${docker_app}\" ]; then\n\tdocker_app=\"${docker_tool}  compose\"\nfi;\n\n# give function argument a name\n\ncmd=\"${1}\"\n\n# meta target to verify markdown documents\n\nif [ \"docs\" = \"${cmd}\" ]; then\n\tdocs_readme\n\treadme=\"${?}\"\n\tdocs_history\n\thist=\"${?}\"\n\tbuild_langs\n\tlangs=\"${?}\"\n\tdocs_links\n\tlinks=\"${?}\"\n\tif [ \"${readme}\" -eq 0 ] && [ \"${hist}\" -eq 0 ] && [ \"${langs}\" -eq 0 ] && [ \"${links}\" -eq 0 ]; then\n\t\tret=0\n\telse\n\t\tret=1\n\tfi;\n\texit ${ret}\nfi;\n\n# if only README.md for Documentation update is required then run it & exit\n\nif [ \"docs_readme\" = \"${cmd}\" ]; then\n\tdocs_readme\n\texit \"${?}\"\nfi;\n\n# if only History.md for Documentation update is required then run it & exit\n\nif [ \"docs_history\" = \"${cmd}\" ]; then\n\tdocs_history\n\texit \"${?}\"\nfi;\n\nif [ \"build_langs\" = \"${cmd}\" ]; then\n\tbuild_langs\n\texit \"${?}\"\nfi;\n\nif [ \"docs_links\" = \"${cmd}\" ]; then\n\tdocs_links\n\texit \"${?}\"\nfi;\n\nif [ \"check_style_file\" = \"${cmd}\" ]; then\n\tcheck_style_file \"${2}\"\n\texit \"${?}\"\nfi;\n\nif [ \"check_style_log\" = \"${cmd}\" ]; then\n\tcheck_style_log\n\texit \"${?}\"\nfi;\n\n# if docker is not presented in any way show warning & exit\n\nif [ -z \"${docker_app}\" ]; then\n\techo \"ERROR: Can't find docker-compose nor docker tool. Please, install docker and try again.\"\n\texit 1\nfi;\n\n# construct command to run\n\nif [ -z \"${cmd}\" ] || [ \"${cmd}\" = \"shell\" ]; then\n\tdocker_cmd=\"run  --rm  builder\"\nelif [ \"${cmd}\" = \"build\" ]; then\n\tdocker_cmd=\"run  --rm  builder  make  build-all  OUT=${OUT}\"\nelif [ \"${cmd}\" = \"clean\" ]; then\n\tdocker  rmi  ironos-builder:latest\n\tdocker  system  prune  --filter label=ironos-builder:latest  --force\n\texit \"${?}\"\nelse\n\tusage\n\texit 1\nfi;\n\n# change dir to project root dir & run constructed command\n\ncd \"${root_dir}\" || exit 1\necho -e \"\\n====>>>> Firing up & starting container...\"\nif [ \"${cmd}\" = \"shell\" ]; then\necho -e \"\\t* type \\\"exit\\\" to end the session when done;\"\nfi;\necho -e \"\\t* type \\\"${0} clean\\\" to delete created container (but not cached data)\"\necho -e \"\\n====>>>> ${docker_app}  ${docker_file}  ${docker_cmd}\\n\"\neval \"${docker_app}  ${docker_file}  ${docker_cmd}\"\nexit \"${?}\"\n"
  },
  {
    "path": "scripts/flash_ts10X_linux.sh",
    "content": "#!/bin/bash\n# TS100 Flasher for Linux by Alex Wigen (https://github.com/awigen)\n# Jan 2021 - Update by Ysard (https://github.com/ysard)\n# Jul 2025 - Update by Karakurt\n\nDIR_TMP=\"/tmp/ironos\"\nHEX_FIRMWARE=\"$DIR_TMP/ts100.hex\"\nMAX_TRIES=5\n\nusage() {\n    echo\n    echo \"#######################\"\n    echo \"# TS100/TS101 Flasher #\"\n    echo \"#######################\"\n    echo\n    echo \" Usage: $0 <HEXFILE>\"\n    echo\n    echo \"This script has been tested to work on Fedora and Arch Linux.\"\n    echo \"If you experience any issues please open a ticket at:\"\n    echo \"https://github.com/Ralim/IronOS/issues/new\"\n    echo\n}\n\nGAUTOMOUNT=0\ndisable_gautomount() {\n    if ! GSETTINGS=$(which gsettings); then\n        return 1\n    fi\n    if ! gsettings get org.gnome.desktop.media-handling automount | grep true > /dev/null; then\n        GAUTOMOUNT=1\n        gsettings set org.gnome.desktop.media-handling automount false\n    fi\n}\n\nenable_gautomount() {\n    if [ \"$GAUTOMOUNT\" -ne 0 ]; then\n        gsettings set org.gnome.desktop.media-handling automount true\n    fi\n}\n\nis_attached() {\n    if ! output=$(lsblk -b --raw --output NAME,MODEL | grep 'DFU.*Disk'); then\n      return 1\n    fi\n    DEVICE=$(echo \"$output\" | awk '{print \"/dev/\"$1}')\n}\n\ninstructions=\"not printed\"\nwait_for_iron() {\n    while ! is_attached; do\n        if [ \"$instructions\" = \"not printed\" ]; then\n            echo\n            echo \"#####################################################\"\n            echo \"#     Waiting for config disk device to appear      #\"\n            echo \"#                                                   #\"\n            echo \"# Connect the soldering iron with a USB cable while #\"\n            echo \"# holding the button closest to the tip pressed     #\"\n            echo \"#####################################################\"\n            echo\n            instructions=\"printed\"\n        fi\n        sleep 0.1\n    done\n}\n\nmount_iron() {\n    mkdir -p \"$DIR_TMP\"\n    user=\"${UID:-$(id -u)}\"\n    if ! sudo mount -t msdos -o uid=\"$user\" \"$DEVICE\" \"$DIR_TMP\"; then\n        echo \"Failed to mount $DEVICE on $DIR_TMP\"\n        exit 1\n    fi\n}\n\numount_iron() {\n    if ! (mountpoint \"$DIR_TMP\" > /dev/null && sudo umount \"$DIR_TMP\"); then\n        echo \"Failed to unmount $DIR_TMP\"\n        exit 1\n    fi\n    sleep 1\t\n    sudo rmdir \"$DIR_TMP\"\n}\n\ncheck_flash() {\n    RDY_FIRMWARE=\"${HEX_FIRMWARE%.*}.rdy\"\n    ERR_FIRMWARE=\"${HEX_FIRMWARE%.*}.err\"\n    if [ -f \"$RDY_FIRMWARE\" ]; then\n        echo -e \"\\e[92mFlash is done\\e[0m\"\n        echo \"Disconnect the USB and power up the iron. You're good to go.\"\n\treturn 0\n    elif [ -f \"$ERR_FIRMWARE\" ]; then\n        echo -e \"\\e[91mFlash error; Please retry!\\e[0m\"\n\treturn 1\n    else\n        echo -e \"\\e[91mUNKNOWN error\\e[0m\"\n        echo \"Flash result: \"\n        ls \"$DIR_TMP\"/ts100*\n\treturn 1\n    fi\n}\n\ncleanup() {\n    enable_gautomount\n    if [ -d \"$DIR_TMP\" ]; then\n        umount_iron\n    fi\n}\ntrap cleanup EXIT\n\nif [ \"$#\" -ne 1 ]; then\n    echo \"Please provide a HEX file to flash\"\n    usage\n    exit 1\nfi\n\nif [ ! -f \"$1\" ]; then\n    echo \"'$1' is not a regular file, please provide a HEX file to flash\"\n    usage\n    exit 1\nfi\n\nif [ \"$(head -c1 \"$1\")\" != \":\" ] || [ \"$(tail -n1 \"$1\" | head -c1)\" != \":\" ]; then\n    echo \"'$1' doesn't look like a valid HEX file. Please provide a HEX file to flash\"\n    usage\n    exit 1\nfi\n\ndisable_gautomount\n\nTRIES=0\nwhile [ $TRIES -lt $MAX_TRIES ]; do\n\twait_for_iron\n\tNAME=$(sudo fatlabel \"$DEVICE\" 2>/dev/null)\n\techo \"Found $NAME config disk device on $DEVICE\"\n\n\tmount_iron\n\techo \"Mounted config disk drive, flashing...\"\n\tdd if=\"$1\" of=\"$HEX_FIRMWARE\" oflag=direct\n\tumount_iron\n\n\techo \"Waiting for $NAME to flash\"\n\tsleep 5\n\n\techo \"Remounting config disk drive\"\n\twait_for_iron\n\tmount_iron\n\tcheck_flash && exit 0\n\n\techo \"Retrying automatically...\"\n\tTRIES=$((TRIES + 1))\ndone\necho -e \"\\e[91mMax retries reached.\\e[0m\"\nexit 1\n\n"
  },
  {
    "path": "source/.clang-format",
    "content": "---\nLanguage: Cpp\n# BasedOnStyle:  LLVM\nAccessModifierOffset: -2\nAlignAfterOpenBracket: Align\nAlignArrayOfStructures: Right\nAlignConsecutiveAssignments:\n  Enabled: true\n  AcrossEmptyLines: false\n  AcrossComments: false\n  AlignCompound: false\n  PadOperators: true\nAlignConsecutiveBitFields:\n  Enabled: true\n  AcrossEmptyLines: false\n  AcrossComments: false\n  AlignCompound: false\n  PadOperators: false\nAlignConsecutiveDeclarations:\n  Enabled: true\n  AcrossEmptyLines: false\n  AcrossComments: false\n  AlignCompound: false\n  PadOperators: false\nAlignConsecutiveMacros:\n  Enabled: true\n  AcrossEmptyLines: false\n  AcrossComments: false\n  AlignCompound: false\n  PadOperators: false\nAlignConsecutiveShortCaseStatements:\n  Enabled: true\n  AcrossEmptyLines: false\n  AcrossComments: false\n  AlignCaseColons: false\nAlignEscapedNewlines: Right\nAlignOperands: Align\nAlignTrailingComments:\n  Kind: Always\n  OverEmptyLines: 0\nAllowAllArgumentsOnNextLine: true\nAllowAllParametersOfDeclarationOnNextLine: true\nAllowShortBlocksOnASingleLine: Never\nAllowShortCaseLabelsOnASingleLine: false\nAllowShortEnumsOnASingleLine: true\nAllowShortFunctionsOnASingleLine: All\nAllowShortIfStatementsOnASingleLine: Never\nAllowShortLambdasOnASingleLine: All\nAllowShortLoopsOnASingleLine: false\nAlwaysBreakAfterDefinitionReturnType: None\nAlwaysBreakAfterReturnType: None\nAlwaysBreakBeforeMultilineStrings: false\nAlwaysBreakTemplateDeclarations: MultiLine\nAttributeMacros:\n  - __capability\nBinPackArguments: true\nBinPackParameters: true\nBitFieldColonSpacing: Both\nBraceWrapping:\n  AfterCaseLabel: false\n  AfterClass: false\n  AfterControlStatement: Never\n  AfterEnum: false\n  AfterExternBlock: false\n  AfterFunction: false\n  AfterNamespace: false\n  AfterObjCDeclaration: false\n  AfterStruct: false\n  AfterUnion: false\n  BeforeCatch: false\n  BeforeElse: false\n  BeforeLambdaBody: false\n  BeforeWhile: false\n  IndentBraces: false\n  SplitEmptyFunction: true\n  SplitEmptyRecord: true\n  SplitEmptyNamespace: true\nBreakAfterAttributes: Never\nBreakAfterJavaFieldAnnotations: false\nBreakArrays: true\nBreakBeforeBinaryOperators: None\nBreakBeforeConceptDeclarations: Always\nBreakBeforeBraces: Attach\nBreakBeforeInlineASMColon: OnlyMultiline\nBreakBeforeTernaryOperators: true\nBreakConstructorInitializers: BeforeColon\nBreakInheritanceList: BeforeColon\nBreakStringLiterals: true\nColumnLimit: 200\nCommentPragmas: \"^ IWYU pragma:\"\nCompactNamespaces: false\nConstructorInitializerIndentWidth: 4\nContinuationIndentWidth: 4\nCpp11BracedListStyle: true\nDerivePointerAlignment: false\nDisableFormat: false\nEmptyLineAfterAccessModifier: Never\nEmptyLineBeforeAccessModifier: LogicalBlock\nExperimentalAutoDetectBinPacking: false\nFixNamespaceComments: true\nForEachMacros:\n  - foreach\n  - Q_FOREACH\n  - BOOST_FOREACH\nIfMacros:\n  - KJ_IF_MAYBE\nIncludeBlocks: Preserve\nIncludeCategories:\n  - Regex: '^\"(llvm|llvm-c|clang|clang-c)/'\n    Priority: 2\n    SortPriority: 0\n    CaseSensitive: false\n  - Regex: '^(<|\"(gtest|gmock|isl|json)/)'\n    Priority: 3\n    SortPriority: 0\n    CaseSensitive: false\n  - Regex: \".*\"\n    Priority: 1\n    SortPriority: 0\n    CaseSensitive: false\nIncludeIsMainRegex: \"(Test)?$\"\nIncludeIsMainSourceRegex: \"\"\nIndentAccessModifiers: false\nIndentCaseBlocks: false\nIndentCaseLabels: false\nIndentExternBlock: AfterExternBlock\nIndentGotoLabels: true\nIndentPPDirectives: None\nIndentRequiresClause: true\nIndentWidth: 2\nIndentWrappedFunctionNames: false\nInsertBraces: false\nInsertNewlineAtEOF: false\nInsertTrailingCommas: None\nIntegerLiteralSeparator:\n  Binary: 0\n  BinaryMinDigits: 0\n  Decimal: 0\n  DecimalMinDigits: 0\n  Hex: 0\n  HexMinDigits: 0\nJavaScriptQuotes: Leave\nJavaScriptWrapImports: true\nKeepEmptyLinesAtTheStartOfBlocks: true\nKeepEmptyLinesAtEOF: false\nLambdaBodyIndentation: Signature\nLineEnding: DeriveLF\nMacroBlockBegin: \"\"\nMacroBlockEnd: \"\"\nMaxEmptyLinesToKeep: 1\nNamespaceIndentation: None\nObjCBinPackProtocolList: Auto\nObjCBlockIndentWidth: 2\nObjCBreakBeforeNestedBlockParam: true\nObjCSpaceAfterProperty: false\nObjCSpaceBeforeProtocolList: true\nPackConstructorInitializers: BinPack\nPenaltyBreakAssignment: 2\nPenaltyBreakBeforeFirstCallParameter: 19\nPenaltyBreakComment: 300\nPenaltyBreakFirstLessLess: 120\nPenaltyBreakOpenParenthesis: 0\nPenaltyBreakString: 1000\nPenaltyBreakTemplateDeclaration: 10\nPenaltyExcessCharacter: 1000000\nPenaltyIndentedWhitespace: 0\nPenaltyReturnTypeOnItsOwnLine: 60\nPointerAlignment: Right\nPPIndentWidth: -1\nQualifierAlignment: Leave\nReferenceAlignment: Pointer\nReflowComments: true\nRemoveBracesLLVM: false\nRemoveParentheses: Leave\nRemoveSemicolon: false\nRequiresClausePosition: OwnLine\nRequiresExpressionIndentation: OuterScope\nSeparateDefinitionBlocks: Leave\nShortNamespaceLines: 1\nSortIncludes: CaseSensitive\nSortJavaStaticImport: Before\nSortUsingDeclarations: LexicographicNumeric\nSpaceAfterCStyleCast: false\nSpaceAfterLogicalNot: false\nSpaceAfterTemplateKeyword: true\nSpaceAroundPointerQualifiers: Default\nSpaceBeforeAssignmentOperators: true\nSpaceBeforeCaseColon: false\nSpaceBeforeCpp11BracedList: false\nSpaceBeforeCtorInitializerColon: true\nSpaceBeforeInheritanceColon: true\nSpaceBeforeJsonColon: false\nSpaceBeforeParens: ControlStatements\nSpaceBeforeParensOptions:\n  AfterControlStatements: true\n  AfterForeachMacros: true\n  AfterFunctionDefinitionName: false\n  AfterFunctionDeclarationName: false\n  AfterIfMacros: true\n  AfterOverloadedOperator: false\n  AfterRequiresInClause: false\n  AfterRequiresInExpression: false\n  BeforeNonEmptyParentheses: false\nSpaceBeforeRangeBasedForLoopColon: true\nSpaceBeforeSquareBrackets: false\nSpaceInEmptyBlock: false\nSpacesBeforeTrailingComments: 1\nSpacesInAngles: Never\nSpacesInContainerLiterals: true\nSpacesInLineCommentPrefix:\n  Minimum: 1\n  Maximum: -1\nSpacesInParens: Never\nSpacesInParensOptions:\n  InCStyleCasts: false\n  InConditionalStatements: false\n  InEmptyParentheses: false\n  Other: false\nSpacesInSquareBrackets: false\nStandard: Latest\nStatementAttributeLikeMacros:\n  - Q_EMIT\nStatementMacros:\n  - Q_UNUSED\n  - QT_REQUIRE_VERSION\nTabWidth: 8\nUseTab: Never\nVerilogBreakBetweenInstancePorts: true\nWhitespaceSensitiveMacros:\n  - BOOST_PP_STRINGIZE\n  - CF_SWIFT_NAME\n  - NS_SWIFT_NAME\n  - PP_STRINGIZE\n  - STRINGIZE\n---\n\n"
  },
  {
    "path": "source/Core/BSP/BSP.h",
    "content": "#include \"BSP_Flash.h\"\r\n#include \"BSP_PD.h\"\r\n#include \"BSP_Power.h\"\r\n#include \"BSP_QC.h\"\r\n#include \"Defines.h\"\r\n#include \"Types.h\"\r\n#include \"configuration.h\"\r\n#include <stdbool.h>\r\n#include <stdint.h>\r\n\r\n/*\r\n * BSP.h -- Board Support\r\n *\r\n * This exposes functions that are expected to be implemented to add support for different hardware\r\n */\r\n\r\n#ifndef BSP_BSP_H_\r\n#define BSP_BSP_H_\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n// maximum htim2 PWM value\r\nextern const uint16_t powerPWM;\r\n// htim2.Init.Period, the full PWM cycle\r\nextern uint16_t totalPWM;\r\n\r\n// Called first thing in main() to init the hardware\r\nvoid preRToSInit();\r\n// Called once the RToS has started for any extra work\r\nvoid postRToSInit();\r\n\r\n// Called once from preRToSInit()\r\nvoid BSPInit(void);\r\n\r\n// Called to reset the hardware watchdog unit\r\nvoid resetWatchdog();\r\n// Accepts a output level of 0.. to use to control the tip output PWM\r\nvoid setTipPWM(const uint8_t pulse, const bool shouldUseFastModePWM);\r\n// Returns the Handle temp in C, X10\r\nuint16_t getHandleTemperature(uint8_t sample);\r\n// Returns the Tip temperature ADC reading in raw units\r\nuint16_t getTipRawTemp(uint8_t refresh);\r\n// Returns the main DC input voltage, using the adjustable divisor + sample flag\r\nuint16_t getInputVoltageX10(uint16_t divisor, uint8_t sample);\r\n\r\n// Readers for the two buttons\r\n// !! Returns 1 if held down, 0 if released\r\nuint8_t getButtonA();\r\nuint8_t getButtonB();\r\n\r\n// This is a work around that will be called if I2C starts to bug out\r\n// This should toggle the SCL line until SDA goes high to end the current transaction\r\nvoid unstick_I2C();\r\n\r\n// Reboot the IC when things go seriously wrong\r\nvoid reboot();\r\n\r\n// If the user has programmed in a bootup logo, draw it to the screen from flash\r\n// Returns 1 if the logo was printed so that the unit waits for the timeout or button\r\nvoid showBootLogoIfavailable();\r\n// delay wrapper for delay using the hardware timer (used before RTOS)\r\nvoid delay_ms(uint16_t count);\r\n// Probe if the Hall sensor is fitted to the unit\r\nbool getHallSensorFitted();\r\n// If the iron has a hall effect sensor in the handle, return an signed count of the reading\r\n// If the sensor is single polarity (or polarity insensitive) just return 0..32768\r\nint16_t getRawHallEffect();\r\n\r\n// Returns true if power is from dumb \"DC\" input rather than \"smart\" QC or PD\r\nbool getIsPoweredByDCIN();\r\n\r\n// Logs the system state to a debug interface if supported\r\nvoid log_system_state(int32_t PWMWattsx10);\r\n\r\n// Returns true if the tip is disconnected\r\nbool isTipDisconnected();\r\n\r\n// Return hardware unique ID if possible\r\nuint64_t getDeviceID();\r\n\r\n// If device has burned in validation code's, return the code\r\nuint32_t getDeviceValidation();\r\n// If device validation passes returns 0\r\nuint8_t getDeviceValidationStatus();\r\n\r\n// Status LED controls\r\n\r\nenum StatusLED {\r\n  LED_OFF = 0,           // Turn off status led\r\n  LED_STANDBY,           // unit is in sleep /standby\r\n  LED_HEATING,           // The unit is heating up to temperature\r\n  LED_HOT,               // The unit is at operating temperature\r\n  LED_COOLING_STILL_HOT, // The unit is off and cooling but still hot\r\n  LED_UNKNOWN,           //\r\n};\r\nvoid setStatusLED(const enum StatusLED state);\r\n\r\nvoid setBuzzer(bool on);\r\n\r\n// preStartChecks are run until they return 0\r\n// By the PID, after each ADC sample comes in\r\n// For example, on the MHP30 this is used to figure out the resistance of the hotplate\r\nuint8_t preStartChecks();\r\nuint8_t preStartChecksDone();\r\n\r\n// Check if the tip or output mosfet is shorted (if possible)\r\nbool isTipShorted();\r\n// Show the boot logo\r\nvoid showBootLogo(void);\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n#endif /* BSP_BSP_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/BSP_Common.c",
    "content": "#include \"BSP.h\"\n"
  },
  {
    "path": "source/Core/BSP/BSP_Flash.h",
    "content": "/*\r\n * BSP_Flash.h\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n#include \"stdint.h\"\r\n#ifndef BSP_BSP_FLASH_H_\r\n#define BSP_BSP_FLASH_H_\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n/*\r\n * Wrappers to allow read/writing to a sector of flash that we use to store all of the user settings\r\n *\r\n * Should allow reading and writing to the flash\r\n */\r\n\r\n// Erase the flash, then save the buffer. Returns 1 if worked\r\nvoid flash_save_buffer(const uint8_t *buffer, const uint16_t length);\r\n\r\nvoid flash_read_buffer(uint8_t *buffer, const uint16_t length);\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n#endif /* BSP_BSP_FLASH_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/BSP_PD.h",
    "content": "/*\r\n * BSP_PD.h\r\n *\r\n *  Created on: 21 Jul 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef USER_BSP_PD_H_\r\n#define USER_BSP_PD_H_\r\n#include \"BSP.h\"\r\nbool fusb_write_buf(const uint8_t deviceAddr, const uint8_t registerAdd, const uint8_t size, uint8_t *buf);\r\nbool fusb_read_buf(const uint8_t deviceAddr, const uint8_t registerAdd, const uint8_t size, uint8_t *buf);\r\nvoid setupFUSBIRQ();\r\nbool getFUS302IRQLow();\r\n#endif /* USER_BSP_PD_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/BSP_Power.h",
    "content": "#include \"stdint.h\"\n/*\n * BSP_Power.h -- Board Support for Power control\n *\n * These functions are hooks used to allow for power control\n *\n */\n\n#ifndef BSP_POWER_H_\n#define BSP_POWER_H_\n#include \"Types.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n// Called periodically in the movement handling thread\n// Can be used to check any details for the power system\nvoid power_check();\n\n// Returns the tip resistance in x10 ohms, so 7.5 = 75; 14=140 etc\nuint8_t getTipResistanceX10();\n\nuint16_t getTipThermalMass();\nuint16_t getTipInertia();\n\nTemperatureType_t getCustomTipMaxInC();\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/BSP_QC.h",
    "content": "/*\r\n * BSP_QC.h\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_BSP_QC_H_\r\n#define BSP_BSP_QC_H_\r\n#include \"stdint.h\"\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n// Init GPIO for QC neg\r\nvoid QC_Init_GPIO();\r\n// Set the DP pin to 0.6V\r\nvoid QC_DPlusZero_Six();\r\n// Set the DM pin to 0.6V\r\nvoid QC_DNegZero_Six();\r\n// Set the DP pin to 3.3V\r\nvoid QC_DPlusThree_Three();\r\n// Set the DM pin to 3.3V\r\nvoid QC_DNegThree_Three();\r\n// Turn on weak pulldown on the DM pin\r\n// This is used as a helper for some power banks\r\nvoid QC_DM_PullDown();\r\n// Turn off the pulldown\r\nvoid QC_DM_No_PullDown();\r\n// Turn on output drivers that were initally disabled to prevent spike through QC disable mode\r\nvoid QC_Post_Probe_En();\r\n// Check if DM was pulled down\r\n// 1=Pulled down, 0 == pulled high\r\nuint8_t QC_DM_PulledDown();\r\n\r\n// Re-sync if required\r\nvoid QC_resync();\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* BSP_BSP_QC_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Defines.h",
    "content": "/*\r\n * Defines.h\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_DEFINES_H_\r\n#define BSP_DEFINES_H_\r\n#include \"FreeRTOSConfig.h\"\r\nenum Orientation { ORIENTATION_LEFT_HAND = 0, ORIENTATION_RIGHT_HAND = 1, ORIENTATION_FLAT = 3 };\r\n\r\n#define TICKS_SECOND configTICK_RATE_HZ\r\n#define TICKS_MIN    (60 * TICKS_SECOND)\r\n#define TICKS_100MS  (TICKS_SECOND / 10)\r\n#define TICKS_10MS   (TICKS_100MS / 10)\r\n#endif /* BSP_DEFINES_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/BSP.cpp",
    "content": "// BSP mapping functions\r\n\r\n#include \"BSP.h\"\r\n#include \"BootLogo.h\"\r\n#include \"I2C_Wrapper.hpp\"\r\n#include \"Pins.h\"\r\n#include \"Setup.h\"\r\n#include \"TipThermoModel.h\"\r\n#include \"Utils.hpp\"\r\n#include \"WS2812.h\"\r\n#include \"configuration.h\"\r\n#include \"history.hpp\"\r\n#include \"main.hpp\"\r\n#include <IRQ.h>\r\n\r\nWS2812<GPIOA_BASE, WS2812_Pin, 1> ws2812;\r\nvolatile uint16_t                 PWMSafetyTimer            = 0;\r\nvolatile uint8_t                  pendingPWM                = 0;\r\nuint16_t                          totalPWM                  = 255;\r\nconst uint16_t                    powerPWM                  = 255;\r\nuint16_t                          tipSenseResistancex10Ohms = 0;\r\nvolatile bool                     tipMeasurementOccuring    = false;\r\nhistory<uint16_t, PID_TIM_HZ>     rawTempFilter             = {{0}, 0, 0};\r\n\r\nvoid resetWatchdog() { HAL_IWDG_Refresh(&hiwdg); }\r\n\r\n#ifdef TEMP_NTC\r\n// Lookup table for the NTC\r\n// Stored as ADCReading,Temp in degC\r\nstatic const int32_t NTCHandleLookup[] = {\r\n    // ADC Reading , Temp in Cx10\r\n    808,   1600, //\r\n    832,   1590, //\r\n    848,   1580, //\r\n    872,   1570, //\r\n    888,   1560, //\r\n    912,   1550, //\r\n    936,   1540, //\r\n    960,   1530, //\r\n    984,   1520, //\r\n    1008,  1510, //\r\n    1032,  1500, //\r\n    1056,  1490, //\r\n    1080,  1480, //\r\n    1112,  1470, //\r\n    1136,  1460, //\r\n    1168,  1450, //\r\n    1200,  1440, //\r\n    1224,  1430, //\r\n    1256,  1420, //\r\n    1288,  1410, //\r\n    1328,  1400, //\r\n    1360,  1390, //\r\n    1392,  1380, //\r\n    1432,  1370, //\r\n    1464,  1360, //\r\n    1504,  1350, //\r\n    1544,  1340, //\r\n    1584,  1330, //\r\n    1632,  1320, //\r\n    1672,  1310, //\r\n    1720,  1300, //\r\n    1760,  1290, //\r\n    1808,  1280, //\r\n    1856,  1270, //\r\n    1912,  1260, //\r\n    1960,  1250, //\r\n    2016,  1240, //\r\n    2072,  1230, //\r\n    2128,  1220, //\r\n    2184,  1210, //\r\n    2248,  1200, //\r\n    2304,  1190, //\r\n    2368,  1180, //\r\n    2440,  1170, //\r\n    2504,  1160, //\r\n    2576,  1150, //\r\n    2648,  1140, //\r\n    2720,  1130, //\r\n    2792,  1120, //\r\n    2872,  1110, //\r\n    2952,  1100, //\r\n    3040,  1090, //\r\n    3128,  1080, //\r\n    3216,  1070, //\r\n    3304,  1060, //\r\n    3400,  1050, //\r\n    3496,  1040, //\r\n    3592,  1030, //\r\n    3696,  1020, //\r\n    3800,  1010, //\r\n    3912,  1000, //\r\n    4024,  990,  //\r\n    4136,  980,  //\r\n    4256,  970,  //\r\n    4376,  960,  //\r\n    4504,  950,  //\r\n    4632,  940,  //\r\n    4768,  930,  //\r\n    4904,  920,  //\r\n    5048,  910,  //\r\n    5192,  900,  //\r\n    5336,  890,  //\r\n    5488,  880,  //\r\n    5648,  870,  //\r\n    5808,  860,  //\r\n    5976,  850,  //\r\n    6144,  840,  //\r\n    6320,  830,  //\r\n    6504,  820,  //\r\n    6688,  810,  //\r\n    6872,  800,  //\r\n    7072,  790,  //\r\n    7264,  780,  //\r\n    7472,  770,  //\r\n    7680,  760,  //\r\n    7896,  750,  //\r\n    8112,  740,  //\r\n    8336,  730,  //\r\n    8568,  720,  //\r\n    8800,  710,  //\r\n    9040,  700,  //\r\n    9288,  690,  //\r\n    9536,  680,  //\r\n    9792,  670,  //\r\n    10056, 660,  //\r\n    10320, 650,  //\r\n    10592, 640,  //\r\n    10872, 630,  //\r\n    11152, 620,  //\r\n    11440, 610,  //\r\n    11728, 600,  //\r\n    12024, 590,  //\r\n    12320, 580,  //\r\n    12632, 570,  //\r\n    12936, 560,  //\r\n    13248, 550,  //\r\n    13568, 540,  //\r\n    13888, 530,  //\r\n    14216, 520,  //\r\n    14544, 510,  //\r\n    14880, 500,  //\r\n    15216, 490,  //\r\n    15552, 480,  //\r\n    15888, 470,  //\r\n    16232, 460,  //\r\n    16576, 450,  //\r\n    16920, 440,  //\r\n    17272, 430,  //\r\n    17616, 420,  //\r\n    17968, 410,  //\r\n    18320, 400,  //\r\n    18664, 390,  //\r\n    19016, 380,  //\r\n    19368, 370,  //\r\n    19712, 360,  //\r\n    20064, 350,  //\r\n    20408, 340,  //\r\n    20752, 330,  //\r\n    21088, 320,  //\r\n    21432, 310,  //\r\n    21768, 300,  //\r\n    22096, 290,  //\r\n    22424, 280,  //\r\n    22752, 270,  //\r\n    23072, 260,  //\r\n    23392, 250,  //\r\n    23704, 240,  //\r\n    24008, 230,  //\r\n    24312, 220,  //\r\n    24608, 210,  //\r\n    24904, 200,  //\r\n    25192, 190,  //\r\n    25472, 180,  //\r\n    25744, 170,  //\r\n    26016, 160,  //\r\n    26280, 150,  //\r\n    26536, 140,  //\r\n    26784, 130,  //\r\n    27024, 120,  //\r\n    27264, 110,  //\r\n    27496, 100,  //\r\n    27720, 90,   //\r\n    27936, 80,   //\r\n    28144, 70,   //\r\n    28352, 60,   //\r\n    28544, 50,   //\r\n    28736, 40,   //\r\n    28920, 30,   //\r\n    29104, 20,   //\r\n    29272, 10,   //\r\n};\r\nconst int NTCHandleLookupItems = sizeof(NTCHandleLookup) / (2 * sizeof(uint16_t));\r\n#endif\r\n\r\n// These are called by the HAL after the corresponding events from the system\r\n// timers.\r\n\r\nvoid HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {\r\n  // Period has elapsed\r\n  if (htim->Instance == TIM4) {\r\n    // STM uses this for internal functions as a counter for timeouts\r\n    HAL_IncTick();\r\n  }\r\n}\r\nuint16_t getHandleTemperature(uint8_t sample) {\r\n  int32_t result = getADC(0);\r\n  return Utils::InterpolateLookupTable(NTCHandleLookup, NTCHandleLookupItems, result);\r\n}\r\n\r\nuint16_t getTipInstantTemperature() { return getADC(2); }\r\n\r\nuint16_t getTipRawTemp(uint8_t refresh) {\r\n  if (refresh && (tipMeasurementOccuring == false)) {\r\n\r\n    uint16_t lastSample = getTipInstantTemperature();\r\n    rawTempFilter.update(lastSample);\r\n    return lastSample;\r\n  } else {\r\n    return rawTempFilter.average();\r\n  }\r\n}\r\n\r\nuint16_t getInputVoltageX10(uint16_t divisor, uint8_t sample) {\r\n  // ADC maximum is 32767 == 3.3V at input == 28.05V at VIN\r\n  // Therefore we can divide down from there\r\n  // Multiplying ADC max by 4 for additional calibration options,\r\n  // ideal term is 467\r\n  static uint8_t  preFillneeded = 10;\r\n  static uint32_t samples[BATTFILTERDEPTH];\r\n  static uint8_t  index = 0;\r\n  if (preFillneeded) {\r\n    for (uint8_t i = 0; i < BATTFILTERDEPTH; i++) {\r\n      samples[i] = getADC(1);\r\n    }\r\n    preFillneeded--;\r\n  }\r\n  if (sample) {\r\n    samples[index] = getADC(1);\r\n    index          = (index + 1) % BATTFILTERDEPTH;\r\n  }\r\n  uint32_t sum = 0;\r\n\r\n  for (uint8_t i = 0; i < BATTFILTERDEPTH; i++) {\r\n    sum += samples[i];\r\n  }\r\n\r\n  sum /= BATTFILTERDEPTH;\r\n  if (divisor == 0) {\r\n    divisor = 1;\r\n  }\r\n  return sum * 4 / divisor;\r\n}\r\nvoid setTipPWM(const uint8_t pulse, const bool shouldUseFastModePWM) {\r\n  // We can just set the timer directly\r\n  if (htim3.Instance->PSC > 20) {\r\n    htim3.Instance->CCR1 = 0;\r\n  } else {\r\n    htim3.Instance->CCR1 = pulse;\r\n  }\r\n}\r\n\r\nvoid unstick_I2C() {\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  int              timeout     = 100;\r\n  int              timeout_cnt = 0;\r\n\r\n  while (GPIO_PIN_SET != HAL_GPIO_ReadPin(SDA_GPIO_Port, SDA_Pin)) {\r\n    // Move clock to release I2C\r\n    HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_RESET);\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_SET);\r\n\r\n    timeout_cnt++;\r\n    if (timeout_cnt > timeout) {\r\n      return;\r\n    }\r\n  }\r\n}\r\n\r\nuint8_t getButtonA() { return HAL_GPIO_ReadPin(KEY_A_GPIO_Port, KEY_A_Pin) == GPIO_PIN_RESET ? 1 : 0; }\r\nuint8_t getButtonB() { return HAL_GPIO_ReadPin(KEY_B_GPIO_Port, KEY_B_Pin) == GPIO_PIN_RESET ? 1 : 0; }\r\n\r\nvoid BSPInit(void) { ws2812.init(); }\r\n\r\nvoid reboot() { NVIC_SystemReset(); }\r\n\r\nvoid delay_ms(uint16_t count) { HAL_Delay(count); }\r\n\r\nvoid setPlatePullup(bool pullingUp) {\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;\r\n  GPIO_InitStruct.Pin   = PLATE_SENSOR_PULLUP_Pin;\r\n  GPIO_InitStruct.Pull  = GPIO_NOPULL;\r\n  GPIO_InitStruct.Mode  = pullingUp ? GPIO_MODE_OUTPUT_PP : GPIO_MODE_INPUT;\r\n  HAL_GPIO_Init(PLATE_SENSOR_PULLUP_GPIO_Port, &GPIO_InitStruct);\r\n  HAL_GPIO_WritePin(PLATE_SENSOR_PULLUP_GPIO_Port, PLATE_SENSOR_PULLUP_Pin, pullingUp ? GPIO_PIN_SET : GPIO_PIN_RESET);\r\n}\r\n\r\nvoid performTipMeasurementStep(bool start) {\r\n  static uint16_t   adcReadingPD1Set = 0;\r\n  static TickType_t lastMeas         = 0;\r\n  // Inter state that performs the steps to measure the resistor on the tip\r\n  // Return 1 if a measurement is ongoing\r\n\r\n  // We want to perform our startup measurements of the tip resistance until we detect one fitted\r\n\r\n  // Step 1; if not setup, we turn on pullup and then wait\r\n  if (tipMeasurementOccuring == false && (start || tipSenseResistancex10Ohms == 0 || lastMeas == 0)) {\r\n    tipMeasurementOccuring    = true;\r\n    tipSenseResistancex10Ohms = 0;\r\n    lastMeas                  = xTaskGetTickCount();\r\n    adcReadingPD1Set          = 0;\r\n    setPlatePullup(true);\r\n    return;\r\n  }\r\n\r\n  // Wait 100ms for settle time\r\n  if ((xTaskGetTickCount() - lastMeas) < (TICKS_100MS)) {\r\n    return;\r\n  }\r\n\r\n  lastMeas = xTaskGetTickCount();\r\n  // We are sensing the resistance\r\n  if (adcReadingPD1Set == 0) {\r\n    // We will record the reading for PD1 being set\r\n    adcReadingPD1Set = getADC(3);\r\n    setPlatePullup(false);\r\n    return;\r\n  }\r\n  // Taking reading two\r\n  uint16_t adcReadingPD1Cleared = getADC(3);\r\n  uint32_t a                    = ((int)adcReadingPD1Set - (int)adcReadingPD1Cleared);\r\n  a *= 10000;\r\n  uint32_t b = ((int)adcReadingPD1Cleared + (32768 - (int)adcReadingPD1Set));\r\n  if (b) {\r\n    tipSenseResistancex10Ohms = a / b;\r\n  } else {\r\n    tipSenseResistancex10Ohms = adcReadingPD1Set = lastMeas = 0;\r\n  }\r\n  if (tipSenseResistancex10Ohms > 1100 || tipSenseResistancex10Ohms < 900) {\r\n    tipSenseResistancex10Ohms = 0; // out of range\r\n    adcReadingPD1Set          = 0;\r\n    lastMeas                  = 0;\r\n    return;\r\n  }\r\n  tipMeasurementOccuring = false;\r\n}\r\nbool isTipDisconnected() {\r\n  static bool lastDisconnectedState = false;\r\n  // For the MHP30 we want to include a little extra logic in here\r\n  // As when the tip is first connected we want to measure the ~100 ohm resistor on the base of the tip\r\n  // And likewise if its removed we want to clear that measurement\r\n  /*\r\n   * plate_sensor_res = ((adc5_value_PD1_set - adc5_value_PD1_cleared) / (adc5_value_PD1_cleared + 4096 - adc5_value_PD1_set)) * 1000.0;\r\n   * */\r\n  if (tipMeasurementOccuring) {\r\n    performTipMeasurementStep(false);\r\n    return true; // We fake no tip disconnection during the measurement cycle to mask it\r\n  }\r\n\r\n  // If we are too close to the top, most likely disconnected tip\r\n  bool tipDisconnected = getTipInstantTemperature() > (4090 * 8);\r\n  if (tipDisconnected == false && lastDisconnectedState == true) {\r\n    // Tip is now disconnected\r\n    performTipMeasurementStep(true);\r\n  }\r\n  lastDisconnectedState = tipDisconnected;\r\n  return tipDisconnected;\r\n}\r\n\r\nuint8_t preStartChecks() {\r\n  performTipMeasurementStep(false);\r\n  return tipMeasurementOccuring ? 0 : 1;\r\n}\r\nvoid setBuzzer(bool on) {\r\n  if (on) {\r\n    htim3.Instance->CCR2 = 128;\r\n    htim3.Instance->PSC  = 100; // drop down into audible range\r\n  } else {\r\n    htim3.Instance->CCR2 = 0;\r\n    htim3.Instance->PSC  = 1; // revert back out of hearing range\r\n  }\r\n}\r\nvoid setStatusLED(const enum StatusLED state) {\r\n  static enum StatusLED lastState = LED_UNKNOWN;\r\n  static TickType_t     buzzerEnd = 0;\r\n\r\n  if (lastState != state || state == LED_HEATING) {\r\n    switch (state) {\r\n    default:\r\n    case LED_UNKNOWN:\r\n    case LED_OFF:\r\n      ws2812.led_set_color(0, 0, 0, 0);\r\n      break;\r\n    case LED_STANDBY:\r\n      ws2812.led_set_color(0, 0, 0xFF, 0); // green\r\n      break;\r\n    case LED_HEATING: {\r\n      ws2812.led_set_color(0, ((HAL_GetTick() / 10) % 192) + 64, 0, 0); // Red fade\r\n    } break;\r\n    case LED_HOT:\r\n      ws2812.led_set_color(0, 0xFF, 0, 0); // red\r\n      break;\r\n    case LED_COOLING_STILL_HOT:\r\n      ws2812.led_set_color(0, 0xFF, 0x8C, 0x00); // Orange\r\n      break;\r\n    }\r\n    ws2812.led_update();\r\n    lastState = state;\r\n  }\r\n}\r\nuint64_t getDeviceID() {\r\n  //\r\n  return HAL_GetUIDw0() | ((uint64_t)HAL_GetUIDw1() << 32);\r\n}\r\n\r\nuint8_t preStartChecksDone() { return 1; }\r\n\r\nuint16_t getTipThermalMass() { return TIP_THERMAL_MASS; }\r\nuint16_t getTipInertia() { return TIP_THERMAL_MASS; }\r\n\r\nvoid showBootLogo(void) { BootLogo::handleShowingLogo((uint8_t *)FLASH_LOGOADDR); }\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/FreeRTOSConfig.h",
    "content": "/*\r\n FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd.\r\n All rights reserved\r\n\r\n VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r\n\r\n This file is part of the FreeRTOS distribution.\r\n\r\n FreeRTOS is free software; you can redistribute it and/or modify it under\r\n the terms of the GNU General Public License (version 2) as published by the\r\n Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r\n\r\n ***************************************************************************\r\n >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r\n >>!   distribute a combined work that includes FreeRTOS without being   !<<\r\n >>!   obliged to provide the source code for proprietary components     !<<\r\n >>!   outside of the FreeRTOS kernel.                                   !<<\r\n ***************************************************************************\r\n\r\n FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r\n FOR A PARTICULAR PURPOSE.  Full license text is available on the following\r\n link: http://www.freertos.org/a00114.html\r\n\r\n ***************************************************************************\r\n *                                                                       *\r\n *    FreeRTOS provides completely free yet professionally developed,    *\r\n *    robust, strictly quality controlled, supported, and cross          *\r\n *    platform software that is more than just the market leader, it     *\r\n *    is the industry's de facto standard.                               *\r\n *                                                                       *\r\n *    Help yourself get started quickly while simultaneously helping     *\r\n *    to support the FreeRTOS project by purchasing a FreeRTOS           *\r\n *    tutorial book, reference manual, or both:                          *\r\n *    http://www.FreeRTOS.org/Documentation                              *\r\n *                                                                       *\r\n ***************************************************************************\r\n\r\n http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading\r\n the FAQ page \"My application does not run, what could be wrong?\".  Have you\r\n defined configASSERT()?\r\n\r\n http://www.FreeRTOS.org/support - In return for receiving this top quality\r\n embedded software for free we request you assist our global community by\r\n participating in the support forum.\r\n\r\n http://www.FreeRTOS.org/training - Investing in training allows your team to\r\n be as productive as possible as early as possible.  Now you can receive\r\n FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r\n Ltd, and the world's leading authority on the world's leading RTOS.\r\n\r\n http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r\n including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r\n compatible FAT file system, and our tiny thread aware UDP/IP stack.\r\n\r\n http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r\n Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r\n\r\n http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r\n Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r\n licenses offer ticketed support, indemnification and commercial middleware.\r\n\r\n http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r\n engineered and independently SIL3 certified version for use in safety and\r\n mission critical applications that require provable dependability.\r\n\r\n 1 tab == 4 spaces!\r\n */\r\n\r\n#ifndef FREERTOS_CONFIG_H\r\n#define FREERTOS_CONFIG_H\r\n\r\n/*-----------------------------------------------------------\r\n * Application specific definitions.\r\n *\r\n * These definitions should be adjusted for your particular hardware and\r\n * application requirements.\r\n *\r\n * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r\n * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r\n *\r\n * See http://www.freertos.org/a00110.html.\r\n *----------------------------------------------------------*/\r\n\r\n/* USER CODE BEGIN Includes */\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n/* USER CODE END Includes */\r\n\r\n/* Ensure stdint is only used by the compiler, and not the assembler. */\r\n#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)\r\n#include <stdint.h>\r\nextern uint32_t SystemCoreClock;\r\n#endif\r\n\r\n#define configUSE_PREEMPTION                    1\r\n#define configSUPPORT_STATIC_ALLOCATION         1\r\n#define configSUPPORT_DYNAMIC_ALLOCATION        0\r\n#define configUSE_IDLE_HOOK                     1\r\n#define configUSE_TICK_HOOK                     0\r\n#define configCPU_CLOCK_HZ                      (SystemCoreClock)\r\n#define configTICK_RATE_HZ                      ((TickType_t)1000)\r\n#define configMAX_PRIORITIES                    (7)\r\n#define configMINIMAL_STACK_SIZE                ((uint16_t)256)\r\n#define configTOTAL_HEAP_SIZE                   ((size_t)1024 * 14) /*Currently use about 9000*/\r\n#define configMAX_TASK_NAME_LEN                 (32)\r\n#define configUSE_MUTEXES                       1\r\n#define configQUEUE_REGISTRY_SIZE               8\r\n#define configUSE_TIMERS                        0\r\n#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1\r\n#define configCHECK_FOR_STACK_OVERFLOW          2 /*Bump this to 2 during development and bug hunting*/\r\n#define configTICK_TYPE_WIDTH_IN_BITS           TICK_TYPE_WIDTH_32_BITS\r\n\r\n/* Co-routine definitions. */\r\n#define configUSE_CO_ROUTINES           0\r\n#define configMAX_CO_ROUTINE_PRIORITIES (2)\r\n\r\n/* Set the following definitions to 1 to include the API function, or zero\r\n to exclude the API function. */\r\n#define INCLUDE_vTaskPrioritySet            1\r\n#define INCLUDE_uxTaskPriorityGet           0\r\n#define INCLUDE_vTaskDelete                 0\r\n#define INCLUDE_vTaskCleanUpResources       0\r\n#define INCLUDE_vTaskSuspend                0\r\n#define INCLUDE_vTaskDelayUntil             1\r\n#define INCLUDE_vTaskDelay                  1\r\n#define INCLUDE_xTaskGetSchedulerState      1\r\n#define INCLUDE_uxTaskGetStackHighWaterMark 1\r\n\r\n/* Cortex-M specific definitions. */\r\n#ifdef __NVIC_PRIO_BITS\r\n/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */\r\n#define configPRIO_BITS __NVIC_PRIO_BITS\r\n#else\r\n#define configPRIO_BITS 4\r\n#endif\r\n\r\n/* The lowest interrupt priority that can be used in a call to a \"set priority\"\r\n function. */\r\n#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15\r\n\r\n/* The highest interrupt priority that can be used by any interrupt service\r\n routine that makes calls to interrupt safe FreeRTOS API functions.  DO NOT CALL\r\n INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER\r\n PRIORITY THAN THIS! (higher priorities are lower numeric values. */\r\n#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5\r\n\r\n/* Interrupt priorities used by the kernel port layer itself.  These are generic\r\n to all Cortex-M ports, and do not rely on any particular library functions. */\r\n#define configKERNEL_INTERRUPT_PRIORITY (configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))\r\n/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!\r\n See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */\r\n#define configMAX_SYSCALL_INTERRUPT_PRIORITY (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))\r\n\r\n/* Normal assert() semantics without relying on the provision of an assert.h\r\n header file. */\r\n/* USER CODE BEGIN 1 */\r\n#define configASSERT(x)                                                                                                                                                                                \\\r\n  if ((x) == 0) {                                                                                                                                                                                      \\\r\n    taskDISABLE_INTERRUPTS();                                                                                                                                                                          \\\r\n    for (;;)                                                                                                                                                                                           \\\r\n      ;                                                                                                                                                                                                \\\r\n  }\r\n/* USER CODE END 1 */\r\n\r\n/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS\r\n standard names. */\r\n#define vPortSVCHandler    SVC_Handler\r\n#define xPortPendSVHandler PendSV_Handler\r\n\r\n#if configUSE_TIMERS\r\n#define configTIMER_TASK_PRIORITY    2\r\n#define configTIMER_QUEUE_LENGTH     8\r\n#define configTIMER_TASK_STACK_DEPTH (512 / 4)\r\n#endif\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n#endif /* FREERTOS_CONFIG_H */\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/IRQ.cpp",
    "content": "/*\r\n * IRQ.c\r\n *\r\n *  Created on: 30 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"IRQ.h\"\r\n#include \"Pins.h\"\r\n#include \"configuration.h\"\r\n\r\n/*\r\n * Catch the IRQ that says that the conversion is done on the temperature\r\n * readings coming in Once these have come in we can unblock the PID so that it\r\n * runs again\r\n */\r\nvoid HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) {\r\n  static uint8_t counter                  = 0;\r\n  BaseType_t     xHigherPriorityTaskWoken = pdFALSE;\r\n  if (hadc == &hadc1) {\r\n    counter++;\r\n    if (counter % 32 == 0) { // 64 = 128ms, 32 = 64ms\r\n      if (pidTaskNotification) {\r\n        vTaskNotifyGiveFromISR(pidTaskNotification, &xHigherPriorityTaskWoken);\r\n        portYIELD_FROM_ISR(xHigherPriorityTaskWoken);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nextern osThreadId POWTaskHandle;\r\nvoid              HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {\r\n  (void)GPIO_Pin;\r\n  // Notify POW thread that an irq occured\r\n  if (POWTaskHandle != nullptr) {\r\n    BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r\n    xTaskNotifyFromISR(POWTaskHandle, 1, eSetBits, &xHigherPriorityTaskWoken);\r\n    /* Force a context switch if xHigherPriorityTaskWoken is now set to pdTRUE.\r\n    The macro used to do this is dependent on the port and may be called\r\n    portEND_SWITCHING_ISR. */\r\n    portYIELD_FROM_ISR(xHigherPriorityTaskWoken);\r\n  }\r\n}\r\n\r\nbool getFUS302IRQLow() {\r\n#ifdef POW_PD\r\n  // Return true if the IRQ line is still held low\r\n  return HAL_GPIO_ReadPin(INT_PD_GPIO_Port, INT_PD_Pin) == GPIO_PIN_RESET;\r\n#else\r\n  return false;\r\n#endif\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/IRQ.h",
    "content": "/*\r\n * Irqs.h\r\n *\r\n *  Created on: 30 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_MINIWARE_IRQ_H_\r\n#define BSP_MINIWARE_IRQ_H_\r\n\r\n#include \"BSP.h\"\r\n#include \"I2C_Wrapper.hpp\"\r\n#include \"Setup.h\"\r\n#include \"main.hpp\"\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\nvoid HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc);\r\nvoid HAL_GPIO_EXTI_Callback(uint16_t);\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n#endif /* BSP_MINIWARE_IRQ_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Pins.h",
    "content": "/*\r\n * Pins.h\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_MINIWARE_PINS_H_\r\n#define BSP_MINIWARE_PINS_H_\r\n#include \"configuration.h\"\r\n\r\n// MHP30 pin map\r\n#define KEY_B_Pin                     GPIO_PIN_0\r\n#define KEY_B_GPIO_Port               GPIOB\r\n#define TMP36_INPUT_Pin               GPIO_PIN_1\r\n#define TMP36_INPUT_GPIO_Port         GPIOB\r\n#define TMP36_ADC1_CHANNEL            ADC_CHANNEL_9\r\n#define TMP36_ADC2_CHANNEL            ADC_CHANNEL_9\r\n#define TIP_TEMP_Pin                  GPIO_PIN_2\r\n#define TIP_TEMP_GPIO_Port            GPIOA\r\n#define TIP_TEMP_ADC1_CHANNEL         ADC_CHANNEL_2\r\n#define TIP_TEMP_ADC2_CHANNEL         ADC_CHANNEL_2\r\n#define VIN_Pin                       GPIO_PIN_1\r\n#define VIN_GPIO_Port                 GPIOA\r\n#define VIN_ADC1_CHANNEL              ADC_CHANNEL_1\r\n#define VIN_ADC2_CHANNEL              ADC_CHANNEL_1\r\n#define OLED_RESET_Pin                GPIO_PIN_4\r\n#define OLED_RESET_GPIO_Port          GPIOB\r\n#define KEY_A_Pin                     GPIO_PIN_10\r\n#define KEY_A_GPIO_Port               GPIOA\r\n#define PWM_Out_Pin                   GPIO_PIN_6\r\n#define PWM_Out_GPIO_Port             GPIOA\r\n#define PWM_Out_CHANNEL               TIM_CHANNEL_1\r\n#define BUZZER_Pin                    GPIO_PIN_7\r\n#define BUZZER_GPIO_Port              GPIOA\r\n#define BUZZER_CHANNEL                TIM_CHANNEL_2\r\n#define SCL_Pin                       GPIO_PIN_6\r\n#define SCL_GPIO_Port                 GPIOB\r\n#define SDA_Pin                       GPIO_PIN_7\r\n#define SDA_GPIO_Port                 GPIOB\r\n#define SCL2_Pin                      GPIO_PIN_3\r\n#define SCL2_GPIO_Port                GPIOB\r\n#define SDA2_Pin                      GPIO_PIN_15\r\n#define SDA2_GPIO_Port                GPIOA\r\n#define INT_PD_Pin                    GPIO_PIN_5\r\n#define INT_PD_GPIO_Port              GPIOB\r\n#define HEAT_EN_Pin                   GPIO_PIN_3\r\n#define HEAT_EN_GPIO_Port             GPIOA\r\n#define PLATE_SENSOR_PULLUP_Pin       GPIO_PIN_1\r\n#define PLATE_SENSOR_PULLUP_GPIO_Port GPIOD\r\n\r\n#define PLATE_SENSOR_Pin          GPIO_PIN_5\r\n#define PLATE_SENSOR_GPIO_Port    GPIOA\r\n#define PLATE_SENSOR_ADC1_CHANNEL ADC_CHANNEL_5\r\n#define PLATE_SENSOR_ADC2_CHANNEL ADC_CHANNEL_5\r\n\r\n#define WS2812_Pin       GPIO_PIN_8\r\n#define WS2812_GPIO_Port GPIOA\r\n#endif /* BSP_MINIWARE_PINS_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Power.cpp",
    "content": "#include \"BSP.h\"\n#include \"BSP_Power.h\"\n#include \"Pins.h\"\n#include \"QC3.h\"\n#include \"Settings.h\"\n#include \"USBPD.h\"\n#include \"configuration.h\"\n\nvoid power_check() {\n#ifdef POW_PD\n\n  // Cant start QC until either PD works or fails\n  if (USBPowerDelivery::negotiationComplete()) {\n    return;\n  }\n#endif\n}\n\nbool getIsPoweredByDCIN() { return false; }\n\nuint8_t getTipResistanceX10() { return TIP_RESISTANCE; }\nbool    isTipShorted() { return false; }"
  },
  {
    "path": "source/Core/BSP/MHP30/QC_GPIO.cpp",
    "content": "/*\r\n * QC.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n#include \"BSP.h\"\r\n#include \"Pins.h\"\r\n#include \"QC3.h\"\r\n#include \"Settings.h\"\r\n#include \"configuration.h\"\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n#ifdef POW_QC\r\nvoid QC_DPlusZero_Six() {\r\n  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET); // pull down D+\r\n}\r\nvoid QC_DNegZero_Six() {\r\n  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET);\r\n  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);\r\n}\r\nvoid QC_DPlusThree_Three() {\r\n  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET); // pull up D+\r\n}\r\nvoid QC_DNegThree_Three() {\r\n  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET);\r\n  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);\r\n}\r\nvoid QC_DM_PullDown() {\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;\r\n  GPIO_InitStruct.Mode  = GPIO_MODE_INPUT;\r\n  GPIO_InitStruct.Pull  = GPIO_PULLDOWN;\r\n  GPIO_InitStruct.Pin   = GPIO_PIN_11;\r\n  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);\r\n}\r\nvoid QC_DM_No_PullDown() {\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;\r\n  GPIO_InitStruct.Mode  = GPIO_MODE_INPUT;\r\n  GPIO_InitStruct.Pull  = GPIO_NOPULL;\r\n  GPIO_InitStruct.Pin   = GPIO_PIN_11;\r\n  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);\r\n}\r\nvoid QC_Init_GPIO() {\r\n  // Setup any GPIO into the right states for QC\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  GPIO_InitStruct.Pin   = GPIO_PIN_3;\r\n  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;\r\n  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);\r\n  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;\r\n  GPIO_InitStruct.Pull = GPIO_NOPULL;\r\n  GPIO_InitStruct.Pin  = GPIO_PIN_8 | GPIO_PIN_10;\r\n  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);\r\n  // Turn off output mode on pins that we can\r\n  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;\r\n  GPIO_InitStruct.Pull = GPIO_NOPULL;\r\n  GPIO_InitStruct.Pin  = GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_14 | GPIO_PIN_13;\r\n  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);\r\n}\r\nvoid QC_Post_Probe_En() {\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;\r\n  GPIO_InitStruct.Pin   = GPIO_PIN_8 | GPIO_PIN_10;\r\n  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;\r\n  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);\r\n}\r\n\r\nuint8_t QC_DM_PulledDown() { return HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_11) == GPIO_PIN_RESET ? 1 : 0; }\r\n#endif\r\nvoid QC_resync() {\r\n#ifdef POW_QC\r\n  seekQC(systemSettings.QCIdealVoltage, systemSettings.voltageDiv); // Run the QC seek again if we have drifted too much\r\n#endif\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/README.md",
    "content": "# BSP section for STM32F103 based Miniware products\r\n\r\nThis folder contains the hardware abstractions required for the TS100, TS80 and probably TS80P soldering irons.\r\n\r\n## Main abstractions\r\n\r\n* Hardware Init\r\n* -> Should contain all bootstrap to bring the hardware up to an operating point\r\n* -> Two functions are required, a pre and post FreeRToS call\r\n* I2C read/write\r\n* Set PWM for the tip\r\n* Links between IRQ's on the system and the calls in the rest of the firmware\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Setup.c",
    "content": "/*\n * Setup.c\n *\n *  Created on: 29Aug.,2017\n *      Author: Ben V. Brown\n */\n#include \"Setup.h\"\n#include \"Pins.h\"\n#include <string.h>\nADC_HandleTypeDef hadc1;\nADC_HandleTypeDef hadc2;\nDMA_HandleTypeDef hdma_adc1;\n\nIWDG_HandleTypeDef hiwdg;\nTIM_HandleTypeDef  htim2;\nTIM_HandleTypeDef  htim3;\n#define ADC_CHANNELS 4\n#define ADC_SAMPLES  16\nuint32_t ADCReadings[ADC_SAMPLES * ADC_CHANNELS]; // room for 32 lots of the pair of readings\n\n// Functions\nstatic void SystemClock_Config(void);\nstatic void MX_ADC1_Init(void);\n\nstatic void MX_IWDG_Init(void);\nstatic void MX_TIM3_Init(void);\nstatic void MX_TIM2_Init(void);\nstatic void MX_DMA_Init(void);\nstatic void MX_GPIO_Init(void);\nstatic void MX_ADC2_Init(void);\nvoid        Setup_HAL() {\n  SystemClock_Config();\n\n  __HAL_AFIO_REMAP_SWJ_NOJTAG();\n\n  MX_GPIO_Init();\n  MX_DMA_Init();\n\n  MX_ADC1_Init();\n  MX_ADC2_Init();\n  MX_TIM3_Init();\n  MX_TIM2_Init();\n  MX_IWDG_Init();\n  HAL_ADC_Start(&hadc2);\n  HAL_ADCEx_MultiModeStart_DMA(&hadc1, ADCReadings,\n                                      (ADC_SAMPLES * ADC_CHANNELS)); // start DMA of normal readings\n                                                              // HAL_ADCEx_InjectedStart(&hadc1); // enable injected readings\n                                                              // HAL_ADCEx_InjectedStart(&hadc2); // enable injected readings\n}\n\n// channel 0 -> temperature sensor, 1-> VIN, 2-> tip\nuint16_t getADC(uint8_t channel) {\n  uint32_t sum = 0;\n  for (uint8_t i = 0; i < ADC_SAMPLES; i++) {\n    uint16_t adc1Sample = ADCReadings[channel + (i * ADC_CHANNELS)];\n    uint16_t adc2Sample = ADCReadings[channel + (i * ADC_CHANNELS)] >> 16;\n\n    sum += (adc1Sample + adc2Sample);\n  }\n  return sum >> 2;\n}\n\n/** System Clock Configuration\n */\nvoid SystemClock_Config(void) {\n  RCC_OscInitTypeDef       RCC_OscInitStruct;\n  RCC_ClkInitTypeDef       RCC_ClkInitStruct;\n  RCC_PeriphCLKInitTypeDef PeriphClkInit;\n\n  /**Initializes the CPU, AHB and APB busses clocks\n   */\n  RCC_OscInitStruct.OscillatorType      = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSI;\n  RCC_OscInitStruct.HSIState            = RCC_HSI_ON;\n  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;\n  RCC_OscInitStruct.LSIState            = RCC_LSI_ON;\n  RCC_OscInitStruct.PLL.PLLState        = RCC_PLL_ON;\n  RCC_OscInitStruct.PLL.PLLSource       = RCC_PLLSOURCE_HSI_DIV2;\n  RCC_OscInitStruct.PLL.PLLMUL          = RCC_PLL_MUL16; // 64MHz\n  HAL_RCC_OscConfig(&RCC_OscInitStruct);\n\n  /**Initializes the CPU, AHB and APB busses clocks\n   */\n  RCC_ClkInitStruct.ClockType      = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;\n  RCC_ClkInitStruct.SYSCLKSource   = RCC_SYSCLKSOURCE_PLLCLK;\n  RCC_ClkInitStruct.AHBCLKDivider  = RCC_SYSCLK_DIV1;\n  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; // TIM\n                                                    // 2,3,4,5,6,7,12,13,14\n  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; // 64 mhz to some peripherals and adc\n\n  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);\n\n  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;\n  PeriphClkInit.AdcClockSelection    = RCC_CFGR_ADCPRE_DIV8; // 6 or 8 are the only non overclocked options\n  HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);\n\n  /**Configure the Systick interrupt time\n   */\n  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);\n\n  /**Configure the Systick\n   */\n  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);\n\n  /* SysTick_IRQn interrupt configuration */\n  HAL_NVIC_SetPriority(SysTick_IRQn, 15, 0);\n}\n\n/* ADC1 init function */\nstatic void MX_ADC1_Init(void) {\n  ADC_MultiModeTypeDef multimode;\n\n  ADC_ChannelConfTypeDef sConfig;\n  /**Common config\n   */\n  hadc1.Instance                   = ADC1;\n  hadc1.Init.ScanConvMode          = ADC_SCAN_ENABLE;\n  hadc1.Init.ContinuousConvMode    = ENABLE;\n  hadc1.Init.DiscontinuousConvMode = DISABLE;\n  hadc1.Init.ExternalTrigConv      = ADC_SOFTWARE_START;\n  hadc1.Init.DataAlign             = ADC_DATAALIGN_RIGHT;\n  hadc1.Init.NbrOfConversion       = ADC_CHANNELS;\n  HAL_ADC_Init(&hadc1);\n\n  /**Configure the ADC multi-mode\n   */\n  multimode.Mode = ADC_DUALMODE_REGSIMULT_INJECSIMULT;\n  HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode);\n\n  /**Configure Regular Channel\n   */\n  sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;\n\n  sConfig.Channel = TMP36_ADC1_CHANNEL;\n  sConfig.Rank    = ADC_REGULAR_RANK_1;\n  HAL_ADC_ConfigChannel(&hadc1, &sConfig);\n\n  /**Configure Regular Channel\n   */\n  sConfig.Channel = VIN_ADC1_CHANNEL;\n  sConfig.Rank    = ADC_REGULAR_RANK_2;\n  HAL_ADC_ConfigChannel(&hadc1, &sConfig);\n\n  sConfig.Channel = TIP_TEMP_ADC1_CHANNEL;\n  sConfig.Rank    = ADC_REGULAR_RANK_3;\n  HAL_ADC_ConfigChannel(&hadc1, &sConfig);\n\n  sConfig.Channel = PLATE_SENSOR_ADC1_CHANNEL;\n  sConfig.Rank    = ADC_REGULAR_RANK_4;\n  HAL_ADC_ConfigChannel(&hadc1, &sConfig);\n\n  SET_BIT(hadc1.Instance->CR1, (ADC_CR1_EOSIE)); // Enable end of Normal\n  // Run ADC internal calibration\n  while (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK) {\n    ;\n  }\n}\n\n/* ADC2 init function */\nstatic void MX_ADC2_Init(void) {\n  ADC_ChannelConfTypeDef sConfig;\n\n  /**Common config\n   */\n  hadc2.Instance                   = ADC2;\n  hadc2.Init.ScanConvMode          = ADC_SCAN_ENABLE;\n  hadc2.Init.ContinuousConvMode    = ENABLE;\n  hadc2.Init.DiscontinuousConvMode = DISABLE;\n  hadc2.Init.ExternalTrigConv      = ADC_SOFTWARE_START;\n  hadc2.Init.DataAlign             = ADC_DATAALIGN_RIGHT;\n  hadc2.Init.NbrOfConversion       = ADC_CHANNELS;\n  HAL_ADC_Init(&hadc2);\n  sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;\n\n  /**Configure Regular Channel\n   */\n  sConfig.Channel = TMP36_ADC2_CHANNEL;\n  sConfig.Rank    = ADC_REGULAR_RANK_1;\n  HAL_ADC_ConfigChannel(&hadc2, &sConfig);\n\n  sConfig.Channel = VIN_ADC2_CHANNEL;\n  sConfig.Rank    = ADC_REGULAR_RANK_2;\n  HAL_ADC_ConfigChannel(&hadc2, &sConfig);\n  sConfig.Channel = TIP_TEMP_ADC1_CHANNEL;\n  sConfig.Rank    = ADC_REGULAR_RANK_3;\n  HAL_ADC_ConfigChannel(&hadc2, &sConfig);\n  sConfig.Channel = PLATE_SENSOR_ADC2_CHANNEL;\n  sConfig.Rank    = ADC_REGULAR_RANK_4;\n  HAL_ADC_ConfigChannel(&hadc2, &sConfig);\n\n  // Run ADC internal calibration\n  while (HAL_ADCEx_Calibration_Start(&hadc2) != HAL_OK) {\n    ;\n  }\n}\n\n/* IWDG init function */\nstatic void MX_IWDG_Init(void) {\n  hiwdg.Instance       = IWDG;\n  hiwdg.Init.Prescaler = IWDG_PRESCALER_256;\n  hiwdg.Init.Reload    = 100;\n#ifndef SWD_ENABLE\n  HAL_IWDG_Init(&hiwdg);\n#endif\n}\n\n/* TIM3 init function */\nstatic void MX_TIM3_Init(void) {\n  TIM_ClockConfigTypeDef  sClockSourceConfig;\n  TIM_MasterConfigTypeDef sMasterConfig;\n  TIM_OC_InitTypeDef      sConfigOC;\n  memset(&sClockSourceConfig, 0, sizeof(sClockSourceConfig));\n  memset(&sMasterConfig, 0, sizeof(sMasterConfig));\n  memset(&sConfigOC, 0, sizeof(sConfigOC));\n  htim3.Instance               = TIM3;\n  htim3.Init.Prescaler         = 1;\n  htim3.Init.CounterMode       = TIM_COUNTERMODE_UP;\n  htim3.Init.Period            = 255;                           //\n  htim3.Init.ClockDivision     = TIM_CLOCKDIVISION_DIV1;        // 4mhz before div\n  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; // Preload the ARR register (though we dont use this)\n  HAL_TIM_Base_Init(&htim3);\n\n  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;\n  HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig);\n\n  HAL_TIM_PWM_Init(&htim3);\n\n  HAL_TIM_OC_Init(&htim3);\n\n  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;\n  sMasterConfig.MasterSlaveMode     = TIM_MASTERSLAVEMODE_DISABLE;\n  HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig);\n\n  sConfigOC.OCMode     = TIM_OCMODE_PWM1;\n  sConfigOC.Pulse      = 0; // Output control\n  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;\n  sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;\n  HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, PWM_Out_CHANNEL);\n  HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, BUZZER_CHANNEL);\n  GPIO_InitTypeDef GPIO_InitStruct;\n\n  /**TIM3 GPIO Configuration\n   PWM_Out_Pin     ------> TIM3_CH1\n   */\n  GPIO_InitStruct.Pin   = PWM_Out_Pin | BUZZER_Pin;\n  GPIO_InitStruct.Mode  = GPIO_MODE_AF_PP;\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // We would like sharp rising edges\n  HAL_GPIO_Init(PWM_Out_GPIO_Port, &GPIO_InitStruct);\n  HAL_TIM_PWM_Start(&htim3, PWM_Out_CHANNEL);\n  HAL_TIM_PWM_Start(&htim3, BUZZER_CHANNEL);\n}\n/* TIM3 init function */\nstatic void MX_TIM2_Init(void) {\n\n  TIM_ClockConfigTypeDef  sClockSourceConfig;\n  TIM_MasterConfigTypeDef sMasterConfig;\n  TIM_OC_InitTypeDef      sConfigOC;\n\n  htim2.Instance       = TIM2;\n  htim2.Init.Prescaler = 200; // 2 MHz timer clock/2000 = 1 kHz tick rate\n\n  // pwm out is 10k from tim3, we want to run our PWM at around 10hz or slower on the output stage\n  // These values give a rate of around 3.5 Hz for \"fast\" mode and 1.84 Hz for \"slow\"\n  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;\n  // dummy value, will be reconfigured by BSPInit()\n  htim2.Init.Period            = 10;\n  htim2.Init.ClockDivision     = TIM_CLOCKDIVISION_DIV1; // 8 MHz (x2 APB1) before divide\n  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;\n  htim2.Init.RepetitionCounter = 0;\n  HAL_TIM_Base_Init(&htim2);\n\n  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;\n  HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig);\n\n  HAL_TIM_PWM_Init(&htim2);\n\n  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;\n  sMasterConfig.MasterSlaveMode     = TIM_MASTERSLAVEMODE_DISABLE;\n  HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);\n\n  sConfigOC.OCMode = TIM_OCMODE_PWM1;\n  // dummy value, will be reconfigured by BSPInit() in the BSP.cpp\n  sConfigOC.Pulse      = 5;\n  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;\n  sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;\n  HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4);\n  GPIO_InitTypeDef GPIO_InitStruct;\n  GPIO_InitStruct.Pin   = HEAT_EN_Pin;\n  GPIO_InitStruct.Mode  = GPIO_MODE_AF_PP;\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // We would like sharp rising edges\n  HAL_GPIO_Init(HEAT_EN_GPIO_Port, &GPIO_InitStruct);\n  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);\n}\n\n/**\n * Enable DMA controller clock\n */\nstatic void MX_DMA_Init(void) {\n  /* DMA controller clock enable */\n  __HAL_RCC_DMA1_CLK_ENABLE();\n\n  /* DMA interrupt init */\n  /* DMA1_Channel1_IRQn interrupt configuration */\n  HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 10, 0);\n  HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);\n  /* DMA1_Channel6_IRQn interrupt configuration */\n  HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 5, 0);\n  HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn);\n  /* DMA1_Channel7_IRQn interrupt configuration */\n  HAL_NVIC_SetPriority(DMA1_Channel7_IRQn, 5, 0);\n  HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn);\n}\n\nstatic void MX_GPIO_Init(void) {\n  GPIO_InitTypeDef GPIO_InitStruct;\n  memset(&GPIO_InitStruct, 0, sizeof(GPIO_InitStruct));\n\n  /* GPIO Ports Clock Enable */\n  __HAL_RCC_GPIOD_CLK_ENABLE();\n  __HAL_RCC_GPIOA_CLK_ENABLE();\n  __HAL_RCC_GPIOB_CLK_ENABLE();\n\n  /*Configure GPIO pin Output Level */\n  HAL_GPIO_WritePin(OLED_RESET_GPIO_Port, OLED_RESET_Pin, GPIO_PIN_RESET);\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;\n  /*Configure GPIO pins : PD0 PD1 */\n  GPIO_InitStruct.Pin  = GPIO_PIN_0 | GPIO_PIN_1;\n  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;\n  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);\n  /*Configure peripheral I/O remapping */\n  __HAL_AFIO_REMAP_PD01_ENABLE();\n  //^ remap XTAL so that pins used\n\n  /*\n   * Configure All pins as analog by default\n   */\n  GPIO_InitStruct.Pin  = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_10 | GPIO_PIN_15;\n  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;\n  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);\n  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 |\n                        GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;\n  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);\n\n  /*Configure GPIO pins : KEY_B_Pin KEY_A_Pin */\n  GPIO_InitStruct.Pin  = KEY_B_Pin;\n  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;\n  GPIO_InitStruct.Pull = GPIO_PULLUP;\n  HAL_GPIO_Init(KEY_B_GPIO_Port, &GPIO_InitStruct);\n  GPIO_InitStruct.Pin  = KEY_A_Pin;\n  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;\n  GPIO_InitStruct.Pull = GPIO_PULLUP;\n  HAL_GPIO_Init(KEY_A_GPIO_Port, &GPIO_InitStruct);\n\n  /*Configure GPIO pin : OLED_RESET_Pin */\n  GPIO_InitStruct.Pin   = OLED_RESET_Pin;\n  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;\n  HAL_GPIO_Init(OLED_RESET_GPIO_Port, &GPIO_InitStruct);\n\n  GPIO_InitStruct.Pin   = WS2812_Pin;\n  GPIO_InitStruct.Pull  = GPIO_NOPULL;\n  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;\n  HAL_GPIO_Init(WS2812_GPIO_Port, &GPIO_InitStruct);\n  HAL_GPIO_WritePin(WS2812_GPIO_Port, WS2812_Pin, GPIO_PIN_RESET);\n  // Pull down LCD reset\n  HAL_GPIO_WritePin(OLED_RESET_GPIO_Port, OLED_RESET_Pin, GPIO_PIN_RESET);\n  HAL_Delay(30);\n  HAL_GPIO_WritePin(OLED_RESET_GPIO_Port, OLED_RESET_Pin, GPIO_PIN_SET);\n}\n\n#ifdef USE_FULL_ASSERT\nvoid assert_failed(uint8_t *file, uint32_t line) { asm(\"bkpt\"); }\n#endif\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Setup.h",
    "content": "/*\r\n * Setup.h\r\n *\r\n *  Created on: 29Aug.,2017\r\n *      Author: Ben V. Brown\r\n */\r\n\r\n#ifndef SETUP_H_\r\n#define SETUP_H_\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n#include \"stm32f1xx_hal.h\"\r\n\r\nextern ADC_HandleTypeDef hadc1;\r\nextern ADC_HandleTypeDef hadc2;\r\nextern DMA_HandleTypeDef hdma_adc1;\r\n\r\nextern DMA_HandleTypeDef hdma_i2c1_rx;\r\nextern DMA_HandleTypeDef hdma_i2c1_tx;\r\n\r\nextern IWDG_HandleTypeDef hiwdg;\r\n\r\nextern TIM_HandleTypeDef htim1;\r\nextern DMA_HandleTypeDef hdma_tim1_ch1;\r\nextern TIM_HandleTypeDef htim2;\r\nextern TIM_HandleTypeDef htim3;\r\nvoid                     Setup_HAL();\r\nuint16_t                 getADC(uint8_t channel);\r\n\r\nvoid HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); // Since the hal header file does not define this one\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* SETUP_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Software_I2C.h",
    "content": "/*\r\n * Software_I2C.h\r\n *\r\n *  Created on: 25 Jul 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_MINIWARE_SOFTWARE_I2C_H_\r\n#define BSP_MINIWARE_SOFTWARE_I2C_H_\r\n#include \"BSP.h\"\r\n#include \"configuration.h\"\r\n#include \"stm32f1xx_hal.h\"\r\n#ifdef I2C_SOFT_BUS_2\r\n\r\n#define SOFT_SCL2_HIGH() HAL_GPIO_WritePin(SCL2_GPIO_Port, SCL2_Pin, GPIO_PIN_SET)\r\n#define SOFT_SCL2_LOW()  HAL_GPIO_WritePin(SCL2_GPIO_Port, SCL2_Pin, GPIO_PIN_RESET)\r\n#define SOFT_SDA2_HIGH() HAL_GPIO_WritePin(SDA2_GPIO_Port, SDA2_Pin, GPIO_PIN_SET)\r\n#define SOFT_SDA2_LOW()  HAL_GPIO_WritePin(SDA2_GPIO_Port, SDA2_Pin, GPIO_PIN_RESET)\r\n#define SOFT_SDA2_READ() (HAL_GPIO_ReadPin(SDA2_GPIO_Port, SDA2_Pin) == GPIO_PIN_SET ? 1 : 0)\r\n#define SOFT_SCL2_READ() (HAL_GPIO_ReadPin(SCL2_GPIO_Port, SCL2_Pin) == GPIO_PIN_SET ? 1 : 0)\r\n\r\n#endif\r\n\r\n#ifdef I2C_SOFT_BUS_1\r\n#define SOFT_SCL1_HIGH() HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_SET)\r\n#define SOFT_SCL1_LOW()  HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_RESET)\r\n#define SOFT_SDA1_HIGH() HAL_GPIO_WritePin(SDA_GPIO_Port, SDA_Pin, GPIO_PIN_SET)\r\n#define SOFT_SDA1_LOW()  HAL_GPIO_WritePin(SDA_GPIO_Port, SDA_Pin, GPIO_PIN_RESET)\r\n#define SOFT_SDA1_READ() (HAL_GPIO_ReadPin(SDA_GPIO_Port, SDA_Pin) == GPIO_PIN_SET ? 1 : 0)\r\n#define SOFT_SCL1_READ() (HAL_GPIO_ReadPin(SCL_GPIO_Port, SCL_Pin) == GPIO_PIN_SET ? 1 : 0)\r\n\r\n#endif\r\n\r\n#define SOFT_I2C_DELAY()              \\\r\n  {                                   \\\r\n    for (int xx = 0; xx < 15; xx++) { \\\r\n      asm(\"nop\");                     \\\r\n    }                                 \\\r\n  }\r\n\r\n// 40 ~= 100kHz; 15 gives around 250kHz or so which is fast _and_ stable\r\n\r\n#endif /* BSP_MINIWARE_SOFTWARE_I2C_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Startup/startup_stm32f103t8ux.S",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file      startup_stm32.s\r\n  * @author    Ac6\r\n  * @version   V1.0.0\r\n  * @date      12-June-2014\r\n  ******************************************************************************\r\n  */\r\n\r\n  .syntax unified\r\n  .cpu cortex-m3\r\n  .thumb\r\n\r\n.global\tg_pfnVectors\r\n.global\tDefault_Handler\r\n\r\n/* start address for the initialization values of the .data section.\r\ndefined in linker script */\r\n.word\t_sidata\r\n/* start address for the .data section. defined in linker script */\r\n.word\t_sdata\r\n/* end address for the .data section. defined in linker script */\r\n.word\t_edata\r\n/* start address for the .bss section. defined in linker script */\r\n.word\t_sbss\r\n/* end address for the .bss section. defined in linker script */\r\n.word\t_ebss\r\n\r\n.equ  BootRAM,        0xF1E0F85F\r\n/**\r\n * @brief  This is the code that gets called when the processor first\r\n *          starts execution following a reset event. Only the absolutely\r\n *          necessary set is performed, after which the application\r\n *          supplied main() routine is called.\r\n * @param  None\r\n * @retval : None\r\n*/\r\n\r\n    .section\t.text.Reset_Handler\r\n\t.weak\tReset_Handler\r\n\t.type\tReset_Handler, %function\r\nReset_Handler:\r\n\r\n/* Copy the data segment initializers from flash to SRAM */\r\n  movs\tr1, #0\r\n  b\tLoopCopyDataInit\r\n\r\nCopyDataInit:\r\n\tldr\tr3, =_sidata\r\n\tldr\tr3, [r3, r1]\r\n\tstr\tr3, [r0, r1]\r\n\tadds\tr1, r1, #4\r\n\r\nLoopCopyDataInit:\r\n\tldr\tr0, =_sdata\r\n\tldr\tr3, =_edata\r\n\tadds\tr2, r0, r1\r\n\tcmp\tr2, r3\r\n\tbcc\tCopyDataInit\r\n\tldr\tr2, =_sbss\r\n\tb\tLoopFillZerobss\r\n/* Zero fill the bss segment. */\r\nFillZerobss:\r\n\tmovs r3, #0\r\n \tstr  r3, [r2]\r\n\tadds r2, r2, #4\r\n\r\nLoopFillZerobss:\r\n\tldr\tr3, = _ebss\r\n\tcmp\tr2, r3\r\n\tbcc\tFillZerobss\r\n\r\n/* Call the clock system intitialization function.*/\r\n    bl  SystemInit\r\n/* Call static constructors */\r\n    bl __libc_init_array\r\n/* Call the application's entry point.*/\r\n\tbl\tmain\r\n\r\nLoopForever:\r\n    b LoopForever\r\n\r\n.size\tReset_Handler, .-Reset_Handler\r\n\r\n/**\r\n * @brief  This is the code that gets called when the processor receives an\r\n *         unexpected interrupt.  This simply enters an infinite loop, preserving\r\n *         the system state for examination by a debugger.\r\n *\r\n * @param  None\r\n * @retval : None\r\n*/\r\n    .section\t.text.Default_Handler,\"ax\",%progbits\r\nDefault_Handler:\r\nInfinite_Loop:\r\n\tb\tInfinite_Loop\r\n\t.size\tDefault_Handler, .-Default_Handler\r\n/******************************************************************************\r\n*\r\n* The minimal vector table for a Cortex-M.  Note that the proper constructs\r\n* must be placed on this to ensure that it ends up at physical address\r\n* 0x0000.0000.\r\n*\r\n******************************************************************************/\r\n \t.section\t.isr_vector,\"a\",%progbits\r\n\t.type\tg_pfnVectors, %object\r\n\t.size\tg_pfnVectors, .-g_pfnVectors\r\n\r\ng_pfnVectors:\r\n\t.word _estack\r\n  .word Reset_Handler\r\n  .word NMI_Handler\r\n  .word HardFault_Handler\r\n  .word MemManage_Handler\r\n  .word BusFault_Handler\r\n  .word UsageFault_Handler\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word SVC_Handler\r\n  .word DebugMon_Handler\r\n  .word 0\r\n  .word PendSV_Handler\r\n  .word SysTick_Handler\r\n  .word WWDG_IRQHandler\r\n  .word PVD_IRQHandler\r\n  .word TAMPER_IRQHandler\r\n  .word RTC_IRQHandler\r\n  .word FLASH_IRQHandler\r\n  .word RCC_IRQHandler\r\n  .word EXTI0_IRQHandler\r\n  .word EXTI1_IRQHandler\r\n  .word EXTI2_IRQHandler\r\n  .word EXTI3_IRQHandler\r\n  .word EXTI4_IRQHandler\r\n  .word DMA1_Channel1_IRQHandler\r\n  .word DMA1_Channel2_IRQHandler\r\n  .word DMA1_Channel3_IRQHandler\r\n  .word DMA1_Channel4_IRQHandler\r\n  .word DMA1_Channel5_IRQHandler\r\n  .word DMA1_Channel6_IRQHandler\r\n  .word DMA1_Channel7_IRQHandler\r\n  .word ADC1_2_IRQHandler\r\n  .word USB_HP_CAN1_TX_IRQHandler\r\n  .word USB_LP_CAN1_RX0_IRQHandler\r\n  .word CAN1_RX1_IRQHandler\r\n  .word CAN1_SCE_IRQHandler\r\n  .word EXTI9_5_IRQHandler\r\n  .word TIM1_BRK_IRQHandler\r\n  .word TIM1_UP_IRQHandler\r\n  .word TIM1_TRG_COM_IRQHandler\r\n  .word TIM1_CC_IRQHandler\r\n  .word TIM2_IRQHandler\r\n  .word TIM3_IRQHandler\r\n  .word TIM4_IRQHandler\r\n  .word I2C1_EV_IRQHandler\r\n  .word I2C1_ER_IRQHandler\r\n  .word I2C2_EV_IRQHandler\r\n  .word I2C2_ER_IRQHandler\r\n  .word SPI1_IRQHandler\r\n  .word SPI2_IRQHandler\r\n  .word USART1_IRQHandler\r\n  .word USART2_IRQHandler\r\n  .word USART3_IRQHandler\r\n  .word EXTI15_10_IRQHandler\r\n  .word RTC_Alarm_IRQHandler\r\n  .word USBWakeUp_IRQHandler\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word BootRAM          /* @0x108. This is for boot in RAM mode for\r\n                            STM32F10x Medium Density devices. */\r\n\r\n/*******************************************************************************\r\n*\r\n* Provide weak aliases for each Exception handler to the Default_Handler.\r\n* As they are weak aliases, any function with the same name will override\r\n* this definition.\r\n*\r\n*******************************************************************************/\r\n\r\n  \t.weak NMI_Handler\r\n  .thumb_set NMI_Handler,Default_Handler\r\n\r\n  .weak HardFault_Handler\r\n  .thumb_set HardFault_Handler,Default_Handler\r\n\r\n  .weak MemManage_Handler\r\n  .thumb_set MemManage_Handler,Default_Handler\r\n\r\n  .weak BusFault_Handler\r\n  .thumb_set BusFault_Handler,Default_Handler\r\n\r\n  .weak UsageFault_Handler\r\n  .thumb_set UsageFault_Handler,Default_Handler\r\n\r\n  .weak SVC_Handler\r\n  .thumb_set SVC_Handler,Default_Handler\r\n\r\n  .weak DebugMon_Handler\r\n  .thumb_set DebugMon_Handler,Default_Handler\r\n\r\n  .weak PendSV_Handler\r\n  .thumb_set PendSV_Handler,Default_Handler\r\n\r\n  .weak SysTick_Handler\r\n  .thumb_set SysTick_Handler,Default_Handler\r\n\r\n  .weak WWDG_IRQHandler\r\n  .thumb_set WWDG_IRQHandler,Default_Handler\r\n\r\n  .weak PVD_IRQHandler\r\n  .thumb_set PVD_IRQHandler,Default_Handler\r\n\r\n  .weak TAMPER_IRQHandler\r\n  .thumb_set TAMPER_IRQHandler,Default_Handler\r\n\r\n  .weak RTC_IRQHandler\r\n  .thumb_set RTC_IRQHandler,Default_Handler\r\n\r\n  .weak FLASH_IRQHandler\r\n  .thumb_set FLASH_IRQHandler,Default_Handler\r\n\r\n  .weak RCC_IRQHandler\r\n  .thumb_set RCC_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI0_IRQHandler\r\n  .thumb_set EXTI0_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI1_IRQHandler\r\n  .thumb_set EXTI1_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI2_IRQHandler\r\n  .thumb_set EXTI2_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI3_IRQHandler\r\n  .thumb_set EXTI3_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI4_IRQHandler\r\n  .thumb_set EXTI4_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel1_IRQHandler\r\n  .thumb_set DMA1_Channel1_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel2_IRQHandler\r\n  .thumb_set DMA1_Channel2_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel3_IRQHandler\r\n  .thumb_set DMA1_Channel3_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel4_IRQHandler\r\n  .thumb_set DMA1_Channel4_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel5_IRQHandler\r\n  .thumb_set DMA1_Channel5_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel6_IRQHandler\r\n  .thumb_set DMA1_Channel6_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel7_IRQHandler\r\n  .thumb_set DMA1_Channel7_IRQHandler,Default_Handler\r\n\r\n  .weak ADC1_2_IRQHandler\r\n  .thumb_set ADC1_2_IRQHandler,Default_Handler\r\n\r\n  .weak USB_HP_CAN1_TX_IRQHandler\r\n  .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler\r\n\r\n  .weak USB_LP_CAN1_RX0_IRQHandler\r\n  .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler\r\n\r\n  .weak CAN1_RX1_IRQHandler\r\n  .thumb_set CAN1_RX1_IRQHandler,Default_Handler\r\n\r\n  .weak CAN1_SCE_IRQHandler\r\n  .thumb_set CAN1_SCE_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI9_5_IRQHandler\r\n  .thumb_set EXTI9_5_IRQHandler,Default_Handler\r\n\r\n  .weak TIM1_BRK_IRQHandler\r\n  .thumb_set TIM1_BRK_IRQHandler,Default_Handler\r\n\r\n  .weak TIM1_UP_IRQHandler\r\n  .thumb_set TIM1_UP_IRQHandler,Default_Handler\r\n\r\n  .weak TIM1_TRG_COM_IRQHandler\r\n  .thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler\r\n\r\n  .weak TIM1_CC_IRQHandler\r\n  .thumb_set TIM1_CC_IRQHandler,Default_Handler\r\n\r\n  .weak TIM2_IRQHandler\r\n  .thumb_set TIM2_IRQHandler,Default_Handler\r\n\r\n  .weak TIM3_IRQHandler\r\n  .thumb_set TIM3_IRQHandler,Default_Handler\r\n\r\n  .weak TIM4_IRQHandler\r\n  .thumb_set TIM4_IRQHandler,Default_Handler\r\n\r\n  .weak I2C1_EV_IRQHandler\r\n  .thumb_set I2C1_EV_IRQHandler,Default_Handler\r\n\r\n  .weak I2C1_ER_IRQHandler\r\n  .thumb_set I2C1_ER_IRQHandler,Default_Handler\r\n\r\n  .weak I2C2_EV_IRQHandler\r\n  .thumb_set I2C2_EV_IRQHandler,Default_Handler\r\n\r\n  .weak I2C2_ER_IRQHandler\r\n  .thumb_set I2C2_ER_IRQHandler,Default_Handler\r\n\r\n  .weak SPI1_IRQHandler\r\n  .thumb_set SPI1_IRQHandler,Default_Handler\r\n\r\n  .weak SPI2_IRQHandler\r\n  .thumb_set SPI2_IRQHandler,Default_Handler\r\n\r\n  .weak USART1_IRQHandler\r\n  .thumb_set USART1_IRQHandler,Default_Handler\r\n\r\n  .weak USART2_IRQHandler\r\n  .thumb_set USART2_IRQHandler,Default_Handler\r\n\r\n  .weak USART3_IRQHandler\r\n  .thumb_set USART3_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI15_10_IRQHandler\r\n  .thumb_set EXTI15_10_IRQHandler,Default_Handler\r\n\r\n  .weak RTC_Alarm_IRQHandler\r\n  .thumb_set RTC_Alarm_IRQHandler,Default_Handler\r\n\r\n  .weak USBWakeUp_IRQHandler\r\n  .thumb_set USBWakeUp_IRQHandler,Default_Handler\r\n\r\n\r\n/************************ (C) COPYRIGHT Ac6 *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/ThermoModel.cpp",
    "content": "/*\r\n * ThermoModel.cpp\r\n *\r\n *  Created on: 1 May 2021\r\n *      Author: Ralim\r\n */\r\n#include \"Setup.h\"\r\n#include \"TipThermoModel.h\"\r\n#include \"Types.h\"\r\n#include \"Utils.hpp\"\r\n#include \"configuration.h\"\r\n\r\nextern uint16_t   tipSenseResistancex10Ohms;\r\nTemperatureType_t TipThermoModel::convertuVToDegC(uint32_t tipuVDelta) {\r\n  // For the MHP30, we are mimicing the original code and using the resistor fitted to the base of the heater head,\r\n  // this is measured at boot in pid task and in the disconnected tip check if tip is removed\r\n  if (tipSenseResistancex10Ohms > 900 && tipSenseResistancex10Ohms <= 1100) {\r\n    int32_t a = ((tipSenseResistancex10Ohms / 10) + 300) * (3300000 - tipuVDelta);\r\n    int32_t b = a / 1000000;\r\n    int32_t c = tipuVDelta - b;\r\n    int32_t d = c * 243 / 1000;\r\n    return d / 10;\r\n  }\r\n  return 0xFFFF;\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f103xb.h\r\n * @author  MCD Application Team\r\n * @brief   CMSIS Cortex-M3 Device Peripheral Access Layer Header File.\r\n *          This file contains all the peripheral register's definitions, bits\r\n *          definitions and memory mapping for STM32F1xx devices.\r\n *\r\n *          This file contains:\r\n *           - Data structures and the address mapping for all peripherals\r\n *           - Peripheral's registers declarations and bits definition\r\n *           - Macros to access peripherals registers hardware\r\n *\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/** @addtogroup CMSIS\r\n * @{\r\n */\r\n\r\n/** @addtogroup stm32f103xb\r\n * @{\r\n */\r\n\r\n#ifndef __STM32F103xB_H\r\n#define __STM32F103xB_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/** @addtogroup Configuration_section_for_CMSIS\r\n * @{\r\n */\r\n/**\r\n * @brief Configuration of the Cortex-M3 Processor and Core Peripherals\r\n */\r\n#define __CM3_REV              0x0200U /*!< Core Revision r2p0                           */\r\n#define __MPU_PRESENT          0U      /*!< Other STM32 devices does not provide an MPU  */\r\n#define __NVIC_PRIO_BITS       4U      /*!< STM32 uses 4 Bits for the Priority Levels    */\r\n#define __Vendor_SysTickConfig 0U      /*!< Set to 1 if different SysTick Config is used */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Peripheral_interrupt_number_definition\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief STM32F10x Interrupt Number Definition, according to the selected device\r\n *        in @ref Library_configuration_section\r\n */\r\n\r\n/*!< Interrupt Number Definition */\r\ntypedef enum {\r\n  /******  Cortex-M3 Processor Exceptions Numbers ***************************************************/\r\n  NonMaskableInt_IRQn   = -14, /*!< 2 Non Maskable Interrupt                             */\r\n  HardFault_IRQn        = -13, /*!< 3 Cortex-M3 Hard Fault Interrupt                     */\r\n  MemoryManagement_IRQn = -12, /*!< 4 Cortex-M3 Memory Management Interrupt              */\r\n  BusFault_IRQn         = -11, /*!< 5 Cortex-M3 Bus Fault Interrupt                      */\r\n  UsageFault_IRQn       = -10, /*!< 6 Cortex-M3 Usage Fault Interrupt                    */\r\n  SVCall_IRQn           = -5,  /*!< 11 Cortex-M3 SV Call Interrupt                       */\r\n  DebugMonitor_IRQn     = -4,  /*!< 12 Cortex-M3 Debug Monitor Interrupt                 */\r\n  PendSV_IRQn           = -2,  /*!< 14 Cortex-M3 Pend SV Interrupt                       */\r\n  SysTick_IRQn          = -1,  /*!< 15 Cortex-M3 System Tick Interrupt                   */\r\n\r\n  /******  STM32 specific Interrupt Numbers *********************************************************/\r\n  WWDG_IRQn            = 0,  /*!< Window WatchDog Interrupt                            */\r\n  PVD_IRQn             = 1,  /*!< PVD through EXTI Line detection Interrupt            */\r\n  TAMPER_IRQn          = 2,  /*!< Tamper Interrupt                                     */\r\n  RTC_IRQn             = 3,  /*!< RTC global Interrupt                                 */\r\n  FLASH_IRQn           = 4,  /*!< FLASH global Interrupt                               */\r\n  RCC_IRQn             = 5,  /*!< RCC global Interrupt                                 */\r\n  EXTI0_IRQn           = 6,  /*!< EXTI Line0 Interrupt                                 */\r\n  EXTI1_IRQn           = 7,  /*!< EXTI Line1 Interrupt                                 */\r\n  EXTI2_IRQn           = 8,  /*!< EXTI Line2 Interrupt                                 */\r\n  EXTI3_IRQn           = 9,  /*!< EXTI Line3 Interrupt                                 */\r\n  EXTI4_IRQn           = 10, /*!< EXTI Line4 Interrupt                                 */\r\n  DMA1_Channel1_IRQn   = 11, /*!< DMA1 Channel 1 global Interrupt                      */\r\n  DMA1_Channel2_IRQn   = 12, /*!< DMA1 Channel 2 global Interrupt                      */\r\n  DMA1_Channel3_IRQn   = 13, /*!< DMA1 Channel 3 global Interrupt                      */\r\n  DMA1_Channel4_IRQn   = 14, /*!< DMA1 Channel 4 global Interrupt                      */\r\n  DMA1_Channel5_IRQn   = 15, /*!< DMA1 Channel 5 global Interrupt                      */\r\n  DMA1_Channel6_IRQn   = 16, /*!< DMA1 Channel 6 global Interrupt                      */\r\n  DMA1_Channel7_IRQn   = 17, /*!< DMA1 Channel 7 global Interrupt                      */\r\n  ADC1_2_IRQn          = 18, /*!< ADC1 and ADC2 global Interrupt                       */\r\n  USB_HP_CAN1_TX_IRQn  = 19, /*!< USB Device High Priority or CAN1 TX Interrupts       */\r\n  USB_LP_CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts       */\r\n  CAN1_RX1_IRQn        = 21, /*!< CAN1 RX1 Interrupt                                   */\r\n  CAN1_SCE_IRQn        = 22, /*!< CAN1 SCE Interrupt                                   */\r\n  EXTI9_5_IRQn         = 23, /*!< External Line[9:5] Interrupts                        */\r\n  TIM1_BRK_IRQn        = 24, /*!< TIM1 Break Interrupt                                 */\r\n  TIM1_UP_IRQn         = 25, /*!< TIM1 Update Interrupt                                */\r\n  TIM1_TRG_COM_IRQn    = 26, /*!< TIM1 Trigger and Commutation Interrupt               */\r\n  TIM1_CC_IRQn         = 27, /*!< TIM1 Capture Compare Interrupt                       */\r\n  TIM2_IRQn            = 28, /*!< TIM2 global Interrupt                                */\r\n  TIM3_IRQn            = 29, /*!< TIM3 global Interrupt                                */\r\n  TIM4_IRQn            = 30, /*!< TIM4 global Interrupt                                */\r\n  I2C1_EV_IRQn         = 31, /*!< I2C1 Event Interrupt                                 */\r\n  I2C1_ER_IRQn         = 32, /*!< I2C1 Error Interrupt                                 */\r\n  I2C2_EV_IRQn         = 33, /*!< I2C2 Event Interrupt                                 */\r\n  I2C2_ER_IRQn         = 34, /*!< I2C2 Error Interrupt                                 */\r\n  SPI1_IRQn            = 35, /*!< SPI1 global Interrupt                                */\r\n  SPI2_IRQn            = 36, /*!< SPI2 global Interrupt                                */\r\n  USART1_IRQn          = 37, /*!< USART1 global Interrupt                              */\r\n  USART2_IRQn          = 38, /*!< USART2 global Interrupt                              */\r\n  USART3_IRQn          = 39, /*!< USART3 global Interrupt                              */\r\n  EXTI15_10_IRQn       = 40, /*!< External Line[15:10] Interrupts                      */\r\n  RTC_Alarm_IRQn       = 41, /*!< RTC Alarm through EXTI Line Interrupt                */\r\n  USBWakeUp_IRQn       = 42, /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */\r\n} IRQn_Type;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#include \"core_cm3.h\"\r\n#include \"system_stm32f1xx.h\"\r\n#include <stdint.h>\r\n\r\n/** @addtogroup Peripheral_registers_structures\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief Analog to Digital Converter\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t SR;\r\n  __IO uint32_t CR1;\r\n  __IO uint32_t CR2;\r\n  __IO uint32_t SMPR1;\r\n  __IO uint32_t SMPR2;\r\n  __IO uint32_t JOFR1;\r\n  __IO uint32_t JOFR2;\r\n  __IO uint32_t JOFR3;\r\n  __IO uint32_t JOFR4;\r\n  __IO uint32_t HTR;\r\n  __IO uint32_t LTR;\r\n  __IO uint32_t SQR1;\r\n  __IO uint32_t SQR2;\r\n  __IO uint32_t SQR3;\r\n  __IO uint32_t JSQR;\r\n  __IO uint32_t JDR1;\r\n  __IO uint32_t JDR2;\r\n  __IO uint32_t JDR3;\r\n  __IO uint32_t JDR4;\r\n  __IO uint32_t DR;\r\n} ADC_TypeDef;\r\n\r\ntypedef struct {\r\n  __IO uint32_t SR;  /*!< ADC status register,    used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address         */\r\n  __IO uint32_t CR1; /*!< ADC control register 1, used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address + 0x04  */\r\n  __IO uint32_t CR2; /*!< ADC control register 2, used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address + 0x08  */\r\n  uint32_t      RESERVED[16];\r\n  __IO uint32_t DR; /*!< ADC data register,      used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address + 0x4C  */\r\n} ADC_Common_TypeDef;\r\n\r\n/**\r\n * @brief Backup Registers\r\n */\r\n\r\ntypedef struct {\r\n  uint32_t      RESERVED0;\r\n  __IO uint32_t DR1;\r\n  __IO uint32_t DR2;\r\n  __IO uint32_t DR3;\r\n  __IO uint32_t DR4;\r\n  __IO uint32_t DR5;\r\n  __IO uint32_t DR6;\r\n  __IO uint32_t DR7;\r\n  __IO uint32_t DR8;\r\n  __IO uint32_t DR9;\r\n  __IO uint32_t DR10;\r\n  __IO uint32_t RTCCR;\r\n  __IO uint32_t CR;\r\n  __IO uint32_t CSR;\r\n} BKP_TypeDef;\r\n\r\n/**\r\n * @brief Controller Area Network TxMailBox\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t TIR;\r\n  __IO uint32_t TDTR;\r\n  __IO uint32_t TDLR;\r\n  __IO uint32_t TDHR;\r\n} CAN_TxMailBox_TypeDef;\r\n\r\n/**\r\n * @brief Controller Area Network FIFOMailBox\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t RIR;\r\n  __IO uint32_t RDTR;\r\n  __IO uint32_t RDLR;\r\n  __IO uint32_t RDHR;\r\n} CAN_FIFOMailBox_TypeDef;\r\n\r\n/**\r\n * @brief Controller Area Network FilterRegister\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t FR1;\r\n  __IO uint32_t FR2;\r\n} CAN_FilterRegister_TypeDef;\r\n\r\n/**\r\n * @brief Controller Area Network\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t              MCR;\r\n  __IO uint32_t              MSR;\r\n  __IO uint32_t              TSR;\r\n  __IO uint32_t              RF0R;\r\n  __IO uint32_t              RF1R;\r\n  __IO uint32_t              IER;\r\n  __IO uint32_t              ESR;\r\n  __IO uint32_t              BTR;\r\n  uint32_t                   RESERVED0[88];\r\n  CAN_TxMailBox_TypeDef      sTxMailBox[3];\r\n  CAN_FIFOMailBox_TypeDef    sFIFOMailBox[2];\r\n  uint32_t                   RESERVED1[12];\r\n  __IO uint32_t              FMR;\r\n  __IO uint32_t              FM1R;\r\n  uint32_t                   RESERVED2;\r\n  __IO uint32_t              FS1R;\r\n  uint32_t                   RESERVED3;\r\n  __IO uint32_t              FFA1R;\r\n  uint32_t                   RESERVED4;\r\n  __IO uint32_t              FA1R;\r\n  uint32_t                   RESERVED5[8];\r\n  CAN_FilterRegister_TypeDef sFilterRegister[14];\r\n} CAN_TypeDef;\r\n\r\n/**\r\n * @brief CRC calculation unit\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t DR;        /*!< CRC Data register,                           Address offset: 0x00 */\r\n  __IO uint8_t  IDR;       /*!< CRC Independent data register,               Address offset: 0x04 */\r\n  uint8_t       RESERVED0; /*!< Reserved,                                    Address offset: 0x05 */\r\n  uint16_t      RESERVED1; /*!< Reserved,                                    Address offset: 0x06 */\r\n  __IO uint32_t CR;        /*!< CRC Control register,                        Address offset: 0x08 */\r\n} CRC_TypeDef;\r\n\r\n/**\r\n * @brief Debug MCU\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t IDCODE;\r\n  __IO uint32_t CR;\r\n} DBGMCU_TypeDef;\r\n\r\n/**\r\n * @brief DMA Controller\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CCR;\r\n  __IO uint32_t CNDTR;\r\n  __IO uint32_t CPAR;\r\n  __IO uint32_t CMAR;\r\n} DMA_Channel_TypeDef;\r\n\r\ntypedef struct {\r\n  __IO uint32_t ISR;\r\n  __IO uint32_t IFCR;\r\n} DMA_TypeDef;\r\n\r\n/**\r\n * @brief External Interrupt/Event Controller\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t IMR;\r\n  __IO uint32_t EMR;\r\n  __IO uint32_t RTSR;\r\n  __IO uint32_t FTSR;\r\n  __IO uint32_t SWIER;\r\n  __IO uint32_t PR;\r\n} EXTI_TypeDef;\r\n\r\n/**\r\n * @brief FLASH Registers\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t ACR;\r\n  __IO uint32_t KEYR;\r\n  __IO uint32_t OPTKEYR;\r\n  __IO uint32_t SR;\r\n  __IO uint32_t CR;\r\n  __IO uint32_t AR;\r\n  __IO uint32_t RESERVED;\r\n  __IO uint32_t OBR;\r\n  __IO uint32_t WRPR;\r\n} FLASH_TypeDef;\r\n\r\n/**\r\n * @brief Option Bytes Registers\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint16_t RDP;\r\n  __IO uint16_t USER;\r\n  __IO uint16_t Data0;\r\n  __IO uint16_t Data1;\r\n  __IO uint16_t WRP0;\r\n  __IO uint16_t WRP1;\r\n  __IO uint16_t WRP2;\r\n  __IO uint16_t WRP3;\r\n} OB_TypeDef;\r\n\r\n/**\r\n * @brief General Purpose I/O\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CRL;\r\n  __IO uint32_t CRH;\r\n  __IO uint32_t IDR;\r\n  __IO uint32_t ODR;\r\n  __IO uint32_t BSRR;\r\n  __IO uint32_t BRR;\r\n  __IO uint32_t LCKR;\r\n} GPIO_TypeDef;\r\n\r\n/**\r\n * @brief Alternate Function I/O\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t EVCR;\r\n  __IO uint32_t MAPR;\r\n  __IO uint32_t EXTICR[4];\r\n  uint32_t      RESERVED0;\r\n  __IO uint32_t MAPR2;\r\n} AFIO_TypeDef;\r\n/**\r\n * @brief Inter Integrated Circuit Interface\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CR1;\r\n  __IO uint32_t CR2;\r\n  __IO uint32_t OAR1;\r\n  __IO uint32_t OAR2;\r\n  __IO uint32_t DR;\r\n  __IO uint32_t SR1;\r\n  __IO uint32_t SR2;\r\n  __IO uint32_t CCR;\r\n  __IO uint32_t TRISE;\r\n} I2C_TypeDef;\r\n\r\n/**\r\n * @brief Independent WATCHDOG\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t KR;  /*!< Key register,                                Address offset: 0x00 */\r\n  __IO uint32_t PR;  /*!< Prescaler register,                          Address offset: 0x04 */\r\n  __IO uint32_t RLR; /*!< Reload register,                             Address offset: 0x08 */\r\n  __IO uint32_t SR;  /*!< Status register,                             Address offset: 0x0C */\r\n} IWDG_TypeDef;\r\n\r\n/**\r\n * @brief Power Control\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CR;\r\n  __IO uint32_t CSR;\r\n} PWR_TypeDef;\r\n\r\n/**\r\n * @brief Reset and Clock Control\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CR;\r\n  __IO uint32_t CFGR;\r\n  __IO uint32_t CIR;\r\n  __IO uint32_t APB2RSTR;\r\n  __IO uint32_t APB1RSTR;\r\n  __IO uint32_t AHBENR;\r\n  __IO uint32_t APB2ENR;\r\n  __IO uint32_t APB1ENR;\r\n  __IO uint32_t BDCR;\r\n  __IO uint32_t CSR;\r\n\r\n} RCC_TypeDef;\r\n\r\n/**\r\n * @brief Real-Time Clock\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CRH;\r\n  __IO uint32_t CRL;\r\n  __IO uint32_t PRLH;\r\n  __IO uint32_t PRLL;\r\n  __IO uint32_t DIVH;\r\n  __IO uint32_t DIVL;\r\n  __IO uint32_t CNTH;\r\n  __IO uint32_t CNTL;\r\n  __IO uint32_t ALRH;\r\n  __IO uint32_t ALRL;\r\n} RTC_TypeDef;\r\n\r\n/**\r\n * @brief Serial Peripheral Interface\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CR1;\r\n  __IO uint32_t CR2;\r\n  __IO uint32_t SR;\r\n  __IO uint32_t DR;\r\n  __IO uint32_t CRCPR;\r\n  __IO uint32_t RXCRCR;\r\n  __IO uint32_t TXCRCR;\r\n  __IO uint32_t I2SCFGR;\r\n} SPI_TypeDef;\r\n\r\n/**\r\n * @brief TIM Timers\r\n */\r\ntypedef struct {\r\n  __IO uint32_t CR1;   /*!< TIM control register 1,                      Address offset: 0x00 */\r\n  __IO uint32_t CR2;   /*!< TIM control register 2,                      Address offset: 0x04 */\r\n  __IO uint32_t SMCR;  /*!< TIM slave Mode Control register,             Address offset: 0x08 */\r\n  __IO uint32_t DIER;  /*!< TIM DMA/interrupt enable register,           Address offset: 0x0C */\r\n  __IO uint32_t SR;    /*!< TIM status register,                         Address offset: 0x10 */\r\n  __IO uint32_t EGR;   /*!< TIM event generation register,               Address offset: 0x14 */\r\n  __IO uint32_t CCMR1; /*!< TIM  capture/compare mode register 1,        Address offset: 0x18 */\r\n  __IO uint32_t CCMR2; /*!< TIM  capture/compare mode register 2,        Address offset: 0x1C */\r\n  __IO uint32_t CCER;  /*!< TIM capture/compare enable register,         Address offset: 0x20 */\r\n  __IO uint32_t CNT;   /*!< TIM counter register,                        Address offset: 0x24 */\r\n  __IO uint32_t PSC;   /*!< TIM prescaler register,                      Address offset: 0x28 */\r\n  __IO uint32_t ARR;   /*!< TIM auto-reload register,                    Address offset: 0x2C */\r\n  __IO uint32_t RCR;   /*!< TIM  repetition counter register,            Address offset: 0x30 */\r\n  __IO uint32_t CCR1;  /*!< TIM capture/compare register 1,              Address offset: 0x34 */\r\n  __IO uint32_t CCR2;  /*!< TIM capture/compare register 2,              Address offset: 0x38 */\r\n  __IO uint32_t CCR3;  /*!< TIM capture/compare register 3,              Address offset: 0x3C */\r\n  __IO uint32_t CCR4;  /*!< TIM capture/compare register 4,              Address offset: 0x40 */\r\n  __IO uint32_t BDTR;  /*!< TIM break and dead-time register,            Address offset: 0x44 */\r\n  __IO uint32_t DCR;   /*!< TIM DMA control register,                    Address offset: 0x48 */\r\n  __IO uint32_t DMAR;  /*!< TIM DMA address for full transfer register,  Address offset: 0x4C */\r\n  __IO uint32_t OR;    /*!< TIM option register,                         Address offset: 0x50 */\r\n} TIM_TypeDef;\r\n\r\n/**\r\n * @brief Universal Synchronous Asynchronous Receiver Transmitter\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t SR;   /*!< USART Status register,                   Address offset: 0x00 */\r\n  __IO uint32_t DR;   /*!< USART Data register,                     Address offset: 0x04 */\r\n  __IO uint32_t BRR;  /*!< USART Baud rate register,                Address offset: 0x08 */\r\n  __IO uint32_t CR1;  /*!< USART Control register 1,                Address offset: 0x0C */\r\n  __IO uint32_t CR2;  /*!< USART Control register 2,                Address offset: 0x10 */\r\n  __IO uint32_t CR3;  /*!< USART Control register 3,                Address offset: 0x14 */\r\n  __IO uint32_t GTPR; /*!< USART Guard time and prescaler register, Address offset: 0x18 */\r\n} USART_TypeDef;\r\n\r\n/**\r\n * @brief Universal Serial Bus Full Speed Device\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint16_t EP0R;          /*!< USB Endpoint 0 register,                   Address offset: 0x00 */\r\n  __IO uint16_t RESERVED0;     /*!< Reserved */\r\n  __IO uint16_t EP1R;          /*!< USB Endpoint 1 register,                   Address offset: 0x04 */\r\n  __IO uint16_t RESERVED1;     /*!< Reserved */\r\n  __IO uint16_t EP2R;          /*!< USB Endpoint 2 register,                   Address offset: 0x08 */\r\n  __IO uint16_t RESERVED2;     /*!< Reserved */\r\n  __IO uint16_t EP3R;          /*!< USB Endpoint 3 register,                   Address offset: 0x0C */\r\n  __IO uint16_t RESERVED3;     /*!< Reserved */\r\n  __IO uint16_t EP4R;          /*!< USB Endpoint 4 register,                   Address offset: 0x10 */\r\n  __IO uint16_t RESERVED4;     /*!< Reserved */\r\n  __IO uint16_t EP5R;          /*!< USB Endpoint 5 register,                   Address offset: 0x14 */\r\n  __IO uint16_t RESERVED5;     /*!< Reserved */\r\n  __IO uint16_t EP6R;          /*!< USB Endpoint 6 register,                   Address offset: 0x18 */\r\n  __IO uint16_t RESERVED6;     /*!< Reserved */\r\n  __IO uint16_t EP7R;          /*!< USB Endpoint 7 register,                   Address offset: 0x1C */\r\n  __IO uint16_t RESERVED7[17]; /*!< Reserved */\r\n  __IO uint16_t CNTR;          /*!< Control register,                          Address offset: 0x40 */\r\n  __IO uint16_t RESERVED8;     /*!< Reserved */\r\n  __IO uint16_t ISTR;          /*!< Interrupt status register,                 Address offset: 0x44 */\r\n  __IO uint16_t RESERVED9;     /*!< Reserved */\r\n  __IO uint16_t FNR;           /*!< Frame number register,                     Address offset: 0x48 */\r\n  __IO uint16_t RESERVEDA;     /*!< Reserved */\r\n  __IO uint16_t DADDR;         /*!< Device address register,                   Address offset: 0x4C */\r\n  __IO uint16_t RESERVEDB;     /*!< Reserved */\r\n  __IO uint16_t BTABLE;        /*!< Buffer Table address register,             Address offset: 0x50 */\r\n  __IO uint16_t RESERVEDC;     /*!< Reserved */\r\n} USB_TypeDef;\r\n\r\n/**\r\n * @brief Window WATCHDOG\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CR;  /*!< WWDG Control register,       Address offset: 0x00 */\r\n  __IO uint32_t CFR; /*!< WWDG Configuration register, Address offset: 0x04 */\r\n  __IO uint32_t SR;  /*!< WWDG Status register,        Address offset: 0x08 */\r\n} WWDG_TypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Peripheral_memory_map\r\n * @{\r\n */\r\n\r\n#define FLASH_BASE      0x08000000UL /*!< FLASH base address in the alias region */\r\n#define FLASH_BANK1_END 0x0801FFFFUL /*!< FLASH END address of bank1 */\r\n#define SRAM_BASE       0x20000000UL /*!< SRAM base address in the alias region */\r\n#define PERIPH_BASE     0x40000000UL /*!< Peripheral base address in the alias region */\r\n\r\n#define SRAM_BB_BASE   0x22000000UL /*!< SRAM base address in the bit-band region */\r\n#define PERIPH_BB_BASE 0x42000000UL /*!< Peripheral base address in the bit-band region */\r\n\r\n/*!< Peripheral memory map */\r\n#define APB1PERIPH_BASE PERIPH_BASE\r\n#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000UL)\r\n#define AHBPERIPH_BASE  (PERIPH_BASE + 0x00020000UL)\r\n\r\n#define TIM2_BASE   (APB1PERIPH_BASE + 0x00000000UL)\r\n#define TIM3_BASE   (APB1PERIPH_BASE + 0x00000400UL)\r\n#define TIM4_BASE   (APB1PERIPH_BASE + 0x00000800UL)\r\n#define RTC_BASE    (APB1PERIPH_BASE + 0x00002800UL)\r\n#define WWDG_BASE   (APB1PERIPH_BASE + 0x00002C00UL)\r\n#define IWDG_BASE   (APB1PERIPH_BASE + 0x00003000UL)\r\n#define SPI2_BASE   (APB1PERIPH_BASE + 0x00003800UL)\r\n#define USART2_BASE (APB1PERIPH_BASE + 0x00004400UL)\r\n#define USART3_BASE (APB1PERIPH_BASE + 0x00004800UL)\r\n#define I2C1_BASE   (APB1PERIPH_BASE + 0x00005400UL)\r\n#define I2C2_BASE   (APB1PERIPH_BASE + 0x00005800UL)\r\n#define CAN1_BASE   (APB1PERIPH_BASE + 0x00006400UL)\r\n#define BKP_BASE    (APB1PERIPH_BASE + 0x00006C00UL)\r\n#define PWR_BASE    (APB1PERIPH_BASE + 0x00007000UL)\r\n#define AFIO_BASE   (APB2PERIPH_BASE + 0x00000000UL)\r\n#define EXTI_BASE   (APB2PERIPH_BASE + 0x00000400UL)\r\n#define GPIOA_BASE  (APB2PERIPH_BASE + 0x00000800UL)\r\n#define GPIOB_BASE  (APB2PERIPH_BASE + 0x00000C00UL)\r\n#define GPIOC_BASE  (APB2PERIPH_BASE + 0x00001000UL)\r\n#define GPIOD_BASE  (APB2PERIPH_BASE + 0x00001400UL)\r\n#define GPIOE_BASE  (APB2PERIPH_BASE + 0x00001800UL)\r\n#define ADC1_BASE   (APB2PERIPH_BASE + 0x00002400UL)\r\n#define ADC2_BASE   (APB2PERIPH_BASE + 0x00002800UL)\r\n#define TIM1_BASE   (APB2PERIPH_BASE + 0x00002C00UL)\r\n#define SPI1_BASE   (APB2PERIPH_BASE + 0x00003000UL)\r\n#define USART1_BASE (APB2PERIPH_BASE + 0x00003800UL)\r\n\r\n#define DMA1_BASE          (AHBPERIPH_BASE + 0x00000000UL)\r\n#define DMA1_Channel1_BASE (AHBPERIPH_BASE + 0x00000008UL)\r\n#define DMA1_Channel2_BASE (AHBPERIPH_BASE + 0x0000001CUL)\r\n#define DMA1_Channel3_BASE (AHBPERIPH_BASE + 0x00000030UL)\r\n#define DMA1_Channel4_BASE (AHBPERIPH_BASE + 0x00000044UL)\r\n#define DMA1_Channel5_BASE (AHBPERIPH_BASE + 0x00000058UL)\r\n#define DMA1_Channel6_BASE (AHBPERIPH_BASE + 0x0000006CUL)\r\n#define DMA1_Channel7_BASE (AHBPERIPH_BASE + 0x00000080UL)\r\n#define RCC_BASE           (AHBPERIPH_BASE + 0x00001000UL)\r\n#define CRC_BASE           (AHBPERIPH_BASE + 0x00003000UL)\r\n\r\n#define FLASH_R_BASE   (AHBPERIPH_BASE + 0x00002000UL) /*!< Flash registers base address */\r\n#define FLASHSIZE_BASE 0x1FFFF7E0UL                    /*!< FLASH Size register base address */\r\n#define UID_BASE       0x1FFFF7E8UL                    /*!< Unique device ID register base address */\r\n#define OB_BASE        0x1FFFF800UL                    /*!< Flash Option Bytes base address */\r\n\r\n#define DBGMCU_BASE 0xE0042000UL /*!< Debug MCU registers base address */\r\n\r\n/* USB device FS */\r\n#define USB_BASE    (APB1PERIPH_BASE + 0x00005C00UL) /*!< USB_IP Peripheral Registers base address */\r\n#define USB_PMAADDR (APB1PERIPH_BASE + 0x00006000UL) /*!< USB_IP Packet Memory Area base address */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Peripheral_declaration\r\n * @{\r\n */\r\n\r\n#define TIM2          ((TIM_TypeDef *)TIM2_BASE)\r\n#define TIM3          ((TIM_TypeDef *)TIM3_BASE)\r\n#define TIM4          ((TIM_TypeDef *)TIM4_BASE)\r\n#define RTC           ((RTC_TypeDef *)RTC_BASE)\r\n#define WWDG          ((WWDG_TypeDef *)WWDG_BASE)\r\n#define IWDG          ((IWDG_TypeDef *)IWDG_BASE)\r\n#define SPI2          ((SPI_TypeDef *)SPI2_BASE)\r\n#define USART2        ((USART_TypeDef *)USART2_BASE)\r\n#define USART3        ((USART_TypeDef *)USART3_BASE)\r\n#define I2C1          ((I2C_TypeDef *)I2C1_BASE)\r\n#define I2C2          ((I2C_TypeDef *)I2C2_BASE)\r\n#define USB           ((USB_TypeDef *)USB_BASE)\r\n#define CAN1          ((CAN_TypeDef *)CAN1_BASE)\r\n#define BKP           ((BKP_TypeDef *)BKP_BASE)\r\n#define PWR           ((PWR_TypeDef *)PWR_BASE)\r\n#define AFIO          ((AFIO_TypeDef *)AFIO_BASE)\r\n#define EXTI          ((EXTI_TypeDef *)EXTI_BASE)\r\n#define GPIOA         ((GPIO_TypeDef *)GPIOA_BASE)\r\n#define GPIOB         ((GPIO_TypeDef *)GPIOB_BASE)\r\n#define GPIOC         ((GPIO_TypeDef *)GPIOC_BASE)\r\n#define GPIOD         ((GPIO_TypeDef *)GPIOD_BASE)\r\n#define GPIOE         ((GPIO_TypeDef *)GPIOE_BASE)\r\n#define ADC1          ((ADC_TypeDef *)ADC1_BASE)\r\n#define ADC2          ((ADC_TypeDef *)ADC2_BASE)\r\n#define ADC12_COMMON  ((ADC_Common_TypeDef *)ADC1_BASE)\r\n#define TIM1          ((TIM_TypeDef *)TIM1_BASE)\r\n#define SPI1          ((SPI_TypeDef *)SPI1_BASE)\r\n#define USART1        ((USART_TypeDef *)USART1_BASE)\r\n#define DMA1          ((DMA_TypeDef *)DMA1_BASE)\r\n#define DMA1_Channel1 ((DMA_Channel_TypeDef *)DMA1_Channel1_BASE)\r\n#define DMA1_Channel2 ((DMA_Channel_TypeDef *)DMA1_Channel2_BASE)\r\n#define DMA1_Channel3 ((DMA_Channel_TypeDef *)DMA1_Channel3_BASE)\r\n#define DMA1_Channel4 ((DMA_Channel_TypeDef *)DMA1_Channel4_BASE)\r\n#define DMA1_Channel5 ((DMA_Channel_TypeDef *)DMA1_Channel5_BASE)\r\n#define DMA1_Channel6 ((DMA_Channel_TypeDef *)DMA1_Channel6_BASE)\r\n#define DMA1_Channel7 ((DMA_Channel_TypeDef *)DMA1_Channel7_BASE)\r\n#define RCC           ((RCC_TypeDef *)RCC_BASE)\r\n#define CRC           ((CRC_TypeDef *)CRC_BASE)\r\n#define FLASH         ((FLASH_TypeDef *)FLASH_R_BASE)\r\n#define OB            ((OB_TypeDef *)OB_BASE)\r\n#define DBGMCU        ((DBGMCU_TypeDef *)DBGMCU_BASE)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Exported_constants\r\n * @{\r\n */\r\n\r\n/** @addtogroup Peripheral_Registers_Bits_Definition\r\n * @{\r\n */\r\n\r\n/******************************************************************************/\r\n/*                         Peripheral Registers_Bits_Definition               */\r\n/******************************************************************************/\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                       CRC calculation unit (CRC)                           */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for CRC_DR register  *********************/\r\n#define CRC_DR_DR_Pos (0U)\r\n#define CRC_DR_DR_Msk (0xFFFFFFFFUL << CRC_DR_DR_Pos) /*!< 0xFFFFFFFF */\r\n#define CRC_DR_DR     CRC_DR_DR_Msk                   /*!< Data register bits */\r\n\r\n/*******************  Bit definition for CRC_IDR register  ********************/\r\n#define CRC_IDR_IDR_Pos (0U)\r\n#define CRC_IDR_IDR_Msk (0xFFUL << CRC_IDR_IDR_Pos) /*!< 0x000000FF */\r\n#define CRC_IDR_IDR     CRC_IDR_IDR_Msk             /*!< General-purpose 8-bit data register bits */\r\n\r\n/********************  Bit definition for CRC_CR register  ********************/\r\n#define CRC_CR_RESET_Pos (0U)\r\n#define CRC_CR_RESET_Msk (0x1UL << CRC_CR_RESET_Pos) /*!< 0x00000001 */\r\n#define CRC_CR_RESET     CRC_CR_RESET_Msk            /*!< RESET bit */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                             Power Control                                  */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/********************  Bit definition for PWR_CR register  ********************/\r\n#define PWR_CR_LPDS_Pos (0U)\r\n#define PWR_CR_LPDS_Msk (0x1UL << PWR_CR_LPDS_Pos) /*!< 0x00000001 */\r\n#define PWR_CR_LPDS     PWR_CR_LPDS_Msk            /*!< Low-Power Deepsleep */\r\n#define PWR_CR_PDDS_Pos (1U)\r\n#define PWR_CR_PDDS_Msk (0x1UL << PWR_CR_PDDS_Pos) /*!< 0x00000002 */\r\n#define PWR_CR_PDDS     PWR_CR_PDDS_Msk            /*!< Power Down Deepsleep */\r\n#define PWR_CR_CWUF_Pos (2U)\r\n#define PWR_CR_CWUF_Msk (0x1UL << PWR_CR_CWUF_Pos) /*!< 0x00000004 */\r\n#define PWR_CR_CWUF     PWR_CR_CWUF_Msk            /*!< Clear Wakeup Flag */\r\n#define PWR_CR_CSBF_Pos (3U)\r\n#define PWR_CR_CSBF_Msk (0x1UL << PWR_CR_CSBF_Pos) /*!< 0x00000008 */\r\n#define PWR_CR_CSBF     PWR_CR_CSBF_Msk            /*!< Clear Standby Flag */\r\n#define PWR_CR_PVDE_Pos (4U)\r\n#define PWR_CR_PVDE_Msk (0x1UL << PWR_CR_PVDE_Pos) /*!< 0x00000010 */\r\n#define PWR_CR_PVDE     PWR_CR_PVDE_Msk            /*!< Power Voltage Detector Enable */\r\n\r\n#define PWR_CR_PLS_Pos (5U)\r\n#define PWR_CR_PLS_Msk (0x7UL << PWR_CR_PLS_Pos) /*!< 0x000000E0 */\r\n#define PWR_CR_PLS     PWR_CR_PLS_Msk            /*!< PLS[2:0] bits (PVD Level Selection) */\r\n#define PWR_CR_PLS_0   (0x1UL << PWR_CR_PLS_Pos) /*!< 0x00000020 */\r\n#define PWR_CR_PLS_1   (0x2UL << PWR_CR_PLS_Pos) /*!< 0x00000040 */\r\n#define PWR_CR_PLS_2   (0x4UL << PWR_CR_PLS_Pos) /*!< 0x00000080 */\r\n\r\n/*!< PVD level configuration */\r\n#define PWR_CR_PLS_LEV0 0x00000000U /*!< PVD level 2.2V */\r\n#define PWR_CR_PLS_LEV1 0x00000020U /*!< PVD level 2.3V */\r\n#define PWR_CR_PLS_LEV2 0x00000040U /*!< PVD level 2.4V */\r\n#define PWR_CR_PLS_LEV3 0x00000060U /*!< PVD level 2.5V */\r\n#define PWR_CR_PLS_LEV4 0x00000080U /*!< PVD level 2.6V */\r\n#define PWR_CR_PLS_LEV5 0x000000A0U /*!< PVD level 2.7V */\r\n#define PWR_CR_PLS_LEV6 0x000000C0U /*!< PVD level 2.8V */\r\n#define PWR_CR_PLS_LEV7 0x000000E0U /*!< PVD level 2.9V */\r\n\r\n/* Legacy defines */\r\n#define PWR_CR_PLS_2V2 PWR_CR_PLS_LEV0\r\n#define PWR_CR_PLS_2V3 PWR_CR_PLS_LEV1\r\n#define PWR_CR_PLS_2V4 PWR_CR_PLS_LEV2\r\n#define PWR_CR_PLS_2V5 PWR_CR_PLS_LEV3\r\n#define PWR_CR_PLS_2V6 PWR_CR_PLS_LEV4\r\n#define PWR_CR_PLS_2V7 PWR_CR_PLS_LEV5\r\n#define PWR_CR_PLS_2V8 PWR_CR_PLS_LEV6\r\n#define PWR_CR_PLS_2V9 PWR_CR_PLS_LEV7\r\n\r\n#define PWR_CR_DBP_Pos (8U)\r\n#define PWR_CR_DBP_Msk (0x1UL << PWR_CR_DBP_Pos) /*!< 0x00000100 */\r\n#define PWR_CR_DBP     PWR_CR_DBP_Msk            /*!< Disable Backup Domain write protection */\r\n\r\n/*******************  Bit definition for PWR_CSR register  ********************/\r\n#define PWR_CSR_WUF_Pos  (0U)\r\n#define PWR_CSR_WUF_Msk  (0x1UL << PWR_CSR_WUF_Pos) /*!< 0x00000001 */\r\n#define PWR_CSR_WUF      PWR_CSR_WUF_Msk            /*!< Wakeup Flag */\r\n#define PWR_CSR_SBF_Pos  (1U)\r\n#define PWR_CSR_SBF_Msk  (0x1UL << PWR_CSR_SBF_Pos) /*!< 0x00000002 */\r\n#define PWR_CSR_SBF      PWR_CSR_SBF_Msk            /*!< Standby Flag */\r\n#define PWR_CSR_PVDO_Pos (2U)\r\n#define PWR_CSR_PVDO_Msk (0x1UL << PWR_CSR_PVDO_Pos) /*!< 0x00000004 */\r\n#define PWR_CSR_PVDO     PWR_CSR_PVDO_Msk            /*!< PVD Output */\r\n#define PWR_CSR_EWUP_Pos (8U)\r\n#define PWR_CSR_EWUP_Msk (0x1UL << PWR_CSR_EWUP_Pos) /*!< 0x00000100 */\r\n#define PWR_CSR_EWUP     PWR_CSR_EWUP_Msk            /*!< Enable WKUP pin */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                            Backup registers                                */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for BKP_DR1 register  ********************/\r\n#define BKP_DR1_D_Pos (0U)\r\n#define BKP_DR1_D_Msk (0xFFFFUL << BKP_DR1_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR1_D     BKP_DR1_D_Msk               /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR2 register  ********************/\r\n#define BKP_DR2_D_Pos (0U)\r\n#define BKP_DR2_D_Msk (0xFFFFUL << BKP_DR2_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR2_D     BKP_DR2_D_Msk               /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR3 register  ********************/\r\n#define BKP_DR3_D_Pos (0U)\r\n#define BKP_DR3_D_Msk (0xFFFFUL << BKP_DR3_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR3_D     BKP_DR3_D_Msk               /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR4 register  ********************/\r\n#define BKP_DR4_D_Pos (0U)\r\n#define BKP_DR4_D_Msk (0xFFFFUL << BKP_DR4_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR4_D     BKP_DR4_D_Msk               /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR5 register  ********************/\r\n#define BKP_DR5_D_Pos (0U)\r\n#define BKP_DR5_D_Msk (0xFFFFUL << BKP_DR5_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR5_D     BKP_DR5_D_Msk               /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR6 register  ********************/\r\n#define BKP_DR6_D_Pos (0U)\r\n#define BKP_DR6_D_Msk (0xFFFFUL << BKP_DR6_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR6_D     BKP_DR6_D_Msk               /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR7 register  ********************/\r\n#define BKP_DR7_D_Pos (0U)\r\n#define BKP_DR7_D_Msk (0xFFFFUL << BKP_DR7_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR7_D     BKP_DR7_D_Msk               /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR8 register  ********************/\r\n#define BKP_DR8_D_Pos (0U)\r\n#define BKP_DR8_D_Msk (0xFFFFUL << BKP_DR8_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR8_D     BKP_DR8_D_Msk               /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR9 register  ********************/\r\n#define BKP_DR9_D_Pos (0U)\r\n#define BKP_DR9_D_Msk (0xFFFFUL << BKP_DR9_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR9_D     BKP_DR9_D_Msk               /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR10 register  *******************/\r\n#define BKP_DR10_D_Pos (0U)\r\n#define BKP_DR10_D_Msk (0xFFFFUL << BKP_DR10_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR10_D     BKP_DR10_D_Msk               /*!< Backup data */\r\n\r\n#define RTC_BKP_NUMBER 10\r\n\r\n/******************  Bit definition for BKP_RTCCR register  *******************/\r\n#define BKP_RTCCR_CAL_Pos  (0U)\r\n#define BKP_RTCCR_CAL_Msk  (0x7FUL << BKP_RTCCR_CAL_Pos) /*!< 0x0000007F */\r\n#define BKP_RTCCR_CAL      BKP_RTCCR_CAL_Msk             /*!< Calibration value */\r\n#define BKP_RTCCR_CCO_Pos  (7U)\r\n#define BKP_RTCCR_CCO_Msk  (0x1UL << BKP_RTCCR_CCO_Pos) /*!< 0x00000080 */\r\n#define BKP_RTCCR_CCO      BKP_RTCCR_CCO_Msk            /*!< Calibration Clock Output */\r\n#define BKP_RTCCR_ASOE_Pos (8U)\r\n#define BKP_RTCCR_ASOE_Msk (0x1UL << BKP_RTCCR_ASOE_Pos) /*!< 0x00000100 */\r\n#define BKP_RTCCR_ASOE     BKP_RTCCR_ASOE_Msk            /*!< Alarm or Second Output Enable */\r\n#define BKP_RTCCR_ASOS_Pos (9U)\r\n#define BKP_RTCCR_ASOS_Msk (0x1UL << BKP_RTCCR_ASOS_Pos) /*!< 0x00000200 */\r\n#define BKP_RTCCR_ASOS     BKP_RTCCR_ASOS_Msk            /*!< Alarm or Second Output Selection */\r\n\r\n/********************  Bit definition for BKP_CR register  ********************/\r\n#define BKP_CR_TPE_Pos  (0U)\r\n#define BKP_CR_TPE_Msk  (0x1UL << BKP_CR_TPE_Pos) /*!< 0x00000001 */\r\n#define BKP_CR_TPE      BKP_CR_TPE_Msk            /*!< TAMPER pin enable */\r\n#define BKP_CR_TPAL_Pos (1U)\r\n#define BKP_CR_TPAL_Msk (0x1UL << BKP_CR_TPAL_Pos) /*!< 0x00000002 */\r\n#define BKP_CR_TPAL     BKP_CR_TPAL_Msk            /*!< TAMPER pin active level */\r\n\r\n/*******************  Bit definition for BKP_CSR register  ********************/\r\n#define BKP_CSR_CTE_Pos  (0U)\r\n#define BKP_CSR_CTE_Msk  (0x1UL << BKP_CSR_CTE_Pos) /*!< 0x00000001 */\r\n#define BKP_CSR_CTE      BKP_CSR_CTE_Msk            /*!< Clear Tamper event */\r\n#define BKP_CSR_CTI_Pos  (1U)\r\n#define BKP_CSR_CTI_Msk  (0x1UL << BKP_CSR_CTI_Pos) /*!< 0x00000002 */\r\n#define BKP_CSR_CTI      BKP_CSR_CTI_Msk            /*!< Clear Tamper Interrupt */\r\n#define BKP_CSR_TPIE_Pos (2U)\r\n#define BKP_CSR_TPIE_Msk (0x1UL << BKP_CSR_TPIE_Pos) /*!< 0x00000004 */\r\n#define BKP_CSR_TPIE     BKP_CSR_TPIE_Msk            /*!< TAMPER Pin interrupt enable */\r\n#define BKP_CSR_TEF_Pos  (8U)\r\n#define BKP_CSR_TEF_Msk  (0x1UL << BKP_CSR_TEF_Pos) /*!< 0x00000100 */\r\n#define BKP_CSR_TEF      BKP_CSR_TEF_Msk            /*!< Tamper Event Flag */\r\n#define BKP_CSR_TIF_Pos  (9U)\r\n#define BKP_CSR_TIF_Msk  (0x1UL << BKP_CSR_TIF_Pos) /*!< 0x00000200 */\r\n#define BKP_CSR_TIF      BKP_CSR_TIF_Msk            /*!< Tamper Interrupt Flag */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                         Reset and Clock Control                            */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/********************  Bit definition for RCC_CR register  ********************/\r\n#define RCC_CR_HSION_Pos   (0U)\r\n#define RCC_CR_HSION_Msk   (0x1UL << RCC_CR_HSION_Pos) /*!< 0x00000001 */\r\n#define RCC_CR_HSION       RCC_CR_HSION_Msk            /*!< Internal High Speed clock enable */\r\n#define RCC_CR_HSIRDY_Pos  (1U)\r\n#define RCC_CR_HSIRDY_Msk  (0x1UL << RCC_CR_HSIRDY_Pos) /*!< 0x00000002 */\r\n#define RCC_CR_HSIRDY      RCC_CR_HSIRDY_Msk            /*!< Internal High Speed clock ready flag */\r\n#define RCC_CR_HSITRIM_Pos (3U)\r\n#define RCC_CR_HSITRIM_Msk (0x1FUL << RCC_CR_HSITRIM_Pos) /*!< 0x000000F8 */\r\n#define RCC_CR_HSITRIM     RCC_CR_HSITRIM_Msk             /*!< Internal High Speed clock trimming */\r\n#define RCC_CR_HSICAL_Pos  (8U)\r\n#define RCC_CR_HSICAL_Msk  (0xFFUL << RCC_CR_HSICAL_Pos) /*!< 0x0000FF00 */\r\n#define RCC_CR_HSICAL      RCC_CR_HSICAL_Msk             /*!< Internal High Speed clock Calibration */\r\n#define RCC_CR_HSEON_Pos   (16U)\r\n#define RCC_CR_HSEON_Msk   (0x1UL << RCC_CR_HSEON_Pos) /*!< 0x00010000 */\r\n#define RCC_CR_HSEON       RCC_CR_HSEON_Msk            /*!< External High Speed clock enable */\r\n#define RCC_CR_HSERDY_Pos  (17U)\r\n#define RCC_CR_HSERDY_Msk  (0x1UL << RCC_CR_HSERDY_Pos) /*!< 0x00020000 */\r\n#define RCC_CR_HSERDY      RCC_CR_HSERDY_Msk            /*!< External High Speed clock ready flag */\r\n#define RCC_CR_HSEBYP_Pos  (18U)\r\n#define RCC_CR_HSEBYP_Msk  (0x1UL << RCC_CR_HSEBYP_Pos) /*!< 0x00040000 */\r\n#define RCC_CR_HSEBYP      RCC_CR_HSEBYP_Msk            /*!< External High Speed clock Bypass */\r\n#define RCC_CR_CSSON_Pos   (19U)\r\n#define RCC_CR_CSSON_Msk   (0x1UL << RCC_CR_CSSON_Pos) /*!< 0x00080000 */\r\n#define RCC_CR_CSSON       RCC_CR_CSSON_Msk            /*!< Clock Security System enable */\r\n#define RCC_CR_PLLON_Pos   (24U)\r\n#define RCC_CR_PLLON_Msk   (0x1UL << RCC_CR_PLLON_Pos) /*!< 0x01000000 */\r\n#define RCC_CR_PLLON       RCC_CR_PLLON_Msk            /*!< PLL enable */\r\n#define RCC_CR_PLLRDY_Pos  (25U)\r\n#define RCC_CR_PLLRDY_Msk  (0x1UL << RCC_CR_PLLRDY_Pos) /*!< 0x02000000 */\r\n#define RCC_CR_PLLRDY      RCC_CR_PLLRDY_Msk            /*!< PLL clock ready flag */\r\n\r\n/*******************  Bit definition for RCC_CFGR register  *******************/\r\n/*!< SW configuration */\r\n#define RCC_CFGR_SW_Pos (0U)\r\n#define RCC_CFGR_SW_Msk (0x3UL << RCC_CFGR_SW_Pos) /*!< 0x00000003 */\r\n#define RCC_CFGR_SW     RCC_CFGR_SW_Msk            /*!< SW[1:0] bits (System clock Switch) */\r\n#define RCC_CFGR_SW_0   (0x1UL << RCC_CFGR_SW_Pos) /*!< 0x00000001 */\r\n#define RCC_CFGR_SW_1   (0x2UL << RCC_CFGR_SW_Pos) /*!< 0x00000002 */\r\n\r\n#define RCC_CFGR_SW_HSI 0x00000000U /*!< HSI selected as system clock */\r\n#define RCC_CFGR_SW_HSE 0x00000001U /*!< HSE selected as system clock */\r\n#define RCC_CFGR_SW_PLL 0x00000002U /*!< PLL selected as system clock */\r\n\r\n/*!< SWS configuration */\r\n#define RCC_CFGR_SWS_Pos (2U)\r\n#define RCC_CFGR_SWS_Msk (0x3UL << RCC_CFGR_SWS_Pos) /*!< 0x0000000C */\r\n#define RCC_CFGR_SWS     RCC_CFGR_SWS_Msk            /*!< SWS[1:0] bits (System Clock Switch Status) */\r\n#define RCC_CFGR_SWS_0   (0x1UL << RCC_CFGR_SWS_Pos) /*!< 0x00000004 */\r\n#define RCC_CFGR_SWS_1   (0x2UL << RCC_CFGR_SWS_Pos) /*!< 0x00000008 */\r\n\r\n#define RCC_CFGR_SWS_HSI 0x00000000U /*!< HSI oscillator used as system clock */\r\n#define RCC_CFGR_SWS_HSE 0x00000004U /*!< HSE oscillator used as system clock */\r\n#define RCC_CFGR_SWS_PLL 0x00000008U /*!< PLL used as system clock */\r\n\r\n/*!< HPRE configuration */\r\n#define RCC_CFGR_HPRE_Pos (4U)\r\n#define RCC_CFGR_HPRE_Msk (0xFUL << RCC_CFGR_HPRE_Pos) /*!< 0x000000F0 */\r\n#define RCC_CFGR_HPRE     RCC_CFGR_HPRE_Msk            /*!< HPRE[3:0] bits (AHB prescaler) */\r\n#define RCC_CFGR_HPRE_0   (0x1UL << RCC_CFGR_HPRE_Pos) /*!< 0x00000010 */\r\n#define RCC_CFGR_HPRE_1   (0x2UL << RCC_CFGR_HPRE_Pos) /*!< 0x00000020 */\r\n#define RCC_CFGR_HPRE_2   (0x4UL << RCC_CFGR_HPRE_Pos) /*!< 0x00000040 */\r\n#define RCC_CFGR_HPRE_3   (0x8UL << RCC_CFGR_HPRE_Pos) /*!< 0x00000080 */\r\n\r\n#define RCC_CFGR_HPRE_DIV1   0x00000000U /*!< SYSCLK not divided */\r\n#define RCC_CFGR_HPRE_DIV2   0x00000080U /*!< SYSCLK divided by 2 */\r\n#define RCC_CFGR_HPRE_DIV4   0x00000090U /*!< SYSCLK divided by 4 */\r\n#define RCC_CFGR_HPRE_DIV8   0x000000A0U /*!< SYSCLK divided by 8 */\r\n#define RCC_CFGR_HPRE_DIV16  0x000000B0U /*!< SYSCLK divided by 16 */\r\n#define RCC_CFGR_HPRE_DIV64  0x000000C0U /*!< SYSCLK divided by 64 */\r\n#define RCC_CFGR_HPRE_DIV128 0x000000D0U /*!< SYSCLK divided by 128 */\r\n#define RCC_CFGR_HPRE_DIV256 0x000000E0U /*!< SYSCLK divided by 256 */\r\n#define RCC_CFGR_HPRE_DIV512 0x000000F0U /*!< SYSCLK divided by 512 */\r\n\r\n/*!< PPRE1 configuration */\r\n#define RCC_CFGR_PPRE1_Pos (8U)\r\n#define RCC_CFGR_PPRE1_Msk (0x7UL << RCC_CFGR_PPRE1_Pos) /*!< 0x00000700 */\r\n#define RCC_CFGR_PPRE1     RCC_CFGR_PPRE1_Msk            /*!< PRE1[2:0] bits (APB1 prescaler) */\r\n#define RCC_CFGR_PPRE1_0   (0x1UL << RCC_CFGR_PPRE1_Pos) /*!< 0x00000100 */\r\n#define RCC_CFGR_PPRE1_1   (0x2UL << RCC_CFGR_PPRE1_Pos) /*!< 0x00000200 */\r\n#define RCC_CFGR_PPRE1_2   (0x4UL << RCC_CFGR_PPRE1_Pos) /*!< 0x00000400 */\r\n\r\n#define RCC_CFGR_PPRE1_DIV1  0x00000000U /*!< HCLK not divided */\r\n#define RCC_CFGR_PPRE1_DIV2  0x00000400U /*!< HCLK divided by 2 */\r\n#define RCC_CFGR_PPRE1_DIV4  0x00000500U /*!< HCLK divided by 4 */\r\n#define RCC_CFGR_PPRE1_DIV8  0x00000600U /*!< HCLK divided by 8 */\r\n#define RCC_CFGR_PPRE1_DIV16 0x00000700U /*!< HCLK divided by 16 */\r\n\r\n/*!< PPRE2 configuration */\r\n#define RCC_CFGR_PPRE2_Pos (11U)\r\n#define RCC_CFGR_PPRE2_Msk (0x7UL << RCC_CFGR_PPRE2_Pos) /*!< 0x00003800 */\r\n#define RCC_CFGR_PPRE2     RCC_CFGR_PPRE2_Msk            /*!< PRE2[2:0] bits (APB2 prescaler) */\r\n#define RCC_CFGR_PPRE2_0   (0x1UL << RCC_CFGR_PPRE2_Pos) /*!< 0x00000800 */\r\n#define RCC_CFGR_PPRE2_1   (0x2UL << RCC_CFGR_PPRE2_Pos) /*!< 0x00001000 */\r\n#define RCC_CFGR_PPRE2_2   (0x4UL << RCC_CFGR_PPRE2_Pos) /*!< 0x00002000 */\r\n\r\n#define RCC_CFGR_PPRE2_DIV1  0x00000000U /*!< HCLK not divided */\r\n#define RCC_CFGR_PPRE2_DIV2  0x00002000U /*!< HCLK divided by 2 */\r\n#define RCC_CFGR_PPRE2_DIV4  0x00002800U /*!< HCLK divided by 4 */\r\n#define RCC_CFGR_PPRE2_DIV8  0x00003000U /*!< HCLK divided by 8 */\r\n#define RCC_CFGR_PPRE2_DIV16 0x00003800U /*!< HCLK divided by 16 */\r\n\r\n/*!< ADCPPRE configuration */\r\n#define RCC_CFGR_ADCPRE_Pos (14U)\r\n#define RCC_CFGR_ADCPRE_Msk (0x3UL << RCC_CFGR_ADCPRE_Pos) /*!< 0x0000C000 */\r\n#define RCC_CFGR_ADCPRE     RCC_CFGR_ADCPRE_Msk            /*!< ADCPRE[1:0] bits (ADC prescaler) */\r\n#define RCC_CFGR_ADCPRE_0   (0x1UL << RCC_CFGR_ADCPRE_Pos) /*!< 0x00004000 */\r\n#define RCC_CFGR_ADCPRE_1   (0x2UL << RCC_CFGR_ADCPRE_Pos) /*!< 0x00008000 */\r\n\r\n#define RCC_CFGR_ADCPRE_DIV2 0x00000000U /*!< PCLK2 divided by 2 */\r\n#define RCC_CFGR_ADCPRE_DIV4 0x00004000U /*!< PCLK2 divided by 4 */\r\n#define RCC_CFGR_ADCPRE_DIV6 0x00008000U /*!< PCLK2 divided by 6 */\r\n#define RCC_CFGR_ADCPRE_DIV8 0x0000C000U /*!< PCLK2 divided by 8 */\r\n\r\n#define RCC_CFGR_PLLSRC_Pos (16U)\r\n#define RCC_CFGR_PLLSRC_Msk (0x1UL << RCC_CFGR_PLLSRC_Pos) /*!< 0x00010000 */\r\n#define RCC_CFGR_PLLSRC     RCC_CFGR_PLLSRC_Msk            /*!< PLL entry clock source */\r\n\r\n#define RCC_CFGR_PLLXTPRE_Pos (17U)\r\n#define RCC_CFGR_PLLXTPRE_Msk (0x1UL << RCC_CFGR_PLLXTPRE_Pos) /*!< 0x00020000 */\r\n#define RCC_CFGR_PLLXTPRE     RCC_CFGR_PLLXTPRE_Msk            /*!< HSE divider for PLL entry */\r\n\r\n/*!< PLLMUL configuration */\r\n#define RCC_CFGR_PLLMULL_Pos (18U)\r\n#define RCC_CFGR_PLLMULL_Msk (0xFUL << RCC_CFGR_PLLMULL_Pos) /*!< 0x003C0000 */\r\n#define RCC_CFGR_PLLMULL     RCC_CFGR_PLLMULL_Msk            /*!< PLLMUL[3:0] bits (PLL multiplication factor) */\r\n#define RCC_CFGR_PLLMULL_0   (0x1UL << RCC_CFGR_PLLMULL_Pos) /*!< 0x00040000 */\r\n#define RCC_CFGR_PLLMULL_1   (0x2UL << RCC_CFGR_PLLMULL_Pos) /*!< 0x00080000 */\r\n#define RCC_CFGR_PLLMULL_2   (0x4UL << RCC_CFGR_PLLMULL_Pos) /*!< 0x00100000 */\r\n#define RCC_CFGR_PLLMULL_3   (0x8UL << RCC_CFGR_PLLMULL_Pos) /*!< 0x00200000 */\r\n\r\n#define RCC_CFGR_PLLXTPRE_HSE      0x00000000U /*!< HSE clock not divided for PLL entry */\r\n#define RCC_CFGR_PLLXTPRE_HSE_DIV2 0x00020000U /*!< HSE clock divided by 2 for PLL entry */\r\n\r\n#define RCC_CFGR_PLLMULL2      0x00000000U /*!< PLL input clock*2 */\r\n#define RCC_CFGR_PLLMULL3_Pos  (18U)\r\n#define RCC_CFGR_PLLMULL3_Msk  (0x1UL << RCC_CFGR_PLLMULL3_Pos) /*!< 0x00040000 */\r\n#define RCC_CFGR_PLLMULL3      RCC_CFGR_PLLMULL3_Msk            /*!< PLL input clock*3 */\r\n#define RCC_CFGR_PLLMULL4_Pos  (19U)\r\n#define RCC_CFGR_PLLMULL4_Msk  (0x1UL << RCC_CFGR_PLLMULL4_Pos) /*!< 0x00080000 */\r\n#define RCC_CFGR_PLLMULL4      RCC_CFGR_PLLMULL4_Msk            /*!< PLL input clock*4 */\r\n#define RCC_CFGR_PLLMULL5_Pos  (18U)\r\n#define RCC_CFGR_PLLMULL5_Msk  (0x3UL << RCC_CFGR_PLLMULL5_Pos) /*!< 0x000C0000 */\r\n#define RCC_CFGR_PLLMULL5      RCC_CFGR_PLLMULL5_Msk            /*!< PLL input clock*5 */\r\n#define RCC_CFGR_PLLMULL6_Pos  (20U)\r\n#define RCC_CFGR_PLLMULL6_Msk  (0x1UL << RCC_CFGR_PLLMULL6_Pos) /*!< 0x00100000 */\r\n#define RCC_CFGR_PLLMULL6      RCC_CFGR_PLLMULL6_Msk            /*!< PLL input clock*6 */\r\n#define RCC_CFGR_PLLMULL7_Pos  (18U)\r\n#define RCC_CFGR_PLLMULL7_Msk  (0x5UL << RCC_CFGR_PLLMULL7_Pos) /*!< 0x00140000 */\r\n#define RCC_CFGR_PLLMULL7      RCC_CFGR_PLLMULL7_Msk            /*!< PLL input clock*7 */\r\n#define RCC_CFGR_PLLMULL8_Pos  (19U)\r\n#define RCC_CFGR_PLLMULL8_Msk  (0x3UL << RCC_CFGR_PLLMULL8_Pos) /*!< 0x00180000 */\r\n#define RCC_CFGR_PLLMULL8      RCC_CFGR_PLLMULL8_Msk            /*!< PLL input clock*8 */\r\n#define RCC_CFGR_PLLMULL9_Pos  (18U)\r\n#define RCC_CFGR_PLLMULL9_Msk  (0x7UL << RCC_CFGR_PLLMULL9_Pos) /*!< 0x001C0000 */\r\n#define RCC_CFGR_PLLMULL9      RCC_CFGR_PLLMULL9_Msk            /*!< PLL input clock*9 */\r\n#define RCC_CFGR_PLLMULL10_Pos (21U)\r\n#define RCC_CFGR_PLLMULL10_Msk (0x1UL << RCC_CFGR_PLLMULL10_Pos) /*!< 0x00200000 */\r\n#define RCC_CFGR_PLLMULL10     RCC_CFGR_PLLMULL10_Msk            /*!< PLL input clock10 */\r\n#define RCC_CFGR_PLLMULL11_Pos (18U)\r\n#define RCC_CFGR_PLLMULL11_Msk (0x9UL << RCC_CFGR_PLLMULL11_Pos) /*!< 0x00240000 */\r\n#define RCC_CFGR_PLLMULL11     RCC_CFGR_PLLMULL11_Msk            /*!< PLL input clock*11 */\r\n#define RCC_CFGR_PLLMULL12_Pos (19U)\r\n#define RCC_CFGR_PLLMULL12_Msk (0x5UL << RCC_CFGR_PLLMULL12_Pos) /*!< 0x00280000 */\r\n#define RCC_CFGR_PLLMULL12     RCC_CFGR_PLLMULL12_Msk            /*!< PLL input clock*12 */\r\n#define RCC_CFGR_PLLMULL13_Pos (18U)\r\n#define RCC_CFGR_PLLMULL13_Msk (0xBUL << RCC_CFGR_PLLMULL13_Pos) /*!< 0x002C0000 */\r\n#define RCC_CFGR_PLLMULL13     RCC_CFGR_PLLMULL13_Msk            /*!< PLL input clock*13 */\r\n#define RCC_CFGR_PLLMULL14_Pos (20U)\r\n#define RCC_CFGR_PLLMULL14_Msk (0x3UL << RCC_CFGR_PLLMULL14_Pos) /*!< 0x00300000 */\r\n#define RCC_CFGR_PLLMULL14     RCC_CFGR_PLLMULL14_Msk            /*!< PLL input clock*14 */\r\n#define RCC_CFGR_PLLMULL15_Pos (18U)\r\n#define RCC_CFGR_PLLMULL15_Msk (0xDUL << RCC_CFGR_PLLMULL15_Pos) /*!< 0x00340000 */\r\n#define RCC_CFGR_PLLMULL15     RCC_CFGR_PLLMULL15_Msk            /*!< PLL input clock*15 */\r\n#define RCC_CFGR_PLLMULL16_Pos (19U)\r\n#define RCC_CFGR_PLLMULL16_Msk (0x7UL << RCC_CFGR_PLLMULL16_Pos) /*!< 0x00380000 */\r\n#define RCC_CFGR_PLLMULL16     RCC_CFGR_PLLMULL16_Msk            /*!< PLL input clock*16 */\r\n#define RCC_CFGR_USBPRE_Pos    (22U)\r\n#define RCC_CFGR_USBPRE_Msk    (0x1UL << RCC_CFGR_USBPRE_Pos) /*!< 0x00400000 */\r\n#define RCC_CFGR_USBPRE        RCC_CFGR_USBPRE_Msk            /*!< USB Device prescaler */\r\n\r\n/*!< MCO configuration */\r\n#define RCC_CFGR_MCO_Pos (24U)\r\n#define RCC_CFGR_MCO_Msk (0x7UL << RCC_CFGR_MCO_Pos) /*!< 0x07000000 */\r\n#define RCC_CFGR_MCO     RCC_CFGR_MCO_Msk            /*!< MCO[2:0] bits (Microcontroller Clock Output) */\r\n#define RCC_CFGR_MCO_0   (0x1UL << RCC_CFGR_MCO_Pos) /*!< 0x01000000 */\r\n#define RCC_CFGR_MCO_1   (0x2UL << RCC_CFGR_MCO_Pos) /*!< 0x02000000 */\r\n#define RCC_CFGR_MCO_2   (0x4UL << RCC_CFGR_MCO_Pos) /*!< 0x04000000 */\r\n\r\n#define RCC_CFGR_MCO_NOCLOCK     0x00000000U /*!< No clock */\r\n#define RCC_CFGR_MCO_SYSCLK      0x04000000U /*!< System clock selected as MCO source */\r\n#define RCC_CFGR_MCO_HSI         0x05000000U /*!< HSI clock selected as MCO source */\r\n#define RCC_CFGR_MCO_HSE         0x06000000U /*!< HSE clock selected as MCO source  */\r\n#define RCC_CFGR_MCO_PLLCLK_DIV2 0x07000000U /*!< PLL clock divided by 2 selected as MCO source */\r\n\r\n/* Reference defines */\r\n#define RCC_CFGR_MCOSEL          RCC_CFGR_MCO\r\n#define RCC_CFGR_MCOSEL_0        RCC_CFGR_MCO_0\r\n#define RCC_CFGR_MCOSEL_1        RCC_CFGR_MCO_1\r\n#define RCC_CFGR_MCOSEL_2        RCC_CFGR_MCO_2\r\n#define RCC_CFGR_MCOSEL_NOCLOCK  RCC_CFGR_MCO_NOCLOCK\r\n#define RCC_CFGR_MCOSEL_SYSCLK   RCC_CFGR_MCO_SYSCLK\r\n#define RCC_CFGR_MCOSEL_HSI      RCC_CFGR_MCO_HSI\r\n#define RCC_CFGR_MCOSEL_HSE      RCC_CFGR_MCO_HSE\r\n#define RCC_CFGR_MCOSEL_PLL_DIV2 RCC_CFGR_MCO_PLLCLK_DIV2\r\n\r\n/*!<******************  Bit definition for RCC_CIR register  ********************/\r\n#define RCC_CIR_LSIRDYF_Pos  (0U)\r\n#define RCC_CIR_LSIRDYF_Msk  (0x1UL << RCC_CIR_LSIRDYF_Pos) /*!< 0x00000001 */\r\n#define RCC_CIR_LSIRDYF      RCC_CIR_LSIRDYF_Msk            /*!< LSI Ready Interrupt flag */\r\n#define RCC_CIR_LSERDYF_Pos  (1U)\r\n#define RCC_CIR_LSERDYF_Msk  (0x1UL << RCC_CIR_LSERDYF_Pos) /*!< 0x00000002 */\r\n#define RCC_CIR_LSERDYF      RCC_CIR_LSERDYF_Msk            /*!< LSE Ready Interrupt flag */\r\n#define RCC_CIR_HSIRDYF_Pos  (2U)\r\n#define RCC_CIR_HSIRDYF_Msk  (0x1UL << RCC_CIR_HSIRDYF_Pos) /*!< 0x00000004 */\r\n#define RCC_CIR_HSIRDYF      RCC_CIR_HSIRDYF_Msk            /*!< HSI Ready Interrupt flag */\r\n#define RCC_CIR_HSERDYF_Pos  (3U)\r\n#define RCC_CIR_HSERDYF_Msk  (0x1UL << RCC_CIR_HSERDYF_Pos) /*!< 0x00000008 */\r\n#define RCC_CIR_HSERDYF      RCC_CIR_HSERDYF_Msk            /*!< HSE Ready Interrupt flag */\r\n#define RCC_CIR_PLLRDYF_Pos  (4U)\r\n#define RCC_CIR_PLLRDYF_Msk  (0x1UL << RCC_CIR_PLLRDYF_Pos) /*!< 0x00000010 */\r\n#define RCC_CIR_PLLRDYF      RCC_CIR_PLLRDYF_Msk            /*!< PLL Ready Interrupt flag */\r\n#define RCC_CIR_CSSF_Pos     (7U)\r\n#define RCC_CIR_CSSF_Msk     (0x1UL << RCC_CIR_CSSF_Pos) /*!< 0x00000080 */\r\n#define RCC_CIR_CSSF         RCC_CIR_CSSF_Msk            /*!< Clock Security System Interrupt flag */\r\n#define RCC_CIR_LSIRDYIE_Pos (8U)\r\n#define RCC_CIR_LSIRDYIE_Msk (0x1UL << RCC_CIR_LSIRDYIE_Pos) /*!< 0x00000100 */\r\n#define RCC_CIR_LSIRDYIE     RCC_CIR_LSIRDYIE_Msk            /*!< LSI Ready Interrupt Enable */\r\n#define RCC_CIR_LSERDYIE_Pos (9U)\r\n#define RCC_CIR_LSERDYIE_Msk (0x1UL << RCC_CIR_LSERDYIE_Pos) /*!< 0x00000200 */\r\n#define RCC_CIR_LSERDYIE     RCC_CIR_LSERDYIE_Msk            /*!< LSE Ready Interrupt Enable */\r\n#define RCC_CIR_HSIRDYIE_Pos (10U)\r\n#define RCC_CIR_HSIRDYIE_Msk (0x1UL << RCC_CIR_HSIRDYIE_Pos) /*!< 0x00000400 */\r\n#define RCC_CIR_HSIRDYIE     RCC_CIR_HSIRDYIE_Msk            /*!< HSI Ready Interrupt Enable */\r\n#define RCC_CIR_HSERDYIE_Pos (11U)\r\n#define RCC_CIR_HSERDYIE_Msk (0x1UL << RCC_CIR_HSERDYIE_Pos) /*!< 0x00000800 */\r\n#define RCC_CIR_HSERDYIE     RCC_CIR_HSERDYIE_Msk            /*!< HSE Ready Interrupt Enable */\r\n#define RCC_CIR_PLLRDYIE_Pos (12U)\r\n#define RCC_CIR_PLLRDYIE_Msk (0x1UL << RCC_CIR_PLLRDYIE_Pos) /*!< 0x00001000 */\r\n#define RCC_CIR_PLLRDYIE     RCC_CIR_PLLRDYIE_Msk            /*!< PLL Ready Interrupt Enable */\r\n#define RCC_CIR_LSIRDYC_Pos  (16U)\r\n#define RCC_CIR_LSIRDYC_Msk  (0x1UL << RCC_CIR_LSIRDYC_Pos) /*!< 0x00010000 */\r\n#define RCC_CIR_LSIRDYC      RCC_CIR_LSIRDYC_Msk            /*!< LSI Ready Interrupt Clear */\r\n#define RCC_CIR_LSERDYC_Pos  (17U)\r\n#define RCC_CIR_LSERDYC_Msk  (0x1UL << RCC_CIR_LSERDYC_Pos) /*!< 0x00020000 */\r\n#define RCC_CIR_LSERDYC      RCC_CIR_LSERDYC_Msk            /*!< LSE Ready Interrupt Clear */\r\n#define RCC_CIR_HSIRDYC_Pos  (18U)\r\n#define RCC_CIR_HSIRDYC_Msk  (0x1UL << RCC_CIR_HSIRDYC_Pos) /*!< 0x00040000 */\r\n#define RCC_CIR_HSIRDYC      RCC_CIR_HSIRDYC_Msk            /*!< HSI Ready Interrupt Clear */\r\n#define RCC_CIR_HSERDYC_Pos  (19U)\r\n#define RCC_CIR_HSERDYC_Msk  (0x1UL << RCC_CIR_HSERDYC_Pos) /*!< 0x00080000 */\r\n#define RCC_CIR_HSERDYC      RCC_CIR_HSERDYC_Msk            /*!< HSE Ready Interrupt Clear */\r\n#define RCC_CIR_PLLRDYC_Pos  (20U)\r\n#define RCC_CIR_PLLRDYC_Msk  (0x1UL << RCC_CIR_PLLRDYC_Pos) /*!< 0x00100000 */\r\n#define RCC_CIR_PLLRDYC      RCC_CIR_PLLRDYC_Msk            /*!< PLL Ready Interrupt Clear */\r\n#define RCC_CIR_CSSC_Pos     (23U)\r\n#define RCC_CIR_CSSC_Msk     (0x1UL << RCC_CIR_CSSC_Pos) /*!< 0x00800000 */\r\n#define RCC_CIR_CSSC         RCC_CIR_CSSC_Msk            /*!< Clock Security System Interrupt Clear */\r\n\r\n/*****************  Bit definition for RCC_APB2RSTR register  *****************/\r\n#define RCC_APB2RSTR_AFIORST_Pos (0U)\r\n#define RCC_APB2RSTR_AFIORST_Msk (0x1UL << RCC_APB2RSTR_AFIORST_Pos) /*!< 0x00000001 */\r\n#define RCC_APB2RSTR_AFIORST     RCC_APB2RSTR_AFIORST_Msk            /*!< Alternate Function I/O reset */\r\n#define RCC_APB2RSTR_IOPARST_Pos (2U)\r\n#define RCC_APB2RSTR_IOPARST_Msk (0x1UL << RCC_APB2RSTR_IOPARST_Pos) /*!< 0x00000004 */\r\n#define RCC_APB2RSTR_IOPARST     RCC_APB2RSTR_IOPARST_Msk            /*!< I/O port A reset */\r\n#define RCC_APB2RSTR_IOPBRST_Pos (3U)\r\n#define RCC_APB2RSTR_IOPBRST_Msk (0x1UL << RCC_APB2RSTR_IOPBRST_Pos) /*!< 0x00000008 */\r\n#define RCC_APB2RSTR_IOPBRST     RCC_APB2RSTR_IOPBRST_Msk            /*!< I/O port B reset */\r\n#define RCC_APB2RSTR_IOPCRST_Pos (4U)\r\n#define RCC_APB2RSTR_IOPCRST_Msk (0x1UL << RCC_APB2RSTR_IOPCRST_Pos) /*!< 0x00000010 */\r\n#define RCC_APB2RSTR_IOPCRST     RCC_APB2RSTR_IOPCRST_Msk            /*!< I/O port C reset */\r\n#define RCC_APB2RSTR_IOPDRST_Pos (5U)\r\n#define RCC_APB2RSTR_IOPDRST_Msk (0x1UL << RCC_APB2RSTR_IOPDRST_Pos) /*!< 0x00000020 */\r\n#define RCC_APB2RSTR_IOPDRST     RCC_APB2RSTR_IOPDRST_Msk            /*!< I/O port D reset */\r\n#define RCC_APB2RSTR_ADC1RST_Pos (9U)\r\n#define RCC_APB2RSTR_ADC1RST_Msk (0x1UL << RCC_APB2RSTR_ADC1RST_Pos) /*!< 0x00000200 */\r\n#define RCC_APB2RSTR_ADC1RST     RCC_APB2RSTR_ADC1RST_Msk            /*!< ADC 1 interface reset */\r\n\r\n#define RCC_APB2RSTR_ADC2RST_Pos (10U)\r\n#define RCC_APB2RSTR_ADC2RST_Msk (0x1UL << RCC_APB2RSTR_ADC2RST_Pos) /*!< 0x00000400 */\r\n#define RCC_APB2RSTR_ADC2RST     RCC_APB2RSTR_ADC2RST_Msk            /*!< ADC 2 interface reset */\r\n\r\n#define RCC_APB2RSTR_TIM1RST_Pos   (11U)\r\n#define RCC_APB2RSTR_TIM1RST_Msk   (0x1UL << RCC_APB2RSTR_TIM1RST_Pos) /*!< 0x00000800 */\r\n#define RCC_APB2RSTR_TIM1RST       RCC_APB2RSTR_TIM1RST_Msk            /*!< TIM1 Timer reset */\r\n#define RCC_APB2RSTR_SPI1RST_Pos   (12U)\r\n#define RCC_APB2RSTR_SPI1RST_Msk   (0x1UL << RCC_APB2RSTR_SPI1RST_Pos) /*!< 0x00001000 */\r\n#define RCC_APB2RSTR_SPI1RST       RCC_APB2RSTR_SPI1RST_Msk            /*!< SPI 1 reset */\r\n#define RCC_APB2RSTR_USART1RST_Pos (14U)\r\n#define RCC_APB2RSTR_USART1RST_Msk (0x1UL << RCC_APB2RSTR_USART1RST_Pos) /*!< 0x00004000 */\r\n#define RCC_APB2RSTR_USART1RST     RCC_APB2RSTR_USART1RST_Msk            /*!< USART1 reset */\r\n\r\n#define RCC_APB2RSTR_IOPERST_Pos (6U)\r\n#define RCC_APB2RSTR_IOPERST_Msk (0x1UL << RCC_APB2RSTR_IOPERST_Pos) /*!< 0x00000040 */\r\n#define RCC_APB2RSTR_IOPERST     RCC_APB2RSTR_IOPERST_Msk            /*!< I/O port E reset */\r\n\r\n/*****************  Bit definition for RCC_APB1RSTR register  *****************/\r\n#define RCC_APB1RSTR_TIM2RST_Pos   (0U)\r\n#define RCC_APB1RSTR_TIM2RST_Msk   (0x1UL << RCC_APB1RSTR_TIM2RST_Pos) /*!< 0x00000001 */\r\n#define RCC_APB1RSTR_TIM2RST       RCC_APB1RSTR_TIM2RST_Msk            /*!< Timer 2 reset */\r\n#define RCC_APB1RSTR_TIM3RST_Pos   (1U)\r\n#define RCC_APB1RSTR_TIM3RST_Msk   (0x1UL << RCC_APB1RSTR_TIM3RST_Pos) /*!< 0x00000002 */\r\n#define RCC_APB1RSTR_TIM3RST       RCC_APB1RSTR_TIM3RST_Msk            /*!< Timer 3 reset */\r\n#define RCC_APB1RSTR_WWDGRST_Pos   (11U)\r\n#define RCC_APB1RSTR_WWDGRST_Msk   (0x1UL << RCC_APB1RSTR_WWDGRST_Pos) /*!< 0x00000800 */\r\n#define RCC_APB1RSTR_WWDGRST       RCC_APB1RSTR_WWDGRST_Msk            /*!< Window Watchdog reset */\r\n#define RCC_APB1RSTR_USART2RST_Pos (17U)\r\n#define RCC_APB1RSTR_USART2RST_Msk (0x1UL << RCC_APB1RSTR_USART2RST_Pos) /*!< 0x00020000 */\r\n#define RCC_APB1RSTR_USART2RST     RCC_APB1RSTR_USART2RST_Msk            /*!< USART 2 reset */\r\n#define RCC_APB1RSTR_I2C1RST_Pos   (21U)\r\n#define RCC_APB1RSTR_I2C1RST_Msk   (0x1UL << RCC_APB1RSTR_I2C1RST_Pos) /*!< 0x00200000 */\r\n#define RCC_APB1RSTR_I2C1RST       RCC_APB1RSTR_I2C1RST_Msk            /*!< I2C 1 reset */\r\n\r\n#define RCC_APB1RSTR_CAN1RST_Pos (25U)\r\n#define RCC_APB1RSTR_CAN1RST_Msk (0x1UL << RCC_APB1RSTR_CAN1RST_Pos) /*!< 0x02000000 */\r\n#define RCC_APB1RSTR_CAN1RST     RCC_APB1RSTR_CAN1RST_Msk            /*!< CAN1 reset */\r\n\r\n#define RCC_APB1RSTR_BKPRST_Pos (27U)\r\n#define RCC_APB1RSTR_BKPRST_Msk (0x1UL << RCC_APB1RSTR_BKPRST_Pos) /*!< 0x08000000 */\r\n#define RCC_APB1RSTR_BKPRST     RCC_APB1RSTR_BKPRST_Msk            /*!< Backup interface reset */\r\n#define RCC_APB1RSTR_PWRRST_Pos (28U)\r\n#define RCC_APB1RSTR_PWRRST_Msk (0x1UL << RCC_APB1RSTR_PWRRST_Pos) /*!< 0x10000000 */\r\n#define RCC_APB1RSTR_PWRRST     RCC_APB1RSTR_PWRRST_Msk            /*!< Power interface reset */\r\n\r\n#define RCC_APB1RSTR_TIM4RST_Pos   (2U)\r\n#define RCC_APB1RSTR_TIM4RST_Msk   (0x1UL << RCC_APB1RSTR_TIM4RST_Pos) /*!< 0x00000004 */\r\n#define RCC_APB1RSTR_TIM4RST       RCC_APB1RSTR_TIM4RST_Msk            /*!< Timer 4 reset */\r\n#define RCC_APB1RSTR_SPI2RST_Pos   (14U)\r\n#define RCC_APB1RSTR_SPI2RST_Msk   (0x1UL << RCC_APB1RSTR_SPI2RST_Pos) /*!< 0x00004000 */\r\n#define RCC_APB1RSTR_SPI2RST       RCC_APB1RSTR_SPI2RST_Msk            /*!< SPI 2 reset */\r\n#define RCC_APB1RSTR_USART3RST_Pos (18U)\r\n#define RCC_APB1RSTR_USART3RST_Msk (0x1UL << RCC_APB1RSTR_USART3RST_Pos) /*!< 0x00040000 */\r\n#define RCC_APB1RSTR_USART3RST     RCC_APB1RSTR_USART3RST_Msk            /*!< USART 3 reset */\r\n#define RCC_APB1RSTR_I2C2RST_Pos   (22U)\r\n#define RCC_APB1RSTR_I2C2RST_Msk   (0x1UL << RCC_APB1RSTR_I2C2RST_Pos) /*!< 0x00400000 */\r\n#define RCC_APB1RSTR_I2C2RST       RCC_APB1RSTR_I2C2RST_Msk            /*!< I2C 2 reset */\r\n\r\n#define RCC_APB1RSTR_USBRST_Pos (23U)\r\n#define RCC_APB1RSTR_USBRST_Msk (0x1UL << RCC_APB1RSTR_USBRST_Pos) /*!< 0x00800000 */\r\n#define RCC_APB1RSTR_USBRST     RCC_APB1RSTR_USBRST_Msk            /*!< USB Device reset */\r\n\r\n/******************  Bit definition for RCC_AHBENR register  ******************/\r\n#define RCC_AHBENR_DMA1EN_Pos  (0U)\r\n#define RCC_AHBENR_DMA1EN_Msk  (0x1UL << RCC_AHBENR_DMA1EN_Pos) /*!< 0x00000001 */\r\n#define RCC_AHBENR_DMA1EN      RCC_AHBENR_DMA1EN_Msk            /*!< DMA1 clock enable */\r\n#define RCC_AHBENR_SRAMEN_Pos  (2U)\r\n#define RCC_AHBENR_SRAMEN_Msk  (0x1UL << RCC_AHBENR_SRAMEN_Pos) /*!< 0x00000004 */\r\n#define RCC_AHBENR_SRAMEN      RCC_AHBENR_SRAMEN_Msk            /*!< SRAM interface clock enable */\r\n#define RCC_AHBENR_FLITFEN_Pos (4U)\r\n#define RCC_AHBENR_FLITFEN_Msk (0x1UL << RCC_AHBENR_FLITFEN_Pos) /*!< 0x00000010 */\r\n#define RCC_AHBENR_FLITFEN     RCC_AHBENR_FLITFEN_Msk            /*!< FLITF clock enable */\r\n#define RCC_AHBENR_CRCEN_Pos   (6U)\r\n#define RCC_AHBENR_CRCEN_Msk   (0x1UL << RCC_AHBENR_CRCEN_Pos) /*!< 0x00000040 */\r\n#define RCC_AHBENR_CRCEN       RCC_AHBENR_CRCEN_Msk            /*!< CRC clock enable */\r\n\r\n/******************  Bit definition for RCC_APB2ENR register  *****************/\r\n#define RCC_APB2ENR_AFIOEN_Pos (0U)\r\n#define RCC_APB2ENR_AFIOEN_Msk (0x1UL << RCC_APB2ENR_AFIOEN_Pos) /*!< 0x00000001 */\r\n#define RCC_APB2ENR_AFIOEN     RCC_APB2ENR_AFIOEN_Msk            /*!< Alternate Function I/O clock enable */\r\n#define RCC_APB2ENR_IOPAEN_Pos (2U)\r\n#define RCC_APB2ENR_IOPAEN_Msk (0x1UL << RCC_APB2ENR_IOPAEN_Pos) /*!< 0x00000004 */\r\n#define RCC_APB2ENR_IOPAEN     RCC_APB2ENR_IOPAEN_Msk            /*!< I/O port A clock enable */\r\n#define RCC_APB2ENR_IOPBEN_Pos (3U)\r\n#define RCC_APB2ENR_IOPBEN_Msk (0x1UL << RCC_APB2ENR_IOPBEN_Pos) /*!< 0x00000008 */\r\n#define RCC_APB2ENR_IOPBEN     RCC_APB2ENR_IOPBEN_Msk            /*!< I/O port B clock enable */\r\n#define RCC_APB2ENR_IOPCEN_Pos (4U)\r\n#define RCC_APB2ENR_IOPCEN_Msk (0x1UL << RCC_APB2ENR_IOPCEN_Pos) /*!< 0x00000010 */\r\n#define RCC_APB2ENR_IOPCEN     RCC_APB2ENR_IOPCEN_Msk            /*!< I/O port C clock enable */\r\n#define RCC_APB2ENR_IOPDEN_Pos (5U)\r\n#define RCC_APB2ENR_IOPDEN_Msk (0x1UL << RCC_APB2ENR_IOPDEN_Pos) /*!< 0x00000020 */\r\n#define RCC_APB2ENR_IOPDEN     RCC_APB2ENR_IOPDEN_Msk            /*!< I/O port D clock enable */\r\n#define RCC_APB2ENR_ADC1EN_Pos (9U)\r\n#define RCC_APB2ENR_ADC1EN_Msk (0x1UL << RCC_APB2ENR_ADC1EN_Pos) /*!< 0x00000200 */\r\n#define RCC_APB2ENR_ADC1EN     RCC_APB2ENR_ADC1EN_Msk            /*!< ADC 1 interface clock enable */\r\n\r\n#define RCC_APB2ENR_ADC2EN_Pos (10U)\r\n#define RCC_APB2ENR_ADC2EN_Msk (0x1UL << RCC_APB2ENR_ADC2EN_Pos) /*!< 0x00000400 */\r\n#define RCC_APB2ENR_ADC2EN     RCC_APB2ENR_ADC2EN_Msk            /*!< ADC 2 interface clock enable */\r\n\r\n#define RCC_APB2ENR_TIM1EN_Pos   (11U)\r\n#define RCC_APB2ENR_TIM1EN_Msk   (0x1UL << RCC_APB2ENR_TIM1EN_Pos) /*!< 0x00000800 */\r\n#define RCC_APB2ENR_TIM1EN       RCC_APB2ENR_TIM1EN_Msk            /*!< TIM1 Timer clock enable */\r\n#define RCC_APB2ENR_SPI1EN_Pos   (12U)\r\n#define RCC_APB2ENR_SPI1EN_Msk   (0x1UL << RCC_APB2ENR_SPI1EN_Pos) /*!< 0x00001000 */\r\n#define RCC_APB2ENR_SPI1EN       RCC_APB2ENR_SPI1EN_Msk            /*!< SPI 1 clock enable */\r\n#define RCC_APB2ENR_USART1EN_Pos (14U)\r\n#define RCC_APB2ENR_USART1EN_Msk (0x1UL << RCC_APB2ENR_USART1EN_Pos) /*!< 0x00004000 */\r\n#define RCC_APB2ENR_USART1EN     RCC_APB2ENR_USART1EN_Msk            /*!< USART1 clock enable */\r\n\r\n#define RCC_APB2ENR_IOPEEN_Pos (6U)\r\n#define RCC_APB2ENR_IOPEEN_Msk (0x1UL << RCC_APB2ENR_IOPEEN_Pos) /*!< 0x00000040 */\r\n#define RCC_APB2ENR_IOPEEN     RCC_APB2ENR_IOPEEN_Msk            /*!< I/O port E clock enable */\r\n\r\n/*****************  Bit definition for RCC_APB1ENR register  ******************/\r\n#define RCC_APB1ENR_TIM2EN_Pos   (0U)\r\n#define RCC_APB1ENR_TIM2EN_Msk   (0x1UL << RCC_APB1ENR_TIM2EN_Pos) /*!< 0x00000001 */\r\n#define RCC_APB1ENR_TIM2EN       RCC_APB1ENR_TIM2EN_Msk            /*!< Timer 2 clock enabled*/\r\n#define RCC_APB1ENR_TIM3EN_Pos   (1U)\r\n#define RCC_APB1ENR_TIM3EN_Msk   (0x1UL << RCC_APB1ENR_TIM3EN_Pos) /*!< 0x00000002 */\r\n#define RCC_APB1ENR_TIM3EN       RCC_APB1ENR_TIM3EN_Msk            /*!< Timer 3 clock enable */\r\n#define RCC_APB1ENR_WWDGEN_Pos   (11U)\r\n#define RCC_APB1ENR_WWDGEN_Msk   (0x1UL << RCC_APB1ENR_WWDGEN_Pos) /*!< 0x00000800 */\r\n#define RCC_APB1ENR_WWDGEN       RCC_APB1ENR_WWDGEN_Msk            /*!< Window Watchdog clock enable */\r\n#define RCC_APB1ENR_USART2EN_Pos (17U)\r\n#define RCC_APB1ENR_USART2EN_Msk (0x1UL << RCC_APB1ENR_USART2EN_Pos) /*!< 0x00020000 */\r\n#define RCC_APB1ENR_USART2EN     RCC_APB1ENR_USART2EN_Msk            /*!< USART 2 clock enable */\r\n#define RCC_APB1ENR_I2C1EN_Pos   (21U)\r\n#define RCC_APB1ENR_I2C1EN_Msk   (0x1UL << RCC_APB1ENR_I2C1EN_Pos) /*!< 0x00200000 */\r\n#define RCC_APB1ENR_I2C1EN       RCC_APB1ENR_I2C1EN_Msk            /*!< I2C 1 clock enable */\r\n\r\n#define RCC_APB1ENR_CAN1EN_Pos (25U)\r\n#define RCC_APB1ENR_CAN1EN_Msk (0x1UL << RCC_APB1ENR_CAN1EN_Pos) /*!< 0x02000000 */\r\n#define RCC_APB1ENR_CAN1EN     RCC_APB1ENR_CAN1EN_Msk            /*!< CAN1 clock enable */\r\n\r\n#define RCC_APB1ENR_BKPEN_Pos (27U)\r\n#define RCC_APB1ENR_BKPEN_Msk (0x1UL << RCC_APB1ENR_BKPEN_Pos) /*!< 0x08000000 */\r\n#define RCC_APB1ENR_BKPEN     RCC_APB1ENR_BKPEN_Msk            /*!< Backup interface clock enable */\r\n#define RCC_APB1ENR_PWREN_Pos (28U)\r\n#define RCC_APB1ENR_PWREN_Msk (0x1UL << RCC_APB1ENR_PWREN_Pos) /*!< 0x10000000 */\r\n#define RCC_APB1ENR_PWREN     RCC_APB1ENR_PWREN_Msk            /*!< Power interface clock enable */\r\n\r\n#define RCC_APB1ENR_TIM4EN_Pos   (2U)\r\n#define RCC_APB1ENR_TIM4EN_Msk   (0x1UL << RCC_APB1ENR_TIM4EN_Pos) /*!< 0x00000004 */\r\n#define RCC_APB1ENR_TIM4EN       RCC_APB1ENR_TIM4EN_Msk            /*!< Timer 4 clock enable */\r\n#define RCC_APB1ENR_SPI2EN_Pos   (14U)\r\n#define RCC_APB1ENR_SPI2EN_Msk   (0x1UL << RCC_APB1ENR_SPI2EN_Pos) /*!< 0x00004000 */\r\n#define RCC_APB1ENR_SPI2EN       RCC_APB1ENR_SPI2EN_Msk            /*!< SPI 2 clock enable */\r\n#define RCC_APB1ENR_USART3EN_Pos (18U)\r\n#define RCC_APB1ENR_USART3EN_Msk (0x1UL << RCC_APB1ENR_USART3EN_Pos) /*!< 0x00040000 */\r\n#define RCC_APB1ENR_USART3EN     RCC_APB1ENR_USART3EN_Msk            /*!< USART 3 clock enable */\r\n#define RCC_APB1ENR_I2C2EN_Pos   (22U)\r\n#define RCC_APB1ENR_I2C2EN_Msk   (0x1UL << RCC_APB1ENR_I2C2EN_Pos) /*!< 0x00400000 */\r\n#define RCC_APB1ENR_I2C2EN       RCC_APB1ENR_I2C2EN_Msk            /*!< I2C 2 clock enable */\r\n\r\n#define RCC_APB1ENR_USBEN_Pos (23U)\r\n#define RCC_APB1ENR_USBEN_Msk (0x1UL << RCC_APB1ENR_USBEN_Pos) /*!< 0x00800000 */\r\n#define RCC_APB1ENR_USBEN     RCC_APB1ENR_USBEN_Msk            /*!< USB Device clock enable */\r\n\r\n/*******************  Bit definition for RCC_BDCR register  *******************/\r\n#define RCC_BDCR_LSEON_Pos  (0U)\r\n#define RCC_BDCR_LSEON_Msk  (0x1UL << RCC_BDCR_LSEON_Pos) /*!< 0x00000001 */\r\n#define RCC_BDCR_LSEON      RCC_BDCR_LSEON_Msk            /*!< External Low Speed oscillator enable */\r\n#define RCC_BDCR_LSERDY_Pos (1U)\r\n#define RCC_BDCR_LSERDY_Msk (0x1UL << RCC_BDCR_LSERDY_Pos) /*!< 0x00000002 */\r\n#define RCC_BDCR_LSERDY     RCC_BDCR_LSERDY_Msk            /*!< External Low Speed oscillator Ready */\r\n#define RCC_BDCR_LSEBYP_Pos (2U)\r\n#define RCC_BDCR_LSEBYP_Msk (0x1UL << RCC_BDCR_LSEBYP_Pos) /*!< 0x00000004 */\r\n#define RCC_BDCR_LSEBYP     RCC_BDCR_LSEBYP_Msk            /*!< External Low Speed oscillator Bypass */\r\n\r\n#define RCC_BDCR_RTCSEL_Pos (8U)\r\n#define RCC_BDCR_RTCSEL_Msk (0x3UL << RCC_BDCR_RTCSEL_Pos) /*!< 0x00000300 */\r\n#define RCC_BDCR_RTCSEL     RCC_BDCR_RTCSEL_Msk            /*!< RTCSEL[1:0] bits (RTC clock source selection) */\r\n#define RCC_BDCR_RTCSEL_0   (0x1UL << RCC_BDCR_RTCSEL_Pos) /*!< 0x00000100 */\r\n#define RCC_BDCR_RTCSEL_1   (0x2UL << RCC_BDCR_RTCSEL_Pos) /*!< 0x00000200 */\r\n\r\n/*!< RTC congiguration */\r\n#define RCC_BDCR_RTCSEL_NOCLOCK 0x00000000U /*!< No clock */\r\n#define RCC_BDCR_RTCSEL_LSE     0x00000100U /*!< LSE oscillator clock used as RTC clock */\r\n#define RCC_BDCR_RTCSEL_LSI     0x00000200U /*!< LSI oscillator clock used as RTC clock */\r\n#define RCC_BDCR_RTCSEL_HSE     0x00000300U /*!< HSE oscillator clock divided by 128 used as RTC clock */\r\n\r\n#define RCC_BDCR_RTCEN_Pos (15U)\r\n#define RCC_BDCR_RTCEN_Msk (0x1UL << RCC_BDCR_RTCEN_Pos) /*!< 0x00008000 */\r\n#define RCC_BDCR_RTCEN     RCC_BDCR_RTCEN_Msk            /*!< RTC clock enable */\r\n#define RCC_BDCR_BDRST_Pos (16U)\r\n#define RCC_BDCR_BDRST_Msk (0x1UL << RCC_BDCR_BDRST_Pos) /*!< 0x00010000 */\r\n#define RCC_BDCR_BDRST     RCC_BDCR_BDRST_Msk            /*!< Backup domain software reset  */\r\n\r\n/*******************  Bit definition for RCC_CSR register  ********************/\r\n#define RCC_CSR_LSION_Pos    (0U)\r\n#define RCC_CSR_LSION_Msk    (0x1UL << RCC_CSR_LSION_Pos) /*!< 0x00000001 */\r\n#define RCC_CSR_LSION        RCC_CSR_LSION_Msk            /*!< Internal Low Speed oscillator enable */\r\n#define RCC_CSR_LSIRDY_Pos   (1U)\r\n#define RCC_CSR_LSIRDY_Msk   (0x1UL << RCC_CSR_LSIRDY_Pos) /*!< 0x00000002 */\r\n#define RCC_CSR_LSIRDY       RCC_CSR_LSIRDY_Msk            /*!< Internal Low Speed oscillator Ready */\r\n#define RCC_CSR_RMVF_Pos     (24U)\r\n#define RCC_CSR_RMVF_Msk     (0x1UL << RCC_CSR_RMVF_Pos) /*!< 0x01000000 */\r\n#define RCC_CSR_RMVF         RCC_CSR_RMVF_Msk            /*!< Remove reset flag */\r\n#define RCC_CSR_PINRSTF_Pos  (26U)\r\n#define RCC_CSR_PINRSTF_Msk  (0x1UL << RCC_CSR_PINRSTF_Pos) /*!< 0x04000000 */\r\n#define RCC_CSR_PINRSTF      RCC_CSR_PINRSTF_Msk            /*!< PIN reset flag */\r\n#define RCC_CSR_PORRSTF_Pos  (27U)\r\n#define RCC_CSR_PORRSTF_Msk  (0x1UL << RCC_CSR_PORRSTF_Pos) /*!< 0x08000000 */\r\n#define RCC_CSR_PORRSTF      RCC_CSR_PORRSTF_Msk            /*!< POR/PDR reset flag */\r\n#define RCC_CSR_SFTRSTF_Pos  (28U)\r\n#define RCC_CSR_SFTRSTF_Msk  (0x1UL << RCC_CSR_SFTRSTF_Pos) /*!< 0x10000000 */\r\n#define RCC_CSR_SFTRSTF      RCC_CSR_SFTRSTF_Msk            /*!< Software Reset flag */\r\n#define RCC_CSR_IWDGRSTF_Pos (29U)\r\n#define RCC_CSR_IWDGRSTF_Msk (0x1UL << RCC_CSR_IWDGRSTF_Pos) /*!< 0x20000000 */\r\n#define RCC_CSR_IWDGRSTF     RCC_CSR_IWDGRSTF_Msk            /*!< Independent Watchdog reset flag */\r\n#define RCC_CSR_WWDGRSTF_Pos (30U)\r\n#define RCC_CSR_WWDGRSTF_Msk (0x1UL << RCC_CSR_WWDGRSTF_Pos) /*!< 0x40000000 */\r\n#define RCC_CSR_WWDGRSTF     RCC_CSR_WWDGRSTF_Msk            /*!< Window watchdog reset flag */\r\n#define RCC_CSR_LPWRRSTF_Pos (31U)\r\n#define RCC_CSR_LPWRRSTF_Msk (0x1UL << RCC_CSR_LPWRRSTF_Pos) /*!< 0x80000000 */\r\n#define RCC_CSR_LPWRRSTF     RCC_CSR_LPWRRSTF_Msk            /*!< Low-Power reset flag */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                General Purpose and Alternate Function I/O                  */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for GPIO_CRL register  *******************/\r\n#define GPIO_CRL_MODE_Pos (0U)\r\n#define GPIO_CRL_MODE_Msk (0x33333333UL << GPIO_CRL_MODE_Pos) /*!< 0x33333333 */\r\n#define GPIO_CRL_MODE     GPIO_CRL_MODE_Msk                   /*!< Port x mode bits */\r\n\r\n#define GPIO_CRL_MODE0_Pos (0U)\r\n#define GPIO_CRL_MODE0_Msk (0x3UL << GPIO_CRL_MODE0_Pos) /*!< 0x00000003 */\r\n#define GPIO_CRL_MODE0     GPIO_CRL_MODE0_Msk            /*!< MODE0[1:0] bits (Port x mode bits, pin 0) */\r\n#define GPIO_CRL_MODE0_0   (0x1UL << GPIO_CRL_MODE0_Pos) /*!< 0x00000001 */\r\n#define GPIO_CRL_MODE0_1   (0x2UL << GPIO_CRL_MODE0_Pos) /*!< 0x00000002 */\r\n\r\n#define GPIO_CRL_MODE1_Pos (4U)\r\n#define GPIO_CRL_MODE1_Msk (0x3UL << GPIO_CRL_MODE1_Pos) /*!< 0x00000030 */\r\n#define GPIO_CRL_MODE1     GPIO_CRL_MODE1_Msk            /*!< MODE1[1:0] bits (Port x mode bits, pin 1) */\r\n#define GPIO_CRL_MODE1_0   (0x1UL << GPIO_CRL_MODE1_Pos) /*!< 0x00000010 */\r\n#define GPIO_CRL_MODE1_1   (0x2UL << GPIO_CRL_MODE1_Pos) /*!< 0x00000020 */\r\n\r\n#define GPIO_CRL_MODE2_Pos (8U)\r\n#define GPIO_CRL_MODE2_Msk (0x3UL << GPIO_CRL_MODE2_Pos) /*!< 0x00000300 */\r\n#define GPIO_CRL_MODE2     GPIO_CRL_MODE2_Msk            /*!< MODE2[1:0] bits (Port x mode bits, pin 2) */\r\n#define GPIO_CRL_MODE2_0   (0x1UL << GPIO_CRL_MODE2_Pos) /*!< 0x00000100 */\r\n#define GPIO_CRL_MODE2_1   (0x2UL << GPIO_CRL_MODE2_Pos) /*!< 0x00000200 */\r\n\r\n#define GPIO_CRL_MODE3_Pos (12U)\r\n#define GPIO_CRL_MODE3_Msk (0x3UL << GPIO_CRL_MODE3_Pos) /*!< 0x00003000 */\r\n#define GPIO_CRL_MODE3     GPIO_CRL_MODE3_Msk            /*!< MODE3[1:0] bits (Port x mode bits, pin 3) */\r\n#define GPIO_CRL_MODE3_0   (0x1UL << GPIO_CRL_MODE3_Pos) /*!< 0x00001000 */\r\n#define GPIO_CRL_MODE3_1   (0x2UL << GPIO_CRL_MODE3_Pos) /*!< 0x00002000 */\r\n\r\n#define GPIO_CRL_MODE4_Pos (16U)\r\n#define GPIO_CRL_MODE4_Msk (0x3UL << GPIO_CRL_MODE4_Pos) /*!< 0x00030000 */\r\n#define GPIO_CRL_MODE4     GPIO_CRL_MODE4_Msk            /*!< MODE4[1:0] bits (Port x mode bits, pin 4) */\r\n#define GPIO_CRL_MODE4_0   (0x1UL << GPIO_CRL_MODE4_Pos) /*!< 0x00010000 */\r\n#define GPIO_CRL_MODE4_1   (0x2UL << GPIO_CRL_MODE4_Pos) /*!< 0x00020000 */\r\n\r\n#define GPIO_CRL_MODE5_Pos (20U)\r\n#define GPIO_CRL_MODE5_Msk (0x3UL << GPIO_CRL_MODE5_Pos) /*!< 0x00300000 */\r\n#define GPIO_CRL_MODE5     GPIO_CRL_MODE5_Msk            /*!< MODE5[1:0] bits (Port x mode bits, pin 5) */\r\n#define GPIO_CRL_MODE5_0   (0x1UL << GPIO_CRL_MODE5_Pos) /*!< 0x00100000 */\r\n#define GPIO_CRL_MODE5_1   (0x2UL << GPIO_CRL_MODE5_Pos) /*!< 0x00200000 */\r\n\r\n#define GPIO_CRL_MODE6_Pos (24U)\r\n#define GPIO_CRL_MODE6_Msk (0x3UL << GPIO_CRL_MODE6_Pos) /*!< 0x03000000 */\r\n#define GPIO_CRL_MODE6     GPIO_CRL_MODE6_Msk            /*!< MODE6[1:0] bits (Port x mode bits, pin 6) */\r\n#define GPIO_CRL_MODE6_0   (0x1UL << GPIO_CRL_MODE6_Pos) /*!< 0x01000000 */\r\n#define GPIO_CRL_MODE6_1   (0x2UL << GPIO_CRL_MODE6_Pos) /*!< 0x02000000 */\r\n\r\n#define GPIO_CRL_MODE7_Pos (28U)\r\n#define GPIO_CRL_MODE7_Msk (0x3UL << GPIO_CRL_MODE7_Pos) /*!< 0x30000000 */\r\n#define GPIO_CRL_MODE7     GPIO_CRL_MODE7_Msk            /*!< MODE7[1:0] bits (Port x mode bits, pin 7) */\r\n#define GPIO_CRL_MODE7_0   (0x1UL << GPIO_CRL_MODE7_Pos) /*!< 0x10000000 */\r\n#define GPIO_CRL_MODE7_1   (0x2UL << GPIO_CRL_MODE7_Pos) /*!< 0x20000000 */\r\n\r\n#define GPIO_CRL_CNF_Pos (2U)\r\n#define GPIO_CRL_CNF_Msk (0x33333333UL << GPIO_CRL_CNF_Pos) /*!< 0xCCCCCCCC */\r\n#define GPIO_CRL_CNF     GPIO_CRL_CNF_Msk                   /*!< Port x configuration bits */\r\n\r\n#define GPIO_CRL_CNF0_Pos (2U)\r\n#define GPIO_CRL_CNF0_Msk (0x3UL << GPIO_CRL_CNF0_Pos) /*!< 0x0000000C */\r\n#define GPIO_CRL_CNF0     GPIO_CRL_CNF0_Msk            /*!< CNF0[1:0] bits (Port x configuration bits, pin 0) */\r\n#define GPIO_CRL_CNF0_0   (0x1UL << GPIO_CRL_CNF0_Pos) /*!< 0x00000004 */\r\n#define GPIO_CRL_CNF0_1   (0x2UL << GPIO_CRL_CNF0_Pos) /*!< 0x00000008 */\r\n\r\n#define GPIO_CRL_CNF1_Pos (6U)\r\n#define GPIO_CRL_CNF1_Msk (0x3UL << GPIO_CRL_CNF1_Pos) /*!< 0x000000C0 */\r\n#define GPIO_CRL_CNF1     GPIO_CRL_CNF1_Msk            /*!< CNF1[1:0] bits (Port x configuration bits, pin 1) */\r\n#define GPIO_CRL_CNF1_0   (0x1UL << GPIO_CRL_CNF1_Pos) /*!< 0x00000040 */\r\n#define GPIO_CRL_CNF1_1   (0x2UL << GPIO_CRL_CNF1_Pos) /*!< 0x00000080 */\r\n\r\n#define GPIO_CRL_CNF2_Pos (10U)\r\n#define GPIO_CRL_CNF2_Msk (0x3UL << GPIO_CRL_CNF2_Pos) /*!< 0x00000C00 */\r\n#define GPIO_CRL_CNF2     GPIO_CRL_CNF2_Msk            /*!< CNF2[1:0] bits (Port x configuration bits, pin 2) */\r\n#define GPIO_CRL_CNF2_0   (0x1UL << GPIO_CRL_CNF2_Pos) /*!< 0x00000400 */\r\n#define GPIO_CRL_CNF2_1   (0x2UL << GPIO_CRL_CNF2_Pos) /*!< 0x00000800 */\r\n\r\n#define GPIO_CRL_CNF3_Pos (14U)\r\n#define GPIO_CRL_CNF3_Msk (0x3UL << GPIO_CRL_CNF3_Pos) /*!< 0x0000C000 */\r\n#define GPIO_CRL_CNF3     GPIO_CRL_CNF3_Msk            /*!< CNF3[1:0] bits (Port x configuration bits, pin 3) */\r\n#define GPIO_CRL_CNF3_0   (0x1UL << GPIO_CRL_CNF3_Pos) /*!< 0x00004000 */\r\n#define GPIO_CRL_CNF3_1   (0x2UL << GPIO_CRL_CNF3_Pos) /*!< 0x00008000 */\r\n\r\n#define GPIO_CRL_CNF4_Pos (18U)\r\n#define GPIO_CRL_CNF4_Msk (0x3UL << GPIO_CRL_CNF4_Pos) /*!< 0x000C0000 */\r\n#define GPIO_CRL_CNF4     GPIO_CRL_CNF4_Msk            /*!< CNF4[1:0] bits (Port x configuration bits, pin 4) */\r\n#define GPIO_CRL_CNF4_0   (0x1UL << GPIO_CRL_CNF4_Pos) /*!< 0x00040000 */\r\n#define GPIO_CRL_CNF4_1   (0x2UL << GPIO_CRL_CNF4_Pos) /*!< 0x00080000 */\r\n\r\n#define GPIO_CRL_CNF5_Pos (22U)\r\n#define GPIO_CRL_CNF5_Msk (0x3UL << GPIO_CRL_CNF5_Pos) /*!< 0x00C00000 */\r\n#define GPIO_CRL_CNF5     GPIO_CRL_CNF5_Msk            /*!< CNF5[1:0] bits (Port x configuration bits, pin 5) */\r\n#define GPIO_CRL_CNF5_0   (0x1UL << GPIO_CRL_CNF5_Pos) /*!< 0x00400000 */\r\n#define GPIO_CRL_CNF5_1   (0x2UL << GPIO_CRL_CNF5_Pos) /*!< 0x00800000 */\r\n\r\n#define GPIO_CRL_CNF6_Pos (26U)\r\n#define GPIO_CRL_CNF6_Msk (0x3UL << GPIO_CRL_CNF6_Pos) /*!< 0x0C000000 */\r\n#define GPIO_CRL_CNF6     GPIO_CRL_CNF6_Msk            /*!< CNF6[1:0] bits (Port x configuration bits, pin 6) */\r\n#define GPIO_CRL_CNF6_0   (0x1UL << GPIO_CRL_CNF6_Pos) /*!< 0x04000000 */\r\n#define GPIO_CRL_CNF6_1   (0x2UL << GPIO_CRL_CNF6_Pos) /*!< 0x08000000 */\r\n\r\n#define GPIO_CRL_CNF7_Pos (30U)\r\n#define GPIO_CRL_CNF7_Msk (0x3UL << GPIO_CRL_CNF7_Pos) /*!< 0xC0000000 */\r\n#define GPIO_CRL_CNF7     GPIO_CRL_CNF7_Msk            /*!< CNF7[1:0] bits (Port x configuration bits, pin 7) */\r\n#define GPIO_CRL_CNF7_0   (0x1UL << GPIO_CRL_CNF7_Pos) /*!< 0x40000000 */\r\n#define GPIO_CRL_CNF7_1   (0x2UL << GPIO_CRL_CNF7_Pos) /*!< 0x80000000 */\r\n\r\n/*******************  Bit definition for GPIO_CRH register  *******************/\r\n#define GPIO_CRH_MODE_Pos (0U)\r\n#define GPIO_CRH_MODE_Msk (0x33333333UL << GPIO_CRH_MODE_Pos) /*!< 0x33333333 */\r\n#define GPIO_CRH_MODE     GPIO_CRH_MODE_Msk                   /*!< Port x mode bits */\r\n\r\n#define GPIO_CRH_MODE8_Pos (0U)\r\n#define GPIO_CRH_MODE8_Msk (0x3UL << GPIO_CRH_MODE8_Pos) /*!< 0x00000003 */\r\n#define GPIO_CRH_MODE8     GPIO_CRH_MODE8_Msk            /*!< MODE8[1:0] bits (Port x mode bits, pin 8) */\r\n#define GPIO_CRH_MODE8_0   (0x1UL << GPIO_CRH_MODE8_Pos) /*!< 0x00000001 */\r\n#define GPIO_CRH_MODE8_1   (0x2UL << GPIO_CRH_MODE8_Pos) /*!< 0x00000002 */\r\n\r\n#define GPIO_CRH_MODE9_Pos (4U)\r\n#define GPIO_CRH_MODE9_Msk (0x3UL << GPIO_CRH_MODE9_Pos) /*!< 0x00000030 */\r\n#define GPIO_CRH_MODE9     GPIO_CRH_MODE9_Msk            /*!< MODE9[1:0] bits (Port x mode bits, pin 9) */\r\n#define GPIO_CRH_MODE9_0   (0x1UL << GPIO_CRH_MODE9_Pos) /*!< 0x00000010 */\r\n#define GPIO_CRH_MODE9_1   (0x2UL << GPIO_CRH_MODE9_Pos) /*!< 0x00000020 */\r\n\r\n#define GPIO_CRH_MODE10_Pos (8U)\r\n#define GPIO_CRH_MODE10_Msk (0x3UL << GPIO_CRH_MODE10_Pos) /*!< 0x00000300 */\r\n#define GPIO_CRH_MODE10     GPIO_CRH_MODE10_Msk            /*!< MODE10[1:0] bits (Port x mode bits, pin 10) */\r\n#define GPIO_CRH_MODE10_0   (0x1UL << GPIO_CRH_MODE10_Pos) /*!< 0x00000100 */\r\n#define GPIO_CRH_MODE10_1   (0x2UL << GPIO_CRH_MODE10_Pos) /*!< 0x00000200 */\r\n\r\n#define GPIO_CRH_MODE11_Pos (12U)\r\n#define GPIO_CRH_MODE11_Msk (0x3UL << GPIO_CRH_MODE11_Pos) /*!< 0x00003000 */\r\n#define GPIO_CRH_MODE11     GPIO_CRH_MODE11_Msk            /*!< MODE11[1:0] bits (Port x mode bits, pin 11) */\r\n#define GPIO_CRH_MODE11_0   (0x1UL << GPIO_CRH_MODE11_Pos) /*!< 0x00001000 */\r\n#define GPIO_CRH_MODE11_1   (0x2UL << GPIO_CRH_MODE11_Pos) /*!< 0x00002000 */\r\n\r\n#define GPIO_CRH_MODE12_Pos (16U)\r\n#define GPIO_CRH_MODE12_Msk (0x3UL << GPIO_CRH_MODE12_Pos) /*!< 0x00030000 */\r\n#define GPIO_CRH_MODE12     GPIO_CRH_MODE12_Msk            /*!< MODE12[1:0] bits (Port x mode bits, pin 12) */\r\n#define GPIO_CRH_MODE12_0   (0x1UL << GPIO_CRH_MODE12_Pos) /*!< 0x00010000 */\r\n#define GPIO_CRH_MODE12_1   (0x2UL << GPIO_CRH_MODE12_Pos) /*!< 0x00020000 */\r\n\r\n#define GPIO_CRH_MODE13_Pos (20U)\r\n#define GPIO_CRH_MODE13_Msk (0x3UL << GPIO_CRH_MODE13_Pos) /*!< 0x00300000 */\r\n#define GPIO_CRH_MODE13     GPIO_CRH_MODE13_Msk            /*!< MODE13[1:0] bits (Port x mode bits, pin 13) */\r\n#define GPIO_CRH_MODE13_0   (0x1UL << GPIO_CRH_MODE13_Pos) /*!< 0x00100000 */\r\n#define GPIO_CRH_MODE13_1   (0x2UL << GPIO_CRH_MODE13_Pos) /*!< 0x00200000 */\r\n\r\n#define GPIO_CRH_MODE14_Pos (24U)\r\n#define GPIO_CRH_MODE14_Msk (0x3UL << GPIO_CRH_MODE14_Pos) /*!< 0x03000000 */\r\n#define GPIO_CRH_MODE14     GPIO_CRH_MODE14_Msk            /*!< MODE14[1:0] bits (Port x mode bits, pin 14) */\r\n#define GPIO_CRH_MODE14_0   (0x1UL << GPIO_CRH_MODE14_Pos) /*!< 0x01000000 */\r\n#define GPIO_CRH_MODE14_1   (0x2UL << GPIO_CRH_MODE14_Pos) /*!< 0x02000000 */\r\n\r\n#define GPIO_CRH_MODE15_Pos (28U)\r\n#define GPIO_CRH_MODE15_Msk (0x3UL << GPIO_CRH_MODE15_Pos) /*!< 0x30000000 */\r\n#define GPIO_CRH_MODE15     GPIO_CRH_MODE15_Msk            /*!< MODE15[1:0] bits (Port x mode bits, pin 15) */\r\n#define GPIO_CRH_MODE15_0   (0x1UL << GPIO_CRH_MODE15_Pos) /*!< 0x10000000 */\r\n#define GPIO_CRH_MODE15_1   (0x2UL << GPIO_CRH_MODE15_Pos) /*!< 0x20000000 */\r\n\r\n#define GPIO_CRH_CNF_Pos (2U)\r\n#define GPIO_CRH_CNF_Msk (0x33333333UL << GPIO_CRH_CNF_Pos) /*!< 0xCCCCCCCC */\r\n#define GPIO_CRH_CNF     GPIO_CRH_CNF_Msk                   /*!< Port x configuration bits */\r\n\r\n#define GPIO_CRH_CNF8_Pos (2U)\r\n#define GPIO_CRH_CNF8_Msk (0x3UL << GPIO_CRH_CNF8_Pos) /*!< 0x0000000C */\r\n#define GPIO_CRH_CNF8     GPIO_CRH_CNF8_Msk            /*!< CNF8[1:0] bits (Port x configuration bits, pin 8) */\r\n#define GPIO_CRH_CNF8_0   (0x1UL << GPIO_CRH_CNF8_Pos) /*!< 0x00000004 */\r\n#define GPIO_CRH_CNF8_1   (0x2UL << GPIO_CRH_CNF8_Pos) /*!< 0x00000008 */\r\n\r\n#define GPIO_CRH_CNF9_Pos (6U)\r\n#define GPIO_CRH_CNF9_Msk (0x3UL << GPIO_CRH_CNF9_Pos) /*!< 0x000000C0 */\r\n#define GPIO_CRH_CNF9     GPIO_CRH_CNF9_Msk            /*!< CNF9[1:0] bits (Port x configuration bits, pin 9) */\r\n#define GPIO_CRH_CNF9_0   (0x1UL << GPIO_CRH_CNF9_Pos) /*!< 0x00000040 */\r\n#define GPIO_CRH_CNF9_1   (0x2UL << GPIO_CRH_CNF9_Pos) /*!< 0x00000080 */\r\n\r\n#define GPIO_CRH_CNF10_Pos (10U)\r\n#define GPIO_CRH_CNF10_Msk (0x3UL << GPIO_CRH_CNF10_Pos) /*!< 0x00000C00 */\r\n#define GPIO_CRH_CNF10     GPIO_CRH_CNF10_Msk            /*!< CNF10[1:0] bits (Port x configuration bits, pin 10) */\r\n#define GPIO_CRH_CNF10_0   (0x1UL << GPIO_CRH_CNF10_Pos) /*!< 0x00000400 */\r\n#define GPIO_CRH_CNF10_1   (0x2UL << GPIO_CRH_CNF10_Pos) /*!< 0x00000800 */\r\n\r\n#define GPIO_CRH_CNF11_Pos (14U)\r\n#define GPIO_CRH_CNF11_Msk (0x3UL << GPIO_CRH_CNF11_Pos) /*!< 0x0000C000 */\r\n#define GPIO_CRH_CNF11     GPIO_CRH_CNF11_Msk            /*!< CNF11[1:0] bits (Port x configuration bits, pin 11) */\r\n#define GPIO_CRH_CNF11_0   (0x1UL << GPIO_CRH_CNF11_Pos) /*!< 0x00004000 */\r\n#define GPIO_CRH_CNF11_1   (0x2UL << GPIO_CRH_CNF11_Pos) /*!< 0x00008000 */\r\n\r\n#define GPIO_CRH_CNF12_Pos (18U)\r\n#define GPIO_CRH_CNF12_Msk (0x3UL << GPIO_CRH_CNF12_Pos) /*!< 0x000C0000 */\r\n#define GPIO_CRH_CNF12     GPIO_CRH_CNF12_Msk            /*!< CNF12[1:0] bits (Port x configuration bits, pin 12) */\r\n#define GPIO_CRH_CNF12_0   (0x1UL << GPIO_CRH_CNF12_Pos) /*!< 0x00040000 */\r\n#define GPIO_CRH_CNF12_1   (0x2UL << GPIO_CRH_CNF12_Pos) /*!< 0x00080000 */\r\n\r\n#define GPIO_CRH_CNF13_Pos (22U)\r\n#define GPIO_CRH_CNF13_Msk (0x3UL << GPIO_CRH_CNF13_Pos) /*!< 0x00C00000 */\r\n#define GPIO_CRH_CNF13     GPIO_CRH_CNF13_Msk            /*!< CNF13[1:0] bits (Port x configuration bits, pin 13) */\r\n#define GPIO_CRH_CNF13_0   (0x1UL << GPIO_CRH_CNF13_Pos) /*!< 0x00400000 */\r\n#define GPIO_CRH_CNF13_1   (0x2UL << GPIO_CRH_CNF13_Pos) /*!< 0x00800000 */\r\n\r\n#define GPIO_CRH_CNF14_Pos (26U)\r\n#define GPIO_CRH_CNF14_Msk (0x3UL << GPIO_CRH_CNF14_Pos) /*!< 0x0C000000 */\r\n#define GPIO_CRH_CNF14     GPIO_CRH_CNF14_Msk            /*!< CNF14[1:0] bits (Port x configuration bits, pin 14) */\r\n#define GPIO_CRH_CNF14_0   (0x1UL << GPIO_CRH_CNF14_Pos) /*!< 0x04000000 */\r\n#define GPIO_CRH_CNF14_1   (0x2UL << GPIO_CRH_CNF14_Pos) /*!< 0x08000000 */\r\n\r\n#define GPIO_CRH_CNF15_Pos (30U)\r\n#define GPIO_CRH_CNF15_Msk (0x3UL << GPIO_CRH_CNF15_Pos) /*!< 0xC0000000 */\r\n#define GPIO_CRH_CNF15     GPIO_CRH_CNF15_Msk            /*!< CNF15[1:0] bits (Port x configuration bits, pin 15) */\r\n#define GPIO_CRH_CNF15_0   (0x1UL << GPIO_CRH_CNF15_Pos) /*!< 0x40000000 */\r\n#define GPIO_CRH_CNF15_1   (0x2UL << GPIO_CRH_CNF15_Pos) /*!< 0x80000000 */\r\n\r\n/*!<******************  Bit definition for GPIO_IDR register  *******************/\r\n#define GPIO_IDR_IDR0_Pos  (0U)\r\n#define GPIO_IDR_IDR0_Msk  (0x1UL << GPIO_IDR_IDR0_Pos) /*!< 0x00000001 */\r\n#define GPIO_IDR_IDR0      GPIO_IDR_IDR0_Msk            /*!< Port input data, bit 0 */\r\n#define GPIO_IDR_IDR1_Pos  (1U)\r\n#define GPIO_IDR_IDR1_Msk  (0x1UL << GPIO_IDR_IDR1_Pos) /*!< 0x00000002 */\r\n#define GPIO_IDR_IDR1      GPIO_IDR_IDR1_Msk            /*!< Port input data, bit 1 */\r\n#define GPIO_IDR_IDR2_Pos  (2U)\r\n#define GPIO_IDR_IDR2_Msk  (0x1UL << GPIO_IDR_IDR2_Pos) /*!< 0x00000004 */\r\n#define GPIO_IDR_IDR2      GPIO_IDR_IDR2_Msk            /*!< Port input data, bit 2 */\r\n#define GPIO_IDR_IDR3_Pos  (3U)\r\n#define GPIO_IDR_IDR3_Msk  (0x1UL << GPIO_IDR_IDR3_Pos) /*!< 0x00000008 */\r\n#define GPIO_IDR_IDR3      GPIO_IDR_IDR3_Msk            /*!< Port input data, bit 3 */\r\n#define GPIO_IDR_IDR4_Pos  (4U)\r\n#define GPIO_IDR_IDR4_Msk  (0x1UL << GPIO_IDR_IDR4_Pos) /*!< 0x00000010 */\r\n#define GPIO_IDR_IDR4      GPIO_IDR_IDR4_Msk            /*!< Port input data, bit 4 */\r\n#define GPIO_IDR_IDR5_Pos  (5U)\r\n#define GPIO_IDR_IDR5_Msk  (0x1UL << GPIO_IDR_IDR5_Pos) /*!< 0x00000020 */\r\n#define GPIO_IDR_IDR5      GPIO_IDR_IDR5_Msk            /*!< Port input data, bit 5 */\r\n#define GPIO_IDR_IDR6_Pos  (6U)\r\n#define GPIO_IDR_IDR6_Msk  (0x1UL << GPIO_IDR_IDR6_Pos) /*!< 0x00000040 */\r\n#define GPIO_IDR_IDR6      GPIO_IDR_IDR6_Msk            /*!< Port input data, bit 6 */\r\n#define GPIO_IDR_IDR7_Pos  (7U)\r\n#define GPIO_IDR_IDR7_Msk  (0x1UL << GPIO_IDR_IDR7_Pos) /*!< 0x00000080 */\r\n#define GPIO_IDR_IDR7      GPIO_IDR_IDR7_Msk            /*!< Port input data, bit 7 */\r\n#define GPIO_IDR_IDR8_Pos  (8U)\r\n#define GPIO_IDR_IDR8_Msk  (0x1UL << GPIO_IDR_IDR8_Pos) /*!< 0x00000100 */\r\n#define GPIO_IDR_IDR8      GPIO_IDR_IDR8_Msk            /*!< Port input data, bit 8 */\r\n#define GPIO_IDR_IDR9_Pos  (9U)\r\n#define GPIO_IDR_IDR9_Msk  (0x1UL << GPIO_IDR_IDR9_Pos) /*!< 0x00000200 */\r\n#define GPIO_IDR_IDR9      GPIO_IDR_IDR9_Msk            /*!< Port input data, bit 9 */\r\n#define GPIO_IDR_IDR10_Pos (10U)\r\n#define GPIO_IDR_IDR10_Msk (0x1UL << GPIO_IDR_IDR10_Pos) /*!< 0x00000400 */\r\n#define GPIO_IDR_IDR10     GPIO_IDR_IDR10_Msk            /*!< Port input data, bit 10 */\r\n#define GPIO_IDR_IDR11_Pos (11U)\r\n#define GPIO_IDR_IDR11_Msk (0x1UL << GPIO_IDR_IDR11_Pos) /*!< 0x00000800 */\r\n#define GPIO_IDR_IDR11     GPIO_IDR_IDR11_Msk            /*!< Port input data, bit 11 */\r\n#define GPIO_IDR_IDR12_Pos (12U)\r\n#define GPIO_IDR_IDR12_Msk (0x1UL << GPIO_IDR_IDR12_Pos) /*!< 0x00001000 */\r\n#define GPIO_IDR_IDR12     GPIO_IDR_IDR12_Msk            /*!< Port input data, bit 12 */\r\n#define GPIO_IDR_IDR13_Pos (13U)\r\n#define GPIO_IDR_IDR13_Msk (0x1UL << GPIO_IDR_IDR13_Pos) /*!< 0x00002000 */\r\n#define GPIO_IDR_IDR13     GPIO_IDR_IDR13_Msk            /*!< Port input data, bit 13 */\r\n#define GPIO_IDR_IDR14_Pos (14U)\r\n#define GPIO_IDR_IDR14_Msk (0x1UL << GPIO_IDR_IDR14_Pos) /*!< 0x00004000 */\r\n#define GPIO_IDR_IDR14     GPIO_IDR_IDR14_Msk            /*!< Port input data, bit 14 */\r\n#define GPIO_IDR_IDR15_Pos (15U)\r\n#define GPIO_IDR_IDR15_Msk (0x1UL << GPIO_IDR_IDR15_Pos) /*!< 0x00008000 */\r\n#define GPIO_IDR_IDR15     GPIO_IDR_IDR15_Msk            /*!< Port input data, bit 15 */\r\n\r\n/*******************  Bit definition for GPIO_ODR register  *******************/\r\n#define GPIO_ODR_ODR0_Pos  (0U)\r\n#define GPIO_ODR_ODR0_Msk  (0x1UL << GPIO_ODR_ODR0_Pos) /*!< 0x00000001 */\r\n#define GPIO_ODR_ODR0      GPIO_ODR_ODR0_Msk            /*!< Port output data, bit 0 */\r\n#define GPIO_ODR_ODR1_Pos  (1U)\r\n#define GPIO_ODR_ODR1_Msk  (0x1UL << GPIO_ODR_ODR1_Pos) /*!< 0x00000002 */\r\n#define GPIO_ODR_ODR1      GPIO_ODR_ODR1_Msk            /*!< Port output data, bit 1 */\r\n#define GPIO_ODR_ODR2_Pos  (2U)\r\n#define GPIO_ODR_ODR2_Msk  (0x1UL << GPIO_ODR_ODR2_Pos) /*!< 0x00000004 */\r\n#define GPIO_ODR_ODR2      GPIO_ODR_ODR2_Msk            /*!< Port output data, bit 2 */\r\n#define GPIO_ODR_ODR3_Pos  (3U)\r\n#define GPIO_ODR_ODR3_Msk  (0x1UL << GPIO_ODR_ODR3_Pos) /*!< 0x00000008 */\r\n#define GPIO_ODR_ODR3      GPIO_ODR_ODR3_Msk            /*!< Port output data, bit 3 */\r\n#define GPIO_ODR_ODR4_Pos  (4U)\r\n#define GPIO_ODR_ODR4_Msk  (0x1UL << GPIO_ODR_ODR4_Pos) /*!< 0x00000010 */\r\n#define GPIO_ODR_ODR4      GPIO_ODR_ODR4_Msk            /*!< Port output data, bit 4 */\r\n#define GPIO_ODR_ODR5_Pos  (5U)\r\n#define GPIO_ODR_ODR5_Msk  (0x1UL << GPIO_ODR_ODR5_Pos) /*!< 0x00000020 */\r\n#define GPIO_ODR_ODR5      GPIO_ODR_ODR5_Msk            /*!< Port output data, bit 5 */\r\n#define GPIO_ODR_ODR6_Pos  (6U)\r\n#define GPIO_ODR_ODR6_Msk  (0x1UL << GPIO_ODR_ODR6_Pos) /*!< 0x00000040 */\r\n#define GPIO_ODR_ODR6      GPIO_ODR_ODR6_Msk            /*!< Port output data, bit 6 */\r\n#define GPIO_ODR_ODR7_Pos  (7U)\r\n#define GPIO_ODR_ODR7_Msk  (0x1UL << GPIO_ODR_ODR7_Pos) /*!< 0x00000080 */\r\n#define GPIO_ODR_ODR7      GPIO_ODR_ODR7_Msk            /*!< Port output data, bit 7 */\r\n#define GPIO_ODR_ODR8_Pos  (8U)\r\n#define GPIO_ODR_ODR8_Msk  (0x1UL << GPIO_ODR_ODR8_Pos) /*!< 0x00000100 */\r\n#define GPIO_ODR_ODR8      GPIO_ODR_ODR8_Msk            /*!< Port output data, bit 8 */\r\n#define GPIO_ODR_ODR9_Pos  (9U)\r\n#define GPIO_ODR_ODR9_Msk  (0x1UL << GPIO_ODR_ODR9_Pos) /*!< 0x00000200 */\r\n#define GPIO_ODR_ODR9      GPIO_ODR_ODR9_Msk            /*!< Port output data, bit 9 */\r\n#define GPIO_ODR_ODR10_Pos (10U)\r\n#define GPIO_ODR_ODR10_Msk (0x1UL << GPIO_ODR_ODR10_Pos) /*!< 0x00000400 */\r\n#define GPIO_ODR_ODR10     GPIO_ODR_ODR10_Msk            /*!< Port output data, bit 10 */\r\n#define GPIO_ODR_ODR11_Pos (11U)\r\n#define GPIO_ODR_ODR11_Msk (0x1UL << GPIO_ODR_ODR11_Pos) /*!< 0x00000800 */\r\n#define GPIO_ODR_ODR11     GPIO_ODR_ODR11_Msk            /*!< Port output data, bit 11 */\r\n#define GPIO_ODR_ODR12_Pos (12U)\r\n#define GPIO_ODR_ODR12_Msk (0x1UL << GPIO_ODR_ODR12_Pos) /*!< 0x00001000 */\r\n#define GPIO_ODR_ODR12     GPIO_ODR_ODR12_Msk            /*!< Port output data, bit 12 */\r\n#define GPIO_ODR_ODR13_Pos (13U)\r\n#define GPIO_ODR_ODR13_Msk (0x1UL << GPIO_ODR_ODR13_Pos) /*!< 0x00002000 */\r\n#define GPIO_ODR_ODR13     GPIO_ODR_ODR13_Msk            /*!< Port output data, bit 13 */\r\n#define GPIO_ODR_ODR14_Pos (14U)\r\n#define GPIO_ODR_ODR14_Msk (0x1UL << GPIO_ODR_ODR14_Pos) /*!< 0x00004000 */\r\n#define GPIO_ODR_ODR14     GPIO_ODR_ODR14_Msk            /*!< Port output data, bit 14 */\r\n#define GPIO_ODR_ODR15_Pos (15U)\r\n#define GPIO_ODR_ODR15_Msk (0x1UL << GPIO_ODR_ODR15_Pos) /*!< 0x00008000 */\r\n#define GPIO_ODR_ODR15     GPIO_ODR_ODR15_Msk            /*!< Port output data, bit 15 */\r\n\r\n/******************  Bit definition for GPIO_BSRR register  *******************/\r\n#define GPIO_BSRR_BS0_Pos  (0U)\r\n#define GPIO_BSRR_BS0_Msk  (0x1UL << GPIO_BSRR_BS0_Pos) /*!< 0x00000001 */\r\n#define GPIO_BSRR_BS0      GPIO_BSRR_BS0_Msk            /*!< Port x Set bit 0 */\r\n#define GPIO_BSRR_BS1_Pos  (1U)\r\n#define GPIO_BSRR_BS1_Msk  (0x1UL << GPIO_BSRR_BS1_Pos) /*!< 0x00000002 */\r\n#define GPIO_BSRR_BS1      GPIO_BSRR_BS1_Msk            /*!< Port x Set bit 1 */\r\n#define GPIO_BSRR_BS2_Pos  (2U)\r\n#define GPIO_BSRR_BS2_Msk  (0x1UL << GPIO_BSRR_BS2_Pos) /*!< 0x00000004 */\r\n#define GPIO_BSRR_BS2      GPIO_BSRR_BS2_Msk            /*!< Port x Set bit 2 */\r\n#define GPIO_BSRR_BS3_Pos  (3U)\r\n#define GPIO_BSRR_BS3_Msk  (0x1UL << GPIO_BSRR_BS3_Pos) /*!< 0x00000008 */\r\n#define GPIO_BSRR_BS3      GPIO_BSRR_BS3_Msk            /*!< Port x Set bit 3 */\r\n#define GPIO_BSRR_BS4_Pos  (4U)\r\n#define GPIO_BSRR_BS4_Msk  (0x1UL << GPIO_BSRR_BS4_Pos) /*!< 0x00000010 */\r\n#define GPIO_BSRR_BS4      GPIO_BSRR_BS4_Msk            /*!< Port x Set bit 4 */\r\n#define GPIO_BSRR_BS5_Pos  (5U)\r\n#define GPIO_BSRR_BS5_Msk  (0x1UL << GPIO_BSRR_BS5_Pos) /*!< 0x00000020 */\r\n#define GPIO_BSRR_BS5      GPIO_BSRR_BS5_Msk            /*!< Port x Set bit 5 */\r\n#define GPIO_BSRR_BS6_Pos  (6U)\r\n#define GPIO_BSRR_BS6_Msk  (0x1UL << GPIO_BSRR_BS6_Pos) /*!< 0x00000040 */\r\n#define GPIO_BSRR_BS6      GPIO_BSRR_BS6_Msk            /*!< Port x Set bit 6 */\r\n#define GPIO_BSRR_BS7_Pos  (7U)\r\n#define GPIO_BSRR_BS7_Msk  (0x1UL << GPIO_BSRR_BS7_Pos) /*!< 0x00000080 */\r\n#define GPIO_BSRR_BS7      GPIO_BSRR_BS7_Msk            /*!< Port x Set bit 7 */\r\n#define GPIO_BSRR_BS8_Pos  (8U)\r\n#define GPIO_BSRR_BS8_Msk  (0x1UL << GPIO_BSRR_BS8_Pos) /*!< 0x00000100 */\r\n#define GPIO_BSRR_BS8      GPIO_BSRR_BS8_Msk            /*!< Port x Set bit 8 */\r\n#define GPIO_BSRR_BS9_Pos  (9U)\r\n#define GPIO_BSRR_BS9_Msk  (0x1UL << GPIO_BSRR_BS9_Pos) /*!< 0x00000200 */\r\n#define GPIO_BSRR_BS9      GPIO_BSRR_BS9_Msk            /*!< Port x Set bit 9 */\r\n#define GPIO_BSRR_BS10_Pos (10U)\r\n#define GPIO_BSRR_BS10_Msk (0x1UL << GPIO_BSRR_BS10_Pos) /*!< 0x00000400 */\r\n#define GPIO_BSRR_BS10     GPIO_BSRR_BS10_Msk            /*!< Port x Set bit 10 */\r\n#define GPIO_BSRR_BS11_Pos (11U)\r\n#define GPIO_BSRR_BS11_Msk (0x1UL << GPIO_BSRR_BS11_Pos) /*!< 0x00000800 */\r\n#define GPIO_BSRR_BS11     GPIO_BSRR_BS11_Msk            /*!< Port x Set bit 11 */\r\n#define GPIO_BSRR_BS12_Pos (12U)\r\n#define GPIO_BSRR_BS12_Msk (0x1UL << GPIO_BSRR_BS12_Pos) /*!< 0x00001000 */\r\n#define GPIO_BSRR_BS12     GPIO_BSRR_BS12_Msk            /*!< Port x Set bit 12 */\r\n#define GPIO_BSRR_BS13_Pos (13U)\r\n#define GPIO_BSRR_BS13_Msk (0x1UL << GPIO_BSRR_BS13_Pos) /*!< 0x00002000 */\r\n#define GPIO_BSRR_BS13     GPIO_BSRR_BS13_Msk            /*!< Port x Set bit 13 */\r\n#define GPIO_BSRR_BS14_Pos (14U)\r\n#define GPIO_BSRR_BS14_Msk (0x1UL << GPIO_BSRR_BS14_Pos) /*!< 0x00004000 */\r\n#define GPIO_BSRR_BS14     GPIO_BSRR_BS14_Msk            /*!< Port x Set bit 14 */\r\n#define GPIO_BSRR_BS15_Pos (15U)\r\n#define GPIO_BSRR_BS15_Msk (0x1UL << GPIO_BSRR_BS15_Pos) /*!< 0x00008000 */\r\n#define GPIO_BSRR_BS15     GPIO_BSRR_BS15_Msk            /*!< Port x Set bit 15 */\r\n\r\n#define GPIO_BSRR_BR0_Pos  (16U)\r\n#define GPIO_BSRR_BR0_Msk  (0x1UL << GPIO_BSRR_BR0_Pos) /*!< 0x00010000 */\r\n#define GPIO_BSRR_BR0      GPIO_BSRR_BR0_Msk            /*!< Port x Reset bit 0 */\r\n#define GPIO_BSRR_BR1_Pos  (17U)\r\n#define GPIO_BSRR_BR1_Msk  (0x1UL << GPIO_BSRR_BR1_Pos) /*!< 0x00020000 */\r\n#define GPIO_BSRR_BR1      GPIO_BSRR_BR1_Msk            /*!< Port x Reset bit 1 */\r\n#define GPIO_BSRR_BR2_Pos  (18U)\r\n#define GPIO_BSRR_BR2_Msk  (0x1UL << GPIO_BSRR_BR2_Pos) /*!< 0x00040000 */\r\n#define GPIO_BSRR_BR2      GPIO_BSRR_BR2_Msk            /*!< Port x Reset bit 2 */\r\n#define GPIO_BSRR_BR3_Pos  (19U)\r\n#define GPIO_BSRR_BR3_Msk  (0x1UL << GPIO_BSRR_BR3_Pos) /*!< 0x00080000 */\r\n#define GPIO_BSRR_BR3      GPIO_BSRR_BR3_Msk            /*!< Port x Reset bit 3 */\r\n#define GPIO_BSRR_BR4_Pos  (20U)\r\n#define GPIO_BSRR_BR4_Msk  (0x1UL << GPIO_BSRR_BR4_Pos) /*!< 0x00100000 */\r\n#define GPIO_BSRR_BR4      GPIO_BSRR_BR4_Msk            /*!< Port x Reset bit 4 */\r\n#define GPIO_BSRR_BR5_Pos  (21U)\r\n#define GPIO_BSRR_BR5_Msk  (0x1UL << GPIO_BSRR_BR5_Pos) /*!< 0x00200000 */\r\n#define GPIO_BSRR_BR5      GPIO_BSRR_BR5_Msk            /*!< Port x Reset bit 5 */\r\n#define GPIO_BSRR_BR6_Pos  (22U)\r\n#define GPIO_BSRR_BR6_Msk  (0x1UL << GPIO_BSRR_BR6_Pos) /*!< 0x00400000 */\r\n#define GPIO_BSRR_BR6      GPIO_BSRR_BR6_Msk            /*!< Port x Reset bit 6 */\r\n#define GPIO_BSRR_BR7_Pos  (23U)\r\n#define GPIO_BSRR_BR7_Msk  (0x1UL << GPIO_BSRR_BR7_Pos) /*!< 0x00800000 */\r\n#define GPIO_BSRR_BR7      GPIO_BSRR_BR7_Msk            /*!< Port x Reset bit 7 */\r\n#define GPIO_BSRR_BR8_Pos  (24U)\r\n#define GPIO_BSRR_BR8_Msk  (0x1UL << GPIO_BSRR_BR8_Pos) /*!< 0x01000000 */\r\n#define GPIO_BSRR_BR8      GPIO_BSRR_BR8_Msk            /*!< Port x Reset bit 8 */\r\n#define GPIO_BSRR_BR9_Pos  (25U)\r\n#define GPIO_BSRR_BR9_Msk  (0x1UL << GPIO_BSRR_BR9_Pos) /*!< 0x02000000 */\r\n#define GPIO_BSRR_BR9      GPIO_BSRR_BR9_Msk            /*!< Port x Reset bit 9 */\r\n#define GPIO_BSRR_BR10_Pos (26U)\r\n#define GPIO_BSRR_BR10_Msk (0x1UL << GPIO_BSRR_BR10_Pos) /*!< 0x04000000 */\r\n#define GPIO_BSRR_BR10     GPIO_BSRR_BR10_Msk            /*!< Port x Reset bit 10 */\r\n#define GPIO_BSRR_BR11_Pos (27U)\r\n#define GPIO_BSRR_BR11_Msk (0x1UL << GPIO_BSRR_BR11_Pos) /*!< 0x08000000 */\r\n#define GPIO_BSRR_BR11     GPIO_BSRR_BR11_Msk            /*!< Port x Reset bit 11 */\r\n#define GPIO_BSRR_BR12_Pos (28U)\r\n#define GPIO_BSRR_BR12_Msk (0x1UL << GPIO_BSRR_BR12_Pos) /*!< 0x10000000 */\r\n#define GPIO_BSRR_BR12     GPIO_BSRR_BR12_Msk            /*!< Port x Reset bit 12 */\r\n#define GPIO_BSRR_BR13_Pos (29U)\r\n#define GPIO_BSRR_BR13_Msk (0x1UL << GPIO_BSRR_BR13_Pos) /*!< 0x20000000 */\r\n#define GPIO_BSRR_BR13     GPIO_BSRR_BR13_Msk            /*!< Port x Reset bit 13 */\r\n#define GPIO_BSRR_BR14_Pos (30U)\r\n#define GPIO_BSRR_BR14_Msk (0x1UL << GPIO_BSRR_BR14_Pos) /*!< 0x40000000 */\r\n#define GPIO_BSRR_BR14     GPIO_BSRR_BR14_Msk            /*!< Port x Reset bit 14 */\r\n#define GPIO_BSRR_BR15_Pos (31U)\r\n#define GPIO_BSRR_BR15_Msk (0x1UL << GPIO_BSRR_BR15_Pos) /*!< 0x80000000 */\r\n#define GPIO_BSRR_BR15     GPIO_BSRR_BR15_Msk            /*!< Port x Reset bit 15 */\r\n\r\n/*******************  Bit definition for GPIO_BRR register  *******************/\r\n#define GPIO_BRR_BR0_Pos  (0U)\r\n#define GPIO_BRR_BR0_Msk  (0x1UL << GPIO_BRR_BR0_Pos) /*!< 0x00000001 */\r\n#define GPIO_BRR_BR0      GPIO_BRR_BR0_Msk            /*!< Port x Reset bit 0 */\r\n#define GPIO_BRR_BR1_Pos  (1U)\r\n#define GPIO_BRR_BR1_Msk  (0x1UL << GPIO_BRR_BR1_Pos) /*!< 0x00000002 */\r\n#define GPIO_BRR_BR1      GPIO_BRR_BR1_Msk            /*!< Port x Reset bit 1 */\r\n#define GPIO_BRR_BR2_Pos  (2U)\r\n#define GPIO_BRR_BR2_Msk  (0x1UL << GPIO_BRR_BR2_Pos) /*!< 0x00000004 */\r\n#define GPIO_BRR_BR2      GPIO_BRR_BR2_Msk            /*!< Port x Reset bit 2 */\r\n#define GPIO_BRR_BR3_Pos  (3U)\r\n#define GPIO_BRR_BR3_Msk  (0x1UL << GPIO_BRR_BR3_Pos) /*!< 0x00000008 */\r\n#define GPIO_BRR_BR3      GPIO_BRR_BR3_Msk            /*!< Port x Reset bit 3 */\r\n#define GPIO_BRR_BR4_Pos  (4U)\r\n#define GPIO_BRR_BR4_Msk  (0x1UL << GPIO_BRR_BR4_Pos) /*!< 0x00000010 */\r\n#define GPIO_BRR_BR4      GPIO_BRR_BR4_Msk            /*!< Port x Reset bit 4 */\r\n#define GPIO_BRR_BR5_Pos  (5U)\r\n#define GPIO_BRR_BR5_Msk  (0x1UL << GPIO_BRR_BR5_Pos) /*!< 0x00000020 */\r\n#define GPIO_BRR_BR5      GPIO_BRR_BR5_Msk            /*!< Port x Reset bit 5 */\r\n#define GPIO_BRR_BR6_Pos  (6U)\r\n#define GPIO_BRR_BR6_Msk  (0x1UL << GPIO_BRR_BR6_Pos) /*!< 0x00000040 */\r\n#define GPIO_BRR_BR6      GPIO_BRR_BR6_Msk            /*!< Port x Reset bit 6 */\r\n#define GPIO_BRR_BR7_Pos  (7U)\r\n#define GPIO_BRR_BR7_Msk  (0x1UL << GPIO_BRR_BR7_Pos) /*!< 0x00000080 */\r\n#define GPIO_BRR_BR7      GPIO_BRR_BR7_Msk            /*!< Port x Reset bit 7 */\r\n#define GPIO_BRR_BR8_Pos  (8U)\r\n#define GPIO_BRR_BR8_Msk  (0x1UL << GPIO_BRR_BR8_Pos) /*!< 0x00000100 */\r\n#define GPIO_BRR_BR8      GPIO_BRR_BR8_Msk            /*!< Port x Reset bit 8 */\r\n#define GPIO_BRR_BR9_Pos  (9U)\r\n#define GPIO_BRR_BR9_Msk  (0x1UL << GPIO_BRR_BR9_Pos) /*!< 0x00000200 */\r\n#define GPIO_BRR_BR9      GPIO_BRR_BR9_Msk            /*!< Port x Reset bit 9 */\r\n#define GPIO_BRR_BR10_Pos (10U)\r\n#define GPIO_BRR_BR10_Msk (0x1UL << GPIO_BRR_BR10_Pos) /*!< 0x00000400 */\r\n#define GPIO_BRR_BR10     GPIO_BRR_BR10_Msk            /*!< Port x Reset bit 10 */\r\n#define GPIO_BRR_BR11_Pos (11U)\r\n#define GPIO_BRR_BR11_Msk (0x1UL << GPIO_BRR_BR11_Pos) /*!< 0x00000800 */\r\n#define GPIO_BRR_BR11     GPIO_BRR_BR11_Msk            /*!< Port x Reset bit 11 */\r\n#define GPIO_BRR_BR12_Pos (12U)\r\n#define GPIO_BRR_BR12_Msk (0x1UL << GPIO_BRR_BR12_Pos) /*!< 0x00001000 */\r\n#define GPIO_BRR_BR12     GPIO_BRR_BR12_Msk            /*!< Port x Reset bit 12 */\r\n#define GPIO_BRR_BR13_Pos (13U)\r\n#define GPIO_BRR_BR13_Msk (0x1UL << GPIO_BRR_BR13_Pos) /*!< 0x00002000 */\r\n#define GPIO_BRR_BR13     GPIO_BRR_BR13_Msk            /*!< Port x Reset bit 13 */\r\n#define GPIO_BRR_BR14_Pos (14U)\r\n#define GPIO_BRR_BR14_Msk (0x1UL << GPIO_BRR_BR14_Pos) /*!< 0x00004000 */\r\n#define GPIO_BRR_BR14     GPIO_BRR_BR14_Msk            /*!< Port x Reset bit 14 */\r\n#define GPIO_BRR_BR15_Pos (15U)\r\n#define GPIO_BRR_BR15_Msk (0x1UL << GPIO_BRR_BR15_Pos) /*!< 0x00008000 */\r\n#define GPIO_BRR_BR15     GPIO_BRR_BR15_Msk            /*!< Port x Reset bit 15 */\r\n\r\n/******************  Bit definition for GPIO_LCKR register  *******************/\r\n#define GPIO_LCKR_LCK0_Pos  (0U)\r\n#define GPIO_LCKR_LCK0_Msk  (0x1UL << GPIO_LCKR_LCK0_Pos) /*!< 0x00000001 */\r\n#define GPIO_LCKR_LCK0      GPIO_LCKR_LCK0_Msk            /*!< Port x Lock bit 0 */\r\n#define GPIO_LCKR_LCK1_Pos  (1U)\r\n#define GPIO_LCKR_LCK1_Msk  (0x1UL << GPIO_LCKR_LCK1_Pos) /*!< 0x00000002 */\r\n#define GPIO_LCKR_LCK1      GPIO_LCKR_LCK1_Msk            /*!< Port x Lock bit 1 */\r\n#define GPIO_LCKR_LCK2_Pos  (2U)\r\n#define GPIO_LCKR_LCK2_Msk  (0x1UL << GPIO_LCKR_LCK2_Pos) /*!< 0x00000004 */\r\n#define GPIO_LCKR_LCK2      GPIO_LCKR_LCK2_Msk            /*!< Port x Lock bit 2 */\r\n#define GPIO_LCKR_LCK3_Pos  (3U)\r\n#define GPIO_LCKR_LCK3_Msk  (0x1UL << GPIO_LCKR_LCK3_Pos) /*!< 0x00000008 */\r\n#define GPIO_LCKR_LCK3      GPIO_LCKR_LCK3_Msk            /*!< Port x Lock bit 3 */\r\n#define GPIO_LCKR_LCK4_Pos  (4U)\r\n#define GPIO_LCKR_LCK4_Msk  (0x1UL << GPIO_LCKR_LCK4_Pos) /*!< 0x00000010 */\r\n#define GPIO_LCKR_LCK4      GPIO_LCKR_LCK4_Msk            /*!< Port x Lock bit 4 */\r\n#define GPIO_LCKR_LCK5_Pos  (5U)\r\n#define GPIO_LCKR_LCK5_Msk  (0x1UL << GPIO_LCKR_LCK5_Pos) /*!< 0x00000020 */\r\n#define GPIO_LCKR_LCK5      GPIO_LCKR_LCK5_Msk            /*!< Port x Lock bit 5 */\r\n#define GPIO_LCKR_LCK6_Pos  (6U)\r\n#define GPIO_LCKR_LCK6_Msk  (0x1UL << GPIO_LCKR_LCK6_Pos) /*!< 0x00000040 */\r\n#define GPIO_LCKR_LCK6      GPIO_LCKR_LCK6_Msk            /*!< Port x Lock bit 6 */\r\n#define GPIO_LCKR_LCK7_Pos  (7U)\r\n#define GPIO_LCKR_LCK7_Msk  (0x1UL << GPIO_LCKR_LCK7_Pos) /*!< 0x00000080 */\r\n#define GPIO_LCKR_LCK7      GPIO_LCKR_LCK7_Msk            /*!< Port x Lock bit 7 */\r\n#define GPIO_LCKR_LCK8_Pos  (8U)\r\n#define GPIO_LCKR_LCK8_Msk  (0x1UL << GPIO_LCKR_LCK8_Pos) /*!< 0x00000100 */\r\n#define GPIO_LCKR_LCK8      GPIO_LCKR_LCK8_Msk            /*!< Port x Lock bit 8 */\r\n#define GPIO_LCKR_LCK9_Pos  (9U)\r\n#define GPIO_LCKR_LCK9_Msk  (0x1UL << GPIO_LCKR_LCK9_Pos) /*!< 0x00000200 */\r\n#define GPIO_LCKR_LCK9      GPIO_LCKR_LCK9_Msk            /*!< Port x Lock bit 9 */\r\n#define GPIO_LCKR_LCK10_Pos (10U)\r\n#define GPIO_LCKR_LCK10_Msk (0x1UL << GPIO_LCKR_LCK10_Pos) /*!< 0x00000400 */\r\n#define GPIO_LCKR_LCK10     GPIO_LCKR_LCK10_Msk            /*!< Port x Lock bit 10 */\r\n#define GPIO_LCKR_LCK11_Pos (11U)\r\n#define GPIO_LCKR_LCK11_Msk (0x1UL << GPIO_LCKR_LCK11_Pos) /*!< 0x00000800 */\r\n#define GPIO_LCKR_LCK11     GPIO_LCKR_LCK11_Msk            /*!< Port x Lock bit 11 */\r\n#define GPIO_LCKR_LCK12_Pos (12U)\r\n#define GPIO_LCKR_LCK12_Msk (0x1UL << GPIO_LCKR_LCK12_Pos) /*!< 0x00001000 */\r\n#define GPIO_LCKR_LCK12     GPIO_LCKR_LCK12_Msk            /*!< Port x Lock bit 12 */\r\n#define GPIO_LCKR_LCK13_Pos (13U)\r\n#define GPIO_LCKR_LCK13_Msk (0x1UL << GPIO_LCKR_LCK13_Pos) /*!< 0x00002000 */\r\n#define GPIO_LCKR_LCK13     GPIO_LCKR_LCK13_Msk            /*!< Port x Lock bit 13 */\r\n#define GPIO_LCKR_LCK14_Pos (14U)\r\n#define GPIO_LCKR_LCK14_Msk (0x1UL << GPIO_LCKR_LCK14_Pos) /*!< 0x00004000 */\r\n#define GPIO_LCKR_LCK14     GPIO_LCKR_LCK14_Msk            /*!< Port x Lock bit 14 */\r\n#define GPIO_LCKR_LCK15_Pos (15U)\r\n#define GPIO_LCKR_LCK15_Msk (0x1UL << GPIO_LCKR_LCK15_Pos) /*!< 0x00008000 */\r\n#define GPIO_LCKR_LCK15     GPIO_LCKR_LCK15_Msk            /*!< Port x Lock bit 15 */\r\n#define GPIO_LCKR_LCKK_Pos  (16U)\r\n#define GPIO_LCKR_LCKK_Msk  (0x1UL << GPIO_LCKR_LCKK_Pos) /*!< 0x00010000 */\r\n#define GPIO_LCKR_LCKK      GPIO_LCKR_LCKK_Msk            /*!< Lock key */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/******************  Bit definition for AFIO_EVCR register  *******************/\r\n#define AFIO_EVCR_PIN_Pos (0U)\r\n#define AFIO_EVCR_PIN_Msk (0xFUL << AFIO_EVCR_PIN_Pos) /*!< 0x0000000F */\r\n#define AFIO_EVCR_PIN     AFIO_EVCR_PIN_Msk            /*!< PIN[3:0] bits (Pin selection) */\r\n#define AFIO_EVCR_PIN_0   (0x1UL << AFIO_EVCR_PIN_Pos) /*!< 0x00000001 */\r\n#define AFIO_EVCR_PIN_1   (0x2UL << AFIO_EVCR_PIN_Pos) /*!< 0x00000002 */\r\n#define AFIO_EVCR_PIN_2   (0x4UL << AFIO_EVCR_PIN_Pos) /*!< 0x00000004 */\r\n#define AFIO_EVCR_PIN_3   (0x8UL << AFIO_EVCR_PIN_Pos) /*!< 0x00000008 */\r\n\r\n/*!< PIN configuration */\r\n#define AFIO_EVCR_PIN_PX0      0x00000000U /*!< Pin 0 selected */\r\n#define AFIO_EVCR_PIN_PX1_Pos  (0U)\r\n#define AFIO_EVCR_PIN_PX1_Msk  (0x1UL << AFIO_EVCR_PIN_PX1_Pos) /*!< 0x00000001 */\r\n#define AFIO_EVCR_PIN_PX1      AFIO_EVCR_PIN_PX1_Msk            /*!< Pin 1 selected */\r\n#define AFIO_EVCR_PIN_PX2_Pos  (1U)\r\n#define AFIO_EVCR_PIN_PX2_Msk  (0x1UL << AFIO_EVCR_PIN_PX2_Pos) /*!< 0x00000002 */\r\n#define AFIO_EVCR_PIN_PX2      AFIO_EVCR_PIN_PX2_Msk            /*!< Pin 2 selected */\r\n#define AFIO_EVCR_PIN_PX3_Pos  (0U)\r\n#define AFIO_EVCR_PIN_PX3_Msk  (0x3UL << AFIO_EVCR_PIN_PX3_Pos) /*!< 0x00000003 */\r\n#define AFIO_EVCR_PIN_PX3      AFIO_EVCR_PIN_PX3_Msk            /*!< Pin 3 selected */\r\n#define AFIO_EVCR_PIN_PX4_Pos  (2U)\r\n#define AFIO_EVCR_PIN_PX4_Msk  (0x1UL << AFIO_EVCR_PIN_PX4_Pos) /*!< 0x00000004 */\r\n#define AFIO_EVCR_PIN_PX4      AFIO_EVCR_PIN_PX4_Msk            /*!< Pin 4 selected */\r\n#define AFIO_EVCR_PIN_PX5_Pos  (0U)\r\n#define AFIO_EVCR_PIN_PX5_Msk  (0x5UL << AFIO_EVCR_PIN_PX5_Pos) /*!< 0x00000005 */\r\n#define AFIO_EVCR_PIN_PX5      AFIO_EVCR_PIN_PX5_Msk            /*!< Pin 5 selected */\r\n#define AFIO_EVCR_PIN_PX6_Pos  (1U)\r\n#define AFIO_EVCR_PIN_PX6_Msk  (0x3UL << AFIO_EVCR_PIN_PX6_Pos) /*!< 0x00000006 */\r\n#define AFIO_EVCR_PIN_PX6      AFIO_EVCR_PIN_PX6_Msk            /*!< Pin 6 selected */\r\n#define AFIO_EVCR_PIN_PX7_Pos  (0U)\r\n#define AFIO_EVCR_PIN_PX7_Msk  (0x7UL << AFIO_EVCR_PIN_PX7_Pos) /*!< 0x00000007 */\r\n#define AFIO_EVCR_PIN_PX7      AFIO_EVCR_PIN_PX7_Msk            /*!< Pin 7 selected */\r\n#define AFIO_EVCR_PIN_PX8_Pos  (3U)\r\n#define AFIO_EVCR_PIN_PX8_Msk  (0x1UL << AFIO_EVCR_PIN_PX8_Pos) /*!< 0x00000008 */\r\n#define AFIO_EVCR_PIN_PX8      AFIO_EVCR_PIN_PX8_Msk            /*!< Pin 8 selected */\r\n#define AFIO_EVCR_PIN_PX9_Pos  (0U)\r\n#define AFIO_EVCR_PIN_PX9_Msk  (0x9UL << AFIO_EVCR_PIN_PX9_Pos) /*!< 0x00000009 */\r\n#define AFIO_EVCR_PIN_PX9      AFIO_EVCR_PIN_PX9_Msk            /*!< Pin 9 selected */\r\n#define AFIO_EVCR_PIN_PX10_Pos (1U)\r\n#define AFIO_EVCR_PIN_PX10_Msk (0x5UL << AFIO_EVCR_PIN_PX10_Pos) /*!< 0x0000000A */\r\n#define AFIO_EVCR_PIN_PX10     AFIO_EVCR_PIN_PX10_Msk            /*!< Pin 10 selected */\r\n#define AFIO_EVCR_PIN_PX11_Pos (0U)\r\n#define AFIO_EVCR_PIN_PX11_Msk (0xBUL << AFIO_EVCR_PIN_PX11_Pos) /*!< 0x0000000B */\r\n#define AFIO_EVCR_PIN_PX11     AFIO_EVCR_PIN_PX11_Msk            /*!< Pin 11 selected */\r\n#define AFIO_EVCR_PIN_PX12_Pos (2U)\r\n#define AFIO_EVCR_PIN_PX12_Msk (0x3UL << AFIO_EVCR_PIN_PX12_Pos) /*!< 0x0000000C */\r\n#define AFIO_EVCR_PIN_PX12     AFIO_EVCR_PIN_PX12_Msk            /*!< Pin 12 selected */\r\n#define AFIO_EVCR_PIN_PX13_Pos (0U)\r\n#define AFIO_EVCR_PIN_PX13_Msk (0xDUL << AFIO_EVCR_PIN_PX13_Pos) /*!< 0x0000000D */\r\n#define AFIO_EVCR_PIN_PX13     AFIO_EVCR_PIN_PX13_Msk            /*!< Pin 13 selected */\r\n#define AFIO_EVCR_PIN_PX14_Pos (1U)\r\n#define AFIO_EVCR_PIN_PX14_Msk (0x7UL << AFIO_EVCR_PIN_PX14_Pos) /*!< 0x0000000E */\r\n#define AFIO_EVCR_PIN_PX14     AFIO_EVCR_PIN_PX14_Msk            /*!< Pin 14 selected */\r\n#define AFIO_EVCR_PIN_PX15_Pos (0U)\r\n#define AFIO_EVCR_PIN_PX15_Msk (0xFUL << AFIO_EVCR_PIN_PX15_Pos) /*!< 0x0000000F */\r\n#define AFIO_EVCR_PIN_PX15     AFIO_EVCR_PIN_PX15_Msk            /*!< Pin 15 selected */\r\n\r\n#define AFIO_EVCR_PORT_Pos (4U)\r\n#define AFIO_EVCR_PORT_Msk (0x7UL << AFIO_EVCR_PORT_Pos) /*!< 0x00000070 */\r\n#define AFIO_EVCR_PORT     AFIO_EVCR_PORT_Msk            /*!< PORT[2:0] bits (Port selection) */\r\n#define AFIO_EVCR_PORT_0   (0x1UL << AFIO_EVCR_PORT_Pos) /*!< 0x00000010 */\r\n#define AFIO_EVCR_PORT_1   (0x2UL << AFIO_EVCR_PORT_Pos) /*!< 0x00000020 */\r\n#define AFIO_EVCR_PORT_2   (0x4UL << AFIO_EVCR_PORT_Pos) /*!< 0x00000040 */\r\n\r\n/*!< PORT configuration */\r\n#define AFIO_EVCR_PORT_PA     0x00000000 /*!< Port A selected */\r\n#define AFIO_EVCR_PORT_PB_Pos (4U)\r\n#define AFIO_EVCR_PORT_PB_Msk (0x1UL << AFIO_EVCR_PORT_PB_Pos) /*!< 0x00000010 */\r\n#define AFIO_EVCR_PORT_PB     AFIO_EVCR_PORT_PB_Msk            /*!< Port B selected */\r\n#define AFIO_EVCR_PORT_PC_Pos (5U)\r\n#define AFIO_EVCR_PORT_PC_Msk (0x1UL << AFIO_EVCR_PORT_PC_Pos) /*!< 0x00000020 */\r\n#define AFIO_EVCR_PORT_PC     AFIO_EVCR_PORT_PC_Msk            /*!< Port C selected */\r\n#define AFIO_EVCR_PORT_PD_Pos (4U)\r\n#define AFIO_EVCR_PORT_PD_Msk (0x3UL << AFIO_EVCR_PORT_PD_Pos) /*!< 0x00000030 */\r\n#define AFIO_EVCR_PORT_PD     AFIO_EVCR_PORT_PD_Msk            /*!< Port D selected */\r\n#define AFIO_EVCR_PORT_PE_Pos (6U)\r\n#define AFIO_EVCR_PORT_PE_Msk (0x1UL << AFIO_EVCR_PORT_PE_Pos) /*!< 0x00000040 */\r\n#define AFIO_EVCR_PORT_PE     AFIO_EVCR_PORT_PE_Msk            /*!< Port E selected */\r\n\r\n#define AFIO_EVCR_EVOE_Pos (7U)\r\n#define AFIO_EVCR_EVOE_Msk (0x1UL << AFIO_EVCR_EVOE_Pos) /*!< 0x00000080 */\r\n#define AFIO_EVCR_EVOE     AFIO_EVCR_EVOE_Msk            /*!< Event Output Enable */\r\n\r\n/******************  Bit definition for AFIO_MAPR register  *******************/\r\n#define AFIO_MAPR_SPI1_REMAP_Pos   (0U)\r\n#define AFIO_MAPR_SPI1_REMAP_Msk   (0x1UL << AFIO_MAPR_SPI1_REMAP_Pos) /*!< 0x00000001 */\r\n#define AFIO_MAPR_SPI1_REMAP       AFIO_MAPR_SPI1_REMAP_Msk            /*!< SPI1 remapping */\r\n#define AFIO_MAPR_I2C1_REMAP_Pos   (1U)\r\n#define AFIO_MAPR_I2C1_REMAP_Msk   (0x1UL << AFIO_MAPR_I2C1_REMAP_Pos) /*!< 0x00000002 */\r\n#define AFIO_MAPR_I2C1_REMAP       AFIO_MAPR_I2C1_REMAP_Msk            /*!< I2C1 remapping */\r\n#define AFIO_MAPR_USART1_REMAP_Pos (2U)\r\n#define AFIO_MAPR_USART1_REMAP_Msk (0x1UL << AFIO_MAPR_USART1_REMAP_Pos) /*!< 0x00000004 */\r\n#define AFIO_MAPR_USART1_REMAP     AFIO_MAPR_USART1_REMAP_Msk            /*!< USART1 remapping */\r\n#define AFIO_MAPR_USART2_REMAP_Pos (3U)\r\n#define AFIO_MAPR_USART2_REMAP_Msk (0x1UL << AFIO_MAPR_USART2_REMAP_Pos) /*!< 0x00000008 */\r\n#define AFIO_MAPR_USART2_REMAP     AFIO_MAPR_USART2_REMAP_Msk            /*!< USART2 remapping */\r\n\r\n#define AFIO_MAPR_USART3_REMAP_Pos (4U)\r\n#define AFIO_MAPR_USART3_REMAP_Msk (0x3UL << AFIO_MAPR_USART3_REMAP_Pos) /*!< 0x00000030 */\r\n#define AFIO_MAPR_USART3_REMAP     AFIO_MAPR_USART3_REMAP_Msk            /*!< USART3_REMAP[1:0] bits (USART3 remapping) */\r\n#define AFIO_MAPR_USART3_REMAP_0   (0x1UL << AFIO_MAPR_USART3_REMAP_Pos) /*!< 0x00000010 */\r\n#define AFIO_MAPR_USART3_REMAP_1   (0x2UL << AFIO_MAPR_USART3_REMAP_Pos) /*!< 0x00000020 */\r\n\r\n/* USART3_REMAP configuration */\r\n#define AFIO_MAPR_USART3_REMAP_NOREMAP          0x00000000U /*!< No remap (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14) */\r\n#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Pos (4U)\r\n#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Msk (0x1UL << AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Pos) /*!< 0x00000010 */\r\n#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP     AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Msk            /*!< Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14) */\r\n#define AFIO_MAPR_USART3_REMAP_FULLREMAP_Pos    (4U)\r\n#define AFIO_MAPR_USART3_REMAP_FULLREMAP_Msk    (0x3UL << AFIO_MAPR_USART3_REMAP_FULLREMAP_Pos) /*!< 0x00000030 */\r\n#define AFIO_MAPR_USART3_REMAP_FULLREMAP        AFIO_MAPR_USART3_REMAP_FULLREMAP_Msk            /*!< Full remap (TX/PD8, RX/PD9, CK/PD10, CTS/PD11, RTS/PD12) */\r\n\r\n#define AFIO_MAPR_TIM1_REMAP_Pos (6U)\r\n#define AFIO_MAPR_TIM1_REMAP_Msk (0x3UL << AFIO_MAPR_TIM1_REMAP_Pos) /*!< 0x000000C0 */\r\n#define AFIO_MAPR_TIM1_REMAP     AFIO_MAPR_TIM1_REMAP_Msk            /*!< TIM1_REMAP[1:0] bits (TIM1 remapping) */\r\n#define AFIO_MAPR_TIM1_REMAP_0   (0x1UL << AFIO_MAPR_TIM1_REMAP_Pos) /*!< 0x00000040 */\r\n#define AFIO_MAPR_TIM1_REMAP_1   (0x2UL << AFIO_MAPR_TIM1_REMAP_Pos) /*!< 0x00000080 */\r\n\r\n/*!< TIM1_REMAP configuration */\r\n#define AFIO_MAPR_TIM1_REMAP_NOREMAP          0x00000000U /*!< No remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PB12, CH1N/PB13, CH2N/PB14, CH3N/PB15) */\r\n#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Pos (6U)\r\n#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Msk (0x1UL << AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Pos) /*!< 0x00000040 */\r\n#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP     AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Msk /*!< Partial remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PA6, CH1N/PA7, CH2N/PB0, CH3N/PB1) */\r\n#define AFIO_MAPR_TIM1_REMAP_FULLREMAP_Pos    (6U)\r\n#define AFIO_MAPR_TIM1_REMAP_FULLREMAP_Msk    (0x3UL << AFIO_MAPR_TIM1_REMAP_FULLREMAP_Pos) /*!< 0x000000C0 */\r\n#define AFIO_MAPR_TIM1_REMAP_FULLREMAP        AFIO_MAPR_TIM1_REMAP_FULLREMAP_Msk /*!< Full remap (ETR/PE7, CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8, CH2N/PE10, CH3N/PE12) */\r\n\r\n#define AFIO_MAPR_TIM2_REMAP_Pos (8U)\r\n#define AFIO_MAPR_TIM2_REMAP_Msk (0x3UL << AFIO_MAPR_TIM2_REMAP_Pos) /*!< 0x00000300 */\r\n#define AFIO_MAPR_TIM2_REMAP     AFIO_MAPR_TIM2_REMAP_Msk            /*!< TIM2_REMAP[1:0] bits (TIM2 remapping) */\r\n#define AFIO_MAPR_TIM2_REMAP_0   (0x1UL << AFIO_MAPR_TIM2_REMAP_Pos) /*!< 0x00000100 */\r\n#define AFIO_MAPR_TIM2_REMAP_1   (0x2UL << AFIO_MAPR_TIM2_REMAP_Pos) /*!< 0x00000200 */\r\n\r\n/*!< TIM2_REMAP configuration */\r\n#define AFIO_MAPR_TIM2_REMAP_NOREMAP           0x00000000U /*!< No remap (CH1/ETR/PA0, CH2/PA1, CH3/PA2, CH4/PA3) */\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Pos (8U)\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Msk (0x1UL << AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Pos) /*!< 0x00000100 */\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1     AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Msk            /*!< Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2, CH4/PA3) */\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Pos (9U)\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Msk (0x1UL << AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Pos) /*!< 0x00000200 */\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2     AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Msk            /*!< Partial remap (CH1/ETR/PA0, CH2/PA1, CH3/PB10, CH4/PB11) */\r\n#define AFIO_MAPR_TIM2_REMAP_FULLREMAP_Pos     (8U)\r\n#define AFIO_MAPR_TIM2_REMAP_FULLREMAP_Msk     (0x3UL << AFIO_MAPR_TIM2_REMAP_FULLREMAP_Pos) /*!< 0x00000300 */\r\n#define AFIO_MAPR_TIM2_REMAP_FULLREMAP         AFIO_MAPR_TIM2_REMAP_FULLREMAP_Msk            /*!< Full remap (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11) */\r\n\r\n#define AFIO_MAPR_TIM3_REMAP_Pos (10U)\r\n#define AFIO_MAPR_TIM3_REMAP_Msk (0x3UL << AFIO_MAPR_TIM3_REMAP_Pos) /*!< 0x00000C00 */\r\n#define AFIO_MAPR_TIM3_REMAP     AFIO_MAPR_TIM3_REMAP_Msk            /*!< TIM3_REMAP[1:0] bits (TIM3 remapping) */\r\n#define AFIO_MAPR_TIM3_REMAP_0   (0x1UL << AFIO_MAPR_TIM3_REMAP_Pos) /*!< 0x00000400 */\r\n#define AFIO_MAPR_TIM3_REMAP_1   (0x2UL << AFIO_MAPR_TIM3_REMAP_Pos) /*!< 0x00000800 */\r\n\r\n/*!< TIM3_REMAP configuration */\r\n#define AFIO_MAPR_TIM3_REMAP_NOREMAP          0x00000000U /*!< No remap (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1) */\r\n#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Pos (11U)\r\n#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Msk (0x1UL << AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Pos) /*!< 0x00000800 */\r\n#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP     AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Msk            /*!< Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1) */\r\n#define AFIO_MAPR_TIM3_REMAP_FULLREMAP_Pos    (10U)\r\n#define AFIO_MAPR_TIM3_REMAP_FULLREMAP_Msk    (0x3UL << AFIO_MAPR_TIM3_REMAP_FULLREMAP_Pos) /*!< 0x00000C00 */\r\n#define AFIO_MAPR_TIM3_REMAP_FULLREMAP        AFIO_MAPR_TIM3_REMAP_FULLREMAP_Msk            /*!< Full remap (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9) */\r\n\r\n#define AFIO_MAPR_TIM4_REMAP_Pos (12U)\r\n#define AFIO_MAPR_TIM4_REMAP_Msk (0x1UL << AFIO_MAPR_TIM4_REMAP_Pos) /*!< 0x00001000 */\r\n#define AFIO_MAPR_TIM4_REMAP     AFIO_MAPR_TIM4_REMAP_Msk            /*!< TIM4_REMAP bit (TIM4 remapping) */\r\n\r\n#define AFIO_MAPR_CAN_REMAP_Pos (13U)\r\n#define AFIO_MAPR_CAN_REMAP_Msk (0x3UL << AFIO_MAPR_CAN_REMAP_Pos) /*!< 0x00006000 */\r\n#define AFIO_MAPR_CAN_REMAP     AFIO_MAPR_CAN_REMAP_Msk            /*!< CAN_REMAP[1:0] bits (CAN Alternate function remapping) */\r\n#define AFIO_MAPR_CAN_REMAP_0   (0x1UL << AFIO_MAPR_CAN_REMAP_Pos) /*!< 0x00002000 */\r\n#define AFIO_MAPR_CAN_REMAP_1   (0x2UL << AFIO_MAPR_CAN_REMAP_Pos) /*!< 0x00004000 */\r\n\r\n/*!< CAN_REMAP configuration */\r\n#define AFIO_MAPR_CAN_REMAP_REMAP1     0x00000000U /*!< CANRX mapped to PA11, CANTX mapped to PA12 */\r\n#define AFIO_MAPR_CAN_REMAP_REMAP2_Pos (14U)\r\n#define AFIO_MAPR_CAN_REMAP_REMAP2_Msk (0x1UL << AFIO_MAPR_CAN_REMAP_REMAP2_Pos) /*!< 0x00004000 */\r\n#define AFIO_MAPR_CAN_REMAP_REMAP2     AFIO_MAPR_CAN_REMAP_REMAP2_Msk            /*!< CANRX mapped to PB8, CANTX mapped to PB9 */\r\n#define AFIO_MAPR_CAN_REMAP_REMAP3_Pos (13U)\r\n#define AFIO_MAPR_CAN_REMAP_REMAP3_Msk (0x3UL << AFIO_MAPR_CAN_REMAP_REMAP3_Pos) /*!< 0x00006000 */\r\n#define AFIO_MAPR_CAN_REMAP_REMAP3     AFIO_MAPR_CAN_REMAP_REMAP3_Msk            /*!< CANRX mapped to PD0, CANTX mapped to PD1 */\r\n\r\n#define AFIO_MAPR_PD01_REMAP_Pos (15U)\r\n#define AFIO_MAPR_PD01_REMAP_Msk (0x1UL << AFIO_MAPR_PD01_REMAP_Pos) /*!< 0x00008000 */\r\n#define AFIO_MAPR_PD01_REMAP     AFIO_MAPR_PD01_REMAP_Msk            /*!< Port D0/Port D1 mapping on OSC_IN/OSC_OUT */\r\n\r\n/*!< SWJ_CFG configuration */\r\n#define AFIO_MAPR_SWJ_CFG_Pos (24U)\r\n#define AFIO_MAPR_SWJ_CFG_Msk (0x7UL << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x07000000 */\r\n#define AFIO_MAPR_SWJ_CFG     AFIO_MAPR_SWJ_CFG_Msk            /*!< SWJ_CFG[2:0] bits (Serial Wire JTAG configuration) */\r\n#define AFIO_MAPR_SWJ_CFG_0   (0x1UL << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x01000000 */\r\n#define AFIO_MAPR_SWJ_CFG_1   (0x2UL << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x02000000 */\r\n#define AFIO_MAPR_SWJ_CFG_2   (0x4UL << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x04000000 */\r\n\r\n#define AFIO_MAPR_SWJ_CFG_RESET           0x00000000U /*!< Full SWJ (JTAG-DP + SW-DP) : Reset State */\r\n#define AFIO_MAPR_SWJ_CFG_NOJNTRST_Pos    (24U)\r\n#define AFIO_MAPR_SWJ_CFG_NOJNTRST_Msk    (0x1UL << AFIO_MAPR_SWJ_CFG_NOJNTRST_Pos) /*!< 0x01000000 */\r\n#define AFIO_MAPR_SWJ_CFG_NOJNTRST        AFIO_MAPR_SWJ_CFG_NOJNTRST_Msk            /*!< Full SWJ (JTAG-DP + SW-DP) but without JNTRST */\r\n#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Pos (25U)\r\n#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Msk (0x1UL << AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Pos) /*!< 0x02000000 */\r\n#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE     AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Msk            /*!< JTAG-DP Disabled and SW-DP Enabled */\r\n#define AFIO_MAPR_SWJ_CFG_DISABLE_Pos     (26U)\r\n#define AFIO_MAPR_SWJ_CFG_DISABLE_Msk     (0x1UL << AFIO_MAPR_SWJ_CFG_DISABLE_Pos) /*!< 0x04000000 */\r\n#define AFIO_MAPR_SWJ_CFG_DISABLE         AFIO_MAPR_SWJ_CFG_DISABLE_Msk            /*!< JTAG-DP Disabled and SW-DP Disabled */\r\n\r\n/*****************  Bit definition for AFIO_EXTICR1 register  *****************/\r\n#define AFIO_EXTICR1_EXTI0_Pos (0U)\r\n#define AFIO_EXTICR1_EXTI0_Msk (0xFUL << AFIO_EXTICR1_EXTI0_Pos) /*!< 0x0000000F */\r\n#define AFIO_EXTICR1_EXTI0     AFIO_EXTICR1_EXTI0_Msk            /*!< EXTI 0 configuration */\r\n#define AFIO_EXTICR1_EXTI1_Pos (4U)\r\n#define AFIO_EXTICR1_EXTI1_Msk (0xFUL << AFIO_EXTICR1_EXTI1_Pos) /*!< 0x000000F0 */\r\n#define AFIO_EXTICR1_EXTI1     AFIO_EXTICR1_EXTI1_Msk            /*!< EXTI 1 configuration */\r\n#define AFIO_EXTICR1_EXTI2_Pos (8U)\r\n#define AFIO_EXTICR1_EXTI2_Msk (0xFUL << AFIO_EXTICR1_EXTI2_Pos) /*!< 0x00000F00 */\r\n#define AFIO_EXTICR1_EXTI2     AFIO_EXTICR1_EXTI2_Msk            /*!< EXTI 2 configuration */\r\n#define AFIO_EXTICR1_EXTI3_Pos (12U)\r\n#define AFIO_EXTICR1_EXTI3_Msk (0xFUL << AFIO_EXTICR1_EXTI3_Pos) /*!< 0x0000F000 */\r\n#define AFIO_EXTICR1_EXTI3     AFIO_EXTICR1_EXTI3_Msk            /*!< EXTI 3 configuration */\r\n\r\n/*!< EXTI0 configuration */\r\n#define AFIO_EXTICR1_EXTI0_PA     0x00000000U /*!< PA[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PB_Pos (0U)\r\n#define AFIO_EXTICR1_EXTI0_PB_Msk (0x1UL << AFIO_EXTICR1_EXTI0_PB_Pos) /*!< 0x00000001 */\r\n#define AFIO_EXTICR1_EXTI0_PB     AFIO_EXTICR1_EXTI0_PB_Msk            /*!< PB[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PC_Pos (1U)\r\n#define AFIO_EXTICR1_EXTI0_PC_Msk (0x1UL << AFIO_EXTICR1_EXTI0_PC_Pos) /*!< 0x00000002 */\r\n#define AFIO_EXTICR1_EXTI0_PC     AFIO_EXTICR1_EXTI0_PC_Msk            /*!< PC[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PD_Pos (0U)\r\n#define AFIO_EXTICR1_EXTI0_PD_Msk (0x3UL << AFIO_EXTICR1_EXTI0_PD_Pos) /*!< 0x00000003 */\r\n#define AFIO_EXTICR1_EXTI0_PD     AFIO_EXTICR1_EXTI0_PD_Msk            /*!< PD[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PE_Pos (2U)\r\n#define AFIO_EXTICR1_EXTI0_PE_Msk (0x1UL << AFIO_EXTICR1_EXTI0_PE_Pos) /*!< 0x00000004 */\r\n#define AFIO_EXTICR1_EXTI0_PE     AFIO_EXTICR1_EXTI0_PE_Msk            /*!< PE[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PF_Pos (0U)\r\n#define AFIO_EXTICR1_EXTI0_PF_Msk (0x5UL << AFIO_EXTICR1_EXTI0_PF_Pos) /*!< 0x00000005 */\r\n#define AFIO_EXTICR1_EXTI0_PF     AFIO_EXTICR1_EXTI0_PF_Msk            /*!< PF[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PG_Pos (1U)\r\n#define AFIO_EXTICR1_EXTI0_PG_Msk (0x3UL << AFIO_EXTICR1_EXTI0_PG_Pos) /*!< 0x00000006 */\r\n#define AFIO_EXTICR1_EXTI0_PG     AFIO_EXTICR1_EXTI0_PG_Msk            /*!< PG[0] pin */\r\n\r\n/*!< EXTI1 configuration */\r\n#define AFIO_EXTICR1_EXTI1_PA     0x00000000U /*!< PA[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PB_Pos (4U)\r\n#define AFIO_EXTICR1_EXTI1_PB_Msk (0x1UL << AFIO_EXTICR1_EXTI1_PB_Pos) /*!< 0x00000010 */\r\n#define AFIO_EXTICR1_EXTI1_PB     AFIO_EXTICR1_EXTI1_PB_Msk            /*!< PB[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PC_Pos (5U)\r\n#define AFIO_EXTICR1_EXTI1_PC_Msk (0x1UL << AFIO_EXTICR1_EXTI1_PC_Pos) /*!< 0x00000020 */\r\n#define AFIO_EXTICR1_EXTI1_PC     AFIO_EXTICR1_EXTI1_PC_Msk            /*!< PC[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PD_Pos (4U)\r\n#define AFIO_EXTICR1_EXTI1_PD_Msk (0x3UL << AFIO_EXTICR1_EXTI1_PD_Pos) /*!< 0x00000030 */\r\n#define AFIO_EXTICR1_EXTI1_PD     AFIO_EXTICR1_EXTI1_PD_Msk            /*!< PD[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PE_Pos (6U)\r\n#define AFIO_EXTICR1_EXTI1_PE_Msk (0x1UL << AFIO_EXTICR1_EXTI1_PE_Pos) /*!< 0x00000040 */\r\n#define AFIO_EXTICR1_EXTI1_PE     AFIO_EXTICR1_EXTI1_PE_Msk            /*!< PE[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PF_Pos (4U)\r\n#define AFIO_EXTICR1_EXTI1_PF_Msk (0x5UL << AFIO_EXTICR1_EXTI1_PF_Pos) /*!< 0x00000050 */\r\n#define AFIO_EXTICR1_EXTI1_PF     AFIO_EXTICR1_EXTI1_PF_Msk            /*!< PF[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PG_Pos (5U)\r\n#define AFIO_EXTICR1_EXTI1_PG_Msk (0x3UL << AFIO_EXTICR1_EXTI1_PG_Pos) /*!< 0x00000060 */\r\n#define AFIO_EXTICR1_EXTI1_PG     AFIO_EXTICR1_EXTI1_PG_Msk            /*!< PG[1] pin */\r\n\r\n/*!< EXTI2 configuration */\r\n#define AFIO_EXTICR1_EXTI2_PA     0x00000000U /*!< PA[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PB_Pos (8U)\r\n#define AFIO_EXTICR1_EXTI2_PB_Msk (0x1UL << AFIO_EXTICR1_EXTI2_PB_Pos) /*!< 0x00000100 */\r\n#define AFIO_EXTICR1_EXTI2_PB     AFIO_EXTICR1_EXTI2_PB_Msk            /*!< PB[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PC_Pos (9U)\r\n#define AFIO_EXTICR1_EXTI2_PC_Msk (0x1UL << AFIO_EXTICR1_EXTI2_PC_Pos) /*!< 0x00000200 */\r\n#define AFIO_EXTICR1_EXTI2_PC     AFIO_EXTICR1_EXTI2_PC_Msk            /*!< PC[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PD_Pos (8U)\r\n#define AFIO_EXTICR1_EXTI2_PD_Msk (0x3UL << AFIO_EXTICR1_EXTI2_PD_Pos) /*!< 0x00000300 */\r\n#define AFIO_EXTICR1_EXTI2_PD     AFIO_EXTICR1_EXTI2_PD_Msk            /*!< PD[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PE_Pos (10U)\r\n#define AFIO_EXTICR1_EXTI2_PE_Msk (0x1UL << AFIO_EXTICR1_EXTI2_PE_Pos) /*!< 0x00000400 */\r\n#define AFIO_EXTICR1_EXTI2_PE     AFIO_EXTICR1_EXTI2_PE_Msk            /*!< PE[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PF_Pos (8U)\r\n#define AFIO_EXTICR1_EXTI2_PF_Msk (0x5UL << AFIO_EXTICR1_EXTI2_PF_Pos) /*!< 0x00000500 */\r\n#define AFIO_EXTICR1_EXTI2_PF     AFIO_EXTICR1_EXTI2_PF_Msk            /*!< PF[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PG_Pos (9U)\r\n#define AFIO_EXTICR1_EXTI2_PG_Msk (0x3UL << AFIO_EXTICR1_EXTI2_PG_Pos) /*!< 0x00000600 */\r\n#define AFIO_EXTICR1_EXTI2_PG     AFIO_EXTICR1_EXTI2_PG_Msk            /*!< PG[2] pin */\r\n\r\n/*!< EXTI3 configuration */\r\n#define AFIO_EXTICR1_EXTI3_PA     0x00000000U /*!< PA[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PB_Pos (12U)\r\n#define AFIO_EXTICR1_EXTI3_PB_Msk (0x1UL << AFIO_EXTICR1_EXTI3_PB_Pos) /*!< 0x00001000 */\r\n#define AFIO_EXTICR1_EXTI3_PB     AFIO_EXTICR1_EXTI3_PB_Msk            /*!< PB[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PC_Pos (13U)\r\n#define AFIO_EXTICR1_EXTI3_PC_Msk (0x1UL << AFIO_EXTICR1_EXTI3_PC_Pos) /*!< 0x00002000 */\r\n#define AFIO_EXTICR1_EXTI3_PC     AFIO_EXTICR1_EXTI3_PC_Msk            /*!< PC[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PD_Pos (12U)\r\n#define AFIO_EXTICR1_EXTI3_PD_Msk (0x3UL << AFIO_EXTICR1_EXTI3_PD_Pos) /*!< 0x00003000 */\r\n#define AFIO_EXTICR1_EXTI3_PD     AFIO_EXTICR1_EXTI3_PD_Msk            /*!< PD[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PE_Pos (14U)\r\n#define AFIO_EXTICR1_EXTI3_PE_Msk (0x1UL << AFIO_EXTICR1_EXTI3_PE_Pos) /*!< 0x00004000 */\r\n#define AFIO_EXTICR1_EXTI3_PE     AFIO_EXTICR1_EXTI3_PE_Msk            /*!< PE[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PF_Pos (12U)\r\n#define AFIO_EXTICR1_EXTI3_PF_Msk (0x5UL << AFIO_EXTICR1_EXTI3_PF_Pos) /*!< 0x00005000 */\r\n#define AFIO_EXTICR1_EXTI3_PF     AFIO_EXTICR1_EXTI3_PF_Msk            /*!< PF[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PG_Pos (13U)\r\n#define AFIO_EXTICR1_EXTI3_PG_Msk (0x3UL << AFIO_EXTICR1_EXTI3_PG_Pos) /*!< 0x00006000 */\r\n#define AFIO_EXTICR1_EXTI3_PG     AFIO_EXTICR1_EXTI3_PG_Msk            /*!< PG[3] pin */\r\n\r\n/*****************  Bit definition for AFIO_EXTICR2 register  *****************/\r\n#define AFIO_EXTICR2_EXTI4_Pos (0U)\r\n#define AFIO_EXTICR2_EXTI4_Msk (0xFUL << AFIO_EXTICR2_EXTI4_Pos) /*!< 0x0000000F */\r\n#define AFIO_EXTICR2_EXTI4     AFIO_EXTICR2_EXTI4_Msk            /*!< EXTI 4 configuration */\r\n#define AFIO_EXTICR2_EXTI5_Pos (4U)\r\n#define AFIO_EXTICR2_EXTI5_Msk (0xFUL << AFIO_EXTICR2_EXTI5_Pos) /*!< 0x000000F0 */\r\n#define AFIO_EXTICR2_EXTI5     AFIO_EXTICR2_EXTI5_Msk            /*!< EXTI 5 configuration */\r\n#define AFIO_EXTICR2_EXTI6_Pos (8U)\r\n#define AFIO_EXTICR2_EXTI6_Msk (0xFUL << AFIO_EXTICR2_EXTI6_Pos) /*!< 0x00000F00 */\r\n#define AFIO_EXTICR2_EXTI6     AFIO_EXTICR2_EXTI6_Msk            /*!< EXTI 6 configuration */\r\n#define AFIO_EXTICR2_EXTI7_Pos (12U)\r\n#define AFIO_EXTICR2_EXTI7_Msk (0xFUL << AFIO_EXTICR2_EXTI7_Pos) /*!< 0x0000F000 */\r\n#define AFIO_EXTICR2_EXTI7     AFIO_EXTICR2_EXTI7_Msk            /*!< EXTI 7 configuration */\r\n\r\n/*!< EXTI4 configuration */\r\n#define AFIO_EXTICR2_EXTI4_PA     0x00000000U /*!< PA[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PB_Pos (0U)\r\n#define AFIO_EXTICR2_EXTI4_PB_Msk (0x1UL << AFIO_EXTICR2_EXTI4_PB_Pos) /*!< 0x00000001 */\r\n#define AFIO_EXTICR2_EXTI4_PB     AFIO_EXTICR2_EXTI4_PB_Msk            /*!< PB[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PC_Pos (1U)\r\n#define AFIO_EXTICR2_EXTI4_PC_Msk (0x1UL << AFIO_EXTICR2_EXTI4_PC_Pos) /*!< 0x00000002 */\r\n#define AFIO_EXTICR2_EXTI4_PC     AFIO_EXTICR2_EXTI4_PC_Msk            /*!< PC[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PD_Pos (0U)\r\n#define AFIO_EXTICR2_EXTI4_PD_Msk (0x3UL << AFIO_EXTICR2_EXTI4_PD_Pos) /*!< 0x00000003 */\r\n#define AFIO_EXTICR2_EXTI4_PD     AFIO_EXTICR2_EXTI4_PD_Msk            /*!< PD[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PE_Pos (2U)\r\n#define AFIO_EXTICR2_EXTI4_PE_Msk (0x1UL << AFIO_EXTICR2_EXTI4_PE_Pos) /*!< 0x00000004 */\r\n#define AFIO_EXTICR2_EXTI4_PE     AFIO_EXTICR2_EXTI4_PE_Msk            /*!< PE[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PF_Pos (0U)\r\n#define AFIO_EXTICR2_EXTI4_PF_Msk (0x5UL << AFIO_EXTICR2_EXTI4_PF_Pos) /*!< 0x00000005 */\r\n#define AFIO_EXTICR2_EXTI4_PF     AFIO_EXTICR2_EXTI4_PF_Msk            /*!< PF[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PG_Pos (1U)\r\n#define AFIO_EXTICR2_EXTI4_PG_Msk (0x3UL << AFIO_EXTICR2_EXTI4_PG_Pos) /*!< 0x00000006 */\r\n#define AFIO_EXTICR2_EXTI4_PG     AFIO_EXTICR2_EXTI4_PG_Msk            /*!< PG[4] pin */\r\n\r\n/* EXTI5 configuration */\r\n#define AFIO_EXTICR2_EXTI5_PA     0x00000000U /*!< PA[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PB_Pos (4U)\r\n#define AFIO_EXTICR2_EXTI5_PB_Msk (0x1UL << AFIO_EXTICR2_EXTI5_PB_Pos) /*!< 0x00000010 */\r\n#define AFIO_EXTICR2_EXTI5_PB     AFIO_EXTICR2_EXTI5_PB_Msk            /*!< PB[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PC_Pos (5U)\r\n#define AFIO_EXTICR2_EXTI5_PC_Msk (0x1UL << AFIO_EXTICR2_EXTI5_PC_Pos) /*!< 0x00000020 */\r\n#define AFIO_EXTICR2_EXTI5_PC     AFIO_EXTICR2_EXTI5_PC_Msk            /*!< PC[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PD_Pos (4U)\r\n#define AFIO_EXTICR2_EXTI5_PD_Msk (0x3UL << AFIO_EXTICR2_EXTI5_PD_Pos) /*!< 0x00000030 */\r\n#define AFIO_EXTICR2_EXTI5_PD     AFIO_EXTICR2_EXTI5_PD_Msk            /*!< PD[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PE_Pos (6U)\r\n#define AFIO_EXTICR2_EXTI5_PE_Msk (0x1UL << AFIO_EXTICR2_EXTI5_PE_Pos) /*!< 0x00000040 */\r\n#define AFIO_EXTICR2_EXTI5_PE     AFIO_EXTICR2_EXTI5_PE_Msk            /*!< PE[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PF_Pos (4U)\r\n#define AFIO_EXTICR2_EXTI5_PF_Msk (0x5UL << AFIO_EXTICR2_EXTI5_PF_Pos) /*!< 0x00000050 */\r\n#define AFIO_EXTICR2_EXTI5_PF     AFIO_EXTICR2_EXTI5_PF_Msk            /*!< PF[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PG_Pos (5U)\r\n#define AFIO_EXTICR2_EXTI5_PG_Msk (0x3UL << AFIO_EXTICR2_EXTI5_PG_Pos) /*!< 0x00000060 */\r\n#define AFIO_EXTICR2_EXTI5_PG     AFIO_EXTICR2_EXTI5_PG_Msk            /*!< PG[5] pin */\r\n\r\n/*!< EXTI6 configuration */\r\n#define AFIO_EXTICR2_EXTI6_PA     0x00000000U /*!< PA[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PB_Pos (8U)\r\n#define AFIO_EXTICR2_EXTI6_PB_Msk (0x1UL << AFIO_EXTICR2_EXTI6_PB_Pos) /*!< 0x00000100 */\r\n#define AFIO_EXTICR2_EXTI6_PB     AFIO_EXTICR2_EXTI6_PB_Msk            /*!< PB[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PC_Pos (9U)\r\n#define AFIO_EXTICR2_EXTI6_PC_Msk (0x1UL << AFIO_EXTICR2_EXTI6_PC_Pos) /*!< 0x00000200 */\r\n#define AFIO_EXTICR2_EXTI6_PC     AFIO_EXTICR2_EXTI6_PC_Msk            /*!< PC[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PD_Pos (8U)\r\n#define AFIO_EXTICR2_EXTI6_PD_Msk (0x3UL << AFIO_EXTICR2_EXTI6_PD_Pos) /*!< 0x00000300 */\r\n#define AFIO_EXTICR2_EXTI6_PD     AFIO_EXTICR2_EXTI6_PD_Msk            /*!< PD[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PE_Pos (10U)\r\n#define AFIO_EXTICR2_EXTI6_PE_Msk (0x1UL << AFIO_EXTICR2_EXTI6_PE_Pos) /*!< 0x00000400 */\r\n#define AFIO_EXTICR2_EXTI6_PE     AFIO_EXTICR2_EXTI6_PE_Msk            /*!< PE[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PF_Pos (8U)\r\n#define AFIO_EXTICR2_EXTI6_PF_Msk (0x5UL << AFIO_EXTICR2_EXTI6_PF_Pos) /*!< 0x00000500 */\r\n#define AFIO_EXTICR2_EXTI6_PF     AFIO_EXTICR2_EXTI6_PF_Msk            /*!< PF[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PG_Pos (9U)\r\n#define AFIO_EXTICR2_EXTI6_PG_Msk (0x3UL << AFIO_EXTICR2_EXTI6_PG_Pos) /*!< 0x00000600 */\r\n#define AFIO_EXTICR2_EXTI6_PG     AFIO_EXTICR2_EXTI6_PG_Msk            /*!< PG[6] pin */\r\n\r\n/*!< EXTI7 configuration */\r\n#define AFIO_EXTICR2_EXTI7_PA     0x00000000U /*!< PA[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PB_Pos (12U)\r\n#define AFIO_EXTICR2_EXTI7_PB_Msk (0x1UL << AFIO_EXTICR2_EXTI7_PB_Pos) /*!< 0x00001000 */\r\n#define AFIO_EXTICR2_EXTI7_PB     AFIO_EXTICR2_EXTI7_PB_Msk            /*!< PB[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PC_Pos (13U)\r\n#define AFIO_EXTICR2_EXTI7_PC_Msk (0x1UL << AFIO_EXTICR2_EXTI7_PC_Pos) /*!< 0x00002000 */\r\n#define AFIO_EXTICR2_EXTI7_PC     AFIO_EXTICR2_EXTI7_PC_Msk            /*!< PC[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PD_Pos (12U)\r\n#define AFIO_EXTICR2_EXTI7_PD_Msk (0x3UL << AFIO_EXTICR2_EXTI7_PD_Pos) /*!< 0x00003000 */\r\n#define AFIO_EXTICR2_EXTI7_PD     AFIO_EXTICR2_EXTI7_PD_Msk            /*!< PD[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PE_Pos (14U)\r\n#define AFIO_EXTICR2_EXTI7_PE_Msk (0x1UL << AFIO_EXTICR2_EXTI7_PE_Pos) /*!< 0x00004000 */\r\n#define AFIO_EXTICR2_EXTI7_PE     AFIO_EXTICR2_EXTI7_PE_Msk            /*!< PE[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PF_Pos (12U)\r\n#define AFIO_EXTICR2_EXTI7_PF_Msk (0x5UL << AFIO_EXTICR2_EXTI7_PF_Pos) /*!< 0x00005000 */\r\n#define AFIO_EXTICR2_EXTI7_PF     AFIO_EXTICR2_EXTI7_PF_Msk            /*!< PF[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PG_Pos (13U)\r\n#define AFIO_EXTICR2_EXTI7_PG_Msk (0x3UL << AFIO_EXTICR2_EXTI7_PG_Pos) /*!< 0x00006000 */\r\n#define AFIO_EXTICR2_EXTI7_PG     AFIO_EXTICR2_EXTI7_PG_Msk            /*!< PG[7] pin */\r\n\r\n/*****************  Bit definition for AFIO_EXTICR3 register  *****************/\r\n#define AFIO_EXTICR3_EXTI8_Pos  (0U)\r\n#define AFIO_EXTICR3_EXTI8_Msk  (0xFUL << AFIO_EXTICR3_EXTI8_Pos) /*!< 0x0000000F */\r\n#define AFIO_EXTICR3_EXTI8      AFIO_EXTICR3_EXTI8_Msk            /*!< EXTI 8 configuration */\r\n#define AFIO_EXTICR3_EXTI9_Pos  (4U)\r\n#define AFIO_EXTICR3_EXTI9_Msk  (0xFUL << AFIO_EXTICR3_EXTI9_Pos) /*!< 0x000000F0 */\r\n#define AFIO_EXTICR3_EXTI9      AFIO_EXTICR3_EXTI9_Msk            /*!< EXTI 9 configuration */\r\n#define AFIO_EXTICR3_EXTI10_Pos (8U)\r\n#define AFIO_EXTICR3_EXTI10_Msk (0xFUL << AFIO_EXTICR3_EXTI10_Pos) /*!< 0x00000F00 */\r\n#define AFIO_EXTICR3_EXTI10     AFIO_EXTICR3_EXTI10_Msk            /*!< EXTI 10 configuration */\r\n#define AFIO_EXTICR3_EXTI11_Pos (12U)\r\n#define AFIO_EXTICR3_EXTI11_Msk (0xFUL << AFIO_EXTICR3_EXTI11_Pos) /*!< 0x0000F000 */\r\n#define AFIO_EXTICR3_EXTI11     AFIO_EXTICR3_EXTI11_Msk            /*!< EXTI 11 configuration */\r\n\r\n/*!< EXTI8 configuration */\r\n#define AFIO_EXTICR3_EXTI8_PA     0x00000000U /*!< PA[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PB_Pos (0U)\r\n#define AFIO_EXTICR3_EXTI8_PB_Msk (0x1UL << AFIO_EXTICR3_EXTI8_PB_Pos) /*!< 0x00000001 */\r\n#define AFIO_EXTICR3_EXTI8_PB     AFIO_EXTICR3_EXTI8_PB_Msk            /*!< PB[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PC_Pos (1U)\r\n#define AFIO_EXTICR3_EXTI8_PC_Msk (0x1UL << AFIO_EXTICR3_EXTI8_PC_Pos) /*!< 0x00000002 */\r\n#define AFIO_EXTICR3_EXTI8_PC     AFIO_EXTICR3_EXTI8_PC_Msk            /*!< PC[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PD_Pos (0U)\r\n#define AFIO_EXTICR3_EXTI8_PD_Msk (0x3UL << AFIO_EXTICR3_EXTI8_PD_Pos) /*!< 0x00000003 */\r\n#define AFIO_EXTICR3_EXTI8_PD     AFIO_EXTICR3_EXTI8_PD_Msk            /*!< PD[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PE_Pos (2U)\r\n#define AFIO_EXTICR3_EXTI8_PE_Msk (0x1UL << AFIO_EXTICR3_EXTI8_PE_Pos) /*!< 0x00000004 */\r\n#define AFIO_EXTICR3_EXTI8_PE     AFIO_EXTICR3_EXTI8_PE_Msk            /*!< PE[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PF_Pos (0U)\r\n#define AFIO_EXTICR3_EXTI8_PF_Msk (0x5UL << AFIO_EXTICR3_EXTI8_PF_Pos) /*!< 0x00000005 */\r\n#define AFIO_EXTICR3_EXTI8_PF     AFIO_EXTICR3_EXTI8_PF_Msk            /*!< PF[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PG_Pos (1U)\r\n#define AFIO_EXTICR3_EXTI8_PG_Msk (0x3UL << AFIO_EXTICR3_EXTI8_PG_Pos) /*!< 0x00000006 */\r\n#define AFIO_EXTICR3_EXTI8_PG     AFIO_EXTICR3_EXTI8_PG_Msk            /*!< PG[8] pin */\r\n\r\n/*!< EXTI9 configuration */\r\n#define AFIO_EXTICR3_EXTI9_PA     0x00000000U /*!< PA[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PB_Pos (4U)\r\n#define AFIO_EXTICR3_EXTI9_PB_Msk (0x1UL << AFIO_EXTICR3_EXTI9_PB_Pos) /*!< 0x00000010 */\r\n#define AFIO_EXTICR3_EXTI9_PB     AFIO_EXTICR3_EXTI9_PB_Msk            /*!< PB[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PC_Pos (5U)\r\n#define AFIO_EXTICR3_EXTI9_PC_Msk (0x1UL << AFIO_EXTICR3_EXTI9_PC_Pos) /*!< 0x00000020 */\r\n#define AFIO_EXTICR3_EXTI9_PC     AFIO_EXTICR3_EXTI9_PC_Msk            /*!< PC[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PD_Pos (4U)\r\n#define AFIO_EXTICR3_EXTI9_PD_Msk (0x3UL << AFIO_EXTICR3_EXTI9_PD_Pos) /*!< 0x00000030 */\r\n#define AFIO_EXTICR3_EXTI9_PD     AFIO_EXTICR3_EXTI9_PD_Msk            /*!< PD[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PE_Pos (6U)\r\n#define AFIO_EXTICR3_EXTI9_PE_Msk (0x1UL << AFIO_EXTICR3_EXTI9_PE_Pos) /*!< 0x00000040 */\r\n#define AFIO_EXTICR3_EXTI9_PE     AFIO_EXTICR3_EXTI9_PE_Msk            /*!< PE[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PF_Pos (4U)\r\n#define AFIO_EXTICR3_EXTI9_PF_Msk (0x5UL << AFIO_EXTICR3_EXTI9_PF_Pos) /*!< 0x00000050 */\r\n#define AFIO_EXTICR3_EXTI9_PF     AFIO_EXTICR3_EXTI9_PF_Msk            /*!< PF[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PG_Pos (5U)\r\n#define AFIO_EXTICR3_EXTI9_PG_Msk (0x3UL << AFIO_EXTICR3_EXTI9_PG_Pos) /*!< 0x00000060 */\r\n#define AFIO_EXTICR3_EXTI9_PG     AFIO_EXTICR3_EXTI9_PG_Msk            /*!< PG[9] pin */\r\n\r\n/*!< EXTI10 configuration */\r\n#define AFIO_EXTICR3_EXTI10_PA     0x00000000U /*!< PA[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PB_Pos (8U)\r\n#define AFIO_EXTICR3_EXTI10_PB_Msk (0x1UL << AFIO_EXTICR3_EXTI10_PB_Pos) /*!< 0x00000100 */\r\n#define AFIO_EXTICR3_EXTI10_PB     AFIO_EXTICR3_EXTI10_PB_Msk            /*!< PB[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PC_Pos (9U)\r\n#define AFIO_EXTICR3_EXTI10_PC_Msk (0x1UL << AFIO_EXTICR3_EXTI10_PC_Pos) /*!< 0x00000200 */\r\n#define AFIO_EXTICR3_EXTI10_PC     AFIO_EXTICR3_EXTI10_PC_Msk            /*!< PC[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PD_Pos (8U)\r\n#define AFIO_EXTICR3_EXTI10_PD_Msk (0x3UL << AFIO_EXTICR3_EXTI10_PD_Pos) /*!< 0x00000300 */\r\n#define AFIO_EXTICR3_EXTI10_PD     AFIO_EXTICR3_EXTI10_PD_Msk            /*!< PD[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PE_Pos (10U)\r\n#define AFIO_EXTICR3_EXTI10_PE_Msk (0x1UL << AFIO_EXTICR3_EXTI10_PE_Pos) /*!< 0x00000400 */\r\n#define AFIO_EXTICR3_EXTI10_PE     AFIO_EXTICR3_EXTI10_PE_Msk            /*!< PE[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PF_Pos (8U)\r\n#define AFIO_EXTICR3_EXTI10_PF_Msk (0x5UL << AFIO_EXTICR3_EXTI10_PF_Pos) /*!< 0x00000500 */\r\n#define AFIO_EXTICR3_EXTI10_PF     AFIO_EXTICR3_EXTI10_PF_Msk            /*!< PF[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PG_Pos (9U)\r\n#define AFIO_EXTICR3_EXTI10_PG_Msk (0x3UL << AFIO_EXTICR3_EXTI10_PG_Pos) /*!< 0x00000600 */\r\n#define AFIO_EXTICR3_EXTI10_PG     AFIO_EXTICR3_EXTI10_PG_Msk            /*!< PG[10] pin */\r\n\r\n/*!< EXTI11 configuration */\r\n#define AFIO_EXTICR3_EXTI11_PA     0x00000000U /*!< PA[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PB_Pos (12U)\r\n#define AFIO_EXTICR3_EXTI11_PB_Msk (0x1UL << AFIO_EXTICR3_EXTI11_PB_Pos) /*!< 0x00001000 */\r\n#define AFIO_EXTICR3_EXTI11_PB     AFIO_EXTICR3_EXTI11_PB_Msk            /*!< PB[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PC_Pos (13U)\r\n#define AFIO_EXTICR3_EXTI11_PC_Msk (0x1UL << AFIO_EXTICR3_EXTI11_PC_Pos) /*!< 0x00002000 */\r\n#define AFIO_EXTICR3_EXTI11_PC     AFIO_EXTICR3_EXTI11_PC_Msk            /*!< PC[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PD_Pos (12U)\r\n#define AFIO_EXTICR3_EXTI11_PD_Msk (0x3UL << AFIO_EXTICR3_EXTI11_PD_Pos) /*!< 0x00003000 */\r\n#define AFIO_EXTICR3_EXTI11_PD     AFIO_EXTICR3_EXTI11_PD_Msk            /*!< PD[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PE_Pos (14U)\r\n#define AFIO_EXTICR3_EXTI11_PE_Msk (0x1UL << AFIO_EXTICR3_EXTI11_PE_Pos) /*!< 0x00004000 */\r\n#define AFIO_EXTICR3_EXTI11_PE     AFIO_EXTICR3_EXTI11_PE_Msk            /*!< PE[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PF_Pos (12U)\r\n#define AFIO_EXTICR3_EXTI11_PF_Msk (0x5UL << AFIO_EXTICR3_EXTI11_PF_Pos) /*!< 0x00005000 */\r\n#define AFIO_EXTICR3_EXTI11_PF     AFIO_EXTICR3_EXTI11_PF_Msk            /*!< PF[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PG_Pos (13U)\r\n#define AFIO_EXTICR3_EXTI11_PG_Msk (0x3UL << AFIO_EXTICR3_EXTI11_PG_Pos) /*!< 0x00006000 */\r\n#define AFIO_EXTICR3_EXTI11_PG     AFIO_EXTICR3_EXTI11_PG_Msk            /*!< PG[11] pin */\r\n\r\n/*****************  Bit definition for AFIO_EXTICR4 register  *****************/\r\n#define AFIO_EXTICR4_EXTI12_Pos (0U)\r\n#define AFIO_EXTICR4_EXTI12_Msk (0xFUL << AFIO_EXTICR4_EXTI12_Pos) /*!< 0x0000000F */\r\n#define AFIO_EXTICR4_EXTI12     AFIO_EXTICR4_EXTI12_Msk            /*!< EXTI 12 configuration */\r\n#define AFIO_EXTICR4_EXTI13_Pos (4U)\r\n#define AFIO_EXTICR4_EXTI13_Msk (0xFUL << AFIO_EXTICR4_EXTI13_Pos) /*!< 0x000000F0 */\r\n#define AFIO_EXTICR4_EXTI13     AFIO_EXTICR4_EXTI13_Msk            /*!< EXTI 13 configuration */\r\n#define AFIO_EXTICR4_EXTI14_Pos (8U)\r\n#define AFIO_EXTICR4_EXTI14_Msk (0xFUL << AFIO_EXTICR4_EXTI14_Pos) /*!< 0x00000F00 */\r\n#define AFIO_EXTICR4_EXTI14     AFIO_EXTICR4_EXTI14_Msk            /*!< EXTI 14 configuration */\r\n#define AFIO_EXTICR4_EXTI15_Pos (12U)\r\n#define AFIO_EXTICR4_EXTI15_Msk (0xFUL << AFIO_EXTICR4_EXTI15_Pos) /*!< 0x0000F000 */\r\n#define AFIO_EXTICR4_EXTI15     AFIO_EXTICR4_EXTI15_Msk            /*!< EXTI 15 configuration */\r\n\r\n/* EXTI12 configuration */\r\n#define AFIO_EXTICR4_EXTI12_PA     0x00000000U /*!< PA[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PB_Pos (0U)\r\n#define AFIO_EXTICR4_EXTI12_PB_Msk (0x1UL << AFIO_EXTICR4_EXTI12_PB_Pos) /*!< 0x00000001 */\r\n#define AFIO_EXTICR4_EXTI12_PB     AFIO_EXTICR4_EXTI12_PB_Msk            /*!< PB[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PC_Pos (1U)\r\n#define AFIO_EXTICR4_EXTI12_PC_Msk (0x1UL << AFIO_EXTICR4_EXTI12_PC_Pos) /*!< 0x00000002 */\r\n#define AFIO_EXTICR4_EXTI12_PC     AFIO_EXTICR4_EXTI12_PC_Msk            /*!< PC[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PD_Pos (0U)\r\n#define AFIO_EXTICR4_EXTI12_PD_Msk (0x3UL << AFIO_EXTICR4_EXTI12_PD_Pos) /*!< 0x00000003 */\r\n#define AFIO_EXTICR4_EXTI12_PD     AFIO_EXTICR4_EXTI12_PD_Msk            /*!< PD[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PE_Pos (2U)\r\n#define AFIO_EXTICR4_EXTI12_PE_Msk (0x1UL << AFIO_EXTICR4_EXTI12_PE_Pos) /*!< 0x00000004 */\r\n#define AFIO_EXTICR4_EXTI12_PE     AFIO_EXTICR4_EXTI12_PE_Msk            /*!< PE[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PF_Pos (0U)\r\n#define AFIO_EXTICR4_EXTI12_PF_Msk (0x5UL << AFIO_EXTICR4_EXTI12_PF_Pos) /*!< 0x00000005 */\r\n#define AFIO_EXTICR4_EXTI12_PF     AFIO_EXTICR4_EXTI12_PF_Msk            /*!< PF[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PG_Pos (1U)\r\n#define AFIO_EXTICR4_EXTI12_PG_Msk (0x3UL << AFIO_EXTICR4_EXTI12_PG_Pos) /*!< 0x00000006 */\r\n#define AFIO_EXTICR4_EXTI12_PG     AFIO_EXTICR4_EXTI12_PG_Msk            /*!< PG[12] pin */\r\n\r\n/* EXTI13 configuration */\r\n#define AFIO_EXTICR4_EXTI13_PA     0x00000000U /*!< PA[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PB_Pos (4U)\r\n#define AFIO_EXTICR4_EXTI13_PB_Msk (0x1UL << AFIO_EXTICR4_EXTI13_PB_Pos) /*!< 0x00000010 */\r\n#define AFIO_EXTICR4_EXTI13_PB     AFIO_EXTICR4_EXTI13_PB_Msk            /*!< PB[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PC_Pos (5U)\r\n#define AFIO_EXTICR4_EXTI13_PC_Msk (0x1UL << AFIO_EXTICR4_EXTI13_PC_Pos) /*!< 0x00000020 */\r\n#define AFIO_EXTICR4_EXTI13_PC     AFIO_EXTICR4_EXTI13_PC_Msk            /*!< PC[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PD_Pos (4U)\r\n#define AFIO_EXTICR4_EXTI13_PD_Msk (0x3UL << AFIO_EXTICR4_EXTI13_PD_Pos) /*!< 0x00000030 */\r\n#define AFIO_EXTICR4_EXTI13_PD     AFIO_EXTICR4_EXTI13_PD_Msk            /*!< PD[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PE_Pos (6U)\r\n#define AFIO_EXTICR4_EXTI13_PE_Msk (0x1UL << AFIO_EXTICR4_EXTI13_PE_Pos) /*!< 0x00000040 */\r\n#define AFIO_EXTICR4_EXTI13_PE     AFIO_EXTICR4_EXTI13_PE_Msk            /*!< PE[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PF_Pos (4U)\r\n#define AFIO_EXTICR4_EXTI13_PF_Msk (0x5UL << AFIO_EXTICR4_EXTI13_PF_Pos) /*!< 0x00000050 */\r\n#define AFIO_EXTICR4_EXTI13_PF     AFIO_EXTICR4_EXTI13_PF_Msk            /*!< PF[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PG_Pos (5U)\r\n#define AFIO_EXTICR4_EXTI13_PG_Msk (0x3UL << AFIO_EXTICR4_EXTI13_PG_Pos) /*!< 0x00000060 */\r\n#define AFIO_EXTICR4_EXTI13_PG     AFIO_EXTICR4_EXTI13_PG_Msk            /*!< PG[13] pin */\r\n\r\n/*!< EXTI14 configuration */\r\n#define AFIO_EXTICR4_EXTI14_PA     0x00000000U /*!< PA[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PB_Pos (8U)\r\n#define AFIO_EXTICR4_EXTI14_PB_Msk (0x1UL << AFIO_EXTICR4_EXTI14_PB_Pos) /*!< 0x00000100 */\r\n#define AFIO_EXTICR4_EXTI14_PB     AFIO_EXTICR4_EXTI14_PB_Msk            /*!< PB[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PC_Pos (9U)\r\n#define AFIO_EXTICR4_EXTI14_PC_Msk (0x1UL << AFIO_EXTICR4_EXTI14_PC_Pos) /*!< 0x00000200 */\r\n#define AFIO_EXTICR4_EXTI14_PC     AFIO_EXTICR4_EXTI14_PC_Msk            /*!< PC[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PD_Pos (8U)\r\n#define AFIO_EXTICR4_EXTI14_PD_Msk (0x3UL << AFIO_EXTICR4_EXTI14_PD_Pos) /*!< 0x00000300 */\r\n#define AFIO_EXTICR4_EXTI14_PD     AFIO_EXTICR4_EXTI14_PD_Msk            /*!< PD[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PE_Pos (10U)\r\n#define AFIO_EXTICR4_EXTI14_PE_Msk (0x1UL << AFIO_EXTICR4_EXTI14_PE_Pos) /*!< 0x00000400 */\r\n#define AFIO_EXTICR4_EXTI14_PE     AFIO_EXTICR4_EXTI14_PE_Msk            /*!< PE[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PF_Pos (8U)\r\n#define AFIO_EXTICR4_EXTI14_PF_Msk (0x5UL << AFIO_EXTICR4_EXTI14_PF_Pos) /*!< 0x00000500 */\r\n#define AFIO_EXTICR4_EXTI14_PF     AFIO_EXTICR4_EXTI14_PF_Msk            /*!< PF[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PG_Pos (9U)\r\n#define AFIO_EXTICR4_EXTI14_PG_Msk (0x3UL << AFIO_EXTICR4_EXTI14_PG_Pos) /*!< 0x00000600 */\r\n#define AFIO_EXTICR4_EXTI14_PG     AFIO_EXTICR4_EXTI14_PG_Msk            /*!< PG[14] pin */\r\n\r\n/*!< EXTI15 configuration */\r\n#define AFIO_EXTICR4_EXTI15_PA     0x00000000U /*!< PA[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PB_Pos (12U)\r\n#define AFIO_EXTICR4_EXTI15_PB_Msk (0x1UL << AFIO_EXTICR4_EXTI15_PB_Pos) /*!< 0x00001000 */\r\n#define AFIO_EXTICR4_EXTI15_PB     AFIO_EXTICR4_EXTI15_PB_Msk            /*!< PB[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PC_Pos (13U)\r\n#define AFIO_EXTICR4_EXTI15_PC_Msk (0x1UL << AFIO_EXTICR4_EXTI15_PC_Pos) /*!< 0x00002000 */\r\n#define AFIO_EXTICR4_EXTI15_PC     AFIO_EXTICR4_EXTI15_PC_Msk            /*!< PC[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PD_Pos (12U)\r\n#define AFIO_EXTICR4_EXTI15_PD_Msk (0x3UL << AFIO_EXTICR4_EXTI15_PD_Pos) /*!< 0x00003000 */\r\n#define AFIO_EXTICR4_EXTI15_PD     AFIO_EXTICR4_EXTI15_PD_Msk            /*!< PD[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PE_Pos (14U)\r\n#define AFIO_EXTICR4_EXTI15_PE_Msk (0x1UL << AFIO_EXTICR4_EXTI15_PE_Pos) /*!< 0x00004000 */\r\n#define AFIO_EXTICR4_EXTI15_PE     AFIO_EXTICR4_EXTI15_PE_Msk            /*!< PE[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PF_Pos (12U)\r\n#define AFIO_EXTICR4_EXTI15_PF_Msk (0x5UL << AFIO_EXTICR4_EXTI15_PF_Pos) /*!< 0x00005000 */\r\n#define AFIO_EXTICR4_EXTI15_PF     AFIO_EXTICR4_EXTI15_PF_Msk            /*!< PF[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PG_Pos (13U)\r\n#define AFIO_EXTICR4_EXTI15_PG_Msk (0x3UL << AFIO_EXTICR4_EXTI15_PG_Pos) /*!< 0x00006000 */\r\n#define AFIO_EXTICR4_EXTI15_PG     AFIO_EXTICR4_EXTI15_PG_Msk            /*!< PG[15] pin */\r\n\r\n/******************  Bit definition for AFIO_MAPR2 register  ******************/\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                    External Interrupt/Event Controller                     */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for EXTI_IMR register  *******************/\r\n#define EXTI_IMR_MR0_Pos  (0U)\r\n#define EXTI_IMR_MR0_Msk  (0x1UL << EXTI_IMR_MR0_Pos) /*!< 0x00000001 */\r\n#define EXTI_IMR_MR0      EXTI_IMR_MR0_Msk            /*!< Interrupt Mask on line 0 */\r\n#define EXTI_IMR_MR1_Pos  (1U)\r\n#define EXTI_IMR_MR1_Msk  (0x1UL << EXTI_IMR_MR1_Pos) /*!< 0x00000002 */\r\n#define EXTI_IMR_MR1      EXTI_IMR_MR1_Msk            /*!< Interrupt Mask on line 1 */\r\n#define EXTI_IMR_MR2_Pos  (2U)\r\n#define EXTI_IMR_MR2_Msk  (0x1UL << EXTI_IMR_MR2_Pos) /*!< 0x00000004 */\r\n#define EXTI_IMR_MR2      EXTI_IMR_MR2_Msk            /*!< Interrupt Mask on line 2 */\r\n#define EXTI_IMR_MR3_Pos  (3U)\r\n#define EXTI_IMR_MR3_Msk  (0x1UL << EXTI_IMR_MR3_Pos) /*!< 0x00000008 */\r\n#define EXTI_IMR_MR3      EXTI_IMR_MR3_Msk            /*!< Interrupt Mask on line 3 */\r\n#define EXTI_IMR_MR4_Pos  (4U)\r\n#define EXTI_IMR_MR4_Msk  (0x1UL << EXTI_IMR_MR4_Pos) /*!< 0x00000010 */\r\n#define EXTI_IMR_MR4      EXTI_IMR_MR4_Msk            /*!< Interrupt Mask on line 4 */\r\n#define EXTI_IMR_MR5_Pos  (5U)\r\n#define EXTI_IMR_MR5_Msk  (0x1UL << EXTI_IMR_MR5_Pos) /*!< 0x00000020 */\r\n#define EXTI_IMR_MR5      EXTI_IMR_MR5_Msk            /*!< Interrupt Mask on line 5 */\r\n#define EXTI_IMR_MR6_Pos  (6U)\r\n#define EXTI_IMR_MR6_Msk  (0x1UL << EXTI_IMR_MR6_Pos) /*!< 0x00000040 */\r\n#define EXTI_IMR_MR6      EXTI_IMR_MR6_Msk            /*!< Interrupt Mask on line 6 */\r\n#define EXTI_IMR_MR7_Pos  (7U)\r\n#define EXTI_IMR_MR7_Msk  (0x1UL << EXTI_IMR_MR7_Pos) /*!< 0x00000080 */\r\n#define EXTI_IMR_MR7      EXTI_IMR_MR7_Msk            /*!< Interrupt Mask on line 7 */\r\n#define EXTI_IMR_MR8_Pos  (8U)\r\n#define EXTI_IMR_MR8_Msk  (0x1UL << EXTI_IMR_MR8_Pos) /*!< 0x00000100 */\r\n#define EXTI_IMR_MR8      EXTI_IMR_MR8_Msk            /*!< Interrupt Mask on line 8 */\r\n#define EXTI_IMR_MR9_Pos  (9U)\r\n#define EXTI_IMR_MR9_Msk  (0x1UL << EXTI_IMR_MR9_Pos) /*!< 0x00000200 */\r\n#define EXTI_IMR_MR9      EXTI_IMR_MR9_Msk            /*!< Interrupt Mask on line 9 */\r\n#define EXTI_IMR_MR10_Pos (10U)\r\n#define EXTI_IMR_MR10_Msk (0x1UL << EXTI_IMR_MR10_Pos) /*!< 0x00000400 */\r\n#define EXTI_IMR_MR10     EXTI_IMR_MR10_Msk            /*!< Interrupt Mask on line 10 */\r\n#define EXTI_IMR_MR11_Pos (11U)\r\n#define EXTI_IMR_MR11_Msk (0x1UL << EXTI_IMR_MR11_Pos) /*!< 0x00000800 */\r\n#define EXTI_IMR_MR11     EXTI_IMR_MR11_Msk            /*!< Interrupt Mask on line 11 */\r\n#define EXTI_IMR_MR12_Pos (12U)\r\n#define EXTI_IMR_MR12_Msk (0x1UL << EXTI_IMR_MR12_Pos) /*!< 0x00001000 */\r\n#define EXTI_IMR_MR12     EXTI_IMR_MR12_Msk            /*!< Interrupt Mask on line 12 */\r\n#define EXTI_IMR_MR13_Pos (13U)\r\n#define EXTI_IMR_MR13_Msk (0x1UL << EXTI_IMR_MR13_Pos) /*!< 0x00002000 */\r\n#define EXTI_IMR_MR13     EXTI_IMR_MR13_Msk            /*!< Interrupt Mask on line 13 */\r\n#define EXTI_IMR_MR14_Pos (14U)\r\n#define EXTI_IMR_MR14_Msk (0x1UL << EXTI_IMR_MR14_Pos) /*!< 0x00004000 */\r\n#define EXTI_IMR_MR14     EXTI_IMR_MR14_Msk            /*!< Interrupt Mask on line 14 */\r\n#define EXTI_IMR_MR15_Pos (15U)\r\n#define EXTI_IMR_MR15_Msk (0x1UL << EXTI_IMR_MR15_Pos) /*!< 0x00008000 */\r\n#define EXTI_IMR_MR15     EXTI_IMR_MR15_Msk            /*!< Interrupt Mask on line 15 */\r\n#define EXTI_IMR_MR16_Pos (16U)\r\n#define EXTI_IMR_MR16_Msk (0x1UL << EXTI_IMR_MR16_Pos) /*!< 0x00010000 */\r\n#define EXTI_IMR_MR16     EXTI_IMR_MR16_Msk            /*!< Interrupt Mask on line 16 */\r\n#define EXTI_IMR_MR17_Pos (17U)\r\n#define EXTI_IMR_MR17_Msk (0x1UL << EXTI_IMR_MR17_Pos) /*!< 0x00020000 */\r\n#define EXTI_IMR_MR17     EXTI_IMR_MR17_Msk            /*!< Interrupt Mask on line 17 */\r\n#define EXTI_IMR_MR18_Pos (18U)\r\n#define EXTI_IMR_MR18_Msk (0x1UL << EXTI_IMR_MR18_Pos) /*!< 0x00040000 */\r\n#define EXTI_IMR_MR18     EXTI_IMR_MR18_Msk            /*!< Interrupt Mask on line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_IMR_IM0  EXTI_IMR_MR0\r\n#define EXTI_IMR_IM1  EXTI_IMR_MR1\r\n#define EXTI_IMR_IM2  EXTI_IMR_MR2\r\n#define EXTI_IMR_IM3  EXTI_IMR_MR3\r\n#define EXTI_IMR_IM4  EXTI_IMR_MR4\r\n#define EXTI_IMR_IM5  EXTI_IMR_MR5\r\n#define EXTI_IMR_IM6  EXTI_IMR_MR6\r\n#define EXTI_IMR_IM7  EXTI_IMR_MR7\r\n#define EXTI_IMR_IM8  EXTI_IMR_MR8\r\n#define EXTI_IMR_IM9  EXTI_IMR_MR9\r\n#define EXTI_IMR_IM10 EXTI_IMR_MR10\r\n#define EXTI_IMR_IM11 EXTI_IMR_MR11\r\n#define EXTI_IMR_IM12 EXTI_IMR_MR12\r\n#define EXTI_IMR_IM13 EXTI_IMR_MR13\r\n#define EXTI_IMR_IM14 EXTI_IMR_MR14\r\n#define EXTI_IMR_IM15 EXTI_IMR_MR15\r\n#define EXTI_IMR_IM16 EXTI_IMR_MR16\r\n#define EXTI_IMR_IM17 EXTI_IMR_MR17\r\n#define EXTI_IMR_IM18 EXTI_IMR_MR18\r\n#define EXTI_IMR_IM   0x0007FFFFU /*!< Interrupt Mask All */\r\n\r\n/*******************  Bit definition for EXTI_EMR register  *******************/\r\n#define EXTI_EMR_MR0_Pos  (0U)\r\n#define EXTI_EMR_MR0_Msk  (0x1UL << EXTI_EMR_MR0_Pos) /*!< 0x00000001 */\r\n#define EXTI_EMR_MR0      EXTI_EMR_MR0_Msk            /*!< Event Mask on line 0 */\r\n#define EXTI_EMR_MR1_Pos  (1U)\r\n#define EXTI_EMR_MR1_Msk  (0x1UL << EXTI_EMR_MR1_Pos) /*!< 0x00000002 */\r\n#define EXTI_EMR_MR1      EXTI_EMR_MR1_Msk            /*!< Event Mask on line 1 */\r\n#define EXTI_EMR_MR2_Pos  (2U)\r\n#define EXTI_EMR_MR2_Msk  (0x1UL << EXTI_EMR_MR2_Pos) /*!< 0x00000004 */\r\n#define EXTI_EMR_MR2      EXTI_EMR_MR2_Msk            /*!< Event Mask on line 2 */\r\n#define EXTI_EMR_MR3_Pos  (3U)\r\n#define EXTI_EMR_MR3_Msk  (0x1UL << EXTI_EMR_MR3_Pos) /*!< 0x00000008 */\r\n#define EXTI_EMR_MR3      EXTI_EMR_MR3_Msk            /*!< Event Mask on line 3 */\r\n#define EXTI_EMR_MR4_Pos  (4U)\r\n#define EXTI_EMR_MR4_Msk  (0x1UL << EXTI_EMR_MR4_Pos) /*!< 0x00000010 */\r\n#define EXTI_EMR_MR4      EXTI_EMR_MR4_Msk            /*!< Event Mask on line 4 */\r\n#define EXTI_EMR_MR5_Pos  (5U)\r\n#define EXTI_EMR_MR5_Msk  (0x1UL << EXTI_EMR_MR5_Pos) /*!< 0x00000020 */\r\n#define EXTI_EMR_MR5      EXTI_EMR_MR5_Msk            /*!< Event Mask on line 5 */\r\n#define EXTI_EMR_MR6_Pos  (6U)\r\n#define EXTI_EMR_MR6_Msk  (0x1UL << EXTI_EMR_MR6_Pos) /*!< 0x00000040 */\r\n#define EXTI_EMR_MR6      EXTI_EMR_MR6_Msk            /*!< Event Mask on line 6 */\r\n#define EXTI_EMR_MR7_Pos  (7U)\r\n#define EXTI_EMR_MR7_Msk  (0x1UL << EXTI_EMR_MR7_Pos) /*!< 0x00000080 */\r\n#define EXTI_EMR_MR7      EXTI_EMR_MR7_Msk            /*!< Event Mask on line 7 */\r\n#define EXTI_EMR_MR8_Pos  (8U)\r\n#define EXTI_EMR_MR8_Msk  (0x1UL << EXTI_EMR_MR8_Pos) /*!< 0x00000100 */\r\n#define EXTI_EMR_MR8      EXTI_EMR_MR8_Msk            /*!< Event Mask on line 8 */\r\n#define EXTI_EMR_MR9_Pos  (9U)\r\n#define EXTI_EMR_MR9_Msk  (0x1UL << EXTI_EMR_MR9_Pos) /*!< 0x00000200 */\r\n#define EXTI_EMR_MR9      EXTI_EMR_MR9_Msk            /*!< Event Mask on line 9 */\r\n#define EXTI_EMR_MR10_Pos (10U)\r\n#define EXTI_EMR_MR10_Msk (0x1UL << EXTI_EMR_MR10_Pos) /*!< 0x00000400 */\r\n#define EXTI_EMR_MR10     EXTI_EMR_MR10_Msk            /*!< Event Mask on line 10 */\r\n#define EXTI_EMR_MR11_Pos (11U)\r\n#define EXTI_EMR_MR11_Msk (0x1UL << EXTI_EMR_MR11_Pos) /*!< 0x00000800 */\r\n#define EXTI_EMR_MR11     EXTI_EMR_MR11_Msk            /*!< Event Mask on line 11 */\r\n#define EXTI_EMR_MR12_Pos (12U)\r\n#define EXTI_EMR_MR12_Msk (0x1UL << EXTI_EMR_MR12_Pos) /*!< 0x00001000 */\r\n#define EXTI_EMR_MR12     EXTI_EMR_MR12_Msk            /*!< Event Mask on line 12 */\r\n#define EXTI_EMR_MR13_Pos (13U)\r\n#define EXTI_EMR_MR13_Msk (0x1UL << EXTI_EMR_MR13_Pos) /*!< 0x00002000 */\r\n#define EXTI_EMR_MR13     EXTI_EMR_MR13_Msk            /*!< Event Mask on line 13 */\r\n#define EXTI_EMR_MR14_Pos (14U)\r\n#define EXTI_EMR_MR14_Msk (0x1UL << EXTI_EMR_MR14_Pos) /*!< 0x00004000 */\r\n#define EXTI_EMR_MR14     EXTI_EMR_MR14_Msk            /*!< Event Mask on line 14 */\r\n#define EXTI_EMR_MR15_Pos (15U)\r\n#define EXTI_EMR_MR15_Msk (0x1UL << EXTI_EMR_MR15_Pos) /*!< 0x00008000 */\r\n#define EXTI_EMR_MR15     EXTI_EMR_MR15_Msk            /*!< Event Mask on line 15 */\r\n#define EXTI_EMR_MR16_Pos (16U)\r\n#define EXTI_EMR_MR16_Msk (0x1UL << EXTI_EMR_MR16_Pos) /*!< 0x00010000 */\r\n#define EXTI_EMR_MR16     EXTI_EMR_MR16_Msk            /*!< Event Mask on line 16 */\r\n#define EXTI_EMR_MR17_Pos (17U)\r\n#define EXTI_EMR_MR17_Msk (0x1UL << EXTI_EMR_MR17_Pos) /*!< 0x00020000 */\r\n#define EXTI_EMR_MR17     EXTI_EMR_MR17_Msk            /*!< Event Mask on line 17 */\r\n#define EXTI_EMR_MR18_Pos (18U)\r\n#define EXTI_EMR_MR18_Msk (0x1UL << EXTI_EMR_MR18_Pos) /*!< 0x00040000 */\r\n#define EXTI_EMR_MR18     EXTI_EMR_MR18_Msk            /*!< Event Mask on line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_EMR_EM0  EXTI_EMR_MR0\r\n#define EXTI_EMR_EM1  EXTI_EMR_MR1\r\n#define EXTI_EMR_EM2  EXTI_EMR_MR2\r\n#define EXTI_EMR_EM3  EXTI_EMR_MR3\r\n#define EXTI_EMR_EM4  EXTI_EMR_MR4\r\n#define EXTI_EMR_EM5  EXTI_EMR_MR5\r\n#define EXTI_EMR_EM6  EXTI_EMR_MR6\r\n#define EXTI_EMR_EM7  EXTI_EMR_MR7\r\n#define EXTI_EMR_EM8  EXTI_EMR_MR8\r\n#define EXTI_EMR_EM9  EXTI_EMR_MR9\r\n#define EXTI_EMR_EM10 EXTI_EMR_MR10\r\n#define EXTI_EMR_EM11 EXTI_EMR_MR11\r\n#define EXTI_EMR_EM12 EXTI_EMR_MR12\r\n#define EXTI_EMR_EM13 EXTI_EMR_MR13\r\n#define EXTI_EMR_EM14 EXTI_EMR_MR14\r\n#define EXTI_EMR_EM15 EXTI_EMR_MR15\r\n#define EXTI_EMR_EM16 EXTI_EMR_MR16\r\n#define EXTI_EMR_EM17 EXTI_EMR_MR17\r\n#define EXTI_EMR_EM18 EXTI_EMR_MR18\r\n\r\n/******************  Bit definition for EXTI_RTSR register  *******************/\r\n#define EXTI_RTSR_TR0_Pos  (0U)\r\n#define EXTI_RTSR_TR0_Msk  (0x1UL << EXTI_RTSR_TR0_Pos) /*!< 0x00000001 */\r\n#define EXTI_RTSR_TR0      EXTI_RTSR_TR0_Msk            /*!< Rising trigger event configuration bit of line 0 */\r\n#define EXTI_RTSR_TR1_Pos  (1U)\r\n#define EXTI_RTSR_TR1_Msk  (0x1UL << EXTI_RTSR_TR1_Pos) /*!< 0x00000002 */\r\n#define EXTI_RTSR_TR1      EXTI_RTSR_TR1_Msk            /*!< Rising trigger event configuration bit of line 1 */\r\n#define EXTI_RTSR_TR2_Pos  (2U)\r\n#define EXTI_RTSR_TR2_Msk  (0x1UL << EXTI_RTSR_TR2_Pos) /*!< 0x00000004 */\r\n#define EXTI_RTSR_TR2      EXTI_RTSR_TR2_Msk            /*!< Rising trigger event configuration bit of line 2 */\r\n#define EXTI_RTSR_TR3_Pos  (3U)\r\n#define EXTI_RTSR_TR3_Msk  (0x1UL << EXTI_RTSR_TR3_Pos) /*!< 0x00000008 */\r\n#define EXTI_RTSR_TR3      EXTI_RTSR_TR3_Msk            /*!< Rising trigger event configuration bit of line 3 */\r\n#define EXTI_RTSR_TR4_Pos  (4U)\r\n#define EXTI_RTSR_TR4_Msk  (0x1UL << EXTI_RTSR_TR4_Pos) /*!< 0x00000010 */\r\n#define EXTI_RTSR_TR4      EXTI_RTSR_TR4_Msk            /*!< Rising trigger event configuration bit of line 4 */\r\n#define EXTI_RTSR_TR5_Pos  (5U)\r\n#define EXTI_RTSR_TR5_Msk  (0x1UL << EXTI_RTSR_TR5_Pos) /*!< 0x00000020 */\r\n#define EXTI_RTSR_TR5      EXTI_RTSR_TR5_Msk            /*!< Rising trigger event configuration bit of line 5 */\r\n#define EXTI_RTSR_TR6_Pos  (6U)\r\n#define EXTI_RTSR_TR6_Msk  (0x1UL << EXTI_RTSR_TR6_Pos) /*!< 0x00000040 */\r\n#define EXTI_RTSR_TR6      EXTI_RTSR_TR6_Msk            /*!< Rising trigger event configuration bit of line 6 */\r\n#define EXTI_RTSR_TR7_Pos  (7U)\r\n#define EXTI_RTSR_TR7_Msk  (0x1UL << EXTI_RTSR_TR7_Pos) /*!< 0x00000080 */\r\n#define EXTI_RTSR_TR7      EXTI_RTSR_TR7_Msk            /*!< Rising trigger event configuration bit of line 7 */\r\n#define EXTI_RTSR_TR8_Pos  (8U)\r\n#define EXTI_RTSR_TR8_Msk  (0x1UL << EXTI_RTSR_TR8_Pos) /*!< 0x00000100 */\r\n#define EXTI_RTSR_TR8      EXTI_RTSR_TR8_Msk            /*!< Rising trigger event configuration bit of line 8 */\r\n#define EXTI_RTSR_TR9_Pos  (9U)\r\n#define EXTI_RTSR_TR9_Msk  (0x1UL << EXTI_RTSR_TR9_Pos) /*!< 0x00000200 */\r\n#define EXTI_RTSR_TR9      EXTI_RTSR_TR9_Msk            /*!< Rising trigger event configuration bit of line 9 */\r\n#define EXTI_RTSR_TR10_Pos (10U)\r\n#define EXTI_RTSR_TR10_Msk (0x1UL << EXTI_RTSR_TR10_Pos) /*!< 0x00000400 */\r\n#define EXTI_RTSR_TR10     EXTI_RTSR_TR10_Msk            /*!< Rising trigger event configuration bit of line 10 */\r\n#define EXTI_RTSR_TR11_Pos (11U)\r\n#define EXTI_RTSR_TR11_Msk (0x1UL << EXTI_RTSR_TR11_Pos) /*!< 0x00000800 */\r\n#define EXTI_RTSR_TR11     EXTI_RTSR_TR11_Msk            /*!< Rising trigger event configuration bit of line 11 */\r\n#define EXTI_RTSR_TR12_Pos (12U)\r\n#define EXTI_RTSR_TR12_Msk (0x1UL << EXTI_RTSR_TR12_Pos) /*!< 0x00001000 */\r\n#define EXTI_RTSR_TR12     EXTI_RTSR_TR12_Msk            /*!< Rising trigger event configuration bit of line 12 */\r\n#define EXTI_RTSR_TR13_Pos (13U)\r\n#define EXTI_RTSR_TR13_Msk (0x1UL << EXTI_RTSR_TR13_Pos) /*!< 0x00002000 */\r\n#define EXTI_RTSR_TR13     EXTI_RTSR_TR13_Msk            /*!< Rising trigger event configuration bit of line 13 */\r\n#define EXTI_RTSR_TR14_Pos (14U)\r\n#define EXTI_RTSR_TR14_Msk (0x1UL << EXTI_RTSR_TR14_Pos) /*!< 0x00004000 */\r\n#define EXTI_RTSR_TR14     EXTI_RTSR_TR14_Msk            /*!< Rising trigger event configuration bit of line 14 */\r\n#define EXTI_RTSR_TR15_Pos (15U)\r\n#define EXTI_RTSR_TR15_Msk (0x1UL << EXTI_RTSR_TR15_Pos) /*!< 0x00008000 */\r\n#define EXTI_RTSR_TR15     EXTI_RTSR_TR15_Msk            /*!< Rising trigger event configuration bit of line 15 */\r\n#define EXTI_RTSR_TR16_Pos (16U)\r\n#define EXTI_RTSR_TR16_Msk (0x1UL << EXTI_RTSR_TR16_Pos) /*!< 0x00010000 */\r\n#define EXTI_RTSR_TR16     EXTI_RTSR_TR16_Msk            /*!< Rising trigger event configuration bit of line 16 */\r\n#define EXTI_RTSR_TR17_Pos (17U)\r\n#define EXTI_RTSR_TR17_Msk (0x1UL << EXTI_RTSR_TR17_Pos) /*!< 0x00020000 */\r\n#define EXTI_RTSR_TR17     EXTI_RTSR_TR17_Msk            /*!< Rising trigger event configuration bit of line 17 */\r\n#define EXTI_RTSR_TR18_Pos (18U)\r\n#define EXTI_RTSR_TR18_Msk (0x1UL << EXTI_RTSR_TR18_Pos) /*!< 0x00040000 */\r\n#define EXTI_RTSR_TR18     EXTI_RTSR_TR18_Msk            /*!< Rising trigger event configuration bit of line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_RTSR_RT0  EXTI_RTSR_TR0\r\n#define EXTI_RTSR_RT1  EXTI_RTSR_TR1\r\n#define EXTI_RTSR_RT2  EXTI_RTSR_TR2\r\n#define EXTI_RTSR_RT3  EXTI_RTSR_TR3\r\n#define EXTI_RTSR_RT4  EXTI_RTSR_TR4\r\n#define EXTI_RTSR_RT5  EXTI_RTSR_TR5\r\n#define EXTI_RTSR_RT6  EXTI_RTSR_TR6\r\n#define EXTI_RTSR_RT7  EXTI_RTSR_TR7\r\n#define EXTI_RTSR_RT8  EXTI_RTSR_TR8\r\n#define EXTI_RTSR_RT9  EXTI_RTSR_TR9\r\n#define EXTI_RTSR_RT10 EXTI_RTSR_TR10\r\n#define EXTI_RTSR_RT11 EXTI_RTSR_TR11\r\n#define EXTI_RTSR_RT12 EXTI_RTSR_TR12\r\n#define EXTI_RTSR_RT13 EXTI_RTSR_TR13\r\n#define EXTI_RTSR_RT14 EXTI_RTSR_TR14\r\n#define EXTI_RTSR_RT15 EXTI_RTSR_TR15\r\n#define EXTI_RTSR_RT16 EXTI_RTSR_TR16\r\n#define EXTI_RTSR_RT17 EXTI_RTSR_TR17\r\n#define EXTI_RTSR_RT18 EXTI_RTSR_TR18\r\n\r\n/******************  Bit definition for EXTI_FTSR register  *******************/\r\n#define EXTI_FTSR_TR0_Pos  (0U)\r\n#define EXTI_FTSR_TR0_Msk  (0x1UL << EXTI_FTSR_TR0_Pos) /*!< 0x00000001 */\r\n#define EXTI_FTSR_TR0      EXTI_FTSR_TR0_Msk            /*!< Falling trigger event configuration bit of line 0 */\r\n#define EXTI_FTSR_TR1_Pos  (1U)\r\n#define EXTI_FTSR_TR1_Msk  (0x1UL << EXTI_FTSR_TR1_Pos) /*!< 0x00000002 */\r\n#define EXTI_FTSR_TR1      EXTI_FTSR_TR1_Msk            /*!< Falling trigger event configuration bit of line 1 */\r\n#define EXTI_FTSR_TR2_Pos  (2U)\r\n#define EXTI_FTSR_TR2_Msk  (0x1UL << EXTI_FTSR_TR2_Pos) /*!< 0x00000004 */\r\n#define EXTI_FTSR_TR2      EXTI_FTSR_TR2_Msk            /*!< Falling trigger event configuration bit of line 2 */\r\n#define EXTI_FTSR_TR3_Pos  (3U)\r\n#define EXTI_FTSR_TR3_Msk  (0x1UL << EXTI_FTSR_TR3_Pos) /*!< 0x00000008 */\r\n#define EXTI_FTSR_TR3      EXTI_FTSR_TR3_Msk            /*!< Falling trigger event configuration bit of line 3 */\r\n#define EXTI_FTSR_TR4_Pos  (4U)\r\n#define EXTI_FTSR_TR4_Msk  (0x1UL << EXTI_FTSR_TR4_Pos) /*!< 0x00000010 */\r\n#define EXTI_FTSR_TR4      EXTI_FTSR_TR4_Msk            /*!< Falling trigger event configuration bit of line 4 */\r\n#define EXTI_FTSR_TR5_Pos  (5U)\r\n#define EXTI_FTSR_TR5_Msk  (0x1UL << EXTI_FTSR_TR5_Pos) /*!< 0x00000020 */\r\n#define EXTI_FTSR_TR5      EXTI_FTSR_TR5_Msk            /*!< Falling trigger event configuration bit of line 5 */\r\n#define EXTI_FTSR_TR6_Pos  (6U)\r\n#define EXTI_FTSR_TR6_Msk  (0x1UL << EXTI_FTSR_TR6_Pos) /*!< 0x00000040 */\r\n#define EXTI_FTSR_TR6      EXTI_FTSR_TR6_Msk            /*!< Falling trigger event configuration bit of line 6 */\r\n#define EXTI_FTSR_TR7_Pos  (7U)\r\n#define EXTI_FTSR_TR7_Msk  (0x1UL << EXTI_FTSR_TR7_Pos) /*!< 0x00000080 */\r\n#define EXTI_FTSR_TR7      EXTI_FTSR_TR7_Msk            /*!< Falling trigger event configuration bit of line 7 */\r\n#define EXTI_FTSR_TR8_Pos  (8U)\r\n#define EXTI_FTSR_TR8_Msk  (0x1UL << EXTI_FTSR_TR8_Pos) /*!< 0x00000100 */\r\n#define EXTI_FTSR_TR8      EXTI_FTSR_TR8_Msk            /*!< Falling trigger event configuration bit of line 8 */\r\n#define EXTI_FTSR_TR9_Pos  (9U)\r\n#define EXTI_FTSR_TR9_Msk  (0x1UL << EXTI_FTSR_TR9_Pos) /*!< 0x00000200 */\r\n#define EXTI_FTSR_TR9      EXTI_FTSR_TR9_Msk            /*!< Falling trigger event configuration bit of line 9 */\r\n#define EXTI_FTSR_TR10_Pos (10U)\r\n#define EXTI_FTSR_TR10_Msk (0x1UL << EXTI_FTSR_TR10_Pos) /*!< 0x00000400 */\r\n#define EXTI_FTSR_TR10     EXTI_FTSR_TR10_Msk            /*!< Falling trigger event configuration bit of line 10 */\r\n#define EXTI_FTSR_TR11_Pos (11U)\r\n#define EXTI_FTSR_TR11_Msk (0x1UL << EXTI_FTSR_TR11_Pos) /*!< 0x00000800 */\r\n#define EXTI_FTSR_TR11     EXTI_FTSR_TR11_Msk            /*!< Falling trigger event configuration bit of line 11 */\r\n#define EXTI_FTSR_TR12_Pos (12U)\r\n#define EXTI_FTSR_TR12_Msk (0x1UL << EXTI_FTSR_TR12_Pos) /*!< 0x00001000 */\r\n#define EXTI_FTSR_TR12     EXTI_FTSR_TR12_Msk            /*!< Falling trigger event configuration bit of line 12 */\r\n#define EXTI_FTSR_TR13_Pos (13U)\r\n#define EXTI_FTSR_TR13_Msk (0x1UL << EXTI_FTSR_TR13_Pos) /*!< 0x00002000 */\r\n#define EXTI_FTSR_TR13     EXTI_FTSR_TR13_Msk            /*!< Falling trigger event configuration bit of line 13 */\r\n#define EXTI_FTSR_TR14_Pos (14U)\r\n#define EXTI_FTSR_TR14_Msk (0x1UL << EXTI_FTSR_TR14_Pos) /*!< 0x00004000 */\r\n#define EXTI_FTSR_TR14     EXTI_FTSR_TR14_Msk            /*!< Falling trigger event configuration bit of line 14 */\r\n#define EXTI_FTSR_TR15_Pos (15U)\r\n#define EXTI_FTSR_TR15_Msk (0x1UL << EXTI_FTSR_TR15_Pos) /*!< 0x00008000 */\r\n#define EXTI_FTSR_TR15     EXTI_FTSR_TR15_Msk            /*!< Falling trigger event configuration bit of line 15 */\r\n#define EXTI_FTSR_TR16_Pos (16U)\r\n#define EXTI_FTSR_TR16_Msk (0x1UL << EXTI_FTSR_TR16_Pos) /*!< 0x00010000 */\r\n#define EXTI_FTSR_TR16     EXTI_FTSR_TR16_Msk            /*!< Falling trigger event configuration bit of line 16 */\r\n#define EXTI_FTSR_TR17_Pos (17U)\r\n#define EXTI_FTSR_TR17_Msk (0x1UL << EXTI_FTSR_TR17_Pos) /*!< 0x00020000 */\r\n#define EXTI_FTSR_TR17     EXTI_FTSR_TR17_Msk            /*!< Falling trigger event configuration bit of line 17 */\r\n#define EXTI_FTSR_TR18_Pos (18U)\r\n#define EXTI_FTSR_TR18_Msk (0x1UL << EXTI_FTSR_TR18_Pos) /*!< 0x00040000 */\r\n#define EXTI_FTSR_TR18     EXTI_FTSR_TR18_Msk            /*!< Falling trigger event configuration bit of line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_FTSR_FT0  EXTI_FTSR_TR0\r\n#define EXTI_FTSR_FT1  EXTI_FTSR_TR1\r\n#define EXTI_FTSR_FT2  EXTI_FTSR_TR2\r\n#define EXTI_FTSR_FT3  EXTI_FTSR_TR3\r\n#define EXTI_FTSR_FT4  EXTI_FTSR_TR4\r\n#define EXTI_FTSR_FT5  EXTI_FTSR_TR5\r\n#define EXTI_FTSR_FT6  EXTI_FTSR_TR6\r\n#define EXTI_FTSR_FT7  EXTI_FTSR_TR7\r\n#define EXTI_FTSR_FT8  EXTI_FTSR_TR8\r\n#define EXTI_FTSR_FT9  EXTI_FTSR_TR9\r\n#define EXTI_FTSR_FT10 EXTI_FTSR_TR10\r\n#define EXTI_FTSR_FT11 EXTI_FTSR_TR11\r\n#define EXTI_FTSR_FT12 EXTI_FTSR_TR12\r\n#define EXTI_FTSR_FT13 EXTI_FTSR_TR13\r\n#define EXTI_FTSR_FT14 EXTI_FTSR_TR14\r\n#define EXTI_FTSR_FT15 EXTI_FTSR_TR15\r\n#define EXTI_FTSR_FT16 EXTI_FTSR_TR16\r\n#define EXTI_FTSR_FT17 EXTI_FTSR_TR17\r\n#define EXTI_FTSR_FT18 EXTI_FTSR_TR18\r\n\r\n/******************  Bit definition for EXTI_SWIER register  ******************/\r\n#define EXTI_SWIER_SWIER0_Pos  (0U)\r\n#define EXTI_SWIER_SWIER0_Msk  (0x1UL << EXTI_SWIER_SWIER0_Pos) /*!< 0x00000001 */\r\n#define EXTI_SWIER_SWIER0      EXTI_SWIER_SWIER0_Msk            /*!< Software Interrupt on line 0 */\r\n#define EXTI_SWIER_SWIER1_Pos  (1U)\r\n#define EXTI_SWIER_SWIER1_Msk  (0x1UL << EXTI_SWIER_SWIER1_Pos) /*!< 0x00000002 */\r\n#define EXTI_SWIER_SWIER1      EXTI_SWIER_SWIER1_Msk            /*!< Software Interrupt on line 1 */\r\n#define EXTI_SWIER_SWIER2_Pos  (2U)\r\n#define EXTI_SWIER_SWIER2_Msk  (0x1UL << EXTI_SWIER_SWIER2_Pos) /*!< 0x00000004 */\r\n#define EXTI_SWIER_SWIER2      EXTI_SWIER_SWIER2_Msk            /*!< Software Interrupt on line 2 */\r\n#define EXTI_SWIER_SWIER3_Pos  (3U)\r\n#define EXTI_SWIER_SWIER3_Msk  (0x1UL << EXTI_SWIER_SWIER3_Pos) /*!< 0x00000008 */\r\n#define EXTI_SWIER_SWIER3      EXTI_SWIER_SWIER3_Msk            /*!< Software Interrupt on line 3 */\r\n#define EXTI_SWIER_SWIER4_Pos  (4U)\r\n#define EXTI_SWIER_SWIER4_Msk  (0x1UL << EXTI_SWIER_SWIER4_Pos) /*!< 0x00000010 */\r\n#define EXTI_SWIER_SWIER4      EXTI_SWIER_SWIER4_Msk            /*!< Software Interrupt on line 4 */\r\n#define EXTI_SWIER_SWIER5_Pos  (5U)\r\n#define EXTI_SWIER_SWIER5_Msk  (0x1UL << EXTI_SWIER_SWIER5_Pos) /*!< 0x00000020 */\r\n#define EXTI_SWIER_SWIER5      EXTI_SWIER_SWIER5_Msk            /*!< Software Interrupt on line 5 */\r\n#define EXTI_SWIER_SWIER6_Pos  (6U)\r\n#define EXTI_SWIER_SWIER6_Msk  (0x1UL << EXTI_SWIER_SWIER6_Pos) /*!< 0x00000040 */\r\n#define EXTI_SWIER_SWIER6      EXTI_SWIER_SWIER6_Msk            /*!< Software Interrupt on line 6 */\r\n#define EXTI_SWIER_SWIER7_Pos  (7U)\r\n#define EXTI_SWIER_SWIER7_Msk  (0x1UL << EXTI_SWIER_SWIER7_Pos) /*!< 0x00000080 */\r\n#define EXTI_SWIER_SWIER7      EXTI_SWIER_SWIER7_Msk            /*!< Software Interrupt on line 7 */\r\n#define EXTI_SWIER_SWIER8_Pos  (8U)\r\n#define EXTI_SWIER_SWIER8_Msk  (0x1UL << EXTI_SWIER_SWIER8_Pos) /*!< 0x00000100 */\r\n#define EXTI_SWIER_SWIER8      EXTI_SWIER_SWIER8_Msk            /*!< Software Interrupt on line 8 */\r\n#define EXTI_SWIER_SWIER9_Pos  (9U)\r\n#define EXTI_SWIER_SWIER9_Msk  (0x1UL << EXTI_SWIER_SWIER9_Pos) /*!< 0x00000200 */\r\n#define EXTI_SWIER_SWIER9      EXTI_SWIER_SWIER9_Msk            /*!< Software Interrupt on line 9 */\r\n#define EXTI_SWIER_SWIER10_Pos (10U)\r\n#define EXTI_SWIER_SWIER10_Msk (0x1UL << EXTI_SWIER_SWIER10_Pos) /*!< 0x00000400 */\r\n#define EXTI_SWIER_SWIER10     EXTI_SWIER_SWIER10_Msk            /*!< Software Interrupt on line 10 */\r\n#define EXTI_SWIER_SWIER11_Pos (11U)\r\n#define EXTI_SWIER_SWIER11_Msk (0x1UL << EXTI_SWIER_SWIER11_Pos) /*!< 0x00000800 */\r\n#define EXTI_SWIER_SWIER11     EXTI_SWIER_SWIER11_Msk            /*!< Software Interrupt on line 11 */\r\n#define EXTI_SWIER_SWIER12_Pos (12U)\r\n#define EXTI_SWIER_SWIER12_Msk (0x1UL << EXTI_SWIER_SWIER12_Pos) /*!< 0x00001000 */\r\n#define EXTI_SWIER_SWIER12     EXTI_SWIER_SWIER12_Msk            /*!< Software Interrupt on line 12 */\r\n#define EXTI_SWIER_SWIER13_Pos (13U)\r\n#define EXTI_SWIER_SWIER13_Msk (0x1UL << EXTI_SWIER_SWIER13_Pos) /*!< 0x00002000 */\r\n#define EXTI_SWIER_SWIER13     EXTI_SWIER_SWIER13_Msk            /*!< Software Interrupt on line 13 */\r\n#define EXTI_SWIER_SWIER14_Pos (14U)\r\n#define EXTI_SWIER_SWIER14_Msk (0x1UL << EXTI_SWIER_SWIER14_Pos) /*!< 0x00004000 */\r\n#define EXTI_SWIER_SWIER14     EXTI_SWIER_SWIER14_Msk            /*!< Software Interrupt on line 14 */\r\n#define EXTI_SWIER_SWIER15_Pos (15U)\r\n#define EXTI_SWIER_SWIER15_Msk (0x1UL << EXTI_SWIER_SWIER15_Pos) /*!< 0x00008000 */\r\n#define EXTI_SWIER_SWIER15     EXTI_SWIER_SWIER15_Msk            /*!< Software Interrupt on line 15 */\r\n#define EXTI_SWIER_SWIER16_Pos (16U)\r\n#define EXTI_SWIER_SWIER16_Msk (0x1UL << EXTI_SWIER_SWIER16_Pos) /*!< 0x00010000 */\r\n#define EXTI_SWIER_SWIER16     EXTI_SWIER_SWIER16_Msk            /*!< Software Interrupt on line 16 */\r\n#define EXTI_SWIER_SWIER17_Pos (17U)\r\n#define EXTI_SWIER_SWIER17_Msk (0x1UL << EXTI_SWIER_SWIER17_Pos) /*!< 0x00020000 */\r\n#define EXTI_SWIER_SWIER17     EXTI_SWIER_SWIER17_Msk            /*!< Software Interrupt on line 17 */\r\n#define EXTI_SWIER_SWIER18_Pos (18U)\r\n#define EXTI_SWIER_SWIER18_Msk (0x1UL << EXTI_SWIER_SWIER18_Pos) /*!< 0x00040000 */\r\n#define EXTI_SWIER_SWIER18     EXTI_SWIER_SWIER18_Msk            /*!< Software Interrupt on line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_SWIER_SWI0  EXTI_SWIER_SWIER0\r\n#define EXTI_SWIER_SWI1  EXTI_SWIER_SWIER1\r\n#define EXTI_SWIER_SWI2  EXTI_SWIER_SWIER2\r\n#define EXTI_SWIER_SWI3  EXTI_SWIER_SWIER3\r\n#define EXTI_SWIER_SWI4  EXTI_SWIER_SWIER4\r\n#define EXTI_SWIER_SWI5  EXTI_SWIER_SWIER5\r\n#define EXTI_SWIER_SWI6  EXTI_SWIER_SWIER6\r\n#define EXTI_SWIER_SWI7  EXTI_SWIER_SWIER7\r\n#define EXTI_SWIER_SWI8  EXTI_SWIER_SWIER8\r\n#define EXTI_SWIER_SWI9  EXTI_SWIER_SWIER9\r\n#define EXTI_SWIER_SWI10 EXTI_SWIER_SWIER10\r\n#define EXTI_SWIER_SWI11 EXTI_SWIER_SWIER11\r\n#define EXTI_SWIER_SWI12 EXTI_SWIER_SWIER12\r\n#define EXTI_SWIER_SWI13 EXTI_SWIER_SWIER13\r\n#define EXTI_SWIER_SWI14 EXTI_SWIER_SWIER14\r\n#define EXTI_SWIER_SWI15 EXTI_SWIER_SWIER15\r\n#define EXTI_SWIER_SWI16 EXTI_SWIER_SWIER16\r\n#define EXTI_SWIER_SWI17 EXTI_SWIER_SWIER17\r\n#define EXTI_SWIER_SWI18 EXTI_SWIER_SWIER18\r\n\r\n/*******************  Bit definition for EXTI_PR register  ********************/\r\n#define EXTI_PR_PR0_Pos  (0U)\r\n#define EXTI_PR_PR0_Msk  (0x1UL << EXTI_PR_PR0_Pos) /*!< 0x00000001 */\r\n#define EXTI_PR_PR0      EXTI_PR_PR0_Msk            /*!< Pending bit for line 0 */\r\n#define EXTI_PR_PR1_Pos  (1U)\r\n#define EXTI_PR_PR1_Msk  (0x1UL << EXTI_PR_PR1_Pos) /*!< 0x00000002 */\r\n#define EXTI_PR_PR1      EXTI_PR_PR1_Msk            /*!< Pending bit for line 1 */\r\n#define EXTI_PR_PR2_Pos  (2U)\r\n#define EXTI_PR_PR2_Msk  (0x1UL << EXTI_PR_PR2_Pos) /*!< 0x00000004 */\r\n#define EXTI_PR_PR2      EXTI_PR_PR2_Msk            /*!< Pending bit for line 2 */\r\n#define EXTI_PR_PR3_Pos  (3U)\r\n#define EXTI_PR_PR3_Msk  (0x1UL << EXTI_PR_PR3_Pos) /*!< 0x00000008 */\r\n#define EXTI_PR_PR3      EXTI_PR_PR3_Msk            /*!< Pending bit for line 3 */\r\n#define EXTI_PR_PR4_Pos  (4U)\r\n#define EXTI_PR_PR4_Msk  (0x1UL << EXTI_PR_PR4_Pos) /*!< 0x00000010 */\r\n#define EXTI_PR_PR4      EXTI_PR_PR4_Msk            /*!< Pending bit for line 4 */\r\n#define EXTI_PR_PR5_Pos  (5U)\r\n#define EXTI_PR_PR5_Msk  (0x1UL << EXTI_PR_PR5_Pos) /*!< 0x00000020 */\r\n#define EXTI_PR_PR5      EXTI_PR_PR5_Msk            /*!< Pending bit for line 5 */\r\n#define EXTI_PR_PR6_Pos  (6U)\r\n#define EXTI_PR_PR6_Msk  (0x1UL << EXTI_PR_PR6_Pos) /*!< 0x00000040 */\r\n#define EXTI_PR_PR6      EXTI_PR_PR6_Msk            /*!< Pending bit for line 6 */\r\n#define EXTI_PR_PR7_Pos  (7U)\r\n#define EXTI_PR_PR7_Msk  (0x1UL << EXTI_PR_PR7_Pos) /*!< 0x00000080 */\r\n#define EXTI_PR_PR7      EXTI_PR_PR7_Msk            /*!< Pending bit for line 7 */\r\n#define EXTI_PR_PR8_Pos  (8U)\r\n#define EXTI_PR_PR8_Msk  (0x1UL << EXTI_PR_PR8_Pos) /*!< 0x00000100 */\r\n#define EXTI_PR_PR8      EXTI_PR_PR8_Msk            /*!< Pending bit for line 8 */\r\n#define EXTI_PR_PR9_Pos  (9U)\r\n#define EXTI_PR_PR9_Msk  (0x1UL << EXTI_PR_PR9_Pos) /*!< 0x00000200 */\r\n#define EXTI_PR_PR9      EXTI_PR_PR9_Msk            /*!< Pending bit for line 9 */\r\n#define EXTI_PR_PR10_Pos (10U)\r\n#define EXTI_PR_PR10_Msk (0x1UL << EXTI_PR_PR10_Pos) /*!< 0x00000400 */\r\n#define EXTI_PR_PR10     EXTI_PR_PR10_Msk            /*!< Pending bit for line 10 */\r\n#define EXTI_PR_PR11_Pos (11U)\r\n#define EXTI_PR_PR11_Msk (0x1UL << EXTI_PR_PR11_Pos) /*!< 0x00000800 */\r\n#define EXTI_PR_PR11     EXTI_PR_PR11_Msk            /*!< Pending bit for line 11 */\r\n#define EXTI_PR_PR12_Pos (12U)\r\n#define EXTI_PR_PR12_Msk (0x1UL << EXTI_PR_PR12_Pos) /*!< 0x00001000 */\r\n#define EXTI_PR_PR12     EXTI_PR_PR12_Msk            /*!< Pending bit for line 12 */\r\n#define EXTI_PR_PR13_Pos (13U)\r\n#define EXTI_PR_PR13_Msk (0x1UL << EXTI_PR_PR13_Pos) /*!< 0x00002000 */\r\n#define EXTI_PR_PR13     EXTI_PR_PR13_Msk            /*!< Pending bit for line 13 */\r\n#define EXTI_PR_PR14_Pos (14U)\r\n#define EXTI_PR_PR14_Msk (0x1UL << EXTI_PR_PR14_Pos) /*!< 0x00004000 */\r\n#define EXTI_PR_PR14     EXTI_PR_PR14_Msk            /*!< Pending bit for line 14 */\r\n#define EXTI_PR_PR15_Pos (15U)\r\n#define EXTI_PR_PR15_Msk (0x1UL << EXTI_PR_PR15_Pos) /*!< 0x00008000 */\r\n#define EXTI_PR_PR15     EXTI_PR_PR15_Msk            /*!< Pending bit for line 15 */\r\n#define EXTI_PR_PR16_Pos (16U)\r\n#define EXTI_PR_PR16_Msk (0x1UL << EXTI_PR_PR16_Pos) /*!< 0x00010000 */\r\n#define EXTI_PR_PR16     EXTI_PR_PR16_Msk            /*!< Pending bit for line 16 */\r\n#define EXTI_PR_PR17_Pos (17U)\r\n#define EXTI_PR_PR17_Msk (0x1UL << EXTI_PR_PR17_Pos) /*!< 0x00020000 */\r\n#define EXTI_PR_PR17     EXTI_PR_PR17_Msk            /*!< Pending bit for line 17 */\r\n#define EXTI_PR_PR18_Pos (18U)\r\n#define EXTI_PR_PR18_Msk (0x1UL << EXTI_PR_PR18_Pos) /*!< 0x00040000 */\r\n#define EXTI_PR_PR18     EXTI_PR_PR18_Msk            /*!< Pending bit for line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_PR_PIF0  EXTI_PR_PR0\r\n#define EXTI_PR_PIF1  EXTI_PR_PR1\r\n#define EXTI_PR_PIF2  EXTI_PR_PR2\r\n#define EXTI_PR_PIF3  EXTI_PR_PR3\r\n#define EXTI_PR_PIF4  EXTI_PR_PR4\r\n#define EXTI_PR_PIF5  EXTI_PR_PR5\r\n#define EXTI_PR_PIF6  EXTI_PR_PR6\r\n#define EXTI_PR_PIF7  EXTI_PR_PR7\r\n#define EXTI_PR_PIF8  EXTI_PR_PR8\r\n#define EXTI_PR_PIF9  EXTI_PR_PR9\r\n#define EXTI_PR_PIF10 EXTI_PR_PR10\r\n#define EXTI_PR_PIF11 EXTI_PR_PR11\r\n#define EXTI_PR_PIF12 EXTI_PR_PR12\r\n#define EXTI_PR_PIF13 EXTI_PR_PR13\r\n#define EXTI_PR_PIF14 EXTI_PR_PR14\r\n#define EXTI_PR_PIF15 EXTI_PR_PR15\r\n#define EXTI_PR_PIF16 EXTI_PR_PR16\r\n#define EXTI_PR_PIF17 EXTI_PR_PR17\r\n#define EXTI_PR_PIF18 EXTI_PR_PR18\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                             DMA Controller                                 */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for DMA_ISR register  ********************/\r\n#define DMA_ISR_GIF1_Pos  (0U)\r\n#define DMA_ISR_GIF1_Msk  (0x1UL << DMA_ISR_GIF1_Pos) /*!< 0x00000001 */\r\n#define DMA_ISR_GIF1      DMA_ISR_GIF1_Msk            /*!< Channel 1 Global interrupt flag */\r\n#define DMA_ISR_TCIF1_Pos (1U)\r\n#define DMA_ISR_TCIF1_Msk (0x1UL << DMA_ISR_TCIF1_Pos) /*!< 0x00000002 */\r\n#define DMA_ISR_TCIF1     DMA_ISR_TCIF1_Msk            /*!< Channel 1 Transfer Complete flag */\r\n#define DMA_ISR_HTIF1_Pos (2U)\r\n#define DMA_ISR_HTIF1_Msk (0x1UL << DMA_ISR_HTIF1_Pos) /*!< 0x00000004 */\r\n#define DMA_ISR_HTIF1     DMA_ISR_HTIF1_Msk            /*!< Channel 1 Half Transfer flag */\r\n#define DMA_ISR_TEIF1_Pos (3U)\r\n#define DMA_ISR_TEIF1_Msk (0x1UL << DMA_ISR_TEIF1_Pos) /*!< 0x00000008 */\r\n#define DMA_ISR_TEIF1     DMA_ISR_TEIF1_Msk            /*!< Channel 1 Transfer Error flag */\r\n#define DMA_ISR_GIF2_Pos  (4U)\r\n#define DMA_ISR_GIF2_Msk  (0x1UL << DMA_ISR_GIF2_Pos) /*!< 0x00000010 */\r\n#define DMA_ISR_GIF2      DMA_ISR_GIF2_Msk            /*!< Channel 2 Global interrupt flag */\r\n#define DMA_ISR_TCIF2_Pos (5U)\r\n#define DMA_ISR_TCIF2_Msk (0x1UL << DMA_ISR_TCIF2_Pos) /*!< 0x00000020 */\r\n#define DMA_ISR_TCIF2     DMA_ISR_TCIF2_Msk            /*!< Channel 2 Transfer Complete flag */\r\n#define DMA_ISR_HTIF2_Pos (6U)\r\n#define DMA_ISR_HTIF2_Msk (0x1UL << DMA_ISR_HTIF2_Pos) /*!< 0x00000040 */\r\n#define DMA_ISR_HTIF2     DMA_ISR_HTIF2_Msk            /*!< Channel 2 Half Transfer flag */\r\n#define DMA_ISR_TEIF2_Pos (7U)\r\n#define DMA_ISR_TEIF2_Msk (0x1UL << DMA_ISR_TEIF2_Pos) /*!< 0x00000080 */\r\n#define DMA_ISR_TEIF2     DMA_ISR_TEIF2_Msk            /*!< Channel 2 Transfer Error flag */\r\n#define DMA_ISR_GIF3_Pos  (8U)\r\n#define DMA_ISR_GIF3_Msk  (0x1UL << DMA_ISR_GIF3_Pos) /*!< 0x00000100 */\r\n#define DMA_ISR_GIF3      DMA_ISR_GIF3_Msk            /*!< Channel 3 Global interrupt flag */\r\n#define DMA_ISR_TCIF3_Pos (9U)\r\n#define DMA_ISR_TCIF3_Msk (0x1UL << DMA_ISR_TCIF3_Pos) /*!< 0x00000200 */\r\n#define DMA_ISR_TCIF3     DMA_ISR_TCIF3_Msk            /*!< Channel 3 Transfer Complete flag */\r\n#define DMA_ISR_HTIF3_Pos (10U)\r\n#define DMA_ISR_HTIF3_Msk (0x1UL << DMA_ISR_HTIF3_Pos) /*!< 0x00000400 */\r\n#define DMA_ISR_HTIF3     DMA_ISR_HTIF3_Msk            /*!< Channel 3 Half Transfer flag */\r\n#define DMA_ISR_TEIF3_Pos (11U)\r\n#define DMA_ISR_TEIF3_Msk (0x1UL << DMA_ISR_TEIF3_Pos) /*!< 0x00000800 */\r\n#define DMA_ISR_TEIF3     DMA_ISR_TEIF3_Msk            /*!< Channel 3 Transfer Error flag */\r\n#define DMA_ISR_GIF4_Pos  (12U)\r\n#define DMA_ISR_GIF4_Msk  (0x1UL << DMA_ISR_GIF4_Pos) /*!< 0x00001000 */\r\n#define DMA_ISR_GIF4      DMA_ISR_GIF4_Msk            /*!< Channel 4 Global interrupt flag */\r\n#define DMA_ISR_TCIF4_Pos (13U)\r\n#define DMA_ISR_TCIF4_Msk (0x1UL << DMA_ISR_TCIF4_Pos) /*!< 0x00002000 */\r\n#define DMA_ISR_TCIF4     DMA_ISR_TCIF4_Msk            /*!< Channel 4 Transfer Complete flag */\r\n#define DMA_ISR_HTIF4_Pos (14U)\r\n#define DMA_ISR_HTIF4_Msk (0x1UL << DMA_ISR_HTIF4_Pos) /*!< 0x00004000 */\r\n#define DMA_ISR_HTIF4     DMA_ISR_HTIF4_Msk            /*!< Channel 4 Half Transfer flag */\r\n#define DMA_ISR_TEIF4_Pos (15U)\r\n#define DMA_ISR_TEIF4_Msk (0x1UL << DMA_ISR_TEIF4_Pos) /*!< 0x00008000 */\r\n#define DMA_ISR_TEIF4     DMA_ISR_TEIF4_Msk            /*!< Channel 4 Transfer Error flag */\r\n#define DMA_ISR_GIF5_Pos  (16U)\r\n#define DMA_ISR_GIF5_Msk  (0x1UL << DMA_ISR_GIF5_Pos) /*!< 0x00010000 */\r\n#define DMA_ISR_GIF5      DMA_ISR_GIF5_Msk            /*!< Channel 5 Global interrupt flag */\r\n#define DMA_ISR_TCIF5_Pos (17U)\r\n#define DMA_ISR_TCIF5_Msk (0x1UL << DMA_ISR_TCIF5_Pos) /*!< 0x00020000 */\r\n#define DMA_ISR_TCIF5     DMA_ISR_TCIF5_Msk            /*!< Channel 5 Transfer Complete flag */\r\n#define DMA_ISR_HTIF5_Pos (18U)\r\n#define DMA_ISR_HTIF5_Msk (0x1UL << DMA_ISR_HTIF5_Pos) /*!< 0x00040000 */\r\n#define DMA_ISR_HTIF5     DMA_ISR_HTIF5_Msk            /*!< Channel 5 Half Transfer flag */\r\n#define DMA_ISR_TEIF5_Pos (19U)\r\n#define DMA_ISR_TEIF5_Msk (0x1UL << DMA_ISR_TEIF5_Pos) /*!< 0x00080000 */\r\n#define DMA_ISR_TEIF5     DMA_ISR_TEIF5_Msk            /*!< Channel 5 Transfer Error flag */\r\n#define DMA_ISR_GIF6_Pos  (20U)\r\n#define DMA_ISR_GIF6_Msk  (0x1UL << DMA_ISR_GIF6_Pos) /*!< 0x00100000 */\r\n#define DMA_ISR_GIF6      DMA_ISR_GIF6_Msk            /*!< Channel 6 Global interrupt flag */\r\n#define DMA_ISR_TCIF6_Pos (21U)\r\n#define DMA_ISR_TCIF6_Msk (0x1UL << DMA_ISR_TCIF6_Pos) /*!< 0x00200000 */\r\n#define DMA_ISR_TCIF6     DMA_ISR_TCIF6_Msk            /*!< Channel 6 Transfer Complete flag */\r\n#define DMA_ISR_HTIF6_Pos (22U)\r\n#define DMA_ISR_HTIF6_Msk (0x1UL << DMA_ISR_HTIF6_Pos) /*!< 0x00400000 */\r\n#define DMA_ISR_HTIF6     DMA_ISR_HTIF6_Msk            /*!< Channel 6 Half Transfer flag */\r\n#define DMA_ISR_TEIF6_Pos (23U)\r\n#define DMA_ISR_TEIF6_Msk (0x1UL << DMA_ISR_TEIF6_Pos) /*!< 0x00800000 */\r\n#define DMA_ISR_TEIF6     DMA_ISR_TEIF6_Msk            /*!< Channel 6 Transfer Error flag */\r\n#define DMA_ISR_GIF7_Pos  (24U)\r\n#define DMA_ISR_GIF7_Msk  (0x1UL << DMA_ISR_GIF7_Pos) /*!< 0x01000000 */\r\n#define DMA_ISR_GIF7      DMA_ISR_GIF7_Msk            /*!< Channel 7 Global interrupt flag */\r\n#define DMA_ISR_TCIF7_Pos (25U)\r\n#define DMA_ISR_TCIF7_Msk (0x1UL << DMA_ISR_TCIF7_Pos) /*!< 0x02000000 */\r\n#define DMA_ISR_TCIF7     DMA_ISR_TCIF7_Msk            /*!< Channel 7 Transfer Complete flag */\r\n#define DMA_ISR_HTIF7_Pos (26U)\r\n#define DMA_ISR_HTIF7_Msk (0x1UL << DMA_ISR_HTIF7_Pos) /*!< 0x04000000 */\r\n#define DMA_ISR_HTIF7     DMA_ISR_HTIF7_Msk            /*!< Channel 7 Half Transfer flag */\r\n#define DMA_ISR_TEIF7_Pos (27U)\r\n#define DMA_ISR_TEIF7_Msk (0x1UL << DMA_ISR_TEIF7_Pos) /*!< 0x08000000 */\r\n#define DMA_ISR_TEIF7     DMA_ISR_TEIF7_Msk            /*!< Channel 7 Transfer Error flag */\r\n\r\n/*******************  Bit definition for DMA_IFCR register  *******************/\r\n#define DMA_IFCR_CGIF1_Pos  (0U)\r\n#define DMA_IFCR_CGIF1_Msk  (0x1UL << DMA_IFCR_CGIF1_Pos) /*!< 0x00000001 */\r\n#define DMA_IFCR_CGIF1      DMA_IFCR_CGIF1_Msk            /*!< Channel 1 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF1_Pos (1U)\r\n#define DMA_IFCR_CTCIF1_Msk (0x1UL << DMA_IFCR_CTCIF1_Pos) /*!< 0x00000002 */\r\n#define DMA_IFCR_CTCIF1     DMA_IFCR_CTCIF1_Msk            /*!< Channel 1 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF1_Pos (2U)\r\n#define DMA_IFCR_CHTIF1_Msk (0x1UL << DMA_IFCR_CHTIF1_Pos) /*!< 0x00000004 */\r\n#define DMA_IFCR_CHTIF1     DMA_IFCR_CHTIF1_Msk            /*!< Channel 1 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF1_Pos (3U)\r\n#define DMA_IFCR_CTEIF1_Msk (0x1UL << DMA_IFCR_CTEIF1_Pos) /*!< 0x00000008 */\r\n#define DMA_IFCR_CTEIF1     DMA_IFCR_CTEIF1_Msk            /*!< Channel 1 Transfer Error clear */\r\n#define DMA_IFCR_CGIF2_Pos  (4U)\r\n#define DMA_IFCR_CGIF2_Msk  (0x1UL << DMA_IFCR_CGIF2_Pos) /*!< 0x00000010 */\r\n#define DMA_IFCR_CGIF2      DMA_IFCR_CGIF2_Msk            /*!< Channel 2 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF2_Pos (5U)\r\n#define DMA_IFCR_CTCIF2_Msk (0x1UL << DMA_IFCR_CTCIF2_Pos) /*!< 0x00000020 */\r\n#define DMA_IFCR_CTCIF2     DMA_IFCR_CTCIF2_Msk            /*!< Channel 2 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF2_Pos (6U)\r\n#define DMA_IFCR_CHTIF2_Msk (0x1UL << DMA_IFCR_CHTIF2_Pos) /*!< 0x00000040 */\r\n#define DMA_IFCR_CHTIF2     DMA_IFCR_CHTIF2_Msk            /*!< Channel 2 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF2_Pos (7U)\r\n#define DMA_IFCR_CTEIF2_Msk (0x1UL << DMA_IFCR_CTEIF2_Pos) /*!< 0x00000080 */\r\n#define DMA_IFCR_CTEIF2     DMA_IFCR_CTEIF2_Msk            /*!< Channel 2 Transfer Error clear */\r\n#define DMA_IFCR_CGIF3_Pos  (8U)\r\n#define DMA_IFCR_CGIF3_Msk  (0x1UL << DMA_IFCR_CGIF3_Pos) /*!< 0x00000100 */\r\n#define DMA_IFCR_CGIF3      DMA_IFCR_CGIF3_Msk            /*!< Channel 3 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF3_Pos (9U)\r\n#define DMA_IFCR_CTCIF3_Msk (0x1UL << DMA_IFCR_CTCIF3_Pos) /*!< 0x00000200 */\r\n#define DMA_IFCR_CTCIF3     DMA_IFCR_CTCIF3_Msk            /*!< Channel 3 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF3_Pos (10U)\r\n#define DMA_IFCR_CHTIF3_Msk (0x1UL << DMA_IFCR_CHTIF3_Pos) /*!< 0x00000400 */\r\n#define DMA_IFCR_CHTIF3     DMA_IFCR_CHTIF3_Msk            /*!< Channel 3 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF3_Pos (11U)\r\n#define DMA_IFCR_CTEIF3_Msk (0x1UL << DMA_IFCR_CTEIF3_Pos) /*!< 0x00000800 */\r\n#define DMA_IFCR_CTEIF3     DMA_IFCR_CTEIF3_Msk            /*!< Channel 3 Transfer Error clear */\r\n#define DMA_IFCR_CGIF4_Pos  (12U)\r\n#define DMA_IFCR_CGIF4_Msk  (0x1UL << DMA_IFCR_CGIF4_Pos) /*!< 0x00001000 */\r\n#define DMA_IFCR_CGIF4      DMA_IFCR_CGIF4_Msk            /*!< Channel 4 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF4_Pos (13U)\r\n#define DMA_IFCR_CTCIF4_Msk (0x1UL << DMA_IFCR_CTCIF4_Pos) /*!< 0x00002000 */\r\n#define DMA_IFCR_CTCIF4     DMA_IFCR_CTCIF4_Msk            /*!< Channel 4 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF4_Pos (14U)\r\n#define DMA_IFCR_CHTIF4_Msk (0x1UL << DMA_IFCR_CHTIF4_Pos) /*!< 0x00004000 */\r\n#define DMA_IFCR_CHTIF4     DMA_IFCR_CHTIF4_Msk            /*!< Channel 4 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF4_Pos (15U)\r\n#define DMA_IFCR_CTEIF4_Msk (0x1UL << DMA_IFCR_CTEIF4_Pos) /*!< 0x00008000 */\r\n#define DMA_IFCR_CTEIF4     DMA_IFCR_CTEIF4_Msk            /*!< Channel 4 Transfer Error clear */\r\n#define DMA_IFCR_CGIF5_Pos  (16U)\r\n#define DMA_IFCR_CGIF5_Msk  (0x1UL << DMA_IFCR_CGIF5_Pos) /*!< 0x00010000 */\r\n#define DMA_IFCR_CGIF5      DMA_IFCR_CGIF5_Msk            /*!< Channel 5 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF5_Pos (17U)\r\n#define DMA_IFCR_CTCIF5_Msk (0x1UL << DMA_IFCR_CTCIF5_Pos) /*!< 0x00020000 */\r\n#define DMA_IFCR_CTCIF5     DMA_IFCR_CTCIF5_Msk            /*!< Channel 5 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF5_Pos (18U)\r\n#define DMA_IFCR_CHTIF5_Msk (0x1UL << DMA_IFCR_CHTIF5_Pos) /*!< 0x00040000 */\r\n#define DMA_IFCR_CHTIF5     DMA_IFCR_CHTIF5_Msk            /*!< Channel 5 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF5_Pos (19U)\r\n#define DMA_IFCR_CTEIF5_Msk (0x1UL << DMA_IFCR_CTEIF5_Pos) /*!< 0x00080000 */\r\n#define DMA_IFCR_CTEIF5     DMA_IFCR_CTEIF5_Msk            /*!< Channel 5 Transfer Error clear */\r\n#define DMA_IFCR_CGIF6_Pos  (20U)\r\n#define DMA_IFCR_CGIF6_Msk  (0x1UL << DMA_IFCR_CGIF6_Pos) /*!< 0x00100000 */\r\n#define DMA_IFCR_CGIF6      DMA_IFCR_CGIF6_Msk            /*!< Channel 6 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF6_Pos (21U)\r\n#define DMA_IFCR_CTCIF6_Msk (0x1UL << DMA_IFCR_CTCIF6_Pos) /*!< 0x00200000 */\r\n#define DMA_IFCR_CTCIF6     DMA_IFCR_CTCIF6_Msk            /*!< Channel 6 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF6_Pos (22U)\r\n#define DMA_IFCR_CHTIF6_Msk (0x1UL << DMA_IFCR_CHTIF6_Pos) /*!< 0x00400000 */\r\n#define DMA_IFCR_CHTIF6     DMA_IFCR_CHTIF6_Msk            /*!< Channel 6 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF6_Pos (23U)\r\n#define DMA_IFCR_CTEIF6_Msk (0x1UL << DMA_IFCR_CTEIF6_Pos) /*!< 0x00800000 */\r\n#define DMA_IFCR_CTEIF6     DMA_IFCR_CTEIF6_Msk            /*!< Channel 6 Transfer Error clear */\r\n#define DMA_IFCR_CGIF7_Pos  (24U)\r\n#define DMA_IFCR_CGIF7_Msk  (0x1UL << DMA_IFCR_CGIF7_Pos) /*!< 0x01000000 */\r\n#define DMA_IFCR_CGIF7      DMA_IFCR_CGIF7_Msk            /*!< Channel 7 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF7_Pos (25U)\r\n#define DMA_IFCR_CTCIF7_Msk (0x1UL << DMA_IFCR_CTCIF7_Pos) /*!< 0x02000000 */\r\n#define DMA_IFCR_CTCIF7     DMA_IFCR_CTCIF7_Msk            /*!< Channel 7 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF7_Pos (26U)\r\n#define DMA_IFCR_CHTIF7_Msk (0x1UL << DMA_IFCR_CHTIF7_Pos) /*!< 0x04000000 */\r\n#define DMA_IFCR_CHTIF7     DMA_IFCR_CHTIF7_Msk            /*!< Channel 7 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF7_Pos (27U)\r\n#define DMA_IFCR_CTEIF7_Msk (0x1UL << DMA_IFCR_CTEIF7_Pos) /*!< 0x08000000 */\r\n#define DMA_IFCR_CTEIF7     DMA_IFCR_CTEIF7_Msk            /*!< Channel 7 Transfer Error clear */\r\n\r\n/*******************  Bit definition for DMA_CCR register   *******************/\r\n#define DMA_CCR_EN_Pos   (0U)\r\n#define DMA_CCR_EN_Msk   (0x1UL << DMA_CCR_EN_Pos) /*!< 0x00000001 */\r\n#define DMA_CCR_EN       DMA_CCR_EN_Msk            /*!< Channel enable */\r\n#define DMA_CCR_TCIE_Pos (1U)\r\n#define DMA_CCR_TCIE_Msk (0x1UL << DMA_CCR_TCIE_Pos) /*!< 0x00000002 */\r\n#define DMA_CCR_TCIE     DMA_CCR_TCIE_Msk            /*!< Transfer complete interrupt enable */\r\n#define DMA_CCR_HTIE_Pos (2U)\r\n#define DMA_CCR_HTIE_Msk (0x1UL << DMA_CCR_HTIE_Pos) /*!< 0x00000004 */\r\n#define DMA_CCR_HTIE     DMA_CCR_HTIE_Msk            /*!< Half Transfer interrupt enable */\r\n#define DMA_CCR_TEIE_Pos (3U)\r\n#define DMA_CCR_TEIE_Msk (0x1UL << DMA_CCR_TEIE_Pos) /*!< 0x00000008 */\r\n#define DMA_CCR_TEIE     DMA_CCR_TEIE_Msk            /*!< Transfer error interrupt enable */\r\n#define DMA_CCR_DIR_Pos  (4U)\r\n#define DMA_CCR_DIR_Msk  (0x1UL << DMA_CCR_DIR_Pos) /*!< 0x00000010 */\r\n#define DMA_CCR_DIR      DMA_CCR_DIR_Msk            /*!< Data transfer direction */\r\n#define DMA_CCR_CIRC_Pos (5U)\r\n#define DMA_CCR_CIRC_Msk (0x1UL << DMA_CCR_CIRC_Pos) /*!< 0x00000020 */\r\n#define DMA_CCR_CIRC     DMA_CCR_CIRC_Msk            /*!< Circular mode */\r\n#define DMA_CCR_PINC_Pos (6U)\r\n#define DMA_CCR_PINC_Msk (0x1UL << DMA_CCR_PINC_Pos) /*!< 0x00000040 */\r\n#define DMA_CCR_PINC     DMA_CCR_PINC_Msk            /*!< Peripheral increment mode */\r\n#define DMA_CCR_MINC_Pos (7U)\r\n#define DMA_CCR_MINC_Msk (0x1UL << DMA_CCR_MINC_Pos) /*!< 0x00000080 */\r\n#define DMA_CCR_MINC     DMA_CCR_MINC_Msk            /*!< Memory increment mode */\r\n\r\n#define DMA_CCR_PSIZE_Pos (8U)\r\n#define DMA_CCR_PSIZE_Msk (0x3UL << DMA_CCR_PSIZE_Pos) /*!< 0x00000300 */\r\n#define DMA_CCR_PSIZE     DMA_CCR_PSIZE_Msk            /*!< PSIZE[1:0] bits (Peripheral size) */\r\n#define DMA_CCR_PSIZE_0   (0x1UL << DMA_CCR_PSIZE_Pos) /*!< 0x00000100 */\r\n#define DMA_CCR_PSIZE_1   (0x2UL << DMA_CCR_PSIZE_Pos) /*!< 0x00000200 */\r\n\r\n#define DMA_CCR_MSIZE_Pos (10U)\r\n#define DMA_CCR_MSIZE_Msk (0x3UL << DMA_CCR_MSIZE_Pos) /*!< 0x00000C00 */\r\n#define DMA_CCR_MSIZE     DMA_CCR_MSIZE_Msk            /*!< MSIZE[1:0] bits (Memory size) */\r\n#define DMA_CCR_MSIZE_0   (0x1UL << DMA_CCR_MSIZE_Pos) /*!< 0x00000400 */\r\n#define DMA_CCR_MSIZE_1   (0x2UL << DMA_CCR_MSIZE_Pos) /*!< 0x00000800 */\r\n\r\n#define DMA_CCR_PL_Pos (12U)\r\n#define DMA_CCR_PL_Msk (0x3UL << DMA_CCR_PL_Pos) /*!< 0x00003000 */\r\n#define DMA_CCR_PL     DMA_CCR_PL_Msk            /*!< PL[1:0] bits(Channel Priority level) */\r\n#define DMA_CCR_PL_0   (0x1UL << DMA_CCR_PL_Pos) /*!< 0x00001000 */\r\n#define DMA_CCR_PL_1   (0x2UL << DMA_CCR_PL_Pos) /*!< 0x00002000 */\r\n\r\n#define DMA_CCR_MEM2MEM_Pos (14U)\r\n#define DMA_CCR_MEM2MEM_Msk (0x1UL << DMA_CCR_MEM2MEM_Pos) /*!< 0x00004000 */\r\n#define DMA_CCR_MEM2MEM     DMA_CCR_MEM2MEM_Msk            /*!< Memory to memory mode */\r\n\r\n/******************  Bit definition for DMA_CNDTR  register  ******************/\r\n#define DMA_CNDTR_NDT_Pos (0U)\r\n#define DMA_CNDTR_NDT_Msk (0xFFFFUL << DMA_CNDTR_NDT_Pos) /*!< 0x0000FFFF */\r\n#define DMA_CNDTR_NDT     DMA_CNDTR_NDT_Msk               /*!< Number of data to Transfer */\r\n\r\n/******************  Bit definition for DMA_CPAR  register  *******************/\r\n#define DMA_CPAR_PA_Pos (0U)\r\n#define DMA_CPAR_PA_Msk (0xFFFFFFFFUL << DMA_CPAR_PA_Pos) /*!< 0xFFFFFFFF */\r\n#define DMA_CPAR_PA     DMA_CPAR_PA_Msk                   /*!< Peripheral Address */\r\n\r\n/******************  Bit definition for DMA_CMAR  register  *******************/\r\n#define DMA_CMAR_MA_Pos (0U)\r\n#define DMA_CMAR_MA_Msk (0xFFFFFFFFUL << DMA_CMAR_MA_Pos) /*!< 0xFFFFFFFF */\r\n#define DMA_CMAR_MA     DMA_CMAR_MA_Msk                   /*!< Memory Address */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                      Analog to Digital Converter (ADC)                     */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*\r\n * @brief Specific device feature definitions (not present on all devices in the STM32F1 family)\r\n */\r\n#define ADC_MULTIMODE_SUPPORT /*!< ADC feature available only on specific devices: multimode available on devices with several ADC instances */\r\n\r\n/********************  Bit definition for ADC_SR register  ********************/\r\n#define ADC_SR_AWD_Pos   (0U)\r\n#define ADC_SR_AWD_Msk   (0x1UL << ADC_SR_AWD_Pos) /*!< 0x00000001 */\r\n#define ADC_SR_AWD       ADC_SR_AWD_Msk            /*!< ADC analog watchdog 1 flag */\r\n#define ADC_SR_EOS_Pos   (1U)\r\n#define ADC_SR_EOS_Msk   (0x1UL << ADC_SR_EOS_Pos) /*!< 0x00000002 */\r\n#define ADC_SR_EOS       ADC_SR_EOS_Msk            /*!< ADC group regular end of sequence conversions flag */\r\n#define ADC_SR_JEOS_Pos  (2U)\r\n#define ADC_SR_JEOS_Msk  (0x1UL << ADC_SR_JEOS_Pos) /*!< 0x00000004 */\r\n#define ADC_SR_JEOS      ADC_SR_JEOS_Msk            /*!< ADC group injected end of sequence conversions flag */\r\n#define ADC_SR_JSTRT_Pos (3U)\r\n#define ADC_SR_JSTRT_Msk (0x1UL << ADC_SR_JSTRT_Pos) /*!< 0x00000008 */\r\n#define ADC_SR_JSTRT     ADC_SR_JSTRT_Msk            /*!< ADC group injected conversion start flag */\r\n#define ADC_SR_STRT_Pos  (4U)\r\n#define ADC_SR_STRT_Msk  (0x1UL << ADC_SR_STRT_Pos) /*!< 0x00000010 */\r\n#define ADC_SR_STRT      ADC_SR_STRT_Msk            /*!< ADC group regular conversion start flag */\r\n\r\n/* Legacy defines */\r\n#define ADC_SR_EOC  (ADC_SR_EOS)\r\n#define ADC_SR_JEOC (ADC_SR_JEOS)\r\n\r\n/*******************  Bit definition for ADC_CR1 register  ********************/\r\n#define ADC_CR1_AWDCH_Pos (0U)\r\n#define ADC_CR1_AWDCH_Msk (0x1FUL << ADC_CR1_AWDCH_Pos) /*!< 0x0000001F */\r\n#define ADC_CR1_AWDCH     ADC_CR1_AWDCH_Msk             /*!< ADC analog watchdog 1 monitored channel selection */\r\n#define ADC_CR1_AWDCH_0   (0x01UL << ADC_CR1_AWDCH_Pos) /*!< 0x00000001 */\r\n#define ADC_CR1_AWDCH_1   (0x02UL << ADC_CR1_AWDCH_Pos) /*!< 0x00000002 */\r\n#define ADC_CR1_AWDCH_2   (0x04UL << ADC_CR1_AWDCH_Pos) /*!< 0x00000004 */\r\n#define ADC_CR1_AWDCH_3   (0x08UL << ADC_CR1_AWDCH_Pos) /*!< 0x00000008 */\r\n#define ADC_CR1_AWDCH_4   (0x10UL << ADC_CR1_AWDCH_Pos) /*!< 0x00000010 */\r\n\r\n#define ADC_CR1_EOSIE_Pos   (5U)\r\n#define ADC_CR1_EOSIE_Msk   (0x1UL << ADC_CR1_EOSIE_Pos) /*!< 0x00000020 */\r\n#define ADC_CR1_EOSIE       ADC_CR1_EOSIE_Msk            /*!< ADC group regular end of sequence conversions interrupt */\r\n#define ADC_CR1_AWDIE_Pos   (6U)\r\n#define ADC_CR1_AWDIE_Msk   (0x1UL << ADC_CR1_AWDIE_Pos) /*!< 0x00000040 */\r\n#define ADC_CR1_AWDIE       ADC_CR1_AWDIE_Msk            /*!< ADC analog watchdog 1 interrupt */\r\n#define ADC_CR1_JEOSIE_Pos  (7U)\r\n#define ADC_CR1_JEOSIE_Msk  (0x1UL << ADC_CR1_JEOSIE_Pos) /*!< 0x00000080 */\r\n#define ADC_CR1_JEOSIE      ADC_CR1_JEOSIE_Msk            /*!< ADC group injected end of sequence conversions interrupt */\r\n#define ADC_CR1_SCAN_Pos    (8U)\r\n#define ADC_CR1_SCAN_Msk    (0x1UL << ADC_CR1_SCAN_Pos) /*!< 0x00000100 */\r\n#define ADC_CR1_SCAN        ADC_CR1_SCAN_Msk            /*!< ADC scan mode */\r\n#define ADC_CR1_AWDSGL_Pos  (9U)\r\n#define ADC_CR1_AWDSGL_Msk  (0x1UL << ADC_CR1_AWDSGL_Pos) /*!< 0x00000200 */\r\n#define ADC_CR1_AWDSGL      ADC_CR1_AWDSGL_Msk            /*!< ADC analog watchdog 1 monitoring a single channel or all channels */\r\n#define ADC_CR1_JAUTO_Pos   (10U)\r\n#define ADC_CR1_JAUTO_Msk   (0x1UL << ADC_CR1_JAUTO_Pos) /*!< 0x00000400 */\r\n#define ADC_CR1_JAUTO       ADC_CR1_JAUTO_Msk            /*!< ADC group injected automatic trigger mode */\r\n#define ADC_CR1_DISCEN_Pos  (11U)\r\n#define ADC_CR1_DISCEN_Msk  (0x1UL << ADC_CR1_DISCEN_Pos) /*!< 0x00000800 */\r\n#define ADC_CR1_DISCEN      ADC_CR1_DISCEN_Msk            /*!< ADC group regular sequencer discontinuous mode */\r\n#define ADC_CR1_JDISCEN_Pos (12U)\r\n#define ADC_CR1_JDISCEN_Msk (0x1UL << ADC_CR1_JDISCEN_Pos) /*!< 0x00001000 */\r\n#define ADC_CR1_JDISCEN     ADC_CR1_JDISCEN_Msk            /*!< ADC group injected sequencer discontinuous mode */\r\n\r\n#define ADC_CR1_DISCNUM_Pos (13U)\r\n#define ADC_CR1_DISCNUM_Msk (0x7UL << ADC_CR1_DISCNUM_Pos) /*!< 0x0000E000 */\r\n#define ADC_CR1_DISCNUM     ADC_CR1_DISCNUM_Msk            /*!< ADC group regular sequencer discontinuous number of ranks */\r\n#define ADC_CR1_DISCNUM_0   (0x1UL << ADC_CR1_DISCNUM_Pos) /*!< 0x00002000 */\r\n#define ADC_CR1_DISCNUM_1   (0x2UL << ADC_CR1_DISCNUM_Pos) /*!< 0x00004000 */\r\n#define ADC_CR1_DISCNUM_2   (0x4UL << ADC_CR1_DISCNUM_Pos) /*!< 0x00008000 */\r\n\r\n#define ADC_CR1_DUALMOD_Pos (16U)\r\n#define ADC_CR1_DUALMOD_Msk (0xFUL << ADC_CR1_DUALMOD_Pos) /*!< 0x000F0000 */\r\n#define ADC_CR1_DUALMOD     ADC_CR1_DUALMOD_Msk            /*!< ADC multimode mode selection */\r\n#define ADC_CR1_DUALMOD_0   (0x1UL << ADC_CR1_DUALMOD_Pos) /*!< 0x00010000 */\r\n#define ADC_CR1_DUALMOD_1   (0x2UL << ADC_CR1_DUALMOD_Pos) /*!< 0x00020000 */\r\n#define ADC_CR1_DUALMOD_2   (0x4UL << ADC_CR1_DUALMOD_Pos) /*!< 0x00040000 */\r\n#define ADC_CR1_DUALMOD_3   (0x8UL << ADC_CR1_DUALMOD_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_CR1_JAWDEN_Pos (22U)\r\n#define ADC_CR1_JAWDEN_Msk (0x1UL << ADC_CR1_JAWDEN_Pos) /*!< 0x00400000 */\r\n#define ADC_CR1_JAWDEN     ADC_CR1_JAWDEN_Msk            /*!< ADC analog watchdog 1 enable on scope ADC group injected */\r\n#define ADC_CR1_AWDEN_Pos  (23U)\r\n#define ADC_CR1_AWDEN_Msk  (0x1UL << ADC_CR1_AWDEN_Pos) /*!< 0x00800000 */\r\n#define ADC_CR1_AWDEN      ADC_CR1_AWDEN_Msk            /*!< ADC analog watchdog 1 enable on scope ADC group regular */\r\n\r\n/* Legacy defines */\r\n#define ADC_CR1_EOCIE  (ADC_CR1_EOSIE)\r\n#define ADC_CR1_JEOCIE (ADC_CR1_JEOSIE)\r\n\r\n/*******************  Bit definition for ADC_CR2 register  ********************/\r\n#define ADC_CR2_ADON_Pos   (0U)\r\n#define ADC_CR2_ADON_Msk   (0x1UL << ADC_CR2_ADON_Pos) /*!< 0x00000001 */\r\n#define ADC_CR2_ADON       ADC_CR2_ADON_Msk            /*!< ADC enable */\r\n#define ADC_CR2_CONT_Pos   (1U)\r\n#define ADC_CR2_CONT_Msk   (0x1UL << ADC_CR2_CONT_Pos) /*!< 0x00000002 */\r\n#define ADC_CR2_CONT       ADC_CR2_CONT_Msk            /*!< ADC group regular continuous conversion mode */\r\n#define ADC_CR2_CAL_Pos    (2U)\r\n#define ADC_CR2_CAL_Msk    (0x1UL << ADC_CR2_CAL_Pos) /*!< 0x00000004 */\r\n#define ADC_CR2_CAL        ADC_CR2_CAL_Msk            /*!< ADC calibration start */\r\n#define ADC_CR2_RSTCAL_Pos (3U)\r\n#define ADC_CR2_RSTCAL_Msk (0x1UL << ADC_CR2_RSTCAL_Pos) /*!< 0x00000008 */\r\n#define ADC_CR2_RSTCAL     ADC_CR2_RSTCAL_Msk            /*!< ADC calibration reset */\r\n#define ADC_CR2_DMA_Pos    (8U)\r\n#define ADC_CR2_DMA_Msk    (0x1UL << ADC_CR2_DMA_Pos) /*!< 0x00000100 */\r\n#define ADC_CR2_DMA        ADC_CR2_DMA_Msk            /*!< ADC DMA transfer enable */\r\n#define ADC_CR2_ALIGN_Pos  (11U)\r\n#define ADC_CR2_ALIGN_Msk  (0x1UL << ADC_CR2_ALIGN_Pos) /*!< 0x00000800 */\r\n#define ADC_CR2_ALIGN      ADC_CR2_ALIGN_Msk            /*!< ADC data alignement */\r\n\r\n#define ADC_CR2_JEXTSEL_Pos (12U)\r\n#define ADC_CR2_JEXTSEL_Msk (0x7UL << ADC_CR2_JEXTSEL_Pos) /*!< 0x00007000 */\r\n#define ADC_CR2_JEXTSEL     ADC_CR2_JEXTSEL_Msk            /*!< ADC group injected external trigger source */\r\n#define ADC_CR2_JEXTSEL_0   (0x1UL << ADC_CR2_JEXTSEL_Pos) /*!< 0x00001000 */\r\n#define ADC_CR2_JEXTSEL_1   (0x2UL << ADC_CR2_JEXTSEL_Pos) /*!< 0x00002000 */\r\n#define ADC_CR2_JEXTSEL_2   (0x4UL << ADC_CR2_JEXTSEL_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_CR2_JEXTTRIG_Pos (15U)\r\n#define ADC_CR2_JEXTTRIG_Msk (0x1UL << ADC_CR2_JEXTTRIG_Pos) /*!< 0x00008000 */\r\n#define ADC_CR2_JEXTTRIG     ADC_CR2_JEXTTRIG_Msk            /*!< ADC group injected external trigger enable */\r\n\r\n#define ADC_CR2_EXTSEL_Pos (17U)\r\n#define ADC_CR2_EXTSEL_Msk (0x7UL << ADC_CR2_EXTSEL_Pos) /*!< 0x000E0000 */\r\n#define ADC_CR2_EXTSEL     ADC_CR2_EXTSEL_Msk            /*!< ADC group regular external trigger source */\r\n#define ADC_CR2_EXTSEL_0   (0x1UL << ADC_CR2_EXTSEL_Pos) /*!< 0x00020000 */\r\n#define ADC_CR2_EXTSEL_1   (0x2UL << ADC_CR2_EXTSEL_Pos) /*!< 0x00040000 */\r\n#define ADC_CR2_EXTSEL_2   (0x4UL << ADC_CR2_EXTSEL_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_CR2_EXTTRIG_Pos  (20U)\r\n#define ADC_CR2_EXTTRIG_Msk  (0x1UL << ADC_CR2_EXTTRIG_Pos) /*!< 0x00100000 */\r\n#define ADC_CR2_EXTTRIG      ADC_CR2_EXTTRIG_Msk            /*!< ADC group regular external trigger enable */\r\n#define ADC_CR2_JSWSTART_Pos (21U)\r\n#define ADC_CR2_JSWSTART_Msk (0x1UL << ADC_CR2_JSWSTART_Pos) /*!< 0x00200000 */\r\n#define ADC_CR2_JSWSTART     ADC_CR2_JSWSTART_Msk            /*!< ADC group injected conversion start */\r\n#define ADC_CR2_SWSTART_Pos  (22U)\r\n#define ADC_CR2_SWSTART_Msk  (0x1UL << ADC_CR2_SWSTART_Pos) /*!< 0x00400000 */\r\n#define ADC_CR2_SWSTART      ADC_CR2_SWSTART_Msk            /*!< ADC group regular conversion start */\r\n#define ADC_CR2_TSVREFE_Pos  (23U)\r\n#define ADC_CR2_TSVREFE_Msk  (0x1UL << ADC_CR2_TSVREFE_Pos) /*!< 0x00800000 */\r\n#define ADC_CR2_TSVREFE      ADC_CR2_TSVREFE_Msk            /*!< ADC internal path to VrefInt and temperature sensor enable */\r\n\r\n/******************  Bit definition for ADC_SMPR1 register  *******************/\r\n#define ADC_SMPR1_SMP10_Pos (0U)\r\n#define ADC_SMPR1_SMP10_Msk (0x7UL << ADC_SMPR1_SMP10_Pos) /*!< 0x00000007 */\r\n#define ADC_SMPR1_SMP10     ADC_SMPR1_SMP10_Msk            /*!< ADC channel 10 sampling time selection  */\r\n#define ADC_SMPR1_SMP10_0   (0x1UL << ADC_SMPR1_SMP10_Pos) /*!< 0x00000001 */\r\n#define ADC_SMPR1_SMP10_1   (0x2UL << ADC_SMPR1_SMP10_Pos) /*!< 0x00000002 */\r\n#define ADC_SMPR1_SMP10_2   (0x4UL << ADC_SMPR1_SMP10_Pos) /*!< 0x00000004 */\r\n\r\n#define ADC_SMPR1_SMP11_Pos (3U)\r\n#define ADC_SMPR1_SMP11_Msk (0x7UL << ADC_SMPR1_SMP11_Pos) /*!< 0x00000038 */\r\n#define ADC_SMPR1_SMP11     ADC_SMPR1_SMP11_Msk            /*!< ADC channel 11 sampling time selection  */\r\n#define ADC_SMPR1_SMP11_0   (0x1UL << ADC_SMPR1_SMP11_Pos) /*!< 0x00000008 */\r\n#define ADC_SMPR1_SMP11_1   (0x2UL << ADC_SMPR1_SMP11_Pos) /*!< 0x00000010 */\r\n#define ADC_SMPR1_SMP11_2   (0x4UL << ADC_SMPR1_SMP11_Pos) /*!< 0x00000020 */\r\n\r\n#define ADC_SMPR1_SMP12_Pos (6U)\r\n#define ADC_SMPR1_SMP12_Msk (0x7UL << ADC_SMPR1_SMP12_Pos) /*!< 0x000001C0 */\r\n#define ADC_SMPR1_SMP12     ADC_SMPR1_SMP12_Msk            /*!< ADC channel 12 sampling time selection  */\r\n#define ADC_SMPR1_SMP12_0   (0x1UL << ADC_SMPR1_SMP12_Pos) /*!< 0x00000040 */\r\n#define ADC_SMPR1_SMP12_1   (0x2UL << ADC_SMPR1_SMP12_Pos) /*!< 0x00000080 */\r\n#define ADC_SMPR1_SMP12_2   (0x4UL << ADC_SMPR1_SMP12_Pos) /*!< 0x00000100 */\r\n\r\n#define ADC_SMPR1_SMP13_Pos (9U)\r\n#define ADC_SMPR1_SMP13_Msk (0x7UL << ADC_SMPR1_SMP13_Pos) /*!< 0x00000E00 */\r\n#define ADC_SMPR1_SMP13     ADC_SMPR1_SMP13_Msk            /*!< ADC channel 13 sampling time selection  */\r\n#define ADC_SMPR1_SMP13_0   (0x1UL << ADC_SMPR1_SMP13_Pos) /*!< 0x00000200 */\r\n#define ADC_SMPR1_SMP13_1   (0x2UL << ADC_SMPR1_SMP13_Pos) /*!< 0x00000400 */\r\n#define ADC_SMPR1_SMP13_2   (0x4UL << ADC_SMPR1_SMP13_Pos) /*!< 0x00000800 */\r\n\r\n#define ADC_SMPR1_SMP14_Pos (12U)\r\n#define ADC_SMPR1_SMP14_Msk (0x7UL << ADC_SMPR1_SMP14_Pos) /*!< 0x00007000 */\r\n#define ADC_SMPR1_SMP14     ADC_SMPR1_SMP14_Msk            /*!< ADC channel 14 sampling time selection  */\r\n#define ADC_SMPR1_SMP14_0   (0x1UL << ADC_SMPR1_SMP14_Pos) /*!< 0x00001000 */\r\n#define ADC_SMPR1_SMP14_1   (0x2UL << ADC_SMPR1_SMP14_Pos) /*!< 0x00002000 */\r\n#define ADC_SMPR1_SMP14_2   (0x4UL << ADC_SMPR1_SMP14_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_SMPR1_SMP15_Pos (15U)\r\n#define ADC_SMPR1_SMP15_Msk (0x7UL << ADC_SMPR1_SMP15_Pos) /*!< 0x00038000 */\r\n#define ADC_SMPR1_SMP15     ADC_SMPR1_SMP15_Msk            /*!< ADC channel 15 sampling time selection  */\r\n#define ADC_SMPR1_SMP15_0   (0x1UL << ADC_SMPR1_SMP15_Pos) /*!< 0x00008000 */\r\n#define ADC_SMPR1_SMP15_1   (0x2UL << ADC_SMPR1_SMP15_Pos) /*!< 0x00010000 */\r\n#define ADC_SMPR1_SMP15_2   (0x4UL << ADC_SMPR1_SMP15_Pos) /*!< 0x00020000 */\r\n\r\n#define ADC_SMPR1_SMP16_Pos (18U)\r\n#define ADC_SMPR1_SMP16_Msk (0x7UL << ADC_SMPR1_SMP16_Pos) /*!< 0x001C0000 */\r\n#define ADC_SMPR1_SMP16     ADC_SMPR1_SMP16_Msk            /*!< ADC channel 16 sampling time selection  */\r\n#define ADC_SMPR1_SMP16_0   (0x1UL << ADC_SMPR1_SMP16_Pos) /*!< 0x00040000 */\r\n#define ADC_SMPR1_SMP16_1   (0x2UL << ADC_SMPR1_SMP16_Pos) /*!< 0x00080000 */\r\n#define ADC_SMPR1_SMP16_2   (0x4UL << ADC_SMPR1_SMP16_Pos) /*!< 0x00100000 */\r\n\r\n#define ADC_SMPR1_SMP17_Pos (21U)\r\n#define ADC_SMPR1_SMP17_Msk (0x7UL << ADC_SMPR1_SMP17_Pos) /*!< 0x00E00000 */\r\n#define ADC_SMPR1_SMP17     ADC_SMPR1_SMP17_Msk            /*!< ADC channel 17 sampling time selection  */\r\n#define ADC_SMPR1_SMP17_0   (0x1UL << ADC_SMPR1_SMP17_Pos) /*!< 0x00200000 */\r\n#define ADC_SMPR1_SMP17_1   (0x2UL << ADC_SMPR1_SMP17_Pos) /*!< 0x00400000 */\r\n#define ADC_SMPR1_SMP17_2   (0x4UL << ADC_SMPR1_SMP17_Pos) /*!< 0x00800000 */\r\n\r\n/******************  Bit definition for ADC_SMPR2 register  *******************/\r\n#define ADC_SMPR2_SMP0_Pos (0U)\r\n#define ADC_SMPR2_SMP0_Msk (0x7UL << ADC_SMPR2_SMP0_Pos) /*!< 0x00000007 */\r\n#define ADC_SMPR2_SMP0     ADC_SMPR2_SMP0_Msk            /*!< ADC channel 0 sampling time selection  */\r\n#define ADC_SMPR2_SMP0_0   (0x1UL << ADC_SMPR2_SMP0_Pos) /*!< 0x00000001 */\r\n#define ADC_SMPR2_SMP0_1   (0x2UL << ADC_SMPR2_SMP0_Pos) /*!< 0x00000002 */\r\n#define ADC_SMPR2_SMP0_2   (0x4UL << ADC_SMPR2_SMP0_Pos) /*!< 0x00000004 */\r\n\r\n#define ADC_SMPR2_SMP1_Pos (3U)\r\n#define ADC_SMPR2_SMP1_Msk (0x7UL << ADC_SMPR2_SMP1_Pos) /*!< 0x00000038 */\r\n#define ADC_SMPR2_SMP1     ADC_SMPR2_SMP1_Msk            /*!< ADC channel 1 sampling time selection  */\r\n#define ADC_SMPR2_SMP1_0   (0x1UL << ADC_SMPR2_SMP1_Pos) /*!< 0x00000008 */\r\n#define ADC_SMPR2_SMP1_1   (0x2UL << ADC_SMPR2_SMP1_Pos) /*!< 0x00000010 */\r\n#define ADC_SMPR2_SMP1_2   (0x4UL << ADC_SMPR2_SMP1_Pos) /*!< 0x00000020 */\r\n\r\n#define ADC_SMPR2_SMP2_Pos (6U)\r\n#define ADC_SMPR2_SMP2_Msk (0x7UL << ADC_SMPR2_SMP2_Pos) /*!< 0x000001C0 */\r\n#define ADC_SMPR2_SMP2     ADC_SMPR2_SMP2_Msk            /*!< ADC channel 2 sampling time selection  */\r\n#define ADC_SMPR2_SMP2_0   (0x1UL << ADC_SMPR2_SMP2_Pos) /*!< 0x00000040 */\r\n#define ADC_SMPR2_SMP2_1   (0x2UL << ADC_SMPR2_SMP2_Pos) /*!< 0x00000080 */\r\n#define ADC_SMPR2_SMP2_2   (0x4UL << ADC_SMPR2_SMP2_Pos) /*!< 0x00000100 */\r\n\r\n#define ADC_SMPR2_SMP3_Pos (9U)\r\n#define ADC_SMPR2_SMP3_Msk (0x7UL << ADC_SMPR2_SMP3_Pos) /*!< 0x00000E00 */\r\n#define ADC_SMPR2_SMP3     ADC_SMPR2_SMP3_Msk            /*!< ADC channel 3 sampling time selection  */\r\n#define ADC_SMPR2_SMP3_0   (0x1UL << ADC_SMPR2_SMP3_Pos) /*!< 0x00000200 */\r\n#define ADC_SMPR2_SMP3_1   (0x2UL << ADC_SMPR2_SMP3_Pos) /*!< 0x00000400 */\r\n#define ADC_SMPR2_SMP3_2   (0x4UL << ADC_SMPR2_SMP3_Pos) /*!< 0x00000800 */\r\n\r\n#define ADC_SMPR2_SMP4_Pos (12U)\r\n#define ADC_SMPR2_SMP4_Msk (0x7UL << ADC_SMPR2_SMP4_Pos) /*!< 0x00007000 */\r\n#define ADC_SMPR2_SMP4     ADC_SMPR2_SMP4_Msk            /*!< ADC channel 4 sampling time selection  */\r\n#define ADC_SMPR2_SMP4_0   (0x1UL << ADC_SMPR2_SMP4_Pos) /*!< 0x00001000 */\r\n#define ADC_SMPR2_SMP4_1   (0x2UL << ADC_SMPR2_SMP4_Pos) /*!< 0x00002000 */\r\n#define ADC_SMPR2_SMP4_2   (0x4UL << ADC_SMPR2_SMP4_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_SMPR2_SMP5_Pos (15U)\r\n#define ADC_SMPR2_SMP5_Msk (0x7UL << ADC_SMPR2_SMP5_Pos) /*!< 0x00038000 */\r\n#define ADC_SMPR2_SMP5     ADC_SMPR2_SMP5_Msk            /*!< ADC channel 5 sampling time selection  */\r\n#define ADC_SMPR2_SMP5_0   (0x1UL << ADC_SMPR2_SMP5_Pos) /*!< 0x00008000 */\r\n#define ADC_SMPR2_SMP5_1   (0x2UL << ADC_SMPR2_SMP5_Pos) /*!< 0x00010000 */\r\n#define ADC_SMPR2_SMP5_2   (0x4UL << ADC_SMPR2_SMP5_Pos) /*!< 0x00020000 */\r\n\r\n#define ADC_SMPR2_SMP6_Pos (18U)\r\n#define ADC_SMPR2_SMP6_Msk (0x7UL << ADC_SMPR2_SMP6_Pos) /*!< 0x001C0000 */\r\n#define ADC_SMPR2_SMP6     ADC_SMPR2_SMP6_Msk            /*!< ADC channel 6 sampling time selection  */\r\n#define ADC_SMPR2_SMP6_0   (0x1UL << ADC_SMPR2_SMP6_Pos) /*!< 0x00040000 */\r\n#define ADC_SMPR2_SMP6_1   (0x2UL << ADC_SMPR2_SMP6_Pos) /*!< 0x00080000 */\r\n#define ADC_SMPR2_SMP6_2   (0x4UL << ADC_SMPR2_SMP6_Pos) /*!< 0x00100000 */\r\n\r\n#define ADC_SMPR2_SMP7_Pos (21U)\r\n#define ADC_SMPR2_SMP7_Msk (0x7UL << ADC_SMPR2_SMP7_Pos) /*!< 0x00E00000 */\r\n#define ADC_SMPR2_SMP7     ADC_SMPR2_SMP7_Msk            /*!< ADC channel 7 sampling time selection  */\r\n#define ADC_SMPR2_SMP7_0   (0x1UL << ADC_SMPR2_SMP7_Pos) /*!< 0x00200000 */\r\n#define ADC_SMPR2_SMP7_1   (0x2UL << ADC_SMPR2_SMP7_Pos) /*!< 0x00400000 */\r\n#define ADC_SMPR2_SMP7_2   (0x4UL << ADC_SMPR2_SMP7_Pos) /*!< 0x00800000 */\r\n\r\n#define ADC_SMPR2_SMP8_Pos (24U)\r\n#define ADC_SMPR2_SMP8_Msk (0x7UL << ADC_SMPR2_SMP8_Pos) /*!< 0x07000000 */\r\n#define ADC_SMPR2_SMP8     ADC_SMPR2_SMP8_Msk            /*!< ADC channel 8 sampling time selection  */\r\n#define ADC_SMPR2_SMP8_0   (0x1UL << ADC_SMPR2_SMP8_Pos) /*!< 0x01000000 */\r\n#define ADC_SMPR2_SMP8_1   (0x2UL << ADC_SMPR2_SMP8_Pos) /*!< 0x02000000 */\r\n#define ADC_SMPR2_SMP8_2   (0x4UL << ADC_SMPR2_SMP8_Pos) /*!< 0x04000000 */\r\n\r\n#define ADC_SMPR2_SMP9_Pos (27U)\r\n#define ADC_SMPR2_SMP9_Msk (0x7UL << ADC_SMPR2_SMP9_Pos) /*!< 0x38000000 */\r\n#define ADC_SMPR2_SMP9     ADC_SMPR2_SMP9_Msk            /*!< ADC channel 9 sampling time selection  */\r\n#define ADC_SMPR2_SMP9_0   (0x1UL << ADC_SMPR2_SMP9_Pos) /*!< 0x08000000 */\r\n#define ADC_SMPR2_SMP9_1   (0x2UL << ADC_SMPR2_SMP9_Pos) /*!< 0x10000000 */\r\n#define ADC_SMPR2_SMP9_2   (0x4UL << ADC_SMPR2_SMP9_Pos) /*!< 0x20000000 */\r\n\r\n/******************  Bit definition for ADC_JOFR1 register  *******************/\r\n#define ADC_JOFR1_JOFFSET1_Pos (0U)\r\n#define ADC_JOFR1_JOFFSET1_Msk (0xFFFUL << ADC_JOFR1_JOFFSET1_Pos) /*!< 0x00000FFF */\r\n#define ADC_JOFR1_JOFFSET1     ADC_JOFR1_JOFFSET1_Msk              /*!< ADC group injected sequencer rank 1 offset value */\r\n\r\n/******************  Bit definition for ADC_JOFR2 register  *******************/\r\n#define ADC_JOFR2_JOFFSET2_Pos (0U)\r\n#define ADC_JOFR2_JOFFSET2_Msk (0xFFFUL << ADC_JOFR2_JOFFSET2_Pos) /*!< 0x00000FFF */\r\n#define ADC_JOFR2_JOFFSET2     ADC_JOFR2_JOFFSET2_Msk              /*!< ADC group injected sequencer rank 2 offset value */\r\n\r\n/******************  Bit definition for ADC_JOFR3 register  *******************/\r\n#define ADC_JOFR3_JOFFSET3_Pos (0U)\r\n#define ADC_JOFR3_JOFFSET3_Msk (0xFFFUL << ADC_JOFR3_JOFFSET3_Pos) /*!< 0x00000FFF */\r\n#define ADC_JOFR3_JOFFSET3     ADC_JOFR3_JOFFSET3_Msk              /*!< ADC group injected sequencer rank 3 offset value */\r\n\r\n/******************  Bit definition for ADC_JOFR4 register  *******************/\r\n#define ADC_JOFR4_JOFFSET4_Pos (0U)\r\n#define ADC_JOFR4_JOFFSET4_Msk (0xFFFUL << ADC_JOFR4_JOFFSET4_Pos) /*!< 0x00000FFF */\r\n#define ADC_JOFR4_JOFFSET4     ADC_JOFR4_JOFFSET4_Msk              /*!< ADC group injected sequencer rank 4 offset value */\r\n\r\n/*******************  Bit definition for ADC_HTR register  ********************/\r\n#define ADC_HTR_HT_Pos (0U)\r\n#define ADC_HTR_HT_Msk (0xFFFUL << ADC_HTR_HT_Pos) /*!< 0x00000FFF */\r\n#define ADC_HTR_HT     ADC_HTR_HT_Msk              /*!< ADC analog watchdog 1 threshold high */\r\n\r\n/*******************  Bit definition for ADC_LTR register  ********************/\r\n#define ADC_LTR_LT_Pos (0U)\r\n#define ADC_LTR_LT_Msk (0xFFFUL << ADC_LTR_LT_Pos) /*!< 0x00000FFF */\r\n#define ADC_LTR_LT     ADC_LTR_LT_Msk              /*!< ADC analog watchdog 1 threshold low */\r\n\r\n/*******************  Bit definition for ADC_SQR1 register  *******************/\r\n#define ADC_SQR1_SQ13_Pos (0U)\r\n#define ADC_SQR1_SQ13_Msk (0x1FUL << ADC_SQR1_SQ13_Pos) /*!< 0x0000001F */\r\n#define ADC_SQR1_SQ13     ADC_SQR1_SQ13_Msk             /*!< ADC group regular sequencer rank 13 */\r\n#define ADC_SQR1_SQ13_0   (0x01UL << ADC_SQR1_SQ13_Pos) /*!< 0x00000001 */\r\n#define ADC_SQR1_SQ13_1   (0x02UL << ADC_SQR1_SQ13_Pos) /*!< 0x00000002 */\r\n#define ADC_SQR1_SQ13_2   (0x04UL << ADC_SQR1_SQ13_Pos) /*!< 0x00000004 */\r\n#define ADC_SQR1_SQ13_3   (0x08UL << ADC_SQR1_SQ13_Pos) /*!< 0x00000008 */\r\n#define ADC_SQR1_SQ13_4   (0x10UL << ADC_SQR1_SQ13_Pos) /*!< 0x00000010 */\r\n\r\n#define ADC_SQR1_SQ14_Pos (5U)\r\n#define ADC_SQR1_SQ14_Msk (0x1FUL << ADC_SQR1_SQ14_Pos) /*!< 0x000003E0 */\r\n#define ADC_SQR1_SQ14     ADC_SQR1_SQ14_Msk             /*!< ADC group regular sequencer rank 14 */\r\n#define ADC_SQR1_SQ14_0   (0x01UL << ADC_SQR1_SQ14_Pos) /*!< 0x00000020 */\r\n#define ADC_SQR1_SQ14_1   (0x02UL << ADC_SQR1_SQ14_Pos) /*!< 0x00000040 */\r\n#define ADC_SQR1_SQ14_2   (0x04UL << ADC_SQR1_SQ14_Pos) /*!< 0x00000080 */\r\n#define ADC_SQR1_SQ14_3   (0x08UL << ADC_SQR1_SQ14_Pos) /*!< 0x00000100 */\r\n#define ADC_SQR1_SQ14_4   (0x10UL << ADC_SQR1_SQ14_Pos) /*!< 0x00000200 */\r\n\r\n#define ADC_SQR1_SQ15_Pos (10U)\r\n#define ADC_SQR1_SQ15_Msk (0x1FUL << ADC_SQR1_SQ15_Pos) /*!< 0x00007C00 */\r\n#define ADC_SQR1_SQ15     ADC_SQR1_SQ15_Msk             /*!< ADC group regular sequencer rank 15 */\r\n#define ADC_SQR1_SQ15_0   (0x01UL << ADC_SQR1_SQ15_Pos) /*!< 0x00000400 */\r\n#define ADC_SQR1_SQ15_1   (0x02UL << ADC_SQR1_SQ15_Pos) /*!< 0x00000800 */\r\n#define ADC_SQR1_SQ15_2   (0x04UL << ADC_SQR1_SQ15_Pos) /*!< 0x00001000 */\r\n#define ADC_SQR1_SQ15_3   (0x08UL << ADC_SQR1_SQ15_Pos) /*!< 0x00002000 */\r\n#define ADC_SQR1_SQ15_4   (0x10UL << ADC_SQR1_SQ15_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_SQR1_SQ16_Pos (15U)\r\n#define ADC_SQR1_SQ16_Msk (0x1FUL << ADC_SQR1_SQ16_Pos) /*!< 0x000F8000 */\r\n#define ADC_SQR1_SQ16     ADC_SQR1_SQ16_Msk             /*!< ADC group regular sequencer rank 16 */\r\n#define ADC_SQR1_SQ16_0   (0x01UL << ADC_SQR1_SQ16_Pos) /*!< 0x00008000 */\r\n#define ADC_SQR1_SQ16_1   (0x02UL << ADC_SQR1_SQ16_Pos) /*!< 0x00010000 */\r\n#define ADC_SQR1_SQ16_2   (0x04UL << ADC_SQR1_SQ16_Pos) /*!< 0x00020000 */\r\n#define ADC_SQR1_SQ16_3   (0x08UL << ADC_SQR1_SQ16_Pos) /*!< 0x00040000 */\r\n#define ADC_SQR1_SQ16_4   (0x10UL << ADC_SQR1_SQ16_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_SQR1_L_Pos (20U)\r\n#define ADC_SQR1_L_Msk (0xFUL << ADC_SQR1_L_Pos) /*!< 0x00F00000 */\r\n#define ADC_SQR1_L     ADC_SQR1_L_Msk            /*!< ADC group regular sequencer scan length */\r\n#define ADC_SQR1_L_0   (0x1UL << ADC_SQR1_L_Pos) /*!< 0x00100000 */\r\n#define ADC_SQR1_L_1   (0x2UL << ADC_SQR1_L_Pos) /*!< 0x00200000 */\r\n#define ADC_SQR1_L_2   (0x4UL << ADC_SQR1_L_Pos) /*!< 0x00400000 */\r\n#define ADC_SQR1_L_3   (0x8UL << ADC_SQR1_L_Pos) /*!< 0x00800000 */\r\n\r\n/*******************  Bit definition for ADC_SQR2 register  *******************/\r\n#define ADC_SQR2_SQ7_Pos (0U)\r\n#define ADC_SQR2_SQ7_Msk (0x1FUL << ADC_SQR2_SQ7_Pos) /*!< 0x0000001F */\r\n#define ADC_SQR2_SQ7     ADC_SQR2_SQ7_Msk             /*!< ADC group regular sequencer rank 7 */\r\n#define ADC_SQR2_SQ7_0   (0x01UL << ADC_SQR2_SQ7_Pos) /*!< 0x00000001 */\r\n#define ADC_SQR2_SQ7_1   (0x02UL << ADC_SQR2_SQ7_Pos) /*!< 0x00000002 */\r\n#define ADC_SQR2_SQ7_2   (0x04UL << ADC_SQR2_SQ7_Pos) /*!< 0x00000004 */\r\n#define ADC_SQR2_SQ7_3   (0x08UL << ADC_SQR2_SQ7_Pos) /*!< 0x00000008 */\r\n#define ADC_SQR2_SQ7_4   (0x10UL << ADC_SQR2_SQ7_Pos) /*!< 0x00000010 */\r\n\r\n#define ADC_SQR2_SQ8_Pos (5U)\r\n#define ADC_SQR2_SQ8_Msk (0x1FUL << ADC_SQR2_SQ8_Pos) /*!< 0x000003E0 */\r\n#define ADC_SQR2_SQ8     ADC_SQR2_SQ8_Msk             /*!< ADC group regular sequencer rank 8 */\r\n#define ADC_SQR2_SQ8_0   (0x01UL << ADC_SQR2_SQ8_Pos) /*!< 0x00000020 */\r\n#define ADC_SQR2_SQ8_1   (0x02UL << ADC_SQR2_SQ8_Pos) /*!< 0x00000040 */\r\n#define ADC_SQR2_SQ8_2   (0x04UL << ADC_SQR2_SQ8_Pos) /*!< 0x00000080 */\r\n#define ADC_SQR2_SQ8_3   (0x08UL << ADC_SQR2_SQ8_Pos) /*!< 0x00000100 */\r\n#define ADC_SQR2_SQ8_4   (0x10UL << ADC_SQR2_SQ8_Pos) /*!< 0x00000200 */\r\n\r\n#define ADC_SQR2_SQ9_Pos (10U)\r\n#define ADC_SQR2_SQ9_Msk (0x1FUL << ADC_SQR2_SQ9_Pos) /*!< 0x00007C00 */\r\n#define ADC_SQR2_SQ9     ADC_SQR2_SQ9_Msk             /*!< ADC group regular sequencer rank 9 */\r\n#define ADC_SQR2_SQ9_0   (0x01UL << ADC_SQR2_SQ9_Pos) /*!< 0x00000400 */\r\n#define ADC_SQR2_SQ9_1   (0x02UL << ADC_SQR2_SQ9_Pos) /*!< 0x00000800 */\r\n#define ADC_SQR2_SQ9_2   (0x04UL << ADC_SQR2_SQ9_Pos) /*!< 0x00001000 */\r\n#define ADC_SQR2_SQ9_3   (0x08UL << ADC_SQR2_SQ9_Pos) /*!< 0x00002000 */\r\n#define ADC_SQR2_SQ9_4   (0x10UL << ADC_SQR2_SQ9_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_SQR2_SQ10_Pos (15U)\r\n#define ADC_SQR2_SQ10_Msk (0x1FUL << ADC_SQR2_SQ10_Pos) /*!< 0x000F8000 */\r\n#define ADC_SQR2_SQ10     ADC_SQR2_SQ10_Msk             /*!< ADC group regular sequencer rank 10 */\r\n#define ADC_SQR2_SQ10_0   (0x01UL << ADC_SQR2_SQ10_Pos) /*!< 0x00008000 */\r\n#define ADC_SQR2_SQ10_1   (0x02UL << ADC_SQR2_SQ10_Pos) /*!< 0x00010000 */\r\n#define ADC_SQR2_SQ10_2   (0x04UL << ADC_SQR2_SQ10_Pos) /*!< 0x00020000 */\r\n#define ADC_SQR2_SQ10_3   (0x08UL << ADC_SQR2_SQ10_Pos) /*!< 0x00040000 */\r\n#define ADC_SQR2_SQ10_4   (0x10UL << ADC_SQR2_SQ10_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_SQR2_SQ11_Pos (20U)\r\n#define ADC_SQR2_SQ11_Msk (0x1FUL << ADC_SQR2_SQ11_Pos) /*!< 0x01F00000 */\r\n#define ADC_SQR2_SQ11     ADC_SQR2_SQ11_Msk             /*!< ADC group regular sequencer rank 1 */\r\n#define ADC_SQR2_SQ11_0   (0x01UL << ADC_SQR2_SQ11_Pos) /*!< 0x00100000 */\r\n#define ADC_SQR2_SQ11_1   (0x02UL << ADC_SQR2_SQ11_Pos) /*!< 0x00200000 */\r\n#define ADC_SQR2_SQ11_2   (0x04UL << ADC_SQR2_SQ11_Pos) /*!< 0x00400000 */\r\n#define ADC_SQR2_SQ11_3   (0x08UL << ADC_SQR2_SQ11_Pos) /*!< 0x00800000 */\r\n#define ADC_SQR2_SQ11_4   (0x10UL << ADC_SQR2_SQ11_Pos) /*!< 0x01000000 */\r\n\r\n#define ADC_SQR2_SQ12_Pos (25U)\r\n#define ADC_SQR2_SQ12_Msk (0x1FUL << ADC_SQR2_SQ12_Pos) /*!< 0x3E000000 */\r\n#define ADC_SQR2_SQ12     ADC_SQR2_SQ12_Msk             /*!< ADC group regular sequencer rank 12 */\r\n#define ADC_SQR2_SQ12_0   (0x01UL << ADC_SQR2_SQ12_Pos) /*!< 0x02000000 */\r\n#define ADC_SQR2_SQ12_1   (0x02UL << ADC_SQR2_SQ12_Pos) /*!< 0x04000000 */\r\n#define ADC_SQR2_SQ12_2   (0x04UL << ADC_SQR2_SQ12_Pos) /*!< 0x08000000 */\r\n#define ADC_SQR2_SQ12_3   (0x08UL << ADC_SQR2_SQ12_Pos) /*!< 0x10000000 */\r\n#define ADC_SQR2_SQ12_4   (0x10UL << ADC_SQR2_SQ12_Pos) /*!< 0x20000000 */\r\n\r\n/*******************  Bit definition for ADC_SQR3 register  *******************/\r\n#define ADC_SQR3_SQ1_Pos (0U)\r\n#define ADC_SQR3_SQ1_Msk (0x1FUL << ADC_SQR3_SQ1_Pos) /*!< 0x0000001F */\r\n#define ADC_SQR3_SQ1     ADC_SQR3_SQ1_Msk             /*!< ADC group regular sequencer rank 1 */\r\n#define ADC_SQR3_SQ1_0   (0x01UL << ADC_SQR3_SQ1_Pos) /*!< 0x00000001 */\r\n#define ADC_SQR3_SQ1_1   (0x02UL << ADC_SQR3_SQ1_Pos) /*!< 0x00000002 */\r\n#define ADC_SQR3_SQ1_2   (0x04UL << ADC_SQR3_SQ1_Pos) /*!< 0x00000004 */\r\n#define ADC_SQR3_SQ1_3   (0x08UL << ADC_SQR3_SQ1_Pos) /*!< 0x00000008 */\r\n#define ADC_SQR3_SQ1_4   (0x10UL << ADC_SQR3_SQ1_Pos) /*!< 0x00000010 */\r\n\r\n#define ADC_SQR3_SQ2_Pos (5U)\r\n#define ADC_SQR3_SQ2_Msk (0x1FUL << ADC_SQR3_SQ2_Pos) /*!< 0x000003E0 */\r\n#define ADC_SQR3_SQ2     ADC_SQR3_SQ2_Msk             /*!< ADC group regular sequencer rank 2 */\r\n#define ADC_SQR3_SQ2_0   (0x01UL << ADC_SQR3_SQ2_Pos) /*!< 0x00000020 */\r\n#define ADC_SQR3_SQ2_1   (0x02UL << ADC_SQR3_SQ2_Pos) /*!< 0x00000040 */\r\n#define ADC_SQR3_SQ2_2   (0x04UL << ADC_SQR3_SQ2_Pos) /*!< 0x00000080 */\r\n#define ADC_SQR3_SQ2_3   (0x08UL << ADC_SQR3_SQ2_Pos) /*!< 0x00000100 */\r\n#define ADC_SQR3_SQ2_4   (0x10UL << ADC_SQR3_SQ2_Pos) /*!< 0x00000200 */\r\n\r\n#define ADC_SQR3_SQ3_Pos (10U)\r\n#define ADC_SQR3_SQ3_Msk (0x1FUL << ADC_SQR3_SQ3_Pos) /*!< 0x00007C00 */\r\n#define ADC_SQR3_SQ3     ADC_SQR3_SQ3_Msk             /*!< ADC group regular sequencer rank 3 */\r\n#define ADC_SQR3_SQ3_0   (0x01UL << ADC_SQR3_SQ3_Pos) /*!< 0x00000400 */\r\n#define ADC_SQR3_SQ3_1   (0x02UL << ADC_SQR3_SQ3_Pos) /*!< 0x00000800 */\r\n#define ADC_SQR3_SQ3_2   (0x04UL << ADC_SQR3_SQ3_Pos) /*!< 0x00001000 */\r\n#define ADC_SQR3_SQ3_3   (0x08UL << ADC_SQR3_SQ3_Pos) /*!< 0x00002000 */\r\n#define ADC_SQR3_SQ3_4   (0x10UL << ADC_SQR3_SQ3_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_SQR3_SQ4_Pos (15U)\r\n#define ADC_SQR3_SQ4_Msk (0x1FUL << ADC_SQR3_SQ4_Pos) /*!< 0x000F8000 */\r\n#define ADC_SQR3_SQ4     ADC_SQR3_SQ4_Msk             /*!< ADC group regular sequencer rank 4 */\r\n#define ADC_SQR3_SQ4_0   (0x01UL << ADC_SQR3_SQ4_Pos) /*!< 0x00008000 */\r\n#define ADC_SQR3_SQ4_1   (0x02UL << ADC_SQR3_SQ4_Pos) /*!< 0x00010000 */\r\n#define ADC_SQR3_SQ4_2   (0x04UL << ADC_SQR3_SQ4_Pos) /*!< 0x00020000 */\r\n#define ADC_SQR3_SQ4_3   (0x08UL << ADC_SQR3_SQ4_Pos) /*!< 0x00040000 */\r\n#define ADC_SQR3_SQ4_4   (0x10UL << ADC_SQR3_SQ4_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_SQR3_SQ5_Pos (20U)\r\n#define ADC_SQR3_SQ5_Msk (0x1FUL << ADC_SQR3_SQ5_Pos) /*!< 0x01F00000 */\r\n#define ADC_SQR3_SQ5     ADC_SQR3_SQ5_Msk             /*!< ADC group regular sequencer rank 5 */\r\n#define ADC_SQR3_SQ5_0   (0x01UL << ADC_SQR3_SQ5_Pos) /*!< 0x00100000 */\r\n#define ADC_SQR3_SQ5_1   (0x02UL << ADC_SQR3_SQ5_Pos) /*!< 0x00200000 */\r\n#define ADC_SQR3_SQ5_2   (0x04UL << ADC_SQR3_SQ5_Pos) /*!< 0x00400000 */\r\n#define ADC_SQR3_SQ5_3   (0x08UL << ADC_SQR3_SQ5_Pos) /*!< 0x00800000 */\r\n#define ADC_SQR3_SQ5_4   (0x10UL << ADC_SQR3_SQ5_Pos) /*!< 0x01000000 */\r\n\r\n#define ADC_SQR3_SQ6_Pos (25U)\r\n#define ADC_SQR3_SQ6_Msk (0x1FUL << ADC_SQR3_SQ6_Pos) /*!< 0x3E000000 */\r\n#define ADC_SQR3_SQ6     ADC_SQR3_SQ6_Msk             /*!< ADC group regular sequencer rank 6 */\r\n#define ADC_SQR3_SQ6_0   (0x01UL << ADC_SQR3_SQ6_Pos) /*!< 0x02000000 */\r\n#define ADC_SQR3_SQ6_1   (0x02UL << ADC_SQR3_SQ6_Pos) /*!< 0x04000000 */\r\n#define ADC_SQR3_SQ6_2   (0x04UL << ADC_SQR3_SQ6_Pos) /*!< 0x08000000 */\r\n#define ADC_SQR3_SQ6_3   (0x08UL << ADC_SQR3_SQ6_Pos) /*!< 0x10000000 */\r\n#define ADC_SQR3_SQ6_4   (0x10UL << ADC_SQR3_SQ6_Pos) /*!< 0x20000000 */\r\n\r\n/*******************  Bit definition for ADC_JSQR register  *******************/\r\n#define ADC_JSQR_JSQ1_Pos (0U)\r\n#define ADC_JSQR_JSQ1_Msk (0x1FUL << ADC_JSQR_JSQ1_Pos) /*!< 0x0000001F */\r\n#define ADC_JSQR_JSQ1     ADC_JSQR_JSQ1_Msk             /*!< ADC group injected sequencer rank 1 */\r\n#define ADC_JSQR_JSQ1_0   (0x01UL << ADC_JSQR_JSQ1_Pos) /*!< 0x00000001 */\r\n#define ADC_JSQR_JSQ1_1   (0x02UL << ADC_JSQR_JSQ1_Pos) /*!< 0x00000002 */\r\n#define ADC_JSQR_JSQ1_2   (0x04UL << ADC_JSQR_JSQ1_Pos) /*!< 0x00000004 */\r\n#define ADC_JSQR_JSQ1_3   (0x08UL << ADC_JSQR_JSQ1_Pos) /*!< 0x00000008 */\r\n#define ADC_JSQR_JSQ1_4   (0x10UL << ADC_JSQR_JSQ1_Pos) /*!< 0x00000010 */\r\n\r\n#define ADC_JSQR_JSQ2_Pos (5U)\r\n#define ADC_JSQR_JSQ2_Msk (0x1FUL << ADC_JSQR_JSQ2_Pos) /*!< 0x000003E0 */\r\n#define ADC_JSQR_JSQ2     ADC_JSQR_JSQ2_Msk             /*!< ADC group injected sequencer rank 2 */\r\n#define ADC_JSQR_JSQ2_0   (0x01UL << ADC_JSQR_JSQ2_Pos) /*!< 0x00000020 */\r\n#define ADC_JSQR_JSQ2_1   (0x02UL << ADC_JSQR_JSQ2_Pos) /*!< 0x00000040 */\r\n#define ADC_JSQR_JSQ2_2   (0x04UL << ADC_JSQR_JSQ2_Pos) /*!< 0x00000080 */\r\n#define ADC_JSQR_JSQ2_3   (0x08UL << ADC_JSQR_JSQ2_Pos) /*!< 0x00000100 */\r\n#define ADC_JSQR_JSQ2_4   (0x10UL << ADC_JSQR_JSQ2_Pos) /*!< 0x00000200 */\r\n\r\n#define ADC_JSQR_JSQ3_Pos (10U)\r\n#define ADC_JSQR_JSQ3_Msk (0x1FUL << ADC_JSQR_JSQ3_Pos) /*!< 0x00007C00 */\r\n#define ADC_JSQR_JSQ3     ADC_JSQR_JSQ3_Msk             /*!< ADC group injected sequencer rank 3 */\r\n#define ADC_JSQR_JSQ3_0   (0x01UL << ADC_JSQR_JSQ3_Pos) /*!< 0x00000400 */\r\n#define ADC_JSQR_JSQ3_1   (0x02UL << ADC_JSQR_JSQ3_Pos) /*!< 0x00000800 */\r\n#define ADC_JSQR_JSQ3_2   (0x04UL << ADC_JSQR_JSQ3_Pos) /*!< 0x00001000 */\r\n#define ADC_JSQR_JSQ3_3   (0x08UL << ADC_JSQR_JSQ3_Pos) /*!< 0x00002000 */\r\n#define ADC_JSQR_JSQ3_4   (0x10UL << ADC_JSQR_JSQ3_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_JSQR_JSQ4_Pos (15U)\r\n#define ADC_JSQR_JSQ4_Msk (0x1FUL << ADC_JSQR_JSQ4_Pos) /*!< 0x000F8000 */\r\n#define ADC_JSQR_JSQ4     ADC_JSQR_JSQ4_Msk             /*!< ADC group injected sequencer rank 4 */\r\n#define ADC_JSQR_JSQ4_0   (0x01UL << ADC_JSQR_JSQ4_Pos) /*!< 0x00008000 */\r\n#define ADC_JSQR_JSQ4_1   (0x02UL << ADC_JSQR_JSQ4_Pos) /*!< 0x00010000 */\r\n#define ADC_JSQR_JSQ4_2   (0x04UL << ADC_JSQR_JSQ4_Pos) /*!< 0x00020000 */\r\n#define ADC_JSQR_JSQ4_3   (0x08UL << ADC_JSQR_JSQ4_Pos) /*!< 0x00040000 */\r\n#define ADC_JSQR_JSQ4_4   (0x10UL << ADC_JSQR_JSQ4_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_JSQR_JL_Pos (20U)\r\n#define ADC_JSQR_JL_Msk (0x3UL << ADC_JSQR_JL_Pos) /*!< 0x00300000 */\r\n#define ADC_JSQR_JL     ADC_JSQR_JL_Msk            /*!< ADC group injected sequencer scan length */\r\n#define ADC_JSQR_JL_0   (0x1UL << ADC_JSQR_JL_Pos) /*!< 0x00100000 */\r\n#define ADC_JSQR_JL_1   (0x2UL << ADC_JSQR_JL_Pos) /*!< 0x00200000 */\r\n\r\n/*******************  Bit definition for ADC_JDR1 register  *******************/\r\n#define ADC_JDR1_JDATA_Pos (0U)\r\n#define ADC_JDR1_JDATA_Msk (0xFFFFUL << ADC_JDR1_JDATA_Pos) /*!< 0x0000FFFF */\r\n#define ADC_JDR1_JDATA     ADC_JDR1_JDATA_Msk               /*!< ADC group injected sequencer rank 1 conversion data */\r\n\r\n/*******************  Bit definition for ADC_JDR2 register  *******************/\r\n#define ADC_JDR2_JDATA_Pos (0U)\r\n#define ADC_JDR2_JDATA_Msk (0xFFFFUL << ADC_JDR2_JDATA_Pos) /*!< 0x0000FFFF */\r\n#define ADC_JDR2_JDATA     ADC_JDR2_JDATA_Msk               /*!< ADC group injected sequencer rank 2 conversion data */\r\n\r\n/*******************  Bit definition for ADC_JDR3 register  *******************/\r\n#define ADC_JDR3_JDATA_Pos (0U)\r\n#define ADC_JDR3_JDATA_Msk (0xFFFFUL << ADC_JDR3_JDATA_Pos) /*!< 0x0000FFFF */\r\n#define ADC_JDR3_JDATA     ADC_JDR3_JDATA_Msk               /*!< ADC group injected sequencer rank 3 conversion data */\r\n\r\n/*******************  Bit definition for ADC_JDR4 register  *******************/\r\n#define ADC_JDR4_JDATA_Pos (0U)\r\n#define ADC_JDR4_JDATA_Msk (0xFFFFUL << ADC_JDR4_JDATA_Pos) /*!< 0x0000FFFF */\r\n#define ADC_JDR4_JDATA     ADC_JDR4_JDATA_Msk               /*!< ADC group injected sequencer rank 4 conversion data */\r\n\r\n/********************  Bit definition for ADC_DR register  ********************/\r\n#define ADC_DR_DATA_Pos     (0U)\r\n#define ADC_DR_DATA_Msk     (0xFFFFUL << ADC_DR_DATA_Pos) /*!< 0x0000FFFF */\r\n#define ADC_DR_DATA         ADC_DR_DATA_Msk               /*!< ADC group regular conversion data */\r\n#define ADC_DR_ADC2DATA_Pos (16U)\r\n#define ADC_DR_ADC2DATA_Msk (0xFFFFUL << ADC_DR_ADC2DATA_Pos) /*!< 0xFFFF0000 */\r\n#define ADC_DR_ADC2DATA     ADC_DR_ADC2DATA_Msk               /*!< ADC group regular conversion data for ADC slave, in multimode */\r\n\r\n/*****************************************************************************/\r\n/*                                                                           */\r\n/*                               Timers (TIM)                                */\r\n/*                                                                           */\r\n/*****************************************************************************/\r\n/*******************  Bit definition for TIM_CR1 register  *******************/\r\n#define TIM_CR1_CEN_Pos  (0U)\r\n#define TIM_CR1_CEN_Msk  (0x1UL << TIM_CR1_CEN_Pos) /*!< 0x00000001 */\r\n#define TIM_CR1_CEN      TIM_CR1_CEN_Msk            /*!<Counter enable */\r\n#define TIM_CR1_UDIS_Pos (1U)\r\n#define TIM_CR1_UDIS_Msk (0x1UL << TIM_CR1_UDIS_Pos) /*!< 0x00000002 */\r\n#define TIM_CR1_UDIS     TIM_CR1_UDIS_Msk            /*!<Update disable */\r\n#define TIM_CR1_URS_Pos  (2U)\r\n#define TIM_CR1_URS_Msk  (0x1UL << TIM_CR1_URS_Pos) /*!< 0x00000004 */\r\n#define TIM_CR1_URS      TIM_CR1_URS_Msk            /*!<Update request source */\r\n#define TIM_CR1_OPM_Pos  (3U)\r\n#define TIM_CR1_OPM_Msk  (0x1UL << TIM_CR1_OPM_Pos) /*!< 0x00000008 */\r\n#define TIM_CR1_OPM      TIM_CR1_OPM_Msk            /*!<One pulse mode */\r\n#define TIM_CR1_DIR_Pos  (4U)\r\n#define TIM_CR1_DIR_Msk  (0x1UL << TIM_CR1_DIR_Pos) /*!< 0x00000010 */\r\n#define TIM_CR1_DIR      TIM_CR1_DIR_Msk            /*!<Direction */\r\n\r\n#define TIM_CR1_CMS_Pos (5U)\r\n#define TIM_CR1_CMS_Msk (0x3UL << TIM_CR1_CMS_Pos) /*!< 0x00000060 */\r\n#define TIM_CR1_CMS     TIM_CR1_CMS_Msk            /*!<CMS[1:0] bits (Center-aligned mode selection) */\r\n#define TIM_CR1_CMS_0   (0x1UL << TIM_CR1_CMS_Pos) /*!< 0x00000020 */\r\n#define TIM_CR1_CMS_1   (0x2UL << TIM_CR1_CMS_Pos) /*!< 0x00000040 */\r\n\r\n#define TIM_CR1_ARPE_Pos (7U)\r\n#define TIM_CR1_ARPE_Msk (0x1UL << TIM_CR1_ARPE_Pos) /*!< 0x00000080 */\r\n#define TIM_CR1_ARPE     TIM_CR1_ARPE_Msk            /*!<Auto-reload preload enable */\r\n\r\n#define TIM_CR1_CKD_Pos (8U)\r\n#define TIM_CR1_CKD_Msk (0x3UL << TIM_CR1_CKD_Pos) /*!< 0x00000300 */\r\n#define TIM_CR1_CKD     TIM_CR1_CKD_Msk            /*!<CKD[1:0] bits (clock division) */\r\n#define TIM_CR1_CKD_0   (0x1UL << TIM_CR1_CKD_Pos) /*!< 0x00000100 */\r\n#define TIM_CR1_CKD_1   (0x2UL << TIM_CR1_CKD_Pos) /*!< 0x00000200 */\r\n\r\n/*******************  Bit definition for TIM_CR2 register  *******************/\r\n#define TIM_CR2_CCPC_Pos (0U)\r\n#define TIM_CR2_CCPC_Msk (0x1UL << TIM_CR2_CCPC_Pos) /*!< 0x00000001 */\r\n#define TIM_CR2_CCPC     TIM_CR2_CCPC_Msk            /*!<Capture/Compare Preloaded Control */\r\n#define TIM_CR2_CCUS_Pos (2U)\r\n#define TIM_CR2_CCUS_Msk (0x1UL << TIM_CR2_CCUS_Pos) /*!< 0x00000004 */\r\n#define TIM_CR2_CCUS     TIM_CR2_CCUS_Msk            /*!<Capture/Compare Control Update Selection */\r\n#define TIM_CR2_CCDS_Pos (3U)\r\n#define TIM_CR2_CCDS_Msk (0x1UL << TIM_CR2_CCDS_Pos) /*!< 0x00000008 */\r\n#define TIM_CR2_CCDS     TIM_CR2_CCDS_Msk            /*!<Capture/Compare DMA Selection */\r\n\r\n#define TIM_CR2_MMS_Pos (4U)\r\n#define TIM_CR2_MMS_Msk (0x7UL << TIM_CR2_MMS_Pos) /*!< 0x00000070 */\r\n#define TIM_CR2_MMS     TIM_CR2_MMS_Msk            /*!<MMS[2:0] bits (Master Mode Selection) */\r\n#define TIM_CR2_MMS_0   (0x1UL << TIM_CR2_MMS_Pos) /*!< 0x00000010 */\r\n#define TIM_CR2_MMS_1   (0x2UL << TIM_CR2_MMS_Pos) /*!< 0x00000020 */\r\n#define TIM_CR2_MMS_2   (0x4UL << TIM_CR2_MMS_Pos) /*!< 0x00000040 */\r\n\r\n#define TIM_CR2_TI1S_Pos  (7U)\r\n#define TIM_CR2_TI1S_Msk  (0x1UL << TIM_CR2_TI1S_Pos) /*!< 0x00000080 */\r\n#define TIM_CR2_TI1S      TIM_CR2_TI1S_Msk            /*!<TI1 Selection */\r\n#define TIM_CR2_OIS1_Pos  (8U)\r\n#define TIM_CR2_OIS1_Msk  (0x1UL << TIM_CR2_OIS1_Pos) /*!< 0x00000100 */\r\n#define TIM_CR2_OIS1      TIM_CR2_OIS1_Msk            /*!<Output Idle state 1 (OC1 output) */\r\n#define TIM_CR2_OIS1N_Pos (9U)\r\n#define TIM_CR2_OIS1N_Msk (0x1UL << TIM_CR2_OIS1N_Pos) /*!< 0x00000200 */\r\n#define TIM_CR2_OIS1N     TIM_CR2_OIS1N_Msk            /*!<Output Idle state 1 (OC1N output) */\r\n#define TIM_CR2_OIS2_Pos  (10U)\r\n#define TIM_CR2_OIS2_Msk  (0x1UL << TIM_CR2_OIS2_Pos) /*!< 0x00000400 */\r\n#define TIM_CR2_OIS2      TIM_CR2_OIS2_Msk            /*!<Output Idle state 2 (OC2 output) */\r\n#define TIM_CR2_OIS2N_Pos (11U)\r\n#define TIM_CR2_OIS2N_Msk (0x1UL << TIM_CR2_OIS2N_Pos) /*!< 0x00000800 */\r\n#define TIM_CR2_OIS2N     TIM_CR2_OIS2N_Msk            /*!<Output Idle state 2 (OC2N output) */\r\n#define TIM_CR2_OIS3_Pos  (12U)\r\n#define TIM_CR2_OIS3_Msk  (0x1UL << TIM_CR2_OIS3_Pos) /*!< 0x00001000 */\r\n#define TIM_CR2_OIS3      TIM_CR2_OIS3_Msk            /*!<Output Idle state 3 (OC3 output) */\r\n#define TIM_CR2_OIS3N_Pos (13U)\r\n#define TIM_CR2_OIS3N_Msk (0x1UL << TIM_CR2_OIS3N_Pos) /*!< 0x00002000 */\r\n#define TIM_CR2_OIS3N     TIM_CR2_OIS3N_Msk            /*!<Output Idle state 3 (OC3N output) */\r\n#define TIM_CR2_OIS4_Pos  (14U)\r\n#define TIM_CR2_OIS4_Msk  (0x1UL << TIM_CR2_OIS4_Pos) /*!< 0x00004000 */\r\n#define TIM_CR2_OIS4      TIM_CR2_OIS4_Msk            /*!<Output Idle state 4 (OC4 output) */\r\n\r\n/*******************  Bit definition for TIM_SMCR register  ******************/\r\n#define TIM_SMCR_SMS_Pos (0U)\r\n#define TIM_SMCR_SMS_Msk (0x7UL << TIM_SMCR_SMS_Pos) /*!< 0x00000007 */\r\n#define TIM_SMCR_SMS     TIM_SMCR_SMS_Msk            /*!<SMS[2:0] bits (Slave mode selection) */\r\n#define TIM_SMCR_SMS_0   (0x1UL << TIM_SMCR_SMS_Pos) /*!< 0x00000001 */\r\n#define TIM_SMCR_SMS_1   (0x2UL << TIM_SMCR_SMS_Pos) /*!< 0x00000002 */\r\n#define TIM_SMCR_SMS_2   (0x4UL << TIM_SMCR_SMS_Pos) /*!< 0x00000004 */\r\n\r\n#define TIM_SMCR_TS_Pos (4U)\r\n#define TIM_SMCR_TS_Msk (0x7UL << TIM_SMCR_TS_Pos) /*!< 0x00000070 */\r\n#define TIM_SMCR_TS     TIM_SMCR_TS_Msk            /*!<TS[2:0] bits (Trigger selection) */\r\n#define TIM_SMCR_TS_0   (0x1UL << TIM_SMCR_TS_Pos) /*!< 0x00000010 */\r\n#define TIM_SMCR_TS_1   (0x2UL << TIM_SMCR_TS_Pos) /*!< 0x00000020 */\r\n#define TIM_SMCR_TS_2   (0x4UL << TIM_SMCR_TS_Pos) /*!< 0x00000040 */\r\n\r\n#define TIM_SMCR_MSM_Pos (7U)\r\n#define TIM_SMCR_MSM_Msk (0x1UL << TIM_SMCR_MSM_Pos) /*!< 0x00000080 */\r\n#define TIM_SMCR_MSM     TIM_SMCR_MSM_Msk            /*!<Master/slave mode */\r\n\r\n#define TIM_SMCR_ETF_Pos (8U)\r\n#define TIM_SMCR_ETF_Msk (0xFUL << TIM_SMCR_ETF_Pos) /*!< 0x00000F00 */\r\n#define TIM_SMCR_ETF     TIM_SMCR_ETF_Msk            /*!<ETF[3:0] bits (External trigger filter) */\r\n#define TIM_SMCR_ETF_0   (0x1UL << TIM_SMCR_ETF_Pos) /*!< 0x00000100 */\r\n#define TIM_SMCR_ETF_1   (0x2UL << TIM_SMCR_ETF_Pos) /*!< 0x00000200 */\r\n#define TIM_SMCR_ETF_2   (0x4UL << TIM_SMCR_ETF_Pos) /*!< 0x00000400 */\r\n#define TIM_SMCR_ETF_3   (0x8UL << TIM_SMCR_ETF_Pos) /*!< 0x00000800 */\r\n\r\n#define TIM_SMCR_ETPS_Pos (12U)\r\n#define TIM_SMCR_ETPS_Msk (0x3UL << TIM_SMCR_ETPS_Pos) /*!< 0x00003000 */\r\n#define TIM_SMCR_ETPS     TIM_SMCR_ETPS_Msk            /*!<ETPS[1:0] bits (External trigger prescaler) */\r\n#define TIM_SMCR_ETPS_0   (0x1UL << TIM_SMCR_ETPS_Pos) /*!< 0x00001000 */\r\n#define TIM_SMCR_ETPS_1   (0x2UL << TIM_SMCR_ETPS_Pos) /*!< 0x00002000 */\r\n\r\n#define TIM_SMCR_ECE_Pos (14U)\r\n#define TIM_SMCR_ECE_Msk (0x1UL << TIM_SMCR_ECE_Pos) /*!< 0x00004000 */\r\n#define TIM_SMCR_ECE     TIM_SMCR_ECE_Msk            /*!<External clock enable */\r\n#define TIM_SMCR_ETP_Pos (15U)\r\n#define TIM_SMCR_ETP_Msk (0x1UL << TIM_SMCR_ETP_Pos) /*!< 0x00008000 */\r\n#define TIM_SMCR_ETP     TIM_SMCR_ETP_Msk            /*!<External trigger polarity */\r\n\r\n/*******************  Bit definition for TIM_DIER register  ******************/\r\n#define TIM_DIER_UIE_Pos   (0U)\r\n#define TIM_DIER_UIE_Msk   (0x1UL << TIM_DIER_UIE_Pos) /*!< 0x00000001 */\r\n#define TIM_DIER_UIE       TIM_DIER_UIE_Msk            /*!<Update interrupt enable */\r\n#define TIM_DIER_CC1IE_Pos (1U)\r\n#define TIM_DIER_CC1IE_Msk (0x1UL << TIM_DIER_CC1IE_Pos) /*!< 0x00000002 */\r\n#define TIM_DIER_CC1IE     TIM_DIER_CC1IE_Msk            /*!<Capture/Compare 1 interrupt enable */\r\n#define TIM_DIER_CC2IE_Pos (2U)\r\n#define TIM_DIER_CC2IE_Msk (0x1UL << TIM_DIER_CC2IE_Pos) /*!< 0x00000004 */\r\n#define TIM_DIER_CC2IE     TIM_DIER_CC2IE_Msk            /*!<Capture/Compare 2 interrupt enable */\r\n#define TIM_DIER_CC3IE_Pos (3U)\r\n#define TIM_DIER_CC3IE_Msk (0x1UL << TIM_DIER_CC3IE_Pos) /*!< 0x00000008 */\r\n#define TIM_DIER_CC3IE     TIM_DIER_CC3IE_Msk            /*!<Capture/Compare 3 interrupt enable */\r\n#define TIM_DIER_CC4IE_Pos (4U)\r\n#define TIM_DIER_CC4IE_Msk (0x1UL << TIM_DIER_CC4IE_Pos) /*!< 0x00000010 */\r\n#define TIM_DIER_CC4IE     TIM_DIER_CC4IE_Msk            /*!<Capture/Compare 4 interrupt enable */\r\n#define TIM_DIER_COMIE_Pos (5U)\r\n#define TIM_DIER_COMIE_Msk (0x1UL << TIM_DIER_COMIE_Pos) /*!< 0x00000020 */\r\n#define TIM_DIER_COMIE     TIM_DIER_COMIE_Msk            /*!<COM interrupt enable */\r\n#define TIM_DIER_TIE_Pos   (6U)\r\n#define TIM_DIER_TIE_Msk   (0x1UL << TIM_DIER_TIE_Pos) /*!< 0x00000040 */\r\n#define TIM_DIER_TIE       TIM_DIER_TIE_Msk            /*!<Trigger interrupt enable */\r\n#define TIM_DIER_BIE_Pos   (7U)\r\n#define TIM_DIER_BIE_Msk   (0x1UL << TIM_DIER_BIE_Pos) /*!< 0x00000080 */\r\n#define TIM_DIER_BIE       TIM_DIER_BIE_Msk            /*!<Break interrupt enable */\r\n#define TIM_DIER_UDE_Pos   (8U)\r\n#define TIM_DIER_UDE_Msk   (0x1UL << TIM_DIER_UDE_Pos) /*!< 0x00000100 */\r\n#define TIM_DIER_UDE       TIM_DIER_UDE_Msk            /*!<Update DMA request enable */\r\n#define TIM_DIER_CC1DE_Pos (9U)\r\n#define TIM_DIER_CC1DE_Msk (0x1UL << TIM_DIER_CC1DE_Pos) /*!< 0x00000200 */\r\n#define TIM_DIER_CC1DE     TIM_DIER_CC1DE_Msk            /*!<Capture/Compare 1 DMA request enable */\r\n#define TIM_DIER_CC2DE_Pos (10U)\r\n#define TIM_DIER_CC2DE_Msk (0x1UL << TIM_DIER_CC2DE_Pos) /*!< 0x00000400 */\r\n#define TIM_DIER_CC2DE     TIM_DIER_CC2DE_Msk            /*!<Capture/Compare 2 DMA request enable */\r\n#define TIM_DIER_CC3DE_Pos (11U)\r\n#define TIM_DIER_CC3DE_Msk (0x1UL << TIM_DIER_CC3DE_Pos) /*!< 0x00000800 */\r\n#define TIM_DIER_CC3DE     TIM_DIER_CC3DE_Msk            /*!<Capture/Compare 3 DMA request enable */\r\n#define TIM_DIER_CC4DE_Pos (12U)\r\n#define TIM_DIER_CC4DE_Msk (0x1UL << TIM_DIER_CC4DE_Pos) /*!< 0x00001000 */\r\n#define TIM_DIER_CC4DE     TIM_DIER_CC4DE_Msk            /*!<Capture/Compare 4 DMA request enable */\r\n#define TIM_DIER_COMDE_Pos (13U)\r\n#define TIM_DIER_COMDE_Msk (0x1UL << TIM_DIER_COMDE_Pos) /*!< 0x00002000 */\r\n#define TIM_DIER_COMDE     TIM_DIER_COMDE_Msk            /*!<COM DMA request enable */\r\n#define TIM_DIER_TDE_Pos   (14U)\r\n#define TIM_DIER_TDE_Msk   (0x1UL << TIM_DIER_TDE_Pos) /*!< 0x00004000 */\r\n#define TIM_DIER_TDE       TIM_DIER_TDE_Msk            /*!<Trigger DMA request enable */\r\n\r\n/********************  Bit definition for TIM_SR register  *******************/\r\n#define TIM_SR_UIF_Pos   (0U)\r\n#define TIM_SR_UIF_Msk   (0x1UL << TIM_SR_UIF_Pos) /*!< 0x00000001 */\r\n#define TIM_SR_UIF       TIM_SR_UIF_Msk            /*!<Update interrupt Flag */\r\n#define TIM_SR_CC1IF_Pos (1U)\r\n#define TIM_SR_CC1IF_Msk (0x1UL << TIM_SR_CC1IF_Pos) /*!< 0x00000002 */\r\n#define TIM_SR_CC1IF     TIM_SR_CC1IF_Msk            /*!<Capture/Compare 1 interrupt Flag */\r\n#define TIM_SR_CC2IF_Pos (2U)\r\n#define TIM_SR_CC2IF_Msk (0x1UL << TIM_SR_CC2IF_Pos) /*!< 0x00000004 */\r\n#define TIM_SR_CC2IF     TIM_SR_CC2IF_Msk            /*!<Capture/Compare 2 interrupt Flag */\r\n#define TIM_SR_CC3IF_Pos (3U)\r\n#define TIM_SR_CC3IF_Msk (0x1UL << TIM_SR_CC3IF_Pos) /*!< 0x00000008 */\r\n#define TIM_SR_CC3IF     TIM_SR_CC3IF_Msk            /*!<Capture/Compare 3 interrupt Flag */\r\n#define TIM_SR_CC4IF_Pos (4U)\r\n#define TIM_SR_CC4IF_Msk (0x1UL << TIM_SR_CC4IF_Pos) /*!< 0x00000010 */\r\n#define TIM_SR_CC4IF     TIM_SR_CC4IF_Msk            /*!<Capture/Compare 4 interrupt Flag */\r\n#define TIM_SR_COMIF_Pos (5U)\r\n#define TIM_SR_COMIF_Msk (0x1UL << TIM_SR_COMIF_Pos) /*!< 0x00000020 */\r\n#define TIM_SR_COMIF     TIM_SR_COMIF_Msk            /*!<COM interrupt Flag */\r\n#define TIM_SR_TIF_Pos   (6U)\r\n#define TIM_SR_TIF_Msk   (0x1UL << TIM_SR_TIF_Pos) /*!< 0x00000040 */\r\n#define TIM_SR_TIF       TIM_SR_TIF_Msk            /*!<Trigger interrupt Flag */\r\n#define TIM_SR_BIF_Pos   (7U)\r\n#define TIM_SR_BIF_Msk   (0x1UL << TIM_SR_BIF_Pos) /*!< 0x00000080 */\r\n#define TIM_SR_BIF       TIM_SR_BIF_Msk            /*!<Break interrupt Flag */\r\n#define TIM_SR_CC1OF_Pos (9U)\r\n#define TIM_SR_CC1OF_Msk (0x1UL << TIM_SR_CC1OF_Pos) /*!< 0x00000200 */\r\n#define TIM_SR_CC1OF     TIM_SR_CC1OF_Msk            /*!<Capture/Compare 1 Overcapture Flag */\r\n#define TIM_SR_CC2OF_Pos (10U)\r\n#define TIM_SR_CC2OF_Msk (0x1UL << TIM_SR_CC2OF_Pos) /*!< 0x00000400 */\r\n#define TIM_SR_CC2OF     TIM_SR_CC2OF_Msk            /*!<Capture/Compare 2 Overcapture Flag */\r\n#define TIM_SR_CC3OF_Pos (11U)\r\n#define TIM_SR_CC3OF_Msk (0x1UL << TIM_SR_CC3OF_Pos) /*!< 0x00000800 */\r\n#define TIM_SR_CC3OF     TIM_SR_CC3OF_Msk            /*!<Capture/Compare 3 Overcapture Flag */\r\n#define TIM_SR_CC4OF_Pos (12U)\r\n#define TIM_SR_CC4OF_Msk (0x1UL << TIM_SR_CC4OF_Pos) /*!< 0x00001000 */\r\n#define TIM_SR_CC4OF     TIM_SR_CC4OF_Msk            /*!<Capture/Compare 4 Overcapture Flag */\r\n\r\n/*******************  Bit definition for TIM_EGR register  *******************/\r\n#define TIM_EGR_UG_Pos   (0U)\r\n#define TIM_EGR_UG_Msk   (0x1UL << TIM_EGR_UG_Pos) /*!< 0x00000001 */\r\n#define TIM_EGR_UG       TIM_EGR_UG_Msk            /*!<Update Generation */\r\n#define TIM_EGR_CC1G_Pos (1U)\r\n#define TIM_EGR_CC1G_Msk (0x1UL << TIM_EGR_CC1G_Pos) /*!< 0x00000002 */\r\n#define TIM_EGR_CC1G     TIM_EGR_CC1G_Msk            /*!<Capture/Compare 1 Generation */\r\n#define TIM_EGR_CC2G_Pos (2U)\r\n#define TIM_EGR_CC2G_Msk (0x1UL << TIM_EGR_CC2G_Pos) /*!< 0x00000004 */\r\n#define TIM_EGR_CC2G     TIM_EGR_CC2G_Msk            /*!<Capture/Compare 2 Generation */\r\n#define TIM_EGR_CC3G_Pos (3U)\r\n#define TIM_EGR_CC3G_Msk (0x1UL << TIM_EGR_CC3G_Pos) /*!< 0x00000008 */\r\n#define TIM_EGR_CC3G     TIM_EGR_CC3G_Msk            /*!<Capture/Compare 3 Generation */\r\n#define TIM_EGR_CC4G_Pos (4U)\r\n#define TIM_EGR_CC4G_Msk (0x1UL << TIM_EGR_CC4G_Pos) /*!< 0x00000010 */\r\n#define TIM_EGR_CC4G     TIM_EGR_CC4G_Msk            /*!<Capture/Compare 4 Generation */\r\n#define TIM_EGR_COMG_Pos (5U)\r\n#define TIM_EGR_COMG_Msk (0x1UL << TIM_EGR_COMG_Pos) /*!< 0x00000020 */\r\n#define TIM_EGR_COMG     TIM_EGR_COMG_Msk            /*!<Capture/Compare Control Update Generation */\r\n#define TIM_EGR_TG_Pos   (6U)\r\n#define TIM_EGR_TG_Msk   (0x1UL << TIM_EGR_TG_Pos) /*!< 0x00000040 */\r\n#define TIM_EGR_TG       TIM_EGR_TG_Msk            /*!<Trigger Generation */\r\n#define TIM_EGR_BG_Pos   (7U)\r\n#define TIM_EGR_BG_Msk   (0x1UL << TIM_EGR_BG_Pos) /*!< 0x00000080 */\r\n#define TIM_EGR_BG       TIM_EGR_BG_Msk            /*!<Break Generation */\r\n\r\n/******************  Bit definition for TIM_CCMR1 register  ******************/\r\n#define TIM_CCMR1_CC1S_Pos (0U)\r\n#define TIM_CCMR1_CC1S_Msk (0x3UL << TIM_CCMR1_CC1S_Pos) /*!< 0x00000003 */\r\n#define TIM_CCMR1_CC1S     TIM_CCMR1_CC1S_Msk            /*!<CC1S[1:0] bits (Capture/Compare 1 Selection) */\r\n#define TIM_CCMR1_CC1S_0   (0x1UL << TIM_CCMR1_CC1S_Pos) /*!< 0x00000001 */\r\n#define TIM_CCMR1_CC1S_1   (0x2UL << TIM_CCMR1_CC1S_Pos) /*!< 0x00000002 */\r\n\r\n#define TIM_CCMR1_OC1FE_Pos (2U)\r\n#define TIM_CCMR1_OC1FE_Msk (0x1UL << TIM_CCMR1_OC1FE_Pos) /*!< 0x00000004 */\r\n#define TIM_CCMR1_OC1FE     TIM_CCMR1_OC1FE_Msk            /*!<Output Compare 1 Fast enable */\r\n#define TIM_CCMR1_OC1PE_Pos (3U)\r\n#define TIM_CCMR1_OC1PE_Msk (0x1UL << TIM_CCMR1_OC1PE_Pos) /*!< 0x00000008 */\r\n#define TIM_CCMR1_OC1PE     TIM_CCMR1_OC1PE_Msk            /*!<Output Compare 1 Preload enable */\r\n\r\n#define TIM_CCMR1_OC1M_Pos (4U)\r\n#define TIM_CCMR1_OC1M_Msk (0x7UL << TIM_CCMR1_OC1M_Pos) /*!< 0x00000070 */\r\n#define TIM_CCMR1_OC1M     TIM_CCMR1_OC1M_Msk            /*!<OC1M[2:0] bits (Output Compare 1 Mode) */\r\n#define TIM_CCMR1_OC1M_0   (0x1UL << TIM_CCMR1_OC1M_Pos) /*!< 0x00000010 */\r\n#define TIM_CCMR1_OC1M_1   (0x2UL << TIM_CCMR1_OC1M_Pos) /*!< 0x00000020 */\r\n#define TIM_CCMR1_OC1M_2   (0x4UL << TIM_CCMR1_OC1M_Pos) /*!< 0x00000040 */\r\n\r\n#define TIM_CCMR1_OC1CE_Pos (7U)\r\n#define TIM_CCMR1_OC1CE_Msk (0x1UL << TIM_CCMR1_OC1CE_Pos) /*!< 0x00000080 */\r\n#define TIM_CCMR1_OC1CE     TIM_CCMR1_OC1CE_Msk            /*!<Output Compare 1Clear Enable */\r\n\r\n#define TIM_CCMR1_CC2S_Pos (8U)\r\n#define TIM_CCMR1_CC2S_Msk (0x3UL << TIM_CCMR1_CC2S_Pos) /*!< 0x00000300 */\r\n#define TIM_CCMR1_CC2S     TIM_CCMR1_CC2S_Msk            /*!<CC2S[1:0] bits (Capture/Compare 2 Selection) */\r\n#define TIM_CCMR1_CC2S_0   (0x1UL << TIM_CCMR1_CC2S_Pos) /*!< 0x00000100 */\r\n#define TIM_CCMR1_CC2S_1   (0x2UL << TIM_CCMR1_CC2S_Pos) /*!< 0x00000200 */\r\n\r\n#define TIM_CCMR1_OC2FE_Pos (10U)\r\n#define TIM_CCMR1_OC2FE_Msk (0x1UL << TIM_CCMR1_OC2FE_Pos) /*!< 0x00000400 */\r\n#define TIM_CCMR1_OC2FE     TIM_CCMR1_OC2FE_Msk            /*!<Output Compare 2 Fast enable */\r\n#define TIM_CCMR1_OC2PE_Pos (11U)\r\n#define TIM_CCMR1_OC2PE_Msk (0x1UL << TIM_CCMR1_OC2PE_Pos) /*!< 0x00000800 */\r\n#define TIM_CCMR1_OC2PE     TIM_CCMR1_OC2PE_Msk            /*!<Output Compare 2 Preload enable */\r\n\r\n#define TIM_CCMR1_OC2M_Pos (12U)\r\n#define TIM_CCMR1_OC2M_Msk (0x7UL << TIM_CCMR1_OC2M_Pos) /*!< 0x00007000 */\r\n#define TIM_CCMR1_OC2M     TIM_CCMR1_OC2M_Msk            /*!<OC2M[2:0] bits (Output Compare 2 Mode) */\r\n#define TIM_CCMR1_OC2M_0   (0x1UL << TIM_CCMR1_OC2M_Pos) /*!< 0x00001000 */\r\n#define TIM_CCMR1_OC2M_1   (0x2UL << TIM_CCMR1_OC2M_Pos) /*!< 0x00002000 */\r\n#define TIM_CCMR1_OC2M_2   (0x4UL << TIM_CCMR1_OC2M_Pos) /*!< 0x00004000 */\r\n\r\n#define TIM_CCMR1_OC2CE_Pos (15U)\r\n#define TIM_CCMR1_OC2CE_Msk (0x1UL << TIM_CCMR1_OC2CE_Pos) /*!< 0x00008000 */\r\n#define TIM_CCMR1_OC2CE     TIM_CCMR1_OC2CE_Msk            /*!<Output Compare 2 Clear Enable */\r\n\r\n/*---------------------------------------------------------------------------*/\r\n\r\n#define TIM_CCMR1_IC1PSC_Pos (2U)\r\n#define TIM_CCMR1_IC1PSC_Msk (0x3UL << TIM_CCMR1_IC1PSC_Pos) /*!< 0x0000000C */\r\n#define TIM_CCMR1_IC1PSC     TIM_CCMR1_IC1PSC_Msk            /*!<IC1PSC[1:0] bits (Input Capture 1 Prescaler) */\r\n#define TIM_CCMR1_IC1PSC_0   (0x1UL << TIM_CCMR1_IC1PSC_Pos) /*!< 0x00000004 */\r\n#define TIM_CCMR1_IC1PSC_1   (0x2UL << TIM_CCMR1_IC1PSC_Pos) /*!< 0x00000008 */\r\n\r\n#define TIM_CCMR1_IC1F_Pos (4U)\r\n#define TIM_CCMR1_IC1F_Msk (0xFUL << TIM_CCMR1_IC1F_Pos) /*!< 0x000000F0 */\r\n#define TIM_CCMR1_IC1F     TIM_CCMR1_IC1F_Msk            /*!<IC1F[3:0] bits (Input Capture 1 Filter) */\r\n#define TIM_CCMR1_IC1F_0   (0x1UL << TIM_CCMR1_IC1F_Pos) /*!< 0x00000010 */\r\n#define TIM_CCMR1_IC1F_1   (0x2UL << TIM_CCMR1_IC1F_Pos) /*!< 0x00000020 */\r\n#define TIM_CCMR1_IC1F_2   (0x4UL << TIM_CCMR1_IC1F_Pos) /*!< 0x00000040 */\r\n#define TIM_CCMR1_IC1F_3   (0x8UL << TIM_CCMR1_IC1F_Pos) /*!< 0x00000080 */\r\n\r\n#define TIM_CCMR1_IC2PSC_Pos (10U)\r\n#define TIM_CCMR1_IC2PSC_Msk (0x3UL << TIM_CCMR1_IC2PSC_Pos) /*!< 0x00000C00 */\r\n#define TIM_CCMR1_IC2PSC     TIM_CCMR1_IC2PSC_Msk            /*!<IC2PSC[1:0] bits (Input Capture 2 Prescaler) */\r\n#define TIM_CCMR1_IC2PSC_0   (0x1UL << TIM_CCMR1_IC2PSC_Pos) /*!< 0x00000400 */\r\n#define TIM_CCMR1_IC2PSC_1   (0x2UL << TIM_CCMR1_IC2PSC_Pos) /*!< 0x00000800 */\r\n\r\n#define TIM_CCMR1_IC2F_Pos (12U)\r\n#define TIM_CCMR1_IC2F_Msk (0xFUL << TIM_CCMR1_IC2F_Pos) /*!< 0x0000F000 */\r\n#define TIM_CCMR1_IC2F     TIM_CCMR1_IC2F_Msk            /*!<IC2F[3:0] bits (Input Capture 2 Filter) */\r\n#define TIM_CCMR1_IC2F_0   (0x1UL << TIM_CCMR1_IC2F_Pos) /*!< 0x00001000 */\r\n#define TIM_CCMR1_IC2F_1   (0x2UL << TIM_CCMR1_IC2F_Pos) /*!< 0x00002000 */\r\n#define TIM_CCMR1_IC2F_2   (0x4UL << TIM_CCMR1_IC2F_Pos) /*!< 0x00004000 */\r\n#define TIM_CCMR1_IC2F_3   (0x8UL << TIM_CCMR1_IC2F_Pos) /*!< 0x00008000 */\r\n\r\n/******************  Bit definition for TIM_CCMR2 register  ******************/\r\n#define TIM_CCMR2_CC3S_Pos (0U)\r\n#define TIM_CCMR2_CC3S_Msk (0x3UL << TIM_CCMR2_CC3S_Pos) /*!< 0x00000003 */\r\n#define TIM_CCMR2_CC3S     TIM_CCMR2_CC3S_Msk            /*!<CC3S[1:0] bits (Capture/Compare 3 Selection) */\r\n#define TIM_CCMR2_CC3S_0   (0x1UL << TIM_CCMR2_CC3S_Pos) /*!< 0x00000001 */\r\n#define TIM_CCMR2_CC3S_1   (0x2UL << TIM_CCMR2_CC3S_Pos) /*!< 0x00000002 */\r\n\r\n#define TIM_CCMR2_OC3FE_Pos (2U)\r\n#define TIM_CCMR2_OC3FE_Msk (0x1UL << TIM_CCMR2_OC3FE_Pos) /*!< 0x00000004 */\r\n#define TIM_CCMR2_OC3FE     TIM_CCMR2_OC3FE_Msk            /*!<Output Compare 3 Fast enable */\r\n#define TIM_CCMR2_OC3PE_Pos (3U)\r\n#define TIM_CCMR2_OC3PE_Msk (0x1UL << TIM_CCMR2_OC3PE_Pos) /*!< 0x00000008 */\r\n#define TIM_CCMR2_OC3PE     TIM_CCMR2_OC3PE_Msk            /*!<Output Compare 3 Preload enable */\r\n\r\n#define TIM_CCMR2_OC3M_Pos (4U)\r\n#define TIM_CCMR2_OC3M_Msk (0x7UL << TIM_CCMR2_OC3M_Pos) /*!< 0x00000070 */\r\n#define TIM_CCMR2_OC3M     TIM_CCMR2_OC3M_Msk            /*!<OC3M[2:0] bits (Output Compare 3 Mode) */\r\n#define TIM_CCMR2_OC3M_0   (0x1UL << TIM_CCMR2_OC3M_Pos) /*!< 0x00000010 */\r\n#define TIM_CCMR2_OC3M_1   (0x2UL << TIM_CCMR2_OC3M_Pos) /*!< 0x00000020 */\r\n#define TIM_CCMR2_OC3M_2   (0x4UL << TIM_CCMR2_OC3M_Pos) /*!< 0x00000040 */\r\n\r\n#define TIM_CCMR2_OC3CE_Pos (7U)\r\n#define TIM_CCMR2_OC3CE_Msk (0x1UL << TIM_CCMR2_OC3CE_Pos) /*!< 0x00000080 */\r\n#define TIM_CCMR2_OC3CE     TIM_CCMR2_OC3CE_Msk            /*!<Output Compare 3 Clear Enable */\r\n\r\n#define TIM_CCMR2_CC4S_Pos (8U)\r\n#define TIM_CCMR2_CC4S_Msk (0x3UL << TIM_CCMR2_CC4S_Pos) /*!< 0x00000300 */\r\n#define TIM_CCMR2_CC4S     TIM_CCMR2_CC4S_Msk            /*!<CC4S[1:0] bits (Capture/Compare 4 Selection) */\r\n#define TIM_CCMR2_CC4S_0   (0x1UL << TIM_CCMR2_CC4S_Pos) /*!< 0x00000100 */\r\n#define TIM_CCMR2_CC4S_1   (0x2UL << TIM_CCMR2_CC4S_Pos) /*!< 0x00000200 */\r\n\r\n#define TIM_CCMR2_OC4FE_Pos (10U)\r\n#define TIM_CCMR2_OC4FE_Msk (0x1UL << TIM_CCMR2_OC4FE_Pos) /*!< 0x00000400 */\r\n#define TIM_CCMR2_OC4FE     TIM_CCMR2_OC4FE_Msk            /*!<Output Compare 4 Fast enable */\r\n#define TIM_CCMR2_OC4PE_Pos (11U)\r\n#define TIM_CCMR2_OC4PE_Msk (0x1UL << TIM_CCMR2_OC4PE_Pos) /*!< 0x00000800 */\r\n#define TIM_CCMR2_OC4PE     TIM_CCMR2_OC4PE_Msk            /*!<Output Compare 4 Preload enable */\r\n\r\n#define TIM_CCMR2_OC4M_Pos (12U)\r\n#define TIM_CCMR2_OC4M_Msk (0x7UL << TIM_CCMR2_OC4M_Pos) /*!< 0x00007000 */\r\n#define TIM_CCMR2_OC4M     TIM_CCMR2_OC4M_Msk            /*!<OC4M[2:0] bits (Output Compare 4 Mode) */\r\n#define TIM_CCMR2_OC4M_0   (0x1UL << TIM_CCMR2_OC4M_Pos) /*!< 0x00001000 */\r\n#define TIM_CCMR2_OC4M_1   (0x2UL << TIM_CCMR2_OC4M_Pos) /*!< 0x00002000 */\r\n#define TIM_CCMR2_OC4M_2   (0x4UL << TIM_CCMR2_OC4M_Pos) /*!< 0x00004000 */\r\n\r\n#define TIM_CCMR2_OC4CE_Pos (15U)\r\n#define TIM_CCMR2_OC4CE_Msk (0x1UL << TIM_CCMR2_OC4CE_Pos) /*!< 0x00008000 */\r\n#define TIM_CCMR2_OC4CE     TIM_CCMR2_OC4CE_Msk            /*!<Output Compare 4 Clear Enable */\r\n\r\n/*---------------------------------------------------------------------------*/\r\n\r\n#define TIM_CCMR2_IC3PSC_Pos (2U)\r\n#define TIM_CCMR2_IC3PSC_Msk (0x3UL << TIM_CCMR2_IC3PSC_Pos) /*!< 0x0000000C */\r\n#define TIM_CCMR2_IC3PSC     TIM_CCMR2_IC3PSC_Msk            /*!<IC3PSC[1:0] bits (Input Capture 3 Prescaler) */\r\n#define TIM_CCMR2_IC3PSC_0   (0x1UL << TIM_CCMR2_IC3PSC_Pos) /*!< 0x00000004 */\r\n#define TIM_CCMR2_IC3PSC_1   (0x2UL << TIM_CCMR2_IC3PSC_Pos) /*!< 0x00000008 */\r\n\r\n#define TIM_CCMR2_IC3F_Pos (4U)\r\n#define TIM_CCMR2_IC3F_Msk (0xFUL << TIM_CCMR2_IC3F_Pos) /*!< 0x000000F0 */\r\n#define TIM_CCMR2_IC3F     TIM_CCMR2_IC3F_Msk            /*!<IC3F[3:0] bits (Input Capture 3 Filter) */\r\n#define TIM_CCMR2_IC3F_0   (0x1UL << TIM_CCMR2_IC3F_Pos) /*!< 0x00000010 */\r\n#define TIM_CCMR2_IC3F_1   (0x2UL << TIM_CCMR2_IC3F_Pos) /*!< 0x00000020 */\r\n#define TIM_CCMR2_IC3F_2   (0x4UL << TIM_CCMR2_IC3F_Pos) /*!< 0x00000040 */\r\n#define TIM_CCMR2_IC3F_3   (0x8UL << TIM_CCMR2_IC3F_Pos) /*!< 0x00000080 */\r\n\r\n#define TIM_CCMR2_IC4PSC_Pos (10U)\r\n#define TIM_CCMR2_IC4PSC_Msk (0x3UL << TIM_CCMR2_IC4PSC_Pos) /*!< 0x00000C00 */\r\n#define TIM_CCMR2_IC4PSC     TIM_CCMR2_IC4PSC_Msk            /*!<IC4PSC[1:0] bits (Input Capture 4 Prescaler) */\r\n#define TIM_CCMR2_IC4PSC_0   (0x1UL << TIM_CCMR2_IC4PSC_Pos) /*!< 0x00000400 */\r\n#define TIM_CCMR2_IC4PSC_1   (0x2UL << TIM_CCMR2_IC4PSC_Pos) /*!< 0x00000800 */\r\n\r\n#define TIM_CCMR2_IC4F_Pos (12U)\r\n#define TIM_CCMR2_IC4F_Msk (0xFUL << TIM_CCMR2_IC4F_Pos) /*!< 0x0000F000 */\r\n#define TIM_CCMR2_IC4F     TIM_CCMR2_IC4F_Msk            /*!<IC4F[3:0] bits (Input Capture 4 Filter) */\r\n#define TIM_CCMR2_IC4F_0   (0x1UL << TIM_CCMR2_IC4F_Pos) /*!< 0x00001000 */\r\n#define TIM_CCMR2_IC4F_1   (0x2UL << TIM_CCMR2_IC4F_Pos) /*!< 0x00002000 */\r\n#define TIM_CCMR2_IC4F_2   (0x4UL << TIM_CCMR2_IC4F_Pos) /*!< 0x00004000 */\r\n#define TIM_CCMR2_IC4F_3   (0x8UL << TIM_CCMR2_IC4F_Pos) /*!< 0x00008000 */\r\n\r\n/*******************  Bit definition for TIM_CCER register  ******************/\r\n#define TIM_CCER_CC1E_Pos  (0U)\r\n#define TIM_CCER_CC1E_Msk  (0x1UL << TIM_CCER_CC1E_Pos) /*!< 0x00000001 */\r\n#define TIM_CCER_CC1E      TIM_CCER_CC1E_Msk            /*!<Capture/Compare 1 output enable */\r\n#define TIM_CCER_CC1P_Pos  (1U)\r\n#define TIM_CCER_CC1P_Msk  (0x1UL << TIM_CCER_CC1P_Pos) /*!< 0x00000002 */\r\n#define TIM_CCER_CC1P      TIM_CCER_CC1P_Msk            /*!<Capture/Compare 1 output Polarity */\r\n#define TIM_CCER_CC1NE_Pos (2U)\r\n#define TIM_CCER_CC1NE_Msk (0x1UL << TIM_CCER_CC1NE_Pos) /*!< 0x00000004 */\r\n#define TIM_CCER_CC1NE     TIM_CCER_CC1NE_Msk            /*!<Capture/Compare 1 Complementary output enable */\r\n#define TIM_CCER_CC1NP_Pos (3U)\r\n#define TIM_CCER_CC1NP_Msk (0x1UL << TIM_CCER_CC1NP_Pos) /*!< 0x00000008 */\r\n#define TIM_CCER_CC1NP     TIM_CCER_CC1NP_Msk            /*!<Capture/Compare 1 Complementary output Polarity */\r\n#define TIM_CCER_CC2E_Pos  (4U)\r\n#define TIM_CCER_CC2E_Msk  (0x1UL << TIM_CCER_CC2E_Pos) /*!< 0x00000010 */\r\n#define TIM_CCER_CC2E      TIM_CCER_CC2E_Msk            /*!<Capture/Compare 2 output enable */\r\n#define TIM_CCER_CC2P_Pos  (5U)\r\n#define TIM_CCER_CC2P_Msk  (0x1UL << TIM_CCER_CC2P_Pos) /*!< 0x00000020 */\r\n#define TIM_CCER_CC2P      TIM_CCER_CC2P_Msk            /*!<Capture/Compare 2 output Polarity */\r\n#define TIM_CCER_CC2NE_Pos (6U)\r\n#define TIM_CCER_CC2NE_Msk (0x1UL << TIM_CCER_CC2NE_Pos) /*!< 0x00000040 */\r\n#define TIM_CCER_CC2NE     TIM_CCER_CC2NE_Msk            /*!<Capture/Compare 2 Complementary output enable */\r\n#define TIM_CCER_CC2NP_Pos (7U)\r\n#define TIM_CCER_CC2NP_Msk (0x1UL << TIM_CCER_CC2NP_Pos) /*!< 0x00000080 */\r\n#define TIM_CCER_CC2NP     TIM_CCER_CC2NP_Msk            /*!<Capture/Compare 2 Complementary output Polarity */\r\n#define TIM_CCER_CC3E_Pos  (8U)\r\n#define TIM_CCER_CC3E_Msk  (0x1UL << TIM_CCER_CC3E_Pos) /*!< 0x00000100 */\r\n#define TIM_CCER_CC3E      TIM_CCER_CC3E_Msk            /*!<Capture/Compare 3 output enable */\r\n#define TIM_CCER_CC3P_Pos  (9U)\r\n#define TIM_CCER_CC3P_Msk  (0x1UL << TIM_CCER_CC3P_Pos) /*!< 0x00000200 */\r\n#define TIM_CCER_CC3P      TIM_CCER_CC3P_Msk            /*!<Capture/Compare 3 output Polarity */\r\n#define TIM_CCER_CC3NE_Pos (10U)\r\n#define TIM_CCER_CC3NE_Msk (0x1UL << TIM_CCER_CC3NE_Pos) /*!< 0x00000400 */\r\n#define TIM_CCER_CC3NE     TIM_CCER_CC3NE_Msk            /*!<Capture/Compare 3 Complementary output enable */\r\n#define TIM_CCER_CC3NP_Pos (11U)\r\n#define TIM_CCER_CC3NP_Msk (0x1UL << TIM_CCER_CC3NP_Pos) /*!< 0x00000800 */\r\n#define TIM_CCER_CC3NP     TIM_CCER_CC3NP_Msk            /*!<Capture/Compare 3 Complementary output Polarity */\r\n#define TIM_CCER_CC4E_Pos  (12U)\r\n#define TIM_CCER_CC4E_Msk  (0x1UL << TIM_CCER_CC4E_Pos) /*!< 0x00001000 */\r\n#define TIM_CCER_CC4E      TIM_CCER_CC4E_Msk            /*!<Capture/Compare 4 output enable */\r\n#define TIM_CCER_CC4P_Pos  (13U)\r\n#define TIM_CCER_CC4P_Msk  (0x1UL << TIM_CCER_CC4P_Pos) /*!< 0x00002000 */\r\n#define TIM_CCER_CC4P      TIM_CCER_CC4P_Msk            /*!<Capture/Compare 4 output Polarity */\r\n\r\n/*******************  Bit definition for TIM_CNT register  *******************/\r\n#define TIM_CNT_CNT_Pos (0U)\r\n#define TIM_CNT_CNT_Msk (0xFFFFFFFFUL << TIM_CNT_CNT_Pos) /*!< 0xFFFFFFFF */\r\n#define TIM_CNT_CNT     TIM_CNT_CNT_Msk                   /*!<Counter Value */\r\n\r\n/*******************  Bit definition for TIM_PSC register  *******************/\r\n#define TIM_PSC_PSC_Pos (0U)\r\n#define TIM_PSC_PSC_Msk (0xFFFFUL << TIM_PSC_PSC_Pos) /*!< 0x0000FFFF */\r\n#define TIM_PSC_PSC     TIM_PSC_PSC_Msk               /*!<Prescaler Value */\r\n\r\n/*******************  Bit definition for TIM_ARR register  *******************/\r\n#define TIM_ARR_ARR_Pos (0U)\r\n#define TIM_ARR_ARR_Msk (0xFFFFFFFFUL << TIM_ARR_ARR_Pos) /*!< 0xFFFFFFFF */\r\n#define TIM_ARR_ARR     TIM_ARR_ARR_Msk                   /*!<actual auto-reload Value */\r\n\r\n/*******************  Bit definition for TIM_RCR register  *******************/\r\n#define TIM_RCR_REP_Pos (0U)\r\n#define TIM_RCR_REP_Msk (0xFFUL << TIM_RCR_REP_Pos) /*!< 0x000000FF */\r\n#define TIM_RCR_REP     TIM_RCR_REP_Msk             /*!<Repetition Counter Value */\r\n\r\n/*******************  Bit definition for TIM_CCR1 register  ******************/\r\n#define TIM_CCR1_CCR1_Pos (0U)\r\n#define TIM_CCR1_CCR1_Msk (0xFFFFUL << TIM_CCR1_CCR1_Pos) /*!< 0x0000FFFF */\r\n#define TIM_CCR1_CCR1     TIM_CCR1_CCR1_Msk               /*!<Capture/Compare 1 Value */\r\n\r\n/*******************  Bit definition for TIM_CCR2 register  ******************/\r\n#define TIM_CCR2_CCR2_Pos (0U)\r\n#define TIM_CCR2_CCR2_Msk (0xFFFFUL << TIM_CCR2_CCR2_Pos) /*!< 0x0000FFFF */\r\n#define TIM_CCR2_CCR2     TIM_CCR2_CCR2_Msk               /*!<Capture/Compare 2 Value */\r\n\r\n/*******************  Bit definition for TIM_CCR3 register  ******************/\r\n#define TIM_CCR3_CCR3_Pos (0U)\r\n#define TIM_CCR3_CCR3_Msk (0xFFFFUL << TIM_CCR3_CCR3_Pos) /*!< 0x0000FFFF */\r\n#define TIM_CCR3_CCR3     TIM_CCR3_CCR3_Msk               /*!<Capture/Compare 3 Value */\r\n\r\n/*******************  Bit definition for TIM_CCR4 register  ******************/\r\n#define TIM_CCR4_CCR4_Pos (0U)\r\n#define TIM_CCR4_CCR4_Msk (0xFFFFUL << TIM_CCR4_CCR4_Pos) /*!< 0x0000FFFF */\r\n#define TIM_CCR4_CCR4     TIM_CCR4_CCR4_Msk               /*!<Capture/Compare 4 Value */\r\n\r\n/*******************  Bit definition for TIM_BDTR register  ******************/\r\n#define TIM_BDTR_DTG_Pos (0U)\r\n#define TIM_BDTR_DTG_Msk (0xFFUL << TIM_BDTR_DTG_Pos) /*!< 0x000000FF */\r\n#define TIM_BDTR_DTG     TIM_BDTR_DTG_Msk             /*!<DTG[0:7] bits (Dead-Time Generator set-up) */\r\n#define TIM_BDTR_DTG_0   (0x01UL << TIM_BDTR_DTG_Pos) /*!< 0x00000001 */\r\n#define TIM_BDTR_DTG_1   (0x02UL << TIM_BDTR_DTG_Pos) /*!< 0x00000002 */\r\n#define TIM_BDTR_DTG_2   (0x04UL << TIM_BDTR_DTG_Pos) /*!< 0x00000004 */\r\n#define TIM_BDTR_DTG_3   (0x08UL << TIM_BDTR_DTG_Pos) /*!< 0x00000008 */\r\n#define TIM_BDTR_DTG_4   (0x10UL << TIM_BDTR_DTG_Pos) /*!< 0x00000010 */\r\n#define TIM_BDTR_DTG_5   (0x20UL << TIM_BDTR_DTG_Pos) /*!< 0x00000020 */\r\n#define TIM_BDTR_DTG_6   (0x40UL << TIM_BDTR_DTG_Pos) /*!< 0x00000040 */\r\n#define TIM_BDTR_DTG_7   (0x80UL << TIM_BDTR_DTG_Pos) /*!< 0x00000080 */\r\n\r\n#define TIM_BDTR_LOCK_Pos (8U)\r\n#define TIM_BDTR_LOCK_Msk (0x3UL << TIM_BDTR_LOCK_Pos) /*!< 0x00000300 */\r\n#define TIM_BDTR_LOCK     TIM_BDTR_LOCK_Msk            /*!<LOCK[1:0] bits (Lock Configuration) */\r\n#define TIM_BDTR_LOCK_0   (0x1UL << TIM_BDTR_LOCK_Pos) /*!< 0x00000100 */\r\n#define TIM_BDTR_LOCK_1   (0x2UL << TIM_BDTR_LOCK_Pos) /*!< 0x00000200 */\r\n\r\n#define TIM_BDTR_OSSI_Pos (10U)\r\n#define TIM_BDTR_OSSI_Msk (0x1UL << TIM_BDTR_OSSI_Pos) /*!< 0x00000400 */\r\n#define TIM_BDTR_OSSI     TIM_BDTR_OSSI_Msk            /*!<Off-State Selection for Idle mode */\r\n#define TIM_BDTR_OSSR_Pos (11U)\r\n#define TIM_BDTR_OSSR_Msk (0x1UL << TIM_BDTR_OSSR_Pos) /*!< 0x00000800 */\r\n#define TIM_BDTR_OSSR     TIM_BDTR_OSSR_Msk            /*!<Off-State Selection for Run mode */\r\n#define TIM_BDTR_BKE_Pos  (12U)\r\n#define TIM_BDTR_BKE_Msk  (0x1UL << TIM_BDTR_BKE_Pos) /*!< 0x00001000 */\r\n#define TIM_BDTR_BKE      TIM_BDTR_BKE_Msk            /*!<Break enable */\r\n#define TIM_BDTR_BKP_Pos  (13U)\r\n#define TIM_BDTR_BKP_Msk  (0x1UL << TIM_BDTR_BKP_Pos) /*!< 0x00002000 */\r\n#define TIM_BDTR_BKP      TIM_BDTR_BKP_Msk            /*!<Break Polarity */\r\n#define TIM_BDTR_AOE_Pos  (14U)\r\n#define TIM_BDTR_AOE_Msk  (0x1UL << TIM_BDTR_AOE_Pos) /*!< 0x00004000 */\r\n#define TIM_BDTR_AOE      TIM_BDTR_AOE_Msk            /*!<Automatic Output enable */\r\n#define TIM_BDTR_MOE_Pos  (15U)\r\n#define TIM_BDTR_MOE_Msk  (0x1UL << TIM_BDTR_MOE_Pos) /*!< 0x00008000 */\r\n#define TIM_BDTR_MOE      TIM_BDTR_MOE_Msk            /*!<Main Output enable */\r\n\r\n/*******************  Bit definition for TIM_DCR register  *******************/\r\n#define TIM_DCR_DBA_Pos (0U)\r\n#define TIM_DCR_DBA_Msk (0x1FUL << TIM_DCR_DBA_Pos) /*!< 0x0000001F */\r\n#define TIM_DCR_DBA     TIM_DCR_DBA_Msk             /*!<DBA[4:0] bits (DMA Base Address) */\r\n#define TIM_DCR_DBA_0   (0x01UL << TIM_DCR_DBA_Pos) /*!< 0x00000001 */\r\n#define TIM_DCR_DBA_1   (0x02UL << TIM_DCR_DBA_Pos) /*!< 0x00000002 */\r\n#define TIM_DCR_DBA_2   (0x04UL << TIM_DCR_DBA_Pos) /*!< 0x00000004 */\r\n#define TIM_DCR_DBA_3   (0x08UL << TIM_DCR_DBA_Pos) /*!< 0x00000008 */\r\n#define TIM_DCR_DBA_4   (0x10UL << TIM_DCR_DBA_Pos) /*!< 0x00000010 */\r\n\r\n#define TIM_DCR_DBL_Pos (8U)\r\n#define TIM_DCR_DBL_Msk (0x1FUL << TIM_DCR_DBL_Pos) /*!< 0x00001F00 */\r\n#define TIM_DCR_DBL     TIM_DCR_DBL_Msk             /*!<DBL[4:0] bits (DMA Burst Length) */\r\n#define TIM_DCR_DBL_0   (0x01UL << TIM_DCR_DBL_Pos) /*!< 0x00000100 */\r\n#define TIM_DCR_DBL_1   (0x02UL << TIM_DCR_DBL_Pos) /*!< 0x00000200 */\r\n#define TIM_DCR_DBL_2   (0x04UL << TIM_DCR_DBL_Pos) /*!< 0x00000400 */\r\n#define TIM_DCR_DBL_3   (0x08UL << TIM_DCR_DBL_Pos) /*!< 0x00000800 */\r\n#define TIM_DCR_DBL_4   (0x10UL << TIM_DCR_DBL_Pos) /*!< 0x00001000 */\r\n\r\n/*******************  Bit definition for TIM_DMAR register  ******************/\r\n#define TIM_DMAR_DMAB_Pos (0U)\r\n#define TIM_DMAR_DMAB_Msk (0xFFFFUL << TIM_DMAR_DMAB_Pos) /*!< 0x0000FFFF */\r\n#define TIM_DMAR_DMAB     TIM_DMAR_DMAB_Msk               /*!<DMA register for burst accesses */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                             Real-Time Clock                                */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for RTC_CRH register  ********************/\r\n#define RTC_CRH_SECIE_Pos (0U)\r\n#define RTC_CRH_SECIE_Msk (0x1UL << RTC_CRH_SECIE_Pos) /*!< 0x00000001 */\r\n#define RTC_CRH_SECIE     RTC_CRH_SECIE_Msk            /*!< Second Interrupt Enable */\r\n#define RTC_CRH_ALRIE_Pos (1U)\r\n#define RTC_CRH_ALRIE_Msk (0x1UL << RTC_CRH_ALRIE_Pos) /*!< 0x00000002 */\r\n#define RTC_CRH_ALRIE     RTC_CRH_ALRIE_Msk            /*!< Alarm Interrupt Enable */\r\n#define RTC_CRH_OWIE_Pos  (2U)\r\n#define RTC_CRH_OWIE_Msk  (0x1UL << RTC_CRH_OWIE_Pos) /*!< 0x00000004 */\r\n#define RTC_CRH_OWIE      RTC_CRH_OWIE_Msk            /*!< OverfloW Interrupt Enable */\r\n\r\n/*******************  Bit definition for RTC_CRL register  ********************/\r\n#define RTC_CRL_SECF_Pos  (0U)\r\n#define RTC_CRL_SECF_Msk  (0x1UL << RTC_CRL_SECF_Pos) /*!< 0x00000001 */\r\n#define RTC_CRL_SECF      RTC_CRL_SECF_Msk            /*!< Second Flag */\r\n#define RTC_CRL_ALRF_Pos  (1U)\r\n#define RTC_CRL_ALRF_Msk  (0x1UL << RTC_CRL_ALRF_Pos) /*!< 0x00000002 */\r\n#define RTC_CRL_ALRF      RTC_CRL_ALRF_Msk            /*!< Alarm Flag */\r\n#define RTC_CRL_OWF_Pos   (2U)\r\n#define RTC_CRL_OWF_Msk   (0x1UL << RTC_CRL_OWF_Pos) /*!< 0x00000004 */\r\n#define RTC_CRL_OWF       RTC_CRL_OWF_Msk            /*!< OverfloW Flag */\r\n#define RTC_CRL_RSF_Pos   (3U)\r\n#define RTC_CRL_RSF_Msk   (0x1UL << RTC_CRL_RSF_Pos) /*!< 0x00000008 */\r\n#define RTC_CRL_RSF       RTC_CRL_RSF_Msk            /*!< Registers Synchronized Flag */\r\n#define RTC_CRL_CNF_Pos   (4U)\r\n#define RTC_CRL_CNF_Msk   (0x1UL << RTC_CRL_CNF_Pos) /*!< 0x00000010 */\r\n#define RTC_CRL_CNF       RTC_CRL_CNF_Msk            /*!< Configuration Flag */\r\n#define RTC_CRL_RTOFF_Pos (5U)\r\n#define RTC_CRL_RTOFF_Msk (0x1UL << RTC_CRL_RTOFF_Pos) /*!< 0x00000020 */\r\n#define RTC_CRL_RTOFF     RTC_CRL_RTOFF_Msk            /*!< RTC operation OFF */\r\n\r\n/*******************  Bit definition for RTC_PRLH register  *******************/\r\n#define RTC_PRLH_PRL_Pos (0U)\r\n#define RTC_PRLH_PRL_Msk (0xFUL << RTC_PRLH_PRL_Pos) /*!< 0x0000000F */\r\n#define RTC_PRLH_PRL     RTC_PRLH_PRL_Msk            /*!< RTC Prescaler Reload Value High */\r\n\r\n/*******************  Bit definition for RTC_PRLL register  *******************/\r\n#define RTC_PRLL_PRL_Pos (0U)\r\n#define RTC_PRLL_PRL_Msk (0xFFFFUL << RTC_PRLL_PRL_Pos) /*!< 0x0000FFFF */\r\n#define RTC_PRLL_PRL     RTC_PRLL_PRL_Msk               /*!< RTC Prescaler Reload Value Low */\r\n\r\n/*******************  Bit definition for RTC_DIVH register  *******************/\r\n#define RTC_DIVH_RTC_DIV_Pos (0U)\r\n#define RTC_DIVH_RTC_DIV_Msk (0xFUL << RTC_DIVH_RTC_DIV_Pos) /*!< 0x0000000F */\r\n#define RTC_DIVH_RTC_DIV     RTC_DIVH_RTC_DIV_Msk            /*!< RTC Clock Divider High */\r\n\r\n/*******************  Bit definition for RTC_DIVL register  *******************/\r\n#define RTC_DIVL_RTC_DIV_Pos (0U)\r\n#define RTC_DIVL_RTC_DIV_Msk (0xFFFFUL << RTC_DIVL_RTC_DIV_Pos) /*!< 0x0000FFFF */\r\n#define RTC_DIVL_RTC_DIV     RTC_DIVL_RTC_DIV_Msk               /*!< RTC Clock Divider Low */\r\n\r\n/*******************  Bit definition for RTC_CNTH register  *******************/\r\n#define RTC_CNTH_RTC_CNT_Pos (0U)\r\n#define RTC_CNTH_RTC_CNT_Msk (0xFFFFUL << RTC_CNTH_RTC_CNT_Pos) /*!< 0x0000FFFF */\r\n#define RTC_CNTH_RTC_CNT     RTC_CNTH_RTC_CNT_Msk               /*!< RTC Counter High */\r\n\r\n/*******************  Bit definition for RTC_CNTL register  *******************/\r\n#define RTC_CNTL_RTC_CNT_Pos (0U)\r\n#define RTC_CNTL_RTC_CNT_Msk (0xFFFFUL << RTC_CNTL_RTC_CNT_Pos) /*!< 0x0000FFFF */\r\n#define RTC_CNTL_RTC_CNT     RTC_CNTL_RTC_CNT_Msk               /*!< RTC Counter Low */\r\n\r\n/*******************  Bit definition for RTC_ALRH register  *******************/\r\n#define RTC_ALRH_RTC_ALR_Pos (0U)\r\n#define RTC_ALRH_RTC_ALR_Msk (0xFFFFUL << RTC_ALRH_RTC_ALR_Pos) /*!< 0x0000FFFF */\r\n#define RTC_ALRH_RTC_ALR     RTC_ALRH_RTC_ALR_Msk               /*!< RTC Alarm High */\r\n\r\n/*******************  Bit definition for RTC_ALRL register  *******************/\r\n#define RTC_ALRL_RTC_ALR_Pos (0U)\r\n#define RTC_ALRL_RTC_ALR_Msk (0xFFFFUL << RTC_ALRL_RTC_ALR_Pos) /*!< 0x0000FFFF */\r\n#define RTC_ALRL_RTC_ALR     RTC_ALRL_RTC_ALR_Msk               /*!< RTC Alarm Low */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                        Independent WATCHDOG (IWDG)                         */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for IWDG_KR register  ********************/\r\n#define IWDG_KR_KEY_Pos (0U)\r\n#define IWDG_KR_KEY_Msk (0xFFFFUL << IWDG_KR_KEY_Pos) /*!< 0x0000FFFF */\r\n#define IWDG_KR_KEY     IWDG_KR_KEY_Msk               /*!< Key value (write only, read 0000h) */\r\n\r\n/*******************  Bit definition for IWDG_PR register  ********************/\r\n#define IWDG_PR_PR_Pos (0U)\r\n#define IWDG_PR_PR_Msk (0x7UL << IWDG_PR_PR_Pos) /*!< 0x00000007 */\r\n#define IWDG_PR_PR     IWDG_PR_PR_Msk            /*!< PR[2:0] (Prescaler divider) */\r\n#define IWDG_PR_PR_0   (0x1UL << IWDG_PR_PR_Pos) /*!< 0x00000001 */\r\n#define IWDG_PR_PR_1   (0x2UL << IWDG_PR_PR_Pos) /*!< 0x00000002 */\r\n#define IWDG_PR_PR_2   (0x4UL << IWDG_PR_PR_Pos) /*!< 0x00000004 */\r\n\r\n/*******************  Bit definition for IWDG_RLR register  *******************/\r\n#define IWDG_RLR_RL_Pos (0U)\r\n#define IWDG_RLR_RL_Msk (0xFFFUL << IWDG_RLR_RL_Pos) /*!< 0x00000FFF */\r\n#define IWDG_RLR_RL     IWDG_RLR_RL_Msk              /*!< Watchdog counter reload value */\r\n\r\n/*******************  Bit definition for IWDG_SR register  ********************/\r\n#define IWDG_SR_PVU_Pos (0U)\r\n#define IWDG_SR_PVU_Msk (0x1UL << IWDG_SR_PVU_Pos) /*!< 0x00000001 */\r\n#define IWDG_SR_PVU     IWDG_SR_PVU_Msk            /*!< Watchdog prescaler value update */\r\n#define IWDG_SR_RVU_Pos (1U)\r\n#define IWDG_SR_RVU_Msk (0x1UL << IWDG_SR_RVU_Pos) /*!< 0x00000002 */\r\n#define IWDG_SR_RVU     IWDG_SR_RVU_Msk            /*!< Watchdog counter reload value update */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                         Window WATCHDOG (WWDG)                             */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for WWDG_CR register  ********************/\r\n#define WWDG_CR_T_Pos (0U)\r\n#define WWDG_CR_T_Msk (0x7FUL << WWDG_CR_T_Pos) /*!< 0x0000007F */\r\n#define WWDG_CR_T     WWDG_CR_T_Msk             /*!< T[6:0] bits (7-Bit counter (MSB to LSB)) */\r\n#define WWDG_CR_T_0   (0x01UL << WWDG_CR_T_Pos) /*!< 0x00000001 */\r\n#define WWDG_CR_T_1   (0x02UL << WWDG_CR_T_Pos) /*!< 0x00000002 */\r\n#define WWDG_CR_T_2   (0x04UL << WWDG_CR_T_Pos) /*!< 0x00000004 */\r\n#define WWDG_CR_T_3   (0x08UL << WWDG_CR_T_Pos) /*!< 0x00000008 */\r\n#define WWDG_CR_T_4   (0x10UL << WWDG_CR_T_Pos) /*!< 0x00000010 */\r\n#define WWDG_CR_T_5   (0x20UL << WWDG_CR_T_Pos) /*!< 0x00000020 */\r\n#define WWDG_CR_T_6   (0x40UL << WWDG_CR_T_Pos) /*!< 0x00000040 */\r\n\r\n/* Legacy defines */\r\n#define WWDG_CR_T0 WWDG_CR_T_0\r\n#define WWDG_CR_T1 WWDG_CR_T_1\r\n#define WWDG_CR_T2 WWDG_CR_T_2\r\n#define WWDG_CR_T3 WWDG_CR_T_3\r\n#define WWDG_CR_T4 WWDG_CR_T_4\r\n#define WWDG_CR_T5 WWDG_CR_T_5\r\n#define WWDG_CR_T6 WWDG_CR_T_6\r\n\r\n#define WWDG_CR_WDGA_Pos (7U)\r\n#define WWDG_CR_WDGA_Msk (0x1UL << WWDG_CR_WDGA_Pos) /*!< 0x00000080 */\r\n#define WWDG_CR_WDGA     WWDG_CR_WDGA_Msk            /*!< Activation bit */\r\n\r\n/*******************  Bit definition for WWDG_CFR register  *******************/\r\n#define WWDG_CFR_W_Pos (0U)\r\n#define WWDG_CFR_W_Msk (0x7FUL << WWDG_CFR_W_Pos) /*!< 0x0000007F */\r\n#define WWDG_CFR_W     WWDG_CFR_W_Msk             /*!< W[6:0] bits (7-bit window value) */\r\n#define WWDG_CFR_W_0   (0x01UL << WWDG_CFR_W_Pos) /*!< 0x00000001 */\r\n#define WWDG_CFR_W_1   (0x02UL << WWDG_CFR_W_Pos) /*!< 0x00000002 */\r\n#define WWDG_CFR_W_2   (0x04UL << WWDG_CFR_W_Pos) /*!< 0x00000004 */\r\n#define WWDG_CFR_W_3   (0x08UL << WWDG_CFR_W_Pos) /*!< 0x00000008 */\r\n#define WWDG_CFR_W_4   (0x10UL << WWDG_CFR_W_Pos) /*!< 0x00000010 */\r\n#define WWDG_CFR_W_5   (0x20UL << WWDG_CFR_W_Pos) /*!< 0x00000020 */\r\n#define WWDG_CFR_W_6   (0x40UL << WWDG_CFR_W_Pos) /*!< 0x00000040 */\r\n\r\n/* Legacy defines */\r\n#define WWDG_CFR_W0 WWDG_CFR_W_0\r\n#define WWDG_CFR_W1 WWDG_CFR_W_1\r\n#define WWDG_CFR_W2 WWDG_CFR_W_2\r\n#define WWDG_CFR_W3 WWDG_CFR_W_3\r\n#define WWDG_CFR_W4 WWDG_CFR_W_4\r\n#define WWDG_CFR_W5 WWDG_CFR_W_5\r\n#define WWDG_CFR_W6 WWDG_CFR_W_6\r\n\r\n#define WWDG_CFR_WDGTB_Pos (7U)\r\n#define WWDG_CFR_WDGTB_Msk (0x3UL << WWDG_CFR_WDGTB_Pos) /*!< 0x00000180 */\r\n#define WWDG_CFR_WDGTB     WWDG_CFR_WDGTB_Msk            /*!< WDGTB[1:0] bits (Timer Base) */\r\n#define WWDG_CFR_WDGTB_0   (0x1UL << WWDG_CFR_WDGTB_Pos) /*!< 0x00000080 */\r\n#define WWDG_CFR_WDGTB_1   (0x2UL << WWDG_CFR_WDGTB_Pos) /*!< 0x00000100 */\r\n\r\n/* Legacy defines */\r\n#define WWDG_CFR_WDGTB0 WWDG_CFR_WDGTB_0\r\n#define WWDG_CFR_WDGTB1 WWDG_CFR_WDGTB_1\r\n\r\n#define WWDG_CFR_EWI_Pos (9U)\r\n#define WWDG_CFR_EWI_Msk (0x1UL << WWDG_CFR_EWI_Pos) /*!< 0x00000200 */\r\n#define WWDG_CFR_EWI     WWDG_CFR_EWI_Msk            /*!< Early Wakeup Interrupt */\r\n\r\n/*******************  Bit definition for WWDG_SR register  ********************/\r\n#define WWDG_SR_EWIF_Pos (0U)\r\n#define WWDG_SR_EWIF_Msk (0x1UL << WWDG_SR_EWIF_Pos) /*!< 0x00000001 */\r\n#define WWDG_SR_EWIF     WWDG_SR_EWIF_Msk            /*!< Early Wakeup Interrupt Flag */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                                   USB Device FS                            */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*!< Endpoint-specific registers */\r\n#define USB_EP0R USB_BASE                /*!< Endpoint 0 register address */\r\n#define USB_EP1R (USB_BASE + 0x00000004) /*!< Endpoint 1 register address */\r\n#define USB_EP2R (USB_BASE + 0x00000008) /*!< Endpoint 2 register address */\r\n#define USB_EP3R (USB_BASE + 0x0000000C) /*!< Endpoint 3 register address */\r\n#define USB_EP4R (USB_BASE + 0x00000010) /*!< Endpoint 4 register address */\r\n#define USB_EP5R (USB_BASE + 0x00000014) /*!< Endpoint 5 register address */\r\n#define USB_EP6R (USB_BASE + 0x00000018) /*!< Endpoint 6 register address */\r\n#define USB_EP7R (USB_BASE + 0x0000001C) /*!< Endpoint 7 register address */\r\n\r\n/* bit positions */\r\n#define USB_EP_CTR_RX_Pos    (15U)\r\n#define USB_EP_CTR_RX_Msk    (0x1UL << USB_EP_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP_CTR_RX        USB_EP_CTR_RX_Msk            /*!< EndPoint Correct TRansfer RX */\r\n#define USB_EP_DTOG_RX_Pos   (14U)\r\n#define USB_EP_DTOG_RX_Msk   (0x1UL << USB_EP_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP_DTOG_RX       USB_EP_DTOG_RX_Msk            /*!< EndPoint Data TOGGLE RX */\r\n#define USB_EPRX_STAT_Pos    (12U)\r\n#define USB_EPRX_STAT_Msk    (0x3UL << USB_EPRX_STAT_Pos) /*!< 0x00003000 */\r\n#define USB_EPRX_STAT        USB_EPRX_STAT_Msk            /*!< EndPoint RX STATus bit field */\r\n#define USB_EP_SETUP_Pos     (11U)\r\n#define USB_EP_SETUP_Msk     (0x1UL << USB_EP_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP_SETUP         USB_EP_SETUP_Msk            /*!< EndPoint SETUP */\r\n#define USB_EP_T_FIELD_Pos   (9U)\r\n#define USB_EP_T_FIELD_Msk   (0x3UL << USB_EP_T_FIELD_Pos) /*!< 0x00000600 */\r\n#define USB_EP_T_FIELD       USB_EP_T_FIELD_Msk            /*!< EndPoint TYPE */\r\n#define USB_EP_KIND_Pos      (8U)\r\n#define USB_EP_KIND_Msk      (0x1UL << USB_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP_KIND          USB_EP_KIND_Msk            /*!< EndPoint KIND */\r\n#define USB_EP_CTR_TX_Pos    (7U)\r\n#define USB_EP_CTR_TX_Msk    (0x1UL << USB_EP_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP_CTR_TX        USB_EP_CTR_TX_Msk            /*!< EndPoint Correct TRansfer TX */\r\n#define USB_EP_DTOG_TX_Pos   (6U)\r\n#define USB_EP_DTOG_TX_Msk   (0x1UL << USB_EP_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP_DTOG_TX       USB_EP_DTOG_TX_Msk            /*!< EndPoint Data TOGGLE TX */\r\n#define USB_EPTX_STAT_Pos    (4U)\r\n#define USB_EPTX_STAT_Msk    (0x3UL << USB_EPTX_STAT_Pos) /*!< 0x00000030 */\r\n#define USB_EPTX_STAT        USB_EPTX_STAT_Msk            /*!< EndPoint TX STATus bit field */\r\n#define USB_EPADDR_FIELD_Pos (0U)\r\n#define USB_EPADDR_FIELD_Msk (0xFUL << USB_EPADDR_FIELD_Pos) /*!< 0x0000000F */\r\n#define USB_EPADDR_FIELD     USB_EPADDR_FIELD_Msk            /*!< EndPoint ADDRess FIELD */\r\n\r\n/* EndPoint REGister MASK (no toggle fields) */\r\n#define USB_EPREG_MASK (USB_EP_CTR_RX | USB_EP_SETUP | USB_EP_T_FIELD | USB_EP_KIND | USB_EP_CTR_TX | USB_EPADDR_FIELD)\r\n/*!< EP_TYPE[1:0] EndPoint TYPE */\r\n#define USB_EP_TYPE_MASK_Pos (9U)\r\n#define USB_EP_TYPE_MASK_Msk (0x3UL << USB_EP_TYPE_MASK_Pos) /*!< 0x00000600 */\r\n#define USB_EP_TYPE_MASK     USB_EP_TYPE_MASK_Msk            /*!< EndPoint TYPE Mask */\r\n#define USB_EP_BULK          0x00000000U                     /*!< EndPoint BULK */\r\n#define USB_EP_CONTROL       0x00000200U                     /*!< EndPoint CONTROL */\r\n#define USB_EP_ISOCHRONOUS   0x00000400U                     /*!< EndPoint ISOCHRONOUS */\r\n#define USB_EP_INTERRUPT     0x00000600U                     /*!< EndPoint INTERRUPT */\r\n#define USB_EP_T_MASK        (~USB_EP_T_FIELD & USB_EPREG_MASK)\r\n\r\n#define USB_EPKIND_MASK (~USB_EP_KIND & USB_EPREG_MASK) /*!< EP_KIND EndPoint KIND */\r\n                                                        /*!< STAT_TX[1:0] STATus for TX transfer */\r\n#define USB_EP_TX_DIS     0x00000000U                   /*!< EndPoint TX DISabled */\r\n#define USB_EP_TX_STALL   0x00000010U                   /*!< EndPoint TX STALLed */\r\n#define USB_EP_TX_NAK     0x00000020U                   /*!< EndPoint TX NAKed */\r\n#define USB_EP_TX_VALID   0x00000030U                   /*!< EndPoint TX VALID */\r\n#define USB_EPTX_DTOG1    0x00000010U                   /*!< EndPoint TX Data TOGgle bit1 */\r\n#define USB_EPTX_DTOG2    0x00000020U                   /*!< EndPoint TX Data TOGgle bit2 */\r\n#define USB_EPTX_DTOGMASK (USB_EPTX_STAT | USB_EPREG_MASK)\r\n/*!< STAT_RX[1:0] STATus for RX transfer */\r\n#define USB_EP_RX_DIS     0x00000000U /*!< EndPoint RX DISabled */\r\n#define USB_EP_RX_STALL   0x00001000U /*!< EndPoint RX STALLed */\r\n#define USB_EP_RX_NAK     0x00002000U /*!< EndPoint RX NAKed */\r\n#define USB_EP_RX_VALID   0x00003000U /*!< EndPoint RX VALID */\r\n#define USB_EPRX_DTOG1    0x00001000U /*!< EndPoint RX Data TOGgle bit1 */\r\n#define USB_EPRX_DTOG2    0x00002000U /*!< EndPoint RX Data TOGgle bit1 */\r\n#define USB_EPRX_DTOGMASK (USB_EPRX_STAT | USB_EPREG_MASK)\r\n\r\n/*******************  Bit definition for USB_EP0R register  *******************/\r\n#define USB_EP0R_EA_Pos (0U)\r\n#define USB_EP0R_EA_Msk (0xFUL << USB_EP0R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP0R_EA     USB_EP0R_EA_Msk            /*!< Endpoint Address */\r\n\r\n#define USB_EP0R_STAT_TX_Pos (4U)\r\n#define USB_EP0R_STAT_TX_Msk (0x3UL << USB_EP0R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP0R_STAT_TX     USB_EP0R_STAT_TX_Msk            /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP0R_STAT_TX_0   (0x1UL << USB_EP0R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP0R_STAT_TX_1   (0x2UL << USB_EP0R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP0R_DTOG_TX_Pos (6U)\r\n#define USB_EP0R_DTOG_TX_Msk (0x1UL << USB_EP0R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP0R_DTOG_TX     USB_EP0R_DTOG_TX_Msk            /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP0R_CTR_TX_Pos  (7U)\r\n#define USB_EP0R_CTR_TX_Msk  (0x1UL << USB_EP0R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP0R_CTR_TX      USB_EP0R_CTR_TX_Msk            /*!< Correct Transfer for transmission */\r\n#define USB_EP0R_EP_KIND_Pos (8U)\r\n#define USB_EP0R_EP_KIND_Msk (0x1UL << USB_EP0R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP0R_EP_KIND     USB_EP0R_EP_KIND_Msk            /*!< Endpoint Kind */\r\n\r\n#define USB_EP0R_EP_TYPE_Pos (9U)\r\n#define USB_EP0R_EP_TYPE_Msk (0x3UL << USB_EP0R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP0R_EP_TYPE     USB_EP0R_EP_TYPE_Msk            /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP0R_EP_TYPE_0   (0x1UL << USB_EP0R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP0R_EP_TYPE_1   (0x2UL << USB_EP0R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP0R_SETUP_Pos (11U)\r\n#define USB_EP0R_SETUP_Msk (0x1UL << USB_EP0R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP0R_SETUP     USB_EP0R_SETUP_Msk            /*!< Setup transaction completed */\r\n\r\n#define USB_EP0R_STAT_RX_Pos (12U)\r\n#define USB_EP0R_STAT_RX_Msk (0x3UL << USB_EP0R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP0R_STAT_RX     USB_EP0R_STAT_RX_Msk            /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP0R_STAT_RX_0   (0x1UL << USB_EP0R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP0R_STAT_RX_1   (0x2UL << USB_EP0R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP0R_DTOG_RX_Pos (14U)\r\n#define USB_EP0R_DTOG_RX_Msk (0x1UL << USB_EP0R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP0R_DTOG_RX     USB_EP0R_DTOG_RX_Msk            /*!< Data Toggle, for reception transfers */\r\n#define USB_EP0R_CTR_RX_Pos  (15U)\r\n#define USB_EP0R_CTR_RX_Msk  (0x1UL << USB_EP0R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP0R_CTR_RX      USB_EP0R_CTR_RX_Msk            /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP1R register  *******************/\r\n#define USB_EP1R_EA_Pos (0U)\r\n#define USB_EP1R_EA_Msk (0xFUL << USB_EP1R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP1R_EA     USB_EP1R_EA_Msk            /*!< Endpoint Address */\r\n\r\n#define USB_EP1R_STAT_TX_Pos (4U)\r\n#define USB_EP1R_STAT_TX_Msk (0x3UL << USB_EP1R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP1R_STAT_TX     USB_EP1R_STAT_TX_Msk            /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP1R_STAT_TX_0   (0x1UL << USB_EP1R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP1R_STAT_TX_1   (0x2UL << USB_EP1R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP1R_DTOG_TX_Pos (6U)\r\n#define USB_EP1R_DTOG_TX_Msk (0x1UL << USB_EP1R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP1R_DTOG_TX     USB_EP1R_DTOG_TX_Msk            /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP1R_CTR_TX_Pos  (7U)\r\n#define USB_EP1R_CTR_TX_Msk  (0x1UL << USB_EP1R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP1R_CTR_TX      USB_EP1R_CTR_TX_Msk            /*!< Correct Transfer for transmission */\r\n#define USB_EP1R_EP_KIND_Pos (8U)\r\n#define USB_EP1R_EP_KIND_Msk (0x1UL << USB_EP1R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP1R_EP_KIND     USB_EP1R_EP_KIND_Msk            /*!< Endpoint Kind */\r\n\r\n#define USB_EP1R_EP_TYPE_Pos (9U)\r\n#define USB_EP1R_EP_TYPE_Msk (0x3UL << USB_EP1R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP1R_EP_TYPE     USB_EP1R_EP_TYPE_Msk            /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP1R_EP_TYPE_0   (0x1UL << USB_EP1R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP1R_EP_TYPE_1   (0x2UL << USB_EP1R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP1R_SETUP_Pos (11U)\r\n#define USB_EP1R_SETUP_Msk (0x1UL << USB_EP1R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP1R_SETUP     USB_EP1R_SETUP_Msk            /*!< Setup transaction completed */\r\n\r\n#define USB_EP1R_STAT_RX_Pos (12U)\r\n#define USB_EP1R_STAT_RX_Msk (0x3UL << USB_EP1R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP1R_STAT_RX     USB_EP1R_STAT_RX_Msk            /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP1R_STAT_RX_0   (0x1UL << USB_EP1R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP1R_STAT_RX_1   (0x2UL << USB_EP1R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP1R_DTOG_RX_Pos (14U)\r\n#define USB_EP1R_DTOG_RX_Msk (0x1UL << USB_EP1R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP1R_DTOG_RX     USB_EP1R_DTOG_RX_Msk            /*!< Data Toggle, for reception transfers */\r\n#define USB_EP1R_CTR_RX_Pos  (15U)\r\n#define USB_EP1R_CTR_RX_Msk  (0x1UL << USB_EP1R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP1R_CTR_RX      USB_EP1R_CTR_RX_Msk            /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP2R register  *******************/\r\n#define USB_EP2R_EA_Pos (0U)\r\n#define USB_EP2R_EA_Msk (0xFUL << USB_EP2R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP2R_EA     USB_EP2R_EA_Msk            /*!< Endpoint Address */\r\n\r\n#define USB_EP2R_STAT_TX_Pos (4U)\r\n#define USB_EP2R_STAT_TX_Msk (0x3UL << USB_EP2R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP2R_STAT_TX     USB_EP2R_STAT_TX_Msk            /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP2R_STAT_TX_0   (0x1UL << USB_EP2R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP2R_STAT_TX_1   (0x2UL << USB_EP2R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP2R_DTOG_TX_Pos (6U)\r\n#define USB_EP2R_DTOG_TX_Msk (0x1UL << USB_EP2R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP2R_DTOG_TX     USB_EP2R_DTOG_TX_Msk            /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP2R_CTR_TX_Pos  (7U)\r\n#define USB_EP2R_CTR_TX_Msk  (0x1UL << USB_EP2R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP2R_CTR_TX      USB_EP2R_CTR_TX_Msk            /*!< Correct Transfer for transmission */\r\n#define USB_EP2R_EP_KIND_Pos (8U)\r\n#define USB_EP2R_EP_KIND_Msk (0x1UL << USB_EP2R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP2R_EP_KIND     USB_EP2R_EP_KIND_Msk            /*!< Endpoint Kind */\r\n\r\n#define USB_EP2R_EP_TYPE_Pos (9U)\r\n#define USB_EP2R_EP_TYPE_Msk (0x3UL << USB_EP2R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP2R_EP_TYPE     USB_EP2R_EP_TYPE_Msk            /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP2R_EP_TYPE_0   (0x1UL << USB_EP2R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP2R_EP_TYPE_1   (0x2UL << USB_EP2R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP2R_SETUP_Pos (11U)\r\n#define USB_EP2R_SETUP_Msk (0x1UL << USB_EP2R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP2R_SETUP     USB_EP2R_SETUP_Msk            /*!< Setup transaction completed */\r\n\r\n#define USB_EP2R_STAT_RX_Pos (12U)\r\n#define USB_EP2R_STAT_RX_Msk (0x3UL << USB_EP2R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP2R_STAT_RX     USB_EP2R_STAT_RX_Msk            /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP2R_STAT_RX_0   (0x1UL << USB_EP2R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP2R_STAT_RX_1   (0x2UL << USB_EP2R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP2R_DTOG_RX_Pos (14U)\r\n#define USB_EP2R_DTOG_RX_Msk (0x1UL << USB_EP2R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP2R_DTOG_RX     USB_EP2R_DTOG_RX_Msk            /*!< Data Toggle, for reception transfers */\r\n#define USB_EP2R_CTR_RX_Pos  (15U)\r\n#define USB_EP2R_CTR_RX_Msk  (0x1UL << USB_EP2R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP2R_CTR_RX      USB_EP2R_CTR_RX_Msk            /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP3R register  *******************/\r\n#define USB_EP3R_EA_Pos (0U)\r\n#define USB_EP3R_EA_Msk (0xFUL << USB_EP3R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP3R_EA     USB_EP3R_EA_Msk            /*!< Endpoint Address */\r\n\r\n#define USB_EP3R_STAT_TX_Pos (4U)\r\n#define USB_EP3R_STAT_TX_Msk (0x3UL << USB_EP3R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP3R_STAT_TX     USB_EP3R_STAT_TX_Msk            /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP3R_STAT_TX_0   (0x1UL << USB_EP3R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP3R_STAT_TX_1   (0x2UL << USB_EP3R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP3R_DTOG_TX_Pos (6U)\r\n#define USB_EP3R_DTOG_TX_Msk (0x1UL << USB_EP3R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP3R_DTOG_TX     USB_EP3R_DTOG_TX_Msk            /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP3R_CTR_TX_Pos  (7U)\r\n#define USB_EP3R_CTR_TX_Msk  (0x1UL << USB_EP3R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP3R_CTR_TX      USB_EP3R_CTR_TX_Msk            /*!< Correct Transfer for transmission */\r\n#define USB_EP3R_EP_KIND_Pos (8U)\r\n#define USB_EP3R_EP_KIND_Msk (0x1UL << USB_EP3R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP3R_EP_KIND     USB_EP3R_EP_KIND_Msk            /*!< Endpoint Kind */\r\n\r\n#define USB_EP3R_EP_TYPE_Pos (9U)\r\n#define USB_EP3R_EP_TYPE_Msk (0x3UL << USB_EP3R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP3R_EP_TYPE     USB_EP3R_EP_TYPE_Msk            /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP3R_EP_TYPE_0   (0x1UL << USB_EP3R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP3R_EP_TYPE_1   (0x2UL << USB_EP3R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP3R_SETUP_Pos (11U)\r\n#define USB_EP3R_SETUP_Msk (0x1UL << USB_EP3R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP3R_SETUP     USB_EP3R_SETUP_Msk            /*!< Setup transaction completed */\r\n\r\n#define USB_EP3R_STAT_RX_Pos (12U)\r\n#define USB_EP3R_STAT_RX_Msk (0x3UL << USB_EP3R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP3R_STAT_RX     USB_EP3R_STAT_RX_Msk            /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP3R_STAT_RX_0   (0x1UL << USB_EP3R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP3R_STAT_RX_1   (0x2UL << USB_EP3R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP3R_DTOG_RX_Pos (14U)\r\n#define USB_EP3R_DTOG_RX_Msk (0x1UL << USB_EP3R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP3R_DTOG_RX     USB_EP3R_DTOG_RX_Msk            /*!< Data Toggle, for reception transfers */\r\n#define USB_EP3R_CTR_RX_Pos  (15U)\r\n#define USB_EP3R_CTR_RX_Msk  (0x1UL << USB_EP3R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP3R_CTR_RX      USB_EP3R_CTR_RX_Msk            /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP4R register  *******************/\r\n#define USB_EP4R_EA_Pos (0U)\r\n#define USB_EP4R_EA_Msk (0xFUL << USB_EP4R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP4R_EA     USB_EP4R_EA_Msk            /*!< Endpoint Address */\r\n\r\n#define USB_EP4R_STAT_TX_Pos (4U)\r\n#define USB_EP4R_STAT_TX_Msk (0x3UL << USB_EP4R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP4R_STAT_TX     USB_EP4R_STAT_TX_Msk            /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP4R_STAT_TX_0   (0x1UL << USB_EP4R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP4R_STAT_TX_1   (0x2UL << USB_EP4R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP4R_DTOG_TX_Pos (6U)\r\n#define USB_EP4R_DTOG_TX_Msk (0x1UL << USB_EP4R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP4R_DTOG_TX     USB_EP4R_DTOG_TX_Msk            /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP4R_CTR_TX_Pos  (7U)\r\n#define USB_EP4R_CTR_TX_Msk  (0x1UL << USB_EP4R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP4R_CTR_TX      USB_EP4R_CTR_TX_Msk            /*!< Correct Transfer for transmission */\r\n#define USB_EP4R_EP_KIND_Pos (8U)\r\n#define USB_EP4R_EP_KIND_Msk (0x1UL << USB_EP4R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP4R_EP_KIND     USB_EP4R_EP_KIND_Msk            /*!< Endpoint Kind */\r\n\r\n#define USB_EP4R_EP_TYPE_Pos (9U)\r\n#define USB_EP4R_EP_TYPE_Msk (0x3UL << USB_EP4R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP4R_EP_TYPE     USB_EP4R_EP_TYPE_Msk            /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP4R_EP_TYPE_0   (0x1UL << USB_EP4R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP4R_EP_TYPE_1   (0x2UL << USB_EP4R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP4R_SETUP_Pos (11U)\r\n#define USB_EP4R_SETUP_Msk (0x1UL << USB_EP4R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP4R_SETUP     USB_EP4R_SETUP_Msk            /*!< Setup transaction completed */\r\n\r\n#define USB_EP4R_STAT_RX_Pos (12U)\r\n#define USB_EP4R_STAT_RX_Msk (0x3UL << USB_EP4R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP4R_STAT_RX     USB_EP4R_STAT_RX_Msk            /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP4R_STAT_RX_0   (0x1UL << USB_EP4R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP4R_STAT_RX_1   (0x2UL << USB_EP4R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP4R_DTOG_RX_Pos (14U)\r\n#define USB_EP4R_DTOG_RX_Msk (0x1UL << USB_EP4R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP4R_DTOG_RX     USB_EP4R_DTOG_RX_Msk            /*!< Data Toggle, for reception transfers */\r\n#define USB_EP4R_CTR_RX_Pos  (15U)\r\n#define USB_EP4R_CTR_RX_Msk  (0x1UL << USB_EP4R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP4R_CTR_RX      USB_EP4R_CTR_RX_Msk            /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP5R register  *******************/\r\n#define USB_EP5R_EA_Pos (0U)\r\n#define USB_EP5R_EA_Msk (0xFUL << USB_EP5R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP5R_EA     USB_EP5R_EA_Msk            /*!< Endpoint Address */\r\n\r\n#define USB_EP5R_STAT_TX_Pos (4U)\r\n#define USB_EP5R_STAT_TX_Msk (0x3UL << USB_EP5R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP5R_STAT_TX     USB_EP5R_STAT_TX_Msk            /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP5R_STAT_TX_0   (0x1UL << USB_EP5R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP5R_STAT_TX_1   (0x2UL << USB_EP5R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP5R_DTOG_TX_Pos (6U)\r\n#define USB_EP5R_DTOG_TX_Msk (0x1UL << USB_EP5R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP5R_DTOG_TX     USB_EP5R_DTOG_TX_Msk            /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP5R_CTR_TX_Pos  (7U)\r\n#define USB_EP5R_CTR_TX_Msk  (0x1UL << USB_EP5R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP5R_CTR_TX      USB_EP5R_CTR_TX_Msk            /*!< Correct Transfer for transmission */\r\n#define USB_EP5R_EP_KIND_Pos (8U)\r\n#define USB_EP5R_EP_KIND_Msk (0x1UL << USB_EP5R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP5R_EP_KIND     USB_EP5R_EP_KIND_Msk            /*!< Endpoint Kind */\r\n\r\n#define USB_EP5R_EP_TYPE_Pos (9U)\r\n#define USB_EP5R_EP_TYPE_Msk (0x3UL << USB_EP5R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP5R_EP_TYPE     USB_EP5R_EP_TYPE_Msk            /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP5R_EP_TYPE_0   (0x1UL << USB_EP5R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP5R_EP_TYPE_1   (0x2UL << USB_EP5R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP5R_SETUP_Pos (11U)\r\n#define USB_EP5R_SETUP_Msk (0x1UL << USB_EP5R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP5R_SETUP     USB_EP5R_SETUP_Msk            /*!< Setup transaction completed */\r\n\r\n#define USB_EP5R_STAT_RX_Pos (12U)\r\n#define USB_EP5R_STAT_RX_Msk (0x3UL << USB_EP5R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP5R_STAT_RX     USB_EP5R_STAT_RX_Msk            /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP5R_STAT_RX_0   (0x1UL << USB_EP5R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP5R_STAT_RX_1   (0x2UL << USB_EP5R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP5R_DTOG_RX_Pos (14U)\r\n#define USB_EP5R_DTOG_RX_Msk (0x1UL << USB_EP5R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP5R_DTOG_RX     USB_EP5R_DTOG_RX_Msk            /*!< Data Toggle, for reception transfers */\r\n#define USB_EP5R_CTR_RX_Pos  (15U)\r\n#define USB_EP5R_CTR_RX_Msk  (0x1UL << USB_EP5R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP5R_CTR_RX      USB_EP5R_CTR_RX_Msk            /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP6R register  *******************/\r\n#define USB_EP6R_EA_Pos (0U)\r\n#define USB_EP6R_EA_Msk (0xFUL << USB_EP6R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP6R_EA     USB_EP6R_EA_Msk            /*!< Endpoint Address */\r\n\r\n#define USB_EP6R_STAT_TX_Pos (4U)\r\n#define USB_EP6R_STAT_TX_Msk (0x3UL << USB_EP6R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP6R_STAT_TX     USB_EP6R_STAT_TX_Msk            /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP6R_STAT_TX_0   (0x1UL << USB_EP6R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP6R_STAT_TX_1   (0x2UL << USB_EP6R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP6R_DTOG_TX_Pos (6U)\r\n#define USB_EP6R_DTOG_TX_Msk (0x1UL << USB_EP6R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP6R_DTOG_TX     USB_EP6R_DTOG_TX_Msk            /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP6R_CTR_TX_Pos  (7U)\r\n#define USB_EP6R_CTR_TX_Msk  (0x1UL << USB_EP6R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP6R_CTR_TX      USB_EP6R_CTR_TX_Msk            /*!< Correct Transfer for transmission */\r\n#define USB_EP6R_EP_KIND_Pos (8U)\r\n#define USB_EP6R_EP_KIND_Msk (0x1UL << USB_EP6R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP6R_EP_KIND     USB_EP6R_EP_KIND_Msk            /*!< Endpoint Kind */\r\n\r\n#define USB_EP6R_EP_TYPE_Pos (9U)\r\n#define USB_EP6R_EP_TYPE_Msk (0x3UL << USB_EP6R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP6R_EP_TYPE     USB_EP6R_EP_TYPE_Msk            /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP6R_EP_TYPE_0   (0x1UL << USB_EP6R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP6R_EP_TYPE_1   (0x2UL << USB_EP6R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP6R_SETUP_Pos (11U)\r\n#define USB_EP6R_SETUP_Msk (0x1UL << USB_EP6R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP6R_SETUP     USB_EP6R_SETUP_Msk            /*!< Setup transaction completed */\r\n\r\n#define USB_EP6R_STAT_RX_Pos (12U)\r\n#define USB_EP6R_STAT_RX_Msk (0x3UL << USB_EP6R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP6R_STAT_RX     USB_EP6R_STAT_RX_Msk            /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP6R_STAT_RX_0   (0x1UL << USB_EP6R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP6R_STAT_RX_1   (0x2UL << USB_EP6R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP6R_DTOG_RX_Pos (14U)\r\n#define USB_EP6R_DTOG_RX_Msk (0x1UL << USB_EP6R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP6R_DTOG_RX     USB_EP6R_DTOG_RX_Msk            /*!< Data Toggle, for reception transfers */\r\n#define USB_EP6R_CTR_RX_Pos  (15U)\r\n#define USB_EP6R_CTR_RX_Msk  (0x1UL << USB_EP6R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP6R_CTR_RX      USB_EP6R_CTR_RX_Msk            /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP7R register  *******************/\r\n#define USB_EP7R_EA_Pos (0U)\r\n#define USB_EP7R_EA_Msk (0xFUL << USB_EP7R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP7R_EA     USB_EP7R_EA_Msk            /*!< Endpoint Address */\r\n\r\n#define USB_EP7R_STAT_TX_Pos (4U)\r\n#define USB_EP7R_STAT_TX_Msk (0x3UL << USB_EP7R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP7R_STAT_TX     USB_EP7R_STAT_TX_Msk            /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP7R_STAT_TX_0   (0x1UL << USB_EP7R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP7R_STAT_TX_1   (0x2UL << USB_EP7R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP7R_DTOG_TX_Pos (6U)\r\n#define USB_EP7R_DTOG_TX_Msk (0x1UL << USB_EP7R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP7R_DTOG_TX     USB_EP7R_DTOG_TX_Msk            /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP7R_CTR_TX_Pos  (7U)\r\n#define USB_EP7R_CTR_TX_Msk  (0x1UL << USB_EP7R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP7R_CTR_TX      USB_EP7R_CTR_TX_Msk            /*!< Correct Transfer for transmission */\r\n#define USB_EP7R_EP_KIND_Pos (8U)\r\n#define USB_EP7R_EP_KIND_Msk (0x1UL << USB_EP7R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP7R_EP_KIND     USB_EP7R_EP_KIND_Msk            /*!< Endpoint Kind */\r\n\r\n#define USB_EP7R_EP_TYPE_Pos (9U)\r\n#define USB_EP7R_EP_TYPE_Msk (0x3UL << USB_EP7R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP7R_EP_TYPE     USB_EP7R_EP_TYPE_Msk            /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP7R_EP_TYPE_0   (0x1UL << USB_EP7R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP7R_EP_TYPE_1   (0x2UL << USB_EP7R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP7R_SETUP_Pos (11U)\r\n#define USB_EP7R_SETUP_Msk (0x1UL << USB_EP7R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP7R_SETUP     USB_EP7R_SETUP_Msk            /*!< Setup transaction completed */\r\n\r\n#define USB_EP7R_STAT_RX_Pos (12U)\r\n#define USB_EP7R_STAT_RX_Msk (0x3UL << USB_EP7R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP7R_STAT_RX     USB_EP7R_STAT_RX_Msk            /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP7R_STAT_RX_0   (0x1UL << USB_EP7R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP7R_STAT_RX_1   (0x2UL << USB_EP7R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP7R_DTOG_RX_Pos (14U)\r\n#define USB_EP7R_DTOG_RX_Msk (0x1UL << USB_EP7R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP7R_DTOG_RX     USB_EP7R_DTOG_RX_Msk            /*!< Data Toggle, for reception transfers */\r\n#define USB_EP7R_CTR_RX_Pos  (15U)\r\n#define USB_EP7R_CTR_RX_Msk  (0x1UL << USB_EP7R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP7R_CTR_RX      USB_EP7R_CTR_RX_Msk            /*!< Correct Transfer for reception */\r\n\r\n/*!< Common registers */\r\n/*******************  Bit definition for USB_CNTR register  *******************/\r\n#define USB_CNTR_FRES_Pos    (0U)\r\n#define USB_CNTR_FRES_Msk    (0x1UL << USB_CNTR_FRES_Pos) /*!< 0x00000001 */\r\n#define USB_CNTR_FRES        USB_CNTR_FRES_Msk            /*!< Force USB Reset */\r\n#define USB_CNTR_PDWN_Pos    (1U)\r\n#define USB_CNTR_PDWN_Msk    (0x1UL << USB_CNTR_PDWN_Pos) /*!< 0x00000002 */\r\n#define USB_CNTR_PDWN        USB_CNTR_PDWN_Msk            /*!< Power down */\r\n#define USB_CNTR_LP_MODE_Pos (2U)\r\n#define USB_CNTR_LP_MODE_Msk (0x1UL << USB_CNTR_LP_MODE_Pos) /*!< 0x00000004 */\r\n#define USB_CNTR_LP_MODE     USB_CNTR_LP_MODE_Msk            /*!< Low-power mode */\r\n#define USB_CNTR_FSUSP_Pos   (3U)\r\n#define USB_CNTR_FSUSP_Msk   (0x1UL << USB_CNTR_FSUSP_Pos) /*!< 0x00000008 */\r\n#define USB_CNTR_FSUSP       USB_CNTR_FSUSP_Msk            /*!< Force suspend */\r\n#define USB_CNTR_RESUME_Pos  (4U)\r\n#define USB_CNTR_RESUME_Msk  (0x1UL << USB_CNTR_RESUME_Pos) /*!< 0x00000010 */\r\n#define USB_CNTR_RESUME      USB_CNTR_RESUME_Msk            /*!< Resume request */\r\n#define USB_CNTR_ESOFM_Pos   (8U)\r\n#define USB_CNTR_ESOFM_Msk   (0x1UL << USB_CNTR_ESOFM_Pos) /*!< 0x00000100 */\r\n#define USB_CNTR_ESOFM       USB_CNTR_ESOFM_Msk            /*!< Expected Start Of Frame Interrupt Mask */\r\n#define USB_CNTR_SOFM_Pos    (9U)\r\n#define USB_CNTR_SOFM_Msk    (0x1UL << USB_CNTR_SOFM_Pos) /*!< 0x00000200 */\r\n#define USB_CNTR_SOFM        USB_CNTR_SOFM_Msk            /*!< Start Of Frame Interrupt Mask */\r\n#define USB_CNTR_RESETM_Pos  (10U)\r\n#define USB_CNTR_RESETM_Msk  (0x1UL << USB_CNTR_RESETM_Pos) /*!< 0x00000400 */\r\n#define USB_CNTR_RESETM      USB_CNTR_RESETM_Msk            /*!< RESET Interrupt Mask */\r\n#define USB_CNTR_SUSPM_Pos   (11U)\r\n#define USB_CNTR_SUSPM_Msk   (0x1UL << USB_CNTR_SUSPM_Pos) /*!< 0x00000800 */\r\n#define USB_CNTR_SUSPM       USB_CNTR_SUSPM_Msk            /*!< Suspend mode Interrupt Mask */\r\n#define USB_CNTR_WKUPM_Pos   (12U)\r\n#define USB_CNTR_WKUPM_Msk   (0x1UL << USB_CNTR_WKUPM_Pos) /*!< 0x00001000 */\r\n#define USB_CNTR_WKUPM       USB_CNTR_WKUPM_Msk            /*!< Wakeup Interrupt Mask */\r\n#define USB_CNTR_ERRM_Pos    (13U)\r\n#define USB_CNTR_ERRM_Msk    (0x1UL << USB_CNTR_ERRM_Pos) /*!< 0x00002000 */\r\n#define USB_CNTR_ERRM        USB_CNTR_ERRM_Msk            /*!< Error Interrupt Mask */\r\n#define USB_CNTR_PMAOVRM_Pos (14U)\r\n#define USB_CNTR_PMAOVRM_Msk (0x1UL << USB_CNTR_PMAOVRM_Pos) /*!< 0x00004000 */\r\n#define USB_CNTR_PMAOVRM     USB_CNTR_PMAOVRM_Msk            /*!< Packet Memory Area Over / Underrun Interrupt Mask */\r\n#define USB_CNTR_CTRM_Pos    (15U)\r\n#define USB_CNTR_CTRM_Msk    (0x1UL << USB_CNTR_CTRM_Pos) /*!< 0x00008000 */\r\n#define USB_CNTR_CTRM        USB_CNTR_CTRM_Msk            /*!< Correct Transfer Interrupt Mask */\r\n\r\n/*******************  Bit definition for USB_ISTR register  *******************/\r\n#define USB_ISTR_EP_ID_Pos  (0U)\r\n#define USB_ISTR_EP_ID_Msk  (0xFUL << USB_ISTR_EP_ID_Pos) /*!< 0x0000000F */\r\n#define USB_ISTR_EP_ID      USB_ISTR_EP_ID_Msk            /*!< Endpoint Identifier */\r\n#define USB_ISTR_DIR_Pos    (4U)\r\n#define USB_ISTR_DIR_Msk    (0x1UL << USB_ISTR_DIR_Pos) /*!< 0x00000010 */\r\n#define USB_ISTR_DIR        USB_ISTR_DIR_Msk            /*!< Direction of transaction */\r\n#define USB_ISTR_ESOF_Pos   (8U)\r\n#define USB_ISTR_ESOF_Msk   (0x1UL << USB_ISTR_ESOF_Pos) /*!< 0x00000100 */\r\n#define USB_ISTR_ESOF       USB_ISTR_ESOF_Msk            /*!< Expected Start Of Frame */\r\n#define USB_ISTR_SOF_Pos    (9U)\r\n#define USB_ISTR_SOF_Msk    (0x1UL << USB_ISTR_SOF_Pos) /*!< 0x00000200 */\r\n#define USB_ISTR_SOF        USB_ISTR_SOF_Msk            /*!< Start Of Frame */\r\n#define USB_ISTR_RESET_Pos  (10U)\r\n#define USB_ISTR_RESET_Msk  (0x1UL << USB_ISTR_RESET_Pos) /*!< 0x00000400 */\r\n#define USB_ISTR_RESET      USB_ISTR_RESET_Msk            /*!< USB RESET request */\r\n#define USB_ISTR_SUSP_Pos   (11U)\r\n#define USB_ISTR_SUSP_Msk   (0x1UL << USB_ISTR_SUSP_Pos) /*!< 0x00000800 */\r\n#define USB_ISTR_SUSP       USB_ISTR_SUSP_Msk            /*!< Suspend mode request */\r\n#define USB_ISTR_WKUP_Pos   (12U)\r\n#define USB_ISTR_WKUP_Msk   (0x1UL << USB_ISTR_WKUP_Pos) /*!< 0x00001000 */\r\n#define USB_ISTR_WKUP       USB_ISTR_WKUP_Msk            /*!< Wake up */\r\n#define USB_ISTR_ERR_Pos    (13U)\r\n#define USB_ISTR_ERR_Msk    (0x1UL << USB_ISTR_ERR_Pos) /*!< 0x00002000 */\r\n#define USB_ISTR_ERR        USB_ISTR_ERR_Msk            /*!< Error */\r\n#define USB_ISTR_PMAOVR_Pos (14U)\r\n#define USB_ISTR_PMAOVR_Msk (0x1UL << USB_ISTR_PMAOVR_Pos) /*!< 0x00004000 */\r\n#define USB_ISTR_PMAOVR     USB_ISTR_PMAOVR_Msk            /*!< Packet Memory Area Over / Underrun */\r\n#define USB_ISTR_CTR_Pos    (15U)\r\n#define USB_ISTR_CTR_Msk    (0x1UL << USB_ISTR_CTR_Pos) /*!< 0x00008000 */\r\n#define USB_ISTR_CTR        USB_ISTR_CTR_Msk            /*!< Correct Transfer */\r\n\r\n/*******************  Bit definition for USB_FNR register  ********************/\r\n#define USB_FNR_FN_Pos   (0U)\r\n#define USB_FNR_FN_Msk   (0x7FFUL << USB_FNR_FN_Pos) /*!< 0x000007FF */\r\n#define USB_FNR_FN       USB_FNR_FN_Msk              /*!< Frame Number */\r\n#define USB_FNR_LSOF_Pos (11U)\r\n#define USB_FNR_LSOF_Msk (0x3UL << USB_FNR_LSOF_Pos) /*!< 0x00001800 */\r\n#define USB_FNR_LSOF     USB_FNR_LSOF_Msk            /*!< Lost SOF */\r\n#define USB_FNR_LCK_Pos  (13U)\r\n#define USB_FNR_LCK_Msk  (0x1UL << USB_FNR_LCK_Pos) /*!< 0x00002000 */\r\n#define USB_FNR_LCK      USB_FNR_LCK_Msk            /*!< Locked */\r\n#define USB_FNR_RXDM_Pos (14U)\r\n#define USB_FNR_RXDM_Msk (0x1UL << USB_FNR_RXDM_Pos) /*!< 0x00004000 */\r\n#define USB_FNR_RXDM     USB_FNR_RXDM_Msk            /*!< Receive Data - Line Status */\r\n#define USB_FNR_RXDP_Pos (15U)\r\n#define USB_FNR_RXDP_Msk (0x1UL << USB_FNR_RXDP_Pos) /*!< 0x00008000 */\r\n#define USB_FNR_RXDP     USB_FNR_RXDP_Msk            /*!< Receive Data + Line Status */\r\n\r\n/******************  Bit definition for USB_DADDR register  *******************/\r\n#define USB_DADDR_ADD_Pos  (0U)\r\n#define USB_DADDR_ADD_Msk  (0x7FUL << USB_DADDR_ADD_Pos) /*!< 0x0000007F */\r\n#define USB_DADDR_ADD      USB_DADDR_ADD_Msk             /*!< ADD[6:0] bits (Device Address) */\r\n#define USB_DADDR_ADD0_Pos (0U)\r\n#define USB_DADDR_ADD0_Msk (0x1UL << USB_DADDR_ADD0_Pos) /*!< 0x00000001 */\r\n#define USB_DADDR_ADD0     USB_DADDR_ADD0_Msk            /*!< Bit 0 */\r\n#define USB_DADDR_ADD1_Pos (1U)\r\n#define USB_DADDR_ADD1_Msk (0x1UL << USB_DADDR_ADD1_Pos) /*!< 0x00000002 */\r\n#define USB_DADDR_ADD1     USB_DADDR_ADD1_Msk            /*!< Bit 1 */\r\n#define USB_DADDR_ADD2_Pos (2U)\r\n#define USB_DADDR_ADD2_Msk (0x1UL << USB_DADDR_ADD2_Pos) /*!< 0x00000004 */\r\n#define USB_DADDR_ADD2     USB_DADDR_ADD2_Msk            /*!< Bit 2 */\r\n#define USB_DADDR_ADD3_Pos (3U)\r\n#define USB_DADDR_ADD3_Msk (0x1UL << USB_DADDR_ADD3_Pos) /*!< 0x00000008 */\r\n#define USB_DADDR_ADD3     USB_DADDR_ADD3_Msk            /*!< Bit 3 */\r\n#define USB_DADDR_ADD4_Pos (4U)\r\n#define USB_DADDR_ADD4_Msk (0x1UL << USB_DADDR_ADD4_Pos) /*!< 0x00000010 */\r\n#define USB_DADDR_ADD4     USB_DADDR_ADD4_Msk            /*!< Bit 4 */\r\n#define USB_DADDR_ADD5_Pos (5U)\r\n#define USB_DADDR_ADD5_Msk (0x1UL << USB_DADDR_ADD5_Pos) /*!< 0x00000020 */\r\n#define USB_DADDR_ADD5     USB_DADDR_ADD5_Msk            /*!< Bit 5 */\r\n#define USB_DADDR_ADD6_Pos (6U)\r\n#define USB_DADDR_ADD6_Msk (0x1UL << USB_DADDR_ADD6_Pos) /*!< 0x00000040 */\r\n#define USB_DADDR_ADD6     USB_DADDR_ADD6_Msk            /*!< Bit 6 */\r\n\r\n#define USB_DADDR_EF_Pos (7U)\r\n#define USB_DADDR_EF_Msk (0x1UL << USB_DADDR_EF_Pos) /*!< 0x00000080 */\r\n#define USB_DADDR_EF     USB_DADDR_EF_Msk            /*!< Enable Function */\r\n\r\n/******************  Bit definition for USB_BTABLE register  ******************/\r\n#define USB_BTABLE_BTABLE_Pos (3U)\r\n#define USB_BTABLE_BTABLE_Msk (0x1FFFUL << USB_BTABLE_BTABLE_Pos) /*!< 0x0000FFF8 */\r\n#define USB_BTABLE_BTABLE     USB_BTABLE_BTABLE_Msk               /*!< Buffer Table */\r\n\r\n/*!< Buffer descriptor table */\r\n/*****************  Bit definition for USB_ADDR0_TX register  *****************/\r\n#define USB_ADDR0_TX_ADDR0_TX_Pos (1U)\r\n#define USB_ADDR0_TX_ADDR0_TX_Msk (0x7FFFUL << USB_ADDR0_TX_ADDR0_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR0_TX_ADDR0_TX     USB_ADDR0_TX_ADDR0_TX_Msk               /*!< Transmission Buffer Address 0 */\r\n\r\n/*****************  Bit definition for USB_ADDR1_TX register  *****************/\r\n#define USB_ADDR1_TX_ADDR1_TX_Pos (1U)\r\n#define USB_ADDR1_TX_ADDR1_TX_Msk (0x7FFFUL << USB_ADDR1_TX_ADDR1_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR1_TX_ADDR1_TX     USB_ADDR1_TX_ADDR1_TX_Msk               /*!< Transmission Buffer Address 1 */\r\n\r\n/*****************  Bit definition for USB_ADDR2_TX register  *****************/\r\n#define USB_ADDR2_TX_ADDR2_TX_Pos (1U)\r\n#define USB_ADDR2_TX_ADDR2_TX_Msk (0x7FFFUL << USB_ADDR2_TX_ADDR2_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR2_TX_ADDR2_TX     USB_ADDR2_TX_ADDR2_TX_Msk               /*!< Transmission Buffer Address 2 */\r\n\r\n/*****************  Bit definition for USB_ADDR3_TX register  *****************/\r\n#define USB_ADDR3_TX_ADDR3_TX_Pos (1U)\r\n#define USB_ADDR3_TX_ADDR3_TX_Msk (0x7FFFUL << USB_ADDR3_TX_ADDR3_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR3_TX_ADDR3_TX     USB_ADDR3_TX_ADDR3_TX_Msk               /*!< Transmission Buffer Address 3 */\r\n\r\n/*****************  Bit definition for USB_ADDR4_TX register  *****************/\r\n#define USB_ADDR4_TX_ADDR4_TX_Pos (1U)\r\n#define USB_ADDR4_TX_ADDR4_TX_Msk (0x7FFFUL << USB_ADDR4_TX_ADDR4_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR4_TX_ADDR4_TX     USB_ADDR4_TX_ADDR4_TX_Msk               /*!< Transmission Buffer Address 4 */\r\n\r\n/*****************  Bit definition for USB_ADDR5_TX register  *****************/\r\n#define USB_ADDR5_TX_ADDR5_TX_Pos (1U)\r\n#define USB_ADDR5_TX_ADDR5_TX_Msk (0x7FFFUL << USB_ADDR5_TX_ADDR5_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR5_TX_ADDR5_TX     USB_ADDR5_TX_ADDR5_TX_Msk               /*!< Transmission Buffer Address 5 */\r\n\r\n/*****************  Bit definition for USB_ADDR6_TX register  *****************/\r\n#define USB_ADDR6_TX_ADDR6_TX_Pos (1U)\r\n#define USB_ADDR6_TX_ADDR6_TX_Msk (0x7FFFUL << USB_ADDR6_TX_ADDR6_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR6_TX_ADDR6_TX     USB_ADDR6_TX_ADDR6_TX_Msk               /*!< Transmission Buffer Address 6 */\r\n\r\n/*****************  Bit definition for USB_ADDR7_TX register  *****************/\r\n#define USB_ADDR7_TX_ADDR7_TX_Pos (1U)\r\n#define USB_ADDR7_TX_ADDR7_TX_Msk (0x7FFFUL << USB_ADDR7_TX_ADDR7_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR7_TX_ADDR7_TX     USB_ADDR7_TX_ADDR7_TX_Msk               /*!< Transmission Buffer Address 7 */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/*****************  Bit definition for USB_COUNT0_TX register  ****************/\r\n#define USB_COUNT0_TX_COUNT0_TX_Pos (0U)\r\n#define USB_COUNT0_TX_COUNT0_TX_Msk (0x3FFUL << USB_COUNT0_TX_COUNT0_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT0_TX_COUNT0_TX     USB_COUNT0_TX_COUNT0_TX_Msk              /*!< Transmission Byte Count 0 */\r\n\r\n/*****************  Bit definition for USB_COUNT1_TX register  ****************/\r\n#define USB_COUNT1_TX_COUNT1_TX_Pos (0U)\r\n#define USB_COUNT1_TX_COUNT1_TX_Msk (0x3FFUL << USB_COUNT1_TX_COUNT1_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT1_TX_COUNT1_TX     USB_COUNT1_TX_COUNT1_TX_Msk              /*!< Transmission Byte Count 1 */\r\n\r\n/*****************  Bit definition for USB_COUNT2_TX register  ****************/\r\n#define USB_COUNT2_TX_COUNT2_TX_Pos (0U)\r\n#define USB_COUNT2_TX_COUNT2_TX_Msk (0x3FFUL << USB_COUNT2_TX_COUNT2_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT2_TX_COUNT2_TX     USB_COUNT2_TX_COUNT2_TX_Msk              /*!< Transmission Byte Count 2 */\r\n\r\n/*****************  Bit definition for USB_COUNT3_TX register  ****************/\r\n#define USB_COUNT3_TX_COUNT3_TX_Pos (0U)\r\n#define USB_COUNT3_TX_COUNT3_TX_Msk (0x3FFUL << USB_COUNT3_TX_COUNT3_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT3_TX_COUNT3_TX     USB_COUNT3_TX_COUNT3_TX_Msk              /*!< Transmission Byte Count 3 */\r\n\r\n/*****************  Bit definition for USB_COUNT4_TX register  ****************/\r\n#define USB_COUNT4_TX_COUNT4_TX_Pos (0U)\r\n#define USB_COUNT4_TX_COUNT4_TX_Msk (0x3FFUL << USB_COUNT4_TX_COUNT4_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT4_TX_COUNT4_TX     USB_COUNT4_TX_COUNT4_TX_Msk              /*!< Transmission Byte Count 4 */\r\n\r\n/*****************  Bit definition for USB_COUNT5_TX register  ****************/\r\n#define USB_COUNT5_TX_COUNT5_TX_Pos (0U)\r\n#define USB_COUNT5_TX_COUNT5_TX_Msk (0x3FFUL << USB_COUNT5_TX_COUNT5_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT5_TX_COUNT5_TX     USB_COUNT5_TX_COUNT5_TX_Msk              /*!< Transmission Byte Count 5 */\r\n\r\n/*****************  Bit definition for USB_COUNT6_TX register  ****************/\r\n#define USB_COUNT6_TX_COUNT6_TX_Pos (0U)\r\n#define USB_COUNT6_TX_COUNT6_TX_Msk (0x3FFUL << USB_COUNT6_TX_COUNT6_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT6_TX_COUNT6_TX     USB_COUNT6_TX_COUNT6_TX_Msk              /*!< Transmission Byte Count 6 */\r\n\r\n/*****************  Bit definition for USB_COUNT7_TX register  ****************/\r\n#define USB_COUNT7_TX_COUNT7_TX_Pos (0U)\r\n#define USB_COUNT7_TX_COUNT7_TX_Msk (0x3FFUL << USB_COUNT7_TX_COUNT7_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT7_TX_COUNT7_TX     USB_COUNT7_TX_COUNT7_TX_Msk              /*!< Transmission Byte Count 7 */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/****************  Bit definition for USB_COUNT0_TX_0 register  ***************/\r\n#define USB_COUNT0_TX_0_COUNT0_TX_0 0x000003FFU /*!< Transmission Byte Count 0 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT0_TX_1 register  ***************/\r\n#define USB_COUNT0_TX_1_COUNT0_TX_1 0x03FF0000U /*!< Transmission Byte Count 0 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT1_TX_0 register  ***************/\r\n#define USB_COUNT1_TX_0_COUNT1_TX_0 0x000003FFU /*!< Transmission Byte Count 1 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT1_TX_1 register  ***************/\r\n#define USB_COUNT1_TX_1_COUNT1_TX_1 0x03FF0000U /*!< Transmission Byte Count 1 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT2_TX_0 register  ***************/\r\n#define USB_COUNT2_TX_0_COUNT2_TX_0 0x000003FFU /*!< Transmission Byte Count 2 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT2_TX_1 register  ***************/\r\n#define USB_COUNT2_TX_1_COUNT2_TX_1 0x03FF0000U /*!< Transmission Byte Count 2 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT3_TX_0 register  ***************/\r\n#define USB_COUNT3_TX_0_COUNT3_TX_0 0x000003FFU /*!< Transmission Byte Count 3 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT3_TX_1 register  ***************/\r\n#define USB_COUNT3_TX_1_COUNT3_TX_1 0x03FF0000U /*!< Transmission Byte Count 3 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT4_TX_0 register  ***************/\r\n#define USB_COUNT4_TX_0_COUNT4_TX_0 0x000003FFU /*!< Transmission Byte Count 4 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT4_TX_1 register  ***************/\r\n#define USB_COUNT4_TX_1_COUNT4_TX_1 0x03FF0000U /*!< Transmission Byte Count 4 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT5_TX_0 register  ***************/\r\n#define USB_COUNT5_TX_0_COUNT5_TX_0 0x000003FFU /*!< Transmission Byte Count 5 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT5_TX_1 register  ***************/\r\n#define USB_COUNT5_TX_1_COUNT5_TX_1 0x03FF0000U /*!< Transmission Byte Count 5 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT6_TX_0 register  ***************/\r\n#define USB_COUNT6_TX_0_COUNT6_TX_0 0x000003FFU /*!< Transmission Byte Count 6 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT6_TX_1 register  ***************/\r\n#define USB_COUNT6_TX_1_COUNT6_TX_1 0x03FF0000U /*!< Transmission Byte Count 6 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT7_TX_0 register  ***************/\r\n#define USB_COUNT7_TX_0_COUNT7_TX_0 0x000003FFU /*!< Transmission Byte Count 7 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT7_TX_1 register  ***************/\r\n#define USB_COUNT7_TX_1_COUNT7_TX_1 0x03FF0000U /*!< Transmission Byte Count 7 (high) */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/*****************  Bit definition for USB_ADDR0_RX register  *****************/\r\n#define USB_ADDR0_RX_ADDR0_RX_Pos (1U)\r\n#define USB_ADDR0_RX_ADDR0_RX_Msk (0x7FFFUL << USB_ADDR0_RX_ADDR0_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR0_RX_ADDR0_RX     USB_ADDR0_RX_ADDR0_RX_Msk               /*!< Reception Buffer Address 0 */\r\n\r\n/*****************  Bit definition for USB_ADDR1_RX register  *****************/\r\n#define USB_ADDR1_RX_ADDR1_RX_Pos (1U)\r\n#define USB_ADDR1_RX_ADDR1_RX_Msk (0x7FFFUL << USB_ADDR1_RX_ADDR1_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR1_RX_ADDR1_RX     USB_ADDR1_RX_ADDR1_RX_Msk               /*!< Reception Buffer Address 1 */\r\n\r\n/*****************  Bit definition for USB_ADDR2_RX register  *****************/\r\n#define USB_ADDR2_RX_ADDR2_RX_Pos (1U)\r\n#define USB_ADDR2_RX_ADDR2_RX_Msk (0x7FFFUL << USB_ADDR2_RX_ADDR2_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR2_RX_ADDR2_RX     USB_ADDR2_RX_ADDR2_RX_Msk               /*!< Reception Buffer Address 2 */\r\n\r\n/*****************  Bit definition for USB_ADDR3_RX register  *****************/\r\n#define USB_ADDR3_RX_ADDR3_RX_Pos (1U)\r\n#define USB_ADDR3_RX_ADDR3_RX_Msk (0x7FFFUL << USB_ADDR3_RX_ADDR3_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR3_RX_ADDR3_RX     USB_ADDR3_RX_ADDR3_RX_Msk               /*!< Reception Buffer Address 3 */\r\n\r\n/*****************  Bit definition for USB_ADDR4_RX register  *****************/\r\n#define USB_ADDR4_RX_ADDR4_RX_Pos (1U)\r\n#define USB_ADDR4_RX_ADDR4_RX_Msk (0x7FFFUL << USB_ADDR4_RX_ADDR4_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR4_RX_ADDR4_RX     USB_ADDR4_RX_ADDR4_RX_Msk               /*!< Reception Buffer Address 4 */\r\n\r\n/*****************  Bit definition for USB_ADDR5_RX register  *****************/\r\n#define USB_ADDR5_RX_ADDR5_RX_Pos (1U)\r\n#define USB_ADDR5_RX_ADDR5_RX_Msk (0x7FFFUL << USB_ADDR5_RX_ADDR5_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR5_RX_ADDR5_RX     USB_ADDR5_RX_ADDR5_RX_Msk               /*!< Reception Buffer Address 5 */\r\n\r\n/*****************  Bit definition for USB_ADDR6_RX register  *****************/\r\n#define USB_ADDR6_RX_ADDR6_RX_Pos (1U)\r\n#define USB_ADDR6_RX_ADDR6_RX_Msk (0x7FFFUL << USB_ADDR6_RX_ADDR6_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR6_RX_ADDR6_RX     USB_ADDR6_RX_ADDR6_RX_Msk               /*!< Reception Buffer Address 6 */\r\n\r\n/*****************  Bit definition for USB_ADDR7_RX register  *****************/\r\n#define USB_ADDR7_RX_ADDR7_RX_Pos (1U)\r\n#define USB_ADDR7_RX_ADDR7_RX_Msk (0x7FFFUL << USB_ADDR7_RX_ADDR7_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR7_RX_ADDR7_RX     USB_ADDR7_RX_ADDR7_RX_Msk               /*!< Reception Buffer Address 7 */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/*****************  Bit definition for USB_COUNT0_RX register  ****************/\r\n#define USB_COUNT0_RX_COUNT0_RX_Pos (0U)\r\n#define USB_COUNT0_RX_COUNT0_RX_Msk (0x3FFUL << USB_COUNT0_RX_COUNT0_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT0_RX_COUNT0_RX     USB_COUNT0_RX_COUNT0_RX_Msk              /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT0_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT0_RX_NUM_BLOCK_Msk (0x1FUL << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT0_RX_NUM_BLOCK     USB_COUNT0_RX_NUM_BLOCK_Msk             /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT0_RX_NUM_BLOCK_0   (0x01UL << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT0_RX_NUM_BLOCK_1   (0x02UL << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT0_RX_NUM_BLOCK_2   (0x04UL << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT0_RX_NUM_BLOCK_3   (0x08UL << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT0_RX_NUM_BLOCK_4   (0x10UL << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT0_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT0_RX_BLSIZE_Msk (0x1UL << USB_COUNT0_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT0_RX_BLSIZE     USB_COUNT0_RX_BLSIZE_Msk            /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT1_RX register  ****************/\r\n#define USB_COUNT1_RX_COUNT1_RX_Pos (0U)\r\n#define USB_COUNT1_RX_COUNT1_RX_Msk (0x3FFUL << USB_COUNT1_RX_COUNT1_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT1_RX_COUNT1_RX     USB_COUNT1_RX_COUNT1_RX_Msk              /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT1_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT1_RX_NUM_BLOCK_Msk (0x1FUL << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT1_RX_NUM_BLOCK     USB_COUNT1_RX_NUM_BLOCK_Msk             /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT1_RX_NUM_BLOCK_0   (0x01UL << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT1_RX_NUM_BLOCK_1   (0x02UL << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT1_RX_NUM_BLOCK_2   (0x04UL << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT1_RX_NUM_BLOCK_3   (0x08UL << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT1_RX_NUM_BLOCK_4   (0x10UL << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT1_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT1_RX_BLSIZE_Msk (0x1UL << USB_COUNT1_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT1_RX_BLSIZE     USB_COUNT1_RX_BLSIZE_Msk            /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT2_RX register  ****************/\r\n#define USB_COUNT2_RX_COUNT2_RX_Pos (0U)\r\n#define USB_COUNT2_RX_COUNT2_RX_Msk (0x3FFUL << USB_COUNT2_RX_COUNT2_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT2_RX_COUNT2_RX     USB_COUNT2_RX_COUNT2_RX_Msk              /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT2_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT2_RX_NUM_BLOCK_Msk (0x1FUL << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT2_RX_NUM_BLOCK     USB_COUNT2_RX_NUM_BLOCK_Msk             /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT2_RX_NUM_BLOCK_0   (0x01UL << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT2_RX_NUM_BLOCK_1   (0x02UL << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT2_RX_NUM_BLOCK_2   (0x04UL << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT2_RX_NUM_BLOCK_3   (0x08UL << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT2_RX_NUM_BLOCK_4   (0x10UL << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT2_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT2_RX_BLSIZE_Msk (0x1UL << USB_COUNT2_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT2_RX_BLSIZE     USB_COUNT2_RX_BLSIZE_Msk            /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT3_RX register  ****************/\r\n#define USB_COUNT3_RX_COUNT3_RX_Pos (0U)\r\n#define USB_COUNT3_RX_COUNT3_RX_Msk (0x3FFUL << USB_COUNT3_RX_COUNT3_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT3_RX_COUNT3_RX     USB_COUNT3_RX_COUNT3_RX_Msk              /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT3_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT3_RX_NUM_BLOCK_Msk (0x1FUL << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT3_RX_NUM_BLOCK     USB_COUNT3_RX_NUM_BLOCK_Msk             /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT3_RX_NUM_BLOCK_0   (0x01UL << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT3_RX_NUM_BLOCK_1   (0x02UL << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT3_RX_NUM_BLOCK_2   (0x04UL << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT3_RX_NUM_BLOCK_3   (0x08UL << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT3_RX_NUM_BLOCK_4   (0x10UL << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT3_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT3_RX_BLSIZE_Msk (0x1UL << USB_COUNT3_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT3_RX_BLSIZE     USB_COUNT3_RX_BLSIZE_Msk            /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT4_RX register  ****************/\r\n#define USB_COUNT4_RX_COUNT4_RX_Pos (0U)\r\n#define USB_COUNT4_RX_COUNT4_RX_Msk (0x3FFUL << USB_COUNT4_RX_COUNT4_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT4_RX_COUNT4_RX     USB_COUNT4_RX_COUNT4_RX_Msk              /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT4_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT4_RX_NUM_BLOCK_Msk (0x1FUL << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT4_RX_NUM_BLOCK     USB_COUNT4_RX_NUM_BLOCK_Msk             /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT4_RX_NUM_BLOCK_0   (0x01UL << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT4_RX_NUM_BLOCK_1   (0x02UL << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT4_RX_NUM_BLOCK_2   (0x04UL << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT4_RX_NUM_BLOCK_3   (0x08UL << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT4_RX_NUM_BLOCK_4   (0x10UL << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT4_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT4_RX_BLSIZE_Msk (0x1UL << USB_COUNT4_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT4_RX_BLSIZE     USB_COUNT4_RX_BLSIZE_Msk            /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT5_RX register  ****************/\r\n#define USB_COUNT5_RX_COUNT5_RX_Pos (0U)\r\n#define USB_COUNT5_RX_COUNT5_RX_Msk (0x3FFUL << USB_COUNT5_RX_COUNT5_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT5_RX_COUNT5_RX     USB_COUNT5_RX_COUNT5_RX_Msk              /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT5_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT5_RX_NUM_BLOCK_Msk (0x1FUL << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT5_RX_NUM_BLOCK     USB_COUNT5_RX_NUM_BLOCK_Msk             /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT5_RX_NUM_BLOCK_0   (0x01UL << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT5_RX_NUM_BLOCK_1   (0x02UL << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT5_RX_NUM_BLOCK_2   (0x04UL << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT5_RX_NUM_BLOCK_3   (0x08UL << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT5_RX_NUM_BLOCK_4   (0x10UL << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT5_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT5_RX_BLSIZE_Msk (0x1UL << USB_COUNT5_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT5_RX_BLSIZE     USB_COUNT5_RX_BLSIZE_Msk            /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT6_RX register  ****************/\r\n#define USB_COUNT6_RX_COUNT6_RX_Pos (0U)\r\n#define USB_COUNT6_RX_COUNT6_RX_Msk (0x3FFUL << USB_COUNT6_RX_COUNT6_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT6_RX_COUNT6_RX     USB_COUNT6_RX_COUNT6_RX_Msk              /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT6_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT6_RX_NUM_BLOCK_Msk (0x1FUL << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT6_RX_NUM_BLOCK     USB_COUNT6_RX_NUM_BLOCK_Msk             /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT6_RX_NUM_BLOCK_0   (0x01UL << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT6_RX_NUM_BLOCK_1   (0x02UL << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT6_RX_NUM_BLOCK_2   (0x04UL << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT6_RX_NUM_BLOCK_3   (0x08UL << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT6_RX_NUM_BLOCK_4   (0x10UL << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT6_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT6_RX_BLSIZE_Msk (0x1UL << USB_COUNT6_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT6_RX_BLSIZE     USB_COUNT6_RX_BLSIZE_Msk            /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT7_RX register  ****************/\r\n#define USB_COUNT7_RX_COUNT7_RX_Pos (0U)\r\n#define USB_COUNT7_RX_COUNT7_RX_Msk (0x3FFUL << USB_COUNT7_RX_COUNT7_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT7_RX_COUNT7_RX     USB_COUNT7_RX_COUNT7_RX_Msk              /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT7_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT7_RX_NUM_BLOCK_Msk (0x1FUL << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT7_RX_NUM_BLOCK     USB_COUNT7_RX_NUM_BLOCK_Msk             /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT7_RX_NUM_BLOCK_0   (0x01UL << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT7_RX_NUM_BLOCK_1   (0x02UL << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT7_RX_NUM_BLOCK_2   (0x04UL << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT7_RX_NUM_BLOCK_3   (0x08UL << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT7_RX_NUM_BLOCK_4   (0x10UL << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT7_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT7_RX_BLSIZE_Msk (0x1UL << USB_COUNT7_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT7_RX_BLSIZE     USB_COUNT7_RX_BLSIZE_Msk            /*!< BLock SIZE */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/****************  Bit definition for USB_COUNT0_RX_0 register  ***************/\r\n#define USB_COUNT0_RX_0_COUNT0_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT0_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT0_RX_1 register  ***************/\r\n#define USB_COUNT0_RX_1_COUNT0_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 1 */\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT0_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/****************  Bit definition for USB_COUNT1_RX_0 register  ***************/\r\n#define USB_COUNT1_RX_0_COUNT1_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT1_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT1_RX_1 register  ***************/\r\n#define USB_COUNT1_RX_1_COUNT1_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT1_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/****************  Bit definition for USB_COUNT2_RX_0 register  ***************/\r\n#define USB_COUNT2_RX_0_COUNT2_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT2_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT2_RX_1 register  ***************/\r\n#define USB_COUNT2_RX_1_COUNT2_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT2_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/****************  Bit definition for USB_COUNT3_RX_0 register  ***************/\r\n#define USB_COUNT3_RX_0_COUNT3_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT3_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT3_RX_1 register  ***************/\r\n#define USB_COUNT3_RX_1_COUNT3_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT3_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/****************  Bit definition for USB_COUNT4_RX_0 register  ***************/\r\n#define USB_COUNT4_RX_0_COUNT4_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT4_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT4_RX_1 register  ***************/\r\n#define USB_COUNT4_RX_1_COUNT4_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT4_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/****************  Bit definition for USB_COUNT5_RX_0 register  ***************/\r\n#define USB_COUNT5_RX_0_COUNT5_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT5_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT5_RX_1 register  ***************/\r\n#define USB_COUNT5_RX_1_COUNT5_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT5_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/***************  Bit definition for USB_COUNT6_RX_0  register  ***************/\r\n#define USB_COUNT6_RX_0_COUNT6_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT6_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT6_RX_1 register  ***************/\r\n#define USB_COUNT6_RX_1_COUNT6_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT6_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/***************  Bit definition for USB_COUNT7_RX_0 register  ****************/\r\n#define USB_COUNT7_RX_0_COUNT7_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT7_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/***************  Bit definition for USB_COUNT7_RX_1 register  ****************/\r\n#define USB_COUNT7_RX_1_COUNT7_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT7_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                         Controller Area Network                            */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*!< CAN control and status registers */\r\n/*******************  Bit definition for CAN_MCR register  ********************/\r\n#define CAN_MCR_INRQ_Pos  (0U)\r\n#define CAN_MCR_INRQ_Msk  (0x1UL << CAN_MCR_INRQ_Pos) /*!< 0x00000001 */\r\n#define CAN_MCR_INRQ      CAN_MCR_INRQ_Msk            /*!< Initialization Request */\r\n#define CAN_MCR_SLEEP_Pos (1U)\r\n#define CAN_MCR_SLEEP_Msk (0x1UL << CAN_MCR_SLEEP_Pos) /*!< 0x00000002 */\r\n#define CAN_MCR_SLEEP     CAN_MCR_SLEEP_Msk            /*!< Sleep Mode Request */\r\n#define CAN_MCR_TXFP_Pos  (2U)\r\n#define CAN_MCR_TXFP_Msk  (0x1UL << CAN_MCR_TXFP_Pos) /*!< 0x00000004 */\r\n#define CAN_MCR_TXFP      CAN_MCR_TXFP_Msk            /*!< Transmit FIFO Priority */\r\n#define CAN_MCR_RFLM_Pos  (3U)\r\n#define CAN_MCR_RFLM_Msk  (0x1UL << CAN_MCR_RFLM_Pos) /*!< 0x00000008 */\r\n#define CAN_MCR_RFLM      CAN_MCR_RFLM_Msk            /*!< Receive FIFO Locked Mode */\r\n#define CAN_MCR_NART_Pos  (4U)\r\n#define CAN_MCR_NART_Msk  (0x1UL << CAN_MCR_NART_Pos) /*!< 0x00000010 */\r\n#define CAN_MCR_NART      CAN_MCR_NART_Msk            /*!< No Automatic Retransmission */\r\n#define CAN_MCR_AWUM_Pos  (5U)\r\n#define CAN_MCR_AWUM_Msk  (0x1UL << CAN_MCR_AWUM_Pos) /*!< 0x00000020 */\r\n#define CAN_MCR_AWUM      CAN_MCR_AWUM_Msk            /*!< Automatic Wakeup Mode */\r\n#define CAN_MCR_ABOM_Pos  (6U)\r\n#define CAN_MCR_ABOM_Msk  (0x1UL << CAN_MCR_ABOM_Pos) /*!< 0x00000040 */\r\n#define CAN_MCR_ABOM      CAN_MCR_ABOM_Msk            /*!< Automatic Bus-Off Management */\r\n#define CAN_MCR_TTCM_Pos  (7U)\r\n#define CAN_MCR_TTCM_Msk  (0x1UL << CAN_MCR_TTCM_Pos) /*!< 0x00000080 */\r\n#define CAN_MCR_TTCM      CAN_MCR_TTCM_Msk            /*!< Time Triggered Communication Mode */\r\n#define CAN_MCR_RESET_Pos (15U)\r\n#define CAN_MCR_RESET_Msk (0x1UL << CAN_MCR_RESET_Pos) /*!< 0x00008000 */\r\n#define CAN_MCR_RESET     CAN_MCR_RESET_Msk            /*!< CAN software master reset */\r\n#define CAN_MCR_DBF_Pos   (16U)\r\n#define CAN_MCR_DBF_Msk   (0x1UL << CAN_MCR_DBF_Pos) /*!< 0x00010000 */\r\n#define CAN_MCR_DBF       CAN_MCR_DBF_Msk            /*!< CAN Debug freeze */\r\n\r\n/*******************  Bit definition for CAN_MSR register  ********************/\r\n#define CAN_MSR_INAK_Pos  (0U)\r\n#define CAN_MSR_INAK_Msk  (0x1UL << CAN_MSR_INAK_Pos) /*!< 0x00000001 */\r\n#define CAN_MSR_INAK      CAN_MSR_INAK_Msk            /*!< Initialization Acknowledge */\r\n#define CAN_MSR_SLAK_Pos  (1U)\r\n#define CAN_MSR_SLAK_Msk  (0x1UL << CAN_MSR_SLAK_Pos) /*!< 0x00000002 */\r\n#define CAN_MSR_SLAK      CAN_MSR_SLAK_Msk            /*!< Sleep Acknowledge */\r\n#define CAN_MSR_ERRI_Pos  (2U)\r\n#define CAN_MSR_ERRI_Msk  (0x1UL << CAN_MSR_ERRI_Pos) /*!< 0x00000004 */\r\n#define CAN_MSR_ERRI      CAN_MSR_ERRI_Msk            /*!< Error Interrupt */\r\n#define CAN_MSR_WKUI_Pos  (3U)\r\n#define CAN_MSR_WKUI_Msk  (0x1UL << CAN_MSR_WKUI_Pos) /*!< 0x00000008 */\r\n#define CAN_MSR_WKUI      CAN_MSR_WKUI_Msk            /*!< Wakeup Interrupt */\r\n#define CAN_MSR_SLAKI_Pos (4U)\r\n#define CAN_MSR_SLAKI_Msk (0x1UL << CAN_MSR_SLAKI_Pos) /*!< 0x00000010 */\r\n#define CAN_MSR_SLAKI     CAN_MSR_SLAKI_Msk            /*!< Sleep Acknowledge Interrupt */\r\n#define CAN_MSR_TXM_Pos   (8U)\r\n#define CAN_MSR_TXM_Msk   (0x1UL << CAN_MSR_TXM_Pos) /*!< 0x00000100 */\r\n#define CAN_MSR_TXM       CAN_MSR_TXM_Msk            /*!< Transmit Mode */\r\n#define CAN_MSR_RXM_Pos   (9U)\r\n#define CAN_MSR_RXM_Msk   (0x1UL << CAN_MSR_RXM_Pos) /*!< 0x00000200 */\r\n#define CAN_MSR_RXM       CAN_MSR_RXM_Msk            /*!< Receive Mode */\r\n#define CAN_MSR_SAMP_Pos  (10U)\r\n#define CAN_MSR_SAMP_Msk  (0x1UL << CAN_MSR_SAMP_Pos) /*!< 0x00000400 */\r\n#define CAN_MSR_SAMP      CAN_MSR_SAMP_Msk            /*!< Last Sample Point */\r\n#define CAN_MSR_RX_Pos    (11U)\r\n#define CAN_MSR_RX_Msk    (0x1UL << CAN_MSR_RX_Pos) /*!< 0x00000800 */\r\n#define CAN_MSR_RX        CAN_MSR_RX_Msk            /*!< CAN Rx Signal */\r\n\r\n/*******************  Bit definition for CAN_TSR register  ********************/\r\n#define CAN_TSR_RQCP0_Pos (0U)\r\n#define CAN_TSR_RQCP0_Msk (0x1UL << CAN_TSR_RQCP0_Pos) /*!< 0x00000001 */\r\n#define CAN_TSR_RQCP0     CAN_TSR_RQCP0_Msk            /*!< Request Completed Mailbox0 */\r\n#define CAN_TSR_TXOK0_Pos (1U)\r\n#define CAN_TSR_TXOK0_Msk (0x1UL << CAN_TSR_TXOK0_Pos) /*!< 0x00000002 */\r\n#define CAN_TSR_TXOK0     CAN_TSR_TXOK0_Msk            /*!< Transmission OK of Mailbox0 */\r\n#define CAN_TSR_ALST0_Pos (2U)\r\n#define CAN_TSR_ALST0_Msk (0x1UL << CAN_TSR_ALST0_Pos) /*!< 0x00000004 */\r\n#define CAN_TSR_ALST0     CAN_TSR_ALST0_Msk            /*!< Arbitration Lost for Mailbox0 */\r\n#define CAN_TSR_TERR0_Pos (3U)\r\n#define CAN_TSR_TERR0_Msk (0x1UL << CAN_TSR_TERR0_Pos) /*!< 0x00000008 */\r\n#define CAN_TSR_TERR0     CAN_TSR_TERR0_Msk            /*!< Transmission Error of Mailbox0 */\r\n#define CAN_TSR_ABRQ0_Pos (7U)\r\n#define CAN_TSR_ABRQ0_Msk (0x1UL << CAN_TSR_ABRQ0_Pos) /*!< 0x00000080 */\r\n#define CAN_TSR_ABRQ0     CAN_TSR_ABRQ0_Msk            /*!< Abort Request for Mailbox0 */\r\n#define CAN_TSR_RQCP1_Pos (8U)\r\n#define CAN_TSR_RQCP1_Msk (0x1UL << CAN_TSR_RQCP1_Pos) /*!< 0x00000100 */\r\n#define CAN_TSR_RQCP1     CAN_TSR_RQCP1_Msk            /*!< Request Completed Mailbox1 */\r\n#define CAN_TSR_TXOK1_Pos (9U)\r\n#define CAN_TSR_TXOK1_Msk (0x1UL << CAN_TSR_TXOK1_Pos) /*!< 0x00000200 */\r\n#define CAN_TSR_TXOK1     CAN_TSR_TXOK1_Msk            /*!< Transmission OK of Mailbox1 */\r\n#define CAN_TSR_ALST1_Pos (10U)\r\n#define CAN_TSR_ALST1_Msk (0x1UL << CAN_TSR_ALST1_Pos) /*!< 0x00000400 */\r\n#define CAN_TSR_ALST1     CAN_TSR_ALST1_Msk            /*!< Arbitration Lost for Mailbox1 */\r\n#define CAN_TSR_TERR1_Pos (11U)\r\n#define CAN_TSR_TERR1_Msk (0x1UL << CAN_TSR_TERR1_Pos) /*!< 0x00000800 */\r\n#define CAN_TSR_TERR1     CAN_TSR_TERR1_Msk            /*!< Transmission Error of Mailbox1 */\r\n#define CAN_TSR_ABRQ1_Pos (15U)\r\n#define CAN_TSR_ABRQ1_Msk (0x1UL << CAN_TSR_ABRQ1_Pos) /*!< 0x00008000 */\r\n#define CAN_TSR_ABRQ1     CAN_TSR_ABRQ1_Msk            /*!< Abort Request for Mailbox 1 */\r\n#define CAN_TSR_RQCP2_Pos (16U)\r\n#define CAN_TSR_RQCP2_Msk (0x1UL << CAN_TSR_RQCP2_Pos) /*!< 0x00010000 */\r\n#define CAN_TSR_RQCP2     CAN_TSR_RQCP2_Msk            /*!< Request Completed Mailbox2 */\r\n#define CAN_TSR_TXOK2_Pos (17U)\r\n#define CAN_TSR_TXOK2_Msk (0x1UL << CAN_TSR_TXOK2_Pos) /*!< 0x00020000 */\r\n#define CAN_TSR_TXOK2     CAN_TSR_TXOK2_Msk            /*!< Transmission OK of Mailbox 2 */\r\n#define CAN_TSR_ALST2_Pos (18U)\r\n#define CAN_TSR_ALST2_Msk (0x1UL << CAN_TSR_ALST2_Pos) /*!< 0x00040000 */\r\n#define CAN_TSR_ALST2     CAN_TSR_ALST2_Msk            /*!< Arbitration Lost for mailbox 2 */\r\n#define CAN_TSR_TERR2_Pos (19U)\r\n#define CAN_TSR_TERR2_Msk (0x1UL << CAN_TSR_TERR2_Pos) /*!< 0x00080000 */\r\n#define CAN_TSR_TERR2     CAN_TSR_TERR2_Msk            /*!< Transmission Error of Mailbox 2 */\r\n#define CAN_TSR_ABRQ2_Pos (23U)\r\n#define CAN_TSR_ABRQ2_Msk (0x1UL << CAN_TSR_ABRQ2_Pos) /*!< 0x00800000 */\r\n#define CAN_TSR_ABRQ2     CAN_TSR_ABRQ2_Msk            /*!< Abort Request for Mailbox 2 */\r\n#define CAN_TSR_CODE_Pos  (24U)\r\n#define CAN_TSR_CODE_Msk  (0x3UL << CAN_TSR_CODE_Pos) /*!< 0x03000000 */\r\n#define CAN_TSR_CODE      CAN_TSR_CODE_Msk            /*!< Mailbox Code */\r\n\r\n#define CAN_TSR_TME_Pos  (26U)\r\n#define CAN_TSR_TME_Msk  (0x7UL << CAN_TSR_TME_Pos) /*!< 0x1C000000 */\r\n#define CAN_TSR_TME      CAN_TSR_TME_Msk            /*!< TME[2:0] bits */\r\n#define CAN_TSR_TME0_Pos (26U)\r\n#define CAN_TSR_TME0_Msk (0x1UL << CAN_TSR_TME0_Pos) /*!< 0x04000000 */\r\n#define CAN_TSR_TME0     CAN_TSR_TME0_Msk            /*!< Transmit Mailbox 0 Empty */\r\n#define CAN_TSR_TME1_Pos (27U)\r\n#define CAN_TSR_TME1_Msk (0x1UL << CAN_TSR_TME1_Pos) /*!< 0x08000000 */\r\n#define CAN_TSR_TME1     CAN_TSR_TME1_Msk            /*!< Transmit Mailbox 1 Empty */\r\n#define CAN_TSR_TME2_Pos (28U)\r\n#define CAN_TSR_TME2_Msk (0x1UL << CAN_TSR_TME2_Pos) /*!< 0x10000000 */\r\n#define CAN_TSR_TME2     CAN_TSR_TME2_Msk            /*!< Transmit Mailbox 2 Empty */\r\n\r\n#define CAN_TSR_LOW_Pos  (29U)\r\n#define CAN_TSR_LOW_Msk  (0x7UL << CAN_TSR_LOW_Pos) /*!< 0xE0000000 */\r\n#define CAN_TSR_LOW      CAN_TSR_LOW_Msk            /*!< LOW[2:0] bits */\r\n#define CAN_TSR_LOW0_Pos (29U)\r\n#define CAN_TSR_LOW0_Msk (0x1UL << CAN_TSR_LOW0_Pos) /*!< 0x20000000 */\r\n#define CAN_TSR_LOW0     CAN_TSR_LOW0_Msk            /*!< Lowest Priority Flag for Mailbox 0 */\r\n#define CAN_TSR_LOW1_Pos (30U)\r\n#define CAN_TSR_LOW1_Msk (0x1UL << CAN_TSR_LOW1_Pos) /*!< 0x40000000 */\r\n#define CAN_TSR_LOW1     CAN_TSR_LOW1_Msk            /*!< Lowest Priority Flag for Mailbox 1 */\r\n#define CAN_TSR_LOW2_Pos (31U)\r\n#define CAN_TSR_LOW2_Msk (0x1UL << CAN_TSR_LOW2_Pos) /*!< 0x80000000 */\r\n#define CAN_TSR_LOW2     CAN_TSR_LOW2_Msk            /*!< Lowest Priority Flag for Mailbox 2 */\r\n\r\n/*******************  Bit definition for CAN_RF0R register  *******************/\r\n#define CAN_RF0R_FMP0_Pos  (0U)\r\n#define CAN_RF0R_FMP0_Msk  (0x3UL << CAN_RF0R_FMP0_Pos) /*!< 0x00000003 */\r\n#define CAN_RF0R_FMP0      CAN_RF0R_FMP0_Msk            /*!< FIFO 0 Message Pending */\r\n#define CAN_RF0R_FULL0_Pos (3U)\r\n#define CAN_RF0R_FULL0_Msk (0x1UL << CAN_RF0R_FULL0_Pos) /*!< 0x00000008 */\r\n#define CAN_RF0R_FULL0     CAN_RF0R_FULL0_Msk            /*!< FIFO 0 Full */\r\n#define CAN_RF0R_FOVR0_Pos (4U)\r\n#define CAN_RF0R_FOVR0_Msk (0x1UL << CAN_RF0R_FOVR0_Pos) /*!< 0x00000010 */\r\n#define CAN_RF0R_FOVR0     CAN_RF0R_FOVR0_Msk            /*!< FIFO 0 Overrun */\r\n#define CAN_RF0R_RFOM0_Pos (5U)\r\n#define CAN_RF0R_RFOM0_Msk (0x1UL << CAN_RF0R_RFOM0_Pos) /*!< 0x00000020 */\r\n#define CAN_RF0R_RFOM0     CAN_RF0R_RFOM0_Msk            /*!< Release FIFO 0 Output Mailbox */\r\n\r\n/*******************  Bit definition for CAN_RF1R register  *******************/\r\n#define CAN_RF1R_FMP1_Pos  (0U)\r\n#define CAN_RF1R_FMP1_Msk  (0x3UL << CAN_RF1R_FMP1_Pos) /*!< 0x00000003 */\r\n#define CAN_RF1R_FMP1      CAN_RF1R_FMP1_Msk            /*!< FIFO 1 Message Pending */\r\n#define CAN_RF1R_FULL1_Pos (3U)\r\n#define CAN_RF1R_FULL1_Msk (0x1UL << CAN_RF1R_FULL1_Pos) /*!< 0x00000008 */\r\n#define CAN_RF1R_FULL1     CAN_RF1R_FULL1_Msk            /*!< FIFO 1 Full */\r\n#define CAN_RF1R_FOVR1_Pos (4U)\r\n#define CAN_RF1R_FOVR1_Msk (0x1UL << CAN_RF1R_FOVR1_Pos) /*!< 0x00000010 */\r\n#define CAN_RF1R_FOVR1     CAN_RF1R_FOVR1_Msk            /*!< FIFO 1 Overrun */\r\n#define CAN_RF1R_RFOM1_Pos (5U)\r\n#define CAN_RF1R_RFOM1_Msk (0x1UL << CAN_RF1R_RFOM1_Pos) /*!< 0x00000020 */\r\n#define CAN_RF1R_RFOM1     CAN_RF1R_RFOM1_Msk            /*!< Release FIFO 1 Output Mailbox */\r\n\r\n/********************  Bit definition for CAN_IER register  *******************/\r\n#define CAN_IER_TMEIE_Pos  (0U)\r\n#define CAN_IER_TMEIE_Msk  (0x1UL << CAN_IER_TMEIE_Pos) /*!< 0x00000001 */\r\n#define CAN_IER_TMEIE      CAN_IER_TMEIE_Msk            /*!< Transmit Mailbox Empty Interrupt Enable */\r\n#define CAN_IER_FMPIE0_Pos (1U)\r\n#define CAN_IER_FMPIE0_Msk (0x1UL << CAN_IER_FMPIE0_Pos) /*!< 0x00000002 */\r\n#define CAN_IER_FMPIE0     CAN_IER_FMPIE0_Msk            /*!< FIFO Message Pending Interrupt Enable */\r\n#define CAN_IER_FFIE0_Pos  (2U)\r\n#define CAN_IER_FFIE0_Msk  (0x1UL << CAN_IER_FFIE0_Pos) /*!< 0x00000004 */\r\n#define CAN_IER_FFIE0      CAN_IER_FFIE0_Msk            /*!< FIFO Full Interrupt Enable */\r\n#define CAN_IER_FOVIE0_Pos (3U)\r\n#define CAN_IER_FOVIE0_Msk (0x1UL << CAN_IER_FOVIE0_Pos) /*!< 0x00000008 */\r\n#define CAN_IER_FOVIE0     CAN_IER_FOVIE0_Msk            /*!< FIFO Overrun Interrupt Enable */\r\n#define CAN_IER_FMPIE1_Pos (4U)\r\n#define CAN_IER_FMPIE1_Msk (0x1UL << CAN_IER_FMPIE1_Pos) /*!< 0x00000010 */\r\n#define CAN_IER_FMPIE1     CAN_IER_FMPIE1_Msk            /*!< FIFO Message Pending Interrupt Enable */\r\n#define CAN_IER_FFIE1_Pos  (5U)\r\n#define CAN_IER_FFIE1_Msk  (0x1UL << CAN_IER_FFIE1_Pos) /*!< 0x00000020 */\r\n#define CAN_IER_FFIE1      CAN_IER_FFIE1_Msk            /*!< FIFO Full Interrupt Enable */\r\n#define CAN_IER_FOVIE1_Pos (6U)\r\n#define CAN_IER_FOVIE1_Msk (0x1UL << CAN_IER_FOVIE1_Pos) /*!< 0x00000040 */\r\n#define CAN_IER_FOVIE1     CAN_IER_FOVIE1_Msk            /*!< FIFO Overrun Interrupt Enable */\r\n#define CAN_IER_EWGIE_Pos  (8U)\r\n#define CAN_IER_EWGIE_Msk  (0x1UL << CAN_IER_EWGIE_Pos) /*!< 0x00000100 */\r\n#define CAN_IER_EWGIE      CAN_IER_EWGIE_Msk            /*!< Error Warning Interrupt Enable */\r\n#define CAN_IER_EPVIE_Pos  (9U)\r\n#define CAN_IER_EPVIE_Msk  (0x1UL << CAN_IER_EPVIE_Pos) /*!< 0x00000200 */\r\n#define CAN_IER_EPVIE      CAN_IER_EPVIE_Msk            /*!< Error Passive Interrupt Enable */\r\n#define CAN_IER_BOFIE_Pos  (10U)\r\n#define CAN_IER_BOFIE_Msk  (0x1UL << CAN_IER_BOFIE_Pos) /*!< 0x00000400 */\r\n#define CAN_IER_BOFIE      CAN_IER_BOFIE_Msk            /*!< Bus-Off Interrupt Enable */\r\n#define CAN_IER_LECIE_Pos  (11U)\r\n#define CAN_IER_LECIE_Msk  (0x1UL << CAN_IER_LECIE_Pos) /*!< 0x00000800 */\r\n#define CAN_IER_LECIE      CAN_IER_LECIE_Msk            /*!< Last Error Code Interrupt Enable */\r\n#define CAN_IER_ERRIE_Pos  (15U)\r\n#define CAN_IER_ERRIE_Msk  (0x1UL << CAN_IER_ERRIE_Pos) /*!< 0x00008000 */\r\n#define CAN_IER_ERRIE      CAN_IER_ERRIE_Msk            /*!< Error Interrupt Enable */\r\n#define CAN_IER_WKUIE_Pos  (16U)\r\n#define CAN_IER_WKUIE_Msk  (0x1UL << CAN_IER_WKUIE_Pos) /*!< 0x00010000 */\r\n#define CAN_IER_WKUIE      CAN_IER_WKUIE_Msk            /*!< Wakeup Interrupt Enable */\r\n#define CAN_IER_SLKIE_Pos  (17U)\r\n#define CAN_IER_SLKIE_Msk  (0x1UL << CAN_IER_SLKIE_Pos) /*!< 0x00020000 */\r\n#define CAN_IER_SLKIE      CAN_IER_SLKIE_Msk            /*!< Sleep Interrupt Enable */\r\n\r\n/********************  Bit definition for CAN_ESR register  *******************/\r\n#define CAN_ESR_EWGF_Pos (0U)\r\n#define CAN_ESR_EWGF_Msk (0x1UL << CAN_ESR_EWGF_Pos) /*!< 0x00000001 */\r\n#define CAN_ESR_EWGF     CAN_ESR_EWGF_Msk            /*!< Error Warning Flag */\r\n#define CAN_ESR_EPVF_Pos (1U)\r\n#define CAN_ESR_EPVF_Msk (0x1UL << CAN_ESR_EPVF_Pos) /*!< 0x00000002 */\r\n#define CAN_ESR_EPVF     CAN_ESR_EPVF_Msk            /*!< Error Passive Flag */\r\n#define CAN_ESR_BOFF_Pos (2U)\r\n#define CAN_ESR_BOFF_Msk (0x1UL << CAN_ESR_BOFF_Pos) /*!< 0x00000004 */\r\n#define CAN_ESR_BOFF     CAN_ESR_BOFF_Msk            /*!< Bus-Off Flag */\r\n\r\n#define CAN_ESR_LEC_Pos (4U)\r\n#define CAN_ESR_LEC_Msk (0x7UL << CAN_ESR_LEC_Pos) /*!< 0x00000070 */\r\n#define CAN_ESR_LEC     CAN_ESR_LEC_Msk            /*!< LEC[2:0] bits (Last Error Code) */\r\n#define CAN_ESR_LEC_0   (0x1UL << CAN_ESR_LEC_Pos) /*!< 0x00000010 */\r\n#define CAN_ESR_LEC_1   (0x2UL << CAN_ESR_LEC_Pos) /*!< 0x00000020 */\r\n#define CAN_ESR_LEC_2   (0x4UL << CAN_ESR_LEC_Pos) /*!< 0x00000040 */\r\n\r\n#define CAN_ESR_TEC_Pos (16U)\r\n#define CAN_ESR_TEC_Msk (0xFFUL << CAN_ESR_TEC_Pos) /*!< 0x00FF0000 */\r\n#define CAN_ESR_TEC     CAN_ESR_TEC_Msk             /*!< Least significant byte of the 9-bit Transmit Error Counter */\r\n#define CAN_ESR_REC_Pos (24U)\r\n#define CAN_ESR_REC_Msk (0xFFUL << CAN_ESR_REC_Pos) /*!< 0xFF000000 */\r\n#define CAN_ESR_REC     CAN_ESR_REC_Msk             /*!< Receive Error Counter */\r\n\r\n/*******************  Bit definition for CAN_BTR register  ********************/\r\n#define CAN_BTR_BRP_Pos  (0U)\r\n#define CAN_BTR_BRP_Msk  (0x3FFUL << CAN_BTR_BRP_Pos) /*!< 0x000003FF */\r\n#define CAN_BTR_BRP      CAN_BTR_BRP_Msk              /*!<Baud Rate Prescaler */\r\n#define CAN_BTR_TS1_Pos  (16U)\r\n#define CAN_BTR_TS1_Msk  (0xFUL << CAN_BTR_TS1_Pos) /*!< 0x000F0000 */\r\n#define CAN_BTR_TS1      CAN_BTR_TS1_Msk            /*!<Time Segment 1 */\r\n#define CAN_BTR_TS1_0    (0x1UL << CAN_BTR_TS1_Pos) /*!< 0x00010000 */\r\n#define CAN_BTR_TS1_1    (0x2UL << CAN_BTR_TS1_Pos) /*!< 0x00020000 */\r\n#define CAN_BTR_TS1_2    (0x4UL << CAN_BTR_TS1_Pos) /*!< 0x00040000 */\r\n#define CAN_BTR_TS1_3    (0x8UL << CAN_BTR_TS1_Pos) /*!< 0x00080000 */\r\n#define CAN_BTR_TS2_Pos  (20U)\r\n#define CAN_BTR_TS2_Msk  (0x7UL << CAN_BTR_TS2_Pos) /*!< 0x00700000 */\r\n#define CAN_BTR_TS2      CAN_BTR_TS2_Msk            /*!<Time Segment 2 */\r\n#define CAN_BTR_TS2_0    (0x1UL << CAN_BTR_TS2_Pos) /*!< 0x00100000 */\r\n#define CAN_BTR_TS2_1    (0x2UL << CAN_BTR_TS2_Pos) /*!< 0x00200000 */\r\n#define CAN_BTR_TS2_2    (0x4UL << CAN_BTR_TS2_Pos) /*!< 0x00400000 */\r\n#define CAN_BTR_SJW_Pos  (24U)\r\n#define CAN_BTR_SJW_Msk  (0x3UL << CAN_BTR_SJW_Pos) /*!< 0x03000000 */\r\n#define CAN_BTR_SJW      CAN_BTR_SJW_Msk            /*!<Resynchronization Jump Width */\r\n#define CAN_BTR_SJW_0    (0x1UL << CAN_BTR_SJW_Pos) /*!< 0x01000000 */\r\n#define CAN_BTR_SJW_1    (0x2UL << CAN_BTR_SJW_Pos) /*!< 0x02000000 */\r\n#define CAN_BTR_LBKM_Pos (30U)\r\n#define CAN_BTR_LBKM_Msk (0x1UL << CAN_BTR_LBKM_Pos) /*!< 0x40000000 */\r\n#define CAN_BTR_LBKM     CAN_BTR_LBKM_Msk            /*!<Loop Back Mode (Debug) */\r\n#define CAN_BTR_SILM_Pos (31U)\r\n#define CAN_BTR_SILM_Msk (0x1UL << CAN_BTR_SILM_Pos) /*!< 0x80000000 */\r\n#define CAN_BTR_SILM     CAN_BTR_SILM_Msk            /*!<Silent Mode */\r\n\r\n/*!< Mailbox registers */\r\n/******************  Bit definition for CAN_TI0R register  ********************/\r\n#define CAN_TI0R_TXRQ_Pos (0U)\r\n#define CAN_TI0R_TXRQ_Msk (0x1UL << CAN_TI0R_TXRQ_Pos) /*!< 0x00000001 */\r\n#define CAN_TI0R_TXRQ     CAN_TI0R_TXRQ_Msk            /*!< Transmit Mailbox Request */\r\n#define CAN_TI0R_RTR_Pos  (1U)\r\n#define CAN_TI0R_RTR_Msk  (0x1UL << CAN_TI0R_RTR_Pos) /*!< 0x00000002 */\r\n#define CAN_TI0R_RTR      CAN_TI0R_RTR_Msk            /*!< Remote Transmission Request */\r\n#define CAN_TI0R_IDE_Pos  (2U)\r\n#define CAN_TI0R_IDE_Msk  (0x1UL << CAN_TI0R_IDE_Pos) /*!< 0x00000004 */\r\n#define CAN_TI0R_IDE      CAN_TI0R_IDE_Msk            /*!< Identifier Extension */\r\n#define CAN_TI0R_EXID_Pos (3U)\r\n#define CAN_TI0R_EXID_Msk (0x3FFFFUL << CAN_TI0R_EXID_Pos) /*!< 0x001FFFF8 */\r\n#define CAN_TI0R_EXID     CAN_TI0R_EXID_Msk                /*!< Extended Identifier */\r\n#define CAN_TI0R_STID_Pos (21U)\r\n#define CAN_TI0R_STID_Msk (0x7FFUL << CAN_TI0R_STID_Pos) /*!< 0xFFE00000 */\r\n#define CAN_TI0R_STID     CAN_TI0R_STID_Msk              /*!< Standard Identifier or Extended Identifier */\r\n\r\n/******************  Bit definition for CAN_TDT0R register  *******************/\r\n#define CAN_TDT0R_DLC_Pos  (0U)\r\n#define CAN_TDT0R_DLC_Msk  (0xFUL << CAN_TDT0R_DLC_Pos) /*!< 0x0000000F */\r\n#define CAN_TDT0R_DLC      CAN_TDT0R_DLC_Msk            /*!< Data Length Code */\r\n#define CAN_TDT0R_TGT_Pos  (8U)\r\n#define CAN_TDT0R_TGT_Msk  (0x1UL << CAN_TDT0R_TGT_Pos) /*!< 0x00000100 */\r\n#define CAN_TDT0R_TGT      CAN_TDT0R_TGT_Msk            /*!< Transmit Global Time */\r\n#define CAN_TDT0R_TIME_Pos (16U)\r\n#define CAN_TDT0R_TIME_Msk (0xFFFFUL << CAN_TDT0R_TIME_Pos) /*!< 0xFFFF0000 */\r\n#define CAN_TDT0R_TIME     CAN_TDT0R_TIME_Msk               /*!< Message Time Stamp */\r\n\r\n/******************  Bit definition for CAN_TDL0R register  *******************/\r\n#define CAN_TDL0R_DATA0_Pos (0U)\r\n#define CAN_TDL0R_DATA0_Msk (0xFFUL << CAN_TDL0R_DATA0_Pos) /*!< 0x000000FF */\r\n#define CAN_TDL0R_DATA0     CAN_TDL0R_DATA0_Msk             /*!< Data byte 0 */\r\n#define CAN_TDL0R_DATA1_Pos (8U)\r\n#define CAN_TDL0R_DATA1_Msk (0xFFUL << CAN_TDL0R_DATA1_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDL0R_DATA1     CAN_TDL0R_DATA1_Msk             /*!< Data byte 1 */\r\n#define CAN_TDL0R_DATA2_Pos (16U)\r\n#define CAN_TDL0R_DATA2_Msk (0xFFUL << CAN_TDL0R_DATA2_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDL0R_DATA2     CAN_TDL0R_DATA2_Msk             /*!< Data byte 2 */\r\n#define CAN_TDL0R_DATA3_Pos (24U)\r\n#define CAN_TDL0R_DATA3_Msk (0xFFUL << CAN_TDL0R_DATA3_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDL0R_DATA3     CAN_TDL0R_DATA3_Msk             /*!< Data byte 3 */\r\n\r\n/******************  Bit definition for CAN_TDH0R register  *******************/\r\n#define CAN_TDH0R_DATA4_Pos (0U)\r\n#define CAN_TDH0R_DATA4_Msk (0xFFUL << CAN_TDH0R_DATA4_Pos) /*!< 0x000000FF */\r\n#define CAN_TDH0R_DATA4     CAN_TDH0R_DATA4_Msk             /*!< Data byte 4 */\r\n#define CAN_TDH0R_DATA5_Pos (8U)\r\n#define CAN_TDH0R_DATA5_Msk (0xFFUL << CAN_TDH0R_DATA5_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDH0R_DATA5     CAN_TDH0R_DATA5_Msk             /*!< Data byte 5 */\r\n#define CAN_TDH0R_DATA6_Pos (16U)\r\n#define CAN_TDH0R_DATA6_Msk (0xFFUL << CAN_TDH0R_DATA6_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDH0R_DATA6     CAN_TDH0R_DATA6_Msk             /*!< Data byte 6 */\r\n#define CAN_TDH0R_DATA7_Pos (24U)\r\n#define CAN_TDH0R_DATA7_Msk (0xFFUL << CAN_TDH0R_DATA7_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDH0R_DATA7     CAN_TDH0R_DATA7_Msk             /*!< Data byte 7 */\r\n\r\n/*******************  Bit definition for CAN_TI1R register  *******************/\r\n#define CAN_TI1R_TXRQ_Pos (0U)\r\n#define CAN_TI1R_TXRQ_Msk (0x1UL << CAN_TI1R_TXRQ_Pos) /*!< 0x00000001 */\r\n#define CAN_TI1R_TXRQ     CAN_TI1R_TXRQ_Msk            /*!< Transmit Mailbox Request */\r\n#define CAN_TI1R_RTR_Pos  (1U)\r\n#define CAN_TI1R_RTR_Msk  (0x1UL << CAN_TI1R_RTR_Pos) /*!< 0x00000002 */\r\n#define CAN_TI1R_RTR      CAN_TI1R_RTR_Msk            /*!< Remote Transmission Request */\r\n#define CAN_TI1R_IDE_Pos  (2U)\r\n#define CAN_TI1R_IDE_Msk  (0x1UL << CAN_TI1R_IDE_Pos) /*!< 0x00000004 */\r\n#define CAN_TI1R_IDE      CAN_TI1R_IDE_Msk            /*!< Identifier Extension */\r\n#define CAN_TI1R_EXID_Pos (3U)\r\n#define CAN_TI1R_EXID_Msk (0x3FFFFUL << CAN_TI1R_EXID_Pos) /*!< 0x001FFFF8 */\r\n#define CAN_TI1R_EXID     CAN_TI1R_EXID_Msk                /*!< Extended Identifier */\r\n#define CAN_TI1R_STID_Pos (21U)\r\n#define CAN_TI1R_STID_Msk (0x7FFUL << CAN_TI1R_STID_Pos) /*!< 0xFFE00000 */\r\n#define CAN_TI1R_STID     CAN_TI1R_STID_Msk              /*!< Standard Identifier or Extended Identifier */\r\n\r\n/*******************  Bit definition for CAN_TDT1R register  ******************/\r\n#define CAN_TDT1R_DLC_Pos  (0U)\r\n#define CAN_TDT1R_DLC_Msk  (0xFUL << CAN_TDT1R_DLC_Pos) /*!< 0x0000000F */\r\n#define CAN_TDT1R_DLC      CAN_TDT1R_DLC_Msk            /*!< Data Length Code */\r\n#define CAN_TDT1R_TGT_Pos  (8U)\r\n#define CAN_TDT1R_TGT_Msk  (0x1UL << CAN_TDT1R_TGT_Pos) /*!< 0x00000100 */\r\n#define CAN_TDT1R_TGT      CAN_TDT1R_TGT_Msk            /*!< Transmit Global Time */\r\n#define CAN_TDT1R_TIME_Pos (16U)\r\n#define CAN_TDT1R_TIME_Msk (0xFFFFUL << CAN_TDT1R_TIME_Pos) /*!< 0xFFFF0000 */\r\n#define CAN_TDT1R_TIME     CAN_TDT1R_TIME_Msk               /*!< Message Time Stamp */\r\n\r\n/*******************  Bit definition for CAN_TDL1R register  ******************/\r\n#define CAN_TDL1R_DATA0_Pos (0U)\r\n#define CAN_TDL1R_DATA0_Msk (0xFFUL << CAN_TDL1R_DATA0_Pos) /*!< 0x000000FF */\r\n#define CAN_TDL1R_DATA0     CAN_TDL1R_DATA0_Msk             /*!< Data byte 0 */\r\n#define CAN_TDL1R_DATA1_Pos (8U)\r\n#define CAN_TDL1R_DATA1_Msk (0xFFUL << CAN_TDL1R_DATA1_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDL1R_DATA1     CAN_TDL1R_DATA1_Msk             /*!< Data byte 1 */\r\n#define CAN_TDL1R_DATA2_Pos (16U)\r\n#define CAN_TDL1R_DATA2_Msk (0xFFUL << CAN_TDL1R_DATA2_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDL1R_DATA2     CAN_TDL1R_DATA2_Msk             /*!< Data byte 2 */\r\n#define CAN_TDL1R_DATA3_Pos (24U)\r\n#define CAN_TDL1R_DATA3_Msk (0xFFUL << CAN_TDL1R_DATA3_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDL1R_DATA3     CAN_TDL1R_DATA3_Msk             /*!< Data byte 3 */\r\n\r\n/*******************  Bit definition for CAN_TDH1R register  ******************/\r\n#define CAN_TDH1R_DATA4_Pos (0U)\r\n#define CAN_TDH1R_DATA4_Msk (0xFFUL << CAN_TDH1R_DATA4_Pos) /*!< 0x000000FF */\r\n#define CAN_TDH1R_DATA4     CAN_TDH1R_DATA4_Msk             /*!< Data byte 4 */\r\n#define CAN_TDH1R_DATA5_Pos (8U)\r\n#define CAN_TDH1R_DATA5_Msk (0xFFUL << CAN_TDH1R_DATA5_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDH1R_DATA5     CAN_TDH1R_DATA5_Msk             /*!< Data byte 5 */\r\n#define CAN_TDH1R_DATA6_Pos (16U)\r\n#define CAN_TDH1R_DATA6_Msk (0xFFUL << CAN_TDH1R_DATA6_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDH1R_DATA6     CAN_TDH1R_DATA6_Msk             /*!< Data byte 6 */\r\n#define CAN_TDH1R_DATA7_Pos (24U)\r\n#define CAN_TDH1R_DATA7_Msk (0xFFUL << CAN_TDH1R_DATA7_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDH1R_DATA7     CAN_TDH1R_DATA7_Msk             /*!< Data byte 7 */\r\n\r\n/*******************  Bit definition for CAN_TI2R register  *******************/\r\n#define CAN_TI2R_TXRQ_Pos (0U)\r\n#define CAN_TI2R_TXRQ_Msk (0x1UL << CAN_TI2R_TXRQ_Pos) /*!< 0x00000001 */\r\n#define CAN_TI2R_TXRQ     CAN_TI2R_TXRQ_Msk            /*!< Transmit Mailbox Request */\r\n#define CAN_TI2R_RTR_Pos  (1U)\r\n#define CAN_TI2R_RTR_Msk  (0x1UL << CAN_TI2R_RTR_Pos) /*!< 0x00000002 */\r\n#define CAN_TI2R_RTR      CAN_TI2R_RTR_Msk            /*!< Remote Transmission Request */\r\n#define CAN_TI2R_IDE_Pos  (2U)\r\n#define CAN_TI2R_IDE_Msk  (0x1UL << CAN_TI2R_IDE_Pos) /*!< 0x00000004 */\r\n#define CAN_TI2R_IDE      CAN_TI2R_IDE_Msk            /*!< Identifier Extension */\r\n#define CAN_TI2R_EXID_Pos (3U)\r\n#define CAN_TI2R_EXID_Msk (0x3FFFFUL << CAN_TI2R_EXID_Pos) /*!< 0x001FFFF8 */\r\n#define CAN_TI2R_EXID     CAN_TI2R_EXID_Msk                /*!< Extended identifier */\r\n#define CAN_TI2R_STID_Pos (21U)\r\n#define CAN_TI2R_STID_Msk (0x7FFUL << CAN_TI2R_STID_Pos) /*!< 0xFFE00000 */\r\n#define CAN_TI2R_STID     CAN_TI2R_STID_Msk              /*!< Standard Identifier or Extended Identifier */\r\n\r\n/*******************  Bit definition for CAN_TDT2R register  ******************/\r\n#define CAN_TDT2R_DLC_Pos  (0U)\r\n#define CAN_TDT2R_DLC_Msk  (0xFUL << CAN_TDT2R_DLC_Pos) /*!< 0x0000000F */\r\n#define CAN_TDT2R_DLC      CAN_TDT2R_DLC_Msk            /*!< Data Length Code */\r\n#define CAN_TDT2R_TGT_Pos  (8U)\r\n#define CAN_TDT2R_TGT_Msk  (0x1UL << CAN_TDT2R_TGT_Pos) /*!< 0x00000100 */\r\n#define CAN_TDT2R_TGT      CAN_TDT2R_TGT_Msk            /*!< Transmit Global Time */\r\n#define CAN_TDT2R_TIME_Pos (16U)\r\n#define CAN_TDT2R_TIME_Msk (0xFFFFUL << CAN_TDT2R_TIME_Pos) /*!< 0xFFFF0000 */\r\n#define CAN_TDT2R_TIME     CAN_TDT2R_TIME_Msk               /*!< Message Time Stamp */\r\n\r\n/*******************  Bit definition for CAN_TDL2R register  ******************/\r\n#define CAN_TDL2R_DATA0_Pos (0U)\r\n#define CAN_TDL2R_DATA0_Msk (0xFFUL << CAN_TDL2R_DATA0_Pos) /*!< 0x000000FF */\r\n#define CAN_TDL2R_DATA0     CAN_TDL2R_DATA0_Msk             /*!< Data byte 0 */\r\n#define CAN_TDL2R_DATA1_Pos (8U)\r\n#define CAN_TDL2R_DATA1_Msk (0xFFUL << CAN_TDL2R_DATA1_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDL2R_DATA1     CAN_TDL2R_DATA1_Msk             /*!< Data byte 1 */\r\n#define CAN_TDL2R_DATA2_Pos (16U)\r\n#define CAN_TDL2R_DATA2_Msk (0xFFUL << CAN_TDL2R_DATA2_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDL2R_DATA2     CAN_TDL2R_DATA2_Msk             /*!< Data byte 2 */\r\n#define CAN_TDL2R_DATA3_Pos (24U)\r\n#define CAN_TDL2R_DATA3_Msk (0xFFUL << CAN_TDL2R_DATA3_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDL2R_DATA3     CAN_TDL2R_DATA3_Msk             /*!< Data byte 3 */\r\n\r\n/*******************  Bit definition for CAN_TDH2R register  ******************/\r\n#define CAN_TDH2R_DATA4_Pos (0U)\r\n#define CAN_TDH2R_DATA4_Msk (0xFFUL << CAN_TDH2R_DATA4_Pos) /*!< 0x000000FF */\r\n#define CAN_TDH2R_DATA4     CAN_TDH2R_DATA4_Msk             /*!< Data byte 4 */\r\n#define CAN_TDH2R_DATA5_Pos (8U)\r\n#define CAN_TDH2R_DATA5_Msk (0xFFUL << CAN_TDH2R_DATA5_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDH2R_DATA5     CAN_TDH2R_DATA5_Msk             /*!< Data byte 5 */\r\n#define CAN_TDH2R_DATA6_Pos (16U)\r\n#define CAN_TDH2R_DATA6_Msk (0xFFUL << CAN_TDH2R_DATA6_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDH2R_DATA6     CAN_TDH2R_DATA6_Msk             /*!< Data byte 6 */\r\n#define CAN_TDH2R_DATA7_Pos (24U)\r\n#define CAN_TDH2R_DATA7_Msk (0xFFUL << CAN_TDH2R_DATA7_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDH2R_DATA7     CAN_TDH2R_DATA7_Msk             /*!< Data byte 7 */\r\n\r\n/*******************  Bit definition for CAN_RI0R register  *******************/\r\n#define CAN_RI0R_RTR_Pos  (1U)\r\n#define CAN_RI0R_RTR_Msk  (0x1UL << CAN_RI0R_RTR_Pos) /*!< 0x00000002 */\r\n#define CAN_RI0R_RTR      CAN_RI0R_RTR_Msk            /*!< Remote Transmission Request */\r\n#define CAN_RI0R_IDE_Pos  (2U)\r\n#define CAN_RI0R_IDE_Msk  (0x1UL << CAN_RI0R_IDE_Pos) /*!< 0x00000004 */\r\n#define CAN_RI0R_IDE      CAN_RI0R_IDE_Msk            /*!< Identifier Extension */\r\n#define CAN_RI0R_EXID_Pos (3U)\r\n#define CAN_RI0R_EXID_Msk (0x3FFFFUL << CAN_RI0R_EXID_Pos) /*!< 0x001FFFF8 */\r\n#define CAN_RI0R_EXID     CAN_RI0R_EXID_Msk                /*!< Extended Identifier */\r\n#define CAN_RI0R_STID_Pos (21U)\r\n#define CAN_RI0R_STID_Msk (0x7FFUL << CAN_RI0R_STID_Pos) /*!< 0xFFE00000 */\r\n#define CAN_RI0R_STID     CAN_RI0R_STID_Msk              /*!< Standard Identifier or Extended Identifier */\r\n\r\n/*******************  Bit definition for CAN_RDT0R register  ******************/\r\n#define CAN_RDT0R_DLC_Pos  (0U)\r\n#define CAN_RDT0R_DLC_Msk  (0xFUL << CAN_RDT0R_DLC_Pos) /*!< 0x0000000F */\r\n#define CAN_RDT0R_DLC      CAN_RDT0R_DLC_Msk            /*!< Data Length Code */\r\n#define CAN_RDT0R_FMI_Pos  (8U)\r\n#define CAN_RDT0R_FMI_Msk  (0xFFUL << CAN_RDT0R_FMI_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDT0R_FMI      CAN_RDT0R_FMI_Msk             /*!< Filter Match Index */\r\n#define CAN_RDT0R_TIME_Pos (16U)\r\n#define CAN_RDT0R_TIME_Msk (0xFFFFUL << CAN_RDT0R_TIME_Pos) /*!< 0xFFFF0000 */\r\n#define CAN_RDT0R_TIME     CAN_RDT0R_TIME_Msk               /*!< Message Time Stamp */\r\n\r\n/*******************  Bit definition for CAN_RDL0R register  ******************/\r\n#define CAN_RDL0R_DATA0_Pos (0U)\r\n#define CAN_RDL0R_DATA0_Msk (0xFFUL << CAN_RDL0R_DATA0_Pos) /*!< 0x000000FF */\r\n#define CAN_RDL0R_DATA0     CAN_RDL0R_DATA0_Msk             /*!< Data byte 0 */\r\n#define CAN_RDL0R_DATA1_Pos (8U)\r\n#define CAN_RDL0R_DATA1_Msk (0xFFUL << CAN_RDL0R_DATA1_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDL0R_DATA1     CAN_RDL0R_DATA1_Msk             /*!< Data byte 1 */\r\n#define CAN_RDL0R_DATA2_Pos (16U)\r\n#define CAN_RDL0R_DATA2_Msk (0xFFUL << CAN_RDL0R_DATA2_Pos) /*!< 0x00FF0000 */\r\n#define CAN_RDL0R_DATA2     CAN_RDL0R_DATA2_Msk             /*!< Data byte 2 */\r\n#define CAN_RDL0R_DATA3_Pos (24U)\r\n#define CAN_RDL0R_DATA3_Msk (0xFFUL << CAN_RDL0R_DATA3_Pos) /*!< 0xFF000000 */\r\n#define CAN_RDL0R_DATA3     CAN_RDL0R_DATA3_Msk             /*!< Data byte 3 */\r\n\r\n/*******************  Bit definition for CAN_RDH0R register  ******************/\r\n#define CAN_RDH0R_DATA4_Pos (0U)\r\n#define CAN_RDH0R_DATA4_Msk (0xFFUL << CAN_RDH0R_DATA4_Pos) /*!< 0x000000FF */\r\n#define CAN_RDH0R_DATA4     CAN_RDH0R_DATA4_Msk             /*!< Data byte 4 */\r\n#define CAN_RDH0R_DATA5_Pos (8U)\r\n#define CAN_RDH0R_DATA5_Msk (0xFFUL << CAN_RDH0R_DATA5_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDH0R_DATA5     CAN_RDH0R_DATA5_Msk             /*!< Data byte 5 */\r\n#define CAN_RDH0R_DATA6_Pos (16U)\r\n#define CAN_RDH0R_DATA6_Msk (0xFFUL << CAN_RDH0R_DATA6_Pos) /*!< 0x00FF0000 */\r\n#define CAN_RDH0R_DATA6     CAN_RDH0R_DATA6_Msk             /*!< Data byte 6 */\r\n#define CAN_RDH0R_DATA7_Pos (24U)\r\n#define CAN_RDH0R_DATA7_Msk (0xFFUL << CAN_RDH0R_DATA7_Pos) /*!< 0xFF000000 */\r\n#define CAN_RDH0R_DATA7     CAN_RDH0R_DATA7_Msk             /*!< Data byte 7 */\r\n\r\n/*******************  Bit definition for CAN_RI1R register  *******************/\r\n#define CAN_RI1R_RTR_Pos  (1U)\r\n#define CAN_RI1R_RTR_Msk  (0x1UL << CAN_RI1R_RTR_Pos) /*!< 0x00000002 */\r\n#define CAN_RI1R_RTR      CAN_RI1R_RTR_Msk            /*!< Remote Transmission Request */\r\n#define CAN_RI1R_IDE_Pos  (2U)\r\n#define CAN_RI1R_IDE_Msk  (0x1UL << CAN_RI1R_IDE_Pos) /*!< 0x00000004 */\r\n#define CAN_RI1R_IDE      CAN_RI1R_IDE_Msk            /*!< Identifier Extension */\r\n#define CAN_RI1R_EXID_Pos (3U)\r\n#define CAN_RI1R_EXID_Msk (0x3FFFFUL << CAN_RI1R_EXID_Pos) /*!< 0x001FFFF8 */\r\n#define CAN_RI1R_EXID     CAN_RI1R_EXID_Msk                /*!< Extended identifier */\r\n#define CAN_RI1R_STID_Pos (21U)\r\n#define CAN_RI1R_STID_Msk (0x7FFUL << CAN_RI1R_STID_Pos) /*!< 0xFFE00000 */\r\n#define CAN_RI1R_STID     CAN_RI1R_STID_Msk              /*!< Standard Identifier or Extended Identifier */\r\n\r\n/*******************  Bit definition for CAN_RDT1R register  ******************/\r\n#define CAN_RDT1R_DLC_Pos  (0U)\r\n#define CAN_RDT1R_DLC_Msk  (0xFUL << CAN_RDT1R_DLC_Pos) /*!< 0x0000000F */\r\n#define CAN_RDT1R_DLC      CAN_RDT1R_DLC_Msk            /*!< Data Length Code */\r\n#define CAN_RDT1R_FMI_Pos  (8U)\r\n#define CAN_RDT1R_FMI_Msk  (0xFFUL << CAN_RDT1R_FMI_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDT1R_FMI      CAN_RDT1R_FMI_Msk             /*!< Filter Match Index */\r\n#define CAN_RDT1R_TIME_Pos (16U)\r\n#define CAN_RDT1R_TIME_Msk (0xFFFFUL << CAN_RDT1R_TIME_Pos) /*!< 0xFFFF0000 */\r\n#define CAN_RDT1R_TIME     CAN_RDT1R_TIME_Msk               /*!< Message Time Stamp */\r\n\r\n/*******************  Bit definition for CAN_RDL1R register  ******************/\r\n#define CAN_RDL1R_DATA0_Pos (0U)\r\n#define CAN_RDL1R_DATA0_Msk (0xFFUL << CAN_RDL1R_DATA0_Pos) /*!< 0x000000FF */\r\n#define CAN_RDL1R_DATA0     CAN_RDL1R_DATA0_Msk             /*!< Data byte 0 */\r\n#define CAN_RDL1R_DATA1_Pos (8U)\r\n#define CAN_RDL1R_DATA1_Msk (0xFFUL << CAN_RDL1R_DATA1_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDL1R_DATA1     CAN_RDL1R_DATA1_Msk             /*!< Data byte 1 */\r\n#define CAN_RDL1R_DATA2_Pos (16U)\r\n#define CAN_RDL1R_DATA2_Msk (0xFFUL << CAN_RDL1R_DATA2_Pos) /*!< 0x00FF0000 */\r\n#define CAN_RDL1R_DATA2     CAN_RDL1R_DATA2_Msk             /*!< Data byte 2 */\r\n#define CAN_RDL1R_DATA3_Pos (24U)\r\n#define CAN_RDL1R_DATA3_Msk (0xFFUL << CAN_RDL1R_DATA3_Pos) /*!< 0xFF000000 */\r\n#define CAN_RDL1R_DATA3     CAN_RDL1R_DATA3_Msk             /*!< Data byte 3 */\r\n\r\n/*******************  Bit definition for CAN_RDH1R register  ******************/\r\n#define CAN_RDH1R_DATA4_Pos (0U)\r\n#define CAN_RDH1R_DATA4_Msk (0xFFUL << CAN_RDH1R_DATA4_Pos) /*!< 0x000000FF */\r\n#define CAN_RDH1R_DATA4     CAN_RDH1R_DATA4_Msk             /*!< Data byte 4 */\r\n#define CAN_RDH1R_DATA5_Pos (8U)\r\n#define CAN_RDH1R_DATA5_Msk (0xFFUL << CAN_RDH1R_DATA5_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDH1R_DATA5     CAN_RDH1R_DATA5_Msk             /*!< Data byte 5 */\r\n#define CAN_RDH1R_DATA6_Pos (16U)\r\n#define CAN_RDH1R_DATA6_Msk (0xFFUL << CAN_RDH1R_DATA6_Pos) /*!< 0x00FF0000 */\r\n#define CAN_RDH1R_DATA6     CAN_RDH1R_DATA6_Msk             /*!< Data byte 6 */\r\n#define CAN_RDH1R_DATA7_Pos (24U)\r\n#define CAN_RDH1R_DATA7_Msk (0xFFUL << CAN_RDH1R_DATA7_Pos) /*!< 0xFF000000 */\r\n#define CAN_RDH1R_DATA7     CAN_RDH1R_DATA7_Msk             /*!< Data byte 7 */\r\n\r\n/*!< CAN filter registers */\r\n/*******************  Bit definition for CAN_FMR register  ********************/\r\n#define CAN_FMR_FINIT_Pos  (0U)\r\n#define CAN_FMR_FINIT_Msk  (0x1UL << CAN_FMR_FINIT_Pos) /*!< 0x00000001 */\r\n#define CAN_FMR_FINIT      CAN_FMR_FINIT_Msk            /*!< Filter Init Mode */\r\n#define CAN_FMR_CAN2SB_Pos (8U)\r\n#define CAN_FMR_CAN2SB_Msk (0x3FUL << CAN_FMR_CAN2SB_Pos) /*!< 0x00003F00 */\r\n#define CAN_FMR_CAN2SB     CAN_FMR_CAN2SB_Msk             /*!< CAN2 start bank */\r\n\r\n/*******************  Bit definition for CAN_FM1R register  *******************/\r\n#define CAN_FM1R_FBM_Pos   (0U)\r\n#define CAN_FM1R_FBM_Msk   (0x3FFFUL << CAN_FM1R_FBM_Pos) /*!< 0x00003FFF */\r\n#define CAN_FM1R_FBM       CAN_FM1R_FBM_Msk               /*!< Filter Mode */\r\n#define CAN_FM1R_FBM0_Pos  (0U)\r\n#define CAN_FM1R_FBM0_Msk  (0x1UL << CAN_FM1R_FBM0_Pos) /*!< 0x00000001 */\r\n#define CAN_FM1R_FBM0      CAN_FM1R_FBM0_Msk            /*!< Filter Init Mode for filter 0 */\r\n#define CAN_FM1R_FBM1_Pos  (1U)\r\n#define CAN_FM1R_FBM1_Msk  (0x1UL << CAN_FM1R_FBM1_Pos) /*!< 0x00000002 */\r\n#define CAN_FM1R_FBM1      CAN_FM1R_FBM1_Msk            /*!< Filter Init Mode for filter 1 */\r\n#define CAN_FM1R_FBM2_Pos  (2U)\r\n#define CAN_FM1R_FBM2_Msk  (0x1UL << CAN_FM1R_FBM2_Pos) /*!< 0x00000004 */\r\n#define CAN_FM1R_FBM2      CAN_FM1R_FBM2_Msk            /*!< Filter Init Mode for filter 2 */\r\n#define CAN_FM1R_FBM3_Pos  (3U)\r\n#define CAN_FM1R_FBM3_Msk  (0x1UL << CAN_FM1R_FBM3_Pos) /*!< 0x00000008 */\r\n#define CAN_FM1R_FBM3      CAN_FM1R_FBM3_Msk            /*!< Filter Init Mode for filter 3 */\r\n#define CAN_FM1R_FBM4_Pos  (4U)\r\n#define CAN_FM1R_FBM4_Msk  (0x1UL << CAN_FM1R_FBM4_Pos) /*!< 0x00000010 */\r\n#define CAN_FM1R_FBM4      CAN_FM1R_FBM4_Msk            /*!< Filter Init Mode for filter 4 */\r\n#define CAN_FM1R_FBM5_Pos  (5U)\r\n#define CAN_FM1R_FBM5_Msk  (0x1UL << CAN_FM1R_FBM5_Pos) /*!< 0x00000020 */\r\n#define CAN_FM1R_FBM5      CAN_FM1R_FBM5_Msk            /*!< Filter Init Mode for filter 5 */\r\n#define CAN_FM1R_FBM6_Pos  (6U)\r\n#define CAN_FM1R_FBM6_Msk  (0x1UL << CAN_FM1R_FBM6_Pos) /*!< 0x00000040 */\r\n#define CAN_FM1R_FBM6      CAN_FM1R_FBM6_Msk            /*!< Filter Init Mode for filter 6 */\r\n#define CAN_FM1R_FBM7_Pos  (7U)\r\n#define CAN_FM1R_FBM7_Msk  (0x1UL << CAN_FM1R_FBM7_Pos) /*!< 0x00000080 */\r\n#define CAN_FM1R_FBM7      CAN_FM1R_FBM7_Msk            /*!< Filter Init Mode for filter 7 */\r\n#define CAN_FM1R_FBM8_Pos  (8U)\r\n#define CAN_FM1R_FBM8_Msk  (0x1UL << CAN_FM1R_FBM8_Pos) /*!< 0x00000100 */\r\n#define CAN_FM1R_FBM8      CAN_FM1R_FBM8_Msk            /*!< Filter Init Mode for filter 8 */\r\n#define CAN_FM1R_FBM9_Pos  (9U)\r\n#define CAN_FM1R_FBM9_Msk  (0x1UL << CAN_FM1R_FBM9_Pos) /*!< 0x00000200 */\r\n#define CAN_FM1R_FBM9      CAN_FM1R_FBM9_Msk            /*!< Filter Init Mode for filter 9 */\r\n#define CAN_FM1R_FBM10_Pos (10U)\r\n#define CAN_FM1R_FBM10_Msk (0x1UL << CAN_FM1R_FBM10_Pos) /*!< 0x00000400 */\r\n#define CAN_FM1R_FBM10     CAN_FM1R_FBM10_Msk            /*!< Filter Init Mode for filter 10 */\r\n#define CAN_FM1R_FBM11_Pos (11U)\r\n#define CAN_FM1R_FBM11_Msk (0x1UL << CAN_FM1R_FBM11_Pos) /*!< 0x00000800 */\r\n#define CAN_FM1R_FBM11     CAN_FM1R_FBM11_Msk            /*!< Filter Init Mode for filter 11 */\r\n#define CAN_FM1R_FBM12_Pos (12U)\r\n#define CAN_FM1R_FBM12_Msk (0x1UL << CAN_FM1R_FBM12_Pos) /*!< 0x00001000 */\r\n#define CAN_FM1R_FBM12     CAN_FM1R_FBM12_Msk            /*!< Filter Init Mode for filter 12 */\r\n#define CAN_FM1R_FBM13_Pos (13U)\r\n#define CAN_FM1R_FBM13_Msk (0x1UL << CAN_FM1R_FBM13_Pos) /*!< 0x00002000 */\r\n#define CAN_FM1R_FBM13     CAN_FM1R_FBM13_Msk            /*!< Filter Init Mode for filter 13 */\r\n\r\n/*******************  Bit definition for CAN_FS1R register  *******************/\r\n#define CAN_FS1R_FSC_Pos   (0U)\r\n#define CAN_FS1R_FSC_Msk   (0x3FFFUL << CAN_FS1R_FSC_Pos) /*!< 0x00003FFF */\r\n#define CAN_FS1R_FSC       CAN_FS1R_FSC_Msk               /*!< Filter Scale Configuration */\r\n#define CAN_FS1R_FSC0_Pos  (0U)\r\n#define CAN_FS1R_FSC0_Msk  (0x1UL << CAN_FS1R_FSC0_Pos) /*!< 0x00000001 */\r\n#define CAN_FS1R_FSC0      CAN_FS1R_FSC0_Msk            /*!< Filter Scale Configuration for filter 0 */\r\n#define CAN_FS1R_FSC1_Pos  (1U)\r\n#define CAN_FS1R_FSC1_Msk  (0x1UL << CAN_FS1R_FSC1_Pos) /*!< 0x00000002 */\r\n#define CAN_FS1R_FSC1      CAN_FS1R_FSC1_Msk            /*!< Filter Scale Configuration for filter 1 */\r\n#define CAN_FS1R_FSC2_Pos  (2U)\r\n#define CAN_FS1R_FSC2_Msk  (0x1UL << CAN_FS1R_FSC2_Pos) /*!< 0x00000004 */\r\n#define CAN_FS1R_FSC2      CAN_FS1R_FSC2_Msk            /*!< Filter Scale Configuration for filter 2 */\r\n#define CAN_FS1R_FSC3_Pos  (3U)\r\n#define CAN_FS1R_FSC3_Msk  (0x1UL << CAN_FS1R_FSC3_Pos) /*!< 0x00000008 */\r\n#define CAN_FS1R_FSC3      CAN_FS1R_FSC3_Msk            /*!< Filter Scale Configuration for filter 3 */\r\n#define CAN_FS1R_FSC4_Pos  (4U)\r\n#define CAN_FS1R_FSC4_Msk  (0x1UL << CAN_FS1R_FSC4_Pos) /*!< 0x00000010 */\r\n#define CAN_FS1R_FSC4      CAN_FS1R_FSC4_Msk            /*!< Filter Scale Configuration for filter 4 */\r\n#define CAN_FS1R_FSC5_Pos  (5U)\r\n#define CAN_FS1R_FSC5_Msk  (0x1UL << CAN_FS1R_FSC5_Pos) /*!< 0x00000020 */\r\n#define CAN_FS1R_FSC5      CAN_FS1R_FSC5_Msk            /*!< Filter Scale Configuration for filter 5 */\r\n#define CAN_FS1R_FSC6_Pos  (6U)\r\n#define CAN_FS1R_FSC6_Msk  (0x1UL << CAN_FS1R_FSC6_Pos) /*!< 0x00000040 */\r\n#define CAN_FS1R_FSC6      CAN_FS1R_FSC6_Msk            /*!< Filter Scale Configuration for filter 6 */\r\n#define CAN_FS1R_FSC7_Pos  (7U)\r\n#define CAN_FS1R_FSC7_Msk  (0x1UL << CAN_FS1R_FSC7_Pos) /*!< 0x00000080 */\r\n#define CAN_FS1R_FSC7      CAN_FS1R_FSC7_Msk            /*!< Filter Scale Configuration for filter 7 */\r\n#define CAN_FS1R_FSC8_Pos  (8U)\r\n#define CAN_FS1R_FSC8_Msk  (0x1UL << CAN_FS1R_FSC8_Pos) /*!< 0x00000100 */\r\n#define CAN_FS1R_FSC8      CAN_FS1R_FSC8_Msk            /*!< Filter Scale Configuration for filter 8 */\r\n#define CAN_FS1R_FSC9_Pos  (9U)\r\n#define CAN_FS1R_FSC9_Msk  (0x1UL << CAN_FS1R_FSC9_Pos) /*!< 0x00000200 */\r\n#define CAN_FS1R_FSC9      CAN_FS1R_FSC9_Msk            /*!< Filter Scale Configuration for filter 9 */\r\n#define CAN_FS1R_FSC10_Pos (10U)\r\n#define CAN_FS1R_FSC10_Msk (0x1UL << CAN_FS1R_FSC10_Pos) /*!< 0x00000400 */\r\n#define CAN_FS1R_FSC10     CAN_FS1R_FSC10_Msk            /*!< Filter Scale Configuration for filter 10 */\r\n#define CAN_FS1R_FSC11_Pos (11U)\r\n#define CAN_FS1R_FSC11_Msk (0x1UL << CAN_FS1R_FSC11_Pos) /*!< 0x00000800 */\r\n#define CAN_FS1R_FSC11     CAN_FS1R_FSC11_Msk            /*!< Filter Scale Configuration for filter 11 */\r\n#define CAN_FS1R_FSC12_Pos (12U)\r\n#define CAN_FS1R_FSC12_Msk (0x1UL << CAN_FS1R_FSC12_Pos) /*!< 0x00001000 */\r\n#define CAN_FS1R_FSC12     CAN_FS1R_FSC12_Msk            /*!< Filter Scale Configuration for filter 12 */\r\n#define CAN_FS1R_FSC13_Pos (13U)\r\n#define CAN_FS1R_FSC13_Msk (0x1UL << CAN_FS1R_FSC13_Pos) /*!< 0x00002000 */\r\n#define CAN_FS1R_FSC13     CAN_FS1R_FSC13_Msk            /*!< Filter Scale Configuration for filter 13 */\r\n\r\n/******************  Bit definition for CAN_FFA1R register  *******************/\r\n#define CAN_FFA1R_FFA_Pos   (0U)\r\n#define CAN_FFA1R_FFA_Msk   (0x3FFFUL << CAN_FFA1R_FFA_Pos) /*!< 0x00003FFF */\r\n#define CAN_FFA1R_FFA       CAN_FFA1R_FFA_Msk               /*!< Filter FIFO Assignment */\r\n#define CAN_FFA1R_FFA0_Pos  (0U)\r\n#define CAN_FFA1R_FFA0_Msk  (0x1UL << CAN_FFA1R_FFA0_Pos) /*!< 0x00000001 */\r\n#define CAN_FFA1R_FFA0      CAN_FFA1R_FFA0_Msk            /*!< Filter FIFO Assignment for filter 0 */\r\n#define CAN_FFA1R_FFA1_Pos  (1U)\r\n#define CAN_FFA1R_FFA1_Msk  (0x1UL << CAN_FFA1R_FFA1_Pos) /*!< 0x00000002 */\r\n#define CAN_FFA1R_FFA1      CAN_FFA1R_FFA1_Msk            /*!< Filter FIFO Assignment for filter 1 */\r\n#define CAN_FFA1R_FFA2_Pos  (2U)\r\n#define CAN_FFA1R_FFA2_Msk  (0x1UL << CAN_FFA1R_FFA2_Pos) /*!< 0x00000004 */\r\n#define CAN_FFA1R_FFA2      CAN_FFA1R_FFA2_Msk            /*!< Filter FIFO Assignment for filter 2 */\r\n#define CAN_FFA1R_FFA3_Pos  (3U)\r\n#define CAN_FFA1R_FFA3_Msk  (0x1UL << CAN_FFA1R_FFA3_Pos) /*!< 0x00000008 */\r\n#define CAN_FFA1R_FFA3      CAN_FFA1R_FFA3_Msk            /*!< Filter FIFO Assignment for filter 3 */\r\n#define CAN_FFA1R_FFA4_Pos  (4U)\r\n#define CAN_FFA1R_FFA4_Msk  (0x1UL << CAN_FFA1R_FFA4_Pos) /*!< 0x00000010 */\r\n#define CAN_FFA1R_FFA4      CAN_FFA1R_FFA4_Msk            /*!< Filter FIFO Assignment for filter 4 */\r\n#define CAN_FFA1R_FFA5_Pos  (5U)\r\n#define CAN_FFA1R_FFA5_Msk  (0x1UL << CAN_FFA1R_FFA5_Pos) /*!< 0x00000020 */\r\n#define CAN_FFA1R_FFA5      CAN_FFA1R_FFA5_Msk            /*!< Filter FIFO Assignment for filter 5 */\r\n#define CAN_FFA1R_FFA6_Pos  (6U)\r\n#define CAN_FFA1R_FFA6_Msk  (0x1UL << CAN_FFA1R_FFA6_Pos) /*!< 0x00000040 */\r\n#define CAN_FFA1R_FFA6      CAN_FFA1R_FFA6_Msk            /*!< Filter FIFO Assignment for filter 6 */\r\n#define CAN_FFA1R_FFA7_Pos  (7U)\r\n#define CAN_FFA1R_FFA7_Msk  (0x1UL << CAN_FFA1R_FFA7_Pos) /*!< 0x00000080 */\r\n#define CAN_FFA1R_FFA7      CAN_FFA1R_FFA7_Msk            /*!< Filter FIFO Assignment for filter 7 */\r\n#define CAN_FFA1R_FFA8_Pos  (8U)\r\n#define CAN_FFA1R_FFA8_Msk  (0x1UL << CAN_FFA1R_FFA8_Pos) /*!< 0x00000100 */\r\n#define CAN_FFA1R_FFA8      CAN_FFA1R_FFA8_Msk            /*!< Filter FIFO Assignment for filter 8 */\r\n#define CAN_FFA1R_FFA9_Pos  (9U)\r\n#define CAN_FFA1R_FFA9_Msk  (0x1UL << CAN_FFA1R_FFA9_Pos) /*!< 0x00000200 */\r\n#define CAN_FFA1R_FFA9      CAN_FFA1R_FFA9_Msk            /*!< Filter FIFO Assignment for filter 9 */\r\n#define CAN_FFA1R_FFA10_Pos (10U)\r\n#define CAN_FFA1R_FFA10_Msk (0x1UL << CAN_FFA1R_FFA10_Pos) /*!< 0x00000400 */\r\n#define CAN_FFA1R_FFA10     CAN_FFA1R_FFA10_Msk            /*!< Filter FIFO Assignment for filter 10 */\r\n#define CAN_FFA1R_FFA11_Pos (11U)\r\n#define CAN_FFA1R_FFA11_Msk (0x1UL << CAN_FFA1R_FFA11_Pos) /*!< 0x00000800 */\r\n#define CAN_FFA1R_FFA11     CAN_FFA1R_FFA11_Msk            /*!< Filter FIFO Assignment for filter 11 */\r\n#define CAN_FFA1R_FFA12_Pos (12U)\r\n#define CAN_FFA1R_FFA12_Msk (0x1UL << CAN_FFA1R_FFA12_Pos) /*!< 0x00001000 */\r\n#define CAN_FFA1R_FFA12     CAN_FFA1R_FFA12_Msk            /*!< Filter FIFO Assignment for filter 12 */\r\n#define CAN_FFA1R_FFA13_Pos (13U)\r\n#define CAN_FFA1R_FFA13_Msk (0x1UL << CAN_FFA1R_FFA13_Pos) /*!< 0x00002000 */\r\n#define CAN_FFA1R_FFA13     CAN_FFA1R_FFA13_Msk            /*!< Filter FIFO Assignment for filter 13 */\r\n\r\n/*******************  Bit definition for CAN_FA1R register  *******************/\r\n#define CAN_FA1R_FACT_Pos   (0U)\r\n#define CAN_FA1R_FACT_Msk   (0x3FFFUL << CAN_FA1R_FACT_Pos) /*!< 0x00003FFF */\r\n#define CAN_FA1R_FACT       CAN_FA1R_FACT_Msk               /*!< Filter Active */\r\n#define CAN_FA1R_FACT0_Pos  (0U)\r\n#define CAN_FA1R_FACT0_Msk  (0x1UL << CAN_FA1R_FACT0_Pos) /*!< 0x00000001 */\r\n#define CAN_FA1R_FACT0      CAN_FA1R_FACT0_Msk            /*!< Filter 0 Active */\r\n#define CAN_FA1R_FACT1_Pos  (1U)\r\n#define CAN_FA1R_FACT1_Msk  (0x1UL << CAN_FA1R_FACT1_Pos) /*!< 0x00000002 */\r\n#define CAN_FA1R_FACT1      CAN_FA1R_FACT1_Msk            /*!< Filter 1 Active */\r\n#define CAN_FA1R_FACT2_Pos  (2U)\r\n#define CAN_FA1R_FACT2_Msk  (0x1UL << CAN_FA1R_FACT2_Pos) /*!< 0x00000004 */\r\n#define CAN_FA1R_FACT2      CAN_FA1R_FACT2_Msk            /*!< Filter 2 Active */\r\n#define CAN_FA1R_FACT3_Pos  (3U)\r\n#define CAN_FA1R_FACT3_Msk  (0x1UL << CAN_FA1R_FACT3_Pos) /*!< 0x00000008 */\r\n#define CAN_FA1R_FACT3      CAN_FA1R_FACT3_Msk            /*!< Filter 3 Active */\r\n#define CAN_FA1R_FACT4_Pos  (4U)\r\n#define CAN_FA1R_FACT4_Msk  (0x1UL << CAN_FA1R_FACT4_Pos) /*!< 0x00000010 */\r\n#define CAN_FA1R_FACT4      CAN_FA1R_FACT4_Msk            /*!< Filter 4 Active */\r\n#define CAN_FA1R_FACT5_Pos  (5U)\r\n#define CAN_FA1R_FACT5_Msk  (0x1UL << CAN_FA1R_FACT5_Pos) /*!< 0x00000020 */\r\n#define CAN_FA1R_FACT5      CAN_FA1R_FACT5_Msk            /*!< Filter 5 Active */\r\n#define CAN_FA1R_FACT6_Pos  (6U)\r\n#define CAN_FA1R_FACT6_Msk  (0x1UL << CAN_FA1R_FACT6_Pos) /*!< 0x00000040 */\r\n#define CAN_FA1R_FACT6      CAN_FA1R_FACT6_Msk            /*!< Filter 6 Active */\r\n#define CAN_FA1R_FACT7_Pos  (7U)\r\n#define CAN_FA1R_FACT7_Msk  (0x1UL << CAN_FA1R_FACT7_Pos) /*!< 0x00000080 */\r\n#define CAN_FA1R_FACT7      CAN_FA1R_FACT7_Msk            /*!< Filter 7 Active */\r\n#define CAN_FA1R_FACT8_Pos  (8U)\r\n#define CAN_FA1R_FACT8_Msk  (0x1UL << CAN_FA1R_FACT8_Pos) /*!< 0x00000100 */\r\n#define CAN_FA1R_FACT8      CAN_FA1R_FACT8_Msk            /*!< Filter 8 Active */\r\n#define CAN_FA1R_FACT9_Pos  (9U)\r\n#define CAN_FA1R_FACT9_Msk  (0x1UL << CAN_FA1R_FACT9_Pos) /*!< 0x00000200 */\r\n#define CAN_FA1R_FACT9      CAN_FA1R_FACT9_Msk            /*!< Filter 9 Active */\r\n#define CAN_FA1R_FACT10_Pos (10U)\r\n#define CAN_FA1R_FACT10_Msk (0x1UL << CAN_FA1R_FACT10_Pos) /*!< 0x00000400 */\r\n#define CAN_FA1R_FACT10     CAN_FA1R_FACT10_Msk            /*!< Filter 10 Active */\r\n#define CAN_FA1R_FACT11_Pos (11U)\r\n#define CAN_FA1R_FACT11_Msk (0x1UL << CAN_FA1R_FACT11_Pos) /*!< 0x00000800 */\r\n#define CAN_FA1R_FACT11     CAN_FA1R_FACT11_Msk            /*!< Filter 11 Active */\r\n#define CAN_FA1R_FACT12_Pos (12U)\r\n#define CAN_FA1R_FACT12_Msk (0x1UL << CAN_FA1R_FACT12_Pos) /*!< 0x00001000 */\r\n#define CAN_FA1R_FACT12     CAN_FA1R_FACT12_Msk            /*!< Filter 12 Active */\r\n#define CAN_FA1R_FACT13_Pos (13U)\r\n#define CAN_FA1R_FACT13_Msk (0x1UL << CAN_FA1R_FACT13_Pos) /*!< 0x00002000 */\r\n#define CAN_FA1R_FACT13     CAN_FA1R_FACT13_Msk            /*!< Filter 13 Active */\r\n\r\n/*******************  Bit definition for CAN_F0R1 register  *******************/\r\n#define CAN_F0R1_FB0_Pos  (0U)\r\n#define CAN_F0R1_FB0_Msk  (0x1UL << CAN_F0R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F0R1_FB0      CAN_F0R1_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F0R1_FB1_Pos  (1U)\r\n#define CAN_F0R1_FB1_Msk  (0x1UL << CAN_F0R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F0R1_FB1      CAN_F0R1_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F0R1_FB2_Pos  (2U)\r\n#define CAN_F0R1_FB2_Msk  (0x1UL << CAN_F0R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F0R1_FB2      CAN_F0R1_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F0R1_FB3_Pos  (3U)\r\n#define CAN_F0R1_FB3_Msk  (0x1UL << CAN_F0R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F0R1_FB3      CAN_F0R1_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F0R1_FB4_Pos  (4U)\r\n#define CAN_F0R1_FB4_Msk  (0x1UL << CAN_F0R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F0R1_FB4      CAN_F0R1_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F0R1_FB5_Pos  (5U)\r\n#define CAN_F0R1_FB5_Msk  (0x1UL << CAN_F0R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F0R1_FB5      CAN_F0R1_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F0R1_FB6_Pos  (6U)\r\n#define CAN_F0R1_FB6_Msk  (0x1UL << CAN_F0R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F0R1_FB6      CAN_F0R1_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F0R1_FB7_Pos  (7U)\r\n#define CAN_F0R1_FB7_Msk  (0x1UL << CAN_F0R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F0R1_FB7      CAN_F0R1_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F0R1_FB8_Pos  (8U)\r\n#define CAN_F0R1_FB8_Msk  (0x1UL << CAN_F0R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F0R1_FB8      CAN_F0R1_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F0R1_FB9_Pos  (9U)\r\n#define CAN_F0R1_FB9_Msk  (0x1UL << CAN_F0R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F0R1_FB9      CAN_F0R1_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F0R1_FB10_Pos (10U)\r\n#define CAN_F0R1_FB10_Msk (0x1UL << CAN_F0R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F0R1_FB10     CAN_F0R1_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F0R1_FB11_Pos (11U)\r\n#define CAN_F0R1_FB11_Msk (0x1UL << CAN_F0R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F0R1_FB11     CAN_F0R1_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F0R1_FB12_Pos (12U)\r\n#define CAN_F0R1_FB12_Msk (0x1UL << CAN_F0R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F0R1_FB12     CAN_F0R1_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F0R1_FB13_Pos (13U)\r\n#define CAN_F0R1_FB13_Msk (0x1UL << CAN_F0R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F0R1_FB13     CAN_F0R1_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F0R1_FB14_Pos (14U)\r\n#define CAN_F0R1_FB14_Msk (0x1UL << CAN_F0R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F0R1_FB14     CAN_F0R1_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F0R1_FB15_Pos (15U)\r\n#define CAN_F0R1_FB15_Msk (0x1UL << CAN_F0R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F0R1_FB15     CAN_F0R1_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F0R1_FB16_Pos (16U)\r\n#define CAN_F0R1_FB16_Msk (0x1UL << CAN_F0R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F0R1_FB16     CAN_F0R1_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F0R1_FB17_Pos (17U)\r\n#define CAN_F0R1_FB17_Msk (0x1UL << CAN_F0R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F0R1_FB17     CAN_F0R1_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F0R1_FB18_Pos (18U)\r\n#define CAN_F0R1_FB18_Msk (0x1UL << CAN_F0R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F0R1_FB18     CAN_F0R1_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F0R1_FB19_Pos (19U)\r\n#define CAN_F0R1_FB19_Msk (0x1UL << CAN_F0R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F0R1_FB19     CAN_F0R1_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F0R1_FB20_Pos (20U)\r\n#define CAN_F0R1_FB20_Msk (0x1UL << CAN_F0R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F0R1_FB20     CAN_F0R1_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F0R1_FB21_Pos (21U)\r\n#define CAN_F0R1_FB21_Msk (0x1UL << CAN_F0R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F0R1_FB21     CAN_F0R1_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F0R1_FB22_Pos (22U)\r\n#define CAN_F0R1_FB22_Msk (0x1UL << CAN_F0R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F0R1_FB22     CAN_F0R1_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F0R1_FB23_Pos (23U)\r\n#define CAN_F0R1_FB23_Msk (0x1UL << CAN_F0R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F0R1_FB23     CAN_F0R1_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F0R1_FB24_Pos (24U)\r\n#define CAN_F0R1_FB24_Msk (0x1UL << CAN_F0R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F0R1_FB24     CAN_F0R1_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F0R1_FB25_Pos (25U)\r\n#define CAN_F0R1_FB25_Msk (0x1UL << CAN_F0R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F0R1_FB25     CAN_F0R1_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F0R1_FB26_Pos (26U)\r\n#define CAN_F0R1_FB26_Msk (0x1UL << CAN_F0R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F0R1_FB26     CAN_F0R1_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F0R1_FB27_Pos (27U)\r\n#define CAN_F0R1_FB27_Msk (0x1UL << CAN_F0R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F0R1_FB27     CAN_F0R1_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F0R1_FB28_Pos (28U)\r\n#define CAN_F0R1_FB28_Msk (0x1UL << CAN_F0R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F0R1_FB28     CAN_F0R1_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F0R1_FB29_Pos (29U)\r\n#define CAN_F0R1_FB29_Msk (0x1UL << CAN_F0R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F0R1_FB29     CAN_F0R1_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F0R1_FB30_Pos (30U)\r\n#define CAN_F0R1_FB30_Msk (0x1UL << CAN_F0R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F0R1_FB30     CAN_F0R1_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F0R1_FB31_Pos (31U)\r\n#define CAN_F0R1_FB31_Msk (0x1UL << CAN_F0R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F0R1_FB31     CAN_F0R1_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F1R1 register  *******************/\r\n#define CAN_F1R1_FB0_Pos  (0U)\r\n#define CAN_F1R1_FB0_Msk  (0x1UL << CAN_F1R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F1R1_FB0      CAN_F1R1_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F1R1_FB1_Pos  (1U)\r\n#define CAN_F1R1_FB1_Msk  (0x1UL << CAN_F1R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F1R1_FB1      CAN_F1R1_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F1R1_FB2_Pos  (2U)\r\n#define CAN_F1R1_FB2_Msk  (0x1UL << CAN_F1R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F1R1_FB2      CAN_F1R1_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F1R1_FB3_Pos  (3U)\r\n#define CAN_F1R1_FB3_Msk  (0x1UL << CAN_F1R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F1R1_FB3      CAN_F1R1_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F1R1_FB4_Pos  (4U)\r\n#define CAN_F1R1_FB4_Msk  (0x1UL << CAN_F1R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F1R1_FB4      CAN_F1R1_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F1R1_FB5_Pos  (5U)\r\n#define CAN_F1R1_FB5_Msk  (0x1UL << CAN_F1R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F1R1_FB5      CAN_F1R1_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F1R1_FB6_Pos  (6U)\r\n#define CAN_F1R1_FB6_Msk  (0x1UL << CAN_F1R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F1R1_FB6      CAN_F1R1_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F1R1_FB7_Pos  (7U)\r\n#define CAN_F1R1_FB7_Msk  (0x1UL << CAN_F1R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F1R1_FB7      CAN_F1R1_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F1R1_FB8_Pos  (8U)\r\n#define CAN_F1R1_FB8_Msk  (0x1UL << CAN_F1R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F1R1_FB8      CAN_F1R1_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F1R1_FB9_Pos  (9U)\r\n#define CAN_F1R1_FB9_Msk  (0x1UL << CAN_F1R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F1R1_FB9      CAN_F1R1_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F1R1_FB10_Pos (10U)\r\n#define CAN_F1R1_FB10_Msk (0x1UL << CAN_F1R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F1R1_FB10     CAN_F1R1_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F1R1_FB11_Pos (11U)\r\n#define CAN_F1R1_FB11_Msk (0x1UL << CAN_F1R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F1R1_FB11     CAN_F1R1_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F1R1_FB12_Pos (12U)\r\n#define CAN_F1R1_FB12_Msk (0x1UL << CAN_F1R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F1R1_FB12     CAN_F1R1_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F1R1_FB13_Pos (13U)\r\n#define CAN_F1R1_FB13_Msk (0x1UL << CAN_F1R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F1R1_FB13     CAN_F1R1_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F1R1_FB14_Pos (14U)\r\n#define CAN_F1R1_FB14_Msk (0x1UL << CAN_F1R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F1R1_FB14     CAN_F1R1_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F1R1_FB15_Pos (15U)\r\n#define CAN_F1R1_FB15_Msk (0x1UL << CAN_F1R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F1R1_FB15     CAN_F1R1_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F1R1_FB16_Pos (16U)\r\n#define CAN_F1R1_FB16_Msk (0x1UL << CAN_F1R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F1R1_FB16     CAN_F1R1_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F1R1_FB17_Pos (17U)\r\n#define CAN_F1R1_FB17_Msk (0x1UL << CAN_F1R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F1R1_FB17     CAN_F1R1_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F1R1_FB18_Pos (18U)\r\n#define CAN_F1R1_FB18_Msk (0x1UL << CAN_F1R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F1R1_FB18     CAN_F1R1_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F1R1_FB19_Pos (19U)\r\n#define CAN_F1R1_FB19_Msk (0x1UL << CAN_F1R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F1R1_FB19     CAN_F1R1_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F1R1_FB20_Pos (20U)\r\n#define CAN_F1R1_FB20_Msk (0x1UL << CAN_F1R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F1R1_FB20     CAN_F1R1_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F1R1_FB21_Pos (21U)\r\n#define CAN_F1R1_FB21_Msk (0x1UL << CAN_F1R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F1R1_FB21     CAN_F1R1_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F1R1_FB22_Pos (22U)\r\n#define CAN_F1R1_FB22_Msk (0x1UL << CAN_F1R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F1R1_FB22     CAN_F1R1_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F1R1_FB23_Pos (23U)\r\n#define CAN_F1R1_FB23_Msk (0x1UL << CAN_F1R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F1R1_FB23     CAN_F1R1_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F1R1_FB24_Pos (24U)\r\n#define CAN_F1R1_FB24_Msk (0x1UL << CAN_F1R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F1R1_FB24     CAN_F1R1_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F1R1_FB25_Pos (25U)\r\n#define CAN_F1R1_FB25_Msk (0x1UL << CAN_F1R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F1R1_FB25     CAN_F1R1_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F1R1_FB26_Pos (26U)\r\n#define CAN_F1R1_FB26_Msk (0x1UL << CAN_F1R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F1R1_FB26     CAN_F1R1_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F1R1_FB27_Pos (27U)\r\n#define CAN_F1R1_FB27_Msk (0x1UL << CAN_F1R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F1R1_FB27     CAN_F1R1_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F1R1_FB28_Pos (28U)\r\n#define CAN_F1R1_FB28_Msk (0x1UL << CAN_F1R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F1R1_FB28     CAN_F1R1_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F1R1_FB29_Pos (29U)\r\n#define CAN_F1R1_FB29_Msk (0x1UL << CAN_F1R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F1R1_FB29     CAN_F1R1_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F1R1_FB30_Pos (30U)\r\n#define CAN_F1R1_FB30_Msk (0x1UL << CAN_F1R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F1R1_FB30     CAN_F1R1_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F1R1_FB31_Pos (31U)\r\n#define CAN_F1R1_FB31_Msk (0x1UL << CAN_F1R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F1R1_FB31     CAN_F1R1_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F2R1 register  *******************/\r\n#define CAN_F2R1_FB0_Pos  (0U)\r\n#define CAN_F2R1_FB0_Msk  (0x1UL << CAN_F2R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F2R1_FB0      CAN_F2R1_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F2R1_FB1_Pos  (1U)\r\n#define CAN_F2R1_FB1_Msk  (0x1UL << CAN_F2R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F2R1_FB1      CAN_F2R1_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F2R1_FB2_Pos  (2U)\r\n#define CAN_F2R1_FB2_Msk  (0x1UL << CAN_F2R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F2R1_FB2      CAN_F2R1_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F2R1_FB3_Pos  (3U)\r\n#define CAN_F2R1_FB3_Msk  (0x1UL << CAN_F2R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F2R1_FB3      CAN_F2R1_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F2R1_FB4_Pos  (4U)\r\n#define CAN_F2R1_FB4_Msk  (0x1UL << CAN_F2R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F2R1_FB4      CAN_F2R1_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F2R1_FB5_Pos  (5U)\r\n#define CAN_F2R1_FB5_Msk  (0x1UL << CAN_F2R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F2R1_FB5      CAN_F2R1_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F2R1_FB6_Pos  (6U)\r\n#define CAN_F2R1_FB6_Msk  (0x1UL << CAN_F2R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F2R1_FB6      CAN_F2R1_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F2R1_FB7_Pos  (7U)\r\n#define CAN_F2R1_FB7_Msk  (0x1UL << CAN_F2R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F2R1_FB7      CAN_F2R1_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F2R1_FB8_Pos  (8U)\r\n#define CAN_F2R1_FB8_Msk  (0x1UL << CAN_F2R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F2R1_FB8      CAN_F2R1_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F2R1_FB9_Pos  (9U)\r\n#define CAN_F2R1_FB9_Msk  (0x1UL << CAN_F2R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F2R1_FB9      CAN_F2R1_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F2R1_FB10_Pos (10U)\r\n#define CAN_F2R1_FB10_Msk (0x1UL << CAN_F2R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F2R1_FB10     CAN_F2R1_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F2R1_FB11_Pos (11U)\r\n#define CAN_F2R1_FB11_Msk (0x1UL << CAN_F2R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F2R1_FB11     CAN_F2R1_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F2R1_FB12_Pos (12U)\r\n#define CAN_F2R1_FB12_Msk (0x1UL << CAN_F2R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F2R1_FB12     CAN_F2R1_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F2R1_FB13_Pos (13U)\r\n#define CAN_F2R1_FB13_Msk (0x1UL << CAN_F2R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F2R1_FB13     CAN_F2R1_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F2R1_FB14_Pos (14U)\r\n#define CAN_F2R1_FB14_Msk (0x1UL << CAN_F2R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F2R1_FB14     CAN_F2R1_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F2R1_FB15_Pos (15U)\r\n#define CAN_F2R1_FB15_Msk (0x1UL << CAN_F2R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F2R1_FB15     CAN_F2R1_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F2R1_FB16_Pos (16U)\r\n#define CAN_F2R1_FB16_Msk (0x1UL << CAN_F2R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F2R1_FB16     CAN_F2R1_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F2R1_FB17_Pos (17U)\r\n#define CAN_F2R1_FB17_Msk (0x1UL << CAN_F2R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F2R1_FB17     CAN_F2R1_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F2R1_FB18_Pos (18U)\r\n#define CAN_F2R1_FB18_Msk (0x1UL << CAN_F2R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F2R1_FB18     CAN_F2R1_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F2R1_FB19_Pos (19U)\r\n#define CAN_F2R1_FB19_Msk (0x1UL << CAN_F2R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F2R1_FB19     CAN_F2R1_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F2R1_FB20_Pos (20U)\r\n#define CAN_F2R1_FB20_Msk (0x1UL << CAN_F2R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F2R1_FB20     CAN_F2R1_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F2R1_FB21_Pos (21U)\r\n#define CAN_F2R1_FB21_Msk (0x1UL << CAN_F2R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F2R1_FB21     CAN_F2R1_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F2R1_FB22_Pos (22U)\r\n#define CAN_F2R1_FB22_Msk (0x1UL << CAN_F2R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F2R1_FB22     CAN_F2R1_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F2R1_FB23_Pos (23U)\r\n#define CAN_F2R1_FB23_Msk (0x1UL << CAN_F2R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F2R1_FB23     CAN_F2R1_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F2R1_FB24_Pos (24U)\r\n#define CAN_F2R1_FB24_Msk (0x1UL << CAN_F2R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F2R1_FB24     CAN_F2R1_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F2R1_FB25_Pos (25U)\r\n#define CAN_F2R1_FB25_Msk (0x1UL << CAN_F2R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F2R1_FB25     CAN_F2R1_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F2R1_FB26_Pos (26U)\r\n#define CAN_F2R1_FB26_Msk (0x1UL << CAN_F2R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F2R1_FB26     CAN_F2R1_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F2R1_FB27_Pos (27U)\r\n#define CAN_F2R1_FB27_Msk (0x1UL << CAN_F2R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F2R1_FB27     CAN_F2R1_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F2R1_FB28_Pos (28U)\r\n#define CAN_F2R1_FB28_Msk (0x1UL << CAN_F2R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F2R1_FB28     CAN_F2R1_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F2R1_FB29_Pos (29U)\r\n#define CAN_F2R1_FB29_Msk (0x1UL << CAN_F2R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F2R1_FB29     CAN_F2R1_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F2R1_FB30_Pos (30U)\r\n#define CAN_F2R1_FB30_Msk (0x1UL << CAN_F2R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F2R1_FB30     CAN_F2R1_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F2R1_FB31_Pos (31U)\r\n#define CAN_F2R1_FB31_Msk (0x1UL << CAN_F2R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F2R1_FB31     CAN_F2R1_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F3R1 register  *******************/\r\n#define CAN_F3R1_FB0_Pos  (0U)\r\n#define CAN_F3R1_FB0_Msk  (0x1UL << CAN_F3R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F3R1_FB0      CAN_F3R1_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F3R1_FB1_Pos  (1U)\r\n#define CAN_F3R1_FB1_Msk  (0x1UL << CAN_F3R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F3R1_FB1      CAN_F3R1_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F3R1_FB2_Pos  (2U)\r\n#define CAN_F3R1_FB2_Msk  (0x1UL << CAN_F3R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F3R1_FB2      CAN_F3R1_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F3R1_FB3_Pos  (3U)\r\n#define CAN_F3R1_FB3_Msk  (0x1UL << CAN_F3R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F3R1_FB3      CAN_F3R1_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F3R1_FB4_Pos  (4U)\r\n#define CAN_F3R1_FB4_Msk  (0x1UL << CAN_F3R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F3R1_FB4      CAN_F3R1_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F3R1_FB5_Pos  (5U)\r\n#define CAN_F3R1_FB5_Msk  (0x1UL << CAN_F3R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F3R1_FB5      CAN_F3R1_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F3R1_FB6_Pos  (6U)\r\n#define CAN_F3R1_FB6_Msk  (0x1UL << CAN_F3R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F3R1_FB6      CAN_F3R1_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F3R1_FB7_Pos  (7U)\r\n#define CAN_F3R1_FB7_Msk  (0x1UL << CAN_F3R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F3R1_FB7      CAN_F3R1_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F3R1_FB8_Pos  (8U)\r\n#define CAN_F3R1_FB8_Msk  (0x1UL << CAN_F3R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F3R1_FB8      CAN_F3R1_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F3R1_FB9_Pos  (9U)\r\n#define CAN_F3R1_FB9_Msk  (0x1UL << CAN_F3R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F3R1_FB9      CAN_F3R1_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F3R1_FB10_Pos (10U)\r\n#define CAN_F3R1_FB10_Msk (0x1UL << CAN_F3R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F3R1_FB10     CAN_F3R1_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F3R1_FB11_Pos (11U)\r\n#define CAN_F3R1_FB11_Msk (0x1UL << CAN_F3R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F3R1_FB11     CAN_F3R1_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F3R1_FB12_Pos (12U)\r\n#define CAN_F3R1_FB12_Msk (0x1UL << CAN_F3R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F3R1_FB12     CAN_F3R1_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F3R1_FB13_Pos (13U)\r\n#define CAN_F3R1_FB13_Msk (0x1UL << CAN_F3R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F3R1_FB13     CAN_F3R1_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F3R1_FB14_Pos (14U)\r\n#define CAN_F3R1_FB14_Msk (0x1UL << CAN_F3R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F3R1_FB14     CAN_F3R1_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F3R1_FB15_Pos (15U)\r\n#define CAN_F3R1_FB15_Msk (0x1UL << CAN_F3R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F3R1_FB15     CAN_F3R1_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F3R1_FB16_Pos (16U)\r\n#define CAN_F3R1_FB16_Msk (0x1UL << CAN_F3R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F3R1_FB16     CAN_F3R1_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F3R1_FB17_Pos (17U)\r\n#define CAN_F3R1_FB17_Msk (0x1UL << CAN_F3R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F3R1_FB17     CAN_F3R1_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F3R1_FB18_Pos (18U)\r\n#define CAN_F3R1_FB18_Msk (0x1UL << CAN_F3R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F3R1_FB18     CAN_F3R1_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F3R1_FB19_Pos (19U)\r\n#define CAN_F3R1_FB19_Msk (0x1UL << CAN_F3R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F3R1_FB19     CAN_F3R1_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F3R1_FB20_Pos (20U)\r\n#define CAN_F3R1_FB20_Msk (0x1UL << CAN_F3R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F3R1_FB20     CAN_F3R1_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F3R1_FB21_Pos (21U)\r\n#define CAN_F3R1_FB21_Msk (0x1UL << CAN_F3R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F3R1_FB21     CAN_F3R1_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F3R1_FB22_Pos (22U)\r\n#define CAN_F3R1_FB22_Msk (0x1UL << CAN_F3R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F3R1_FB22     CAN_F3R1_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F3R1_FB23_Pos (23U)\r\n#define CAN_F3R1_FB23_Msk (0x1UL << CAN_F3R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F3R1_FB23     CAN_F3R1_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F3R1_FB24_Pos (24U)\r\n#define CAN_F3R1_FB24_Msk (0x1UL << CAN_F3R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F3R1_FB24     CAN_F3R1_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F3R1_FB25_Pos (25U)\r\n#define CAN_F3R1_FB25_Msk (0x1UL << CAN_F3R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F3R1_FB25     CAN_F3R1_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F3R1_FB26_Pos (26U)\r\n#define CAN_F3R1_FB26_Msk (0x1UL << CAN_F3R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F3R1_FB26     CAN_F3R1_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F3R1_FB27_Pos (27U)\r\n#define CAN_F3R1_FB27_Msk (0x1UL << CAN_F3R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F3R1_FB27     CAN_F3R1_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F3R1_FB28_Pos (28U)\r\n#define CAN_F3R1_FB28_Msk (0x1UL << CAN_F3R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F3R1_FB28     CAN_F3R1_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F3R1_FB29_Pos (29U)\r\n#define CAN_F3R1_FB29_Msk (0x1UL << CAN_F3R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F3R1_FB29     CAN_F3R1_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F3R1_FB30_Pos (30U)\r\n#define CAN_F3R1_FB30_Msk (0x1UL << CAN_F3R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F3R1_FB30     CAN_F3R1_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F3R1_FB31_Pos (31U)\r\n#define CAN_F3R1_FB31_Msk (0x1UL << CAN_F3R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F3R1_FB31     CAN_F3R1_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F4R1 register  *******************/\r\n#define CAN_F4R1_FB0_Pos  (0U)\r\n#define CAN_F4R1_FB0_Msk  (0x1UL << CAN_F4R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F4R1_FB0      CAN_F4R1_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F4R1_FB1_Pos  (1U)\r\n#define CAN_F4R1_FB1_Msk  (0x1UL << CAN_F4R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F4R1_FB1      CAN_F4R1_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F4R1_FB2_Pos  (2U)\r\n#define CAN_F4R1_FB2_Msk  (0x1UL << CAN_F4R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F4R1_FB2      CAN_F4R1_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F4R1_FB3_Pos  (3U)\r\n#define CAN_F4R1_FB3_Msk  (0x1UL << CAN_F4R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F4R1_FB3      CAN_F4R1_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F4R1_FB4_Pos  (4U)\r\n#define CAN_F4R1_FB4_Msk  (0x1UL << CAN_F4R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F4R1_FB4      CAN_F4R1_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F4R1_FB5_Pos  (5U)\r\n#define CAN_F4R1_FB5_Msk  (0x1UL << CAN_F4R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F4R1_FB5      CAN_F4R1_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F4R1_FB6_Pos  (6U)\r\n#define CAN_F4R1_FB6_Msk  (0x1UL << CAN_F4R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F4R1_FB6      CAN_F4R1_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F4R1_FB7_Pos  (7U)\r\n#define CAN_F4R1_FB7_Msk  (0x1UL << CAN_F4R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F4R1_FB7      CAN_F4R1_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F4R1_FB8_Pos  (8U)\r\n#define CAN_F4R1_FB8_Msk  (0x1UL << CAN_F4R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F4R1_FB8      CAN_F4R1_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F4R1_FB9_Pos  (9U)\r\n#define CAN_F4R1_FB9_Msk  (0x1UL << CAN_F4R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F4R1_FB9      CAN_F4R1_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F4R1_FB10_Pos (10U)\r\n#define CAN_F4R1_FB10_Msk (0x1UL << CAN_F4R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F4R1_FB10     CAN_F4R1_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F4R1_FB11_Pos (11U)\r\n#define CAN_F4R1_FB11_Msk (0x1UL << CAN_F4R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F4R1_FB11     CAN_F4R1_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F4R1_FB12_Pos (12U)\r\n#define CAN_F4R1_FB12_Msk (0x1UL << CAN_F4R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F4R1_FB12     CAN_F4R1_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F4R1_FB13_Pos (13U)\r\n#define CAN_F4R1_FB13_Msk (0x1UL << CAN_F4R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F4R1_FB13     CAN_F4R1_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F4R1_FB14_Pos (14U)\r\n#define CAN_F4R1_FB14_Msk (0x1UL << CAN_F4R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F4R1_FB14     CAN_F4R1_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F4R1_FB15_Pos (15U)\r\n#define CAN_F4R1_FB15_Msk (0x1UL << CAN_F4R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F4R1_FB15     CAN_F4R1_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F4R1_FB16_Pos (16U)\r\n#define CAN_F4R1_FB16_Msk (0x1UL << CAN_F4R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F4R1_FB16     CAN_F4R1_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F4R1_FB17_Pos (17U)\r\n#define CAN_F4R1_FB17_Msk (0x1UL << CAN_F4R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F4R1_FB17     CAN_F4R1_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F4R1_FB18_Pos (18U)\r\n#define CAN_F4R1_FB18_Msk (0x1UL << CAN_F4R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F4R1_FB18     CAN_F4R1_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F4R1_FB19_Pos (19U)\r\n#define CAN_F4R1_FB19_Msk (0x1UL << CAN_F4R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F4R1_FB19     CAN_F4R1_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F4R1_FB20_Pos (20U)\r\n#define CAN_F4R1_FB20_Msk (0x1UL << CAN_F4R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F4R1_FB20     CAN_F4R1_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F4R1_FB21_Pos (21U)\r\n#define CAN_F4R1_FB21_Msk (0x1UL << CAN_F4R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F4R1_FB21     CAN_F4R1_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F4R1_FB22_Pos (22U)\r\n#define CAN_F4R1_FB22_Msk (0x1UL << CAN_F4R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F4R1_FB22     CAN_F4R1_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F4R1_FB23_Pos (23U)\r\n#define CAN_F4R1_FB23_Msk (0x1UL << CAN_F4R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F4R1_FB23     CAN_F4R1_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F4R1_FB24_Pos (24U)\r\n#define CAN_F4R1_FB24_Msk (0x1UL << CAN_F4R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F4R1_FB24     CAN_F4R1_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F4R1_FB25_Pos (25U)\r\n#define CAN_F4R1_FB25_Msk (0x1UL << CAN_F4R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F4R1_FB25     CAN_F4R1_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F4R1_FB26_Pos (26U)\r\n#define CAN_F4R1_FB26_Msk (0x1UL << CAN_F4R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F4R1_FB26     CAN_F4R1_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F4R1_FB27_Pos (27U)\r\n#define CAN_F4R1_FB27_Msk (0x1UL << CAN_F4R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F4R1_FB27     CAN_F4R1_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F4R1_FB28_Pos (28U)\r\n#define CAN_F4R1_FB28_Msk (0x1UL << CAN_F4R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F4R1_FB28     CAN_F4R1_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F4R1_FB29_Pos (29U)\r\n#define CAN_F4R1_FB29_Msk (0x1UL << CAN_F4R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F4R1_FB29     CAN_F4R1_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F4R1_FB30_Pos (30U)\r\n#define CAN_F4R1_FB30_Msk (0x1UL << CAN_F4R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F4R1_FB30     CAN_F4R1_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F4R1_FB31_Pos (31U)\r\n#define CAN_F4R1_FB31_Msk (0x1UL << CAN_F4R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F4R1_FB31     CAN_F4R1_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F5R1 register  *******************/\r\n#define CAN_F5R1_FB0_Pos  (0U)\r\n#define CAN_F5R1_FB0_Msk  (0x1UL << CAN_F5R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F5R1_FB0      CAN_F5R1_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F5R1_FB1_Pos  (1U)\r\n#define CAN_F5R1_FB1_Msk  (0x1UL << CAN_F5R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F5R1_FB1      CAN_F5R1_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F5R1_FB2_Pos  (2U)\r\n#define CAN_F5R1_FB2_Msk  (0x1UL << CAN_F5R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F5R1_FB2      CAN_F5R1_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F5R1_FB3_Pos  (3U)\r\n#define CAN_F5R1_FB3_Msk  (0x1UL << CAN_F5R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F5R1_FB3      CAN_F5R1_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F5R1_FB4_Pos  (4U)\r\n#define CAN_F5R1_FB4_Msk  (0x1UL << CAN_F5R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F5R1_FB4      CAN_F5R1_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F5R1_FB5_Pos  (5U)\r\n#define CAN_F5R1_FB5_Msk  (0x1UL << CAN_F5R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F5R1_FB5      CAN_F5R1_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F5R1_FB6_Pos  (6U)\r\n#define CAN_F5R1_FB6_Msk  (0x1UL << CAN_F5R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F5R1_FB6      CAN_F5R1_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F5R1_FB7_Pos  (7U)\r\n#define CAN_F5R1_FB7_Msk  (0x1UL << CAN_F5R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F5R1_FB7      CAN_F5R1_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F5R1_FB8_Pos  (8U)\r\n#define CAN_F5R1_FB8_Msk  (0x1UL << CAN_F5R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F5R1_FB8      CAN_F5R1_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F5R1_FB9_Pos  (9U)\r\n#define CAN_F5R1_FB9_Msk  (0x1UL << CAN_F5R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F5R1_FB9      CAN_F5R1_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F5R1_FB10_Pos (10U)\r\n#define CAN_F5R1_FB10_Msk (0x1UL << CAN_F5R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F5R1_FB10     CAN_F5R1_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F5R1_FB11_Pos (11U)\r\n#define CAN_F5R1_FB11_Msk (0x1UL << CAN_F5R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F5R1_FB11     CAN_F5R1_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F5R1_FB12_Pos (12U)\r\n#define CAN_F5R1_FB12_Msk (0x1UL << CAN_F5R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F5R1_FB12     CAN_F5R1_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F5R1_FB13_Pos (13U)\r\n#define CAN_F5R1_FB13_Msk (0x1UL << CAN_F5R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F5R1_FB13     CAN_F5R1_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F5R1_FB14_Pos (14U)\r\n#define CAN_F5R1_FB14_Msk (0x1UL << CAN_F5R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F5R1_FB14     CAN_F5R1_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F5R1_FB15_Pos (15U)\r\n#define CAN_F5R1_FB15_Msk (0x1UL << CAN_F5R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F5R1_FB15     CAN_F5R1_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F5R1_FB16_Pos (16U)\r\n#define CAN_F5R1_FB16_Msk (0x1UL << CAN_F5R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F5R1_FB16     CAN_F5R1_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F5R1_FB17_Pos (17U)\r\n#define CAN_F5R1_FB17_Msk (0x1UL << CAN_F5R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F5R1_FB17     CAN_F5R1_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F5R1_FB18_Pos (18U)\r\n#define CAN_F5R1_FB18_Msk (0x1UL << CAN_F5R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F5R1_FB18     CAN_F5R1_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F5R1_FB19_Pos (19U)\r\n#define CAN_F5R1_FB19_Msk (0x1UL << CAN_F5R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F5R1_FB19     CAN_F5R1_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F5R1_FB20_Pos (20U)\r\n#define CAN_F5R1_FB20_Msk (0x1UL << CAN_F5R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F5R1_FB20     CAN_F5R1_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F5R1_FB21_Pos (21U)\r\n#define CAN_F5R1_FB21_Msk (0x1UL << CAN_F5R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F5R1_FB21     CAN_F5R1_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F5R1_FB22_Pos (22U)\r\n#define CAN_F5R1_FB22_Msk (0x1UL << CAN_F5R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F5R1_FB22     CAN_F5R1_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F5R1_FB23_Pos (23U)\r\n#define CAN_F5R1_FB23_Msk (0x1UL << CAN_F5R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F5R1_FB23     CAN_F5R1_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F5R1_FB24_Pos (24U)\r\n#define CAN_F5R1_FB24_Msk (0x1UL << CAN_F5R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F5R1_FB24     CAN_F5R1_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F5R1_FB25_Pos (25U)\r\n#define CAN_F5R1_FB25_Msk (0x1UL << CAN_F5R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F5R1_FB25     CAN_F5R1_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F5R1_FB26_Pos (26U)\r\n#define CAN_F5R1_FB26_Msk (0x1UL << CAN_F5R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F5R1_FB26     CAN_F5R1_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F5R1_FB27_Pos (27U)\r\n#define CAN_F5R1_FB27_Msk (0x1UL << CAN_F5R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F5R1_FB27     CAN_F5R1_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F5R1_FB28_Pos (28U)\r\n#define CAN_F5R1_FB28_Msk (0x1UL << CAN_F5R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F5R1_FB28     CAN_F5R1_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F5R1_FB29_Pos (29U)\r\n#define CAN_F5R1_FB29_Msk (0x1UL << CAN_F5R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F5R1_FB29     CAN_F5R1_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F5R1_FB30_Pos (30U)\r\n#define CAN_F5R1_FB30_Msk (0x1UL << CAN_F5R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F5R1_FB30     CAN_F5R1_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F5R1_FB31_Pos (31U)\r\n#define CAN_F5R1_FB31_Msk (0x1UL << CAN_F5R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F5R1_FB31     CAN_F5R1_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F6R1 register  *******************/\r\n#define CAN_F6R1_FB0_Pos  (0U)\r\n#define CAN_F6R1_FB0_Msk  (0x1UL << CAN_F6R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F6R1_FB0      CAN_F6R1_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F6R1_FB1_Pos  (1U)\r\n#define CAN_F6R1_FB1_Msk  (0x1UL << CAN_F6R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F6R1_FB1      CAN_F6R1_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F6R1_FB2_Pos  (2U)\r\n#define CAN_F6R1_FB2_Msk  (0x1UL << CAN_F6R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F6R1_FB2      CAN_F6R1_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F6R1_FB3_Pos  (3U)\r\n#define CAN_F6R1_FB3_Msk  (0x1UL << CAN_F6R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F6R1_FB3      CAN_F6R1_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F6R1_FB4_Pos  (4U)\r\n#define CAN_F6R1_FB4_Msk  (0x1UL << CAN_F6R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F6R1_FB4      CAN_F6R1_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F6R1_FB5_Pos  (5U)\r\n#define CAN_F6R1_FB5_Msk  (0x1UL << CAN_F6R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F6R1_FB5      CAN_F6R1_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F6R1_FB6_Pos  (6U)\r\n#define CAN_F6R1_FB6_Msk  (0x1UL << CAN_F6R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F6R1_FB6      CAN_F6R1_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F6R1_FB7_Pos  (7U)\r\n#define CAN_F6R1_FB7_Msk  (0x1UL << CAN_F6R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F6R1_FB7      CAN_F6R1_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F6R1_FB8_Pos  (8U)\r\n#define CAN_F6R1_FB8_Msk  (0x1UL << CAN_F6R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F6R1_FB8      CAN_F6R1_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F6R1_FB9_Pos  (9U)\r\n#define CAN_F6R1_FB9_Msk  (0x1UL << CAN_F6R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F6R1_FB9      CAN_F6R1_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F6R1_FB10_Pos (10U)\r\n#define CAN_F6R1_FB10_Msk (0x1UL << CAN_F6R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F6R1_FB10     CAN_F6R1_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F6R1_FB11_Pos (11U)\r\n#define CAN_F6R1_FB11_Msk (0x1UL << CAN_F6R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F6R1_FB11     CAN_F6R1_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F6R1_FB12_Pos (12U)\r\n#define CAN_F6R1_FB12_Msk (0x1UL << CAN_F6R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F6R1_FB12     CAN_F6R1_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F6R1_FB13_Pos (13U)\r\n#define CAN_F6R1_FB13_Msk (0x1UL << CAN_F6R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F6R1_FB13     CAN_F6R1_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F6R1_FB14_Pos (14U)\r\n#define CAN_F6R1_FB14_Msk (0x1UL << CAN_F6R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F6R1_FB14     CAN_F6R1_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F6R1_FB15_Pos (15U)\r\n#define CAN_F6R1_FB15_Msk (0x1UL << CAN_F6R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F6R1_FB15     CAN_F6R1_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F6R1_FB16_Pos (16U)\r\n#define CAN_F6R1_FB16_Msk (0x1UL << CAN_F6R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F6R1_FB16     CAN_F6R1_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F6R1_FB17_Pos (17U)\r\n#define CAN_F6R1_FB17_Msk (0x1UL << CAN_F6R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F6R1_FB17     CAN_F6R1_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F6R1_FB18_Pos (18U)\r\n#define CAN_F6R1_FB18_Msk (0x1UL << CAN_F6R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F6R1_FB18     CAN_F6R1_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F6R1_FB19_Pos (19U)\r\n#define CAN_F6R1_FB19_Msk (0x1UL << CAN_F6R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F6R1_FB19     CAN_F6R1_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F6R1_FB20_Pos (20U)\r\n#define CAN_F6R1_FB20_Msk (0x1UL << CAN_F6R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F6R1_FB20     CAN_F6R1_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F6R1_FB21_Pos (21U)\r\n#define CAN_F6R1_FB21_Msk (0x1UL << CAN_F6R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F6R1_FB21     CAN_F6R1_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F6R1_FB22_Pos (22U)\r\n#define CAN_F6R1_FB22_Msk (0x1UL << CAN_F6R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F6R1_FB22     CAN_F6R1_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F6R1_FB23_Pos (23U)\r\n#define CAN_F6R1_FB23_Msk (0x1UL << CAN_F6R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F6R1_FB23     CAN_F6R1_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F6R1_FB24_Pos (24U)\r\n#define CAN_F6R1_FB24_Msk (0x1UL << CAN_F6R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F6R1_FB24     CAN_F6R1_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F6R1_FB25_Pos (25U)\r\n#define CAN_F6R1_FB25_Msk (0x1UL << CAN_F6R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F6R1_FB25     CAN_F6R1_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F6R1_FB26_Pos (26U)\r\n#define CAN_F6R1_FB26_Msk (0x1UL << CAN_F6R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F6R1_FB26     CAN_F6R1_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F6R1_FB27_Pos (27U)\r\n#define CAN_F6R1_FB27_Msk (0x1UL << CAN_F6R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F6R1_FB27     CAN_F6R1_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F6R1_FB28_Pos (28U)\r\n#define CAN_F6R1_FB28_Msk (0x1UL << CAN_F6R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F6R1_FB28     CAN_F6R1_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F6R1_FB29_Pos (29U)\r\n#define CAN_F6R1_FB29_Msk (0x1UL << CAN_F6R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F6R1_FB29     CAN_F6R1_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F6R1_FB30_Pos (30U)\r\n#define CAN_F6R1_FB30_Msk (0x1UL << CAN_F6R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F6R1_FB30     CAN_F6R1_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F6R1_FB31_Pos (31U)\r\n#define CAN_F6R1_FB31_Msk (0x1UL << CAN_F6R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F6R1_FB31     CAN_F6R1_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F7R1 register  *******************/\r\n#define CAN_F7R1_FB0_Pos  (0U)\r\n#define CAN_F7R1_FB0_Msk  (0x1UL << CAN_F7R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F7R1_FB0      CAN_F7R1_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F7R1_FB1_Pos  (1U)\r\n#define CAN_F7R1_FB1_Msk  (0x1UL << CAN_F7R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F7R1_FB1      CAN_F7R1_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F7R1_FB2_Pos  (2U)\r\n#define CAN_F7R1_FB2_Msk  (0x1UL << CAN_F7R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F7R1_FB2      CAN_F7R1_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F7R1_FB3_Pos  (3U)\r\n#define CAN_F7R1_FB3_Msk  (0x1UL << CAN_F7R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F7R1_FB3      CAN_F7R1_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F7R1_FB4_Pos  (4U)\r\n#define CAN_F7R1_FB4_Msk  (0x1UL << CAN_F7R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F7R1_FB4      CAN_F7R1_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F7R1_FB5_Pos  (5U)\r\n#define CAN_F7R1_FB5_Msk  (0x1UL << CAN_F7R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F7R1_FB5      CAN_F7R1_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F7R1_FB6_Pos  (6U)\r\n#define CAN_F7R1_FB6_Msk  (0x1UL << CAN_F7R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F7R1_FB6      CAN_F7R1_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F7R1_FB7_Pos  (7U)\r\n#define CAN_F7R1_FB7_Msk  (0x1UL << CAN_F7R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F7R1_FB7      CAN_F7R1_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F7R1_FB8_Pos  (8U)\r\n#define CAN_F7R1_FB8_Msk  (0x1UL << CAN_F7R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F7R1_FB8      CAN_F7R1_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F7R1_FB9_Pos  (9U)\r\n#define CAN_F7R1_FB9_Msk  (0x1UL << CAN_F7R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F7R1_FB9      CAN_F7R1_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F7R1_FB10_Pos (10U)\r\n#define CAN_F7R1_FB10_Msk (0x1UL << CAN_F7R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F7R1_FB10     CAN_F7R1_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F7R1_FB11_Pos (11U)\r\n#define CAN_F7R1_FB11_Msk (0x1UL << CAN_F7R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F7R1_FB11     CAN_F7R1_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F7R1_FB12_Pos (12U)\r\n#define CAN_F7R1_FB12_Msk (0x1UL << CAN_F7R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F7R1_FB12     CAN_F7R1_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F7R1_FB13_Pos (13U)\r\n#define CAN_F7R1_FB13_Msk (0x1UL << CAN_F7R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F7R1_FB13     CAN_F7R1_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F7R1_FB14_Pos (14U)\r\n#define CAN_F7R1_FB14_Msk (0x1UL << CAN_F7R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F7R1_FB14     CAN_F7R1_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F7R1_FB15_Pos (15U)\r\n#define CAN_F7R1_FB15_Msk (0x1UL << CAN_F7R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F7R1_FB15     CAN_F7R1_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F7R1_FB16_Pos (16U)\r\n#define CAN_F7R1_FB16_Msk (0x1UL << CAN_F7R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F7R1_FB16     CAN_F7R1_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F7R1_FB17_Pos (17U)\r\n#define CAN_F7R1_FB17_Msk (0x1UL << CAN_F7R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F7R1_FB17     CAN_F7R1_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F7R1_FB18_Pos (18U)\r\n#define CAN_F7R1_FB18_Msk (0x1UL << CAN_F7R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F7R1_FB18     CAN_F7R1_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F7R1_FB19_Pos (19U)\r\n#define CAN_F7R1_FB19_Msk (0x1UL << CAN_F7R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F7R1_FB19     CAN_F7R1_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F7R1_FB20_Pos (20U)\r\n#define CAN_F7R1_FB20_Msk (0x1UL << CAN_F7R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F7R1_FB20     CAN_F7R1_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F7R1_FB21_Pos (21U)\r\n#define CAN_F7R1_FB21_Msk (0x1UL << CAN_F7R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F7R1_FB21     CAN_F7R1_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F7R1_FB22_Pos (22U)\r\n#define CAN_F7R1_FB22_Msk (0x1UL << CAN_F7R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F7R1_FB22     CAN_F7R1_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F7R1_FB23_Pos (23U)\r\n#define CAN_F7R1_FB23_Msk (0x1UL << CAN_F7R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F7R1_FB23     CAN_F7R1_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F7R1_FB24_Pos (24U)\r\n#define CAN_F7R1_FB24_Msk (0x1UL << CAN_F7R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F7R1_FB24     CAN_F7R1_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F7R1_FB25_Pos (25U)\r\n#define CAN_F7R1_FB25_Msk (0x1UL << CAN_F7R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F7R1_FB25     CAN_F7R1_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F7R1_FB26_Pos (26U)\r\n#define CAN_F7R1_FB26_Msk (0x1UL << CAN_F7R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F7R1_FB26     CAN_F7R1_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F7R1_FB27_Pos (27U)\r\n#define CAN_F7R1_FB27_Msk (0x1UL << CAN_F7R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F7R1_FB27     CAN_F7R1_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F7R1_FB28_Pos (28U)\r\n#define CAN_F7R1_FB28_Msk (0x1UL << CAN_F7R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F7R1_FB28     CAN_F7R1_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F7R1_FB29_Pos (29U)\r\n#define CAN_F7R1_FB29_Msk (0x1UL << CAN_F7R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F7R1_FB29     CAN_F7R1_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F7R1_FB30_Pos (30U)\r\n#define CAN_F7R1_FB30_Msk (0x1UL << CAN_F7R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F7R1_FB30     CAN_F7R1_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F7R1_FB31_Pos (31U)\r\n#define CAN_F7R1_FB31_Msk (0x1UL << CAN_F7R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F7R1_FB31     CAN_F7R1_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F8R1 register  *******************/\r\n#define CAN_F8R1_FB0_Pos  (0U)\r\n#define CAN_F8R1_FB0_Msk  (0x1UL << CAN_F8R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F8R1_FB0      CAN_F8R1_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F8R1_FB1_Pos  (1U)\r\n#define CAN_F8R1_FB1_Msk  (0x1UL << CAN_F8R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F8R1_FB1      CAN_F8R1_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F8R1_FB2_Pos  (2U)\r\n#define CAN_F8R1_FB2_Msk  (0x1UL << CAN_F8R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F8R1_FB2      CAN_F8R1_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F8R1_FB3_Pos  (3U)\r\n#define CAN_F8R1_FB3_Msk  (0x1UL << CAN_F8R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F8R1_FB3      CAN_F8R1_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F8R1_FB4_Pos  (4U)\r\n#define CAN_F8R1_FB4_Msk  (0x1UL << CAN_F8R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F8R1_FB4      CAN_F8R1_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F8R1_FB5_Pos  (5U)\r\n#define CAN_F8R1_FB5_Msk  (0x1UL << CAN_F8R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F8R1_FB5      CAN_F8R1_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F8R1_FB6_Pos  (6U)\r\n#define CAN_F8R1_FB6_Msk  (0x1UL << CAN_F8R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F8R1_FB6      CAN_F8R1_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F8R1_FB7_Pos  (7U)\r\n#define CAN_F8R1_FB7_Msk  (0x1UL << CAN_F8R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F8R1_FB7      CAN_F8R1_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F8R1_FB8_Pos  (8U)\r\n#define CAN_F8R1_FB8_Msk  (0x1UL << CAN_F8R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F8R1_FB8      CAN_F8R1_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F8R1_FB9_Pos  (9U)\r\n#define CAN_F8R1_FB9_Msk  (0x1UL << CAN_F8R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F8R1_FB9      CAN_F8R1_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F8R1_FB10_Pos (10U)\r\n#define CAN_F8R1_FB10_Msk (0x1UL << CAN_F8R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F8R1_FB10     CAN_F8R1_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F8R1_FB11_Pos (11U)\r\n#define CAN_F8R1_FB11_Msk (0x1UL << CAN_F8R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F8R1_FB11     CAN_F8R1_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F8R1_FB12_Pos (12U)\r\n#define CAN_F8R1_FB12_Msk (0x1UL << CAN_F8R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F8R1_FB12     CAN_F8R1_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F8R1_FB13_Pos (13U)\r\n#define CAN_F8R1_FB13_Msk (0x1UL << CAN_F8R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F8R1_FB13     CAN_F8R1_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F8R1_FB14_Pos (14U)\r\n#define CAN_F8R1_FB14_Msk (0x1UL << CAN_F8R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F8R1_FB14     CAN_F8R1_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F8R1_FB15_Pos (15U)\r\n#define CAN_F8R1_FB15_Msk (0x1UL << CAN_F8R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F8R1_FB15     CAN_F8R1_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F8R1_FB16_Pos (16U)\r\n#define CAN_F8R1_FB16_Msk (0x1UL << CAN_F8R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F8R1_FB16     CAN_F8R1_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F8R1_FB17_Pos (17U)\r\n#define CAN_F8R1_FB17_Msk (0x1UL << CAN_F8R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F8R1_FB17     CAN_F8R1_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F8R1_FB18_Pos (18U)\r\n#define CAN_F8R1_FB18_Msk (0x1UL << CAN_F8R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F8R1_FB18     CAN_F8R1_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F8R1_FB19_Pos (19U)\r\n#define CAN_F8R1_FB19_Msk (0x1UL << CAN_F8R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F8R1_FB19     CAN_F8R1_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F8R1_FB20_Pos (20U)\r\n#define CAN_F8R1_FB20_Msk (0x1UL << CAN_F8R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F8R1_FB20     CAN_F8R1_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F8R1_FB21_Pos (21U)\r\n#define CAN_F8R1_FB21_Msk (0x1UL << CAN_F8R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F8R1_FB21     CAN_F8R1_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F8R1_FB22_Pos (22U)\r\n#define CAN_F8R1_FB22_Msk (0x1UL << CAN_F8R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F8R1_FB22     CAN_F8R1_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F8R1_FB23_Pos (23U)\r\n#define CAN_F8R1_FB23_Msk (0x1UL << CAN_F8R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F8R1_FB23     CAN_F8R1_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F8R1_FB24_Pos (24U)\r\n#define CAN_F8R1_FB24_Msk (0x1UL << CAN_F8R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F8R1_FB24     CAN_F8R1_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F8R1_FB25_Pos (25U)\r\n#define CAN_F8R1_FB25_Msk (0x1UL << CAN_F8R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F8R1_FB25     CAN_F8R1_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F8R1_FB26_Pos (26U)\r\n#define CAN_F8R1_FB26_Msk (0x1UL << CAN_F8R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F8R1_FB26     CAN_F8R1_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F8R1_FB27_Pos (27U)\r\n#define CAN_F8R1_FB27_Msk (0x1UL << CAN_F8R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F8R1_FB27     CAN_F8R1_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F8R1_FB28_Pos (28U)\r\n#define CAN_F8R1_FB28_Msk (0x1UL << CAN_F8R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F8R1_FB28     CAN_F8R1_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F8R1_FB29_Pos (29U)\r\n#define CAN_F8R1_FB29_Msk (0x1UL << CAN_F8R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F8R1_FB29     CAN_F8R1_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F8R1_FB30_Pos (30U)\r\n#define CAN_F8R1_FB30_Msk (0x1UL << CAN_F8R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F8R1_FB30     CAN_F8R1_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F8R1_FB31_Pos (31U)\r\n#define CAN_F8R1_FB31_Msk (0x1UL << CAN_F8R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F8R1_FB31     CAN_F8R1_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F9R1 register  *******************/\r\n#define CAN_F9R1_FB0_Pos  (0U)\r\n#define CAN_F9R1_FB0_Msk  (0x1UL << CAN_F9R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F9R1_FB0      CAN_F9R1_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F9R1_FB1_Pos  (1U)\r\n#define CAN_F9R1_FB1_Msk  (0x1UL << CAN_F9R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F9R1_FB1      CAN_F9R1_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F9R1_FB2_Pos  (2U)\r\n#define CAN_F9R1_FB2_Msk  (0x1UL << CAN_F9R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F9R1_FB2      CAN_F9R1_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F9R1_FB3_Pos  (3U)\r\n#define CAN_F9R1_FB3_Msk  (0x1UL << CAN_F9R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F9R1_FB3      CAN_F9R1_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F9R1_FB4_Pos  (4U)\r\n#define CAN_F9R1_FB4_Msk  (0x1UL << CAN_F9R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F9R1_FB4      CAN_F9R1_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F9R1_FB5_Pos  (5U)\r\n#define CAN_F9R1_FB5_Msk  (0x1UL << CAN_F9R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F9R1_FB5      CAN_F9R1_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F9R1_FB6_Pos  (6U)\r\n#define CAN_F9R1_FB6_Msk  (0x1UL << CAN_F9R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F9R1_FB6      CAN_F9R1_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F9R1_FB7_Pos  (7U)\r\n#define CAN_F9R1_FB7_Msk  (0x1UL << CAN_F9R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F9R1_FB7      CAN_F9R1_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F9R1_FB8_Pos  (8U)\r\n#define CAN_F9R1_FB8_Msk  (0x1UL << CAN_F9R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F9R1_FB8      CAN_F9R1_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F9R1_FB9_Pos  (9U)\r\n#define CAN_F9R1_FB9_Msk  (0x1UL << CAN_F9R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F9R1_FB9      CAN_F9R1_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F9R1_FB10_Pos (10U)\r\n#define CAN_F9R1_FB10_Msk (0x1UL << CAN_F9R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F9R1_FB10     CAN_F9R1_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F9R1_FB11_Pos (11U)\r\n#define CAN_F9R1_FB11_Msk (0x1UL << CAN_F9R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F9R1_FB11     CAN_F9R1_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F9R1_FB12_Pos (12U)\r\n#define CAN_F9R1_FB12_Msk (0x1UL << CAN_F9R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F9R1_FB12     CAN_F9R1_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F9R1_FB13_Pos (13U)\r\n#define CAN_F9R1_FB13_Msk (0x1UL << CAN_F9R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F9R1_FB13     CAN_F9R1_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F9R1_FB14_Pos (14U)\r\n#define CAN_F9R1_FB14_Msk (0x1UL << CAN_F9R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F9R1_FB14     CAN_F9R1_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F9R1_FB15_Pos (15U)\r\n#define CAN_F9R1_FB15_Msk (0x1UL << CAN_F9R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F9R1_FB15     CAN_F9R1_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F9R1_FB16_Pos (16U)\r\n#define CAN_F9R1_FB16_Msk (0x1UL << CAN_F9R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F9R1_FB16     CAN_F9R1_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F9R1_FB17_Pos (17U)\r\n#define CAN_F9R1_FB17_Msk (0x1UL << CAN_F9R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F9R1_FB17     CAN_F9R1_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F9R1_FB18_Pos (18U)\r\n#define CAN_F9R1_FB18_Msk (0x1UL << CAN_F9R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F9R1_FB18     CAN_F9R1_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F9R1_FB19_Pos (19U)\r\n#define CAN_F9R1_FB19_Msk (0x1UL << CAN_F9R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F9R1_FB19     CAN_F9R1_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F9R1_FB20_Pos (20U)\r\n#define CAN_F9R1_FB20_Msk (0x1UL << CAN_F9R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F9R1_FB20     CAN_F9R1_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F9R1_FB21_Pos (21U)\r\n#define CAN_F9R1_FB21_Msk (0x1UL << CAN_F9R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F9R1_FB21     CAN_F9R1_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F9R1_FB22_Pos (22U)\r\n#define CAN_F9R1_FB22_Msk (0x1UL << CAN_F9R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F9R1_FB22     CAN_F9R1_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F9R1_FB23_Pos (23U)\r\n#define CAN_F9R1_FB23_Msk (0x1UL << CAN_F9R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F9R1_FB23     CAN_F9R1_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F9R1_FB24_Pos (24U)\r\n#define CAN_F9R1_FB24_Msk (0x1UL << CAN_F9R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F9R1_FB24     CAN_F9R1_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F9R1_FB25_Pos (25U)\r\n#define CAN_F9R1_FB25_Msk (0x1UL << CAN_F9R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F9R1_FB25     CAN_F9R1_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F9R1_FB26_Pos (26U)\r\n#define CAN_F9R1_FB26_Msk (0x1UL << CAN_F9R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F9R1_FB26     CAN_F9R1_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F9R1_FB27_Pos (27U)\r\n#define CAN_F9R1_FB27_Msk (0x1UL << CAN_F9R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F9R1_FB27     CAN_F9R1_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F9R1_FB28_Pos (28U)\r\n#define CAN_F9R1_FB28_Msk (0x1UL << CAN_F9R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F9R1_FB28     CAN_F9R1_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F9R1_FB29_Pos (29U)\r\n#define CAN_F9R1_FB29_Msk (0x1UL << CAN_F9R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F9R1_FB29     CAN_F9R1_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F9R1_FB30_Pos (30U)\r\n#define CAN_F9R1_FB30_Msk (0x1UL << CAN_F9R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F9R1_FB30     CAN_F9R1_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F9R1_FB31_Pos (31U)\r\n#define CAN_F9R1_FB31_Msk (0x1UL << CAN_F9R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F9R1_FB31     CAN_F9R1_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F10R1 register  ******************/\r\n#define CAN_F10R1_FB0_Pos  (0U)\r\n#define CAN_F10R1_FB0_Msk  (0x1UL << CAN_F10R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F10R1_FB0      CAN_F10R1_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F10R1_FB1_Pos  (1U)\r\n#define CAN_F10R1_FB1_Msk  (0x1UL << CAN_F10R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F10R1_FB1      CAN_F10R1_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F10R1_FB2_Pos  (2U)\r\n#define CAN_F10R1_FB2_Msk  (0x1UL << CAN_F10R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F10R1_FB2      CAN_F10R1_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F10R1_FB3_Pos  (3U)\r\n#define CAN_F10R1_FB3_Msk  (0x1UL << CAN_F10R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F10R1_FB3      CAN_F10R1_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F10R1_FB4_Pos  (4U)\r\n#define CAN_F10R1_FB4_Msk  (0x1UL << CAN_F10R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F10R1_FB4      CAN_F10R1_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F10R1_FB5_Pos  (5U)\r\n#define CAN_F10R1_FB5_Msk  (0x1UL << CAN_F10R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F10R1_FB5      CAN_F10R1_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F10R1_FB6_Pos  (6U)\r\n#define CAN_F10R1_FB6_Msk  (0x1UL << CAN_F10R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F10R1_FB6      CAN_F10R1_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F10R1_FB7_Pos  (7U)\r\n#define CAN_F10R1_FB7_Msk  (0x1UL << CAN_F10R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F10R1_FB7      CAN_F10R1_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F10R1_FB8_Pos  (8U)\r\n#define CAN_F10R1_FB8_Msk  (0x1UL << CAN_F10R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F10R1_FB8      CAN_F10R1_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F10R1_FB9_Pos  (9U)\r\n#define CAN_F10R1_FB9_Msk  (0x1UL << CAN_F10R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F10R1_FB9      CAN_F10R1_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F10R1_FB10_Pos (10U)\r\n#define CAN_F10R1_FB10_Msk (0x1UL << CAN_F10R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F10R1_FB10     CAN_F10R1_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F10R1_FB11_Pos (11U)\r\n#define CAN_F10R1_FB11_Msk (0x1UL << CAN_F10R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F10R1_FB11     CAN_F10R1_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F10R1_FB12_Pos (12U)\r\n#define CAN_F10R1_FB12_Msk (0x1UL << CAN_F10R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F10R1_FB12     CAN_F10R1_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F10R1_FB13_Pos (13U)\r\n#define CAN_F10R1_FB13_Msk (0x1UL << CAN_F10R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F10R1_FB13     CAN_F10R1_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F10R1_FB14_Pos (14U)\r\n#define CAN_F10R1_FB14_Msk (0x1UL << CAN_F10R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F10R1_FB14     CAN_F10R1_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F10R1_FB15_Pos (15U)\r\n#define CAN_F10R1_FB15_Msk (0x1UL << CAN_F10R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F10R1_FB15     CAN_F10R1_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F10R1_FB16_Pos (16U)\r\n#define CAN_F10R1_FB16_Msk (0x1UL << CAN_F10R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F10R1_FB16     CAN_F10R1_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F10R1_FB17_Pos (17U)\r\n#define CAN_F10R1_FB17_Msk (0x1UL << CAN_F10R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F10R1_FB17     CAN_F10R1_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F10R1_FB18_Pos (18U)\r\n#define CAN_F10R1_FB18_Msk (0x1UL << CAN_F10R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F10R1_FB18     CAN_F10R1_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F10R1_FB19_Pos (19U)\r\n#define CAN_F10R1_FB19_Msk (0x1UL << CAN_F10R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F10R1_FB19     CAN_F10R1_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F10R1_FB20_Pos (20U)\r\n#define CAN_F10R1_FB20_Msk (0x1UL << CAN_F10R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F10R1_FB20     CAN_F10R1_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F10R1_FB21_Pos (21U)\r\n#define CAN_F10R1_FB21_Msk (0x1UL << CAN_F10R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F10R1_FB21     CAN_F10R1_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F10R1_FB22_Pos (22U)\r\n#define CAN_F10R1_FB22_Msk (0x1UL << CAN_F10R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F10R1_FB22     CAN_F10R1_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F10R1_FB23_Pos (23U)\r\n#define CAN_F10R1_FB23_Msk (0x1UL << CAN_F10R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F10R1_FB23     CAN_F10R1_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F10R1_FB24_Pos (24U)\r\n#define CAN_F10R1_FB24_Msk (0x1UL << CAN_F10R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F10R1_FB24     CAN_F10R1_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F10R1_FB25_Pos (25U)\r\n#define CAN_F10R1_FB25_Msk (0x1UL << CAN_F10R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F10R1_FB25     CAN_F10R1_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F10R1_FB26_Pos (26U)\r\n#define CAN_F10R1_FB26_Msk (0x1UL << CAN_F10R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F10R1_FB26     CAN_F10R1_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F10R1_FB27_Pos (27U)\r\n#define CAN_F10R1_FB27_Msk (0x1UL << CAN_F10R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F10R1_FB27     CAN_F10R1_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F10R1_FB28_Pos (28U)\r\n#define CAN_F10R1_FB28_Msk (0x1UL << CAN_F10R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F10R1_FB28     CAN_F10R1_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F10R1_FB29_Pos (29U)\r\n#define CAN_F10R1_FB29_Msk (0x1UL << CAN_F10R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F10R1_FB29     CAN_F10R1_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F10R1_FB30_Pos (30U)\r\n#define CAN_F10R1_FB30_Msk (0x1UL << CAN_F10R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F10R1_FB30     CAN_F10R1_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F10R1_FB31_Pos (31U)\r\n#define CAN_F10R1_FB31_Msk (0x1UL << CAN_F10R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F10R1_FB31     CAN_F10R1_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F11R1 register  ******************/\r\n#define CAN_F11R1_FB0_Pos  (0U)\r\n#define CAN_F11R1_FB0_Msk  (0x1UL << CAN_F11R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F11R1_FB0      CAN_F11R1_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F11R1_FB1_Pos  (1U)\r\n#define CAN_F11R1_FB1_Msk  (0x1UL << CAN_F11R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F11R1_FB1      CAN_F11R1_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F11R1_FB2_Pos  (2U)\r\n#define CAN_F11R1_FB2_Msk  (0x1UL << CAN_F11R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F11R1_FB2      CAN_F11R1_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F11R1_FB3_Pos  (3U)\r\n#define CAN_F11R1_FB3_Msk  (0x1UL << CAN_F11R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F11R1_FB3      CAN_F11R1_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F11R1_FB4_Pos  (4U)\r\n#define CAN_F11R1_FB4_Msk  (0x1UL << CAN_F11R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F11R1_FB4      CAN_F11R1_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F11R1_FB5_Pos  (5U)\r\n#define CAN_F11R1_FB5_Msk  (0x1UL << CAN_F11R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F11R1_FB5      CAN_F11R1_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F11R1_FB6_Pos  (6U)\r\n#define CAN_F11R1_FB6_Msk  (0x1UL << CAN_F11R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F11R1_FB6      CAN_F11R1_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F11R1_FB7_Pos  (7U)\r\n#define CAN_F11R1_FB7_Msk  (0x1UL << CAN_F11R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F11R1_FB7      CAN_F11R1_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F11R1_FB8_Pos  (8U)\r\n#define CAN_F11R1_FB8_Msk  (0x1UL << CAN_F11R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F11R1_FB8      CAN_F11R1_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F11R1_FB9_Pos  (9U)\r\n#define CAN_F11R1_FB9_Msk  (0x1UL << CAN_F11R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F11R1_FB9      CAN_F11R1_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F11R1_FB10_Pos (10U)\r\n#define CAN_F11R1_FB10_Msk (0x1UL << CAN_F11R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F11R1_FB10     CAN_F11R1_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F11R1_FB11_Pos (11U)\r\n#define CAN_F11R1_FB11_Msk (0x1UL << CAN_F11R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F11R1_FB11     CAN_F11R1_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F11R1_FB12_Pos (12U)\r\n#define CAN_F11R1_FB12_Msk (0x1UL << CAN_F11R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F11R1_FB12     CAN_F11R1_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F11R1_FB13_Pos (13U)\r\n#define CAN_F11R1_FB13_Msk (0x1UL << CAN_F11R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F11R1_FB13     CAN_F11R1_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F11R1_FB14_Pos (14U)\r\n#define CAN_F11R1_FB14_Msk (0x1UL << CAN_F11R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F11R1_FB14     CAN_F11R1_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F11R1_FB15_Pos (15U)\r\n#define CAN_F11R1_FB15_Msk (0x1UL << CAN_F11R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F11R1_FB15     CAN_F11R1_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F11R1_FB16_Pos (16U)\r\n#define CAN_F11R1_FB16_Msk (0x1UL << CAN_F11R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F11R1_FB16     CAN_F11R1_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F11R1_FB17_Pos (17U)\r\n#define CAN_F11R1_FB17_Msk (0x1UL << CAN_F11R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F11R1_FB17     CAN_F11R1_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F11R1_FB18_Pos (18U)\r\n#define CAN_F11R1_FB18_Msk (0x1UL << CAN_F11R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F11R1_FB18     CAN_F11R1_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F11R1_FB19_Pos (19U)\r\n#define CAN_F11R1_FB19_Msk (0x1UL << CAN_F11R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F11R1_FB19     CAN_F11R1_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F11R1_FB20_Pos (20U)\r\n#define CAN_F11R1_FB20_Msk (0x1UL << CAN_F11R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F11R1_FB20     CAN_F11R1_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F11R1_FB21_Pos (21U)\r\n#define CAN_F11R1_FB21_Msk (0x1UL << CAN_F11R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F11R1_FB21     CAN_F11R1_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F11R1_FB22_Pos (22U)\r\n#define CAN_F11R1_FB22_Msk (0x1UL << CAN_F11R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F11R1_FB22     CAN_F11R1_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F11R1_FB23_Pos (23U)\r\n#define CAN_F11R1_FB23_Msk (0x1UL << CAN_F11R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F11R1_FB23     CAN_F11R1_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F11R1_FB24_Pos (24U)\r\n#define CAN_F11R1_FB24_Msk (0x1UL << CAN_F11R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F11R1_FB24     CAN_F11R1_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F11R1_FB25_Pos (25U)\r\n#define CAN_F11R1_FB25_Msk (0x1UL << CAN_F11R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F11R1_FB25     CAN_F11R1_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F11R1_FB26_Pos (26U)\r\n#define CAN_F11R1_FB26_Msk (0x1UL << CAN_F11R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F11R1_FB26     CAN_F11R1_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F11R1_FB27_Pos (27U)\r\n#define CAN_F11R1_FB27_Msk (0x1UL << CAN_F11R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F11R1_FB27     CAN_F11R1_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F11R1_FB28_Pos (28U)\r\n#define CAN_F11R1_FB28_Msk (0x1UL << CAN_F11R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F11R1_FB28     CAN_F11R1_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F11R1_FB29_Pos (29U)\r\n#define CAN_F11R1_FB29_Msk (0x1UL << CAN_F11R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F11R1_FB29     CAN_F11R1_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F11R1_FB30_Pos (30U)\r\n#define CAN_F11R1_FB30_Msk (0x1UL << CAN_F11R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F11R1_FB30     CAN_F11R1_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F11R1_FB31_Pos (31U)\r\n#define CAN_F11R1_FB31_Msk (0x1UL << CAN_F11R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F11R1_FB31     CAN_F11R1_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F12R1 register  ******************/\r\n#define CAN_F12R1_FB0_Pos  (0U)\r\n#define CAN_F12R1_FB0_Msk  (0x1UL << CAN_F12R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F12R1_FB0      CAN_F12R1_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F12R1_FB1_Pos  (1U)\r\n#define CAN_F12R1_FB1_Msk  (0x1UL << CAN_F12R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F12R1_FB1      CAN_F12R1_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F12R1_FB2_Pos  (2U)\r\n#define CAN_F12R1_FB2_Msk  (0x1UL << CAN_F12R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F12R1_FB2      CAN_F12R1_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F12R1_FB3_Pos  (3U)\r\n#define CAN_F12R1_FB3_Msk  (0x1UL << CAN_F12R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F12R1_FB3      CAN_F12R1_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F12R1_FB4_Pos  (4U)\r\n#define CAN_F12R1_FB4_Msk  (0x1UL << CAN_F12R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F12R1_FB4      CAN_F12R1_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F12R1_FB5_Pos  (5U)\r\n#define CAN_F12R1_FB5_Msk  (0x1UL << CAN_F12R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F12R1_FB5      CAN_F12R1_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F12R1_FB6_Pos  (6U)\r\n#define CAN_F12R1_FB6_Msk  (0x1UL << CAN_F12R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F12R1_FB6      CAN_F12R1_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F12R1_FB7_Pos  (7U)\r\n#define CAN_F12R1_FB7_Msk  (0x1UL << CAN_F12R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F12R1_FB7      CAN_F12R1_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F12R1_FB8_Pos  (8U)\r\n#define CAN_F12R1_FB8_Msk  (0x1UL << CAN_F12R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F12R1_FB8      CAN_F12R1_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F12R1_FB9_Pos  (9U)\r\n#define CAN_F12R1_FB9_Msk  (0x1UL << CAN_F12R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F12R1_FB9      CAN_F12R1_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F12R1_FB10_Pos (10U)\r\n#define CAN_F12R1_FB10_Msk (0x1UL << CAN_F12R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F12R1_FB10     CAN_F12R1_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F12R1_FB11_Pos (11U)\r\n#define CAN_F12R1_FB11_Msk (0x1UL << CAN_F12R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F12R1_FB11     CAN_F12R1_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F12R1_FB12_Pos (12U)\r\n#define CAN_F12R1_FB12_Msk (0x1UL << CAN_F12R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F12R1_FB12     CAN_F12R1_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F12R1_FB13_Pos (13U)\r\n#define CAN_F12R1_FB13_Msk (0x1UL << CAN_F12R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F12R1_FB13     CAN_F12R1_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F12R1_FB14_Pos (14U)\r\n#define CAN_F12R1_FB14_Msk (0x1UL << CAN_F12R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F12R1_FB14     CAN_F12R1_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F12R1_FB15_Pos (15U)\r\n#define CAN_F12R1_FB15_Msk (0x1UL << CAN_F12R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F12R1_FB15     CAN_F12R1_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F12R1_FB16_Pos (16U)\r\n#define CAN_F12R1_FB16_Msk (0x1UL << CAN_F12R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F12R1_FB16     CAN_F12R1_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F12R1_FB17_Pos (17U)\r\n#define CAN_F12R1_FB17_Msk (0x1UL << CAN_F12R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F12R1_FB17     CAN_F12R1_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F12R1_FB18_Pos (18U)\r\n#define CAN_F12R1_FB18_Msk (0x1UL << CAN_F12R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F12R1_FB18     CAN_F12R1_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F12R1_FB19_Pos (19U)\r\n#define CAN_F12R1_FB19_Msk (0x1UL << CAN_F12R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F12R1_FB19     CAN_F12R1_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F12R1_FB20_Pos (20U)\r\n#define CAN_F12R1_FB20_Msk (0x1UL << CAN_F12R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F12R1_FB20     CAN_F12R1_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F12R1_FB21_Pos (21U)\r\n#define CAN_F12R1_FB21_Msk (0x1UL << CAN_F12R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F12R1_FB21     CAN_F12R1_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F12R1_FB22_Pos (22U)\r\n#define CAN_F12R1_FB22_Msk (0x1UL << CAN_F12R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F12R1_FB22     CAN_F12R1_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F12R1_FB23_Pos (23U)\r\n#define CAN_F12R1_FB23_Msk (0x1UL << CAN_F12R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F12R1_FB23     CAN_F12R1_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F12R1_FB24_Pos (24U)\r\n#define CAN_F12R1_FB24_Msk (0x1UL << CAN_F12R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F12R1_FB24     CAN_F12R1_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F12R1_FB25_Pos (25U)\r\n#define CAN_F12R1_FB25_Msk (0x1UL << CAN_F12R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F12R1_FB25     CAN_F12R1_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F12R1_FB26_Pos (26U)\r\n#define CAN_F12R1_FB26_Msk (0x1UL << CAN_F12R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F12R1_FB26     CAN_F12R1_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F12R1_FB27_Pos (27U)\r\n#define CAN_F12R1_FB27_Msk (0x1UL << CAN_F12R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F12R1_FB27     CAN_F12R1_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F12R1_FB28_Pos (28U)\r\n#define CAN_F12R1_FB28_Msk (0x1UL << CAN_F12R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F12R1_FB28     CAN_F12R1_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F12R1_FB29_Pos (29U)\r\n#define CAN_F12R1_FB29_Msk (0x1UL << CAN_F12R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F12R1_FB29     CAN_F12R1_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F12R1_FB30_Pos (30U)\r\n#define CAN_F12R1_FB30_Msk (0x1UL << CAN_F12R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F12R1_FB30     CAN_F12R1_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F12R1_FB31_Pos (31U)\r\n#define CAN_F12R1_FB31_Msk (0x1UL << CAN_F12R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F12R1_FB31     CAN_F12R1_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F13R1 register  ******************/\r\n#define CAN_F13R1_FB0_Pos  (0U)\r\n#define CAN_F13R1_FB0_Msk  (0x1UL << CAN_F13R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F13R1_FB0      CAN_F13R1_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F13R1_FB1_Pos  (1U)\r\n#define CAN_F13R1_FB1_Msk  (0x1UL << CAN_F13R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F13R1_FB1      CAN_F13R1_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F13R1_FB2_Pos  (2U)\r\n#define CAN_F13R1_FB2_Msk  (0x1UL << CAN_F13R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F13R1_FB2      CAN_F13R1_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F13R1_FB3_Pos  (3U)\r\n#define CAN_F13R1_FB3_Msk  (0x1UL << CAN_F13R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F13R1_FB3      CAN_F13R1_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F13R1_FB4_Pos  (4U)\r\n#define CAN_F13R1_FB4_Msk  (0x1UL << CAN_F13R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F13R1_FB4      CAN_F13R1_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F13R1_FB5_Pos  (5U)\r\n#define CAN_F13R1_FB5_Msk  (0x1UL << CAN_F13R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F13R1_FB5      CAN_F13R1_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F13R1_FB6_Pos  (6U)\r\n#define CAN_F13R1_FB6_Msk  (0x1UL << CAN_F13R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F13R1_FB6      CAN_F13R1_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F13R1_FB7_Pos  (7U)\r\n#define CAN_F13R1_FB7_Msk  (0x1UL << CAN_F13R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F13R1_FB7      CAN_F13R1_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F13R1_FB8_Pos  (8U)\r\n#define CAN_F13R1_FB8_Msk  (0x1UL << CAN_F13R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F13R1_FB8      CAN_F13R1_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F13R1_FB9_Pos  (9U)\r\n#define CAN_F13R1_FB9_Msk  (0x1UL << CAN_F13R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F13R1_FB9      CAN_F13R1_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F13R1_FB10_Pos (10U)\r\n#define CAN_F13R1_FB10_Msk (0x1UL << CAN_F13R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F13R1_FB10     CAN_F13R1_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F13R1_FB11_Pos (11U)\r\n#define CAN_F13R1_FB11_Msk (0x1UL << CAN_F13R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F13R1_FB11     CAN_F13R1_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F13R1_FB12_Pos (12U)\r\n#define CAN_F13R1_FB12_Msk (0x1UL << CAN_F13R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F13R1_FB12     CAN_F13R1_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F13R1_FB13_Pos (13U)\r\n#define CAN_F13R1_FB13_Msk (0x1UL << CAN_F13R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F13R1_FB13     CAN_F13R1_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F13R1_FB14_Pos (14U)\r\n#define CAN_F13R1_FB14_Msk (0x1UL << CAN_F13R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F13R1_FB14     CAN_F13R1_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F13R1_FB15_Pos (15U)\r\n#define CAN_F13R1_FB15_Msk (0x1UL << CAN_F13R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F13R1_FB15     CAN_F13R1_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F13R1_FB16_Pos (16U)\r\n#define CAN_F13R1_FB16_Msk (0x1UL << CAN_F13R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F13R1_FB16     CAN_F13R1_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F13R1_FB17_Pos (17U)\r\n#define CAN_F13R1_FB17_Msk (0x1UL << CAN_F13R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F13R1_FB17     CAN_F13R1_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F13R1_FB18_Pos (18U)\r\n#define CAN_F13R1_FB18_Msk (0x1UL << CAN_F13R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F13R1_FB18     CAN_F13R1_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F13R1_FB19_Pos (19U)\r\n#define CAN_F13R1_FB19_Msk (0x1UL << CAN_F13R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F13R1_FB19     CAN_F13R1_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F13R1_FB20_Pos (20U)\r\n#define CAN_F13R1_FB20_Msk (0x1UL << CAN_F13R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F13R1_FB20     CAN_F13R1_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F13R1_FB21_Pos (21U)\r\n#define CAN_F13R1_FB21_Msk (0x1UL << CAN_F13R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F13R1_FB21     CAN_F13R1_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F13R1_FB22_Pos (22U)\r\n#define CAN_F13R1_FB22_Msk (0x1UL << CAN_F13R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F13R1_FB22     CAN_F13R1_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F13R1_FB23_Pos (23U)\r\n#define CAN_F13R1_FB23_Msk (0x1UL << CAN_F13R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F13R1_FB23     CAN_F13R1_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F13R1_FB24_Pos (24U)\r\n#define CAN_F13R1_FB24_Msk (0x1UL << CAN_F13R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F13R1_FB24     CAN_F13R1_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F13R1_FB25_Pos (25U)\r\n#define CAN_F13R1_FB25_Msk (0x1UL << CAN_F13R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F13R1_FB25     CAN_F13R1_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F13R1_FB26_Pos (26U)\r\n#define CAN_F13R1_FB26_Msk (0x1UL << CAN_F13R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F13R1_FB26     CAN_F13R1_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F13R1_FB27_Pos (27U)\r\n#define CAN_F13R1_FB27_Msk (0x1UL << CAN_F13R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F13R1_FB27     CAN_F13R1_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F13R1_FB28_Pos (28U)\r\n#define CAN_F13R1_FB28_Msk (0x1UL << CAN_F13R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F13R1_FB28     CAN_F13R1_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F13R1_FB29_Pos (29U)\r\n#define CAN_F13R1_FB29_Msk (0x1UL << CAN_F13R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F13R1_FB29     CAN_F13R1_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F13R1_FB30_Pos (30U)\r\n#define CAN_F13R1_FB30_Msk (0x1UL << CAN_F13R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F13R1_FB30     CAN_F13R1_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F13R1_FB31_Pos (31U)\r\n#define CAN_F13R1_FB31_Msk (0x1UL << CAN_F13R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F13R1_FB31     CAN_F13R1_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F0R2 register  *******************/\r\n#define CAN_F0R2_FB0_Pos  (0U)\r\n#define CAN_F0R2_FB0_Msk  (0x1UL << CAN_F0R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F0R2_FB0      CAN_F0R2_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F0R2_FB1_Pos  (1U)\r\n#define CAN_F0R2_FB1_Msk  (0x1UL << CAN_F0R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F0R2_FB1      CAN_F0R2_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F0R2_FB2_Pos  (2U)\r\n#define CAN_F0R2_FB2_Msk  (0x1UL << CAN_F0R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F0R2_FB2      CAN_F0R2_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F0R2_FB3_Pos  (3U)\r\n#define CAN_F0R2_FB3_Msk  (0x1UL << CAN_F0R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F0R2_FB3      CAN_F0R2_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F0R2_FB4_Pos  (4U)\r\n#define CAN_F0R2_FB4_Msk  (0x1UL << CAN_F0R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F0R2_FB4      CAN_F0R2_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F0R2_FB5_Pos  (5U)\r\n#define CAN_F0R2_FB5_Msk  (0x1UL << CAN_F0R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F0R2_FB5      CAN_F0R2_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F0R2_FB6_Pos  (6U)\r\n#define CAN_F0R2_FB6_Msk  (0x1UL << CAN_F0R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F0R2_FB6      CAN_F0R2_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F0R2_FB7_Pos  (7U)\r\n#define CAN_F0R2_FB7_Msk  (0x1UL << CAN_F0R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F0R2_FB7      CAN_F0R2_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F0R2_FB8_Pos  (8U)\r\n#define CAN_F0R2_FB8_Msk  (0x1UL << CAN_F0R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F0R2_FB8      CAN_F0R2_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F0R2_FB9_Pos  (9U)\r\n#define CAN_F0R2_FB9_Msk  (0x1UL << CAN_F0R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F0R2_FB9      CAN_F0R2_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F0R2_FB10_Pos (10U)\r\n#define CAN_F0R2_FB10_Msk (0x1UL << CAN_F0R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F0R2_FB10     CAN_F0R2_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F0R2_FB11_Pos (11U)\r\n#define CAN_F0R2_FB11_Msk (0x1UL << CAN_F0R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F0R2_FB11     CAN_F0R2_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F0R2_FB12_Pos (12U)\r\n#define CAN_F0R2_FB12_Msk (0x1UL << CAN_F0R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F0R2_FB12     CAN_F0R2_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F0R2_FB13_Pos (13U)\r\n#define CAN_F0R2_FB13_Msk (0x1UL << CAN_F0R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F0R2_FB13     CAN_F0R2_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F0R2_FB14_Pos (14U)\r\n#define CAN_F0R2_FB14_Msk (0x1UL << CAN_F0R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F0R2_FB14     CAN_F0R2_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F0R2_FB15_Pos (15U)\r\n#define CAN_F0R2_FB15_Msk (0x1UL << CAN_F0R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F0R2_FB15     CAN_F0R2_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F0R2_FB16_Pos (16U)\r\n#define CAN_F0R2_FB16_Msk (0x1UL << CAN_F0R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F0R2_FB16     CAN_F0R2_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F0R2_FB17_Pos (17U)\r\n#define CAN_F0R2_FB17_Msk (0x1UL << CAN_F0R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F0R2_FB17     CAN_F0R2_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F0R2_FB18_Pos (18U)\r\n#define CAN_F0R2_FB18_Msk (0x1UL << CAN_F0R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F0R2_FB18     CAN_F0R2_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F0R2_FB19_Pos (19U)\r\n#define CAN_F0R2_FB19_Msk (0x1UL << CAN_F0R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F0R2_FB19     CAN_F0R2_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F0R2_FB20_Pos (20U)\r\n#define CAN_F0R2_FB20_Msk (0x1UL << CAN_F0R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F0R2_FB20     CAN_F0R2_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F0R2_FB21_Pos (21U)\r\n#define CAN_F0R2_FB21_Msk (0x1UL << CAN_F0R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F0R2_FB21     CAN_F0R2_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F0R2_FB22_Pos (22U)\r\n#define CAN_F0R2_FB22_Msk (0x1UL << CAN_F0R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F0R2_FB22     CAN_F0R2_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F0R2_FB23_Pos (23U)\r\n#define CAN_F0R2_FB23_Msk (0x1UL << CAN_F0R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F0R2_FB23     CAN_F0R2_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F0R2_FB24_Pos (24U)\r\n#define CAN_F0R2_FB24_Msk (0x1UL << CAN_F0R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F0R2_FB24     CAN_F0R2_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F0R2_FB25_Pos (25U)\r\n#define CAN_F0R2_FB25_Msk (0x1UL << CAN_F0R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F0R2_FB25     CAN_F0R2_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F0R2_FB26_Pos (26U)\r\n#define CAN_F0R2_FB26_Msk (0x1UL << CAN_F0R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F0R2_FB26     CAN_F0R2_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F0R2_FB27_Pos (27U)\r\n#define CAN_F0R2_FB27_Msk (0x1UL << CAN_F0R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F0R2_FB27     CAN_F0R2_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F0R2_FB28_Pos (28U)\r\n#define CAN_F0R2_FB28_Msk (0x1UL << CAN_F0R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F0R2_FB28     CAN_F0R2_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F0R2_FB29_Pos (29U)\r\n#define CAN_F0R2_FB29_Msk (0x1UL << CAN_F0R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F0R2_FB29     CAN_F0R2_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F0R2_FB30_Pos (30U)\r\n#define CAN_F0R2_FB30_Msk (0x1UL << CAN_F0R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F0R2_FB30     CAN_F0R2_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F0R2_FB31_Pos (31U)\r\n#define CAN_F0R2_FB31_Msk (0x1UL << CAN_F0R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F0R2_FB31     CAN_F0R2_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F1R2 register  *******************/\r\n#define CAN_F1R2_FB0_Pos  (0U)\r\n#define CAN_F1R2_FB0_Msk  (0x1UL << CAN_F1R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F1R2_FB0      CAN_F1R2_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F1R2_FB1_Pos  (1U)\r\n#define CAN_F1R2_FB1_Msk  (0x1UL << CAN_F1R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F1R2_FB1      CAN_F1R2_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F1R2_FB2_Pos  (2U)\r\n#define CAN_F1R2_FB2_Msk  (0x1UL << CAN_F1R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F1R2_FB2      CAN_F1R2_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F1R2_FB3_Pos  (3U)\r\n#define CAN_F1R2_FB3_Msk  (0x1UL << CAN_F1R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F1R2_FB3      CAN_F1R2_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F1R2_FB4_Pos  (4U)\r\n#define CAN_F1R2_FB4_Msk  (0x1UL << CAN_F1R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F1R2_FB4      CAN_F1R2_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F1R2_FB5_Pos  (5U)\r\n#define CAN_F1R2_FB5_Msk  (0x1UL << CAN_F1R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F1R2_FB5      CAN_F1R2_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F1R2_FB6_Pos  (6U)\r\n#define CAN_F1R2_FB6_Msk  (0x1UL << CAN_F1R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F1R2_FB6      CAN_F1R2_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F1R2_FB7_Pos  (7U)\r\n#define CAN_F1R2_FB7_Msk  (0x1UL << CAN_F1R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F1R2_FB7      CAN_F1R2_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F1R2_FB8_Pos  (8U)\r\n#define CAN_F1R2_FB8_Msk  (0x1UL << CAN_F1R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F1R2_FB8      CAN_F1R2_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F1R2_FB9_Pos  (9U)\r\n#define CAN_F1R2_FB9_Msk  (0x1UL << CAN_F1R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F1R2_FB9      CAN_F1R2_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F1R2_FB10_Pos (10U)\r\n#define CAN_F1R2_FB10_Msk (0x1UL << CAN_F1R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F1R2_FB10     CAN_F1R2_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F1R2_FB11_Pos (11U)\r\n#define CAN_F1R2_FB11_Msk (0x1UL << CAN_F1R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F1R2_FB11     CAN_F1R2_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F1R2_FB12_Pos (12U)\r\n#define CAN_F1R2_FB12_Msk (0x1UL << CAN_F1R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F1R2_FB12     CAN_F1R2_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F1R2_FB13_Pos (13U)\r\n#define CAN_F1R2_FB13_Msk (0x1UL << CAN_F1R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F1R2_FB13     CAN_F1R2_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F1R2_FB14_Pos (14U)\r\n#define CAN_F1R2_FB14_Msk (0x1UL << CAN_F1R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F1R2_FB14     CAN_F1R2_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F1R2_FB15_Pos (15U)\r\n#define CAN_F1R2_FB15_Msk (0x1UL << CAN_F1R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F1R2_FB15     CAN_F1R2_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F1R2_FB16_Pos (16U)\r\n#define CAN_F1R2_FB16_Msk (0x1UL << CAN_F1R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F1R2_FB16     CAN_F1R2_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F1R2_FB17_Pos (17U)\r\n#define CAN_F1R2_FB17_Msk (0x1UL << CAN_F1R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F1R2_FB17     CAN_F1R2_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F1R2_FB18_Pos (18U)\r\n#define CAN_F1R2_FB18_Msk (0x1UL << CAN_F1R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F1R2_FB18     CAN_F1R2_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F1R2_FB19_Pos (19U)\r\n#define CAN_F1R2_FB19_Msk (0x1UL << CAN_F1R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F1R2_FB19     CAN_F1R2_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F1R2_FB20_Pos (20U)\r\n#define CAN_F1R2_FB20_Msk (0x1UL << CAN_F1R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F1R2_FB20     CAN_F1R2_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F1R2_FB21_Pos (21U)\r\n#define CAN_F1R2_FB21_Msk (0x1UL << CAN_F1R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F1R2_FB21     CAN_F1R2_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F1R2_FB22_Pos (22U)\r\n#define CAN_F1R2_FB22_Msk (0x1UL << CAN_F1R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F1R2_FB22     CAN_F1R2_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F1R2_FB23_Pos (23U)\r\n#define CAN_F1R2_FB23_Msk (0x1UL << CAN_F1R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F1R2_FB23     CAN_F1R2_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F1R2_FB24_Pos (24U)\r\n#define CAN_F1R2_FB24_Msk (0x1UL << CAN_F1R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F1R2_FB24     CAN_F1R2_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F1R2_FB25_Pos (25U)\r\n#define CAN_F1R2_FB25_Msk (0x1UL << CAN_F1R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F1R2_FB25     CAN_F1R2_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F1R2_FB26_Pos (26U)\r\n#define CAN_F1R2_FB26_Msk (0x1UL << CAN_F1R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F1R2_FB26     CAN_F1R2_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F1R2_FB27_Pos (27U)\r\n#define CAN_F1R2_FB27_Msk (0x1UL << CAN_F1R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F1R2_FB27     CAN_F1R2_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F1R2_FB28_Pos (28U)\r\n#define CAN_F1R2_FB28_Msk (0x1UL << CAN_F1R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F1R2_FB28     CAN_F1R2_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F1R2_FB29_Pos (29U)\r\n#define CAN_F1R2_FB29_Msk (0x1UL << CAN_F1R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F1R2_FB29     CAN_F1R2_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F1R2_FB30_Pos (30U)\r\n#define CAN_F1R2_FB30_Msk (0x1UL << CAN_F1R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F1R2_FB30     CAN_F1R2_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F1R2_FB31_Pos (31U)\r\n#define CAN_F1R2_FB31_Msk (0x1UL << CAN_F1R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F1R2_FB31     CAN_F1R2_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F2R2 register  *******************/\r\n#define CAN_F2R2_FB0_Pos  (0U)\r\n#define CAN_F2R2_FB0_Msk  (0x1UL << CAN_F2R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F2R2_FB0      CAN_F2R2_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F2R2_FB1_Pos  (1U)\r\n#define CAN_F2R2_FB1_Msk  (0x1UL << CAN_F2R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F2R2_FB1      CAN_F2R2_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F2R2_FB2_Pos  (2U)\r\n#define CAN_F2R2_FB2_Msk  (0x1UL << CAN_F2R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F2R2_FB2      CAN_F2R2_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F2R2_FB3_Pos  (3U)\r\n#define CAN_F2R2_FB3_Msk  (0x1UL << CAN_F2R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F2R2_FB3      CAN_F2R2_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F2R2_FB4_Pos  (4U)\r\n#define CAN_F2R2_FB4_Msk  (0x1UL << CAN_F2R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F2R2_FB4      CAN_F2R2_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F2R2_FB5_Pos  (5U)\r\n#define CAN_F2R2_FB5_Msk  (0x1UL << CAN_F2R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F2R2_FB5      CAN_F2R2_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F2R2_FB6_Pos  (6U)\r\n#define CAN_F2R2_FB6_Msk  (0x1UL << CAN_F2R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F2R2_FB6      CAN_F2R2_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F2R2_FB7_Pos  (7U)\r\n#define CAN_F2R2_FB7_Msk  (0x1UL << CAN_F2R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F2R2_FB7      CAN_F2R2_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F2R2_FB8_Pos  (8U)\r\n#define CAN_F2R2_FB8_Msk  (0x1UL << CAN_F2R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F2R2_FB8      CAN_F2R2_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F2R2_FB9_Pos  (9U)\r\n#define CAN_F2R2_FB9_Msk  (0x1UL << CAN_F2R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F2R2_FB9      CAN_F2R2_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F2R2_FB10_Pos (10U)\r\n#define CAN_F2R2_FB10_Msk (0x1UL << CAN_F2R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F2R2_FB10     CAN_F2R2_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F2R2_FB11_Pos (11U)\r\n#define CAN_F2R2_FB11_Msk (0x1UL << CAN_F2R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F2R2_FB11     CAN_F2R2_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F2R2_FB12_Pos (12U)\r\n#define CAN_F2R2_FB12_Msk (0x1UL << CAN_F2R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F2R2_FB12     CAN_F2R2_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F2R2_FB13_Pos (13U)\r\n#define CAN_F2R2_FB13_Msk (0x1UL << CAN_F2R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F2R2_FB13     CAN_F2R2_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F2R2_FB14_Pos (14U)\r\n#define CAN_F2R2_FB14_Msk (0x1UL << CAN_F2R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F2R2_FB14     CAN_F2R2_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F2R2_FB15_Pos (15U)\r\n#define CAN_F2R2_FB15_Msk (0x1UL << CAN_F2R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F2R2_FB15     CAN_F2R2_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F2R2_FB16_Pos (16U)\r\n#define CAN_F2R2_FB16_Msk (0x1UL << CAN_F2R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F2R2_FB16     CAN_F2R2_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F2R2_FB17_Pos (17U)\r\n#define CAN_F2R2_FB17_Msk (0x1UL << CAN_F2R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F2R2_FB17     CAN_F2R2_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F2R2_FB18_Pos (18U)\r\n#define CAN_F2R2_FB18_Msk (0x1UL << CAN_F2R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F2R2_FB18     CAN_F2R2_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F2R2_FB19_Pos (19U)\r\n#define CAN_F2R2_FB19_Msk (0x1UL << CAN_F2R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F2R2_FB19     CAN_F2R2_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F2R2_FB20_Pos (20U)\r\n#define CAN_F2R2_FB20_Msk (0x1UL << CAN_F2R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F2R2_FB20     CAN_F2R2_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F2R2_FB21_Pos (21U)\r\n#define CAN_F2R2_FB21_Msk (0x1UL << CAN_F2R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F2R2_FB21     CAN_F2R2_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F2R2_FB22_Pos (22U)\r\n#define CAN_F2R2_FB22_Msk (0x1UL << CAN_F2R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F2R2_FB22     CAN_F2R2_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F2R2_FB23_Pos (23U)\r\n#define CAN_F2R2_FB23_Msk (0x1UL << CAN_F2R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F2R2_FB23     CAN_F2R2_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F2R2_FB24_Pos (24U)\r\n#define CAN_F2R2_FB24_Msk (0x1UL << CAN_F2R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F2R2_FB24     CAN_F2R2_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F2R2_FB25_Pos (25U)\r\n#define CAN_F2R2_FB25_Msk (0x1UL << CAN_F2R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F2R2_FB25     CAN_F2R2_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F2R2_FB26_Pos (26U)\r\n#define CAN_F2R2_FB26_Msk (0x1UL << CAN_F2R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F2R2_FB26     CAN_F2R2_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F2R2_FB27_Pos (27U)\r\n#define CAN_F2R2_FB27_Msk (0x1UL << CAN_F2R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F2R2_FB27     CAN_F2R2_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F2R2_FB28_Pos (28U)\r\n#define CAN_F2R2_FB28_Msk (0x1UL << CAN_F2R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F2R2_FB28     CAN_F2R2_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F2R2_FB29_Pos (29U)\r\n#define CAN_F2R2_FB29_Msk (0x1UL << CAN_F2R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F2R2_FB29     CAN_F2R2_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F2R2_FB30_Pos (30U)\r\n#define CAN_F2R2_FB30_Msk (0x1UL << CAN_F2R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F2R2_FB30     CAN_F2R2_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F2R2_FB31_Pos (31U)\r\n#define CAN_F2R2_FB31_Msk (0x1UL << CAN_F2R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F2R2_FB31     CAN_F2R2_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F3R2 register  *******************/\r\n#define CAN_F3R2_FB0_Pos  (0U)\r\n#define CAN_F3R2_FB0_Msk  (0x1UL << CAN_F3R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F3R2_FB0      CAN_F3R2_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F3R2_FB1_Pos  (1U)\r\n#define CAN_F3R2_FB1_Msk  (0x1UL << CAN_F3R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F3R2_FB1      CAN_F3R2_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F3R2_FB2_Pos  (2U)\r\n#define CAN_F3R2_FB2_Msk  (0x1UL << CAN_F3R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F3R2_FB2      CAN_F3R2_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F3R2_FB3_Pos  (3U)\r\n#define CAN_F3R2_FB3_Msk  (0x1UL << CAN_F3R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F3R2_FB3      CAN_F3R2_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F3R2_FB4_Pos  (4U)\r\n#define CAN_F3R2_FB4_Msk  (0x1UL << CAN_F3R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F3R2_FB4      CAN_F3R2_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F3R2_FB5_Pos  (5U)\r\n#define CAN_F3R2_FB5_Msk  (0x1UL << CAN_F3R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F3R2_FB5      CAN_F3R2_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F3R2_FB6_Pos  (6U)\r\n#define CAN_F3R2_FB6_Msk  (0x1UL << CAN_F3R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F3R2_FB6      CAN_F3R2_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F3R2_FB7_Pos  (7U)\r\n#define CAN_F3R2_FB7_Msk  (0x1UL << CAN_F3R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F3R2_FB7      CAN_F3R2_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F3R2_FB8_Pos  (8U)\r\n#define CAN_F3R2_FB8_Msk  (0x1UL << CAN_F3R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F3R2_FB8      CAN_F3R2_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F3R2_FB9_Pos  (9U)\r\n#define CAN_F3R2_FB9_Msk  (0x1UL << CAN_F3R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F3R2_FB9      CAN_F3R2_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F3R2_FB10_Pos (10U)\r\n#define CAN_F3R2_FB10_Msk (0x1UL << CAN_F3R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F3R2_FB10     CAN_F3R2_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F3R2_FB11_Pos (11U)\r\n#define CAN_F3R2_FB11_Msk (0x1UL << CAN_F3R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F3R2_FB11     CAN_F3R2_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F3R2_FB12_Pos (12U)\r\n#define CAN_F3R2_FB12_Msk (0x1UL << CAN_F3R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F3R2_FB12     CAN_F3R2_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F3R2_FB13_Pos (13U)\r\n#define CAN_F3R2_FB13_Msk (0x1UL << CAN_F3R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F3R2_FB13     CAN_F3R2_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F3R2_FB14_Pos (14U)\r\n#define CAN_F3R2_FB14_Msk (0x1UL << CAN_F3R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F3R2_FB14     CAN_F3R2_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F3R2_FB15_Pos (15U)\r\n#define CAN_F3R2_FB15_Msk (0x1UL << CAN_F3R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F3R2_FB15     CAN_F3R2_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F3R2_FB16_Pos (16U)\r\n#define CAN_F3R2_FB16_Msk (0x1UL << CAN_F3R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F3R2_FB16     CAN_F3R2_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F3R2_FB17_Pos (17U)\r\n#define CAN_F3R2_FB17_Msk (0x1UL << CAN_F3R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F3R2_FB17     CAN_F3R2_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F3R2_FB18_Pos (18U)\r\n#define CAN_F3R2_FB18_Msk (0x1UL << CAN_F3R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F3R2_FB18     CAN_F3R2_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F3R2_FB19_Pos (19U)\r\n#define CAN_F3R2_FB19_Msk (0x1UL << CAN_F3R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F3R2_FB19     CAN_F3R2_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F3R2_FB20_Pos (20U)\r\n#define CAN_F3R2_FB20_Msk (0x1UL << CAN_F3R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F3R2_FB20     CAN_F3R2_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F3R2_FB21_Pos (21U)\r\n#define CAN_F3R2_FB21_Msk (0x1UL << CAN_F3R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F3R2_FB21     CAN_F3R2_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F3R2_FB22_Pos (22U)\r\n#define CAN_F3R2_FB22_Msk (0x1UL << CAN_F3R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F3R2_FB22     CAN_F3R2_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F3R2_FB23_Pos (23U)\r\n#define CAN_F3R2_FB23_Msk (0x1UL << CAN_F3R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F3R2_FB23     CAN_F3R2_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F3R2_FB24_Pos (24U)\r\n#define CAN_F3R2_FB24_Msk (0x1UL << CAN_F3R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F3R2_FB24     CAN_F3R2_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F3R2_FB25_Pos (25U)\r\n#define CAN_F3R2_FB25_Msk (0x1UL << CAN_F3R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F3R2_FB25     CAN_F3R2_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F3R2_FB26_Pos (26U)\r\n#define CAN_F3R2_FB26_Msk (0x1UL << CAN_F3R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F3R2_FB26     CAN_F3R2_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F3R2_FB27_Pos (27U)\r\n#define CAN_F3R2_FB27_Msk (0x1UL << CAN_F3R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F3R2_FB27     CAN_F3R2_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F3R2_FB28_Pos (28U)\r\n#define CAN_F3R2_FB28_Msk (0x1UL << CAN_F3R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F3R2_FB28     CAN_F3R2_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F3R2_FB29_Pos (29U)\r\n#define CAN_F3R2_FB29_Msk (0x1UL << CAN_F3R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F3R2_FB29     CAN_F3R2_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F3R2_FB30_Pos (30U)\r\n#define CAN_F3R2_FB30_Msk (0x1UL << CAN_F3R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F3R2_FB30     CAN_F3R2_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F3R2_FB31_Pos (31U)\r\n#define CAN_F3R2_FB31_Msk (0x1UL << CAN_F3R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F3R2_FB31     CAN_F3R2_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F4R2 register  *******************/\r\n#define CAN_F4R2_FB0_Pos  (0U)\r\n#define CAN_F4R2_FB0_Msk  (0x1UL << CAN_F4R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F4R2_FB0      CAN_F4R2_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F4R2_FB1_Pos  (1U)\r\n#define CAN_F4R2_FB1_Msk  (0x1UL << CAN_F4R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F4R2_FB1      CAN_F4R2_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F4R2_FB2_Pos  (2U)\r\n#define CAN_F4R2_FB2_Msk  (0x1UL << CAN_F4R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F4R2_FB2      CAN_F4R2_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F4R2_FB3_Pos  (3U)\r\n#define CAN_F4R2_FB3_Msk  (0x1UL << CAN_F4R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F4R2_FB3      CAN_F4R2_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F4R2_FB4_Pos  (4U)\r\n#define CAN_F4R2_FB4_Msk  (0x1UL << CAN_F4R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F4R2_FB4      CAN_F4R2_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F4R2_FB5_Pos  (5U)\r\n#define CAN_F4R2_FB5_Msk  (0x1UL << CAN_F4R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F4R2_FB5      CAN_F4R2_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F4R2_FB6_Pos  (6U)\r\n#define CAN_F4R2_FB6_Msk  (0x1UL << CAN_F4R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F4R2_FB6      CAN_F4R2_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F4R2_FB7_Pos  (7U)\r\n#define CAN_F4R2_FB7_Msk  (0x1UL << CAN_F4R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F4R2_FB7      CAN_F4R2_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F4R2_FB8_Pos  (8U)\r\n#define CAN_F4R2_FB8_Msk  (0x1UL << CAN_F4R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F4R2_FB8      CAN_F4R2_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F4R2_FB9_Pos  (9U)\r\n#define CAN_F4R2_FB9_Msk  (0x1UL << CAN_F4R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F4R2_FB9      CAN_F4R2_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F4R2_FB10_Pos (10U)\r\n#define CAN_F4R2_FB10_Msk (0x1UL << CAN_F4R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F4R2_FB10     CAN_F4R2_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F4R2_FB11_Pos (11U)\r\n#define CAN_F4R2_FB11_Msk (0x1UL << CAN_F4R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F4R2_FB11     CAN_F4R2_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F4R2_FB12_Pos (12U)\r\n#define CAN_F4R2_FB12_Msk (0x1UL << CAN_F4R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F4R2_FB12     CAN_F4R2_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F4R2_FB13_Pos (13U)\r\n#define CAN_F4R2_FB13_Msk (0x1UL << CAN_F4R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F4R2_FB13     CAN_F4R2_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F4R2_FB14_Pos (14U)\r\n#define CAN_F4R2_FB14_Msk (0x1UL << CAN_F4R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F4R2_FB14     CAN_F4R2_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F4R2_FB15_Pos (15U)\r\n#define CAN_F4R2_FB15_Msk (0x1UL << CAN_F4R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F4R2_FB15     CAN_F4R2_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F4R2_FB16_Pos (16U)\r\n#define CAN_F4R2_FB16_Msk (0x1UL << CAN_F4R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F4R2_FB16     CAN_F4R2_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F4R2_FB17_Pos (17U)\r\n#define CAN_F4R2_FB17_Msk (0x1UL << CAN_F4R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F4R2_FB17     CAN_F4R2_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F4R2_FB18_Pos (18U)\r\n#define CAN_F4R2_FB18_Msk (0x1UL << CAN_F4R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F4R2_FB18     CAN_F4R2_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F4R2_FB19_Pos (19U)\r\n#define CAN_F4R2_FB19_Msk (0x1UL << CAN_F4R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F4R2_FB19     CAN_F4R2_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F4R2_FB20_Pos (20U)\r\n#define CAN_F4R2_FB20_Msk (0x1UL << CAN_F4R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F4R2_FB20     CAN_F4R2_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F4R2_FB21_Pos (21U)\r\n#define CAN_F4R2_FB21_Msk (0x1UL << CAN_F4R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F4R2_FB21     CAN_F4R2_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F4R2_FB22_Pos (22U)\r\n#define CAN_F4R2_FB22_Msk (0x1UL << CAN_F4R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F4R2_FB22     CAN_F4R2_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F4R2_FB23_Pos (23U)\r\n#define CAN_F4R2_FB23_Msk (0x1UL << CAN_F4R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F4R2_FB23     CAN_F4R2_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F4R2_FB24_Pos (24U)\r\n#define CAN_F4R2_FB24_Msk (0x1UL << CAN_F4R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F4R2_FB24     CAN_F4R2_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F4R2_FB25_Pos (25U)\r\n#define CAN_F4R2_FB25_Msk (0x1UL << CAN_F4R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F4R2_FB25     CAN_F4R2_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F4R2_FB26_Pos (26U)\r\n#define CAN_F4R2_FB26_Msk (0x1UL << CAN_F4R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F4R2_FB26     CAN_F4R2_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F4R2_FB27_Pos (27U)\r\n#define CAN_F4R2_FB27_Msk (0x1UL << CAN_F4R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F4R2_FB27     CAN_F4R2_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F4R2_FB28_Pos (28U)\r\n#define CAN_F4R2_FB28_Msk (0x1UL << CAN_F4R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F4R2_FB28     CAN_F4R2_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F4R2_FB29_Pos (29U)\r\n#define CAN_F4R2_FB29_Msk (0x1UL << CAN_F4R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F4R2_FB29     CAN_F4R2_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F4R2_FB30_Pos (30U)\r\n#define CAN_F4R2_FB30_Msk (0x1UL << CAN_F4R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F4R2_FB30     CAN_F4R2_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F4R2_FB31_Pos (31U)\r\n#define CAN_F4R2_FB31_Msk (0x1UL << CAN_F4R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F4R2_FB31     CAN_F4R2_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F5R2 register  *******************/\r\n#define CAN_F5R2_FB0_Pos  (0U)\r\n#define CAN_F5R2_FB0_Msk  (0x1UL << CAN_F5R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F5R2_FB0      CAN_F5R2_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F5R2_FB1_Pos  (1U)\r\n#define CAN_F5R2_FB1_Msk  (0x1UL << CAN_F5R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F5R2_FB1      CAN_F5R2_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F5R2_FB2_Pos  (2U)\r\n#define CAN_F5R2_FB2_Msk  (0x1UL << CAN_F5R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F5R2_FB2      CAN_F5R2_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F5R2_FB3_Pos  (3U)\r\n#define CAN_F5R2_FB3_Msk  (0x1UL << CAN_F5R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F5R2_FB3      CAN_F5R2_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F5R2_FB4_Pos  (4U)\r\n#define CAN_F5R2_FB4_Msk  (0x1UL << CAN_F5R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F5R2_FB4      CAN_F5R2_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F5R2_FB5_Pos  (5U)\r\n#define CAN_F5R2_FB5_Msk  (0x1UL << CAN_F5R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F5R2_FB5      CAN_F5R2_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F5R2_FB6_Pos  (6U)\r\n#define CAN_F5R2_FB6_Msk  (0x1UL << CAN_F5R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F5R2_FB6      CAN_F5R2_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F5R2_FB7_Pos  (7U)\r\n#define CAN_F5R2_FB7_Msk  (0x1UL << CAN_F5R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F5R2_FB7      CAN_F5R2_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F5R2_FB8_Pos  (8U)\r\n#define CAN_F5R2_FB8_Msk  (0x1UL << CAN_F5R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F5R2_FB8      CAN_F5R2_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F5R2_FB9_Pos  (9U)\r\n#define CAN_F5R2_FB9_Msk  (0x1UL << CAN_F5R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F5R2_FB9      CAN_F5R2_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F5R2_FB10_Pos (10U)\r\n#define CAN_F5R2_FB10_Msk (0x1UL << CAN_F5R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F5R2_FB10     CAN_F5R2_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F5R2_FB11_Pos (11U)\r\n#define CAN_F5R2_FB11_Msk (0x1UL << CAN_F5R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F5R2_FB11     CAN_F5R2_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F5R2_FB12_Pos (12U)\r\n#define CAN_F5R2_FB12_Msk (0x1UL << CAN_F5R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F5R2_FB12     CAN_F5R2_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F5R2_FB13_Pos (13U)\r\n#define CAN_F5R2_FB13_Msk (0x1UL << CAN_F5R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F5R2_FB13     CAN_F5R2_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F5R2_FB14_Pos (14U)\r\n#define CAN_F5R2_FB14_Msk (0x1UL << CAN_F5R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F5R2_FB14     CAN_F5R2_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F5R2_FB15_Pos (15U)\r\n#define CAN_F5R2_FB15_Msk (0x1UL << CAN_F5R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F5R2_FB15     CAN_F5R2_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F5R2_FB16_Pos (16U)\r\n#define CAN_F5R2_FB16_Msk (0x1UL << CAN_F5R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F5R2_FB16     CAN_F5R2_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F5R2_FB17_Pos (17U)\r\n#define CAN_F5R2_FB17_Msk (0x1UL << CAN_F5R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F5R2_FB17     CAN_F5R2_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F5R2_FB18_Pos (18U)\r\n#define CAN_F5R2_FB18_Msk (0x1UL << CAN_F5R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F5R2_FB18     CAN_F5R2_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F5R2_FB19_Pos (19U)\r\n#define CAN_F5R2_FB19_Msk (0x1UL << CAN_F5R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F5R2_FB19     CAN_F5R2_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F5R2_FB20_Pos (20U)\r\n#define CAN_F5R2_FB20_Msk (0x1UL << CAN_F5R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F5R2_FB20     CAN_F5R2_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F5R2_FB21_Pos (21U)\r\n#define CAN_F5R2_FB21_Msk (0x1UL << CAN_F5R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F5R2_FB21     CAN_F5R2_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F5R2_FB22_Pos (22U)\r\n#define CAN_F5R2_FB22_Msk (0x1UL << CAN_F5R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F5R2_FB22     CAN_F5R2_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F5R2_FB23_Pos (23U)\r\n#define CAN_F5R2_FB23_Msk (0x1UL << CAN_F5R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F5R2_FB23     CAN_F5R2_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F5R2_FB24_Pos (24U)\r\n#define CAN_F5R2_FB24_Msk (0x1UL << CAN_F5R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F5R2_FB24     CAN_F5R2_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F5R2_FB25_Pos (25U)\r\n#define CAN_F5R2_FB25_Msk (0x1UL << CAN_F5R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F5R2_FB25     CAN_F5R2_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F5R2_FB26_Pos (26U)\r\n#define CAN_F5R2_FB26_Msk (0x1UL << CAN_F5R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F5R2_FB26     CAN_F5R2_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F5R2_FB27_Pos (27U)\r\n#define CAN_F5R2_FB27_Msk (0x1UL << CAN_F5R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F5R2_FB27     CAN_F5R2_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F5R2_FB28_Pos (28U)\r\n#define CAN_F5R2_FB28_Msk (0x1UL << CAN_F5R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F5R2_FB28     CAN_F5R2_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F5R2_FB29_Pos (29U)\r\n#define CAN_F5R2_FB29_Msk (0x1UL << CAN_F5R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F5R2_FB29     CAN_F5R2_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F5R2_FB30_Pos (30U)\r\n#define CAN_F5R2_FB30_Msk (0x1UL << CAN_F5R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F5R2_FB30     CAN_F5R2_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F5R2_FB31_Pos (31U)\r\n#define CAN_F5R2_FB31_Msk (0x1UL << CAN_F5R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F5R2_FB31     CAN_F5R2_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F6R2 register  *******************/\r\n#define CAN_F6R2_FB0_Pos  (0U)\r\n#define CAN_F6R2_FB0_Msk  (0x1UL << CAN_F6R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F6R2_FB0      CAN_F6R2_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F6R2_FB1_Pos  (1U)\r\n#define CAN_F6R2_FB1_Msk  (0x1UL << CAN_F6R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F6R2_FB1      CAN_F6R2_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F6R2_FB2_Pos  (2U)\r\n#define CAN_F6R2_FB2_Msk  (0x1UL << CAN_F6R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F6R2_FB2      CAN_F6R2_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F6R2_FB3_Pos  (3U)\r\n#define CAN_F6R2_FB3_Msk  (0x1UL << CAN_F6R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F6R2_FB3      CAN_F6R2_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F6R2_FB4_Pos  (4U)\r\n#define CAN_F6R2_FB4_Msk  (0x1UL << CAN_F6R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F6R2_FB4      CAN_F6R2_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F6R2_FB5_Pos  (5U)\r\n#define CAN_F6R2_FB5_Msk  (0x1UL << CAN_F6R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F6R2_FB5      CAN_F6R2_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F6R2_FB6_Pos  (6U)\r\n#define CAN_F6R2_FB6_Msk  (0x1UL << CAN_F6R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F6R2_FB6      CAN_F6R2_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F6R2_FB7_Pos  (7U)\r\n#define CAN_F6R2_FB7_Msk  (0x1UL << CAN_F6R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F6R2_FB7      CAN_F6R2_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F6R2_FB8_Pos  (8U)\r\n#define CAN_F6R2_FB8_Msk  (0x1UL << CAN_F6R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F6R2_FB8      CAN_F6R2_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F6R2_FB9_Pos  (9U)\r\n#define CAN_F6R2_FB9_Msk  (0x1UL << CAN_F6R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F6R2_FB9      CAN_F6R2_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F6R2_FB10_Pos (10U)\r\n#define CAN_F6R2_FB10_Msk (0x1UL << CAN_F6R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F6R2_FB10     CAN_F6R2_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F6R2_FB11_Pos (11U)\r\n#define CAN_F6R2_FB11_Msk (0x1UL << CAN_F6R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F6R2_FB11     CAN_F6R2_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F6R2_FB12_Pos (12U)\r\n#define CAN_F6R2_FB12_Msk (0x1UL << CAN_F6R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F6R2_FB12     CAN_F6R2_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F6R2_FB13_Pos (13U)\r\n#define CAN_F6R2_FB13_Msk (0x1UL << CAN_F6R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F6R2_FB13     CAN_F6R2_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F6R2_FB14_Pos (14U)\r\n#define CAN_F6R2_FB14_Msk (0x1UL << CAN_F6R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F6R2_FB14     CAN_F6R2_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F6R2_FB15_Pos (15U)\r\n#define CAN_F6R2_FB15_Msk (0x1UL << CAN_F6R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F6R2_FB15     CAN_F6R2_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F6R2_FB16_Pos (16U)\r\n#define CAN_F6R2_FB16_Msk (0x1UL << CAN_F6R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F6R2_FB16     CAN_F6R2_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F6R2_FB17_Pos (17U)\r\n#define CAN_F6R2_FB17_Msk (0x1UL << CAN_F6R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F6R2_FB17     CAN_F6R2_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F6R2_FB18_Pos (18U)\r\n#define CAN_F6R2_FB18_Msk (0x1UL << CAN_F6R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F6R2_FB18     CAN_F6R2_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F6R2_FB19_Pos (19U)\r\n#define CAN_F6R2_FB19_Msk (0x1UL << CAN_F6R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F6R2_FB19     CAN_F6R2_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F6R2_FB20_Pos (20U)\r\n#define CAN_F6R2_FB20_Msk (0x1UL << CAN_F6R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F6R2_FB20     CAN_F6R2_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F6R2_FB21_Pos (21U)\r\n#define CAN_F6R2_FB21_Msk (0x1UL << CAN_F6R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F6R2_FB21     CAN_F6R2_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F6R2_FB22_Pos (22U)\r\n#define CAN_F6R2_FB22_Msk (0x1UL << CAN_F6R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F6R2_FB22     CAN_F6R2_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F6R2_FB23_Pos (23U)\r\n#define CAN_F6R2_FB23_Msk (0x1UL << CAN_F6R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F6R2_FB23     CAN_F6R2_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F6R2_FB24_Pos (24U)\r\n#define CAN_F6R2_FB24_Msk (0x1UL << CAN_F6R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F6R2_FB24     CAN_F6R2_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F6R2_FB25_Pos (25U)\r\n#define CAN_F6R2_FB25_Msk (0x1UL << CAN_F6R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F6R2_FB25     CAN_F6R2_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F6R2_FB26_Pos (26U)\r\n#define CAN_F6R2_FB26_Msk (0x1UL << CAN_F6R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F6R2_FB26     CAN_F6R2_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F6R2_FB27_Pos (27U)\r\n#define CAN_F6R2_FB27_Msk (0x1UL << CAN_F6R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F6R2_FB27     CAN_F6R2_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F6R2_FB28_Pos (28U)\r\n#define CAN_F6R2_FB28_Msk (0x1UL << CAN_F6R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F6R2_FB28     CAN_F6R2_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F6R2_FB29_Pos (29U)\r\n#define CAN_F6R2_FB29_Msk (0x1UL << CAN_F6R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F6R2_FB29     CAN_F6R2_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F6R2_FB30_Pos (30U)\r\n#define CAN_F6R2_FB30_Msk (0x1UL << CAN_F6R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F6R2_FB30     CAN_F6R2_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F6R2_FB31_Pos (31U)\r\n#define CAN_F6R2_FB31_Msk (0x1UL << CAN_F6R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F6R2_FB31     CAN_F6R2_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F7R2 register  *******************/\r\n#define CAN_F7R2_FB0_Pos  (0U)\r\n#define CAN_F7R2_FB0_Msk  (0x1UL << CAN_F7R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F7R2_FB0      CAN_F7R2_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F7R2_FB1_Pos  (1U)\r\n#define CAN_F7R2_FB1_Msk  (0x1UL << CAN_F7R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F7R2_FB1      CAN_F7R2_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F7R2_FB2_Pos  (2U)\r\n#define CAN_F7R2_FB2_Msk  (0x1UL << CAN_F7R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F7R2_FB2      CAN_F7R2_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F7R2_FB3_Pos  (3U)\r\n#define CAN_F7R2_FB3_Msk  (0x1UL << CAN_F7R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F7R2_FB3      CAN_F7R2_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F7R2_FB4_Pos  (4U)\r\n#define CAN_F7R2_FB4_Msk  (0x1UL << CAN_F7R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F7R2_FB4      CAN_F7R2_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F7R2_FB5_Pos  (5U)\r\n#define CAN_F7R2_FB5_Msk  (0x1UL << CAN_F7R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F7R2_FB5      CAN_F7R2_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F7R2_FB6_Pos  (6U)\r\n#define CAN_F7R2_FB6_Msk  (0x1UL << CAN_F7R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F7R2_FB6      CAN_F7R2_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F7R2_FB7_Pos  (7U)\r\n#define CAN_F7R2_FB7_Msk  (0x1UL << CAN_F7R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F7R2_FB7      CAN_F7R2_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F7R2_FB8_Pos  (8U)\r\n#define CAN_F7R2_FB8_Msk  (0x1UL << CAN_F7R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F7R2_FB8      CAN_F7R2_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F7R2_FB9_Pos  (9U)\r\n#define CAN_F7R2_FB9_Msk  (0x1UL << CAN_F7R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F7R2_FB9      CAN_F7R2_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F7R2_FB10_Pos (10U)\r\n#define CAN_F7R2_FB10_Msk (0x1UL << CAN_F7R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F7R2_FB10     CAN_F7R2_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F7R2_FB11_Pos (11U)\r\n#define CAN_F7R2_FB11_Msk (0x1UL << CAN_F7R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F7R2_FB11     CAN_F7R2_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F7R2_FB12_Pos (12U)\r\n#define CAN_F7R2_FB12_Msk (0x1UL << CAN_F7R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F7R2_FB12     CAN_F7R2_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F7R2_FB13_Pos (13U)\r\n#define CAN_F7R2_FB13_Msk (0x1UL << CAN_F7R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F7R2_FB13     CAN_F7R2_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F7R2_FB14_Pos (14U)\r\n#define CAN_F7R2_FB14_Msk (0x1UL << CAN_F7R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F7R2_FB14     CAN_F7R2_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F7R2_FB15_Pos (15U)\r\n#define CAN_F7R2_FB15_Msk (0x1UL << CAN_F7R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F7R2_FB15     CAN_F7R2_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F7R2_FB16_Pos (16U)\r\n#define CAN_F7R2_FB16_Msk (0x1UL << CAN_F7R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F7R2_FB16     CAN_F7R2_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F7R2_FB17_Pos (17U)\r\n#define CAN_F7R2_FB17_Msk (0x1UL << CAN_F7R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F7R2_FB17     CAN_F7R2_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F7R2_FB18_Pos (18U)\r\n#define CAN_F7R2_FB18_Msk (0x1UL << CAN_F7R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F7R2_FB18     CAN_F7R2_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F7R2_FB19_Pos (19U)\r\n#define CAN_F7R2_FB19_Msk (0x1UL << CAN_F7R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F7R2_FB19     CAN_F7R2_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F7R2_FB20_Pos (20U)\r\n#define CAN_F7R2_FB20_Msk (0x1UL << CAN_F7R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F7R2_FB20     CAN_F7R2_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F7R2_FB21_Pos (21U)\r\n#define CAN_F7R2_FB21_Msk (0x1UL << CAN_F7R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F7R2_FB21     CAN_F7R2_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F7R2_FB22_Pos (22U)\r\n#define CAN_F7R2_FB22_Msk (0x1UL << CAN_F7R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F7R2_FB22     CAN_F7R2_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F7R2_FB23_Pos (23U)\r\n#define CAN_F7R2_FB23_Msk (0x1UL << CAN_F7R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F7R2_FB23     CAN_F7R2_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F7R2_FB24_Pos (24U)\r\n#define CAN_F7R2_FB24_Msk (0x1UL << CAN_F7R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F7R2_FB24     CAN_F7R2_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F7R2_FB25_Pos (25U)\r\n#define CAN_F7R2_FB25_Msk (0x1UL << CAN_F7R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F7R2_FB25     CAN_F7R2_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F7R2_FB26_Pos (26U)\r\n#define CAN_F7R2_FB26_Msk (0x1UL << CAN_F7R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F7R2_FB26     CAN_F7R2_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F7R2_FB27_Pos (27U)\r\n#define CAN_F7R2_FB27_Msk (0x1UL << CAN_F7R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F7R2_FB27     CAN_F7R2_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F7R2_FB28_Pos (28U)\r\n#define CAN_F7R2_FB28_Msk (0x1UL << CAN_F7R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F7R2_FB28     CAN_F7R2_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F7R2_FB29_Pos (29U)\r\n#define CAN_F7R2_FB29_Msk (0x1UL << CAN_F7R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F7R2_FB29     CAN_F7R2_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F7R2_FB30_Pos (30U)\r\n#define CAN_F7R2_FB30_Msk (0x1UL << CAN_F7R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F7R2_FB30     CAN_F7R2_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F7R2_FB31_Pos (31U)\r\n#define CAN_F7R2_FB31_Msk (0x1UL << CAN_F7R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F7R2_FB31     CAN_F7R2_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F8R2 register  *******************/\r\n#define CAN_F8R2_FB0_Pos  (0U)\r\n#define CAN_F8R2_FB0_Msk  (0x1UL << CAN_F8R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F8R2_FB0      CAN_F8R2_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F8R2_FB1_Pos  (1U)\r\n#define CAN_F8R2_FB1_Msk  (0x1UL << CAN_F8R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F8R2_FB1      CAN_F8R2_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F8R2_FB2_Pos  (2U)\r\n#define CAN_F8R2_FB2_Msk  (0x1UL << CAN_F8R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F8R2_FB2      CAN_F8R2_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F8R2_FB3_Pos  (3U)\r\n#define CAN_F8R2_FB3_Msk  (0x1UL << CAN_F8R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F8R2_FB3      CAN_F8R2_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F8R2_FB4_Pos  (4U)\r\n#define CAN_F8R2_FB4_Msk  (0x1UL << CAN_F8R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F8R2_FB4      CAN_F8R2_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F8R2_FB5_Pos  (5U)\r\n#define CAN_F8R2_FB5_Msk  (0x1UL << CAN_F8R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F8R2_FB5      CAN_F8R2_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F8R2_FB6_Pos  (6U)\r\n#define CAN_F8R2_FB6_Msk  (0x1UL << CAN_F8R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F8R2_FB6      CAN_F8R2_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F8R2_FB7_Pos  (7U)\r\n#define CAN_F8R2_FB7_Msk  (0x1UL << CAN_F8R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F8R2_FB7      CAN_F8R2_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F8R2_FB8_Pos  (8U)\r\n#define CAN_F8R2_FB8_Msk  (0x1UL << CAN_F8R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F8R2_FB8      CAN_F8R2_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F8R2_FB9_Pos  (9U)\r\n#define CAN_F8R2_FB9_Msk  (0x1UL << CAN_F8R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F8R2_FB9      CAN_F8R2_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F8R2_FB10_Pos (10U)\r\n#define CAN_F8R2_FB10_Msk (0x1UL << CAN_F8R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F8R2_FB10     CAN_F8R2_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F8R2_FB11_Pos (11U)\r\n#define CAN_F8R2_FB11_Msk (0x1UL << CAN_F8R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F8R2_FB11     CAN_F8R2_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F8R2_FB12_Pos (12U)\r\n#define CAN_F8R2_FB12_Msk (0x1UL << CAN_F8R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F8R2_FB12     CAN_F8R2_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F8R2_FB13_Pos (13U)\r\n#define CAN_F8R2_FB13_Msk (0x1UL << CAN_F8R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F8R2_FB13     CAN_F8R2_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F8R2_FB14_Pos (14U)\r\n#define CAN_F8R2_FB14_Msk (0x1UL << CAN_F8R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F8R2_FB14     CAN_F8R2_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F8R2_FB15_Pos (15U)\r\n#define CAN_F8R2_FB15_Msk (0x1UL << CAN_F8R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F8R2_FB15     CAN_F8R2_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F8R2_FB16_Pos (16U)\r\n#define CAN_F8R2_FB16_Msk (0x1UL << CAN_F8R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F8R2_FB16     CAN_F8R2_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F8R2_FB17_Pos (17U)\r\n#define CAN_F8R2_FB17_Msk (0x1UL << CAN_F8R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F8R2_FB17     CAN_F8R2_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F8R2_FB18_Pos (18U)\r\n#define CAN_F8R2_FB18_Msk (0x1UL << CAN_F8R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F8R2_FB18     CAN_F8R2_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F8R2_FB19_Pos (19U)\r\n#define CAN_F8R2_FB19_Msk (0x1UL << CAN_F8R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F8R2_FB19     CAN_F8R2_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F8R2_FB20_Pos (20U)\r\n#define CAN_F8R2_FB20_Msk (0x1UL << CAN_F8R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F8R2_FB20     CAN_F8R2_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F8R2_FB21_Pos (21U)\r\n#define CAN_F8R2_FB21_Msk (0x1UL << CAN_F8R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F8R2_FB21     CAN_F8R2_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F8R2_FB22_Pos (22U)\r\n#define CAN_F8R2_FB22_Msk (0x1UL << CAN_F8R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F8R2_FB22     CAN_F8R2_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F8R2_FB23_Pos (23U)\r\n#define CAN_F8R2_FB23_Msk (0x1UL << CAN_F8R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F8R2_FB23     CAN_F8R2_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F8R2_FB24_Pos (24U)\r\n#define CAN_F8R2_FB24_Msk (0x1UL << CAN_F8R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F8R2_FB24     CAN_F8R2_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F8R2_FB25_Pos (25U)\r\n#define CAN_F8R2_FB25_Msk (0x1UL << CAN_F8R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F8R2_FB25     CAN_F8R2_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F8R2_FB26_Pos (26U)\r\n#define CAN_F8R2_FB26_Msk (0x1UL << CAN_F8R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F8R2_FB26     CAN_F8R2_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F8R2_FB27_Pos (27U)\r\n#define CAN_F8R2_FB27_Msk (0x1UL << CAN_F8R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F8R2_FB27     CAN_F8R2_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F8R2_FB28_Pos (28U)\r\n#define CAN_F8R2_FB28_Msk (0x1UL << CAN_F8R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F8R2_FB28     CAN_F8R2_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F8R2_FB29_Pos (29U)\r\n#define CAN_F8R2_FB29_Msk (0x1UL << CAN_F8R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F8R2_FB29     CAN_F8R2_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F8R2_FB30_Pos (30U)\r\n#define CAN_F8R2_FB30_Msk (0x1UL << CAN_F8R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F8R2_FB30     CAN_F8R2_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F8R2_FB31_Pos (31U)\r\n#define CAN_F8R2_FB31_Msk (0x1UL << CAN_F8R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F8R2_FB31     CAN_F8R2_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F9R2 register  *******************/\r\n#define CAN_F9R2_FB0_Pos  (0U)\r\n#define CAN_F9R2_FB0_Msk  (0x1UL << CAN_F9R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F9R2_FB0      CAN_F9R2_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F9R2_FB1_Pos  (1U)\r\n#define CAN_F9R2_FB1_Msk  (0x1UL << CAN_F9R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F9R2_FB1      CAN_F9R2_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F9R2_FB2_Pos  (2U)\r\n#define CAN_F9R2_FB2_Msk  (0x1UL << CAN_F9R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F9R2_FB2      CAN_F9R2_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F9R2_FB3_Pos  (3U)\r\n#define CAN_F9R2_FB3_Msk  (0x1UL << CAN_F9R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F9R2_FB3      CAN_F9R2_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F9R2_FB4_Pos  (4U)\r\n#define CAN_F9R2_FB4_Msk  (0x1UL << CAN_F9R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F9R2_FB4      CAN_F9R2_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F9R2_FB5_Pos  (5U)\r\n#define CAN_F9R2_FB5_Msk  (0x1UL << CAN_F9R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F9R2_FB5      CAN_F9R2_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F9R2_FB6_Pos  (6U)\r\n#define CAN_F9R2_FB6_Msk  (0x1UL << CAN_F9R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F9R2_FB6      CAN_F9R2_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F9R2_FB7_Pos  (7U)\r\n#define CAN_F9R2_FB7_Msk  (0x1UL << CAN_F9R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F9R2_FB7      CAN_F9R2_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F9R2_FB8_Pos  (8U)\r\n#define CAN_F9R2_FB8_Msk  (0x1UL << CAN_F9R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F9R2_FB8      CAN_F9R2_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F9R2_FB9_Pos  (9U)\r\n#define CAN_F9R2_FB9_Msk  (0x1UL << CAN_F9R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F9R2_FB9      CAN_F9R2_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F9R2_FB10_Pos (10U)\r\n#define CAN_F9R2_FB10_Msk (0x1UL << CAN_F9R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F9R2_FB10     CAN_F9R2_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F9R2_FB11_Pos (11U)\r\n#define CAN_F9R2_FB11_Msk (0x1UL << CAN_F9R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F9R2_FB11     CAN_F9R2_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F9R2_FB12_Pos (12U)\r\n#define CAN_F9R2_FB12_Msk (0x1UL << CAN_F9R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F9R2_FB12     CAN_F9R2_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F9R2_FB13_Pos (13U)\r\n#define CAN_F9R2_FB13_Msk (0x1UL << CAN_F9R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F9R2_FB13     CAN_F9R2_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F9R2_FB14_Pos (14U)\r\n#define CAN_F9R2_FB14_Msk (0x1UL << CAN_F9R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F9R2_FB14     CAN_F9R2_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F9R2_FB15_Pos (15U)\r\n#define CAN_F9R2_FB15_Msk (0x1UL << CAN_F9R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F9R2_FB15     CAN_F9R2_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F9R2_FB16_Pos (16U)\r\n#define CAN_F9R2_FB16_Msk (0x1UL << CAN_F9R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F9R2_FB16     CAN_F9R2_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F9R2_FB17_Pos (17U)\r\n#define CAN_F9R2_FB17_Msk (0x1UL << CAN_F9R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F9R2_FB17     CAN_F9R2_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F9R2_FB18_Pos (18U)\r\n#define CAN_F9R2_FB18_Msk (0x1UL << CAN_F9R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F9R2_FB18     CAN_F9R2_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F9R2_FB19_Pos (19U)\r\n#define CAN_F9R2_FB19_Msk (0x1UL << CAN_F9R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F9R2_FB19     CAN_F9R2_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F9R2_FB20_Pos (20U)\r\n#define CAN_F9R2_FB20_Msk (0x1UL << CAN_F9R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F9R2_FB20     CAN_F9R2_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F9R2_FB21_Pos (21U)\r\n#define CAN_F9R2_FB21_Msk (0x1UL << CAN_F9R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F9R2_FB21     CAN_F9R2_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F9R2_FB22_Pos (22U)\r\n#define CAN_F9R2_FB22_Msk (0x1UL << CAN_F9R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F9R2_FB22     CAN_F9R2_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F9R2_FB23_Pos (23U)\r\n#define CAN_F9R2_FB23_Msk (0x1UL << CAN_F9R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F9R2_FB23     CAN_F9R2_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F9R2_FB24_Pos (24U)\r\n#define CAN_F9R2_FB24_Msk (0x1UL << CAN_F9R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F9R2_FB24     CAN_F9R2_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F9R2_FB25_Pos (25U)\r\n#define CAN_F9R2_FB25_Msk (0x1UL << CAN_F9R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F9R2_FB25     CAN_F9R2_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F9R2_FB26_Pos (26U)\r\n#define CAN_F9R2_FB26_Msk (0x1UL << CAN_F9R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F9R2_FB26     CAN_F9R2_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F9R2_FB27_Pos (27U)\r\n#define CAN_F9R2_FB27_Msk (0x1UL << CAN_F9R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F9R2_FB27     CAN_F9R2_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F9R2_FB28_Pos (28U)\r\n#define CAN_F9R2_FB28_Msk (0x1UL << CAN_F9R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F9R2_FB28     CAN_F9R2_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F9R2_FB29_Pos (29U)\r\n#define CAN_F9R2_FB29_Msk (0x1UL << CAN_F9R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F9R2_FB29     CAN_F9R2_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F9R2_FB30_Pos (30U)\r\n#define CAN_F9R2_FB30_Msk (0x1UL << CAN_F9R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F9R2_FB30     CAN_F9R2_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F9R2_FB31_Pos (31U)\r\n#define CAN_F9R2_FB31_Msk (0x1UL << CAN_F9R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F9R2_FB31     CAN_F9R2_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F10R2 register  ******************/\r\n#define CAN_F10R2_FB0_Pos  (0U)\r\n#define CAN_F10R2_FB0_Msk  (0x1UL << CAN_F10R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F10R2_FB0      CAN_F10R2_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F10R2_FB1_Pos  (1U)\r\n#define CAN_F10R2_FB1_Msk  (0x1UL << CAN_F10R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F10R2_FB1      CAN_F10R2_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F10R2_FB2_Pos  (2U)\r\n#define CAN_F10R2_FB2_Msk  (0x1UL << CAN_F10R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F10R2_FB2      CAN_F10R2_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F10R2_FB3_Pos  (3U)\r\n#define CAN_F10R2_FB3_Msk  (0x1UL << CAN_F10R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F10R2_FB3      CAN_F10R2_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F10R2_FB4_Pos  (4U)\r\n#define CAN_F10R2_FB4_Msk  (0x1UL << CAN_F10R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F10R2_FB4      CAN_F10R2_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F10R2_FB5_Pos  (5U)\r\n#define CAN_F10R2_FB5_Msk  (0x1UL << CAN_F10R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F10R2_FB5      CAN_F10R2_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F10R2_FB6_Pos  (6U)\r\n#define CAN_F10R2_FB6_Msk  (0x1UL << CAN_F10R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F10R2_FB6      CAN_F10R2_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F10R2_FB7_Pos  (7U)\r\n#define CAN_F10R2_FB7_Msk  (0x1UL << CAN_F10R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F10R2_FB7      CAN_F10R2_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F10R2_FB8_Pos  (8U)\r\n#define CAN_F10R2_FB8_Msk  (0x1UL << CAN_F10R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F10R2_FB8      CAN_F10R2_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F10R2_FB9_Pos  (9U)\r\n#define CAN_F10R2_FB9_Msk  (0x1UL << CAN_F10R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F10R2_FB9      CAN_F10R2_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F10R2_FB10_Pos (10U)\r\n#define CAN_F10R2_FB10_Msk (0x1UL << CAN_F10R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F10R2_FB10     CAN_F10R2_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F10R2_FB11_Pos (11U)\r\n#define CAN_F10R2_FB11_Msk (0x1UL << CAN_F10R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F10R2_FB11     CAN_F10R2_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F10R2_FB12_Pos (12U)\r\n#define CAN_F10R2_FB12_Msk (0x1UL << CAN_F10R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F10R2_FB12     CAN_F10R2_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F10R2_FB13_Pos (13U)\r\n#define CAN_F10R2_FB13_Msk (0x1UL << CAN_F10R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F10R2_FB13     CAN_F10R2_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F10R2_FB14_Pos (14U)\r\n#define CAN_F10R2_FB14_Msk (0x1UL << CAN_F10R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F10R2_FB14     CAN_F10R2_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F10R2_FB15_Pos (15U)\r\n#define CAN_F10R2_FB15_Msk (0x1UL << CAN_F10R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F10R2_FB15     CAN_F10R2_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F10R2_FB16_Pos (16U)\r\n#define CAN_F10R2_FB16_Msk (0x1UL << CAN_F10R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F10R2_FB16     CAN_F10R2_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F10R2_FB17_Pos (17U)\r\n#define CAN_F10R2_FB17_Msk (0x1UL << CAN_F10R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F10R2_FB17     CAN_F10R2_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F10R2_FB18_Pos (18U)\r\n#define CAN_F10R2_FB18_Msk (0x1UL << CAN_F10R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F10R2_FB18     CAN_F10R2_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F10R2_FB19_Pos (19U)\r\n#define CAN_F10R2_FB19_Msk (0x1UL << CAN_F10R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F10R2_FB19     CAN_F10R2_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F10R2_FB20_Pos (20U)\r\n#define CAN_F10R2_FB20_Msk (0x1UL << CAN_F10R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F10R2_FB20     CAN_F10R2_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F10R2_FB21_Pos (21U)\r\n#define CAN_F10R2_FB21_Msk (0x1UL << CAN_F10R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F10R2_FB21     CAN_F10R2_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F10R2_FB22_Pos (22U)\r\n#define CAN_F10R2_FB22_Msk (0x1UL << CAN_F10R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F10R2_FB22     CAN_F10R2_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F10R2_FB23_Pos (23U)\r\n#define CAN_F10R2_FB23_Msk (0x1UL << CAN_F10R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F10R2_FB23     CAN_F10R2_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F10R2_FB24_Pos (24U)\r\n#define CAN_F10R2_FB24_Msk (0x1UL << CAN_F10R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F10R2_FB24     CAN_F10R2_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F10R2_FB25_Pos (25U)\r\n#define CAN_F10R2_FB25_Msk (0x1UL << CAN_F10R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F10R2_FB25     CAN_F10R2_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F10R2_FB26_Pos (26U)\r\n#define CAN_F10R2_FB26_Msk (0x1UL << CAN_F10R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F10R2_FB26     CAN_F10R2_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F10R2_FB27_Pos (27U)\r\n#define CAN_F10R2_FB27_Msk (0x1UL << CAN_F10R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F10R2_FB27     CAN_F10R2_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F10R2_FB28_Pos (28U)\r\n#define CAN_F10R2_FB28_Msk (0x1UL << CAN_F10R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F10R2_FB28     CAN_F10R2_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F10R2_FB29_Pos (29U)\r\n#define CAN_F10R2_FB29_Msk (0x1UL << CAN_F10R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F10R2_FB29     CAN_F10R2_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F10R2_FB30_Pos (30U)\r\n#define CAN_F10R2_FB30_Msk (0x1UL << CAN_F10R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F10R2_FB30     CAN_F10R2_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F10R2_FB31_Pos (31U)\r\n#define CAN_F10R2_FB31_Msk (0x1UL << CAN_F10R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F10R2_FB31     CAN_F10R2_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F11R2 register  ******************/\r\n#define CAN_F11R2_FB0_Pos  (0U)\r\n#define CAN_F11R2_FB0_Msk  (0x1UL << CAN_F11R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F11R2_FB0      CAN_F11R2_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F11R2_FB1_Pos  (1U)\r\n#define CAN_F11R2_FB1_Msk  (0x1UL << CAN_F11R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F11R2_FB1      CAN_F11R2_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F11R2_FB2_Pos  (2U)\r\n#define CAN_F11R2_FB2_Msk  (0x1UL << CAN_F11R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F11R2_FB2      CAN_F11R2_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F11R2_FB3_Pos  (3U)\r\n#define CAN_F11R2_FB3_Msk  (0x1UL << CAN_F11R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F11R2_FB3      CAN_F11R2_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F11R2_FB4_Pos  (4U)\r\n#define CAN_F11R2_FB4_Msk  (0x1UL << CAN_F11R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F11R2_FB4      CAN_F11R2_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F11R2_FB5_Pos  (5U)\r\n#define CAN_F11R2_FB5_Msk  (0x1UL << CAN_F11R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F11R2_FB5      CAN_F11R2_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F11R2_FB6_Pos  (6U)\r\n#define CAN_F11R2_FB6_Msk  (0x1UL << CAN_F11R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F11R2_FB6      CAN_F11R2_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F11R2_FB7_Pos  (7U)\r\n#define CAN_F11R2_FB7_Msk  (0x1UL << CAN_F11R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F11R2_FB7      CAN_F11R2_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F11R2_FB8_Pos  (8U)\r\n#define CAN_F11R2_FB8_Msk  (0x1UL << CAN_F11R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F11R2_FB8      CAN_F11R2_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F11R2_FB9_Pos  (9U)\r\n#define CAN_F11R2_FB9_Msk  (0x1UL << CAN_F11R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F11R2_FB9      CAN_F11R2_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F11R2_FB10_Pos (10U)\r\n#define CAN_F11R2_FB10_Msk (0x1UL << CAN_F11R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F11R2_FB10     CAN_F11R2_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F11R2_FB11_Pos (11U)\r\n#define CAN_F11R2_FB11_Msk (0x1UL << CAN_F11R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F11R2_FB11     CAN_F11R2_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F11R2_FB12_Pos (12U)\r\n#define CAN_F11R2_FB12_Msk (0x1UL << CAN_F11R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F11R2_FB12     CAN_F11R2_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F11R2_FB13_Pos (13U)\r\n#define CAN_F11R2_FB13_Msk (0x1UL << CAN_F11R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F11R2_FB13     CAN_F11R2_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F11R2_FB14_Pos (14U)\r\n#define CAN_F11R2_FB14_Msk (0x1UL << CAN_F11R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F11R2_FB14     CAN_F11R2_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F11R2_FB15_Pos (15U)\r\n#define CAN_F11R2_FB15_Msk (0x1UL << CAN_F11R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F11R2_FB15     CAN_F11R2_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F11R2_FB16_Pos (16U)\r\n#define CAN_F11R2_FB16_Msk (0x1UL << CAN_F11R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F11R2_FB16     CAN_F11R2_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F11R2_FB17_Pos (17U)\r\n#define CAN_F11R2_FB17_Msk (0x1UL << CAN_F11R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F11R2_FB17     CAN_F11R2_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F11R2_FB18_Pos (18U)\r\n#define CAN_F11R2_FB18_Msk (0x1UL << CAN_F11R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F11R2_FB18     CAN_F11R2_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F11R2_FB19_Pos (19U)\r\n#define CAN_F11R2_FB19_Msk (0x1UL << CAN_F11R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F11R2_FB19     CAN_F11R2_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F11R2_FB20_Pos (20U)\r\n#define CAN_F11R2_FB20_Msk (0x1UL << CAN_F11R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F11R2_FB20     CAN_F11R2_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F11R2_FB21_Pos (21U)\r\n#define CAN_F11R2_FB21_Msk (0x1UL << CAN_F11R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F11R2_FB21     CAN_F11R2_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F11R2_FB22_Pos (22U)\r\n#define CAN_F11R2_FB22_Msk (0x1UL << CAN_F11R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F11R2_FB22     CAN_F11R2_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F11R2_FB23_Pos (23U)\r\n#define CAN_F11R2_FB23_Msk (0x1UL << CAN_F11R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F11R2_FB23     CAN_F11R2_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F11R2_FB24_Pos (24U)\r\n#define CAN_F11R2_FB24_Msk (0x1UL << CAN_F11R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F11R2_FB24     CAN_F11R2_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F11R2_FB25_Pos (25U)\r\n#define CAN_F11R2_FB25_Msk (0x1UL << CAN_F11R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F11R2_FB25     CAN_F11R2_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F11R2_FB26_Pos (26U)\r\n#define CAN_F11R2_FB26_Msk (0x1UL << CAN_F11R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F11R2_FB26     CAN_F11R2_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F11R2_FB27_Pos (27U)\r\n#define CAN_F11R2_FB27_Msk (0x1UL << CAN_F11R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F11R2_FB27     CAN_F11R2_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F11R2_FB28_Pos (28U)\r\n#define CAN_F11R2_FB28_Msk (0x1UL << CAN_F11R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F11R2_FB28     CAN_F11R2_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F11R2_FB29_Pos (29U)\r\n#define CAN_F11R2_FB29_Msk (0x1UL << CAN_F11R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F11R2_FB29     CAN_F11R2_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F11R2_FB30_Pos (30U)\r\n#define CAN_F11R2_FB30_Msk (0x1UL << CAN_F11R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F11R2_FB30     CAN_F11R2_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F11R2_FB31_Pos (31U)\r\n#define CAN_F11R2_FB31_Msk (0x1UL << CAN_F11R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F11R2_FB31     CAN_F11R2_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F12R2 register  ******************/\r\n#define CAN_F12R2_FB0_Pos  (0U)\r\n#define CAN_F12R2_FB0_Msk  (0x1UL << CAN_F12R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F12R2_FB0      CAN_F12R2_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F12R2_FB1_Pos  (1U)\r\n#define CAN_F12R2_FB1_Msk  (0x1UL << CAN_F12R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F12R2_FB1      CAN_F12R2_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F12R2_FB2_Pos  (2U)\r\n#define CAN_F12R2_FB2_Msk  (0x1UL << CAN_F12R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F12R2_FB2      CAN_F12R2_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F12R2_FB3_Pos  (3U)\r\n#define CAN_F12R2_FB3_Msk  (0x1UL << CAN_F12R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F12R2_FB3      CAN_F12R2_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F12R2_FB4_Pos  (4U)\r\n#define CAN_F12R2_FB4_Msk  (0x1UL << CAN_F12R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F12R2_FB4      CAN_F12R2_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F12R2_FB5_Pos  (5U)\r\n#define CAN_F12R2_FB5_Msk  (0x1UL << CAN_F12R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F12R2_FB5      CAN_F12R2_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F12R2_FB6_Pos  (6U)\r\n#define CAN_F12R2_FB6_Msk  (0x1UL << CAN_F12R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F12R2_FB6      CAN_F12R2_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F12R2_FB7_Pos  (7U)\r\n#define CAN_F12R2_FB7_Msk  (0x1UL << CAN_F12R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F12R2_FB7      CAN_F12R2_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F12R2_FB8_Pos  (8U)\r\n#define CAN_F12R2_FB8_Msk  (0x1UL << CAN_F12R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F12R2_FB8      CAN_F12R2_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F12R2_FB9_Pos  (9U)\r\n#define CAN_F12R2_FB9_Msk  (0x1UL << CAN_F12R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F12R2_FB9      CAN_F12R2_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F12R2_FB10_Pos (10U)\r\n#define CAN_F12R2_FB10_Msk (0x1UL << CAN_F12R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F12R2_FB10     CAN_F12R2_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F12R2_FB11_Pos (11U)\r\n#define CAN_F12R2_FB11_Msk (0x1UL << CAN_F12R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F12R2_FB11     CAN_F12R2_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F12R2_FB12_Pos (12U)\r\n#define CAN_F12R2_FB12_Msk (0x1UL << CAN_F12R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F12R2_FB12     CAN_F12R2_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F12R2_FB13_Pos (13U)\r\n#define CAN_F12R2_FB13_Msk (0x1UL << CAN_F12R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F12R2_FB13     CAN_F12R2_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F12R2_FB14_Pos (14U)\r\n#define CAN_F12R2_FB14_Msk (0x1UL << CAN_F12R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F12R2_FB14     CAN_F12R2_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F12R2_FB15_Pos (15U)\r\n#define CAN_F12R2_FB15_Msk (0x1UL << CAN_F12R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F12R2_FB15     CAN_F12R2_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F12R2_FB16_Pos (16U)\r\n#define CAN_F12R2_FB16_Msk (0x1UL << CAN_F12R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F12R2_FB16     CAN_F12R2_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F12R2_FB17_Pos (17U)\r\n#define CAN_F12R2_FB17_Msk (0x1UL << CAN_F12R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F12R2_FB17     CAN_F12R2_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F12R2_FB18_Pos (18U)\r\n#define CAN_F12R2_FB18_Msk (0x1UL << CAN_F12R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F12R2_FB18     CAN_F12R2_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F12R2_FB19_Pos (19U)\r\n#define CAN_F12R2_FB19_Msk (0x1UL << CAN_F12R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F12R2_FB19     CAN_F12R2_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F12R2_FB20_Pos (20U)\r\n#define CAN_F12R2_FB20_Msk (0x1UL << CAN_F12R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F12R2_FB20     CAN_F12R2_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F12R2_FB21_Pos (21U)\r\n#define CAN_F12R2_FB21_Msk (0x1UL << CAN_F12R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F12R2_FB21     CAN_F12R2_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F12R2_FB22_Pos (22U)\r\n#define CAN_F12R2_FB22_Msk (0x1UL << CAN_F12R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F12R2_FB22     CAN_F12R2_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F12R2_FB23_Pos (23U)\r\n#define CAN_F12R2_FB23_Msk (0x1UL << CAN_F12R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F12R2_FB23     CAN_F12R2_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F12R2_FB24_Pos (24U)\r\n#define CAN_F12R2_FB24_Msk (0x1UL << CAN_F12R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F12R2_FB24     CAN_F12R2_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F12R2_FB25_Pos (25U)\r\n#define CAN_F12R2_FB25_Msk (0x1UL << CAN_F12R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F12R2_FB25     CAN_F12R2_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F12R2_FB26_Pos (26U)\r\n#define CAN_F12R2_FB26_Msk (0x1UL << CAN_F12R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F12R2_FB26     CAN_F12R2_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F12R2_FB27_Pos (27U)\r\n#define CAN_F12R2_FB27_Msk (0x1UL << CAN_F12R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F12R2_FB27     CAN_F12R2_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F12R2_FB28_Pos (28U)\r\n#define CAN_F12R2_FB28_Msk (0x1UL << CAN_F12R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F12R2_FB28     CAN_F12R2_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F12R2_FB29_Pos (29U)\r\n#define CAN_F12R2_FB29_Msk (0x1UL << CAN_F12R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F12R2_FB29     CAN_F12R2_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F12R2_FB30_Pos (30U)\r\n#define CAN_F12R2_FB30_Msk (0x1UL << CAN_F12R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F12R2_FB30     CAN_F12R2_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F12R2_FB31_Pos (31U)\r\n#define CAN_F12R2_FB31_Msk (0x1UL << CAN_F12R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F12R2_FB31     CAN_F12R2_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F13R2 register  ******************/\r\n#define CAN_F13R2_FB0_Pos  (0U)\r\n#define CAN_F13R2_FB0_Msk  (0x1UL << CAN_F13R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F13R2_FB0      CAN_F13R2_FB0_Msk            /*!< Filter bit 0 */\r\n#define CAN_F13R2_FB1_Pos  (1U)\r\n#define CAN_F13R2_FB1_Msk  (0x1UL << CAN_F13R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F13R2_FB1      CAN_F13R2_FB1_Msk            /*!< Filter bit 1 */\r\n#define CAN_F13R2_FB2_Pos  (2U)\r\n#define CAN_F13R2_FB2_Msk  (0x1UL << CAN_F13R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F13R2_FB2      CAN_F13R2_FB2_Msk            /*!< Filter bit 2 */\r\n#define CAN_F13R2_FB3_Pos  (3U)\r\n#define CAN_F13R2_FB3_Msk  (0x1UL << CAN_F13R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F13R2_FB3      CAN_F13R2_FB3_Msk            /*!< Filter bit 3 */\r\n#define CAN_F13R2_FB4_Pos  (4U)\r\n#define CAN_F13R2_FB4_Msk  (0x1UL << CAN_F13R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F13R2_FB4      CAN_F13R2_FB4_Msk            /*!< Filter bit 4 */\r\n#define CAN_F13R2_FB5_Pos  (5U)\r\n#define CAN_F13R2_FB5_Msk  (0x1UL << CAN_F13R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F13R2_FB5      CAN_F13R2_FB5_Msk            /*!< Filter bit 5 */\r\n#define CAN_F13R2_FB6_Pos  (6U)\r\n#define CAN_F13R2_FB6_Msk  (0x1UL << CAN_F13R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F13R2_FB6      CAN_F13R2_FB6_Msk            /*!< Filter bit 6 */\r\n#define CAN_F13R2_FB7_Pos  (7U)\r\n#define CAN_F13R2_FB7_Msk  (0x1UL << CAN_F13R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F13R2_FB7      CAN_F13R2_FB7_Msk            /*!< Filter bit 7 */\r\n#define CAN_F13R2_FB8_Pos  (8U)\r\n#define CAN_F13R2_FB8_Msk  (0x1UL << CAN_F13R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F13R2_FB8      CAN_F13R2_FB8_Msk            /*!< Filter bit 8 */\r\n#define CAN_F13R2_FB9_Pos  (9U)\r\n#define CAN_F13R2_FB9_Msk  (0x1UL << CAN_F13R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F13R2_FB9      CAN_F13R2_FB9_Msk            /*!< Filter bit 9 */\r\n#define CAN_F13R2_FB10_Pos (10U)\r\n#define CAN_F13R2_FB10_Msk (0x1UL << CAN_F13R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F13R2_FB10     CAN_F13R2_FB10_Msk            /*!< Filter bit 10 */\r\n#define CAN_F13R2_FB11_Pos (11U)\r\n#define CAN_F13R2_FB11_Msk (0x1UL << CAN_F13R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F13R2_FB11     CAN_F13R2_FB11_Msk            /*!< Filter bit 11 */\r\n#define CAN_F13R2_FB12_Pos (12U)\r\n#define CAN_F13R2_FB12_Msk (0x1UL << CAN_F13R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F13R2_FB12     CAN_F13R2_FB12_Msk            /*!< Filter bit 12 */\r\n#define CAN_F13R2_FB13_Pos (13U)\r\n#define CAN_F13R2_FB13_Msk (0x1UL << CAN_F13R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F13R2_FB13     CAN_F13R2_FB13_Msk            /*!< Filter bit 13 */\r\n#define CAN_F13R2_FB14_Pos (14U)\r\n#define CAN_F13R2_FB14_Msk (0x1UL << CAN_F13R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F13R2_FB14     CAN_F13R2_FB14_Msk            /*!< Filter bit 14 */\r\n#define CAN_F13R2_FB15_Pos (15U)\r\n#define CAN_F13R2_FB15_Msk (0x1UL << CAN_F13R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F13R2_FB15     CAN_F13R2_FB15_Msk            /*!< Filter bit 15 */\r\n#define CAN_F13R2_FB16_Pos (16U)\r\n#define CAN_F13R2_FB16_Msk (0x1UL << CAN_F13R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F13R2_FB16     CAN_F13R2_FB16_Msk            /*!< Filter bit 16 */\r\n#define CAN_F13R2_FB17_Pos (17U)\r\n#define CAN_F13R2_FB17_Msk (0x1UL << CAN_F13R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F13R2_FB17     CAN_F13R2_FB17_Msk            /*!< Filter bit 17 */\r\n#define CAN_F13R2_FB18_Pos (18U)\r\n#define CAN_F13R2_FB18_Msk (0x1UL << CAN_F13R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F13R2_FB18     CAN_F13R2_FB18_Msk            /*!< Filter bit 18 */\r\n#define CAN_F13R2_FB19_Pos (19U)\r\n#define CAN_F13R2_FB19_Msk (0x1UL << CAN_F13R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F13R2_FB19     CAN_F13R2_FB19_Msk            /*!< Filter bit 19 */\r\n#define CAN_F13R2_FB20_Pos (20U)\r\n#define CAN_F13R2_FB20_Msk (0x1UL << CAN_F13R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F13R2_FB20     CAN_F13R2_FB20_Msk            /*!< Filter bit 20 */\r\n#define CAN_F13R2_FB21_Pos (21U)\r\n#define CAN_F13R2_FB21_Msk (0x1UL << CAN_F13R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F13R2_FB21     CAN_F13R2_FB21_Msk            /*!< Filter bit 21 */\r\n#define CAN_F13R2_FB22_Pos (22U)\r\n#define CAN_F13R2_FB22_Msk (0x1UL << CAN_F13R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F13R2_FB22     CAN_F13R2_FB22_Msk            /*!< Filter bit 22 */\r\n#define CAN_F13R2_FB23_Pos (23U)\r\n#define CAN_F13R2_FB23_Msk (0x1UL << CAN_F13R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F13R2_FB23     CAN_F13R2_FB23_Msk            /*!< Filter bit 23 */\r\n#define CAN_F13R2_FB24_Pos (24U)\r\n#define CAN_F13R2_FB24_Msk (0x1UL << CAN_F13R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F13R2_FB24     CAN_F13R2_FB24_Msk            /*!< Filter bit 24 */\r\n#define CAN_F13R2_FB25_Pos (25U)\r\n#define CAN_F13R2_FB25_Msk (0x1UL << CAN_F13R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F13R2_FB25     CAN_F13R2_FB25_Msk            /*!< Filter bit 25 */\r\n#define CAN_F13R2_FB26_Pos (26U)\r\n#define CAN_F13R2_FB26_Msk (0x1UL << CAN_F13R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F13R2_FB26     CAN_F13R2_FB26_Msk            /*!< Filter bit 26 */\r\n#define CAN_F13R2_FB27_Pos (27U)\r\n#define CAN_F13R2_FB27_Msk (0x1UL << CAN_F13R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F13R2_FB27     CAN_F13R2_FB27_Msk            /*!< Filter bit 27 */\r\n#define CAN_F13R2_FB28_Pos (28U)\r\n#define CAN_F13R2_FB28_Msk (0x1UL << CAN_F13R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F13R2_FB28     CAN_F13R2_FB28_Msk            /*!< Filter bit 28 */\r\n#define CAN_F13R2_FB29_Pos (29U)\r\n#define CAN_F13R2_FB29_Msk (0x1UL << CAN_F13R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F13R2_FB29     CAN_F13R2_FB29_Msk            /*!< Filter bit 29 */\r\n#define CAN_F13R2_FB30_Pos (30U)\r\n#define CAN_F13R2_FB30_Msk (0x1UL << CAN_F13R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F13R2_FB30     CAN_F13R2_FB30_Msk            /*!< Filter bit 30 */\r\n#define CAN_F13R2_FB31_Pos (31U)\r\n#define CAN_F13R2_FB31_Msk (0x1UL << CAN_F13R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F13R2_FB31     CAN_F13R2_FB31_Msk            /*!< Filter bit 31 */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                        Serial Peripheral Interface                         */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for SPI_CR1 register  ********************/\r\n#define SPI_CR1_CPHA_Pos (0U)\r\n#define SPI_CR1_CPHA_Msk (0x1UL << SPI_CR1_CPHA_Pos) /*!< 0x00000001 */\r\n#define SPI_CR1_CPHA     SPI_CR1_CPHA_Msk            /*!< Clock Phase */\r\n#define SPI_CR1_CPOL_Pos (1U)\r\n#define SPI_CR1_CPOL_Msk (0x1UL << SPI_CR1_CPOL_Pos) /*!< 0x00000002 */\r\n#define SPI_CR1_CPOL     SPI_CR1_CPOL_Msk            /*!< Clock Polarity */\r\n#define SPI_CR1_MSTR_Pos (2U)\r\n#define SPI_CR1_MSTR_Msk (0x1UL << SPI_CR1_MSTR_Pos) /*!< 0x00000004 */\r\n#define SPI_CR1_MSTR     SPI_CR1_MSTR_Msk            /*!< Master Selection */\r\n\r\n#define SPI_CR1_BR_Pos (3U)\r\n#define SPI_CR1_BR_Msk (0x7UL << SPI_CR1_BR_Pos) /*!< 0x00000038 */\r\n#define SPI_CR1_BR     SPI_CR1_BR_Msk            /*!< BR[2:0] bits (Baud Rate Control) */\r\n#define SPI_CR1_BR_0   (0x1UL << SPI_CR1_BR_Pos) /*!< 0x00000008 */\r\n#define SPI_CR1_BR_1   (0x2UL << SPI_CR1_BR_Pos) /*!< 0x00000010 */\r\n#define SPI_CR1_BR_2   (0x4UL << SPI_CR1_BR_Pos) /*!< 0x00000020 */\r\n\r\n#define SPI_CR1_SPE_Pos      (6U)\r\n#define SPI_CR1_SPE_Msk      (0x1UL << SPI_CR1_SPE_Pos) /*!< 0x00000040 */\r\n#define SPI_CR1_SPE          SPI_CR1_SPE_Msk            /*!< SPI Enable */\r\n#define SPI_CR1_LSBFIRST_Pos (7U)\r\n#define SPI_CR1_LSBFIRST_Msk (0x1UL << SPI_CR1_LSBFIRST_Pos) /*!< 0x00000080 */\r\n#define SPI_CR1_LSBFIRST     SPI_CR1_LSBFIRST_Msk            /*!< Frame Format */\r\n#define SPI_CR1_SSI_Pos      (8U)\r\n#define SPI_CR1_SSI_Msk      (0x1UL << SPI_CR1_SSI_Pos) /*!< 0x00000100 */\r\n#define SPI_CR1_SSI          SPI_CR1_SSI_Msk            /*!< Internal slave select */\r\n#define SPI_CR1_SSM_Pos      (9U)\r\n#define SPI_CR1_SSM_Msk      (0x1UL << SPI_CR1_SSM_Pos) /*!< 0x00000200 */\r\n#define SPI_CR1_SSM          SPI_CR1_SSM_Msk            /*!< Software slave management */\r\n#define SPI_CR1_RXONLY_Pos   (10U)\r\n#define SPI_CR1_RXONLY_Msk   (0x1UL << SPI_CR1_RXONLY_Pos) /*!< 0x00000400 */\r\n#define SPI_CR1_RXONLY       SPI_CR1_RXONLY_Msk            /*!< Receive only */\r\n#define SPI_CR1_DFF_Pos      (11U)\r\n#define SPI_CR1_DFF_Msk      (0x1UL << SPI_CR1_DFF_Pos) /*!< 0x00000800 */\r\n#define SPI_CR1_DFF          SPI_CR1_DFF_Msk            /*!< Data Frame Format */\r\n#define SPI_CR1_CRCNEXT_Pos  (12U)\r\n#define SPI_CR1_CRCNEXT_Msk  (0x1UL << SPI_CR1_CRCNEXT_Pos) /*!< 0x00001000 */\r\n#define SPI_CR1_CRCNEXT      SPI_CR1_CRCNEXT_Msk            /*!< Transmit CRC next */\r\n#define SPI_CR1_CRCEN_Pos    (13U)\r\n#define SPI_CR1_CRCEN_Msk    (0x1UL << SPI_CR1_CRCEN_Pos) /*!< 0x00002000 */\r\n#define SPI_CR1_CRCEN        SPI_CR1_CRCEN_Msk            /*!< Hardware CRC calculation enable */\r\n#define SPI_CR1_BIDIOE_Pos   (14U)\r\n#define SPI_CR1_BIDIOE_Msk   (0x1UL << SPI_CR1_BIDIOE_Pos) /*!< 0x00004000 */\r\n#define SPI_CR1_BIDIOE       SPI_CR1_BIDIOE_Msk            /*!< Output enable in bidirectional mode */\r\n#define SPI_CR1_BIDIMODE_Pos (15U)\r\n#define SPI_CR1_BIDIMODE_Msk (0x1UL << SPI_CR1_BIDIMODE_Pos) /*!< 0x00008000 */\r\n#define SPI_CR1_BIDIMODE     SPI_CR1_BIDIMODE_Msk            /*!< Bidirectional data mode enable */\r\n\r\n/*******************  Bit definition for SPI_CR2 register  ********************/\r\n#define SPI_CR2_RXDMAEN_Pos (0U)\r\n#define SPI_CR2_RXDMAEN_Msk (0x1UL << SPI_CR2_RXDMAEN_Pos) /*!< 0x00000001 */\r\n#define SPI_CR2_RXDMAEN     SPI_CR2_RXDMAEN_Msk            /*!< Rx Buffer DMA Enable */\r\n#define SPI_CR2_TXDMAEN_Pos (1U)\r\n#define SPI_CR2_TXDMAEN_Msk (0x1UL << SPI_CR2_TXDMAEN_Pos) /*!< 0x00000002 */\r\n#define SPI_CR2_TXDMAEN     SPI_CR2_TXDMAEN_Msk            /*!< Tx Buffer DMA Enable */\r\n#define SPI_CR2_SSOE_Pos    (2U)\r\n#define SPI_CR2_SSOE_Msk    (0x1UL << SPI_CR2_SSOE_Pos) /*!< 0x00000004 */\r\n#define SPI_CR2_SSOE        SPI_CR2_SSOE_Msk            /*!< SS Output Enable */\r\n#define SPI_CR2_ERRIE_Pos   (5U)\r\n#define SPI_CR2_ERRIE_Msk   (0x1UL << SPI_CR2_ERRIE_Pos) /*!< 0x00000020 */\r\n#define SPI_CR2_ERRIE       SPI_CR2_ERRIE_Msk            /*!< Error Interrupt Enable */\r\n#define SPI_CR2_RXNEIE_Pos  (6U)\r\n#define SPI_CR2_RXNEIE_Msk  (0x1UL << SPI_CR2_RXNEIE_Pos) /*!< 0x00000040 */\r\n#define SPI_CR2_RXNEIE      SPI_CR2_RXNEIE_Msk            /*!< RX buffer Not Empty Interrupt Enable */\r\n#define SPI_CR2_TXEIE_Pos   (7U)\r\n#define SPI_CR2_TXEIE_Msk   (0x1UL << SPI_CR2_TXEIE_Pos) /*!< 0x00000080 */\r\n#define SPI_CR2_TXEIE       SPI_CR2_TXEIE_Msk            /*!< Tx buffer Empty Interrupt Enable */\r\n\r\n/********************  Bit definition for SPI_SR register  ********************/\r\n#define SPI_SR_RXNE_Pos   (0U)\r\n#define SPI_SR_RXNE_Msk   (0x1UL << SPI_SR_RXNE_Pos) /*!< 0x00000001 */\r\n#define SPI_SR_RXNE       SPI_SR_RXNE_Msk            /*!< Receive buffer Not Empty */\r\n#define SPI_SR_TXE_Pos    (1U)\r\n#define SPI_SR_TXE_Msk    (0x1UL << SPI_SR_TXE_Pos) /*!< 0x00000002 */\r\n#define SPI_SR_TXE        SPI_SR_TXE_Msk            /*!< Transmit buffer Empty */\r\n#define SPI_SR_CHSIDE_Pos (2U)\r\n#define SPI_SR_CHSIDE_Msk (0x1UL << SPI_SR_CHSIDE_Pos) /*!< 0x00000004 */\r\n#define SPI_SR_CHSIDE     SPI_SR_CHSIDE_Msk            /*!< Channel side */\r\n#define SPI_SR_UDR_Pos    (3U)\r\n#define SPI_SR_UDR_Msk    (0x1UL << SPI_SR_UDR_Pos) /*!< 0x00000008 */\r\n#define SPI_SR_UDR        SPI_SR_UDR_Msk            /*!< Underrun flag */\r\n#define SPI_SR_CRCERR_Pos (4U)\r\n#define SPI_SR_CRCERR_Msk (0x1UL << SPI_SR_CRCERR_Pos) /*!< 0x00000010 */\r\n#define SPI_SR_CRCERR     SPI_SR_CRCERR_Msk            /*!< CRC Error flag */\r\n#define SPI_SR_MODF_Pos   (5U)\r\n#define SPI_SR_MODF_Msk   (0x1UL << SPI_SR_MODF_Pos) /*!< 0x00000020 */\r\n#define SPI_SR_MODF       SPI_SR_MODF_Msk            /*!< Mode fault */\r\n#define SPI_SR_OVR_Pos    (6U)\r\n#define SPI_SR_OVR_Msk    (0x1UL << SPI_SR_OVR_Pos) /*!< 0x00000040 */\r\n#define SPI_SR_OVR        SPI_SR_OVR_Msk            /*!< Overrun flag */\r\n#define SPI_SR_BSY_Pos    (7U)\r\n#define SPI_SR_BSY_Msk    (0x1UL << SPI_SR_BSY_Pos) /*!< 0x00000080 */\r\n#define SPI_SR_BSY        SPI_SR_BSY_Msk            /*!< Busy flag */\r\n\r\n/********************  Bit definition for SPI_DR register  ********************/\r\n#define SPI_DR_DR_Pos (0U)\r\n#define SPI_DR_DR_Msk (0xFFFFUL << SPI_DR_DR_Pos) /*!< 0x0000FFFF */\r\n#define SPI_DR_DR     SPI_DR_DR_Msk               /*!< Data Register */\r\n\r\n/*******************  Bit definition for SPI_CRCPR register  ******************/\r\n#define SPI_CRCPR_CRCPOLY_Pos (0U)\r\n#define SPI_CRCPR_CRCPOLY_Msk (0xFFFFUL << SPI_CRCPR_CRCPOLY_Pos) /*!< 0x0000FFFF */\r\n#define SPI_CRCPR_CRCPOLY     SPI_CRCPR_CRCPOLY_Msk               /*!< CRC polynomial register */\r\n\r\n/******************  Bit definition for SPI_RXCRCR register  ******************/\r\n#define SPI_RXCRCR_RXCRC_Pos (0U)\r\n#define SPI_RXCRCR_RXCRC_Msk (0xFFFFUL << SPI_RXCRCR_RXCRC_Pos) /*!< 0x0000FFFF */\r\n#define SPI_RXCRCR_RXCRC     SPI_RXCRCR_RXCRC_Msk               /*!< Rx CRC Register */\r\n\r\n/******************  Bit definition for SPI_TXCRCR register  ******************/\r\n#define SPI_TXCRCR_TXCRC_Pos (0U)\r\n#define SPI_TXCRCR_TXCRC_Msk (0xFFFFUL << SPI_TXCRCR_TXCRC_Pos) /*!< 0x0000FFFF */\r\n#define SPI_TXCRCR_TXCRC     SPI_TXCRCR_TXCRC_Msk               /*!< Tx CRC Register */\r\n\r\n#define SPI_I2SCFGR_I2SMOD_Pos (11U)\r\n#define SPI_I2SCFGR_I2SMOD_Msk (0x1UL << SPI_I2SCFGR_I2SMOD_Pos) /*!< 0x00000800 */\r\n#define SPI_I2SCFGR_I2SMOD     SPI_I2SCFGR_I2SMOD_Msk            /*!< I2S mode selection */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                      Inter-integrated Circuit Interface                    */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for I2C_CR1 register  ********************/\r\n#define I2C_CR1_PE_Pos        (0U)\r\n#define I2C_CR1_PE_Msk        (0x1UL << I2C_CR1_PE_Pos) /*!< 0x00000001 */\r\n#define I2C_CR1_PE            I2C_CR1_PE_Msk            /*!< Peripheral Enable */\r\n#define I2C_CR1_SMBUS_Pos     (1U)\r\n#define I2C_CR1_SMBUS_Msk     (0x1UL << I2C_CR1_SMBUS_Pos) /*!< 0x00000002 */\r\n#define I2C_CR1_SMBUS         I2C_CR1_SMBUS_Msk            /*!< SMBus Mode */\r\n#define I2C_CR1_SMBTYPE_Pos   (3U)\r\n#define I2C_CR1_SMBTYPE_Msk   (0x1UL << I2C_CR1_SMBTYPE_Pos) /*!< 0x00000008 */\r\n#define I2C_CR1_SMBTYPE       I2C_CR1_SMBTYPE_Msk            /*!< SMBus Type */\r\n#define I2C_CR1_ENARP_Pos     (4U)\r\n#define I2C_CR1_ENARP_Msk     (0x1UL << I2C_CR1_ENARP_Pos) /*!< 0x00000010 */\r\n#define I2C_CR1_ENARP         I2C_CR1_ENARP_Msk            /*!< ARP Enable */\r\n#define I2C_CR1_ENPEC_Pos     (5U)\r\n#define I2C_CR1_ENPEC_Msk     (0x1UL << I2C_CR1_ENPEC_Pos) /*!< 0x00000020 */\r\n#define I2C_CR1_ENPEC         I2C_CR1_ENPEC_Msk            /*!< PEC Enable */\r\n#define I2C_CR1_ENGC_Pos      (6U)\r\n#define I2C_CR1_ENGC_Msk      (0x1UL << I2C_CR1_ENGC_Pos) /*!< 0x00000040 */\r\n#define I2C_CR1_ENGC          I2C_CR1_ENGC_Msk            /*!< General Call Enable */\r\n#define I2C_CR1_NOSTRETCH_Pos (7U)\r\n#define I2C_CR1_NOSTRETCH_Msk (0x1UL << I2C_CR1_NOSTRETCH_Pos) /*!< 0x00000080 */\r\n#define I2C_CR1_NOSTRETCH     I2C_CR1_NOSTRETCH_Msk            /*!< Clock Stretching Disable (Slave mode) */\r\n#define I2C_CR1_START_Pos     (8U)\r\n#define I2C_CR1_START_Msk     (0x1UL << I2C_CR1_START_Pos) /*!< 0x00000100 */\r\n#define I2C_CR1_START         I2C_CR1_START_Msk            /*!< Start Generation */\r\n#define I2C_CR1_STOP_Pos      (9U)\r\n#define I2C_CR1_STOP_Msk      (0x1UL << I2C_CR1_STOP_Pos) /*!< 0x00000200 */\r\n#define I2C_CR1_STOP          I2C_CR1_STOP_Msk            /*!< Stop Generation */\r\n#define I2C_CR1_ACK_Pos       (10U)\r\n#define I2C_CR1_ACK_Msk       (0x1UL << I2C_CR1_ACK_Pos) /*!< 0x00000400 */\r\n#define I2C_CR1_ACK           I2C_CR1_ACK_Msk            /*!< Acknowledge Enable */\r\n#define I2C_CR1_POS_Pos       (11U)\r\n#define I2C_CR1_POS_Msk       (0x1UL << I2C_CR1_POS_Pos) /*!< 0x00000800 */\r\n#define I2C_CR1_POS           I2C_CR1_POS_Msk            /*!< Acknowledge/PEC Position (for data reception) */\r\n#define I2C_CR1_PEC_Pos       (12U)\r\n#define I2C_CR1_PEC_Msk       (0x1UL << I2C_CR1_PEC_Pos) /*!< 0x00001000 */\r\n#define I2C_CR1_PEC           I2C_CR1_PEC_Msk            /*!< Packet Error Checking */\r\n#define I2C_CR1_ALERT_Pos     (13U)\r\n#define I2C_CR1_ALERT_Msk     (0x1UL << I2C_CR1_ALERT_Pos) /*!< 0x00002000 */\r\n#define I2C_CR1_ALERT         I2C_CR1_ALERT_Msk            /*!< SMBus Alert */\r\n#define I2C_CR1_SWRST_Pos     (15U)\r\n#define I2C_CR1_SWRST_Msk     (0x1UL << I2C_CR1_SWRST_Pos) /*!< 0x00008000 */\r\n#define I2C_CR1_SWRST         I2C_CR1_SWRST_Msk            /*!< Software Reset */\r\n\r\n/*******************  Bit definition for I2C_CR2 register  ********************/\r\n#define I2C_CR2_FREQ_Pos (0U)\r\n#define I2C_CR2_FREQ_Msk (0x3FUL << I2C_CR2_FREQ_Pos) /*!< 0x0000003F */\r\n#define I2C_CR2_FREQ     I2C_CR2_FREQ_Msk             /*!< FREQ[5:0] bits (Peripheral Clock Frequency) */\r\n#define I2C_CR2_FREQ_0   (0x01UL << I2C_CR2_FREQ_Pos) /*!< 0x00000001 */\r\n#define I2C_CR2_FREQ_1   (0x02UL << I2C_CR2_FREQ_Pos) /*!< 0x00000002 */\r\n#define I2C_CR2_FREQ_2   (0x04UL << I2C_CR2_FREQ_Pos) /*!< 0x00000004 */\r\n#define I2C_CR2_FREQ_3   (0x08UL << I2C_CR2_FREQ_Pos) /*!< 0x00000008 */\r\n#define I2C_CR2_FREQ_4   (0x10UL << I2C_CR2_FREQ_Pos) /*!< 0x00000010 */\r\n#define I2C_CR2_FREQ_5   (0x20UL << I2C_CR2_FREQ_Pos) /*!< 0x00000020 */\r\n\r\n#define I2C_CR2_ITERREN_Pos (8U)\r\n#define I2C_CR2_ITERREN_Msk (0x1UL << I2C_CR2_ITERREN_Pos) /*!< 0x00000100 */\r\n#define I2C_CR2_ITERREN     I2C_CR2_ITERREN_Msk            /*!< Error Interrupt Enable */\r\n#define I2C_CR2_ITEVTEN_Pos (9U)\r\n#define I2C_CR2_ITEVTEN_Msk (0x1UL << I2C_CR2_ITEVTEN_Pos) /*!< 0x00000200 */\r\n#define I2C_CR2_ITEVTEN     I2C_CR2_ITEVTEN_Msk            /*!< Event Interrupt Enable */\r\n#define I2C_CR2_ITBUFEN_Pos (10U)\r\n#define I2C_CR2_ITBUFEN_Msk (0x1UL << I2C_CR2_ITBUFEN_Pos) /*!< 0x00000400 */\r\n#define I2C_CR2_ITBUFEN     I2C_CR2_ITBUFEN_Msk            /*!< Buffer Interrupt Enable */\r\n#define I2C_CR2_DMAEN_Pos   (11U)\r\n#define I2C_CR2_DMAEN_Msk   (0x1UL << I2C_CR2_DMAEN_Pos) /*!< 0x00000800 */\r\n#define I2C_CR2_DMAEN       I2C_CR2_DMAEN_Msk            /*!< DMA Requests Enable */\r\n#define I2C_CR2_LAST_Pos    (12U)\r\n#define I2C_CR2_LAST_Msk    (0x1UL << I2C_CR2_LAST_Pos) /*!< 0x00001000 */\r\n#define I2C_CR2_LAST        I2C_CR2_LAST_Msk            /*!< DMA Last Transfer */\r\n\r\n/*******************  Bit definition for I2C_OAR1 register  *******************/\r\n#define I2C_OAR1_ADD1_7 0x000000FEU /*!< Interface Address */\r\n#define I2C_OAR1_ADD8_9 0x00000300U /*!< Interface Address */\r\n\r\n#define I2C_OAR1_ADD0_Pos (0U)\r\n#define I2C_OAR1_ADD0_Msk (0x1UL << I2C_OAR1_ADD0_Pos) /*!< 0x00000001 */\r\n#define I2C_OAR1_ADD0     I2C_OAR1_ADD0_Msk            /*!< Bit 0 */\r\n#define I2C_OAR1_ADD1_Pos (1U)\r\n#define I2C_OAR1_ADD1_Msk (0x1UL << I2C_OAR1_ADD1_Pos) /*!< 0x00000002 */\r\n#define I2C_OAR1_ADD1     I2C_OAR1_ADD1_Msk            /*!< Bit 1 */\r\n#define I2C_OAR1_ADD2_Pos (2U)\r\n#define I2C_OAR1_ADD2_Msk (0x1UL << I2C_OAR1_ADD2_Pos) /*!< 0x00000004 */\r\n#define I2C_OAR1_ADD2     I2C_OAR1_ADD2_Msk            /*!< Bit 2 */\r\n#define I2C_OAR1_ADD3_Pos (3U)\r\n#define I2C_OAR1_ADD3_Msk (0x1UL << I2C_OAR1_ADD3_Pos) /*!< 0x00000008 */\r\n#define I2C_OAR1_ADD3     I2C_OAR1_ADD3_Msk            /*!< Bit 3 */\r\n#define I2C_OAR1_ADD4_Pos (4U)\r\n#define I2C_OAR1_ADD4_Msk (0x1UL << I2C_OAR1_ADD4_Pos) /*!< 0x00000010 */\r\n#define I2C_OAR1_ADD4     I2C_OAR1_ADD4_Msk            /*!< Bit 4 */\r\n#define I2C_OAR1_ADD5_Pos (5U)\r\n#define I2C_OAR1_ADD5_Msk (0x1UL << I2C_OAR1_ADD5_Pos) /*!< 0x00000020 */\r\n#define I2C_OAR1_ADD5     I2C_OAR1_ADD5_Msk            /*!< Bit 5 */\r\n#define I2C_OAR1_ADD6_Pos (6U)\r\n#define I2C_OAR1_ADD6_Msk (0x1UL << I2C_OAR1_ADD6_Pos) /*!< 0x00000040 */\r\n#define I2C_OAR1_ADD6     I2C_OAR1_ADD6_Msk            /*!< Bit 6 */\r\n#define I2C_OAR1_ADD7_Pos (7U)\r\n#define I2C_OAR1_ADD7_Msk (0x1UL << I2C_OAR1_ADD7_Pos) /*!< 0x00000080 */\r\n#define I2C_OAR1_ADD7     I2C_OAR1_ADD7_Msk            /*!< Bit 7 */\r\n#define I2C_OAR1_ADD8_Pos (8U)\r\n#define I2C_OAR1_ADD8_Msk (0x1UL << I2C_OAR1_ADD8_Pos) /*!< 0x00000100 */\r\n#define I2C_OAR1_ADD8     I2C_OAR1_ADD8_Msk            /*!< Bit 8 */\r\n#define I2C_OAR1_ADD9_Pos (9U)\r\n#define I2C_OAR1_ADD9_Msk (0x1UL << I2C_OAR1_ADD9_Pos) /*!< 0x00000200 */\r\n#define I2C_OAR1_ADD9     I2C_OAR1_ADD9_Msk            /*!< Bit 9 */\r\n\r\n#define I2C_OAR1_ADDMODE_Pos (15U)\r\n#define I2C_OAR1_ADDMODE_Msk (0x1UL << I2C_OAR1_ADDMODE_Pos) /*!< 0x00008000 */\r\n#define I2C_OAR1_ADDMODE     I2C_OAR1_ADDMODE_Msk            /*!< Addressing Mode (Slave mode) */\r\n\r\n/*******************  Bit definition for I2C_OAR2 register  *******************/\r\n#define I2C_OAR2_ENDUAL_Pos (0U)\r\n#define I2C_OAR2_ENDUAL_Msk (0x1UL << I2C_OAR2_ENDUAL_Pos) /*!< 0x00000001 */\r\n#define I2C_OAR2_ENDUAL     I2C_OAR2_ENDUAL_Msk            /*!< Dual addressing mode enable */\r\n#define I2C_OAR2_ADD2_Pos   (1U)\r\n#define I2C_OAR2_ADD2_Msk   (0x7FUL << I2C_OAR2_ADD2_Pos) /*!< 0x000000FE */\r\n#define I2C_OAR2_ADD2       I2C_OAR2_ADD2_Msk             /*!< Interface address */\r\n\r\n/********************  Bit definition for I2C_DR register  ********************/\r\n#define I2C_DR_DR_Pos (0U)\r\n#define I2C_DR_DR_Msk (0xFFUL << I2C_DR_DR_Pos) /*!< 0x000000FF */\r\n#define I2C_DR_DR     I2C_DR_DR_Msk             /*!< 8-bit Data Register         */\r\n\r\n/*******************  Bit definition for I2C_SR1 register  ********************/\r\n#define I2C_SR1_SB_Pos       (0U)\r\n#define I2C_SR1_SB_Msk       (0x1UL << I2C_SR1_SB_Pos) /*!< 0x00000001 */\r\n#define I2C_SR1_SB           I2C_SR1_SB_Msk            /*!< Start Bit (Master mode) */\r\n#define I2C_SR1_ADDR_Pos     (1U)\r\n#define I2C_SR1_ADDR_Msk     (0x1UL << I2C_SR1_ADDR_Pos) /*!< 0x00000002 */\r\n#define I2C_SR1_ADDR         I2C_SR1_ADDR_Msk            /*!< Address sent (master mode)/matched (slave mode) */\r\n#define I2C_SR1_BTF_Pos      (2U)\r\n#define I2C_SR1_BTF_Msk      (0x1UL << I2C_SR1_BTF_Pos) /*!< 0x00000004 */\r\n#define I2C_SR1_BTF          I2C_SR1_BTF_Msk            /*!< Byte Transfer Finished */\r\n#define I2C_SR1_ADD10_Pos    (3U)\r\n#define I2C_SR1_ADD10_Msk    (0x1UL << I2C_SR1_ADD10_Pos) /*!< 0x00000008 */\r\n#define I2C_SR1_ADD10        I2C_SR1_ADD10_Msk            /*!< 10-bit header sent (Master mode) */\r\n#define I2C_SR1_STOPF_Pos    (4U)\r\n#define I2C_SR1_STOPF_Msk    (0x1UL << I2C_SR1_STOPF_Pos) /*!< 0x00000010 */\r\n#define I2C_SR1_STOPF        I2C_SR1_STOPF_Msk            /*!< Stop detection (Slave mode) */\r\n#define I2C_SR1_RXNE_Pos     (6U)\r\n#define I2C_SR1_RXNE_Msk     (0x1UL << I2C_SR1_RXNE_Pos) /*!< 0x00000040 */\r\n#define I2C_SR1_RXNE         I2C_SR1_RXNE_Msk            /*!< Data Register not Empty (receivers) */\r\n#define I2C_SR1_TXE_Pos      (7U)\r\n#define I2C_SR1_TXE_Msk      (0x1UL << I2C_SR1_TXE_Pos) /*!< 0x00000080 */\r\n#define I2C_SR1_TXE          I2C_SR1_TXE_Msk            /*!< Data Register Empty (transmitters) */\r\n#define I2C_SR1_BERR_Pos     (8U)\r\n#define I2C_SR1_BERR_Msk     (0x1UL << I2C_SR1_BERR_Pos) /*!< 0x00000100 */\r\n#define I2C_SR1_BERR         I2C_SR1_BERR_Msk            /*!< Bus Error */\r\n#define I2C_SR1_ARLO_Pos     (9U)\r\n#define I2C_SR1_ARLO_Msk     (0x1UL << I2C_SR1_ARLO_Pos) /*!< 0x00000200 */\r\n#define I2C_SR1_ARLO         I2C_SR1_ARLO_Msk            /*!< Arbitration Lost (master mode) */\r\n#define I2C_SR1_AF_Pos       (10U)\r\n#define I2C_SR1_AF_Msk       (0x1UL << I2C_SR1_AF_Pos) /*!< 0x00000400 */\r\n#define I2C_SR1_AF           I2C_SR1_AF_Msk            /*!< Acknowledge Failure */\r\n#define I2C_SR1_OVR_Pos      (11U)\r\n#define I2C_SR1_OVR_Msk      (0x1UL << I2C_SR1_OVR_Pos) /*!< 0x00000800 */\r\n#define I2C_SR1_OVR          I2C_SR1_OVR_Msk            /*!< Overrun/Underrun */\r\n#define I2C_SR1_PECERR_Pos   (12U)\r\n#define I2C_SR1_PECERR_Msk   (0x1UL << I2C_SR1_PECERR_Pos) /*!< 0x00001000 */\r\n#define I2C_SR1_PECERR       I2C_SR1_PECERR_Msk            /*!< PEC Error in reception */\r\n#define I2C_SR1_TIMEOUT_Pos  (14U)\r\n#define I2C_SR1_TIMEOUT_Msk  (0x1UL << I2C_SR1_TIMEOUT_Pos) /*!< 0x00004000 */\r\n#define I2C_SR1_TIMEOUT      I2C_SR1_TIMEOUT_Msk            /*!< Timeout or Tlow Error */\r\n#define I2C_SR1_SMBALERT_Pos (15U)\r\n#define I2C_SR1_SMBALERT_Msk (0x1UL << I2C_SR1_SMBALERT_Pos) /*!< 0x00008000 */\r\n#define I2C_SR1_SMBALERT     I2C_SR1_SMBALERT_Msk            /*!< SMBus Alert */\r\n\r\n/*******************  Bit definition for I2C_SR2 register  ********************/\r\n#define I2C_SR2_MSL_Pos        (0U)\r\n#define I2C_SR2_MSL_Msk        (0x1UL << I2C_SR2_MSL_Pos) /*!< 0x00000001 */\r\n#define I2C_SR2_MSL            I2C_SR2_MSL_Msk            /*!< Master/Slave */\r\n#define I2C_SR2_BUSY_Pos       (1U)\r\n#define I2C_SR2_BUSY_Msk       (0x1UL << I2C_SR2_BUSY_Pos) /*!< 0x00000002 */\r\n#define I2C_SR2_BUSY           I2C_SR2_BUSY_Msk            /*!< Bus Busy */\r\n#define I2C_SR2_TRA_Pos        (2U)\r\n#define I2C_SR2_TRA_Msk        (0x1UL << I2C_SR2_TRA_Pos) /*!< 0x00000004 */\r\n#define I2C_SR2_TRA            I2C_SR2_TRA_Msk            /*!< Transmitter/Receiver */\r\n#define I2C_SR2_GENCALL_Pos    (4U)\r\n#define I2C_SR2_GENCALL_Msk    (0x1UL << I2C_SR2_GENCALL_Pos) /*!< 0x00000010 */\r\n#define I2C_SR2_GENCALL        I2C_SR2_GENCALL_Msk            /*!< General Call Address (Slave mode) */\r\n#define I2C_SR2_SMBDEFAULT_Pos (5U)\r\n#define I2C_SR2_SMBDEFAULT_Msk (0x1UL << I2C_SR2_SMBDEFAULT_Pos) /*!< 0x00000020 */\r\n#define I2C_SR2_SMBDEFAULT     I2C_SR2_SMBDEFAULT_Msk            /*!< SMBus Device Default Address (Slave mode) */\r\n#define I2C_SR2_SMBHOST_Pos    (6U)\r\n#define I2C_SR2_SMBHOST_Msk    (0x1UL << I2C_SR2_SMBHOST_Pos) /*!< 0x00000040 */\r\n#define I2C_SR2_SMBHOST        I2C_SR2_SMBHOST_Msk            /*!< SMBus Host Header (Slave mode) */\r\n#define I2C_SR2_DUALF_Pos      (7U)\r\n#define I2C_SR2_DUALF_Msk      (0x1UL << I2C_SR2_DUALF_Pos) /*!< 0x00000080 */\r\n#define I2C_SR2_DUALF          I2C_SR2_DUALF_Msk            /*!< Dual Flag (Slave mode) */\r\n#define I2C_SR2_PEC_Pos        (8U)\r\n#define I2C_SR2_PEC_Msk        (0xFFUL << I2C_SR2_PEC_Pos) /*!< 0x0000FF00 */\r\n#define I2C_SR2_PEC            I2C_SR2_PEC_Msk             /*!< Packet Error Checking Register */\r\n\r\n/*******************  Bit definition for I2C_CCR register  ********************/\r\n#define I2C_CCR_CCR_Pos  (0U)\r\n#define I2C_CCR_CCR_Msk  (0xFFFUL << I2C_CCR_CCR_Pos) /*!< 0x00000FFF */\r\n#define I2C_CCR_CCR      I2C_CCR_CCR_Msk              /*!< Clock Control Register in Fast/Standard mode (Master mode) */\r\n#define I2C_CCR_DUTY_Pos (14U)\r\n#define I2C_CCR_DUTY_Msk (0x1UL << I2C_CCR_DUTY_Pos) /*!< 0x00004000 */\r\n#define I2C_CCR_DUTY     I2C_CCR_DUTY_Msk            /*!< Fast Mode Duty Cycle */\r\n#define I2C_CCR_FS_Pos   (15U)\r\n#define I2C_CCR_FS_Msk   (0x1UL << I2C_CCR_FS_Pos) /*!< 0x00008000 */\r\n#define I2C_CCR_FS       I2C_CCR_FS_Msk            /*!< I2C Master Mode Selection */\r\n\r\n/******************  Bit definition for I2C_TRISE register  *******************/\r\n#define I2C_TRISE_TRISE_Pos (0U)\r\n#define I2C_TRISE_TRISE_Msk (0x3FUL << I2C_TRISE_TRISE_Pos) /*!< 0x0000003F */\r\n#define I2C_TRISE_TRISE     I2C_TRISE_TRISE_Msk             /*!< Maximum Rise Time in Fast/Standard mode (Master mode) */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*         Universal Synchronous Asynchronous Receiver Transmitter            */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for USART_SR register  *******************/\r\n#define USART_SR_PE_Pos   (0U)\r\n#define USART_SR_PE_Msk   (0x1UL << USART_SR_PE_Pos) /*!< 0x00000001 */\r\n#define USART_SR_PE       USART_SR_PE_Msk            /*!< Parity Error */\r\n#define USART_SR_FE_Pos   (1U)\r\n#define USART_SR_FE_Msk   (0x1UL << USART_SR_FE_Pos) /*!< 0x00000002 */\r\n#define USART_SR_FE       USART_SR_FE_Msk            /*!< Framing Error */\r\n#define USART_SR_NE_Pos   (2U)\r\n#define USART_SR_NE_Msk   (0x1UL << USART_SR_NE_Pos) /*!< 0x00000004 */\r\n#define USART_SR_NE       USART_SR_NE_Msk            /*!< Noise Error Flag */\r\n#define USART_SR_ORE_Pos  (3U)\r\n#define USART_SR_ORE_Msk  (0x1UL << USART_SR_ORE_Pos) /*!< 0x00000008 */\r\n#define USART_SR_ORE      USART_SR_ORE_Msk            /*!< OverRun Error */\r\n#define USART_SR_IDLE_Pos (4U)\r\n#define USART_SR_IDLE_Msk (0x1UL << USART_SR_IDLE_Pos) /*!< 0x00000010 */\r\n#define USART_SR_IDLE     USART_SR_IDLE_Msk            /*!< IDLE line detected */\r\n#define USART_SR_RXNE_Pos (5U)\r\n#define USART_SR_RXNE_Msk (0x1UL << USART_SR_RXNE_Pos) /*!< 0x00000020 */\r\n#define USART_SR_RXNE     USART_SR_RXNE_Msk            /*!< Read Data Register Not Empty */\r\n#define USART_SR_TC_Pos   (6U)\r\n#define USART_SR_TC_Msk   (0x1UL << USART_SR_TC_Pos) /*!< 0x00000040 */\r\n#define USART_SR_TC       USART_SR_TC_Msk            /*!< Transmission Complete */\r\n#define USART_SR_TXE_Pos  (7U)\r\n#define USART_SR_TXE_Msk  (0x1UL << USART_SR_TXE_Pos) /*!< 0x00000080 */\r\n#define USART_SR_TXE      USART_SR_TXE_Msk            /*!< Transmit Data Register Empty */\r\n#define USART_SR_LBD_Pos  (8U)\r\n#define USART_SR_LBD_Msk  (0x1UL << USART_SR_LBD_Pos) /*!< 0x00000100 */\r\n#define USART_SR_LBD      USART_SR_LBD_Msk            /*!< LIN Break Detection Flag */\r\n#define USART_SR_CTS_Pos  (9U)\r\n#define USART_SR_CTS_Msk  (0x1UL << USART_SR_CTS_Pos) /*!< 0x00000200 */\r\n#define USART_SR_CTS      USART_SR_CTS_Msk            /*!< CTS Flag */\r\n\r\n/*******************  Bit definition for USART_DR register  *******************/\r\n#define USART_DR_DR_Pos (0U)\r\n#define USART_DR_DR_Msk (0x1FFUL << USART_DR_DR_Pos) /*!< 0x000001FF */\r\n#define USART_DR_DR     USART_DR_DR_Msk              /*!< Data value */\r\n\r\n/******************  Bit definition for USART_BRR register  *******************/\r\n#define USART_BRR_DIV_Fraction_Pos (0U)\r\n#define USART_BRR_DIV_Fraction_Msk (0xFUL << USART_BRR_DIV_Fraction_Pos) /*!< 0x0000000F */\r\n#define USART_BRR_DIV_Fraction     USART_BRR_DIV_Fraction_Msk            /*!< Fraction of USARTDIV */\r\n#define USART_BRR_DIV_Mantissa_Pos (4U)\r\n#define USART_BRR_DIV_Mantissa_Msk (0xFFFUL << USART_BRR_DIV_Mantissa_Pos) /*!< 0x0000FFF0 */\r\n#define USART_BRR_DIV_Mantissa     USART_BRR_DIV_Mantissa_Msk              /*!< Mantissa of USARTDIV */\r\n\r\n/******************  Bit definition for USART_CR1 register  *******************/\r\n#define USART_CR1_SBK_Pos    (0U)\r\n#define USART_CR1_SBK_Msk    (0x1UL << USART_CR1_SBK_Pos) /*!< 0x00000001 */\r\n#define USART_CR1_SBK        USART_CR1_SBK_Msk            /*!< Send Break */\r\n#define USART_CR1_RWU_Pos    (1U)\r\n#define USART_CR1_RWU_Msk    (0x1UL << USART_CR1_RWU_Pos) /*!< 0x00000002 */\r\n#define USART_CR1_RWU        USART_CR1_RWU_Msk            /*!< Receiver wakeup */\r\n#define USART_CR1_RE_Pos     (2U)\r\n#define USART_CR1_RE_Msk     (0x1UL << USART_CR1_RE_Pos) /*!< 0x00000004 */\r\n#define USART_CR1_RE         USART_CR1_RE_Msk            /*!< Receiver Enable */\r\n#define USART_CR1_TE_Pos     (3U)\r\n#define USART_CR1_TE_Msk     (0x1UL << USART_CR1_TE_Pos) /*!< 0x00000008 */\r\n#define USART_CR1_TE         USART_CR1_TE_Msk            /*!< Transmitter Enable */\r\n#define USART_CR1_IDLEIE_Pos (4U)\r\n#define USART_CR1_IDLEIE_Msk (0x1UL << USART_CR1_IDLEIE_Pos) /*!< 0x00000010 */\r\n#define USART_CR1_IDLEIE     USART_CR1_IDLEIE_Msk            /*!< IDLE Interrupt Enable */\r\n#define USART_CR1_RXNEIE_Pos (5U)\r\n#define USART_CR1_RXNEIE_Msk (0x1UL << USART_CR1_RXNEIE_Pos) /*!< 0x00000020 */\r\n#define USART_CR1_RXNEIE     USART_CR1_RXNEIE_Msk            /*!< RXNE Interrupt Enable */\r\n#define USART_CR1_TCIE_Pos   (6U)\r\n#define USART_CR1_TCIE_Msk   (0x1UL << USART_CR1_TCIE_Pos) /*!< 0x00000040 */\r\n#define USART_CR1_TCIE       USART_CR1_TCIE_Msk            /*!< Transmission Complete Interrupt Enable */\r\n#define USART_CR1_TXEIE_Pos  (7U)\r\n#define USART_CR1_TXEIE_Msk  (0x1UL << USART_CR1_TXEIE_Pos) /*!< 0x00000080 */\r\n#define USART_CR1_TXEIE      USART_CR1_TXEIE_Msk            /*!< PE Interrupt Enable */\r\n#define USART_CR1_PEIE_Pos   (8U)\r\n#define USART_CR1_PEIE_Msk   (0x1UL << USART_CR1_PEIE_Pos) /*!< 0x00000100 */\r\n#define USART_CR1_PEIE       USART_CR1_PEIE_Msk            /*!< PE Interrupt Enable */\r\n#define USART_CR1_PS_Pos     (9U)\r\n#define USART_CR1_PS_Msk     (0x1UL << USART_CR1_PS_Pos) /*!< 0x00000200 */\r\n#define USART_CR1_PS         USART_CR1_PS_Msk            /*!< Parity Selection */\r\n#define USART_CR1_PCE_Pos    (10U)\r\n#define USART_CR1_PCE_Msk    (0x1UL << USART_CR1_PCE_Pos) /*!< 0x00000400 */\r\n#define USART_CR1_PCE        USART_CR1_PCE_Msk            /*!< Parity Control Enable */\r\n#define USART_CR1_WAKE_Pos   (11U)\r\n#define USART_CR1_WAKE_Msk   (0x1UL << USART_CR1_WAKE_Pos) /*!< 0x00000800 */\r\n#define USART_CR1_WAKE       USART_CR1_WAKE_Msk            /*!< Wakeup method */\r\n#define USART_CR1_M_Pos      (12U)\r\n#define USART_CR1_M_Msk      (0x1UL << USART_CR1_M_Pos) /*!< 0x00001000 */\r\n#define USART_CR1_M          USART_CR1_M_Msk            /*!< Word length */\r\n#define USART_CR1_UE_Pos     (13U)\r\n#define USART_CR1_UE_Msk     (0x1UL << USART_CR1_UE_Pos) /*!< 0x00002000 */\r\n#define USART_CR1_UE         USART_CR1_UE_Msk            /*!< USART Enable */\r\n\r\n/******************  Bit definition for USART_CR2 register  *******************/\r\n#define USART_CR2_ADD_Pos   (0U)\r\n#define USART_CR2_ADD_Msk   (0xFUL << USART_CR2_ADD_Pos) /*!< 0x0000000F */\r\n#define USART_CR2_ADD       USART_CR2_ADD_Msk            /*!< Address of the USART node */\r\n#define USART_CR2_LBDL_Pos  (5U)\r\n#define USART_CR2_LBDL_Msk  (0x1UL << USART_CR2_LBDL_Pos) /*!< 0x00000020 */\r\n#define USART_CR2_LBDL      USART_CR2_LBDL_Msk            /*!< LIN Break Detection Length */\r\n#define USART_CR2_LBDIE_Pos (6U)\r\n#define USART_CR2_LBDIE_Msk (0x1UL << USART_CR2_LBDIE_Pos) /*!< 0x00000040 */\r\n#define USART_CR2_LBDIE     USART_CR2_LBDIE_Msk            /*!< LIN Break Detection Interrupt Enable */\r\n#define USART_CR2_LBCL_Pos  (8U)\r\n#define USART_CR2_LBCL_Msk  (0x1UL << USART_CR2_LBCL_Pos) /*!< 0x00000100 */\r\n#define USART_CR2_LBCL      USART_CR2_LBCL_Msk            /*!< Last Bit Clock pulse */\r\n#define USART_CR2_CPHA_Pos  (9U)\r\n#define USART_CR2_CPHA_Msk  (0x1UL << USART_CR2_CPHA_Pos) /*!< 0x00000200 */\r\n#define USART_CR2_CPHA      USART_CR2_CPHA_Msk            /*!< Clock Phase */\r\n#define USART_CR2_CPOL_Pos  (10U)\r\n#define USART_CR2_CPOL_Msk  (0x1UL << USART_CR2_CPOL_Pos) /*!< 0x00000400 */\r\n#define USART_CR2_CPOL      USART_CR2_CPOL_Msk            /*!< Clock Polarity */\r\n#define USART_CR2_CLKEN_Pos (11U)\r\n#define USART_CR2_CLKEN_Msk (0x1UL << USART_CR2_CLKEN_Pos) /*!< 0x00000800 */\r\n#define USART_CR2_CLKEN     USART_CR2_CLKEN_Msk            /*!< Clock Enable */\r\n\r\n#define USART_CR2_STOP_Pos (12U)\r\n#define USART_CR2_STOP_Msk (0x3UL << USART_CR2_STOP_Pos) /*!< 0x00003000 */\r\n#define USART_CR2_STOP     USART_CR2_STOP_Msk            /*!< STOP[1:0] bits (STOP bits) */\r\n#define USART_CR2_STOP_0   (0x1UL << USART_CR2_STOP_Pos) /*!< 0x00001000 */\r\n#define USART_CR2_STOP_1   (0x2UL << USART_CR2_STOP_Pos) /*!< 0x00002000 */\r\n\r\n#define USART_CR2_LINEN_Pos (14U)\r\n#define USART_CR2_LINEN_Msk (0x1UL << USART_CR2_LINEN_Pos) /*!< 0x00004000 */\r\n#define USART_CR2_LINEN     USART_CR2_LINEN_Msk            /*!< LIN mode enable */\r\n\r\n/******************  Bit definition for USART_CR3 register  *******************/\r\n#define USART_CR3_EIE_Pos   (0U)\r\n#define USART_CR3_EIE_Msk   (0x1UL << USART_CR3_EIE_Pos) /*!< 0x00000001 */\r\n#define USART_CR3_EIE       USART_CR3_EIE_Msk            /*!< Error Interrupt Enable */\r\n#define USART_CR3_IREN_Pos  (1U)\r\n#define USART_CR3_IREN_Msk  (0x1UL << USART_CR3_IREN_Pos) /*!< 0x00000002 */\r\n#define USART_CR3_IREN      USART_CR3_IREN_Msk            /*!< IrDA mode Enable */\r\n#define USART_CR3_IRLP_Pos  (2U)\r\n#define USART_CR3_IRLP_Msk  (0x1UL << USART_CR3_IRLP_Pos) /*!< 0x00000004 */\r\n#define USART_CR3_IRLP      USART_CR3_IRLP_Msk            /*!< IrDA Low-Power */\r\n#define USART_CR3_HDSEL_Pos (3U)\r\n#define USART_CR3_HDSEL_Msk (0x1UL << USART_CR3_HDSEL_Pos) /*!< 0x00000008 */\r\n#define USART_CR3_HDSEL     USART_CR3_HDSEL_Msk            /*!< Half-Duplex Selection */\r\n#define USART_CR3_NACK_Pos  (4U)\r\n#define USART_CR3_NACK_Msk  (0x1UL << USART_CR3_NACK_Pos) /*!< 0x00000010 */\r\n#define USART_CR3_NACK      USART_CR3_NACK_Msk            /*!< Smartcard NACK enable */\r\n#define USART_CR3_SCEN_Pos  (5U)\r\n#define USART_CR3_SCEN_Msk  (0x1UL << USART_CR3_SCEN_Pos) /*!< 0x00000020 */\r\n#define USART_CR3_SCEN      USART_CR3_SCEN_Msk            /*!< Smartcard mode enable */\r\n#define USART_CR3_DMAR_Pos  (6U)\r\n#define USART_CR3_DMAR_Msk  (0x1UL << USART_CR3_DMAR_Pos) /*!< 0x00000040 */\r\n#define USART_CR3_DMAR      USART_CR3_DMAR_Msk            /*!< DMA Enable Receiver */\r\n#define USART_CR3_DMAT_Pos  (7U)\r\n#define USART_CR3_DMAT_Msk  (0x1UL << USART_CR3_DMAT_Pos) /*!< 0x00000080 */\r\n#define USART_CR3_DMAT      USART_CR3_DMAT_Msk            /*!< DMA Enable Transmitter */\r\n#define USART_CR3_RTSE_Pos  (8U)\r\n#define USART_CR3_RTSE_Msk  (0x1UL << USART_CR3_RTSE_Pos) /*!< 0x00000100 */\r\n#define USART_CR3_RTSE      USART_CR3_RTSE_Msk            /*!< RTS Enable */\r\n#define USART_CR3_CTSE_Pos  (9U)\r\n#define USART_CR3_CTSE_Msk  (0x1UL << USART_CR3_CTSE_Pos) /*!< 0x00000200 */\r\n#define USART_CR3_CTSE      USART_CR3_CTSE_Msk            /*!< CTS Enable */\r\n#define USART_CR3_CTSIE_Pos (10U)\r\n#define USART_CR3_CTSIE_Msk (0x1UL << USART_CR3_CTSIE_Pos) /*!< 0x00000400 */\r\n#define USART_CR3_CTSIE     USART_CR3_CTSIE_Msk            /*!< CTS Interrupt Enable */\r\n\r\n/******************  Bit definition for USART_GTPR register  ******************/\r\n#define USART_GTPR_PSC_Pos (0U)\r\n#define USART_GTPR_PSC_Msk (0xFFUL << USART_GTPR_PSC_Pos) /*!< 0x000000FF */\r\n#define USART_GTPR_PSC     USART_GTPR_PSC_Msk             /*!< PSC[7:0] bits (Prescaler value) */\r\n#define USART_GTPR_PSC_0   (0x01UL << USART_GTPR_PSC_Pos) /*!< 0x00000001 */\r\n#define USART_GTPR_PSC_1   (0x02UL << USART_GTPR_PSC_Pos) /*!< 0x00000002 */\r\n#define USART_GTPR_PSC_2   (0x04UL << USART_GTPR_PSC_Pos) /*!< 0x00000004 */\r\n#define USART_GTPR_PSC_3   (0x08UL << USART_GTPR_PSC_Pos) /*!< 0x00000008 */\r\n#define USART_GTPR_PSC_4   (0x10UL << USART_GTPR_PSC_Pos) /*!< 0x00000010 */\r\n#define USART_GTPR_PSC_5   (0x20UL << USART_GTPR_PSC_Pos) /*!< 0x00000020 */\r\n#define USART_GTPR_PSC_6   (0x40UL << USART_GTPR_PSC_Pos) /*!< 0x00000040 */\r\n#define USART_GTPR_PSC_7   (0x80UL << USART_GTPR_PSC_Pos) /*!< 0x00000080 */\r\n\r\n#define USART_GTPR_GT_Pos (8U)\r\n#define USART_GTPR_GT_Msk (0xFFUL << USART_GTPR_GT_Pos) /*!< 0x0000FF00 */\r\n#define USART_GTPR_GT     USART_GTPR_GT_Msk             /*!< Guard time value */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                                 Debug MCU                                  */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/****************  Bit definition for DBGMCU_IDCODE register  *****************/\r\n#define DBGMCU_IDCODE_DEV_ID_Pos (0U)\r\n#define DBGMCU_IDCODE_DEV_ID_Msk (0xFFFUL << DBGMCU_IDCODE_DEV_ID_Pos) /*!< 0x00000FFF */\r\n#define DBGMCU_IDCODE_DEV_ID     DBGMCU_IDCODE_DEV_ID_Msk              /*!< Device Identifier */\r\n\r\n#define DBGMCU_IDCODE_REV_ID_Pos (16U)\r\n#define DBGMCU_IDCODE_REV_ID_Msk (0xFFFFUL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0xFFFF0000 */\r\n#define DBGMCU_IDCODE_REV_ID     DBGMCU_IDCODE_REV_ID_Msk               /*!< REV_ID[15:0] bits (Revision Identifier) */\r\n#define DBGMCU_IDCODE_REV_ID_0   (0x0001UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00010000 */\r\n#define DBGMCU_IDCODE_REV_ID_1   (0x0002UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00020000 */\r\n#define DBGMCU_IDCODE_REV_ID_2   (0x0004UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00040000 */\r\n#define DBGMCU_IDCODE_REV_ID_3   (0x0008UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00080000 */\r\n#define DBGMCU_IDCODE_REV_ID_4   (0x0010UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00100000 */\r\n#define DBGMCU_IDCODE_REV_ID_5   (0x0020UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00200000 */\r\n#define DBGMCU_IDCODE_REV_ID_6   (0x0040UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00400000 */\r\n#define DBGMCU_IDCODE_REV_ID_7   (0x0080UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00800000 */\r\n#define DBGMCU_IDCODE_REV_ID_8   (0x0100UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x01000000 */\r\n#define DBGMCU_IDCODE_REV_ID_9   (0x0200UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x02000000 */\r\n#define DBGMCU_IDCODE_REV_ID_10  (0x0400UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x04000000 */\r\n#define DBGMCU_IDCODE_REV_ID_11  (0x0800UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x08000000 */\r\n#define DBGMCU_IDCODE_REV_ID_12  (0x1000UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x10000000 */\r\n#define DBGMCU_IDCODE_REV_ID_13  (0x2000UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x20000000 */\r\n#define DBGMCU_IDCODE_REV_ID_14  (0x4000UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x40000000 */\r\n#define DBGMCU_IDCODE_REV_ID_15  (0x8000UL << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x80000000 */\r\n\r\n/******************  Bit definition for DBGMCU_CR register  *******************/\r\n#define DBGMCU_CR_DBG_SLEEP_Pos   (0U)\r\n#define DBGMCU_CR_DBG_SLEEP_Msk   (0x1UL << DBGMCU_CR_DBG_SLEEP_Pos) /*!< 0x00000001 */\r\n#define DBGMCU_CR_DBG_SLEEP       DBGMCU_CR_DBG_SLEEP_Msk            /*!< Debug Sleep Mode */\r\n#define DBGMCU_CR_DBG_STOP_Pos    (1U)\r\n#define DBGMCU_CR_DBG_STOP_Msk    (0x1UL << DBGMCU_CR_DBG_STOP_Pos) /*!< 0x00000002 */\r\n#define DBGMCU_CR_DBG_STOP        DBGMCU_CR_DBG_STOP_Msk            /*!< Debug Stop Mode */\r\n#define DBGMCU_CR_DBG_STANDBY_Pos (2U)\r\n#define DBGMCU_CR_DBG_STANDBY_Msk (0x1UL << DBGMCU_CR_DBG_STANDBY_Pos) /*!< 0x00000004 */\r\n#define DBGMCU_CR_DBG_STANDBY     DBGMCU_CR_DBG_STANDBY_Msk            /*!< Debug Standby mode */\r\n#define DBGMCU_CR_TRACE_IOEN_Pos  (5U)\r\n#define DBGMCU_CR_TRACE_IOEN_Msk  (0x1UL << DBGMCU_CR_TRACE_IOEN_Pos) /*!< 0x00000020 */\r\n#define DBGMCU_CR_TRACE_IOEN      DBGMCU_CR_TRACE_IOEN_Msk            /*!< Trace Pin Assignment Control */\r\n\r\n#define DBGMCU_CR_TRACE_MODE_Pos (6U)\r\n#define DBGMCU_CR_TRACE_MODE_Msk (0x3UL << DBGMCU_CR_TRACE_MODE_Pos) /*!< 0x000000C0 */\r\n#define DBGMCU_CR_TRACE_MODE     DBGMCU_CR_TRACE_MODE_Msk            /*!< TRACE_MODE[1:0] bits (Trace Pin Assignment Control) */\r\n#define DBGMCU_CR_TRACE_MODE_0   (0x1UL << DBGMCU_CR_TRACE_MODE_Pos) /*!< 0x00000040 */\r\n#define DBGMCU_CR_TRACE_MODE_1   (0x2UL << DBGMCU_CR_TRACE_MODE_Pos) /*!< 0x00000080 */\r\n\r\n#define DBGMCU_CR_DBG_IWDG_STOP_Pos          (8U)\r\n#define DBGMCU_CR_DBG_IWDG_STOP_Msk          (0x1UL << DBGMCU_CR_DBG_IWDG_STOP_Pos) /*!< 0x00000100 */\r\n#define DBGMCU_CR_DBG_IWDG_STOP              DBGMCU_CR_DBG_IWDG_STOP_Msk            /*!< Debug Independent Watchdog stopped when Core is halted */\r\n#define DBGMCU_CR_DBG_WWDG_STOP_Pos          (9U)\r\n#define DBGMCU_CR_DBG_WWDG_STOP_Msk          (0x1UL << DBGMCU_CR_DBG_WWDG_STOP_Pos) /*!< 0x00000200 */\r\n#define DBGMCU_CR_DBG_WWDG_STOP              DBGMCU_CR_DBG_WWDG_STOP_Msk            /*!< Debug Window Watchdog stopped when Core is halted */\r\n#define DBGMCU_CR_DBG_TIM1_STOP_Pos          (10U)\r\n#define DBGMCU_CR_DBG_TIM1_STOP_Msk          (0x1UL << DBGMCU_CR_DBG_TIM1_STOP_Pos) /*!< 0x00000400 */\r\n#define DBGMCU_CR_DBG_TIM1_STOP              DBGMCU_CR_DBG_TIM1_STOP_Msk            /*!< TIM1 counter stopped when core is halted */\r\n#define DBGMCU_CR_DBG_TIM2_STOP_Pos          (11U)\r\n#define DBGMCU_CR_DBG_TIM2_STOP_Msk          (0x1UL << DBGMCU_CR_DBG_TIM2_STOP_Pos) /*!< 0x00000800 */\r\n#define DBGMCU_CR_DBG_TIM2_STOP              DBGMCU_CR_DBG_TIM2_STOP_Msk            /*!< TIM2 counter stopped when core is halted */\r\n#define DBGMCU_CR_DBG_TIM3_STOP_Pos          (12U)\r\n#define DBGMCU_CR_DBG_TIM3_STOP_Msk          (0x1UL << DBGMCU_CR_DBG_TIM3_STOP_Pos) /*!< 0x00001000 */\r\n#define DBGMCU_CR_DBG_TIM3_STOP              DBGMCU_CR_DBG_TIM3_STOP_Msk            /*!< TIM3 counter stopped when core is halted */\r\n#define DBGMCU_CR_DBG_TIM4_STOP_Pos          (13U)\r\n#define DBGMCU_CR_DBG_TIM4_STOP_Msk          (0x1UL << DBGMCU_CR_DBG_TIM4_STOP_Pos) /*!< 0x00002000 */\r\n#define DBGMCU_CR_DBG_TIM4_STOP              DBGMCU_CR_DBG_TIM4_STOP_Msk            /*!< TIM4 counter stopped when core is halted */\r\n#define DBGMCU_CR_DBG_CAN1_STOP_Pos          (14U)\r\n#define DBGMCU_CR_DBG_CAN1_STOP_Msk          (0x1UL << DBGMCU_CR_DBG_CAN1_STOP_Pos) /*!< 0x00004000 */\r\n#define DBGMCU_CR_DBG_CAN1_STOP              DBGMCU_CR_DBG_CAN1_STOP_Msk            /*!< Debug CAN1 stopped when Core is halted */\r\n#define DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT_Pos (15U)\r\n#define DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT_Msk (0x1UL << DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT_Pos) /*!< 0x00008000 */\r\n#define DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT     DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT_Msk            /*!< SMBUS timeout mode stopped when Core is halted */\r\n#define DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT_Pos (16U)\r\n#define DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT_Msk (0x1UL << DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT_Pos) /*!< 0x00010000 */\r\n#define DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT     DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT_Msk            /*!< SMBUS timeout mode stopped when Core is halted */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                      FLASH and Option Bytes Registers                      */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n/*******************  Bit definition for FLASH_ACR register  ******************/\r\n#define FLASH_ACR_LATENCY_Pos (0U)\r\n#define FLASH_ACR_LATENCY_Msk (0x7UL << FLASH_ACR_LATENCY_Pos) /*!< 0x00000007 */\r\n#define FLASH_ACR_LATENCY     FLASH_ACR_LATENCY_Msk            /*!< LATENCY[2:0] bits (Latency) */\r\n#define FLASH_ACR_LATENCY_0   (0x1UL << FLASH_ACR_LATENCY_Pos) /*!< 0x00000001 */\r\n#define FLASH_ACR_LATENCY_1   (0x2UL << FLASH_ACR_LATENCY_Pos) /*!< 0x00000002 */\r\n#define FLASH_ACR_LATENCY_2   (0x4UL << FLASH_ACR_LATENCY_Pos) /*!< 0x00000004 */\r\n\r\n#define FLASH_ACR_HLFCYA_Pos (3U)\r\n#define FLASH_ACR_HLFCYA_Msk (0x1UL << FLASH_ACR_HLFCYA_Pos) /*!< 0x00000008 */\r\n#define FLASH_ACR_HLFCYA     FLASH_ACR_HLFCYA_Msk            /*!< Flash Half Cycle Access Enable */\r\n#define FLASH_ACR_PRFTBE_Pos (4U)\r\n#define FLASH_ACR_PRFTBE_Msk (0x1UL << FLASH_ACR_PRFTBE_Pos) /*!< 0x00000010 */\r\n#define FLASH_ACR_PRFTBE     FLASH_ACR_PRFTBE_Msk            /*!< Prefetch Buffer Enable */\r\n#define FLASH_ACR_PRFTBS_Pos (5U)\r\n#define FLASH_ACR_PRFTBS_Msk (0x1UL << FLASH_ACR_PRFTBS_Pos) /*!< 0x00000020 */\r\n#define FLASH_ACR_PRFTBS     FLASH_ACR_PRFTBS_Msk            /*!< Prefetch Buffer Status */\r\n\r\n/******************  Bit definition for FLASH_KEYR register  ******************/\r\n#define FLASH_KEYR_FKEYR_Pos (0U)\r\n#define FLASH_KEYR_FKEYR_Msk (0xFFFFFFFFUL << FLASH_KEYR_FKEYR_Pos) /*!< 0xFFFFFFFF */\r\n#define FLASH_KEYR_FKEYR     FLASH_KEYR_FKEYR_Msk                   /*!< FPEC Key */\r\n\r\n#define RDP_KEY_Pos    (0U)\r\n#define RDP_KEY_Msk    (0xA5UL << RDP_KEY_Pos) /*!< 0x000000A5 */\r\n#define RDP_KEY        RDP_KEY_Msk             /*!< RDP Key */\r\n#define FLASH_KEY1_Pos (0U)\r\n#define FLASH_KEY1_Msk (0x45670123UL << FLASH_KEY1_Pos) /*!< 0x45670123 */\r\n#define FLASH_KEY1     FLASH_KEY1_Msk                   /*!< FPEC Key1 */\r\n#define FLASH_KEY2_Pos (0U)\r\n#define FLASH_KEY2_Msk (0xCDEF89ABUL << FLASH_KEY2_Pos) /*!< 0xCDEF89AB */\r\n#define FLASH_KEY2     FLASH_KEY2_Msk                   /*!< FPEC Key2 */\r\n\r\n/*****************  Bit definition for FLASH_OPTKEYR register  ****************/\r\n#define FLASH_OPTKEYR_OPTKEYR_Pos (0U)\r\n#define FLASH_OPTKEYR_OPTKEYR_Msk (0xFFFFFFFFUL << FLASH_OPTKEYR_OPTKEYR_Pos) /*!< 0xFFFFFFFF */\r\n#define FLASH_OPTKEYR_OPTKEYR     FLASH_OPTKEYR_OPTKEYR_Msk                   /*!< Option Byte Key */\r\n\r\n#define FLASH_OPTKEY1 FLASH_KEY1 /*!< Option Byte Key1 */\r\n#define FLASH_OPTKEY2 FLASH_KEY2 /*!< Option Byte Key2 */\r\n\r\n/******************  Bit definition for FLASH_SR register  ********************/\r\n#define FLASH_SR_BSY_Pos      (0U)\r\n#define FLASH_SR_BSY_Msk      (0x1UL << FLASH_SR_BSY_Pos) /*!< 0x00000001 */\r\n#define FLASH_SR_BSY          FLASH_SR_BSY_Msk            /*!< Busy */\r\n#define FLASH_SR_PGERR_Pos    (2U)\r\n#define FLASH_SR_PGERR_Msk    (0x1UL << FLASH_SR_PGERR_Pos) /*!< 0x00000004 */\r\n#define FLASH_SR_PGERR        FLASH_SR_PGERR_Msk            /*!< Programming Error */\r\n#define FLASH_SR_WRPRTERR_Pos (4U)\r\n#define FLASH_SR_WRPRTERR_Msk (0x1UL << FLASH_SR_WRPRTERR_Pos) /*!< 0x00000010 */\r\n#define FLASH_SR_WRPRTERR     FLASH_SR_WRPRTERR_Msk            /*!< Write Protection Error */\r\n#define FLASH_SR_EOP_Pos      (5U)\r\n#define FLASH_SR_EOP_Msk      (0x1UL << FLASH_SR_EOP_Pos) /*!< 0x00000020 */\r\n#define FLASH_SR_EOP          FLASH_SR_EOP_Msk            /*!< End of operation */\r\n\r\n/*******************  Bit definition for FLASH_CR register  *******************/\r\n#define FLASH_CR_PG_Pos     (0U)\r\n#define FLASH_CR_PG_Msk     (0x1UL << FLASH_CR_PG_Pos) /*!< 0x00000001 */\r\n#define FLASH_CR_PG         FLASH_CR_PG_Msk            /*!< Programming */\r\n#define FLASH_CR_PER_Pos    (1U)\r\n#define FLASH_CR_PER_Msk    (0x1UL << FLASH_CR_PER_Pos) /*!< 0x00000002 */\r\n#define FLASH_CR_PER        FLASH_CR_PER_Msk            /*!< Page Erase */\r\n#define FLASH_CR_MER_Pos    (2U)\r\n#define FLASH_CR_MER_Msk    (0x1UL << FLASH_CR_MER_Pos) /*!< 0x00000004 */\r\n#define FLASH_CR_MER        FLASH_CR_MER_Msk            /*!< Mass Erase */\r\n#define FLASH_CR_OPTPG_Pos  (4U)\r\n#define FLASH_CR_OPTPG_Msk  (0x1UL << FLASH_CR_OPTPG_Pos) /*!< 0x00000010 */\r\n#define FLASH_CR_OPTPG      FLASH_CR_OPTPG_Msk            /*!< Option Byte Programming */\r\n#define FLASH_CR_OPTER_Pos  (5U)\r\n#define FLASH_CR_OPTER_Msk  (0x1UL << FLASH_CR_OPTER_Pos) /*!< 0x00000020 */\r\n#define FLASH_CR_OPTER      FLASH_CR_OPTER_Msk            /*!< Option Byte Erase */\r\n#define FLASH_CR_STRT_Pos   (6U)\r\n#define FLASH_CR_STRT_Msk   (0x1UL << FLASH_CR_STRT_Pos) /*!< 0x00000040 */\r\n#define FLASH_CR_STRT       FLASH_CR_STRT_Msk            /*!< Start */\r\n#define FLASH_CR_LOCK_Pos   (7U)\r\n#define FLASH_CR_LOCK_Msk   (0x1UL << FLASH_CR_LOCK_Pos) /*!< 0x00000080 */\r\n#define FLASH_CR_LOCK       FLASH_CR_LOCK_Msk            /*!< Lock */\r\n#define FLASH_CR_OPTWRE_Pos (9U)\r\n#define FLASH_CR_OPTWRE_Msk (0x1UL << FLASH_CR_OPTWRE_Pos) /*!< 0x00000200 */\r\n#define FLASH_CR_OPTWRE     FLASH_CR_OPTWRE_Msk            /*!< Option Bytes Write Enable */\r\n#define FLASH_CR_ERRIE_Pos  (10U)\r\n#define FLASH_CR_ERRIE_Msk  (0x1UL << FLASH_CR_ERRIE_Pos) /*!< 0x00000400 */\r\n#define FLASH_CR_ERRIE      FLASH_CR_ERRIE_Msk            /*!< Error Interrupt Enable */\r\n#define FLASH_CR_EOPIE_Pos  (12U)\r\n#define FLASH_CR_EOPIE_Msk  (0x1UL << FLASH_CR_EOPIE_Pos) /*!< 0x00001000 */\r\n#define FLASH_CR_EOPIE      FLASH_CR_EOPIE_Msk            /*!< End of operation interrupt enable */\r\n\r\n/*******************  Bit definition for FLASH_AR register  *******************/\r\n#define FLASH_AR_FAR_Pos (0U)\r\n#define FLASH_AR_FAR_Msk (0xFFFFFFFFUL << FLASH_AR_FAR_Pos) /*!< 0xFFFFFFFF */\r\n#define FLASH_AR_FAR     FLASH_AR_FAR_Msk                   /*!< Flash Address */\r\n\r\n/******************  Bit definition for FLASH_OBR register  *******************/\r\n#define FLASH_OBR_OPTERR_Pos (0U)\r\n#define FLASH_OBR_OPTERR_Msk (0x1UL << FLASH_OBR_OPTERR_Pos) /*!< 0x00000001 */\r\n#define FLASH_OBR_OPTERR     FLASH_OBR_OPTERR_Msk            /*!< Option Byte Error */\r\n#define FLASH_OBR_RDPRT_Pos  (1U)\r\n#define FLASH_OBR_RDPRT_Msk  (0x1UL << FLASH_OBR_RDPRT_Pos) /*!< 0x00000002 */\r\n#define FLASH_OBR_RDPRT      FLASH_OBR_RDPRT_Msk            /*!< Read protection */\r\n\r\n#define FLASH_OBR_IWDG_SW_Pos    (2U)\r\n#define FLASH_OBR_IWDG_SW_Msk    (0x1UL << FLASH_OBR_IWDG_SW_Pos) /*!< 0x00000004 */\r\n#define FLASH_OBR_IWDG_SW        FLASH_OBR_IWDG_SW_Msk            /*!< IWDG SW */\r\n#define FLASH_OBR_nRST_STOP_Pos  (3U)\r\n#define FLASH_OBR_nRST_STOP_Msk  (0x1UL << FLASH_OBR_nRST_STOP_Pos) /*!< 0x00000008 */\r\n#define FLASH_OBR_nRST_STOP      FLASH_OBR_nRST_STOP_Msk            /*!< nRST_STOP */\r\n#define FLASH_OBR_nRST_STDBY_Pos (4U)\r\n#define FLASH_OBR_nRST_STDBY_Msk (0x1UL << FLASH_OBR_nRST_STDBY_Pos) /*!< 0x00000010 */\r\n#define FLASH_OBR_nRST_STDBY     FLASH_OBR_nRST_STDBY_Msk            /*!< nRST_STDBY */\r\n#define FLASH_OBR_USER_Pos       (2U)\r\n#define FLASH_OBR_USER_Msk       (0x7UL << FLASH_OBR_USER_Pos) /*!< 0x0000001C */\r\n#define FLASH_OBR_USER           FLASH_OBR_USER_Msk            /*!< User Option Bytes */\r\n#define FLASH_OBR_DATA0_Pos      (10U)\r\n#define FLASH_OBR_DATA0_Msk      (0xFFUL << FLASH_OBR_DATA0_Pos) /*!< 0x0003FC00 */\r\n#define FLASH_OBR_DATA0          FLASH_OBR_DATA0_Msk             /*!< Data0 */\r\n#define FLASH_OBR_DATA1_Pos      (18U)\r\n#define FLASH_OBR_DATA1_Msk      (0xFFUL << FLASH_OBR_DATA1_Pos) /*!< 0x03FC0000 */\r\n#define FLASH_OBR_DATA1          FLASH_OBR_DATA1_Msk             /*!< Data1 */\r\n\r\n/******************  Bit definition for FLASH_WRPR register  ******************/\r\n#define FLASH_WRPR_WRP_Pos (0U)\r\n#define FLASH_WRPR_WRP_Msk (0xFFFFFFFFUL << FLASH_WRPR_WRP_Pos) /*!< 0xFFFFFFFF */\r\n#define FLASH_WRPR_WRP     FLASH_WRPR_WRP_Msk                   /*!< Write Protect */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/******************  Bit definition for FLASH_RDP register  *******************/\r\n#define FLASH_RDP_RDP_Pos  (0U)\r\n#define FLASH_RDP_RDP_Msk  (0xFFUL << FLASH_RDP_RDP_Pos) /*!< 0x000000FF */\r\n#define FLASH_RDP_RDP      FLASH_RDP_RDP_Msk             /*!< Read protection option byte */\r\n#define FLASH_RDP_nRDP_Pos (8U)\r\n#define FLASH_RDP_nRDP_Msk (0xFFUL << FLASH_RDP_nRDP_Pos) /*!< 0x0000FF00 */\r\n#define FLASH_RDP_nRDP     FLASH_RDP_nRDP_Msk             /*!< Read protection complemented option byte */\r\n\r\n/******************  Bit definition for FLASH_USER register  ******************/\r\n#define FLASH_USER_USER_Pos  (16U)\r\n#define FLASH_USER_USER_Msk  (0xFFUL << FLASH_USER_USER_Pos) /*!< 0x00FF0000 */\r\n#define FLASH_USER_USER      FLASH_USER_USER_Msk             /*!< User option byte */\r\n#define FLASH_USER_nUSER_Pos (24U)\r\n#define FLASH_USER_nUSER_Msk (0xFFUL << FLASH_USER_nUSER_Pos) /*!< 0xFF000000 */\r\n#define FLASH_USER_nUSER     FLASH_USER_nUSER_Msk             /*!< User complemented option byte */\r\n\r\n/******************  Bit definition for FLASH_Data0 register  *****************/\r\n#define FLASH_DATA0_DATA0_Pos  (0U)\r\n#define FLASH_DATA0_DATA0_Msk  (0xFFUL << FLASH_DATA0_DATA0_Pos) /*!< 0x000000FF */\r\n#define FLASH_DATA0_DATA0      FLASH_DATA0_DATA0_Msk             /*!< User data storage option byte */\r\n#define FLASH_DATA0_nDATA0_Pos (8U)\r\n#define FLASH_DATA0_nDATA0_Msk (0xFFUL << FLASH_DATA0_nDATA0_Pos) /*!< 0x0000FF00 */\r\n#define FLASH_DATA0_nDATA0     FLASH_DATA0_nDATA0_Msk             /*!< User data storage complemented option byte */\r\n\r\n/******************  Bit definition for FLASH_Data1 register  *****************/\r\n#define FLASH_DATA1_DATA1_Pos  (16U)\r\n#define FLASH_DATA1_DATA1_Msk  (0xFFUL << FLASH_DATA1_DATA1_Pos) /*!< 0x00FF0000 */\r\n#define FLASH_DATA1_DATA1      FLASH_DATA1_DATA1_Msk             /*!< User data storage option byte */\r\n#define FLASH_DATA1_nDATA1_Pos (24U)\r\n#define FLASH_DATA1_nDATA1_Msk (0xFFUL << FLASH_DATA1_nDATA1_Pos) /*!< 0xFF000000 */\r\n#define FLASH_DATA1_nDATA1     FLASH_DATA1_nDATA1_Msk             /*!< User data storage complemented option byte */\r\n\r\n/******************  Bit definition for FLASH_WRP0 register  ******************/\r\n#define FLASH_WRP0_WRP0_Pos  (0U)\r\n#define FLASH_WRP0_WRP0_Msk  (0xFFUL << FLASH_WRP0_WRP0_Pos) /*!< 0x000000FF */\r\n#define FLASH_WRP0_WRP0      FLASH_WRP0_WRP0_Msk             /*!< Flash memory write protection option bytes */\r\n#define FLASH_WRP0_nWRP0_Pos (8U)\r\n#define FLASH_WRP0_nWRP0_Msk (0xFFUL << FLASH_WRP0_nWRP0_Pos) /*!< 0x0000FF00 */\r\n#define FLASH_WRP0_nWRP0     FLASH_WRP0_nWRP0_Msk             /*!< Flash memory write protection complemented option bytes */\r\n\r\n/******************  Bit definition for FLASH_WRP1 register  ******************/\r\n#define FLASH_WRP1_WRP1_Pos  (16U)\r\n#define FLASH_WRP1_WRP1_Msk  (0xFFUL << FLASH_WRP1_WRP1_Pos) /*!< 0x00FF0000 */\r\n#define FLASH_WRP1_WRP1      FLASH_WRP1_WRP1_Msk             /*!< Flash memory write protection option bytes */\r\n#define FLASH_WRP1_nWRP1_Pos (24U)\r\n#define FLASH_WRP1_nWRP1_Msk (0xFFUL << FLASH_WRP1_nWRP1_Pos) /*!< 0xFF000000 */\r\n#define FLASH_WRP1_nWRP1     FLASH_WRP1_nWRP1_Msk             /*!< Flash memory write protection complemented option bytes */\r\n\r\n/******************  Bit definition for FLASH_WRP2 register  ******************/\r\n#define FLASH_WRP2_WRP2_Pos  (0U)\r\n#define FLASH_WRP2_WRP2_Msk  (0xFFUL << FLASH_WRP2_WRP2_Pos) /*!< 0x000000FF */\r\n#define FLASH_WRP2_WRP2      FLASH_WRP2_WRP2_Msk             /*!< Flash memory write protection option bytes */\r\n#define FLASH_WRP2_nWRP2_Pos (8U)\r\n#define FLASH_WRP2_nWRP2_Msk (0xFFUL << FLASH_WRP2_nWRP2_Pos) /*!< 0x0000FF00 */\r\n#define FLASH_WRP2_nWRP2     FLASH_WRP2_nWRP2_Msk             /*!< Flash memory write protection complemented option bytes */\r\n\r\n/******************  Bit definition for FLASH_WRP3 register  ******************/\r\n#define FLASH_WRP3_WRP3_Pos  (16U)\r\n#define FLASH_WRP3_WRP3_Msk  (0xFFUL << FLASH_WRP3_WRP3_Pos) /*!< 0x00FF0000 */\r\n#define FLASH_WRP3_WRP3      FLASH_WRP3_WRP3_Msk             /*!< Flash memory write protection option bytes */\r\n#define FLASH_WRP3_nWRP3_Pos (24U)\r\n#define FLASH_WRP3_nWRP3_Msk (0xFFUL << FLASH_WRP3_nWRP3_Pos) /*!< 0xFF000000 */\r\n#define FLASH_WRP3_nWRP3     FLASH_WRP3_nWRP3_Msk             /*!< Flash memory write protection complemented option bytes */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Exported_macro\r\n * @{\r\n */\r\n\r\n/****************************** ADC Instances *********************************/\r\n#define IS_ADC_ALL_INSTANCE(INSTANCE) (((INSTANCE) == ADC1) || ((INSTANCE) == ADC2))\r\n\r\n#define IS_ADC_COMMON_INSTANCE(INSTANCE) ((INSTANCE) == ADC12_COMMON)\r\n\r\n#define IS_ADC_MULTIMODE_MASTER_INSTANCE(INSTANCE) ((INSTANCE) == ADC1)\r\n\r\n#define IS_ADC_DMA_CAPABILITY_INSTANCE(INSTANCE) ((INSTANCE) == ADC1)\r\n\r\n/****************************** CAN Instances *********************************/\r\n#define IS_CAN_ALL_INSTANCE(INSTANCE) ((INSTANCE) == CAN1)\r\n\r\n/****************************** CRC Instances *********************************/\r\n#define IS_CRC_ALL_INSTANCE(INSTANCE) ((INSTANCE) == CRC)\r\n\r\n/****************************** DAC Instances *********************************/\r\n\r\n/****************************** DMA Instances *********************************/\r\n#define IS_DMA_ALL_INSTANCE(INSTANCE)                                                                                                                                                                 \\\r\n  (((INSTANCE) == DMA1_Channel1) || ((INSTANCE) == DMA1_Channel2) || ((INSTANCE) == DMA1_Channel3) || ((INSTANCE) == DMA1_Channel4) || ((INSTANCE) == DMA1_Channel5) || ((INSTANCE) == DMA1_Channel6) \\\r\n   || ((INSTANCE) == DMA1_Channel7))\r\n\r\n/******************************* GPIO Instances *******************************/\r\n#define IS_GPIO_ALL_INSTANCE(INSTANCE) (((INSTANCE) == GPIOA) || ((INSTANCE) == GPIOB) || ((INSTANCE) == GPIOC) || ((INSTANCE) == GPIOD) || ((INSTANCE) == GPIOE))\r\n\r\n/**************************** GPIO Alternate Function Instances ***************/\r\n#define IS_GPIO_AF_INSTANCE(INSTANCE) IS_GPIO_ALL_INSTANCE(INSTANCE)\r\n\r\n/**************************** GPIO Lock Instances *****************************/\r\n#define IS_GPIO_LOCK_INSTANCE(INSTANCE) IS_GPIO_ALL_INSTANCE(INSTANCE)\r\n\r\n/******************************** I2C Instances *******************************/\r\n#define IS_I2C_ALL_INSTANCE(INSTANCE) (((INSTANCE) == I2C1) || ((INSTANCE) == I2C2))\r\n\r\n/******************************* SMBUS Instances ******************************/\r\n#define IS_SMBUS_ALL_INSTANCE IS_I2C_ALL_INSTANCE\r\n\r\n/****************************** IWDG Instances ********************************/\r\n#define IS_IWDG_ALL_INSTANCE(INSTANCE) ((INSTANCE) == IWDG)\r\n\r\n/******************************** SPI Instances *******************************/\r\n#define IS_SPI_ALL_INSTANCE(INSTANCE) (((INSTANCE) == SPI1) || ((INSTANCE) == SPI2))\r\n\r\n/****************************** START TIM Instances ***************************/\r\n/****************************** TIM Instances *********************************/\r\n#define IS_TIM_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_ADVANCED_INSTANCE(INSTANCE) ((INSTANCE) == TIM1)\r\n\r\n#define IS_TIM_CC1_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CC2_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CC3_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CC4_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CLOCKSOURCE_TIX_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_OCXREF_CLEAR_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_ENCODER_INTERFACE_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_XOR_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_MASTER_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_SLAVE_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_DMABURST_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_BREAK_INSTANCE(INSTANCE) ((INSTANCE) == TIM1)\r\n\r\n#define IS_TIM_CCX_INSTANCE(INSTANCE, CHANNEL)                                                                                                                 \\\r\n  ((((INSTANCE) == TIM1) && (((CHANNEL) == TIM_CHANNEL_1) || ((CHANNEL) == TIM_CHANNEL_2) || ((CHANNEL) == TIM_CHANNEL_3) || ((CHANNEL) == TIM_CHANNEL_4)))    \\\r\n   || (((INSTANCE) == TIM2) && (((CHANNEL) == TIM_CHANNEL_1) || ((CHANNEL) == TIM_CHANNEL_2) || ((CHANNEL) == TIM_CHANNEL_3) || ((CHANNEL) == TIM_CHANNEL_4))) \\\r\n   || (((INSTANCE) == TIM3) && (((CHANNEL) == TIM_CHANNEL_1) || ((CHANNEL) == TIM_CHANNEL_2) || ((CHANNEL) == TIM_CHANNEL_3) || ((CHANNEL) == TIM_CHANNEL_4))) \\\r\n   || (((INSTANCE) == TIM4) && (((CHANNEL) == TIM_CHANNEL_1) || ((CHANNEL) == TIM_CHANNEL_2) || ((CHANNEL) == TIM_CHANNEL_3) || ((CHANNEL) == TIM_CHANNEL_4))))\r\n\r\n#define IS_TIM_CCXN_INSTANCE(INSTANCE, CHANNEL) (((INSTANCE) == TIM1) && (((CHANNEL) == TIM_CHANNEL_1) || ((CHANNEL) == TIM_CHANNEL_2) || ((CHANNEL) == TIM_CHANNEL_3)))\r\n\r\n#define IS_TIM_COUNTER_MODE_SELECT_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_REPETITION_COUNTER_INSTANCE(INSTANCE) ((INSTANCE) == TIM1)\r\n\r\n#define IS_TIM_CLOCK_DIVISION_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_DMA_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_DMA_CC_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_COMMUTATION_EVENT_INSTANCE(INSTANCE) ((INSTANCE) == TIM1)\r\n\r\n#define IS_TIM_ETR_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_32B_COUNTER_INSTANCE(INSTANCE) 0U\r\n\r\n/****************************** END TIM Instances *****************************/\r\n\r\n/******************** USART Instances : Synchronous mode **********************/\r\n#define IS_USART_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/******************** UART Instances : Asynchronous mode **********************/\r\n#define IS_UART_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/******************** UART Instances : Half-Duplex mode **********************/\r\n#define IS_UART_HALFDUPLEX_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/******************** UART Instances : LIN mode **********************/\r\n#define IS_UART_LIN_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/****************** UART Instances : Hardware Flow control ********************/\r\n#define IS_UART_HWFLOW_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/********************* UART Instances : Smard card mode ***********************/\r\n#define IS_SMARTCARD_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/*********************** UART Instances : IRDA mode ***************************/\r\n#define IS_IRDA_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/***************** UART Instances : Multi-Processor mode **********************/\r\n#define IS_UART_MULTIPROCESSOR_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/***************** UART Instances : DMA mode available **********************/\r\n#define IS_UART_DMA_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/****************************** RTC Instances *********************************/\r\n#define IS_RTC_ALL_INSTANCE(INSTANCE) ((INSTANCE) == RTC)\r\n\r\n/**************************** WWDG Instances *****************************/\r\n#define IS_WWDG_ALL_INSTANCE(INSTANCE) ((INSTANCE) == WWDG)\r\n\r\n/****************************** USB Instances ********************************/\r\n#define IS_PCD_ALL_INSTANCE(INSTANCE) ((INSTANCE) == USB)\r\n\r\n#define RCC_HSE_MIN 4000000U\r\n#define RCC_HSE_MAX 16000000U\r\n\r\n#define RCC_MAX_FREQUENCY 72000000U\r\n\r\n/**\r\n * @}\r\n */\r\n/******************************************************************************/\r\n/*  For a painless codes migration between the STM32F1xx device product       */\r\n/*  lines, the aliases defined below are put in place to overcome the         */\r\n/*  differences in the interrupt handlers and IRQn definitions.               */\r\n/*  No need to update developed interrupt code when moving across             */\r\n/*  product lines within the same STM32F1 Family                              */\r\n/******************************************************************************/\r\n\r\n/* Aliases for __IRQn */\r\n#define ADC1_IRQn               ADC1_2_IRQn\r\n#define TIM1_BRK_TIM15_IRQn     TIM1_BRK_IRQn\r\n#define TIM9_IRQn               TIM1_BRK_IRQn\r\n#define TIM1_BRK_TIM9_IRQn      TIM1_BRK_IRQn\r\n#define TIM1_TRG_COM_TIM17_IRQn TIM1_TRG_COM_IRQn\r\n#define TIM1_TRG_COM_TIM11_IRQn TIM1_TRG_COM_IRQn\r\n#define TIM11_IRQn              TIM1_TRG_COM_IRQn\r\n#define TIM10_IRQn              TIM1_UP_IRQn\r\n#define TIM1_UP_TIM16_IRQn      TIM1_UP_IRQn\r\n#define TIM1_UP_TIM10_IRQn      TIM1_UP_IRQn\r\n#define OTG_FS_WKUP_IRQn        USBWakeUp_IRQn\r\n#define CEC_IRQn                USBWakeUp_IRQn\r\n#define CAN1_TX_IRQn            USB_HP_CAN1_TX_IRQn\r\n#define USB_HP_IRQn             USB_HP_CAN1_TX_IRQn\r\n#define CAN1_RX0_IRQn           USB_LP_CAN1_RX0_IRQn\r\n#define USB_LP_IRQn             USB_LP_CAN1_RX0_IRQn\r\n\r\n/* Aliases for __IRQHandler */\r\n#define ADC1_IRQHandler               ADC1_2_IRQHandler\r\n#define TIM1_BRK_TIM15_IRQHandler     TIM1_BRK_IRQHandler\r\n#define TIM9_IRQHandler               TIM1_BRK_IRQHandler\r\n#define TIM1_BRK_TIM9_IRQHandler      TIM1_BRK_IRQHandler\r\n#define TIM1_TRG_COM_TIM17_IRQHandler TIM1_TRG_COM_IRQHandler\r\n#define TIM1_TRG_COM_TIM11_IRQHandler TIM1_TRG_COM_IRQHandler\r\n#define TIM11_IRQHandler              TIM1_TRG_COM_IRQHandler\r\n#define TIM10_IRQHandler              TIM1_UP_IRQHandler\r\n#define TIM1_UP_TIM16_IRQHandler      TIM1_UP_IRQHandler\r\n#define TIM1_UP_TIM10_IRQHandler      TIM1_UP_IRQHandler\r\n#define OTG_FS_WKUP_IRQHandler        USBWakeUp_IRQHandler\r\n#define CEC_IRQHandler                USBWakeUp_IRQHandler\r\n#define CAN1_TX_IRQHandler            USB_HP_CAN1_TX_IRQHandler\r\n#define USB_HP_IRQHandler             USB_HP_CAN1_TX_IRQHandler\r\n#define CAN1_RX0_IRQHandler           USB_LP_CAN1_RX0_IRQHandler\r\n#define USB_LP_IRQHandler             USB_LP_CAN1_RX0_IRQHandler\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif /* __cplusplus */\r\n\r\n#endif /* __STM32F103xB_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx.h\r\n * @author  MCD Application Team\r\n * @brief   CMSIS STM32F1xx Device Peripheral Access Layer Header File.\r\n *\r\n *          The file is the unique include file that the application programmer\r\n *          is using in the C source code, usually in main.c. This file contains:\r\n *            - Configuration section that allows to select:\r\n *              - The STM32F1xx device used in the target application\r\n *              - To use or not the peripherals drivers in application code(i.e.\r\n *                code will be based on direct access to peripherals registers\r\n *                rather than drivers API), this option is controlled by\r\n *                \"#define USE_HAL_DRIVER\"\r\n *\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/** @addtogroup CMSIS\r\n * @{\r\n */\r\n\r\n/** @addtogroup stm32f1xx\r\n * @{\r\n */\r\n\r\n#ifndef __STM32F1XX_H\r\n#define __STM32F1XX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif /* __cplusplus */\r\n\r\n/** @addtogroup Library_configuration_section\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief STM32 Family\r\n */\r\n#if !defined(STM32F1)\r\n#define STM32F1\r\n#endif /* STM32F1 */\r\n\r\n/* Uncomment the line below according to the target STM32L device used in your\r\n   application\r\n  */\r\n\r\n#if !defined(STM32F100xB) && !defined(STM32F100xE) && !defined(STM32F101x6) && !defined(STM32F101xB) && !defined(STM32F101xE) && !defined(STM32F101xG) && !defined(STM32F102x6) \\\r\n    && !defined(STM32F102xB) && !defined(STM32F103x6) && !defined(STM32F103xB) && !defined(STM32F103xE) && !defined(STM32F103xG) && !defined(STM32F105xC) && !defined(STM32F107xC)\r\n/* #define STM32F100xB  */ /*!< STM32F100C4, STM32F100R4, STM32F100C6, STM32F100R6, STM32F100C8, STM32F100R8, STM32F100V8, STM32F100CB, STM32F100RB and STM32F100VB */\r\n/* #define STM32F100xE */  /*!< STM32F100RC, STM32F100VC, STM32F100ZC, STM32F100RD, STM32F100VD, STM32F100ZD, STM32F100RE, STM32F100VE and STM32F100ZE */\r\n/* #define STM32F101x6  */ /*!< STM32F101C4, STM32F101R4, STM32F101T4, STM32F101C6, STM32F101R6 and STM32F101T6 Devices */\r\n/* #define STM32F101xB  */ /*!< STM32F101C8, STM32F101R8, STM32F101T8, STM32F101V8, STM32F101CB, STM32F101RB, STM32F101TB and STM32F101VB */\r\n/* #define STM32F101xE */  /*!< STM32F101RC, STM32F101VC, STM32F101ZC, STM32F101RD, STM32F101VD, STM32F101ZD, STM32F101RE, STM32F101VE and STM32F101ZE */\r\n/* #define STM32F101xG  */ /*!< STM32F101RF, STM32F101VF, STM32F101ZF, STM32F101RG, STM32F101VG and STM32F101ZG */\r\n/* #define STM32F102x6 */  /*!< STM32F102C4, STM32F102R4, STM32F102C6 and STM32F102R6 */\r\n/* #define STM32F102xB  */ /*!< STM32F102C8, STM32F102R8, STM32F102CB and STM32F102RB */\r\n/* #define STM32F103x6  */ /*!< STM32F103C4, STM32F103R4, STM32F103T4, STM32F103C6, STM32F103R6 and STM32F103T6 */\r\n/* #define STM32F103xB  */ /*!< STM32F103C8, STM32F103R8, STM32F103T8, STM32F103V8, STM32F103CB, STM32F103RB, STM32F103TB and STM32F103VB */\r\n/* #define STM32F103xE */  /*!< STM32F103RC, STM32F103VC, STM32F103ZC, STM32F103RD, STM32F103VD, STM32F103ZD, STM32F103RE, STM32F103VE and STM32F103ZE */\r\n/* #define STM32F103xG  */ /*!< STM32F103RF, STM32F103VF, STM32F103ZF, STM32F103RG, STM32F103VG and STM32F103ZG */\r\n/* #define STM32F105xC */  /*!< STM32F105R8, STM32F105V8, STM32F105RB, STM32F105VB, STM32F105RC and STM32F105VC */\r\n/* #define STM32F107xC  */ /*!< STM32F107RB, STM32F107VB, STM32F107RC and STM32F107VC */\r\n#endif\r\n\r\n/*  Tip: To avoid modifying this file each time you need to switch between these\r\n        devices, you can define the device in your toolchain compiler preprocessor.\r\n  */\r\n\r\n#if !defined(USE_HAL_DRIVER)\r\n/**\r\n * @brief Comment the line below if you will not use the peripherals drivers.\r\n   In this case, these drivers will not be included and the application code will\r\n   be based on direct access to peripherals registers\r\n   */\r\n/*#define USE_HAL_DRIVER */\r\n#endif /* USE_HAL_DRIVER */\r\n\r\n/**\r\n * @brief CMSIS Device version number V4.3.2\r\n */\r\n#define __STM32F1_CMSIS_VERSION_MAIN (0x04) /*!< [31:24] main version */\r\n#define __STM32F1_CMSIS_VERSION_SUB1 (0x03) /*!< [23:16] sub1 version */\r\n#define __STM32F1_CMSIS_VERSION_SUB2 (0x02) /*!< [15:8]  sub2 version */\r\n#define __STM32F1_CMSIS_VERSION_RC   (0x00) /*!< [7:0]  release candidate */\r\n#define __STM32F1_CMSIS_VERSION      ((__STM32F1_CMSIS_VERSION_MAIN << 24) | (__STM32F1_CMSIS_VERSION_SUB1 << 16) | (__STM32F1_CMSIS_VERSION_SUB2 << 8) | (__STM32F1_CMSIS_VERSION_RC))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Device_Included\r\n * @{\r\n */\r\n\r\n#if defined(STM32F100xB)\r\n#include \"stm32f100xb.h\"\r\n#elif defined(STM32F100xE)\r\n#include \"stm32f100xe.h\"\r\n#elif defined(STM32F101x6)\r\n#include \"stm32f101x6.h\"\r\n#elif defined(STM32F101xB)\r\n#include \"stm32f101xb.h\"\r\n#elif defined(STM32F101xE)\r\n#include \"stm32f101xe.h\"\r\n#elif defined(STM32F101xG)\r\n#include \"stm32f101xg.h\"\r\n#elif defined(STM32F102x6)\r\n#include \"stm32f102x6.h\"\r\n#elif defined(STM32F102xB)\r\n#include \"stm32f102xb.h\"\r\n#elif defined(STM32F103x6)\r\n#include \"stm32f103x6.h\"\r\n#elif defined(STM32F103xB)\r\n#include \"stm32f103xb.h\"\r\n#elif defined(STM32F103xE)\r\n#include \"stm32f103xe.h\"\r\n#elif defined(STM32F103xG)\r\n#include \"stm32f103xg.h\"\r\n#elif defined(STM32F105xC)\r\n#include \"stm32f105xc.h\"\r\n#elif defined(STM32F107xC)\r\n#include \"stm32f107xc.h\"\r\n#else\r\n#error \"Please select first the target STM32F1xx device used in your application (in stm32f1xx.h file)\"\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Exported_types\r\n * @{\r\n */\r\ntypedef enum { RESET = 0, SET = !RESET } FlagStatus, ITStatus;\r\n\r\ntypedef enum { DISABLE = 0, ENABLE = !DISABLE } FunctionalState;\r\n#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))\r\n\r\ntypedef enum { SUCCESS = 0U, ERROR = !SUCCESS } ErrorStatus;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Exported_macros\r\n * @{\r\n */\r\n#define SET_BIT(REG, BIT) ((REG) |= (BIT))\r\n\r\n#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))\r\n\r\n#define READ_BIT(REG, BIT) ((REG) & (BIT))\r\n\r\n#define CLEAR_REG(REG) ((REG) = (0x0))\r\n\r\n#define WRITE_REG(REG, VAL) ((REG) = (VAL))\r\n\r\n#define READ_REG(REG) ((REG))\r\n\r\n#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))\r\n\r\n#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(USE_HAL_DRIVER)\r\n#include \"stm32f1xx_hal.h\"\r\n#endif /* USE_HAL_DRIVER */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif /* __cplusplus */\r\n\r\n#endif /* __STM32F1xx_H */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    system_stm32f10x.h\r\n * @author  MCD Application Team\r\n * @brief   CMSIS Cortex-M3 Device Peripheral Access Layer System Header File.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/** @addtogroup CMSIS\r\n * @{\r\n */\r\n\r\n/** @addtogroup stm32f10x_system\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief Define to prevent recursive inclusion\r\n */\r\n#ifndef __SYSTEM_STM32F10X_H\r\n#define __SYSTEM_STM32F10X_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/** @addtogroup STM32F10x_System_Includes\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup STM32F10x_System_Exported_types\r\n * @{\r\n */\r\n\r\nextern uint32_t      SystemCoreClock;    /*!< System Clock Frequency (Core Clock) */\r\nextern const uint8_t AHBPrescTable[16U]; /*!< AHB prescalers table values */\r\nextern const uint8_t APBPrescTable[8U];  /*!< APB prescalers table values */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup STM32F10x_System_Exported_Constants\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup STM32F10x_System_Exported_Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup STM32F10x_System_Exported_Functions\r\n * @{\r\n */\r\n\r\nextern void SystemInit(void);\r\nextern void SystemCoreClockUpdate(void);\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /*__SYSTEM_STM32F10X_H */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/CMSIS/Include/cmsis_armcc.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     cmsis_armcc.h\r\n                                                                              * @brief    CMSIS compiler ARMCC (Arm Compiler 5) header file\r\n                                                                              * @version  V5.0.4\r\n                                                                              * @date     10. January 2018\r\n                                                                              ******************************************************************************/\r\n/*\r\n * Copyright (c) 2009-2018 Arm Limited. All rights reserved.\r\n *\r\n * SPDX-License-Identifier: Apache-2.0\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the License); you may\r\n * not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n#ifndef __CMSIS_ARMCC_H\r\n#define __CMSIS_ARMCC_H\r\n\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 400677)\r\n#error \"Please use Arm Compiler Toolchain V4.0.677 or later!\"\r\n#endif\r\n\r\n/* CMSIS compiler control architecture macros */\r\n#if ((defined(__TARGET_ARCH_6_M) && (__TARGET_ARCH_6_M == 1)) || (defined(__TARGET_ARCH_6S_M) && (__TARGET_ARCH_6S_M == 1)))\r\n#define __ARM_ARCH_6M__ 1\r\n#endif\r\n\r\n#if (defined(__TARGET_ARCH_7_M) && (__TARGET_ARCH_7_M == 1))\r\n#define __ARM_ARCH_7M__ 1\r\n#endif\r\n\r\n#if (defined(__TARGET_ARCH_7E_M) && (__TARGET_ARCH_7E_M == 1))\r\n#define __ARM_ARCH_7EM__ 1\r\n#endif\r\n\r\n/* __ARM_ARCH_8M_BASE__  not applicable */\r\n/* __ARM_ARCH_8M_MAIN__  not applicable */\r\n\r\n/* CMSIS compiler specific defines */\r\n#ifndef __ASM\r\n#define __ASM __asm\r\n#endif\r\n#ifndef __INLINE\r\n#define __INLINE __inline\r\n#endif\r\n#ifndef __STATIC_INLINE\r\n#define __STATIC_INLINE static __inline\r\n#endif\r\n#ifndef __STATIC_FORCEINLINE\r\n#define __STATIC_FORCEINLINE static __forceinline\r\n#endif\r\n#ifndef __NO_RETURN\r\n#define __NO_RETURN __declspec(noreturn)\r\n#endif\r\n#ifndef __USED\r\n#define __USED __attribute__((used))\r\n#endif\r\n#ifndef __WEAK\r\n#define __WEAK __attribute__((weak))\r\n#endif\r\n#ifndef __PACKED\r\n#define __PACKED __attribute__((packed))\r\n#endif\r\n#ifndef __PACKED_STRUCT\r\n#define __PACKED_STRUCT __packed struct\r\n#endif\r\n#ifndef __PACKED_UNION\r\n#define __PACKED_UNION __packed union\r\n#endif\r\n#ifndef __UNALIGNED_UINT32 /* deprecated */\r\n#define __UNALIGNED_UINT32(x) (*((__packed uint32_t *)(x)))\r\n#endif\r\n#ifndef __UNALIGNED_UINT16_WRITE\r\n#define __UNALIGNED_UINT16_WRITE(addr, val) ((*((__packed uint16_t *)(addr))) = (val))\r\n#endif\r\n#ifndef __UNALIGNED_UINT16_READ\r\n#define __UNALIGNED_UINT16_READ(addr) (*((const __packed uint16_t *)(addr)))\r\n#endif\r\n#ifndef __UNALIGNED_UINT32_WRITE\r\n#define __UNALIGNED_UINT32_WRITE(addr, val) ((*((__packed uint32_t *)(addr))) = (val))\r\n#endif\r\n#ifndef __UNALIGNED_UINT32_READ\r\n#define __UNALIGNED_UINT32_READ(addr) (*((const __packed uint32_t *)(addr)))\r\n#endif\r\n#ifndef __ALIGNED\r\n#define __ALIGNED(x) __attribute__((aligned(x)))\r\n#endif\r\n#ifndef __RESTRICT\r\n#define __RESTRICT __restrict\r\n#endif\r\n\r\n/* ###########################  Core Function Access  ########################### */\r\n/** \\ingroup  CMSIS_Core_FunctionInterface\r\n    \\defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Enable IRQ Interrupts\r\n  \\details Enables IRQ interrupts by clearing the I-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n/* intrinsic void __enable_irq();     */\r\n\r\n/**\r\n  \\brief   Disable IRQ Interrupts\r\n  \\details Disables IRQ interrupts by setting the I-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n/* intrinsic void __disable_irq();    */\r\n\r\n/**\r\n  \\brief   Get Control Register\r\n  \\details Returns the content of the Control Register.\r\n  \\return               Control Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_CONTROL(void) {\r\n  register uint32_t __regControl __ASM(\"control\");\r\n  return (__regControl);\r\n}\r\n\r\n/**\r\n  \\brief   Set Control Register\r\n  \\details Writes the given value to the Control Register.\r\n  \\param [in]    control  Control Register value to set\r\n */\r\n__STATIC_INLINE void __set_CONTROL(uint32_t control) {\r\n  register uint32_t __regControl __ASM(\"control\");\r\n  __regControl = control;\r\n}\r\n\r\n/**\r\n  \\brief   Get IPSR Register\r\n  \\details Returns the content of the IPSR Register.\r\n  \\return               IPSR Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_IPSR(void) {\r\n  register uint32_t __regIPSR __ASM(\"ipsr\");\r\n  return (__regIPSR);\r\n}\r\n\r\n/**\r\n  \\brief   Get APSR Register\r\n  \\details Returns the content of the APSR Register.\r\n  \\return               APSR Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_APSR(void) {\r\n  register uint32_t __regAPSR __ASM(\"apsr\");\r\n  return (__regAPSR);\r\n}\r\n\r\n/**\r\n  \\brief   Get xPSR Register\r\n  \\details Returns the content of the xPSR Register.\r\n  \\return               xPSR Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_xPSR(void) {\r\n  register uint32_t __regXPSR __ASM(\"xpsr\");\r\n  return (__regXPSR);\r\n}\r\n\r\n/**\r\n  \\brief   Get Process Stack Pointer\r\n  \\details Returns the current value of the Process Stack Pointer (PSP).\r\n  \\return               PSP Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_PSP(void) {\r\n  register uint32_t __regProcessStackPointer __ASM(\"psp\");\r\n  return (__regProcessStackPointer);\r\n}\r\n\r\n/**\r\n  \\brief   Set Process Stack Pointer\r\n  \\details Assigns the given value to the Process Stack Pointer (PSP).\r\n  \\param [in]    topOfProcStack  Process Stack Pointer value to set\r\n */\r\n__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) {\r\n  register uint32_t __regProcessStackPointer __ASM(\"psp\");\r\n  __regProcessStackPointer = topOfProcStack;\r\n}\r\n\r\n/**\r\n  \\brief   Get Main Stack Pointer\r\n  \\details Returns the current value of the Main Stack Pointer (MSP).\r\n  \\return               MSP Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_MSP(void) {\r\n  register uint32_t __regMainStackPointer __ASM(\"msp\");\r\n  return (__regMainStackPointer);\r\n}\r\n\r\n/**\r\n  \\brief   Set Main Stack Pointer\r\n  \\details Assigns the given value to the Main Stack Pointer (MSP).\r\n  \\param [in]    topOfMainStack  Main Stack Pointer value to set\r\n */\r\n__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) {\r\n  register uint32_t __regMainStackPointer __ASM(\"msp\");\r\n  __regMainStackPointer = topOfMainStack;\r\n}\r\n\r\n/**\r\n  \\brief   Get Priority Mask\r\n  \\details Returns the current state of the priority mask bit from the Priority Mask Register.\r\n  \\return               Priority Mask value\r\n */\r\n__STATIC_INLINE uint32_t __get_PRIMASK(void) {\r\n  register uint32_t __regPriMask __ASM(\"primask\");\r\n  return (__regPriMask);\r\n}\r\n\r\n/**\r\n  \\brief   Set Priority Mask\r\n  \\details Assigns the given value to the Priority Mask Register.\r\n  \\param [in]    priMask  Priority Mask\r\n */\r\n__STATIC_INLINE void __set_PRIMASK(uint32_t priMask) {\r\n  register uint32_t __regPriMask __ASM(\"primask\");\r\n  __regPriMask = (priMask);\r\n}\r\n\r\n#if ((defined(__ARM_ARCH_7M__) && (__ARM_ARCH_7M__ == 1)) || (defined(__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)))\r\n\r\n/**\r\n  \\brief   Enable FIQ\r\n  \\details Enables FIQ interrupts by clearing the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n#define __enable_fault_irq __enable_fiq\r\n\r\n/**\r\n  \\brief   Disable FIQ\r\n  \\details Disables FIQ interrupts by setting the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n#define __disable_fault_irq __disable_fiq\r\n\r\n/**\r\n  \\brief   Get Base Priority\r\n  \\details Returns the current value of the Base Priority register.\r\n  \\return               Base Priority register value\r\n */\r\n__STATIC_INLINE uint32_t __get_BASEPRI(void) {\r\n  register uint32_t __regBasePri __ASM(\"basepri\");\r\n  return (__regBasePri);\r\n}\r\n\r\n/**\r\n  \\brief   Set Base Priority\r\n  \\details Assigns the given value to the Base Priority register.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__STATIC_INLINE void __set_BASEPRI(uint32_t basePri) {\r\n  register uint32_t __regBasePri __ASM(\"basepri\");\r\n  __regBasePri = (basePri & 0xFFU);\r\n}\r\n\r\n/**\r\n  \\brief   Set Base Priority with condition\r\n  \\details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled,\r\n           or the new value increases the BASEPRI priority level.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__STATIC_INLINE void __set_BASEPRI_MAX(uint32_t basePri) {\r\n  register uint32_t __regBasePriMax __ASM(\"basepri_max\");\r\n  __regBasePriMax = (basePri & 0xFFU);\r\n}\r\n\r\n/**\r\n  \\brief   Get Fault Mask\r\n  \\details Returns the current value of the Fault Mask register.\r\n  \\return               Fault Mask register value\r\n */\r\n__STATIC_INLINE uint32_t __get_FAULTMASK(void) {\r\n  register uint32_t __regFaultMask __ASM(\"faultmask\");\r\n  return (__regFaultMask);\r\n}\r\n\r\n/**\r\n  \\brief   Set Fault Mask\r\n  \\details Assigns the given value to the Fault Mask register.\r\n  \\param [in]    faultMask  Fault Mask value to set\r\n */\r\n__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) {\r\n  register uint32_t __regFaultMask __ASM(\"faultmask\");\r\n  __regFaultMask = (faultMask & (uint32_t)1U);\r\n}\r\n\r\n#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \\\r\n           (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */\r\n\r\n/**\r\n  \\brief   Get FPSCR\r\n  \\details Returns the current value of the Floating Point Status/Control register.\r\n  \\return               Floating Point Status/Control register value\r\n */\r\n__STATIC_INLINE uint32_t __get_FPSCR(void) {\r\n#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && (defined(__FPU_USED) && (__FPU_USED == 1U)))\r\n  register uint32_t __regfpscr __ASM(\"fpscr\");\r\n  return (__regfpscr);\r\n#else\r\n  return (0U);\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Set FPSCR\r\n  \\details Assigns the given value to the Floating Point Status/Control register.\r\n  \\param [in]    fpscr  Floating Point Status/Control value to set\r\n */\r\n__STATIC_INLINE void __set_FPSCR(uint32_t fpscr) {\r\n#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && (defined(__FPU_USED) && (__FPU_USED == 1U)))\r\n  register uint32_t __regfpscr __ASM(\"fpscr\");\r\n  __regfpscr = (fpscr);\r\n#else\r\n  (void)fpscr;\r\n#endif\r\n}\r\n\r\n/*@} end of CMSIS_Core_RegAccFunctions */\r\n\r\n/* ##########################  Core Instruction Access  ######################### */\r\n/** \\defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface\r\n  Access to dedicated instructions\r\n  @{\r\n*/\r\n\r\n/**\r\n  \\brief   No Operation\r\n  \\details No Operation does nothing. This instruction can be used for code alignment purposes.\r\n */\r\n#define __NOP __nop\r\n\r\n/**\r\n  \\brief   Wait For Interrupt\r\n  \\details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.\r\n */\r\n#define __WFI __wfi\r\n\r\n/**\r\n  \\brief   Wait For Event\r\n  \\details Wait For Event is a hint instruction that permits the processor to enter\r\n           a low-power state until one of a number of events occurs.\r\n */\r\n#define __WFE __wfe\r\n\r\n/**\r\n  \\brief   Send Event\r\n  \\details Send Event is a hint instruction. It causes an event to be signaled to the CPU.\r\n */\r\n#define __SEV __sev\r\n\r\n/**\r\n  \\brief   Instruction Synchronization Barrier\r\n  \\details Instruction Synchronization Barrier flushes the pipeline in the processor,\r\n           so that all instructions following the ISB are fetched from cache or memory,\r\n           after the instruction has been completed.\r\n */\r\n#define __ISB()           \\\r\n  do {                    \\\r\n    __schedule_barrier(); \\\r\n    __isb(0xF);           \\\r\n    __schedule_barrier(); \\\r\n  } while (0U)\r\n\r\n/**\r\n  \\brief   Data Synchronization Barrier\r\n  \\details Acts as a special kind of Data Memory Barrier.\r\n           It completes when all explicit memory accesses before this instruction complete.\r\n */\r\n#define __DSB()           \\\r\n  do {                    \\\r\n    __schedule_barrier(); \\\r\n    __dsb(0xF);           \\\r\n    __schedule_barrier(); \\\r\n  } while (0U)\r\n\r\n/**\r\n  \\brief   Data Memory Barrier\r\n  \\details Ensures the apparent order of the explicit memory operations before\r\n           and after the instruction, without ensuring their completion.\r\n */\r\n#define __DMB()           \\\r\n  do {                    \\\r\n    __schedule_barrier(); \\\r\n    __dmb(0xF);           \\\r\n    __schedule_barrier(); \\\r\n  } while (0U)\r\n\r\n/**\r\n  \\brief   Reverse byte order (32 bit)\r\n  \\details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#define __REV __rev\r\n\r\n/**\r\n  \\brief   Reverse byte order (16 bit)\r\n  \\details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#ifndef __NO_EMBEDDED_ASM\r\n__attribute__((section(\".rev16_text\"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value) { rev16 r0, r0 bx lr }\r\n#endif\r\n\r\n/**\r\n  \\brief   Reverse byte order (16 bit)\r\n  \\details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#ifndef __NO_EMBEDDED_ASM\r\n__attribute__((section(\".revsh_text\"))) __STATIC_INLINE __ASM int16_t __REVSH(int16_t value) { revsh r0, r0 bx lr }\r\n#endif\r\n\r\n/**\r\n  \\brief   Rotate Right in unsigned value (32 bit)\r\n  \\details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.\r\n  \\param [in]    op1  Value to rotate\r\n  \\param [in]    op2  Number of Bits to rotate\r\n  \\return               Rotated value\r\n */\r\n#define __ROR __ror\r\n\r\n/**\r\n  \\brief   Breakpoint\r\n  \\details Causes the processor to enter Debug state.\r\n           Debug tools can use this to investigate system state when the instruction at a particular address is reached.\r\n  \\param [in]    value  is ignored by the processor.\r\n                 If required, a debugger can use it to store additional information about the breakpoint.\r\n */\r\n#define __BKPT(value) __breakpoint(value)\r\n\r\n/**\r\n  \\brief   Reverse bit order of value\r\n  \\details Reverses the bit order of the given value.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#if ((defined(__ARM_ARCH_7M__) && (__ARM_ARCH_7M__ == 1)) || (defined(__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)))\r\n#define __RBIT __rbit\r\n#else\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) {\r\n  uint32_t result;\r\n  uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */\r\n\r\n  result = value; /* r will be reversed bits of v; first get LSB of v */\r\n  for (value >>= 1U; value != 0U; value >>= 1U) {\r\n    result <<= 1U;\r\n    result |= value & 1U;\r\n    s--;\r\n  }\r\n  result <<= s; /* shift when v's highest bits are zero */\r\n  return result;\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Count leading zeros\r\n  \\details Counts the number of leading zeros of a data value.\r\n  \\param [in]  value  Value to count the leading zeros\r\n  \\return             number of leading zeros in value\r\n */\r\n#define __CLZ __clz\r\n\r\n#if ((defined(__ARM_ARCH_7M__) && (__ARM_ARCH_7M__ == 1)) || (defined(__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)))\r\n\r\n/**\r\n  \\brief   LDR Exclusive (8 bit)\r\n  \\details Executes a exclusive LDR instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __LDREXB(ptr) ((uint8_t)__ldrex(ptr))\r\n#else\r\n#define __LDREXB(ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\")((uint8_t)__ldrex(ptr)) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   LDR Exclusive (16 bit)\r\n  \\details Executes a exclusive LDR instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __LDREXH(ptr) ((uint16_t)__ldrex(ptr))\r\n#else\r\n#define __LDREXH(ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\")((uint16_t)__ldrex(ptr)) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   LDR Exclusive (32 bit)\r\n  \\details Executes a exclusive LDR instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __LDREXW(ptr) ((uint32_t)__ldrex(ptr))\r\n#else\r\n#define __LDREXW(ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\")((uint32_t)__ldrex(ptr)) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   STR Exclusive (8 bit)\r\n  \\details Executes a exclusive STR instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __STREXB(value, ptr) __strex(value, ptr)\r\n#else\r\n#define __STREXB(value, ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\") __strex(value, ptr) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   STR Exclusive (16 bit)\r\n  \\details Executes a exclusive STR instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __STREXH(value, ptr) __strex(value, ptr)\r\n#else\r\n#define __STREXH(value, ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\") __strex(value, ptr) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   STR Exclusive (32 bit)\r\n  \\details Executes a exclusive STR instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __STREXW(value, ptr) __strex(value, ptr)\r\n#else\r\n#define __STREXW(value, ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\") __strex(value, ptr) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   Remove the exclusive lock\r\n  \\details Removes the exclusive lock which is created by LDREX.\r\n */\r\n#define __CLREX __clrex\r\n\r\n/**\r\n  \\brief   Signed Saturate\r\n  \\details Saturates a signed value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (1..32)\r\n  \\return             Saturated value\r\n */\r\n#define __SSAT __ssat\r\n\r\n/**\r\n  \\brief   Unsigned Saturate\r\n  \\details Saturates an unsigned value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (0..31)\r\n  \\return             Saturated value\r\n */\r\n#define __USAT __usat\r\n\r\n/**\r\n  \\brief   Rotate Right with Extend (32 bit)\r\n  \\details Moves each bit of a bitstring right by one bit.\r\n           The carry input is shifted in at the left end of the bitstring.\r\n  \\param [in]    value  Value to rotate\r\n  \\return               Rotated value\r\n */\r\n#ifndef __NO_EMBEDDED_ASM\r\n__attribute__((section(\".rrx_text\"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value) { rrx r0, r0 bx lr }\r\n#endif\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n#define __LDRBT(ptr) ((uint8_t)__ldrt(ptr))\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n#define __LDRHT(ptr) ((uint16_t)__ldrt(ptr))\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n#define __LDRT(ptr) ((uint32_t)__ldrt(ptr))\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n#define __STRBT(value, ptr) __strt(value, ptr)\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n#define __STRHT(value, ptr) __strt(value, ptr)\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n#define __STRT(value, ptr) __strt(value, ptr)\r\n\r\n#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \\\r\n          (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */\r\n\r\n/**\r\n  \\brief   Signed Saturate\r\n  \\details Saturates a signed value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (1..32)\r\n  \\return             Saturated value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) {\r\n  if ((sat >= 1U) && (sat <= 32U)) {\r\n    const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U);\r\n    const int32_t min = -1 - max;\r\n    if (val > max) {\r\n      return max;\r\n    } else if (val < min) {\r\n      return min;\r\n    }\r\n  }\r\n  return val;\r\n}\r\n\r\n/**\r\n  \\brief   Unsigned Saturate\r\n  \\details Saturates an unsigned value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (0..31)\r\n  \\return             Saturated value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) {\r\n  if (sat <= 31U) {\r\n    const uint32_t max = ((1U << sat) - 1U);\r\n    if (val > (int32_t)max) {\r\n      return max;\r\n    } else if (val < 0) {\r\n      return 0U;\r\n    }\r\n  }\r\n  return (uint32_t)val;\r\n}\r\n\r\n#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__  == 1)) || \\\r\n           (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */\r\n\r\n/*@}*/ /* end of group CMSIS_Core_InstructionInterface */\r\n\r\n/* ###################  Compiler specific Intrinsics  ########################### */\r\n/** \\defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics\r\n  Access to dedicated SIMD instructions\r\n  @{\r\n*/\r\n\r\n#if ((defined(__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)))\r\n\r\n#define __SADD8   __sadd8\r\n#define __QADD8   __qadd8\r\n#define __SHADD8  __shadd8\r\n#define __UADD8   __uadd8\r\n#define __UQADD8  __uqadd8\r\n#define __UHADD8  __uhadd8\r\n#define __SSUB8   __ssub8\r\n#define __QSUB8   __qsub8\r\n#define __SHSUB8  __shsub8\r\n#define __USUB8   __usub8\r\n#define __UQSUB8  __uqsub8\r\n#define __UHSUB8  __uhsub8\r\n#define __SADD16  __sadd16\r\n#define __QADD16  __qadd16\r\n#define __SHADD16 __shadd16\r\n#define __UADD16  __uadd16\r\n#define __UQADD16 __uqadd16\r\n#define __UHADD16 __uhadd16\r\n#define __SSUB16  __ssub16\r\n#define __QSUB16  __qsub16\r\n#define __SHSUB16 __shsub16\r\n#define __USUB16  __usub16\r\n#define __UQSUB16 __uqsub16\r\n#define __UHSUB16 __uhsub16\r\n#define __SASX    __sasx\r\n#define __QASX    __qasx\r\n#define __SHASX   __shasx\r\n#define __UASX    __uasx\r\n#define __UQASX   __uqasx\r\n#define __UHASX   __uhasx\r\n#define __SSAX    __ssax\r\n#define __QSAX    __qsax\r\n#define __SHSAX   __shsax\r\n#define __USAX    __usax\r\n#define __UQSAX   __uqsax\r\n#define __UHSAX   __uhsax\r\n#define __USAD8   __usad8\r\n#define __USADA8  __usada8\r\n#define __SSAT16  __ssat16\r\n#define __USAT16  __usat16\r\n#define __UXTB16  __uxtb16\r\n#define __UXTAB16 __uxtab16\r\n#define __SXTB16  __sxtb16\r\n#define __SXTAB16 __sxtab16\r\n#define __SMUAD   __smuad\r\n#define __SMUADX  __smuadx\r\n#define __SMLAD   __smlad\r\n#define __SMLADX  __smladx\r\n#define __SMLALD  __smlald\r\n#define __SMLALDX __smlaldx\r\n#define __SMUSD   __smusd\r\n#define __SMUSDX  __smusdx\r\n#define __SMLSD   __smlsd\r\n#define __SMLSDX  __smlsdx\r\n#define __SMLSLD  __smlsld\r\n#define __SMLSLDX __smlsldx\r\n#define __SEL     __sel\r\n#define __QADD    __qadd\r\n#define __QSUB    __qsub\r\n\r\n#define __PKHBT(ARG1, ARG2, ARG3) (((((uint32_t)(ARG1))) & 0x0000FFFFUL) | ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL))\r\n\r\n#define __PKHTB(ARG1, ARG2, ARG3) (((((uint32_t)(ARG1))) & 0xFFFF0000UL) | ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL))\r\n\r\n#define __SMMLA(ARG1, ARG2, ARG3) ((int32_t)((((int64_t)(ARG1) * (ARG2)) + ((int64_t)(ARG3) << 32U)) >> 32U))\r\n\r\n#endif /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1))     ) */\r\n/*@} end of group CMSIS_SIMD_intrinsics */\r\n\r\n#endif /* __CMSIS_ARMCC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/CMSIS/Include/cmsis_armclang.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     cmsis_armclang.h\r\n                                                                              * @brief    CMSIS compiler armclang (Arm Compiler 6) header file\r\n                                                                              * @version  V5.0.4\r\n                                                                              * @date     10. January 2018\r\n                                                                              ******************************************************************************/\r\n/*\r\n * Copyright (c) 2009-2018 Arm Limited. All rights reserved.\r\n *\r\n * SPDX-License-Identifier: Apache-2.0\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the License); you may\r\n * not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n/*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */\r\n\r\n#ifndef __CMSIS_ARMCLANG_H\r\n#define __CMSIS_ARMCLANG_H\r\n\r\n#pragma clang system_header /* treat file as system include file */\r\n\r\n#ifndef __ARM_COMPAT_H\r\n#include <arm_compat.h> /* Compatibility header for Arm Compiler 5 intrinsics */\r\n#endif\r\n\r\n/* CMSIS compiler specific defines */\r\n#ifndef __ASM\r\n#define __ASM __asm\r\n#endif\r\n#ifndef __INLINE\r\n#define __INLINE __inline\r\n#endif\r\n#ifndef __STATIC_INLINE\r\n#define __STATIC_INLINE static __inline\r\n#endif\r\n#ifndef __STATIC_FORCEINLINE\r\n#define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline\r\n#endif\r\n#ifndef __NO_RETURN\r\n#define __NO_RETURN __attribute__((__noreturn__))\r\n#endif\r\n#ifndef __USED\r\n#define __USED __attribute__((used))\r\n#endif\r\n#ifndef __WEAK\r\n#define __WEAK __attribute__((weak))\r\n#endif\r\n#ifndef __PACKED\r\n#define __PACKED __attribute__((packed, aligned(1)))\r\n#endif\r\n#ifndef __PACKED_STRUCT\r\n#define __PACKED_STRUCT struct __attribute__((packed, aligned(1)))\r\n#endif\r\n#ifndef __PACKED_UNION\r\n#define __PACKED_UNION union __attribute__((packed, aligned(1)))\r\n#endif\r\n#ifndef __UNALIGNED_UINT32 /* deprecated */\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wpacked\"\r\n/*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */\r\nstruct __attribute__((packed)) T_UINT32 {\r\n  uint32_t v;\r\n};\r\n#pragma clang diagnostic pop\r\n#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)\r\n#endif\r\n#ifndef __UNALIGNED_UINT16_WRITE\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wpacked\"\r\n/*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */\r\n__PACKED_STRUCT          T_UINT16_WRITE { uint16_t v; };\r\n#pragma clang diagnostic pop\r\n#define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))\r\n#endif\r\n#ifndef __UNALIGNED_UINT16_READ\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wpacked\"\r\n/*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */\r\n__PACKED_STRUCT          T_UINT16_READ { uint16_t v; };\r\n#pragma clang diagnostic pop\r\n#define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)\r\n#endif\r\n#ifndef __UNALIGNED_UINT32_WRITE\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wpacked\"\r\n/*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */\r\n__PACKED_STRUCT          T_UINT32_WRITE { uint32_t v; };\r\n#pragma clang diagnostic pop\r\n#define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))\r\n#endif\r\n#ifndef __UNALIGNED_UINT32_READ\r\n#pragma clang diagnostic push\r\n#pragma clang diagnostic ignored \"-Wpacked\"\r\n/*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */\r\n__PACKED_STRUCT          T_UINT32_READ { uint32_t v; };\r\n#pragma clang diagnostic pop\r\n#define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)\r\n#endif\r\n#ifndef __ALIGNED\r\n#define __ALIGNED(x) __attribute__((aligned(x)))\r\n#endif\r\n#ifndef __RESTRICT\r\n#define __RESTRICT __restrict\r\n#endif\r\n\r\n/* ###########################  Core Function Access  ########################### */\r\n/** \\ingroup  CMSIS_Core_FunctionInterface\r\n    \\defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Enable IRQ Interrupts\r\n  \\details Enables IRQ interrupts by clearing the I-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n/* intrinsic void __enable_irq();  see arm_compat.h */\r\n\r\n/**\r\n  \\brief   Disable IRQ Interrupts\r\n  \\details Disables IRQ interrupts by setting the I-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n/* intrinsic void __disable_irq();  see arm_compat.h */\r\n\r\n/**\r\n  \\brief   Get Control Register\r\n  \\details Returns the content of the Control Register.\r\n  \\return               Control Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, control\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Control Register (non-secure)\r\n  \\details Returns the content of the non-secure Control Register when in secure mode.\r\n  \\return               non-secure Control Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, control_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Control Register\r\n  \\details Writes the given value to the Control Register.\r\n  \\param [in]    control  Control Register value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) { __ASM volatile(\"MSR control, %0\" : : \"r\"(control) : \"memory\"); }\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Set Control Register (non-secure)\r\n  \\details Writes the given value to the non-secure Control Register when in secure state.\r\n  \\param [in]    control  Control Register value to set\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) { __ASM volatile(\"MSR control_ns, %0\" : : \"r\"(control) : \"memory\"); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Get IPSR Register\r\n  \\details Returns the content of the IPSR Register.\r\n  \\return               IPSR Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_IPSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, ipsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Get APSR Register\r\n  \\details Returns the content of the APSR Register.\r\n  \\return               APSR Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_APSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, apsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Get xPSR Register\r\n  \\details Returns the content of the xPSR Register.\r\n  \\return               xPSR Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_xPSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, xpsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Get Process Stack Pointer\r\n  \\details Returns the current value of the Process Stack Pointer (PSP).\r\n  \\return               PSP Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_PSP(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, psp\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Process Stack Pointer (non-secure)\r\n  \\details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state.\r\n  \\return               PSP Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, psp_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Process Stack Pointer\r\n  \\details Assigns the given value to the Process Stack Pointer (PSP).\r\n  \\param [in]    topOfProcStack  Process Stack Pointer value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) { __ASM volatile(\"MSR psp, %0\" : : \"r\"(topOfProcStack) :); }\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Set Process Stack Pointer (non-secure)\r\n  \\details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state.\r\n  \\param [in]    topOfProcStack  Process Stack Pointer value to set\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) { __ASM volatile(\"MSR psp_ns, %0\" : : \"r\"(topOfProcStack) :); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Get Main Stack Pointer\r\n  \\details Returns the current value of the Main Stack Pointer (MSP).\r\n  \\return               MSP Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_MSP(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, msp\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Main Stack Pointer (non-secure)\r\n  \\details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state.\r\n  \\return               MSP Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, msp_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Main Stack Pointer\r\n  \\details Assigns the given value to the Main Stack Pointer (MSP).\r\n  \\param [in]    topOfMainStack  Main Stack Pointer value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) { __ASM volatile(\"MSR msp, %0\" : : \"r\"(topOfMainStack) :); }\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Set Main Stack Pointer (non-secure)\r\n  \\details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state.\r\n  \\param [in]    topOfMainStack  Main Stack Pointer value to set\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) { __ASM volatile(\"MSR msp_ns, %0\" : : \"r\"(topOfMainStack) :); }\r\n#endif\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Stack Pointer (non-secure)\r\n  \\details Returns the current value of the non-secure Stack Pointer (SP) when in secure state.\r\n  \\return               SP Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, sp_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Set Stack Pointer (non-secure)\r\n  \\details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state.\r\n  \\param [in]    topOfStack  Stack Pointer value to set\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) { __ASM volatile(\"MSR sp_ns, %0\" : : \"r\"(topOfStack) :); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Get Priority Mask\r\n  \\details Returns the current state of the priority mask bit from the Priority Mask Register.\r\n  \\return               Priority Mask value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, primask\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Priority Mask (non-secure)\r\n  \\details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state.\r\n  \\return               Priority Mask value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, primask_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Priority Mask\r\n  \\details Assigns the given value to the Priority Mask Register.\r\n  \\param [in]    priMask  Priority Mask\r\n */\r\n__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) { __ASM volatile(\"MSR primask, %0\" : : \"r\"(priMask) : \"memory\"); }\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Set Priority Mask (non-secure)\r\n  \\details Assigns the given value to the non-secure Priority Mask Register when in secure state.\r\n  \\param [in]    priMask  Priority Mask\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) { __ASM volatile(\"MSR primask_ns, %0\" : : \"r\"(priMask) : \"memory\"); }\r\n#endif\r\n\r\n#if ((defined(__ARM_ARCH_7M__) && (__ARM_ARCH_7M__ == 1)) || (defined(__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) || (defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)))\r\n/**\r\n  \\brief   Enable FIQ\r\n  \\details Enables FIQ interrupts by clearing the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n#define __enable_fault_irq __enable_fiq /* see arm_compat.h */\r\n\r\n/**\r\n  \\brief   Disable FIQ\r\n  \\details Disables FIQ interrupts by setting the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n#define __disable_fault_irq __disable_fiq /* see arm_compat.h */\r\n\r\n/**\r\n  \\brief   Get Base Priority\r\n  \\details Returns the current value of the Base Priority register.\r\n  \\return               Base Priority register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, basepri\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Base Priority (non-secure)\r\n  \\details Returns the current value of the non-secure Base Priority register when in secure state.\r\n  \\return               Base Priority register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, basepri_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Base Priority\r\n  \\details Assigns the given value to the Base Priority register.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) { __ASM volatile(\"MSR basepri, %0\" : : \"r\"(basePri) : \"memory\"); }\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Set Base Priority (non-secure)\r\n  \\details Assigns the given value to the non-secure Base Priority register when in secure state.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) { __ASM volatile(\"MSR basepri_ns, %0\" : : \"r\"(basePri) : \"memory\"); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Base Priority with condition\r\n  \\details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled,\r\n           or the new value increases the BASEPRI priority level.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) { __ASM volatile(\"MSR basepri_max, %0\" : : \"r\"(basePri) : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Get Fault Mask\r\n  \\details Returns the current value of the Fault Mask register.\r\n  \\return               Fault Mask register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, faultmask\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Fault Mask (non-secure)\r\n  \\details Returns the current value of the non-secure Fault Mask register when in secure state.\r\n  \\return               Fault Mask register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, faultmask_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Fault Mask\r\n  \\details Assigns the given value to the Fault Mask register.\r\n  \\param [in]    faultMask  Fault Mask value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) { __ASM volatile(\"MSR faultmask, %0\" : : \"r\"(faultMask) : \"memory\"); }\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Set Fault Mask (non-secure)\r\n  \\details Assigns the given value to the non-secure Fault Mask register when in secure state.\r\n  \\param [in]    faultMask  Fault Mask value to set\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) { __ASM volatile(\"MSR faultmask_ns, %0\" : : \"r\"(faultMask) : \"memory\"); }\r\n#endif\r\n\r\n#endif /* ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \\\r\n           (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \\\r\n           (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    ) */\r\n\r\n#if ((defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) || (defined(__ARM_ARCH_8M_BASE__) && (__ARM_ARCH_8M_BASE__ == 1)))\r\n\r\n/**\r\n  \\brief   Get Process Stack Pointer Limit\r\n  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure\r\n  Stack Pointer Limit register hence zero is returned always in non-secure\r\n  mode.\r\n\r\n  \\details Returns the current value of the Process Stack Pointer Limit (PSPLIM).\r\n  \\return               PSPLIM Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n  // without main extensions, the non-secure PSPLIM is RAZ/WI\r\n  return 0U;\r\n#else\r\n  uint32_t result;\r\n  __ASM volatile(\"MRS %0, psplim\" : \"=r\"(result));\r\n  return result;\r\n#endif\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Process Stack Pointer Limit (non-secure)\r\n  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure\r\n  Stack Pointer Limit register hence zero is returned always in non-secure\r\n  mode.\r\n\r\n  \\details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state.\r\n  \\return               PSPLIM Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)))\r\n  // without main extensions, the non-secure PSPLIM is RAZ/WI\r\n  return 0U;\r\n#else\r\n  uint32_t result;\r\n  __ASM volatile(\"MRS %0, psplim_ns\" : \"=r\"(result));\r\n  return result;\r\n#endif\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Process Stack Pointer Limit\r\n  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure\r\n  Stack Pointer Limit register hence the write is silently ignored in non-secure\r\n  mode.\r\n\r\n  \\details Assigns the given value to the Process Stack Pointer Limit (PSPLIM).\r\n  \\param [in]    ProcStackPtrLimit  Process Stack Pointer Limit value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n  // without main extensions, the non-secure PSPLIM is RAZ/WI\r\n  (void)ProcStackPtrLimit;\r\n#else\r\n  __ASM volatile(\"MSR psplim, %0\" : : \"r\"(ProcStackPtrLimit));\r\n#endif\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Set Process Stack Pointer (non-secure)\r\n  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure\r\n  Stack Pointer Limit register hence the write is silently ignored in non-secure\r\n  mode.\r\n\r\n  \\details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state.\r\n  \\param [in]    ProcStackPtrLimit  Process Stack Pointer Limit value to set\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)))\r\n  // without main extensions, the non-secure PSPLIM is RAZ/WI\r\n  (void)ProcStackPtrLimit;\r\n#else\r\n  __ASM volatile(\"MSR psplim_ns, %0\\n\" : : \"r\"(ProcStackPtrLimit));\r\n#endif\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Get Main Stack Pointer Limit\r\n  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure\r\n  Stack Pointer Limit register hence zero is returned always.\r\n\r\n  \\details Returns the current value of the Main Stack Pointer Limit (MSPLIM).\r\n  \\return               MSPLIM Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n  // without main extensions, the non-secure MSPLIM is RAZ/WI\r\n  return 0U;\r\n#else\r\n  uint32_t result;\r\n  __ASM volatile(\"MRS %0, msplim\" : \"=r\"(result));\r\n  return result;\r\n#endif\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Main Stack Pointer Limit (non-secure)\r\n  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure\r\n  Stack Pointer Limit register hence zero is returned always.\r\n\r\n  \\details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state.\r\n  \\return               MSPLIM Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)))\r\n  // without main extensions, the non-secure MSPLIM is RAZ/WI\r\n  return 0U;\r\n#else\r\n  uint32_t result;\r\n  __ASM volatile(\"MRS %0, msplim_ns\" : \"=r\"(result));\r\n  return result;\r\n#endif\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Main Stack Pointer Limit\r\n  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure\r\n  Stack Pointer Limit register hence the write is silently ignored.\r\n\r\n  \\details Assigns the given value to the Main Stack Pointer Limit (MSPLIM).\r\n  \\param [in]    MainStackPtrLimit  Main Stack Pointer Limit value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n  // without main extensions, the non-secure MSPLIM is RAZ/WI\r\n  (void)MainStackPtrLimit;\r\n#else\r\n  __ASM volatile(\"MSR msplim, %0\" : : \"r\"(MainStackPtrLimit));\r\n#endif\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Set Main Stack Pointer Limit (non-secure)\r\n  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure\r\n  Stack Pointer Limit register hence the write is silently ignored.\r\n\r\n  \\details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state.\r\n  \\param [in]    MainStackPtrLimit  Main Stack Pointer value to set\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)))\r\n  // without main extensions, the non-secure MSPLIM is RAZ/WI\r\n  (void)MainStackPtrLimit;\r\n#else\r\n  __ASM volatile(\"MSR msplim_ns, %0\" : : \"r\"(MainStackPtrLimit));\r\n#endif\r\n}\r\n#endif\r\n\r\n#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \\\r\n           (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    ) */\r\n\r\n/**\r\n  \\brief   Get FPSCR\r\n  \\details Returns the current value of the Floating Point Status/Control register.\r\n  \\return               Floating Point Status/Control register value\r\n */\r\n#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && (defined(__FPU_USED) && (__FPU_USED == 1U)))\r\n#define __get_FPSCR (uint32_t) __builtin_arm_get_fpscr\r\n#else\r\n#define __get_FPSCR() ((uint32_t)0U)\r\n#endif\r\n\r\n/**\r\n  \\brief   Set FPSCR\r\n  \\details Assigns the given value to the Floating Point Status/Control register.\r\n  \\param [in]    fpscr  Floating Point Status/Control value to set\r\n */\r\n#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && (defined(__FPU_USED) && (__FPU_USED == 1U)))\r\n#define __set_FPSCR __builtin_arm_set_fpscr\r\n#else\r\n#define __set_FPSCR(x) ((void)(x))\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_RegAccFunctions */\r\n\r\n/* ##########################  Core Instruction Access  ######################### */\r\n/** \\defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface\r\n  Access to dedicated instructions\r\n  @{\r\n*/\r\n\r\n/* Define macros for porting to both thumb1 and thumb2.\r\n * For thumb1, use low register (r0-r7), specified by constraint \"l\"\r\n * Otherwise, use general registers, specified by constraint \"r\" */\r\n#if defined(__thumb__) && !defined(__thumb2__)\r\n#define __CMSIS_GCC_OUT_REG(r) \"=l\"(r)\r\n#define __CMSIS_GCC_USE_REG(r) \"l\"(r)\r\n#else\r\n#define __CMSIS_GCC_OUT_REG(r) \"=r\"(r)\r\n#define __CMSIS_GCC_USE_REG(r) \"r\"(r)\r\n#endif\r\n\r\n/**\r\n  \\brief   No Operation\r\n  \\details No Operation does nothing. This instruction can be used for code alignment purposes.\r\n */\r\n#define __NOP __builtin_arm_nop\r\n\r\n/**\r\n  \\brief   Wait For Interrupt\r\n  \\details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.\r\n */\r\n#define __WFI __builtin_arm_wfi\r\n\r\n/**\r\n  \\brief   Wait For Event\r\n  \\details Wait For Event is a hint instruction that permits the processor to enter\r\n           a low-power state until one of a number of events occurs.\r\n */\r\n#define __WFE __builtin_arm_wfe\r\n\r\n/**\r\n  \\brief   Send Event\r\n  \\details Send Event is a hint instruction. It causes an event to be signaled to the CPU.\r\n */\r\n#define __SEV __builtin_arm_sev\r\n\r\n/**\r\n  \\brief   Instruction Synchronization Barrier\r\n  \\details Instruction Synchronization Barrier flushes the pipeline in the processor,\r\n           so that all instructions following the ISB are fetched from cache or memory,\r\n           after the instruction has been completed.\r\n */\r\n#define __ISB() __builtin_arm_isb(0xF);\r\n\r\n/**\r\n  \\brief   Data Synchronization Barrier\r\n  \\details Acts as a special kind of Data Memory Barrier.\r\n           It completes when all explicit memory accesses before this instruction complete.\r\n */\r\n#define __DSB() __builtin_arm_dsb(0xF);\r\n\r\n/**\r\n  \\brief   Data Memory Barrier\r\n  \\details Ensures the apparent order of the explicit memory operations before\r\n           and after the instruction, without ensuring their completion.\r\n */\r\n#define __DMB() __builtin_arm_dmb(0xF);\r\n\r\n/**\r\n  \\brief   Reverse byte order (32 bit)\r\n  \\details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#define __REV(value) __builtin_bswap32(value)\r\n\r\n/**\r\n  \\brief   Reverse byte order (16 bit)\r\n  \\details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#define __REV16(value) __ROR(__REV(value), 16)\r\n\r\n/**\r\n  \\brief   Reverse byte order (16 bit)\r\n  \\details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#define __REVSH(value) (int16_t) __builtin_bswap16(value)\r\n\r\n/**\r\n  \\brief   Rotate Right in unsigned value (32 bit)\r\n  \\details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.\r\n  \\param [in]    op1  Value to rotate\r\n  \\param [in]    op2  Number of Bits to rotate\r\n  \\return               Rotated value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) {\r\n  op2 %= 32U;\r\n  if (op2 == 0U) {\r\n    return op1;\r\n  }\r\n  return (op1 >> op2) | (op1 << (32U - op2));\r\n}\r\n\r\n/**\r\n  \\brief   Breakpoint\r\n  \\details Causes the processor to enter Debug state.\r\n           Debug tools can use this to investigate system state when the instruction at a particular address is reached.\r\n  \\param [in]    value  is ignored by the processor.\r\n                 If required, a debugger can use it to store additional information about the breakpoint.\r\n */\r\n#define __BKPT(value) __ASM volatile(\"bkpt \" #value)\r\n\r\n/**\r\n  \\brief   Reverse bit order of value\r\n  \\details Reverses the bit order of the given value.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#define __RBIT __builtin_arm_rbit\r\n\r\n/**\r\n  \\brief   Count leading zeros\r\n  \\details Counts the number of leading zeros of a data value.\r\n  \\param [in]  value  Value to count the leading zeros\r\n  \\return             number of leading zeros in value\r\n */\r\n#define __CLZ (uint8_t) __builtin_clz\r\n\r\n#if ((defined(__ARM_ARCH_7M__) && (__ARM_ARCH_7M__ == 1)) || (defined(__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) || (defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) \\\r\n     || (defined(__ARM_ARCH_8M_BASE__) && (__ARM_ARCH_8M_BASE__ == 1)))\r\n/**\r\n  \\brief   LDR Exclusive (8 bit)\r\n  \\details Executes a exclusive LDR instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n#define __LDREXB (uint8_t) __builtin_arm_ldrex\r\n\r\n/**\r\n  \\brief   LDR Exclusive (16 bit)\r\n  \\details Executes a exclusive LDR instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n#define __LDREXH (uint16_t) __builtin_arm_ldrex\r\n\r\n/**\r\n  \\brief   LDR Exclusive (32 bit)\r\n  \\details Executes a exclusive LDR instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n#define __LDREXW (uint32_t) __builtin_arm_ldrex\r\n\r\n/**\r\n  \\brief   STR Exclusive (8 bit)\r\n  \\details Executes a exclusive STR instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STREXB (uint32_t) __builtin_arm_strex\r\n\r\n/**\r\n  \\brief   STR Exclusive (16 bit)\r\n  \\details Executes a exclusive STR instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STREXH (uint32_t) __builtin_arm_strex\r\n\r\n/**\r\n  \\brief   STR Exclusive (32 bit)\r\n  \\details Executes a exclusive STR instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STREXW (uint32_t) __builtin_arm_strex\r\n\r\n/**\r\n  \\brief   Remove the exclusive lock\r\n  \\details Removes the exclusive lock which is created by LDREX.\r\n */\r\n#define __CLREX __builtin_arm_clrex\r\n\r\n#endif /* ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \\\r\n           (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \\\r\n           (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \\\r\n           (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    ) */\r\n\r\n#if ((defined(__ARM_ARCH_7M__) && (__ARM_ARCH_7M__ == 1)) || (defined(__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) || (defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)))\r\n\r\n/**\r\n  \\brief   Signed Saturate\r\n  \\details Saturates a signed value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (1..32)\r\n  \\return             Saturated value\r\n */\r\n#define __SSAT __builtin_arm_ssat\r\n\r\n/**\r\n  \\brief   Unsigned Saturate\r\n  \\details Saturates an unsigned value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (0..31)\r\n  \\return             Saturated value\r\n */\r\n#define __USAT __builtin_arm_usat\r\n\r\n/**\r\n  \\brief   Rotate Right with Extend (32 bit)\r\n  \\details Moves each bit of a bitstring right by one bit.\r\n           The carry input is shifted in at the left end of the bitstring.\r\n  \\param [in]    value  Value to rotate\r\n  \\return               Rotated value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"rrx %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldrbt %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return ((uint8_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldrht %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return ((uint16_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldrt %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) { __ASM volatile(\"strbt %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) { __ASM volatile(\"strht %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) { __ASM volatile(\"strt %1, %0\" : \"=Q\"(*ptr) : \"r\"(value)); }\r\n\r\n#else /* ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \\\r\n          (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \\\r\n          (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    ) */\r\n\r\n/**\r\n  \\brief   Signed Saturate\r\n  \\details Saturates a signed value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (1..32)\r\n  \\return             Saturated value\r\n */\r\n__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) {\r\n  if ((sat >= 1U) && (sat <= 32U)) {\r\n    const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U);\r\n    const int32_t min = -1 - max;\r\n    if (val > max) {\r\n      return max;\r\n    } else if (val < min) {\r\n      return min;\r\n    }\r\n  }\r\n  return val;\r\n}\r\n\r\n/**\r\n  \\brief   Unsigned Saturate\r\n  \\details Saturates an unsigned value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (0..31)\r\n  \\return             Saturated value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) {\r\n  if (sat <= 31U) {\r\n    const uint32_t max = ((1U << sat) - 1U);\r\n    if (val > (int32_t)max) {\r\n      return max;\r\n    } else if (val < 0) {\r\n      return 0U;\r\n    }\r\n  }\r\n  return (uint32_t)val;\r\n}\r\n\r\n#endif /* ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \\\r\n           (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \\\r\n           (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    ) */\r\n\r\n#if ((defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) || (defined(__ARM_ARCH_8M_BASE__) && (__ARM_ARCH_8M_BASE__ == 1)))\r\n/**\r\n  \\brief   Load-Acquire (8 bit)\r\n  \\details Executes a LDAB instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldab %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return ((uint8_t)result);\r\n}\r\n\r\n/**\r\n  \\brief   Load-Acquire (16 bit)\r\n  \\details Executes a LDAH instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldah %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return ((uint16_t)result);\r\n}\r\n\r\n/**\r\n  \\brief   Load-Acquire (32 bit)\r\n  \\details Executes a LDA instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"lda %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Store-Release (8 bit)\r\n  \\details Executes a STLB instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) { __ASM volatile(\"stlb %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   Store-Release (16 bit)\r\n  \\details Executes a STLH instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) { __ASM volatile(\"stlh %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   Store-Release (32 bit)\r\n  \\details Executes a STL instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) { __ASM volatile(\"stl %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   Load-Acquire Exclusive (8 bit)\r\n  \\details Executes a LDAB exclusive instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n#define __LDAEXB (uint8_t) __builtin_arm_ldaex\r\n\r\n/**\r\n  \\brief   Load-Acquire Exclusive (16 bit)\r\n  \\details Executes a LDAH exclusive instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n#define __LDAEXH (uint16_t) __builtin_arm_ldaex\r\n\r\n/**\r\n  \\brief   Load-Acquire Exclusive (32 bit)\r\n  \\details Executes a LDA exclusive instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n#define __LDAEX (uint32_t) __builtin_arm_ldaex\r\n\r\n/**\r\n  \\brief   Store-Release Exclusive (8 bit)\r\n  \\details Executes a STLB exclusive instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STLEXB (uint32_t) __builtin_arm_stlex\r\n\r\n/**\r\n  \\brief   Store-Release Exclusive (16 bit)\r\n  \\details Executes a STLH exclusive instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STLEXH (uint32_t) __builtin_arm_stlex\r\n\r\n/**\r\n  \\brief   Store-Release Exclusive (32 bit)\r\n  \\details Executes a STL exclusive instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STLEX (uint32_t) __builtin_arm_stlex\r\n\r\n#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \\\r\n           (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    ) */\r\n\r\n/*@}*/ /* end of group CMSIS_Core_InstructionInterface */\r\n\r\n/* ###################  Compiler specific Intrinsics  ########################### */\r\n/** \\defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics\r\n  Access to dedicated SIMD instructions\r\n  @{\r\n*/\r\n\r\n#if (defined(__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1))\r\n\r\n__STATIC_FORCEINLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __USAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usad8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usada8 %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n#define __SSAT16(ARG1, ARG2)                                           \\\r\n  ({                                                                   \\\r\n    int32_t __RES, __ARG1 = (ARG1);                                    \\\r\n    __ASM(\"ssat16 %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                             \\\r\n  })\r\n\r\n#define __USAT16(ARG1, ARG2)                                           \\\r\n  ({                                                                   \\\r\n    uint32_t __RES, __ARG1 = (ARG1);                                   \\\r\n    __ASM(\"usat16 %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                             \\\r\n  })\r\n\r\n__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uxtb16 %0, %1\" : \"=r\"(result) : \"r\"(op1));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uxtab16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sxtb16 %0, %1\" : \"=r\"(result) : \"r\"(op1));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sxtab16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SMUAD(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smuad %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SMUADX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smuadx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SMLAD(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlad %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SMLADX(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smladx %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint64_t __SMLALD(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlald %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlald %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint64_t __SMLALDX(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlaldx %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlaldx %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SMUSD(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smusd %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SMUSDX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smusdx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SMLSD(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlsd %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SMLSDX(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlsdx %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint64_t __SMLSLD(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlsld %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlsld %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint64_t __SMLSLDX(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlsldx %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlsldx %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SEL(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sel %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE int32_t __QADD(int32_t op1, int32_t op2) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"qadd %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE int32_t __QSUB(int32_t op1, int32_t op2) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"qsub %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n#if 0\r\n#define __PKHBT(ARG1, ARG2, ARG3)                                                          \\\r\n  ({                                                                                       \\\r\n    uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2);                                      \\\r\n    __ASM(\"pkhbt %0, %1, %2, lsl %3\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2), \"I\"(ARG3)); \\\r\n    __RES;                                                                                 \\\r\n  })\r\n\r\n#define __PKHTB(ARG1, ARG2, ARG3)                                                            \\\r\n  ({                                                                                         \\\r\n    uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2);                                        \\\r\n    if (ARG3 == 0)                                                                           \\\r\n      __ASM(\"pkhtb %0, %1, %2\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2));                    \\\r\n    else                                                                                     \\\r\n      __ASM(\"pkhtb %0, %1, %2, asr %3\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2), \"I\"(ARG3)); \\\r\n    __RES;                                                                                   \\\r\n  })\r\n#endif\r\n\r\n#define __PKHBT(ARG1, ARG2, ARG3) (((((uint32_t)(ARG1))) & 0x0000FFFFUL) | ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL))\r\n\r\n#define __PKHTB(ARG1, ARG2, ARG3) (((((uint32_t)(ARG1))) & 0xFFFF0000UL) | ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL))\r\n\r\n__STATIC_FORCEINLINE int32_t __SMMLA(int32_t op1, int32_t op2, int32_t op3) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"smmla %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n#endif /* (__ARM_FEATURE_DSP == 1) */\r\n/*@} end of group CMSIS_SIMD_intrinsics */\r\n\r\n#endif /* __CMSIS_ARMCLANG_H */\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/CMSIS/Include/cmsis_compiler.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     cmsis_compiler.h\r\n                                                                              * @brief    CMSIS compiler generic header file\r\n                                                                              * @version  V5.0.4\r\n                                                                              * @date     10. January 2018\r\n                                                                              ******************************************************************************/\r\n/*\r\n * Copyright (c) 2009-2018 Arm Limited. All rights reserved.\r\n *\r\n * SPDX-License-Identifier: Apache-2.0\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the License); you may\r\n * not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n#ifndef __CMSIS_COMPILER_H\r\n#define __CMSIS_COMPILER_H\r\n\r\n#include <stdint.h>\r\n\r\n/*\r\n * Arm Compiler 4/5\r\n */\r\n#if defined(__CC_ARM)\r\n#include \"cmsis_armcc.h\"\r\n\r\n/*\r\n * Arm Compiler 6 (armclang)\r\n */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#include \"cmsis_armclang.h\"\r\n\r\n/*\r\n * GNU Compiler\r\n */\r\n#elif defined(__GNUC__)\r\n#include \"cmsis_gcc.h\"\r\n\r\n/*\r\n * IAR Compiler\r\n */\r\n#elif defined(__ICCARM__)\r\n#include <cmsis_iccarm.h>\r\n\r\n/*\r\n * TI Arm Compiler\r\n */\r\n#elif defined(__TI_ARM__)\r\n#include <cmsis_ccs.h>\r\n\r\n#ifndef __ASM\r\n#define __ASM __asm\r\n#endif\r\n#ifndef __INLINE\r\n#define __INLINE inline\r\n#endif\r\n#ifndef __STATIC_INLINE\r\n#define __STATIC_INLINE static inline\r\n#endif\r\n#ifndef __STATIC_FORCEINLINE\r\n#define __STATIC_FORCEINLINE __STATIC_INLINE\r\n#endif\r\n#ifndef __NO_RETURN\r\n#define __NO_RETURN __attribute__((noreturn))\r\n#endif\r\n#ifndef __USED\r\n#define __USED __attribute__((used))\r\n#endif\r\n#ifndef __WEAK\r\n#define __WEAK __attribute__((weak))\r\n#endif\r\n#ifndef __PACKED\r\n#define __PACKED __attribute__((packed))\r\n#endif\r\n#ifndef __PACKED_STRUCT\r\n#define __PACKED_STRUCT struct __attribute__((packed))\r\n#endif\r\n#ifndef __PACKED_UNION\r\n#define __PACKED_UNION union __attribute__((packed))\r\n#endif\r\n#ifndef __UNALIGNED_UINT32 /* deprecated */\r\nstruct __attribute__((packed)) T_UINT32 {\r\n  uint32_t v;\r\n};\r\n#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)\r\n#endif\r\n#ifndef __UNALIGNED_UINT16_WRITE\r\n__PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };\r\n#define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))\r\n#endif\r\n#ifndef __UNALIGNED_UINT16_READ\r\n__PACKED_STRUCT T_UINT16_READ { uint16_t v; };\r\n#define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)\r\n#endif\r\n#ifndef __UNALIGNED_UINT32_WRITE\r\n__PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };\r\n#define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))\r\n#endif\r\n#ifndef __UNALIGNED_UINT32_READ\r\n__PACKED_STRUCT T_UINT32_READ { uint32_t v; };\r\n#define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)\r\n#endif\r\n#ifndef __ALIGNED\r\n#define __ALIGNED(x) __attribute__((aligned(x)))\r\n#endif\r\n#ifndef __RESTRICT\r\n#warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.\r\n#define __RESTRICT\r\n#endif\r\n\r\n/*\r\n * TASKING Compiler\r\n */\r\n#elif defined(__TASKING__)\r\n/*\r\n * The CMSIS functions have been implemented as intrinsics in the compiler.\r\n * Please use \"carm -?i\" to get an up to date list of all intrinsics,\r\n * Including the CMSIS ones.\r\n */\r\n\r\n#ifndef __ASM\r\n#define __ASM __asm\r\n#endif\r\n#ifndef __INLINE\r\n#define __INLINE inline\r\n#endif\r\n#ifndef __STATIC_INLINE\r\n#define __STATIC_INLINE static inline\r\n#endif\r\n#ifndef __STATIC_FORCEINLINE\r\n#define __STATIC_FORCEINLINE __STATIC_INLINE\r\n#endif\r\n#ifndef __NO_RETURN\r\n#define __NO_RETURN __attribute__((noreturn))\r\n#endif\r\n#ifndef __USED\r\n#define __USED __attribute__((used))\r\n#endif\r\n#ifndef __WEAK\r\n#define __WEAK __attribute__((weak))\r\n#endif\r\n#ifndef __PACKED\r\n#define __PACKED __packed__\r\n#endif\r\n#ifndef __PACKED_STRUCT\r\n#define __PACKED_STRUCT struct __packed__\r\n#endif\r\n#ifndef __PACKED_UNION\r\n#define __PACKED_UNION union __packed__\r\n#endif\r\n#ifndef __UNALIGNED_UINT32 /* deprecated */\r\nstruct __packed__ T_UINT32 {\r\n  uint32_t v;\r\n};\r\n#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)\r\n#endif\r\n#ifndef __UNALIGNED_UINT16_WRITE\r\n__PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };\r\n#define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))\r\n#endif\r\n#ifndef __UNALIGNED_UINT16_READ\r\n__PACKED_STRUCT T_UINT16_READ { uint16_t v; };\r\n#define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)\r\n#endif\r\n#ifndef __UNALIGNED_UINT32_WRITE\r\n__PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };\r\n#define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))\r\n#endif\r\n#ifndef __UNALIGNED_UINT32_READ\r\n__PACKED_STRUCT T_UINT32_READ { uint32_t v; };\r\n#define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)\r\n#endif\r\n#ifndef __ALIGNED\r\n#define __ALIGNED(x) __align(x)\r\n#endif\r\n#ifndef __RESTRICT\r\n#warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.\r\n#define __RESTRICT\r\n#endif\r\n\r\n/*\r\n * COSMIC Compiler\r\n */\r\n#elif defined(__CSMC__)\r\n#include <cmsis_csm.h>\r\n\r\n#ifndef __ASM\r\n#define __ASM _asm\r\n#endif\r\n#ifndef __INLINE\r\n#define __INLINE inline\r\n#endif\r\n#ifndef __STATIC_INLINE\r\n#define __STATIC_INLINE static inline\r\n#endif\r\n#ifndef __STATIC_FORCEINLINE\r\n#define __STATIC_FORCEINLINE __STATIC_INLINE\r\n#endif\r\n#ifndef __NO_RETURN\r\n// NO RETURN is automatically detected hence no warning here\r\n#define __NO_RETURN\r\n#endif\r\n#ifndef __USED\r\n#warning No compiler specific solution for __USED. __USED is ignored.\r\n#define __USED\r\n#endif\r\n#ifndef __WEAK\r\n#define __WEAK __weak\r\n#endif\r\n#ifndef __PACKED\r\n#define __PACKED @packed\r\n#endif\r\n#ifndef __PACKED_STRUCT\r\n#define __PACKED_STRUCT @packed struct\r\n#endif\r\n#ifndef __PACKED_UNION\r\n#define __PACKED_UNION @packed union\r\n#endif\r\n#ifndef __UNALIGNED_UINT32 /* deprecated */\r\n@packed struct T_UINT32 {\r\n  uint32_t v;\r\n};\r\n#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)\r\n#endif\r\n#ifndef __UNALIGNED_UINT16_WRITE\r\n__PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };\r\n#define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))\r\n#endif\r\n#ifndef __UNALIGNED_UINT16_READ\r\n__PACKED_STRUCT T_UINT16_READ { uint16_t v; };\r\n#define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)\r\n#endif\r\n#ifndef __UNALIGNED_UINT32_WRITE\r\n__PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };\r\n#define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))\r\n#endif\r\n#ifndef __UNALIGNED_UINT32_READ\r\n__PACKED_STRUCT T_UINT32_READ { uint32_t v; };\r\n#define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)\r\n#endif\r\n#ifndef __ALIGNED\r\n#warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored.\r\n#define __ALIGNED(x)\r\n#endif\r\n#ifndef __RESTRICT\r\n#warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored.\r\n#define __RESTRICT\r\n#endif\r\n\r\n#else\r\n#error Unknown compiler.\r\n#endif\r\n\r\n#endif /* __CMSIS_COMPILER_H */\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/CMSIS/Include/cmsis_gcc.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     cmsis_gcc.h\r\n                                                                              * @brief    CMSIS compiler GCC header file\r\n                                                                              * @version  V5.0.4\r\n                                                                              * @date     09. April 2018\r\n                                                                              ******************************************************************************/\r\n/*\r\n * Copyright (c) 2009-2018 Arm Limited. All rights reserved.\r\n *\r\n * SPDX-License-Identifier: Apache-2.0\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the License); you may\r\n * not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n#ifndef __CMSIS_GCC_H\r\n#define __CMSIS_GCC_H\r\n\r\n/* ignore some GCC warnings */\r\n#pragma GCC diagnostic push\r\n#pragma GCC diagnostic ignored \"-Wsign-conversion\"\r\n#pragma GCC diagnostic ignored \"-Wconversion\"\r\n#pragma GCC diagnostic ignored \"-Wunused-parameter\"\r\n\r\n/* Fallback for __has_builtin */\r\n#ifndef __has_builtin\r\n#define __has_builtin(x) (0)\r\n#endif\r\n\r\n/* CMSIS compiler specific defines */\r\n#ifndef __ASM\r\n#define __ASM __asm\r\n#endif\r\n#ifndef __INLINE\r\n#define __INLINE inline\r\n#endif\r\n#ifndef __STATIC_INLINE\r\n#define __STATIC_INLINE static inline\r\n#endif\r\n#ifndef __STATIC_FORCEINLINE\r\n#define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline\r\n#endif\r\n#ifndef __NO_RETURN\r\n#define __NO_RETURN __attribute__((__noreturn__))\r\n#endif\r\n#ifndef __USED\r\n#define __USED __attribute__((used))\r\n#endif\r\n#ifndef __WEAK\r\n#define __WEAK __attribute__((weak))\r\n#endif\r\n#ifndef __PACKED\r\n#define __PACKED __attribute__((packed, aligned(1)))\r\n#endif\r\n#ifndef __PACKED_STRUCT\r\n#define __PACKED_STRUCT struct __attribute__((packed, aligned(1)))\r\n#endif\r\n#ifndef __PACKED_UNION\r\n#define __PACKED_UNION union __attribute__((packed, aligned(1)))\r\n#endif\r\n#ifndef __UNALIGNED_UINT32 /* deprecated */\r\n#pragma GCC diagnostic push\r\n#pragma GCC diagnostic ignored \"-Wpacked\"\r\n#pragma GCC diagnostic ignored \"-Wattributes\"\r\nstruct __attribute__((packed)) T_UINT32 {\r\n  uint32_t v;\r\n};\r\n#pragma GCC diagnostic pop\r\n#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)\r\n#endif\r\n#ifndef __UNALIGNED_UINT16_WRITE\r\n#pragma GCC diagnostic push\r\n#pragma GCC diagnostic ignored \"-Wpacked\"\r\n#pragma GCC diagnostic ignored \"-Wattributes\"\r\n__PACKED_STRUCT        T_UINT16_WRITE { uint16_t v; };\r\n#pragma GCC diagnostic pop\r\n#define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))\r\n#endif\r\n#ifndef __UNALIGNED_UINT16_READ\r\n#pragma GCC diagnostic push\r\n#pragma GCC diagnostic ignored \"-Wpacked\"\r\n#pragma GCC diagnostic ignored \"-Wattributes\"\r\n__PACKED_STRUCT        T_UINT16_READ { uint16_t v; };\r\n#pragma GCC diagnostic pop\r\n#define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)\r\n#endif\r\n#ifndef __UNALIGNED_UINT32_WRITE\r\n#pragma GCC diagnostic push\r\n#pragma GCC diagnostic ignored \"-Wpacked\"\r\n#pragma GCC diagnostic ignored \"-Wattributes\"\r\n__PACKED_STRUCT        T_UINT32_WRITE { uint32_t v; };\r\n#pragma GCC diagnostic pop\r\n#define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))\r\n#endif\r\n#ifndef __UNALIGNED_UINT32_READ\r\n#pragma GCC diagnostic push\r\n#pragma GCC diagnostic ignored \"-Wpacked\"\r\n#pragma GCC diagnostic ignored \"-Wattributes\"\r\n__PACKED_STRUCT        T_UINT32_READ { uint32_t v; };\r\n#pragma GCC diagnostic pop\r\n#define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)\r\n#endif\r\n#ifndef __ALIGNED\r\n#define __ALIGNED(x) __attribute__((aligned(x)))\r\n#endif\r\n#ifndef __RESTRICT\r\n#define __RESTRICT __restrict\r\n#endif\r\n\r\n/* ###########################  Core Function Access  ########################### */\r\n/** \\ingroup  CMSIS_Core_FunctionInterface\r\n    \\defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Enable IRQ Interrupts\r\n  \\details Enables IRQ interrupts by clearing the I-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__STATIC_FORCEINLINE void __enable_irq(void) { __ASM volatile(\"cpsie i\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Disable IRQ Interrupts\r\n  \\details Disables IRQ interrupts by setting the I-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__STATIC_FORCEINLINE void __disable_irq(void) { __ASM volatile(\"cpsid i\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Get Control Register\r\n  \\details Returns the content of the Control Register.\r\n  \\return               Control Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, control\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Control Register (non-secure)\r\n  \\details Returns the content of the non-secure Control Register when in secure mode.\r\n  \\return               non-secure Control Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, control_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Control Register\r\n  \\details Writes the given value to the Control Register.\r\n  \\param [in]    control  Control Register value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) { __ASM volatile(\"MSR control, %0\" : : \"r\"(control) : \"memory\"); }\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Set Control Register (non-secure)\r\n  \\details Writes the given value to the non-secure Control Register when in secure state.\r\n  \\param [in]    control  Control Register value to set\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) { __ASM volatile(\"MSR control_ns, %0\" : : \"r\"(control) : \"memory\"); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Get IPSR Register\r\n  \\details Returns the content of the IPSR Register.\r\n  \\return               IPSR Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_IPSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, ipsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Get APSR Register\r\n  \\details Returns the content of the APSR Register.\r\n  \\return               APSR Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_APSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, apsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Get xPSR Register\r\n  \\details Returns the content of the xPSR Register.\r\n  \\return               xPSR Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_xPSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, xpsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Get Process Stack Pointer\r\n  \\details Returns the current value of the Process Stack Pointer (PSP).\r\n  \\return               PSP Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_PSP(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, psp\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Process Stack Pointer (non-secure)\r\n  \\details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state.\r\n  \\return               PSP Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, psp_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Process Stack Pointer\r\n  \\details Assigns the given value to the Process Stack Pointer (PSP).\r\n  \\param [in]    topOfProcStack  Process Stack Pointer value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) { __ASM volatile(\"MSR psp, %0\" : : \"r\"(topOfProcStack) :); }\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Set Process Stack Pointer (non-secure)\r\n  \\details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state.\r\n  \\param [in]    topOfProcStack  Process Stack Pointer value to set\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) { __ASM volatile(\"MSR psp_ns, %0\" : : \"r\"(topOfProcStack) :); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Get Main Stack Pointer\r\n  \\details Returns the current value of the Main Stack Pointer (MSP).\r\n  \\return               MSP Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_MSP(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, msp\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Main Stack Pointer (non-secure)\r\n  \\details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state.\r\n  \\return               MSP Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, msp_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Main Stack Pointer\r\n  \\details Assigns the given value to the Main Stack Pointer (MSP).\r\n  \\param [in]    topOfMainStack  Main Stack Pointer value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) { __ASM volatile(\"MSR msp, %0\" : : \"r\"(topOfMainStack) :); }\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Set Main Stack Pointer (non-secure)\r\n  \\details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state.\r\n  \\param [in]    topOfMainStack  Main Stack Pointer value to set\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) { __ASM volatile(\"MSR msp_ns, %0\" : : \"r\"(topOfMainStack) :); }\r\n#endif\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Stack Pointer (non-secure)\r\n  \\details Returns the current value of the non-secure Stack Pointer (SP) when in secure state.\r\n  \\return               SP Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, sp_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Set Stack Pointer (non-secure)\r\n  \\details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state.\r\n  \\param [in]    topOfStack  Stack Pointer value to set\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) { __ASM volatile(\"MSR sp_ns, %0\" : : \"r\"(topOfStack) :); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Get Priority Mask\r\n  \\details Returns the current state of the priority mask bit from the Priority Mask Register.\r\n  \\return               Priority Mask value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, primask\" : \"=r\"(result)::\"memory\");\r\n  return (result);\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Priority Mask (non-secure)\r\n  \\details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state.\r\n  \\return               Priority Mask value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, primask_ns\" : \"=r\"(result)::\"memory\");\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Priority Mask\r\n  \\details Assigns the given value to the Priority Mask Register.\r\n  \\param [in]    priMask  Priority Mask\r\n */\r\n__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) { __ASM volatile(\"MSR primask, %0\" : : \"r\"(priMask) : \"memory\"); }\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Set Priority Mask (non-secure)\r\n  \\details Assigns the given value to the non-secure Priority Mask Register when in secure state.\r\n  \\param [in]    priMask  Priority Mask\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) { __ASM volatile(\"MSR primask_ns, %0\" : : \"r\"(priMask) : \"memory\"); }\r\n#endif\r\n\r\n#if ((defined(__ARM_ARCH_7M__) && (__ARM_ARCH_7M__ == 1)) || (defined(__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) || (defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)))\r\n/**\r\n  \\brief   Enable FIQ\r\n  \\details Enables FIQ interrupts by clearing the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__STATIC_FORCEINLINE void __enable_fault_irq(void) { __ASM volatile(\"cpsie f\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Disable FIQ\r\n  \\details Disables FIQ interrupts by setting the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__STATIC_FORCEINLINE void __disable_fault_irq(void) { __ASM volatile(\"cpsid f\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Get Base Priority\r\n  \\details Returns the current value of the Base Priority register.\r\n  \\return               Base Priority register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, basepri\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Base Priority (non-secure)\r\n  \\details Returns the current value of the non-secure Base Priority register when in secure state.\r\n  \\return               Base Priority register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, basepri_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Base Priority\r\n  \\details Assigns the given value to the Base Priority register.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) { __ASM volatile(\"MSR basepri, %0\" : : \"r\"(basePri) : \"memory\"); }\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Set Base Priority (non-secure)\r\n  \\details Assigns the given value to the non-secure Base Priority register when in secure state.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) { __ASM volatile(\"MSR basepri_ns, %0\" : : \"r\"(basePri) : \"memory\"); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Base Priority with condition\r\n  \\details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled,\r\n           or the new value increases the BASEPRI priority level.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) { __ASM volatile(\"MSR basepri_max, %0\" : : \"r\"(basePri) : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Get Fault Mask\r\n  \\details Returns the current value of the Fault Mask register.\r\n  \\return               Fault Mask register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, faultmask\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Fault Mask (non-secure)\r\n  \\details Returns the current value of the non-secure Fault Mask register when in secure state.\r\n  \\return               Fault Mask register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, faultmask_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Fault Mask\r\n  \\details Assigns the given value to the Fault Mask register.\r\n  \\param [in]    faultMask  Fault Mask value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) { __ASM volatile(\"MSR faultmask, %0\" : : \"r\"(faultMask) : \"memory\"); }\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Set Fault Mask (non-secure)\r\n  \\details Assigns the given value to the non-secure Fault Mask register when in secure state.\r\n  \\param [in]    faultMask  Fault Mask value to set\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) { __ASM volatile(\"MSR faultmask_ns, %0\" : : \"r\"(faultMask) : \"memory\"); }\r\n#endif\r\n\r\n#endif /* ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \\\r\n           (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \\\r\n           (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    ) */\r\n\r\n#if ((defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) || (defined(__ARM_ARCH_8M_BASE__) && (__ARM_ARCH_8M_BASE__ == 1)))\r\n\r\n/**\r\n  \\brief   Get Process Stack Pointer Limit\r\n  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure\r\n  Stack Pointer Limit register hence zero is returned always in non-secure\r\n  mode.\r\n\r\n  \\details Returns the current value of the Process Stack Pointer Limit (PSPLIM).\r\n  \\return               PSPLIM Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n  // without main extensions, the non-secure PSPLIM is RAZ/WI\r\n  return 0U;\r\n#else\r\n  uint32_t result;\r\n  __ASM volatile(\"MRS %0, psplim\" : \"=r\"(result));\r\n  return result;\r\n#endif\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Process Stack Pointer Limit (non-secure)\r\n  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure\r\n  Stack Pointer Limit register hence zero is returned always.\r\n\r\n  \\details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state.\r\n  \\return               PSPLIM Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)))\r\n  // without main extensions, the non-secure PSPLIM is RAZ/WI\r\n  return 0U;\r\n#else\r\n  uint32_t result;\r\n  __ASM volatile(\"MRS %0, psplim_ns\" : \"=r\"(result));\r\n  return result;\r\n#endif\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Process Stack Pointer Limit\r\n  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure\r\n  Stack Pointer Limit register hence the write is silently ignored in non-secure\r\n  mode.\r\n\r\n  \\details Assigns the given value to the Process Stack Pointer Limit (PSPLIM).\r\n  \\param [in]    ProcStackPtrLimit  Process Stack Pointer Limit value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n  // without main extensions, the non-secure PSPLIM is RAZ/WI\r\n  (void)ProcStackPtrLimit;\r\n#else\r\n  __ASM volatile(\"MSR psplim, %0\" : : \"r\"(ProcStackPtrLimit));\r\n#endif\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Set Process Stack Pointer (non-secure)\r\n  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure\r\n  Stack Pointer Limit register hence the write is silently ignored.\r\n\r\n  \\details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state.\r\n  \\param [in]    ProcStackPtrLimit  Process Stack Pointer Limit value to set\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)))\r\n  // without main extensions, the non-secure PSPLIM is RAZ/WI\r\n  (void)ProcStackPtrLimit;\r\n#else\r\n  __ASM volatile(\"MSR psplim_ns, %0\\n\" : : \"r\"(ProcStackPtrLimit));\r\n#endif\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Get Main Stack Pointer Limit\r\n  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure\r\n  Stack Pointer Limit register hence zero is returned always in non-secure\r\n  mode.\r\n\r\n  \\details Returns the current value of the Main Stack Pointer Limit (MSPLIM).\r\n  \\return               MSPLIM Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n  // without main extensions, the non-secure MSPLIM is RAZ/WI\r\n  return 0U;\r\n#else\r\n  uint32_t result;\r\n  __ASM volatile(\"MRS %0, msplim\" : \"=r\"(result));\r\n  return result;\r\n#endif\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Get Main Stack Pointer Limit (non-secure)\r\n  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure\r\n  Stack Pointer Limit register hence zero is returned always.\r\n\r\n  \\details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state.\r\n  \\return               MSPLIM Register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)))\r\n  // without main extensions, the non-secure MSPLIM is RAZ/WI\r\n  return 0U;\r\n#else\r\n  uint32_t result;\r\n  __ASM volatile(\"MRS %0, msplim_ns\" : \"=r\"(result));\r\n  return result;\r\n#endif\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Main Stack Pointer Limit\r\n  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure\r\n  Stack Pointer Limit register hence the write is silently ignored in non-secure\r\n  mode.\r\n\r\n  \\details Assigns the given value to the Main Stack Pointer Limit (MSPLIM).\r\n  \\param [in]    MainStackPtrLimit  Main Stack Pointer Limit value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n  // without main extensions, the non-secure MSPLIM is RAZ/WI\r\n  (void)MainStackPtrLimit;\r\n#else\r\n  __ASM volatile(\"MSR msplim, %0\" : : \"r\"(MainStackPtrLimit));\r\n#endif\r\n}\r\n\r\n#if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3))\r\n/**\r\n  \\brief   Set Main Stack Pointer Limit (non-secure)\r\n  Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure\r\n  Stack Pointer Limit register hence the write is silently ignored.\r\n\r\n  \\details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state.\r\n  \\param [in]    MainStackPtrLimit  Main Stack Pointer value to set\r\n */\r\n__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)))\r\n  // without main extensions, the non-secure MSPLIM is RAZ/WI\r\n  (void)MainStackPtrLimit;\r\n#else\r\n  __ASM volatile(\"MSR msplim_ns, %0\" : : \"r\"(MainStackPtrLimit));\r\n#endif\r\n}\r\n#endif\r\n\r\n#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \\\r\n           (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    ) */\r\n\r\n/**\r\n  \\brief   Get FPSCR\r\n  \\details Returns the current value of the Floating Point Status/Control register.\r\n  \\return               Floating Point Status/Control register value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __get_FPSCR(void) {\r\n#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && (defined(__FPU_USED) && (__FPU_USED == 1U)))\r\n#if __has_builtin(__builtin_arm_get_fpscr)\r\n  // Re-enable using built-in when GCC has been fixed\r\n  // || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2)\r\n  /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */\r\n  return __builtin_arm_get_fpscr();\r\n#else\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"VMRS %0, fpscr\" : \"=r\"(result));\r\n  return (result);\r\n#endif\r\n#else\r\n  return (0U);\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Set FPSCR\r\n  \\details Assigns the given value to the Floating Point Status/Control register.\r\n  \\param [in]    fpscr  Floating Point Status/Control value to set\r\n */\r\n__STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr) {\r\n#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && (defined(__FPU_USED) && (__FPU_USED == 1U)))\r\n#if __has_builtin(__builtin_arm_set_fpscr)\r\n  // Re-enable using built-in when GCC has been fixed\r\n  // || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2)\r\n  /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */\r\n  __builtin_arm_set_fpscr(fpscr);\r\n#else\r\n  __ASM volatile(\"VMSR fpscr, %0\" : : \"r\"(fpscr) : \"vfpcc\", \"memory\");\r\n#endif\r\n#else\r\n  (void)fpscr;\r\n#endif\r\n}\r\n\r\n/*@} end of CMSIS_Core_RegAccFunctions */\r\n\r\n/* ##########################  Core Instruction Access  ######################### */\r\n/** \\defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface\r\n  Access to dedicated instructions\r\n  @{\r\n*/\r\n\r\n/* Define macros for porting to both thumb1 and thumb2.\r\n * For thumb1, use low register (r0-r7), specified by constraint \"l\"\r\n * Otherwise, use general registers, specified by constraint \"r\" */\r\n#if defined(__thumb__) && !defined(__thumb2__)\r\n#define __CMSIS_GCC_OUT_REG(r) \"=l\"(r)\r\n#define __CMSIS_GCC_RW_REG(r)  \"+l\"(r)\r\n#define __CMSIS_GCC_USE_REG(r) \"l\"(r)\r\n#else\r\n#define __CMSIS_GCC_OUT_REG(r) \"=r\"(r)\r\n#define __CMSIS_GCC_RW_REG(r)  \"+r\"(r)\r\n#define __CMSIS_GCC_USE_REG(r) \"r\"(r)\r\n#endif\r\n\r\n/**\r\n  \\brief   No Operation\r\n  \\details No Operation does nothing. This instruction can be used for code alignment purposes.\r\n */\r\n#define __NOP() __ASM volatile(\"nop\")\r\n\r\n/**\r\n  \\brief   Wait For Interrupt\r\n  \\details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.\r\n */\r\n#define __WFI() __ASM volatile(\"wfi\")\r\n\r\n/**\r\n  \\brief   Wait For Event\r\n  \\details Wait For Event is a hint instruction that permits the processor to enter\r\n           a low-power state until one of a number of events occurs.\r\n */\r\n#define __WFE() __ASM volatile(\"wfe\")\r\n\r\n/**\r\n  \\brief   Send Event\r\n  \\details Send Event is a hint instruction. It causes an event to be signaled to the CPU.\r\n */\r\n#define __SEV() __ASM volatile(\"sev\")\r\n\r\n/**\r\n  \\brief   Instruction Synchronization Barrier\r\n  \\details Instruction Synchronization Barrier flushes the pipeline in the processor,\r\n           so that all instructions following the ISB are fetched from cache or memory,\r\n           after the instruction has been completed.\r\n */\r\n__STATIC_FORCEINLINE void __ISB(void) { __ASM volatile(\"isb 0xF\" ::: \"memory\"); }\r\n\r\n/**\r\n  \\brief   Data Synchronization Barrier\r\n  \\details Acts as a special kind of Data Memory Barrier.\r\n           It completes when all explicit memory accesses before this instruction complete.\r\n */\r\n__STATIC_FORCEINLINE void __DSB(void) { __ASM volatile(\"dsb 0xF\" ::: \"memory\"); }\r\n\r\n/**\r\n  \\brief   Data Memory Barrier\r\n  \\details Ensures the apparent order of the explicit memory operations before\r\n           and after the instruction, without ensuring their completion.\r\n */\r\n__STATIC_FORCEINLINE void __DMB(void) { __ASM volatile(\"dmb 0xF\" ::: \"memory\"); }\r\n\r\n/**\r\n  \\brief   Reverse byte order (32 bit)\r\n  \\details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __REV(uint32_t value) {\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)\r\n  return __builtin_bswap32(value);\r\n#else\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"rev %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return result;\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Reverse byte order (16 bit)\r\n  \\details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __REV16(uint32_t value) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"rev16 %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return result;\r\n}\r\n\r\n/**\r\n  \\brief   Reverse byte order (16 bit)\r\n  \\details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n__STATIC_FORCEINLINE int16_t __REVSH(int16_t value) {\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)\r\n  return (int16_t)__builtin_bswap16(value);\r\n#else\r\n  int16_t result;\r\n\r\n  __ASM volatile(\"revsh %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return result;\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Rotate Right in unsigned value (32 bit)\r\n  \\details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.\r\n  \\param [in]    op1  Value to rotate\r\n  \\param [in]    op2  Number of Bits to rotate\r\n  \\return               Rotated value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) {\r\n  op2 %= 32U;\r\n  if (op2 == 0U) {\r\n    return op1;\r\n  }\r\n  return (op1 >> op2) | (op1 << (32U - op2));\r\n}\r\n\r\n/**\r\n  \\brief   Breakpoint\r\n  \\details Causes the processor to enter Debug state.\r\n           Debug tools can use this to investigate system state when the instruction at a particular address is reached.\r\n  \\param [in]    value  is ignored by the processor.\r\n                 If required, a debugger can use it to store additional information about the breakpoint.\r\n */\r\n#define __BKPT(value) __ASM volatile(\"bkpt \" #value)\r\n\r\n/**\r\n  \\brief   Reverse bit order of value\r\n  \\details Reverses the bit order of the given value.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value) {\r\n  uint32_t result;\r\n\r\n#if ((defined(__ARM_ARCH_7M__) && (__ARM_ARCH_7M__ == 1)) || (defined(__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) || (defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)))\r\n  __ASM volatile(\"rbit %0, %1\" : \"=r\"(result) : \"r\"(value));\r\n#else\r\n  uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */\r\n\r\n  result = value; /* r will be reversed bits of v; first get LSB of v */\r\n  for (value >>= 1U; value != 0U; value >>= 1U) {\r\n    result <<= 1U;\r\n    result |= value & 1U;\r\n    s--;\r\n  }\r\n  result <<= s; /* shift when v's highest bits are zero */\r\n#endif\r\n  return result;\r\n}\r\n\r\n/**\r\n  \\brief   Count leading zeros\r\n  \\details Counts the number of leading zeros of a data value.\r\n  \\param [in]  value  Value to count the leading zeros\r\n  \\return             number of leading zeros in value\r\n */\r\n#define __CLZ (uint8_t) __builtin_clz\r\n\r\n#if ((defined(__ARM_ARCH_7M__) && (__ARM_ARCH_7M__ == 1)) || (defined(__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) || (defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) \\\r\n     || (defined(__ARM_ARCH_8M_BASE__) && (__ARM_ARCH_8M_BASE__ == 1)))\r\n/**\r\n  \\brief   LDR Exclusive (8 bit)\r\n  \\details Executes a exclusive LDR instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint8_t __LDREXB(volatile uint8_t *addr) {\r\n  uint32_t result;\r\n\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)\r\n  __ASM volatile(\"ldrexb %0, %1\" : \"=r\"(result) : \"Q\"(*addr));\r\n#else\r\n  /* Prior to GCC 4.8, \"Q\" will be expanded to [rx, #0] which is not\r\n     accepted by assembler. So has to use following less efficient pattern.\r\n  */\r\n  __ASM volatile(\"ldrexb %0, [%1]\" : \"=r\"(result) : \"r\"(addr) : \"memory\");\r\n#endif\r\n  return ((uint8_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDR Exclusive (16 bit)\r\n  \\details Executes a exclusive LDR instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint16_t __LDREXH(volatile uint16_t *addr) {\r\n  uint32_t result;\r\n\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)\r\n  __ASM volatile(\"ldrexh %0, %1\" : \"=r\"(result) : \"Q\"(*addr));\r\n#else\r\n  /* Prior to GCC 4.8, \"Q\" will be expanded to [rx, #0] which is not\r\n     accepted by assembler. So has to use following less efficient pattern.\r\n  */\r\n  __ASM volatile(\"ldrexh %0, [%1]\" : \"=r\"(result) : \"r\"(addr) : \"memory\");\r\n#endif\r\n  return ((uint16_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDR Exclusive (32 bit)\r\n  \\details Executes a exclusive LDR instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldrex %0, %1\" : \"=r\"(result) : \"Q\"(*addr));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   STR Exclusive (8 bit)\r\n  \\details Executes a exclusive STR instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n__STATIC_FORCEINLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"strexb %0, %2, %1\" : \"=&r\"(result), \"=Q\"(*addr) : \"r\"((uint32_t)value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   STR Exclusive (16 bit)\r\n  \\details Executes a exclusive STR instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n__STATIC_FORCEINLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"strexh %0, %2, %1\" : \"=&r\"(result), \"=Q\"(*addr) : \"r\"((uint32_t)value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   STR Exclusive (32 bit)\r\n  \\details Executes a exclusive STR instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n__STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"strex %0, %2, %1\" : \"=&r\"(result), \"=Q\"(*addr) : \"r\"(value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Remove the exclusive lock\r\n  \\details Removes the exclusive lock which is created by LDREX.\r\n */\r\n__STATIC_FORCEINLINE void __CLREX(void) { __ASM volatile(\"clrex\" ::: \"memory\"); }\r\n\r\n#endif /* ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \\\r\n           (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \\\r\n           (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \\\r\n           (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    ) */\r\n\r\n#if ((defined(__ARM_ARCH_7M__) && (__ARM_ARCH_7M__ == 1)) || (defined(__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) || (defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)))\r\n/**\r\n  \\brief   Signed Saturate\r\n  \\details Saturates a signed value.\r\n  \\param [in]  ARG1  Value to be saturated\r\n  \\param [in]  ARG2  Bit position to saturate to (1..32)\r\n  \\return             Saturated value\r\n */\r\n#define __SSAT(ARG1, ARG2)                                           \\\r\n  __extension__({                                                    \\\r\n    int32_t __RES, __ARG1 = (ARG1);                                  \\\r\n    __ASM(\"ssat %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                           \\\r\n  })\r\n\r\n/**\r\n  \\brief   Unsigned Saturate\r\n  \\details Saturates an unsigned value.\r\n  \\param [in]  ARG1  Value to be saturated\r\n  \\param [in]  ARG2  Bit position to saturate to (0..31)\r\n  \\return             Saturated value\r\n */\r\n#define __USAT(ARG1, ARG2)                                           \\\r\n  __extension__({                                                    \\\r\n    uint32_t __RES, __ARG1 = (ARG1);                                 \\\r\n    __ASM(\"usat %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                           \\\r\n  })\r\n\r\n/**\r\n  \\brief   Rotate Right with Extend (32 bit)\r\n  \\details Moves each bit of a bitstring right by one bit.\r\n           The carry input is shifted in at the left end of the bitstring.\r\n  \\param [in]    value  Value to rotate\r\n  \\return               Rotated value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"rrx %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) {\r\n  uint32_t result;\r\n\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)\r\n  __ASM volatile(\"ldrbt %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n#else\r\n  /* Prior to GCC 4.8, \"Q\" will be expanded to [rx, #0] which is not\r\n     accepted by assembler. So has to use following less efficient pattern.\r\n  */\r\n  __ASM volatile(\"ldrbt %0, [%1]\" : \"=r\"(result) : \"r\"(ptr) : \"memory\");\r\n#endif\r\n  return ((uint8_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) {\r\n  uint32_t result;\r\n\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)\r\n  __ASM volatile(\"ldrht %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n#else\r\n  /* Prior to GCC 4.8, \"Q\" will be expanded to [rx, #0] which is not\r\n     accepted by assembler. So has to use following less efficient pattern.\r\n  */\r\n  __ASM volatile(\"ldrht %0, [%1]\" : \"=r\"(result) : \"r\"(ptr) : \"memory\");\r\n#endif\r\n  return ((uint16_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldrt %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) { __ASM volatile(\"strbt %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) { __ASM volatile(\"strht %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) { __ASM volatile(\"strt %1, %0\" : \"=Q\"(*ptr) : \"r\"(value)); }\r\n\r\n#else /* ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \\\r\n          (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \\\r\n          (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    ) */\r\n\r\n/**\r\n  \\brief   Signed Saturate\r\n  \\details Saturates a signed value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (1..32)\r\n  \\return             Saturated value\r\n */\r\n__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) {\r\n  if ((sat >= 1U) && (sat <= 32U)) {\r\n    const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U);\r\n    const int32_t min = -1 - max;\r\n    if (val > max) {\r\n      return max;\r\n    } else if (val < min) {\r\n      return min;\r\n    }\r\n  }\r\n  return val;\r\n}\r\n\r\n/**\r\n  \\brief   Unsigned Saturate\r\n  \\details Saturates an unsigned value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (0..31)\r\n  \\return             Saturated value\r\n */\r\n__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) {\r\n  if (sat <= 31U) {\r\n    const uint32_t max = ((1U << sat) - 1U);\r\n    if (val > (int32_t)max) {\r\n      return max;\r\n    } else if (val < 0) {\r\n      return 0U;\r\n    }\r\n  }\r\n  return (uint32_t)val;\r\n}\r\n\r\n#endif /* ((defined (__ARM_ARCH_7M__      ) && (__ARM_ARCH_7M__      == 1)) || \\\r\n           (defined (__ARM_ARCH_7EM__     ) && (__ARM_ARCH_7EM__     == 1)) || \\\r\n           (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))    ) */\r\n\r\n#if ((defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) || (defined(__ARM_ARCH_8M_BASE__) && (__ARM_ARCH_8M_BASE__ == 1)))\r\n/**\r\n  \\brief   Load-Acquire (8 bit)\r\n  \\details Executes a LDAB instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldab %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return ((uint8_t)result);\r\n}\r\n\r\n/**\r\n  \\brief   Load-Acquire (16 bit)\r\n  \\details Executes a LDAH instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldah %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return ((uint16_t)result);\r\n}\r\n\r\n/**\r\n  \\brief   Load-Acquire (32 bit)\r\n  \\details Executes a LDA instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"lda %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Store-Release (8 bit)\r\n  \\details Executes a STLB instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) { __ASM volatile(\"stlb %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   Store-Release (16 bit)\r\n  \\details Executes a STLH instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) { __ASM volatile(\"stlh %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   Store-Release (32 bit)\r\n  \\details Executes a STL instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) { __ASM volatile(\"stl %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   Load-Acquire Exclusive (8 bit)\r\n  \\details Executes a LDAB exclusive instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint8_t __LDAEXB(volatile uint8_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldaexb %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return ((uint8_t)result);\r\n}\r\n\r\n/**\r\n  \\brief   Load-Acquire Exclusive (16 bit)\r\n  \\details Executes a LDAH exclusive instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint16_t __LDAEXH(volatile uint16_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldaexh %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return ((uint16_t)result);\r\n}\r\n\r\n/**\r\n  \\brief   Load-Acquire Exclusive (32 bit)\r\n  \\details Executes a LDA exclusive instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n__STATIC_FORCEINLINE uint32_t __LDAEX(volatile uint32_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldaex %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Store-Release Exclusive (8 bit)\r\n  \\details Executes a STLB exclusive instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n__STATIC_FORCEINLINE uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"stlexb %0, %2, %1\" : \"=&r\"(result), \"=Q\"(*ptr) : \"r\"((uint32_t)value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Store-Release Exclusive (16 bit)\r\n  \\details Executes a STLH exclusive instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n__STATIC_FORCEINLINE uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"stlexh %0, %2, %1\" : \"=&r\"(result), \"=Q\"(*ptr) : \"r\"((uint32_t)value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Store-Release Exclusive (32 bit)\r\n  \\details Executes a STL exclusive instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n__STATIC_FORCEINLINE uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"stlex %0, %2, %1\" : \"=&r\"(result), \"=Q\"(*ptr) : \"r\"((uint32_t)value));\r\n  return (result);\r\n}\r\n\r\n#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \\\r\n           (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1))    ) */\r\n\r\n/*@}*/ /* end of group CMSIS_Core_InstructionInterface */\r\n\r\n/* ###################  Compiler specific Intrinsics  ########################### */\r\n/** \\defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics\r\n  Access to dedicated SIMD instructions\r\n  @{\r\n*/\r\n\r\n#if (defined(__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1))\r\n\r\n__STATIC_FORCEINLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __USAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usad8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usada8 %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n#define __SSAT16(ARG1, ARG2)                                           \\\r\n  ({                                                                   \\\r\n    int32_t __RES, __ARG1 = (ARG1);                                    \\\r\n    __ASM(\"ssat16 %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                             \\\r\n  })\r\n\r\n#define __USAT16(ARG1, ARG2)                                           \\\r\n  ({                                                                   \\\r\n    uint32_t __RES, __ARG1 = (ARG1);                                   \\\r\n    __ASM(\"usat16 %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                             \\\r\n  })\r\n\r\n__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uxtb16 %0, %1\" : \"=r\"(result) : \"r\"(op1));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uxtab16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sxtb16 %0, %1\" : \"=r\"(result) : \"r\"(op1));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sxtab16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SMUAD(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smuad %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SMUADX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smuadx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SMLAD(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlad %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SMLADX(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smladx %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint64_t __SMLALD(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlald %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlald %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint64_t __SMLALDX(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlaldx %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlaldx %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SMUSD(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smusd %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SMUSDX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smusdx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SMLSD(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlsd %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SMLSDX(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlsdx %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint64_t __SMLSLD(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlsld %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlsld %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint64_t __SMLSLDX(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlsldx %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlsldx %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__STATIC_FORCEINLINE uint32_t __SEL(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sel %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE int32_t __QADD(int32_t op1, int32_t op2) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"qadd %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__STATIC_FORCEINLINE int32_t __QSUB(int32_t op1, int32_t op2) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"qsub %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n#if 0\r\n#define __PKHBT(ARG1, ARG2, ARG3)                                                          \\\r\n  ({                                                                                       \\\r\n    uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2);                                      \\\r\n    __ASM(\"pkhbt %0, %1, %2, lsl %3\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2), \"I\"(ARG3)); \\\r\n    __RES;                                                                                 \\\r\n  })\r\n\r\n#define __PKHTB(ARG1, ARG2, ARG3)                                                            \\\r\n  ({                                                                                         \\\r\n    uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2);                                        \\\r\n    if (ARG3 == 0)                                                                           \\\r\n      __ASM(\"pkhtb %0, %1, %2\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2));                    \\\r\n    else                                                                                     \\\r\n      __ASM(\"pkhtb %0, %1, %2, asr %3\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2), \"I\"(ARG3)); \\\r\n    __RES;                                                                                   \\\r\n  })\r\n#endif\r\n\r\n#define __PKHBT(ARG1, ARG2, ARG3) (((((uint32_t)(ARG1))) & 0x0000FFFFUL) | ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL))\r\n\r\n#define __PKHTB(ARG1, ARG2, ARG3) (((((uint32_t)(ARG1))) & 0xFFFF0000UL) | ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL))\r\n\r\n__STATIC_FORCEINLINE int32_t __SMMLA(int32_t op1, int32_t op2, int32_t op3) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"smmla %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n#endif /* (__ARM_FEATURE_DSP == 1) */\r\n/*@} end of group CMSIS_SIMD_intrinsics */\r\n\r\n#pragma GCC diagnostic pop\r\n\r\n#endif /* __CMSIS_GCC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/CMSIS/Include/cmsis_iccarm.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     cmsis_iccarm.h\r\n                                                                              * @brief    CMSIS compiler ICCARM (IAR Compiler for Arm) header file\r\n                                                                              * @version  V5.0.7\r\n                                                                              * @date     19. June 2018\r\n                                                                              ******************************************************************************/\r\n\r\n//------------------------------------------------------------------------------\r\n//\r\n// Copyright (c) 2017-2018 IAR Systems\r\n//\r\n// Licensed under the Apache License, Version 2.0 (the \"License\")\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//     http://www.apache.org/licenses/LICENSE-2.0\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n//\r\n//------------------------------------------------------------------------------\r\n\r\n#ifndef __CMSIS_ICCARM_H__\r\n#define __CMSIS_ICCARM_H__\r\n\r\n#ifndef __ICCARM__\r\n#error This file should only be compiled by ICCARM\r\n#endif\r\n\r\n#pragma system_include\r\n\r\n#define __IAR_FT _Pragma(\"inline=forced\") __intrinsic\r\n\r\n#if (__VER__ >= 8000000)\r\n#define __ICCARM_V8 1\r\n#else\r\n#define __ICCARM_V8 0\r\n#endif\r\n\r\n#ifndef __ALIGNED\r\n#if __ICCARM_V8\r\n#define __ALIGNED(x) __attribute__((aligned(x)))\r\n#elif (__VER__ >= 7080000)\r\n/* Needs IAR language extensions */\r\n#define __ALIGNED(x) __attribute__((aligned(x)))\r\n#else\r\n#warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored.\r\n#define __ALIGNED(x)\r\n#endif\r\n#endif\r\n\r\n/* Define compiler macros for CPU architecture, used in CMSIS 5.\r\n */\r\n#if __ARM_ARCH_6M__ || __ARM_ARCH_7M__ || __ARM_ARCH_7EM__ || __ARM_ARCH_8M_BASE__ || __ARM_ARCH_8M_MAIN__\r\n/* Macros already defined */\r\n#else\r\n#if defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__)\r\n#define __ARM_ARCH_8M_MAIN__ 1\r\n#elif defined(__ARM8M_BASELINE__)\r\n#define __ARM_ARCH_8M_BASE__ 1\r\n#elif defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M'\r\n#if __ARM_ARCH == 6\r\n#define __ARM_ARCH_6M__ 1\r\n#elif __ARM_ARCH == 7\r\n#if __ARM_FEATURE_DSP\r\n#define __ARM_ARCH_7EM__ 1\r\n#else\r\n#define __ARM_ARCH_7M__ 1\r\n#endif\r\n#endif /* __ARM_ARCH */\r\n#endif /* __ARM_ARCH_PROFILE == 'M' */\r\n#endif\r\n\r\n/* Alternativ core deduction for older ICCARM's */\r\n#if !defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7EM__) && !defined(__ARM_ARCH_8M_BASE__) && !defined(__ARM_ARCH_8M_MAIN__)\r\n#if defined(__ARM6M__) && (__CORE__ == __ARM6M__)\r\n#define __ARM_ARCH_6M__ 1\r\n#elif defined(__ARM7M__) && (__CORE__ == __ARM7M__)\r\n#define __ARM_ARCH_7M__ 1\r\n#elif defined(__ARM7EM__) && (__CORE__ == __ARM7EM__)\r\n#define __ARM_ARCH_7EM__ 1\r\n#elif defined(__ARM8M_BASELINE__) && (__CORE == __ARM8M_BASELINE__)\r\n#define __ARM_ARCH_8M_BASE__ 1\r\n#elif defined(__ARM8M_MAINLINE__) && (__CORE == __ARM8M_MAINLINE__)\r\n#define __ARM_ARCH_8M_MAIN__ 1\r\n#elif defined(__ARM8EM_MAINLINE__) && (__CORE == __ARM8EM_MAINLINE__)\r\n#define __ARM_ARCH_8M_MAIN__ 1\r\n#else\r\n#error \"Unknown target.\"\r\n#endif\r\n#endif\r\n\r\n#if defined(__ARM_ARCH_6M__) && __ARM_ARCH_6M__ == 1\r\n#define __IAR_M0_FAMILY 1\r\n#elif defined(__ARM_ARCH_8M_BASE__) && __ARM_ARCH_8M_BASE__ == 1\r\n#define __IAR_M0_FAMILY 1\r\n#else\r\n#define __IAR_M0_FAMILY 0\r\n#endif\r\n\r\n#ifndef __ASM\r\n#define __ASM __asm\r\n#endif\r\n\r\n#ifndef __INLINE\r\n#define __INLINE inline\r\n#endif\r\n\r\n#ifndef __NO_RETURN\r\n#if __ICCARM_V8\r\n#define __NO_RETURN __attribute__((__noreturn__))\r\n#else\r\n#define __NO_RETURN _Pragma(\"object_attribute=__noreturn\")\r\n#endif\r\n#endif\r\n\r\n#ifndef __PACKED\r\n#if __ICCARM_V8\r\n#define __PACKED __attribute__((packed, aligned(1)))\r\n#else\r\n/* Needs IAR language extensions */\r\n#define __PACKED __packed\r\n#endif\r\n#endif\r\n\r\n#ifndef __PACKED_STRUCT\r\n#if __ICCARM_V8\r\n#define __PACKED_STRUCT struct __attribute__((packed, aligned(1)))\r\n#else\r\n/* Needs IAR language extensions */\r\n#define __PACKED_STRUCT __packed struct\r\n#endif\r\n#endif\r\n\r\n#ifndef __PACKED_UNION\r\n#if __ICCARM_V8\r\n#define __PACKED_UNION union __attribute__((packed, aligned(1)))\r\n#else\r\n/* Needs IAR language extensions */\r\n#define __PACKED_UNION __packed union\r\n#endif\r\n#endif\r\n\r\n#ifndef __RESTRICT\r\n#define __RESTRICT __restrict\r\n#endif\r\n\r\n#ifndef __STATIC_INLINE\r\n#define __STATIC_INLINE static inline\r\n#endif\r\n\r\n#ifndef __FORCEINLINE\r\n#define __FORCEINLINE _Pragma(\"inline=forced\")\r\n#endif\r\n\r\n#ifndef __STATIC_FORCEINLINE\r\n#define __STATIC_FORCEINLINE __FORCEINLINE __STATIC_INLINE\r\n#endif\r\n\r\n#ifndef __UNALIGNED_UINT16_READ\r\n#pragma language = save\r\n#pragma language = extended\r\n__IAR_FT uint16_t __iar_uint16_read(void const *ptr) { return *(__packed uint16_t *)(ptr); }\r\n#pragma language = restore\r\n#define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR)\r\n#endif\r\n\r\n#ifndef __UNALIGNED_UINT16_WRITE\r\n#pragma language = save\r\n#pragma language = extended\r\n__IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val) {\r\n  *(__packed uint16_t *)(ptr) = val;\r\n  ;\r\n}\r\n#pragma language = restore\r\n#define __UNALIGNED_UINT16_WRITE(PTR, VAL) __iar_uint16_write(PTR, VAL)\r\n#endif\r\n\r\n#ifndef __UNALIGNED_UINT32_READ\r\n#pragma language = save\r\n#pragma language = extended\r\n__IAR_FT uint32_t __iar_uint32_read(void const *ptr) { return *(__packed uint32_t *)(ptr); }\r\n#pragma language = restore\r\n#define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR)\r\n#endif\r\n\r\n#ifndef __UNALIGNED_UINT32_WRITE\r\n#pragma language = save\r\n#pragma language = extended\r\n__IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val) {\r\n  *(__packed uint32_t *)(ptr) = val;\r\n  ;\r\n}\r\n#pragma language = restore\r\n#define __UNALIGNED_UINT32_WRITE(PTR, VAL) __iar_uint32_write(PTR, VAL)\r\n#endif\r\n\r\n#ifndef __UNALIGNED_UINT32 /* deprecated */\r\n#pragma language = save\r\n#pragma language = extended\r\n__packed struct __iar_u32 { uint32_t v; };\r\n#pragma language = restore\r\n#define __UNALIGNED_UINT32(PTR) (((struct __iar_u32 *)(PTR))->v)\r\n#endif\r\n\r\n#ifndef __USED\r\n#if __ICCARM_V8\r\n#define __USED __attribute__((used))\r\n#else\r\n#define __USED _Pragma(\"__root\")\r\n#endif\r\n#endif\r\n\r\n#ifndef __WEAK\r\n#if __ICCARM_V8\r\n#define __WEAK __attribute__((weak))\r\n#else\r\n#define __WEAK _Pragma(\"__weak\")\r\n#endif\r\n#endif\r\n\r\n#ifndef __ICCARM_INTRINSICS_VERSION__\r\n#define __ICCARM_INTRINSICS_VERSION__ 0\r\n#endif\r\n\r\n#if __ICCARM_INTRINSICS_VERSION__ == 2\r\n\r\n#if defined(__CLZ)\r\n#undef __CLZ\r\n#endif\r\n#if defined(__REVSH)\r\n#undef __REVSH\r\n#endif\r\n#if defined(__RBIT)\r\n#undef __RBIT\r\n#endif\r\n#if defined(__SSAT)\r\n#undef __SSAT\r\n#endif\r\n#if defined(__USAT)\r\n#undef __USAT\r\n#endif\r\n\r\n#include \"iccarm_builtin.h\"\r\n\r\n#define __disable_fault_irq __iar_builtin_disable_fiq\r\n#define __disable_irq       __iar_builtin_disable_interrupt\r\n#define __enable_fault_irq  __iar_builtin_enable_fiq\r\n#define __enable_irq        __iar_builtin_enable_interrupt\r\n#define __arm_rsr           __iar_builtin_rsr\r\n#define __arm_wsr           __iar_builtin_wsr\r\n\r\n#define __get_APSR()      (__arm_rsr(\"APSR\"))\r\n#define __get_BASEPRI()   (__arm_rsr(\"BASEPRI\"))\r\n#define __get_CONTROL()   (__arm_rsr(\"CONTROL\"))\r\n#define __get_FAULTMASK() (__arm_rsr(\"FAULTMASK\"))\r\n\r\n#if ((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && (defined(__FPU_USED) && (__FPU_USED == 1U)))\r\n#define __get_FPSCR()      (__arm_rsr(\"FPSCR\"))\r\n#define __set_FPSCR(VALUE) (__arm_wsr(\"FPSCR\", (VALUE)))\r\n#else\r\n#define __get_FPSCR()      (0)\r\n#define __set_FPSCR(VALUE) ((void)VALUE)\r\n#endif\r\n\r\n#define __get_IPSR() (__arm_rsr(\"IPSR\"))\r\n#define __get_MSP()  (__arm_rsr(\"MSP\"))\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n// without main extensions, the non-secure MSPLIM is RAZ/WI\r\n#define __get_MSPLIM() (0U)\r\n#else\r\n#define __get_MSPLIM() (__arm_rsr(\"MSPLIM\"))\r\n#endif\r\n#define __get_PRIMASK() (__arm_rsr(\"PRIMASK\"))\r\n#define __get_PSP()     (__arm_rsr(\"PSP\"))\r\n\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n// without main extensions, the non-secure PSPLIM is RAZ/WI\r\n#define __get_PSPLIM() (0U)\r\n#else\r\n#define __get_PSPLIM() (__arm_rsr(\"PSPLIM\"))\r\n#endif\r\n\r\n#define __get_xPSR() (__arm_rsr(\"xPSR\"))\r\n\r\n#define __set_BASEPRI(VALUE)     (__arm_wsr(\"BASEPRI\", (VALUE)))\r\n#define __set_BASEPRI_MAX(VALUE) (__arm_wsr(\"BASEPRI_MAX\", (VALUE)))\r\n#define __set_CONTROL(VALUE)     (__arm_wsr(\"CONTROL\", (VALUE)))\r\n#define __set_FAULTMASK(VALUE)   (__arm_wsr(\"FAULTMASK\", (VALUE)))\r\n#define __set_MSP(VALUE)         (__arm_wsr(\"MSP\", (VALUE)))\r\n\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n// without main extensions, the non-secure MSPLIM is RAZ/WI\r\n#define __set_MSPLIM(VALUE) ((void)(VALUE))\r\n#else\r\n#define __set_MSPLIM(VALUE) (__arm_wsr(\"MSPLIM\", (VALUE)))\r\n#endif\r\n#define __set_PRIMASK(VALUE) (__arm_wsr(\"PRIMASK\", (VALUE)))\r\n#define __set_PSP(VALUE)     (__arm_wsr(\"PSP\", (VALUE)))\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n// without main extensions, the non-secure PSPLIM is RAZ/WI\r\n#define __set_PSPLIM(VALUE) ((void)(VALUE))\r\n#else\r\n#define __set_PSPLIM(VALUE) (__arm_wsr(\"PSPLIM\", (VALUE)))\r\n#endif\r\n\r\n#define __TZ_get_CONTROL_NS()        (__arm_rsr(\"CONTROL_NS\"))\r\n#define __TZ_set_CONTROL_NS(VALUE)   (__arm_wsr(\"CONTROL_NS\", (VALUE)))\r\n#define __TZ_get_PSP_NS()            (__arm_rsr(\"PSP_NS\"))\r\n#define __TZ_set_PSP_NS(VALUE)       (__arm_wsr(\"PSP_NS\", (VALUE)))\r\n#define __TZ_get_MSP_NS()            (__arm_rsr(\"MSP_NS\"))\r\n#define __TZ_set_MSP_NS(VALUE)       (__arm_wsr(\"MSP_NS\", (VALUE)))\r\n#define __TZ_get_SP_NS()             (__arm_rsr(\"SP_NS\"))\r\n#define __TZ_set_SP_NS(VALUE)        (__arm_wsr(\"SP_NS\", (VALUE)))\r\n#define __TZ_get_PRIMASK_NS()        (__arm_rsr(\"PRIMASK_NS\"))\r\n#define __TZ_set_PRIMASK_NS(VALUE)   (__arm_wsr(\"PRIMASK_NS\", (VALUE)))\r\n#define __TZ_get_BASEPRI_NS()        (__arm_rsr(\"BASEPRI_NS\"))\r\n#define __TZ_set_BASEPRI_NS(VALUE)   (__arm_wsr(\"BASEPRI_NS\", (VALUE)))\r\n#define __TZ_get_FAULTMASK_NS()      (__arm_rsr(\"FAULTMASK_NS\"))\r\n#define __TZ_set_FAULTMASK_NS(VALUE) (__arm_wsr(\"FAULTMASK_NS\", (VALUE)))\r\n\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n// without main extensions, the non-secure PSPLIM is RAZ/WI\r\n#define __TZ_get_PSPLIM_NS()      (0U)\r\n#define __TZ_set_PSPLIM_NS(VALUE) ((void)(VALUE))\r\n#else\r\n#define __TZ_get_PSPLIM_NS()      (__arm_rsr(\"PSPLIM_NS\"))\r\n#define __TZ_set_PSPLIM_NS(VALUE) (__arm_wsr(\"PSPLIM_NS\", (VALUE)))\r\n#endif\r\n\r\n#define __TZ_get_MSPLIM_NS()      (__arm_rsr(\"MSPLIM_NS\"))\r\n#define __TZ_set_MSPLIM_NS(VALUE) (__arm_wsr(\"MSPLIM_NS\", (VALUE)))\r\n\r\n#define __NOP __iar_builtin_no_operation\r\n\r\n#define __CLZ   __iar_builtin_CLZ\r\n#define __CLREX __iar_builtin_CLREX\r\n\r\n#define __DMB __iar_builtin_DMB\r\n#define __DSB __iar_builtin_DSB\r\n#define __ISB __iar_builtin_ISB\r\n\r\n#define __LDREXB __iar_builtin_LDREXB\r\n#define __LDREXH __iar_builtin_LDREXH\r\n#define __LDREXW __iar_builtin_LDREX\r\n\r\n#define __RBIT  __iar_builtin_RBIT\r\n#define __REV   __iar_builtin_REV\r\n#define __REV16 __iar_builtin_REV16\r\n\r\n__IAR_FT int16_t __REVSH(int16_t val) { return (int16_t)__iar_builtin_REVSH(val); }\r\n\r\n#define __ROR __iar_builtin_ROR\r\n#define __RRX __iar_builtin_RRX\r\n\r\n#define __SEV __iar_builtin_SEV\r\n\r\n#if !__IAR_M0_FAMILY\r\n#define __SSAT __iar_builtin_SSAT\r\n#endif\r\n\r\n#define __STREXB __iar_builtin_STREXB\r\n#define __STREXH __iar_builtin_STREXH\r\n#define __STREXW __iar_builtin_STREX\r\n\r\n#if !__IAR_M0_FAMILY\r\n#define __USAT __iar_builtin_USAT\r\n#endif\r\n\r\n#define __WFE __iar_builtin_WFE\r\n#define __WFI __iar_builtin_WFI\r\n\r\n#if __ARM_MEDIA__\r\n#define __SADD8   __iar_builtin_SADD8\r\n#define __QADD8   __iar_builtin_QADD8\r\n#define __SHADD8  __iar_builtin_SHADD8\r\n#define __UADD8   __iar_builtin_UADD8\r\n#define __UQADD8  __iar_builtin_UQADD8\r\n#define __UHADD8  __iar_builtin_UHADD8\r\n#define __SSUB8   __iar_builtin_SSUB8\r\n#define __QSUB8   __iar_builtin_QSUB8\r\n#define __SHSUB8  __iar_builtin_SHSUB8\r\n#define __USUB8   __iar_builtin_USUB8\r\n#define __UQSUB8  __iar_builtin_UQSUB8\r\n#define __UHSUB8  __iar_builtin_UHSUB8\r\n#define __SADD16  __iar_builtin_SADD16\r\n#define __QADD16  __iar_builtin_QADD16\r\n#define __SHADD16 __iar_builtin_SHADD16\r\n#define __UADD16  __iar_builtin_UADD16\r\n#define __UQADD16 __iar_builtin_UQADD16\r\n#define __UHADD16 __iar_builtin_UHADD16\r\n#define __SSUB16  __iar_builtin_SSUB16\r\n#define __QSUB16  __iar_builtin_QSUB16\r\n#define __SHSUB16 __iar_builtin_SHSUB16\r\n#define __USUB16  __iar_builtin_USUB16\r\n#define __UQSUB16 __iar_builtin_UQSUB16\r\n#define __UHSUB16 __iar_builtin_UHSUB16\r\n#define __SASX    __iar_builtin_SASX\r\n#define __QASX    __iar_builtin_QASX\r\n#define __SHASX   __iar_builtin_SHASX\r\n#define __UASX    __iar_builtin_UASX\r\n#define __UQASX   __iar_builtin_UQASX\r\n#define __UHASX   __iar_builtin_UHASX\r\n#define __SSAX    __iar_builtin_SSAX\r\n#define __QSAX    __iar_builtin_QSAX\r\n#define __SHSAX   __iar_builtin_SHSAX\r\n#define __USAX    __iar_builtin_USAX\r\n#define __UQSAX   __iar_builtin_UQSAX\r\n#define __UHSAX   __iar_builtin_UHSAX\r\n#define __USAD8   __iar_builtin_USAD8\r\n#define __USADA8  __iar_builtin_USADA8\r\n#define __SSAT16  __iar_builtin_SSAT16\r\n#define __USAT16  __iar_builtin_USAT16\r\n#define __UXTB16  __iar_builtin_UXTB16\r\n#define __UXTAB16 __iar_builtin_UXTAB16\r\n#define __SXTB16  __iar_builtin_SXTB16\r\n#define __SXTAB16 __iar_builtin_SXTAB16\r\n#define __SMUAD   __iar_builtin_SMUAD\r\n#define __SMUADX  __iar_builtin_SMUADX\r\n#define __SMMLA   __iar_builtin_SMMLA\r\n#define __SMLAD   __iar_builtin_SMLAD\r\n#define __SMLADX  __iar_builtin_SMLADX\r\n#define __SMLALD  __iar_builtin_SMLALD\r\n#define __SMLALDX __iar_builtin_SMLALDX\r\n#define __SMUSD   __iar_builtin_SMUSD\r\n#define __SMUSDX  __iar_builtin_SMUSDX\r\n#define __SMLSD   __iar_builtin_SMLSD\r\n#define __SMLSDX  __iar_builtin_SMLSDX\r\n#define __SMLSLD  __iar_builtin_SMLSLD\r\n#define __SMLSLDX __iar_builtin_SMLSLDX\r\n#define __SEL     __iar_builtin_SEL\r\n#define __QADD    __iar_builtin_QADD\r\n#define __QSUB    __iar_builtin_QSUB\r\n#define __PKHBT   __iar_builtin_PKHBT\r\n#define __PKHTB   __iar_builtin_PKHTB\r\n#endif\r\n\r\n#else /* __ICCARM_INTRINSICS_VERSION__ == 2 */\r\n\r\n#if __IAR_M0_FAMILY\r\n/* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */\r\n#define __CLZ      __cmsis_iar_clz_not_active\r\n#define __SSAT     __cmsis_iar_ssat_not_active\r\n#define __USAT     __cmsis_iar_usat_not_active\r\n#define __RBIT     __cmsis_iar_rbit_not_active\r\n#define __get_APSR __cmsis_iar_get_APSR_not_active\r\n#endif\r\n\r\n#if (!((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && (defined(__FPU_USED) && (__FPU_USED == 1U))))\r\n#define __get_FPSCR __cmsis_iar_get_FPSR_not_active\r\n#define __set_FPSCR __cmsis_iar_set_FPSR_not_active\r\n#endif\r\n\r\n#ifdef __INTRINSICS_INCLUDED\r\n#error intrinsics.h is already included previously!\r\n#endif\r\n\r\n#include <intrinsics.h>\r\n\r\n#if __IAR_M0_FAMILY\r\n/* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */\r\n#undef __CLZ\r\n#undef __SSAT\r\n#undef __USAT\r\n#undef __RBIT\r\n#undef __get_APSR\r\n\r\n__STATIC_INLINE uint8_t __CLZ(uint32_t data) {\r\n  if (data == 0U) {\r\n    return 32U;\r\n  }\r\n\r\n  uint32_t count = 0U;\r\n  uint32_t mask  = 0x80000000U;\r\n\r\n  while ((data & mask) == 0U) {\r\n    count += 1U;\r\n    mask = mask >> 1U;\r\n  }\r\n  return count;\r\n}\r\n\r\n__STATIC_INLINE uint32_t __RBIT(uint32_t v) {\r\n  uint8_t  sc = 31U;\r\n  uint32_t r  = v;\r\n  for (v >>= 1U; v; v >>= 1U) {\r\n    r <<= 1U;\r\n    r |= v & 1U;\r\n    sc--;\r\n  }\r\n  return (r << sc);\r\n}\r\n\r\n__STATIC_INLINE uint32_t __get_APSR(void) {\r\n  uint32_t res;\r\n  __asm(\"MRS      %0,APSR\" : \"=r\"(res));\r\n  return res;\r\n}\r\n\r\n#endif\r\n\r\n#if (!((defined(__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && (defined(__FPU_USED) && (__FPU_USED == 1U))))\r\n#undef __get_FPSCR\r\n#undef __set_FPSCR\r\n#define __get_FPSCR()      (0)\r\n#define __set_FPSCR(VALUE) ((void)VALUE)\r\n#endif\r\n\r\n#pragma diag_suppress = Pe940\r\n#pragma diag_suppress = Pe177\r\n\r\n#define __enable_irq  __enable_interrupt\r\n#define __disable_irq __disable_interrupt\r\n#define __NOP         __no_operation\r\n\r\n#define __get_xPSR __get_PSR\r\n\r\n#if (!defined(__ARM_ARCH_6M__) || __ARM_ARCH_6M__ == 0)\r\n\r\n__IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr) { return __LDREX((unsigned long *)ptr); }\r\n\r\n__IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr) { return __STREX(value, (unsigned long *)ptr); }\r\n#endif\r\n\r\n/* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */\r\n#if (__CORTEX_M >= 0x03)\r\n\r\n__IAR_FT uint32_t __RRX(uint32_t value) {\r\n  uint32_t result;\r\n  __ASM(\"RRX      %0, %1\" : \"=r\"(result) : \"r\"(value) : \"cc\");\r\n  return (result);\r\n}\r\n\r\n__IAR_FT void __set_BASEPRI_MAX(uint32_t value) { __asm volatile(\"MSR      BASEPRI_MAX,%0\" ::\"r\"(value)); }\r\n\r\n#define __enable_fault_irq  __enable_fiq\r\n#define __disable_fault_irq __disable_fiq\r\n\r\n#endif /* (__CORTEX_M >= 0x03) */\r\n\r\n__IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2) { return (op1 >> op2) | (op1 << ((sizeof(op1) * 8) - op2)); }\r\n\r\n#if ((defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) || (defined(__ARM_ARCH_8M_BASE__) && (__ARM_ARCH_8M_BASE__ == 1)))\r\n\r\n__IAR_FT uint32_t __get_MSPLIM(void) {\r\n  uint32_t res;\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n  // without main extensions, the non-secure MSPLIM is RAZ/WI\r\n  res = 0U;\r\n#else\r\n  __asm volatile(\"MRS      %0,MSPLIM\" : \"=r\"(res));\r\n#endif\r\n  return res;\r\n}\r\n\r\n__IAR_FT void __set_MSPLIM(uint32_t value) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n  // without main extensions, the non-secure MSPLIM is RAZ/WI\r\n  (void)value;\r\n#else\r\n  __asm volatile(\"MSR      MSPLIM,%0\" ::\"r\"(value));\r\n#endif\r\n}\r\n\r\n__IAR_FT uint32_t __get_PSPLIM(void) {\r\n  uint32_t res;\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n  // without main extensions, the non-secure PSPLIM is RAZ/WI\r\n  res = 0U;\r\n#else\r\n  __asm volatile(\"MRS      %0,PSPLIM\" : \"=r\"(res));\r\n#endif\r\n  return res;\r\n}\r\n\r\n__IAR_FT void __set_PSPLIM(uint32_t value) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n  // without main extensions, the non-secure PSPLIM is RAZ/WI\r\n  (void)value;\r\n#else\r\n  __asm volatile(\"MSR      PSPLIM,%0\" ::\"r\"(value));\r\n#endif\r\n}\r\n\r\n__IAR_FT uint32_t __TZ_get_CONTROL_NS(void) {\r\n  uint32_t res;\r\n  __asm volatile(\"MRS      %0,CONTROL_NS\" : \"=r\"(res));\r\n  return res;\r\n}\r\n\r\n__IAR_FT void __TZ_set_CONTROL_NS(uint32_t value) { __asm volatile(\"MSR      CONTROL_NS,%0\" ::\"r\"(value)); }\r\n\r\n__IAR_FT uint32_t __TZ_get_PSP_NS(void) {\r\n  uint32_t res;\r\n  __asm volatile(\"MRS      %0,PSP_NS\" : \"=r\"(res));\r\n  return res;\r\n}\r\n\r\n__IAR_FT void __TZ_set_PSP_NS(uint32_t value) { __asm volatile(\"MSR      PSP_NS,%0\" ::\"r\"(value)); }\r\n\r\n__IAR_FT uint32_t __TZ_get_MSP_NS(void) {\r\n  uint32_t res;\r\n  __asm volatile(\"MRS      %0,MSP_NS\" : \"=r\"(res));\r\n  return res;\r\n}\r\n\r\n__IAR_FT void __TZ_set_MSP_NS(uint32_t value) { __asm volatile(\"MSR      MSP_NS,%0\" ::\"r\"(value)); }\r\n\r\n__IAR_FT uint32_t __TZ_get_SP_NS(void) {\r\n  uint32_t res;\r\n  __asm volatile(\"MRS      %0,SP_NS\" : \"=r\"(res));\r\n  return res;\r\n}\r\n__IAR_FT void __TZ_set_SP_NS(uint32_t value) { __asm volatile(\"MSR      SP_NS,%0\" ::\"r\"(value)); }\r\n\r\n__IAR_FT uint32_t __TZ_get_PRIMASK_NS(void) {\r\n  uint32_t res;\r\n  __asm volatile(\"MRS      %0,PRIMASK_NS\" : \"=r\"(res));\r\n  return res;\r\n}\r\n\r\n__IAR_FT void __TZ_set_PRIMASK_NS(uint32_t value) { __asm volatile(\"MSR      PRIMASK_NS,%0\" ::\"r\"(value)); }\r\n\r\n__IAR_FT uint32_t __TZ_get_BASEPRI_NS(void) {\r\n  uint32_t res;\r\n  __asm volatile(\"MRS      %0,BASEPRI_NS\" : \"=r\"(res));\r\n  return res;\r\n}\r\n\r\n__IAR_FT void __TZ_set_BASEPRI_NS(uint32_t value) { __asm volatile(\"MSR      BASEPRI_NS,%0\" ::\"r\"(value)); }\r\n\r\n__IAR_FT uint32_t __TZ_get_FAULTMASK_NS(void) {\r\n  uint32_t res;\r\n  __asm volatile(\"MRS      %0,FAULTMASK_NS\" : \"=r\"(res));\r\n  return res;\r\n}\r\n\r\n__IAR_FT void __TZ_set_FAULTMASK_NS(uint32_t value) { __asm volatile(\"MSR      FAULTMASK_NS,%0\" ::\"r\"(value)); }\r\n\r\n__IAR_FT uint32_t __TZ_get_PSPLIM_NS(void) {\r\n  uint32_t res;\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n  // without main extensions, the non-secure PSPLIM is RAZ/WI\r\n  res = 0U;\r\n#else\r\n  __asm volatile(\"MRS      %0,PSPLIM_NS\" : \"=r\"(res));\r\n#endif\r\n  return res;\r\n}\r\n\r\n__IAR_FT void __TZ_set_PSPLIM_NS(uint32_t value) {\r\n#if (!(defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) && (!defined(__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3)))\r\n  // without main extensions, the non-secure PSPLIM is RAZ/WI\r\n  (void)value;\r\n#else\r\n  __asm volatile(\"MSR      PSPLIM_NS,%0\" ::\"r\"(value));\r\n#endif\r\n}\r\n\r\n__IAR_FT uint32_t __TZ_get_MSPLIM_NS(void) {\r\n  uint32_t res;\r\n  __asm volatile(\"MRS      %0,MSPLIM_NS\" : \"=r\"(res));\r\n  return res;\r\n}\r\n\r\n__IAR_FT void __TZ_set_MSPLIM_NS(uint32_t value) { __asm volatile(\"MSR      MSPLIM_NS,%0\" ::\"r\"(value)); }\r\n\r\n#endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */\r\n\r\n#endif /* __ICCARM_INTRINSICS_VERSION__ == 2 */\r\n\r\n#define __BKPT(value) __asm volatile(\"BKPT     %0\" : : \"i\"(value))\r\n\r\n#if __IAR_M0_FAMILY\r\n__STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) {\r\n  if ((sat >= 1U) && (sat <= 32U)) {\r\n    const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U);\r\n    const int32_t min = -1 - max;\r\n    if (val > max) {\r\n      return max;\r\n    } else if (val < min) {\r\n      return min;\r\n    }\r\n  }\r\n  return val;\r\n}\r\n\r\n__STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) {\r\n  if (sat <= 31U) {\r\n    const uint32_t max = ((1U << sat) - 1U);\r\n    if (val > (int32_t)max) {\r\n      return max;\r\n    } else if (val < 0) {\r\n      return 0U;\r\n    }\r\n  }\r\n  return (uint32_t)val;\r\n}\r\n#endif\r\n\r\n#if (__CORTEX_M >= 0x03) /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */\r\n\r\n__IAR_FT uint8_t __LDRBT(volatile uint8_t *addr) {\r\n  uint32_t res;\r\n  __ASM(\"LDRBT %0, [%1]\" : \"=r\"(res) : \"r\"(addr) : \"memory\");\r\n  return ((uint8_t)res);\r\n}\r\n\r\n__IAR_FT uint16_t __LDRHT(volatile uint16_t *addr) {\r\n  uint32_t res;\r\n  __ASM(\"LDRHT %0, [%1]\" : \"=r\"(res) : \"r\"(addr) : \"memory\");\r\n  return ((uint16_t)res);\r\n}\r\n\r\n__IAR_FT uint32_t __LDRT(volatile uint32_t *addr) {\r\n  uint32_t res;\r\n  __ASM(\"LDRT %0, [%1]\" : \"=r\"(res) : \"r\"(addr) : \"memory\");\r\n  return res;\r\n}\r\n\r\n__IAR_FT void __STRBT(uint8_t value, volatile uint8_t *addr) { __ASM(\"STRBT %1, [%0]\" : : \"r\"(addr), \"r\"((uint32_t)value) : \"memory\"); }\r\n\r\n__IAR_FT void __STRHT(uint16_t value, volatile uint16_t *addr) { __ASM(\"STRHT %1, [%0]\" : : \"r\"(addr), \"r\"((uint32_t)value) : \"memory\"); }\r\n\r\n__IAR_FT void __STRT(uint32_t value, volatile uint32_t *addr) { __ASM(\"STRT %1, [%0]\" : : \"r\"(addr), \"r\"(value) : \"memory\"); }\r\n\r\n#endif /* (__CORTEX_M >= 0x03) */\r\n\r\n#if ((defined(__ARM_ARCH_8M_MAIN__) && (__ARM_ARCH_8M_MAIN__ == 1)) || (defined(__ARM_ARCH_8M_BASE__) && (__ARM_ARCH_8M_BASE__ == 1)))\r\n\r\n__IAR_FT uint8_t __LDAB(volatile uint8_t *ptr) {\r\n  uint32_t res;\r\n  __ASM volatile(\"LDAB %0, [%1]\" : \"=r\"(res) : \"r\"(ptr) : \"memory\");\r\n  return ((uint8_t)res);\r\n}\r\n\r\n__IAR_FT uint16_t __LDAH(volatile uint16_t *ptr) {\r\n  uint32_t res;\r\n  __ASM volatile(\"LDAH %0, [%1]\" : \"=r\"(res) : \"r\"(ptr) : \"memory\");\r\n  return ((uint16_t)res);\r\n}\r\n\r\n__IAR_FT uint32_t __LDA(volatile uint32_t *ptr) {\r\n  uint32_t res;\r\n  __ASM volatile(\"LDA %0, [%1]\" : \"=r\"(res) : \"r\"(ptr) : \"memory\");\r\n  return res;\r\n}\r\n\r\n__IAR_FT void __STLB(uint8_t value, volatile uint8_t *ptr) { __ASM volatile(\"STLB %1, [%0]\" ::\"r\"(ptr), \"r\"(value) : \"memory\"); }\r\n\r\n__IAR_FT void __STLH(uint16_t value, volatile uint16_t *ptr) { __ASM volatile(\"STLH %1, [%0]\" ::\"r\"(ptr), \"r\"(value) : \"memory\"); }\r\n\r\n__IAR_FT void __STL(uint32_t value, volatile uint32_t *ptr) { __ASM volatile(\"STL %1, [%0]\" ::\"r\"(ptr), \"r\"(value) : \"memory\"); }\r\n\r\n__IAR_FT uint8_t __LDAEXB(volatile uint8_t *ptr) {\r\n  uint32_t res;\r\n  __ASM volatile(\"LDAEXB %0, [%1]\" : \"=r\"(res) : \"r\"(ptr) : \"memory\");\r\n  return ((uint8_t)res);\r\n}\r\n\r\n__IAR_FT uint16_t __LDAEXH(volatile uint16_t *ptr) {\r\n  uint32_t res;\r\n  __ASM volatile(\"LDAEXH %0, [%1]\" : \"=r\"(res) : \"r\"(ptr) : \"memory\");\r\n  return ((uint16_t)res);\r\n}\r\n\r\n__IAR_FT uint32_t __LDAEX(volatile uint32_t *ptr) {\r\n  uint32_t res;\r\n  __ASM volatile(\"LDAEX %0, [%1]\" : \"=r\"(res) : \"r\"(ptr) : \"memory\");\r\n  return res;\r\n}\r\n\r\n__IAR_FT uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) {\r\n  uint32_t res;\r\n  __ASM volatile(\"STLEXB %0, %2, [%1]\" : \"=r\"(res) : \"r\"(ptr), \"r\"(value) : \"memory\");\r\n  return res;\r\n}\r\n\r\n__IAR_FT uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) {\r\n  uint32_t res;\r\n  __ASM volatile(\"STLEXH %0, %2, [%1]\" : \"=r\"(res) : \"r\"(ptr), \"r\"(value) : \"memory\");\r\n  return res;\r\n}\r\n\r\n__IAR_FT uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) {\r\n  uint32_t res;\r\n  __ASM volatile(\"STLEX %0, %2, [%1]\" : \"=r\"(res) : \"r\"(ptr), \"r\"(value) : \"memory\");\r\n  return res;\r\n}\r\n\r\n#endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */\r\n\r\n#undef __IAR_FT\r\n#undef __IAR_M0_FAMILY\r\n#undef __ICCARM_V8\r\n\r\n#pragma diag_default = Pe940\r\n#pragma diag_default = Pe177\r\n\r\n#endif /* __CMSIS_ICCARM_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/CMSIS/Include/cmsis_version.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     cmsis_version.h\r\n                                                                              * @brief    CMSIS Core(M) Version definitions\r\n                                                                              * @version  V5.0.2\r\n                                                                              * @date     19. April 2017\r\n                                                                              ******************************************************************************/\r\n/*\r\n * Copyright (c) 2009-2017 ARM Limited. All rights reserved.\r\n *\r\n * SPDX-License-Identifier: Apache-2.0\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the License); you may\r\n * not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__clang__)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CMSIS_VERSION_H\r\n#define __CMSIS_VERSION_H\r\n\r\n/*  CMSIS Version definitions */\r\n#define __CM_CMSIS_VERSION_MAIN (5U)                                                        /*!< [31:16] CMSIS Core(M) main version */\r\n#define __CM_CMSIS_VERSION_SUB  (1U)                                                        /*!< [15:0]  CMSIS Core(M) sub version */\r\n#define __CM_CMSIS_VERSION      ((__CM_CMSIS_VERSION_MAIN << 16U) | __CM_CMSIS_VERSION_SUB) /*!< CMSIS Core(M) version number */\r\n#endif\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/CMSIS/Include/core_cm3.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cm3.h\r\n                                                                              * @brief    CMSIS Cortex-M3 Core Peripheral Access Layer Header File\r\n                                                                              * @version  V5.0.8\r\n                                                                              * @date     04. June 2018\r\n                                                                              ******************************************************************************/\r\n/*\r\n * Copyright (c) 2009-2018 Arm Limited. All rights reserved.\r\n *\r\n * SPDX-License-Identifier: Apache-2.0\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the License); you may\r\n * not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__clang__)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CM3_H_GENERIC\r\n#define __CORE_CM3_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup Cortex_M3\r\n  @{\r\n */\r\n\r\n#include \"cmsis_version.h\"\r\n\r\n/*  CMSIS CM3 definitions */\r\n#define __CM3_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN)                                     /*!< \\deprecated [31:16] CMSIS HAL main version */\r\n#define __CM3_CMSIS_VERSION_SUB  (__CM_CMSIS_VERSION_SUB)                                      /*!< \\deprecated [15:0]  CMSIS HAL sub version */\r\n#define __CM3_CMSIS_VERSION      ((__CM3_CMSIS_VERSION_MAIN << 16U) | __CM3_CMSIS_VERSION_SUB) /*!< \\deprecated CMSIS HAL version number */\r\n\r\n#define __CORTEX_M (3U) /*!< Cortex-M Core */\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    This core does not support an FPU at all\r\n*/\r\n#define __FPU_USED 0U\r\n\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TI_ARM__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"cmsis_compiler.h\" /* CMSIS compiler specific defines */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM3_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_CM3_H_DEPENDANT\r\n#define __CORE_CM3_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __CM3_REV\r\n#define __CM3_REV 0x0200U\r\n#warning \"__CM3_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __MPU_PRESENT\r\n#define __MPU_PRESENT 0U\r\n#warning \"__MPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 3U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group Cortex_M3 */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n  - Core Debug Register\r\n  - Core MPU Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 27; /*!< bit:  0..26  Reserved */\r\n    uint32_t Q : 1;           /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n#define APSR_Q_Pos 27U                 /*!< APSR: Q Position */\r\n#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;        /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 1; /*!< bit:      9  Reserved */\r\n    uint32_t ICI_IT_1 : 6;   /*!< bit: 10..15  ICI/IT part 1 */\r\n    uint32_t _reserved1 : 8; /*!< bit: 16..23  Reserved */\r\n    uint32_t T : 1;          /*!< bit:     24  Thumb bit */\r\n    uint32_t ICI_IT_2 : 2;   /*!< bit: 25..26  ICI/IT part 2 */\r\n    uint32_t Q : 1;          /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;          /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;          /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;          /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;          /*!< bit:     31  Negative condition code flag */\r\n  } b;                       /*!< Structure used for bit  access */\r\n  uint32_t w;                /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_Q_Pos 27U                 /*!< xPSR: Q Position */\r\n#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */\r\n\r\n#define xPSR_ICI_IT_2_Pos 25U                        /*!< xPSR: ICI/IT part 2 Position */\r\n#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_ICI_IT_1_Pos 10U                           /*!< xPSR: ICI/IT part 1 Position */\r\n#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t nPRIV : 1;       /*!< bit:      0  Execution privilege in Thread mode */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t _reserved1 : 30; /*!< bit:  2..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n#define CONTROL_nPRIV_Pos 0U                             /*!< CONTROL: nPRIV Position */\r\n#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[24U];\r\n  __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[24U];\r\n  __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[24U];\r\n  __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[24U];\r\n  __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */\r\n  uint32_t       RESERVED4[56U];\r\n  __IOM uint8_t  IP[240U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */\r\n  uint32_t       RESERVED5[644U];\r\n  __OM uint32_t  STIR; /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */\r\n} NVIC_Type;\r\n\r\n/* Software Triggered Interrupt Register Definitions */\r\n#define NVIC_STIR_INTID_Pos 0U                                   /*!< STIR: INTLINESNUM Position */\r\n#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID;    /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;     /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n  __IOM uint32_t VTOR;     /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */\r\n  __IOM uint32_t AIRCR;    /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;      /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;      /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  __IOM uint8_t  SHP[12U]; /*!< Offset: 0x018 (R/W)  System Handlers Priority Registers (4-7, 8-11, 12-15) */\r\n  __IOM uint32_t SHCSR;    /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n  __IOM uint32_t CFSR;     /*!< Offset: 0x028 (R/W)  Configurable Fault Status Register */\r\n  __IOM uint32_t HFSR;     /*!< Offset: 0x02C (R/W)  HardFault Status Register */\r\n  __IOM uint32_t DFSR;     /*!< Offset: 0x030 (R/W)  Debug Fault Status Register */\r\n  __IOM uint32_t MMFAR;    /*!< Offset: 0x034 (R/W)  MemManage Fault Address Register */\r\n  __IOM uint32_t BFAR;     /*!< Offset: 0x038 (R/W)  BusFault Address Register */\r\n  __IOM uint32_t AFSR;     /*!< Offset: 0x03C (R/W)  Auxiliary Fault Status Register */\r\n  __IM uint32_t  PFR[2U];  /*!< Offset: 0x040 (R/ )  Processor Feature Register */\r\n  __IM uint32_t  DFR;      /*!< Offset: 0x048 (R/ )  Debug Feature Register */\r\n  __IM uint32_t  ADR;      /*!< Offset: 0x04C (R/ )  Auxiliary Feature Register */\r\n  __IM uint32_t  MMFR[4U]; /*!< Offset: 0x050 (R/ )  Memory Model Feature Register */\r\n  __IM uint32_t  ISAR[5U]; /*!< Offset: 0x060 (R/ )  Instruction Set Attributes Register */\r\n  uint32_t       RESERVED0[5U];\r\n  __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W)  Coprocessor Access Control Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_RETTOBASE_Pos 11U                             /*!< SCB ICSR: RETTOBASE Position */\r\n#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n/* SCB Vector Table Offset Register Definitions */\r\n#if defined(__CM3_REV) && (__CM3_REV < 0x0201U)            /* core r2p1 */\r\n#define SCB_VTOR_TBLBASE_Pos 29U                           /*!< SCB VTOR: TBLBASE Position */\r\n#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */\r\n\r\n#define SCB_VTOR_TBLOFF_Pos 7U                                  /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n#else\r\n#define SCB_VTOR_TBLOFF_Pos 7U                                   /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n#endif\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_PRIGROUP_Pos 8U                              /*!< SCB AIRCR: PRIGROUP Position */\r\n#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n#define SCB_AIRCR_VECTRESET_Pos 0U                                   /*!< SCB AIRCR: VECTRESET Position */\r\n#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_BFHFNMIGN_Pos 8U                             /*!< SCB CCR: BFHFNMIGN Position */\r\n#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */\r\n\r\n#define SCB_CCR_DIV_0_TRP_Pos 4U                             /*!< SCB CCR: DIV_0_TRP Position */\r\n#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n#define SCB_CCR_USERSETMPEND_Pos 1U                                /*!< SCB CCR: USERSETMPEND Position */\r\n#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */\r\n\r\n#define SCB_CCR_NONBASETHRDENA_Pos 0U                                      /*!< SCB CCR: NONBASETHRDENA Position */\r\n#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_USGFAULTENA_Pos 18U                                /*!< SCB SHCSR: USGFAULTENA Position */\r\n#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTENA_Pos 17U                                /*!< SCB SHCSR: BUSFAULTENA Position */\r\n#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTENA_Pos 16U                                /*!< SCB SHCSR: MEMFAULTENA Position */\r\n#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U                                   /*!< SCB SHCSR: BUSFAULTPENDED Position */\r\n#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U                                   /*!< SCB SHCSR: MEMFAULTPENDED Position */\r\n#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTPENDED_Pos 12U                                   /*!< SCB SHCSR: USGFAULTPENDED Position */\r\n#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_SYSTICKACT_Pos 11U                               /*!< SCB SHCSR: SYSTICKACT Position */\r\n#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */\r\n\r\n#define SCB_SHCSR_PENDSVACT_Pos 10U                              /*!< SCB SHCSR: PENDSVACT Position */\r\n#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */\r\n\r\n#define SCB_SHCSR_MONITORACT_Pos 8U                                /*!< SCB SHCSR: MONITORACT Position */\r\n#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */\r\n\r\n#define SCB_SHCSR_SVCALLACT_Pos 7U                               /*!< SCB SHCSR: SVCALLACT Position */\r\n#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTACT_Pos 3U                                 /*!< SCB SHCSR: USGFAULTACT Position */\r\n#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTACT_Pos 1U                                 /*!< SCB SHCSR: BUSFAULTACT Position */\r\n#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTACT_Pos 0U                                     /*!< SCB SHCSR: MEMFAULTACT Position */\r\n#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */\r\n\r\n/* SCB Configurable Fault Status Register Definitions */\r\n#define SCB_CFSR_USGFAULTSR_Pos 16U                                   /*!< SCB CFSR: Usage Fault Status Register Position */\r\n#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_BUSFAULTSR_Pos 8U                                  /*!< SCB CFSR: Bus Fault Status Register Position */\r\n#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_MEMFAULTSR_Pos 0U                                      /*!< SCB CFSR: Memory Manage Fault Status Register Position */\r\n#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */\r\n\r\n/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */\r\n#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */\r\n#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos)  /*!< SCB CFSR (MMFSR): MMARVALID Mask */\r\n\r\n#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */\r\n#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos)    /*!< SCB CFSR (MMFSR): MSTKERR Mask */\r\n\r\n#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */\r\n#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos)  /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */\r\n\r\n#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */\r\n#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos)   /*!< SCB CFSR (MMFSR): DACCVIOL Mask */\r\n\r\n#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U)   /*!< SCB CFSR (MMFSR): IACCVIOL Position */\r\n#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */\r\n\r\n/* BusFault Status Register (part of SCB Configurable Fault Status Register) */\r\n#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U)  /*!< SCB CFSR (BFSR): BFARVALID Position */\r\n#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */\r\n\r\n#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */\r\n#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos)   /*!< SCB CFSR (BFSR): STKERR Mask */\r\n\r\n#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */\r\n#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */\r\n\r\n#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U)    /*!< SCB CFSR (BFSR): IMPRECISERR Position */\r\n#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */\r\n\r\n#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U)  /*!< SCB CFSR (BFSR): PRECISERR Position */\r\n#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */\r\n\r\n#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */\r\n#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos)  /*!< SCB CFSR (BFSR): IBUSERR Mask */\r\n\r\n/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */\r\n#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U)  /*!< SCB CFSR (UFSR): DIVBYZERO Position */\r\n#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */\r\n\r\n#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U)  /*!< SCB CFSR (UFSR): UNALIGNED Position */\r\n#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */\r\n\r\n#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */\r\n#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos)     /*!< SCB CFSR (UFSR): NOCP Mask */\r\n\r\n#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */\r\n#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos)    /*!< SCB CFSR (UFSR): INVPC Mask */\r\n\r\n#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */\r\n#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */\r\n\r\n#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U)   /*!< SCB CFSR (UFSR): UNDEFINSTR Position */\r\n#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */\r\n\r\n/* SCB Hard Fault Status Register Definitions */\r\n#define SCB_HFSR_DEBUGEVT_Pos 31U                            /*!< SCB HFSR: DEBUGEVT Position */\r\n#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */\r\n\r\n#define SCB_HFSR_FORCED_Pos 30U                          /*!< SCB HFSR: FORCED Position */\r\n#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */\r\n\r\n#define SCB_HFSR_VECTTBL_Pos 1U                            /*!< SCB HFSR: VECTTBL Position */\r\n#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */\r\n\r\n/* SCB Debug Fault Status Register Definitions */\r\n#define SCB_DFSR_EXTERNAL_Pos 4U                             /*!< SCB DFSR: EXTERNAL Position */\r\n#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */\r\n\r\n#define SCB_DFSR_VCATCH_Pos 3U                           /*!< SCB DFSR: VCATCH Position */\r\n#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */\r\n\r\n#define SCB_DFSR_DWTTRAP_Pos 2U                            /*!< SCB DFSR: DWTTRAP Position */\r\n#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */\r\n\r\n#define SCB_DFSR_BKPT_Pos 1U                         /*!< SCB DFSR: BKPT Position */\r\n#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */\r\n\r\n#define SCB_DFSR_HALTED_Pos 0U                               /*!< SCB DFSR: HALTED Position */\r\n#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)\r\n  \\brief    Type definitions for the System Control and ID Register not in the SCB\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control and ID Register not in the SCB.\r\n */\r\ntypedef struct {\r\n  uint32_t      RESERVED0[1U];\r\n  __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */\r\n#if defined(__CM3_REV) && (__CM3_REV >= 0x200U)\r\n  __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */\r\n#else\r\n  uint32_t RESERVED1[1U];\r\n#endif\r\n} SCnSCB_Type;\r\n\r\n/* Interrupt Controller Type Register Definitions */\r\n#define SCnSCB_ICTR_INTLINESNUM_Pos 0U                                         /*!< ICTR: INTLINESNUM Position */\r\n#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */\r\n\r\n/* Auxiliary Control Register Definitions */\r\n\r\n#define SCnSCB_ACTLR_DISFOLD_Pos 2U                                /*!< ACTLR: DISFOLD Position */\r\n#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */\r\n\r\n#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U                                   /*!< ACTLR: DISDEFWBUF Position */\r\n#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */\r\n\r\n#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U                                       /*!< ACTLR: DISMCYCINT Position */\r\n#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */\r\n\r\n/*@} end of group CMSIS_SCnotSCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_ITM     Instrumentation Trace Macrocell (ITM)\r\n  \\brief    Type definitions for the Instrumentation Trace Macrocell (ITM)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Instrumentation Trace Macrocell Register (ITM).\r\n */\r\ntypedef struct {\r\n  __OM union {\r\n    __OM uint8_t  u8;  /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 8-bit */\r\n    __OM uint16_t u16; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 16-bit */\r\n    __OM uint32_t u32; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 32-bit */\r\n  } PORT[32U];         /*!< Offset: 0x000 ( /W)  ITM Stimulus Port Registers */\r\n  uint32_t       RESERVED0[864U];\r\n  __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W)  ITM Trace Enable Register */\r\n  uint32_t       RESERVED1[15U];\r\n  __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */\r\n  uint32_t       RESERVED2[15U];\r\n  __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */\r\n  uint32_t       RESERVED3[29U];\r\n  __OM uint32_t  IWR;  /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */\r\n  __IM uint32_t  IRR;  /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */\r\n  __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */\r\n  uint32_t       RESERVED4[43U];\r\n  __OM uint32_t  LAR; /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */\r\n  __IM uint32_t  LSR; /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */\r\n  uint32_t       RESERVED5[6U];\r\n  __IM uint32_t  PID4; /*!< Offset: 0xFD0 (R/ )  ITM Peripheral Identification Register #4 */\r\n  __IM uint32_t  PID5; /*!< Offset: 0xFD4 (R/ )  ITM Peripheral Identification Register #5 */\r\n  __IM uint32_t  PID6; /*!< Offset: 0xFD8 (R/ )  ITM Peripheral Identification Register #6 */\r\n  __IM uint32_t  PID7; /*!< Offset: 0xFDC (R/ )  ITM Peripheral Identification Register #7 */\r\n  __IM uint32_t  PID0; /*!< Offset: 0xFE0 (R/ )  ITM Peripheral Identification Register #0 */\r\n  __IM uint32_t  PID1; /*!< Offset: 0xFE4 (R/ )  ITM Peripheral Identification Register #1 */\r\n  __IM uint32_t  PID2; /*!< Offset: 0xFE8 (R/ )  ITM Peripheral Identification Register #2 */\r\n  __IM uint32_t  PID3; /*!< Offset: 0xFEC (R/ )  ITM Peripheral Identification Register #3 */\r\n  __IM uint32_t  CID0; /*!< Offset: 0xFF0 (R/ )  ITM Component  Identification Register #0 */\r\n  __IM uint32_t  CID1; /*!< Offset: 0xFF4 (R/ )  ITM Component  Identification Register #1 */\r\n  __IM uint32_t  CID2; /*!< Offset: 0xFF8 (R/ )  ITM Component  Identification Register #2 */\r\n  __IM uint32_t  CID3; /*!< Offset: 0xFFC (R/ )  ITM Component  Identification Register #3 */\r\n} ITM_Type;\r\n\r\n/* ITM Trace Privilege Register Definitions */\r\n#define ITM_TPR_PRIVMASK_Pos 0U                                         /*!< ITM TPR: PRIVMASK Position */\r\n#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */\r\n\r\n/* ITM Trace Control Register Definitions */\r\n#define ITM_TCR_BUSY_Pos 23U                       /*!< ITM TCR: BUSY Position */\r\n#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */\r\n\r\n#define ITM_TCR_TraceBusID_Pos 16U                                /*!< ITM TCR: ATBID Position */\r\n#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */\r\n\r\n#define ITM_TCR_GTSFREQ_Pos 10U                          /*!< ITM TCR: Global timestamp frequency Position */\r\n#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */\r\n\r\n#define ITM_TCR_TSPrescale_Pos 8U                              /*!< ITM TCR: TSPrescale Position */\r\n#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */\r\n\r\n#define ITM_TCR_SWOENA_Pos 4U                          /*!< ITM TCR: SWOENA Position */\r\n#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */\r\n\r\n#define ITM_TCR_DWTENA_Pos 3U                          /*!< ITM TCR: DWTENA Position */\r\n#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */\r\n\r\n#define ITM_TCR_SYNCENA_Pos 2U                           /*!< ITM TCR: SYNCENA Position */\r\n#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */\r\n\r\n#define ITM_TCR_TSENA_Pos 1U                         /*!< ITM TCR: TSENA Position */\r\n#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */\r\n\r\n#define ITM_TCR_ITMENA_Pos 0U                              /*!< ITM TCR: ITM Enable bit Position */\r\n#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */\r\n\r\n/* ITM Integration Write Register Definitions */\r\n#define ITM_IWR_ATVALIDM_Pos 0U                                /*!< ITM IWR: ATVALIDM Position */\r\n#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */\r\n\r\n/* ITM Integration Read Register Definitions */\r\n#define ITM_IRR_ATREADYM_Pos 0U                                /*!< ITM IRR: ATREADYM Position */\r\n#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */\r\n\r\n/* ITM Integration Mode Control Register Definitions */\r\n#define ITM_IMCR_INTEGRATION_Pos 0U                                    /*!< ITM IMCR: INTEGRATION Position */\r\n#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */\r\n\r\n/* ITM Lock Status Register Definitions */\r\n#define ITM_LSR_ByteAcc_Pos 2U                           /*!< ITM LSR: ByteAcc Position */\r\n#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */\r\n\r\n#define ITM_LSR_Access_Pos 1U                          /*!< ITM LSR: Access Position */\r\n#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */\r\n\r\n#define ITM_LSR_Present_Pos 0U                               /*!< ITM LSR: Present Position */\r\n#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_ITM */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)\r\n  \\brief    Type definitions for the Data Watchpoint and Trace (DWT)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Data Watchpoint and Trace Register (DWT).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;      /*!< Offset: 0x000 (R/W)  Control Register */\r\n  __IOM uint32_t CYCCNT;    /*!< Offset: 0x004 (R/W)  Cycle Count Register */\r\n  __IOM uint32_t CPICNT;    /*!< Offset: 0x008 (R/W)  CPI Count Register */\r\n  __IOM uint32_t EXCCNT;    /*!< Offset: 0x00C (R/W)  Exception Overhead Count Register */\r\n  __IOM uint32_t SLEEPCNT;  /*!< Offset: 0x010 (R/W)  Sleep Count Register */\r\n  __IOM uint32_t LSUCNT;    /*!< Offset: 0x014 (R/W)  LSU Count Register */\r\n  __IOM uint32_t FOLDCNT;   /*!< Offset: 0x018 (R/W)  Folded-instruction Count Register */\r\n  __IM uint32_t  PCSR;      /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */\r\n  __IOM uint32_t COMP0;     /*!< Offset: 0x020 (R/W)  Comparator Register 0 */\r\n  __IOM uint32_t MASK0;     /*!< Offset: 0x024 (R/W)  Mask Register 0 */\r\n  __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W)  Function Register 0 */\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t COMP1;     /*!< Offset: 0x030 (R/W)  Comparator Register 1 */\r\n  __IOM uint32_t MASK1;     /*!< Offset: 0x034 (R/W)  Mask Register 1 */\r\n  __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W)  Function Register 1 */\r\n  uint32_t       RESERVED1[1U];\r\n  __IOM uint32_t COMP2;     /*!< Offset: 0x040 (R/W)  Comparator Register 2 */\r\n  __IOM uint32_t MASK2;     /*!< Offset: 0x044 (R/W)  Mask Register 2 */\r\n  __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W)  Function Register 2 */\r\n  uint32_t       RESERVED2[1U];\r\n  __IOM uint32_t COMP3;     /*!< Offset: 0x050 (R/W)  Comparator Register 3 */\r\n  __IOM uint32_t MASK3;     /*!< Offset: 0x054 (R/W)  Mask Register 3 */\r\n  __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W)  Function Register 3 */\r\n} DWT_Type;\r\n\r\n/* DWT Control Register Definitions */\r\n#define DWT_CTRL_NUMCOMP_Pos 28U                             /*!< DWT CTRL: NUMCOMP Position */\r\n#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */\r\n\r\n#define DWT_CTRL_NOTRCPKT_Pos 27U                              /*!< DWT CTRL: NOTRCPKT Position */\r\n#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */\r\n\r\n#define DWT_CTRL_NOEXTTRIG_Pos 26U                               /*!< DWT CTRL: NOEXTTRIG Position */\r\n#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */\r\n\r\n#define DWT_CTRL_NOCYCCNT_Pos 25U                              /*!< DWT CTRL: NOCYCCNT Position */\r\n#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */\r\n\r\n#define DWT_CTRL_NOPRFCNT_Pos 24U                              /*!< DWT CTRL: NOPRFCNT Position */\r\n#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */\r\n\r\n#define DWT_CTRL_CYCEVTENA_Pos 22U                               /*!< DWT CTRL: CYCEVTENA Position */\r\n#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */\r\n\r\n#define DWT_CTRL_FOLDEVTENA_Pos 21U                                /*!< DWT CTRL: FOLDEVTENA Position */\r\n#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */\r\n\r\n#define DWT_CTRL_LSUEVTENA_Pos 20U                               /*!< DWT CTRL: LSUEVTENA Position */\r\n#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */\r\n\r\n#define DWT_CTRL_SLEEPEVTENA_Pos 19U                                 /*!< DWT CTRL: SLEEPEVTENA Position */\r\n#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCEVTENA_Pos 18U                               /*!< DWT CTRL: EXCEVTENA Position */\r\n#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */\r\n\r\n#define DWT_CTRL_CPIEVTENA_Pos 17U                               /*!< DWT CTRL: CPIEVTENA Position */\r\n#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCTRCENA_Pos 16U                               /*!< DWT CTRL: EXCTRCENA Position */\r\n#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */\r\n\r\n#define DWT_CTRL_PCSAMPLENA_Pos 12U                                /*!< DWT CTRL: PCSAMPLENA Position */\r\n#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */\r\n\r\n#define DWT_CTRL_SYNCTAP_Pos 10U                             /*!< DWT CTRL: SYNCTAP Position */\r\n#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */\r\n\r\n#define DWT_CTRL_CYCTAP_Pos 9U                             /*!< DWT CTRL: CYCTAP Position */\r\n#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */\r\n\r\n#define DWT_CTRL_POSTINIT_Pos 5U                               /*!< DWT CTRL: POSTINIT Position */\r\n#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */\r\n\r\n#define DWT_CTRL_POSTPRESET_Pos 1U                                 /*!< DWT CTRL: POSTPRESET Position */\r\n#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */\r\n\r\n#define DWT_CTRL_CYCCNTENA_Pos 0U                                    /*!< DWT CTRL: CYCCNTENA Position */\r\n#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */\r\n\r\n/* DWT CPI Count Register Definitions */\r\n#define DWT_CPICNT_CPICNT_Pos 0U                                    /*!< DWT CPICNT: CPICNT Position */\r\n#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */\r\n\r\n/* DWT Exception Overhead Count Register Definitions */\r\n#define DWT_EXCCNT_EXCCNT_Pos 0U                                    /*!< DWT EXCCNT: EXCCNT Position */\r\n#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */\r\n\r\n/* DWT Sleep Count Register Definitions */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U                                        /*!< DWT SLEEPCNT: SLEEPCNT Position */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */\r\n\r\n/* DWT LSU Count Register Definitions */\r\n#define DWT_LSUCNT_LSUCNT_Pos 0U                                    /*!< DWT LSUCNT: LSUCNT Position */\r\n#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */\r\n\r\n/* DWT Folded-instruction Count Register Definitions */\r\n#define DWT_FOLDCNT_FOLDCNT_Pos 0U                                      /*!< DWT FOLDCNT: FOLDCNT Position */\r\n#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */\r\n\r\n/* DWT Comparator Mask Register Definitions */\r\n#define DWT_MASK_MASK_Pos 0U                                /*!< DWT MASK: MASK Position */\r\n#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */\r\n\r\n/* DWT Comparator Function Register Definitions */\r\n#define DWT_FUNCTION_MATCHED_Pos 24U                                 /*!< DWT FUNCTION: MATCHED Position */\r\n#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR1_Pos 16U                                    /*!< DWT FUNCTION: DATAVADDR1 Position */\r\n#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR0_Pos 12U                                    /*!< DWT FUNCTION: DATAVADDR0 Position */\r\n#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVSIZE_Pos 10U                                   /*!< DWT FUNCTION: DATAVSIZE Position */\r\n#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */\r\n\r\n#define DWT_FUNCTION_LNK1ENA_Pos 9U                                  /*!< DWT FUNCTION: LNK1ENA Position */\r\n#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */\r\n\r\n#define DWT_FUNCTION_DATAVMATCH_Pos 8U                                     /*!< DWT FUNCTION: DATAVMATCH Position */\r\n#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */\r\n\r\n#define DWT_FUNCTION_CYCMATCH_Pos 7U                                   /*!< DWT FUNCTION: CYCMATCH Position */\r\n#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */\r\n\r\n#define DWT_FUNCTION_EMITRANGE_Pos 5U                                    /*!< DWT FUNCTION: EMITRANGE Position */\r\n#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */\r\n\r\n#define DWT_FUNCTION_FUNCTION_Pos 0U                                       /*!< DWT FUNCTION: FUNCTION Position */\r\n#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_DWT */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_TPI     Trace Port Interface (TPI)\r\n  \\brief    Type definitions for the Trace Port Interface (TPI)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Trace Port Interface Register (TPI).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  SSPSR; /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */\r\n  __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */\r\n  uint32_t       RESERVED0[2U];\r\n  __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */\r\n  uint32_t       RESERVED1[55U];\r\n  __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */\r\n  uint32_t       RESERVED2[131U];\r\n  __IM uint32_t  FFSR; /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */\r\n  __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */\r\n  __IM uint32_t  FSCR; /*!< Offset: 0x308 (R/ )  Formatter Synchronization Counter Register */\r\n  uint32_t       RESERVED3[759U];\r\n  __IM uint32_t  TRIGGER;   /*!< Offset: 0xEE8 (R/ )  TRIGGER Register */\r\n  __IM uint32_t  FIFO0;     /*!< Offset: 0xEEC (R/ )  Integration ETM Data */\r\n  __IM uint32_t  ITATBCTR2; /*!< Offset: 0xEF0 (R/ )  ITATBCTR2 */\r\n  uint32_t       RESERVED4[1U];\r\n  __IM uint32_t  ITATBCTR0; /*!< Offset: 0xEF8 (R/ )  ITATBCTR0 */\r\n  __IM uint32_t  FIFO1;     /*!< Offset: 0xEFC (R/ )  Integration ITM Data */\r\n  __IOM uint32_t ITCTRL;    /*!< Offset: 0xF00 (R/W)  Integration Mode Control */\r\n  uint32_t       RESERVED5[39U];\r\n  __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W)  Claim tag set */\r\n  __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W)  Claim tag clear */\r\n  uint32_t       RESERVED7[8U];\r\n  __IM uint32_t  DEVID;   /*!< Offset: 0xFC8 (R/ )  TPIU_DEVID */\r\n  __IM uint32_t  DEVTYPE; /*!< Offset: 0xFCC (R/ )  TPIU_DEVTYPE */\r\n} TPI_Type;\r\n\r\n/* TPI Asynchronous Clock Prescaler Register Definitions */\r\n#define TPI_ACPR_PRESCALER_Pos 0U                                       /*!< TPI ACPR: PRESCALER Position */\r\n#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */\r\n\r\n/* TPI Selected Pin Protocol Register Definitions */\r\n#define TPI_SPPR_TXMODE_Pos 0U                                 /*!< TPI SPPR: TXMODE Position */\r\n#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */\r\n\r\n/* TPI Formatter and Flush Status Register Definitions */\r\n#define TPI_FFSR_FtNonStop_Pos 3U                                /*!< TPI FFSR: FtNonStop Position */\r\n#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */\r\n\r\n#define TPI_FFSR_TCPresent_Pos 2U                                /*!< TPI FFSR: TCPresent Position */\r\n#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */\r\n\r\n#define TPI_FFSR_FtStopped_Pos 1U                                /*!< TPI FFSR: FtStopped Position */\r\n#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */\r\n\r\n#define TPI_FFSR_FlInProg_Pos 0U                                   /*!< TPI FFSR: FlInProg Position */\r\n#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */\r\n\r\n/* TPI Formatter and Flush Control Register Definitions */\r\n#define TPI_FFCR_TrigIn_Pos 8U                             /*!< TPI FFCR: TrigIn Position */\r\n#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */\r\n\r\n#define TPI_FFCR_EnFCont_Pos 1U                              /*!< TPI FFCR: EnFCont Position */\r\n#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */\r\n\r\n/* TPI TRIGGER Register Definitions */\r\n#define TPI_TRIGGER_TRIGGER_Pos 0U                                     /*!< TPI TRIGGER: TRIGGER Position */\r\n#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */\r\n\r\n/* TPI Integration ETM Data Register Definitions (FIFO0) */\r\n#define TPI_FIFO0_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO0: ITM_ATVALID Position */\r\n#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO0: ITM_bytecount Position */\r\n#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO0: ETM_ATVALID Position */\r\n#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO0: ETM_bytecount Position */\r\n#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM2_Pos 16U                            /*!< TPI FIFO0: ETM2 Position */\r\n#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */\r\n\r\n#define TPI_FIFO0_ETM1_Pos 8U                             /*!< TPI FIFO0: ETM1 Position */\r\n#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */\r\n\r\n#define TPI_FIFO0_ETM0_Pos 0U                                 /*!< TPI FIFO0: ETM0 Position */\r\n#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */\r\n\r\n/* TPI ITATBCTR2 Register Definitions */\r\n#define TPI_ITATBCTR2_ATREADY2_Pos 0U                                        /*!< TPI ITATBCTR2: ATREADY2 Position */\r\n#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */\r\n\r\n#define TPI_ITATBCTR2_ATREADY1_Pos 0U                                        /*!< TPI ITATBCTR2: ATREADY1 Position */\r\n#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */\r\n\r\n/* TPI Integration ITM Data Register Definitions (FIFO1) */\r\n#define TPI_FIFO1_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO1: ITM_ATVALID Position */\r\n#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO1: ITM_bytecount Position */\r\n#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO1: ETM_ATVALID Position */\r\n#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO1: ETM_bytecount Position */\r\n#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ITM2_Pos 16U                            /*!< TPI FIFO1: ITM2 Position */\r\n#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */\r\n\r\n#define TPI_FIFO1_ITM1_Pos 8U                             /*!< TPI FIFO1: ITM1 Position */\r\n#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */\r\n\r\n#define TPI_FIFO1_ITM0_Pos 0U                                 /*!< TPI FIFO1: ITM0 Position */\r\n#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */\r\n\r\n/* TPI ITATBCTR0 Register Definitions */\r\n#define TPI_ITATBCTR0_ATREADY2_Pos 0U                                        /*!< TPI ITATBCTR0: ATREADY2 Position */\r\n#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */\r\n\r\n#define TPI_ITATBCTR0_ATREADY1_Pos 0U                                        /*!< TPI ITATBCTR0: ATREADY1 Position */\r\n#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */\r\n\r\n/* TPI Integration Mode Control Register Definitions */\r\n#define TPI_ITCTRL_Mode_Pos 0U                                 /*!< TPI ITCTRL: Mode Position */\r\n#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */\r\n\r\n/* TPI DEVID Register Definitions */\r\n#define TPI_DEVID_NRZVALID_Pos 11U                               /*!< TPI DEVID: NRZVALID Position */\r\n#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */\r\n\r\n#define TPI_DEVID_MANCVALID_Pos 10U                                /*!< TPI DEVID: MANCVALID Position */\r\n#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */\r\n\r\n#define TPI_DEVID_PTINVALID_Pos 9U                                 /*!< TPI DEVID: PTINVALID Position */\r\n#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */\r\n\r\n#define TPI_DEVID_MinBufSz_Pos 6U                                /*!< TPI DEVID: MinBufSz Position */\r\n#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */\r\n\r\n#define TPI_DEVID_AsynClkIn_Pos 5U                                 /*!< TPI DEVID: AsynClkIn Position */\r\n#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */\r\n\r\n#define TPI_DEVID_NrTraceInput_Pos 0U                                         /*!< TPI DEVID: NrTraceInput Position */\r\n#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */\r\n\r\n/* TPI DEVTYPE Register Definitions */\r\n#define TPI_DEVTYPE_SubType_Pos 4U                                     /*!< TPI DEVTYPE: SubType Position */\r\n#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */\r\n\r\n#define TPI_DEVTYPE_MajorType_Pos 0U                                   /*!< TPI DEVTYPE: MajorType Position */\r\n#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_TPI */\r\n\r\n#if defined(__MPU_PRESENT) && (__MPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_MPU     Memory Protection Unit (MPU)\r\n  \\brief    Type definitions for the Memory Protection Unit (MPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Memory Protection Unit (MPU).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  TYPE;    /*!< Offset: 0x000 (R/ )  MPU Type Register */\r\n  __IOM uint32_t CTRL;    /*!< Offset: 0x004 (R/W)  MPU Control Register */\r\n  __IOM uint32_t RNR;     /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */\r\n  __IOM uint32_t RBAR;    /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */\r\n  __IOM uint32_t RASR;    /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W)  MPU Alias 1 Region Base Address Register */\r\n  __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W)  MPU Alias 1 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W)  MPU Alias 2 Region Base Address Register */\r\n  __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W)  MPU Alias 2 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W)  MPU Alias 3 Region Base Address Register */\r\n  __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W)  MPU Alias 3 Region Attribute and Size Register */\r\n} MPU_Type;\r\n\r\n#define MPU_TYPE_RALIASES 4U\r\n\r\n/* MPU Type Register Definitions */\r\n#define MPU_TYPE_IREGION_Pos 16U                              /*!< MPU TYPE: IREGION Position */\r\n#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */\r\n\r\n#define MPU_TYPE_DREGION_Pos 8U                               /*!< MPU TYPE: DREGION Position */\r\n#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */\r\n\r\n#define MPU_TYPE_SEPARATE_Pos 0U                                 /*!< MPU TYPE: SEPARATE Position */\r\n#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */\r\n\r\n/* MPU Control Register Definitions */\r\n#define MPU_CTRL_PRIVDEFENA_Pos 2U                               /*!< MPU CTRL: PRIVDEFENA Position */\r\n#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */\r\n\r\n#define MPU_CTRL_HFNMIENA_Pos 1U                             /*!< MPU CTRL: HFNMIENA Position */\r\n#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */\r\n\r\n#define MPU_CTRL_ENABLE_Pos 0U                               /*!< MPU CTRL: ENABLE Position */\r\n#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */\r\n\r\n/* MPU Region Number Register Definitions */\r\n#define MPU_RNR_REGION_Pos 0U                                 /*!< MPU RNR: REGION Position */\r\n#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */\r\n\r\n/* MPU Region Base Address Register Definitions */\r\n#define MPU_RBAR_ADDR_Pos 5U                                 /*!< MPU RBAR: ADDR Position */\r\n#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */\r\n\r\n#define MPU_RBAR_VALID_Pos 4U                          /*!< MPU RBAR: VALID Position */\r\n#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */\r\n\r\n#define MPU_RBAR_REGION_Pos 0U                                 /*!< MPU RBAR: REGION Position */\r\n#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */\r\n\r\n/* MPU Region Attribute and Size Register Definitions */\r\n#define MPU_RASR_ATTRS_Pos 16U                              /*!< MPU RASR: MPU Region Attribute field Position */\r\n#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */\r\n\r\n#define MPU_RASR_XN_Pos 28U                      /*!< MPU RASR: ATTRS.XN Position */\r\n#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */\r\n\r\n#define MPU_RASR_AP_Pos 24U                        /*!< MPU RASR: ATTRS.AP Position */\r\n#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */\r\n\r\n#define MPU_RASR_TEX_Pos 19U                         /*!< MPU RASR: ATTRS.TEX Position */\r\n#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */\r\n\r\n#define MPU_RASR_S_Pos 18U                     /*!< MPU RASR: ATTRS.S Position */\r\n#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */\r\n\r\n#define MPU_RASR_C_Pos 17U                     /*!< MPU RASR: ATTRS.C Position */\r\n#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */\r\n\r\n#define MPU_RASR_B_Pos 16U                     /*!< MPU RASR: ATTRS.B Position */\r\n#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */\r\n\r\n#define MPU_RASR_SRD_Pos 8U                           /*!< MPU RASR: Sub-Region Disable Position */\r\n#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */\r\n\r\n#define MPU_RASR_SIZE_Pos 1U                            /*!< MPU RASR: Region Size Field Position */\r\n#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */\r\n\r\n#define MPU_RASR_ENABLE_Pos 0U                               /*!< MPU RASR: Region enable bit Position */\r\n#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */\r\n\r\n/*@} end of group CMSIS_MPU */\r\n#endif\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    Type definitions for the Core Debug Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Core Debug Register (CoreDebug).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */\r\n  __OM uint32_t  DCRSR; /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */\r\n  __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */\r\n  __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */\r\n} CoreDebug_Type;\r\n\r\n/* Debug Halting Control and Status Register Definitions */\r\n#define CoreDebug_DHCSR_DBGKEY_Pos 16U                                      /*!< CoreDebug DHCSR: DBGKEY Position */\r\n#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U                                     /*!< CoreDebug DHCSR: S_RESET_ST Position */\r\n#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U                                      /*!< CoreDebug DHCSR: S_RETIRE_ST Position */\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U                                   /*!< CoreDebug DHCSR: S_LOCKUP Position */\r\n#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_SLEEP_Pos 18U                                  /*!< CoreDebug DHCSR: S_SLEEP Position */\r\n#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_HALT_Pos 17U                                 /*!< CoreDebug DHCSR: S_HALT Position */\r\n#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_S_REGRDY_Pos 16U                                   /*!< CoreDebug DHCSR: S_REGRDY Position */\r\n#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */\r\n\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U                                       /*!< CoreDebug DHCSR: C_SNAPSTALL Position */\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */\r\n\r\n#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U                                      /*!< CoreDebug DHCSR: C_MASKINTS Position */\r\n#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */\r\n\r\n#define CoreDebug_DHCSR_C_STEP_Pos 2U                                  /*!< CoreDebug DHCSR: C_STEP Position */\r\n#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */\r\n\r\n#define CoreDebug_DHCSR_C_HALT_Pos 1U                                  /*!< CoreDebug DHCSR: C_HALT Position */\r\n#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U                                         /*!< CoreDebug DHCSR: C_DEBUGEN Position */\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */\r\n\r\n/* Debug Core Register Selector Register Definitions */\r\n#define CoreDebug_DCRSR_REGWnR_Pos 16U                                 /*!< CoreDebug DCRSR: REGWnR Position */\r\n#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */\r\n\r\n#define CoreDebug_DCRSR_REGSEL_Pos 0U                                         /*!< CoreDebug DCRSR: REGSEL Position */\r\n#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */\r\n\r\n/* Debug Exception and Monitor Control Register Definitions */\r\n#define CoreDebug_DEMCR_TRCENA_Pos 24U                                 /*!< CoreDebug DEMCR: TRCENA Position */\r\n#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_REQ_Pos 19U                                  /*!< CoreDebug DEMCR: MON_REQ Position */\r\n#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_STEP_Pos 18U                                   /*!< CoreDebug DEMCR: MON_STEP Position */\r\n#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_PEND_Pos 17U                                   /*!< CoreDebug DEMCR: MON_PEND Position */\r\n#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_EN_Pos 16U                                 /*!< CoreDebug DEMCR: MON_EN Position */\r\n#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U                                     /*!< CoreDebug DEMCR: VC_HARDERR Position */\r\n#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_INTERR_Pos 9U                                     /*!< CoreDebug DEMCR: VC_INTERR Position */\r\n#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U                                     /*!< CoreDebug DEMCR: VC_BUSERR Position */\r\n#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_STATERR_Pos 7U                                      /*!< CoreDebug DEMCR: VC_STATERR Position */\r\n#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U                                     /*!< CoreDebug DEMCR: VC_CHKERR Position */\r\n#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U                                      /*!< CoreDebug DEMCR: VC_NOCPERR Position */\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_MMERR_Pos 4U                                    /*!< CoreDebug DEMCR: VC_MMERR Position */\r\n#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */\r\n#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */\r\n\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) (((uint32_t)(value) << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register. This parameter is interpreted as an uint32_t type.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) (((uint32_t)(value)&field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of Core Hardware */\r\n#define SCS_BASE       (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define ITM_BASE       (0xE0000000UL)        /*!< ITM Base Address */\r\n#define DWT_BASE       (0xE0001000UL)        /*!< DWT Base Address */\r\n#define TPI_BASE       (0xE0040000UL)        /*!< TPI Base Address */\r\n#define CoreDebug_BASE (0xE000EDF0UL)        /*!< Core Debug Base Address */\r\n#define SysTick_BASE   (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE      (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE       (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCnSCB    ((SCnSCB_Type *)SCS_BASE)          /*!< System control Register not in SCB */\r\n#define SCB       ((SCB_Type *)SCB_BASE)             /*!< SCB configuration struct */\r\n#define SysTick   ((SysTick_Type *)SysTick_BASE)     /*!< SysTick configuration struct */\r\n#define NVIC      ((NVIC_Type *)NVIC_BASE)           /*!< NVIC configuration struct */\r\n#define ITM       ((ITM_Type *)ITM_BASE)             /*!< ITM configuration struct */\r\n#define DWT       ((DWT_Type *)DWT_BASE)             /*!< DWT configuration struct */\r\n#define TPI       ((TPI_Type *)TPI_BASE)             /*!< TPI configuration struct */\r\n#define CoreDebug ((CoreDebug_Type *)CoreDebug_BASE) /*!< Core Debug configuration struct */\r\n\r\n#if defined(__MPU_PRESENT) && (__MPU_PRESENT == 1U)\r\n#define MPU_BASE (SCS_BASE + 0x0D90UL)  /*!< Memory Protection Unit */\r\n#define MPU      ((MPU_Type *)MPU_BASE) /*!< Memory Protection Unit */\r\n#endif\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Debug Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n#ifdef CMSIS_NVIC_VIRTUAL\r\n#ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE\r\n#define CMSIS_NVIC_VIRTUAL_HEADER_FILE \"cmsis_nvic_virtual.h\"\r\n#endif\r\n#include CMSIS_NVIC_VIRTUAL_HEADER_FILE\r\n#else\r\n#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping\r\n#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping\r\n#define NVIC_EnableIRQ           __NVIC_EnableIRQ\r\n#define NVIC_GetEnableIRQ        __NVIC_GetEnableIRQ\r\n#define NVIC_DisableIRQ          __NVIC_DisableIRQ\r\n#define NVIC_GetPendingIRQ       __NVIC_GetPendingIRQ\r\n#define NVIC_SetPendingIRQ       __NVIC_SetPendingIRQ\r\n#define NVIC_ClearPendingIRQ     __NVIC_ClearPendingIRQ\r\n#define NVIC_GetActive           __NVIC_GetActive\r\n#define NVIC_SetPriority         __NVIC_SetPriority\r\n#define NVIC_GetPriority         __NVIC_GetPriority\r\n#define NVIC_SystemReset         __NVIC_SystemReset\r\n#endif /* CMSIS_NVIC_VIRTUAL */\r\n\r\n#ifdef CMSIS_VECTAB_VIRTUAL\r\n#ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE\r\n#define CMSIS_VECTAB_VIRTUAL_HEADER_FILE \"cmsis_vectab_virtual.h\"\r\n#endif\r\n#include CMSIS_VECTAB_VIRTUAL_HEADER_FILE\r\n#else\r\n#define NVIC_SetVector __NVIC_SetVector\r\n#define NVIC_GetVector __NVIC_GetVector\r\n#endif /* (CMSIS_VECTAB_VIRTUAL) */\r\n\r\n#define NVIC_USER_IRQ_OFFSET 16\r\n\r\n/* The following EXC_RETURN values are saved the LR on exception entry */\r\n#define EXC_RETURN_HANDLER    (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return                               */\r\n#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return                                */\r\n#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return                                */\r\n\r\n/**\r\n  \\brief   Set Priority Grouping\r\n  \\details Sets the priority grouping field using the required unlock sequence.\r\n           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.\r\n           Only values from 0..7 are used.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]      PriorityGroup  Priority grouping field.\r\n */\r\n__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) {\r\n  uint32_t reg_value;\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n\r\n  reg_value = SCB->AIRCR;                                                                                                 /* read old register configuration    */\r\n  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk));                                             /* clear bits to change               */\r\n  reg_value  = (reg_value | ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos)); /* Insert write key and priority group */\r\n  SCB->AIRCR = reg_value;\r\n}\r\n\r\n/**\r\n  \\brief   Get Priority Grouping\r\n  \\details Reads the priority grouping field from the NVIC Interrupt Controller.\r\n  \\return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).\r\n */\r\n__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) { return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); }\r\n\r\n/**\r\n  \\brief   Enable Interrupt\r\n  \\details Enables a device specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Enable status\r\n  \\details Returns a device specific interrupt enable status from the NVIC interrupt controller.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\return             0  Interrupt is not enabled.\r\n  \\return             1  Interrupt is enabled.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    return ((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));\r\n  } else {\r\n    return (0U);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Disable Interrupt\r\n  \\details Disables a device specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));\r\n    __DSB();\r\n    __ISB();\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    return ((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));\r\n  } else {\r\n    return (0U);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of a device specific interrupt in the NVIC pending register.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of a device specific interrupt in the NVIC pending register.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Active Interrupt\r\n  \\details Reads the active register in the NVIC and returns the active bit for the device specific interrupt.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\return             0  Interrupt status is not active.\r\n  \\return             1  Interrupt status is active.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    return ((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));\r\n  } else {\r\n    return (0U);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of a device specific interrupt or a processor exception.\r\n           The interrupt number can be positive to specify a device specific interrupt,\r\n           or negative to specify a processor exception.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n  \\note    The priority cannot be set for every processor exception.\r\n */\r\n__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  } else {\r\n    SCB->SHP[(((uint32_t)IRQn) & 0xFUL) - 4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of a device specific interrupt or a processor exception.\r\n           The interrupt number can be positive to specify a device specific interrupt,\r\n           or negative to specify a processor exception.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    return (((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return (((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL) - 4UL] >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Encode Priority\r\n  \\details Encodes the priority for an interrupt with the given priority group,\r\n           preemptive priority value, and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [in]   PreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [in]       SubPriority  Subpriority value (starting from 0).\r\n  \\return                        Encoded priority. Value can be used in the function \\ref NVIC_SetPriority().\r\n */\r\n__STATIC_INLINE uint32_t NVIC_EncodePriority(uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  return (((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | ((SubPriority & (uint32_t)((1UL << (SubPriorityBits)) - 1UL))));\r\n}\r\n\r\n/**\r\n  \\brief   Decode Priority\r\n  \\details Decodes an interrupt priority value with a given priority group to\r\n           preemptive priority value and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.\r\n  \\param [in]         Priority   Priority value, which can be retrieved with the function \\ref NVIC_GetPriority().\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [out] pPreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [out]     pSubPriority  Subpriority value (starting from 0).\r\n */\r\n__STATIC_INLINE void NVIC_DecodePriority(uint32_t Priority, uint32_t PriorityGroup, uint32_t *const pPreemptPriority, uint32_t *const pSubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);\r\n  *pSubPriority     = (Priority) & (uint32_t)((1UL << (SubPriorityBits)) - 1UL);\r\n}\r\n\r\n/**\r\n  \\brief   Set Interrupt Vector\r\n  \\details Sets an interrupt vector in SRAM based interrupt vector table.\r\n           The interrupt number can be positive to specify a device specific interrupt,\r\n           or negative to specify a processor exception.\r\n           VTOR must been relocated to SRAM before.\r\n  \\param [in]   IRQn      Interrupt number\r\n  \\param [in]   vector    Address of interrupt handler function\r\n */\r\n__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) {\r\n  uint32_t *vectors                             = (uint32_t *)SCB->VTOR;\r\n  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Vector\r\n  \\details Reads an interrupt vector from interrupt vector table.\r\n           The interrupt number can be positive to specify a device specific interrupt,\r\n           or negative to specify a processor exception.\r\n  \\param [in]   IRQn      Interrupt number.\r\n  \\return                 Address of interrupt handler function\r\n */\r\n__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) {\r\n  uint32_t *vectors = (uint32_t *)SCB->VTOR;\r\n  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) {\r\n  __DSB();                                                                                                                         /* Ensure all outstanding memory accesses included\r\n                                                                                                                                      buffered write are completed before reset */\r\n  SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */\r\n  __DSB();                                                                                                                         /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##########################  MPU functions  #################################### */\r\n\r\n#if defined(__MPU_PRESENT) && (__MPU_PRESENT == 1U)\r\n\r\n#include \"mpu_armv7.h\"\r\n\r\n#endif\r\n\r\n/* ##########################  FPU functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_FpuFunctions FPU Functions\r\n  \\brief    Function that provides FPU type.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   get FPU type\r\n  \\details returns the FPU type\r\n  \\returns\r\n   - \\b  0: No FPU\r\n   - \\b  1: Single precision FPU\r\n   - \\b  2: Double + Single precision FPU\r\n */\r\n__STATIC_INLINE uint32_t SCB_GetFPUType(void) { return 0U; /* No FPU */ }\r\n\r\n/*@} end of CMSIS_Core_FpuFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if defined(__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n/* ##################################### Debug In/Output function ########################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_core_DebugFunctions ITM Functions\r\n  \\brief    Functions that access the ITM debug interface.\r\n  @{\r\n */\r\n\r\nextern volatile int32_t ITM_RxBuffer;             /*!< External variable to receive characters. */\r\n#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \\ref ITM_RxBuffer is ready for next character. */\r\n\r\n/**\r\n  \\brief   ITM Send Character\r\n  \\details Transmits a character via the ITM channel 0, and\r\n           \\li Just returns when no debugger is connected that has booked the output.\r\n           \\li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.\r\n  \\param [in]     ch  Character to transmit.\r\n  \\returns            Character to transmit.\r\n */\r\n__STATIC_INLINE uint32_t ITM_SendChar(uint32_t ch) {\r\n  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */\r\n      ((ITM->TER & 1UL) != 0UL))                  /* ITM Port #0 enabled */\r\n  {\r\n    while (ITM->PORT[0U].u32 == 0UL) {\r\n      __NOP();\r\n    }\r\n    ITM->PORT[0U].u8 = (uint8_t)ch;\r\n  }\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Receive Character\r\n  \\details Inputs a character via the external variable \\ref ITM_RxBuffer.\r\n  \\return             Received character.\r\n  \\return         -1  No character pending.\r\n */\r\n__STATIC_INLINE int32_t ITM_ReceiveChar(void) {\r\n  int32_t ch = -1; /* no character available */\r\n\r\n  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) {\r\n    ch           = ITM_RxBuffer;\r\n    ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */\r\n  }\r\n\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Check Character\r\n  \\details Checks whether a character is pending for reading in the variable \\ref ITM_RxBuffer.\r\n  \\return          0  No character available.\r\n  \\return          1  Character available.\r\n */\r\n__STATIC_INLINE int32_t ITM_CheckChar(void) {\r\n\r\n  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {\r\n    return (0); /* no character available */\r\n  } else {\r\n    return (1); /*    character available */\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_core_DebugFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM3_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/CMSIS/Include/core_sc000.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_sc000.h\r\n                                                                              * @brief    CMSIS SC000 Core Peripheral Access Layer Header File\r\n                                                                              * @version  V5.0.5\r\n                                                                              * @date     28. May 2018\r\n                                                                              ******************************************************************************/\r\n/*\r\n * Copyright (c) 2009-2018 Arm Limited. All rights reserved.\r\n *\r\n * SPDX-License-Identifier: Apache-2.0\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the License); you may\r\n * not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__clang__)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_SC000_H_GENERIC\r\n#define __CORE_SC000_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup SC000\r\n  @{\r\n */\r\n\r\n#include \"cmsis_version.h\"\r\n\r\n/*  CMSIS SC000 definitions */\r\n#define __SC000_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN)                                         /*!< \\deprecated [31:16] CMSIS HAL main version */\r\n#define __SC000_CMSIS_VERSION_SUB  (__CM_CMSIS_VERSION_SUB)                                          /*!< \\deprecated [15:0]  CMSIS HAL sub version */\r\n#define __SC000_CMSIS_VERSION      ((__SC000_CMSIS_VERSION_MAIN << 16U) | __SC000_CMSIS_VERSION_SUB) /*!< \\deprecated CMSIS HAL version number */\r\n\r\n#define __CORTEX_SC (000U) /*!< Cortex secure core */\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    This core does not support an FPU at all\r\n*/\r\n#define __FPU_USED 0U\r\n\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TI_ARM__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"cmsis_compiler.h\" /* CMSIS compiler specific defines */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_SC000_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_SC000_H_DEPENDANT\r\n#define __CORE_SC000_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __SC000_REV\r\n#define __SC000_REV 0x0000U\r\n#warning \"__SC000_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __MPU_PRESENT\r\n#define __MPU_PRESENT 0U\r\n#warning \"__MPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 2U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group SC000 */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n  - Core MPU Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 28; /*!< bit:  0..27  Reserved */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 15; /*!< bit:  9..23  Reserved */\r\n    uint32_t T : 1;           /*!< bit:     24  Thumb bit        (read 0) */\r\n    uint32_t _reserved1 : 3;  /*!< bit: 25..27  Reserved */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 1;  /*!< bit:      0  Reserved */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t _reserved1 : 30; /*!< bit:  2..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[31U];\r\n  __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[31U];\r\n  __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[31U];\r\n  __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[31U];\r\n  uint32_t       RESERVED4[64U];\r\n  __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */\r\n} NVIC_Type;\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID; /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;  /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n  __IOM uint32_t VTOR;  /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */\r\n  __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;   /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;   /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */\r\n  __IOM uint32_t SHCSR;   /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n  uint32_t       RESERVED1[154U];\r\n  __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W)  Security Features Control Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_VTOR_TBLOFF_Pos 7U                                   /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)\r\n  \\brief    Type definitions for the System Control and ID Register not in the SCB\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control and ID Register not in the SCB.\r\n */\r\ntypedef struct {\r\n  uint32_t       RESERVED0[2U];\r\n  __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */\r\n} SCnSCB_Type;\r\n\r\n/* Auxiliary Control Register Definitions */\r\n#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U                                       /*!< ACTLR: DISMCYCINT Position */\r\n#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */\r\n\r\n/*@} end of group CMSIS_SCnotSCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n#if defined(__MPU_PRESENT) && (__MPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_MPU     Memory Protection Unit (MPU)\r\n  \\brief    Type definitions for the Memory Protection Unit (MPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Memory Protection Unit (MPU).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  TYPE; /*!< Offset: 0x000 (R/ )  MPU Type Register */\r\n  __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W)  MPU Control Register */\r\n  __IOM uint32_t RNR;  /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */\r\n  __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */\r\n  __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */\r\n} MPU_Type;\r\n\r\n/* MPU Type Register Definitions */\r\n#define MPU_TYPE_IREGION_Pos 16U                              /*!< MPU TYPE: IREGION Position */\r\n#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */\r\n\r\n#define MPU_TYPE_DREGION_Pos 8U                               /*!< MPU TYPE: DREGION Position */\r\n#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */\r\n\r\n#define MPU_TYPE_SEPARATE_Pos 0U                                 /*!< MPU TYPE: SEPARATE Position */\r\n#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */\r\n\r\n/* MPU Control Register Definitions */\r\n#define MPU_CTRL_PRIVDEFENA_Pos 2U                               /*!< MPU CTRL: PRIVDEFENA Position */\r\n#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */\r\n\r\n#define MPU_CTRL_HFNMIENA_Pos 1U                             /*!< MPU CTRL: HFNMIENA Position */\r\n#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */\r\n\r\n#define MPU_CTRL_ENABLE_Pos 0U                               /*!< MPU CTRL: ENABLE Position */\r\n#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */\r\n\r\n/* MPU Region Number Register Definitions */\r\n#define MPU_RNR_REGION_Pos 0U                                 /*!< MPU RNR: REGION Position */\r\n#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */\r\n\r\n/* MPU Region Base Address Register Definitions */\r\n#define MPU_RBAR_ADDR_Pos 8U                                /*!< MPU RBAR: ADDR Position */\r\n#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */\r\n\r\n#define MPU_RBAR_VALID_Pos 4U                          /*!< MPU RBAR: VALID Position */\r\n#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */\r\n\r\n#define MPU_RBAR_REGION_Pos 0U                                 /*!< MPU RBAR: REGION Position */\r\n#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */\r\n\r\n/* MPU Region Attribute and Size Register Definitions */\r\n#define MPU_RASR_ATTRS_Pos 16U                              /*!< MPU RASR: MPU Region Attribute field Position */\r\n#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */\r\n\r\n#define MPU_RASR_XN_Pos 28U                      /*!< MPU RASR: ATTRS.XN Position */\r\n#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */\r\n\r\n#define MPU_RASR_AP_Pos 24U                        /*!< MPU RASR: ATTRS.AP Position */\r\n#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */\r\n\r\n#define MPU_RASR_TEX_Pos 19U                         /*!< MPU RASR: ATTRS.TEX Position */\r\n#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */\r\n\r\n#define MPU_RASR_S_Pos 18U                     /*!< MPU RASR: ATTRS.S Position */\r\n#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */\r\n\r\n#define MPU_RASR_C_Pos 17U                     /*!< MPU RASR: ATTRS.C Position */\r\n#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */\r\n\r\n#define MPU_RASR_B_Pos 16U                     /*!< MPU RASR: ATTRS.B Position */\r\n#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */\r\n\r\n#define MPU_RASR_SRD_Pos 8U                           /*!< MPU RASR: Sub-Region Disable Position */\r\n#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */\r\n\r\n#define MPU_RASR_SIZE_Pos 1U                            /*!< MPU RASR: Region Size Field Position */\r\n#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */\r\n\r\n#define MPU_RASR_ENABLE_Pos 0U                               /*!< MPU RASR: Region enable bit Position */\r\n#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */\r\n\r\n/*@} end of group CMSIS_MPU */\r\n#endif\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    SC000 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor.\r\n            Therefore they are not covered by the SC000 header file.\r\n  @{\r\n */\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) (((uint32_t)(value) << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register. This parameter is interpreted as an uint32_t type.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) (((uint32_t)(value)&field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of Core Hardware */\r\n#define SCS_BASE     (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE    (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE     (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCnSCB  ((SCnSCB_Type *)SCS_BASE)      /*!< System control Register not in SCB */\r\n#define SCB     ((SCB_Type *)SCB_BASE)         /*!< SCB configuration struct */\r\n#define SysTick ((SysTick_Type *)SysTick_BASE) /*!< SysTick configuration struct */\r\n#define NVIC    ((NVIC_Type *)NVIC_BASE)       /*!< NVIC configuration struct */\r\n\r\n#if defined(__MPU_PRESENT) && (__MPU_PRESENT == 1U)\r\n#define MPU_BASE (SCS_BASE + 0x0D90UL)  /*!< Memory Protection Unit */\r\n#define MPU      ((MPU_Type *)MPU_BASE) /*!< Memory Protection Unit */\r\n#endif\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n#ifdef CMSIS_NVIC_VIRTUAL\r\n#ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE\r\n#define CMSIS_NVIC_VIRTUAL_HEADER_FILE \"cmsis_nvic_virtual.h\"\r\n#endif\r\n#include CMSIS_NVIC_VIRTUAL_HEADER_FILE\r\n#else\r\n/*#define NVIC_SetPriorityGrouping    __NVIC_SetPriorityGrouping   not available for SC000 */\r\n/*#define NVIC_GetPriorityGrouping    __NVIC_GetPriorityGrouping   not available for SC000 */\r\n#define NVIC_EnableIRQ       __NVIC_EnableIRQ\r\n#define NVIC_GetEnableIRQ    __NVIC_GetEnableIRQ\r\n#define NVIC_DisableIRQ      __NVIC_DisableIRQ\r\n#define NVIC_GetPendingIRQ   __NVIC_GetPendingIRQ\r\n#define NVIC_SetPendingIRQ   __NVIC_SetPendingIRQ\r\n#define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ\r\n/*#define NVIC_GetActive              __NVIC_GetActive             not available for SC000 */\r\n#define NVIC_SetPriority     __NVIC_SetPriority\r\n#define NVIC_GetPriority     __NVIC_GetPriority\r\n#define NVIC_SystemReset     __NVIC_SystemReset\r\n#endif /* CMSIS_NVIC_VIRTUAL */\r\n\r\n#ifdef CMSIS_VECTAB_VIRTUAL\r\n#ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE\r\n#define CMSIS_VECTAB_VIRTUAL_HEADER_FILE \"cmsis_vectab_virtual.h\"\r\n#endif\r\n#include CMSIS_VECTAB_VIRTUAL_HEADER_FILE\r\n#else\r\n#define NVIC_SetVector __NVIC_SetVector\r\n#define NVIC_GetVector __NVIC_GetVector\r\n#endif /* (CMSIS_VECTAB_VIRTUAL) */\r\n\r\n#define NVIC_USER_IRQ_OFFSET 16\r\n\r\n/* The following EXC_RETURN values are saved the LR on exception entry */\r\n#define EXC_RETURN_HANDLER    (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return                               */\r\n#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return                                */\r\n#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return                                */\r\n\r\n/* Interrupt Priorities are WORD accessible only under Armv6-M                  */\r\n/* The following MACROS handle generation of the register offset and byte masks */\r\n#define _BIT_SHIFT(IRQn) (((((uint32_t)(int32_t)(IRQn))) & 0x03UL) * 8UL)\r\n#define _SHP_IDX(IRQn)   ((((((uint32_t)(int32_t)(IRQn)) & 0x0FUL) - 8UL) >> 2UL))\r\n#define _IP_IDX(IRQn)    ((((uint32_t)(int32_t)(IRQn)) >> 2UL))\r\n\r\n/**\r\n  \\brief   Enable Interrupt\r\n  \\details Enables a device specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Enable status\r\n  \\details Returns a device specific interrupt enable status from the NVIC interrupt controller.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\return             0  Interrupt is not enabled.\r\n  \\return             1  Interrupt is enabled.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    return ((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));\r\n  } else {\r\n    return (0U);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Disable Interrupt\r\n  \\details Disables a device specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));\r\n    __DSB();\r\n    __ISB();\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    return ((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));\r\n  } else {\r\n    return (0U);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of a device specific interrupt in the NVIC pending register.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of a device specific interrupt in the NVIC pending register.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of a device specific interrupt or a processor exception.\r\n           The interrupt number can be positive to specify a device specific interrupt,\r\n           or negative to specify a processor exception.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n  \\note    The priority cannot be set for every processor exception.\r\n */\r\n__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));\r\n  } else {\r\n    SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of a device specific interrupt or a processor exception.\r\n           The interrupt number can be positive to specify a device specific interrupt,\r\n           or negative to specify a processor exception.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    return ((uint32_t)(((NVIC->IP[_IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn)) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return ((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn)) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Set Interrupt Vector\r\n  \\details Sets an interrupt vector in SRAM based interrupt vector table.\r\n           The interrupt number can be positive to specify a device specific interrupt,\r\n           or negative to specify a processor exception.\r\n           VTOR must been relocated to SRAM before.\r\n  \\param [in]   IRQn      Interrupt number\r\n  \\param [in]   vector    Address of interrupt handler function\r\n */\r\n__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) {\r\n  uint32_t *vectors                             = (uint32_t *)SCB->VTOR;\r\n  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Vector\r\n  \\details Reads an interrupt vector from interrupt vector table.\r\n           The interrupt number can be positive to specify a device specific interrupt,\r\n           or negative to specify a processor exception.\r\n  \\param [in]   IRQn      Interrupt number.\r\n  \\return                 Address of interrupt handler function\r\n */\r\n__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) {\r\n  uint32_t *vectors = (uint32_t *)SCB->VTOR;\r\n  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) {\r\n  __DSB(); /* Ensure all outstanding memory accesses included\r\n              buffered write are completed before reset */\r\n  SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | SCB_AIRCR_SYSRESETREQ_Msk);\r\n  __DSB(); /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##########################  FPU functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_FpuFunctions FPU Functions\r\n  \\brief    Function that provides FPU type.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   get FPU type\r\n  \\details returns the FPU type\r\n  \\returns\r\n   - \\b  0: No FPU\r\n   - \\b  1: Single precision FPU\r\n   - \\b  2: Double + Single precision FPU\r\n */\r\n__STATIC_INLINE uint32_t SCB_GetFPUType(void) { return 0U; /* No FPU */ }\r\n\r\n/*@} end of CMSIS_Core_FpuFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if defined(__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_SC000_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/CMSIS/Include/core_sc300.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_sc300.h\r\n                                                                              * @brief    CMSIS SC300 Core Peripheral Access Layer Header File\r\n                                                                              * @version  V5.0.6\r\n                                                                              * @date     04. June 2018\r\n                                                                              ******************************************************************************/\r\n/*\r\n * Copyright (c) 2009-2018 Arm Limited. All rights reserved.\r\n *\r\n * SPDX-License-Identifier: Apache-2.0\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the License); you may\r\n * not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__clang__)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_SC300_H_GENERIC\r\n#define __CORE_SC300_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup SC3000\r\n  @{\r\n */\r\n\r\n#include \"cmsis_version.h\"\r\n\r\n/*  CMSIS SC300 definitions */\r\n#define __SC300_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN)                                         /*!< \\deprecated [31:16] CMSIS HAL main version */\r\n#define __SC300_CMSIS_VERSION_SUB  (__CM_CMSIS_VERSION_SUB)                                          /*!< \\deprecated [15:0]  CMSIS HAL sub version */\r\n#define __SC300_CMSIS_VERSION      ((__SC300_CMSIS_VERSION_MAIN << 16U) | __SC300_CMSIS_VERSION_SUB) /*!< \\deprecated CMSIS HAL version number */\r\n\r\n#define __CORTEX_SC (300U) /*!< Cortex secure core */\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    This core does not support an FPU at all\r\n*/\r\n#define __FPU_USED 0U\r\n\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TI_ARM__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"cmsis_compiler.h\" /* CMSIS compiler specific defines */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_SC300_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_SC300_H_DEPENDANT\r\n#define __CORE_SC300_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __SC300_REV\r\n#define __SC300_REV 0x0000U\r\n#warning \"__SC300_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __MPU_PRESENT\r\n#define __MPU_PRESENT 0U\r\n#warning \"__MPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 3U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group SC300 */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n  - Core Debug Register\r\n  - Core MPU Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 27; /*!< bit:  0..26  Reserved */\r\n    uint32_t Q : 1;           /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n#define APSR_Q_Pos 27U                 /*!< APSR: Q Position */\r\n#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;        /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 1; /*!< bit:      9  Reserved */\r\n    uint32_t ICI_IT_1 : 6;   /*!< bit: 10..15  ICI/IT part 1 */\r\n    uint32_t _reserved1 : 8; /*!< bit: 16..23  Reserved */\r\n    uint32_t T : 1;          /*!< bit:     24  Thumb bit */\r\n    uint32_t ICI_IT_2 : 2;   /*!< bit: 25..26  ICI/IT part 2 */\r\n    uint32_t Q : 1;          /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;          /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;          /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;          /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;          /*!< bit:     31  Negative condition code flag */\r\n  } b;                       /*!< Structure used for bit  access */\r\n  uint32_t w;                /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_Q_Pos 27U                 /*!< xPSR: Q Position */\r\n#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */\r\n\r\n#define xPSR_ICI_IT_2_Pos 25U                        /*!< xPSR: ICI/IT part 2 Position */\r\n#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_ICI_IT_1_Pos 10U                           /*!< xPSR: ICI/IT part 1 Position */\r\n#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t nPRIV : 1;       /*!< bit:      0  Execution privilege in Thread mode */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t _reserved1 : 30; /*!< bit:  2..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n#define CONTROL_nPRIV_Pos 0U                             /*!< CONTROL: nPRIV Position */\r\n#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[24U];\r\n  __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[24U];\r\n  __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[24U];\r\n  __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[24U];\r\n  __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */\r\n  uint32_t       RESERVED4[56U];\r\n  __IOM uint8_t  IP[240U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */\r\n  uint32_t       RESERVED5[644U];\r\n  __OM uint32_t  STIR; /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */\r\n} NVIC_Type;\r\n\r\n/* Software Triggered Interrupt Register Definitions */\r\n#define NVIC_STIR_INTID_Pos 0U                                   /*!< STIR: INTLINESNUM Position */\r\n#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID;    /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;     /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n  __IOM uint32_t VTOR;     /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */\r\n  __IOM uint32_t AIRCR;    /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;      /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;      /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  __IOM uint8_t  SHP[12U]; /*!< Offset: 0x018 (R/W)  System Handlers Priority Registers (4-7, 8-11, 12-15) */\r\n  __IOM uint32_t SHCSR;    /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n  __IOM uint32_t CFSR;     /*!< Offset: 0x028 (R/W)  Configurable Fault Status Register */\r\n  __IOM uint32_t HFSR;     /*!< Offset: 0x02C (R/W)  HardFault Status Register */\r\n  __IOM uint32_t DFSR;     /*!< Offset: 0x030 (R/W)  Debug Fault Status Register */\r\n  __IOM uint32_t MMFAR;    /*!< Offset: 0x034 (R/W)  MemManage Fault Address Register */\r\n  __IOM uint32_t BFAR;     /*!< Offset: 0x038 (R/W)  BusFault Address Register */\r\n  __IOM uint32_t AFSR;     /*!< Offset: 0x03C (R/W)  Auxiliary Fault Status Register */\r\n  __IM uint32_t  PFR[2U];  /*!< Offset: 0x040 (R/ )  Processor Feature Register */\r\n  __IM uint32_t  DFR;      /*!< Offset: 0x048 (R/ )  Debug Feature Register */\r\n  __IM uint32_t  ADR;      /*!< Offset: 0x04C (R/ )  Auxiliary Feature Register */\r\n  __IM uint32_t  MMFR[4U]; /*!< Offset: 0x050 (R/ )  Memory Model Feature Register */\r\n  __IM uint32_t  ISAR[5U]; /*!< Offset: 0x060 (R/ )  Instruction Set Attributes Register */\r\n  uint32_t       RESERVED0[5U];\r\n  __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W)  Coprocessor Access Control Register */\r\n  uint32_t       RESERVED1[129U];\r\n  __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W)  Security Features Control Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_RETTOBASE_Pos 11U                             /*!< SCB ICSR: RETTOBASE Position */\r\n#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n/* SCB Vector Table Offset Register Definitions */\r\n#define SCB_VTOR_TBLBASE_Pos 29U                           /*!< SCB VTOR: TBLBASE Position */\r\n#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */\r\n\r\n#define SCB_VTOR_TBLOFF_Pos 7U                                  /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_PRIGROUP_Pos 8U                              /*!< SCB AIRCR: PRIGROUP Position */\r\n#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n#define SCB_AIRCR_VECTRESET_Pos 0U                                   /*!< SCB AIRCR: VECTRESET Position */\r\n#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_BFHFNMIGN_Pos 8U                             /*!< SCB CCR: BFHFNMIGN Position */\r\n#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */\r\n\r\n#define SCB_CCR_DIV_0_TRP_Pos 4U                             /*!< SCB CCR: DIV_0_TRP Position */\r\n#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n#define SCB_CCR_USERSETMPEND_Pos 1U                                /*!< SCB CCR: USERSETMPEND Position */\r\n#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */\r\n\r\n#define SCB_CCR_NONBASETHRDENA_Pos 0U                                      /*!< SCB CCR: NONBASETHRDENA Position */\r\n#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_USGFAULTENA_Pos 18U                                /*!< SCB SHCSR: USGFAULTENA Position */\r\n#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTENA_Pos 17U                                /*!< SCB SHCSR: BUSFAULTENA Position */\r\n#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTENA_Pos 16U                                /*!< SCB SHCSR: MEMFAULTENA Position */\r\n#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U                                   /*!< SCB SHCSR: BUSFAULTPENDED Position */\r\n#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U                                   /*!< SCB SHCSR: MEMFAULTPENDED Position */\r\n#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTPENDED_Pos 12U                                   /*!< SCB SHCSR: USGFAULTPENDED Position */\r\n#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_SYSTICKACT_Pos 11U                               /*!< SCB SHCSR: SYSTICKACT Position */\r\n#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */\r\n\r\n#define SCB_SHCSR_PENDSVACT_Pos 10U                              /*!< SCB SHCSR: PENDSVACT Position */\r\n#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */\r\n\r\n#define SCB_SHCSR_MONITORACT_Pos 8U                                /*!< SCB SHCSR: MONITORACT Position */\r\n#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */\r\n\r\n#define SCB_SHCSR_SVCALLACT_Pos 7U                               /*!< SCB SHCSR: SVCALLACT Position */\r\n#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTACT_Pos 3U                                 /*!< SCB SHCSR: USGFAULTACT Position */\r\n#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTACT_Pos 1U                                 /*!< SCB SHCSR: BUSFAULTACT Position */\r\n#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTACT_Pos 0U                                     /*!< SCB SHCSR: MEMFAULTACT Position */\r\n#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */\r\n\r\n/* SCB Configurable Fault Status Register Definitions */\r\n#define SCB_CFSR_USGFAULTSR_Pos 16U                                   /*!< SCB CFSR: Usage Fault Status Register Position */\r\n#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_BUSFAULTSR_Pos 8U                                  /*!< SCB CFSR: Bus Fault Status Register Position */\r\n#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_MEMFAULTSR_Pos 0U                                      /*!< SCB CFSR: Memory Manage Fault Status Register Position */\r\n#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */\r\n\r\n/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */\r\n#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */\r\n#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos)  /*!< SCB CFSR (MMFSR): MMARVALID Mask */\r\n\r\n#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */\r\n#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos)    /*!< SCB CFSR (MMFSR): MSTKERR Mask */\r\n\r\n#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */\r\n#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos)  /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */\r\n\r\n#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */\r\n#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos)   /*!< SCB CFSR (MMFSR): DACCVIOL Mask */\r\n\r\n#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U)   /*!< SCB CFSR (MMFSR): IACCVIOL Position */\r\n#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */\r\n\r\n/* BusFault Status Register (part of SCB Configurable Fault Status Register) */\r\n#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U)  /*!< SCB CFSR (BFSR): BFARVALID Position */\r\n#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */\r\n\r\n#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */\r\n#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos)   /*!< SCB CFSR (BFSR): STKERR Mask */\r\n\r\n#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */\r\n#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */\r\n\r\n#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U)    /*!< SCB CFSR (BFSR): IMPRECISERR Position */\r\n#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */\r\n\r\n#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U)  /*!< SCB CFSR (BFSR): PRECISERR Position */\r\n#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */\r\n\r\n#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */\r\n#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos)  /*!< SCB CFSR (BFSR): IBUSERR Mask */\r\n\r\n/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */\r\n#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U)  /*!< SCB CFSR (UFSR): DIVBYZERO Position */\r\n#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */\r\n\r\n#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U)  /*!< SCB CFSR (UFSR): UNALIGNED Position */\r\n#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */\r\n\r\n#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */\r\n#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos)     /*!< SCB CFSR (UFSR): NOCP Mask */\r\n\r\n#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */\r\n#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos)    /*!< SCB CFSR (UFSR): INVPC Mask */\r\n\r\n#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */\r\n#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */\r\n\r\n#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U)   /*!< SCB CFSR (UFSR): UNDEFINSTR Position */\r\n#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */\r\n\r\n/* SCB Hard Fault Status Register Definitions */\r\n#define SCB_HFSR_DEBUGEVT_Pos 31U                            /*!< SCB HFSR: DEBUGEVT Position */\r\n#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */\r\n\r\n#define SCB_HFSR_FORCED_Pos 30U                          /*!< SCB HFSR: FORCED Position */\r\n#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */\r\n\r\n#define SCB_HFSR_VECTTBL_Pos 1U                            /*!< SCB HFSR: VECTTBL Position */\r\n#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */\r\n\r\n/* SCB Debug Fault Status Register Definitions */\r\n#define SCB_DFSR_EXTERNAL_Pos 4U                             /*!< SCB DFSR: EXTERNAL Position */\r\n#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */\r\n\r\n#define SCB_DFSR_VCATCH_Pos 3U                           /*!< SCB DFSR: VCATCH Position */\r\n#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */\r\n\r\n#define SCB_DFSR_DWTTRAP_Pos 2U                            /*!< SCB DFSR: DWTTRAP Position */\r\n#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */\r\n\r\n#define SCB_DFSR_BKPT_Pos 1U                         /*!< SCB DFSR: BKPT Position */\r\n#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */\r\n\r\n#define SCB_DFSR_HALTED_Pos 0U                               /*!< SCB DFSR: HALTED Position */\r\n#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)\r\n  \\brief    Type definitions for the System Control and ID Register not in the SCB\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control and ID Register not in the SCB.\r\n */\r\ntypedef struct {\r\n  uint32_t      RESERVED0[1U];\r\n  __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */\r\n  uint32_t      RESERVED1[1U];\r\n} SCnSCB_Type;\r\n\r\n/* Interrupt Controller Type Register Definitions */\r\n#define SCnSCB_ICTR_INTLINESNUM_Pos 0U                                         /*!< ICTR: INTLINESNUM Position */\r\n#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */\r\n\r\n/*@} end of group CMSIS_SCnotSCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_ITM     Instrumentation Trace Macrocell (ITM)\r\n  \\brief    Type definitions for the Instrumentation Trace Macrocell (ITM)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Instrumentation Trace Macrocell Register (ITM).\r\n */\r\ntypedef struct {\r\n  __OM union {\r\n    __OM uint8_t  u8;  /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 8-bit */\r\n    __OM uint16_t u16; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 16-bit */\r\n    __OM uint32_t u32; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 32-bit */\r\n  } PORT[32U];         /*!< Offset: 0x000 ( /W)  ITM Stimulus Port Registers */\r\n  uint32_t       RESERVED0[864U];\r\n  __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W)  ITM Trace Enable Register */\r\n  uint32_t       RESERVED1[15U];\r\n  __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */\r\n  uint32_t       RESERVED2[15U];\r\n  __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */\r\n  uint32_t       RESERVED3[29U];\r\n  __OM uint32_t  IWR;  /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */\r\n  __IM uint32_t  IRR;  /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */\r\n  __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */\r\n  uint32_t       RESERVED4[43U];\r\n  __OM uint32_t  LAR; /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */\r\n  __IM uint32_t  LSR; /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */\r\n  uint32_t       RESERVED5[6U];\r\n  __IM uint32_t  PID4; /*!< Offset: 0xFD0 (R/ )  ITM Peripheral Identification Register #4 */\r\n  __IM uint32_t  PID5; /*!< Offset: 0xFD4 (R/ )  ITM Peripheral Identification Register #5 */\r\n  __IM uint32_t  PID6; /*!< Offset: 0xFD8 (R/ )  ITM Peripheral Identification Register #6 */\r\n  __IM uint32_t  PID7; /*!< Offset: 0xFDC (R/ )  ITM Peripheral Identification Register #7 */\r\n  __IM uint32_t  PID0; /*!< Offset: 0xFE0 (R/ )  ITM Peripheral Identification Register #0 */\r\n  __IM uint32_t  PID1; /*!< Offset: 0xFE4 (R/ )  ITM Peripheral Identification Register #1 */\r\n  __IM uint32_t  PID2; /*!< Offset: 0xFE8 (R/ )  ITM Peripheral Identification Register #2 */\r\n  __IM uint32_t  PID3; /*!< Offset: 0xFEC (R/ )  ITM Peripheral Identification Register #3 */\r\n  __IM uint32_t  CID0; /*!< Offset: 0xFF0 (R/ )  ITM Component  Identification Register #0 */\r\n  __IM uint32_t  CID1; /*!< Offset: 0xFF4 (R/ )  ITM Component  Identification Register #1 */\r\n  __IM uint32_t  CID2; /*!< Offset: 0xFF8 (R/ )  ITM Component  Identification Register #2 */\r\n  __IM uint32_t  CID3; /*!< Offset: 0xFFC (R/ )  ITM Component  Identification Register #3 */\r\n} ITM_Type;\r\n\r\n/* ITM Trace Privilege Register Definitions */\r\n#define ITM_TPR_PRIVMASK_Pos 0U                                  /*!< ITM TPR: PRIVMASK Position */\r\n#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */\r\n\r\n/* ITM Trace Control Register Definitions */\r\n#define ITM_TCR_BUSY_Pos 23U                       /*!< ITM TCR: BUSY Position */\r\n#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */\r\n\r\n#define ITM_TCR_TraceBusID_Pos 16U                                /*!< ITM TCR: ATBID Position */\r\n#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */\r\n\r\n#define ITM_TCR_GTSFREQ_Pos 10U                          /*!< ITM TCR: Global timestamp frequency Position */\r\n#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */\r\n\r\n#define ITM_TCR_TSPrescale_Pos 8U                              /*!< ITM TCR: TSPrescale Position */\r\n#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */\r\n\r\n#define ITM_TCR_SWOENA_Pos 4U                          /*!< ITM TCR: SWOENA Position */\r\n#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */\r\n\r\n#define ITM_TCR_DWTENA_Pos 3U                          /*!< ITM TCR: DWTENA Position */\r\n#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */\r\n\r\n#define ITM_TCR_SYNCENA_Pos 2U                           /*!< ITM TCR: SYNCENA Position */\r\n#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */\r\n\r\n#define ITM_TCR_TSENA_Pos 1U                         /*!< ITM TCR: TSENA Position */\r\n#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */\r\n\r\n#define ITM_TCR_ITMENA_Pos 0U                              /*!< ITM TCR: ITM Enable bit Position */\r\n#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */\r\n\r\n/* ITM Integration Write Register Definitions */\r\n#define ITM_IWR_ATVALIDM_Pos 0U                                /*!< ITM IWR: ATVALIDM Position */\r\n#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */\r\n\r\n/* ITM Integration Read Register Definitions */\r\n#define ITM_IRR_ATREADYM_Pos 0U                                /*!< ITM IRR: ATREADYM Position */\r\n#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */\r\n\r\n/* ITM Integration Mode Control Register Definitions */\r\n#define ITM_IMCR_INTEGRATION_Pos 0U                                    /*!< ITM IMCR: INTEGRATION Position */\r\n#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */\r\n\r\n/* ITM Lock Status Register Definitions */\r\n#define ITM_LSR_ByteAcc_Pos 2U                           /*!< ITM LSR: ByteAcc Position */\r\n#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */\r\n\r\n#define ITM_LSR_Access_Pos 1U                          /*!< ITM LSR: Access Position */\r\n#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */\r\n\r\n#define ITM_LSR_Present_Pos 0U                               /*!< ITM LSR: Present Position */\r\n#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_ITM */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)\r\n  \\brief    Type definitions for the Data Watchpoint and Trace (DWT)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Data Watchpoint and Trace Register (DWT).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;      /*!< Offset: 0x000 (R/W)  Control Register */\r\n  __IOM uint32_t CYCCNT;    /*!< Offset: 0x004 (R/W)  Cycle Count Register */\r\n  __IOM uint32_t CPICNT;    /*!< Offset: 0x008 (R/W)  CPI Count Register */\r\n  __IOM uint32_t EXCCNT;    /*!< Offset: 0x00C (R/W)  Exception Overhead Count Register */\r\n  __IOM uint32_t SLEEPCNT;  /*!< Offset: 0x010 (R/W)  Sleep Count Register */\r\n  __IOM uint32_t LSUCNT;    /*!< Offset: 0x014 (R/W)  LSU Count Register */\r\n  __IOM uint32_t FOLDCNT;   /*!< Offset: 0x018 (R/W)  Folded-instruction Count Register */\r\n  __IM uint32_t  PCSR;      /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */\r\n  __IOM uint32_t COMP0;     /*!< Offset: 0x020 (R/W)  Comparator Register 0 */\r\n  __IOM uint32_t MASK0;     /*!< Offset: 0x024 (R/W)  Mask Register 0 */\r\n  __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W)  Function Register 0 */\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t COMP1;     /*!< Offset: 0x030 (R/W)  Comparator Register 1 */\r\n  __IOM uint32_t MASK1;     /*!< Offset: 0x034 (R/W)  Mask Register 1 */\r\n  __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W)  Function Register 1 */\r\n  uint32_t       RESERVED1[1U];\r\n  __IOM uint32_t COMP2;     /*!< Offset: 0x040 (R/W)  Comparator Register 2 */\r\n  __IOM uint32_t MASK2;     /*!< Offset: 0x044 (R/W)  Mask Register 2 */\r\n  __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W)  Function Register 2 */\r\n  uint32_t       RESERVED2[1U];\r\n  __IOM uint32_t COMP3;     /*!< Offset: 0x050 (R/W)  Comparator Register 3 */\r\n  __IOM uint32_t MASK3;     /*!< Offset: 0x054 (R/W)  Mask Register 3 */\r\n  __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W)  Function Register 3 */\r\n} DWT_Type;\r\n\r\n/* DWT Control Register Definitions */\r\n#define DWT_CTRL_NUMCOMP_Pos 28U                             /*!< DWT CTRL: NUMCOMP Position */\r\n#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */\r\n\r\n#define DWT_CTRL_NOTRCPKT_Pos 27U                              /*!< DWT CTRL: NOTRCPKT Position */\r\n#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */\r\n\r\n#define DWT_CTRL_NOEXTTRIG_Pos 26U                               /*!< DWT CTRL: NOEXTTRIG Position */\r\n#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */\r\n\r\n#define DWT_CTRL_NOCYCCNT_Pos 25U                              /*!< DWT CTRL: NOCYCCNT Position */\r\n#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */\r\n\r\n#define DWT_CTRL_NOPRFCNT_Pos 24U                              /*!< DWT CTRL: NOPRFCNT Position */\r\n#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */\r\n\r\n#define DWT_CTRL_CYCEVTENA_Pos 22U                               /*!< DWT CTRL: CYCEVTENA Position */\r\n#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */\r\n\r\n#define DWT_CTRL_FOLDEVTENA_Pos 21U                                /*!< DWT CTRL: FOLDEVTENA Position */\r\n#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */\r\n\r\n#define DWT_CTRL_LSUEVTENA_Pos 20U                               /*!< DWT CTRL: LSUEVTENA Position */\r\n#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */\r\n\r\n#define DWT_CTRL_SLEEPEVTENA_Pos 19U                                 /*!< DWT CTRL: SLEEPEVTENA Position */\r\n#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCEVTENA_Pos 18U                               /*!< DWT CTRL: EXCEVTENA Position */\r\n#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */\r\n\r\n#define DWT_CTRL_CPIEVTENA_Pos 17U                               /*!< DWT CTRL: CPIEVTENA Position */\r\n#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCTRCENA_Pos 16U                               /*!< DWT CTRL: EXCTRCENA Position */\r\n#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */\r\n\r\n#define DWT_CTRL_PCSAMPLENA_Pos 12U                                /*!< DWT CTRL: PCSAMPLENA Position */\r\n#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */\r\n\r\n#define DWT_CTRL_SYNCTAP_Pos 10U                             /*!< DWT CTRL: SYNCTAP Position */\r\n#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */\r\n\r\n#define DWT_CTRL_CYCTAP_Pos 9U                             /*!< DWT CTRL: CYCTAP Position */\r\n#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */\r\n\r\n#define DWT_CTRL_POSTINIT_Pos 5U                               /*!< DWT CTRL: POSTINIT Position */\r\n#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */\r\n\r\n#define DWT_CTRL_POSTPRESET_Pos 1U                                 /*!< DWT CTRL: POSTPRESET Position */\r\n#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */\r\n\r\n#define DWT_CTRL_CYCCNTENA_Pos 0U                                    /*!< DWT CTRL: CYCCNTENA Position */\r\n#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */\r\n\r\n/* DWT CPI Count Register Definitions */\r\n#define DWT_CPICNT_CPICNT_Pos 0U                                    /*!< DWT CPICNT: CPICNT Position */\r\n#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */\r\n\r\n/* DWT Exception Overhead Count Register Definitions */\r\n#define DWT_EXCCNT_EXCCNT_Pos 0U                                    /*!< DWT EXCCNT: EXCCNT Position */\r\n#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */\r\n\r\n/* DWT Sleep Count Register Definitions */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U                                        /*!< DWT SLEEPCNT: SLEEPCNT Position */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */\r\n\r\n/* DWT LSU Count Register Definitions */\r\n#define DWT_LSUCNT_LSUCNT_Pos 0U                                    /*!< DWT LSUCNT: LSUCNT Position */\r\n#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */\r\n\r\n/* DWT Folded-instruction Count Register Definitions */\r\n#define DWT_FOLDCNT_FOLDCNT_Pos 0U                                      /*!< DWT FOLDCNT: FOLDCNT Position */\r\n#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */\r\n\r\n/* DWT Comparator Mask Register Definitions */\r\n#define DWT_MASK_MASK_Pos 0U                                /*!< DWT MASK: MASK Position */\r\n#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */\r\n\r\n/* DWT Comparator Function Register Definitions */\r\n#define DWT_FUNCTION_MATCHED_Pos 24U                                 /*!< DWT FUNCTION: MATCHED Position */\r\n#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR1_Pos 16U                                    /*!< DWT FUNCTION: DATAVADDR1 Position */\r\n#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR0_Pos 12U                                    /*!< DWT FUNCTION: DATAVADDR0 Position */\r\n#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVSIZE_Pos 10U                                   /*!< DWT FUNCTION: DATAVSIZE Position */\r\n#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */\r\n\r\n#define DWT_FUNCTION_LNK1ENA_Pos 9U                                  /*!< DWT FUNCTION: LNK1ENA Position */\r\n#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */\r\n\r\n#define DWT_FUNCTION_DATAVMATCH_Pos 8U                                     /*!< DWT FUNCTION: DATAVMATCH Position */\r\n#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */\r\n\r\n#define DWT_FUNCTION_CYCMATCH_Pos 7U                                   /*!< DWT FUNCTION: CYCMATCH Position */\r\n#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */\r\n\r\n#define DWT_FUNCTION_EMITRANGE_Pos 5U                                    /*!< DWT FUNCTION: EMITRANGE Position */\r\n#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */\r\n\r\n#define DWT_FUNCTION_FUNCTION_Pos 0U                                       /*!< DWT FUNCTION: FUNCTION Position */\r\n#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_DWT */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_TPI     Trace Port Interface (TPI)\r\n  \\brief    Type definitions for the Trace Port Interface (TPI)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Trace Port Interface Register (TPI).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  SSPSR; /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */\r\n  __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */\r\n  uint32_t       RESERVED0[2U];\r\n  __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */\r\n  uint32_t       RESERVED1[55U];\r\n  __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */\r\n  uint32_t       RESERVED2[131U];\r\n  __IM uint32_t  FFSR; /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */\r\n  __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */\r\n  __IM uint32_t  FSCR; /*!< Offset: 0x308 (R/ )  Formatter Synchronization Counter Register */\r\n  uint32_t       RESERVED3[759U];\r\n  __IM uint32_t  TRIGGER;   /*!< Offset: 0xEE8 (R/ )  TRIGGER Register */\r\n  __IM uint32_t  FIFO0;     /*!< Offset: 0xEEC (R/ )  Integration ETM Data */\r\n  __IM uint32_t  ITATBCTR2; /*!< Offset: 0xEF0 (R/ )  ITATBCTR2 */\r\n  uint32_t       RESERVED4[1U];\r\n  __IM uint32_t  ITATBCTR0; /*!< Offset: 0xEF8 (R/ )  ITATBCTR0 */\r\n  __IM uint32_t  FIFO1;     /*!< Offset: 0xEFC (R/ )  Integration ITM Data */\r\n  __IOM uint32_t ITCTRL;    /*!< Offset: 0xF00 (R/W)  Integration Mode Control */\r\n  uint32_t       RESERVED5[39U];\r\n  __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W)  Claim tag set */\r\n  __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W)  Claim tag clear */\r\n  uint32_t       RESERVED7[8U];\r\n  __IM uint32_t  DEVID;   /*!< Offset: 0xFC8 (R/ )  TPIU_DEVID */\r\n  __IM uint32_t  DEVTYPE; /*!< Offset: 0xFCC (R/ )  TPIU_DEVTYPE */\r\n} TPI_Type;\r\n\r\n/* TPI Asynchronous Clock Prescaler Register Definitions */\r\n#define TPI_ACPR_PRESCALER_Pos 0U                                       /*!< TPI ACPR: PRESCALER Position */\r\n#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */\r\n\r\n/* TPI Selected Pin Protocol Register Definitions */\r\n#define TPI_SPPR_TXMODE_Pos 0U                                 /*!< TPI SPPR: TXMODE Position */\r\n#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */\r\n\r\n/* TPI Formatter and Flush Status Register Definitions */\r\n#define TPI_FFSR_FtNonStop_Pos 3U                                /*!< TPI FFSR: FtNonStop Position */\r\n#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */\r\n\r\n#define TPI_FFSR_TCPresent_Pos 2U                                /*!< TPI FFSR: TCPresent Position */\r\n#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */\r\n\r\n#define TPI_FFSR_FtStopped_Pos 1U                                /*!< TPI FFSR: FtStopped Position */\r\n#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */\r\n\r\n#define TPI_FFSR_FlInProg_Pos 0U                                   /*!< TPI FFSR: FlInProg Position */\r\n#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */\r\n\r\n/* TPI Formatter and Flush Control Register Definitions */\r\n#define TPI_FFCR_TrigIn_Pos 8U                             /*!< TPI FFCR: TrigIn Position */\r\n#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */\r\n\r\n#define TPI_FFCR_EnFCont_Pos 1U                              /*!< TPI FFCR: EnFCont Position */\r\n#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */\r\n\r\n/* TPI TRIGGER Register Definitions */\r\n#define TPI_TRIGGER_TRIGGER_Pos 0U                                     /*!< TPI TRIGGER: TRIGGER Position */\r\n#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */\r\n\r\n/* TPI Integration ETM Data Register Definitions (FIFO0) */\r\n#define TPI_FIFO0_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO0: ITM_ATVALID Position */\r\n#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO0: ITM_bytecount Position */\r\n#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO0: ETM_ATVALID Position */\r\n#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO0: ETM_bytecount Position */\r\n#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM2_Pos 16U                            /*!< TPI FIFO0: ETM2 Position */\r\n#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */\r\n\r\n#define TPI_FIFO0_ETM1_Pos 8U                             /*!< TPI FIFO0: ETM1 Position */\r\n#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */\r\n\r\n#define TPI_FIFO0_ETM0_Pos 0U                                 /*!< TPI FIFO0: ETM0 Position */\r\n#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */\r\n\r\n/* TPI ITATBCTR2 Register Definitions */\r\n#define TPI_ITATBCTR2_ATREADY2_Pos 0U                                        /*!< TPI ITATBCTR2: ATREADY2 Position */\r\n#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */\r\n\r\n#define TPI_ITATBCTR2_ATREADY1_Pos 0U                                        /*!< TPI ITATBCTR2: ATREADY1 Position */\r\n#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */\r\n\r\n/* TPI Integration ITM Data Register Definitions (FIFO1) */\r\n#define TPI_FIFO1_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO1: ITM_ATVALID Position */\r\n#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO1: ITM_bytecount Position */\r\n#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO1: ETM_ATVALID Position */\r\n#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO1: ETM_bytecount Position */\r\n#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ITM2_Pos 16U                            /*!< TPI FIFO1: ITM2 Position */\r\n#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */\r\n\r\n#define TPI_FIFO1_ITM1_Pos 8U                             /*!< TPI FIFO1: ITM1 Position */\r\n#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */\r\n\r\n#define TPI_FIFO1_ITM0_Pos 0U                                 /*!< TPI FIFO1: ITM0 Position */\r\n#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */\r\n\r\n/* TPI ITATBCTR0 Register Definitions */\r\n#define TPI_ITATBCTR0_ATREADY2_Pos 0U                                        /*!< TPI ITATBCTR0: ATREADY2 Position */\r\n#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */\r\n\r\n#define TPI_ITATBCTR0_ATREADY1_Pos 0U                                        /*!< TPI ITATBCTR0: ATREADY1 Position */\r\n#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */\r\n\r\n/* TPI Integration Mode Control Register Definitions */\r\n#define TPI_ITCTRL_Mode_Pos 0U                                 /*!< TPI ITCTRL: Mode Position */\r\n#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */\r\n\r\n/* TPI DEVID Register Definitions */\r\n#define TPI_DEVID_NRZVALID_Pos 11U                               /*!< TPI DEVID: NRZVALID Position */\r\n#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */\r\n\r\n#define TPI_DEVID_MANCVALID_Pos 10U                                /*!< TPI DEVID: MANCVALID Position */\r\n#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */\r\n\r\n#define TPI_DEVID_PTINVALID_Pos 9U                                 /*!< TPI DEVID: PTINVALID Position */\r\n#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */\r\n\r\n#define TPI_DEVID_MinBufSz_Pos 6U                                /*!< TPI DEVID: MinBufSz Position */\r\n#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */\r\n\r\n#define TPI_DEVID_AsynClkIn_Pos 5U                                 /*!< TPI DEVID: AsynClkIn Position */\r\n#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */\r\n\r\n#define TPI_DEVID_NrTraceInput_Pos 0U                                         /*!< TPI DEVID: NrTraceInput Position */\r\n#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */\r\n\r\n/* TPI DEVTYPE Register Definitions */\r\n#define TPI_DEVTYPE_SubType_Pos 4U                                     /*!< TPI DEVTYPE: SubType Position */\r\n#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */\r\n\r\n#define TPI_DEVTYPE_MajorType_Pos 0U                                   /*!< TPI DEVTYPE: MajorType Position */\r\n#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_TPI */\r\n\r\n#if defined(__MPU_PRESENT) && (__MPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_MPU     Memory Protection Unit (MPU)\r\n  \\brief    Type definitions for the Memory Protection Unit (MPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Memory Protection Unit (MPU).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  TYPE;    /*!< Offset: 0x000 (R/ )  MPU Type Register */\r\n  __IOM uint32_t CTRL;    /*!< Offset: 0x004 (R/W)  MPU Control Register */\r\n  __IOM uint32_t RNR;     /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */\r\n  __IOM uint32_t RBAR;    /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */\r\n  __IOM uint32_t RASR;    /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W)  MPU Alias 1 Region Base Address Register */\r\n  __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W)  MPU Alias 1 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W)  MPU Alias 2 Region Base Address Register */\r\n  __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W)  MPU Alias 2 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W)  MPU Alias 3 Region Base Address Register */\r\n  __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W)  MPU Alias 3 Region Attribute and Size Register */\r\n} MPU_Type;\r\n\r\n/* MPU Type Register Definitions */\r\n#define MPU_TYPE_IREGION_Pos 16U                              /*!< MPU TYPE: IREGION Position */\r\n#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */\r\n\r\n#define MPU_TYPE_DREGION_Pos 8U                               /*!< MPU TYPE: DREGION Position */\r\n#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */\r\n\r\n#define MPU_TYPE_SEPARATE_Pos 0U                                 /*!< MPU TYPE: SEPARATE Position */\r\n#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */\r\n\r\n/* MPU Control Register Definitions */\r\n#define MPU_CTRL_PRIVDEFENA_Pos 2U                               /*!< MPU CTRL: PRIVDEFENA Position */\r\n#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */\r\n\r\n#define MPU_CTRL_HFNMIENA_Pos 1U                             /*!< MPU CTRL: HFNMIENA Position */\r\n#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */\r\n\r\n#define MPU_CTRL_ENABLE_Pos 0U                               /*!< MPU CTRL: ENABLE Position */\r\n#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */\r\n\r\n/* MPU Region Number Register Definitions */\r\n#define MPU_RNR_REGION_Pos 0U                                 /*!< MPU RNR: REGION Position */\r\n#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */\r\n\r\n/* MPU Region Base Address Register Definitions */\r\n#define MPU_RBAR_ADDR_Pos 5U                                 /*!< MPU RBAR: ADDR Position */\r\n#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */\r\n\r\n#define MPU_RBAR_VALID_Pos 4U                          /*!< MPU RBAR: VALID Position */\r\n#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */\r\n\r\n#define MPU_RBAR_REGION_Pos 0U                                 /*!< MPU RBAR: REGION Position */\r\n#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */\r\n\r\n/* MPU Region Attribute and Size Register Definitions */\r\n#define MPU_RASR_ATTRS_Pos 16U                              /*!< MPU RASR: MPU Region Attribute field Position */\r\n#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */\r\n\r\n#define MPU_RASR_XN_Pos 28U                      /*!< MPU RASR: ATTRS.XN Position */\r\n#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */\r\n\r\n#define MPU_RASR_AP_Pos 24U                        /*!< MPU RASR: ATTRS.AP Position */\r\n#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */\r\n\r\n#define MPU_RASR_TEX_Pos 19U                         /*!< MPU RASR: ATTRS.TEX Position */\r\n#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */\r\n\r\n#define MPU_RASR_S_Pos 18U                     /*!< MPU RASR: ATTRS.S Position */\r\n#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */\r\n\r\n#define MPU_RASR_C_Pos 17U                     /*!< MPU RASR: ATTRS.C Position */\r\n#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */\r\n\r\n#define MPU_RASR_B_Pos 16U                     /*!< MPU RASR: ATTRS.B Position */\r\n#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */\r\n\r\n#define MPU_RASR_SRD_Pos 8U                           /*!< MPU RASR: Sub-Region Disable Position */\r\n#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */\r\n\r\n#define MPU_RASR_SIZE_Pos 1U                            /*!< MPU RASR: Region Size Field Position */\r\n#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */\r\n\r\n#define MPU_RASR_ENABLE_Pos 0U                               /*!< MPU RASR: Region enable bit Position */\r\n#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */\r\n\r\n/*@} end of group CMSIS_MPU */\r\n#endif\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    Type definitions for the Core Debug Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Core Debug Register (CoreDebug).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */\r\n  __OM uint32_t  DCRSR; /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */\r\n  __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */\r\n  __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */\r\n} CoreDebug_Type;\r\n\r\n/* Debug Halting Control and Status Register Definitions */\r\n#define CoreDebug_DHCSR_DBGKEY_Pos 16U                                      /*!< CoreDebug DHCSR: DBGKEY Position */\r\n#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U                                     /*!< CoreDebug DHCSR: S_RESET_ST Position */\r\n#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U                                      /*!< CoreDebug DHCSR: S_RETIRE_ST Position */\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U                                   /*!< CoreDebug DHCSR: S_LOCKUP Position */\r\n#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_SLEEP_Pos 18U                                  /*!< CoreDebug DHCSR: S_SLEEP Position */\r\n#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_HALT_Pos 17U                                 /*!< CoreDebug DHCSR: S_HALT Position */\r\n#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_S_REGRDY_Pos 16U                                   /*!< CoreDebug DHCSR: S_REGRDY Position */\r\n#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */\r\n\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U                                       /*!< CoreDebug DHCSR: C_SNAPSTALL Position */\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */\r\n\r\n#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U                                      /*!< CoreDebug DHCSR: C_MASKINTS Position */\r\n#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */\r\n\r\n#define CoreDebug_DHCSR_C_STEP_Pos 2U                                  /*!< CoreDebug DHCSR: C_STEP Position */\r\n#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */\r\n\r\n#define CoreDebug_DHCSR_C_HALT_Pos 1U                                  /*!< CoreDebug DHCSR: C_HALT Position */\r\n#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U                                         /*!< CoreDebug DHCSR: C_DEBUGEN Position */\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */\r\n\r\n/* Debug Core Register Selector Register Definitions */\r\n#define CoreDebug_DCRSR_REGWnR_Pos 16U                                 /*!< CoreDebug DCRSR: REGWnR Position */\r\n#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */\r\n\r\n#define CoreDebug_DCRSR_REGSEL_Pos 0U                                         /*!< CoreDebug DCRSR: REGSEL Position */\r\n#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */\r\n\r\n/* Debug Exception and Monitor Control Register Definitions */\r\n#define CoreDebug_DEMCR_TRCENA_Pos 24U                                 /*!< CoreDebug DEMCR: TRCENA Position */\r\n#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_REQ_Pos 19U                                  /*!< CoreDebug DEMCR: MON_REQ Position */\r\n#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_STEP_Pos 18U                                   /*!< CoreDebug DEMCR: MON_STEP Position */\r\n#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_PEND_Pos 17U                                   /*!< CoreDebug DEMCR: MON_PEND Position */\r\n#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_EN_Pos 16U                                 /*!< CoreDebug DEMCR: MON_EN Position */\r\n#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U                                     /*!< CoreDebug DEMCR: VC_HARDERR Position */\r\n#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_INTERR_Pos 9U                                     /*!< CoreDebug DEMCR: VC_INTERR Position */\r\n#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U                                     /*!< CoreDebug DEMCR: VC_BUSERR Position */\r\n#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_STATERR_Pos 7U                                      /*!< CoreDebug DEMCR: VC_STATERR Position */\r\n#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U                                     /*!< CoreDebug DEMCR: VC_CHKERR Position */\r\n#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U                                      /*!< CoreDebug DEMCR: VC_NOCPERR Position */\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_MMERR_Pos 4U                                    /*!< CoreDebug DEMCR: VC_MMERR Position */\r\n#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */\r\n#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */\r\n\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) (((uint32_t)(value) << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register. This parameter is interpreted as an uint32_t type.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) (((uint32_t)(value)&field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of Core Hardware */\r\n#define SCS_BASE       (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define ITM_BASE       (0xE0000000UL)        /*!< ITM Base Address */\r\n#define DWT_BASE       (0xE0001000UL)        /*!< DWT Base Address */\r\n#define TPI_BASE       (0xE0040000UL)        /*!< TPI Base Address */\r\n#define CoreDebug_BASE (0xE000EDF0UL)        /*!< Core Debug Base Address */\r\n#define SysTick_BASE   (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE      (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE       (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCnSCB    ((SCnSCB_Type *)SCS_BASE)          /*!< System control Register not in SCB */\r\n#define SCB       ((SCB_Type *)SCB_BASE)             /*!< SCB configuration struct */\r\n#define SysTick   ((SysTick_Type *)SysTick_BASE)     /*!< SysTick configuration struct */\r\n#define NVIC      ((NVIC_Type *)NVIC_BASE)           /*!< NVIC configuration struct */\r\n#define ITM       ((ITM_Type *)ITM_BASE)             /*!< ITM configuration struct */\r\n#define DWT       ((DWT_Type *)DWT_BASE)             /*!< DWT configuration struct */\r\n#define TPI       ((TPI_Type *)TPI_BASE)             /*!< TPI configuration struct */\r\n#define CoreDebug ((CoreDebug_Type *)CoreDebug_BASE) /*!< Core Debug configuration struct */\r\n\r\n#if defined(__MPU_PRESENT) && (__MPU_PRESENT == 1U)\r\n#define MPU_BASE (SCS_BASE + 0x0D90UL)  /*!< Memory Protection Unit */\r\n#define MPU      ((MPU_Type *)MPU_BASE) /*!< Memory Protection Unit */\r\n#endif\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Debug Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n#ifdef CMSIS_NVIC_VIRTUAL\r\n#ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE\r\n#define CMSIS_NVIC_VIRTUAL_HEADER_FILE \"cmsis_nvic_virtual.h\"\r\n#endif\r\n#include CMSIS_NVIC_VIRTUAL_HEADER_FILE\r\n#else\r\n#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping\r\n#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping\r\n#define NVIC_EnableIRQ           __NVIC_EnableIRQ\r\n#define NVIC_GetEnableIRQ        __NVIC_GetEnableIRQ\r\n#define NVIC_DisableIRQ          __NVIC_DisableIRQ\r\n#define NVIC_GetPendingIRQ       __NVIC_GetPendingIRQ\r\n#define NVIC_SetPendingIRQ       __NVIC_SetPendingIRQ\r\n#define NVIC_ClearPendingIRQ     __NVIC_ClearPendingIRQ\r\n#define NVIC_GetActive           __NVIC_GetActive\r\n#define NVIC_SetPriority         __NVIC_SetPriority\r\n#define NVIC_GetPriority         __NVIC_GetPriority\r\n#define NVIC_SystemReset         __NVIC_SystemReset\r\n#endif /* CMSIS_NVIC_VIRTUAL */\r\n\r\n#ifdef CMSIS_VECTAB_VIRTUAL\r\n#ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE\r\n#define CMSIS_VECTAB_VIRTUAL_HEADER_FILE \"cmsis_vectab_virtual.h\"\r\n#endif\r\n#include CMSIS_VECTAB_VIRTUAL_HEADER_FILE\r\n#else\r\n#define NVIC_SetVector __NVIC_SetVector\r\n#define NVIC_GetVector __NVIC_GetVector\r\n#endif /* (CMSIS_VECTAB_VIRTUAL) */\r\n\r\n#define NVIC_USER_IRQ_OFFSET 16\r\n\r\n/* The following EXC_RETURN values are saved the LR on exception entry */\r\n#define EXC_RETURN_HANDLER    (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return                               */\r\n#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return                                */\r\n#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return                                */\r\n\r\n/**\r\n  \\brief   Set Priority Grouping\r\n  \\details Sets the priority grouping field using the required unlock sequence.\r\n           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.\r\n           Only values from 0..7 are used.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]      PriorityGroup  Priority grouping field.\r\n */\r\n__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) {\r\n  uint32_t reg_value;\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n\r\n  reg_value = SCB->AIRCR;                                                                             /* read old register configuration    */\r\n  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk));                         /* clear bits to change               */\r\n  reg_value  = (reg_value | ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (PriorityGroupTmp << 8U)); /* Insert write key and priorty group */\r\n  SCB->AIRCR = reg_value;\r\n}\r\n\r\n/**\r\n  \\brief   Get Priority Grouping\r\n  \\details Reads the priority grouping field from the NVIC Interrupt Controller.\r\n  \\return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).\r\n */\r\n__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) { return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); }\r\n\r\n/**\r\n  \\brief   Enable Interrupt\r\n  \\details Enables a device specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Enable status\r\n  \\details Returns a device specific interrupt enable status from the NVIC interrupt controller.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\return             0  Interrupt is not enabled.\r\n  \\return             1  Interrupt is enabled.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    return ((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));\r\n  } else {\r\n    return (0U);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Disable Interrupt\r\n  \\details Disables a device specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));\r\n    __DSB();\r\n    __ISB();\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    return ((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));\r\n  } else {\r\n    return (0U);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of a device specific interrupt in the NVIC pending register.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of a device specific interrupt in the NVIC pending register.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Active Interrupt\r\n  \\details Reads the active register in the NVIC and returns the active bit for the device specific interrupt.\r\n  \\param [in]      IRQn  Device specific interrupt number.\r\n  \\return             0  Interrupt status is not active.\r\n  \\return             1  Interrupt status is active.\r\n  \\note    IRQn must not be negative.\r\n */\r\n__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    return ((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));\r\n  } else {\r\n    return (0U);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of a device specific interrupt or a processor exception.\r\n           The interrupt number can be positive to specify a device specific interrupt,\r\n           or negative to specify a processor exception.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n  \\note    The priority cannot be set for every processor exception.\r\n */\r\n__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  } else {\r\n    SCB->SHP[(((uint32_t)IRQn) & 0xFUL) - 4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of a device specific interrupt or a processor exception.\r\n           The interrupt number can be positive to specify a device specific interrupt,\r\n           or negative to specify a processor exception.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) >= 0) {\r\n    return (((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return (((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL) - 4UL] >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Encode Priority\r\n  \\details Encodes the priority for an interrupt with the given priority group,\r\n           preemptive priority value, and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [in]   PreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [in]       SubPriority  Subpriority value (starting from 0).\r\n  \\return                        Encoded priority. Value can be used in the function \\ref NVIC_SetPriority().\r\n */\r\n__STATIC_INLINE uint32_t NVIC_EncodePriority(uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  return (((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | ((SubPriority & (uint32_t)((1UL << (SubPriorityBits)) - 1UL))));\r\n}\r\n\r\n/**\r\n  \\brief   Decode Priority\r\n  \\details Decodes an interrupt priority value with a given priority group to\r\n           preemptive priority value and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.\r\n  \\param [in]         Priority   Priority value, which can be retrieved with the function \\ref NVIC_GetPriority().\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [out] pPreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [out]     pSubPriority  Subpriority value (starting from 0).\r\n */\r\n__STATIC_INLINE void NVIC_DecodePriority(uint32_t Priority, uint32_t PriorityGroup, uint32_t *const pPreemptPriority, uint32_t *const pSubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);\r\n  *pSubPriority     = (Priority) & (uint32_t)((1UL << (SubPriorityBits)) - 1UL);\r\n}\r\n\r\n/**\r\n  \\brief   Set Interrupt Vector\r\n  \\details Sets an interrupt vector in SRAM based interrupt vector table.\r\n           The interrupt number can be positive to specify a device specific interrupt,\r\n           or negative to specify a processor exception.\r\n           VTOR must been relocated to SRAM before.\r\n  \\param [in]   IRQn      Interrupt number\r\n  \\param [in]   vector    Address of interrupt handler function\r\n */\r\n__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) {\r\n  uint32_t *vectors                             = (uint32_t *)SCB->VTOR;\r\n  vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Vector\r\n  \\details Reads an interrupt vector from interrupt vector table.\r\n           The interrupt number can be positive to specify a device specific interrupt,\r\n           or negative to specify a processor exception.\r\n  \\param [in]   IRQn      Interrupt number.\r\n  \\return                 Address of interrupt handler function\r\n */\r\n__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) {\r\n  uint32_t *vectors = (uint32_t *)SCB->VTOR;\r\n  return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) {\r\n  __DSB();                                                                                                                         /* Ensure all outstanding memory accesses included\r\n                                                                                                                                      buffered write are completed before reset */\r\n  SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */\r\n  __DSB();                                                                                                                         /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##########################  FPU functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_FpuFunctions FPU Functions\r\n  \\brief    Function that provides FPU type.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   get FPU type\r\n  \\details returns the FPU type\r\n  \\returns\r\n   - \\b  0: No FPU\r\n   - \\b  1: Single precision FPU\r\n   - \\b  2: Double + Single precision FPU\r\n */\r\n__STATIC_INLINE uint32_t SCB_GetFPUType(void) { return 0U; /* No FPU */ }\r\n\r\n/*@} end of CMSIS_Core_FpuFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if defined(__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n/* ##################################### Debug In/Output function ########################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_core_DebugFunctions ITM Functions\r\n  \\brief    Functions that access the ITM debug interface.\r\n  @{\r\n */\r\n\r\nextern volatile int32_t ITM_RxBuffer;             /*!< External variable to receive characters. */\r\n#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \\ref ITM_RxBuffer is ready for next character. */\r\n\r\n/**\r\n  \\brief   ITM Send Character\r\n  \\details Transmits a character via the ITM channel 0, and\r\n           \\li Just returns when no debugger is connected that has booked the output.\r\n           \\li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.\r\n  \\param [in]     ch  Character to transmit.\r\n  \\returns            Character to transmit.\r\n */\r\n__STATIC_INLINE uint32_t ITM_SendChar(uint32_t ch) {\r\n  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */\r\n      ((ITM->TER & 1UL) != 0UL))                  /* ITM Port #0 enabled */\r\n  {\r\n    while (ITM->PORT[0U].u32 == 0UL) {\r\n      __NOP();\r\n    }\r\n    ITM->PORT[0U].u8 = (uint8_t)ch;\r\n  }\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Receive Character\r\n  \\details Inputs a character via the external variable \\ref ITM_RxBuffer.\r\n  \\return             Received character.\r\n  \\return         -1  No character pending.\r\n */\r\n__STATIC_INLINE int32_t ITM_ReceiveChar(void) {\r\n  int32_t ch = -1; /* no character available */\r\n\r\n  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) {\r\n    ch           = ITM_RxBuffer;\r\n    ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */\r\n  }\r\n\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Check Character\r\n  \\details Checks whether a character is pending for reading in the variable \\ref ITM_RxBuffer.\r\n  \\return          0  No character available.\r\n  \\return          1  Character available.\r\n */\r\n__STATIC_INLINE int32_t ITM_CheckChar(void) {\r\n\r\n  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {\r\n    return (0); /* no character available */\r\n  } else {\r\n    return (1); /*    character available */\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_core_DebugFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_SC300_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/CMSIS/Include/tz_context.h",
    "content": "/******************************************************************************\r\n * @file     tz_context.h\r\n * @brief    Context Management for Armv8-M TrustZone\r\n * @version  V1.0.1\r\n * @date     10. January 2018\r\n ******************************************************************************/\r\n/*\r\n * Copyright (c) 2017-2018 Arm Limited. All rights reserved.\r\n *\r\n * SPDX-License-Identifier: Apache-2.0\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the License); you may\r\n * not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__clang__)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef TZ_CONTEXT_H\r\n#define TZ_CONTEXT_H\r\n\r\n#include <stdint.h>\r\n\r\n#ifndef TZ_MODULEID_T\r\n#define TZ_MODULEID_T\r\n/// \\details Data type that identifies secure software modules called by a process.\r\ntypedef uint32_t TZ_ModuleId_t;\r\n#endif\r\n\r\n/// \\details TZ Memory ID identifies an allocated memory slot.\r\ntypedef uint32_t TZ_MemoryId_t;\r\n\r\n/// Initialize secure context memory system\r\n/// \\return execution status (1: success, 0: error)\r\nuint32_t TZ_InitContextSystem_S(void);\r\n\r\n/// Allocate context memory for calling secure software modules in TrustZone\r\n/// \\param[in]  module   identifies software modules called from non-secure mode\r\n/// \\return value != 0 id TrustZone memory slot identifier\r\n/// \\return value 0    no memory available or internal error\r\nTZ_MemoryId_t TZ_AllocModuleContext_S(TZ_ModuleId_t module);\r\n\r\n/// Free context memory that was previously allocated with \\ref TZ_AllocModuleContext_S\r\n/// \\param[in]  id  TrustZone memory slot identifier\r\n/// \\return execution status (1: success, 0: error)\r\nuint32_t TZ_FreeModuleContext_S(TZ_MemoryId_t id);\r\n\r\n/// Load secure context (called on RTOS thread context switch)\r\n/// \\param[in]  id  TrustZone memory slot identifier\r\n/// \\return execution status (1: success, 0: error)\r\nuint32_t TZ_LoadContext_S(TZ_MemoryId_t id);\r\n\r\n/// Store secure context (called on RTOS thread context switch)\r\n/// \\param[in]  id  TrustZone memory slot identifier\r\n/// \\return execution status (1: success, 0: error)\r\nuint32_t TZ_StoreContext_S(TZ_MemoryId_t id);\r\n\r\n#endif // TZ_CONTEXT_H\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32_hal_legacy.h\r\n * @author  MCD Application Team\r\n * @brief   This file contains aliases definition for the STM32Cube HAL constants\r\n *          macros and functions maintained for legacy purpose.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef STM32_HAL_LEGACY\r\n#define STM32_HAL_LEGACY\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n/* Exported types ------------------------------------------------------------*/\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_AES_Aliased_Defines HAL CRYP Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define AES_FLAG_RDERR      CRYP_FLAG_RDERR\r\n#define AES_FLAG_WRERR      CRYP_FLAG_WRERR\r\n#define AES_CLEARFLAG_CCF   CRYP_CLEARFLAG_CCF\r\n#define AES_CLEARFLAG_RDERR CRYP_CLEARFLAG_RDERR\r\n#define AES_CLEARFLAG_WRERR CRYP_CLEARFLAG_WRERR\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define ADC_RESOLUTION12b                   ADC_RESOLUTION_12B\r\n#define ADC_RESOLUTION10b                   ADC_RESOLUTION_10B\r\n#define ADC_RESOLUTION8b                    ADC_RESOLUTION_8B\r\n#define ADC_RESOLUTION6b                    ADC_RESOLUTION_6B\r\n#define OVR_DATA_OVERWRITTEN                ADC_OVR_DATA_OVERWRITTEN\r\n#define OVR_DATA_PRESERVED                  ADC_OVR_DATA_PRESERVED\r\n#define EOC_SINGLE_CONV                     ADC_EOC_SINGLE_CONV\r\n#define EOC_SEQ_CONV                        ADC_EOC_SEQ_CONV\r\n#define EOC_SINGLE_SEQ_CONV                 ADC_EOC_SINGLE_SEQ_CONV\r\n#define REGULAR_GROUP                       ADC_REGULAR_GROUP\r\n#define INJECTED_GROUP                      ADC_INJECTED_GROUP\r\n#define REGULAR_INJECTED_GROUP              ADC_REGULAR_INJECTED_GROUP\r\n#define AWD_EVENT                           ADC_AWD_EVENT\r\n#define AWD1_EVENT                          ADC_AWD1_EVENT\r\n#define AWD2_EVENT                          ADC_AWD2_EVENT\r\n#define AWD3_EVENT                          ADC_AWD3_EVENT\r\n#define OVR_EVENT                           ADC_OVR_EVENT\r\n#define JQOVF_EVENT                         ADC_JQOVF_EVENT\r\n#define ALL_CHANNELS                        ADC_ALL_CHANNELS\r\n#define REGULAR_CHANNELS                    ADC_REGULAR_CHANNELS\r\n#define INJECTED_CHANNELS                   ADC_INJECTED_CHANNELS\r\n#define SYSCFG_FLAG_SENSOR_ADC              ADC_FLAG_SENSOR\r\n#define SYSCFG_FLAG_VREF_ADC                ADC_FLAG_VREFINT\r\n#define ADC_CLOCKPRESCALER_PCLK_DIV1        ADC_CLOCK_SYNC_PCLK_DIV1\r\n#define ADC_CLOCKPRESCALER_PCLK_DIV2        ADC_CLOCK_SYNC_PCLK_DIV2\r\n#define ADC_CLOCKPRESCALER_PCLK_DIV4        ADC_CLOCK_SYNC_PCLK_DIV4\r\n#define ADC_CLOCKPRESCALER_PCLK_DIV6        ADC_CLOCK_SYNC_PCLK_DIV6\r\n#define ADC_CLOCKPRESCALER_PCLK_DIV8        ADC_CLOCK_SYNC_PCLK_DIV8\r\n#define ADC_EXTERNALTRIG0_T6_TRGO           ADC_EXTERNALTRIGCONV_T6_TRGO\r\n#define ADC_EXTERNALTRIG1_T21_CC2           ADC_EXTERNALTRIGCONV_T21_CC2\r\n#define ADC_EXTERNALTRIG2_T2_TRGO           ADC_EXTERNALTRIGCONV_T2_TRGO\r\n#define ADC_EXTERNALTRIG3_T2_CC4            ADC_EXTERNALTRIGCONV_T2_CC4\r\n#define ADC_EXTERNALTRIG4_T22_TRGO          ADC_EXTERNALTRIGCONV_T22_TRGO\r\n#define ADC_EXTERNALTRIG7_EXT_IT11          ADC_EXTERNALTRIGCONV_EXT_IT11\r\n#define ADC_CLOCK_ASYNC                     ADC_CLOCK_ASYNC_DIV1\r\n#define ADC_EXTERNALTRIG_EDGE_NONE          ADC_EXTERNALTRIGCONVEDGE_NONE\r\n#define ADC_EXTERNALTRIG_EDGE_RISING        ADC_EXTERNALTRIGCONVEDGE_RISING\r\n#define ADC_EXTERNALTRIG_EDGE_FALLING       ADC_EXTERNALTRIGCONVEDGE_FALLING\r\n#define ADC_EXTERNALTRIG_EDGE_RISINGFALLING ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING\r\n#define ADC_SAMPLETIME_2CYCLE_5             ADC_SAMPLETIME_2CYCLES_5\r\n\r\n#define HAL_ADC_STATE_BUSY_REG HAL_ADC_STATE_REG_BUSY\r\n#define HAL_ADC_STATE_BUSY_INJ HAL_ADC_STATE_INJ_BUSY\r\n#define HAL_ADC_STATE_EOC_REG  HAL_ADC_STATE_REG_EOC\r\n#define HAL_ADC_STATE_EOC_INJ  HAL_ADC_STATE_INJ_EOC\r\n#define HAL_ADC_STATE_ERROR    HAL_ADC_STATE_ERROR_INTERNAL\r\n#define HAL_ADC_STATE_BUSY     HAL_ADC_STATE_BUSY_INTERNAL\r\n#define HAL_ADC_STATE_AWD      HAL_ADC_STATE_AWD1\r\n\r\n#if defined(STM32H7)\r\n#define ADC_CHANNEL_VBAT_DIV4 ADC_CHANNEL_VBAT\r\n#endif /* STM32H7 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define COMP_WINDOWMODE_DISABLED   COMP_WINDOWMODE_DISABLE\r\n#define COMP_WINDOWMODE_ENABLED    COMP_WINDOWMODE_ENABLE\r\n#define COMP_EXTI_LINE_COMP1_EVENT COMP_EXTI_LINE_COMP1\r\n#define COMP_EXTI_LINE_COMP2_EVENT COMP_EXTI_LINE_COMP2\r\n#define COMP_EXTI_LINE_COMP3_EVENT COMP_EXTI_LINE_COMP3\r\n#define COMP_EXTI_LINE_COMP4_EVENT COMP_EXTI_LINE_COMP4\r\n#define COMP_EXTI_LINE_COMP5_EVENT COMP_EXTI_LINE_COMP5\r\n#define COMP_EXTI_LINE_COMP6_EVENT COMP_EXTI_LINE_COMP6\r\n#define COMP_EXTI_LINE_COMP7_EVENT COMP_EXTI_LINE_COMP7\r\n#if defined(STM32L0)\r\n#define COMP_LPTIMCONNECTION_ENABLED ((uint32_t)0x00000003U) /*!< COMPX output generic naming: connected to LPTIM input 1 for COMP1, LPTIM input 2 for COMP2 */\r\n#endif\r\n#define COMP_OUTPUT_COMP6TIM2OCREFCLR COMP_OUTPUT_COMP6_TIM2OCREFCLR\r\n#if defined(STM32F373xC) || defined(STM32F378xx)\r\n#define COMP_OUTPUT_TIM3IC1      COMP_OUTPUT_COMP1_TIM3IC1\r\n#define COMP_OUTPUT_TIM3OCREFCLR COMP_OUTPUT_COMP1_TIM3OCREFCLR\r\n#endif /* STM32F373xC || STM32F378xx */\r\n\r\n#if defined(STM32L0) || defined(STM32L4)\r\n#define COMP_WINDOWMODE_ENABLE COMP_WINDOWMODE_COMP1_INPUT_PLUS_COMMON\r\n\r\n#define COMP_NONINVERTINGINPUT_IO1 COMP_INPUT_PLUS_IO1\r\n#define COMP_NONINVERTINGINPUT_IO2 COMP_INPUT_PLUS_IO2\r\n#define COMP_NONINVERTINGINPUT_IO3 COMP_INPUT_PLUS_IO3\r\n#define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4\r\n#define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5\r\n#define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6\r\n\r\n#define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT\r\n#define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT\r\n#define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT\r\n#define COMP_INVERTINGINPUT_VREFINT    COMP_INPUT_MINUS_VREFINT\r\n#define COMP_INVERTINGINPUT_DAC1_CH1   COMP_INPUT_MINUS_DAC1_CH1\r\n#define COMP_INVERTINGINPUT_DAC1_CH2   COMP_INPUT_MINUS_DAC1_CH2\r\n#define COMP_INVERTINGINPUT_DAC1       COMP_INPUT_MINUS_DAC1_CH1\r\n#define COMP_INVERTINGINPUT_DAC2       COMP_INPUT_MINUS_DAC1_CH2\r\n#define COMP_INVERTINGINPUT_IO1        COMP_INPUT_MINUS_IO1\r\n#if defined(STM32L0)\r\n/* Issue fixed on STM32L0 COMP driver: only 2 dedicated IO (IO1 and IO2),     */\r\n/* IO2 was wrongly assigned to IO shared with DAC and IO3 was corresponding   */\r\n/* to the second dedicated IO (only for COMP2).                               */\r\n#define COMP_INVERTINGINPUT_IO2 COMP_INPUT_MINUS_DAC1_CH2\r\n#define COMP_INVERTINGINPUT_IO3 COMP_INPUT_MINUS_IO2\r\n#else\r\n#define COMP_INVERTINGINPUT_IO2 COMP_INPUT_MINUS_IO2\r\n#define COMP_INVERTINGINPUT_IO3 COMP_INPUT_MINUS_IO3\r\n#endif\r\n#define COMP_INVERTINGINPUT_IO4 COMP_INPUT_MINUS_IO4\r\n#define COMP_INVERTINGINPUT_IO5 COMP_INPUT_MINUS_IO5\r\n\r\n#define COMP_OUTPUTLEVEL_LOW  COMP_OUTPUT_LEVEL_LOW\r\n#define COMP_OUTPUTLEVEL_HIGH COMP_OUTPUT_LEVEL_HIGH\r\n\r\n/* Note: Literal \"COMP_FLAG_LOCK\" kept for legacy purpose.                    */\r\n/*       To check COMP lock state, use macro \"__HAL_COMP_IS_LOCKED()\".        */\r\n#if defined(COMP_CSR_LOCK)\r\n#define COMP_FLAG_LOCK COMP_CSR_LOCK\r\n#elif defined(COMP_CSR_COMP1LOCK)\r\n#define COMP_FLAG_LOCK COMP_CSR_COMP1LOCK\r\n#elif defined(COMP_CSR_COMPxLOCK)\r\n#define COMP_FLAG_LOCK COMP_CSR_COMPxLOCK\r\n#endif\r\n\r\n#if defined(STM32L4)\r\n#define COMP_BLANKINGSRCE_TIM1OC5  COMP_BLANKINGSRC_TIM1_OC5_COMP1\r\n#define COMP_BLANKINGSRCE_TIM2OC3  COMP_BLANKINGSRC_TIM2_OC3_COMP1\r\n#define COMP_BLANKINGSRCE_TIM3OC3  COMP_BLANKINGSRC_TIM3_OC3_COMP1\r\n#define COMP_BLANKINGSRCE_TIM3OC4  COMP_BLANKINGSRC_TIM3_OC4_COMP2\r\n#define COMP_BLANKINGSRCE_TIM8OC5  COMP_BLANKINGSRC_TIM8_OC5_COMP2\r\n#define COMP_BLANKINGSRCE_TIM15OC1 COMP_BLANKINGSRC_TIM15_OC1_COMP2\r\n#define COMP_BLANKINGSRCE_NONE     COMP_BLANKINGSRC_NONE\r\n#endif\r\n\r\n#if defined(STM32L0)\r\n#define COMP_MODE_HIGHSPEED COMP_POWERMODE_MEDIUMSPEED\r\n#define COMP_MODE_LOWSPEED  COMP_POWERMODE_ULTRALOWPOWER\r\n#else\r\n#define COMP_MODE_HIGHSPEED     COMP_POWERMODE_HIGHSPEED\r\n#define COMP_MODE_MEDIUMSPEED   COMP_POWERMODE_MEDIUMSPEED\r\n#define COMP_MODE_LOWPOWER      COMP_POWERMODE_LOWPOWER\r\n#define COMP_MODE_ULTRALOWPOWER COMP_POWERMODE_ULTRALOWPOWER\r\n#endif\r\n\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_CORTEX_Aliased_Defines HAL CORTEX Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_CORTEX_SYSTICKCLK_CONFIG HAL_SYSTICK_CLKSourceConfig\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE\r\n#define CRC_OUTPUTDATA_INVERSION_ENABLED  CRC_OUTPUTDATA_INVERSION_ENABLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_DAC_Aliased_Defines HAL DAC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define DAC1_CHANNEL_1              DAC_CHANNEL_1\r\n#define DAC1_CHANNEL_2              DAC_CHANNEL_2\r\n#define DAC2_CHANNEL_1              DAC_CHANNEL_1\r\n#define DAC_WAVE_NONE               0x00000000U\r\n#define DAC_WAVE_NOISE              DAC_CR_WAVE1_0\r\n#define DAC_WAVE_TRIANGLE           DAC_CR_WAVE1_1\r\n#define DAC_WAVEGENERATION_NONE     DAC_WAVE_NONE\r\n#define DAC_WAVEGENERATION_NOISE    DAC_WAVE_NOISE\r\n#define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE\r\n\r\n#if defined(STM32G4) || defined(STM32H7)\r\n#define DAC_CHIPCONNECT_DISABLE DAC_CHIPCONNECT_EXTERNAL\r\n#define DAC_CHIPCONNECT_ENABLE  DAC_CHIPCONNECT_INTERNAL\r\n#endif\r\n\r\n#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) || defined(STM32L5) || defined(STM32H7) || defined(STM32F4) || defined(STM32G4)\r\n#define HAL_DAC_MSP_INIT_CB_ID   HAL_DAC_MSPINIT_CB_ID\r\n#define HAL_DAC_MSP_DEINIT_CB_ID HAL_DAC_MSPDEINIT_CB_ID\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_REMAPDMA_ADC_DMA_CH2       DMA_REMAP_ADC_DMA_CH2\r\n#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4\r\n#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5\r\n#define HAL_REMAPDMA_TIM16_DMA_CH4     DMA_REMAP_TIM16_DMA_CH4\r\n#define HAL_REMAPDMA_TIM17_DMA_CH2     DMA_REMAP_TIM17_DMA_CH2\r\n#define HAL_REMAPDMA_USART3_DMA_CH32   DMA_REMAP_USART3_DMA_CH32\r\n#define HAL_REMAPDMA_TIM16_DMA_CH6     DMA_REMAP_TIM16_DMA_CH6\r\n#define HAL_REMAPDMA_TIM17_DMA_CH7     DMA_REMAP_TIM17_DMA_CH7\r\n#define HAL_REMAPDMA_SPI2_DMA_CH67     DMA_REMAP_SPI2_DMA_CH67\r\n#define HAL_REMAPDMA_USART2_DMA_CH67   DMA_REMAP_USART2_DMA_CH67\r\n#define HAL_REMAPDMA_I2C1_DMA_CH76     DMA_REMAP_I2C1_DMA_CH76\r\n#define HAL_REMAPDMA_TIM1_DMA_CH6      DMA_REMAP_TIM1_DMA_CH6\r\n#define HAL_REMAPDMA_TIM2_DMA_CH7      DMA_REMAP_TIM2_DMA_CH7\r\n#define HAL_REMAPDMA_TIM3_DMA_CH6      DMA_REMAP_TIM3_DMA_CH6\r\n\r\n#define IS_HAL_REMAPDMA                IS_DMA_REMAP\r\n#define __HAL_REMAPDMA_CHANNEL_ENABLE  __HAL_DMA_REMAP_CHANNEL_ENABLE\r\n#define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE\r\n\r\n#if defined(STM32L4)\r\n\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI0           HAL_DMAMUX1_REQ_GEN_EXTI0\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI1           HAL_DMAMUX1_REQ_GEN_EXTI1\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI2           HAL_DMAMUX1_REQ_GEN_EXTI2\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI3           HAL_DMAMUX1_REQ_GEN_EXTI3\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI4           HAL_DMAMUX1_REQ_GEN_EXTI4\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI5           HAL_DMAMUX1_REQ_GEN_EXTI5\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI6           HAL_DMAMUX1_REQ_GEN_EXTI6\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI7           HAL_DMAMUX1_REQ_GEN_EXTI7\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI8           HAL_DMAMUX1_REQ_GEN_EXTI8\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI9           HAL_DMAMUX1_REQ_GEN_EXTI9\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI10          HAL_DMAMUX1_REQ_GEN_EXTI10\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI11          HAL_DMAMUX1_REQ_GEN_EXTI11\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI12          HAL_DMAMUX1_REQ_GEN_EXTI12\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI13          HAL_DMAMUX1_REQ_GEN_EXTI13\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI14          HAL_DMAMUX1_REQ_GEN_EXTI14\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI15          HAL_DMAMUX1_REQ_GEN_EXTI15\r\n#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT\r\n#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT\r\n#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT\r\n#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH3_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH3_EVT\r\n#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT      HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT\r\n#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT      HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT\r\n#define HAL_DMAMUX1_REQUEST_GEN_DSI_TE          HAL_DMAMUX1_REQ_GEN_DSI_TE\r\n#define HAL_DMAMUX1_REQUEST_GEN_DSI_EOT         HAL_DMAMUX1_REQ_GEN_DSI_EOT\r\n#define HAL_DMAMUX1_REQUEST_GEN_DMA2D_EOT       HAL_DMAMUX1_REQ_GEN_DMA2D_EOT\r\n#define HAL_DMAMUX1_REQUEST_GEN_LTDC_IT         HAL_DMAMUX1_REQ_GEN_LTDC_IT\r\n\r\n#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT       HAL_DMAMUX_REQ_GEN_NO_EVENT\r\n#define HAL_DMAMUX_REQUEST_GEN_RISING         HAL_DMAMUX_REQ_GEN_RISING\r\n#define HAL_DMAMUX_REQUEST_GEN_FALLING        HAL_DMAMUX_REQ_GEN_FALLING\r\n#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING\r\n\r\n#if defined(STM32L4R5xx) || defined(STM32L4R9xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx)\r\n#define DMA_REQUEST_DCMI_PSSI DMA_REQUEST_DCMI\r\n#endif\r\n\r\n#endif /* STM32L4 */\r\n\r\n#if defined(STM32G0)\r\n#define DMA_REQUEST_DAC1_CHANNEL1  DMA_REQUEST_DAC1_CH1\r\n#define DMA_REQUEST_DAC1_CHANNEL2  DMA_REQUEST_DAC1_CH2\r\n#define DMA_REQUEST_TIM16_TRIG_COM DMA_REQUEST_TIM16_COM\r\n#define DMA_REQUEST_TIM17_TRIG_COM DMA_REQUEST_TIM17_COM\r\n\r\n#define LL_DMAMUX_REQ_TIM16_TRIG_COM LL_DMAMUX_REQ_TIM16_COM\r\n#define LL_DMAMUX_REQ_TIM17_TRIG_COM LL_DMAMUX_REQ_TIM17_COM\r\n#endif\r\n\r\n#if defined(STM32H7)\r\n\r\n#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1\r\n#define DMA_REQUEST_DAC2 DMA_REQUEST_DAC1_CH2\r\n\r\n#define BDMA_REQUEST_LP_UART1_RX BDMA_REQUEST_LPUART1_RX\r\n#define BDMA_REQUEST_LP_UART1_TX BDMA_REQUEST_LPUART1_TX\r\n\r\n#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH0_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH0_EVT\r\n#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH1_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH1_EVT\r\n#define HAL_DMAMUX1_REQUEST_GEN_DMAMUX1_CH2_EVT HAL_DMAMUX1_REQ_GEN_DMAMUX1_CH2_EVT\r\n#define HAL_DMAMUX1_REQUEST_GEN_LPTIM1_OUT      HAL_DMAMUX1_REQ_GEN_LPTIM1_OUT\r\n#define HAL_DMAMUX1_REQUEST_GEN_LPTIM2_OUT      HAL_DMAMUX1_REQ_GEN_LPTIM2_OUT\r\n#define HAL_DMAMUX1_REQUEST_GEN_LPTIM3_OUT      HAL_DMAMUX1_REQ_GEN_LPTIM3_OUT\r\n#define HAL_DMAMUX1_REQUEST_GEN_EXTI0           HAL_DMAMUX1_REQ_GEN_EXTI0\r\n#define HAL_DMAMUX1_REQUEST_GEN_TIM12_TRGO      HAL_DMAMUX1_REQ_GEN_TIM12_TRGO\r\n\r\n#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH0_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH0_EVT\r\n#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH1_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH1_EVT\r\n#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH2_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH2_EVT\r\n#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH3_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH3_EVT\r\n#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH4_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH4_EVT\r\n#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH5_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH5_EVT\r\n#define HAL_DMAMUX2_REQUEST_GEN_DMAMUX2_CH6_EVT HAL_DMAMUX2_REQ_GEN_DMAMUX2_CH6_EVT\r\n#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_RX_WKUP\r\n#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_WKUP HAL_DMAMUX2_REQ_GEN_LPUART1_TX_WKUP\r\n#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_WKUP     HAL_DMAMUX2_REQ_GEN_LPTIM2_WKUP\r\n#define HAL_DMAMUX2_REQUEST_GEN_LPTIM2_OUT      HAL_DMAMUX2_REQ_GEN_LPTIM2_OUT\r\n#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_WKUP     HAL_DMAMUX2_REQ_GEN_LPTIM3_WKUP\r\n#define HAL_DMAMUX2_REQUEST_GEN_LPTIM3_OUT      HAL_DMAMUX2_REQ_GEN_LPTIM3_OUT\r\n#define HAL_DMAMUX2_REQUEST_GEN_LPTIM4_WKUP     HAL_DMAMUX2_REQ_GEN_LPTIM4_WKUP\r\n#define HAL_DMAMUX2_REQUEST_GEN_LPTIM5_WKUP     HAL_DMAMUX2_REQ_GEN_LPTIM5_WKUP\r\n#define HAL_DMAMUX2_REQUEST_GEN_I2C4_WKUP       HAL_DMAMUX2_REQ_GEN_I2C4_WKUP\r\n#define HAL_DMAMUX2_REQUEST_GEN_SPI6_WKUP       HAL_DMAMUX2_REQ_GEN_SPI6_WKUP\r\n#define HAL_DMAMUX2_REQUEST_GEN_COMP1_OUT       HAL_DMAMUX2_REQ_GEN_COMP1_OUT\r\n#define HAL_DMAMUX2_REQUEST_GEN_COMP2_OUT       HAL_DMAMUX2_REQ_GEN_COMP2_OUT\r\n#define HAL_DMAMUX2_REQUEST_GEN_RTC_WKUP        HAL_DMAMUX2_REQ_GEN_RTC_WKUP\r\n#define HAL_DMAMUX2_REQUEST_GEN_EXTI0           HAL_DMAMUX2_REQ_GEN_EXTI0\r\n#define HAL_DMAMUX2_REQUEST_GEN_EXTI2           HAL_DMAMUX2_REQ_GEN_EXTI2\r\n#define HAL_DMAMUX2_REQUEST_GEN_I2C4_IT_EVT     HAL_DMAMUX2_REQ_GEN_I2C4_IT_EVT\r\n#define HAL_DMAMUX2_REQUEST_GEN_SPI6_IT         HAL_DMAMUX2_REQ_GEN_SPI6_IT\r\n#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_TX_IT   HAL_DMAMUX2_REQ_GEN_LPUART1_TX_IT\r\n#define HAL_DMAMUX2_REQUEST_GEN_LPUART1_RX_IT   HAL_DMAMUX2_REQ_GEN_LPUART1_RX_IT\r\n#define HAL_DMAMUX2_REQUEST_GEN_ADC3_IT         HAL_DMAMUX2_REQ_GEN_ADC3_IT\r\n#define HAL_DMAMUX2_REQUEST_GEN_ADC3_AWD1_OUT   HAL_DMAMUX2_REQ_GEN_ADC3_AWD1_OUT\r\n#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH0_IT     HAL_DMAMUX2_REQ_GEN_BDMA_CH0_IT\r\n#define HAL_DMAMUX2_REQUEST_GEN_BDMA_CH1_IT     HAL_DMAMUX2_REQ_GEN_BDMA_CH1_IT\r\n\r\n#define HAL_DMAMUX_REQUEST_GEN_NO_EVENT       HAL_DMAMUX_REQ_GEN_NO_EVENT\r\n#define HAL_DMAMUX_REQUEST_GEN_RISING         HAL_DMAMUX_REQ_GEN_RISING\r\n#define HAL_DMAMUX_REQUEST_GEN_FALLING        HAL_DMAMUX_REQ_GEN_FALLING\r\n#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING\r\n\r\n#define DFSDM_FILTER_EXT_TRIG_LPTIM1 DFSDM_FILTER_EXT_TRIG_LPTIM1_OUT\r\n#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT\r\n#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT\r\n\r\n#define DAC_TRIGGER_LP1_OUT DAC_TRIGGER_LPTIM1_OUT\r\n#define DAC_TRIGGER_LP2_OUT DAC_TRIGGER_LPTIM2_OUT\r\n\r\n#endif /* STM32H7 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define TYPEPROGRAM_BYTE             FLASH_TYPEPROGRAM_BYTE\r\n#define TYPEPROGRAM_HALFWORD         FLASH_TYPEPROGRAM_HALFWORD\r\n#define TYPEPROGRAM_WORD             FLASH_TYPEPROGRAM_WORD\r\n#define TYPEPROGRAM_DOUBLEWORD       FLASH_TYPEPROGRAM_DOUBLEWORD\r\n#define TYPEERASE_SECTORS            FLASH_TYPEERASE_SECTORS\r\n#define TYPEERASE_PAGES              FLASH_TYPEERASE_PAGES\r\n#define TYPEERASE_PAGEERASE          FLASH_TYPEERASE_PAGES\r\n#define TYPEERASE_MASSERASE          FLASH_TYPEERASE_MASSERASE\r\n#define WRPSTATE_DISABLE             OB_WRPSTATE_DISABLE\r\n#define WRPSTATE_ENABLE              OB_WRPSTATE_ENABLE\r\n#define HAL_FLASH_TIMEOUT_VALUE      FLASH_TIMEOUT_VALUE\r\n#define OBEX_PCROP                   OPTIONBYTE_PCROP\r\n#define OBEX_BOOTCONFIG              OPTIONBYTE_BOOTCONFIG\r\n#define PCROPSTATE_DISABLE           OB_PCROP_STATE_DISABLE\r\n#define PCROPSTATE_ENABLE            OB_PCROP_STATE_ENABLE\r\n#define TYPEERASEDATA_BYTE           FLASH_TYPEERASEDATA_BYTE\r\n#define TYPEERASEDATA_HALFWORD       FLASH_TYPEERASEDATA_HALFWORD\r\n#define TYPEERASEDATA_WORD           FLASH_TYPEERASEDATA_WORD\r\n#define TYPEPROGRAMDATA_BYTE         FLASH_TYPEPROGRAMDATA_BYTE\r\n#define TYPEPROGRAMDATA_HALFWORD     FLASH_TYPEPROGRAMDATA_HALFWORD\r\n#define TYPEPROGRAMDATA_WORD         FLASH_TYPEPROGRAMDATA_WORD\r\n#define TYPEPROGRAMDATA_FASTBYTE     FLASH_TYPEPROGRAMDATA_FASTBYTE\r\n#define TYPEPROGRAMDATA_FASTHALFWORD FLASH_TYPEPROGRAMDATA_FASTHALFWORD\r\n#define TYPEPROGRAMDATA_FASTWORD     FLASH_TYPEPROGRAMDATA_FASTWORD\r\n#define PAGESIZE                     FLASH_PAGE_SIZE\r\n#define TYPEPROGRAM_FASTBYTE         FLASH_TYPEPROGRAM_BYTE\r\n#define TYPEPROGRAM_FASTHALFWORD     FLASH_TYPEPROGRAM_HALFWORD\r\n#define TYPEPROGRAM_FASTWORD         FLASH_TYPEPROGRAM_WORD\r\n#define VOLTAGE_RANGE_1              FLASH_VOLTAGE_RANGE_1\r\n#define VOLTAGE_RANGE_2              FLASH_VOLTAGE_RANGE_2\r\n#define VOLTAGE_RANGE_3              FLASH_VOLTAGE_RANGE_3\r\n#define VOLTAGE_RANGE_4              FLASH_VOLTAGE_RANGE_4\r\n#define TYPEPROGRAM_FAST             FLASH_TYPEPROGRAM_FAST\r\n#define TYPEPROGRAM_FAST_AND_LAST    FLASH_TYPEPROGRAM_FAST_AND_LAST\r\n#define WRPAREA_BANK1_AREAA          OB_WRPAREA_BANK1_AREAA\r\n#define WRPAREA_BANK1_AREAB          OB_WRPAREA_BANK1_AREAB\r\n#define WRPAREA_BANK2_AREAA          OB_WRPAREA_BANK2_AREAA\r\n#define WRPAREA_BANK2_AREAB          OB_WRPAREA_BANK2_AREAB\r\n#define IWDG_STDBY_FREEZE            OB_IWDG_STDBY_FREEZE\r\n#define IWDG_STDBY_ACTIVE            OB_IWDG_STDBY_RUN\r\n#define IWDG_STOP_FREEZE             OB_IWDG_STOP_FREEZE\r\n#define IWDG_STOP_ACTIVE             OB_IWDG_STOP_RUN\r\n#define FLASH_ERROR_NONE             HAL_FLASH_ERROR_NONE\r\n#define FLASH_ERROR_RD               HAL_FLASH_ERROR_RD\r\n#define FLASH_ERROR_PG               HAL_FLASH_ERROR_PROG\r\n#define FLASH_ERROR_PGP              HAL_FLASH_ERROR_PGS\r\n#define FLASH_ERROR_WRP              HAL_FLASH_ERROR_WRP\r\n#define FLASH_ERROR_OPTV             HAL_FLASH_ERROR_OPTV\r\n#define FLASH_ERROR_OPTVUSR          HAL_FLASH_ERROR_OPTVUSR\r\n#define FLASH_ERROR_PROG             HAL_FLASH_ERROR_PROG\r\n#define FLASH_ERROR_OP               HAL_FLASH_ERROR_OPERATION\r\n#define FLASH_ERROR_PGA              HAL_FLASH_ERROR_PGA\r\n#define FLASH_ERROR_SIZE             HAL_FLASH_ERROR_SIZE\r\n#define FLASH_ERROR_SIZ              HAL_FLASH_ERROR_SIZE\r\n#define FLASH_ERROR_PGS              HAL_FLASH_ERROR_PGS\r\n#define FLASH_ERROR_MIS              HAL_FLASH_ERROR_MIS\r\n#define FLASH_ERROR_FAST             HAL_FLASH_ERROR_FAST\r\n#define FLASH_ERROR_FWWERR           HAL_FLASH_ERROR_FWWERR\r\n#define FLASH_ERROR_NOTZERO          HAL_FLASH_ERROR_NOTZERO\r\n#define FLASH_ERROR_OPERATION        HAL_FLASH_ERROR_OPERATION\r\n#define FLASH_ERROR_ERS              HAL_FLASH_ERROR_ERS\r\n#define OB_WDG_SW                    OB_IWDG_SW\r\n#define OB_WDG_HW                    OB_IWDG_HW\r\n#define OB_SDADC12_VDD_MONITOR_SET   OB_SDACD_VDD_MONITOR_SET\r\n#define OB_SDADC12_VDD_MONITOR_RESET OB_SDACD_VDD_MONITOR_RESET\r\n#define OB_RAM_PARITY_CHECK_SET      OB_SRAM_PARITY_SET\r\n#define OB_RAM_PARITY_CHECK_RESET    OB_SRAM_PARITY_RESET\r\n#define IS_OB_SDADC12_VDD_MONITOR    IS_OB_SDACD_VDD_MONITOR\r\n#define OB_RDP_LEVEL0                OB_RDP_LEVEL_0\r\n#define OB_RDP_LEVEL1                OB_RDP_LEVEL_1\r\n#define OB_RDP_LEVEL2                OB_RDP_LEVEL_2\r\n#if defined(STM32G0)\r\n#define OB_BOOT_LOCK_DISABLE OB_BOOT_ENTRY_FORCED_NONE\r\n#define OB_BOOT_LOCK_ENABLE  OB_BOOT_ENTRY_FORCED_FLASH\r\n#else\r\n#define OB_BOOT_ENTRY_FORCED_NONE  OB_BOOT_LOCK_DISABLE\r\n#define OB_BOOT_ENTRY_FORCED_FLASH OB_BOOT_LOCK_ENABLE\r\n#endif\r\n#if defined(STM32H7)\r\n#define FLASH_FLAG_SNECCE_BANK1RR FLASH_FLAG_SNECCERR_BANK1\r\n#define FLASH_FLAG_DBECCE_BANK1RR FLASH_FLAG_DBECCERR_BANK1\r\n#define FLASH_FLAG_STRBER_BANK1R  FLASH_FLAG_STRBERR_BANK1\r\n#define FLASH_FLAG_SNECCE_BANK2RR FLASH_FLAG_SNECCERR_BANK2\r\n#define FLASH_FLAG_DBECCE_BANK2RR FLASH_FLAG_DBECCERR_BANK2\r\n#define FLASH_FLAG_STRBER_BANK2R  FLASH_FLAG_STRBERR_BANK2\r\n#define FLASH_FLAG_WDW            FLASH_FLAG_WBNE\r\n#define OB_WRP_SECTOR_All         OB_WRP_SECTOR_ALL\r\n#endif /* STM32H7 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#if defined(STM32H7)\r\n#define __HAL_RCC_JPEG_CLK_ENABLE        __HAL_RCC_JPGDECEN_CLK_ENABLE\r\n#define __HAL_RCC_JPEG_CLK_DISABLE       __HAL_RCC_JPGDECEN_CLK_DISABLE\r\n#define __HAL_RCC_JPEG_FORCE_RESET       __HAL_RCC_JPGDECRST_FORCE_RESET\r\n#define __HAL_RCC_JPEG_RELEASE_RESET     __HAL_RCC_JPGDECRST_RELEASE_RESET\r\n#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE  __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE\r\n#endif /* STM32H7 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9  I2C_FASTMODEPLUS_PA9\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6  I2C_FASTMODEPLUS_PB6\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB7  I2C_FASTMODEPLUS_PB7\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB8  I2C_FASTMODEPLUS_PB8\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB9  I2C_FASTMODEPLUS_PB9\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C1     I2C_FASTMODEPLUS_I2C1\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C2     I2C_FASTMODEPLUS_I2C2\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C3     I2C_FASTMODEPLUS_I2C3\r\n#if defined(STM32G4)\r\n\r\n#define HAL_SYSCFG_EnableIOAnalogSwitchBooster  HAL_SYSCFG_EnableIOSwitchBooster\r\n#define HAL_SYSCFG_DisableIOAnalogSwitchBooster HAL_SYSCFG_DisableIOSwitchBooster\r\n#define HAL_SYSCFG_EnableIOAnalogSwitchVDD      HAL_SYSCFG_EnableIOSwitchVDD\r\n#define HAL_SYSCFG_DisableIOAnalogSwitchVDD     HAL_SYSCFG_DisableIOSwitchVDD\r\n#endif /* STM32G4 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose\r\n * @{\r\n */\r\n#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4)\r\n#define FMC_NAND_PCC_WAIT_FEATURE_DISABLE FMC_NAND_WAIT_FEATURE_DISABLE\r\n#define FMC_NAND_PCC_WAIT_FEATURE_ENABLE  FMC_NAND_WAIT_FEATURE_ENABLE\r\n#define FMC_NAND_PCC_MEM_BUS_WIDTH_8      FMC_NAND_MEM_BUS_WIDTH_8\r\n#define FMC_NAND_PCC_MEM_BUS_WIDTH_16     FMC_NAND_MEM_BUS_WIDTH_16\r\n#elif defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4)\r\n#define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE\r\n#define FMC_NAND_WAIT_FEATURE_ENABLE  FMC_NAND_PCC_WAIT_FEATURE_ENABLE\r\n#define FMC_NAND_MEM_BUS_WIDTH_8      FMC_NAND_PCC_MEM_BUS_WIDTH_8\r\n#define FMC_NAND_MEM_BUS_WIDTH_16     FMC_NAND_PCC_MEM_BUS_WIDTH_16\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define FSMC_NORSRAM_TYPEDEF          FSMC_NORSRAM_TypeDef\r\n#define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_GPIO_Aliased_Macros HAL GPIO Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define GET_GPIO_SOURCE GPIO_GET_INDEX\r\n#define GET_GPIO_INDEX  GPIO_GET_INDEX\r\n\r\n#if defined(STM32F4)\r\n#define GPIO_AF12_SDMMC  GPIO_AF12_SDIO\r\n#define GPIO_AF12_SDMMC1 GPIO_AF12_SDIO\r\n#endif\r\n\r\n#if defined(STM32F7)\r\n#define GPIO_AF12_SDIO  GPIO_AF12_SDMMC1\r\n#define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1\r\n#endif\r\n\r\n#if defined(STM32L4)\r\n#define GPIO_AF12_SDIO  GPIO_AF12_SDMMC1\r\n#define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1\r\n#endif\r\n\r\n#if defined(STM32H7)\r\n#define GPIO_AF7_SDIO1  GPIO_AF7_SDMMC1\r\n#define GPIO_AF8_SDIO1  GPIO_AF8_SDMMC1\r\n#define GPIO_AF12_SDIO1 GPIO_AF12_SDMMC1\r\n#define GPIO_AF9_SDIO2  GPIO_AF9_SDMMC2\r\n#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2\r\n#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2\r\n\r\n#if defined(STM32H743xx) || defined(STM32H753xx) || defined(STM32H750xx) || defined(STM32H742xx) || defined(STM32H745xx) || defined(STM32H755xx) || defined(STM32H747xx) || defined(STM32H757xx)\r\n#define GPIO_AF10_OTG2_HS GPIO_AF10_OTG2_FS\r\n#define GPIO_AF10_OTG1_FS GPIO_AF10_OTG1_HS\r\n#define GPIO_AF12_OTG2_FS GPIO_AF12_OTG1_FS\r\n#endif /*STM32H743xx || STM32H753xx || STM32H750xx || STM32H742xx || STM32H745xx || STM32H755xx || STM32H747xx || STM32H757xx */\r\n#endif /* STM32H7 */\r\n\r\n#define GPIO_AF0_LPTIM GPIO_AF0_LPTIM1\r\n#define GPIO_AF1_LPTIM GPIO_AF1_LPTIM1\r\n#define GPIO_AF2_LPTIM GPIO_AF2_LPTIM1\r\n\r\n#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32G4) || defined(STM32H7)\r\n#define GPIO_SPEED_LOW    GPIO_SPEED_FREQ_LOW\r\n#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM\r\n#define GPIO_SPEED_FAST   GPIO_SPEED_FREQ_HIGH\r\n#define GPIO_SPEED_HIGH   GPIO_SPEED_FREQ_VERY_HIGH\r\n#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32G4 || STM32H7*/\r\n\r\n#if defined(STM32L1)\r\n#define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW\r\n#define GPIO_SPEED_LOW      GPIO_SPEED_FREQ_MEDIUM\r\n#define GPIO_SPEED_MEDIUM   GPIO_SPEED_FREQ_HIGH\r\n#define GPIO_SPEED_HIGH     GPIO_SPEED_FREQ_VERY_HIGH\r\n#endif /* STM32L1 */\r\n\r\n#if defined(STM32F0) || defined(STM32F3) || defined(STM32F1)\r\n#define GPIO_SPEED_LOW    GPIO_SPEED_FREQ_LOW\r\n#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM\r\n#define GPIO_SPEED_HIGH   GPIO_SPEED_FREQ_HIGH\r\n#endif /* STM32F0 || STM32F3 || STM32F1 */\r\n\r\n#define GPIO_AF6_DFSDM GPIO_AF6_DFSDM1\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define HRTIM_TIMDELAYEDPROTECTION_DISABLED           HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DISABLED\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT1_EEV68  HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT1_EEV6\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_EEV68  HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_EEV6\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV68  HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV6\r\n#define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV68     HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV6\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT1_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT1_DEEV7\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79  HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7\r\n#define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79     HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7\r\n\r\n#define __HAL_HRTIM_SetCounter        __HAL_HRTIM_SETCOUNTER\r\n#define __HAL_HRTIM_GetCounter        __HAL_HRTIM_GETCOUNTER\r\n#define __HAL_HRTIM_SetPeriod         __HAL_HRTIM_SETPERIOD\r\n#define __HAL_HRTIM_GetPeriod         __HAL_HRTIM_GETPERIOD\r\n#define __HAL_HRTIM_SetClockPrescaler __HAL_HRTIM_SETCLOCKPRESCALER\r\n#define __HAL_HRTIM_GetClockPrescaler __HAL_HRTIM_GETCLOCKPRESCALER\r\n#define __HAL_HRTIM_SetCompare        __HAL_HRTIM_SETCOMPARE\r\n#define __HAL_HRTIM_GetCompare        __HAL_HRTIM_GETCOMPARE\r\n\r\n#if defined(STM32G4)\r\n#define HAL_HRTIM_ExternalEventCounterConfig   HAL_HRTIM_ExtEventCounterConfig\r\n#define HAL_HRTIM_ExternalEventCounterEnable   HAL_HRTIM_ExtEventCounterEnable\r\n#define HAL_HRTIM_ExternalEventCounterDisable  HAL_HRTIM_ExtEventCounterDisable\r\n#define HAL_HRTIM_ExternalEventCounterReset    HAL_HRTIM_ExtEventCounterReset\r\n#define HRTIM_TIMEEVENT_A                      HRTIM_EVENTCOUNTER_A\r\n#define HRTIM_TIMEEVENT_B                      HRTIM_EVENTCOUNTER_B\r\n#define HRTIM_TIMEEVENTRESETMODE_UNCONDITIONAL HRTIM_EVENTCOUNTER_RSTMODE_UNCONDITIONAL\r\n#define HRTIM_TIMEEVENTRESETMODE_CONDITIONAL   HRTIM_EVENTCOUNTER_RSTMODE_CONDITIONAL\r\n#endif /* STM32G4 */\r\n\r\n#if defined(STM32H7)\r\n#define HRTIM_OUTPUTSET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1\r\n#define HRTIM_OUTPUTSET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2\r\n#define HRTIM_OUTPUTSET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3\r\n#define HRTIM_OUTPUTSET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4\r\n#define HRTIM_OUTPUTSET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5\r\n#define HRTIM_OUTPUTSET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6\r\n#define HRTIM_OUTPUTSET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7\r\n#define HRTIM_OUTPUTSET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8\r\n#define HRTIM_OUTPUTSET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9\r\n#define HRTIM_OUTPUTSET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1\r\n#define HRTIM_OUTPUTSET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2\r\n#define HRTIM_OUTPUTSET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3\r\n#define HRTIM_OUTPUTSET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4\r\n#define HRTIM_OUTPUTSET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5\r\n#define HRTIM_OUTPUTSET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6\r\n#define HRTIM_OUTPUTSET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7\r\n#define HRTIM_OUTPUTSET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8\r\n#define HRTIM_OUTPUTSET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9\r\n#define HRTIM_OUTPUTSET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1\r\n#define HRTIM_OUTPUTSET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2\r\n#define HRTIM_OUTPUTSET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3\r\n#define HRTIM_OUTPUTSET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4\r\n#define HRTIM_OUTPUTSET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5\r\n#define HRTIM_OUTPUTSET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6\r\n#define HRTIM_OUTPUTSET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7\r\n#define HRTIM_OUTPUTSET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8\r\n#define HRTIM_OUTPUTSET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9\r\n#define HRTIM_OUTPUTSET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1\r\n#define HRTIM_OUTPUTSET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2\r\n#define HRTIM_OUTPUTSET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3\r\n#define HRTIM_OUTPUTSET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4\r\n#define HRTIM_OUTPUTSET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5\r\n#define HRTIM_OUTPUTSET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6\r\n#define HRTIM_OUTPUTSET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7\r\n#define HRTIM_OUTPUTSET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8\r\n#define HRTIM_OUTPUTSET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9\r\n#define HRTIM_OUTPUTSET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1\r\n#define HRTIM_OUTPUTSET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2\r\n#define HRTIM_OUTPUTSET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3\r\n#define HRTIM_OUTPUTSET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4\r\n#define HRTIM_OUTPUTSET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5\r\n#define HRTIM_OUTPUTSET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6\r\n#define HRTIM_OUTPUTSET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7\r\n#define HRTIM_OUTPUTSET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8\r\n#define HRTIM_OUTPUTSET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9\r\n#define HRTIM_OUTPUTSET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1\r\n#define HRTIM_OUTPUTSET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2\r\n#define HRTIM_OUTPUTSET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3\r\n#define HRTIM_OUTPUTSET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4\r\n#define HRTIM_OUTPUTSET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5\r\n#define HRTIM_OUTPUTSET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6\r\n#define HRTIM_OUTPUTSET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7\r\n#define HRTIM_OUTPUTSET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8\r\n#define HRTIM_OUTPUTSET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9\r\n\r\n#define HRTIM_OUTPUTRESET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1\r\n#define HRTIM_OUTPUTRESET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2\r\n#define HRTIM_OUTPUTRESET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3\r\n#define HRTIM_OUTPUTRESET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4\r\n#define HRTIM_OUTPUTRESET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5\r\n#define HRTIM_OUTPUTRESET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6\r\n#define HRTIM_OUTPUTRESET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7\r\n#define HRTIM_OUTPUTRESET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8\r\n#define HRTIM_OUTPUTRESET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9\r\n#define HRTIM_OUTPUTRESET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1\r\n#define HRTIM_OUTPUTRESET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2\r\n#define HRTIM_OUTPUTRESET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3\r\n#define HRTIM_OUTPUTRESET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4\r\n#define HRTIM_OUTPUTRESET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5\r\n#define HRTIM_OUTPUTRESET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6\r\n#define HRTIM_OUTPUTRESET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7\r\n#define HRTIM_OUTPUTRESET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8\r\n#define HRTIM_OUTPUTRESET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9\r\n#define HRTIM_OUTPUTRESET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1\r\n#define HRTIM_OUTPUTRESET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2\r\n#define HRTIM_OUTPUTRESET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3\r\n#define HRTIM_OUTPUTRESET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4\r\n#define HRTIM_OUTPUTRESET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5\r\n#define HRTIM_OUTPUTRESET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6\r\n#define HRTIM_OUTPUTRESET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7\r\n#define HRTIM_OUTPUTRESET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8\r\n#define HRTIM_OUTPUTRESET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9\r\n#define HRTIM_OUTPUTRESET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1\r\n#define HRTIM_OUTPUTRESET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2\r\n#define HRTIM_OUTPUTRESET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3\r\n#define HRTIM_OUTPUTRESET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4\r\n#define HRTIM_OUTPUTRESET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5\r\n#define HRTIM_OUTPUTRESET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6\r\n#define HRTIM_OUTPUTRESET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7\r\n#define HRTIM_OUTPUTRESET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8\r\n#define HRTIM_OUTPUTRESET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9\r\n#define HRTIM_OUTPUTRESET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1\r\n#define HRTIM_OUTPUTRESET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2\r\n#define HRTIM_OUTPUTRESET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3\r\n#define HRTIM_OUTPUTRESET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4\r\n#define HRTIM_OUTPUTRESET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5\r\n#define HRTIM_OUTPUTRESET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6\r\n#define HRTIM_OUTPUTRESET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7\r\n#define HRTIM_OUTPUTRESET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8\r\n#define HRTIM_OUTPUTRESET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9\r\n#define HRTIM_OUTPUTRESET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1\r\n#define HRTIM_OUTPUTRESET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2\r\n#define HRTIM_OUTPUTRESET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3\r\n#define HRTIM_OUTPUTRESET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4\r\n#define HRTIM_OUTPUTRESET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5\r\n#define HRTIM_OUTPUTRESET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6\r\n#define HRTIM_OUTPUTRESET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7\r\n#define HRTIM_OUTPUTRESET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8\r\n#define HRTIM_OUTPUTRESET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9\r\n#endif /* STM32H7 */\r\n\r\n#if defined(STM32F3)\r\n/** @brief Constants defining available sources associated to external events.\r\n */\r\n#define HRTIM_EVENTSRC_1 (0x00000000U)\r\n#define HRTIM_EVENTSRC_2 (HRTIM_EECR1_EE1SRC_0)\r\n#define HRTIM_EVENTSRC_3 (HRTIM_EECR1_EE1SRC_1)\r\n#define HRTIM_EVENTSRC_4 (HRTIM_EECR1_EE1SRC_1 | HRTIM_EECR1_EE1SRC_0)\r\n\r\n/** @brief Constants defining the events that can be selected to configure the\r\n *        set/reset crossbar of a timer output\r\n */\r\n#define HRTIM_OUTPUTSET_TIMEV_1 (HRTIM_SET1R_TIMEVNT1)\r\n#define HRTIM_OUTPUTSET_TIMEV_2 (HRTIM_SET1R_TIMEVNT2)\r\n#define HRTIM_OUTPUTSET_TIMEV_3 (HRTIM_SET1R_TIMEVNT3)\r\n#define HRTIM_OUTPUTSET_TIMEV_4 (HRTIM_SET1R_TIMEVNT4)\r\n#define HRTIM_OUTPUTSET_TIMEV_5 (HRTIM_SET1R_TIMEVNT5)\r\n#define HRTIM_OUTPUTSET_TIMEV_6 (HRTIM_SET1R_TIMEVNT6)\r\n#define HRTIM_OUTPUTSET_TIMEV_7 (HRTIM_SET1R_TIMEVNT7)\r\n#define HRTIM_OUTPUTSET_TIMEV_8 (HRTIM_SET1R_TIMEVNT8)\r\n#define HRTIM_OUTPUTSET_TIMEV_9 (HRTIM_SET1R_TIMEVNT9)\r\n\r\n#define HRTIM_OUTPUTRESET_TIMEV_1 (HRTIM_RST1R_TIMEVNT1)\r\n#define HRTIM_OUTPUTRESET_TIMEV_2 (HRTIM_RST1R_TIMEVNT2)\r\n#define HRTIM_OUTPUTRESET_TIMEV_3 (HRTIM_RST1R_TIMEVNT3)\r\n#define HRTIM_OUTPUTRESET_TIMEV_4 (HRTIM_RST1R_TIMEVNT4)\r\n#define HRTIM_OUTPUTRESET_TIMEV_5 (HRTIM_RST1R_TIMEVNT5)\r\n#define HRTIM_OUTPUTRESET_TIMEV_6 (HRTIM_RST1R_TIMEVNT6)\r\n#define HRTIM_OUTPUTRESET_TIMEV_7 (HRTIM_RST1R_TIMEVNT7)\r\n#define HRTIM_OUTPUTRESET_TIMEV_8 (HRTIM_RST1R_TIMEVNT8)\r\n#define HRTIM_OUTPUTRESET_TIMEV_9 (HRTIM_RST1R_TIMEVNT9)\r\n\r\n/** @brief Constants defining the event filtering applied to external events\r\n *        by a timer\r\n */\r\n#define HRTIM_TIMEVENTFILTER_NONE          (0x00000000U)\r\n#define HRTIM_TIMEVENTFILTER_BLANKINGCMP1  (HRTIM_EEFR1_EE1FLTR_0)\r\n#define HRTIM_TIMEVENTFILTER_BLANKINGCMP2  (HRTIM_EEFR1_EE1FLTR_1)\r\n#define HRTIM_TIMEVENTFILTER_BLANKINGCMP3  (HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)\r\n#define HRTIM_TIMEVENTFILTER_BLANKINGCMP4  (HRTIM_EEFR1_EE1FLTR_2)\r\n#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR1 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)\r\n#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR2 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)\r\n#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR3 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)\r\n#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR4 (HRTIM_EEFR1_EE1FLTR_3)\r\n#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR5 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_0)\r\n#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR6 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1)\r\n#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR7 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)\r\n#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR8 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2)\r\n#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP2 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)\r\n#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP3 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)\r\n#define HRTIM_TIMEVENTFILTER_WINDOWINGTIM  (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)\r\n\r\n/** @brief Constants defining the DLL calibration periods (in micro seconds)\r\n */\r\n#define HRTIM_CALIBRATIONRATE_7300 0x00000000U\r\n#define HRTIM_CALIBRATIONRATE_910  (HRTIM_DLLCR_CALRTE_0)\r\n#define HRTIM_CALIBRATIONRATE_114  (HRTIM_DLLCR_CALRTE_1)\r\n#define HRTIM_CALIBRATIONRATE_14   (HRTIM_DLLCR_CALRTE_1 | HRTIM_DLLCR_CALRTE_0)\r\n\r\n#endif /* STM32F3 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_I2C_Aliased_Defines HAL I2C Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define I2C_DUALADDRESS_DISABLED  I2C_DUALADDRESS_DISABLE\r\n#define I2C_DUALADDRESS_ENABLED   I2C_DUALADDRESS_ENABLE\r\n#define I2C_GENERALCALL_DISABLED  I2C_GENERALCALL_DISABLE\r\n#define I2C_GENERALCALL_ENABLED   I2C_GENERALCALL_ENABLE\r\n#define I2C_NOSTRETCH_DISABLED    I2C_NOSTRETCH_DISABLE\r\n#define I2C_NOSTRETCH_ENABLED     I2C_NOSTRETCH_ENABLE\r\n#define I2C_ANALOGFILTER_ENABLED  I2C_ANALOGFILTER_ENABLE\r\n#define I2C_ANALOGFILTER_DISABLED I2C_ANALOGFILTER_DISABLE\r\n#if defined(STM32F0) || defined(STM32F1) || defined(STM32F3) || defined(STM32G0) || defined(STM32L4) || defined(STM32L1) || defined(STM32F7)\r\n#define HAL_I2C_STATE_MEM_BUSY_TX    HAL_I2C_STATE_BUSY_TX\r\n#define HAL_I2C_STATE_MEM_BUSY_RX    HAL_I2C_STATE_BUSY_RX\r\n#define HAL_I2C_STATE_MASTER_BUSY_TX HAL_I2C_STATE_BUSY_TX\r\n#define HAL_I2C_STATE_MASTER_BUSY_RX HAL_I2C_STATE_BUSY_RX\r\n#define HAL_I2C_STATE_SLAVE_BUSY_TX  HAL_I2C_STATE_BUSY_TX\r\n#define HAL_I2C_STATE_SLAVE_BUSY_RX  HAL_I2C_STATE_BUSY_RX\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_IRDA_Aliased_Defines HAL IRDA Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define IRDA_ONE_BIT_SAMPLE_DISABLED IRDA_ONE_BIT_SAMPLE_DISABLE\r\n#define IRDA_ONE_BIT_SAMPLE_ENABLED  IRDA_ONE_BIT_SAMPLE_ENABLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_IWDG_Aliased_Defines HAL IWDG Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define KR_KEY_RELOAD IWDG_KEY_RELOAD\r\n#define KR_KEY_ENABLE IWDG_KEY_ENABLE\r\n#define KR_KEY_EWA    IWDG_KEY_WRITE_ACCESS_ENABLE\r\n#define KR_KEY_DWA    IWDG_KEY_WRITE_ACCESS_DISABLE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_LPTIM_Aliased_Defines HAL LPTIM Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define LPTIM_CLOCKSAMPLETIME_DIRECTTRANSISTION LPTIM_CLOCKSAMPLETIME_DIRECTTRANSITION\r\n#define LPTIM_CLOCKSAMPLETIME_2TRANSISTIONS     LPTIM_CLOCKSAMPLETIME_2TRANSITIONS\r\n#define LPTIM_CLOCKSAMPLETIME_4TRANSISTIONS     LPTIM_CLOCKSAMPLETIME_4TRANSITIONS\r\n#define LPTIM_CLOCKSAMPLETIME_8TRANSISTIONS     LPTIM_CLOCKSAMPLETIME_8TRANSITIONS\r\n\r\n#define LPTIM_CLOCKPOLARITY_RISINGEDGE  LPTIM_CLOCKPOLARITY_RISING\r\n#define LPTIM_CLOCKPOLARITY_FALLINGEDGE LPTIM_CLOCKPOLARITY_FALLING\r\n#define LPTIM_CLOCKPOLARITY_BOTHEDGES   LPTIM_CLOCKPOLARITY_RISING_FALLING\r\n\r\n#define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION\r\n#define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS     LPTIM_TRIGSAMPLETIME_2TRANSITIONS\r\n#define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS     LPTIM_TRIGSAMPLETIME_4TRANSITIONS\r\n#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS     LPTIM_TRIGSAMPLETIME_8TRANSITIONS\r\n\r\n/* The following 3 definition have also been present in a temporary version of lptim.h */\r\n/* They need to be renamed also to the right name, just in case */\r\n#define LPTIM_TRIGSAMPLETIME_2TRANSITION LPTIM_TRIGSAMPLETIME_2TRANSITIONS\r\n#define LPTIM_TRIGSAMPLETIME_4TRANSITION LPTIM_TRIGSAMPLETIME_4TRANSITIONS\r\n#define LPTIM_TRIGSAMPLETIME_8TRANSITION LPTIM_TRIGSAMPLETIME_8TRANSITIONS\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_NAND_Aliased_Defines HAL NAND Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_NAND_Read_Page       HAL_NAND_Read_Page_8b\r\n#define HAL_NAND_Write_Page      HAL_NAND_Write_Page_8b\r\n#define HAL_NAND_Read_SpareArea  HAL_NAND_Read_SpareArea_8b\r\n#define HAL_NAND_Write_SpareArea HAL_NAND_Write_SpareArea_8b\r\n\r\n#define NAND_AddressTypedef NAND_AddressTypeDef\r\n\r\n#define __ARRAY_ADDRESS  ARRAY_ADDRESS\r\n#define __ADDR_1st_CYCLE ADDR_1ST_CYCLE\r\n#define __ADDR_2nd_CYCLE ADDR_2ND_CYCLE\r\n#define __ADDR_3rd_CYCLE ADDR_3RD_CYCLE\r\n#define __ADDR_4th_CYCLE ADDR_4TH_CYCLE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define NOR_StatusTypedef HAL_NOR_StatusTypeDef\r\n#define NOR_SUCCESS       HAL_NOR_STATUS_SUCCESS\r\n#define NOR_ONGOING       HAL_NOR_STATUS_ONGOING\r\n#define NOR_ERROR         HAL_NOR_STATUS_ERROR\r\n#define NOR_TIMEOUT       HAL_NOR_STATUS_TIMEOUT\r\n\r\n#define __NOR_WRITE      NOR_WRITE\r\n#define __NOR_ADDR_SHIFT NOR_ADDR_SHIFT\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_OPAMP_Aliased_Defines HAL OPAMP Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define OPAMP_NONINVERTINGINPUT_VP0 OPAMP_NONINVERTINGINPUT_IO0\r\n#define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1\r\n#define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2\r\n#define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3\r\n\r\n#define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0\r\n#define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1\r\n#define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2\r\n#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3\r\n\r\n#define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0\r\n#define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1\r\n\r\n#define IOPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0\r\n#define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1\r\n\r\n#define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0\r\n#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1\r\n\r\n#define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1\r\n\r\n#define OPAMP_PGACONNECT_NO  OPAMP_PGA_CONNECT_INVERTINGINPUT_NO\r\n#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0\r\n#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1\r\n\r\n#if defined(STM32L1) || defined(STM32L4) || defined(STM32L5) || defined(STM32H7) || defined(STM32G4)\r\n#define HAL_OPAMP_MSP_INIT_CB_ID   HAL_OPAMP_MSPINIT_CB_ID\r\n#define HAL_OPAMP_MSP_DEINIT_CB_ID HAL_OPAMP_MSPDEINIT_CB_ID\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_I2S_Aliased_Defines HAL I2S Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS\r\n\r\n#if defined(STM32H7)\r\n#define I2S_IT_TXE  I2S_IT_TXP\r\n#define I2S_IT_RXNE I2S_IT_RXP\r\n\r\n#define I2S_FLAG_TXE  I2S_FLAG_TXP\r\n#define I2S_FLAG_RXNE I2S_FLAG_RXP\r\n#endif\r\n\r\n#if defined(STM32F7)\r\n#define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_PCCARD_Aliased_Defines HAL PCCARD Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n/* Compact Flash-ATA registers description */\r\n#define CF_DATA                 ATA_DATA\r\n#define CF_SECTOR_COUNT         ATA_SECTOR_COUNT\r\n#define CF_SECTOR_NUMBER        ATA_SECTOR_NUMBER\r\n#define CF_CYLINDER_LOW         ATA_CYLINDER_LOW\r\n#define CF_CYLINDER_HIGH        ATA_CYLINDER_HIGH\r\n#define CF_CARD_HEAD            ATA_CARD_HEAD\r\n#define CF_STATUS_CMD           ATA_STATUS_CMD\r\n#define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE\r\n#define CF_COMMON_DATA_AREA     ATA_COMMON_DATA_AREA\r\n\r\n/* Compact Flash-ATA commands */\r\n#define CF_READ_SECTOR_CMD  ATA_READ_SECTOR_CMD\r\n#define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD\r\n#define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD\r\n#define CF_IDENTIFY_CMD     ATA_IDENTIFY_CMD\r\n\r\n#define PCCARD_StatusTypedef HAL_PCCARD_StatusTypeDef\r\n#define PCCARD_SUCCESS       HAL_PCCARD_STATUS_SUCCESS\r\n#define PCCARD_ONGOING       HAL_PCCARD_STATUS_ONGOING\r\n#define PCCARD_ERROR         HAL_PCCARD_STATUS_ERROR\r\n#define PCCARD_TIMEOUT       HAL_PCCARD_STATUS_TIMEOUT\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define FORMAT_BIN RTC_FORMAT_BIN\r\n#define FORMAT_BCD RTC_FORMAT_BCD\r\n\r\n#define RTC_ALARMSUBSECONDMASK_None    RTC_ALARMSUBSECONDMASK_NONE\r\n#define RTC_TAMPERERASEBACKUP_DISABLED RTC_TAMPER_ERASE_BACKUP_DISABLE\r\n#define RTC_TAMPERMASK_FLAG_DISABLED   RTC_TAMPERMASK_FLAG_DISABLE\r\n#define RTC_TAMPERMASK_FLAG_ENABLED    RTC_TAMPERMASK_FLAG_ENABLE\r\n\r\n#define RTC_MASKTAMPERFLAG_DISABLED   RTC_TAMPERMASK_FLAG_DISABLE\r\n#define RTC_MASKTAMPERFLAG_ENABLED    RTC_TAMPERMASK_FLAG_ENABLE\r\n#define RTC_TAMPERERASEBACKUP_ENABLED RTC_TAMPER_ERASE_BACKUP_ENABLE\r\n#define RTC_TAMPER1_2_INTERRUPT       RTC_ALL_TAMPER_INTERRUPT\r\n#define RTC_TAMPER1_2_3_INTERRUPT     RTC_ALL_TAMPER_INTERRUPT\r\n\r\n#define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT\r\n#define RTC_TIMESTAMPPIN_PA0  RTC_TIMESTAMPPIN_POS1\r\n#define RTC_TIMESTAMPPIN_PI8  RTC_TIMESTAMPPIN_POS1\r\n#define RTC_TIMESTAMPPIN_PC1  RTC_TIMESTAMPPIN_POS2\r\n\r\n#define RTC_OUTPUT_REMAP_PC13 RTC_OUTPUT_REMAP_NONE\r\n#define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1\r\n#define RTC_OUTPUT_REMAP_PB2  RTC_OUTPUT_REMAP_POS1\r\n\r\n#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT\r\n#define RTC_TAMPERPIN_PA0  RTC_TAMPERPIN_POS1\r\n#define RTC_TAMPERPIN_PI8  RTC_TAMPERPIN_POS1\r\n\r\n#if defined(STM32H7)\r\n#define RTC_TAMPCR_TAMPXE  RTC_TAMPER_X\r\n#define RTC_TAMPCR_TAMPXIE RTC_TAMPER_X_INTERRUPT\r\n\r\n#define RTC_TAMPER1_INTERRUPT    RTC_IT_TAMP1\r\n#define RTC_TAMPER2_INTERRUPT    RTC_IT_TAMP2\r\n#define RTC_TAMPER3_INTERRUPT    RTC_IT_TAMP3\r\n#define RTC_ALL_TAMPER_INTERRUPT RTC_IT_TAMPALL\r\n#endif /* STM32H7 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define SMARTCARD_NACK_ENABLED  SMARTCARD_NACK_ENABLE\r\n#define SMARTCARD_NACK_DISABLED SMARTCARD_NACK_DISABLE\r\n\r\n#define SMARTCARD_ONEBIT_SAMPLING_DISABLED SMARTCARD_ONE_BIT_SAMPLE_DISABLE\r\n#define SMARTCARD_ONEBIT_SAMPLING_ENABLED  SMARTCARD_ONE_BIT_SAMPLE_ENABLE\r\n#define SMARTCARD_ONEBIT_SAMPLING_DISABLE  SMARTCARD_ONE_BIT_SAMPLE_DISABLE\r\n#define SMARTCARD_ONEBIT_SAMPLING_ENABLE   SMARTCARD_ONE_BIT_SAMPLE_ENABLE\r\n\r\n#define SMARTCARD_TIMEOUT_DISABLED SMARTCARD_TIMEOUT_DISABLE\r\n#define SMARTCARD_TIMEOUT_ENABLED  SMARTCARD_TIMEOUT_ENABLE\r\n\r\n#define SMARTCARD_LASTBIT_DISABLED SMARTCARD_LASTBIT_DISABLE\r\n#define SMARTCARD_LASTBIT_ENABLED  SMARTCARD_LASTBIT_ENABLE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define SMBUS_DUALADDRESS_DISABLED   SMBUS_DUALADDRESS_DISABLE\r\n#define SMBUS_DUALADDRESS_ENABLED    SMBUS_DUALADDRESS_ENABLE\r\n#define SMBUS_GENERALCALL_DISABLED   SMBUS_GENERALCALL_DISABLE\r\n#define SMBUS_GENERALCALL_ENABLED    SMBUS_GENERALCALL_ENABLE\r\n#define SMBUS_NOSTRETCH_DISABLED     SMBUS_NOSTRETCH_DISABLE\r\n#define SMBUS_NOSTRETCH_ENABLED      SMBUS_NOSTRETCH_ENABLE\r\n#define SMBUS_ANALOGFILTER_ENABLED   SMBUS_ANALOGFILTER_ENABLE\r\n#define SMBUS_ANALOGFILTER_DISABLED  SMBUS_ANALOGFILTER_DISABLE\r\n#define SMBUS_PEC_DISABLED           SMBUS_PEC_DISABLE\r\n#define SMBUS_PEC_ENABLED            SMBUS_PEC_ENABLE\r\n#define HAL_SMBUS_STATE_SLAVE_LISTEN HAL_SMBUS_STATE_LISTEN\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define SPI_TIMODE_DISABLED SPI_TIMODE_DISABLE\r\n#define SPI_TIMODE_ENABLED  SPI_TIMODE_ENABLE\r\n\r\n#define SPI_CRCCALCULATION_DISABLED SPI_CRCCALCULATION_DISABLE\r\n#define SPI_CRCCALCULATION_ENABLED  SPI_CRCCALCULATION_ENABLE\r\n\r\n#define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE\r\n#define SPI_NSS_PULSE_ENABLED  SPI_NSS_PULSE_ENABLE\r\n\r\n#if defined(STM32H7)\r\n\r\n#define SPI_FLAG_TXE  SPI_FLAG_TXP\r\n#define SPI_FLAG_RXNE SPI_FLAG_RXP\r\n\r\n#define SPI_IT_TXE  SPI_IT_TXP\r\n#define SPI_IT_RXNE SPI_IT_RXP\r\n\r\n#define SPI_FRLVL_EMPTY        SPI_RX_FIFO_0PACKET\r\n#define SPI_FRLVL_QUARTER_FULL SPI_RX_FIFO_1PACKET\r\n#define SPI_FRLVL_HALF_FULL    SPI_RX_FIFO_2PACKET\r\n#define SPI_FRLVL_FULL         SPI_RX_FIFO_3PACKET\r\n\r\n#endif /* STM32H7 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define CCER_CCxE_MASK  TIM_CCER_CCxE_MASK\r\n#define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK\r\n\r\n#define TIM_DMABase_CR1   TIM_DMABASE_CR1\r\n#define TIM_DMABase_CR2   TIM_DMABASE_CR2\r\n#define TIM_DMABase_SMCR  TIM_DMABASE_SMCR\r\n#define TIM_DMABase_DIER  TIM_DMABASE_DIER\r\n#define TIM_DMABase_SR    TIM_DMABASE_SR\r\n#define TIM_DMABase_EGR   TIM_DMABASE_EGR\r\n#define TIM_DMABase_CCMR1 TIM_DMABASE_CCMR1\r\n#define TIM_DMABase_CCMR2 TIM_DMABASE_CCMR2\r\n#define TIM_DMABase_CCER  TIM_DMABASE_CCER\r\n#define TIM_DMABase_CNT   TIM_DMABASE_CNT\r\n#define TIM_DMABase_PSC   TIM_DMABASE_PSC\r\n#define TIM_DMABase_ARR   TIM_DMABASE_ARR\r\n#define TIM_DMABase_RCR   TIM_DMABASE_RCR\r\n#define TIM_DMABase_CCR1  TIM_DMABASE_CCR1\r\n#define TIM_DMABase_CCR2  TIM_DMABASE_CCR2\r\n#define TIM_DMABase_CCR3  TIM_DMABASE_CCR3\r\n#define TIM_DMABase_CCR4  TIM_DMABASE_CCR4\r\n#define TIM_DMABase_BDTR  TIM_DMABASE_BDTR\r\n#define TIM_DMABase_DCR   TIM_DMABASE_DCR\r\n#define TIM_DMABase_DMAR  TIM_DMABASE_DMAR\r\n#define TIM_DMABase_OR1   TIM_DMABASE_OR1\r\n#define TIM_DMABase_CCMR3 TIM_DMABASE_CCMR3\r\n#define TIM_DMABase_CCR5  TIM_DMABASE_CCR5\r\n#define TIM_DMABase_CCR6  TIM_DMABASE_CCR6\r\n#define TIM_DMABase_OR2   TIM_DMABASE_OR2\r\n#define TIM_DMABase_OR3   TIM_DMABASE_OR3\r\n#define TIM_DMABase_OR    TIM_DMABASE_OR\r\n\r\n#define TIM_EventSource_Update  TIM_EVENTSOURCE_UPDATE\r\n#define TIM_EventSource_CC1     TIM_EVENTSOURCE_CC1\r\n#define TIM_EventSource_CC2     TIM_EVENTSOURCE_CC2\r\n#define TIM_EventSource_CC3     TIM_EVENTSOURCE_CC3\r\n#define TIM_EventSource_CC4     TIM_EVENTSOURCE_CC4\r\n#define TIM_EventSource_COM     TIM_EVENTSOURCE_COM\r\n#define TIM_EventSource_Trigger TIM_EVENTSOURCE_TRIGGER\r\n#define TIM_EventSource_Break   TIM_EVENTSOURCE_BREAK\r\n#define TIM_EventSource_Break2  TIM_EVENTSOURCE_BREAK2\r\n\r\n#define TIM_DMABurstLength_1Transfer   TIM_DMABURSTLENGTH_1TRANSFER\r\n#define TIM_DMABurstLength_2Transfers  TIM_DMABURSTLENGTH_2TRANSFERS\r\n#define TIM_DMABurstLength_3Transfers  TIM_DMABURSTLENGTH_3TRANSFERS\r\n#define TIM_DMABurstLength_4Transfers  TIM_DMABURSTLENGTH_4TRANSFERS\r\n#define TIM_DMABurstLength_5Transfers  TIM_DMABURSTLENGTH_5TRANSFERS\r\n#define TIM_DMABurstLength_6Transfers  TIM_DMABURSTLENGTH_6TRANSFERS\r\n#define TIM_DMABurstLength_7Transfers  TIM_DMABURSTLENGTH_7TRANSFERS\r\n#define TIM_DMABurstLength_8Transfers  TIM_DMABURSTLENGTH_8TRANSFERS\r\n#define TIM_DMABurstLength_9Transfers  TIM_DMABURSTLENGTH_9TRANSFERS\r\n#define TIM_DMABurstLength_10Transfers TIM_DMABURSTLENGTH_10TRANSFERS\r\n#define TIM_DMABurstLength_11Transfers TIM_DMABURSTLENGTH_11TRANSFERS\r\n#define TIM_DMABurstLength_12Transfers TIM_DMABURSTLENGTH_12TRANSFERS\r\n#define TIM_DMABurstLength_13Transfers TIM_DMABURSTLENGTH_13TRANSFERS\r\n#define TIM_DMABurstLength_14Transfers TIM_DMABURSTLENGTH_14TRANSFERS\r\n#define TIM_DMABurstLength_15Transfers TIM_DMABURSTLENGTH_15TRANSFERS\r\n#define TIM_DMABurstLength_16Transfers TIM_DMABURSTLENGTH_16TRANSFERS\r\n#define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS\r\n#define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS\r\n\r\n#if defined(STM32L0)\r\n#define TIM22_TI1_GPIO1 TIM22_TI1_GPIO\r\n#define TIM22_TI1_GPIO2 TIM22_TI1_GPIO\r\n#endif\r\n\r\n#if defined(STM32F3)\r\n#define IS_TIM_HALL_INTERFACE_INSTANCE IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE\r\n#endif\r\n\r\n#if defined(STM32H7)\r\n#define TIM_TIM1_ETR_COMP1_OUT      TIM_TIM1_ETR_COMP1\r\n#define TIM_TIM1_ETR_COMP2_OUT      TIM_TIM1_ETR_COMP2\r\n#define TIM_TIM8_ETR_COMP1_OUT      TIM_TIM8_ETR_COMP1\r\n#define TIM_TIM8_ETR_COMP2_OUT      TIM_TIM8_ETR_COMP2\r\n#define TIM_TIM2_ETR_COMP1_OUT      TIM_TIM2_ETR_COMP1\r\n#define TIM_TIM2_ETR_COMP2_OUT      TIM_TIM2_ETR_COMP2\r\n#define TIM_TIM3_ETR_COMP1_OUT      TIM_TIM3_ETR_COMP1\r\n#define TIM_TIM1_TI1_COMP1_OUT      TIM_TIM1_TI1_COMP1\r\n#define TIM_TIM8_TI1_COMP2_OUT      TIM_TIM8_TI1_COMP2\r\n#define TIM_TIM2_TI4_COMP1_OUT      TIM_TIM2_TI4_COMP1\r\n#define TIM_TIM2_TI4_COMP2_OUT      TIM_TIM2_TI4_COMP2\r\n#define TIM_TIM2_TI4_COMP1COMP2_OUT TIM_TIM2_TI4_COMP1_COMP2\r\n#define TIM_TIM3_TI1_COMP1_OUT      TIM_TIM3_TI1_COMP1\r\n#define TIM_TIM3_TI1_COMP2_OUT      TIM_TIM3_TI1_COMP2\r\n#define TIM_TIM3_TI1_COMP1COMP2_OUT TIM_TIM3_TI1_COMP1_COMP2\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_TSC_Aliased_Defines HAL TSC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define TSC_SYNC_POL_FALL      TSC_SYNC_POLARITY_FALLING\r\n#define TSC_SYNC_POL_RISE_HIGH TSC_SYNC_POLARITY_RISING\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_UART_Aliased_Defines HAL UART Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define UART_ONEBIT_SAMPLING_DISABLED UART_ONE_BIT_SAMPLE_DISABLE\r\n#define UART_ONEBIT_SAMPLING_ENABLED  UART_ONE_BIT_SAMPLE_ENABLE\r\n#define UART_ONE_BIT_SAMPLE_DISABLED  UART_ONE_BIT_SAMPLE_DISABLE\r\n#define UART_ONE_BIT_SAMPLE_ENABLED   UART_ONE_BIT_SAMPLE_ENABLE\r\n\r\n#define __HAL_UART_ONEBIT_ENABLE  __HAL_UART_ONE_BIT_SAMPLE_ENABLE\r\n#define __HAL_UART_ONEBIT_DISABLE __HAL_UART_ONE_BIT_SAMPLE_DISABLE\r\n\r\n#define __DIV_SAMPLING16      UART_DIV_SAMPLING16\r\n#define __DIVMANT_SAMPLING16  UART_DIVMANT_SAMPLING16\r\n#define __DIVFRAQ_SAMPLING16  UART_DIVFRAQ_SAMPLING16\r\n#define __UART_BRR_SAMPLING16 UART_BRR_SAMPLING16\r\n\r\n#define __DIV_SAMPLING8      UART_DIV_SAMPLING8\r\n#define __DIVMANT_SAMPLING8  UART_DIVMANT_SAMPLING8\r\n#define __DIVFRAQ_SAMPLING8  UART_DIVFRAQ_SAMPLING8\r\n#define __UART_BRR_SAMPLING8 UART_BRR_SAMPLING8\r\n\r\n#define __DIV_LPUART UART_DIV_LPUART\r\n\r\n#define UART_WAKEUPMETHODE_IDLELINE    UART_WAKEUPMETHOD_IDLELINE\r\n#define UART_WAKEUPMETHODE_ADDRESSMARK UART_WAKEUPMETHOD_ADDRESSMARK\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define USART_CLOCK_DISABLED USART_CLOCK_DISABLE\r\n#define USART_CLOCK_ENABLED  USART_CLOCK_ENABLE\r\n\r\n#define USARTNACK_ENABLED  USART_NACK_ENABLE\r\n#define USARTNACK_DISABLED USART_NACK_DISABLE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_WWDG_Aliased_Defines HAL WWDG Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define CFR_BASE WWDG_CFR_BASE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_CAN_Aliased_Defines HAL CAN Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define CAN_FilterFIFO0      CAN_FILTER_FIFO0\r\n#define CAN_FilterFIFO1      CAN_FILTER_FIFO1\r\n#define CAN_IT_RQCP0         CAN_IT_TME\r\n#define CAN_IT_RQCP1         CAN_IT_TME\r\n#define CAN_IT_RQCP2         CAN_IT_TME\r\n#define INAK_TIMEOUT         CAN_TIMEOUT_VALUE\r\n#define SLAK_TIMEOUT         CAN_TIMEOUT_VALUE\r\n#define CAN_TXSTATUS_FAILED  ((uint8_t)0x00U)\r\n#define CAN_TXSTATUS_OK      ((uint8_t)0x01U)\r\n#define CAN_TXSTATUS_PENDING ((uint8_t)0x02U)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define VLAN_TAG            ETH_VLAN_TAG\r\n#define MIN_ETH_PAYLOAD     ETH_MIN_ETH_PAYLOAD\r\n#define MAX_ETH_PAYLOAD     ETH_MAX_ETH_PAYLOAD\r\n#define JUMBO_FRAME_PAYLOAD ETH_JUMBO_FRAME_PAYLOAD\r\n#define MACMIIAR_CR_MASK    ETH_MACMIIAR_CR_MASK\r\n#define MACCR_CLEAR_MASK    ETH_MACCR_CLEAR_MASK\r\n#define MACFCR_CLEAR_MASK   ETH_MACFCR_CLEAR_MASK\r\n#define DMAOMR_CLEAR_MASK   ETH_DMAOMR_CLEAR_MASK\r\n\r\n#define ETH_MMCCR       0x00000100U\r\n#define ETH_MMCRIR      0x00000104U\r\n#define ETH_MMCTIR      0x00000108U\r\n#define ETH_MMCRIMR     0x0000010CU\r\n#define ETH_MMCTIMR     0x00000110U\r\n#define ETH_MMCTGFSCCR  0x0000014CU\r\n#define ETH_MMCTGFMSCCR 0x00000150U\r\n#define ETH_MMCTGFCR    0x00000168U\r\n#define ETH_MMCRFCECR   0x00000194U\r\n#define ETH_MMCRFAECR   0x00000198U\r\n#define ETH_MMCRGUFCR   0x000001C4U\r\n\r\n#define ETH_MAC_TXFIFO_FULL                           0x02000000U /* Tx FIFO full */\r\n#define ETH_MAC_TXFIFONOT_EMPTY                       0x01000000U /* Tx FIFO not empty */\r\n#define ETH_MAC_TXFIFO_WRITE_ACTIVE                   0x00400000U /* Tx FIFO write active */\r\n#define ETH_MAC_TXFIFO_IDLE                           0x00000000U /* Tx FIFO read status: Idle */\r\n#define ETH_MAC_TXFIFO_READ                           0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */\r\n#define ETH_MAC_TXFIFO_WAITING                        0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */\r\n#define ETH_MAC_TXFIFO_WRITING                        0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */\r\n#define ETH_MAC_TRANSMISSION_PAUSE                    0x00080000U /* MAC transmitter in pause */\r\n#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE          0x00000000U /* MAC transmit frame controller: Idle */\r\n#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING       0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */\r\n#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */\r\n#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING  0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */\r\n#define ETH_MAC_MII_TRANSMIT_ACTIVE                   0x00010000U /* MAC MII transmit engine active */\r\n#define ETH_MAC_RXFIFO_EMPTY                          0x00000000U /* Rx FIFO fill level: empty */\r\n#define ETH_MAC_RXFIFO_BELOW_THRESHOLD                0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */\r\n#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD                0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */\r\n#define ETH_MAC_RXFIFO_FULL                           0x00000300U /* Rx FIFO fill level: full */\r\n#if defined(STM32F1)\r\n#else\r\n#define ETH_MAC_READCONTROLLER_IDLE           0x00000000U /* Rx FIFO read controller IDLE state */\r\n#define ETH_MAC_READCONTROLLER_READING_DATA   0x00000020U /* Rx FIFO read controller Reading frame data */\r\n#define ETH_MAC_READCONTROLLER_READING_STATUS 0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */\r\n#endif\r\n#define ETH_MAC_READCONTROLLER_FLUSHING     0x00000060U /* Rx FIFO read controller Flushing the frame data and status */\r\n#define ETH_MAC_RXFIFO_WRITE_ACTIVE         0x00000010U /* Rx FIFO write controller active */\r\n#define ETH_MAC_SMALL_FIFO_NOTACTIVE        0x00000000U /* MAC small FIFO read / write controllers not active */\r\n#define ETH_MAC_SMALL_FIFO_READ_ACTIVE      0x00000002U /* MAC small FIFO read controller active */\r\n#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE     0x00000004U /* MAC small FIFO write controller active */\r\n#define ETH_MAC_SMALL_FIFO_RW_ACTIVE        0x00000006U /* MAC small FIFO read / write controllers active */\r\n#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE 0x00000001U /* MAC MII receive protocol engine active */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_DCMI_ERROR_OVF HAL_DCMI_ERROR_OVR\r\n#define DCMI_IT_OVF        DCMI_IT_OVR\r\n#define DCMI_FLAG_OVFRI    DCMI_FLAG_OVRRI\r\n#define DCMI_FLAG_OVFMI    DCMI_FLAG_OVRMI\r\n\r\n#define HAL_DCMI_ConfigCROP  HAL_DCMI_ConfigCrop\r\n#define HAL_DCMI_EnableCROP  HAL_DCMI_EnableCrop\r\n#define HAL_DCMI_DisableCROP HAL_DCMI_DisableCrop\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx) \\\r\n    || defined(STM32H7)\r\n/** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888\r\n#define DMA2D_RGB888   DMA2D_OUTPUT_RGB888\r\n#define DMA2D_RGB565   DMA2D_OUTPUT_RGB565\r\n#define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555\r\n#define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444\r\n\r\n#define CM_ARGB8888 DMA2D_INPUT_ARGB8888\r\n#define CM_RGB888   DMA2D_INPUT_RGB888\r\n#define CM_RGB565   DMA2D_INPUT_RGB565\r\n#define CM_ARGB1555 DMA2D_INPUT_ARGB1555\r\n#define CM_ARGB4444 DMA2D_INPUT_ARGB4444\r\n#define CM_L8       DMA2D_INPUT_L8\r\n#define CM_AL44     DMA2D_INPUT_AL44\r\n#define CM_AL88     DMA2D_INPUT_AL88\r\n#define CM_L4       DMA2D_INPUT_L4\r\n#define CM_A8       DMA2D_INPUT_A8\r\n#define CM_A4       DMA2D_INPUT_A4\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32L4 ||  STM32F7 ||  STM32F4 ||  STM32H7 */\r\n\r\n/** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_CRYP_Aliased_Functions HAL CRYP Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_HASH_STATETypeDef  HAL_HASH_StateTypeDef\r\n#define HAL_HASHPhaseTypeDef   HAL_HASH_PhaseTypeDef\r\n#define HAL_HMAC_MD5_Finish    HAL_HASH_MD5_Finish\r\n#define HAL_HMAC_SHA1_Finish   HAL_HASH_SHA1_Finish\r\n#define HAL_HMAC_SHA224_Finish HAL_HASH_SHA224_Finish\r\n#define HAL_HMAC_SHA256_Finish HAL_HASH_SHA256_Finish\r\n\r\n/*HASH Algorithm Selection*/\r\n\r\n#define HASH_AlgoSelection_SHA1   HASH_ALGOSELECTION_SHA1\r\n#define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224\r\n#define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256\r\n#define HASH_AlgoSelection_MD5    HASH_ALGOSELECTION_MD5\r\n\r\n#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH\r\n#define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC\r\n\r\n#define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY\r\n#define HASH_HMACKeyType_LongKey  HASH_HMAC_KEYTYPE_LONGKEY\r\n\r\n#if defined(STM32L4) || defined(STM32L5) || defined(STM32F2) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7)\r\n\r\n#define HAL_HASH_MD5_Accumulate        HAL_HASH_MD5_Accmlt\r\n#define HAL_HASH_MD5_Accumulate_End    HAL_HASH_MD5_Accmlt_End\r\n#define HAL_HASH_MD5_Accumulate_IT     HAL_HASH_MD5_Accmlt_IT\r\n#define HAL_HASH_MD5_Accumulate_End_IT HAL_HASH_MD5_Accmlt_End_IT\r\n\r\n#define HAL_HASH_SHA1_Accumulate        HAL_HASH_SHA1_Accmlt\r\n#define HAL_HASH_SHA1_Accumulate_End    HAL_HASH_SHA1_Accmlt_End\r\n#define HAL_HASH_SHA1_Accumulate_IT     HAL_HASH_SHA1_Accmlt_IT\r\n#define HAL_HASH_SHA1_Accumulate_End_IT HAL_HASH_SHA1_Accmlt_End_IT\r\n\r\n#define HAL_HASHEx_SHA224_Accumulate        HAL_HASHEx_SHA224_Accmlt\r\n#define HAL_HASHEx_SHA224_Accumulate_End    HAL_HASHEx_SHA224_Accmlt_End\r\n#define HAL_HASHEx_SHA224_Accumulate_IT     HAL_HASHEx_SHA224_Accmlt_IT\r\n#define HAL_HASHEx_SHA224_Accumulate_End_IT HAL_HASHEx_SHA224_Accmlt_End_IT\r\n\r\n#define HAL_HASHEx_SHA256_Accumulate        HAL_HASHEx_SHA256_Accmlt\r\n#define HAL_HASHEx_SHA256_Accumulate_End    HAL_HASHEx_SHA256_Accmlt_End\r\n#define HAL_HASHEx_SHA256_Accumulate_IT     HAL_HASHEx_SHA256_Accmlt_IT\r\n#define HAL_HASHEx_SHA256_Accumulate_End_IT HAL_HASHEx_SHA256_Accmlt_End_IT\r\n\r\n#endif /* STM32L4 || STM32L5 || STM32F2 || STM32F4 || STM32F7 || STM32H7 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_EnableDBGSleepMode              HAL_DBGMCU_EnableDBGSleepMode\r\n#define HAL_DisableDBGSleepMode             HAL_DBGMCU_DisableDBGSleepMode\r\n#define HAL_EnableDBGStopMode               HAL_DBGMCU_EnableDBGStopMode\r\n#define HAL_DisableDBGStopMode              HAL_DBGMCU_DisableDBGStopMode\r\n#define HAL_EnableDBGStandbyMode            HAL_DBGMCU_EnableDBGStandbyMode\r\n#define HAL_DisableDBGStandbyMode           HAL_DBGMCU_DisableDBGStandbyMode\r\n#define HAL_DBG_LowPowerConfig(Periph, cmd) (((cmd) == ENABLE) ? HAL_DBGMCU_DBG_EnableLowPowerConfig(Periph) : HAL_DBGMCU_DBG_DisableLowPowerConfig(Periph))\r\n#define HAL_VREFINT_OutputSelect            HAL_SYSCFG_VREFINT_OutputSelect\r\n#define HAL_Lock_Cmd(cmd)                   (((cmd) == ENABLE) ? HAL_SYSCFG_Enable_Lock_VREFINT() : HAL_SYSCFG_Disable_Lock_VREFINT())\r\n#if defined(STM32L0)\r\n#else\r\n#define HAL_VREFINT_Cmd(cmd) (((cmd) == ENABLE) ? HAL_SYSCFG_EnableVREFINT() : HAL_SYSCFG_DisableVREFINT())\r\n#endif\r\n#define HAL_ADC_EnableBuffer_Cmd(cmd)       (((cmd) == ENABLE) ? HAL_ADCEx_EnableVREFINT() : HAL_ADCEx_DisableVREFINT())\r\n#define HAL_ADC_EnableBufferSensor_Cmd(cmd) (((cmd) == ENABLE) ? HAL_ADCEx_EnableVREFINTTempSensor() : HAL_ADCEx_DisableVREFINTTempSensor())\r\n#if defined(STM32H7A3xx) || defined(STM32H7B3xx) || defined(STM32H7B0xx) || defined(STM32H7A3xxQ) || defined(STM32H7B3xxQ) || defined(STM32H7B0xxQ)\r\n#define HAL_EnableSRDomainDBGStopMode     HAL_EnableDomain3DBGStopMode\r\n#define HAL_DisableSRDomainDBGStopMode    HAL_DisableDomain3DBGStopMode\r\n#define HAL_EnableSRDomainDBGStandbyMode  HAL_EnableDomain3DBGStandbyMode\r\n#define HAL_DisableSRDomainDBGStandbyMode HAL_DisableDomain3DBGStandbyMode\r\n#endif /* STM32H7A3xx || STM32H7B3xx || STM32H7B0xx || STM32H7A3xxQ || STM32H7B3xxQ  || STM32H7B0xxQ */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_FLASH_Aliased_Functions HAL FLASH Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define FLASH_HalfPageProgram     HAL_FLASHEx_HalfPageProgram\r\n#define FLASH_EnableRunPowerDown  HAL_FLASHEx_EnableRunPowerDown\r\n#define FLASH_DisableRunPowerDown HAL_FLASHEx_DisableRunPowerDown\r\n#define HAL_DATA_EEPROMEx_Unlock  HAL_FLASHEx_DATAEEPROM_Unlock\r\n#define HAL_DATA_EEPROMEx_Lock    HAL_FLASHEx_DATAEEPROM_Lock\r\n#define HAL_DATA_EEPROMEx_Erase   HAL_FLASHEx_DATAEEPROM_Erase\r\n#define HAL_DATA_EEPROMEx_Program HAL_FLASHEx_DATAEEPROM_Program\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_I2C_Aliased_Functions HAL I2C Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_I2CEx_AnalogFilter_Config     HAL_I2CEx_ConfigAnalogFilter\r\n#define HAL_I2CEx_DigitalFilter_Config    HAL_I2CEx_ConfigDigitalFilter\r\n#define HAL_FMPI2CEx_AnalogFilter_Config  HAL_FMPI2CEx_ConfigAnalogFilter\r\n#define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter\r\n\r\n#define HAL_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus, cmd) (((cmd) == ENABLE) ? HAL_I2CEx_EnableFastModePlus(SYSCFG_I2CFastModePlus) : HAL_I2CEx_DisableFastModePlus(SYSCFG_I2CFastModePlus))\r\n\r\n#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) \\\r\n    || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4) || defined(STM32L1)\r\n#define HAL_I2C_Master_Sequential_Transmit_IT HAL_I2C_Master_Seq_Transmit_IT\r\n#define HAL_I2C_Master_Sequential_Receive_IT  HAL_I2C_Master_Seq_Receive_IT\r\n#define HAL_I2C_Slave_Sequential_Transmit_IT  HAL_I2C_Slave_Seq_Transmit_IT\r\n#define HAL_I2C_Slave_Sequential_Receive_IT   HAL_I2C_Slave_Seq_Receive_IT\r\n#endif /* STM32H7 || STM32WB  || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 || STM32L1 */\r\n#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4) || defined(STM32L1)\r\n#define HAL_I2C_Master_Sequential_Transmit_DMA HAL_I2C_Master_Seq_Transmit_DMA\r\n#define HAL_I2C_Master_Sequential_Receive_DMA  HAL_I2C_Master_Seq_Receive_DMA\r\n#define HAL_I2C_Slave_Sequential_Transmit_DMA  HAL_I2C_Slave_Seq_Transmit_DMA\r\n#define HAL_I2C_Slave_Sequential_Receive_DMA   HAL_I2C_Slave_Seq_Receive_DMA\r\n#endif /* STM32H7 || STM32WB  || STM32G0 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 || STM32L1 */\r\n\r\n#if defined(STM32F4)\r\n#define HAL_FMPI2C_Master_Sequential_Transmit_IT  HAL_FMPI2C_Master_Seq_Transmit_IT\r\n#define HAL_FMPI2C_Master_Sequential_Receive_IT   HAL_FMPI2C_Master_Seq_Receive_IT\r\n#define HAL_FMPI2C_Slave_Sequential_Transmit_IT   HAL_FMPI2C_Slave_Seq_Transmit_IT\r\n#define HAL_FMPI2C_Slave_Sequential_Receive_IT    HAL_FMPI2C_Slave_Seq_Receive_IT\r\n#define HAL_FMPI2C_Master_Sequential_Transmit_DMA HAL_FMPI2C_Master_Seq_Transmit_DMA\r\n#define HAL_FMPI2C_Master_Sequential_Receive_DMA  HAL_FMPI2C_Master_Seq_Receive_DMA\r\n#define HAL_FMPI2C_Slave_Sequential_Transmit_DMA  HAL_FMPI2C_Slave_Seq_Transmit_DMA\r\n#define HAL_FMPI2C_Slave_Sequential_Receive_DMA   HAL_FMPI2C_Slave_Seq_Receive_DMA\r\n#endif /* STM32F4 */\r\n       /**\r\n        * @}\r\n        */\r\n\r\n/** @defgroup HAL_PWR_Aliased HAL PWR Aliased maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#if defined(STM32G0)\r\n#define HAL_PWR_ConfigPVD      HAL_PWREx_ConfigPVD\r\n#define HAL_PWR_EnablePVD      HAL_PWREx_EnablePVD\r\n#define HAL_PWR_DisablePVD     HAL_PWREx_DisablePVD\r\n#define HAL_PWR_PVD_IRQHandler HAL_PWREx_PVD_IRQHandler\r\n#endif\r\n#define HAL_PWR_PVDConfig                HAL_PWR_ConfigPVD\r\n#define HAL_PWR_DisableBkUpReg           HAL_PWREx_DisableBkUpReg\r\n#define HAL_PWR_DisableFlashPowerDown    HAL_PWREx_DisableFlashPowerDown\r\n#define HAL_PWR_DisableVddio2Monitor     HAL_PWREx_DisableVddio2Monitor\r\n#define HAL_PWR_EnableBkUpReg            HAL_PWREx_EnableBkUpReg\r\n#define HAL_PWR_EnableFlashPowerDown     HAL_PWREx_EnableFlashPowerDown\r\n#define HAL_PWR_EnableVddio2Monitor      HAL_PWREx_EnableVddio2Monitor\r\n#define HAL_PWR_PVD_PVM_IRQHandler       HAL_PWREx_PVD_PVM_IRQHandler\r\n#define HAL_PWR_PVDLevelConfig           HAL_PWR_ConfigPVD\r\n#define HAL_PWR_Vddio2Monitor_IRQHandler HAL_PWREx_Vddio2Monitor_IRQHandler\r\n#define HAL_PWR_Vddio2MonitorCallback    HAL_PWREx_Vddio2MonitorCallback\r\n#define HAL_PWREx_ActivateOverDrive      HAL_PWREx_EnableOverDrive\r\n#define HAL_PWREx_DeactivateOverDrive    HAL_PWREx_DisableOverDrive\r\n#define HAL_PWREx_DisableSDADCAnalog     HAL_PWREx_DisableSDADC\r\n#define HAL_PWREx_EnableSDADCAnalog      HAL_PWREx_EnableSDADC\r\n#define HAL_PWREx_PVMConfig              HAL_PWREx_ConfigPVM\r\n\r\n#define PWR_MODE_NORMAL               PWR_PVD_MODE_NORMAL\r\n#define PWR_MODE_IT_RISING            PWR_PVD_MODE_IT_RISING\r\n#define PWR_MODE_IT_FALLING           PWR_PVD_MODE_IT_FALLING\r\n#define PWR_MODE_IT_RISING_FALLING    PWR_PVD_MODE_IT_RISING_FALLING\r\n#define PWR_MODE_EVENT_RISING         PWR_PVD_MODE_EVENT_RISING\r\n#define PWR_MODE_EVENT_FALLING        PWR_PVD_MODE_EVENT_FALLING\r\n#define PWR_MODE_EVENT_RISING_FALLING PWR_PVD_MODE_EVENT_RISING_FALLING\r\n\r\n#define CR_OFFSET_BB     PWR_CR_OFFSET_BB\r\n#define CSR_OFFSET_BB    PWR_CSR_OFFSET_BB\r\n#define PMODE_BIT_NUMBER VOS_BIT_NUMBER\r\n#define CR_PMODE_BB      CR_VOS_BB\r\n\r\n#define DBP_BitNumber    DBP_BIT_NUMBER\r\n#define PVDE_BitNumber   PVDE_BIT_NUMBER\r\n#define PMODE_BitNumber  PMODE_BIT_NUMBER\r\n#define EWUP_BitNumber   EWUP_BIT_NUMBER\r\n#define FPDS_BitNumber   FPDS_BIT_NUMBER\r\n#define ODEN_BitNumber   ODEN_BIT_NUMBER\r\n#define ODSWEN_BitNumber ODSWEN_BIT_NUMBER\r\n#define MRLVDS_BitNumber MRLVDS_BIT_NUMBER\r\n#define LPLVDS_BitNumber LPLVDS_BIT_NUMBER\r\n#define BRE_BitNumber    BRE_BIT_NUMBER\r\n\r\n#define PWR_MODE_EVT PWR_PVD_MODE_NORMAL\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_SMBUS_Slave_Listen_IT         HAL_SMBUS_EnableListen_IT\r\n#define HAL_SMBUS_SlaveAddrCallback       HAL_SMBUS_AddrCallback\r\n#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SPI_Aliased_Functions HAL SPI Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_TIM_DMADelayPulseCplt    TIM_DMADelayPulseCplt\r\n#define HAL_TIM_DMAError             TIM_DMAError\r\n#define HAL_TIM_DMACaptureCplt       TIM_DMACaptureCplt\r\n#define HAL_TIMEx_DMACommutationCplt TIMEx_DMACommutationCplt\r\n#if defined(STM32H7) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4)\r\n#define HAL_TIM_SlaveConfigSynchronization    HAL_TIM_SlaveConfigSynchro\r\n#define HAL_TIM_SlaveConfigSynchronization_IT HAL_TIM_SlaveConfigSynchro_IT\r\n#define HAL_TIMEx_CommutationCallback         HAL_TIMEx_CommutCallback\r\n#define HAL_TIMEx_ConfigCommutationEvent      HAL_TIMEx_ConfigCommutEvent\r\n#define HAL_TIMEx_ConfigCommutationEvent_IT   HAL_TIMEx_ConfigCommutEvent_IT\r\n#define HAL_TIMEx_ConfigCommutationEvent_DMA  HAL_TIMEx_ConfigCommutEvent_DMA\r\n#endif /* STM32H7 || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_LTDC_LineEvenCallback                   HAL_LTDC_LineEventCallback\r\n#define HAL_LTDC_Relaod                             HAL_LTDC_Reload\r\n#define HAL_LTDC_StructInitFromVideoConfig          HAL_LTDCEx_StructInitFromVideoConfig\r\n#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macros ------------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_AES_Aliased_Macros HAL CRYP Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define AES_IT_CC    CRYP_IT_CC\r\n#define AES_IT_ERR   CRYP_IT_ERR\r\n#define AES_FLAG_CCF CRYP_FLAG_CCF\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_GET_BOOT_MODE           __HAL_SYSCFG_GET_BOOT_MODE\r\n#define __HAL_REMAPMEMORY_FLASH       __HAL_SYSCFG_REMAPMEMORY_FLASH\r\n#define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH\r\n#define __HAL_REMAPMEMORY_SRAM        __HAL_SYSCFG_REMAPMEMORY_SRAM\r\n#define __HAL_REMAPMEMORY_FMC         __HAL_SYSCFG_REMAPMEMORY_FMC\r\n#define __HAL_REMAPMEMORY_FMC_SDRAM   __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM\r\n#define __HAL_REMAPMEMORY_FSMC        __HAL_SYSCFG_REMAPMEMORY_FSMC\r\n#define __HAL_REMAPMEMORY_QUADSPI     __HAL_SYSCFG_REMAPMEMORY_QUADSPI\r\n#define __HAL_FMC_BANK                __HAL_SYSCFG_FMC_BANK\r\n#define __HAL_GET_FLAG                __HAL_SYSCFG_GET_FLAG\r\n#define __HAL_CLEAR_FLAG              __HAL_SYSCFG_CLEAR_FLAG\r\n#define __HAL_VREFINT_OUT_ENABLE      __HAL_SYSCFG_VREFINT_OUT_ENABLE\r\n#define __HAL_VREFINT_OUT_DISABLE     __HAL_SYSCFG_VREFINT_OUT_DISABLE\r\n#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE\r\n\r\n#define SYSCFG_FLAG_VREF_READY        SYSCFG_FLAG_VREFINT_READY\r\n#define SYSCFG_FLAG_RC48              RCC_FLAG_HSI48\r\n#define IS_SYSCFG_FASTMODEPLUS_CONFIG IS_I2C_FASTMODEPLUS\r\n#define UFB_MODE_BitNumber            UFB_MODE_BIT_NUMBER\r\n#define CMP_PD_BitNumber              CMP_PD_BIT_NUMBER\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __ADC_ENABLE                                     __HAL_ADC_ENABLE\r\n#define __ADC_DISABLE                                    __HAL_ADC_DISABLE\r\n#define __HAL_ADC_ENABLING_CONDITIONS                    ADC_ENABLING_CONDITIONS\r\n#define __HAL_ADC_DISABLING_CONDITIONS                   ADC_DISABLING_CONDITIONS\r\n#define __HAL_ADC_IS_ENABLED                             ADC_IS_ENABLE\r\n#define __ADC_IS_ENABLED                                 ADC_IS_ENABLE\r\n#define __HAL_ADC_IS_SOFTWARE_START_REGULAR              ADC_IS_SOFTWARE_START_REGULAR\r\n#define __HAL_ADC_IS_SOFTWARE_START_INJECTED             ADC_IS_SOFTWARE_START_INJECTED\r\n#define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED\r\n#define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR          ADC_IS_CONVERSION_ONGOING_REGULAR\r\n#define __HAL_ADC_IS_CONVERSION_ONGOING_INJECTED         ADC_IS_CONVERSION_ONGOING_INJECTED\r\n#define __HAL_ADC_IS_CONVERSION_ONGOING                  ADC_IS_CONVERSION_ONGOING\r\n#define __HAL_ADC_CLEAR_ERRORCODE                        ADC_CLEAR_ERRORCODE\r\n\r\n#define __HAL_ADC_GET_RESOLUTION              ADC_GET_RESOLUTION\r\n#define __HAL_ADC_JSQR_RK                     ADC_JSQR_RK\r\n#define __HAL_ADC_CFGR_AWD1CH                 ADC_CFGR_AWD1CH_SHIFT\r\n#define __HAL_ADC_CFGR_AWD23CR                ADC_CFGR_AWD23CR\r\n#define __HAL_ADC_CFGR_INJECT_AUTO_CONVERSION ADC_CFGR_INJECT_AUTO_CONVERSION\r\n#define __HAL_ADC_CFGR_INJECT_CONTEXT_QUEUE   ADC_CFGR_INJECT_CONTEXT_QUEUE\r\n#define __HAL_ADC_CFGR_INJECT_DISCCONTINUOUS  ADC_CFGR_INJECT_DISCCONTINUOUS\r\n#define __HAL_ADC_CFGR_REG_DISCCONTINUOUS     ADC_CFGR_REG_DISCCONTINUOUS\r\n#define __HAL_ADC_CFGR_DISCONTINUOUS_NUM      ADC_CFGR_DISCONTINUOUS_NUM\r\n#define __HAL_ADC_CFGR_AUTOWAIT               ADC_CFGR_AUTOWAIT\r\n#define __HAL_ADC_CFGR_CONTINUOUS             ADC_CFGR_CONTINUOUS\r\n#define __HAL_ADC_CFGR_OVERRUN                ADC_CFGR_OVERRUN\r\n#define __HAL_ADC_CFGR_DMACONTREQ             ADC_CFGR_DMACONTREQ\r\n#define __HAL_ADC_CFGR_EXTSEL                 ADC_CFGR_EXTSEL_SET\r\n#define __HAL_ADC_JSQR_JEXTSEL                ADC_JSQR_JEXTSEL_SET\r\n#define __HAL_ADC_OFR_CHANNEL                 ADC_OFR_CHANNEL\r\n#define __HAL_ADC_DIFSEL_CHANNEL              ADC_DIFSEL_CHANNEL\r\n#define __HAL_ADC_CALFACT_DIFF_SET            ADC_CALFACT_DIFF_SET\r\n#define __HAL_ADC_CALFACT_DIFF_GET            ADC_CALFACT_DIFF_GET\r\n#define __HAL_ADC_TRX_HIGHTHRESHOLD           ADC_TRX_HIGHTHRESHOLD\r\n\r\n#define __HAL_ADC_OFFSET_SHIFT_RESOLUTION         ADC_OFFSET_SHIFT_RESOLUTION\r\n#define __HAL_ADC_AWD1THRESHOLD_SHIFT_RESOLUTION  ADC_AWD1THRESHOLD_SHIFT_RESOLUTION\r\n#define __HAL_ADC_AWD23THRESHOLD_SHIFT_RESOLUTION ADC_AWD23THRESHOLD_SHIFT_RESOLUTION\r\n#define __HAL_ADC_COMMON_REGISTER                 ADC_COMMON_REGISTER\r\n#define __HAL_ADC_COMMON_CCR_MULTI                ADC_COMMON_CCR_MULTI\r\n#define __HAL_ADC_MULTIMODE_IS_ENABLED            ADC_MULTIMODE_IS_ENABLE\r\n#define __ADC_MULTIMODE_IS_ENABLED                ADC_MULTIMODE_IS_ENABLE\r\n#define __HAL_ADC_NONMULTIMODE_OR_MULTIMODEMASTER ADC_NONMULTIMODE_OR_MULTIMODEMASTER\r\n#define __HAL_ADC_COMMON_ADC_OTHER                ADC_COMMON_ADC_OTHER\r\n#define __HAL_ADC_MULTI_SLAVE                     ADC_MULTI_SLAVE\r\n\r\n#define __HAL_ADC_SQR1_L                ADC_SQR1_L_SHIFT\r\n#define __HAL_ADC_JSQR_JL               ADC_JSQR_JL_SHIFT\r\n#define __HAL_ADC_JSQR_RK_JL            ADC_JSQR_RK_JL\r\n#define __HAL_ADC_CR1_DISCONTINUOUS_NUM ADC_CR1_DISCONTINUOUS_NUM\r\n#define __HAL_ADC_CR1_SCAN              ADC_CR1_SCAN_SET\r\n#define __HAL_ADC_CONVCYCLES_MAX_RANGE  ADC_CONVCYCLES_MAX_RANGE\r\n#define __HAL_ADC_CLOCK_PRESCALER_RANGE ADC_CLOCK_PRESCALER_RANGE\r\n#define __HAL_ADC_GET_CLOCK_PRESCALER   ADC_GET_CLOCK_PRESCALER\r\n\r\n#define __HAL_ADC_SQR1              ADC_SQR1\r\n#define __HAL_ADC_SMPR1             ADC_SMPR1\r\n#define __HAL_ADC_SMPR2             ADC_SMPR2\r\n#define __HAL_ADC_SQR3_RK           ADC_SQR3_RK\r\n#define __HAL_ADC_SQR2_RK           ADC_SQR2_RK\r\n#define __HAL_ADC_SQR1_RK           ADC_SQR1_RK\r\n#define __HAL_ADC_CR2_CONTINUOUS    ADC_CR2_CONTINUOUS\r\n#define __HAL_ADC_CR1_DISCONTINUOUS ADC_CR1_DISCONTINUOUS\r\n#define __HAL_ADC_CR1_SCANCONV      ADC_CR1_SCANCONV\r\n#define __HAL_ADC_CR2_EOCSelection  ADC_CR2_EOCSelection\r\n#define __HAL_ADC_CR2_DMAContReq    ADC_CR2_DMAContReq\r\n#define __HAL_ADC_JSQR              ADC_JSQR\r\n\r\n#define __HAL_ADC_CHSELR_CHANNEL           ADC_CHSELR_CHANNEL\r\n#define __HAL_ADC_CFGR1_REG_DISCCONTINUOUS ADC_CFGR1_REG_DISCCONTINUOUS\r\n#define __HAL_ADC_CFGR1_AUTOOFF            ADC_CFGR1_AUTOOFF\r\n#define __HAL_ADC_CFGR1_AUTOWAIT           ADC_CFGR1_AUTOWAIT\r\n#define __HAL_ADC_CFGR1_CONTINUOUS         ADC_CFGR1_CONTINUOUS\r\n#define __HAL_ADC_CFGR1_OVERRUN            ADC_CFGR1_OVERRUN\r\n#define __HAL_ADC_CFGR1_SCANDIR            ADC_CFGR1_SCANDIR\r\n#define __HAL_ADC_CFGR1_DMACONTREQ         ADC_CFGR1_DMACONTREQ\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_DAC_Aliased_Macros HAL DAC Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_DHR12R1_ALIGNEMENT DAC_DHR12R1_ALIGNMENT\r\n#define __HAL_DHR12R2_ALIGNEMENT DAC_DHR12R2_ALIGNMENT\r\n#define __HAL_DHR12RD_ALIGNEMENT DAC_DHR12RD_ALIGNMENT\r\n#define IS_DAC_GENERATE_WAVE     IS_DAC_WAVE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_FREEZE_TIM1_DBGMCU   __HAL_DBGMCU_FREEZE_TIM1\r\n#define __HAL_UNFREEZE_TIM1_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM1\r\n#define __HAL_FREEZE_TIM2_DBGMCU   __HAL_DBGMCU_FREEZE_TIM2\r\n#define __HAL_UNFREEZE_TIM2_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM2\r\n#define __HAL_FREEZE_TIM3_DBGMCU   __HAL_DBGMCU_FREEZE_TIM3\r\n#define __HAL_UNFREEZE_TIM3_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM3\r\n#define __HAL_FREEZE_TIM4_DBGMCU   __HAL_DBGMCU_FREEZE_TIM4\r\n#define __HAL_UNFREEZE_TIM4_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM4\r\n#define __HAL_FREEZE_TIM5_DBGMCU   __HAL_DBGMCU_FREEZE_TIM5\r\n#define __HAL_UNFREEZE_TIM5_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM5\r\n#define __HAL_FREEZE_TIM6_DBGMCU   __HAL_DBGMCU_FREEZE_TIM6\r\n#define __HAL_UNFREEZE_TIM6_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM6\r\n#define __HAL_FREEZE_TIM7_DBGMCU   __HAL_DBGMCU_FREEZE_TIM7\r\n#define __HAL_UNFREEZE_TIM7_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM7\r\n#define __HAL_FREEZE_TIM8_DBGMCU   __HAL_DBGMCU_FREEZE_TIM8\r\n#define __HAL_UNFREEZE_TIM8_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM8\r\n\r\n#define __HAL_FREEZE_TIM9_DBGMCU    __HAL_DBGMCU_FREEZE_TIM9\r\n#define __HAL_UNFREEZE_TIM9_DBGMCU  __HAL_DBGMCU_UNFREEZE_TIM9\r\n#define __HAL_FREEZE_TIM10_DBGMCU   __HAL_DBGMCU_FREEZE_TIM10\r\n#define __HAL_UNFREEZE_TIM10_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM10\r\n#define __HAL_FREEZE_TIM11_DBGMCU   __HAL_DBGMCU_FREEZE_TIM11\r\n#define __HAL_UNFREEZE_TIM11_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM11\r\n#define __HAL_FREEZE_TIM12_DBGMCU   __HAL_DBGMCU_FREEZE_TIM12\r\n#define __HAL_UNFREEZE_TIM12_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM12\r\n#define __HAL_FREEZE_TIM13_DBGMCU   __HAL_DBGMCU_FREEZE_TIM13\r\n#define __HAL_UNFREEZE_TIM13_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM13\r\n#define __HAL_FREEZE_TIM14_DBGMCU   __HAL_DBGMCU_FREEZE_TIM14\r\n#define __HAL_UNFREEZE_TIM14_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM14\r\n#define __HAL_FREEZE_CAN2_DBGMCU    __HAL_DBGMCU_FREEZE_CAN2\r\n#define __HAL_UNFREEZE_CAN2_DBGMCU  __HAL_DBGMCU_UNFREEZE_CAN2\r\n\r\n#define __HAL_FREEZE_TIM15_DBGMCU   __HAL_DBGMCU_FREEZE_TIM15\r\n#define __HAL_UNFREEZE_TIM15_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM15\r\n#define __HAL_FREEZE_TIM16_DBGMCU   __HAL_DBGMCU_FREEZE_TIM16\r\n#define __HAL_UNFREEZE_TIM16_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM16\r\n#define __HAL_FREEZE_TIM17_DBGMCU   __HAL_DBGMCU_FREEZE_TIM17\r\n#define __HAL_UNFREEZE_TIM17_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM17\r\n#define __HAL_FREEZE_RTC_DBGMCU     __HAL_DBGMCU_FREEZE_RTC\r\n#define __HAL_UNFREEZE_RTC_DBGMCU   __HAL_DBGMCU_UNFREEZE_RTC\r\n#if defined(STM32H7)\r\n#define __HAL_FREEZE_WWDG_DBGMCU   __HAL_DBGMCU_FREEZE_WWDG1\r\n#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UnFreeze_WWDG1\r\n#define __HAL_FREEZE_IWDG_DBGMCU   __HAL_DBGMCU_FREEZE_IWDG1\r\n#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UnFreeze_IWDG1\r\n#else\r\n#define __HAL_FREEZE_WWDG_DBGMCU   __HAL_DBGMCU_FREEZE_WWDG\r\n#define __HAL_UNFREEZE_WWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_WWDG\r\n#define __HAL_FREEZE_IWDG_DBGMCU   __HAL_DBGMCU_FREEZE_IWDG\r\n#define __HAL_UNFREEZE_IWDG_DBGMCU __HAL_DBGMCU_UNFREEZE_IWDG\r\n#endif /* STM32H7 */\r\n#define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU   __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT\r\n#define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT\r\n#define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU   __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT\r\n#define __HAL_UNFREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT\r\n#define __HAL_FREEZE_I2C3_TIMEOUT_DBGMCU   __HAL_DBGMCU_FREEZE_I2C3_TIMEOUT\r\n#define __HAL_UNFREEZE_I2C3_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C3_TIMEOUT\r\n#define __HAL_FREEZE_CAN1_DBGMCU           __HAL_DBGMCU_FREEZE_CAN1\r\n#define __HAL_UNFREEZE_CAN1_DBGMCU         __HAL_DBGMCU_UNFREEZE_CAN1\r\n#define __HAL_FREEZE_LPTIM1_DBGMCU         __HAL_DBGMCU_FREEZE_LPTIM1\r\n#define __HAL_UNFREEZE_LPTIM1_DBGMCU       __HAL_DBGMCU_UNFREEZE_LPTIM1\r\n#define __HAL_FREEZE_LPTIM2_DBGMCU         __HAL_DBGMCU_FREEZE_LPTIM2\r\n#define __HAL_UNFREEZE_LPTIM2_DBGMCU       __HAL_DBGMCU_UNFREEZE_LPTIM2\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_COMP_Aliased_Macros HAL COMP Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#if defined(STM32F3)\r\n#define COMP_START __HAL_COMP_ENABLE\r\n#define COMP_STOP  __HAL_COMP_DISABLE\r\n#define COMP_LOCK  __HAL_COMP_LOCK\r\n\r\n#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)\r\n#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2)   ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2)   ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2)   ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2)   ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : __HAL_COMP_COMP6_EXTI_ENABLE_IT())\r\n#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : __HAL_COMP_COMP6_EXTI_DISABLE_IT())\r\n#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : __HAL_COMP_COMP6_EXTI_GET_FLAG())\r\n#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : __HAL_COMP_COMP6_EXTI_CLEAR_FLAG())\r\n#endif\r\n#if defined(STM32F302xE) || defined(STM32F302xC)\r\n#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)                                   \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_ENABLE_IT())\r\n#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)                                   \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_DISABLE_IT())\r\n#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)                                   \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() \\\r\n                                          : __HAL_COMP_COMP6_EXTI_GET_FLAG())\r\n#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)                                   \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() \\\r\n                                          : __HAL_COMP_COMP6_EXTI_CLEAR_FLAG())\r\n#endif\r\n#if defined(STM32F303xE) || defined(STM32F398xx) || defined(STM32F303xC) || defined(STM32F358xx)\r\n#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_ENABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_DISABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_ENABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_DISABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)                                   \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_IT() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_ENABLE_IT())\r\n#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)                                   \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_IT() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_DISABLE_IT())\r\n#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)                                   \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_GET_FLAG() \\\r\n                                          : __HAL_COMP_COMP7_EXTI_GET_FLAG())\r\n#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)                                   \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_CLEAR_FLAG() \\\r\n                                          : __HAL_COMP_COMP7_EXTI_CLEAR_FLAG())\r\n#endif\r\n#if defined(STM32F373xC) || defined(STM32F378xx)\r\n#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)   (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)          (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : __HAL_COMP_COMP2_EXTI_ENABLE_IT())\r\n#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)         (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : __HAL_COMP_COMP2_EXTI_DISABLE_IT())\r\n#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)               (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : __HAL_COMP_COMP2_EXTI_GET_FLAG())\r\n#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)             (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : __HAL_COMP_COMP2_EXTI_CLEAR_FLAG())\r\n#endif\r\n#else\r\n#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)   (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)          (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : __HAL_COMP_COMP2_EXTI_ENABLE_IT())\r\n#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)         (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : __HAL_COMP_COMP2_EXTI_DISABLE_IT())\r\n#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)               (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : __HAL_COMP_COMP2_EXTI_GET_FLAG())\r\n#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)             (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : __HAL_COMP_COMP2_EXTI_CLEAR_FLAG())\r\n#endif\r\n\r\n#define __HAL_COMP_GET_EXTI_LINE COMP_GET_EXTI_LINE\r\n\r\n#if defined(STM32L0) || defined(STM32L4)\r\n/* Note: On these STM32 families, the only argument of this macro             */\r\n/*       is COMP_FLAG_LOCK.                                                   */\r\n/*       This macro is replaced by __HAL_COMP_IS_LOCKED with only HAL handle  */\r\n/*       argument.                                                            */\r\n#define __HAL_COMP_GET_FLAG(__HANDLE__, __FLAG__) (__HAL_COMP_IS_LOCKED(__HANDLE__))\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32L0) || defined(STM32L4)\r\n/** @defgroup HAL_COMP_Aliased_Functions HAL COMP Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_COMP_Start_IT HAL_COMP_Start /* Function considered as legacy as EXTI event or IT configuration is done into HAL_COMP_Init() */\r\n#define HAL_COMP_Stop_IT  HAL_COMP_Stop  /* Function considered as legacy as EXTI event or IT configuration is done into HAL_COMP_Init() */\r\n/**\r\n * @}\r\n */\r\n#endif\r\n\r\n/** @defgroup HAL_DAC_Aliased_Macros HAL DAC Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || ((WAVE) == DAC_WAVE_NOISE) || ((WAVE) == DAC_WAVE_TRIANGLE))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_FLASH_Aliased_Macros HAL FLASH Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define IS_WRPAREA          IS_OB_WRPAREA\r\n#define IS_TYPEPROGRAM      IS_FLASH_TYPEPROGRAM\r\n#define IS_TYPEPROGRAMFLASH IS_FLASH_TYPEPROGRAM\r\n#define IS_TYPEERASE        IS_FLASH_TYPEERASE\r\n#define IS_NBSECTORS        IS_FLASH_NBSECTORS\r\n#define IS_OB_WDG_SOURCE    IS_OB_IWDG_SOURCE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_I2C_RESET_CR2      I2C_RESET_CR2\r\n#define __HAL_I2C_GENERATE_START I2C_GENERATE_START\r\n#if defined(STM32F1)\r\n#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE\r\n#else\r\n#define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE\r\n#endif /* STM32F1 */\r\n#define __HAL_I2C_RISE_TIME          I2C_RISE_TIME\r\n#define __HAL_I2C_SPEED_STANDARD     I2C_SPEED_STANDARD\r\n#define __HAL_I2C_SPEED_FAST         I2C_SPEED_FAST\r\n#define __HAL_I2C_SPEED              I2C_SPEED\r\n#define __HAL_I2C_7BIT_ADD_WRITE     I2C_7BIT_ADD_WRITE\r\n#define __HAL_I2C_7BIT_ADD_READ      I2C_7BIT_ADD_READ\r\n#define __HAL_I2C_10BIT_ADDRESS      I2C_10BIT_ADDRESS\r\n#define __HAL_I2C_10BIT_HEADER_WRITE I2C_10BIT_HEADER_WRITE\r\n#define __HAL_I2C_10BIT_HEADER_READ  I2C_10BIT_HEADER_READ\r\n#define __HAL_I2C_MEM_ADD_MSB        I2C_MEM_ADD_MSB\r\n#define __HAL_I2C_MEM_ADD_LSB        I2C_MEM_ADD_LSB\r\n#define __HAL_I2C_FREQRANGE          I2C_FREQRANGE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define IS_I2S_INSTANCE     IS_I2S_ALL_INSTANCE\r\n#define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT\r\n\r\n#if defined(STM32H7)\r\n#define __HAL_I2S_CLEAR_FREFLAG __HAL_I2S_CLEAR_TIFREFLAG\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __IRDA_DISABLE __HAL_IRDA_DISABLE\r\n#define __IRDA_ENABLE  __HAL_IRDA_ENABLE\r\n\r\n#define __HAL_IRDA_GETCLOCKSOURCE   IRDA_GETCLOCKSOURCE\r\n#define __HAL_IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION\r\n#define __IRDA_GETCLOCKSOURCE       IRDA_GETCLOCKSOURCE\r\n#define __IRDA_MASK_COMPUTATION     IRDA_MASK_COMPUTATION\r\n\r\n#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_IWDG_Aliased_Macros HAL IWDG Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_IWDG_ENABLE_WRITE_ACCESS  IWDG_ENABLE_WRITE_ACCESS\r\n#define __HAL_IWDG_DISABLE_WRITE_ACCESS IWDG_DISABLE_WRITE_ACCESS\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_LPTIM_Aliased_Macros HAL LPTIM Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_LPTIM_ENABLE_INTERRUPT  __HAL_LPTIM_ENABLE_IT\r\n#define __HAL_LPTIM_DISABLE_INTERRUPT __HAL_LPTIM_DISABLE_IT\r\n#define __HAL_LPTIM_GET_ITSTATUS      __HAL_LPTIM_GET_IT_SOURCE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __OPAMP_CSR_OPAXPD               OPAMP_CSR_OPAXPD\r\n#define __OPAMP_CSR_S3SELX               OPAMP_CSR_S3SELX\r\n#define __OPAMP_CSR_S4SELX               OPAMP_CSR_S4SELX\r\n#define __OPAMP_CSR_S5SELX               OPAMP_CSR_S5SELX\r\n#define __OPAMP_CSR_S6SELX               OPAMP_CSR_S6SELX\r\n#define __OPAMP_CSR_OPAXCAL_L            OPAMP_CSR_OPAXCAL_L\r\n#define __OPAMP_CSR_OPAXCAL_H            OPAMP_CSR_OPAXCAL_H\r\n#define __OPAMP_CSR_OPAXLPM              OPAMP_CSR_OPAXLPM\r\n#define __OPAMP_CSR_ALL_SWITCHES         OPAMP_CSR_ALL_SWITCHES\r\n#define __OPAMP_CSR_ANAWSELX             OPAMP_CSR_ANAWSELX\r\n#define __OPAMP_CSR_OPAXCALOUT           OPAMP_CSR_OPAXCALOUT\r\n#define __OPAMP_OFFSET_TRIM_BITSPOSITION OPAMP_OFFSET_TRIM_BITSPOSITION\r\n#define __OPAMP_OFFSET_TRIM_SET          OPAMP_OFFSET_TRIM_SET\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_PWR_Aliased_Macros HAL PWR Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_PVD_EVENT_DISABLE               __HAL_PWR_PVD_EXTI_DISABLE_EVENT\r\n#define __HAL_PVD_EVENT_ENABLE                __HAL_PWR_PVD_EXTI_ENABLE_EVENT\r\n#define __HAL_PVD_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE\r\n#define __HAL_PVD_EXTI_FALLINGTRIGGER_ENABLE  __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_PVD_EXTI_RISINGTRIGGER_DISABLE  __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE\r\n#define __HAL_PVD_EXTI_RISINGTRIGGER_ENABLE   __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_PVM_EVENT_DISABLE               __HAL_PWR_PVM_EVENT_DISABLE\r\n#define __HAL_PVM_EVENT_ENABLE                __HAL_PWR_PVM_EVENT_ENABLE\r\n#define __HAL_PVM_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVM_EXTI_FALLINGTRIGGER_DISABLE\r\n#define __HAL_PVM_EXTI_FALLINGTRIGGER_ENABLE  __HAL_PWR_PVM_EXTI_FALLINGTRIGGER_ENABLE\r\n#define __HAL_PVM_EXTI_RISINGTRIGGER_DISABLE  __HAL_PWR_PVM_EXTI_RISINGTRIGGER_DISABLE\r\n#define __HAL_PVM_EXTI_RISINGTRIGGER_ENABLE   __HAL_PWR_PVM_EXTI_RISINGTRIGGER_ENABLE\r\n#define __HAL_PWR_INTERNALWAKEUP_DISABLE      HAL_PWREx_DisableInternalWakeUpLine\r\n#define __HAL_PWR_INTERNALWAKEUP_ENABLE       HAL_PWREx_EnableInternalWakeUpLine\r\n#define __HAL_PWR_PULL_UP_DOWN_CONFIG_DISABLE HAL_PWREx_DisablePullUpPullDownConfig\r\n#define __HAL_PWR_PULL_UP_DOWN_CONFIG_ENABLE  HAL_PWREx_EnablePullUpPullDownConfig\r\n#define __HAL_PWR_PVD_EXTI_CLEAR_EGDE_TRIGGER() \\\r\n  do {                                          \\\r\n    __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();   \\\r\n    __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE();  \\\r\n  } while (0)\r\n#define __HAL_PWR_PVD_EXTI_EVENT_DISABLE            __HAL_PWR_PVD_EXTI_DISABLE_EVENT\r\n#define __HAL_PWR_PVD_EXTI_EVENT_ENABLE             __HAL_PWR_PVD_EXTI_ENABLE_EVENT\r\n#define __HAL_PWR_PVD_EXTI_FALLINGTRIGGER_DISABLE   __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE\r\n#define __HAL_PWR_PVD_EXTI_FALLINGTRIGGER_ENABLE    __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_PWR_PVD_EXTI_RISINGTRIGGER_DISABLE    __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE\r\n#define __HAL_PWR_PVD_EXTI_RISINGTRIGGER_ENABLE     __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_PWR_PVD_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_PWR_PVD_EXTI_SET_RISING_EDGE_TRIGGER  __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_PWR_PVM_DISABLE() \\\r\n  do {                          \\\r\n    HAL_PWREx_DisablePVM1();    \\\r\n    HAL_PWREx_DisablePVM2();    \\\r\n    HAL_PWREx_DisablePVM3();    \\\r\n    HAL_PWREx_DisablePVM4();    \\\r\n  } while (0)\r\n#define __HAL_PWR_PVM_ENABLE() \\\r\n  do {                         \\\r\n    HAL_PWREx_EnablePVM1();    \\\r\n    HAL_PWREx_EnablePVM2();    \\\r\n    HAL_PWREx_EnablePVM3();    \\\r\n    HAL_PWREx_EnablePVM4();    \\\r\n  } while (0)\r\n#define __HAL_PWR_SRAM2CONTENT_PRESERVE_DISABLE        HAL_PWREx_DisableSRAM2ContentRetention\r\n#define __HAL_PWR_SRAM2CONTENT_PRESERVE_ENABLE         HAL_PWREx_EnableSRAM2ContentRetention\r\n#define __HAL_PWR_VDDIO2_DISABLE                       HAL_PWREx_DisableVddIO2\r\n#define __HAL_PWR_VDDIO2_ENABLE                        HAL_PWREx_EnableVddIO2\r\n#define __HAL_PWR_VDDIO2_EXTI_CLEAR_EGDE_TRIGGER       __HAL_PWR_VDDIO2_EXTI_DISABLE_FALLING_EDGE\r\n#define __HAL_PWR_VDDIO2_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_PWR_VDDIO2_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_PWR_VDDUSB_DISABLE                       HAL_PWREx_DisableVddUSB\r\n#define __HAL_PWR_VDDUSB_ENABLE                        HAL_PWREx_EnableVddUSB\r\n\r\n#if defined(STM32F4)\r\n#define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD)     __HAL_PWR_PVD_EXTI_ENABLE_IT()\r\n#define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD)    __HAL_PWR_PVD_EXTI_DISABLE_IT()\r\n#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD)      __HAL_PWR_PVD_EXTI_GET_FLAG()\r\n#define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD)    __HAL_PWR_PVD_EXTI_CLEAR_FLAG()\r\n#define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT()\r\n#else\r\n#define __HAL_PVD_EXTI_CLEAR_FLAG    __HAL_PWR_PVD_EXTI_CLEAR_FLAG\r\n#define __HAL_PVD_EXTI_DISABLE_IT    __HAL_PWR_PVD_EXTI_DISABLE_IT\r\n#define __HAL_PVD_EXTI_ENABLE_IT     __HAL_PWR_PVD_EXTI_ENABLE_IT\r\n#define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT\r\n#define __HAL_PVD_EXTI_GET_FLAG      __HAL_PWR_PVD_EXTI_GET_FLAG\r\n#endif /* STM32F4 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI\r\n#define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI\r\n\r\n#define HAL_RCC_CCSCallback            HAL_RCC_CSSCallback\r\n#define HAL_RC48_EnableBuffer_Cmd(cmd) (((cmd) == ENABLE) ? HAL_RCCEx_EnableHSI48_VREFINT() : HAL_RCCEx_DisableHSI48_VREFINT())\r\n\r\n#define __ADC_CLK_DISABLE           __HAL_RCC_ADC_CLK_DISABLE\r\n#define __ADC_CLK_ENABLE            __HAL_RCC_ADC_CLK_ENABLE\r\n#define __ADC_CLK_SLEEP_DISABLE     __HAL_RCC_ADC_CLK_SLEEP_DISABLE\r\n#define __ADC_CLK_SLEEP_ENABLE      __HAL_RCC_ADC_CLK_SLEEP_ENABLE\r\n#define __ADC_FORCE_RESET           __HAL_RCC_ADC_FORCE_RESET\r\n#define __ADC_RELEASE_RESET         __HAL_RCC_ADC_RELEASE_RESET\r\n#define __ADC1_CLK_DISABLE          __HAL_RCC_ADC1_CLK_DISABLE\r\n#define __ADC1_CLK_ENABLE           __HAL_RCC_ADC1_CLK_ENABLE\r\n#define __ADC1_FORCE_RESET          __HAL_RCC_ADC1_FORCE_RESET\r\n#define __ADC1_RELEASE_RESET        __HAL_RCC_ADC1_RELEASE_RESET\r\n#define __ADC1_CLK_SLEEP_ENABLE     __HAL_RCC_ADC1_CLK_SLEEP_ENABLE\r\n#define __ADC1_CLK_SLEEP_DISABLE    __HAL_RCC_ADC1_CLK_SLEEP_DISABLE\r\n#define __ADC2_CLK_DISABLE          __HAL_RCC_ADC2_CLK_DISABLE\r\n#define __ADC2_CLK_ENABLE           __HAL_RCC_ADC2_CLK_ENABLE\r\n#define __ADC2_FORCE_RESET          __HAL_RCC_ADC2_FORCE_RESET\r\n#define __ADC2_RELEASE_RESET        __HAL_RCC_ADC2_RELEASE_RESET\r\n#define __ADC3_CLK_DISABLE          __HAL_RCC_ADC3_CLK_DISABLE\r\n#define __ADC3_CLK_ENABLE           __HAL_RCC_ADC3_CLK_ENABLE\r\n#define __ADC3_FORCE_RESET          __HAL_RCC_ADC3_FORCE_RESET\r\n#define __ADC3_RELEASE_RESET        __HAL_RCC_ADC3_RELEASE_RESET\r\n#define __AES_CLK_DISABLE           __HAL_RCC_AES_CLK_DISABLE\r\n#define __AES_CLK_ENABLE            __HAL_RCC_AES_CLK_ENABLE\r\n#define __AES_CLK_SLEEP_DISABLE     __HAL_RCC_AES_CLK_SLEEP_DISABLE\r\n#define __AES_CLK_SLEEP_ENABLE      __HAL_RCC_AES_CLK_SLEEP_ENABLE\r\n#define __AES_FORCE_RESET           __HAL_RCC_AES_FORCE_RESET\r\n#define __AES_RELEASE_RESET         __HAL_RCC_AES_RELEASE_RESET\r\n#define __CRYP_CLK_SLEEP_ENABLE     __HAL_RCC_CRYP_CLK_SLEEP_ENABLE\r\n#define __CRYP_CLK_SLEEP_DISABLE    __HAL_RCC_CRYP_CLK_SLEEP_DISABLE\r\n#define __CRYP_CLK_ENABLE           __HAL_RCC_CRYP_CLK_ENABLE\r\n#define __CRYP_CLK_DISABLE          __HAL_RCC_CRYP_CLK_DISABLE\r\n#define __CRYP_FORCE_RESET          __HAL_RCC_CRYP_FORCE_RESET\r\n#define __CRYP_RELEASE_RESET        __HAL_RCC_CRYP_RELEASE_RESET\r\n#define __AFIO_CLK_DISABLE          __HAL_RCC_AFIO_CLK_DISABLE\r\n#define __AFIO_CLK_ENABLE           __HAL_RCC_AFIO_CLK_ENABLE\r\n#define __AFIO_FORCE_RESET          __HAL_RCC_AFIO_FORCE_RESET\r\n#define __AFIO_RELEASE_RESET        __HAL_RCC_AFIO_RELEASE_RESET\r\n#define __AHB_FORCE_RESET           __HAL_RCC_AHB_FORCE_RESET\r\n#define __AHB_RELEASE_RESET         __HAL_RCC_AHB_RELEASE_RESET\r\n#define __AHB1_FORCE_RESET          __HAL_RCC_AHB1_FORCE_RESET\r\n#define __AHB1_RELEASE_RESET        __HAL_RCC_AHB1_RELEASE_RESET\r\n#define __AHB2_FORCE_RESET          __HAL_RCC_AHB2_FORCE_RESET\r\n#define __AHB2_RELEASE_RESET        __HAL_RCC_AHB2_RELEASE_RESET\r\n#define __AHB3_FORCE_RESET          __HAL_RCC_AHB3_FORCE_RESET\r\n#define __AHB3_RELEASE_RESET        __HAL_RCC_AHB3_RELEASE_RESET\r\n#define __APB1_FORCE_RESET          __HAL_RCC_APB1_FORCE_RESET\r\n#define __APB1_RELEASE_RESET        __HAL_RCC_APB1_RELEASE_RESET\r\n#define __APB2_FORCE_RESET          __HAL_RCC_APB2_FORCE_RESET\r\n#define __APB2_RELEASE_RESET        __HAL_RCC_APB2_RELEASE_RESET\r\n#define __BKP_CLK_DISABLE           __HAL_RCC_BKP_CLK_DISABLE\r\n#define __BKP_CLK_ENABLE            __HAL_RCC_BKP_CLK_ENABLE\r\n#define __BKP_FORCE_RESET           __HAL_RCC_BKP_FORCE_RESET\r\n#define __BKP_RELEASE_RESET         __HAL_RCC_BKP_RELEASE_RESET\r\n#define __CAN1_CLK_DISABLE          __HAL_RCC_CAN1_CLK_DISABLE\r\n#define __CAN1_CLK_ENABLE           __HAL_RCC_CAN1_CLK_ENABLE\r\n#define __CAN1_CLK_SLEEP_DISABLE    __HAL_RCC_CAN1_CLK_SLEEP_DISABLE\r\n#define __CAN1_CLK_SLEEP_ENABLE     __HAL_RCC_CAN1_CLK_SLEEP_ENABLE\r\n#define __CAN1_FORCE_RESET          __HAL_RCC_CAN1_FORCE_RESET\r\n#define __CAN1_RELEASE_RESET        __HAL_RCC_CAN1_RELEASE_RESET\r\n#define __CAN_CLK_DISABLE           __HAL_RCC_CAN1_CLK_DISABLE\r\n#define __CAN_CLK_ENABLE            __HAL_RCC_CAN1_CLK_ENABLE\r\n#define __CAN_FORCE_RESET           __HAL_RCC_CAN1_FORCE_RESET\r\n#define __CAN_RELEASE_RESET         __HAL_RCC_CAN1_RELEASE_RESET\r\n#define __CAN2_CLK_DISABLE          __HAL_RCC_CAN2_CLK_DISABLE\r\n#define __CAN2_CLK_ENABLE           __HAL_RCC_CAN2_CLK_ENABLE\r\n#define __CAN2_FORCE_RESET          __HAL_RCC_CAN2_FORCE_RESET\r\n#define __CAN2_RELEASE_RESET        __HAL_RCC_CAN2_RELEASE_RESET\r\n#define __CEC_CLK_DISABLE           __HAL_RCC_CEC_CLK_DISABLE\r\n#define __CEC_CLK_ENABLE            __HAL_RCC_CEC_CLK_ENABLE\r\n#define __COMP_CLK_DISABLE          __HAL_RCC_COMP_CLK_DISABLE\r\n#define __COMP_CLK_ENABLE           __HAL_RCC_COMP_CLK_ENABLE\r\n#define __COMP_FORCE_RESET          __HAL_RCC_COMP_FORCE_RESET\r\n#define __COMP_RELEASE_RESET        __HAL_RCC_COMP_RELEASE_RESET\r\n#define __COMP_CLK_SLEEP_ENABLE     __HAL_RCC_COMP_CLK_SLEEP_ENABLE\r\n#define __COMP_CLK_SLEEP_DISABLE    __HAL_RCC_COMP_CLK_SLEEP_DISABLE\r\n#define __CEC_FORCE_RESET           __HAL_RCC_CEC_FORCE_RESET\r\n#define __CEC_RELEASE_RESET         __HAL_RCC_CEC_RELEASE_RESET\r\n#define __CRC_CLK_DISABLE           __HAL_RCC_CRC_CLK_DISABLE\r\n#define __CRC_CLK_ENABLE            __HAL_RCC_CRC_CLK_ENABLE\r\n#define __CRC_CLK_SLEEP_DISABLE     __HAL_RCC_CRC_CLK_SLEEP_DISABLE\r\n#define __CRC_CLK_SLEEP_ENABLE      __HAL_RCC_CRC_CLK_SLEEP_ENABLE\r\n#define __CRC_FORCE_RESET           __HAL_RCC_CRC_FORCE_RESET\r\n#define __CRC_RELEASE_RESET         __HAL_RCC_CRC_RELEASE_RESET\r\n#define __DAC_CLK_DISABLE           __HAL_RCC_DAC_CLK_DISABLE\r\n#define __DAC_CLK_ENABLE            __HAL_RCC_DAC_CLK_ENABLE\r\n#define __DAC_FORCE_RESET           __HAL_RCC_DAC_FORCE_RESET\r\n#define __DAC_RELEASE_RESET         __HAL_RCC_DAC_RELEASE_RESET\r\n#define __DAC1_CLK_DISABLE          __HAL_RCC_DAC1_CLK_DISABLE\r\n#define __DAC1_CLK_ENABLE           __HAL_RCC_DAC1_CLK_ENABLE\r\n#define __DAC1_CLK_SLEEP_DISABLE    __HAL_RCC_DAC1_CLK_SLEEP_DISABLE\r\n#define __DAC1_CLK_SLEEP_ENABLE     __HAL_RCC_DAC1_CLK_SLEEP_ENABLE\r\n#define __DAC1_FORCE_RESET          __HAL_RCC_DAC1_FORCE_RESET\r\n#define __DAC1_RELEASE_RESET        __HAL_RCC_DAC1_RELEASE_RESET\r\n#define __DBGMCU_CLK_ENABLE         __HAL_RCC_DBGMCU_CLK_ENABLE\r\n#define __DBGMCU_CLK_DISABLE        __HAL_RCC_DBGMCU_CLK_DISABLE\r\n#define __DBGMCU_FORCE_RESET        __HAL_RCC_DBGMCU_FORCE_RESET\r\n#define __DBGMCU_RELEASE_RESET      __HAL_RCC_DBGMCU_RELEASE_RESET\r\n#define __DFSDM_CLK_DISABLE         __HAL_RCC_DFSDM_CLK_DISABLE\r\n#define __DFSDM_CLK_ENABLE          __HAL_RCC_DFSDM_CLK_ENABLE\r\n#define __DFSDM_CLK_SLEEP_DISABLE   __HAL_RCC_DFSDM_CLK_SLEEP_DISABLE\r\n#define __DFSDM_CLK_SLEEP_ENABLE    __HAL_RCC_DFSDM_CLK_SLEEP_ENABLE\r\n#define __DFSDM_FORCE_RESET         __HAL_RCC_DFSDM_FORCE_RESET\r\n#define __DFSDM_RELEASE_RESET       __HAL_RCC_DFSDM_RELEASE_RESET\r\n#define __DMA1_CLK_DISABLE          __HAL_RCC_DMA1_CLK_DISABLE\r\n#define __DMA1_CLK_ENABLE           __HAL_RCC_DMA1_CLK_ENABLE\r\n#define __DMA1_CLK_SLEEP_DISABLE    __HAL_RCC_DMA1_CLK_SLEEP_DISABLE\r\n#define __DMA1_CLK_SLEEP_ENABLE     __HAL_RCC_DMA1_CLK_SLEEP_ENABLE\r\n#define __DMA1_FORCE_RESET          __HAL_RCC_DMA1_FORCE_RESET\r\n#define __DMA1_RELEASE_RESET        __HAL_RCC_DMA1_RELEASE_RESET\r\n#define __DMA2_CLK_DISABLE          __HAL_RCC_DMA2_CLK_DISABLE\r\n#define __DMA2_CLK_ENABLE           __HAL_RCC_DMA2_CLK_ENABLE\r\n#define __DMA2_CLK_SLEEP_DISABLE    __HAL_RCC_DMA2_CLK_SLEEP_DISABLE\r\n#define __DMA2_CLK_SLEEP_ENABLE     __HAL_RCC_DMA2_CLK_SLEEP_ENABLE\r\n#define __DMA2_FORCE_RESET          __HAL_RCC_DMA2_FORCE_RESET\r\n#define __DMA2_RELEASE_RESET        __HAL_RCC_DMA2_RELEASE_RESET\r\n#define __ETHMAC_CLK_DISABLE        __HAL_RCC_ETHMAC_CLK_DISABLE\r\n#define __ETHMAC_CLK_ENABLE         __HAL_RCC_ETHMAC_CLK_ENABLE\r\n#define __ETHMAC_FORCE_RESET        __HAL_RCC_ETHMAC_FORCE_RESET\r\n#define __ETHMAC_RELEASE_RESET      __HAL_RCC_ETHMAC_RELEASE_RESET\r\n#define __ETHMACRX_CLK_DISABLE      __HAL_RCC_ETHMACRX_CLK_DISABLE\r\n#define __ETHMACRX_CLK_ENABLE       __HAL_RCC_ETHMACRX_CLK_ENABLE\r\n#define __ETHMACTX_CLK_DISABLE      __HAL_RCC_ETHMACTX_CLK_DISABLE\r\n#define __ETHMACTX_CLK_ENABLE       __HAL_RCC_ETHMACTX_CLK_ENABLE\r\n#define __FIREWALL_CLK_DISABLE      __HAL_RCC_FIREWALL_CLK_DISABLE\r\n#define __FIREWALL_CLK_ENABLE       __HAL_RCC_FIREWALL_CLK_ENABLE\r\n#define __FLASH_CLK_DISABLE         __HAL_RCC_FLASH_CLK_DISABLE\r\n#define __FLASH_CLK_ENABLE          __HAL_RCC_FLASH_CLK_ENABLE\r\n#define __FLASH_CLK_SLEEP_DISABLE   __HAL_RCC_FLASH_CLK_SLEEP_DISABLE\r\n#define __FLASH_CLK_SLEEP_ENABLE    __HAL_RCC_FLASH_CLK_SLEEP_ENABLE\r\n#define __FLASH_FORCE_RESET         __HAL_RCC_FLASH_FORCE_RESET\r\n#define __FLASH_RELEASE_RESET       __HAL_RCC_FLASH_RELEASE_RESET\r\n#define __FLITF_CLK_DISABLE         __HAL_RCC_FLITF_CLK_DISABLE\r\n#define __FLITF_CLK_ENABLE          __HAL_RCC_FLITF_CLK_ENABLE\r\n#define __FLITF_FORCE_RESET         __HAL_RCC_FLITF_FORCE_RESET\r\n#define __FLITF_RELEASE_RESET       __HAL_RCC_FLITF_RELEASE_RESET\r\n#define __FLITF_CLK_SLEEP_ENABLE    __HAL_RCC_FLITF_CLK_SLEEP_ENABLE\r\n#define __FLITF_CLK_SLEEP_DISABLE   __HAL_RCC_FLITF_CLK_SLEEP_DISABLE\r\n#define __FMC_CLK_DISABLE           __HAL_RCC_FMC_CLK_DISABLE\r\n#define __FMC_CLK_ENABLE            __HAL_RCC_FMC_CLK_ENABLE\r\n#define __FMC_CLK_SLEEP_DISABLE     __HAL_RCC_FMC_CLK_SLEEP_DISABLE\r\n#define __FMC_CLK_SLEEP_ENABLE      __HAL_RCC_FMC_CLK_SLEEP_ENABLE\r\n#define __FMC_FORCE_RESET           __HAL_RCC_FMC_FORCE_RESET\r\n#define __FMC_RELEASE_RESET         __HAL_RCC_FMC_RELEASE_RESET\r\n#define __FSMC_CLK_DISABLE          __HAL_RCC_FSMC_CLK_DISABLE\r\n#define __FSMC_CLK_ENABLE           __HAL_RCC_FSMC_CLK_ENABLE\r\n#define __GPIOA_CLK_DISABLE         __HAL_RCC_GPIOA_CLK_DISABLE\r\n#define __GPIOA_CLK_ENABLE          __HAL_RCC_GPIOA_CLK_ENABLE\r\n#define __GPIOA_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOA_CLK_SLEEP_DISABLE\r\n#define __GPIOA_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOA_CLK_SLEEP_ENABLE\r\n#define __GPIOA_FORCE_RESET         __HAL_RCC_GPIOA_FORCE_RESET\r\n#define __GPIOA_RELEASE_RESET       __HAL_RCC_GPIOA_RELEASE_RESET\r\n#define __GPIOB_CLK_DISABLE         __HAL_RCC_GPIOB_CLK_DISABLE\r\n#define __GPIOB_CLK_ENABLE          __HAL_RCC_GPIOB_CLK_ENABLE\r\n#define __GPIOB_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOB_CLK_SLEEP_DISABLE\r\n#define __GPIOB_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOB_CLK_SLEEP_ENABLE\r\n#define __GPIOB_FORCE_RESET         __HAL_RCC_GPIOB_FORCE_RESET\r\n#define __GPIOB_RELEASE_RESET       __HAL_RCC_GPIOB_RELEASE_RESET\r\n#define __GPIOC_CLK_DISABLE         __HAL_RCC_GPIOC_CLK_DISABLE\r\n#define __GPIOC_CLK_ENABLE          __HAL_RCC_GPIOC_CLK_ENABLE\r\n#define __GPIOC_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOC_CLK_SLEEP_DISABLE\r\n#define __GPIOC_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOC_CLK_SLEEP_ENABLE\r\n#define __GPIOC_FORCE_RESET         __HAL_RCC_GPIOC_FORCE_RESET\r\n#define __GPIOC_RELEASE_RESET       __HAL_RCC_GPIOC_RELEASE_RESET\r\n#define __GPIOD_CLK_DISABLE         __HAL_RCC_GPIOD_CLK_DISABLE\r\n#define __GPIOD_CLK_ENABLE          __HAL_RCC_GPIOD_CLK_ENABLE\r\n#define __GPIOD_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE\r\n#define __GPIOD_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE\r\n#define __GPIOD_FORCE_RESET         __HAL_RCC_GPIOD_FORCE_RESET\r\n#define __GPIOD_RELEASE_RESET       __HAL_RCC_GPIOD_RELEASE_RESET\r\n#define __GPIOE_CLK_DISABLE         __HAL_RCC_GPIOE_CLK_DISABLE\r\n#define __GPIOE_CLK_ENABLE          __HAL_RCC_GPIOE_CLK_ENABLE\r\n#define __GPIOE_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE\r\n#define __GPIOE_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE\r\n#define __GPIOE_FORCE_RESET         __HAL_RCC_GPIOE_FORCE_RESET\r\n#define __GPIOE_RELEASE_RESET       __HAL_RCC_GPIOE_RELEASE_RESET\r\n#define __GPIOF_CLK_DISABLE         __HAL_RCC_GPIOF_CLK_DISABLE\r\n#define __GPIOF_CLK_ENABLE          __HAL_RCC_GPIOF_CLK_ENABLE\r\n#define __GPIOF_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE\r\n#define __GPIOF_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE\r\n#define __GPIOF_FORCE_RESET         __HAL_RCC_GPIOF_FORCE_RESET\r\n#define __GPIOF_RELEASE_RESET       __HAL_RCC_GPIOF_RELEASE_RESET\r\n#define __GPIOG_CLK_DISABLE         __HAL_RCC_GPIOG_CLK_DISABLE\r\n#define __GPIOG_CLK_ENABLE          __HAL_RCC_GPIOG_CLK_ENABLE\r\n#define __GPIOG_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE\r\n#define __GPIOG_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE\r\n#define __GPIOG_FORCE_RESET         __HAL_RCC_GPIOG_FORCE_RESET\r\n#define __GPIOG_RELEASE_RESET       __HAL_RCC_GPIOG_RELEASE_RESET\r\n#define __GPIOH_CLK_DISABLE         __HAL_RCC_GPIOH_CLK_DISABLE\r\n#define __GPIOH_CLK_ENABLE          __HAL_RCC_GPIOH_CLK_ENABLE\r\n#define __GPIOH_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOH_CLK_SLEEP_DISABLE\r\n#define __GPIOH_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOH_CLK_SLEEP_ENABLE\r\n#define __GPIOH_FORCE_RESET         __HAL_RCC_GPIOH_FORCE_RESET\r\n#define __GPIOH_RELEASE_RESET       __HAL_RCC_GPIOH_RELEASE_RESET\r\n#define __I2C1_CLK_DISABLE          __HAL_RCC_I2C1_CLK_DISABLE\r\n#define __I2C1_CLK_ENABLE           __HAL_RCC_I2C1_CLK_ENABLE\r\n#define __I2C1_CLK_SLEEP_DISABLE    __HAL_RCC_I2C1_CLK_SLEEP_DISABLE\r\n#define __I2C1_CLK_SLEEP_ENABLE     __HAL_RCC_I2C1_CLK_SLEEP_ENABLE\r\n#define __I2C1_FORCE_RESET          __HAL_RCC_I2C1_FORCE_RESET\r\n#define __I2C1_RELEASE_RESET        __HAL_RCC_I2C1_RELEASE_RESET\r\n#define __I2C2_CLK_DISABLE          __HAL_RCC_I2C2_CLK_DISABLE\r\n#define __I2C2_CLK_ENABLE           __HAL_RCC_I2C2_CLK_ENABLE\r\n#define __I2C2_CLK_SLEEP_DISABLE    __HAL_RCC_I2C2_CLK_SLEEP_DISABLE\r\n#define __I2C2_CLK_SLEEP_ENABLE     __HAL_RCC_I2C2_CLK_SLEEP_ENABLE\r\n#define __I2C2_FORCE_RESET          __HAL_RCC_I2C2_FORCE_RESET\r\n#define __I2C2_RELEASE_RESET        __HAL_RCC_I2C2_RELEASE_RESET\r\n#define __I2C3_CLK_DISABLE          __HAL_RCC_I2C3_CLK_DISABLE\r\n#define __I2C3_CLK_ENABLE           __HAL_RCC_I2C3_CLK_ENABLE\r\n#define __I2C3_CLK_SLEEP_DISABLE    __HAL_RCC_I2C3_CLK_SLEEP_DISABLE\r\n#define __I2C3_CLK_SLEEP_ENABLE     __HAL_RCC_I2C3_CLK_SLEEP_ENABLE\r\n#define __I2C3_FORCE_RESET          __HAL_RCC_I2C3_FORCE_RESET\r\n#define __I2C3_RELEASE_RESET        __HAL_RCC_I2C3_RELEASE_RESET\r\n#define __LCD_CLK_DISABLE           __HAL_RCC_LCD_CLK_DISABLE\r\n#define __LCD_CLK_ENABLE            __HAL_RCC_LCD_CLK_ENABLE\r\n#define __LCD_CLK_SLEEP_DISABLE     __HAL_RCC_LCD_CLK_SLEEP_DISABLE\r\n#define __LCD_CLK_SLEEP_ENABLE      __HAL_RCC_LCD_CLK_SLEEP_ENABLE\r\n#define __LCD_FORCE_RESET           __HAL_RCC_LCD_FORCE_RESET\r\n#define __LCD_RELEASE_RESET         __HAL_RCC_LCD_RELEASE_RESET\r\n#define __LPTIM1_CLK_DISABLE        __HAL_RCC_LPTIM1_CLK_DISABLE\r\n#define __LPTIM1_CLK_ENABLE         __HAL_RCC_LPTIM1_CLK_ENABLE\r\n#define __LPTIM1_CLK_SLEEP_DISABLE  __HAL_RCC_LPTIM1_CLK_SLEEP_DISABLE\r\n#define __LPTIM1_CLK_SLEEP_ENABLE   __HAL_RCC_LPTIM1_CLK_SLEEP_ENABLE\r\n#define __LPTIM1_FORCE_RESET        __HAL_RCC_LPTIM1_FORCE_RESET\r\n#define __LPTIM1_RELEASE_RESET      __HAL_RCC_LPTIM1_RELEASE_RESET\r\n#define __LPTIM2_CLK_DISABLE        __HAL_RCC_LPTIM2_CLK_DISABLE\r\n#define __LPTIM2_CLK_ENABLE         __HAL_RCC_LPTIM2_CLK_ENABLE\r\n#define __LPTIM2_CLK_SLEEP_DISABLE  __HAL_RCC_LPTIM2_CLK_SLEEP_DISABLE\r\n#define __LPTIM2_CLK_SLEEP_ENABLE   __HAL_RCC_LPTIM2_CLK_SLEEP_ENABLE\r\n#define __LPTIM2_FORCE_RESET        __HAL_RCC_LPTIM2_FORCE_RESET\r\n#define __LPTIM2_RELEASE_RESET      __HAL_RCC_LPTIM2_RELEASE_RESET\r\n#define __LPUART1_CLK_DISABLE       __HAL_RCC_LPUART1_CLK_DISABLE\r\n#define __LPUART1_CLK_ENABLE        __HAL_RCC_LPUART1_CLK_ENABLE\r\n#define __LPUART1_CLK_SLEEP_DISABLE __HAL_RCC_LPUART1_CLK_SLEEP_DISABLE\r\n#define __LPUART1_CLK_SLEEP_ENABLE  __HAL_RCC_LPUART1_CLK_SLEEP_ENABLE\r\n#define __LPUART1_FORCE_RESET       __HAL_RCC_LPUART1_FORCE_RESET\r\n#define __LPUART1_RELEASE_RESET     __HAL_RCC_LPUART1_RELEASE_RESET\r\n#define __OPAMP_CLK_DISABLE         __HAL_RCC_OPAMP_CLK_DISABLE\r\n#define __OPAMP_CLK_ENABLE          __HAL_RCC_OPAMP_CLK_ENABLE\r\n#define __OPAMP_CLK_SLEEP_DISABLE   __HAL_RCC_OPAMP_CLK_SLEEP_DISABLE\r\n#define __OPAMP_CLK_SLEEP_ENABLE    __HAL_RCC_OPAMP_CLK_SLEEP_ENABLE\r\n#define __OPAMP_FORCE_RESET         __HAL_RCC_OPAMP_FORCE_RESET\r\n#define __OPAMP_RELEASE_RESET       __HAL_RCC_OPAMP_RELEASE_RESET\r\n#define __OTGFS_CLK_DISABLE         __HAL_RCC_OTGFS_CLK_DISABLE\r\n#define __OTGFS_CLK_ENABLE          __HAL_RCC_OTGFS_CLK_ENABLE\r\n#define __OTGFS_CLK_SLEEP_DISABLE   __HAL_RCC_OTGFS_CLK_SLEEP_DISABLE\r\n#define __OTGFS_CLK_SLEEP_ENABLE    __HAL_RCC_OTGFS_CLK_SLEEP_ENABLE\r\n#define __OTGFS_FORCE_RESET         __HAL_RCC_OTGFS_FORCE_RESET\r\n#define __OTGFS_RELEASE_RESET       __HAL_RCC_OTGFS_RELEASE_RESET\r\n#define __PWR_CLK_DISABLE           __HAL_RCC_PWR_CLK_DISABLE\r\n#define __PWR_CLK_ENABLE            __HAL_RCC_PWR_CLK_ENABLE\r\n#define __PWR_CLK_SLEEP_DISABLE     __HAL_RCC_PWR_CLK_SLEEP_DISABLE\r\n#define __PWR_CLK_SLEEP_ENABLE      __HAL_RCC_PWR_CLK_SLEEP_ENABLE\r\n#define __PWR_FORCE_RESET           __HAL_RCC_PWR_FORCE_RESET\r\n#define __PWR_RELEASE_RESET         __HAL_RCC_PWR_RELEASE_RESET\r\n#define __QSPI_CLK_DISABLE          __HAL_RCC_QSPI_CLK_DISABLE\r\n#define __QSPI_CLK_ENABLE           __HAL_RCC_QSPI_CLK_ENABLE\r\n#define __QSPI_CLK_SLEEP_DISABLE    __HAL_RCC_QSPI_CLK_SLEEP_DISABLE\r\n#define __QSPI_CLK_SLEEP_ENABLE     __HAL_RCC_QSPI_CLK_SLEEP_ENABLE\r\n#define __QSPI_FORCE_RESET          __HAL_RCC_QSPI_FORCE_RESET\r\n#define __QSPI_RELEASE_RESET        __HAL_RCC_QSPI_RELEASE_RESET\r\n\r\n#if defined(STM32WB)\r\n#define __HAL_RCC_QSPI_CLK_DISABLE           __HAL_RCC_QUADSPI_CLK_DISABLE\r\n#define __HAL_RCC_QSPI_CLK_ENABLE            __HAL_RCC_QUADSPI_CLK_ENABLE\r\n#define __HAL_RCC_QSPI_CLK_SLEEP_DISABLE     __HAL_RCC_QUADSPI_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_QSPI_CLK_SLEEP_ENABLE      __HAL_RCC_QUADSPI_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_QSPI_FORCE_RESET           __HAL_RCC_QUADSPI_FORCE_RESET\r\n#define __HAL_RCC_QSPI_RELEASE_RESET         __HAL_RCC_QUADSPI_RELEASE_RESET\r\n#define __HAL_RCC_QSPI_IS_CLK_ENABLED        __HAL_RCC_QUADSPI_IS_CLK_ENABLED\r\n#define __HAL_RCC_QSPI_IS_CLK_DISABLED       __HAL_RCC_QUADSPI_IS_CLK_DISABLED\r\n#define __HAL_RCC_QSPI_IS_CLK_SLEEP_ENABLED  __HAL_RCC_QUADSPI_IS_CLK_SLEEP_ENABLED\r\n#define __HAL_RCC_QSPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_QUADSPI_IS_CLK_SLEEP_DISABLED\r\n#define QSPI_IRQHandler                      QUADSPI_IRQHandler\r\n#endif /* __HAL_RCC_QUADSPI_CLK_ENABLE */\r\n\r\n#define __RNG_CLK_DISABLE          __HAL_RCC_RNG_CLK_DISABLE\r\n#define __RNG_CLK_ENABLE           __HAL_RCC_RNG_CLK_ENABLE\r\n#define __RNG_CLK_SLEEP_DISABLE    __HAL_RCC_RNG_CLK_SLEEP_DISABLE\r\n#define __RNG_CLK_SLEEP_ENABLE     __HAL_RCC_RNG_CLK_SLEEP_ENABLE\r\n#define __RNG_FORCE_RESET          __HAL_RCC_RNG_FORCE_RESET\r\n#define __RNG_RELEASE_RESET        __HAL_RCC_RNG_RELEASE_RESET\r\n#define __SAI1_CLK_DISABLE         __HAL_RCC_SAI1_CLK_DISABLE\r\n#define __SAI1_CLK_ENABLE          __HAL_RCC_SAI1_CLK_ENABLE\r\n#define __SAI1_CLK_SLEEP_DISABLE   __HAL_RCC_SAI1_CLK_SLEEP_DISABLE\r\n#define __SAI1_CLK_SLEEP_ENABLE    __HAL_RCC_SAI1_CLK_SLEEP_ENABLE\r\n#define __SAI1_FORCE_RESET         __HAL_RCC_SAI1_FORCE_RESET\r\n#define __SAI1_RELEASE_RESET       __HAL_RCC_SAI1_RELEASE_RESET\r\n#define __SAI2_CLK_DISABLE         __HAL_RCC_SAI2_CLK_DISABLE\r\n#define __SAI2_CLK_ENABLE          __HAL_RCC_SAI2_CLK_ENABLE\r\n#define __SAI2_CLK_SLEEP_DISABLE   __HAL_RCC_SAI2_CLK_SLEEP_DISABLE\r\n#define __SAI2_CLK_SLEEP_ENABLE    __HAL_RCC_SAI2_CLK_SLEEP_ENABLE\r\n#define __SAI2_FORCE_RESET         __HAL_RCC_SAI2_FORCE_RESET\r\n#define __SAI2_RELEASE_RESET       __HAL_RCC_SAI2_RELEASE_RESET\r\n#define __SDIO_CLK_DISABLE         __HAL_RCC_SDIO_CLK_DISABLE\r\n#define __SDIO_CLK_ENABLE          __HAL_RCC_SDIO_CLK_ENABLE\r\n#define __SDMMC_CLK_DISABLE        __HAL_RCC_SDMMC_CLK_DISABLE\r\n#define __SDMMC_CLK_ENABLE         __HAL_RCC_SDMMC_CLK_ENABLE\r\n#define __SDMMC_CLK_SLEEP_DISABLE  __HAL_RCC_SDMMC_CLK_SLEEP_DISABLE\r\n#define __SDMMC_CLK_SLEEP_ENABLE   __HAL_RCC_SDMMC_CLK_SLEEP_ENABLE\r\n#define __SDMMC_FORCE_RESET        __HAL_RCC_SDMMC_FORCE_RESET\r\n#define __SDMMC_RELEASE_RESET      __HAL_RCC_SDMMC_RELEASE_RESET\r\n#define __SPI1_CLK_DISABLE         __HAL_RCC_SPI1_CLK_DISABLE\r\n#define __SPI1_CLK_ENABLE          __HAL_RCC_SPI1_CLK_ENABLE\r\n#define __SPI1_CLK_SLEEP_DISABLE   __HAL_RCC_SPI1_CLK_SLEEP_DISABLE\r\n#define __SPI1_CLK_SLEEP_ENABLE    __HAL_RCC_SPI1_CLK_SLEEP_ENABLE\r\n#define __SPI1_FORCE_RESET         __HAL_RCC_SPI1_FORCE_RESET\r\n#define __SPI1_RELEASE_RESET       __HAL_RCC_SPI1_RELEASE_RESET\r\n#define __SPI2_CLK_DISABLE         __HAL_RCC_SPI2_CLK_DISABLE\r\n#define __SPI2_CLK_ENABLE          __HAL_RCC_SPI2_CLK_ENABLE\r\n#define __SPI2_CLK_SLEEP_DISABLE   __HAL_RCC_SPI2_CLK_SLEEP_DISABLE\r\n#define __SPI2_CLK_SLEEP_ENABLE    __HAL_RCC_SPI2_CLK_SLEEP_ENABLE\r\n#define __SPI2_FORCE_RESET         __HAL_RCC_SPI2_FORCE_RESET\r\n#define __SPI2_RELEASE_RESET       __HAL_RCC_SPI2_RELEASE_RESET\r\n#define __SPI3_CLK_DISABLE         __HAL_RCC_SPI3_CLK_DISABLE\r\n#define __SPI3_CLK_ENABLE          __HAL_RCC_SPI3_CLK_ENABLE\r\n#define __SPI3_CLK_SLEEP_DISABLE   __HAL_RCC_SPI3_CLK_SLEEP_DISABLE\r\n#define __SPI3_CLK_SLEEP_ENABLE    __HAL_RCC_SPI3_CLK_SLEEP_ENABLE\r\n#define __SPI3_FORCE_RESET         __HAL_RCC_SPI3_FORCE_RESET\r\n#define __SPI3_RELEASE_RESET       __HAL_RCC_SPI3_RELEASE_RESET\r\n#define __SRAM_CLK_DISABLE         __HAL_RCC_SRAM_CLK_DISABLE\r\n#define __SRAM_CLK_ENABLE          __HAL_RCC_SRAM_CLK_ENABLE\r\n#define __SRAM1_CLK_SLEEP_DISABLE  __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE\r\n#define __SRAM1_CLK_SLEEP_ENABLE   __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE\r\n#define __SRAM2_CLK_SLEEP_DISABLE  __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE\r\n#define __SRAM2_CLK_SLEEP_ENABLE   __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE\r\n#define __SWPMI1_CLK_DISABLE       __HAL_RCC_SWPMI1_CLK_DISABLE\r\n#define __SWPMI1_CLK_ENABLE        __HAL_RCC_SWPMI1_CLK_ENABLE\r\n#define __SWPMI1_CLK_SLEEP_DISABLE __HAL_RCC_SWPMI1_CLK_SLEEP_DISABLE\r\n#define __SWPMI1_CLK_SLEEP_ENABLE  __HAL_RCC_SWPMI1_CLK_SLEEP_ENABLE\r\n#define __SWPMI1_FORCE_RESET       __HAL_RCC_SWPMI1_FORCE_RESET\r\n#define __SWPMI1_RELEASE_RESET     __HAL_RCC_SWPMI1_RELEASE_RESET\r\n#define __SYSCFG_CLK_DISABLE       __HAL_RCC_SYSCFG_CLK_DISABLE\r\n#define __SYSCFG_CLK_ENABLE        __HAL_RCC_SYSCFG_CLK_ENABLE\r\n#define __SYSCFG_CLK_SLEEP_DISABLE __HAL_RCC_SYSCFG_CLK_SLEEP_DISABLE\r\n#define __SYSCFG_CLK_SLEEP_ENABLE  __HAL_RCC_SYSCFG_CLK_SLEEP_ENABLE\r\n#define __SYSCFG_FORCE_RESET       __HAL_RCC_SYSCFG_FORCE_RESET\r\n#define __SYSCFG_RELEASE_RESET     __HAL_RCC_SYSCFG_RELEASE_RESET\r\n#define __TIM1_CLK_DISABLE         __HAL_RCC_TIM1_CLK_DISABLE\r\n#define __TIM1_CLK_ENABLE          __HAL_RCC_TIM1_CLK_ENABLE\r\n#define __TIM1_CLK_SLEEP_DISABLE   __HAL_RCC_TIM1_CLK_SLEEP_DISABLE\r\n#define __TIM1_CLK_SLEEP_ENABLE    __HAL_RCC_TIM1_CLK_SLEEP_ENABLE\r\n#define __TIM1_FORCE_RESET         __HAL_RCC_TIM1_FORCE_RESET\r\n#define __TIM1_RELEASE_RESET       __HAL_RCC_TIM1_RELEASE_RESET\r\n#define __TIM10_CLK_DISABLE        __HAL_RCC_TIM10_CLK_DISABLE\r\n#define __TIM10_CLK_ENABLE         __HAL_RCC_TIM10_CLK_ENABLE\r\n#define __TIM10_FORCE_RESET        __HAL_RCC_TIM10_FORCE_RESET\r\n#define __TIM10_RELEASE_RESET      __HAL_RCC_TIM10_RELEASE_RESET\r\n#define __TIM11_CLK_DISABLE        __HAL_RCC_TIM11_CLK_DISABLE\r\n#define __TIM11_CLK_ENABLE         __HAL_RCC_TIM11_CLK_ENABLE\r\n#define __TIM11_FORCE_RESET        __HAL_RCC_TIM11_FORCE_RESET\r\n#define __TIM11_RELEASE_RESET      __HAL_RCC_TIM11_RELEASE_RESET\r\n#define __TIM12_CLK_DISABLE        __HAL_RCC_TIM12_CLK_DISABLE\r\n#define __TIM12_CLK_ENABLE         __HAL_RCC_TIM12_CLK_ENABLE\r\n#define __TIM12_FORCE_RESET        __HAL_RCC_TIM12_FORCE_RESET\r\n#define __TIM12_RELEASE_RESET      __HAL_RCC_TIM12_RELEASE_RESET\r\n#define __TIM13_CLK_DISABLE        __HAL_RCC_TIM13_CLK_DISABLE\r\n#define __TIM13_CLK_ENABLE         __HAL_RCC_TIM13_CLK_ENABLE\r\n#define __TIM13_FORCE_RESET        __HAL_RCC_TIM13_FORCE_RESET\r\n#define __TIM13_RELEASE_RESET      __HAL_RCC_TIM13_RELEASE_RESET\r\n#define __TIM14_CLK_DISABLE        __HAL_RCC_TIM14_CLK_DISABLE\r\n#define __TIM14_CLK_ENABLE         __HAL_RCC_TIM14_CLK_ENABLE\r\n#define __TIM14_FORCE_RESET        __HAL_RCC_TIM14_FORCE_RESET\r\n#define __TIM14_RELEASE_RESET      __HAL_RCC_TIM14_RELEASE_RESET\r\n#define __TIM15_CLK_DISABLE        __HAL_RCC_TIM15_CLK_DISABLE\r\n#define __TIM15_CLK_ENABLE         __HAL_RCC_TIM15_CLK_ENABLE\r\n#define __TIM15_CLK_SLEEP_DISABLE  __HAL_RCC_TIM15_CLK_SLEEP_DISABLE\r\n#define __TIM15_CLK_SLEEP_ENABLE   __HAL_RCC_TIM15_CLK_SLEEP_ENABLE\r\n#define __TIM15_FORCE_RESET        __HAL_RCC_TIM15_FORCE_RESET\r\n#define __TIM15_RELEASE_RESET      __HAL_RCC_TIM15_RELEASE_RESET\r\n#define __TIM16_CLK_DISABLE        __HAL_RCC_TIM16_CLK_DISABLE\r\n#define __TIM16_CLK_ENABLE         __HAL_RCC_TIM16_CLK_ENABLE\r\n#define __TIM16_CLK_SLEEP_DISABLE  __HAL_RCC_TIM16_CLK_SLEEP_DISABLE\r\n#define __TIM16_CLK_SLEEP_ENABLE   __HAL_RCC_TIM16_CLK_SLEEP_ENABLE\r\n#define __TIM16_FORCE_RESET        __HAL_RCC_TIM16_FORCE_RESET\r\n#define __TIM16_RELEASE_RESET      __HAL_RCC_TIM16_RELEASE_RESET\r\n#define __TIM17_CLK_DISABLE        __HAL_RCC_TIM17_CLK_DISABLE\r\n#define __TIM17_CLK_ENABLE         __HAL_RCC_TIM17_CLK_ENABLE\r\n#define __TIM17_CLK_SLEEP_DISABLE  __HAL_RCC_TIM17_CLK_SLEEP_DISABLE\r\n#define __TIM17_CLK_SLEEP_ENABLE   __HAL_RCC_TIM17_CLK_SLEEP_ENABLE\r\n#define __TIM17_FORCE_RESET        __HAL_RCC_TIM17_FORCE_RESET\r\n#define __TIM17_RELEASE_RESET      __HAL_RCC_TIM17_RELEASE_RESET\r\n#define __TIM2_CLK_DISABLE         __HAL_RCC_TIM2_CLK_DISABLE\r\n#define __TIM2_CLK_ENABLE          __HAL_RCC_TIM2_CLK_ENABLE\r\n#define __TIM2_CLK_SLEEP_DISABLE   __HAL_RCC_TIM2_CLK_SLEEP_DISABLE\r\n#define __TIM2_CLK_SLEEP_ENABLE    __HAL_RCC_TIM2_CLK_SLEEP_ENABLE\r\n#define __TIM2_FORCE_RESET         __HAL_RCC_TIM2_FORCE_RESET\r\n#define __TIM2_RELEASE_RESET       __HAL_RCC_TIM2_RELEASE_RESET\r\n#define __TIM3_CLK_DISABLE         __HAL_RCC_TIM3_CLK_DISABLE\r\n#define __TIM3_CLK_ENABLE          __HAL_RCC_TIM3_CLK_ENABLE\r\n#define __TIM3_CLK_SLEEP_DISABLE   __HAL_RCC_TIM3_CLK_SLEEP_DISABLE\r\n#define __TIM3_CLK_SLEEP_ENABLE    __HAL_RCC_TIM3_CLK_SLEEP_ENABLE\r\n#define __TIM3_FORCE_RESET         __HAL_RCC_TIM3_FORCE_RESET\r\n#define __TIM3_RELEASE_RESET       __HAL_RCC_TIM3_RELEASE_RESET\r\n#define __TIM4_CLK_DISABLE         __HAL_RCC_TIM4_CLK_DISABLE\r\n#define __TIM4_CLK_ENABLE          __HAL_RCC_TIM4_CLK_ENABLE\r\n#define __TIM4_CLK_SLEEP_DISABLE   __HAL_RCC_TIM4_CLK_SLEEP_DISABLE\r\n#define __TIM4_CLK_SLEEP_ENABLE    __HAL_RCC_TIM4_CLK_SLEEP_ENABLE\r\n#define __TIM4_FORCE_RESET         __HAL_RCC_TIM4_FORCE_RESET\r\n#define __TIM4_RELEASE_RESET       __HAL_RCC_TIM4_RELEASE_RESET\r\n#define __TIM5_CLK_DISABLE         __HAL_RCC_TIM5_CLK_DISABLE\r\n#define __TIM5_CLK_ENABLE          __HAL_RCC_TIM5_CLK_ENABLE\r\n#define __TIM5_CLK_SLEEP_DISABLE   __HAL_RCC_TIM5_CLK_SLEEP_DISABLE\r\n#define __TIM5_CLK_SLEEP_ENABLE    __HAL_RCC_TIM5_CLK_SLEEP_ENABLE\r\n#define __TIM5_FORCE_RESET         __HAL_RCC_TIM5_FORCE_RESET\r\n#define __TIM5_RELEASE_RESET       __HAL_RCC_TIM5_RELEASE_RESET\r\n#define __TIM6_CLK_DISABLE         __HAL_RCC_TIM6_CLK_DISABLE\r\n#define __TIM6_CLK_ENABLE          __HAL_RCC_TIM6_CLK_ENABLE\r\n#define __TIM6_CLK_SLEEP_DISABLE   __HAL_RCC_TIM6_CLK_SLEEP_DISABLE\r\n#define __TIM6_CLK_SLEEP_ENABLE    __HAL_RCC_TIM6_CLK_SLEEP_ENABLE\r\n#define __TIM6_FORCE_RESET         __HAL_RCC_TIM6_FORCE_RESET\r\n#define __TIM6_RELEASE_RESET       __HAL_RCC_TIM6_RELEASE_RESET\r\n#define __TIM7_CLK_DISABLE         __HAL_RCC_TIM7_CLK_DISABLE\r\n#define __TIM7_CLK_ENABLE          __HAL_RCC_TIM7_CLK_ENABLE\r\n#define __TIM7_CLK_SLEEP_DISABLE   __HAL_RCC_TIM7_CLK_SLEEP_DISABLE\r\n#define __TIM7_CLK_SLEEP_ENABLE    __HAL_RCC_TIM7_CLK_SLEEP_ENABLE\r\n#define __TIM7_FORCE_RESET         __HAL_RCC_TIM7_FORCE_RESET\r\n#define __TIM7_RELEASE_RESET       __HAL_RCC_TIM7_RELEASE_RESET\r\n#define __TIM8_CLK_DISABLE         __HAL_RCC_TIM8_CLK_DISABLE\r\n#define __TIM8_CLK_ENABLE          __HAL_RCC_TIM8_CLK_ENABLE\r\n#define __TIM8_CLK_SLEEP_DISABLE   __HAL_RCC_TIM8_CLK_SLEEP_DISABLE\r\n#define __TIM8_CLK_SLEEP_ENABLE    __HAL_RCC_TIM8_CLK_SLEEP_ENABLE\r\n#define __TIM8_FORCE_RESET         __HAL_RCC_TIM8_FORCE_RESET\r\n#define __TIM8_RELEASE_RESET       __HAL_RCC_TIM8_RELEASE_RESET\r\n#define __TIM9_CLK_DISABLE         __HAL_RCC_TIM9_CLK_DISABLE\r\n#define __TIM9_CLK_ENABLE          __HAL_RCC_TIM9_CLK_ENABLE\r\n#define __TIM9_FORCE_RESET         __HAL_RCC_TIM9_FORCE_RESET\r\n#define __TIM9_RELEASE_RESET       __HAL_RCC_TIM9_RELEASE_RESET\r\n#define __TSC_CLK_DISABLE          __HAL_RCC_TSC_CLK_DISABLE\r\n#define __TSC_CLK_ENABLE           __HAL_RCC_TSC_CLK_ENABLE\r\n#define __TSC_CLK_SLEEP_DISABLE    __HAL_RCC_TSC_CLK_SLEEP_DISABLE\r\n#define __TSC_CLK_SLEEP_ENABLE     __HAL_RCC_TSC_CLK_SLEEP_ENABLE\r\n#define __TSC_FORCE_RESET          __HAL_RCC_TSC_FORCE_RESET\r\n#define __TSC_RELEASE_RESET        __HAL_RCC_TSC_RELEASE_RESET\r\n#define __UART4_CLK_DISABLE        __HAL_RCC_UART4_CLK_DISABLE\r\n#define __UART4_CLK_ENABLE         __HAL_RCC_UART4_CLK_ENABLE\r\n#define __UART4_CLK_SLEEP_DISABLE  __HAL_RCC_UART4_CLK_SLEEP_DISABLE\r\n#define __UART4_CLK_SLEEP_ENABLE   __HAL_RCC_UART4_CLK_SLEEP_ENABLE\r\n#define __UART4_FORCE_RESET        __HAL_RCC_UART4_FORCE_RESET\r\n#define __UART4_RELEASE_RESET      __HAL_RCC_UART4_RELEASE_RESET\r\n#define __UART5_CLK_DISABLE        __HAL_RCC_UART5_CLK_DISABLE\r\n#define __UART5_CLK_ENABLE         __HAL_RCC_UART5_CLK_ENABLE\r\n#define __UART5_CLK_SLEEP_DISABLE  __HAL_RCC_UART5_CLK_SLEEP_DISABLE\r\n#define __UART5_CLK_SLEEP_ENABLE   __HAL_RCC_UART5_CLK_SLEEP_ENABLE\r\n#define __UART5_FORCE_RESET        __HAL_RCC_UART5_FORCE_RESET\r\n#define __UART5_RELEASE_RESET      __HAL_RCC_UART5_RELEASE_RESET\r\n#define __USART1_CLK_DISABLE       __HAL_RCC_USART1_CLK_DISABLE\r\n#define __USART1_CLK_ENABLE        __HAL_RCC_USART1_CLK_ENABLE\r\n#define __USART1_CLK_SLEEP_DISABLE __HAL_RCC_USART1_CLK_SLEEP_DISABLE\r\n#define __USART1_CLK_SLEEP_ENABLE  __HAL_RCC_USART1_CLK_SLEEP_ENABLE\r\n#define __USART1_FORCE_RESET       __HAL_RCC_USART1_FORCE_RESET\r\n#define __USART1_RELEASE_RESET     __HAL_RCC_USART1_RELEASE_RESET\r\n#define __USART2_CLK_DISABLE       __HAL_RCC_USART2_CLK_DISABLE\r\n#define __USART2_CLK_ENABLE        __HAL_RCC_USART2_CLK_ENABLE\r\n#define __USART2_CLK_SLEEP_DISABLE __HAL_RCC_USART2_CLK_SLEEP_DISABLE\r\n#define __USART2_CLK_SLEEP_ENABLE  __HAL_RCC_USART2_CLK_SLEEP_ENABLE\r\n#define __USART2_FORCE_RESET       __HAL_RCC_USART2_FORCE_RESET\r\n#define __USART2_RELEASE_RESET     __HAL_RCC_USART2_RELEASE_RESET\r\n#define __USART3_CLK_DISABLE       __HAL_RCC_USART3_CLK_DISABLE\r\n#define __USART3_CLK_ENABLE        __HAL_RCC_USART3_CLK_ENABLE\r\n#define __USART3_CLK_SLEEP_DISABLE __HAL_RCC_USART3_CLK_SLEEP_DISABLE\r\n#define __USART3_CLK_SLEEP_ENABLE  __HAL_RCC_USART3_CLK_SLEEP_ENABLE\r\n#define __USART3_FORCE_RESET       __HAL_RCC_USART3_FORCE_RESET\r\n#define __USART3_RELEASE_RESET     __HAL_RCC_USART3_RELEASE_RESET\r\n#define __USART4_CLK_DISABLE       __HAL_RCC_UART4_CLK_DISABLE\r\n#define __USART4_CLK_ENABLE        __HAL_RCC_UART4_CLK_ENABLE\r\n#define __USART4_CLK_SLEEP_ENABLE  __HAL_RCC_UART4_CLK_SLEEP_ENABLE\r\n#define __USART4_CLK_SLEEP_DISABLE __HAL_RCC_UART4_CLK_SLEEP_DISABLE\r\n#define __USART4_FORCE_RESET       __HAL_RCC_UART4_FORCE_RESET\r\n#define __USART4_RELEASE_RESET     __HAL_RCC_UART4_RELEASE_RESET\r\n#define __USART5_CLK_DISABLE       __HAL_RCC_UART5_CLK_DISABLE\r\n#define __USART5_CLK_ENABLE        __HAL_RCC_UART5_CLK_ENABLE\r\n#define __USART5_CLK_SLEEP_ENABLE  __HAL_RCC_UART5_CLK_SLEEP_ENABLE\r\n#define __USART5_CLK_SLEEP_DISABLE __HAL_RCC_UART5_CLK_SLEEP_DISABLE\r\n#define __USART5_FORCE_RESET       __HAL_RCC_UART5_FORCE_RESET\r\n#define __USART5_RELEASE_RESET     __HAL_RCC_UART5_RELEASE_RESET\r\n#define __USART7_CLK_DISABLE       __HAL_RCC_UART7_CLK_DISABLE\r\n#define __USART7_CLK_ENABLE        __HAL_RCC_UART7_CLK_ENABLE\r\n#define __USART7_FORCE_RESET       __HAL_RCC_UART7_FORCE_RESET\r\n#define __USART7_RELEASE_RESET     __HAL_RCC_UART7_RELEASE_RESET\r\n#define __USART8_CLK_DISABLE       __HAL_RCC_UART8_CLK_DISABLE\r\n#define __USART8_CLK_ENABLE        __HAL_RCC_UART8_CLK_ENABLE\r\n#define __USART8_FORCE_RESET       __HAL_RCC_UART8_FORCE_RESET\r\n#define __USART8_RELEASE_RESET     __HAL_RCC_UART8_RELEASE_RESET\r\n#define __USB_CLK_DISABLE          __HAL_RCC_USB_CLK_DISABLE\r\n#define __USB_CLK_ENABLE           __HAL_RCC_USB_CLK_ENABLE\r\n#define __USB_FORCE_RESET          __HAL_RCC_USB_FORCE_RESET\r\n#define __USB_CLK_SLEEP_ENABLE     __HAL_RCC_USB_CLK_SLEEP_ENABLE\r\n#define __USB_CLK_SLEEP_DISABLE    __HAL_RCC_USB_CLK_SLEEP_DISABLE\r\n#define __USB_OTG_FS_CLK_DISABLE   __HAL_RCC_USB_OTG_FS_CLK_DISABLE\r\n#define __USB_OTG_FS_CLK_ENABLE    __HAL_RCC_USB_OTG_FS_CLK_ENABLE\r\n#define __USB_RELEASE_RESET        __HAL_RCC_USB_RELEASE_RESET\r\n\r\n#if defined(STM32H7)\r\n#define __HAL_RCC_WWDG_CLK_DISABLE       __HAL_RCC_WWDG1_CLK_DISABLE\r\n#define __HAL_RCC_WWDG_CLK_ENABLE        __HAL_RCC_WWDG1_CLK_ENABLE\r\n#define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG1_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE  __HAL_RCC_WWDG1_CLK_SLEEP_ENABLE\r\n\r\n#define __HAL_RCC_WWDG_FORCE_RESET   ((void)0U) /* Not available on the STM32H7*/\r\n#define __HAL_RCC_WWDG_RELEASE_RESET ((void)0U) /* Not available on the STM32H7*/\r\n\r\n#define __HAL_RCC_WWDG_IS_CLK_ENABLED  __HAL_RCC_WWDG1_IS_CLK_ENABLED\r\n#define __HAL_RCC_WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG1_IS_CLK_DISABLED\r\n#endif\r\n\r\n#define __WWDG_CLK_DISABLE       __HAL_RCC_WWDG_CLK_DISABLE\r\n#define __WWDG_CLK_ENABLE        __HAL_RCC_WWDG_CLK_ENABLE\r\n#define __WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG_CLK_SLEEP_DISABLE\r\n#define __WWDG_CLK_SLEEP_ENABLE  __HAL_RCC_WWDG_CLK_SLEEP_ENABLE\r\n#define __WWDG_FORCE_RESET       __HAL_RCC_WWDG_FORCE_RESET\r\n#define __WWDG_RELEASE_RESET     __HAL_RCC_WWDG_RELEASE_RESET\r\n\r\n#define __TIM21_CLK_ENABLE        __HAL_RCC_TIM21_CLK_ENABLE\r\n#define __TIM21_CLK_DISABLE       __HAL_RCC_TIM21_CLK_DISABLE\r\n#define __TIM21_FORCE_RESET       __HAL_RCC_TIM21_FORCE_RESET\r\n#define __TIM21_RELEASE_RESET     __HAL_RCC_TIM21_RELEASE_RESET\r\n#define __TIM21_CLK_SLEEP_ENABLE  __HAL_RCC_TIM21_CLK_SLEEP_ENABLE\r\n#define __TIM21_CLK_SLEEP_DISABLE __HAL_RCC_TIM21_CLK_SLEEP_DISABLE\r\n#define __TIM22_CLK_ENABLE        __HAL_RCC_TIM22_CLK_ENABLE\r\n#define __TIM22_CLK_DISABLE       __HAL_RCC_TIM22_CLK_DISABLE\r\n#define __TIM22_FORCE_RESET       __HAL_RCC_TIM22_FORCE_RESET\r\n#define __TIM22_RELEASE_RESET     __HAL_RCC_TIM22_RELEASE_RESET\r\n#define __TIM22_CLK_SLEEP_ENABLE  __HAL_RCC_TIM22_CLK_SLEEP_ENABLE\r\n#define __TIM22_CLK_SLEEP_DISABLE __HAL_RCC_TIM22_CLK_SLEEP_DISABLE\r\n#define __CRS_CLK_DISABLE         __HAL_RCC_CRS_CLK_DISABLE\r\n#define __CRS_CLK_ENABLE          __HAL_RCC_CRS_CLK_ENABLE\r\n#define __CRS_CLK_SLEEP_DISABLE   __HAL_RCC_CRS_CLK_SLEEP_DISABLE\r\n#define __CRS_CLK_SLEEP_ENABLE    __HAL_RCC_CRS_CLK_SLEEP_ENABLE\r\n#define __CRS_FORCE_RESET         __HAL_RCC_CRS_FORCE_RESET\r\n#define __CRS_RELEASE_RESET       __HAL_RCC_CRS_RELEASE_RESET\r\n#define __RCC_BACKUPRESET_FORCE   __HAL_RCC_BACKUPRESET_FORCE\r\n#define __RCC_BACKUPRESET_RELEASE __HAL_RCC_BACKUPRESET_RELEASE\r\n\r\n#define __USB_OTG_FS_FORCE_RESET                  __HAL_RCC_USB_OTG_FS_FORCE_RESET\r\n#define __USB_OTG_FS_RELEASE_RESET                __HAL_RCC_USB_OTG_FS_RELEASE_RESET\r\n#define __USB_OTG_FS_CLK_SLEEP_ENABLE             __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE\r\n#define __USB_OTG_FS_CLK_SLEEP_DISABLE            __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE\r\n#define __USB_OTG_HS_CLK_DISABLE                  __HAL_RCC_USB_OTG_HS_CLK_DISABLE\r\n#define __USB_OTG_HS_CLK_ENABLE                   __HAL_RCC_USB_OTG_HS_CLK_ENABLE\r\n#define __USB_OTG_HS_ULPI_CLK_ENABLE              __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE\r\n#define __USB_OTG_HS_ULPI_CLK_DISABLE             __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE\r\n#define __TIM9_CLK_SLEEP_ENABLE                   __HAL_RCC_TIM9_CLK_SLEEP_ENABLE\r\n#define __TIM9_CLK_SLEEP_DISABLE                  __HAL_RCC_TIM9_CLK_SLEEP_DISABLE\r\n#define __TIM10_CLK_SLEEP_ENABLE                  __HAL_RCC_TIM10_CLK_SLEEP_ENABLE\r\n#define __TIM10_CLK_SLEEP_DISABLE                 __HAL_RCC_TIM10_CLK_SLEEP_DISABLE\r\n#define __TIM11_CLK_SLEEP_ENABLE                  __HAL_RCC_TIM11_CLK_SLEEP_ENABLE\r\n#define __TIM11_CLK_SLEEP_DISABLE                 __HAL_RCC_TIM11_CLK_SLEEP_DISABLE\r\n#define __ETHMACPTP_CLK_SLEEP_ENABLE              __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE\r\n#define __ETHMACPTP_CLK_SLEEP_DISABLE             __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE\r\n#define __ETHMACPTP_CLK_ENABLE                    __HAL_RCC_ETHMACPTP_CLK_ENABLE\r\n#define __ETHMACPTP_CLK_DISABLE                   __HAL_RCC_ETHMACPTP_CLK_DISABLE\r\n#define __HASH_CLK_ENABLE                         __HAL_RCC_HASH_CLK_ENABLE\r\n#define __HASH_FORCE_RESET                        __HAL_RCC_HASH_FORCE_RESET\r\n#define __HASH_RELEASE_RESET                      __HAL_RCC_HASH_RELEASE_RESET\r\n#define __HASH_CLK_SLEEP_ENABLE                   __HAL_RCC_HASH_CLK_SLEEP_ENABLE\r\n#define __HASH_CLK_SLEEP_DISABLE                  __HAL_RCC_HASH_CLK_SLEEP_DISABLE\r\n#define __HASH_CLK_DISABLE                        __HAL_RCC_HASH_CLK_DISABLE\r\n#define __SPI5_CLK_ENABLE                         __HAL_RCC_SPI5_CLK_ENABLE\r\n#define __SPI5_CLK_DISABLE                        __HAL_RCC_SPI5_CLK_DISABLE\r\n#define __SPI5_FORCE_RESET                        __HAL_RCC_SPI5_FORCE_RESET\r\n#define __SPI5_RELEASE_RESET                      __HAL_RCC_SPI5_RELEASE_RESET\r\n#define __SPI5_CLK_SLEEP_ENABLE                   __HAL_RCC_SPI5_CLK_SLEEP_ENABLE\r\n#define __SPI5_CLK_SLEEP_DISABLE                  __HAL_RCC_SPI5_CLK_SLEEP_DISABLE\r\n#define __SPI6_CLK_ENABLE                         __HAL_RCC_SPI6_CLK_ENABLE\r\n#define __SPI6_CLK_DISABLE                        __HAL_RCC_SPI6_CLK_DISABLE\r\n#define __SPI6_FORCE_RESET                        __HAL_RCC_SPI6_FORCE_RESET\r\n#define __SPI6_RELEASE_RESET                      __HAL_RCC_SPI6_RELEASE_RESET\r\n#define __SPI6_CLK_SLEEP_ENABLE                   __HAL_RCC_SPI6_CLK_SLEEP_ENABLE\r\n#define __SPI6_CLK_SLEEP_DISABLE                  __HAL_RCC_SPI6_CLK_SLEEP_DISABLE\r\n#define __LTDC_CLK_ENABLE                         __HAL_RCC_LTDC_CLK_ENABLE\r\n#define __LTDC_CLK_DISABLE                        __HAL_RCC_LTDC_CLK_DISABLE\r\n#define __LTDC_FORCE_RESET                        __HAL_RCC_LTDC_FORCE_RESET\r\n#define __LTDC_RELEASE_RESET                      __HAL_RCC_LTDC_RELEASE_RESET\r\n#define __LTDC_CLK_SLEEP_ENABLE                   __HAL_RCC_LTDC_CLK_SLEEP_ENABLE\r\n#define __ETHMAC_CLK_SLEEP_ENABLE                 __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE\r\n#define __ETHMAC_CLK_SLEEP_DISABLE                __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE\r\n#define __ETHMACTX_CLK_SLEEP_ENABLE               __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE\r\n#define __ETHMACTX_CLK_SLEEP_DISABLE              __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE\r\n#define __ETHMACRX_CLK_SLEEP_ENABLE               __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE\r\n#define __ETHMACRX_CLK_SLEEP_DISABLE              __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE\r\n#define __TIM12_CLK_SLEEP_ENABLE                  __HAL_RCC_TIM12_CLK_SLEEP_ENABLE\r\n#define __TIM12_CLK_SLEEP_DISABLE                 __HAL_RCC_TIM12_CLK_SLEEP_DISABLE\r\n#define __TIM13_CLK_SLEEP_ENABLE                  __HAL_RCC_TIM13_CLK_SLEEP_ENABLE\r\n#define __TIM13_CLK_SLEEP_DISABLE                 __HAL_RCC_TIM13_CLK_SLEEP_DISABLE\r\n#define __TIM14_CLK_SLEEP_ENABLE                  __HAL_RCC_TIM14_CLK_SLEEP_ENABLE\r\n#define __TIM14_CLK_SLEEP_DISABLE                 __HAL_RCC_TIM14_CLK_SLEEP_DISABLE\r\n#define __BKPSRAM_CLK_ENABLE                      __HAL_RCC_BKPSRAM_CLK_ENABLE\r\n#define __BKPSRAM_CLK_DISABLE                     __HAL_RCC_BKPSRAM_CLK_DISABLE\r\n#define __BKPSRAM_CLK_SLEEP_ENABLE                __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE\r\n#define __BKPSRAM_CLK_SLEEP_DISABLE               __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE\r\n#define __CCMDATARAMEN_CLK_ENABLE                 __HAL_RCC_CCMDATARAMEN_CLK_ENABLE\r\n#define __CCMDATARAMEN_CLK_DISABLE                __HAL_RCC_CCMDATARAMEN_CLK_DISABLE\r\n#define __USART6_CLK_ENABLE                       __HAL_RCC_USART6_CLK_ENABLE\r\n#define __USART6_CLK_DISABLE                      __HAL_RCC_USART6_CLK_DISABLE\r\n#define __USART6_FORCE_RESET                      __HAL_RCC_USART6_FORCE_RESET\r\n#define __USART6_RELEASE_RESET                    __HAL_RCC_USART6_RELEASE_RESET\r\n#define __USART6_CLK_SLEEP_ENABLE                 __HAL_RCC_USART6_CLK_SLEEP_ENABLE\r\n#define __USART6_CLK_SLEEP_DISABLE                __HAL_RCC_USART6_CLK_SLEEP_DISABLE\r\n#define __SPI4_CLK_ENABLE                         __HAL_RCC_SPI4_CLK_ENABLE\r\n#define __SPI4_CLK_DISABLE                        __HAL_RCC_SPI4_CLK_DISABLE\r\n#define __SPI4_FORCE_RESET                        __HAL_RCC_SPI4_FORCE_RESET\r\n#define __SPI4_RELEASE_RESET                      __HAL_RCC_SPI4_RELEASE_RESET\r\n#define __SPI4_CLK_SLEEP_ENABLE                   __HAL_RCC_SPI4_CLK_SLEEP_ENABLE\r\n#define __SPI4_CLK_SLEEP_DISABLE                  __HAL_RCC_SPI4_CLK_SLEEP_DISABLE\r\n#define __GPIOI_CLK_ENABLE                        __HAL_RCC_GPIOI_CLK_ENABLE\r\n#define __GPIOI_CLK_DISABLE                       __HAL_RCC_GPIOI_CLK_DISABLE\r\n#define __GPIOI_FORCE_RESET                       __HAL_RCC_GPIOI_FORCE_RESET\r\n#define __GPIOI_RELEASE_RESET                     __HAL_RCC_GPIOI_RELEASE_RESET\r\n#define __GPIOI_CLK_SLEEP_ENABLE                  __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE\r\n#define __GPIOI_CLK_SLEEP_DISABLE                 __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE\r\n#define __GPIOJ_CLK_ENABLE                        __HAL_RCC_GPIOJ_CLK_ENABLE\r\n#define __GPIOJ_CLK_DISABLE                       __HAL_RCC_GPIOJ_CLK_DISABLE\r\n#define __GPIOJ_FORCE_RESET                       __HAL_RCC_GPIOJ_FORCE_RESET\r\n#define __GPIOJ_RELEASE_RESET                     __HAL_RCC_GPIOJ_RELEASE_RESET\r\n#define __GPIOJ_CLK_SLEEP_ENABLE                  __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE\r\n#define __GPIOJ_CLK_SLEEP_DISABLE                 __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE\r\n#define __GPIOK_CLK_ENABLE                        __HAL_RCC_GPIOK_CLK_ENABLE\r\n#define __GPIOK_CLK_DISABLE                       __HAL_RCC_GPIOK_CLK_DISABLE\r\n#define __GPIOK_RELEASE_RESET                     __HAL_RCC_GPIOK_RELEASE_RESET\r\n#define __GPIOK_CLK_SLEEP_ENABLE                  __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE\r\n#define __GPIOK_CLK_SLEEP_DISABLE                 __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE\r\n#define __ETH_CLK_ENABLE                          __HAL_RCC_ETH_CLK_ENABLE\r\n#define __ETH_CLK_DISABLE                         __HAL_RCC_ETH_CLK_DISABLE\r\n#define __DCMI_CLK_ENABLE                         __HAL_RCC_DCMI_CLK_ENABLE\r\n#define __DCMI_CLK_DISABLE                        __HAL_RCC_DCMI_CLK_DISABLE\r\n#define __DCMI_FORCE_RESET                        __HAL_RCC_DCMI_FORCE_RESET\r\n#define __DCMI_RELEASE_RESET                      __HAL_RCC_DCMI_RELEASE_RESET\r\n#define __DCMI_CLK_SLEEP_ENABLE                   __HAL_RCC_DCMI_CLK_SLEEP_ENABLE\r\n#define __DCMI_CLK_SLEEP_DISABLE                  __HAL_RCC_DCMI_CLK_SLEEP_DISABLE\r\n#define __UART7_CLK_ENABLE                        __HAL_RCC_UART7_CLK_ENABLE\r\n#define __UART7_CLK_DISABLE                       __HAL_RCC_UART7_CLK_DISABLE\r\n#define __UART7_RELEASE_RESET                     __HAL_RCC_UART7_RELEASE_RESET\r\n#define __UART7_FORCE_RESET                       __HAL_RCC_UART7_FORCE_RESET\r\n#define __UART7_CLK_SLEEP_ENABLE                  __HAL_RCC_UART7_CLK_SLEEP_ENABLE\r\n#define __UART7_CLK_SLEEP_DISABLE                 __HAL_RCC_UART7_CLK_SLEEP_DISABLE\r\n#define __UART8_CLK_ENABLE                        __HAL_RCC_UART8_CLK_ENABLE\r\n#define __UART8_CLK_DISABLE                       __HAL_RCC_UART8_CLK_DISABLE\r\n#define __UART8_FORCE_RESET                       __HAL_RCC_UART8_FORCE_RESET\r\n#define __UART8_RELEASE_RESET                     __HAL_RCC_UART8_RELEASE_RESET\r\n#define __UART8_CLK_SLEEP_ENABLE                  __HAL_RCC_UART8_CLK_SLEEP_ENABLE\r\n#define __UART8_CLK_SLEEP_DISABLE                 __HAL_RCC_UART8_CLK_SLEEP_DISABLE\r\n#define __OTGHS_CLK_SLEEP_ENABLE                  __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE\r\n#define __OTGHS_CLK_SLEEP_DISABLE                 __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE\r\n#define __OTGHS_FORCE_RESET                       __HAL_RCC_USB_OTG_HS_FORCE_RESET\r\n#define __OTGHS_RELEASE_RESET                     __HAL_RCC_USB_OTG_HS_RELEASE_RESET\r\n#define __OTGHSULPI_CLK_SLEEP_ENABLE              __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE\r\n#define __OTGHSULPI_CLK_SLEEP_DISABLE             __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE          __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_OTGHS_CLK_SLEEP_DISABLE         __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED      __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED\r\n#define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED     __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED\r\n#define __HAL_RCC_OTGHS_FORCE_RESET               __HAL_RCC_USB_OTG_HS_FORCE_RESET\r\n#define __HAL_RCC_OTGHS_RELEASE_RESET             __HAL_RCC_USB_OTG_HS_RELEASE_RESET\r\n#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE      __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE     __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED  __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED\r\n#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED\r\n#define __SRAM3_CLK_SLEEP_ENABLE                  __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE\r\n#define __CAN2_CLK_SLEEP_ENABLE                   __HAL_RCC_CAN2_CLK_SLEEP_ENABLE\r\n#define __CAN2_CLK_SLEEP_DISABLE                  __HAL_RCC_CAN2_CLK_SLEEP_DISABLE\r\n#define __DAC_CLK_SLEEP_ENABLE                    __HAL_RCC_DAC_CLK_SLEEP_ENABLE\r\n#define __DAC_CLK_SLEEP_DISABLE                   __HAL_RCC_DAC_CLK_SLEEP_DISABLE\r\n#define __ADC2_CLK_SLEEP_ENABLE                   __HAL_RCC_ADC2_CLK_SLEEP_ENABLE\r\n#define __ADC2_CLK_SLEEP_DISABLE                  __HAL_RCC_ADC2_CLK_SLEEP_DISABLE\r\n#define __ADC3_CLK_SLEEP_ENABLE                   __HAL_RCC_ADC3_CLK_SLEEP_ENABLE\r\n#define __ADC3_CLK_SLEEP_DISABLE                  __HAL_RCC_ADC3_CLK_SLEEP_DISABLE\r\n#define __FSMC_FORCE_RESET                        __HAL_RCC_FSMC_FORCE_RESET\r\n#define __FSMC_RELEASE_RESET                      __HAL_RCC_FSMC_RELEASE_RESET\r\n#define __FSMC_CLK_SLEEP_ENABLE                   __HAL_RCC_FSMC_CLK_SLEEP_ENABLE\r\n#define __FSMC_CLK_SLEEP_DISABLE                  __HAL_RCC_FSMC_CLK_SLEEP_DISABLE\r\n#define __SDIO_FORCE_RESET                        __HAL_RCC_SDIO_FORCE_RESET\r\n#define __SDIO_RELEASE_RESET                      __HAL_RCC_SDIO_RELEASE_RESET\r\n#define __SDIO_CLK_SLEEP_DISABLE                  __HAL_RCC_SDIO_CLK_SLEEP_DISABLE\r\n#define __SDIO_CLK_SLEEP_ENABLE                   __HAL_RCC_SDIO_CLK_SLEEP_ENABLE\r\n#define __DMA2D_CLK_ENABLE                        __HAL_RCC_DMA2D_CLK_ENABLE\r\n#define __DMA2D_CLK_DISABLE                       __HAL_RCC_DMA2D_CLK_DISABLE\r\n#define __DMA2D_FORCE_RESET                       __HAL_RCC_DMA2D_FORCE_RESET\r\n#define __DMA2D_RELEASE_RESET                     __HAL_RCC_DMA2D_RELEASE_RESET\r\n#define __DMA2D_CLK_SLEEP_ENABLE                  __HAL_RCC_DMA2D_CLK_SLEEP_ENABLE\r\n#define __DMA2D_CLK_SLEEP_DISABLE                 __HAL_RCC_DMA2D_CLK_SLEEP_DISABLE\r\n\r\n/* alias define maintained for legacy */\r\n#define __HAL_RCC_OTGFS_FORCE_RESET   __HAL_RCC_USB_OTG_FS_FORCE_RESET\r\n#define __HAL_RCC_OTGFS_RELEASE_RESET __HAL_RCC_USB_OTG_FS_RELEASE_RESET\r\n\r\n#define __ADC12_CLK_ENABLE   __HAL_RCC_ADC12_CLK_ENABLE\r\n#define __ADC12_CLK_DISABLE  __HAL_RCC_ADC12_CLK_DISABLE\r\n#define __ADC34_CLK_ENABLE   __HAL_RCC_ADC34_CLK_ENABLE\r\n#define __ADC34_CLK_DISABLE  __HAL_RCC_ADC34_CLK_DISABLE\r\n#define __DAC2_CLK_ENABLE    __HAL_RCC_DAC2_CLK_ENABLE\r\n#define __DAC2_CLK_DISABLE   __HAL_RCC_DAC2_CLK_DISABLE\r\n#define __TIM18_CLK_ENABLE   __HAL_RCC_TIM18_CLK_ENABLE\r\n#define __TIM18_CLK_DISABLE  __HAL_RCC_TIM18_CLK_DISABLE\r\n#define __TIM19_CLK_ENABLE   __HAL_RCC_TIM19_CLK_ENABLE\r\n#define __TIM19_CLK_DISABLE  __HAL_RCC_TIM19_CLK_DISABLE\r\n#define __TIM20_CLK_ENABLE   __HAL_RCC_TIM20_CLK_ENABLE\r\n#define __TIM20_CLK_DISABLE  __HAL_RCC_TIM20_CLK_DISABLE\r\n#define __HRTIM1_CLK_ENABLE  __HAL_RCC_HRTIM1_CLK_ENABLE\r\n#define __HRTIM1_CLK_DISABLE __HAL_RCC_HRTIM1_CLK_DISABLE\r\n#define __SDADC1_CLK_ENABLE  __HAL_RCC_SDADC1_CLK_ENABLE\r\n#define __SDADC2_CLK_ENABLE  __HAL_RCC_SDADC2_CLK_ENABLE\r\n#define __SDADC3_CLK_ENABLE  __HAL_RCC_SDADC3_CLK_ENABLE\r\n#define __SDADC1_CLK_DISABLE __HAL_RCC_SDADC1_CLK_DISABLE\r\n#define __SDADC2_CLK_DISABLE __HAL_RCC_SDADC2_CLK_DISABLE\r\n#define __SDADC3_CLK_DISABLE __HAL_RCC_SDADC3_CLK_DISABLE\r\n\r\n#define __ADC12_FORCE_RESET    __HAL_RCC_ADC12_FORCE_RESET\r\n#define __ADC12_RELEASE_RESET  __HAL_RCC_ADC12_RELEASE_RESET\r\n#define __ADC34_FORCE_RESET    __HAL_RCC_ADC34_FORCE_RESET\r\n#define __ADC34_RELEASE_RESET  __HAL_RCC_ADC34_RELEASE_RESET\r\n#define __DAC2_FORCE_RESET     __HAL_RCC_DAC2_FORCE_RESET\r\n#define __DAC2_RELEASE_RESET   __HAL_RCC_DAC2_RELEASE_RESET\r\n#define __TIM18_FORCE_RESET    __HAL_RCC_TIM18_FORCE_RESET\r\n#define __TIM18_RELEASE_RESET  __HAL_RCC_TIM18_RELEASE_RESET\r\n#define __TIM19_FORCE_RESET    __HAL_RCC_TIM19_FORCE_RESET\r\n#define __TIM19_RELEASE_RESET  __HAL_RCC_TIM19_RELEASE_RESET\r\n#define __TIM20_FORCE_RESET    __HAL_RCC_TIM20_FORCE_RESET\r\n#define __TIM20_RELEASE_RESET  __HAL_RCC_TIM20_RELEASE_RESET\r\n#define __HRTIM1_FORCE_RESET   __HAL_RCC_HRTIM1_FORCE_RESET\r\n#define __HRTIM1_RELEASE_RESET __HAL_RCC_HRTIM1_RELEASE_RESET\r\n#define __SDADC1_FORCE_RESET   __HAL_RCC_SDADC1_FORCE_RESET\r\n#define __SDADC2_FORCE_RESET   __HAL_RCC_SDADC2_FORCE_RESET\r\n#define __SDADC3_FORCE_RESET   __HAL_RCC_SDADC3_FORCE_RESET\r\n#define __SDADC1_RELEASE_RESET __HAL_RCC_SDADC1_RELEASE_RESET\r\n#define __SDADC2_RELEASE_RESET __HAL_RCC_SDADC2_RELEASE_RESET\r\n#define __SDADC3_RELEASE_RESET __HAL_RCC_SDADC3_RELEASE_RESET\r\n\r\n#define __ADC1_IS_CLK_ENABLED    __HAL_RCC_ADC1_IS_CLK_ENABLED\r\n#define __ADC1_IS_CLK_DISABLED   __HAL_RCC_ADC1_IS_CLK_DISABLED\r\n#define __ADC12_IS_CLK_ENABLED   __HAL_RCC_ADC12_IS_CLK_ENABLED\r\n#define __ADC12_IS_CLK_DISABLED  __HAL_RCC_ADC12_IS_CLK_DISABLED\r\n#define __ADC34_IS_CLK_ENABLED   __HAL_RCC_ADC34_IS_CLK_ENABLED\r\n#define __ADC34_IS_CLK_DISABLED  __HAL_RCC_ADC34_IS_CLK_DISABLED\r\n#define __CEC_IS_CLK_ENABLED     __HAL_RCC_CEC_IS_CLK_ENABLED\r\n#define __CEC_IS_CLK_DISABLED    __HAL_RCC_CEC_IS_CLK_DISABLED\r\n#define __CRC_IS_CLK_ENABLED     __HAL_RCC_CRC_IS_CLK_ENABLED\r\n#define __CRC_IS_CLK_DISABLED    __HAL_RCC_CRC_IS_CLK_DISABLED\r\n#define __DAC1_IS_CLK_ENABLED    __HAL_RCC_DAC1_IS_CLK_ENABLED\r\n#define __DAC1_IS_CLK_DISABLED   __HAL_RCC_DAC1_IS_CLK_DISABLED\r\n#define __DAC2_IS_CLK_ENABLED    __HAL_RCC_DAC2_IS_CLK_ENABLED\r\n#define __DAC2_IS_CLK_DISABLED   __HAL_RCC_DAC2_IS_CLK_DISABLED\r\n#define __DMA1_IS_CLK_ENABLED    __HAL_RCC_DMA1_IS_CLK_ENABLED\r\n#define __DMA1_IS_CLK_DISABLED   __HAL_RCC_DMA1_IS_CLK_DISABLED\r\n#define __DMA2_IS_CLK_ENABLED    __HAL_RCC_DMA2_IS_CLK_ENABLED\r\n#define __DMA2_IS_CLK_DISABLED   __HAL_RCC_DMA2_IS_CLK_DISABLED\r\n#define __FLITF_IS_CLK_ENABLED   __HAL_RCC_FLITF_IS_CLK_ENABLED\r\n#define __FLITF_IS_CLK_DISABLED  __HAL_RCC_FLITF_IS_CLK_DISABLED\r\n#define __FMC_IS_CLK_ENABLED     __HAL_RCC_FMC_IS_CLK_ENABLED\r\n#define __FMC_IS_CLK_DISABLED    __HAL_RCC_FMC_IS_CLK_DISABLED\r\n#define __GPIOA_IS_CLK_ENABLED   __HAL_RCC_GPIOA_IS_CLK_ENABLED\r\n#define __GPIOA_IS_CLK_DISABLED  __HAL_RCC_GPIOA_IS_CLK_DISABLED\r\n#define __GPIOB_IS_CLK_ENABLED   __HAL_RCC_GPIOB_IS_CLK_ENABLED\r\n#define __GPIOB_IS_CLK_DISABLED  __HAL_RCC_GPIOB_IS_CLK_DISABLED\r\n#define __GPIOC_IS_CLK_ENABLED   __HAL_RCC_GPIOC_IS_CLK_ENABLED\r\n#define __GPIOC_IS_CLK_DISABLED  __HAL_RCC_GPIOC_IS_CLK_DISABLED\r\n#define __GPIOD_IS_CLK_ENABLED   __HAL_RCC_GPIOD_IS_CLK_ENABLED\r\n#define __GPIOD_IS_CLK_DISABLED  __HAL_RCC_GPIOD_IS_CLK_DISABLED\r\n#define __GPIOE_IS_CLK_ENABLED   __HAL_RCC_GPIOE_IS_CLK_ENABLED\r\n#define __GPIOE_IS_CLK_DISABLED  __HAL_RCC_GPIOE_IS_CLK_DISABLED\r\n#define __GPIOF_IS_CLK_ENABLED   __HAL_RCC_GPIOF_IS_CLK_ENABLED\r\n#define __GPIOF_IS_CLK_DISABLED  __HAL_RCC_GPIOF_IS_CLK_DISABLED\r\n#define __GPIOG_IS_CLK_ENABLED   __HAL_RCC_GPIOG_IS_CLK_ENABLED\r\n#define __GPIOG_IS_CLK_DISABLED  __HAL_RCC_GPIOG_IS_CLK_DISABLED\r\n#define __GPIOH_IS_CLK_ENABLED   __HAL_RCC_GPIOH_IS_CLK_ENABLED\r\n#define __GPIOH_IS_CLK_DISABLED  __HAL_RCC_GPIOH_IS_CLK_DISABLED\r\n#define __HRTIM1_IS_CLK_ENABLED  __HAL_RCC_HRTIM1_IS_CLK_ENABLED\r\n#define __HRTIM1_IS_CLK_DISABLED __HAL_RCC_HRTIM1_IS_CLK_DISABLED\r\n#define __I2C1_IS_CLK_ENABLED    __HAL_RCC_I2C1_IS_CLK_ENABLED\r\n#define __I2C1_IS_CLK_DISABLED   __HAL_RCC_I2C1_IS_CLK_DISABLED\r\n#define __I2C2_IS_CLK_ENABLED    __HAL_RCC_I2C2_IS_CLK_ENABLED\r\n#define __I2C2_IS_CLK_DISABLED   __HAL_RCC_I2C2_IS_CLK_DISABLED\r\n#define __I2C3_IS_CLK_ENABLED    __HAL_RCC_I2C3_IS_CLK_ENABLED\r\n#define __I2C3_IS_CLK_DISABLED   __HAL_RCC_I2C3_IS_CLK_DISABLED\r\n#define __PWR_IS_CLK_ENABLED     __HAL_RCC_PWR_IS_CLK_ENABLED\r\n#define __PWR_IS_CLK_DISABLED    __HAL_RCC_PWR_IS_CLK_DISABLED\r\n#define __SYSCFG_IS_CLK_ENABLED  __HAL_RCC_SYSCFG_IS_CLK_ENABLED\r\n#define __SYSCFG_IS_CLK_DISABLED __HAL_RCC_SYSCFG_IS_CLK_DISABLED\r\n#define __SPI1_IS_CLK_ENABLED    __HAL_RCC_SPI1_IS_CLK_ENABLED\r\n#define __SPI1_IS_CLK_DISABLED   __HAL_RCC_SPI1_IS_CLK_DISABLED\r\n#define __SPI2_IS_CLK_ENABLED    __HAL_RCC_SPI2_IS_CLK_ENABLED\r\n#define __SPI2_IS_CLK_DISABLED   __HAL_RCC_SPI2_IS_CLK_DISABLED\r\n#define __SPI3_IS_CLK_ENABLED    __HAL_RCC_SPI3_IS_CLK_ENABLED\r\n#define __SPI3_IS_CLK_DISABLED   __HAL_RCC_SPI3_IS_CLK_DISABLED\r\n#define __SPI4_IS_CLK_ENABLED    __HAL_RCC_SPI4_IS_CLK_ENABLED\r\n#define __SPI4_IS_CLK_DISABLED   __HAL_RCC_SPI4_IS_CLK_DISABLED\r\n#define __SDADC1_IS_CLK_ENABLED  __HAL_RCC_SDADC1_IS_CLK_ENABLED\r\n#define __SDADC1_IS_CLK_DISABLED __HAL_RCC_SDADC1_IS_CLK_DISABLED\r\n#define __SDADC2_IS_CLK_ENABLED  __HAL_RCC_SDADC2_IS_CLK_ENABLED\r\n#define __SDADC2_IS_CLK_DISABLED __HAL_RCC_SDADC2_IS_CLK_DISABLED\r\n#define __SDADC3_IS_CLK_ENABLED  __HAL_RCC_SDADC3_IS_CLK_ENABLED\r\n#define __SDADC3_IS_CLK_DISABLED __HAL_RCC_SDADC3_IS_CLK_DISABLED\r\n#define __SRAM_IS_CLK_ENABLED    __HAL_RCC_SRAM_IS_CLK_ENABLED\r\n#define __SRAM_IS_CLK_DISABLED   __HAL_RCC_SRAM_IS_CLK_DISABLED\r\n#define __TIM1_IS_CLK_ENABLED    __HAL_RCC_TIM1_IS_CLK_ENABLED\r\n#define __TIM1_IS_CLK_DISABLED   __HAL_RCC_TIM1_IS_CLK_DISABLED\r\n#define __TIM2_IS_CLK_ENABLED    __HAL_RCC_TIM2_IS_CLK_ENABLED\r\n#define __TIM2_IS_CLK_DISABLED   __HAL_RCC_TIM2_IS_CLK_DISABLED\r\n#define __TIM3_IS_CLK_ENABLED    __HAL_RCC_TIM3_IS_CLK_ENABLED\r\n#define __TIM3_IS_CLK_DISABLED   __HAL_RCC_TIM3_IS_CLK_DISABLED\r\n#define __TIM4_IS_CLK_ENABLED    __HAL_RCC_TIM4_IS_CLK_ENABLED\r\n#define __TIM4_IS_CLK_DISABLED   __HAL_RCC_TIM4_IS_CLK_DISABLED\r\n#define __TIM5_IS_CLK_ENABLED    __HAL_RCC_TIM5_IS_CLK_ENABLED\r\n#define __TIM5_IS_CLK_DISABLED   __HAL_RCC_TIM5_IS_CLK_DISABLED\r\n#define __TIM6_IS_CLK_ENABLED    __HAL_RCC_TIM6_IS_CLK_ENABLED\r\n#define __TIM6_IS_CLK_DISABLED   __HAL_RCC_TIM6_IS_CLK_DISABLED\r\n#define __TIM7_IS_CLK_ENABLED    __HAL_RCC_TIM7_IS_CLK_ENABLED\r\n#define __TIM7_IS_CLK_DISABLED   __HAL_RCC_TIM7_IS_CLK_DISABLED\r\n#define __TIM8_IS_CLK_ENABLED    __HAL_RCC_TIM8_IS_CLK_ENABLED\r\n#define __TIM8_IS_CLK_DISABLED   __HAL_RCC_TIM8_IS_CLK_DISABLED\r\n#define __TIM12_IS_CLK_ENABLED   __HAL_RCC_TIM12_IS_CLK_ENABLED\r\n#define __TIM12_IS_CLK_DISABLED  __HAL_RCC_TIM12_IS_CLK_DISABLED\r\n#define __TIM13_IS_CLK_ENABLED   __HAL_RCC_TIM13_IS_CLK_ENABLED\r\n#define __TIM13_IS_CLK_DISABLED  __HAL_RCC_TIM13_IS_CLK_DISABLED\r\n#define __TIM14_IS_CLK_ENABLED   __HAL_RCC_TIM14_IS_CLK_ENABLED\r\n#define __TIM14_IS_CLK_DISABLED  __HAL_RCC_TIM14_IS_CLK_DISABLED\r\n#define __TIM15_IS_CLK_ENABLED   __HAL_RCC_TIM15_IS_CLK_ENABLED\r\n#define __TIM15_IS_CLK_DISABLED  __HAL_RCC_TIM15_IS_CLK_DISABLED\r\n#define __TIM16_IS_CLK_ENABLED   __HAL_RCC_TIM16_IS_CLK_ENABLED\r\n#define __TIM16_IS_CLK_DISABLED  __HAL_RCC_TIM16_IS_CLK_DISABLED\r\n#define __TIM17_IS_CLK_ENABLED   __HAL_RCC_TIM17_IS_CLK_ENABLED\r\n#define __TIM17_IS_CLK_DISABLED  __HAL_RCC_TIM17_IS_CLK_DISABLED\r\n#define __TIM18_IS_CLK_ENABLED   __HAL_RCC_TIM18_IS_CLK_ENABLED\r\n#define __TIM18_IS_CLK_DISABLED  __HAL_RCC_TIM18_IS_CLK_DISABLED\r\n#define __TIM19_IS_CLK_ENABLED   __HAL_RCC_TIM19_IS_CLK_ENABLED\r\n#define __TIM19_IS_CLK_DISABLED  __HAL_RCC_TIM19_IS_CLK_DISABLED\r\n#define __TIM20_IS_CLK_ENABLED   __HAL_RCC_TIM20_IS_CLK_ENABLED\r\n#define __TIM20_IS_CLK_DISABLED  __HAL_RCC_TIM20_IS_CLK_DISABLED\r\n#define __TSC_IS_CLK_ENABLED     __HAL_RCC_TSC_IS_CLK_ENABLED\r\n#define __TSC_IS_CLK_DISABLED    __HAL_RCC_TSC_IS_CLK_DISABLED\r\n#define __UART4_IS_CLK_ENABLED   __HAL_RCC_UART4_IS_CLK_ENABLED\r\n#define __UART4_IS_CLK_DISABLED  __HAL_RCC_UART4_IS_CLK_DISABLED\r\n#define __UART5_IS_CLK_ENABLED   __HAL_RCC_UART5_IS_CLK_ENABLED\r\n#define __UART5_IS_CLK_DISABLED  __HAL_RCC_UART5_IS_CLK_DISABLED\r\n#define __USART1_IS_CLK_ENABLED  __HAL_RCC_USART1_IS_CLK_ENABLED\r\n#define __USART1_IS_CLK_DISABLED __HAL_RCC_USART1_IS_CLK_DISABLED\r\n#define __USART2_IS_CLK_ENABLED  __HAL_RCC_USART2_IS_CLK_ENABLED\r\n#define __USART2_IS_CLK_DISABLED __HAL_RCC_USART2_IS_CLK_DISABLED\r\n#define __USART3_IS_CLK_ENABLED  __HAL_RCC_USART3_IS_CLK_ENABLED\r\n#define __USART3_IS_CLK_DISABLED __HAL_RCC_USART3_IS_CLK_DISABLED\r\n#define __USB_IS_CLK_ENABLED     __HAL_RCC_USB_IS_CLK_ENABLED\r\n#define __USB_IS_CLK_DISABLED    __HAL_RCC_USB_IS_CLK_DISABLED\r\n#define __WWDG_IS_CLK_ENABLED    __HAL_RCC_WWDG_IS_CLK_ENABLED\r\n#define __WWDG_IS_CLK_DISABLED   __HAL_RCC_WWDG_IS_CLK_DISABLED\r\n\r\n#if defined(STM32L1)\r\n#define __HAL_RCC_CRYP_CLK_DISABLE       __HAL_RCC_AES_CLK_DISABLE\r\n#define __HAL_RCC_CRYP_CLK_ENABLE        __HAL_RCC_AES_CLK_ENABLE\r\n#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE  __HAL_RCC_AES_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_CRYP_FORCE_RESET       __HAL_RCC_AES_FORCE_RESET\r\n#define __HAL_RCC_CRYP_RELEASE_RESET     __HAL_RCC_AES_RELEASE_RESET\r\n#endif /* STM32L1 */\r\n\r\n#if defined(STM32F4)\r\n#define __HAL_RCC_SDMMC1_FORCE_RESET       __HAL_RCC_SDIO_FORCE_RESET\r\n#define __HAL_RCC_SDMMC1_RELEASE_RESET     __HAL_RCC_SDIO_RELEASE_RESET\r\n#define __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE  __HAL_RCC_SDIO_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_SDMMC1_CLK_ENABLE        __HAL_RCC_SDIO_CLK_ENABLE\r\n#define __HAL_RCC_SDMMC1_CLK_DISABLE       __HAL_RCC_SDIO_CLK_DISABLE\r\n#define __HAL_RCC_SDMMC1_IS_CLK_ENABLED    __HAL_RCC_SDIO_IS_CLK_ENABLED\r\n#define __HAL_RCC_SDMMC1_IS_CLK_DISABLED   __HAL_RCC_SDIO_IS_CLK_DISABLED\r\n#define Sdmmc1ClockSelection               SdioClockSelection\r\n#define RCC_PERIPHCLK_SDMMC1               RCC_PERIPHCLK_SDIO\r\n#define RCC_SDMMC1CLKSOURCE_CLK48          RCC_SDIOCLKSOURCE_CK48\r\n#define RCC_SDMMC1CLKSOURCE_SYSCLK         RCC_SDIOCLKSOURCE_SYSCLK\r\n#define __HAL_RCC_SDMMC1_CONFIG            __HAL_RCC_SDIO_CONFIG\r\n#define __HAL_RCC_GET_SDMMC1_SOURCE        __HAL_RCC_GET_SDIO_SOURCE\r\n#endif\r\n\r\n#if defined(STM32F7) || defined(STM32L4)\r\n#define __HAL_RCC_SDIO_FORCE_RESET       __HAL_RCC_SDMMC1_FORCE_RESET\r\n#define __HAL_RCC_SDIO_RELEASE_RESET     __HAL_RCC_SDMMC1_RELEASE_RESET\r\n#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE  __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_SDIO_CLK_ENABLE        __HAL_RCC_SDMMC1_CLK_ENABLE\r\n#define __HAL_RCC_SDIO_CLK_DISABLE       __HAL_RCC_SDMMC1_CLK_DISABLE\r\n#define __HAL_RCC_SDIO_IS_CLK_ENABLED    __HAL_RCC_SDMMC1_IS_CLK_ENABLED\r\n#define __HAL_RCC_SDIO_IS_CLK_DISABLED   __HAL_RCC_SDMMC1_IS_CLK_DISABLED\r\n#define SdioClockSelection               Sdmmc1ClockSelection\r\n#define RCC_PERIPHCLK_SDIO               RCC_PERIPHCLK_SDMMC1\r\n#define __HAL_RCC_SDIO_CONFIG            __HAL_RCC_SDMMC1_CONFIG\r\n#define __HAL_RCC_GET_SDIO_SOURCE        __HAL_RCC_GET_SDMMC1_SOURCE\r\n#endif\r\n\r\n#if defined(STM32F7)\r\n#define RCC_SDIOCLKSOURCE_CLK48  RCC_SDMMC1CLKSOURCE_CLK48\r\n#define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK\r\n#endif\r\n\r\n#if defined(STM32H7)\r\n#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE()             __HAL_RCC_USB1_OTG_HS_CLK_ENABLE()\r\n#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE()        __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE()\r\n#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE()            __HAL_RCC_USB1_OTG_HS_CLK_DISABLE()\r\n#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE()       __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE()\r\n#define __HAL_RCC_USB_OTG_HS_FORCE_RESET()            __HAL_RCC_USB1_OTG_HS_FORCE_RESET()\r\n#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET()          __HAL_RCC_USB1_OTG_HS_RELEASE_RESET()\r\n#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE()       __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE()\r\n#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE()  __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE()\r\n#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE()      __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE()\r\n#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE()\r\n\r\n#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE()             __HAL_RCC_USB2_OTG_FS_CLK_ENABLE()\r\n#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE()        __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE()\r\n#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE()            __HAL_RCC_USB2_OTG_FS_CLK_DISABLE()\r\n#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE()       __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE()\r\n#define __HAL_RCC_USB_OTG_FS_FORCE_RESET()            __HAL_RCC_USB2_OTG_FS_FORCE_RESET()\r\n#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET()          __HAL_RCC_USB2_OTG_FS_RELEASE_RESET()\r\n#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE()       __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE()\r\n#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE()  __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE()\r\n#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE()      __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE()\r\n#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE()\r\n#endif\r\n\r\n#define __HAL_RCC_I2SCLK        __HAL_RCC_I2S_CONFIG\r\n#define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG\r\n\r\n#define __RCC_PLLSRC RCC_GET_PLL_OSCSOURCE\r\n\r\n#define IS_RCC_MSIRANGE      IS_RCC_MSI_CLOCK_RANGE\r\n#define IS_RCC_RTCCLK_SOURCE IS_RCC_RTCCLKSOURCE\r\n#define IS_RCC_SYSCLK_DIV    IS_RCC_HCLK\r\n#define IS_RCC_HCLK_DIV      IS_RCC_PCLK\r\n#define IS_RCC_PERIPHCLK     IS_RCC_PERIPHCLOCK\r\n\r\n#define RCC_IT_HSI14 RCC_IT_HSI14RDY\r\n\r\n#define RCC_IT_CSSLSE RCC_IT_LSECSS\r\n#define RCC_IT_CSSHSE RCC_IT_CSS\r\n\r\n#define RCC_PLLMUL_3  RCC_PLL_MUL3\r\n#define RCC_PLLMUL_4  RCC_PLL_MUL4\r\n#define RCC_PLLMUL_6  RCC_PLL_MUL6\r\n#define RCC_PLLMUL_8  RCC_PLL_MUL8\r\n#define RCC_PLLMUL_12 RCC_PLL_MUL12\r\n#define RCC_PLLMUL_16 RCC_PLL_MUL16\r\n#define RCC_PLLMUL_24 RCC_PLL_MUL24\r\n#define RCC_PLLMUL_32 RCC_PLL_MUL32\r\n#define RCC_PLLMUL_48 RCC_PLL_MUL48\r\n\r\n#define RCC_PLLDIV_2 RCC_PLL_DIV2\r\n#define RCC_PLLDIV_3 RCC_PLL_DIV3\r\n#define RCC_PLLDIV_4 RCC_PLL_DIV4\r\n\r\n#define IS_RCC_MCOSOURCE           IS_RCC_MCO1SOURCE\r\n#define __HAL_RCC_MCO_CONFIG       __HAL_RCC_MCO1_CONFIG\r\n#define RCC_MCO_NODIV              RCC_MCODIV_1\r\n#define RCC_MCO_DIV1               RCC_MCODIV_1\r\n#define RCC_MCO_DIV2               RCC_MCODIV_2\r\n#define RCC_MCO_DIV4               RCC_MCODIV_4\r\n#define RCC_MCO_DIV8               RCC_MCODIV_8\r\n#define RCC_MCO_DIV16              RCC_MCODIV_16\r\n#define RCC_MCO_DIV32              RCC_MCODIV_32\r\n#define RCC_MCO_DIV64              RCC_MCODIV_64\r\n#define RCC_MCO_DIV128             RCC_MCODIV_128\r\n#define RCC_MCOSOURCE_NONE         RCC_MCO1SOURCE_NOCLOCK\r\n#define RCC_MCOSOURCE_LSI          RCC_MCO1SOURCE_LSI\r\n#define RCC_MCOSOURCE_LSE          RCC_MCO1SOURCE_LSE\r\n#define RCC_MCOSOURCE_SYSCLK       RCC_MCO1SOURCE_SYSCLK\r\n#define RCC_MCOSOURCE_HSI          RCC_MCO1SOURCE_HSI\r\n#define RCC_MCOSOURCE_HSI14        RCC_MCO1SOURCE_HSI14\r\n#define RCC_MCOSOURCE_HSI48        RCC_MCO1SOURCE_HSI48\r\n#define RCC_MCOSOURCE_HSE          RCC_MCO1SOURCE_HSE\r\n#define RCC_MCOSOURCE_PLLCLK_DIV1  RCC_MCO1SOURCE_PLLCLK\r\n#define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK\r\n#define RCC_MCOSOURCE_PLLCLK_DIV2  RCC_MCO1SOURCE_PLLCLK_DIV2\r\n\r\n#if defined(STM32L4) || defined(STM32WB) || defined(STM32G0) || defined(STM32G4) || defined(STM32L5)\r\n#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE\r\n#else\r\n#define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK\r\n#endif\r\n\r\n#define RCC_USBCLK_PLLSAI1      RCC_USBCLKSOURCE_PLLSAI1\r\n#define RCC_USBCLK_PLL          RCC_USBCLKSOURCE_PLL\r\n#define RCC_USBCLK_MSI          RCC_USBCLKSOURCE_MSI\r\n#define RCC_USBCLKSOURCE_PLLCLK RCC_USBCLKSOURCE_PLL\r\n#define RCC_USBPLLCLK_DIV1      RCC_USBCLKSOURCE_PLL\r\n#define RCC_USBPLLCLK_DIV1_5    RCC_USBCLKSOURCE_PLL_DIV1_5\r\n#define RCC_USBPLLCLK_DIV2      RCC_USBCLKSOURCE_PLL_DIV2\r\n#define RCC_USBPLLCLK_DIV3      RCC_USBCLKSOURCE_PLL_DIV3\r\n\r\n#define HSION_BitNumber             RCC_HSION_BIT_NUMBER\r\n#define HSION_BITNUMBER             RCC_HSION_BIT_NUMBER\r\n#define HSEON_BitNumber             RCC_HSEON_BIT_NUMBER\r\n#define HSEON_BITNUMBER             RCC_HSEON_BIT_NUMBER\r\n#define MSION_BITNUMBER             RCC_MSION_BIT_NUMBER\r\n#define CSSON_BitNumber             RCC_CSSON_BIT_NUMBER\r\n#define CSSON_BITNUMBER             RCC_CSSON_BIT_NUMBER\r\n#define PLLON_BitNumber             RCC_PLLON_BIT_NUMBER\r\n#define PLLON_BITNUMBER             RCC_PLLON_BIT_NUMBER\r\n#define PLLI2SON_BitNumber          RCC_PLLI2SON_BIT_NUMBER\r\n#define I2SSRC_BitNumber            RCC_I2SSRC_BIT_NUMBER\r\n#define RTCEN_BitNumber             RCC_RTCEN_BIT_NUMBER\r\n#define RTCEN_BITNUMBER             RCC_RTCEN_BIT_NUMBER\r\n#define BDRST_BitNumber             RCC_BDRST_BIT_NUMBER\r\n#define BDRST_BITNUMBER             RCC_BDRST_BIT_NUMBER\r\n#define RTCRST_BITNUMBER            RCC_RTCRST_BIT_NUMBER\r\n#define LSION_BitNumber             RCC_LSION_BIT_NUMBER\r\n#define LSION_BITNUMBER             RCC_LSION_BIT_NUMBER\r\n#define LSEON_BitNumber             RCC_LSEON_BIT_NUMBER\r\n#define LSEON_BITNUMBER             RCC_LSEON_BIT_NUMBER\r\n#define LSEBYP_BITNUMBER            RCC_LSEBYP_BIT_NUMBER\r\n#define PLLSAION_BitNumber          RCC_PLLSAION_BIT_NUMBER\r\n#define TIMPRE_BitNumber            RCC_TIMPRE_BIT_NUMBER\r\n#define RMVF_BitNumber              RCC_RMVF_BIT_NUMBER\r\n#define RMVF_BITNUMBER              RCC_RMVF_BIT_NUMBER\r\n#define RCC_CR2_HSI14TRIM_BitNumber RCC_HSI14TRIM_BIT_NUMBER\r\n#define CR_BYTE2_ADDRESS            RCC_CR_BYTE2_ADDRESS\r\n#define CIR_BYTE1_ADDRESS           RCC_CIR_BYTE1_ADDRESS\r\n#define CIR_BYTE2_ADDRESS           RCC_CIR_BYTE2_ADDRESS\r\n#define BDCR_BYTE0_ADDRESS          RCC_BDCR_BYTE0_ADDRESS\r\n#define DBP_TIMEOUT_VALUE           RCC_DBP_TIMEOUT_VALUE\r\n#define LSE_TIMEOUT_VALUE           RCC_LSE_TIMEOUT_VALUE\r\n\r\n#define CR_HSION_BB       RCC_CR_HSION_BB\r\n#define CR_CSSON_BB       RCC_CR_CSSON_BB\r\n#define CR_PLLON_BB       RCC_CR_PLLON_BB\r\n#define CR_PLLI2SON_BB    RCC_CR_PLLI2SON_BB\r\n#define CR_MSION_BB       RCC_CR_MSION_BB\r\n#define CSR_LSION_BB      RCC_CSR_LSION_BB\r\n#define CSR_LSEON_BB      RCC_CSR_LSEON_BB\r\n#define CSR_LSEBYP_BB     RCC_CSR_LSEBYP_BB\r\n#define CSR_RTCEN_BB      RCC_CSR_RTCEN_BB\r\n#define CSR_RTCRST_BB     RCC_CSR_RTCRST_BB\r\n#define CFGR_I2SSRC_BB    RCC_CFGR_I2SSRC_BB\r\n#define BDCR_RTCEN_BB     RCC_BDCR_RTCEN_BB\r\n#define BDCR_BDRST_BB     RCC_BDCR_BDRST_BB\r\n#define CR_HSEON_BB       RCC_CR_HSEON_BB\r\n#define CSR_RMVF_BB       RCC_CSR_RMVF_BB\r\n#define CR_PLLSAION_BB    RCC_CR_PLLSAION_BB\r\n#define DCKCFGR_TIMPRE_BB RCC_DCKCFGR_TIMPRE_BB\r\n\r\n#define __HAL_RCC_CRS_ENABLE_FREQ_ERROR_COUNTER  __HAL_RCC_CRS_FREQ_ERROR_COUNTER_ENABLE\r\n#define __HAL_RCC_CRS_DISABLE_FREQ_ERROR_COUNTER __HAL_RCC_CRS_FREQ_ERROR_COUNTER_DISABLE\r\n#define __HAL_RCC_CRS_ENABLE_AUTOMATIC_CALIB     __HAL_RCC_CRS_AUTOMATIC_CALIB_ENABLE\r\n#define __HAL_RCC_CRS_DISABLE_AUTOMATIC_CALIB    __HAL_RCC_CRS_AUTOMATIC_CALIB_DISABLE\r\n#define __HAL_RCC_CRS_CALCULATE_RELOADVALUE      __HAL_RCC_CRS_RELOADVALUE_CALCULATE\r\n\r\n#define __HAL_RCC_GET_IT_SOURCE __HAL_RCC_GET_IT\r\n\r\n#define RCC_CRS_SYNCWARM RCC_CRS_SYNCWARN\r\n#define RCC_CRS_TRIMOV   RCC_CRS_TRIMOVF\r\n\r\n#define RCC_PERIPHCLK_CK48        RCC_PERIPHCLK_CLK48\r\n#define RCC_CK48CLKSOURCE_PLLQ    RCC_CLK48CLKSOURCE_PLLQ\r\n#define RCC_CK48CLKSOURCE_PLLSAIP RCC_CLK48CLKSOURCE_PLLSAIP\r\n#define RCC_CK48CLKSOURCE_PLLI2SQ RCC_CLK48CLKSOURCE_PLLI2SQ\r\n#define IS_RCC_CK48CLKSOURCE      IS_RCC_CLK48CLKSOURCE\r\n#define RCC_SDIOCLKSOURCE_CK48    RCC_SDIOCLKSOURCE_CLK48\r\n\r\n#define __HAL_RCC_DFSDM_CLK_ENABLE            __HAL_RCC_DFSDM1_CLK_ENABLE\r\n#define __HAL_RCC_DFSDM_CLK_DISABLE           __HAL_RCC_DFSDM1_CLK_DISABLE\r\n#define __HAL_RCC_DFSDM_IS_CLK_ENABLED        __HAL_RCC_DFSDM1_IS_CLK_ENABLED\r\n#define __HAL_RCC_DFSDM_IS_CLK_DISABLED       __HAL_RCC_DFSDM1_IS_CLK_DISABLED\r\n#define __HAL_RCC_DFSDM_FORCE_RESET           __HAL_RCC_DFSDM1_FORCE_RESET\r\n#define __HAL_RCC_DFSDM_RELEASE_RESET         __HAL_RCC_DFSDM1_RELEASE_RESET\r\n#define __HAL_RCC_DFSDM_CLK_SLEEP_ENABLE      __HAL_RCC_DFSDM1_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_DFSDM_CLK_SLEEP_DISABLE     __HAL_RCC_DFSDM1_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_DFSDM_IS_CLK_SLEEP_ENABLED  __HAL_RCC_DFSDM1_IS_CLK_SLEEP_ENABLED\r\n#define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED\r\n#define DfsdmClockSelection                   Dfsdm1ClockSelection\r\n#define RCC_PERIPHCLK_DFSDM                   RCC_PERIPHCLK_DFSDM1\r\n#define RCC_DFSDMCLKSOURCE_PCLK               RCC_DFSDM1CLKSOURCE_PCLK2\r\n#define RCC_DFSDMCLKSOURCE_SYSCLK             RCC_DFSDM1CLKSOURCE_SYSCLK\r\n#define __HAL_RCC_DFSDM_CONFIG                __HAL_RCC_DFSDM1_CONFIG\r\n#define __HAL_RCC_GET_DFSDM_SOURCE            __HAL_RCC_GET_DFSDM1_SOURCE\r\n#define RCC_DFSDM1CLKSOURCE_PCLK              RCC_DFSDM1CLKSOURCE_PCLK2\r\n#define RCC_SWPMI1CLKSOURCE_PCLK              RCC_SWPMI1CLKSOURCE_PCLK1\r\n#define RCC_LPTIM1CLKSOURCE_PCLK              RCC_LPTIM1CLKSOURCE_PCLK1\r\n#define RCC_LPTIM2CLKSOURCE_PCLK              RCC_LPTIM2CLKSOURCE_PCLK1\r\n\r\n#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1\r\n#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2\r\n#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1\r\n#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2\r\n#define RCC_DFSDM1CLKSOURCE_APB2         RCC_DFSDM1CLKSOURCE_PCLK2\r\n#define RCC_DFSDM2CLKSOURCE_APB2         RCC_DFSDM2CLKSOURCE_PCLK2\r\n#define RCC_FMPI2C1CLKSOURCE_APB         RCC_FMPI2C1CLKSOURCE_PCLK1\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#if defined(STM32G0) || defined(STM32L5) || defined(STM32L412xx) || defined(STM32L422xx) || defined(STM32L4P5xx) || defined(STM32L4Q5xx) || defined(STM32G4)\r\n#else\r\n#define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG\r\n#endif\r\n#define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT\r\n#define __HAL_RTC_ENABLE_IT  __HAL_RTC_EXTI_ENABLE_IT\r\n\r\n#if defined(STM32F1)\r\n#define __HAL_RTC_EXTI_CLEAR_FLAG(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_CLEAR_FLAG()\r\n\r\n#define __HAL_RTC_EXTI_ENABLE_IT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_ENABLE_IT()\r\n\r\n#define __HAL_RTC_EXTI_DISABLE_IT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_DISABLE_IT()\r\n\r\n#define __HAL_RTC_EXTI_GET_FLAG(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_GET_FLAG()\r\n\r\n#define __HAL_RTC_EXTI_GENERATE_SWIT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_GENERATE_SWIT()\r\n#else\r\n#define __HAL_RTC_EXTI_CLEAR_FLAG(__EXTI_LINE__)                                      \\\r\n  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_CLEAR_FLAG() \\\r\n                                                  : (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG() : __HAL_RTC_TAMPER_TIMESTAMP_EXTI_CLEAR_FLAG()))\r\n#define __HAL_RTC_EXTI_ENABLE_IT(__EXTI_LINE__)                                      \\\r\n  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_ENABLE_IT() \\\r\n                                                  : (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT() : __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_IT()))\r\n#define __HAL_RTC_EXTI_DISABLE_IT(__EXTI_LINE__)                                      \\\r\n  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_DISABLE_IT() \\\r\n                                                  : (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_IT() : __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_IT()))\r\n#define __HAL_RTC_EXTI_GET_FLAG(__EXTI_LINE__)                                      \\\r\n  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_GET_FLAG() \\\r\n                                                  : (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_GET_FLAG() : __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GET_FLAG()))\r\n#define __HAL_RTC_EXTI_GENERATE_SWIT(__EXTI_LINE__) \\\r\n  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT)   \\\r\n       ? __HAL_RTC_ALARM_EXTI_GENERATE_SWIT()       \\\r\n       : (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_GENERATE_SWIT() : __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GENERATE_SWIT()))\r\n#endif /* STM32F1 */\r\n\r\n#define IS_ALARM                              IS_RTC_ALARM\r\n#define IS_ALARM_MASK                         IS_RTC_ALARM_MASK\r\n#define IS_TAMPER                             IS_RTC_TAMPER\r\n#define IS_TAMPER_ERASE_MODE                  IS_RTC_TAMPER_ERASE_MODE\r\n#define IS_TAMPER_FILTER                      IS_RTC_TAMPER_FILTER\r\n#define IS_TAMPER_INTERRUPT                   IS_RTC_TAMPER_INTERRUPT\r\n#define IS_TAMPER_MASKFLAG_STATE              IS_RTC_TAMPER_MASKFLAG_STATE\r\n#define IS_TAMPER_PRECHARGE_DURATION          IS_RTC_TAMPER_PRECHARGE_DURATION\r\n#define IS_TAMPER_PULLUP_STATE                IS_RTC_TAMPER_PULLUP_STATE\r\n#define IS_TAMPER_SAMPLING_FREQ               IS_RTC_TAMPER_SAMPLING_FREQ\r\n#define IS_TAMPER_TIMESTAMPONTAMPER_DETECTION IS_RTC_TAMPER_TIMESTAMPONTAMPER_DETECTION\r\n#define IS_TAMPER_TRIGGER                     IS_RTC_TAMPER_TRIGGER\r\n#define IS_WAKEUP_CLOCK                       IS_RTC_WAKEUP_CLOCK\r\n#define IS_WAKEUP_COUNTER                     IS_RTC_WAKEUP_COUNTER\r\n\r\n#define __RTC_WRITEPROTECTION_ENABLE  __HAL_RTC_WRITEPROTECTION_ENABLE\r\n#define __RTC_WRITEPROTECTION_DISABLE __HAL_RTC_WRITEPROTECTION_DISABLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SD_Aliased_Macros HAL SD Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE\r\n#define SD_CMD_SD_APP_STAUS       SD_CMD_SD_APP_STATUS\r\n\r\n#if defined(STM32F4) || defined(STM32F2)\r\n#define SD_SDMMC_DISABLED          SD_SDIO_DISABLED\r\n#define SD_SDMMC_FUNCTION_BUSY     SD_SDIO_FUNCTION_BUSY\r\n#define SD_SDMMC_FUNCTION_FAILED   SD_SDIO_FUNCTION_FAILED\r\n#define SD_SDMMC_UNKNOWN_FUNCTION  SD_SDIO_UNKNOWN_FUNCTION\r\n#define SD_CMD_SDMMC_SEN_OP_COND   SD_CMD_SDIO_SEN_OP_COND\r\n#define SD_CMD_SDMMC_RW_DIRECT     SD_CMD_SDIO_RW_DIRECT\r\n#define SD_CMD_SDMMC_RW_EXTENDED   SD_CMD_SDIO_RW_EXTENDED\r\n#define __HAL_SD_SDMMC_ENABLE      __HAL_SD_SDIO_ENABLE\r\n#define __HAL_SD_SDMMC_DISABLE     __HAL_SD_SDIO_DISABLE\r\n#define __HAL_SD_SDMMC_DMA_ENABLE  __HAL_SD_SDIO_DMA_ENABLE\r\n#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL\r\n#define __HAL_SD_SDMMC_ENABLE_IT   __HAL_SD_SDIO_ENABLE_IT\r\n#define __HAL_SD_SDMMC_DISABLE_IT  __HAL_SD_SDIO_DISABLE_IT\r\n#define __HAL_SD_SDMMC_GET_FLAG    __HAL_SD_SDIO_GET_FLAG\r\n#define __HAL_SD_SDMMC_CLEAR_FLAG  __HAL_SD_SDIO_CLEAR_FLAG\r\n#define __HAL_SD_SDMMC_GET_IT      __HAL_SD_SDIO_GET_IT\r\n#define __HAL_SD_SDMMC_CLEAR_IT    __HAL_SD_SDIO_CLEAR_IT\r\n#define SDMMC_STATIC_FLAGS         SDIO_STATIC_FLAGS\r\n#define SDMMC_CMD0TIMEOUT          SDIO_CMD0TIMEOUT\r\n#define SD_SDMMC_SEND_IF_COND      SD_SDIO_SEND_IF_COND\r\n/* alias CMSIS */\r\n#define SDMMC1_IRQn       SDIO_IRQn\r\n#define SDMMC1_IRQHandler SDIO_IRQHandler\r\n#endif\r\n\r\n#if defined(STM32F7) || defined(STM32L4)\r\n#define SD_SDIO_DISABLED         SD_SDMMC_DISABLED\r\n#define SD_SDIO_FUNCTION_BUSY    SD_SDMMC_FUNCTION_BUSY\r\n#define SD_SDIO_FUNCTION_FAILED  SD_SDMMC_FUNCTION_FAILED\r\n#define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION\r\n#define SD_CMD_SDIO_SEN_OP_COND  SD_CMD_SDMMC_SEN_OP_COND\r\n#define SD_CMD_SDIO_RW_DIRECT    SD_CMD_SDMMC_RW_DIRECT\r\n#define SD_CMD_SDIO_RW_EXTENDED  SD_CMD_SDMMC_RW_EXTENDED\r\n#define __HAL_SD_SDIO_ENABLE     __HAL_SD_SDMMC_ENABLE\r\n#define __HAL_SD_SDIO_DISABLE    __HAL_SD_SDMMC_DISABLE\r\n#define __HAL_SD_SDIO_DMA_ENABLE __HAL_SD_SDMMC_DMA_ENABLE\r\n#define __HAL_SD_SDIO_DMA_DISABL __HAL_SD_SDMMC_DMA_DISABLE\r\n#define __HAL_SD_SDIO_ENABLE_IT  __HAL_SD_SDMMC_ENABLE_IT\r\n#define __HAL_SD_SDIO_DISABLE_IT __HAL_SD_SDMMC_DISABLE_IT\r\n#define __HAL_SD_SDIO_GET_FLAG   __HAL_SD_SDMMC_GET_FLAG\r\n#define __HAL_SD_SDIO_CLEAR_FLAG __HAL_SD_SDMMC_CLEAR_FLAG\r\n#define __HAL_SD_SDIO_GET_IT     __HAL_SD_SDMMC_GET_IT\r\n#define __HAL_SD_SDIO_CLEAR_IT   __HAL_SD_SDMMC_CLEAR_IT\r\n#define SDIO_STATIC_FLAGS        SDMMC_STATIC_FLAGS\r\n#define SDIO_CMD0TIMEOUT         SDMMC_CMD0TIMEOUT\r\n#define SD_SDIO_SEND_IF_COND     SD_SDMMC_SEND_IF_COND\r\n/* alias CMSIS for compatibilities */\r\n#define SDIO_IRQn       SDMMC1_IRQn\r\n#define SDIO_IRQHandler SDMMC1_IRQHandler\r\n#endif\r\n\r\n#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) || defined(STM32H7)\r\n#define HAL_SD_CardCIDTypedef    HAL_SD_CardCIDTypeDef\r\n#define HAL_SD_CardCSDTypedef    HAL_SD_CardCSDTypeDef\r\n#define HAL_SD_CardStatusTypedef HAL_SD_CardStatusTypeDef\r\n#define HAL_SD_CardStateTypedef  HAL_SD_CardStateTypeDef\r\n#endif\r\n\r\n#if defined(STM32H7) || defined(STM32L5)\r\n#define HAL_MMCEx_Read_DMADoubleBuffer0CpltCallback  HAL_MMCEx_Read_DMADoubleBuf0CpltCallback\r\n#define HAL_MMCEx_Read_DMADoubleBuffer1CpltCallback  HAL_MMCEx_Read_DMADoubleBuf1CpltCallback\r\n#define HAL_MMCEx_Write_DMADoubleBuffer0CpltCallback HAL_MMCEx_Write_DMADoubleBuf0CpltCallback\r\n#define HAL_MMCEx_Write_DMADoubleBuffer1CpltCallback HAL_MMCEx_Write_DMADoubleBuf1CpltCallback\r\n#define HAL_SDEx_Read_DMADoubleBuffer0CpltCallback   HAL_SDEx_Read_DMADoubleBuf0CpltCallback\r\n#define HAL_SDEx_Read_DMADoubleBuffer1CpltCallback   HAL_SDEx_Read_DMADoubleBuf1CpltCallback\r\n#define HAL_SDEx_Write_DMADoubleBuffer0CpltCallback  HAL_SDEx_Write_DMADoubleBuf0CpltCallback\r\n#define HAL_SDEx_Write_DMADoubleBuffer1CpltCallback  HAL_SDEx_Write_DMADoubleBuf1CpltCallback\r\n#define HAL_SD_DriveTransciver_1_8V_Callback         HAL_SD_DriveTransceiver_1_8V_Callback\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SMARTCARD_Aliased_Macros HAL SMARTCARD Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __SMARTCARD_ENABLE_IT           __HAL_SMARTCARD_ENABLE_IT\r\n#define __SMARTCARD_DISABLE_IT          __HAL_SMARTCARD_DISABLE_IT\r\n#define __SMARTCARD_ENABLE              __HAL_SMARTCARD_ENABLE\r\n#define __SMARTCARD_DISABLE             __HAL_SMARTCARD_DISABLE\r\n#define __SMARTCARD_DMA_REQUEST_ENABLE  __HAL_SMARTCARD_DMA_REQUEST_ENABLE\r\n#define __SMARTCARD_DMA_REQUEST_DISABLE __HAL_SMARTCARD_DMA_REQUEST_DISABLE\r\n\r\n#define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE\r\n#define __SMARTCARD_GETCLOCKSOURCE     SMARTCARD_GETCLOCKSOURCE\r\n\r\n#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SMBUS_Aliased_Macros HAL SMBUS Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_SMBUS_RESET_CR1         SMBUS_RESET_CR1\r\n#define __HAL_SMBUS_RESET_CR2         SMBUS_RESET_CR2\r\n#define __HAL_SMBUS_GENERATE_START    SMBUS_GENERATE_START\r\n#define __HAL_SMBUS_GET_ADDR_MATCH    SMBUS_GET_ADDR_MATCH\r\n#define __HAL_SMBUS_GET_DIR           SMBUS_GET_DIR\r\n#define __HAL_SMBUS_GET_STOP_MODE     SMBUS_GET_STOP_MODE\r\n#define __HAL_SMBUS_GET_PEC_MODE      SMBUS_GET_PEC_MODE\r\n#define __HAL_SMBUS_GET_ALERT_ENABLED SMBUS_GET_ALERT_ENABLED\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SPI_Aliased_Macros HAL SPI Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_SPI_1LINE_TX  SPI_1LINE_TX\r\n#define __HAL_SPI_1LINE_RX  SPI_1LINE_RX\r\n#define __HAL_SPI_RESET_CRC SPI_RESET_CRC\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_UART_GETCLOCKSOURCE   UART_GETCLOCKSOURCE\r\n#define __HAL_UART_MASK_COMPUTATION UART_MASK_COMPUTATION\r\n#define __UART_GETCLOCKSOURCE       UART_GETCLOCKSOURCE\r\n#define __UART_MASK_COMPUTATION     UART_MASK_COMPUTATION\r\n\r\n#define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD\r\n\r\n#define IS_UART_ONEBIT_SAMPLE   IS_UART_ONE_BIT_SAMPLE\r\n#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_USART_Aliased_Macros HAL USART Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __USART_ENABLE_IT  __HAL_USART_ENABLE_IT\r\n#define __USART_DISABLE_IT __HAL_USART_DISABLE_IT\r\n#define __USART_ENABLE     __HAL_USART_ENABLE\r\n#define __USART_DISABLE    __HAL_USART_DISABLE\r\n\r\n#define __HAL_USART_GETCLOCKSOURCE USART_GETCLOCKSOURCE\r\n#define __USART_GETCLOCKSOURCE     USART_GETCLOCKSOURCE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_USB_Aliased_Macros HAL USB Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define USB_EXTI_LINE_WAKEUP USB_WAKEUP_EXTI_LINE\r\n\r\n#define USB_FS_EXTI_TRIGGER_RISING_EDGE  USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE\r\n#define USB_FS_EXTI_TRIGGER_FALLING_EDGE USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE\r\n#define USB_FS_EXTI_TRIGGER_BOTH_EDGE    USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE\r\n#define USB_FS_EXTI_LINE_WAKEUP          USB_OTG_FS_WAKEUP_EXTI_LINE\r\n\r\n#define USB_HS_EXTI_TRIGGER_RISING_EDGE  USB_OTG_HS_WAKEUP_EXTI_RISING_EDGE\r\n#define USB_HS_EXTI_TRIGGER_FALLING_EDGE USB_OTG_HS_WAKEUP_EXTI_FALLING_EDGE\r\n#define USB_HS_EXTI_TRIGGER_BOTH_EDGE    USB_OTG_HS_WAKEUP_EXTI_RISING_FALLING_EDGE\r\n#define USB_HS_EXTI_LINE_WAKEUP          USB_OTG_HS_WAKEUP_EXTI_LINE\r\n\r\n#define __HAL_USB_EXTI_ENABLE_IT                 __HAL_USB_WAKEUP_EXTI_ENABLE_IT\r\n#define __HAL_USB_EXTI_DISABLE_IT                __HAL_USB_WAKEUP_EXTI_DISABLE_IT\r\n#define __HAL_USB_EXTI_GET_FLAG                  __HAL_USB_WAKEUP_EXTI_GET_FLAG\r\n#define __HAL_USB_EXTI_CLEAR_FLAG                __HAL_USB_WAKEUP_EXTI_CLEAR_FLAG\r\n#define __HAL_USB_EXTI_SET_RISING_EDGE_TRIGGER   __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_USB_EXTI_SET_FALLING_EDGE_TRIGGER  __HAL_USB_WAKEUP_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_USB_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE\r\n\r\n#define __HAL_USB_FS_EXTI_ENABLE_IT                 __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT\r\n#define __HAL_USB_FS_EXTI_DISABLE_IT                __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT\r\n#define __HAL_USB_FS_EXTI_GET_FLAG                  __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG\r\n#define __HAL_USB_FS_EXTI_CLEAR_FLAG                __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG\r\n#define __HAL_USB_FS_EXTI_SET_RISING_EGDE_TRIGGER   __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_USB_FS_EXTI_SET_FALLING_EGDE_TRIGGER  __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_USB_FS_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE\r\n#define __HAL_USB_FS_EXTI_GENERATE_SWIT             __HAL_USB_OTG_FS_WAKEUP_EXTI_GENERATE_SWIT\r\n\r\n#define __HAL_USB_HS_EXTI_ENABLE_IT                 __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_IT\r\n#define __HAL_USB_HS_EXTI_DISABLE_IT                __HAL_USB_OTG_HS_WAKEUP_EXTI_DISABLE_IT\r\n#define __HAL_USB_HS_EXTI_GET_FLAG                  __HAL_USB_OTG_HS_WAKEUP_EXTI_GET_FLAG\r\n#define __HAL_USB_HS_EXTI_CLEAR_FLAG                __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG\r\n#define __HAL_USB_HS_EXTI_SET_RISING_EGDE_TRIGGER   __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_USB_HS_EXTI_SET_FALLING_EGDE_TRIGGER  __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_USB_HS_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE\r\n#define __HAL_USB_HS_EXTI_GENERATE_SWIT             __HAL_USB_OTG_HS_WAKEUP_EXTI_GENERATE_SWIT\r\n\r\n#define HAL_PCD_ActiveRemoteWakeup   HAL_PCD_ActivateRemoteWakeup\r\n#define HAL_PCD_DeActiveRemoteWakeup HAL_PCD_DeActivateRemoteWakeup\r\n\r\n#define HAL_PCD_SetTxFiFo HAL_PCDEx_SetTxFiFo\r\n#define HAL_PCD_SetRxFiFo HAL_PCDEx_SetRxFiFo\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_TIM_Aliased_Macros HAL TIM Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_TIM_SetICPrescalerValue   TIM_SET_ICPRESCALERVALUE\r\n#define __HAL_TIM_ResetICPrescalerValue TIM_RESET_ICPRESCALERVALUE\r\n\r\n#define TIM_GET_ITSTATUS __HAL_TIM_GET_IT_SOURCE\r\n#define TIM_GET_CLEAR_IT __HAL_TIM_CLEAR_IT\r\n\r\n#define __HAL_TIM_GET_ITSTATUS __HAL_TIM_GET_IT_SOURCE\r\n\r\n#define __HAL_TIM_DIRECTION_STATUS __HAL_TIM_IS_TIM_COUNTING_DOWN\r\n#define __HAL_TIM_PRESCALER        __HAL_TIM_SET_PRESCALER\r\n#define __HAL_TIM_SetCounter       __HAL_TIM_SET_COUNTER\r\n#define __HAL_TIM_GetCounter       __HAL_TIM_GET_COUNTER\r\n#define __HAL_TIM_SetAutoreload    __HAL_TIM_SET_AUTORELOAD\r\n#define __HAL_TIM_GetAutoreload    __HAL_TIM_GET_AUTORELOAD\r\n#define __HAL_TIM_SetClockDivision __HAL_TIM_SET_CLOCKDIVISION\r\n#define __HAL_TIM_GetClockDivision __HAL_TIM_GET_CLOCKDIVISION\r\n#define __HAL_TIM_SetICPrescaler   __HAL_TIM_SET_ICPRESCALER\r\n#define __HAL_TIM_GetICPrescaler   __HAL_TIM_GET_ICPRESCALER\r\n#define __HAL_TIM_SetCompare       __HAL_TIM_SET_COMPARE\r\n#define __HAL_TIM_GetCompare       __HAL_TIM_GET_COMPARE\r\n\r\n#define TIM_BREAKINPUTSOURCE_DFSDM TIM_BREAKINPUTSOURCE_DFSDM1\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_ETH_EXTI_ENABLE_IT                 __HAL_ETH_WAKEUP_EXTI_ENABLE_IT\r\n#define __HAL_ETH_EXTI_DISABLE_IT                __HAL_ETH_WAKEUP_EXTI_DISABLE_IT\r\n#define __HAL_ETH_EXTI_GET_FLAG                  __HAL_ETH_WAKEUP_EXTI_GET_FLAG\r\n#define __HAL_ETH_EXTI_CLEAR_FLAG                __HAL_ETH_WAKEUP_EXTI_CLEAR_FLAG\r\n#define __HAL_ETH_EXTI_SET_RISING_EGDE_TRIGGER   __HAL_ETH_WAKEUP_EXTI_ENABLE_RISING_EDGE_TRIGGER\r\n#define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER  __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER\r\n#define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER\r\n\r\n#define ETH_PROMISCIOUSMODE_ENABLE  ETH_PROMISCUOUS_MODE_ENABLE\r\n#define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE\r\n#define IS_ETH_PROMISCIOUS_MODE     IS_ETH_PROMISCUOUS_MODE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_LTDC_Aliased_Macros HAL LTDC Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_LTDC_LAYER         LTDC_LAYER\r\n#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SAI_Aliased_Macros HAL SAI Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define SAI_OUTPUTDRIVE_DISABLED        SAI_OUTPUTDRIVE_DISABLE\r\n#define SAI_OUTPUTDRIVE_ENABLED         SAI_OUTPUTDRIVE_ENABLE\r\n#define SAI_MASTERDIVIDER_ENABLED       SAI_MASTERDIVIDER_ENABLE\r\n#define SAI_MASTERDIVIDER_DISABLED      SAI_MASTERDIVIDER_DISABLE\r\n#define SAI_STREOMODE                   SAI_STEREOMODE\r\n#define SAI_FIFOStatus_Empty            SAI_FIFOSTATUS_EMPTY\r\n#define SAI_FIFOStatus_Less1QuarterFull SAI_FIFOSTATUS_LESS1QUARTERFULL\r\n#define SAI_FIFOStatus_1QuarterFull     SAI_FIFOSTATUS_1QUARTERFULL\r\n#define SAI_FIFOStatus_HalfFull         SAI_FIFOSTATUS_HALFFULL\r\n#define SAI_FIFOStatus_3QuartersFull    SAI_FIFOSTATUS_3QUARTERFULL\r\n#define SAI_FIFOStatus_Full             SAI_FIFOSTATUS_FULL\r\n#define IS_SAI_BLOCK_MONO_STREO_MODE    IS_SAI_BLOCK_MONO_STEREO_MODE\r\n#define SAI_SYNCHRONOUS_EXT             SAI_SYNCHRONOUS_EXT_SAI1\r\n#define SAI_SYNCEXT_IN_ENABLE           SAI_SYNCEXT_OUTBLOCKA_ENABLE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SPDIFRX_Aliased_Macros HAL SPDIFRX Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#if defined(STM32H7)\r\n#define HAL_SPDIFRX_ReceiveControlFlow     HAL_SPDIFRX_ReceiveCtrlFlow\r\n#define HAL_SPDIFRX_ReceiveControlFlow_IT  HAL_SPDIFRX_ReceiveCtrlFlow_IT\r\n#define HAL_SPDIFRX_ReceiveControlFlow_DMA HAL_SPDIFRX_ReceiveCtrlFlow_DMA\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#if defined(STM32H7) || defined(STM32G4) || defined(STM32F3)\r\n#define HAL_HRTIM_WaveformCounterStart_IT  HAL_HRTIM_WaveformCountStart_IT\r\n#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA\r\n#define HAL_HRTIM_WaveformCounterStart     HAL_HRTIM_WaveformCountStart\r\n#define HAL_HRTIM_WaveformCounterStop_IT   HAL_HRTIM_WaveformCountStop_IT\r\n#define HAL_HRTIM_WaveformCounterStop_DMA  HAL_HRTIM_WaveformCountStop_DMA\r\n#define HAL_HRTIM_WaveformCounterStop      HAL_HRTIM_WaveformCountStop\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_QSPI_Aliased_Macros HAL QSPI Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#if defined(STM32L4) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7)\r\n#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE\r\n#endif /* STM32L4 || STM32F4 || STM32F7 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* STM32_HAL_LEGACY */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal.h\r\n * @author  MCD Application Team\r\n * @brief   This file contains all the functions prototypes for the HAL\r\n *          module driver.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_H\r\n#define __STM32F1xx_HAL_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_conf.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup HAL\r\n * @{\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_Exported_Constants HAL Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup HAL_TICK_FREQ Tick Frequency\r\n * @{\r\n */\r\ntypedef enum { HAL_TICK_FREQ_10HZ = 100U, HAL_TICK_FREQ_100HZ = 10U, HAL_TICK_FREQ_1KHZ = 1U, HAL_TICK_FREQ_DEFAULT = HAL_TICK_FREQ_1KHZ } HAL_TickFreqTypeDef;\r\n/**\r\n * @}\r\n */\r\n/* Exported types ------------------------------------------------------------*/\r\nextern volatile uint32_t   uwTick;\r\nextern uint32_t            uwTickPrio;\r\nextern HAL_TickFreqTypeDef uwTickFreq;\r\n\r\n/**\r\n * @}\r\n */\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup HAL_Exported_Macros HAL Exported Macros\r\n * @{\r\n */\r\n\r\n/** @defgroup DBGMCU_Freeze_Unfreeze Freeze Unfreeze Peripherals in Debug mode\r\n * @brief   Freeze/Unfreeze Peripherals in Debug mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @{\r\n */\r\n\r\n/* Peripherals on APB1 */\r\n/**\r\n * @brief  TIM2 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM2()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM2_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM2() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM2_STOP)\r\n\r\n/**\r\n * @brief  TIM3 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM3()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM3_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM3() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM3_STOP)\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM4_STOP)\r\n/**\r\n * @brief  TIM4 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM4()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM4_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM4() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM4_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM5_STOP)\r\n/**\r\n * @brief  TIM5 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM5()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM5_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM5() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM5_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM6_STOP)\r\n/**\r\n * @brief  TIM6 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM6()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM6_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM6() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM6_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM7_STOP)\r\n/**\r\n * @brief  TIM7 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM7()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM7_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM7() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM7_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM12_STOP)\r\n/**\r\n * @brief  TIM12 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM12()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM12_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM12() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM12_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM13_STOP)\r\n/**\r\n * @brief  TIM13 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM13()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM13_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM13() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM13_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM14_STOP)\r\n/**\r\n * @brief  TIM14 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM14()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM14_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM14() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM14_STOP)\r\n#endif\r\n\r\n/**\r\n * @brief  WWDG Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_WWDG()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_WWDG_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_WWDG() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_WWDG_STOP)\r\n\r\n/**\r\n * @brief  IWDG Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_IWDG()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_IWDG_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_IWDG() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_IWDG_STOP)\r\n\r\n/**\r\n * @brief  I2C1 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT)\r\n#define __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT)\r\n\r\n#if defined(DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT)\r\n/**\r\n * @brief  I2C2 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT)\r\n#define __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_CAN1_STOP)\r\n/**\r\n * @brief  CAN1 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_CAN1()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN1_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_CAN1() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN1_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_CAN2_STOP)\r\n/**\r\n * @brief  CAN2 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_CAN2()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN2_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_CAN2() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN2_STOP)\r\n#endif\r\n\r\n/* Peripherals on APB2 */\r\n#if defined(DBGMCU_CR_DBG_TIM1_STOP)\r\n/**\r\n * @brief  TIM1 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM1()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM1_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM1() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM1_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM8_STOP)\r\n/**\r\n * @brief  TIM8 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM8()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM8_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM8() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM8_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM9_STOP)\r\n/**\r\n * @brief  TIM9 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM9()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM9_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM9() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM9_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM10_STOP)\r\n/**\r\n * @brief  TIM10 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM10()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM10_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM10() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM10_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM11_STOP)\r\n/**\r\n * @brief  TIM11 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM11()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM11_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM11() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM11_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM15_STOP)\r\n/**\r\n * @brief  TIM15 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM15()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM15_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM15() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM15_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM16_STOP)\r\n/**\r\n * @brief  TIM16 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM16()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM16_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM16() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM16_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM17_STOP)\r\n/**\r\n * @brief  TIM17 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM17()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM17_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM17() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM17_STOP)\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_Private_Macros HAL Private Macros\r\n * @{\r\n */\r\n#define IS_TICKFREQ(FREQ) (((FREQ) == HAL_TICK_FREQ_10HZ) || ((FREQ) == HAL_TICK_FREQ_100HZ) || ((FREQ) == HAL_TICK_FREQ_1KHZ))\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup HAL_Exported_Functions\r\n * @{\r\n */\r\n/** @addtogroup HAL_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* Initialization and de-initialization functions  ******************************/\r\nHAL_StatusTypeDef HAL_Init(void);\r\nHAL_StatusTypeDef HAL_DeInit(void);\r\nvoid              HAL_MspInit(void);\r\nvoid              HAL_MspDeInit(void);\r\nHAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup HAL_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* Peripheral Control functions  ************************************************/\r\nvoid                HAL_IncTick(void);\r\nvoid                HAL_Delay(uint32_t Delay);\r\nuint32_t            HAL_GetTick(void);\r\nuint32_t            HAL_GetTickPrio(void);\r\nHAL_StatusTypeDef   HAL_SetTickFreq(HAL_TickFreqTypeDef Freq);\r\nHAL_TickFreqTypeDef HAL_GetTickFreq(void);\r\nvoid                HAL_SuspendTick(void);\r\nvoid                HAL_ResumeTick(void);\r\nuint32_t            HAL_GetHalVersion(void);\r\nuint32_t            HAL_GetREVID(void);\r\nuint32_t            HAL_GetDEVID(void);\r\nuint32_t            HAL_GetUIDw0(void);\r\nuint32_t            HAL_GetUIDw1(void);\r\nuint32_t            HAL_GetUIDw2(void);\r\nvoid                HAL_DBGMCU_EnableDBGSleepMode(void);\r\nvoid                HAL_DBGMCU_DisableDBGSleepMode(void);\r\nvoid                HAL_DBGMCU_EnableDBGStopMode(void);\r\nvoid                HAL_DBGMCU_DisableDBGStopMode(void);\r\nvoid                HAL_DBGMCU_EnableDBGStandbyMode(void);\r\nvoid                HAL_DBGMCU_DisableDBGStandbyMode(void);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* Private types -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/** @defgroup HAL_Private_Variables HAL Private Variables\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n/* Private constants ---------------------------------------------------------*/\r\n/** @defgroup HAL_Private_Constants HAL Private Constants\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n/* Private macros ------------------------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc.h",
    "content": "/**\r\n******************************************************************************\r\n* @file    stm32f1xx_hal_adc.h\r\n* @author  MCD Application Team\r\n* @brief   Header file containing functions prototypes of ADC HAL library.\r\n******************************************************************************\r\n* @attention\r\n*\r\n*\r\n* <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n* All rights reserved.</center></h2>\r\n*\r\n* This software component is licensed by ST under BSD 3-Clause license,\r\n* the \"License\"; You may not use this file except in compliance with the\r\n* License. You may obtain a copy of the License at:\r\n*                        opensource.org/licenses/BSD-3-Clause\r\n*\r\n******************************************************************************\r\n*/\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_ADC_H\r\n#define __STM32F1xx_HAL_ADC_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup ADC\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup ADC_Exported_Types ADC Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Structure definition of ADC and regular group initialization\r\n * @note   Parameters of this structure are shared within 2 scopes:\r\n *          - Scope entire ADC (affects regular and injected groups): DataAlign, ScanConvMode.\r\n *          - Scope regular group: ContinuousConvMode, NbrOfConversion, DiscontinuousConvMode, NbrOfDiscConversion, ExternalTrigConvEdge, ExternalTrigConv.\r\n * @note   The setting of these parameters with function HAL_ADC_Init() is conditioned to ADC state.\r\n *         ADC can be either disabled or enabled without conversion on going on regular group.\r\n */\r\ntypedef struct {\r\n  uint32_t DataAlign;                 /*!< Specifies ADC data alignment to right (MSB on register bit 11 and LSB on register bit 0) (default setting)\r\n                                           or to left (if regular group: MSB on register bit 15 and LSB on register bit 4, if injected group (MSB kept as signed value due to potential negative value after offset\r\n                                         application): MSB on register bit 14 and LSB on register bit 3).                 This parameter can be a value of @ref ADC_Data_align */\r\n  uint32_t ScanConvMode;              /*!< Configures the sequencer of regular and injected groups.\r\n                                           This parameter can be associated to parameter 'DiscontinuousConvMode' to have main sequence subdivided in successive parts.\r\n                                           If disabled: Conversion is performed in single mode (one channel converted, the one defined in rank 1).\r\n                                                        Parameters 'NbrOfConversion' and 'InjectedNbrOfConversion' are discarded (equivalent to set to 1).\r\n                                           If enabled:  Conversions are performed in sequence mode (multiple ranks defined by 'NbrOfConversion'/'InjectedNbrOfConversion' and each channel rank).\r\n                                                        Scan direction is upward: from rank1 to rank 'n'.\r\n                                           This parameter can be a value of @ref ADC_Scan_mode\r\n                                           Note: For regular group, this parameter should be enabled in conversion either by polling (HAL_ADC_Start with Discontinuous mode and NbrOfDiscConversion=1)\r\n                                                 or by DMA (HAL_ADC_Start_DMA), but not by interruption (HAL_ADC_Start_IT): in scan mode, interruption is triggered only on the\r\n                                                 the last conversion of the sequence. All previous conversions would be overwritten by the last one.\r\n                                                 Injected group used with scan mode has not this constraint: each rank has its own result register, no data is overwritten. */\r\n  FunctionalState ContinuousConvMode; /*!< Specifies whether the conversion is performed in single mode (one conversion) or continuous mode for regular group,\r\n                                          after the selected trigger occurred (software start or external trigger).\r\n                                          This parameter can be set to ENABLE or DISABLE. */\r\n  uint32_t NbrOfConversion;           /*!< Specifies the number of ranks that will be converted within the regular group sequencer.\r\n                                           To use regular group sequencer and convert several ranks, parameter 'ScanConvMode' must be enabled.\r\n                                           This parameter must be a number between Min_Data = 1 and Max_Data = 16. */\r\n  FunctionalState\r\n      DiscontinuousConvMode; /*!< Specifies whether the conversions sequence of regular group is performed in Complete-sequence/Discontinuous-sequence (main sequence subdivided in successive parts).\r\n                                  Discontinuous mode is used only if sequencer is enabled (parameter 'ScanConvMode'). If sequencer is disabled, this parameter is discarded.\r\n                                  Discontinuous mode can be enabled only if continuous mode is disabled. If continuous mode is enabled, this parameter setting is discarded.\r\n                                  This parameter can be set to ENABLE or DISABLE. */\r\n  uint32_t NbrOfDiscConversion; /*!< Specifies the number of discontinuous conversions in which the  main sequence of regular group (parameter NbrOfConversion) will be subdivided.\r\n                                     If parameter 'DiscontinuousConvMode' is disabled, this parameter is discarded.\r\n                                     This parameter must be a number between Min_Data = 1 and Max_Data = 8. */\r\n  uint32_t ExternalTrigConv;    /*!< Selects the external event used to trigger the conversion start of regular group.\r\n                                     If set to ADC_SOFTWARE_START, external triggers are disabled.\r\n                                     If set to external trigger source, triggering is on event rising edge.\r\n                                     This parameter can be a value of @ref ADC_External_trigger_source_Regular */\r\n} ADC_InitTypeDef;\r\n\r\n/**\r\n * @brief  Structure definition of ADC channel for regular group\r\n * @note   The setting of these parameters with function HAL_ADC_ConfigChannel() is conditioned to ADC state.\r\n *         ADC can be either disabled or enabled without conversion on going on regular group.\r\n */\r\ntypedef struct {\r\n  uint32_t\r\n      Channel;           /*!< Specifies the channel to configure into ADC regular group.\r\n                              This parameter can be a value of @ref ADC_channels\r\n                              Note: Depending on devices, some channels may not be available on package pins. Refer to device datasheet for channels availability.\r\n                              Note: On STM32F1 devices with several ADC: Only ADC1 can access internal measurement channels (VrefInt/TempSensor)\r\n                              Note: On STM32F10xx8 and STM32F10xxB devices: A low-amplitude voltage glitch may be generated (on ADC input 0) on the PA0 pin, when the ADC is converting with injection\r\n                            trigger.      It is advised to distribute the analog channels so that Channel 0 is configured as an injected channel.      Refer to errata sheet of these devices for more details. */\r\n  uint32_t Rank;         /*!< Specifies the rank in the regular group sequencer\r\n                              This parameter can be a value of @ref ADC_regular_rank\r\n                              Note: In case of need to disable a channel or change order of conversion sequencer, rank containing a previous channel setting can be overwritten by the new channel setting (or\r\n                            parameter number of conversions can be adjusted) */\r\n  uint32_t SamplingTime; /*!< Sampling time value to be set for the selected channel.\r\n                              Unit: ADC clock cycles\r\n                              Conversion time is the addition of sampling time and processing time (12.5 ADC clock cycles at ADC resolution 12 bits).\r\n                              This parameter can be a value of @ref ADC_sampling_times\r\n                              Caution: This parameter updates the parameter property of the channel, that can be used into regular and/or injected groups.\r\n                                       If this same channel has been previously configured in the other group (regular/injected), it will be updated to last setting.\r\n                              Note: In case of usage of internal measurement channels (VrefInt/TempSensor),\r\n                                    sampling time constraints must be respected (sampling time can be adjusted in function of ADC clock frequency and sampling time setting)\r\n                                    Refer to device datasheet for timings values, parameters TS_vrefint, TS_temp (values rough order: 5us to 17.1us min). */\r\n} ADC_ChannelConfTypeDef;\r\n\r\n/**\r\n * @brief  ADC Configuration analog watchdog definition\r\n * @note   The setting of these parameters with function is conditioned to ADC state.\r\n *         ADC state can be either disabled or enabled without conversion on going on regular and injected groups.\r\n */\r\ntypedef struct {\r\n  uint32_t WatchdogMode;   /*!< Configures the ADC analog watchdog mode: single/all channels, regular/injected group.\r\n                                This parameter can be a value of @ref ADC_analog_watchdog_mode. */\r\n  uint32_t Channel;        /*!< Selects which ADC channel to monitor by analog watchdog.\r\n                                This parameter has an effect only if watchdog mode is configured on single channel (parameter WatchdogMode)\r\n                                This parameter can be a value of @ref ADC_channels. */\r\n  FunctionalState ITMode;  /*!< Specifies whether the analog watchdog is configured in interrupt or polling mode.\r\n                                This parameter can be set to ENABLE or DISABLE */\r\n  uint32_t HighThreshold;  /*!< Configures the ADC analog watchdog High threshold value.\r\n                                This parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF. */\r\n  uint32_t LowThreshold;   /*!< Configures the ADC analog watchdog High threshold value.\r\n                                This parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF. */\r\n  uint32_t WatchdogNumber; /*!< Reserved for future use, can be set to 0 */\r\n} ADC_AnalogWDGConfTypeDef;\r\n\r\n/**\r\n * @brief  HAL ADC state machine: ADC states definition (bitfields)\r\n */\r\n/* States of ADC global scope */\r\n#define HAL_ADC_STATE_RESET         0x00000000U /*!< ADC not yet initialized or disabled */\r\n#define HAL_ADC_STATE_READY         0x00000001U /*!< ADC peripheral ready for use */\r\n#define HAL_ADC_STATE_BUSY_INTERNAL 0x00000002U /*!< ADC is busy to internal process (initialization, calibration) */\r\n#define HAL_ADC_STATE_TIMEOUT       0x00000004U /*!< TimeOut occurrence */\r\n\r\n/* States of ADC errors */\r\n#define HAL_ADC_STATE_ERROR_INTERNAL 0x00000010U /*!< Internal error occurrence */\r\n#define HAL_ADC_STATE_ERROR_CONFIG   0x00000020U /*!< Configuration error occurrence */\r\n#define HAL_ADC_STATE_ERROR_DMA      0x00000040U /*!< DMA error occurrence */\r\n\r\n/* States of ADC group regular */\r\n#define HAL_ADC_STATE_REG_BUSY                                                                                                     \\\r\n  0x00000100U                               /*!< A conversion on group regular is ongoing or can occur (either by continuous mode, \\\r\n                                                external trigger, low power auto power-on, multimode ADC master control) */\r\n#define HAL_ADC_STATE_REG_EOC   0x00000200U /*!< Conversion data available on group regular */\r\n#define HAL_ADC_STATE_REG_OVR   0x00000400U /*!< Not available on STM32F1 device: Overrun occurrence */\r\n#define HAL_ADC_STATE_REG_EOSMP 0x00000800U /*!< Not available on STM32F1 device: End Of Sampling flag raised  */\r\n\r\n/* States of ADC group injected */\r\n#define HAL_ADC_STATE_INJ_BUSY                                                                                                          \\\r\n  0x00001000U                               /*!< A conversion on group injected is ongoing or can occur (either by auto-injection mode, \\\r\n                                                external trigger, low power auto power-on, multimode ADC master control) */\r\n#define HAL_ADC_STATE_INJ_EOC   0x00002000U /*!< Conversion data available on group injected */\r\n#define HAL_ADC_STATE_INJ_JQOVF 0x00004000U /*!< Not available on STM32F1 device: Injected queue overflow occurrence */\r\n\r\n/* States of ADC analog watchdogs */\r\n#define HAL_ADC_STATE_AWD1 0x00010000U /*!< Out-of-window occurrence of analog watchdog 1 */\r\n#define HAL_ADC_STATE_AWD2 0x00020000U /*!< Not available on STM32F1 device: Out-of-window occurrence of analog watchdog 2 */\r\n#define HAL_ADC_STATE_AWD3 0x00040000U /*!< Not available on STM32F1 device: Out-of-window occurrence of analog watchdog 3 */\r\n\r\n/* States of ADC multi-mode */\r\n#define HAL_ADC_STATE_MULTIMODE_SLAVE 0x00100000U /*!< ADC in multimode slave state, controlled by another ADC master ( */\r\n\r\n/**\r\n * @brief  ADC handle Structure definition\r\n */\r\ntypedef struct __ADC_HandleTypeDef {\r\n  ADC_TypeDef *Instance; /*!< Register base address */\r\n\r\n  ADC_InitTypeDef Init; /*!< ADC required parameters */\r\n\r\n  DMA_HandleTypeDef *DMA_Handle; /*!< Pointer DMA Handler */\r\n\r\n  HAL_LockTypeDef Lock; /*!< ADC locking object */\r\n\r\n  __IO uint32_t State; /*!< ADC communication state (bitmap of ADC states) */\r\n\r\n  __IO uint32_t ErrorCode; /*!< ADC Error code */\r\n\r\n#if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)\r\n  void (*ConvCpltCallback)(struct __ADC_HandleTypeDef *hadc);                                                                 /*!< ADC conversion complete callback */\r\n  void (*ConvHalfCpltCallback)(struct __ADC_HandleTypeDef *hadc);                                                             /*!< ADC conversion DMA half-transfer callback */\r\n  void (*LevelOutOfWindowCallback)(struct __ADC_HandleTypeDef *hadc);                                                         /*!< ADC analog watchdog 1 callback */\r\n  void (*ErrorCallback)(struct __ADC_HandleTypeDef *hadc);                                                                    /*!< ADC error callback */\r\n  void (*InjectedConvCpltCallback)(struct __ADC_HandleTypeDef *hadc); /*!< ADC group injected conversion complete callback */ /*!< ADC end of sampling callback */\r\n  void (*MspInitCallback)(struct __ADC_HandleTypeDef *hadc);                                                                  /*!< ADC Msp Init callback */\r\n  void (*MspDeInitCallback)(struct __ADC_HandleTypeDef *hadc);                                                                /*!< ADC Msp DeInit callback */\r\n#endif                                                                                                                        /* USE_HAL_ADC_REGISTER_CALLBACKS */\r\n} ADC_HandleTypeDef;\r\n\r\n#if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)\r\n/**\r\n * @brief  HAL ADC Callback ID enumeration definition\r\n */\r\ntypedef enum {\r\n  HAL_ADC_CONVERSION_COMPLETE_CB_ID     = 0x00U, /*!< ADC conversion complete callback ID */\r\n  HAL_ADC_CONVERSION_HALF_CB_ID         = 0x01U, /*!< ADC conversion DMA half-transfer callback ID */\r\n  HAL_ADC_LEVEL_OUT_OF_WINDOW_1_CB_ID   = 0x02U, /*!< ADC analog watchdog 1 callback ID */\r\n  HAL_ADC_ERROR_CB_ID                   = 0x03U, /*!< ADC error callback ID */\r\n  HAL_ADC_INJ_CONVERSION_COMPLETE_CB_ID = 0x04U, /*!< ADC group injected conversion complete callback ID */\r\n  HAL_ADC_MSPINIT_CB_ID                 = 0x09U, /*!< ADC Msp Init callback ID          */\r\n  HAL_ADC_MSPDEINIT_CB_ID               = 0x0AU  /*!< ADC Msp DeInit callback ID        */\r\n} HAL_ADC_CallbackIDTypeDef;\r\n\r\n/**\r\n * @brief  HAL ADC Callback pointer definition\r\n */\r\ntypedef void (*pADC_CallbackTypeDef)(ADC_HandleTypeDef *hadc); /*!< pointer to a ADC callback function */\r\n\r\n#endif /* USE_HAL_ADC_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup ADC_Exported_Constants ADC Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup ADC_Error_Code ADC Error Code\r\n * @{\r\n */\r\n#define HAL_ADC_ERROR_NONE 0x00U /*!< No error                                              */\r\n#define HAL_ADC_ERROR_INTERNAL                                                      \\\r\n  0x01U                         /*!< ADC IP internal error: if problem of clocking, \\\r\n                                     enable/disable, erroneous state                       */\r\n#define HAL_ADC_ERROR_OVR 0x02U /*!< Overrun error                                         */\r\n#define HAL_ADC_ERROR_DMA 0x04U /*!< DMA transfer error                                    */\r\n\r\n#if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)\r\n#define HAL_ADC_ERROR_INVALID_CALLBACK (0x10U) /*!< Invalid Callback error */\r\n#endif                                         /* USE_HAL_ADC_REGISTER_CALLBACKS */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Data_align ADC data alignment\r\n * @{\r\n */\r\n#define ADC_DATAALIGN_RIGHT 0x00000000U\r\n#define ADC_DATAALIGN_LEFT  ((uint32_t)ADC_CR2_ALIGN)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Scan_mode ADC scan mode\r\n * @{\r\n */\r\n/* Note: Scan mode values are not among binary choices ENABLE/DISABLE for     */\r\n/*       compatibility with other STM32 devices having a sequencer with       */\r\n/*       additional options.                                                  */\r\n#define ADC_SCAN_DISABLE 0x00000000U\r\n#define ADC_SCAN_ENABLE  ((uint32_t)ADC_CR1_SCAN)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_External_trigger_edge_Regular ADC external trigger enable for regular group\r\n * @{\r\n */\r\n#define ADC_EXTERNALTRIGCONVEDGE_NONE   0x00000000U\r\n#define ADC_EXTERNALTRIGCONVEDGE_RISING ((uint32_t)ADC_CR2_EXTTRIG)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_channels ADC channels\r\n * @{\r\n */\r\n/* Note: Depending on devices, some channels may not be available on package  */\r\n/*       pins. Refer to device datasheet for channels availability.           */\r\n#define ADC_CHANNEL_0  0x00000000U\r\n#define ADC_CHANNEL_1  ((uint32_t)(ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_2  ((uint32_t)(ADC_SQR3_SQ1_1))\r\n#define ADC_CHANNEL_3  ((uint32_t)(ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_4  ((uint32_t)(ADC_SQR3_SQ1_2))\r\n#define ADC_CHANNEL_5  ((uint32_t)(ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_6  ((uint32_t)(ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_1))\r\n#define ADC_CHANNEL_7  ((uint32_t)(ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_8  ((uint32_t)(ADC_SQR3_SQ1_3))\r\n#define ADC_CHANNEL_9  ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_10 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_1))\r\n#define ADC_CHANNEL_11 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_12 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_2))\r\n#define ADC_CHANNEL_13 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_14 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_1))\r\n#define ADC_CHANNEL_15 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_16 ((uint32_t)(ADC_SQR3_SQ1_4))\r\n#define ADC_CHANNEL_17 ((uint32_t)(ADC_SQR3_SQ1_4 | ADC_SQR3_SQ1_0))\r\n\r\n#define ADC_CHANNEL_TEMPSENSOR ADC_CHANNEL_16 /* ADC internal channel (no connection on device pin) */\r\n#define ADC_CHANNEL_VREFINT    ADC_CHANNEL_17 /* ADC internal channel (no connection on device pin) */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_sampling_times ADC sampling times\r\n * @{\r\n */\r\n#define ADC_SAMPLETIME_1CYCLE_5    0x00000000U                                                          /*!< Sampling time 1.5 ADC clock cycle */\r\n#define ADC_SAMPLETIME_7CYCLES_5   ((uint32_t)(ADC_SMPR2_SMP0_0))                                       /*!< Sampling time 7.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_13CYCLES_5  ((uint32_t)(ADC_SMPR2_SMP0_1))                                       /*!< Sampling time 13.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_28CYCLES_5  ((uint32_t)(ADC_SMPR2_SMP0_1 | ADC_SMPR2_SMP0_0))                    /*!< Sampling time 28.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_41CYCLES_5  ((uint32_t)(ADC_SMPR2_SMP0_2))                                       /*!< Sampling time 41.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_55CYCLES_5  ((uint32_t)(ADC_SMPR2_SMP0_2 | ADC_SMPR2_SMP0_0))                    /*!< Sampling time 55.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_71CYCLES_5  ((uint32_t)(ADC_SMPR2_SMP0_2 | ADC_SMPR2_SMP0_1))                    /*!< Sampling time 71.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_239CYCLES_5 ((uint32_t)(ADC_SMPR2_SMP0_2 | ADC_SMPR2_SMP0_1 | ADC_SMPR2_SMP0_0)) /*!< Sampling time 239.5 ADC clock cycles */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_regular_rank ADC rank into regular group\r\n * @{\r\n */\r\n#define ADC_REGULAR_RANK_1  0x00000001U\r\n#define ADC_REGULAR_RANK_2  0x00000002U\r\n#define ADC_REGULAR_RANK_3  0x00000003U\r\n#define ADC_REGULAR_RANK_4  0x00000004U\r\n#define ADC_REGULAR_RANK_5  0x00000005U\r\n#define ADC_REGULAR_RANK_6  0x00000006U\r\n#define ADC_REGULAR_RANK_7  0x00000007U\r\n#define ADC_REGULAR_RANK_8  0x00000008U\r\n#define ADC_REGULAR_RANK_9  0x00000009U\r\n#define ADC_REGULAR_RANK_10 0x0000000AU\r\n#define ADC_REGULAR_RANK_11 0x0000000BU\r\n#define ADC_REGULAR_RANK_12 0x0000000CU\r\n#define ADC_REGULAR_RANK_13 0x0000000DU\r\n#define ADC_REGULAR_RANK_14 0x0000000EU\r\n#define ADC_REGULAR_RANK_15 0x0000000FU\r\n#define ADC_REGULAR_RANK_16 0x00000010U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_analog_watchdog_mode ADC analog watchdog mode\r\n * @{\r\n */\r\n#define ADC_ANALOGWATCHDOG_NONE            0x00000000U\r\n#define ADC_ANALOGWATCHDOG_SINGLE_REG      ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_AWDEN))\r\n#define ADC_ANALOGWATCHDOG_SINGLE_INJEC    ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_JAWDEN))\r\n#define ADC_ANALOGWATCHDOG_SINGLE_REGINJEC ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_AWDEN | ADC_CR1_JAWDEN))\r\n#define ADC_ANALOGWATCHDOG_ALL_REG         ((uint32_t)ADC_CR1_AWDEN)\r\n#define ADC_ANALOGWATCHDOG_ALL_INJEC       ((uint32_t)ADC_CR1_JAWDEN)\r\n#define ADC_ANALOGWATCHDOG_ALL_REGINJEC    ((uint32_t)(ADC_CR1_AWDEN | ADC_CR1_JAWDEN))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_conversion_group ADC conversion group\r\n * @{\r\n */\r\n#define ADC_REGULAR_GROUP          ((uint32_t)(ADC_FLAG_EOC))\r\n#define ADC_INJECTED_GROUP         ((uint32_t)(ADC_FLAG_JEOC))\r\n#define ADC_REGULAR_INJECTED_GROUP ((uint32_t)(ADC_FLAG_EOC | ADC_FLAG_JEOC))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Event_type ADC Event type\r\n * @{\r\n */\r\n#define ADC_AWD_EVENT ((uint32_t)ADC_FLAG_AWD) /*!< ADC Analog watchdog event */\r\n\r\n#define ADC_AWD1_EVENT ADC_AWD_EVENT /*!< ADC Analog watchdog 1 event: Alternate naming for compatibility with other STM32 devices having several analog watchdogs */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_interrupts_definition ADC interrupts definition\r\n * @{\r\n */\r\n#define ADC_IT_EOC  ADC_CR1_EOCIE  /*!< ADC End of Regular Conversion interrupt source */\r\n#define ADC_IT_JEOC ADC_CR1_JEOCIE /*!< ADC End of Injected Conversion interrupt source */\r\n#define ADC_IT_AWD  ADC_CR1_AWDIE  /*!< ADC Analog watchdog interrupt source */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_flags_definition ADC flags definition\r\n * @{\r\n */\r\n#define ADC_FLAG_STRT  ADC_SR_STRT  /*!< ADC Regular group start flag */\r\n#define ADC_FLAG_JSTRT ADC_SR_JSTRT /*!< ADC Injected group start flag */\r\n#define ADC_FLAG_EOC   ADC_SR_EOC   /*!< ADC End of Regular conversion flag */\r\n#define ADC_FLAG_JEOC  ADC_SR_JEOC  /*!< ADC End of Injected conversion flag */\r\n#define ADC_FLAG_AWD   ADC_SR_AWD   /*!< ADC Analog watchdog flag */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private constants ---------------------------------------------------------*/\r\n\r\n/** @addtogroup ADC_Private_Constants ADC Private Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup ADC_conversion_cycles ADC conversion cycles\r\n * @{\r\n */\r\n/* ADC conversion cycles (unit: ADC clock cycles)                           */\r\n/* (selected sampling time + conversion time of 12.5 ADC clock cycles, with */\r\n/* resolution 12 bits)                                                      */\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_1CYCLE5    14U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_7CYCLES5   20U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_13CYCLES5  26U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_28CYCLES5  41U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_41CYCLES5  54U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_55CYCLES5  68U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_71CYCLES5  84U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_239CYCLES5 252U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_sampling_times_all_channels ADC sampling times all channels\r\n * @{\r\n */\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2 \\\r\n  (ADC_SMPR2_SMP9_2 | ADC_SMPR2_SMP8_2 | ADC_SMPR2_SMP7_2 | ADC_SMPR2_SMP6_2 | ADC_SMPR2_SMP5_2 | ADC_SMPR2_SMP4_2 | ADC_SMPR2_SMP3_2 | ADC_SMPR2_SMP2_2 | ADC_SMPR2_SMP1_2 | ADC_SMPR2_SMP0_2)\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2 \\\r\n  (ADC_SMPR1_SMP17_2 | ADC_SMPR1_SMP16_2 | ADC_SMPR1_SMP15_2 | ADC_SMPR1_SMP14_2 | ADC_SMPR1_SMP13_2 | ADC_SMPR1_SMP12_2 | ADC_SMPR1_SMP11_2 | ADC_SMPR1_SMP10_2)\r\n\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1 \\\r\n  (ADC_SMPR2_SMP9_1 | ADC_SMPR2_SMP8_1 | ADC_SMPR2_SMP7_1 | ADC_SMPR2_SMP6_1 | ADC_SMPR2_SMP5_1 | ADC_SMPR2_SMP4_1 | ADC_SMPR2_SMP3_1 | ADC_SMPR2_SMP2_1 | ADC_SMPR2_SMP1_1 | ADC_SMPR2_SMP0_1)\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1 \\\r\n  (ADC_SMPR1_SMP17_1 | ADC_SMPR1_SMP16_1 | ADC_SMPR1_SMP15_1 | ADC_SMPR1_SMP14_1 | ADC_SMPR1_SMP13_1 | ADC_SMPR1_SMP12_1 | ADC_SMPR1_SMP11_1 | ADC_SMPR1_SMP10_1)\r\n\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0 \\\r\n  (ADC_SMPR2_SMP9_0 | ADC_SMPR2_SMP8_0 | ADC_SMPR2_SMP7_0 | ADC_SMPR2_SMP6_0 | ADC_SMPR2_SMP5_0 | ADC_SMPR2_SMP4_0 | ADC_SMPR2_SMP3_0 | ADC_SMPR2_SMP2_0 | ADC_SMPR2_SMP1_0 | ADC_SMPR2_SMP0_0)\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0 \\\r\n  (ADC_SMPR1_SMP17_0 | ADC_SMPR1_SMP16_0 | ADC_SMPR1_SMP15_0 | ADC_SMPR1_SMP14_0 | ADC_SMPR1_SMP13_0 | ADC_SMPR1_SMP12_0 | ADC_SMPR1_SMP11_0 | ADC_SMPR1_SMP10_0)\r\n\r\n#define ADC_SAMPLETIME_1CYCLE5_SMPR2ALLCHANNELS    0x00000000U\r\n#define ADC_SAMPLETIME_7CYCLES5_SMPR2ALLCHANNELS   (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0)\r\n#define ADC_SAMPLETIME_13CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1)\r\n#define ADC_SAMPLETIME_28CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0)\r\n#define ADC_SAMPLETIME_41CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2)\r\n#define ADC_SAMPLETIME_55CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0)\r\n#define ADC_SAMPLETIME_71CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1)\r\n#define ADC_SAMPLETIME_239CYCLES5_SMPR2ALLCHANNELS (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0)\r\n\r\n#define ADC_SAMPLETIME_1CYCLE5_SMPR1ALLCHANNELS    0x00000000U\r\n#define ADC_SAMPLETIME_7CYCLES5_SMPR1ALLCHANNELS   (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0)\r\n#define ADC_SAMPLETIME_13CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1)\r\n#define ADC_SAMPLETIME_28CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0)\r\n#define ADC_SAMPLETIME_41CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2)\r\n#define ADC_SAMPLETIME_55CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0)\r\n#define ADC_SAMPLETIME_71CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1)\r\n#define ADC_SAMPLETIME_239CYCLES5_SMPR1ALLCHANNELS (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0)\r\n/**\r\n * @}\r\n */\r\n\r\n/* Combination of all post-conversion flags bits: EOC/EOS, JEOC/JEOS, OVR, AWDx */\r\n#define ADC_FLAG_POSTCONV_ALL (ADC_FLAG_EOC | ADC_FLAG_JEOC | ADC_FLAG_AWD)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n\r\n/** @defgroup ADC_Exported_Macros ADC Exported Macros\r\n * @{\r\n */\r\n/* Macro for internal HAL driver usage, and possibly can be used into code of */\r\n/* final user.                                                                */\r\n\r\n/**\r\n * @brief Enable the ADC peripheral\r\n * @note ADC enable requires a delay for ADC stabilization time\r\n *       (refer to device datasheet, parameter tSTAB)\r\n * @note On STM32F1, if ADC is already enabled this macro trigs a conversion\r\n *       SW start on regular group.\r\n * @param __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#define __HAL_ADC_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR2, (ADC_CR2_ADON)))\r\n\r\n/**\r\n * @brief Disable the ADC peripheral\r\n * @param __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#define __HAL_ADC_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CR2, (ADC_CR2_ADON)))\r\n\r\n/** @brief Enable the ADC end of conversion interrupt.\r\n * @param __HANDLE__: ADC handle\r\n * @param __INTERRUPT__: ADC Interrupt\r\n *          This parameter can be any combination of the following values:\r\n *            @arg ADC_IT_EOC: ADC End of Regular Conversion interrupt source\r\n *            @arg ADC_IT_JEOC: ADC End of Injected Conversion interrupt source\r\n *            @arg ADC_IT_AWD: ADC Analog watchdog interrupt source\r\n * @retval None\r\n */\r\n#define __HAL_ADC_ENABLE_IT(__HANDLE__, __INTERRUPT__) (SET_BIT((__HANDLE__)->Instance->CR1, (__INTERRUPT__)))\r\n\r\n/** @brief Disable the ADC end of conversion interrupt.\r\n * @param __HANDLE__: ADC handle\r\n * @param __INTERRUPT__: ADC Interrupt\r\n *          This parameter can be any combination of the following values:\r\n *            @arg ADC_IT_EOC: ADC End of Regular Conversion interrupt source\r\n *            @arg ADC_IT_JEOC: ADC End of Injected Conversion interrupt source\r\n *            @arg ADC_IT_AWD: ADC Analog watchdog interrupt source\r\n * @retval None\r\n */\r\n#define __HAL_ADC_DISABLE_IT(__HANDLE__, __INTERRUPT__) (CLEAR_BIT((__HANDLE__)->Instance->CR1, (__INTERRUPT__)))\r\n\r\n/** @brief  Checks if the specified ADC interrupt source is enabled or disabled.\r\n * @param __HANDLE__: ADC handle\r\n * @param __INTERRUPT__: ADC interrupt source to check\r\n *          This parameter can be any combination of the following values:\r\n *            @arg ADC_IT_EOC: ADC End of Regular Conversion interrupt source\r\n *            @arg ADC_IT_JEOC: ADC End of Injected Conversion interrupt source\r\n *            @arg ADC_IT_AWD: ADC Analog watchdog interrupt source\r\n * @retval None\r\n */\r\n#define __HAL_ADC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR1 & (__INTERRUPT__)) == (__INTERRUPT__))\r\n\r\n/** @brief Get the selected ADC's flag status.\r\n * @param __HANDLE__: ADC handle\r\n * @param __FLAG__: ADC flag\r\n *          This parameter can be any combination of the following values:\r\n *            @arg ADC_FLAG_STRT: ADC Regular group start flag\r\n *            @arg ADC_FLAG_JSTRT: ADC Injected group start flag\r\n *            @arg ADC_FLAG_EOC: ADC End of Regular conversion flag\r\n *            @arg ADC_FLAG_JEOC: ADC End of Injected conversion flag\r\n *            @arg ADC_FLAG_AWD: ADC Analog watchdog flag\r\n * @retval None\r\n */\r\n#define __HAL_ADC_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))\r\n\r\n/** @brief Clear the ADC's pending flags\r\n * @param __HANDLE__: ADC handle\r\n * @param __FLAG__: ADC flag\r\n *          This parameter can be any combination of the following values:\r\n *            @arg ADC_FLAG_STRT: ADC Regular group start flag\r\n *            @arg ADC_FLAG_JSTRT: ADC Injected group start flag\r\n *            @arg ADC_FLAG_EOC: ADC End of Regular conversion flag\r\n *            @arg ADC_FLAG_JEOC: ADC End of Injected conversion flag\r\n *            @arg ADC_FLAG_AWD: ADC Analog watchdog flag\r\n * @retval None\r\n */\r\n#define __HAL_ADC_CLEAR_FLAG(__HANDLE__, __FLAG__) (WRITE_REG((__HANDLE__)->Instance->SR, ~(__FLAG__)))\r\n\r\n/** @brief  Reset ADC handle state\r\n * @param  __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)\r\n#define __HAL_ADC_RESET_HANDLE_STATE(__HANDLE__)           \\\r\n  do {                                                     \\\r\n    (__HANDLE__)->State             = HAL_ADC_STATE_RESET; \\\r\n    (__HANDLE__)->MspInitCallback   = NULL;                \\\r\n    (__HANDLE__)->MspDeInitCallback = NULL;                \\\r\n  } while (0)\r\n#else\r\n#define __HAL_ADC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_ADC_STATE_RESET)\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro ------------------------------------------------------------*/\r\n\r\n/** @defgroup ADC_Private_Macros ADC Private Macros\r\n * @{\r\n */\r\n/* Macro reserved for internal HAL driver usage, not intended to be used in   */\r\n/* code of final user.                                                        */\r\n\r\n/**\r\n * @brief Verification of ADC state: enabled or disabled\r\n * @param __HANDLE__: ADC handle\r\n * @retval SET (ADC enabled) or RESET (ADC disabled)\r\n */\r\n#define ADC_IS_ENABLE(__HANDLE__) (((((__HANDLE__)->Instance->CR2 & ADC_CR2_ADON) == ADC_CR2_ADON)) ? SET : RESET)\r\n\r\n/**\r\n * @brief Test if conversion trigger of regular group is software start\r\n *        or external trigger.\r\n * @param __HANDLE__: ADC handle\r\n * @retval SET (software start) or RESET (external trigger)\r\n */\r\n#define ADC_IS_SOFTWARE_START_REGULAR(__HANDLE__) (READ_BIT((__HANDLE__)->Instance->CR2, ADC_CR2_EXTSEL) == ADC_SOFTWARE_START)\r\n\r\n/**\r\n * @brief Test if conversion trigger of injected group is software start\r\n *        or external trigger.\r\n * @param __HANDLE__: ADC handle\r\n * @retval SET (software start) or RESET (external trigger)\r\n */\r\n#define ADC_IS_SOFTWARE_START_INJECTED(__HANDLE__) (READ_BIT((__HANDLE__)->Instance->CR2, ADC_CR2_JEXTSEL) == ADC_INJECTED_SOFTWARE_START)\r\n\r\n/**\r\n * @brief Simultaneously clears and sets specific bits of the handle State\r\n * @note: ADC_STATE_CLR_SET() macro is merely aliased to generic macro MODIFY_REG(),\r\n *        the first parameter is the ADC handle State, the second parameter is the\r\n *        bit field to clear, the third and last parameter is the bit field to set.\r\n * @retval None\r\n */\r\n#define ADC_STATE_CLR_SET MODIFY_REG\r\n\r\n/**\r\n * @brief Clear ADC error code (set it to error code: \"no error\")\r\n * @param __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#define ADC_CLEAR_ERRORCODE(__HANDLE__) ((__HANDLE__)->ErrorCode = HAL_ADC_ERROR_NONE)\r\n\r\n/**\r\n * @brief Set ADC number of conversions into regular channel sequence length.\r\n * @param _NbrOfConversion_: Regular channel sequence length\r\n * @retval None\r\n */\r\n#define ADC_SQR1_L_SHIFT(_NbrOfConversion_) (((_NbrOfConversion_) - (uint8_t)1) << ADC_SQR1_L_Pos)\r\n\r\n/**\r\n * @brief Set the ADC's sample time for channel numbers between 10 and 18.\r\n * @param _SAMPLETIME_: Sample time parameter.\r\n * @param _CHANNELNB_: Channel number.\r\n * @retval None\r\n */\r\n#define ADC_SMPR1(_SAMPLETIME_, _CHANNELNB_) ((_SAMPLETIME_) << (ADC_SMPR1_SMP11_Pos * ((_CHANNELNB_)-10)))\r\n\r\n/**\r\n * @brief Set the ADC's sample time for channel numbers between 0 and 9.\r\n * @param _SAMPLETIME_: Sample time parameter.\r\n * @param _CHANNELNB_: Channel number.\r\n * @retval None\r\n */\r\n#define ADC_SMPR2(_SAMPLETIME_, _CHANNELNB_) ((_SAMPLETIME_) << (ADC_SMPR2_SMP1_Pos * (_CHANNELNB_)))\r\n\r\n/**\r\n * @brief Set the selected regular channel rank for rank between 1 and 6.\r\n * @param _CHANNELNB_: Channel number.\r\n * @param _RANKNB_: Rank number.\r\n * @retval None\r\n */\r\n#define ADC_SQR3_RK(_CHANNELNB_, _RANKNB_) ((_CHANNELNB_) << (ADC_SQR3_SQ2_Pos * ((_RANKNB_)-1)))\r\n\r\n/**\r\n * @brief Set the selected regular channel rank for rank between 7 and 12.\r\n * @param _CHANNELNB_: Channel number.\r\n * @param _RANKNB_: Rank number.\r\n * @retval None\r\n */\r\n#define ADC_SQR2_RK(_CHANNELNB_, _RANKNB_) ((_CHANNELNB_) << (ADC_SQR2_SQ8_Pos * ((_RANKNB_)-7)))\r\n\r\n/**\r\n * @brief Set the selected regular channel rank for rank between 13 and 16.\r\n * @param _CHANNELNB_: Channel number.\r\n * @param _RANKNB_: Rank number.\r\n * @retval None\r\n */\r\n#define ADC_SQR1_RK(_CHANNELNB_, _RANKNB_) ((_CHANNELNB_) << (ADC_SQR1_SQ14_Pos * ((_RANKNB_)-13)))\r\n\r\n/**\r\n * @brief Set the injected sequence length.\r\n * @param _JSQR_JL_: Sequence length.\r\n * @retval None\r\n */\r\n#define ADC_JSQR_JL_SHIFT(_JSQR_JL_) (((_JSQR_JL_)-1) << ADC_JSQR_JL_Pos)\r\n\r\n/**\r\n * @brief Set the selected injected channel rank\r\n *        Note: on STM32F1 devices, channel rank position in JSQR register\r\n *              is depending on total number of ranks selected into\r\n *              injected sequencer (ranks sequence starting from 4-JL)\r\n * @param _CHANNELNB_: Channel number.\r\n * @param _RANKNB_: Rank number.\r\n * @param _JSQR_JL_: Sequence length.\r\n * @retval None\r\n */\r\n#define ADC_JSQR_RK_JL(_CHANNELNB_, _RANKNB_, _JSQR_JL_) ((_CHANNELNB_) << (ADC_JSQR_JSQ2_Pos * ((4 - ((_JSQR_JL_) - (_RANKNB_))) - 1)))\r\n\r\n/**\r\n * @brief Enable ADC continuous conversion mode.\r\n * @param _CONTINUOUS_MODE_: Continuous mode.\r\n * @retval None\r\n */\r\n#define ADC_CR2_CONTINUOUS(_CONTINUOUS_MODE_) ((_CONTINUOUS_MODE_) << ADC_CR2_CONT_Pos)\r\n\r\n/**\r\n * @brief Configures the number of discontinuous conversions for the regular group channels.\r\n * @param _NBR_DISCONTINUOUS_CONV_: Number of discontinuous conversions.\r\n * @retval None\r\n */\r\n#define ADC_CR1_DISCONTINUOUS_NUM(_NBR_DISCONTINUOUS_CONV_) (((_NBR_DISCONTINUOUS_CONV_)-1) << ADC_CR1_DISCNUM_Pos)\r\n\r\n/**\r\n * @brief Enable ADC scan mode to convert multiple ranks with sequencer.\r\n * @param _SCAN_MODE_: Scan conversion mode.\r\n * @retval None\r\n */\r\n/* Note: Scan mode is compared to ENABLE for legacy purpose, this parameter   */\r\n/*       is equivalent to ADC_SCAN_ENABLE.                                    */\r\n#define ADC_CR1_SCAN_SET(_SCAN_MODE_) ((((_SCAN_MODE_) == ADC_SCAN_ENABLE) || ((_SCAN_MODE_) == ENABLE)) ? (ADC_SCAN_ENABLE) : (ADC_SCAN_DISABLE))\r\n\r\n/**\r\n * @brief Get the maximum ADC conversion cycles on all channels.\r\n * Returns the selected sampling time + conversion time (12.5 ADC clock cycles)\r\n * Approximation of sampling time within 4 ranges, returns the highest value:\r\n *   below 7.5 cycles {1.5 cycle; 7.5 cycles},\r\n *   between 13.5 cycles and 28.5 cycles {13.5 cycles; 28.5 cycles}\r\n *   between 41.5 cycles and 71.5 cycles {41.5 cycles; 55.5 cycles; 71.5cycles}\r\n *   equal to 239.5 cycles\r\n * Unit: ADC clock cycles\r\n * @param __HANDLE__: ADC handle\r\n * @retval ADC conversion cycles on all channels\r\n */\r\n#define ADC_CONVCYCLES_MAX_RANGE(__HANDLE__)                                                                                                                                            \\\r\n  (((((__HANDLE__)->Instance->SMPR2 & ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2) == RESET) && (((__HANDLE__)->Instance->SMPR1 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2) == RESET))             \\\r\n       ?                                                                                                                                                                                \\\r\n                                                                                                                                                                                        \\\r\n       (((((__HANDLE__)->Instance->SMPR2 & ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1) == RESET) && (((__HANDLE__)->Instance->SMPR1 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1) == RESET))        \\\r\n            ? ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_7CYCLES5                                                                                                                             \\\r\n            : ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_28CYCLES5)                                                                                                                           \\\r\n       : ((((((__HANDLE__)->Instance->SMPR2 & ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1) == RESET) && (((__HANDLE__)->Instance->SMPR1 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1) == RESET))     \\\r\n           || ((((__HANDLE__)->Instance->SMPR2 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0) == RESET) && (((__HANDLE__)->Instance->SMPR1 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0) == RESET))) \\\r\n              ? ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_71CYCLES5                                                                                                                          \\\r\n              : ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_239CYCLES5))\r\n\r\n#define IS_ADC_DATA_ALIGN(ALIGN) (((ALIGN) == ADC_DATAALIGN_RIGHT) || ((ALIGN) == ADC_DATAALIGN_LEFT))\r\n\r\n#define IS_ADC_SCAN_MODE(SCAN_MODE) (((SCAN_MODE) == ADC_SCAN_DISABLE) || ((SCAN_MODE) == ADC_SCAN_ENABLE))\r\n\r\n#define IS_ADC_EXTTRIG_EDGE(EDGE) (((EDGE) == ADC_EXTERNALTRIGCONVEDGE_NONE) || ((EDGE) == ADC_EXTERNALTRIGCONVEDGE_RISING))\r\n\r\n#define IS_ADC_CHANNEL(CHANNEL)                                                                                                                                                                      \\\r\n  (((CHANNEL) == ADC_CHANNEL_0) || ((CHANNEL) == ADC_CHANNEL_1) || ((CHANNEL) == ADC_CHANNEL_2) || ((CHANNEL) == ADC_CHANNEL_3) || ((CHANNEL) == ADC_CHANNEL_4) || ((CHANNEL) == ADC_CHANNEL_5)      \\\r\n   || ((CHANNEL) == ADC_CHANNEL_6) || ((CHANNEL) == ADC_CHANNEL_7) || ((CHANNEL) == ADC_CHANNEL_8) || ((CHANNEL) == ADC_CHANNEL_9) || ((CHANNEL) == ADC_CHANNEL_10) || ((CHANNEL) == ADC_CHANNEL_11) \\\r\n   || ((CHANNEL) == ADC_CHANNEL_12) || ((CHANNEL) == ADC_CHANNEL_13) || ((CHANNEL) == ADC_CHANNEL_14) || ((CHANNEL) == ADC_CHANNEL_15) || ((CHANNEL) == ADC_CHANNEL_16)                              \\\r\n   || ((CHANNEL) == ADC_CHANNEL_17))\r\n\r\n#define IS_ADC_SAMPLE_TIME(TIME)                                                                                                                                 \\\r\n  (((TIME) == ADC_SAMPLETIME_1CYCLE_5) || ((TIME) == ADC_SAMPLETIME_7CYCLES_5) || ((TIME) == ADC_SAMPLETIME_13CYCLES_5) || ((TIME) == ADC_SAMPLETIME_28CYCLES_5) \\\r\n   || ((TIME) == ADC_SAMPLETIME_41CYCLES_5) || ((TIME) == ADC_SAMPLETIME_55CYCLES_5) || ((TIME) == ADC_SAMPLETIME_71CYCLES_5) || ((TIME) == ADC_SAMPLETIME_239CYCLES_5))\r\n\r\n#define IS_ADC_REGULAR_RANK(CHANNEL)                                                                                                                                                             \\\r\n  (((CHANNEL) == ADC_REGULAR_RANK_1) || ((CHANNEL) == ADC_REGULAR_RANK_2) || ((CHANNEL) == ADC_REGULAR_RANK_3) || ((CHANNEL) == ADC_REGULAR_RANK_4) || ((CHANNEL) == ADC_REGULAR_RANK_5)         \\\r\n   || ((CHANNEL) == ADC_REGULAR_RANK_6) || ((CHANNEL) == ADC_REGULAR_RANK_7) || ((CHANNEL) == ADC_REGULAR_RANK_8) || ((CHANNEL) == ADC_REGULAR_RANK_9) || ((CHANNEL) == ADC_REGULAR_RANK_10)     \\\r\n   || ((CHANNEL) == ADC_REGULAR_RANK_11) || ((CHANNEL) == ADC_REGULAR_RANK_12) || ((CHANNEL) == ADC_REGULAR_RANK_13) || ((CHANNEL) == ADC_REGULAR_RANK_14) || ((CHANNEL) == ADC_REGULAR_RANK_15) \\\r\n   || ((CHANNEL) == ADC_REGULAR_RANK_16))\r\n\r\n#define IS_ADC_ANALOG_WATCHDOG_MODE(WATCHDOG)                                                                                                                                                        \\\r\n  (((WATCHDOG) == ADC_ANALOGWATCHDOG_NONE) || ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_REG) || ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_INJEC) || ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_REGINJEC) \\\r\n   || ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_REG) || ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_INJEC) || ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_REGINJEC))\r\n\r\n#define IS_ADC_CONVERSION_GROUP(CONVERSION) (((CONVERSION) == ADC_REGULAR_GROUP) || ((CONVERSION) == ADC_INJECTED_GROUP) || ((CONVERSION) == ADC_REGULAR_INJECTED_GROUP))\r\n\r\n#define IS_ADC_EVENT_TYPE(EVENT) ((EVENT) == ADC_AWD_EVENT)\r\n\r\n/** @defgroup ADC_range_verification ADC range verification\r\n * For a unique ADC resolution: 12 bits\r\n * @{\r\n */\r\n#define IS_ADC_RANGE(ADC_VALUE) ((ADC_VALUE) <= 0x0FFFU)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_regular_nb_conv_verification ADC regular nb conv verification\r\n * @{\r\n */\r\n#define IS_ADC_REGULAR_NB_CONV(LENGTH) (((LENGTH) >= 1U) && ((LENGTH) <= 16U))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_regular_discontinuous_mode_number_verification ADC regular discontinuous mode number verification\r\n * @{\r\n */\r\n#define IS_ADC_REGULAR_DISCONT_NUMBER(NUMBER) (((NUMBER) >= 1U) && ((NUMBER) <= 8U))\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Include ADC HAL Extension module */\r\n#include \"stm32f1xx_hal_adc_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup ADC_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup ADC_Exported_Functions_Group1\r\n * @{\r\n */\r\n\r\n/* Initialization and de-initialization functions  **********************************/\r\nHAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADC_DeInit(ADC_HandleTypeDef *hadc);\r\nvoid              HAL_ADC_MspInit(ADC_HandleTypeDef *hadc);\r\nvoid              HAL_ADC_MspDeInit(ADC_HandleTypeDef *hadc);\r\n\r\n#if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)\r\n/* Callbacks Register/UnRegister functions  ***********************************/\r\nHAL_StatusTypeDef HAL_ADC_RegisterCallback(ADC_HandleTypeDef *hadc, HAL_ADC_CallbackIDTypeDef CallbackID, pADC_CallbackTypeDef pCallback);\r\nHAL_StatusTypeDef HAL_ADC_UnRegisterCallback(ADC_HandleTypeDef *hadc, HAL_ADC_CallbackIDTypeDef CallbackID);\r\n#endif /* USE_HAL_ADC_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* IO operation functions  *****************************************************/\r\n\r\n/** @addtogroup ADC_Exported_Functions_Group2\r\n * @{\r\n */\r\n\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout);\r\nHAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef *hadc, uint32_t EventType, uint32_t Timeout);\r\n\r\n/* Non-blocking mode: Interruption */\r\nHAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef *hadc);\r\n\r\n/* Non-blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length);\r\nHAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef *hadc);\r\n\r\n/* ADC retrieve conversion value intended to be used with polling or interruption */\r\nuint32_t HAL_ADC_GetValue(ADC_HandleTypeDef *hadc);\r\n\r\n/* ADC IRQHandler and Callbacks used in non-blocking modes (Interruption and DMA) */\r\nvoid HAL_ADC_IRQHandler(ADC_HandleTypeDef *hadc);\r\nvoid HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc);\r\nvoid HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc);\r\nvoid HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef *hadc);\r\nvoid HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc);\r\n/**\r\n * @}\r\n */\r\n\r\n/* Peripheral Control functions ***********************************************/\r\n/** @addtogroup ADC_Exported_Functions_Group3\r\n * @{\r\n */\r\nHAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef *hadc, ADC_ChannelConfTypeDef *sConfig);\r\nHAL_StatusTypeDef HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef *hadc, ADC_AnalogWDGConfTypeDef *AnalogWDGConfig);\r\n/**\r\n * @}\r\n */\r\n\r\n/* Peripheral State functions *************************************************/\r\n/** @addtogroup ADC_Exported_Functions_Group4\r\n * @{\r\n */\r\nuint32_t HAL_ADC_GetState(ADC_HandleTypeDef *hadc);\r\nuint32_t HAL_ADC_GetError(ADC_HandleTypeDef *hadc);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Internal HAL driver functions **********************************************/\r\n/** @addtogroup ADC_Private_Functions\r\n * @{\r\n */\r\nHAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef ADC_ConversionStop_Disable(ADC_HandleTypeDef *hadc);\r\nvoid              ADC_StabilizationTime(uint32_t DelayUs);\r\nvoid              ADC_DMAConvCplt(DMA_HandleTypeDef *hdma);\r\nvoid              ADC_DMAHalfConvCplt(DMA_HandleTypeDef *hdma);\r\nvoid              ADC_DMAError(DMA_HandleTypeDef *hdma);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_ADC_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc_ex.h",
    "content": "/**\r\n******************************************************************************\r\n* @file    stm32f1xx_hal_adc_ex.h\r\n* @author  MCD Application Team\r\n* @brief   Header file of ADC HAL extension module.\r\n******************************************************************************\r\n* @attention\r\n*\r\n* <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n* All rights reserved.</center></h2>\r\n*\r\n* This software component is licensed by ST under BSD 3-Clause license,\r\n* the \"License\"; You may not use this file except in compliance with the\r\n* License. You may obtain a copy of the License at:\r\n*                        opensource.org/licenses/BSD-3-Clause\r\n*\r\n******************************************************************************\r\n*/\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_ADC_EX_H\r\n#define __STM32F1xx_HAL_ADC_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup ADCEx\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup ADCEx_Exported_Types ADCEx Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  ADC Configuration injected Channel structure definition\r\n * @note   Parameters of this structure are shared within 2 scopes:\r\n *          - Scope channel: InjectedChannel, InjectedRank, InjectedSamplingTime, InjectedOffset\r\n *          - Scope injected group (affects all channels of injected group): InjectedNbrOfConversion, InjectedDiscontinuousConvMode,\r\n *            AutoInjectedConv, ExternalTrigInjecConvEdge, ExternalTrigInjecConv.\r\n * @note   The setting of these parameters with function HAL_ADCEx_InjectedConfigChannel() is conditioned to ADC state.\r\n *         ADC state can be either:\r\n *          - For all parameters: ADC disabled (this is the only possible ADC state to modify parameter 'ExternalTrigInjecConv')\r\n *          - For all except parameters 'ExternalTrigInjecConv': ADC enabled without conversion on going on injected group.\r\n */\r\ntypedef struct {\r\n  uint32_t InjectedChannel;                      /*!< Selection of ADC channel to configure\r\n                                                      This parameter can be a value of @ref ADC_channels\r\n                                                      Note: Depending on devices, some channels may not be available on package pins. Refer to device datasheet for channels availability.\r\n                                                      Note: On STM32F1 devices with several ADC: Only ADC1 can access internal measurement channels (VrefInt/TempSensor)\r\n                                                      Note: On STM32F10xx8 and STM32F10xxB devices: A low-amplitude voltage glitch may be generated (on ADC input 0) on the PA0 pin, when the ADC is converting with\r\n                                                    injection                      trigger.                           It is advised to distribute the analog channels so that Channel 0 is configured as an injected channel.\r\n                                                    Refer to errata                      sheet of these devices for more details. */\r\n  uint32_t InjectedRank;                         /*!< Rank in the injected group sequencer\r\n                                                      This parameter must be a value of @ref ADCEx_injected_rank\r\n                                                      Note: In case of need to disable a channel or change order of conversion sequencer, rank containing a previous channel setting can be overwritten by the new channel\r\n                                                    setting (or parameter number of conversions can be adjusted) */\r\n  uint32_t InjectedSamplingTime;                 /*!< Sampling time value to be set for the selected channel.\r\n                                                      Unit: ADC clock cycles\r\n                                                      Conversion time is the addition of sampling time and processing time (12.5 ADC clock cycles at ADC resolution 12 bits).\r\n                                                      This parameter can be a value of @ref ADC_sampling_times\r\n                                                      Caution: This parameter updates the parameter property of the channel, that can be used into regular and/or injected groups.\r\n                                                               If this same channel has been previously configured in the other group (regular/injected), it will be updated to last setting.\r\n                                                      Note: In case of usage of internal measurement channels (VrefInt/TempSensor),\r\n                                                            sampling time constraints must be respected (sampling time can be adjusted in function of ADC clock frequency and sampling time setting)\r\n                                                            Refer to device datasheet for timings values, parameters TS_vrefint, TS_temp (values rough order: 5us to 17.1us min). */\r\n  uint32_t InjectedOffset;                       /*!< Defines the offset to be subtracted from the raw converted data (for channels set on injected group only).\r\n                                                      Offset value must be a positive number.\r\n                                                      Depending of ADC resolution selected (12, 10, 8 or 6 bits),\r\n                                                      this parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF, 0x3FF, 0xFF or 0x3F respectively. */\r\n  uint32_t InjectedNbrOfConversion;              /*!< Specifies the number of ranks that will be converted within the injected group sequencer.\r\n                                                      To use the injected group sequencer and convert several ranks, parameter 'ScanConvMode' must be enabled.\r\n                                                      This parameter must be a number between Min_Data = 1 and Max_Data = 4.\r\n                                                      Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to\r\n                                                               configure a channel on injected group can impact the configuration of other channels previously set. */\r\n  FunctionalState InjectedDiscontinuousConvMode; /*!< Specifies whether the conversions sequence of injected group is performed in Complete-sequence/Discontinuous-sequence (main sequence subdivided in\r\n                                                    successive parts). Discontinuous mode is used only if sequencer is enabled (parameter 'ScanConvMode'). If sequencer is disabled, this parameter is\r\n                                                    discarded. Discontinuous mode can be enabled only if continuous mode is disabled. If continuous mode is enabled, this parameter setting is\r\n                                                    discarded. This parameter can be set to ENABLE or DISABLE. Note: For injected group, number of discontinuous ranks increment is fixed to one-by-one.\r\n                                                      Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to\r\n                                                               configure a channel on injected group can impact the configuration of other channels previously set. */\r\n  FunctionalState AutoInjectedConv;              /*!< Enables or disables the selected ADC automatic injected group conversion after regular one\r\n                                                      This parameter can be set to ENABLE or DISABLE.\r\n                                                      Note: To use Automatic injected conversion, discontinuous mode must be disabled ('DiscontinuousConvMode' and 'InjectedDiscontinuousConvMode' set to DISABLE)\r\n                                                      Note: To use Automatic injected conversion, injected group external triggers must be disabled ('ExternalTrigInjecConv' set to ADC_SOFTWARE_START)\r\n                                                      Note: In case of DMA used with regular group: if DMA configured in normal mode (single shot) JAUTO will be stopped upon DMA transfer complete.\r\n                                                            To maintain JAUTO always enabled, DMA must be configured in circular mode.\r\n                                                      Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to\r\n                                                               configure a channel on injected group can impact the configuration of other channels previously set. */\r\n  uint32_t ExternalTrigInjecConv;                /*!< Selects the external event used to trigger the conversion start of injected group.\r\n                                                      If set to ADC_INJECTED_SOFTWARE_START, external triggers are disabled.\r\n                                                      If set to external trigger source, triggering is on event rising edge.\r\n                                                      This parameter can be a value of @ref ADCEx_External_trigger_source_Injected\r\n                                                      Note: This parameter must be modified when ADC is disabled (before ADC start conversion or after ADC stop conversion).\r\n                                                            If ADC is enabled, this parameter setting is bypassed without error reporting (as it can be the expected behaviour in case of another parameter update on\r\n                                                    the fly)                Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to\r\n                                                               configure a channel on injected group can impact the configuration of other channels previously set. */\r\n} ADC_InjectionConfTypeDef;\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief  Structure definition of ADC multimode\r\n * @note   The setting of these parameters with function HAL_ADCEx_MultiModeConfigChannel() is conditioned to ADCs state (both ADCs of the common group).\r\n *         State of ADCs of the common group must be: disabled.\r\n */\r\ntypedef struct {\r\n  uint32_t Mode; /*!< Configures the ADC to operate in independent or multi mode.\r\n                      This parameter can be a value of @ref ADCEx_Common_mode\r\n                      Note: In dual mode, a change of channel configuration generates a restart that can produce a loss of synchronization. It is recommended to disable dual mode before any\r\n                    configuration change. Note: In case of simultaneous mode used: Exactly the same sampling time should be configured for the 2 channels that will be sampled simultaneously by ACD1\r\n                    and ADC2. Note: In case of interleaved mode used: To avoid overlap between conversions, maximum sampling time allowed is 7 ADC clock cycles for fast interleaved mode and 14 ADC\r\n                    clock cycles for slow interleaved mode. Note: Some multimode parameters are fixed on STM32F1 and can be configured on other STM32 devices with several ADC (multimode configuration\r\n                    structure can have additional parameters). The equivalences are:\r\n                              - Parameter 'DMAAccessMode': On STM32F1, this parameter is fixed to 1 DMA channel (one DMA channel for both ADC, DMA of ADC master). On other STM32 devices with several\r\n                    ADC, this is equivalent to parameter 'ADC_DMAACCESSMODE_12_10_BITS'.\r\n                              - Parameter 'TwoSamplingDelay': On STM32F1, this parameter is fixed to 7 or 14 ADC clock cycles depending on fast or slow interleaved mode selected. On other STM32\r\n                    devices with several ADC, this is equivalent to parameter 'ADC_TWOSAMPLINGDELAY_7CYCLES' (for fast interleaved mode). */\r\n\r\n} ADC_MultiModeTypeDef;\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup ADCEx_Exported_Constants ADCEx Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup ADCEx_injected_rank ADCEx rank into injected group\r\n * @{\r\n */\r\n#define ADC_INJECTED_RANK_1 0x00000001U\r\n#define ADC_INJECTED_RANK_2 0x00000002U\r\n#define ADC_INJECTED_RANK_3 0x00000003U\r\n#define ADC_INJECTED_RANK_4 0x00000004U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADCEx_External_trigger_edge_Injected ADCEx external trigger enable for injected group\r\n * @{\r\n */\r\n#define ADC_EXTERNALTRIGINJECCONV_EDGE_NONE   0x00000000U\r\n#define ADC_EXTERNALTRIGINJECCONV_EDGE_RISING ((uint32_t)ADC_CR2_JEXTTRIG)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_External_trigger_source_Regular ADC External trigger selection for regular group\r\n * @{\r\n */\r\n/*!< List of external triggers with generic trigger name, independently of    */\r\n/* ADC target, sorted by trigger name:                                        */\r\n\r\n/*!< External triggers of regular group for ADC1&ADC2 only */\r\n#define ADC_EXTERNALTRIGCONV_T1_CC1   ADC1_2_EXTERNALTRIG_T1_CC1\r\n#define ADC_EXTERNALTRIGCONV_T1_CC2   ADC1_2_EXTERNALTRIG_T1_CC2\r\n#define ADC_EXTERNALTRIGCONV_T2_CC2   ADC1_2_EXTERNALTRIG_T2_CC2\r\n#define ADC_EXTERNALTRIGCONV_T3_TRGO  ADC1_2_EXTERNALTRIG_T3_TRGO\r\n#define ADC_EXTERNALTRIGCONV_T4_CC4   ADC1_2_EXTERNALTRIG_T4_CC4\r\n#define ADC_EXTERNALTRIGCONV_EXT_IT11 ADC1_2_EXTERNALTRIG_EXT_IT11\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n/*!< External triggers of regular group for ADC3 only */\r\n#define ADC_EXTERNALTRIGCONV_T2_CC3 ADC3_EXTERNALTRIG_T2_CC3\r\n#define ADC_EXTERNALTRIGCONV_T3_CC1 ADC3_EXTERNALTRIG_T3_CC1\r\n#define ADC_EXTERNALTRIGCONV_T5_CC1 ADC3_EXTERNALTRIG_T5_CC1\r\n#define ADC_EXTERNALTRIGCONV_T5_CC3 ADC3_EXTERNALTRIG_T5_CC3\r\n#define ADC_EXTERNALTRIGCONV_T8_CC1 ADC3_EXTERNALTRIG_T8_CC1\r\n#endif /* STM32F103xE || defined STM32F103xG */\r\n\r\n/*!< External triggers of regular group for all ADC instances */\r\n#define ADC_EXTERNALTRIGCONV_T1_CC3 ADC1_2_3_EXTERNALTRIG_T1_CC3\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n/*!< Note: TIM8_TRGO is available on ADC1 and ADC2 only in high-density and   */\r\n/*         XL-density devices.                                                */\r\n/*         To use it on ADC or ADC2, a remap of trigger must be done from     */\r\n/*         EXTI line 11 to TIM8_TRGO with macro:                              */\r\n/*           __HAL_AFIO_REMAP_ADC1_ETRGREG_ENABLE()                           */\r\n/*           __HAL_AFIO_REMAP_ADC2_ETRGREG_ENABLE()                           */\r\n\r\n/* Note for internal constant value management: If TIM8_TRGO is available,    */\r\n/* its definition is set to value for ADC1&ADC2 by default and changed to     */\r\n/* value for ADC3 by HAL ADC driver if ADC3 is selected.                      */\r\n#define ADC_EXTERNALTRIGCONV_T8_TRGO ADC1_2_EXTERNALTRIG_T8_TRGO\r\n#endif /* STM32F101xE || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#define ADC_SOFTWARE_START ADC1_2_3_SWSTART\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADCEx_External_trigger_source_Injected ADCEx External trigger selection for injected group\r\n * @{\r\n */\r\n/*!< List of external triggers with generic trigger name, independently of    */\r\n/* ADC target, sorted by trigger name:                                        */\r\n\r\n/*!< External triggers of injected group for ADC1&ADC2 only */\r\n#define ADC_EXTERNALTRIGINJECCONV_T2_TRGO  ADC1_2_EXTERNALTRIGINJEC_T2_TRGO\r\n#define ADC_EXTERNALTRIGINJECCONV_T2_CC1   ADC1_2_EXTERNALTRIGINJEC_T2_CC1\r\n#define ADC_EXTERNALTRIGINJECCONV_T3_CC4   ADC1_2_EXTERNALTRIGINJEC_T3_CC4\r\n#define ADC_EXTERNALTRIGINJECCONV_T4_TRGO  ADC1_2_EXTERNALTRIGINJEC_T4_TRGO\r\n#define ADC_EXTERNALTRIGINJECCONV_EXT_IT15 ADC1_2_EXTERNALTRIGINJEC_EXT_IT15\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n/*!< External triggers of injected group for ADC3 only */\r\n#define ADC_EXTERNALTRIGINJECCONV_T4_CC3  ADC3_EXTERNALTRIGINJEC_T4_CC3\r\n#define ADC_EXTERNALTRIGINJECCONV_T8_CC2  ADC3_EXTERNALTRIGINJEC_T8_CC2\r\n#define ADC_EXTERNALTRIGINJECCONV_T5_TRGO ADC3_EXTERNALTRIGINJEC_T5_TRGO\r\n#define ADC_EXTERNALTRIGINJECCONV_T5_CC4  ADC3_EXTERNALTRIGINJEC_T5_CC4\r\n#endif /* STM32F103xE || defined STM32F103xG */\r\n\r\n/*!< External triggers of injected group for all ADC instances */\r\n#define ADC_EXTERNALTRIGINJECCONV_T1_CC4  ADC1_2_3_EXTERNALTRIGINJEC_T1_CC4\r\n#define ADC_EXTERNALTRIGINJECCONV_T1_TRGO ADC1_2_3_EXTERNALTRIGINJEC_T1_TRGO\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n/*!< Note: TIM8_CC4 is available on ADC1 and ADC2 only in high-density and    */\r\n/*         XL-density devices.                                                */\r\n/*         To use it on ADC1 or ADC2, a remap of trigger must be done from    */\r\n/*         EXTI line 11 to TIM8_CC4 with macro:                               */\r\n/*           __HAL_AFIO_REMAP_ADC1_ETRGINJ_ENABLE()                           */\r\n/*           __HAL_AFIO_REMAP_ADC2_ETRGINJ_ENABLE()                           */\r\n\r\n/* Note for internal constant value management: If TIM8_CC4 is available,     */\r\n/* its definition is set to value for ADC1&ADC2 by default and changed to     */\r\n/* value for ADC3 by HAL ADC driver if ADC3 is selected.                      */\r\n#define ADC_EXTERNALTRIGINJECCONV_T8_CC4 ADC1_2_EXTERNALTRIGINJEC_T8_CC4\r\n#endif /* STM32F101xE || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#define ADC_INJECTED_SOFTWARE_START ADC1_2_3_JSWSTART\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/** @defgroup ADCEx_Common_mode ADC Extended Dual ADC Mode\r\n * @{\r\n */\r\n#define ADC_MODE_INDEPENDENT               0x00000000U                     /*!< ADC dual mode disabled (ADC independent mode) */\r\n#define ADC_DUALMODE_REGSIMULT_INJECSIMULT ((uint32_t)(ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Combined regular simultaneous + injected simultaneous mode, on groups regular and injected */\r\n#define ADC_DUALMODE_REGSIMULT_ALTERTRIG   ((uint32_t)(ADC_CR1_DUALMOD_1)) /*!< ADC dual mode enabled: Combined regular simultaneous + alternate trigger mode, on groups regular and injected */\r\n#define ADC_DUALMODE_INJECSIMULT_INTERLFAST                                                                                                                                                          \\\r\n  ((uint32_t)(ADC_CR1_DUALMOD_1 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Combined injected simultaneous + fast interleaved mode, on groups regular and injected (delay between ADC sampling \\\r\n                                                         phases: 7 ADC clock cycles (equivalent to parameter \"TwoSamplingDelay\" set to \"ADC_TWOSAMPLINGDELAY_7CYCLES\" on other STM32 devices)) */\r\n#define ADC_DUALMODE_INJECSIMULT_INTERLSLOW                                                                                                                                                           \\\r\n  ((uint32_t)(ADC_CR1_DUALMOD_2)) /*!< ADC dual mode enabled: Combined injected simultaneous + slow Interleaved mode, on groups regular and injected (delay between ADC sampling phases: 14 ADC clock \\\r\n                                     cycles (equivalent to parameter \"TwoSamplingDelay\" set to \"ADC_TWOSAMPLINGDELAY_7CYCLES\" on other STM32 devices)) */\r\n#define ADC_DUALMODE_INJECSIMULT ((uint32_t)(ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Injected simultaneous mode, on group injected */\r\n#define ADC_DUALMODE_REGSIMULT   ((uint32_t)(ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_1)) /*!< ADC dual mode enabled: Regular simultaneous mode, on group regular */\r\n#define ADC_DUALMODE_INTERLFAST                                                                                                                                                                      \\\r\n  ((uint32_t)(ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_1 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Fast interleaved mode, on group regular (delay between ADC sampling phases: 7 ADC clock cycles \\\r\n                                                                             (equivalent to parameter \"TwoSamplingDelay\" set to \"ADC_TWOSAMPLINGDELAY_7CYCLES\" on other STM32 devices)) */\r\n#define ADC_DUALMODE_INTERLSLOW                                                                                                                                                        \\\r\n  ((uint32_t)(ADC_CR1_DUALMOD_3)) /*!< ADC dual mode enabled: Slow interleaved mode, on group regular (delay between ADC sampling phases: 14 ADC clock cycles (equivalent to parameter \\\r\n                                     \"TwoSamplingDelay\" set to \"ADC_TWOSAMPLINGDELAY_7CYCLES\" on other STM32 devices)) */\r\n#define ADC_DUALMODE_ALTERTRIG ((uint32_t)(ADC_CR1_DUALMOD_3 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Alternate trigger mode, on group injected */\r\n/**\r\n * @}\r\n */\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private constants ---------------------------------------------------------*/\r\n\r\n/** @addtogroup ADCEx_Private_Constants ADCEx Private Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup ADCEx_Internal_HAL_driver_Ext_trig_src_Regular ADC Extended Internal HAL driver trigger selection for regular group\r\n * @{\r\n */\r\n/* List of external triggers of regular group for ADC1, ADC2, ADC3 (if ADC    */\r\n/* instance is available on the selected device).                             */\r\n/* (used internally by HAL driver. To not use into HAL structure parameters)  */\r\n\r\n/* External triggers of regular group for ADC1&ADC2 (if ADCx available) */\r\n#define ADC1_2_EXTERNALTRIG_T1_CC1   0x00000000U\r\n#define ADC1_2_EXTERNALTRIG_T1_CC2   ((uint32_t)(ADC_CR2_EXTSEL_0))\r\n#define ADC1_2_EXTERNALTRIG_T2_CC2   ((uint32_t)(ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))\r\n#define ADC1_2_EXTERNALTRIG_T3_TRGO  ((uint32_t)(ADC_CR2_EXTSEL_2))\r\n#define ADC1_2_EXTERNALTRIG_T4_CC4   ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_0))\r\n#define ADC1_2_EXTERNALTRIG_EXT_IT11 ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1))\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/* Note: TIM8_TRGO is available on ADC1 and ADC2 only in high-density and     */\r\n/* XL-density devices.                                                        */\r\n#define ADC1_2_EXTERNALTRIG_T8_TRGO ADC1_2_EXTERNALTRIG_EXT_IT11\r\n#endif\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n/* External triggers of regular group for ADC3 */\r\n#define ADC3_EXTERNALTRIG_T3_CC1  ADC1_2_EXTERNALTRIG_T1_CC1\r\n#define ADC3_EXTERNALTRIG_T2_CC3  ADC1_2_EXTERNALTRIG_T1_CC2\r\n#define ADC3_EXTERNALTRIG_T8_CC1  ADC1_2_EXTERNALTRIG_T2_CC2\r\n#define ADC3_EXTERNALTRIG_T8_TRGO ADC1_2_EXTERNALTRIG_T3_TRGO\r\n#define ADC3_EXTERNALTRIG_T5_CC1  ADC1_2_EXTERNALTRIG_T4_CC4\r\n#define ADC3_EXTERNALTRIG_T5_CC3  ADC1_2_EXTERNALTRIG_EXT_IT11\r\n#endif\r\n\r\n/* External triggers of regular group for ADC1&ADC2&ADC3 (if ADCx available) */\r\n#define ADC1_2_3_EXTERNALTRIG_T1_CC3 ((uint32_t)(ADC_CR2_EXTSEL_1))\r\n#define ADC1_2_3_SWSTART             ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADCEx_Internal_HAL_driver_Ext_trig_src_Injected ADC Extended Internal HAL driver trigger selection for injected group\r\n * @{\r\n */\r\n/* List of external triggers of injected group for ADC1, ADC2, ADC3 (if ADC    */\r\n/* instance is available on the selected device).                             */\r\n/* (used internally by HAL driver. To not use into HAL structure parameters)  */\r\n\r\n/* External triggers of injected group for ADC1&ADC2 (if ADCx available) */\r\n#define ADC1_2_EXTERNALTRIGINJEC_T2_TRGO  ((uint32_t)(ADC_CR2_JEXTSEL_1))\r\n#define ADC1_2_EXTERNALTRIGINJEC_T2_CC1   ((uint32_t)(ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0))\r\n#define ADC1_2_EXTERNALTRIGINJEC_T3_CC4   ((uint32_t)(ADC_CR2_JEXTSEL_2))\r\n#define ADC1_2_EXTERNALTRIGINJEC_T4_TRGO  ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_0))\r\n#define ADC1_2_EXTERNALTRIGINJEC_EXT_IT15 ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1))\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/* Note: TIM8_CC4 is available on ADC1 and ADC2 only in high-density and      */\r\n/* XL-density devices.                                                        */\r\n#define ADC1_2_EXTERNALTRIGINJEC_T8_CC4 ADC1_2_EXTERNALTRIGINJEC_EXT_IT15\r\n#endif\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n/* External triggers of injected group for ADC3 */\r\n#define ADC3_EXTERNALTRIGINJEC_T4_CC3  ADC1_2_EXTERNALTRIGINJEC_T2_TRGO\r\n#define ADC3_EXTERNALTRIGINJEC_T8_CC2  ADC1_2_EXTERNALTRIGINJEC_T2_CC1\r\n#define ADC3_EXTERNALTRIGINJEC_T8_CC4  ADC1_2_EXTERNALTRIGINJEC_T3_CC4\r\n#define ADC3_EXTERNALTRIGINJEC_T5_TRGO ADC1_2_EXTERNALTRIGINJEC_T4_TRGO\r\n#define ADC3_EXTERNALTRIGINJEC_T5_CC4  ADC1_2_EXTERNALTRIGINJEC_EXT_IT15\r\n#endif /* STM32F103xE || defined STM32F103xG */\r\n\r\n/* External triggers of injected group for ADC1&ADC2&ADC3 (if ADCx available) */\r\n#define ADC1_2_3_EXTERNALTRIGINJEC_T1_TRGO 0x00000000U\r\n#define ADC1_2_3_EXTERNALTRIGINJEC_T1_CC4  ((uint32_t)(ADC_CR2_JEXTSEL_0))\r\n#define ADC1_2_3_JSWSTART                  ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0))\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n\r\n/** @defgroup ADCEx_Private_Macro ADCEx Private Macro\r\n * @{\r\n */\r\n/* Macro reserved for internal HAL driver usage, not intended to be used in   */\r\n/* code of final user.                                                        */\r\n\r\n/**\r\n * @brief For devices with 3 ADCs: Defines the external trigger source\r\n *        for regular group according to ADC into common group ADC1&ADC2 or\r\n *        ADC3 (some triggers with same source have different value to\r\n *        be programmed into ADC EXTSEL bits of CR2 register).\r\n *        For devices with 2 ADCs or less: this macro makes no change.\r\n * @param __HANDLE__: ADC handle\r\n * @param __EXT_TRIG_CONV__: External trigger selected for regular group.\r\n * @retval External trigger to be programmed into EXTSEL bits of CR2 register\r\n */\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define ADC_CFGR_EXTSEL(__HANDLE__, __EXT_TRIG_CONV__) \\\r\n  (((((__HANDLE__)->Instance) == ADC3)) ? (((__EXT_TRIG_CONV__) == ADC_EXTERNALTRIGCONV_T8_TRGO) ? (ADC3_EXTERNALTRIG_T8_TRGO) : (__EXT_TRIG_CONV__)) : (__EXT_TRIG_CONV__))\r\n#else\r\n#define ADC_CFGR_EXTSEL(__HANDLE__, __EXT_TRIG_CONV__) (__EXT_TRIG_CONV__)\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n/**\r\n * @brief For devices with 3 ADCs: Defines the external trigger source\r\n *        for injected group according to ADC into common group ADC1&ADC2 or\r\n *        ADC3 (some triggers with same source have different value to\r\n *        be programmed into ADC JEXTSEL bits of CR2 register).\r\n *        For devices with 2 ADCs or less: this macro makes no change.\r\n * @param __HANDLE__: ADC handle\r\n * @param __EXT_TRIG_INJECTCONV__: External trigger selected for injected group.\r\n * @retval External trigger to be programmed into JEXTSEL bits of CR2 register\r\n */\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define ADC_CFGR_JEXTSEL(__HANDLE__, __EXT_TRIG_INJECTCONV__) \\\r\n  (((((__HANDLE__)->Instance) == ADC3)) ? (((__EXT_TRIG_INJECTCONV__) == ADC_EXTERNALTRIGINJECCONV_T8_CC4) ? (ADC3_EXTERNALTRIGINJEC_T8_CC4) : (__EXT_TRIG_INJECTCONV__)) : (__EXT_TRIG_INJECTCONV__))\r\n#else\r\n#define ADC_CFGR_JEXTSEL(__HANDLE__, __EXT_TRIG_INJECTCONV__) (__EXT_TRIG_INJECTCONV__)\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n/**\r\n * @brief Verification if multimode is enabled for the selected ADC (multimode ADC master or ADC slave) (applicable for devices with several ADCs)\r\n * @param __HANDLE__: ADC handle\r\n * @retval Multimode state: RESET if multimode is disabled, other value if multimode is enabled\r\n */\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define ADC_MULTIMODE_IS_ENABLE(__HANDLE__) (((((__HANDLE__)->Instance) == ADC1) || (((__HANDLE__)->Instance) == ADC2)) ? (ADC1->CR1 & ADC_CR1_DUALMOD) : (RESET))\r\n#else\r\n#define ADC_MULTIMODE_IS_ENABLE(__HANDLE__) (RESET)\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @brief Verification of condition for ADC start conversion: ADC must be in non-multimode, or multimode with handle of ADC master (applicable for devices with several ADCs)\r\n * @param __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define ADC_NONMULTIMODE_OR_MULTIMODEMASTER(__HANDLE__) (((((__HANDLE__)->Instance) == ADC2)) ? ((ADC1->CR1 & ADC_CR1_DUALMOD) == RESET) : (!RESET))\r\n#else\r\n#define ADC_NONMULTIMODE_OR_MULTIMODEMASTER(__HANDLE__) (!RESET)\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @brief Check ADC multimode setting: In case of multimode, check whether ADC master of the selected ADC has feature auto-injection enabled (applicable for devices with several ADCs)\r\n * @param __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define ADC_MULTIMODE_AUTO_INJECTED(__HANDLE__) (((((__HANDLE__)->Instance) == ADC1) || (((__HANDLE__)->Instance) == ADC2)) ? (ADC1->CR1 & ADC_CR1_JAUTO) : (RESET))\r\n#else\r\n#define ADC_MULTIMODE_AUTO_INJECTED(__HANDLE__) (RESET)\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief Set handle of the other ADC sharing the common multimode settings\r\n * @param __HANDLE__: ADC handle\r\n * @param __HANDLE_OTHER_ADC__: other ADC handle\r\n * @retval None\r\n */\r\n#define ADC_COMMON_ADC_OTHER(__HANDLE__, __HANDLE_OTHER_ADC__) ((__HANDLE_OTHER_ADC__)->Instance = ADC2)\r\n\r\n/**\r\n * @brief Set handle of the ADC slave associated to the ADC master\r\n * On STM32F1 devices, ADC slave is always ADC2 (this can be different\r\n * on other STM32 devices)\r\n * @param __HANDLE_MASTER__: ADC master handle\r\n * @param __HANDLE_SLAVE__: ADC slave handle\r\n * @retval None\r\n */\r\n#define ADC_MULTI_SLAVE(__HANDLE_MASTER__, __HANDLE_SLAVE__) ((__HANDLE_SLAVE__)->Instance = ADC2)\r\n\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n#define IS_ADC_INJECTED_RANK(CHANNEL) (((CHANNEL) == ADC_INJECTED_RANK_1) || ((CHANNEL) == ADC_INJECTED_RANK_2) || ((CHANNEL) == ADC_INJECTED_RANK_3) || ((CHANNEL) == ADC_INJECTED_RANK_4))\r\n\r\n#define IS_ADC_EXTTRIGINJEC_EDGE(EDGE) (((EDGE) == ADC_EXTERNALTRIGINJECCONV_EDGE_NONE) || ((EDGE) == ADC_EXTERNALTRIGINJECCONV_EDGE_RISING))\r\n\r\n/** @defgroup ADCEx_injected_nb_conv_verification ADCEx injected nb conv verification\r\n * @{\r\n */\r\n#define IS_ADC_INJECTED_NB_CONV(LENGTH) (((LENGTH) >= 1U) && ((LENGTH) <= 4U))\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) \\\r\n    || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define IS_ADC_EXTTRIG(REGTRIG)                                                                                                                                                          \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11) || ((REGTRIG) == ADC_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F101xE)\r\n#define IS_ADC_EXTTRIG(REGTRIG)                                                                                                                                                          \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_TRGO) || ((REGTRIG) == ADC_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F101xG)\r\n#define IS_ADC_EXTTRIG(REGTRIG)                                                                                                                                                          \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11) || ((REGTRIG) == ADC_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define IS_ADC_EXTTRIG(REGTRIG)                                                                                                                                                              \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO)     \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC3) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T5_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T5_CC3) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC3)   \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_TRGO) || ((REGTRIG) == ADC_SOFTWARE_START))\r\n#endif\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) \\\r\n    || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define IS_ADC_EXTTRIGINJEC(REGTRIG)                                                                                                                           \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)      \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || ((REGTRIG) == ADC_INJECTED_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F101xE)\r\n#define IS_ADC_EXTTRIGINJEC(REGTRIG)                                                                                                                           \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)      \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC4) || ((REGTRIG) == ADC_INJECTED_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F101xG)\r\n#define IS_ADC_EXTTRIGINJEC(REGTRIG)                                                                                                                           \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)      \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || ((REGTRIG) == ADC_INJECTED_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define IS_ADC_EXTTRIGINJEC(REGTRIG)                                                                                                                           \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)      \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC3) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_TRGO)   \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO)   \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC4) || ((REGTRIG) == ADC_INJECTED_SOFTWARE_START))\r\n#endif\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define IS_ADC_MODE(MODE)                                                                                                                                                                \\\r\n  (((MODE) == ADC_MODE_INDEPENDENT) || ((MODE) == ADC_DUALMODE_REGSIMULT_INJECSIMULT) || ((MODE) == ADC_DUALMODE_REGSIMULT_ALTERTRIG) || ((MODE) == ADC_DUALMODE_INJECSIMULT_INTERLFAST) \\\r\n   || ((MODE) == ADC_DUALMODE_INJECSIMULT_INTERLSLOW) || ((MODE) == ADC_DUALMODE_INJECSIMULT) || ((MODE) == ADC_DUALMODE_REGSIMULT) || ((MODE) == ADC_DUALMODE_INTERLFAST)               \\\r\n   || ((MODE) == ADC_DUALMODE_INTERLSLOW) || ((MODE) == ADC_DUALMODE_ALTERTRIG))\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup ADCEx_Exported_Functions\r\n * @{\r\n */\r\n\r\n/* IO operation functions  *****************************************************/\r\n/** @addtogroup ADCEx_Exported_Functions_Group1\r\n * @{\r\n */\r\n\r\n/* ADC calibration */\r\nHAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc);\r\n\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout);\r\n\r\n/* Non-blocking mode: Interruption */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef *hadc);\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/* ADC multimode */\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length);\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef *hadc);\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/* ADC retrieve conversion value intended to be used with polling or interruption */\r\nuint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef *hadc, uint32_t InjectedRank);\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\nuint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef *hadc);\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/* ADC IRQHandler and Callbacks used in non-blocking modes (Interruption) */\r\nvoid HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc);\r\n/**\r\n * @}\r\n */\r\n\r\n/* Peripheral Control functions ***********************************************/\r\n/** @addtogroup ADCEx_Exported_Functions_Group2\r\n * @{\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef *hadc, ADC_InjectionConfTypeDef *sConfigInjected);\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode);\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_ADC_EX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h",
    "content": "/**\r\n******************************************************************************\r\n* @file    stm32f1xx_hal_cortex.h\r\n* @author  MCD Application Team\r\n* @brief   Header file of CORTEX HAL module.\r\n******************************************************************************\r\n* @attention\r\n*\r\n* <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.\r\n* All rights reserved.</center></h2>\r\n*\r\n* This software component is licensed by ST under BSD 3-Clause license,\r\n* the \"License\"; You may not use this file except in compliance with the\r\n* License. You may obtain a copy of the License at:\r\n*                        opensource.org/licenses/BSD-3-Clause\r\n*\r\n******************************************************************************\r\n*/\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_CORTEX_H\r\n#define __STM32F1xx_HAL_CORTEX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup CORTEX\r\n * @{\r\n */\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup CORTEX_Exported_Types Cortex Exported Types\r\n * @{\r\n */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/** @defgroup CORTEX_MPU_Region_Initialization_Structure_definition MPU Region Initialization Structure Definition\r\n * @brief  MPU Region initialization structure\r\n * @{\r\n */\r\ntypedef struct {\r\n  uint8_t Enable;           /*!< Specifies the status of the region.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Region_Enable                 */\r\n  uint8_t Number;           /*!< Specifies the number of the region to protect.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Region_Number                 */\r\n  uint32_t BaseAddress;     /*!< Specifies the base address of the region to protect.                           */\r\n  uint8_t  Size;            /*!< Specifies the size of the region to protect.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Region_Size                   */\r\n  uint8_t SubRegionDisable; /*!< Specifies the number of the subregion protection to disable.\r\n                                 This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF    */\r\n  uint8_t TypeExtField;     /*!< Specifies the TEX field level.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_TEX_Levels                    */\r\n  uint8_t AccessPermission; /*!< Specifies the region access permission type.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Region_Permission_Attributes  */\r\n  uint8_t DisableExec;      /*!< Specifies the instruction access status.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Instruction_Access            */\r\n  uint8_t IsShareable;      /*!< Specifies the shareability status of the protected region.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Access_Shareable              */\r\n  uint8_t IsCacheable;      /*!< Specifies the cacheable status of the region protected.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Access_Cacheable              */\r\n  uint8_t IsBufferable;     /*!< Specifies the bufferable status of the protected region.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Access_Bufferable             */\r\n} MPU_Region_InitTypeDef;\r\n/**\r\n * @}\r\n */\r\n#endif /* __MPU_PRESENT */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup CORTEX_Exported_Constants CORTEX Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup CORTEX_Preemption_Priority_Group CORTEX Preemption Priority Group\r\n * @{\r\n */\r\n#define NVIC_PRIORITYGROUP_0                       \\\r\n  0x00000007U /*!< 0 bits for pre-emption priority \\\r\n                   4 bits for subpriority */\r\n#define NVIC_PRIORITYGROUP_1                       \\\r\n  0x00000006U /*!< 1 bits for pre-emption priority \\\r\n                   3 bits for subpriority */\r\n#define NVIC_PRIORITYGROUP_2                       \\\r\n  0x00000005U /*!< 2 bits for pre-emption priority \\\r\n                   2 bits for subpriority */\r\n#define NVIC_PRIORITYGROUP_3                       \\\r\n  0x00000004U /*!< 3 bits for pre-emption priority \\\r\n                   1 bits for subpriority */\r\n#define NVIC_PRIORITYGROUP_4                       \\\r\n  0x00000003U /*!< 4 bits for pre-emption priority \\\r\n                   0 bits for subpriority */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_SysTick_clock_source CORTEX _SysTick clock source\r\n * @{\r\n */\r\n#define SYSTICK_CLKSOURCE_HCLK_DIV8 0x00000000U\r\n#define SYSTICK_CLKSOURCE_HCLK      0x00000004U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if (__MPU_PRESENT == 1)\r\n/** @defgroup CORTEX_MPU_HFNMI_PRIVDEF_Control MPU HFNMI and PRIVILEGED Access control\r\n * @{\r\n */\r\n#define MPU_HFNMI_PRIVDEF_NONE 0x00000000U\r\n#define MPU_HARDFAULT_NMI      MPU_CTRL_HFNMIENA_Msk\r\n#define MPU_PRIVILEGED_DEFAULT MPU_CTRL_PRIVDEFENA_Msk\r\n#define MPU_HFNMI_PRIVDEF      (MPU_CTRL_HFNMIENA_Msk | MPU_CTRL_PRIVDEFENA_Msk)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Region_Enable CORTEX MPU Region Enable\r\n * @{\r\n */\r\n#define MPU_REGION_ENABLE  ((uint8_t)0x01)\r\n#define MPU_REGION_DISABLE ((uint8_t)0x00)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Instruction_Access CORTEX MPU Instruction Access\r\n * @{\r\n */\r\n#define MPU_INSTRUCTION_ACCESS_ENABLE  ((uint8_t)0x00)\r\n#define MPU_INSTRUCTION_ACCESS_DISABLE ((uint8_t)0x01)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Access_Shareable CORTEX MPU Instruction Access Shareable\r\n * @{\r\n */\r\n#define MPU_ACCESS_SHAREABLE     ((uint8_t)0x01)\r\n#define MPU_ACCESS_NOT_SHAREABLE ((uint8_t)0x00)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Access_Cacheable CORTEX MPU Instruction Access Cacheable\r\n * @{\r\n */\r\n#define MPU_ACCESS_CACHEABLE     ((uint8_t)0x01)\r\n#define MPU_ACCESS_NOT_CACHEABLE ((uint8_t)0x00)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Access_Bufferable CORTEX MPU Instruction Access Bufferable\r\n * @{\r\n */\r\n#define MPU_ACCESS_BUFFERABLE     ((uint8_t)0x01)\r\n#define MPU_ACCESS_NOT_BUFFERABLE ((uint8_t)0x00)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_TEX_Levels MPU TEX Levels\r\n * @{\r\n */\r\n#define MPU_TEX_LEVEL0 ((uint8_t)0x00)\r\n#define MPU_TEX_LEVEL1 ((uint8_t)0x01)\r\n#define MPU_TEX_LEVEL2 ((uint8_t)0x02)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Region_Size CORTEX MPU Region Size\r\n * @{\r\n */\r\n#define MPU_REGION_SIZE_32B   ((uint8_t)0x04)\r\n#define MPU_REGION_SIZE_64B   ((uint8_t)0x05)\r\n#define MPU_REGION_SIZE_128B  ((uint8_t)0x06)\r\n#define MPU_REGION_SIZE_256B  ((uint8_t)0x07)\r\n#define MPU_REGION_SIZE_512B  ((uint8_t)0x08)\r\n#define MPU_REGION_SIZE_1KB   ((uint8_t)0x09)\r\n#define MPU_REGION_SIZE_2KB   ((uint8_t)0x0A)\r\n#define MPU_REGION_SIZE_4KB   ((uint8_t)0x0B)\r\n#define MPU_REGION_SIZE_8KB   ((uint8_t)0x0C)\r\n#define MPU_REGION_SIZE_16KB  ((uint8_t)0x0D)\r\n#define MPU_REGION_SIZE_32KB  ((uint8_t)0x0E)\r\n#define MPU_REGION_SIZE_64KB  ((uint8_t)0x0F)\r\n#define MPU_REGION_SIZE_128KB ((uint8_t)0x10)\r\n#define MPU_REGION_SIZE_256KB ((uint8_t)0x11)\r\n#define MPU_REGION_SIZE_512KB ((uint8_t)0x12)\r\n#define MPU_REGION_SIZE_1MB   ((uint8_t)0x13)\r\n#define MPU_REGION_SIZE_2MB   ((uint8_t)0x14)\r\n#define MPU_REGION_SIZE_4MB   ((uint8_t)0x15)\r\n#define MPU_REGION_SIZE_8MB   ((uint8_t)0x16)\r\n#define MPU_REGION_SIZE_16MB  ((uint8_t)0x17)\r\n#define MPU_REGION_SIZE_32MB  ((uint8_t)0x18)\r\n#define MPU_REGION_SIZE_64MB  ((uint8_t)0x19)\r\n#define MPU_REGION_SIZE_128MB ((uint8_t)0x1A)\r\n#define MPU_REGION_SIZE_256MB ((uint8_t)0x1B)\r\n#define MPU_REGION_SIZE_512MB ((uint8_t)0x1C)\r\n#define MPU_REGION_SIZE_1GB   ((uint8_t)0x1D)\r\n#define MPU_REGION_SIZE_2GB   ((uint8_t)0x1E)\r\n#define MPU_REGION_SIZE_4GB   ((uint8_t)0x1F)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Region_Permission_Attributes CORTEX MPU Region Permission Attributes\r\n * @{\r\n */\r\n#define MPU_REGION_NO_ACCESS   ((uint8_t)0x00)\r\n#define MPU_REGION_PRIV_RW     ((uint8_t)0x01)\r\n#define MPU_REGION_PRIV_RW_URO ((uint8_t)0x02)\r\n#define MPU_REGION_FULL_ACCESS ((uint8_t)0x03)\r\n#define MPU_REGION_PRIV_RO     ((uint8_t)0x05)\r\n#define MPU_REGION_PRIV_RO_URO ((uint8_t)0x06)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Region_Number CORTEX MPU Region Number\r\n * @{\r\n */\r\n#define MPU_REGION_NUMBER0 ((uint8_t)0x00)\r\n#define MPU_REGION_NUMBER1 ((uint8_t)0x01)\r\n#define MPU_REGION_NUMBER2 ((uint8_t)0x02)\r\n#define MPU_REGION_NUMBER3 ((uint8_t)0x03)\r\n#define MPU_REGION_NUMBER4 ((uint8_t)0x04)\r\n#define MPU_REGION_NUMBER5 ((uint8_t)0x05)\r\n#define MPU_REGION_NUMBER6 ((uint8_t)0x06)\r\n#define MPU_REGION_NUMBER7 ((uint8_t)0x07)\r\n/**\r\n * @}\r\n */\r\n#endif /* __MPU_PRESENT */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported Macros -----------------------------------------------------------*/\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup CORTEX_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup CORTEX_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* Initialization and de-initialization functions *****************************/\r\nvoid     HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup);\r\nvoid     HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);\r\nvoid     HAL_NVIC_EnableIRQ(IRQn_Type IRQn);\r\nvoid     HAL_NVIC_DisableIRQ(IRQn_Type IRQn);\r\nvoid     HAL_NVIC_SystemReset(void);\r\nuint32_t HAL_SYSTICK_Config(uint32_t TicksNumb);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup CORTEX_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* Peripheral Control functions ***********************************************/\r\nuint32_t HAL_NVIC_GetPriorityGrouping(void);\r\nvoid     HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t *pPreemptPriority, uint32_t *pSubPriority);\r\nuint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn);\r\nvoid     HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn);\r\nvoid     HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn);\r\nuint32_t HAL_NVIC_GetActive(IRQn_Type IRQn);\r\nvoid     HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource);\r\nvoid     HAL_SYSTICK_IRQHandler(void);\r\nvoid     HAL_SYSTICK_Callback(void);\r\n\r\n#if (__MPU_PRESENT == 1U)\r\nvoid HAL_MPU_Enable(uint32_t MPU_Control);\r\nvoid HAL_MPU_Disable(void);\r\nvoid HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init);\r\n#endif /* __MPU_PRESENT */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private types -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private constants ---------------------------------------------------------*/\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup CORTEX_Private_Macros CORTEX Private Macros\r\n * @{\r\n */\r\n#define IS_NVIC_PRIORITY_GROUP(GROUP) \\\r\n  (((GROUP) == NVIC_PRIORITYGROUP_0) || ((GROUP) == NVIC_PRIORITYGROUP_1) || ((GROUP) == NVIC_PRIORITYGROUP_2) || ((GROUP) == NVIC_PRIORITYGROUP_3) || ((GROUP) == NVIC_PRIORITYGROUP_4))\r\n\r\n#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < 0x10U)\r\n\r\n#define IS_NVIC_SUB_PRIORITY(PRIORITY) ((PRIORITY) < 0x10U)\r\n\r\n#define IS_NVIC_DEVICE_IRQ(IRQ) ((IRQ) >= (IRQn_Type)0x00U)\r\n\r\n#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SYSTICK_CLKSOURCE_HCLK) || ((SOURCE) == SYSTICK_CLKSOURCE_HCLK_DIV8))\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n#define IS_MPU_REGION_ENABLE(STATE) (((STATE) == MPU_REGION_ENABLE) || ((STATE) == MPU_REGION_DISABLE))\r\n\r\n#define IS_MPU_INSTRUCTION_ACCESS(STATE) (((STATE) == MPU_INSTRUCTION_ACCESS_ENABLE) || ((STATE) == MPU_INSTRUCTION_ACCESS_DISABLE))\r\n\r\n#define IS_MPU_ACCESS_SHAREABLE(STATE) (((STATE) == MPU_ACCESS_SHAREABLE) || ((STATE) == MPU_ACCESS_NOT_SHAREABLE))\r\n\r\n#define IS_MPU_ACCESS_CACHEABLE(STATE) (((STATE) == MPU_ACCESS_CACHEABLE) || ((STATE) == MPU_ACCESS_NOT_CACHEABLE))\r\n\r\n#define IS_MPU_ACCESS_BUFFERABLE(STATE) (((STATE) == MPU_ACCESS_BUFFERABLE) || ((STATE) == MPU_ACCESS_NOT_BUFFERABLE))\r\n\r\n#define IS_MPU_TEX_LEVEL(TYPE) (((TYPE) == MPU_TEX_LEVEL0) || ((TYPE) == MPU_TEX_LEVEL1) || ((TYPE) == MPU_TEX_LEVEL2))\r\n\r\n#define IS_MPU_REGION_PERMISSION_ATTRIBUTE(TYPE)                                                                                                                                    \\\r\n  (((TYPE) == MPU_REGION_NO_ACCESS) || ((TYPE) == MPU_REGION_PRIV_RW) || ((TYPE) == MPU_REGION_PRIV_RW_URO) || ((TYPE) == MPU_REGION_FULL_ACCESS) || ((TYPE) == MPU_REGION_PRIV_RO) \\\r\n   || ((TYPE) == MPU_REGION_PRIV_RO_URO))\r\n\r\n#define IS_MPU_REGION_NUMBER(NUMBER)                                                                                                                                                \\\r\n  (((NUMBER) == MPU_REGION_NUMBER0) || ((NUMBER) == MPU_REGION_NUMBER1) || ((NUMBER) == MPU_REGION_NUMBER2) || ((NUMBER) == MPU_REGION_NUMBER3) || ((NUMBER) == MPU_REGION_NUMBER4) \\\r\n   || ((NUMBER) == MPU_REGION_NUMBER5) || ((NUMBER) == MPU_REGION_NUMBER6) || ((NUMBER) == MPU_REGION_NUMBER7))\r\n\r\n#define IS_MPU_REGION_SIZE(SIZE)                                                                                                                                                          \\\r\n  (((SIZE) == MPU_REGION_SIZE_32B) || ((SIZE) == MPU_REGION_SIZE_64B) || ((SIZE) == MPU_REGION_SIZE_128B) || ((SIZE) == MPU_REGION_SIZE_256B) || ((SIZE) == MPU_REGION_SIZE_512B)         \\\r\n   || ((SIZE) == MPU_REGION_SIZE_1KB) || ((SIZE) == MPU_REGION_SIZE_2KB) || ((SIZE) == MPU_REGION_SIZE_4KB) || ((SIZE) == MPU_REGION_SIZE_8KB) || ((SIZE) == MPU_REGION_SIZE_16KB)        \\\r\n   || ((SIZE) == MPU_REGION_SIZE_32KB) || ((SIZE) == MPU_REGION_SIZE_64KB) || ((SIZE) == MPU_REGION_SIZE_128KB) || ((SIZE) == MPU_REGION_SIZE_256KB) || ((SIZE) == MPU_REGION_SIZE_512KB) \\\r\n   || ((SIZE) == MPU_REGION_SIZE_1MB) || ((SIZE) == MPU_REGION_SIZE_2MB) || ((SIZE) == MPU_REGION_SIZE_4MB) || ((SIZE) == MPU_REGION_SIZE_8MB) || ((SIZE) == MPU_REGION_SIZE_16MB)        \\\r\n   || ((SIZE) == MPU_REGION_SIZE_32MB) || ((SIZE) == MPU_REGION_SIZE_64MB) || ((SIZE) == MPU_REGION_SIZE_128MB) || ((SIZE) == MPU_REGION_SIZE_256MB) || ((SIZE) == MPU_REGION_SIZE_512MB) \\\r\n   || ((SIZE) == MPU_REGION_SIZE_1GB) || ((SIZE) == MPU_REGION_SIZE_2GB) || ((SIZE) == MPU_REGION_SIZE_4GB))\r\n\r\n#define IS_MPU_SUB_REGION_DISABLE(SUBREGION) ((SUBREGION) < (uint16_t)0x00FF)\r\n#endif /* __MPU_PRESENT */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private functions ---------------------------------------------------------*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_CORTEX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h",
    "content": "/**\r\n******************************************************************************\r\n* @file    stm32f1xx_hal_def.h\r\n* @author  MCD Application Team\r\n* @brief   This file contains HAL common defines, enumeration, macros and\r\n*          structures definitions.\r\n******************************************************************************\r\n* @attention\r\n*\r\n* <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.\r\n* All rights reserved.</center></h2>\r\n*\r\n* This software component is licensed by ST under BSD 3-Clause license,\r\n* the \"License\"; You may not use this file except in compliance with the\r\n* License. You may obtain a copy of the License at:\r\n*                        opensource.org/licenses/BSD-3-Clause\r\n*\r\n******************************************************************************\r\n*/\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_DEF\r\n#define __STM32F1xx_HAL_DEF\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"Legacy/stm32_hal_legacy.h\"\r\n#include \"stm32f1xx.h\"\r\n#include <stddef.h>\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n#ifndef USE_HAL_TIM_REGISTER_CALLBACKS\r\n#define USE_HAL_TIM_REGISTER_CALLBACKS 0\r\n#endif\r\n#ifndef USE_HAL_I2C_REGISTER_CALLBACKS\r\n#define USE_HAL_I2C_REGISTER_CALLBACKS 0\r\n#endif\r\n#ifndef USE_HAL_ADC_REGISTER_CALLBACKS\r\n#define USE_HAL_ADC_REGISTER_CALLBACKS 0\r\n#endif\r\n/**\r\n * @brief  HAL Status structures definition\r\n */\r\ntypedef enum { HAL_OK = 0x00U, HAL_ERROR = 0x01U, HAL_BUSY = 0x02U, HAL_TIMEOUT = 0x03U } HAL_StatusTypeDef;\r\n\r\n/**\r\n * @brief  HAL Lock structures definition\r\n */\r\ntypedef enum { HAL_UNLOCKED = 0x00U, HAL_LOCKED = 0x01U } HAL_LockTypeDef;\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n#define HAL_MAX_DELAY 0xFFFFFFFFU\r\n\r\n#define HAL_IS_BIT_SET(REG, BIT) (((REG) & (BIT)) != 0U)\r\n#define HAL_IS_BIT_CLR(REG, BIT) (((REG) & (BIT)) == 0U)\r\n\r\n#define __HAL_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__) \\\r\n  do {                                                               \\\r\n    (__HANDLE__)->__PPP_DMA_FIELD__ = &(__DMA_HANDLE__);             \\\r\n    (__DMA_HANDLE__).Parent         = (__HANDLE__);                  \\\r\n  } while (0U)\r\n\r\n#define UNUSED(X) (void)X /* To avoid gcc/g++ warnings */\r\n\r\n/** @brief Reset the Handle's State field.\r\n * @param __HANDLE__ specifies the Peripheral Handle.\r\n * @note  This macro can be used for the following purpose:\r\n *          - When the Handle is declared as local variable; before passing it as parameter\r\n *            to HAL_PPP_Init() for the first time, it is mandatory to use this macro\r\n *            to set to 0 the Handle's \"State\" field.\r\n *            Otherwise, \"State\" field may have any random value and the first time the function\r\n *            HAL_PPP_Init() is called, the low level hardware initialization will be missed\r\n *            (i.e. HAL_PPP_MspInit() will not be executed).\r\n *          - When there is a need to reconfigure the low level hardware: instead of calling\r\n *            HAL_PPP_DeInit() then HAL_PPP_Init(), user can make a call to this macro then HAL_PPP_Init().\r\n *            In this later function, when the Handle's \"State\" field is set to 0, it will execute the function\r\n *            HAL_PPP_MspInit() which will reconfigure the low level hardware.\r\n * @retval None\r\n */\r\n#define __HAL_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = 0U)\r\n\r\n#if (USE_RTOS == 1U)\r\n/* Reserved for future use */\r\n#error \"USE_RTOS should be 0 in the current HAL release\"\r\n#else\r\n#define __HAL_LOCK(__HANDLE__)              \\\r\n  do {                                      \\\r\n    if ((__HANDLE__)->Lock == HAL_LOCKED) { \\\r\n      return HAL_BUSY;                      \\\r\n    } else {                                \\\r\n      (__HANDLE__)->Lock = HAL_LOCKED;      \\\r\n    }                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_UNLOCK(__HANDLE__)       \\\r\n  do {                                 \\\r\n    (__HANDLE__)->Lock = HAL_UNLOCKED; \\\r\n  } while (0U)\r\n#endif /* USE_RTOS */\r\n\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) /* ARM Compiler V6 */\r\n#ifndef __weak\r\n#define __weak __attribute__((weak))\r\n#endif\r\n#ifndef __packed\r\n#define __packed __attribute__((packed))\r\n#endif\r\n#elif defined(__GNUC__) && !defined(__CC_ARM) /* GNU Compiler */\r\n#ifndef __weak\r\n#define __weak __attribute__((weak))\r\n#endif /* __weak */\r\n#ifndef __packed\r\n#define __packed __attribute__((__packed__))\r\n#endif /* __packed */\r\n#endif /* __GNUC__ */\r\n\r\n/* Macro to get variable aligned on 4-bytes, for __ICCARM__ the directive \"#pragma data_alignment=4\" must be used instead */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) /* ARM Compiler V6 */\r\n#ifndef __ALIGN_BEGIN\r\n#define __ALIGN_BEGIN\r\n#endif\r\n#ifndef __ALIGN_END\r\n#define __ALIGN_END __attribute__((aligned(4)))\r\n#endif\r\n#elif defined(__GNUC__) && !defined(__CC_ARM) /* GNU Compiler */\r\n#ifndef __ALIGN_END\r\n#define __ALIGN_END __attribute__((aligned(4)))\r\n#endif /* __ALIGN_END */\r\n#ifndef __ALIGN_BEGIN\r\n#define __ALIGN_BEGIN\r\n#endif /* __ALIGN_BEGIN */\r\n#else\r\n#ifndef __ALIGN_END\r\n#define __ALIGN_END\r\n#endif /* __ALIGN_END */\r\n#ifndef __ALIGN_BEGIN\r\n#if defined(__CC_ARM) /* ARM Compiler V5*/\r\n#define __ALIGN_BEGIN __align(4)\r\n#elif defined(__ICCARM__) /* IAR Compiler */\r\n#define __ALIGN_BEGIN\r\n#endif /* __CC_ARM */\r\n#endif /* __ALIGN_BEGIN */\r\n#endif /* __GNUC__ */\r\n\r\n/**\r\n * @brief  __RAM_FUNC definition\r\n */\r\n#if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))\r\n/* ARM Compiler V4/V5 and V6\r\n   --------------------------\r\n   RAM functions are defined using the toolchain options.\r\n   Functions that are executed in RAM should reside in a separate source module.\r\n   Using the 'Options for File' dialog you can simply change the 'Code / Const'\r\n   area of a module to a memory space in physical RAM.\r\n   Available memory areas are declared in the 'Target' tab of the 'Options for Target'\r\n   dialog.\r\n*/\r\n#define __RAM_FUNC\r\n\r\n#elif defined(__ICCARM__)\r\n/* ICCARM Compiler\r\n   ---------------\r\n   RAM functions are defined using a specific toolchain keyword \"__ramfunc\".\r\n*/\r\n#define __RAM_FUNC __ramfunc\r\n\r\n#elif defined(__GNUC__)\r\n/* GNU Compiler\r\n   ------------\r\n  RAM functions are defined using a specific toolchain attribute\r\n   \"__attribute__((section(\".RamFunc\")))\".\r\n*/\r\n#define __RAM_FUNC __attribute__((section(\".RamFunc\")))\r\n\r\n#endif\r\n\r\n/**\r\n * @brief  __NOINLINE definition\r\n */\r\n#if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) || defined(__GNUC__)\r\n/* ARM V4/V5 and V6 & GNU Compiler\r\n   -------------------------------\r\n*/\r\n#define __NOINLINE __attribute__((noinline))\r\n\r\n#elif defined(__ICCARM__)\r\n/* ICCARM Compiler\r\n   ---------------\r\n*/\r\n#define __NOINLINE _Pragma(\"optimize = no_inline\")\r\n\r\n#endif\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* ___STM32F1xx_HAL_DEF */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_dma.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of DMA HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_DMA_H\r\n#define __STM32F1xx_HAL_DMA_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup DMA\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n\r\n/** @defgroup DMA_Exported_Types DMA Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  DMA Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t Direction; /*!< Specifies if the data will be transferred from memory to peripheral,\r\n                           from memory to memory or from peripheral to memory.\r\n                           This parameter can be a value of @ref DMA_Data_transfer_direction */\r\n\r\n  uint32_t PeriphInc; /*!< Specifies whether the Peripheral address register should be incremented or not.\r\n                           This parameter can be a value of @ref DMA_Peripheral_incremented_mode */\r\n\r\n  uint32_t MemInc; /*!< Specifies whether the memory address register should be incremented or not.\r\n                        This parameter can be a value of @ref DMA_Memory_incremented_mode */\r\n\r\n  uint32_t PeriphDataAlignment; /*!< Specifies the Peripheral data width.\r\n                                     This parameter can be a value of @ref DMA_Peripheral_data_size */\r\n\r\n  uint32_t MemDataAlignment; /*!< Specifies the Memory data width.\r\n                                  This parameter can be a value of @ref DMA_Memory_data_size */\r\n\r\n  uint32_t Mode; /*!< Specifies the operation mode of the DMAy Channelx.\r\n                      This parameter can be a value of @ref DMA_mode\r\n                      @note The circular buffer mode cannot be used if the memory-to-memory\r\n                            data transfer is configured on the selected Channel */\r\n\r\n  uint32_t Priority; /*!< Specifies the software priority for the DMAy Channelx.\r\n                          This parameter can be a value of @ref DMA_Priority_level */\r\n} DMA_InitTypeDef;\r\n\r\n/**\r\n * @brief  HAL DMA State structures definition\r\n */\r\ntypedef enum {\r\n  HAL_DMA_STATE_RESET   = 0x00U, /*!< DMA not yet initialized or disabled    */\r\n  HAL_DMA_STATE_READY   = 0x01U, /*!< DMA initialized and ready for use      */\r\n  HAL_DMA_STATE_BUSY    = 0x02U, /*!< DMA process is ongoing                 */\r\n  HAL_DMA_STATE_TIMEOUT = 0x03U  /*!< DMA timeout state                      */\r\n} HAL_DMA_StateTypeDef;\r\n\r\n/**\r\n * @brief  HAL DMA Error Code structure definition\r\n */\r\ntypedef enum {\r\n  HAL_DMA_FULL_TRANSFER = 0x00U, /*!< Full transfer     */\r\n  HAL_DMA_HALF_TRANSFER = 0x01U  /*!< Half Transfer     */\r\n} HAL_DMA_LevelCompleteTypeDef;\r\n\r\n/**\r\n * @brief  HAL DMA Callback ID structure definition\r\n */\r\ntypedef enum {\r\n  HAL_DMA_XFER_CPLT_CB_ID     = 0x00U, /*!< Full transfer     */\r\n  HAL_DMA_XFER_HALFCPLT_CB_ID = 0x01U, /*!< Half transfer     */\r\n  HAL_DMA_XFER_ERROR_CB_ID    = 0x02U, /*!< Error             */\r\n  HAL_DMA_XFER_ABORT_CB_ID    = 0x03U, /*!< Abort             */\r\n  HAL_DMA_XFER_ALL_CB_ID      = 0x04U  /*!< All               */\r\n\r\n} HAL_DMA_CallbackIDTypeDef;\r\n\r\n/**\r\n * @brief  DMA handle Structure definition\r\n */\r\ntypedef struct __DMA_HandleTypeDef {\r\n  DMA_Channel_TypeDef *Instance; /*!< Register base address                  */\r\n\r\n  DMA_InitTypeDef Init; /*!< DMA communication parameters           */\r\n\r\n  HAL_LockTypeDef Lock; /*!< DMA locking object                     */\r\n\r\n  HAL_DMA_StateTypeDef State; /*!< DMA transfer state                     */\r\n\r\n  void *Parent; /*!< Parent object state                    */\r\n\r\n  void (*XferCpltCallback)(struct __DMA_HandleTypeDef *hdma); /*!< DMA transfer complete callback         */\r\n\r\n  void (*XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma); /*!< DMA Half transfer complete callback    */\r\n\r\n  void (*XferErrorCallback)(struct __DMA_HandleTypeDef *hdma); /*!< DMA transfer error callback            */\r\n\r\n  void (*XferAbortCallback)(struct __DMA_HandleTypeDef *hdma); /*!< DMA transfer abort callback            */\r\n\r\n  __IO uint32_t ErrorCode; /*!< DMA Error code                         */\r\n\r\n  DMA_TypeDef *DmaBaseAddress; /*!< DMA Channel Base Address               */\r\n\r\n  uint32_t ChannelIndex; /*!< DMA Channel Index                      */\r\n\r\n} DMA_HandleTypeDef;\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup DMA_Exported_Constants DMA Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup DMA_Error_Code DMA Error Code\r\n * @{\r\n */\r\n#define HAL_DMA_ERROR_NONE          0x00000000U /*!< No error             */\r\n#define HAL_DMA_ERROR_TE            0x00000001U /*!< Transfer error       */\r\n#define HAL_DMA_ERROR_NO_XFER       0x00000004U /*!< no ongoing transfer  */\r\n#define HAL_DMA_ERROR_TIMEOUT       0x00000020U /*!< Timeout error        */\r\n#define HAL_DMA_ERROR_NOT_SUPPORTED 0x00000100U /*!< Not supported mode                    */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Data_transfer_direction DMA Data transfer direction\r\n * @{\r\n */\r\n#define DMA_PERIPH_TO_MEMORY 0x00000000U                 /*!< Peripheral to memory direction */\r\n#define DMA_MEMORY_TO_PERIPH ((uint32_t)DMA_CCR_DIR)     /*!< Memory to peripheral direction */\r\n#define DMA_MEMORY_TO_MEMORY ((uint32_t)DMA_CCR_MEM2MEM) /*!< Memory to memory direction     */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Peripheral_incremented_mode DMA Peripheral incremented mode\r\n * @{\r\n */\r\n#define DMA_PINC_ENABLE  ((uint32_t)DMA_CCR_PINC) /*!< Peripheral increment mode Enable */\r\n#define DMA_PINC_DISABLE 0x00000000U              /*!< Peripheral increment mode Disable */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Memory_incremented_mode DMA Memory incremented mode\r\n * @{\r\n */\r\n#define DMA_MINC_ENABLE  ((uint32_t)DMA_CCR_MINC) /*!< Memory increment mode Enable  */\r\n#define DMA_MINC_DISABLE 0x00000000U              /*!< Memory increment mode Disable */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Peripheral_data_size DMA Peripheral data size\r\n * @{\r\n */\r\n#define DMA_PDATAALIGN_BYTE     0x00000000U                 /*!< Peripheral data alignment: Byte     */\r\n#define DMA_PDATAALIGN_HALFWORD ((uint32_t)DMA_CCR_PSIZE_0) /*!< Peripheral data alignment: HalfWord */\r\n#define DMA_PDATAALIGN_WORD     ((uint32_t)DMA_CCR_PSIZE_1) /*!< Peripheral data alignment: Word     */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Memory_data_size DMA Memory data size\r\n * @{\r\n */\r\n#define DMA_MDATAALIGN_BYTE     0x00000000U                 /*!< Memory data alignment: Byte     */\r\n#define DMA_MDATAALIGN_HALFWORD ((uint32_t)DMA_CCR_MSIZE_0) /*!< Memory data alignment: HalfWord */\r\n#define DMA_MDATAALIGN_WORD     ((uint32_t)DMA_CCR_MSIZE_1) /*!< Memory data alignment: Word     */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_mode DMA mode\r\n * @{\r\n */\r\n#define DMA_NORMAL   0x00000000U              /*!< Normal mode                  */\r\n#define DMA_CIRCULAR ((uint32_t)DMA_CCR_CIRC) /*!< Circular mode                */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Priority_level DMA Priority level\r\n * @{\r\n */\r\n#define DMA_PRIORITY_LOW       0x00000000U              /*!< Priority level : Low       */\r\n#define DMA_PRIORITY_MEDIUM    ((uint32_t)DMA_CCR_PL_0) /*!< Priority level : Medium    */\r\n#define DMA_PRIORITY_HIGH      ((uint32_t)DMA_CCR_PL_1) /*!< Priority level : High      */\r\n#define DMA_PRIORITY_VERY_HIGH ((uint32_t)DMA_CCR_PL)   /*!< Priority level : Very_High */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_interrupt_enable_definitions DMA interrupt enable definitions\r\n * @{\r\n */\r\n#define DMA_IT_TC ((uint32_t)DMA_CCR_TCIE)\r\n#define DMA_IT_HT ((uint32_t)DMA_CCR_HTIE)\r\n#define DMA_IT_TE ((uint32_t)DMA_CCR_TEIE)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_flag_definitions DMA flag definitions\r\n * @{\r\n */\r\n#define DMA_FLAG_GL1 0x00000001U\r\n#define DMA_FLAG_TC1 0x00000002U\r\n#define DMA_FLAG_HT1 0x00000004U\r\n#define DMA_FLAG_TE1 0x00000008U\r\n#define DMA_FLAG_GL2 0x00000010U\r\n#define DMA_FLAG_TC2 0x00000020U\r\n#define DMA_FLAG_HT2 0x00000040U\r\n#define DMA_FLAG_TE2 0x00000080U\r\n#define DMA_FLAG_GL3 0x00000100U\r\n#define DMA_FLAG_TC3 0x00000200U\r\n#define DMA_FLAG_HT3 0x00000400U\r\n#define DMA_FLAG_TE3 0x00000800U\r\n#define DMA_FLAG_GL4 0x00001000U\r\n#define DMA_FLAG_TC4 0x00002000U\r\n#define DMA_FLAG_HT4 0x00004000U\r\n#define DMA_FLAG_TE4 0x00008000U\r\n#define DMA_FLAG_GL5 0x00010000U\r\n#define DMA_FLAG_TC5 0x00020000U\r\n#define DMA_FLAG_HT5 0x00040000U\r\n#define DMA_FLAG_TE5 0x00080000U\r\n#define DMA_FLAG_GL6 0x00100000U\r\n#define DMA_FLAG_TC6 0x00200000U\r\n#define DMA_FLAG_HT6 0x00400000U\r\n#define DMA_FLAG_TE6 0x00800000U\r\n#define DMA_FLAG_GL7 0x01000000U\r\n#define DMA_FLAG_TC7 0x02000000U\r\n#define DMA_FLAG_HT7 0x04000000U\r\n#define DMA_FLAG_TE7 0x08000000U\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macros -----------------------------------------------------------*/\r\n/** @defgroup DMA_Exported_Macros DMA Exported Macros\r\n * @{\r\n */\r\n\r\n/** @brief  Reset DMA handle state.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval None\r\n */\r\n#define __HAL_DMA_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DMA_STATE_RESET)\r\n\r\n/**\r\n * @brief  Enable the specified DMA Channel.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval None\r\n */\r\n#define __HAL_DMA_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CCR, DMA_CCR_EN))\r\n\r\n/**\r\n * @brief  Disable the specified DMA Channel.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval None\r\n */\r\n#define __HAL_DMA_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CCR, DMA_CCR_EN))\r\n\r\n/* Interrupt & Flag management */\r\n\r\n/**\r\n * @brief  Enables the specified DMA Channel interrupts.\r\n * @param  __HANDLE__: DMA handle\r\n * @param __INTERRUPT__: specifies the DMA interrupt sources to be enabled or disabled.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_IT_TC:  Transfer complete interrupt mask\r\n *            @arg DMA_IT_HT:  Half transfer complete interrupt mask\r\n *            @arg DMA_IT_TE:  Transfer error interrupt mask\r\n * @retval None\r\n */\r\n#define __HAL_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__) (SET_BIT((__HANDLE__)->Instance->CCR, (__INTERRUPT__)))\r\n\r\n/**\r\n * @brief  Disable the specified DMA Channel interrupts.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __INTERRUPT__: specifies the DMA interrupt sources to be enabled or disabled.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_IT_TC:  Transfer complete interrupt mask\r\n *            @arg DMA_IT_HT:  Half transfer complete interrupt mask\r\n *            @arg DMA_IT_TE:  Transfer error interrupt mask\r\n * @retval None\r\n */\r\n#define __HAL_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__) (CLEAR_BIT((__HANDLE__)->Instance->CCR, (__INTERRUPT__)))\r\n\r\n/**\r\n * @brief  Check whether the specified DMA Channel interrupt is enabled or not.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __INTERRUPT__: specifies the DMA interrupt source to check.\r\n *          This parameter can be one of the following values:\r\n *            @arg DMA_IT_TC:  Transfer complete interrupt mask\r\n *            @arg DMA_IT_HT:  Half transfer complete interrupt mask\r\n *            @arg DMA_IT_TE:  Transfer error interrupt mask\r\n * @retval The state of DMA_IT (SET or RESET).\r\n */\r\n#define __HAL_DMA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CCR & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)\r\n\r\n/**\r\n * @brief  Return the number of remaining data units in the current DMA Channel transfer.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The number of remaining data units in the current DMA Channel transfer.\r\n */\r\n#define __HAL_DMA_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNDTR)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Include DMA HAL Extension module */\r\n#include \"stm32f1xx_hal_dma_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup DMA_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup DMA_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* Initialization and de-initialization functions *****************************/\r\nHAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma);\r\nHAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup DMA_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* IO operation functions *****************************************************/\r\nHAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);\r\nHAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);\r\nHAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma);\r\nHAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma);\r\nHAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout);\r\nvoid              HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma);\r\nHAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (*pCallback)(DMA_HandleTypeDef *_hdma));\r\nHAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup DMA_Exported_Functions_Group3\r\n * @{\r\n */\r\n/* Peripheral State and Error functions ***************************************/\r\nHAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma);\r\nuint32_t             HAL_DMA_GetError(DMA_HandleTypeDef *hdma);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup DMA_Private_Macros DMA Private Macros\r\n * @{\r\n */\r\n\r\n#define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_PERIPH_TO_MEMORY) || ((DIRECTION) == DMA_MEMORY_TO_PERIPH) || ((DIRECTION) == DMA_MEMORY_TO_MEMORY))\r\n\r\n#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1U) && ((SIZE) < 0x10000U))\r\n\r\n#define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PINC_ENABLE) || ((STATE) == DMA_PINC_DISABLE))\r\n\r\n#define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MINC_ENABLE) || ((STATE) == DMA_MINC_DISABLE))\r\n\r\n#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PDATAALIGN_BYTE) || ((SIZE) == DMA_PDATAALIGN_HALFWORD) || ((SIZE) == DMA_PDATAALIGN_WORD))\r\n\r\n#define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MDATAALIGN_BYTE) || ((SIZE) == DMA_MDATAALIGN_HALFWORD) || ((SIZE) == DMA_MDATAALIGN_WORD))\r\n\r\n#define IS_DMA_MODE(MODE) (((MODE) == DMA_NORMAL) || ((MODE) == DMA_CIRCULAR))\r\n\r\n#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_PRIORITY_LOW) || ((PRIORITY) == DMA_PRIORITY_MEDIUM) || ((PRIORITY) == DMA_PRIORITY_HIGH) || ((PRIORITY) == DMA_PRIORITY_VERY_HIGH))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private functions ---------------------------------------------------------*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_DMA_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h",
    "content": "/**\r\n******************************************************************************\r\n* @file    stm32f1xx_hal_dma_ex.h\r\n* @author  MCD Application Team\r\n* @brief   Header file of DMA HAL extension module.\r\n******************************************************************************\r\n* @attention\r\n*\r\n* <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n* All rights reserved.</center></h2>\r\n*\r\n* This software component is licensed by ST under BSD 3-Clause license,\r\n* the \"License\"; You may not use this file except in compliance with the\r\n* License. You may obtain a copy of the License at:\r\n*                        opensource.org/licenses/BSD-3-Clause\r\n*\r\n******************************************************************************\r\n*/\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_DMA_EX_H\r\n#define __STM32F1xx_HAL_DMA_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup DMAEx DMAEx\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/* Exported constants --------------------------------------------------------*/\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup DMAEx_Exported_Macros DMA Extended Exported Macros\r\n * @{\r\n */\r\n/* Interrupt & Flag management */\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup DMAEx_High_density_XL_density_Product_devices DMAEx High density and XL density product devices\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Returns the current DMA Channel transfer complete flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer complete flag index.\r\n */\r\n#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_TC1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_TC2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_TC3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_TC4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_TC5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_TC6 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7)) ? DMA_FLAG_TC7 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1)) ? DMA_FLAG_TC1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2)) ? DMA_FLAG_TC2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3)) ? DMA_FLAG_TC3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4)) ? DMA_FLAG_TC4 \\\r\n                                                                       : DMA_FLAG_TC5)\r\n\r\n/**\r\n * @brief  Returns the current DMA Channel half transfer complete flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified half transfer complete flag index.\r\n */\r\n#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_HT1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_HT2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_HT3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_HT4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_HT5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_HT6 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7)) ? DMA_FLAG_HT7 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1)) ? DMA_FLAG_HT1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2)) ? DMA_FLAG_HT2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3)) ? DMA_FLAG_HT3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4)) ? DMA_FLAG_HT4 \\\r\n                                                                       : DMA_FLAG_HT5)\r\n\r\n/**\r\n * @brief  Returns the current DMA Channel transfer error flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer error flag index.\r\n */\r\n#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_TE1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_TE2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_TE3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_TE4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_TE5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_TE6 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7)) ? DMA_FLAG_TE7 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1)) ? DMA_FLAG_TE1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2)) ? DMA_FLAG_TE2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3)) ? DMA_FLAG_TE3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4)) ? DMA_FLAG_TE4 \\\r\n                                                                       : DMA_FLAG_TE5)\r\n\r\n/**\r\n * @brief  Return the current DMA Channel Global interrupt flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer error flag index.\r\n */\r\n#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_GL1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_GL2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_GL3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_GL4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_GL5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_GL6 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7)) ? DMA_FLAG_GL7 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1)) ? DMA_FLAG_GL1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2)) ? DMA_FLAG_GL2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3)) ? DMA_FLAG_GL3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4)) ? DMA_FLAG_GL4 \\\r\n                                                                       : DMA_FLAG_GL5)\r\n\r\n/**\r\n * @brief  Get the DMA Channel pending flags.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __FLAG__: Get the specified flag.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_FLAG_TCx:  Transfer complete flag\r\n *            @arg DMA_FLAG_HTx:  Half transfer complete flag\r\n *            @arg DMA_FLAG_TEx:  Transfer error flag\r\n *         Where x can be 1_7 or 1_5 (depending on DMA1 or DMA2) to select the DMA Channel flag.\r\n * @retval The state of FLAG (SET or RESET).\r\n */\r\n#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__) (((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Channel7) ? (DMA2->ISR & (__FLAG__)) : (DMA1->ISR & (__FLAG__)))\r\n\r\n/**\r\n * @brief  Clears the DMA Channel pending flags.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __FLAG__: specifies the flag to clear.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_FLAG_TCx:  Transfer complete flag\r\n *            @arg DMA_FLAG_HTx:  Half transfer complete flag\r\n *            @arg DMA_FLAG_TEx:  Transfer error flag\r\n *         Where x can be 1_7 or 1_5 (depending on DMA1 or DMA2) to select the DMA Channel flag.\r\n * @retval None\r\n */\r\n#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) (((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Channel7) ? (DMA2->IFCR = (__FLAG__)) : (DMA1->IFCR = (__FLAG__)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#else\r\n/** @defgroup DMA_Low_density_Medium_density_Product_devices DMA Low density and Medium density product devices\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Returns the current DMA Channel transfer complete flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer complete flag index.\r\n */\r\n#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_TC1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_TC2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_TC3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_TC4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_TC5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_TC6 \\\r\n                                                                       : DMA_FLAG_TC7)\r\n\r\n/**\r\n * @brief  Return the current DMA Channel half transfer complete flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified half transfer complete flag index.\r\n */\r\n#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_HT1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_HT2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_HT3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_HT4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_HT5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_HT6 \\\r\n                                                                       : DMA_FLAG_HT7)\r\n\r\n/**\r\n * @brief  Return the current DMA Channel transfer error flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer error flag index.\r\n */\r\n#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_TE1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_TE2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_TE3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_TE4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_TE5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_TE6 \\\r\n                                                                       : DMA_FLAG_TE7)\r\n\r\n/**\r\n * @brief  Return the current DMA Channel Global interrupt flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer error flag index.\r\n */\r\n#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_GL1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_GL2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_GL3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_GL4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_GL5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_GL6 \\\r\n                                                                       : DMA_FLAG_GL7)\r\n\r\n/**\r\n * @brief  Get the DMA Channel pending flags.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __FLAG__: Get the specified flag.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_FLAG_TCx:  Transfer complete flag\r\n *            @arg DMA_FLAG_HTx:  Half transfer complete flag\r\n *            @arg DMA_FLAG_TEx:  Transfer error flag\r\n *            @arg DMA_FLAG_GLx:  Global interrupt flag\r\n *         Where x can be 1_7 to select the DMA Channel flag.\r\n * @retval The state of FLAG (SET or RESET).\r\n */\r\n\r\n#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__)   (DMA1->ISR & (__FLAG__))\r\n\r\n/**\r\n * @brief  Clear the DMA Channel pending flags.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __FLAG__: specifies the flag to clear.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_FLAG_TCx:  Transfer complete flag\r\n *            @arg DMA_FLAG_HTx:  Half transfer complete flag\r\n *            @arg DMA_FLAG_TEx:  Transfer error flag\r\n *            @arg DMA_FLAG_GLx:  Global interrupt flag\r\n *         Where x can be 1_7 to select the DMA Channel flag.\r\n * @retval None\r\n */\r\n#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) (DMA1->IFCR = (__FLAG__))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || */\r\n       /* STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#endif /* __STM32F1xx_HAL_DMA_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_exti.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_exti.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of EXTI HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef STM32F1xx_HAL_EXTI_H\r\n#define STM32F1xx_HAL_EXTI_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup EXTI EXTI\r\n * @brief EXTI HAL module driver\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n\r\n/** @defgroup EXTI_Exported_Types EXTI Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  HAL EXTI common Callback ID enumeration definition\r\n */\r\ntypedef enum { HAL_EXTI_COMMON_CB_ID = 0x00U } EXTI_CallbackIDTypeDef;\r\n\r\n/**\r\n * @brief  EXTI Handle structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t Line;                 /*!<  Exti line number */\r\n  void (*PendingCallback)(void); /*!<  Exti pending callback */\r\n} EXTI_HandleTypeDef;\r\n\r\n/**\r\n * @brief  EXTI Configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t Line;    /*!< The Exti line to be configured. This parameter\r\n                         can be a value of @ref EXTI_Line */\r\n  uint32_t Mode;    /*!< The Exit Mode to be configured for a core.\r\n                         This parameter can be a combination of @ref EXTI_Mode */\r\n  uint32_t Trigger; /*!< The Exti Trigger to be configured. This parameter\r\n                         can be a value of @ref EXTI_Trigger */\r\n  uint32_t GPIOSel; /*!< The Exti GPIO multiplexer selection to be configured.\r\n                         This parameter is only possible for line 0 to 15. It\r\n                         can be a value of @ref EXTI_GPIOSel */\r\n} EXTI_ConfigTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup EXTI_Exported_Constants EXTI Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup EXTI_Line  EXTI Line\r\n * @{\r\n */\r\n#define EXTI_LINE_0  (EXTI_GPIO | 0x00u)   /*!< External interrupt line 0 */\r\n#define EXTI_LINE_1  (EXTI_GPIO | 0x01u)   /*!< External interrupt line 1 */\r\n#define EXTI_LINE_2  (EXTI_GPIO | 0x02u)   /*!< External interrupt line 2 */\r\n#define EXTI_LINE_3  (EXTI_GPIO | 0x03u)   /*!< External interrupt line 3 */\r\n#define EXTI_LINE_4  (EXTI_GPIO | 0x04u)   /*!< External interrupt line 4 */\r\n#define EXTI_LINE_5  (EXTI_GPIO | 0x05u)   /*!< External interrupt line 5 */\r\n#define EXTI_LINE_6  (EXTI_GPIO | 0x06u)   /*!< External interrupt line 6 */\r\n#define EXTI_LINE_7  (EXTI_GPIO | 0x07u)   /*!< External interrupt line 7 */\r\n#define EXTI_LINE_8  (EXTI_GPIO | 0x08u)   /*!< External interrupt line 8 */\r\n#define EXTI_LINE_9  (EXTI_GPIO | 0x09u)   /*!< External interrupt line 9 */\r\n#define EXTI_LINE_10 (EXTI_GPIO | 0x0Au)   /*!< External interrupt line 10 */\r\n#define EXTI_LINE_11 (EXTI_GPIO | 0x0Bu)   /*!< External interrupt line 11 */\r\n#define EXTI_LINE_12 (EXTI_GPIO | 0x0Cu)   /*!< External interrupt line 12 */\r\n#define EXTI_LINE_13 (EXTI_GPIO | 0x0Du)   /*!< External interrupt line 13 */\r\n#define EXTI_LINE_14 (EXTI_GPIO | 0x0Eu)   /*!< External interrupt line 14 */\r\n#define EXTI_LINE_15 (EXTI_GPIO | 0x0Fu)   /*!< External interrupt line 15 */\r\n#define EXTI_LINE_16 (EXTI_CONFIG | 0x10u) /*!< External interrupt line 16 Connected to the PVD Output */\r\n#define EXTI_LINE_17 (EXTI_CONFIG | 0x11u) /*!< External interrupt line 17 Connected to the RTC Alarm event */\r\n#if defined(EXTI_IMR_IM18)\r\n#define EXTI_LINE_18 (EXTI_CONFIG | 0x12u) /*!< External interrupt line 18 Connected to the USB Wakeup from suspend event */\r\n#endif                                     /* EXTI_IMR_IM18 */\r\n#if defined(EXTI_IMR_IM19)\r\n#define EXTI_LINE_19 (EXTI_CONFIG | 0x13u) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */\r\n#endif                                     /* EXTI_IMR_IM19 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup EXTI_Mode  EXTI Mode\r\n * @{\r\n */\r\n#define EXTI_MODE_NONE      0x00000000u\r\n#define EXTI_MODE_INTERRUPT 0x00000001u\r\n#define EXTI_MODE_EVENT     0x00000002u\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup EXTI_Trigger  EXTI Trigger\r\n * @{\r\n */\r\n#define EXTI_TRIGGER_NONE           0x00000000u\r\n#define EXTI_TRIGGER_RISING         0x00000001u\r\n#define EXTI_TRIGGER_FALLING        0x00000002u\r\n#define EXTI_TRIGGER_RISING_FALLING (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup EXTI_GPIOSel  EXTI GPIOSel\r\n * @brief\r\n * @{\r\n */\r\n#define EXTI_GPIOA 0x00000000u\r\n#define EXTI_GPIOB 0x00000001u\r\n#define EXTI_GPIOC 0x00000002u\r\n#define EXTI_GPIOD 0x00000003u\r\n#if defined(GPIOE)\r\n#define EXTI_GPIOE 0x00000004u\r\n#endif /* GPIOE */\r\n#if defined(GPIOF)\r\n#define EXTI_GPIOF 0x00000005u\r\n#endif /* GPIOF */\r\n#if defined(GPIOG)\r\n#define EXTI_GPIOG 0x00000006u\r\n#endif /* GPIOG */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup EXTI_Exported_Macros EXTI Exported Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private constants --------------------------------------------------------*/\r\n/** @defgroup EXTI_Private_Constants EXTI Private Constants\r\n * @{\r\n */\r\n/**\r\n * @brief  EXTI Line property definition\r\n */\r\n#define EXTI_PROPERTY_SHIFT 24u\r\n#define EXTI_CONFIG         (0x02uL << EXTI_PROPERTY_SHIFT)\r\n#define EXTI_GPIO           ((0x04uL << EXTI_PROPERTY_SHIFT) | EXTI_CONFIG)\r\n#define EXTI_PROPERTY_MASK  (EXTI_CONFIG | EXTI_GPIO)\r\n\r\n/**\r\n * @brief  EXTI bit usage\r\n */\r\n#define EXTI_PIN_MASK 0x0000001Fu\r\n\r\n/**\r\n * @brief  EXTI Mask for interrupt & event mode\r\n */\r\n#define EXTI_MODE_MASK (EXTI_MODE_EVENT | EXTI_MODE_INTERRUPT)\r\n\r\n/**\r\n * @brief  EXTI Mask for trigger possibilities\r\n */\r\n#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING)\r\n\r\n/**\r\n * @brief  EXTI Line number\r\n */\r\n#if defined(EXTI_IMR_IM19)\r\n#define EXTI_LINE_NB 20UL\r\n#elif defined(EXTI_IMR_IM18)\r\n#define EXTI_LINE_NB 19UL\r\n#else /* EXTI_IMR_IM17 */\r\n#define EXTI_LINE_NB 18UL\r\n#endif /* EXTI_IMR_IM19 */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup EXTI_Private_Macros EXTI Private Macros\r\n * @{\r\n */\r\n#define IS_EXTI_LINE(__LINE__)                                                                                                                                             \\\r\n  ((((__LINE__) & ~(EXTI_PROPERTY_MASK | EXTI_PIN_MASK)) == 0x00u) && ((((__LINE__)&EXTI_PROPERTY_MASK) == EXTI_CONFIG) || (((__LINE__)&EXTI_PROPERTY_MASK) == EXTI_GPIO)) \\\r\n   && (((__LINE__)&EXTI_PIN_MASK) < EXTI_LINE_NB))\r\n\r\n#define IS_EXTI_MODE(__LINE__) ((((__LINE__)&EXTI_MODE_MASK) != 0x00u) && (((__LINE__) & ~EXTI_MODE_MASK) == 0x00u))\r\n\r\n#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00u)\r\n\r\n#define IS_EXTI_PENDING_EDGE(__LINE__) ((__LINE__) == EXTI_TRIGGER_RISING_FALLING)\r\n\r\n#define IS_EXTI_CONFIG_LINE(__LINE__) (((__LINE__)&EXTI_CONFIG) != 0x00u)\r\n\r\n#if defined(GPIOG)\r\n#define IS_EXTI_GPIO_PORT(__PORT__)                                                                                                                                                 \\\r\n  (((__PORT__) == EXTI_GPIOA) || ((__PORT__) == EXTI_GPIOB) || ((__PORT__) == EXTI_GPIOC) || ((__PORT__) == EXTI_GPIOD) || ((__PORT__) == EXTI_GPIOE) || ((__PORT__) == EXTI_GPIOF) \\\r\n   || ((__PORT__) == EXTI_GPIOG))\r\n#elif defined(GPIOF)\r\n#define IS_EXTI_GPIO_PORT(__PORT__) \\\r\n  (((__PORT__) == EXTI_GPIOA) || ((__PORT__) == EXTI_GPIOB) || ((__PORT__) == EXTI_GPIOC) || ((__PORT__) == EXTI_GPIOD) || ((__PORT__) == EXTI_GPIOE) || ((__PORT__) == EXTI_GPIOF))\r\n#elif defined(GPIOE)\r\n#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || ((__PORT__) == EXTI_GPIOB) || ((__PORT__) == EXTI_GPIOC) || ((__PORT__) == EXTI_GPIOD) || ((__PORT__) == EXTI_GPIOE))\r\n#else\r\n#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || ((__PORT__) == EXTI_GPIOB) || ((__PORT__) == EXTI_GPIOC) || ((__PORT__) == EXTI_GPIOD))\r\n#endif /* GPIOG */\r\n\r\n#define IS_EXTI_GPIO_PIN(__PIN__) ((__PIN__) < 16u)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @defgroup EXTI_Exported_Functions EXTI Exported Functions\r\n * @brief    EXTI Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup EXTI_Exported_Functions_Group1 Configuration functions\r\n * @brief    Configuration functions\r\n * @{\r\n */\r\n/* Configuration functions ****************************************************/\r\nHAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig);\r\nHAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig);\r\nHAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti);\r\nHAL_StatusTypeDef HAL_EXTI_RegisterCallback(EXTI_HandleTypeDef *hexti, EXTI_CallbackIDTypeDef CallbackID, void (*pPendingCbfn)(void));\r\nHAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLine);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup EXTI_Exported_Functions_Group2 IO operation functions\r\n * @brief    IO operation functions\r\n * @{\r\n */\r\n/* IO operation functions *****************************************************/\r\nvoid     HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti);\r\nuint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge);\r\nvoid     HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge);\r\nvoid     HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* STM32F1xx_HAL_EXTI_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_flash.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of Flash HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_FLASH_H\r\n#define __STM32F1xx_HAL_FLASH_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASH\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASH_Private_Constants\r\n * @{\r\n */\r\n#define FLASH_TIMEOUT_VALUE 50000U /* 50 s */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASH_Private_Macros\r\n * @{\r\n */\r\n\r\n#define IS_FLASH_TYPEPROGRAM(VALUE) (((VALUE) == FLASH_TYPEPROGRAM_HALFWORD) || ((VALUE) == FLASH_TYPEPROGRAM_WORD) || ((VALUE) == FLASH_TYPEPROGRAM_DOUBLEWORD))\r\n\r\n#if defined(FLASH_ACR_LATENCY)\r\n#define IS_FLASH_LATENCY(__LATENCY__) (((__LATENCY__) == FLASH_LATENCY_0) || ((__LATENCY__) == FLASH_LATENCY_1) || ((__LATENCY__) == FLASH_LATENCY_2))\r\n\r\n#else\r\n#define IS_FLASH_LATENCY(__LATENCY__) ((__LATENCY__) == FLASH_LATENCY_0)\r\n#endif /* FLASH_ACR_LATENCY */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup FLASH_Exported_Types FLASH Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  FLASH Procedure structure definition\r\n */\r\ntypedef enum {\r\n  FLASH_PROC_NONE              = 0U,\r\n  FLASH_PROC_PAGEERASE         = 1U,\r\n  FLASH_PROC_MASSERASE         = 2U,\r\n  FLASH_PROC_PROGRAMHALFWORD   = 3U,\r\n  FLASH_PROC_PROGRAMWORD       = 4U,\r\n  FLASH_PROC_PROGRAMDOUBLEWORD = 5U\r\n} FLASH_ProcedureTypeDef;\r\n\r\n/**\r\n * @brief  FLASH handle Structure definition\r\n */\r\ntypedef struct {\r\n  __IO FLASH_ProcedureTypeDef ProcedureOnGoing; /*!< Internal variable to indicate which procedure is ongoing or not in IT context */\r\n\r\n  __IO uint32_t DataRemaining; /*!< Internal variable to save the remaining pages to erase or half-word to program in IT context */\r\n\r\n  __IO uint32_t Address; /*!< Internal variable to save address selected for program or erase */\r\n\r\n  __IO uint64_t Data; /*!< Internal variable to save data to be programmed */\r\n\r\n  HAL_LockTypeDef Lock; /*!< FLASH locking object                */\r\n\r\n  __IO uint32_t ErrorCode; /*!< FLASH error code\r\n                                This parameter can be a value of @ref FLASH_Error_Codes  */\r\n} FLASH_ProcessTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup FLASH_Exported_Constants FLASH Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASH_Error_Codes FLASH Error Codes\r\n * @{\r\n */\r\n\r\n#define HAL_FLASH_ERROR_NONE 0x00U /*!< No error */\r\n#define HAL_FLASH_ERROR_PROG 0x01U /*!< Programming error */\r\n#define HAL_FLASH_ERROR_WRP  0x02U /*!< Write protection error */\r\n#define HAL_FLASH_ERROR_OPTV 0x04U /*!< Option validity error */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASH_Type_Program FLASH Type Program\r\n * @{\r\n */\r\n#define FLASH_TYPEPROGRAM_HALFWORD   0x01U /*!<Program a half-word (16-bit) at a specified address.*/\r\n#define FLASH_TYPEPROGRAM_WORD       0x02U /*!<Program a word (32-bit) at a specified address.*/\r\n#define FLASH_TYPEPROGRAM_DOUBLEWORD 0x03U /*!<Program a double word (64-bit) at a specified address*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(FLASH_ACR_LATENCY)\r\n/** @defgroup FLASH_Latency FLASH Latency\r\n * @{\r\n */\r\n#define FLASH_LATENCY_0 0x00000000U         /*!< FLASH Zero Latency cycle */\r\n#define FLASH_LATENCY_1 FLASH_ACR_LATENCY_0 /*!< FLASH One Latency cycle */\r\n#define FLASH_LATENCY_2 FLASH_ACR_LATENCY_1 /*!< FLASH Two Latency cycles */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#else\r\n/** @defgroup FLASH_Latency FLASH Latency\r\n * @{\r\n */\r\n#define FLASH_LATENCY_0 0x00000000U /*!< FLASH Zero Latency cycle */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* FLASH_ACR_LATENCY */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n\r\n/** @defgroup FLASH_Exported_Macros FLASH Exported Macros\r\n *  @brief macros to control FLASH features\r\n *  @{\r\n */\r\n\r\n/** @defgroup FLASH_Half_Cycle FLASH Half Cycle\r\n *  @brief macros to handle FLASH half cycle\r\n * @{\r\n */\r\n\r\n/**\r\n  * @brief  Enable the FLASH half cycle access.\r\n  * @note   half cycle access can only be used with a low-frequency clock of less than\r\n            8 MHz that can be obtained with the use of HSI or HSE but not of PLL.\r\n  * @retval None\r\n  */\r\n#define __HAL_FLASH_HALF_CYCLE_ACCESS_ENABLE() (FLASH->ACR |= FLASH_ACR_HLFCYA)\r\n\r\n/**\r\n  * @brief  Disable the FLASH half cycle access.\r\n  * @note   half cycle access can only be used with a low-frequency clock of less than\r\n            8 MHz that can be obtained with the use of HSI or HSE but not of PLL.\r\n  * @retval None\r\n  */\r\n#define __HAL_FLASH_HALF_CYCLE_ACCESS_DISABLE() (FLASH->ACR &= (~FLASH_ACR_HLFCYA))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(FLASH_ACR_LATENCY)\r\n/** @defgroup FLASH_EM_Latency FLASH Latency\r\n *  @brief macros to handle FLASH Latency\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Set the FLASH Latency.\r\n * @param  __LATENCY__ FLASH Latency\r\n *         The value of this parameter depend on device used within the same series\r\n * @retval None\r\n */\r\n#define __HAL_FLASH_SET_LATENCY(__LATENCY__) (FLASH->ACR = (FLASH->ACR & (~FLASH_ACR_LATENCY)) | (__LATENCY__))\r\n\r\n/**\r\n * @brief  Get the FLASH Latency.\r\n * @retval FLASH Latency\r\n *         The value of this parameter depend on device used within the same series\r\n */\r\n#define __HAL_FLASH_GET_LATENCY() (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* FLASH_ACR_LATENCY */\r\n/** @defgroup FLASH_Prefetch FLASH Prefetch\r\n *  @brief macros to handle FLASH Prefetch buffer\r\n * @{\r\n */\r\n/**\r\n * @brief  Enable the FLASH prefetch buffer.\r\n * @retval None\r\n */\r\n#define __HAL_FLASH_PREFETCH_BUFFER_ENABLE() (FLASH->ACR |= FLASH_ACR_PRFTBE)\r\n\r\n/**\r\n * @brief  Disable the FLASH prefetch buffer.\r\n * @retval None\r\n */\r\n#define __HAL_FLASH_PREFETCH_BUFFER_DISABLE() (FLASH->ACR &= (~FLASH_ACR_PRFTBE))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Include FLASH HAL Extended module */\r\n#include \"stm32f1xx_hal_flash_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup FLASH_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASH_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* IO operation functions *****************************************************/\r\nHAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data);\r\nHAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data);\r\n\r\n/* FLASH IRQ handler function */\r\nvoid HAL_FLASH_IRQHandler(void);\r\n/* Callbacks in non blocking modes */\r\nvoid HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue);\r\nvoid HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASH_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* Peripheral Control functions ***********************************************/\r\nHAL_StatusTypeDef HAL_FLASH_Unlock(void);\r\nHAL_StatusTypeDef HAL_FLASH_Lock(void);\r\nHAL_StatusTypeDef HAL_FLASH_OB_Unlock(void);\r\nHAL_StatusTypeDef HAL_FLASH_OB_Lock(void);\r\nvoid              HAL_FLASH_OB_Launch(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASH_Exported_Functions_Group3\r\n * @{\r\n */\r\n/* Peripheral State and Error functions ***************************************/\r\nuint32_t HAL_FLASH_GetError(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private function -------------------------------------------------*/\r\n/** @addtogroup FLASH_Private_Functions\r\n * @{\r\n */\r\nHAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout);\r\n#if defined(FLASH_BANK2_END)\r\nHAL_StatusTypeDef FLASH_WaitForLastOperationBank2(uint32_t Timeout);\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_FLASH_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_flash_ex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of Flash HAL Extended module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_FLASH_EX_H\r\n#define __STM32F1xx_HAL_FLASH_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASHEx\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASHEx_Private_Constants\r\n * @{\r\n */\r\n\r\n#define FLASH_SIZE_DATA_REGISTER 0x1FFFF7E0U\r\n#define OBR_REG_INDEX            1U\r\n#define SR_FLAG_MASK             ((uint32_t)(FLASH_SR_BSY | FLASH_SR_PGERR | FLASH_SR_WRPRTERR | FLASH_SR_EOP))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASHEx_Private_Macros\r\n * @{\r\n */\r\n\r\n#define IS_FLASH_TYPEERASE(VALUE) (((VALUE) == FLASH_TYPEERASE_PAGES) || ((VALUE) == FLASH_TYPEERASE_MASSERASE))\r\n\r\n#define IS_OPTIONBYTE(VALUE) (((VALUE) <= (OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER | OPTIONBYTE_DATA)))\r\n\r\n#define IS_WRPSTATE(VALUE) (((VALUE) == OB_WRPSTATE_DISABLE) || ((VALUE) == OB_WRPSTATE_ENABLE))\r\n\r\n#define IS_OB_RDP_LEVEL(LEVEL) (((LEVEL) == OB_RDP_LEVEL_0) || ((LEVEL) == OB_RDP_LEVEL_1))\r\n\r\n#define IS_OB_DATA_ADDRESS(ADDRESS) (((ADDRESS) == OB_DATA_ADDRESS_DATA0) || ((ADDRESS) == OB_DATA_ADDRESS_DATA1))\r\n\r\n#define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW))\r\n\r\n#define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NO_RST) || ((SOURCE) == OB_STOP_RST))\r\n\r\n#define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NO_RST) || ((SOURCE) == OB_STDBY_RST))\r\n\r\n#if defined(FLASH_BANK2_END)\r\n#define IS_OB_BOOT1(BOOT1) (((BOOT1) == OB_BOOT1_RESET) || ((BOOT1) == OB_BOOT1_SET))\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/* Low Density */\r\n#if (defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6))\r\n#define IS_FLASH_NB_PAGES(ADDRESS, NBPAGES) \\\r\n  (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x08007FFFU) : ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x08003FFFU))\r\n#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */\r\n\r\n/* Medium Density */\r\n#if (defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB))\r\n#define IS_FLASH_NB_PAGES(ADDRESS, NBPAGES)                                  \\\r\n  (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U)                      \\\r\n       ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0801FFFFU)        \\\r\n       : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x40U)               \\\r\n              ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0800FFFFU) \\\r\n              : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x08007FFFU) : ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x08003FFFU))))\r\n#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB*/\r\n\r\n/* High Density */\r\n#if (defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE))\r\n#define IS_FLASH_NB_PAGES(ADDRESS, NBPAGES)                           \\\r\n  (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x200U)              \\\r\n       ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0807FFFFU) \\\r\n       : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x180U) ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0805FFFFU) : ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0803FFFFU)))\r\n#endif /* STM32F100xE || STM32F101xE || STM32F103xE */\r\n\r\n/* XL Density */\r\n#if defined(FLASH_BANK2_END)\r\n#define IS_FLASH_NB_PAGES(ADDRESS, NBPAGES) \\\r\n  (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x400U) ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x080FFFFFU) : ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x080BFFFFU))\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/* Connectivity Line */\r\n#if (defined(STM32F105xC) || defined(STM32F107xC))\r\n#define IS_FLASH_NB_PAGES(ADDRESS, NBPAGES)                           \\\r\n  (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x100U)              \\\r\n       ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0803FFFFU) \\\r\n       : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U) ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0801FFFFU) : ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0800FFFFU)))\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#define IS_OB_WRP(PAGE) (((PAGE) != 0x0000000U))\r\n\r\n#if defined(FLASH_BANK2_END)\r\n#define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1) || ((BANK) == FLASH_BANK_2) || ((BANK) == FLASH_BANK_BOTH))\r\n#else\r\n#define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1))\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/* Low Density */\r\n#if (defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6))\r\n#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? ((ADDRESS) <= FLASH_BANK1_END) : ((ADDRESS) <= 0x08003FFFU)))\r\n\r\n#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */\r\n\r\n/* Medium Density */\r\n#if (defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB))\r\n#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)                                                      \\\r\n  (((ADDRESS) >= FLASH_BASE)                                                                   \\\r\n   && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U)                                    \\\r\n           ? ((ADDRESS) <= FLASH_BANK1_END)                                                    \\\r\n           : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x40U) ? ((ADDRESS) <= 0x0800FFFF) \\\r\n                                                                   : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? ((ADDRESS) <= 0x08007FFF) : ((ADDRESS) <= 0x08003FFFU)))))\r\n\r\n#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB*/\r\n\r\n/* High Density */\r\n#if (defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE))\r\n#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)                                                     \\\r\n  (((ADDRESS) >= FLASH_BASE)                                                                  \\\r\n   && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x200U) ? ((ADDRESS) <= FLASH_BANK1_END) \\\r\n                                                             : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x180U) ? ((ADDRESS) <= 0x0805FFFFU) : ((ADDRESS) <= 0x0803FFFFU))))\r\n\r\n#endif /* STM32F100xE || STM32F101xE || STM32F103xE */\r\n\r\n/* XL Density */\r\n#if defined(FLASH_BANK2_END)\r\n#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x400U) ? ((ADDRESS) <= FLASH_BANK2_END) : ((ADDRESS) <= 0x080BFFFFU)))\r\n\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/* Connectivity Line */\r\n#if (defined(STM32F105xC) || defined(STM32F107xC))\r\n#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)                                                     \\\r\n  (((ADDRESS) >= FLASH_BASE)                                                                  \\\r\n   && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x100U) ? ((ADDRESS) <= FLASH_BANK1_END) \\\r\n                                                             : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U) ? ((ADDRESS) <= 0x0801FFFFU) : ((ADDRESS) <= 0x0800FFFFU))))\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Exported_Types FLASHEx Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  FLASH Erase structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t TypeErase; /*!< TypeErase: Mass erase or page erase.\r\n                           This parameter can be a value of @ref FLASHEx_Type_Erase */\r\n\r\n  uint32_t Banks; /*!< Select banks to erase when Mass erase is enabled.\r\n                       This parameter must be a value of @ref FLASHEx_Banks */\r\n\r\n  uint32_t PageAddress; /*!< PageAdress: Initial FLASH page address to erase when mass erase is disabled\r\n                             This parameter must be a number between Min_Data = 0x08000000 and Max_Data = FLASH_BANKx_END\r\n                             (x = 1 or 2 depending on devices)*/\r\n\r\n  uint32_t NbPages; /*!< NbPages: Number of pagess to be erased.\r\n                         This parameter must be a value between Min_Data = 1 and Max_Data = (max number of pages - value of initial page)*/\r\n\r\n} FLASH_EraseInitTypeDef;\r\n\r\n/**\r\n * @brief  FLASH Options bytes program structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t OptionType; /*!< OptionType: Option byte to be configured.\r\n                            This parameter can be a value of @ref FLASHEx_OB_Type */\r\n\r\n  uint32_t WRPState; /*!< WRPState: Write protection activation or deactivation.\r\n                          This parameter can be a value of @ref FLASHEx_OB_WRP_State */\r\n\r\n  uint32_t WRPPage; /*!< WRPPage: specifies the page(s) to be write protected\r\n                         This parameter can be a value of @ref FLASHEx_OB_Write_Protection */\r\n\r\n  uint32_t Banks; /*!< Select banks for WRP activation/deactivation of all sectors.\r\n                       This parameter must be a value of @ref FLASHEx_Banks */\r\n\r\n  uint8_t RDPLevel; /*!< RDPLevel: Set the read protection level..\r\n                         This parameter can be a value of @ref FLASHEx_OB_Read_Protection */\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  uint8_t USERConfig; /*!< USERConfig: Program the FLASH User Option Byte:\r\n                           IWDG / STOP / STDBY / BOOT1\r\n                           This parameter can be a combination of @ref FLASHEx_OB_IWatchdog, @ref FLASHEx_OB_nRST_STOP,\r\n                           @ref FLASHEx_OB_nRST_STDBY, @ref FLASHEx_OB_BOOT1 */\r\n#else\r\n  uint8_t USERConfig; /*!< USERConfig: Program the FLASH User Option Byte:\r\n                           IWDG / STOP / STDBY\r\n                           This parameter can be a combination of @ref FLASHEx_OB_IWatchdog, @ref FLASHEx_OB_nRST_STOP,\r\n                           @ref FLASHEx_OB_nRST_STDBY */\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  uint32_t DATAAddress; /*!< DATAAddress: Address of the option byte DATA to be programmed\r\n                             This parameter can be a value of @ref FLASHEx_OB_Data_Address */\r\n\r\n  uint8_t DATAData; /*!< DATAData: Data to be stored in the option byte DATA\r\n                         This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF */\r\n} FLASH_OBProgramInitTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Exported_Constants FLASHEx Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASHEx_Constants FLASH Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASHEx_Page_Size Page Size\r\n * @{\r\n */\r\n#if (defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6) || defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB))\r\n#define FLASH_PAGE_SIZE 0x400U\r\n#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */\r\n       /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */\r\n\r\n#if (defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC))\r\n#define FLASH_PAGE_SIZE 0x800U\r\n#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */\r\n       /* STM32F101xG || STM32F103xG */\r\n       /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_Type_Erase Type Erase\r\n * @{\r\n */\r\n#define FLASH_TYPEERASE_PAGES     0x00U /*!<Pages erase only*/\r\n#define FLASH_TYPEERASE_MASSERASE 0x02U /*!<Flash mass erase activation*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_Banks Banks\r\n * @{\r\n */\r\n#if defined(FLASH_BANK2_END)\r\n#define FLASH_BANK_1    1U                                      /*!< Bank 1   */\r\n#define FLASH_BANK_2    2U                                      /*!< Bank 2   */\r\n#define FLASH_BANK_BOTH ((uint32_t)FLASH_BANK_1 | FLASH_BANK_2) /*!< Bank1 and Bank2  */\r\n\r\n#else\r\n#define FLASH_BANK_1 1U /*!< Bank 1   */\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OptionByte_Constants Option Byte Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_Type Option Bytes Type\r\n * @{\r\n */\r\n#define OPTIONBYTE_WRP  0x01U /*!<WRP option byte configuration*/\r\n#define OPTIONBYTE_RDP  0x02U /*!<RDP option byte configuration*/\r\n#define OPTIONBYTE_USER 0x04U /*!<USER option byte configuration*/\r\n#define OPTIONBYTE_DATA 0x08U /*!<DATA option byte configuration*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_WRP_State Option Byte WRP State\r\n * @{\r\n */\r\n#define OB_WRPSTATE_DISABLE 0x00U /*!<Disable the write protection of the desired pages*/\r\n#define OB_WRPSTATE_ENABLE  0x01U /*!<Enable the write protection of the desired pagess*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_Write_Protection Option Bytes Write Protection\r\n * @{\r\n */\r\n/* STM32 Low and Medium density devices */\r\n#if defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6) || defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB)\r\n#define OB_WRP_PAGES0TO3   0x00000001U /*!< Write protection of page 0 to 3 */\r\n#define OB_WRP_PAGES4TO7   0x00000002U /*!< Write protection of page 4 to 7 */\r\n#define OB_WRP_PAGES8TO11  0x00000004U /*!< Write protection of page 8 to 11 */\r\n#define OB_WRP_PAGES12TO15 0x00000008U /*!< Write protection of page 12 to 15 */\r\n#define OB_WRP_PAGES16TO19 0x00000010U /*!< Write protection of page 16 to 19 */\r\n#define OB_WRP_PAGES20TO23 0x00000020U /*!< Write protection of page 20 to 23 */\r\n#define OB_WRP_PAGES24TO27 0x00000040U /*!< Write protection of page 24 to 27 */\r\n#define OB_WRP_PAGES28TO31 0x00000080U /*!< Write protection of page 28 to 31 */\r\n#endif                                 /* STM32F101x6 || STM32F102x6 || STM32F103x6 */\r\n                                       /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */\r\n\r\n/* STM32 Medium-density devices */\r\n#if defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB)\r\n#define OB_WRP_PAGES32TO35   0x00000100U /*!< Write protection of page 32 to 35 */\r\n#define OB_WRP_PAGES36TO39   0x00000200U /*!< Write protection of page 36 to 39 */\r\n#define OB_WRP_PAGES40TO43   0x00000400U /*!< Write protection of page 40 to 43 */\r\n#define OB_WRP_PAGES44TO47   0x00000800U /*!< Write protection of page 44 to 47 */\r\n#define OB_WRP_PAGES48TO51   0x00001000U /*!< Write protection of page 48 to 51 */\r\n#define OB_WRP_PAGES52TO55   0x00002000U /*!< Write protection of page 52 to 55 */\r\n#define OB_WRP_PAGES56TO59   0x00004000U /*!< Write protection of page 56 to 59 */\r\n#define OB_WRP_PAGES60TO63   0x00008000U /*!< Write protection of page 60 to 63 */\r\n#define OB_WRP_PAGES64TO67   0x00010000U /*!< Write protection of page 64 to 67 */\r\n#define OB_WRP_PAGES68TO71   0x00020000U /*!< Write protection of page 68 to 71 */\r\n#define OB_WRP_PAGES72TO75   0x00040000U /*!< Write protection of page 72 to 75 */\r\n#define OB_WRP_PAGES76TO79   0x00080000U /*!< Write protection of page 76 to 79 */\r\n#define OB_WRP_PAGES80TO83   0x00100000U /*!< Write protection of page 80 to 83 */\r\n#define OB_WRP_PAGES84TO87   0x00200000U /*!< Write protection of page 84 to 87 */\r\n#define OB_WRP_PAGES88TO91   0x00400000U /*!< Write protection of page 88 to 91 */\r\n#define OB_WRP_PAGES92TO95   0x00800000U /*!< Write protection of page 92 to 95 */\r\n#define OB_WRP_PAGES96TO99   0x01000000U /*!< Write protection of page 96 to 99 */\r\n#define OB_WRP_PAGES100TO103 0x02000000U /*!< Write protection of page 100 to 103 */\r\n#define OB_WRP_PAGES104TO107 0x04000000U /*!< Write protection of page 104 to 107 */\r\n#define OB_WRP_PAGES108TO111 0x08000000U /*!< Write protection of page 108 to 111 */\r\n#define OB_WRP_PAGES112TO115 0x10000000U /*!< Write protection of page 112 to 115 */\r\n#define OB_WRP_PAGES116TO119 0x20000000U /*!< Write protection of page 115 to 119 */\r\n#define OB_WRP_PAGES120TO123 0x40000000U /*!< Write protection of page 120 to 123 */\r\n#define OB_WRP_PAGES124TO127 0x80000000U /*!< Write protection of page 124 to 127 */\r\n#endif                                   /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */\r\n\r\n/* STM32 High-density, XL-density and Connectivity line devices */\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define OB_WRP_PAGES0TO1    0x00000001U /*!< Write protection of page 0 TO 1 */\r\n#define OB_WRP_PAGES2TO3    0x00000002U /*!< Write protection of page 2 TO 3 */\r\n#define OB_WRP_PAGES4TO5    0x00000004U /*!< Write protection of page 4 TO 5 */\r\n#define OB_WRP_PAGES6TO7    0x00000008U /*!< Write protection of page 6 TO 7 */\r\n#define OB_WRP_PAGES8TO9    0x00000010U /*!< Write protection of page 8 TO 9 */\r\n#define OB_WRP_PAGES10TO11  0x00000020U /*!< Write protection of page 10 TO 11 */\r\n#define OB_WRP_PAGES12TO13  0x00000040U /*!< Write protection of page 12 TO 13 */\r\n#define OB_WRP_PAGES14TO15  0x00000080U /*!< Write protection of page 14 TO 15 */\r\n#define OB_WRP_PAGES16TO17  0x00000100U /*!< Write protection of page 16 TO 17 */\r\n#define OB_WRP_PAGES18TO19  0x00000200U /*!< Write protection of page 18 TO 19 */\r\n#define OB_WRP_PAGES20TO21  0x00000400U /*!< Write protection of page 20 TO 21 */\r\n#define OB_WRP_PAGES22TO23  0x00000800U /*!< Write protection of page 22 TO 23 */\r\n#define OB_WRP_PAGES24TO25  0x00001000U /*!< Write protection of page 24 TO 25 */\r\n#define OB_WRP_PAGES26TO27  0x00002000U /*!< Write protection of page 26 TO 27 */\r\n#define OB_WRP_PAGES28TO29  0x00004000U /*!< Write protection of page 28 TO 29 */\r\n#define OB_WRP_PAGES30TO31  0x00008000U /*!< Write protection of page 30 TO 31 */\r\n#define OB_WRP_PAGES32TO33  0x00010000U /*!< Write protection of page 32 TO 33 */\r\n#define OB_WRP_PAGES34TO35  0x00020000U /*!< Write protection of page 34 TO 35 */\r\n#define OB_WRP_PAGES36TO37  0x00040000U /*!< Write protection of page 36 TO 37 */\r\n#define OB_WRP_PAGES38TO39  0x00080000U /*!< Write protection of page 38 TO 39 */\r\n#define OB_WRP_PAGES40TO41  0x00100000U /*!< Write protection of page 40 TO 41 */\r\n#define OB_WRP_PAGES42TO43  0x00200000U /*!< Write protection of page 42 TO 43 */\r\n#define OB_WRP_PAGES44TO45  0x00400000U /*!< Write protection of page 44 TO 45 */\r\n#define OB_WRP_PAGES46TO47  0x00800000U /*!< Write protection of page 46 TO 47 */\r\n#define OB_WRP_PAGES48TO49  0x01000000U /*!< Write protection of page 48 TO 49 */\r\n#define OB_WRP_PAGES50TO51  0x02000000U /*!< Write protection of page 50 TO 51 */\r\n#define OB_WRP_PAGES52TO53  0x04000000U /*!< Write protection of page 52 TO 53 */\r\n#define OB_WRP_PAGES54TO55  0x08000000U /*!< Write protection of page 54 TO 55 */\r\n#define OB_WRP_PAGES56TO57  0x10000000U /*!< Write protection of page 56 TO 57 */\r\n#define OB_WRP_PAGES58TO59  0x20000000U /*!< Write protection of page 58 TO 59 */\r\n#define OB_WRP_PAGES60TO61  0x40000000U /*!< Write protection of page 60 TO 61 */\r\n#define OB_WRP_PAGES62TO127 0x80000000U /*!< Write protection of page 62 TO 127 */\r\n#define OB_WRP_PAGES62TO255 0x80000000U /*!< Write protection of page 62 TO 255 */\r\n#define OB_WRP_PAGES62TO511 0x80000000U /*!< Write protection of page 62 TO 511 */\r\n#endif                                  /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */\r\n                                        /* STM32F101xG || STM32F103xG */\r\n                                        /* STM32F105xC || STM32F107xC */\r\n\r\n#define OB_WRP_ALLPAGES 0xFFFFFFFFU /*!< Write protection of all Pages */\r\n\r\n/* Low Density */\r\n#if defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6)\r\n#define OB_WRP_PAGES0TO31MASK 0x000000FFU\r\n#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */\r\n\r\n/* Medium Density */\r\n#if defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB)\r\n#define OB_WRP_PAGES0TO31MASK   0x000000FFU\r\n#define OB_WRP_PAGES32TO63MASK  0x0000FF00U\r\n#define OB_WRP_PAGES64TO95MASK  0x00FF0000U\r\n#define OB_WRP_PAGES96TO127MASK 0xFF000000U\r\n#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB*/\r\n\r\n/* High Density */\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE)\r\n#define OB_WRP_PAGES0TO15MASK   0x000000FFU\r\n#define OB_WRP_PAGES16TO31MASK  0x0000FF00U\r\n#define OB_WRP_PAGES32TO47MASK  0x00FF0000U\r\n#define OB_WRP_PAGES48TO255MASK 0xFF000000U\r\n#endif /* STM32F100xE || STM32F101xE || STM32F103xE */\r\n\r\n/* XL Density */\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define OB_WRP_PAGES0TO15MASK   0x000000FFU\r\n#define OB_WRP_PAGES16TO31MASK  0x0000FF00U\r\n#define OB_WRP_PAGES32TO47MASK  0x00FF0000U\r\n#define OB_WRP_PAGES48TO511MASK 0xFF000000U\r\n#endif /* STM32F101xG || STM32F103xG */\r\n\r\n/* Connectivity line devices */\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define OB_WRP_PAGES0TO15MASK   0x000000FFU\r\n#define OB_WRP_PAGES16TO31MASK  0x0000FF00U\r\n#define OB_WRP_PAGES32TO47MASK  0x00FF0000U\r\n#define OB_WRP_PAGES48TO127MASK 0xFF000000U\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_Read_Protection Option Byte Read Protection\r\n * @{\r\n */\r\n#define OB_RDP_LEVEL_0 ((uint8_t)0xA5)\r\n#define OB_RDP_LEVEL_1 ((uint8_t)0x00)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_IWatchdog Option Byte IWatchdog\r\n * @{\r\n */\r\n#define OB_IWDG_SW ((uint16_t)0x0001) /*!< Software IWDG selected */\r\n#define OB_IWDG_HW ((uint16_t)0x0000) /*!< Hardware IWDG selected */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_nRST_STOP Option Byte nRST STOP\r\n * @{\r\n */\r\n#define OB_STOP_NO_RST ((uint16_t)0x0002) /*!< No reset generated when entering in STOP */\r\n#define OB_STOP_RST    ((uint16_t)0x0000) /*!< Reset generated when entering in STOP */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_nRST_STDBY Option Byte nRST STDBY\r\n * @{\r\n */\r\n#define OB_STDBY_NO_RST ((uint16_t)0x0004) /*!< No reset generated when entering in STANDBY */\r\n#define OB_STDBY_RST    ((uint16_t)0x0000) /*!< Reset generated when entering in STANDBY */\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(FLASH_BANK2_END)\r\n/** @defgroup FLASHEx_OB_BOOT1 Option Byte BOOT1\r\n * @{\r\n */\r\n#define OB_BOOT1_RESET ((uint16_t)0x0000) /*!< BOOT1 Reset */\r\n#define OB_BOOT1_SET   ((uint16_t)0x0008) /*!< BOOT1 Set */\r\n/**\r\n * @}\r\n */\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/** @defgroup FLASHEx_OB_Data_Address  Option Byte Data Address\r\n * @{\r\n */\r\n#define OB_DATA_ADDRESS_DATA0 0x1FFFF804U\r\n#define OB_DATA_ADDRESS_DATA1 0x1FFFF806U\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASHEx_Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASH_Flag_definition Flag definition\r\n * @brief Flag definition\r\n * @{\r\n */\r\n#if defined(FLASH_BANK2_END)\r\n#define FLASH_FLAG_BSY    FLASH_FLAG_BSY_BANK1    /*!< FLASH Bank1 Busy flag                   */\r\n#define FLASH_FLAG_PGERR  FLASH_FLAG_PGERR_BANK1  /*!< FLASH Bank1 Programming error flag      */\r\n#define FLASH_FLAG_WRPERR FLASH_FLAG_WRPERR_BANK1 /*!< FLASH Bank1 Write protected error flag  */\r\n#define FLASH_FLAG_EOP    FLASH_FLAG_EOP_BANK1    /*!< FLASH Bank1 End of Operation flag       */\r\n\r\n#define FLASH_FLAG_BSY_BANK1    FLASH_SR_BSY      /*!< FLASH Bank1 Busy flag                   */\r\n#define FLASH_FLAG_PGERR_BANK1  FLASH_SR_PGERR    /*!< FLASH Bank1 Programming error flag      */\r\n#define FLASH_FLAG_WRPERR_BANK1 FLASH_SR_WRPRTERR /*!< FLASH Bank1 Write protected error flag  */\r\n#define FLASH_FLAG_EOP_BANK1    FLASH_SR_EOP      /*!< FLASH Bank1 End of Operation flag       */\r\n\r\n#define FLASH_FLAG_BSY_BANK2    (FLASH_SR2_BSY << 16U)      /*!< FLASH Bank2 Busy flag                   */\r\n#define FLASH_FLAG_PGERR_BANK2  (FLASH_SR2_PGERR << 16U)    /*!< FLASH Bank2 Programming error flag      */\r\n#define FLASH_FLAG_WRPERR_BANK2 (FLASH_SR2_WRPRTERR << 16U) /*!< FLASH Bank2 Write protected error flag  */\r\n#define FLASH_FLAG_EOP_BANK2    (FLASH_SR2_EOP << 16U)      /*!< FLASH Bank2 End of Operation flag       */\r\n\r\n#else\r\n\r\n#define FLASH_FLAG_BSY    FLASH_SR_BSY      /*!< FLASH Busy flag                          */\r\n#define FLASH_FLAG_PGERR  FLASH_SR_PGERR    /*!< FLASH Programming error flag             */\r\n#define FLASH_FLAG_WRPERR FLASH_SR_WRPRTERR /*!< FLASH Write protected error flag         */\r\n#define FLASH_FLAG_EOP    FLASH_SR_EOP      /*!< FLASH End of Operation flag              */\r\n\r\n#endif\r\n#define FLASH_FLAG_OPTVERR ((OBR_REG_INDEX << 8U | FLASH_OBR_OPTERR)) /*!< Option Byte Error        */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASH_Interrupt_definition Interrupt definition\r\n * @brief FLASH Interrupt definition\r\n * @{\r\n */\r\n#if defined(FLASH_BANK2_END)\r\n#define FLASH_IT_EOP FLASH_IT_EOP_BANK1 /*!< End of FLASH Operation Interrupt source Bank1 */\r\n#define FLASH_IT_ERR FLASH_IT_ERR_BANK1 /*!< Error Interrupt source Bank1                  */\r\n\r\n#define FLASH_IT_EOP_BANK1 FLASH_CR_EOPIE /*!< End of FLASH Operation Interrupt source Bank1 */\r\n#define FLASH_IT_ERR_BANK1 FLASH_CR_ERRIE /*!< Error Interrupt source Bank1                  */\r\n\r\n#define FLASH_IT_EOP_BANK2 (FLASH_CR2_EOPIE << 16U) /*!< End of FLASH Operation Interrupt source Bank2 */\r\n#define FLASH_IT_ERR_BANK2 (FLASH_CR2_ERRIE << 16U) /*!< Error Interrupt source Bank2                  */\r\n\r\n#else\r\n\r\n#define FLASH_IT_EOP FLASH_CR_EOPIE /*!< End of FLASH Operation Interrupt source */\r\n#define FLASH_IT_ERR FLASH_CR_ERRIE /*!< Error Interrupt source                  */\r\n\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Exported_Macros FLASHEx Exported Macros\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASH_Interrupt Interrupt\r\n *  @brief macros to handle FLASH interrupts\r\n * @{\r\n */\r\n\r\n#if defined(FLASH_BANK2_END)\r\n/**\r\n * @brief  Enable the specified FLASH interrupt.\r\n * @param  __INTERRUPT__  FLASH interrupt\r\n *     This parameter can be any combination of the following values:\r\n *     @arg @ref FLASH_IT_EOP_BANK1 End of FLASH Operation Interrupt on bank1\r\n *     @arg @ref FLASH_IT_ERR_BANK1 Error Interrupt on bank1\r\n *     @arg @ref FLASH_IT_EOP_BANK2 End of FLASH Operation Interrupt on bank2\r\n *     @arg @ref FLASH_IT_ERR_BANK2 Error Interrupt on bank2\r\n * @retval none\r\n */\r\n#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__)           \\\r\n  do {                                                 \\\r\n    /* Enable Bank1 IT */                              \\\r\n    SET_BIT(FLASH->CR, ((__INTERRUPT__)&0x0000FFFFU)); \\\r\n    /* Enable Bank2 IT */                              \\\r\n    SET_BIT(FLASH->CR2, ((__INTERRUPT__) >> 16U));     \\\r\n  } while (0U)\r\n\r\n/**\r\n * @brief  Disable the specified FLASH interrupt.\r\n * @param  __INTERRUPT__  FLASH interrupt\r\n *     This parameter can be any combination of the following values:\r\n *     @arg @ref FLASH_IT_EOP_BANK1 End of FLASH Operation Interrupt on bank1\r\n *     @arg @ref FLASH_IT_ERR_BANK1 Error Interrupt on bank1\r\n *     @arg @ref FLASH_IT_EOP_BANK2 End of FLASH Operation Interrupt on bank2\r\n *     @arg @ref FLASH_IT_ERR_BANK2 Error Interrupt on bank2\r\n * @retval none\r\n */\r\n#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__)            \\\r\n  do {                                                   \\\r\n    /* Disable Bank1 IT */                               \\\r\n    CLEAR_BIT(FLASH->CR, ((__INTERRUPT__)&0x0000FFFFU)); \\\r\n    /* Disable Bank2 IT */                               \\\r\n    CLEAR_BIT(FLASH->CR2, ((__INTERRUPT__) >> 16U));     \\\r\n  } while (0U)\r\n\r\n/**\r\n * @brief  Get the specified FLASH flag status.\r\n * @param  __FLAG__ specifies the FLASH flag to check.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref FLASH_FLAG_EOP_BANK1    FLASH End of Operation flag on bank1\r\n *            @arg @ref FLASH_FLAG_WRPERR_BANK1 FLASH Write protected error flag on bank1\r\n *            @arg @ref FLASH_FLAG_PGERR_BANK1  FLASH Programming error flag on bank1\r\n *            @arg @ref FLASH_FLAG_BSY_BANK1    FLASH Busy flag on bank1\r\n *            @arg @ref FLASH_FLAG_EOP_BANK2    FLASH End of Operation flag on bank2\r\n *            @arg @ref FLASH_FLAG_WRPERR_BANK2 FLASH Write protected error flag on bank2\r\n *            @arg @ref FLASH_FLAG_PGERR_BANK2  FLASH Programming error flag on bank2\r\n *            @arg @ref FLASH_FLAG_BSY_BANK2    FLASH Busy flag on bank2\r\n *            @arg @ref FLASH_FLAG_OPTVERR  Loaded OB and its complement do not match\r\n * @retval The new state of __FLAG__ (SET or RESET).\r\n */\r\n#define __HAL_FLASH_GET_FLAG(__FLAG__) \\\r\n  (((__FLAG__) == FLASH_FLAG_OPTVERR) ? (FLASH->OBR & FLASH_OBR_OPTERR) : ((((__FLAG__)&SR_FLAG_MASK) != RESET) ? (FLASH->SR & ((__FLAG__)&SR_FLAG_MASK)) : (FLASH->SR2 & ((__FLAG__) >> 16U))))\r\n\r\n/**\r\n * @brief  Clear the specified FLASH flag.\r\n * @param  __FLAG__ specifies the FLASH flags to clear.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg @ref FLASH_FLAG_EOP_BANK1    FLASH End of Operation flag on bank1\r\n *            @arg @ref FLASH_FLAG_WRPERR_BANK1 FLASH Write protected error flag on bank1\r\n *            @arg @ref FLASH_FLAG_PGERR_BANK1  FLASH Programming error flag on bank1\r\n *            @arg @ref FLASH_FLAG_BSY_BANK1    FLASH Busy flag on bank1\r\n *            @arg @ref FLASH_FLAG_EOP_BANK2    FLASH End of Operation flag on bank2\r\n *            @arg @ref FLASH_FLAG_WRPERR_BANK2 FLASH Write protected error flag on bank2\r\n *            @arg @ref FLASH_FLAG_PGERR_BANK2  FLASH Programming error flag on bank2\r\n *            @arg @ref FLASH_FLAG_BSY_BANK2    FLASH Busy flag on bank2\r\n *            @arg @ref FLASH_FLAG_OPTVERR  Loaded OB and its complement do not match\r\n * @retval none\r\n */\r\n#define __HAL_FLASH_CLEAR_FLAG(__FLAG__)        \\\r\n  do {                                          \\\r\n    /* Clear FLASH_FLAG_OPTVERR flag */         \\\r\n    if ((__FLAG__) == FLASH_FLAG_OPTVERR) {     \\\r\n      CLEAR_BIT(FLASH->OBR, FLASH_OBR_OPTERR);  \\\r\n    } else {                                    \\\r\n      /* Clear Flag in Bank1 */                 \\\r\n      if (((__FLAG__)&SR_FLAG_MASK) != RESET) { \\\r\n        FLASH->SR = ((__FLAG__)&SR_FLAG_MASK);  \\\r\n      }                                         \\\r\n      /* Clear Flag in Bank2 */                 \\\r\n      if (((__FLAG__) >> 16U) != RESET) {       \\\r\n        FLASH->SR2 = ((__FLAG__) >> 16U);       \\\r\n      }                                         \\\r\n    }                                           \\\r\n  } while (0U)\r\n#else\r\n                      /**\r\n                       * @brief  Enable the specified FLASH interrupt.\r\n                       * @param  __INTERRUPT__  FLASH interrupt\r\n                       *         This parameter can be any combination of the following values:\r\n                       *     @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt\r\n                       *     @arg @ref FLASH_IT_ERR Error Interrupt\r\n                       * @retval none\r\n                       */\r\n#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__)  (FLASH->CR |= (__INTERRUPT__))\r\n\r\n/**\r\n * @brief  Disable the specified FLASH interrupt.\r\n * @param  __INTERRUPT__  FLASH interrupt\r\n *         This parameter can be any combination of the following values:\r\n *     @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt\r\n *     @arg @ref FLASH_IT_ERR Error Interrupt\r\n * @retval none\r\n */\r\n#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__) (FLASH->CR &= ~(__INTERRUPT__))\r\n\r\n/**\r\n * @brief  Get the specified FLASH flag status.\r\n * @param  __FLAG__ specifies the FLASH flag to check.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref FLASH_FLAG_EOP    FLASH End of Operation flag\r\n *            @arg @ref FLASH_FLAG_WRPERR FLASH Write protected error flag\r\n *            @arg @ref FLASH_FLAG_PGERR  FLASH Programming error flag\r\n *            @arg @ref FLASH_FLAG_BSY    FLASH Busy flag\r\n *            @arg @ref FLASH_FLAG_OPTVERR  Loaded OB and its complement do not match\r\n * @retval The new state of __FLAG__ (SET or RESET).\r\n */\r\n#define __HAL_FLASH_GET_FLAG(__FLAG__)        (((__FLAG__) == FLASH_FLAG_OPTVERR) ? (FLASH->OBR & FLASH_OBR_OPTERR) : (FLASH->SR & (__FLAG__)))\r\n/**\r\n * @brief  Clear the specified FLASH flag.\r\n * @param  __FLAG__ specifies the FLASH flags to clear.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg @ref FLASH_FLAG_EOP    FLASH End of Operation flag\r\n *            @arg @ref FLASH_FLAG_WRPERR FLASH Write protected error flag\r\n *            @arg @ref FLASH_FLAG_PGERR  FLASH Programming error flag\r\n *            @arg @ref FLASH_FLAG_OPTVERR  Loaded OB and its complement do not match\r\n * @retval none\r\n */\r\n#define __HAL_FLASH_CLEAR_FLAG(__FLAG__)       \\\r\n  do {                                         \\\r\n    /* Clear FLASH_FLAG_OPTVERR flag */        \\\r\n    if ((__FLAG__) == FLASH_FLAG_OPTVERR) {    \\\r\n      CLEAR_BIT(FLASH->OBR, FLASH_OBR_OPTERR); \\\r\n    } else {                                   \\\r\n      /* Clear Flag in Bank1 */                \\\r\n      FLASH->SR = (__FLAG__);                  \\\r\n    }                                          \\\r\n  } while (0U)\r\n\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup FLASHEx_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASHEx_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* IO operation functions *****************************************************/\r\nHAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError);\r\nHAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASHEx_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* Peripheral Control functions ***********************************************/\r\nHAL_StatusTypeDef HAL_FLASHEx_OBErase(void);\r\nHAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit);\r\nvoid              HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit);\r\nuint32_t          HAL_FLASHEx_OBGetUserData(uint32_t DATAAdress);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_FLASH_EX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_gpio.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of GPIO HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef STM32F1xx_HAL_GPIO_H\r\n#define STM32F1xx_HAL_GPIO_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup GPIO\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup GPIO_Exported_Types GPIO Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief GPIO Init structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t Pin; /*!< Specifies the GPIO pins to be configured.\r\n                     This parameter can be any value of @ref GPIO_pins_define */\r\n\r\n  uint32_t Mode; /*!< Specifies the operating mode for the selected pins.\r\n                      This parameter can be a value of @ref GPIO_mode_define */\r\n\r\n  uint32_t Pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.\r\n                      This parameter can be a value of @ref GPIO_pull_define */\r\n\r\n  uint32_t Speed; /*!< Specifies the speed for the selected pins.\r\n                       This parameter can be a value of @ref GPIO_speed_define */\r\n} GPIO_InitTypeDef;\r\n\r\n/**\r\n * @brief  GPIO Bit SET and Bit RESET enumeration\r\n */\r\ntypedef enum { GPIO_PIN_RESET = 0u, GPIO_PIN_SET } GPIO_PinState;\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup GPIO_Exported_Constants GPIO Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIO_pins_define GPIO pins define\r\n * @{\r\n */\r\n#define GPIO_PIN_0   ((uint16_t)0x0001) /* Pin 0 selected    */\r\n#define GPIO_PIN_1   ((uint16_t)0x0002) /* Pin 1 selected    */\r\n#define GPIO_PIN_2   ((uint16_t)0x0004) /* Pin 2 selected    */\r\n#define GPIO_PIN_3   ((uint16_t)0x0008) /* Pin 3 selected    */\r\n#define GPIO_PIN_4   ((uint16_t)0x0010) /* Pin 4 selected    */\r\n#define GPIO_PIN_5   ((uint16_t)0x0020) /* Pin 5 selected    */\r\n#define GPIO_PIN_6   ((uint16_t)0x0040) /* Pin 6 selected    */\r\n#define GPIO_PIN_7   ((uint16_t)0x0080) /* Pin 7 selected    */\r\n#define GPIO_PIN_8   ((uint16_t)0x0100) /* Pin 8 selected    */\r\n#define GPIO_PIN_9   ((uint16_t)0x0200) /* Pin 9 selected    */\r\n#define GPIO_PIN_10  ((uint16_t)0x0400) /* Pin 10 selected   */\r\n#define GPIO_PIN_11  ((uint16_t)0x0800) /* Pin 11 selected   */\r\n#define GPIO_PIN_12  ((uint16_t)0x1000) /* Pin 12 selected   */\r\n#define GPIO_PIN_13  ((uint16_t)0x2000) /* Pin 13 selected   */\r\n#define GPIO_PIN_14  ((uint16_t)0x4000) /* Pin 14 selected   */\r\n#define GPIO_PIN_15  ((uint16_t)0x8000) /* Pin 15 selected   */\r\n#define GPIO_PIN_All ((uint16_t)0xFFFF) /* All pins selected */\r\n\r\n#define GPIO_PIN_MASK 0x0000FFFFu /* PIN mask for assert test */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIO_mode_define GPIO mode define\r\n * @brief GPIO Configuration Mode\r\n *        Elements values convention: 0xX0yz00YZ\r\n *           - X  : GPIO mode or EXTI Mode\r\n *           - y  : External IT or Event trigger detection\r\n *           - z  : IO configuration on External IT or Event\r\n *           - Y  : Output type (Push Pull or Open Drain)\r\n *           - Z  : IO Direction mode (Input, Output, Alternate or Analog)\r\n * @{\r\n */\r\n#define GPIO_MODE_INPUT     0x00000000u     /*!< Input Floating Mode                   */\r\n#define GPIO_MODE_OUTPUT_PP 0x00000001u     /*!< Output Push Pull Mode                 */\r\n#define GPIO_MODE_OUTPUT_OD 0x00000011u     /*!< Output Open Drain Mode                */\r\n#define GPIO_MODE_AF_PP     0x00000002u     /*!< Alternate Function Push Pull Mode     */\r\n#define GPIO_MODE_AF_OD     0x00000012u     /*!< Alternate Function Open Drain Mode    */\r\n#define GPIO_MODE_AF_INPUT  GPIO_MODE_INPUT /*!< Alternate Function Input Mode         */\r\n\r\n#define GPIO_MODE_ANALOG 0x00000003u /*!< Analog Mode  */\r\n\r\n#define GPIO_MODE_IT_RISING         0x10110000u /*!< External Interrupt Mode with Rising edge trigger detection          */\r\n#define GPIO_MODE_IT_FALLING        0x10210000u /*!< External Interrupt Mode with Falling edge trigger detection         */\r\n#define GPIO_MODE_IT_RISING_FALLING 0x10310000u /*!< External Interrupt Mode with Rising/Falling edge trigger detection  */\r\n\r\n#define GPIO_MODE_EVT_RISING         0x10120000u /*!< External Event Mode with Rising edge trigger detection               */\r\n#define GPIO_MODE_EVT_FALLING        0x10220000u /*!< External Event Mode with Falling edge trigger detection              */\r\n#define GPIO_MODE_EVT_RISING_FALLING 0x10320000u /*!< External Event Mode with Rising/Falling edge trigger detection       */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIO_speed_define  GPIO speed define\r\n * @brief GPIO Output Maximum frequency\r\n * @{\r\n */\r\n#define GPIO_SPEED_FREQ_LOW    (GPIO_CRL_MODE0_1) /*!< Low speed */\r\n#define GPIO_SPEED_FREQ_MEDIUM (GPIO_CRL_MODE0_0) /*!< Medium speed */\r\n#define GPIO_SPEED_FREQ_HIGH   (GPIO_CRL_MODE0)   /*!< High speed */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIO_pull_define GPIO pull define\r\n * @brief GPIO Pull-Up or Pull-Down Activation\r\n * @{\r\n */\r\n#define GPIO_NOPULL   0x00000000u /*!< No Pull-up or Pull-down activation  */\r\n#define GPIO_PULLUP   0x00000001u /*!< Pull-up activation                  */\r\n#define GPIO_PULLDOWN 0x00000002u /*!< Pull-down activation                */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup GPIO_Exported_Macros GPIO Exported Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Checks whether the specified EXTI line flag is set or not.\r\n * @param  __EXTI_LINE__: specifies the EXTI line flag to check.\r\n *         This parameter can be GPIO_PIN_x where x can be(0..15)\r\n * @retval The new state of __EXTI_LINE__ (SET or RESET).\r\n */\r\n#define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__))\r\n\r\n/**\r\n * @brief  Clears the EXTI's line pending flags.\r\n * @param  __EXTI_LINE__: specifies the EXTI lines flags to clear.\r\n *         This parameter can be any combination of GPIO_PIN_x where x can be (0..15)\r\n * @retval None\r\n */\r\n#define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__))\r\n\r\n/**\r\n * @brief  Checks whether the specified EXTI line is asserted or not.\r\n * @param  __EXTI_LINE__: specifies the EXTI line to check.\r\n *          This parameter can be GPIO_PIN_x where x can be(0..15)\r\n * @retval The new state of __EXTI_LINE__ (SET or RESET).\r\n */\r\n#define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__))\r\n\r\n/**\r\n * @brief  Clears the EXTI's line pending bits.\r\n * @param  __EXTI_LINE__: specifies the EXTI lines to clear.\r\n *          This parameter can be any combination of GPIO_PIN_x where x can be (0..15)\r\n * @retval None\r\n */\r\n#define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__))\r\n\r\n/**\r\n * @brief  Generates a Software interrupt on selected EXTI line.\r\n * @param  __EXTI_LINE__: specifies the EXTI line to check.\r\n *          This parameter can be GPIO_PIN_x where x can be(0..15)\r\n * @retval None\r\n */\r\n#define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER |= (__EXTI_LINE__))\r\n/**\r\n * @}\r\n */\r\n\r\n/* Include GPIO HAL Extension module */\r\n#include \"stm32f1xx_hal_gpio_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup GPIO_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup GPIO_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* Initialization and de-initialization functions *****************************/\r\nvoid HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);\r\nvoid HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup GPIO_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* IO operation functions *****************************************************/\r\nGPIO_PinState     HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);\r\nvoid              HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);\r\nvoid              HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);\r\nHAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);\r\nvoid              HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);\r\nvoid              HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* Private types -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private constants ---------------------------------------------------------*/\r\n/** @defgroup GPIO_Private_Constants GPIO Private Constants\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup GPIO_Private_Macros GPIO Private Macros\r\n * @{\r\n */\r\n#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))\r\n#define IS_GPIO_PIN(PIN)           (((((uint32_t)PIN) & GPIO_PIN_MASK) != 0x00u) && ((((uint32_t)PIN) & ~GPIO_PIN_MASK) == 0x00u))\r\n#define IS_GPIO_MODE(MODE)                                                                                                                                                                             \\\r\n  (((MODE) == GPIO_MODE_INPUT) || ((MODE) == GPIO_MODE_OUTPUT_PP) || ((MODE) == GPIO_MODE_OUTPUT_OD) || ((MODE) == GPIO_MODE_AF_PP) || ((MODE) == GPIO_MODE_AF_OD) || ((MODE) == GPIO_MODE_IT_RISING)  \\\r\n   || ((MODE) == GPIO_MODE_IT_FALLING) || ((MODE) == GPIO_MODE_IT_RISING_FALLING) || ((MODE) == GPIO_MODE_EVT_RISING) || ((MODE) == GPIO_MODE_EVT_FALLING) || ((MODE) == GPIO_MODE_EVT_RISING_FALLING) \\\r\n   || ((MODE) == GPIO_MODE_ANALOG))\r\n#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_SPEED_FREQ_LOW) || ((SPEED) == GPIO_SPEED_FREQ_MEDIUM) || ((SPEED) == GPIO_SPEED_FREQ_HIGH))\r\n#define IS_GPIO_PULL(PULL)   (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || ((PULL) == GPIO_PULLDOWN))\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private functions ---------------------------------------------------------*/\r\n/** @defgroup GPIO_Private_Functions GPIO Private Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* STM32F1xx_HAL_GPIO_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_gpio_ex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of GPIO HAL Extension module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef STM32F1xx_HAL_GPIO_EX_H\r\n#define STM32F1xx_HAL_GPIO_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIOEx GPIOEx\r\n * @{\r\n */\r\n/* Exported types ------------------------------------------------------------*/\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup GPIOEx_Exported_Constants GPIOEx Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIOEx_EVENTOUT EVENTOUT Cortex Configuration\r\n * @brief This section propose definition to use the Cortex EVENTOUT signal.\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIOEx_EVENTOUT_PIN EVENTOUT Pin\r\n * @{\r\n */\r\n\r\n#define AFIO_EVENTOUT_PIN_0  AFIO_EVCR_PIN_PX0  /*!< EVENTOUT on pin 0 */\r\n#define AFIO_EVENTOUT_PIN_1  AFIO_EVCR_PIN_PX1  /*!< EVENTOUT on pin 1 */\r\n#define AFIO_EVENTOUT_PIN_2  AFIO_EVCR_PIN_PX2  /*!< EVENTOUT on pin 2 */\r\n#define AFIO_EVENTOUT_PIN_3  AFIO_EVCR_PIN_PX3  /*!< EVENTOUT on pin 3 */\r\n#define AFIO_EVENTOUT_PIN_4  AFIO_EVCR_PIN_PX4  /*!< EVENTOUT on pin 4 */\r\n#define AFIO_EVENTOUT_PIN_5  AFIO_EVCR_PIN_PX5  /*!< EVENTOUT on pin 5 */\r\n#define AFIO_EVENTOUT_PIN_6  AFIO_EVCR_PIN_PX6  /*!< EVENTOUT on pin 6 */\r\n#define AFIO_EVENTOUT_PIN_7  AFIO_EVCR_PIN_PX7  /*!< EVENTOUT on pin 7 */\r\n#define AFIO_EVENTOUT_PIN_8  AFIO_EVCR_PIN_PX8  /*!< EVENTOUT on pin 8 */\r\n#define AFIO_EVENTOUT_PIN_9  AFIO_EVCR_PIN_PX9  /*!< EVENTOUT on pin 9 */\r\n#define AFIO_EVENTOUT_PIN_10 AFIO_EVCR_PIN_PX10 /*!< EVENTOUT on pin 10 */\r\n#define AFIO_EVENTOUT_PIN_11 AFIO_EVCR_PIN_PX11 /*!< EVENTOUT on pin 11 */\r\n#define AFIO_EVENTOUT_PIN_12 AFIO_EVCR_PIN_PX12 /*!< EVENTOUT on pin 12 */\r\n#define AFIO_EVENTOUT_PIN_13 AFIO_EVCR_PIN_PX13 /*!< EVENTOUT on pin 13 */\r\n#define AFIO_EVENTOUT_PIN_14 AFIO_EVCR_PIN_PX14 /*!< EVENTOUT on pin 14 */\r\n#define AFIO_EVENTOUT_PIN_15 AFIO_EVCR_PIN_PX15 /*!< EVENTOUT on pin 15 */\r\n\r\n#define IS_AFIO_EVENTOUT_PIN(__PIN__)                                                                                                                                                                 \\\r\n  (((__PIN__) == AFIO_EVENTOUT_PIN_0) || ((__PIN__) == AFIO_EVENTOUT_PIN_1) || ((__PIN__) == AFIO_EVENTOUT_PIN_2) || ((__PIN__) == AFIO_EVENTOUT_PIN_3) || ((__PIN__) == AFIO_EVENTOUT_PIN_4)         \\\r\n   || ((__PIN__) == AFIO_EVENTOUT_PIN_5) || ((__PIN__) == AFIO_EVENTOUT_PIN_6) || ((__PIN__) == AFIO_EVENTOUT_PIN_7) || ((__PIN__) == AFIO_EVENTOUT_PIN_8) || ((__PIN__) == AFIO_EVENTOUT_PIN_9)      \\\r\n   || ((__PIN__) == AFIO_EVENTOUT_PIN_10) || ((__PIN__) == AFIO_EVENTOUT_PIN_11) || ((__PIN__) == AFIO_EVENTOUT_PIN_12) || ((__PIN__) == AFIO_EVENTOUT_PIN_13) || ((__PIN__) == AFIO_EVENTOUT_PIN_14) \\\r\n   || ((__PIN__) == AFIO_EVENTOUT_PIN_15))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIOEx_EVENTOUT_PORT EVENTOUT Port\r\n * @{\r\n */\r\n\r\n#define AFIO_EVENTOUT_PORT_A AFIO_EVCR_PORT_PA /*!< EVENTOUT on port A */\r\n#define AFIO_EVENTOUT_PORT_B AFIO_EVCR_PORT_PB /*!< EVENTOUT on port B */\r\n#define AFIO_EVENTOUT_PORT_C AFIO_EVCR_PORT_PC /*!< EVENTOUT on port C */\r\n#define AFIO_EVENTOUT_PORT_D AFIO_EVCR_PORT_PD /*!< EVENTOUT on port D */\r\n#define AFIO_EVENTOUT_PORT_E AFIO_EVCR_PORT_PE /*!< EVENTOUT on port E */\r\n\r\n#define IS_AFIO_EVENTOUT_PORT(__PORT__) \\\r\n  (((__PORT__) == AFIO_EVENTOUT_PORT_A) || ((__PORT__) == AFIO_EVENTOUT_PORT_B) || ((__PORT__) == AFIO_EVENTOUT_PORT_C) || ((__PORT__) == AFIO_EVENTOUT_PORT_D) || ((__PORT__) == AFIO_EVENTOUT_PORT_E))\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIOEx_AFIO_AF_REMAPPING Alternate Function Remapping\r\n * @brief This section propose definition to remap the alternate function to some other port/pins.\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief Enable the remapping of SPI1 alternate function NSS, SCK, MISO and MOSI.\r\n * @note  ENABLE: Remap     (NSS/PA15, SCK/PB3, MISO/PB4, MOSI/PB5)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SPI1_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_SPI1_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of SPI1 alternate function NSS, SCK, MISO and MOSI.\r\n * @note  DISABLE: No remap (NSS/PA4,  SCK/PA5, MISO/PA6, MOSI/PA7)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SPI1_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_SPI1_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of I2C1 alternate function SCL and SDA.\r\n * @note  ENABLE: Remap     (SCL/PB8, SDA/PB9)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_I2C1_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_I2C1_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of I2C1 alternate function SCL and SDA.\r\n * @note  DISABLE: No remap (SCL/PB6, SDA/PB7)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_I2C1_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_I2C1_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of USART1 alternate function TX and RX.\r\n * @note  ENABLE: Remap     (TX/PB6, RX/PB7)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART1_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_USART1_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of USART1 alternate function TX and RX.\r\n * @note  DISABLE: No remap (TX/PA9, RX/PA10)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART1_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_USART1_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of USART2 alternate function CTS, RTS, CK, TX and RX.\r\n * @note  ENABLE: Remap     (CTS/PD3, RTS/PD4, TX/PD5, RX/PD6, CK/PD7)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART2_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_USART2_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of USART2 alternate function CTS, RTS, CK, TX and RX.\r\n * @note  DISABLE: No remap (CTS/PA0, RTS/PA1, TX/PA2, RX/PA3, CK/PA4)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART2_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_USART2_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX.\r\n * @note  ENABLE: Full remap     (TX/PD8,  RX/PD9,  CK/PD10, CTS/PD11, RTS/PD12)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART3_ENABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_USART3_REMAP_FULLREMAP, AFIO_MAPR_USART3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX.\r\n * @note  PARTIAL: Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART3_PARTIAL() AFIO_REMAP_PARTIAL(AFIO_MAPR_USART3_REMAP_PARTIALREMAP, AFIO_MAPR_USART3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX.\r\n * @note  DISABLE: No remap      (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART3_DISABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_USART3_REMAP_NOREMAP, AFIO_MAPR_USART3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN)\r\n * @note  ENABLE: Full remap     (ETR/PE7,  CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8,  CH2N/PE10, CH3N/PE12)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM1_ENABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM1_REMAP_FULLREMAP, AFIO_MAPR_TIM1_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN)\r\n * @note  PARTIAL: Partial remap (ETR/PA12, CH1/PA8, CH2/PA9,  CH3/PA10, CH4/PA11, BKIN/PA6,  CH1N/PA7,  CH2N/PB0,  CH3N/PB1)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM1_PARTIAL() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM1_REMAP_PARTIALREMAP, AFIO_MAPR_TIM1_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN)\r\n * @note  DISABLE: No remap      (ETR/PA12, CH1/PA8, CH2/PA9,  CH3/PA10, CH4/PA11, BKIN/PB12, CH1N/PB13, CH2N/PB14, CH3N/PB15)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM1_DISABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM1_REMAP_NOREMAP, AFIO_MAPR_TIM1_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR)\r\n * @note  ENABLE: Full remap       (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM2_ENABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM2_REMAP_FULLREMAP, AFIO_MAPR_TIM2_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR)\r\n * @note  PARTIAL_2: Partial remap (CH1/ETR/PA0,  CH2/PA1, CH3/PB10, CH4/PB11)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM2_PARTIAL_2() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2, AFIO_MAPR_TIM2_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR)\r\n * @note  PARTIAL_1: Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2,  CH4/PA3)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM2_PARTIAL_1() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1, AFIO_MAPR_TIM2_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR)\r\n * @note  DISABLE: No remap        (CH1/ETR/PA0,  CH2/PA1, CH3/PA2,  CH4/PA3)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM2_DISABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM2_REMAP_NOREMAP, AFIO_MAPR_TIM2_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM3 alternate function channels 1 to 4\r\n * @note  ENABLE: Full remap     (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9)\r\n * @note  TIM3_ETR on PE0 is not re-mapped.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM3_ENABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM3_REMAP_FULLREMAP, AFIO_MAPR_TIM3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM3 alternate function channels 1 to 4\r\n * @note  PARTIAL: Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1)\r\n * @note  TIM3_ETR on PE0 is not re-mapped.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM3_PARTIAL() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM3_REMAP_PARTIALREMAP, AFIO_MAPR_TIM3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM3 alternate function channels 1 to 4\r\n * @note  DISABLE: No remap      (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1)\r\n * @note  TIM3_ETR on PE0 is not re-mapped.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM3_DISABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM3_REMAP_NOREMAP, AFIO_MAPR_TIM3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM4 alternate function channels 1 to 4.\r\n * @note  ENABLE: Full remap (TIM4_CH1/PD12, TIM4_CH2/PD13, TIM4_CH3/PD14, TIM4_CH4/PD15)\r\n * @note  TIM4_ETR on PE0 is not re-mapped.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM4_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_TIM4_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM4 alternate function channels 1 to 4.\r\n * @note  DISABLE: No remap  (TIM4_CH1/PB6,  TIM4_CH2/PB7,  TIM4_CH3/PB8,  TIM4_CH4/PB9)\r\n * @note  TIM4_ETR on PE0 is not re-mapped.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM4_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_TIM4_REMAP)\r\n\r\n#if defined(AFIO_MAPR_CAN_REMAP_REMAP1)\r\n\r\n/**\r\n * @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface.\r\n * @note  CASE 1: CAN_RX mapped to PA11, CAN_TX mapped to PA12\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CAN1_1() AFIO_REMAP_PARTIAL(AFIO_MAPR_CAN_REMAP_REMAP1, AFIO_MAPR_CAN_REMAP)\r\n\r\n/**\r\n * @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface.\r\n * @note  CASE 2: CAN_RX mapped to PB8,  CAN_TX mapped to PB9 (not available on 36-pin package)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CAN1_2() AFIO_REMAP_PARTIAL(AFIO_MAPR_CAN_REMAP_REMAP2, AFIO_MAPR_CAN_REMAP)\r\n\r\n/**\r\n * @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface.\r\n * @note  CASE 3: CAN_RX mapped to PD0,  CAN_TX mapped to PD1\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CAN1_3() AFIO_REMAP_PARTIAL(AFIO_MAPR_CAN_REMAP_REMAP3, AFIO_MAPR_CAN_REMAP)\r\n\r\n#endif\r\n\r\n/**\r\n * @brief Enable the remapping of PD0 and PD1. When the HSE oscillator is not used\r\n *        (application running on internal 8 MHz RC) PD0 and PD1 can be mapped on OSC_IN and\r\n *        OSC_OUT. This is available only on 36, 48 and 64 pins packages (PD0 and PD1 are available\r\n *        on 100-pin and 144-pin packages, no need for remapping).\r\n * @note  ENABLE: PD0 remapped on OSC_IN, PD1 remapped on OSC_OUT.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_PD01_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_PD01_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of PD0 and PD1. When the HSE oscillator is not used\r\n *        (application running on internal 8 MHz RC) PD0 and PD1 can be mapped on OSC_IN and\r\n *        OSC_OUT. This is available only on 36, 48 and 64 pins packages (PD0 and PD1 are available\r\n *        on 100-pin and 144-pin packages, no need for remapping).\r\n * @note  DISABLE: No remapping of PD0 and PD1\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_PD01_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_PD01_REMAP)\r\n\r\n#if defined(AFIO_MAPR_TIM5CH4_IREMAP)\r\n/**\r\n * @brief Enable the remapping of TIM5CH4.\r\n * @note  ENABLE: LSI internal clock is connected to TIM5_CH4 input for calibration purpose.\r\n * @note  This function is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM5CH4_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_TIM5CH4_IREMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM5CH4.\r\n * @note  DISABLE: TIM5_CH4 is connected to PA3\r\n * @note  This function is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM5CH4_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_TIM5CH4_IREMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_ETH_REMAP)\r\n/**\r\n * @brief Enable the remapping of Ethernet MAC connections with the PHY.\r\n * @note  ENABLE: Remap     (RX_DV-CRS_DV/PD8, RXD0/PD9, RXD1/PD10, RXD2/PD11, RXD3/PD12)\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ETH_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ETH_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of Ethernet MAC connections with the PHY.\r\n * @note  DISABLE: No remap (RX_DV-CRS_DV/PA7, RXD0/PC4, RXD1/PC5,  RXD2/PB0,  RXD3/PB1)\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ETH_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ETH_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_CAN2_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of CAN2 alternate function CAN2_RX and CAN2_TX.\r\n * @note  ENABLE: Remap     (CAN2_RX/PB5,  CAN2_TX/PB6)\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CAN2_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_CAN2_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of CAN2 alternate function CAN2_RX and CAN2_TX.\r\n * @note  DISABLE: No remap (CAN2_RX/PB12, CAN2_TX/PB13)\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CAN2_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_CAN2_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_MII_RMII_SEL)\r\n/**\r\n * @brief Configures the Ethernet MAC internally for use with an external MII or RMII PHY.\r\n * @note  ETH_RMII: Configure Ethernet MAC for connection with an RMII PHY\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_ETH_RMII() AFIO_REMAP_ENABLE(AFIO_MAPR_MII_RMII_SEL)\r\n\r\n/**\r\n * @brief Configures the Ethernet MAC internally for use with an external MII or RMII PHY.\r\n * @note  ETH_MII: Configure Ethernet MAC for connection with an MII PHY\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_ETH_MII() AFIO_REMAP_DISABLE(AFIO_MAPR_MII_RMII_SEL)\r\n#endif\r\n\r\n/**\r\n * @brief Enable the remapping of ADC1_ETRGINJ (ADC 1 External trigger injected conversion).\r\n * @note  ENABLE: ADC1 External Event injected conversion is connected to TIM8 Channel4.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC1_ETRGINJ_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ADC1_ETRGINJ_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of ADC1_ETRGINJ (ADC 1 External trigger injected conversion).\r\n * @note  DISABLE: ADC1 External trigger injected conversion is connected to EXTI15\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC1_ETRGINJ_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ADC1_ETRGINJ_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of ADC1_ETRGREG (ADC 1 External trigger regular conversion).\r\n * @note  ENABLE: ADC1 External Event regular conversion is connected to TIM8 TRG0.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC1_ETRGREG_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ADC1_ETRGREG_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of ADC1_ETRGREG (ADC 1 External trigger regular conversion).\r\n * @note  DISABLE: ADC1 External trigger regular conversion is connected to EXTI11\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC1_ETRGREG_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ADC1_ETRGREG_REMAP)\r\n\r\n#if defined(AFIO_MAPR_ADC2_ETRGINJ_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger injected conversion).\r\n * @note  ENABLE: ADC2 External Event injected conversion is connected to TIM8 Channel4.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC2_ETRGINJ_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ADC2_ETRGINJ_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger injected conversion).\r\n * @note  DISABLE: ADC2 External trigger injected conversion is connected to EXTI15\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC2_ETRGINJ_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ADC2_ETRGINJ_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_ADC2_ETRGREG_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion).\r\n * @note  ENABLE: ADC2 External Event regular conversion is connected to TIM8 TRG0.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC2_ETRGREG_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ADC2_ETRGREG_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion).\r\n * @note  DISABLE: ADC2 External trigger regular conversion is connected to EXTI11\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC2_ETRGREG_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ADC2_ETRGREG_REMAP)\r\n#endif\r\n\r\n/**\r\n * @brief Enable the Serial wire JTAG configuration\r\n * @note  ENABLE: Full SWJ (JTAG-DP + SW-DP): Reset State\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SWJ_ENABLE() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_RESET)\r\n\r\n/**\r\n * @brief Enable the Serial wire JTAG configuration\r\n * @note  NONJTRST: Full SWJ (JTAG-DP + SW-DP) but without NJTRST\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SWJ_NONJTRST() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_NOJNTRST)\r\n\r\n/**\r\n * @brief Enable the Serial wire JTAG configuration\r\n * @note  NOJTAG: JTAG-DP Disabled and SW-DP Enabled\r\n * @retval None\r\n */\r\n\r\n#define __HAL_AFIO_REMAP_SWJ_NOJTAG() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_JTAGDISABLE)\r\n\r\n/**\r\n * @brief Disable the Serial wire JTAG configuration\r\n * @note  DISABLE: JTAG-DP Disabled and SW-DP Disabled\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SWJ_DISABLE() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_DISABLE)\r\n\r\n#if defined(AFIO_MAPR_SPI3_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of SPI3 alternate functions SPI3_NSS/I2S3_WS, SPI3_SCK/I2S3_CK, SPI3_MISO, SPI3_MOSI/I2S3_SD.\r\n * @note  ENABLE: Remap     (SPI3_NSS-I2S3_WS/PA4,  SPI3_SCK-I2S3_CK/PC10, SPI3_MISO/PC11, SPI3_MOSI-I2S3_SD/PC12)\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SPI3_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_SPI3_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of SPI3 alternate functions SPI3_NSS/I2S3_WS, SPI3_SCK/I2S3_CK, SPI3_MISO, SPI3_MOSI/I2S3_SD.\r\n * @note  DISABLE: No remap (SPI3_NSS-I2S3_WS/PA15, SPI3_SCK-I2S3_CK/PB3,  SPI3_MISO/PB4,  SPI3_MOSI-I2S3_SD/PB5).\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SPI3_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_SPI3_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_TIM2ITR1_IREMAP)\r\n\r\n/**\r\n * @brief Control of TIM2_ITR1 internal mapping.\r\n * @note  TO_USB: Connect USB OTG SOF (Start of Frame) output to TIM2_ITR1 for calibration purposes.\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_TIM2ITR1_TO_USB() AFIO_REMAP_ENABLE(AFIO_MAPR_TIM2ITR1_IREMAP)\r\n\r\n/**\r\n * @brief Control of TIM2_ITR1 internal mapping.\r\n * @note  TO_ETH: Connect TIM2_ITR1 internally to the Ethernet PTP output for calibration purposes.\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_TIM2ITR1_TO_ETH() AFIO_REMAP_DISABLE(AFIO_MAPR_TIM2ITR1_IREMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_PTP_PPS_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion).\r\n * @note  ENABLE: PTP_PPS is output on PB5 pin.\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_ETH_PTP_PPS_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_PTP_PPS_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion).\r\n * @note  DISABLE: PTP_PPS not output on PB5 pin.\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_ETH_PTP_PPS_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_PTP_PPS_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM9_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM9_CH1 and TIM9_CH2.\r\n * @note  ENABLE: Remap     (TIM9_CH1 on PE5 and TIM9_CH2 on PE6).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM9_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM9_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM9_CH1 and TIM9_CH2.\r\n * @note  DISABLE: No remap (TIM9_CH1 on PA2 and TIM9_CH2 on PA3).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM9_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM9_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM10_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM10_CH1.\r\n * @note  ENABLE: Remap     (TIM10_CH1 on PF6).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM10_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM10_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM10_CH1.\r\n * @note  DISABLE: No remap (TIM10_CH1 on PB8).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM10_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM10_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM11_REMAP)\r\n/**\r\n * @brief Enable the remapping of TIM11_CH1.\r\n * @note  ENABLE: Remap     (TIM11_CH1 on PF7).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM11_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM11_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM11_CH1.\r\n * @note  DISABLE: No remap (TIM11_CH1 on PB9).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM11_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM11_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM13_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM13_CH1.\r\n * @note  ENABLE: Remap     STM32F100:(TIM13_CH1 on PF8). Others:(TIM13_CH1 on PB0).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM13_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM13_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM13_CH1.\r\n * @note  DISABLE: No remap STM32F100:(TIM13_CH1 on PA6). Others:(TIM13_CH1 on PC8).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM13_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM13_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM14_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM14_CH1.\r\n * @note  ENABLE: Remap     STM32F100:(TIM14_CH1 on PB1). Others:(TIM14_CH1 on PF9).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM14_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM14_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM14_CH1.\r\n * @note  DISABLE: No remap STM32F100:(TIM14_CH1 on PC9). Others:(TIM14_CH1 on PA7).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM14_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM14_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_FSMC_NADV_REMAP)\r\n\r\n/**\r\n * @brief Controls the use of the optional FSMC_NADV signal.\r\n * @note  DISCONNECTED: The NADV signal is not connected. The I/O pin can be used by another peripheral.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_FSMCNADV_DISCONNECTED() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_FSMC_NADV_REMAP)\r\n\r\n/**\r\n * @brief Controls the use of the optional FSMC_NADV signal.\r\n * @note  CONNECTED: The NADV signal is connected to the output (default).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_FSMCNADV_CONNECTED() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_FSMC_NADV_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM15_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM15_CH1 and TIM15_CH2.\r\n * @note  ENABLE: Remap     (TIM15_CH1 on PB14 and TIM15_CH2 on PB15).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM15_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM15_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM15_CH1 and TIM15_CH2.\r\n * @note  DISABLE: No remap (TIM15_CH1 on PA2  and TIM15_CH2 on PA3).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM15_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM15_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM16_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM16_CH1.\r\n * @note  ENABLE: Remap     (TIM16_CH1 on PA6).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM16_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM16_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM16_CH1.\r\n * @note  DISABLE: No remap (TIM16_CH1 on PB8).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM16_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM16_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM17_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM17_CH1.\r\n * @note  ENABLE: Remap     (TIM17_CH1 on PA7).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM17_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM17_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM17_CH1.\r\n * @note  DISABLE: No remap (TIM17_CH1 on PB9).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM17_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM17_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_CEC_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of CEC.\r\n * @note  ENABLE: Remap     (CEC on PB10).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CEC_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_CEC_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of CEC.\r\n * @note  DISABLE: No remap (CEC on PB8).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CEC_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_CEC_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM1_DMA_REMAP)\r\n\r\n/**\r\n * @brief Controls the mapping of the TIM1_CH1 TIM1_CH2 DMA requests onto the DMA1 channels.\r\n * @note  ENABLE: Remap (TIM1_CH1 DMA request/DMA1 Channel6, TIM1_CH2 DMA request/DMA1 Channel6)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM1DMA_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM1_DMA_REMAP)\r\n\r\n/**\r\n * @brief Controls the mapping of the TIM1_CH1 TIM1_CH2 DMA requests onto the DMA1 channels.\r\n * @note  DISABLE: No remap (TIM1_CH1 DMA request/DMA1 Channel2, TIM1_CH2 DMA request/DMA1 Channel3).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM1DMA_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM1_DMA_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM67_DAC_DMA_REMAP)\r\n\r\n/**\r\n * @brief Controls the mapping of the TIM6_DAC1 and TIM7_DAC2 DMA requests onto the DMA1 channels.\r\n * @note  ENABLE: Remap (TIM6_DAC1 DMA request/DMA1 Channel3, TIM7_DAC2 DMA request/DMA1 Channel4)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM67DACDMA_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM67_DAC_DMA_REMAP)\r\n\r\n/**\r\n * @brief Controls the mapping of the TIM6_DAC1 and TIM7_DAC2 DMA requests onto the DMA1 channels.\r\n * @note  DISABLE: No remap (TIM6_DAC1 DMA request/DMA2 Channel3, TIM7_DAC2 DMA request/DMA2 Channel4)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM67DACDMA_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM67_DAC_DMA_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM12_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM12_CH1 and TIM12_CH2.\r\n * @note  ENABLE: Remap     (TIM12_CH1 on PB12 and TIM12_CH2 on PB13).\r\n * @note  This bit is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM12_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM12_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM12_CH1 and TIM12_CH2.\r\n * @note  DISABLE: No remap (TIM12_CH1 on PC4  and TIM12_CH2 on PC5).\r\n * @note  This bit is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM12_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM12_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_MISC_REMAP)\r\n\r\n/**\r\n * @brief Miscellaneous features remapping.\r\n *        This bit is set and cleared by software. It controls miscellaneous features.\r\n *        The DMA2 channel 5 interrupt position in the vector table.\r\n *        The timer selection for DAC trigger 3 (TSEL[2:0] = 011, for more details refer to the DAC_CR register).\r\n * @note  ENABLE: DMA2 channel 5 interrupt is mapped separately at position 60 and TIM15 TRGO event is\r\n *        selected as DAC Trigger 3, TIM15 triggers TIM1/3.\r\n * @note  This bit is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_MISC_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_MISC_REMAP)\r\n\r\n/**\r\n * @brief Miscellaneous features remapping.\r\n *        This bit is set and cleared by software. It controls miscellaneous features.\r\n *        The DMA2 channel 5 interrupt position in the vector table.\r\n *        The timer selection for DAC trigger 3 (TSEL[2:0] = 011, for more details refer to the DAC_CR register).\r\n * @note  DISABLE: DMA2 channel 5 interrupt is mapped with DMA2 channel 4 at position 59, TIM5 TRGO\r\n *        event is selected as DAC Trigger 3, TIM5 triggers TIM1/3.\r\n * @note  This bit is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_MISC_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_MISC_REMAP)\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIOEx_Private_Macros GPIOEx Private Macros\r\n * @{\r\n */\r\n#if defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\r\n#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA)) ? 0uL : ((__GPIOx__) == (GPIOB)) ? 1uL : ((__GPIOx__) == (GPIOC)) ? 2uL : 3uL)\r\n#elif defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA)) ? 0uL : ((__GPIOx__) == (GPIOB)) ? 1uL : ((__GPIOx__) == (GPIOC)) ? 2uL : ((__GPIOx__) == (GPIOD)) ? 3uL : 4uL)\r\n#elif defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define GPIO_GET_INDEX(__GPIOx__)   \\\r\n  (((__GPIOx__) == (GPIOA))   ? 0uL \\\r\n   : ((__GPIOx__) == (GPIOB)) ? 1uL \\\r\n   : ((__GPIOx__) == (GPIOC)) ? 2uL \\\r\n   : ((__GPIOx__) == (GPIOD)) ? 3uL \\\r\n   : ((__GPIOx__) == (GPIOE)) ? 4uL \\\r\n   : ((__GPIOx__) == (GPIOF)) ? 5uL \\\r\n                              : 6uL)\r\n#endif\r\n\r\n#define AFIO_REMAP_ENABLE(REMAP_PIN) \\\r\n  do {                               \\\r\n    uint32_t tmpreg = AFIO->MAPR;    \\\r\n    tmpreg |= AFIO_MAPR_SWJ_CFG;     \\\r\n    tmpreg |= REMAP_PIN;             \\\r\n    AFIO->MAPR = tmpreg;             \\\r\n  } while (0u)\r\n\r\n#define AFIO_REMAP_DISABLE(REMAP_PIN) \\\r\n  do {                                \\\r\n    uint32_t tmpreg = AFIO->MAPR;     \\\r\n    tmpreg |= AFIO_MAPR_SWJ_CFG;      \\\r\n    tmpreg &= ~REMAP_PIN;             \\\r\n    AFIO->MAPR = tmpreg;              \\\r\n  } while (0u)\r\n\r\n#define AFIO_REMAP_PARTIAL(REMAP_PIN, REMAP_PIN_MASK) \\\r\n  do {                                                \\\r\n    uint32_t tmpreg = AFIO->MAPR;                     \\\r\n    tmpreg &= ~REMAP_PIN_MASK;                        \\\r\n    tmpreg |= AFIO_MAPR_SWJ_CFG;                      \\\r\n    tmpreg |= REMAP_PIN;                              \\\r\n    AFIO->MAPR = tmpreg;                              \\\r\n  } while (0u)\r\n\r\n#define AFIO_DBGAFR_CONFIG(DBGAFR_SWJCFG) \\\r\n  do {                                    \\\r\n    uint32_t tmpreg = AFIO->MAPR;         \\\r\n    tmpreg &= ~AFIO_MAPR_SWJ_CFG_Msk;     \\\r\n    tmpreg |= DBGAFR_SWJCFG;              \\\r\n    AFIO->MAPR = tmpreg;                  \\\r\n  } while (0u)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @addtogroup GPIOEx_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup GPIOEx_Exported_Functions_Group1\r\n * @{\r\n */\r\nvoid HAL_GPIOEx_ConfigEventout(uint32_t GPIO_PortSource, uint32_t GPIO_PinSource);\r\nvoid HAL_GPIOEx_EnableEventout(void);\r\nvoid HAL_GPIOEx_DisableEventout(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* STM32F1xx_HAL_GPIO_EX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_iwdg.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_iwdg.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of IWDG HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef STM32F1xx_HAL_IWDG_H\r\n#define STM32F1xx_HAL_IWDG_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup IWDG IWDG\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup IWDG_Exported_Types IWDG Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  IWDG Init structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t Prescaler; /*!< Select the prescaler of the IWDG.\r\n                           This parameter can be a value of @ref IWDG_Prescaler */\r\n\r\n  uint32_t Reload; /*!< Specifies the IWDG down-counter reload value.\r\n                        This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF */\r\n\r\n} IWDG_InitTypeDef;\r\n\r\n/**\r\n * @brief  IWDG Handle Structure definition\r\n */\r\ntypedef struct {\r\n  IWDG_TypeDef *Instance; /*!< Register base address    */\r\n\r\n  IWDG_InitTypeDef Init; /*!< IWDG required parameters */\r\n} IWDG_HandleTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup IWDG_Exported_Constants IWDG Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup IWDG_Prescaler IWDG Prescaler\r\n * @{\r\n */\r\n#define IWDG_PRESCALER_4   0x00000000U                   /*!< IWDG prescaler set to 4   */\r\n#define IWDG_PRESCALER_8   IWDG_PR_PR_0                  /*!< IWDG prescaler set to 8   */\r\n#define IWDG_PRESCALER_16  IWDG_PR_PR_1                  /*!< IWDG prescaler set to 16  */\r\n#define IWDG_PRESCALER_32  (IWDG_PR_PR_1 | IWDG_PR_PR_0) /*!< IWDG prescaler set to 32  */\r\n#define IWDG_PRESCALER_64  IWDG_PR_PR_2                  /*!< IWDG prescaler set to 64  */\r\n#define IWDG_PRESCALER_128 (IWDG_PR_PR_2 | IWDG_PR_PR_0) /*!< IWDG prescaler set to 128 */\r\n#define IWDG_PRESCALER_256 (IWDG_PR_PR_2 | IWDG_PR_PR_1) /*!< IWDG prescaler set to 256 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macros -----------------------------------------------------------*/\r\n/** @defgroup IWDG_Exported_Macros IWDG Exported Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Enable the IWDG peripheral.\r\n * @param  __HANDLE__  IWDG handle\r\n * @retval None\r\n */\r\n#define __HAL_IWDG_START(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_ENABLE)\r\n\r\n/**\r\n * @brief  Reload IWDG counter with value defined in the reload register\r\n *         (write access to IWDG_PR and IWDG_RLR registers disabled).\r\n * @param  __HANDLE__  IWDG handle\r\n * @retval None\r\n */\r\n#define __HAL_IWDG_RELOAD_COUNTER(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_RELOAD)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @defgroup IWDG_Exported_Functions  IWDG Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup IWDG_Exported_Functions_Group1 Initialization and Start functions\r\n * @{\r\n */\r\n/* Initialization/Start functions  ********************************************/\r\nHAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup IWDG_Exported_Functions_Group2 IO operation functions\r\n * @{\r\n */\r\n/* I/O operation functions ****************************************************/\r\nHAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private constants ---------------------------------------------------------*/\r\n/** @defgroup IWDG_Private_Constants IWDG Private Constants\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  IWDG Key Register BitMask\r\n */\r\n#define IWDG_KEY_RELOAD               0x0000AAAAU /*!< IWDG Reload Counter Enable   */\r\n#define IWDG_KEY_ENABLE               0x0000CCCCU /*!< IWDG Peripheral Enable       */\r\n#define IWDG_KEY_WRITE_ACCESS_ENABLE  0x00005555U /*!< IWDG KR Write Access Enable  */\r\n#define IWDG_KEY_WRITE_ACCESS_DISABLE 0x00000000U /*!< IWDG KR Write Access Disable */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup IWDG_Private_Macros IWDG Private Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Enable write access to IWDG_PR and IWDG_RLR registers.\r\n * @param  __HANDLE__  IWDG handle\r\n * @retval None\r\n */\r\n#define IWDG_ENABLE_WRITE_ACCESS(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_WRITE_ACCESS_ENABLE)\r\n\r\n/**\r\n * @brief  Disable write access to IWDG_PR and IWDG_RLR registers.\r\n * @param  __HANDLE__  IWDG handle\r\n * @retval None\r\n */\r\n#define IWDG_DISABLE_WRITE_ACCESS(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_WRITE_ACCESS_DISABLE)\r\n\r\n/**\r\n * @brief  Check IWDG prescaler value.\r\n * @param  __PRESCALER__  IWDG prescaler value\r\n * @retval None\r\n */\r\n#define IS_IWDG_PRESCALER(__PRESCALER__)                                                                                                                              \\\r\n  (((__PRESCALER__) == IWDG_PRESCALER_4) || ((__PRESCALER__) == IWDG_PRESCALER_8) || ((__PRESCALER__) == IWDG_PRESCALER_16) || ((__PRESCALER__) == IWDG_PRESCALER_32) \\\r\n   || ((__PRESCALER__) == IWDG_PRESCALER_64) || ((__PRESCALER__) == IWDG_PRESCALER_128) || ((__PRESCALER__) == IWDG_PRESCALER_256))\r\n\r\n/**\r\n * @brief  Check IWDG reload value.\r\n * @param  __RELOAD__  IWDG reload value\r\n * @retval None\r\n */\r\n#define IS_IWDG_RELOAD(__RELOAD__) ((__RELOAD__) <= IWDG_RLR_RL)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* STM32F1xx_HAL_IWDG_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_pwr.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of PWR HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_PWR_H\r\n#define __STM32F1xx_HAL_PWR_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup PWR\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n\r\n/** @defgroup PWR_Exported_Types PWR Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  PWR PVD configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t PVDLevel; /*!< PVDLevel: Specifies the PVD detection level.\r\n                          This parameter can be a value of @ref PWR_PVD_detection_level */\r\n\r\n  uint32_t Mode; /*!< Mode: Specifies the operating mode for the selected pins.\r\n                      This parameter can be a value of @ref PWR_PVD_Mode */\r\n} PWR_PVDTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Internal constants --------------------------------------------------------*/\r\n\r\n/** @addtogroup PWR_Private_Constants\r\n * @{\r\n */\r\n\r\n#define PWR_EXTI_LINE_PVD ((uint32_t)0x00010000) /*!< External interrupt line 16 Connected to the PVD EXTI Line */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup PWR_Exported_Constants PWR Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup PWR_PVD_detection_level PWR PVD detection level\r\n * @{\r\n */\r\n#define PWR_PVDLEVEL_0 PWR_CR_PLS_2V2\r\n#define PWR_PVDLEVEL_1 PWR_CR_PLS_2V3\r\n#define PWR_PVDLEVEL_2 PWR_CR_PLS_2V4\r\n#define PWR_PVDLEVEL_3 PWR_CR_PLS_2V5\r\n#define PWR_PVDLEVEL_4 PWR_CR_PLS_2V6\r\n#define PWR_PVDLEVEL_5 PWR_CR_PLS_2V7\r\n#define PWR_PVDLEVEL_6 PWR_CR_PLS_2V8\r\n#define PWR_PVDLEVEL_7 PWR_CR_PLS_2V9\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_PVD_Mode PWR PVD Mode\r\n * @{\r\n */\r\n#define PWR_PVD_MODE_NORMAL               0x00000000U /*!< basic mode is used */\r\n#define PWR_PVD_MODE_IT_RISING            0x00010001U /*!< External Interrupt Mode with Rising edge trigger detection */\r\n#define PWR_PVD_MODE_IT_FALLING           0x00010002U /*!< External Interrupt Mode with Falling edge trigger detection */\r\n#define PWR_PVD_MODE_IT_RISING_FALLING    0x00010003U /*!< External Interrupt Mode with Rising/Falling edge trigger detection */\r\n#define PWR_PVD_MODE_EVENT_RISING         0x00020001U /*!< Event Mode with Rising edge trigger detection */\r\n#define PWR_PVD_MODE_EVENT_FALLING        0x00020002U /*!< Event Mode with Falling edge trigger detection */\r\n#define PWR_PVD_MODE_EVENT_RISING_FALLING 0x00020003U /*!< Event Mode with Rising/Falling edge trigger detection */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_WakeUp_Pins PWR WakeUp Pins\r\n * @{\r\n */\r\n\r\n#define PWR_WAKEUP_PIN1 PWR_CSR_EWUP\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_Regulator_state_in_SLEEP_STOP_mode PWR Regulator state in SLEEP/STOP mode\r\n * @{\r\n */\r\n#define PWR_MAINREGULATOR_ON     0x00000000U\r\n#define PWR_LOWPOWERREGULATOR_ON PWR_CR_LPDS\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_SLEEP_mode_entry PWR SLEEP mode entry\r\n * @{\r\n */\r\n#define PWR_SLEEPENTRY_WFI ((uint8_t)0x01)\r\n#define PWR_SLEEPENTRY_WFE ((uint8_t)0x02)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_STOP_mode_entry PWR STOP mode entry\r\n * @{\r\n */\r\n#define PWR_STOPENTRY_WFI ((uint8_t)0x01)\r\n#define PWR_STOPENTRY_WFE ((uint8_t)0x02)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_Flag PWR Flag\r\n * @{\r\n */\r\n#define PWR_FLAG_WU   PWR_CSR_WUF\r\n#define PWR_FLAG_SB   PWR_CSR_SBF\r\n#define PWR_FLAG_PVDO PWR_CSR_PVDO\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup PWR_Exported_Macros PWR Exported Macros\r\n * @{\r\n */\r\n\r\n/** @brief  Check PWR flag is set or not.\r\n * @param  __FLAG__: specifies the flag to check.\r\n *           This parameter can be one of the following values:\r\n *            @arg PWR_FLAG_WU: Wake Up flag. This flag indicates that a wakeup event\r\n *                  was received from the WKUP pin or from the RTC alarm\r\n *                  An additional wakeup event is detected if the WKUP pin is enabled\r\n *                  (by setting the EWUP bit) when the WKUP pin level is already high.\r\n *            @arg PWR_FLAG_SB: StandBy flag. This flag indicates that the system was\r\n *                  resumed from StandBy mode.\r\n *            @arg PWR_FLAG_PVDO: PVD Output. This flag is valid only if PVD is enabled\r\n *                  by the HAL_PWR_EnablePVD() function. The PVD is stopped by Standby mode\r\n *                  For this reason, this bit is equal to 0 after Standby or reset\r\n *                  until the PVDE bit is set.\r\n * @retval The new state of __FLAG__ (TRUE or FALSE).\r\n */\r\n#define __HAL_PWR_GET_FLAG(__FLAG__) ((PWR->CSR & (__FLAG__)) == (__FLAG__))\r\n\r\n/** @brief  Clear the PWR's pending flags.\r\n * @param  __FLAG__: specifies the flag to clear.\r\n *          This parameter can be one of the following values:\r\n *            @arg PWR_FLAG_WU: Wake Up flag\r\n *            @arg PWR_FLAG_SB: StandBy flag\r\n */\r\n#define __HAL_PWR_CLEAR_FLAG(__FLAG__) SET_BIT(PWR->CR, ((__FLAG__) << 2))\r\n\r\n/**\r\n * @brief Enable interrupt on PVD Exti Line 16.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_ENABLE_IT() SET_BIT(EXTI->IMR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief Disable interrupt on PVD Exti Line 16.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->IMR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief Enable event on PVD Exti Line 16.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_ENABLE_EVENT() SET_BIT(EXTI->EMR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief Disable event on PVD Exti Line 16.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->EMR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief  PVD EXTI line configuration: set falling edge trigger.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief Disable the PVD Extended Interrupt Falling Trigger.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief  PVD EXTI line configuration: set rising edge trigger.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief Disable the PVD Extended Interrupt Rising Trigger.\r\n * This parameter can be:\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief  PVD EXTI line configuration: set rising & falling edge trigger.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_FALLING_EDGE() \\\r\n  __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();              \\\r\n  __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE();\r\n\r\n/**\r\n * @brief Disable the PVD Extended Interrupt Rising & Falling Trigger.\r\n * This parameter can be:\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_FALLING_EDGE() \\\r\n  __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();              \\\r\n  __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE();\r\n\r\n/**\r\n * @brief Check whether the specified PVD EXTI interrupt flag is set or not.\r\n * @retval EXTI PVD Line Status.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_GET_FLAG() (EXTI->PR & (PWR_EXTI_LINE_PVD))\r\n\r\n/**\r\n * @brief Clear the PVD EXTI flag.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_CLEAR_FLAG() (EXTI->PR = (PWR_EXTI_LINE_PVD))\r\n\r\n/**\r\n * @brief Generate a Software interrupt on selected EXTI line.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER, PWR_EXTI_LINE_PVD)\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/** @defgroup PWR_Private_Macros PWR Private Macros\r\n * @{\r\n */\r\n#define IS_PWR_PVD_LEVEL(LEVEL)                                                                                                                                                           \\\r\n  (((LEVEL) == PWR_PVDLEVEL_0) || ((LEVEL) == PWR_PVDLEVEL_1) || ((LEVEL) == PWR_PVDLEVEL_2) || ((LEVEL) == PWR_PVDLEVEL_3) || ((LEVEL) == PWR_PVDLEVEL_4) || ((LEVEL) == PWR_PVDLEVEL_5) \\\r\n   || ((LEVEL) == PWR_PVDLEVEL_6) || ((LEVEL) == PWR_PVDLEVEL_7))\r\n\r\n#define IS_PWR_PVD_MODE(MODE)                                                                                                                                       \\\r\n  (((MODE) == PWR_PVD_MODE_IT_RISING) || ((MODE) == PWR_PVD_MODE_IT_FALLING) || ((MODE) == PWR_PVD_MODE_IT_RISING_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING) \\\r\n   || ((MODE) == PWR_PVD_MODE_EVENT_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING_FALLING) || ((MODE) == PWR_PVD_MODE_NORMAL))\r\n\r\n#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1))\r\n\r\n#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_ON) || ((REGULATOR) == PWR_LOWPOWERREGULATOR_ON))\r\n\r\n#define IS_PWR_SLEEP_ENTRY(ENTRY) (((ENTRY) == PWR_SLEEPENTRY_WFI) || ((ENTRY) == PWR_SLEEPENTRY_WFE))\r\n\r\n#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPENTRY_WFI) || ((ENTRY) == PWR_STOPENTRY_WFE))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @addtogroup PWR_Exported_Functions PWR Exported Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions\r\n * @{\r\n */\r\n\r\n/* Initialization and de-initialization functions *******************************/\r\nvoid HAL_PWR_DeInit(void);\r\nvoid HAL_PWR_EnableBkUpAccess(void);\r\nvoid HAL_PWR_DisableBkUpAccess(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup PWR_Exported_Functions_Group2 Peripheral Control functions\r\n * @{\r\n */\r\n\r\n/* Peripheral Control functions  ************************************************/\r\nvoid HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD);\r\n/* #define HAL_PWR_ConfigPVD 12*/\r\nvoid HAL_PWR_EnablePVD(void);\r\nvoid HAL_PWR_DisablePVD(void);\r\n\r\n/* WakeUp pins configuration functions ****************************************/\r\nvoid HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx);\r\nvoid HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx);\r\n\r\n/* Low Power modes configuration functions ************************************/\r\nvoid HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry);\r\nvoid HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry);\r\nvoid HAL_PWR_EnterSTANDBYMode(void);\r\n\r\nvoid HAL_PWR_EnableSleepOnExit(void);\r\nvoid HAL_PWR_DisableSleepOnExit(void);\r\nvoid HAL_PWR_EnableSEVOnPend(void);\r\nvoid HAL_PWR_DisableSEVOnPend(void);\r\n\r\nvoid HAL_PWR_PVD_IRQHandler(void);\r\nvoid HAL_PWR_PVDCallback(void);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_PWR_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_rcc.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of RCC HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_RCC_H\r\n#define __STM32F1xx_HAL_RCC_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup RCC\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n\r\n/** @defgroup RCC_Exported_Types RCC Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  RCC PLL configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t PLLState; /*!< PLLState: The new state of the PLL.\r\n                         This parameter can be a value of @ref RCC_PLL_Config */\r\n\r\n  uint32_t PLLSource; /*!< PLLSource: PLL entry clock source.\r\n                          This parameter must be a value of @ref RCC_PLL_Clock_Source */\r\n\r\n  uint32_t PLLMUL; /*!< PLLMUL: Multiplication factor for PLL VCO input clock\r\n                       This parameter must be a value of @ref RCCEx_PLL_Multiplication_Factor */\r\n} RCC_PLLInitTypeDef;\r\n\r\n/**\r\n * @brief  RCC System, AHB and APB busses clock configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t ClockType; /*!< The clock to be configured.\r\n                           This parameter can be a value of @ref RCC_System_Clock_Type */\r\n\r\n  uint32_t SYSCLKSource; /*!< The clock source (SYSCLKS) used as system clock.\r\n                              This parameter can be a value of @ref RCC_System_Clock_Source */\r\n\r\n  uint32_t AHBCLKDivider; /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK).\r\n                               This parameter can be a value of @ref RCC_AHB_Clock_Source */\r\n\r\n  uint32_t APB1CLKDivider; /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK).\r\n                                This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */\r\n\r\n  uint32_t APB2CLKDivider; /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK).\r\n                                This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */\r\n} RCC_ClkInitTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup RCC_Exported_Constants RCC Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup RCC_PLL_Clock_Source PLL Clock Source\r\n * @{\r\n */\r\n\r\n#define RCC_PLLSOURCE_HSI_DIV2 0x00000000U     /*!< HSI clock divided by 2 selected as PLL entry clock source */\r\n#define RCC_PLLSOURCE_HSE      RCC_CFGR_PLLSRC /*!< HSE clock selected as PLL entry clock source */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Oscillator_Type Oscillator Type\r\n * @{\r\n */\r\n#define RCC_OSCILLATORTYPE_NONE 0x00000000U\r\n#define RCC_OSCILLATORTYPE_HSE  0x00000001U\r\n#define RCC_OSCILLATORTYPE_HSI  0x00000002U\r\n#define RCC_OSCILLATORTYPE_LSE  0x00000004U\r\n#define RCC_OSCILLATORTYPE_LSI  0x00000008U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_HSE_Config HSE Config\r\n * @{\r\n */\r\n#define RCC_HSE_OFF    0x00000000U                                /*!< HSE clock deactivation */\r\n#define RCC_HSE_ON     RCC_CR_HSEON                               /*!< HSE clock activation */\r\n#define RCC_HSE_BYPASS ((uint32_t)(RCC_CR_HSEBYP | RCC_CR_HSEON)) /*!< External clock source for HSE clock */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_LSE_Config LSE Config\r\n * @{\r\n */\r\n#define RCC_LSE_OFF    0x00000000U                                    /*!< LSE clock deactivation */\r\n#define RCC_LSE_ON     RCC_BDCR_LSEON                                 /*!< LSE clock activation */\r\n#define RCC_LSE_BYPASS ((uint32_t)(RCC_BDCR_LSEBYP | RCC_BDCR_LSEON)) /*!< External clock source for LSE clock */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_HSI_Config HSI Config\r\n * @{\r\n */\r\n#define RCC_HSI_OFF 0x00000000U  /*!< HSI clock deactivation */\r\n#define RCC_HSI_ON  RCC_CR_HSION /*!< HSI clock activation */\r\n\r\n#define RCC_HSICALIBRATION_DEFAULT 0x10U /* Default HSI calibration trimming value */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_LSI_Config LSI Config\r\n * @{\r\n */\r\n#define RCC_LSI_OFF 0x00000000U   /*!< LSI clock deactivation */\r\n#define RCC_LSI_ON  RCC_CSR_LSION /*!< LSI clock activation */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_PLL_Config PLL Config\r\n * @{\r\n */\r\n#define RCC_PLL_NONE 0x00000000U /*!< PLL is not configured */\r\n#define RCC_PLL_OFF  0x00000001U /*!< PLL deactivation */\r\n#define RCC_PLL_ON   0x00000002U /*!< PLL activation */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_System_Clock_Type System Clock Type\r\n * @{\r\n */\r\n#define RCC_CLOCKTYPE_SYSCLK 0x00000001U /*!< SYSCLK to configure */\r\n#define RCC_CLOCKTYPE_HCLK   0x00000002U /*!< HCLK to configure */\r\n#define RCC_CLOCKTYPE_PCLK1  0x00000004U /*!< PCLK1 to configure */\r\n#define RCC_CLOCKTYPE_PCLK2  0x00000008U /*!< PCLK2 to configure */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_System_Clock_Source System Clock Source\r\n * @{\r\n */\r\n#define RCC_SYSCLKSOURCE_HSI    RCC_CFGR_SW_HSI /*!< HSI selected as system clock */\r\n#define RCC_SYSCLKSOURCE_HSE    RCC_CFGR_SW_HSE /*!< HSE selected as system clock */\r\n#define RCC_SYSCLKSOURCE_PLLCLK RCC_CFGR_SW_PLL /*!< PLL selected as system clock */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_System_Clock_Source_Status System Clock Source Status\r\n * @{\r\n */\r\n#define RCC_SYSCLKSOURCE_STATUS_HSI    RCC_CFGR_SWS_HSI /*!< HSI used as system clock */\r\n#define RCC_SYSCLKSOURCE_STATUS_HSE    RCC_CFGR_SWS_HSE /*!< HSE used as system clock */\r\n#define RCC_SYSCLKSOURCE_STATUS_PLLCLK RCC_CFGR_SWS_PLL /*!< PLL used as system clock */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_AHB_Clock_Source AHB Clock Source\r\n * @{\r\n */\r\n#define RCC_SYSCLK_DIV1   RCC_CFGR_HPRE_DIV1   /*!< SYSCLK not divided */\r\n#define RCC_SYSCLK_DIV2   RCC_CFGR_HPRE_DIV2   /*!< SYSCLK divided by 2 */\r\n#define RCC_SYSCLK_DIV4   RCC_CFGR_HPRE_DIV4   /*!< SYSCLK divided by 4 */\r\n#define RCC_SYSCLK_DIV8   RCC_CFGR_HPRE_DIV8   /*!< SYSCLK divided by 8 */\r\n#define RCC_SYSCLK_DIV16  RCC_CFGR_HPRE_DIV16  /*!< SYSCLK divided by 16 */\r\n#define RCC_SYSCLK_DIV64  RCC_CFGR_HPRE_DIV64  /*!< SYSCLK divided by 64 */\r\n#define RCC_SYSCLK_DIV128 RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */\r\n#define RCC_SYSCLK_DIV256 RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */\r\n#define RCC_SYSCLK_DIV512 RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB1_APB2_Clock_Source APB1 APB2 Clock Source\r\n * @{\r\n */\r\n#define RCC_HCLK_DIV1  RCC_CFGR_PPRE1_DIV1  /*!< HCLK not divided */\r\n#define RCC_HCLK_DIV2  RCC_CFGR_PPRE1_DIV2  /*!< HCLK divided by 2 */\r\n#define RCC_HCLK_DIV4  RCC_CFGR_PPRE1_DIV4  /*!< HCLK divided by 4 */\r\n#define RCC_HCLK_DIV8  RCC_CFGR_PPRE1_DIV8  /*!< HCLK divided by 8 */\r\n#define RCC_HCLK_DIV16 RCC_CFGR_PPRE1_DIV16 /*!< HCLK divided by 16 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_RTC_Clock_Source RTC Clock Source\r\n * @{\r\n */\r\n#define RCC_RTCCLKSOURCE_NO_CLK     0x00000000U         /*!< No clock */\r\n#define RCC_RTCCLKSOURCE_LSE        RCC_BDCR_RTCSEL_LSE /*!< LSE oscillator clock used as RTC clock */\r\n#define RCC_RTCCLKSOURCE_LSI        RCC_BDCR_RTCSEL_LSI /*!< LSI oscillator clock used as RTC clock */\r\n#define RCC_RTCCLKSOURCE_HSE_DIV128 RCC_BDCR_RTCSEL_HSE /*!< HSE oscillator clock divided by 128 used as RTC clock */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_MCO_Index MCO Index\r\n * @{\r\n */\r\n#define RCC_MCO1 0x00000000U\r\n#define RCC_MCO  RCC_MCO1 /*!< MCO1 to be compliant with other families with 2 MCOs*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_MCOx_Clock_Prescaler MCO Clock Prescaler\r\n * @{\r\n */\r\n#define RCC_MCODIV_1 0x00000000U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Interrupt Interrupts\r\n * @{\r\n */\r\n#define RCC_IT_LSIRDY ((uint8_t)RCC_CIR_LSIRDYF) /*!< LSI Ready Interrupt flag */\r\n#define RCC_IT_LSERDY ((uint8_t)RCC_CIR_LSERDYF) /*!< LSE Ready Interrupt flag */\r\n#define RCC_IT_HSIRDY ((uint8_t)RCC_CIR_HSIRDYF) /*!< HSI Ready Interrupt flag */\r\n#define RCC_IT_HSERDY ((uint8_t)RCC_CIR_HSERDYF) /*!< HSE Ready Interrupt flag */\r\n#define RCC_IT_PLLRDY ((uint8_t)RCC_CIR_PLLRDYF) /*!< PLL Ready Interrupt flag */\r\n#define RCC_IT_CSS    ((uint8_t)RCC_CIR_CSSF)    /*!< Clock Security System Interrupt flag */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Flag Flags\r\n *        Elements values convention: XXXYYYYYb\r\n *           - YYYYY  : Flag position in the register\r\n *           - XXX  : Register index\r\n *                 - 001: CR register\r\n *                 - 010: BDCR register\r\n *                 - 011: CSR register\r\n * @{\r\n */\r\n/* Flags in the CR register */\r\n#define RCC_FLAG_HSIRDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_HSIRDY_Pos)) /*!< Internal High Speed clock ready flag */\r\n#define RCC_FLAG_HSERDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_HSERDY_Pos)) /*!< External High Speed clock ready flag */\r\n#define RCC_FLAG_PLLRDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_PLLRDY_Pos)) /*!< PLL clock ready flag */\r\n\r\n/* Flags in the CSR register */\r\n#define RCC_FLAG_LSIRDY  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_LSIRDY_Pos))   /*!< Internal Low Speed oscillator Ready */\r\n#define RCC_FLAG_PINRST  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_PINRSTF_Pos))  /*!< PIN reset flag */\r\n#define RCC_FLAG_PORRST  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_PORRSTF_Pos))  /*!< POR/PDR reset flag */\r\n#define RCC_FLAG_SFTRST  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_SFTRSTF_Pos))  /*!< Software Reset flag */\r\n#define RCC_FLAG_IWDGRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_IWDGRSTF_Pos)) /*!< Independent Watchdog reset flag */\r\n#define RCC_FLAG_WWDGRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_WWDGRSTF_Pos)) /*!< Window watchdog reset flag */\r\n#define RCC_FLAG_LPWRRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_LPWRRSTF_Pos)) /*!< Low-Power reset flag */\r\n\r\n/* Flags in the BDCR register */\r\n#define RCC_FLAG_LSERDY ((uint8_t)((BDCR_REG_INDEX << 5U) | RCC_BDCR_LSERDY_Pos)) /*!< External Low Speed oscillator Ready */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n\r\n/** @defgroup RCC_Exported_Macros RCC Exported Macros\r\n * @{\r\n */\r\n\r\n/** @defgroup RCC_Peripheral_Clock_Enable_Disable Peripheral Clock Enable Disable\r\n * @brief  Enable or disable the AHB1 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n#define __HAL_RCC_DMA1_CLK_ENABLE()                    \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN); \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SRAM_CLK_ENABLE()                    \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_SRAMEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_SRAMEN); \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_FLITF_CLK_ENABLE()                    \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_FLITFEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FLITFEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_CRC_CLK_ENABLE()                     \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_CRCEN);            \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_CRCEN);  \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_DMA1_CLK_DISABLE()  (RCC->AHBENR &= ~(RCC_AHBENR_DMA1EN))\r\n#define __HAL_RCC_SRAM_CLK_DISABLE()  (RCC->AHBENR &= ~(RCC_AHBENR_SRAMEN))\r\n#define __HAL_RCC_FLITF_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_FLITFEN))\r\n#define __HAL_RCC_CRC_CLK_DISABLE()   (RCC->AHBENR &= ~(RCC_AHBENR_CRCEN))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_AHB_Peripheral_Clock_Enable_Disable_Status AHB Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the AHB peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#define __HAL_RCC_DMA1_IS_CLK_ENABLED()   ((RCC->AHBENR & (RCC_AHBENR_DMA1EN)) != RESET)\r\n#define __HAL_RCC_DMA1_IS_CLK_DISABLED()  ((RCC->AHBENR & (RCC_AHBENR_DMA1EN)) == RESET)\r\n#define __HAL_RCC_SRAM_IS_CLK_ENABLED()   ((RCC->AHBENR & (RCC_AHBENR_SRAMEN)) != RESET)\r\n#define __HAL_RCC_SRAM_IS_CLK_DISABLED()  ((RCC->AHBENR & (RCC_AHBENR_SRAMEN)) == RESET)\r\n#define __HAL_RCC_FLITF_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_FLITFEN)) != RESET)\r\n#define __HAL_RCC_FLITF_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_FLITFEN)) == RESET)\r\n#define __HAL_RCC_CRC_IS_CLK_ENABLED()    ((RCC->AHBENR & (RCC_AHBENR_CRCEN)) != RESET)\r\n#define __HAL_RCC_CRC_IS_CLK_DISABLED()   ((RCC->AHBENR & (RCC_AHBENR_CRCEN)) == RESET)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB1_Clock_Enable_Disable APB1 Clock Enable Disable\r\n * @brief  Enable or disable the Low Speed APB (APB1) peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n#define __HAL_RCC_TIM2_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM3_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_WWDG_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_USART2_CLK_ENABLE()                      \\\r\n  do {                                                     \\\r\n    __IO uint32_t tmpreg;                                  \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */     \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN); \\\r\n    UNUSED(tmpreg);                                        \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_I2C1_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_BKP_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_BKPEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_BKPEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_PWR_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM2_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN))\r\n#define __HAL_RCC_TIM3_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN))\r\n#define __HAL_RCC_WWDG_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_WWDGEN))\r\n#define __HAL_RCC_USART2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART2EN))\r\n#define __HAL_RCC_I2C1_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C1EN))\r\n\r\n#define __HAL_RCC_BKP_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_BKPEN))\r\n#define __HAL_RCC_PWR_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_PWREN))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the APB1 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#define __HAL_RCC_TIM2_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET)\r\n#define __HAL_RCC_TIM2_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET)\r\n#define __HAL_RCC_TIM3_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET)\r\n#define __HAL_RCC_TIM3_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET)\r\n#define __HAL_RCC_WWDG_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) != RESET)\r\n#define __HAL_RCC_WWDG_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) == RESET)\r\n#define __HAL_RCC_USART2_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) != RESET)\r\n#define __HAL_RCC_USART2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) == RESET)\r\n#define __HAL_RCC_I2C1_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) != RESET)\r\n#define __HAL_RCC_I2C1_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) == RESET)\r\n#define __HAL_RCC_BKP_IS_CLK_ENABLED()     ((RCC->APB1ENR & (RCC_APB1ENR_BKPEN)) != RESET)\r\n#define __HAL_RCC_BKP_IS_CLK_DISABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_BKPEN)) == RESET)\r\n#define __HAL_RCC_PWR_IS_CLK_ENABLED()     ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) != RESET)\r\n#define __HAL_RCC_PWR_IS_CLK_DISABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) == RESET)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB2_Clock_Enable_Disable APB2 Clock Enable Disable\r\n * @brief  Enable or disable the High Speed APB (APB2) peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n#define __HAL_RCC_AFIO_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_AFIOEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_AFIOEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOA_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPAEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPAEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOB_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPBEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPBEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOC_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPCEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPCEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOD_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ADC1_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM1_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SPI1_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_USART1_CLK_ENABLE()                      \\\r\n  do {                                                     \\\r\n    __IO uint32_t tmpreg;                                  \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */     \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN); \\\r\n    UNUSED(tmpreg);                                        \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_AFIO_CLK_DISABLE()  (RCC->APB2ENR &= ~(RCC_APB2ENR_AFIOEN))\r\n#define __HAL_RCC_GPIOA_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPAEN))\r\n#define __HAL_RCC_GPIOB_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPBEN))\r\n#define __HAL_RCC_GPIOC_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPCEN))\r\n#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPDEN))\r\n#define __HAL_RCC_ADC1_CLK_DISABLE()  (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC1EN))\r\n\r\n#define __HAL_RCC_TIM1_CLK_DISABLE()   (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM1EN))\r\n#define __HAL_RCC_SPI1_CLK_DISABLE()   (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI1EN))\r\n#define __HAL_RCC_USART1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_USART1EN))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the APB2 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#define __HAL_RCC_AFIO_IS_CLK_ENABLED()    ((RCC->APB2ENR & (RCC_APB2ENR_AFIOEN)) != RESET)\r\n#define __HAL_RCC_AFIO_IS_CLK_DISABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_AFIOEN)) == RESET)\r\n#define __HAL_RCC_GPIOA_IS_CLK_ENABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_IOPAEN)) != RESET)\r\n#define __HAL_RCC_GPIOA_IS_CLK_DISABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPAEN)) == RESET)\r\n#define __HAL_RCC_GPIOB_IS_CLK_ENABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_IOPBEN)) != RESET)\r\n#define __HAL_RCC_GPIOB_IS_CLK_DISABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPBEN)) == RESET)\r\n#define __HAL_RCC_GPIOC_IS_CLK_ENABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_IOPCEN)) != RESET)\r\n#define __HAL_RCC_GPIOC_IS_CLK_DISABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPCEN)) == RESET)\r\n#define __HAL_RCC_GPIOD_IS_CLK_ENABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_IOPDEN)) != RESET)\r\n#define __HAL_RCC_GPIOD_IS_CLK_DISABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPDEN)) == RESET)\r\n#define __HAL_RCC_ADC1_IS_CLK_ENABLED()    ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) != RESET)\r\n#define __HAL_RCC_ADC1_IS_CLK_DISABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) == RESET)\r\n#define __HAL_RCC_TIM1_IS_CLK_ENABLED()    ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) != RESET)\r\n#define __HAL_RCC_TIM1_IS_CLK_DISABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) == RESET)\r\n#define __HAL_RCC_SPI1_IS_CLK_ENABLED()    ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) != RESET)\r\n#define __HAL_RCC_SPI1_IS_CLK_DISABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) == RESET)\r\n#define __HAL_RCC_USART1_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) != RESET)\r\n#define __HAL_RCC_USART1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) == RESET)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB1_Force_Release_Reset APB1 Force Release Reset\r\n * @brief  Force or release APB1 peripheral reset.\r\n * @{\r\n */\r\n#define __HAL_RCC_APB1_FORCE_RESET()   (RCC->APB2RSTR = 0xFFFFFFFFU)\r\n#define __HAL_RCC_TIM2_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST))\r\n#define __HAL_RCC_TIM3_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST))\r\n#define __HAL_RCC_WWDG_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_WWDGRST))\r\n#define __HAL_RCC_USART2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART2RST))\r\n#define __HAL_RCC_I2C1_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C1RST))\r\n\r\n#define __HAL_RCC_BKP_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_BKPRST))\r\n#define __HAL_RCC_PWR_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_PWRRST))\r\n\r\n#define __HAL_RCC_APB1_RELEASE_RESET()   (RCC->APB1RSTR = 0x00)\r\n#define __HAL_RCC_TIM2_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST))\r\n#define __HAL_RCC_TIM3_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST))\r\n#define __HAL_RCC_WWDG_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_WWDGRST))\r\n#define __HAL_RCC_USART2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART2RST))\r\n#define __HAL_RCC_I2C1_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C1RST))\r\n\r\n#define __HAL_RCC_BKP_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_BKPRST))\r\n#define __HAL_RCC_PWR_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_PWRRST))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB2_Force_Release_Reset APB2 Force Release Reset\r\n * @brief  Force or release APB2 peripheral reset.\r\n * @{\r\n */\r\n#define __HAL_RCC_APB2_FORCE_RESET()  (RCC->APB2RSTR = 0xFFFFFFFFU)\r\n#define __HAL_RCC_AFIO_FORCE_RESET()  (RCC->APB2RSTR |= (RCC_APB2RSTR_AFIORST))\r\n#define __HAL_RCC_GPIOA_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPARST))\r\n#define __HAL_RCC_GPIOB_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPBRST))\r\n#define __HAL_RCC_GPIOC_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPCRST))\r\n#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPDRST))\r\n#define __HAL_RCC_ADC1_FORCE_RESET()  (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC1RST))\r\n\r\n#define __HAL_RCC_TIM1_FORCE_RESET()   (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM1RST))\r\n#define __HAL_RCC_SPI1_FORCE_RESET()   (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI1RST))\r\n#define __HAL_RCC_USART1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_USART1RST))\r\n\r\n#define __HAL_RCC_APB2_RELEASE_RESET()  (RCC->APB2RSTR = 0x00)\r\n#define __HAL_RCC_AFIO_RELEASE_RESET()  (RCC->APB2RSTR &= ~(RCC_APB2RSTR_AFIORST))\r\n#define __HAL_RCC_GPIOA_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPARST))\r\n#define __HAL_RCC_GPIOB_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPBRST))\r\n#define __HAL_RCC_GPIOC_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPCRST))\r\n#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPDRST))\r\n#define __HAL_RCC_ADC1_RELEASE_RESET()  (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC1RST))\r\n\r\n#define __HAL_RCC_TIM1_RELEASE_RESET()   (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM1RST))\r\n#define __HAL_RCC_SPI1_RELEASE_RESET()   (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI1RST))\r\n#define __HAL_RCC_USART1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_USART1RST))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_HSI_Configuration HSI Configuration\r\n * @{\r\n */\r\n\r\n/** @brief  Macros to enable or disable the Internal High Speed oscillator (HSI).\r\n * @note   The HSI is stopped by hardware when entering STOP and STANDBY modes.\r\n * @note   HSI can not be stopped if it is used as system clock source. In this case,\r\n *         you have to select another source of the system clock then stop the HSI.\r\n * @note   After enabling the HSI, the application software should wait on HSIRDY\r\n *         flag to be set indicating that HSI clock is stable and can be used as\r\n *         system clock source.\r\n * @note   When the HSI is stopped, HSIRDY flag goes low after 6 HSI oscillator\r\n *         clock cycles.\r\n */\r\n#define __HAL_RCC_HSI_ENABLE()  (*(__IO uint32_t *)RCC_CR_HSION_BB = ENABLE)\r\n#define __HAL_RCC_HSI_DISABLE() (*(__IO uint32_t *)RCC_CR_HSION_BB = DISABLE)\r\n\r\n/** @brief  Macro to adjust the Internal High Speed oscillator (HSI) calibration value.\r\n * @note   The calibration is used to compensate for the variations in voltage\r\n *         and temperature that influence the frequency of the internal HSI RC.\r\n * @param  _HSICALIBRATIONVALUE_ specifies the calibration trimming value.\r\n *         (default is RCC_HSICALIBRATION_DEFAULT).\r\n *         This parameter must be a number between 0 and 0x1F.\r\n */\r\n#define __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(_HSICALIBRATIONVALUE_) (MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, (uint32_t)(_HSICALIBRATIONVALUE_) << RCC_CR_HSITRIM_Pos))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_LSI_Configuration  LSI Configuration\r\n * @{\r\n */\r\n\r\n/** @brief Macro to enable the Internal Low Speed oscillator (LSI).\r\n * @note   After enabling the LSI, the application software should wait on\r\n *         LSIRDY flag to be set indicating that LSI clock is stable and can\r\n *         be used to clock the IWDG and/or the RTC.\r\n */\r\n#define __HAL_RCC_LSI_ENABLE() (*(__IO uint32_t *)RCC_CSR_LSION_BB = ENABLE)\r\n\r\n/** @brief Macro to disable the Internal Low Speed oscillator (LSI).\r\n * @note   LSI can not be disabled if the IWDG is running.\r\n * @note   When the LSI is stopped, LSIRDY flag goes low after 6 LSI oscillator\r\n *         clock cycles.\r\n */\r\n#define __HAL_RCC_LSI_DISABLE() (*(__IO uint32_t *)RCC_CSR_LSION_BB = DISABLE)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_HSE_Configuration HSE Configuration\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Macro to configure the External High Speed oscillator (HSE).\r\n * @note   Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not\r\n *         supported by this macro. User should request a transition to HSE Off\r\n *         first and then HSE On or HSE Bypass.\r\n * @note   After enabling the HSE (RCC_HSE_ON or RCC_HSE_Bypass), the application\r\n *         software should wait on HSERDY flag to be set indicating that HSE clock\r\n *         is stable and can be used to clock the PLL and/or system clock.\r\n * @note   HSE state can not be changed if it is used directly or through the\r\n *         PLL as system clock. In this case, you have to select another source\r\n *         of the system clock then change the HSE state (ex. disable it).\r\n * @note   The HSE is stopped by hardware when entering STOP and STANDBY modes.\r\n * @note   This function reset the CSSON bit, so if the clock security system(CSS)\r\n *         was previously enabled you have to enable it again after calling this\r\n *         function.\r\n * @param  __STATE__ specifies the new state of the HSE.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_HSE_OFF turn OFF the HSE oscillator, HSERDY flag goes low after\r\n *                              6 HSE oscillator clock cycles.\r\n *            @arg @ref RCC_HSE_ON turn ON the HSE oscillator\r\n *            @arg @ref RCC_HSE_BYPASS HSE oscillator bypassed with external clock\r\n */\r\n#define __HAL_RCC_HSE_CONFIG(__STATE__)         \\\r\n  do {                                          \\\r\n    if ((__STATE__) == RCC_HSE_ON) {            \\\r\n      SET_BIT(RCC->CR, RCC_CR_HSEON);           \\\r\n    } else if ((__STATE__) == RCC_HSE_OFF) {    \\\r\n      CLEAR_BIT(RCC->CR, RCC_CR_HSEON);         \\\r\n      CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);        \\\r\n    } else if ((__STATE__) == RCC_HSE_BYPASS) { \\\r\n      SET_BIT(RCC->CR, RCC_CR_HSEBYP);          \\\r\n      SET_BIT(RCC->CR, RCC_CR_HSEON);           \\\r\n    } else {                                    \\\r\n      CLEAR_BIT(RCC->CR, RCC_CR_HSEON);         \\\r\n      CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);        \\\r\n    }                                           \\\r\n  } while (0U)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_LSE_Configuration LSE Configuration\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Macro to configure the External Low Speed oscillator (LSE).\r\n * @note Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not supported by this macro.\r\n * @note   As the LSE is in the Backup domain and write access is denied to\r\n *         this domain after reset, you have to enable write access using\r\n *         @ref HAL_PWR_EnableBkUpAccess() function before to configure the LSE\r\n *         (to be done once after reset).\r\n * @note   After enabling the LSE (RCC_LSE_ON or RCC_LSE_BYPASS), the application\r\n *         software should wait on LSERDY flag to be set indicating that LSE clock\r\n *         is stable and can be used to clock the RTC.\r\n * @param  __STATE__ specifies the new state of the LSE.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref RCC_LSE_OFF turn OFF the LSE oscillator, LSERDY flag goes low after\r\n *                              6 LSE oscillator clock cycles.\r\n *            @arg @ref RCC_LSE_ON turn ON the LSE oscillator.\r\n *            @arg @ref RCC_LSE_BYPASS LSE oscillator bypassed with external clock.\r\n */\r\n#define __HAL_RCC_LSE_CONFIG(__STATE__)         \\\r\n  do {                                          \\\r\n    if ((__STATE__) == RCC_LSE_ON) {            \\\r\n      SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);       \\\r\n    } else if ((__STATE__) == RCC_LSE_OFF) {    \\\r\n      CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);     \\\r\n      CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);    \\\r\n    } else if ((__STATE__) == RCC_LSE_BYPASS) { \\\r\n      SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);      \\\r\n      SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);       \\\r\n    } else {                                    \\\r\n      CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);     \\\r\n      CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);    \\\r\n    }                                           \\\r\n  } while (0U)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_PLL_Configuration PLL Configuration\r\n * @{\r\n */\r\n\r\n/** @brief Macro to enable the main PLL.\r\n * @note   After enabling the main PLL, the application software should wait on\r\n *         PLLRDY flag to be set indicating that PLL clock is stable and can\r\n *         be used as system clock source.\r\n * @note   The main PLL is disabled by hardware when entering STOP and STANDBY modes.\r\n */\r\n#define __HAL_RCC_PLL_ENABLE() (*(__IO uint32_t *)RCC_CR_PLLON_BB = ENABLE)\r\n\r\n/** @brief Macro to disable the main PLL.\r\n * @note   The main PLL can not be disabled if it is used as system clock source\r\n */\r\n#define __HAL_RCC_PLL_DISABLE() (*(__IO uint32_t *)RCC_CR_PLLON_BB = DISABLE)\r\n\r\n/** @brief Macro to configure the main PLL clock source and multiplication factors.\r\n  * @note   This function must be used only when the main PLL is disabled.\r\n  *\r\n  * @param  __RCC_PLLSOURCE__ specifies the PLL entry clock source.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_PLLSOURCE_HSI_DIV2 HSI oscillator clock selected as PLL clock entry\r\n  *            @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL clock entry\r\n  * @param  __PLLMUL__ specifies the multiplication factor for PLL VCO output clock\r\n  *          This parameter can be one of the following values:\r\n  *             @arg @ref RCC_PLL_MUL4   PLLVCO = PLL clock entry x 4\r\n  *             @arg @ref RCC_PLL_MUL6   PLLVCO = PLL clock entry x 6\r\n  @if STM32F105xC\r\n  *             @arg @ref RCC_PLL_MUL6_5 PLLVCO = PLL clock entry x 6.5\r\n  @elseif STM32F107xC\r\n  *             @arg @ref RCC_PLL_MUL6_5 PLLVCO = PLL clock entry x 6.5\r\n  @else\r\n  *             @arg @ref RCC_PLL_MUL2   PLLVCO = PLL clock entry x 2\r\n  *             @arg @ref RCC_PLL_MUL3   PLLVCO = PLL clock entry x 3\r\n  *             @arg @ref RCC_PLL_MUL10  PLLVCO = PLL clock entry x 10\r\n  *             @arg @ref RCC_PLL_MUL11  PLLVCO = PLL clock entry x 11\r\n  *             @arg @ref RCC_PLL_MUL12  PLLVCO = PLL clock entry x 12\r\n  *             @arg @ref RCC_PLL_MUL13  PLLVCO = PLL clock entry x 13\r\n  *             @arg @ref RCC_PLL_MUL14  PLLVCO = PLL clock entry x 14\r\n  *             @arg @ref RCC_PLL_MUL15  PLLVCO = PLL clock entry x 15\r\n  *             @arg @ref RCC_PLL_MUL16  PLLVCO = PLL clock entry x 16\r\n  @endif\r\n  *             @arg @ref RCC_PLL_MUL8   PLLVCO = PLL clock entry x 8\r\n  *             @arg @ref RCC_PLL_MUL9   PLLVCO = PLL clock entry x 9\r\n  *\r\n  */\r\n#define __HAL_RCC_PLL_CONFIG(__RCC_PLLSOURCE__, __PLLMUL__) MODIFY_REG(RCC->CFGR, (RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL), ((__RCC_PLLSOURCE__) | (__PLLMUL__)))\r\n\r\n/** @brief  Get oscillator clock selected as PLL input clock\r\n * @retval The clock source used for PLL entry. The returned value can be one\r\n *         of the following:\r\n *             @arg @ref RCC_PLLSOURCE_HSI_DIV2 HSI oscillator clock selected as PLL input clock\r\n *             @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL input clock\r\n */\r\n#define __HAL_RCC_GET_PLL_OSCSOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Get_Clock_source Get Clock source\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Macro to configure the system clock source.\r\n * @param  __SYSCLKSOURCE__ specifies the system clock source.\r\n *          This parameter can be one of the following values:\r\n *              @arg @ref RCC_SYSCLKSOURCE_HSI HSI oscillator is used as system clock source.\r\n *              @arg @ref RCC_SYSCLKSOURCE_HSE HSE oscillator is used as system clock source.\r\n *              @arg @ref RCC_SYSCLKSOURCE_PLLCLK PLL output is used as system clock source.\r\n */\r\n#define __HAL_RCC_SYSCLK_CONFIG(__SYSCLKSOURCE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, (__SYSCLKSOURCE__))\r\n\r\n/** @brief  Macro to get the clock source used as system clock.\r\n * @retval The clock source used as system clock. The returned value can be one\r\n *         of the following:\r\n *             @arg @ref RCC_SYSCLKSOURCE_STATUS_HSI HSI used as system clock\r\n *             @arg @ref RCC_SYSCLKSOURCE_STATUS_HSE HSE used as system clock\r\n *             @arg @ref RCC_SYSCLKSOURCE_STATUS_PLLCLK PLL used as system clock\r\n */\r\n#define __HAL_RCC_GET_SYSCLK_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_MCOx_Clock_Config RCC Extended MCOx Clock Config\r\n * @{\r\n */\r\n\r\n#if defined(RCC_CFGR_MCO_3)\r\n/** @brief  Macro to configure the MCO clock.\r\n * @param  __MCOCLKSOURCE__ specifies the MCO clock source.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref RCC_MCO1SOURCE_NOCLOCK      No clock selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_SYSCLK       System clock (SYSCLK) selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_HSI          HSI selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_HSE          HSE selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_PLLCLK       PLL clock divided by 2 selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_PLL2CLK      PLL2 clock selected by 2 selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_PLL3CLK_DIV2 PLL3 clock divided by 2 selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_EXT_HSE XT1  external 3-25 MHz oscillator clock selected (for Ethernet) as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_PLL3CLK      PLL3 clock selected (for Ethernet) as MCO clock\r\n * @param  __MCODIV__ specifies the MCO clock prescaler.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref RCC_MCODIV_1 No division applied on MCO clock source\r\n */\r\n#else\r\n/** @brief  Macro to configure the MCO clock.\r\n * @param  __MCOCLKSOURCE__ specifies the MCO clock source.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref RCC_MCO1SOURCE_NOCLOCK No clock selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_SYSCLK  System clock (SYSCLK) selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_HSI HSI selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_HSE HSE selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_PLLCLK  PLL clock divided by 2 selected as MCO clock\r\n * @param  __MCODIV__ specifies the MCO clock prescaler.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref RCC_MCODIV_1 No division applied on MCO clock source\r\n */\r\n#endif\r\n\r\n#define __HAL_RCC_MCO1_CONFIG(__MCOCLKSOURCE__, __MCODIV__) MODIFY_REG(RCC->CFGR, RCC_CFGR_MCO, (__MCOCLKSOURCE__))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_RTC_Clock_Configuration RCC RTC Clock Configuration\r\n * @{\r\n */\r\n\r\n/** @brief Macro to configure the RTC clock (RTCCLK).\r\n * @note   As the RTC clock configuration bits are in the Backup domain and write\r\n *         access is denied to this domain after reset, you have to enable write\r\n *         access using the Power Backup Access macro before to configure\r\n *         the RTC clock source (to be done once after reset).\r\n * @note   Once the RTC clock is configured it can't be changed unless the\r\n *         Backup domain is reset using @ref __HAL_RCC_BACKUPRESET_FORCE() macro, or by\r\n *         a Power On Reset (POR).\r\n *\r\n * @param  __RTC_CLKSOURCE__ specifies the RTC clock source.\r\n *          This parameter can be one of the following values:\r\n *             @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock\r\n *             @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock\r\n *             @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock\r\n *             @arg @ref RCC_RTCCLKSOURCE_HSE_DIV128 HSE divided by 128 selected as RTC clock\r\n * @note   If the LSE or LSI is used as RTC clock source, the RTC continues to\r\n *         work in STOP and STANDBY modes, and can be used as wakeup source.\r\n *         However, when the HSE clock is used as RTC clock source, the RTC\r\n *         cannot be used in STOP and STANDBY modes.\r\n * @note   The maximum input clock frequency for RTC is 1MHz (when using HSE as\r\n *         RTC clock source).\r\n */\r\n#define __HAL_RCC_RTC_CONFIG(__RTC_CLKSOURCE__) MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, (__RTC_CLKSOURCE__))\r\n\r\n/** @brief Macro to get the RTC clock source.\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock\r\n *            @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock\r\n *            @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock\r\n *            @arg @ref RCC_RTCCLKSOURCE_HSE_DIV128 HSE divided by 128 selected as RTC clock\r\n */\r\n#define __HAL_RCC_GET_RTC_SOURCE() (READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL))\r\n\r\n/** @brief Macro to enable the the RTC clock.\r\n * @note   These macros must be used only after the RTC clock source was selected.\r\n */\r\n#define __HAL_RCC_RTC_ENABLE() (*(__IO uint32_t *)RCC_BDCR_RTCEN_BB = ENABLE)\r\n\r\n/** @brief Macro to disable the the RTC clock.\r\n * @note  These macros must be used only after the RTC clock source was selected.\r\n */\r\n#define __HAL_RCC_RTC_DISABLE() (*(__IO uint32_t *)RCC_BDCR_RTCEN_BB = DISABLE)\r\n\r\n/** @brief  Macro to force the Backup domain reset.\r\n * @note   This function resets the RTC peripheral (including the backup registers)\r\n *         and the RTC clock source selection in RCC_BDCR register.\r\n */\r\n#define __HAL_RCC_BACKUPRESET_FORCE() (*(__IO uint32_t *)RCC_BDCR_BDRST_BB = ENABLE)\r\n\r\n/** @brief  Macros to release the Backup domain reset.\r\n */\r\n#define __HAL_RCC_BACKUPRESET_RELEASE() (*(__IO uint32_t *)RCC_BDCR_BDRST_BB = DISABLE)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Flags_Interrupts_Management Flags Interrupts Management\r\n * @brief macros to manage the specified RCC Flags and interrupts.\r\n * @{\r\n */\r\n\r\n/** @brief Enable RCC interrupt.\r\n  * @param  __INTERRUPT__ specifies the RCC interrupt sources to be enabled.\r\n  *          This parameter can be any combination of the following values:\r\n  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt\r\n  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt\r\n  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt\r\n  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt\r\n  *            @arg @ref RCC_IT_PLLRDY main PLL ready interrupt\r\n  @if STM32F105xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @elsif STM32F107xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @endif\r\n  */\r\n#define __HAL_RCC_ENABLE_IT(__INTERRUPT__) (*(__IO uint8_t *)RCC_CIR_BYTE1_ADDRESS |= (__INTERRUPT__))\r\n\r\n/** @brief Disable RCC interrupt.\r\n  * @param  __INTERRUPT__ specifies the RCC interrupt sources to be disabled.\r\n  *          This parameter can be any combination of the following values:\r\n  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt\r\n  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt\r\n  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt\r\n  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt\r\n  *            @arg @ref RCC_IT_PLLRDY main PLL ready interrupt\r\n  @if STM32F105xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @elsif STM32F107xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @endif\r\n  */\r\n#define __HAL_RCC_DISABLE_IT(__INTERRUPT__) (*(__IO uint8_t *)RCC_CIR_BYTE1_ADDRESS &= (uint8_t)(~(__INTERRUPT__)))\r\n\r\n/** @brief Clear the RCC's interrupt pending bits.\r\n  * @param  __INTERRUPT__ specifies the interrupt pending bit to clear.\r\n  *          This parameter can be any combination of the following values:\r\n  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt.\r\n  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt.\r\n  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt.\r\n  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLRDY Main PLL ready interrupt.\r\n  @if STM32F105xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @elsif STM32F107xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @endif\r\n  *            @arg @ref RCC_IT_CSS Clock Security System interrupt\r\n  */\r\n#define __HAL_RCC_CLEAR_IT(__INTERRUPT__) (*(__IO uint8_t *)RCC_CIR_BYTE2_ADDRESS = (__INTERRUPT__))\r\n\r\n/** @brief Check the RCC's interrupt has occurred or not.\r\n  * @param  __INTERRUPT__ specifies the RCC interrupt source to check.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt.\r\n  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt.\r\n  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt.\r\n  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLRDY Main PLL ready interrupt.\r\n  @if STM32F105xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @elsif STM32F107xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @endif\r\n  *            @arg @ref RCC_IT_CSS Clock Security System interrupt\r\n  * @retval The new state of __INTERRUPT__ (TRUE or FALSE).\r\n  */\r\n#define __HAL_RCC_GET_IT(__INTERRUPT__) ((RCC->CIR & (__INTERRUPT__)) == (__INTERRUPT__))\r\n\r\n/** @brief Set RMVF bit to clear the reset flags.\r\n *         The reset flags are RCC_FLAG_PINRST, RCC_FLAG_PORRST, RCC_FLAG_SFTRST,\r\n *         RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST, RCC_FLAG_LPWRRST\r\n */\r\n#define __HAL_RCC_CLEAR_RESET_FLAGS() (*(__IO uint32_t *)RCC_CSR_RMVF_BB = ENABLE)\r\n\r\n/** @brief  Check RCC flag is set or not.\r\n  * @param  __FLAG__ specifies the flag to check.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_FLAG_HSIRDY HSI oscillator clock ready.\r\n  *            @arg @ref RCC_FLAG_HSERDY HSE oscillator clock ready.\r\n  *            @arg @ref RCC_FLAG_PLLRDY Main PLL clock ready.\r\n  @if STM32F105xx\r\n  *            @arg @ref RCC_FLAG_PLL2RDY Main PLL2 clock ready.\r\n  *            @arg @ref RCC_FLAG_PLLI2SRDY Main PLLI2S clock ready.\r\n  @elsif STM32F107xx\r\n  *            @arg @ref RCC_FLAG_PLL2RDY Main PLL2 clock ready.\r\n  *            @arg @ref RCC_FLAG_PLLI2SRDY Main PLLI2S clock ready.\r\n  @endif\r\n  *            @arg @ref RCC_FLAG_LSERDY LSE oscillator clock ready.\r\n  *            @arg @ref RCC_FLAG_LSIRDY LSI oscillator clock ready.\r\n  *            @arg @ref RCC_FLAG_PINRST  Pin reset.\r\n  *            @arg @ref RCC_FLAG_PORRST  POR/PDR reset.\r\n  *            @arg @ref RCC_FLAG_SFTRST  Software reset.\r\n  *            @arg @ref RCC_FLAG_IWDGRST Independent Watchdog reset.\r\n  *            @arg @ref RCC_FLAG_WWDGRST Window Watchdog reset.\r\n  *            @arg @ref RCC_FLAG_LPWRRST Low Power reset.\r\n  * @retval The new state of __FLAG__ (TRUE or FALSE).\r\n  */\r\n#define __HAL_RCC_GET_FLAG(__FLAG__) (((((__FLAG__) >> 5U) == CR_REG_INDEX) ? RCC->CR : ((((__FLAG__) >> 5U) == BDCR_REG_INDEX) ? RCC->BDCR : RCC->CSR)) & (1U << ((__FLAG__)&RCC_FLAG_MASK)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Include RCC HAL Extension module */\r\n#include \"stm32f1xx_hal_rcc_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup RCC_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup RCC_Exported_Functions_Group1\r\n * @{\r\n */\r\n\r\n/* Initialization and de-initialization functions  ******************************/\r\nHAL_StatusTypeDef HAL_RCC_DeInit(void);\r\nHAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct);\r\nHAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCC_Exported_Functions_Group2\r\n * @{\r\n */\r\n\r\n/* Peripheral Control functions  ************************************************/\r\nvoid     HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv);\r\nvoid     HAL_RCC_EnableCSS(void);\r\nvoid     HAL_RCC_DisableCSS(void);\r\nuint32_t HAL_RCC_GetSysClockFreq(void);\r\nuint32_t HAL_RCC_GetHCLKFreq(void);\r\nuint32_t HAL_RCC_GetPCLK1Freq(void);\r\nuint32_t HAL_RCC_GetPCLK2Freq(void);\r\nvoid     HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct);\r\nvoid     HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency);\r\n\r\n/* CSS NMI IRQ handler */\r\nvoid HAL_RCC_NMI_IRQHandler(void);\r\n\r\n/* User Callbacks in non blocking mode (IT mode) */\r\nvoid HAL_RCC_CSSCallback(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCC_Private_Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup RCC_Timeout RCC Timeout\r\n * @{\r\n */\r\n\r\n/* Disable Backup domain write protection state change timeout */\r\n#define RCC_DBP_TIMEOUT_VALUE 100U /* 100 ms */\r\n/* LSE state change timeout */\r\n#define RCC_LSE_TIMEOUT_VALUE     LSE_STARTUP_TIMEOUT\r\n#define CLOCKSWITCH_TIMEOUT_VALUE 5000 /* 5 s    */\r\n#define HSE_TIMEOUT_VALUE         HSE_STARTUP_TIMEOUT\r\n#define HSI_TIMEOUT_VALUE         2U /* 2 ms (minimum Tick + 1) */\r\n#define LSI_TIMEOUT_VALUE         2U /* 2 ms (minimum Tick + 1) */\r\n#define PLL_TIMEOUT_VALUE         2U /* 2 ms (minimum Tick + 1) */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Register_Offset Register offsets\r\n * @{\r\n */\r\n#define RCC_OFFSET      (RCC_BASE - PERIPH_BASE)\r\n#define RCC_CR_OFFSET   0x00U\r\n#define RCC_CFGR_OFFSET 0x04U\r\n#define RCC_CIR_OFFSET  0x08U\r\n#define RCC_BDCR_OFFSET 0x20U\r\n#define RCC_CSR_OFFSET  0x24U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_BitAddress_AliasRegion BitAddress AliasRegion\r\n * @brief RCC registers bit address in the alias region\r\n * @{\r\n */\r\n#define RCC_CR_OFFSET_BB   (RCC_OFFSET + RCC_CR_OFFSET)\r\n#define RCC_CFGR_OFFSET_BB (RCC_OFFSET + RCC_CFGR_OFFSET)\r\n#define RCC_CIR_OFFSET_BB  (RCC_OFFSET + RCC_CIR_OFFSET)\r\n#define RCC_BDCR_OFFSET_BB (RCC_OFFSET + RCC_BDCR_OFFSET)\r\n#define RCC_CSR_OFFSET_BB  (RCC_OFFSET + RCC_CSR_OFFSET)\r\n\r\n/* --- CR Register ---*/\r\n/* Alias word address of HSION bit */\r\n#define RCC_HSION_BIT_NUMBER RCC_CR_HSION_Pos\r\n#define RCC_CR_HSION_BB      ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_HSION_BIT_NUMBER * 4U)))\r\n/* Alias word address of HSEON bit */\r\n#define RCC_HSEON_BIT_NUMBER RCC_CR_HSEON_Pos\r\n#define RCC_CR_HSEON_BB      ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_HSEON_BIT_NUMBER * 4U)))\r\n/* Alias word address of CSSON bit */\r\n#define RCC_CSSON_BIT_NUMBER RCC_CR_CSSON_Pos\r\n#define RCC_CR_CSSON_BB      ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_CSSON_BIT_NUMBER * 4U)))\r\n/* Alias word address of PLLON bit */\r\n#define RCC_PLLON_BIT_NUMBER RCC_CR_PLLON_Pos\r\n#define RCC_CR_PLLON_BB      ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_PLLON_BIT_NUMBER * 4U)))\r\n\r\n/* --- CSR Register ---*/\r\n/* Alias word address of LSION bit */\r\n#define RCC_LSION_BIT_NUMBER RCC_CSR_LSION_Pos\r\n#define RCC_CSR_LSION_BB     ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32U) + (RCC_LSION_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of RMVF bit */\r\n#define RCC_RMVF_BIT_NUMBER RCC_CSR_RMVF_Pos\r\n#define RCC_CSR_RMVF_BB     ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32U) + (RCC_RMVF_BIT_NUMBER * 4U)))\r\n\r\n/* --- BDCR Registers ---*/\r\n/* Alias word address of LSEON bit */\r\n#define RCC_LSEON_BIT_NUMBER RCC_BDCR_LSEON_Pos\r\n#define RCC_BDCR_LSEON_BB    ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32U) + (RCC_LSEON_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of LSEON bit */\r\n#define RCC_LSEBYP_BIT_NUMBER RCC_BDCR_LSEBYP_Pos\r\n#define RCC_BDCR_LSEBYP_BB    ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32U) + (RCC_LSEBYP_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of RTCEN bit */\r\n#define RCC_RTCEN_BIT_NUMBER RCC_BDCR_RTCEN_Pos\r\n#define RCC_BDCR_RTCEN_BB    ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32U) + (RCC_RTCEN_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of BDRST bit */\r\n#define RCC_BDRST_BIT_NUMBER RCC_BDCR_BDRST_Pos\r\n#define RCC_BDCR_BDRST_BB    ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32U) + (RCC_BDRST_BIT_NUMBER * 4U)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* CR register byte 2 (Bits[23:16]) base address */\r\n#define RCC_CR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + RCC_CR_OFFSET + 0x02U))\r\n\r\n/* CIR register byte 1 (Bits[15:8]) base address */\r\n#define RCC_CIR_BYTE1_ADDRESS ((uint32_t)(RCC_BASE + RCC_CIR_OFFSET + 0x01U))\r\n\r\n/* CIR register byte 2 (Bits[23:16]) base address */\r\n#define RCC_CIR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + RCC_CIR_OFFSET + 0x02U))\r\n\r\n/* Defines used for Flags */\r\n#define CR_REG_INDEX   ((uint8_t)1)\r\n#define BDCR_REG_INDEX ((uint8_t)2)\r\n#define CSR_REG_INDEX  ((uint8_t)3)\r\n\r\n#define RCC_FLAG_MASK ((uint8_t)0x1F)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCC_Private_Macros\r\n * @{\r\n */\r\n/** @defgroup RCC_Alias_For_Legacy Alias define maintained for legacy\r\n * @{\r\n */\r\n#define __HAL_RCC_SYSCFG_CLK_DISABLE   __HAL_RCC_AFIO_CLK_DISABLE\r\n#define __HAL_RCC_SYSCFG_CLK_ENABLE    __HAL_RCC_AFIO_CLK_ENABLE\r\n#define __HAL_RCC_SYSCFG_FORCE_RESET   __HAL_RCC_AFIO_FORCE_RESET\r\n#define __HAL_RCC_SYSCFG_RELEASE_RESET __HAL_RCC_AFIO_RELEASE_RESET\r\n/**\r\n * @}\r\n */\r\n\r\n#define IS_RCC_PLLSOURCE(__SOURCE__) (((__SOURCE__) == RCC_PLLSOURCE_HSI_DIV2) || ((__SOURCE__) == RCC_PLLSOURCE_HSE))\r\n#define IS_RCC_OSCILLATORTYPE(__OSCILLATOR__)                                                                                                                                                      \\\r\n  (((__OSCILLATOR__) == RCC_OSCILLATORTYPE_NONE) || (((__OSCILLATOR__)&RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) || (((__OSCILLATOR__)&RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) \\\r\n   || (((__OSCILLATOR__)&RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) || (((__OSCILLATOR__)&RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE))\r\n#define IS_RCC_HSE(__HSE__)                 (((__HSE__) == RCC_HSE_OFF) || ((__HSE__) == RCC_HSE_ON) || ((__HSE__) == RCC_HSE_BYPASS))\r\n#define IS_RCC_LSE(__LSE__)                 (((__LSE__) == RCC_LSE_OFF) || ((__LSE__) == RCC_LSE_ON) || ((__LSE__) == RCC_LSE_BYPASS))\r\n#define IS_RCC_HSI(__HSI__)                 (((__HSI__) == RCC_HSI_OFF) || ((__HSI__) == RCC_HSI_ON))\r\n#define IS_RCC_CALIBRATION_VALUE(__VALUE__) ((__VALUE__) <= 0x1FU)\r\n#define IS_RCC_LSI(__LSI__)                 (((__LSI__) == RCC_LSI_OFF) || ((__LSI__) == RCC_LSI_ON))\r\n#define IS_RCC_PLL(__PLL__)                 (((__PLL__) == RCC_PLL_NONE) || ((__PLL__) == RCC_PLL_OFF) || ((__PLL__) == RCC_PLL_ON))\r\n\r\n#define IS_RCC_CLOCKTYPE(CLK)                                                                                                                                           \\\r\n  ((((CLK)&RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) || (((CLK)&RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) || (((CLK)&RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) \\\r\n   || (((CLK)&RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2))\r\n#define IS_RCC_SYSCLKSOURCE(__SOURCE__)        (((__SOURCE__) == RCC_SYSCLKSOURCE_HSI) || ((__SOURCE__) == RCC_SYSCLKSOURCE_HSE) || ((__SOURCE__) == RCC_SYSCLKSOURCE_PLLCLK))\r\n#define IS_RCC_SYSCLKSOURCE_STATUS(__SOURCE__) (((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_HSI) || ((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_HSE) || ((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_PLLCLK))\r\n#define IS_RCC_HCLK(__HCLK__)                                                                                                                                                   \\\r\n  (((__HCLK__) == RCC_SYSCLK_DIV1) || ((__HCLK__) == RCC_SYSCLK_DIV2) || ((__HCLK__) == RCC_SYSCLK_DIV4) || ((__HCLK__) == RCC_SYSCLK_DIV8) || ((__HCLK__) == RCC_SYSCLK_DIV16) \\\r\n   || ((__HCLK__) == RCC_SYSCLK_DIV64) || ((__HCLK__) == RCC_SYSCLK_DIV128) || ((__HCLK__) == RCC_SYSCLK_DIV256) || ((__HCLK__) == RCC_SYSCLK_DIV512))\r\n#define IS_RCC_PCLK(__PCLK__)  (((__PCLK__) == RCC_HCLK_DIV1) || ((__PCLK__) == RCC_HCLK_DIV2) || ((__PCLK__) == RCC_HCLK_DIV4) || ((__PCLK__) == RCC_HCLK_DIV8) || ((__PCLK__) == RCC_HCLK_DIV16))\r\n#define IS_RCC_MCO(__MCO__)    ((__MCO__) == RCC_MCO)\r\n#define IS_RCC_MCODIV(__DIV__) (((__DIV__) == RCC_MCODIV_1))\r\n#define IS_RCC_RTCCLKSOURCE(__SOURCE__) \\\r\n  (((__SOURCE__) == RCC_RTCCLKSOURCE_NO_CLK) || ((__SOURCE__) == RCC_RTCCLKSOURCE_LSE) || ((__SOURCE__) == RCC_RTCCLKSOURCE_LSI) || ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV128))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_RCC_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_rcc_ex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of RCC HAL Extension module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_RCC_EX_H\r\n#define __STM32F1xx_HAL_RCC_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup RCCEx\r\n * @{\r\n */\r\n\r\n/** @addtogroup RCCEx_Private_Constants\r\n * @{\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n\r\n/* Alias word address of PLLI2SON bit */\r\n#define PLLI2SON_BITNUMBER RCC_CR_PLL3ON_Pos\r\n#define RCC_CR_PLLI2SON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (PLLI2SON_BITNUMBER * 4U)))\r\n/* Alias word address of PLL2ON bit */\r\n#define PLL2ON_BITNUMBER RCC_CR_PLL2ON_Pos\r\n#define RCC_CR_PLL2ON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (PLL2ON_BITNUMBER * 4U)))\r\n\r\n#define PLLI2S_TIMEOUT_VALUE 100U /* 100 ms */\r\n#define PLL2_TIMEOUT_VALUE   100U /* 100 ms */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#define CR_REG_INDEX ((uint8_t)1)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCCEx_Private_Macros\r\n * @{\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define IS_RCC_PREDIV1_SOURCE(__SOURCE__) (((__SOURCE__) == RCC_PREDIV1_SOURCE_HSE) || ((__SOURCE__) == RCC_PREDIV1_SOURCE_PLL2))\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB) || defined(STM32F100xE)\r\n#define IS_RCC_HSE_PREDIV(__DIV__)                                                                                                                                                                    \\\r\n  (((__DIV__) == RCC_HSE_PREDIV_DIV1) || ((__DIV__) == RCC_HSE_PREDIV_DIV2) || ((__DIV__) == RCC_HSE_PREDIV_DIV3) || ((__DIV__) == RCC_HSE_PREDIV_DIV4) || ((__DIV__) == RCC_HSE_PREDIV_DIV5)         \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV_DIV6) || ((__DIV__) == RCC_HSE_PREDIV_DIV7) || ((__DIV__) == RCC_HSE_PREDIV_DIV8) || ((__DIV__) == RCC_HSE_PREDIV_DIV9) || ((__DIV__) == RCC_HSE_PREDIV_DIV10)     \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV_DIV11) || ((__DIV__) == RCC_HSE_PREDIV_DIV12) || ((__DIV__) == RCC_HSE_PREDIV_DIV13) || ((__DIV__) == RCC_HSE_PREDIV_DIV14) || ((__DIV__) == RCC_HSE_PREDIV_DIV15) \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV_DIV16))\r\n\r\n#else\r\n#define IS_RCC_HSE_PREDIV(__DIV__) (((__DIV__) == RCC_HSE_PREDIV_DIV1) || ((__DIV__) == RCC_HSE_PREDIV_DIV2))\r\n#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define IS_RCC_PLL_MUL(__MUL__)                                                                                                                                                           \\\r\n  (((__MUL__) == RCC_PLL_MUL4) || ((__MUL__) == RCC_PLL_MUL5) || ((__MUL__) == RCC_PLL_MUL6) || ((__MUL__) == RCC_PLL_MUL7) || ((__MUL__) == RCC_PLL_MUL8) || ((__MUL__) == RCC_PLL_MUL9) \\\r\n   || ((__MUL__) == RCC_PLL_MUL6_5))\r\n\r\n#define IS_RCC_MCO1SOURCE(__SOURCE__)                                                                                                                                                   \\\r\n  (((__SOURCE__) == RCC_MCO1SOURCE_SYSCLK) || ((__SOURCE__) == RCC_MCO1SOURCE_HSI) || ((__SOURCE__) == RCC_MCO1SOURCE_HSE) || ((__SOURCE__) == RCC_MCO1SOURCE_PLLCLK)                   \\\r\n   || ((__SOURCE__) == RCC_MCO1SOURCE_PLL2CLK) || ((__SOURCE__) == RCC_MCO1SOURCE_PLL3CLK) || ((__SOURCE__) == RCC_MCO1SOURCE_PLL3CLK_DIV2) || ((__SOURCE__) == RCC_MCO1SOURCE_EXT_HSE) \\\r\n   || ((__SOURCE__) == RCC_MCO1SOURCE_NOCLOCK))\r\n\r\n#else\r\n#define IS_RCC_PLL_MUL(__MUL__)                                                                                                                                                                  \\\r\n  (((__MUL__) == RCC_PLL_MUL2) || ((__MUL__) == RCC_PLL_MUL3) || ((__MUL__) == RCC_PLL_MUL4) || ((__MUL__) == RCC_PLL_MUL5) || ((__MUL__) == RCC_PLL_MUL6) || ((__MUL__) == RCC_PLL_MUL7)        \\\r\n   || ((__MUL__) == RCC_PLL_MUL8) || ((__MUL__) == RCC_PLL_MUL9) || ((__MUL__) == RCC_PLL_MUL10) || ((__MUL__) == RCC_PLL_MUL11) || ((__MUL__) == RCC_PLL_MUL12) || ((__MUL__) == RCC_PLL_MUL13) \\\r\n   || ((__MUL__) == RCC_PLL_MUL14) || ((__MUL__) == RCC_PLL_MUL15) || ((__MUL__) == RCC_PLL_MUL16))\r\n\r\n#define IS_RCC_MCO1SOURCE(__SOURCE__)                                                                                                                                 \\\r\n  (((__SOURCE__) == RCC_MCO1SOURCE_SYSCLK) || ((__SOURCE__) == RCC_MCO1SOURCE_HSI) || ((__SOURCE__) == RCC_MCO1SOURCE_HSE) || ((__SOURCE__) == RCC_MCO1SOURCE_PLLCLK) \\\r\n   || ((__SOURCE__) == RCC_MCO1SOURCE_NOCLOCK))\r\n\r\n#endif /* STM32F105xC || STM32F107xC*/\r\n\r\n#define IS_RCC_ADCPLLCLK_DIV(__ADCCLK__) (((__ADCCLK__) == RCC_ADCPCLK2_DIV2) || ((__ADCCLK__) == RCC_ADCPCLK2_DIV4) || ((__ADCCLK__) == RCC_ADCPCLK2_DIV6) || ((__ADCCLK__) == RCC_ADCPCLK2_DIV8))\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define IS_RCC_I2S2CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_I2S2CLKSOURCE_SYSCLK) || ((__SOURCE__) == RCC_I2S2CLKSOURCE_PLLI2S_VCO))\r\n\r\n#define IS_RCC_I2S3CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_I2S3CLKSOURCE_SYSCLK) || ((__SOURCE__) == RCC_I2S3CLKSOURCE_PLLI2S_VCO))\r\n\r\n#define IS_RCC_USBPLLCLK_DIV(__USBCLK__) (((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV2) || ((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV3))\r\n\r\n#define IS_RCC_PLLI2S_MUL(__MUL__)                                                                                                                                           \\\r\n  (((__MUL__) == RCC_PLLI2S_MUL8) || ((__MUL__) == RCC_PLLI2S_MUL9) || ((__MUL__) == RCC_PLLI2S_MUL10) || ((__MUL__) == RCC_PLLI2S_MUL11) || ((__MUL__) == RCC_PLLI2S_MUL12) \\\r\n   || ((__MUL__) == RCC_PLLI2S_MUL13) || ((__MUL__) == RCC_PLLI2S_MUL14) || ((__MUL__) == RCC_PLLI2S_MUL16) || ((__MUL__) == RCC_PLLI2S_MUL20))\r\n\r\n#define IS_RCC_HSE_PREDIV2(__DIV__)                                                                                                                                                                    \\\r\n  (((__DIV__) == RCC_HSE_PREDIV2_DIV1) || ((__DIV__) == RCC_HSE_PREDIV2_DIV2) || ((__DIV__) == RCC_HSE_PREDIV2_DIV3) || ((__DIV__) == RCC_HSE_PREDIV2_DIV4) || ((__DIV__) == RCC_HSE_PREDIV2_DIV5)     \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV2_DIV6) || ((__DIV__) == RCC_HSE_PREDIV2_DIV7) || ((__DIV__) == RCC_HSE_PREDIV2_DIV8) || ((__DIV__) == RCC_HSE_PREDIV2_DIV9) || ((__DIV__) == RCC_HSE_PREDIV2_DIV10) \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV2_DIV11) || ((__DIV__) == RCC_HSE_PREDIV2_DIV12) || ((__DIV__) == RCC_HSE_PREDIV2_DIV13) || ((__DIV__) == RCC_HSE_PREDIV2_DIV14)                                     \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV2_DIV15) || ((__DIV__) == RCC_HSE_PREDIV2_DIV16))\r\n\r\n#define IS_RCC_PLL2(__PLL__) (((__PLL__) == RCC_PLL2_NONE) || ((__PLL__) == RCC_PLL2_OFF) || ((__PLL__) == RCC_PLL2_ON))\r\n\r\n#define IS_RCC_PLL2_MUL(__MUL__)                                                                                                                                                                    \\\r\n  (((__MUL__) == RCC_PLL2_MUL8) || ((__MUL__) == RCC_PLL2_MUL9) || ((__MUL__) == RCC_PLL2_MUL10) || ((__MUL__) == RCC_PLL2_MUL11) || ((__MUL__) == RCC_PLL2_MUL12) || ((__MUL__) == RCC_PLL2_MUL13) \\\r\n   || ((__MUL__) == RCC_PLL2_MUL14) || ((__MUL__) == RCC_PLL2_MUL16) || ((__MUL__) == RCC_PLL2_MUL20))\r\n\r\n#define IS_RCC_PERIPHCLOCK(__SELECTION__)                                                                                                                                                   \\\r\n  ((((__SELECTION__)&RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || (((__SELECTION__)&RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || (((__SELECTION__)&RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2) \\\r\n   || (((__SELECTION__)&RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3) || (((__SELECTION__)&RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB))\r\n\r\n#elif defined(STM32F103xE) || defined(STM32F103xG)\r\n\r\n#define IS_RCC_I2S2CLKSOURCE(__SOURCE__) ((__SOURCE__) == RCC_I2S2CLKSOURCE_SYSCLK)\r\n\r\n#define IS_RCC_I2S3CLKSOURCE(__SOURCE__) ((__SOURCE__) == RCC_I2S3CLKSOURCE_SYSCLK)\r\n\r\n#define IS_RCC_PERIPHCLOCK(__SELECTION__)                                                                                                                                                   \\\r\n  ((((__SELECTION__)&RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || (((__SELECTION__)&RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || (((__SELECTION__)&RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2) \\\r\n   || (((__SELECTION__)&RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3) || (((__SELECTION__)&RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB))\r\n\r\n#elif defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB)\r\n\r\n#define IS_RCC_PERIPHCLOCK(__SELECTION__) \\\r\n  ((((__SELECTION__)&RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || (((__SELECTION__)&RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || (((__SELECTION__)&RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB))\r\n\r\n#else\r\n\r\n#define IS_RCC_PERIPHCLOCK(__SELECTION__) ((((__SELECTION__)&RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || (((__SELECTION__)&RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC))\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n\r\n#define IS_RCC_USBPLLCLK_DIV(__USBCLK__) (((__USBCLK__) == RCC_USBCLKSOURCE_PLL) || ((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV1_5))\r\n\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n\r\n/** @defgroup RCCEx_Exported_Types RCCEx Exported Types\r\n * @{\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/**\r\n * @brief  RCC PLL2 configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t PLL2State; /*!< The new state of the PLL2.\r\n                          This parameter can be a value of @ref RCCEx_PLL2_Config */\r\n\r\n  uint32_t PLL2MUL; /*!< PLL2MUL: Multiplication factor for PLL2 VCO input clock\r\n                      This parameter must be a value of @ref RCCEx_PLL2_Multiplication_Factor*/\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t HSEPrediv2Value; /*!<  The Prediv2 factor value.\r\n                                 This parameter can be a value of @ref RCCEx_Prediv2_Factor */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n} RCC_PLL2InitTypeDef;\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @brief  RCC Internal/External Oscillator (HSE, HSI, LSE and LSI) configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t OscillatorType; /*!< The oscillators to be configured.\r\n                                 This parameter can be a value of @ref RCC_Oscillator_Type */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t Prediv1Source; /*!<  The Prediv1 source value.\r\n                                 This parameter can be a value of @ref RCCEx_Prediv1_Source */\r\n#endif                    /* STM32F105xC || STM32F107xC */\r\n\r\n  uint32_t HSEState; /*!< The new state of the HSE.\r\n                          This parameter can be a value of @ref RCC_HSE_Config */\r\n\r\n  uint32_t HSEPredivValue; /*!<  The Prediv1 factor value (named PREDIV1 or PLLXTPRE in RM)\r\n                                 This parameter can be a value of @ref RCCEx_Prediv1_Factor */\r\n\r\n  uint32_t LSEState; /*!<  The new state of the LSE.\r\n                           This parameter can be a value of @ref RCC_LSE_Config */\r\n\r\n  uint32_t HSIState; /*!< The new state of the HSI.\r\n                          This parameter can be a value of @ref RCC_HSI_Config */\r\n\r\n  uint32_t HSICalibrationValue; /*!< The HSI calibration trimming value (default is RCC_HSICALIBRATION_DEFAULT).\r\n                                     This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x1F */\r\n\r\n  uint32_t LSIState; /*!<  The new state of the LSI.\r\n                           This parameter can be a value of @ref RCC_LSI_Config */\r\n\r\n  RCC_PLLInitTypeDef PLL; /*!< PLL structure parameters */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  RCC_PLL2InitTypeDef PLL2; /*!< PLL2 structure parameters */\r\n#endif                      /* STM32F105xC || STM32F107xC */\r\n} RCC_OscInitTypeDef;\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/**\r\n * @brief  RCC PLLI2S configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t PLLI2SMUL; /*!< PLLI2SMUL: Multiplication factor for PLLI2S VCO input clock\r\n                      This parameter must be a value of @ref RCCEx_PLLI2S_Multiplication_Factor*/\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t HSEPrediv2Value; /*!<  The Prediv2 factor value.\r\n                                 This parameter can be a value of @ref RCCEx_Prediv2_Factor */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n} RCC_PLLI2SInitTypeDef;\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @brief  RCC extended clocks structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured.\r\n                                  This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */\r\n\r\n  uint32_t RTCClockSelection; /*!< specifies the RTC clock source.\r\n                               This parameter can be a value of @ref RCC_RTC_Clock_Source */\r\n\r\n  uint32_t AdcClockSelection; /*!< ADC clock source\r\n                               This parameter can be a value of @ref RCCEx_ADC_Prescaler */\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t I2s2ClockSelection; /*!< I2S2 clock source\r\n                               This parameter can be a value of @ref RCCEx_I2S2_Clock_Source */\r\n\r\n  uint32_t I2s3ClockSelection; /*!< I2S3 clock source\r\n                               This parameter can be a value of @ref RCCEx_I2S3_Clock_Source */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  RCC_PLLI2SInitTypeDef PLLI2S; /*!< PLL I2S structure parameters\r\n                                     This parameter will be used only when PLLI2S is selected as Clock Source I2S2 or I2S3 */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t UsbClockSelection; /*!< USB clock source\r\n                               This parameter can be a value of @ref RCCEx_USB_Prescaler */\r\n\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n} RCC_PeriphCLKInitTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup RCCEx_Exported_Constants RCCEx Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup RCCEx_Periph_Clock_Selection Periph Clock Selection\r\n * @{\r\n */\r\n#define RCC_PERIPHCLK_RTC 0x00000001U\r\n#define RCC_PERIPHCLK_ADC 0x00000002U\r\n#if defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_PERIPHCLK_I2S2 0x00000004U\r\n#define RCC_PERIPHCLK_I2S3 0x00000008U\r\n#endif /* STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_PERIPHCLK_USB 0x00000010U\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_ADC_Prescaler ADC Prescaler\r\n * @{\r\n */\r\n#define RCC_ADCPCLK2_DIV2 RCC_CFGR_ADCPRE_DIV2\r\n#define RCC_ADCPCLK2_DIV4 RCC_CFGR_ADCPRE_DIV4\r\n#define RCC_ADCPCLK2_DIV6 RCC_CFGR_ADCPRE_DIV6\r\n#define RCC_ADCPCLK2_DIV8 RCC_CFGR_ADCPRE_DIV8\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_I2S2_Clock_Source I2S2 Clock Source\r\n * @{\r\n */\r\n#define RCC_I2S2CLKSOURCE_SYSCLK 0x00000000U\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_I2S2CLKSOURCE_PLLI2S_VCO RCC_CFGR2_I2S2SRC\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_I2S3_Clock_Source I2S3 Clock Source\r\n * @{\r\n */\r\n#define RCC_I2S3CLKSOURCE_SYSCLK 0x00000000U\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_I2S3CLKSOURCE_PLLI2S_VCO RCC_CFGR2_I2S3SRC\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n\r\n/** @defgroup RCCEx_USB_Prescaler USB Prescaler\r\n * @{\r\n */\r\n#define RCC_USBCLKSOURCE_PLL        RCC_CFGR_USBPRE\r\n#define RCC_USBCLKSOURCE_PLL_DIV1_5 0x00000000U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_USB_Prescaler USB Prescaler\r\n * @{\r\n */\r\n#define RCC_USBCLKSOURCE_PLL_DIV2 RCC_CFGR_OTGFSPRE\r\n#define RCC_USBCLKSOURCE_PLL_DIV3 0x00000000U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_PLLI2S_Multiplication_Factor PLLI2S Multiplication Factor\r\n * @{\r\n */\r\n\r\n#define RCC_PLLI2S_MUL8  RCC_CFGR2_PLL3MUL8  /*!< PLLI2S input clock * 8 */\r\n#define RCC_PLLI2S_MUL9  RCC_CFGR2_PLL3MUL9  /*!< PLLI2S input clock * 9 */\r\n#define RCC_PLLI2S_MUL10 RCC_CFGR2_PLL3MUL10 /*!< PLLI2S input clock * 10 */\r\n#define RCC_PLLI2S_MUL11 RCC_CFGR2_PLL3MUL11 /*!< PLLI2S input clock * 11 */\r\n#define RCC_PLLI2S_MUL12 RCC_CFGR2_PLL3MUL12 /*!< PLLI2S input clock * 12 */\r\n#define RCC_PLLI2S_MUL13 RCC_CFGR2_PLL3MUL13 /*!< PLLI2S input clock * 13 */\r\n#define RCC_PLLI2S_MUL14 RCC_CFGR2_PLL3MUL14 /*!< PLLI2S input clock * 14 */\r\n#define RCC_PLLI2S_MUL16 RCC_CFGR2_PLL3MUL16 /*!< PLLI2S input clock * 16 */\r\n#define RCC_PLLI2S_MUL20 RCC_CFGR2_PLL3MUL20 /*!< PLLI2S input clock * 20 */\r\n\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_Prediv1_Source Prediv1 Source\r\n * @{\r\n */\r\n\r\n#define RCC_PREDIV1_SOURCE_HSE  RCC_CFGR2_PREDIV1SRC_HSE\r\n#define RCC_PREDIV1_SOURCE_PLL2 RCC_CFGR2_PREDIV1SRC_PLL2\r\n\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/** @defgroup RCCEx_Prediv1_Factor HSE Prediv1 Factor\r\n * @{\r\n */\r\n\r\n#define RCC_HSE_PREDIV_DIV1 0x00000000U\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB) || defined(STM32F100xE)\r\n#define RCC_HSE_PREDIV_DIV2  RCC_CFGR2_PREDIV1_DIV2\r\n#define RCC_HSE_PREDIV_DIV3  RCC_CFGR2_PREDIV1_DIV3\r\n#define RCC_HSE_PREDIV_DIV4  RCC_CFGR2_PREDIV1_DIV4\r\n#define RCC_HSE_PREDIV_DIV5  RCC_CFGR2_PREDIV1_DIV5\r\n#define RCC_HSE_PREDIV_DIV6  RCC_CFGR2_PREDIV1_DIV6\r\n#define RCC_HSE_PREDIV_DIV7  RCC_CFGR2_PREDIV1_DIV7\r\n#define RCC_HSE_PREDIV_DIV8  RCC_CFGR2_PREDIV1_DIV8\r\n#define RCC_HSE_PREDIV_DIV9  RCC_CFGR2_PREDIV1_DIV9\r\n#define RCC_HSE_PREDIV_DIV10 RCC_CFGR2_PREDIV1_DIV10\r\n#define RCC_HSE_PREDIV_DIV11 RCC_CFGR2_PREDIV1_DIV11\r\n#define RCC_HSE_PREDIV_DIV12 RCC_CFGR2_PREDIV1_DIV12\r\n#define RCC_HSE_PREDIV_DIV13 RCC_CFGR2_PREDIV1_DIV13\r\n#define RCC_HSE_PREDIV_DIV14 RCC_CFGR2_PREDIV1_DIV14\r\n#define RCC_HSE_PREDIV_DIV15 RCC_CFGR2_PREDIV1_DIV15\r\n#define RCC_HSE_PREDIV_DIV16 RCC_CFGR2_PREDIV1_DIV16\r\n#else\r\n#define RCC_HSE_PREDIV_DIV2 RCC_CFGR_PLLXTPRE\r\n#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_Prediv2_Factor HSE Prediv2 Factor\r\n * @{\r\n */\r\n\r\n#define RCC_HSE_PREDIV2_DIV1  RCC_CFGR2_PREDIV2_DIV1  /*!< PREDIV2 input clock not divided */\r\n#define RCC_HSE_PREDIV2_DIV2  RCC_CFGR2_PREDIV2_DIV2  /*!< PREDIV2 input clock divided by 2 */\r\n#define RCC_HSE_PREDIV2_DIV3  RCC_CFGR2_PREDIV2_DIV3  /*!< PREDIV2 input clock divided by 3 */\r\n#define RCC_HSE_PREDIV2_DIV4  RCC_CFGR2_PREDIV2_DIV4  /*!< PREDIV2 input clock divided by 4 */\r\n#define RCC_HSE_PREDIV2_DIV5  RCC_CFGR2_PREDIV2_DIV5  /*!< PREDIV2 input clock divided by 5 */\r\n#define RCC_HSE_PREDIV2_DIV6  RCC_CFGR2_PREDIV2_DIV6  /*!< PREDIV2 input clock divided by 6 */\r\n#define RCC_HSE_PREDIV2_DIV7  RCC_CFGR2_PREDIV2_DIV7  /*!< PREDIV2 input clock divided by 7 */\r\n#define RCC_HSE_PREDIV2_DIV8  RCC_CFGR2_PREDIV2_DIV8  /*!< PREDIV2 input clock divided by 8 */\r\n#define RCC_HSE_PREDIV2_DIV9  RCC_CFGR2_PREDIV2_DIV9  /*!< PREDIV2 input clock divided by 9 */\r\n#define RCC_HSE_PREDIV2_DIV10 RCC_CFGR2_PREDIV2_DIV10 /*!< PREDIV2 input clock divided by 10 */\r\n#define RCC_HSE_PREDIV2_DIV11 RCC_CFGR2_PREDIV2_DIV11 /*!< PREDIV2 input clock divided by 11 */\r\n#define RCC_HSE_PREDIV2_DIV12 RCC_CFGR2_PREDIV2_DIV12 /*!< PREDIV2 input clock divided by 12 */\r\n#define RCC_HSE_PREDIV2_DIV13 RCC_CFGR2_PREDIV2_DIV13 /*!< PREDIV2 input clock divided by 13 */\r\n#define RCC_HSE_PREDIV2_DIV14 RCC_CFGR2_PREDIV2_DIV14 /*!< PREDIV2 input clock divided by 14 */\r\n#define RCC_HSE_PREDIV2_DIV15 RCC_CFGR2_PREDIV2_DIV15 /*!< PREDIV2 input clock divided by 15 */\r\n#define RCC_HSE_PREDIV2_DIV16 RCC_CFGR2_PREDIV2_DIV16 /*!< PREDIV2 input clock divided by 16 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_PLL2_Config PLL Config\r\n * @{\r\n */\r\n#define RCC_PLL2_NONE 0x00000000U\r\n#define RCC_PLL2_OFF  0x00000001U\r\n#define RCC_PLL2_ON   0x00000002U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_PLL2_Multiplication_Factor PLL2 Multiplication Factor\r\n * @{\r\n */\r\n\r\n#define RCC_PLL2_MUL8  RCC_CFGR2_PLL2MUL8  /*!< PLL2 input clock * 8 */\r\n#define RCC_PLL2_MUL9  RCC_CFGR2_PLL2MUL9  /*!< PLL2 input clock * 9 */\r\n#define RCC_PLL2_MUL10 RCC_CFGR2_PLL2MUL10 /*!< PLL2 input clock * 10 */\r\n#define RCC_PLL2_MUL11 RCC_CFGR2_PLL2MUL11 /*!< PLL2 input clock * 11 */\r\n#define RCC_PLL2_MUL12 RCC_CFGR2_PLL2MUL12 /*!< PLL2 input clock * 12 */\r\n#define RCC_PLL2_MUL13 RCC_CFGR2_PLL2MUL13 /*!< PLL2 input clock * 13 */\r\n#define RCC_PLL2_MUL14 RCC_CFGR2_PLL2MUL14 /*!< PLL2 input clock * 14 */\r\n#define RCC_PLL2_MUL16 RCC_CFGR2_PLL2MUL16 /*!< PLL2 input clock * 16 */\r\n#define RCC_PLL2_MUL20 RCC_CFGR2_PLL2MUL20 /*!< PLL2 input clock * 20 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/** @defgroup RCCEx_PLL_Multiplication_Factor PLL Multiplication Factor\r\n * @{\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#else\r\n#define RCC_PLL_MUL2 RCC_CFGR_PLLMULL2\r\n#define RCC_PLL_MUL3 RCC_CFGR_PLLMULL3\r\n#endif /* STM32F105xC || STM32F107xC */\r\n#define RCC_PLL_MUL4 RCC_CFGR_PLLMULL4\r\n#define RCC_PLL_MUL5 RCC_CFGR_PLLMULL5\r\n#define RCC_PLL_MUL6 RCC_CFGR_PLLMULL6\r\n#define RCC_PLL_MUL7 RCC_CFGR_PLLMULL7\r\n#define RCC_PLL_MUL8 RCC_CFGR_PLLMULL8\r\n#define RCC_PLL_MUL9 RCC_CFGR_PLLMULL9\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_PLL_MUL6_5 RCC_CFGR_PLLMULL6_5\r\n#else\r\n#define RCC_PLL_MUL10 RCC_CFGR_PLLMULL10\r\n#define RCC_PLL_MUL11 RCC_CFGR_PLLMULL11\r\n#define RCC_PLL_MUL12 RCC_CFGR_PLLMULL12\r\n#define RCC_PLL_MUL13 RCC_CFGR_PLLMULL13\r\n#define RCC_PLL_MUL14 RCC_CFGR_PLLMULL14\r\n#define RCC_PLL_MUL15 RCC_CFGR_PLLMULL15\r\n#define RCC_PLL_MUL16 RCC_CFGR_PLLMULL16\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_MCO1_Clock_Source MCO1 Clock Source\r\n * @{\r\n */\r\n#define RCC_MCO1SOURCE_NOCLOCK ((uint32_t)RCC_CFGR_MCO_NOCLOCK)\r\n#define RCC_MCO1SOURCE_SYSCLK  ((uint32_t)RCC_CFGR_MCO_SYSCLK)\r\n#define RCC_MCO1SOURCE_HSI     ((uint32_t)RCC_CFGR_MCO_HSI)\r\n#define RCC_MCO1SOURCE_HSE     ((uint32_t)RCC_CFGR_MCO_HSE)\r\n#define RCC_MCO1SOURCE_PLLCLK  ((uint32_t)RCC_CFGR_MCO_PLLCLK_DIV2)\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_MCO1SOURCE_PLL2CLK      ((uint32_t)RCC_CFGR_MCO_PLL2CLK)\r\n#define RCC_MCO1SOURCE_PLL3CLK_DIV2 ((uint32_t)RCC_CFGR_MCO_PLL3CLK_DIV2)\r\n#define RCC_MCO1SOURCE_EXT_HSE      ((uint32_t)RCC_CFGR_MCO_EXT_HSE)\r\n#define RCC_MCO1SOURCE_PLL3CLK      ((uint32_t)RCC_CFGR_MCO_PLL3CLK)\r\n#endif /* STM32F105xC || STM32F107xC*/\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_Interrupt RCCEx Interrupt\r\n * @{\r\n */\r\n#define RCC_IT_PLL2RDY   ((uint8_t)RCC_CIR_PLL2RDYF)\r\n#define RCC_IT_PLLI2SRDY ((uint8_t)RCC_CIR_PLL3RDYF)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_Flag RCCEx Flag\r\n *        Elements values convention: 0XXYYYYYb\r\n *           - YYYYY  : Flag position in the register\r\n *           - XX  : Register index\r\n *                 - 01: CR register\r\n * @{\r\n */\r\n/* Flags in the CR register */\r\n#define RCC_FLAG_PLL2RDY   ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_PLL2RDY_Pos))\r\n#define RCC_FLAG_PLLI2SRDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_PLL3RDY_Pos))\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros\r\n * @{\r\n */\r\n\r\n/** @defgroup RCCEx_Peripheral_Clock_Enable_Disable Peripheral Clock Enable Disable\r\n * @brief  Enable or disable the AHB1 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xE)\r\n#define __HAL_RCC_DMA2_CLK_ENABLE()                    \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN); \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_DMA2_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_DMA2EN))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F105xC || STM32F107xC || STM32F100xE */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F100xE)\r\n#define __HAL_RCC_FSMC_CLK_ENABLE()                    \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN); \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_FSMC_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_FSMCEN))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F100xE */\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_SDIO_CLK_ENABLE()                    \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_SDIOEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_SDIOEN); \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_SDIOEN))\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE()               \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_OTGFSEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_OTGFSEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_OTGFSEN))\r\n#endif /* STM32F105xC || STM32F107xC*/\r\n\r\n#if defined(STM32F107xC)\r\n#define __HAL_RCC_ETHMAC_CLK_ENABLE()                    \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ETHMACTX_CLK_ENABLE()                    \\\r\n  do {                                                     \\\r\n    __IO uint32_t tmpreg;                                  \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACTXEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */     \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACTXEN); \\\r\n    UNUSED(tmpreg);                                        \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ETHMACRX_CLK_ENABLE()                    \\\r\n  do {                                                     \\\r\n    __IO uint32_t tmpreg;                                  \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACRXEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */     \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACRXEN); \\\r\n    UNUSED(tmpreg);                                        \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ETHMAC_CLK_DISABLE()   (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACEN))\r\n#define __HAL_RCC_ETHMACTX_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACTXEN))\r\n#define __HAL_RCC_ETHMACRX_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACRXEN))\r\n\r\n/**\r\n * @brief  Enable ETHERNET clock.\r\n */\r\n#define __HAL_RCC_ETH_CLK_ENABLE()   \\\r\n  do {                               \\\r\n    __HAL_RCC_ETHMAC_CLK_ENABLE();   \\\r\n    __HAL_RCC_ETHMACTX_CLK_ENABLE(); \\\r\n    __HAL_RCC_ETHMACRX_CLK_ENABLE(); \\\r\n  } while (0U)\r\n/**\r\n * @brief  Disable ETHERNET clock.\r\n */\r\n#define __HAL_RCC_ETH_CLK_DISABLE()   \\\r\n  do {                                \\\r\n    __HAL_RCC_ETHMACTX_CLK_DISABLE(); \\\r\n    __HAL_RCC_ETHMACRX_CLK_DISABLE(); \\\r\n    __HAL_RCC_ETHMAC_CLK_DISABLE();   \\\r\n  } while (0U)\r\n\r\n#endif /* STM32F107xC*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the AHB1 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xE)\r\n#define __HAL_RCC_DMA2_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) != RESET)\r\n#define __HAL_RCC_DMA2_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) == RESET)\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F105xC || STM32F107xC || STM32F100xE */\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F100xE)\r\n#define __HAL_RCC_FSMC_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_FSMCEN)) != RESET)\r\n#define __HAL_RCC_FSMC_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_FSMCEN)) == RESET)\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F100xE */\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_SDIO_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_SDIOEN)) != RESET)\r\n#define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_SDIOEN)) == RESET)\r\n#endif /* STM32F103xE || STM32F103xG */\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_OTGFSEN)) != RESET)\r\n#define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_OTGFSEN)) == RESET)\r\n#endif /* STM32F105xC || STM32F107xC*/\r\n#if defined(STM32F107xC)\r\n#define __HAL_RCC_ETHMAC_IS_CLK_ENABLED()    ((RCC->AHBENR & (RCC_AHBENR_ETHMACEN)) != RESET)\r\n#define __HAL_RCC_ETHMAC_IS_CLK_DISABLED()   ((RCC->AHBENR & (RCC_AHBENR_ETHMACEN)) == RESET)\r\n#define __HAL_RCC_ETHMACTX_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_ETHMACTXEN)) != RESET)\r\n#define __HAL_RCC_ETHMACTX_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACTXEN)) == RESET)\r\n#define __HAL_RCC_ETHMACRX_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_ETHMACRXEN)) != RESET)\r\n#define __HAL_RCC_ETHMACRX_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACRXEN)) == RESET)\r\n#endif /* STM32F107xC*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Clock Enable Disable\r\n * @brief  Enable or disable the Low Speed APB (APB1) peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_CAN1_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_CAN1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN1EN))\r\n#endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB) || defined(STM32F103xB) || defined(STM32F103xE) \\\r\n    || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM4_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SPI2_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_USART3_CLK_ENABLE()                      \\\r\n  do {                                                     \\\r\n    __IO uint32_t tmpreg;                                  \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */     \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN); \\\r\n    UNUSED(tmpreg);                                        \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_I2C2_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM4_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN))\r\n#define __HAL_RCC_SPI2_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI2EN))\r\n#define __HAL_RCC_USART3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN))\r\n#define __HAL_RCC_I2C2_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C2EN))\r\n#endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_USB_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_USB_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USBEN))\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM5_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM6_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM7_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SPI3_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_UART4_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_UART5_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_DAC_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM5_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN))\r\n#define __HAL_RCC_TIM6_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN))\r\n#define __HAL_RCC_TIM7_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN))\r\n#define __HAL_RCC_SPI3_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN))\r\n#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN))\r\n#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN))\r\n#define __HAL_RCC_DAC_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM6_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM7_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_DAC_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_CEC_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN))\r\n#define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN))\r\n#define __HAL_RCC_DAC_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN))\r\n#define __HAL_RCC_CEC_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_CECEN))\r\n#endif /* STM32F100xB || STM32F100xE */\r\n\r\n#ifdef STM32F100xE\r\n#define __HAL_RCC_TIM5_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM12_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM13_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM14_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SPI3_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_UART4_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_UART5_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM5_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN))\r\n#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN))\r\n#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN))\r\n#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN))\r\n#define __HAL_RCC_SPI3_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN))\r\n#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN))\r\n#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN))\r\n#endif /* STM32F100xE */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_CAN2_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_CAN2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN2EN))\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM12_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM13_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM14_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN))\r\n#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN))\r\n#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN))\r\n#endif /* STM32F101xG || STM32F103xG*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the APB1 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_CAN1_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) != RESET)\r\n#define __HAL_RCC_CAN1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) == RESET)\r\n#endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB) || defined(STM32F103xB) || defined(STM32F103xE) \\\r\n    || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM4_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET)\r\n#define __HAL_RCC_TIM4_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET)\r\n#define __HAL_RCC_SPI2_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) != RESET)\r\n#define __HAL_RCC_SPI2_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) == RESET)\r\n#define __HAL_RCC_USART3_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != RESET)\r\n#define __HAL_RCC_USART3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == RESET)\r\n#define __HAL_RCC_I2C2_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) != RESET)\r\n#define __HAL_RCC_I2C2_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) == RESET)\r\n#endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_USB_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) != RESET)\r\n#define __HAL_RCC_USB_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) == RESET)\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM5_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) != RESET)\r\n#define __HAL_RCC_TIM5_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) == RESET)\r\n#define __HAL_RCC_TIM6_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET)\r\n#define __HAL_RCC_TIM6_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET)\r\n#define __HAL_RCC_TIM7_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET)\r\n#define __HAL_RCC_TIM7_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET)\r\n#define __HAL_RCC_SPI3_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET)\r\n#define __HAL_RCC_SPI3_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET)\r\n#define __HAL_RCC_UART4_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET)\r\n#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET)\r\n#define __HAL_RCC_UART5_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET)\r\n#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET)\r\n#define __HAL_RCC_DAC_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET)\r\n#define __HAL_RCC_DAC_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET)\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM6_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET)\r\n#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET)\r\n#define __HAL_RCC_TIM7_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET)\r\n#define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET)\r\n#define __HAL_RCC_DAC_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET)\r\n#define __HAL_RCC_DAC_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET)\r\n#define __HAL_RCC_CEC_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) != RESET)\r\n#define __HAL_RCC_CEC_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) == RESET)\r\n#endif /* STM32F100xB || STM32F100xE */\r\n#ifdef STM32F100xE\r\n#define __HAL_RCC_TIM5_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) != RESET)\r\n#define __HAL_RCC_TIM5_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) == RESET)\r\n#define __HAL_RCC_TIM12_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET)\r\n#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET)\r\n#define __HAL_RCC_TIM13_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET)\r\n#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET)\r\n#define __HAL_RCC_TIM14_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET)\r\n#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET)\r\n#define __HAL_RCC_SPI3_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET)\r\n#define __HAL_RCC_SPI3_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET)\r\n#define __HAL_RCC_UART4_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET)\r\n#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET)\r\n#define __HAL_RCC_UART5_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET)\r\n#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET)\r\n#define __HAL_RCC_CAN2_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) != RESET)\r\n#define __HAL_RCC_CAN2_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) == RESET)\r\n#endif /* STM32F100xE */\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM12_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET)\r\n#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET)\r\n#endif /* STM32F105xC || STM32F107xC */\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM13_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET)\r\n#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET)\r\n#define __HAL_RCC_TIM14_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET)\r\n#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET)\r\n#endif /* STM32F101xG || STM32F103xG*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Clock Enable Disable\r\n * @brief  Enable or disable the High Speed APB (APB2) peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_ADC2_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ADC2_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC2EN))\r\n#endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM15_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM15EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM15EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM16_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM16EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM16EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM17_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM17EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM17EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM15_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM15EN))\r\n#define __HAL_RCC_TIM16_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM16EN))\r\n#define __HAL_RCC_TIM17_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM17EN))\r\n#endif /* STM32F100xB || STM32F100xE */\r\n\r\n#if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) \\\r\n    || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_GPIOE_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPEEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPEEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPEEN))\r\n#endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_GPIOF_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOG_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPFEN))\r\n#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPGEN))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM8_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ADC3_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM8_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM8EN))\r\n#define __HAL_RCC_ADC3_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC3EN))\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F100xE)\r\n#define __HAL_RCC_GPIOF_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOG_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPFEN))\r\n#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPGEN))\r\n#endif /* STM32F100xE */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM9_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM10_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM11_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM9_CLK_DISABLE()  (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM9EN))\r\n#define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN))\r\n#define __HAL_RCC_TIM11_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM11EN))\r\n#endif /* STM32F101xG || STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the APB2 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_ADC2_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) != RESET)\r\n#define __HAL_RCC_ADC2_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) == RESET)\r\n#endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM15_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM15EN)) != RESET)\r\n#define __HAL_RCC_TIM15_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM15EN)) == RESET)\r\n#define __HAL_RCC_TIM16_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM16EN)) != RESET)\r\n#define __HAL_RCC_TIM16_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM16EN)) == RESET)\r\n#define __HAL_RCC_TIM17_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM17EN)) != RESET)\r\n#define __HAL_RCC_TIM17_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM17EN)) == RESET)\r\n#endif /* STM32F100xB || STM32F100xE */\r\n#if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) \\\r\n    || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_GPIOE_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPEEN)) != RESET)\r\n#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPEEN)) == RESET)\r\n#endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_GPIOF_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) != RESET)\r\n#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) == RESET)\r\n#define __HAL_RCC_GPIOG_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) != RESET)\r\n#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) == RESET)\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM8_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) != RESET)\r\n#define __HAL_RCC_TIM8_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) == RESET)\r\n#define __HAL_RCC_ADC3_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) != RESET)\r\n#define __HAL_RCC_ADC3_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) == RESET)\r\n#endif /* STM32F103xE || STM32F103xG */\r\n#if defined(STM32F100xE)\r\n#define __HAL_RCC_GPIOF_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) != RESET)\r\n#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) == RESET)\r\n#define __HAL_RCC_GPIOG_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) != RESET)\r\n#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) == RESET)\r\n#endif /* STM32F100xE */\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM9_IS_CLK_ENABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) != RESET)\r\n#define __HAL_RCC_TIM9_IS_CLK_DISABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) == RESET)\r\n#define __HAL_RCC_TIM10_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != RESET)\r\n#define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == RESET)\r\n#define __HAL_RCC_TIM11_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) != RESET)\r\n#define __HAL_RCC_TIM11_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) == RESET)\r\n#endif /* STM32F101xG || STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_Peripheral_Clock_Force_Release Peripheral Clock Force Release\r\n * @brief  Force or release AHB peripheral reset.\r\n * @{\r\n */\r\n#define __HAL_RCC_AHB_FORCE_RESET()        (RCC->AHBRSTR = 0xFFFFFFFFU)\r\n#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_OTGFSRST))\r\n#if defined(STM32F107xC)\r\n#define __HAL_RCC_ETHMAC_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_ETHMACRST))\r\n#endif /* STM32F107xC */\r\n\r\n#define __HAL_RCC_AHB_RELEASE_RESET()        (RCC->AHBRSTR = 0x00)\r\n#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_OTGFSRST))\r\n#if defined(STM32F107xC)\r\n#define __HAL_RCC_ETHMAC_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_ETHMACRST))\r\n#endif /* STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset\r\n * @brief  Force or release APB1 peripheral reset.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_CAN1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN1RST))\r\n\r\n#define __HAL_RCC_CAN1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN1RST))\r\n#endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB) || defined(STM32F103xB) || defined(STM32F103xE) \\\r\n    || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM4_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST))\r\n#define __HAL_RCC_SPI2_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI2RST))\r\n#define __HAL_RCC_USART3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST))\r\n#define __HAL_RCC_I2C2_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C2RST))\r\n\r\n#define __HAL_RCC_TIM4_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST))\r\n#define __HAL_RCC_SPI2_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI2RST))\r\n#define __HAL_RCC_USART3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST))\r\n#define __HAL_RCC_I2C2_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C2RST))\r\n#endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_USB_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_USBRST))\r\n#define __HAL_RCC_USB_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USBRST))\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM5_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST))\r\n#define __HAL_RCC_TIM6_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST))\r\n#define __HAL_RCC_TIM7_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST))\r\n#define __HAL_RCC_SPI3_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST))\r\n#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST))\r\n#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST))\r\n#define __HAL_RCC_DAC_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST))\r\n\r\n#define __HAL_RCC_TIM5_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST))\r\n#define __HAL_RCC_TIM6_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST))\r\n#define __HAL_RCC_TIM7_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST))\r\n#define __HAL_RCC_SPI3_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST))\r\n#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST))\r\n#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST))\r\n#define __HAL_RCC_DAC_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST))\r\n#define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST))\r\n#define __HAL_RCC_DAC_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST))\r\n#define __HAL_RCC_CEC_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_CECRST))\r\n\r\n#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST))\r\n#define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST))\r\n#define __HAL_RCC_DAC_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST))\r\n#define __HAL_RCC_CEC_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CECRST))\r\n#endif /* STM32F100xB || STM32F100xE */\r\n\r\n#if defined(STM32F100xE)\r\n#define __HAL_RCC_TIM5_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST))\r\n#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST))\r\n#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST))\r\n#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST))\r\n#define __HAL_RCC_SPI3_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST))\r\n#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST))\r\n#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST))\r\n\r\n#define __HAL_RCC_TIM5_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST))\r\n#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST))\r\n#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST))\r\n#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST))\r\n#define __HAL_RCC_SPI3_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST))\r\n#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST))\r\n#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST))\r\n#endif /* STM32F100xE */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_CAN2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN2RST))\r\n\r\n#define __HAL_RCC_CAN2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN2RST))\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST))\r\n#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST))\r\n#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST))\r\n\r\n#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST))\r\n#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST))\r\n#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST))\r\n#endif /* STM32F101xG || STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset\r\n * @brief  Force or release APB2 peripheral reset.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_ADC2_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC2RST))\r\n\r\n#define __HAL_RCC_ADC2_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC2RST))\r\n#endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM15_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM15RST))\r\n#define __HAL_RCC_TIM16_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM16RST))\r\n#define __HAL_RCC_TIM17_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM17RST))\r\n\r\n#define __HAL_RCC_TIM15_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM15RST))\r\n#define __HAL_RCC_TIM16_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM16RST))\r\n#define __HAL_RCC_TIM17_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM17RST))\r\n#endif /* STM32F100xB || STM32F100xE */\r\n\r\n#if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) \\\r\n    || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPERST))\r\n\r\n#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPERST))\r\n#endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPFRST))\r\n#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPGRST))\r\n\r\n#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPFRST))\r\n#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPGRST))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM8_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM8RST))\r\n#define __HAL_RCC_ADC3_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC3RST))\r\n\r\n#define __HAL_RCC_TIM8_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM8RST))\r\n#define __HAL_RCC_ADC3_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC3RST))\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F100xE)\r\n#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPFRST))\r\n#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPGRST))\r\n\r\n#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPFRST))\r\n#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPGRST))\r\n#endif /* STM32F100xE */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM9_FORCE_RESET()  (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM9RST))\r\n#define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST))\r\n#define __HAL_RCC_TIM11_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM11RST))\r\n\r\n#define __HAL_RCC_TIM9_RELEASE_RESET()  (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM9RST))\r\n#define __HAL_RCC_TIM10_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST))\r\n#define __HAL_RCC_TIM11_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM11RST))\r\n#endif /* STM32F101xG || STM32F103xG*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_HSE_Configuration HSE Configuration\r\n * @{\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB) || defined(STM32F100xE)\r\n/**\r\n * @brief  Macro to configure the External High Speed oscillator (HSE) Predivision factor for PLL.\r\n * @note   Predivision factor can not be changed if PLL is used as system clock\r\n *         In this case, you have to select another source of the system clock, disable the PLL and\r\n *         then change the HSE predivision factor.\r\n * @param  __HSE_PREDIV_VALUE__ specifies the division value applied to HSE.\r\n *         This parameter must be a number between RCC_HSE_PREDIV_DIV1 and RCC_HSE_PREDIV_DIV16.\r\n */\r\n#define __HAL_RCC_HSE_PREDIV_CONFIG(__HSE_PREDIV_VALUE__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV1, (uint32_t)(__HSE_PREDIV_VALUE__))\r\n#else\r\n/**\r\n * @brief  Macro to configure the External High Speed oscillator (HSE) Predivision factor for PLL.\r\n * @note   Predivision factor can not be changed if PLL is used as system clock\r\n *         In this case, you have to select another source of the system clock, disable the PLL and\r\n *         then change the HSE predivision factor.\r\n * @param  __HSE_PREDIV_VALUE__ specifies the division value applied to HSE.\r\n *         This parameter must be a number between RCC_HSE_PREDIV_DIV1 and RCC_HSE_PREDIV_DIV2.\r\n */\r\n#define __HAL_RCC_HSE_PREDIV_CONFIG(__HSE_PREDIV_VALUE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLXTPRE, (uint32_t)(__HSE_PREDIV_VALUE__))\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB) || defined(STM32F100xE)\r\n/**\r\n * @brief  Macro to get prediv1 factor for PLL.\r\n */\r\n#define __HAL_RCC_HSE_GET_PREDIV() READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1)\r\n\r\n#else\r\n/**\r\n * @brief  Macro to get prediv1 factor for PLL.\r\n */\r\n#define __HAL_RCC_HSE_GET_PREDIV() READ_BIT(RCC->CFGR, RCC_CFGR_PLLXTPRE)\r\n\r\n#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_PLLI2S_Configuration PLLI2S Configuration\r\n * @{\r\n */\r\n\r\n/** @brief Macros to enable the main PLLI2S.\r\n * @note   After enabling the main PLLI2S, the application software should wait on\r\n *         PLLI2SRDY flag to be set indicating that PLLI2S clock is stable and can\r\n *         be used as system clock source.\r\n * @note   The main PLLI2S is disabled by hardware when entering STOP and STANDBY modes.\r\n */\r\n#define __HAL_RCC_PLLI2S_ENABLE() (*(__IO uint32_t *)RCC_CR_PLLI2SON_BB = ENABLE)\r\n\r\n/** @brief Macros to disable the main PLLI2S.\r\n * @note   The main PLLI2S is disabled by hardware when entering STOP and STANDBY modes.\r\n */\r\n#define __HAL_RCC_PLLI2S_DISABLE() (*(__IO uint32_t *)RCC_CR_PLLI2SON_BB = DISABLE)\r\n\r\n/** @brief macros to configure the main PLLI2S multiplication factor.\r\n * @note   This function must be used only when the main PLLI2S is disabled.\r\n *\r\n * @param  __PLLI2SMUL__ specifies the multiplication factor for PLLI2S VCO output clock\r\n *          This parameter can be one of the following values:\r\n *             @arg @ref RCC_PLLI2S_MUL8 PLLI2SVCO = PLLI2S clock entry x 8\r\n *             @arg @ref RCC_PLLI2S_MUL9 PLLI2SVCO = PLLI2S clock entry x 9\r\n *             @arg @ref RCC_PLLI2S_MUL10 PLLI2SVCO = PLLI2S clock entry x 10\r\n *             @arg @ref RCC_PLLI2S_MUL11 PLLI2SVCO = PLLI2S clock entry x 11\r\n *             @arg @ref RCC_PLLI2S_MUL12 PLLI2SVCO = PLLI2S clock entry x 12\r\n *             @arg @ref RCC_PLLI2S_MUL13 PLLI2SVCO = PLLI2S clock entry x 13\r\n *             @arg @ref RCC_PLLI2S_MUL14 PLLI2SVCO = PLLI2S clock entry x 14\r\n *             @arg @ref RCC_PLLI2S_MUL16 PLLI2SVCO = PLLI2S clock entry x 16\r\n *             @arg @ref RCC_PLLI2S_MUL20 PLLI2SVCO = PLLI2S clock entry x 20\r\n *\r\n */\r\n#define __HAL_RCC_PLLI2S_CONFIG(__PLLI2SMUL__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PLL3MUL, (__PLLI2SMUL__))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/** @defgroup RCCEx_Peripheral_Configuration Peripheral Configuration\r\n * @brief  Macros to configure clock source of different peripherals.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/** @brief  Macro to configure the USB clock.\r\n * @param  __USBCLKSOURCE__ specifies the USB clock source.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL PLL clock divided by 1 selected as USB clock\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV1_5 PLL clock divided by 1.5 selected as USB clock\r\n */\r\n#define __HAL_RCC_USB_CONFIG(__USBCLKSOURCE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_USBPRE, (uint32_t)(__USBCLKSOURCE__))\r\n\r\n/** @brief  Macro to get the USB clock (USBCLK).\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL PLL clock divided by 1 selected as USB clock\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV1_5 PLL clock divided by 1.5 selected as USB clock\r\n */\r\n#define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_USBPRE)))\r\n\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n\r\n/** @brief  Macro to configure the USB OTSclock.\r\n * @param  __USBCLKSOURCE__ specifies the USB clock source.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV2 PLL clock divided by 2 selected as USB OTG FS clock\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV3 PLL clock divided by 3 selected as USB OTG FS clock\r\n */\r\n#define __HAL_RCC_USB_CONFIG(__USBCLKSOURCE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_OTGFSPRE, (uint32_t)(__USBCLKSOURCE__))\r\n\r\n/** @brief  Macro to get the USB clock (USBCLK).\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV2 PLL clock divided by 2 selected as USB OTG FS clock\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV3 PLL clock divided by 3 selected as USB OTG FS clock\r\n */\r\n#define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_OTGFSPRE)))\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/** @brief  Macro to configure the ADCx clock (x=1 to 3 depending on devices).\r\n * @param  __ADCCLKSOURCE__ specifies the ADC clock source.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_ADCPCLK2_DIV2 PCLK2 clock divided by 2 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV4 PCLK2 clock divided by 4 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV6 PCLK2 clock divided by 6 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV8 PCLK2 clock divided by 8 selected as ADC clock\r\n */\r\n#define __HAL_RCC_ADC_CONFIG(__ADCCLKSOURCE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_ADCPRE, (uint32_t)(__ADCCLKSOURCE__))\r\n\r\n/** @brief  Macro to get the ADC clock (ADCxCLK, x=1 to 3 depending on devices).\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_ADCPCLK2_DIV2 PCLK2 clock divided by 2 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV4 PCLK2 clock divided by 4 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV6 PCLK2 clock divided by 6 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV8 PCLK2 clock divided by 8 selected as ADC clock\r\n */\r\n#define __HAL_RCC_GET_ADC_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_ADCPRE)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n\r\n/** @addtogroup RCCEx_HSE_Configuration\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Macro to configure the PLL2 & PLLI2S Predivision factor.\r\n * @note   Predivision factor can not be changed if PLL2 is used indirectly as system clock\r\n *         In this case, you have to select another source of the system clock, disable the PLL2 and PLLI2S and\r\n *         then change the PREDIV2 factor.\r\n * @param  __HSE_PREDIV2_VALUE__ specifies the PREDIV2 value applied to PLL2 & PLLI2S.\r\n *         This parameter must be a number between RCC_HSE_PREDIV2_DIV1 and RCC_HSE_PREDIV2_DIV16.\r\n */\r\n#define __HAL_RCC_HSE_PREDIV2_CONFIG(__HSE_PREDIV2_VALUE__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV2, (uint32_t)(__HSE_PREDIV2_VALUE__))\r\n\r\n/**\r\n * @brief  Macro to get prediv2 factor for PLL2 & PLL3.\r\n */\r\n#define __HAL_RCC_HSE_GET_PREDIV2() READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV2)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCCEx_PLLI2S_Configuration\r\n * @{\r\n */\r\n\r\n/** @brief Macros to enable the main PLL2.\r\n * @note   After enabling the main PLL2, the application software should wait on\r\n *         PLL2RDY flag to be set indicating that PLL2 clock is stable and can\r\n *         be used as system clock source.\r\n * @note   The main PLL2 is disabled by hardware when entering STOP and STANDBY modes.\r\n */\r\n#define __HAL_RCC_PLL2_ENABLE() (*(__IO uint32_t *)RCC_CR_PLL2ON_BB = ENABLE)\r\n\r\n/** @brief Macros to disable the main PLL2.\r\n * @note   The main PLL2 can not be disabled if it is used indirectly as system clock source\r\n * @note   The main PLL2 is disabled by hardware when entering STOP and STANDBY modes.\r\n */\r\n#define __HAL_RCC_PLL2_DISABLE() (*(__IO uint32_t *)RCC_CR_PLL2ON_BB = DISABLE)\r\n\r\n/** @brief macros to configure the main PLL2 multiplication factor.\r\n * @note   This function must be used only when the main PLL2 is disabled.\r\n *\r\n * @param  __PLL2MUL__ specifies the multiplication factor for PLL2 VCO output clock\r\n *          This parameter can be one of the following values:\r\n *             @arg @ref RCC_PLL2_MUL8 PLL2VCO = PLL2 clock entry x 8\r\n *             @arg @ref RCC_PLL2_MUL9 PLL2VCO = PLL2 clock entry x 9\r\n *             @arg @ref RCC_PLL2_MUL10 PLL2VCO = PLL2 clock entry x 10\r\n *             @arg @ref RCC_PLL2_MUL11 PLL2VCO = PLL2 clock entry x 11\r\n *             @arg @ref RCC_PLL2_MUL12 PLL2VCO = PLL2 clock entry x 12\r\n *             @arg @ref RCC_PLL2_MUL13 PLL2VCO = PLL2 clock entry x 13\r\n *             @arg @ref RCC_PLL2_MUL14 PLL2VCO = PLL2 clock entry x 14\r\n *             @arg @ref RCC_PLL2_MUL16 PLL2VCO = PLL2 clock entry x 16\r\n *             @arg @ref RCC_PLL2_MUL20 PLL2VCO = PLL2 clock entry x 20\r\n *\r\n */\r\n#define __HAL_RCC_PLL2_CONFIG(__PLL2MUL__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PLL2MUL, (__PLL2MUL__))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_I2S_Configuration I2S Configuration\r\n * @brief  Macros to configure clock source of I2S peripherals.\r\n * @{\r\n */\r\n\r\n/** @brief  Macro to configure the I2S2 clock.\r\n * @param  __I2S2CLKSOURCE__ specifies the I2S2 clock source.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_I2S2CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry\r\n *            @arg @ref RCC_I2S2CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry\r\n */\r\n#define __HAL_RCC_I2S2_CONFIG(__I2S2CLKSOURCE__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_I2S2SRC, (uint32_t)(__I2S2CLKSOURCE__))\r\n\r\n/** @brief  Macro to get the I2S2 clock (I2S2CLK).\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_I2S2CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry\r\n *            @arg @ref RCC_I2S2CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry\r\n */\r\n#define __HAL_RCC_GET_I2S2_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_I2S2SRC)))\r\n\r\n/** @brief  Macro to configure the I2S3 clock.\r\n * @param  __I2S2CLKSOURCE__ specifies the I2S3 clock source.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_I2S3CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry\r\n *            @arg @ref RCC_I2S3CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry\r\n */\r\n#define __HAL_RCC_I2S3_CONFIG(__I2S2CLKSOURCE__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_I2S3SRC, (uint32_t)(__I2S2CLKSOURCE__))\r\n\r\n/** @brief  Macro to get the I2S3 clock (I2S3CLK).\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_I2S3CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry\r\n *            @arg @ref RCC_I2S3CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry\r\n */\r\n#define __HAL_RCC_GET_I2S3_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_I2S3SRC)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup RCCEx_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup RCCEx_Exported_Functions_Group1\r\n * @{\r\n */\r\n\r\nHAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit);\r\nvoid              HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit);\r\nuint32_t          HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @addtogroup RCCEx_Exported_Functions_Group2\r\n * @{\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_EnablePLLI2S(RCC_PLLI2SInitTypeDef *PLLI2SInit);\r\nHAL_StatusTypeDef HAL_RCCEx_DisablePLLI2S(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCCEx_Exported_Functions_Group3\r\n * @{\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_EnablePLL2(RCC_PLL2InitTypeDef *PLL2Init);\r\nHAL_StatusTypeDef HAL_RCCEx_DisablePLL2(void);\r\n\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_RCC_EX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_tim.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of TIM HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef STM32F1xx_HAL_TIM_H\r\n#define STM32F1xx_HAL_TIM_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup TIM\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup TIM_Exported_Types TIM Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  TIM Time base Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock.\r\n                           This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */\r\n\r\n  uint32_t CounterMode; /*!< Specifies the counter mode.\r\n                             This parameter can be a value of @ref TIM_Counter_Mode */\r\n\r\n  uint32_t Period; /*!< Specifies the period value to be loaded into the active\r\n                        Auto-Reload Register at the next update event.\r\n                        This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF.  */\r\n\r\n  uint32_t ClockDivision; /*!< Specifies the clock division.\r\n                               This parameter can be a value of @ref TIM_ClockDivision */\r\n\r\n  uint32_t RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter\r\n                                   reaches zero, an update event is generated and counting restarts\r\n                                   from the RCR value (N).\r\n                                   This means in PWM mode that (N+1) corresponds to:\r\n                                       - the number of PWM periods in edge-aligned mode\r\n                                       - the number of half PWM period in center-aligned mode\r\n                                    GP timers: this parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF.\r\n                                    Advanced timers: this parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */\r\n\r\n  uint32_t AutoReloadPreload; /*!< Specifies the auto-reload preload.\r\n                                  This parameter can be a value of @ref TIM_AutoReloadPreload */\r\n} TIM_Base_InitTypeDef;\r\n\r\n/**\r\n * @brief  TIM Output Compare Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t OCMode; /*!< Specifies the TIM mode.\r\n                        This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */\r\n\r\n  uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register.\r\n                       This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */\r\n\r\n  uint32_t OCPolarity; /*!< Specifies the output polarity.\r\n                            This parameter can be a value of @ref TIM_Output_Compare_Polarity */\r\n\r\n  uint32_t OCNPolarity; /*!< Specifies the complementary output polarity.\r\n                             This parameter can be a value of @ref TIM_Output_Compare_N_Polarity\r\n                             @note This parameter is valid only for timer instances supporting break feature. */\r\n\r\n  uint32_t OCFastMode; /*!< Specifies the Fast mode state.\r\n                            This parameter can be a value of @ref TIM_Output_Fast_State\r\n                            @note This parameter is valid only in PWM1 and PWM2 mode. */\r\n\r\n  uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state.\r\n                             This parameter can be a value of @ref TIM_Output_Compare_Idle_State\r\n                             @note This parameter is valid only for timer instances supporting break feature. */\r\n\r\n  uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state.\r\n                              This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State\r\n                              @note This parameter is valid only for timer instances supporting break feature. */\r\n} TIM_OC_InitTypeDef;\r\n\r\n/**\r\n * @brief  TIM One Pulse Mode Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t OCMode; /*!< Specifies the TIM mode.\r\n                        This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */\r\n\r\n  uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register.\r\n                       This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */\r\n\r\n  uint32_t OCPolarity; /*!< Specifies the output polarity.\r\n                            This parameter can be a value of @ref TIM_Output_Compare_Polarity */\r\n\r\n  uint32_t OCNPolarity; /*!< Specifies the complementary output polarity.\r\n                             This parameter can be a value of @ref TIM_Output_Compare_N_Polarity\r\n                             @note This parameter is valid only for timer instances supporting break feature. */\r\n\r\n  uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state.\r\n                             This parameter can be a value of @ref TIM_Output_Compare_Idle_State\r\n                             @note This parameter is valid only for timer instances supporting break feature. */\r\n\r\n  uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state.\r\n                              This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State\r\n                              @note This parameter is valid only for timer instances supporting break feature. */\r\n\r\n  uint32_t ICPolarity; /*!< Specifies the active edge of the input signal.\r\n                            This parameter can be a value of @ref TIM_Input_Capture_Polarity */\r\n\r\n  uint32_t ICSelection; /*!< Specifies the input.\r\n                            This parameter can be a value of @ref TIM_Input_Capture_Selection */\r\n\r\n  uint32_t ICFilter; /*!< Specifies the input capture filter.\r\n                         This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n} TIM_OnePulse_InitTypeDef;\r\n\r\n/**\r\n * @brief  TIM Input Capture Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t ICPolarity; /*!< Specifies the active edge of the input signal.\r\n                            This parameter can be a value of @ref TIM_Input_Capture_Polarity */\r\n\r\n  uint32_t ICSelection; /*!< Specifies the input.\r\n                             This parameter can be a value of @ref TIM_Input_Capture_Selection */\r\n\r\n  uint32_t ICPrescaler; /*!< Specifies the Input Capture Prescaler.\r\n                             This parameter can be a value of @ref TIM_Input_Capture_Prescaler */\r\n\r\n  uint32_t ICFilter; /*!< Specifies the input capture filter.\r\n                          This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n} TIM_IC_InitTypeDef;\r\n\r\n/**\r\n * @brief  TIM Encoder Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t EncoderMode; /*!< Specifies the active edge of the input signal.\r\n                             This parameter can be a value of @ref TIM_Encoder_Mode */\r\n\r\n  uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal.\r\n                             This parameter can be a value of @ref TIM_Encoder_Input_Polarity */\r\n\r\n  uint32_t IC1Selection; /*!< Specifies the input.\r\n                              This parameter can be a value of @ref TIM_Input_Capture_Selection */\r\n\r\n  uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler.\r\n                              This parameter can be a value of @ref TIM_Input_Capture_Prescaler */\r\n\r\n  uint32_t IC1Filter; /*!< Specifies the input capture filter.\r\n                           This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n\r\n  uint32_t IC2Polarity; /*!< Specifies the active edge of the input signal.\r\n                             This parameter can be a value of @ref TIM_Encoder_Input_Polarity */\r\n\r\n  uint32_t IC2Selection; /*!< Specifies the input.\r\n                             This parameter can be a value of @ref TIM_Input_Capture_Selection */\r\n\r\n  uint32_t IC2Prescaler; /*!< Specifies the Input Capture Prescaler.\r\n                              This parameter can be a value of @ref TIM_Input_Capture_Prescaler */\r\n\r\n  uint32_t IC2Filter; /*!< Specifies the input capture filter.\r\n                           This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n} TIM_Encoder_InitTypeDef;\r\n\r\n/**\r\n * @brief  Clock Configuration Handle Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t ClockSource;    /*!< TIM clock sources\r\n                                This parameter can be a value of @ref TIM_Clock_Source */\r\n  uint32_t ClockPolarity;  /*!< TIM clock polarity\r\n                                This parameter can be a value of @ref TIM_Clock_Polarity */\r\n  uint32_t ClockPrescaler; /*!< TIM clock prescaler\r\n                                This parameter can be a value of @ref TIM_Clock_Prescaler */\r\n  uint32_t ClockFilter;    /*!< TIM clock filter\r\n                                This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n} TIM_ClockConfigTypeDef;\r\n\r\n/**\r\n * @brief  TIM Clear Input Configuration Handle Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t ClearInputState;     /*!< TIM clear Input state\r\n                                     This parameter can be ENABLE or DISABLE */\r\n  uint32_t ClearInputSource;    /*!< TIM clear Input sources\r\n                                     This parameter can be a value of @ref TIM_ClearInput_Source */\r\n  uint32_t ClearInputPolarity;  /*!< TIM Clear Input polarity\r\n                                     This parameter can be a value of @ref TIM_ClearInput_Polarity */\r\n  uint32_t ClearInputPrescaler; /*!< TIM Clear Input prescaler\r\n                                     This parameter must be 0: When OCRef clear feature is used with ETR source, ETR prescaler must be off */\r\n  uint32_t ClearInputFilter;    /*!< TIM Clear Input filter\r\n                                     This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n} TIM_ClearInputConfigTypeDef;\r\n\r\n/**\r\n * @brief  TIM Master configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t MasterOutputTrigger; /*!< Trigger output (TRGO) selection\r\n                                     This parameter can be a value of @ref TIM_Master_Mode_Selection */\r\n  uint32_t MasterSlaveMode;     /*!< Master/slave mode selection\r\n                                     This parameter can be a value of @ref TIM_Master_Slave_Mode\r\n                                     @note When the Master/slave mode is enabled, the effect of\r\n                                     an event on the trigger input (TRGI) is delayed to allow a\r\n                                     perfect synchronization between the current timer and its\r\n                                     slaves (through TRGO). It is not mandatory in case of timer\r\n                                     synchronization mode. */\r\n} TIM_MasterConfigTypeDef;\r\n\r\n/**\r\n * @brief  TIM Slave configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t SlaveMode;        /*!< Slave mode selection\r\n                                  This parameter can be a value of @ref TIM_Slave_Mode */\r\n  uint32_t InputTrigger;     /*!< Input Trigger source\r\n                                  This parameter can be a value of @ref TIM_Trigger_Selection */\r\n  uint32_t TriggerPolarity;  /*!< Input Trigger polarity\r\n                                  This parameter can be a value of @ref TIM_Trigger_Polarity */\r\n  uint32_t TriggerPrescaler; /*!< Input trigger prescaler\r\n                                  This parameter can be a value of @ref TIM_Trigger_Prescaler */\r\n  uint32_t TriggerFilter;    /*!< Input trigger filter\r\n                                  This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF  */\r\n\r\n} TIM_SlaveConfigTypeDef;\r\n\r\n/**\r\n * @brief  TIM Break input(s) and Dead time configuration Structure definition\r\n * @note   2 break inputs can be configured (BKIN and BKIN2) with configurable\r\n *        filter and polarity.\r\n */\r\ntypedef struct {\r\n  uint32_t OffStateRunMode;  /*!< TIM off state in run mode\r\n                                  This parameter can be a value of @ref TIM_OSSR_Off_State_Selection_for_Run_mode_state */\r\n  uint32_t OffStateIDLEMode; /*!< TIM off state in IDLE mode\r\n                                  This parameter can be a value of @ref TIM_OSSI_Off_State_Selection_for_Idle_mode_state */\r\n  uint32_t LockLevel;        /*!< TIM Lock level\r\n                                  This parameter can be a value of @ref TIM_Lock_level */\r\n  uint32_t DeadTime;         /*!< TIM dead Time\r\n                                  This parameter can be a number between Min_Data = 0x00 and Max_Data = 0xFF */\r\n  uint32_t BreakState;       /*!< TIM Break State\r\n                                  This parameter can be a value of @ref TIM_Break_Input_enable_disable */\r\n  uint32_t BreakPolarity;    /*!< TIM Break input polarity\r\n                                  This parameter can be a value of @ref TIM_Break_Polarity */\r\n  uint32_t BreakFilter;      /*!< Specifies the break input filter.\r\n                                  This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n  uint32_t AutomaticOutput;  /*!< TIM Automatic Output Enable state\r\n                                  This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */\r\n} TIM_BreakDeadTimeConfigTypeDef;\r\n\r\n/**\r\n * @brief  HAL State structures definition\r\n */\r\ntypedef enum {\r\n  HAL_TIM_STATE_RESET   = 0x00U, /*!< Peripheral not yet initialized or disabled  */\r\n  HAL_TIM_STATE_READY   = 0x01U, /*!< Peripheral Initialized and ready for use    */\r\n  HAL_TIM_STATE_BUSY    = 0x02U, /*!< An internal process is ongoing              */\r\n  HAL_TIM_STATE_TIMEOUT = 0x03U, /*!< Timeout state                               */\r\n  HAL_TIM_STATE_ERROR   = 0x04U  /*!< Reception process is ongoing                */\r\n} HAL_TIM_StateTypeDef;\r\n\r\n/**\r\n * @brief  TIM Channel States definition\r\n */\r\ntypedef enum {\r\n  HAL_TIM_CHANNEL_STATE_RESET = 0x00U, /*!< TIM Channel initial state                         */\r\n  HAL_TIM_CHANNEL_STATE_READY = 0x01U, /*!< TIM Channel ready for use                         */\r\n  HAL_TIM_CHANNEL_STATE_BUSY  = 0x02U, /*!< An internal process is ongoing on the TIM channel */\r\n} HAL_TIM_ChannelStateTypeDef;\r\n\r\n/**\r\n * @brief  DMA Burst States definition\r\n */\r\ntypedef enum {\r\n  HAL_DMA_BURST_STATE_RESET = 0x00U, /*!< DMA Burst initial state */\r\n  HAL_DMA_BURST_STATE_READY = 0x01U, /*!< DMA Burst ready for use */\r\n  HAL_DMA_BURST_STATE_BUSY  = 0x02U, /*!< Ongoing DMA Burst       */\r\n} HAL_TIM_DMABurstStateTypeDef;\r\n\r\n/**\r\n * @brief  HAL Active channel structures definition\r\n */\r\ntypedef enum {\r\n  HAL_TIM_ACTIVE_CHANNEL_1       = 0x01U, /*!< The active channel is 1     */\r\n  HAL_TIM_ACTIVE_CHANNEL_2       = 0x02U, /*!< The active channel is 2     */\r\n  HAL_TIM_ACTIVE_CHANNEL_3       = 0x04U, /*!< The active channel is 3     */\r\n  HAL_TIM_ACTIVE_CHANNEL_4       = 0x08U, /*!< The active channel is 4     */\r\n  HAL_TIM_ACTIVE_CHANNEL_CLEARED = 0x00U  /*!< All active channels cleared */\r\n} HAL_TIM_ActiveChannel;\r\n\r\n/**\r\n * @brief  TIM Time Base Handle Structure definition\r\n */\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\ntypedef struct __TIM_HandleTypeDef\r\n#else\r\ntypedef struct\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n{\r\n  TIM_TypeDef *         Instance;                     /*!< Register base address                             */\r\n  TIM_Base_InitTypeDef  Init;                         /*!< TIM Time Base required parameters                 */\r\n  HAL_TIM_ActiveChannel Channel;                      /*!< Active channel                                    */\r\n  DMA_HandleTypeDef *   hdma[7];                      /*!< DMA Handlers array\r\n                                                           This array is accessed by a @ref DMA_Handle_index */\r\n  HAL_LockTypeDef                   Lock;             /*!< Locking object                                    */\r\n  __IO HAL_TIM_StateTypeDef         State;            /*!< TIM operation state                               */\r\n  __IO HAL_TIM_ChannelStateTypeDef  ChannelState[4];  /*!< TIM channel operation state                       */\r\n  __IO HAL_TIM_ChannelStateTypeDef  ChannelNState[4]; /*!< TIM complementary channel operation state         */\r\n  __IO HAL_TIM_DMABurstStateTypeDef DMABurstState;    /*!< DMA burst operation state                         */\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  void (*Base_MspInitCallback)(struct __TIM_HandleTypeDef *htim);              /*!< TIM Base Msp Init Callback                              */\r\n  void (*Base_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);            /*!< TIM Base Msp DeInit Callback                            */\r\n  void (*IC_MspInitCallback)(struct __TIM_HandleTypeDef *htim);                /*!< TIM IC Msp Init Callback                                */\r\n  void (*IC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);              /*!< TIM IC Msp DeInit Callback                              */\r\n  void (*OC_MspInitCallback)(struct __TIM_HandleTypeDef *htim);                /*!< TIM OC Msp Init Callback                                */\r\n  void (*OC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);              /*!< TIM OC Msp DeInit Callback                              */\r\n  void (*PWM_MspInitCallback)(struct __TIM_HandleTypeDef *htim);               /*!< TIM PWM Msp Init Callback                               */\r\n  void (*PWM_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);             /*!< TIM PWM Msp DeInit Callback                             */\r\n  void (*OnePulse_MspInitCallback)(struct __TIM_HandleTypeDef *htim);          /*!< TIM One Pulse Msp Init Callback                         */\r\n  void (*OnePulse_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);        /*!< TIM One Pulse Msp DeInit Callback                       */\r\n  void (*Encoder_MspInitCallback)(struct __TIM_HandleTypeDef *htim);           /*!< TIM Encoder Msp Init Callback                           */\r\n  void (*Encoder_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);         /*!< TIM Encoder Msp DeInit Callback                         */\r\n  void (*HallSensor_MspInitCallback)(struct __TIM_HandleTypeDef *htim);        /*!< TIM Hall Sensor Msp Init Callback                       */\r\n  void (*HallSensor_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);      /*!< TIM Hall Sensor Msp DeInit Callback                     */\r\n  void (*PeriodElapsedCallback)(struct __TIM_HandleTypeDef *htim);             /*!< TIM Period Elapsed Callback                             */\r\n  void (*PeriodElapsedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);     /*!< TIM Period Elapsed half complete Callback               */\r\n  void (*TriggerCallback)(struct __TIM_HandleTypeDef *htim);                   /*!< TIM Trigger Callback                                    */\r\n  void (*TriggerHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);           /*!< TIM Trigger half complete Callback                      */\r\n  void (*IC_CaptureCallback)(struct __TIM_HandleTypeDef *htim);                /*!< TIM Input Capture Callback                              */\r\n  void (*IC_CaptureHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);        /*!< TIM Input Capture half complete Callback                */\r\n  void (*OC_DelayElapsedCallback)(struct __TIM_HandleTypeDef *htim);           /*!< TIM Output Compare Delay Elapsed Callback               */\r\n  void (*PWM_PulseFinishedCallback)(struct __TIM_HandleTypeDef *htim);         /*!< TIM PWM Pulse Finished Callback                         */\r\n  void (*PWM_PulseFinishedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Pulse Finished half complete Callback           */\r\n  void (*ErrorCallback)(struct __TIM_HandleTypeDef *htim);                     /*!< TIM Error Callback                                      */\r\n  void (*CommutationCallback)(struct __TIM_HandleTypeDef *htim);               /*!< TIM Commutation Callback                                */\r\n  void (*CommutationHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);       /*!< TIM Commutation half complete Callback                  */\r\n  void (*BreakCallback)(struct __TIM_HandleTypeDef *htim);                     /*!< TIM Break Callback                                      */\r\n#endif                                                                         /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n} TIM_HandleTypeDef;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n/**\r\n * @brief  HAL TIM Callback ID enumeration definition\r\n */\r\ntypedef enum {\r\n  HAL_TIM_BASE_MSPINIT_CB_ID = 0x00U /*!< TIM Base MspInit Callback ID                              */\r\n  ,\r\n  HAL_TIM_BASE_MSPDEINIT_CB_ID = 0x01U /*!< TIM Base MspDeInit Callback ID                            */\r\n  ,\r\n  HAL_TIM_IC_MSPINIT_CB_ID = 0x02U /*!< TIM IC MspInit Callback ID                                */\r\n  ,\r\n  HAL_TIM_IC_MSPDEINIT_CB_ID = 0x03U /*!< TIM IC MspDeInit Callback ID                              */\r\n  ,\r\n  HAL_TIM_OC_MSPINIT_CB_ID = 0x04U /*!< TIM OC MspInit Callback ID                                */\r\n  ,\r\n  HAL_TIM_OC_MSPDEINIT_CB_ID = 0x05U /*!< TIM OC MspDeInit Callback ID                              */\r\n  ,\r\n  HAL_TIM_PWM_MSPINIT_CB_ID = 0x06U /*!< TIM PWM MspInit Callback ID                               */\r\n  ,\r\n  HAL_TIM_PWM_MSPDEINIT_CB_ID = 0x07U /*!< TIM PWM MspDeInit Callback ID                             */\r\n  ,\r\n  HAL_TIM_ONE_PULSE_MSPINIT_CB_ID = 0x08U /*!< TIM One Pulse MspInit Callback ID                         */\r\n  ,\r\n  HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID = 0x09U /*!< TIM One Pulse MspDeInit Callback ID                       */\r\n  ,\r\n  HAL_TIM_ENCODER_MSPINIT_CB_ID = 0x0AU /*!< TIM Encoder MspInit Callback ID                           */\r\n  ,\r\n  HAL_TIM_ENCODER_MSPDEINIT_CB_ID = 0x0BU /*!< TIM Encoder MspDeInit Callback ID                         */\r\n  ,\r\n  HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID = 0x0CU /*!< TIM Hall Sensor MspDeInit Callback ID                     */\r\n  ,\r\n  HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID = 0x0DU /*!< TIM Hall Sensor MspDeInit Callback ID                     */\r\n  ,\r\n  HAL_TIM_PERIOD_ELAPSED_CB_ID = 0x0EU /*!< TIM Period Elapsed Callback ID                             */\r\n  ,\r\n  HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID = 0x0FU /*!< TIM Period Elapsed half complete Callback ID               */\r\n  ,\r\n  HAL_TIM_TRIGGER_CB_ID = 0x10U /*!< TIM Trigger Callback ID                                    */\r\n  ,\r\n  HAL_TIM_TRIGGER_HALF_CB_ID = 0x11U /*!< TIM Trigger half complete Callback ID                      */\r\n\r\n  ,\r\n  HAL_TIM_IC_CAPTURE_CB_ID = 0x12U /*!< TIM Input Capture Callback ID                              */\r\n  ,\r\n  HAL_TIM_IC_CAPTURE_HALF_CB_ID = 0x13U /*!< TIM Input Capture half complete Callback ID                */\r\n  ,\r\n  HAL_TIM_OC_DELAY_ELAPSED_CB_ID = 0x14U /*!< TIM Output Compare Delay Elapsed Callback ID               */\r\n  ,\r\n  HAL_TIM_PWM_PULSE_FINISHED_CB_ID = 0x15U /*!< TIM PWM Pulse Finished Callback ID           */\r\n  ,\r\n  HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID = 0x16U /*!< TIM PWM Pulse Finished half complete Callback ID           */\r\n  ,\r\n  HAL_TIM_ERROR_CB_ID = 0x17U /*!< TIM Error Callback ID                                      */\r\n  ,\r\n  HAL_TIM_COMMUTATION_CB_ID = 0x18U /*!< TIM Commutation Callback ID                                */\r\n  ,\r\n  HAL_TIM_COMMUTATION_HALF_CB_ID = 0x19U /*!< TIM Commutation half complete Callback ID                  */\r\n  ,\r\n  HAL_TIM_BREAK_CB_ID = 0x1AU /*!< TIM Break Callback ID                                      */\r\n} HAL_TIM_CallbackIDTypeDef;\r\n\r\n/**\r\n * @brief  HAL TIM Callback pointer definition\r\n */\r\ntypedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to the TIM callback function */\r\n\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported types -----------------------------------------------------*/\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup TIM_Exported_Constants TIM Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup TIM_ClearInput_Source TIM Clear Input Source\r\n * @{\r\n */\r\n#define TIM_CLEARINPUTSOURCE_NONE 0x00000000U /*!< OCREF_CLR is disabled */\r\n#define TIM_CLEARINPUTSOURCE_ETR  0x00000001U /*!< OCREF_CLR is connected to ETRF input */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_DMA_Base_address TIM DMA Base Address\r\n * @{\r\n */\r\n#define TIM_DMABASE_CR1   0x00000000U\r\n#define TIM_DMABASE_CR2   0x00000001U\r\n#define TIM_DMABASE_SMCR  0x00000002U\r\n#define TIM_DMABASE_DIER  0x00000003U\r\n#define TIM_DMABASE_SR    0x00000004U\r\n#define TIM_DMABASE_EGR   0x00000005U\r\n#define TIM_DMABASE_CCMR1 0x00000006U\r\n#define TIM_DMABASE_CCMR2 0x00000007U\r\n#define TIM_DMABASE_CCER  0x00000008U\r\n#define TIM_DMABASE_CNT   0x00000009U\r\n#define TIM_DMABASE_PSC   0x0000000AU\r\n#define TIM_DMABASE_ARR   0x0000000BU\r\n#define TIM_DMABASE_RCR   0x0000000CU\r\n#define TIM_DMABASE_CCR1  0x0000000DU\r\n#define TIM_DMABASE_CCR2  0x0000000EU\r\n#define TIM_DMABASE_CCR3  0x0000000FU\r\n#define TIM_DMABASE_CCR4  0x00000010U\r\n#define TIM_DMABASE_BDTR  0x00000011U\r\n#define TIM_DMABASE_DCR   0x00000012U\r\n#define TIM_DMABASE_DMAR  0x00000013U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Event_Source TIM Event Source\r\n * @{\r\n */\r\n#define TIM_EVENTSOURCE_UPDATE  TIM_EGR_UG   /*!< Reinitialize the counter and generates an update of the registers */\r\n#define TIM_EVENTSOURCE_CC1     TIM_EGR_CC1G /*!< A capture/compare event is generated on channel 1 */\r\n#define TIM_EVENTSOURCE_CC2     TIM_EGR_CC2G /*!< A capture/compare event is generated on channel 2 */\r\n#define TIM_EVENTSOURCE_CC3     TIM_EGR_CC3G /*!< A capture/compare event is generated on channel 3 */\r\n#define TIM_EVENTSOURCE_CC4     TIM_EGR_CC4G /*!< A capture/compare event is generated on channel 4 */\r\n#define TIM_EVENTSOURCE_COM     TIM_EGR_COMG /*!< A commutation event is generated */\r\n#define TIM_EVENTSOURCE_TRIGGER TIM_EGR_TG   /*!< A trigger event is generated */\r\n#define TIM_EVENTSOURCE_BREAK   TIM_EGR_BG   /*!< A break event is generated */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Input_Channel_Polarity TIM Input Channel polarity\r\n * @{\r\n */\r\n#define TIM_INPUTCHANNELPOLARITY_RISING   0x00000000U                      /*!< Polarity for TIx source */\r\n#define TIM_INPUTCHANNELPOLARITY_FALLING  TIM_CCER_CC1P                    /*!< Polarity for TIx source */\r\n#define TIM_INPUTCHANNELPOLARITY_BOTHEDGE (TIM_CCER_CC1P | TIM_CCER_CC1NP) /*!< Polarity for TIx source */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_ETR_Polarity TIM ETR Polarity\r\n * @{\r\n */\r\n#define TIM_ETRPOLARITY_INVERTED    TIM_SMCR_ETP /*!< Polarity for ETR source */\r\n#define TIM_ETRPOLARITY_NONINVERTED 0x00000000U  /*!< Polarity for ETR source */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_ETR_Prescaler TIM ETR Prescaler\r\n * @{\r\n */\r\n#define TIM_ETRPRESCALER_DIV1 0x00000000U     /*!< No prescaler is used */\r\n#define TIM_ETRPRESCALER_DIV2 TIM_SMCR_ETPS_0 /*!< ETR input source is divided by 2 */\r\n#define TIM_ETRPRESCALER_DIV4 TIM_SMCR_ETPS_1 /*!< ETR input source is divided by 4 */\r\n#define TIM_ETRPRESCALER_DIV8 TIM_SMCR_ETPS   /*!< ETR input source is divided by 8 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Counter_Mode TIM Counter Mode\r\n * @{\r\n */\r\n#define TIM_COUNTERMODE_UP             0x00000000U   /*!< Counter used as up-counter   */\r\n#define TIM_COUNTERMODE_DOWN           TIM_CR1_DIR   /*!< Counter used as down-counter */\r\n#define TIM_COUNTERMODE_CENTERALIGNED1 TIM_CR1_CMS_0 /*!< Center-aligned mode 1        */\r\n#define TIM_COUNTERMODE_CENTERALIGNED2 TIM_CR1_CMS_1 /*!< Center-aligned mode 2        */\r\n#define TIM_COUNTERMODE_CENTERALIGNED3 TIM_CR1_CMS   /*!< Center-aligned mode 3        */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_ClockDivision TIM Clock Division\r\n * @{\r\n */\r\n#define TIM_CLOCKDIVISION_DIV1 0x00000000U   /*!< Clock division: tDTS=tCK_INT   */\r\n#define TIM_CLOCKDIVISION_DIV2 TIM_CR1_CKD_0 /*!< Clock division: tDTS=2*tCK_INT */\r\n#define TIM_CLOCKDIVISION_DIV4 TIM_CR1_CKD_1 /*!< Clock division: tDTS=4*tCK_INT */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_State TIM Output Compare State\r\n * @{\r\n */\r\n#define TIM_OUTPUTSTATE_DISABLE 0x00000000U   /*!< Capture/Compare 1 output disabled */\r\n#define TIM_OUTPUTSTATE_ENABLE  TIM_CCER_CC1E /*!< Capture/Compare 1 output enabled */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_AutoReloadPreload TIM Auto-Reload Preload\r\n * @{\r\n */\r\n#define TIM_AUTORELOAD_PRELOAD_DISABLE 0x00000000U  /*!< TIMx_ARR register is not buffered */\r\n#define TIM_AUTORELOAD_PRELOAD_ENABLE  TIM_CR1_ARPE /*!< TIMx_ARR register is buffered */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Fast_State TIM Output Fast State\r\n * @{\r\n */\r\n#define TIM_OCFAST_DISABLE 0x00000000U     /*!< Output Compare fast disable */\r\n#define TIM_OCFAST_ENABLE  TIM_CCMR1_OC1FE /*!< Output Compare fast enable  */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_N_State TIM Complementary Output Compare State\r\n * @{\r\n */\r\n#define TIM_OUTPUTNSTATE_DISABLE 0x00000000U    /*!< OCxN is disabled  */\r\n#define TIM_OUTPUTNSTATE_ENABLE  TIM_CCER_CC1NE /*!< OCxN is enabled   */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_Polarity TIM Output Compare Polarity\r\n * @{\r\n */\r\n#define TIM_OCPOLARITY_HIGH 0x00000000U   /*!< Capture/Compare output polarity  */\r\n#define TIM_OCPOLARITY_LOW  TIM_CCER_CC1P /*!< Capture/Compare output polarity  */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_N_Polarity TIM Complementary Output Compare Polarity\r\n * @{\r\n */\r\n#define TIM_OCNPOLARITY_HIGH 0x00000000U    /*!< Capture/Compare complementary output polarity */\r\n#define TIM_OCNPOLARITY_LOW  TIM_CCER_CC1NP /*!< Capture/Compare complementary output polarity */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_Idle_State TIM Output Compare Idle State\r\n * @{\r\n */\r\n#define TIM_OCIDLESTATE_SET   TIM_CR2_OIS1 /*!< Output Idle state: OCx=1 when MOE=0 */\r\n#define TIM_OCIDLESTATE_RESET 0x00000000U  /*!< Output Idle state: OCx=0 when MOE=0 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_N_Idle_State TIM Complementary Output Compare Idle State\r\n * @{\r\n */\r\n#define TIM_OCNIDLESTATE_SET   TIM_CR2_OIS1N /*!< Complementary output Idle state: OCxN=1 when MOE=0 */\r\n#define TIM_OCNIDLESTATE_RESET 0x00000000U   /*!< Complementary output Idle state: OCxN=0 when MOE=0 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Input_Capture_Polarity TIM Input Capture Polarity\r\n * @{\r\n */\r\n#define TIM_ICPOLARITY_RISING   TIM_INPUTCHANNELPOLARITY_RISING   /*!< Capture triggered by rising edge on timer input                  */\r\n#define TIM_ICPOLARITY_FALLING  TIM_INPUTCHANNELPOLARITY_FALLING  /*!< Capture triggered by falling edge on timer input                 */\r\n#define TIM_ICPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Capture triggered by both rising and falling edges on timer input*/\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Encoder_Input_Polarity TIM Encoder Input Polarity\r\n * @{\r\n */\r\n#define TIM_ENCODERINPUTPOLARITY_RISING  TIM_INPUTCHANNELPOLARITY_RISING  /*!< Encoder input with rising edge polarity  */\r\n#define TIM_ENCODERINPUTPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Encoder input with falling edge polarity */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection\r\n * @{\r\n */\r\n#define TIM_ICSELECTION_DIRECTTI                                 \\\r\n  TIM_CCMR1_CC1S_0 /*!< TIM Input 1, 2, 3 or 4 is selected to be \\\r\n                        connected to IC1, IC2, IC3 or IC4, respectively */\r\n#define TIM_ICSELECTION_INDIRECTTI                                                       \\\r\n  TIM_CCMR1_CC1S_1                         /*!< TIM Input 1, 2, 3 or 4 is selected to be \\\r\n                                                connected to IC2, IC1, IC4 or IC3, respectively */\r\n#define TIM_ICSELECTION_TRC TIM_CCMR1_CC1S /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Input_Capture_Prescaler TIM Input Capture Prescaler\r\n * @{\r\n */\r\n#define TIM_ICPSC_DIV1 0x00000000U        /*!< Capture performed each time an edge is detected on the capture input */\r\n#define TIM_ICPSC_DIV2 TIM_CCMR1_IC1PSC_0 /*!< Capture performed once every 2 events                                */\r\n#define TIM_ICPSC_DIV4 TIM_CCMR1_IC1PSC_1 /*!< Capture performed once every 4 events                                */\r\n#define TIM_ICPSC_DIV8 TIM_CCMR1_IC1PSC   /*!< Capture performed once every 8 events                                */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_One_Pulse_Mode TIM One Pulse Mode\r\n * @{\r\n */\r\n#define TIM_OPMODE_SINGLE     TIM_CR1_OPM /*!< Counter stops counting at the next update event */\r\n#define TIM_OPMODE_REPETITIVE 0x00000000U /*!< Counter is not stopped at update event          */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Encoder_Mode TIM Encoder Mode\r\n * @{\r\n */\r\n#define TIM_ENCODERMODE_TI1  TIM_SMCR_SMS_0                    /*!< Quadrature encoder mode 1, x2 mode, counts up/down on TI1FP1 edge depending on TI2FP2 level  */\r\n#define TIM_ENCODERMODE_TI2  TIM_SMCR_SMS_1                    /*!< Quadrature encoder mode 2, x2 mode, counts up/down on TI2FP2 edge depending on TI1FP1 level. */\r\n#define TIM_ENCODERMODE_TI12 (TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< Quadrature encoder mode 3, x4 mode, counts up/down on both TI1FP1 and TI2FP2 edges depending on the level of the other input. */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Interrupt_definition TIM interrupt Definition\r\n * @{\r\n */\r\n#define TIM_IT_UPDATE  TIM_DIER_UIE   /*!< Update interrupt            */\r\n#define TIM_IT_CC1     TIM_DIER_CC1IE /*!< Capture/Compare 1 interrupt */\r\n#define TIM_IT_CC2     TIM_DIER_CC2IE /*!< Capture/Compare 2 interrupt */\r\n#define TIM_IT_CC3     TIM_DIER_CC3IE /*!< Capture/Compare 3 interrupt */\r\n#define TIM_IT_CC4     TIM_DIER_CC4IE /*!< Capture/Compare 4 interrupt */\r\n#define TIM_IT_COM     TIM_DIER_COMIE /*!< Commutation interrupt       */\r\n#define TIM_IT_TRIGGER TIM_DIER_TIE   /*!< Trigger interrupt           */\r\n#define TIM_IT_BREAK   TIM_DIER_BIE   /*!< Break interrupt             */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Commutation_Source  TIM Commutation Source\r\n * @{\r\n */\r\n#define TIM_COMMUTATION_TRGI     TIM_CR2_CCUS /*!< When Capture/compare control bits are preloaded, they are updated by setting the COMG bit or when an rising edge occurs on trigger input */\r\n#define TIM_COMMUTATION_SOFTWARE 0x00000000U  /*!< When Capture/compare control bits are preloaded, they are updated by setting the COMG bit */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_DMA_sources TIM DMA Sources\r\n * @{\r\n */\r\n#define TIM_DMA_UPDATE  TIM_DIER_UDE   /*!< DMA request is triggered by the update event */\r\n#define TIM_DMA_CC1     TIM_DIER_CC1DE /*!< DMA request is triggered by the capture/compare macth 1 event */\r\n#define TIM_DMA_CC2     TIM_DIER_CC2DE /*!< DMA request is triggered by the capture/compare macth 2 event event */\r\n#define TIM_DMA_CC3     TIM_DIER_CC3DE /*!< DMA request is triggered by the capture/compare macth 3 event event */\r\n#define TIM_DMA_CC4     TIM_DIER_CC4DE /*!< DMA request is triggered by the capture/compare macth 4 event event */\r\n#define TIM_DMA_COM     TIM_DIER_COMDE /*!< DMA request is triggered by the commutation event */\r\n#define TIM_DMA_TRIGGER TIM_DIER_TDE   /*!< DMA request is triggered by the trigger event */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Flag_definition TIM Flag Definition\r\n * @{\r\n */\r\n#define TIM_FLAG_UPDATE  TIM_SR_UIF   /*!< Update interrupt flag         */\r\n#define TIM_FLAG_CC1     TIM_SR_CC1IF /*!< Capture/Compare 1 interrupt flag */\r\n#define TIM_FLAG_CC2     TIM_SR_CC2IF /*!< Capture/Compare 2 interrupt flag */\r\n#define TIM_FLAG_CC3     TIM_SR_CC3IF /*!< Capture/Compare 3 interrupt flag */\r\n#define TIM_FLAG_CC4     TIM_SR_CC4IF /*!< Capture/Compare 4 interrupt flag */\r\n#define TIM_FLAG_COM     TIM_SR_COMIF /*!< Commutation interrupt flag    */\r\n#define TIM_FLAG_TRIGGER TIM_SR_TIF   /*!< Trigger interrupt flag        */\r\n#define TIM_FLAG_BREAK   TIM_SR_BIF   /*!< Break interrupt flag          */\r\n#define TIM_FLAG_CC1OF   TIM_SR_CC1OF /*!< Capture 1 overcapture flag    */\r\n#define TIM_FLAG_CC2OF   TIM_SR_CC2OF /*!< Capture 2 overcapture flag    */\r\n#define TIM_FLAG_CC3OF   TIM_SR_CC3OF /*!< Capture 3 overcapture flag    */\r\n#define TIM_FLAG_CC4OF   TIM_SR_CC4OF /*!< Capture 4 overcapture flag    */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Channel TIM Channel\r\n * @{\r\n */\r\n#define TIM_CHANNEL_1   0x00000000U /*!< Capture/compare channel 1 identifier      */\r\n#define TIM_CHANNEL_2   0x00000004U /*!< Capture/compare channel 2 identifier      */\r\n#define TIM_CHANNEL_3   0x00000008U /*!< Capture/compare channel 3 identifier      */\r\n#define TIM_CHANNEL_4   0x0000000CU /*!< Capture/compare channel 4 identifier      */\r\n#define TIM_CHANNEL_ALL 0x0000003CU /*!< Global Capture/compare channel identifier  */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Clock_Source TIM Clock Source\r\n * @{\r\n */\r\n#define TIM_CLOCKSOURCE_ETRMODE2 TIM_SMCR_ETPS_1 /*!< External clock source mode 2                          */\r\n#define TIM_CLOCKSOURCE_INTERNAL TIM_SMCR_ETPS_0 /*!< Internal clock source                                 */\r\n#define TIM_CLOCKSOURCE_ITR0     TIM_TS_ITR0     /*!< External clock source mode 1 (ITR0)                   */\r\n#define TIM_CLOCKSOURCE_ITR1     TIM_TS_ITR1     /*!< External clock source mode 1 (ITR1)                   */\r\n#define TIM_CLOCKSOURCE_ITR2     TIM_TS_ITR2     /*!< External clock source mode 1 (ITR2)                   */\r\n#define TIM_CLOCKSOURCE_ITR3     TIM_TS_ITR3     /*!< External clock source mode 1 (ITR3)                   */\r\n#define TIM_CLOCKSOURCE_TI1ED    TIM_TS_TI1F_ED  /*!< External clock source mode 1 (TTI1FP1 + edge detect.) */\r\n#define TIM_CLOCKSOURCE_TI1      TIM_TS_TI1FP1   /*!< External clock source mode 1 (TTI1FP1)                */\r\n#define TIM_CLOCKSOURCE_TI2      TIM_TS_TI2FP2   /*!< External clock source mode 1 (TTI2FP2)                */\r\n#define TIM_CLOCKSOURCE_ETRMODE1 TIM_TS_ETRF     /*!< External clock source mode 1 (ETRF)                   */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Clock_Polarity TIM Clock Polarity\r\n * @{\r\n */\r\n#define TIM_CLOCKPOLARITY_INVERTED    TIM_ETRPOLARITY_INVERTED          /*!< Polarity for ETRx clock sources */\r\n#define TIM_CLOCKPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED       /*!< Polarity for ETRx clock sources */\r\n#define TIM_CLOCKPOLARITY_RISING      TIM_INPUTCHANNELPOLARITY_RISING   /*!< Polarity for TIx clock sources */\r\n#define TIM_CLOCKPOLARITY_FALLING     TIM_INPUTCHANNELPOLARITY_FALLING  /*!< Polarity for TIx clock sources */\r\n#define TIM_CLOCKPOLARITY_BOTHEDGE    TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Polarity for TIx clock sources */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Clock_Prescaler TIM Clock Prescaler\r\n * @{\r\n */\r\n#define TIM_CLOCKPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used                                                     */\r\n#define TIM_CLOCKPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR Clock: Capture performed once every 2 events. */\r\n#define TIM_CLOCKPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR Clock: Capture performed once every 4 events. */\r\n#define TIM_CLOCKPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR Clock: Capture performed once every 8 events. */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_ClearInput_Polarity TIM Clear Input Polarity\r\n * @{\r\n */\r\n#define TIM_CLEARINPUTPOLARITY_INVERTED    TIM_ETRPOLARITY_INVERTED    /*!< Polarity for ETRx pin */\r\n#define TIM_CLEARINPUTPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx pin */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_ClearInput_Prescaler TIM Clear Input Prescaler\r\n * @{\r\n */\r\n#define TIM_CLEARINPUTPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used                                                   */\r\n#define TIM_CLEARINPUTPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR pin: Capture performed once every 2 events. */\r\n#define TIM_CLEARINPUTPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR pin: Capture performed once every 4 events. */\r\n#define TIM_CLEARINPUTPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR pin: Capture performed once every 8 events. */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_OSSR_Off_State_Selection_for_Run_mode_state TIM OSSR OffState Selection for Run mode state\r\n * @{\r\n */\r\n#define TIM_OSSR_ENABLE  TIM_BDTR_OSSR /*!< When inactive, OC/OCN outputs are enabled (still controlled by the timer)           */\r\n#define TIM_OSSR_DISABLE 0x00000000U   /*!< When inactive, OC/OCN outputs are disabled (not controlled any longer by the timer) */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_OSSI_Off_State_Selection_for_Idle_mode_state TIM OSSI OffState Selection for Idle mode state\r\n * @{\r\n */\r\n#define TIM_OSSI_ENABLE  TIM_BDTR_OSSI /*!< When inactive, OC/OCN outputs are enabled (still controlled by the timer)           */\r\n#define TIM_OSSI_DISABLE 0x00000000U   /*!< When inactive, OC/OCN outputs are disabled (not controlled any longer by the timer) */\r\n/**\r\n * @}\r\n */\r\n/** @defgroup TIM_Lock_level  TIM Lock level\r\n * @{\r\n */\r\n#define TIM_LOCKLEVEL_OFF 0x00000000U     /*!< LOCK OFF     */\r\n#define TIM_LOCKLEVEL_1   TIM_BDTR_LOCK_0 /*!< LOCK Level 1 */\r\n#define TIM_LOCKLEVEL_2   TIM_BDTR_LOCK_1 /*!< LOCK Level 2 */\r\n#define TIM_LOCKLEVEL_3   TIM_BDTR_LOCK   /*!< LOCK Level 3 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Break_Input_enable_disable TIM Break Input Enable\r\n * @{\r\n */\r\n#define TIM_BREAK_ENABLE  TIM_BDTR_BKE /*!< Break input BRK is enabled  */\r\n#define TIM_BREAK_DISABLE 0x00000000U  /*!< Break input BRK is disabled */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Break_Polarity TIM Break Input Polarity\r\n * @{\r\n */\r\n#define TIM_BREAKPOLARITY_LOW  0x00000000U  /*!< Break input BRK is active low  */\r\n#define TIM_BREAKPOLARITY_HIGH TIM_BDTR_BKP /*!< Break input BRK is active high */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_AOE_Bit_Set_Reset TIM Automatic Output Enable\r\n * @{\r\n */\r\n#define TIM_AUTOMATICOUTPUT_DISABLE 0x00000000U /*!< MOE can be set only by software */\r\n#define TIM_AUTOMATICOUTPUT_ENABLE                                                       \\\r\n  TIM_BDTR_AOE /*!< MOE can be set by software or automatically at the next update event \\\r\n                   (if none of the break inputs BRK and BRK2 is active) */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Master_Mode_Selection TIM Master Mode Selection\r\n * @{\r\n */\r\n#define TIM_TRGO_RESET  0x00000000U                                     /*!< TIMx_EGR.UG bit is used as trigger output (TRGO)              */\r\n#define TIM_TRGO_ENABLE TIM_CR2_MMS_0                                   /*!< TIMx_CR1.CEN bit is used as trigger output (TRGO)             */\r\n#define TIM_TRGO_UPDATE TIM_CR2_MMS_1                                   /*!< Update event is used as trigger output (TRGO)                 */\r\n#define TIM_TRGO_OC1    (TIM_CR2_MMS_1 | TIM_CR2_MMS_0)                 /*!< Capture or a compare match 1 is used as trigger output (TRGO) */\r\n#define TIM_TRGO_OC1REF TIM_CR2_MMS_2                                   /*!< OC1REF signal is used as trigger output (TRGO)                */\r\n#define TIM_TRGO_OC2REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_0)                 /*!< OC2REF signal is used as trigger output(TRGO)                 */\r\n#define TIM_TRGO_OC3REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_1)                 /*!< OC3REF signal is used as trigger output(TRGO)                 */\r\n#define TIM_TRGO_OC4REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_1 | TIM_CR2_MMS_0) /*!< OC4REF signal is used as trigger output(TRGO)                 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Master_Slave_Mode TIM Master/Slave Mode\r\n * @{\r\n */\r\n#define TIM_MASTERSLAVEMODE_ENABLE  TIM_SMCR_MSM /*!< No action */\r\n#define TIM_MASTERSLAVEMODE_DISABLE 0x00000000U  /*!< Master/slave mode is selected */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Slave_Mode TIM Slave mode\r\n * @{\r\n */\r\n#define TIM_SLAVEMODE_DISABLE   0x00000000U                                        /*!< Slave mode disabled           */\r\n#define TIM_SLAVEMODE_RESET     TIM_SMCR_SMS_2                                     /*!< Reset Mode                    */\r\n#define TIM_SLAVEMODE_GATED     (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_0)                  /*!< Gated Mode                    */\r\n#define TIM_SLAVEMODE_TRIGGER   (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1)                  /*!< Trigger Mode                  */\r\n#define TIM_SLAVEMODE_EXTERNAL1 (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< External Clock Mode 1         */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_and_PWM_modes TIM Output Compare and PWM Modes\r\n * @{\r\n */\r\n#define TIM_OCMODE_TIMING          0x00000000U                                              /*!< Frozen                                 */\r\n#define TIM_OCMODE_ACTIVE          TIM_CCMR1_OC1M_0                                         /*!< Set channel to active level on match   */\r\n#define TIM_OCMODE_INACTIVE        TIM_CCMR1_OC1M_1                                         /*!< Set channel to inactive level on match */\r\n#define TIM_OCMODE_TOGGLE          (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0)                    /*!< Toggle                                 */\r\n#define TIM_OCMODE_PWM1            (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1)                    /*!< PWM mode 1                             */\r\n#define TIM_OCMODE_PWM2            (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0) /*!< PWM mode 2                             */\r\n#define TIM_OCMODE_FORCED_ACTIVE   (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_0)                    /*!< Force active level                     */\r\n#define TIM_OCMODE_FORCED_INACTIVE TIM_CCMR1_OC1M_2                                         /*!< Force inactive level                   */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Trigger_Selection TIM Trigger Selection\r\n * @{\r\n */\r\n#define TIM_TS_ITR0    0x00000000U                                     /*!< Internal Trigger 0 (ITR0)              */\r\n#define TIM_TS_ITR1    TIM_SMCR_TS_0                                   /*!< Internal Trigger 1 (ITR1)              */\r\n#define TIM_TS_ITR2    TIM_SMCR_TS_1                                   /*!< Internal Trigger 2 (ITR2)              */\r\n#define TIM_TS_ITR3    (TIM_SMCR_TS_0 | TIM_SMCR_TS_1)                 /*!< Internal Trigger 3 (ITR3)              */\r\n#define TIM_TS_TI1F_ED TIM_SMCR_TS_2                                   /*!< TI1 Edge Detector (TI1F_ED)            */\r\n#define TIM_TS_TI1FP1  (TIM_SMCR_TS_0 | TIM_SMCR_TS_2)                 /*!< Filtered Timer Input 1 (TI1FP1)        */\r\n#define TIM_TS_TI2FP2  (TIM_SMCR_TS_1 | TIM_SMCR_TS_2)                 /*!< Filtered Timer Input 2 (TI2FP2)        */\r\n#define TIM_TS_ETRF    (TIM_SMCR_TS_0 | TIM_SMCR_TS_1 | TIM_SMCR_TS_2) /*!< Filtered External Trigger input (ETRF) */\r\n#define TIM_TS_NONE    0x0000FFFFU                                     /*!< No trigger selected                    */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Trigger_Polarity TIM Trigger Polarity\r\n * @{\r\n */\r\n#define TIM_TRIGGERPOLARITY_INVERTED    TIM_ETRPOLARITY_INVERTED          /*!< Polarity for ETRx trigger sources             */\r\n#define TIM_TRIGGERPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED       /*!< Polarity for ETRx trigger sources             */\r\n#define TIM_TRIGGERPOLARITY_RISING      TIM_INPUTCHANNELPOLARITY_RISING   /*!< Polarity for TIxFPx or TI1_ED trigger sources */\r\n#define TIM_TRIGGERPOLARITY_FALLING     TIM_INPUTCHANNELPOLARITY_FALLING  /*!< Polarity for TIxFPx or TI1_ED trigger sources */\r\n#define TIM_TRIGGERPOLARITY_BOTHEDGE    TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Polarity for TIxFPx or TI1_ED trigger sources */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Trigger_Prescaler TIM Trigger Prescaler\r\n * @{\r\n */\r\n#define TIM_TRIGGERPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used                                                       */\r\n#define TIM_TRIGGERPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR Trigger: Capture performed once every 2 events. */\r\n#define TIM_TRIGGERPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR Trigger: Capture performed once every 4 events. */\r\n#define TIM_TRIGGERPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR Trigger: Capture performed once every 8 events. */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_TI1_Selection TIM TI1 Input Selection\r\n * @{\r\n */\r\n#define TIM_TI1SELECTION_CH1            0x00000000U  /*!< The TIMx_CH1 pin is connected to TI1 input */\r\n#define TIM_TI1SELECTION_XORCOMBINATION TIM_CR2_TI1S /*!< The TIMx_CH1, CH2 and CH3 pins are connected to the TI1 input (XOR combination) */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_DMA_Burst_Length TIM DMA Burst Length\r\n * @{\r\n */\r\n#define TIM_DMABURSTLENGTH_1TRANSFER   0x00000000U /*!< The transfer is done to 1 register starting trom TIMx_CR1 + TIMx_DCR.DBA   */\r\n#define TIM_DMABURSTLENGTH_2TRANSFERS  0x00000100U /*!< The transfer is done to 2 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_3TRANSFERS  0x00000200U /*!< The transfer is done to 3 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_4TRANSFERS  0x00000300U /*!< The transfer is done to 4 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_5TRANSFERS  0x00000400U /*!< The transfer is done to 5 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_6TRANSFERS  0x00000500U /*!< The transfer is done to 6 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_7TRANSFERS  0x00000600U /*!< The transfer is done to 7 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_8TRANSFERS  0x00000700U /*!< The transfer is done to 8 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_9TRANSFERS  0x00000800U /*!< The transfer is done to 9 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_10TRANSFERS 0x00000900U /*!< The transfer is done to 10 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_11TRANSFERS 0x00000A00U /*!< The transfer is done to 11 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_12TRANSFERS 0x00000B00U /*!< The transfer is done to 12 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_13TRANSFERS 0x00000C00U /*!< The transfer is done to 13 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_14TRANSFERS 0x00000D00U /*!< The transfer is done to 14 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_15TRANSFERS 0x00000E00U /*!< The transfer is done to 15 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_16TRANSFERS 0x00000F00U /*!< The transfer is done to 16 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_17TRANSFERS 0x00001000U /*!< The transfer is done to 17 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_18TRANSFERS 0x00001100U /*!< The transfer is done to 18 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Handle_index TIM DMA Handle Index\r\n * @{\r\n */\r\n#define TIM_DMA_ID_UPDATE      ((uint16_t)0x0000) /*!< Index of the DMA handle used for Update DMA requests */\r\n#define TIM_DMA_ID_CC1         ((uint16_t)0x0001) /*!< Index of the DMA handle used for Capture/Compare 1 DMA requests */\r\n#define TIM_DMA_ID_CC2         ((uint16_t)0x0002) /*!< Index of the DMA handle used for Capture/Compare 2 DMA requests */\r\n#define TIM_DMA_ID_CC3         ((uint16_t)0x0003) /*!< Index of the DMA handle used for Capture/Compare 3 DMA requests */\r\n#define TIM_DMA_ID_CC4         ((uint16_t)0x0004) /*!< Index of the DMA handle used for Capture/Compare 4 DMA requests */\r\n#define TIM_DMA_ID_COMMUTATION ((uint16_t)0x0005) /*!< Index of the DMA handle used for Commutation DMA requests */\r\n#define TIM_DMA_ID_TRIGGER     ((uint16_t)0x0006) /*!< Index of the DMA handle used for Trigger DMA requests */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup Channel_CC_State TIM Capture/Compare Channel State\r\n * @{\r\n */\r\n#define TIM_CCx_ENABLE   0x00000001U /*!< Input or output channel is enabled */\r\n#define TIM_CCx_DISABLE  0x00000000U /*!< Input or output channel is disabled */\r\n#define TIM_CCxN_ENABLE  0x00000004U /*!< Complementary output channel is enabled */\r\n#define TIM_CCxN_DISABLE 0x00000000U /*!< Complementary output channel is enabled */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported constants -------------------------------------------------*/\r\n\r\n/* Exported macros -----------------------------------------------------------*/\r\n/** @defgroup TIM_Exported_Macros TIM Exported Macros\r\n * @{\r\n */\r\n\r\n/** @brief  Reset TIM handle state.\r\n * @param  __HANDLE__ TIM handle.\r\n * @retval None\r\n */\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__)                              \\\r\n  do {                                                                        \\\r\n    (__HANDLE__)->State                        = HAL_TIM_STATE_RESET;         \\\r\n    (__HANDLE__)->ChannelState[0]              = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[1]              = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[2]              = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[3]              = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[0]             = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[1]             = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[2]             = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[3]             = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->DMABurstState                = HAL_DMA_BURST_STATE_RESET;   \\\r\n    (__HANDLE__)->Base_MspInitCallback         = NULL;                        \\\r\n    (__HANDLE__)->Base_MspDeInitCallback       = NULL;                        \\\r\n    (__HANDLE__)->IC_MspInitCallback           = NULL;                        \\\r\n    (__HANDLE__)->IC_MspDeInitCallback         = NULL;                        \\\r\n    (__HANDLE__)->OC_MspInitCallback           = NULL;                        \\\r\n    (__HANDLE__)->OC_MspDeInitCallback         = NULL;                        \\\r\n    (__HANDLE__)->PWM_MspInitCallback          = NULL;                        \\\r\n    (__HANDLE__)->PWM_MspDeInitCallback        = NULL;                        \\\r\n    (__HANDLE__)->OnePulse_MspInitCallback     = NULL;                        \\\r\n    (__HANDLE__)->OnePulse_MspDeInitCallback   = NULL;                        \\\r\n    (__HANDLE__)->Encoder_MspInitCallback      = NULL;                        \\\r\n    (__HANDLE__)->Encoder_MspDeInitCallback    = NULL;                        \\\r\n    (__HANDLE__)->HallSensor_MspInitCallback   = NULL;                        \\\r\n    (__HANDLE__)->HallSensor_MspDeInitCallback = NULL;                        \\\r\n  } while (0)\r\n#else\r\n#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__)                  \\\r\n  do {                                                            \\\r\n    (__HANDLE__)->State            = HAL_TIM_STATE_RESET;         \\\r\n    (__HANDLE__)->ChannelState[0]  = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[1]  = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[2]  = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[3]  = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[0] = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[1] = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[2] = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[3] = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->DMABurstState    = HAL_DMA_BURST_STATE_RESET;   \\\r\n  } while (0)\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @brief  Enable the TIM peripheral.\r\n * @param  __HANDLE__ TIM handle\r\n * @retval None\r\n */\r\n#define __HAL_TIM_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= (TIM_CR1_CEN))\r\n\r\n/**\r\n * @brief  Enable the TIM main Output.\r\n * @param  __HANDLE__ TIM handle\r\n * @retval None\r\n */\r\n#define __HAL_TIM_MOE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->BDTR |= (TIM_BDTR_MOE))\r\n\r\n/**\r\n * @brief  Disable the TIM peripheral.\r\n * @param  __HANDLE__ TIM handle\r\n * @retval None\r\n */\r\n#define __HAL_TIM_DISABLE(__HANDLE__)                                    \\\r\n  do {                                                                   \\\r\n    if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) {    \\\r\n      if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) { \\\r\n        (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN);                   \\\r\n      }                                                                  \\\r\n    }                                                                    \\\r\n  } while (0)\r\n\r\n/**\r\n * @brief  Disable the TIM main Output.\r\n * @param  __HANDLE__ TIM handle\r\n * @retval None\r\n * @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been disabled\r\n */\r\n#define __HAL_TIM_MOE_DISABLE(__HANDLE__)                                \\\r\n  do {                                                                   \\\r\n    if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) {    \\\r\n      if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) { \\\r\n        (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE);                 \\\r\n      }                                                                  \\\r\n    }                                                                    \\\r\n  } while (0)\r\n\r\n/**\r\n * @brief  Disable the TIM main Output.\r\n * @param  __HANDLE__ TIM handle\r\n * @retval None\r\n * @note The Main Output Enable of a timer instance is disabled unconditionally\r\n */\r\n#define __HAL_TIM_MOE_DISABLE_UNCONDITIONALLY(__HANDLE__) (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE)\r\n\r\n/** @brief  Enable the specified TIM interrupt.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __INTERRUPT__ specifies the TIM interrupt source to enable.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_IT_UPDATE: Update interrupt\r\n *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt\r\n *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt\r\n *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt\r\n *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt\r\n *            @arg TIM_IT_COM:   Commutation interrupt\r\n *            @arg TIM_IT_TRIGGER: Trigger interrupt\r\n *            @arg TIM_IT_BREAK: Break interrupt\r\n * @retval None\r\n */\r\n#define __HAL_TIM_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER |= (__INTERRUPT__))\r\n\r\n/** @brief  Disable the specified TIM interrupt.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __INTERRUPT__ specifies the TIM interrupt source to disable.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_IT_UPDATE: Update interrupt\r\n *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt\r\n *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt\r\n *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt\r\n *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt\r\n *            @arg TIM_IT_COM:   Commutation interrupt\r\n *            @arg TIM_IT_TRIGGER: Trigger interrupt\r\n *            @arg TIM_IT_BREAK: Break interrupt\r\n * @retval None\r\n */\r\n#define __HAL_TIM_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER &= ~(__INTERRUPT__))\r\n\r\n/** @brief  Enable the specified DMA request.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __DMA__ specifies the TIM DMA request to enable.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: Update DMA request\r\n *            @arg TIM_DMA_CC1:   Capture/Compare 1 DMA request\r\n *            @arg TIM_DMA_CC2:  Capture/Compare 2 DMA request\r\n *            @arg TIM_DMA_CC3:  Capture/Compare 3 DMA request\r\n *            @arg TIM_DMA_CC4:  Capture/Compare 4 DMA request\r\n *            @arg TIM_DMA_COM:   Commutation DMA request\r\n *            @arg TIM_DMA_TRIGGER: Trigger DMA request\r\n * @retval None\r\n */\r\n#define __HAL_TIM_ENABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER |= (__DMA__))\r\n\r\n/** @brief  Disable the specified DMA request.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __DMA__ specifies the TIM DMA request to disable.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: Update DMA request\r\n *            @arg TIM_DMA_CC1:   Capture/Compare 1 DMA request\r\n *            @arg TIM_DMA_CC2:  Capture/Compare 2 DMA request\r\n *            @arg TIM_DMA_CC3:  Capture/Compare 3 DMA request\r\n *            @arg TIM_DMA_CC4:  Capture/Compare 4 DMA request\r\n *            @arg TIM_DMA_COM:   Commutation DMA request\r\n *            @arg TIM_DMA_TRIGGER: Trigger DMA request\r\n * @retval None\r\n */\r\n#define __HAL_TIM_DISABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER &= ~(__DMA__))\r\n\r\n/** @brief  Check whether the specified TIM interrupt flag is set or not.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __FLAG__ specifies the TIM interrupt flag to check.\r\n *        This parameter can be one of the following values:\r\n *            @arg TIM_FLAG_UPDATE: Update interrupt flag\r\n *            @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag\r\n *            @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag\r\n *            @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag\r\n *            @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag\r\n *            @arg TIM_FLAG_COM:  Commutation interrupt flag\r\n *            @arg TIM_FLAG_TRIGGER: Trigger interrupt flag\r\n *            @arg TIM_FLAG_BREAK: Break interrupt flag\r\n *            @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag\r\n *            @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag\r\n *            @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag\r\n *            @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag\r\n * @retval The new state of __FLAG__ (TRUE or FALSE).\r\n */\r\n#define __HAL_TIM_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))\r\n\r\n/** @brief  Clear the specified TIM interrupt flag.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __FLAG__ specifies the TIM interrupt flag to clear.\r\n *        This parameter can be one of the following values:\r\n *            @arg TIM_FLAG_UPDATE: Update interrupt flag\r\n *            @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag\r\n *            @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag\r\n *            @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag\r\n *            @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag\r\n *            @arg TIM_FLAG_COM:  Commutation interrupt flag\r\n *            @arg TIM_FLAG_TRIGGER: Trigger interrupt flag\r\n *            @arg TIM_FLAG_BREAK: Break interrupt flag\r\n *            @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag\r\n *            @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag\r\n *            @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag\r\n *            @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag\r\n * @retval The new state of __FLAG__ (TRUE or FALSE).\r\n */\r\n#define __HAL_TIM_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__))\r\n\r\n/**\r\n * @brief  Check whether the specified TIM interrupt source is enabled or not.\r\n * @param  __HANDLE__ TIM handle\r\n * @param  __INTERRUPT__ specifies the TIM interrupt source to check.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_IT_UPDATE: Update interrupt\r\n *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt\r\n *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt\r\n *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt\r\n *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt\r\n *            @arg TIM_IT_COM:   Commutation interrupt\r\n *            @arg TIM_IT_TRIGGER: Trigger interrupt\r\n *            @arg TIM_IT_BREAK: Break interrupt\r\n * @retval The state of TIM_IT (SET or RESET).\r\n */\r\n#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)\r\n\r\n/** @brief Clear the TIM interrupt pending bits.\r\n * @param  __HANDLE__ TIM handle\r\n * @param  __INTERRUPT__ specifies the interrupt pending bit to clear.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_IT_UPDATE: Update interrupt\r\n *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt\r\n *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt\r\n *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt\r\n *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt\r\n *            @arg TIM_IT_COM:   Commutation interrupt\r\n *            @arg TIM_IT_TRIGGER: Trigger interrupt\r\n *            @arg TIM_IT_BREAK: Break interrupt\r\n * @retval None\r\n */\r\n#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__))\r\n\r\n/**\r\n  * @brief  Indicates whether or not the TIM Counter is used as downcounter.\r\n  * @param  __HANDLE__ TIM handle.\r\n  * @retval False (Counter used as upcounter) or True (Counter used as downcounter)\r\n  * @note This macro is particularly useful to get the counting mode when the timer operates in Center-aligned mode or Encoder\r\nmode.\r\n  */\r\n#define __HAL_TIM_IS_TIM_COUNTING_DOWN(__HANDLE__) (((__HANDLE__)->Instance->CR1 & (TIM_CR1_DIR)) == (TIM_CR1_DIR))\r\n\r\n/**\r\n * @brief  Set the TIM Prescaler on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __PRESC__ specifies the Prescaler new value.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_PRESCALER(__HANDLE__, __PRESC__) ((__HANDLE__)->Instance->PSC = (__PRESC__))\r\n\r\n/**\r\n * @brief  Set the TIM Counter Register value on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __COUNTER__ specifies the Counter register new value.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__) ((__HANDLE__)->Instance->CNT = (__COUNTER__))\r\n\r\n/**\r\n * @brief  Get the TIM Counter Register value on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT)\r\n */\r\n#define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT)\r\n\r\n/**\r\n * @brief  Set the TIM Autoreload Register value on runtime without calling another time any Init function.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __AUTORELOAD__ specifies the Counter register new value.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \\\r\n  do {                                                       \\\r\n    (__HANDLE__)->Instance->ARR = (__AUTORELOAD__);          \\\r\n    (__HANDLE__)->Init.Period   = (__AUTORELOAD__);          \\\r\n  } while (0)\r\n\r\n/**\r\n * @brief  Get the TIM Autoreload Register value on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR)\r\n */\r\n#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) ((__HANDLE__)->Instance->ARR)\r\n\r\n/**\r\n * @brief  Set the TIM Clock Division value on runtime without calling another time any Init function.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CKD__ specifies the clock division value.\r\n *          This parameter can be one of the following value:\r\n *            @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT\r\n *            @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT\r\n *            @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \\\r\n  do {                                                   \\\r\n    (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD);       \\\r\n    (__HANDLE__)->Instance->CR1 |= (__CKD__);            \\\r\n    (__HANDLE__)->Init.ClockDivision = (__CKD__);        \\\r\n  } while (0)\r\n\r\n/**\r\n * @brief  Get the TIM Clock Division value on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @retval The clock division can be one of the following values:\r\n *            @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT\r\n *            @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT\r\n *            @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT\r\n */\r\n#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)\r\n\r\n/**\r\n * @brief  Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() function.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  __ICPSC__ specifies the Input Capture4 prescaler new value.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPSC_DIV1: no prescaler\r\n *            @arg TIM_ICPSC_DIV2: capture is done once every 2 events\r\n *            @arg TIM_ICPSC_DIV4: capture is done once every 4 events\r\n *            @arg TIM_ICPSC_DIV8: capture is done once every 8 events\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__)   \\\r\n  do {                                                                  \\\r\n    TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__));            \\\r\n    TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \\\r\n  } while (0)\r\n\r\n/**\r\n * @brief  Get the TIM Input Capture prescaler on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: get input capture 1 prescaler value\r\n *            @arg TIM_CHANNEL_2: get input capture 2 prescaler value\r\n *            @arg TIM_CHANNEL_3: get input capture 3 prescaler value\r\n *            @arg TIM_CHANNEL_4: get input capture 4 prescaler value\r\n * @retval The input capture prescaler can be one of the following values:\r\n *            @arg TIM_ICPSC_DIV1: no prescaler\r\n *            @arg TIM_ICPSC_DIV2: capture is done once every 2 events\r\n *            @arg TIM_ICPSC_DIV4: capture is done once every 4 events\r\n *            @arg TIM_ICPSC_DIV8: capture is done once every 8 events\r\n */\r\n#define __HAL_TIM_GET_ICPRESCALER(__HANDLE__, __CHANNEL__)                                         \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC1PSC)         \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? (((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC2PSC) >> 8U) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC3PSC)         \\\r\n                                      : (((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC4PSC)) >> 8U)\r\n\r\n/**\r\n * @brief  Set the TIM Capture Compare Register value on runtime without calling another time ConfigChannel function.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  __COMPARE__ specifies the Capture Compare register new value.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__)                    \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) \\\r\n                                      : ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)))\r\n\r\n/**\r\n * @brief  Get the TIM Capture Compare Register value on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channel associated with the capture compare register\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: get capture/compare 1 register value\r\n *            @arg TIM_CHANNEL_2: get capture/compare 2 register value\r\n *            @arg TIM_CHANNEL_3: get capture/compare 3 register value\r\n *            @arg TIM_CHANNEL_4: get capture/compare 4 register value\r\n * @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy)\r\n */\r\n#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__)                 \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCR1) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) \\\r\n                                      : ((__HANDLE__)->Instance->CCR4))\r\n\r\n/**\r\n * @brief  Set the TIM Output compare preload.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval None\r\n */\r\n#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__)                               \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE))\r\n\r\n/**\r\n * @brief  Reset the TIM Output compare preload.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval None\r\n */\r\n#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__)                               \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE))\r\n\r\n/**\r\n * @brief  Enable fast mode for a given channel.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @note  When fast mode is enabled an active edge on the trigger input acts\r\n *        like a compare match on CCx output. Delay to sample the trigger\r\n *        input and to activate CCx output is reduced to 3 clock cycles.\r\n * @note  Fast mode acts only if the channel is configured in PWM1 or PWM2 mode.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__)                                  \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE))\r\n\r\n/**\r\n * @brief  Disable fast mode for a given channel.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @note  When fast mode is disabled CCx output behaves normally depending\r\n *        on counter and CCRx values even when the trigger is ON. The minimum\r\n *        delay to activate CCx output when an active edge occurs on the\r\n *        trigger input is 5 clock cycles.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__)                                  \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE))\r\n\r\n/**\r\n * @brief  Set the Update Request Source (URS) bit of the TIMx_CR1 register.\r\n * @param  __HANDLE__ TIM handle.\r\n * @note  When the URS bit of the TIMx_CR1 register is set, only counter\r\n *        overflow/underflow generates an update interrupt or DMA request (if\r\n *        enabled)\r\n * @retval None\r\n */\r\n#define __HAL_TIM_URS_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= TIM_CR1_URS)\r\n\r\n/**\r\n * @brief  Reset the Update Request Source (URS) bit of the TIMx_CR1 register.\r\n * @param  __HANDLE__ TIM handle.\r\n * @note  When the URS bit of the TIMx_CR1 register is reset, any of the\r\n *        following events generate an update interrupt or DMA request (if\r\n *        enabled):\r\n *           _ Counter overflow underflow\r\n *           _ Setting the UG bit\r\n *           _ Update generation through the slave mode controller\r\n * @retval None\r\n */\r\n#define __HAL_TIM_URS_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~TIM_CR1_URS)\r\n\r\n/**\r\n * @brief  Set the TIM Capture x input polarity on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  __POLARITY__ Polarity for TIx source\r\n *            @arg TIM_INPUTCHANNELPOLARITY_RISING: Rising Edge\r\n *            @arg TIM_INPUTCHANNELPOLARITY_FALLING: Falling Edge\r\n *            @arg TIM_INPUTCHANNELPOLARITY_BOTHEDGE: Rising and Falling Edge\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \\\r\n  do {                                                                       \\\r\n    TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__));                  \\\r\n    TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__));    \\\r\n  } while (0)\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported macros ----------------------------------------------------*/\r\n\r\n/* Private constants ---------------------------------------------------------*/\r\n/** @defgroup TIM_Private_Constants TIM Private Constants\r\n * @{\r\n */\r\n/* The counter of a timer instance is disabled only if all the CCx and CCxN\r\n   channels have been disabled */\r\n#define TIM_CCER_CCxE_MASK  ((uint32_t)(TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E))\r\n#define TIM_CCER_CCxNE_MASK ((uint32_t)(TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE))\r\n/**\r\n * @}\r\n */\r\n/* End of private constants --------------------------------------------------*/\r\n\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup TIM_Private_Macros TIM Private Macros\r\n * @{\r\n */\r\n#define IS_TIM_CLEARINPUT_SOURCE(__MODE__) (((__MODE__) == TIM_CLEARINPUTSOURCE_NONE) || ((__MODE__) == TIM_CLEARINPUTSOURCE_ETR))\r\n\r\n#define IS_TIM_DMA_BASE(__BASE__)                                                                                                                                                      \\\r\n  (((__BASE__) == TIM_DMABASE_CR1) || ((__BASE__) == TIM_DMABASE_CR2) || ((__BASE__) == TIM_DMABASE_SMCR) || ((__BASE__) == TIM_DMABASE_DIER) || ((__BASE__) == TIM_DMABASE_SR)        \\\r\n   || ((__BASE__) == TIM_DMABASE_EGR) || ((__BASE__) == TIM_DMABASE_CCMR1) || ((__BASE__) == TIM_DMABASE_CCMR2) || ((__BASE__) == TIM_DMABASE_CCER) || ((__BASE__) == TIM_DMABASE_CNT) \\\r\n   || ((__BASE__) == TIM_DMABASE_PSC) || ((__BASE__) == TIM_DMABASE_ARR) || ((__BASE__) == TIM_DMABASE_RCR) || ((__BASE__) == TIM_DMABASE_CCR1) || ((__BASE__) == TIM_DMABASE_CCR2)    \\\r\n   || ((__BASE__) == TIM_DMABASE_CCR3) || ((__BASE__) == TIM_DMABASE_CCR4) || ((__BASE__) == TIM_DMABASE_BDTR))\r\n\r\n#define IS_TIM_EVENT_SOURCE(__SOURCE__) ((((__SOURCE__)&0xFFFFFF00U) == 0x00000000U) && ((__SOURCE__) != 0x00000000U))\r\n\r\n#define IS_TIM_COUNTER_MODE(__MODE__)                                                                                                                                             \\\r\n  (((__MODE__) == TIM_COUNTERMODE_UP) || ((__MODE__) == TIM_COUNTERMODE_DOWN) || ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED1) || ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED2) \\\r\n   || ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED3))\r\n\r\n#define IS_TIM_CLOCKDIVISION_DIV(__DIV__) (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || ((__DIV__) == TIM_CLOCKDIVISION_DIV2) || ((__DIV__) == TIM_CLOCKDIVISION_DIV4))\r\n\r\n#define IS_TIM_AUTORELOAD_PRELOAD(PRELOAD) (((PRELOAD) == TIM_AUTORELOAD_PRELOAD_DISABLE) || ((PRELOAD) == TIM_AUTORELOAD_PRELOAD_ENABLE))\r\n\r\n#define IS_TIM_FAST_STATE(__STATE__) (((__STATE__) == TIM_OCFAST_DISABLE) || ((__STATE__) == TIM_OCFAST_ENABLE))\r\n\r\n#define IS_TIM_OC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_OCPOLARITY_HIGH) || ((__POLARITY__) == TIM_OCPOLARITY_LOW))\r\n\r\n#define IS_TIM_OCN_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_OCNPOLARITY_HIGH) || ((__POLARITY__) == TIM_OCNPOLARITY_LOW))\r\n\r\n#define IS_TIM_OCIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCIDLESTATE_SET) || ((__STATE__) == TIM_OCIDLESTATE_RESET))\r\n\r\n#define IS_TIM_OCNIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCNIDLESTATE_SET) || ((__STATE__) == TIM_OCNIDLESTATE_RESET))\r\n\r\n#define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_RISING) || ((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_FALLING))\r\n\r\n#define IS_TIM_IC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ICPOLARITY_RISING) || ((__POLARITY__) == TIM_ICPOLARITY_FALLING) || ((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE))\r\n\r\n#define IS_TIM_IC_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_ICSELECTION_DIRECTTI) || ((__SELECTION__) == TIM_ICSELECTION_INDIRECTTI) || ((__SELECTION__) == TIM_ICSELECTION_TRC))\r\n\r\n#define IS_TIM_IC_PRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_ICPSC_DIV1) || ((__PRESCALER__) == TIM_ICPSC_DIV2) || ((__PRESCALER__) == TIM_ICPSC_DIV4) || ((__PRESCALER__) == TIM_ICPSC_DIV8))\r\n\r\n#define IS_TIM_OPM_MODE(__MODE__) (((__MODE__) == TIM_OPMODE_SINGLE) || ((__MODE__) == TIM_OPMODE_REPETITIVE))\r\n\r\n#define IS_TIM_ENCODER_MODE(__MODE__) (((__MODE__) == TIM_ENCODERMODE_TI1) || ((__MODE__) == TIM_ENCODERMODE_TI2) || ((__MODE__) == TIM_ENCODERMODE_TI12))\r\n\r\n#define IS_TIM_DMA_SOURCE(__SOURCE__) ((((__SOURCE__)&0xFFFF80FFU) == 0x00000000U) && ((__SOURCE__) != 0x00000000U))\r\n\r\n#define IS_TIM_CHANNELS(__CHANNEL__) \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1) || ((__CHANNEL__) == TIM_CHANNEL_2) || ((__CHANNEL__) == TIM_CHANNEL_3) || ((__CHANNEL__) == TIM_CHANNEL_4) || ((__CHANNEL__) == TIM_CHANNEL_ALL))\r\n\r\n#define IS_TIM_OPM_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || ((__CHANNEL__) == TIM_CHANNEL_2))\r\n\r\n#define IS_TIM_COMPLEMENTARY_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || ((__CHANNEL__) == TIM_CHANNEL_2) || ((__CHANNEL__) == TIM_CHANNEL_3))\r\n\r\n#define IS_TIM_CLOCKSOURCE(__CLOCK__)                                                                                                                                       \\\r\n  (((__CLOCK__) == TIM_CLOCKSOURCE_INTERNAL) || ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE2) || ((__CLOCK__) == TIM_CLOCKSOURCE_ITR0) || ((__CLOCK__) == TIM_CLOCKSOURCE_ITR1) \\\r\n   || ((__CLOCK__) == TIM_CLOCKSOURCE_ITR2) || ((__CLOCK__) == TIM_CLOCKSOURCE_ITR3) || ((__CLOCK__) == TIM_CLOCKSOURCE_TI1ED) || ((__CLOCK__) == TIM_CLOCKSOURCE_TI1)      \\\r\n   || ((__CLOCK__) == TIM_CLOCKSOURCE_TI2) || ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE1))\r\n\r\n#define IS_TIM_CLOCKPOLARITY(__POLARITY__)                                                                                                             \\\r\n  (((__POLARITY__) == TIM_CLOCKPOLARITY_INVERTED) || ((__POLARITY__) == TIM_CLOCKPOLARITY_NONINVERTED) || ((__POLARITY__) == TIM_CLOCKPOLARITY_RISING) \\\r\n   || ((__POLARITY__) == TIM_CLOCKPOLARITY_FALLING) || ((__POLARITY__) == TIM_CLOCKPOLARITY_BOTHEDGE))\r\n\r\n#define IS_TIM_CLOCKPRESCALER(__PRESCALER__) \\\r\n  (((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV1) || ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV2) || ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV4) || ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV8))\r\n\r\n#define IS_TIM_CLOCKFILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU)\r\n\r\n#define IS_TIM_CLEARINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_CLEARINPUTPOLARITY_INVERTED) || ((__POLARITY__) == TIM_CLEARINPUTPOLARITY_NONINVERTED))\r\n\r\n#define IS_TIM_CLEARINPUT_PRESCALER(__PRESCALER__)                                                                                                             \\\r\n  (((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV1) || ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV2) || ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV4) \\\r\n   || ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV8))\r\n\r\n#define IS_TIM_CLEARINPUT_FILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU)\r\n\r\n#define IS_TIM_OSSR_STATE(__STATE__) (((__STATE__) == TIM_OSSR_ENABLE) || ((__STATE__) == TIM_OSSR_DISABLE))\r\n\r\n#define IS_TIM_OSSI_STATE(__STATE__) (((__STATE__) == TIM_OSSI_ENABLE) || ((__STATE__) == TIM_OSSI_DISABLE))\r\n\r\n#define IS_TIM_LOCK_LEVEL(__LEVEL__) (((__LEVEL__) == TIM_LOCKLEVEL_OFF) || ((__LEVEL__) == TIM_LOCKLEVEL_1) || ((__LEVEL__) == TIM_LOCKLEVEL_2) || ((__LEVEL__) == TIM_LOCKLEVEL_3))\r\n\r\n#define IS_TIM_BREAK_FILTER(__BRKFILTER__) ((__BRKFILTER__) <= 0xFUL)\r\n\r\n#define IS_TIM_BREAK_STATE(__STATE__) (((__STATE__) == TIM_BREAK_ENABLE) || ((__STATE__) == TIM_BREAK_DISABLE))\r\n\r\n#define IS_TIM_BREAK_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_BREAKPOLARITY_LOW) || ((__POLARITY__) == TIM_BREAKPOLARITY_HIGH))\r\n\r\n#define IS_TIM_AUTOMATIC_OUTPUT_STATE(__STATE__) (((__STATE__) == TIM_AUTOMATICOUTPUT_ENABLE) || ((__STATE__) == TIM_AUTOMATICOUTPUT_DISABLE))\r\n\r\n#define IS_TIM_TRGO_SOURCE(__SOURCE__)                                                                                                                                               \\\r\n  (((__SOURCE__) == TIM_TRGO_RESET) || ((__SOURCE__) == TIM_TRGO_ENABLE) || ((__SOURCE__) == TIM_TRGO_UPDATE) || ((__SOURCE__) == TIM_TRGO_OC1) || ((__SOURCE__) == TIM_TRGO_OC1REF) \\\r\n   || ((__SOURCE__) == TIM_TRGO_OC2REF) || ((__SOURCE__) == TIM_TRGO_OC3REF) || ((__SOURCE__) == TIM_TRGO_OC4REF))\r\n\r\n#define IS_TIM_MSM_STATE(__STATE__) (((__STATE__) == TIM_MASTERSLAVEMODE_ENABLE) || ((__STATE__) == TIM_MASTERSLAVEMODE_DISABLE))\r\n\r\n#define IS_TIM_SLAVE_MODE(__MODE__)                                                                                                                             \\\r\n  (((__MODE__) == TIM_SLAVEMODE_DISABLE) || ((__MODE__) == TIM_SLAVEMODE_RESET) || ((__MODE__) == TIM_SLAVEMODE_GATED) || ((__MODE__) == TIM_SLAVEMODE_TRIGGER) \\\r\n   || ((__MODE__) == TIM_SLAVEMODE_EXTERNAL1))\r\n\r\n#define IS_TIM_PWM_MODE(__MODE__) (((__MODE__) == TIM_OCMODE_PWM1) || ((__MODE__) == TIM_OCMODE_PWM2))\r\n\r\n#define IS_TIM_OC_MODE(__MODE__)                                                                                                                                                                  \\\r\n  (((__MODE__) == TIM_OCMODE_TIMING) || ((__MODE__) == TIM_OCMODE_ACTIVE) || ((__MODE__) == TIM_OCMODE_INACTIVE) || ((__MODE__) == TIM_OCMODE_TOGGLE) || ((__MODE__) == TIM_OCMODE_FORCED_ACTIVE) \\\r\n   || ((__MODE__) == TIM_OCMODE_FORCED_INACTIVE))\r\n\r\n#define IS_TIM_TRIGGER_SELECTION(__SELECTION__)                                                                                                                                        \\\r\n  (((__SELECTION__) == TIM_TS_ITR0) || ((__SELECTION__) == TIM_TS_ITR1) || ((__SELECTION__) == TIM_TS_ITR2) || ((__SELECTION__) == TIM_TS_ITR3) || ((__SELECTION__) == TIM_TS_TI1F_ED) \\\r\n   || ((__SELECTION__) == TIM_TS_TI1FP1) || ((__SELECTION__) == TIM_TS_TI2FP2) || ((__SELECTION__) == TIM_TS_ETRF))\r\n\r\n#define IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(__SELECTION__) \\\r\n  (((__SELECTION__) == TIM_TS_ITR0) || ((__SELECTION__) == TIM_TS_ITR1) || ((__SELECTION__) == TIM_TS_ITR2) || ((__SELECTION__) == TIM_TS_ITR3) || ((__SELECTION__) == TIM_TS_NONE))\r\n\r\n#define IS_TIM_TRIGGERPOLARITY(__POLARITY__)                                                                                                                 \\\r\n  (((__POLARITY__) == TIM_TRIGGERPOLARITY_INVERTED) || ((__POLARITY__) == TIM_TRIGGERPOLARITY_NONINVERTED) || ((__POLARITY__) == TIM_TRIGGERPOLARITY_RISING) \\\r\n   || ((__POLARITY__) == TIM_TRIGGERPOLARITY_FALLING) || ((__POLARITY__) == TIM_TRIGGERPOLARITY_BOTHEDGE))\r\n\r\n#define IS_TIM_TRIGGERPRESCALER(__PRESCALER__) \\\r\n  (((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV1) || ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV2) || ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV4) || ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV8))\r\n\r\n#define IS_TIM_TRIGGERFILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU)\r\n\r\n#define IS_TIM_TI1SELECTION(__TI1SELECTION__) (((__TI1SELECTION__) == TIM_TI1SELECTION_CH1) || ((__TI1SELECTION__) == TIM_TI1SELECTION_XORCOMBINATION))\r\n\r\n#define IS_TIM_DMA_LENGTH(__LENGTH__)                                                                                                                          \\\r\n  (((__LENGTH__) == TIM_DMABURSTLENGTH_1TRANSFER) || ((__LENGTH__) == TIM_DMABURSTLENGTH_2TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_3TRANSFERS)        \\\r\n   || ((__LENGTH__) == TIM_DMABURSTLENGTH_4TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_5TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_6TRANSFERS)    \\\r\n   || ((__LENGTH__) == TIM_DMABURSTLENGTH_7TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_8TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_9TRANSFERS)    \\\r\n   || ((__LENGTH__) == TIM_DMABURSTLENGTH_10TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_11TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_12TRANSFERS) \\\r\n   || ((__LENGTH__) == TIM_DMABURSTLENGTH_13TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_14TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_15TRANSFERS) \\\r\n   || ((__LENGTH__) == TIM_DMABURSTLENGTH_16TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_17TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_18TRANSFERS))\r\n\r\n#define IS_TIM_DMA_DATA_LENGTH(LENGTH) (((LENGTH) >= 0x1U) && ((LENGTH) < 0x10000U))\r\n\r\n#define IS_TIM_IC_FILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU)\r\n\r\n#define IS_TIM_DEADTIME(__DEADTIME__) ((__DEADTIME__) <= 0xFFU)\r\n\r\n#define IS_TIM_SLAVEMODE_TRIGGER_ENABLED(__TRIGGER__) ((__TRIGGER__) == TIM_SLAVEMODE_TRIGGER)\r\n\r\n#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__)                           \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__))         \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__))         \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))\r\n\r\n#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__)                                  \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC))\r\n\r\n#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__)                           \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__))         \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) \\\r\n                                      : ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))\r\n\r\n#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__)                                                  \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC3P))                  \\\r\n                                      : ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC4P)))\r\n\r\n#define TIM_CHANNEL_STATE_GET(__HANDLE__, __CHANNEL__)                \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? (__HANDLE__)->ChannelState[0] \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? (__HANDLE__)->ChannelState[1] \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? (__HANDLE__)->ChannelState[2] \\\r\n                                      : (__HANDLE__)->ChannelState[3])\r\n\r\n#define TIM_CHANNEL_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__)                     \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->ChannelState[0] = (__CHANNEL_STATE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->ChannelState[1] = (__CHANNEL_STATE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->ChannelState[2] = (__CHANNEL_STATE__)) \\\r\n                                      : ((__HANDLE__)->ChannelState[3] = (__CHANNEL_STATE__)))\r\n\r\n#define TIM_CHANNEL_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__) \\\r\n  do {                                                           \\\r\n    (__HANDLE__)->ChannelState[0] = (__CHANNEL_STATE__);         \\\r\n    (__HANDLE__)->ChannelState[1] = (__CHANNEL_STATE__);         \\\r\n    (__HANDLE__)->ChannelState[2] = (__CHANNEL_STATE__);         \\\r\n    (__HANDLE__)->ChannelState[3] = (__CHANNEL_STATE__);         \\\r\n  } while (0)\r\n\r\n#define TIM_CHANNEL_N_STATE_GET(__HANDLE__, __CHANNEL__)               \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? (__HANDLE__)->ChannelNState[0] \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? (__HANDLE__)->ChannelNState[1] \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? (__HANDLE__)->ChannelNState[2] \\\r\n                                      : (__HANDLE__)->ChannelNState[3])\r\n\r\n#define TIM_CHANNEL_N_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__)                    \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->ChannelNState[0] = (__CHANNEL_STATE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->ChannelNState[1] = (__CHANNEL_STATE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->ChannelNState[2] = (__CHANNEL_STATE__)) \\\r\n                                      : ((__HANDLE__)->ChannelNState[3] = (__CHANNEL_STATE__)))\r\n\r\n#define TIM_CHANNEL_N_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__) \\\r\n  do {                                                             \\\r\n    (__HANDLE__)->ChannelNState[0] = (__CHANNEL_STATE__);          \\\r\n    (__HANDLE__)->ChannelNState[1] = (__CHANNEL_STATE__);          \\\r\n    (__HANDLE__)->ChannelNState[2] = (__CHANNEL_STATE__);          \\\r\n    (__HANDLE__)->ChannelNState[3] = (__CHANNEL_STATE__);          \\\r\n  } while (0)\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of private macros -----------------------------------------------------*/\r\n\r\n/* Include TIM HAL Extended module */\r\n#include \"stm32f1xx_hal_tim_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup TIM_Exported_Functions TIM Exported Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group1 TIM Time Base functions\r\n *  @brief   Time Base functions\r\n * @{\r\n */\r\n/* Time Base functions ********************************************************/\r\nHAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group2 TIM Output Compare functions\r\n *  @brief   TIM Output Compare functions\r\n * @{\r\n */\r\n/* Timer Output Compare functions *********************************************/\r\nHAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group3 TIM PWM functions\r\n *  @brief   TIM PWM functions\r\n * @{\r\n */\r\n/* Timer PWM functions ********************************************************/\r\nHAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group4 TIM Input Capture functions\r\n *  @brief   TIM Input Capture functions\r\n * @{\r\n */\r\n/* Timer Input Capture functions **********************************************/\r\nHAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group5 TIM One Pulse functions\r\n *  @brief   TIM One Pulse functions\r\n * @{\r\n */\r\n/* Timer One Pulse functions **************************************************/\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode);\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group6 TIM Encoder functions\r\n *  @brief   TIM Encoder functions\r\n * @{\r\n */\r\n/* Timer Encoder functions ****************************************************/\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_InitTypeDef *sConfig);\r\nHAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group7 TIM IRQ handler management\r\n *  @brief   IRQ handler management\r\n * @{\r\n */\r\n/* Interrupt Handler functions  ***********************************************/\r\nvoid HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions\r\n *  @brief   Peripheral Control functions\r\n * @{\r\n */\r\n/* Control functions  *********************************************************/\r\nHAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel);\r\nHAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig);\r\nHAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection);\r\nHAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);\r\nHAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength, uint32_t DataLength);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_MultiReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength, uint32_t DataLength);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);\r\nHAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource);\r\nuint32_t          HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions\r\n *  @brief   TIM Callbacks functions\r\n * @{\r\n */\r\n/* Callback in non blocking modes (Interrupt and DMA) *************************/\r\nvoid HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim);\r\n\r\n/* Callbacks Register/UnRegister functions  ***********************************/\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\nHAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback);\r\nHAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions\r\n *  @brief  Peripheral State functions\r\n * @{\r\n */\r\n/* Peripheral State functions  ************************************************/\r\nHAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim);\r\n\r\n/* Peripheral Channel state functions  ************************************************/\r\nHAL_TIM_ActiveChannel        HAL_TIM_GetActiveChannel(TIM_HandleTypeDef *htim);\r\nHAL_TIM_ChannelStateTypeDef  HAL_TIM_GetChannelState(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(TIM_HandleTypeDef *htim);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported functions -------------------------------------------------*/\r\n\r\n/* Private functions----------------------------------------------------------*/\r\n/** @defgroup TIM_Private_Functions TIM Private Functions\r\n * @{\r\n */\r\nvoid TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure);\r\nvoid TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);\r\nvoid TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);\r\nvoid TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter);\r\n\r\nvoid TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma);\r\nvoid TIM_DMAError(DMA_HandleTypeDef *hdma);\r\nvoid TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma);\r\nvoid TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma);\r\nvoid TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\nvoid TIM_ResetCallback(TIM_HandleTypeDef *htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of private functions --------------------------------------------------*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* STM32F1xx_HAL_TIM_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_tim_ex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of TIM HAL Extended module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef STM32F1xx_HAL_TIM_EX_H\r\n#define STM32F1xx_HAL_TIM_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup TIMEx\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup TIMEx_Exported_Types TIM Extended Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  TIM Hall sensor Configuration Structure definition\r\n */\r\n\r\ntypedef struct {\r\n  uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal.\r\n                             This parameter can be a value of @ref TIM_Input_Capture_Polarity */\r\n\r\n  uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler.\r\n                              This parameter can be a value of @ref TIM_Input_Capture_Prescaler */\r\n\r\n  uint32_t IC1Filter; /*!< Specifies the input capture filter.\r\n                           This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n\r\n  uint32_t Commutation_Delay; /*!< Specifies the pulse value to be loaded into the Capture Compare Register.\r\n                                   This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */\r\n} TIM_HallSensor_InitTypeDef;\r\n/**\r\n * @}\r\n */\r\n/* End of exported types -----------------------------------------------------*/\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup TIMEx_Exported_Constants TIM Extended Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup TIMEx_Remap TIM Extended Remapping\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported constants -------------------------------------------------*/\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup TIMEx_Exported_Macros TIM Extended Exported Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported macro -----------------------------------------------------*/\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/** @defgroup TIMEx_Private_Macros TIM Extended Private Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of private macro ------------------------------------------------------*/\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup TIMEx_Exported_Functions TIM Extended Exported Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions\r\n *  @brief    Timer Hall Sensor functions\r\n * @{\r\n */\r\n/*  Timer Hall Sensor functions  **********************************************/\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig);\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim);\r\n\r\nvoid HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim);\r\n\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions\r\n *  @brief   Timer Complementary Output Compare functions\r\n * @{\r\n */\r\n/*  Timer Complementary Output Compare functions  *****************************/\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions\r\n *  @brief    Timer Complementary PWM functions\r\n * @{\r\n */\r\n/*  Timer Complementary PWM functions  ****************************************/\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions\r\n *  @brief    Timer Complementary One Pulse functions\r\n * @{\r\n */\r\n/*  Timer Complementary One Pulse functions  **********************************/\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\n\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions\r\n *  @brief    Peripheral Control functions\r\n * @{\r\n */\r\n/* Extended Control functions  ************************************************/\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);\r\nHAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig);\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);\r\nHAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group6 Extended Callbacks functions\r\n * @brief    Extended Callbacks functions\r\n * @{\r\n */\r\n/* Extended Callback **********************************************************/\r\nvoid HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIMEx_CommutHalfCpltCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group7 Extended Peripheral State functions\r\n * @brief    Extended Peripheral State functions\r\n * @{\r\n */\r\n/* Extended Peripheral State functions  ***************************************/\r\nHAL_TIM_StateTypeDef        HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_ChannelStateTypeDef HAL_TIMEx_GetChannelNState(TIM_HandleTypeDef *htim, uint32_t ChannelN);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported functions -------------------------------------------------*/\r\n\r\n/* Private functions----------------------------------------------------------*/\r\n/** @addtogroup TIMEx_Private_Functions TIMEx Private Functions\r\n * @{\r\n */\r\nvoid TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma);\r\nvoid TIMEx_DMACommutationHalfCplt(DMA_HandleTypeDef *hdma);\r\n/**\r\n * @}\r\n */\r\n/* End of private functions --------------------------------------------------*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* STM32F1xx_HAL_TIM_EX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal.c\r\n  * @author  MCD Application Team\r\n  * @brief   HAL module driver.\r\n  *          This is the common part of the HAL initialization\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n    [..]\r\n    The common HAL driver contains a set of generic and common APIs that can be\r\n    used by the PPP peripheral drivers and the user to start using the HAL.\r\n    [..]\r\n    The HAL contains two APIs' categories:\r\n         (+) Common HAL APIs\r\n         (+) Services HAL APIs\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup HAL HAL\r\n * @brief HAL module driver.\r\n * @{\r\n */\r\n\r\n#ifdef HAL_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_Private_Constants HAL Private Constants\r\n * @{\r\n */\r\n/**\r\n * @brief STM32F1xx HAL Driver version number V1.1.7\r\n */\r\n#define __STM32F1xx_HAL_VERSION_MAIN (0x01U) /*!< [31:24] main version */\r\n#define __STM32F1xx_HAL_VERSION_SUB1 (0x01U) /*!< [23:16] sub1 version */\r\n#define __STM32F1xx_HAL_VERSION_SUB2 (0x07U) /*!< [15:8]  sub2 version */\r\n#define __STM32F1xx_HAL_VERSION_RC   (0x00U) /*!< [7:0]  release candidate */\r\n#define __STM32F1xx_HAL_VERSION      ((__STM32F1xx_HAL_VERSION_MAIN << 24) | (__STM32F1xx_HAL_VERSION_SUB1 << 16) | (__STM32F1xx_HAL_VERSION_SUB2 << 8) | (__STM32F1xx_HAL_VERSION_RC))\r\n\r\n#define IDCODE_DEVID_MASK 0x00000FFFU\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_Private_Variables HAL Private Variables\r\n * @{\r\n */\r\n__IO uint32_t       uwTick;\r\nuint32_t            uwTickPrio = (1UL << __NVIC_PRIO_BITS); /* Invalid PRIO */\r\nHAL_TickFreqTypeDef uwTickFreq = HAL_TICK_FREQ_DEFAULT;     /* 1KHz */\r\n/**\r\n * @}\r\n */\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Exported functions ---------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_Exported_Functions HAL Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup HAL_Exported_Functions_Group1 Initialization and de-initialization Functions\r\n *  @brief    Initialization and de-initialization functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n              ##### Initialization and de-initialization functions #####\r\n ===============================================================================\r\n   [..]  This section provides functions allowing to:\r\n      (+) Initializes the Flash interface, the NVIC allocation and initial clock\r\n          configuration. It initializes the systick also when timeout is needed\r\n          and the backup domain when enabled.\r\n      (+) de-Initializes common part of the HAL.\r\n      (+) Configure The time base source to have 1ms time base with a dedicated\r\n          Tick interrupt priority.\r\n        (++) SysTick timer is used by default as source of time base, but user\r\n             can eventually implement his proper time base source (a general purpose\r\n             timer for example or other time source), keeping in mind that Time base\r\n             duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and\r\n             handled in milliseconds basis.\r\n        (++) Time base configuration function (HAL_InitTick ()) is called automatically\r\n             at the beginning of the program after reset by HAL_Init() or at any time\r\n             when clock is configured, by HAL_RCC_ClockConfig().\r\n        (++) Source of time base is configured  to generate interrupts at regular\r\n             time intervals. Care must be taken if HAL_Delay() is called from a\r\n             peripheral ISR process, the Tick interrupt line must have higher priority\r\n            (numerically lower) than the peripheral interrupt. Otherwise the caller\r\n            ISR process will be blocked.\r\n       (++) functions affecting time base configurations are declared as __weak\r\n             to make  override possible  in case of other  implementations in user file.\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  This function is used to initialize the HAL Library; it must be the first\r\n *         instruction to be executed in the main program (before to call any other\r\n *         HAL function), it performs the following:\r\n *           Configure the Flash prefetch.\r\n *           Configures the SysTick to generate an interrupt each 1 millisecond,\r\n *           which is clocked by the HSI (at this stage, the clock is not yet\r\n *           configured and thus the system is running from the internal HSI at 16 MHz).\r\n *           Set NVIC Group Priority to 4.\r\n *           Calls the HAL_MspInit() callback function defined in user file\r\n *           \"stm32f1xx_hal_msp.c\" to do the global low level hardware initialization\r\n *\r\n * @note   SysTick is used as time base for the HAL_Delay() function, the application\r\n *         need to ensure that the SysTick time base is always set to 1 millisecond\r\n *         to have correct HAL operation.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_Init(void) {\r\n  /* Configure Flash prefetch */\r\n#if (PREFETCH_ENABLE != 0)\r\n#if defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) ||    \\\r\n    defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n\r\n  /* Prefetch buffer is not available on value line devices */\r\n  __HAL_FLASH_PREFETCH_BUFFER_ENABLE();\r\n#endif\r\n#endif /* PREFETCH_ENABLE */\r\n\r\n  /* Set Interrupt Group Priority */\r\n  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);\r\n\r\n  /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */\r\n  HAL_InitTick(TICK_INT_PRIORITY);\r\n\r\n  /* Init the low level hardware */\r\n  HAL_MspInit();\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief This function de-Initializes common part of the HAL and stops the systick.\r\n *        of time base.\r\n * @note This function is optional.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DeInit(void) {\r\n  /* Reset of all peripherals */\r\n  __HAL_RCC_APB1_FORCE_RESET();\r\n  __HAL_RCC_APB1_RELEASE_RESET();\r\n\r\n  __HAL_RCC_APB2_FORCE_RESET();\r\n  __HAL_RCC_APB2_RELEASE_RESET();\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  __HAL_RCC_AHB_FORCE_RESET();\r\n  __HAL_RCC_AHB_RELEASE_RESET();\r\n#endif\r\n\r\n  /* De-Init the low level hardware */\r\n  HAL_MspDeInit();\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initialize the MSP.\r\n * @retval None\r\n */\r\n__weak void HAL_MspInit(void) {\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the MSP.\r\n * @retval None\r\n */\r\n__weak void HAL_MspDeInit(void) {\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief This function configures the source of the time base.\r\n *        The time source is configured  to have 1ms time base with a dedicated\r\n *        Tick interrupt priority.\r\n * @note This function is called  automatically at the beginning of program after\r\n *       reset by HAL_Init() or at any time when clock is reconfigured  by HAL_RCC_ClockConfig().\r\n * @note In the default implementation, SysTick timer is the source of time base.\r\n *       It is used to generate interrupts at regular time intervals.\r\n *       Care must be taken if HAL_Delay() is called from a peripheral ISR process,\r\n *       The SysTick interrupt must have higher priority (numerically lower)\r\n *       than the peripheral interrupt. Otherwise the caller ISR process will be blocked.\r\n *       The function is declared as __weak  to be overwritten  in case of other\r\n *       implementation  in user file.\r\n * @param TickPriority Tick interrupt priority.\r\n * @retval HAL status\r\n */\r\n__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {\r\n  /* Configure the SysTick to have interrupt in 1ms time basis*/\r\n  if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Configure the SysTick IRQ priority */\r\n  if (TickPriority < (1UL << __NVIC_PRIO_BITS)) {\r\n    HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);\r\n    uwTickPrio = TickPriority;\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_Exported_Functions_Group2 HAL Control functions\r\n  *  @brief    HAL Control functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### HAL Control functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Provide a tick value in millisecond\r\n      (+) Provide a blocking delay in millisecond\r\n      (+) Suspend the time base source interrupt\r\n      (+) Resume the time base source interrupt\r\n      (+) Get the HAL API driver version\r\n      (+) Get the device identifier\r\n      (+) Get the device revision identifier\r\n      (+) Enable/Disable Debug module during SLEEP mode\r\n      (+) Enable/Disable Debug module during STOP mode\r\n      (+) Enable/Disable Debug module during STANDBY mode\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief This function is called to increment  a global variable \"uwTick\"\r\n *        used as application time base.\r\n * @note In the default implementation, this variable is incremented each 1ms\r\n *       in SysTick ISR.\r\n * @note This function is declared as __weak to be overwritten in case of other\r\n *      implementations in user file.\r\n * @retval None\r\n */\r\n__weak void HAL_IncTick(void) { uwTick += uwTickFreq; }\r\n\r\n/**\r\n * @brief Provides a tick value in millisecond.\r\n * @note  This function is declared as __weak to be overwritten in case of other\r\n *       implementations in user file.\r\n * @retval tick value\r\n */\r\n__weak uint32_t HAL_GetTick(void) { return uwTick; }\r\n\r\n/**\r\n * @brief This function returns a tick priority.\r\n * @retval tick priority\r\n */\r\nuint32_t HAL_GetTickPrio(void) { return uwTickPrio; }\r\n\r\n/**\r\n * @brief Set new tick Freq.\r\n * @retval status\r\n */\r\nHAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq) {\r\n  HAL_StatusTypeDef   status = HAL_OK;\r\n  HAL_TickFreqTypeDef prevTickFreq;\r\n\r\n  assert_param(IS_TICKFREQ(Freq));\r\n\r\n  if (uwTickFreq != Freq) {\r\n    /* Back up uwTickFreq frequency */\r\n    prevTickFreq = uwTickFreq;\r\n\r\n    /* Update uwTickFreq global variable used by HAL_InitTick() */\r\n    uwTickFreq = Freq;\r\n\r\n    /* Apply the new tick Freq  */\r\n    status = HAL_InitTick(uwTickPrio);\r\n\r\n    if (status != HAL_OK) {\r\n      /* Restore previous tick frequency */\r\n      uwTickFreq = prevTickFreq;\r\n    }\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief Return tick frequency.\r\n * @retval tick period in Hz\r\n */\r\nHAL_TickFreqTypeDef HAL_GetTickFreq(void) { return uwTickFreq; }\r\n\r\n/**\r\n * @brief This function provides minimum delay (in milliseconds) based\r\n *        on variable incremented.\r\n * @note In the default implementation , SysTick timer is the source of time base.\r\n *       It is used to generate interrupts at regular time intervals where uwTick\r\n *       is incremented.\r\n * @note This function is declared as __weak to be overwritten in case of other\r\n *       implementations in user file.\r\n * @param Delay specifies the delay time length, in milliseconds.\r\n * @retval None\r\n */\r\n__weak void HAL_Delay(uint32_t Delay) {\r\n  uint32_t tickstart = HAL_GetTick();\r\n  uint32_t wait      = Delay;\r\n\r\n  /* Add a freq to guarantee minimum wait */\r\n  if (wait < HAL_MAX_DELAY) {\r\n    wait += (uint32_t)(uwTickFreq);\r\n  }\r\n\r\n  while ((HAL_GetTick() - tickstart) < wait) {\r\n  }\r\n}\r\n\r\n/**\r\n * @brief Suspend Tick increment.\r\n * @note In the default implementation , SysTick timer is the source of time base. It is\r\n *       used to generate interrupts at regular time intervals. Once HAL_SuspendTick()\r\n *       is called, the SysTick interrupt will be disabled and so Tick increment\r\n *       is suspended.\r\n * @note This function is declared as __weak to be overwritten in case of other\r\n *       implementations in user file.\r\n * @retval None\r\n */\r\n__weak void HAL_SuspendTick(void) {\r\n  /* Disable SysTick Interrupt */\r\n  CLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);\r\n}\r\n\r\n/**\r\n * @brief Resume Tick increment.\r\n * @note In the default implementation , SysTick timer is the source of time base. It is\r\n *       used to generate interrupts at regular time intervals. Once HAL_ResumeTick()\r\n *       is called, the SysTick interrupt will be enabled and so Tick increment\r\n *       is resumed.\r\n * @note This function is declared as __weak to be overwritten in case of other\r\n *       implementations in user file.\r\n * @retval None\r\n */\r\n__weak void HAL_ResumeTick(void) {\r\n  /* Enable SysTick Interrupt */\r\n  SET_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);\r\n}\r\n\r\n/**\r\n * @brief  Returns the HAL revision\r\n * @retval version 0xXYZR (8bits for each decimal, R for RC)\r\n */\r\nuint32_t HAL_GetHalVersion(void) { return __STM32F1xx_HAL_VERSION; }\r\n\r\n/**\r\n * @brief Returns the device revision identifier.\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval Device revision identifier\r\n */\r\nuint32_t HAL_GetREVID(void) { return ((DBGMCU->IDCODE) >> DBGMCU_IDCODE_REV_ID_Pos); }\r\n\r\n/**\r\n * @brief  Returns the device identifier.\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval Device identifier\r\n */\r\nuint32_t HAL_GetDEVID(void) { return ((DBGMCU->IDCODE) & IDCODE_DEVID_MASK); }\r\n\r\n/**\r\n * @brief  Returns first word of the unique device identifier (UID based on 96 bits)\r\n * @retval Device identifier\r\n */\r\nuint32_t HAL_GetUIDw0(void) { return (READ_REG(*((uint32_t *)UID_BASE))); }\r\n\r\n/**\r\n * @brief  Returns second word of the unique device identifier (UID based on 96 bits)\r\n * @retval Device identifier\r\n */\r\nuint32_t HAL_GetUIDw1(void) { return (READ_REG(*((uint32_t *)(UID_BASE + 4U)))); }\r\n\r\n/**\r\n * @brief  Returns third word of the unique device identifier (UID based on 96 bits)\r\n * @retval Device identifier\r\n */\r\nuint32_t HAL_GetUIDw2(void) { return (READ_REG(*((uint32_t *)(UID_BASE + 8U)))); }\r\n\r\n/**\r\n * @brief  Enable the Debug Module during SLEEP mode\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_EnableDBGSleepMode(void) { SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); }\r\n\r\n/**\r\n * @brief  Disable the Debug Module during SLEEP mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_DisableDBGSleepMode(void) { CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); }\r\n\r\n/**\r\n * @brief  Enable the Debug Module during STOP mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * Note: On all STM32F1 devices:\r\n *       If the system tick timer interrupt is enabled during the Stop mode\r\n *       debug (DBG_STOP bit set in the DBGMCU_CR register ), it will wakeup\r\n *       the system from Stop mode.\r\n *       Workaround: To debug the Stop mode, disable the system tick timer\r\n *       interrupt.\r\n *       Refer to errata sheet of these devices for more details.\r\n * Note: On all STM32F1 devices:\r\n *       If the system tick timer interrupt is enabled during the Stop mode\r\n *       debug (DBG_STOP bit set in the DBGMCU_CR register ), it will wakeup\r\n *       the system from Stop mode.\r\n *       Workaround: To debug the Stop mode, disable the system tick timer\r\n *       interrupt.\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_EnableDBGStopMode(void) { SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); }\r\n\r\n/**\r\n * @brief  Disable the Debug Module during STOP mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_DisableDBGStopMode(void) { CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); }\r\n\r\n/**\r\n * @brief  Enable the Debug Module during STANDBY mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_EnableDBGStandbyMode(void) { SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); }\r\n\r\n/**\r\n * @brief  Disable the Debug Module during STANDBY mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_DisableDBGStandbyMode(void) { CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); }\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_adc.c\r\n  * @author  MCD Application Team\r\n  * @brief   This file provides firmware functions to manage the following\r\n  *          functionalities of the Analog to Digital Convertor (ADC)\r\n  *          peripheral:\r\n  *           + Initialization and de-initialization functions\r\n  *             ++ Initialization and Configuration of ADC\r\n  *           + Operation functions\r\n  *             ++ Start, stop, get result of conversions of regular\r\n  *                group, using 3 possible modes: polling, interruption or DMA.\r\n  *           + Control functions\r\n  *             ++ Channels configuration on regular group\r\n  *             ++ Channels configuration on injected group\r\n  *             ++ Analog Watchdog configuration\r\n  *           + State functions\r\n  *             ++ ADC state machine management\r\n  *             ++ Interrupts and flags management\r\n  *          Other functions (extended functions) are available in file\r\n  *          \"stm32f1xx_hal_adc_ex.c\".\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                     ##### ADC peripheral features #####\r\n  ==============================================================================\r\n  [..]\r\n  (+) 12-bit resolution\r\n\r\n  (+) Interrupt generation at the end of regular conversion, end of injected\r\n      conversion, and in case of analog watchdog or overrun events.\r\n\r\n  (+) Single and continuous conversion modes.\r\n\r\n  (+) Scan mode for conversion of several channels sequentially.\r\n\r\n  (+) Data alignment with in-built data coherency.\r\n\r\n  (+) Programmable sampling time (channel wise)\r\n\r\n  (+) ADC conversion of regular group and injected group.\r\n\r\n  (+) External trigger (timer or EXTI)\r\n      for both regular and injected groups.\r\n\r\n  (+) DMA request generation for transfer of conversions data of regular group.\r\n\r\n  (+) Multimode Dual mode (available on devices with 2 ADCs or more).\r\n\r\n  (+) Configurable DMA data storage in Multimode Dual mode (available on devices\r\n      with 2 DCs or more).\r\n\r\n  (+) Configurable delay between conversions in Dual interleaved mode (available\r\n      on devices with 2 DCs or more).\r\n\r\n  (+) ADC calibration\r\n\r\n  (+) ADC supply requirements: 2.4 V to 3.6 V at full speed and down to 1.8 V at\r\n      slower speed.\r\n\r\n  (+) ADC input range: from Vref- (connected to Vssa) to Vref+ (connected to\r\n      Vdda or to an external voltage reference).\r\n\r\n\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n    [..]\r\n\r\n     *** Configuration of top level parameters related to ADC ***\r\n     ============================================================\r\n     [..]\r\n\r\n    (#) Enable the ADC interface\r\n      (++) As prerequisite, ADC clock must be configured at RCC top level.\r\n           Caution: On STM32F1, ADC clock frequency max is 14MHz (refer\r\n                    to device datasheet).\r\n                    Therefore, ADC clock prescaler must be configured in\r\n                    function of ADC clock source frequency to remain below\r\n                    this maximum frequency.\r\n        (++) One clock setting is mandatory:\r\n             ADC clock (core clock, also possibly conversion clock).\r\n             (+++) Example:\r\n                   Into HAL_ADC_MspInit() (recommended code location) or with\r\n                   other device clock parameters configuration:\r\n               (+++) RCC_PeriphCLKInitTypeDef  PeriphClkInit;\r\n               (+++) __ADC1_CLK_ENABLE();\r\n               (+++) PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;\r\n               (+++) PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;\r\n               (+++) HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);\r\n\r\n    (#) ADC pins configuration\r\n         (++) Enable the clock for the ADC GPIOs\r\n              using macro __HAL_RCC_GPIOx_CLK_ENABLE()\r\n         (++) Configure these ADC pins in analog mode\r\n              using function HAL_GPIO_Init()\r\n\r\n    (#) Optionally, in case of usage of ADC with interruptions:\r\n         (++) Configure the NVIC for ADC\r\n              using function HAL_NVIC_EnableIRQ(ADCx_IRQn)\r\n         (++) Insert the ADC interruption handler function HAL_ADC_IRQHandler()\r\n              into the function of corresponding ADC interruption vector\r\n              ADCx_IRQHandler().\r\n\r\n    (#) Optionally, in case of usage of DMA:\r\n         (++) Configure the DMA (DMA channel, mode normal or circular, ...)\r\n              using function HAL_DMA_Init().\r\n         (++) Configure the NVIC for DMA\r\n              using function HAL_NVIC_EnableIRQ(DMAx_Channelx_IRQn)\r\n         (++) Insert the ADC interruption handler function HAL_ADC_IRQHandler()\r\n              into the function of corresponding DMA interruption vector\r\n              DMAx_Channelx_IRQHandler().\r\n\r\n     *** Configuration of ADC, groups regular/injected, channels parameters ***\r\n     ==========================================================================\r\n     [..]\r\n\r\n    (#) Configure the ADC parameters (resolution, data alignment, ...)\r\n        and regular group parameters (conversion trigger, sequencer, ...)\r\n        using function HAL_ADC_Init().\r\n\r\n    (#) Configure the channels for regular group parameters (channel number,\r\n        channel rank into sequencer, ..., into regular group)\r\n        using function HAL_ADC_ConfigChannel().\r\n\r\n    (#) Optionally, configure the injected group parameters (conversion trigger,\r\n        sequencer, ..., of injected group)\r\n        and the channels for injected group parameters (channel number,\r\n        channel rank into sequencer, ..., into injected group)\r\n        using function HAL_ADCEx_InjectedConfigChannel().\r\n\r\n    (#) Optionally, configure the analog watchdog parameters (channels\r\n        monitored, thresholds, ...)\r\n        using function HAL_ADC_AnalogWDGConfig().\r\n\r\n    (#) Optionally, for devices with several ADC instances: configure the\r\n        multimode parameters\r\n        using function HAL_ADCEx_MultiModeConfigChannel().\r\n\r\n     *** Execution of ADC conversions ***\r\n     ====================================\r\n     [..]\r\n\r\n    (#) Optionally, perform an automatic ADC calibration to improve the\r\n        conversion accuracy\r\n        using function HAL_ADCEx_Calibration_Start().\r\n\r\n    (#) ADC driver can be used among three modes: polling, interruption,\r\n        transfer by DMA.\r\n\r\n        (++) ADC conversion by polling:\r\n          (+++) Activate the ADC peripheral and start conversions\r\n                using function HAL_ADC_Start()\r\n          (+++) Wait for ADC conversion completion\r\n                using function HAL_ADC_PollForConversion()\r\n                (or for injected group: HAL_ADCEx_InjectedPollForConversion() )\r\n          (+++) Retrieve conversion results\r\n                using function HAL_ADC_GetValue()\r\n                (or for injected group: HAL_ADCEx_InjectedGetValue() )\r\n          (+++) Stop conversion and disable the ADC peripheral\r\n                using function HAL_ADC_Stop()\r\n\r\n        (++) ADC conversion by interruption:\r\n          (+++) Activate the ADC peripheral and start conversions\r\n                using function HAL_ADC_Start_IT()\r\n          (+++) Wait for ADC conversion completion by call of function\r\n                HAL_ADC_ConvCpltCallback()\r\n                (this function must be implemented in user program)\r\n                (or for injected group: HAL_ADCEx_InjectedConvCpltCallback() )\r\n          (+++) Retrieve conversion results\r\n                using function HAL_ADC_GetValue()\r\n                (or for injected group: HAL_ADCEx_InjectedGetValue() )\r\n          (+++) Stop conversion and disable the ADC peripheral\r\n                using function HAL_ADC_Stop_IT()\r\n\r\n        (++) ADC conversion with transfer by DMA:\r\n          (+++) Activate the ADC peripheral and start conversions\r\n                using function HAL_ADC_Start_DMA()\r\n          (+++) Wait for ADC conversion completion by call of function\r\n                HAL_ADC_ConvCpltCallback() or HAL_ADC_ConvHalfCpltCallback()\r\n                (these functions must be implemented in user program)\r\n          (+++) Conversion results are automatically transferred by DMA into\r\n                destination variable address.\r\n          (+++) Stop conversion and disable the ADC peripheral\r\n                using function HAL_ADC_Stop_DMA()\r\n\r\n        (++) For devices with several ADCs: ADC multimode conversion\r\n             with transfer by DMA:\r\n          (+++) Activate the ADC peripheral (slave) and start conversions\r\n                using function HAL_ADC_Start()\r\n          (+++) Activate the ADC peripheral (master) and start conversions\r\n                using function HAL_ADCEx_MultiModeStart_DMA()\r\n          (+++) Wait for ADC conversion completion by call of function\r\n                HAL_ADC_ConvCpltCallback() or HAL_ADC_ConvHalfCpltCallback()\r\n                (these functions must be implemented in user program)\r\n          (+++) Conversion results are automatically transferred by DMA into\r\n                destination variable address.\r\n          (+++) Stop conversion and disable the ADC peripheral (master)\r\n                using function HAL_ADCEx_MultiModeStop_DMA()\r\n          (+++) Stop conversion and disable the ADC peripheral (slave)\r\n                using function HAL_ADC_Stop_IT()\r\n\r\n     [..]\r\n\r\n    (@) Callback functions must be implemented in user program:\r\n      (+@) HAL_ADC_ErrorCallback()\r\n      (+@) HAL_ADC_LevelOutOfWindowCallback() (callback of analog watchdog)\r\n      (+@) HAL_ADC_ConvCpltCallback()\r\n      (+@) HAL_ADC_ConvHalfCpltCallback\r\n      (+@) HAL_ADCEx_InjectedConvCpltCallback()\r\n\r\n     *** Deinitialization of ADC ***\r\n     ============================================================\r\n     [..]\r\n\r\n    (#) Disable the ADC interface\r\n      (++) ADC clock can be hard reset and disabled at RCC top level.\r\n        (++) Hard reset of ADC peripherals\r\n             using macro __ADCx_FORCE_RESET(), __ADCx_RELEASE_RESET().\r\n        (++) ADC clock disable\r\n             using the equivalent macro/functions as configuration step.\r\n             (+++) Example:\r\n                   Into HAL_ADC_MspDeInit() (recommended code location) or with\r\n                   other device clock parameters configuration:\r\n               (+++) PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC\r\n               (+++) PeriphClkInit.AdcClockSelection = RCC_ADCPLLCLK2_OFF\r\n               (+++) HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit)\r\n\r\n    (#) ADC pins configuration\r\n         (++) Disable the clock for the ADC GPIOs\r\n              using macro __HAL_RCC_GPIOx_CLK_DISABLE()\r\n\r\n    (#) Optionally, in case of usage of ADC with interruptions:\r\n         (++) Disable the NVIC for ADC\r\n              using function HAL_NVIC_EnableIRQ(ADCx_IRQn)\r\n\r\n    (#) Optionally, in case of usage of DMA:\r\n         (++) Deinitialize the DMA\r\n              using function HAL_DMA_Init().\r\n         (++) Disable the NVIC for DMA\r\n              using function HAL_NVIC_EnableIRQ(DMAx_Channelx_IRQn)\r\n\r\n    [..]\r\n\r\n    *** Callback registration ***\r\n    =============================================\r\n    [..]\r\n\r\n     The compilation flag USE_HAL_ADC_REGISTER_CALLBACKS, when set to 1,\r\n     allows the user to configure dynamically the driver callbacks.\r\n     Use Functions @ref HAL_ADC_RegisterCallback()\r\n     to register an interrupt callback.\r\n    [..]\r\n\r\n     Function @ref HAL_ADC_RegisterCallback() allows to register following callbacks:\r\n       (+) ConvCpltCallback               : ADC conversion complete callback\r\n       (+) ConvHalfCpltCallback           : ADC conversion DMA half-transfer callback\r\n       (+) LevelOutOfWindowCallback       : ADC analog watchdog 1 callback\r\n       (+) ErrorCallback                  : ADC error callback\r\n       (+) InjectedConvCpltCallback       : ADC group injected conversion complete callback\r\n       (+) MspInitCallback                : ADC Msp Init callback\r\n       (+) MspDeInitCallback              : ADC Msp DeInit callback\r\n     This function takes as parameters the HAL peripheral handle, the Callback ID\r\n     and a pointer to the user callback function.\r\n    [..]\r\n\r\n     Use function @ref HAL_ADC_UnRegisterCallback to reset a callback to the default\r\n     weak function.\r\n    [..]\r\n\r\n     @ref HAL_ADC_UnRegisterCallback takes as parameters the HAL peripheral handle,\r\n     and the Callback ID.\r\n     This function allows to reset following callbacks:\r\n       (+) ConvCpltCallback               : ADC conversion complete callback\r\n       (+) ConvHalfCpltCallback           : ADC conversion DMA half-transfer callback\r\n       (+) LevelOutOfWindowCallback       : ADC analog watchdog 1 callback\r\n       (+) ErrorCallback                  : ADC error callback\r\n       (+) InjectedConvCpltCallback       : ADC group injected conversion complete callback\r\n       (+) MspInitCallback                : ADC Msp Init callback\r\n       (+) MspDeInitCallback              : ADC Msp DeInit callback\r\n     [..]\r\n\r\n     By default, after the @ref HAL_ADC_Init() and when the state is @ref HAL_ADC_STATE_RESET\r\n     all callbacks are set to the corresponding weak functions:\r\n     examples @ref HAL_ADC_ConvCpltCallback(), @ref HAL_ADC_ErrorCallback().\r\n     Exception done for MspInit and MspDeInit functions that are\r\n     reset to the legacy weak functions in the @ref HAL_ADC_Init()/ @ref HAL_ADC_DeInit() only when\r\n     these callbacks are null (not registered beforehand).\r\n    [..]\r\n\r\n     If MspInit or MspDeInit are not null, the @ref HAL_ADC_Init()/ @ref HAL_ADC_DeInit()\r\n     keep and use the user MspInit/MspDeInit callbacks (registered beforehand) whatever the state.\r\n     [..]\r\n\r\n     Callbacks can be registered/unregistered in @ref HAL_ADC_STATE_READY state only.\r\n     Exception done MspInit/MspDeInit functions that can be registered/unregistered\r\n     in @ref HAL_ADC_STATE_READY or @ref HAL_ADC_STATE_RESET state,\r\n     thus registered (user) MspInit/DeInit callbacks can be used during the Init/DeInit.\r\n    [..]\r\n\r\n     Then, the user first registers the MspInit/MspDeInit user callbacks\r\n     using @ref HAL_ADC_RegisterCallback() before calling @ref HAL_ADC_DeInit()\r\n     or @ref HAL_ADC_Init() function.\r\n     [..]\r\n\r\n     When the compilation flag USE_HAL_ADC_REGISTER_CALLBACKS is set to 0 or\r\n     not defined, the callback registration feature is not available and all callbacks\r\n     are set to the corresponding weak functions.\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup ADC ADC\r\n * @brief ADC HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_ADC_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup ADC_Private_Constants ADC Private Constants\r\n * @{\r\n */\r\n\r\n/* Timeout values for ADC enable and disable settling time.                 */\r\n/* Values defined to be higher than worst cases: low clocks freq,           */\r\n/* maximum prescaler.                                                       */\r\n/* Ex of profile low frequency : Clock source at 0.1 MHz, ADC clock         */\r\n/* prescaler 4, sampling time 12.5 ADC clock cycles, resolution 12 bits.    */\r\n/* Unit: ms                                                                 */\r\n#define ADC_ENABLE_TIMEOUT  2U\r\n#define ADC_DISABLE_TIMEOUT 2U\r\n\r\n/* Delay for ADC stabilization time.                                        */\r\n/* Maximum delay is 1us (refer to device datasheet, parameter tSTAB).       */\r\n/* Unit: us                                                                 */\r\n#define ADC_STAB_DELAY_US 1U\r\n\r\n/* Delay for temperature sensor stabilization time.                         */\r\n/* Maximum delay is 10us (refer to device datasheet, parameter tSTART).     */\r\n/* Unit: us                                                                 */\r\n#define ADC_TEMPSENSOR_DELAY_US 10U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @defgroup ADC_Private_Functions ADC Private Functions\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @defgroup ADC_Exported_Functions ADC Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup ADC_Exported_Functions_Group1 Initialization/de-initialization functions\r\n  * @brief    Initialization and Configuration functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n              ##### Initialization and de-initialization functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Initialize and configure the ADC.\r\n      (+) De-initialize the ADC.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initializes the ADC peripheral and regular group according to\r\n *         parameters specified in structure \"ADC_InitTypeDef\".\r\n * @note   As prerequisite, ADC clock must be configured at RCC top level\r\n *         (clock source APB2).\r\n *         See commented example code below that can be copied and uncommented\r\n *         into HAL_ADC_MspInit().\r\n * @note   Possibility to update parameters on the fly:\r\n *         This function initializes the ADC MSP (HAL_ADC_MspInit()) only when\r\n *         coming from ADC state reset. Following calls to this function can\r\n *         be used to reconfigure some parameters of ADC_InitTypeDef\r\n *         structure on the fly, without modifying MSP configuration. If ADC\r\n *         MSP has to be modified again, HAL_ADC_DeInit() must be called\r\n *         before HAL_ADC_Init().\r\n *         The setting of these parameters is conditioned to ADC state.\r\n *         For parameters constraints, see comments of structure\r\n *         \"ADC_InitTypeDef\".\r\n * @note   This function configures the ADC within 2 scopes: scope of entire\r\n *         ADC and scope of regular group. For parameters details, see comments\r\n *         of structure \"ADC_InitTypeDef\".\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n  uint32_t          tmp_cr1        = 0U;\r\n  uint32_t          tmp_cr2        = 0U;\r\n  uint32_t          tmp_sqr1       = 0U;\r\n\r\n  /* Check ADC handle */\r\n  if (hadc == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_DATA_ALIGN(hadc->Init.DataAlign));\r\n  assert_param(IS_ADC_SCAN_MODE(hadc->Init.ScanConvMode));\r\n  assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));\r\n  assert_param(IS_ADC_EXTTRIG(hadc->Init.ExternalTrigConv));\r\n\r\n  if (hadc->Init.ScanConvMode != ADC_SCAN_DISABLE) {\r\n    assert_param(IS_ADC_REGULAR_NB_CONV(hadc->Init.NbrOfConversion));\r\n    assert_param(IS_FUNCTIONAL_STATE(hadc->Init.DiscontinuousConvMode));\r\n    if (hadc->Init.DiscontinuousConvMode != DISABLE) {\r\n      assert_param(IS_ADC_REGULAR_DISCONT_NUMBER(hadc->Init.NbrOfDiscConversion));\r\n    }\r\n  }\r\n\r\n  /* As prerequisite, into HAL_ADC_MspInit(), ADC clock must be configured    */\r\n  /* at RCC top level.                                                        */\r\n  /* Refer to header of this file for more details on clock enabling          */\r\n  /* procedure.                                                               */\r\n\r\n  /* Actions performed only if ADC is coming from state reset:                */\r\n  /* - Initialization of ADC MSP                                              */\r\n  if (hadc->State == HAL_ADC_STATE_RESET) {\r\n    /* Initialize ADC error code */\r\n    ADC_CLEAR_ERRORCODE(hadc);\r\n\r\n    /* Allocate lock resource and initialize it */\r\n    hadc->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)\r\n    /* Init the ADC Callback settings */\r\n    hadc->ConvCpltCallback         = HAL_ADC_ConvCpltCallback;           /* Legacy weak callback */\r\n    hadc->ConvHalfCpltCallback     = HAL_ADC_ConvHalfCpltCallback;       /* Legacy weak callback */\r\n    hadc->LevelOutOfWindowCallback = HAL_ADC_LevelOutOfWindowCallback;   /* Legacy weak callback */\r\n    hadc->ErrorCallback            = HAL_ADC_ErrorCallback;              /* Legacy weak callback */\r\n    hadc->InjectedConvCpltCallback = HAL_ADCEx_InjectedConvCpltCallback; /* Legacy weak callback */\r\n\r\n    if (hadc->MspInitCallback == NULL) {\r\n      hadc->MspInitCallback = HAL_ADC_MspInit; /* Legacy weak MspInit  */\r\n    }\r\n\r\n    /* Init the low level hardware */\r\n    hadc->MspInitCallback(hadc);\r\n#else\r\n    /* Init the low level hardware */\r\n    HAL_ADC_MspInit(hadc);\r\n#endif /* USE_HAL_ADC_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC peripheral */\r\n  /* Note: In case of ADC already enabled, precaution to not launch an        */\r\n  /*       unwanted conversion while modifying register CR2 by writing 1 to   */\r\n  /*       bit ADON.                                                          */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Configuration of ADC parameters if previous preliminary actions are      */\r\n  /* correctly completed.                                                     */\r\n  if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL) && (tmp_hal_status == HAL_OK)) {\r\n    /* Set ADC state */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_BUSY_INTERNAL);\r\n\r\n    /* Set ADC parameters */\r\n\r\n    /* Configuration of ADC:                                                  */\r\n    /*  - data alignment                                                      */\r\n    /*  - external trigger to start conversion                                */\r\n    /*  - external trigger polarity (always set to 1, because needed for all  */\r\n    /*    triggers: external trigger of SW start)                             */\r\n    /*  - continuous conversion mode                                          */\r\n    /* Note: External trigger polarity (ADC_CR2_EXTTRIG) is set into          */\r\n    /*       HAL_ADC_Start_xxx functions because if set in this function,     */\r\n    /*       a conversion on injected group would start a conversion also on  */\r\n    /*       regular group after ADC enabling.                                */\r\n    tmp_cr2 |= (hadc->Init.DataAlign | ADC_CFGR_EXTSEL(hadc, hadc->Init.ExternalTrigConv) | ADC_CR2_CONTINUOUS((uint32_t)hadc->Init.ContinuousConvMode));\r\n\r\n    /* Configuration of ADC:                                                  */\r\n    /*  - scan mode                                                           */\r\n    /*  - discontinuous mode disable/enable                                   */\r\n    /*  - discontinuous mode number of conversions                            */\r\n    tmp_cr1 |= (ADC_CR1_SCAN_SET(hadc->Init.ScanConvMode));\r\n\r\n    /* Enable discontinuous mode only if continuous mode is disabled */\r\n    /* Note: If parameter \"Init.ScanConvMode\" is set to disable, parameter    */\r\n    /*       discontinuous is set anyway, but will have no effect on ADC HW.  */\r\n    if (hadc->Init.DiscontinuousConvMode == ENABLE) {\r\n      if (hadc->Init.ContinuousConvMode == DISABLE) {\r\n        /* Enable the selected ADC regular discontinuous mode */\r\n        /* Set the number of channels to be converted in discontinuous mode */\r\n        SET_BIT(tmp_cr1, ADC_CR1_DISCEN | ADC_CR1_DISCONTINUOUS_NUM(hadc->Init.NbrOfDiscConversion));\r\n      } else {\r\n        /* ADC regular group settings continuous and sequencer discontinuous*/\r\n        /* cannot be enabled simultaneously.                                */\r\n\r\n        /* Update ADC state machine to error */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n        /* Set ADC error code to ADC IP internal error */\r\n        SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);\r\n      }\r\n    }\r\n\r\n    /* Update ADC configuration register CR1 with previous settings */\r\n    MODIFY_REG(hadc->Instance->CR1, ADC_CR1_SCAN | ADC_CR1_DISCEN | ADC_CR1_DISCNUM, tmp_cr1);\r\n\r\n    /* Update ADC configuration register CR2 with previous settings */\r\n    MODIFY_REG(hadc->Instance->CR2, ADC_CR2_ALIGN | ADC_CR2_EXTSEL | ADC_CR2_EXTTRIG | ADC_CR2_CONT, tmp_cr2);\r\n\r\n    /* Configuration of regular group sequencer:                              */\r\n    /* - if scan mode is disabled, regular channels sequence length is set to */\r\n    /*   0x00: 1 channel converted (channel on regular rank 1)                */\r\n    /*   Parameter \"NbrOfConversion\" is discarded.                            */\r\n    /*   Note: Scan mode is present by hardware on this device and, if        */\r\n    /*   disabled, discards automatically nb of conversions. Anyway, nb of    */\r\n    /*   conversions is forced to 0x00 for alignment over all STM32 devices.  */\r\n    /* - if scan mode is enabled, regular channels sequence length is set to  */\r\n    /*   parameter \"NbrOfConversion\"                                          */\r\n    if (ADC_CR1_SCAN_SET(hadc->Init.ScanConvMode) == ADC_SCAN_ENABLE) {\r\n      tmp_sqr1 = ADC_SQR1_L_SHIFT(hadc->Init.NbrOfConversion);\r\n    }\r\n\r\n    MODIFY_REG(hadc->Instance->SQR1, ADC_SQR1_L, tmp_sqr1);\r\n\r\n    /* Check back that ADC registers have effectively been configured to      */\r\n    /* ensure of no potential problem of ADC core IP clocking.                */\r\n    /* Check through register CR2 (excluding bits set in other functions:     */\r\n    /* execution control bits (ADON, JSWSTART, SWSTART), regular group bits   */\r\n    /* (DMA), injected group bits (JEXTTRIG and JEXTSEL), channel internal    */\r\n    /* measurement path bit (TSVREFE).                                        */\r\n    if (READ_BIT(hadc->Instance->CR2, ~(ADC_CR2_ADON | ADC_CR2_DMA | ADC_CR2_SWSTART | ADC_CR2_JSWSTART | ADC_CR2_JEXTTRIG | ADC_CR2_JEXTSEL | ADC_CR2_TSVREFE)) == tmp_cr2) {\r\n      /* Set ADC error code to none */\r\n      ADC_CLEAR_ERRORCODE(hadc);\r\n\r\n      /* Set the ADC state */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_READY);\r\n    } else {\r\n      /* Update ADC state machine to error */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n      /* Set ADC error code to ADC IP internal error */\r\n      SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);\r\n\r\n      tmp_hal_status = HAL_ERROR;\r\n    }\r\n\r\n  } else {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n    tmp_hal_status = HAL_ERROR;\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Deinitialize the ADC peripheral registers to their default reset\r\n *         values, with deinitialization of the ADC MSP.\r\n *         If needed, the example code can be copied and uncommented into\r\n *         function HAL_ADC_MspDeInit().\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_DeInit(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check ADC handle */\r\n  if (hadc == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Set ADC state */\r\n  SET_BIT(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL);\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Configuration of ADC parameters if previous preliminary actions are      */\r\n  /* correctly completed.                                                     */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* ========== Reset ADC registers ========== */\r\n\r\n    /* Reset register SR */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_AWD | ADC_FLAG_JEOC | ADC_FLAG_EOC | ADC_FLAG_JSTRT | ADC_FLAG_STRT));\r\n\r\n    /* Reset register CR1 */\r\n    CLEAR_BIT(hadc->Instance->CR1, (ADC_CR1_AWDEN | ADC_CR1_JAWDEN | ADC_CR1_DISCNUM | ADC_CR1_JDISCEN | ADC_CR1_DISCEN | ADC_CR1_JAUTO | ADC_CR1_AWDSGL | ADC_CR1_SCAN | ADC_CR1_JEOCIE |\r\n                                    ADC_CR1_AWDIE | ADC_CR1_EOCIE | ADC_CR1_AWDCH));\r\n\r\n    /* Reset register CR2 */\r\n    CLEAR_BIT(hadc->Instance->CR2, (ADC_CR2_TSVREFE | ADC_CR2_SWSTART | ADC_CR2_JSWSTART | ADC_CR2_EXTTRIG | ADC_CR2_EXTSEL | ADC_CR2_JEXTTRIG | ADC_CR2_JEXTSEL | ADC_CR2_ALIGN | ADC_CR2_DMA |\r\n                                    ADC_CR2_RSTCAL | ADC_CR2_CAL | ADC_CR2_CONT | ADC_CR2_ADON));\r\n\r\n    /* Reset register SMPR1 */\r\n    CLEAR_BIT(hadc->Instance->SMPR1, (ADC_SMPR1_SMP17 | ADC_SMPR1_SMP16 | ADC_SMPR1_SMP15 | ADC_SMPR1_SMP14 | ADC_SMPR1_SMP13 | ADC_SMPR1_SMP12 | ADC_SMPR1_SMP11 | ADC_SMPR1_SMP10));\r\n\r\n    /* Reset register SMPR2 */\r\n    CLEAR_BIT(hadc->Instance->SMPR2,\r\n              (ADC_SMPR2_SMP9 | ADC_SMPR2_SMP8 | ADC_SMPR2_SMP7 | ADC_SMPR2_SMP6 | ADC_SMPR2_SMP5 | ADC_SMPR2_SMP4 | ADC_SMPR2_SMP3 | ADC_SMPR2_SMP2 | ADC_SMPR2_SMP1 | ADC_SMPR2_SMP0));\r\n\r\n    /* Reset register JOFR1 */\r\n    CLEAR_BIT(hadc->Instance->JOFR1, ADC_JOFR1_JOFFSET1);\r\n    /* Reset register JOFR2 */\r\n    CLEAR_BIT(hadc->Instance->JOFR2, ADC_JOFR2_JOFFSET2);\r\n    /* Reset register JOFR3 */\r\n    CLEAR_BIT(hadc->Instance->JOFR3, ADC_JOFR3_JOFFSET3);\r\n    /* Reset register JOFR4 */\r\n    CLEAR_BIT(hadc->Instance->JOFR4, ADC_JOFR4_JOFFSET4);\r\n\r\n    /* Reset register HTR */\r\n    CLEAR_BIT(hadc->Instance->HTR, ADC_HTR_HT);\r\n    /* Reset register LTR */\r\n    CLEAR_BIT(hadc->Instance->LTR, ADC_LTR_LT);\r\n\r\n    /* Reset register SQR1 */\r\n    CLEAR_BIT(hadc->Instance->SQR1, ADC_SQR1_L | ADC_SQR1_SQ16 | ADC_SQR1_SQ15 | ADC_SQR1_SQ14 | ADC_SQR1_SQ13);\r\n\r\n    /* Reset register SQR1 */\r\n    CLEAR_BIT(hadc->Instance->SQR1, ADC_SQR1_L | ADC_SQR1_SQ16 | ADC_SQR1_SQ15 | ADC_SQR1_SQ14 | ADC_SQR1_SQ13);\r\n\r\n    /* Reset register SQR2 */\r\n    CLEAR_BIT(hadc->Instance->SQR2, ADC_SQR2_SQ12 | ADC_SQR2_SQ11 | ADC_SQR2_SQ10 | ADC_SQR2_SQ9 | ADC_SQR2_SQ8 | ADC_SQR2_SQ7);\r\n\r\n    /* Reset register SQR3 */\r\n    CLEAR_BIT(hadc->Instance->SQR3, ADC_SQR3_SQ6 | ADC_SQR3_SQ5 | ADC_SQR3_SQ4 | ADC_SQR3_SQ3 | ADC_SQR3_SQ2 | ADC_SQR3_SQ1);\r\n\r\n    /* Reset register JSQR */\r\n    CLEAR_BIT(hadc->Instance->JSQR, ADC_JSQR_JL | ADC_JSQR_JSQ4 | ADC_JSQR_JSQ3 | ADC_JSQR_JSQ2 | ADC_JSQR_JSQ1);\r\n\r\n    /* Reset register JSQR */\r\n    CLEAR_BIT(hadc->Instance->JSQR, ADC_JSQR_JL | ADC_JSQR_JSQ4 | ADC_JSQR_JSQ3 | ADC_JSQR_JSQ2 | ADC_JSQR_JSQ1);\r\n\r\n    /* Reset register DR */\r\n    /* bits in access mode read only, no direct reset applicable*/\r\n\r\n    /* Reset registers JDR1, JDR2, JDR3, JDR4 */\r\n    /* bits in access mode read only, no direct reset applicable*/\r\n\r\n    /* ========== Hard reset ADC peripheral ========== */\r\n    /* Performs a global reset of the entire ADC peripheral: ADC state is     */\r\n    /* forced to a similar state after device power-on.                       */\r\n    /* If needed, copy-paste and uncomment the following reset code into      */\r\n    /* function \"void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)\":              */\r\n    /*                                                                        */\r\n    /*  __HAL_RCC_ADC1_FORCE_RESET()                                          */\r\n    /*  __HAL_RCC_ADC1_RELEASE_RESET()                                        */\r\n\r\n#if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)\r\n    if (hadc->MspDeInitCallback == NULL) {\r\n      hadc->MspDeInitCallback = HAL_ADC_MspDeInit; /* Legacy weak MspDeInit  */\r\n    }\r\n\r\n    /* DeInit the low level hardware */\r\n    hadc->MspDeInitCallback(hadc);\r\n#else\r\n    /* DeInit the low level hardware */\r\n    HAL_ADC_MspDeInit(hadc);\r\n#endif /* USE_HAL_ADC_REGISTER_CALLBACKS */\r\n\r\n    /* Set ADC error code to none */\r\n    ADC_CLEAR_ERRORCODE(hadc);\r\n\r\n    /* Set ADC state */\r\n    hadc->State = HAL_ADC_STATE_RESET;\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the ADC MSP.\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\n__weak void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hadc);\r\n  /* NOTE : This function should not be modified. When the callback is needed,\r\n            function HAL_ADC_MspInit must be implemented in the user file.\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the ADC MSP.\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\n__weak void HAL_ADC_MspDeInit(ADC_HandleTypeDef *hadc) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hadc);\r\n  /* NOTE : This function should not be modified. When the callback is needed,\r\n            function HAL_ADC_MspDeInit must be implemented in the user file.\r\n   */\r\n}\r\n\r\n#if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)\r\n/**\r\n * @brief  Register a User ADC Callback\r\n *         To be used instead of the weak predefined callback\r\n * @param  hadc Pointer to a ADC_HandleTypeDef structure that contains\r\n *                the configuration information for the specified ADC.\r\n * @param  CallbackID ID of the callback to be registered\r\n *         This parameter can be one of the following values:\r\n *          @arg @ref HAL_ADC_CONVERSION_COMPLETE_CB_ID      ADC conversion complete callback ID\r\n *          @arg @ref HAL_ADC_CONVERSION_HALF_CB_ID          ADC conversion complete callback ID\r\n *          @arg @ref HAL_ADC_LEVEL_OUT_OF_WINDOW_1_CB_ID    ADC analog watchdog 1 callback ID\r\n *          @arg @ref HAL_ADC_ERROR_CB_ID                    ADC error callback ID\r\n *          @arg @ref HAL_ADC_INJ_CONVERSION_COMPLETE_CB_ID  ADC group injected conversion complete callback ID\r\n *          @arg @ref HAL_ADC_MSPINIT_CB_ID                  ADC Msp Init callback ID\r\n *          @arg @ref HAL_ADC_MSPDEINIT_CB_ID                ADC Msp DeInit callback ID\r\n *          @arg @ref HAL_ADC_MSPINIT_CB_ID MspInit callback ID\r\n *          @arg @ref HAL_ADC_MSPDEINIT_CB_ID MspDeInit callback ID\r\n * @param  pCallback pointer to the Callback function\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_RegisterCallback(ADC_HandleTypeDef *hadc, HAL_ADC_CallbackIDTypeDef CallbackID, pADC_CallbackTypeDef pCallback) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  if (pCallback == NULL) {\r\n    /* Update the error code */\r\n    hadc->ErrorCode |= HAL_ADC_ERROR_INVALID_CALLBACK;\r\n\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  if ((hadc->State & HAL_ADC_STATE_READY) != 0) {\r\n    switch (CallbackID) {\r\n    case HAL_ADC_CONVERSION_COMPLETE_CB_ID:\r\n      hadc->ConvCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_ADC_CONVERSION_HALF_CB_ID:\r\n      hadc->ConvHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_ADC_LEVEL_OUT_OF_WINDOW_1_CB_ID:\r\n      hadc->LevelOutOfWindowCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_ADC_ERROR_CB_ID:\r\n      hadc->ErrorCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_ADC_INJ_CONVERSION_COMPLETE_CB_ID:\r\n      hadc->InjectedConvCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_ADC_MSPINIT_CB_ID:\r\n      hadc->MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_ADC_MSPDEINIT_CB_ID:\r\n      hadc->MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    default:\r\n      /* Update the error code */\r\n      hadc->ErrorCode |= HAL_ADC_ERROR_INVALID_CALLBACK;\r\n\r\n      /* Return error status */\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else if (HAL_ADC_STATE_RESET == hadc->State) {\r\n    switch (CallbackID) {\r\n    case HAL_ADC_MSPINIT_CB_ID:\r\n      hadc->MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_ADC_MSPDEINIT_CB_ID:\r\n      hadc->MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    default:\r\n      /* Update the error code */\r\n      hadc->ErrorCode |= HAL_ADC_ERROR_INVALID_CALLBACK;\r\n\r\n      /* Return error status */\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else {\r\n    /* Update the error code */\r\n    hadc->ErrorCode |= HAL_ADC_ERROR_INVALID_CALLBACK;\r\n\r\n    /* Return error status */\r\n    status = HAL_ERROR;\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Unregister a ADC Callback\r\n *         ADC callback is redirected to the weak predefined callback\r\n * @param  hadc Pointer to a ADC_HandleTypeDef structure that contains\r\n *                the configuration information for the specified ADC.\r\n * @param  CallbackID ID of the callback to be unregistered\r\n *         This parameter can be one of the following values:\r\n *          @arg @ref HAL_ADC_CONVERSION_COMPLETE_CB_ID      ADC conversion complete callback ID\r\n *          @arg @ref HAL_ADC_CONVERSION_HALF_CB_ID          ADC conversion complete callback ID\r\n *          @arg @ref HAL_ADC_LEVEL_OUT_OF_WINDOW_1_CB_ID    ADC analog watchdog 1 callback ID\r\n *          @arg @ref HAL_ADC_ERROR_CB_ID                    ADC error callback ID\r\n *          @arg @ref HAL_ADC_INJ_CONVERSION_COMPLETE_CB_ID  ADC group injected conversion complete callback ID\r\n *          @arg @ref HAL_ADC_MSPINIT_CB_ID                  ADC Msp Init callback ID\r\n *          @arg @ref HAL_ADC_MSPDEINIT_CB_ID                ADC Msp DeInit callback ID\r\n *          @arg @ref HAL_ADC_MSPINIT_CB_ID MspInit callback ID\r\n *          @arg @ref HAL_ADC_MSPDEINIT_CB_ID MspDeInit callback ID\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_UnRegisterCallback(ADC_HandleTypeDef *hadc, HAL_ADC_CallbackIDTypeDef CallbackID) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  if ((hadc->State & HAL_ADC_STATE_READY) != 0) {\r\n    switch (CallbackID) {\r\n    case HAL_ADC_CONVERSION_COMPLETE_CB_ID:\r\n      hadc->ConvCpltCallback = HAL_ADC_ConvCpltCallback;\r\n      break;\r\n\r\n    case HAL_ADC_CONVERSION_HALF_CB_ID:\r\n      hadc->ConvHalfCpltCallback = HAL_ADC_ConvHalfCpltCallback;\r\n      break;\r\n\r\n    case HAL_ADC_LEVEL_OUT_OF_WINDOW_1_CB_ID:\r\n      hadc->LevelOutOfWindowCallback = HAL_ADC_LevelOutOfWindowCallback;\r\n      break;\r\n\r\n    case HAL_ADC_ERROR_CB_ID:\r\n      hadc->ErrorCallback = HAL_ADC_ErrorCallback;\r\n      break;\r\n\r\n    case HAL_ADC_INJ_CONVERSION_COMPLETE_CB_ID:\r\n      hadc->InjectedConvCpltCallback = HAL_ADCEx_InjectedConvCpltCallback;\r\n      break;\r\n\r\n    case HAL_ADC_MSPINIT_CB_ID:\r\n      hadc->MspInitCallback = HAL_ADC_MspInit; /* Legacy weak MspInit              */\r\n      break;\r\n\r\n    case HAL_ADC_MSPDEINIT_CB_ID:\r\n      hadc->MspDeInitCallback = HAL_ADC_MspDeInit; /* Legacy weak MspDeInit            */\r\n      break;\r\n\r\n    default:\r\n      /* Update the error code */\r\n      hadc->ErrorCode |= HAL_ADC_ERROR_INVALID_CALLBACK;\r\n\r\n      /* Return error status */\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else if (HAL_ADC_STATE_RESET == hadc->State) {\r\n    switch (CallbackID) {\r\n    case HAL_ADC_MSPINIT_CB_ID:\r\n      hadc->MspInitCallback = HAL_ADC_MspInit; /* Legacy weak MspInit              */\r\n      break;\r\n\r\n    case HAL_ADC_MSPDEINIT_CB_ID:\r\n      hadc->MspDeInitCallback = HAL_ADC_MspDeInit; /* Legacy weak MspDeInit            */\r\n      break;\r\n\r\n    default:\r\n      /* Update the error code */\r\n      hadc->ErrorCode |= HAL_ADC_ERROR_INVALID_CALLBACK;\r\n\r\n      /* Return error status */\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else {\r\n    /* Update the error code */\r\n    hadc->ErrorCode |= HAL_ADC_ERROR_INVALID_CALLBACK;\r\n\r\n    /* Return error status */\r\n    status = HAL_ERROR;\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n#endif /* USE_HAL_ADC_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Exported_Functions_Group2 IO operation functions\r\n *  @brief    Input and Output operation functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### IO operation functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Start conversion of regular group.\r\n      (+) Stop conversion of regular group.\r\n      (+) Poll for conversion complete on regular group.\r\n      (+) Poll for conversion event.\r\n      (+) Get result of regular channel conversion.\r\n      (+) Start conversion of regular group and enable interruptions.\r\n      (+) Stop conversion of regular group and disable interruptions.\r\n      (+) Handle ADC interrupt request\r\n      (+) Start conversion of regular group and enable DMA transfer.\r\n      (+) Stop conversion of regular group and disable ADC DMA transfer.\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Enables ADC, starts conversion of regular group.\r\n *         Interruptions enabled in this function: None.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Enable the ADC peripheral */\r\n  tmp_hal_status = ADC_Enable(hadc);\r\n\r\n  /* Start conversion if ADC is effectively enabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state                                                          */\r\n    /* - Clear state bitfield related to regular group conversion results     */\r\n    /* - Set state bitfield related to regular operation                      */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC, HAL_ADC_STATE_REG_BUSY);\r\n\r\n    /* Set group injected state (from auto-injection) and multimode state     */\r\n    /* for all cases of multimode: independent mode, multimode ADC master     */\r\n    /* or multimode ADC slave (for devices with several ADCs):                */\r\n    if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      /* Set ADC state (ADC independent or master) */\r\n      CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n      /* If conversions on group regular are also triggering group injected,  */\r\n      /* update ADC state.                                                    */\r\n      if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) {\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n      }\r\n    } else {\r\n      /* Set ADC state (ADC slave) */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n      /* If conversions on group regular are also triggering group injected,  */\r\n      /* update ADC state.                                                    */\r\n      if (ADC_MULTIMODE_AUTO_INJECTED(hadc)) {\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n      }\r\n    }\r\n\r\n    /* State machine update: Check if an injected conversion is ongoing */\r\n    if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n      /* Reset ADC error code fields related to conversions on group regular */\r\n      CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA));\r\n    } else {\r\n      /* Reset ADC all error code fields */\r\n      ADC_CLEAR_ERRORCODE(hadc);\r\n    }\r\n\r\n    /* Process unlocked */\r\n    /* Unlock before starting ADC conversions: in case of potential           */\r\n    /* interruption, to let the process to ADC IRQ Handler.                   */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    /* Clear regular group conversion flag */\r\n    /* (To ensure of no unknown state from potential previous ADC operations) */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC);\r\n\r\n    /* Enable conversion of regular group.                                    */\r\n    /* If software start has been selected, conversion starts immediately.    */\r\n    /* If external trigger has been selected, conversion will start at next   */\r\n    /* trigger event.                                                         */\r\n    /* Case of multimode enabled:                                             */\r\n    /*  - if ADC is slave, ADC is enabled only (conversion is not started).   */\r\n    /*  - if ADC is master, ADC is enabled and conversion is started.         */\r\n    /* If ADC is master, ADC is enabled and conversion is started.            */\r\n    /* Note: Alternate trigger for single conversion could be to force an     */\r\n    /*       additional set of bit ADON \"hadc->Instance->CR2 |= ADC_CR2_ADON;\"*/\r\n    if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      /* Start ADC conversion on regular group with SW start */\r\n      SET_BIT(hadc->Instance->CR2, (ADC_CR2_SWSTART | ADC_CR2_EXTTRIG));\r\n    } else {\r\n      /* Start ADC conversion on regular group with external trigger */\r\n      SET_BIT(hadc->Instance->CR2, ADC_CR2_EXTTRIG);\r\n    }\r\n  } else {\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop ADC conversion of regular group (and injected channels in\r\n *         case of auto_injection mode), disable ADC peripheral.\r\n * @note:  ADC peripheral disable is forcing stop of potential\r\n *         conversion on injected group. If injected group is under use, it\r\n *         should be preliminarily stopped using HAL_ADCEx_InjectedStop function.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status.\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Check if ADC is effectively disabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Wait for regular group conversion to be completed.\r\n * @note   This function cannot be used in a particular setup: ADC configured\r\n *         in DMA mode.\r\n *         In this case, DMA resets the flag EOC and polling cannot be\r\n *         performed on each conversion.\r\n * @note   On STM32F1 devices, limitation in case of sequencer enabled\r\n *         (several ranks selected): polling cannot be done on each\r\n *         conversion inside the sequence. In this case, polling is replaced by\r\n *         wait for maximum conversion time.\r\n * @param  hadc: ADC handle\r\n * @param  Timeout: Timeout value in millisecond.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Variables for polling in case of scan mode enabled and polling for each  */\r\n  /* conversion.                                                              */\r\n  __IO uint32_t Conversion_Timeout_CPU_cycles     = 0U;\r\n  uint32_t      Conversion_Timeout_CPU_cycles_max = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Get tick count */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Verification that ADC configuration is compliant with polling for        */\r\n  /* each conversion:                                                         */\r\n  /* Particular case is ADC configured in DMA mode                            */\r\n  if (HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_DMA)) {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Polling for end of conversion: differentiation if single/sequence        */\r\n  /* conversion.                                                              */\r\n  /*  - If single conversion for regular group (Scan mode disabled or enabled */\r\n  /*    with NbrOfConversion =1), flag EOC is used to determine the           */\r\n  /*    conversion completion.                                                */\r\n  /*  - If sequence conversion for regular group (scan mode enabled and       */\r\n  /*    NbrOfConversion >=2), flag EOC is set only at the end of the          */\r\n  /*    sequence.                                                             */\r\n  /*    To poll for each conversion, the maximum conversion time is computed  */\r\n  /*    from ADC conversion time (selected sampling time + conversion time of */\r\n  /*    12.5 ADC clock cycles) and APB2/ADC clock prescalers (depending on    */\r\n  /*    settings, conversion time range can be from 28 to 32256 CPU cycles).  */\r\n  /*    As flag EOC is not set after each conversion, no timeout status can   */\r\n  /*    be set.                                                               */\r\n  if (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_SCAN) && HAL_IS_BIT_CLR(hadc->Instance->SQR1, ADC_SQR1_L)) {\r\n    /* Wait until End of Conversion flag is raised */\r\n    while (HAL_IS_BIT_CLR(hadc->Instance->SR, ADC_FLAG_EOC)) {\r\n      /* Check if timeout is disabled (set to infinite wait) */\r\n      if (Timeout != HAL_MAX_DELAY) {\r\n        if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n          /* Update ADC state machine to timeout */\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);\r\n\r\n          /* Process unlocked */\r\n          __HAL_UNLOCK(hadc);\r\n\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n  } else {\r\n    /* Replace polling by wait for maximum conversion time */\r\n    /*  - Computation of CPU clock cycles corresponding to ADC clock cycles   */\r\n    /*    and ADC maximum conversion cycles on all channels.                  */\r\n    /*  - Wait for the expected ADC clock cycles delay                        */\r\n    Conversion_Timeout_CPU_cycles_max = ((SystemCoreClock / HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC)) * ADC_CONVCYCLES_MAX_RANGE(hadc));\r\n\r\n    while (Conversion_Timeout_CPU_cycles < Conversion_Timeout_CPU_cycles_max) {\r\n      /* Check if timeout is disabled (set to infinite wait) */\r\n      if (Timeout != HAL_MAX_DELAY) {\r\n        if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n          /* Update ADC state machine to timeout */\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);\r\n\r\n          /* Process unlocked */\r\n          __HAL_UNLOCK(hadc);\r\n\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n      Conversion_Timeout_CPU_cycles++;\r\n    }\r\n  }\r\n\r\n  /* Clear regular group conversion flag */\r\n  __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_STRT | ADC_FLAG_EOC);\r\n\r\n  /* Update ADC state machine */\r\n  SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC);\r\n\r\n  /* Determine whether any further conversion upcoming on group regular       */\r\n  /* by external trigger, continuous mode or scan sequence on going.          */\r\n  /* Note: On STM32F1 devices, in case of sequencer enabled                   */\r\n  /*       (several ranks selected), end of conversion flag is raised         */\r\n  /*       at the end of the sequence.                                        */\r\n  if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && (hadc->Init.ContinuousConvMode == DISABLE)) {\r\n    /* Set ADC state */\r\n    CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);\r\n\r\n    if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_READY);\r\n    }\r\n  }\r\n\r\n  /* Return ADC state */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Poll for conversion event.\r\n * @param  hadc: ADC handle\r\n * @param  EventType: the ADC event type.\r\n *          This parameter can be one of the following values:\r\n *            @arg ADC_AWD_EVENT: ADC Analog watchdog event.\r\n * @param  Timeout: Timeout value in millisecond.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef *hadc, uint32_t EventType, uint32_t Timeout) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_EVENT_TYPE(EventType));\r\n\r\n  /* Get tick count */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Check selected event flag */\r\n  while (__HAL_ADC_GET_FLAG(hadc, EventType) == RESET) {\r\n    /* Check if timeout is disabled (set to infinite wait) */\r\n    if (Timeout != HAL_MAX_DELAY) {\r\n      if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n        /* Update ADC state machine to timeout */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);\r\n\r\n        /* Process unlocked */\r\n        __HAL_UNLOCK(hadc);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Analog watchdog (level out of window) event */\r\n  /* Set ADC state */\r\n  SET_BIT(hadc->State, HAL_ADC_STATE_AWD1);\r\n\r\n  /* Clear ADC analog watchdog flag */\r\n  __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_AWD);\r\n\r\n  /* Return ADC state */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Enables ADC, starts conversion of regular group with interruption.\r\n *         Interruptions enabled in this function:\r\n *          - EOC (end of conversion of regular group)\r\n *         Each of these interruptions has its dedicated callback function.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Enable the ADC peripheral */\r\n  tmp_hal_status = ADC_Enable(hadc);\r\n\r\n  /* Start conversion if ADC is effectively enabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state                                                          */\r\n    /* - Clear state bitfield related to regular group conversion results     */\r\n    /* - Set state bitfield related to regular operation                      */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR | HAL_ADC_STATE_REG_EOSMP, HAL_ADC_STATE_REG_BUSY);\r\n\r\n    /* Set group injected state (from auto-injection) and multimode state     */\r\n    /* for all cases of multimode: independent mode, multimode ADC master     */\r\n    /* or multimode ADC slave (for devices with several ADCs):                */\r\n    if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      /* Set ADC state (ADC independent or master) */\r\n      CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n      /* If conversions on group regular are also triggering group injected,  */\r\n      /* update ADC state.                                                    */\r\n      if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) {\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n      }\r\n    } else {\r\n      /* Set ADC state (ADC slave) */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n      /* If conversions on group regular are also triggering group injected,  */\r\n      /* update ADC state.                                                    */\r\n      if (ADC_MULTIMODE_AUTO_INJECTED(hadc)) {\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n      }\r\n    }\r\n\r\n    /* State machine update: Check if an injected conversion is ongoing */\r\n    if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n      /* Reset ADC error code fields related to conversions on group regular */\r\n      CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA));\r\n    } else {\r\n      /* Reset ADC all error code fields */\r\n      ADC_CLEAR_ERRORCODE(hadc);\r\n    }\r\n\r\n    /* Process unlocked */\r\n    /* Unlock before starting ADC conversions: in case of potential           */\r\n    /* interruption, to let the process to ADC IRQ Handler.                   */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    /* Clear regular group conversion flag and overrun flag */\r\n    /* (To ensure of no unknown state from potential previous ADC operations) */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC);\r\n\r\n    /* Enable end of conversion interrupt for regular group */\r\n    __HAL_ADC_ENABLE_IT(hadc, ADC_IT_EOC);\r\n\r\n    /* Enable conversion of regular group.                                    */\r\n    /* If software start has been selected, conversion starts immediately.    */\r\n    /* If external trigger has been selected, conversion will start at next   */\r\n    /* trigger event.                                                         */\r\n    /* Case of multimode enabled:                                             */\r\n    /*  - if ADC is slave, ADC is enabled only (conversion is not started).   */\r\n    /*  - if ADC is master, ADC is enabled and conversion is started.         */\r\n    if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      /* Start ADC conversion on regular group with SW start */\r\n      SET_BIT(hadc->Instance->CR2, (ADC_CR2_SWSTART | ADC_CR2_EXTTRIG));\r\n    } else {\r\n      /* Start ADC conversion on regular group with external trigger */\r\n      SET_BIT(hadc->Instance->CR2, ADC_CR2_EXTTRIG);\r\n    }\r\n  } else {\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop ADC conversion of regular group (and injected group in\r\n *         case of auto_injection mode), disable interrution of\r\n *         end-of-conversion, disable ADC peripheral.\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Check if ADC is effectively disabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Disable ADC end of conversion interrupt for regular group */\r\n    __HAL_ADC_DISABLE_IT(hadc, ADC_IT_EOC);\r\n\r\n    /* Set ADC state */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Enables ADC, starts conversion of regular group and transfers result\r\n *         through DMA.\r\n *         Interruptions enabled in this function:\r\n *          - DMA transfer complete\r\n *          - DMA half transfer\r\n *         Each of these interruptions has its dedicated callback function.\r\n * @note   For devices with several ADCs: This function is for single-ADC mode\r\n *         only. For multimode, use the dedicated MultimodeStart function.\r\n * @note   On STM32F1 devices, only ADC1 and ADC3 (ADC availability depending\r\n *         on devices) have DMA capability.\r\n *         ADC2 converted data can be transferred in dual ADC mode using DMA\r\n *         of ADC1 (ADC master in multimode).\r\n *         In case of using ADC1 with DMA on a device featuring 2 ADC\r\n *         instances: ADC1 conversion register DR contains ADC1 conversion\r\n *         result (ADC1 register DR bits 0 to 11) and, additionally, ADC2 last\r\n *         conversion result (ADC1 register DR bits 16 to 27). Therefore, to\r\n *         have DMA transferring the conversion results of ADC1 only, DMA must\r\n *         be configured to transfer size: half word.\r\n * @param  hadc: ADC handle\r\n * @param  pData: The destination Buffer address.\r\n * @param  Length: The length of data to be transferred from ADC peripheral to memory.\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_DMA_CAPABILITY_INSTANCE(hadc->Instance));\r\n\r\n  /* Verification if multimode is disabled (for devices with several ADC)     */\r\n  /* If multimode is enabled, dedicated function multimode conversion         */\r\n  /* start DMA must be used.                                                  */\r\n  if (ADC_MULTIMODE_IS_ENABLE(hadc) == RESET) {\r\n    /* Process locked */\r\n    __HAL_LOCK(hadc);\r\n\r\n    /* Enable the ADC peripheral */\r\n    tmp_hal_status = ADC_Enable(hadc);\r\n\r\n    /* Start conversion if ADC is effectively enabled */\r\n    if (tmp_hal_status == HAL_OK) {\r\n      /* Set ADC state                                                        */\r\n      /* - Clear state bitfield related to regular group conversion results   */\r\n      /* - Set state bitfield related to regular operation                    */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR | HAL_ADC_STATE_REG_EOSMP, HAL_ADC_STATE_REG_BUSY);\r\n\r\n      /* Set group injected state (from auto-injection) and multimode state     */\r\n      /* for all cases of multimode: independent mode, multimode ADC master     */\r\n      /* or multimode ADC slave (for devices with several ADCs):                */\r\n      if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n        /* Set ADC state (ADC independent or master) */\r\n        CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n        /* If conversions on group regular are also triggering group injected,  */\r\n        /* update ADC state.                                                    */\r\n        if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) {\r\n          ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n        }\r\n      } else {\r\n        /* Set ADC state (ADC slave) */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n        /* If conversions on group regular are also triggering group injected,  */\r\n        /* update ADC state.                                                    */\r\n        if (ADC_MULTIMODE_AUTO_INJECTED(hadc)) {\r\n          ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n        }\r\n      }\r\n\r\n      /* State machine update: Check if an injected conversion is ongoing */\r\n      if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n        /* Reset ADC error code fields related to conversions on group regular */\r\n        CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA));\r\n      } else {\r\n        /* Reset ADC all error code fields */\r\n        ADC_CLEAR_ERRORCODE(hadc);\r\n      }\r\n\r\n      /* Process unlocked */\r\n      /* Unlock before starting ADC conversions: in case of potential         */\r\n      /* interruption, to let the process to ADC IRQ Handler.                 */\r\n      __HAL_UNLOCK(hadc);\r\n\r\n      /* Set the DMA transfer complete callback */\r\n      hadc->DMA_Handle->XferCpltCallback = ADC_DMAConvCplt;\r\n\r\n      /* Set the DMA half transfer complete callback */\r\n      hadc->DMA_Handle->XferHalfCpltCallback = ADC_DMAHalfConvCplt;\r\n\r\n      /* Set the DMA error callback */\r\n      hadc->DMA_Handle->XferErrorCallback = ADC_DMAError;\r\n\r\n      /* Manage ADC and DMA start: ADC overrun interruption, DMA start, ADC   */\r\n      /* start (in case of SW start):                                         */\r\n\r\n      /* Clear regular group conversion flag and overrun flag */\r\n      /* (To ensure of no unknown state from potential previous ADC           */\r\n      /* operations)                                                          */\r\n      __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC);\r\n\r\n      /* Enable ADC DMA mode */\r\n      SET_BIT(hadc->Instance->CR2, ADC_CR2_DMA);\r\n\r\n      /* Start the DMA channel */\r\n      HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&hadc->Instance->DR, (uint32_t)pData, Length);\r\n\r\n      /* Enable conversion of regular group.                                  */\r\n      /* If software start has been selected, conversion starts immediately.  */\r\n      /* If external trigger has been selected, conversion will start at next */\r\n      /* trigger event.                                                       */\r\n      if (ADC_IS_SOFTWARE_START_REGULAR(hadc)) {\r\n        /* Start ADC conversion on regular group with SW start */\r\n        SET_BIT(hadc->Instance->CR2, (ADC_CR2_SWSTART | ADC_CR2_EXTTRIG));\r\n      } else {\r\n        /* Start ADC conversion on regular group with external trigger */\r\n        SET_BIT(hadc->Instance->CR2, ADC_CR2_EXTTRIG);\r\n      }\r\n    } else {\r\n      /* Process unlocked */\r\n      __HAL_UNLOCK(hadc);\r\n    }\r\n  } else {\r\n    tmp_hal_status = HAL_ERROR;\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop ADC conversion of regular group (and injected group in\r\n *         case of auto_injection mode), disable ADC DMA transfer, disable\r\n *         ADC peripheral.\r\n * @note:  ADC peripheral disable is forcing stop of potential\r\n *         conversion on injected group. If injected group is under use, it\r\n *         should be preliminarily stopped using HAL_ADCEx_InjectedStop function.\r\n * @note   For devices with several ADCs: This function is for single-ADC mode\r\n *         only. For multimode, use the dedicated MultimodeStop function.\r\n * @note   On STM32F1 devices, only ADC1 and ADC3 (ADC availability depending\r\n *         on devices) have DMA capability.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status.\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_DMA_CAPABILITY_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Check if ADC is effectively disabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Disable ADC DMA mode */\r\n    CLEAR_BIT(hadc->Instance->CR2, ADC_CR2_DMA);\r\n\r\n    /* Disable the DMA channel (in case of DMA in circular mode or stop while */\r\n    /* DMA transfer is on going)                                              */\r\n    if (hadc->DMA_Handle->State == HAL_DMA_STATE_BUSY) {\r\n      tmp_hal_status = HAL_DMA_Abort(hadc->DMA_Handle);\r\n\r\n      /* Check if DMA channel effectively disabled */\r\n      if (tmp_hal_status == HAL_OK) {\r\n        /* Set ADC state */\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n      } else {\r\n        /* Update ADC state machine to error */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_DMA);\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Get ADC regular group conversion result.\r\n * @note   Reading register DR automatically clears ADC flag EOC\r\n *         (ADC group regular end of unitary conversion).\r\n * @note   This function does not clear ADC flag EOS\r\n *         (ADC group regular end of sequence conversion).\r\n *         Occurrence of flag EOS rising:\r\n *          - If sequencer is composed of 1 rank, flag EOS is equivalent\r\n *            to flag EOC.\r\n *          - If sequencer is composed of several ranks, during the scan\r\n *            sequence flag EOC only is raised, at the end of the scan sequence\r\n *            both flags EOC and EOS are raised.\r\n *         To clear this flag, either use function:\r\n *         in programming model IT: @ref HAL_ADC_IRQHandler(), in programming\r\n *         model polling: @ref HAL_ADC_PollForConversion()\r\n *         or @ref __HAL_ADC_CLEAR_FLAG(&hadc, ADC_FLAG_EOS).\r\n * @param  hadc: ADC handle\r\n * @retval ADC group regular conversion data\r\n */\r\nuint32_t HAL_ADC_GetValue(ADC_HandleTypeDef *hadc) {\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Note: EOC flag is not cleared here by software because automatically     */\r\n  /*       cleared by hardware when reading register DR.                      */\r\n\r\n  /* Return ADC converted value */\r\n  return hadc->Instance->DR;\r\n}\r\n\r\n/**\r\n * @brief  Handles ADC interrupt request\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\nvoid HAL_ADC_IRQHandler(ADC_HandleTypeDef *hadc) {\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));\r\n  assert_param(IS_ADC_REGULAR_NB_CONV(hadc->Init.NbrOfConversion));\r\n\r\n  /* ========== Check End of Conversion flag for regular group ========== */\r\n  if (__HAL_ADC_GET_IT_SOURCE(hadc, ADC_IT_EOC)) {\r\n    if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOC)) {\r\n      /* Update state machine on conversion status if not in error state */\r\n      if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL)) {\r\n        /* Set ADC state */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC);\r\n      }\r\n\r\n      /* Determine whether any further conversion upcoming on group regular   */\r\n      /* by external trigger, continuous mode or scan sequence on going.      */\r\n      /* Note: On STM32F1 devices, in case of sequencer enabled               */\r\n      /*       (several ranks selected), end of conversion flag is raised     */\r\n      /*       at the end of the sequence.                                    */\r\n      if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && (hadc->Init.ContinuousConvMode == DISABLE)) {\r\n        /* Disable ADC end of conversion interrupt on group regular */\r\n        __HAL_ADC_DISABLE_IT(hadc, ADC_IT_EOC);\r\n\r\n        /* Set ADC state */\r\n        CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);\r\n\r\n        if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_READY);\r\n        }\r\n      }\r\n\r\n      /* Conversion complete callback */\r\n#if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)\r\n      hadc->ConvCpltCallback(hadc);\r\n#else\r\n      HAL_ADC_ConvCpltCallback(hadc);\r\n#endif /* USE_HAL_ADC_REGISTER_CALLBACKS */\r\n\r\n      /* Clear regular group conversion flag */\r\n      __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_STRT | ADC_FLAG_EOC);\r\n    }\r\n  }\r\n\r\n  /* ========== Check End of Conversion flag for injected group ========== */\r\n  if (__HAL_ADC_GET_IT_SOURCE(hadc, ADC_IT_JEOC)) {\r\n    if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_JEOC)) {\r\n      /* Update state machine on conversion status if not in error state */\r\n      if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL)) {\r\n        /* Set ADC state */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_INJ_EOC);\r\n      }\r\n\r\n      /* Determine whether any further conversion upcoming on group injected  */\r\n      /* by external trigger, scan sequence on going or by automatic injected */\r\n      /* conversion from group regular (same conditions as group regular      */\r\n      /* interruption disabling above).                                       */\r\n      /* Note: On STM32F1 devices, in case of sequencer enabled               */\r\n      /*       (several ranks selected), end of conversion flag is raised     */\r\n      /*       at the end of the sequence.                                    */\r\n      if (ADC_IS_SOFTWARE_START_INJECTED(hadc) || (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO) && (ADC_IS_SOFTWARE_START_REGULAR(hadc) && (hadc->Init.ContinuousConvMode == DISABLE)))) {\r\n        /* Disable ADC end of conversion interrupt on group injected */\r\n        __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOC);\r\n\r\n        /* Set ADC state */\r\n        CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY);\r\n\r\n        if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) {\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_READY);\r\n        }\r\n      }\r\n\r\n      /* Conversion complete callback */\r\n#if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)\r\n      hadc->InjectedConvCpltCallback(hadc);\r\n#else\r\n      HAL_ADCEx_InjectedConvCpltCallback(hadc);\r\n#endif /* USE_HAL_ADC_REGISTER_CALLBACKS */\r\n\r\n      /* Clear injected group conversion flag */\r\n      __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_JSTRT | ADC_FLAG_JEOC));\r\n    }\r\n  }\r\n\r\n  /* ========== Check Analog watchdog flags ========== */\r\n  if (__HAL_ADC_GET_IT_SOURCE(hadc, ADC_IT_AWD)) {\r\n    if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_AWD)) {\r\n      /* Set ADC state */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_AWD1);\r\n\r\n      /* Level out of window callback */\r\n#if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)\r\n      hadc->LevelOutOfWindowCallback(hadc);\r\n#else\r\n      HAL_ADC_LevelOutOfWindowCallback(hadc);\r\n#endif /* USE_HAL_ADC_REGISTER_CALLBACKS */\r\n\r\n      /* Clear the ADC analog watchdog flag */\r\n      __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_AWD);\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Conversion complete callback in non blocking mode\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\n__weak void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hadc);\r\n  /* NOTE : This function should not be modified. When the callback is needed,\r\n            function HAL_ADC_ConvCpltCallback must be implemented in the user file.\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Conversion DMA half-transfer callback in non blocking mode\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\n__weak void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef *hadc) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hadc);\r\n  /* NOTE : This function should not be modified. When the callback is needed,\r\n            function HAL_ADC_ConvHalfCpltCallback must be implemented in the user file.\r\n  */\r\n}\r\n\r\n/**\r\n * @brief  Analog watchdog callback in non blocking mode.\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\n__weak void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef *hadc) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hadc);\r\n  /* NOTE : This function should not be modified. When the callback is needed,\r\n            function HAL_ADC_LevelOutOfWindowCallback must be implemented in the user file.\r\n  */\r\n}\r\n\r\n/**\r\n * @brief  ADC error callback in non blocking mode\r\n *        (ADC conversion with interruption or transfer by DMA)\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\n__weak void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hadc);\r\n  /* NOTE : This function should not be modified. When the callback is needed,\r\n            function HAL_ADC_ErrorCallback must be implemented in the user file.\r\n  */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Exported_Functions_Group3 Peripheral Control functions\r\n *  @brief    Peripheral Control functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n             ##### Peripheral Control functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Configure channels on regular group\r\n      (+) Configure the analog watchdog\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Configures the the selected channel to be linked to the regular\r\n *         group.\r\n * @note   In case of usage of internal measurement channels:\r\n *         Vbat/VrefInt/TempSensor.\r\n *         These internal paths can be be disabled using function\r\n *         HAL_ADC_DeInit().\r\n * @note   Possibility to update parameters on the fly:\r\n *         This function initializes channel into regular group, following\r\n *         calls to this function can be used to reconfigure some parameters\r\n *         of structure \"ADC_ChannelConfTypeDef\" on the fly, without reseting\r\n *         the ADC.\r\n *         The setting of these parameters is conditioned to ADC state.\r\n *         For parameters constraints, see comments of structure\r\n *         \"ADC_ChannelConfTypeDef\".\r\n * @param  hadc: ADC handle\r\n * @param  sConfig: Structure of ADC channel for regular group.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef *hadc, ADC_ChannelConfTypeDef *sConfig) {\r\n  HAL_StatusTypeDef tmp_hal_status  = HAL_OK;\r\n  __IO uint32_t     wait_loop_index = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_CHANNEL(sConfig->Channel));\r\n  assert_param(IS_ADC_REGULAR_RANK(sConfig->Rank));\r\n  assert_param(IS_ADC_SAMPLE_TIME(sConfig->SamplingTime));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Regular sequence configuration */\r\n  /* For Rank 1 to 6 */\r\n  if (sConfig->Rank < 7U) {\r\n    MODIFY_REG(hadc->Instance->SQR3, ADC_SQR3_RK(ADC_SQR3_SQ1, sConfig->Rank), ADC_SQR3_RK(sConfig->Channel, sConfig->Rank));\r\n  }\r\n  /* For Rank 7 to 12 */\r\n  else if (sConfig->Rank < 13U) {\r\n    MODIFY_REG(hadc->Instance->SQR2, ADC_SQR2_RK(ADC_SQR2_SQ7, sConfig->Rank), ADC_SQR2_RK(sConfig->Channel, sConfig->Rank));\r\n  }\r\n  /* For Rank 13 to 16 */\r\n  else {\r\n    MODIFY_REG(hadc->Instance->SQR1, ADC_SQR1_RK(ADC_SQR1_SQ13, sConfig->Rank), ADC_SQR1_RK(sConfig->Channel, sConfig->Rank));\r\n  }\r\n\r\n  /* Channel sampling time configuration */\r\n  /* For channels 10 to 17 */\r\n  if (sConfig->Channel >= ADC_CHANNEL_10) {\r\n    MODIFY_REG(hadc->Instance->SMPR1, ADC_SMPR1(ADC_SMPR1_SMP10, sConfig->Channel), ADC_SMPR1(sConfig->SamplingTime, sConfig->Channel));\r\n  } else /* For channels 0 to 9 */\r\n  {\r\n    MODIFY_REG(hadc->Instance->SMPR2, ADC_SMPR2(ADC_SMPR2_SMP0, sConfig->Channel), ADC_SMPR2(sConfig->SamplingTime, sConfig->Channel));\r\n  }\r\n\r\n  /* If ADC1 Channel_16 or Channel_17 is selected, enable Temperature sensor  */\r\n  /* and VREFINT measurement path.                                            */\r\n  if ((sConfig->Channel == ADC_CHANNEL_TEMPSENSOR) || (sConfig->Channel == ADC_CHANNEL_VREFINT)) {\r\n    /* For STM32F1 devices with several ADC: Only ADC1 can access internal    */\r\n    /* measurement channels (VrefInt/TempSensor). If these channels are       */\r\n    /* intended to be set on other ADC instances, an error is reported.       */\r\n    if (hadc->Instance == ADC1) {\r\n      if (READ_BIT(hadc->Instance->CR2, ADC_CR2_TSVREFE) == RESET) {\r\n        SET_BIT(hadc->Instance->CR2, ADC_CR2_TSVREFE);\r\n\r\n        if ((sConfig->Channel == ADC_CHANNEL_TEMPSENSOR)) {\r\n          /* Delay for temperature sensor stabilization time */\r\n          /* Compute number of CPU cycles to wait for */\r\n          wait_loop_index = (ADC_TEMPSENSOR_DELAY_US * (SystemCoreClock / 1000000U));\r\n          while (wait_loop_index != 0U) {\r\n            wait_loop_index--;\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      /* Update ADC state machine to error */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n      tmp_hal_status = HAL_ERROR;\r\n    }\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Configures the analog watchdog.\r\n * @note   Analog watchdog thresholds can be modified while ADC conversion\r\n *         is on going.\r\n *         In this case, some constraints must be taken into account:\r\n *         the programmed threshold values are effective from the next\r\n *         ADC EOC (end of unitary conversion).\r\n *         Considering that registers write delay may happen due to\r\n *         bus activity, this might cause an uncertainty on the\r\n *         effective timing of the new programmed threshold values.\r\n * @param  hadc: ADC handle\r\n * @param  AnalogWDGConfig: Structure of ADC analog watchdog configuration\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef *hadc, ADC_AnalogWDGConfTypeDef *AnalogWDGConfig) {\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_ANALOG_WATCHDOG_MODE(AnalogWDGConfig->WatchdogMode));\r\n  assert_param(IS_FUNCTIONAL_STATE(AnalogWDGConfig->ITMode));\r\n  assert_param(IS_ADC_RANGE(AnalogWDGConfig->HighThreshold));\r\n  assert_param(IS_ADC_RANGE(AnalogWDGConfig->LowThreshold));\r\n\r\n  if ((AnalogWDGConfig->WatchdogMode == ADC_ANALOGWATCHDOG_SINGLE_REG) || (AnalogWDGConfig->WatchdogMode == ADC_ANALOGWATCHDOG_SINGLE_INJEC) ||\r\n      (AnalogWDGConfig->WatchdogMode == ADC_ANALOGWATCHDOG_SINGLE_REGINJEC)) {\r\n    assert_param(IS_ADC_CHANNEL(AnalogWDGConfig->Channel));\r\n  }\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Analog watchdog configuration */\r\n\r\n  /* Configure ADC Analog watchdog interrupt */\r\n  if (AnalogWDGConfig->ITMode == ENABLE) {\r\n    /* Enable the ADC Analog watchdog interrupt */\r\n    __HAL_ADC_ENABLE_IT(hadc, ADC_IT_AWD);\r\n  } else {\r\n    /* Disable the ADC Analog watchdog interrupt */\r\n    __HAL_ADC_DISABLE_IT(hadc, ADC_IT_AWD);\r\n  }\r\n\r\n  /* Configuration of analog watchdog:                                        */\r\n  /*  - Set the analog watchdog enable mode: regular and/or injected groups,  */\r\n  /*    one or all channels.                                                  */\r\n  /*  - Set the Analog watchdog channel (is not used if watchdog              */\r\n  /*    mode \"all channels\": ADC_CFGR_AWD1SGL=0).                             */\r\n  MODIFY_REG(hadc->Instance->CR1, ADC_CR1_AWDSGL | ADC_CR1_JAWDEN | ADC_CR1_AWDEN | ADC_CR1_AWDCH, AnalogWDGConfig->WatchdogMode | AnalogWDGConfig->Channel);\r\n\r\n  /* Set the high threshold */\r\n  WRITE_REG(hadc->Instance->HTR, AnalogWDGConfig->HighThreshold);\r\n\r\n  /* Set the low threshold */\r\n  WRITE_REG(hadc->Instance->LTR, AnalogWDGConfig->LowThreshold);\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Exported_Functions_Group4 Peripheral State functions\r\n *  @brief    Peripheral State functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n            ##### Peripheral State and Errors functions #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides functions to get in run-time the status of the\r\n    peripheral.\r\n      (+) Check the ADC state\r\n      (+) Check the ADC error code\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  return the ADC state\r\n * @param  hadc: ADC handle\r\n * @retval HAL state\r\n */\r\nuint32_t HAL_ADC_GetState(ADC_HandleTypeDef *hadc) {\r\n  /* Return ADC state */\r\n  return hadc->State;\r\n}\r\n\r\n/**\r\n * @brief  Return the ADC error code\r\n * @param  hadc: ADC handle\r\n * @retval ADC Error Code\r\n */\r\nuint32_t HAL_ADC_GetError(ADC_HandleTypeDef *hadc) { return hadc->ErrorCode; }\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Private_Functions ADC Private Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Enable the selected ADC.\r\n * @note   Prerequisite condition to use this function: ADC must be disabled\r\n *         and voltage regulator must be enabled (done into HAL_ADC_Init()).\r\n * @param  hadc: ADC handle\r\n * @retval HAL status.\r\n */\r\nHAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef *hadc) {\r\n  uint32_t      tickstart       = 0U;\r\n  __IO uint32_t wait_loop_index = 0U;\r\n\r\n  /* ADC enable and wait for ADC ready (in case of ADC is disabled or         */\r\n  /* enabling phase not yet completed: flag ADC ready not yet set).           */\r\n  /* Timeout implemented to not be stuck if ADC cannot be enabled (possible   */\r\n  /* causes: ADC clock not running, ...).                                     */\r\n  if (ADC_IS_ENABLE(hadc) == RESET) {\r\n    /* Enable the Peripheral */\r\n    __HAL_ADC_ENABLE(hadc);\r\n\r\n    /* Delay for ADC stabilization time */\r\n    /* Compute number of CPU cycles to wait for */\r\n    wait_loop_index = (ADC_STAB_DELAY_US * (SystemCoreClock / 1000000U));\r\n    while (wait_loop_index != 0U) {\r\n      wait_loop_index--;\r\n    }\r\n\r\n    /* Get tick count */\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait for ADC effectively enabled */\r\n    while (ADC_IS_ENABLE(hadc) == RESET) {\r\n      if ((HAL_GetTick() - tickstart) > ADC_ENABLE_TIMEOUT) {\r\n        /* Update ADC state machine to error */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n        /* Set ADC error code to ADC IP internal error */\r\n        SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);\r\n\r\n        /* Process unlocked */\r\n        __HAL_UNLOCK(hadc);\r\n\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Return HAL status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stop ADC conversion and disable the selected ADC\r\n * @note   Prerequisite condition to use this function: ADC conversions must be\r\n *         stopped to disable the ADC.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status.\r\n */\r\nHAL_StatusTypeDef ADC_ConversionStop_Disable(ADC_HandleTypeDef *hadc) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Verification if ADC is not already disabled */\r\n  if (ADC_IS_ENABLE(hadc) != RESET) {\r\n    /* Disable the ADC peripheral */\r\n    __HAL_ADC_DISABLE(hadc);\r\n\r\n    /* Get tick count */\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait for ADC effectively disabled */\r\n    while (ADC_IS_ENABLE(hadc) != RESET) {\r\n      if ((HAL_GetTick() - tickstart) > ADC_DISABLE_TIMEOUT) {\r\n        /* Update ADC state machine to error */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n        /* Set ADC error code to ADC IP internal error */\r\n        SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);\r\n\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Return HAL status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DMA transfer complete callback.\r\n * @param  hdma: pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid ADC_DMAConvCplt(DMA_HandleTypeDef *hdma) {\r\n  /* Retrieve ADC handle corresponding to current DMA handle */\r\n  ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  /* Update state machine on conversion status if not in error state */\r\n  if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL | HAL_ADC_STATE_ERROR_DMA)) {\r\n    /* Update ADC state machine */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC);\r\n\r\n    /* Determine whether any further conversion upcoming on group regular     */\r\n    /* by external trigger, continuous mode or scan sequence on going.        */\r\n    /* Note: On STM32F1 devices, in case of sequencer enabled                 */\r\n    /*       (several ranks selected), end of conversion flag is raised       */\r\n    /*       at the end of the sequence.                                      */\r\n    if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && (hadc->Init.ContinuousConvMode == DISABLE)) {\r\n      /* Set ADC state */\r\n      CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);\r\n\r\n      if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_READY);\r\n      }\r\n    }\r\n\r\n    /* Conversion complete callback */\r\n#if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)\r\n    hadc->ConvCpltCallback(hadc);\r\n#else\r\n    HAL_ADC_ConvCpltCallback(hadc);\r\n#endif /* USE_HAL_ADC_REGISTER_CALLBACKS */\r\n  } else {\r\n    /* Call DMA error callback */\r\n    hadc->DMA_Handle->XferErrorCallback(hdma);\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  DMA half transfer complete callback.\r\n * @param  hdma: pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid ADC_DMAHalfConvCplt(DMA_HandleTypeDef *hdma) {\r\n  /* Retrieve ADC handle corresponding to current DMA handle */\r\n  ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  /* Half conversion callback */\r\n#if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)\r\n  hadc->ConvHalfCpltCallback(hadc);\r\n#else\r\n  HAL_ADC_ConvHalfCpltCallback(hadc);\r\n#endif /* USE_HAL_ADC_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  DMA error callback\r\n * @param  hdma: pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid ADC_DMAError(DMA_HandleTypeDef *hdma) {\r\n  /* Retrieve ADC handle corresponding to current DMA handle */\r\n  ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  /* Set ADC state */\r\n  SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_DMA);\r\n\r\n  /* Set ADC error code to DMA error */\r\n  SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_DMA);\r\n\r\n  /* Error callback */\r\n#if (USE_HAL_ADC_REGISTER_CALLBACKS == 1)\r\n  hadc->ErrorCallback(hadc);\r\n#else\r\n  HAL_ADC_ErrorCallback(hadc);\r\n#endif /* USE_HAL_ADC_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_ADC_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_adc_ex.c\r\n  * @author  MCD Application Team\r\n  * @brief   This file provides firmware functions to manage the following\r\n  *          functionalities of the Analog to Digital Convertor (ADC)\r\n  *          peripheral:\r\n  *           + Operation functions\r\n  *             ++ Start, stop, get result of conversions of injected\r\n  *                group, using 2 possible modes: polling, interruption.\r\n  *             ++ Multimode feature (available on devices with 2 ADCs or more)\r\n  *             ++ Calibration (ADC automatic self-calibration)\r\n  *           + Control functions\r\n  *             ++ Channels configuration on injected group\r\n  *          Other functions (generic functions) are available in file\r\n  *          \"stm32f1xx_hal_adc.c\".\r\n  *\r\n  @verbatim\r\n  [..]\r\n  (@) Sections \"ADC peripheral features\" and \"How to use this driver\" are\r\n      available in file of generic functions \"stm32f1xx_hal_adc.c\".\r\n  [..]\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup ADCEx ADCEx\r\n * @brief ADC Extension HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_ADC_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup ADCEx_Private_Constants ADCEx Private Constants\r\n * @{\r\n */\r\n\r\n/* Delay for ADC calibration:                                               */\r\n/* Hardware prerequisite before starting a calibration: the ADC must have   */\r\n/* been in power-on state for at least two ADC clock cycles.                */\r\n/* Unit: ADC clock cycles                                                   */\r\n#define ADC_PRECALIBRATION_DELAY_ADCCLOCKCYCLES 2U\r\n\r\n/* Timeout value for ADC calibration                                        */\r\n/* Value defined to be higher than worst cases: low clocks freq,            */\r\n/* maximum prescaler.                                                       */\r\n/* Ex of profile low frequency : Clock source at 0.1 MHz, ADC clock         */\r\n/* prescaler 4, sampling time 12.5 ADC clock cycles, resolution 12 bits.    */\r\n/* Unit: ms                                                                 */\r\n#define ADC_CALIBRATION_TIMEOUT 10U\r\n\r\n/* Delay for temperature sensor stabilization time.                         */\r\n/* Maximum delay is 10us (refer to device datasheet, parameter tSTART).     */\r\n/* Unit: us                                                                 */\r\n#define ADC_TEMPSENSOR_DELAY_US 10U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n\r\n/** @defgroup ADCEx_Exported_Functions ADCEx Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup ADCEx_Exported_Functions_Group1 Extended Extended IO operation functions\r\n *  @brief    Extended Extended Input and Output operation functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### IO operation functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Start conversion of injected group.\r\n      (+) Stop conversion of injected group.\r\n      (+) Poll for conversion complete on injected group.\r\n      (+) Get result of injected channel conversion.\r\n      (+) Start conversion of injected group and enable interruptions.\r\n      (+) Stop conversion of injected group and disable interruptions.\r\n\r\n      (+) Start multimode and enable DMA transfer.\r\n      (+) Stop multimode and disable ADC DMA transfer.\r\n      (+) Get result of multimode conversion.\r\n\r\n      (+) Perform the ADC self-calibration for single or differential ending.\r\n      (+) Get calibration factors for single or differential ending.\r\n      (+) Set calibration factors for single or differential ending.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Perform an ADC automatic self-calibration\r\n *         Calibration prerequisite: ADC must be disabled (execute this\r\n *         function before HAL_ADC_Start() or after HAL_ADC_Stop() ).\r\n *         During calibration process, ADC is enabled. ADC is let enabled at\r\n *         the completion of this function.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n  uint32_t          tickstart;\r\n  __IO uint32_t     wait_loop_index = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* 1. Calibration prerequisite:                                             */\r\n  /*    - ADC must be disabled for at least two ADC clock cycles in disable   */\r\n  /*      mode before ADC enable                                              */\r\n  /* Stop potential conversion on going, on regular and injected groups       */\r\n  /* Disable ADC peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Check if ADC is effectively disabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_BUSY_INTERNAL);\r\n\r\n    /* Hardware prerequisite: delay before starting the calibration.          */\r\n    /*  - Computation of CPU clock cycles corresponding to ADC clock cycles.  */\r\n    /*  - Wait for the expected ADC clock cycles delay */\r\n    wait_loop_index = ((SystemCoreClock / HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC)) * ADC_PRECALIBRATION_DELAY_ADCCLOCKCYCLES);\r\n\r\n    while (wait_loop_index != 0U) {\r\n      wait_loop_index--;\r\n    }\r\n\r\n    /* 2. Enable the ADC peripheral */\r\n    ADC_Enable(hadc);\r\n\r\n    /* 3. Resets ADC calibration registers */\r\n    SET_BIT(hadc->Instance->CR2, ADC_CR2_RSTCAL);\r\n\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait for calibration reset completion */\r\n    while (HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_RSTCAL)) {\r\n      if ((HAL_GetTick() - tickstart) > ADC_CALIBRATION_TIMEOUT) {\r\n        /* Update ADC state machine to error */\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n        /* Process unlocked */\r\n        __HAL_UNLOCK(hadc);\r\n\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n\r\n    /* 4. Start ADC calibration */\r\n    SET_BIT(hadc->Instance->CR2, ADC_CR2_CAL);\r\n\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait for calibration completion */\r\n    while (HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_CAL)) {\r\n      if ((HAL_GetTick() - tickstart) > ADC_CALIBRATION_TIMEOUT) {\r\n        /* Update ADC state machine to error */\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n        /* Process unlocked */\r\n        __HAL_UNLOCK(hadc);\r\n\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n\r\n    /* Set ADC state */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_READY);\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Enables ADC, starts conversion of injected group.\r\n *         Interruptions enabled in this function: None.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Enable the ADC peripheral */\r\n  tmp_hal_status = ADC_Enable(hadc);\r\n\r\n  /* Start conversion if ADC is effectively enabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state                                                          */\r\n    /* - Clear state bitfield related to injected group conversion results    */\r\n    /* - Set state bitfield related to injected operation                     */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n\r\n    /* Case of independent mode or multimode (for devices with several ADCs): */\r\n    /* Set multimode state.                                                   */\r\n    if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n    } else {\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n    }\r\n\r\n    /* Check if a regular conversion is ongoing */\r\n    /* Note: On this device, there is no ADC error code fields related to     */\r\n    /*       conversions on group injected only. In case of conversion on     */\r\n    /*       going on group regular, no error code is reset.                  */\r\n    if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) {\r\n      /* Reset ADC all error code fields */\r\n      ADC_CLEAR_ERRORCODE(hadc);\r\n    }\r\n\r\n    /* Process unlocked */\r\n    /* Unlock before starting ADC conversions: in case of potential           */\r\n    /* interruption, to let the process to ADC IRQ Handler.                   */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    /* Clear injected group conversion flag */\r\n    /* (To ensure of no unknown state from potential previous ADC operations) */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JEOC);\r\n\r\n    /* Enable conversion of injected group.                                   */\r\n    /* If software start has been selected, conversion starts immediately.    */\r\n    /* If external trigger has been selected, conversion will start at next   */\r\n    /* trigger event.                                                         */\r\n    /* If automatic injected conversion is enabled, conversion will start     */\r\n    /* after next regular group conversion.                                   */\r\n    /* Case of multimode enabled (for devices with several ADCs): if ADC is   */\r\n    /* slave, ADC is enabled only (conversion is not started). If ADC is      */\r\n    /* master, ADC is enabled and conversion is started.                      */\r\n    if (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO)) {\r\n      if (ADC_IS_SOFTWARE_START_INJECTED(hadc) && ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n        /* Start ADC conversion on injected group with SW start */\r\n        SET_BIT(hadc->Instance->CR2, (ADC_CR2_JSWSTART | ADC_CR2_JEXTTRIG));\r\n      } else {\r\n        /* Start ADC conversion on injected group with external trigger */\r\n        SET_BIT(hadc->Instance->CR2, ADC_CR2_JEXTTRIG);\r\n      }\r\n    }\r\n  } else {\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop conversion of injected channels. Disable ADC peripheral if\r\n *         no regular conversion is on going.\r\n * @note   If ADC must be disabled and if conversion is on going on\r\n *         regular group, function HAL_ADC_Stop must be used to stop both\r\n *         injected and regular groups, and disable the ADC.\r\n * @note   If injected group mode auto-injection is enabled,\r\n *         function HAL_ADC_Stop must be used.\r\n * @note   In case of auto-injection mode, HAL_ADC_Stop must be used.\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion and disable ADC peripheral                     */\r\n  /* Conditioned to:                                                          */\r\n  /* - No conversion on the other group (regular group) is intended to        */\r\n  /*   continue (injected and regular groups stop conversion and ADC disable  */\r\n  /*   are common)                                                            */\r\n  /* - In case of auto-injection mode, HAL_ADC_Stop must be used.             */\r\n  if (((hadc->State & HAL_ADC_STATE_REG_BUSY) == RESET) && HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO)) {\r\n    /* Stop potential conversion on going, on regular and injected groups */\r\n    /* Disable ADC peripheral */\r\n    tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n    /* Check if ADC is effectively disabled */\r\n    if (tmp_hal_status == HAL_OK) {\r\n      /* Set ADC state */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n    }\r\n  } else {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n    tmp_hal_status = HAL_ERROR;\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Wait for injected group conversion to be completed.\r\n * @param  hadc: ADC handle\r\n * @param  Timeout: Timeout value in millisecond.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout) {\r\n  uint32_t tickstart;\r\n\r\n  /* Variables for polling in case of scan mode enabled and polling for each  */\r\n  /* conversion.                                                              */\r\n  __IO uint32_t Conversion_Timeout_CPU_cycles     = 0U;\r\n  uint32_t      Conversion_Timeout_CPU_cycles_max = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Get timeout */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Polling for end of conversion: differentiation if single/sequence        */\r\n  /* conversion.                                                              */\r\n  /* For injected group, flag JEOC is set only at the end of the sequence,    */\r\n  /* not for each conversion within the sequence.                             */\r\n  /*  - If single conversion for injected group (scan mode disabled or        */\r\n  /*    InjectedNbrOfConversion ==1), flag JEOC is used to determine the      */\r\n  /*    conversion completion.                                                */\r\n  /*  - If sequence conversion for injected group (scan mode enabled and      */\r\n  /*    InjectedNbrOfConversion >=2), flag JEOC is set only at the end of the */\r\n  /*    sequence.                                                             */\r\n  /*    To poll for each conversion, the maximum conversion time is computed  */\r\n  /*    from ADC conversion time (selected sampling time + conversion time of */\r\n  /*    12.5 ADC clock cycles) and APB2/ADC clock prescalers (depending on    */\r\n  /*    settings, conversion time range can be from 28 to 32256 CPU cycles).  */\r\n  /*    As flag JEOC is not set after each conversion, no timeout status can  */\r\n  /*    be set.                                                               */\r\n  if ((hadc->Instance->JSQR & ADC_JSQR_JL) == RESET) {\r\n    /* Wait until End of Conversion flag is raised */\r\n    while (HAL_IS_BIT_CLR(hadc->Instance->SR, ADC_FLAG_JEOC)) {\r\n      /* Check if timeout is disabled (set to infinite wait) */\r\n      if (Timeout != HAL_MAX_DELAY) {\r\n        if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n          /* Update ADC state machine to timeout */\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);\r\n\r\n          /* Process unlocked */\r\n          __HAL_UNLOCK(hadc);\r\n\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n  } else {\r\n    /* Replace polling by wait for maximum conversion time */\r\n    /*  - Computation of CPU clock cycles corresponding to ADC clock cycles   */\r\n    /*    and ADC maximum conversion cycles on all channels.                  */\r\n    /*  - Wait for the expected ADC clock cycles delay                        */\r\n    Conversion_Timeout_CPU_cycles_max = ((SystemCoreClock / HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC)) * ADC_CONVCYCLES_MAX_RANGE(hadc));\r\n\r\n    while (Conversion_Timeout_CPU_cycles < Conversion_Timeout_CPU_cycles_max) {\r\n      /* Check if timeout is disabled (set to infinite wait) */\r\n      if (Timeout != HAL_MAX_DELAY) {\r\n        if ((Timeout == 0) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n          /* Update ADC state machine to timeout */\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);\r\n\r\n          /* Process unlocked */\r\n          __HAL_UNLOCK(hadc);\r\n\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n      Conversion_Timeout_CPU_cycles++;\r\n    }\r\n  }\r\n\r\n  /* Clear injected group conversion flag */\r\n  /* Note: On STM32F1 ADC, clear regular conversion flag raised               */\r\n  /* simultaneously.                                                          */\r\n  __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JSTRT | ADC_FLAG_JEOC | ADC_FLAG_EOC);\r\n\r\n  /* Update ADC state machine */\r\n  SET_BIT(hadc->State, HAL_ADC_STATE_INJ_EOC);\r\n\r\n  /* Determine whether any further conversion upcoming on group injected      */\r\n  /* by external trigger or by automatic injected conversion                  */\r\n  /* from group regular.                                                      */\r\n  if (ADC_IS_SOFTWARE_START_INJECTED(hadc) || (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO) && (ADC_IS_SOFTWARE_START_REGULAR(hadc) && (hadc->Init.ContinuousConvMode == DISABLE)))) {\r\n    /* Set ADC state */\r\n    CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY);\r\n\r\n    if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) {\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_READY);\r\n    }\r\n  }\r\n\r\n  /* Return ADC state */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Enables ADC, starts conversion of injected group with interruption.\r\n *          - JEOC (end of conversion of injected group)\r\n *         Each of these interruptions has its dedicated callback function.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status.\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Enable the ADC peripheral */\r\n  tmp_hal_status = ADC_Enable(hadc);\r\n\r\n  /* Start conversion if ADC is effectively enabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state                                                          */\r\n    /* - Clear state bitfield related to injected group conversion results    */\r\n    /* - Set state bitfield related to injected operation                     */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n\r\n    /* Case of independent mode or multimode (for devices with several ADCs): */\r\n    /* Set multimode state.                                                   */\r\n    if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n    } else {\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n    }\r\n\r\n    /* Check if a regular conversion is ongoing */\r\n    /* Note: On this device, there is no ADC error code fields related to     */\r\n    /*       conversions on group injected only. In case of conversion on     */\r\n    /*       going on group regular, no error code is reset.                  */\r\n    if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) {\r\n      /* Reset ADC all error code fields */\r\n      ADC_CLEAR_ERRORCODE(hadc);\r\n    }\r\n\r\n    /* Process unlocked */\r\n    /* Unlock before starting ADC conversions: in case of potential           */\r\n    /* interruption, to let the process to ADC IRQ Handler.                   */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    /* Clear injected group conversion flag */\r\n    /* (To ensure of no unknown state from potential previous ADC operations) */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JEOC);\r\n\r\n    /* Enable end of conversion interrupt for injected channels */\r\n    __HAL_ADC_ENABLE_IT(hadc, ADC_IT_JEOC);\r\n\r\n    /* Start conversion of injected group if software start has been selected */\r\n    /* and if automatic injected conversion is disabled.                      */\r\n    /* If external trigger has been selected, conversion will start at next   */\r\n    /* trigger event.                                                         */\r\n    /* If automatic injected conversion is enabled, conversion will start     */\r\n    /* after next regular group conversion.                                   */\r\n    if (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO)) {\r\n      if (ADC_IS_SOFTWARE_START_INJECTED(hadc) && ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n        /* Start ADC conversion on injected group with SW start */\r\n        SET_BIT(hadc->Instance->CR2, (ADC_CR2_JSWSTART | ADC_CR2_JEXTTRIG));\r\n      } else {\r\n        /* Start ADC conversion on injected group with external trigger */\r\n        SET_BIT(hadc->Instance->CR2, ADC_CR2_JEXTTRIG);\r\n      }\r\n    }\r\n  } else {\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop conversion of injected channels, disable interruption of\r\n *         end-of-conversion. Disable ADC peripheral if no regular conversion\r\n *         is on going.\r\n * @note   If ADC must be disabled and if conversion is on going on\r\n *         regular group, function HAL_ADC_Stop must be used to stop both\r\n *         injected and regular groups, and disable the ADC.\r\n * @note   If injected group mode auto-injection is enabled,\r\n *         function HAL_ADC_Stop must be used.\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion and disable ADC peripheral                     */\r\n  /* Conditioned to:                                                          */\r\n  /* - No conversion on the other group (regular group) is intended to        */\r\n  /*   continue (injected and regular groups stop conversion and ADC disable  */\r\n  /*   are common)                                                            */\r\n  /* - In case of auto-injection mode, HAL_ADC_Stop must be used.             */\r\n  if (((hadc->State & HAL_ADC_STATE_REG_BUSY) == RESET) && HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO)) {\r\n    /* Stop potential conversion on going, on regular and injected groups */\r\n    /* Disable ADC peripheral */\r\n    tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n    /* Check if ADC is effectively disabled */\r\n    if (tmp_hal_status == HAL_OK) {\r\n      /* Disable ADC end of conversion interrupt for injected channels */\r\n      __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOC);\r\n\r\n      /* Set ADC state */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n    }\r\n  } else {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n    tmp_hal_status = HAL_ERROR;\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief  Enables ADC, starts conversion of regular group and transfers result\r\n *         through DMA.\r\n *         Multimode must have been previously configured using\r\n *         HAL_ADCEx_MultiModeConfigChannel() function.\r\n *         Interruptions enabled in this function:\r\n *          - DMA transfer complete\r\n *          - DMA half transfer\r\n *         Each of these interruptions has its dedicated callback function.\r\n * @note:  On STM32F1 devices, ADC slave regular group must be configured\r\n *         with conversion trigger ADC_SOFTWARE_START.\r\n * @note:  ADC slave can be enabled preliminarily using single-mode\r\n *         HAL_ADC_Start() function.\r\n * @param  hadc: ADC handle of ADC master (handle of ADC slave must not be used)\r\n * @param  pData: The destination Buffer address.\r\n * @param  Length: The length of data to be transferred from ADC peripheral to memory.\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n  ADC_HandleTypeDef tmphadcSlave;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));\r\n  assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Set a temporary handle of the ADC slave associated to the ADC master     */\r\n  ADC_MULTI_SLAVE(hadc, &tmphadcSlave);\r\n\r\n  /* On STM32F1 devices, ADC slave regular group must be configured with      */\r\n  /* conversion trigger ADC_SOFTWARE_START.                                   */\r\n  /* Note: External trigger of ADC slave must be enabled, it is already done  */\r\n  /*       into function \"HAL_ADC_Init()\".                                    */\r\n  if (!ADC_IS_SOFTWARE_START_REGULAR(&tmphadcSlave)) {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Enable the ADC peripherals: master and slave (in case if not already     */\r\n  /* enabled previously)                                                      */\r\n  tmp_hal_status = ADC_Enable(hadc);\r\n  if (tmp_hal_status == HAL_OK) {\r\n    tmp_hal_status = ADC_Enable(&tmphadcSlave);\r\n  }\r\n\r\n  /* Start conversion if all ADCs of multimode are effectively enabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state (ADC master)                                             */\r\n    /* - Clear state bitfield related to regular group conversion results     */\r\n    /* - Set state bitfield related to regular operation                      */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_MULTIMODE_SLAVE, HAL_ADC_STATE_REG_BUSY);\r\n\r\n    /* If conversions on group regular are also triggering group injected,    */\r\n    /* update ADC state.                                                      */\r\n    if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) {\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n    }\r\n\r\n    /* Process unlocked */\r\n    /* Unlock before starting ADC conversions: in case of potential           */\r\n    /* interruption, to let the process to ADC IRQ Handler.                   */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    /* Set ADC error code to none */\r\n    ADC_CLEAR_ERRORCODE(hadc);\r\n\r\n    /* Set the DMA transfer complete callback */\r\n    hadc->DMA_Handle->XferCpltCallback = ADC_DMAConvCplt;\r\n\r\n    /* Set the DMA half transfer complete callback */\r\n    hadc->DMA_Handle->XferHalfCpltCallback = ADC_DMAHalfConvCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    hadc->DMA_Handle->XferErrorCallback = ADC_DMAError;\r\n\r\n    /* Manage ADC and DMA start: ADC overrun interruption, DMA start, ADC     */\r\n    /* start (in case of SW start):                                           */\r\n\r\n    /* Clear regular group conversion flag and overrun flag */\r\n    /* (To ensure of no unknown state from potential previous ADC operations) */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC);\r\n\r\n    /* Enable ADC DMA mode of ADC master */\r\n    SET_BIT(hadc->Instance->CR2, ADC_CR2_DMA);\r\n\r\n    /* Start the DMA channel */\r\n    HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&hadc->Instance->DR, (uint32_t)pData, Length);\r\n\r\n    /* Start conversion of regular group if software start has been selected. */\r\n    /* If external trigger has been selected, conversion will start at next   */\r\n    /* trigger event.                                                         */\r\n    /* Note: Alternate trigger for single conversion could be to force an     */\r\n    /*       additional set of bit ADON \"hadc->Instance->CR2 |= ADC_CR2_ADON;\"*/\r\n    if (ADC_IS_SOFTWARE_START_REGULAR(hadc)) {\r\n      /* Start ADC conversion on regular group with SW start */\r\n      SET_BIT(hadc->Instance->CR2, (ADC_CR2_SWSTART | ADC_CR2_EXTTRIG));\r\n    } else {\r\n      /* Start ADC conversion on regular group with external trigger */\r\n      SET_BIT(hadc->Instance->CR2, ADC_CR2_EXTTRIG);\r\n    }\r\n  } else {\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop ADC conversion of regular group (and injected channels in\r\n *         case of auto_injection mode), disable ADC DMA transfer, disable\r\n *         ADC peripheral.\r\n * @note   Multimode is kept enabled after this function. To disable multimode\r\n *         (set with HAL_ADCEx_MultiModeConfigChannel(), ADC must be\r\n *         reinitialized using HAL_ADC_Init() or HAL_ADC_ReInit().\r\n * @note   In case of DMA configured in circular mode, function\r\n *         HAL_ADC_Stop_DMA must be called after this function with handle of\r\n *         ADC slave, to properly disable the DMA channel.\r\n * @param  hadc: ADC handle of ADC master (handle of ADC slave must not be used)\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n  ADC_HandleTypeDef tmphadcSlave;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC master peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Check if ADC is effectively disabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set a temporary handle of the ADC slave associated to the ADC master   */\r\n    ADC_MULTI_SLAVE(hadc, &tmphadcSlave);\r\n\r\n    /* Disable ADC slave peripheral */\r\n    tmp_hal_status = ADC_ConversionStop_Disable(&tmphadcSlave);\r\n\r\n    /* Check if ADC is effectively disabled */\r\n    if (tmp_hal_status != HAL_OK) {\r\n      /* Update ADC state machine to error */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n      /* Process unlocked */\r\n      __HAL_UNLOCK(hadc);\r\n\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Disable ADC DMA mode */\r\n    CLEAR_BIT(hadc->Instance->CR2, ADC_CR2_DMA);\r\n\r\n    /* Reset configuration of ADC DMA continuous request for dual mode */\r\n    CLEAR_BIT(hadc->Instance->CR1, ADC_CR1_DUALMOD);\r\n\r\n    /* Disable the DMA channel (in case of DMA in circular mode or stop while */\r\n    /* while DMA transfer is on going)                                        */\r\n    tmp_hal_status = HAL_DMA_Abort(hadc->DMA_Handle);\r\n\r\n    /* Change ADC state (ADC master) */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @brief  Get ADC injected group conversion result.\r\n * @note   Reading register JDRx automatically clears ADC flag JEOC\r\n *         (ADC group injected end of unitary conversion).\r\n * @note   This function does not clear ADC flag JEOS\r\n *         (ADC group injected end of sequence conversion)\r\n *         Occurrence of flag JEOS rising:\r\n *          - If sequencer is composed of 1 rank, flag JEOS is equivalent\r\n *            to flag JEOC.\r\n *          - If sequencer is composed of several ranks, during the scan\r\n *            sequence flag JEOC only is raised, at the end of the scan sequence\r\n *            both flags JEOC and EOS are raised.\r\n *         Flag JEOS must not be cleared by this function because\r\n *         it would not be compliant with low power features\r\n *         (feature low power auto-wait, not available on all STM32 families).\r\n *         To clear this flag, either use function:\r\n *         in programming model IT: @ref HAL_ADC_IRQHandler(), in programming\r\n *         model polling: @ref HAL_ADCEx_InjectedPollForConversion()\r\n *         or @ref __HAL_ADC_CLEAR_FLAG(&hadc, ADC_FLAG_JEOS).\r\n * @param  hadc: ADC handle\r\n * @param  InjectedRank: the converted ADC injected rank.\r\n *          This parameter can be one of the following values:\r\n *            @arg ADC_INJECTED_RANK_1: Injected Channel1 selected\r\n *            @arg ADC_INJECTED_RANK_2: Injected Channel2 selected\r\n *            @arg ADC_INJECTED_RANK_3: Injected Channel3 selected\r\n *            @arg ADC_INJECTED_RANK_4: Injected Channel4 selected\r\n * @retval ADC group injected conversion data\r\n */\r\nuint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef *hadc, uint32_t InjectedRank) {\r\n  uint32_t tmp_jdr = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_INJECTED_RANK(InjectedRank));\r\n\r\n  /* Get ADC converted value */\r\n  switch (InjectedRank) {\r\n  case ADC_INJECTED_RANK_4:\r\n    tmp_jdr = hadc->Instance->JDR4;\r\n    break;\r\n  case ADC_INJECTED_RANK_3:\r\n    tmp_jdr = hadc->Instance->JDR3;\r\n    break;\r\n  case ADC_INJECTED_RANK_2:\r\n    tmp_jdr = hadc->Instance->JDR2;\r\n    break;\r\n  case ADC_INJECTED_RANK_1:\r\n  default:\r\n    tmp_jdr = hadc->Instance->JDR1;\r\n    break;\r\n  }\r\n\r\n  /* Return ADC converted value */\r\n  return tmp_jdr;\r\n}\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief  Returns the last ADC Master&Slave regular conversions results data\r\n *         in the selected multi mode.\r\n * @param  hadc: ADC handle of ADC master (handle of ADC slave must not be used)\r\n * @retval The converted data value.\r\n */\r\nuint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef *hadc) {\r\n  uint32_t tmpDR = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Note: EOC flag is not cleared here by software because automatically     */\r\n  /*       cleared by hardware when reading register DR.                      */\r\n\r\n  /* On STM32F1 devices, ADC1 data register DR contains ADC2 conversions      */\r\n  /* only if ADC1 DMA mode is enabled.                                        */\r\n  tmpDR = hadc->Instance->DR;\r\n\r\n  if (HAL_IS_BIT_CLR(ADC1->CR2, ADC_CR2_DMA)) {\r\n    tmpDR |= (ADC2->DR << 16U);\r\n  }\r\n\r\n  /* Return ADC converted value */\r\n  return tmpDR;\r\n}\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @brief  Injected conversion complete callback in non blocking mode\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\n__weak void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hadc);\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_ADCEx_InjectedConvCpltCallback could be implemented in the user file\r\n  */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADCEx_Exported_Functions_Group2 Extended Peripheral Control functions\r\n  * @brief    Extended Peripheral Control functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n             ##### Peripheral Control functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Configure channels on injected group\r\n      (+) Configure multimode\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Configures the ADC injected group and the selected channel to be\r\n *         linked to the injected group.\r\n * @note   Possibility to update parameters on the fly:\r\n *         This function initializes injected group, following calls to this\r\n *         function can be used to reconfigure some parameters of structure\r\n *         \"ADC_InjectionConfTypeDef\" on the fly, without reseting the ADC.\r\n *         The setting of these parameters is conditioned to ADC state:\r\n *         this function must be called when ADC is not under conversion.\r\n * @param  hadc: ADC handle\r\n * @param  sConfigInjected: Structure of ADC injected group and ADC channel for\r\n *         injected group.\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef *hadc, ADC_InjectionConfTypeDef *sConfigInjected) {\r\n  HAL_StatusTypeDef tmp_hal_status  = HAL_OK;\r\n  __IO uint32_t     wait_loop_index = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_CHANNEL(sConfigInjected->InjectedChannel));\r\n  assert_param(IS_ADC_SAMPLE_TIME(sConfigInjected->InjectedSamplingTime));\r\n  assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->AutoInjectedConv));\r\n  assert_param(IS_ADC_EXTTRIGINJEC(sConfigInjected->ExternalTrigInjecConv));\r\n  assert_param(IS_ADC_RANGE(sConfigInjected->InjectedOffset));\r\n\r\n  if (hadc->Init.ScanConvMode != ADC_SCAN_DISABLE) {\r\n    assert_param(IS_ADC_INJECTED_RANK(sConfigInjected->InjectedRank));\r\n    assert_param(IS_ADC_INJECTED_NB_CONV(sConfigInjected->InjectedNbrOfConversion));\r\n    assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->InjectedDiscontinuousConvMode));\r\n  }\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Configuration of injected group sequencer:                               */\r\n  /* - if scan mode is disabled, injected channels sequence length is set to  */\r\n  /*   0x00: 1 channel converted (channel on regular rank 1)                  */\r\n  /*   Parameter \"InjectedNbrOfConversion\" is discarded.                      */\r\n  /*   Note: Scan mode is present by hardware on this device and, if          */\r\n  /*   disabled, discards automatically nb of conversions. Anyway, nb of      */\r\n  /*   conversions is forced to 0x00 for alignment over all STM32 devices.    */\r\n  /* - if scan mode is enabled, injected channels sequence length is set to   */\r\n  /*   parameter \"InjectedNbrOfConversion\".                                   */\r\n  if (hadc->Init.ScanConvMode == ADC_SCAN_DISABLE) {\r\n    if (sConfigInjected->InjectedRank == ADC_INJECTED_RANK_1) {\r\n      /* Clear the old SQx bits for all injected ranks */\r\n      MODIFY_REG(hadc->Instance->JSQR, ADC_JSQR_JL | ADC_JSQR_JSQ4 | ADC_JSQR_JSQ3 | ADC_JSQR_JSQ2 | ADC_JSQR_JSQ1, ADC_JSQR_RK_JL(sConfigInjected->InjectedChannel, ADC_INJECTED_RANK_1, 0x01U));\r\n    }\r\n    /* If another injected rank than rank1 was intended to be set, and could  */\r\n    /* not due to ScanConvMode disabled, error is reported.                   */\r\n    else {\r\n      /* Update ADC state machine to error */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n      tmp_hal_status = HAL_ERROR;\r\n    }\r\n  } else {\r\n    /* Since injected channels rank conv. order depends on total number of   */\r\n    /* injected conversions, selected rank must be below or equal to total   */\r\n    /* number of injected conversions to be updated.                         */\r\n    if (sConfigInjected->InjectedRank <= sConfigInjected->InjectedNbrOfConversion) {\r\n      /* Clear the old SQx bits for the selected rank */\r\n      /* Set the SQx bits for the selected rank */\r\n      MODIFY_REG(hadc->Instance->JSQR,\r\n\r\n                 ADC_JSQR_JL | ADC_JSQR_RK_JL(ADC_JSQR_JSQ1, sConfigInjected->InjectedRank, sConfigInjected->InjectedNbrOfConversion),\r\n\r\n                 ADC_JSQR_JL_SHIFT(sConfigInjected->InjectedNbrOfConversion) |\r\n                     ADC_JSQR_RK_JL(sConfigInjected->InjectedChannel, sConfigInjected->InjectedRank, sConfigInjected->InjectedNbrOfConversion));\r\n    } else {\r\n      /* Clear the old SQx bits for the selected rank */\r\n      MODIFY_REG(hadc->Instance->JSQR,\r\n\r\n                 ADC_JSQR_JL | ADC_JSQR_RK_JL(ADC_JSQR_JSQ1, sConfigInjected->InjectedRank, sConfigInjected->InjectedNbrOfConversion),\r\n\r\n                 0x00000000U);\r\n    }\r\n  }\r\n\r\n  /* Configuration of injected group                                          */\r\n  /* Parameters update conditioned to ADC state:                              */\r\n  /* Parameters that can be updated only when ADC is disabled:                */\r\n  /*  - external trigger to start conversion                                  */\r\n  /* Parameters update not conditioned to ADC state:                          */\r\n  /*  - Automatic injected conversion                                         */\r\n  /*  - Injected discontinuous mode                                           */\r\n  /* Note: In case of ADC already enabled, caution to not launch an unwanted  */\r\n  /*       conversion while modifying register CR2 by writing 1 to bit ADON.  */\r\n  if (ADC_IS_ENABLE(hadc) == RESET) {\r\n    MODIFY_REG(hadc->Instance->CR2, ADC_CR2_JEXTSEL | ADC_CR2_ADON, ADC_CFGR_JEXTSEL(hadc, sConfigInjected->ExternalTrigInjecConv));\r\n  }\r\n\r\n  /* Configuration of injected group                                          */\r\n  /*  - Automatic injected conversion                                         */\r\n  /*  - Injected discontinuous mode                                           */\r\n\r\n  /* Automatic injected conversion can be enabled if injected group         */\r\n  /* external triggers are disabled.                                        */\r\n  if (sConfigInjected->AutoInjectedConv == ENABLE) {\r\n    if (sConfigInjected->ExternalTrigInjecConv == ADC_INJECTED_SOFTWARE_START) {\r\n      SET_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO);\r\n    } else {\r\n      /* Update ADC state machine to error */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n      tmp_hal_status = HAL_ERROR;\r\n    }\r\n  }\r\n\r\n  /* Injected discontinuous can be enabled only if auto-injected mode is    */\r\n  /* disabled.                                                              */\r\n  if (sConfigInjected->InjectedDiscontinuousConvMode == ENABLE) {\r\n    if (sConfigInjected->AutoInjectedConv == DISABLE) {\r\n      SET_BIT(hadc->Instance->CR1, ADC_CR1_JDISCEN);\r\n    } else {\r\n      /* Update ADC state machine to error */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n      tmp_hal_status = HAL_ERROR;\r\n    }\r\n  }\r\n\r\n  /* InjectedChannel sampling time configuration */\r\n  /* For channels 10 to 17 */\r\n  if (sConfigInjected->InjectedChannel >= ADC_CHANNEL_10) {\r\n    MODIFY_REG(hadc->Instance->SMPR1, ADC_SMPR1(ADC_SMPR1_SMP10, sConfigInjected->InjectedChannel), ADC_SMPR1(sConfigInjected->InjectedSamplingTime, sConfigInjected->InjectedChannel));\r\n  } else /* For channels 0 to 9 */\r\n  {\r\n    MODIFY_REG(hadc->Instance->SMPR2, ADC_SMPR2(ADC_SMPR2_SMP0, sConfigInjected->InjectedChannel), ADC_SMPR2(sConfigInjected->InjectedSamplingTime, sConfigInjected->InjectedChannel));\r\n  }\r\n\r\n  /* If ADC1 InjectedChannel_16 or InjectedChannel_17 is selected, enable Temperature sensor  */\r\n  /* and VREFINT measurement path.                                            */\r\n  if ((sConfigInjected->InjectedChannel == ADC_CHANNEL_TEMPSENSOR) || (sConfigInjected->InjectedChannel == ADC_CHANNEL_VREFINT)) {\r\n    SET_BIT(hadc->Instance->CR2, ADC_CR2_TSVREFE);\r\n  }\r\n\r\n  /* Configure the offset: offset enable/disable, InjectedChannel, offset value */\r\n  switch (sConfigInjected->InjectedRank) {\r\n  case 1:\r\n    /* Set injected channel 1 offset */\r\n    MODIFY_REG(hadc->Instance->JOFR1, ADC_JOFR1_JOFFSET1, sConfigInjected->InjectedOffset);\r\n    break;\r\n  case 2:\r\n    /* Set injected channel 2 offset */\r\n    MODIFY_REG(hadc->Instance->JOFR2, ADC_JOFR2_JOFFSET2, sConfigInjected->InjectedOffset);\r\n    break;\r\n  case 3:\r\n    /* Set injected channel 3 offset */\r\n    MODIFY_REG(hadc->Instance->JOFR3, ADC_JOFR3_JOFFSET3, sConfigInjected->InjectedOffset);\r\n    break;\r\n  case 4:\r\n  default:\r\n    MODIFY_REG(hadc->Instance->JOFR4, ADC_JOFR4_JOFFSET4, sConfigInjected->InjectedOffset);\r\n    break;\r\n  }\r\n\r\n  /* If ADC1 Channel_16 or Channel_17 is selected, enable Temperature sensor  */\r\n  /* and VREFINT measurement path.                                            */\r\n  if ((sConfigInjected->InjectedChannel == ADC_CHANNEL_TEMPSENSOR) || (sConfigInjected->InjectedChannel == ADC_CHANNEL_VREFINT)) {\r\n    /* For STM32F1 devices with several ADC: Only ADC1 can access internal    */\r\n    /* measurement channels (VrefInt/TempSensor). If these channels are       */\r\n    /* intended to be set on other ADC instances, an error is reported.       */\r\n    if (hadc->Instance == ADC1) {\r\n      if (READ_BIT(hadc->Instance->CR2, ADC_CR2_TSVREFE) == RESET) {\r\n        SET_BIT(hadc->Instance->CR2, ADC_CR2_TSVREFE);\r\n\r\n        if ((sConfigInjected->InjectedChannel == ADC_CHANNEL_TEMPSENSOR)) {\r\n          /* Delay for temperature sensor stabilization time */\r\n          /* Compute number of CPU cycles to wait for */\r\n          wait_loop_index = (ADC_TEMPSENSOR_DELAY_US * (SystemCoreClock / 1000000U));\r\n          while (wait_loop_index != 0U) {\r\n            wait_loop_index--;\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      /* Update ADC state machine to error */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n      tmp_hal_status = HAL_ERROR;\r\n    }\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief  Enable ADC multimode and configure multimode parameters\r\n * @note   Possibility to update parameters on the fly:\r\n *         This function initializes multimode parameters, following\r\n *         calls to this function can be used to reconfigure some parameters\r\n *         of structure \"ADC_MultiModeTypeDef\" on the fly, without reseting\r\n *         the ADCs (both ADCs of the common group).\r\n *         The setting of these parameters is conditioned to ADC state.\r\n *         For parameters constraints, see comments of structure\r\n *         \"ADC_MultiModeTypeDef\".\r\n * @note   To change back configuration from multimode to single mode, ADC must\r\n *         be reset (using function HAL_ADC_Init() ).\r\n * @param  hadc: ADC handle\r\n * @param  multimode: Structure of ADC multimode configuration\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n  ADC_HandleTypeDef tmphadcSlave;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_MODE(multimode->Mode));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Set a temporary handle of the ADC slave associated to the ADC master     */\r\n  ADC_MULTI_SLAVE(hadc, &tmphadcSlave);\r\n\r\n  /* Parameters update conditioned to ADC state:                              */\r\n  /* Parameters that can be updated when ADC is disabled or enabled without   */\r\n  /* conversion on going on regular group:                                    */\r\n  /*  - ADC master and ADC slave DMA configuration                            */\r\n  /* Parameters that can be updated only when ADC is disabled:                */\r\n  /*  - Multimode mode selection                                              */\r\n  /* To optimize code, all multimode settings can be set when both ADCs of    */\r\n  /* the common group are in state: disabled.                                 */\r\n  if ((ADC_IS_ENABLE(hadc) == RESET) && (ADC_IS_ENABLE(&tmphadcSlave) == RESET) && (IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance))) {\r\n    MODIFY_REG(hadc->Instance->CR1, ADC_CR1_DUALMOD, multimode->Mode);\r\n  }\r\n  /* If one of the ADC sharing the same common group is enabled, no update    */\r\n  /* could be done on neither of the multimode structure parameters.          */\r\n  else {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n    tmp_hal_status = HAL_ERROR;\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_ADC_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_cortex.c\r\n  * @author  MCD Application Team\r\n  * @brief   CORTEX HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the CORTEX:\r\n  *           + Initialization and de-initialization functions\r\n  *           + Peripheral Control functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                        ##### How to use this driver #####\r\n  ==============================================================================\r\n\r\n    [..]\r\n    *** How to configure Interrupts using CORTEX HAL driver ***\r\n    ===========================================================\r\n    [..]\r\n    This section provides functions allowing to configure the NVIC interrupts (IRQ).\r\n    The Cortex-M3 exceptions are managed by CMSIS functions.\r\n\r\n    (#) Configure the NVIC Priority Grouping using HAL_NVIC_SetPriorityGrouping()\r\n        function according to the following table.\r\n    (#) Configure the priority of the selected IRQ Channels using HAL_NVIC_SetPriority().\r\n    (#) Enable the selected IRQ Channels using HAL_NVIC_EnableIRQ().\r\n    (#) please refer to programming manual for details in how to configure priority.\r\n\r\n     -@- When the NVIC_PRIORITYGROUP_0 is selected, IRQ preemption is no more possible.\r\n         The pending IRQ priority will be managed only by the sub priority.\r\n\r\n     -@- IRQ priority order (sorted by highest to lowest priority):\r\n        (+@) Lowest preemption priority\r\n        (+@) Lowest sub priority\r\n        (+@) Lowest hardware priority (IRQ number)\r\n\r\n    [..]\r\n    *** How to configure Systick using CORTEX HAL driver ***\r\n    ========================================================\r\n    [..]\r\n    Setup SysTick Timer for time base.\r\n\r\n   (+) The HAL_SYSTICK_Config()function calls the SysTick_Config() function which\r\n       is a CMSIS function that:\r\n        (++) Configures the SysTick Reload register with value passed as function parameter.\r\n        (++) Configures the SysTick IRQ priority to the lowest value 0x0F.\r\n        (++) Resets the SysTick Counter register.\r\n        (++) Configures the SysTick Counter clock source to be Core Clock Source (HCLK).\r\n        (++) Enables the SysTick Interrupt.\r\n        (++) Starts the SysTick Counter.\r\n\r\n   (+) You can change the SysTick Clock source to be HCLK_Div8 by calling the macro\r\n       __HAL_CORTEX_SYSTICKCLK_CONFIG(SYSTICK_CLKSOURCE_HCLK_DIV8) just after the\r\n       HAL_SYSTICK_Config() function call. The __HAL_CORTEX_SYSTICKCLK_CONFIG() macro is defined\r\n       inside the stm32f1xx_hal_cortex.h file.\r\n\r\n   (+) You can change the SysTick IRQ priority by calling the\r\n       HAL_NVIC_SetPriority(SysTick_IRQn,...) function just after the HAL_SYSTICK_Config() function\r\n       call. The HAL_NVIC_SetPriority() call the NVIC_SetPriority() function which is a CMSIS function.\r\n\r\n   (+) To adjust the SysTick time base, use the following formula:\r\n\r\n       Reload Value = SysTick Counter Clock (Hz) x  Desired Time base (s)\r\n       (++) Reload Value is the parameter to be passed for HAL_SYSTICK_Config() function\r\n       (++) Reload Value should not exceed 0xFFFFFF\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup CORTEX CORTEX\r\n * @brief CORTEX HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_CORTEX_MODULE_ENABLED\r\n\r\n/* Private types -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private constants ---------------------------------------------------------*/\r\n/* Private macros ------------------------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @defgroup CORTEX_Exported_Functions CORTEX Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup CORTEX_Exported_Functions_Group1 Initialization and de-initialization functions\r\n  *  @brief    Initialization and Configuration functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n              ##### Initialization and de-initialization functions #####\r\n  ==============================================================================\r\n    [..]\r\n      This section provides the CORTEX HAL driver functions allowing to configure Interrupts\r\n      Systick functionalities\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Sets the priority grouping field (preemption priority and subpriority)\r\n *         using the required unlock sequence.\r\n * @param  PriorityGroup: The priority grouping bits length.\r\n *         This parameter can be one of the following values:\r\n *         @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority\r\n *                                    4 bits for subpriority\r\n *         @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority\r\n *                                    3 bits for subpriority\r\n *         @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority\r\n *                                    2 bits for subpriority\r\n *         @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority\r\n *                                    1 bits for subpriority\r\n *         @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority\r\n *                                    0 bits for subpriority\r\n * @note   When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible.\r\n *         The pending IRQ priority will be managed only by the subpriority.\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));\r\n\r\n  /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */\r\n  NVIC_SetPriorityGrouping(PriorityGroup);\r\n}\r\n\r\n/**\r\n * @brief  Sets the priority of an interrupt.\r\n * @param  IRQn: External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xx.h))\r\n * @param  PreemptPriority: The preemption priority for the IRQn channel.\r\n *         This parameter can be a value between 0 and 15\r\n *         A lower priority value indicates a higher priority\r\n * @param  SubPriority: the subpriority level for the IRQ channel.\r\n *         This parameter can be a value between 0 and 15\r\n *         A lower priority value indicates a higher priority.\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) {\r\n  uint32_t prioritygroup = 0x00U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_SUB_PRIORITY(SubPriority));\r\n  assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority));\r\n\r\n  prioritygroup = NVIC_GetPriorityGrouping();\r\n\r\n  NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority));\r\n}\r\n\r\n/**\r\n * @brief  Enables a device specific interrupt in the NVIC interrupt controller.\r\n * @note   To configure interrupts priority correctly, the NVIC_PriorityGroupConfig()\r\n *         function should be called before.\r\n * @param  IRQn External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_EnableIRQ(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Enable interrupt */\r\n  NVIC_EnableIRQ(IRQn);\r\n}\r\n\r\n/**\r\n * @brief  Disables a device specific interrupt in the NVIC interrupt controller.\r\n * @param  IRQn External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_DisableIRQ(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Disable interrupt */\r\n  NVIC_DisableIRQ(IRQn);\r\n}\r\n\r\n/**\r\n * @brief  Initiates a system reset request to reset the MCU.\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_SystemReset(void) {\r\n  /* System Reset */\r\n  NVIC_SystemReset();\r\n}\r\n\r\n/**\r\n * @brief  Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n *         Counter is in free running mode to generate periodic interrupts.\r\n * @param  TicksNumb: Specifies the ticks Number of ticks between two interrupts.\r\n * @retval status:  - 0  Function succeeded.\r\n *                  - 1  Function failed.\r\n */\r\nuint32_t HAL_SYSTICK_Config(uint32_t TicksNumb) { return SysTick_Config(TicksNumb); }\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_Exported_Functions_Group2 Peripheral Control functions\r\n  *  @brief   Cortex control functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                      ##### Peripheral Control functions #####\r\n  ==============================================================================\r\n    [..]\r\n      This subsection provides a set of functions allowing to control the CORTEX\r\n      (NVIC, SYSTICK, MPU) functionalities.\r\n\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/**\r\n * @brief  Disables the MPU\r\n * @retval None\r\n */\r\nvoid HAL_MPU_Disable(void) {\r\n  /* Make sure outstanding transfers are done */\r\n  __DMB();\r\n\r\n  /* Disable fault exceptions */\r\n  SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;\r\n\r\n  /* Disable the MPU and clear the control register*/\r\n  MPU->CTRL = 0U;\r\n}\r\n\r\n/**\r\n * @brief  Enable the MPU.\r\n * @param  MPU_Control: Specifies the control mode of the MPU during hard fault,\r\n *          NMI, FAULTMASK and privileged access to the default memory\r\n *          This parameter can be one of the following values:\r\n *            @arg MPU_HFNMI_PRIVDEF_NONE\r\n *            @arg MPU_HARDFAULT_NMI\r\n *            @arg MPU_PRIVILEGED_DEFAULT\r\n *            @arg MPU_HFNMI_PRIVDEF\r\n * @retval None\r\n */\r\nvoid HAL_MPU_Enable(uint32_t MPU_Control) {\r\n  /* Enable the MPU */\r\n  MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;\r\n\r\n  /* Enable fault exceptions */\r\n  SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;\r\n\r\n  /* Ensure MPU setting take effects */\r\n  __DSB();\r\n  __ISB();\r\n}\r\n\r\n/**\r\n * @brief  Initializes and configures the Region and the memory to be protected.\r\n * @param  MPU_Init: Pointer to a MPU_Region_InitTypeDef structure that contains\r\n *                the initialization and configuration information.\r\n * @retval None\r\n */\r\nvoid HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init) {\r\n  /* Check the parameters */\r\n  assert_param(IS_MPU_REGION_NUMBER(MPU_Init->Number));\r\n  assert_param(IS_MPU_REGION_ENABLE(MPU_Init->Enable));\r\n\r\n  /* Set the Region number */\r\n  MPU->RNR = MPU_Init->Number;\r\n\r\n  if ((MPU_Init->Enable) != RESET) {\r\n    /* Check the parameters */\r\n    assert_param(IS_MPU_INSTRUCTION_ACCESS(MPU_Init->DisableExec));\r\n    assert_param(IS_MPU_REGION_PERMISSION_ATTRIBUTE(MPU_Init->AccessPermission));\r\n    assert_param(IS_MPU_TEX_LEVEL(MPU_Init->TypeExtField));\r\n    assert_param(IS_MPU_ACCESS_SHAREABLE(MPU_Init->IsShareable));\r\n    assert_param(IS_MPU_ACCESS_CACHEABLE(MPU_Init->IsCacheable));\r\n    assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable));\r\n    assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable));\r\n    assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size));\r\n\r\n    MPU->RBAR = MPU_Init->BaseAddress;\r\n    MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) | ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) | ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) |\r\n                ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) | ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) | ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) |\r\n                ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) | ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) | ((uint32_t)MPU_Init->Enable << MPU_RASR_ENABLE_Pos);\r\n  } else {\r\n    MPU->RBAR = 0x00U;\r\n    MPU->RASR = 0x00U;\r\n  }\r\n}\r\n#endif /* __MPU_PRESENT */\r\n\r\n/**\r\n * @brief  Gets the priority grouping field from the NVIC Interrupt Controller.\r\n * @retval Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field)\r\n */\r\nuint32_t HAL_NVIC_GetPriorityGrouping(void) {\r\n  /* Get the PRIGROUP[10:8] field value */\r\n  return NVIC_GetPriorityGrouping();\r\n}\r\n\r\n/**\r\n * @brief  Gets the priority of an interrupt.\r\n * @param  IRQn: External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @param   PriorityGroup: the priority grouping bits length.\r\n *         This parameter can be one of the following values:\r\n *           @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority\r\n *                                      4 bits for subpriority\r\n *           @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority\r\n *                                      3 bits for subpriority\r\n *           @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority\r\n *                                      2 bits for subpriority\r\n *           @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority\r\n *                                      1 bits for subpriority\r\n *           @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority\r\n *                                      0 bits for subpriority\r\n * @param  pPreemptPriority: Pointer on the Preemptive priority value (starting from 0).\r\n * @param  pSubPriority: Pointer on the Subpriority value (starting from 0).\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t *pPreemptPriority, uint32_t *pSubPriority) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));\r\n  /* Get priority for Cortex-M system or device specific interrupts */\r\n  NVIC_DecodePriority(NVIC_GetPriority(IRQn), PriorityGroup, pPreemptPriority, pSubPriority);\r\n}\r\n\r\n/**\r\n * @brief  Sets Pending bit of an external interrupt.\r\n * @param  IRQn External interrupt number\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Set interrupt pending */\r\n  NVIC_SetPendingIRQ(IRQn);\r\n}\r\n\r\n/**\r\n * @brief  Gets Pending Interrupt (reads the pending register in the NVIC\r\n *         and returns the pending bit for the specified interrupt).\r\n * @param  IRQn External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval status: - 0  Interrupt status is not pending.\r\n *                 - 1  Interrupt status is pending.\r\n */\r\nuint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Return 1 if pending else 0 */\r\n  return NVIC_GetPendingIRQ(IRQn);\r\n}\r\n\r\n/**\r\n * @brief  Clears the pending bit of an external interrupt.\r\n * @param  IRQn External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Clear pending interrupt */\r\n  NVIC_ClearPendingIRQ(IRQn);\r\n}\r\n\r\n/**\r\n * @brief Gets active interrupt ( reads the active register in NVIC and returns the active bit).\r\n * @param IRQn External interrupt number\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval status: - 0  Interrupt status is not pending.\r\n *                 - 1  Interrupt status is pending.\r\n */\r\nuint32_t HAL_NVIC_GetActive(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Return 1 if active else 0 */\r\n  return NVIC_GetActive(IRQn);\r\n}\r\n\r\n/**\r\n * @brief  Configures the SysTick clock source.\r\n * @param  CLKSource: specifies the SysTick clock source.\r\n *         This parameter can be one of the following values:\r\n *             @arg SYSTICK_CLKSOURCE_HCLK_DIV8: AHB clock divided by 8 selected as SysTick clock source.\r\n *             @arg SYSTICK_CLKSOURCE_HCLK: AHB clock selected as SysTick clock source.\r\n * @retval None\r\n */\r\nvoid HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource) {\r\n  /* Check the parameters */\r\n  assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource));\r\n  if (CLKSource == SYSTICK_CLKSOURCE_HCLK) {\r\n    SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK;\r\n  } else {\r\n    SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  This function handles SYSTICK interrupt request.\r\n * @retval None\r\n */\r\nvoid HAL_SYSTICK_IRQHandler(void) { HAL_SYSTICK_Callback(); }\r\n\r\n/**\r\n * @brief  SYSTICK callback.\r\n * @retval None\r\n */\r\n__weak void HAL_SYSTICK_Callback(void) {\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_SYSTICK_Callback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_CORTEX_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_dma.c\r\n  * @author  MCD Application Team\r\n  * @brief   DMA HAL module driver.\r\n  *         This file provides firmware functions to manage the following\r\n  *         functionalities of the Direct Memory Access (DMA) peripheral:\r\n  *           + Initialization and de-initialization functions\r\n  *           + IO operation functions\r\n  *           + Peripheral State and errors functions\r\n  @verbatim\r\n  ==============================================================================\r\n                        ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..]\r\n   (#) Enable and configure the peripheral to be connected to the DMA Channel\r\n       (except for internal SRAM / FLASH memories: no initialization is\r\n       necessary). Please refer to the Reference manual for connection between peripherals\r\n       and DMA requests.\r\n\r\n   (#) For a given Channel, program the required configuration through the following parameters:\r\n       Channel request, Transfer Direction, Source and Destination data formats,\r\n       Circular or Normal mode, Channel Priority level, Source and Destination Increment mode\r\n       using HAL_DMA_Init() function.\r\n\r\n   (#) Use HAL_DMA_GetState() function to return the DMA state and HAL_DMA_GetError() in case of error\r\n       detection.\r\n\r\n   (#) Use HAL_DMA_Abort() function to abort the current transfer\r\n\r\n     -@-   In Memory-to-Memory transfer mode, Circular mode is not allowed.\r\n     *** Polling mode IO operation ***\r\n     =================================\r\n    [..]\r\n          (+) Use HAL_DMA_Start() to start DMA transfer after the configuration of Source\r\n              address and destination address and the Length of data to be transferred\r\n          (+) Use HAL_DMA_PollForTransfer() to poll for the end of current transfer, in this\r\n              case a fixed Timeout can be configured by User depending from his application.\r\n\r\n     *** Interrupt mode IO operation ***\r\n     ===================================\r\n    [..]\r\n          (+) Configure the DMA interrupt priority using HAL_NVIC_SetPriority()\r\n          (+) Enable the DMA IRQ handler using HAL_NVIC_EnableIRQ()\r\n          (+) Use HAL_DMA_Start_IT() to start DMA transfer after the configuration of\r\n              Source address and destination address and the Length of data to be transferred.\r\n              In this case the DMA interrupt is configured\r\n          (+) Use HAL_DMA_IRQHandler() called under DMA_IRQHandler() Interrupt subroutine\r\n          (+) At the end of data transfer HAL_DMA_IRQHandler() function is executed and user can\r\n              add his own function by customization of function pointer XferCpltCallback and\r\n              XferErrorCallback (i.e. a member of DMA handle structure).\r\n\r\n     *** DMA HAL driver macros list ***\r\n     =============================================\r\n      [..]\r\n       Below the list of most used macros in DMA HAL driver.\r\n\r\n       (+) __HAL_DMA_ENABLE: Enable the specified DMA Channel.\r\n       (+) __HAL_DMA_DISABLE: Disable the specified DMA Channel.\r\n       (+) __HAL_DMA_GET_FLAG: Get the DMA Channel pending flags.\r\n       (+) __HAL_DMA_CLEAR_FLAG: Clear the DMA Channel pending flags.\r\n       (+) __HAL_DMA_ENABLE_IT: Enable the specified DMA Channel interrupts.\r\n       (+) __HAL_DMA_DISABLE_IT: Disable the specified DMA Channel interrupts.\r\n       (+) __HAL_DMA_GET_IT_SOURCE: Check whether the specified DMA Channel interrupt has occurred or not.\r\n\r\n     [..]\r\n      (@) You can refer to the DMA HAL driver header file for more useful macros\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup DMA DMA\r\n * @brief DMA HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_DMA_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @defgroup DMA_Private_Functions DMA Private Functions\r\n * @{\r\n */\r\nstatic void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions ---------------------------------------------------------*/\r\n\r\n/** @defgroup DMA_Exported_Functions DMA Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup DMA_Exported_Functions_Group1 Initialization and de-initialization functions\r\n  *  @brief   Initialization and de-initialization functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n             ##### Initialization and de-initialization functions  #####\r\n ===============================================================================\r\n    [..]\r\n    This section provides functions allowing to initialize the DMA Channel source\r\n    and destination addresses, incrementation and data sizes, transfer direction,\r\n    circular/normal mode selection, memory-to-memory mode selection and Channel priority value.\r\n    [..]\r\n    The HAL_DMA_Init() function follows the DMA configuration procedures as described in\r\n    reference manual.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initialize the DMA according to the specified\r\n *         parameters in the DMA_InitTypeDef and initialize the associated handle.\r\n * @param  hdma: Pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) {\r\n  uint32_t tmp = 0U;\r\n\r\n  /* Check the DMA handle allocation */\r\n  if (hdma == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance));\r\n  assert_param(IS_DMA_DIRECTION(hdma->Init.Direction));\r\n  assert_param(IS_DMA_PERIPHERAL_INC_STATE(hdma->Init.PeriphInc));\r\n  assert_param(IS_DMA_MEMORY_INC_STATE(hdma->Init.MemInc));\r\n  assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(hdma->Init.PeriphDataAlignment));\r\n  assert_param(IS_DMA_MEMORY_DATA_SIZE(hdma->Init.MemDataAlignment));\r\n  assert_param(IS_DMA_MODE(hdma->Init.Mode));\r\n  assert_param(IS_DMA_PRIORITY(hdma->Init.Priority));\r\n\r\n#if defined(DMA2)\r\n  /* calculation of the channel index */\r\n  if ((uint32_t)(hdma->Instance) < (uint32_t)(DMA2_Channel1)) {\r\n    /* DMA1 */\r\n    hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2;\r\n    hdma->DmaBaseAddress = DMA1;\r\n  } else {\r\n    /* DMA2 */\r\n    hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA2_Channel1) / ((uint32_t)DMA2_Channel2 - (uint32_t)DMA2_Channel1)) << 2;\r\n    hdma->DmaBaseAddress = DMA2;\r\n  }\r\n#else\r\n  /* DMA1 */\r\n  hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2;\r\n  hdma->DmaBaseAddress = DMA1;\r\n#endif /* DMA2 */\r\n\r\n  /* Change DMA peripheral state */\r\n  hdma->State = HAL_DMA_STATE_BUSY;\r\n\r\n  /* Get the CR register value */\r\n  tmp = hdma->Instance->CCR;\r\n\r\n  /* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC and DIR bits */\r\n  tmp &= ((uint32_t)~(DMA_CCR_PL | DMA_CCR_MSIZE | DMA_CCR_PSIZE | DMA_CCR_MINC | DMA_CCR_PINC | DMA_CCR_CIRC | DMA_CCR_DIR));\r\n\r\n  /* Prepare the DMA Channel configuration */\r\n  tmp |= hdma->Init.Direction | hdma->Init.PeriphInc | hdma->Init.MemInc | hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment | hdma->Init.Mode | hdma->Init.Priority;\r\n\r\n  /* Write to DMA Channel CR register */\r\n  hdma->Instance->CCR = tmp;\r\n\r\n  /* Initialise the error code */\r\n  hdma->ErrorCode = HAL_DMA_ERROR_NONE;\r\n\r\n  /* Initialize the DMA state*/\r\n  hdma->State = HAL_DMA_STATE_READY;\r\n  /* Allocate lock resource and initialize it */\r\n  hdma->Lock = HAL_UNLOCKED;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitialize the DMA peripheral.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma) {\r\n  /* Check the DMA handle allocation */\r\n  if (hdma == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance));\r\n\r\n  /* Disable the selected DMA Channelx */\r\n  __HAL_DMA_DISABLE(hdma);\r\n\r\n  /* Reset DMA Channel control register */\r\n  hdma->Instance->CCR = 0U;\r\n\r\n  /* Reset DMA Channel Number of Data to Transfer register */\r\n  hdma->Instance->CNDTR = 0U;\r\n\r\n  /* Reset DMA Channel peripheral address register */\r\n  hdma->Instance->CPAR = 0U;\r\n\r\n  /* Reset DMA Channel memory address register */\r\n  hdma->Instance->CMAR = 0U;\r\n\r\n#if defined(DMA2)\r\n  /* calculation of the channel index */\r\n  if ((uint32_t)(hdma->Instance) < (uint32_t)(DMA2_Channel1)) {\r\n    /* DMA1 */\r\n    hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2;\r\n    hdma->DmaBaseAddress = DMA1;\r\n  } else {\r\n    /* DMA2 */\r\n    hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA2_Channel1) / ((uint32_t)DMA2_Channel2 - (uint32_t)DMA2_Channel1)) << 2;\r\n    hdma->DmaBaseAddress = DMA2;\r\n  }\r\n#else\r\n  /* DMA1 */\r\n  hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2;\r\n  hdma->DmaBaseAddress = DMA1;\r\n#endif /* DMA2 */\r\n\r\n  /* Clear all flags */\r\n  hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << (hdma->ChannelIndex));\r\n\r\n  /* Clean all callbacks */\r\n  hdma->XferCpltCallback     = NULL;\r\n  hdma->XferHalfCpltCallback = NULL;\r\n  hdma->XferErrorCallback    = NULL;\r\n  hdma->XferAbortCallback    = NULL;\r\n\r\n  /* Reset the error code */\r\n  hdma->ErrorCode = HAL_DMA_ERROR_NONE;\r\n\r\n  /* Reset the DMA state */\r\n  hdma->State = HAL_DMA_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(hdma);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Exported_Functions_Group2 Input and Output operation functions\r\n  *  @brief   Input and Output operation functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                      #####  IO operation functions  #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Configure the source, destination address and data length and Start DMA transfer\r\n      (+) Configure the source, destination address and data length and\r\n          Start DMA transfer with interrupt\r\n      (+) Abort DMA transfer\r\n      (+) Poll for transfer complete\r\n      (+) Handle DMA interrupt request\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Start the DMA Transfer.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @param  SrcAddress: The source memory Buffer address\r\n * @param  DstAddress: The destination memory Buffer address\r\n * @param  DataLength: The length of data to be transferred from source to destination\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_DMA_BUFFER_SIZE(DataLength));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hdma);\r\n\r\n  if (HAL_DMA_STATE_READY == hdma->State) {\r\n    /* Change DMA peripheral state */\r\n    hdma->State     = HAL_DMA_STATE_BUSY;\r\n    hdma->ErrorCode = HAL_DMA_ERROR_NONE;\r\n\r\n    /* Disable the peripheral */\r\n    __HAL_DMA_DISABLE(hdma);\r\n\r\n    /* Configure the source, destination address and the data length & clear flags*/\r\n    DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength);\r\n\r\n    /* Enable the Peripheral */\r\n    __HAL_DMA_ENABLE(hdma);\r\n  } else {\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hdma);\r\n    status = HAL_BUSY;\r\n  }\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Start the DMA Transfer with interrupt enabled.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @param  SrcAddress: The source memory Buffer address\r\n * @param  DstAddress: The destination memory Buffer address\r\n * @param  DataLength: The length of data to be transferred from source to destination\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_DMA_BUFFER_SIZE(DataLength));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hdma);\r\n\r\n  if (HAL_DMA_STATE_READY == hdma->State) {\r\n    /* Change DMA peripheral state */\r\n    hdma->State     = HAL_DMA_STATE_BUSY;\r\n    hdma->ErrorCode = HAL_DMA_ERROR_NONE;\r\n\r\n    /* Disable the peripheral */\r\n    __HAL_DMA_DISABLE(hdma);\r\n\r\n    /* Configure the source, destination address and the data length & clear flags*/\r\n    DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength);\r\n\r\n    /* Enable the transfer complete interrupt */\r\n    /* Enable the transfer Error interrupt */\r\n    if (NULL != hdma->XferHalfCpltCallback) {\r\n      /* Enable the Half transfer complete interrupt as well */\r\n      __HAL_DMA_ENABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));\r\n    } else {\r\n      __HAL_DMA_DISABLE_IT(hdma, DMA_IT_HT);\r\n      __HAL_DMA_ENABLE_IT(hdma, (DMA_IT_TC | DMA_IT_TE));\r\n    }\r\n    /* Enable the Peripheral */\r\n    __HAL_DMA_ENABLE(hdma);\r\n  } else {\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hdma);\r\n\r\n    /* Remain BUSY */\r\n    status = HAL_BUSY;\r\n  }\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Abort the DMA Transfer.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  if (hdma->State != HAL_DMA_STATE_BUSY) {\r\n    /* no transfer ongoing */\r\n    hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hdma);\r\n\r\n    return HAL_ERROR;\r\n  } else\r\n\r\n  {\r\n    /* Disable DMA IT */\r\n    __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));\r\n\r\n    /* Disable the channel */\r\n    __HAL_DMA_DISABLE(hdma);\r\n\r\n    /* Clear all flags */\r\n    hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex);\r\n  }\r\n  /* Change the DMA state */\r\n  hdma->State = HAL_DMA_STATE_READY;\r\n\r\n  /* Process Unlocked */\r\n  __HAL_UNLOCK(hdma);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Aborts the DMA Transfer in Interrupt mode.\r\n * @param  hdma  : pointer to a DMA_HandleTypeDef structure that contains\r\n *                 the configuration information for the specified DMA Channel.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  if (HAL_DMA_STATE_BUSY != hdma->State) {\r\n    /* no transfer ongoing */\r\n    hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;\r\n\r\n    status = HAL_ERROR;\r\n  } else {\r\n    /* Disable DMA IT */\r\n    __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));\r\n\r\n    /* Disable the channel */\r\n    __HAL_DMA_DISABLE(hdma);\r\n\r\n    /* Clear all flags */\r\n    __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_GI_FLAG_INDEX(hdma));\r\n\r\n    /* Change the DMA state */\r\n    hdma->State = HAL_DMA_STATE_READY;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hdma);\r\n\r\n    /* Call User Abort callback */\r\n    if (hdma->XferAbortCallback != NULL) {\r\n      hdma->XferAbortCallback(hdma);\r\n    }\r\n  }\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Polling for transfer complete.\r\n * @param  hdma:    pointer to a DMA_HandleTypeDef structure that contains\r\n *                  the configuration information for the specified DMA Channel.\r\n * @param  CompleteLevel: Specifies the DMA level complete.\r\n * @param  Timeout:       Timeout duration.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout) {\r\n  uint32_t temp;\r\n  uint32_t tickstart = 0U;\r\n\r\n  if (HAL_DMA_STATE_BUSY != hdma->State) {\r\n    /* no transfer ongoing */\r\n    hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;\r\n    __HAL_UNLOCK(hdma);\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Polling mode not supported in circular mode */\r\n  if (RESET != (hdma->Instance->CCR & DMA_CCR_CIRC)) {\r\n    hdma->ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED;\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Get the level transfer complete flag */\r\n  if (CompleteLevel == HAL_DMA_FULL_TRANSFER) {\r\n    /* Transfer Complete flag */\r\n    temp = __HAL_DMA_GET_TC_FLAG_INDEX(hdma);\r\n  } else {\r\n    /* Half Transfer Complete flag */\r\n    temp = __HAL_DMA_GET_HT_FLAG_INDEX(hdma);\r\n  }\r\n\r\n  /* Get tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  while (__HAL_DMA_GET_FLAG(hdma, temp) == RESET) {\r\n    if ((__HAL_DMA_GET_FLAG(hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma)) != RESET)) {\r\n      /* When a DMA transfer error occurs */\r\n      /* A hardware clear of its EN bits is performed */\r\n      /* Clear all flags */\r\n      hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex);\r\n\r\n      /* Update error code */\r\n      SET_BIT(hdma->ErrorCode, HAL_DMA_ERROR_TE);\r\n\r\n      /* Change the DMA state */\r\n      hdma->State = HAL_DMA_STATE_READY;\r\n\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(hdma);\r\n\r\n      return HAL_ERROR;\r\n    }\r\n    /* Check for the Timeout */\r\n    if (Timeout != HAL_MAX_DELAY) {\r\n      if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n        /* Update error code */\r\n        SET_BIT(hdma->ErrorCode, HAL_DMA_ERROR_TIMEOUT);\r\n\r\n        /* Change the DMA state */\r\n        hdma->State = HAL_DMA_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hdma);\r\n\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n  }\r\n\r\n  if (CompleteLevel == HAL_DMA_FULL_TRANSFER) {\r\n    /* Clear the transfer complete flag */\r\n    __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma));\r\n\r\n    /* The selected Channelx EN bit is cleared (DMA is disabled and\r\n    all transfers are complete) */\r\n    hdma->State = HAL_DMA_STATE_READY;\r\n  } else {\r\n    /* Clear the half transfer complete flag */\r\n    __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma));\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hdma);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Handles DMA interrupt request.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @retval None\r\n */\r\nvoid HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma) {\r\n  uint32_t flag_it   = hdma->DmaBaseAddress->ISR;\r\n  uint32_t source_it = hdma->Instance->CCR;\r\n\r\n  /* Half Transfer Complete Interrupt management ******************************/\r\n  if (((flag_it & (DMA_FLAG_HT1 << hdma->ChannelIndex)) != RESET) && ((source_it & DMA_IT_HT) != RESET)) {\r\n    /* Disable the half transfer interrupt if the DMA mode is not CIRCULAR */\r\n    if ((hdma->Instance->CCR & DMA_CCR_CIRC) == 0U) {\r\n      /* Disable the half transfer interrupt */\r\n      __HAL_DMA_DISABLE_IT(hdma, DMA_IT_HT);\r\n    }\r\n    /* Clear the half transfer complete flag */\r\n    __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma));\r\n\r\n    /* DMA peripheral state is not updated in Half Transfer */\r\n    /* but in Transfer Complete case */\r\n\r\n    if (hdma->XferHalfCpltCallback != NULL) {\r\n      /* Half transfer callback */\r\n      hdma->XferHalfCpltCallback(hdma);\r\n    }\r\n  }\r\n\r\n  /* Transfer Complete Interrupt management ***********************************/\r\n  else if (((flag_it & (DMA_FLAG_TC1 << hdma->ChannelIndex)) != RESET) && ((source_it & DMA_IT_TC) != RESET)) {\r\n    if ((hdma->Instance->CCR & DMA_CCR_CIRC) == 0U) {\r\n      /* Disable the transfer complete and error interrupt */\r\n      __HAL_DMA_DISABLE_IT(hdma, DMA_IT_TE | DMA_IT_TC);\r\n\r\n      /* Change the DMA state */\r\n      hdma->State = HAL_DMA_STATE_READY;\r\n    }\r\n    /* Clear the transfer complete flag */\r\n    __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma));\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hdma);\r\n\r\n    if (hdma->XferCpltCallback != NULL) {\r\n      /* Transfer complete callback */\r\n      hdma->XferCpltCallback(hdma);\r\n    }\r\n  }\r\n\r\n  /* Transfer Error Interrupt management **************************************/\r\n  else if ((RESET != (flag_it & (DMA_FLAG_TE1 << hdma->ChannelIndex))) && (RESET != (source_it & DMA_IT_TE))) {\r\n    /* When a DMA transfer error occurs */\r\n    /* A hardware clear of its EN bits is performed */\r\n    /* Disable ALL DMA IT */\r\n    __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));\r\n\r\n    /* Clear all flags */\r\n    hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex);\r\n\r\n    /* Update error code */\r\n    hdma->ErrorCode = HAL_DMA_ERROR_TE;\r\n\r\n    /* Change the DMA state */\r\n    hdma->State = HAL_DMA_STATE_READY;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hdma);\r\n\r\n    if (hdma->XferErrorCallback != NULL) {\r\n      /* Transfer error callback */\r\n      hdma->XferErrorCallback(hdma);\r\n    }\r\n  }\r\n  return;\r\n}\r\n\r\n/**\r\n * @brief Register callbacks\r\n * @param hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *              the configuration information for the specified DMA Channel.\r\n * @param CallbackID: User Callback identifer\r\n *                    a HAL_DMA_CallbackIDTypeDef ENUM as parameter.\r\n * @param pCallback: pointer to private callbacsk function which has pointer to\r\n *                   a DMA_HandleTypeDef structure as parameter.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (*pCallback)(DMA_HandleTypeDef *_hdma)) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hdma);\r\n\r\n  if (HAL_DMA_STATE_READY == hdma->State) {\r\n    switch (CallbackID) {\r\n    case HAL_DMA_XFER_CPLT_CB_ID:\r\n      hdma->XferCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_HALFCPLT_CB_ID:\r\n      hdma->XferHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_ERROR_CB_ID:\r\n      hdma->XferErrorCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_ABORT_CB_ID:\r\n      hdma->XferAbortCallback = pCallback;\r\n      break;\r\n\r\n    default:\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else {\r\n    status = HAL_ERROR;\r\n  }\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(hdma);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief UnRegister callbacks\r\n * @param hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *              the configuration information for the specified DMA Channel.\r\n * @param CallbackID: User Callback identifer\r\n *                    a HAL_DMA_CallbackIDTypeDef ENUM as parameter.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hdma);\r\n\r\n  if (HAL_DMA_STATE_READY == hdma->State) {\r\n    switch (CallbackID) {\r\n    case HAL_DMA_XFER_CPLT_CB_ID:\r\n      hdma->XferCpltCallback = NULL;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_HALFCPLT_CB_ID:\r\n      hdma->XferHalfCpltCallback = NULL;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_ERROR_CB_ID:\r\n      hdma->XferErrorCallback = NULL;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_ABORT_CB_ID:\r\n      hdma->XferAbortCallback = NULL;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_ALL_CB_ID:\r\n      hdma->XferCpltCallback     = NULL;\r\n      hdma->XferHalfCpltCallback = NULL;\r\n      hdma->XferErrorCallback    = NULL;\r\n      hdma->XferAbortCallback    = NULL;\r\n      break;\r\n\r\n    default:\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else {\r\n    status = HAL_ERROR;\r\n  }\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(hdma);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Exported_Functions_Group3 Peripheral State and Errors functions\r\n  *  @brief    Peripheral State and Errors functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n            ##### Peripheral State and Errors functions #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides functions allowing to\r\n      (+) Check the DMA state\r\n      (+) Get error code\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Return the DMA hande state.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @retval HAL state\r\n */\r\nHAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma) {\r\n  /* Return DMA handle state */\r\n  return hdma->State;\r\n}\r\n\r\n/**\r\n * @brief  Return the DMA error code.\r\n * @param  hdma : pointer to a DMA_HandleTypeDef structure that contains\r\n *              the configuration information for the specified DMA Channel.\r\n * @retval DMA Error Code\r\n */\r\nuint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma) { return hdma->ErrorCode; }\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup DMA_Private_Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Sets the DMA Transfer parameter.\r\n * @param  hdma:       pointer to a DMA_HandleTypeDef structure that contains\r\n *                     the configuration information for the specified DMA Channel.\r\n * @param  SrcAddress: The source memory Buffer address\r\n * @param  DstAddress: The destination memory Buffer address\r\n * @param  DataLength: The length of data to be transferred from source to destination\r\n * @retval HAL status\r\n */\r\nstatic void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) {\r\n  /* Clear all flags */\r\n  hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex);\r\n\r\n  /* Configure DMA Channel data length */\r\n  hdma->Instance->CNDTR = DataLength;\r\n\r\n  /* Memory to Peripheral */\r\n  if ((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH) {\r\n    /* Configure DMA Channel destination address */\r\n    hdma->Instance->CPAR = DstAddress;\r\n\r\n    /* Configure DMA Channel source address */\r\n    hdma->Instance->CMAR = SrcAddress;\r\n  }\r\n  /* Peripheral to Memory */\r\n  else {\r\n    /* Configure DMA Channel source address */\r\n    hdma->Instance->CPAR = SrcAddress;\r\n\r\n    /* Configure DMA Channel destination address */\r\n    hdma->Instance->CMAR = DstAddress;\r\n  }\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_DMA_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_exti.c\r\n  * @author  MCD Application Team\r\n  * @brief   EXTI HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the Extended Interrupts and events controller (EXTI) peripheral:\r\n  *           + Initialization and de-initialization functions\r\n  *           + IO operation functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                    ##### EXTI Peripheral features #####\r\n  ==============================================================================\r\n  [..]\r\n    (+) Each Exti line can be configured within this driver.\r\n\r\n    (+) Exti line can be configured in 3 different modes\r\n        (++) Interrupt\r\n        (++) Event\r\n        (++) Both of them\r\n\r\n    (+) Configurable Exti lines can be configured with 3 different triggers\r\n        (++) Rising\r\n        (++) Falling\r\n        (++) Both of them\r\n\r\n    (+) When set in interrupt mode, configurable Exti lines have two different\r\n        interrupts pending registers which allow to distinguish which transition\r\n        occurs:\r\n        (++) Rising edge pending interrupt\r\n        (++) Falling\r\n\r\n    (+) Exti lines 0 to 15 are linked to gpio pin number 0 to 15. Gpio port can\r\n        be selected through multiplexer.\r\n\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..]\r\n\r\n    (#) Configure the EXTI line using HAL_EXTI_SetConfigLine().\r\n        (++) Choose the interrupt line number by setting \"Line\" member from\r\n             EXTI_ConfigTypeDef structure.\r\n        (++) Configure the interrupt and/or event mode using \"Mode\" member from\r\n             EXTI_ConfigTypeDef structure.\r\n        (++) For configurable lines, configure rising and/or falling trigger\r\n             \"Trigger\" member from EXTI_ConfigTypeDef structure.\r\n        (++) For Exti lines linked to gpio, choose gpio port using \"GPIOSel\"\r\n             member from GPIO_InitTypeDef structure.\r\n\r\n    (#) Get current Exti configuration of a dedicated line using\r\n        HAL_EXTI_GetConfigLine().\r\n        (++) Provide exiting handle as parameter.\r\n        (++) Provide pointer on EXTI_ConfigTypeDef structure as second parameter.\r\n\r\n    (#) Clear Exti configuration of a dedicated line using HAL_EXTI_GetConfigLine().\r\n        (++) Provide exiting handle as parameter.\r\n\r\n    (#) Register callback to treat Exti interrupts using HAL_EXTI_RegisterCallback().\r\n        (++) Provide exiting handle as first parameter.\r\n        (++) Provide which callback will be registered using one value from\r\n             EXTI_CallbackIDTypeDef.\r\n        (++) Provide callback function pointer.\r\n\r\n    (#) Get interrupt pending bit using HAL_EXTI_GetPending().\r\n\r\n    (#) Clear interrupt pending bit using HAL_EXTI_GetPending().\r\n\r\n    (#) Generate software interrupt using HAL_EXTI_GenerateSWI().\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup EXTI\r\n * @{\r\n */\r\n/** MISRA C:2012 deviation rule has been granted for following rule:\r\n * Rule-18.1_b - Medium: Array `EXTICR' 1st subscript interval [0,7] may be out\r\n * of bounds [0,3] in following API :\r\n * HAL_EXTI_SetConfigLine\r\n * HAL_EXTI_GetConfigLine\r\n * HAL_EXTI_ClearConfigLine\r\n */\r\n\r\n#ifdef HAL_EXTI_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private defines -----------------------------------------------------------*/\r\n/** @defgroup EXTI_Private_Constants EXTI Private Constants\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macros ------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @addtogroup EXTI_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup EXTI_Exported_Functions_Group1\r\n  *  @brief    Configuration functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n              ##### Configuration functions #####\r\n ===============================================================================\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Set configuration of a dedicated Exti line.\r\n * @param  hexti Exti handle.\r\n * @param  pExtiConfig Pointer on EXTI configuration to be set.\r\n * @retval HAL Status.\r\n */\r\nHAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig) {\r\n  uint32_t regval;\r\n  uint32_t linepos;\r\n  uint32_t maskline;\r\n\r\n  /* Check null pointer */\r\n  if ((hexti == NULL) || (pExtiConfig == NULL)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check parameters */\r\n  assert_param(IS_EXTI_LINE(pExtiConfig->Line));\r\n  assert_param(IS_EXTI_MODE(pExtiConfig->Mode));\r\n\r\n  /* Assign line number to handle */\r\n  hexti->Line = pExtiConfig->Line;\r\n\r\n  /* Compute line mask */\r\n  linepos  = (pExtiConfig->Line & EXTI_PIN_MASK);\r\n  maskline = (1uL << linepos);\r\n\r\n  /* Configure triggers for configurable lines */\r\n  if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u) {\r\n    assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));\r\n\r\n    /* Configure rising trigger */\r\n    /* Mask or set line */\r\n    if ((pExtiConfig->Trigger & EXTI_TRIGGER_RISING) != 0x00u) {\r\n      EXTI->RTSR |= maskline;\r\n    } else {\r\n      EXTI->RTSR &= ~maskline;\r\n    }\r\n\r\n    /* Configure falling trigger */\r\n    /* Mask or set line */\r\n    if ((pExtiConfig->Trigger & EXTI_TRIGGER_FALLING) != 0x00u) {\r\n      EXTI->FTSR |= maskline;\r\n    } else {\r\n      EXTI->FTSR &= ~maskline;\r\n    }\r\n\r\n    /* Configure gpio port selection in case of gpio exti line */\r\n    if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO) {\r\n      assert_param(IS_EXTI_GPIO_PORT(pExtiConfig->GPIOSel));\r\n      assert_param(IS_EXTI_GPIO_PIN(linepos));\r\n\r\n      regval = AFIO->EXTICR[linepos >> 2u];\r\n      regval &= ~(AFIO_EXTICR1_EXTI0 << (AFIO_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));\r\n      regval |= (pExtiConfig->GPIOSel << (AFIO_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));\r\n      AFIO->EXTICR[linepos >> 2u] = regval;\r\n    }\r\n  }\r\n\r\n  /* Configure interrupt mode : read current mode */\r\n  /* Mask or set line */\r\n  if ((pExtiConfig->Mode & EXTI_MODE_INTERRUPT) != 0x00u) {\r\n    EXTI->IMR |= maskline;\r\n  } else {\r\n    EXTI->IMR &= ~maskline;\r\n  }\r\n\r\n  /* Configure event mode : read current mode */\r\n  /* Mask or set line */\r\n  if ((pExtiConfig->Mode & EXTI_MODE_EVENT) != 0x00u) {\r\n    EXTI->EMR |= maskline;\r\n  } else {\r\n    EXTI->EMR &= ~maskline;\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Get configuration of a dedicated Exti line.\r\n * @param  hexti Exti handle.\r\n * @param  pExtiConfig Pointer on structure to store Exti configuration.\r\n * @retval HAL Status.\r\n */\r\nHAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig) {\r\n  uint32_t regval;\r\n  uint32_t linepos;\r\n  uint32_t maskline;\r\n\r\n  /* Check null pointer */\r\n  if ((hexti == NULL) || (pExtiConfig == NULL)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameter */\r\n  assert_param(IS_EXTI_LINE(hexti->Line));\r\n\r\n  /* Store handle line number to configuration structure */\r\n  pExtiConfig->Line = hexti->Line;\r\n\r\n  /* Compute line mask */\r\n  linepos  = (pExtiConfig->Line & EXTI_PIN_MASK);\r\n  maskline = (1uL << linepos);\r\n\r\n  /* 1] Get core mode : interrupt */\r\n\r\n  /* Check if selected line is enable */\r\n  if ((EXTI->IMR & maskline) != 0x00u) {\r\n    pExtiConfig->Mode = EXTI_MODE_INTERRUPT;\r\n  } else {\r\n    pExtiConfig->Mode = EXTI_MODE_NONE;\r\n  }\r\n\r\n  /* Get event mode */\r\n  /* Check if selected line is enable */\r\n  if ((EXTI->EMR & maskline) != 0x00u) {\r\n    pExtiConfig->Mode |= EXTI_MODE_EVENT;\r\n  }\r\n\r\n  /* 2] Get trigger for configurable lines : rising */\r\n  if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u) {\r\n    /* Check if configuration of selected line is enable */\r\n    if ((EXTI->RTSR & maskline) != 0x00u) {\r\n      pExtiConfig->Trigger = EXTI_TRIGGER_RISING;\r\n    } else {\r\n      pExtiConfig->Trigger = EXTI_TRIGGER_NONE;\r\n    }\r\n\r\n    /* Get falling configuration */\r\n    /* Check if configuration of selected line is enable */\r\n    if ((EXTI->FTSR & maskline) != 0x00u) {\r\n      pExtiConfig->Trigger |= EXTI_TRIGGER_FALLING;\r\n    }\r\n\r\n    /* Get Gpio port selection for gpio lines */\r\n    if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO) {\r\n      assert_param(IS_EXTI_GPIO_PIN(linepos));\r\n\r\n      regval               = AFIO->EXTICR[linepos >> 2u];\r\n      pExtiConfig->GPIOSel = ((regval << (AFIO_EXTICR1_EXTI1_Pos * (3uL - (linepos & 0x03u)))) >> 24);\r\n    } else {\r\n      pExtiConfig->GPIOSel = 0x00u;\r\n    }\r\n  } else {\r\n    /* No Trigger selected */\r\n    pExtiConfig->Trigger = EXTI_TRIGGER_NONE;\r\n    pExtiConfig->GPIOSel = 0x00u;\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Clear whole configuration of a dedicated Exti line.\r\n * @param  hexti Exti handle.\r\n * @retval HAL Status.\r\n */\r\nHAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti) {\r\n  uint32_t regval;\r\n  uint32_t linepos;\r\n  uint32_t maskline;\r\n\r\n  /* Check null pointer */\r\n  if (hexti == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameter */\r\n  assert_param(IS_EXTI_LINE(hexti->Line));\r\n\r\n  /* compute line mask */\r\n  linepos  = (hexti->Line & EXTI_PIN_MASK);\r\n  maskline = (1uL << linepos);\r\n\r\n  /* 1] Clear interrupt mode */\r\n  EXTI->IMR = (EXTI->IMR & ~maskline);\r\n\r\n  /* 2] Clear event mode */\r\n  EXTI->EMR = (EXTI->EMR & ~maskline);\r\n\r\n  /* 3] Clear triggers in case of configurable lines */\r\n  if ((hexti->Line & EXTI_CONFIG) != 0x00u) {\r\n    EXTI->RTSR = (EXTI->RTSR & ~maskline);\r\n    EXTI->FTSR = (EXTI->FTSR & ~maskline);\r\n\r\n    /* Get Gpio port selection for gpio lines */\r\n    if ((hexti->Line & EXTI_GPIO) == EXTI_GPIO) {\r\n      assert_param(IS_EXTI_GPIO_PIN(linepos));\r\n\r\n      regval = AFIO->EXTICR[linepos >> 2u];\r\n      regval &= ~(AFIO_EXTICR1_EXTI0 << (AFIO_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));\r\n      AFIO->EXTICR[linepos >> 2u] = regval;\r\n    }\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Register callback for a dedicated Exti line.\r\n * @param  hexti Exti handle.\r\n * @param  CallbackID User callback identifier.\r\n *         This parameter can be one of @arg @ref EXTI_CallbackIDTypeDef values.\r\n * @param  pPendingCbfn function pointer to be stored as callback.\r\n * @retval HAL Status.\r\n */\r\nHAL_StatusTypeDef HAL_EXTI_RegisterCallback(EXTI_HandleTypeDef *hexti, EXTI_CallbackIDTypeDef CallbackID, void (*pPendingCbfn)(void)) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  switch (CallbackID) {\r\n  case HAL_EXTI_COMMON_CB_ID:\r\n    hexti->PendingCallback = pPendingCbfn;\r\n    break;\r\n\r\n  default:\r\n    status = HAL_ERROR;\r\n    break;\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Store line number as handle private field.\r\n * @param  hexti Exti handle.\r\n * @param  ExtiLine Exti line number.\r\n *         This parameter can be from 0 to @ref EXTI_LINE_NB.\r\n * @retval HAL Status.\r\n */\r\nHAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLine) {\r\n  /* Check the parameters */\r\n  assert_param(IS_EXTI_LINE(ExtiLine));\r\n\r\n  /* Check null pointer */\r\n  if (hexti == NULL) {\r\n    return HAL_ERROR;\r\n  } else {\r\n    /* Store line number as handle private field */\r\n    hexti->Line = ExtiLine;\r\n\r\n    return HAL_OK;\r\n  }\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup EXTI_Exported_Functions_Group2\r\n  *  @brief EXTI IO functions.\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                       ##### IO operation functions #####\r\n ===============================================================================\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Handle EXTI interrupt request.\r\n * @param  hexti Exti handle.\r\n * @retval none.\r\n */\r\nvoid HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti) {\r\n  uint32_t regval;\r\n  uint32_t maskline;\r\n\r\n  /* Compute line mask */\r\n  maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));\r\n\r\n  /* Get pending bit  */\r\n  regval = (EXTI->PR & maskline);\r\n  if (regval != 0x00u) {\r\n    /* Clear pending bit */\r\n    EXTI->PR = maskline;\r\n\r\n    /* Call callback */\r\n    if (hexti->PendingCallback != NULL) {\r\n      hexti->PendingCallback();\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Get interrupt pending bit of a dedicated line.\r\n * @param  hexti Exti handle.\r\n * @param  Edge Specify which pending edge as to be checked.\r\n *         This parameter can be one of the following values:\r\n *           @arg @ref EXTI_TRIGGER_RISING_FALLING\r\n *         This parameter is kept for compatibility with other series.\r\n * @retval 1 if interrupt is pending else 0.\r\n */\r\nuint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge) {\r\n  uint32_t regval;\r\n  uint32_t maskline;\r\n  uint32_t linepos;\r\n\r\n  /* Check parameters */\r\n  assert_param(IS_EXTI_LINE(hexti->Line));\r\n  assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));\r\n  assert_param(IS_EXTI_PENDING_EDGE(Edge));\r\n\r\n  /* Compute line mask */\r\n  linepos  = (hexti->Line & EXTI_PIN_MASK);\r\n  maskline = (1uL << linepos);\r\n\r\n  /* return 1 if bit is set else 0 */\r\n  regval = ((EXTI->PR & maskline) >> linepos);\r\n  return regval;\r\n}\r\n\r\n/**\r\n * @brief  Clear interrupt pending bit of a dedicated line.\r\n * @param  hexti Exti handle.\r\n * @param  Edge Specify which pending edge as to be clear.\r\n *         This parameter can be one of the following values:\r\n *           @arg @ref EXTI_TRIGGER_RISING_FALLING\r\n *         This parameter is kept for compatibility with other series.\r\n * @retval None.\r\n */\r\nvoid HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge) {\r\n  uint32_t maskline;\r\n\r\n  /* Check parameters */\r\n  assert_param(IS_EXTI_LINE(hexti->Line));\r\n  assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));\r\n  assert_param(IS_EXTI_PENDING_EDGE(Edge));\r\n\r\n  /* Compute line mask */\r\n  maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));\r\n\r\n  /* Clear Pending bit */\r\n  EXTI->PR = maskline;\r\n}\r\n\r\n/**\r\n * @brief  Generate a software interrupt for a dedicated line.\r\n * @param  hexti Exti handle.\r\n * @retval None.\r\n */\r\nvoid HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti) {\r\n  uint32_t maskline;\r\n\r\n  /* Check parameters */\r\n  assert_param(IS_EXTI_LINE(hexti->Line));\r\n  assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));\r\n\r\n  /* Compute line mask */\r\n  maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));\r\n\r\n  /* Generate Software interrupt */\r\n  EXTI->SWIER = maskline;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_EXTI_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_flash.c\r\n  * @author  MCD Application Team\r\n  * @brief   FLASH HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the internal FLASH memory:\r\n  *           + Program operations functions\r\n  *           + Memory Control functions\r\n  *           + Peripheral State functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                        ##### FLASH peripheral features #####\r\n  ==============================================================================\r\n  [..] The Flash memory interface manages CPU AHB I-Code and D-Code accesses\r\n       to the Flash memory. It implements the erase and program Flash memory operations\r\n       and the read and write protection mechanisms.\r\n\r\n  [..] The Flash memory interface accelerates code execution with a system of instruction\r\n      prefetch.\r\n\r\n  [..] The FLASH main features are:\r\n      (+) Flash memory read operations\r\n      (+) Flash memory program/erase operations\r\n      (+) Read / write protections\r\n      (+) Prefetch on I-Code\r\n      (+) Option Bytes programming\r\n\r\n\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..]\r\n      This driver provides functions and macros to configure and program the FLASH\r\n      memory of all STM32F1xx devices.\r\n\r\n      (#) FLASH Memory I/O Programming functions: this group includes all needed\r\n          functions to erase and program the main memory:\r\n        (++) Lock and Unlock the FLASH interface\r\n        (++) Erase function: Erase page, erase all pages\r\n        (++) Program functions: half word, word and doubleword\r\n      (#) FLASH Option Bytes Programming functions: this group includes all needed\r\n          functions to manage the Option Bytes:\r\n        (++) Lock and Unlock the Option Bytes\r\n        (++) Set/Reset the write protection\r\n        (++) Set the Read protection Level\r\n        (++) Program the user Option Bytes\r\n        (++) Launch the Option Bytes loader\r\n        (++) Erase Option Bytes\r\n        (++) Program the data Option Bytes\r\n        (++) Get the Write protection.\r\n        (++) Get the user option bytes.\r\n\r\n      (#) Interrupts and flags management functions : this group\r\n          includes all needed functions to:\r\n        (++) Handle FLASH interrupts\r\n        (++) Wait for last FLASH operation according to its status\r\n        (++) Get error flag status\r\n\r\n  [..] In addition to these function, this driver includes a set of macros allowing\r\n       to handle the following operations:\r\n\r\n      (+) Set/Get the latency\r\n      (+) Enable/Disable the prefetch buffer\r\n      (+) Enable/Disable the half cycle access\r\n      (+) Enable/Disable the FLASH interrupts\r\n      (+) Monitor the FLASH flags status\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_FLASH_MODULE_ENABLED\r\n\r\n/** @defgroup FLASH FLASH\r\n * @brief FLASH HAL module driver\r\n * @{\r\n */\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup FLASH_Private_Constants FLASH Private Constants\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro ---------------------------- ---------------------------------*/\r\n/** @defgroup FLASH_Private_Macros FLASH Private Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private variables ---------------------------------------------------------*/\r\n/** @defgroup FLASH_Private_Variables FLASH Private Variables\r\n * @{\r\n */\r\n/* Variables used for Erase pages under interruption*/\r\nFLASH_ProcessTypeDef pFlash;\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @defgroup FLASH_Private_Functions FLASH Private Functions\r\n * @{\r\n */\r\nstatic void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data);\r\nstatic void FLASH_SetErrorCode(void);\r\nextern void FLASH_PageErase(uint32_t PageAddress);\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions ---------------------------------------------------------*/\r\n/** @defgroup FLASH_Exported_Functions FLASH Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASH_Exported_Functions_Group1 Programming operation functions\r\n  *  @brief   Programming operation functions\r\n  *\r\n@verbatim\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Program halfword, word or double word at a specified address\r\n * @note   The function HAL_FLASH_Unlock() should be called before to unlock the FLASH interface\r\n *         The function HAL_FLASH_Lock() should be called after to lock the FLASH interface\r\n *\r\n * @note   If an erase and a program operations are requested simultaneously,\r\n *         the erase operation is performed before the program one.\r\n *\r\n * @note   FLASH should be previously erased before new programmation (only exception to this\r\n *         is when 0x0000 is programmed)\r\n *\r\n * @param  TypeProgram:  Indicate the way to program at a specified address.\r\n *                       This parameter can be a value of @ref FLASH_Type_Program\r\n * @param  Address:      Specifies the address to be programmed.\r\n * @param  Data:         Specifies the data to be programmed\r\n *\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data) {\r\n  HAL_StatusTypeDef status       = HAL_ERROR;\r\n  uint8_t           index        = 0;\r\n  uint8_t           nbiterations = 0;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(&pFlash);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));\r\n  assert_param(IS_FLASH_PROGRAM_ADDRESS(Address));\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  if (Address <= FLASH_BANK1_END) {\r\n#endif /* FLASH_BANK2_END */\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);\r\n#if defined(FLASH_BANK2_END)\r\n  } else {\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperationBank2(FLASH_TIMEOUT_VALUE);\r\n  }\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  if (status == HAL_OK) {\r\n    if (TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) {\r\n      /* Program halfword (16-bit) at a specified address. */\r\n      nbiterations = 1U;\r\n    } else if (TypeProgram == FLASH_TYPEPROGRAM_WORD) {\r\n      /* Program word (32-bit = 2*16-bit) at a specified address. */\r\n      nbiterations = 2U;\r\n    } else {\r\n      /* Program double word (64-bit = 4*16-bit) at a specified address. */\r\n      nbiterations = 4U;\r\n    }\r\n\r\n    for (index = 0U; index < nbiterations; index++) {\r\n      FLASH_Program_HalfWord((Address + (2U * index)), (uint16_t)(Data >> (16U * index)));\r\n\r\n#if defined(FLASH_BANK2_END)\r\n      if (Address <= FLASH_BANK1_END) {\r\n#endif /* FLASH_BANK2_END */\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);\r\n\r\n        /* If the program operation is completed, disable the PG Bit */\r\n        CLEAR_BIT(FLASH->CR, FLASH_CR_PG);\r\n#if defined(FLASH_BANK2_END)\r\n      } else {\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperationBank2(FLASH_TIMEOUT_VALUE);\r\n\r\n        /* If the program operation is completed, disable the PG Bit */\r\n        CLEAR_BIT(FLASH->CR2, FLASH_CR2_PG);\r\n      }\r\n#endif /* FLASH_BANK2_END */\r\n      /* In case of error, stop programation procedure */\r\n      if (status != HAL_OK) {\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Process Unlocked */\r\n  __HAL_UNLOCK(&pFlash);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Program halfword, word or double word at a specified address  with interrupt enabled.\r\n * @note   The function HAL_FLASH_Unlock() should be called before to unlock the FLASH interface\r\n *         The function HAL_FLASH_Lock() should be called after to lock the FLASH interface\r\n *\r\n * @note   If an erase and a program operations are requested simultaneously,\r\n *         the erase operation is performed before the program one.\r\n *\r\n * @param  TypeProgram: Indicate the way to program at a specified address.\r\n *                      This parameter can be a value of @ref FLASH_Type_Program\r\n * @param  Address:     Specifies the address to be programmed.\r\n * @param  Data:        Specifies the data to be programmed\r\n *\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(&pFlash);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));\r\n  assert_param(IS_FLASH_PROGRAM_ADDRESS(Address));\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  /* If procedure already ongoing, reject the next one */\r\n  if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  if (Address <= FLASH_BANK1_END) {\r\n    /* Enable End of FLASH Operation and Error source interrupts */\r\n    __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP_BANK1 | FLASH_IT_ERR_BANK1);\r\n\r\n  } else {\r\n    /* Enable End of FLASH Operation and Error source interrupts */\r\n    __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP_BANK2 | FLASH_IT_ERR_BANK2);\r\n  }\r\n#else\r\n  /* Enable End of FLASH Operation and Error source interrupts */\r\n  __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR);\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  pFlash.Address = Address;\r\n  pFlash.Data    = Data;\r\n\r\n  if (TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) {\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMHALFWORD;\r\n    /* Program halfword (16-bit) at a specified address. */\r\n    pFlash.DataRemaining = 1U;\r\n  } else if (TypeProgram == FLASH_TYPEPROGRAM_WORD) {\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMWORD;\r\n    /* Program word (32-bit : 2*16-bit) at a specified address. */\r\n    pFlash.DataRemaining = 2U;\r\n  } else {\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMDOUBLEWORD;\r\n    /* Program double word (64-bit : 4*16-bit) at a specified address. */\r\n    pFlash.DataRemaining = 4U;\r\n  }\r\n\r\n  /* Program halfword (16-bit) at a specified address. */\r\n  FLASH_Program_HalfWord(Address, (uint16_t)Data);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief This function handles FLASH interrupt request.\r\n * @retval None\r\n */\r\nvoid HAL_FLASH_IRQHandler(void) {\r\n  uint32_t addresstmp = 0U;\r\n\r\n  /* Check FLASH operation error flags */\r\n#if defined(FLASH_BANK2_END)\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR_BANK1) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR_BANK1) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR_BANK2) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR_BANK2)))\r\n#else\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR))\r\n#endif /* FLASH_BANK2_END */\r\n  {\r\n    /* Return the faulty address */\r\n    addresstmp = pFlash.Address;\r\n    /* Reset address */\r\n    pFlash.Address = 0xFFFFFFFFU;\r\n\r\n    /* Save the Error code */\r\n    FLASH_SetErrorCode();\r\n\r\n    /* FLASH error interrupt user callback */\r\n    HAL_FLASH_OperationErrorCallback(addresstmp);\r\n\r\n    /* Stop the procedure ongoing */\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n  }\r\n\r\n  /* Check FLASH End of Operation flag  */\r\n#if defined(FLASH_BANK2_END)\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP_BANK1)) {\r\n    /* Clear FLASH End of Operation pending bit */\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP_BANK1);\r\n#else\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP)) {\r\n    /* Clear FLASH End of Operation pending bit */\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);\r\n#endif /* FLASH_BANK2_END */\r\n\r\n    /* Process can continue only if no error detected */\r\n    if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE) {\r\n      if (pFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE) {\r\n        /* Nb of pages to erased can be decreased */\r\n        pFlash.DataRemaining--;\r\n\r\n        /* Check if there are still pages to erase */\r\n        if (pFlash.DataRemaining != 0U) {\r\n          addresstmp = pFlash.Address;\r\n          /*Indicate user which sector has been erased */\r\n          HAL_FLASH_EndOfOperationCallback(addresstmp);\r\n\r\n          /*Increment sector number*/\r\n          addresstmp     = pFlash.Address + FLASH_PAGE_SIZE;\r\n          pFlash.Address = addresstmp;\r\n\r\n          /* If the erase operation is completed, disable the PER Bit */\r\n          CLEAR_BIT(FLASH->CR, FLASH_CR_PER);\r\n\r\n          FLASH_PageErase(addresstmp);\r\n        } else {\r\n          /* No more pages to Erase, user callback can be called. */\r\n          /* Reset Sector and stop Erase pages procedure */\r\n          pFlash.Address = addresstmp = 0xFFFFFFFFU;\r\n          pFlash.ProcedureOnGoing     = FLASH_PROC_NONE;\r\n          /* FLASH EOP interrupt user callback */\r\n          HAL_FLASH_EndOfOperationCallback(addresstmp);\r\n        }\r\n      } else if (pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) {\r\n        /* Operation is completed, disable the MER Bit */\r\n        CLEAR_BIT(FLASH->CR, FLASH_CR_MER);\r\n\r\n#if defined(FLASH_BANK2_END)\r\n        /* Stop Mass Erase procedure if no pending mass erase on other bank */\r\n        if (HAL_IS_BIT_CLR(FLASH->CR2, FLASH_CR2_MER)) {\r\n#endif /* FLASH_BANK2_END */\r\n          /* MassErase ended. Return the selected bank */\r\n          /* FLASH EOP interrupt user callback */\r\n          HAL_FLASH_EndOfOperationCallback(0U);\r\n\r\n          /* Stop Mass Erase procedure*/\r\n          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n        }\r\n#if defined(FLASH_BANK2_END)\r\n      }\r\n#endif /* FLASH_BANK2_END */\r\n      else {\r\n        /* Nb of 16-bit data to program can be decreased */\r\n        pFlash.DataRemaining--;\r\n\r\n        /* Check if there are still 16-bit data to program */\r\n        if (pFlash.DataRemaining != 0U) {\r\n          /* Increment address to 16-bit */\r\n          pFlash.Address += 2U;\r\n          addresstmp = pFlash.Address;\r\n\r\n          /* Shift to have next 16-bit data */\r\n          pFlash.Data = (pFlash.Data >> 16U);\r\n\r\n          /* Operation is completed, disable the PG Bit */\r\n          CLEAR_BIT(FLASH->CR, FLASH_CR_PG);\r\n\r\n          /*Program halfword (16-bit) at a specified address.*/\r\n          FLASH_Program_HalfWord(addresstmp, (uint16_t)pFlash.Data);\r\n        } else {\r\n          /* Program ended. Return the selected address */\r\n          /* FLASH EOP interrupt user callback */\r\n          if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMHALFWORD) {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address);\r\n          } else if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMWORD) {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address - 2U);\r\n          } else {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address - 6U);\r\n          }\r\n\r\n          /* Reset Address and stop Program procedure */\r\n          pFlash.Address          = 0xFFFFFFFFU;\r\n          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  /* Check FLASH End of Operation flag  */\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP_BANK2)) {\r\n    /* Clear FLASH End of Operation pending bit */\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP_BANK2);\r\n\r\n    /* Process can continue only if no error detected */\r\n    if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE) {\r\n      if (pFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE) {\r\n        /* Nb of pages to erased can be decreased */\r\n        pFlash.DataRemaining--;\r\n\r\n        /* Check if there are still pages to erase*/\r\n        if (pFlash.DataRemaining != 0U) {\r\n          /* Indicate user which page address has been erased*/\r\n          HAL_FLASH_EndOfOperationCallback(pFlash.Address);\r\n\r\n          /* Increment page address to next page */\r\n          pFlash.Address += FLASH_PAGE_SIZE;\r\n          addresstmp = pFlash.Address;\r\n\r\n          /* Operation is completed, disable the PER Bit */\r\n          CLEAR_BIT(FLASH->CR2, FLASH_CR2_PER);\r\n\r\n          FLASH_PageErase(addresstmp);\r\n        } else {\r\n          /*No more pages to Erase*/\r\n\r\n          /*Reset Address and stop Erase pages procedure*/\r\n          pFlash.Address          = 0xFFFFFFFFU;\r\n          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n\r\n          /* FLASH EOP interrupt user callback */\r\n          HAL_FLASH_EndOfOperationCallback(pFlash.Address);\r\n        }\r\n      } else if (pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) {\r\n        /* Operation is completed, disable the MER Bit */\r\n        CLEAR_BIT(FLASH->CR2, FLASH_CR2_MER);\r\n\r\n        if (HAL_IS_BIT_CLR(FLASH->CR, FLASH_CR_MER)) {\r\n          /* MassErase ended. Return the selected bank*/\r\n          /* FLASH EOP interrupt user callback */\r\n          HAL_FLASH_EndOfOperationCallback(0U);\r\n\r\n          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n        }\r\n      } else {\r\n        /* Nb of 16-bit data to program can be decreased */\r\n        pFlash.DataRemaining--;\r\n\r\n        /* Check if there are still 16-bit data to program */\r\n        if (pFlash.DataRemaining != 0U) {\r\n          /* Increment address to 16-bit */\r\n          pFlash.Address += 2U;\r\n          addresstmp = pFlash.Address;\r\n\r\n          /* Shift to have next 16-bit data */\r\n          pFlash.Data = (pFlash.Data >> 16U);\r\n\r\n          /* Operation is completed, disable the PG Bit */\r\n          CLEAR_BIT(FLASH->CR2, FLASH_CR2_PG);\r\n\r\n          /*Program halfword (16-bit) at a specified address.*/\r\n          FLASH_Program_HalfWord(addresstmp, (uint16_t)pFlash.Data);\r\n        } else {\r\n          /*Program ended. Return the selected address*/\r\n          /* FLASH EOP interrupt user callback */\r\n          if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMHALFWORD) {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address);\r\n          } else if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMWORD) {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address - 2U);\r\n          } else {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address - 6U);\r\n          }\r\n\r\n          /* Reset Address and stop Program procedure*/\r\n          pFlash.Address          = 0xFFFFFFFFU;\r\n          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n        }\r\n      }\r\n    }\r\n  }\r\n#endif\r\n\r\n  if (pFlash.ProcedureOnGoing == FLASH_PROC_NONE) {\r\n#if defined(FLASH_BANK2_END)\r\n    /* Operation is completed, disable the PG, PER and MER Bits for both bank */\r\n    CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_PER | FLASH_CR_MER));\r\n    CLEAR_BIT(FLASH->CR2, (FLASH_CR2_PG | FLASH_CR2_PER | FLASH_CR2_MER));\r\n\r\n    /* Disable End of FLASH Operation and Error source interrupts for both banks */\r\n    __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP_BANK1 | FLASH_IT_ERR_BANK1 | FLASH_IT_EOP_BANK2 | FLASH_IT_ERR_BANK2);\r\n#else\r\n    /* Operation is completed, disable the PG, PER and MER Bits */\r\n    CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_PER | FLASH_CR_MER));\r\n\r\n    /* Disable End of FLASH Operation and Error source interrupts */\r\n    __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR);\r\n#endif /* FLASH_BANK2_END */\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(&pFlash);\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  FLASH end of operation interrupt callback\r\n * @param  ReturnValue: The value saved in this parameter depends on the ongoing procedure\r\n *                 - Mass Erase: No return value expected\r\n *                 - Pages Erase: Address of the page which has been erased\r\n *                    (if 0xFFFFFFFF, it means that all the selected pages have been erased)\r\n *                 - Program: Address which was selected for data program\r\n * @retval none\r\n */\r\n__weak void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(ReturnValue);\r\n\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_FLASH_EndOfOperationCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  FLASH operation error interrupt callback\r\n * @param  ReturnValue: The value saved in this parameter depends on the ongoing procedure\r\n *                 - Mass Erase: No return value expected\r\n *                 - Pages Erase: Address of the page which returned an error\r\n *                 - Program: Address which was selected for data program\r\n * @retval none\r\n */\r\n__weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(ReturnValue);\r\n\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_FLASH_OperationErrorCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASH_Exported_Functions_Group2 Peripheral Control functions\r\n *  @brief   management functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### Peripheral Control functions #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the FLASH\r\n    memory operations.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Unlock the FLASH control register access\r\n * @retval HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_Unlock(void) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  if (READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) {\r\n    /* Authorize the FLASH Registers access */\r\n    WRITE_REG(FLASH->KEYR, FLASH_KEY1);\r\n    WRITE_REG(FLASH->KEYR, FLASH_KEY2);\r\n\r\n    /* Verify Flash is unlocked */\r\n    if (READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) {\r\n      status = HAL_ERROR;\r\n    }\r\n  }\r\n#if defined(FLASH_BANK2_END)\r\n  if (READ_BIT(FLASH->CR2, FLASH_CR2_LOCK) != RESET) {\r\n    /* Authorize the FLASH BANK2 Registers access */\r\n    WRITE_REG(FLASH->KEYR2, FLASH_KEY1);\r\n    WRITE_REG(FLASH->KEYR2, FLASH_KEY2);\r\n\r\n    /* Verify Flash BANK2 is unlocked */\r\n    if (READ_BIT(FLASH->CR2, FLASH_CR2_LOCK) != RESET) {\r\n      status = HAL_ERROR;\r\n    }\r\n  }\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Locks the FLASH control register access\r\n * @retval HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_Lock(void) {\r\n  /* Set the LOCK Bit to lock the FLASH Registers access */\r\n  SET_BIT(FLASH->CR, FLASH_CR_LOCK);\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  /* Set the LOCK Bit to lock the FLASH BANK2 Registers access */\r\n  SET_BIT(FLASH->CR2, FLASH_CR2_LOCK);\r\n\r\n#endif /* FLASH_BANK2_END */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Unlock the FLASH Option Control Registers access.\r\n * @retval HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_OB_Unlock(void) {\r\n  if (HAL_IS_BIT_CLR(FLASH->CR, FLASH_CR_OPTWRE)) {\r\n    /* Authorizes the Option Byte register programming */\r\n    WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY1);\r\n    WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY2);\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Lock the FLASH Option Control Registers access.\r\n * @retval HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_OB_Lock(void) {\r\n  /* Clear the OPTWRE Bit to lock the FLASH Option Byte Registers access */\r\n  CLEAR_BIT(FLASH->CR, FLASH_CR_OPTWRE);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Launch the option byte loading.\r\n * @note   This function will reset automatically the MCU.\r\n * @retval None\r\n */\r\nvoid HAL_FLASH_OB_Launch(void) {\r\n  /* Initiates a system reset request to launch the option byte loading */\r\n  HAL_NVIC_SystemReset();\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASH_Exported_Functions_Group3 Peripheral errors functions\r\n *  @brief    Peripheral errors functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### Peripheral Errors functions #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection permit to get in run-time errors of  the FLASH peripheral.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Get the specific FLASH error flag.\r\n * @retval FLASH_ErrorCode The returned value can be:\r\n *            @ref FLASH_Error_Codes\r\n */\r\nuint32_t HAL_FLASH_GetError(void) { return pFlash.ErrorCode; }\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASH_Private_Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Program a half-word (16-bit) at a specified address.\r\n * @param  Address specify the address to be programmed.\r\n * @param  Data    specify the data to be programmed.\r\n * @retval None\r\n */\r\nstatic void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data) {\r\n  /* Clean the error context */\r\n  pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  if (Address <= FLASH_BANK1_END) {\r\n#endif /* FLASH_BANK2_END */\r\n    /* Proceed to program the new data */\r\n    SET_BIT(FLASH->CR, FLASH_CR_PG);\r\n#if defined(FLASH_BANK2_END)\r\n  } else {\r\n    /* Proceed to program the new data */\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_PG);\r\n  }\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  /* Write data in the address */\r\n  *(__IO uint16_t *)Address = Data;\r\n}\r\n\r\n/**\r\n * @brief  Wait for a FLASH operation to complete.\r\n * @param  Timeout  maximum flash operation timeout\r\n * @retval HAL Status\r\n */\r\nHAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout) {\r\n  /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset.\r\n     Even if the FLASH operation fails, the BUSY flag will be reset and an error\r\n     flag will be set */\r\n\r\n  uint32_t tickstart = HAL_GetTick();\r\n\r\n  while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) {\r\n    if (Timeout != HAL_MAX_DELAY) {\r\n      if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Check FLASH End of Operation flag  */\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP)) {\r\n    /* Clear FLASH End of Operation pending bit */\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);\r\n  }\r\n\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR)) {\r\n    /*Save the error code*/\r\n    FLASH_SetErrorCode();\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* There is no error flag set */\r\n  return HAL_OK;\r\n}\r\n\r\n#if defined(FLASH_BANK2_END)\r\n/**\r\n * @brief  Wait for a FLASH BANK2 operation to complete.\r\n * @param  Timeout maximum flash operation timeout\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef FLASH_WaitForLastOperationBank2(uint32_t Timeout) {\r\n  /* Wait for the FLASH BANK2 operation to complete by polling on BUSY flag to be reset.\r\n     Even if the FLASH BANK2 operation fails, the BUSY flag will be reset and an error\r\n     flag will be set */\r\n\r\n  uint32_t tickstart = HAL_GetTick();\r\n\r\n  while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY_BANK2)) {\r\n    if (Timeout != HAL_MAX_DELAY) {\r\n      if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Check FLASH End of Operation flag  */\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP_BANK2)) {\r\n    /* Clear FLASH End of Operation pending bit */\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP_BANK2);\r\n  }\r\n\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR_BANK2) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR_BANK2)) {\r\n    /*Save the error code*/\r\n    FLASH_SetErrorCode();\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* If there is an error flag set */\r\n  return HAL_OK;\r\n}\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/**\r\n * @brief  Set the specific FLASH error flag.\r\n * @retval None\r\n */\r\nstatic void FLASH_SetErrorCode(void) {\r\n  uint32_t flags = 0U;\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR_BANK2))\r\n#else\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR))\r\n#endif /* FLASH_BANK2_END */\r\n  {\r\n    pFlash.ErrorCode |= HAL_FLASH_ERROR_WRP;\r\n#if defined(FLASH_BANK2_END)\r\n    flags |= FLASH_FLAG_WRPERR | FLASH_FLAG_WRPERR_BANK2;\r\n#else\r\n    flags |= FLASH_FLAG_WRPERR;\r\n#endif /* FLASH_BANK2_END */\r\n  }\r\n#if defined(FLASH_BANK2_END)\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR_BANK2))\r\n#else\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR))\r\n#endif /* FLASH_BANK2_END */\r\n  {\r\n    pFlash.ErrorCode |= HAL_FLASH_ERROR_PROG;\r\n#if defined(FLASH_BANK2_END)\r\n    flags |= FLASH_FLAG_PGERR | FLASH_FLAG_PGERR_BANK2;\r\n#else\r\n    flags |= FLASH_FLAG_PGERR;\r\n#endif /* FLASH_BANK2_END */\r\n  }\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR)) {\r\n    pFlash.ErrorCode |= HAL_FLASH_ERROR_OPTV;\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);\r\n  }\r\n\r\n  /* Clear FLASH error pending bits */\r\n  __HAL_FLASH_CLEAR_FLAG(flags);\r\n}\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_FLASH_MODULE_ENABLED */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_flash_ex.c\r\n  * @author  MCD Application Team\r\n  * @brief   Extended FLASH HAL module driver.\r\n  *\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the FLASH peripheral:\r\n  *           + Extended Initialization/de-initialization functions\r\n  *           + Extended I/O operation functions\r\n  *           + Extended Peripheral Control functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n               ##### Flash peripheral extended features  #####\r\n  ==============================================================================\r\n\r\n                      ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..] This driver provides functions to configure and program the FLASH memory\r\n       of all STM32F1xxx devices. It includes\r\n\r\n        (++) Set/Reset the write protection\r\n        (++) Program the user Option Bytes\r\n        (++) Get the Read protection Level\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n#ifdef HAL_FLASH_MODULE_ENABLED\r\n\r\n/** @addtogroup FLASH\r\n * @{\r\n */\r\n/** @addtogroup FLASH_Private_Variables\r\n * @{\r\n */\r\n/* Variables used for Erase pages under interruption*/\r\nextern FLASH_ProcessTypeDef pFlash;\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx FLASHEx\r\n * @brief FLASH HAL Extension module driver\r\n * @{\r\n */\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Private_Constants FLASHEx Private Constants\r\n * @{\r\n */\r\n#define FLASH_POSITION_IWDGSW_BIT       FLASH_OBR_IWDG_SW_Pos\r\n#define FLASH_POSITION_OB_USERDATA0_BIT FLASH_OBR_DATA0_Pos\r\n#define FLASH_POSITION_OB_USERDATA1_BIT FLASH_OBR_DATA1_Pos\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Private_Macros FLASHEx Private Macros\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @defgroup FLASHEx_Private_Functions FLASHEx Private Functions\r\n * @{\r\n */\r\n/* Erase operations */\r\nstatic void FLASH_MassErase(uint32_t Banks);\r\nvoid        FLASH_PageErase(uint32_t PageAddress);\r\n\r\n/* Option bytes control */\r\nstatic HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WriteProtectPage);\r\nstatic HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WriteProtectPage);\r\nstatic HAL_StatusTypeDef FLASH_OB_RDP_LevelConfig(uint8_t ReadProtectLevel);\r\nstatic HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t UserConfig);\r\nstatic HAL_StatusTypeDef FLASH_OB_ProgramData(uint32_t Address, uint8_t Data);\r\nstatic uint32_t          FLASH_OB_GetWRP(void);\r\nstatic uint32_t          FLASH_OB_GetRDP(void);\r\nstatic uint8_t           FLASH_OB_GetUser(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions ---------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Exported_Functions FLASHEx Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASHEx_Exported_Functions_Group1 FLASHEx Memory Erasing functions\r\n *  @brief   FLASH Memory Erasing functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                ##### FLASH Erasing Programming functions #####\r\n  ==============================================================================\r\n\r\n    [..] The FLASH Memory Erasing functions, includes the following functions:\r\n    (+) @ref HAL_FLASHEx_Erase: return only when erase has been done\r\n    (+) @ref HAL_FLASHEx_Erase_IT: end of erase is done when @ref HAL_FLASH_EndOfOperationCallback\r\n        is called with parameter 0xFFFFFFFF\r\n\r\n    [..] Any operation of erase should follow these steps:\r\n    (#) Call the @ref HAL_FLASH_Unlock() function to enable the flash control register and\r\n        program memory access.\r\n    (#) Call the desired function to erase page.\r\n    (#) Call the @ref HAL_FLASH_Lock() to disable the flash program memory access\r\n       (recommended to protect the FLASH memory against possible unwanted operation).\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Perform a mass erase or erase the specified FLASH memory pages\r\n * @note   To correctly run this function, the @ref HAL_FLASH_Unlock() function\r\n *         must be called before.\r\n *         Call the @ref HAL_FLASH_Lock() to disable the flash memory access\r\n *         (recommended to protect the FLASH memory against possible unwanted operation)\r\n * @param[in]  pEraseInit pointer to an FLASH_EraseInitTypeDef structure that\r\n *         contains the configuration information for the erasing.\r\n *\r\n * @param[out]  PageError pointer to variable  that\r\n *         contains the configuration information on faulty page in case of error\r\n *         (0xFFFFFFFF means that all the pages have been correctly erased)\r\n *\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError) {\r\n  HAL_StatusTypeDef status  = HAL_ERROR;\r\n  uint32_t          address = 0U;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(&pFlash);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase));\r\n\r\n  if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) {\r\n#if defined(FLASH_BANK2_END)\r\n    if (pEraseInit->Banks == FLASH_BANK_BOTH) {\r\n      /* Mass Erase requested for Bank1 and Bank2 */\r\n      /* Wait for last operation to be completed */\r\n      if ((FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) && (FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK)) {\r\n        /*Mass erase to be done*/\r\n        FLASH_MassErase(FLASH_BANK_BOTH);\r\n\r\n        /* Wait for last operation to be completed */\r\n        if ((FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) && (FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK)) {\r\n          status = HAL_OK;\r\n        }\r\n\r\n        /* If the erase operation is completed, disable the MER Bit */\r\n        CLEAR_BIT(FLASH->CR, FLASH_CR_MER);\r\n        CLEAR_BIT(FLASH->CR2, FLASH_CR2_MER);\r\n      }\r\n    } else if (pEraseInit->Banks == FLASH_BANK_2) {\r\n      /* Mass Erase requested for Bank2 */\r\n      /* Wait for last operation to be completed */\r\n      if (FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) {\r\n        /*Mass erase to be done*/\r\n        FLASH_MassErase(FLASH_BANK_2);\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n        /* If the erase operation is completed, disable the MER Bit */\r\n        CLEAR_BIT(FLASH->CR2, FLASH_CR2_MER);\r\n      }\r\n    } else\r\n#endif /* FLASH_BANK2_END */\r\n    {\r\n      /* Mass Erase requested for Bank1 */\r\n      /* Wait for last operation to be completed */\r\n      if (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) {\r\n        /*Mass erase to be done*/\r\n        FLASH_MassErase(FLASH_BANK_1);\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n        /* If the erase operation is completed, disable the MER Bit */\r\n        CLEAR_BIT(FLASH->CR, FLASH_CR_MER);\r\n      }\r\n    }\r\n  } else {\r\n    /* Page Erase is requested */\r\n    /* Check the parameters */\r\n    assert_param(IS_FLASH_PROGRAM_ADDRESS(pEraseInit->PageAddress));\r\n    assert_param(IS_FLASH_NB_PAGES(pEraseInit->PageAddress, pEraseInit->NbPages));\r\n\r\n#if defined(FLASH_BANK2_END)\r\n    /* Page Erase requested on address located on bank2 */\r\n    if (pEraseInit->PageAddress > FLASH_BANK1_END) {\r\n      /* Wait for last operation to be completed */\r\n      if (FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) {\r\n        /*Initialization of PageError variable*/\r\n        *PageError = 0xFFFFFFFFU;\r\n\r\n        /* Erase by page by page to be done*/\r\n        for (address = pEraseInit->PageAddress; address < (pEraseInit->PageAddress + (pEraseInit->NbPages) * FLASH_PAGE_SIZE); address += FLASH_PAGE_SIZE) {\r\n          FLASH_PageErase(address);\r\n\r\n          /* Wait for last operation to be completed */\r\n          status = FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n          /* If the erase operation is completed, disable the PER Bit */\r\n          CLEAR_BIT(FLASH->CR2, FLASH_CR2_PER);\r\n\r\n          if (status != HAL_OK) {\r\n            /* In case of error, stop erase procedure and return the faulty address */\r\n            *PageError = address;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    } else\r\n#endif /* FLASH_BANK2_END */\r\n    {\r\n      /* Page Erase requested on address located on bank1 */\r\n      /* Wait for last operation to be completed */\r\n      if (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) {\r\n        /*Initialization of PageError variable*/\r\n        *PageError = 0xFFFFFFFFU;\r\n\r\n        /* Erase page by page to be done*/\r\n        for (address = pEraseInit->PageAddress; address < ((pEraseInit->NbPages * FLASH_PAGE_SIZE) + pEraseInit->PageAddress); address += FLASH_PAGE_SIZE) {\r\n          FLASH_PageErase(address);\r\n\r\n          /* Wait for last operation to be completed */\r\n          status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n          /* If the erase operation is completed, disable the PER Bit */\r\n          CLEAR_BIT(FLASH->CR, FLASH_CR_PER);\r\n\r\n          if (status != HAL_OK) {\r\n            /* In case of error, stop erase procedure and return the faulty address */\r\n            *PageError = address;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Process Unlocked */\r\n  __HAL_UNLOCK(&pFlash);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Perform a mass erase or erase the specified FLASH memory pages with interrupt enabled\r\n * @note   To correctly run this function, the @ref HAL_FLASH_Unlock() function\r\n *         must be called before.\r\n *         Call the @ref HAL_FLASH_Lock() to disable the flash memory access\r\n *         (recommended to protect the FLASH memory against possible unwanted operation)\r\n * @param  pEraseInit pointer to an FLASH_EraseInitTypeDef structure that\r\n *         contains the configuration information for the erasing.\r\n *\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(&pFlash);\r\n\r\n  /* If procedure already ongoing, reject the next one */\r\n  if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase));\r\n\r\n  /* Enable End of FLASH Operation and Error source interrupts */\r\n  __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR);\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  /* Enable End of FLASH Operation and Error source interrupts */\r\n  __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP_BANK2 | FLASH_IT_ERR_BANK2);\r\n\r\n#endif\r\n  if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) {\r\n    /*Mass erase to be done*/\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_MASSERASE;\r\n    FLASH_MassErase(pEraseInit->Banks);\r\n  } else {\r\n    /* Erase by page to be done*/\r\n\r\n    /* Check the parameters */\r\n    assert_param(IS_FLASH_PROGRAM_ADDRESS(pEraseInit->PageAddress));\r\n    assert_param(IS_FLASH_NB_PAGES(pEraseInit->PageAddress, pEraseInit->NbPages));\r\n\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_PAGEERASE;\r\n    pFlash.DataRemaining    = pEraseInit->NbPages;\r\n    pFlash.Address          = pEraseInit->PageAddress;\r\n\r\n    /*Erase 1st page and wait for IT*/\r\n    FLASH_PageErase(pEraseInit->PageAddress);\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_Exported_Functions_Group2 Option Bytes Programming functions\r\n *  @brief   Option Bytes Programming functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                ##### Option Bytes Programming functions #####\r\n  ==============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the FLASH\r\n    option bytes operations.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Erases the FLASH option bytes.\r\n * @note   This functions erases all option bytes except the Read protection (RDP).\r\n *         The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface\r\n *         The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes\r\n *         The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes\r\n *         (system reset will occur)\r\n * @retval HAL status\r\n */\r\n\r\nHAL_StatusTypeDef HAL_FLASHEx_OBErase(void) {\r\n  uint8_t           rdptmp = OB_RDP_LEVEL_0;\r\n  HAL_StatusTypeDef status = HAL_ERROR;\r\n\r\n  /* Get the actual read protection Option Byte value */\r\n  rdptmp = FLASH_OB_GetRDP();\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* If the previous operation is completed, proceed to erase the option bytes */\r\n    SET_BIT(FLASH->CR, FLASH_CR_OPTER);\r\n    SET_BIT(FLASH->CR, FLASH_CR_STRT);\r\n\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n    /* If the erase operation is completed, disable the OPTER Bit */\r\n    CLEAR_BIT(FLASH->CR, FLASH_CR_OPTER);\r\n\r\n    if (status == HAL_OK) {\r\n      /* Restore the last read protection Option Byte value */\r\n      status = FLASH_OB_RDP_LevelConfig(rdptmp);\r\n    }\r\n  }\r\n\r\n  /* Return the erase status */\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Program option bytes\r\n * @note   The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface\r\n *         The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes\r\n *         The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes\r\n *         (system reset will occur)\r\n *\r\n * @param  pOBInit pointer to an FLASH_OBInitStruct structure that\r\n *         contains the configuration information for the programming.\r\n *\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit) {\r\n  HAL_StatusTypeDef status = HAL_ERROR;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(&pFlash);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OPTIONBYTE(pOBInit->OptionType));\r\n\r\n  /* Write protection configuration */\r\n  if ((pOBInit->OptionType & OPTIONBYTE_WRP) == OPTIONBYTE_WRP) {\r\n    assert_param(IS_WRPSTATE(pOBInit->WRPState));\r\n    if (pOBInit->WRPState == OB_WRPSTATE_ENABLE) {\r\n      /* Enable of Write protection on the selected page */\r\n      status = FLASH_OB_EnableWRP(pOBInit->WRPPage);\r\n    } else {\r\n      /* Disable of Write protection on the selected page */\r\n      status = FLASH_OB_DisableWRP(pOBInit->WRPPage);\r\n    }\r\n    if (status != HAL_OK) {\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(&pFlash);\r\n      return status;\r\n    }\r\n  }\r\n\r\n  /* Read protection configuration */\r\n  if ((pOBInit->OptionType & OPTIONBYTE_RDP) == OPTIONBYTE_RDP) {\r\n    status = FLASH_OB_RDP_LevelConfig(pOBInit->RDPLevel);\r\n    if (status != HAL_OK) {\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(&pFlash);\r\n      return status;\r\n    }\r\n  }\r\n\r\n  /* USER configuration */\r\n  if ((pOBInit->OptionType & OPTIONBYTE_USER) == OPTIONBYTE_USER) {\r\n    status = FLASH_OB_UserConfig(pOBInit->USERConfig);\r\n    if (status != HAL_OK) {\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(&pFlash);\r\n      return status;\r\n    }\r\n  }\r\n\r\n  /* DATA configuration*/\r\n  if ((pOBInit->OptionType & OPTIONBYTE_DATA) == OPTIONBYTE_DATA) {\r\n    status = FLASH_OB_ProgramData(pOBInit->DATAAddress, pOBInit->DATAData);\r\n    if (status != HAL_OK) {\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(&pFlash);\r\n      return status;\r\n    }\r\n  }\r\n\r\n  /* Process Unlocked */\r\n  __HAL_UNLOCK(&pFlash);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Get the Option byte configuration\r\n * @param  pOBInit pointer to an FLASH_OBInitStruct structure that\r\n *         contains the configuration information for the programming.\r\n *\r\n * @retval None\r\n */\r\nvoid HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit) {\r\n  pOBInit->OptionType = OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER;\r\n\r\n  /*Get WRP*/\r\n  pOBInit->WRPPage = FLASH_OB_GetWRP();\r\n\r\n  /*Get RDP Level*/\r\n  pOBInit->RDPLevel = FLASH_OB_GetRDP();\r\n\r\n  /*Get USER*/\r\n  pOBInit->USERConfig = FLASH_OB_GetUser();\r\n}\r\n\r\n/**\r\n * @brief  Get the Option byte user data\r\n * @param  DATAAdress Address of the option byte DATA\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref OB_DATA_ADDRESS_DATA0\r\n *            @arg @ref OB_DATA_ADDRESS_DATA1\r\n * @retval Value programmed in USER data\r\n */\r\nuint32_t HAL_FLASHEx_OBGetUserData(uint32_t DATAAdress) {\r\n  uint32_t value = 0;\r\n\r\n  if (DATAAdress == OB_DATA_ADDRESS_DATA0) {\r\n    /* Get value programmed in OB USER Data0 */\r\n    value = READ_BIT(FLASH->OBR, FLASH_OBR_DATA0) >> FLASH_POSITION_OB_USERDATA0_BIT;\r\n  } else {\r\n    /* Get value programmed in OB USER Data1 */\r\n    value = READ_BIT(FLASH->OBR, FLASH_OBR_DATA1) >> FLASH_POSITION_OB_USERDATA1_BIT;\r\n  }\r\n\r\n  return value;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASHEx_Private_Functions\r\n * @{\r\n */\r\n\r\n/**\r\n  * @brief  Full erase of FLASH memory Bank\r\n  * @param  Banks Banks to be erased\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref FLASH_BANK_1 Bank1 to be erased\r\n  @if STM32F101xG\r\n  *            @arg @ref FLASH_BANK_2 Bank2 to be erased\r\n  *            @arg @ref FLASH_BANK_BOTH Bank1 and Bank2 to be erased\r\n  @endif\r\n  @if STM32F103xG\r\n  *            @arg @ref FLASH_BANK_2 Bank2 to be erased\r\n  *            @arg @ref FLASH_BANK_BOTH Bank1 and Bank2 to be erased\r\n  @endif\r\n  *\r\n  * @retval None\r\n  */\r\nstatic void FLASH_MassErase(uint32_t Banks) {\r\n  /* Check the parameters */\r\n  assert_param(IS_FLASH_BANK(Banks));\r\n\r\n  /* Clean the error context */\r\n  pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  if (Banks == FLASH_BANK_BOTH) {\r\n    /* bank1 & bank2 will be erased*/\r\n    SET_BIT(FLASH->CR, FLASH_CR_MER);\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_MER);\r\n    SET_BIT(FLASH->CR, FLASH_CR_STRT);\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_STRT);\r\n  } else if (Banks == FLASH_BANK_2) {\r\n    /*Only bank2 will be erased*/\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_MER);\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_STRT);\r\n  } else {\r\n#endif /* FLASH_BANK2_END */\r\n#if !defined(FLASH_BANK2_END)\r\n    /* Prevent unused argument(s) compilation warning */\r\n    UNUSED(Banks);\r\n#endif /* FLASH_BANK2_END */\r\n    /* Only bank1 will be erased*/\r\n    SET_BIT(FLASH->CR, FLASH_CR_MER);\r\n    SET_BIT(FLASH->CR, FLASH_CR_STRT);\r\n#if defined(FLASH_BANK2_END)\r\n  }\r\n#endif /* FLASH_BANK2_END */\r\n}\r\n\r\n/**\r\n * @brief  Enable the write protection of the desired pages\r\n * @note   An option byte erase is done automatically in this function.\r\n * @note   When the memory read protection level is selected (RDP level = 1),\r\n *         it is not possible to program or erase the flash page i if\r\n *         debug features are connected or boot code is executed in RAM, even if nWRPi = 1\r\n *\r\n * @param  WriteProtectPage specifies the page(s) to be write protected.\r\n *         The value of this parameter depend on device used within the same series\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WriteProtectPage) {\r\n  HAL_StatusTypeDef status    = HAL_OK;\r\n  uint16_t          WRP0_Data = 0xFFFF;\r\n#if defined(FLASH_WRP1_WRP1)\r\n  uint16_t WRP1_Data = 0xFFFF;\r\n#endif /* FLASH_WRP1_WRP1 */\r\n#if defined(FLASH_WRP2_WRP2)\r\n  uint16_t WRP2_Data = 0xFFFF;\r\n#endif /* FLASH_WRP2_WRP2 */\r\n#if defined(FLASH_WRP3_WRP3)\r\n  uint16_t WRP3_Data = 0xFFFF;\r\n#endif /* FLASH_WRP3_WRP3 */\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OB_WRP(WriteProtectPage));\r\n\r\n  /* Get current write protected pages and the new pages to be protected ******/\r\n  WriteProtectPage = (uint32_t)(~((~FLASH_OB_GetWRP()) | WriteProtectPage));\r\n\r\n#if defined(OB_WRP_PAGES0TO15MASK)\r\n  WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO15MASK);\r\n#elif defined(OB_WRP_PAGES0TO31MASK)\r\n  WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO31MASK);\r\n#endif /* OB_WRP_PAGES0TO31MASK */\r\n\r\n#if defined(OB_WRP_PAGES16TO31MASK)\r\n  WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES16TO31MASK) >> 8U);\r\n#elif defined(OB_WRP_PAGES32TO63MASK)\r\n  WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO63MASK) >> 8U);\r\n#endif /* OB_WRP_PAGES32TO63MASK */\r\n\r\n#if defined(OB_WRP_PAGES64TO95MASK)\r\n  WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES64TO95MASK) >> 16U);\r\n#endif /* OB_WRP_PAGES64TO95MASK */\r\n#if defined(OB_WRP_PAGES32TO47MASK)\r\n  WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO47MASK) >> 16U);\r\n#endif /* OB_WRP_PAGES32TO47MASK */\r\n\r\n#if defined(OB_WRP_PAGES96TO127MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES96TO127MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO255MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO255MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO511MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO511MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO127MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO127MASK) >> 24U);\r\n#endif /* OB_WRP_PAGES96TO127MASK */\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* To be able to write again option byte, need to perform a option byte erase */\r\n    status = HAL_FLASHEx_OBErase();\r\n    if (status == HAL_OK) {\r\n      /* Enable write protection */\r\n      SET_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n\r\n#if defined(FLASH_WRP0_WRP0)\r\n      if (WRP0_Data != 0xFFU) {\r\n        OB->WRP0 &= WRP0_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP0_WRP0 */\r\n\r\n#if defined(FLASH_WRP1_WRP1)\r\n      if ((status == HAL_OK) && (WRP1_Data != 0xFFU)) {\r\n        OB->WRP1 &= WRP1_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP1_WRP1 */\r\n\r\n#if defined(FLASH_WRP2_WRP2)\r\n      if ((status == HAL_OK) && (WRP2_Data != 0xFFU)) {\r\n        OB->WRP2 &= WRP2_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP2_WRP2 */\r\n\r\n#if defined(FLASH_WRP3_WRP3)\r\n      if ((status == HAL_OK) && (WRP3_Data != 0xFFU)) {\r\n        OB->WRP3 &= WRP3_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP3_WRP3 */\r\n\r\n      /* if the program operation is completed, disable the OPTPG Bit */\r\n      CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n    }\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Disable the write protection of the desired pages\r\n * @note   An option byte erase is done automatically in this function.\r\n * @note   When the memory read protection level is selected (RDP level = 1),\r\n *         it is not possible to program or erase the flash page i if\r\n *         debug features are connected or boot code is executed in RAM, even if nWRPi = 1\r\n *\r\n * @param  WriteProtectPage specifies the page(s) to be write unprotected.\r\n *         The value of this parameter depend on device used within the same series\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WriteProtectPage) {\r\n  HAL_StatusTypeDef status    = HAL_OK;\r\n  uint16_t          WRP0_Data = 0xFFFF;\r\n#if defined(FLASH_WRP1_WRP1)\r\n  uint16_t WRP1_Data = 0xFFFF;\r\n#endif /* FLASH_WRP1_WRP1 */\r\n#if defined(FLASH_WRP2_WRP2)\r\n  uint16_t WRP2_Data = 0xFFFF;\r\n#endif /* FLASH_WRP2_WRP2 */\r\n#if defined(FLASH_WRP3_WRP3)\r\n  uint16_t WRP3_Data = 0xFFFF;\r\n#endif /* FLASH_WRP3_WRP3 */\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OB_WRP(WriteProtectPage));\r\n\r\n  /* Get current write protected pages and the new pages to be unprotected ******/\r\n  WriteProtectPage = (FLASH_OB_GetWRP() | WriteProtectPage);\r\n\r\n#if defined(OB_WRP_PAGES0TO15MASK)\r\n  WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO15MASK);\r\n#elif defined(OB_WRP_PAGES0TO31MASK)\r\n  WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO31MASK);\r\n#endif /* OB_WRP_PAGES0TO31MASK */\r\n\r\n#if defined(OB_WRP_PAGES16TO31MASK)\r\n  WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES16TO31MASK) >> 8U);\r\n#elif defined(OB_WRP_PAGES32TO63MASK)\r\n  WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO63MASK) >> 8U);\r\n#endif /* OB_WRP_PAGES32TO63MASK */\r\n\r\n#if defined(OB_WRP_PAGES64TO95MASK)\r\n  WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES64TO95MASK) >> 16U);\r\n#endif /* OB_WRP_PAGES64TO95MASK */\r\n#if defined(OB_WRP_PAGES32TO47MASK)\r\n  WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO47MASK) >> 16U);\r\n#endif /* OB_WRP_PAGES32TO47MASK */\r\n\r\n#if defined(OB_WRP_PAGES96TO127MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES96TO127MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO255MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO255MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO511MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO511MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO127MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO127MASK) >> 24U);\r\n#endif /* OB_WRP_PAGES96TO127MASK */\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* To be able to write again option byte, need to perform a option byte erase */\r\n    status = HAL_FLASHEx_OBErase();\r\n    if (status == HAL_OK) {\r\n      SET_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n\r\n#if defined(FLASH_WRP0_WRP0)\r\n      if (WRP0_Data != 0xFFU) {\r\n        OB->WRP0 |= WRP0_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP0_WRP0 */\r\n\r\n#if defined(FLASH_WRP1_WRP1)\r\n      if ((status == HAL_OK) && (WRP1_Data != 0xFFU)) {\r\n        OB->WRP1 |= WRP1_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP1_WRP1 */\r\n\r\n#if defined(FLASH_WRP2_WRP2)\r\n      if ((status == HAL_OK) && (WRP2_Data != 0xFFU)) {\r\n        OB->WRP2 |= WRP2_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP2_WRP2 */\r\n\r\n#if defined(FLASH_WRP3_WRP3)\r\n      if ((status == HAL_OK) && (WRP3_Data != 0xFFU)) {\r\n        OB->WRP3 |= WRP3_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP3_WRP3 */\r\n\r\n      /* if the program operation is completed, disable the OPTPG Bit */\r\n      CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n    }\r\n  }\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Set the read protection level.\r\n * @param  ReadProtectLevel specifies the read protection level.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref OB_RDP_LEVEL_0 No protection\r\n *            @arg @ref OB_RDP_LEVEL_1 Read protection of the memory\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef FLASH_OB_RDP_LevelConfig(uint8_t ReadProtectLevel) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OB_RDP_LEVEL(ReadProtectLevel));\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* If the previous operation is completed, proceed to erase the option bytes */\r\n    SET_BIT(FLASH->CR, FLASH_CR_OPTER);\r\n    SET_BIT(FLASH->CR, FLASH_CR_STRT);\r\n\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n    /* If the erase operation is completed, disable the OPTER Bit */\r\n    CLEAR_BIT(FLASH->CR, FLASH_CR_OPTER);\r\n\r\n    if (status == HAL_OK) {\r\n      /* Enable the Option Bytes Programming operation */\r\n      SET_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n\r\n      WRITE_REG(OB->RDP, ReadProtectLevel);\r\n\r\n      /* Wait for last operation to be completed */\r\n      status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n      /* if the program operation is completed, disable the OPTPG Bit */\r\n      CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n    }\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Program the FLASH User Option Byte.\r\n * @note   Programming of the OB should be performed only after an erase (otherwise PGERR occurs)\r\n * @param  UserConfig The FLASH User Option Bytes values FLASH_OBR_IWDG_SW(Bit2),\r\n *         FLASH_OBR_nRST_STOP(Bit3),FLASH_OBR_nRST_STDBY(Bit4).\r\n *         And BFBF2(Bit5) for STM32F101xG and STM32F103xG .\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t UserConfig) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OB_IWDG_SOURCE((UserConfig & OB_IWDG_SW)));\r\n  assert_param(IS_OB_STOP_SOURCE((UserConfig & OB_STOP_NO_RST)));\r\n  assert_param(IS_OB_STDBY_SOURCE((UserConfig & OB_STDBY_NO_RST)));\r\n#if defined(FLASH_BANK2_END)\r\n  assert_param(IS_OB_BOOT1((UserConfig & OB_BOOT1_SET)));\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* Enable the Option Bytes Programming operation */\r\n    SET_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n\r\n#if defined(FLASH_BANK2_END)\r\n    OB->USER = (UserConfig | 0xF0U);\r\n#else\r\n    OB->USER = (UserConfig | 0x88U);\r\n#endif /* FLASH_BANK2_END */\r\n\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n    /* if the program operation is completed, disable the OPTPG Bit */\r\n    CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Programs a half word at a specified Option Byte Data address.\r\n * @note   The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface\r\n *         The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes\r\n *         The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes\r\n *         (system reset will occur)\r\n *         Programming of the OB should be performed only after an erase (otherwise PGERR occurs)\r\n * @param  Address specifies the address to be programmed.\r\n *         This parameter can be 0x1FFFF804 or 0x1FFFF806.\r\n * @param  Data specifies the data to be programmed.\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef FLASH_OB_ProgramData(uint32_t Address, uint8_t Data) {\r\n  HAL_StatusTypeDef status = HAL_ERROR;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OB_DATA_ADDRESS(Address));\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* Enables the Option Bytes Programming operation */\r\n    SET_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n    *(__IO uint16_t *)Address = Data;\r\n\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n    /* If the program operation is completed, disable the OPTPG Bit */\r\n    CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n  }\r\n  /* Return the Option Byte Data Program Status */\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Return the FLASH Write Protection Option Bytes value.\r\n * @retval The FLASH Write Protection Option Bytes value\r\n */\r\nstatic uint32_t FLASH_OB_GetWRP(void) {\r\n  /* Return the FLASH write protection Register value */\r\n  return (uint32_t)(READ_REG(FLASH->WRPR));\r\n}\r\n\r\n/**\r\n * @brief  Returns the FLASH Read Protection level.\r\n * @retval FLASH RDP level\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref OB_RDP_LEVEL_0 No protection\r\n *            @arg @ref OB_RDP_LEVEL_1 Read protection of the memory\r\n */\r\nstatic uint32_t FLASH_OB_GetRDP(void) {\r\n  uint32_t readstatus = OB_RDP_LEVEL_0;\r\n  uint32_t tmp_reg    = 0U;\r\n\r\n  /* Read RDP level bits */\r\n  tmp_reg = READ_BIT(FLASH->OBR, FLASH_OBR_RDPRT);\r\n\r\n  if (tmp_reg == FLASH_OBR_RDPRT) {\r\n    readstatus = OB_RDP_LEVEL_1;\r\n  } else {\r\n    readstatus = OB_RDP_LEVEL_0;\r\n  }\r\n\r\n  return readstatus;\r\n}\r\n\r\n/**\r\n * @brief  Return the FLASH User Option Byte value.\r\n * @retval The FLASH User Option Bytes values: FLASH_OBR_IWDG_SW(Bit2),\r\n *         FLASH_OBR_nRST_STOP(Bit3),FLASH_OBR_nRST_STDBY(Bit4).\r\n *         And FLASH_OBR_BFB2(Bit5) for STM32F101xG and STM32F103xG .\r\n */\r\nstatic uint8_t FLASH_OB_GetUser(void) {\r\n  /* Return the User Option Byte */\r\n  return (uint8_t)((READ_REG(FLASH->OBR) & FLASH_OBR_USER) >> FLASH_POSITION_IWDGSW_BIT);\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASH\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASH_Private_Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Erase the specified FLASH memory page\r\n * @param  PageAddress FLASH page to erase\r\n *         The value of this parameter depend on device used within the same series\r\n *\r\n * @retval None\r\n */\r\nvoid FLASH_PageErase(uint32_t PageAddress) {\r\n  /* Clean the error context */\r\n  pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  if (PageAddress > FLASH_BANK1_END) {\r\n    /* Proceed to erase the page */\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_PER);\r\n    WRITE_REG(FLASH->AR2, PageAddress);\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_STRT);\r\n  } else {\r\n#endif /* FLASH_BANK2_END */\r\n    /* Proceed to erase the page */\r\n    SET_BIT(FLASH->CR, FLASH_CR_PER);\r\n    WRITE_REG(FLASH->AR, PageAddress);\r\n    SET_BIT(FLASH->CR, FLASH_CR_STRT);\r\n#if defined(FLASH_BANK2_END)\r\n  }\r\n#endif /* FLASH_BANK2_END */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_FLASH_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_gpio.c\r\n  * @author  MCD Application Team\r\n  * @brief   GPIO HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the General Purpose Input/Output (GPIO) peripheral:\r\n  *           + Initialization and de-initialization functions\r\n  *           + IO operation functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                    ##### GPIO Peripheral features #####\r\n  ==============================================================================\r\n  [..]\r\n  Subject to the specific hardware characteristics of each I/O port listed in the datasheet, each\r\n  port bit of the General Purpose IO (GPIO) Ports, can be individually configured by software\r\n  in several modes:\r\n  (+) Input mode\r\n  (+) Analog mode\r\n  (+) Output mode\r\n  (+) Alternate function mode\r\n  (+) External interrupt/event lines\r\n\r\n  [..]\r\n  During and just after reset, the alternate functions and external interrupt\r\n  lines are not active and the I/O ports are configured in input floating mode.\r\n\r\n  [..]\r\n  All GPIO pins have weak internal pull-up and pull-down resistors, which can be\r\n  activated or not.\r\n\r\n  [..]\r\n  In Output or Alternate mode, each IO can be configured on open-drain or push-pull\r\n  type and the IO speed can be selected depending on the VDD value.\r\n\r\n  [..]\r\n  All ports have external interrupt/event capability. To use external interrupt\r\n  lines, the port must be configured in input mode. All available GPIO pins are\r\n  connected to the 16 external interrupt/event lines from EXTI0 to EXTI15.\r\n\r\n  [..]\r\n  The external interrupt/event controller consists of up to 20 edge detectors in connectivity\r\n  line devices, or 19 edge detectors in other devices for generating event/interrupt requests.\r\n  Each input line can be independently configured to select the type (event or interrupt) and\r\n  the corresponding trigger event (rising or falling or both). Each line can also masked\r\n  independently. A pending register maintains the status line of the interrupt requests\r\n\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n [..]\r\n   (#) Enable the GPIO APB2 clock using the following function : __HAL_RCC_GPIOx_CLK_ENABLE().\r\n\r\n   (#) Configure the GPIO pin(s) using HAL_GPIO_Init().\r\n       (++) Configure the IO mode using \"Mode\" member from GPIO_InitTypeDef structure\r\n       (++) Activate Pull-up, Pull-down resistor using \"Pull\" member from GPIO_InitTypeDef\r\n            structure.\r\n       (++) In case of Output or alternate function mode selection: the speed is\r\n            configured through \"Speed\" member from GPIO_InitTypeDef structure\r\n       (++) Analog mode is required when a pin is to be used as ADC channel\r\n            or DAC output.\r\n       (++) In case of external interrupt/event selection the \"Mode\" member from\r\n            GPIO_InitTypeDef structure select the type (interrupt or event) and\r\n            the corresponding trigger event (rising or falling or both).\r\n\r\n   (#) In case of external interrupt/event mode selection, configure NVIC IRQ priority\r\n       mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using\r\n       HAL_NVIC_EnableIRQ().\r\n\r\n   (#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin().\r\n\r\n   (#) To set/reset the level of a pin configured in output mode use\r\n       HAL_GPIO_WritePin()/HAL_GPIO_TogglePin().\r\n\r\n   (#) To lock pin configuration until next reset use HAL_GPIO_LockPin().\r\n\r\n   (#) During and just after reset, the alternate functions are not\r\n       active and the GPIO pins are configured in input floating mode (except JTAG\r\n       pins).\r\n\r\n   (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose\r\n       (PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has\r\n       priority over the GPIO function.\r\n\r\n   (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as\r\n       general purpose PD0 and PD1, respectively, when the HSE oscillator is off.\r\n       The HSE has priority over the GPIO function.\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIO GPIO\r\n * @brief GPIO HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_GPIO_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @addtogroup GPIO_Private_Constants GPIO Private Constants\r\n * @{\r\n */\r\n#define GPIO_MODE        0x00000003u\r\n#define EXTI_MODE        0x10000000u\r\n#define GPIO_MODE_IT     0x00010000u\r\n#define GPIO_MODE_EVT    0x00020000u\r\n#define RISING_EDGE      0x00100000u\r\n#define FALLING_EDGE     0x00200000u\r\n#define GPIO_OUTPUT_TYPE 0x00000010u\r\n\r\n#define GPIO_NUMBER 16u\r\n\r\n/* Definitions for bit manipulation of CRL and CRH register */\r\n#define GPIO_CR_MODE_INPUT         0x00000000u /*!< 00: Input mode (reset state)  */\r\n#define GPIO_CR_CNF_ANALOG         0x00000000u /*!< 00: Analog mode  */\r\n#define GPIO_CR_CNF_INPUT_FLOATING 0x00000004u /*!< 01: Floating input (reset state)  */\r\n#define GPIO_CR_CNF_INPUT_PU_PD    0x00000008u /*!< 10: Input with pull-up / pull-down  */\r\n#define GPIO_CR_CNF_GP_OUTPUT_PP   0x00000000u /*!< 00: General purpose output push-pull  */\r\n#define GPIO_CR_CNF_GP_OUTPUT_OD   0x00000004u /*!< 01: General purpose output Open-drain  */\r\n#define GPIO_CR_CNF_AF_OUTPUT_PP   0x00000008u /*!< 10: Alternate function output Push-pull  */\r\n#define GPIO_CR_CNF_AF_OUTPUT_OD   0x0000000Cu /*!< 11: Alternate function output Open-drain  */\r\n\r\n/**\r\n * @}\r\n */\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @defgroup GPIO_Exported_Functions GPIO Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIO_Exported_Functions_Group1 Initialization and de-initialization functions\r\n *  @brief    Initialization and Configuration functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n              ##### Initialization and de-initialization functions #####\r\n ===============================================================================\r\n  [..]\r\n    This section provides functions allowing to initialize and de-initialize the GPIOs\r\n    to be ready for use.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initializes the GPIOx peripheral according to the specified parameters in the GPIO_Init.\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Init: pointer to a GPIO_InitTypeDef structure that contains\r\n *         the configuration information for the specified GPIO peripheral.\r\n * @retval None\r\n */\r\nvoid HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) {\r\n  uint32_t       position = 0x00u;\r\n  uint32_t       ioposition;\r\n  uint32_t       iocurrent;\r\n  uint32_t       temp;\r\n  uint32_t       config = 0x00u;\r\n  __IO uint32_t *configregister; /* Store the address of CRL or CRH register based on pin number */\r\n  uint32_t       registeroffset; /* offset used during computation of CNF and MODE bits placement inside CRL or CRH register */\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));\r\n  assert_param(IS_GPIO_PIN(GPIO_Init->Pin));\r\n  assert_param(IS_GPIO_MODE(GPIO_Init->Mode));\r\n\r\n  /* Configure the port pins */\r\n  while (((GPIO_Init->Pin) >> position) != 0x00u) {\r\n    /* Get the IO position */\r\n    ioposition = (0x01uL << position);\r\n\r\n    /* Get the current IO position */\r\n    iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition;\r\n\r\n    if (iocurrent == ioposition) {\r\n      /* Check the Alternate function parameters */\r\n      assert_param(IS_GPIO_AF_INSTANCE(GPIOx));\r\n\r\n      /* Based on the required mode, filling config variable with MODEy[1:0] and CNFy[3:2] corresponding bits */\r\n      switch (GPIO_Init->Mode) {\r\n      /* If we are configuring the pin in OUTPUT push-pull mode */\r\n      case GPIO_MODE_OUTPUT_PP:\r\n        /* Check the GPIO speed parameter */\r\n        assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));\r\n        config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_PP;\r\n        break;\r\n\r\n      /* If we are configuring the pin in OUTPUT open-drain mode */\r\n      case GPIO_MODE_OUTPUT_OD:\r\n        /* Check the GPIO speed parameter */\r\n        assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));\r\n        config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_OD;\r\n        break;\r\n\r\n      /* If we are configuring the pin in ALTERNATE FUNCTION push-pull mode */\r\n      case GPIO_MODE_AF_PP:\r\n        /* Check the GPIO speed parameter */\r\n        assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));\r\n        config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_PP;\r\n        break;\r\n\r\n      /* If we are configuring the pin in ALTERNATE FUNCTION open-drain mode */\r\n      case GPIO_MODE_AF_OD:\r\n        /* Check the GPIO speed parameter */\r\n        assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));\r\n        config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_OD;\r\n        break;\r\n\r\n      /* If we are configuring the pin in INPUT (also applicable to EVENT and IT mode) */\r\n      case GPIO_MODE_INPUT:\r\n      case GPIO_MODE_IT_RISING:\r\n      case GPIO_MODE_IT_FALLING:\r\n      case GPIO_MODE_IT_RISING_FALLING:\r\n      case GPIO_MODE_EVT_RISING:\r\n      case GPIO_MODE_EVT_FALLING:\r\n      case GPIO_MODE_EVT_RISING_FALLING:\r\n        /* Check the GPIO pull parameter */\r\n        assert_param(IS_GPIO_PULL(GPIO_Init->Pull));\r\n        if (GPIO_Init->Pull == GPIO_NOPULL) {\r\n          config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_FLOATING;\r\n        } else if (GPIO_Init->Pull == GPIO_PULLUP) {\r\n          config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD;\r\n\r\n          /* Set the corresponding ODR bit */\r\n          GPIOx->BSRR = ioposition;\r\n        } else /* GPIO_PULLDOWN */\r\n        {\r\n          config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD;\r\n\r\n          /* Reset the corresponding ODR bit */\r\n          GPIOx->BRR = ioposition;\r\n        }\r\n        break;\r\n\r\n      /* If we are configuring the pin in INPUT analog mode */\r\n      case GPIO_MODE_ANALOG:\r\n        config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_ANALOG;\r\n        break;\r\n\r\n      /* Parameters are checked with assert_param */\r\n      default:\r\n        break;\r\n      }\r\n\r\n      /* Check if the current bit belongs to first half or last half of the pin count number\r\n       in order to address CRH or CRL register*/\r\n      configregister = (iocurrent < GPIO_PIN_8) ? &GPIOx->CRL : &GPIOx->CRH;\r\n      registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2u) : ((position - 8u) << 2u);\r\n\r\n      /* Apply the new configuration of the pin to the register */\r\n      MODIFY_REG((*configregister), ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset), (config << registeroffset));\r\n\r\n      /*--------------------- EXTI Mode Configuration ------------------------*/\r\n      /* Configure the External Interrupt or event for the current IO */\r\n      if ((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE) {\r\n        /* Enable AFIO Clock */\r\n        __HAL_RCC_AFIO_CLK_ENABLE();\r\n        temp = AFIO->EXTICR[position >> 2u];\r\n        CLEAR_BIT(temp, (0x0Fu) << (4u * (position & 0x03u)));\r\n        SET_BIT(temp, (GPIO_GET_INDEX(GPIOx)) << (4u * (position & 0x03u)));\r\n        AFIO->EXTICR[position >> 2u] = temp;\r\n\r\n        /* Configure the interrupt mask */\r\n        if ((GPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT) {\r\n          SET_BIT(EXTI->IMR, iocurrent);\r\n        } else {\r\n          CLEAR_BIT(EXTI->IMR, iocurrent);\r\n        }\r\n\r\n        /* Configure the event mask */\r\n        if ((GPIO_Init->Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT) {\r\n          SET_BIT(EXTI->EMR, iocurrent);\r\n        } else {\r\n          CLEAR_BIT(EXTI->EMR, iocurrent);\r\n        }\r\n\r\n        /* Enable or disable the rising trigger */\r\n        if ((GPIO_Init->Mode & RISING_EDGE) == RISING_EDGE) {\r\n          SET_BIT(EXTI->RTSR, iocurrent);\r\n        } else {\r\n          CLEAR_BIT(EXTI->RTSR, iocurrent);\r\n        }\r\n\r\n        /* Enable or disable the falling trigger */\r\n        if ((GPIO_Init->Mode & FALLING_EDGE) == FALLING_EDGE) {\r\n          SET_BIT(EXTI->FTSR, iocurrent);\r\n        } else {\r\n          CLEAR_BIT(EXTI->FTSR, iocurrent);\r\n        }\r\n      }\r\n    }\r\n\r\n    position++;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  De-initializes the GPIOx peripheral registers to their default reset values.\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Pin: specifies the port bit to be written.\r\n *         This parameter can be one of GPIO_PIN_x where x can be (0..15).\r\n * @retval None\r\n */\r\nvoid HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin) {\r\n  uint32_t       position = 0x00u;\r\n  uint32_t       iocurrent;\r\n  uint32_t       tmp;\r\n  __IO uint32_t *configregister; /* Store the address of CRL or CRH register based on pin number */\r\n  uint32_t       registeroffset;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));\r\n  assert_param(IS_GPIO_PIN(GPIO_Pin));\r\n\r\n  /* Configure the port pins */\r\n  while ((GPIO_Pin >> position) != 0u) {\r\n    /* Get current io position */\r\n    iocurrent = (GPIO_Pin) & (1uL << position);\r\n\r\n    if (iocurrent) {\r\n      /*------------------------- EXTI Mode Configuration --------------------*/\r\n      /* Clear the External Interrupt or Event for the current IO */\r\n\r\n      tmp = AFIO->EXTICR[position >> 2u];\r\n      tmp &= 0x0FuL << (4u * (position & 0x03u));\r\n      if (tmp == (GPIO_GET_INDEX(GPIOx) << (4u * (position & 0x03u)))) {\r\n        tmp = 0x0FuL << (4u * (position & 0x03u));\r\n        CLEAR_BIT(AFIO->EXTICR[position >> 2u], tmp);\r\n\r\n        /* Clear EXTI line configuration */\r\n        CLEAR_BIT(EXTI->IMR, (uint32_t)iocurrent);\r\n        CLEAR_BIT(EXTI->EMR, (uint32_t)iocurrent);\r\n\r\n        /* Clear Rising Falling edge configuration */\r\n        CLEAR_BIT(EXTI->RTSR, (uint32_t)iocurrent);\r\n        CLEAR_BIT(EXTI->FTSR, (uint32_t)iocurrent);\r\n      }\r\n      /*------------------------- GPIO Mode Configuration --------------------*/\r\n      /* Check if the current bit belongs to first half or last half of the pin count number\r\n       in order to address CRH or CRL register */\r\n      configregister = (iocurrent < GPIO_PIN_8) ? &GPIOx->CRL : &GPIOx->CRH;\r\n      registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2u) : ((position - 8u) << 2u);\r\n\r\n      /* CRL/CRH default value is floating input(0x04) shifted to correct position */\r\n      MODIFY_REG(*configregister, ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset), GPIO_CRL_CNF0_0 << registeroffset);\r\n\r\n      /* ODR default value is 0 */\r\n      CLEAR_BIT(GPIOx->ODR, iocurrent);\r\n    }\r\n\r\n    position++;\r\n  }\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIO_Exported_Functions_Group2 IO operation functions\r\n *  @brief   GPIO Read and Write\r\n *\r\n@verbatim\r\n ===============================================================================\r\n                       ##### IO operation functions #####\r\n ===============================================================================\r\n  [..]\r\n    This subsection provides a set of functions allowing to manage the GPIOs.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Reads the specified input port pin.\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Pin: specifies the port bit to read.\r\n *         This parameter can be GPIO_PIN_x where x can be (0..15).\r\n * @retval The input port pin value.\r\n */\r\nGPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) {\r\n  GPIO_PinState bitstatus;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_PIN(GPIO_Pin));\r\n\r\n  if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET) {\r\n    bitstatus = GPIO_PIN_SET;\r\n  } else {\r\n    bitstatus = GPIO_PIN_RESET;\r\n  }\r\n  return bitstatus;\r\n}\r\n\r\n/**\r\n * @brief  Sets or clears the selected data port bit.\r\n *\r\n * @note   This function uses GPIOx_BSRR register to allow atomic read/modify\r\n *         accesses. In this way, there is no risk of an IRQ occurring between\r\n *         the read and the modify access.\r\n *\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Pin: specifies the port bit to be written.\r\n *          This parameter can be one of GPIO_PIN_x where x can be (0..15).\r\n * @param  PinState: specifies the value to be written to the selected bit.\r\n *          This parameter can be one of the GPIO_PinState enum values:\r\n *            @arg GPIO_PIN_RESET: to clear the port pin\r\n *            @arg GPIO_PIN_SET: to set the port pin\r\n * @retval None\r\n */\r\nvoid HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) {\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_PIN(GPIO_Pin));\r\n  assert_param(IS_GPIO_PIN_ACTION(PinState));\r\n\r\n  if (PinState != GPIO_PIN_RESET) {\r\n    GPIOx->BSRR = GPIO_Pin;\r\n  } else {\r\n    GPIOx->BSRR = (uint32_t)GPIO_Pin << 16u;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Toggles the specified GPIO pin\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Pin: Specifies the pins to be toggled.\r\n * @retval None\r\n */\r\nvoid HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) {\r\n  uint32_t odr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_PIN(GPIO_Pin));\r\n\r\n  /* get current Ouput Data Register value */\r\n  odr = GPIOx->ODR;\r\n\r\n  /* Set selected pins that were at low level, and reset ones that were high */\r\n  GPIOx->BSRR = ((odr & GPIO_Pin) << GPIO_NUMBER) | (~odr & GPIO_Pin);\r\n}\r\n\r\n/**\r\n * @brief  Locks GPIO Pins configuration registers.\r\n * @note   The locking mechanism allows the IO configuration to be frozen. When the LOCK sequence\r\n *         has been applied on a port bit, it is no longer possible to modify the value of the port bit until\r\n *         the next reset.\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Pin: specifies the port bit to be locked.\r\n *         This parameter can be any combination of GPIO_Pin_x where x can be (0..15).\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) {\r\n  __IO uint32_t tmp = GPIO_LCKR_LCKK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_LOCK_INSTANCE(GPIOx));\r\n  assert_param(IS_GPIO_PIN(GPIO_Pin));\r\n\r\n  /* Apply lock key write sequence */\r\n  SET_BIT(tmp, GPIO_Pin);\r\n  /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */\r\n  GPIOx->LCKR = tmp;\r\n  /* Reset LCKx bit(s): LCKK='0' + LCK[15-0] */\r\n  GPIOx->LCKR = GPIO_Pin;\r\n  /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */\r\n  GPIOx->LCKR = tmp;\r\n  /* Read LCKK register. This read is mandatory to complete key lock sequence */\r\n  tmp = GPIOx->LCKR;\r\n\r\n  /* read again in order to confirm lock is active */\r\n  if ((uint32_t)(GPIOx->LCKR & GPIO_LCKR_LCKK)) {\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  This function handles EXTI interrupt request.\r\n * @param  GPIO_Pin: Specifies the pins connected EXTI line\r\n * @retval None\r\n */\r\nvoid HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) {\r\n  /* EXTI line interrupt detected */\r\n  if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u) {\r\n    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);\r\n    HAL_GPIO_EXTI_Callback(GPIO_Pin);\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  EXTI line detection callbacks.\r\n * @param  GPIO_Pin: Specifies the pins connected EXTI line\r\n * @retval None\r\n */\r\n__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(GPIO_Pin);\r\n  /* NOTE: This function Should not be modified, when the callback is needed,\r\n           the HAL_GPIO_EXTI_Callback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_GPIO_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_gpio_ex.c\r\n  * @author  MCD Application Team\r\n  * @brief   GPIO Extension HAL module driver.\r\n  *         This file provides firmware functions to manage the following\r\n  *          functionalities of the General Purpose Input/Output (GPIO) extension peripheral.\r\n  *           + Extended features functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                    ##### GPIO Peripheral extension features #####\r\n  ==============================================================================\r\n  [..] GPIO module on STM32F1 family, manage also the AFIO register:\r\n       (+) Possibility to use the EVENTOUT Cortex feature\r\n\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..] This driver provides functions to use EVENTOUT Cortex feature\r\n    (#) Configure EVENTOUT Cortex feature using the function HAL_GPIOEx_ConfigEventout()\r\n    (#) Activate EVENTOUT Cortex feature using the HAL_GPIOEx_EnableEventout()\r\n    (#) Deactivate EVENTOUT Cortex feature using the HAL_GPIOEx_DisableEventout()\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIOEx GPIOEx\r\n * @brief GPIO HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_GPIO_MODULE_ENABLED\r\n\r\n/** @defgroup GPIOEx_Exported_Functions GPIOEx Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIOEx_Exported_Functions_Group1 Extended features functions\r\n *  @brief    Extended features functions\r\n *\r\n@verbatim\r\n  ==============================================================================\r\n                 ##### Extended features functions #####\r\n  ==============================================================================\r\n    [..]  This section provides functions allowing to:\r\n    (+) Configure EVENTOUT Cortex feature using the function HAL_GPIOEx_ConfigEventout()\r\n    (+) Activate EVENTOUT Cortex feature using the HAL_GPIOEx_EnableEventout()\r\n    (+) Deactivate EVENTOUT Cortex feature using the HAL_GPIOEx_DisableEventout()\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Configures the port and pin on which the EVENTOUT Cortex signal will be connected.\r\n * @param  GPIO_PortSource Select the port used to output the Cortex EVENTOUT signal.\r\n *   This parameter can be a value of @ref GPIOEx_EVENTOUT_PORT.\r\n * @param  GPIO_PinSource Select the pin used to output the Cortex EVENTOUT signal.\r\n *   This parameter can be a value of @ref GPIOEx_EVENTOUT_PIN.\r\n * @retval None\r\n */\r\nvoid HAL_GPIOEx_ConfigEventout(uint32_t GPIO_PortSource, uint32_t GPIO_PinSource) {\r\n  /* Verify the parameters */\r\n  assert_param(IS_AFIO_EVENTOUT_PORT(GPIO_PortSource));\r\n  assert_param(IS_AFIO_EVENTOUT_PIN(GPIO_PinSource));\r\n\r\n  /* Apply the new configuration */\r\n  MODIFY_REG(AFIO->EVCR, (AFIO_EVCR_PORT) | (AFIO_EVCR_PIN), (GPIO_PortSource) | (GPIO_PinSource));\r\n}\r\n\r\n/**\r\n * @brief  Enables the Event Output.\r\n * @retval None\r\n */\r\nvoid HAL_GPIOEx_EnableEventout(void) { SET_BIT(AFIO->EVCR, AFIO_EVCR_EVOE); }\r\n\r\n/**\r\n * @brief  Disables the Event Output.\r\n * @retval None\r\n */\r\nvoid HAL_GPIOEx_DisableEventout(void) { CLEAR_BIT(AFIO->EVCR, AFIO_EVCR_EVOE); }\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_GPIO_MODULE_ENABLED */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_iwdg.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_iwdg.c\r\n  * @author  MCD Application Team\r\n  * @brief   IWDG HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the Independent Watchdog (IWDG) peripheral:\r\n  *           + Initialization and Start functions\r\n  *           + IO operation functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                    ##### IWDG Generic features #####\r\n  ==============================================================================\r\n  [..]\r\n    (+) The IWDG can be started by either software or hardware (configurable\r\n        through option byte).\r\n\r\n    (+) The IWDG is clocked by the Low-Speed Internal clock (LSI) and thus stays\r\n        active even if the main clock fails.\r\n\r\n    (+) Once the IWDG is started, the LSI is forced ON and both cannot be\r\n        disabled. The counter starts counting down from the reset value (0xFFF).\r\n        When it reaches the end of count value (0x000) a reset signal is\r\n        generated (IWDG reset).\r\n\r\n    (+) Whenever the key value 0x0000 AAAA is written in the IWDG_KR register,\r\n        the IWDG_RLR value is reloaded into the counter and the watchdog reset\r\n        is prevented.\r\n\r\n    (+) The IWDG is implemented in the VDD voltage domain that is still functional\r\n        in STOP and STANDBY mode (IWDG reset can wake up the CPU from STANDBY).\r\n        IWDGRST flag in RCC_CSR register can be used to inform when an IWDG\r\n        reset occurs.\r\n\r\n    (+) Debug mode: When the microcontroller enters debug mode (core halted),\r\n        the IWDG counter either continues to work normally or stops, depending\r\n        on DBG_IWDG_STOP configuration bit in DBG module, accessible through\r\n        __HAL_DBGMCU_FREEZE_IWDG() and __HAL_DBGMCU_UNFREEZE_IWDG() macros.\r\n\r\n    [..] Min-max timeout value @32KHz (LSI): ~125us / ~32.7s\r\n         The IWDG timeout may vary due to LSI clock frequency dispersion.\r\n         STM32F1xx devices provide the capability to measure the LSI clock\r\n         frequency (LSI clock is internally connected to TIM5 CH4 input capture).\r\n         The measured value can be used to have an IWDG timeout with an\r\n         acceptable accuracy.\r\n\r\n    [..] Default timeout value (necessary for IWDG_SR status register update):\r\n         Constant LSI_VALUE is defined based on the nominal LSI clock frequency.\r\n         This frequency being subject to variations as mentioned above, the\r\n         default timeout value (defined through constant HAL_IWDG_DEFAULT_TIMEOUT\r\n         below) may become too short or too long.\r\n         In such cases, this default timeout value can be tuned by redefining\r\n         the constant LSI_VALUE at user-application level (based, for instance,\r\n         on the measured LSI clock frequency as explained above).\r\n\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..]\r\n    (#) Use IWDG using HAL_IWDG_Init() function to :\r\n      (++) Enable instance by writing Start keyword in IWDG_KEY register. LSI\r\n           clock is forced ON and IWDG counter starts counting down.\r\n      (++) Enable write access to configuration registers:\r\n          IWDG_PR and IWDG_RLR.\r\n      (++) Configure the IWDG prescaler and counter reload value. This reload\r\n           value will be loaded in the IWDG counter each time the watchdog is\r\n           reloaded, then the IWDG will start counting down from this value.\r\n      (++) Wait for status flags to be reset.\r\n\r\n    (#) Then the application program must refresh the IWDG counter at regular\r\n        intervals during normal operation to prevent an MCU reset, using\r\n        HAL_IWDG_Refresh() function.\r\n\r\n     *** IWDG HAL driver macros list ***\r\n     ====================================\r\n     [..]\r\n       Below the list of most used macros in IWDG HAL driver:\r\n      (+) __HAL_IWDG_START: Enable the IWDG peripheral\r\n      (+) __HAL_IWDG_RELOAD_COUNTER: Reloads IWDG counter with value defined in\r\n          the reload register\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_IWDG_MODULE_ENABLED\r\n/** @addtogroup IWDG\r\n * @brief IWDG HAL module driver.\r\n * @{\r\n */\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup IWDG_Private_Defines IWDG Private Defines\r\n * @{\r\n */\r\n/* Status register needs up to 5 LSI clock periods divided by the clock\r\n   prescaler to be updated. The number of LSI clock periods is upper-rounded to\r\n   6 for the timeout value calculation.\r\n   The timeout value is also calculated using the highest prescaler (256) and\r\n   the LSI_VALUE constant. The value of this constant can be changed by the user\r\n   to take into account possible LSI clock period variations.\r\n   The timeout value is multiplied by 1000 to be converted in milliseconds. */\r\n#define HAL_IWDG_DEFAULT_TIMEOUT ((6UL * 256UL * 1000UL) / LSI_VALUE)\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @addtogroup IWDG_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup IWDG_Exported_Functions_Group1\r\n  *  @brief    Initialization and Start functions.\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n          ##### Initialization and Start functions #####\r\n ===============================================================================\r\n [..]  This section provides functions allowing to:\r\n      (+) Initialize the IWDG according to the specified parameters in the\r\n          IWDG_InitTypeDef of associated handle.\r\n      (+) Once initialization is performed in HAL_IWDG_Init function, Watchdog\r\n          is reloaded in order to exit function with correct time base.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initialize the IWDG according to the specified parameters in the\r\n *         IWDG_InitTypeDef and start watchdog. Before exiting function,\r\n *         watchdog is refreshed in order to have correct time base.\r\n * @param  hiwdg  pointer to a IWDG_HandleTypeDef structure that contains\r\n *                the configuration information for the specified IWDG module.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg) {\r\n  uint32_t tickstart;\r\n\r\n  /* Check the IWDG handle allocation */\r\n  if (hiwdg == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_IWDG_ALL_INSTANCE(hiwdg->Instance));\r\n  assert_param(IS_IWDG_PRESCALER(hiwdg->Init.Prescaler));\r\n  assert_param(IS_IWDG_RELOAD(hiwdg->Init.Reload));\r\n\r\n  /* Enable IWDG. LSI is turned on automatically */\r\n  __HAL_IWDG_START(hiwdg);\r\n\r\n  /* Enable write access to IWDG_PR and IWDG_RLR registers by writing\r\n  0x5555 in KR */\r\n  IWDG_ENABLE_WRITE_ACCESS(hiwdg);\r\n\r\n  /* Write to IWDG registers the Prescaler & Reload values to work with */\r\n  hiwdg->Instance->PR  = hiwdg->Init.Prescaler;\r\n  hiwdg->Instance->RLR = hiwdg->Init.Reload;\r\n\r\n  /* Check pending flag, if previous update not done, return timeout */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Wait for register to be updated */\r\n  while (hiwdg->Instance->SR != 0x00u) {\r\n    if ((HAL_GetTick() - tickstart) > HAL_IWDG_DEFAULT_TIMEOUT) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Reload IWDG counter with value defined in the reload register */\r\n  __HAL_IWDG_RELOAD_COUNTER(hiwdg);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup IWDG_Exported_Functions_Group2\r\n  *  @brief   IO operation functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### IO operation functions #####\r\n ===============================================================================\r\n [..]  This section provides functions allowing to:\r\n      (+) Refresh the IWDG.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Refresh the IWDG.\r\n * @param  hiwdg  pointer to a IWDG_HandleTypeDef structure that contains\r\n *                the configuration information for the specified IWDG module.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg) {\r\n  /* Reload IWDG counter with value defined in the reload register */\r\n  __HAL_IWDG_RELOAD_COUNTER(hiwdg);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_IWDG_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_pwr.c\r\n * @author  MCD Application Team\r\n * @brief   PWR HAL module driver.\r\n *\r\n *          This file provides firmware functions to manage the following\r\n *          functionalities of the Power Controller (PWR) peripheral:\r\n *           + Initialization/de-initialization functions\r\n *           + Peripheral Control functions\r\n *\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup PWR PWR\r\n * @brief    PWR HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_PWR_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n\r\n/** @defgroup PWR_Private_Constants PWR Private Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup PWR_PVD_Mode_Mask PWR PVD Mode Mask\r\n * @{\r\n */\r\n#define PVD_MODE_IT      0x00010000U\r\n#define PVD_MODE_EVT     0x00020000U\r\n#define PVD_RISING_EDGE  0x00000001U\r\n#define PVD_FALLING_EDGE 0x00000002U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_register_alias_address PWR Register alias address\r\n * @{\r\n */\r\n/* ------------- PWR registers bit address in the alias region ---------------*/\r\n#define PWR_OFFSET        (PWR_BASE - PERIPH_BASE)\r\n#define PWR_CR_OFFSET     0x00U\r\n#define PWR_CSR_OFFSET    0x04U\r\n#define PWR_CR_OFFSET_BB  (PWR_OFFSET + PWR_CR_OFFSET)\r\n#define PWR_CSR_OFFSET_BB (PWR_OFFSET + PWR_CSR_OFFSET)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_CR_register_alias PWR CR Register alias address\r\n * @{\r\n */\r\n/* --- CR Register ---*/\r\n/* Alias word address of LPSDSR bit */\r\n#define LPSDSR_BIT_NUMBER PWR_CR_LPDS_Pos\r\n#define CR_LPSDSR_BB      ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (LPSDSR_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of DBP bit */\r\n#define DBP_BIT_NUMBER PWR_CR_DBP_Pos\r\n#define CR_DBP_BB      ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (DBP_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of PVDE bit */\r\n#define PVDE_BIT_NUMBER PWR_CR_PVDE_Pos\r\n#define CR_PVDE_BB      ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (PVDE_BIT_NUMBER * 4U)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_CSR_register_alias PWR CSR Register alias address\r\n * @{\r\n */\r\n\r\n/* --- CSR Register ---*/\r\n/* Alias word address of EWUP1 bit */\r\n#define CSR_EWUP_BB(VAL) ((uint32_t)(PERIPH_BB_BASE + (PWR_CSR_OFFSET_BB * 32U) + (POSITION_VAL(VAL) * 4U)))\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @defgroup PWR_Private_Functions PWR Private Functions\r\n * brief   WFE cortex command overloaded for HAL_PWR_EnterSTOPMode usage only (see Workaround section)\r\n * @{\r\n */\r\nstatic void PWR_OverloadWfe(void);\r\n\r\n/* Private functions ---------------------------------------------------------*/\r\n__NOINLINE\r\nstatic void PWR_OverloadWfe(void) {\r\n  __asm volatile(\"wfe\");\r\n  __asm volatile(\"nop\");\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_Exported_Functions PWR Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions\r\n  *  @brief   Initialization and de-initialization functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n              ##### Initialization and de-initialization functions #####\r\n ===============================================================================\r\n    [..]\r\n      After reset, the backup domain (RTC registers, RTC backup data\r\n      registers) is protected against possible unwanted\r\n      write accesses.\r\n      To enable access to the RTC Domain and RTC registers, proceed as follows:\r\n        (+) Enable the Power Controller (PWR) APB1 interface clock using the\r\n            __HAL_RCC_PWR_CLK_ENABLE() macro.\r\n        (+) Enable access to RTC domain using the HAL_PWR_EnableBkUpAccess() function.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Deinitializes the PWR peripheral registers to their default reset values.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DeInit(void) {\r\n  __HAL_RCC_PWR_FORCE_RESET();\r\n  __HAL_RCC_PWR_RELEASE_RESET();\r\n}\r\n\r\n/**\r\n * @brief  Enables access to the backup domain (RTC registers, RTC\r\n *         backup data registers ).\r\n * @note   If the HSE divided by 128 is used as the RTC clock, the\r\n *         Backup Domain Access should be kept enabled.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnableBkUpAccess(void) {\r\n  /* Enable access to RTC and backup registers */\r\n  *(__IO uint32_t *)CR_DBP_BB = (uint32_t)ENABLE;\r\n}\r\n\r\n/**\r\n * @brief  Disables access to the backup domain (RTC registers, RTC\r\n *         backup data registers).\r\n * @note   If the HSE divided by 128 is used as the RTC clock, the\r\n *         Backup Domain Access should be kept enabled.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DisableBkUpAccess(void) {\r\n  /* Disable access to RTC and backup registers */\r\n  *(__IO uint32_t *)CR_DBP_BB = (uint32_t)DISABLE;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_Exported_Functions_Group2 Peripheral Control functions\r\n  * @brief    Low Power modes configuration functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                 ##### Peripheral Control functions #####\r\n ===============================================================================\r\n\r\n    *** PVD configuration ***\r\n    =========================\r\n    [..]\r\n      (+) The PVD is used to monitor the VDD power supply by comparing it to a\r\n          threshold selected by the PVD Level (PLS[2:0] bits in the PWR_CR).\r\n\r\n      (+) A PVDO flag is available to indicate if VDD/VDDA is higher or lower\r\n          than the PVD threshold. This event is internally connected to the EXTI\r\n          line16 and can generate an interrupt if enabled. This is done through\r\n          __HAL_PVD_EXTI_ENABLE_IT() macro.\r\n      (+) The PVD is stopped in Standby mode.\r\n\r\n    *** WakeUp pin configuration ***\r\n    ================================\r\n    [..]\r\n      (+) WakeUp pin is used to wake up the system from Standby mode. This pin is\r\n          forced in input pull-down configuration and is active on rising edges.\r\n      (+) There is one WakeUp pin:\r\n          WakeUp Pin 1 on PA.00.\r\n\r\n    [..]\r\n\r\n    *** Low Power modes configuration ***\r\n    =====================================\r\n     [..]\r\n      The device features 3 low-power modes:\r\n      (+) Sleep mode: CPU clock off, all peripherals including Cortex-M3 core peripherals like\r\n                      NVIC, SysTick, etc. are kept running\r\n      (+) Stop mode: All clocks are stopped\r\n      (+) Standby mode: 1.8V domain powered off\r\n\r\n\r\n   *** Sleep mode ***\r\n   ==================\r\n    [..]\r\n      (+) Entry:\r\n          The Sleep mode is entered by using the HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFx)\r\n              functions with\r\n          (++) PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction\r\n          (++) PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction\r\n\r\n      (+) Exit:\r\n        (++) WFI entry mode, Any peripheral interrupt acknowledged by the nested vectored interrupt\r\n             controller (NVIC) can wake up the device from Sleep mode.\r\n        (++) WFE entry mode, Any wakeup event can wake up the device from Sleep mode.\r\n           (+++) Any peripheral interrupt w/o NVIC configuration & SEVONPEND bit set in the Cortex (HAL_PWR_EnableSEVOnPend)\r\n           (+++) Any EXTI Line (Internal or External) configured in Event mode\r\n\r\n   *** Stop mode ***\r\n   =================\r\n    [..]\r\n      The Stop mode is based on the Cortex-M3 deepsleep mode combined with peripheral\r\n      clock gating. The voltage regulator can be configured either in normal or low-power mode.\r\n      In Stop mode, all clocks in the 1.8 V domain are stopped, the PLL, the HSI and the HSE RC\r\n      oscillators are disabled. SRAM and register contents are preserved.\r\n      In Stop mode, all I/O pins keep the same state as in Run mode.\r\n\r\n      (+) Entry:\r\n           The Stop mode is entered using the HAL_PWR_EnterSTOPMode(PWR_REGULATOR_VALUE, PWR_SLEEPENTRY_WFx )\r\n             function with:\r\n          (++) PWR_REGULATOR_VALUE= PWR_MAINREGULATOR_ON: Main regulator ON.\r\n          (++) PWR_REGULATOR_VALUE= PWR_LOWPOWERREGULATOR_ON: Low Power regulator ON.\r\n          (++) PWR_SLEEPENTRY_WFx= PWR_SLEEPENTRY_WFI: enter STOP mode with WFI instruction\r\n          (++) PWR_SLEEPENTRY_WFx= PWR_SLEEPENTRY_WFE: enter STOP mode with WFE instruction\r\n      (+) Exit:\r\n          (++) WFI entry mode, Any EXTI Line (Internal or External) configured in Interrupt mode with NVIC configured\r\n          (++) WFE entry mode, Any EXTI Line (Internal or External) configured in Event mode.\r\n\r\n   *** Standby mode ***\r\n   ====================\r\n     [..]\r\n      The Standby mode allows to achieve the lowest power consumption. It is based on the\r\n      Cortex-M3 deepsleep mode, with the voltage regulator disabled. The 1.8 V domain is\r\n      consequently powered off. The PLL, the HSI oscillator and the HSE oscillator are also\r\n      switched off. SRAM and register contents are lost except for registers in the Backup domain\r\n      and Standby circuitry\r\n\r\n      (+) Entry:\r\n        (++) The Standby mode is entered using the HAL_PWR_EnterSTANDBYMode() function.\r\n      (+) Exit:\r\n        (++) WKUP pin rising edge, RTC alarm event rising edge, external Reset in\r\n             NRSTpin, IWDG Reset\r\n\r\n   *** Auto-wakeup (AWU) from low-power mode ***\r\n       =============================================\r\n       [..]\r\n\r\n       (+) The MCU can be woken up from low-power mode by an RTC Alarm event,\r\n           without depending on an external interrupt (Auto-wakeup mode).\r\n\r\n       (+) RTC auto-wakeup (AWU) from the Stop and Standby modes\r\n\r\n           (++) To wake up from the Stop mode with an RTC alarm event, it is necessary to\r\n                configure the RTC to generate the RTC alarm using the HAL_RTC_SetAlarm_IT() function.\r\n\r\n   *** PWR Workarounds linked to Silicon Limitation ***\r\n       ====================================================\r\n       [..]\r\n       Below the list of all silicon limitations known on STM32F1xx prouct.\r\n\r\n       (#)Workarounds Implemented inside PWR HAL Driver\r\n          (##)Debugging Stop mode with WFE entry - overloaded the WFE by an internal function\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Configures the voltage threshold detected by the Power Voltage Detector(PVD).\r\n * @param  sConfigPVD: pointer to an PWR_PVDTypeDef structure that contains the configuration\r\n *         information for the PVD.\r\n * @note   Refer to the electrical characteristics of your device datasheet for\r\n *         more details about the voltage threshold corresponding to each\r\n *         detection level.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD) {\r\n  /* Check the parameters */\r\n  assert_param(IS_PWR_PVD_LEVEL(sConfigPVD->PVDLevel));\r\n  assert_param(IS_PWR_PVD_MODE(sConfigPVD->Mode));\r\n\r\n  /* Set PLS[7:5] bits according to PVDLevel value */\r\n  MODIFY_REG(PWR->CR, PWR_CR_PLS, sConfigPVD->PVDLevel);\r\n\r\n  /* Clear any previous config. Keep it clear if no event or IT mode is selected */\r\n  __HAL_PWR_PVD_EXTI_DISABLE_EVENT();\r\n  __HAL_PWR_PVD_EXTI_DISABLE_IT();\r\n  __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE();\r\n  __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();\r\n\r\n  /* Configure interrupt mode */\r\n  if ((sConfigPVD->Mode & PVD_MODE_IT) == PVD_MODE_IT) {\r\n    __HAL_PWR_PVD_EXTI_ENABLE_IT();\r\n  }\r\n\r\n  /* Configure event mode */\r\n  if ((sConfigPVD->Mode & PVD_MODE_EVT) == PVD_MODE_EVT) {\r\n    __HAL_PWR_PVD_EXTI_ENABLE_EVENT();\r\n  }\r\n\r\n  /* Configure the edge */\r\n  if ((sConfigPVD->Mode & PVD_RISING_EDGE) == PVD_RISING_EDGE) {\r\n    __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();\r\n  }\r\n\r\n  if ((sConfigPVD->Mode & PVD_FALLING_EDGE) == PVD_FALLING_EDGE) {\r\n    __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE();\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Enables the Power Voltage Detector(PVD).\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnablePVD(void) {\r\n  /* Enable the power voltage detector */\r\n  *(__IO uint32_t *)CR_PVDE_BB = (uint32_t)ENABLE;\r\n}\r\n\r\n/**\r\n * @brief  Disables the Power Voltage Detector(PVD).\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DisablePVD(void) {\r\n  /* Disable the power voltage detector */\r\n  *(__IO uint32_t *)CR_PVDE_BB = (uint32_t)DISABLE;\r\n}\r\n\r\n/**\r\n * @brief Enables the WakeUp PINx functionality.\r\n * @param WakeUpPinx: Specifies the Power Wake-Up pin to enable.\r\n *        This parameter can be one of the following values:\r\n *           @arg PWR_WAKEUP_PIN1\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx) {\r\n  /* Check the parameter */\r\n  assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx));\r\n  /* Enable the EWUPx pin */\r\n  *(__IO uint32_t *)CSR_EWUP_BB(WakeUpPinx) = (uint32_t)ENABLE;\r\n}\r\n\r\n/**\r\n * @brief Disables the WakeUp PINx functionality.\r\n * @param WakeUpPinx: Specifies the Power Wake-Up pin to disable.\r\n *        This parameter can be one of the following values:\r\n *           @arg PWR_WAKEUP_PIN1\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx) {\r\n  /* Check the parameter */\r\n  assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx));\r\n  /* Disable the EWUPx pin */\r\n  *(__IO uint32_t *)CSR_EWUP_BB(WakeUpPinx) = (uint32_t)DISABLE;\r\n}\r\n\r\n/**\r\n * @brief Enters Sleep mode.\r\n * @note  In Sleep mode, all I/O pins keep the same state as in Run mode.\r\n * @param Regulator: Regulator state as no effect in SLEEP mode -  allows to support portability from legacy software\r\n * @param SLEEPEntry: Specifies if SLEEP mode is entered with WFI or WFE instruction.\r\n *           When WFI entry is used, tick interrupt have to be disabled if not desired as\r\n *           the interrupt wake up source.\r\n *           This parameter can be one of the following values:\r\n *            @arg PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction\r\n *            @arg PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry) {\r\n  /* Check the parameters */\r\n  /* No check on Regulator because parameter not used in SLEEP mode */\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(Regulator);\r\n\r\n  assert_param(IS_PWR_SLEEP_ENTRY(SLEEPEntry));\r\n\r\n  /* Clear SLEEPDEEP bit of Cortex System Control Register */\r\n  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));\r\n\r\n  /* Select SLEEP mode entry -------------------------------------------------*/\r\n  if (SLEEPEntry == PWR_SLEEPENTRY_WFI) {\r\n    /* Request Wait For Interrupt */\r\n    __WFI();\r\n  } else {\r\n    /* Request Wait For Event */\r\n    __SEV();\r\n    __WFE();\r\n    __WFE();\r\n  }\r\n}\r\n\r\n/**\r\n * @brief Enters Stop mode.\r\n * @note  In Stop mode, all I/O pins keep the same state as in Run mode.\r\n * @note  When exiting Stop mode by using an interrupt or a wakeup event,\r\n *        HSI RC oscillator is selected as system clock.\r\n * @note  When the voltage regulator operates in low power mode, an additional\r\n *         startup delay is incurred when waking up from Stop mode.\r\n *         By keeping the internal regulator ON during Stop mode, the consumption\r\n *         is higher although the startup time is reduced.\r\n * @param Regulator: Specifies the regulator state in Stop mode.\r\n *          This parameter can be one of the following values:\r\n *            @arg PWR_MAINREGULATOR_ON: Stop mode with regulator ON\r\n *            @arg PWR_LOWPOWERREGULATOR_ON: Stop mode with low power regulator ON\r\n * @param STOPEntry: Specifies if Stop mode in entered with WFI or WFE instruction.\r\n *          This parameter can be one of the following values:\r\n *            @arg PWR_STOPENTRY_WFI: Enter Stop mode with WFI instruction\r\n *            @arg PWR_STOPENTRY_WFE: Enter Stop mode with WFE instruction\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry) {\r\n  /* Check the parameters */\r\n  assert_param(IS_PWR_REGULATOR(Regulator));\r\n  assert_param(IS_PWR_STOP_ENTRY(STOPEntry));\r\n\r\n  /* Clear PDDS bit in PWR register to specify entering in STOP mode when CPU enter in Deepsleep */\r\n  CLEAR_BIT(PWR->CR, PWR_CR_PDDS);\r\n\r\n  /* Select the voltage regulator mode by setting LPDS bit in PWR register according to Regulator parameter value */\r\n  MODIFY_REG(PWR->CR, PWR_CR_LPDS, Regulator);\r\n\r\n  /* Set SLEEPDEEP bit of Cortex System Control Register */\r\n  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));\r\n\r\n  /* Select Stop mode entry --------------------------------------------------*/\r\n  if (STOPEntry == PWR_STOPENTRY_WFI) {\r\n    /* Request Wait For Interrupt */\r\n    __WFI();\r\n  } else {\r\n    /* Request Wait For Event */\r\n    __SEV();\r\n    PWR_OverloadWfe(); /* WFE redefine locally */\r\n    PWR_OverloadWfe(); /* WFE redefine locally */\r\n  }\r\n  /* Reset SLEEPDEEP bit of Cortex System Control Register */\r\n  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));\r\n}\r\n\r\n/**\r\n * @brief Enters Standby mode.\r\n * @note  In Standby mode, all I/O pins are high impedance except for:\r\n *          - Reset pad (still available)\r\n *          - TAMPER pin if configured for tamper or calibration out.\r\n *          - WKUP pin (PA0) if enabled.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnterSTANDBYMode(void) {\r\n  /* Select Standby mode */\r\n  SET_BIT(PWR->CR, PWR_CR_PDDS);\r\n\r\n  /* Set SLEEPDEEP bit of Cortex System Control Register */\r\n  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));\r\n\r\n  /* This option is used to ensure that store operations are completed */\r\n#if defined(__CC_ARM)\r\n  __force_stores();\r\n#endif\r\n  /* Request Wait For Interrupt */\r\n  __WFI();\r\n}\r\n\r\n/**\r\n * @brief Indicates Sleep-On-Exit when returning from Handler mode to Thread mode.\r\n * @note Set SLEEPONEXIT bit of SCR register. When this bit is set, the processor\r\n *       re-enters SLEEP mode when an interruption handling is over.\r\n *       Setting this bit is useful when the processor is expected to run only on\r\n *       interruptions handling.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnableSleepOnExit(void) {\r\n  /* Set SLEEPONEXIT bit of Cortex System Control Register */\r\n  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));\r\n}\r\n\r\n/**\r\n * @brief Disables Sleep-On-Exit feature when returning from Handler mode to Thread mode.\r\n * @note Clears SLEEPONEXIT bit of SCR register. When this bit is set, the processor\r\n *       re-enters SLEEP mode when an interruption handling is over.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DisableSleepOnExit(void) {\r\n  /* Clear SLEEPONEXIT bit of Cortex System Control Register */\r\n  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));\r\n}\r\n\r\n/**\r\n * @brief Enables CORTEX M3 SEVONPEND bit.\r\n * @note Sets SEVONPEND bit of SCR register. When this bit is set, this causes\r\n *       WFE to wake up when an interrupt moves from inactive to pended.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnableSEVOnPend(void) {\r\n  /* Set SEVONPEND bit of Cortex System Control Register */\r\n  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));\r\n}\r\n\r\n/**\r\n * @brief Disables CORTEX M3 SEVONPEND bit.\r\n * @note Clears SEVONPEND bit of SCR register. When this bit is set, this causes\r\n *       WFE to wake up when an interrupt moves from inactive to pended.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DisableSEVOnPend(void) {\r\n  /* Clear SEVONPEND bit of Cortex System Control Register */\r\n  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));\r\n}\r\n\r\n/**\r\n * @brief  This function handles the PWR PVD interrupt request.\r\n * @note   This API should be called under the PVD_IRQHandler().\r\n * @retval None\r\n */\r\nvoid HAL_PWR_PVD_IRQHandler(void) {\r\n  /* Check PWR exti flag */\r\n  if (__HAL_PWR_PVD_EXTI_GET_FLAG() != RESET) {\r\n    /* PWR PVD interrupt user callback */\r\n    HAL_PWR_PVDCallback();\r\n\r\n    /* Clear PWR Exti pending bit */\r\n    __HAL_PWR_PVD_EXTI_CLEAR_FLAG();\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  PWR PVD interrupt callback\r\n * @retval None\r\n */\r\n__weak void HAL_PWR_PVDCallback(void) {\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_PWR_PVDCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_PWR_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_rcc.c\r\n  * @author  MCD Application Team\r\n  * @brief   RCC HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the Reset and Clock Control (RCC) peripheral:\r\n  *           + Initialization and de-initialization functions\r\n  *           + Peripheral Control functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                      ##### RCC specific features #####\r\n  ==============================================================================\r\n    [..]\r\n      After reset the device is running from Internal High Speed oscillator\r\n      (HSI 8MHz) with Flash 0 wait state, Flash prefetch buffer is enabled,\r\n      and all peripherals are off except internal SRAM, Flash and JTAG.\r\n      (+) There is no prescaler on High speed (AHB) and Low speed (APB) buses;\r\n          all peripherals mapped on these buses are running at HSI speed.\r\n      (+) The clock for all peripherals is switched off, except the SRAM and FLASH.\r\n      (+) All GPIOs are in input floating state, except the JTAG pins which\r\n          are assigned to be used for debug purpose.\r\n    [..] Once the device started from reset, the user application has to:\r\n      (+) Configure the clock source to be used to drive the System clock\r\n          (if the application needs higher frequency/performance)\r\n      (+) Configure the System clock frequency and Flash settings\r\n      (+) Configure the AHB and APB buses prescalers\r\n      (+) Enable the clock for the peripheral(s) to be used\r\n      (+) Configure the clock source(s) for peripherals whose clocks are not\r\n          derived from the System clock (I2S, RTC, ADC, USB OTG FS)\r\n\r\n                      ##### RCC Limitations #####\r\n  ==============================================================================\r\n    [..]\r\n      A delay between an RCC peripheral clock enable and the effective peripheral\r\n      enabling should be taken into account in order to manage the peripheral read/write\r\n      from/to registers.\r\n      (+) This delay depends on the peripheral mapping.\r\n        (++) AHB & APB peripherals, 1 dummy read is necessary\r\n\r\n    [..]\r\n      Workarounds:\r\n      (#) For AHB & APB peripherals, a dummy read to the peripheral register has been\r\n          inserted in each __HAL_RCC_PPP_CLK_ENABLE() macro.\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup RCC RCC\r\n * @brief RCC HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_RCC_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup RCC_Private_Constants RCC Private Constants\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n/* Private macro -------------------------------------------------------------*/\r\n/** @defgroup RCC_Private_Macros RCC Private Macros\r\n * @{\r\n */\r\n\r\n#define MCO1_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()\r\n#define MCO1_GPIO_PORT    GPIOA\r\n#define MCO1_PIN          GPIO_PIN_8\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private variables ---------------------------------------------------------*/\r\n/** @defgroup RCC_Private_Variables RCC Private Variables\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private function prototypes -----------------------------------------------*/\r\nstatic void RCC_Delay(uint32_t mdelay);\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @defgroup RCC_Exported_Functions RCC Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup RCC_Exported_Functions_Group1 Initialization and de-initialization functions\r\n  *  @brief    Initialization and Configuration functions\r\n  *\r\n  @verbatim\r\n  ===============================================================================\r\n           ##### Initialization and de-initialization functions #####\r\n  ===============================================================================\r\n    [..]\r\n      This section provides functions allowing to configure the internal/external oscillators\r\n      (HSE, HSI, LSE, LSI, PLL, CSS and MCO) and the System buses clocks (SYSCLK, AHB, APB1\r\n      and APB2).\r\n\r\n    [..] Internal/external clock and PLL configuration\r\n      (#) HSI (high-speed internal), 8 MHz factory-trimmed RC used directly or through\r\n          the PLL as System clock source.\r\n      (#) LSI (low-speed internal), ~40 KHz low consumption RC used as IWDG and/or RTC\r\n          clock source.\r\n\r\n      (#) HSE (high-speed external), 4 to 24 MHz (STM32F100xx) or 4 to 16 MHz (STM32F101x/STM32F102x/STM32F103x) or 3 to 25 MHz (STM32F105x/STM32F107x)  crystal oscillator used directly or\r\n          through the PLL as System clock source. Can be used also as RTC clock source.\r\n\r\n      (#) LSE (low-speed external), 32 KHz oscillator used as RTC clock source.\r\n\r\n      (#) PLL (clocked by HSI or HSE), featuring different output clocks:\r\n        (++) The first output is used to generate the high speed system clock (up to 72 MHz for STM32F10xxx or up to 24 MHz for STM32F100xx)\r\n        (++) The second output is used to generate the clock for the USB OTG FS (48 MHz)\r\n\r\n      (#) CSS (Clock security system), once enable using the macro __HAL_RCC_CSS_ENABLE()\r\n          and if a HSE clock failure occurs(HSE used directly or through PLL as System\r\n          clock source), the System clocks automatically switched to HSI and an interrupt\r\n          is generated if enabled. The interrupt is linked to the Cortex-M3 NMI\r\n          (Non-Maskable Interrupt) exception vector.\r\n\r\n      (#) MCO1 (microcontroller clock output), used to output SYSCLK, HSI,\r\n          HSE or PLL clock (divided by 2) on PA8 pin + PLL2CLK, PLL3CLK/2, PLL3CLK and XTI for STM32F105x/STM32F107x\r\n\r\n    [..] System, AHB and APB buses clocks configuration\r\n      (#) Several clock sources can be used to drive the System clock (SYSCLK): HSI,\r\n          HSE and PLL.\r\n          The AHB clock (HCLK) is derived from System clock through configurable\r\n          prescaler and used to clock the CPU, memory and peripherals mapped\r\n          on AHB bus (DMA, GPIO...). APB1 (PCLK1) and APB2 (PCLK2) clocks are derived\r\n          from AHB clock through configurable prescalers and used to clock\r\n          the peripherals mapped on these buses. You can use\r\n          \"@ref HAL_RCC_GetSysClockFreq()\" function to retrieve the frequencies of these clocks.\r\n\r\n      -@- All the peripheral clocks are derived from the System clock (SYSCLK) except:\r\n          (+@) RTC: RTC clock can be derived either from the LSI, LSE or HSE clock\r\n              divided by 128.\r\n          (+@) USB OTG FS and RTC: USB OTG FS require a frequency equal to 48 MHz\r\n              to work correctly. This clock is derived of the main PLL through PLL Multiplier.\r\n          (+@) I2S interface on STM32F105x/STM32F107x can be derived from PLL3CLK\r\n          (+@) IWDG clock which is always the LSI clock.\r\n\r\n      (#) For STM32F10xxx, the maximum frequency of the SYSCLK and HCLK/PCLK2 is 72 MHz, PCLK1 36 MHz.\r\n          For STM32F100xx, the maximum frequency of the SYSCLK and HCLK/PCLK1/PCLK2 is 24 MHz.\r\n          Depending on the SYSCLK frequency, the flash latency should be adapted accordingly.\r\n  @endverbatim\r\n  * @{\r\n  */\r\n\r\n/*\r\n  Additional consideration on the SYSCLK based on Latency settings:\r\n        +-----------------------------------------------+\r\n        | Latency       | SYSCLK clock frequency (MHz)  |\r\n        |---------------|-------------------------------|\r\n        |0WS(1CPU cycle)|       0 < SYSCLK <= 24        |\r\n        |---------------|-------------------------------|\r\n        |1WS(2CPU cycle)|      24 < SYSCLK <= 48        |\r\n        |---------------|-------------------------------|\r\n        |2WS(3CPU cycle)|      48 < SYSCLK <= 72        |\r\n        +-----------------------------------------------+\r\n  */\r\n\r\n/**\r\n * @brief  Resets the RCC clock configuration to the default reset state.\r\n * @note   The default reset state of the clock configuration is given below:\r\n *            - HSI ON and used as system clock source\r\n *            - HSE, PLL, PLL2 and PLL3 are OFF\r\n *            - AHB, APB1 and APB2 prescaler set to 1.\r\n *            - CSS and MCO1 OFF\r\n *            - All interrupts disabled\r\n *            - All flags are cleared\r\n * @note   This function does not modify the configuration of the\r\n *            - Peripheral clocks\r\n *            - LSI, LSE and RTC clocks\r\n * @retval HAL_StatusTypeDef\r\n */\r\nHAL_StatusTypeDef HAL_RCC_DeInit(void) {\r\n  uint32_t tickstart;\r\n\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Set HSION bit */\r\n  SET_BIT(RCC->CR, RCC_CR_HSION);\r\n\r\n  /* Wait till HSI is ready */\r\n  while (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RESET) {\r\n    if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Set HSITRIM bits to the reset value */\r\n  MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, (0x10U << RCC_CR_HSITRIM_Pos));\r\n\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Reset CFGR register */\r\n  CLEAR_REG(RCC->CFGR);\r\n\r\n  /* Wait till clock switch is ready */\r\n  while (READ_BIT(RCC->CFGR, RCC_CFGR_SWS) != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Update the SystemCoreClock global variable */\r\n  SystemCoreClock = HSI_VALUE;\r\n\r\n  /* Adapt Systick interrupt period */\r\n  if (HAL_InitTick(uwTickPrio) != HAL_OK) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Second step is to clear PLLON bit */\r\n  CLEAR_BIT(RCC->CR, RCC_CR_PLLON);\r\n\r\n  /* Wait till PLL is disabled */\r\n  while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Ensure to reset PLLSRC and PLLMUL bits */\r\n  CLEAR_REG(RCC->CFGR);\r\n\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Reset HSEON & CSSON bits */\r\n  CLEAR_BIT(RCC->CR, RCC_CR_HSEON | RCC_CR_CSSON);\r\n\r\n  /* Wait till HSE is disabled */\r\n  while (READ_BIT(RCC->CR, RCC_CR_HSERDY) != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Reset HSEBYP bit */\r\n  CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);\r\n\r\n#if defined(RCC_PLL2_SUPPORT)\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Clear PLL2ON bit */\r\n  CLEAR_BIT(RCC->CR, RCC_CR_PLL2ON);\r\n\r\n  /* Wait till PLL2 is disabled */\r\n  while (READ_BIT(RCC->CR, RCC_CR_PLL2RDY) != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n#endif /* RCC_PLL2_SUPPORT */\r\n\r\n#if defined(RCC_PLLI2S_SUPPORT)\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Clear PLL3ON bit */\r\n  CLEAR_BIT(RCC->CR, RCC_CR_PLL3ON);\r\n\r\n  /* Wait till PLL3 is disabled */\r\n  while (READ_BIT(RCC->CR, RCC_CR_PLL3RDY) != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n#endif /* RCC_PLLI2S_SUPPORT */\r\n\r\n#if defined(RCC_CFGR2_PREDIV1)\r\n  /* Reset CFGR2 register */\r\n  CLEAR_REG(RCC->CFGR2);\r\n#endif /* RCC_CFGR2_PREDIV1 */\r\n\r\n  /* Reset all CSR flags */\r\n  SET_BIT(RCC->CSR, RCC_CSR_RMVF);\r\n\r\n  /* Disable all interrupts */\r\n  CLEAR_REG(RCC->CIR);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the RCC Oscillators according to the specified parameters in the\r\n *         RCC_OscInitTypeDef.\r\n * @param  RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that\r\n *         contains the configuration information for the RCC Oscillators.\r\n * @note   The PLL is not disabled when used as system clock.\r\n * @note   The PLL is not disabled when USB OTG FS clock is enabled (specific to devices with USB FS)\r\n * @note   Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not\r\n *         supported by this macro. User should request a transition to LSE Off\r\n *         first and then LSE On or LSE Bypass.\r\n * @note   Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not\r\n *         supported by this macro. User should request a transition to HSE Off\r\n *         first and then HSE On or HSE Bypass.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) {\r\n  uint32_t tickstart;\r\n  uint32_t pll_config;\r\n\r\n  /* Check Null pointer */\r\n  if (RCC_OscInitStruct == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));\r\n\r\n  /*------------------------------- HSE Configuration ------------------------*/\r\n  if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));\r\n\r\n    /* When the HSE is used as system clock or clock source for PLL in these cases it is not allowed to be disabled */\r\n    if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE) || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE))) {\r\n      if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF)) {\r\n        return HAL_ERROR;\r\n      }\r\n    } else {\r\n      /* Set the new HSE configuration ---------------------------------------*/\r\n      __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);\r\n\r\n      /* Check the HSE State */\r\n      if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF) {\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till HSE is ready */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) {\r\n          if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      } else {\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till HSE is disabled */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) {\r\n          if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n  /*----------------------------- HSI Configuration --------------------------*/\r\n  if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));\r\n    assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));\r\n\r\n    /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */\r\n    if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI) ||\r\n        ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSI_DIV2))) {\r\n      /* When HSI is used as system clock it will not disabled */\r\n      if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) {\r\n        return HAL_ERROR;\r\n      }\r\n      /* Otherwise, just the calibration is allowed */\r\n      else {\r\n        /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/\r\n        __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);\r\n      }\r\n    } else {\r\n      /* Check the HSI State */\r\n      if (RCC_OscInitStruct->HSIState != RCC_HSI_OFF) {\r\n        /* Enable the Internal High Speed oscillator (HSI). */\r\n        __HAL_RCC_HSI_ENABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till HSI is ready */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) {\r\n          if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n\r\n        /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/\r\n        __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);\r\n      } else {\r\n        /* Disable the Internal High Speed oscillator (HSI). */\r\n        __HAL_RCC_HSI_DISABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till HSI is disabled */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) {\r\n          if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n  /*------------------------------ LSI Configuration -------------------------*/\r\n  if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));\r\n\r\n    /* Check the LSI State */\r\n    if (RCC_OscInitStruct->LSIState != RCC_LSI_OFF) {\r\n      /* Enable the Internal Low Speed oscillator (LSI). */\r\n      __HAL_RCC_LSI_ENABLE();\r\n\r\n      /* Get Start Tick */\r\n      tickstart = HAL_GetTick();\r\n\r\n      /* Wait till LSI is ready */\r\n      while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET) {\r\n        if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n      /*  To have a fully stabilized clock in the specified range, a software delay of 1ms\r\n          should be added.*/\r\n      RCC_Delay(1);\r\n    } else {\r\n      /* Disable the Internal Low Speed oscillator (LSI). */\r\n      __HAL_RCC_LSI_DISABLE();\r\n\r\n      /* Get Start Tick */\r\n      tickstart = HAL_GetTick();\r\n\r\n      /* Wait till LSI is disabled */\r\n      while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET) {\r\n        if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n  }\r\n  /*------------------------------ LSE Configuration -------------------------*/\r\n  if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE) {\r\n    FlagStatus pwrclkchanged = RESET;\r\n\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));\r\n\r\n    /* Update LSE configuration in Backup Domain control register    */\r\n    /* Requires to enable write access to Backup Domain of necessary */\r\n    if (__HAL_RCC_PWR_IS_CLK_DISABLED()) {\r\n      __HAL_RCC_PWR_CLK_ENABLE();\r\n      pwrclkchanged = SET;\r\n    }\r\n\r\n    if (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) {\r\n      /* Enable write access to Backup domain */\r\n      SET_BIT(PWR->CR, PWR_CR_DBP);\r\n\r\n      /* Wait for Backup domain Write protection disable */\r\n      tickstart = HAL_GetTick();\r\n\r\n      while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) {\r\n        if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    /* Set the new LSE configuration -----------------------------------------*/\r\n    __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);\r\n    /* Check the LSE State */\r\n    if (RCC_OscInitStruct->LSEState != RCC_LSE_OFF) {\r\n      /* Get Start Tick */\r\n      tickstart = HAL_GetTick();\r\n\r\n      /* Wait till LSE is ready */\r\n      while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) {\r\n        if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    } else {\r\n      /* Get Start Tick */\r\n      tickstart = HAL_GetTick();\r\n\r\n      /* Wait till LSE is disabled */\r\n      while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET) {\r\n        if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    /* Require to disable power clock if necessary */\r\n    if (pwrclkchanged == SET) {\r\n      __HAL_RCC_PWR_CLK_DISABLE();\r\n    }\r\n  }\r\n\r\n#if defined(RCC_CR_PLL2ON)\r\n  /*-------------------------------- PLL2 Configuration -----------------------*/\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_PLL2(RCC_OscInitStruct->PLL2.PLL2State));\r\n  if ((RCC_OscInitStruct->PLL2.PLL2State) != RCC_PLL2_NONE) {\r\n    /* This bit can not be cleared if the PLL2 clock is used indirectly as system\r\n      clock (i.e. it is used as PLL clock entry that is used as system clock). */\r\n    if ((__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE) && (__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) &&\r\n        ((READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) == RCC_CFGR2_PREDIV1SRC_PLL2)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      if ((RCC_OscInitStruct->PLL2.PLL2State) == RCC_PLL2_ON) {\r\n        /* Check the parameters */\r\n        assert_param(IS_RCC_PLL2_MUL(RCC_OscInitStruct->PLL2.PLL2MUL));\r\n        assert_param(IS_RCC_HSE_PREDIV2(RCC_OscInitStruct->PLL2.HSEPrediv2Value));\r\n\r\n        /* Prediv2 can be written only when the PLLI2S is disabled. */\r\n        /* Return an error only if new value is different from the programmed value */\r\n        if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON) && (__HAL_RCC_HSE_GET_PREDIV2() != RCC_OscInitStruct->PLL2.HSEPrediv2Value)) {\r\n          return HAL_ERROR;\r\n        }\r\n\r\n        /* Disable the main PLL2. */\r\n        __HAL_RCC_PLL2_DISABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL2 is disabled */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n\r\n        /* Configure the HSE prediv2 factor --------------------------------*/\r\n        __HAL_RCC_HSE_PREDIV2_CONFIG(RCC_OscInitStruct->PLL2.HSEPrediv2Value);\r\n\r\n        /* Configure the main PLL2 multiplication factors. */\r\n        __HAL_RCC_PLL2_CONFIG(RCC_OscInitStruct->PLL2.PLL2MUL);\r\n\r\n        /* Enable the main PLL2. */\r\n        __HAL_RCC_PLL2_ENABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL2 is ready */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      } else {\r\n        /* Set PREDIV1 source to HSE */\r\n        CLEAR_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC);\r\n\r\n        /* Disable the main PLL2. */\r\n        __HAL_RCC_PLL2_DISABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL2 is disabled */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n#endif /* RCC_CR_PLL2ON */\r\n  /*-------------------------------- PLL Configuration -----------------------*/\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState));\r\n  if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE) {\r\n    /* Check if the PLL is used as system clock or not */\r\n    if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK) {\r\n      if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) {\r\n        /* Check the parameters */\r\n        assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource));\r\n        assert_param(IS_RCC_PLL_MUL(RCC_OscInitStruct->PLL.PLLMUL));\r\n\r\n        /* Disable the main PLL. */\r\n        __HAL_RCC_PLL_DISABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL is disabled */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n\r\n        /* Configure the HSE prediv factor --------------------------------*/\r\n        /* It can be written only when the PLL is disabled. Not used in PLL source is different than HSE */\r\n        if (RCC_OscInitStruct->PLL.PLLSource == RCC_PLLSOURCE_HSE) {\r\n          /* Check the parameter */\r\n          assert_param(IS_RCC_HSE_PREDIV(RCC_OscInitStruct->HSEPredivValue));\r\n#if defined(RCC_CFGR2_PREDIV1SRC)\r\n          assert_param(IS_RCC_PREDIV1_SOURCE(RCC_OscInitStruct->Prediv1Source));\r\n\r\n          /* Set PREDIV1 source */\r\n          SET_BIT(RCC->CFGR2, RCC_OscInitStruct->Prediv1Source);\r\n#endif /* RCC_CFGR2_PREDIV1SRC */\r\n\r\n          /* Set PREDIV1 Value */\r\n          __HAL_RCC_HSE_PREDIV_CONFIG(RCC_OscInitStruct->HSEPredivValue);\r\n        }\r\n\r\n        /* Configure the main PLL clock source and multiplication factors. */\r\n        __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource, RCC_OscInitStruct->PLL.PLLMUL);\r\n        /* Enable the main PLL. */\r\n        __HAL_RCC_PLL_ENABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL is ready */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      } else {\r\n        /* Disable the main PLL. */\r\n        __HAL_RCC_PLL_DISABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL is disabled */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      /* Check if there is a request to disable the PLL used as System clock source */\r\n      if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) {\r\n        return HAL_ERROR;\r\n      } else {\r\n        /* Do not return HAL_ERROR if request repeats the current configuration */\r\n        pll_config = RCC->CFGR;\r\n        if ((READ_BIT(pll_config, RCC_CFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) || (READ_BIT(pll_config, RCC_CFGR_PLLMULL) != RCC_OscInitStruct->PLL.PLLMUL)) {\r\n          return HAL_ERROR;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the CPU, AHB and APB buses clocks according to the specified\r\n *         parameters in the RCC_ClkInitStruct.\r\n * @param  RCC_ClkInitStruct pointer to an RCC_OscInitTypeDef structure that\r\n *         contains the configuration information for the RCC peripheral.\r\n * @param  FLatency FLASH Latency\r\n *          The value of this parameter depend on device used within the same series\r\n * @note   The SystemCoreClock CMSIS variable is used to store System Clock Frequency\r\n *         and updated by @ref HAL_RCC_GetHCLKFreq() function called within this function\r\n *\r\n * @note   The HSI is used (enabled by hardware) as system clock source after\r\n *         start-up from Reset, wake-up from STOP and STANDBY mode, or in case\r\n *         of failure of the HSE used directly or indirectly as system clock\r\n *         (if the Clock Security System CSS is enabled).\r\n *\r\n * @note   A switch from one clock source to another occurs only if the target\r\n *         clock source is ready (clock stable after start-up delay or PLL locked).\r\n *         If a clock source which is not yet ready is selected, the switch will\r\n *         occur when the clock source will be ready.\r\n *         You can use @ref HAL_RCC_GetClockConfig() function to know which clock is\r\n *         currently used as system clock source.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency) {\r\n  uint32_t tickstart;\r\n\r\n  /* Check Null pointer */\r\n  if (RCC_ClkInitStruct == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_CLOCKTYPE(RCC_ClkInitStruct->ClockType));\r\n  assert_param(IS_FLASH_LATENCY(FLatency));\r\n\r\n  /* To correctly read data from FLASH memory, the number of wait states (LATENCY)\r\n  must be correctly programmed according to the frequency of the CPU clock\r\n    (HCLK) of the device. */\r\n\r\n#if defined(FLASH_ACR_LATENCY)\r\n  /* Increasing the number of wait states because of higher CPU frequency */\r\n  if (FLatency > __HAL_FLASH_GET_LATENCY()) {\r\n    /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */\r\n    __HAL_FLASH_SET_LATENCY(FLatency);\r\n\r\n    /* Check that the new number of wait states is taken into account to access the Flash\r\n    memory by reading the FLASH_ACR register */\r\n    if (__HAL_FLASH_GET_LATENCY() != FLatency) {\r\n      return HAL_ERROR;\r\n    }\r\n  }\r\n\r\n#endif /* FLASH_ACR_LATENCY */\r\n  /*-------------------------- HCLK Configuration --------------------------*/\r\n  if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) {\r\n    /* Set the highest APBx dividers in order to ensure that we do not go through\r\n    a non-spec phase whatever we decrease or increase HCLK. */\r\n    if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) {\r\n      MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16);\r\n    }\r\n\r\n    if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) {\r\n      MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3));\r\n    }\r\n\r\n    /* Set the new HCLK clock divider */\r\n    assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider));\r\n    MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider);\r\n  }\r\n\r\n  /*------------------------- SYSCLK Configuration ---------------------------*/\r\n  if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) {\r\n    assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));\r\n\r\n    /* HSE is selected as System Clock Source */\r\n    if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) {\r\n      /* Check the HSE ready flag */\r\n      if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) {\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n    /* PLL is selected as System Clock Source */\r\n    else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) {\r\n      /* Check the PLL ready flag */\r\n      if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) {\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n    /* HSI is selected as System Clock Source */\r\n    else {\r\n      /* Check the HSI ready flag */\r\n      if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) {\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n    __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource);\r\n\r\n    /* Get Start Tick */\r\n    tickstart = HAL_GetTick();\r\n\r\n    while (__HAL_RCC_GET_SYSCLK_SOURCE() != (RCC_ClkInitStruct->SYSCLKSource << RCC_CFGR_SWS_Pos)) {\r\n      if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n#if defined(FLASH_ACR_LATENCY)\r\n  /* Decreasing the number of wait states because of lower CPU frequency */\r\n  if (FLatency < __HAL_FLASH_GET_LATENCY()) {\r\n    /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */\r\n    __HAL_FLASH_SET_LATENCY(FLatency);\r\n\r\n    /* Check that the new number of wait states is taken into account to access the Flash\r\n    memory by reading the FLASH_ACR register */\r\n    if (__HAL_FLASH_GET_LATENCY() != FLatency) {\r\n      return HAL_ERROR;\r\n    }\r\n  }\r\n#endif /* FLASH_ACR_LATENCY */\r\n\r\n  /*-------------------------- PCLK1 Configuration ---------------------------*/\r\n  if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) {\r\n    assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider));\r\n    MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider);\r\n  }\r\n\r\n  /*-------------------------- PCLK2 Configuration ---------------------------*/\r\n  if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) {\r\n    assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider));\r\n    MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3));\r\n  }\r\n\r\n  /* Update the SystemCoreClock global variable */\r\n  SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos];\r\n\r\n  /* Configure the source of time base considering new system clocks settings*/\r\n  HAL_InitTick(uwTickPrio);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Exported_Functions_Group2 Peripheral Control functions\r\n  *  @brief   RCC clocks control functions\r\n  *\r\n  @verbatim\r\n  ===============================================================================\r\n                  ##### Peripheral Control functions #####\r\n  ===============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the RCC Clocks\r\n    frequencies.\r\n\r\n  @endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n  * @brief  Selects the clock source to output on MCO pin.\r\n  * @note   MCO pin should be configured in alternate function mode.\r\n  * @param  RCC_MCOx specifies the output direction for the clock source.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_MCO1 Clock source to output on MCO1 pin(PA8).\r\n  * @param  RCC_MCOSource specifies the clock source to output.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_MCO1SOURCE_NOCLOCK     No clock selected as MCO clock\r\n  *            @arg @ref RCC_MCO1SOURCE_SYSCLK      System clock selected as MCO clock\r\n  *            @arg @ref RCC_MCO1SOURCE_HSI         HSI selected as MCO clock\r\n  *            @arg @ref RCC_MCO1SOURCE_HSE         HSE selected as MCO clock\r\n  @if STM32F105xC\r\n  *            @arg @ref RCC_MCO1SOURCE_PLLCLK       PLL clock divided by 2 selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL2CLK      PLL2 clock selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL3CLK_DIV2 PLL3 clock divided by 2 selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_EXT_HSE      XT1 external 3-25 MHz oscillator clock selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL3CLK      PLL3 clock selected as MCO source\r\n  @endif\r\n  @if STM32F107xC\r\n  *            @arg @ref RCC_MCO1SOURCE_PLLCLK       PLL clock divided by 2 selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL2CLK      PLL2 clock selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL3CLK_DIV2 PLL3 clock divided by 2 selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_EXT_HSE XT1  external 3-25 MHz oscillator clock selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL3CLK      PLL3 clock selected as MCO source\r\n  @endif\r\n  * @param  RCC_MCODiv specifies the MCO DIV.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_MCODIV_1 no division applied to MCO clock\r\n  * @retval None\r\n  */\r\nvoid HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv) {\r\n  GPIO_InitTypeDef gpio = {0U};\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_MCO(RCC_MCOx));\r\n  assert_param(IS_RCC_MCODIV(RCC_MCODiv));\r\n  assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource));\r\n\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(RCC_MCOx);\r\n  UNUSED(RCC_MCODiv);\r\n\r\n  /* Configure the MCO1 pin in alternate function mode */\r\n  gpio.Mode  = GPIO_MODE_AF_PP;\r\n  gpio.Speed = GPIO_SPEED_FREQ_HIGH;\r\n  gpio.Pull  = GPIO_NOPULL;\r\n  gpio.Pin   = MCO1_PIN;\r\n\r\n  /* MCO1 Clock Enable */\r\n  MCO1_CLK_ENABLE();\r\n\r\n  HAL_GPIO_Init(MCO1_GPIO_PORT, &gpio);\r\n\r\n  /* Configure the MCO clock source */\r\n  __HAL_RCC_MCO1_CONFIG(RCC_MCOSource, RCC_MCODiv);\r\n}\r\n\r\n/**\r\n * @brief  Enables the Clock Security System.\r\n * @note   If a failure is detected on the HSE oscillator clock, this oscillator\r\n *         is automatically disabled and an interrupt is generated to inform the\r\n *         software about the failure (Clock Security System Interrupt, CSSI),\r\n *         allowing the MCU to perform rescue operations. The CSSI is linked to\r\n *         the Cortex-M3 NMI (Non-Maskable Interrupt) exception vector.\r\n * @retval None\r\n */\r\nvoid HAL_RCC_EnableCSS(void) { *(__IO uint32_t *)RCC_CR_CSSON_BB = (uint32_t)ENABLE; }\r\n\r\n/**\r\n * @brief  Disables the Clock Security System.\r\n * @retval None\r\n */\r\nvoid HAL_RCC_DisableCSS(void) { *(__IO uint32_t *)RCC_CR_CSSON_BB = (uint32_t)DISABLE; }\r\n\r\n/**\r\n * @brief  Returns the SYSCLK frequency\r\n * @note   The system frequency computed by this function is not the real\r\n *         frequency in the chip. It is calculated based on the predefined\r\n *         constant and the selected clock source:\r\n * @note     If SYSCLK source is HSI, function returns values based on HSI_VALUE(*)\r\n * @note     If SYSCLK source is HSE, function returns a value based on HSE_VALUE\r\n *           divided by PREDIV factor(**)\r\n * @note     If SYSCLK source is PLL, function returns a value based on HSE_VALUE\r\n *           divided by PREDIV factor(**) or HSI_VALUE(*) multiplied by the PLL factor.\r\n * @note     (*) HSI_VALUE is a constant defined in stm32f1xx_hal_conf.h file (default value\r\n *               8 MHz) but the real value may vary depending on the variations\r\n *               in voltage and temperature.\r\n * @note     (**) HSE_VALUE is a constant defined in stm32f1xx_hal_conf.h file (default value\r\n *                8 MHz), user has to ensure that HSE_VALUE is same as the real\r\n *                frequency of the crystal used. Otherwise, this function may\r\n *                have wrong result.\r\n *\r\n * @note   The result of this function could be not correct when using fractional\r\n *         value for HSE crystal.\r\n *\r\n * @note   This function can be used by the user application to compute the\r\n *         baud-rate for the communication peripherals or configure other parameters.\r\n *\r\n * @note   Each time SYSCLK changes, this function must be called to update the\r\n *         right SYSCLK value. Otherwise, any configuration based on this function will be incorrect.\r\n *\r\n * @retval SYSCLK frequency\r\n */\r\nuint32_t HAL_RCC_GetSysClockFreq(void) {\r\n#if defined(RCC_CFGR2_PREDIV1SRC)\r\n  const uint8_t aPLLMULFactorTable[14] = {0, 0, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 13};\r\n  const uint8_t aPredivFactorTable[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};\r\n#else\r\n  const uint8_t aPLLMULFactorTable[16] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16};\r\n#if defined(RCC_CFGR2_PREDIV1)\r\n  const uint8_t aPredivFactorTable[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};\r\n#else\r\n  const uint8_t aPredivFactorTable[2] = {1, 2};\r\n#endif /*RCC_CFGR2_PREDIV1*/\r\n\r\n#endif\r\n  uint32_t tmpreg = 0U, prediv = 0U, pllclk = 0U, pllmul = 0U;\r\n  uint32_t sysclockfreq = 0U;\r\n#if defined(RCC_CFGR2_PREDIV1SRC)\r\n  uint32_t prediv2 = 0U, pll2mul = 0U;\r\n#endif /*RCC_CFGR2_PREDIV1SRC*/\r\n\r\n  tmpreg = RCC->CFGR;\r\n\r\n  /* Get SYSCLK source -------------------------------------------------------*/\r\n  switch (tmpreg & RCC_CFGR_SWS) {\r\n  case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock */\r\n  {\r\n    sysclockfreq = HSE_VALUE;\r\n    break;\r\n  }\r\n  case RCC_SYSCLKSOURCE_STATUS_PLLCLK: /* PLL used as system clock */\r\n  {\r\n    pllmul = aPLLMULFactorTable[(uint32_t)(tmpreg & RCC_CFGR_PLLMULL) >> RCC_CFGR_PLLMULL_Pos];\r\n    if ((tmpreg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) {\r\n#if defined(RCC_CFGR2_PREDIV1)\r\n      prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV1) >> RCC_CFGR2_PREDIV1_Pos];\r\n#else\r\n      prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR & RCC_CFGR_PLLXTPRE) >> RCC_CFGR_PLLXTPRE_Pos];\r\n#endif /*RCC_CFGR2_PREDIV1*/\r\n#if defined(RCC_CFGR2_PREDIV1SRC)\r\n\r\n      if (HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) {\r\n        /* PLL2 selected as Prediv1 source */\r\n        /* PLLCLK = PLL2CLK / PREDIV1 * PLLMUL with PLL2CLK = HSE/PREDIV2 * PLL2MUL */\r\n        prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1;\r\n        pll2mul = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> RCC_CFGR2_PLL2MUL_Pos) + 2;\r\n        pllclk  = (uint32_t)(((uint64_t)HSE_VALUE * (uint64_t)pll2mul * (uint64_t)pllmul) / ((uint64_t)prediv2 * (uint64_t)prediv));\r\n      } else {\r\n        /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */\r\n        pllclk = (uint32_t)((HSE_VALUE * pllmul) / prediv);\r\n      }\r\n\r\n      /* If PLLMUL was set to 13 means that it was to cover the case PLLMUL 6.5 (avoid using float) */\r\n      /* In this case need to divide pllclk by 2 */\r\n      if (pllmul == aPLLMULFactorTable[(uint32_t)(RCC_CFGR_PLLMULL6_5) >> RCC_CFGR_PLLMULL_Pos]) {\r\n        pllclk = pllclk / 2;\r\n      }\r\n#else\r\n      /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */\r\n      pllclk = (uint32_t)((HSE_VALUE * pllmul) / prediv);\r\n#endif /*RCC_CFGR2_PREDIV1SRC*/\r\n    } else {\r\n      /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */\r\n      pllclk = (uint32_t)((HSI_VALUE >> 1) * pllmul);\r\n    }\r\n    sysclockfreq = pllclk;\r\n    break;\r\n  }\r\n  case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */\r\n  default:                          /* HSI used as system clock */\r\n  {\r\n    sysclockfreq = HSI_VALUE;\r\n    break;\r\n  }\r\n  }\r\n  return sysclockfreq;\r\n}\r\n\r\n/**\r\n * @brief  Returns the HCLK frequency\r\n * @note   Each time HCLK changes, this function must be called to update the\r\n *         right HCLK value. Otherwise, any configuration based on this function will be incorrect.\r\n *\r\n * @note   The SystemCoreClock CMSIS variable is used to store System Clock Frequency\r\n *         and updated within this function\r\n * @retval HCLK frequency\r\n */\r\nuint32_t HAL_RCC_GetHCLKFreq(void) { return SystemCoreClock; }\r\n\r\n/**\r\n * @brief  Returns the PCLK1 frequency\r\n * @note   Each time PCLK1 changes, this function must be called to update the\r\n *         right PCLK1 value. Otherwise, any configuration based on this function will be incorrect.\r\n * @retval PCLK1 frequency\r\n */\r\nuint32_t HAL_RCC_GetPCLK1Freq(void) {\r\n  /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/\r\n  return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]);\r\n}\r\n\r\n/**\r\n * @brief  Returns the PCLK2 frequency\r\n * @note   Each time PCLK2 changes, this function must be called to update the\r\n *         right PCLK2 value. Otherwise, any configuration based on this function will be incorrect.\r\n * @retval PCLK2 frequency\r\n */\r\nuint32_t HAL_RCC_GetPCLK2Freq(void) {\r\n  /* Get HCLK source and Compute PCLK2 frequency ---------------------------*/\r\n  return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_Pos]);\r\n}\r\n\r\n/**\r\n * @brief  Configures the RCC_OscInitStruct according to the internal\r\n * RCC configuration registers.\r\n * @param  RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that\r\n * will be configured.\r\n * @retval None\r\n */\r\nvoid HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) {\r\n  /* Check the parameters */\r\n  assert_param(RCC_OscInitStruct != NULL);\r\n\r\n  /* Set all possible values for the Oscillator type parameter ---------------*/\r\n  RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI;\r\n\r\n#if defined(RCC_CFGR2_PREDIV1SRC)\r\n  /* Get the Prediv1 source --------------------------------------------------*/\r\n  RCC_OscInitStruct->Prediv1Source = READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC);\r\n#endif /* RCC_CFGR2_PREDIV1SRC */\r\n\r\n  /* Get the HSE configuration -----------------------------------------------*/\r\n  if ((RCC->CR & RCC_CR_HSEBYP) == RCC_CR_HSEBYP) {\r\n    RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS;\r\n  } else if ((RCC->CR & RCC_CR_HSEON) == RCC_CR_HSEON) {\r\n    RCC_OscInitStruct->HSEState = RCC_HSE_ON;\r\n  } else {\r\n    RCC_OscInitStruct->HSEState = RCC_HSE_OFF;\r\n  }\r\n  RCC_OscInitStruct->HSEPredivValue = __HAL_RCC_HSE_GET_PREDIV();\r\n\r\n  /* Get the HSI configuration -----------------------------------------------*/\r\n  if ((RCC->CR & RCC_CR_HSION) == RCC_CR_HSION) {\r\n    RCC_OscInitStruct->HSIState = RCC_HSI_ON;\r\n  } else {\r\n    RCC_OscInitStruct->HSIState = RCC_HSI_OFF;\r\n  }\r\n\r\n  RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR & RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);\r\n\r\n  /* Get the LSE configuration -----------------------------------------------*/\r\n  if ((RCC->BDCR & RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP) {\r\n    RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS;\r\n  } else if ((RCC->BDCR & RCC_BDCR_LSEON) == RCC_BDCR_LSEON) {\r\n    RCC_OscInitStruct->LSEState = RCC_LSE_ON;\r\n  } else {\r\n    RCC_OscInitStruct->LSEState = RCC_LSE_OFF;\r\n  }\r\n\r\n  /* Get the LSI configuration -----------------------------------------------*/\r\n  if ((RCC->CSR & RCC_CSR_LSION) == RCC_CSR_LSION) {\r\n    RCC_OscInitStruct->LSIState = RCC_LSI_ON;\r\n  } else {\r\n    RCC_OscInitStruct->LSIState = RCC_LSI_OFF;\r\n  }\r\n\r\n  /* Get the PLL configuration -----------------------------------------------*/\r\n  if ((RCC->CR & RCC_CR_PLLON) == RCC_CR_PLLON) {\r\n    RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON;\r\n  } else {\r\n    RCC_OscInitStruct->PLL.PLLState = RCC_PLL_OFF;\r\n  }\r\n  RCC_OscInitStruct->PLL.PLLSource = (uint32_t)(RCC->CFGR & RCC_CFGR_PLLSRC);\r\n  RCC_OscInitStruct->PLL.PLLMUL    = (uint32_t)(RCC->CFGR & RCC_CFGR_PLLMULL);\r\n#if defined(RCC_CR_PLL2ON)\r\n  /* Get the PLL2 configuration -----------------------------------------------*/\r\n  if ((RCC->CR & RCC_CR_PLL2ON) == RCC_CR_PLL2ON) {\r\n    RCC_OscInitStruct->PLL2.PLL2State = RCC_PLL2_ON;\r\n  } else {\r\n    RCC_OscInitStruct->PLL2.PLL2State = RCC_PLL2_OFF;\r\n  }\r\n  RCC_OscInitStruct->PLL2.HSEPrediv2Value = __HAL_RCC_HSE_GET_PREDIV2();\r\n  RCC_OscInitStruct->PLL2.PLL2MUL         = (uint32_t)(RCC->CFGR2 & RCC_CFGR2_PLL2MUL);\r\n#endif /* RCC_CR_PLL2ON */\r\n}\r\n\r\n/**\r\n * @brief  Get the RCC_ClkInitStruct according to the internal\r\n * RCC configuration registers.\r\n * @param  RCC_ClkInitStruct pointer to an RCC_ClkInitTypeDef structure that\r\n * contains the current clock configuration.\r\n * @param  pFLatency Pointer on the Flash Latency.\r\n * @retval None\r\n */\r\nvoid HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency) {\r\n  /* Check the parameters */\r\n  assert_param(RCC_ClkInitStruct != NULL);\r\n  assert_param(pFLatency != NULL);\r\n\r\n  /* Set all possible values for the Clock type parameter --------------------*/\r\n  RCC_ClkInitStruct->ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;\r\n\r\n  /* Get the SYSCLK configuration --------------------------------------------*/\r\n  RCC_ClkInitStruct->SYSCLKSource = (uint32_t)(RCC->CFGR & RCC_CFGR_SW);\r\n\r\n  /* Get the HCLK configuration ----------------------------------------------*/\r\n  RCC_ClkInitStruct->AHBCLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_HPRE);\r\n\r\n  /* Get the APB1 configuration ----------------------------------------------*/\r\n  RCC_ClkInitStruct->APB1CLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_PPRE1);\r\n\r\n  /* Get the APB2 configuration ----------------------------------------------*/\r\n  RCC_ClkInitStruct->APB2CLKDivider = (uint32_t)((RCC->CFGR & RCC_CFGR_PPRE2) >> 3);\r\n\r\n#if defined(FLASH_ACR_LATENCY)\r\n  /* Get the Flash Wait State (Latency) configuration ------------------------*/\r\n  *pFLatency = (uint32_t)(FLASH->ACR & FLASH_ACR_LATENCY);\r\n#else\r\n  /* For VALUE lines devices, only LATENCY_0 can be set*/\r\n  *pFLatency = (uint32_t)FLASH_LATENCY_0;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief This function handles the RCC CSS interrupt request.\r\n * @note This API should be called under the NMI_Handler().\r\n * @retval None\r\n */\r\nvoid HAL_RCC_NMI_IRQHandler(void) {\r\n  /* Check RCC CSSF flag  */\r\n  if (__HAL_RCC_GET_IT(RCC_IT_CSS)) {\r\n    /* RCC Clock Security System interrupt user callback */\r\n    HAL_RCC_CSSCallback();\r\n\r\n    /* Clear RCC CSS pending bit */\r\n    __HAL_RCC_CLEAR_IT(RCC_IT_CSS);\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  This function provides delay (in milliseconds) based on CPU cycles method.\r\n * @param  mdelay: specifies the delay time length, in milliseconds.\r\n * @retval None\r\n */\r\nstatic void RCC_Delay(uint32_t mdelay) {\r\n  __IO uint32_t Delay = mdelay * (SystemCoreClock / 8U / 1000U);\r\n  do {\r\n    __NOP();\r\n  } while (Delay--);\r\n}\r\n\r\n/**\r\n * @brief  RCC Clock Security System interrupt callback\r\n * @retval none\r\n */\r\n__weak void HAL_RCC_CSSCallback(void) {\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n    the HAL_RCC_CSSCallback could be implemented in the user file\r\n    */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_RCC_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_rcc_ex.c\r\n * @author  MCD Application Team\r\n * @brief   Extended RCC HAL module driver.\r\n *          This file provides firmware functions to manage the following\r\n *          functionalities RCC extension peripheral:\r\n *           + Extended Peripheral Control functions\r\n *\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_RCC_MODULE_ENABLED\r\n\r\n/** @defgroup RCCEx RCCEx\r\n * @brief RCC Extension HAL module driver.\r\n * @{\r\n */\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup RCCEx_Private_Constants RCCEx Private Constants\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/** @defgroup RCCEx_Private_Macros RCCEx Private Macros\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n\r\n/** @defgroup RCCEx_Exported_Functions RCCEx Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup RCCEx_Exported_Functions_Group1 Peripheral Control functions\r\n  *  @brief  Extended Peripheral Control functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                ##### Extended Peripheral Control functions  #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the RCC Clocks\r\n    frequencies.\r\n    [..]\r\n    (@) Important note: Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to\r\n        select the RTC clock source; in this case the Backup domain will be reset in\r\n        order to modify the RTC Clock source, as consequence RTC registers (including\r\n        the backup registers) are set to their reset values.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initializes the RCC extended peripherals clocks according to the specified parameters in the\r\n *         RCC_PeriphCLKInitTypeDef.\r\n * @param  PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that\r\n *         contains the configuration information for the Extended Peripherals clocks(RTC clock).\r\n *\r\n * @note   Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select\r\n *         the RTC clock source; in this case the Backup domain will be reset in\r\n *         order to modify the RTC Clock source, as consequence RTC registers (including\r\n *         the backup registers) are set to their reset values.\r\n *\r\n * @note   In case of STM32F105xC or STM32F107xC devices, PLLI2S will be enabled if requested on\r\n *         one of 2 I2S interfaces. When PLLI2S is enabled, you need to call HAL_RCCEx_DisablePLLI2S to\r\n *         manually disable it.\r\n *\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) {\r\n  uint32_t tickstart = 0U, temp_reg = 0U;\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t pllactive = 0U;\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection));\r\n\r\n  /*------------------------------- RTC/LCD Configuration ------------------------*/\r\n  if ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)) {\r\n    /* check for RTC Parameters used to output RTCCLK */\r\n    assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection));\r\n\r\n    FlagStatus pwrclkchanged = RESET;\r\n\r\n    /* As soon as function is called to change RTC clock source, activation of the\r\n       power domain is done. */\r\n    /* Requires to enable write access to Backup Domain of necessary */\r\n    if (__HAL_RCC_PWR_IS_CLK_DISABLED()) {\r\n      __HAL_RCC_PWR_CLK_ENABLE();\r\n      pwrclkchanged = SET;\r\n    }\r\n\r\n    if (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) {\r\n      /* Enable write access to Backup domain */\r\n      SET_BIT(PWR->CR, PWR_CR_DBP);\r\n\r\n      /* Wait for Backup domain Write protection disable */\r\n      tickstart = HAL_GetTick();\r\n\r\n      while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) {\r\n        if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */\r\n    temp_reg = (RCC->BDCR & RCC_BDCR_RTCSEL);\r\n    if ((temp_reg != 0x00000000U) && (temp_reg != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) {\r\n      /* Store the content of BDCR register before the reset of Backup Domain */\r\n      temp_reg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL));\r\n      /* RTC Clock selection can be changed only if the Backup Domain is reset */\r\n      __HAL_RCC_BACKUPRESET_FORCE();\r\n      __HAL_RCC_BACKUPRESET_RELEASE();\r\n      /* Restore the Content of BDCR register */\r\n      RCC->BDCR = temp_reg;\r\n\r\n      /* Wait for LSERDY if LSE was enabled */\r\n      if (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSEON)) {\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till LSE is ready */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) {\r\n          if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection);\r\n\r\n    /* Require to disable power clock if necessary */\r\n    if (pwrclkchanged == SET) {\r\n      __HAL_RCC_PWR_CLK_DISABLE();\r\n    }\r\n  }\r\n\r\n  /*------------------------------ ADC clock Configuration ------------------*/\r\n  if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_ADCPLLCLK_DIV(PeriphClkInit->AdcClockSelection));\r\n\r\n    /* Configure the ADC clock source */\r\n    __HAL_RCC_ADC_CONFIG(PeriphClkInit->AdcClockSelection);\r\n  }\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  /*------------------------------ I2S2 Configuration ------------------------*/\r\n  if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_I2S2CLKSOURCE(PeriphClkInit->I2s2ClockSelection));\r\n\r\n    /* Configure the I2S2 clock source */\r\n    __HAL_RCC_I2S2_CONFIG(PeriphClkInit->I2s2ClockSelection);\r\n  }\r\n\r\n  /*------------------------------ I2S3 Configuration ------------------------*/\r\n  if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_I2S3CLKSOURCE(PeriphClkInit->I2s3ClockSelection));\r\n\r\n    /* Configure the I2S3 clock source */\r\n    __HAL_RCC_I2S3_CONFIG(PeriphClkInit->I2s3ClockSelection);\r\n  }\r\n\r\n  /*------------------------------ PLL I2S Configuration ----------------------*/\r\n  /* Check that PLLI2S need to be enabled */\r\n  if (HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_I2S2SRC) || HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_I2S3SRC)) {\r\n    /* Update flag to indicate that PLL I2S should be active */\r\n    pllactive = 1;\r\n  }\r\n\r\n  /* Check if PLL I2S need to be enabled */\r\n  if (pllactive == 1) {\r\n    /* Enable PLL I2S only if not active */\r\n    if (HAL_IS_BIT_CLR(RCC->CR, RCC_CR_PLL3ON)) {\r\n      /* Check the parameters */\r\n      assert_param(IS_RCC_PLLI2S_MUL(PeriphClkInit->PLLI2S.PLLI2SMUL));\r\n      assert_param(IS_RCC_HSE_PREDIV2(PeriphClkInit->PLLI2S.HSEPrediv2Value));\r\n\r\n      /* Prediv2 can be written only when the PLL2 is disabled. */\r\n      /* Return an error only if new value is different from the programmed value */\r\n      if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2ON) && (__HAL_RCC_HSE_GET_PREDIV2() != PeriphClkInit->PLLI2S.HSEPrediv2Value)) {\r\n        return HAL_ERROR;\r\n      }\r\n\r\n      /* Configure the HSE prediv2 factor --------------------------------*/\r\n      __HAL_RCC_HSE_PREDIV2_CONFIG(PeriphClkInit->PLLI2S.HSEPrediv2Value);\r\n\r\n      /* Configure the main PLLI2S multiplication factors. */\r\n      __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SMUL);\r\n\r\n      /* Enable the main PLLI2S. */\r\n      __HAL_RCC_PLLI2S_ENABLE();\r\n\r\n      /* Get Start Tick*/\r\n      tickstart = HAL_GetTick();\r\n\r\n      /* Wait till PLLI2S is ready */\r\n      while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) {\r\n        if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    } else {\r\n      /* Return an error only if user wants to change the PLLI2SMUL whereas PLLI2S is active */\r\n      if (READ_BIT(RCC->CFGR2, RCC_CFGR2_PLL3MUL) != PeriphClkInit->PLLI2S.PLLI2SMUL) {\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n  }\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  /*------------------------------ USB clock Configuration ------------------*/\r\n  if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_USBPLLCLK_DIV(PeriphClkInit->UsbClockSelection));\r\n\r\n    /* Configure the USB clock source */\r\n    __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection);\r\n  }\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Get the PeriphClkInit according to the internal\r\n * RCC configuration registers.\r\n * @param  PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that\r\n *         returns the configuration information for the Extended Peripherals clocks(RTC, I2S, ADC clocks).\r\n * @retval None\r\n */\r\nvoid HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) {\r\n  uint32_t srcclk = 0U;\r\n\r\n  /* Set all possible values for the extended clock type parameter------------*/\r\n  PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_RTC;\r\n\r\n  /* Get the RTC configuration -----------------------------------------------*/\r\n  srcclk = __HAL_RCC_GET_RTC_SOURCE();\r\n  /* Source clock is LSE or LSI*/\r\n  PeriphClkInit->RTCClockSelection = srcclk;\r\n\r\n  /* Get the ADC clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_ADC;\r\n  PeriphClkInit->AdcClockSelection = __HAL_RCC_GET_ADC_SOURCE();\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  /* Get the I2S2 clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S2;\r\n  PeriphClkInit->I2s2ClockSelection = __HAL_RCC_GET_I2S2_SOURCE();\r\n\r\n  /* Get the I2S3 clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S3;\r\n  PeriphClkInit->I2s3ClockSelection = __HAL_RCC_GET_I2S3_SOURCE();\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n  /* Get the I2S2 clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S2;\r\n  PeriphClkInit->I2s2ClockSelection = RCC_I2S2CLKSOURCE_SYSCLK;\r\n\r\n  /* Get the I2S3 clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S3;\r\n  PeriphClkInit->I2s3ClockSelection = RCC_I2S3CLKSOURCE_SYSCLK;\r\n\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  /* Get the USB clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_USB;\r\n  PeriphClkInit->UsbClockSelection = __HAL_RCC_GET_USB_SOURCE();\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n}\r\n\r\n/**\r\n  * @brief  Returns the peripheral clock frequency\r\n  * @note   Returns 0 if peripheral clock is unknown\r\n  * @param  PeriphClk Peripheral clock identifier\r\n  *         This parameter can be one of the following values:\r\n  *            @arg @ref RCC_PERIPHCLK_RTC  RTC peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_ADC  ADC peripheral clock\r\n  @if STM32F103xE\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  @endif\r\n  @if STM32F103xG\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  @endif\r\n  @if STM32F105xC\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_USB  USB peripheral clock\r\n  @endif\r\n  @if STM32F107xC\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_USB  USB peripheral clock\r\n  @endif\r\n  @if STM32F102xx\r\n  *            @arg @ref RCC_PERIPHCLK_USB  USB peripheral clock\r\n  @endif\r\n  @if STM32F103xx\r\n  *            @arg @ref RCC_PERIPHCLK_USB  USB peripheral clock\r\n  @endif\r\n  * @retval Frequency in Hz (0: means that no available frequency for the peripheral)\r\n  */\r\nuint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) {\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  const uint8_t aPLLMULFactorTable[14] = {0, 0, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 13};\r\n  const uint8_t aPredivFactorTable[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};\r\n\r\n  uint32_t prediv1 = 0U, pllclk = 0U, pllmul = 0U;\r\n  uint32_t pll2mul = 0U, pll3mul = 0U, prediv2 = 0U;\r\n#endif /* STM32F105xC || STM32F107xC */\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n  const uint8_t aPLLMULFactorTable[16] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16};\r\n  const uint8_t aPredivFactorTable[2]  = {1, 2};\r\n\r\n  uint32_t prediv1 = 0U, pllclk = 0U, pllmul = 0U;\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n  uint32_t temp_reg = 0U, frequency = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_PERIPHCLOCK(PeriphClk));\r\n\r\n  switch (PeriphClk) {\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  case RCC_PERIPHCLK_USB: {\r\n    /* Get RCC configuration ------------------------------------------------------*/\r\n    temp_reg = RCC->CFGR;\r\n\r\n    /* Check if PLL is enabled */\r\n    if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLON)) {\r\n      pllmul = aPLLMULFactorTable[(uint32_t)(temp_reg & RCC_CFGR_PLLMULL) >> RCC_CFGR_PLLMULL_Pos];\r\n      if ((temp_reg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) {\r\n#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB) || defined(STM32F100xE)\r\n        prediv1 = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV1) >> RCC_CFGR2_PREDIV1_Pos];\r\n#else\r\n        prediv1 = aPredivFactorTable[(uint32_t)(RCC->CFGR & RCC_CFGR_PLLXTPRE) >> RCC_CFGR_PLLXTPRE_Pos];\r\n#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n        if (HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) {\r\n          /* PLL2 selected as Prediv1 source */\r\n          /* PLLCLK = PLL2CLK / PREDIV1 * PLLMUL with PLL2CLK = HSE/PREDIV2 * PLL2MUL */\r\n          prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1;\r\n          pll2mul = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> RCC_CFGR2_PLL2MUL_Pos) + 2;\r\n          pllclk  = (uint32_t)((((HSE_VALUE / prediv2) * pll2mul) / prediv1) * pllmul);\r\n        } else {\r\n          /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */\r\n          pllclk = (uint32_t)((HSE_VALUE / prediv1) * pllmul);\r\n        }\r\n\r\n        /* If PLLMUL was set to 13 means that it was to cover the case PLLMUL 6.5 (avoid using float) */\r\n        /* In this case need to divide pllclk by 2 */\r\n        if (pllmul == aPLLMULFactorTable[(uint32_t)(RCC_CFGR_PLLMULL6_5) >> RCC_CFGR_PLLMULL_Pos]) {\r\n          pllclk = pllclk / 2;\r\n        }\r\n#else\r\n        if ((temp_reg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) {\r\n          /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */\r\n          pllclk = (uint32_t)((HSE_VALUE / prediv1) * pllmul);\r\n        }\r\n#endif /* STM32F105xC || STM32F107xC */\r\n      } else {\r\n        /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */\r\n        pllclk = (uint32_t)((HSI_VALUE >> 1) * pllmul);\r\n      }\r\n\r\n      /* Calcul of the USB frequency*/\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n      /* USBCLK = PLLVCO = (2 x PLLCLK) / USB prescaler */\r\n      if (__HAL_RCC_GET_USB_SOURCE() == RCC_USBCLKSOURCE_PLL_DIV2) {\r\n        /* Prescaler of 2 selected for USB */\r\n        frequency = pllclk;\r\n      } else {\r\n        /* Prescaler of 3 selected for USB */\r\n        frequency = (2 * pllclk) / 3;\r\n      }\r\n#else\r\n      /* USBCLK = PLLCLK / USB prescaler */\r\n      if (__HAL_RCC_GET_USB_SOURCE() == RCC_USBCLKSOURCE_PLL) {\r\n        /* No prescaler selected for USB */\r\n        frequency = pllclk;\r\n      } else {\r\n        /* Prescaler of 1.5 selected for USB */\r\n        frequency = (pllclk * 2) / 3;\r\n      }\r\n#endif\r\n    }\r\n    break;\r\n  }\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  case RCC_PERIPHCLK_I2S2: {\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n    /* SYSCLK used as source clock for I2S2 */\r\n    frequency = HAL_RCC_GetSysClockFreq();\r\n#else\r\n    if (__HAL_RCC_GET_I2S2_SOURCE() == RCC_I2S2CLKSOURCE_SYSCLK) {\r\n      /* SYSCLK used as source clock for I2S2 */\r\n      frequency = HAL_RCC_GetSysClockFreq();\r\n    } else {\r\n      /* Check if PLLI2S is enabled */\r\n      if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON)) {\r\n        /* PLLI2SVCO = 2 * PLLI2SCLK = 2 * (HSE/PREDIV2 * PLL3MUL) */\r\n        prediv2   = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1;\r\n        pll3mul   = ((RCC->CFGR2 & RCC_CFGR2_PLL3MUL) >> RCC_CFGR2_PLL3MUL_Pos) + 2;\r\n        frequency = (uint32_t)(2 * ((HSE_VALUE / prediv2) * pll3mul));\r\n      }\r\n    }\r\n#endif /* STM32F103xE || STM32F103xG */\r\n    break;\r\n  }\r\n  case RCC_PERIPHCLK_I2S3: {\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n    /* SYSCLK used as source clock for I2S3 */\r\n    frequency = HAL_RCC_GetSysClockFreq();\r\n#else\r\n    if (__HAL_RCC_GET_I2S3_SOURCE() == RCC_I2S3CLKSOURCE_SYSCLK) {\r\n      /* SYSCLK used as source clock for I2S3 */\r\n      frequency = HAL_RCC_GetSysClockFreq();\r\n    } else {\r\n      /* Check if PLLI2S is enabled */\r\n      if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON)) {\r\n        /* PLLI2SVCO = 2 * PLLI2SCLK = 2 * (HSE/PREDIV2 * PLL3MUL) */\r\n        prediv2   = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1;\r\n        pll3mul   = ((RCC->CFGR2 & RCC_CFGR2_PLL3MUL) >> RCC_CFGR2_PLL3MUL_Pos) + 2;\r\n        frequency = (uint32_t)(2 * ((HSE_VALUE / prediv2) * pll3mul));\r\n      }\r\n    }\r\n#endif /* STM32F103xE || STM32F103xG */\r\n    break;\r\n  }\r\n#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n  case RCC_PERIPHCLK_RTC: {\r\n    /* Get RCC BDCR configuration ------------------------------------------------------*/\r\n    temp_reg = RCC->BDCR;\r\n\r\n    /* Check if LSE is ready if RTC clock selection is LSE */\r\n    if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_LSE) && (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSERDY))) {\r\n      frequency = LSE_VALUE;\r\n    }\r\n    /* Check if LSI is ready if RTC clock selection is LSI */\r\n    else if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_LSI) && (HAL_IS_BIT_SET(RCC->CSR, RCC_CSR_LSIRDY))) {\r\n      frequency = LSI_VALUE;\r\n    } else if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_HSE_DIV128) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))) {\r\n      frequency = HSE_VALUE / 128U;\r\n    }\r\n    /* Clock not enabled for RTC*/\r\n    else {\r\n      /* nothing to do: frequency already initialized to 0U */\r\n    }\r\n    break;\r\n  }\r\n  case RCC_PERIPHCLK_ADC: {\r\n    frequency = HAL_RCC_GetPCLK2Freq() / (((__HAL_RCC_GET_ADC_SOURCE() >> RCC_CFGR_ADCPRE_Pos) + 1) * 2);\r\n    break;\r\n  }\r\n  default: {\r\n    break;\r\n  }\r\n  }\r\n  return (frequency);\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_Exported_Functions_Group2 PLLI2S Management function\r\n  *  @brief  PLLI2S Management functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                ##### Extended PLLI2S Management functions  #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the PLLI2S\r\n    activation or deactivation\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Enable PLLI2S\r\n * @param  PLLI2SInit pointer to an RCC_PLLI2SInitTypeDef structure that\r\n *         contains the configuration information for the PLLI2S\r\n * @note   The PLLI2S configuration not modified if used by I2S2 or I2S3 Interface.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_EnablePLLI2S(RCC_PLLI2SInitTypeDef *PLLI2SInit) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Check that PLL I2S has not been already enabled by I2S2 or I2S3*/\r\n  if (HAL_IS_BIT_CLR(RCC->CFGR2, RCC_CFGR2_I2S2SRC) && HAL_IS_BIT_CLR(RCC->CFGR2, RCC_CFGR2_I2S3SRC)) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_PLLI2S_MUL(PLLI2SInit->PLLI2SMUL));\r\n    assert_param(IS_RCC_HSE_PREDIV2(PLLI2SInit->HSEPrediv2Value));\r\n\r\n    /* Prediv2 can be written only when the PLL2 is disabled. */\r\n    /* Return an error only if new value is different from the programmed value */\r\n    if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2ON) && (__HAL_RCC_HSE_GET_PREDIV2() != PLLI2SInit->HSEPrediv2Value)) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Disable the main PLLI2S. */\r\n    __HAL_RCC_PLLI2S_DISABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLLI2S is ready */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n\r\n    /* Configure the HSE prediv2 factor --------------------------------*/\r\n    __HAL_RCC_HSE_PREDIV2_CONFIG(PLLI2SInit->HSEPrediv2Value);\r\n\r\n    /* Configure the main PLLI2S multiplication factors. */\r\n    __HAL_RCC_PLLI2S_CONFIG(PLLI2SInit->PLLI2SMUL);\r\n\r\n    /* Enable the main PLLI2S. */\r\n    __HAL_RCC_PLLI2S_ENABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLLI2S is ready */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  } else {\r\n    /* PLLI2S cannot be modified as already used by I2S2 or I2S3 */\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Disable PLLI2S\r\n * @note   PLLI2S is not disabled if used by I2S2 or I2S3 Interface.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_DisablePLLI2S(void) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Disable PLL I2S as not requested by I2S2 or I2S3*/\r\n  if (HAL_IS_BIT_CLR(RCC->CFGR2, RCC_CFGR2_I2S2SRC) && HAL_IS_BIT_CLR(RCC->CFGR2, RCC_CFGR2_I2S3SRC)) {\r\n    /* Disable the main PLLI2S. */\r\n    __HAL_RCC_PLLI2S_DISABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLLI2S is ready */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  } else {\r\n    /* PLLI2S is currently used by I2S2 or I2S3. Cannot be disabled.*/\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_Exported_Functions_Group3 PLL2 Management function\r\n  *  @brief  PLL2 Management functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                ##### Extended PLL2 Management functions  #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the PLL2\r\n    activation or deactivation\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Enable PLL2\r\n * @param  PLL2Init pointer to an RCC_PLL2InitTypeDef structure that\r\n *         contains the configuration information for the PLL2\r\n * @note   The PLL2 configuration not modified if used indirectly as system clock.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_EnablePLL2(RCC_PLL2InitTypeDef *PLL2Init) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* This bit can not be cleared if the PLL2 clock is used indirectly as system\r\n    clock (i.e. it is used as PLL clock entry that is used as system clock). */\r\n  if ((__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE) && (__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) &&\r\n      ((READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) == RCC_CFGR2_PREDIV1SRC_PLL2)) {\r\n    return HAL_ERROR;\r\n  } else {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_PLL2_MUL(PLL2Init->PLL2MUL));\r\n    assert_param(IS_RCC_HSE_PREDIV2(PLL2Init->HSEPrediv2Value));\r\n\r\n    /* Prediv2 can be written only when the PLLI2S is disabled. */\r\n    /* Return an error only if new value is different from the programmed value */\r\n    if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON) && (__HAL_RCC_HSE_GET_PREDIV2() != PLL2Init->HSEPrediv2Value)) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Disable the main PLL2. */\r\n    __HAL_RCC_PLL2_DISABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLL2 is disabled */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n\r\n    /* Configure the HSE prediv2 factor --------------------------------*/\r\n    __HAL_RCC_HSE_PREDIV2_CONFIG(PLL2Init->HSEPrediv2Value);\r\n\r\n    /* Configure the main PLL2 multiplication factors. */\r\n    __HAL_RCC_PLL2_CONFIG(PLL2Init->PLL2MUL);\r\n\r\n    /* Enable the main PLL2. */\r\n    __HAL_RCC_PLL2_ENABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLL2 is ready */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Disable PLL2\r\n * @note   PLL2 is not disabled if used indirectly as system clock.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_DisablePLL2(void) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* This bit can not be cleared if the PLL2 clock is used indirectly as system\r\n    clock (i.e. it is used as PLL clock entry that is used as system clock). */\r\n  if ((__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE) && (__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) &&\r\n      ((READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) == RCC_CFGR2_PREDIV1SRC_PLL2)) {\r\n    return HAL_ERROR;\r\n  } else {\r\n    /* Disable the main PLL2. */\r\n    __HAL_RCC_PLL2_DISABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLL2 is disabled */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_RCC_MODULE_ENABLED */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_tim.c\r\n  * @author  MCD Application Team\r\n  * @brief   TIM HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the Timer (TIM) peripheral:\r\n  *           + TIM Time Base Initialization\r\n  *           + TIM Time Base Start\r\n  *           + TIM Time Base Start Interruption\r\n  *           + TIM Time Base Start DMA\r\n  *           + TIM Output Compare/PWM Initialization\r\n  *           + TIM Output Compare/PWM Channel Configuration\r\n  *           + TIM Output Compare/PWM  Start\r\n  *           + TIM Output Compare/PWM  Start Interruption\r\n  *           + TIM Output Compare/PWM Start DMA\r\n  *           + TIM Input Capture Initialization\r\n  *           + TIM Input Capture Channel Configuration\r\n  *           + TIM Input Capture Start\r\n  *           + TIM Input Capture Start Interruption\r\n  *           + TIM Input Capture Start DMA\r\n  *           + TIM One Pulse Initialization\r\n  *           + TIM One Pulse Channel Configuration\r\n  *           + TIM One Pulse Start\r\n  *           + TIM Encoder Interface Initialization\r\n  *           + TIM Encoder Interface Start\r\n  *           + TIM Encoder Interface Start Interruption\r\n  *           + TIM Encoder Interface Start DMA\r\n  *           + Commutation Event configuration with Interruption and DMA\r\n  *           + TIM OCRef clear configuration\r\n  *           + TIM External Clock configuration\r\n  @verbatim\r\n  ==============================================================================\r\n                      ##### TIMER Generic features #####\r\n  ==============================================================================\r\n  [..] The Timer features include:\r\n       (#) 16-bit up, down, up/down auto-reload counter.\r\n       (#) 16-bit programmable prescaler allowing dividing (also on the fly) the\r\n           counter clock frequency either by any factor between 1 and 65536.\r\n       (#) Up to 4 independent channels for:\r\n           (++) Input Capture\r\n           (++) Output Compare\r\n           (++) PWM generation (Edge and Center-aligned Mode)\r\n           (++) One-pulse mode output\r\n       (#) Synchronization circuit to control the timer with external signals and to interconnect\r\n            several timers together.\r\n       (#) Supports incremental encoder for positioning purposes\r\n\r\n            ##### How to use this driver #####\r\n  ==============================================================================\r\n    [..]\r\n     (#) Initialize the TIM low level resources by implementing the following functions\r\n         depending on the selected feature:\r\n           (++) Time Base : HAL_TIM_Base_MspInit()\r\n           (++) Input Capture : HAL_TIM_IC_MspInit()\r\n           (++) Output Compare : HAL_TIM_OC_MspInit()\r\n           (++) PWM generation : HAL_TIM_PWM_MspInit()\r\n           (++) One-pulse mode output : HAL_TIM_OnePulse_MspInit()\r\n           (++) Encoder mode output : HAL_TIM_Encoder_MspInit()\r\n\r\n     (#) Initialize the TIM low level resources :\r\n        (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE();\r\n        (##) TIM pins configuration\r\n            (+++) Enable the clock for the TIM GPIOs using the following function:\r\n             __HAL_RCC_GPIOx_CLK_ENABLE();\r\n            (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init();\r\n\r\n     (#) The external Clock can be configured, if needed (the default clock is the\r\n         internal clock from the APBx), using the following function:\r\n         HAL_TIM_ConfigClockSource, the clock configuration should be done before\r\n         any start function.\r\n\r\n     (#) Configure the TIM in the desired functioning mode using one of the\r\n       Initialization function of this driver:\r\n       (++) HAL_TIM_Base_Init: to use the Timer to generate a simple time base\r\n       (++) HAL_TIM_OC_Init and HAL_TIM_OC_ConfigChannel: to use the Timer to generate an\r\n            Output Compare signal.\r\n       (++) HAL_TIM_PWM_Init and HAL_TIM_PWM_ConfigChannel: to use the Timer to generate a\r\n            PWM signal.\r\n       (++) HAL_TIM_IC_Init and HAL_TIM_IC_ConfigChannel: to use the Timer to measure an\r\n            external signal.\r\n       (++) HAL_TIM_OnePulse_Init and HAL_TIM_OnePulse_ConfigChannel: to use the Timer\r\n            in One Pulse Mode.\r\n       (++) HAL_TIM_Encoder_Init: to use the Timer Encoder Interface.\r\n\r\n     (#) Activate the TIM peripheral using one of the start functions depending from the feature used:\r\n           (++) Time Base : HAL_TIM_Base_Start(), HAL_TIM_Base_Start_DMA(), HAL_TIM_Base_Start_IT()\r\n           (++) Input Capture :  HAL_TIM_IC_Start(), HAL_TIM_IC_Start_DMA(), HAL_TIM_IC_Start_IT()\r\n           (++) Output Compare : HAL_TIM_OC_Start(), HAL_TIM_OC_Start_DMA(), HAL_TIM_OC_Start_IT()\r\n           (++) PWM generation : HAL_TIM_PWM_Start(), HAL_TIM_PWM_Start_DMA(), HAL_TIM_PWM_Start_IT()\r\n           (++) One-pulse mode output : HAL_TIM_OnePulse_Start(), HAL_TIM_OnePulse_Start_IT()\r\n           (++) Encoder mode output : HAL_TIM_Encoder_Start(), HAL_TIM_Encoder_Start_DMA(), HAL_TIM_Encoder_Start_IT().\r\n\r\n     (#) The DMA Burst is managed with the two following functions:\r\n         HAL_TIM_DMABurst_WriteStart()\r\n         HAL_TIM_DMABurst_ReadStart()\r\n\r\n    *** Callback registration ***\r\n  =============================================\r\n\r\n  [..]\r\n  The compilation define  USE_HAL_TIM_REGISTER_CALLBACKS when set to 1\r\n  allows the user to configure dynamically the driver callbacks.\r\n\r\n  [..]\r\n  Use Function @ref HAL_TIM_RegisterCallback() to register a callback.\r\n  @ref HAL_TIM_RegisterCallback() takes as parameters the HAL peripheral handle,\r\n  the Callback ID and a pointer to the user callback function.\r\n\r\n  [..]\r\n  Use function @ref HAL_TIM_UnRegisterCallback() to reset a callback to the default\r\n  weak function.\r\n  @ref HAL_TIM_UnRegisterCallback takes as parameters the HAL peripheral handle,\r\n  and the Callback ID.\r\n\r\n  [..]\r\n  These functions allow to register/unregister following callbacks:\r\n    (+) Base_MspInitCallback              : TIM Base Msp Init Callback.\r\n    (+) Base_MspDeInitCallback            : TIM Base Msp DeInit Callback.\r\n    (+) IC_MspInitCallback                : TIM IC Msp Init Callback.\r\n    (+) IC_MspDeInitCallback              : TIM IC Msp DeInit Callback.\r\n    (+) OC_MspInitCallback                : TIM OC Msp Init Callback.\r\n    (+) OC_MspDeInitCallback              : TIM OC Msp DeInit Callback.\r\n    (+) PWM_MspInitCallback               : TIM PWM Msp Init Callback.\r\n    (+) PWM_MspDeInitCallback             : TIM PWM Msp DeInit Callback.\r\n    (+) OnePulse_MspInitCallback          : TIM One Pulse Msp Init Callback.\r\n    (+) OnePulse_MspDeInitCallback        : TIM One Pulse Msp DeInit Callback.\r\n    (+) Encoder_MspInitCallback           : TIM Encoder Msp Init Callback.\r\n    (+) Encoder_MspDeInitCallback         : TIM Encoder Msp DeInit Callback.\r\n    (+) HallSensor_MspInitCallback        : TIM Hall Sensor Msp Init Callback.\r\n    (+) HallSensor_MspDeInitCallback      : TIM Hall Sensor Msp DeInit Callback.\r\n    (+) PeriodElapsedCallback             : TIM Period Elapsed Callback.\r\n    (+) PeriodElapsedHalfCpltCallback     : TIM Period Elapsed half complete Callback.\r\n    (+) TriggerCallback                   : TIM Trigger Callback.\r\n    (+) TriggerHalfCpltCallback           : TIM Trigger half complete Callback.\r\n    (+) IC_CaptureCallback                : TIM Input Capture Callback.\r\n    (+) IC_CaptureHalfCpltCallback        : TIM Input Capture half complete Callback.\r\n    (+) OC_DelayElapsedCallback           : TIM Output Compare Delay Elapsed Callback.\r\n    (+) PWM_PulseFinishedCallback         : TIM PWM Pulse Finished Callback.\r\n    (+) PWM_PulseFinishedHalfCpltCallback : TIM PWM Pulse Finished half complete Callback.\r\n    (+) ErrorCallback                     : TIM Error Callback.\r\n    (+) CommutationCallback               : TIM Commutation Callback.\r\n    (+) CommutationHalfCpltCallback       : TIM Commutation half complete Callback.\r\n    (+) BreakCallback                     : TIM Break Callback.\r\n\r\n  [..]\r\nBy default, after the Init and when the state is HAL_TIM_STATE_RESET\r\nall interrupt callbacks are set to the corresponding weak functions:\r\n  examples @ref HAL_TIM_TriggerCallback(), @ref HAL_TIM_ErrorCallback().\r\n\r\n  [..]\r\n  Exception done for MspInit and MspDeInit functions that are reset to the legacy weak\r\n  functionalities in the Init / DeInit only when these callbacks are null\r\n  (not registered beforehand). If not, MspInit or MspDeInit are not null, the Init / DeInit\r\n    keep and use the user MspInit / MspDeInit callbacks(registered beforehand)\r\n\r\n  [..]\r\n    Callbacks can be registered / unregistered in HAL_TIM_STATE_READY state only.\r\n    Exception done MspInit / MspDeInit that can be registered / unregistered\r\n    in HAL_TIM_STATE_READY or HAL_TIM_STATE_RESET state,\r\n    thus registered(user) MspInit / DeInit callbacks can be used during the Init / DeInit.\r\n  In that case first register the MspInit/MspDeInit user callbacks\r\n      using @ref HAL_TIM_RegisterCallback() before calling DeInit or Init function.\r\n\r\n  [..]\r\n      When The compilation define USE_HAL_TIM_REGISTER_CALLBACKS is set to 0 or\r\n      not defined, the callback registration feature is not available and all callbacks\r\n      are set to the corresponding weak functions.\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup TIM TIM\r\n * @brief TIM HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_TIM_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/* Private macros ------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @addtogroup TIM_Private_Functions\r\n * @{\r\n */\r\nstatic void              TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);\r\nstatic void              TIM_OC3_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);\r\nstatic void              TIM_OC4_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);\r\nstatic void              TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter);\r\nstatic void              TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);\r\nstatic void              TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter);\r\nstatic void              TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);\r\nstatic void              TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);\r\nstatic void              TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource);\r\nstatic void              TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma);\r\nstatic void              TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma);\r\nstatic void              TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma);\r\nstatic void              TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma);\r\nstatic void              TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma);\r\nstatic HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);\r\n/**\r\n * @}\r\n */\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @defgroup TIM_Exported_Functions TIM Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group1 TIM Time Base functions\r\n  *  @brief    Time Base functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n              ##### Time Base functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure the TIM base.\r\n    (+) De-initialize the TIM base.\r\n    (+) Start the Time Base.\r\n    (+) Stop the Time Base.\r\n    (+) Start the Time Base and enable interrupt.\r\n    (+) Stop the Time Base and disable interrupt.\r\n    (+) Start the Time Base and enable DMA transfer.\r\n    (+) Stop the Time Base and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM Time base Unit according to the specified\r\n *         parameters in the TIM_HandleTypeDef and initialize the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init()\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim) {\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->Base_MspInitCallback == NULL) {\r\n      htim->Base_MspInitCallback = HAL_TIM_Base_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->Base_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    HAL_TIM_Base_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Set the Time Base configuration */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM Base peripheral\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->Base_MspDeInitCallback == NULL) {\r\n    htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->Base_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */\r\n  HAL_TIM_Base_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Change the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Base MSP.\r\n * @param  htim TIM Base handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_Base_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM Base MSP.\r\n * @param  htim TIM Base handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_Base_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Base generation.\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  /* Check the TIM state */\r\n  if (htim->State != HAL_TIM_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Base generation.\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Base generation in interrupt mode.\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  /* Check the TIM state */\r\n  if (htim->State != HAL_TIM_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Enable the TIM Update interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Base generation in interrupt mode.\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the TIM Update interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_UPDATE);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Base generation in DMA mode.\r\n * @param  htim TIM Base handle\r\n * @param  pData The source Buffer address.\r\n * @param  Length The length of data to be transferred from memory to peripheral.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM state */\r\n  if (htim->State == HAL_TIM_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (htim->State == HAL_TIM_STATE_READY) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      htim->State = HAL_TIM_STATE_BUSY;\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the DMA Period elapsed callbacks */\r\n  htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback     = TIM_DMAPeriodElapsedCplt;\r\n  htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt;\r\n\r\n  /* Set the DMA error callback */\r\n  htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError;\r\n\r\n  /* Enable the DMA channel */\r\n  if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)pData, (uint32_t)&htim->Instance->ARR, Length) != HAL_OK) {\r\n    /* Return error status */\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Enable the TIM Update DMA request */\r\n  __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_UPDATE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Base generation in DMA mode.\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the TIM Update DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_UPDATE);\r\n\r\n  (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group2 TIM Output Compare functions\r\n  *  @brief    TIM Output Compare functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                  ##### TIM Output Compare functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure the TIM Output Compare.\r\n    (+) De-initialize the TIM Output Compare.\r\n    (+) Start the TIM Output Compare.\r\n    (+) Stop the TIM Output Compare.\r\n    (+) Start the TIM Output Compare and enable interrupt.\r\n    (+) Stop the TIM Output Compare and disable interrupt.\r\n    (+) Start the TIM Output Compare and enable DMA transfer.\r\n    (+) Stop the TIM Output Compare and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM Output Compare according to the specified\r\n *         parameters in the TIM_HandleTypeDef and initializes the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_OC_DeInit() before HAL_TIM_OC_Init()\r\n * @param  htim TIM Output Compare handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim) {\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->OC_MspInitCallback == NULL) {\r\n      htim->OC_MspInitCallback = HAL_TIM_OC_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->OC_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIM_OC_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Init the base time for the Output Compare */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM peripheral\r\n * @param  htim TIM Output Compare handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->OC_MspDeInitCallback == NULL) {\r\n    htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->OC_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */\r\n  HAL_TIM_OC_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Change the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Output Compare MSP.\r\n * @param  htim TIM Output Compare handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_OC_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM Output Compare MSP.\r\n * @param  htim TIM Output Compare handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_OC_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Disable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation in interrupt mode.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Enable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Enable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Enable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Enable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation in interrupt mode.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation in DMA mode.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  pData The source Buffer address.\r\n * @param  Length The length of data to be transferred from memory to TIM peripheral\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Set the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Enable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Enable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 3 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 4 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation in DMA mode.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group3 TIM PWM functions\r\n  *  @brief    TIM PWM functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                          ##### TIM PWM functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure the TIM PWM.\r\n    (+) De-initialize the TIM PWM.\r\n    (+) Start the TIM PWM.\r\n    (+) Stop the TIM PWM.\r\n    (+) Start the TIM PWM and enable interrupt.\r\n    (+) Stop the TIM PWM and disable interrupt.\r\n    (+) Start the TIM PWM and enable DMA transfer.\r\n    (+) Stop the TIM PWM and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM PWM Time Base according to the specified\r\n *         parameters in the TIM_HandleTypeDef and initializes the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_PWM_DeInit() before HAL_TIM_PWM_Init()\r\n * @param  htim TIM PWM handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim) {\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->PWM_MspInitCallback == NULL) {\r\n      htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->PWM_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIM_PWM_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Init the base time for the PWM */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM peripheral\r\n * @param  htim TIM PWM handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->PWM_MspDeInitCallback == NULL) {\r\n    htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->PWM_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */\r\n  HAL_TIM_PWM_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Change the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM PWM MSP.\r\n * @param  htim TIM PWM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PWM_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM PWM MSP.\r\n * @param  htim TIM PWM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PWM_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the PWM signal generation.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the PWM signal generation.\r\n * @param  htim TIM PWM handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Disable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the PWM signal generation in interrupt mode.\r\n * @param  htim TIM PWM handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Enable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Enable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Enable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Enable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the PWM signal generation in interrupt mode.\r\n * @param  htim TIM PWM handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM PWM signal generation in DMA mode.\r\n * @param  htim TIM PWM handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  pData The source Buffer address.\r\n * @param  Length The length of data to be transferred from memory to TIM peripheral\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Set the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Enable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Output Capture/Compare 3 request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 4 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM PWM signal generation in DMA mode.\r\n * @param  htim TIM PWM handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group4 TIM Input Capture functions\r\n  *  @brief    TIM Input Capture functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n              ##### TIM Input Capture functions #####\r\n  ==============================================================================\r\n [..]\r\n   This section provides functions allowing to:\r\n   (+) Initialize and configure the TIM Input Capture.\r\n   (+) De-initialize the TIM Input Capture.\r\n   (+) Start the TIM Input Capture.\r\n   (+) Stop the TIM Input Capture.\r\n   (+) Start the TIM Input Capture and enable interrupt.\r\n   (+) Stop the TIM Input Capture and disable interrupt.\r\n   (+) Start the TIM Input Capture and enable DMA transfer.\r\n   (+) Stop the TIM Input Capture and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM Input Capture Time base according to the specified\r\n *         parameters in the TIM_HandleTypeDef and initializes the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_IC_DeInit() before HAL_TIM_IC_Init()\r\n * @param  htim TIM Input Capture handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim) {\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->IC_MspInitCallback == NULL) {\r\n      htim->IC_MspInitCallback = HAL_TIM_IC_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->IC_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIM_IC_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Init the base time for the input capture */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM peripheral\r\n * @param  htim TIM Input Capture handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->IC_MspDeInitCallback == NULL) {\r\n    htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->IC_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */\r\n  HAL_TIM_IC_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Change the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Input Capture MSP.\r\n * @param  htim TIM Input Capture handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_IC_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM Input Capture MSP.\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_IC_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Input Capture measurement.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_state               = TIM_CHANNEL_STATE_GET(htim, Channel);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if ((channel_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Input Capture measurement.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Disable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Input Capture measurement in interrupt mode.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_state               = TIM_CHANNEL_STATE_GET(htim, Channel);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if ((channel_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Enable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Enable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Enable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Enable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n  /* Enable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Input Capture measurement in interrupt mode.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Input Capture measurement in DMA mode.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  pData The destination Buffer address.\r\n * @param  Length The length of data to be transferred from TIM peripheral to memory.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_state               = TIM_CHANNEL_STATE_GET(htim, Channel);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n  assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM channel state */\r\n  if ((channel_state == HAL_TIM_CHANNEL_STATE_BUSY) || (complementary_channel_state == HAL_TIM_CHANNEL_STATE_BUSY)) {\r\n    return HAL_BUSY;\r\n  } else if ((channel_state == HAL_TIM_CHANNEL_STATE_READY) && (complementary_channel_state == HAL_TIM_CHANNEL_STATE_READY)) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 2  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->CCR3, (uint32_t)pData, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 3  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->CCR4, (uint32_t)pData, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 4  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Input Capture measurement in DMA mode.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n  assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3  DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4  DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group5 TIM One Pulse functions\r\n  *  @brief    TIM One Pulse functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                        ##### TIM One Pulse functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure the TIM One Pulse.\r\n    (+) De-initialize the TIM One Pulse.\r\n    (+) Start the TIM One Pulse.\r\n    (+) Stop the TIM One Pulse.\r\n    (+) Start the TIM One Pulse and enable interrupt.\r\n    (+) Stop the TIM One Pulse and disable interrupt.\r\n    (+) Start the TIM One Pulse and enable DMA transfer.\r\n    (+) Stop the TIM One Pulse and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM One Pulse Time Base according to the specified\r\n *         parameters in the TIM_HandleTypeDef and initializes the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_OnePulse_DeInit() before HAL_TIM_OnePulse_Init()\r\n * @note   When the timer instance is initialized in One Pulse mode, timer\r\n *         channels 1 and channel 2 are reserved and cannot be used for other\r\n *         purpose.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OnePulseMode Select the One pulse mode.\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_OPMODE_SINGLE: Only one pulse will be generated.\r\n *            @arg TIM_OPMODE_REPETITIVE: Repetitive pulses will be generated.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode) {\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_OPM_MODE(OnePulseMode));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->OnePulse_MspInitCallback == NULL) {\r\n      htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->OnePulse_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIM_OnePulse_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Configure the Time base in the One Pulse Mode */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Reset the OPM Bit */\r\n  htim->Instance->CR1 &= ~TIM_CR1_OPM;\r\n\r\n  /* Configure the OPM Mode */\r\n  htim->Instance->CR1 |= OnePulseMode;\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM One Pulse\r\n * @param  htim TIM One Pulse handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->OnePulse_MspDeInitCallback == NULL) {\r\n    htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->OnePulse_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */\r\n  HAL_TIM_OnePulse_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM One Pulse MSP.\r\n * @param  htim TIM One Pulse handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_OnePulse_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM One Pulse MSP.\r\n * @param  htim TIM One Pulse handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_OnePulse_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM One Pulse signal generation.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(OutputChannel);\r\n\r\n  /* Check the TIM channels state */\r\n  if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n      (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Capture compare and the Input Capture channels\r\n    (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)\r\n    if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and\r\n    if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output\r\n    in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together\r\n\r\n    No need to enable the counter, it's enabled automatically by hardware\r\n    (the counter starts in response to a stimulus and generate a pulse */\r\n\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM One Pulse signal generation.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channels to be disable\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(OutputChannel);\r\n\r\n  /* Disable the Capture compare and the Input Capture channels\r\n  (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)\r\n  if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and\r\n  if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output\r\n  in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */\r\n\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM One Pulse signal generation in interrupt mode.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(OutputChannel);\r\n\r\n  /* Check the TIM channels state */\r\n  if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n      (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Capture compare and the Input Capture channels\r\n    (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)\r\n    if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and\r\n    if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output\r\n    in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together\r\n\r\n    No need to enable the counter, it's enabled automatically by hardware\r\n    (the counter starts in response to a stimulus and generate a pulse */\r\n\r\n  /* Enable the TIM Capture/Compare 1 interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Enable the TIM Capture/Compare 2 interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM One Pulse signal generation in interrupt mode.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(OutputChannel);\r\n\r\n  /* Disable the TIM Capture/Compare 1 interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Disable the TIM Capture/Compare 2 interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n\r\n  /* Disable the Capture compare and the Input Capture channels\r\n  (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)\r\n  if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and\r\n  if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output\r\n  in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group6 TIM Encoder functions\r\n  *  @brief    TIM Encoder functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                          ##### TIM Encoder functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure the TIM Encoder.\r\n    (+) De-initialize the TIM Encoder.\r\n    (+) Start the TIM Encoder.\r\n    (+) Stop the TIM Encoder.\r\n    (+) Start the TIM Encoder and enable interrupt.\r\n    (+) Stop the TIM Encoder and disable interrupt.\r\n    (+) Start the TIM Encoder and enable DMA transfer.\r\n    (+) Stop the TIM Encoder and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM Encoder Interface and initialize the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_Encoder_DeInit() before HAL_TIM_Encoder_Init()\r\n * @note   Encoder mode and External clock mode 2 are not compatible and must not be selected together\r\n *         Ex: A call for @ref HAL_TIM_Encoder_Init will erase the settings of @ref HAL_TIM_ConfigClockSource\r\n *         using TIM_CLOCKSOURCE_ETRMODE2 and vice versa\r\n * @note   When the timer instance is initialized in Encoder mode, timer\r\n *         channels 1 and channel 2 are reserved and cannot be used for other\r\n *         purpose.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  sConfig TIM Encoder Interface configuration structure\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_InitTypeDef *sConfig) {\r\n  uint32_t tmpsmcr;\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n  assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode));\r\n  assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection));\r\n  assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection));\r\n  assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC1Polarity));\r\n  assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC2Polarity));\r\n  assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));\r\n  assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler));\r\n  assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));\r\n  assert_param(IS_TIM_IC_FILTER(sConfig->IC2Filter));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->Encoder_MspInitCallback == NULL) {\r\n      htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->Encoder_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIM_Encoder_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Reset the SMS and ECE bits */\r\n  htim->Instance->SMCR &= ~(TIM_SMCR_SMS | TIM_SMCR_ECE);\r\n\r\n  /* Configure the Time base in the Encoder Mode */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Get the TIMx SMCR register value */\r\n  tmpsmcr = htim->Instance->SMCR;\r\n\r\n  /* Get the TIMx CCMR1 register value */\r\n  tmpccmr1 = htim->Instance->CCMR1;\r\n\r\n  /* Get the TIMx CCER register value */\r\n  tmpccer = htim->Instance->CCER;\r\n\r\n  /* Set the encoder Mode */\r\n  tmpsmcr |= sConfig->EncoderMode;\r\n\r\n  /* Select the Capture Compare 1 and the Capture Compare 2 as input */\r\n  tmpccmr1 &= ~(TIM_CCMR1_CC1S | TIM_CCMR1_CC2S);\r\n  tmpccmr1 |= (sConfig->IC1Selection | (sConfig->IC2Selection << 8U));\r\n\r\n  /* Set the Capture Compare 1 and the Capture Compare 2 prescalers and filters */\r\n  tmpccmr1 &= ~(TIM_CCMR1_IC1PSC | TIM_CCMR1_IC2PSC);\r\n  tmpccmr1 &= ~(TIM_CCMR1_IC1F | TIM_CCMR1_IC2F);\r\n  tmpccmr1 |= sConfig->IC1Prescaler | (sConfig->IC2Prescaler << 8U);\r\n  tmpccmr1 |= (sConfig->IC1Filter << 4U) | (sConfig->IC2Filter << 12U);\r\n\r\n  /* Set the TI1 and the TI2 Polarities */\r\n  tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P);\r\n  tmpccer |= sConfig->IC1Polarity | (sConfig->IC2Polarity << 4U);\r\n\r\n  /* Write to TIMx SMCR */\r\n  htim->Instance->SMCR = tmpsmcr;\r\n\r\n  /* Write to TIMx CCMR1 */\r\n  htim->Instance->CCMR1 = tmpccmr1;\r\n\r\n  /* Write to TIMx CCER */\r\n  htim->Instance->CCER = tmpccer;\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM Encoder interface\r\n * @param  htim TIM Encoder Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->Encoder_MspDeInitCallback == NULL) {\r\n    htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->Encoder_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */\r\n  HAL_TIM_Encoder_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Encoder Interface MSP.\r\n * @param  htim TIM Encoder Interface handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_Encoder_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM Encoder Interface MSP.\r\n * @param  htim TIM Encoder Interface handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_Encoder_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Encoder Interface.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    if ((channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n        (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  }\r\n\r\n  /* Enable the encoder interface channels */\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n    break;\r\n  }\r\n\r\n  default: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n    break;\r\n  }\r\n  }\r\n  /* Enable the Peripheral */\r\n  __HAL_TIM_ENABLE(htim);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Encoder Interface.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channels 1 and 2\r\n    (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n    break;\r\n  }\r\n\r\n  default: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n    break;\r\n  }\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) {\r\n    TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else {\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Encoder Interface in interrupt mode.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    if ((channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n        (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  }\r\n\r\n  /* Enable the encoder interface channels */\r\n  /* Enable the capture compare Interrupts 1 and/or 2 */\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  default: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n  }\r\n\r\n  /* Enable the Peripheral */\r\n  __HAL_TIM_ENABLE(htim);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Encoder Interface in interrupt mode.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channels 1 and 2\r\n    (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare Interrupts 1 */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare Interrupts 2 */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n  } else {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare Interrupts 1 and 2 */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) {\r\n    TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else {\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Encoder Interface in DMA mode.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @param  pData1 The destination Buffer address for IC1.\r\n * @param  pData2 The destination Buffer address for IC2.\r\n * @param  Length The length of data to be transferred from TIM peripheral to memory.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length) {\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)) {\r\n      return HAL_BUSY;\r\n    } else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY)) {\r\n      if ((pData1 == NULL) && (Length > 0U)) {\r\n        return HAL_ERROR;\r\n      } else {\r\n        TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n        TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      }\r\n    } else {\r\n      return HAL_ERROR;\r\n    }\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    if ((channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY) || (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY)) {\r\n      return HAL_BUSY;\r\n    } else if ((channel_2_state == HAL_TIM_CHANNEL_STATE_READY) && (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_READY)) {\r\n      if ((pData2 == NULL) && (Length > 0U)) {\r\n        return HAL_ERROR;\r\n      } else {\r\n        TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n        TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      }\r\n    } else {\r\n      return HAL_ERROR;\r\n    }\r\n  } else {\r\n    if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) || (channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY) || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) ||\r\n        (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY)) {\r\n      return HAL_BUSY;\r\n    } else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) && (channel_2_state == HAL_TIM_CHANNEL_STATE_READY) && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY) &&\r\n               (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_READY)) {\r\n      if ((((pData1 == NULL) || (pData2 == NULL))) && (Length > 0U)) {\r\n        return HAL_ERROR;\r\n      } else {\r\n        TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n        TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n        TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n        TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      }\r\n    } else {\r\n      return HAL_ERROR;\r\n    }\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Input Capture DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n\r\n    /* Enable the Peripheral */\r\n    __HAL_TIM_ENABLE(htim);\r\n\r\n    /* Enable the Capture compare channel */\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Input Capture  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n\r\n    /* Enable the Peripheral */\r\n    __HAL_TIM_ENABLE(htim);\r\n\r\n    /* Enable the Capture compare channel */\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_ALL: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the Peripheral */\r\n    __HAL_TIM_ENABLE(htim);\r\n\r\n    /* Enable the Capture compare channel */\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n\r\n    /* Enable the TIM Input Capture  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    /* Enable the TIM Input Capture  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Encoder Interface in DMA mode.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channels 1 and 2\r\n    (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare DMA Request 1 */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare DMA Request 2 */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n  } else {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare DMA Request 1 and 2 */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) {\r\n    TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else {\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management\r\n  *  @brief    TIM IRQ handler management\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                        ##### IRQ handler management #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides Timer IRQ handler function.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  This function handles TIM interrupts requests.\r\n * @param  htim TIM  handle\r\n * @retval None\r\n */\r\nvoid HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) {\r\n  /* Capture compare 1 event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC1) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC1) != RESET) {\r\n      {\r\n        __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC1);\r\n        htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n\r\n        /* Input capture event */\r\n        if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U) {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n          htim->IC_CaptureCallback(htim);\r\n#else\r\n          HAL_TIM_IC_CaptureCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n        }\r\n        /* Output compare event */\r\n        else {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n          htim->OC_DelayElapsedCallback(htim);\r\n          htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n          HAL_TIM_OC_DelayElapsedCallback(htim);\r\n          HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n        }\r\n        htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n      }\r\n    }\r\n  }\r\n  /* Capture compare 2 event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC2) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC2) != RESET) {\r\n      __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC2);\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n      /* Input capture event */\r\n      if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U) {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->IC_CaptureCallback(htim);\r\n#else\r\n        HAL_TIM_IC_CaptureCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      /* Output compare event */\r\n      else {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->OC_DelayElapsedCallback(htim);\r\n        htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n        HAL_TIM_OC_DelayElapsedCallback(htim);\r\n        HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n    }\r\n  }\r\n  /* Capture compare 3 event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC3) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC3) != RESET) {\r\n      __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC3);\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n      /* Input capture event */\r\n      if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U) {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->IC_CaptureCallback(htim);\r\n#else\r\n        HAL_TIM_IC_CaptureCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      /* Output compare event */\r\n      else {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->OC_DelayElapsedCallback(htim);\r\n        htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n        HAL_TIM_OC_DelayElapsedCallback(htim);\r\n        HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n    }\r\n  }\r\n  /* Capture compare 4 event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC4) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC4) != RESET) {\r\n      __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC4);\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n      /* Input capture event */\r\n      if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U) {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->IC_CaptureCallback(htim);\r\n#else\r\n        HAL_TIM_IC_CaptureCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      /* Output compare event */\r\n      else {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->OC_DelayElapsedCallback(htim);\r\n        htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n        HAL_TIM_OC_DelayElapsedCallback(htim);\r\n        HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n    }\r\n  }\r\n  /* TIM Update event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_UPDATE) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) != RESET) {\r\n      __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n      htim->PeriodElapsedCallback(htim);\r\n#else\r\n      HAL_TIM_PeriodElapsedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n    }\r\n  }\r\n  /* TIM Break input event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_BREAK) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_BREAK) != RESET) {\r\n      __HAL_TIM_CLEAR_IT(htim, TIM_IT_BREAK);\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n      htim->BreakCallback(htim);\r\n#else\r\n      HAL_TIMEx_BreakCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n    }\r\n  }\r\n  /* TIM Trigger detection event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_TRIGGER) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_TRIGGER) != RESET) {\r\n      __HAL_TIM_CLEAR_IT(htim, TIM_IT_TRIGGER);\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n      htim->TriggerCallback(htim);\r\n#else\r\n      HAL_TIM_TriggerCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n    }\r\n  }\r\n  /* TIM commutation event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_COM) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_COM) != RESET) {\r\n      __HAL_TIM_CLEAR_IT(htim, TIM_FLAG_COM);\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n      htim->CommutationCallback(htim);\r\n#else\r\n      HAL_TIMEx_CommutCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions\r\n  *  @brief    TIM Peripheral Control functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                   ##### Peripheral Control functions #####\r\n  ==============================================================================\r\n [..]\r\n   This section provides functions allowing to:\r\n      (+) Configure The Input Output channels for OC, PWM, IC or One Pulse mode.\r\n      (+) Configure External Clock source.\r\n      (+) Configure Complementary channels, break features and dead time.\r\n      (+) Configure Master and the Slave synchronization.\r\n      (+) Configure the DMA Burst Mode.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initializes the TIM Output Compare Channels according to the specified\r\n *         parameters in the TIM_OC_InitTypeDef.\r\n * @param  htim TIM Output Compare handle\r\n * @param  sConfig TIM Output Compare configuration structure\r\n * @param  Channel TIM Channels to configure\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CHANNELS(Channel));\r\n  assert_param(IS_TIM_OC_MODE(sConfig->OCMode));\r\n  assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity));\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the TIM Channel 1 in Output Compare */\r\n    TIM_OC1_SetConfig(htim->Instance, sConfig);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the TIM Channel 2 in Output Compare */\r\n    TIM_OC2_SetConfig(htim->Instance, sConfig);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the TIM Channel 3 in Output Compare */\r\n    TIM_OC3_SetConfig(htim->Instance, sConfig);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the TIM Channel 4 in Output Compare */\r\n    TIM_OC4_SetConfig(htim->Instance, sConfig);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Input Capture Channels according to the specified\r\n *         parameters in the TIM_IC_InitTypeDef.\r\n * @param  htim TIM IC handle\r\n * @param  sConfig TIM Input Capture configuration structure\r\n * @param  Channel TIM Channel to configure\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_IC_POLARITY(sConfig->ICPolarity));\r\n  assert_param(IS_TIM_IC_SELECTION(sConfig->ICSelection));\r\n  assert_param(IS_TIM_IC_PRESCALER(sConfig->ICPrescaler));\r\n  assert_param(IS_TIM_IC_FILTER(sConfig->ICFilter));\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    /* TI1 Configuration */\r\n    TIM_TI1_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n    /* Reset the IC1PSC Bits */\r\n    htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;\r\n\r\n    /* Set the IC1PSC value */\r\n    htim->Instance->CCMR1 |= sConfig->ICPrescaler;\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    /* TI2 Configuration */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n    TIM_TI2_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n    /* Reset the IC2PSC Bits */\r\n    htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC;\r\n\r\n    /* Set the IC2PSC value */\r\n    htim->Instance->CCMR1 |= (sConfig->ICPrescaler << 8U);\r\n  } else if (Channel == TIM_CHANNEL_3) {\r\n    /* TI3 Configuration */\r\n    assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));\r\n\r\n    TIM_TI3_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n    /* Reset the IC3PSC Bits */\r\n    htim->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC;\r\n\r\n    /* Set the IC3PSC value */\r\n    htim->Instance->CCMR2 |= sConfig->ICPrescaler;\r\n  } else {\r\n    /* TI4 Configuration */\r\n    assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));\r\n\r\n    TIM_TI4_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n    /* Reset the IC4PSC Bits */\r\n    htim->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC;\r\n\r\n    /* Set the IC4PSC value */\r\n    htim->Instance->CCMR2 |= (sConfig->ICPrescaler << 8U);\r\n  }\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM PWM  channels according to the specified\r\n *         parameters in the TIM_OC_InitTypeDef.\r\n * @param  htim TIM PWM handle\r\n * @param  sConfig TIM PWM configuration structure\r\n * @param  Channel TIM Channels to be configured\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CHANNELS(Channel));\r\n  assert_param(IS_TIM_PWM_MODE(sConfig->OCMode));\r\n  assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity));\r\n  assert_param(IS_TIM_FAST_STATE(sConfig->OCFastMode));\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the Channel 1 in PWM mode */\r\n    TIM_OC1_SetConfig(htim->Instance, sConfig);\r\n\r\n    /* Set the Preload enable bit for channel1 */\r\n    htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE;\r\n\r\n    /* Configure the Output Fast mode */\r\n    htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE;\r\n    htim->Instance->CCMR1 |= sConfig->OCFastMode;\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the Channel 2 in PWM mode */\r\n    TIM_OC2_SetConfig(htim->Instance, sConfig);\r\n\r\n    /* Set the Preload enable bit for channel2 */\r\n    htim->Instance->CCMR1 |= TIM_CCMR1_OC2PE;\r\n\r\n    /* Configure the Output Fast mode */\r\n    htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE;\r\n    htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U;\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the Channel 3 in PWM mode */\r\n    TIM_OC3_SetConfig(htim->Instance, sConfig);\r\n\r\n    /* Set the Preload enable bit for channel3 */\r\n    htim->Instance->CCMR2 |= TIM_CCMR2_OC3PE;\r\n\r\n    /* Configure the Output Fast mode */\r\n    htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE;\r\n    htim->Instance->CCMR2 |= sConfig->OCFastMode;\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the Channel 4 in PWM mode */\r\n    TIM_OC4_SetConfig(htim->Instance, sConfig);\r\n\r\n    /* Set the Preload enable bit for channel4 */\r\n    htim->Instance->CCMR2 |= TIM_CCMR2_OC4PE;\r\n\r\n    /* Configure the Output Fast mode */\r\n    htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE;\r\n    htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U;\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM One Pulse Channels according to the specified\r\n *         parameters in the TIM_OnePulse_InitTypeDef.\r\n * @param  htim TIM One Pulse handle\r\n * @param  sConfig TIM One Pulse configuration structure\r\n * @param  OutputChannel TIM output channel to configure\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @param  InputChannel TIM input Channel to configure\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @note  To output a waveform with a minimum delay user can enable the fast\r\n *        mode by calling the @ref __HAL_TIM_ENABLE_OCxFAST macro. Then CCx\r\n *        output is forced in response to the edge detection on TIx input,\r\n *        without taking in account the comparison.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel) {\r\n  TIM_OC_InitTypeDef temp1;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_OPM_CHANNELS(OutputChannel));\r\n  assert_param(IS_TIM_OPM_CHANNELS(InputChannel));\r\n\r\n  if (OutputChannel != InputChannel) {\r\n    /* Process Locked */\r\n    __HAL_LOCK(htim);\r\n\r\n    htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n    /* Extract the Output compare configuration from sConfig structure */\r\n    temp1.OCMode       = sConfig->OCMode;\r\n    temp1.Pulse        = sConfig->Pulse;\r\n    temp1.OCPolarity   = sConfig->OCPolarity;\r\n    temp1.OCNPolarity  = sConfig->OCNPolarity;\r\n    temp1.OCIdleState  = sConfig->OCIdleState;\r\n    temp1.OCNIdleState = sConfig->OCNIdleState;\r\n\r\n    switch (OutputChannel) {\r\n    case TIM_CHANNEL_1: {\r\n      assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n\r\n      TIM_OC1_SetConfig(htim->Instance, &temp1);\r\n      break;\r\n    }\r\n    case TIM_CHANNEL_2: {\r\n      assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n      TIM_OC2_SetConfig(htim->Instance, &temp1);\r\n      break;\r\n    }\r\n    default:\r\n      break;\r\n    }\r\n\r\n    switch (InputChannel) {\r\n    case TIM_CHANNEL_1: {\r\n      assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n\r\n      TIM_TI1_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n      /* Reset the IC1PSC Bits */\r\n      htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;\r\n\r\n      /* Select the Trigger source */\r\n      htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n      htim->Instance->SMCR |= TIM_TS_TI1FP1;\r\n\r\n      /* Select the Slave Mode */\r\n      htim->Instance->SMCR &= ~TIM_SMCR_SMS;\r\n      htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER;\r\n      break;\r\n    }\r\n    case TIM_CHANNEL_2: {\r\n      assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n      TIM_TI2_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n      /* Reset the IC2PSC Bits */\r\n      htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC;\r\n\r\n      /* Select the Trigger source */\r\n      htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n      htim->Instance->SMCR |= TIM_TS_TI2FP2;\r\n\r\n      /* Select the Slave Mode */\r\n      htim->Instance->SMCR &= ~TIM_SMCR_SMS;\r\n      htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER;\r\n      break;\r\n    }\r\n\r\n    default:\r\n      break;\r\n    }\r\n\r\n    htim->State = HAL_TIM_STATE_READY;\r\n\r\n    __HAL_UNLOCK(htim);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Configure the DMA Burst to transfer Data from the memory to the TIM peripheral\r\n * @param  htim TIM handle\r\n * @param  BurstBaseAddress TIM Base address from where the DMA  will start the Data write\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMABASE_CR1\r\n *            @arg TIM_DMABASE_CR2\r\n *            @arg TIM_DMABASE_SMCR\r\n *            @arg TIM_DMABASE_DIER\r\n *            @arg TIM_DMABASE_SR\r\n *            @arg TIM_DMABASE_EGR\r\n *            @arg TIM_DMABASE_CCMR1\r\n *            @arg TIM_DMABASE_CCMR2\r\n *            @arg TIM_DMABASE_CCER\r\n *            @arg TIM_DMABASE_CNT\r\n *            @arg TIM_DMABASE_PSC\r\n *            @arg TIM_DMABASE_ARR\r\n *            @arg TIM_DMABASE_RCR\r\n *            @arg TIM_DMABASE_CCR1\r\n *            @arg TIM_DMABASE_CCR2\r\n *            @arg TIM_DMABASE_CCR3\r\n *            @arg TIM_DMABASE_CCR4\r\n *            @arg TIM_DMABASE_BDTR\r\n * @param  BurstRequestSrc TIM DMA Request sources\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: TIM update Interrupt source\r\n *            @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source\r\n *            @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source\r\n *            @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source\r\n *            @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source\r\n *            @arg TIM_DMA_COM: TIM Commutation DMA source\r\n *            @arg TIM_DMA_TRIGGER: TIM Trigger DMA source\r\n * @param  BurstBuffer The Buffer address.\r\n * @param  BurstLength DMA Burst length. This parameter can be one value\r\n *         between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS.\r\n * @note   This function should be used only when BurstLength is equal to DMA data transfer length.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength) {\r\n  return HAL_TIM_DMABurst_MultiWriteStart(htim, BurstBaseAddress, BurstRequestSrc, BurstBuffer, BurstLength, ((BurstLength) >> 8U) + 1U);\r\n}\r\n\r\n/**\r\n * @brief  Configure the DMA Burst to transfer multiple Data from the memory to the TIM peripheral\r\n * @param  htim TIM handle\r\n * @param  BurstBaseAddress TIM Base address from where the DMA will start the Data write\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMABASE_CR1\r\n *            @arg TIM_DMABASE_CR2\r\n *            @arg TIM_DMABASE_SMCR\r\n *            @arg TIM_DMABASE_DIER\r\n *            @arg TIM_DMABASE_SR\r\n *            @arg TIM_DMABASE_EGR\r\n *            @arg TIM_DMABASE_CCMR1\r\n *            @arg TIM_DMABASE_CCMR2\r\n *            @arg TIM_DMABASE_CCER\r\n *            @arg TIM_DMABASE_CNT\r\n *            @arg TIM_DMABASE_PSC\r\n *            @arg TIM_DMABASE_ARR\r\n *            @arg TIM_DMABASE_RCR\r\n *            @arg TIM_DMABASE_CCR1\r\n *            @arg TIM_DMABASE_CCR2\r\n *            @arg TIM_DMABASE_CCR3\r\n *            @arg TIM_DMABASE_CCR4\r\n *            @arg TIM_DMABASE_BDTR\r\n * @param  BurstRequestSrc TIM DMA Request sources\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: TIM update Interrupt source\r\n *            @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source\r\n *            @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source\r\n *            @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source\r\n *            @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source\r\n *            @arg TIM_DMA_COM: TIM Commutation DMA source\r\n *            @arg TIM_DMA_TRIGGER: TIM Trigger DMA source\r\n * @param  BurstBuffer The Buffer address.\r\n * @param  BurstLength DMA Burst length. This parameter can be one value\r\n *         between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS.\r\n * @param  DataLength Data length. This parameter can be one value\r\n *         between 1 and 0xFFFF.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength, uint32_t DataLength) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_DMA_BASE(BurstBaseAddress));\r\n  assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));\r\n  assert_param(IS_TIM_DMA_LENGTH(BurstLength));\r\n  assert_param(IS_TIM_DMA_DATA_LENGTH(DataLength));\r\n\r\n  if (htim->DMABurstState == HAL_DMA_BURST_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (htim->DMABurstState == HAL_DMA_BURST_STATE_READY) {\r\n    if ((BurstBuffer == NULL) && (BurstLength > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      htim->DMABurstState = HAL_DMA_BURST_STATE_BUSY;\r\n    }\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n  switch (BurstRequestSrc) {\r\n  case TIM_DMA_UPDATE: {\r\n    /* Set the DMA Period elapsed callbacks */\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback     = TIM_DMAPeriodElapsedCplt;\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC1: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC2: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC3: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC4: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_COM: {\r\n    /* Set the DMA commutation callbacks */\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback     = TIMEx_DMACommutationCplt;\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_TRIGGER: {\r\n    /* Set the DMA trigger callbacks */\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback     = TIM_DMATriggerCplt;\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferHalfCpltCallback = TIM_DMATriggerHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Configure the DMA Burst Mode */\r\n  htim->Instance->DCR = (BurstBaseAddress | BurstLength);\r\n  /* Enable the TIM DMA Request */\r\n  __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM DMA Burst mode\r\n * @param  htim TIM handle\r\n * @param  BurstRequestSrc TIM DMA Request sources to disable\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));\r\n\r\n  /* Abort the DMA transfer (at least disable the DMA channel) */\r\n  switch (BurstRequestSrc) {\r\n  case TIM_DMA_UPDATE: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC1: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC2: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC3: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC4: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);\r\n    break;\r\n  }\r\n  case TIM_DMA_COM: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_COMMUTATION]);\r\n    break;\r\n  }\r\n  case TIM_DMA_TRIGGER: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_TRIGGER]);\r\n    break;\r\n  }\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the TIM Update DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc);\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configure the DMA Burst to transfer Data from the TIM peripheral to the memory\r\n * @param  htim TIM handle\r\n * @param  BurstBaseAddress TIM Base address from where the DMA  will start the Data read\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMABASE_CR1\r\n *            @arg TIM_DMABASE_CR2\r\n *            @arg TIM_DMABASE_SMCR\r\n *            @arg TIM_DMABASE_DIER\r\n *            @arg TIM_DMABASE_SR\r\n *            @arg TIM_DMABASE_EGR\r\n *            @arg TIM_DMABASE_CCMR1\r\n *            @arg TIM_DMABASE_CCMR2\r\n *            @arg TIM_DMABASE_CCER\r\n *            @arg TIM_DMABASE_CNT\r\n *            @arg TIM_DMABASE_PSC\r\n *            @arg TIM_DMABASE_ARR\r\n *            @arg TIM_DMABASE_RCR\r\n *            @arg TIM_DMABASE_CCR1\r\n *            @arg TIM_DMABASE_CCR2\r\n *            @arg TIM_DMABASE_CCR3\r\n *            @arg TIM_DMABASE_CCR4\r\n *            @arg TIM_DMABASE_BDTR\r\n * @param  BurstRequestSrc TIM DMA Request sources\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: TIM update Interrupt source\r\n *            @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source\r\n *            @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source\r\n *            @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source\r\n *            @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source\r\n *            @arg TIM_DMA_COM: TIM Commutation DMA source\r\n *            @arg TIM_DMA_TRIGGER: TIM Trigger DMA source\r\n * @param  BurstBuffer The Buffer address.\r\n * @param  BurstLength DMA Burst length. This parameter can be one value\r\n *         between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS.\r\n * @note   This function should be used only when BurstLength is equal to DMA data transfer length.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength) {\r\n  return HAL_TIM_DMABurst_MultiReadStart(htim, BurstBaseAddress, BurstRequestSrc, BurstBuffer, BurstLength, ((BurstLength) >> 8U) + 1U);\r\n}\r\n\r\n/**\r\n * @brief  Configure the DMA Burst to transfer Data from the TIM peripheral to the memory\r\n * @param  htim TIM handle\r\n * @param  BurstBaseAddress TIM Base address from where the DMA  will start the Data read\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMABASE_CR1\r\n *            @arg TIM_DMABASE_CR2\r\n *            @arg TIM_DMABASE_SMCR\r\n *            @arg TIM_DMABASE_DIER\r\n *            @arg TIM_DMABASE_SR\r\n *            @arg TIM_DMABASE_EGR\r\n *            @arg TIM_DMABASE_CCMR1\r\n *            @arg TIM_DMABASE_CCMR2\r\n *            @arg TIM_DMABASE_CCER\r\n *            @arg TIM_DMABASE_CNT\r\n *            @arg TIM_DMABASE_PSC\r\n *            @arg TIM_DMABASE_ARR\r\n *            @arg TIM_DMABASE_RCR\r\n *            @arg TIM_DMABASE_CCR1\r\n *            @arg TIM_DMABASE_CCR2\r\n *            @arg TIM_DMABASE_CCR3\r\n *            @arg TIM_DMABASE_CCR4\r\n *            @arg TIM_DMABASE_BDTR\r\n * @param  BurstRequestSrc TIM DMA Request sources\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: TIM update Interrupt source\r\n *            @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source\r\n *            @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source\r\n *            @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source\r\n *            @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source\r\n *            @arg TIM_DMA_COM: TIM Commutation DMA source\r\n *            @arg TIM_DMA_TRIGGER: TIM Trigger DMA source\r\n * @param  BurstBuffer The Buffer address.\r\n * @param  BurstLength DMA Burst length. This parameter can be one value\r\n *         between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS.\r\n * @param  DataLength Data length. This parameter can be one value\r\n *         between 1 and 0xFFFF.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_MultiReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength, uint32_t DataLength) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_DMA_BASE(BurstBaseAddress));\r\n  assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));\r\n  assert_param(IS_TIM_DMA_LENGTH(BurstLength));\r\n  assert_param(IS_TIM_DMA_DATA_LENGTH(DataLength));\r\n\r\n  if (htim->DMABurstState == HAL_DMA_BURST_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (htim->DMABurstState == HAL_DMA_BURST_STATE_READY) {\r\n    if ((BurstBuffer == NULL) && (BurstLength > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      htim->DMABurstState = HAL_DMA_BURST_STATE_BUSY;\r\n    }\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n  switch (BurstRequestSrc) {\r\n  case TIM_DMA_UPDATE: {\r\n    /* Set the DMA Period elapsed callbacks */\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback     = TIM_DMAPeriodElapsedCplt;\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC1: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC2: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC3: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC4: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_COM: {\r\n    /* Set the DMA commutation callbacks */\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback     = TIMEx_DMACommutationCplt;\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_TRIGGER: {\r\n    /* Set the DMA trigger callbacks */\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback     = TIM_DMATriggerCplt;\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferHalfCpltCallback = TIM_DMATriggerHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Configure the DMA Burst Mode */\r\n  htim->Instance->DCR = (BurstBaseAddress | BurstLength);\r\n\r\n  /* Enable the TIM DMA Request */\r\n  __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stop the DMA burst reading\r\n * @param  htim TIM handle\r\n * @param  BurstRequestSrc TIM DMA Request sources to disable.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));\r\n\r\n  /* Abort the DMA transfer (at least disable the DMA channel) */\r\n  switch (BurstRequestSrc) {\r\n  case TIM_DMA_UPDATE: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC1: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC2: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC3: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC4: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);\r\n    break;\r\n  }\r\n  case TIM_DMA_COM: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_COMMUTATION]);\r\n    break;\r\n  }\r\n  case TIM_DMA_TRIGGER: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_TRIGGER]);\r\n    break;\r\n  }\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the TIM Update DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc);\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Generate a software event\r\n * @param  htim TIM handle\r\n * @param  EventSource specifies the event source.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_EVENTSOURCE_UPDATE: Timer update Event source\r\n *            @arg TIM_EVENTSOURCE_CC1: Timer Capture Compare 1 Event source\r\n *            @arg TIM_EVENTSOURCE_CC2: Timer Capture Compare 2 Event source\r\n *            @arg TIM_EVENTSOURCE_CC3: Timer Capture Compare 3 Event source\r\n *            @arg TIM_EVENTSOURCE_CC4: Timer Capture Compare 4 Event source\r\n *            @arg TIM_EVENTSOURCE_COM: Timer COM event source\r\n *            @arg TIM_EVENTSOURCE_TRIGGER: Timer Trigger Event source\r\n *            @arg TIM_EVENTSOURCE_BREAK: Timer Break event source\r\n * @note   Basic timers can only generate an update event.\r\n * @note   TIM_EVENTSOURCE_COM is relevant only with advanced timer instances.\r\n * @note   TIM_EVENTSOURCE_BREAK are relevant only for timer instances\r\n *         supporting a break input.\r\n * @retval HAL status\r\n */\r\n\r\nHAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_EVENT_SOURCE(EventSource));\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  /* Change the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Set the event sources */\r\n  htim->Instance->EGR = EventSource;\r\n\r\n  /* Change the TIM state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the OCRef clear feature\r\n * @param  htim TIM handle\r\n * @param  sClearInputConfig pointer to a TIM_ClearInputConfigTypeDef structure that\r\n *         contains the OCREF clear feature and parameters for the TIM peripheral.\r\n * @param  Channel specifies the TIM Channel\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_OCXREF_CLEAR_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_CLEARINPUT_SOURCE(sClearInputConfig->ClearInputSource));\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  switch (sClearInputConfig->ClearInputSource) {\r\n  case TIM_CLEARINPUTSOURCE_NONE: {\r\n    /* Clear the OCREF clear selection bit and the the ETR Bits */\r\n    CLEAR_BIT(htim->Instance->SMCR, (TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP));\r\n    break;\r\n  }\r\n\r\n  case TIM_CLEARINPUTSOURCE_ETR: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CLEARINPUT_POLARITY(sClearInputConfig->ClearInputPolarity));\r\n    assert_param(IS_TIM_CLEARINPUT_PRESCALER(sClearInputConfig->ClearInputPrescaler));\r\n    assert_param(IS_TIM_CLEARINPUT_FILTER(sClearInputConfig->ClearInputFilter));\r\n\r\n    /* When OCRef clear feature is used with ETR source, ETR prescaler must be off */\r\n    if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1) {\r\n      htim->State = HAL_TIM_STATE_READY;\r\n      __HAL_UNLOCK(htim);\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    TIM_ETR_SetConfig(htim->Instance, sClearInputConfig->ClearInputPrescaler, sClearInputConfig->ClearInputPolarity, sClearInputConfig->ClearInputFilter);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) {\r\n      /* Enable the OCREF clear feature for Channel 1 */\r\n      SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE);\r\n    } else {\r\n      /* Disable the OCREF clear feature for Channel 1 */\r\n      CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE);\r\n    }\r\n    break;\r\n  }\r\n  case TIM_CHANNEL_2: {\r\n    if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) {\r\n      /* Enable the OCREF clear feature for Channel 2 */\r\n      SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE);\r\n    } else {\r\n      /* Disable the OCREF clear feature for Channel 2 */\r\n      CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE);\r\n    }\r\n    break;\r\n  }\r\n  case TIM_CHANNEL_3: {\r\n    if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) {\r\n      /* Enable the OCREF clear feature for Channel 3 */\r\n      SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE);\r\n    } else {\r\n      /* Disable the OCREF clear feature for Channel 3 */\r\n      CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE);\r\n    }\r\n    break;\r\n  }\r\n  case TIM_CHANNEL_4: {\r\n    if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) {\r\n      /* Enable the OCREF clear feature for Channel 4 */\r\n      SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE);\r\n    } else {\r\n      /* Disable the OCREF clear feature for Channel 4 */\r\n      CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE);\r\n    }\r\n    break;\r\n  }\r\n  default:\r\n    break;\r\n  }\r\n\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief   Configures the clock source to be used\r\n * @param  htim TIM handle\r\n * @param  sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that\r\n *         contains the clock source information for the TIM peripheral.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource));\r\n\r\n  /* Reset the SMS, TS, ECE, ETPS and ETRF bits */\r\n  tmpsmcr = htim->Instance->SMCR;\r\n  tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS);\r\n  tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);\r\n  htim->Instance->SMCR = tmpsmcr;\r\n\r\n  switch (sClockSourceConfig->ClockSource) {\r\n  case TIM_CLOCKSOURCE_INTERNAL: {\r\n    assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_ETRMODE1: {\r\n    /* Check whether or not the timer instance supports external trigger input mode 1 (ETRF)*/\r\n    assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance));\r\n\r\n    /* Check ETR input conditioning related parameters */\r\n    assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));\r\n    assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));\r\n    assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));\r\n\r\n    /* Configure the ETR Clock source */\r\n    TIM_ETR_SetConfig(htim->Instance, sClockSourceConfig->ClockPrescaler, sClockSourceConfig->ClockPolarity, sClockSourceConfig->ClockFilter);\r\n\r\n    /* Select the External clock mode1 and the ETRF trigger */\r\n    tmpsmcr = htim->Instance->SMCR;\r\n    tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1);\r\n    /* Write to TIMx SMCR */\r\n    htim->Instance->SMCR = tmpsmcr;\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_ETRMODE2: {\r\n    /* Check whether or not the timer instance supports external trigger input mode 2 (ETRF)*/\r\n    assert_param(IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(htim->Instance));\r\n\r\n    /* Check ETR input conditioning related parameters */\r\n    assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));\r\n    assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));\r\n    assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));\r\n\r\n    /* Configure the ETR Clock source */\r\n    TIM_ETR_SetConfig(htim->Instance, sClockSourceConfig->ClockPrescaler, sClockSourceConfig->ClockPolarity, sClockSourceConfig->ClockFilter);\r\n    /* Enable the External clock mode2 */\r\n    htim->Instance->SMCR |= TIM_SMCR_ECE;\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_TI1: {\r\n    /* Check whether or not the timer instance supports external clock mode 1 */\r\n    assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance));\r\n\r\n    /* Check TI1 input conditioning related parameters */\r\n    assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));\r\n    assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));\r\n\r\n    TIM_TI1_ConfigInputStage(htim->Instance, sClockSourceConfig->ClockPolarity, sClockSourceConfig->ClockFilter);\r\n    TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_TI2: {\r\n    /* Check whether or not the timer instance supports external clock mode 1 (ETRF)*/\r\n    assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance));\r\n\r\n    /* Check TI2 input conditioning related parameters */\r\n    assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));\r\n    assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));\r\n\r\n    TIM_TI2_ConfigInputStage(htim->Instance, sClockSourceConfig->ClockPolarity, sClockSourceConfig->ClockFilter);\r\n    TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_TI1ED: {\r\n    /* Check whether or not the timer instance supports external clock mode 1 */\r\n    assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance));\r\n\r\n    /* Check TI1 input conditioning related parameters */\r\n    assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));\r\n    assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));\r\n\r\n    TIM_TI1_ConfigInputStage(htim->Instance, sClockSourceConfig->ClockPolarity, sClockSourceConfig->ClockFilter);\r\n    TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED);\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_ITR0:\r\n  case TIM_CLOCKSOURCE_ITR1:\r\n  case TIM_CLOCKSOURCE_ITR2:\r\n  case TIM_CLOCKSOURCE_ITR3: {\r\n    /* Check whether or not the timer instance supports internal trigger input */\r\n    assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance));\r\n\r\n    TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Selects the signal connected to the TI1 input: direct from CH1_input\r\n *         or a XOR combination between CH1_input, CH2_input & CH3_input\r\n * @param  htim TIM handle.\r\n * @param  TI1_Selection Indicate whether or not channel 1 is connected to the\r\n *         output of a XOR gate.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_TI1SELECTION_CH1: The TIMx_CH1 pin is connected to TI1 input\r\n *            @arg TIM_TI1SELECTION_XORCOMBINATION: The TIMx_CH1, CH2 and CH3\r\n *            pins are connected to the TI1 input (XOR combination)\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection) {\r\n  uint32_t tmpcr2;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_XOR_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_TI1SELECTION(TI1_Selection));\r\n\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = htim->Instance->CR2;\r\n\r\n  /* Reset the TI1 selection */\r\n  tmpcr2 &= ~TIM_CR2_TI1S;\r\n\r\n  /* Set the TI1 selection */\r\n  tmpcr2 |= TI1_Selection;\r\n\r\n  /* Write to TIMxCR2 */\r\n  htim->Instance->CR2 = tmpcr2;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the TIM in Slave mode\r\n * @param  htim TIM handle.\r\n * @param  sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that\r\n *         contains the selected trigger (internal trigger input, filtered\r\n *         timer input or external trigger input) and the Slave mode\r\n *         (Disable, Reset, Gated, Trigger, External clock mode 1).\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode));\r\n  assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger));\r\n\r\n  __HAL_LOCK(htim);\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK) {\r\n    htim->State = HAL_TIM_STATE_READY;\r\n    __HAL_UNLOCK(htim);\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Disable Trigger Interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_TRIGGER);\r\n\r\n  /* Disable Trigger DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER);\r\n\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the TIM in Slave mode in interrupt mode\r\n * @param  htim TIM handle.\r\n * @param  sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that\r\n *         contains the selected trigger (internal trigger input, filtered\r\n *         timer input or external trigger input) and the Slave mode\r\n *         (Disable, Reset, Gated, Trigger, External clock mode 1).\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode));\r\n  assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger));\r\n\r\n  __HAL_LOCK(htim);\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK) {\r\n    htim->State = HAL_TIM_STATE_READY;\r\n    __HAL_UNLOCK(htim);\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Enable Trigger Interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_TRIGGER);\r\n\r\n  /* Disable Trigger DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER);\r\n\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Read the captured value from Capture Compare unit\r\n * @param  htim TIM handle.\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval Captured value\r\n */\r\nuint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpreg = 0U;\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n\r\n    /* Return the capture 1 value */\r\n    tmpreg = htim->Instance->CCR1;\r\n\r\n    break;\r\n  }\r\n  case TIM_CHANNEL_2: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n    /* Return the capture 2 value */\r\n    tmpreg = htim->Instance->CCR2;\r\n\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));\r\n\r\n    /* Return the capture 3 value */\r\n    tmpreg = htim->Instance->CCR3;\r\n\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));\r\n\r\n    /* Return the capture 4 value */\r\n    tmpreg = htim->Instance->CCR4;\r\n\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return tmpreg;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions\r\n  *  @brief    TIM Callbacks functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                        ##### TIM Callbacks functions #####\r\n  ==============================================================================\r\n [..]\r\n   This section provides TIM callback functions:\r\n   (+) TIM Period elapsed callback\r\n   (+) TIM Output Compare callback\r\n   (+) TIM Input capture callback\r\n   (+) TIM Trigger callback\r\n   (+) TIM Error callback\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Period elapsed callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PeriodElapsedCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Period elapsed half complete callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PeriodElapsedHalfCpltCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Output Compare callback in non-blocking mode\r\n * @param  htim TIM OC handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Input Capture callback in non-blocking mode\r\n * @param  htim TIM IC handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_IC_CaptureCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Input Capture half complete callback in non-blocking mode\r\n * @param  htim TIM IC handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_IC_CaptureHalfCpltCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  PWM Pulse finished callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  PWM Pulse finished half complete callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PWM_PulseFinishedHalfCpltCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Hall Trigger detection callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_TriggerCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Hall Trigger detection half complete callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_TriggerHalfCpltCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Timer error callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_ErrorCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n/**\r\n * @brief  Register a User TIM callback to be used instead of the weak predefined callback\r\n * @param htim tim handle\r\n * @param CallbackID ID of the callback to be registered\r\n *        This parameter can be one of the following values:\r\n *          @arg @ref HAL_TIM_BASE_MSPINIT_CB_ID Base MspInit Callback ID\r\n *          @arg @ref HAL_TIM_BASE_MSPDEINIT_CB_ID Base MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_IC_MSPINIT_CB_ID IC MspInit Callback ID\r\n *          @arg @ref HAL_TIM_IC_MSPDEINIT_CB_ID IC MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_OC_MSPINIT_CB_ID OC MspInit Callback ID\r\n *          @arg @ref HAL_TIM_OC_MSPDEINIT_CB_ID OC MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_PWM_MSPINIT_CB_ID PWM MspInit Callback ID\r\n *          @arg @ref HAL_TIM_PWM_MSPDEINIT_CB_ID PWM MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_ONE_PULSE_MSPINIT_CB_ID One Pulse MspInit Callback ID\r\n *          @arg @ref HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID One Pulse MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_ENCODER_MSPINIT_CB_ID Encoder MspInit Callback ID\r\n *          @arg @ref HAL_TIM_ENCODER_MSPDEINIT_CB_ID Encoder MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID Hall Sensor MspInit Callback ID\r\n *          @arg @ref HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID Hall Sensor MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_PERIOD_ELAPSED_CB_ID Period Elapsed Callback ID\r\n *          @arg @ref HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID Period Elapsed half complete Callback ID\r\n *          @arg @ref HAL_TIM_TRIGGER_CB_ID Trigger Callback ID\r\n *          @arg @ref HAL_TIM_TRIGGER_HALF_CB_ID Trigger half complete Callback ID\r\n *          @arg @ref HAL_TIM_IC_CAPTURE_CB_ID Input Capture Callback ID\r\n *          @arg @ref HAL_TIM_IC_CAPTURE_HALF_CB_ID Input Capture half complete Callback ID\r\n *          @arg @ref HAL_TIM_OC_DELAY_ELAPSED_CB_ID Output Compare Delay Elapsed Callback ID\r\n *          @arg @ref HAL_TIM_PWM_PULSE_FINISHED_CB_ID PWM Pulse Finished Callback ID\r\n *          @arg @ref HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID PWM Pulse Finished half complete Callback ID\r\n *          @arg @ref HAL_TIM_ERROR_CB_ID Error Callback ID\r\n *          @arg @ref HAL_TIM_COMMUTATION_CB_ID Commutation Callback ID\r\n *          @arg @ref HAL_TIM_COMMUTATION_HALF_CB_ID Commutation half complete Callback ID\r\n *          @arg @ref HAL_TIM_BREAK_CB_ID Break Callback ID\r\n *          @param pCallback pointer to the callback function\r\n *          @retval status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  if (pCallback == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n  /* Process locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  if (htim->State == HAL_TIM_STATE_READY) {\r\n    switch (CallbackID) {\r\n    case HAL_TIM_BASE_MSPINIT_CB_ID:\r\n      htim->Base_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_BASE_MSPDEINIT_CB_ID:\r\n      htim->Base_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPINIT_CB_ID:\r\n      htim->IC_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPDEINIT_CB_ID:\r\n      htim->IC_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPINIT_CB_ID:\r\n      htim->OC_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPDEINIT_CB_ID:\r\n      htim->OC_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPINIT_CB_ID:\r\n      htim->PWM_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPDEINIT_CB_ID:\r\n      htim->PWM_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID:\r\n      htim->OnePulse_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID:\r\n      htim->OnePulse_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPINIT_CB_ID:\r\n      htim->Encoder_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPDEINIT_CB_ID:\r\n      htim->Encoder_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID:\r\n      htim->HallSensor_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID:\r\n      htim->HallSensor_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PERIOD_ELAPSED_CB_ID:\r\n      htim->PeriodElapsedCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID:\r\n      htim->PeriodElapsedHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_TRIGGER_CB_ID:\r\n      htim->TriggerCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_TRIGGER_HALF_CB_ID:\r\n      htim->TriggerHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_CAPTURE_CB_ID:\r\n      htim->IC_CaptureCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_CAPTURE_HALF_CB_ID:\r\n      htim->IC_CaptureHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_OC_DELAY_ELAPSED_CB_ID:\r\n      htim->OC_DelayElapsedCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_PULSE_FINISHED_CB_ID:\r\n      htim->PWM_PulseFinishedCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID:\r\n      htim->PWM_PulseFinishedHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ERROR_CB_ID:\r\n      htim->ErrorCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_COMMUTATION_CB_ID:\r\n      htim->CommutationCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_COMMUTATION_HALF_CB_ID:\r\n      htim->CommutationHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_BREAK_CB_ID:\r\n      htim->BreakCallback = pCallback;\r\n      break;\r\n\r\n    default:\r\n      /* Return error status */\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else if (htim->State == HAL_TIM_STATE_RESET) {\r\n    switch (CallbackID) {\r\n    case HAL_TIM_BASE_MSPINIT_CB_ID:\r\n      htim->Base_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_BASE_MSPDEINIT_CB_ID:\r\n      htim->Base_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPINIT_CB_ID:\r\n      htim->IC_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPDEINIT_CB_ID:\r\n      htim->IC_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPINIT_CB_ID:\r\n      htim->OC_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPDEINIT_CB_ID:\r\n      htim->OC_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPINIT_CB_ID:\r\n      htim->PWM_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPDEINIT_CB_ID:\r\n      htim->PWM_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID:\r\n      htim->OnePulse_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID:\r\n      htim->OnePulse_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPINIT_CB_ID:\r\n      htim->Encoder_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPDEINIT_CB_ID:\r\n      htim->Encoder_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID:\r\n      htim->HallSensor_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID:\r\n      htim->HallSensor_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    default:\r\n      /* Return error status */\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else {\r\n    /* Return error status */\r\n    status = HAL_ERROR;\r\n  }\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Unregister a TIM callback\r\n *         TIM callback is redirected to the weak predefined callback\r\n * @param htim tim handle\r\n * @param CallbackID ID of the callback to be unregistered\r\n *        This parameter can be one of the following values:\r\n *          @arg @ref HAL_TIM_BASE_MSPINIT_CB_ID Base MspInit Callback ID\r\n *          @arg @ref HAL_TIM_BASE_MSPDEINIT_CB_ID Base MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_IC_MSPINIT_CB_ID IC MspInit Callback ID\r\n *          @arg @ref HAL_TIM_IC_MSPDEINIT_CB_ID IC MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_OC_MSPINIT_CB_ID OC MspInit Callback ID\r\n *          @arg @ref HAL_TIM_OC_MSPDEINIT_CB_ID OC MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_PWM_MSPINIT_CB_ID PWM MspInit Callback ID\r\n *          @arg @ref HAL_TIM_PWM_MSPDEINIT_CB_ID PWM MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_ONE_PULSE_MSPINIT_CB_ID One Pulse MspInit Callback ID\r\n *          @arg @ref HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID One Pulse MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_ENCODER_MSPINIT_CB_ID Encoder MspInit Callback ID\r\n *          @arg @ref HAL_TIM_ENCODER_MSPDEINIT_CB_ID Encoder MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID Hall Sensor MspInit Callback ID\r\n *          @arg @ref HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID Hall Sensor MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_PERIOD_ELAPSED_CB_ID Period Elapsed Callback ID\r\n *          @arg @ref HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID Period Elapsed half complete Callback ID\r\n *          @arg @ref HAL_TIM_TRIGGER_CB_ID Trigger Callback ID\r\n *          @arg @ref HAL_TIM_TRIGGER_HALF_CB_ID Trigger half complete Callback ID\r\n *          @arg @ref HAL_TIM_IC_CAPTURE_CB_ID Input Capture Callback ID\r\n *          @arg @ref HAL_TIM_IC_CAPTURE_HALF_CB_ID Input Capture half complete Callback ID\r\n *          @arg @ref HAL_TIM_OC_DELAY_ELAPSED_CB_ID Output Compare Delay Elapsed Callback ID\r\n *          @arg @ref HAL_TIM_PWM_PULSE_FINISHED_CB_ID PWM Pulse Finished Callback ID\r\n *          @arg @ref HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID PWM Pulse Finished half complete Callback ID\r\n *          @arg @ref HAL_TIM_ERROR_CB_ID Error Callback ID\r\n *          @arg @ref HAL_TIM_COMMUTATION_CB_ID Commutation Callback ID\r\n *          @arg @ref HAL_TIM_COMMUTATION_HALF_CB_ID Commutation half complete Callback ID\r\n *          @arg @ref HAL_TIM_BREAK_CB_ID Break Callback ID\r\n *          @retval status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  if (htim->State == HAL_TIM_STATE_READY) {\r\n    switch (CallbackID) {\r\n    case HAL_TIM_BASE_MSPINIT_CB_ID:\r\n      htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; /* Legacy weak Base MspInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_BASE_MSPDEINIT_CB_ID:\r\n      htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; /* Legacy weak Base Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPINIT_CB_ID:\r\n      htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; /* Legacy weak IC Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPDEINIT_CB_ID:\r\n      htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; /* Legacy weak IC Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPINIT_CB_ID:\r\n      htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; /* Legacy weak OC Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPDEINIT_CB_ID:\r\n      htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; /* Legacy weak OC Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPINIT_CB_ID:\r\n      htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; /* Legacy weak PWM Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPDEINIT_CB_ID:\r\n      htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; /* Legacy weak PWM Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID:\r\n      htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; /* Legacy weak One Pulse Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID:\r\n      htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; /* Legacy weak One Pulse Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPINIT_CB_ID:\r\n      htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; /* Legacy weak Encoder Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPDEINIT_CB_ID:\r\n      htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; /* Legacy weak Encoder Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID:\r\n      htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; /* Legacy weak Hall Sensor Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID:\r\n      htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; /* Legacy weak Hall Sensor Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PERIOD_ELAPSED_CB_ID:\r\n      htim->PeriodElapsedCallback = HAL_TIM_PeriodElapsedCallback; /* Legacy weak Period Elapsed Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID:\r\n      htim->PeriodElapsedHalfCpltCallback = HAL_TIM_PeriodElapsedHalfCpltCallback; /* Legacy weak Period Elapsed half complete Callback */\r\n      break;\r\n\r\n    case HAL_TIM_TRIGGER_CB_ID:\r\n      htim->TriggerCallback = HAL_TIM_TriggerCallback; /* Legacy weak Trigger Callback */\r\n      break;\r\n\r\n    case HAL_TIM_TRIGGER_HALF_CB_ID:\r\n      htim->TriggerHalfCpltCallback = HAL_TIM_TriggerHalfCpltCallback; /* Legacy weak Trigger half complete Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_CAPTURE_CB_ID:\r\n      htim->IC_CaptureCallback = HAL_TIM_IC_CaptureCallback; /* Legacy weak IC Capture Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_CAPTURE_HALF_CB_ID:\r\n      htim->IC_CaptureHalfCpltCallback = HAL_TIM_IC_CaptureHalfCpltCallback; /* Legacy weak IC Capture half complete Callback */\r\n      break;\r\n\r\n    case HAL_TIM_OC_DELAY_ELAPSED_CB_ID:\r\n      htim->OC_DelayElapsedCallback = HAL_TIM_OC_DelayElapsedCallback; /* Legacy weak OC Delay Elapsed Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_PULSE_FINISHED_CB_ID:\r\n      htim->PWM_PulseFinishedCallback = HAL_TIM_PWM_PulseFinishedCallback; /* Legacy weak PWM Pulse Finished Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID:\r\n      htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback; /* Legacy weak PWM Pulse Finished half complete Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ERROR_CB_ID:\r\n      htim->ErrorCallback = HAL_TIM_ErrorCallback; /* Legacy weak Error Callback */\r\n      break;\r\n\r\n    case HAL_TIM_COMMUTATION_CB_ID:\r\n      htim->CommutationCallback = HAL_TIMEx_CommutCallback; /* Legacy weak Commutation Callback */\r\n      break;\r\n\r\n    case HAL_TIM_COMMUTATION_HALF_CB_ID:\r\n      htim->CommutationHalfCpltCallback = HAL_TIMEx_CommutHalfCpltCallback; /* Legacy weak Commutation half complete Callback */\r\n      break;\r\n\r\n    case HAL_TIM_BREAK_CB_ID:\r\n      htim->BreakCallback = HAL_TIMEx_BreakCallback; /* Legacy weak Break Callback */\r\n      break;\r\n\r\n    default:\r\n      /* Return error status */\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else if (htim->State == HAL_TIM_STATE_RESET) {\r\n    switch (CallbackID) {\r\n    case HAL_TIM_BASE_MSPINIT_CB_ID:\r\n      htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; /* Legacy weak Base MspInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_BASE_MSPDEINIT_CB_ID:\r\n      htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; /* Legacy weak Base Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPINIT_CB_ID:\r\n      htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; /* Legacy weak IC Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPDEINIT_CB_ID:\r\n      htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; /* Legacy weak IC Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPINIT_CB_ID:\r\n      htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; /* Legacy weak OC Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPDEINIT_CB_ID:\r\n      htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; /* Legacy weak OC Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPINIT_CB_ID:\r\n      htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; /* Legacy weak PWM Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPDEINIT_CB_ID:\r\n      htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; /* Legacy weak PWM Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID:\r\n      htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; /* Legacy weak One Pulse Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID:\r\n      htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; /* Legacy weak One Pulse Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPINIT_CB_ID:\r\n      htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; /* Legacy weak Encoder Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPDEINIT_CB_ID:\r\n      htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; /* Legacy weak Encoder Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID:\r\n      htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; /* Legacy weak Hall Sensor Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID:\r\n      htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; /* Legacy weak Hall Sensor Msp DeInit Callback */\r\n      break;\r\n\r\n    default:\r\n      /* Return error status */\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else {\r\n    /* Return error status */\r\n    status = HAL_ERROR;\r\n  }\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return status;\r\n}\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions\r\n  *  @brief   TIM Peripheral State functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                        ##### Peripheral State functions #####\r\n  ==============================================================================\r\n    [..]\r\n    This subsection permits to get in run-time the status of the peripheral\r\n    and the data flow.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Return the TIM Base handle state.\r\n * @param  htim TIM Base handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM OC handle state.\r\n * @param  htim TIM Output Compare handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM PWM handle state.\r\n * @param  htim TIM handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM Input Capture handle state.\r\n * @param  htim TIM IC handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM One Pulse Mode handle state.\r\n * @param  htim TIM OPM handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM Encoder Mode handle state.\r\n * @param  htim TIM Encoder Interface handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM Encoder Mode handle state.\r\n * @param  htim TIM handle\r\n * @retval Active channel\r\n */\r\nHAL_TIM_ActiveChannel HAL_TIM_GetActiveChannel(TIM_HandleTypeDef *htim) { return htim->Channel; }\r\n\r\n/**\r\n * @brief  Return actual state of the TIM channel.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4\r\n *            @arg TIM_CHANNEL_5: TIM Channel 5\r\n *            @arg TIM_CHANNEL_6: TIM Channel 6\r\n * @retval TIM Channel state\r\n */\r\nHAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  HAL_TIM_ChannelStateTypeDef channel_state;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  channel_state = TIM_CHANNEL_STATE_GET(htim, Channel);\r\n\r\n  return channel_state;\r\n}\r\n\r\n/**\r\n * @brief  Return actual state of a DMA burst operation.\r\n * @param  htim TIM handle\r\n * @retval DMA burst state\r\n */\r\nHAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));\r\n\r\n  return htim->DMABurstState;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Private_Functions TIM Private Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  TIM DMA error callback\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIM_DMAError(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else {\r\n    htim->State = HAL_TIM_STATE_READY;\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->ErrorCallback(htim);\r\n#else\r\n  HAL_TIM_ErrorCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Delay Pulse complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n  HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Delay Pulse half complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->PWM_PulseFinishedHalfCpltCallback(htim);\r\n#else\r\n  HAL_TIM_PWM_PulseFinishedHalfCpltCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Capture complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->IC_CaptureCallback(htim);\r\n#else\r\n  HAL_TIM_IC_CaptureCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Capture half complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->IC_CaptureHalfCpltCallback(htim);\r\n#else\r\n  HAL_TIM_IC_CaptureHalfCpltCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Period Elapse complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (htim->hdma[TIM_DMA_ID_UPDATE]->Init.Mode == DMA_NORMAL) {\r\n    htim->State = HAL_TIM_STATE_READY;\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->PeriodElapsedCallback(htim);\r\n#else\r\n  HAL_TIM_PeriodElapsedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Period Elapse half complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->PeriodElapsedHalfCpltCallback(htim);\r\n#else\r\n  HAL_TIM_PeriodElapsedHalfCpltCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Trigger callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (htim->hdma[TIM_DMA_ID_TRIGGER]->Init.Mode == DMA_NORMAL) {\r\n    htim->State = HAL_TIM_STATE_READY;\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->TriggerCallback(htim);\r\n#else\r\n  HAL_TIM_TriggerCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Trigger half complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->TriggerHalfCpltCallback(htim);\r\n#else\r\n  HAL_TIM_TriggerHalfCpltCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  Time Base configuration\r\n * @param  TIMx TIM peripheral\r\n * @param  Structure TIM Base configuration structure\r\n * @retval None\r\n */\r\nvoid TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure) {\r\n  uint32_t tmpcr1;\r\n  tmpcr1 = TIMx->CR1;\r\n\r\n  /* Set TIM Time Base Unit parameters ---------------------------------------*/\r\n  if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx)) {\r\n    /* Select the Counter Mode */\r\n    tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS);\r\n    tmpcr1 |= Structure->CounterMode;\r\n  }\r\n\r\n  if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx)) {\r\n    /* Set the clock division */\r\n    tmpcr1 &= ~TIM_CR1_CKD;\r\n    tmpcr1 |= (uint32_t)Structure->ClockDivision;\r\n  }\r\n\r\n  /* Set the auto-reload preload */\r\n  MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload);\r\n\r\n  TIMx->CR1 = tmpcr1;\r\n\r\n  /* Set the Autoreload value */\r\n  TIMx->ARR = (uint32_t)Structure->Period;\r\n\r\n  /* Set the Prescaler value */\r\n  TIMx->PSC = Structure->Prescaler;\r\n\r\n  if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx)) {\r\n    /* Set the Repetition Counter value */\r\n    TIMx->RCR = Structure->RepetitionCounter;\r\n  }\r\n\r\n  /* Generate an update event to reload the Prescaler\r\n     and the repetition counter (only for advanced timer) value immediately */\r\n  TIMx->EGR = TIM_EGR_UG;\r\n}\r\n\r\n/**\r\n * @brief  Timer Output Compare 1 configuration\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  OC_Config The output configuration structure\r\n * @retval None\r\n */\r\nstatic void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) {\r\n  uint32_t tmpccmrx;\r\n  uint32_t tmpccer;\r\n  uint32_t tmpcr2;\r\n\r\n  /* Disable the Channel 1: Reset the CC1E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC1E;\r\n\r\n  /* Get the TIMx CCER register value */\r\n  tmpccer = TIMx->CCER;\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = TIMx->CR2;\r\n\r\n  /* Get the TIMx CCMR1 register value */\r\n  tmpccmrx = TIMx->CCMR1;\r\n\r\n  /* Reset the Output Compare Mode Bits */\r\n  tmpccmrx &= ~TIM_CCMR1_OC1M;\r\n  tmpccmrx &= ~TIM_CCMR1_CC1S;\r\n  /* Select the Output Compare Mode */\r\n  tmpccmrx |= OC_Config->OCMode;\r\n\r\n  /* Reset the Output Polarity level */\r\n  tmpccer &= ~TIM_CCER_CC1P;\r\n  /* Set the Output Compare Polarity */\r\n  tmpccer |= OC_Config->OCPolarity;\r\n\r\n  if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1)) {\r\n    /* Check parameters */\r\n    assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));\r\n\r\n    /* Reset the Output N Polarity level */\r\n    tmpccer &= ~TIM_CCER_CC1NP;\r\n    /* Set the Output N Polarity */\r\n    tmpccer |= OC_Config->OCNPolarity;\r\n    /* Reset the Output N State */\r\n    tmpccer &= ~TIM_CCER_CC1NE;\r\n  }\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(TIMx)) {\r\n    /* Check parameters */\r\n    assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));\r\n    assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));\r\n\r\n    /* Reset the Output Compare and Output Compare N IDLE State */\r\n    tmpcr2 &= ~TIM_CR2_OIS1;\r\n    tmpcr2 &= ~TIM_CR2_OIS1N;\r\n    /* Set the Output Idle state */\r\n    tmpcr2 |= OC_Config->OCIdleState;\r\n    /* Set the Output N Idle state */\r\n    tmpcr2 |= OC_Config->OCNIdleState;\r\n  }\r\n\r\n  /* Write to TIMx CR2 */\r\n  TIMx->CR2 = tmpcr2;\r\n\r\n  /* Write to TIMx CCMR1 */\r\n  TIMx->CCMR1 = tmpccmrx;\r\n\r\n  /* Set the Capture Compare Register value */\r\n  TIMx->CCR1 = OC_Config->Pulse;\r\n\r\n  /* Write to TIMx CCER */\r\n  TIMx->CCER = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Timer Output Compare 2 configuration\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  OC_Config The output configuration structure\r\n * @retval None\r\n */\r\nvoid TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) {\r\n  uint32_t tmpccmrx;\r\n  uint32_t tmpccer;\r\n  uint32_t tmpcr2;\r\n\r\n  /* Disable the Channel 2: Reset the CC2E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC2E;\r\n\r\n  /* Get the TIMx CCER register value */\r\n  tmpccer = TIMx->CCER;\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = TIMx->CR2;\r\n\r\n  /* Get the TIMx CCMR1 register value */\r\n  tmpccmrx = TIMx->CCMR1;\r\n\r\n  /* Reset the Output Compare mode and Capture/Compare selection Bits */\r\n  tmpccmrx &= ~TIM_CCMR1_OC2M;\r\n  tmpccmrx &= ~TIM_CCMR1_CC2S;\r\n\r\n  /* Select the Output Compare Mode */\r\n  tmpccmrx |= (OC_Config->OCMode << 8U);\r\n\r\n  /* Reset the Output Polarity level */\r\n  tmpccer &= ~TIM_CCER_CC2P;\r\n  /* Set the Output Compare Polarity */\r\n  tmpccer |= (OC_Config->OCPolarity << 4U);\r\n\r\n  if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_2)) {\r\n    assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));\r\n\r\n    /* Reset the Output N Polarity level */\r\n    tmpccer &= ~TIM_CCER_CC2NP;\r\n    /* Set the Output N Polarity */\r\n    tmpccer |= (OC_Config->OCNPolarity << 4U);\r\n    /* Reset the Output N State */\r\n    tmpccer &= ~TIM_CCER_CC2NE;\r\n  }\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(TIMx)) {\r\n    /* Check parameters */\r\n    assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));\r\n    assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));\r\n\r\n    /* Reset the Output Compare and Output Compare N IDLE State */\r\n    tmpcr2 &= ~TIM_CR2_OIS2;\r\n    tmpcr2 &= ~TIM_CR2_OIS2N;\r\n    /* Set the Output Idle state */\r\n    tmpcr2 |= (OC_Config->OCIdleState << 2U);\r\n    /* Set the Output N Idle state */\r\n    tmpcr2 |= (OC_Config->OCNIdleState << 2U);\r\n  }\r\n\r\n  /* Write to TIMx CR2 */\r\n  TIMx->CR2 = tmpcr2;\r\n\r\n  /* Write to TIMx CCMR1 */\r\n  TIMx->CCMR1 = tmpccmrx;\r\n\r\n  /* Set the Capture Compare Register value */\r\n  TIMx->CCR2 = OC_Config->Pulse;\r\n\r\n  /* Write to TIMx CCER */\r\n  TIMx->CCER = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Timer Output Compare 3 configuration\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  OC_Config The output configuration structure\r\n * @retval None\r\n */\r\nstatic void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) {\r\n  uint32_t tmpccmrx;\r\n  uint32_t tmpccer;\r\n  uint32_t tmpcr2;\r\n\r\n  /* Disable the Channel 3: Reset the CC2E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC3E;\r\n\r\n  /* Get the TIMx CCER register value */\r\n  tmpccer = TIMx->CCER;\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = TIMx->CR2;\r\n\r\n  /* Get the TIMx CCMR2 register value */\r\n  tmpccmrx = TIMx->CCMR2;\r\n\r\n  /* Reset the Output Compare mode and Capture/Compare selection Bits */\r\n  tmpccmrx &= ~TIM_CCMR2_OC3M;\r\n  tmpccmrx &= ~TIM_CCMR2_CC3S;\r\n  /* Select the Output Compare Mode */\r\n  tmpccmrx |= OC_Config->OCMode;\r\n\r\n  /* Reset the Output Polarity level */\r\n  tmpccer &= ~TIM_CCER_CC3P;\r\n  /* Set the Output Compare Polarity */\r\n  tmpccer |= (OC_Config->OCPolarity << 8U);\r\n\r\n  if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_3)) {\r\n    assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));\r\n\r\n    /* Reset the Output N Polarity level */\r\n    tmpccer &= ~TIM_CCER_CC3NP;\r\n    /* Set the Output N Polarity */\r\n    tmpccer |= (OC_Config->OCNPolarity << 8U);\r\n    /* Reset the Output N State */\r\n    tmpccer &= ~TIM_CCER_CC3NE;\r\n  }\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(TIMx)) {\r\n    /* Check parameters */\r\n    assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));\r\n    assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));\r\n\r\n    /* Reset the Output Compare and Output Compare N IDLE State */\r\n    tmpcr2 &= ~TIM_CR2_OIS3;\r\n    tmpcr2 &= ~TIM_CR2_OIS3N;\r\n    /* Set the Output Idle state */\r\n    tmpcr2 |= (OC_Config->OCIdleState << 4U);\r\n    /* Set the Output N Idle state */\r\n    tmpcr2 |= (OC_Config->OCNIdleState << 4U);\r\n  }\r\n\r\n  /* Write to TIMx CR2 */\r\n  TIMx->CR2 = tmpcr2;\r\n\r\n  /* Write to TIMx CCMR2 */\r\n  TIMx->CCMR2 = tmpccmrx;\r\n\r\n  /* Set the Capture Compare Register value */\r\n  TIMx->CCR3 = OC_Config->Pulse;\r\n\r\n  /* Write to TIMx CCER */\r\n  TIMx->CCER = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Timer Output Compare 4 configuration\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  OC_Config The output configuration structure\r\n * @retval None\r\n */\r\nstatic void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) {\r\n  uint32_t tmpccmrx;\r\n  uint32_t tmpccer;\r\n  uint32_t tmpcr2;\r\n\r\n  /* Disable the Channel 4: Reset the CC4E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC4E;\r\n\r\n  /* Get the TIMx CCER register value */\r\n  tmpccer = TIMx->CCER;\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = TIMx->CR2;\r\n\r\n  /* Get the TIMx CCMR2 register value */\r\n  tmpccmrx = TIMx->CCMR2;\r\n\r\n  /* Reset the Output Compare mode and Capture/Compare selection Bits */\r\n  tmpccmrx &= ~TIM_CCMR2_OC4M;\r\n  tmpccmrx &= ~TIM_CCMR2_CC4S;\r\n\r\n  /* Select the Output Compare Mode */\r\n  tmpccmrx |= (OC_Config->OCMode << 8U);\r\n\r\n  /* Reset the Output Polarity level */\r\n  tmpccer &= ~TIM_CCER_CC4P;\r\n  /* Set the Output Compare Polarity */\r\n  tmpccer |= (OC_Config->OCPolarity << 12U);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(TIMx)) {\r\n    /* Check parameters */\r\n    assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));\r\n\r\n    /* Reset the Output Compare IDLE State */\r\n    tmpcr2 &= ~TIM_CR2_OIS4;\r\n\r\n    /* Set the Output Idle state */\r\n    tmpcr2 |= (OC_Config->OCIdleState << 6U);\r\n  }\r\n\r\n  /* Write to TIMx CR2 */\r\n  TIMx->CR2 = tmpcr2;\r\n\r\n  /* Write to TIMx CCMR2 */\r\n  TIMx->CCMR2 = tmpccmrx;\r\n\r\n  /* Set the Capture Compare Register value */\r\n  TIMx->CCR4 = OC_Config->Pulse;\r\n\r\n  /* Write to TIMx CCER */\r\n  TIMx->CCER = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Slave Timer configuration function\r\n * @param  htim TIM handle\r\n * @param  sSlaveConfig Slave timer configuration\r\n * @retval None\r\n */\r\nstatic HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig) {\r\n  uint32_t tmpsmcr;\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Get the TIMx SMCR register value */\r\n  tmpsmcr = htim->Instance->SMCR;\r\n\r\n  /* Reset the Trigger Selection Bits */\r\n  tmpsmcr &= ~TIM_SMCR_TS;\r\n  /* Set the Input Trigger source */\r\n  tmpsmcr |= sSlaveConfig->InputTrigger;\r\n\r\n  /* Reset the slave mode Bits */\r\n  tmpsmcr &= ~TIM_SMCR_SMS;\r\n  /* Set the slave mode */\r\n  tmpsmcr |= sSlaveConfig->SlaveMode;\r\n\r\n  /* Write to TIMx SMCR */\r\n  htim->Instance->SMCR = tmpsmcr;\r\n\r\n  /* Configure the trigger prescaler, filter, and polarity */\r\n  switch (sSlaveConfig->InputTrigger) {\r\n  case TIM_TS_ETRF: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance));\r\n    assert_param(IS_TIM_TRIGGERPRESCALER(sSlaveConfig->TriggerPrescaler));\r\n    assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity));\r\n    assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter));\r\n    /* Configure the ETR Trigger source */\r\n    TIM_ETR_SetConfig(htim->Instance, sSlaveConfig->TriggerPrescaler, sSlaveConfig->TriggerPolarity, sSlaveConfig->TriggerFilter);\r\n    break;\r\n  }\r\n\r\n  case TIM_TS_TI1F_ED: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n    assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter));\r\n\r\n    if (sSlaveConfig->SlaveMode == TIM_SLAVEMODE_GATED) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Disable the Channel 1: Reset the CC1E Bit */\r\n    tmpccer = htim->Instance->CCER;\r\n    htim->Instance->CCER &= ~TIM_CCER_CC1E;\r\n    tmpccmr1 = htim->Instance->CCMR1;\r\n\r\n    /* Set the filter */\r\n    tmpccmr1 &= ~TIM_CCMR1_IC1F;\r\n    tmpccmr1 |= ((sSlaveConfig->TriggerFilter) << 4U);\r\n\r\n    /* Write to TIMx CCMR1 and CCER registers */\r\n    htim->Instance->CCMR1 = tmpccmr1;\r\n    htim->Instance->CCER  = tmpccer;\r\n    break;\r\n  }\r\n\r\n  case TIM_TS_TI1FP1: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n    assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity));\r\n    assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter));\r\n\r\n    /* Configure TI1 Filter and Polarity */\r\n    TIM_TI1_ConfigInputStage(htim->Instance, sSlaveConfig->TriggerPolarity, sSlaveConfig->TriggerFilter);\r\n    break;\r\n  }\r\n\r\n  case TIM_TS_TI2FP2: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n    assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity));\r\n    assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter));\r\n\r\n    /* Configure TI2 Filter and Polarity */\r\n    TIM_TI2_ConfigInputStage(htim->Instance, sSlaveConfig->TriggerPolarity, sSlaveConfig->TriggerFilter);\r\n    break;\r\n  }\r\n\r\n  case TIM_TS_ITR0:\r\n  case TIM_TS_ITR1:\r\n  case TIM_TS_ITR2:\r\n  case TIM_TS_ITR3: {\r\n    /* Check the parameter */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TI1 as Input.\r\n * @param  TIMx to select the TIM peripheral.\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n *            @arg TIM_ICPOLARITY_BOTHEDGE\r\n * @param  TIM_ICSelection specifies the input to be used.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICSELECTION_DIRECTTI: TIM Input 1 is selected to be connected to IC1.\r\n *            @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 1 is selected to be connected to IC2.\r\n *            @arg TIM_ICSELECTION_TRC: TIM Input 1 is selected to be connected to TRC.\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @retval None\r\n * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI2FP1\r\n *       (on channel2 path) is used as the input signal. Therefore CCMR1 must be\r\n *        protected against un-initialized filter and polarity values.\r\n */\r\nvoid TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 1: Reset the CC1E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC1E;\r\n  tmpccmr1 = TIMx->CCMR1;\r\n  tmpccer  = TIMx->CCER;\r\n\r\n  /* Select the Input */\r\n  if (IS_TIM_CC2_INSTANCE(TIMx) != RESET) {\r\n    tmpccmr1 &= ~TIM_CCMR1_CC1S;\r\n    tmpccmr1 |= TIM_ICSelection;\r\n  } else {\r\n    tmpccmr1 |= TIM_CCMR1_CC1S_0;\r\n  }\r\n\r\n  /* Set the filter */\r\n  tmpccmr1 &= ~TIM_CCMR1_IC1F;\r\n  tmpccmr1 |= ((TIM_ICFilter << 4U) & TIM_CCMR1_IC1F);\r\n\r\n  /* Select the Polarity and set the CC1E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);\r\n  tmpccer |= (TIM_ICPolarity & (TIM_CCER_CC1P | TIM_CCER_CC1NP));\r\n\r\n  /* Write to TIMx CCMR1 and CCER registers */\r\n  TIMx->CCMR1 = tmpccmr1;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Configure the Polarity and Filter for TI1.\r\n * @param  TIMx to select the TIM peripheral.\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n *            @arg TIM_ICPOLARITY_BOTHEDGE\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @retval None\r\n */\r\nstatic void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 1: Reset the CC1E Bit */\r\n  tmpccer = TIMx->CCER;\r\n  TIMx->CCER &= ~TIM_CCER_CC1E;\r\n  tmpccmr1 = TIMx->CCMR1;\r\n\r\n  /* Set the filter */\r\n  tmpccmr1 &= ~TIM_CCMR1_IC1F;\r\n  tmpccmr1 |= (TIM_ICFilter << 4U);\r\n\r\n  /* Select the Polarity and set the CC1E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);\r\n  tmpccer |= TIM_ICPolarity;\r\n\r\n  /* Write to TIMx CCMR1 and CCER registers */\r\n  TIMx->CCMR1 = tmpccmr1;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TI2 as Input.\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n *            @arg TIM_ICPOLARITY_BOTHEDGE\r\n * @param  TIM_ICSelection specifies the input to be used.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICSELECTION_DIRECTTI: TIM Input 2 is selected to be connected to IC2.\r\n *            @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 2 is selected to be connected to IC1.\r\n *            @arg TIM_ICSELECTION_TRC: TIM Input 2 is selected to be connected to TRC.\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @retval None\r\n * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI1FP2\r\n *       (on channel1 path) is used as the input signal. Therefore CCMR1 must be\r\n *        protected against un-initialized filter and polarity values.\r\n */\r\nstatic void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 2: Reset the CC2E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC2E;\r\n  tmpccmr1 = TIMx->CCMR1;\r\n  tmpccer  = TIMx->CCER;\r\n\r\n  /* Select the Input */\r\n  tmpccmr1 &= ~TIM_CCMR1_CC2S;\r\n  tmpccmr1 |= (TIM_ICSelection << 8U);\r\n\r\n  /* Set the filter */\r\n  tmpccmr1 &= ~TIM_CCMR1_IC2F;\r\n  tmpccmr1 |= ((TIM_ICFilter << 12U) & TIM_CCMR1_IC2F);\r\n\r\n  /* Select the Polarity and set the CC2E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);\r\n  tmpccer |= ((TIM_ICPolarity << 4U) & (TIM_CCER_CC2P | TIM_CCER_CC2NP));\r\n\r\n  /* Write to TIMx CCMR1 and CCER registers */\r\n  TIMx->CCMR1 = tmpccmr1;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Configure the Polarity and Filter for TI2.\r\n * @param  TIMx to select the TIM peripheral.\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n *            @arg TIM_ICPOLARITY_BOTHEDGE\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @retval None\r\n */\r\nstatic void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 2: Reset the CC2E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC2E;\r\n  tmpccmr1 = TIMx->CCMR1;\r\n  tmpccer  = TIMx->CCER;\r\n\r\n  /* Set the filter */\r\n  tmpccmr1 &= ~TIM_CCMR1_IC2F;\r\n  tmpccmr1 |= (TIM_ICFilter << 12U);\r\n\r\n  /* Select the Polarity and set the CC2E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);\r\n  tmpccer |= (TIM_ICPolarity << 4U);\r\n\r\n  /* Write to TIMx CCMR1 and CCER registers */\r\n  TIMx->CCMR1 = tmpccmr1;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TI3 as Input.\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n * @param  TIM_ICSelection specifies the input to be used.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICSELECTION_DIRECTTI: TIM Input 3 is selected to be connected to IC3.\r\n *            @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 3 is selected to be connected to IC4.\r\n *            @arg TIM_ICSELECTION_TRC: TIM Input 3 is selected to be connected to TRC.\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @retval None\r\n * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI3FP4\r\n *       (on channel1 path) is used as the input signal. Therefore CCMR2 must be\r\n *        protected against un-initialized filter and polarity values.\r\n */\r\nstatic void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr2;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 3: Reset the CC3E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC3E;\r\n  tmpccmr2 = TIMx->CCMR2;\r\n  tmpccer  = TIMx->CCER;\r\n\r\n  /* Select the Input */\r\n  tmpccmr2 &= ~TIM_CCMR2_CC3S;\r\n  tmpccmr2 |= TIM_ICSelection;\r\n\r\n  /* Set the filter */\r\n  tmpccmr2 &= ~TIM_CCMR2_IC3F;\r\n  tmpccmr2 |= ((TIM_ICFilter << 4U) & TIM_CCMR2_IC3F);\r\n\r\n  /* Select the Polarity and set the CC3E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC3P);\r\n  tmpccer |= ((TIM_ICPolarity << 8U) & TIM_CCER_CC3P);\r\n\r\n  /* Write to TIMx CCMR2 and CCER registers */\r\n  TIMx->CCMR2 = tmpccmr2;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TI4 as Input.\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n * @param  TIM_ICSelection specifies the input to be used.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICSELECTION_DIRECTTI: TIM Input 4 is selected to be connected to IC4.\r\n *            @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 4 is selected to be connected to IC3.\r\n *            @arg TIM_ICSELECTION_TRC: TIM Input 4 is selected to be connected to TRC.\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI4FP3\r\n *       (on channel1 path) is used as the input signal. Therefore CCMR2 must be\r\n *        protected against un-initialized filter and polarity values.\r\n * @retval None\r\n */\r\nstatic void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr2;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 4: Reset the CC4E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC4E;\r\n  tmpccmr2 = TIMx->CCMR2;\r\n  tmpccer  = TIMx->CCER;\r\n\r\n  /* Select the Input */\r\n  tmpccmr2 &= ~TIM_CCMR2_CC4S;\r\n  tmpccmr2 |= (TIM_ICSelection << 8U);\r\n\r\n  /* Set the filter */\r\n  tmpccmr2 &= ~TIM_CCMR2_IC4F;\r\n  tmpccmr2 |= ((TIM_ICFilter << 12U) & TIM_CCMR2_IC4F);\r\n\r\n  /* Select the Polarity and set the CC4E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC4P);\r\n  tmpccer |= ((TIM_ICPolarity << 12U) & TIM_CCER_CC4P);\r\n\r\n  /* Write to TIMx CCMR2 and CCER registers */\r\n  TIMx->CCMR2 = tmpccmr2;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Selects the Input Trigger source\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  InputTriggerSource The Input Trigger source.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_TS_ITR0: Internal Trigger 0\r\n *            @arg TIM_TS_ITR1: Internal Trigger 1\r\n *            @arg TIM_TS_ITR2: Internal Trigger 2\r\n *            @arg TIM_TS_ITR3: Internal Trigger 3\r\n *            @arg TIM_TS_TI1F_ED: TI1 Edge Detector\r\n *            @arg TIM_TS_TI1FP1: Filtered Timer Input 1\r\n *            @arg TIM_TS_TI2FP2: Filtered Timer Input 2\r\n *            @arg TIM_TS_ETRF: External Trigger input\r\n * @retval None\r\n */\r\nstatic void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Get the TIMx SMCR register value */\r\n  tmpsmcr = TIMx->SMCR;\r\n  /* Reset the TS Bits */\r\n  tmpsmcr &= ~TIM_SMCR_TS;\r\n  /* Set the Input Trigger source and the slave mode*/\r\n  tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1);\r\n  /* Write to TIMx SMCR */\r\n  TIMx->SMCR = tmpsmcr;\r\n}\r\n/**\r\n * @brief  Configures the TIMx External Trigger (ETR).\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  TIM_ExtTRGPrescaler The external Trigger Prescaler.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ETRPRESCALER_DIV1: ETRP Prescaler OFF.\r\n *            @arg TIM_ETRPRESCALER_DIV2: ETRP frequency divided by 2.\r\n *            @arg TIM_ETRPRESCALER_DIV4: ETRP frequency divided by 4.\r\n *            @arg TIM_ETRPRESCALER_DIV8: ETRP frequency divided by 8.\r\n * @param  TIM_ExtTRGPolarity The external Trigger Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ETRPOLARITY_INVERTED: active low or falling edge active.\r\n *            @arg TIM_ETRPOLARITY_NONINVERTED: active high or rising edge active.\r\n * @param  ExtTRGFilter External Trigger Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F\r\n * @retval None\r\n */\r\nvoid TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter) {\r\n  uint32_t tmpsmcr;\r\n\r\n  tmpsmcr = TIMx->SMCR;\r\n\r\n  /* Reset the ETR Bits */\r\n  tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);\r\n\r\n  /* Set the Prescaler, the Filter value and the Polarity */\r\n  tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U)));\r\n\r\n  /* Write to TIMx SMCR */\r\n  TIMx->SMCR = tmpsmcr;\r\n}\r\n\r\n/**\r\n * @brief  Enables or disables the TIM Capture Compare Channel x.\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  Channel specifies the TIM Channel\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4\r\n * @param  ChannelState specifies the TIM Channel CCxE bit new state.\r\n *          This parameter can be: TIM_CCx_ENABLE or TIM_CCx_DISABLE.\r\n * @retval None\r\n */\r\nvoid TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState) {\r\n  uint32_t tmp;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CC1_INSTANCE(TIMx));\r\n  assert_param(IS_TIM_CHANNELS(Channel));\r\n\r\n  tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */\r\n\r\n  /* Reset the CCxE Bit */\r\n  TIMx->CCER &= ~tmp;\r\n\r\n  /* Set or reset the CCxE Bit */\r\n  TIMx->CCER |= (uint32_t)(ChannelState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */\r\n}\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n/**\r\n * @brief  Reset interrupt callbacks to the legacy weak callbacks.\r\n * @param  htim pointer to a TIM_HandleTypeDef structure that contains\r\n *                the configuration information for TIM module.\r\n * @retval None\r\n */\r\nvoid TIM_ResetCallback(TIM_HandleTypeDef *htim) {\r\n  /* Reset the TIM callback to the legacy weak callbacks */\r\n  htim->PeriodElapsedCallback             = HAL_TIM_PeriodElapsedCallback;             /* Legacy weak PeriodElapsedCallback             */\r\n  htim->PeriodElapsedHalfCpltCallback     = HAL_TIM_PeriodElapsedHalfCpltCallback;     /* Legacy weak PeriodElapsedHalfCpltCallback     */\r\n  htim->TriggerCallback                   = HAL_TIM_TriggerCallback;                   /* Legacy weak TriggerCallback                   */\r\n  htim->TriggerHalfCpltCallback           = HAL_TIM_TriggerHalfCpltCallback;           /* Legacy weak TriggerHalfCpltCallback           */\r\n  htim->IC_CaptureCallback                = HAL_TIM_IC_CaptureCallback;                /* Legacy weak IC_CaptureCallback                */\r\n  htim->IC_CaptureHalfCpltCallback        = HAL_TIM_IC_CaptureHalfCpltCallback;        /* Legacy weak IC_CaptureHalfCpltCallback        */\r\n  htim->OC_DelayElapsedCallback           = HAL_TIM_OC_DelayElapsedCallback;           /* Legacy weak OC_DelayElapsedCallback           */\r\n  htim->PWM_PulseFinishedCallback         = HAL_TIM_PWM_PulseFinishedCallback;         /* Legacy weak PWM_PulseFinishedCallback         */\r\n  htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback; /* Legacy weak PWM_PulseFinishedHalfCpltCallback */\r\n  htim->ErrorCallback                     = HAL_TIM_ErrorCallback;                     /* Legacy weak ErrorCallback                     */\r\n  htim->CommutationCallback               = HAL_TIMEx_CommutCallback;                  /* Legacy weak CommutationCallback               */\r\n  htim->CommutationHalfCpltCallback       = HAL_TIMEx_CommutHalfCpltCallback;          /* Legacy weak CommutationHalfCpltCallback       */\r\n  htim->BreakCallback                     = HAL_TIMEx_BreakCallback;                   /* Legacy weak BreakCallback                     */\r\n}\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_TIM_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_tim_ex.c\r\n  * @author  MCD Application Team\r\n  * @brief   TIM HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the Timer Extended peripheral:\r\n  *           + Time Hall Sensor Interface Initialization\r\n  *           + Time Hall Sensor Interface Start\r\n  *           + Time Complementary signal break and dead time configuration\r\n  *           + Time Master and Slave synchronization configuration\r\n  *           + Timer remapping capabilities configuration\r\n  @verbatim\r\n  ==============================================================================\r\n                      ##### TIMER Extended features #####\r\n  ==============================================================================\r\n  [..]\r\n    The Timer Extended features include:\r\n    (#) Complementary outputs with programmable dead-time for :\r\n        (++) Output Compare\r\n        (++) PWM generation (Edge and Center-aligned Mode)\r\n        (++) One-pulse mode output\r\n    (#) Synchronization circuit to control the timer with external signals and to\r\n        interconnect several timers together.\r\n    (#) Break input to put the timer output signals in reset state or in a known state.\r\n    (#) Supports incremental (quadrature) encoder and hall-sensor circuitry for\r\n        positioning purposes\r\n\r\n            ##### How to use this driver #####\r\n  ==============================================================================\r\n    [..]\r\n     (#) Initialize the TIM low level resources by implementing the following functions\r\n         depending on the selected feature:\r\n           (++) Hall Sensor output : HAL_TIMEx_HallSensor_MspInit()\r\n\r\n     (#) Initialize the TIM low level resources :\r\n        (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE();\r\n        (##) TIM pins configuration\r\n            (+++) Enable the clock for the TIM GPIOs using the following function:\r\n              __HAL_RCC_GPIOx_CLK_ENABLE();\r\n            (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init();\r\n\r\n     (#) The external Clock can be configured, if needed (the default clock is the\r\n         internal clock from the APBx), using the following function:\r\n         HAL_TIM_ConfigClockSource, the clock configuration should be done before\r\n         any start function.\r\n\r\n     (#) Configure the TIM in the desired functioning mode using one of the\r\n         initialization function of this driver:\r\n          (++) HAL_TIMEx_HallSensor_Init() and HAL_TIMEx_ConfigCommutEvent(): to use the\r\n               Timer Hall Sensor Interface and the commutation event with the corresponding\r\n               Interrupt and DMA request if needed (Note that One Timer is used to interface\r\n               with the Hall sensor Interface and another Timer should be used to use\r\n               the commutation event).\r\n\r\n     (#) Activate the TIM peripheral using one of the start functions:\r\n           (++) Complementary Output Compare : HAL_TIMEx_OCN_Start(), HAL_TIMEx_OCN_Start_DMA(), HAL_TIMEx_OCN_Start_IT()\r\n           (++) Complementary PWM generation : HAL_TIMEx_PWMN_Start(), HAL_TIMEx_PWMN_Start_DMA(), HAL_TIMEx_PWMN_Start_IT()\r\n           (++) Complementary One-pulse mode output : HAL_TIMEx_OnePulseN_Start(), HAL_TIMEx_OnePulseN_Start_IT()\r\n           (++) Hall Sensor output : HAL_TIMEx_HallSensor_Start(), HAL_TIMEx_HallSensor_Start_DMA(), HAL_TIMEx_HallSensor_Start_IT().\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup TIMEx TIMEx\r\n * @brief TIM Extended HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_TIM_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/* Private macros ------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\nstatic void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma);\r\nstatic void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma);\r\nstatic void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState);\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @defgroup TIMEx_Exported_Functions TIM Extended Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions\r\n  * @brief    Timer Hall Sensor functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                      ##### Timer Hall Sensor functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure TIM HAL Sensor.\r\n    (+) De-initialize TIM HAL Sensor.\r\n    (+) Start the Hall Sensor Interface.\r\n    (+) Stop the Hall Sensor Interface.\r\n    (+) Start the Hall Sensor Interface and enable interrupts.\r\n    (+) Stop the Hall Sensor Interface and disable interrupts.\r\n    (+) Start the Hall Sensor Interface and enable DMA transfers.\r\n    (+) Stop the Hall Sensor Interface and disable DMA transfers.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM Hall Sensor Interface and initialize the associated handle.\r\n * @note   When the timer instance is initialized in Hall Sensor Interface mode,\r\n *         timer channels 1 and channel 2 are reserved and cannot be used for\r\n *         other purpose.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @param  sConfig TIM Hall Sensor configuration structure\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig) {\r\n  TIM_OC_InitTypeDef OC_Config;\r\n\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n  assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity));\r\n  assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));\r\n  assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy week callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->HallSensor_MspInitCallback == NULL) {\r\n      htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->HallSensor_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIMEx_HallSensor_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Configure the Time base in the Encoder Mode */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Configure the Channel 1 as Input Channel to interface with the three Outputs of the  Hall sensor */\r\n  TIM_TI1_SetConfig(htim->Instance, sConfig->IC1Polarity, TIM_ICSELECTION_TRC, sConfig->IC1Filter);\r\n\r\n  /* Reset the IC1PSC Bits */\r\n  htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;\r\n  /* Set the IC1PSC value */\r\n  htim->Instance->CCMR1 |= sConfig->IC1Prescaler;\r\n\r\n  /* Enable the Hall sensor interface (XOR function of the three inputs) */\r\n  htim->Instance->CR2 |= TIM_CR2_TI1S;\r\n\r\n  /* Select the TIM_TS_TI1F_ED signal as Input trigger for the TIM */\r\n  htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n  htim->Instance->SMCR |= TIM_TS_TI1F_ED;\r\n\r\n  /* Use the TIM_TS_TI1F_ED signal to reset the TIM counter each edge detection */\r\n  htim->Instance->SMCR &= ~TIM_SMCR_SMS;\r\n  htim->Instance->SMCR |= TIM_SLAVEMODE_RESET;\r\n\r\n  /* Program channel 2 in PWM 2 mode with the desired Commutation_Delay*/\r\n  OC_Config.OCFastMode   = TIM_OCFAST_DISABLE;\r\n  OC_Config.OCIdleState  = TIM_OCIDLESTATE_RESET;\r\n  OC_Config.OCMode       = TIM_OCMODE_PWM2;\r\n  OC_Config.OCNIdleState = TIM_OCNIDLESTATE_RESET;\r\n  OC_Config.OCNPolarity  = TIM_OCNPOLARITY_HIGH;\r\n  OC_Config.OCPolarity   = TIM_OCPOLARITY_HIGH;\r\n  OC_Config.Pulse        = sConfig->Commutation_Delay;\r\n\r\n  TIM_OC2_SetConfig(htim->Instance, &OC_Config);\r\n\r\n  /* Select OC2REF as trigger output on TRGO: write the MMS bits in the TIMx_CR2\r\n    register to 101 */\r\n  htim->Instance->CR2 &= ~TIM_CR2_MMS;\r\n  htim->Instance->CR2 |= TIM_TRGO_OC2REF;\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM Hall Sensor interface\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->HallSensor_MspDeInitCallback == NULL) {\r\n    htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->HallSensor_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */\r\n  HAL_TIMEx_HallSensor_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Change the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Hall Sensor MSP.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIMEx_HallSensor_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM Hall Sensor MSP.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIMEx_HallSensor_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Hall Sensor Interface.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Check the TIM channels state */\r\n  if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n      (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Input Capture channel 1\r\n  (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Hall sensor Interface.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channels 1, 2 and 3\r\n    (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Hall Sensor Interface in interrupt mode.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Check the TIM channels state */\r\n  if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n      (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the capture compare Interrupts 1 event */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Enable the Input Capture channel 1\r\n    (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Hall Sensor Interface in interrupt mode.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channel 1\r\n    (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the capture compare Interrupts event */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Hall Sensor Interface in DMA mode.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @param  pData The destination Buffer address.\r\n * @param  Length The length of data to be transferred from TIM peripheral to memory.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM channel state */\r\n  if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)) {\r\n    return HAL_BUSY;\r\n  } else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY)) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Enable the Input Capture channel 1\r\n    (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n\r\n  /* Set the DMA Input Capture 1 Callbacks */\r\n  htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n  htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n  /* Set the DMA error callback */\r\n  htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n  /* Enable the DMA channel for Capture 1*/\r\n  if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length) != HAL_OK) {\r\n    /* Return error status */\r\n    return HAL_ERROR;\r\n  }\r\n  /* Enable the capture compare 1 Interrupt */\r\n  __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Hall Sensor Interface in DMA mode.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channel 1\r\n    (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the capture compare Interrupts 1 event */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n\r\n  (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions\r\n  *  @brief   Timer Complementary Output Compare functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n              ##### Timer Complementary Output Compare functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Start the Complementary Output Compare/PWM.\r\n    (+) Stop the Complementary Output Compare/PWM.\r\n    (+) Start the Complementary Output Compare/PWM and enable interrupts.\r\n    (+) Stop the Complementary Output Compare/PWM and disable interrupts.\r\n    (+) Start the Complementary Output Compare/PWM and enable DMA transfers.\r\n    (+) Stop the Complementary Output Compare/PWM and disable DMA transfers.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation on the complementary\r\n *         output.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation on the complementary\r\n *         output.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Disable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation in interrupt mode\r\n *         on the complementary output.\r\n * @param  htim TIM OC handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Enable the TIM Output Compare interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Enable the TIM Output Compare interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Enable the TIM Output Compare interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the TIM Break interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK);\r\n\r\n  /* Enable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation in interrupt mode\r\n *         on the complementary output.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpccer;\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Output Compare interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Output Compare interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Output Compare interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the TIM Break interrupt (only if no more channel is active) */\r\n  tmpccer = htim->Instance->CCER;\r\n  if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == (uint32_t)RESET) {\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK);\r\n  }\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation in DMA mode\r\n *         on the complementary output.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @param  pData The source Buffer address.\r\n * @param  Length The length of data to be transferred from memory to TIM peripheral\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Set the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Output Compare DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Output Compare DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Output Compare DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation in DMA mode\r\n *         on the complementary output.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Output Compare DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Output Compare DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Output Compare DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions\r\n  * @brief    Timer Complementary PWM functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                 ##### Timer Complementary PWM functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Start the Complementary PWM.\r\n    (+) Stop the Complementary PWM.\r\n    (+) Start the Complementary PWM and enable interrupts.\r\n    (+) Stop the Complementary PWM and disable interrupts.\r\n    (+) Start the Complementary PWM and enable DMA transfers.\r\n    (+) Stop the Complementary PWM and disable DMA transfers.\r\n    (+) Start the Complementary Input Capture measurement.\r\n    (+) Stop the Complementary Input Capture.\r\n    (+) Start the Complementary Input Capture and enable interrupts.\r\n    (+) Stop the Complementary Input Capture and disable interrupts.\r\n    (+) Start the Complementary Input Capture and enable DMA transfers.\r\n    (+) Stop the Complementary Input Capture and disable DMA transfers.\r\n    (+) Start the Complementary One Pulse generation.\r\n    (+) Stop the Complementary One Pulse.\r\n    (+) Start the Complementary One Pulse and enable interrupts.\r\n    (+) Stop the Complementary One Pulse and disable interrupts.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Starts the PWM signal generation on the complementary output.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the complementary PWM output  */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the PWM signal generation on the complementary output.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Disable the complementary PWM output  */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the PWM signal generation in interrupt mode on the\r\n *         complementary output.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Enable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Enable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Enable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the TIM Break interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK);\r\n\r\n  /* Enable the complementary PWM output  */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the PWM signal generation in interrupt mode on the\r\n *         complementary output.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpccer;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the complementary PWM output  */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the TIM Break interrupt (only if no more channel is active) */\r\n  tmpccer = htim->Instance->CCER;\r\n  if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == (uint32_t)RESET) {\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK);\r\n  }\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM PWM signal generation in DMA mode on the\r\n *         complementary output\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @param  pData The source Buffer address.\r\n * @param  Length The length of data to be transferred from memory to TIM peripheral\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Set the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 3 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the complementary PWM output  */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM PWM signal generation in DMA mode on the complementary\r\n *         output\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the complementary PWM output */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions\r\n  * @brief    Timer Complementary One Pulse functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                ##### Timer Complementary One Pulse functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Start the Complementary One Pulse generation.\r\n    (+) Stop the Complementary One Pulse.\r\n    (+) Start the Complementary One Pulse and enable interrupts.\r\n    (+) Stop the Complementary One Pulse and disable interrupts.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Starts the TIM One Pulse signal generation on the complementary\r\n *         output.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  uint32_t                    input_channel        = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1;\r\n  HAL_TIM_ChannelStateTypeDef input_channel_state  = TIM_CHANNEL_STATE_GET(htim, input_channel);\r\n  HAL_TIM_ChannelStateTypeDef output_channel_state = TIM_CHANNEL_N_STATE_GET(htim, OutputChannel);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));\r\n\r\n  /* Check the TIM channels state */\r\n  if ((output_channel_state != HAL_TIM_CHANNEL_STATE_READY) || (input_channel_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, OutputChannel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, input_channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the complementary One Pulse output channel and the Input Capture channel */\r\n  TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM One Pulse signal generation on the complementary\r\n *         output.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));\r\n\r\n  /* Disable the complementary One Pulse output channel and the Input Capture channel */\r\n  TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM  channels state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, OutputChannel, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, input_channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM One Pulse signal generation in interrupt mode on the\r\n *         complementary channel.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  uint32_t                    input_channel        = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1;\r\n  HAL_TIM_ChannelStateTypeDef input_channel_state  = TIM_CHANNEL_STATE_GET(htim, input_channel);\r\n  HAL_TIM_ChannelStateTypeDef output_channel_state = TIM_CHANNEL_N_STATE_GET(htim, OutputChannel);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));\r\n\r\n  /* Check the TIM channels state */\r\n  if ((output_channel_state != HAL_TIM_CHANNEL_STATE_READY) || (input_channel_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, OutputChannel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, input_channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the TIM Capture/Compare 1 interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Enable the TIM Capture/Compare 2 interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n\r\n  /* Enable the complementary One Pulse output channel and the Input Capture channel */\r\n  TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM One Pulse signal generation in interrupt mode on the\r\n *         complementary channel.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));\r\n\r\n  /* Disable the TIM Capture/Compare 1 interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Disable the TIM Capture/Compare 2 interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n\r\n  /* Disable the complementary One Pulse output channel and the Input Capture channel */\r\n  TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM  channels state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, OutputChannel, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, input_channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions\r\n  * @brief    Peripheral Control functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                    ##### Peripheral Control functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n      (+) Configure the commutation event in case of use of the Hall sensor interface.\r\n      (+) Configure Output channels for OC and PWM mode.\r\n\r\n      (+) Configure Complementary channels, break features and dead time.\r\n      (+) Configure Master synchronization.\r\n      (+) Configure timer remapping capabilities.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Configure the TIM commutation event sequence.\r\n * @note  This function is mandatory to use the commutation event in order to\r\n *        update the configuration at each commutation detection on the TRGI input of the Timer,\r\n *        the typical use of this feature is with the use of another Timer(interface Timer)\r\n *        configured in Hall sensor interface, this interface Timer will generate the\r\n *        commutation at its TRGO output (connected to Timer used in this function) each time\r\n *        the TI1 of the Interface Timer detect a commutation at its input TI1.\r\n * @param  htim TIM handle\r\n * @param  InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_TS_ITR0: Internal trigger 0 selected\r\n *            @arg TIM_TS_ITR1: Internal trigger 1 selected\r\n *            @arg TIM_TS_ITR2: Internal trigger 2 selected\r\n *            @arg TIM_TS_ITR3: Internal trigger 3 selected\r\n *            @arg TIM_TS_NONE: No trigger is needed\r\n * @param  CommutationSource the Commutation Event source\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer\r\n *            @arg TIM_COMMUTATION_SOFTWARE:  Commutation source is set by software using the COMG bit\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger));\r\n\r\n  __HAL_LOCK(htim);\r\n\r\n  if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) {\r\n    /* Select the Input trigger */\r\n    htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n    htim->Instance->SMCR |= InputTrigger;\r\n  }\r\n\r\n  /* Select the Capture Compare preload feature */\r\n  htim->Instance->CR2 |= TIM_CR2_CCPC;\r\n  /* Select the Commutation event source */\r\n  htim->Instance->CR2 &= ~TIM_CR2_CCUS;\r\n  htim->Instance->CR2 |= CommutationSource;\r\n\r\n  /* Disable Commutation Interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_COM);\r\n\r\n  /* Disable Commutation DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM);\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TIM commutation event sequence with interrupt.\r\n * @note  This function is mandatory to use the commutation event in order to\r\n *        update the configuration at each commutation detection on the TRGI input of the Timer,\r\n *        the typical use of this feature is with the use of another Timer(interface Timer)\r\n *        configured in Hall sensor interface, this interface Timer will generate the\r\n *        commutation at its TRGO output (connected to Timer used in this function) each time\r\n *        the TI1 of the Interface Timer detect a commutation at its input TI1.\r\n * @param  htim TIM handle\r\n * @param  InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_TS_ITR0: Internal trigger 0 selected\r\n *            @arg TIM_TS_ITR1: Internal trigger 1 selected\r\n *            @arg TIM_TS_ITR2: Internal trigger 2 selected\r\n *            @arg TIM_TS_ITR3: Internal trigger 3 selected\r\n *            @arg TIM_TS_NONE: No trigger is needed\r\n * @param  CommutationSource the Commutation Event source\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer\r\n *            @arg TIM_COMMUTATION_SOFTWARE:  Commutation source is set by software using the COMG bit\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger));\r\n\r\n  __HAL_LOCK(htim);\r\n\r\n  if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) {\r\n    /* Select the Input trigger */\r\n    htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n    htim->Instance->SMCR |= InputTrigger;\r\n  }\r\n\r\n  /* Select the Capture Compare preload feature */\r\n  htim->Instance->CR2 |= TIM_CR2_CCPC;\r\n  /* Select the Commutation event source */\r\n  htim->Instance->CR2 &= ~TIM_CR2_CCUS;\r\n  htim->Instance->CR2 |= CommutationSource;\r\n\r\n  /* Disable Commutation DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM);\r\n\r\n  /* Enable the Commutation Interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_COM);\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TIM commutation event sequence with DMA.\r\n * @note  This function is mandatory to use the commutation event in order to\r\n *        update the configuration at each commutation detection on the TRGI input of the Timer,\r\n *        the typical use of this feature is with the use of another Timer(interface Timer)\r\n *        configured in Hall sensor interface, this interface Timer will generate the\r\n *        commutation at its TRGO output (connected to Timer used in this function) each time\r\n *        the TI1 of the Interface Timer detect a commutation at its input TI1.\r\n * @note  The user should configure the DMA in his own software, in This function only the COMDE bit is set\r\n * @param  htim TIM handle\r\n * @param  InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_TS_ITR0: Internal trigger 0 selected\r\n *            @arg TIM_TS_ITR1: Internal trigger 1 selected\r\n *            @arg TIM_TS_ITR2: Internal trigger 2 selected\r\n *            @arg TIM_TS_ITR3: Internal trigger 3 selected\r\n *            @arg TIM_TS_NONE: No trigger is needed\r\n * @param  CommutationSource the Commutation Event source\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer\r\n *            @arg TIM_COMMUTATION_SOFTWARE:  Commutation source is set by software using the COMG bit\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger));\r\n\r\n  __HAL_LOCK(htim);\r\n\r\n  if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) {\r\n    /* Select the Input trigger */\r\n    htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n    htim->Instance->SMCR |= InputTrigger;\r\n  }\r\n\r\n  /* Select the Capture Compare preload feature */\r\n  htim->Instance->CR2 |= TIM_CR2_CCPC;\r\n  /* Select the Commutation event source */\r\n  htim->Instance->CR2 &= ~TIM_CR2_CCUS;\r\n  htim->Instance->CR2 |= CommutationSource;\r\n\r\n  /* Enable the Commutation DMA Request */\r\n  /* Set the DMA Commutation Callback */\r\n  htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback     = TIMEx_DMACommutationCplt;\r\n  htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt;\r\n  /* Set the DMA error callback */\r\n  htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError;\r\n\r\n  /* Disable Commutation Interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_COM);\r\n\r\n  /* Enable the Commutation DMA Request */\r\n  __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_COM);\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the TIM in master mode.\r\n * @param  htim TIM handle.\r\n * @param  sMasterConfig pointer to a TIM_MasterConfigTypeDef structure that\r\n *         contains the selected trigger output (TRGO) and the Master/Slave\r\n *         mode.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig) {\r\n  uint32_t tmpcr2;\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));\r\n  assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));\r\n\r\n  /* Check input state */\r\n  __HAL_LOCK(htim);\r\n\r\n  /* Change the handler state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = htim->Instance->CR2;\r\n\r\n  /* Get the TIMx SMCR register value */\r\n  tmpsmcr = htim->Instance->SMCR;\r\n\r\n  /* Reset the MMS Bits */\r\n  tmpcr2 &= ~TIM_CR2_MMS;\r\n  /* Select the TRGO source */\r\n  tmpcr2 |= sMasterConfig->MasterOutputTrigger;\r\n\r\n  /* Update TIMx CR2 */\r\n  htim->Instance->CR2 = tmpcr2;\r\n\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    /* Reset the MSM Bit */\r\n    tmpsmcr &= ~TIM_SMCR_MSM;\r\n    /* Set master mode */\r\n    tmpsmcr |= sMasterConfig->MasterSlaveMode;\r\n\r\n    /* Update TIMx SMCR */\r\n    htim->Instance->SMCR = tmpsmcr;\r\n  }\r\n\r\n  /* Change the htim state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the Break feature, dead time, Lock level, OSSI/OSSR State\r\n *         and the AOE(automatic output enable).\r\n * @param  htim TIM handle\r\n * @param  sBreakDeadTimeConfig pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that\r\n *         contains the BDTR Register configuration  information for the TIM peripheral.\r\n * @note   Interrupts can be generated when an active level is detected on the\r\n *         break input, the break 2 input or the system break input. Break\r\n *         interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig) {\r\n  /* Keep this variable initialized to 0 as it is used to configure BDTR register */\r\n  uint32_t tmpbdtr = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_OSSR_STATE(sBreakDeadTimeConfig->OffStateRunMode));\r\n  assert_param(IS_TIM_OSSI_STATE(sBreakDeadTimeConfig->OffStateIDLEMode));\r\n  assert_param(IS_TIM_LOCK_LEVEL(sBreakDeadTimeConfig->LockLevel));\r\n  assert_param(IS_TIM_DEADTIME(sBreakDeadTimeConfig->DeadTime));\r\n  assert_param(IS_TIM_BREAK_STATE(sBreakDeadTimeConfig->BreakState));\r\n  assert_param(IS_TIM_BREAK_POLARITY(sBreakDeadTimeConfig->BreakPolarity));\r\n  assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(sBreakDeadTimeConfig->AutomaticOutput));\r\n\r\n  /* Check input state */\r\n  __HAL_LOCK(htim);\r\n\r\n  /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State,\r\n     the OSSI State, the dead time value and the Automatic Output Enable Bit */\r\n\r\n  /* Set the BDTR bits */\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_DTG, sBreakDeadTimeConfig->DeadTime);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_LOCK, sBreakDeadTimeConfig->LockLevel);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_OSSI, sBreakDeadTimeConfig->OffStateIDLEMode);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_OSSR, sBreakDeadTimeConfig->OffStateRunMode);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_BKE, sBreakDeadTimeConfig->BreakState);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_BKP, sBreakDeadTimeConfig->BreakPolarity);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_AOE, sBreakDeadTimeConfig->AutomaticOutput);\r\n\r\n  /* Set TIMx_BDTR */\r\n  htim->Instance->BDTR = tmpbdtr;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the TIMx Remapping input capabilities.\r\n * @param  htim TIM handle.\r\n * @param  Remap specifies the TIM remapping source.\r\n *\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n  UNUSED(Remap);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group6 Extended Callbacks functions\r\n  * @brief    Extended Callbacks functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                    ##### Extended Callbacks functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides Extended TIM callback functions:\r\n    (+) Timer Commutation callback\r\n    (+) Timer Break callback\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Hall commutation changed callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIMEx_CommutCallback could be implemented in the user file\r\n   */\r\n}\r\n/**\r\n * @brief  Hall commutation changed half complete callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIMEx_CommutHalfCpltCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIMEx_CommutHalfCpltCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Hall Break detection callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIMEx_BreakCallback could be implemented in the user file\r\n   */\r\n}\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group7 Extended Peripheral State functions\r\n  * @brief    Extended Peripheral State functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                ##### Extended Peripheral State functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This subsection permits to get in run-time the status of the peripheral\r\n    and the data flow.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Return the TIM Hall Sensor interface handle state.\r\n * @param  htim TIM Hall Sensor handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return actual state of the TIM complementary channel.\r\n * @param  htim TIM handle\r\n * @param  ChannelN TIM Complementary channel\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3\r\n * @retval TIM Complementary channel state\r\n */\r\nHAL_TIM_ChannelStateTypeDef HAL_TIMEx_GetChannelNState(TIM_HandleTypeDef *htim, uint32_t ChannelN) {\r\n  HAL_TIM_ChannelStateTypeDef channel_state;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, ChannelN));\r\n\r\n  channel_state = TIM_CHANNEL_N_STATE_GET(htim, ChannelN);\r\n\r\n  return channel_state;\r\n}\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private functions ---------------------------------------------------------*/\r\n/** @defgroup TIMEx_Private_Functions TIMEx Private Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  TIM DMA Commutation callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  /* Change the htim state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->CommutationCallback(htim);\r\n#else\r\n  HAL_TIMEx_CommutCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Commutation half complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIMEx_DMACommutationHalfCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  /* Change the htim state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->CommutationHalfCpltCallback(htim);\r\n#else\r\n  HAL_TIMEx_CommutHalfCpltCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Delay Pulse complete callback (complementary channel).\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n  HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA error callback (complementary channel)\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->ErrorCallback(htim);\r\n#else\r\n  HAL_TIM_ErrorCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  Enables or disables the TIM Capture Compare Channel xN.\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  Channel specifies the TIM Channel\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3\r\n * @param  ChannelNState specifies the TIM Channel CCxNE bit new state.\r\n *          This parameter can be: TIM_CCxN_ENABLE or TIM_CCxN_Disable.\r\n * @retval None\r\n */\r\nstatic void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState) {\r\n  uint32_t tmp;\r\n\r\n  tmp = TIM_CCER_CC1NE << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */\r\n\r\n  /* Reset the CCxNE Bit */\r\n  TIMx->CCER &= ~tmp;\r\n\r\n  /* Set or reset the CCxNE Bit */\r\n  TIMx->CCER |= (uint32_t)(ChannelNState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */\r\n}\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_TIM_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/configuration.h",
    "content": "#ifndef CONFIGURATION_H_\n#define CONFIGURATION_H_\n#include <stdint.h>\n/**\n * Configuration.h\n * Define here your default pre settings for MHP30\n *\n */\n\n//===========================================================================\n//============================= Default Settings ============================\n//===========================================================================\n/**\n * Default soldering temp is 320.0 C\n * Temperature the iron sleeps at - default 150.0 C\n */\n\n#define SLEEP_TEMP         150 // Default sleep temperature\n#define BOOST_TEMP         420 // Default boost temp.\n#define BOOST_MODE_ENABLED 1   // 0: Disable 1: Enable\n\n/**\n * Blink the temperature on the cooling screen when its > 50C\n */\n#define COOLING_TEMP_BLINK 0 // 0: Disable 1: Enable\n\n/**\n * How many seconds/minutes we wait until going to sleep/shutdown.\n * Values -> SLEEP_TIME * 10; i.e. 5*10 = 50 Seconds!\n */\n#define SLEEP_TIME    5 // x10 Seconds\n#define SHUTDOWN_TIME 0 // Minutes -- Default shutdown to being off\n\n/**\n * Auto start off for safety.\n * Pissible values are:\n *  0 - none\n *  1 - Soldering Temperature\n *  2 - Sleep Temperature\n *  3 - Sleep Off Temperature\n */\n#define AUTO_START_MODE 0 // Default to none\n\n/**\n * Locking Mode\n * When in soldering mode a long press on both keys toggle the lock of the buttons\n * Possible values are:\n *  0 - Desactivated\n *  1 - Lock except boost\n *  2 - Full lock\n */\n#define LOCKING_MODE 0 // Default to desactivated for safety\n\n/**\n * OLED Orientation\n *\n */\n#define ORIENTATION_MODE           0 // 0: Right 1:Left 2:Automatic - Default right\n#define MAX_ORIENTATION_MODE       1 // Unlikely to ever change\n#define REVERSE_BUTTON_TEMP_CHANGE 0 // 0:Default 1:Reverse - Reverse the plus and minus button assigment for temperature change\n\n/**\n * OLED Brightness\n *\n */\n#define MIN_BRIGHTNESS     0   // Min OLED brightness selectable\n#define MAX_BRIGHTNESS     100 // Max OLED brightness selectable\n#define BRIGHTNESS_STEP    25  // OLED brightness increment\n#define DEFAULT_BRIGHTNESS 25  // default OLED brightness\n\n/**\n * Temp change settings\n */\n#define TEMP_CHANGE_SHORT_STEP     1  // Default temp change short step +1\n#define TEMP_CHANGE_LONG_STEP      10 // Default temp change long step +10\n#define TEMP_CHANGE_SHORT_STEP_MAX 50 // Temp change short step MAX value\n#define TEMP_CHANGE_LONG_STEP_MAX  90 // Temp change long step MAX value\n\n/* Power pulse for keeping power banks awake*/\n#define POWER_PULSE_INCREMENT    1\n#define POWER_PULSE_MAX          100 // x10 max watts\n#define POWER_PULSE_WAIT_MAX     9   // 9*2.5s = 22.5 seconds\n#define POWER_PULSE_DURATION_MAX 9   // 9*250ms = 2.25 seconds\n\n#define ADC_MAX_READING (4096 * 8) // Maximum reading of the adc\n#define ADC_VDD_MV      3300       // ADC max reading millivolts\n\n#define POWER_PULSE_WAIT_DEFAULT     4 // Default rate of the power pulse: 4*2500 = 10000 ms = 10 s\n#define POWER_PULSE_DURATION_DEFAULT 1 // Default duration of the power pulse: 1*250 = 250 ms\n#define POWER_PULSE_DEFAULT          5\n\n/**\n * OLED Orientation Sensitivity on Automatic mode!\n * Motion Sensitivity <0=Off 1=Least Sensitive 9=Most Sensitive>\n */\n#define SENSITIVITY 7 // Default 7\n\n/**\n * Detailed soldering screen\n * Detailed idle screen (off for first time users)\n */\n#define DETAILED_SOLDERING 0 // 0: Disable 1: Enable - Default 0\n#define DETAILED_IDLE      0 // 0: Disable 1: Enable - Default 0\n\n// Due to large thermal mass of the PCB being heated we need to pull this back a bit\n#define THERMAL_RUNAWAY_TIME_SEC 20\n#define THERMAL_RUNAWAY_TEMP_C   2\n\n#define CUT_OUT_SETTING          0  // default to no cut-off voltage\n#define RECOM_VOL_CELL           33 // Minimum voltage per cell (Recommended 3.3V (33))\n#define TEMPERATURE_INF          0  // default to 0\n#define DESCRIPTION_SCROLL_SPEED 0  // 0: Slow 1: Fast - default to slow\n#define ANIMATION_LOOP           1  // 0: off 1: on\n#define ANIMATION_SPEED          settingOffSpeed_t::MEDIUM\n\n#define OP_AMP_Rf_MHP30  268500 //  268.5  Kilo-ohms -> Measured\n#define OP_AMP_Rin_MHP30 1600   //  1.6  Kilo-ohms -> Measured\n\n#define OP_AMP_GAIN_STAGE_MHP30 (1 + (OP_AMP_Rf_MHP30 / OP_AMP_Rin_MHP30))\n// Deriving the Voltage div:\n// Vin_max = (3.3*(r1+r2))/(r2)\n// vdiv = (32768*4)/(vin_max*10)\n\n#ifndef MODEL_MHP30\n#error \"No model defined!\"\n#endif\n\n#ifdef MODEL_MHP30\n#define SOLDERING_TEMP         200                     // Default soldering temp is 200.0 °C\n#define VOLTAGE_DIV            360                     // Default for MHP30\n#define PID_POWER_LIMIT        65                      // Sets the max pwm power limit\n#define CALIBRATION_OFFSET     0                       // the adc offset in uV - MHP compensates automagically\n#define MIN_CALIBRATION_OFFSET 0                       // Min value for calibration\n#define POWER_LIMIT            65                      // 65 watts default power limit\n#define MAX_POWER_LIMIT        65                      //\n#define POWER_LIMIT_STEPS      1                       //\n#define OP_AMP_GAIN_STAGE      OP_AMP_GAIN_STAGE_MHP30 //\n#define USB_PD_VMAX            20                      // Maximum voltage for PD to negotiate\n#define MODEL_HAS_DCDC                                 // Has inductor to current filter\n#define PID_TIM_HZ             (16)                    //\n#define MAX_TEMP_C             350                     // Max soldering temp selectable °C\n#define MAX_TEMP_F             660                     // Max soldering temp selectable °F\n#define MIN_TEMP_C             10                      // Min soldering temp selectable °C\n#define MIN_TEMP_F             50                      // Min soldering temp selectable °F\n#define MIN_BOOST_TEMP_C       150                     // The min settable temp for boost mode °C\n#define MIN_BOOST_TEMP_F       300                     // The min settable temp for boost mode °F\n#define NO_DISPLAY_ROTATE                              // Disable OLED rotation by accel\n#define SLEW_LIMIT             50                      // Limit to 3.0 Watts per 64ms pid loop update rate slew rate\n#define TIPTYPE_MHP30          1                       // It's own special tip\n#define ACCEL_SC7\n#define ACCEL_MSA\n\n#define PROFILE_SUPPORT\n#define OLED_96x16         1\n#define POW_PD             1\n#define POW_PD_EXT         0\n#define USB_PD_EPR_WATTAGE 0 /*No EPR*/\n#define TEMP_NTC\n#define I2C_SOFT_BUS_2  1\n#define I2C_SOFT_BUS_1  1\n#define OLED_I2CBB1     1\n#define ACCEL_I2CBB1    1\n#define BATTFILTERDEPTH 8\n#define OLED_I2CBB2\n#define ACCEL_EXITS_ON_MOVEMENT\n#define NEEDS_VBUS_PROBE 0\n\n#define HARDWARE_MAX_WATTAGE_X10 650\n#define TIP_THERMAL_MASS         65 // TODO, needs refinement\n#define TIP_RESISTANCE           60 // x10 ohms, ~6 typical\n#endif                              /* MHP30 */\n\n#ifdef ACCEL_EXITS_ON_MOVEMENT\n#define NO_SLEEP_MODE\n#endif\n\n#define FLASH_LOGOADDR      (0x08000000 + (126 * 1024))\n#define SETTINGS_START_PAGE (0x08000000 + (127 * 1024))\n\n#endif /* CONFIGURATION_H_ */\n"
  },
  {
    "path": "source/Core/BSP/MHP30/flash.c",
    "content": "/*\r\n * flash.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"BSP.h\"\r\n#include \"BSP_Flash.h\"\r\n#include \"stm32f1xx_hal.h\"\r\n#include \"string.h\"\r\n\r\nvoid flash_save_buffer(const uint8_t *buffer, const uint16_t length) {\r\n  FLASH_EraseInitTypeDef pEraseInit;\r\n  pEraseInit.TypeErase    = FLASH_TYPEERASE_PAGES;\r\n  pEraseInit.Banks        = FLASH_BANK_1;\r\n  pEraseInit.NbPages      = 1;\r\n  pEraseInit.PageAddress  = (uint32_t)SETTINGS_START_PAGE;\r\n  uint32_t failingAddress = 0;\r\n  resetWatchdog();\r\n  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR | FLASH_FLAG_BSY);\r\n  HAL_FLASH_Unlock();\r\n  HAL_Delay(1);\r\n  resetWatchdog();\r\n  HAL_FLASHEx_Erase(&pEraseInit, &failingAddress);\r\n  //^ Erase the page of flash (1024 bytes on this stm32)\r\n  // erased the chunk\r\n  // now we program it\r\n  uint16_t *data = (uint16_t *)buffer;\r\n  HAL_FLASH_Unlock();\r\n  for (uint16_t i = 0; i < (length / 2); i++) {\r\n    resetWatchdog();\r\n    HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, SETTINGS_START_PAGE + (i * sizeof(uint16_t)), data[i]);\r\n  }\r\n  HAL_FLASH_Lock();\r\n}\r\n\r\nvoid flash_read_buffer(uint8_t *buffer, const uint16_t length) { memcpy(buffer, (uint8_t *)SETTINGS_START_PAGE, length); }\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/fusb_user.cpp",
    "content": "#include \"configuration.h\"\n#ifdef POW_PD\n#include \"BSP.h\"\n#include \"I2CBB1.hpp\"\n#include \"Pins.h\"\n#include \"Setup.h\"\n#include \"USBPD.h\"\nbool fusb_read_buf(const uint8_t deviceAddr, const uint8_t registerAdd, const uint8_t size, uint8_t *buf) { return I2CBB1::Mem_Read(deviceAddr, registerAdd, buf, size); }\n\nbool fusb_write_buf(const uint8_t deviceAddr, const uint8_t registerAdd, const uint8_t size, uint8_t *buf) { return I2CBB1::Mem_Write(deviceAddr, registerAdd, (uint8_t *)buf, size); }\n\nvoid setupFUSBIRQ() {\n  GPIO_InitTypeDef GPIO_InitStruct;\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;\n  GPIO_InitStruct.Pin   = INT_PD_Pin;\n  GPIO_InitStruct.Mode  = GPIO_MODE_IT_FALLING;\n  GPIO_InitStruct.Pull  = GPIO_PULLUP;\n  HAL_GPIO_Init(INT_PD_GPIO_Port, &GPIO_InitStruct);\n  HAL_NVIC_SetPriority(EXTI9_5_IRQn, 10, 0);\n  HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);\n}\n#endif\n"
  },
  {
    "path": "source/Core/BSP/MHP30/port.c",
    "content": "/*\r\n * FreeRTOS Kernel V10.3.1\r\n * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n * this software and associated documentation files (the \"Software\"), to deal in\r\n * the Software without restriction, including without limitation the rights to\r\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n * the Software, and to permit persons to whom the Software is furnished to do so,\r\n * subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n * http://www.FreeRTOS.org\r\n * http://aws.amazon.com/freertos\r\n *\r\n * 1 tab == 4 spaces!\r\n */\r\n\r\n/*-----------------------------------------------------------\r\n * Implementation of functions defined in portable.h for the ARM CM3 port.\r\n *----------------------------------------------------------*/\r\n\r\n/* Scheduler includes. */\r\n#include \"FreeRTOS.h\"\r\n#include \"task.h\"\r\n\r\n/* For backward compatibility, ensure configKERNEL_INTERRUPT_PRIORITY is\r\n defined.  The value should also ensure backward compatibility.\r\n FreeRTOS.org versions prior to V4.4.0 did not include this definition. */\r\n#ifndef configKERNEL_INTERRUPT_PRIORITY\r\n#define configKERNEL_INTERRUPT_PRIORITY 255\r\n#endif\r\n\r\n#ifndef configSYSTICK_CLOCK_HZ\r\n#define configSYSTICK_CLOCK_HZ configCPU_CLOCK_HZ\r\n/* Ensure the SysTick is clocked at the same frequency as the core. */\r\n#define portNVIC_SYSTICK_CLK_BIT (1UL << 2UL)\r\n#else\r\n/* The way the SysTick is clocked is not modified in case it is not the same\r\nas the core. */\r\n#define portNVIC_SYSTICK_CLK_BIT (0)\r\n#endif\r\n\r\n/* Constants required to manipulate the core.  Registers first... */\r\n#define portNVIC_SYSTICK_CTRL_REG          (*((volatile uint32_t *)0xe000e010))\r\n#define portNVIC_SYSTICK_LOAD_REG          (*((volatile uint32_t *)0xe000e014))\r\n#define portNVIC_SYSTICK_CURRENT_VALUE_REG (*((volatile uint32_t *)0xe000e018))\r\n#define portNVIC_SYSPRI2_REG               (*((volatile uint32_t *)0xe000ed20))\r\n/* ...then bits in the registers. */\r\n#define portNVIC_SYSTICK_INT_BIT        (1UL << 1UL)\r\n#define portNVIC_SYSTICK_ENABLE_BIT     (1UL << 0UL)\r\n#define portNVIC_SYSTICK_COUNT_FLAG_BIT (1UL << 16UL)\r\n#define portNVIC_PENDSVCLEAR_BIT        (1UL << 27UL)\r\n#define portNVIC_PEND_SYSTICK_CLEAR_BIT (1UL << 25UL)\r\n\r\n#define portNVIC_PENDSV_PRI  (((uint32_t)configKERNEL_INTERRUPT_PRIORITY) << 16UL)\r\n#define portNVIC_SYSTICK_PRI (((uint32_t)configKERNEL_INTERRUPT_PRIORITY) << 24UL)\r\n\r\n/* Constants required to check the validity of an interrupt priority. */\r\n#define portFIRST_USER_INTERRUPT_NUMBER (16)\r\n#define portNVIC_IP_REGISTERS_OFFSET_16 (0xE000E3F0)\r\n#define portAIRCR_REG                   (*((volatile uint32_t *)0xE000ED0C))\r\n#define portMAX_8_BIT_VALUE             ((uint8_t)0xff)\r\n#define portTOP_BIT_OF_BYTE             ((uint8_t)0x80)\r\n#define portMAX_PRIGROUP_BITS           ((uint8_t)7)\r\n#define portPRIORITY_GROUP_MASK         (0x07UL << 8UL)\r\n#define portPRIGROUP_SHIFT              (8UL)\r\n\r\n/* Masks off all bits but the VECTACTIVE bits in the ICSR register. */\r\n#define portVECTACTIVE_MASK (0xFFUL)\r\n\r\n/* Constants required to set up the initial stack. */\r\n#define portINITIAL_XPSR (0x01000000UL)\r\n\r\n/* The systick is a 24-bit counter. */\r\n#define portMAX_24_BIT_NUMBER (0xffffffUL)\r\n\r\n/* A fiddle factor to estimate the number of SysTick counts that would have\r\n occurred while the SysTick counter is stopped during tickless idle\r\n calculations. */\r\n#define portMISSED_COUNTS_FACTOR (45UL)\r\n\r\n/* For strict compliance with the Cortex-M spec the task start address should\r\n have bit-0 clear, as it is loaded into the PC on exit from an ISR. */\r\n#define portSTART_ADDRESS_MASK ((StackType_t)0xfffffffeUL)\r\n\r\n/* Let the user override the pre-loading of the initial LR with the address of\r\n prvTaskExitError() in case it messes up unwinding of the stack in the\r\n debugger. */\r\n#ifdef configTASK_RETURN_ADDRESS\r\n#define portTASK_RETURN_ADDRESS configTASK_RETURN_ADDRESS\r\n#else\r\n#define portTASK_RETURN_ADDRESS prvTaskExitError\r\n#endif\r\n\r\n/*\r\n * Setup the timer to generate the tick interrupts.  The implementation in this\r\n * file is weak to allow application writers to change the timer used to\r\n * generate the tick interrupt.\r\n */\r\nvoid vPortSetupTimerInterrupt(void);\r\n\r\n/*\r\n * Exception handlers.\r\n */\r\nvoid xPortPendSVHandler(void) __attribute__((naked));\r\nvoid xPortSysTickHandler(void);\r\nvoid vPortSVCHandler(void) __attribute__((naked));\r\n\r\n/*\r\n * Start first task is a separate function so it can be tested in isolation.\r\n */\r\nstatic void prvPortStartFirstTask(void) __attribute__((naked));\r\n\r\n/*\r\n * Used to catch tasks that attempt to return from their implementing function.\r\n */\r\nstatic void prvTaskExitError(void);\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Each task maintains its own interrupt status in the critical nesting\r\n variable. */\r\nstatic UBaseType_t uxCriticalNesting = 0xaaaaaaaa;\r\n\r\n/*\r\n * The number of SysTick increments that make up one tick period.\r\n */\r\n#if (configUSE_TICKLESS_IDLE == 1)\r\nstatic uint32_t ulTimerCountsForOneTick = 0;\r\n#endif /* configUSE_TICKLESS_IDLE */\r\n\r\n/*\r\n * The maximum number of tick periods that can be suppressed is limited by the\r\n * 24 bit resolution of the SysTick timer.\r\n */\r\n#if (configUSE_TICKLESS_IDLE == 1)\r\nstatic uint32_t xMaximumPossibleSuppressedTicks = 0;\r\n#endif /* configUSE_TICKLESS_IDLE */\r\n\r\n/*\r\n * Compensate for the CPU cycles that pass while the SysTick is stopped (low\r\n * power functionality only.\r\n */\r\n#if (configUSE_TICKLESS_IDLE == 1)\r\nstatic uint32_t ulStoppedTimerCompensation = 0;\r\n#endif /* configUSE_TICKLESS_IDLE */\r\n\r\n/*\r\n * Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure\r\n * FreeRTOS API functions are not called from interrupts that have been assigned\r\n * a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY.\r\n */\r\n#if (configASSERT_DEFINED == 1)\r\nstatic uint8_t                       ucMaxSysCallPriority         = 0;\r\nstatic uint32_t                      ulMaxPRIGROUPValue           = 0;\r\nstatic const volatile uint8_t *const pcInterruptPriorityRegisters = (const volatile uint8_t *const)portNVIC_IP_REGISTERS_OFFSET_16;\r\n#endif /* configASSERT_DEFINED */\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n/*\r\n * See header file for description.\r\n */\r\nStackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters) {\r\n  /* Simulate the stack frame as it would be created by a context switch\r\n   interrupt. */\r\n  pxTopOfStack--;                   /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */\r\n  *pxTopOfStack = portINITIAL_XPSR; /* xPSR */\r\n  pxTopOfStack--;\r\n  *pxTopOfStack = ((StackType_t)pxCode) & portSTART_ADDRESS_MASK; /* PC */\r\n  pxTopOfStack--;\r\n  *pxTopOfStack = (StackType_t)portTASK_RETURN_ADDRESS; /* LR */\r\n  pxTopOfStack -= 5;                                    /* R12, R3, R2 and R1. */\r\n  *pxTopOfStack = (StackType_t)pvParameters;            /* R0 */\r\n  pxTopOfStack -= 8;                                    /* R11, R10, R9, R8, R7, R6, R5 and R4. */\r\n\r\n  return pxTopOfStack;\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nstatic void prvTaskExitError(void) {\r\n  volatile uint32_t ulDummy = 0UL;\r\n\r\n  /* A function that implements a task must not exit or attempt to return to\r\n   its caller as there is nothing to return to.  If a task wants to exit it\r\n   should instead call vTaskDelete( NULL ).\r\n\r\n   Artificially force an assert() to be triggered if configASSERT() is\r\n   defined, then stop here so application writers can catch the error. */\r\n  configASSERT(uxCriticalNesting == ~0UL);\r\n  portDISABLE_INTERRUPTS();\r\n  while (ulDummy == 0) {\r\n    /* This file calls prvTaskExitError() after the scheduler has been\r\n     started to remove a compiler warning about the function being defined\r\n     but never called.  ulDummy is used purely to quieten other warnings\r\n     about code appearing after this function is called - making ulDummy\r\n     volatile makes the compiler think the function could return and\r\n     therefore not output an 'unreachable code' warning for code that appears\r\n     after it. */\r\n  }\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid vPortSVCHandler(void) {\r\n  __asm volatile(\"\tldr\tr3, pxCurrentTCBConst2\t\t\\n\"                 /* Restore the context. */\r\n                 \"\tldr r1, [r3]\t\t\t\t\t\\n\"         /* Use pxCurrentTCBConst to get the pxCurrentTCB address. */\r\n                 \"\tldr r0, [r1]\t\t\t\t\t\\n\"         /* The first item in pxCurrentTCB is the task top of stack. */\r\n                 \"\tldmia r0!, {r4-r11}\t\t\t\t\\n\"         /* Pop the registers that are not automatically saved on exception entry and the critical nesting count. */\r\n                 \"\tmsr psp, r0\t\t\t\t\t\t\\n\" /* Restore the task stack pointer. */\r\n                 \"\tisb\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmov r0, #0 \t\t\t\t\t\t\\n\"\r\n                 \"\tmsr\tbasepri, r0\t\t\t\t\t\\n\"\r\n                 \"\torr r14, #0xd\t\t\t\t\t\\n\"\r\n                 \"\tbx r14\t\t\t\t\t\t\t\\n\"\r\n                 \"\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\t.align 4\t\t\t\t\t\t\\n\"\r\n                 \"pxCurrentTCBConst2: .word pxCurrentTCB\t\t\t\t\\n\");\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nstatic void prvPortStartFirstTask(void) {\r\n  __asm volatile(\" ldr r0, =0xE000ED08 \t\\n\" /* Use the NVIC offset register to locate the stack. */\r\n                 \" ldr r0, [r0] \t\t\t\\n\"\r\n                 \" ldr r0, [r0] \t\t\t\\n\"\r\n                 \" msr msp, r0\t\t\t\\n\"         /* Set the msp back to the start of the stack. */\r\n                 \" cpsie i\t\t\t\t\\n\" /* Globally enable interrupts. */\r\n                 \" cpsie f\t\t\t\t\\n\"\r\n                 \" dsb\t\t\t\t\t\\n\"\r\n                 \" isb\t\t\t\t\t\\n\"\r\n                 \" svc 0\t\t\t\t\t\\n\" /* System call to start first task. */\r\n                 \" nop\t\t\t\t\t\\n\");\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\n/*\r\n * See header file for description.\r\n */\r\nBaseType_t xPortStartScheduler(void) {\r\n  /* configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0.\r\n   See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */\r\n  configASSERT(configMAX_SYSCALL_INTERRUPT_PRIORITY);\r\n\r\n#if (configASSERT_DEFINED == 1)\r\n  {\r\n    volatile uint32_t       ulOriginalPriority;\r\n    volatile uint8_t *const pucFirstUserPriorityRegister = (volatile uint8_t *const)(portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER);\r\n    volatile uint8_t        ucMaxPriorityValue;\r\n\r\n    /* Determine the maximum priority from which ISR safe FreeRTOS API\r\n     functions can be called.  ISR safe functions are those that end in\r\n     \"FromISR\".  FreeRTOS maintains separate thread and ISR API functions to\r\n     ensure interrupt entry is as fast and simple as possible.\r\n\r\n     Save the interrupt priority value that is about to be clobbered. */\r\n    ulOriginalPriority = *pucFirstUserPriorityRegister;\r\n\r\n    /* Determine the number of priority bits available.  First write to all\r\n     possible bits. */\r\n    *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE;\r\n\r\n    /* Read the value back to see how many bits stuck. */\r\n    ucMaxPriorityValue = *pucFirstUserPriorityRegister;\r\n\r\n    /* Use the same mask on the maximum system call priority. */\r\n    ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue;\r\n\r\n    /* Calculate the maximum acceptable priority group value for the number\r\n     of bits read back. */\r\n    ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS;\r\n    while ((ucMaxPriorityValue & portTOP_BIT_OF_BYTE) == portTOP_BIT_OF_BYTE) {\r\n      ulMaxPRIGROUPValue--;\r\n      ucMaxPriorityValue <<= (uint8_t)0x01;\r\n    }\r\n\r\n#ifdef __NVIC_PRIO_BITS\r\n    {\r\n      /* Check the CMSIS configuration that defines the number of\r\n      priority bits matches the number of priority bits actually queried\r\n      from the hardware. */\r\n      configASSERT((portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue) == __NVIC_PRIO_BITS);\r\n    }\r\n#endif\r\n\r\n#ifdef configPRIO_BITS\r\n    {\r\n      /* Check the FreeRTOS configuration that defines the number of\r\n      priority bits matches the number of priority bits actually queried\r\n      from the hardware. */\r\n      configASSERT((portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue) == configPRIO_BITS);\r\n    }\r\n#endif\r\n\r\n    /* Shift the priority group value back to its position within the AIRCR\r\n     register. */\r\n    ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT;\r\n    ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK;\r\n\r\n    /* Restore the clobbered interrupt priority register to its original\r\n     value. */\r\n    *pucFirstUserPriorityRegister = ulOriginalPriority;\r\n  }\r\n#endif /* conifgASSERT_DEFINED */\r\n\r\n  /* Make PendSV and SysTick the lowest priority interrupts. */\r\n  portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI;\r\n  portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI;\r\n\r\n  /* Start the timer that generates the tick ISR.  Interrupts are disabled\r\n   here already. */\r\n  vPortSetupTimerInterrupt();\r\n\r\n  /* Initialise the critical nesting count ready for the first task. */\r\n  uxCriticalNesting = 0;\r\n\r\n  /* Start the first task. */\r\n  prvPortStartFirstTask();\r\n\r\n  /* Should never get here as the tasks will now be executing!  Call the task\r\n   exit error function to prevent compiler warnings about a static function\r\n   not being called in the case that the application writer overrides this\r\n   functionality by defining configTASK_RETURN_ADDRESS.  Call\r\n   vTaskSwitchContext() so link time optimisation does not remove the\r\n   symbol. */\r\n  vTaskSwitchContext();\r\n  prvTaskExitError();\r\n\r\n  /* Should not get here! */\r\n  return 0;\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid vPortEndScheduler(void) {\r\n  /* Not implemented in ports where there is nothing to return to.\r\n   Artificially force an assert. */\r\n  configASSERT(uxCriticalNesting == 1000UL);\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid vPortEnterCritical(void) {\r\n  portDISABLE_INTERRUPTS();\r\n  uxCriticalNesting++;\r\n\r\n  /* This is not the interrupt safe version of the enter critical function so\r\n   assert() if it is being called from an interrupt context.  Only API\r\n   functions that end in \"FromISR\" can be used in an interrupt.  Only assert if\r\n   the critical nesting count is 1 to protect against recursive calls if the\r\n   assert function also uses a critical section. */\r\n  if (uxCriticalNesting == 1) {\r\n    configASSERT((portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK) == 0);\r\n  }\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid vPortExitCritical(void) {\r\n  configASSERT(uxCriticalNesting);\r\n  uxCriticalNesting--;\r\n  if (uxCriticalNesting == 0) {\r\n    portENABLE_INTERRUPTS();\r\n  }\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid xPortPendSVHandler(void) {\r\n  /* This is a naked function. */\r\n\r\n  __asm volatile(\"\tmrs r0, psp\t\t\t\t\t\t\t\\n\"\r\n                 \"\tisb\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tldr\tr3, pxCurrentTCBConst\t\t\t\\n\" /* Get the location of the current TCB. */\r\n                 \"\tldr\tr2, [r3]\t\t\t\t\t\t\\n\"\r\n                 \"\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tstmdb r0!, {r4-r11}\t\t\t\t\t\\n\" /* Save the remaining registers. */\r\n                 \"\tstr r0, [r2]\t\t\t\t\t\t\\n\" /* Save the new top of stack into the first member of the TCB. */\r\n                 \"\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tstmdb sp!, {r3, r14}\t\t\t\t\\n\"\r\n                 \"\tmov r0, %0\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmsr basepri, r0\t\t\t\t\t\t\\n\"\r\n                 \"\tbl vTaskSwitchContext\t\t\t\t\\n\"\r\n                 \"\tmov r0, #0\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmsr basepri, r0\t\t\t\t\t\t\\n\"\r\n                 \"\tldmia sp!, {r3, r14}\t\t\t\t\\n\"\r\n                 \"\t\t\t\t\t\t\t\t\t\t\\n\" /* Restore the context, including the critical nesting count. */\r\n                 \"\tldr r1, [r3]\t\t\t\t\t\t\\n\"\r\n                 \"\tldr r0, [r1]\t\t\t\t\t\t\\n\" /* The first item in pxCurrentTCB is the task top of stack. */\r\n                 \"\tldmia r0!, {r4-r11}\t\t\t\t\t\\n\" /* Pop the registers. */\r\n                 \"\tmsr psp, r0\t\t\t\t\t\t\t\\n\"\r\n                 \"\tisb\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tbx r14\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\t.align 4\t\t\t\t\t\t\t\\n\"\r\n                 \"pxCurrentTCBConst: .word pxCurrentTCB\t\\n\" ::\"i\"(configMAX_SYSCALL_INTERRUPT_PRIORITY));\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid xPortSysTickHandler(void) {\r\n  /* The SysTick runs at the lowest interrupt priority, so when this interrupt\r\n   executes all interrupts must be unmasked.  There is therefore no need to\r\n   save and then restore the interrupt mask value as its value is already\r\n   known. */\r\n  portDISABLE_INTERRUPTS();\r\n  {\r\n    /* Increment the RTOS tick. */\r\n    if (xTaskIncrementTick() != pdFALSE) {\r\n      /* A context switch is required.  Context switching is performed in\r\n       the PendSV interrupt.  Pend the PendSV interrupt. */\r\n      portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;\r\n    }\r\n  }\r\n  portENABLE_INTERRUPTS();\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\n#if (configUSE_TICKLESS_IDLE == 1)\r\n\r\n__attribute__((weak)) void vPortSuppressTicksAndSleep(TickType_t xExpectedIdleTime) {\r\n  uint32_t   ulReloadValue, ulCompleteTickPeriods, ulCompletedSysTickDecrements;\r\n  TickType_t xModifiableIdleTime;\r\n\r\n  /* Make sure the SysTick reload value does not overflow the counter. */\r\n  if (xExpectedIdleTime > xMaximumPossibleSuppressedTicks) {\r\n    xExpectedIdleTime = xMaximumPossibleSuppressedTicks;\r\n  }\r\n\r\n  /* Stop the SysTick momentarily.  The time the SysTick is stopped for\r\n  is accounted for as best it can be, but using the tickless mode will\r\n  inevitably result in some tiny drift of the time maintained by the\r\n  kernel with respect to calendar time. */\r\n  portNVIC_SYSTICK_CTRL_REG &= ~portNVIC_SYSTICK_ENABLE_BIT;\r\n\r\n  /* Calculate the reload value required to wait xExpectedIdleTime\r\n  tick periods.  -1 is used because this code will execute part way\r\n  through one of the tick periods. */\r\n  ulReloadValue = portNVIC_SYSTICK_CURRENT_VALUE_REG + (ulTimerCountsForOneTick * (xExpectedIdleTime - 1UL));\r\n  if (ulReloadValue > ulStoppedTimerCompensation) {\r\n    ulReloadValue -= ulStoppedTimerCompensation;\r\n  }\r\n\r\n  /* Enter a critical section but don't use the taskENTER_CRITICAL()\r\n  method as that will mask interrupts that should exit sleep mode. */\r\n  __asm volatile(\"cpsid i\" ::: \"memory\");\r\n  __asm volatile(\"dsb\");\r\n  __asm volatile(\"isb\");\r\n\r\n  /* If a context switch is pending or a task is waiting for the scheduler\r\n  to be unsuspended then abandon the low power entry. */\r\n  if (eTaskConfirmSleepModeStatus() == eAbortSleep) {\r\n    /* Restart from whatever is left in the count register to complete\r\n    this tick period. */\r\n    portNVIC_SYSTICK_LOAD_REG = portNVIC_SYSTICK_CURRENT_VALUE_REG;\r\n\r\n    /* Restart SysTick. */\r\n    portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT;\r\n\r\n    /* Reset the reload register to the value required for normal tick\r\n    periods. */\r\n    portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r\n\r\n    /* Re-enable interrupts - see comments above the cpsid instruction()\r\n    above. */\r\n    __asm volatile(\"cpsie i\" ::: \"memory\");\r\n  } else {\r\n    /* Set the new reload value. */\r\n    portNVIC_SYSTICK_LOAD_REG = ulReloadValue;\r\n\r\n    /* Clear the SysTick count flag and set the count value back to\r\n    zero. */\r\n    portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;\r\n\r\n    /* Restart SysTick. */\r\n    portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT;\r\n\r\n    /* Sleep until something happens.  configPRE_SLEEP_PROCESSING() can\r\n    set its parameter to 0 to indicate that its implementation contains\r\n    its own wait for interrupt or wait for event instruction, and so wfi\r\n    should not be executed again.  However, the original expected idle\r\n    time variable must remain unmodified, so a copy is taken. */\r\n    xModifiableIdleTime = xExpectedIdleTime;\r\n    configPRE_SLEEP_PROCESSING(xModifiableIdleTime);\r\n    if (xModifiableIdleTime > 0) {\r\n      __asm volatile(\"dsb\" ::: \"memory\");\r\n      __asm volatile(\"wfi\");\r\n      __asm volatile(\"isb\");\r\n    }\r\n    configPOST_SLEEP_PROCESSING(xExpectedIdleTime);\r\n\r\n    /* Re-enable interrupts to allow the interrupt that brought the MCU\r\n    out of sleep mode to execute immediately.  see comments above\r\n    __disable_interrupt() call above. */\r\n    __asm volatile(\"cpsie i\" ::: \"memory\");\r\n    __asm volatile(\"dsb\");\r\n    __asm volatile(\"isb\");\r\n\r\n    /* Disable interrupts again because the clock is about to be stopped\r\n    and interrupts that execute while the clock is stopped will increase\r\n    any slippage between the time maintained by the RTOS and calendar\r\n    time. */\r\n    __asm volatile(\"cpsid i\" ::: \"memory\");\r\n    __asm volatile(\"dsb\");\r\n    __asm volatile(\"isb\");\r\n\r\n    /* Disable the SysTick clock without reading the\r\n    portNVIC_SYSTICK_CTRL_REG register to ensure the\r\n    portNVIC_SYSTICK_COUNT_FLAG_BIT is not cleared if it is set.  Again,\r\n    the time the SysTick is stopped for is accounted for as best it can\r\n    be, but using the tickless mode will inevitably result in some tiny\r\n    drift of the time maintained by the kernel with respect to calendar\r\n    time*/\r\n    portNVIC_SYSTICK_CTRL_REG = (portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT);\r\n\r\n    /* Determine if the SysTick clock has already counted to zero and\r\n    been set back to the current reload value (the reload back being\r\n    correct for the entire expected idle time) or if the SysTick is yet\r\n    to count to zero (in which case an interrupt other than the SysTick\r\n    must have brought the system out of sleep mode). */\r\n    if ((portNVIC_SYSTICK_CTRL_REG & portNVIC_SYSTICK_COUNT_FLAG_BIT) != 0) {\r\n      uint32_t ulCalculatedLoadValue;\r\n\r\n      /* The tick interrupt is already pending, and the SysTick count\r\n      reloaded with ulReloadValue.  Reset the\r\n      portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick\r\n      period. */\r\n      ulCalculatedLoadValue = (ulTimerCountsForOneTick - 1UL) - (ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG);\r\n\r\n      /* Don't allow a tiny value, or values that have somehow\r\n      underflowed because the post sleep hook did something\r\n      that took too long. */\r\n      if ((ulCalculatedLoadValue < ulStoppedTimerCompensation) || (ulCalculatedLoadValue > ulTimerCountsForOneTick)) {\r\n        ulCalculatedLoadValue = (ulTimerCountsForOneTick - 1UL);\r\n      }\r\n\r\n      portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue;\r\n\r\n      /* As the pending tick will be processed as soon as this\r\n      function exits, the tick value maintained by the tick is stepped\r\n      forward by one less than the time spent waiting. */\r\n      ulCompleteTickPeriods = xExpectedIdleTime - 1UL;\r\n    } else {\r\n      /* Something other than the tick interrupt ended the sleep.\r\n      Work out how long the sleep lasted rounded to complete tick\r\n      periods (not the ulReload value which accounted for part\r\n      ticks). */\r\n      ulCompletedSysTickDecrements = (xExpectedIdleTime * ulTimerCountsForOneTick) - portNVIC_SYSTICK_CURRENT_VALUE_REG;\r\n\r\n      /* How many complete tick periods passed while the processor\r\n      was waiting? */\r\n      ulCompleteTickPeriods = ulCompletedSysTickDecrements / ulTimerCountsForOneTick;\r\n\r\n      /* The reload value is set to whatever fraction of a single tick\r\n      period remains. */\r\n      portNVIC_SYSTICK_LOAD_REG = ((ulCompleteTickPeriods + 1UL) * ulTimerCountsForOneTick) - ulCompletedSysTickDecrements;\r\n    }\r\n\r\n    /* Restart SysTick so it runs from portNVIC_SYSTICK_LOAD_REG\r\n    again, then set portNVIC_SYSTICK_LOAD_REG back to its standard\r\n    value. */\r\n    portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;\r\n    portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT;\r\n    vTaskStepTick(ulCompleteTickPeriods);\r\n    portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r\n\r\n    /* Exit with interrupts enabled. */\r\n    __asm volatile(\"cpsie i\" ::: \"memory\");\r\n  }\r\n}\r\n\r\n#endif /* configUSE_TICKLESS_IDLE */\r\n/*-----------------------------------------------------------*/\r\n\r\n/*\r\n * Setup the systick timer to generate the tick interrupts at the required\r\n * frequency.\r\n */\r\n__attribute__((weak)) void vPortSetupTimerInterrupt(void) {\r\n  /* Calculate the constants required to configure the tick interrupt. */\r\n#if (configUSE_TICKLESS_IDLE == 1)\r\n  {\r\n    ulTimerCountsForOneTick         = (configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ);\r\n    xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick;\r\n    ulStoppedTimerCompensation      = portMISSED_COUNTS_FACTOR / (configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ);\r\n  }\r\n#endif /* configUSE_TICKLESS_IDLE */\r\n\r\n  /* Stop and clear the SysTick. */\r\n  portNVIC_SYSTICK_CTRL_REG          = 0UL;\r\n  portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;\r\n\r\n  /* Configure SysTick to interrupt at the requested rate. */\r\n  portNVIC_SYSTICK_LOAD_REG = (configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ) - 1UL;\r\n  portNVIC_SYSTICK_CTRL_REG = (portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT);\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\n#if (configASSERT_DEFINED == 1)\r\n\r\nvoid vPortValidateInterruptPriority(void) {\r\n  uint32_t ulCurrentInterrupt;\r\n  uint8_t  ucCurrentPriority;\r\n\r\n  /* Obtain the number of the currently executing interrupt. */\r\n  __asm volatile(\"mrs %0, ipsr\" : \"=r\"(ulCurrentInterrupt)::\"memory\");\r\n\r\n  /* Is the interrupt number a user defined interrupt? */\r\n  if (ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER) {\r\n    /* Look up the interrupt's priority. */\r\n    ucCurrentPriority = pcInterruptPriorityRegisters[ulCurrentInterrupt];\r\n\r\n    /* The following assertion will fail if a service routine (ISR) for\r\n     an interrupt that has been assigned a priority above\r\n     configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API\r\n     function.  ISR safe FreeRTOS API functions must *only* be called\r\n     from interrupts that have been assigned a priority at or below\r\n     configMAX_SYSCALL_INTERRUPT_PRIORITY.\r\n\r\n     Numerically low interrupt priority numbers represent logically high\r\n     interrupt priorities, therefore the priority of the interrupt must\r\n     be set to a value equal to or numerically *higher* than\r\n     configMAX_SYSCALL_INTERRUPT_PRIORITY.\r\n\r\n     Interrupts that\tuse the FreeRTOS API must not be left at their\r\n     default priority of\tzero as that is the highest possible priority,\r\n     which is guaranteed to be above configMAX_SYSCALL_INTERRUPT_PRIORITY,\r\n     and\ttherefore also guaranteed to be invalid.\r\n\r\n     FreeRTOS maintains separate thread and ISR API functions to ensure\r\n     interrupt entry is as fast and simple as possible.\r\n\r\n     The following links provide detailed information:\r\n     http://www.freertos.org/RTOS-Cortex-M3-M4.html\r\n     http://www.freertos.org/FAQHelp.html */\r\n    configASSERT(ucCurrentPriority >= ucMaxSysCallPriority);\r\n  }\r\n\r\n  /* Priority grouping:  The interrupt controller (NVIC) allows the bits\r\n   that define each interrupt's priority to be split between bits that\r\n   define the interrupt's pre-emption priority bits and bits that define\r\n   the interrupt's sub-priority.  For simplicity all bits must be defined\r\n   to be pre-emption priority bits.  The following assertion will fail if\r\n   this is not the case (if some bits represent a sub-priority).\r\n\r\n   If the application only uses CMSIS libraries for interrupt\r\n   configuration then the correct setting can be achieved on all Cortex-M\r\n   devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the\r\n   scheduler.  Note however that some vendor specific peripheral libraries\r\n   assume a non-zero priority group setting, in which cases using a value\r\n   of zero will result in unpredictable behaviour. */\r\n  configASSERT((portAIRCR_REG & portPRIORITY_GROUP_MASK) <= ulMaxPRIGROUPValue);\r\n}\r\n\r\n#endif /* configASSERT_DEFINED */\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/portmacro.h",
    "content": "/*\r\n * FreeRTOS Kernel V10.3.1\r\n * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n * this software and associated documentation files (the \"Software\"), to deal in\r\n * the Software without restriction, including without limitation the rights to\r\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n * the Software, and to permit persons to whom the Software is furnished to do so,\r\n * subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n * http://www.FreeRTOS.org\r\n * http://aws.amazon.com/freertos\r\n *\r\n * 1 tab == 4 spaces!\r\n */\r\n\r\n#ifndef PORTMACRO_H\r\n#define PORTMACRO_H\r\n#include \"FreeRTOSConfig.h\"\r\n#include \"projdefs.h\"\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/*-----------------------------------------------------------\r\n * Port specific definitions.\r\n *\r\n * The settings in this file configure FreeRTOS correctly for the\r\n * given hardware and compiler.\r\n *\r\n * These settings should not be altered.\r\n *-----------------------------------------------------------\r\n */\r\n\r\n/* Type definitions. */\r\n#define portCHAR       char\r\n#define portFLOAT      float\r\n#define portDOUBLE     double\r\n#define portLONG       long\r\n#define portSHORT      short\r\n#define portSTACK_TYPE uint32_t\r\n#define portBASE_TYPE  long\r\n\r\ntypedef portSTACK_TYPE StackType_t;\r\ntypedef long           BaseType_t;\r\ntypedef unsigned long  UBaseType_t;\r\n\r\n#if (configUSE_16_BIT_TICKS == 1)\r\ntypedef uint16_t TickType_t;\r\n#define portMAX_DELAY (TickType_t)0xffff\r\n#else\r\ntypedef uint32_t TickType_t;\r\n#define portMAX_DELAY           (TickType_t)0xffffffffUL\r\n\r\n/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do\r\n not need to be guarded with a critical section. */\r\n#define portTICK_TYPE_IS_ATOMIC 1\r\n#endif\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Architecture specifics. */\r\n#define portSTACK_GROWTH   (-1)\r\n#define portTICK_PERIOD_MS ((TickType_t)1000 / configTICK_RATE_HZ)\r\n#define portBYTE_ALIGNMENT 8\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Scheduler utilities. */\r\n#define portYIELD()                                                            \\\r\n  {                                                                            \\\r\n    /* Set a PendSV to request a context switch. */                            \\\r\n    portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;                            \\\r\n                                                                               \\\r\n    /* Barriers are normally not required but do ensure the code is completely \\\r\n    within the specified behaviour for the architecture. */                    \\\r\n    __asm volatile(\"dsb\" ::: \"memory\");                                        \\\r\n    __asm volatile(\"isb\");                                                     \\\r\n  }\r\n\r\n#define portNVIC_INT_CTRL_REG  (*((volatile uint32_t *)0xe000ed04))\r\n#define portNVIC_PENDSVSET_BIT (1UL << 28UL)\r\n#define portEND_SWITCHING_ISR(xSwitchRequired) \\\r\n  if (xSwitchRequired != pdFALSE)              \\\r\n  portYIELD()\r\n#define portYIELD_FROM_ISR(x) portEND_SWITCHING_ISR(x)\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Critical section management. */\r\nextern void vPortEnterCritical(void);\r\nextern void vPortExitCritical(void);\r\n#define portSET_INTERRUPT_MASK_FROM_ISR()    ulPortRaiseBASEPRI()\r\n#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortSetBASEPRI(x)\r\n#define portDISABLE_INTERRUPTS()             vPortRaiseBASEPRI()\r\n#define portENABLE_INTERRUPTS()              vPortSetBASEPRI(0)\r\n#define portENTER_CRITICAL()                 vPortEnterCritical()\r\n#define portEXIT_CRITICAL()                  vPortExitCritical()\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Task function macros as described on the FreeRTOS.org WEB site.  These are\r\n not necessary for to use this port.  They are defined so the common demo files\r\n (which build with all the ports) will build. */\r\n#define portTASK_FUNCTION_PROTO(vFunction, pvParameters) void vFunction(void *pvParameters)\r\n#define portTASK_FUNCTION(vFunction, pvParameters)       void vFunction(void *pvParameters)\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Tickless idle/low power functionality. */\r\n#ifndef portSUPPRESS_TICKS_AND_SLEEP\r\nextern void vPortSuppressTicksAndSleep(TickType_t xExpectedIdleTime);\r\n#define portSUPPRESS_TICKS_AND_SLEEP(xExpectedIdleTime) vPortSuppressTicksAndSleep(xExpectedIdleTime)\r\n#endif\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Architecture specific optimisations. */\r\n#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION\r\n#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1\r\n#endif\r\n\r\n#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1\r\n\r\n/* Generic helper function. */\r\n__attribute__((always_inline)) static inline uint8_t ucPortCountLeadingZeros(uint32_t ulBitmap) {\r\n  uint8_t ucReturn;\r\n\r\n  __asm volatile(\"clz %0, %1\" : \"=r\"(ucReturn) : \"r\"(ulBitmap) : \"memory\");\r\n  return ucReturn;\r\n}\r\n\r\n/* Check the configuration. */\r\n#if (configMAX_PRIORITIES > 32)\r\n#error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32.  It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice.\r\n#endif\r\n\r\n/* Store/clear the ready priorities in a bit map. */\r\n#define portRECORD_READY_PRIORITY(uxPriority, uxReadyPriorities) (uxReadyPriorities) |= (1UL << (uxPriority))\r\n#define portRESET_READY_PRIORITY(uxPriority, uxReadyPriorities)  (uxReadyPriorities) &= ~(1UL << (uxPriority))\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n#define portGET_HIGHEST_PRIORITY(uxTopPriority, uxReadyPriorities) uxTopPriority = (31UL - (uint32_t)ucPortCountLeadingZeros((uxReadyPriorities)))\r\n\r\n#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n#ifdef configASSERT\r\nvoid vPortValidateInterruptPriority(void);\r\n#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() vPortValidateInterruptPriority()\r\n#endif\r\n\r\n/* portNOP() is not required by this port. */\r\n#define portNOP()\r\n\r\n#define portINLINE __inline\r\n\r\n#ifndef portFORCE_INLINE\r\n#define portFORCE_INLINE inline __attribute__((always_inline))\r\n#endif\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\nportFORCE_INLINE static BaseType_t xPortIsInsideInterrupt(void) {\r\n  uint32_t   ulCurrentInterrupt;\r\n  BaseType_t xReturn;\r\n\r\n  /* Obtain the number of the currently executing interrupt. */\r\n  __asm volatile(\"mrs %0, ipsr\" : \"=r\"(ulCurrentInterrupt)::\"memory\");\r\n\r\n  if (ulCurrentInterrupt == 0) {\r\n    xReturn = pdFALSE;\r\n  } else {\r\n    xReturn = pdTRUE;\r\n  }\r\n\r\n  return xReturn;\r\n}\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\nportFORCE_INLINE static void vPortRaiseBASEPRI(void) {\r\n  uint32_t ulNewBASEPRI;\r\n\r\n  __asm volatile(\"\tmov %0, %1\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmsr basepri, %0\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tisb\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tdsb\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 : \"=r\"(ulNewBASEPRI)\r\n                 : \"i\"(configMAX_SYSCALL_INTERRUPT_PRIORITY)\r\n                 : \"memory\");\r\n}\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\nportFORCE_INLINE static uint32_t ulPortRaiseBASEPRI(void) {\r\n  uint32_t ulOriginalBASEPRI, ulNewBASEPRI;\r\n\r\n  __asm volatile(\"\tmrs %0, basepri\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmov %1, %2\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmsr basepri, %1\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tisb\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tdsb\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 : \"=r\"(ulOriginalBASEPRI), \"=r\"(ulNewBASEPRI)\r\n                 : \"i\"(configMAX_SYSCALL_INTERRUPT_PRIORITY)\r\n                 : \"memory\");\r\n\r\n  /* This return will not be reached but is necessary to prevent compiler\r\n   warnings. */\r\n  return ulOriginalBASEPRI;\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nportFORCE_INLINE static void vPortSetBASEPRI(uint32_t ulNewMaskValue) { __asm volatile(\"\tmsr basepri, %0\t\" ::\"r\"(ulNewMaskValue) : \"memory\"); }\r\n/*-----------------------------------------------------------*/\r\n\r\n#define portMEMORY_BARRIER() __asm volatile(\"\" ::: \"memory\")\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* PORTMACRO_H */\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/postRTOS.cpp",
    "content": "#include \"BSP.h\"\n#include \"FreeRTOS.h\"\n#include \"I2C_Wrapper.hpp\"\n#include \"QC3.h\"\n#include \"Settings.h\"\n#include \"cmsis_os.h\"\n#include \"main.hpp\"\n#include \"power.hpp\"\n#include \"stdlib.h\"\n#include \"task.h\"\n\n// Initialisation to be performed with scheduler active\nvoid postRToSInit() {}\n"
  },
  {
    "path": "source/Core/BSP/MHP30/preRTOS.cpp",
    "content": "/*\r\n * preRTOS.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"BSP.h\"\r\n#include \"I2CBB1.hpp\"\r\n#include \"I2CBB2.hpp\"\r\n#include \"Pins.h\"\r\n#include \"Setup.h\"\r\n#include <I2C_Wrapper.hpp>\r\n\r\nvoid preRToSInit() {\r\n  /* Reset of all peripherals, Initializes the Flash interface and the Systick.\r\n   */\r\n  HAL_Init();\r\n  Setup_HAL(); // Setup all the HAL objects\r\n  BSPInit();\r\n  I2CBB2::init();\r\n  I2CBB1::init();\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/stm32f103.ld",
    "content": "\r\n\r\n/* Entry Point */\r\nENTRY(Reset_Handler)\r\n\r\n/* Highest address of the user mode stack */\r\n_estack = 0x20005000;    /* end of RAM */\r\n\r\n_Min_Heap_Size = 0x300;      /* required amount of heap  */\r\n_Min_Stack_Size = 1024; /* required amount of stack */\r\n\r\n__APP_BASE_ADDRESS__ = 0x08000000 + __BOOTLDR_SIZE__;\r\n__ROM_REGION_LENGTH__ = __FLASH_SIZE__ - __BOOTLDR_SIZE__;\r\n__FLASH_END_ADDR__ = __APP_BASE_ADDRESS__ + __ROM_REGION_LENGTH__;\r\n\r\n/* Memories definition */\r\nMEMORY\r\n{\r\n  RAM (xrw)\t\t: ORIGIN = 0x20000000, LENGTH = 20K\r\n  ROM (rx)\t\t: ORIGIN = __APP_BASE_ADDRESS__, LENGTH = __ROM_REGION_LENGTH__\r\n}\r\n/* ROM is normally 48K after the bootloader, however we allocate the last page for settings, and the second last one for display boot logo*/\r\n\r\n/* Sections */\r\nSECTIONS\r\n{\r\n  /* The startup code into ROM memory */\r\n  .isr_vector :\r\n  {\r\n    . = ALIGN(4);\r\n    KEEP(*(.isr_vector)) /* Startup code */\r\n    . = ALIGN(4);\r\n  } >ROM\r\n\r\n  /* The program code and other data into ROM memory */\r\n  .text :\r\n  {\r\n    . = ALIGN(4);\r\n    *(.text)           /* .text sections (code) */\r\n    *(.text*)          /* .text* sections (code) */\r\n    *(.glue_7)         /* glue arm to thumb code */\r\n    *(.glue_7t)        /* glue thumb to arm code */\r\n    *(.eh_frame)\r\n\r\n    KEEP (*(.init))\r\n    KEEP (*(.fini))\r\n\r\n    . = ALIGN(4);\r\n    _etext = .;        /* define a global symbols at end of code */\r\n  } >ROM\r\n\r\n  /* Constant data into ROM memory*/\r\n  .rodata :\r\n  {\r\n    . = ALIGN(4);\r\n    *(.rodata)         /* .rodata sections (constants, strings, etc.) */\r\n    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */\r\n    . = ALIGN(4);\r\n  } >ROM\r\n\r\n  .ARM.extab   : { \r\n  \t. = ALIGN(4);\r\n  \t*(.ARM.extab* .gnu.linkonce.armextab.*)\r\n  \t. = ALIGN(4);\r\n  } >ROM\r\n  \r\n  .ARM : {\r\n    . = ALIGN(4);\r\n    __exidx_start = .;\r\n    *(.ARM.exidx*)\r\n    __exidx_end = .;\r\n    . = ALIGN(4);\r\n  } >ROM\r\n\r\n  .preinit_array     :\r\n  {\r\n    . = ALIGN(4);\r\n    PROVIDE_HIDDEN (__preinit_array_start = .);\r\n    KEEP (*(.preinit_array*))\r\n    PROVIDE_HIDDEN (__preinit_array_end = .);\r\n    . = ALIGN(4);\r\n  } >ROM\r\n  \r\n  .init_array :\r\n  {\r\n    . = ALIGN(4);\r\n    PROVIDE_HIDDEN (__init_array_start = .);\r\n    KEEP (*(SORT(.init_array.*)))\r\n    KEEP (*(.init_array*))\r\n    PROVIDE_HIDDEN (__init_array_end = .);\r\n    . = ALIGN(4);\r\n  } >ROM\r\n  \r\n  .fini_array :\r\n  {\r\n    . = ALIGN(4);\r\n    PROVIDE_HIDDEN (__fini_array_start = .);\r\n    KEEP (*(SORT(.fini_array.*)))\r\n    KEEP (*(.fini_array*))\r\n    PROVIDE_HIDDEN (__fini_array_end = .);\r\n    . = ALIGN(4);\r\n  } >ROM\r\n\r\n  /* Used by the startup to initialize data */\r\n  _sidata = LOADADDR(.data);\r\n\r\n  /* Initialized data sections into RAM memory */\r\n  .data : \r\n  {\r\n    . = ALIGN(4);\r\n    _sdata = .;        /* create a global symbol at data start */\r\n    *(.data)           /* .data sections */\r\n    *(.data*)          /* .data* sections */\r\n\r\n    . = ALIGN(4);\r\n    _edata = .;        /* define a global symbol at data end */\r\n  } >RAM AT> ROM\r\n\r\n\r\n  .bss :\r\n  {\r\n    /* Uninitialized data section into RAM memory */\r\n    . = ALIGN(4);\r\n    /* This is used by the startup in order to initialize the .bss secion */\r\n    _sbss = .;         /* define a global symbol at bss start */\r\n    __bss_start__ = _sbss;\r\n    *(.bss)\r\n    *(.bss*)\r\n    *(COMMON)\r\n\r\n    . = ALIGN(4);\r\n    _ebss = .;         /* define a global symbol at bss end */\r\n    __bss_end__ = _ebss;\r\n  } >RAM\r\n\r\n  /* User_heap_stack section, used to check that there is enough RAM left */\r\n  ._user_heap_stack :\r\n  {\r\n    . = ALIGN(8);\r\n    PROVIDE ( end = . );\r\n    PROVIDE ( _end = . );\r\n    . = . + _Min_Heap_Size;\r\n    . = . + _Min_Stack_Size;\r\n    . = ALIGN(8);\r\n  } >RAM\r\n\r\n  \r\n\r\n  /* Remove information from the compiler libraries */\r\n  /DISCARD/ :\r\n  {\r\n    libc.a ( * )\r\n    libm.a ( * )\r\n    libgcc.a ( * )\r\n  }\r\n\r\n  .ARM.attributes 0 : { *(.ARM.attributes) }\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/stm32f1xx_hal_msp.c",
    "content": "#include \"Pins.h\"\r\n#include \"Setup.h\"\r\n#include \"stm32f1xx_hal.h\"\r\n#include \"string.h\"\r\n/**\r\n * Initializes the Global MSP.\r\n */\r\nvoid HAL_MspInit(void) {\r\n  __HAL_RCC_AFIO_CLK_ENABLE();\r\n\r\n  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);\r\n\r\n  /* System interrupt init*/\r\n  /* MemoryManagement_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(MemoryManagement_IRQn, 0, 0);\r\n  /* BusFault_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(BusFault_IRQn, 0, 0);\r\n  /* UsageFault_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(UsageFault_IRQn, 0, 0);\r\n  /* SVCall_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(SVCall_IRQn, 0, 0);\r\n  /* DebugMonitor_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(DebugMonitor_IRQn, 0, 0);\r\n  /* PendSV_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);\r\n  /* SysTick_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(SysTick_IRQn, 15, 0);\r\n}\r\n\r\nvoid HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) {\r\n\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  memset(&GPIO_InitStruct, 0, sizeof(GPIO_InitStruct));\r\n  if (hadc->Instance == ADC1) {\r\n    __HAL_RCC_ADC1_CLK_ENABLE();\r\n\r\n    /* ADC1 DMA Init */\r\n    /* ADC1 Init */\r\n    hdma_adc1.Instance                 = DMA1_Channel1;\r\n    hdma_adc1.Init.Direction           = DMA_PERIPH_TO_MEMORY;\r\n    hdma_adc1.Init.PeriphInc           = DMA_PINC_DISABLE;\r\n    hdma_adc1.Init.MemInc              = DMA_MINC_ENABLE;\r\n    hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;\r\n    hdma_adc1.Init.MemDataAlignment    = DMA_MDATAALIGN_WORD;\r\n    hdma_adc1.Init.Mode                = DMA_CIRCULAR;\r\n    hdma_adc1.Init.Priority            = DMA_PRIORITY_LOW;\r\n    HAL_DMA_Init(&hdma_adc1);\r\n\r\n    __HAL_LINKDMA(hadc, DMA_Handle, hdma_adc1);\r\n\r\n    /* ADC1 interrupt Init */\r\n    HAL_NVIC_SetPriority(ADC1_2_IRQn, 15, 0);\r\n    HAL_NVIC_EnableIRQ(ADC1_2_IRQn);\r\n  } else {\r\n    __HAL_RCC_ADC2_CLK_ENABLE();\r\n    GPIO_InitStruct.Pull = GPIO_NOPULL;\r\n\r\n    /**ADC2 GPIO Configuration\r\n     PB0     ------> ADC2_IN8\r\n     PB1     ------> ADC2_IN9\r\n     */\r\n    GPIO_InitStruct.Pin  = TIP_TEMP_Pin;\r\n    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;\r\n    HAL_GPIO_Init(TIP_TEMP_GPIO_Port, &GPIO_InitStruct);\r\n\r\n    GPIO_InitStruct.Pin  = TMP36_INPUT_Pin;\r\n    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;\r\n    HAL_GPIO_Init(TMP36_INPUT_GPIO_Port, &GPIO_InitStruct);\r\n\r\n    GPIO_InitStruct.Pin  = VIN_Pin;\r\n    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;\r\n    HAL_GPIO_Init(VIN_GPIO_Port, &GPIO_InitStruct);\r\n    GPIO_InitStruct.Pin  = PLATE_SENSOR_Pin;\r\n    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;\r\n    HAL_GPIO_Init(PLATE_SENSOR_GPIO_Port, &GPIO_InitStruct);\r\n\r\n    /* ADC2 interrupt Init */\r\n    HAL_NVIC_SetPriority(ADC1_2_IRQn, 15, 0);\r\n    HAL_NVIC_EnableIRQ(ADC1_2_IRQn);\r\n  }\r\n}\r\n\r\nvoid HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim_base) {\r\n\r\n  if (htim_base->Instance == TIM3) {\r\n    __HAL_RCC_TIM3_CLK_ENABLE();\r\n  } else if (htim_base->Instance == TIM2) {\r\n    __HAL_RCC_TIM2_CLK_ENABLE();\r\n  }\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/stm32f1xx_hal_timebase_TIM.c",
    "content": "/* USER CODE BEGIN Header */\r\n/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_timebase_TIM.c\r\n * @brief   HAL time base based on the hardware TIM.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n/* USER CODE END Header */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n#include \"stm32f1xx_hal_tim.h\"\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\nTIM_HandleTypeDef htim4;\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n\r\n/**\r\n * @brief  This function configures the TIM4 as a time base source.\r\n *         The time source is configured  to have 1ms time base with a dedicated\r\n *         Tick interrupt priority.\r\n * @note   This function is called  automatically at the beginning of program after\r\n *         reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig().\r\n * @param  TickPriority: Tick interrupt priority.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {\r\n  RCC_ClkInitTypeDef clkconfig;\r\n  uint32_t           uwTimclock       = 0;\r\n  uint32_t           uwPrescalerValue = 0;\r\n  uint32_t           pFLatency;\r\n  /*Configure the TIM4 IRQ priority */\r\n  HAL_NVIC_SetPriority(TIM4_IRQn, TickPriority, 0);\r\n\r\n  /* Enable the TIM4 global Interrupt */\r\n  HAL_NVIC_EnableIRQ(TIM4_IRQn);\r\n  /* Enable TIM4 clock */\r\n  __HAL_RCC_TIM4_CLK_ENABLE();\r\n\r\n  /* Get clock configuration */\r\n  HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);\r\n\r\n  /* Compute TIM4 clock */\r\n  uwTimclock = 2 * HAL_RCC_GetPCLK1Freq();\r\n  /* Compute the prescaler value to have TIM4 counter clock equal to 1MHz */\r\n  uwPrescalerValue = (uint32_t)((uwTimclock / 1000000U) - 1U);\r\n\r\n  /* Initialize TIM4 */\r\n  htim4.Instance = TIM4;\r\n\r\n  /* Initialize TIMx peripheral as follow:\r\n  + Period = [(TIM4CLK/1000) - 1]. to have a (1/1000) s time base.\r\n  + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.\r\n  + ClockDivision = 0\r\n  + Counter direction = Up\r\n  */\r\n  htim4.Init.Period        = (1000000U / 1000U) - 1U;\r\n  htim4.Init.Prescaler     = uwPrescalerValue;\r\n  htim4.Init.ClockDivision = 0;\r\n  htim4.Init.CounterMode   = TIM_COUNTERMODE_UP;\r\n  if (HAL_TIM_Base_Init(&htim4) == HAL_OK) {\r\n    /* Start the TIM time Base generation in interrupt mode */\r\n    return HAL_TIM_Base_Start_IT(&htim4);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_ERROR;\r\n}\r\n\r\n/**\r\n * @brief  Suspend Tick increment.\r\n * @note   Disable the tick increment by disabling TIM4 update interrupt.\r\n * @param  None\r\n * @retval None\r\n */\r\nvoid HAL_SuspendTick(void) {\r\n  /* Disable TIM4 update Interrupt */\r\n  __HAL_TIM_DISABLE_IT(&htim4, TIM_IT_UPDATE);\r\n}\r\n\r\n/**\r\n * @brief  Resume Tick increment.\r\n * @note   Enable the tick increment by Enabling TIM4 update interrupt.\r\n * @param  None\r\n * @retval None\r\n */\r\nvoid HAL_ResumeTick(void) {\r\n  /* Enable TIM4 Update interrupt */\r\n  __HAL_TIM_ENABLE_IT(&htim4, TIM_IT_UPDATE);\r\n}\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/stm32f1xx_it.c",
    "content": "// This is the stock standard STM interrupt file full of handlers\r\n#include \"stm32f1xx_it.h\"\r\n#include \"Pins.h\"\r\n#include \"Setup.h\"\r\n#include \"cmsis_os.h\"\r\n#include \"stm32f1xx.h\"\r\n#include \"stm32f1xx_hal.h\"\r\nextern TIM_HandleTypeDef htim4; // used for the systick\r\n\r\n/******************************************************************************/\r\n/*            Cortex-M3 Processor Interruption and Exception Handlers         */\r\n/******************************************************************************/\r\n\r\nvoid NMI_Handler(void) {}\r\n\r\n// We have the assembly for a breakpoint trigger here to halt the system when a debugger is connected\r\n// Hardfault handler, often a screwup in the code\r\nvoid HardFault_Handler(void) {}\r\n\r\n// Memory management unit had an error\r\nvoid MemManage_Handler(void) {}\r\n\r\n// Prefetcher or busfault occured\r\nvoid BusFault_Handler(void) {}\r\n\r\nvoid UsageFault_Handler(void) {}\r\n\r\nvoid DebugMon_Handler(void) {}\r\n\r\n// Systick is used by FreeRTOS tick\r\nvoid SysTick_Handler(void) { osSystickHandler(); }\r\n\r\n/******************************************************************************/\r\n/* STM32F1xx Peripheral Interrupt Handlers                                    */\r\n/* Add here the Interrupt Handlers for the used peripherals.                  */\r\n/* For the available peripheral interrupt handler names,                      */\r\n/* please refer to the startup file.\t\t\t\t\t                      */\r\n/******************************************************************************/\r\n\r\n// DMA used to move the ADC readings into system ram\r\nvoid DMA1_Channel1_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_adc1); }\r\n// ADC interrupt used for DMA\r\nvoid ADC1_2_IRQHandler(void) { HAL_ADC_IRQHandler(&hadc1); }\r\n\r\n// used for hal ticks\r\nvoid TIM4_IRQHandler(void) { HAL_TIM_IRQHandler(&htim4); }\r\n\r\nvoid EXTI9_5_IRQHandler(void) { HAL_GPIO_EXTI_IRQHandler(INT_PD_Pin); }\r\n"
  },
  {
    "path": "source/Core/BSP/MHP30/system_stm32f1xx.c",
    "content": "// This file was automatically generated by the STM Cube software\r\n// And as such, is BSD licneced from STM\r\n#include \"stm32f1xx.h\"\r\n\r\n#if !defined(HSI_VALUE)\r\n#define HSI_VALUE                                                                                                                                                                                      \\\r\n  8000000U /*!< Default value of the Internal oscillator in Hz.                                                                                                                                        \\\r\n                This value can be provided and adapted by the user application. */\r\n#endif     /* HSI_VALUE */\r\n\r\n/*!< Uncomment the following line if you need to use external SRAM  */\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/* #define DATA_IN_ExtSRAM */\r\n#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */\r\n\r\n/*******************************************************************************\r\n *  Clock Definitions\r\n *******************************************************************************/\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\nuint32_t SystemCoreClock = 24000000U; /*!< System Clock Frequency (Core Clock) */\r\n#else                                 /*!< HSI Selected as System Clock source */\r\nuint32_t SystemCoreClock = 64000000U; /*!< System Clock Frequency (Core Clock) */\r\n#endif\r\n\r\nconst uint8_t AHBPrescTable[16U] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};\r\nconst uint8_t APBPrescTable[8U]  = {0, 0, 0, 0, 1, 2, 3, 4};\r\n\r\n/**\r\n * @brief  Setup the microcontroller system\r\n *         Initialize the Embedded Flash Interface, the PLL and update the\r\n *         SystemCoreClock variable.\r\n * @note   This function should be used only after reset.\r\n * @param  None\r\n * @retval None\r\n */\r\nvoid SystemInit(void) {\r\n  /* Reset the RCC clock configuration to the default reset state(for debug purpose) */\r\n  /* Set HSION bit */\r\n  RCC->CR |= 0x00000001U;\r\n\r\n  /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */\r\n#if !defined(STM32F105xC) && !defined(STM32F107xC)\r\n  RCC->CFGR &= 0xF8FF0000U;\r\n#else\r\n  RCC->CFGR &= 0xF0FF0000U;\r\n#endif /* STM32F105xC */\r\n\r\n  /* Reset HSEON, CSSON and PLLON bits */\r\n  RCC->CR &= 0xFEF6FFFFU;\r\n\r\n  /* Reset HSEBYP bit */\r\n  RCC->CR &= 0xFFFBFFFFU;\r\n\r\n  /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */\r\n  RCC->CFGR &= 0xFF80FFFFU;\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  /* Reset PLL2ON and PLL3ON bits */\r\n  RCC->CR &= 0xEBFFFFFFU;\r\n\r\n  /* Disable all interrupts and clear pending bits  */\r\n  RCC->CIR = 0x00FF0000U;\r\n\r\n  /* Reset CFGR2 register */\r\n  RCC->CFGR2 = 0x00000000U;\r\n#elif defined(STM32F100xB) || defined(STM32F100xE)\r\n  /* Disable all interrupts and clear pending bits  */\r\n  RCC->CIR = 0x009F0000U;\r\n\r\n  /* Reset CFGR2 register */\r\n  RCC->CFGR2 = 0x00000000U;\r\n#else\r\n  /* Disable all interrupts and clear pending bits  */\r\n  RCC->CIR = 0x009F0000U;\r\n#endif /* STM32F105xC */\r\n\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#ifdef DATA_IN_ExtSRAM\r\n  SystemInit_ExtMemCtl();\r\n#endif /* DATA_IN_ExtSRAM */\r\n#endif\r\n\r\n#ifdef VECT_TAB_SRAM\r\n  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */\r\n#else\r\n  SCB->VTOR = FLASH_BASE | 0x8000; /* Vector Table Relocation in Internal FLASH. */\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief  Update SystemCoreClock variable according to Clock Register Values.\r\n *         The SystemCoreClock variable contains the core clock (HCLK), it can\r\n *         be used by the user application to setup the SysTick timer or configure\r\n *         other parameters.\r\n *\r\n * @note   Each time the core clock (HCLK) changes, this function must be called\r\n *         to update SystemCoreClock variable value. Otherwise, any configuration\r\n *         based on this variable will be incorrect.\r\n *\r\n * @note   - The system frequency computed by this function is not the real\r\n *           frequency in the chip. It is calculated based on the predefined\r\n *           constant and the selected clock source:\r\n *\r\n *           - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)\r\n *\r\n *           - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)\r\n *\r\n *           - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)\r\n *             or HSI_VALUE(*) multiplied by the PLL factors.\r\n *\r\n *         (*) HSI_VALUE is a constant defined in stm32f1xx.h file (default value\r\n *             8 MHz) but the real value may vary depending on the variations\r\n *             in voltage and temperature.\r\n *\r\n *         (**) HSE_VALUE is a constant defined in stm32f1xx.h file (default value\r\n *              8 MHz or 25 MHz, depending on the product used), user has to ensure\r\n *              that HSE_VALUE is same as the real frequency of the crystal used.\r\n *              Otherwise, this function may have wrong result.\r\n *\r\n *         - The result of this function could be not correct when using fractional\r\n *           value for HSE crystal.\r\n * @param  None\r\n * @retval None\r\n */\r\nvoid SystemCoreClockUpdate(void) {\r\n  uint32_t tmp = 0U, pllmull = 0U, pllsource = 0U;\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t prediv1source = 0U, prediv1factor = 0U, prediv2factor = 0U, pll2mull = 0U;\r\n#endif /* STM32F105xC */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n  uint32_t prediv1factor = 0U;\r\n#endif /* STM32F100xB or STM32F100xE */\r\n\r\n  /* Get SYSCLK source -------------------------------------------------------*/\r\n  tmp = RCC->CFGR & RCC_CFGR_SWS;\r\n\r\n  switch (tmp) {\r\n  case 0x00U: /* HSI used as system clock */\r\n    SystemCoreClock = HSI_VALUE;\r\n    break;\r\n  case 0x04U: /* HSE used as system clock */\r\n    SystemCoreClock = HSE_VALUE;\r\n    break;\r\n  case 0x08U: /* PLL used as system clock */\r\n\r\n    /* Get PLL clock source and multiplication factor ----------------------*/\r\n    pllmull   = RCC->CFGR & RCC_CFGR_PLLMULL;\r\n    pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;\r\n\r\n#if !defined(STM32F105xC) && !defined(STM32F107xC)\r\n    pllmull = (pllmull >> 18U) + 2U;\r\n\r\n    if (pllsource == 0x00U) {\r\n      /* HSI oscillator clock divided by 2 selected as PLL clock entry */\r\n      SystemCoreClock = (HSI_VALUE >> 1U) * pllmull;\r\n    } else {\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n      prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U;\r\n      /* HSE oscillator clock selected as PREDIV1 clock entry */\r\n      SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull;\r\n#else\r\n      /* HSE selected as PLL clock entry */\r\n      if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET) { /* HSE oscillator clock divided by 2 */\r\n        SystemCoreClock = (HSE_VALUE >> 1U) * pllmull;\r\n      } else {\r\n        SystemCoreClock = HSE_VALUE * pllmull;\r\n      }\r\n#endif\r\n    }\r\n#else\r\n    pllmull = pllmull >> 18U;\r\n\r\n    if (pllmull != 0x0DU) {\r\n      pllmull += 2U;\r\n    } else { /* PLL multiplication factor = PLL input clock * 6.5 */\r\n      pllmull = 13U / 2U;\r\n    }\r\n\r\n    if (pllsource == 0x00U) {\r\n      /* HSI oscillator clock divided by 2 selected as PLL clock entry */\r\n      SystemCoreClock = (HSI_VALUE >> 1U) * pllmull;\r\n    } else { /* PREDIV1 selected as PLL clock entry */\r\n\r\n      /* Get PREDIV1 clock source and division factor */\r\n      prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC;\r\n      prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U;\r\n\r\n      if (prediv1source == 0U) {\r\n        /* HSE oscillator clock selected as PREDIV1 clock entry */\r\n        SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull;\r\n      } else { /* PLL2 clock selected as PREDIV1 clock entry */\r\n\r\n        /* Get PREDIV2 division factor and PLL2 multiplication factor */\r\n        prediv2factor   = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4U) + 1U;\r\n        pll2mull        = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8U) + 2U;\r\n        SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull;\r\n      }\r\n    }\r\n#endif /* STM32F105xC */\r\n    break;\r\n\r\n  default:\r\n    SystemCoreClock = HSI_VALUE;\r\n    break;\r\n  }\r\n\r\n  /* Compute HCLK clock frequency ----------------*/\r\n  /* Get HCLK prescaler */\r\n  tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4U)];\r\n  /* HCLK clock frequency */\r\n  SystemCoreClock >>= tmp;\r\n}\r\n\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief  Setup the external memory controller. Called in startup_stm32f1xx.s\r\n *          before jump to __main\r\n * @param  None\r\n * @retval None\r\n */\r\n#ifdef DATA_IN_ExtSRAM\r\n/**\r\n * @brief  Setup the external memory controller.\r\n *         Called in startup_stm32f1xx_xx.s/.c before jump to main.\r\n *         This function configures the external SRAM mounted on STM3210E-EVAL\r\n *         board (STM32 High density devices). This SRAM will be used as program\r\n *         data memory (including heap and stack).\r\n * @param  None\r\n * @retval None\r\n */\r\nvoid SystemInit_ExtMemCtl(void) {\r\n  __IO uint32_t tmpreg;\r\n  /*!< FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is\r\n    required, then adjust the Register Addresses */\r\n\r\n  /* Enable FSMC clock */\r\n  RCC->AHBENR = 0x00000114U;\r\n\r\n  /* Delay after an RCC peripheral clock enabling */\r\n  tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN);\r\n\r\n  /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */\r\n  RCC->APB2ENR = 0x000001E0U;\r\n\r\n  /* Delay after an RCC peripheral clock enabling */\r\n  tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN);\r\n\r\n  (void)(tmpreg);\r\n\r\n  /* ---------------  SRAM Data lines, NOE and NWE configuration ---------------*/\r\n  /*----------------  SRAM Address lines configuration -------------------------*/\r\n  /*----------------  NOE and NWE configuration --------------------------------*/\r\n  /*----------------  NE3 configuration ----------------------------------------*/\r\n  /*----------------  NBL0, NBL1 configuration ---------------------------------*/\r\n\r\n  GPIOD->CRL = 0x44BB44BBU;\r\n  GPIOD->CRH = 0xBBBBBBBBU;\r\n\r\n  GPIOE->CRL = 0xB44444BBU;\r\n  GPIOE->CRH = 0xBBBBBBBBU;\r\n\r\n  GPIOF->CRL = 0x44BBBBBBU;\r\n  GPIOF->CRH = 0xBBBB4444U;\r\n\r\n  GPIOG->CRL = 0x44BBBBBBU;\r\n  GPIOG->CRH = 0x444B4B44U;\r\n\r\n  /*----------------  FSMC Configuration ---------------------------------------*/\r\n  /*----------------  Enable FSMC Bank1_SRAM Bank ------------------------------*/\r\n\r\n  FSMC_Bank1->BTCR[4U] = 0x00001091U;\r\n  FSMC_Bank1->BTCR[5U] = 0x00110212U;\r\n}\r\n#endif /* DATA_IN_ExtSRAM */\r\n#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/BSP.cpp",
    "content": "// BSP mapping functions\r\n\r\n#include \"BSP.h\"\r\n#include \"BootLogo.h\"\r\n#include \"I2C_Wrapper.hpp\"\r\n#include \"Pins.h\"\r\n#include \"Settings.h\"\r\n#include \"Setup.h\"\r\n#include \"TipThermoModel.h\"\r\n#include \"USBPD.h\"\r\n#include \"configuration.h\"\r\n#include \"history.hpp\"\r\n#include \"main.hpp\"\r\n#include <IRQ.h>\r\n\r\nvolatile uint16_t PWMSafetyTimer = 0;\r\nvolatile uint8_t  pendingPWM     = 0;\r\n\r\nconst uint16_t       powerPWM         = 255;\r\nstatic const uint8_t holdoffTicks     = 14; // delay of 8 ms\r\nstatic const uint8_t tempMeasureTicks = 14;\r\n\r\nuint16_t totalPWM; // htimADC.Init.Period, the full PWM cycle\r\n\r\nstatic bool fastPWM;\r\nstatic bool infastPWM;\r\n\r\nvoid resetWatchdog() { HAL_IWDG_Refresh(&hiwdg); }\r\n#ifdef TEMP_NTC\r\n// Lookup table for the NTC\r\n// Stored as ADCReading,Temp in degC\r\nstatic const uint16_t NTCHandleLookup[] = {\r\n    // ADC Reading , Temp in C\r\n    29189, 0,  //\r\n    28832, 2,  //\r\n    28450, 4,  //\r\n    28042, 6,  //\r\n    27607, 8,  //\r\n    27146, 10, //\r\n    26660, 12, //\r\n    26147, 14, //\r\n    25610, 16, //\r\n    25049, 18, //\r\n    24465, 20, //\r\n    23859, 22, //\r\n    23234, 24, //\r\n    22591, 26, //\r\n    21933, 28, //\r\n    21261, 30, //\r\n    20579, 32, //\r\n    19888, 34, //\r\n    19192, 36, //\r\n    18493, 38, //\r\n    17793, 40, //\r\n    17096, 42, //\r\n    16404, 44, //\r\n    16061, 45, //\r\n};\r\n#endif\r\n\r\nuint16_t getHandleTemperature(uint8_t sample) {\r\n  int32_t result = getADCHandleTemp(sample);\r\n#ifdef TEMP_NTC\r\n  // TS80P uses 100k NTC resistors instead\r\n  // NTCG104EF104FT1X from TDK\r\n  // For now not doing interpolation\r\n  for (uint32_t i = 0; i < (sizeof(NTCHandleLookup) / (2 * sizeof(uint16_t))); i++) {\r\n    if (result > NTCHandleLookup[(i * 2) + 0]) {\r\n      return NTCHandleLookup[(i * 2) + 1] * 10;\r\n    }\r\n  }\r\n  return 45 * 10;\r\n#endif\r\n#ifdef TEMP_TMP36\r\n  // We return the current handle temperature in X10 C\r\n  // TMP36 in handle, 0.5V offset and then 10mV per deg C (0.75V @ 25C for\r\n  // example) STM32 = 4096 count @ 3.3V input -> But We oversample by 32/(2^2) =\r\n  // 8 times oversampling Therefore 32768 is the 3.3V input, so 0.1007080078125\r\n  // mV per count So we need to subtract an offset of 0.5V to center on 0C\r\n  // (4964.8 counts)\r\n  //\r\n  result -= 4965; // remove 0.5V offset\r\n  // 10mV per C\r\n  // 99.29 counts per Deg C above 0C. Tends to read a tad over across all of my sample units\r\n  result *= 100;\r\n  result /= 994;\r\n  return result;\r\n#endif\r\n  return 0;\r\n}\r\n\r\nuint16_t getInputVoltageX10(uint16_t divisor, uint8_t sample) {\r\n  // ADC maximum is 32767 == 3.3V at input == 28.05V at VIN\r\n  // Therefore we can divide down from there\r\n  // Multiplying ADC max by 4 for additional calibration options,\r\n  // ideal term is 467\r\n  uint32_t res = getADCVin(sample);\r\n  res *= 4;\r\n  res /= divisor;\r\n  return res;\r\n}\r\n\r\nstatic void switchToFastPWM(void) {\r\n  // 10Hz\r\n  infastPWM              = true;\r\n  totalPWM               = powerPWM + tempMeasureTicks + holdoffTicks;\r\n  htimADC.Instance->ARR  = totalPWM;\r\n  htimADC.Instance->CCR1 = powerPWM + holdoffTicks;\r\n  htimADC.Instance->PSC  = 2690;\r\n}\r\n\r\nstatic void switchToSlowPWM(void) {\r\n  // 5Hz\r\n  infastPWM              = false;\r\n  totalPWM               = powerPWM + tempMeasureTicks / 2 + holdoffTicks / 2;\r\n  htimADC.Instance->ARR  = totalPWM;\r\n  htimADC.Instance->CCR1 = powerPWM + holdoffTicks / 2;\r\n  htimADC.Instance->PSC  = 2690 * 2;\r\n}\r\n\r\nvoid setTipPWM(const uint8_t pulse, const bool shouldUseFastModePWM) {\r\n  PWMSafetyTimer = 20; // This is decremented in the handler for PWM so that the tip pwm is\r\n                       // disabled if the PID task is not scheduled often enough.\r\n  fastPWM    = shouldUseFastModePWM;\r\n  pendingPWM = pulse;\r\n}\r\n// These are called by the HAL after the corresponding events from the system\r\n// timers.\r\n\r\nvoid HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {\r\n  // Period has elapsed\r\n  if (htim->Instance == ADC_CONTROL_TIMER) {\r\n    // we want to turn on the output again\r\n    PWMSafetyTimer--;\r\n// We decrement this safety value so that lockups in the\r\n// scheduler will not cause the PWM to become locked in an\r\n// active driving state.\r\n// While we could assume this could never happen, its a small price for\r\n// increased safety\r\n#ifdef TIP_HAS_DIRECT_PWM\r\n    htimADC.Instance->CCR4 = powerPWM;\r\n    if (pendingPWM && PWMSafetyTimer) {\r\n      htimTip.Instance->CCR1 = pendingPWM;\r\n      HAL_TIM_PWM_Start(&htimTip, PWM_Out_CHANNEL);\r\n    } else {\r\n      HAL_TIM_PWM_Stop(&htimTip, PWM_Out_CHANNEL);\r\n    }\r\n#else\r\n    htimADC.Instance->CCR4 = pendingPWM;\r\n    if (htimADC.Instance->CCR4 && PWMSafetyTimer) {\r\n      HAL_TIM_PWM_Start(&htimTip, PWM_Out_CHANNEL);\r\n    } else {\r\n      HAL_TIM_PWM_Stop(&htimTip, PWM_Out_CHANNEL);\r\n    }\r\n#endif\r\n    if (fastPWM != infastPWM) {\r\n      if (fastPWM) {\r\n        switchToFastPWM();\r\n      } else {\r\n        switchToSlowPWM();\r\n      }\r\n    }\r\n\r\n  } else if (htim->Instance == TIM1) {\r\n    // STM uses this for internal functions as a counter for timeouts\r\n    HAL_IncTick();\r\n  }\r\n}\r\n\r\nvoid HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) {\r\n  // This was a when the PWM for the output has timed out\r\n  if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_4) {\r\n    HAL_TIM_PWM_Stop(&htimTip, PWM_Out_CHANNEL);\r\n  }\r\n}\r\nvoid unstick_I2C() {\r\n#ifndef I2C_SOFT_BUS_1\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  int              timeout     = 100;\r\n  int              timeout_cnt = 0;\r\n\r\n  // 1. Clear PE bit.\r\n  hi2c1.Instance->CR1 &= ~(0x0001);\r\n  /**I2C1 GPIO Configuration\r\n   PB6     ------> I2C1_SCL\r\n   PB7     ------> I2C1_SDA\r\n   */\r\n  //  2. Configure the SCL and SDA I/Os as General Purpose Output Open-Drain, High level (Write 1 to GPIOx_ODR).\r\n  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_OD;\r\n  GPIO_InitStruct.Pull  = GPIO_PULLUP;\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;\r\n\r\n  GPIO_InitStruct.Pin = SCL_Pin;\r\n  HAL_GPIO_Init(SCL_GPIO_Port, &GPIO_InitStruct);\r\n  HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_SET);\r\n\r\n  GPIO_InitStruct.Pin = SDA_Pin;\r\n  HAL_GPIO_Init(SDA_GPIO_Port, &GPIO_InitStruct);\r\n  HAL_GPIO_WritePin(SDA_GPIO_Port, SDA_Pin, GPIO_PIN_SET);\r\n\r\n  while (GPIO_PIN_SET != HAL_GPIO_ReadPin(SDA_GPIO_Port, SDA_Pin)) {\r\n    // Move clock to release I2C\r\n    HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_RESET);\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_SET);\r\n\r\n    timeout_cnt++;\r\n    if (timeout_cnt > timeout) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  // 12. Configure the SCL and SDA I/Os as Alternate function Open-Drain.\r\n  GPIO_InitStruct.Mode  = GPIO_MODE_AF_OD;\r\n  GPIO_InitStruct.Pull  = GPIO_PULLUP;\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;\r\n\r\n  GPIO_InitStruct.Pin = SCL_Pin;\r\n  HAL_GPIO_Init(SCL_GPIO_Port, &GPIO_InitStruct);\r\n\r\n  GPIO_InitStruct.Pin = SDA_Pin;\r\n  HAL_GPIO_Init(SDA_GPIO_Port, &GPIO_InitStruct);\r\n\r\n  HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_SET);\r\n  HAL_GPIO_WritePin(SDA_GPIO_Port, SDA_Pin, GPIO_PIN_SET);\r\n\r\n  // 13. Set SWRST bit in I2Cx_CR1 register.\r\n  hi2c1.Instance->CR1 |= 0x8000;\r\n\r\n  asm(\"nop\");\r\n\r\n  // 14. Clear SWRST bit in I2Cx_CR1 register.\r\n  hi2c1.Instance->CR1 &= ~0x8000;\r\n\r\n  asm(\"nop\");\r\n\r\n  // 15. Enable the I2C peripheral by setting the PE bit in I2Cx_CR1 register\r\n  hi2c1.Instance->CR1 |= 0x0001;\r\n\r\n  // Call initialization function.\r\n  HAL_I2C_Init(&hi2c1);\r\n#endif\r\n}\r\n\r\nuint8_t getButtonA() { return HAL_GPIO_ReadPin(KEY_A_GPIO_Port, KEY_A_Pin) == GPIO_PIN_RESET ? 1 : 0; }\r\nuint8_t getButtonB() { return HAL_GPIO_ReadPin(KEY_B_GPIO_Port, KEY_B_Pin) == GPIO_PIN_RESET ? 1 : 0; }\r\n\r\nvoid BSPInit(void) { switchToFastPWM(); }\r\n\r\nvoid reboot() { NVIC_SystemReset(); }\r\n\r\nvoid delay_ms(uint16_t count) { HAL_Delay(count); }\r\n\r\nuint8_t       lastTipResistance        = 0; // default to unknown\r\nconst uint8_t numTipResistanceReadings = 3;\r\nuint32_t      tipResistanceReadings[3] = {0, 0, 0};\r\nuint8_t       tipResistanceReadingSlot = 0;\r\nbool          isTipDisconnected() {\r\n\r\n  uint16_t tipDisconnectedThres = TipThermoModel::getTipMaxInC() - 5;\r\n  uint32_t tipTemp              = TipThermoModel::getTipInC();\r\n  return tipTemp > tipDisconnectedThres;\r\n}\r\n\r\nvoid setStatusLED(const enum StatusLED state) {}\r\nvoid setBuzzer(bool on) {}\r\n#ifdef TIP_RESISTANCE_SENSE_Pin\r\n// We want to calculate lastTipResistance\r\n// If tip is connected, and the tip is cold and the tip is not being heated\r\n// We can use the GPIO to inject a small current into the tip and measure this\r\n// The gpio is 100k -> diode -> tip -> gnd\r\n// Source is 3.3V-0.5V\r\n// Which is around 0.028mA this will induce:\r\n// 6 ohm tip -> 3.24mV (Real world ~= 3320)\r\n// 8 ohm tip -> 4.32mV (Real world ~= 4500)\r\n// Which is definitely measureable\r\n// Taking shortcuts here as we know we only really have to pick apart 6 and 8 ohm tips\r\n// These are reported as 60 and 75 respectively\r\nvoid performTipResistanceSampleReading() {\r\n  // 0 = read then turn on pullup, 1 = read then turn off pullup, 2 = read again\r\n  tipResistanceReadings[tipResistanceReadingSlot] = TipThermoModel::convertTipRawADCTouV(getTipRawTemp(1));\r\n\r\n  HAL_GPIO_WritePin(TIP_RESISTANCE_SENSE_GPIO_Port, TIP_RESISTANCE_SENSE_Pin, (tipResistanceReadingSlot == 0) ? GPIO_PIN_SET : GPIO_PIN_RESET);\r\n\r\n  tipResistanceReadingSlot++;\r\n}\r\nbool tipShorted = false;\r\nvoid FinishMeasureTipResistance() {\r\n\r\n  // Otherwise we now have the 4 samples;\r\n  //  _^_ order, 2 delta's, combine these\r\n\r\n  int32_t calculatedSkew = tipResistanceReadings[0] - tipResistanceReadings[2]; // If positive tip is cooling\r\n  calculatedSkew /= 2;                                                          // divide by two to get offset per time constant\r\n\r\n  int32_t reading = (((tipResistanceReadings[1] - tipResistanceReadings[0]) + calculatedSkew) // jump 1 - skew\r\n                     +                                                                        // +\r\n                     ((tipResistanceReadings[1] - tipResistanceReadings[2]) + calculatedSkew) // jump 2 - skew\r\n                     )                                                                        //\r\n                    / 2;                                                                      // Take average\r\n  // // As we are only detecting two resistances; we can split the difference for now\r\n  uint8_t newRes = 0;\r\n  if (reading > 1200) {\r\n    // return; // Change nothing as probably disconnected tip\r\n    tipResistanceReadingSlot = lastTipResistance = 0;\r\n    return;\r\n  } else if (reading < 200) {\r\n    tipShorted = true;\r\n  } else if (reading < 520) {\r\n    newRes = 40;\r\n  } else if (reading < 800) {\r\n    newRes = 62;\r\n  } else {\r\n    newRes = 80;\r\n  }\r\n  lastTipResistance = newRes;\r\n}\r\nvolatile bool       tipMeasurementOccuring = true;\r\nvolatile TickType_t nextTipMeasurement     = 100;\r\n\r\nvoid performTipMeasurementStep() {\r\n\r\n  // Wait 200ms for settle time\r\n  if (xTaskGetTickCount() < (nextTipMeasurement)) {\r\n    return;\r\n  }\r\n  nextTipMeasurement = xTaskGetTickCount() + (TICKS_100MS * 5);\r\n  if (tipResistanceReadingSlot < numTipResistanceReadings) {\r\n    performTipResistanceSampleReading();\r\n    return;\r\n  }\r\n\r\n  // We are sensing the resistance\r\n  FinishMeasureTipResistance();\r\n\r\n  tipMeasurementOccuring = false;\r\n}\r\n#endif\r\nuint8_t preStartChecks() {\r\n#ifdef TIP_RESISTANCE_SENSE_Pin\r\n  performTipMeasurementStep();\r\n  if (preStartChecksDone() != 1) {\r\n    return 0;\r\n  }\r\n#endif\r\n#ifdef HAS_SPLIT_POWER_PATH\r\n\r\n  // We want to enable the power path that has the highest voltage\r\n  // Nominally one will be ~=0 and one will be high. Unless you jamb both in, then both _may_ be high, or device may be dead\r\n  {\r\n    uint16_t dc = getRawDCVin();\r\n    uint16_t pd = getRawPDVin();\r\n    if (dc > pd) {\r\n      HAL_GPIO_WritePin(DC_SELECT_GPIO_Port, DC_SELECT_Pin, GPIO_PIN_SET);\r\n      HAL_GPIO_WritePin(PD_SELECT_GPIO_Port, PD_SELECT_Pin, GPIO_PIN_RESET);\r\n    } else {\r\n      HAL_GPIO_WritePin(PD_SELECT_GPIO_Port, PD_SELECT_Pin, GPIO_PIN_SET);\r\n      HAL_GPIO_WritePin(DC_SELECT_GPIO_Port, DC_SELECT_Pin, GPIO_PIN_RESET);\r\n    }\r\n  }\r\n\r\n#endif\r\n\r\n  return 1;\r\n}\r\nuint64_t getDeviceID() {\r\n  //\r\n  return HAL_GetUIDw0() | ((uint64_t)HAL_GetUIDw1() << 32);\r\n}\r\n\r\nuint8_t preStartChecksDone() {\r\n#ifdef TIP_RESISTANCE_SENSE_Pin\r\n  return (lastTipResistance == 0 || tipResistanceReadingSlot < numTipResistanceReadings || tipMeasurementOccuring || tipShorted) ? 0 : 1;\r\n#else\r\n  return 1;\r\n#endif\r\n}\r\n\r\nuint8_t getTipResistanceX10() {\r\n#ifdef TIP_RESISTANCE_SENSE_Pin\r\n  // Return tip resistance in x10 ohms\r\n  // We can measure this using the op-amp\r\n  uint8_t user_selected_tip = getUserSelectedTipResistance();\r\n  if (user_selected_tip == 0) {\r\n    return lastTipResistance; // Auto mode\r\n  }\r\n  return user_selected_tip;\r\n\r\n#else\r\n  uint8_t user_selected_tip = getUserSelectedTipResistance();\r\n  if (user_selected_tip == 0) {\r\n    return TIP_RESISTANCE; // Auto mode\r\n  }\r\n  return user_selected_tip;\r\n#endif\r\n}\r\n#ifdef TIP_RESISTANCE_SENSE_Pin\r\nbool isTipShorted() { return tipShorted; }\r\n#else\r\nbool isTipShorted() { return false; }\r\n#endif\r\nuint16_t getTipThermalMass() {\r\n#ifdef TIP_RESISTANCE_SENSE_Pin\r\n  if (lastTipResistance >= 80) {\r\n    return TIP_THERMAL_MASS;\r\n  }\r\n  return 45;\r\n#else\r\n  return TIP_THERMAL_MASS;\r\n#endif\r\n}\r\nuint16_t getTipInertia() {\r\n#ifdef TIP_RESISTANCE_SENSE_Pin\r\n  if (lastTipResistance >= 80) {\r\n    return TIP_THERMAL_MASS;\r\n  }\r\n  return 10;\r\n#else\r\n  return TIP_THERMAL_MASS;\r\n#endif\r\n}\r\n\r\nvoid showBootLogo(void) { BootLogo::handleShowingLogo((uint8_t *)FLASH_LOGOADDR); }\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/FreeRTOSConfig.h",
    "content": "/*\r\n FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd.\r\n All rights reserved\r\n\r\n VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r\n\r\n This file is part of the FreeRTOS distribution.\r\n\r\n FreeRTOS is free software; you can redistribute it and/or modify it under\r\n the terms of the GNU General Public License (version 2) as published by the\r\n Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r\n\r\n ***************************************************************************\r\n >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r\n >>!   distribute a combined work that includes FreeRTOS without being   !<<\r\n >>!   obliged to provide the source code for proprietary components     !<<\r\n >>!   outside of the FreeRTOS kernel.                                   !<<\r\n ***************************************************************************\r\n\r\n FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r\n FOR A PARTICULAR PURPOSE.  Full license text is available on the following\r\n link: http://www.freertos.org/a00114.html\r\n\r\n ***************************************************************************\r\n *                                                                       *\r\n *    FreeRTOS provides completely free yet professionally developed,    *\r\n *    robust, strictly quality controlled, supported, and cross          *\r\n *    platform software that is more than just the market leader, it     *\r\n *    is the industry's de facto standard.                               *\r\n *                                                                       *\r\n *    Help yourself get started quickly while simultaneously helping     *\r\n *    to support the FreeRTOS project by purchasing a FreeRTOS           *\r\n *    tutorial book, reference manual, or both:                          *\r\n *    http://www.FreeRTOS.org/Documentation                              *\r\n *                                                                       *\r\n ***************************************************************************\r\n\r\n http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading\r\n the FAQ page \"My application does not run, what could be wrong?\".  Have you\r\n defined configASSERT()?\r\n\r\n http://www.FreeRTOS.org/support - In return for receiving this top quality\r\n embedded software for free we request you assist our global community by\r\n participating in the support forum.\r\n\r\n http://www.FreeRTOS.org/training - Investing in training allows your team to\r\n be as productive as possible as early as possible.  Now you can receive\r\n FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r\n Ltd, and the world's leading authority on the world's leading RTOS.\r\n\r\n http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r\n including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r\n compatible FAT file system, and our tiny thread aware UDP/IP stack.\r\n\r\n http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r\n Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r\n\r\n http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r\n Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r\n licenses offer ticketed support, indemnification and commercial middleware.\r\n\r\n http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r\n engineered and independently SIL3 certified version for use in safety and\r\n mission critical applications that require provable dependability.\r\n\r\n 1 tab == 4 spaces!\r\n */\r\n\r\n#ifndef FREERTOS_CONFIG_H\r\n#define FREERTOS_CONFIG_H\r\n\r\n/*-----------------------------------------------------------\r\n * Application specific definitions.\r\n *\r\n * These definitions should be adjusted for your particular hardware and\r\n * application requirements.\r\n *\r\n * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r\n * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r\n *\r\n * See http://www.freertos.org/a00110.html.\r\n *----------------------------------------------------------*/\r\n\r\n/* USER CODE BEGIN Includes */\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n/* USER CODE END Includes */\r\n\r\n/* Ensure stdint is only used by the compiler, and not the assembler. */\r\n#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)\r\n#include <stdint.h>\r\nextern uint32_t SystemCoreClock;\r\n#endif\r\n\r\n#define configUSE_PREEMPTION                    1\r\n#define configSUPPORT_STATIC_ALLOCATION         1\r\n#define configSUPPORT_DYNAMIC_ALLOCATION        0\r\n#define configUSE_IDLE_HOOK                     1\r\n#define configUSE_TICK_HOOK                     0\r\n#define configCPU_CLOCK_HZ                      (SystemCoreClock)\r\n#define configTICK_RATE_HZ                      (1000)\r\n#define configMAX_PRIORITIES                    (7)\r\n#define configMINIMAL_STACK_SIZE                ((uint16_t)256)\r\n#define configTOTAL_HEAP_SIZE                   ((size_t)1024 * 14) /*Currently use about 9000*/\r\n#define configMAX_TASK_NAME_LEN                 (32)\r\n#define configUSE_MUTEXES                       1\r\n#define configQUEUE_REGISTRY_SIZE               8\r\n#define configUSE_TIMERS                        0\r\n#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1\r\n#define configCHECK_FOR_STACK_OVERFLOW          2 /*Bump this to 2 during development and bug hunting*/\r\n#define configTICK_TYPE_WIDTH_IN_BITS           TICK_TYPE_WIDTH_32_BITS\r\n\r\n/* Co-routine definitions. */\r\n#define configUSE_CO_ROUTINES           0\r\n#define configMAX_CO_ROUTINE_PRIORITIES (2)\r\n\r\n/* Set the following definitions to 1 to include the API function, or zero\r\n to exclude the API function. */\r\n#define INCLUDE_vTaskPrioritySet            1\r\n#define INCLUDE_uxTaskPriorityGet           0\r\n#define INCLUDE_vTaskDelete                 0\r\n#define INCLUDE_vTaskCleanUpResources       0\r\n#define INCLUDE_vTaskSuspend                0\r\n#define INCLUDE_vTaskDelayUntil             1\r\n#define INCLUDE_vTaskDelay                  1\r\n#define INCLUDE_xTaskGetSchedulerState      1\r\n#define INCLUDE_uxTaskGetStackHighWaterMark 1\r\n\r\n/* Cortex-M specific definitions. */\r\n#ifdef __NVIC_PRIO_BITS\r\n/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */\r\n#define configPRIO_BITS __NVIC_PRIO_BITS\r\n#else\r\n#define configPRIO_BITS 4\r\n#endif\r\n\r\n/* The lowest interrupt priority that can be used in a call to a \"set priority\"\r\n function. */\r\n#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15\r\n\r\n/* The highest interrupt priority that can be used by any interrupt service\r\n routine that makes calls to interrupt safe FreeRTOS API functions.  DO NOT CALL\r\n INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER\r\n PRIORITY THAN THIS! (higher priorities are lower numeric values. */\r\n#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5\r\n\r\n/* Interrupt priorities used by the kernel port layer itself.  These are generic\r\n to all Cortex-M ports, and do not rely on any particular library functions. */\r\n#define configKERNEL_INTERRUPT_PRIORITY (configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))\r\n/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!\r\n See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */\r\n#define configMAX_SYSCALL_INTERRUPT_PRIORITY (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))\r\n\r\n/* Normal assert() semantics without relying on the provision of an assert.h\r\n header file. */\r\n/* USER CODE BEGIN 1 */\r\n#define configASSERT(x)                                                                                                                                                                                \\\r\n  if ((x) == 0) {                                                                                                                                                                                      \\\r\n    taskDISABLE_INTERRUPTS();                                                                                                                                                                          \\\r\n    for (;;)                                                                                                                                                                                           \\\r\n      ;                                                                                                                                                                                                \\\r\n  }\r\n/* USER CODE END 1 */\r\n\r\n/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS\r\n standard names. */\r\n#define vPortSVCHandler    SVC_Handler\r\n#define xPortPendSVHandler PendSV_Handler\r\n\r\n#if configUSE_TIMERS\r\n#define configTIMER_TASK_PRIORITY    2\r\n#define configTIMER_QUEUE_LENGTH     8\r\n#define configTIMER_TASK_STACK_DEPTH (512 / 4)\r\n#endif\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n#endif /* FREERTOS_CONFIG_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/IRQ.cpp",
    "content": "/*\r\n * IRQ.c\r\n *\r\n *  Created on: 30 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"IRQ.h\"\r\n#include \"Pins.h\"\r\n#include \"configuration.h\"\r\n\r\n/*\r\n * Catch the IRQ that says that the conversion is done on the temperature\r\n * readings coming in Once these have come in we can unblock the PID so that it\r\n * runs again\r\n */\r\nvoid HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc) {\r\n  BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r\n  if (hadc == &hadc1) {\r\n    if (pidTaskNotification) {\r\n      vTaskNotifyGiveFromISR(pidTaskNotification, &xHigherPriorityTaskWoken);\r\n      portYIELD_FROM_ISR(xHigherPriorityTaskWoken);\r\n    }\r\n  }\r\n}\r\n\r\nextern osThreadId POWTaskHandle;\r\n\r\nvoid HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {\r\n  (void)GPIO_Pin;\r\n  // Notify POW thread that an irq occured\r\n  if (POWTaskHandle != nullptr) {\r\n    BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r\n    xTaskNotifyFromISR(POWTaskHandle, 1, eSetBits, &xHigherPriorityTaskWoken);\r\n    /* Force a context switch if xHigherPriorityTaskWoken is now set to pdTRUE.\r\n    The macro used to do this is dependent on the port and may be called\r\n    portEND_SWITCHING_ISR. */\r\n    portYIELD_FROM_ISR(xHigherPriorityTaskWoken);\r\n  }\r\n}\r\n\r\nbool getFUS302IRQLow() {\r\n#ifdef POW_PD\r\n  // Return true if the IRQ line is still held low\r\n  return HAL_GPIO_ReadPin(INT_PD_GPIO_Port, INT_PD_Pin) == GPIO_PIN_RESET;\r\n#else\r\n  return false;\r\n#endif\r\n}"
  },
  {
    "path": "source/Core/BSP/Miniware/IRQ.h",
    "content": "/*\r\n * Irqs.h\r\n *\r\n *  Created on: 30 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_MINIWARE_IRQ_H_\r\n#define BSP_MINIWARE_IRQ_H_\r\n\r\n#include \"BSP.h\"\r\n#include \"I2C_Wrapper.hpp\"\r\n#include \"Setup.h\"\r\n#include \"main.hpp\"\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\nvoid HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc);\r\nvoid HAL_GPIO_EXTI_Callback(uint16_t);\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n#endif /* BSP_MINIWARE_IRQ_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Pins.h",
    "content": "/*\r\n * Pins.h\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_MINIWARE_PINS_H_\r\n#define BSP_MINIWARE_PINS_H_\r\n#include \"configuration.h\"\r\n\r\n#ifdef MODEL_TS100\r\n\r\n#define KEY_B_Pin                 GPIO_PIN_6\r\n#define KEY_B_GPIO_Port           GPIOA\r\n#define TMP36_INPUT_Pin           GPIO_PIN_7\r\n#define TMP36_INPUT_GPIO_Port     GPIOA\r\n#define TMP36_ADC1_CHANNEL        ADC_CHANNEL_7\r\n#define TMP36_ADC2_CHANNEL        ADC_CHANNEL_7\r\n#define TIP_TEMP_Pin              GPIO_PIN_0\r\n#define TIP_TEMP_GPIO_Port        GPIOB\r\n#define TIP_TEMP_ADC1_CHANNEL     ADC_CHANNEL_8\r\n#define TIP_TEMP_ADC2_CHANNEL     ADC_CHANNEL_8\r\n#define VIN_Pin                   GPIO_PIN_1\r\n#define VIN_GPIO_Port             GPIOB\r\n#define VIN_ADC1_CHANNEL          ADC_CHANNEL_9\r\n#define VIN_ADC2_CHANNEL          ADC_CHANNEL_9\r\n#define OLED_RESET_Pin            GPIO_PIN_8\r\n#define OLED_RESET_GPIO_Port      GPIOA\r\n#define KEY_A_Pin                 GPIO_PIN_9\r\n#define KEY_A_GPIO_Port           GPIOA\r\n#define INT_Orientation_Pin       GPIO_PIN_3\r\n#define INT_Orientation_GPIO_Port GPIOB\r\n#define PWM_Out_Pin               GPIO_PIN_4\r\n#define PWM_Out_GPIO_Port         GPIOB\r\n#define PWM_Out_CHANNEL           TIM_CHANNEL_1\r\n#define TIP_CONTROL_TIMER         TIM3\r\n#define ADC_CONTROL_TIMER         TIM2\r\n#define ADC_CONTROL_TIMER_IRQ     TIM2_IRQn\r\n#define ADC_TRIGGER               ADC_EXTERNALTRIGINJECCONV_T2_TRGO\r\n#define INT_Movement_Pin          GPIO_PIN_5\r\n#define INT_Movement_GPIO_Port    GPIOB\r\n#define SCL_Pin                   GPIO_PIN_6\r\n#define SCL_GPIO_Port             GPIOB\r\n#define SDA_Pin                   GPIO_PIN_7\r\n#define SDA_GPIO_Port             GPIOB\r\n#endif\r\n\r\n#ifdef MODEL_TS101\r\n\r\n#define KEY_B_Pin             GPIO_PIN_10\r\n#define KEY_B_GPIO_Port       GPIOA\r\n#define TMP36_INPUT_Pin       GPIO_PIN_4\r\n#define TMP36_INPUT_GPIO_Port GPIOA\r\n#define TMP36_ADC1_CHANNEL    ADC_CHANNEL_4\r\n#define TMP36_ADC2_CHANNEL    ADC_CHANNEL_4\r\n#define TIP_TEMP_Pin          GPIO_PIN_3\r\n#define TIP_TEMP_GPIO_Port    GPIOA\r\n#define TIP_TEMP_ADC1_CHANNEL ADC_CHANNEL_3\r\n#define TIP_TEMP_ADC2_CHANNEL ADC_CHANNEL_3\r\n#define VIN_Pin               GPIO_PIN_2\r\n#define VIN_GPIO_Port         GPIOA\r\n#define VIN_ADC1_CHANNEL      ADC_CHANNEL_2\r\n#define VIN_ADC2_CHANNEL      ADC_CHANNEL_2\r\n#define PD_VIN_Pin            GPIO_PIN_6\r\n#define PD_VIN_GPIO_Port      GPIOA\r\n#define PD_VIN_ADC1_CHANNEL   ADC_CHANNEL_6\r\n#define PD_VIN_ADC2_CHANNEL   ADC_CHANNEL_6\r\n#define OLED_RESET_Pin        GPIO_PIN_7\r\n#define OLED_RESET_GPIO_Port  GPIOA\r\n#define KEY_A_Pin             GPIO_PIN_8\r\n#define KEY_A_GPIO_Port       GPIOA\r\n#define PWM_Out_Pin           GPIO_PIN_0\r\n#define PWM_Out_GPIO_Port     GPIOA\r\n#define PWM_Out_CHANNEL       TIM_CHANNEL_1\r\n#define TIP_CONTROL_TIMER     TIM2\r\n#define ADC_CONTROL_TIMER     TIM4\r\n#define ADC_CONTROL_TIMER_IRQ TIM4_IRQn\r\n#define ADC_TRIGGER           ADC_EXTERNALTRIGINJECCONV_T4_TRGO\r\n#define SCL_Pin               GPIO_PIN_0\r\n#define SCL_GPIO_Port         GPIOB\r\n#define SDA_Pin               GPIO_PIN_1\r\n#define SDA_GPIO_Port         GPIOB\r\n// PD controller\r\n#define SCL2_Pin         GPIO_PIN_6\r\n#define SCL2_GPIO_Port   GPIOB\r\n#define SDA2_Pin         GPIO_PIN_5\r\n#define SDA2_GPIO_Port   GPIOB\r\n#define INT_PD_Pin       GPIO_PIN_7\r\n#define INT_PD_GPIO_Port GPIOB\r\n// Selecting the DC source to route to theg\r\n#define DC_SELECT_Pin       GPIO_PIN_4\r\n#define DC_SELECT_GPIO_Port GPIOB\r\n#define PD_SELECT_Pin       GPIO_PIN_15\r\n#define PD_SELECT_GPIO_Port GPIOA\r\n\r\n#define TIP_RESISTANCE_SENSE_Pin       GPIO_PIN_1\r\n#define TIP_RESISTANCE_SENSE_GPIO_Port GPIOA\r\n\r\n#endif\r\n#if defined(MODEL_TS80) + defined(MODEL_TS80P) > 0\r\n// TS80 & TS80P pin map\r\n#define KEY_B_Pin                 GPIO_PIN_0\r\n#define KEY_B_GPIO_Port           GPIOB\r\n#define TMP36_INPUT_Pin           GPIO_PIN_4\r\n#define TMP36_INPUT_GPIO_Port     GPIOA\r\n#define TMP36_ADC1_CHANNEL        ADC_CHANNEL_4\r\n#define TMP36_ADC2_CHANNEL        ADC_CHANNEL_4\r\n#define TIP_TEMP_Pin              GPIO_PIN_3\r\n#define TIP_TEMP_GPIO_Port        GPIOA\r\n#define TIP_TEMP_ADC1_CHANNEL     ADC_CHANNEL_3\r\n#define TIP_TEMP_ADC2_CHANNEL     ADC_CHANNEL_3\r\n#define VIN_Pin                   GPIO_PIN_2\r\n#define VIN_GPIO_Port             GPIOA\r\n#define VIN_ADC1_CHANNEL          ADC_CHANNEL_2\r\n#define VIN_ADC2_CHANNEL          ADC_CHANNEL_2\r\n#define OLED_RESET_Pin            GPIO_PIN_15\r\n#define OLED_RESET_GPIO_Port      GPIOA\r\n#define KEY_A_Pin                 GPIO_PIN_1\r\n#define KEY_A_GPIO_Port           GPIOB\r\n#define INT_Orientation_Pin       GPIO_PIN_4\r\n#define INT_Orientation_GPIO_Port GPIOB\r\n#define PWM_Out_Pin               GPIO_PIN_6\r\n#define PWM_Out_GPIO_Port         GPIOA\r\n#define PWM_Out_CHANNEL           TIM_CHANNEL_1\r\n#define TIP_CONTROL_TIMER         TIM3\r\n#define ADC_CONTROL_TIMER         TIM2\r\n#define ADC_CONTROL_TIMER_IRQ     TIM2_IRQn\r\n#define ADC_TRIGGER               ADC_EXTERNALTRIGINJECCONV_T2_TRGO\r\n#define INT_Movement_Pin          GPIO_PIN_5\r\n#define INT_Movement_GPIO_Port    GPIOB\r\n#define SCL_Pin                   GPIO_PIN_6\r\n#define SCL_GPIO_Port             GPIOB\r\n#define SDA_Pin                   GPIO_PIN_7\r\n#define SDA_GPIO_Port             GPIOB\r\n#define SCL2_Pin                  GPIO_PIN_5\r\n#define SCL2_GPIO_Port            GPIOA\r\n#define SDA2_Pin                  GPIO_PIN_1\r\n#define SDA2_GPIO_Port            GPIOA\r\n\r\n#endif\r\n\r\n#ifdef MODEL_TS80P\r\n// TS80P pin map\r\n#define INT_PD_Pin       GPIO_PIN_9\r\n#define INT_PD_GPIO_Port GPIOA\r\n\r\n#endif\r\n\r\n#endif /* BSP_MINIWARE_PINS_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Power.cpp",
    "content": "#include \"BSP.h\"\n#include \"BSP_Power.h\"\n#include \"Pins.h\"\n#include \"QC3.h\"\n#include \"Settings.h\"\n#include \"USBPD.h\"\n#include \"configuration.h\"\n#include \"stm32f1xx_hal.h\"\nvoid power_check() {\n#ifdef POW_PD\n  // Cant start QC until either PD works or fails\n  if (!USBPowerDelivery::negotiationComplete()) {\n    return;\n  }\n  if (USBPowerDelivery::negotiationHasWorked()) {\n    return; // We are using PD\n  }\n#endif\n#ifdef POW_QC\n  QC_resync();\n#endif\n}\n\nbool getIsPoweredByDCIN() {\n#if defined(MODEL_TS80) + defined(MODEL_TS80P) > 0\n  return false;\n#endif\n#ifdef MODEL_TS101\n  // TODO have to check what we are using\n  return HAL_GPIO_ReadPin(DC_SELECT_GPIO_Port, DC_SELECT_Pin) == GPIO_PIN_SET;\n#endif\n#ifdef MODEL_TS100\n  return true;\n#endif\n}\n"
  },
  {
    "path": "source/Core/BSP/Miniware/QC_GPIO.cpp",
    "content": "/*\r\n * QC.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n#include \"BSP.h\"\r\n#include \"Pins.h\"\r\n#include \"QC3.h\"\r\n#include \"Settings.h\"\r\n#include \"configuration.h\"\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n#ifdef POW_QC\r\nvoid QC_DPlusZero_Six() {\r\n  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET); // pull down D+\r\n}\r\nvoid QC_DNegZero_Six() {\r\n  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET);\r\n  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);\r\n}\r\nvoid QC_DPlusThree_Three() {\r\n  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET); // pull up D+\r\n}\r\nvoid QC_DNegThree_Three() {\r\n  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, GPIO_PIN_SET);\r\n  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);\r\n}\r\nvoid QC_DM_PullDown() {\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;\r\n  GPIO_InitStruct.Mode  = GPIO_MODE_INPUT;\r\n  GPIO_InitStruct.Pull  = GPIO_PULLDOWN;\r\n  GPIO_InitStruct.Pin   = GPIO_PIN_11;\r\n  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);\r\n}\r\nvoid QC_DM_No_PullDown() {\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;\r\n  GPIO_InitStruct.Mode  = GPIO_MODE_INPUT;\r\n  GPIO_InitStruct.Pull  = GPIO_NOPULL;\r\n  GPIO_InitStruct.Pin   = GPIO_PIN_11;\r\n  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);\r\n}\r\nvoid QC_Init_GPIO() {\r\n  // Setup any GPIO into the right states for QC\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  GPIO_InitStruct.Pin   = GPIO_PIN_3;\r\n  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;\r\n  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);\r\n  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;\r\n  GPIO_InitStruct.Pull = GPIO_NOPULL;\r\n  GPIO_InitStruct.Pin  = GPIO_PIN_8 | GPIO_PIN_10;\r\n  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);\r\n  // Turn off output mode on pins that we can\r\n  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;\r\n  GPIO_InitStruct.Pull = GPIO_NOPULL;\r\n  GPIO_InitStruct.Pin  = GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_14 | GPIO_PIN_13;\r\n  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);\r\n}\r\nvoid QC_Post_Probe_En() {\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;\r\n  GPIO_InitStruct.Pin   = GPIO_PIN_8 | GPIO_PIN_10;\r\n  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;\r\n  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);\r\n}\r\n\r\nuint8_t QC_DM_PulledDown() { return HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_11) == GPIO_PIN_RESET ? 1 : 0; }\r\n#endif\r\nvoid QC_resync() {\r\n#ifdef POW_QC\r\n  seekQC(getSettingValue(SettingsOptions::QCIdealVoltage), getSettingValue(SettingsOptions::VoltageDiv)); // Run the QC seek again if we have drifted too much\r\n#endif\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/README.md",
    "content": "# BSP section for STM32F103 based Miniware products\r\n\r\nThis folder contains the hardware abstractions required for the TS100, TS80 and probably TS80P soldering irons.\r\n\r\n## Main abstractions\r\n\r\n* Hardware Init\r\n* -> Should contain all bootstrap to bring the hardware up to an operating point\r\n* -> Two functions are required, a pre and post FreeRToS call\r\n* I2C read/write\r\n* Set PWM for the tip\r\n* Links between IRQ's on the system and the calls in the rest of the firmware\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Setup.cpp",
    "content": "/*\n * Setup.c\n *\n *  Created on: 29Aug.,2017\n *      Author: Ben V. Brown\n */\n#include \"Setup.h\"\n#include \"BSP.h\"\n#include \"Pins.h\"\n#include \"configuration.h\"\n#include \"history.hpp\"\n#include <stdint.h>\nADC_HandleTypeDef hadc1;\nADC_HandleTypeDef hadc2;\nDMA_HandleTypeDef hdma_adc1;\n\nIWDG_HandleTypeDef hiwdg;\nTIM_HandleTypeDef  htimADC;\nTIM_HandleTypeDef  htimTip;\n#define ADC_FILTER_LEN 4\n#define ADC_SAMPLES    16\nuint16_t ADCReadings[ADC_SAMPLES]; // Used to store the adc readings for the handle cold junction temp\n\n// Functions\nstatic void SystemClock_Config(void);\nstatic void MX_ADC1_Init(void);\nstatic void MX_IWDG_Init(void);\nstatic void MX_TIP_CONTROL_TIMER_Init(void);\nstatic void MX_ADC_CONTROL_TIMER_Init(void);\nstatic void MX_DMA_Init(void);\nstatic void MX_GPIO_Init(void);\nstatic void MX_ADC2_Init(void);\nvoid        Setup_HAL() {\n  SystemClock_Config();\n\n#ifndef SWD_ENABLE\n  __HAL_AFIO_REMAP_SWJ_DISABLE();\n#else\n  __HAL_AFIO_REMAP_SWJ_NOJTAG();\n#endif\n\n  MX_GPIO_Init();\n  MX_DMA_Init();\n#ifndef I2C_SOFT_BUS_1\n#error \"Only Bit-Bang now\"\n#endif\n  MX_ADC1_Init();\n  MX_ADC2_Init();\n  MX_TIP_CONTROL_TIMER_Init();\n  MX_ADC_CONTROL_TIMER_Init();\n  MX_IWDG_Init();\n  HAL_ADC_Start_DMA(&hadc1, (uint32_t *)ADCReadings, (ADC_SAMPLES)); // start DMA of normal readings\n  HAL_ADCEx_InjectedStart(&hadc1);                                   // enable injected readings\n  HAL_ADCEx_InjectedStart(&hadc2);                                   // enable injected readings\n}\n\nuint16_t getADCHandleTemp(uint8_t sample) {\n  static history<uint16_t, ADC_FILTER_LEN> filter = {{0}, 0, 0};\n  if (sample) {\n    uint32_t sum = 0;\n    for (uint8_t i = 0; i < ADC_SAMPLES; i++) {\n      sum += ADCReadings[i];\n    }\n    filter.update(sum);\n  }\n  return filter.average() >> 1;\n}\n\n#ifdef HAS_SPLIT_POWER_PATH\nstatic history<uint16_t, ADC_FILTER_LEN> filteredDC = {{0}, 0, 0};\nstatic history<uint16_t, ADC_FILTER_LEN> filteredPD = {{0}, 0, 0};\n\nuint16_t getRawDCVin() { return filteredDC.average(); }\nuint16_t getRawPDVin() { return filteredPD.average(); }\n#endif\n\nuint16_t getADCVin(uint8_t sample) {\n#ifdef HAS_SPLIT_POWER_PATH\n  // In split power path operation, we need to read both inputs, and return the larger\n\n  if (sample) {\n    {\n      uint16_t latestADC = 0;\n      latestADC += hadc2.Instance->JDR1;\n      latestADC += hadc2.Instance->JDR2;\n      latestADC <<= 3;\n      filteredDC.update(latestADC);\n    }\n    {\n      uint16_t latestADC = 0;\n      latestADC += hadc2.Instance->JDR3;\n      latestADC += hadc2.Instance->JDR4;\n      latestADC <<= 3;\n      filteredPD.update(latestADC);\n    }\n  }\n  uint16_t dc = filteredDC.average();\n  uint16_t pd = filteredPD.average();\n  if (dc > pd) {\n    return dc;\n  }\n  return pd;\n#else\n  static history<uint16_t, ADC_FILTER_LEN> filter = {{0}, 0, 0};\n  if (sample) {\n    uint16_t latestADC = 0;\n\n    latestADC += hadc2.Instance->JDR1;\n    latestADC += hadc2.Instance->JDR2;\n    latestADC += hadc2.Instance->JDR3;\n    latestADC += hadc2.Instance->JDR4;\n    latestADC <<= 1;\n    filter.update(latestADC);\n  }\n  return filter.average();\n#endif\n}\n// Returns either average or instant value. When sample is set the samples from the injected ADC are copied to the filter and then the raw reading is returned\nuint16_t getTipRawTemp(uint8_t sample) {\n  static history<uint16_t, ADC_FILTER_LEN> filter = {{0}, 0, 0};\n  if (sample) {\n    uint16_t latestADC = 0;\n\n    latestADC += hadc1.Instance->JDR1;\n    latestADC += hadc1.Instance->JDR2;\n    latestADC += hadc1.Instance->JDR3;\n    latestADC += hadc1.Instance->JDR4;\n    latestADC <<= 1;\n    filter.update(latestADC);\n    return latestADC;\n  }\n  return filter.average();\n}\n/** System Clock Configuration\n */\nvoid SystemClock_Config(void) {\n  RCC_OscInitTypeDef       RCC_OscInitStruct;\n  RCC_ClkInitTypeDef       RCC_ClkInitStruct;\n  RCC_PeriphCLKInitTypeDef PeriphClkInit;\n\n  /**Initializes the CPU, AHB and APB busses clocks\n   */\n  RCC_OscInitStruct.OscillatorType      = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSI;\n  RCC_OscInitStruct.HSIState            = RCC_HSI_ON;\n  RCC_OscInitStruct.HSICalibrationValue = 16;\n  RCC_OscInitStruct.LSIState            = RCC_LSI_ON;\n  RCC_OscInitStruct.PLL.PLLState        = RCC_PLL_ON;\n  RCC_OscInitStruct.PLL.PLLSource       = RCC_PLLSOURCE_HSI_DIV2;\n  RCC_OscInitStruct.PLL.PLLMUL          = RCC_PLL_MUL16; // 64MHz\n  HAL_RCC_OscConfig(&RCC_OscInitStruct);\n\n  /**Initializes the CPU, AHB and APB busses clocks\n   */\n  RCC_ClkInitStruct.ClockType      = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;\n  RCC_ClkInitStruct.SYSCLKSource   = RCC_SYSCLKSOURCE_PLLCLK;\n  RCC_ClkInitStruct.AHBCLKDivider  = RCC_SYSCLK_DIV1;\n  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV16; // TIM\n                                                     // 2,3,4,5,6,7,12,13,14\n  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;  // 64 mhz to some peripherals and adc\n\n  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);\n\n  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;\n  PeriphClkInit.AdcClockSelection    = RCC_ADCPCLK2_DIV6; // 6 or 8 are the only non overclocked options\n  HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);\n\n  /**Configure the Systick interrupt time\n   */\n  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);\n\n  /**Configure the Systick\n   */\n  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);\n\n  /* SysTick_IRQn interrupt configuration */\n  HAL_NVIC_SetPriority(SysTick_IRQn, 15, 0);\n}\n\n/* ADC1 init function */\nstatic void MX_ADC1_Init(void) {\n\n  ADC_ChannelConfTypeDef   sConfig;\n  ADC_InjectionConfTypeDef sConfigInjected;\n  /**Common config\n   */\n  hadc1.Instance                   = ADC1;\n  hadc1.Init.ScanConvMode          = ADC_SCAN_ENABLE;\n  hadc1.Init.ContinuousConvMode    = ENABLE;\n  hadc1.Init.DiscontinuousConvMode = DISABLE;\n  hadc1.Init.ExternalTrigConv      = ADC_SOFTWARE_START;\n  hadc1.Init.DataAlign             = ADC_DATAALIGN_RIGHT;\n  hadc1.Init.NbrOfConversion       = 1;\n  HAL_ADC_Init(&hadc1);\n\n  /**Configure Regular Channel\n   */\n  sConfig.Channel      = TMP36_ADC1_CHANNEL;\n  sConfig.Rank         = ADC_REGULAR_RANK_1;\n  sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;\n  HAL_ADC_ConfigChannel(&hadc1, &sConfig);\n\n  /**Configure Injected Channel\n   */\n  // F in = 10.66 MHz\n  /*\n   * Injected time is 1 delay clock + (12 adc cycles*4)+4*sampletime =~217\n   * clocks = 0.2ms Charge time is 0.016 uS ideally So Sampling time must be >=\n   * 0.016uS 1/10.66MHz is 0.09uS, so 1 CLK is *should* be enough\n   * */\n  sConfigInjected.InjectedChannel               = TIP_TEMP_ADC1_CHANNEL;\n  sConfigInjected.InjectedRank                  = 1;\n  sConfigInjected.InjectedNbrOfConversion       = 4;\n  sConfigInjected.InjectedSamplingTime          = ADC_SAMPLETIME_28CYCLES_5;\n  sConfigInjected.ExternalTrigInjecConv         = ADC_TRIGGER;\n  sConfigInjected.AutoInjectedConv              = DISABLE;\n  sConfigInjected.InjectedDiscontinuousConvMode = DISABLE;\n  sConfigInjected.InjectedOffset                = 0;\n\n  HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected);\n  sConfigInjected.InjectedRank = 2;\n  HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected);\n  sConfigInjected.InjectedRank = 3;\n  HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected);\n  sConfigInjected.InjectedRank = 4;\n  HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected);\n  SET_BIT(hadc1.Instance->CR1, (ADC_CR1_JEOCIE)); // Enable end of injected conv irq\n  // Run ADC internal calibration\n  while (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK) {\n    ;\n  }\n}\n\n/* ADC2 init function */\nstatic void MX_ADC2_Init(void) {\n  ADC_InjectionConfTypeDef sConfigInjected;\n\n  /**Common config\n   */\n  hadc2.Instance                   = ADC2;\n  hadc2.Init.ScanConvMode          = ADC_SCAN_ENABLE;\n  hadc2.Init.ContinuousConvMode    = ENABLE;\n  hadc2.Init.DiscontinuousConvMode = DISABLE;\n  hadc2.Init.ExternalTrigConv      = ADC_SOFTWARE_START;\n  hadc2.Init.DataAlign             = ADC_DATAALIGN_RIGHT;\n  hadc2.Init.NbrOfConversion       = 0;\n  HAL_ADC_Init(&hadc2);\n\n  /**Configure Injected Channel\n   */\n  sConfigInjected.InjectedChannel               = VIN_ADC2_CHANNEL;\n  sConfigInjected.InjectedRank                  = ADC_INJECTED_RANK_1;\n  sConfigInjected.InjectedNbrOfConversion       = 4;\n  sConfigInjected.InjectedSamplingTime          = ADC_SAMPLETIME_28CYCLES_5;\n  sConfigInjected.ExternalTrigInjecConv         = ADC_TRIGGER;\n  sConfigInjected.AutoInjectedConv              = DISABLE;\n  sConfigInjected.InjectedDiscontinuousConvMode = DISABLE;\n  sConfigInjected.InjectedOffset                = 0;\n  HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected);\n  sConfigInjected.InjectedRank = ADC_INJECTED_RANK_2;\n  HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected);\n\n#ifdef HAS_SPLIT_POWER_PATH\n  sConfigInjected.InjectedChannel = PD_VIN_ADC2_CHANNEL;\n#endif\n\n  sConfigInjected.InjectedRank = ADC_INJECTED_RANK_3;\n  HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected);\n  sConfigInjected.InjectedRank = ADC_INJECTED_RANK_4;\n  HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected);\n\n  // Run ADC internal calibration\n  while (HAL_ADCEx_Calibration_Start(&hadc2) != HAL_OK) {\n    ;\n  }\n}\n\n/* IWDG init function */\nstatic void MX_IWDG_Init(void) {\n  hiwdg.Instance       = IWDG;\n  hiwdg.Init.Prescaler = IWDG_PRESCALER_256;\n  hiwdg.Init.Reload    = 100;\n#ifndef SWD_ENABLE\n  HAL_IWDG_Init(&hiwdg);\n#endif\n}\n\n/* TIM3 init function */\nstatic void MX_TIP_CONTROL_TIMER_Init(void) {\n  TIM_ClockConfigTypeDef  sClockSourceConfig;\n  TIM_MasterConfigTypeDef sMasterConfig;\n  TIM_OC_InitTypeDef      sConfigOC;\n\n  htimTip.Instance = TIP_CONTROL_TIMER;\n#ifdef TIP_HAS_DIRECT_PWM\n  htimTip.Init.Prescaler = 100;\n#else\n  htimTip.Init.Prescaler = 3;\n#endif\n  htimTip.Init.CounterMode       = TIM_COUNTERMODE_UP;\n  htimTip.Init.Period            = 255;                           // 5 Khz PWM freq\n  htimTip.Init.ClockDivision     = TIM_CLOCKDIVISION_DIV4;        // 4mhz before div\n  htimTip.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; // Preload the ARR register (though we dont use this)\n  HAL_TIM_Base_Init(&htimTip);\n\n  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;\n  HAL_TIM_ConfigClockSource(&htimTip, &sClockSourceConfig);\n\n  HAL_TIM_PWM_Init(&htimTip);\n\n  HAL_TIM_OC_Init(&htimTip);\n\n  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;\n  sMasterConfig.MasterSlaveMode     = TIM_MASTERSLAVEMODE_DISABLE;\n  HAL_TIMEx_MasterConfigSynchronization(&htimTip, &sMasterConfig);\n\n  sConfigOC.OCMode = TIM_OCMODE_PWM1;\n#ifdef TIP_HAS_DIRECT_PWM\n  sConfigOC.Pulse = 0; // PWM is direct to tip\n#else\n  sConfigOC.Pulse = 127; // 50% duty cycle, that is AC coupled through the cap to provide an on signal (This does not do tip at 50% duty cycle)\n#endif\n  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;\n  sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;\n  HAL_TIM_PWM_ConfigChannel(&htimTip, &sConfigOC, PWM_Out_CHANNEL);\n\n  GPIO_InitTypeDef GPIO_InitStruct;\n\n  /**TIM3 GPIO Configuration\n   PWM_Out_Pin     ------> TIM3_CH1\n   */\n  GPIO_InitStruct.Pin   = PWM_Out_Pin;\n  GPIO_InitStruct.Mode  = GPIO_MODE_AF_PP;\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // We would like sharp rising edges\n  HAL_GPIO_Init(PWM_Out_GPIO_Port, &GPIO_InitStruct);\n#ifdef MODEL_TS100\n  // Remap TIM3_CH1 to be on PB4\n  __HAL_AFIO_REMAP_TIM3_PARTIAL();\n#else\n  // No re-map required\n#endif\n  HAL_TIM_PWM_Start(&htimTip, PWM_Out_CHANNEL);\n}\n/* TIM3 init function */\nstatic void MX_ADC_CONTROL_TIMER_Init(void) {\n  /*\n   * We use the channel 1 to trigger the ADC at end of PWM period\n   * And we use the channel 4 as the PWM modulation source using Interrupts\n   * */\n  TIM_ClockConfigTypeDef  sClockSourceConfig;\n  TIM_MasterConfigTypeDef sMasterConfig;\n  TIM_OC_InitTypeDef      sConfigOC;\n\n  // Timer 2 is fairly slow as its being used to run the PWM and trigger the ADC\n  // in the PWM off time.\n  htimADC.Instance = ADC_CONTROL_TIMER;\n  // dummy value, will be reconfigured by BSPInit()\n  htimADC.Init.Prescaler = 2000; // 2 MHz timer clock/2000 = 1 kHz tick rate\n\n  // pwm out is 10k from tim3, we want to run our PWM at around 10hz or slower on the output stage\n  // These values give a rate of around 3.5 Hz for \"fast\" mode and 1.84 Hz for \"slow\"\n  htimADC.Init.CounterMode = TIM_COUNTERMODE_UP;\n  // dummy value, will be reconfigured by BSPInit()\n  htimADC.Init.Period = powerPWM + 14 * 2;\n\n  htimADC.Init.ClockDivision     = TIM_CLOCKDIVISION_DIV4; // 8 MHz (x2 APB1) before divide\n  htimADC.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;\n  htimADC.Init.RepetitionCounter = 0;\n  HAL_TIM_Base_Init(&htimADC);\n\n  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;\n  HAL_TIM_ConfigClockSource(&htimADC, &sClockSourceConfig);\n\n  HAL_TIM_PWM_Init(&htimADC);\n  HAL_TIM_OC_Init(&htimADC);\n\n  sMasterConfig.MasterOutputTrigger = TIM_TRGO_OC1;\n  sMasterConfig.MasterSlaveMode     = TIM_MASTERSLAVEMODE_DISABLE;\n  HAL_TIMEx_MasterConfigSynchronization(&htimADC, &sMasterConfig);\n\n  sConfigOC.OCMode = TIM_OCMODE_PWM1;\n  // dummy value, will be reconfigured by BSPInit() in the BSP.cpp\n  sConfigOC.Pulse = powerPWM + 14; // 13 -> Delay of 7 ms\n  // 255 is the largest time period of the drive signal, and then offset ADC sample to be a bit delayed after this\n  /*\n   * It takes 4 milliseconds for output to be stable after PWM turns off.\n   * Assume ADC samples in 0.5ms\n   * We need to set this to 100% + 4.5ms\n   * */\n  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;\n  sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;\n  HAL_TIM_PWM_ConfigChannel(&htimADC, &sConfigOC, TIM_CHANNEL_1);\n  sConfigOC.Pulse = 0; // default to entirely off\n  HAL_TIM_OC_ConfigChannel(&htimADC, &sConfigOC, TIM_CHANNEL_4);\n\n  HAL_TIM_Base_Start_IT(&htimADC);\n  HAL_TIM_PWM_Start(&htimADC, TIM_CHANNEL_1);\n  HAL_TIM_PWM_Start_IT(&htimADC, TIM_CHANNEL_4);\n  HAL_NVIC_SetPriority(ADC_CONTROL_TIMER_IRQ, 15, 0);\n  HAL_NVIC_EnableIRQ(ADC_CONTROL_TIMER_IRQ);\n}\n\n/**\n * Enable DMA controller clock\n */\nstatic void MX_DMA_Init(void) {\n  /* DMA controller clock enable */\n  __HAL_RCC_DMA1_CLK_ENABLE();\n\n  /* DMA interrupt init */\n  /* DMA1_Channel1_IRQn interrupt configuration */\n  HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 5, 0);\n  HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);\n  /* DMA1_Channel6_IRQn interrupt configuration */\n  HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 5, 0);\n  HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn);\n  /* DMA1_Channel7_IRQn interrupt configuration */\n  HAL_NVIC_SetPriority(DMA1_Channel7_IRQn, 5, 0);\n  HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn);\n}\n\n/** Configure pins as\n * Analog\n * Input\n * Output\n * EVENT_OUT\n * EXTI\n * Free pins are configured automatically as Analog\n PB0   ------> ADCx_IN8\n PB1   ------> ADCx_IN9\n */\nstatic void MX_GPIO_Init(void) {\n  GPIO_InitTypeDef GPIO_InitStruct;\n\n  /* GPIO Ports Clock Enable */\n  __HAL_RCC_GPIOD_CLK_ENABLE();\n  __HAL_RCC_GPIOA_CLK_ENABLE();\n  __HAL_RCC_GPIOB_CLK_ENABLE();\n\n  /*Configure GPIO pin Output Level */\n  HAL_GPIO_WritePin(OLED_RESET_GPIO_Port, OLED_RESET_Pin, GPIO_PIN_RESET);\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;\n  /*Configure GPIO pins : PD0 PD1 */\n  GPIO_InitStruct.Pin  = GPIO_PIN_0 | GPIO_PIN_1;\n  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;\n  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);\n  /*Configure peripheral I/O remapping */\n  __HAL_AFIO_REMAP_PD01_ENABLE();\n  //^ remap XTAL so that pins can be analog (all input buffers off).\n  // reduces power consumption\n\n  /*\n   * Configure All pins as analog by default\n   */\n  GPIO_InitStruct.Pin  = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_15;\n  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;\n  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);\n  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 |\n#ifdef MODEL_TS100\n                        GPIO_PIN_3 |\n#endif\n                        GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;\n  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);\n\n#ifdef MODEL_TS100\n#ifndef SWD_ENABLE\n  /* Pull USB and SWD lines low to prevent enumeration attempts and EMI affecting\n   * the debug core */\n  GPIO_InitStruct.Pin   = GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14;\n  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;\n  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);\n  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET);\n  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);\n  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_13, GPIO_PIN_RESET);\n  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_14, GPIO_PIN_RESET);\n#else\n  /* Make all lines affecting SWD floating to allow debugging */\n  GPIO_InitStruct.Pin  = GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_14 | GPIO_PIN_13;\n  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;\n  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);\n#endif\n#else\n  /* TS80 */\n  /* Leave USB lines open circuit*/\n\n#endif\n\n  /*Configure GPIO pins : KEY_B_Pin KEY_A_Pin */\n  GPIO_InitStruct.Pin  = KEY_B_Pin | KEY_A_Pin;\n  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;\n  GPIO_InitStruct.Pull = GPIO_PULLUP;\n  HAL_GPIO_Init(KEY_B_GPIO_Port, &GPIO_InitStruct);\n\n  /*Configure GPIO pin : OLED_RESET_Pin */\n  GPIO_InitStruct.Pin   = OLED_RESET_Pin;\n  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;\n  HAL_GPIO_Init(OLED_RESET_GPIO_Port, &GPIO_InitStruct);\n\n  // Pull down LCD reset\n  HAL_GPIO_WritePin(OLED_RESET_GPIO_Port, OLED_RESET_Pin, GPIO_PIN_RESET);\n  HAL_Delay(30);\n  HAL_GPIO_WritePin(OLED_RESET_GPIO_Port, OLED_RESET_Pin, GPIO_PIN_SET);\n\n#ifdef DC_SELECT_Pin\n  GPIO_InitStruct.Pin  = DC_SELECT_Pin;\n  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;\n  GPIO_InitStruct.Pull = GPIO_NOPULL;\n  HAL_GPIO_Init(DC_SELECT_GPIO_Port, &GPIO_InitStruct);\n  HAL_GPIO_WritePin(DC_SELECT_GPIO_Port, DC_SELECT_Pin, GPIO_PIN_RESET);\n#endif\n\n#ifdef PD_SELECT_Pin\n  GPIO_InitStruct.Pin  = PD_SELECT_Pin;\n  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;\n  GPIO_InitStruct.Pull = GPIO_NOPULL;\n  HAL_GPIO_Init(PD_SELECT_GPIO_Port, &GPIO_InitStruct);\n  HAL_GPIO_WritePin(PD_SELECT_GPIO_Port, PD_SELECT_Pin, GPIO_PIN_RESET);\n\n#endif\n\n#ifdef TIP_RESISTANCE_SENSE_Pin\n  GPIO_InitStruct.Pin  = TIP_RESISTANCE_SENSE_Pin;\n  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;\n  GPIO_InitStruct.Pull = GPIO_NOPULL;\n  HAL_GPIO_Init(TIP_RESISTANCE_SENSE_GPIO_Port, &GPIO_InitStruct);\n  HAL_GPIO_WritePin(TIP_RESISTANCE_SENSE_GPIO_Port, TIP_RESISTANCE_SENSE_Pin, GPIO_PIN_RESET);\n\n#endif\n\n#ifdef INT_PD_Pin\n  GPIO_InitStruct.Pin  = INT_PD_Pin;\n  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;\n  GPIO_InitStruct.Pull = GPIO_PULLUP;\n  HAL_GPIO_Init(INT_PD_GPIO_Port, &GPIO_InitStruct);\n\n#endif\n}\n#ifdef USE_FULL_ASSERT\nvoid assert_failed(uint8_t *file, uint32_t line) { asm(\"bkpt\"); }\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Setup.h",
    "content": "/*\r\n * Setup.h\r\n *\r\n *  Created on: 29Aug.,2017\r\n *      Author: Ben V. Brown\r\n */\r\n\r\n#ifndef SETUP_H_\r\n#define SETUP_H_\r\n#include \"configuration.h\"\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n#include \"stm32f1xx_hal.h\"\r\n\r\nextern ADC_HandleTypeDef hadc1;\r\nextern ADC_HandleTypeDef hadc2;\r\nextern DMA_HandleTypeDef hdma_adc1;\r\n\r\nextern IWDG_HandleTypeDef hiwdg;\r\n\r\nextern TIM_HandleTypeDef htimADC;\r\nextern TIM_HandleTypeDef htimTip;\r\nvoid                     Setup_HAL();\r\nuint16_t                 getADCHandleTemp(uint8_t sample);\r\nuint16_t                 getADCVin(uint8_t sample);\r\nvoid                     HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); // Since the hal header file does not define this one\r\n\r\n#ifdef HAS_SPLIT_POWER_PATH\r\nuint16_t getRawDCVin();\r\nuint16_t getRawPDVin();\r\n#endif\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* SETUP_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Software_I2C.h",
    "content": "/*\r\n * Software_I2C.h\r\n *\r\n *  Created on: 25 Jul 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_MINIWARE_SOFTWARE_I2C_H_\r\n#define BSP_MINIWARE_SOFTWARE_I2C_H_\r\n#include \"BSP.h\"\r\n#include \"configuration.h\"\r\n#include \"stm32f1xx_hal.h\"\r\n#ifdef I2C_SOFT_BUS_2\r\n\r\n#define SOFT_SCL2_HIGH() HAL_GPIO_WritePin(SCL2_GPIO_Port, SCL2_Pin, GPIO_PIN_SET)\r\n#define SOFT_SCL2_LOW()  HAL_GPIO_WritePin(SCL2_GPIO_Port, SCL2_Pin, GPIO_PIN_RESET)\r\n#define SOFT_SDA2_HIGH() HAL_GPIO_WritePin(SDA2_GPIO_Port, SDA2_Pin, GPIO_PIN_SET)\r\n#define SOFT_SDA2_LOW()  HAL_GPIO_WritePin(SDA2_GPIO_Port, SDA2_Pin, GPIO_PIN_RESET)\r\n#define SOFT_SDA2_READ() (HAL_GPIO_ReadPin(SDA2_GPIO_Port, SDA2_Pin) == GPIO_PIN_SET ? 1 : 0)\r\n#define SOFT_SCL2_READ() (HAL_GPIO_ReadPin(SCL2_GPIO_Port, SCL2_Pin) == GPIO_PIN_SET ? 1 : 0)\r\n\r\n#endif\r\n\r\n#ifdef I2C_SOFT_BUS_1\r\n#define SOFT_SCL1_HIGH() HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_SET)\r\n#define SOFT_SCL1_LOW()  HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_RESET)\r\n#define SOFT_SDA1_HIGH() HAL_GPIO_WritePin(SDA_GPIO_Port, SDA_Pin, GPIO_PIN_SET)\r\n#define SOFT_SDA1_LOW()  HAL_GPIO_WritePin(SDA_GPIO_Port, SDA_Pin, GPIO_PIN_RESET)\r\n#define SOFT_SDA1_READ() (HAL_GPIO_ReadPin(SDA_GPIO_Port, SDA_Pin) == GPIO_PIN_SET ? 1 : 0)\r\n#define SOFT_SCL1_READ() (HAL_GPIO_ReadPin(SCL_GPIO_Port, SCL_Pin) == GPIO_PIN_SET ? 1 : 0)\r\n\r\n#endif\r\n\r\n#define SOFT_I2C_DELAY()              \\\r\n  {                                   \\\r\n    for (int xx = 0; xx < 15; xx++) { \\\r\n      asm(\"nop\");                     \\\r\n    }                                 \\\r\n  }\r\n\r\n// 40 ~= 100kHz; 15 gives around 250kHz or so which is fast _and_ stable\r\n\r\n#endif /* BSP_MINIWARE_SOFTWARE_I2C_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Startup/startup_stm32f103t8ux.S",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file      startup_stm32.s\r\n  * @author    Ac6\r\n  * @version   V1.0.0\r\n  * @date      12-June-2014\r\n  ******************************************************************************\r\n  */\r\n\r\n  .syntax unified\r\n  .cpu cortex-m3\r\n  .thumb\r\n\r\n.global\tg_pfnVectors\r\n.global\tDefault_Handler\r\n\r\n/* start address for the initialization values of the .data section.\r\ndefined in linker script */\r\n.word\t_sidata\r\n/* start address for the .data section. defined in linker script */\r\n.word\t_sdata\r\n/* end address for the .data section. defined in linker script */\r\n.word\t_edata\r\n/* start address for the .bss section. defined in linker script */\r\n.word\t_sbss\r\n/* end address for the .bss section. defined in linker script */\r\n.word\t_ebss\r\n\r\n.equ  BootRAM,        0xF1E0F85F\r\n/**\r\n * @brief  This is the code that gets called when the processor first\r\n *          starts execution following a reset event. Only the absolutely\r\n *          necessary set is performed, after which the application\r\n *          supplied main() routine is called.\r\n * @param  None\r\n * @retval : None\r\n*/\r\n\r\n    .section\t.text.Reset_Handler\r\n\t.weak\tReset_Handler\r\n\t.type\tReset_Handler, %function\r\nReset_Handler:\r\n\r\n/* Copy the data segment initializers from flash to SRAM */\r\n  movs\tr1, #0\r\n  b\tLoopCopyDataInit\r\n\r\nCopyDataInit:\r\n\tldr\tr3, =_sidata\r\n\tldr\tr3, [r3, r1]\r\n\tstr\tr3, [r0, r1]\r\n\tadds\tr1, r1, #4\r\n\r\nLoopCopyDataInit:\r\n\tldr\tr0, =_sdata\r\n\tldr\tr3, =_edata\r\n\tadds\tr2, r0, r1\r\n\tcmp\tr2, r3\r\n\tbcc\tCopyDataInit\r\n\tldr\tr2, =_sbss\r\n\tb\tLoopFillZerobss\r\n/* Zero fill the bss segment. */\r\nFillZerobss:\r\n\tmovs r3, #0\r\n \tstr  r3, [r2]\r\n\tadds r2, r2, #4\r\n\r\nLoopFillZerobss:\r\n\tldr\tr3, = _ebss\r\n\tcmp\tr2, r3\r\n\tbcc\tFillZerobss\r\n\r\n/* Call the clock system intitialization function.*/\r\n    bl  SystemInit\r\n/* Call static constructors */\r\n    bl __libc_init_array\r\n/* Call the application's entry point.*/\r\n\tbl\tmain\r\n\r\nLoopForever:\r\n    b LoopForever\r\n\r\n.size\tReset_Handler, .-Reset_Handler\r\n\r\n/**\r\n * @brief  This is the code that gets called when the processor receives an\r\n *         unexpected interrupt.  This simply enters an infinite loop, preserving\r\n *         the system state for examination by a debugger.\r\n *\r\n * @param  None\r\n * @retval : None\r\n*/\r\n    .section\t.text.Default_Handler,\"ax\",%progbits\r\nDefault_Handler:\r\nInfinite_Loop:\r\n\tb\tInfinite_Loop\r\n\t.size\tDefault_Handler, .-Default_Handler\r\n/******************************************************************************\r\n*\r\n* The minimal vector table for a Cortex-M.  Note that the proper constructs\r\n* must be placed on this to ensure that it ends up at physical address\r\n* 0x0000.0000.\r\n*\r\n******************************************************************************/\r\n \t.section\t.isr_vector,\"a\",%progbits\r\n\t.type\tg_pfnVectors, %object\r\n\t.size\tg_pfnVectors, .-g_pfnVectors\r\n\r\ng_pfnVectors:\r\n\t.word _estack\r\n  .word Reset_Handler\r\n  .word NMI_Handler\r\n  .word HardFault_Handler\r\n  .word MemManage_Handler\r\n  .word BusFault_Handler\r\n  .word UsageFault_Handler\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word SVC_Handler\r\n  .word DebugMon_Handler\r\n  .word 0\r\n  .word PendSV_Handler\r\n  .word SysTick_Handler\r\n  .word WWDG_IRQHandler\r\n  .word PVD_IRQHandler\r\n  .word TAMPER_IRQHandler\r\n  .word RTC_IRQHandler\r\n  .word FLASH_IRQHandler\r\n  .word RCC_IRQHandler\r\n  .word EXTI0_IRQHandler\r\n  .word EXTI1_IRQHandler\r\n  .word EXTI2_IRQHandler\r\n  .word EXTI3_IRQHandler\r\n  .word EXTI4_IRQHandler\r\n  .word DMA1_Channel1_IRQHandler\r\n  .word DMA1_Channel2_IRQHandler\r\n  .word DMA1_Channel3_IRQHandler\r\n  .word DMA1_Channel4_IRQHandler\r\n  .word DMA1_Channel5_IRQHandler\r\n  .word DMA1_Channel6_IRQHandler\r\n  .word DMA1_Channel7_IRQHandler\r\n  .word ADC1_2_IRQHandler\r\n  .word USB_HP_CAN1_TX_IRQHandler\r\n  .word USB_LP_CAN1_RX0_IRQHandler\r\n  .word CAN1_RX1_IRQHandler\r\n  .word CAN1_SCE_IRQHandler\r\n  .word EXTI9_5_IRQHandler\r\n  .word TIM1_BRK_IRQHandler\r\n  .word TIM1_UP_IRQHandler\r\n  .word TIM1_TRG_COM_IRQHandler\r\n  .word TIM1_CC_IRQHandler\r\n  .word TIM2_IRQHandler\r\n  .word TIM3_IRQHandler\r\n  .word TIM4_IRQHandler\r\n  .word I2C1_EV_IRQHandler\r\n  .word I2C1_ER_IRQHandler\r\n  .word I2C2_EV_IRQHandler\r\n  .word I2C2_ER_IRQHandler\r\n  .word SPI1_IRQHandler\r\n  .word SPI2_IRQHandler\r\n  .word USART1_IRQHandler\r\n  .word USART2_IRQHandler\r\n  .word USART3_IRQHandler\r\n  .word EXTI15_10_IRQHandler\r\n  .word RTC_Alarm_IRQHandler\r\n  .word USBWakeUp_IRQHandler\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word BootRAM          /* @0x108. This is for boot in RAM mode for\r\n                            STM32F10x Medium Density devices. */\r\n\r\n/*******************************************************************************\r\n*\r\n* Provide weak aliases for each Exception handler to the Default_Handler.\r\n* As they are weak aliases, any function with the same name will override\r\n* this definition.\r\n*\r\n*******************************************************************************/\r\n\r\n  \t.weak NMI_Handler\r\n  .thumb_set NMI_Handler,Default_Handler\r\n\r\n  .weak HardFault_Handler\r\n  .thumb_set HardFault_Handler,Default_Handler\r\n\r\n  .weak MemManage_Handler\r\n  .thumb_set MemManage_Handler,Default_Handler\r\n\r\n  .weak BusFault_Handler\r\n  .thumb_set BusFault_Handler,Default_Handler\r\n\r\n  .weak UsageFault_Handler\r\n  .thumb_set UsageFault_Handler,Default_Handler\r\n\r\n  .weak SVC_Handler\r\n  .thumb_set SVC_Handler,Default_Handler\r\n\r\n  .weak DebugMon_Handler\r\n  .thumb_set DebugMon_Handler,Default_Handler\r\n\r\n  .weak PendSV_Handler\r\n  .thumb_set PendSV_Handler,Default_Handler\r\n\r\n  .weak SysTick_Handler\r\n  .thumb_set SysTick_Handler,Default_Handler\r\n\r\n  .weak WWDG_IRQHandler\r\n  .thumb_set WWDG_IRQHandler,Default_Handler\r\n\r\n  .weak PVD_IRQHandler\r\n  .thumb_set PVD_IRQHandler,Default_Handler\r\n\r\n  .weak TAMPER_IRQHandler\r\n  .thumb_set TAMPER_IRQHandler,Default_Handler\r\n\r\n  .weak RTC_IRQHandler\r\n  .thumb_set RTC_IRQHandler,Default_Handler\r\n\r\n  .weak FLASH_IRQHandler\r\n  .thumb_set FLASH_IRQHandler,Default_Handler\r\n\r\n  .weak RCC_IRQHandler\r\n  .thumb_set RCC_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI0_IRQHandler\r\n  .thumb_set EXTI0_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI1_IRQHandler\r\n  .thumb_set EXTI1_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI2_IRQHandler\r\n  .thumb_set EXTI2_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI3_IRQHandler\r\n  .thumb_set EXTI3_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI4_IRQHandler\r\n  .thumb_set EXTI4_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel1_IRQHandler\r\n  .thumb_set DMA1_Channel1_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel2_IRQHandler\r\n  .thumb_set DMA1_Channel2_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel3_IRQHandler\r\n  .thumb_set DMA1_Channel3_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel4_IRQHandler\r\n  .thumb_set DMA1_Channel4_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel5_IRQHandler\r\n  .thumb_set DMA1_Channel5_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel6_IRQHandler\r\n  .thumb_set DMA1_Channel6_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel7_IRQHandler\r\n  .thumb_set DMA1_Channel7_IRQHandler,Default_Handler\r\n\r\n  .weak ADC1_2_IRQHandler\r\n  .thumb_set ADC1_2_IRQHandler,Default_Handler\r\n\r\n  .weak USB_HP_CAN1_TX_IRQHandler\r\n  .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler\r\n\r\n  .weak USB_LP_CAN1_RX0_IRQHandler\r\n  .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler\r\n\r\n  .weak CAN1_RX1_IRQHandler\r\n  .thumb_set CAN1_RX1_IRQHandler,Default_Handler\r\n\r\n  .weak CAN1_SCE_IRQHandler\r\n  .thumb_set CAN1_SCE_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI9_5_IRQHandler\r\n  .thumb_set EXTI9_5_IRQHandler,Default_Handler\r\n\r\n  .weak TIM1_BRK_IRQHandler\r\n  .thumb_set TIM1_BRK_IRQHandler,Default_Handler\r\n\r\n  .weak TIM1_UP_IRQHandler\r\n  .thumb_set TIM1_UP_IRQHandler,Default_Handler\r\n\r\n  .weak TIM1_TRG_COM_IRQHandler\r\n  .thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler\r\n\r\n  .weak TIM1_CC_IRQHandler\r\n  .thumb_set TIM1_CC_IRQHandler,Default_Handler\r\n\r\n  .weak TIM2_IRQHandler\r\n  .thumb_set TIM2_IRQHandler,Default_Handler\r\n\r\n  .weak TIM3_IRQHandler\r\n  .thumb_set TIM3_IRQHandler,Default_Handler\r\n\r\n  .weak TIM4_IRQHandler\r\n  .thumb_set TIM4_IRQHandler,Default_Handler\r\n\r\n  .weak I2C1_EV_IRQHandler\r\n  .thumb_set I2C1_EV_IRQHandler,Default_Handler\r\n\r\n  .weak I2C1_ER_IRQHandler\r\n  .thumb_set I2C1_ER_IRQHandler,Default_Handler\r\n\r\n  .weak I2C2_EV_IRQHandler\r\n  .thumb_set I2C2_EV_IRQHandler,Default_Handler\r\n\r\n  .weak I2C2_ER_IRQHandler\r\n  .thumb_set I2C2_ER_IRQHandler,Default_Handler\r\n\r\n  .weak SPI1_IRQHandler\r\n  .thumb_set SPI1_IRQHandler,Default_Handler\r\n\r\n  .weak SPI2_IRQHandler\r\n  .thumb_set SPI2_IRQHandler,Default_Handler\r\n\r\n  .weak USART1_IRQHandler\r\n  .thumb_set USART1_IRQHandler,Default_Handler\r\n\r\n  .weak USART2_IRQHandler\r\n  .thumb_set USART2_IRQHandler,Default_Handler\r\n\r\n  .weak USART3_IRQHandler\r\n  .thumb_set USART3_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI15_10_IRQHandler\r\n  .thumb_set EXTI15_10_IRQHandler,Default_Handler\r\n\r\n  .weak RTC_Alarm_IRQHandler\r\n  .thumb_set RTC_Alarm_IRQHandler,Default_Handler\r\n\r\n  .weak USBWakeUp_IRQHandler\r\n  .thumb_set USBWakeUp_IRQHandler,Default_Handler\r\n\r\n\r\n/************************ (C) COPYRIGHT Ac6 *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/ThermoModel.cpp",
    "content": "/*\r\n * ThermoModel.cpp\r\n *\r\n *  Created on: 1 May 2021\r\n *      Author: Ralim\r\n */\r\n#include \"TipThermoModel.h\"\r\n#include \"Utils.hpp\"\r\n#include \"configuration.h\"\r\n\r\n#ifdef TEMP_uV_LOOKUP_HAKKO\r\nconst int32_t uVtoDegC[] = {\r\n    //\r\n    //\r\n    0,     0,   //\r\n    266,   10,  //\r\n    522,   20,  //\r\n    770,   30,  //\r\n    1010,  40,  //\r\n    1244,  50,  //\r\n    1473,  60,  //\r\n    1697,  70,  //\r\n    1917,  80,  //\r\n    2135,  90,  //\r\n    2351,  100, //\r\n    2566,  110, //\r\n    2780,  120, //\r\n    2994,  130, //\r\n    3209,  140, //\r\n    3426,  150, //\r\n    3644,  160, //\r\n    3865,  170, //\r\n    4088,  180, //\r\n    4314,  190, //\r\n    4544,  200, //\r\n    4777,  210, //\r\n    5014,  220, //\r\n    5255,  230, //\r\n    5500,  240, //\r\n    5750,  250, //\r\n    6003,  260, //\r\n    6261,  270, //\r\n    6523,  280, //\r\n    6789,  290, //\r\n    7059,  300, //\r\n    7332,  310, //\r\n    7609,  320, //\r\n    7889,  330, //\r\n    8171,  340, //\r\n    8456,  350, //\r\n    8742,  360, //\r\n    9030,  370, //\r\n    9319,  380, //\r\n    9607,  390, //\r\n    9896,  400, //\r\n    10183, 410, //\r\n    10468, 420, //\r\n    10750, 430, //\r\n    11029, 440, //\r\n    11304, 450, //\r\n    11573, 460, //\r\n    11835, 470, //\r\n    12091, 480, //\r\n    12337, 490, //\r\n    12575, 500, //\r\n\r\n};\r\n#endif\r\n\r\n#ifdef TEMP_uV_LOOKUP_TS80\r\n\r\nconst int32_t uVtoDegC[] = {\r\n    //\r\n    //\r\n    530,   0,   //\r\n    1282,  10,  //\r\n    2034,  20,  //\r\n    2786,  30,  //\r\n    3538,  40,  //\r\n    4290,  50,  //\r\n    5043,  60,  //\r\n    5795,  70,  //\r\n    6547,  80,  //\r\n    7299,  90,  //\r\n    8051,  100, //\r\n    8803,  110, //\r\n    9555,  120, //\r\n    10308, 130, //\r\n    11060, 140, //\r\n    11812, 150, //\r\n    12564, 160, //\r\n    13316, 170, //\r\n    14068, 180, //\r\n    14820, 190, //\r\n    15573, 200, //\r\n    16325, 210, //\r\n    17077, 220, //\r\n    17829, 230, //\r\n    18581, 240, //\r\n    19333, 250, //\r\n    20085, 260, //\r\n    20838, 270, //\r\n    21590, 280, //\r\n    22342, 290, //\r\n    23094, 300, //\r\n    23846, 310, //\r\n    24598, 320, //\r\n    25350, 330, //\r\n    26103, 340, //\r\n    26855, 350, //\r\n    27607, 360, //\r\n    28359, 370, //\r\n    29111, 380, //\r\n    29863, 390, //\r\n    30615, 400, //\r\n    31368, 410, //\r\n    32120, 420, //\r\n    32872, 430, //\r\n    33624, 440, //\r\n    34376, 450, //\r\n    35128, 460, //\r\n    35880, 470, //\r\n    36632, 480, //\r\n    37385, 490, //\r\n    38137, 500, //\r\n};\r\n#endif\r\nconst int uVtoDegCItems = sizeof(uVtoDegC) / (2 * sizeof(uVtoDegC[0]));\r\n\r\nTemperatureType_t TipThermoModel::convertuVToDegC(uint32_t tipuVDelta) { return Utils::InterpolateLookupTable(uVtoDegC, uVtoDegCItems, tipuVDelta); }\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f103xb.h\r\n * @author  MCD Application Team\r\n * @version V4.2.0\r\n * @date    31-March-2017\r\n * @brief   CMSIS Cortex-M3 Device Peripheral Access Layer Header File.\r\n *          This file contains all the peripheral register's definitions, bits\r\n *          definitions and memory mapping for STM32F1xx devices.\r\n *\r\n *          This file contains:\r\n *           - Data structures and the address mapping for all peripherals\r\n *           - Peripheral's registers declarations and bits definition\r\n *           - Macros to access peripherals registers hardware\r\n *\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/** @addtogroup CMSIS\r\n * @{\r\n */\r\n\r\n/** @addtogroup stm32f103xb\r\n * @{\r\n */\r\n\r\n#ifndef __STM32F103xB_H\r\n#define __STM32F103xB_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/** @addtogroup Configuration_section_for_CMSIS\r\n * @{\r\n */\r\n/**\r\n * @brief Configuration of the Cortex-M3 Processor and Core Peripherals\r\n */\r\n#define __CM3_REV              0x0200U /*!< Core Revision r2p0                           */\r\n#define __MPU_PRESENT          0U      /*!< Other STM32 devices does not provide an MPU  */\r\n#define __NVIC_PRIO_BITS       4U      /*!< STM32 uses 4 Bits for the Priority Levels    */\r\n#define __Vendor_SysTickConfig 0U      /*!< Set to 1 if different SysTick Config is used */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Peripheral_interrupt_number_definition\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief STM32F10x Interrupt Number Definition, according to the selected device\r\n *        in @ref Library_configuration_section\r\n */\r\n\r\n/*!< Interrupt Number Definition */\r\ntypedef enum {\r\n  /******  Cortex-M3 Processor Exceptions Numbers ***************************************************/\r\n  NonMaskableInt_IRQn   = -14, /*!< 2 Non Maskable Interrupt                             */\r\n  HardFault_IRQn        = -13, /*!< 3 Cortex-M3 Hard Fault Interrupt                     */\r\n  MemoryManagement_IRQn = -12, /*!< 4 Cortex-M3 Memory Management Interrupt              */\r\n  BusFault_IRQn         = -11, /*!< 5 Cortex-M3 Bus Fault Interrupt                      */\r\n  UsageFault_IRQn       = -10, /*!< 6 Cortex-M3 Usage Fault Interrupt                    */\r\n  SVCall_IRQn           = -5,  /*!< 11 Cortex-M3 SV Call Interrupt                       */\r\n  DebugMonitor_IRQn     = -4,  /*!< 12 Cortex-M3 Debug Monitor Interrupt                 */\r\n  PendSV_IRQn           = -2,  /*!< 14 Cortex-M3 Pend SV Interrupt                       */\r\n  SysTick_IRQn          = -1,  /*!< 15 Cortex-M3 System Tick Interrupt                   */\r\n\r\n  /******  STM32 specific Interrupt Numbers *********************************************************/\r\n  WWDG_IRQn            = 0,  /*!< Window WatchDog Interrupt                            */\r\n  PVD_IRQn             = 1,  /*!< PVD through EXTI Line detection Interrupt            */\r\n  TAMPER_IRQn          = 2,  /*!< Tamper Interrupt                                     */\r\n  RTC_IRQn             = 3,  /*!< RTC global Interrupt                                 */\r\n  FLASH_IRQn           = 4,  /*!< FLASH global Interrupt                               */\r\n  RCC_IRQn             = 5,  /*!< RCC global Interrupt                                 */\r\n  EXTI0_IRQn           = 6,  /*!< EXTI Line0 Interrupt                                 */\r\n  EXTI1_IRQn           = 7,  /*!< EXTI Line1 Interrupt                                 */\r\n  EXTI2_IRQn           = 8,  /*!< EXTI Line2 Interrupt                                 */\r\n  EXTI3_IRQn           = 9,  /*!< EXTI Line3 Interrupt                                 */\r\n  EXTI4_IRQn           = 10, /*!< EXTI Line4 Interrupt                                 */\r\n  DMA1_Channel1_IRQn   = 11, /*!< DMA1 Channel 1 global Interrupt                      */\r\n  DMA1_Channel2_IRQn   = 12, /*!< DMA1 Channel 2 global Interrupt                      */\r\n  DMA1_Channel3_IRQn   = 13, /*!< DMA1 Channel 3 global Interrupt                      */\r\n  DMA1_Channel4_IRQn   = 14, /*!< DMA1 Channel 4 global Interrupt                      */\r\n  DMA1_Channel5_IRQn   = 15, /*!< DMA1 Channel 5 global Interrupt                      */\r\n  DMA1_Channel6_IRQn   = 16, /*!< DMA1 Channel 6 global Interrupt                      */\r\n  DMA1_Channel7_IRQn   = 17, /*!< DMA1 Channel 7 global Interrupt                      */\r\n  ADC1_2_IRQn          = 18, /*!< ADC1 and ADC2 global Interrupt                       */\r\n  USB_HP_CAN1_TX_IRQn  = 19, /*!< USB Device High Priority or CAN1 TX Interrupts       */\r\n  USB_LP_CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts       */\r\n  CAN1_RX1_IRQn        = 21, /*!< CAN1 RX1 Interrupt                                   */\r\n  CAN1_SCE_IRQn        = 22, /*!< CAN1 SCE Interrupt                                   */\r\n  EXTI9_5_IRQn         = 23, /*!< External Line[9:5] Interrupts                        */\r\n  TIM1_BRK_IRQn        = 24, /*!< TIM1 Break Interrupt                                 */\r\n  TIM1_UP_IRQn         = 25, /*!< TIM1 Update Interrupt                                */\r\n  TIM1_TRG_COM_IRQn    = 26, /*!< TIM1 Trigger and Commutation Interrupt               */\r\n  TIM1_CC_IRQn         = 27, /*!< TIM1 Capture Compare Interrupt                       */\r\n  TIM2_IRQn            = 28, /*!< TIM2 global Interrupt                                */\r\n  TIM3_IRQn            = 29, /*!< TIM3 global Interrupt                                */\r\n  TIM4_IRQn            = 30, /*!< TIM4 global Interrupt                                */\r\n  I2C1_EV_IRQn         = 31, /*!< I2C1 Event Interrupt                                 */\r\n  I2C1_ER_IRQn         = 32, /*!< I2C1 Error Interrupt                                 */\r\n  I2C2_EV_IRQn         = 33, /*!< I2C2 Event Interrupt                                 */\r\n  I2C2_ER_IRQn         = 34, /*!< I2C2 Error Interrupt                                 */\r\n  SPI1_IRQn            = 35, /*!< SPI1 global Interrupt                                */\r\n  SPI2_IRQn            = 36, /*!< SPI2 global Interrupt                                */\r\n  USART1_IRQn          = 37, /*!< USART1 global Interrupt                              */\r\n  USART2_IRQn          = 38, /*!< USART2 global Interrupt                              */\r\n  USART3_IRQn          = 39, /*!< USART3 global Interrupt                              */\r\n  EXTI15_10_IRQn       = 40, /*!< External Line[15:10] Interrupts                      */\r\n  RTC_Alarm_IRQn       = 41, /*!< RTC Alarm through EXTI Line Interrupt                */\r\n  USBWakeUp_IRQn       = 42, /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */\r\n} IRQn_Type;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#include \"core_cm3.h\"\r\n#include \"system_stm32f1xx.h\"\r\n#include <stdint.h>\r\n\r\n/** @addtogroup Peripheral_registers_structures\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief Analog to Digital Converter\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t SR;\r\n  __IO uint32_t CR1;\r\n  __IO uint32_t CR2;\r\n  __IO uint32_t SMPR1;\r\n  __IO uint32_t SMPR2;\r\n  __IO uint32_t JOFR1;\r\n  __IO uint32_t JOFR2;\r\n  __IO uint32_t JOFR3;\r\n  __IO uint32_t JOFR4;\r\n  __IO uint32_t HTR;\r\n  __IO uint32_t LTR;\r\n  __IO uint32_t SQR1;\r\n  __IO uint32_t SQR2;\r\n  __IO uint32_t SQR3;\r\n  __IO uint32_t JSQR;\r\n  __IO uint32_t JDR1;\r\n  __IO uint32_t JDR2;\r\n  __IO uint32_t JDR3;\r\n  __IO uint32_t JDR4;\r\n  __IO uint32_t DR;\r\n} ADC_TypeDef;\r\n\r\ntypedef struct {\r\n  __IO uint32_t SR;  /*!< ADC status register,    used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address         */\r\n  __IO uint32_t CR1; /*!< ADC control register 1, used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address + 0x04  */\r\n  __IO uint32_t CR2; /*!< ADC control register 2, used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address + 0x08  */\r\n  uint32_t      RESERVED[16];\r\n  __IO uint32_t DR; /*!< ADC data register,      used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address + 0x4C  */\r\n} ADC_Common_TypeDef;\r\n\r\n/**\r\n * @brief Backup Registers\r\n */\r\n\r\ntypedef struct {\r\n  uint32_t      RESERVED0;\r\n  __IO uint32_t DR1;\r\n  __IO uint32_t DR2;\r\n  __IO uint32_t DR3;\r\n  __IO uint32_t DR4;\r\n  __IO uint32_t DR5;\r\n  __IO uint32_t DR6;\r\n  __IO uint32_t DR7;\r\n  __IO uint32_t DR8;\r\n  __IO uint32_t DR9;\r\n  __IO uint32_t DR10;\r\n  __IO uint32_t RTCCR;\r\n  __IO uint32_t CR;\r\n  __IO uint32_t CSR;\r\n} BKP_TypeDef;\r\n\r\n/**\r\n * @brief Controller Area Network TxMailBox\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t TIR;\r\n  __IO uint32_t TDTR;\r\n  __IO uint32_t TDLR;\r\n  __IO uint32_t TDHR;\r\n} CAN_TxMailBox_TypeDef;\r\n\r\n/**\r\n * @brief Controller Area Network FIFOMailBox\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t RIR;\r\n  __IO uint32_t RDTR;\r\n  __IO uint32_t RDLR;\r\n  __IO uint32_t RDHR;\r\n} CAN_FIFOMailBox_TypeDef;\r\n\r\n/**\r\n * @brief Controller Area Network FilterRegister\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t FR1;\r\n  __IO uint32_t FR2;\r\n} CAN_FilterRegister_TypeDef;\r\n\r\n/**\r\n * @brief Controller Area Network\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t              MCR;\r\n  __IO uint32_t              MSR;\r\n  __IO uint32_t              TSR;\r\n  __IO uint32_t              RF0R;\r\n  __IO uint32_t              RF1R;\r\n  __IO uint32_t              IER;\r\n  __IO uint32_t              ESR;\r\n  __IO uint32_t              BTR;\r\n  uint32_t                   RESERVED0[88];\r\n  CAN_TxMailBox_TypeDef      sTxMailBox[3];\r\n  CAN_FIFOMailBox_TypeDef    sFIFOMailBox[2];\r\n  uint32_t                   RESERVED1[12];\r\n  __IO uint32_t              FMR;\r\n  __IO uint32_t              FM1R;\r\n  uint32_t                   RESERVED2;\r\n  __IO uint32_t              FS1R;\r\n  uint32_t                   RESERVED3;\r\n  __IO uint32_t              FFA1R;\r\n  uint32_t                   RESERVED4;\r\n  __IO uint32_t              FA1R;\r\n  uint32_t                   RESERVED5[8];\r\n  CAN_FilterRegister_TypeDef sFilterRegister[14];\r\n} CAN_TypeDef;\r\n\r\n/**\r\n * @brief CRC calculation unit\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t DR;        /*!< CRC Data register,                           Address offset: 0x00 */\r\n  __IO uint8_t  IDR;       /*!< CRC Independent data register,               Address offset: 0x04 */\r\n  uint8_t       RESERVED0; /*!< Reserved,                                    Address offset: 0x05 */\r\n  uint16_t      RESERVED1; /*!< Reserved,                                    Address offset: 0x06 */\r\n  __IO uint32_t CR;        /*!< CRC Control register,                        Address offset: 0x08 */\r\n} CRC_TypeDef;\r\n\r\n/**\r\n * @brief Debug MCU\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t IDCODE;\r\n  __IO uint32_t CR;\r\n} DBGMCU_TypeDef;\r\n\r\n/**\r\n * @brief DMA Controller\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CCR;\r\n  __IO uint32_t CNDTR;\r\n  __IO uint32_t CPAR;\r\n  __IO uint32_t CMAR;\r\n} DMA_Channel_TypeDef;\r\n\r\ntypedef struct {\r\n  __IO uint32_t ISR;\r\n  __IO uint32_t IFCR;\r\n} DMA_TypeDef;\r\n\r\n/**\r\n * @brief External Interrupt/Event Controller\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t IMR;\r\n  __IO uint32_t EMR;\r\n  __IO uint32_t RTSR;\r\n  __IO uint32_t FTSR;\r\n  __IO uint32_t SWIER;\r\n  __IO uint32_t PR;\r\n} EXTI_TypeDef;\r\n\r\n/**\r\n * @brief FLASH Registers\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t ACR;\r\n  __IO uint32_t KEYR;\r\n  __IO uint32_t OPTKEYR;\r\n  __IO uint32_t SR;\r\n  __IO uint32_t CR;\r\n  __IO uint32_t AR;\r\n  __IO uint32_t RESERVED;\r\n  __IO uint32_t OBR;\r\n  __IO uint32_t WRPR;\r\n} FLASH_TypeDef;\r\n\r\n/**\r\n * @brief Option Bytes Registers\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint16_t RDP;\r\n  __IO uint16_t USER;\r\n  __IO uint16_t Data0;\r\n  __IO uint16_t Data1;\r\n  __IO uint16_t WRP0;\r\n  __IO uint16_t WRP1;\r\n  __IO uint16_t WRP2;\r\n  __IO uint16_t WRP3;\r\n} OB_TypeDef;\r\n\r\n/**\r\n * @brief General Purpose I/O\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CRL;\r\n  __IO uint32_t CRH;\r\n  __IO uint32_t IDR;\r\n  __IO uint32_t ODR;\r\n  __IO uint32_t BSRR;\r\n  __IO uint32_t BRR;\r\n  __IO uint32_t LCKR;\r\n} GPIO_TypeDef;\r\n\r\n/**\r\n * @brief Alternate Function I/O\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t EVCR;\r\n  __IO uint32_t MAPR;\r\n  __IO uint32_t EXTICR[4];\r\n  uint32_t      RESERVED0;\r\n  __IO uint32_t MAPR2;\r\n} AFIO_TypeDef;\r\n/**\r\n * @brief Inter Integrated Circuit Interface\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CR1;\r\n  __IO uint32_t CR2;\r\n  __IO uint32_t OAR1;\r\n  __IO uint32_t OAR2;\r\n  __IO uint32_t DR;\r\n  __IO uint32_t SR1;\r\n  __IO uint32_t SR2;\r\n  __IO uint32_t CCR;\r\n  __IO uint32_t TRISE;\r\n} I2C_TypeDef;\r\n\r\n/**\r\n * @brief Independent WATCHDOG\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t KR;  /*!< Key register,                                Address offset: 0x00 */\r\n  __IO uint32_t PR;  /*!< Prescaler register,                          Address offset: 0x04 */\r\n  __IO uint32_t RLR; /*!< Reload register,                             Address offset: 0x08 */\r\n  __IO uint32_t SR;  /*!< Status register,                             Address offset: 0x0C */\r\n} IWDG_TypeDef;\r\n\r\n/**\r\n * @brief Power Control\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CR;\r\n  __IO uint32_t CSR;\r\n} PWR_TypeDef;\r\n\r\n/**\r\n * @brief Reset and Clock Control\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CR;\r\n  __IO uint32_t CFGR;\r\n  __IO uint32_t CIR;\r\n  __IO uint32_t APB2RSTR;\r\n  __IO uint32_t APB1RSTR;\r\n  __IO uint32_t AHBENR;\r\n  __IO uint32_t APB2ENR;\r\n  __IO uint32_t APB1ENR;\r\n  __IO uint32_t BDCR;\r\n  __IO uint32_t CSR;\r\n\r\n} RCC_TypeDef;\r\n\r\n/**\r\n * @brief Real-Time Clock\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CRH;\r\n  __IO uint32_t CRL;\r\n  __IO uint32_t PRLH;\r\n  __IO uint32_t PRLL;\r\n  __IO uint32_t DIVH;\r\n  __IO uint32_t DIVL;\r\n  __IO uint32_t CNTH;\r\n  __IO uint32_t CNTL;\r\n  __IO uint32_t ALRH;\r\n  __IO uint32_t ALRL;\r\n} RTC_TypeDef;\r\n\r\n/**\r\n * @brief SD host Interface\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t POWER;\r\n  __IO uint32_t CLKCR;\r\n  __IO uint32_t ARG;\r\n  __IO uint32_t CMD;\r\n  __I uint32_t  RESPCMD;\r\n  __I uint32_t  RESP1;\r\n  __I uint32_t  RESP2;\r\n  __I uint32_t  RESP3;\r\n  __I uint32_t  RESP4;\r\n  __IO uint32_t DTIMER;\r\n  __IO uint32_t DLEN;\r\n  __IO uint32_t DCTRL;\r\n  __I uint32_t  DCOUNT;\r\n  __I uint32_t  STA;\r\n  __IO uint32_t ICR;\r\n  __IO uint32_t MASK;\r\n  uint32_t      RESERVED0[2];\r\n  __I uint32_t  FIFOCNT;\r\n  uint32_t      RESERVED1[13];\r\n  __IO uint32_t FIFO;\r\n} SDIO_TypeDef;\r\n\r\n/**\r\n * @brief Serial Peripheral Interface\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CR1;\r\n  __IO uint32_t CR2;\r\n  __IO uint32_t SR;\r\n  __IO uint32_t DR;\r\n  __IO uint32_t CRCPR;\r\n  __IO uint32_t RXCRCR;\r\n  __IO uint32_t TXCRCR;\r\n  __IO uint32_t I2SCFGR;\r\n} SPI_TypeDef;\r\n\r\n/**\r\n * @brief TIM Timers\r\n */\r\ntypedef struct {\r\n  __IO uint32_t CR1;   /*!< TIM control register 1,                      Address offset: 0x00 */\r\n  __IO uint32_t CR2;   /*!< TIM control register 2,                      Address offset: 0x04 */\r\n  __IO uint32_t SMCR;  /*!< TIM slave Mode Control register,             Address offset: 0x08 */\r\n  __IO uint32_t DIER;  /*!< TIM DMA/interrupt enable register,           Address offset: 0x0C */\r\n  __IO uint32_t SR;    /*!< TIM status register,                         Address offset: 0x10 */\r\n  __IO uint32_t EGR;   /*!< TIM event generation register,               Address offset: 0x14 */\r\n  __IO uint32_t CCMR1; /*!< TIM  capture/compare mode register 1,        Address offset: 0x18 */\r\n  __IO uint32_t CCMR2; /*!< TIM  capture/compare mode register 2,        Address offset: 0x1C */\r\n  __IO uint32_t CCER;  /*!< TIM capture/compare enable register,         Address offset: 0x20 */\r\n  __IO uint32_t CNT;   /*!< TIM counter register,                        Address offset: 0x24 */\r\n  __IO uint32_t PSC;   /*!< TIM prescaler register,                      Address offset: 0x28 */\r\n  __IO uint32_t ARR;   /*!< TIM auto-reload register,                    Address offset: 0x2C */\r\n  __IO uint32_t RCR;   /*!< TIM  repetition counter register,            Address offset: 0x30 */\r\n  __IO uint32_t CCR1;  /*!< TIM capture/compare register 1,              Address offset: 0x34 */\r\n  __IO uint32_t CCR2;  /*!< TIM capture/compare register 2,              Address offset: 0x38 */\r\n  __IO uint32_t CCR3;  /*!< TIM capture/compare register 3,              Address offset: 0x3C */\r\n  __IO uint32_t CCR4;  /*!< TIM capture/compare register 4,              Address offset: 0x40 */\r\n  __IO uint32_t BDTR;  /*!< TIM break and dead-time register,            Address offset: 0x44 */\r\n  __IO uint32_t DCR;   /*!< TIM DMA control register,                    Address offset: 0x48 */\r\n  __IO uint32_t DMAR;  /*!< TIM DMA address for full transfer register,  Address offset: 0x4C */\r\n  __IO uint32_t OR;    /*!< TIM option register,                         Address offset: 0x50 */\r\n} TIM_TypeDef;\r\n\r\n/**\r\n * @brief Universal Synchronous Asynchronous Receiver Transmitter\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t SR;   /*!< USART Status register,                   Address offset: 0x00 */\r\n  __IO uint32_t DR;   /*!< USART Data register,                     Address offset: 0x04 */\r\n  __IO uint32_t BRR;  /*!< USART Baud rate register,                Address offset: 0x08 */\r\n  __IO uint32_t CR1;  /*!< USART Control register 1,                Address offset: 0x0C */\r\n  __IO uint32_t CR2;  /*!< USART Control register 2,                Address offset: 0x10 */\r\n  __IO uint32_t CR3;  /*!< USART Control register 3,                Address offset: 0x14 */\r\n  __IO uint32_t GTPR; /*!< USART Guard time and prescaler register, Address offset: 0x18 */\r\n} USART_TypeDef;\r\n\r\n/**\r\n * @brief Universal Serial Bus Full Speed Device\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint16_t EP0R;          /*!< USB Endpoint 0 register,                   Address offset: 0x00 */\r\n  __IO uint16_t RESERVED0;     /*!< Reserved */\r\n  __IO uint16_t EP1R;          /*!< USB Endpoint 1 register,                   Address offset: 0x04 */\r\n  __IO uint16_t RESERVED1;     /*!< Reserved */\r\n  __IO uint16_t EP2R;          /*!< USB Endpoint 2 register,                   Address offset: 0x08 */\r\n  __IO uint16_t RESERVED2;     /*!< Reserved */\r\n  __IO uint16_t EP3R;          /*!< USB Endpoint 3 register,                   Address offset: 0x0C */\r\n  __IO uint16_t RESERVED3;     /*!< Reserved */\r\n  __IO uint16_t EP4R;          /*!< USB Endpoint 4 register,                   Address offset: 0x10 */\r\n  __IO uint16_t RESERVED4;     /*!< Reserved */\r\n  __IO uint16_t EP5R;          /*!< USB Endpoint 5 register,                   Address offset: 0x14 */\r\n  __IO uint16_t RESERVED5;     /*!< Reserved */\r\n  __IO uint16_t EP6R;          /*!< USB Endpoint 6 register,                   Address offset: 0x18 */\r\n  __IO uint16_t RESERVED6;     /*!< Reserved */\r\n  __IO uint16_t EP7R;          /*!< USB Endpoint 7 register,                   Address offset: 0x1C */\r\n  __IO uint16_t RESERVED7[17]; /*!< Reserved */\r\n  __IO uint16_t CNTR;          /*!< Control register,                          Address offset: 0x40 */\r\n  __IO uint16_t RESERVED8;     /*!< Reserved */\r\n  __IO uint16_t ISTR;          /*!< Interrupt status register,                 Address offset: 0x44 */\r\n  __IO uint16_t RESERVED9;     /*!< Reserved */\r\n  __IO uint16_t FNR;           /*!< Frame number register,                     Address offset: 0x48 */\r\n  __IO uint16_t RESERVEDA;     /*!< Reserved */\r\n  __IO uint16_t DADDR;         /*!< Device address register,                   Address offset: 0x4C */\r\n  __IO uint16_t RESERVEDB;     /*!< Reserved */\r\n  __IO uint16_t BTABLE;        /*!< Buffer Table address register,             Address offset: 0x50 */\r\n  __IO uint16_t RESERVEDC;     /*!< Reserved */\r\n} USB_TypeDef;\r\n\r\n/**\r\n * @brief Window WATCHDOG\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CR;  /*!< WWDG Control register,       Address offset: 0x00 */\r\n  __IO uint32_t CFR; /*!< WWDG Configuration register, Address offset: 0x04 */\r\n  __IO uint32_t SR;  /*!< WWDG Status register,        Address offset: 0x08 */\r\n} WWDG_TypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Peripheral_memory_map\r\n * @{\r\n */\r\n\r\n#define FLASH_BASE      0x08000000U /*!< FLASH base address in the alias region */\r\n#define FLASH_BANK1_END 0x0801FFFFU /*!< FLASH END address of bank1 */\r\n#define SRAM_BASE       0x20000000U /*!< SRAM base address in the alias region */\r\n#define PERIPH_BASE     0x40000000U /*!< Peripheral base address in the alias region */\r\n\r\n#define SRAM_BB_BASE   0x22000000U /*!< SRAM base address in the bit-band region */\r\n#define PERIPH_BB_BASE 0x42000000U /*!< Peripheral base address in the bit-band region */\r\n\r\n/*!< Peripheral memory map */\r\n#define APB1PERIPH_BASE PERIPH_BASE\r\n#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000U)\r\n#define AHBPERIPH_BASE  (PERIPH_BASE + 0x00020000U)\r\n\r\n#define TIM2_BASE   (APB1PERIPH_BASE + 0x00000000U)\r\n#define TIM3_BASE   (APB1PERIPH_BASE + 0x00000400U)\r\n#define TIM4_BASE   (APB1PERIPH_BASE + 0x00000800U)\r\n#define RTC_BASE    (APB1PERIPH_BASE + 0x00002800U)\r\n#define WWDG_BASE   (APB1PERIPH_BASE + 0x00002C00U)\r\n#define IWDG_BASE   (APB1PERIPH_BASE + 0x00003000U)\r\n#define SPI2_BASE   (APB1PERIPH_BASE + 0x00003800U)\r\n#define USART2_BASE (APB1PERIPH_BASE + 0x00004400U)\r\n#define USART3_BASE (APB1PERIPH_BASE + 0x00004800U)\r\n#define I2C1_BASE   (APB1PERIPH_BASE + 0x00005400U)\r\n#define I2C2_BASE   (APB1PERIPH_BASE + 0x5800)\r\n#define CAN1_BASE   (APB1PERIPH_BASE + 0x00006400U)\r\n#define BKP_BASE    (APB1PERIPH_BASE + 0x00006C00U)\r\n#define PWR_BASE    (APB1PERIPH_BASE + 0x00007000U)\r\n#define AFIO_BASE   (APB2PERIPH_BASE + 0x00000000U)\r\n#define EXTI_BASE   (APB2PERIPH_BASE + 0x00000400U)\r\n#define GPIOA_BASE  (APB2PERIPH_BASE + 0x00000800U)\r\n#define GPIOB_BASE  (APB2PERIPH_BASE + 0x00000C00U)\r\n#define GPIOC_BASE  (APB2PERIPH_BASE + 0x00001000U)\r\n#define GPIOD_BASE  (APB2PERIPH_BASE + 0x00001400U)\r\n#define GPIOE_BASE  (APB2PERIPH_BASE + 0x00001800U)\r\n#define ADC1_BASE   (APB2PERIPH_BASE + 0x00002400U)\r\n#define ADC2_BASE   (APB2PERIPH_BASE + 0x00002800U)\r\n#define TIM1_BASE   (APB2PERIPH_BASE + 0x00002C00U)\r\n#define SPI1_BASE   (APB2PERIPH_BASE + 0x00003000U)\r\n#define USART1_BASE (APB2PERIPH_BASE + 0x00003800U)\r\n\r\n#define SDIO_BASE (PERIPH_BASE + 0x00018000U)\r\n\r\n#define DMA1_BASE          (AHBPERIPH_BASE + 0x00000000U)\r\n#define DMA1_Channel1_BASE (AHBPERIPH_BASE + 0x00000008U)\r\n#define DMA1_Channel2_BASE (AHBPERIPH_BASE + 0x0000001CU)\r\n#define DMA1_Channel3_BASE (AHBPERIPH_BASE + 0x00000030U)\r\n#define DMA1_Channel4_BASE (AHBPERIPH_BASE + 0x00000044U)\r\n#define DMA1_Channel5_BASE (AHBPERIPH_BASE + 0x00000058U)\r\n#define DMA1_Channel6_BASE (AHBPERIPH_BASE + 0x0000006CU)\r\n#define DMA1_Channel7_BASE (AHBPERIPH_BASE + 0x00000080U)\r\n#define RCC_BASE           (AHBPERIPH_BASE + 0x00001000U)\r\n#define CRC_BASE           (AHBPERIPH_BASE + 0x00003000U)\r\n\r\n#define FLASH_R_BASE   (AHBPERIPH_BASE + 0x00002000U) /*!< Flash registers base address */\r\n#define FLASHSIZE_BASE 0x1FFFF7E0U                    /*!< FLASH Size register base address */\r\n#define UID_BASE       0x1FFFF7E8U                    /*!< Unique device ID register base address */\r\n#define OB_BASE        0x1FFFF800U                    /*!< Flash Option Bytes base address */\r\n\r\n#define DBGMCU_BASE 0xE0042000U /*!< Debug MCU registers base address */\r\n\r\n/* USB device FS */\r\n#define USB_BASE    (APB1PERIPH_BASE + 0x00005C00U) /*!< USB_IP Peripheral Registers base address */\r\n#define USB_PMAADDR (APB1PERIPH_BASE + 0x00006000U) /*!< USB_IP Packet Memory Area base address */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Peripheral_declaration\r\n * @{\r\n */\r\n\r\n#define TIM2          ((TIM_TypeDef *)TIM2_BASE)\r\n#define TIM3          ((TIM_TypeDef *)TIM3_BASE)\r\n#define TIM4          ((TIM_TypeDef *)TIM4_BASE)\r\n#define RTC           ((RTC_TypeDef *)RTC_BASE)\r\n#define WWDG          ((WWDG_TypeDef *)WWDG_BASE)\r\n#define IWDG          ((IWDG_TypeDef *)IWDG_BASE)\r\n#define SPI2          ((SPI_TypeDef *)SPI2_BASE)\r\n#define USART2        ((USART_TypeDef *)USART2_BASE)\r\n#define USART3        ((USART_TypeDef *)USART3_BASE)\r\n#define I2C1          ((I2C_TypeDef *)I2C1_BASE)\r\n#define I2C2          ((I2C_TypeDef *)I2C2_BASE)\r\n#define USB           ((USB_TypeDef *)USB_BASE)\r\n#define CAN1          ((CAN_TypeDef *)CAN1_BASE)\r\n#define BKP           ((BKP_TypeDef *)BKP_BASE)\r\n#define PWR           ((PWR_TypeDef *)PWR_BASE)\r\n#define AFIO          ((AFIO_TypeDef *)AFIO_BASE)\r\n#define EXTI          ((EXTI_TypeDef *)EXTI_BASE)\r\n#define GPIOA         ((GPIO_TypeDef *)GPIOA_BASE)\r\n#define GPIOB         ((GPIO_TypeDef *)GPIOB_BASE)\r\n#define GPIOC         ((GPIO_TypeDef *)GPIOC_BASE)\r\n#define GPIOD         ((GPIO_TypeDef *)GPIOD_BASE)\r\n#define GPIOE         ((GPIO_TypeDef *)GPIOE_BASE)\r\n#define ADC1          ((ADC_TypeDef *)ADC1_BASE)\r\n#define ADC2          ((ADC_TypeDef *)ADC2_BASE)\r\n#define ADC12_COMMON  ((ADC_Common_TypeDef *)ADC1_BASE)\r\n#define TIM1          ((TIM_TypeDef *)TIM1_BASE)\r\n#define SPI1          ((SPI_TypeDef *)SPI1_BASE)\r\n#define USART1        ((USART_TypeDef *)USART1_BASE)\r\n#define SDIO          ((SDIO_TypeDef *)SDIO_BASE)\r\n#define DMA1          ((DMA_TypeDef *)DMA1_BASE)\r\n#define DMA1_Channel1 ((DMA_Channel_TypeDef *)DMA1_Channel1_BASE)\r\n#define DMA1_Channel2 ((DMA_Channel_TypeDef *)DMA1_Channel2_BASE)\r\n#define DMA1_Channel3 ((DMA_Channel_TypeDef *)DMA1_Channel3_BASE)\r\n#define DMA1_Channel4 ((DMA_Channel_TypeDef *)DMA1_Channel4_BASE)\r\n#define DMA1_Channel5 ((DMA_Channel_TypeDef *)DMA1_Channel5_BASE)\r\n#define DMA1_Channel6 ((DMA_Channel_TypeDef *)DMA1_Channel6_BASE)\r\n#define DMA1_Channel7 ((DMA_Channel_TypeDef *)DMA1_Channel7_BASE)\r\n#define RCC           ((RCC_TypeDef *)RCC_BASE)\r\n#define CRC           ((CRC_TypeDef *)CRC_BASE)\r\n#define FLASH         ((FLASH_TypeDef *)FLASH_R_BASE)\r\n#define OB            ((OB_TypeDef *)OB_BASE)\r\n#define DBGMCU        ((DBGMCU_TypeDef *)DBGMCU_BASE)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Exported_constants\r\n * @{\r\n */\r\n\r\n/** @addtogroup Peripheral_Registers_Bits_Definition\r\n * @{\r\n */\r\n\r\n/******************************************************************************/\r\n/*                         Peripheral Registers_Bits_Definition               */\r\n/******************************************************************************/\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                       CRC calculation unit (CRC)                           */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for CRC_DR register  *********************/\r\n#define CRC_DR_DR_Pos (0U)\r\n#define CRC_DR_DR_Msk (0xFFFFFFFFU << CRC_DR_DR_Pos) /*!< 0xFFFFFFFF */\r\n#define CRC_DR_DR     CRC_DR_DR_Msk                  /*!< Data register bits */\r\n\r\n/*******************  Bit definition for CRC_IDR register  ********************/\r\n#define CRC_IDR_IDR_Pos (0U)\r\n#define CRC_IDR_IDR_Msk (0xFFU << CRC_IDR_IDR_Pos) /*!< 0x000000FF */\r\n#define CRC_IDR_IDR     CRC_IDR_IDR_Msk            /*!< General-purpose 8-bit data register bits */\r\n\r\n/********************  Bit definition for CRC_CR register  ********************/\r\n#define CRC_CR_RESET_Pos (0U)\r\n#define CRC_CR_RESET_Msk (0x1U << CRC_CR_RESET_Pos) /*!< 0x00000001 */\r\n#define CRC_CR_RESET     CRC_CR_RESET_Msk           /*!< RESET bit */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                             Power Control                                  */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/********************  Bit definition for PWR_CR register  ********************/\r\n#define PWR_CR_LPDS_Pos (0U)\r\n#define PWR_CR_LPDS_Msk (0x1U << PWR_CR_LPDS_Pos) /*!< 0x00000001 */\r\n#define PWR_CR_LPDS     PWR_CR_LPDS_Msk           /*!< Low-Power Deepsleep */\r\n#define PWR_CR_PDDS_Pos (1U)\r\n#define PWR_CR_PDDS_Msk (0x1U << PWR_CR_PDDS_Pos) /*!< 0x00000002 */\r\n#define PWR_CR_PDDS     PWR_CR_PDDS_Msk           /*!< Power Down Deepsleep */\r\n#define PWR_CR_CWUF_Pos (2U)\r\n#define PWR_CR_CWUF_Msk (0x1U << PWR_CR_CWUF_Pos) /*!< 0x00000004 */\r\n#define PWR_CR_CWUF     PWR_CR_CWUF_Msk           /*!< Clear Wakeup Flag */\r\n#define PWR_CR_CSBF_Pos (3U)\r\n#define PWR_CR_CSBF_Msk (0x1U << PWR_CR_CSBF_Pos) /*!< 0x00000008 */\r\n#define PWR_CR_CSBF     PWR_CR_CSBF_Msk           /*!< Clear Standby Flag */\r\n#define PWR_CR_PVDE_Pos (4U)\r\n#define PWR_CR_PVDE_Msk (0x1U << PWR_CR_PVDE_Pos) /*!< 0x00000010 */\r\n#define PWR_CR_PVDE     PWR_CR_PVDE_Msk           /*!< Power Voltage Detector Enable */\r\n\r\n#define PWR_CR_PLS_Pos (5U)\r\n#define PWR_CR_PLS_Msk (0x7U << PWR_CR_PLS_Pos) /*!< 0x000000E0 */\r\n#define PWR_CR_PLS     PWR_CR_PLS_Msk           /*!< PLS[2:0] bits (PVD Level Selection) */\r\n#define PWR_CR_PLS_0   (0x1U << PWR_CR_PLS_Pos) /*!< 0x00000020 */\r\n#define PWR_CR_PLS_1   (0x2U << PWR_CR_PLS_Pos) /*!< 0x00000040 */\r\n#define PWR_CR_PLS_2   (0x4U << PWR_CR_PLS_Pos) /*!< 0x00000080 */\r\n\r\n/*!< PVD level configuration */\r\n#define PWR_CR_PLS_LEV0 0x00000000U /*!< PVD level 2.2V */\r\n#define PWR_CR_PLS_LEV1 0x00000020U /*!< PVD level 2.3V */\r\n#define PWR_CR_PLS_LEV2 0x00000040U /*!< PVD level 2.4V */\r\n#define PWR_CR_PLS_LEV3 0x00000060U /*!< PVD level 2.5V */\r\n#define PWR_CR_PLS_LEV4 0x00000080U /*!< PVD level 2.6V */\r\n#define PWR_CR_PLS_LEV5 0x000000A0U /*!< PVD level 2.7V */\r\n#define PWR_CR_PLS_LEV6 0x000000C0U /*!< PVD level 2.8V */\r\n#define PWR_CR_PLS_LEV7 0x000000E0U /*!< PVD level 2.9V */\r\n\r\n/* Legacy defines */\r\n#define PWR_CR_PLS_2V2 PWR_CR_PLS_LEV0\r\n#define PWR_CR_PLS_2V3 PWR_CR_PLS_LEV1\r\n#define PWR_CR_PLS_2V4 PWR_CR_PLS_LEV2\r\n#define PWR_CR_PLS_2V5 PWR_CR_PLS_LEV3\r\n#define PWR_CR_PLS_2V6 PWR_CR_PLS_LEV4\r\n#define PWR_CR_PLS_2V7 PWR_CR_PLS_LEV5\r\n#define PWR_CR_PLS_2V8 PWR_CR_PLS_LEV6\r\n#define PWR_CR_PLS_2V9 PWR_CR_PLS_LEV7\r\n\r\n#define PWR_CR_DBP_Pos (8U)\r\n#define PWR_CR_DBP_Msk (0x1U << PWR_CR_DBP_Pos) /*!< 0x00000100 */\r\n#define PWR_CR_DBP     PWR_CR_DBP_Msk           /*!< Disable Backup Domain write protection */\r\n\r\n/*******************  Bit definition for PWR_CSR register  ********************/\r\n#define PWR_CSR_WUF_Pos  (0U)\r\n#define PWR_CSR_WUF_Msk  (0x1U << PWR_CSR_WUF_Pos) /*!< 0x00000001 */\r\n#define PWR_CSR_WUF      PWR_CSR_WUF_Msk           /*!< Wakeup Flag */\r\n#define PWR_CSR_SBF_Pos  (1U)\r\n#define PWR_CSR_SBF_Msk  (0x1U << PWR_CSR_SBF_Pos) /*!< 0x00000002 */\r\n#define PWR_CSR_SBF      PWR_CSR_SBF_Msk           /*!< Standby Flag */\r\n#define PWR_CSR_PVDO_Pos (2U)\r\n#define PWR_CSR_PVDO_Msk (0x1U << PWR_CSR_PVDO_Pos) /*!< 0x00000004 */\r\n#define PWR_CSR_PVDO     PWR_CSR_PVDO_Msk           /*!< PVD Output */\r\n#define PWR_CSR_EWUP_Pos (8U)\r\n#define PWR_CSR_EWUP_Msk (0x1U << PWR_CSR_EWUP_Pos) /*!< 0x00000100 */\r\n#define PWR_CSR_EWUP     PWR_CSR_EWUP_Msk           /*!< Enable WKUP pin */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                            Backup registers                                */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for BKP_DR1 register  ********************/\r\n#define BKP_DR1_D_Pos (0U)\r\n#define BKP_DR1_D_Msk (0xFFFFU << BKP_DR1_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR1_D     BKP_DR1_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR2 register  ********************/\r\n#define BKP_DR2_D_Pos (0U)\r\n#define BKP_DR2_D_Msk (0xFFFFU << BKP_DR2_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR2_D     BKP_DR2_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR3 register  ********************/\r\n#define BKP_DR3_D_Pos (0U)\r\n#define BKP_DR3_D_Msk (0xFFFFU << BKP_DR3_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR3_D     BKP_DR3_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR4 register  ********************/\r\n#define BKP_DR4_D_Pos (0U)\r\n#define BKP_DR4_D_Msk (0xFFFFU << BKP_DR4_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR4_D     BKP_DR4_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR5 register  ********************/\r\n#define BKP_DR5_D_Pos (0U)\r\n#define BKP_DR5_D_Msk (0xFFFFU << BKP_DR5_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR5_D     BKP_DR5_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR6 register  ********************/\r\n#define BKP_DR6_D_Pos (0U)\r\n#define BKP_DR6_D_Msk (0xFFFFU << BKP_DR6_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR6_D     BKP_DR6_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR7 register  ********************/\r\n#define BKP_DR7_D_Pos (0U)\r\n#define BKP_DR7_D_Msk (0xFFFFU << BKP_DR7_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR7_D     BKP_DR7_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR8 register  ********************/\r\n#define BKP_DR8_D_Pos (0U)\r\n#define BKP_DR8_D_Msk (0xFFFFU << BKP_DR8_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR8_D     BKP_DR8_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR9 register  ********************/\r\n#define BKP_DR9_D_Pos (0U)\r\n#define BKP_DR9_D_Msk (0xFFFFU << BKP_DR9_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR9_D     BKP_DR9_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR10 register  *******************/\r\n#define BKP_DR10_D_Pos (0U)\r\n#define BKP_DR10_D_Msk (0xFFFFU << BKP_DR10_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR10_D     BKP_DR10_D_Msk              /*!< Backup data */\r\n\r\n#define RTC_BKP_NUMBER 10\r\n\r\n/******************  Bit definition for BKP_RTCCR register  *******************/\r\n#define BKP_RTCCR_CAL_Pos  (0U)\r\n#define BKP_RTCCR_CAL_Msk  (0x7FU << BKP_RTCCR_CAL_Pos) /*!< 0x0000007F */\r\n#define BKP_RTCCR_CAL      BKP_RTCCR_CAL_Msk            /*!< Calibration value */\r\n#define BKP_RTCCR_CCO_Pos  (7U)\r\n#define BKP_RTCCR_CCO_Msk  (0x1U << BKP_RTCCR_CCO_Pos) /*!< 0x00000080 */\r\n#define BKP_RTCCR_CCO      BKP_RTCCR_CCO_Msk           /*!< Calibration Clock Output */\r\n#define BKP_RTCCR_ASOE_Pos (8U)\r\n#define BKP_RTCCR_ASOE_Msk (0x1U << BKP_RTCCR_ASOE_Pos) /*!< 0x00000100 */\r\n#define BKP_RTCCR_ASOE     BKP_RTCCR_ASOE_Msk           /*!< Alarm or Second Output Enable */\r\n#define BKP_RTCCR_ASOS_Pos (9U)\r\n#define BKP_RTCCR_ASOS_Msk (0x1U << BKP_RTCCR_ASOS_Pos) /*!< 0x00000200 */\r\n#define BKP_RTCCR_ASOS     BKP_RTCCR_ASOS_Msk           /*!< Alarm or Second Output Selection */\r\n\r\n/********************  Bit definition for BKP_CR register  ********************/\r\n#define BKP_CR_TPE_Pos  (0U)\r\n#define BKP_CR_TPE_Msk  (0x1U << BKP_CR_TPE_Pos) /*!< 0x00000001 */\r\n#define BKP_CR_TPE      BKP_CR_TPE_Msk           /*!< TAMPER pin enable */\r\n#define BKP_CR_TPAL_Pos (1U)\r\n#define BKP_CR_TPAL_Msk (0x1U << BKP_CR_TPAL_Pos) /*!< 0x00000002 */\r\n#define BKP_CR_TPAL     BKP_CR_TPAL_Msk           /*!< TAMPER pin active level */\r\n\r\n/*******************  Bit definition for BKP_CSR register  ********************/\r\n#define BKP_CSR_CTE_Pos  (0U)\r\n#define BKP_CSR_CTE_Msk  (0x1U << BKP_CSR_CTE_Pos) /*!< 0x00000001 */\r\n#define BKP_CSR_CTE      BKP_CSR_CTE_Msk           /*!< Clear Tamper event */\r\n#define BKP_CSR_CTI_Pos  (1U)\r\n#define BKP_CSR_CTI_Msk  (0x1U << BKP_CSR_CTI_Pos) /*!< 0x00000002 */\r\n#define BKP_CSR_CTI      BKP_CSR_CTI_Msk           /*!< Clear Tamper Interrupt */\r\n#define BKP_CSR_TPIE_Pos (2U)\r\n#define BKP_CSR_TPIE_Msk (0x1U << BKP_CSR_TPIE_Pos) /*!< 0x00000004 */\r\n#define BKP_CSR_TPIE     BKP_CSR_TPIE_Msk           /*!< TAMPER Pin interrupt enable */\r\n#define BKP_CSR_TEF_Pos  (8U)\r\n#define BKP_CSR_TEF_Msk  (0x1U << BKP_CSR_TEF_Pos) /*!< 0x00000100 */\r\n#define BKP_CSR_TEF      BKP_CSR_TEF_Msk           /*!< Tamper Event Flag */\r\n#define BKP_CSR_TIF_Pos  (9U)\r\n#define BKP_CSR_TIF_Msk  (0x1U << BKP_CSR_TIF_Pos) /*!< 0x00000200 */\r\n#define BKP_CSR_TIF      BKP_CSR_TIF_Msk           /*!< Tamper Interrupt Flag */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                         Reset and Clock Control                            */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/********************  Bit definition for RCC_CR register  ********************/\r\n#define RCC_CR_HSION_Pos   (0U)\r\n#define RCC_CR_HSION_Msk   (0x1U << RCC_CR_HSION_Pos) /*!< 0x00000001 */\r\n#define RCC_CR_HSION       RCC_CR_HSION_Msk           /*!< Internal High Speed clock enable */\r\n#define RCC_CR_HSIRDY_Pos  (1U)\r\n#define RCC_CR_HSIRDY_Msk  (0x1U << RCC_CR_HSIRDY_Pos) /*!< 0x00000002 */\r\n#define RCC_CR_HSIRDY      RCC_CR_HSIRDY_Msk           /*!< Internal High Speed clock ready flag */\r\n#define RCC_CR_HSITRIM_Pos (3U)\r\n#define RCC_CR_HSITRIM_Msk (0x1FU << RCC_CR_HSITRIM_Pos) /*!< 0x000000F8 */\r\n#define RCC_CR_HSITRIM     RCC_CR_HSITRIM_Msk            /*!< Internal High Speed clock trimming */\r\n#define RCC_CR_HSICAL_Pos  (8U)\r\n#define RCC_CR_HSICAL_Msk  (0xFFU << RCC_CR_HSICAL_Pos) /*!< 0x0000FF00 */\r\n#define RCC_CR_HSICAL      RCC_CR_HSICAL_Msk            /*!< Internal High Speed clock Calibration */\r\n#define RCC_CR_HSEON_Pos   (16U)\r\n#define RCC_CR_HSEON_Msk   (0x1U << RCC_CR_HSEON_Pos) /*!< 0x00010000 */\r\n#define RCC_CR_HSEON       RCC_CR_HSEON_Msk           /*!< External High Speed clock enable */\r\n#define RCC_CR_HSERDY_Pos  (17U)\r\n#define RCC_CR_HSERDY_Msk  (0x1U << RCC_CR_HSERDY_Pos) /*!< 0x00020000 */\r\n#define RCC_CR_HSERDY      RCC_CR_HSERDY_Msk           /*!< External High Speed clock ready flag */\r\n#define RCC_CR_HSEBYP_Pos  (18U)\r\n#define RCC_CR_HSEBYP_Msk  (0x1U << RCC_CR_HSEBYP_Pos) /*!< 0x00040000 */\r\n#define RCC_CR_HSEBYP      RCC_CR_HSEBYP_Msk           /*!< External High Speed clock Bypass */\r\n#define RCC_CR_CSSON_Pos   (19U)\r\n#define RCC_CR_CSSON_Msk   (0x1U << RCC_CR_CSSON_Pos) /*!< 0x00080000 */\r\n#define RCC_CR_CSSON       RCC_CR_CSSON_Msk           /*!< Clock Security System enable */\r\n#define RCC_CR_PLLON_Pos   (24U)\r\n#define RCC_CR_PLLON_Msk   (0x1U << RCC_CR_PLLON_Pos) /*!< 0x01000000 */\r\n#define RCC_CR_PLLON       RCC_CR_PLLON_Msk           /*!< PLL enable */\r\n#define RCC_CR_PLLRDY_Pos  (25U)\r\n#define RCC_CR_PLLRDY_Msk  (0x1U << RCC_CR_PLLRDY_Pos) /*!< 0x02000000 */\r\n#define RCC_CR_PLLRDY      RCC_CR_PLLRDY_Msk           /*!< PLL clock ready flag */\r\n\r\n/*******************  Bit definition for RCC_CFGR register  *******************/\r\n/*!< SW configuration */\r\n#define RCC_CFGR_SW_Pos (0U)\r\n#define RCC_CFGR_SW_Msk (0x3U << RCC_CFGR_SW_Pos) /*!< 0x00000003 */\r\n#define RCC_CFGR_SW     RCC_CFGR_SW_Msk           /*!< SW[1:0] bits (System clock Switch) */\r\n#define RCC_CFGR_SW_0   (0x1U << RCC_CFGR_SW_Pos) /*!< 0x00000001 */\r\n#define RCC_CFGR_SW_1   (0x2U << RCC_CFGR_SW_Pos) /*!< 0x00000002 */\r\n\r\n#define RCC_CFGR_SW_HSI 0x00000000U /*!< HSI selected as system clock */\r\n#define RCC_CFGR_SW_HSE 0x00000001U /*!< HSE selected as system clock */\r\n#define RCC_CFGR_SW_PLL 0x00000002U /*!< PLL selected as system clock */\r\n\r\n/*!< SWS configuration */\r\n#define RCC_CFGR_SWS_Pos (2U)\r\n#define RCC_CFGR_SWS_Msk (0x3U << RCC_CFGR_SWS_Pos) /*!< 0x0000000C */\r\n#define RCC_CFGR_SWS     RCC_CFGR_SWS_Msk           /*!< SWS[1:0] bits (System Clock Switch Status) */\r\n#define RCC_CFGR_SWS_0   (0x1U << RCC_CFGR_SWS_Pos) /*!< 0x00000004 */\r\n#define RCC_CFGR_SWS_1   (0x2U << RCC_CFGR_SWS_Pos) /*!< 0x00000008 */\r\n\r\n#define RCC_CFGR_SWS_HSI 0x00000000U /*!< HSI oscillator used as system clock */\r\n#define RCC_CFGR_SWS_HSE 0x00000004U /*!< HSE oscillator used as system clock */\r\n#define RCC_CFGR_SWS_PLL 0x00000008U /*!< PLL used as system clock */\r\n\r\n/*!< HPRE configuration */\r\n#define RCC_CFGR_HPRE_Pos (4U)\r\n#define RCC_CFGR_HPRE_Msk (0xFU << RCC_CFGR_HPRE_Pos) /*!< 0x000000F0 */\r\n#define RCC_CFGR_HPRE     RCC_CFGR_HPRE_Msk           /*!< HPRE[3:0] bits (AHB prescaler) */\r\n#define RCC_CFGR_HPRE_0   (0x1U << RCC_CFGR_HPRE_Pos) /*!< 0x00000010 */\r\n#define RCC_CFGR_HPRE_1   (0x2U << RCC_CFGR_HPRE_Pos) /*!< 0x00000020 */\r\n#define RCC_CFGR_HPRE_2   (0x4U << RCC_CFGR_HPRE_Pos) /*!< 0x00000040 */\r\n#define RCC_CFGR_HPRE_3   (0x8U << RCC_CFGR_HPRE_Pos) /*!< 0x00000080 */\r\n\r\n#define RCC_CFGR_HPRE_DIV1   0x00000000U /*!< SYSCLK not divided */\r\n#define RCC_CFGR_HPRE_DIV2   0x00000080U /*!< SYSCLK divided by 2 */\r\n#define RCC_CFGR_HPRE_DIV4   0x00000090U /*!< SYSCLK divided by 4 */\r\n#define RCC_CFGR_HPRE_DIV8   0x000000A0U /*!< SYSCLK divided by 8 */\r\n#define RCC_CFGR_HPRE_DIV16  0x000000B0U /*!< SYSCLK divided by 16 */\r\n#define RCC_CFGR_HPRE_DIV64  0x000000C0U /*!< SYSCLK divided by 64 */\r\n#define RCC_CFGR_HPRE_DIV128 0x000000D0U /*!< SYSCLK divided by 128 */\r\n#define RCC_CFGR_HPRE_DIV256 0x000000E0U /*!< SYSCLK divided by 256 */\r\n#define RCC_CFGR_HPRE_DIV512 0x000000F0U /*!< SYSCLK divided by 512 */\r\n\r\n/*!< PPRE1 configuration */\r\n#define RCC_CFGR_PPRE1_Pos (8U)\r\n#define RCC_CFGR_PPRE1_Msk (0x7U << RCC_CFGR_PPRE1_Pos) /*!< 0x00000700 */\r\n#define RCC_CFGR_PPRE1     RCC_CFGR_PPRE1_Msk           /*!< PRE1[2:0] bits (APB1 prescaler) */\r\n#define RCC_CFGR_PPRE1_0   (0x1U << RCC_CFGR_PPRE1_Pos) /*!< 0x00000100 */\r\n#define RCC_CFGR_PPRE1_1   (0x2U << RCC_CFGR_PPRE1_Pos) /*!< 0x00000200 */\r\n#define RCC_CFGR_PPRE1_2   (0x4U << RCC_CFGR_PPRE1_Pos) /*!< 0x00000400 */\r\n\r\n#define RCC_CFGR_PPRE1_DIV1  0x00000000U /*!< HCLK not divided */\r\n#define RCC_CFGR_PPRE1_DIV2  0x00000400U /*!< HCLK divided by 2 */\r\n#define RCC_CFGR_PPRE1_DIV4  0x00000500U /*!< HCLK divided by 4 */\r\n#define RCC_CFGR_PPRE1_DIV8  0x00000600U /*!< HCLK divided by 8 */\r\n#define RCC_CFGR_PPRE1_DIV16 0x00000700U /*!< HCLK divided by 16 */\r\n\r\n/*!< PPRE2 configuration */\r\n#define RCC_CFGR_PPRE2_Pos (11U)\r\n#define RCC_CFGR_PPRE2_Msk (0x7U << RCC_CFGR_PPRE2_Pos) /*!< 0x00003800 */\r\n#define RCC_CFGR_PPRE2     RCC_CFGR_PPRE2_Msk           /*!< PRE2[2:0] bits (APB2 prescaler) */\r\n#define RCC_CFGR_PPRE2_0   (0x1U << RCC_CFGR_PPRE2_Pos) /*!< 0x00000800 */\r\n#define RCC_CFGR_PPRE2_1   (0x2U << RCC_CFGR_PPRE2_Pos) /*!< 0x00001000 */\r\n#define RCC_CFGR_PPRE2_2   (0x4U << RCC_CFGR_PPRE2_Pos) /*!< 0x00002000 */\r\n\r\n#define RCC_CFGR_PPRE2_DIV1  0x00000000U /*!< HCLK not divided */\r\n#define RCC_CFGR_PPRE2_DIV2  0x00002000U /*!< HCLK divided by 2 */\r\n#define RCC_CFGR_PPRE2_DIV4  0x00002800U /*!< HCLK divided by 4 */\r\n#define RCC_CFGR_PPRE2_DIV8  0x00003000U /*!< HCLK divided by 8 */\r\n#define RCC_CFGR_PPRE2_DIV16 0x00003800U /*!< HCLK divided by 16 */\r\n\r\n/*!< ADCPPRE configuration */\r\n#define RCC_CFGR_ADCPRE_Pos (14U)\r\n#define RCC_CFGR_ADCPRE_Msk (0x3U << RCC_CFGR_ADCPRE_Pos) /*!< 0x0000C000 */\r\n#define RCC_CFGR_ADCPRE     RCC_CFGR_ADCPRE_Msk           /*!< ADCPRE[1:0] bits (ADC prescaler) */\r\n#define RCC_CFGR_ADCPRE_0   (0x1U << RCC_CFGR_ADCPRE_Pos) /*!< 0x00004000 */\r\n#define RCC_CFGR_ADCPRE_1   (0x2U << RCC_CFGR_ADCPRE_Pos) /*!< 0x00008000 */\r\n\r\n#define RCC_CFGR_ADCPRE_DIV2 0x00000000U /*!< PCLK2 divided by 2 */\r\n#define RCC_CFGR_ADCPRE_DIV4 0x00004000U /*!< PCLK2 divided by 4 */\r\n#define RCC_CFGR_ADCPRE_DIV6 0x00008000U /*!< PCLK2 divided by 6 */\r\n#define RCC_CFGR_ADCPRE_DIV8 0x0000C000U /*!< PCLK2 divided by 8 */\r\n\r\n#define RCC_CFGR_PLLSRC_Pos (16U)\r\n#define RCC_CFGR_PLLSRC_Msk (0x1U << RCC_CFGR_PLLSRC_Pos) /*!< 0x00010000 */\r\n#define RCC_CFGR_PLLSRC     RCC_CFGR_PLLSRC_Msk           /*!< PLL entry clock source */\r\n\r\n#define RCC_CFGR_PLLXTPRE_Pos (17U)\r\n#define RCC_CFGR_PLLXTPRE_Msk (0x1U << RCC_CFGR_PLLXTPRE_Pos) /*!< 0x00020000 */\r\n#define RCC_CFGR_PLLXTPRE     RCC_CFGR_PLLXTPRE_Msk           /*!< HSE divider for PLL entry */\r\n\r\n/*!< PLLMUL configuration */\r\n#define RCC_CFGR_PLLMULL_Pos (18U)\r\n#define RCC_CFGR_PLLMULL_Msk (0xFU << RCC_CFGR_PLLMULL_Pos) /*!< 0x003C0000 */\r\n#define RCC_CFGR_PLLMULL     RCC_CFGR_PLLMULL_Msk           /*!< PLLMUL[3:0] bits (PLL multiplication factor) */\r\n#define RCC_CFGR_PLLMULL_0   (0x1U << RCC_CFGR_PLLMULL_Pos) /*!< 0x00040000 */\r\n#define RCC_CFGR_PLLMULL_1   (0x2U << RCC_CFGR_PLLMULL_Pos) /*!< 0x00080000 */\r\n#define RCC_CFGR_PLLMULL_2   (0x4U << RCC_CFGR_PLLMULL_Pos) /*!< 0x00100000 */\r\n#define RCC_CFGR_PLLMULL_3   (0x8U << RCC_CFGR_PLLMULL_Pos) /*!< 0x00200000 */\r\n\r\n#define RCC_CFGR_PLLXTPRE_HSE      0x00000000U /*!< HSE clock not divided for PLL entry */\r\n#define RCC_CFGR_PLLXTPRE_HSE_DIV2 0x00020000U /*!< HSE clock divided by 2 for PLL entry */\r\n\r\n#define RCC_CFGR_PLLMULL2      0x00000000U /*!< PLL input clock*2 */\r\n#define RCC_CFGR_PLLMULL3_Pos  (18U)\r\n#define RCC_CFGR_PLLMULL3_Msk  (0x1U << RCC_CFGR_PLLMULL3_Pos) /*!< 0x00040000 */\r\n#define RCC_CFGR_PLLMULL3      RCC_CFGR_PLLMULL3_Msk           /*!< PLL input clock*3 */\r\n#define RCC_CFGR_PLLMULL4_Pos  (19U)\r\n#define RCC_CFGR_PLLMULL4_Msk  (0x1U << RCC_CFGR_PLLMULL4_Pos) /*!< 0x00080000 */\r\n#define RCC_CFGR_PLLMULL4      RCC_CFGR_PLLMULL4_Msk           /*!< PLL input clock*4 */\r\n#define RCC_CFGR_PLLMULL5_Pos  (18U)\r\n#define RCC_CFGR_PLLMULL5_Msk  (0x3U << RCC_CFGR_PLLMULL5_Pos) /*!< 0x000C0000 */\r\n#define RCC_CFGR_PLLMULL5      RCC_CFGR_PLLMULL5_Msk           /*!< PLL input clock*5 */\r\n#define RCC_CFGR_PLLMULL6_Pos  (20U)\r\n#define RCC_CFGR_PLLMULL6_Msk  (0x1U << RCC_CFGR_PLLMULL6_Pos) /*!< 0x00100000 */\r\n#define RCC_CFGR_PLLMULL6      RCC_CFGR_PLLMULL6_Msk           /*!< PLL input clock*6 */\r\n#define RCC_CFGR_PLLMULL7_Pos  (18U)\r\n#define RCC_CFGR_PLLMULL7_Msk  (0x5U << RCC_CFGR_PLLMULL7_Pos) /*!< 0x00140000 */\r\n#define RCC_CFGR_PLLMULL7      RCC_CFGR_PLLMULL7_Msk           /*!< PLL input clock*7 */\r\n#define RCC_CFGR_PLLMULL8_Pos  (19U)\r\n#define RCC_CFGR_PLLMULL8_Msk  (0x3U << RCC_CFGR_PLLMULL8_Pos) /*!< 0x00180000 */\r\n#define RCC_CFGR_PLLMULL8      RCC_CFGR_PLLMULL8_Msk           /*!< PLL input clock*8 */\r\n#define RCC_CFGR_PLLMULL9_Pos  (18U)\r\n#define RCC_CFGR_PLLMULL9_Msk  (0x7U << RCC_CFGR_PLLMULL9_Pos) /*!< 0x001C0000 */\r\n#define RCC_CFGR_PLLMULL9      RCC_CFGR_PLLMULL9_Msk           /*!< PLL input clock*9 */\r\n#define RCC_CFGR_PLLMULL10_Pos (21U)\r\n#define RCC_CFGR_PLLMULL10_Msk (0x1U << RCC_CFGR_PLLMULL10_Pos) /*!< 0x00200000 */\r\n#define RCC_CFGR_PLLMULL10     RCC_CFGR_PLLMULL10_Msk           /*!< PLL input clock10 */\r\n#define RCC_CFGR_PLLMULL11_Pos (18U)\r\n#define RCC_CFGR_PLLMULL11_Msk (0x9U << RCC_CFGR_PLLMULL11_Pos) /*!< 0x00240000 */\r\n#define RCC_CFGR_PLLMULL11     RCC_CFGR_PLLMULL11_Msk           /*!< PLL input clock*11 */\r\n#define RCC_CFGR_PLLMULL12_Pos (19U)\r\n#define RCC_CFGR_PLLMULL12_Msk (0x5U << RCC_CFGR_PLLMULL12_Pos) /*!< 0x00280000 */\r\n#define RCC_CFGR_PLLMULL12     RCC_CFGR_PLLMULL12_Msk           /*!< PLL input clock*12 */\r\n#define RCC_CFGR_PLLMULL13_Pos (18U)\r\n#define RCC_CFGR_PLLMULL13_Msk (0xBU << RCC_CFGR_PLLMULL13_Pos) /*!< 0x002C0000 */\r\n#define RCC_CFGR_PLLMULL13     RCC_CFGR_PLLMULL13_Msk           /*!< PLL input clock*13 */\r\n#define RCC_CFGR_PLLMULL14_Pos (20U)\r\n#define RCC_CFGR_PLLMULL14_Msk (0x3U << RCC_CFGR_PLLMULL14_Pos) /*!< 0x00300000 */\r\n#define RCC_CFGR_PLLMULL14     RCC_CFGR_PLLMULL14_Msk           /*!< PLL input clock*14 */\r\n#define RCC_CFGR_PLLMULL15_Pos (18U)\r\n#define RCC_CFGR_PLLMULL15_Msk (0xDU << RCC_CFGR_PLLMULL15_Pos) /*!< 0x00340000 */\r\n#define RCC_CFGR_PLLMULL15     RCC_CFGR_PLLMULL15_Msk           /*!< PLL input clock*15 */\r\n#define RCC_CFGR_PLLMULL16_Pos (19U)\r\n#define RCC_CFGR_PLLMULL16_Msk (0x7U << RCC_CFGR_PLLMULL16_Pos) /*!< 0x00380000 */\r\n#define RCC_CFGR_PLLMULL16     RCC_CFGR_PLLMULL16_Msk           /*!< PLL input clock*16 */\r\n#define RCC_CFGR_USBPRE_Pos    (22U)\r\n#define RCC_CFGR_USBPRE_Msk    (0x1U << RCC_CFGR_USBPRE_Pos) /*!< 0x00400000 */\r\n#define RCC_CFGR_USBPRE        RCC_CFGR_USBPRE_Msk           /*!< USB Device prescaler */\r\n\r\n/*!< MCO configuration */\r\n#define RCC_CFGR_MCO_Pos (24U)\r\n#define RCC_CFGR_MCO_Msk (0x7U << RCC_CFGR_MCO_Pos) /*!< 0x07000000 */\r\n#define RCC_CFGR_MCO     RCC_CFGR_MCO_Msk           /*!< MCO[2:0] bits (Microcontroller Clock Output) */\r\n#define RCC_CFGR_MCO_0   (0x1U << RCC_CFGR_MCO_Pos) /*!< 0x01000000 */\r\n#define RCC_CFGR_MCO_1   (0x2U << RCC_CFGR_MCO_Pos) /*!< 0x02000000 */\r\n#define RCC_CFGR_MCO_2   (0x4U << RCC_CFGR_MCO_Pos) /*!< 0x04000000 */\r\n\r\n#define RCC_CFGR_MCO_NOCLOCK     0x00000000U /*!< No clock */\r\n#define RCC_CFGR_MCO_SYSCLK      0x04000000U /*!< System clock selected as MCO source */\r\n#define RCC_CFGR_MCO_HSI         0x05000000U /*!< HSI clock selected as MCO source */\r\n#define RCC_CFGR_MCO_HSE         0x06000000U /*!< HSE clock selected as MCO source  */\r\n#define RCC_CFGR_MCO_PLLCLK_DIV2 0x07000000U /*!< PLL clock divided by 2 selected as MCO source */\r\n\r\n/* Reference defines */\r\n#define RCC_CFGR_MCOSEL          RCC_CFGR_MCO\r\n#define RCC_CFGR_MCOSEL_0        RCC_CFGR_MCO_0\r\n#define RCC_CFGR_MCOSEL_1        RCC_CFGR_MCO_1\r\n#define RCC_CFGR_MCOSEL_2        RCC_CFGR_MCO_2\r\n#define RCC_CFGR_MCOSEL_NOCLOCK  RCC_CFGR_MCO_NOCLOCK\r\n#define RCC_CFGR_MCOSEL_SYSCLK   RCC_CFGR_MCO_SYSCLK\r\n#define RCC_CFGR_MCOSEL_HSI      RCC_CFGR_MCO_HSI\r\n#define RCC_CFGR_MCOSEL_HSE      RCC_CFGR_MCO_HSE\r\n#define RCC_CFGR_MCOSEL_PLL_DIV2 RCC_CFGR_MCO_PLLCLK_DIV2\r\n\r\n/*!<******************  Bit definition for RCC_CIR register  ********************/\r\n#define RCC_CIR_LSIRDYF_Pos  (0U)\r\n#define RCC_CIR_LSIRDYF_Msk  (0x1U << RCC_CIR_LSIRDYF_Pos) /*!< 0x00000001 */\r\n#define RCC_CIR_LSIRDYF      RCC_CIR_LSIRDYF_Msk           /*!< LSI Ready Interrupt flag */\r\n#define RCC_CIR_LSERDYF_Pos  (1U)\r\n#define RCC_CIR_LSERDYF_Msk  (0x1U << RCC_CIR_LSERDYF_Pos) /*!< 0x00000002 */\r\n#define RCC_CIR_LSERDYF      RCC_CIR_LSERDYF_Msk           /*!< LSE Ready Interrupt flag */\r\n#define RCC_CIR_HSIRDYF_Pos  (2U)\r\n#define RCC_CIR_HSIRDYF_Msk  (0x1U << RCC_CIR_HSIRDYF_Pos) /*!< 0x00000004 */\r\n#define RCC_CIR_HSIRDYF      RCC_CIR_HSIRDYF_Msk           /*!< HSI Ready Interrupt flag */\r\n#define RCC_CIR_HSERDYF_Pos  (3U)\r\n#define RCC_CIR_HSERDYF_Msk  (0x1U << RCC_CIR_HSERDYF_Pos) /*!< 0x00000008 */\r\n#define RCC_CIR_HSERDYF      RCC_CIR_HSERDYF_Msk           /*!< HSE Ready Interrupt flag */\r\n#define RCC_CIR_PLLRDYF_Pos  (4U)\r\n#define RCC_CIR_PLLRDYF_Msk  (0x1U << RCC_CIR_PLLRDYF_Pos) /*!< 0x00000010 */\r\n#define RCC_CIR_PLLRDYF      RCC_CIR_PLLRDYF_Msk           /*!< PLL Ready Interrupt flag */\r\n#define RCC_CIR_CSSF_Pos     (7U)\r\n#define RCC_CIR_CSSF_Msk     (0x1U << RCC_CIR_CSSF_Pos) /*!< 0x00000080 */\r\n#define RCC_CIR_CSSF         RCC_CIR_CSSF_Msk           /*!< Clock Security System Interrupt flag */\r\n#define RCC_CIR_LSIRDYIE_Pos (8U)\r\n#define RCC_CIR_LSIRDYIE_Msk (0x1U << RCC_CIR_LSIRDYIE_Pos) /*!< 0x00000100 */\r\n#define RCC_CIR_LSIRDYIE     RCC_CIR_LSIRDYIE_Msk           /*!< LSI Ready Interrupt Enable */\r\n#define RCC_CIR_LSERDYIE_Pos (9U)\r\n#define RCC_CIR_LSERDYIE_Msk (0x1U << RCC_CIR_LSERDYIE_Pos) /*!< 0x00000200 */\r\n#define RCC_CIR_LSERDYIE     RCC_CIR_LSERDYIE_Msk           /*!< LSE Ready Interrupt Enable */\r\n#define RCC_CIR_HSIRDYIE_Pos (10U)\r\n#define RCC_CIR_HSIRDYIE_Msk (0x1U << RCC_CIR_HSIRDYIE_Pos) /*!< 0x00000400 */\r\n#define RCC_CIR_HSIRDYIE     RCC_CIR_HSIRDYIE_Msk           /*!< HSI Ready Interrupt Enable */\r\n#define RCC_CIR_HSERDYIE_Pos (11U)\r\n#define RCC_CIR_HSERDYIE_Msk (0x1U << RCC_CIR_HSERDYIE_Pos) /*!< 0x00000800 */\r\n#define RCC_CIR_HSERDYIE     RCC_CIR_HSERDYIE_Msk           /*!< HSE Ready Interrupt Enable */\r\n#define RCC_CIR_PLLRDYIE_Pos (12U)\r\n#define RCC_CIR_PLLRDYIE_Msk (0x1U << RCC_CIR_PLLRDYIE_Pos) /*!< 0x00001000 */\r\n#define RCC_CIR_PLLRDYIE     RCC_CIR_PLLRDYIE_Msk           /*!< PLL Ready Interrupt Enable */\r\n#define RCC_CIR_LSIRDYC_Pos  (16U)\r\n#define RCC_CIR_LSIRDYC_Msk  (0x1U << RCC_CIR_LSIRDYC_Pos) /*!< 0x00010000 */\r\n#define RCC_CIR_LSIRDYC      RCC_CIR_LSIRDYC_Msk           /*!< LSI Ready Interrupt Clear */\r\n#define RCC_CIR_LSERDYC_Pos  (17U)\r\n#define RCC_CIR_LSERDYC_Msk  (0x1U << RCC_CIR_LSERDYC_Pos) /*!< 0x00020000 */\r\n#define RCC_CIR_LSERDYC      RCC_CIR_LSERDYC_Msk           /*!< LSE Ready Interrupt Clear */\r\n#define RCC_CIR_HSIRDYC_Pos  (18U)\r\n#define RCC_CIR_HSIRDYC_Msk  (0x1U << RCC_CIR_HSIRDYC_Pos) /*!< 0x00040000 */\r\n#define RCC_CIR_HSIRDYC      RCC_CIR_HSIRDYC_Msk           /*!< HSI Ready Interrupt Clear */\r\n#define RCC_CIR_HSERDYC_Pos  (19U)\r\n#define RCC_CIR_HSERDYC_Msk  (0x1U << RCC_CIR_HSERDYC_Pos) /*!< 0x00080000 */\r\n#define RCC_CIR_HSERDYC      RCC_CIR_HSERDYC_Msk           /*!< HSE Ready Interrupt Clear */\r\n#define RCC_CIR_PLLRDYC_Pos  (20U)\r\n#define RCC_CIR_PLLRDYC_Msk  (0x1U << RCC_CIR_PLLRDYC_Pos) /*!< 0x00100000 */\r\n#define RCC_CIR_PLLRDYC      RCC_CIR_PLLRDYC_Msk           /*!< PLL Ready Interrupt Clear */\r\n#define RCC_CIR_CSSC_Pos     (23U)\r\n#define RCC_CIR_CSSC_Msk     (0x1U << RCC_CIR_CSSC_Pos) /*!< 0x00800000 */\r\n#define RCC_CIR_CSSC         RCC_CIR_CSSC_Msk           /*!< Clock Security System Interrupt Clear */\r\n\r\n/*****************  Bit definition for RCC_APB2RSTR register  *****************/\r\n#define RCC_APB2RSTR_AFIORST_Pos (0U)\r\n#define RCC_APB2RSTR_AFIORST_Msk (0x1U << RCC_APB2RSTR_AFIORST_Pos) /*!< 0x00000001 */\r\n#define RCC_APB2RSTR_AFIORST     RCC_APB2RSTR_AFIORST_Msk           /*!< Alternate Function I/O reset */\r\n#define RCC_APB2RSTR_IOPARST_Pos (2U)\r\n#define RCC_APB2RSTR_IOPARST_Msk (0x1U << RCC_APB2RSTR_IOPARST_Pos) /*!< 0x00000004 */\r\n#define RCC_APB2RSTR_IOPARST     RCC_APB2RSTR_IOPARST_Msk           /*!< I/O port A reset */\r\n#define RCC_APB2RSTR_IOPBRST_Pos (3U)\r\n#define RCC_APB2RSTR_IOPBRST_Msk (0x1U << RCC_APB2RSTR_IOPBRST_Pos) /*!< 0x00000008 */\r\n#define RCC_APB2RSTR_IOPBRST     RCC_APB2RSTR_IOPBRST_Msk           /*!< I/O port B reset */\r\n#define RCC_APB2RSTR_IOPCRST_Pos (4U)\r\n#define RCC_APB2RSTR_IOPCRST_Msk (0x1U << RCC_APB2RSTR_IOPCRST_Pos) /*!< 0x00000010 */\r\n#define RCC_APB2RSTR_IOPCRST     RCC_APB2RSTR_IOPCRST_Msk           /*!< I/O port C reset */\r\n#define RCC_APB2RSTR_IOPDRST_Pos (5U)\r\n#define RCC_APB2RSTR_IOPDRST_Msk (0x1U << RCC_APB2RSTR_IOPDRST_Pos) /*!< 0x00000020 */\r\n#define RCC_APB2RSTR_IOPDRST     RCC_APB2RSTR_IOPDRST_Msk           /*!< I/O port D reset */\r\n#define RCC_APB2RSTR_ADC1RST_Pos (9U)\r\n#define RCC_APB2RSTR_ADC1RST_Msk (0x1U << RCC_APB2RSTR_ADC1RST_Pos) /*!< 0x00000200 */\r\n#define RCC_APB2RSTR_ADC1RST     RCC_APB2RSTR_ADC1RST_Msk           /*!< ADC 1 interface reset */\r\n\r\n#define RCC_APB2RSTR_ADC2RST_Pos (10U)\r\n#define RCC_APB2RSTR_ADC2RST_Msk (0x1U << RCC_APB2RSTR_ADC2RST_Pos) /*!< 0x00000400 */\r\n#define RCC_APB2RSTR_ADC2RST     RCC_APB2RSTR_ADC2RST_Msk           /*!< ADC 2 interface reset */\r\n\r\n#define RCC_APB2RSTR_TIM1RST_Pos   (11U)\r\n#define RCC_APB2RSTR_TIM1RST_Msk   (0x1U << RCC_APB2RSTR_TIM1RST_Pos) /*!< 0x00000800 */\r\n#define RCC_APB2RSTR_TIM1RST       RCC_APB2RSTR_TIM1RST_Msk           /*!< TIM1 Timer reset */\r\n#define RCC_APB2RSTR_SPI1RST_Pos   (12U)\r\n#define RCC_APB2RSTR_SPI1RST_Msk   (0x1U << RCC_APB2RSTR_SPI1RST_Pos) /*!< 0x00001000 */\r\n#define RCC_APB2RSTR_SPI1RST       RCC_APB2RSTR_SPI1RST_Msk           /*!< SPI 1 reset */\r\n#define RCC_APB2RSTR_USART1RST_Pos (14U)\r\n#define RCC_APB2RSTR_USART1RST_Msk (0x1U << RCC_APB2RSTR_USART1RST_Pos) /*!< 0x00004000 */\r\n#define RCC_APB2RSTR_USART1RST     RCC_APB2RSTR_USART1RST_Msk           /*!< USART1 reset */\r\n\r\n#define RCC_APB2RSTR_IOPERST_Pos (6U)\r\n#define RCC_APB2RSTR_IOPERST_Msk (0x1U << RCC_APB2RSTR_IOPERST_Pos) /*!< 0x00000040 */\r\n#define RCC_APB2RSTR_IOPERST     RCC_APB2RSTR_IOPERST_Msk           /*!< I/O port E reset */\r\n\r\n/*****************  Bit definition for RCC_APB1RSTR register  *****************/\r\n#define RCC_APB1RSTR_TIM2RST_Pos   (0U)\r\n#define RCC_APB1RSTR_TIM2RST_Msk   (0x1U << RCC_APB1RSTR_TIM2RST_Pos) /*!< 0x00000001 */\r\n#define RCC_APB1RSTR_TIM2RST       RCC_APB1RSTR_TIM2RST_Msk           /*!< Timer 2 reset */\r\n#define RCC_APB1RSTR_TIM3RST_Pos   (1U)\r\n#define RCC_APB1RSTR_TIM3RST_Msk   (0x1U << RCC_APB1RSTR_TIM3RST_Pos) /*!< 0x00000002 */\r\n#define RCC_APB1RSTR_TIM3RST       RCC_APB1RSTR_TIM3RST_Msk           /*!< Timer 3 reset */\r\n#define RCC_APB1RSTR_WWDGRST_Pos   (11U)\r\n#define RCC_APB1RSTR_WWDGRST_Msk   (0x1U << RCC_APB1RSTR_WWDGRST_Pos) /*!< 0x00000800 */\r\n#define RCC_APB1RSTR_WWDGRST       RCC_APB1RSTR_WWDGRST_Msk           /*!< Window Watchdog reset */\r\n#define RCC_APB1RSTR_USART2RST_Pos (17U)\r\n#define RCC_APB1RSTR_USART2RST_Msk (0x1U << RCC_APB1RSTR_USART2RST_Pos) /*!< 0x00020000 */\r\n#define RCC_APB1RSTR_USART2RST     RCC_APB1RSTR_USART2RST_Msk           /*!< USART 2 reset */\r\n#define RCC_APB1RSTR_I2C1RST_Pos   (21U)\r\n#define RCC_APB1RSTR_I2C1RST_Msk   (0x1U << RCC_APB1RSTR_I2C1RST_Pos) /*!< 0x00200000 */\r\n#define RCC_APB1RSTR_I2C1RST       RCC_APB1RSTR_I2C1RST_Msk           /*!< I2C 1 reset */\r\n\r\n#define RCC_APB1RSTR_CAN1RST_Pos (25U)\r\n#define RCC_APB1RSTR_CAN1RST_Msk (0x1U << RCC_APB1RSTR_CAN1RST_Pos) /*!< 0x02000000 */\r\n#define RCC_APB1RSTR_CAN1RST     RCC_APB1RSTR_CAN1RST_Msk           /*!< CAN1 reset */\r\n\r\n#define RCC_APB1RSTR_BKPRST_Pos (27U)\r\n#define RCC_APB1RSTR_BKPRST_Msk (0x1U << RCC_APB1RSTR_BKPRST_Pos) /*!< 0x08000000 */\r\n#define RCC_APB1RSTR_BKPRST     RCC_APB1RSTR_BKPRST_Msk           /*!< Backup interface reset */\r\n#define RCC_APB1RSTR_PWRRST_Pos (28U)\r\n#define RCC_APB1RSTR_PWRRST_Msk (0x1U << RCC_APB1RSTR_PWRRST_Pos) /*!< 0x10000000 */\r\n#define RCC_APB1RSTR_PWRRST     RCC_APB1RSTR_PWRRST_Msk           /*!< Power interface reset */\r\n\r\n#define RCC_APB1RSTR_TIM4RST_Pos   (2U)\r\n#define RCC_APB1RSTR_TIM4RST_Msk   (0x1U << RCC_APB1RSTR_TIM4RST_Pos) /*!< 0x00000004 */\r\n#define RCC_APB1RSTR_TIM4RST       RCC_APB1RSTR_TIM4RST_Msk           /*!< Timer 4 reset */\r\n#define RCC_APB1RSTR_SPI2RST_Pos   (14U)\r\n#define RCC_APB1RSTR_SPI2RST_Msk   (0x1U << RCC_APB1RSTR_SPI2RST_Pos) /*!< 0x00004000 */\r\n#define RCC_APB1RSTR_SPI2RST       RCC_APB1RSTR_SPI2RST_Msk           /*!< SPI 2 reset */\r\n#define RCC_APB1RSTR_USART3RST_Pos (18U)\r\n#define RCC_APB1RSTR_USART3RST_Msk (0x1U << RCC_APB1RSTR_USART3RST_Pos) /*!< 0x00040000 */\r\n#define RCC_APB1RSTR_USART3RST     RCC_APB1RSTR_USART3RST_Msk           /*!< USART 3 reset */\r\n#define RCC_APB1RSTR_I2C2RST_Pos   (22U)\r\n#define RCC_APB1RSTR_I2C2RST_Msk   (0x1U << RCC_APB1RSTR_I2C2RST_Pos) /*!< 0x00400000 */\r\n#define RCC_APB1RSTR_I2C2RST       RCC_APB1RSTR_I2C2RST_Msk           /*!< I2C 2 reset */\r\n\r\n#define RCC_APB1RSTR_USBRST_Pos (23U)\r\n#define RCC_APB1RSTR_USBRST_Msk (0x1U << RCC_APB1RSTR_USBRST_Pos) /*!< 0x00800000 */\r\n#define RCC_APB1RSTR_USBRST     RCC_APB1RSTR_USBRST_Msk           /*!< USB Device reset */\r\n\r\n/******************  Bit definition for RCC_AHBENR register  ******************/\r\n#define RCC_AHBENR_DMA1EN_Pos  (0U)\r\n#define RCC_AHBENR_DMA1EN_Msk  (0x1U << RCC_AHBENR_DMA1EN_Pos) /*!< 0x00000001 */\r\n#define RCC_AHBENR_DMA1EN      RCC_AHBENR_DMA1EN_Msk           /*!< DMA1 clock enable */\r\n#define RCC_AHBENR_SRAMEN_Pos  (2U)\r\n#define RCC_AHBENR_SRAMEN_Msk  (0x1U << RCC_AHBENR_SRAMEN_Pos) /*!< 0x00000004 */\r\n#define RCC_AHBENR_SRAMEN      RCC_AHBENR_SRAMEN_Msk           /*!< SRAM interface clock enable */\r\n#define RCC_AHBENR_FLITFEN_Pos (4U)\r\n#define RCC_AHBENR_FLITFEN_Msk (0x1U << RCC_AHBENR_FLITFEN_Pos) /*!< 0x00000010 */\r\n#define RCC_AHBENR_FLITFEN     RCC_AHBENR_FLITFEN_Msk           /*!< FLITF clock enable */\r\n#define RCC_AHBENR_CRCEN_Pos   (6U)\r\n#define RCC_AHBENR_CRCEN_Msk   (0x1U << RCC_AHBENR_CRCEN_Pos) /*!< 0x00000040 */\r\n#define RCC_AHBENR_CRCEN       RCC_AHBENR_CRCEN_Msk           /*!< CRC clock enable */\r\n\r\n/******************  Bit definition for RCC_APB2ENR register  *****************/\r\n#define RCC_APB2ENR_AFIOEN_Pos (0U)\r\n#define RCC_APB2ENR_AFIOEN_Msk (0x1U << RCC_APB2ENR_AFIOEN_Pos) /*!< 0x00000001 */\r\n#define RCC_APB2ENR_AFIOEN     RCC_APB2ENR_AFIOEN_Msk           /*!< Alternate Function I/O clock enable */\r\n#define RCC_APB2ENR_IOPAEN_Pos (2U)\r\n#define RCC_APB2ENR_IOPAEN_Msk (0x1U << RCC_APB2ENR_IOPAEN_Pos) /*!< 0x00000004 */\r\n#define RCC_APB2ENR_IOPAEN     RCC_APB2ENR_IOPAEN_Msk           /*!< I/O port A clock enable */\r\n#define RCC_APB2ENR_IOPBEN_Pos (3U)\r\n#define RCC_APB2ENR_IOPBEN_Msk (0x1U << RCC_APB2ENR_IOPBEN_Pos) /*!< 0x00000008 */\r\n#define RCC_APB2ENR_IOPBEN     RCC_APB2ENR_IOPBEN_Msk           /*!< I/O port B clock enable */\r\n#define RCC_APB2ENR_IOPCEN_Pos (4U)\r\n#define RCC_APB2ENR_IOPCEN_Msk (0x1U << RCC_APB2ENR_IOPCEN_Pos) /*!< 0x00000010 */\r\n#define RCC_APB2ENR_IOPCEN     RCC_APB2ENR_IOPCEN_Msk           /*!< I/O port C clock enable */\r\n#define RCC_APB2ENR_IOPDEN_Pos (5U)\r\n#define RCC_APB2ENR_IOPDEN_Msk (0x1U << RCC_APB2ENR_IOPDEN_Pos) /*!< 0x00000020 */\r\n#define RCC_APB2ENR_IOPDEN     RCC_APB2ENR_IOPDEN_Msk           /*!< I/O port D clock enable */\r\n#define RCC_APB2ENR_ADC1EN_Pos (9U)\r\n#define RCC_APB2ENR_ADC1EN_Msk (0x1U << RCC_APB2ENR_ADC1EN_Pos) /*!< 0x00000200 */\r\n#define RCC_APB2ENR_ADC1EN     RCC_APB2ENR_ADC1EN_Msk           /*!< ADC 1 interface clock enable */\r\n\r\n#define RCC_APB2ENR_ADC2EN_Pos (10U)\r\n#define RCC_APB2ENR_ADC2EN_Msk (0x1U << RCC_APB2ENR_ADC2EN_Pos) /*!< 0x00000400 */\r\n#define RCC_APB2ENR_ADC2EN     RCC_APB2ENR_ADC2EN_Msk           /*!< ADC 2 interface clock enable */\r\n\r\n#define RCC_APB2ENR_TIM1EN_Pos   (11U)\r\n#define RCC_APB2ENR_TIM1EN_Msk   (0x1U << RCC_APB2ENR_TIM1EN_Pos) /*!< 0x00000800 */\r\n#define RCC_APB2ENR_TIM1EN       RCC_APB2ENR_TIM1EN_Msk           /*!< TIM1 Timer clock enable */\r\n#define RCC_APB2ENR_SPI1EN_Pos   (12U)\r\n#define RCC_APB2ENR_SPI1EN_Msk   (0x1U << RCC_APB2ENR_SPI1EN_Pos) /*!< 0x00001000 */\r\n#define RCC_APB2ENR_SPI1EN       RCC_APB2ENR_SPI1EN_Msk           /*!< SPI 1 clock enable */\r\n#define RCC_APB2ENR_USART1EN_Pos (14U)\r\n#define RCC_APB2ENR_USART1EN_Msk (0x1U << RCC_APB2ENR_USART1EN_Pos) /*!< 0x00004000 */\r\n#define RCC_APB2ENR_USART1EN     RCC_APB2ENR_USART1EN_Msk           /*!< USART1 clock enable */\r\n\r\n#define RCC_APB2ENR_IOPEEN_Pos (6U)\r\n#define RCC_APB2ENR_IOPEEN_Msk (0x1U << RCC_APB2ENR_IOPEEN_Pos) /*!< 0x00000040 */\r\n#define RCC_APB2ENR_IOPEEN     RCC_APB2ENR_IOPEEN_Msk           /*!< I/O port E clock enable */\r\n\r\n/*****************  Bit definition for RCC_APB1ENR register  ******************/\r\n#define RCC_APB1ENR_TIM2EN_Pos   (0U)\r\n#define RCC_APB1ENR_TIM2EN_Msk   (0x1U << RCC_APB1ENR_TIM2EN_Pos) /*!< 0x00000001 */\r\n#define RCC_APB1ENR_TIM2EN       RCC_APB1ENR_TIM2EN_Msk           /*!< Timer 2 clock enabled*/\r\n#define RCC_APB1ENR_TIM3EN_Pos   (1U)\r\n#define RCC_APB1ENR_TIM3EN_Msk   (0x1U << RCC_APB1ENR_TIM3EN_Pos) /*!< 0x00000002 */\r\n#define RCC_APB1ENR_TIM3EN       RCC_APB1ENR_TIM3EN_Msk           /*!< Timer 3 clock enable */\r\n#define RCC_APB1ENR_WWDGEN_Pos   (11U)\r\n#define RCC_APB1ENR_WWDGEN_Msk   (0x1U << RCC_APB1ENR_WWDGEN_Pos) /*!< 0x00000800 */\r\n#define RCC_APB1ENR_WWDGEN       RCC_APB1ENR_WWDGEN_Msk           /*!< Window Watchdog clock enable */\r\n#define RCC_APB1ENR_USART2EN_Pos (17U)\r\n#define RCC_APB1ENR_USART2EN_Msk (0x1U << RCC_APB1ENR_USART2EN_Pos) /*!< 0x00020000 */\r\n#define RCC_APB1ENR_USART2EN     RCC_APB1ENR_USART2EN_Msk           /*!< USART 2 clock enable */\r\n#define RCC_APB1ENR_I2C1EN_Pos   (21U)\r\n#define RCC_APB1ENR_I2C1EN_Msk   (0x1U << RCC_APB1ENR_I2C1EN_Pos) /*!< 0x00200000 */\r\n#define RCC_APB1ENR_I2C1EN       RCC_APB1ENR_I2C1EN_Msk           /*!< I2C 1 clock enable */\r\n\r\n#define RCC_APB1ENR_CAN1EN_Pos (25U)\r\n#define RCC_APB1ENR_CAN1EN_Msk (0x1U << RCC_APB1ENR_CAN1EN_Pos) /*!< 0x02000000 */\r\n#define RCC_APB1ENR_CAN1EN     RCC_APB1ENR_CAN1EN_Msk           /*!< CAN1 clock enable */\r\n\r\n#define RCC_APB1ENR_BKPEN_Pos (27U)\r\n#define RCC_APB1ENR_BKPEN_Msk (0x1U << RCC_APB1ENR_BKPEN_Pos) /*!< 0x08000000 */\r\n#define RCC_APB1ENR_BKPEN     RCC_APB1ENR_BKPEN_Msk           /*!< Backup interface clock enable */\r\n#define RCC_APB1ENR_PWREN_Pos (28U)\r\n#define RCC_APB1ENR_PWREN_Msk (0x1U << RCC_APB1ENR_PWREN_Pos) /*!< 0x10000000 */\r\n#define RCC_APB1ENR_PWREN     RCC_APB1ENR_PWREN_Msk           /*!< Power interface clock enable */\r\n\r\n#define RCC_APB1ENR_TIM4EN_Pos   (2U)\r\n#define RCC_APB1ENR_TIM4EN_Msk   (0x1U << RCC_APB1ENR_TIM4EN_Pos) /*!< 0x00000004 */\r\n#define RCC_APB1ENR_TIM4EN       RCC_APB1ENR_TIM4EN_Msk           /*!< Timer 4 clock enable */\r\n#define RCC_APB1ENR_SPI2EN_Pos   (14U)\r\n#define RCC_APB1ENR_SPI2EN_Msk   (0x1U << RCC_APB1ENR_SPI2EN_Pos) /*!< 0x00004000 */\r\n#define RCC_APB1ENR_SPI2EN       RCC_APB1ENR_SPI2EN_Msk           /*!< SPI 2 clock enable */\r\n#define RCC_APB1ENR_USART3EN_Pos (18U)\r\n#define RCC_APB1ENR_USART3EN_Msk (0x1U << RCC_APB1ENR_USART3EN_Pos) /*!< 0x00040000 */\r\n#define RCC_APB1ENR_USART3EN     RCC_APB1ENR_USART3EN_Msk           /*!< USART 3 clock enable */\r\n#define RCC_APB1ENR_I2C2EN_Pos   (22U)\r\n#define RCC_APB1ENR_I2C2EN_Msk   (0x1U << RCC_APB1ENR_I2C2EN_Pos) /*!< 0x00400000 */\r\n#define RCC_APB1ENR_I2C2EN       RCC_APB1ENR_I2C2EN_Msk           /*!< I2C 2 clock enable */\r\n\r\n#define RCC_APB1ENR_USBEN_Pos (23U)\r\n#define RCC_APB1ENR_USBEN_Msk (0x1U << RCC_APB1ENR_USBEN_Pos) /*!< 0x00800000 */\r\n#define RCC_APB1ENR_USBEN     RCC_APB1ENR_USBEN_Msk           /*!< USB Device clock enable */\r\n\r\n/*******************  Bit definition for RCC_BDCR register  *******************/\r\n#define RCC_BDCR_LSEON_Pos  (0U)\r\n#define RCC_BDCR_LSEON_Msk  (0x1U << RCC_BDCR_LSEON_Pos) /*!< 0x00000001 */\r\n#define RCC_BDCR_LSEON      RCC_BDCR_LSEON_Msk           /*!< External Low Speed oscillator enable */\r\n#define RCC_BDCR_LSERDY_Pos (1U)\r\n#define RCC_BDCR_LSERDY_Msk (0x1U << RCC_BDCR_LSERDY_Pos) /*!< 0x00000002 */\r\n#define RCC_BDCR_LSERDY     RCC_BDCR_LSERDY_Msk           /*!< External Low Speed oscillator Ready */\r\n#define RCC_BDCR_LSEBYP_Pos (2U)\r\n#define RCC_BDCR_LSEBYP_Msk (0x1U << RCC_BDCR_LSEBYP_Pos) /*!< 0x00000004 */\r\n#define RCC_BDCR_LSEBYP     RCC_BDCR_LSEBYP_Msk           /*!< External Low Speed oscillator Bypass */\r\n\r\n#define RCC_BDCR_RTCSEL_Pos (8U)\r\n#define RCC_BDCR_RTCSEL_Msk (0x3U << RCC_BDCR_RTCSEL_Pos) /*!< 0x00000300 */\r\n#define RCC_BDCR_RTCSEL     RCC_BDCR_RTCSEL_Msk           /*!< RTCSEL[1:0] bits (RTC clock source selection) */\r\n#define RCC_BDCR_RTCSEL_0   (0x1U << RCC_BDCR_RTCSEL_Pos) /*!< 0x00000100 */\r\n#define RCC_BDCR_RTCSEL_1   (0x2U << RCC_BDCR_RTCSEL_Pos) /*!< 0x00000200 */\r\n\r\n/*!< RTC congiguration */\r\n#define RCC_BDCR_RTCSEL_NOCLOCK 0x00000000U /*!< No clock */\r\n#define RCC_BDCR_RTCSEL_LSE     0x00000100U /*!< LSE oscillator clock used as RTC clock */\r\n#define RCC_BDCR_RTCSEL_LSI     0x00000200U /*!< LSI oscillator clock used as RTC clock */\r\n#define RCC_BDCR_RTCSEL_HSE     0x00000300U /*!< HSE oscillator clock divided by 128 used as RTC clock */\r\n\r\n#define RCC_BDCR_RTCEN_Pos (15U)\r\n#define RCC_BDCR_RTCEN_Msk (0x1U << RCC_BDCR_RTCEN_Pos) /*!< 0x00008000 */\r\n#define RCC_BDCR_RTCEN     RCC_BDCR_RTCEN_Msk           /*!< RTC clock enable */\r\n#define RCC_BDCR_BDRST_Pos (16U)\r\n#define RCC_BDCR_BDRST_Msk (0x1U << RCC_BDCR_BDRST_Pos) /*!< 0x00010000 */\r\n#define RCC_BDCR_BDRST     RCC_BDCR_BDRST_Msk           /*!< Backup domain software reset  */\r\n\r\n/*******************  Bit definition for RCC_CSR register  ********************/\r\n#define RCC_CSR_LSION_Pos    (0U)\r\n#define RCC_CSR_LSION_Msk    (0x1U << RCC_CSR_LSION_Pos) /*!< 0x00000001 */\r\n#define RCC_CSR_LSION        RCC_CSR_LSION_Msk           /*!< Internal Low Speed oscillator enable */\r\n#define RCC_CSR_LSIRDY_Pos   (1U)\r\n#define RCC_CSR_LSIRDY_Msk   (0x1U << RCC_CSR_LSIRDY_Pos) /*!< 0x00000002 */\r\n#define RCC_CSR_LSIRDY       RCC_CSR_LSIRDY_Msk           /*!< Internal Low Speed oscillator Ready */\r\n#define RCC_CSR_RMVF_Pos     (24U)\r\n#define RCC_CSR_RMVF_Msk     (0x1U << RCC_CSR_RMVF_Pos) /*!< 0x01000000 */\r\n#define RCC_CSR_RMVF         RCC_CSR_RMVF_Msk           /*!< Remove reset flag */\r\n#define RCC_CSR_PINRSTF_Pos  (26U)\r\n#define RCC_CSR_PINRSTF_Msk  (0x1U << RCC_CSR_PINRSTF_Pos) /*!< 0x04000000 */\r\n#define RCC_CSR_PINRSTF      RCC_CSR_PINRSTF_Msk           /*!< PIN reset flag */\r\n#define RCC_CSR_PORRSTF_Pos  (27U)\r\n#define RCC_CSR_PORRSTF_Msk  (0x1U << RCC_CSR_PORRSTF_Pos) /*!< 0x08000000 */\r\n#define RCC_CSR_PORRSTF      RCC_CSR_PORRSTF_Msk           /*!< POR/PDR reset flag */\r\n#define RCC_CSR_SFTRSTF_Pos  (28U)\r\n#define RCC_CSR_SFTRSTF_Msk  (0x1U << RCC_CSR_SFTRSTF_Pos) /*!< 0x10000000 */\r\n#define RCC_CSR_SFTRSTF      RCC_CSR_SFTRSTF_Msk           /*!< Software Reset flag */\r\n#define RCC_CSR_IWDGRSTF_Pos (29U)\r\n#define RCC_CSR_IWDGRSTF_Msk (0x1U << RCC_CSR_IWDGRSTF_Pos) /*!< 0x20000000 */\r\n#define RCC_CSR_IWDGRSTF     RCC_CSR_IWDGRSTF_Msk           /*!< Independent Watchdog reset flag */\r\n#define RCC_CSR_WWDGRSTF_Pos (30U)\r\n#define RCC_CSR_WWDGRSTF_Msk (0x1U << RCC_CSR_WWDGRSTF_Pos) /*!< 0x40000000 */\r\n#define RCC_CSR_WWDGRSTF     RCC_CSR_WWDGRSTF_Msk           /*!< Window watchdog reset flag */\r\n#define RCC_CSR_LPWRRSTF_Pos (31U)\r\n#define RCC_CSR_LPWRRSTF_Msk (0x1U << RCC_CSR_LPWRRSTF_Pos) /*!< 0x80000000 */\r\n#define RCC_CSR_LPWRRSTF     RCC_CSR_LPWRRSTF_Msk           /*!< Low-Power reset flag */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                General Purpose and Alternate Function I/O                  */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for GPIO_CRL register  *******************/\r\n#define GPIO_CRL_MODE_Pos (0U)\r\n#define GPIO_CRL_MODE_Msk (0x33333333U << GPIO_CRL_MODE_Pos) /*!< 0x33333333 */\r\n#define GPIO_CRL_MODE     GPIO_CRL_MODE_Msk                  /*!< Port x mode bits */\r\n\r\n#define GPIO_CRL_MODE0_Pos (0U)\r\n#define GPIO_CRL_MODE0_Msk (0x3U << GPIO_CRL_MODE0_Pos) /*!< 0x00000003 */\r\n#define GPIO_CRL_MODE0     GPIO_CRL_MODE0_Msk           /*!< MODE0[1:0] bits (Port x mode bits, pin 0) */\r\n#define GPIO_CRL_MODE0_0   (0x1U << GPIO_CRL_MODE0_Pos) /*!< 0x00000001 */\r\n#define GPIO_CRL_MODE0_1   (0x2U << GPIO_CRL_MODE0_Pos) /*!< 0x00000002 */\r\n\r\n#define GPIO_CRL_MODE1_Pos (4U)\r\n#define GPIO_CRL_MODE1_Msk (0x3U << GPIO_CRL_MODE1_Pos) /*!< 0x00000030 */\r\n#define GPIO_CRL_MODE1     GPIO_CRL_MODE1_Msk           /*!< MODE1[1:0] bits (Port x mode bits, pin 1) */\r\n#define GPIO_CRL_MODE1_0   (0x1U << GPIO_CRL_MODE1_Pos) /*!< 0x00000010 */\r\n#define GPIO_CRL_MODE1_1   (0x2U << GPIO_CRL_MODE1_Pos) /*!< 0x00000020 */\r\n\r\n#define GPIO_CRL_MODE2_Pos (8U)\r\n#define GPIO_CRL_MODE2_Msk (0x3U << GPIO_CRL_MODE2_Pos) /*!< 0x00000300 */\r\n#define GPIO_CRL_MODE2     GPIO_CRL_MODE2_Msk           /*!< MODE2[1:0] bits (Port x mode bits, pin 2) */\r\n#define GPIO_CRL_MODE2_0   (0x1U << GPIO_CRL_MODE2_Pos) /*!< 0x00000100 */\r\n#define GPIO_CRL_MODE2_1   (0x2U << GPIO_CRL_MODE2_Pos) /*!< 0x00000200 */\r\n\r\n#define GPIO_CRL_MODE3_Pos (12U)\r\n#define GPIO_CRL_MODE3_Msk (0x3U << GPIO_CRL_MODE3_Pos) /*!< 0x00003000 */\r\n#define GPIO_CRL_MODE3     GPIO_CRL_MODE3_Msk           /*!< MODE3[1:0] bits (Port x mode bits, pin 3) */\r\n#define GPIO_CRL_MODE3_0   (0x1U << GPIO_CRL_MODE3_Pos) /*!< 0x00001000 */\r\n#define GPIO_CRL_MODE3_1   (0x2U << GPIO_CRL_MODE3_Pos) /*!< 0x00002000 */\r\n\r\n#define GPIO_CRL_MODE4_Pos (16U)\r\n#define GPIO_CRL_MODE4_Msk (0x3U << GPIO_CRL_MODE4_Pos) /*!< 0x00030000 */\r\n#define GPIO_CRL_MODE4     GPIO_CRL_MODE4_Msk           /*!< MODE4[1:0] bits (Port x mode bits, pin 4) */\r\n#define GPIO_CRL_MODE4_0   (0x1U << GPIO_CRL_MODE4_Pos) /*!< 0x00010000 */\r\n#define GPIO_CRL_MODE4_1   (0x2U << GPIO_CRL_MODE4_Pos) /*!< 0x00020000 */\r\n\r\n#define GPIO_CRL_MODE5_Pos (20U)\r\n#define GPIO_CRL_MODE5_Msk (0x3U << GPIO_CRL_MODE5_Pos) /*!< 0x00300000 */\r\n#define GPIO_CRL_MODE5     GPIO_CRL_MODE5_Msk           /*!< MODE5[1:0] bits (Port x mode bits, pin 5) */\r\n#define GPIO_CRL_MODE5_0   (0x1U << GPIO_CRL_MODE5_Pos) /*!< 0x00100000 */\r\n#define GPIO_CRL_MODE5_1   (0x2U << GPIO_CRL_MODE5_Pos) /*!< 0x00200000 */\r\n\r\n#define GPIO_CRL_MODE6_Pos (24U)\r\n#define GPIO_CRL_MODE6_Msk (0x3U << GPIO_CRL_MODE6_Pos) /*!< 0x03000000 */\r\n#define GPIO_CRL_MODE6     GPIO_CRL_MODE6_Msk           /*!< MODE6[1:0] bits (Port x mode bits, pin 6) */\r\n#define GPIO_CRL_MODE6_0   (0x1U << GPIO_CRL_MODE6_Pos) /*!< 0x01000000 */\r\n#define GPIO_CRL_MODE6_1   (0x2U << GPIO_CRL_MODE6_Pos) /*!< 0x02000000 */\r\n\r\n#define GPIO_CRL_MODE7_Pos (28U)\r\n#define GPIO_CRL_MODE7_Msk (0x3U << GPIO_CRL_MODE7_Pos) /*!< 0x30000000 */\r\n#define GPIO_CRL_MODE7     GPIO_CRL_MODE7_Msk           /*!< MODE7[1:0] bits (Port x mode bits, pin 7) */\r\n#define GPIO_CRL_MODE7_0   (0x1U << GPIO_CRL_MODE7_Pos) /*!< 0x10000000 */\r\n#define GPIO_CRL_MODE7_1   (0x2U << GPIO_CRL_MODE7_Pos) /*!< 0x20000000 */\r\n\r\n#define GPIO_CRL_CNF_Pos (2U)\r\n#define GPIO_CRL_CNF_Msk (0x33333333U << GPIO_CRL_CNF_Pos) /*!< 0xCCCCCCCC */\r\n#define GPIO_CRL_CNF     GPIO_CRL_CNF_Msk                  /*!< Port x configuration bits */\r\n\r\n#define GPIO_CRL_CNF0_Pos (2U)\r\n#define GPIO_CRL_CNF0_Msk (0x3U << GPIO_CRL_CNF0_Pos) /*!< 0x0000000C */\r\n#define GPIO_CRL_CNF0     GPIO_CRL_CNF0_Msk           /*!< CNF0[1:0] bits (Port x configuration bits, pin 0) */\r\n#define GPIO_CRL_CNF0_0   (0x1U << GPIO_CRL_CNF0_Pos) /*!< 0x00000004 */\r\n#define GPIO_CRL_CNF0_1   (0x2U << GPIO_CRL_CNF0_Pos) /*!< 0x00000008 */\r\n\r\n#define GPIO_CRL_CNF1_Pos (6U)\r\n#define GPIO_CRL_CNF1_Msk (0x3U << GPIO_CRL_CNF1_Pos) /*!< 0x000000C0 */\r\n#define GPIO_CRL_CNF1     GPIO_CRL_CNF1_Msk           /*!< CNF1[1:0] bits (Port x configuration bits, pin 1) */\r\n#define GPIO_CRL_CNF1_0   (0x1U << GPIO_CRL_CNF1_Pos) /*!< 0x00000040 */\r\n#define GPIO_CRL_CNF1_1   (0x2U << GPIO_CRL_CNF1_Pos) /*!< 0x00000080 */\r\n\r\n#define GPIO_CRL_CNF2_Pos (10U)\r\n#define GPIO_CRL_CNF2_Msk (0x3U << GPIO_CRL_CNF2_Pos) /*!< 0x00000C00 */\r\n#define GPIO_CRL_CNF2     GPIO_CRL_CNF2_Msk           /*!< CNF2[1:0] bits (Port x configuration bits, pin 2) */\r\n#define GPIO_CRL_CNF2_0   (0x1U << GPIO_CRL_CNF2_Pos) /*!< 0x00000400 */\r\n#define GPIO_CRL_CNF2_1   (0x2U << GPIO_CRL_CNF2_Pos) /*!< 0x00000800 */\r\n\r\n#define GPIO_CRL_CNF3_Pos (14U)\r\n#define GPIO_CRL_CNF3_Msk (0x3U << GPIO_CRL_CNF3_Pos) /*!< 0x0000C000 */\r\n#define GPIO_CRL_CNF3     GPIO_CRL_CNF3_Msk           /*!< CNF3[1:0] bits (Port x configuration bits, pin 3) */\r\n#define GPIO_CRL_CNF3_0   (0x1U << GPIO_CRL_CNF3_Pos) /*!< 0x00004000 */\r\n#define GPIO_CRL_CNF3_1   (0x2U << GPIO_CRL_CNF3_Pos) /*!< 0x00008000 */\r\n\r\n#define GPIO_CRL_CNF4_Pos (18U)\r\n#define GPIO_CRL_CNF4_Msk (0x3U << GPIO_CRL_CNF4_Pos) /*!< 0x000C0000 */\r\n#define GPIO_CRL_CNF4     GPIO_CRL_CNF4_Msk           /*!< CNF4[1:0] bits (Port x configuration bits, pin 4) */\r\n#define GPIO_CRL_CNF4_0   (0x1U << GPIO_CRL_CNF4_Pos) /*!< 0x00040000 */\r\n#define GPIO_CRL_CNF4_1   (0x2U << GPIO_CRL_CNF4_Pos) /*!< 0x00080000 */\r\n\r\n#define GPIO_CRL_CNF5_Pos (22U)\r\n#define GPIO_CRL_CNF5_Msk (0x3U << GPIO_CRL_CNF5_Pos) /*!< 0x00C00000 */\r\n#define GPIO_CRL_CNF5     GPIO_CRL_CNF5_Msk           /*!< CNF5[1:0] bits (Port x configuration bits, pin 5) */\r\n#define GPIO_CRL_CNF5_0   (0x1U << GPIO_CRL_CNF5_Pos) /*!< 0x00400000 */\r\n#define GPIO_CRL_CNF5_1   (0x2U << GPIO_CRL_CNF5_Pos) /*!< 0x00800000 */\r\n\r\n#define GPIO_CRL_CNF6_Pos (26U)\r\n#define GPIO_CRL_CNF6_Msk (0x3U << GPIO_CRL_CNF6_Pos) /*!< 0x0C000000 */\r\n#define GPIO_CRL_CNF6     GPIO_CRL_CNF6_Msk           /*!< CNF6[1:0] bits (Port x configuration bits, pin 6) */\r\n#define GPIO_CRL_CNF6_0   (0x1U << GPIO_CRL_CNF6_Pos) /*!< 0x04000000 */\r\n#define GPIO_CRL_CNF6_1   (0x2U << GPIO_CRL_CNF6_Pos) /*!< 0x08000000 */\r\n\r\n#define GPIO_CRL_CNF7_Pos (30U)\r\n#define GPIO_CRL_CNF7_Msk (0x3U << GPIO_CRL_CNF7_Pos) /*!< 0xC0000000 */\r\n#define GPIO_CRL_CNF7     GPIO_CRL_CNF7_Msk           /*!< CNF7[1:0] bits (Port x configuration bits, pin 7) */\r\n#define GPIO_CRL_CNF7_0   (0x1U << GPIO_CRL_CNF7_Pos) /*!< 0x40000000 */\r\n#define GPIO_CRL_CNF7_1   (0x2U << GPIO_CRL_CNF7_Pos) /*!< 0x80000000 */\r\n\r\n/*******************  Bit definition for GPIO_CRH register  *******************/\r\n#define GPIO_CRH_MODE_Pos (0U)\r\n#define GPIO_CRH_MODE_Msk (0x33333333U << GPIO_CRH_MODE_Pos) /*!< 0x33333333 */\r\n#define GPIO_CRH_MODE     GPIO_CRH_MODE_Msk                  /*!< Port x mode bits */\r\n\r\n#define GPIO_CRH_MODE8_Pos (0U)\r\n#define GPIO_CRH_MODE8_Msk (0x3U << GPIO_CRH_MODE8_Pos) /*!< 0x00000003 */\r\n#define GPIO_CRH_MODE8     GPIO_CRH_MODE8_Msk           /*!< MODE8[1:0] bits (Port x mode bits, pin 8) */\r\n#define GPIO_CRH_MODE8_0   (0x1U << GPIO_CRH_MODE8_Pos) /*!< 0x00000001 */\r\n#define GPIO_CRH_MODE8_1   (0x2U << GPIO_CRH_MODE8_Pos) /*!< 0x00000002 */\r\n\r\n#define GPIO_CRH_MODE9_Pos (4U)\r\n#define GPIO_CRH_MODE9_Msk (0x3U << GPIO_CRH_MODE9_Pos) /*!< 0x00000030 */\r\n#define GPIO_CRH_MODE9     GPIO_CRH_MODE9_Msk           /*!< MODE9[1:0] bits (Port x mode bits, pin 9) */\r\n#define GPIO_CRH_MODE9_0   (0x1U << GPIO_CRH_MODE9_Pos) /*!< 0x00000010 */\r\n#define GPIO_CRH_MODE9_1   (0x2U << GPIO_CRH_MODE9_Pos) /*!< 0x00000020 */\r\n\r\n#define GPIO_CRH_MODE10_Pos (8U)\r\n#define GPIO_CRH_MODE10_Msk (0x3U << GPIO_CRH_MODE10_Pos) /*!< 0x00000300 */\r\n#define GPIO_CRH_MODE10     GPIO_CRH_MODE10_Msk           /*!< MODE10[1:0] bits (Port x mode bits, pin 10) */\r\n#define GPIO_CRH_MODE10_0   (0x1U << GPIO_CRH_MODE10_Pos) /*!< 0x00000100 */\r\n#define GPIO_CRH_MODE10_1   (0x2U << GPIO_CRH_MODE10_Pos) /*!< 0x00000200 */\r\n\r\n#define GPIO_CRH_MODE11_Pos (12U)\r\n#define GPIO_CRH_MODE11_Msk (0x3U << GPIO_CRH_MODE11_Pos) /*!< 0x00003000 */\r\n#define GPIO_CRH_MODE11     GPIO_CRH_MODE11_Msk           /*!< MODE11[1:0] bits (Port x mode bits, pin 11) */\r\n#define GPIO_CRH_MODE11_0   (0x1U << GPIO_CRH_MODE11_Pos) /*!< 0x00001000 */\r\n#define GPIO_CRH_MODE11_1   (0x2U << GPIO_CRH_MODE11_Pos) /*!< 0x00002000 */\r\n\r\n#define GPIO_CRH_MODE12_Pos (16U)\r\n#define GPIO_CRH_MODE12_Msk (0x3U << GPIO_CRH_MODE12_Pos) /*!< 0x00030000 */\r\n#define GPIO_CRH_MODE12     GPIO_CRH_MODE12_Msk           /*!< MODE12[1:0] bits (Port x mode bits, pin 12) */\r\n#define GPIO_CRH_MODE12_0   (0x1U << GPIO_CRH_MODE12_Pos) /*!< 0x00010000 */\r\n#define GPIO_CRH_MODE12_1   (0x2U << GPIO_CRH_MODE12_Pos) /*!< 0x00020000 */\r\n\r\n#define GPIO_CRH_MODE13_Pos (20U)\r\n#define GPIO_CRH_MODE13_Msk (0x3U << GPIO_CRH_MODE13_Pos) /*!< 0x00300000 */\r\n#define GPIO_CRH_MODE13     GPIO_CRH_MODE13_Msk           /*!< MODE13[1:0] bits (Port x mode bits, pin 13) */\r\n#define GPIO_CRH_MODE13_0   (0x1U << GPIO_CRH_MODE13_Pos) /*!< 0x00100000 */\r\n#define GPIO_CRH_MODE13_1   (0x2U << GPIO_CRH_MODE13_Pos) /*!< 0x00200000 */\r\n\r\n#define GPIO_CRH_MODE14_Pos (24U)\r\n#define GPIO_CRH_MODE14_Msk (0x3U << GPIO_CRH_MODE14_Pos) /*!< 0x03000000 */\r\n#define GPIO_CRH_MODE14     GPIO_CRH_MODE14_Msk           /*!< MODE14[1:0] bits (Port x mode bits, pin 14) */\r\n#define GPIO_CRH_MODE14_0   (0x1U << GPIO_CRH_MODE14_Pos) /*!< 0x01000000 */\r\n#define GPIO_CRH_MODE14_1   (0x2U << GPIO_CRH_MODE14_Pos) /*!< 0x02000000 */\r\n\r\n#define GPIO_CRH_MODE15_Pos (28U)\r\n#define GPIO_CRH_MODE15_Msk (0x3U << GPIO_CRH_MODE15_Pos) /*!< 0x30000000 */\r\n#define GPIO_CRH_MODE15     GPIO_CRH_MODE15_Msk           /*!< MODE15[1:0] bits (Port x mode bits, pin 15) */\r\n#define GPIO_CRH_MODE15_0   (0x1U << GPIO_CRH_MODE15_Pos) /*!< 0x10000000 */\r\n#define GPIO_CRH_MODE15_1   (0x2U << GPIO_CRH_MODE15_Pos) /*!< 0x20000000 */\r\n\r\n#define GPIO_CRH_CNF_Pos (2U)\r\n#define GPIO_CRH_CNF_Msk (0x33333333U << GPIO_CRH_CNF_Pos) /*!< 0xCCCCCCCC */\r\n#define GPIO_CRH_CNF     GPIO_CRH_CNF_Msk                  /*!< Port x configuration bits */\r\n\r\n#define GPIO_CRH_CNF8_Pos (2U)\r\n#define GPIO_CRH_CNF8_Msk (0x3U << GPIO_CRH_CNF8_Pos) /*!< 0x0000000C */\r\n#define GPIO_CRH_CNF8     GPIO_CRH_CNF8_Msk           /*!< CNF8[1:0] bits (Port x configuration bits, pin 8) */\r\n#define GPIO_CRH_CNF8_0   (0x1U << GPIO_CRH_CNF8_Pos) /*!< 0x00000004 */\r\n#define GPIO_CRH_CNF8_1   (0x2U << GPIO_CRH_CNF8_Pos) /*!< 0x00000008 */\r\n\r\n#define GPIO_CRH_CNF9_Pos (6U)\r\n#define GPIO_CRH_CNF9_Msk (0x3U << GPIO_CRH_CNF9_Pos) /*!< 0x000000C0 */\r\n#define GPIO_CRH_CNF9     GPIO_CRH_CNF9_Msk           /*!< CNF9[1:0] bits (Port x configuration bits, pin 9) */\r\n#define GPIO_CRH_CNF9_0   (0x1U << GPIO_CRH_CNF9_Pos) /*!< 0x00000040 */\r\n#define GPIO_CRH_CNF9_1   (0x2U << GPIO_CRH_CNF9_Pos) /*!< 0x00000080 */\r\n\r\n#define GPIO_CRH_CNF10_Pos (10U)\r\n#define GPIO_CRH_CNF10_Msk (0x3U << GPIO_CRH_CNF10_Pos) /*!< 0x00000C00 */\r\n#define GPIO_CRH_CNF10     GPIO_CRH_CNF10_Msk           /*!< CNF10[1:0] bits (Port x configuration bits, pin 10) */\r\n#define GPIO_CRH_CNF10_0   (0x1U << GPIO_CRH_CNF10_Pos) /*!< 0x00000400 */\r\n#define GPIO_CRH_CNF10_1   (0x2U << GPIO_CRH_CNF10_Pos) /*!< 0x00000800 */\r\n\r\n#define GPIO_CRH_CNF11_Pos (14U)\r\n#define GPIO_CRH_CNF11_Msk (0x3U << GPIO_CRH_CNF11_Pos) /*!< 0x0000C000 */\r\n#define GPIO_CRH_CNF11     GPIO_CRH_CNF11_Msk           /*!< CNF11[1:0] bits (Port x configuration bits, pin 11) */\r\n#define GPIO_CRH_CNF11_0   (0x1U << GPIO_CRH_CNF11_Pos) /*!< 0x00004000 */\r\n#define GPIO_CRH_CNF11_1   (0x2U << GPIO_CRH_CNF11_Pos) /*!< 0x00008000 */\r\n\r\n#define GPIO_CRH_CNF12_Pos (18U)\r\n#define GPIO_CRH_CNF12_Msk (0x3U << GPIO_CRH_CNF12_Pos) /*!< 0x000C0000 */\r\n#define GPIO_CRH_CNF12     GPIO_CRH_CNF12_Msk           /*!< CNF12[1:0] bits (Port x configuration bits, pin 12) */\r\n#define GPIO_CRH_CNF12_0   (0x1U << GPIO_CRH_CNF12_Pos) /*!< 0x00040000 */\r\n#define GPIO_CRH_CNF12_1   (0x2U << GPIO_CRH_CNF12_Pos) /*!< 0x00080000 */\r\n\r\n#define GPIO_CRH_CNF13_Pos (22U)\r\n#define GPIO_CRH_CNF13_Msk (0x3U << GPIO_CRH_CNF13_Pos) /*!< 0x00C00000 */\r\n#define GPIO_CRH_CNF13     GPIO_CRH_CNF13_Msk           /*!< CNF13[1:0] bits (Port x configuration bits, pin 13) */\r\n#define GPIO_CRH_CNF13_0   (0x1U << GPIO_CRH_CNF13_Pos) /*!< 0x00400000 */\r\n#define GPIO_CRH_CNF13_1   (0x2U << GPIO_CRH_CNF13_Pos) /*!< 0x00800000 */\r\n\r\n#define GPIO_CRH_CNF14_Pos (26U)\r\n#define GPIO_CRH_CNF14_Msk (0x3U << GPIO_CRH_CNF14_Pos) /*!< 0x0C000000 */\r\n#define GPIO_CRH_CNF14     GPIO_CRH_CNF14_Msk           /*!< CNF14[1:0] bits (Port x configuration bits, pin 14) */\r\n#define GPIO_CRH_CNF14_0   (0x1U << GPIO_CRH_CNF14_Pos) /*!< 0x04000000 */\r\n#define GPIO_CRH_CNF14_1   (0x2U << GPIO_CRH_CNF14_Pos) /*!< 0x08000000 */\r\n\r\n#define GPIO_CRH_CNF15_Pos (30U)\r\n#define GPIO_CRH_CNF15_Msk (0x3U << GPIO_CRH_CNF15_Pos) /*!< 0xC0000000 */\r\n#define GPIO_CRH_CNF15     GPIO_CRH_CNF15_Msk           /*!< CNF15[1:0] bits (Port x configuration bits, pin 15) */\r\n#define GPIO_CRH_CNF15_0   (0x1U << GPIO_CRH_CNF15_Pos) /*!< 0x40000000 */\r\n#define GPIO_CRH_CNF15_1   (0x2U << GPIO_CRH_CNF15_Pos) /*!< 0x80000000 */\r\n\r\n/*!<******************  Bit definition for GPIO_IDR register  *******************/\r\n#define GPIO_IDR_IDR0_Pos  (0U)\r\n#define GPIO_IDR_IDR0_Msk  (0x1U << GPIO_IDR_IDR0_Pos) /*!< 0x00000001 */\r\n#define GPIO_IDR_IDR0      GPIO_IDR_IDR0_Msk           /*!< Port input data, bit 0 */\r\n#define GPIO_IDR_IDR1_Pos  (1U)\r\n#define GPIO_IDR_IDR1_Msk  (0x1U << GPIO_IDR_IDR1_Pos) /*!< 0x00000002 */\r\n#define GPIO_IDR_IDR1      GPIO_IDR_IDR1_Msk           /*!< Port input data, bit 1 */\r\n#define GPIO_IDR_IDR2_Pos  (2U)\r\n#define GPIO_IDR_IDR2_Msk  (0x1U << GPIO_IDR_IDR2_Pos) /*!< 0x00000004 */\r\n#define GPIO_IDR_IDR2      GPIO_IDR_IDR2_Msk           /*!< Port input data, bit 2 */\r\n#define GPIO_IDR_IDR3_Pos  (3U)\r\n#define GPIO_IDR_IDR3_Msk  (0x1U << GPIO_IDR_IDR3_Pos) /*!< 0x00000008 */\r\n#define GPIO_IDR_IDR3      GPIO_IDR_IDR3_Msk           /*!< Port input data, bit 3 */\r\n#define GPIO_IDR_IDR4_Pos  (4U)\r\n#define GPIO_IDR_IDR4_Msk  (0x1U << GPIO_IDR_IDR4_Pos) /*!< 0x00000010 */\r\n#define GPIO_IDR_IDR4      GPIO_IDR_IDR4_Msk           /*!< Port input data, bit 4 */\r\n#define GPIO_IDR_IDR5_Pos  (5U)\r\n#define GPIO_IDR_IDR5_Msk  (0x1U << GPIO_IDR_IDR5_Pos) /*!< 0x00000020 */\r\n#define GPIO_IDR_IDR5      GPIO_IDR_IDR5_Msk           /*!< Port input data, bit 5 */\r\n#define GPIO_IDR_IDR6_Pos  (6U)\r\n#define GPIO_IDR_IDR6_Msk  (0x1U << GPIO_IDR_IDR6_Pos) /*!< 0x00000040 */\r\n#define GPIO_IDR_IDR6      GPIO_IDR_IDR6_Msk           /*!< Port input data, bit 6 */\r\n#define GPIO_IDR_IDR7_Pos  (7U)\r\n#define GPIO_IDR_IDR7_Msk  (0x1U << GPIO_IDR_IDR7_Pos) /*!< 0x00000080 */\r\n#define GPIO_IDR_IDR7      GPIO_IDR_IDR7_Msk           /*!< Port input data, bit 7 */\r\n#define GPIO_IDR_IDR8_Pos  (8U)\r\n#define GPIO_IDR_IDR8_Msk  (0x1U << GPIO_IDR_IDR8_Pos) /*!< 0x00000100 */\r\n#define GPIO_IDR_IDR8      GPIO_IDR_IDR8_Msk           /*!< Port input data, bit 8 */\r\n#define GPIO_IDR_IDR9_Pos  (9U)\r\n#define GPIO_IDR_IDR9_Msk  (0x1U << GPIO_IDR_IDR9_Pos) /*!< 0x00000200 */\r\n#define GPIO_IDR_IDR9      GPIO_IDR_IDR9_Msk           /*!< Port input data, bit 9 */\r\n#define GPIO_IDR_IDR10_Pos (10U)\r\n#define GPIO_IDR_IDR10_Msk (0x1U << GPIO_IDR_IDR10_Pos) /*!< 0x00000400 */\r\n#define GPIO_IDR_IDR10     GPIO_IDR_IDR10_Msk           /*!< Port input data, bit 10 */\r\n#define GPIO_IDR_IDR11_Pos (11U)\r\n#define GPIO_IDR_IDR11_Msk (0x1U << GPIO_IDR_IDR11_Pos) /*!< 0x00000800 */\r\n#define GPIO_IDR_IDR11     GPIO_IDR_IDR11_Msk           /*!< Port input data, bit 11 */\r\n#define GPIO_IDR_IDR12_Pos (12U)\r\n#define GPIO_IDR_IDR12_Msk (0x1U << GPIO_IDR_IDR12_Pos) /*!< 0x00001000 */\r\n#define GPIO_IDR_IDR12     GPIO_IDR_IDR12_Msk           /*!< Port input data, bit 12 */\r\n#define GPIO_IDR_IDR13_Pos (13U)\r\n#define GPIO_IDR_IDR13_Msk (0x1U << GPIO_IDR_IDR13_Pos) /*!< 0x00002000 */\r\n#define GPIO_IDR_IDR13     GPIO_IDR_IDR13_Msk           /*!< Port input data, bit 13 */\r\n#define GPIO_IDR_IDR14_Pos (14U)\r\n#define GPIO_IDR_IDR14_Msk (0x1U << GPIO_IDR_IDR14_Pos) /*!< 0x00004000 */\r\n#define GPIO_IDR_IDR14     GPIO_IDR_IDR14_Msk           /*!< Port input data, bit 14 */\r\n#define GPIO_IDR_IDR15_Pos (15U)\r\n#define GPIO_IDR_IDR15_Msk (0x1U << GPIO_IDR_IDR15_Pos) /*!< 0x00008000 */\r\n#define GPIO_IDR_IDR15     GPIO_IDR_IDR15_Msk           /*!< Port input data, bit 15 */\r\n\r\n/*******************  Bit definition for GPIO_ODR register  *******************/\r\n#define GPIO_ODR_ODR0_Pos  (0U)\r\n#define GPIO_ODR_ODR0_Msk  (0x1U << GPIO_ODR_ODR0_Pos) /*!< 0x00000001 */\r\n#define GPIO_ODR_ODR0      GPIO_ODR_ODR0_Msk           /*!< Port output data, bit 0 */\r\n#define GPIO_ODR_ODR1_Pos  (1U)\r\n#define GPIO_ODR_ODR1_Msk  (0x1U << GPIO_ODR_ODR1_Pos) /*!< 0x00000002 */\r\n#define GPIO_ODR_ODR1      GPIO_ODR_ODR1_Msk           /*!< Port output data, bit 1 */\r\n#define GPIO_ODR_ODR2_Pos  (2U)\r\n#define GPIO_ODR_ODR2_Msk  (0x1U << GPIO_ODR_ODR2_Pos) /*!< 0x00000004 */\r\n#define GPIO_ODR_ODR2      GPIO_ODR_ODR2_Msk           /*!< Port output data, bit 2 */\r\n#define GPIO_ODR_ODR3_Pos  (3U)\r\n#define GPIO_ODR_ODR3_Msk  (0x1U << GPIO_ODR_ODR3_Pos) /*!< 0x00000008 */\r\n#define GPIO_ODR_ODR3      GPIO_ODR_ODR3_Msk           /*!< Port output data, bit 3 */\r\n#define GPIO_ODR_ODR4_Pos  (4U)\r\n#define GPIO_ODR_ODR4_Msk  (0x1U << GPIO_ODR_ODR4_Pos) /*!< 0x00000010 */\r\n#define GPIO_ODR_ODR4      GPIO_ODR_ODR4_Msk           /*!< Port output data, bit 4 */\r\n#define GPIO_ODR_ODR5_Pos  (5U)\r\n#define GPIO_ODR_ODR5_Msk  (0x1U << GPIO_ODR_ODR5_Pos) /*!< 0x00000020 */\r\n#define GPIO_ODR_ODR5      GPIO_ODR_ODR5_Msk           /*!< Port output data, bit 5 */\r\n#define GPIO_ODR_ODR6_Pos  (6U)\r\n#define GPIO_ODR_ODR6_Msk  (0x1U << GPIO_ODR_ODR6_Pos) /*!< 0x00000040 */\r\n#define GPIO_ODR_ODR6      GPIO_ODR_ODR6_Msk           /*!< Port output data, bit 6 */\r\n#define GPIO_ODR_ODR7_Pos  (7U)\r\n#define GPIO_ODR_ODR7_Msk  (0x1U << GPIO_ODR_ODR7_Pos) /*!< 0x00000080 */\r\n#define GPIO_ODR_ODR7      GPIO_ODR_ODR7_Msk           /*!< Port output data, bit 7 */\r\n#define GPIO_ODR_ODR8_Pos  (8U)\r\n#define GPIO_ODR_ODR8_Msk  (0x1U << GPIO_ODR_ODR8_Pos) /*!< 0x00000100 */\r\n#define GPIO_ODR_ODR8      GPIO_ODR_ODR8_Msk           /*!< Port output data, bit 8 */\r\n#define GPIO_ODR_ODR9_Pos  (9U)\r\n#define GPIO_ODR_ODR9_Msk  (0x1U << GPIO_ODR_ODR9_Pos) /*!< 0x00000200 */\r\n#define GPIO_ODR_ODR9      GPIO_ODR_ODR9_Msk           /*!< Port output data, bit 9 */\r\n#define GPIO_ODR_ODR10_Pos (10U)\r\n#define GPIO_ODR_ODR10_Msk (0x1U << GPIO_ODR_ODR10_Pos) /*!< 0x00000400 */\r\n#define GPIO_ODR_ODR10     GPIO_ODR_ODR10_Msk           /*!< Port output data, bit 10 */\r\n#define GPIO_ODR_ODR11_Pos (11U)\r\n#define GPIO_ODR_ODR11_Msk (0x1U << GPIO_ODR_ODR11_Pos) /*!< 0x00000800 */\r\n#define GPIO_ODR_ODR11     GPIO_ODR_ODR11_Msk           /*!< Port output data, bit 11 */\r\n#define GPIO_ODR_ODR12_Pos (12U)\r\n#define GPIO_ODR_ODR12_Msk (0x1U << GPIO_ODR_ODR12_Pos) /*!< 0x00001000 */\r\n#define GPIO_ODR_ODR12     GPIO_ODR_ODR12_Msk           /*!< Port output data, bit 12 */\r\n#define GPIO_ODR_ODR13_Pos (13U)\r\n#define GPIO_ODR_ODR13_Msk (0x1U << GPIO_ODR_ODR13_Pos) /*!< 0x00002000 */\r\n#define GPIO_ODR_ODR13     GPIO_ODR_ODR13_Msk           /*!< Port output data, bit 13 */\r\n#define GPIO_ODR_ODR14_Pos (14U)\r\n#define GPIO_ODR_ODR14_Msk (0x1U << GPIO_ODR_ODR14_Pos) /*!< 0x00004000 */\r\n#define GPIO_ODR_ODR14     GPIO_ODR_ODR14_Msk           /*!< Port output data, bit 14 */\r\n#define GPIO_ODR_ODR15_Pos (15U)\r\n#define GPIO_ODR_ODR15_Msk (0x1U << GPIO_ODR_ODR15_Pos) /*!< 0x00008000 */\r\n#define GPIO_ODR_ODR15     GPIO_ODR_ODR15_Msk           /*!< Port output data, bit 15 */\r\n\r\n/******************  Bit definition for GPIO_BSRR register  *******************/\r\n#define GPIO_BSRR_BS0_Pos  (0U)\r\n#define GPIO_BSRR_BS0_Msk  (0x1U << GPIO_BSRR_BS0_Pos) /*!< 0x00000001 */\r\n#define GPIO_BSRR_BS0      GPIO_BSRR_BS0_Msk           /*!< Port x Set bit 0 */\r\n#define GPIO_BSRR_BS1_Pos  (1U)\r\n#define GPIO_BSRR_BS1_Msk  (0x1U << GPIO_BSRR_BS1_Pos) /*!< 0x00000002 */\r\n#define GPIO_BSRR_BS1      GPIO_BSRR_BS1_Msk           /*!< Port x Set bit 1 */\r\n#define GPIO_BSRR_BS2_Pos  (2U)\r\n#define GPIO_BSRR_BS2_Msk  (0x1U << GPIO_BSRR_BS2_Pos) /*!< 0x00000004 */\r\n#define GPIO_BSRR_BS2      GPIO_BSRR_BS2_Msk           /*!< Port x Set bit 2 */\r\n#define GPIO_BSRR_BS3_Pos  (3U)\r\n#define GPIO_BSRR_BS3_Msk  (0x1U << GPIO_BSRR_BS3_Pos) /*!< 0x00000008 */\r\n#define GPIO_BSRR_BS3      GPIO_BSRR_BS3_Msk           /*!< Port x Set bit 3 */\r\n#define GPIO_BSRR_BS4_Pos  (4U)\r\n#define GPIO_BSRR_BS4_Msk  (0x1U << GPIO_BSRR_BS4_Pos) /*!< 0x00000010 */\r\n#define GPIO_BSRR_BS4      GPIO_BSRR_BS4_Msk           /*!< Port x Set bit 4 */\r\n#define GPIO_BSRR_BS5_Pos  (5U)\r\n#define GPIO_BSRR_BS5_Msk  (0x1U << GPIO_BSRR_BS5_Pos) /*!< 0x00000020 */\r\n#define GPIO_BSRR_BS5      GPIO_BSRR_BS5_Msk           /*!< Port x Set bit 5 */\r\n#define GPIO_BSRR_BS6_Pos  (6U)\r\n#define GPIO_BSRR_BS6_Msk  (0x1U << GPIO_BSRR_BS6_Pos) /*!< 0x00000040 */\r\n#define GPIO_BSRR_BS6      GPIO_BSRR_BS6_Msk           /*!< Port x Set bit 6 */\r\n#define GPIO_BSRR_BS7_Pos  (7U)\r\n#define GPIO_BSRR_BS7_Msk  (0x1U << GPIO_BSRR_BS7_Pos) /*!< 0x00000080 */\r\n#define GPIO_BSRR_BS7      GPIO_BSRR_BS7_Msk           /*!< Port x Set bit 7 */\r\n#define GPIO_BSRR_BS8_Pos  (8U)\r\n#define GPIO_BSRR_BS8_Msk  (0x1U << GPIO_BSRR_BS8_Pos) /*!< 0x00000100 */\r\n#define GPIO_BSRR_BS8      GPIO_BSRR_BS8_Msk           /*!< Port x Set bit 8 */\r\n#define GPIO_BSRR_BS9_Pos  (9U)\r\n#define GPIO_BSRR_BS9_Msk  (0x1U << GPIO_BSRR_BS9_Pos) /*!< 0x00000200 */\r\n#define GPIO_BSRR_BS9      GPIO_BSRR_BS9_Msk           /*!< Port x Set bit 9 */\r\n#define GPIO_BSRR_BS10_Pos (10U)\r\n#define GPIO_BSRR_BS10_Msk (0x1U << GPIO_BSRR_BS10_Pos) /*!< 0x00000400 */\r\n#define GPIO_BSRR_BS10     GPIO_BSRR_BS10_Msk           /*!< Port x Set bit 10 */\r\n#define GPIO_BSRR_BS11_Pos (11U)\r\n#define GPIO_BSRR_BS11_Msk (0x1U << GPIO_BSRR_BS11_Pos) /*!< 0x00000800 */\r\n#define GPIO_BSRR_BS11     GPIO_BSRR_BS11_Msk           /*!< Port x Set bit 11 */\r\n#define GPIO_BSRR_BS12_Pos (12U)\r\n#define GPIO_BSRR_BS12_Msk (0x1U << GPIO_BSRR_BS12_Pos) /*!< 0x00001000 */\r\n#define GPIO_BSRR_BS12     GPIO_BSRR_BS12_Msk           /*!< Port x Set bit 12 */\r\n#define GPIO_BSRR_BS13_Pos (13U)\r\n#define GPIO_BSRR_BS13_Msk (0x1U << GPIO_BSRR_BS13_Pos) /*!< 0x00002000 */\r\n#define GPIO_BSRR_BS13     GPIO_BSRR_BS13_Msk           /*!< Port x Set bit 13 */\r\n#define GPIO_BSRR_BS14_Pos (14U)\r\n#define GPIO_BSRR_BS14_Msk (0x1U << GPIO_BSRR_BS14_Pos) /*!< 0x00004000 */\r\n#define GPIO_BSRR_BS14     GPIO_BSRR_BS14_Msk           /*!< Port x Set bit 14 */\r\n#define GPIO_BSRR_BS15_Pos (15U)\r\n#define GPIO_BSRR_BS15_Msk (0x1U << GPIO_BSRR_BS15_Pos) /*!< 0x00008000 */\r\n#define GPIO_BSRR_BS15     GPIO_BSRR_BS15_Msk           /*!< Port x Set bit 15 */\r\n\r\n#define GPIO_BSRR_BR0_Pos  (16U)\r\n#define GPIO_BSRR_BR0_Msk  (0x1U << GPIO_BSRR_BR0_Pos) /*!< 0x00010000 */\r\n#define GPIO_BSRR_BR0      GPIO_BSRR_BR0_Msk           /*!< Port x Reset bit 0 */\r\n#define GPIO_BSRR_BR1_Pos  (17U)\r\n#define GPIO_BSRR_BR1_Msk  (0x1U << GPIO_BSRR_BR1_Pos) /*!< 0x00020000 */\r\n#define GPIO_BSRR_BR1      GPIO_BSRR_BR1_Msk           /*!< Port x Reset bit 1 */\r\n#define GPIO_BSRR_BR2_Pos  (18U)\r\n#define GPIO_BSRR_BR2_Msk  (0x1U << GPIO_BSRR_BR2_Pos) /*!< 0x00040000 */\r\n#define GPIO_BSRR_BR2      GPIO_BSRR_BR2_Msk           /*!< Port x Reset bit 2 */\r\n#define GPIO_BSRR_BR3_Pos  (19U)\r\n#define GPIO_BSRR_BR3_Msk  (0x1U << GPIO_BSRR_BR3_Pos) /*!< 0x00080000 */\r\n#define GPIO_BSRR_BR3      GPIO_BSRR_BR3_Msk           /*!< Port x Reset bit 3 */\r\n#define GPIO_BSRR_BR4_Pos  (20U)\r\n#define GPIO_BSRR_BR4_Msk  (0x1U << GPIO_BSRR_BR4_Pos) /*!< 0x00100000 */\r\n#define GPIO_BSRR_BR4      GPIO_BSRR_BR4_Msk           /*!< Port x Reset bit 4 */\r\n#define GPIO_BSRR_BR5_Pos  (21U)\r\n#define GPIO_BSRR_BR5_Msk  (0x1U << GPIO_BSRR_BR5_Pos) /*!< 0x00200000 */\r\n#define GPIO_BSRR_BR5      GPIO_BSRR_BR5_Msk           /*!< Port x Reset bit 5 */\r\n#define GPIO_BSRR_BR6_Pos  (22U)\r\n#define GPIO_BSRR_BR6_Msk  (0x1U << GPIO_BSRR_BR6_Pos) /*!< 0x00400000 */\r\n#define GPIO_BSRR_BR6      GPIO_BSRR_BR6_Msk           /*!< Port x Reset bit 6 */\r\n#define GPIO_BSRR_BR7_Pos  (23U)\r\n#define GPIO_BSRR_BR7_Msk  (0x1U << GPIO_BSRR_BR7_Pos) /*!< 0x00800000 */\r\n#define GPIO_BSRR_BR7      GPIO_BSRR_BR7_Msk           /*!< Port x Reset bit 7 */\r\n#define GPIO_BSRR_BR8_Pos  (24U)\r\n#define GPIO_BSRR_BR8_Msk  (0x1U << GPIO_BSRR_BR8_Pos) /*!< 0x01000000 */\r\n#define GPIO_BSRR_BR8      GPIO_BSRR_BR8_Msk           /*!< Port x Reset bit 8 */\r\n#define GPIO_BSRR_BR9_Pos  (25U)\r\n#define GPIO_BSRR_BR9_Msk  (0x1U << GPIO_BSRR_BR9_Pos) /*!< 0x02000000 */\r\n#define GPIO_BSRR_BR9      GPIO_BSRR_BR9_Msk           /*!< Port x Reset bit 9 */\r\n#define GPIO_BSRR_BR10_Pos (26U)\r\n#define GPIO_BSRR_BR10_Msk (0x1U << GPIO_BSRR_BR10_Pos) /*!< 0x04000000 */\r\n#define GPIO_BSRR_BR10     GPIO_BSRR_BR10_Msk           /*!< Port x Reset bit 10 */\r\n#define GPIO_BSRR_BR11_Pos (27U)\r\n#define GPIO_BSRR_BR11_Msk (0x1U << GPIO_BSRR_BR11_Pos) /*!< 0x08000000 */\r\n#define GPIO_BSRR_BR11     GPIO_BSRR_BR11_Msk           /*!< Port x Reset bit 11 */\r\n#define GPIO_BSRR_BR12_Pos (28U)\r\n#define GPIO_BSRR_BR12_Msk (0x1U << GPIO_BSRR_BR12_Pos) /*!< 0x10000000 */\r\n#define GPIO_BSRR_BR12     GPIO_BSRR_BR12_Msk           /*!< Port x Reset bit 12 */\r\n#define GPIO_BSRR_BR13_Pos (29U)\r\n#define GPIO_BSRR_BR13_Msk (0x1U << GPIO_BSRR_BR13_Pos) /*!< 0x20000000 */\r\n#define GPIO_BSRR_BR13     GPIO_BSRR_BR13_Msk           /*!< Port x Reset bit 13 */\r\n#define GPIO_BSRR_BR14_Pos (30U)\r\n#define GPIO_BSRR_BR14_Msk (0x1U << GPIO_BSRR_BR14_Pos) /*!< 0x40000000 */\r\n#define GPIO_BSRR_BR14     GPIO_BSRR_BR14_Msk           /*!< Port x Reset bit 14 */\r\n#define GPIO_BSRR_BR15_Pos (31U)\r\n#define GPIO_BSRR_BR15_Msk (0x1U << GPIO_BSRR_BR15_Pos) /*!< 0x80000000 */\r\n#define GPIO_BSRR_BR15     GPIO_BSRR_BR15_Msk           /*!< Port x Reset bit 15 */\r\n\r\n/*******************  Bit definition for GPIO_BRR register  *******************/\r\n#define GPIO_BRR_BR0_Pos  (0U)\r\n#define GPIO_BRR_BR0_Msk  (0x1U << GPIO_BRR_BR0_Pos) /*!< 0x00000001 */\r\n#define GPIO_BRR_BR0      GPIO_BRR_BR0_Msk           /*!< Port x Reset bit 0 */\r\n#define GPIO_BRR_BR1_Pos  (1U)\r\n#define GPIO_BRR_BR1_Msk  (0x1U << GPIO_BRR_BR1_Pos) /*!< 0x00000002 */\r\n#define GPIO_BRR_BR1      GPIO_BRR_BR1_Msk           /*!< Port x Reset bit 1 */\r\n#define GPIO_BRR_BR2_Pos  (2U)\r\n#define GPIO_BRR_BR2_Msk  (0x1U << GPIO_BRR_BR2_Pos) /*!< 0x00000004 */\r\n#define GPIO_BRR_BR2      GPIO_BRR_BR2_Msk           /*!< Port x Reset bit 2 */\r\n#define GPIO_BRR_BR3_Pos  (3U)\r\n#define GPIO_BRR_BR3_Msk  (0x1U << GPIO_BRR_BR3_Pos) /*!< 0x00000008 */\r\n#define GPIO_BRR_BR3      GPIO_BRR_BR3_Msk           /*!< Port x Reset bit 3 */\r\n#define GPIO_BRR_BR4_Pos  (4U)\r\n#define GPIO_BRR_BR4_Msk  (0x1U << GPIO_BRR_BR4_Pos) /*!< 0x00000010 */\r\n#define GPIO_BRR_BR4      GPIO_BRR_BR4_Msk           /*!< Port x Reset bit 4 */\r\n#define GPIO_BRR_BR5_Pos  (5U)\r\n#define GPIO_BRR_BR5_Msk  (0x1U << GPIO_BRR_BR5_Pos) /*!< 0x00000020 */\r\n#define GPIO_BRR_BR5      GPIO_BRR_BR5_Msk           /*!< Port x Reset bit 5 */\r\n#define GPIO_BRR_BR6_Pos  (6U)\r\n#define GPIO_BRR_BR6_Msk  (0x1U << GPIO_BRR_BR6_Pos) /*!< 0x00000040 */\r\n#define GPIO_BRR_BR6      GPIO_BRR_BR6_Msk           /*!< Port x Reset bit 6 */\r\n#define GPIO_BRR_BR7_Pos  (7U)\r\n#define GPIO_BRR_BR7_Msk  (0x1U << GPIO_BRR_BR7_Pos) /*!< 0x00000080 */\r\n#define GPIO_BRR_BR7      GPIO_BRR_BR7_Msk           /*!< Port x Reset bit 7 */\r\n#define GPIO_BRR_BR8_Pos  (8U)\r\n#define GPIO_BRR_BR8_Msk  (0x1U << GPIO_BRR_BR8_Pos) /*!< 0x00000100 */\r\n#define GPIO_BRR_BR8      GPIO_BRR_BR8_Msk           /*!< Port x Reset bit 8 */\r\n#define GPIO_BRR_BR9_Pos  (9U)\r\n#define GPIO_BRR_BR9_Msk  (0x1U << GPIO_BRR_BR9_Pos) /*!< 0x00000200 */\r\n#define GPIO_BRR_BR9      GPIO_BRR_BR9_Msk           /*!< Port x Reset bit 9 */\r\n#define GPIO_BRR_BR10_Pos (10U)\r\n#define GPIO_BRR_BR10_Msk (0x1U << GPIO_BRR_BR10_Pos) /*!< 0x00000400 */\r\n#define GPIO_BRR_BR10     GPIO_BRR_BR10_Msk           /*!< Port x Reset bit 10 */\r\n#define GPIO_BRR_BR11_Pos (11U)\r\n#define GPIO_BRR_BR11_Msk (0x1U << GPIO_BRR_BR11_Pos) /*!< 0x00000800 */\r\n#define GPIO_BRR_BR11     GPIO_BRR_BR11_Msk           /*!< Port x Reset bit 11 */\r\n#define GPIO_BRR_BR12_Pos (12U)\r\n#define GPIO_BRR_BR12_Msk (0x1U << GPIO_BRR_BR12_Pos) /*!< 0x00001000 */\r\n#define GPIO_BRR_BR12     GPIO_BRR_BR12_Msk           /*!< Port x Reset bit 12 */\r\n#define GPIO_BRR_BR13_Pos (13U)\r\n#define GPIO_BRR_BR13_Msk (0x1U << GPIO_BRR_BR13_Pos) /*!< 0x00002000 */\r\n#define GPIO_BRR_BR13     GPIO_BRR_BR13_Msk           /*!< Port x Reset bit 13 */\r\n#define GPIO_BRR_BR14_Pos (14U)\r\n#define GPIO_BRR_BR14_Msk (0x1U << GPIO_BRR_BR14_Pos) /*!< 0x00004000 */\r\n#define GPIO_BRR_BR14     GPIO_BRR_BR14_Msk           /*!< Port x Reset bit 14 */\r\n#define GPIO_BRR_BR15_Pos (15U)\r\n#define GPIO_BRR_BR15_Msk (0x1U << GPIO_BRR_BR15_Pos) /*!< 0x00008000 */\r\n#define GPIO_BRR_BR15     GPIO_BRR_BR15_Msk           /*!< Port x Reset bit 15 */\r\n\r\n/******************  Bit definition for GPIO_LCKR register  *******************/\r\n#define GPIO_LCKR_LCK0_Pos  (0U)\r\n#define GPIO_LCKR_LCK0_Msk  (0x1U << GPIO_LCKR_LCK0_Pos) /*!< 0x00000001 */\r\n#define GPIO_LCKR_LCK0      GPIO_LCKR_LCK0_Msk           /*!< Port x Lock bit 0 */\r\n#define GPIO_LCKR_LCK1_Pos  (1U)\r\n#define GPIO_LCKR_LCK1_Msk  (0x1U << GPIO_LCKR_LCK1_Pos) /*!< 0x00000002 */\r\n#define GPIO_LCKR_LCK1      GPIO_LCKR_LCK1_Msk           /*!< Port x Lock bit 1 */\r\n#define GPIO_LCKR_LCK2_Pos  (2U)\r\n#define GPIO_LCKR_LCK2_Msk  (0x1U << GPIO_LCKR_LCK2_Pos) /*!< 0x00000004 */\r\n#define GPIO_LCKR_LCK2      GPIO_LCKR_LCK2_Msk           /*!< Port x Lock bit 2 */\r\n#define GPIO_LCKR_LCK3_Pos  (3U)\r\n#define GPIO_LCKR_LCK3_Msk  (0x1U << GPIO_LCKR_LCK3_Pos) /*!< 0x00000008 */\r\n#define GPIO_LCKR_LCK3      GPIO_LCKR_LCK3_Msk           /*!< Port x Lock bit 3 */\r\n#define GPIO_LCKR_LCK4_Pos  (4U)\r\n#define GPIO_LCKR_LCK4_Msk  (0x1U << GPIO_LCKR_LCK4_Pos) /*!< 0x00000010 */\r\n#define GPIO_LCKR_LCK4      GPIO_LCKR_LCK4_Msk           /*!< Port x Lock bit 4 */\r\n#define GPIO_LCKR_LCK5_Pos  (5U)\r\n#define GPIO_LCKR_LCK5_Msk  (0x1U << GPIO_LCKR_LCK5_Pos) /*!< 0x00000020 */\r\n#define GPIO_LCKR_LCK5      GPIO_LCKR_LCK5_Msk           /*!< Port x Lock bit 5 */\r\n#define GPIO_LCKR_LCK6_Pos  (6U)\r\n#define GPIO_LCKR_LCK6_Msk  (0x1U << GPIO_LCKR_LCK6_Pos) /*!< 0x00000040 */\r\n#define GPIO_LCKR_LCK6      GPIO_LCKR_LCK6_Msk           /*!< Port x Lock bit 6 */\r\n#define GPIO_LCKR_LCK7_Pos  (7U)\r\n#define GPIO_LCKR_LCK7_Msk  (0x1U << GPIO_LCKR_LCK7_Pos) /*!< 0x00000080 */\r\n#define GPIO_LCKR_LCK7      GPIO_LCKR_LCK7_Msk           /*!< Port x Lock bit 7 */\r\n#define GPIO_LCKR_LCK8_Pos  (8U)\r\n#define GPIO_LCKR_LCK8_Msk  (0x1U << GPIO_LCKR_LCK8_Pos) /*!< 0x00000100 */\r\n#define GPIO_LCKR_LCK8      GPIO_LCKR_LCK8_Msk           /*!< Port x Lock bit 8 */\r\n#define GPIO_LCKR_LCK9_Pos  (9U)\r\n#define GPIO_LCKR_LCK9_Msk  (0x1U << GPIO_LCKR_LCK9_Pos) /*!< 0x00000200 */\r\n#define GPIO_LCKR_LCK9      GPIO_LCKR_LCK9_Msk           /*!< Port x Lock bit 9 */\r\n#define GPIO_LCKR_LCK10_Pos (10U)\r\n#define GPIO_LCKR_LCK10_Msk (0x1U << GPIO_LCKR_LCK10_Pos) /*!< 0x00000400 */\r\n#define GPIO_LCKR_LCK10     GPIO_LCKR_LCK10_Msk           /*!< Port x Lock bit 10 */\r\n#define GPIO_LCKR_LCK11_Pos (11U)\r\n#define GPIO_LCKR_LCK11_Msk (0x1U << GPIO_LCKR_LCK11_Pos) /*!< 0x00000800 */\r\n#define GPIO_LCKR_LCK11     GPIO_LCKR_LCK11_Msk           /*!< Port x Lock bit 11 */\r\n#define GPIO_LCKR_LCK12_Pos (12U)\r\n#define GPIO_LCKR_LCK12_Msk (0x1U << GPIO_LCKR_LCK12_Pos) /*!< 0x00001000 */\r\n#define GPIO_LCKR_LCK12     GPIO_LCKR_LCK12_Msk           /*!< Port x Lock bit 12 */\r\n#define GPIO_LCKR_LCK13_Pos (13U)\r\n#define GPIO_LCKR_LCK13_Msk (0x1U << GPIO_LCKR_LCK13_Pos) /*!< 0x00002000 */\r\n#define GPIO_LCKR_LCK13     GPIO_LCKR_LCK13_Msk           /*!< Port x Lock bit 13 */\r\n#define GPIO_LCKR_LCK14_Pos (14U)\r\n#define GPIO_LCKR_LCK14_Msk (0x1U << GPIO_LCKR_LCK14_Pos) /*!< 0x00004000 */\r\n#define GPIO_LCKR_LCK14     GPIO_LCKR_LCK14_Msk           /*!< Port x Lock bit 14 */\r\n#define GPIO_LCKR_LCK15_Pos (15U)\r\n#define GPIO_LCKR_LCK15_Msk (0x1U << GPIO_LCKR_LCK15_Pos) /*!< 0x00008000 */\r\n#define GPIO_LCKR_LCK15     GPIO_LCKR_LCK15_Msk           /*!< Port x Lock bit 15 */\r\n#define GPIO_LCKR_LCKK_Pos  (16U)\r\n#define GPIO_LCKR_LCKK_Msk  (0x1U << GPIO_LCKR_LCKK_Pos) /*!< 0x00010000 */\r\n#define GPIO_LCKR_LCKK      GPIO_LCKR_LCKK_Msk           /*!< Lock key */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/******************  Bit definition for AFIO_EVCR register  *******************/\r\n#define AFIO_EVCR_PIN_Pos (0U)\r\n#define AFIO_EVCR_PIN_Msk (0xFU << AFIO_EVCR_PIN_Pos) /*!< 0x0000000F */\r\n#define AFIO_EVCR_PIN     AFIO_EVCR_PIN_Msk           /*!< PIN[3:0] bits (Pin selection) */\r\n#define AFIO_EVCR_PIN_0   (0x1U << AFIO_EVCR_PIN_Pos) /*!< 0x00000001 */\r\n#define AFIO_EVCR_PIN_1   (0x2U << AFIO_EVCR_PIN_Pos) /*!< 0x00000002 */\r\n#define AFIO_EVCR_PIN_2   (0x4U << AFIO_EVCR_PIN_Pos) /*!< 0x00000004 */\r\n#define AFIO_EVCR_PIN_3   (0x8U << AFIO_EVCR_PIN_Pos) /*!< 0x00000008 */\r\n\r\n/*!< PIN configuration */\r\n#define AFIO_EVCR_PIN_PX0      0x00000000U /*!< Pin 0 selected */\r\n#define AFIO_EVCR_PIN_PX1_Pos  (0U)\r\n#define AFIO_EVCR_PIN_PX1_Msk  (0x1U << AFIO_EVCR_PIN_PX1_Pos) /*!< 0x00000001 */\r\n#define AFIO_EVCR_PIN_PX1      AFIO_EVCR_PIN_PX1_Msk           /*!< Pin 1 selected */\r\n#define AFIO_EVCR_PIN_PX2_Pos  (1U)\r\n#define AFIO_EVCR_PIN_PX2_Msk  (0x1U << AFIO_EVCR_PIN_PX2_Pos) /*!< 0x00000002 */\r\n#define AFIO_EVCR_PIN_PX2      AFIO_EVCR_PIN_PX2_Msk           /*!< Pin 2 selected */\r\n#define AFIO_EVCR_PIN_PX3_Pos  (0U)\r\n#define AFIO_EVCR_PIN_PX3_Msk  (0x3U << AFIO_EVCR_PIN_PX3_Pos) /*!< 0x00000003 */\r\n#define AFIO_EVCR_PIN_PX3      AFIO_EVCR_PIN_PX3_Msk           /*!< Pin 3 selected */\r\n#define AFIO_EVCR_PIN_PX4_Pos  (2U)\r\n#define AFIO_EVCR_PIN_PX4_Msk  (0x1U << AFIO_EVCR_PIN_PX4_Pos) /*!< 0x00000004 */\r\n#define AFIO_EVCR_PIN_PX4      AFIO_EVCR_PIN_PX4_Msk           /*!< Pin 4 selected */\r\n#define AFIO_EVCR_PIN_PX5_Pos  (0U)\r\n#define AFIO_EVCR_PIN_PX5_Msk  (0x5U << AFIO_EVCR_PIN_PX5_Pos) /*!< 0x00000005 */\r\n#define AFIO_EVCR_PIN_PX5      AFIO_EVCR_PIN_PX5_Msk           /*!< Pin 5 selected */\r\n#define AFIO_EVCR_PIN_PX6_Pos  (1U)\r\n#define AFIO_EVCR_PIN_PX6_Msk  (0x3U << AFIO_EVCR_PIN_PX6_Pos) /*!< 0x00000006 */\r\n#define AFIO_EVCR_PIN_PX6      AFIO_EVCR_PIN_PX6_Msk           /*!< Pin 6 selected */\r\n#define AFIO_EVCR_PIN_PX7_Pos  (0U)\r\n#define AFIO_EVCR_PIN_PX7_Msk  (0x7U << AFIO_EVCR_PIN_PX7_Pos) /*!< 0x00000007 */\r\n#define AFIO_EVCR_PIN_PX7      AFIO_EVCR_PIN_PX7_Msk           /*!< Pin 7 selected */\r\n#define AFIO_EVCR_PIN_PX8_Pos  (3U)\r\n#define AFIO_EVCR_PIN_PX8_Msk  (0x1U << AFIO_EVCR_PIN_PX8_Pos) /*!< 0x00000008 */\r\n#define AFIO_EVCR_PIN_PX8      AFIO_EVCR_PIN_PX8_Msk           /*!< Pin 8 selected */\r\n#define AFIO_EVCR_PIN_PX9_Pos  (0U)\r\n#define AFIO_EVCR_PIN_PX9_Msk  (0x9U << AFIO_EVCR_PIN_PX9_Pos) /*!< 0x00000009 */\r\n#define AFIO_EVCR_PIN_PX9      AFIO_EVCR_PIN_PX9_Msk           /*!< Pin 9 selected */\r\n#define AFIO_EVCR_PIN_PX10_Pos (1U)\r\n#define AFIO_EVCR_PIN_PX10_Msk (0x5U << AFIO_EVCR_PIN_PX10_Pos) /*!< 0x0000000A */\r\n#define AFIO_EVCR_PIN_PX10     AFIO_EVCR_PIN_PX10_Msk           /*!< Pin 10 selected */\r\n#define AFIO_EVCR_PIN_PX11_Pos (0U)\r\n#define AFIO_EVCR_PIN_PX11_Msk (0xBU << AFIO_EVCR_PIN_PX11_Pos) /*!< 0x0000000B */\r\n#define AFIO_EVCR_PIN_PX11     AFIO_EVCR_PIN_PX11_Msk           /*!< Pin 11 selected */\r\n#define AFIO_EVCR_PIN_PX12_Pos (2U)\r\n#define AFIO_EVCR_PIN_PX12_Msk (0x3U << AFIO_EVCR_PIN_PX12_Pos) /*!< 0x0000000C */\r\n#define AFIO_EVCR_PIN_PX12     AFIO_EVCR_PIN_PX12_Msk           /*!< Pin 12 selected */\r\n#define AFIO_EVCR_PIN_PX13_Pos (0U)\r\n#define AFIO_EVCR_PIN_PX13_Msk (0xDU << AFIO_EVCR_PIN_PX13_Pos) /*!< 0x0000000D */\r\n#define AFIO_EVCR_PIN_PX13     AFIO_EVCR_PIN_PX13_Msk           /*!< Pin 13 selected */\r\n#define AFIO_EVCR_PIN_PX14_Pos (1U)\r\n#define AFIO_EVCR_PIN_PX14_Msk (0x7U << AFIO_EVCR_PIN_PX14_Pos) /*!< 0x0000000E */\r\n#define AFIO_EVCR_PIN_PX14     AFIO_EVCR_PIN_PX14_Msk           /*!< Pin 14 selected */\r\n#define AFIO_EVCR_PIN_PX15_Pos (0U)\r\n#define AFIO_EVCR_PIN_PX15_Msk (0xFU << AFIO_EVCR_PIN_PX15_Pos) /*!< 0x0000000F */\r\n#define AFIO_EVCR_PIN_PX15     AFIO_EVCR_PIN_PX15_Msk           /*!< Pin 15 selected */\r\n\r\n#define AFIO_EVCR_PORT_Pos (4U)\r\n#define AFIO_EVCR_PORT_Msk (0x7U << AFIO_EVCR_PORT_Pos) /*!< 0x00000070 */\r\n#define AFIO_EVCR_PORT     AFIO_EVCR_PORT_Msk           /*!< PORT[2:0] bits (Port selection) */\r\n#define AFIO_EVCR_PORT_0   (0x1U << AFIO_EVCR_PORT_Pos) /*!< 0x00000010 */\r\n#define AFIO_EVCR_PORT_1   (0x2U << AFIO_EVCR_PORT_Pos) /*!< 0x00000020 */\r\n#define AFIO_EVCR_PORT_2   (0x4U << AFIO_EVCR_PORT_Pos) /*!< 0x00000040 */\r\n\r\n/*!< PORT configuration */\r\n#define AFIO_EVCR_PORT_PA     0x00000000 /*!< Port A selected */\r\n#define AFIO_EVCR_PORT_PB_Pos (4U)\r\n#define AFIO_EVCR_PORT_PB_Msk (0x1U << AFIO_EVCR_PORT_PB_Pos) /*!< 0x00000010 */\r\n#define AFIO_EVCR_PORT_PB     AFIO_EVCR_PORT_PB_Msk           /*!< Port B selected */\r\n#define AFIO_EVCR_PORT_PC_Pos (5U)\r\n#define AFIO_EVCR_PORT_PC_Msk (0x1U << AFIO_EVCR_PORT_PC_Pos) /*!< 0x00000020 */\r\n#define AFIO_EVCR_PORT_PC     AFIO_EVCR_PORT_PC_Msk           /*!< Port C selected */\r\n#define AFIO_EVCR_PORT_PD_Pos (4U)\r\n#define AFIO_EVCR_PORT_PD_Msk (0x3U << AFIO_EVCR_PORT_PD_Pos) /*!< 0x00000030 */\r\n#define AFIO_EVCR_PORT_PD     AFIO_EVCR_PORT_PD_Msk           /*!< Port D selected */\r\n#define AFIO_EVCR_PORT_PE_Pos (6U)\r\n#define AFIO_EVCR_PORT_PE_Msk (0x1U << AFIO_EVCR_PORT_PE_Pos) /*!< 0x00000040 */\r\n#define AFIO_EVCR_PORT_PE     AFIO_EVCR_PORT_PE_Msk           /*!< Port E selected */\r\n\r\n#define AFIO_EVCR_EVOE_Pos (7U)\r\n#define AFIO_EVCR_EVOE_Msk (0x1U << AFIO_EVCR_EVOE_Pos) /*!< 0x00000080 */\r\n#define AFIO_EVCR_EVOE     AFIO_EVCR_EVOE_Msk           /*!< Event Output Enable */\r\n\r\n/******************  Bit definition for AFIO_MAPR register  *******************/\r\n#define AFIO_MAPR_SPI1_REMAP_Pos   (0U)\r\n#define AFIO_MAPR_SPI1_REMAP_Msk   (0x1U << AFIO_MAPR_SPI1_REMAP_Pos) /*!< 0x00000001 */\r\n#define AFIO_MAPR_SPI1_REMAP       AFIO_MAPR_SPI1_REMAP_Msk           /*!< SPI1 remapping */\r\n#define AFIO_MAPR_I2C1_REMAP_Pos   (1U)\r\n#define AFIO_MAPR_I2C1_REMAP_Msk   (0x1U << AFIO_MAPR_I2C1_REMAP_Pos) /*!< 0x00000002 */\r\n#define AFIO_MAPR_I2C1_REMAP       AFIO_MAPR_I2C1_REMAP_Msk           /*!< I2C1 remapping */\r\n#define AFIO_MAPR_USART1_REMAP_Pos (2U)\r\n#define AFIO_MAPR_USART1_REMAP_Msk (0x1U << AFIO_MAPR_USART1_REMAP_Pos) /*!< 0x00000004 */\r\n#define AFIO_MAPR_USART1_REMAP     AFIO_MAPR_USART1_REMAP_Msk           /*!< USART1 remapping */\r\n#define AFIO_MAPR_USART2_REMAP_Pos (3U)\r\n#define AFIO_MAPR_USART2_REMAP_Msk (0x1U << AFIO_MAPR_USART2_REMAP_Pos) /*!< 0x00000008 */\r\n#define AFIO_MAPR_USART2_REMAP     AFIO_MAPR_USART2_REMAP_Msk           /*!< USART2 remapping */\r\n\r\n#define AFIO_MAPR_USART3_REMAP_Pos (4U)\r\n#define AFIO_MAPR_USART3_REMAP_Msk (0x3U << AFIO_MAPR_USART3_REMAP_Pos) /*!< 0x00000030 */\r\n#define AFIO_MAPR_USART3_REMAP     AFIO_MAPR_USART3_REMAP_Msk           /*!< USART3_REMAP[1:0] bits (USART3 remapping) */\r\n#define AFIO_MAPR_USART3_REMAP_0   (0x1U << AFIO_MAPR_USART3_REMAP_Pos) /*!< 0x00000010 */\r\n#define AFIO_MAPR_USART3_REMAP_1   (0x2U << AFIO_MAPR_USART3_REMAP_Pos) /*!< 0x00000020 */\r\n\r\n/* USART3_REMAP configuration */\r\n#define AFIO_MAPR_USART3_REMAP_NOREMAP          0x00000000U /*!< No remap (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14) */\r\n#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Pos (4U)\r\n#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Msk (0x1U << AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Pos) /*!< 0x00000010 */\r\n#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP     AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Msk           /*!< Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14) */\r\n#define AFIO_MAPR_USART3_REMAP_FULLREMAP_Pos    (4U)\r\n#define AFIO_MAPR_USART3_REMAP_FULLREMAP_Msk    (0x3U << AFIO_MAPR_USART3_REMAP_FULLREMAP_Pos) /*!< 0x00000030 */\r\n#define AFIO_MAPR_USART3_REMAP_FULLREMAP        AFIO_MAPR_USART3_REMAP_FULLREMAP_Msk           /*!< Full remap (TX/PD8, RX/PD9, CK/PD10, CTS/PD11, RTS/PD12) */\r\n\r\n#define AFIO_MAPR_TIM1_REMAP_Pos (6U)\r\n#define AFIO_MAPR_TIM1_REMAP_Msk (0x3U << AFIO_MAPR_TIM1_REMAP_Pos) /*!< 0x000000C0 */\r\n#define AFIO_MAPR_TIM1_REMAP     AFIO_MAPR_TIM1_REMAP_Msk           /*!< TIM1_REMAP[1:0] bits (TIM1 remapping) */\r\n#define AFIO_MAPR_TIM1_REMAP_0   (0x1U << AFIO_MAPR_TIM1_REMAP_Pos) /*!< 0x00000040 */\r\n#define AFIO_MAPR_TIM1_REMAP_1   (0x2U << AFIO_MAPR_TIM1_REMAP_Pos) /*!< 0x00000080 */\r\n\r\n/*!< TIM1_REMAP configuration */\r\n#define AFIO_MAPR_TIM1_REMAP_NOREMAP          0x00000000U /*!< No remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PB12, CH1N/PB13, CH2N/PB14, CH3N/PB15) */\r\n#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Pos (6U)\r\n#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Msk (0x1U << AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Pos) /*!< 0x00000040 */\r\n#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP     AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Msk /*!< Partial remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PA6, CH1N/PA7, CH2N/PB0, CH3N/PB1) */\r\n#define AFIO_MAPR_TIM1_REMAP_FULLREMAP_Pos    (6U)\r\n#define AFIO_MAPR_TIM1_REMAP_FULLREMAP_Msk    (0x3U << AFIO_MAPR_TIM1_REMAP_FULLREMAP_Pos) /*!< 0x000000C0 */\r\n#define AFIO_MAPR_TIM1_REMAP_FULLREMAP        AFIO_MAPR_TIM1_REMAP_FULLREMAP_Msk /*!< Full remap (ETR/PE7, CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8, CH2N/PE10, CH3N/PE12) */\r\n\r\n#define AFIO_MAPR_TIM2_REMAP_Pos (8U)\r\n#define AFIO_MAPR_TIM2_REMAP_Msk (0x3U << AFIO_MAPR_TIM2_REMAP_Pos) /*!< 0x00000300 */\r\n#define AFIO_MAPR_TIM2_REMAP     AFIO_MAPR_TIM2_REMAP_Msk           /*!< TIM2_REMAP[1:0] bits (TIM2 remapping) */\r\n#define AFIO_MAPR_TIM2_REMAP_0   (0x1U << AFIO_MAPR_TIM2_REMAP_Pos) /*!< 0x00000100 */\r\n#define AFIO_MAPR_TIM2_REMAP_1   (0x2U << AFIO_MAPR_TIM2_REMAP_Pos) /*!< 0x00000200 */\r\n\r\n/*!< TIM2_REMAP configuration */\r\n#define AFIO_MAPR_TIM2_REMAP_NOREMAP           0x00000000U /*!< No remap (CH1/ETR/PA0, CH2/PA1, CH3/PA2, CH4/PA3) */\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Pos (8U)\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Msk (0x1U << AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Pos) /*!< 0x00000100 */\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1     AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Msk           /*!< Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2, CH4/PA3) */\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Pos (9U)\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Msk (0x1U << AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Pos) /*!< 0x00000200 */\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2     AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Msk           /*!< Partial remap (CH1/ETR/PA0, CH2/PA1, CH3/PB10, CH4/PB11) */\r\n#define AFIO_MAPR_TIM2_REMAP_FULLREMAP_Pos     (8U)\r\n#define AFIO_MAPR_TIM2_REMAP_FULLREMAP_Msk     (0x3U << AFIO_MAPR_TIM2_REMAP_FULLREMAP_Pos) /*!< 0x00000300 */\r\n#define AFIO_MAPR_TIM2_REMAP_FULLREMAP         AFIO_MAPR_TIM2_REMAP_FULLREMAP_Msk           /*!< Full remap (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11) */\r\n\r\n#define AFIO_MAPR_TIM3_REMAP_Pos (10U)\r\n#define AFIO_MAPR_TIM3_REMAP_Msk (0x3U << AFIO_MAPR_TIM3_REMAP_Pos) /*!< 0x00000C00 */\r\n#define AFIO_MAPR_TIM3_REMAP     AFIO_MAPR_TIM3_REMAP_Msk           /*!< TIM3_REMAP[1:0] bits (TIM3 remapping) */\r\n#define AFIO_MAPR_TIM3_REMAP_0   (0x1U << AFIO_MAPR_TIM3_REMAP_Pos) /*!< 0x00000400 */\r\n#define AFIO_MAPR_TIM3_REMAP_1   (0x2U << AFIO_MAPR_TIM3_REMAP_Pos) /*!< 0x00000800 */\r\n\r\n/*!< TIM3_REMAP configuration */\r\n#define AFIO_MAPR_TIM3_REMAP_NOREMAP          0x00000000U /*!< No remap (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1) */\r\n#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Pos (11U)\r\n#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Msk (0x1U << AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Pos) /*!< 0x00000800 */\r\n#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP     AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Msk           /*!< Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1) */\r\n#define AFIO_MAPR_TIM3_REMAP_FULLREMAP_Pos    (10U)\r\n#define AFIO_MAPR_TIM3_REMAP_FULLREMAP_Msk    (0x3U << AFIO_MAPR_TIM3_REMAP_FULLREMAP_Pos) /*!< 0x00000C00 */\r\n#define AFIO_MAPR_TIM3_REMAP_FULLREMAP        AFIO_MAPR_TIM3_REMAP_FULLREMAP_Msk           /*!< Full remap (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9) */\r\n\r\n#define AFIO_MAPR_TIM4_REMAP_Pos (12U)\r\n#define AFIO_MAPR_TIM4_REMAP_Msk (0x1U << AFIO_MAPR_TIM4_REMAP_Pos) /*!< 0x00001000 */\r\n#define AFIO_MAPR_TIM4_REMAP     AFIO_MAPR_TIM4_REMAP_Msk           /*!< TIM4_REMAP bit (TIM4 remapping) */\r\n\r\n#define AFIO_MAPR_CAN_REMAP_Pos (13U)\r\n#define AFIO_MAPR_CAN_REMAP_Msk (0x3U << AFIO_MAPR_CAN_REMAP_Pos) /*!< 0x00006000 */\r\n#define AFIO_MAPR_CAN_REMAP     AFIO_MAPR_CAN_REMAP_Msk           /*!< CAN_REMAP[1:0] bits (CAN Alternate function remapping) */\r\n#define AFIO_MAPR_CAN_REMAP_0   (0x1U << AFIO_MAPR_CAN_REMAP_Pos) /*!< 0x00002000 */\r\n#define AFIO_MAPR_CAN_REMAP_1   (0x2U << AFIO_MAPR_CAN_REMAP_Pos) /*!< 0x00004000 */\r\n\r\n/*!< CAN_REMAP configuration */\r\n#define AFIO_MAPR_CAN_REMAP_REMAP1     0x00000000U /*!< CANRX mapped to PA11, CANTX mapped to PA12 */\r\n#define AFIO_MAPR_CAN_REMAP_REMAP2_Pos (14U)\r\n#define AFIO_MAPR_CAN_REMAP_REMAP2_Msk (0x1U << AFIO_MAPR_CAN_REMAP_REMAP2_Pos) /*!< 0x00004000 */\r\n#define AFIO_MAPR_CAN_REMAP_REMAP2     AFIO_MAPR_CAN_REMAP_REMAP2_Msk           /*!< CANRX mapped to PB8, CANTX mapped to PB9 */\r\n#define AFIO_MAPR_CAN_REMAP_REMAP3_Pos (13U)\r\n#define AFIO_MAPR_CAN_REMAP_REMAP3_Msk (0x3U << AFIO_MAPR_CAN_REMAP_REMAP3_Pos) /*!< 0x00006000 */\r\n#define AFIO_MAPR_CAN_REMAP_REMAP3     AFIO_MAPR_CAN_REMAP_REMAP3_Msk           /*!< CANRX mapped to PD0, CANTX mapped to PD1 */\r\n\r\n#define AFIO_MAPR_PD01_REMAP_Pos (15U)\r\n#define AFIO_MAPR_PD01_REMAP_Msk (0x1U << AFIO_MAPR_PD01_REMAP_Pos) /*!< 0x00008000 */\r\n#define AFIO_MAPR_PD01_REMAP     AFIO_MAPR_PD01_REMAP_Msk           /*!< Port D0/Port D1 mapping on OSC_IN/OSC_OUT */\r\n\r\n/*!< SWJ_CFG configuration */\r\n#define AFIO_MAPR_SWJ_CFG_Pos (24U)\r\n#define AFIO_MAPR_SWJ_CFG_Msk (0x7U << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x07000000 */\r\n#define AFIO_MAPR_SWJ_CFG     AFIO_MAPR_SWJ_CFG_Msk           /*!< SWJ_CFG[2:0] bits (Serial Wire JTAG configuration) */\r\n#define AFIO_MAPR_SWJ_CFG_0   (0x1U << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x01000000 */\r\n#define AFIO_MAPR_SWJ_CFG_1   (0x2U << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x02000000 */\r\n#define AFIO_MAPR_SWJ_CFG_2   (0x4U << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x04000000 */\r\n\r\n#define AFIO_MAPR_SWJ_CFG_RESET           0x00000000U /*!< Full SWJ (JTAG-DP + SW-DP) : Reset State */\r\n#define AFIO_MAPR_SWJ_CFG_NOJNTRST_Pos    (24U)\r\n#define AFIO_MAPR_SWJ_CFG_NOJNTRST_Msk    (0x1U << AFIO_MAPR_SWJ_CFG_NOJNTRST_Pos) /*!< 0x01000000 */\r\n#define AFIO_MAPR_SWJ_CFG_NOJNTRST        AFIO_MAPR_SWJ_CFG_NOJNTRST_Msk           /*!< Full SWJ (JTAG-DP + SW-DP) but without JNTRST */\r\n#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Pos (25U)\r\n#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Msk (0x1U << AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Pos) /*!< 0x02000000 */\r\n#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE     AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Msk           /*!< JTAG-DP Disabled and SW-DP Enabled */\r\n#define AFIO_MAPR_SWJ_CFG_DISABLE_Pos     (26U)\r\n#define AFIO_MAPR_SWJ_CFG_DISABLE_Msk     (0x1U << AFIO_MAPR_SWJ_CFG_DISABLE_Pos) /*!< 0x04000000 */\r\n#define AFIO_MAPR_SWJ_CFG_DISABLE         AFIO_MAPR_SWJ_CFG_DISABLE_Msk           /*!< JTAG-DP Disabled and SW-DP Disabled */\r\n\r\n/*****************  Bit definition for AFIO_EXTICR1 register  *****************/\r\n#define AFIO_EXTICR1_EXTI0_Pos (0U)\r\n#define AFIO_EXTICR1_EXTI0_Msk (0xFU << AFIO_EXTICR1_EXTI0_Pos) /*!< 0x0000000F */\r\n#define AFIO_EXTICR1_EXTI0     AFIO_EXTICR1_EXTI0_Msk           /*!< EXTI 0 configuration */\r\n#define AFIO_EXTICR1_EXTI1_Pos (4U)\r\n#define AFIO_EXTICR1_EXTI1_Msk (0xFU << AFIO_EXTICR1_EXTI1_Pos) /*!< 0x000000F0 */\r\n#define AFIO_EXTICR1_EXTI1     AFIO_EXTICR1_EXTI1_Msk           /*!< EXTI 1 configuration */\r\n#define AFIO_EXTICR1_EXTI2_Pos (8U)\r\n#define AFIO_EXTICR1_EXTI2_Msk (0xFU << AFIO_EXTICR1_EXTI2_Pos) /*!< 0x00000F00 */\r\n#define AFIO_EXTICR1_EXTI2     AFIO_EXTICR1_EXTI2_Msk           /*!< EXTI 2 configuration */\r\n#define AFIO_EXTICR1_EXTI3_Pos (12U)\r\n#define AFIO_EXTICR1_EXTI3_Msk (0xFU << AFIO_EXTICR1_EXTI3_Pos) /*!< 0x0000F000 */\r\n#define AFIO_EXTICR1_EXTI3     AFIO_EXTICR1_EXTI3_Msk           /*!< EXTI 3 configuration */\r\n\r\n/*!< EXTI0 configuration */\r\n#define AFIO_EXTICR1_EXTI0_PA     0x00000000U /*!< PA[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PB_Pos (0U)\r\n#define AFIO_EXTICR1_EXTI0_PB_Msk (0x1U << AFIO_EXTICR1_EXTI0_PB_Pos) /*!< 0x00000001 */\r\n#define AFIO_EXTICR1_EXTI0_PB     AFIO_EXTICR1_EXTI0_PB_Msk           /*!< PB[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PC_Pos (1U)\r\n#define AFIO_EXTICR1_EXTI0_PC_Msk (0x1U << AFIO_EXTICR1_EXTI0_PC_Pos) /*!< 0x00000002 */\r\n#define AFIO_EXTICR1_EXTI0_PC     AFIO_EXTICR1_EXTI0_PC_Msk           /*!< PC[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PD_Pos (0U)\r\n#define AFIO_EXTICR1_EXTI0_PD_Msk (0x3U << AFIO_EXTICR1_EXTI0_PD_Pos) /*!< 0x00000003 */\r\n#define AFIO_EXTICR1_EXTI0_PD     AFIO_EXTICR1_EXTI0_PD_Msk           /*!< PD[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PE_Pos (2U)\r\n#define AFIO_EXTICR1_EXTI0_PE_Msk (0x1U << AFIO_EXTICR1_EXTI0_PE_Pos) /*!< 0x00000004 */\r\n#define AFIO_EXTICR1_EXTI0_PE     AFIO_EXTICR1_EXTI0_PE_Msk           /*!< PE[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PF_Pos (0U)\r\n#define AFIO_EXTICR1_EXTI0_PF_Msk (0x5U << AFIO_EXTICR1_EXTI0_PF_Pos) /*!< 0x00000005 */\r\n#define AFIO_EXTICR1_EXTI0_PF     AFIO_EXTICR1_EXTI0_PF_Msk           /*!< PF[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PG_Pos (1U)\r\n#define AFIO_EXTICR1_EXTI0_PG_Msk (0x3U << AFIO_EXTICR1_EXTI0_PG_Pos) /*!< 0x00000006 */\r\n#define AFIO_EXTICR1_EXTI0_PG     AFIO_EXTICR1_EXTI0_PG_Msk           /*!< PG[0] pin */\r\n\r\n/*!< EXTI1 configuration */\r\n#define AFIO_EXTICR1_EXTI1_PA     0x00000000U /*!< PA[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PB_Pos (4U)\r\n#define AFIO_EXTICR1_EXTI1_PB_Msk (0x1U << AFIO_EXTICR1_EXTI1_PB_Pos) /*!< 0x00000010 */\r\n#define AFIO_EXTICR1_EXTI1_PB     AFIO_EXTICR1_EXTI1_PB_Msk           /*!< PB[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PC_Pos (5U)\r\n#define AFIO_EXTICR1_EXTI1_PC_Msk (0x1U << AFIO_EXTICR1_EXTI1_PC_Pos) /*!< 0x00000020 */\r\n#define AFIO_EXTICR1_EXTI1_PC     AFIO_EXTICR1_EXTI1_PC_Msk           /*!< PC[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PD_Pos (4U)\r\n#define AFIO_EXTICR1_EXTI1_PD_Msk (0x3U << AFIO_EXTICR1_EXTI1_PD_Pos) /*!< 0x00000030 */\r\n#define AFIO_EXTICR1_EXTI1_PD     AFIO_EXTICR1_EXTI1_PD_Msk           /*!< PD[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PE_Pos (6U)\r\n#define AFIO_EXTICR1_EXTI1_PE_Msk (0x1U << AFIO_EXTICR1_EXTI1_PE_Pos) /*!< 0x00000040 */\r\n#define AFIO_EXTICR1_EXTI1_PE     AFIO_EXTICR1_EXTI1_PE_Msk           /*!< PE[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PF_Pos (4U)\r\n#define AFIO_EXTICR1_EXTI1_PF_Msk (0x5U << AFIO_EXTICR1_EXTI1_PF_Pos) /*!< 0x00000050 */\r\n#define AFIO_EXTICR1_EXTI1_PF     AFIO_EXTICR1_EXTI1_PF_Msk           /*!< PF[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PG_Pos (5U)\r\n#define AFIO_EXTICR1_EXTI1_PG_Msk (0x3U << AFIO_EXTICR1_EXTI1_PG_Pos) /*!< 0x00000060 */\r\n#define AFIO_EXTICR1_EXTI1_PG     AFIO_EXTICR1_EXTI1_PG_Msk           /*!< PG[1] pin */\r\n\r\n/*!< EXTI2 configuration */\r\n#define AFIO_EXTICR1_EXTI2_PA     0x00000000U /*!< PA[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PB_Pos (8U)\r\n#define AFIO_EXTICR1_EXTI2_PB_Msk (0x1U << AFIO_EXTICR1_EXTI2_PB_Pos) /*!< 0x00000100 */\r\n#define AFIO_EXTICR1_EXTI2_PB     AFIO_EXTICR1_EXTI2_PB_Msk           /*!< PB[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PC_Pos (9U)\r\n#define AFIO_EXTICR1_EXTI2_PC_Msk (0x1U << AFIO_EXTICR1_EXTI2_PC_Pos) /*!< 0x00000200 */\r\n#define AFIO_EXTICR1_EXTI2_PC     AFIO_EXTICR1_EXTI2_PC_Msk           /*!< PC[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PD_Pos (8U)\r\n#define AFIO_EXTICR1_EXTI2_PD_Msk (0x3U << AFIO_EXTICR1_EXTI2_PD_Pos) /*!< 0x00000300 */\r\n#define AFIO_EXTICR1_EXTI2_PD     AFIO_EXTICR1_EXTI2_PD_Msk           /*!< PD[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PE_Pos (10U)\r\n#define AFIO_EXTICR1_EXTI2_PE_Msk (0x1U << AFIO_EXTICR1_EXTI2_PE_Pos) /*!< 0x00000400 */\r\n#define AFIO_EXTICR1_EXTI2_PE     AFIO_EXTICR1_EXTI2_PE_Msk           /*!< PE[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PF_Pos (8U)\r\n#define AFIO_EXTICR1_EXTI2_PF_Msk (0x5U << AFIO_EXTICR1_EXTI2_PF_Pos) /*!< 0x00000500 */\r\n#define AFIO_EXTICR1_EXTI2_PF     AFIO_EXTICR1_EXTI2_PF_Msk           /*!< PF[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PG_Pos (9U)\r\n#define AFIO_EXTICR1_EXTI2_PG_Msk (0x3U << AFIO_EXTICR1_EXTI2_PG_Pos) /*!< 0x00000600 */\r\n#define AFIO_EXTICR1_EXTI2_PG     AFIO_EXTICR1_EXTI2_PG_Msk           /*!< PG[2] pin */\r\n\r\n/*!< EXTI3 configuration */\r\n#define AFIO_EXTICR1_EXTI3_PA     0x00000000U /*!< PA[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PB_Pos (12U)\r\n#define AFIO_EXTICR1_EXTI3_PB_Msk (0x1U << AFIO_EXTICR1_EXTI3_PB_Pos) /*!< 0x00001000 */\r\n#define AFIO_EXTICR1_EXTI3_PB     AFIO_EXTICR1_EXTI3_PB_Msk           /*!< PB[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PC_Pos (13U)\r\n#define AFIO_EXTICR1_EXTI3_PC_Msk (0x1U << AFIO_EXTICR1_EXTI3_PC_Pos) /*!< 0x00002000 */\r\n#define AFIO_EXTICR1_EXTI3_PC     AFIO_EXTICR1_EXTI3_PC_Msk           /*!< PC[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PD_Pos (12U)\r\n#define AFIO_EXTICR1_EXTI3_PD_Msk (0x3U << AFIO_EXTICR1_EXTI3_PD_Pos) /*!< 0x00003000 */\r\n#define AFIO_EXTICR1_EXTI3_PD     AFIO_EXTICR1_EXTI3_PD_Msk           /*!< PD[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PE_Pos (14U)\r\n#define AFIO_EXTICR1_EXTI3_PE_Msk (0x1U << AFIO_EXTICR1_EXTI3_PE_Pos) /*!< 0x00004000 */\r\n#define AFIO_EXTICR1_EXTI3_PE     AFIO_EXTICR1_EXTI3_PE_Msk           /*!< PE[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PF_Pos (12U)\r\n#define AFIO_EXTICR1_EXTI3_PF_Msk (0x5U << AFIO_EXTICR1_EXTI3_PF_Pos) /*!< 0x00005000 */\r\n#define AFIO_EXTICR1_EXTI3_PF     AFIO_EXTICR1_EXTI3_PF_Msk           /*!< PF[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PG_Pos (13U)\r\n#define AFIO_EXTICR1_EXTI3_PG_Msk (0x3U << AFIO_EXTICR1_EXTI3_PG_Pos) /*!< 0x00006000 */\r\n#define AFIO_EXTICR1_EXTI3_PG     AFIO_EXTICR1_EXTI3_PG_Msk           /*!< PG[3] pin */\r\n\r\n/*****************  Bit definition for AFIO_EXTICR2 register  *****************/\r\n#define AFIO_EXTICR2_EXTI4_Pos (0U)\r\n#define AFIO_EXTICR2_EXTI4_Msk (0xFU << AFIO_EXTICR2_EXTI4_Pos) /*!< 0x0000000F */\r\n#define AFIO_EXTICR2_EXTI4     AFIO_EXTICR2_EXTI4_Msk           /*!< EXTI 4 configuration */\r\n#define AFIO_EXTICR2_EXTI5_Pos (4U)\r\n#define AFIO_EXTICR2_EXTI5_Msk (0xFU << AFIO_EXTICR2_EXTI5_Pos) /*!< 0x000000F0 */\r\n#define AFIO_EXTICR2_EXTI5     AFIO_EXTICR2_EXTI5_Msk           /*!< EXTI 5 configuration */\r\n#define AFIO_EXTICR2_EXTI6_Pos (8U)\r\n#define AFIO_EXTICR2_EXTI6_Msk (0xFU << AFIO_EXTICR2_EXTI6_Pos) /*!< 0x00000F00 */\r\n#define AFIO_EXTICR2_EXTI6     AFIO_EXTICR2_EXTI6_Msk           /*!< EXTI 6 configuration */\r\n#define AFIO_EXTICR2_EXTI7_Pos (12U)\r\n#define AFIO_EXTICR2_EXTI7_Msk (0xFU << AFIO_EXTICR2_EXTI7_Pos) /*!< 0x0000F000 */\r\n#define AFIO_EXTICR2_EXTI7     AFIO_EXTICR2_EXTI7_Msk           /*!< EXTI 7 configuration */\r\n\r\n/*!< EXTI4 configuration */\r\n#define AFIO_EXTICR2_EXTI4_PA     0x00000000U /*!< PA[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PB_Pos (0U)\r\n#define AFIO_EXTICR2_EXTI4_PB_Msk (0x1U << AFIO_EXTICR2_EXTI4_PB_Pos) /*!< 0x00000001 */\r\n#define AFIO_EXTICR2_EXTI4_PB     AFIO_EXTICR2_EXTI4_PB_Msk           /*!< PB[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PC_Pos (1U)\r\n#define AFIO_EXTICR2_EXTI4_PC_Msk (0x1U << AFIO_EXTICR2_EXTI4_PC_Pos) /*!< 0x00000002 */\r\n#define AFIO_EXTICR2_EXTI4_PC     AFIO_EXTICR2_EXTI4_PC_Msk           /*!< PC[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PD_Pos (0U)\r\n#define AFIO_EXTICR2_EXTI4_PD_Msk (0x3U << AFIO_EXTICR2_EXTI4_PD_Pos) /*!< 0x00000003 */\r\n#define AFIO_EXTICR2_EXTI4_PD     AFIO_EXTICR2_EXTI4_PD_Msk           /*!< PD[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PE_Pos (2U)\r\n#define AFIO_EXTICR2_EXTI4_PE_Msk (0x1U << AFIO_EXTICR2_EXTI4_PE_Pos) /*!< 0x00000004 */\r\n#define AFIO_EXTICR2_EXTI4_PE     AFIO_EXTICR2_EXTI4_PE_Msk           /*!< PE[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PF_Pos (0U)\r\n#define AFIO_EXTICR2_EXTI4_PF_Msk (0x5U << AFIO_EXTICR2_EXTI4_PF_Pos) /*!< 0x00000005 */\r\n#define AFIO_EXTICR2_EXTI4_PF     AFIO_EXTICR2_EXTI4_PF_Msk           /*!< PF[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PG_Pos (1U)\r\n#define AFIO_EXTICR2_EXTI4_PG_Msk (0x3U << AFIO_EXTICR2_EXTI4_PG_Pos) /*!< 0x00000006 */\r\n#define AFIO_EXTICR2_EXTI4_PG     AFIO_EXTICR2_EXTI4_PG_Msk           /*!< PG[4] pin */\r\n\r\n/* EXTI5 configuration */\r\n#define AFIO_EXTICR2_EXTI5_PA     0x00000000U /*!< PA[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PB_Pos (4U)\r\n#define AFIO_EXTICR2_EXTI5_PB_Msk (0x1U << AFIO_EXTICR2_EXTI5_PB_Pos) /*!< 0x00000010 */\r\n#define AFIO_EXTICR2_EXTI5_PB     AFIO_EXTICR2_EXTI5_PB_Msk           /*!< PB[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PC_Pos (5U)\r\n#define AFIO_EXTICR2_EXTI5_PC_Msk (0x1U << AFIO_EXTICR2_EXTI5_PC_Pos) /*!< 0x00000020 */\r\n#define AFIO_EXTICR2_EXTI5_PC     AFIO_EXTICR2_EXTI5_PC_Msk           /*!< PC[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PD_Pos (4U)\r\n#define AFIO_EXTICR2_EXTI5_PD_Msk (0x3U << AFIO_EXTICR2_EXTI5_PD_Pos) /*!< 0x00000030 */\r\n#define AFIO_EXTICR2_EXTI5_PD     AFIO_EXTICR2_EXTI5_PD_Msk           /*!< PD[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PE_Pos (6U)\r\n#define AFIO_EXTICR2_EXTI5_PE_Msk (0x1U << AFIO_EXTICR2_EXTI5_PE_Pos) /*!< 0x00000040 */\r\n#define AFIO_EXTICR2_EXTI5_PE     AFIO_EXTICR2_EXTI5_PE_Msk           /*!< PE[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PF_Pos (4U)\r\n#define AFIO_EXTICR2_EXTI5_PF_Msk (0x5U << AFIO_EXTICR2_EXTI5_PF_Pos) /*!< 0x00000050 */\r\n#define AFIO_EXTICR2_EXTI5_PF     AFIO_EXTICR2_EXTI5_PF_Msk           /*!< PF[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PG_Pos (5U)\r\n#define AFIO_EXTICR2_EXTI5_PG_Msk (0x3U << AFIO_EXTICR2_EXTI5_PG_Pos) /*!< 0x00000060 */\r\n#define AFIO_EXTICR2_EXTI5_PG     AFIO_EXTICR2_EXTI5_PG_Msk           /*!< PG[5] pin */\r\n\r\n/*!< EXTI6 configuration */\r\n#define AFIO_EXTICR2_EXTI6_PA     0x00000000U /*!< PA[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PB_Pos (8U)\r\n#define AFIO_EXTICR2_EXTI6_PB_Msk (0x1U << AFIO_EXTICR2_EXTI6_PB_Pos) /*!< 0x00000100 */\r\n#define AFIO_EXTICR2_EXTI6_PB     AFIO_EXTICR2_EXTI6_PB_Msk           /*!< PB[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PC_Pos (9U)\r\n#define AFIO_EXTICR2_EXTI6_PC_Msk (0x1U << AFIO_EXTICR2_EXTI6_PC_Pos) /*!< 0x00000200 */\r\n#define AFIO_EXTICR2_EXTI6_PC     AFIO_EXTICR2_EXTI6_PC_Msk           /*!< PC[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PD_Pos (8U)\r\n#define AFIO_EXTICR2_EXTI6_PD_Msk (0x3U << AFIO_EXTICR2_EXTI6_PD_Pos) /*!< 0x00000300 */\r\n#define AFIO_EXTICR2_EXTI6_PD     AFIO_EXTICR2_EXTI6_PD_Msk           /*!< PD[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PE_Pos (10U)\r\n#define AFIO_EXTICR2_EXTI6_PE_Msk (0x1U << AFIO_EXTICR2_EXTI6_PE_Pos) /*!< 0x00000400 */\r\n#define AFIO_EXTICR2_EXTI6_PE     AFIO_EXTICR2_EXTI6_PE_Msk           /*!< PE[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PF_Pos (8U)\r\n#define AFIO_EXTICR2_EXTI6_PF_Msk (0x5U << AFIO_EXTICR2_EXTI6_PF_Pos) /*!< 0x00000500 */\r\n#define AFIO_EXTICR2_EXTI6_PF     AFIO_EXTICR2_EXTI6_PF_Msk           /*!< PF[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PG_Pos (9U)\r\n#define AFIO_EXTICR2_EXTI6_PG_Msk (0x3U << AFIO_EXTICR2_EXTI6_PG_Pos) /*!< 0x00000600 */\r\n#define AFIO_EXTICR2_EXTI6_PG     AFIO_EXTICR2_EXTI6_PG_Msk           /*!< PG[6] pin */\r\n\r\n/*!< EXTI7 configuration */\r\n#define AFIO_EXTICR2_EXTI7_PA     0x00000000U /*!< PA[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PB_Pos (12U)\r\n#define AFIO_EXTICR2_EXTI7_PB_Msk (0x1U << AFIO_EXTICR2_EXTI7_PB_Pos) /*!< 0x00001000 */\r\n#define AFIO_EXTICR2_EXTI7_PB     AFIO_EXTICR2_EXTI7_PB_Msk           /*!< PB[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PC_Pos (13U)\r\n#define AFIO_EXTICR2_EXTI7_PC_Msk (0x1U << AFIO_EXTICR2_EXTI7_PC_Pos) /*!< 0x00002000 */\r\n#define AFIO_EXTICR2_EXTI7_PC     AFIO_EXTICR2_EXTI7_PC_Msk           /*!< PC[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PD_Pos (12U)\r\n#define AFIO_EXTICR2_EXTI7_PD_Msk (0x3U << AFIO_EXTICR2_EXTI7_PD_Pos) /*!< 0x00003000 */\r\n#define AFIO_EXTICR2_EXTI7_PD     AFIO_EXTICR2_EXTI7_PD_Msk           /*!< PD[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PE_Pos (14U)\r\n#define AFIO_EXTICR2_EXTI7_PE_Msk (0x1U << AFIO_EXTICR2_EXTI7_PE_Pos) /*!< 0x00004000 */\r\n#define AFIO_EXTICR2_EXTI7_PE     AFIO_EXTICR2_EXTI7_PE_Msk           /*!< PE[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PF_Pos (12U)\r\n#define AFIO_EXTICR2_EXTI7_PF_Msk (0x5U << AFIO_EXTICR2_EXTI7_PF_Pos) /*!< 0x00005000 */\r\n#define AFIO_EXTICR2_EXTI7_PF     AFIO_EXTICR2_EXTI7_PF_Msk           /*!< PF[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PG_Pos (13U)\r\n#define AFIO_EXTICR2_EXTI7_PG_Msk (0x3U << AFIO_EXTICR2_EXTI7_PG_Pos) /*!< 0x00006000 */\r\n#define AFIO_EXTICR2_EXTI7_PG     AFIO_EXTICR2_EXTI7_PG_Msk           /*!< PG[7] pin */\r\n\r\n/*****************  Bit definition for AFIO_EXTICR3 register  *****************/\r\n#define AFIO_EXTICR3_EXTI8_Pos  (0U)\r\n#define AFIO_EXTICR3_EXTI8_Msk  (0xFU << AFIO_EXTICR3_EXTI8_Pos) /*!< 0x0000000F */\r\n#define AFIO_EXTICR3_EXTI8      AFIO_EXTICR3_EXTI8_Msk           /*!< EXTI 8 configuration */\r\n#define AFIO_EXTICR3_EXTI9_Pos  (4U)\r\n#define AFIO_EXTICR3_EXTI9_Msk  (0xFU << AFIO_EXTICR3_EXTI9_Pos) /*!< 0x000000F0 */\r\n#define AFIO_EXTICR3_EXTI9      AFIO_EXTICR3_EXTI9_Msk           /*!< EXTI 9 configuration */\r\n#define AFIO_EXTICR3_EXTI10_Pos (8U)\r\n#define AFIO_EXTICR3_EXTI10_Msk (0xFU << AFIO_EXTICR3_EXTI10_Pos) /*!< 0x00000F00 */\r\n#define AFIO_EXTICR3_EXTI10     AFIO_EXTICR3_EXTI10_Msk           /*!< EXTI 10 configuration */\r\n#define AFIO_EXTICR3_EXTI11_Pos (12U)\r\n#define AFIO_EXTICR3_EXTI11_Msk (0xFU << AFIO_EXTICR3_EXTI11_Pos) /*!< 0x0000F000 */\r\n#define AFIO_EXTICR3_EXTI11     AFIO_EXTICR3_EXTI11_Msk           /*!< EXTI 11 configuration */\r\n\r\n/*!< EXTI8 configuration */\r\n#define AFIO_EXTICR3_EXTI8_PA     0x00000000U /*!< PA[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PB_Pos (0U)\r\n#define AFIO_EXTICR3_EXTI8_PB_Msk (0x1U << AFIO_EXTICR3_EXTI8_PB_Pos) /*!< 0x00000001 */\r\n#define AFIO_EXTICR3_EXTI8_PB     AFIO_EXTICR3_EXTI8_PB_Msk           /*!< PB[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PC_Pos (1U)\r\n#define AFIO_EXTICR3_EXTI8_PC_Msk (0x1U << AFIO_EXTICR3_EXTI8_PC_Pos) /*!< 0x00000002 */\r\n#define AFIO_EXTICR3_EXTI8_PC     AFIO_EXTICR3_EXTI8_PC_Msk           /*!< PC[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PD_Pos (0U)\r\n#define AFIO_EXTICR3_EXTI8_PD_Msk (0x3U << AFIO_EXTICR3_EXTI8_PD_Pos) /*!< 0x00000003 */\r\n#define AFIO_EXTICR3_EXTI8_PD     AFIO_EXTICR3_EXTI8_PD_Msk           /*!< PD[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PE_Pos (2U)\r\n#define AFIO_EXTICR3_EXTI8_PE_Msk (0x1U << AFIO_EXTICR3_EXTI8_PE_Pos) /*!< 0x00000004 */\r\n#define AFIO_EXTICR3_EXTI8_PE     AFIO_EXTICR3_EXTI8_PE_Msk           /*!< PE[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PF_Pos (0U)\r\n#define AFIO_EXTICR3_EXTI8_PF_Msk (0x5U << AFIO_EXTICR3_EXTI8_PF_Pos) /*!< 0x00000005 */\r\n#define AFIO_EXTICR3_EXTI8_PF     AFIO_EXTICR3_EXTI8_PF_Msk           /*!< PF[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PG_Pos (1U)\r\n#define AFIO_EXTICR3_EXTI8_PG_Msk (0x3U << AFIO_EXTICR3_EXTI8_PG_Pos) /*!< 0x00000006 */\r\n#define AFIO_EXTICR3_EXTI8_PG     AFIO_EXTICR3_EXTI8_PG_Msk           /*!< PG[8] pin */\r\n\r\n/*!< EXTI9 configuration */\r\n#define AFIO_EXTICR3_EXTI9_PA     0x00000000U /*!< PA[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PB_Pos (4U)\r\n#define AFIO_EXTICR3_EXTI9_PB_Msk (0x1U << AFIO_EXTICR3_EXTI9_PB_Pos) /*!< 0x00000010 */\r\n#define AFIO_EXTICR3_EXTI9_PB     AFIO_EXTICR3_EXTI9_PB_Msk           /*!< PB[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PC_Pos (5U)\r\n#define AFIO_EXTICR3_EXTI9_PC_Msk (0x1U << AFIO_EXTICR3_EXTI9_PC_Pos) /*!< 0x00000020 */\r\n#define AFIO_EXTICR3_EXTI9_PC     AFIO_EXTICR3_EXTI9_PC_Msk           /*!< PC[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PD_Pos (4U)\r\n#define AFIO_EXTICR3_EXTI9_PD_Msk (0x3U << AFIO_EXTICR3_EXTI9_PD_Pos) /*!< 0x00000030 */\r\n#define AFIO_EXTICR3_EXTI9_PD     AFIO_EXTICR3_EXTI9_PD_Msk           /*!< PD[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PE_Pos (6U)\r\n#define AFIO_EXTICR3_EXTI9_PE_Msk (0x1U << AFIO_EXTICR3_EXTI9_PE_Pos) /*!< 0x00000040 */\r\n#define AFIO_EXTICR3_EXTI9_PE     AFIO_EXTICR3_EXTI9_PE_Msk           /*!< PE[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PF_Pos (4U)\r\n#define AFIO_EXTICR3_EXTI9_PF_Msk (0x5U << AFIO_EXTICR3_EXTI9_PF_Pos) /*!< 0x00000050 */\r\n#define AFIO_EXTICR3_EXTI9_PF     AFIO_EXTICR3_EXTI9_PF_Msk           /*!< PF[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PG_Pos (5U)\r\n#define AFIO_EXTICR3_EXTI9_PG_Msk (0x3U << AFIO_EXTICR3_EXTI9_PG_Pos) /*!< 0x00000060 */\r\n#define AFIO_EXTICR3_EXTI9_PG     AFIO_EXTICR3_EXTI9_PG_Msk           /*!< PG[9] pin */\r\n\r\n/*!< EXTI10 configuration */\r\n#define AFIO_EXTICR3_EXTI10_PA     0x00000000U /*!< PA[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PB_Pos (8U)\r\n#define AFIO_EXTICR3_EXTI10_PB_Msk (0x1U << AFIO_EXTICR3_EXTI10_PB_Pos) /*!< 0x00000100 */\r\n#define AFIO_EXTICR3_EXTI10_PB     AFIO_EXTICR3_EXTI10_PB_Msk           /*!< PB[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PC_Pos (9U)\r\n#define AFIO_EXTICR3_EXTI10_PC_Msk (0x1U << AFIO_EXTICR3_EXTI10_PC_Pos) /*!< 0x00000200 */\r\n#define AFIO_EXTICR3_EXTI10_PC     AFIO_EXTICR3_EXTI10_PC_Msk           /*!< PC[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PD_Pos (8U)\r\n#define AFIO_EXTICR3_EXTI10_PD_Msk (0x3U << AFIO_EXTICR3_EXTI10_PD_Pos) /*!< 0x00000300 */\r\n#define AFIO_EXTICR3_EXTI10_PD     AFIO_EXTICR3_EXTI10_PD_Msk           /*!< PD[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PE_Pos (10U)\r\n#define AFIO_EXTICR3_EXTI10_PE_Msk (0x1U << AFIO_EXTICR3_EXTI10_PE_Pos) /*!< 0x00000400 */\r\n#define AFIO_EXTICR3_EXTI10_PE     AFIO_EXTICR3_EXTI10_PE_Msk           /*!< PE[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PF_Pos (8U)\r\n#define AFIO_EXTICR3_EXTI10_PF_Msk (0x5U << AFIO_EXTICR3_EXTI10_PF_Pos) /*!< 0x00000500 */\r\n#define AFIO_EXTICR3_EXTI10_PF     AFIO_EXTICR3_EXTI10_PF_Msk           /*!< PF[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PG_Pos (9U)\r\n#define AFIO_EXTICR3_EXTI10_PG_Msk (0x3U << AFIO_EXTICR3_EXTI10_PG_Pos) /*!< 0x00000600 */\r\n#define AFIO_EXTICR3_EXTI10_PG     AFIO_EXTICR3_EXTI10_PG_Msk           /*!< PG[10] pin */\r\n\r\n/*!< EXTI11 configuration */\r\n#define AFIO_EXTICR3_EXTI11_PA     0x00000000U /*!< PA[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PB_Pos (12U)\r\n#define AFIO_EXTICR3_EXTI11_PB_Msk (0x1U << AFIO_EXTICR3_EXTI11_PB_Pos) /*!< 0x00001000 */\r\n#define AFIO_EXTICR3_EXTI11_PB     AFIO_EXTICR3_EXTI11_PB_Msk           /*!< PB[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PC_Pos (13U)\r\n#define AFIO_EXTICR3_EXTI11_PC_Msk (0x1U << AFIO_EXTICR3_EXTI11_PC_Pos) /*!< 0x00002000 */\r\n#define AFIO_EXTICR3_EXTI11_PC     AFIO_EXTICR3_EXTI11_PC_Msk           /*!< PC[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PD_Pos (12U)\r\n#define AFIO_EXTICR3_EXTI11_PD_Msk (0x3U << AFIO_EXTICR3_EXTI11_PD_Pos) /*!< 0x00003000 */\r\n#define AFIO_EXTICR3_EXTI11_PD     AFIO_EXTICR3_EXTI11_PD_Msk           /*!< PD[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PE_Pos (14U)\r\n#define AFIO_EXTICR3_EXTI11_PE_Msk (0x1U << AFIO_EXTICR3_EXTI11_PE_Pos) /*!< 0x00004000 */\r\n#define AFIO_EXTICR3_EXTI11_PE     AFIO_EXTICR3_EXTI11_PE_Msk           /*!< PE[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PF_Pos (12U)\r\n#define AFIO_EXTICR3_EXTI11_PF_Msk (0x5U << AFIO_EXTICR3_EXTI11_PF_Pos) /*!< 0x00005000 */\r\n#define AFIO_EXTICR3_EXTI11_PF     AFIO_EXTICR3_EXTI11_PF_Msk           /*!< PF[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PG_Pos (13U)\r\n#define AFIO_EXTICR3_EXTI11_PG_Msk (0x3U << AFIO_EXTICR3_EXTI11_PG_Pos) /*!< 0x00006000 */\r\n#define AFIO_EXTICR3_EXTI11_PG     AFIO_EXTICR3_EXTI11_PG_Msk           /*!< PG[11] pin */\r\n\r\n/*****************  Bit definition for AFIO_EXTICR4 register  *****************/\r\n#define AFIO_EXTICR4_EXTI12_Pos (0U)\r\n#define AFIO_EXTICR4_EXTI12_Msk (0xFU << AFIO_EXTICR4_EXTI12_Pos) /*!< 0x0000000F */\r\n#define AFIO_EXTICR4_EXTI12     AFIO_EXTICR4_EXTI12_Msk           /*!< EXTI 12 configuration */\r\n#define AFIO_EXTICR4_EXTI13_Pos (4U)\r\n#define AFIO_EXTICR4_EXTI13_Msk (0xFU << AFIO_EXTICR4_EXTI13_Pos) /*!< 0x000000F0 */\r\n#define AFIO_EXTICR4_EXTI13     AFIO_EXTICR4_EXTI13_Msk           /*!< EXTI 13 configuration */\r\n#define AFIO_EXTICR4_EXTI14_Pos (8U)\r\n#define AFIO_EXTICR4_EXTI14_Msk (0xFU << AFIO_EXTICR4_EXTI14_Pos) /*!< 0x00000F00 */\r\n#define AFIO_EXTICR4_EXTI14     AFIO_EXTICR4_EXTI14_Msk           /*!< EXTI 14 configuration */\r\n#define AFIO_EXTICR4_EXTI15_Pos (12U)\r\n#define AFIO_EXTICR4_EXTI15_Msk (0xFU << AFIO_EXTICR4_EXTI15_Pos) /*!< 0x0000F000 */\r\n#define AFIO_EXTICR4_EXTI15     AFIO_EXTICR4_EXTI15_Msk           /*!< EXTI 15 configuration */\r\n\r\n/* EXTI12 configuration */\r\n#define AFIO_EXTICR4_EXTI12_PA     0x00000000U /*!< PA[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PB_Pos (0U)\r\n#define AFIO_EXTICR4_EXTI12_PB_Msk (0x1U << AFIO_EXTICR4_EXTI12_PB_Pos) /*!< 0x00000001 */\r\n#define AFIO_EXTICR4_EXTI12_PB     AFIO_EXTICR4_EXTI12_PB_Msk           /*!< PB[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PC_Pos (1U)\r\n#define AFIO_EXTICR4_EXTI12_PC_Msk (0x1U << AFIO_EXTICR4_EXTI12_PC_Pos) /*!< 0x00000002 */\r\n#define AFIO_EXTICR4_EXTI12_PC     AFIO_EXTICR4_EXTI12_PC_Msk           /*!< PC[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PD_Pos (0U)\r\n#define AFIO_EXTICR4_EXTI12_PD_Msk (0x3U << AFIO_EXTICR4_EXTI12_PD_Pos) /*!< 0x00000003 */\r\n#define AFIO_EXTICR4_EXTI12_PD     AFIO_EXTICR4_EXTI12_PD_Msk           /*!< PD[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PE_Pos (2U)\r\n#define AFIO_EXTICR4_EXTI12_PE_Msk (0x1U << AFIO_EXTICR4_EXTI12_PE_Pos) /*!< 0x00000004 */\r\n#define AFIO_EXTICR4_EXTI12_PE     AFIO_EXTICR4_EXTI12_PE_Msk           /*!< PE[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PF_Pos (0U)\r\n#define AFIO_EXTICR4_EXTI12_PF_Msk (0x5U << AFIO_EXTICR4_EXTI12_PF_Pos) /*!< 0x00000005 */\r\n#define AFIO_EXTICR4_EXTI12_PF     AFIO_EXTICR4_EXTI12_PF_Msk           /*!< PF[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PG_Pos (1U)\r\n#define AFIO_EXTICR4_EXTI12_PG_Msk (0x3U << AFIO_EXTICR4_EXTI12_PG_Pos) /*!< 0x00000006 */\r\n#define AFIO_EXTICR4_EXTI12_PG     AFIO_EXTICR4_EXTI12_PG_Msk           /*!< PG[12] pin */\r\n\r\n/* EXTI13 configuration */\r\n#define AFIO_EXTICR4_EXTI13_PA     0x00000000U /*!< PA[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PB_Pos (4U)\r\n#define AFIO_EXTICR4_EXTI13_PB_Msk (0x1U << AFIO_EXTICR4_EXTI13_PB_Pos) /*!< 0x00000010 */\r\n#define AFIO_EXTICR4_EXTI13_PB     AFIO_EXTICR4_EXTI13_PB_Msk           /*!< PB[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PC_Pos (5U)\r\n#define AFIO_EXTICR4_EXTI13_PC_Msk (0x1U << AFIO_EXTICR4_EXTI13_PC_Pos) /*!< 0x00000020 */\r\n#define AFIO_EXTICR4_EXTI13_PC     AFIO_EXTICR4_EXTI13_PC_Msk           /*!< PC[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PD_Pos (4U)\r\n#define AFIO_EXTICR4_EXTI13_PD_Msk (0x3U << AFIO_EXTICR4_EXTI13_PD_Pos) /*!< 0x00000030 */\r\n#define AFIO_EXTICR4_EXTI13_PD     AFIO_EXTICR4_EXTI13_PD_Msk           /*!< PD[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PE_Pos (6U)\r\n#define AFIO_EXTICR4_EXTI13_PE_Msk (0x1U << AFIO_EXTICR4_EXTI13_PE_Pos) /*!< 0x00000040 */\r\n#define AFIO_EXTICR4_EXTI13_PE     AFIO_EXTICR4_EXTI13_PE_Msk           /*!< PE[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PF_Pos (4U)\r\n#define AFIO_EXTICR4_EXTI13_PF_Msk (0x5U << AFIO_EXTICR4_EXTI13_PF_Pos) /*!< 0x00000050 */\r\n#define AFIO_EXTICR4_EXTI13_PF     AFIO_EXTICR4_EXTI13_PF_Msk           /*!< PF[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PG_Pos (5U)\r\n#define AFIO_EXTICR4_EXTI13_PG_Msk (0x3U << AFIO_EXTICR4_EXTI13_PG_Pos) /*!< 0x00000060 */\r\n#define AFIO_EXTICR4_EXTI13_PG     AFIO_EXTICR4_EXTI13_PG_Msk           /*!< PG[13] pin */\r\n\r\n/*!< EXTI14 configuration */\r\n#define AFIO_EXTICR4_EXTI14_PA     0x00000000U /*!< PA[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PB_Pos (8U)\r\n#define AFIO_EXTICR4_EXTI14_PB_Msk (0x1U << AFIO_EXTICR4_EXTI14_PB_Pos) /*!< 0x00000100 */\r\n#define AFIO_EXTICR4_EXTI14_PB     AFIO_EXTICR4_EXTI14_PB_Msk           /*!< PB[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PC_Pos (9U)\r\n#define AFIO_EXTICR4_EXTI14_PC_Msk (0x1U << AFIO_EXTICR4_EXTI14_PC_Pos) /*!< 0x00000200 */\r\n#define AFIO_EXTICR4_EXTI14_PC     AFIO_EXTICR4_EXTI14_PC_Msk           /*!< PC[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PD_Pos (8U)\r\n#define AFIO_EXTICR4_EXTI14_PD_Msk (0x3U << AFIO_EXTICR4_EXTI14_PD_Pos) /*!< 0x00000300 */\r\n#define AFIO_EXTICR4_EXTI14_PD     AFIO_EXTICR4_EXTI14_PD_Msk           /*!< PD[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PE_Pos (10U)\r\n#define AFIO_EXTICR4_EXTI14_PE_Msk (0x1U << AFIO_EXTICR4_EXTI14_PE_Pos) /*!< 0x00000400 */\r\n#define AFIO_EXTICR4_EXTI14_PE     AFIO_EXTICR4_EXTI14_PE_Msk           /*!< PE[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PF_Pos (8U)\r\n#define AFIO_EXTICR4_EXTI14_PF_Msk (0x5U << AFIO_EXTICR4_EXTI14_PF_Pos) /*!< 0x00000500 */\r\n#define AFIO_EXTICR4_EXTI14_PF     AFIO_EXTICR4_EXTI14_PF_Msk           /*!< PF[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PG_Pos (9U)\r\n#define AFIO_EXTICR4_EXTI14_PG_Msk (0x3U << AFIO_EXTICR4_EXTI14_PG_Pos) /*!< 0x00000600 */\r\n#define AFIO_EXTICR4_EXTI14_PG     AFIO_EXTICR4_EXTI14_PG_Msk           /*!< PG[14] pin */\r\n\r\n/*!< EXTI15 configuration */\r\n#define AFIO_EXTICR4_EXTI15_PA     0x00000000U /*!< PA[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PB_Pos (12U)\r\n#define AFIO_EXTICR4_EXTI15_PB_Msk (0x1U << AFIO_EXTICR4_EXTI15_PB_Pos) /*!< 0x00001000 */\r\n#define AFIO_EXTICR4_EXTI15_PB     AFIO_EXTICR4_EXTI15_PB_Msk           /*!< PB[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PC_Pos (13U)\r\n#define AFIO_EXTICR4_EXTI15_PC_Msk (0x1U << AFIO_EXTICR4_EXTI15_PC_Pos) /*!< 0x00002000 */\r\n#define AFIO_EXTICR4_EXTI15_PC     AFIO_EXTICR4_EXTI15_PC_Msk           /*!< PC[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PD_Pos (12U)\r\n#define AFIO_EXTICR4_EXTI15_PD_Msk (0x3U << AFIO_EXTICR4_EXTI15_PD_Pos) /*!< 0x00003000 */\r\n#define AFIO_EXTICR4_EXTI15_PD     AFIO_EXTICR4_EXTI15_PD_Msk           /*!< PD[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PE_Pos (14U)\r\n#define AFIO_EXTICR4_EXTI15_PE_Msk (0x1U << AFIO_EXTICR4_EXTI15_PE_Pos) /*!< 0x00004000 */\r\n#define AFIO_EXTICR4_EXTI15_PE     AFIO_EXTICR4_EXTI15_PE_Msk           /*!< PE[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PF_Pos (12U)\r\n#define AFIO_EXTICR4_EXTI15_PF_Msk (0x5U << AFIO_EXTICR4_EXTI15_PF_Pos) /*!< 0x00005000 */\r\n#define AFIO_EXTICR4_EXTI15_PF     AFIO_EXTICR4_EXTI15_PF_Msk           /*!< PF[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PG_Pos (13U)\r\n#define AFIO_EXTICR4_EXTI15_PG_Msk (0x3U << AFIO_EXTICR4_EXTI15_PG_Pos) /*!< 0x00006000 */\r\n#define AFIO_EXTICR4_EXTI15_PG     AFIO_EXTICR4_EXTI15_PG_Msk           /*!< PG[15] pin */\r\n\r\n/******************  Bit definition for AFIO_MAPR2 register  ******************/\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                    External Interrupt/Event Controller                     */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for EXTI_IMR register  *******************/\r\n#define EXTI_IMR_MR0_Pos  (0U)\r\n#define EXTI_IMR_MR0_Msk  (0x1U << EXTI_IMR_MR0_Pos) /*!< 0x00000001 */\r\n#define EXTI_IMR_MR0      EXTI_IMR_MR0_Msk           /*!< Interrupt Mask on line 0 */\r\n#define EXTI_IMR_MR1_Pos  (1U)\r\n#define EXTI_IMR_MR1_Msk  (0x1U << EXTI_IMR_MR1_Pos) /*!< 0x00000002 */\r\n#define EXTI_IMR_MR1      EXTI_IMR_MR1_Msk           /*!< Interrupt Mask on line 1 */\r\n#define EXTI_IMR_MR2_Pos  (2U)\r\n#define EXTI_IMR_MR2_Msk  (0x1U << EXTI_IMR_MR2_Pos) /*!< 0x00000004 */\r\n#define EXTI_IMR_MR2      EXTI_IMR_MR2_Msk           /*!< Interrupt Mask on line 2 */\r\n#define EXTI_IMR_MR3_Pos  (3U)\r\n#define EXTI_IMR_MR3_Msk  (0x1U << EXTI_IMR_MR3_Pos) /*!< 0x00000008 */\r\n#define EXTI_IMR_MR3      EXTI_IMR_MR3_Msk           /*!< Interrupt Mask on line 3 */\r\n#define EXTI_IMR_MR4_Pos  (4U)\r\n#define EXTI_IMR_MR4_Msk  (0x1U << EXTI_IMR_MR4_Pos) /*!< 0x00000010 */\r\n#define EXTI_IMR_MR4      EXTI_IMR_MR4_Msk           /*!< Interrupt Mask on line 4 */\r\n#define EXTI_IMR_MR5_Pos  (5U)\r\n#define EXTI_IMR_MR5_Msk  (0x1U << EXTI_IMR_MR5_Pos) /*!< 0x00000020 */\r\n#define EXTI_IMR_MR5      EXTI_IMR_MR5_Msk           /*!< Interrupt Mask on line 5 */\r\n#define EXTI_IMR_MR6_Pos  (6U)\r\n#define EXTI_IMR_MR6_Msk  (0x1U << EXTI_IMR_MR6_Pos) /*!< 0x00000040 */\r\n#define EXTI_IMR_MR6      EXTI_IMR_MR6_Msk           /*!< Interrupt Mask on line 6 */\r\n#define EXTI_IMR_MR7_Pos  (7U)\r\n#define EXTI_IMR_MR7_Msk  (0x1U << EXTI_IMR_MR7_Pos) /*!< 0x00000080 */\r\n#define EXTI_IMR_MR7      EXTI_IMR_MR7_Msk           /*!< Interrupt Mask on line 7 */\r\n#define EXTI_IMR_MR8_Pos  (8U)\r\n#define EXTI_IMR_MR8_Msk  (0x1U << EXTI_IMR_MR8_Pos) /*!< 0x00000100 */\r\n#define EXTI_IMR_MR8      EXTI_IMR_MR8_Msk           /*!< Interrupt Mask on line 8 */\r\n#define EXTI_IMR_MR9_Pos  (9U)\r\n#define EXTI_IMR_MR9_Msk  (0x1U << EXTI_IMR_MR9_Pos) /*!< 0x00000200 */\r\n#define EXTI_IMR_MR9      EXTI_IMR_MR9_Msk           /*!< Interrupt Mask on line 9 */\r\n#define EXTI_IMR_MR10_Pos (10U)\r\n#define EXTI_IMR_MR10_Msk (0x1U << EXTI_IMR_MR10_Pos) /*!< 0x00000400 */\r\n#define EXTI_IMR_MR10     EXTI_IMR_MR10_Msk           /*!< Interrupt Mask on line 10 */\r\n#define EXTI_IMR_MR11_Pos (11U)\r\n#define EXTI_IMR_MR11_Msk (0x1U << EXTI_IMR_MR11_Pos) /*!< 0x00000800 */\r\n#define EXTI_IMR_MR11     EXTI_IMR_MR11_Msk           /*!< Interrupt Mask on line 11 */\r\n#define EXTI_IMR_MR12_Pos (12U)\r\n#define EXTI_IMR_MR12_Msk (0x1U << EXTI_IMR_MR12_Pos) /*!< 0x00001000 */\r\n#define EXTI_IMR_MR12     EXTI_IMR_MR12_Msk           /*!< Interrupt Mask on line 12 */\r\n#define EXTI_IMR_MR13_Pos (13U)\r\n#define EXTI_IMR_MR13_Msk (0x1U << EXTI_IMR_MR13_Pos) /*!< 0x00002000 */\r\n#define EXTI_IMR_MR13     EXTI_IMR_MR13_Msk           /*!< Interrupt Mask on line 13 */\r\n#define EXTI_IMR_MR14_Pos (14U)\r\n#define EXTI_IMR_MR14_Msk (0x1U << EXTI_IMR_MR14_Pos) /*!< 0x00004000 */\r\n#define EXTI_IMR_MR14     EXTI_IMR_MR14_Msk           /*!< Interrupt Mask on line 14 */\r\n#define EXTI_IMR_MR15_Pos (15U)\r\n#define EXTI_IMR_MR15_Msk (0x1U << EXTI_IMR_MR15_Pos) /*!< 0x00008000 */\r\n#define EXTI_IMR_MR15     EXTI_IMR_MR15_Msk           /*!< Interrupt Mask on line 15 */\r\n#define EXTI_IMR_MR16_Pos (16U)\r\n#define EXTI_IMR_MR16_Msk (0x1U << EXTI_IMR_MR16_Pos) /*!< 0x00010000 */\r\n#define EXTI_IMR_MR16     EXTI_IMR_MR16_Msk           /*!< Interrupt Mask on line 16 */\r\n#define EXTI_IMR_MR17_Pos (17U)\r\n#define EXTI_IMR_MR17_Msk (0x1U << EXTI_IMR_MR17_Pos) /*!< 0x00020000 */\r\n#define EXTI_IMR_MR17     EXTI_IMR_MR17_Msk           /*!< Interrupt Mask on line 17 */\r\n#define EXTI_IMR_MR18_Pos (18U)\r\n#define EXTI_IMR_MR18_Msk (0x1U << EXTI_IMR_MR18_Pos) /*!< 0x00040000 */\r\n#define EXTI_IMR_MR18     EXTI_IMR_MR18_Msk           /*!< Interrupt Mask on line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_IMR_IM0  EXTI_IMR_MR0\r\n#define EXTI_IMR_IM1  EXTI_IMR_MR1\r\n#define EXTI_IMR_IM2  EXTI_IMR_MR2\r\n#define EXTI_IMR_IM3  EXTI_IMR_MR3\r\n#define EXTI_IMR_IM4  EXTI_IMR_MR4\r\n#define EXTI_IMR_IM5  EXTI_IMR_MR5\r\n#define EXTI_IMR_IM6  EXTI_IMR_MR6\r\n#define EXTI_IMR_IM7  EXTI_IMR_MR7\r\n#define EXTI_IMR_IM8  EXTI_IMR_MR8\r\n#define EXTI_IMR_IM9  EXTI_IMR_MR9\r\n#define EXTI_IMR_IM10 EXTI_IMR_MR10\r\n#define EXTI_IMR_IM11 EXTI_IMR_MR11\r\n#define EXTI_IMR_IM12 EXTI_IMR_MR12\r\n#define EXTI_IMR_IM13 EXTI_IMR_MR13\r\n#define EXTI_IMR_IM14 EXTI_IMR_MR14\r\n#define EXTI_IMR_IM15 EXTI_IMR_MR15\r\n#define EXTI_IMR_IM16 EXTI_IMR_MR16\r\n#define EXTI_IMR_IM17 EXTI_IMR_MR17\r\n#define EXTI_IMR_IM18 EXTI_IMR_MR18\r\n#define EXTI_IMR_IM   0x0007FFFFU /*!< Interrupt Mask All */\r\n\r\n/*******************  Bit definition for EXTI_EMR register  *******************/\r\n#define EXTI_EMR_MR0_Pos  (0U)\r\n#define EXTI_EMR_MR0_Msk  (0x1U << EXTI_EMR_MR0_Pos) /*!< 0x00000001 */\r\n#define EXTI_EMR_MR0      EXTI_EMR_MR0_Msk           /*!< Event Mask on line 0 */\r\n#define EXTI_EMR_MR1_Pos  (1U)\r\n#define EXTI_EMR_MR1_Msk  (0x1U << EXTI_EMR_MR1_Pos) /*!< 0x00000002 */\r\n#define EXTI_EMR_MR1      EXTI_EMR_MR1_Msk           /*!< Event Mask on line 1 */\r\n#define EXTI_EMR_MR2_Pos  (2U)\r\n#define EXTI_EMR_MR2_Msk  (0x1U << EXTI_EMR_MR2_Pos) /*!< 0x00000004 */\r\n#define EXTI_EMR_MR2      EXTI_EMR_MR2_Msk           /*!< Event Mask on line 2 */\r\n#define EXTI_EMR_MR3_Pos  (3U)\r\n#define EXTI_EMR_MR3_Msk  (0x1U << EXTI_EMR_MR3_Pos) /*!< 0x00000008 */\r\n#define EXTI_EMR_MR3      EXTI_EMR_MR3_Msk           /*!< Event Mask on line 3 */\r\n#define EXTI_EMR_MR4_Pos  (4U)\r\n#define EXTI_EMR_MR4_Msk  (0x1U << EXTI_EMR_MR4_Pos) /*!< 0x00000010 */\r\n#define EXTI_EMR_MR4      EXTI_EMR_MR4_Msk           /*!< Event Mask on line 4 */\r\n#define EXTI_EMR_MR5_Pos  (5U)\r\n#define EXTI_EMR_MR5_Msk  (0x1U << EXTI_EMR_MR5_Pos) /*!< 0x00000020 */\r\n#define EXTI_EMR_MR5      EXTI_EMR_MR5_Msk           /*!< Event Mask on line 5 */\r\n#define EXTI_EMR_MR6_Pos  (6U)\r\n#define EXTI_EMR_MR6_Msk  (0x1U << EXTI_EMR_MR6_Pos) /*!< 0x00000040 */\r\n#define EXTI_EMR_MR6      EXTI_EMR_MR6_Msk           /*!< Event Mask on line 6 */\r\n#define EXTI_EMR_MR7_Pos  (7U)\r\n#define EXTI_EMR_MR7_Msk  (0x1U << EXTI_EMR_MR7_Pos) /*!< 0x00000080 */\r\n#define EXTI_EMR_MR7      EXTI_EMR_MR7_Msk           /*!< Event Mask on line 7 */\r\n#define EXTI_EMR_MR8_Pos  (8U)\r\n#define EXTI_EMR_MR8_Msk  (0x1U << EXTI_EMR_MR8_Pos) /*!< 0x00000100 */\r\n#define EXTI_EMR_MR8      EXTI_EMR_MR8_Msk           /*!< Event Mask on line 8 */\r\n#define EXTI_EMR_MR9_Pos  (9U)\r\n#define EXTI_EMR_MR9_Msk  (0x1U << EXTI_EMR_MR9_Pos) /*!< 0x00000200 */\r\n#define EXTI_EMR_MR9      EXTI_EMR_MR9_Msk           /*!< Event Mask on line 9 */\r\n#define EXTI_EMR_MR10_Pos (10U)\r\n#define EXTI_EMR_MR10_Msk (0x1U << EXTI_EMR_MR10_Pos) /*!< 0x00000400 */\r\n#define EXTI_EMR_MR10     EXTI_EMR_MR10_Msk           /*!< Event Mask on line 10 */\r\n#define EXTI_EMR_MR11_Pos (11U)\r\n#define EXTI_EMR_MR11_Msk (0x1U << EXTI_EMR_MR11_Pos) /*!< 0x00000800 */\r\n#define EXTI_EMR_MR11     EXTI_EMR_MR11_Msk           /*!< Event Mask on line 11 */\r\n#define EXTI_EMR_MR12_Pos (12U)\r\n#define EXTI_EMR_MR12_Msk (0x1U << EXTI_EMR_MR12_Pos) /*!< 0x00001000 */\r\n#define EXTI_EMR_MR12     EXTI_EMR_MR12_Msk           /*!< Event Mask on line 12 */\r\n#define EXTI_EMR_MR13_Pos (13U)\r\n#define EXTI_EMR_MR13_Msk (0x1U << EXTI_EMR_MR13_Pos) /*!< 0x00002000 */\r\n#define EXTI_EMR_MR13     EXTI_EMR_MR13_Msk           /*!< Event Mask on line 13 */\r\n#define EXTI_EMR_MR14_Pos (14U)\r\n#define EXTI_EMR_MR14_Msk (0x1U << EXTI_EMR_MR14_Pos) /*!< 0x00004000 */\r\n#define EXTI_EMR_MR14     EXTI_EMR_MR14_Msk           /*!< Event Mask on line 14 */\r\n#define EXTI_EMR_MR15_Pos (15U)\r\n#define EXTI_EMR_MR15_Msk (0x1U << EXTI_EMR_MR15_Pos) /*!< 0x00008000 */\r\n#define EXTI_EMR_MR15     EXTI_EMR_MR15_Msk           /*!< Event Mask on line 15 */\r\n#define EXTI_EMR_MR16_Pos (16U)\r\n#define EXTI_EMR_MR16_Msk (0x1U << EXTI_EMR_MR16_Pos) /*!< 0x00010000 */\r\n#define EXTI_EMR_MR16     EXTI_EMR_MR16_Msk           /*!< Event Mask on line 16 */\r\n#define EXTI_EMR_MR17_Pos (17U)\r\n#define EXTI_EMR_MR17_Msk (0x1U << EXTI_EMR_MR17_Pos) /*!< 0x00020000 */\r\n#define EXTI_EMR_MR17     EXTI_EMR_MR17_Msk           /*!< Event Mask on line 17 */\r\n#define EXTI_EMR_MR18_Pos (18U)\r\n#define EXTI_EMR_MR18_Msk (0x1U << EXTI_EMR_MR18_Pos) /*!< 0x00040000 */\r\n#define EXTI_EMR_MR18     EXTI_EMR_MR18_Msk           /*!< Event Mask on line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_EMR_EM0  EXTI_EMR_MR0\r\n#define EXTI_EMR_EM1  EXTI_EMR_MR1\r\n#define EXTI_EMR_EM2  EXTI_EMR_MR2\r\n#define EXTI_EMR_EM3  EXTI_EMR_MR3\r\n#define EXTI_EMR_EM4  EXTI_EMR_MR4\r\n#define EXTI_EMR_EM5  EXTI_EMR_MR5\r\n#define EXTI_EMR_EM6  EXTI_EMR_MR6\r\n#define EXTI_EMR_EM7  EXTI_EMR_MR7\r\n#define EXTI_EMR_EM8  EXTI_EMR_MR8\r\n#define EXTI_EMR_EM9  EXTI_EMR_MR9\r\n#define EXTI_EMR_EM10 EXTI_EMR_MR10\r\n#define EXTI_EMR_EM11 EXTI_EMR_MR11\r\n#define EXTI_EMR_EM12 EXTI_EMR_MR12\r\n#define EXTI_EMR_EM13 EXTI_EMR_MR13\r\n#define EXTI_EMR_EM14 EXTI_EMR_MR14\r\n#define EXTI_EMR_EM15 EXTI_EMR_MR15\r\n#define EXTI_EMR_EM16 EXTI_EMR_MR16\r\n#define EXTI_EMR_EM17 EXTI_EMR_MR17\r\n#define EXTI_EMR_EM18 EXTI_EMR_MR18\r\n\r\n/******************  Bit definition for EXTI_RTSR register  *******************/\r\n#define EXTI_RTSR_TR0_Pos  (0U)\r\n#define EXTI_RTSR_TR0_Msk  (0x1U << EXTI_RTSR_TR0_Pos) /*!< 0x00000001 */\r\n#define EXTI_RTSR_TR0      EXTI_RTSR_TR0_Msk           /*!< Rising trigger event configuration bit of line 0 */\r\n#define EXTI_RTSR_TR1_Pos  (1U)\r\n#define EXTI_RTSR_TR1_Msk  (0x1U << EXTI_RTSR_TR1_Pos) /*!< 0x00000002 */\r\n#define EXTI_RTSR_TR1      EXTI_RTSR_TR1_Msk           /*!< Rising trigger event configuration bit of line 1 */\r\n#define EXTI_RTSR_TR2_Pos  (2U)\r\n#define EXTI_RTSR_TR2_Msk  (0x1U << EXTI_RTSR_TR2_Pos) /*!< 0x00000004 */\r\n#define EXTI_RTSR_TR2      EXTI_RTSR_TR2_Msk           /*!< Rising trigger event configuration bit of line 2 */\r\n#define EXTI_RTSR_TR3_Pos  (3U)\r\n#define EXTI_RTSR_TR3_Msk  (0x1U << EXTI_RTSR_TR3_Pos) /*!< 0x00000008 */\r\n#define EXTI_RTSR_TR3      EXTI_RTSR_TR3_Msk           /*!< Rising trigger event configuration bit of line 3 */\r\n#define EXTI_RTSR_TR4_Pos  (4U)\r\n#define EXTI_RTSR_TR4_Msk  (0x1U << EXTI_RTSR_TR4_Pos) /*!< 0x00000010 */\r\n#define EXTI_RTSR_TR4      EXTI_RTSR_TR4_Msk           /*!< Rising trigger event configuration bit of line 4 */\r\n#define EXTI_RTSR_TR5_Pos  (5U)\r\n#define EXTI_RTSR_TR5_Msk  (0x1U << EXTI_RTSR_TR5_Pos) /*!< 0x00000020 */\r\n#define EXTI_RTSR_TR5      EXTI_RTSR_TR5_Msk           /*!< Rising trigger event configuration bit of line 5 */\r\n#define EXTI_RTSR_TR6_Pos  (6U)\r\n#define EXTI_RTSR_TR6_Msk  (0x1U << EXTI_RTSR_TR6_Pos) /*!< 0x00000040 */\r\n#define EXTI_RTSR_TR6      EXTI_RTSR_TR6_Msk           /*!< Rising trigger event configuration bit of line 6 */\r\n#define EXTI_RTSR_TR7_Pos  (7U)\r\n#define EXTI_RTSR_TR7_Msk  (0x1U << EXTI_RTSR_TR7_Pos) /*!< 0x00000080 */\r\n#define EXTI_RTSR_TR7      EXTI_RTSR_TR7_Msk           /*!< Rising trigger event configuration bit of line 7 */\r\n#define EXTI_RTSR_TR8_Pos  (8U)\r\n#define EXTI_RTSR_TR8_Msk  (0x1U << EXTI_RTSR_TR8_Pos) /*!< 0x00000100 */\r\n#define EXTI_RTSR_TR8      EXTI_RTSR_TR8_Msk           /*!< Rising trigger event configuration bit of line 8 */\r\n#define EXTI_RTSR_TR9_Pos  (9U)\r\n#define EXTI_RTSR_TR9_Msk  (0x1U << EXTI_RTSR_TR9_Pos) /*!< 0x00000200 */\r\n#define EXTI_RTSR_TR9      EXTI_RTSR_TR9_Msk           /*!< Rising trigger event configuration bit of line 9 */\r\n#define EXTI_RTSR_TR10_Pos (10U)\r\n#define EXTI_RTSR_TR10_Msk (0x1U << EXTI_RTSR_TR10_Pos) /*!< 0x00000400 */\r\n#define EXTI_RTSR_TR10     EXTI_RTSR_TR10_Msk           /*!< Rising trigger event configuration bit of line 10 */\r\n#define EXTI_RTSR_TR11_Pos (11U)\r\n#define EXTI_RTSR_TR11_Msk (0x1U << EXTI_RTSR_TR11_Pos) /*!< 0x00000800 */\r\n#define EXTI_RTSR_TR11     EXTI_RTSR_TR11_Msk           /*!< Rising trigger event configuration bit of line 11 */\r\n#define EXTI_RTSR_TR12_Pos (12U)\r\n#define EXTI_RTSR_TR12_Msk (0x1U << EXTI_RTSR_TR12_Pos) /*!< 0x00001000 */\r\n#define EXTI_RTSR_TR12     EXTI_RTSR_TR12_Msk           /*!< Rising trigger event configuration bit of line 12 */\r\n#define EXTI_RTSR_TR13_Pos (13U)\r\n#define EXTI_RTSR_TR13_Msk (0x1U << EXTI_RTSR_TR13_Pos) /*!< 0x00002000 */\r\n#define EXTI_RTSR_TR13     EXTI_RTSR_TR13_Msk           /*!< Rising trigger event configuration bit of line 13 */\r\n#define EXTI_RTSR_TR14_Pos (14U)\r\n#define EXTI_RTSR_TR14_Msk (0x1U << EXTI_RTSR_TR14_Pos) /*!< 0x00004000 */\r\n#define EXTI_RTSR_TR14     EXTI_RTSR_TR14_Msk           /*!< Rising trigger event configuration bit of line 14 */\r\n#define EXTI_RTSR_TR15_Pos (15U)\r\n#define EXTI_RTSR_TR15_Msk (0x1U << EXTI_RTSR_TR15_Pos) /*!< 0x00008000 */\r\n#define EXTI_RTSR_TR15     EXTI_RTSR_TR15_Msk           /*!< Rising trigger event configuration bit of line 15 */\r\n#define EXTI_RTSR_TR16_Pos (16U)\r\n#define EXTI_RTSR_TR16_Msk (0x1U << EXTI_RTSR_TR16_Pos) /*!< 0x00010000 */\r\n#define EXTI_RTSR_TR16     EXTI_RTSR_TR16_Msk           /*!< Rising trigger event configuration bit of line 16 */\r\n#define EXTI_RTSR_TR17_Pos (17U)\r\n#define EXTI_RTSR_TR17_Msk (0x1U << EXTI_RTSR_TR17_Pos) /*!< 0x00020000 */\r\n#define EXTI_RTSR_TR17     EXTI_RTSR_TR17_Msk           /*!< Rising trigger event configuration bit of line 17 */\r\n#define EXTI_RTSR_TR18_Pos (18U)\r\n#define EXTI_RTSR_TR18_Msk (0x1U << EXTI_RTSR_TR18_Pos) /*!< 0x00040000 */\r\n#define EXTI_RTSR_TR18     EXTI_RTSR_TR18_Msk           /*!< Rising trigger event configuration bit of line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_RTSR_RT0  EXTI_RTSR_TR0\r\n#define EXTI_RTSR_RT1  EXTI_RTSR_TR1\r\n#define EXTI_RTSR_RT2  EXTI_RTSR_TR2\r\n#define EXTI_RTSR_RT3  EXTI_RTSR_TR3\r\n#define EXTI_RTSR_RT4  EXTI_RTSR_TR4\r\n#define EXTI_RTSR_RT5  EXTI_RTSR_TR5\r\n#define EXTI_RTSR_RT6  EXTI_RTSR_TR6\r\n#define EXTI_RTSR_RT7  EXTI_RTSR_TR7\r\n#define EXTI_RTSR_RT8  EXTI_RTSR_TR8\r\n#define EXTI_RTSR_RT9  EXTI_RTSR_TR9\r\n#define EXTI_RTSR_RT10 EXTI_RTSR_TR10\r\n#define EXTI_RTSR_RT11 EXTI_RTSR_TR11\r\n#define EXTI_RTSR_RT12 EXTI_RTSR_TR12\r\n#define EXTI_RTSR_RT13 EXTI_RTSR_TR13\r\n#define EXTI_RTSR_RT14 EXTI_RTSR_TR14\r\n#define EXTI_RTSR_RT15 EXTI_RTSR_TR15\r\n#define EXTI_RTSR_RT16 EXTI_RTSR_TR16\r\n#define EXTI_RTSR_RT17 EXTI_RTSR_TR17\r\n#define EXTI_RTSR_RT18 EXTI_RTSR_TR18\r\n\r\n/******************  Bit definition for EXTI_FTSR register  *******************/\r\n#define EXTI_FTSR_TR0_Pos  (0U)\r\n#define EXTI_FTSR_TR0_Msk  (0x1U << EXTI_FTSR_TR0_Pos) /*!< 0x00000001 */\r\n#define EXTI_FTSR_TR0      EXTI_FTSR_TR0_Msk           /*!< Falling trigger event configuration bit of line 0 */\r\n#define EXTI_FTSR_TR1_Pos  (1U)\r\n#define EXTI_FTSR_TR1_Msk  (0x1U << EXTI_FTSR_TR1_Pos) /*!< 0x00000002 */\r\n#define EXTI_FTSR_TR1      EXTI_FTSR_TR1_Msk           /*!< Falling trigger event configuration bit of line 1 */\r\n#define EXTI_FTSR_TR2_Pos  (2U)\r\n#define EXTI_FTSR_TR2_Msk  (0x1U << EXTI_FTSR_TR2_Pos) /*!< 0x00000004 */\r\n#define EXTI_FTSR_TR2      EXTI_FTSR_TR2_Msk           /*!< Falling trigger event configuration bit of line 2 */\r\n#define EXTI_FTSR_TR3_Pos  (3U)\r\n#define EXTI_FTSR_TR3_Msk  (0x1U << EXTI_FTSR_TR3_Pos) /*!< 0x00000008 */\r\n#define EXTI_FTSR_TR3      EXTI_FTSR_TR3_Msk           /*!< Falling trigger event configuration bit of line 3 */\r\n#define EXTI_FTSR_TR4_Pos  (4U)\r\n#define EXTI_FTSR_TR4_Msk  (0x1U << EXTI_FTSR_TR4_Pos) /*!< 0x00000010 */\r\n#define EXTI_FTSR_TR4      EXTI_FTSR_TR4_Msk           /*!< Falling trigger event configuration bit of line 4 */\r\n#define EXTI_FTSR_TR5_Pos  (5U)\r\n#define EXTI_FTSR_TR5_Msk  (0x1U << EXTI_FTSR_TR5_Pos) /*!< 0x00000020 */\r\n#define EXTI_FTSR_TR5      EXTI_FTSR_TR5_Msk           /*!< Falling trigger event configuration bit of line 5 */\r\n#define EXTI_FTSR_TR6_Pos  (6U)\r\n#define EXTI_FTSR_TR6_Msk  (0x1U << EXTI_FTSR_TR6_Pos) /*!< 0x00000040 */\r\n#define EXTI_FTSR_TR6      EXTI_FTSR_TR6_Msk           /*!< Falling trigger event configuration bit of line 6 */\r\n#define EXTI_FTSR_TR7_Pos  (7U)\r\n#define EXTI_FTSR_TR7_Msk  (0x1U << EXTI_FTSR_TR7_Pos) /*!< 0x00000080 */\r\n#define EXTI_FTSR_TR7      EXTI_FTSR_TR7_Msk           /*!< Falling trigger event configuration bit of line 7 */\r\n#define EXTI_FTSR_TR8_Pos  (8U)\r\n#define EXTI_FTSR_TR8_Msk  (0x1U << EXTI_FTSR_TR8_Pos) /*!< 0x00000100 */\r\n#define EXTI_FTSR_TR8      EXTI_FTSR_TR8_Msk           /*!< Falling trigger event configuration bit of line 8 */\r\n#define EXTI_FTSR_TR9_Pos  (9U)\r\n#define EXTI_FTSR_TR9_Msk  (0x1U << EXTI_FTSR_TR9_Pos) /*!< 0x00000200 */\r\n#define EXTI_FTSR_TR9      EXTI_FTSR_TR9_Msk           /*!< Falling trigger event configuration bit of line 9 */\r\n#define EXTI_FTSR_TR10_Pos (10U)\r\n#define EXTI_FTSR_TR10_Msk (0x1U << EXTI_FTSR_TR10_Pos) /*!< 0x00000400 */\r\n#define EXTI_FTSR_TR10     EXTI_FTSR_TR10_Msk           /*!< Falling trigger event configuration bit of line 10 */\r\n#define EXTI_FTSR_TR11_Pos (11U)\r\n#define EXTI_FTSR_TR11_Msk (0x1U << EXTI_FTSR_TR11_Pos) /*!< 0x00000800 */\r\n#define EXTI_FTSR_TR11     EXTI_FTSR_TR11_Msk           /*!< Falling trigger event configuration bit of line 11 */\r\n#define EXTI_FTSR_TR12_Pos (12U)\r\n#define EXTI_FTSR_TR12_Msk (0x1U << EXTI_FTSR_TR12_Pos) /*!< 0x00001000 */\r\n#define EXTI_FTSR_TR12     EXTI_FTSR_TR12_Msk           /*!< Falling trigger event configuration bit of line 12 */\r\n#define EXTI_FTSR_TR13_Pos (13U)\r\n#define EXTI_FTSR_TR13_Msk (0x1U << EXTI_FTSR_TR13_Pos) /*!< 0x00002000 */\r\n#define EXTI_FTSR_TR13     EXTI_FTSR_TR13_Msk           /*!< Falling trigger event configuration bit of line 13 */\r\n#define EXTI_FTSR_TR14_Pos (14U)\r\n#define EXTI_FTSR_TR14_Msk (0x1U << EXTI_FTSR_TR14_Pos) /*!< 0x00004000 */\r\n#define EXTI_FTSR_TR14     EXTI_FTSR_TR14_Msk           /*!< Falling trigger event configuration bit of line 14 */\r\n#define EXTI_FTSR_TR15_Pos (15U)\r\n#define EXTI_FTSR_TR15_Msk (0x1U << EXTI_FTSR_TR15_Pos) /*!< 0x00008000 */\r\n#define EXTI_FTSR_TR15     EXTI_FTSR_TR15_Msk           /*!< Falling trigger event configuration bit of line 15 */\r\n#define EXTI_FTSR_TR16_Pos (16U)\r\n#define EXTI_FTSR_TR16_Msk (0x1U << EXTI_FTSR_TR16_Pos) /*!< 0x00010000 */\r\n#define EXTI_FTSR_TR16     EXTI_FTSR_TR16_Msk           /*!< Falling trigger event configuration bit of line 16 */\r\n#define EXTI_FTSR_TR17_Pos (17U)\r\n#define EXTI_FTSR_TR17_Msk (0x1U << EXTI_FTSR_TR17_Pos) /*!< 0x00020000 */\r\n#define EXTI_FTSR_TR17     EXTI_FTSR_TR17_Msk           /*!< Falling trigger event configuration bit of line 17 */\r\n#define EXTI_FTSR_TR18_Pos (18U)\r\n#define EXTI_FTSR_TR18_Msk (0x1U << EXTI_FTSR_TR18_Pos) /*!< 0x00040000 */\r\n#define EXTI_FTSR_TR18     EXTI_FTSR_TR18_Msk           /*!< Falling trigger event configuration bit of line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_FTSR_FT0  EXTI_FTSR_TR0\r\n#define EXTI_FTSR_FT1  EXTI_FTSR_TR1\r\n#define EXTI_FTSR_FT2  EXTI_FTSR_TR2\r\n#define EXTI_FTSR_FT3  EXTI_FTSR_TR3\r\n#define EXTI_FTSR_FT4  EXTI_FTSR_TR4\r\n#define EXTI_FTSR_FT5  EXTI_FTSR_TR5\r\n#define EXTI_FTSR_FT6  EXTI_FTSR_TR6\r\n#define EXTI_FTSR_FT7  EXTI_FTSR_TR7\r\n#define EXTI_FTSR_FT8  EXTI_FTSR_TR8\r\n#define EXTI_FTSR_FT9  EXTI_FTSR_TR9\r\n#define EXTI_FTSR_FT10 EXTI_FTSR_TR10\r\n#define EXTI_FTSR_FT11 EXTI_FTSR_TR11\r\n#define EXTI_FTSR_FT12 EXTI_FTSR_TR12\r\n#define EXTI_FTSR_FT13 EXTI_FTSR_TR13\r\n#define EXTI_FTSR_FT14 EXTI_FTSR_TR14\r\n#define EXTI_FTSR_FT15 EXTI_FTSR_TR15\r\n#define EXTI_FTSR_FT16 EXTI_FTSR_TR16\r\n#define EXTI_FTSR_FT17 EXTI_FTSR_TR17\r\n#define EXTI_FTSR_FT18 EXTI_FTSR_TR18\r\n\r\n/******************  Bit definition for EXTI_SWIER register  ******************/\r\n#define EXTI_SWIER_SWIER0_Pos  (0U)\r\n#define EXTI_SWIER_SWIER0_Msk  (0x1U << EXTI_SWIER_SWIER0_Pos) /*!< 0x00000001 */\r\n#define EXTI_SWIER_SWIER0      EXTI_SWIER_SWIER0_Msk           /*!< Software Interrupt on line 0 */\r\n#define EXTI_SWIER_SWIER1_Pos  (1U)\r\n#define EXTI_SWIER_SWIER1_Msk  (0x1U << EXTI_SWIER_SWIER1_Pos) /*!< 0x00000002 */\r\n#define EXTI_SWIER_SWIER1      EXTI_SWIER_SWIER1_Msk           /*!< Software Interrupt on line 1 */\r\n#define EXTI_SWIER_SWIER2_Pos  (2U)\r\n#define EXTI_SWIER_SWIER2_Msk  (0x1U << EXTI_SWIER_SWIER2_Pos) /*!< 0x00000004 */\r\n#define EXTI_SWIER_SWIER2      EXTI_SWIER_SWIER2_Msk           /*!< Software Interrupt on line 2 */\r\n#define EXTI_SWIER_SWIER3_Pos  (3U)\r\n#define EXTI_SWIER_SWIER3_Msk  (0x1U << EXTI_SWIER_SWIER3_Pos) /*!< 0x00000008 */\r\n#define EXTI_SWIER_SWIER3      EXTI_SWIER_SWIER3_Msk           /*!< Software Interrupt on line 3 */\r\n#define EXTI_SWIER_SWIER4_Pos  (4U)\r\n#define EXTI_SWIER_SWIER4_Msk  (0x1U << EXTI_SWIER_SWIER4_Pos) /*!< 0x00000010 */\r\n#define EXTI_SWIER_SWIER4      EXTI_SWIER_SWIER4_Msk           /*!< Software Interrupt on line 4 */\r\n#define EXTI_SWIER_SWIER5_Pos  (5U)\r\n#define EXTI_SWIER_SWIER5_Msk  (0x1U << EXTI_SWIER_SWIER5_Pos) /*!< 0x00000020 */\r\n#define EXTI_SWIER_SWIER5      EXTI_SWIER_SWIER5_Msk           /*!< Software Interrupt on line 5 */\r\n#define EXTI_SWIER_SWIER6_Pos  (6U)\r\n#define EXTI_SWIER_SWIER6_Msk  (0x1U << EXTI_SWIER_SWIER6_Pos) /*!< 0x00000040 */\r\n#define EXTI_SWIER_SWIER6      EXTI_SWIER_SWIER6_Msk           /*!< Software Interrupt on line 6 */\r\n#define EXTI_SWIER_SWIER7_Pos  (7U)\r\n#define EXTI_SWIER_SWIER7_Msk  (0x1U << EXTI_SWIER_SWIER7_Pos) /*!< 0x00000080 */\r\n#define EXTI_SWIER_SWIER7      EXTI_SWIER_SWIER7_Msk           /*!< Software Interrupt on line 7 */\r\n#define EXTI_SWIER_SWIER8_Pos  (8U)\r\n#define EXTI_SWIER_SWIER8_Msk  (0x1U << EXTI_SWIER_SWIER8_Pos) /*!< 0x00000100 */\r\n#define EXTI_SWIER_SWIER8      EXTI_SWIER_SWIER8_Msk           /*!< Software Interrupt on line 8 */\r\n#define EXTI_SWIER_SWIER9_Pos  (9U)\r\n#define EXTI_SWIER_SWIER9_Msk  (0x1U << EXTI_SWIER_SWIER9_Pos) /*!< 0x00000200 */\r\n#define EXTI_SWIER_SWIER9      EXTI_SWIER_SWIER9_Msk           /*!< Software Interrupt on line 9 */\r\n#define EXTI_SWIER_SWIER10_Pos (10U)\r\n#define EXTI_SWIER_SWIER10_Msk (0x1U << EXTI_SWIER_SWIER10_Pos) /*!< 0x00000400 */\r\n#define EXTI_SWIER_SWIER10     EXTI_SWIER_SWIER10_Msk           /*!< Software Interrupt on line 10 */\r\n#define EXTI_SWIER_SWIER11_Pos (11U)\r\n#define EXTI_SWIER_SWIER11_Msk (0x1U << EXTI_SWIER_SWIER11_Pos) /*!< 0x00000800 */\r\n#define EXTI_SWIER_SWIER11     EXTI_SWIER_SWIER11_Msk           /*!< Software Interrupt on line 11 */\r\n#define EXTI_SWIER_SWIER12_Pos (12U)\r\n#define EXTI_SWIER_SWIER12_Msk (0x1U << EXTI_SWIER_SWIER12_Pos) /*!< 0x00001000 */\r\n#define EXTI_SWIER_SWIER12     EXTI_SWIER_SWIER12_Msk           /*!< Software Interrupt on line 12 */\r\n#define EXTI_SWIER_SWIER13_Pos (13U)\r\n#define EXTI_SWIER_SWIER13_Msk (0x1U << EXTI_SWIER_SWIER13_Pos) /*!< 0x00002000 */\r\n#define EXTI_SWIER_SWIER13     EXTI_SWIER_SWIER13_Msk           /*!< Software Interrupt on line 13 */\r\n#define EXTI_SWIER_SWIER14_Pos (14U)\r\n#define EXTI_SWIER_SWIER14_Msk (0x1U << EXTI_SWIER_SWIER14_Pos) /*!< 0x00004000 */\r\n#define EXTI_SWIER_SWIER14     EXTI_SWIER_SWIER14_Msk           /*!< Software Interrupt on line 14 */\r\n#define EXTI_SWIER_SWIER15_Pos (15U)\r\n#define EXTI_SWIER_SWIER15_Msk (0x1U << EXTI_SWIER_SWIER15_Pos) /*!< 0x00008000 */\r\n#define EXTI_SWIER_SWIER15     EXTI_SWIER_SWIER15_Msk           /*!< Software Interrupt on line 15 */\r\n#define EXTI_SWIER_SWIER16_Pos (16U)\r\n#define EXTI_SWIER_SWIER16_Msk (0x1U << EXTI_SWIER_SWIER16_Pos) /*!< 0x00010000 */\r\n#define EXTI_SWIER_SWIER16     EXTI_SWIER_SWIER16_Msk           /*!< Software Interrupt on line 16 */\r\n#define EXTI_SWIER_SWIER17_Pos (17U)\r\n#define EXTI_SWIER_SWIER17_Msk (0x1U << EXTI_SWIER_SWIER17_Pos) /*!< 0x00020000 */\r\n#define EXTI_SWIER_SWIER17     EXTI_SWIER_SWIER17_Msk           /*!< Software Interrupt on line 17 */\r\n#define EXTI_SWIER_SWIER18_Pos (18U)\r\n#define EXTI_SWIER_SWIER18_Msk (0x1U << EXTI_SWIER_SWIER18_Pos) /*!< 0x00040000 */\r\n#define EXTI_SWIER_SWIER18     EXTI_SWIER_SWIER18_Msk           /*!< Software Interrupt on line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_SWIER_SWI0  EXTI_SWIER_SWIER0\r\n#define EXTI_SWIER_SWI1  EXTI_SWIER_SWIER1\r\n#define EXTI_SWIER_SWI2  EXTI_SWIER_SWIER2\r\n#define EXTI_SWIER_SWI3  EXTI_SWIER_SWIER3\r\n#define EXTI_SWIER_SWI4  EXTI_SWIER_SWIER4\r\n#define EXTI_SWIER_SWI5  EXTI_SWIER_SWIER5\r\n#define EXTI_SWIER_SWI6  EXTI_SWIER_SWIER6\r\n#define EXTI_SWIER_SWI7  EXTI_SWIER_SWIER7\r\n#define EXTI_SWIER_SWI8  EXTI_SWIER_SWIER8\r\n#define EXTI_SWIER_SWI9  EXTI_SWIER_SWIER9\r\n#define EXTI_SWIER_SWI10 EXTI_SWIER_SWIER10\r\n#define EXTI_SWIER_SWI11 EXTI_SWIER_SWIER11\r\n#define EXTI_SWIER_SWI12 EXTI_SWIER_SWIER12\r\n#define EXTI_SWIER_SWI13 EXTI_SWIER_SWIER13\r\n#define EXTI_SWIER_SWI14 EXTI_SWIER_SWIER14\r\n#define EXTI_SWIER_SWI15 EXTI_SWIER_SWIER15\r\n#define EXTI_SWIER_SWI16 EXTI_SWIER_SWIER16\r\n#define EXTI_SWIER_SWI17 EXTI_SWIER_SWIER17\r\n#define EXTI_SWIER_SWI18 EXTI_SWIER_SWIER18\r\n\r\n/*******************  Bit definition for EXTI_PR register  ********************/\r\n#define EXTI_PR_PR0_Pos  (0U)\r\n#define EXTI_PR_PR0_Msk  (0x1U << EXTI_PR_PR0_Pos) /*!< 0x00000001 */\r\n#define EXTI_PR_PR0      EXTI_PR_PR0_Msk           /*!< Pending bit for line 0 */\r\n#define EXTI_PR_PR1_Pos  (1U)\r\n#define EXTI_PR_PR1_Msk  (0x1U << EXTI_PR_PR1_Pos) /*!< 0x00000002 */\r\n#define EXTI_PR_PR1      EXTI_PR_PR1_Msk           /*!< Pending bit for line 1 */\r\n#define EXTI_PR_PR2_Pos  (2U)\r\n#define EXTI_PR_PR2_Msk  (0x1U << EXTI_PR_PR2_Pos) /*!< 0x00000004 */\r\n#define EXTI_PR_PR2      EXTI_PR_PR2_Msk           /*!< Pending bit for line 2 */\r\n#define EXTI_PR_PR3_Pos  (3U)\r\n#define EXTI_PR_PR3_Msk  (0x1U << EXTI_PR_PR3_Pos) /*!< 0x00000008 */\r\n#define EXTI_PR_PR3      EXTI_PR_PR3_Msk           /*!< Pending bit for line 3 */\r\n#define EXTI_PR_PR4_Pos  (4U)\r\n#define EXTI_PR_PR4_Msk  (0x1U << EXTI_PR_PR4_Pos) /*!< 0x00000010 */\r\n#define EXTI_PR_PR4      EXTI_PR_PR4_Msk           /*!< Pending bit for line 4 */\r\n#define EXTI_PR_PR5_Pos  (5U)\r\n#define EXTI_PR_PR5_Msk  (0x1U << EXTI_PR_PR5_Pos) /*!< 0x00000020 */\r\n#define EXTI_PR_PR5      EXTI_PR_PR5_Msk           /*!< Pending bit for line 5 */\r\n#define EXTI_PR_PR6_Pos  (6U)\r\n#define EXTI_PR_PR6_Msk  (0x1U << EXTI_PR_PR6_Pos) /*!< 0x00000040 */\r\n#define EXTI_PR_PR6      EXTI_PR_PR6_Msk           /*!< Pending bit for line 6 */\r\n#define EXTI_PR_PR7_Pos  (7U)\r\n#define EXTI_PR_PR7_Msk  (0x1U << EXTI_PR_PR7_Pos) /*!< 0x00000080 */\r\n#define EXTI_PR_PR7      EXTI_PR_PR7_Msk           /*!< Pending bit for line 7 */\r\n#define EXTI_PR_PR8_Pos  (8U)\r\n#define EXTI_PR_PR8_Msk  (0x1U << EXTI_PR_PR8_Pos) /*!< 0x00000100 */\r\n#define EXTI_PR_PR8      EXTI_PR_PR8_Msk           /*!< Pending bit for line 8 */\r\n#define EXTI_PR_PR9_Pos  (9U)\r\n#define EXTI_PR_PR9_Msk  (0x1U << EXTI_PR_PR9_Pos) /*!< 0x00000200 */\r\n#define EXTI_PR_PR9      EXTI_PR_PR9_Msk           /*!< Pending bit for line 9 */\r\n#define EXTI_PR_PR10_Pos (10U)\r\n#define EXTI_PR_PR10_Msk (0x1U << EXTI_PR_PR10_Pos) /*!< 0x00000400 */\r\n#define EXTI_PR_PR10     EXTI_PR_PR10_Msk           /*!< Pending bit for line 10 */\r\n#define EXTI_PR_PR11_Pos (11U)\r\n#define EXTI_PR_PR11_Msk (0x1U << EXTI_PR_PR11_Pos) /*!< 0x00000800 */\r\n#define EXTI_PR_PR11     EXTI_PR_PR11_Msk           /*!< Pending bit for line 11 */\r\n#define EXTI_PR_PR12_Pos (12U)\r\n#define EXTI_PR_PR12_Msk (0x1U << EXTI_PR_PR12_Pos) /*!< 0x00001000 */\r\n#define EXTI_PR_PR12     EXTI_PR_PR12_Msk           /*!< Pending bit for line 12 */\r\n#define EXTI_PR_PR13_Pos (13U)\r\n#define EXTI_PR_PR13_Msk (0x1U << EXTI_PR_PR13_Pos) /*!< 0x00002000 */\r\n#define EXTI_PR_PR13     EXTI_PR_PR13_Msk           /*!< Pending bit for line 13 */\r\n#define EXTI_PR_PR14_Pos (14U)\r\n#define EXTI_PR_PR14_Msk (0x1U << EXTI_PR_PR14_Pos) /*!< 0x00004000 */\r\n#define EXTI_PR_PR14     EXTI_PR_PR14_Msk           /*!< Pending bit for line 14 */\r\n#define EXTI_PR_PR15_Pos (15U)\r\n#define EXTI_PR_PR15_Msk (0x1U << EXTI_PR_PR15_Pos) /*!< 0x00008000 */\r\n#define EXTI_PR_PR15     EXTI_PR_PR15_Msk           /*!< Pending bit for line 15 */\r\n#define EXTI_PR_PR16_Pos (16U)\r\n#define EXTI_PR_PR16_Msk (0x1U << EXTI_PR_PR16_Pos) /*!< 0x00010000 */\r\n#define EXTI_PR_PR16     EXTI_PR_PR16_Msk           /*!< Pending bit for line 16 */\r\n#define EXTI_PR_PR17_Pos (17U)\r\n#define EXTI_PR_PR17_Msk (0x1U << EXTI_PR_PR17_Pos) /*!< 0x00020000 */\r\n#define EXTI_PR_PR17     EXTI_PR_PR17_Msk           /*!< Pending bit for line 17 */\r\n#define EXTI_PR_PR18_Pos (18U)\r\n#define EXTI_PR_PR18_Msk (0x1U << EXTI_PR_PR18_Pos) /*!< 0x00040000 */\r\n#define EXTI_PR_PR18     EXTI_PR_PR18_Msk           /*!< Pending bit for line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_PR_PIF0  EXTI_PR_PR0\r\n#define EXTI_PR_PIF1  EXTI_PR_PR1\r\n#define EXTI_PR_PIF2  EXTI_PR_PR2\r\n#define EXTI_PR_PIF3  EXTI_PR_PR3\r\n#define EXTI_PR_PIF4  EXTI_PR_PR4\r\n#define EXTI_PR_PIF5  EXTI_PR_PR5\r\n#define EXTI_PR_PIF6  EXTI_PR_PR6\r\n#define EXTI_PR_PIF7  EXTI_PR_PR7\r\n#define EXTI_PR_PIF8  EXTI_PR_PR8\r\n#define EXTI_PR_PIF9  EXTI_PR_PR9\r\n#define EXTI_PR_PIF10 EXTI_PR_PR10\r\n#define EXTI_PR_PIF11 EXTI_PR_PR11\r\n#define EXTI_PR_PIF12 EXTI_PR_PR12\r\n#define EXTI_PR_PIF13 EXTI_PR_PR13\r\n#define EXTI_PR_PIF14 EXTI_PR_PR14\r\n#define EXTI_PR_PIF15 EXTI_PR_PR15\r\n#define EXTI_PR_PIF16 EXTI_PR_PR16\r\n#define EXTI_PR_PIF17 EXTI_PR_PR17\r\n#define EXTI_PR_PIF18 EXTI_PR_PR18\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                             DMA Controller                                 */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for DMA_ISR register  ********************/\r\n#define DMA_ISR_GIF1_Pos  (0U)\r\n#define DMA_ISR_GIF1_Msk  (0x1U << DMA_ISR_GIF1_Pos) /*!< 0x00000001 */\r\n#define DMA_ISR_GIF1      DMA_ISR_GIF1_Msk           /*!< Channel 1 Global interrupt flag */\r\n#define DMA_ISR_TCIF1_Pos (1U)\r\n#define DMA_ISR_TCIF1_Msk (0x1U << DMA_ISR_TCIF1_Pos) /*!< 0x00000002 */\r\n#define DMA_ISR_TCIF1     DMA_ISR_TCIF1_Msk           /*!< Channel 1 Transfer Complete flag */\r\n#define DMA_ISR_HTIF1_Pos (2U)\r\n#define DMA_ISR_HTIF1_Msk (0x1U << DMA_ISR_HTIF1_Pos) /*!< 0x00000004 */\r\n#define DMA_ISR_HTIF1     DMA_ISR_HTIF1_Msk           /*!< Channel 1 Half Transfer flag */\r\n#define DMA_ISR_TEIF1_Pos (3U)\r\n#define DMA_ISR_TEIF1_Msk (0x1U << DMA_ISR_TEIF1_Pos) /*!< 0x00000008 */\r\n#define DMA_ISR_TEIF1     DMA_ISR_TEIF1_Msk           /*!< Channel 1 Transfer Error flag */\r\n#define DMA_ISR_GIF2_Pos  (4U)\r\n#define DMA_ISR_GIF2_Msk  (0x1U << DMA_ISR_GIF2_Pos) /*!< 0x00000010 */\r\n#define DMA_ISR_GIF2      DMA_ISR_GIF2_Msk           /*!< Channel 2 Global interrupt flag */\r\n#define DMA_ISR_TCIF2_Pos (5U)\r\n#define DMA_ISR_TCIF2_Msk (0x1U << DMA_ISR_TCIF2_Pos) /*!< 0x00000020 */\r\n#define DMA_ISR_TCIF2     DMA_ISR_TCIF2_Msk           /*!< Channel 2 Transfer Complete flag */\r\n#define DMA_ISR_HTIF2_Pos (6U)\r\n#define DMA_ISR_HTIF2_Msk (0x1U << DMA_ISR_HTIF2_Pos) /*!< 0x00000040 */\r\n#define DMA_ISR_HTIF2     DMA_ISR_HTIF2_Msk           /*!< Channel 2 Half Transfer flag */\r\n#define DMA_ISR_TEIF2_Pos (7U)\r\n#define DMA_ISR_TEIF2_Msk (0x1U << DMA_ISR_TEIF2_Pos) /*!< 0x00000080 */\r\n#define DMA_ISR_TEIF2     DMA_ISR_TEIF2_Msk           /*!< Channel 2 Transfer Error flag */\r\n#define DMA_ISR_GIF3_Pos  (8U)\r\n#define DMA_ISR_GIF3_Msk  (0x1U << DMA_ISR_GIF3_Pos) /*!< 0x00000100 */\r\n#define DMA_ISR_GIF3      DMA_ISR_GIF3_Msk           /*!< Channel 3 Global interrupt flag */\r\n#define DMA_ISR_TCIF3_Pos (9U)\r\n#define DMA_ISR_TCIF3_Msk (0x1U << DMA_ISR_TCIF3_Pos) /*!< 0x00000200 */\r\n#define DMA_ISR_TCIF3     DMA_ISR_TCIF3_Msk           /*!< Channel 3 Transfer Complete flag */\r\n#define DMA_ISR_HTIF3_Pos (10U)\r\n#define DMA_ISR_HTIF3_Msk (0x1U << DMA_ISR_HTIF3_Pos) /*!< 0x00000400 */\r\n#define DMA_ISR_HTIF3     DMA_ISR_HTIF3_Msk           /*!< Channel 3 Half Transfer flag */\r\n#define DMA_ISR_TEIF3_Pos (11U)\r\n#define DMA_ISR_TEIF3_Msk (0x1U << DMA_ISR_TEIF3_Pos) /*!< 0x00000800 */\r\n#define DMA_ISR_TEIF3     DMA_ISR_TEIF3_Msk           /*!< Channel 3 Transfer Error flag */\r\n#define DMA_ISR_GIF4_Pos  (12U)\r\n#define DMA_ISR_GIF4_Msk  (0x1U << DMA_ISR_GIF4_Pos) /*!< 0x00001000 */\r\n#define DMA_ISR_GIF4      DMA_ISR_GIF4_Msk           /*!< Channel 4 Global interrupt flag */\r\n#define DMA_ISR_TCIF4_Pos (13U)\r\n#define DMA_ISR_TCIF4_Msk (0x1U << DMA_ISR_TCIF4_Pos) /*!< 0x00002000 */\r\n#define DMA_ISR_TCIF4     DMA_ISR_TCIF4_Msk           /*!< Channel 4 Transfer Complete flag */\r\n#define DMA_ISR_HTIF4_Pos (14U)\r\n#define DMA_ISR_HTIF4_Msk (0x1U << DMA_ISR_HTIF4_Pos) /*!< 0x00004000 */\r\n#define DMA_ISR_HTIF4     DMA_ISR_HTIF4_Msk           /*!< Channel 4 Half Transfer flag */\r\n#define DMA_ISR_TEIF4_Pos (15U)\r\n#define DMA_ISR_TEIF4_Msk (0x1U << DMA_ISR_TEIF4_Pos) /*!< 0x00008000 */\r\n#define DMA_ISR_TEIF4     DMA_ISR_TEIF4_Msk           /*!< Channel 4 Transfer Error flag */\r\n#define DMA_ISR_GIF5_Pos  (16U)\r\n#define DMA_ISR_GIF5_Msk  (0x1U << DMA_ISR_GIF5_Pos) /*!< 0x00010000 */\r\n#define DMA_ISR_GIF5      DMA_ISR_GIF5_Msk           /*!< Channel 5 Global interrupt flag */\r\n#define DMA_ISR_TCIF5_Pos (17U)\r\n#define DMA_ISR_TCIF5_Msk (0x1U << DMA_ISR_TCIF5_Pos) /*!< 0x00020000 */\r\n#define DMA_ISR_TCIF5     DMA_ISR_TCIF5_Msk           /*!< Channel 5 Transfer Complete flag */\r\n#define DMA_ISR_HTIF5_Pos (18U)\r\n#define DMA_ISR_HTIF5_Msk (0x1U << DMA_ISR_HTIF5_Pos) /*!< 0x00040000 */\r\n#define DMA_ISR_HTIF5     DMA_ISR_HTIF5_Msk           /*!< Channel 5 Half Transfer flag */\r\n#define DMA_ISR_TEIF5_Pos (19U)\r\n#define DMA_ISR_TEIF5_Msk (0x1U << DMA_ISR_TEIF5_Pos) /*!< 0x00080000 */\r\n#define DMA_ISR_TEIF5     DMA_ISR_TEIF5_Msk           /*!< Channel 5 Transfer Error flag */\r\n#define DMA_ISR_GIF6_Pos  (20U)\r\n#define DMA_ISR_GIF6_Msk  (0x1U << DMA_ISR_GIF6_Pos) /*!< 0x00100000 */\r\n#define DMA_ISR_GIF6      DMA_ISR_GIF6_Msk           /*!< Channel 6 Global interrupt flag */\r\n#define DMA_ISR_TCIF6_Pos (21U)\r\n#define DMA_ISR_TCIF6_Msk (0x1U << DMA_ISR_TCIF6_Pos) /*!< 0x00200000 */\r\n#define DMA_ISR_TCIF6     DMA_ISR_TCIF6_Msk           /*!< Channel 6 Transfer Complete flag */\r\n#define DMA_ISR_HTIF6_Pos (22U)\r\n#define DMA_ISR_HTIF6_Msk (0x1U << DMA_ISR_HTIF6_Pos) /*!< 0x00400000 */\r\n#define DMA_ISR_HTIF6     DMA_ISR_HTIF6_Msk           /*!< Channel 6 Half Transfer flag */\r\n#define DMA_ISR_TEIF6_Pos (23U)\r\n#define DMA_ISR_TEIF6_Msk (0x1U << DMA_ISR_TEIF6_Pos) /*!< 0x00800000 */\r\n#define DMA_ISR_TEIF6     DMA_ISR_TEIF6_Msk           /*!< Channel 6 Transfer Error flag */\r\n#define DMA_ISR_GIF7_Pos  (24U)\r\n#define DMA_ISR_GIF7_Msk  (0x1U << DMA_ISR_GIF7_Pos) /*!< 0x01000000 */\r\n#define DMA_ISR_GIF7      DMA_ISR_GIF7_Msk           /*!< Channel 7 Global interrupt flag */\r\n#define DMA_ISR_TCIF7_Pos (25U)\r\n#define DMA_ISR_TCIF7_Msk (0x1U << DMA_ISR_TCIF7_Pos) /*!< 0x02000000 */\r\n#define DMA_ISR_TCIF7     DMA_ISR_TCIF7_Msk           /*!< Channel 7 Transfer Complete flag */\r\n#define DMA_ISR_HTIF7_Pos (26U)\r\n#define DMA_ISR_HTIF7_Msk (0x1U << DMA_ISR_HTIF7_Pos) /*!< 0x04000000 */\r\n#define DMA_ISR_HTIF7     DMA_ISR_HTIF7_Msk           /*!< Channel 7 Half Transfer flag */\r\n#define DMA_ISR_TEIF7_Pos (27U)\r\n#define DMA_ISR_TEIF7_Msk (0x1U << DMA_ISR_TEIF7_Pos) /*!< 0x08000000 */\r\n#define DMA_ISR_TEIF7     DMA_ISR_TEIF7_Msk           /*!< Channel 7 Transfer Error flag */\r\n\r\n/*******************  Bit definition for DMA_IFCR register  *******************/\r\n#define DMA_IFCR_CGIF1_Pos  (0U)\r\n#define DMA_IFCR_CGIF1_Msk  (0x1U << DMA_IFCR_CGIF1_Pos) /*!< 0x00000001 */\r\n#define DMA_IFCR_CGIF1      DMA_IFCR_CGIF1_Msk           /*!< Channel 1 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF1_Pos (1U)\r\n#define DMA_IFCR_CTCIF1_Msk (0x1U << DMA_IFCR_CTCIF1_Pos) /*!< 0x00000002 */\r\n#define DMA_IFCR_CTCIF1     DMA_IFCR_CTCIF1_Msk           /*!< Channel 1 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF1_Pos (2U)\r\n#define DMA_IFCR_CHTIF1_Msk (0x1U << DMA_IFCR_CHTIF1_Pos) /*!< 0x00000004 */\r\n#define DMA_IFCR_CHTIF1     DMA_IFCR_CHTIF1_Msk           /*!< Channel 1 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF1_Pos (3U)\r\n#define DMA_IFCR_CTEIF1_Msk (0x1U << DMA_IFCR_CTEIF1_Pos) /*!< 0x00000008 */\r\n#define DMA_IFCR_CTEIF1     DMA_IFCR_CTEIF1_Msk           /*!< Channel 1 Transfer Error clear */\r\n#define DMA_IFCR_CGIF2_Pos  (4U)\r\n#define DMA_IFCR_CGIF2_Msk  (0x1U << DMA_IFCR_CGIF2_Pos) /*!< 0x00000010 */\r\n#define DMA_IFCR_CGIF2      DMA_IFCR_CGIF2_Msk           /*!< Channel 2 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF2_Pos (5U)\r\n#define DMA_IFCR_CTCIF2_Msk (0x1U << DMA_IFCR_CTCIF2_Pos) /*!< 0x00000020 */\r\n#define DMA_IFCR_CTCIF2     DMA_IFCR_CTCIF2_Msk           /*!< Channel 2 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF2_Pos (6U)\r\n#define DMA_IFCR_CHTIF2_Msk (0x1U << DMA_IFCR_CHTIF2_Pos) /*!< 0x00000040 */\r\n#define DMA_IFCR_CHTIF2     DMA_IFCR_CHTIF2_Msk           /*!< Channel 2 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF2_Pos (7U)\r\n#define DMA_IFCR_CTEIF2_Msk (0x1U << DMA_IFCR_CTEIF2_Pos) /*!< 0x00000080 */\r\n#define DMA_IFCR_CTEIF2     DMA_IFCR_CTEIF2_Msk           /*!< Channel 2 Transfer Error clear */\r\n#define DMA_IFCR_CGIF3_Pos  (8U)\r\n#define DMA_IFCR_CGIF3_Msk  (0x1U << DMA_IFCR_CGIF3_Pos) /*!< 0x00000100 */\r\n#define DMA_IFCR_CGIF3      DMA_IFCR_CGIF3_Msk           /*!< Channel 3 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF3_Pos (9U)\r\n#define DMA_IFCR_CTCIF3_Msk (0x1U << DMA_IFCR_CTCIF3_Pos) /*!< 0x00000200 */\r\n#define DMA_IFCR_CTCIF3     DMA_IFCR_CTCIF3_Msk           /*!< Channel 3 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF3_Pos (10U)\r\n#define DMA_IFCR_CHTIF3_Msk (0x1U << DMA_IFCR_CHTIF3_Pos) /*!< 0x00000400 */\r\n#define DMA_IFCR_CHTIF3     DMA_IFCR_CHTIF3_Msk           /*!< Channel 3 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF3_Pos (11U)\r\n#define DMA_IFCR_CTEIF3_Msk (0x1U << DMA_IFCR_CTEIF3_Pos) /*!< 0x00000800 */\r\n#define DMA_IFCR_CTEIF3     DMA_IFCR_CTEIF3_Msk           /*!< Channel 3 Transfer Error clear */\r\n#define DMA_IFCR_CGIF4_Pos  (12U)\r\n#define DMA_IFCR_CGIF4_Msk  (0x1U << DMA_IFCR_CGIF4_Pos) /*!< 0x00001000 */\r\n#define DMA_IFCR_CGIF4      DMA_IFCR_CGIF4_Msk           /*!< Channel 4 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF4_Pos (13U)\r\n#define DMA_IFCR_CTCIF4_Msk (0x1U << DMA_IFCR_CTCIF4_Pos) /*!< 0x00002000 */\r\n#define DMA_IFCR_CTCIF4     DMA_IFCR_CTCIF4_Msk           /*!< Channel 4 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF4_Pos (14U)\r\n#define DMA_IFCR_CHTIF4_Msk (0x1U << DMA_IFCR_CHTIF4_Pos) /*!< 0x00004000 */\r\n#define DMA_IFCR_CHTIF4     DMA_IFCR_CHTIF4_Msk           /*!< Channel 4 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF4_Pos (15U)\r\n#define DMA_IFCR_CTEIF4_Msk (0x1U << DMA_IFCR_CTEIF4_Pos) /*!< 0x00008000 */\r\n#define DMA_IFCR_CTEIF4     DMA_IFCR_CTEIF4_Msk           /*!< Channel 4 Transfer Error clear */\r\n#define DMA_IFCR_CGIF5_Pos  (16U)\r\n#define DMA_IFCR_CGIF5_Msk  (0x1U << DMA_IFCR_CGIF5_Pos) /*!< 0x00010000 */\r\n#define DMA_IFCR_CGIF5      DMA_IFCR_CGIF5_Msk           /*!< Channel 5 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF5_Pos (17U)\r\n#define DMA_IFCR_CTCIF5_Msk (0x1U << DMA_IFCR_CTCIF5_Pos) /*!< 0x00020000 */\r\n#define DMA_IFCR_CTCIF5     DMA_IFCR_CTCIF5_Msk           /*!< Channel 5 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF5_Pos (18U)\r\n#define DMA_IFCR_CHTIF5_Msk (0x1U << DMA_IFCR_CHTIF5_Pos) /*!< 0x00040000 */\r\n#define DMA_IFCR_CHTIF5     DMA_IFCR_CHTIF5_Msk           /*!< Channel 5 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF5_Pos (19U)\r\n#define DMA_IFCR_CTEIF5_Msk (0x1U << DMA_IFCR_CTEIF5_Pos) /*!< 0x00080000 */\r\n#define DMA_IFCR_CTEIF5     DMA_IFCR_CTEIF5_Msk           /*!< Channel 5 Transfer Error clear */\r\n#define DMA_IFCR_CGIF6_Pos  (20U)\r\n#define DMA_IFCR_CGIF6_Msk  (0x1U << DMA_IFCR_CGIF6_Pos) /*!< 0x00100000 */\r\n#define DMA_IFCR_CGIF6      DMA_IFCR_CGIF6_Msk           /*!< Channel 6 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF6_Pos (21U)\r\n#define DMA_IFCR_CTCIF6_Msk (0x1U << DMA_IFCR_CTCIF6_Pos) /*!< 0x00200000 */\r\n#define DMA_IFCR_CTCIF6     DMA_IFCR_CTCIF6_Msk           /*!< Channel 6 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF6_Pos (22U)\r\n#define DMA_IFCR_CHTIF6_Msk (0x1U << DMA_IFCR_CHTIF6_Pos) /*!< 0x00400000 */\r\n#define DMA_IFCR_CHTIF6     DMA_IFCR_CHTIF6_Msk           /*!< Channel 6 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF6_Pos (23U)\r\n#define DMA_IFCR_CTEIF6_Msk (0x1U << DMA_IFCR_CTEIF6_Pos) /*!< 0x00800000 */\r\n#define DMA_IFCR_CTEIF6     DMA_IFCR_CTEIF6_Msk           /*!< Channel 6 Transfer Error clear */\r\n#define DMA_IFCR_CGIF7_Pos  (24U)\r\n#define DMA_IFCR_CGIF7_Msk  (0x1U << DMA_IFCR_CGIF7_Pos) /*!< 0x01000000 */\r\n#define DMA_IFCR_CGIF7      DMA_IFCR_CGIF7_Msk           /*!< Channel 7 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF7_Pos (25U)\r\n#define DMA_IFCR_CTCIF7_Msk (0x1U << DMA_IFCR_CTCIF7_Pos) /*!< 0x02000000 */\r\n#define DMA_IFCR_CTCIF7     DMA_IFCR_CTCIF7_Msk           /*!< Channel 7 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF7_Pos (26U)\r\n#define DMA_IFCR_CHTIF7_Msk (0x1U << DMA_IFCR_CHTIF7_Pos) /*!< 0x04000000 */\r\n#define DMA_IFCR_CHTIF7     DMA_IFCR_CHTIF7_Msk           /*!< Channel 7 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF7_Pos (27U)\r\n#define DMA_IFCR_CTEIF7_Msk (0x1U << DMA_IFCR_CTEIF7_Pos) /*!< 0x08000000 */\r\n#define DMA_IFCR_CTEIF7     DMA_IFCR_CTEIF7_Msk           /*!< Channel 7 Transfer Error clear */\r\n\r\n/*******************  Bit definition for DMA_CCR register   *******************/\r\n#define DMA_CCR_EN_Pos   (0U)\r\n#define DMA_CCR_EN_Msk   (0x1U << DMA_CCR_EN_Pos) /*!< 0x00000001 */\r\n#define DMA_CCR_EN       DMA_CCR_EN_Msk           /*!< Channel enable */\r\n#define DMA_CCR_TCIE_Pos (1U)\r\n#define DMA_CCR_TCIE_Msk (0x1U << DMA_CCR_TCIE_Pos) /*!< 0x00000002 */\r\n#define DMA_CCR_TCIE     DMA_CCR_TCIE_Msk           /*!< Transfer complete interrupt enable */\r\n#define DMA_CCR_HTIE_Pos (2U)\r\n#define DMA_CCR_HTIE_Msk (0x1U << DMA_CCR_HTIE_Pos) /*!< 0x00000004 */\r\n#define DMA_CCR_HTIE     DMA_CCR_HTIE_Msk           /*!< Half Transfer interrupt enable */\r\n#define DMA_CCR_TEIE_Pos (3U)\r\n#define DMA_CCR_TEIE_Msk (0x1U << DMA_CCR_TEIE_Pos) /*!< 0x00000008 */\r\n#define DMA_CCR_TEIE     DMA_CCR_TEIE_Msk           /*!< Transfer error interrupt enable */\r\n#define DMA_CCR_DIR_Pos  (4U)\r\n#define DMA_CCR_DIR_Msk  (0x1U << DMA_CCR_DIR_Pos) /*!< 0x00000010 */\r\n#define DMA_CCR_DIR      DMA_CCR_DIR_Msk           /*!< Data transfer direction */\r\n#define DMA_CCR_CIRC_Pos (5U)\r\n#define DMA_CCR_CIRC_Msk (0x1U << DMA_CCR_CIRC_Pos) /*!< 0x00000020 */\r\n#define DMA_CCR_CIRC     DMA_CCR_CIRC_Msk           /*!< Circular mode */\r\n#define DMA_CCR_PINC_Pos (6U)\r\n#define DMA_CCR_PINC_Msk (0x1U << DMA_CCR_PINC_Pos) /*!< 0x00000040 */\r\n#define DMA_CCR_PINC     DMA_CCR_PINC_Msk           /*!< Peripheral increment mode */\r\n#define DMA_CCR_MINC_Pos (7U)\r\n#define DMA_CCR_MINC_Msk (0x1U << DMA_CCR_MINC_Pos) /*!< 0x00000080 */\r\n#define DMA_CCR_MINC     DMA_CCR_MINC_Msk           /*!< Memory increment mode */\r\n\r\n#define DMA_CCR_PSIZE_Pos (8U)\r\n#define DMA_CCR_PSIZE_Msk (0x3U << DMA_CCR_PSIZE_Pos) /*!< 0x00000300 */\r\n#define DMA_CCR_PSIZE     DMA_CCR_PSIZE_Msk           /*!< PSIZE[1:0] bits (Peripheral size) */\r\n#define DMA_CCR_PSIZE_0   (0x1U << DMA_CCR_PSIZE_Pos) /*!< 0x00000100 */\r\n#define DMA_CCR_PSIZE_1   (0x2U << DMA_CCR_PSIZE_Pos) /*!< 0x00000200 */\r\n\r\n#define DMA_CCR_MSIZE_Pos (10U)\r\n#define DMA_CCR_MSIZE_Msk (0x3U << DMA_CCR_MSIZE_Pos) /*!< 0x00000C00 */\r\n#define DMA_CCR_MSIZE     DMA_CCR_MSIZE_Msk           /*!< MSIZE[1:0] bits (Memory size) */\r\n#define DMA_CCR_MSIZE_0   (0x1U << DMA_CCR_MSIZE_Pos) /*!< 0x00000400 */\r\n#define DMA_CCR_MSIZE_1   (0x2U << DMA_CCR_MSIZE_Pos) /*!< 0x00000800 */\r\n\r\n#define DMA_CCR_PL_Pos (12U)\r\n#define DMA_CCR_PL_Msk (0x3U << DMA_CCR_PL_Pos) /*!< 0x00003000 */\r\n#define DMA_CCR_PL     DMA_CCR_PL_Msk           /*!< PL[1:0] bits(Channel Priority level) */\r\n#define DMA_CCR_PL_0   (0x1U << DMA_CCR_PL_Pos) /*!< 0x00001000 */\r\n#define DMA_CCR_PL_1   (0x2U << DMA_CCR_PL_Pos) /*!< 0x00002000 */\r\n\r\n#define DMA_CCR_MEM2MEM_Pos (14U)\r\n#define DMA_CCR_MEM2MEM_Msk (0x1U << DMA_CCR_MEM2MEM_Pos) /*!< 0x00004000 */\r\n#define DMA_CCR_MEM2MEM     DMA_CCR_MEM2MEM_Msk           /*!< Memory to memory mode */\r\n\r\n/******************  Bit definition for DMA_CNDTR  register  ******************/\r\n#define DMA_CNDTR_NDT_Pos (0U)\r\n#define DMA_CNDTR_NDT_Msk (0xFFFFU << DMA_CNDTR_NDT_Pos) /*!< 0x0000FFFF */\r\n#define DMA_CNDTR_NDT     DMA_CNDTR_NDT_Msk              /*!< Number of data to Transfer */\r\n\r\n/******************  Bit definition for DMA_CPAR  register  *******************/\r\n#define DMA_CPAR_PA_Pos (0U)\r\n#define DMA_CPAR_PA_Msk (0xFFFFFFFFU << DMA_CPAR_PA_Pos) /*!< 0xFFFFFFFF */\r\n#define DMA_CPAR_PA     DMA_CPAR_PA_Msk                  /*!< Peripheral Address */\r\n\r\n/******************  Bit definition for DMA_CMAR  register  *******************/\r\n#define DMA_CMAR_MA_Pos (0U)\r\n#define DMA_CMAR_MA_Msk (0xFFFFFFFFU << DMA_CMAR_MA_Pos) /*!< 0xFFFFFFFF */\r\n#define DMA_CMAR_MA     DMA_CMAR_MA_Msk                  /*!< Memory Address */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                      Analog to Digital Converter (ADC)                     */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*\r\n * @brief Specific device feature definitions (not present on all devices in the STM32F1 family)\r\n */\r\n#define ADC_MULTIMODE_SUPPORT /*!< ADC feature available only on specific devices: multimode available on devices with several ADC instances */\r\n\r\n/********************  Bit definition for ADC_SR register  ********************/\r\n#define ADC_SR_AWD_Pos   (0U)\r\n#define ADC_SR_AWD_Msk   (0x1U << ADC_SR_AWD_Pos) /*!< 0x00000001 */\r\n#define ADC_SR_AWD       ADC_SR_AWD_Msk           /*!< ADC analog watchdog 1 flag */\r\n#define ADC_SR_EOS_Pos   (1U)\r\n#define ADC_SR_EOS_Msk   (0x1U << ADC_SR_EOS_Pos) /*!< 0x00000002 */\r\n#define ADC_SR_EOS       ADC_SR_EOS_Msk           /*!< ADC group regular end of sequence conversions flag */\r\n#define ADC_SR_JEOS_Pos  (2U)\r\n#define ADC_SR_JEOS_Msk  (0x1U << ADC_SR_JEOS_Pos) /*!< 0x00000004 */\r\n#define ADC_SR_JEOS      ADC_SR_JEOS_Msk           /*!< ADC group injected end of sequence conversions flag */\r\n#define ADC_SR_JSTRT_Pos (3U)\r\n#define ADC_SR_JSTRT_Msk (0x1U << ADC_SR_JSTRT_Pos) /*!< 0x00000008 */\r\n#define ADC_SR_JSTRT     ADC_SR_JSTRT_Msk           /*!< ADC group injected conversion start flag */\r\n#define ADC_SR_STRT_Pos  (4U)\r\n#define ADC_SR_STRT_Msk  (0x1U << ADC_SR_STRT_Pos) /*!< 0x00000010 */\r\n#define ADC_SR_STRT      ADC_SR_STRT_Msk           /*!< ADC group regular conversion start flag */\r\n\r\n/* Legacy defines */\r\n#define ADC_SR_EOC  (ADC_SR_EOS)\r\n#define ADC_SR_JEOC (ADC_SR_JEOS)\r\n\r\n/*******************  Bit definition for ADC_CR1 register  ********************/\r\n#define ADC_CR1_AWDCH_Pos (0U)\r\n#define ADC_CR1_AWDCH_Msk (0x1FU << ADC_CR1_AWDCH_Pos) /*!< 0x0000001F */\r\n#define ADC_CR1_AWDCH     ADC_CR1_AWDCH_Msk            /*!< ADC analog watchdog 1 monitored channel selection */\r\n#define ADC_CR1_AWDCH_0   (0x01U << ADC_CR1_AWDCH_Pos) /*!< 0x00000001 */\r\n#define ADC_CR1_AWDCH_1   (0x02U << ADC_CR1_AWDCH_Pos) /*!< 0x00000002 */\r\n#define ADC_CR1_AWDCH_2   (0x04U << ADC_CR1_AWDCH_Pos) /*!< 0x00000004 */\r\n#define ADC_CR1_AWDCH_3   (0x08U << ADC_CR1_AWDCH_Pos) /*!< 0x00000008 */\r\n#define ADC_CR1_AWDCH_4   (0x10U << ADC_CR1_AWDCH_Pos) /*!< 0x00000010 */\r\n\r\n#define ADC_CR1_EOSIE_Pos   (5U)\r\n#define ADC_CR1_EOSIE_Msk   (0x1U << ADC_CR1_EOSIE_Pos) /*!< 0x00000020 */\r\n#define ADC_CR1_EOSIE       ADC_CR1_EOSIE_Msk           /*!< ADC group regular end of sequence conversions interrupt */\r\n#define ADC_CR1_AWDIE_Pos   (6U)\r\n#define ADC_CR1_AWDIE_Msk   (0x1U << ADC_CR1_AWDIE_Pos) /*!< 0x00000040 */\r\n#define ADC_CR1_AWDIE       ADC_CR1_AWDIE_Msk           /*!< ADC analog watchdog 1 interrupt */\r\n#define ADC_CR1_JEOSIE_Pos  (7U)\r\n#define ADC_CR1_JEOSIE_Msk  (0x1U << ADC_CR1_JEOSIE_Pos) /*!< 0x00000080 */\r\n#define ADC_CR1_JEOSIE      ADC_CR1_JEOSIE_Msk           /*!< ADC group injected end of sequence conversions interrupt */\r\n#define ADC_CR1_SCAN_Pos    (8U)\r\n#define ADC_CR1_SCAN_Msk    (0x1U << ADC_CR1_SCAN_Pos) /*!< 0x00000100 */\r\n#define ADC_CR1_SCAN        ADC_CR1_SCAN_Msk           /*!< ADC scan mode */\r\n#define ADC_CR1_AWDSGL_Pos  (9U)\r\n#define ADC_CR1_AWDSGL_Msk  (0x1U << ADC_CR1_AWDSGL_Pos) /*!< 0x00000200 */\r\n#define ADC_CR1_AWDSGL      ADC_CR1_AWDSGL_Msk           /*!< ADC analog watchdog 1 monitoring a single channel or all channels */\r\n#define ADC_CR1_JAUTO_Pos   (10U)\r\n#define ADC_CR1_JAUTO_Msk   (0x1U << ADC_CR1_JAUTO_Pos) /*!< 0x00000400 */\r\n#define ADC_CR1_JAUTO       ADC_CR1_JAUTO_Msk           /*!< ADC group injected automatic trigger mode */\r\n#define ADC_CR1_DISCEN_Pos  (11U)\r\n#define ADC_CR1_DISCEN_Msk  (0x1U << ADC_CR1_DISCEN_Pos) /*!< 0x00000800 */\r\n#define ADC_CR1_DISCEN      ADC_CR1_DISCEN_Msk           /*!< ADC group regular sequencer discontinuous mode */\r\n#define ADC_CR1_JDISCEN_Pos (12U)\r\n#define ADC_CR1_JDISCEN_Msk (0x1U << ADC_CR1_JDISCEN_Pos) /*!< 0x00001000 */\r\n#define ADC_CR1_JDISCEN     ADC_CR1_JDISCEN_Msk           /*!< ADC group injected sequencer discontinuous mode */\r\n\r\n#define ADC_CR1_DISCNUM_Pos (13U)\r\n#define ADC_CR1_DISCNUM_Msk (0x7U << ADC_CR1_DISCNUM_Pos) /*!< 0x0000E000 */\r\n#define ADC_CR1_DISCNUM     ADC_CR1_DISCNUM_Msk           /*!< ADC group regular sequencer discontinuous number of ranks */\r\n#define ADC_CR1_DISCNUM_0   (0x1U << ADC_CR1_DISCNUM_Pos) /*!< 0x00002000 */\r\n#define ADC_CR1_DISCNUM_1   (0x2U << ADC_CR1_DISCNUM_Pos) /*!< 0x00004000 */\r\n#define ADC_CR1_DISCNUM_2   (0x4U << ADC_CR1_DISCNUM_Pos) /*!< 0x00008000 */\r\n\r\n#define ADC_CR1_DUALMOD_Pos (16U)\r\n#define ADC_CR1_DUALMOD_Msk (0xFU << ADC_CR1_DUALMOD_Pos) /*!< 0x000F0000 */\r\n#define ADC_CR1_DUALMOD     ADC_CR1_DUALMOD_Msk           /*!< ADC multimode mode selection */\r\n#define ADC_CR1_DUALMOD_0   (0x1U << ADC_CR1_DUALMOD_Pos) /*!< 0x00010000 */\r\n#define ADC_CR1_DUALMOD_1   (0x2U << ADC_CR1_DUALMOD_Pos) /*!< 0x00020000 */\r\n#define ADC_CR1_DUALMOD_2   (0x4U << ADC_CR1_DUALMOD_Pos) /*!< 0x00040000 */\r\n#define ADC_CR1_DUALMOD_3   (0x8U << ADC_CR1_DUALMOD_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_CR1_JAWDEN_Pos (22U)\r\n#define ADC_CR1_JAWDEN_Msk (0x1U << ADC_CR1_JAWDEN_Pos) /*!< 0x00400000 */\r\n#define ADC_CR1_JAWDEN     ADC_CR1_JAWDEN_Msk           /*!< ADC analog watchdog 1 enable on scope ADC group injected */\r\n#define ADC_CR1_AWDEN_Pos  (23U)\r\n#define ADC_CR1_AWDEN_Msk  (0x1U << ADC_CR1_AWDEN_Pos) /*!< 0x00800000 */\r\n#define ADC_CR1_AWDEN      ADC_CR1_AWDEN_Msk           /*!< ADC analog watchdog 1 enable on scope ADC group regular */\r\n\r\n/* Legacy defines */\r\n#define ADC_CR1_EOCIE  (ADC_CR1_EOSIE)\r\n#define ADC_CR1_JEOCIE (ADC_CR1_JEOSIE)\r\n\r\n/*******************  Bit definition for ADC_CR2 register  ********************/\r\n#define ADC_CR2_ADON_Pos   (0U)\r\n#define ADC_CR2_ADON_Msk   (0x1U << ADC_CR2_ADON_Pos) /*!< 0x00000001 */\r\n#define ADC_CR2_ADON       ADC_CR2_ADON_Msk           /*!< ADC enable */\r\n#define ADC_CR2_CONT_Pos   (1U)\r\n#define ADC_CR2_CONT_Msk   (0x1U << ADC_CR2_CONT_Pos) /*!< 0x00000002 */\r\n#define ADC_CR2_CONT       ADC_CR2_CONT_Msk           /*!< ADC group regular continuous conversion mode */\r\n#define ADC_CR2_CAL_Pos    (2U)\r\n#define ADC_CR2_CAL_Msk    (0x1U << ADC_CR2_CAL_Pos) /*!< 0x00000004 */\r\n#define ADC_CR2_CAL        ADC_CR2_CAL_Msk           /*!< ADC calibration start */\r\n#define ADC_CR2_RSTCAL_Pos (3U)\r\n#define ADC_CR2_RSTCAL_Msk (0x1U << ADC_CR2_RSTCAL_Pos) /*!< 0x00000008 */\r\n#define ADC_CR2_RSTCAL     ADC_CR2_RSTCAL_Msk           /*!< ADC calibration reset */\r\n#define ADC_CR2_DMA_Pos    (8U)\r\n#define ADC_CR2_DMA_Msk    (0x1U << ADC_CR2_DMA_Pos) /*!< 0x00000100 */\r\n#define ADC_CR2_DMA        ADC_CR2_DMA_Msk           /*!< ADC DMA transfer enable */\r\n#define ADC_CR2_ALIGN_Pos  (11U)\r\n#define ADC_CR2_ALIGN_Msk  (0x1U << ADC_CR2_ALIGN_Pos) /*!< 0x00000800 */\r\n#define ADC_CR2_ALIGN      ADC_CR2_ALIGN_Msk           /*!< ADC data alignement */\r\n\r\n#define ADC_CR2_JEXTSEL_Pos (12U)\r\n#define ADC_CR2_JEXTSEL_Msk (0x7U << ADC_CR2_JEXTSEL_Pos) /*!< 0x00007000 */\r\n#define ADC_CR2_JEXTSEL     ADC_CR2_JEXTSEL_Msk           /*!< ADC group injected external trigger source */\r\n#define ADC_CR2_JEXTSEL_0   (0x1U << ADC_CR2_JEXTSEL_Pos) /*!< 0x00001000 */\r\n#define ADC_CR2_JEXTSEL_1   (0x2U << ADC_CR2_JEXTSEL_Pos) /*!< 0x00002000 */\r\n#define ADC_CR2_JEXTSEL_2   (0x4U << ADC_CR2_JEXTSEL_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_CR2_JEXTTRIG_Pos (15U)\r\n#define ADC_CR2_JEXTTRIG_Msk (0x1U << ADC_CR2_JEXTTRIG_Pos) /*!< 0x00008000 */\r\n#define ADC_CR2_JEXTTRIG     ADC_CR2_JEXTTRIG_Msk           /*!< ADC group injected external trigger enable */\r\n\r\n#define ADC_CR2_EXTSEL_Pos (17U)\r\n#define ADC_CR2_EXTSEL_Msk (0x7U << ADC_CR2_EXTSEL_Pos) /*!< 0x000E0000 */\r\n#define ADC_CR2_EXTSEL     ADC_CR2_EXTSEL_Msk           /*!< ADC group regular external trigger source */\r\n#define ADC_CR2_EXTSEL_0   (0x1U << ADC_CR2_EXTSEL_Pos) /*!< 0x00020000 */\r\n#define ADC_CR2_EXTSEL_1   (0x2U << ADC_CR2_EXTSEL_Pos) /*!< 0x00040000 */\r\n#define ADC_CR2_EXTSEL_2   (0x4U << ADC_CR2_EXTSEL_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_CR2_EXTTRIG_Pos  (20U)\r\n#define ADC_CR2_EXTTRIG_Msk  (0x1U << ADC_CR2_EXTTRIG_Pos) /*!< 0x00100000 */\r\n#define ADC_CR2_EXTTRIG      ADC_CR2_EXTTRIG_Msk           /*!< ADC group regular external trigger enable */\r\n#define ADC_CR2_JSWSTART_Pos (21U)\r\n#define ADC_CR2_JSWSTART_Msk (0x1U << ADC_CR2_JSWSTART_Pos) /*!< 0x00200000 */\r\n#define ADC_CR2_JSWSTART     ADC_CR2_JSWSTART_Msk           /*!< ADC group injected conversion start */\r\n#define ADC_CR2_SWSTART_Pos  (22U)\r\n#define ADC_CR2_SWSTART_Msk  (0x1U << ADC_CR2_SWSTART_Pos) /*!< 0x00400000 */\r\n#define ADC_CR2_SWSTART      ADC_CR2_SWSTART_Msk           /*!< ADC group regular conversion start */\r\n#define ADC_CR2_TSVREFE_Pos  (23U)\r\n#define ADC_CR2_TSVREFE_Msk  (0x1U << ADC_CR2_TSVREFE_Pos) /*!< 0x00800000 */\r\n#define ADC_CR2_TSVREFE      ADC_CR2_TSVREFE_Msk           /*!< ADC internal path to VrefInt and temperature sensor enable */\r\n\r\n/******************  Bit definition for ADC_SMPR1 register  *******************/\r\n#define ADC_SMPR1_SMP10_Pos (0U)\r\n#define ADC_SMPR1_SMP10_Msk (0x7U << ADC_SMPR1_SMP10_Pos) /*!< 0x00000007 */\r\n#define ADC_SMPR1_SMP10     ADC_SMPR1_SMP10_Msk           /*!< ADC channel 10 sampling time selection  */\r\n#define ADC_SMPR1_SMP10_0   (0x1U << ADC_SMPR1_SMP10_Pos) /*!< 0x00000001 */\r\n#define ADC_SMPR1_SMP10_1   (0x2U << ADC_SMPR1_SMP10_Pos) /*!< 0x00000002 */\r\n#define ADC_SMPR1_SMP10_2   (0x4U << ADC_SMPR1_SMP10_Pos) /*!< 0x00000004 */\r\n\r\n#define ADC_SMPR1_SMP11_Pos (3U)\r\n#define ADC_SMPR1_SMP11_Msk (0x7U << ADC_SMPR1_SMP11_Pos) /*!< 0x00000038 */\r\n#define ADC_SMPR1_SMP11     ADC_SMPR1_SMP11_Msk           /*!< ADC channel 11 sampling time selection  */\r\n#define ADC_SMPR1_SMP11_0   (0x1U << ADC_SMPR1_SMP11_Pos) /*!< 0x00000008 */\r\n#define ADC_SMPR1_SMP11_1   (0x2U << ADC_SMPR1_SMP11_Pos) /*!< 0x00000010 */\r\n#define ADC_SMPR1_SMP11_2   (0x4U << ADC_SMPR1_SMP11_Pos) /*!< 0x00000020 */\r\n\r\n#define ADC_SMPR1_SMP12_Pos (6U)\r\n#define ADC_SMPR1_SMP12_Msk (0x7U << ADC_SMPR1_SMP12_Pos) /*!< 0x000001C0 */\r\n#define ADC_SMPR1_SMP12     ADC_SMPR1_SMP12_Msk           /*!< ADC channel 12 sampling time selection  */\r\n#define ADC_SMPR1_SMP12_0   (0x1U << ADC_SMPR1_SMP12_Pos) /*!< 0x00000040 */\r\n#define ADC_SMPR1_SMP12_1   (0x2U << ADC_SMPR1_SMP12_Pos) /*!< 0x00000080 */\r\n#define ADC_SMPR1_SMP12_2   (0x4U << ADC_SMPR1_SMP12_Pos) /*!< 0x00000100 */\r\n\r\n#define ADC_SMPR1_SMP13_Pos (9U)\r\n#define ADC_SMPR1_SMP13_Msk (0x7U << ADC_SMPR1_SMP13_Pos) /*!< 0x00000E00 */\r\n#define ADC_SMPR1_SMP13     ADC_SMPR1_SMP13_Msk           /*!< ADC channel 13 sampling time selection  */\r\n#define ADC_SMPR1_SMP13_0   (0x1U << ADC_SMPR1_SMP13_Pos) /*!< 0x00000200 */\r\n#define ADC_SMPR1_SMP13_1   (0x2U << ADC_SMPR1_SMP13_Pos) /*!< 0x00000400 */\r\n#define ADC_SMPR1_SMP13_2   (0x4U << ADC_SMPR1_SMP13_Pos) /*!< 0x00000800 */\r\n\r\n#define ADC_SMPR1_SMP14_Pos (12U)\r\n#define ADC_SMPR1_SMP14_Msk (0x7U << ADC_SMPR1_SMP14_Pos) /*!< 0x00007000 */\r\n#define ADC_SMPR1_SMP14     ADC_SMPR1_SMP14_Msk           /*!< ADC channel 14 sampling time selection  */\r\n#define ADC_SMPR1_SMP14_0   (0x1U << ADC_SMPR1_SMP14_Pos) /*!< 0x00001000 */\r\n#define ADC_SMPR1_SMP14_1   (0x2U << ADC_SMPR1_SMP14_Pos) /*!< 0x00002000 */\r\n#define ADC_SMPR1_SMP14_2   (0x4U << ADC_SMPR1_SMP14_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_SMPR1_SMP15_Pos (15U)\r\n#define ADC_SMPR1_SMP15_Msk (0x7U << ADC_SMPR1_SMP15_Pos) /*!< 0x00038000 */\r\n#define ADC_SMPR1_SMP15     ADC_SMPR1_SMP15_Msk           /*!< ADC channel 15 sampling time selection  */\r\n#define ADC_SMPR1_SMP15_0   (0x1U << ADC_SMPR1_SMP15_Pos) /*!< 0x00008000 */\r\n#define ADC_SMPR1_SMP15_1   (0x2U << ADC_SMPR1_SMP15_Pos) /*!< 0x00010000 */\r\n#define ADC_SMPR1_SMP15_2   (0x4U << ADC_SMPR1_SMP15_Pos) /*!< 0x00020000 */\r\n\r\n#define ADC_SMPR1_SMP16_Pos (18U)\r\n#define ADC_SMPR1_SMP16_Msk (0x7U << ADC_SMPR1_SMP16_Pos) /*!< 0x001C0000 */\r\n#define ADC_SMPR1_SMP16     ADC_SMPR1_SMP16_Msk           /*!< ADC channel 16 sampling time selection  */\r\n#define ADC_SMPR1_SMP16_0   (0x1U << ADC_SMPR1_SMP16_Pos) /*!< 0x00040000 */\r\n#define ADC_SMPR1_SMP16_1   (0x2U << ADC_SMPR1_SMP16_Pos) /*!< 0x00080000 */\r\n#define ADC_SMPR1_SMP16_2   (0x4U << ADC_SMPR1_SMP16_Pos) /*!< 0x00100000 */\r\n\r\n#define ADC_SMPR1_SMP17_Pos (21U)\r\n#define ADC_SMPR1_SMP17_Msk (0x7U << ADC_SMPR1_SMP17_Pos) /*!< 0x00E00000 */\r\n#define ADC_SMPR1_SMP17     ADC_SMPR1_SMP17_Msk           /*!< ADC channel 17 sampling time selection  */\r\n#define ADC_SMPR1_SMP17_0   (0x1U << ADC_SMPR1_SMP17_Pos) /*!< 0x00200000 */\r\n#define ADC_SMPR1_SMP17_1   (0x2U << ADC_SMPR1_SMP17_Pos) /*!< 0x00400000 */\r\n#define ADC_SMPR1_SMP17_2   (0x4U << ADC_SMPR1_SMP17_Pos) /*!< 0x00800000 */\r\n\r\n/******************  Bit definition for ADC_SMPR2 register  *******************/\r\n#define ADC_SMPR2_SMP0_Pos (0U)\r\n#define ADC_SMPR2_SMP0_Msk (0x7U << ADC_SMPR2_SMP0_Pos) /*!< 0x00000007 */\r\n#define ADC_SMPR2_SMP0     ADC_SMPR2_SMP0_Msk           /*!< ADC channel 0 sampling time selection  */\r\n#define ADC_SMPR2_SMP0_0   (0x1U << ADC_SMPR2_SMP0_Pos) /*!< 0x00000001 */\r\n#define ADC_SMPR2_SMP0_1   (0x2U << ADC_SMPR2_SMP0_Pos) /*!< 0x00000002 */\r\n#define ADC_SMPR2_SMP0_2   (0x4U << ADC_SMPR2_SMP0_Pos) /*!< 0x00000004 */\r\n\r\n#define ADC_SMPR2_SMP1_Pos (3U)\r\n#define ADC_SMPR2_SMP1_Msk (0x7U << ADC_SMPR2_SMP1_Pos) /*!< 0x00000038 */\r\n#define ADC_SMPR2_SMP1     ADC_SMPR2_SMP1_Msk           /*!< ADC channel 1 sampling time selection  */\r\n#define ADC_SMPR2_SMP1_0   (0x1U << ADC_SMPR2_SMP1_Pos) /*!< 0x00000008 */\r\n#define ADC_SMPR2_SMP1_1   (0x2U << ADC_SMPR2_SMP1_Pos) /*!< 0x00000010 */\r\n#define ADC_SMPR2_SMP1_2   (0x4U << ADC_SMPR2_SMP1_Pos) /*!< 0x00000020 */\r\n\r\n#define ADC_SMPR2_SMP2_Pos (6U)\r\n#define ADC_SMPR2_SMP2_Msk (0x7U << ADC_SMPR2_SMP2_Pos) /*!< 0x000001C0 */\r\n#define ADC_SMPR2_SMP2     ADC_SMPR2_SMP2_Msk           /*!< ADC channel 2 sampling time selection  */\r\n#define ADC_SMPR2_SMP2_0   (0x1U << ADC_SMPR2_SMP2_Pos) /*!< 0x00000040 */\r\n#define ADC_SMPR2_SMP2_1   (0x2U << ADC_SMPR2_SMP2_Pos) /*!< 0x00000080 */\r\n#define ADC_SMPR2_SMP2_2   (0x4U << ADC_SMPR2_SMP2_Pos) /*!< 0x00000100 */\r\n\r\n#define ADC_SMPR2_SMP3_Pos (9U)\r\n#define ADC_SMPR2_SMP3_Msk (0x7U << ADC_SMPR2_SMP3_Pos) /*!< 0x00000E00 */\r\n#define ADC_SMPR2_SMP3     ADC_SMPR2_SMP3_Msk           /*!< ADC channel 3 sampling time selection  */\r\n#define ADC_SMPR2_SMP3_0   (0x1U << ADC_SMPR2_SMP3_Pos) /*!< 0x00000200 */\r\n#define ADC_SMPR2_SMP3_1   (0x2U << ADC_SMPR2_SMP3_Pos) /*!< 0x00000400 */\r\n#define ADC_SMPR2_SMP3_2   (0x4U << ADC_SMPR2_SMP3_Pos) /*!< 0x00000800 */\r\n\r\n#define ADC_SMPR2_SMP4_Pos (12U)\r\n#define ADC_SMPR2_SMP4_Msk (0x7U << ADC_SMPR2_SMP4_Pos) /*!< 0x00007000 */\r\n#define ADC_SMPR2_SMP4     ADC_SMPR2_SMP4_Msk           /*!< ADC channel 4 sampling time selection  */\r\n#define ADC_SMPR2_SMP4_0   (0x1U << ADC_SMPR2_SMP4_Pos) /*!< 0x00001000 */\r\n#define ADC_SMPR2_SMP4_1   (0x2U << ADC_SMPR2_SMP4_Pos) /*!< 0x00002000 */\r\n#define ADC_SMPR2_SMP4_2   (0x4U << ADC_SMPR2_SMP4_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_SMPR2_SMP5_Pos (15U)\r\n#define ADC_SMPR2_SMP5_Msk (0x7U << ADC_SMPR2_SMP5_Pos) /*!< 0x00038000 */\r\n#define ADC_SMPR2_SMP5     ADC_SMPR2_SMP5_Msk           /*!< ADC channel 5 sampling time selection  */\r\n#define ADC_SMPR2_SMP5_0   (0x1U << ADC_SMPR2_SMP5_Pos) /*!< 0x00008000 */\r\n#define ADC_SMPR2_SMP5_1   (0x2U << ADC_SMPR2_SMP5_Pos) /*!< 0x00010000 */\r\n#define ADC_SMPR2_SMP5_2   (0x4U << ADC_SMPR2_SMP5_Pos) /*!< 0x00020000 */\r\n\r\n#define ADC_SMPR2_SMP6_Pos (18U)\r\n#define ADC_SMPR2_SMP6_Msk (0x7U << ADC_SMPR2_SMP6_Pos) /*!< 0x001C0000 */\r\n#define ADC_SMPR2_SMP6     ADC_SMPR2_SMP6_Msk           /*!< ADC channel 6 sampling time selection  */\r\n#define ADC_SMPR2_SMP6_0   (0x1U << ADC_SMPR2_SMP6_Pos) /*!< 0x00040000 */\r\n#define ADC_SMPR2_SMP6_1   (0x2U << ADC_SMPR2_SMP6_Pos) /*!< 0x00080000 */\r\n#define ADC_SMPR2_SMP6_2   (0x4U << ADC_SMPR2_SMP6_Pos) /*!< 0x00100000 */\r\n\r\n#define ADC_SMPR2_SMP7_Pos (21U)\r\n#define ADC_SMPR2_SMP7_Msk (0x7U << ADC_SMPR2_SMP7_Pos) /*!< 0x00E00000 */\r\n#define ADC_SMPR2_SMP7     ADC_SMPR2_SMP7_Msk           /*!< ADC channel 7 sampling time selection  */\r\n#define ADC_SMPR2_SMP7_0   (0x1U << ADC_SMPR2_SMP7_Pos) /*!< 0x00200000 */\r\n#define ADC_SMPR2_SMP7_1   (0x2U << ADC_SMPR2_SMP7_Pos) /*!< 0x00400000 */\r\n#define ADC_SMPR2_SMP7_2   (0x4U << ADC_SMPR2_SMP7_Pos) /*!< 0x00800000 */\r\n\r\n#define ADC_SMPR2_SMP8_Pos (24U)\r\n#define ADC_SMPR2_SMP8_Msk (0x7U << ADC_SMPR2_SMP8_Pos) /*!< 0x07000000 */\r\n#define ADC_SMPR2_SMP8     ADC_SMPR2_SMP8_Msk           /*!< ADC channel 8 sampling time selection  */\r\n#define ADC_SMPR2_SMP8_0   (0x1U << ADC_SMPR2_SMP8_Pos) /*!< 0x01000000 */\r\n#define ADC_SMPR2_SMP8_1   (0x2U << ADC_SMPR2_SMP8_Pos) /*!< 0x02000000 */\r\n#define ADC_SMPR2_SMP8_2   (0x4U << ADC_SMPR2_SMP8_Pos) /*!< 0x04000000 */\r\n\r\n#define ADC_SMPR2_SMP9_Pos (27U)\r\n#define ADC_SMPR2_SMP9_Msk (0x7U << ADC_SMPR2_SMP9_Pos) /*!< 0x38000000 */\r\n#define ADC_SMPR2_SMP9     ADC_SMPR2_SMP9_Msk           /*!< ADC channel 9 sampling time selection  */\r\n#define ADC_SMPR2_SMP9_0   (0x1U << ADC_SMPR2_SMP9_Pos) /*!< 0x08000000 */\r\n#define ADC_SMPR2_SMP9_1   (0x2U << ADC_SMPR2_SMP9_Pos) /*!< 0x10000000 */\r\n#define ADC_SMPR2_SMP9_2   (0x4U << ADC_SMPR2_SMP9_Pos) /*!< 0x20000000 */\r\n\r\n/******************  Bit definition for ADC_JOFR1 register  *******************/\r\n#define ADC_JOFR1_JOFFSET1_Pos (0U)\r\n#define ADC_JOFR1_JOFFSET1_Msk (0xFFFU << ADC_JOFR1_JOFFSET1_Pos) /*!< 0x00000FFF */\r\n#define ADC_JOFR1_JOFFSET1     ADC_JOFR1_JOFFSET1_Msk             /*!< ADC group injected sequencer rank 1 offset value */\r\n\r\n/******************  Bit definition for ADC_JOFR2 register  *******************/\r\n#define ADC_JOFR2_JOFFSET2_Pos (0U)\r\n#define ADC_JOFR2_JOFFSET2_Msk (0xFFFU << ADC_JOFR2_JOFFSET2_Pos) /*!< 0x00000FFF */\r\n#define ADC_JOFR2_JOFFSET2     ADC_JOFR2_JOFFSET2_Msk             /*!< ADC group injected sequencer rank 2 offset value */\r\n\r\n/******************  Bit definition for ADC_JOFR3 register  *******************/\r\n#define ADC_JOFR3_JOFFSET3_Pos (0U)\r\n#define ADC_JOFR3_JOFFSET3_Msk (0xFFFU << ADC_JOFR3_JOFFSET3_Pos) /*!< 0x00000FFF */\r\n#define ADC_JOFR3_JOFFSET3     ADC_JOFR3_JOFFSET3_Msk             /*!< ADC group injected sequencer rank 3 offset value */\r\n\r\n/******************  Bit definition for ADC_JOFR4 register  *******************/\r\n#define ADC_JOFR4_JOFFSET4_Pos (0U)\r\n#define ADC_JOFR4_JOFFSET4_Msk (0xFFFU << ADC_JOFR4_JOFFSET4_Pos) /*!< 0x00000FFF */\r\n#define ADC_JOFR4_JOFFSET4     ADC_JOFR4_JOFFSET4_Msk             /*!< ADC group injected sequencer rank 4 offset value */\r\n\r\n/*******************  Bit definition for ADC_HTR register  ********************/\r\n#define ADC_HTR_HT_Pos (0U)\r\n#define ADC_HTR_HT_Msk (0xFFFU << ADC_HTR_HT_Pos) /*!< 0x00000FFF */\r\n#define ADC_HTR_HT     ADC_HTR_HT_Msk             /*!< ADC analog watchdog 1 threshold high */\r\n\r\n/*******************  Bit definition for ADC_LTR register  ********************/\r\n#define ADC_LTR_LT_Pos (0U)\r\n#define ADC_LTR_LT_Msk (0xFFFU << ADC_LTR_LT_Pos) /*!< 0x00000FFF */\r\n#define ADC_LTR_LT     ADC_LTR_LT_Msk             /*!< ADC analog watchdog 1 threshold low */\r\n\r\n/*******************  Bit definition for ADC_SQR1 register  *******************/\r\n#define ADC_SQR1_SQ13_Pos (0U)\r\n#define ADC_SQR1_SQ13_Msk (0x1FU << ADC_SQR1_SQ13_Pos) /*!< 0x0000001F */\r\n#define ADC_SQR1_SQ13     ADC_SQR1_SQ13_Msk            /*!< ADC group regular sequencer rank 13 */\r\n#define ADC_SQR1_SQ13_0   (0x01U << ADC_SQR1_SQ13_Pos) /*!< 0x00000001 */\r\n#define ADC_SQR1_SQ13_1   (0x02U << ADC_SQR1_SQ13_Pos) /*!< 0x00000002 */\r\n#define ADC_SQR1_SQ13_2   (0x04U << ADC_SQR1_SQ13_Pos) /*!< 0x00000004 */\r\n#define ADC_SQR1_SQ13_3   (0x08U << ADC_SQR1_SQ13_Pos) /*!< 0x00000008 */\r\n#define ADC_SQR1_SQ13_4   (0x10U << ADC_SQR1_SQ13_Pos) /*!< 0x00000010 */\r\n\r\n#define ADC_SQR1_SQ14_Pos (5U)\r\n#define ADC_SQR1_SQ14_Msk (0x1FU << ADC_SQR1_SQ14_Pos) /*!< 0x000003E0 */\r\n#define ADC_SQR1_SQ14     ADC_SQR1_SQ14_Msk            /*!< ADC group regular sequencer rank 14 */\r\n#define ADC_SQR1_SQ14_0   (0x01U << ADC_SQR1_SQ14_Pos) /*!< 0x00000020 */\r\n#define ADC_SQR1_SQ14_1   (0x02U << ADC_SQR1_SQ14_Pos) /*!< 0x00000040 */\r\n#define ADC_SQR1_SQ14_2   (0x04U << ADC_SQR1_SQ14_Pos) /*!< 0x00000080 */\r\n#define ADC_SQR1_SQ14_3   (0x08U << ADC_SQR1_SQ14_Pos) /*!< 0x00000100 */\r\n#define ADC_SQR1_SQ14_4   (0x10U << ADC_SQR1_SQ14_Pos) /*!< 0x00000200 */\r\n\r\n#define ADC_SQR1_SQ15_Pos (10U)\r\n#define ADC_SQR1_SQ15_Msk (0x1FU << ADC_SQR1_SQ15_Pos) /*!< 0x00007C00 */\r\n#define ADC_SQR1_SQ15     ADC_SQR1_SQ15_Msk            /*!< ADC group regular sequencer rank 15 */\r\n#define ADC_SQR1_SQ15_0   (0x01U << ADC_SQR1_SQ15_Pos) /*!< 0x00000400 */\r\n#define ADC_SQR1_SQ15_1   (0x02U << ADC_SQR1_SQ15_Pos) /*!< 0x00000800 */\r\n#define ADC_SQR1_SQ15_2   (0x04U << ADC_SQR1_SQ15_Pos) /*!< 0x00001000 */\r\n#define ADC_SQR1_SQ15_3   (0x08U << ADC_SQR1_SQ15_Pos) /*!< 0x00002000 */\r\n#define ADC_SQR1_SQ15_4   (0x10U << ADC_SQR1_SQ15_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_SQR1_SQ16_Pos (15U)\r\n#define ADC_SQR1_SQ16_Msk (0x1FU << ADC_SQR1_SQ16_Pos) /*!< 0x000F8000 */\r\n#define ADC_SQR1_SQ16     ADC_SQR1_SQ16_Msk            /*!< ADC group regular sequencer rank 16 */\r\n#define ADC_SQR1_SQ16_0   (0x01U << ADC_SQR1_SQ16_Pos) /*!< 0x00008000 */\r\n#define ADC_SQR1_SQ16_1   (0x02U << ADC_SQR1_SQ16_Pos) /*!< 0x00010000 */\r\n#define ADC_SQR1_SQ16_2   (0x04U << ADC_SQR1_SQ16_Pos) /*!< 0x00020000 */\r\n#define ADC_SQR1_SQ16_3   (0x08U << ADC_SQR1_SQ16_Pos) /*!< 0x00040000 */\r\n#define ADC_SQR1_SQ16_4   (0x10U << ADC_SQR1_SQ16_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_SQR1_L_Pos (20U)\r\n#define ADC_SQR1_L_Msk (0xFU << ADC_SQR1_L_Pos) /*!< 0x00F00000 */\r\n#define ADC_SQR1_L     ADC_SQR1_L_Msk           /*!< ADC group regular sequencer scan length */\r\n#define ADC_SQR1_L_0   (0x1U << ADC_SQR1_L_Pos) /*!< 0x00100000 */\r\n#define ADC_SQR1_L_1   (0x2U << ADC_SQR1_L_Pos) /*!< 0x00200000 */\r\n#define ADC_SQR1_L_2   (0x4U << ADC_SQR1_L_Pos) /*!< 0x00400000 */\r\n#define ADC_SQR1_L_3   (0x8U << ADC_SQR1_L_Pos) /*!< 0x00800000 */\r\n\r\n/*******************  Bit definition for ADC_SQR2 register  *******************/\r\n#define ADC_SQR2_SQ7_Pos (0U)\r\n#define ADC_SQR2_SQ7_Msk (0x1FU << ADC_SQR2_SQ7_Pos) /*!< 0x0000001F */\r\n#define ADC_SQR2_SQ7     ADC_SQR2_SQ7_Msk            /*!< ADC group regular sequencer rank 7 */\r\n#define ADC_SQR2_SQ7_0   (0x01U << ADC_SQR2_SQ7_Pos) /*!< 0x00000001 */\r\n#define ADC_SQR2_SQ7_1   (0x02U << ADC_SQR2_SQ7_Pos) /*!< 0x00000002 */\r\n#define ADC_SQR2_SQ7_2   (0x04U << ADC_SQR2_SQ7_Pos) /*!< 0x00000004 */\r\n#define ADC_SQR2_SQ7_3   (0x08U << ADC_SQR2_SQ7_Pos) /*!< 0x00000008 */\r\n#define ADC_SQR2_SQ7_4   (0x10U << ADC_SQR2_SQ7_Pos) /*!< 0x00000010 */\r\n\r\n#define ADC_SQR2_SQ8_Pos (5U)\r\n#define ADC_SQR2_SQ8_Msk (0x1FU << ADC_SQR2_SQ8_Pos) /*!< 0x000003E0 */\r\n#define ADC_SQR2_SQ8     ADC_SQR2_SQ8_Msk            /*!< ADC group regular sequencer rank 8 */\r\n#define ADC_SQR2_SQ8_0   (0x01U << ADC_SQR2_SQ8_Pos) /*!< 0x00000020 */\r\n#define ADC_SQR2_SQ8_1   (0x02U << ADC_SQR2_SQ8_Pos) /*!< 0x00000040 */\r\n#define ADC_SQR2_SQ8_2   (0x04U << ADC_SQR2_SQ8_Pos) /*!< 0x00000080 */\r\n#define ADC_SQR2_SQ8_3   (0x08U << ADC_SQR2_SQ8_Pos) /*!< 0x00000100 */\r\n#define ADC_SQR2_SQ8_4   (0x10U << ADC_SQR2_SQ8_Pos) /*!< 0x00000200 */\r\n\r\n#define ADC_SQR2_SQ9_Pos (10U)\r\n#define ADC_SQR2_SQ9_Msk (0x1FU << ADC_SQR2_SQ9_Pos) /*!< 0x00007C00 */\r\n#define ADC_SQR2_SQ9     ADC_SQR2_SQ9_Msk            /*!< ADC group regular sequencer rank 9 */\r\n#define ADC_SQR2_SQ9_0   (0x01U << ADC_SQR2_SQ9_Pos) /*!< 0x00000400 */\r\n#define ADC_SQR2_SQ9_1   (0x02U << ADC_SQR2_SQ9_Pos) /*!< 0x00000800 */\r\n#define ADC_SQR2_SQ9_2   (0x04U << ADC_SQR2_SQ9_Pos) /*!< 0x00001000 */\r\n#define ADC_SQR2_SQ9_3   (0x08U << ADC_SQR2_SQ9_Pos) /*!< 0x00002000 */\r\n#define ADC_SQR2_SQ9_4   (0x10U << ADC_SQR2_SQ9_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_SQR2_SQ10_Pos (15U)\r\n#define ADC_SQR2_SQ10_Msk (0x1FU << ADC_SQR2_SQ10_Pos) /*!< 0x000F8000 */\r\n#define ADC_SQR2_SQ10     ADC_SQR2_SQ10_Msk            /*!< ADC group regular sequencer rank 10 */\r\n#define ADC_SQR2_SQ10_0   (0x01U << ADC_SQR2_SQ10_Pos) /*!< 0x00008000 */\r\n#define ADC_SQR2_SQ10_1   (0x02U << ADC_SQR2_SQ10_Pos) /*!< 0x00010000 */\r\n#define ADC_SQR2_SQ10_2   (0x04U << ADC_SQR2_SQ10_Pos) /*!< 0x00020000 */\r\n#define ADC_SQR2_SQ10_3   (0x08U << ADC_SQR2_SQ10_Pos) /*!< 0x00040000 */\r\n#define ADC_SQR2_SQ10_4   (0x10U << ADC_SQR2_SQ10_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_SQR2_SQ11_Pos (20U)\r\n#define ADC_SQR2_SQ11_Msk (0x1FU << ADC_SQR2_SQ11_Pos) /*!< 0x01F00000 */\r\n#define ADC_SQR2_SQ11     ADC_SQR2_SQ11_Msk            /*!< ADC group regular sequencer rank 1 */\r\n#define ADC_SQR2_SQ11_0   (0x01U << ADC_SQR2_SQ11_Pos) /*!< 0x00100000 */\r\n#define ADC_SQR2_SQ11_1   (0x02U << ADC_SQR2_SQ11_Pos) /*!< 0x00200000 */\r\n#define ADC_SQR2_SQ11_2   (0x04U << ADC_SQR2_SQ11_Pos) /*!< 0x00400000 */\r\n#define ADC_SQR2_SQ11_3   (0x08U << ADC_SQR2_SQ11_Pos) /*!< 0x00800000 */\r\n#define ADC_SQR2_SQ11_4   (0x10U << ADC_SQR2_SQ11_Pos) /*!< 0x01000000 */\r\n\r\n#define ADC_SQR2_SQ12_Pos (25U)\r\n#define ADC_SQR2_SQ12_Msk (0x1FU << ADC_SQR2_SQ12_Pos) /*!< 0x3E000000 */\r\n#define ADC_SQR2_SQ12     ADC_SQR2_SQ12_Msk            /*!< ADC group regular sequencer rank 12 */\r\n#define ADC_SQR2_SQ12_0   (0x01U << ADC_SQR2_SQ12_Pos) /*!< 0x02000000 */\r\n#define ADC_SQR2_SQ12_1   (0x02U << ADC_SQR2_SQ12_Pos) /*!< 0x04000000 */\r\n#define ADC_SQR2_SQ12_2   (0x04U << ADC_SQR2_SQ12_Pos) /*!< 0x08000000 */\r\n#define ADC_SQR2_SQ12_3   (0x08U << ADC_SQR2_SQ12_Pos) /*!< 0x10000000 */\r\n#define ADC_SQR2_SQ12_4   (0x10U << ADC_SQR2_SQ12_Pos) /*!< 0x20000000 */\r\n\r\n/*******************  Bit definition for ADC_SQR3 register  *******************/\r\n#define ADC_SQR3_SQ1_Pos (0U)\r\n#define ADC_SQR3_SQ1_Msk (0x1FU << ADC_SQR3_SQ1_Pos) /*!< 0x0000001F */\r\n#define ADC_SQR3_SQ1     ADC_SQR3_SQ1_Msk            /*!< ADC group regular sequencer rank 1 */\r\n#define ADC_SQR3_SQ1_0   (0x01U << ADC_SQR3_SQ1_Pos) /*!< 0x00000001 */\r\n#define ADC_SQR3_SQ1_1   (0x02U << ADC_SQR3_SQ1_Pos) /*!< 0x00000002 */\r\n#define ADC_SQR3_SQ1_2   (0x04U << ADC_SQR3_SQ1_Pos) /*!< 0x00000004 */\r\n#define ADC_SQR3_SQ1_3   (0x08U << ADC_SQR3_SQ1_Pos) /*!< 0x00000008 */\r\n#define ADC_SQR3_SQ1_4   (0x10U << ADC_SQR3_SQ1_Pos) /*!< 0x00000010 */\r\n\r\n#define ADC_SQR3_SQ2_Pos (5U)\r\n#define ADC_SQR3_SQ2_Msk (0x1FU << ADC_SQR3_SQ2_Pos) /*!< 0x000003E0 */\r\n#define ADC_SQR3_SQ2     ADC_SQR3_SQ2_Msk            /*!< ADC group regular sequencer rank 2 */\r\n#define ADC_SQR3_SQ2_0   (0x01U << ADC_SQR3_SQ2_Pos) /*!< 0x00000020 */\r\n#define ADC_SQR3_SQ2_1   (0x02U << ADC_SQR3_SQ2_Pos) /*!< 0x00000040 */\r\n#define ADC_SQR3_SQ2_2   (0x04U << ADC_SQR3_SQ2_Pos) /*!< 0x00000080 */\r\n#define ADC_SQR3_SQ2_3   (0x08U << ADC_SQR3_SQ2_Pos) /*!< 0x00000100 */\r\n#define ADC_SQR3_SQ2_4   (0x10U << ADC_SQR3_SQ2_Pos) /*!< 0x00000200 */\r\n\r\n#define ADC_SQR3_SQ3_Pos (10U)\r\n#define ADC_SQR3_SQ3_Msk (0x1FU << ADC_SQR3_SQ3_Pos) /*!< 0x00007C00 */\r\n#define ADC_SQR3_SQ3     ADC_SQR3_SQ3_Msk            /*!< ADC group regular sequencer rank 3 */\r\n#define ADC_SQR3_SQ3_0   (0x01U << ADC_SQR3_SQ3_Pos) /*!< 0x00000400 */\r\n#define ADC_SQR3_SQ3_1   (0x02U << ADC_SQR3_SQ3_Pos) /*!< 0x00000800 */\r\n#define ADC_SQR3_SQ3_2   (0x04U << ADC_SQR3_SQ3_Pos) /*!< 0x00001000 */\r\n#define ADC_SQR3_SQ3_3   (0x08U << ADC_SQR3_SQ3_Pos) /*!< 0x00002000 */\r\n#define ADC_SQR3_SQ3_4   (0x10U << ADC_SQR3_SQ3_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_SQR3_SQ4_Pos (15U)\r\n#define ADC_SQR3_SQ4_Msk (0x1FU << ADC_SQR3_SQ4_Pos) /*!< 0x000F8000 */\r\n#define ADC_SQR3_SQ4     ADC_SQR3_SQ4_Msk            /*!< ADC group regular sequencer rank 4 */\r\n#define ADC_SQR3_SQ4_0   (0x01U << ADC_SQR3_SQ4_Pos) /*!< 0x00008000 */\r\n#define ADC_SQR3_SQ4_1   (0x02U << ADC_SQR3_SQ4_Pos) /*!< 0x00010000 */\r\n#define ADC_SQR3_SQ4_2   (0x04U << ADC_SQR3_SQ4_Pos) /*!< 0x00020000 */\r\n#define ADC_SQR3_SQ4_3   (0x08U << ADC_SQR3_SQ4_Pos) /*!< 0x00040000 */\r\n#define ADC_SQR3_SQ4_4   (0x10U << ADC_SQR3_SQ4_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_SQR3_SQ5_Pos (20U)\r\n#define ADC_SQR3_SQ5_Msk (0x1FU << ADC_SQR3_SQ5_Pos) /*!< 0x01F00000 */\r\n#define ADC_SQR3_SQ5     ADC_SQR3_SQ5_Msk            /*!< ADC group regular sequencer rank 5 */\r\n#define ADC_SQR3_SQ5_0   (0x01U << ADC_SQR3_SQ5_Pos) /*!< 0x00100000 */\r\n#define ADC_SQR3_SQ5_1   (0x02U << ADC_SQR3_SQ5_Pos) /*!< 0x00200000 */\r\n#define ADC_SQR3_SQ5_2   (0x04U << ADC_SQR3_SQ5_Pos) /*!< 0x00400000 */\r\n#define ADC_SQR3_SQ5_3   (0x08U << ADC_SQR3_SQ5_Pos) /*!< 0x00800000 */\r\n#define ADC_SQR3_SQ5_4   (0x10U << ADC_SQR3_SQ5_Pos) /*!< 0x01000000 */\r\n\r\n#define ADC_SQR3_SQ6_Pos (25U)\r\n#define ADC_SQR3_SQ6_Msk (0x1FU << ADC_SQR3_SQ6_Pos) /*!< 0x3E000000 */\r\n#define ADC_SQR3_SQ6     ADC_SQR3_SQ6_Msk            /*!< ADC group regular sequencer rank 6 */\r\n#define ADC_SQR3_SQ6_0   (0x01U << ADC_SQR3_SQ6_Pos) /*!< 0x02000000 */\r\n#define ADC_SQR3_SQ6_1   (0x02U << ADC_SQR3_SQ6_Pos) /*!< 0x04000000 */\r\n#define ADC_SQR3_SQ6_2   (0x04U << ADC_SQR3_SQ6_Pos) /*!< 0x08000000 */\r\n#define ADC_SQR3_SQ6_3   (0x08U << ADC_SQR3_SQ6_Pos) /*!< 0x10000000 */\r\n#define ADC_SQR3_SQ6_4   (0x10U << ADC_SQR3_SQ6_Pos) /*!< 0x20000000 */\r\n\r\n/*******************  Bit definition for ADC_JSQR register  *******************/\r\n#define ADC_JSQR_JSQ1_Pos (0U)\r\n#define ADC_JSQR_JSQ1_Msk (0x1FU << ADC_JSQR_JSQ1_Pos) /*!< 0x0000001F */\r\n#define ADC_JSQR_JSQ1     ADC_JSQR_JSQ1_Msk            /*!< ADC group injected sequencer rank 1 */\r\n#define ADC_JSQR_JSQ1_0   (0x01U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000001 */\r\n#define ADC_JSQR_JSQ1_1   (0x02U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000002 */\r\n#define ADC_JSQR_JSQ1_2   (0x04U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000004 */\r\n#define ADC_JSQR_JSQ1_3   (0x08U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000008 */\r\n#define ADC_JSQR_JSQ1_4   (0x10U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000010 */\r\n\r\n#define ADC_JSQR_JSQ2_Pos (5U)\r\n#define ADC_JSQR_JSQ2_Msk (0x1FU << ADC_JSQR_JSQ2_Pos) /*!< 0x000003E0 */\r\n#define ADC_JSQR_JSQ2     ADC_JSQR_JSQ2_Msk            /*!< ADC group injected sequencer rank 2 */\r\n#define ADC_JSQR_JSQ2_0   (0x01U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000020 */\r\n#define ADC_JSQR_JSQ2_1   (0x02U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000040 */\r\n#define ADC_JSQR_JSQ2_2   (0x04U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000080 */\r\n#define ADC_JSQR_JSQ2_3   (0x08U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000100 */\r\n#define ADC_JSQR_JSQ2_4   (0x10U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000200 */\r\n\r\n#define ADC_JSQR_JSQ3_Pos (10U)\r\n#define ADC_JSQR_JSQ3_Msk (0x1FU << ADC_JSQR_JSQ3_Pos) /*!< 0x00007C00 */\r\n#define ADC_JSQR_JSQ3     ADC_JSQR_JSQ3_Msk            /*!< ADC group injected sequencer rank 3 */\r\n#define ADC_JSQR_JSQ3_0   (0x01U << ADC_JSQR_JSQ3_Pos) /*!< 0x00000400 */\r\n#define ADC_JSQR_JSQ3_1   (0x02U << ADC_JSQR_JSQ3_Pos) /*!< 0x00000800 */\r\n#define ADC_JSQR_JSQ3_2   (0x04U << ADC_JSQR_JSQ3_Pos) /*!< 0x00001000 */\r\n#define ADC_JSQR_JSQ3_3   (0x08U << ADC_JSQR_JSQ3_Pos) /*!< 0x00002000 */\r\n#define ADC_JSQR_JSQ3_4   (0x10U << ADC_JSQR_JSQ3_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_JSQR_JSQ4_Pos (15U)\r\n#define ADC_JSQR_JSQ4_Msk (0x1FU << ADC_JSQR_JSQ4_Pos) /*!< 0x000F8000 */\r\n#define ADC_JSQR_JSQ4     ADC_JSQR_JSQ4_Msk            /*!< ADC group injected sequencer rank 4 */\r\n#define ADC_JSQR_JSQ4_0   (0x01U << ADC_JSQR_JSQ4_Pos) /*!< 0x00008000 */\r\n#define ADC_JSQR_JSQ4_1   (0x02U << ADC_JSQR_JSQ4_Pos) /*!< 0x00010000 */\r\n#define ADC_JSQR_JSQ4_2   (0x04U << ADC_JSQR_JSQ4_Pos) /*!< 0x00020000 */\r\n#define ADC_JSQR_JSQ4_3   (0x08U << ADC_JSQR_JSQ4_Pos) /*!< 0x00040000 */\r\n#define ADC_JSQR_JSQ4_4   (0x10U << ADC_JSQR_JSQ4_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_JSQR_JL_Pos (20U)\r\n#define ADC_JSQR_JL_Msk (0x3U << ADC_JSQR_JL_Pos) /*!< 0x00300000 */\r\n#define ADC_JSQR_JL     ADC_JSQR_JL_Msk           /*!< ADC group injected sequencer scan length */\r\n#define ADC_JSQR_JL_0   (0x1U << ADC_JSQR_JL_Pos) /*!< 0x00100000 */\r\n#define ADC_JSQR_JL_1   (0x2U << ADC_JSQR_JL_Pos) /*!< 0x00200000 */\r\n\r\n/*******************  Bit definition for ADC_JDR1 register  *******************/\r\n#define ADC_JDR1_JDATA_Pos (0U)\r\n#define ADC_JDR1_JDATA_Msk (0xFFFFU << ADC_JDR1_JDATA_Pos) /*!< 0x0000FFFF */\r\n#define ADC_JDR1_JDATA     ADC_JDR1_JDATA_Msk              /*!< ADC group injected sequencer rank 1 conversion data */\r\n\r\n/*******************  Bit definition for ADC_JDR2 register  *******************/\r\n#define ADC_JDR2_JDATA_Pos (0U)\r\n#define ADC_JDR2_JDATA_Msk (0xFFFFU << ADC_JDR2_JDATA_Pos) /*!< 0x0000FFFF */\r\n#define ADC_JDR2_JDATA     ADC_JDR2_JDATA_Msk              /*!< ADC group injected sequencer rank 2 conversion data */\r\n\r\n/*******************  Bit definition for ADC_JDR3 register  *******************/\r\n#define ADC_JDR3_JDATA_Pos (0U)\r\n#define ADC_JDR3_JDATA_Msk (0xFFFFU << ADC_JDR3_JDATA_Pos) /*!< 0x0000FFFF */\r\n#define ADC_JDR3_JDATA     ADC_JDR3_JDATA_Msk              /*!< ADC group injected sequencer rank 3 conversion data */\r\n\r\n/*******************  Bit definition for ADC_JDR4 register  *******************/\r\n#define ADC_JDR4_JDATA_Pos (0U)\r\n#define ADC_JDR4_JDATA_Msk (0xFFFFU << ADC_JDR4_JDATA_Pos) /*!< 0x0000FFFF */\r\n#define ADC_JDR4_JDATA     ADC_JDR4_JDATA_Msk              /*!< ADC group injected sequencer rank 4 conversion data */\r\n\r\n/********************  Bit definition for ADC_DR register  ********************/\r\n#define ADC_DR_DATA_Pos     (0U)\r\n#define ADC_DR_DATA_Msk     (0xFFFFU << ADC_DR_DATA_Pos) /*!< 0x0000FFFF */\r\n#define ADC_DR_DATA         ADC_DR_DATA_Msk              /*!< ADC group regular conversion data */\r\n#define ADC_DR_ADC2DATA_Pos (16U)\r\n#define ADC_DR_ADC2DATA_Msk (0xFFFFU << ADC_DR_ADC2DATA_Pos) /*!< 0xFFFF0000 */\r\n#define ADC_DR_ADC2DATA     ADC_DR_ADC2DATA_Msk              /*!< ADC group regular conversion data for ADC slave, in multimode */\r\n\r\n/*****************************************************************************/\r\n/*                                                                           */\r\n/*                               Timers (TIM)                                */\r\n/*                                                                           */\r\n/*****************************************************************************/\r\n/*******************  Bit definition for TIM_CR1 register  *******************/\r\n#define TIM_CR1_CEN_Pos  (0U)\r\n#define TIM_CR1_CEN_Msk  (0x1U << TIM_CR1_CEN_Pos) /*!< 0x00000001 */\r\n#define TIM_CR1_CEN      TIM_CR1_CEN_Msk           /*!<Counter enable */\r\n#define TIM_CR1_UDIS_Pos (1U)\r\n#define TIM_CR1_UDIS_Msk (0x1U << TIM_CR1_UDIS_Pos) /*!< 0x00000002 */\r\n#define TIM_CR1_UDIS     TIM_CR1_UDIS_Msk           /*!<Update disable */\r\n#define TIM_CR1_URS_Pos  (2U)\r\n#define TIM_CR1_URS_Msk  (0x1U << TIM_CR1_URS_Pos) /*!< 0x00000004 */\r\n#define TIM_CR1_URS      TIM_CR1_URS_Msk           /*!<Update request source */\r\n#define TIM_CR1_OPM_Pos  (3U)\r\n#define TIM_CR1_OPM_Msk  (0x1U << TIM_CR1_OPM_Pos) /*!< 0x00000008 */\r\n#define TIM_CR1_OPM      TIM_CR1_OPM_Msk           /*!<One pulse mode */\r\n#define TIM_CR1_DIR_Pos  (4U)\r\n#define TIM_CR1_DIR_Msk  (0x1U << TIM_CR1_DIR_Pos) /*!< 0x00000010 */\r\n#define TIM_CR1_DIR      TIM_CR1_DIR_Msk           /*!<Direction */\r\n\r\n#define TIM_CR1_CMS_Pos (5U)\r\n#define TIM_CR1_CMS_Msk (0x3U << TIM_CR1_CMS_Pos) /*!< 0x00000060 */\r\n#define TIM_CR1_CMS     TIM_CR1_CMS_Msk           /*!<CMS[1:0] bits (Center-aligned mode selection) */\r\n#define TIM_CR1_CMS_0   (0x1U << TIM_CR1_CMS_Pos) /*!< 0x00000020 */\r\n#define TIM_CR1_CMS_1   (0x2U << TIM_CR1_CMS_Pos) /*!< 0x00000040 */\r\n\r\n#define TIM_CR1_ARPE_Pos (7U)\r\n#define TIM_CR1_ARPE_Msk (0x1U << TIM_CR1_ARPE_Pos) /*!< 0x00000080 */\r\n#define TIM_CR1_ARPE     TIM_CR1_ARPE_Msk           /*!<Auto-reload preload enable */\r\n\r\n#define TIM_CR1_CKD_Pos (8U)\r\n#define TIM_CR1_CKD_Msk (0x3U << TIM_CR1_CKD_Pos) /*!< 0x00000300 */\r\n#define TIM_CR1_CKD     TIM_CR1_CKD_Msk           /*!<CKD[1:0] bits (clock division) */\r\n#define TIM_CR1_CKD_0   (0x1U << TIM_CR1_CKD_Pos) /*!< 0x00000100 */\r\n#define TIM_CR1_CKD_1   (0x2U << TIM_CR1_CKD_Pos) /*!< 0x00000200 */\r\n\r\n/*******************  Bit definition for TIM_CR2 register  *******************/\r\n#define TIM_CR2_CCPC_Pos (0U)\r\n#define TIM_CR2_CCPC_Msk (0x1U << TIM_CR2_CCPC_Pos) /*!< 0x00000001 */\r\n#define TIM_CR2_CCPC     TIM_CR2_CCPC_Msk           /*!<Capture/Compare Preloaded Control */\r\n#define TIM_CR2_CCUS_Pos (2U)\r\n#define TIM_CR2_CCUS_Msk (0x1U << TIM_CR2_CCUS_Pos) /*!< 0x00000004 */\r\n#define TIM_CR2_CCUS     TIM_CR2_CCUS_Msk           /*!<Capture/Compare Control Update Selection */\r\n#define TIM_CR2_CCDS_Pos (3U)\r\n#define TIM_CR2_CCDS_Msk (0x1U << TIM_CR2_CCDS_Pos) /*!< 0x00000008 */\r\n#define TIM_CR2_CCDS     TIM_CR2_CCDS_Msk           /*!<Capture/Compare DMA Selection */\r\n\r\n#define TIM_CR2_MMS_Pos (4U)\r\n#define TIM_CR2_MMS_Msk (0x7U << TIM_CR2_MMS_Pos) /*!< 0x00000070 */\r\n#define TIM_CR2_MMS     TIM_CR2_MMS_Msk           /*!<MMS[2:0] bits (Master Mode Selection) */\r\n#define TIM_CR2_MMS_0   (0x1U << TIM_CR2_MMS_Pos) /*!< 0x00000010 */\r\n#define TIM_CR2_MMS_1   (0x2U << TIM_CR2_MMS_Pos) /*!< 0x00000020 */\r\n#define TIM_CR2_MMS_2   (0x4U << TIM_CR2_MMS_Pos) /*!< 0x00000040 */\r\n\r\n#define TIM_CR2_TI1S_Pos  (7U)\r\n#define TIM_CR2_TI1S_Msk  (0x1U << TIM_CR2_TI1S_Pos) /*!< 0x00000080 */\r\n#define TIM_CR2_TI1S      TIM_CR2_TI1S_Msk           /*!<TI1 Selection */\r\n#define TIM_CR2_OIS1_Pos  (8U)\r\n#define TIM_CR2_OIS1_Msk  (0x1U << TIM_CR2_OIS1_Pos) /*!< 0x00000100 */\r\n#define TIM_CR2_OIS1      TIM_CR2_OIS1_Msk           /*!<Output Idle state 1 (OC1 output) */\r\n#define TIM_CR2_OIS1N_Pos (9U)\r\n#define TIM_CR2_OIS1N_Msk (0x1U << TIM_CR2_OIS1N_Pos) /*!< 0x00000200 */\r\n#define TIM_CR2_OIS1N     TIM_CR2_OIS1N_Msk           /*!<Output Idle state 1 (OC1N output) */\r\n#define TIM_CR2_OIS2_Pos  (10U)\r\n#define TIM_CR2_OIS2_Msk  (0x1U << TIM_CR2_OIS2_Pos) /*!< 0x00000400 */\r\n#define TIM_CR2_OIS2      TIM_CR2_OIS2_Msk           /*!<Output Idle state 2 (OC2 output) */\r\n#define TIM_CR2_OIS2N_Pos (11U)\r\n#define TIM_CR2_OIS2N_Msk (0x1U << TIM_CR2_OIS2N_Pos) /*!< 0x00000800 */\r\n#define TIM_CR2_OIS2N     TIM_CR2_OIS2N_Msk           /*!<Output Idle state 2 (OC2N output) */\r\n#define TIM_CR2_OIS3_Pos  (12U)\r\n#define TIM_CR2_OIS3_Msk  (0x1U << TIM_CR2_OIS3_Pos) /*!< 0x00001000 */\r\n#define TIM_CR2_OIS3      TIM_CR2_OIS3_Msk           /*!<Output Idle state 3 (OC3 output) */\r\n#define TIM_CR2_OIS3N_Pos (13U)\r\n#define TIM_CR2_OIS3N_Msk (0x1U << TIM_CR2_OIS3N_Pos) /*!< 0x00002000 */\r\n#define TIM_CR2_OIS3N     TIM_CR2_OIS3N_Msk           /*!<Output Idle state 3 (OC3N output) */\r\n#define TIM_CR2_OIS4_Pos  (14U)\r\n#define TIM_CR2_OIS4_Msk  (0x1U << TIM_CR2_OIS4_Pos) /*!< 0x00004000 */\r\n#define TIM_CR2_OIS4      TIM_CR2_OIS4_Msk           /*!<Output Idle state 4 (OC4 output) */\r\n\r\n/*******************  Bit definition for TIM_SMCR register  ******************/\r\n#define TIM_SMCR_SMS_Pos (0U)\r\n#define TIM_SMCR_SMS_Msk (0x7U << TIM_SMCR_SMS_Pos) /*!< 0x00000007 */\r\n#define TIM_SMCR_SMS     TIM_SMCR_SMS_Msk           /*!<SMS[2:0] bits (Slave mode selection) */\r\n#define TIM_SMCR_SMS_0   (0x1U << TIM_SMCR_SMS_Pos) /*!< 0x00000001 */\r\n#define TIM_SMCR_SMS_1   (0x2U << TIM_SMCR_SMS_Pos) /*!< 0x00000002 */\r\n#define TIM_SMCR_SMS_2   (0x4U << TIM_SMCR_SMS_Pos) /*!< 0x00000004 */\r\n\r\n#define TIM_SMCR_TS_Pos (4U)\r\n#define TIM_SMCR_TS_Msk (0x7U << TIM_SMCR_TS_Pos) /*!< 0x00000070 */\r\n#define TIM_SMCR_TS     TIM_SMCR_TS_Msk           /*!<TS[2:0] bits (Trigger selection) */\r\n#define TIM_SMCR_TS_0   (0x1U << TIM_SMCR_TS_Pos) /*!< 0x00000010 */\r\n#define TIM_SMCR_TS_1   (0x2U << TIM_SMCR_TS_Pos) /*!< 0x00000020 */\r\n#define TIM_SMCR_TS_2   (0x4U << TIM_SMCR_TS_Pos) /*!< 0x00000040 */\r\n\r\n#define TIM_SMCR_MSM_Pos (7U)\r\n#define TIM_SMCR_MSM_Msk (0x1U << TIM_SMCR_MSM_Pos) /*!< 0x00000080 */\r\n#define TIM_SMCR_MSM     TIM_SMCR_MSM_Msk           /*!<Master/slave mode */\r\n\r\n#define TIM_SMCR_ETF_Pos (8U)\r\n#define TIM_SMCR_ETF_Msk (0xFU << TIM_SMCR_ETF_Pos) /*!< 0x00000F00 */\r\n#define TIM_SMCR_ETF     TIM_SMCR_ETF_Msk           /*!<ETF[3:0] bits (External trigger filter) */\r\n#define TIM_SMCR_ETF_0   (0x1U << TIM_SMCR_ETF_Pos) /*!< 0x00000100 */\r\n#define TIM_SMCR_ETF_1   (0x2U << TIM_SMCR_ETF_Pos) /*!< 0x00000200 */\r\n#define TIM_SMCR_ETF_2   (0x4U << TIM_SMCR_ETF_Pos) /*!< 0x00000400 */\r\n#define TIM_SMCR_ETF_3   (0x8U << TIM_SMCR_ETF_Pos) /*!< 0x00000800 */\r\n\r\n#define TIM_SMCR_ETPS_Pos (12U)\r\n#define TIM_SMCR_ETPS_Msk (0x3U << TIM_SMCR_ETPS_Pos) /*!< 0x00003000 */\r\n#define TIM_SMCR_ETPS     TIM_SMCR_ETPS_Msk           /*!<ETPS[1:0] bits (External trigger prescaler) */\r\n#define TIM_SMCR_ETPS_0   (0x1U << TIM_SMCR_ETPS_Pos) /*!< 0x00001000 */\r\n#define TIM_SMCR_ETPS_1   (0x2U << TIM_SMCR_ETPS_Pos) /*!< 0x00002000 */\r\n\r\n#define TIM_SMCR_ECE_Pos (14U)\r\n#define TIM_SMCR_ECE_Msk (0x1U << TIM_SMCR_ECE_Pos) /*!< 0x00004000 */\r\n#define TIM_SMCR_ECE     TIM_SMCR_ECE_Msk           /*!<External clock enable */\r\n#define TIM_SMCR_ETP_Pos (15U)\r\n#define TIM_SMCR_ETP_Msk (0x1U << TIM_SMCR_ETP_Pos) /*!< 0x00008000 */\r\n#define TIM_SMCR_ETP     TIM_SMCR_ETP_Msk           /*!<External trigger polarity */\r\n\r\n/*******************  Bit definition for TIM_DIER register  ******************/\r\n#define TIM_DIER_UIE_Pos   (0U)\r\n#define TIM_DIER_UIE_Msk   (0x1U << TIM_DIER_UIE_Pos) /*!< 0x00000001 */\r\n#define TIM_DIER_UIE       TIM_DIER_UIE_Msk           /*!<Update interrupt enable */\r\n#define TIM_DIER_CC1IE_Pos (1U)\r\n#define TIM_DIER_CC1IE_Msk (0x1U << TIM_DIER_CC1IE_Pos) /*!< 0x00000002 */\r\n#define TIM_DIER_CC1IE     TIM_DIER_CC1IE_Msk           /*!<Capture/Compare 1 interrupt enable */\r\n#define TIM_DIER_CC2IE_Pos (2U)\r\n#define TIM_DIER_CC2IE_Msk (0x1U << TIM_DIER_CC2IE_Pos) /*!< 0x00000004 */\r\n#define TIM_DIER_CC2IE     TIM_DIER_CC2IE_Msk           /*!<Capture/Compare 2 interrupt enable */\r\n#define TIM_DIER_CC3IE_Pos (3U)\r\n#define TIM_DIER_CC3IE_Msk (0x1U << TIM_DIER_CC3IE_Pos) /*!< 0x00000008 */\r\n#define TIM_DIER_CC3IE     TIM_DIER_CC3IE_Msk           /*!<Capture/Compare 3 interrupt enable */\r\n#define TIM_DIER_CC4IE_Pos (4U)\r\n#define TIM_DIER_CC4IE_Msk (0x1U << TIM_DIER_CC4IE_Pos) /*!< 0x00000010 */\r\n#define TIM_DIER_CC4IE     TIM_DIER_CC4IE_Msk           /*!<Capture/Compare 4 interrupt enable */\r\n#define TIM_DIER_COMIE_Pos (5U)\r\n#define TIM_DIER_COMIE_Msk (0x1U << TIM_DIER_COMIE_Pos) /*!< 0x00000020 */\r\n#define TIM_DIER_COMIE     TIM_DIER_COMIE_Msk           /*!<COM interrupt enable */\r\n#define TIM_DIER_TIE_Pos   (6U)\r\n#define TIM_DIER_TIE_Msk   (0x1U << TIM_DIER_TIE_Pos) /*!< 0x00000040 */\r\n#define TIM_DIER_TIE       TIM_DIER_TIE_Msk           /*!<Trigger interrupt enable */\r\n#define TIM_DIER_BIE_Pos   (7U)\r\n#define TIM_DIER_BIE_Msk   (0x1U << TIM_DIER_BIE_Pos) /*!< 0x00000080 */\r\n#define TIM_DIER_BIE       TIM_DIER_BIE_Msk           /*!<Break interrupt enable */\r\n#define TIM_DIER_UDE_Pos   (8U)\r\n#define TIM_DIER_UDE_Msk   (0x1U << TIM_DIER_UDE_Pos) /*!< 0x00000100 */\r\n#define TIM_DIER_UDE       TIM_DIER_UDE_Msk           /*!<Update DMA request enable */\r\n#define TIM_DIER_CC1DE_Pos (9U)\r\n#define TIM_DIER_CC1DE_Msk (0x1U << TIM_DIER_CC1DE_Pos) /*!< 0x00000200 */\r\n#define TIM_DIER_CC1DE     TIM_DIER_CC1DE_Msk           /*!<Capture/Compare 1 DMA request enable */\r\n#define TIM_DIER_CC2DE_Pos (10U)\r\n#define TIM_DIER_CC2DE_Msk (0x1U << TIM_DIER_CC2DE_Pos) /*!< 0x00000400 */\r\n#define TIM_DIER_CC2DE     TIM_DIER_CC2DE_Msk           /*!<Capture/Compare 2 DMA request enable */\r\n#define TIM_DIER_CC3DE_Pos (11U)\r\n#define TIM_DIER_CC3DE_Msk (0x1U << TIM_DIER_CC3DE_Pos) /*!< 0x00000800 */\r\n#define TIM_DIER_CC3DE     TIM_DIER_CC3DE_Msk           /*!<Capture/Compare 3 DMA request enable */\r\n#define TIM_DIER_CC4DE_Pos (12U)\r\n#define TIM_DIER_CC4DE_Msk (0x1U << TIM_DIER_CC4DE_Pos) /*!< 0x00001000 */\r\n#define TIM_DIER_CC4DE     TIM_DIER_CC4DE_Msk           /*!<Capture/Compare 4 DMA request enable */\r\n#define TIM_DIER_COMDE_Pos (13U)\r\n#define TIM_DIER_COMDE_Msk (0x1U << TIM_DIER_COMDE_Pos) /*!< 0x00002000 */\r\n#define TIM_DIER_COMDE     TIM_DIER_COMDE_Msk           /*!<COM DMA request enable */\r\n#define TIM_DIER_TDE_Pos   (14U)\r\n#define TIM_DIER_TDE_Msk   (0x1U << TIM_DIER_TDE_Pos) /*!< 0x00004000 */\r\n#define TIM_DIER_TDE       TIM_DIER_TDE_Msk           /*!<Trigger DMA request enable */\r\n\r\n/********************  Bit definition for TIM_SR register  *******************/\r\n#define TIM_SR_UIF_Pos   (0U)\r\n#define TIM_SR_UIF_Msk   (0x1U << TIM_SR_UIF_Pos) /*!< 0x00000001 */\r\n#define TIM_SR_UIF       TIM_SR_UIF_Msk           /*!<Update interrupt Flag */\r\n#define TIM_SR_CC1IF_Pos (1U)\r\n#define TIM_SR_CC1IF_Msk (0x1U << TIM_SR_CC1IF_Pos) /*!< 0x00000002 */\r\n#define TIM_SR_CC1IF     TIM_SR_CC1IF_Msk           /*!<Capture/Compare 1 interrupt Flag */\r\n#define TIM_SR_CC2IF_Pos (2U)\r\n#define TIM_SR_CC2IF_Msk (0x1U << TIM_SR_CC2IF_Pos) /*!< 0x00000004 */\r\n#define TIM_SR_CC2IF     TIM_SR_CC2IF_Msk           /*!<Capture/Compare 2 interrupt Flag */\r\n#define TIM_SR_CC3IF_Pos (3U)\r\n#define TIM_SR_CC3IF_Msk (0x1U << TIM_SR_CC3IF_Pos) /*!< 0x00000008 */\r\n#define TIM_SR_CC3IF     TIM_SR_CC3IF_Msk           /*!<Capture/Compare 3 interrupt Flag */\r\n#define TIM_SR_CC4IF_Pos (4U)\r\n#define TIM_SR_CC4IF_Msk (0x1U << TIM_SR_CC4IF_Pos) /*!< 0x00000010 */\r\n#define TIM_SR_CC4IF     TIM_SR_CC4IF_Msk           /*!<Capture/Compare 4 interrupt Flag */\r\n#define TIM_SR_COMIF_Pos (5U)\r\n#define TIM_SR_COMIF_Msk (0x1U << TIM_SR_COMIF_Pos) /*!< 0x00000020 */\r\n#define TIM_SR_COMIF     TIM_SR_COMIF_Msk           /*!<COM interrupt Flag */\r\n#define TIM_SR_TIF_Pos   (6U)\r\n#define TIM_SR_TIF_Msk   (0x1U << TIM_SR_TIF_Pos) /*!< 0x00000040 */\r\n#define TIM_SR_TIF       TIM_SR_TIF_Msk           /*!<Trigger interrupt Flag */\r\n#define TIM_SR_BIF_Pos   (7U)\r\n#define TIM_SR_BIF_Msk   (0x1U << TIM_SR_BIF_Pos) /*!< 0x00000080 */\r\n#define TIM_SR_BIF       TIM_SR_BIF_Msk           /*!<Break interrupt Flag */\r\n#define TIM_SR_CC1OF_Pos (9U)\r\n#define TIM_SR_CC1OF_Msk (0x1U << TIM_SR_CC1OF_Pos) /*!< 0x00000200 */\r\n#define TIM_SR_CC1OF     TIM_SR_CC1OF_Msk           /*!<Capture/Compare 1 Overcapture Flag */\r\n#define TIM_SR_CC2OF_Pos (10U)\r\n#define TIM_SR_CC2OF_Msk (0x1U << TIM_SR_CC2OF_Pos) /*!< 0x00000400 */\r\n#define TIM_SR_CC2OF     TIM_SR_CC2OF_Msk           /*!<Capture/Compare 2 Overcapture Flag */\r\n#define TIM_SR_CC3OF_Pos (11U)\r\n#define TIM_SR_CC3OF_Msk (0x1U << TIM_SR_CC3OF_Pos) /*!< 0x00000800 */\r\n#define TIM_SR_CC3OF     TIM_SR_CC3OF_Msk           /*!<Capture/Compare 3 Overcapture Flag */\r\n#define TIM_SR_CC4OF_Pos (12U)\r\n#define TIM_SR_CC4OF_Msk (0x1U << TIM_SR_CC4OF_Pos) /*!< 0x00001000 */\r\n#define TIM_SR_CC4OF     TIM_SR_CC4OF_Msk           /*!<Capture/Compare 4 Overcapture Flag */\r\n\r\n/*******************  Bit definition for TIM_EGR register  *******************/\r\n#define TIM_EGR_UG_Pos   (0U)\r\n#define TIM_EGR_UG_Msk   (0x1U << TIM_EGR_UG_Pos) /*!< 0x00000001 */\r\n#define TIM_EGR_UG       TIM_EGR_UG_Msk           /*!<Update Generation */\r\n#define TIM_EGR_CC1G_Pos (1U)\r\n#define TIM_EGR_CC1G_Msk (0x1U << TIM_EGR_CC1G_Pos) /*!< 0x00000002 */\r\n#define TIM_EGR_CC1G     TIM_EGR_CC1G_Msk           /*!<Capture/Compare 1 Generation */\r\n#define TIM_EGR_CC2G_Pos (2U)\r\n#define TIM_EGR_CC2G_Msk (0x1U << TIM_EGR_CC2G_Pos) /*!< 0x00000004 */\r\n#define TIM_EGR_CC2G     TIM_EGR_CC2G_Msk           /*!<Capture/Compare 2 Generation */\r\n#define TIM_EGR_CC3G_Pos (3U)\r\n#define TIM_EGR_CC3G_Msk (0x1U << TIM_EGR_CC3G_Pos) /*!< 0x00000008 */\r\n#define TIM_EGR_CC3G     TIM_EGR_CC3G_Msk           /*!<Capture/Compare 3 Generation */\r\n#define TIM_EGR_CC4G_Pos (4U)\r\n#define TIM_EGR_CC4G_Msk (0x1U << TIM_EGR_CC4G_Pos) /*!< 0x00000010 */\r\n#define TIM_EGR_CC4G     TIM_EGR_CC4G_Msk           /*!<Capture/Compare 4 Generation */\r\n#define TIM_EGR_COMG_Pos (5U)\r\n#define TIM_EGR_COMG_Msk (0x1U << TIM_EGR_COMG_Pos) /*!< 0x00000020 */\r\n#define TIM_EGR_COMG     TIM_EGR_COMG_Msk           /*!<Capture/Compare Control Update Generation */\r\n#define TIM_EGR_TG_Pos   (6U)\r\n#define TIM_EGR_TG_Msk   (0x1U << TIM_EGR_TG_Pos) /*!< 0x00000040 */\r\n#define TIM_EGR_TG       TIM_EGR_TG_Msk           /*!<Trigger Generation */\r\n#define TIM_EGR_BG_Pos   (7U)\r\n#define TIM_EGR_BG_Msk   (0x1U << TIM_EGR_BG_Pos) /*!< 0x00000080 */\r\n#define TIM_EGR_BG       TIM_EGR_BG_Msk           /*!<Break Generation */\r\n\r\n/******************  Bit definition for TIM_CCMR1 register  ******************/\r\n#define TIM_CCMR1_CC1S_Pos (0U)\r\n#define TIM_CCMR1_CC1S_Msk (0x3U << TIM_CCMR1_CC1S_Pos) /*!< 0x00000003 */\r\n#define TIM_CCMR1_CC1S     TIM_CCMR1_CC1S_Msk           /*!<CC1S[1:0] bits (Capture/Compare 1 Selection) */\r\n#define TIM_CCMR1_CC1S_0   (0x1U << TIM_CCMR1_CC1S_Pos) /*!< 0x00000001 */\r\n#define TIM_CCMR1_CC1S_1   (0x2U << TIM_CCMR1_CC1S_Pos) /*!< 0x00000002 */\r\n\r\n#define TIM_CCMR1_OC1FE_Pos (2U)\r\n#define TIM_CCMR1_OC1FE_Msk (0x1U << TIM_CCMR1_OC1FE_Pos) /*!< 0x00000004 */\r\n#define TIM_CCMR1_OC1FE     TIM_CCMR1_OC1FE_Msk           /*!<Output Compare 1 Fast enable */\r\n#define TIM_CCMR1_OC1PE_Pos (3U)\r\n#define TIM_CCMR1_OC1PE_Msk (0x1U << TIM_CCMR1_OC1PE_Pos) /*!< 0x00000008 */\r\n#define TIM_CCMR1_OC1PE     TIM_CCMR1_OC1PE_Msk           /*!<Output Compare 1 Preload enable */\r\n\r\n#define TIM_CCMR1_OC1M_Pos (4U)\r\n#define TIM_CCMR1_OC1M_Msk (0x7U << TIM_CCMR1_OC1M_Pos) /*!< 0x00000070 */\r\n#define TIM_CCMR1_OC1M     TIM_CCMR1_OC1M_Msk           /*!<OC1M[2:0] bits (Output Compare 1 Mode) */\r\n#define TIM_CCMR1_OC1M_0   (0x1U << TIM_CCMR1_OC1M_Pos) /*!< 0x00000010 */\r\n#define TIM_CCMR1_OC1M_1   (0x2U << TIM_CCMR1_OC1M_Pos) /*!< 0x00000020 */\r\n#define TIM_CCMR1_OC1M_2   (0x4U << TIM_CCMR1_OC1M_Pos) /*!< 0x00000040 */\r\n\r\n#define TIM_CCMR1_OC1CE_Pos (7U)\r\n#define TIM_CCMR1_OC1CE_Msk (0x1U << TIM_CCMR1_OC1CE_Pos) /*!< 0x00000080 */\r\n#define TIM_CCMR1_OC1CE     TIM_CCMR1_OC1CE_Msk           /*!<Output Compare 1Clear Enable */\r\n\r\n#define TIM_CCMR1_CC2S_Pos (8U)\r\n#define TIM_CCMR1_CC2S_Msk (0x3U << TIM_CCMR1_CC2S_Pos) /*!< 0x00000300 */\r\n#define TIM_CCMR1_CC2S     TIM_CCMR1_CC2S_Msk           /*!<CC2S[1:0] bits (Capture/Compare 2 Selection) */\r\n#define TIM_CCMR1_CC2S_0   (0x1U << TIM_CCMR1_CC2S_Pos) /*!< 0x00000100 */\r\n#define TIM_CCMR1_CC2S_1   (0x2U << TIM_CCMR1_CC2S_Pos) /*!< 0x00000200 */\r\n\r\n#define TIM_CCMR1_OC2FE_Pos (10U)\r\n#define TIM_CCMR1_OC2FE_Msk (0x1U << TIM_CCMR1_OC2FE_Pos) /*!< 0x00000400 */\r\n#define TIM_CCMR1_OC2FE     TIM_CCMR1_OC2FE_Msk           /*!<Output Compare 2 Fast enable */\r\n#define TIM_CCMR1_OC2PE_Pos (11U)\r\n#define TIM_CCMR1_OC2PE_Msk (0x1U << TIM_CCMR1_OC2PE_Pos) /*!< 0x00000800 */\r\n#define TIM_CCMR1_OC2PE     TIM_CCMR1_OC2PE_Msk           /*!<Output Compare 2 Preload enable */\r\n\r\n#define TIM_CCMR1_OC2M_Pos (12U)\r\n#define TIM_CCMR1_OC2M_Msk (0x7U << TIM_CCMR1_OC2M_Pos) /*!< 0x00007000 */\r\n#define TIM_CCMR1_OC2M     TIM_CCMR1_OC2M_Msk           /*!<OC2M[2:0] bits (Output Compare 2 Mode) */\r\n#define TIM_CCMR1_OC2M_0   (0x1U << TIM_CCMR1_OC2M_Pos) /*!< 0x00001000 */\r\n#define TIM_CCMR1_OC2M_1   (0x2U << TIM_CCMR1_OC2M_Pos) /*!< 0x00002000 */\r\n#define TIM_CCMR1_OC2M_2   (0x4U << TIM_CCMR1_OC2M_Pos) /*!< 0x00004000 */\r\n\r\n#define TIM_CCMR1_OC2CE_Pos (15U)\r\n#define TIM_CCMR1_OC2CE_Msk (0x1U << TIM_CCMR1_OC2CE_Pos) /*!< 0x00008000 */\r\n#define TIM_CCMR1_OC2CE     TIM_CCMR1_OC2CE_Msk           /*!<Output Compare 2 Clear Enable */\r\n\r\n/*---------------------------------------------------------------------------*/\r\n\r\n#define TIM_CCMR1_IC1PSC_Pos (2U)\r\n#define TIM_CCMR1_IC1PSC_Msk (0x3U << TIM_CCMR1_IC1PSC_Pos) /*!< 0x0000000C */\r\n#define TIM_CCMR1_IC1PSC     TIM_CCMR1_IC1PSC_Msk           /*!<IC1PSC[1:0] bits (Input Capture 1 Prescaler) */\r\n#define TIM_CCMR1_IC1PSC_0   (0x1U << TIM_CCMR1_IC1PSC_Pos) /*!< 0x00000004 */\r\n#define TIM_CCMR1_IC1PSC_1   (0x2U << TIM_CCMR1_IC1PSC_Pos) /*!< 0x00000008 */\r\n\r\n#define TIM_CCMR1_IC1F_Pos (4U)\r\n#define TIM_CCMR1_IC1F_Msk (0xFU << TIM_CCMR1_IC1F_Pos) /*!< 0x000000F0 */\r\n#define TIM_CCMR1_IC1F     TIM_CCMR1_IC1F_Msk           /*!<IC1F[3:0] bits (Input Capture 1 Filter) */\r\n#define TIM_CCMR1_IC1F_0   (0x1U << TIM_CCMR1_IC1F_Pos) /*!< 0x00000010 */\r\n#define TIM_CCMR1_IC1F_1   (0x2U << TIM_CCMR1_IC1F_Pos) /*!< 0x00000020 */\r\n#define TIM_CCMR1_IC1F_2   (0x4U << TIM_CCMR1_IC1F_Pos) /*!< 0x00000040 */\r\n#define TIM_CCMR1_IC1F_3   (0x8U << TIM_CCMR1_IC1F_Pos) /*!< 0x00000080 */\r\n\r\n#define TIM_CCMR1_IC2PSC_Pos (10U)\r\n#define TIM_CCMR1_IC2PSC_Msk (0x3U << TIM_CCMR1_IC2PSC_Pos) /*!< 0x00000C00 */\r\n#define TIM_CCMR1_IC2PSC     TIM_CCMR1_IC2PSC_Msk           /*!<IC2PSC[1:0] bits (Input Capture 2 Prescaler) */\r\n#define TIM_CCMR1_IC2PSC_0   (0x1U << TIM_CCMR1_IC2PSC_Pos) /*!< 0x00000400 */\r\n#define TIM_CCMR1_IC2PSC_1   (0x2U << TIM_CCMR1_IC2PSC_Pos) /*!< 0x00000800 */\r\n\r\n#define TIM_CCMR1_IC2F_Pos (12U)\r\n#define TIM_CCMR1_IC2F_Msk (0xFU << TIM_CCMR1_IC2F_Pos) /*!< 0x0000F000 */\r\n#define TIM_CCMR1_IC2F     TIM_CCMR1_IC2F_Msk           /*!<IC2F[3:0] bits (Input Capture 2 Filter) */\r\n#define TIM_CCMR1_IC2F_0   (0x1U << TIM_CCMR1_IC2F_Pos) /*!< 0x00001000 */\r\n#define TIM_CCMR1_IC2F_1   (0x2U << TIM_CCMR1_IC2F_Pos) /*!< 0x00002000 */\r\n#define TIM_CCMR1_IC2F_2   (0x4U << TIM_CCMR1_IC2F_Pos) /*!< 0x00004000 */\r\n#define TIM_CCMR1_IC2F_3   (0x8U << TIM_CCMR1_IC2F_Pos) /*!< 0x00008000 */\r\n\r\n/******************  Bit definition for TIM_CCMR2 register  ******************/\r\n#define TIM_CCMR2_CC3S_Pos (0U)\r\n#define TIM_CCMR2_CC3S_Msk (0x3U << TIM_CCMR2_CC3S_Pos) /*!< 0x00000003 */\r\n#define TIM_CCMR2_CC3S     TIM_CCMR2_CC3S_Msk           /*!<CC3S[1:0] bits (Capture/Compare 3 Selection) */\r\n#define TIM_CCMR2_CC3S_0   (0x1U << TIM_CCMR2_CC3S_Pos) /*!< 0x00000001 */\r\n#define TIM_CCMR2_CC3S_1   (0x2U << TIM_CCMR2_CC3S_Pos) /*!< 0x00000002 */\r\n\r\n#define TIM_CCMR2_OC3FE_Pos (2U)\r\n#define TIM_CCMR2_OC3FE_Msk (0x1U << TIM_CCMR2_OC3FE_Pos) /*!< 0x00000004 */\r\n#define TIM_CCMR2_OC3FE     TIM_CCMR2_OC3FE_Msk           /*!<Output Compare 3 Fast enable */\r\n#define TIM_CCMR2_OC3PE_Pos (3U)\r\n#define TIM_CCMR2_OC3PE_Msk (0x1U << TIM_CCMR2_OC3PE_Pos) /*!< 0x00000008 */\r\n#define TIM_CCMR2_OC3PE     TIM_CCMR2_OC3PE_Msk           /*!<Output Compare 3 Preload enable */\r\n\r\n#define TIM_CCMR2_OC3M_Pos (4U)\r\n#define TIM_CCMR2_OC3M_Msk (0x7U << TIM_CCMR2_OC3M_Pos) /*!< 0x00000070 */\r\n#define TIM_CCMR2_OC3M     TIM_CCMR2_OC3M_Msk           /*!<OC3M[2:0] bits (Output Compare 3 Mode) */\r\n#define TIM_CCMR2_OC3M_0   (0x1U << TIM_CCMR2_OC3M_Pos) /*!< 0x00000010 */\r\n#define TIM_CCMR2_OC3M_1   (0x2U << TIM_CCMR2_OC3M_Pos) /*!< 0x00000020 */\r\n#define TIM_CCMR2_OC3M_2   (0x4U << TIM_CCMR2_OC3M_Pos) /*!< 0x00000040 */\r\n\r\n#define TIM_CCMR2_OC3CE_Pos (7U)\r\n#define TIM_CCMR2_OC3CE_Msk (0x1U << TIM_CCMR2_OC3CE_Pos) /*!< 0x00000080 */\r\n#define TIM_CCMR2_OC3CE     TIM_CCMR2_OC3CE_Msk           /*!<Output Compare 3 Clear Enable */\r\n\r\n#define TIM_CCMR2_CC4S_Pos (8U)\r\n#define TIM_CCMR2_CC4S_Msk (0x3U << TIM_CCMR2_CC4S_Pos) /*!< 0x00000300 */\r\n#define TIM_CCMR2_CC4S     TIM_CCMR2_CC4S_Msk           /*!<CC4S[1:0] bits (Capture/Compare 4 Selection) */\r\n#define TIM_CCMR2_CC4S_0   (0x1U << TIM_CCMR2_CC4S_Pos) /*!< 0x00000100 */\r\n#define TIM_CCMR2_CC4S_1   (0x2U << TIM_CCMR2_CC4S_Pos) /*!< 0x00000200 */\r\n\r\n#define TIM_CCMR2_OC4FE_Pos (10U)\r\n#define TIM_CCMR2_OC4FE_Msk (0x1U << TIM_CCMR2_OC4FE_Pos) /*!< 0x00000400 */\r\n#define TIM_CCMR2_OC4FE     TIM_CCMR2_OC4FE_Msk           /*!<Output Compare 4 Fast enable */\r\n#define TIM_CCMR2_OC4PE_Pos (11U)\r\n#define TIM_CCMR2_OC4PE_Msk (0x1U << TIM_CCMR2_OC4PE_Pos) /*!< 0x00000800 */\r\n#define TIM_CCMR2_OC4PE     TIM_CCMR2_OC4PE_Msk           /*!<Output Compare 4 Preload enable */\r\n\r\n#define TIM_CCMR2_OC4M_Pos (12U)\r\n#define TIM_CCMR2_OC4M_Msk (0x7U << TIM_CCMR2_OC4M_Pos) /*!< 0x00007000 */\r\n#define TIM_CCMR2_OC4M     TIM_CCMR2_OC4M_Msk           /*!<OC4M[2:0] bits (Output Compare 4 Mode) */\r\n#define TIM_CCMR2_OC4M_0   (0x1U << TIM_CCMR2_OC4M_Pos) /*!< 0x00001000 */\r\n#define TIM_CCMR2_OC4M_1   (0x2U << TIM_CCMR2_OC4M_Pos) /*!< 0x00002000 */\r\n#define TIM_CCMR2_OC4M_2   (0x4U << TIM_CCMR2_OC4M_Pos) /*!< 0x00004000 */\r\n\r\n#define TIM_CCMR2_OC4CE_Pos (15U)\r\n#define TIM_CCMR2_OC4CE_Msk (0x1U << TIM_CCMR2_OC4CE_Pos) /*!< 0x00008000 */\r\n#define TIM_CCMR2_OC4CE     TIM_CCMR2_OC4CE_Msk           /*!<Output Compare 4 Clear Enable */\r\n\r\n/*---------------------------------------------------------------------------*/\r\n\r\n#define TIM_CCMR2_IC3PSC_Pos (2U)\r\n#define TIM_CCMR2_IC3PSC_Msk (0x3U << TIM_CCMR2_IC3PSC_Pos) /*!< 0x0000000C */\r\n#define TIM_CCMR2_IC3PSC     TIM_CCMR2_IC3PSC_Msk           /*!<IC3PSC[1:0] bits (Input Capture 3 Prescaler) */\r\n#define TIM_CCMR2_IC3PSC_0   (0x1U << TIM_CCMR2_IC3PSC_Pos) /*!< 0x00000004 */\r\n#define TIM_CCMR2_IC3PSC_1   (0x2U << TIM_CCMR2_IC3PSC_Pos) /*!< 0x00000008 */\r\n\r\n#define TIM_CCMR2_IC3F_Pos (4U)\r\n#define TIM_CCMR2_IC3F_Msk (0xFU << TIM_CCMR2_IC3F_Pos) /*!< 0x000000F0 */\r\n#define TIM_CCMR2_IC3F     TIM_CCMR2_IC3F_Msk           /*!<IC3F[3:0] bits (Input Capture 3 Filter) */\r\n#define TIM_CCMR2_IC3F_0   (0x1U << TIM_CCMR2_IC3F_Pos) /*!< 0x00000010 */\r\n#define TIM_CCMR2_IC3F_1   (0x2U << TIM_CCMR2_IC3F_Pos) /*!< 0x00000020 */\r\n#define TIM_CCMR2_IC3F_2   (0x4U << TIM_CCMR2_IC3F_Pos) /*!< 0x00000040 */\r\n#define TIM_CCMR2_IC3F_3   (0x8U << TIM_CCMR2_IC3F_Pos) /*!< 0x00000080 */\r\n\r\n#define TIM_CCMR2_IC4PSC_Pos (10U)\r\n#define TIM_CCMR2_IC4PSC_Msk (0x3U << TIM_CCMR2_IC4PSC_Pos) /*!< 0x00000C00 */\r\n#define TIM_CCMR2_IC4PSC     TIM_CCMR2_IC4PSC_Msk           /*!<IC4PSC[1:0] bits (Input Capture 4 Prescaler) */\r\n#define TIM_CCMR2_IC4PSC_0   (0x1U << TIM_CCMR2_IC4PSC_Pos) /*!< 0x00000400 */\r\n#define TIM_CCMR2_IC4PSC_1   (0x2U << TIM_CCMR2_IC4PSC_Pos) /*!< 0x00000800 */\r\n\r\n#define TIM_CCMR2_IC4F_Pos (12U)\r\n#define TIM_CCMR2_IC4F_Msk (0xFU << TIM_CCMR2_IC4F_Pos) /*!< 0x0000F000 */\r\n#define TIM_CCMR2_IC4F     TIM_CCMR2_IC4F_Msk           /*!<IC4F[3:0] bits (Input Capture 4 Filter) */\r\n#define TIM_CCMR2_IC4F_0   (0x1U << TIM_CCMR2_IC4F_Pos) /*!< 0x00001000 */\r\n#define TIM_CCMR2_IC4F_1   (0x2U << TIM_CCMR2_IC4F_Pos) /*!< 0x00002000 */\r\n#define TIM_CCMR2_IC4F_2   (0x4U << TIM_CCMR2_IC4F_Pos) /*!< 0x00004000 */\r\n#define TIM_CCMR2_IC4F_3   (0x8U << TIM_CCMR2_IC4F_Pos) /*!< 0x00008000 */\r\n\r\n/*******************  Bit definition for TIM_CCER register  ******************/\r\n#define TIM_CCER_CC1E_Pos  (0U)\r\n#define TIM_CCER_CC1E_Msk  (0x1U << TIM_CCER_CC1E_Pos) /*!< 0x00000001 */\r\n#define TIM_CCER_CC1E      TIM_CCER_CC1E_Msk           /*!<Capture/Compare 1 output enable */\r\n#define TIM_CCER_CC1P_Pos  (1U)\r\n#define TIM_CCER_CC1P_Msk  (0x1U << TIM_CCER_CC1P_Pos) /*!< 0x00000002 */\r\n#define TIM_CCER_CC1P      TIM_CCER_CC1P_Msk           /*!<Capture/Compare 1 output Polarity */\r\n#define TIM_CCER_CC1NE_Pos (2U)\r\n#define TIM_CCER_CC1NE_Msk (0x1U << TIM_CCER_CC1NE_Pos) /*!< 0x00000004 */\r\n#define TIM_CCER_CC1NE     TIM_CCER_CC1NE_Msk           /*!<Capture/Compare 1 Complementary output enable */\r\n#define TIM_CCER_CC1NP_Pos (3U)\r\n#define TIM_CCER_CC1NP_Msk (0x1U << TIM_CCER_CC1NP_Pos) /*!< 0x00000008 */\r\n#define TIM_CCER_CC1NP     TIM_CCER_CC1NP_Msk           /*!<Capture/Compare 1 Complementary output Polarity */\r\n#define TIM_CCER_CC2E_Pos  (4U)\r\n#define TIM_CCER_CC2E_Msk  (0x1U << TIM_CCER_CC2E_Pos) /*!< 0x00000010 */\r\n#define TIM_CCER_CC2E      TIM_CCER_CC2E_Msk           /*!<Capture/Compare 2 output enable */\r\n#define TIM_CCER_CC2P_Pos  (5U)\r\n#define TIM_CCER_CC2P_Msk  (0x1U << TIM_CCER_CC2P_Pos) /*!< 0x00000020 */\r\n#define TIM_CCER_CC2P      TIM_CCER_CC2P_Msk           /*!<Capture/Compare 2 output Polarity */\r\n#define TIM_CCER_CC2NE_Pos (6U)\r\n#define TIM_CCER_CC2NE_Msk (0x1U << TIM_CCER_CC2NE_Pos) /*!< 0x00000040 */\r\n#define TIM_CCER_CC2NE     TIM_CCER_CC2NE_Msk           /*!<Capture/Compare 2 Complementary output enable */\r\n#define TIM_CCER_CC2NP_Pos (7U)\r\n#define TIM_CCER_CC2NP_Msk (0x1U << TIM_CCER_CC2NP_Pos) /*!< 0x00000080 */\r\n#define TIM_CCER_CC2NP     TIM_CCER_CC2NP_Msk           /*!<Capture/Compare 2 Complementary output Polarity */\r\n#define TIM_CCER_CC3E_Pos  (8U)\r\n#define TIM_CCER_CC3E_Msk  (0x1U << TIM_CCER_CC3E_Pos) /*!< 0x00000100 */\r\n#define TIM_CCER_CC3E      TIM_CCER_CC3E_Msk           /*!<Capture/Compare 3 output enable */\r\n#define TIM_CCER_CC3P_Pos  (9U)\r\n#define TIM_CCER_CC3P_Msk  (0x1U << TIM_CCER_CC3P_Pos) /*!< 0x00000200 */\r\n#define TIM_CCER_CC3P      TIM_CCER_CC3P_Msk           /*!<Capture/Compare 3 output Polarity */\r\n#define TIM_CCER_CC3NE_Pos (10U)\r\n#define TIM_CCER_CC3NE_Msk (0x1U << TIM_CCER_CC3NE_Pos) /*!< 0x00000400 */\r\n#define TIM_CCER_CC3NE     TIM_CCER_CC3NE_Msk           /*!<Capture/Compare 3 Complementary output enable */\r\n#define TIM_CCER_CC3NP_Pos (11U)\r\n#define TIM_CCER_CC3NP_Msk (0x1U << TIM_CCER_CC3NP_Pos) /*!< 0x00000800 */\r\n#define TIM_CCER_CC3NP     TIM_CCER_CC3NP_Msk           /*!<Capture/Compare 3 Complementary output Polarity */\r\n#define TIM_CCER_CC4E_Pos  (12U)\r\n#define TIM_CCER_CC4E_Msk  (0x1U << TIM_CCER_CC4E_Pos) /*!< 0x00001000 */\r\n#define TIM_CCER_CC4E      TIM_CCER_CC4E_Msk           /*!<Capture/Compare 4 output enable */\r\n#define TIM_CCER_CC4P_Pos  (13U)\r\n#define TIM_CCER_CC4P_Msk  (0x1U << TIM_CCER_CC4P_Pos) /*!< 0x00002000 */\r\n#define TIM_CCER_CC4P      TIM_CCER_CC4P_Msk           /*!<Capture/Compare 4 output Polarity */\r\n\r\n/*******************  Bit definition for TIM_CNT register  *******************/\r\n#define TIM_CNT_CNT_Pos (0U)\r\n#define TIM_CNT_CNT_Msk (0xFFFFFFFFU << TIM_CNT_CNT_Pos) /*!< 0xFFFFFFFF */\r\n#define TIM_CNT_CNT     TIM_CNT_CNT_Msk                  /*!<Counter Value */\r\n\r\n/*******************  Bit definition for TIM_PSC register  *******************/\r\n#define TIM_PSC_PSC_Pos (0U)\r\n#define TIM_PSC_PSC_Msk (0xFFFFU << TIM_PSC_PSC_Pos) /*!< 0x0000FFFF */\r\n#define TIM_PSC_PSC     TIM_PSC_PSC_Msk              /*!<Prescaler Value */\r\n\r\n/*******************  Bit definition for TIM_ARR register  *******************/\r\n#define TIM_ARR_ARR_Pos (0U)\r\n#define TIM_ARR_ARR_Msk (0xFFFFFFFFU << TIM_ARR_ARR_Pos) /*!< 0xFFFFFFFF */\r\n#define TIM_ARR_ARR     TIM_ARR_ARR_Msk                  /*!<actual auto-reload Value */\r\n\r\n/*******************  Bit definition for TIM_RCR register  *******************/\r\n#define TIM_RCR_REP_Pos (0U)\r\n#define TIM_RCR_REP_Msk (0xFFU << TIM_RCR_REP_Pos) /*!< 0x000000FF */\r\n#define TIM_RCR_REP     TIM_RCR_REP_Msk            /*!<Repetition Counter Value */\r\n\r\n/*******************  Bit definition for TIM_CCR1 register  ******************/\r\n#define TIM_CCR1_CCR1_Pos (0U)\r\n#define TIM_CCR1_CCR1_Msk (0xFFFFU << TIM_CCR1_CCR1_Pos) /*!< 0x0000FFFF */\r\n#define TIM_CCR1_CCR1     TIM_CCR1_CCR1_Msk              /*!<Capture/Compare 1 Value */\r\n\r\n/*******************  Bit definition for TIM_CCR2 register  ******************/\r\n#define TIM_CCR2_CCR2_Pos (0U)\r\n#define TIM_CCR2_CCR2_Msk (0xFFFFU << TIM_CCR2_CCR2_Pos) /*!< 0x0000FFFF */\r\n#define TIM_CCR2_CCR2     TIM_CCR2_CCR2_Msk              /*!<Capture/Compare 2 Value */\r\n\r\n/*******************  Bit definition for TIM_CCR3 register  ******************/\r\n#define TIM_CCR3_CCR3_Pos (0U)\r\n#define TIM_CCR3_CCR3_Msk (0xFFFFU << TIM_CCR3_CCR3_Pos) /*!< 0x0000FFFF */\r\n#define TIM_CCR3_CCR3     TIM_CCR3_CCR3_Msk              /*!<Capture/Compare 3 Value */\r\n\r\n/*******************  Bit definition for TIM_CCR4 register  ******************/\r\n#define TIM_CCR4_CCR4_Pos (0U)\r\n#define TIM_CCR4_CCR4_Msk (0xFFFFU << TIM_CCR4_CCR4_Pos) /*!< 0x0000FFFF */\r\n#define TIM_CCR4_CCR4     TIM_CCR4_CCR4_Msk              /*!<Capture/Compare 4 Value */\r\n\r\n/*******************  Bit definition for TIM_BDTR register  ******************/\r\n#define TIM_BDTR_DTG_Pos (0U)\r\n#define TIM_BDTR_DTG_Msk (0xFFU << TIM_BDTR_DTG_Pos) /*!< 0x000000FF */\r\n#define TIM_BDTR_DTG     TIM_BDTR_DTG_Msk            /*!<DTG[0:7] bits (Dead-Time Generator set-up) */\r\n#define TIM_BDTR_DTG_0   (0x01U << TIM_BDTR_DTG_Pos) /*!< 0x00000001 */\r\n#define TIM_BDTR_DTG_1   (0x02U << TIM_BDTR_DTG_Pos) /*!< 0x00000002 */\r\n#define TIM_BDTR_DTG_2   (0x04U << TIM_BDTR_DTG_Pos) /*!< 0x00000004 */\r\n#define TIM_BDTR_DTG_3   (0x08U << TIM_BDTR_DTG_Pos) /*!< 0x00000008 */\r\n#define TIM_BDTR_DTG_4   (0x10U << TIM_BDTR_DTG_Pos) /*!< 0x00000010 */\r\n#define TIM_BDTR_DTG_5   (0x20U << TIM_BDTR_DTG_Pos) /*!< 0x00000020 */\r\n#define TIM_BDTR_DTG_6   (0x40U << TIM_BDTR_DTG_Pos) /*!< 0x00000040 */\r\n#define TIM_BDTR_DTG_7   (0x80U << TIM_BDTR_DTG_Pos) /*!< 0x00000080 */\r\n\r\n#define TIM_BDTR_LOCK_Pos (8U)\r\n#define TIM_BDTR_LOCK_Msk (0x3U << TIM_BDTR_LOCK_Pos) /*!< 0x00000300 */\r\n#define TIM_BDTR_LOCK     TIM_BDTR_LOCK_Msk           /*!<LOCK[1:0] bits (Lock Configuration) */\r\n#define TIM_BDTR_LOCK_0   (0x1U << TIM_BDTR_LOCK_Pos) /*!< 0x00000100 */\r\n#define TIM_BDTR_LOCK_1   (0x2U << TIM_BDTR_LOCK_Pos) /*!< 0x00000200 */\r\n\r\n#define TIM_BDTR_OSSI_Pos (10U)\r\n#define TIM_BDTR_OSSI_Msk (0x1U << TIM_BDTR_OSSI_Pos) /*!< 0x00000400 */\r\n#define TIM_BDTR_OSSI     TIM_BDTR_OSSI_Msk           /*!<Off-State Selection for Idle mode */\r\n#define TIM_BDTR_OSSR_Pos (11U)\r\n#define TIM_BDTR_OSSR_Msk (0x1U << TIM_BDTR_OSSR_Pos) /*!< 0x00000800 */\r\n#define TIM_BDTR_OSSR     TIM_BDTR_OSSR_Msk           /*!<Off-State Selection for Run mode */\r\n#define TIM_BDTR_BKE_Pos  (12U)\r\n#define TIM_BDTR_BKE_Msk  (0x1U << TIM_BDTR_BKE_Pos) /*!< 0x00001000 */\r\n#define TIM_BDTR_BKE      TIM_BDTR_BKE_Msk           /*!<Break enable */\r\n#define TIM_BDTR_BKP_Pos  (13U)\r\n#define TIM_BDTR_BKP_Msk  (0x1U << TIM_BDTR_BKP_Pos) /*!< 0x00002000 */\r\n#define TIM_BDTR_BKP      TIM_BDTR_BKP_Msk           /*!<Break Polarity */\r\n#define TIM_BDTR_AOE_Pos  (14U)\r\n#define TIM_BDTR_AOE_Msk  (0x1U << TIM_BDTR_AOE_Pos) /*!< 0x00004000 */\r\n#define TIM_BDTR_AOE      TIM_BDTR_AOE_Msk           /*!<Automatic Output enable */\r\n#define TIM_BDTR_MOE_Pos  (15U)\r\n#define TIM_BDTR_MOE_Msk  (0x1U << TIM_BDTR_MOE_Pos) /*!< 0x00008000 */\r\n#define TIM_BDTR_MOE      TIM_BDTR_MOE_Msk           /*!<Main Output enable */\r\n\r\n/*******************  Bit definition for TIM_DCR register  *******************/\r\n#define TIM_DCR_DBA_Pos (0U)\r\n#define TIM_DCR_DBA_Msk (0x1FU << TIM_DCR_DBA_Pos) /*!< 0x0000001F */\r\n#define TIM_DCR_DBA     TIM_DCR_DBA_Msk            /*!<DBA[4:0] bits (DMA Base Address) */\r\n#define TIM_DCR_DBA_0   (0x01U << TIM_DCR_DBA_Pos) /*!< 0x00000001 */\r\n#define TIM_DCR_DBA_1   (0x02U << TIM_DCR_DBA_Pos) /*!< 0x00000002 */\r\n#define TIM_DCR_DBA_2   (0x04U << TIM_DCR_DBA_Pos) /*!< 0x00000004 */\r\n#define TIM_DCR_DBA_3   (0x08U << TIM_DCR_DBA_Pos) /*!< 0x00000008 */\r\n#define TIM_DCR_DBA_4   (0x10U << TIM_DCR_DBA_Pos) /*!< 0x00000010 */\r\n\r\n#define TIM_DCR_DBL_Pos (8U)\r\n#define TIM_DCR_DBL_Msk (0x1FU << TIM_DCR_DBL_Pos) /*!< 0x00001F00 */\r\n#define TIM_DCR_DBL     TIM_DCR_DBL_Msk            /*!<DBL[4:0] bits (DMA Burst Length) */\r\n#define TIM_DCR_DBL_0   (0x01U << TIM_DCR_DBL_Pos) /*!< 0x00000100 */\r\n#define TIM_DCR_DBL_1   (0x02U << TIM_DCR_DBL_Pos) /*!< 0x00000200 */\r\n#define TIM_DCR_DBL_2   (0x04U << TIM_DCR_DBL_Pos) /*!< 0x00000400 */\r\n#define TIM_DCR_DBL_3   (0x08U << TIM_DCR_DBL_Pos) /*!< 0x00000800 */\r\n#define TIM_DCR_DBL_4   (0x10U << TIM_DCR_DBL_Pos) /*!< 0x00001000 */\r\n\r\n/*******************  Bit definition for TIM_DMAR register  ******************/\r\n#define TIM_DMAR_DMAB_Pos (0U)\r\n#define TIM_DMAR_DMAB_Msk (0xFFFFU << TIM_DMAR_DMAB_Pos) /*!< 0x0000FFFF */\r\n#define TIM_DMAR_DMAB     TIM_DMAR_DMAB_Msk              /*!<DMA register for burst accesses */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                             Real-Time Clock                                */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for RTC_CRH register  ********************/\r\n#define RTC_CRH_SECIE_Pos (0U)\r\n#define RTC_CRH_SECIE_Msk (0x1U << RTC_CRH_SECIE_Pos) /*!< 0x00000001 */\r\n#define RTC_CRH_SECIE     RTC_CRH_SECIE_Msk           /*!< Second Interrupt Enable */\r\n#define RTC_CRH_ALRIE_Pos (1U)\r\n#define RTC_CRH_ALRIE_Msk (0x1U << RTC_CRH_ALRIE_Pos) /*!< 0x00000002 */\r\n#define RTC_CRH_ALRIE     RTC_CRH_ALRIE_Msk           /*!< Alarm Interrupt Enable */\r\n#define RTC_CRH_OWIE_Pos  (2U)\r\n#define RTC_CRH_OWIE_Msk  (0x1U << RTC_CRH_OWIE_Pos) /*!< 0x00000004 */\r\n#define RTC_CRH_OWIE      RTC_CRH_OWIE_Msk           /*!< OverfloW Interrupt Enable */\r\n\r\n/*******************  Bit definition for RTC_CRL register  ********************/\r\n#define RTC_CRL_SECF_Pos  (0U)\r\n#define RTC_CRL_SECF_Msk  (0x1U << RTC_CRL_SECF_Pos) /*!< 0x00000001 */\r\n#define RTC_CRL_SECF      RTC_CRL_SECF_Msk           /*!< Second Flag */\r\n#define RTC_CRL_ALRF_Pos  (1U)\r\n#define RTC_CRL_ALRF_Msk  (0x1U << RTC_CRL_ALRF_Pos) /*!< 0x00000002 */\r\n#define RTC_CRL_ALRF      RTC_CRL_ALRF_Msk           /*!< Alarm Flag */\r\n#define RTC_CRL_OWF_Pos   (2U)\r\n#define RTC_CRL_OWF_Msk   (0x1U << RTC_CRL_OWF_Pos) /*!< 0x00000004 */\r\n#define RTC_CRL_OWF       RTC_CRL_OWF_Msk           /*!< OverfloW Flag */\r\n#define RTC_CRL_RSF_Pos   (3U)\r\n#define RTC_CRL_RSF_Msk   (0x1U << RTC_CRL_RSF_Pos) /*!< 0x00000008 */\r\n#define RTC_CRL_RSF       RTC_CRL_RSF_Msk           /*!< Registers Synchronized Flag */\r\n#define RTC_CRL_CNF_Pos   (4U)\r\n#define RTC_CRL_CNF_Msk   (0x1U << RTC_CRL_CNF_Pos) /*!< 0x00000010 */\r\n#define RTC_CRL_CNF       RTC_CRL_CNF_Msk           /*!< Configuration Flag */\r\n#define RTC_CRL_RTOFF_Pos (5U)\r\n#define RTC_CRL_RTOFF_Msk (0x1U << RTC_CRL_RTOFF_Pos) /*!< 0x00000020 */\r\n#define RTC_CRL_RTOFF     RTC_CRL_RTOFF_Msk           /*!< RTC operation OFF */\r\n\r\n/*******************  Bit definition for RTC_PRLH register  *******************/\r\n#define RTC_PRLH_PRL_Pos (0U)\r\n#define RTC_PRLH_PRL_Msk (0xFU << RTC_PRLH_PRL_Pos) /*!< 0x0000000F */\r\n#define RTC_PRLH_PRL     RTC_PRLH_PRL_Msk           /*!< RTC Prescaler Reload Value High */\r\n\r\n/*******************  Bit definition for RTC_PRLL register  *******************/\r\n#define RTC_PRLL_PRL_Pos (0U)\r\n#define RTC_PRLL_PRL_Msk (0xFFFFU << RTC_PRLL_PRL_Pos) /*!< 0x0000FFFF */\r\n#define RTC_PRLL_PRL     RTC_PRLL_PRL_Msk              /*!< RTC Prescaler Reload Value Low */\r\n\r\n/*******************  Bit definition for RTC_DIVH register  *******************/\r\n#define RTC_DIVH_RTC_DIV_Pos (0U)\r\n#define RTC_DIVH_RTC_DIV_Msk (0xFU << RTC_DIVH_RTC_DIV_Pos) /*!< 0x0000000F */\r\n#define RTC_DIVH_RTC_DIV     RTC_DIVH_RTC_DIV_Msk           /*!< RTC Clock Divider High */\r\n\r\n/*******************  Bit definition for RTC_DIVL register  *******************/\r\n#define RTC_DIVL_RTC_DIV_Pos (0U)\r\n#define RTC_DIVL_RTC_DIV_Msk (0xFFFFU << RTC_DIVL_RTC_DIV_Pos) /*!< 0x0000FFFF */\r\n#define RTC_DIVL_RTC_DIV     RTC_DIVL_RTC_DIV_Msk              /*!< RTC Clock Divider Low */\r\n\r\n/*******************  Bit definition for RTC_CNTH register  *******************/\r\n#define RTC_CNTH_RTC_CNT_Pos (0U)\r\n#define RTC_CNTH_RTC_CNT_Msk (0xFFFFU << RTC_CNTH_RTC_CNT_Pos) /*!< 0x0000FFFF */\r\n#define RTC_CNTH_RTC_CNT     RTC_CNTH_RTC_CNT_Msk              /*!< RTC Counter High */\r\n\r\n/*******************  Bit definition for RTC_CNTL register  *******************/\r\n#define RTC_CNTL_RTC_CNT_Pos (0U)\r\n#define RTC_CNTL_RTC_CNT_Msk (0xFFFFU << RTC_CNTL_RTC_CNT_Pos) /*!< 0x0000FFFF */\r\n#define RTC_CNTL_RTC_CNT     RTC_CNTL_RTC_CNT_Msk              /*!< RTC Counter Low */\r\n\r\n/*******************  Bit definition for RTC_ALRH register  *******************/\r\n#define RTC_ALRH_RTC_ALR_Pos (0U)\r\n#define RTC_ALRH_RTC_ALR_Msk (0xFFFFU << RTC_ALRH_RTC_ALR_Pos) /*!< 0x0000FFFF */\r\n#define RTC_ALRH_RTC_ALR     RTC_ALRH_RTC_ALR_Msk              /*!< RTC Alarm High */\r\n\r\n/*******************  Bit definition for RTC_ALRL register  *******************/\r\n#define RTC_ALRL_RTC_ALR_Pos (0U)\r\n#define RTC_ALRL_RTC_ALR_Msk (0xFFFFU << RTC_ALRL_RTC_ALR_Pos) /*!< 0x0000FFFF */\r\n#define RTC_ALRL_RTC_ALR     RTC_ALRL_RTC_ALR_Msk              /*!< RTC Alarm Low */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                        Independent WATCHDOG (IWDG)                         */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for IWDG_KR register  ********************/\r\n#define IWDG_KR_KEY_Pos (0U)\r\n#define IWDG_KR_KEY_Msk (0xFFFFU << IWDG_KR_KEY_Pos) /*!< 0x0000FFFF */\r\n#define IWDG_KR_KEY     IWDG_KR_KEY_Msk              /*!< Key value (write only, read 0000h) */\r\n\r\n/*******************  Bit definition for IWDG_PR register  ********************/\r\n#define IWDG_PR_PR_Pos (0U)\r\n#define IWDG_PR_PR_Msk (0x7U << IWDG_PR_PR_Pos) /*!< 0x00000007 */\r\n#define IWDG_PR_PR     IWDG_PR_PR_Msk           /*!< PR[2:0] (Prescaler divider) */\r\n#define IWDG_PR_PR_0   (0x1U << IWDG_PR_PR_Pos) /*!< 0x00000001 */\r\n#define IWDG_PR_PR_1   (0x2U << IWDG_PR_PR_Pos) /*!< 0x00000002 */\r\n#define IWDG_PR_PR_2   (0x4U << IWDG_PR_PR_Pos) /*!< 0x00000004 */\r\n\r\n/*******************  Bit definition for IWDG_RLR register  *******************/\r\n#define IWDG_RLR_RL_Pos (0U)\r\n#define IWDG_RLR_RL_Msk (0xFFFU << IWDG_RLR_RL_Pos) /*!< 0x00000FFF */\r\n#define IWDG_RLR_RL     IWDG_RLR_RL_Msk             /*!< Watchdog counter reload value */\r\n\r\n/*******************  Bit definition for IWDG_SR register  ********************/\r\n#define IWDG_SR_PVU_Pos (0U)\r\n#define IWDG_SR_PVU_Msk (0x1U << IWDG_SR_PVU_Pos) /*!< 0x00000001 */\r\n#define IWDG_SR_PVU     IWDG_SR_PVU_Msk           /*!< Watchdog prescaler value update */\r\n#define IWDG_SR_RVU_Pos (1U)\r\n#define IWDG_SR_RVU_Msk (0x1U << IWDG_SR_RVU_Pos) /*!< 0x00000002 */\r\n#define IWDG_SR_RVU     IWDG_SR_RVU_Msk           /*!< Watchdog counter reload value update */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                         Window WATCHDOG (WWDG)                             */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for WWDG_CR register  ********************/\r\n#define WWDG_CR_T_Pos (0U)\r\n#define WWDG_CR_T_Msk (0x7FU << WWDG_CR_T_Pos) /*!< 0x0000007F */\r\n#define WWDG_CR_T     WWDG_CR_T_Msk            /*!< T[6:0] bits (7-Bit counter (MSB to LSB)) */\r\n#define WWDG_CR_T_0   (0x01U << WWDG_CR_T_Pos) /*!< 0x00000001 */\r\n#define WWDG_CR_T_1   (0x02U << WWDG_CR_T_Pos) /*!< 0x00000002 */\r\n#define WWDG_CR_T_2   (0x04U << WWDG_CR_T_Pos) /*!< 0x00000004 */\r\n#define WWDG_CR_T_3   (0x08U << WWDG_CR_T_Pos) /*!< 0x00000008 */\r\n#define WWDG_CR_T_4   (0x10U << WWDG_CR_T_Pos) /*!< 0x00000010 */\r\n#define WWDG_CR_T_5   (0x20U << WWDG_CR_T_Pos) /*!< 0x00000020 */\r\n#define WWDG_CR_T_6   (0x40U << WWDG_CR_T_Pos) /*!< 0x00000040 */\r\n\r\n/* Legacy defines */\r\n#define WWDG_CR_T0 WWDG_CR_T_0\r\n#define WWDG_CR_T1 WWDG_CR_T_1\r\n#define WWDG_CR_T2 WWDG_CR_T_2\r\n#define WWDG_CR_T3 WWDG_CR_T_3\r\n#define WWDG_CR_T4 WWDG_CR_T_4\r\n#define WWDG_CR_T5 WWDG_CR_T_5\r\n#define WWDG_CR_T6 WWDG_CR_T_6\r\n\r\n#define WWDG_CR_WDGA_Pos (7U)\r\n#define WWDG_CR_WDGA_Msk (0x1U << WWDG_CR_WDGA_Pos) /*!< 0x00000080 */\r\n#define WWDG_CR_WDGA     WWDG_CR_WDGA_Msk           /*!< Activation bit */\r\n\r\n/*******************  Bit definition for WWDG_CFR register  *******************/\r\n#define WWDG_CFR_W_Pos (0U)\r\n#define WWDG_CFR_W_Msk (0x7FU << WWDG_CFR_W_Pos) /*!< 0x0000007F */\r\n#define WWDG_CFR_W     WWDG_CFR_W_Msk            /*!< W[6:0] bits (7-bit window value) */\r\n#define WWDG_CFR_W_0   (0x01U << WWDG_CFR_W_Pos) /*!< 0x00000001 */\r\n#define WWDG_CFR_W_1   (0x02U << WWDG_CFR_W_Pos) /*!< 0x00000002 */\r\n#define WWDG_CFR_W_2   (0x04U << WWDG_CFR_W_Pos) /*!< 0x00000004 */\r\n#define WWDG_CFR_W_3   (0x08U << WWDG_CFR_W_Pos) /*!< 0x00000008 */\r\n#define WWDG_CFR_W_4   (0x10U << WWDG_CFR_W_Pos) /*!< 0x00000010 */\r\n#define WWDG_CFR_W_5   (0x20U << WWDG_CFR_W_Pos) /*!< 0x00000020 */\r\n#define WWDG_CFR_W_6   (0x40U << WWDG_CFR_W_Pos) /*!< 0x00000040 */\r\n\r\n/* Legacy defines */\r\n#define WWDG_CFR_W0 WWDG_CFR_W_0\r\n#define WWDG_CFR_W1 WWDG_CFR_W_1\r\n#define WWDG_CFR_W2 WWDG_CFR_W_2\r\n#define WWDG_CFR_W3 WWDG_CFR_W_3\r\n#define WWDG_CFR_W4 WWDG_CFR_W_4\r\n#define WWDG_CFR_W5 WWDG_CFR_W_5\r\n#define WWDG_CFR_W6 WWDG_CFR_W_6\r\n\r\n#define WWDG_CFR_WDGTB_Pos (7U)\r\n#define WWDG_CFR_WDGTB_Msk (0x3U << WWDG_CFR_WDGTB_Pos) /*!< 0x00000180 */\r\n#define WWDG_CFR_WDGTB     WWDG_CFR_WDGTB_Msk           /*!< WDGTB[1:0] bits (Timer Base) */\r\n#define WWDG_CFR_WDGTB_0   (0x1U << WWDG_CFR_WDGTB_Pos) /*!< 0x00000080 */\r\n#define WWDG_CFR_WDGTB_1   (0x2U << WWDG_CFR_WDGTB_Pos) /*!< 0x00000100 */\r\n\r\n/* Legacy defines */\r\n#define WWDG_CFR_WDGTB0 WWDG_CFR_WDGTB_0\r\n#define WWDG_CFR_WDGTB1 WWDG_CFR_WDGTB_1\r\n\r\n#define WWDG_CFR_EWI_Pos (9U)\r\n#define WWDG_CFR_EWI_Msk (0x1U << WWDG_CFR_EWI_Pos) /*!< 0x00000200 */\r\n#define WWDG_CFR_EWI     WWDG_CFR_EWI_Msk           /*!< Early Wakeup Interrupt */\r\n\r\n/*******************  Bit definition for WWDG_SR register  ********************/\r\n#define WWDG_SR_EWIF_Pos (0U)\r\n#define WWDG_SR_EWIF_Msk (0x1U << WWDG_SR_EWIF_Pos) /*!< 0x00000001 */\r\n#define WWDG_SR_EWIF     WWDG_SR_EWIF_Msk           /*!< Early Wakeup Interrupt Flag */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                          SD host Interface                                 */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/******************  Bit definition for SDIO_POWER register  ******************/\r\n#define SDIO_POWER_PWRCTRL_Pos (0U)\r\n#define SDIO_POWER_PWRCTRL_Msk (0x3U << SDIO_POWER_PWRCTRL_Pos) /*!< 0x00000003 */\r\n#define SDIO_POWER_PWRCTRL     SDIO_POWER_PWRCTRL_Msk           /*!< PWRCTRL[1:0] bits (Power supply control bits) */\r\n#define SDIO_POWER_PWRCTRL_0   (0x1U << SDIO_POWER_PWRCTRL_Pos) /*!< 0x01 */\r\n#define SDIO_POWER_PWRCTRL_1   (0x2U << SDIO_POWER_PWRCTRL_Pos) /*!< 0x02 */\r\n\r\n/******************  Bit definition for SDIO_CLKCR register  ******************/\r\n#define SDIO_CLKCR_CLKDIV_Pos (0U)\r\n#define SDIO_CLKCR_CLKDIV_Msk (0xFFU << SDIO_CLKCR_CLKDIV_Pos) /*!< 0x000000FF */\r\n#define SDIO_CLKCR_CLKDIV     SDIO_CLKCR_CLKDIV_Msk            /*!< Clock divide factor */\r\n#define SDIO_CLKCR_CLKEN_Pos  (8U)\r\n#define SDIO_CLKCR_CLKEN_Msk  (0x1U << SDIO_CLKCR_CLKEN_Pos) /*!< 0x00000100 */\r\n#define SDIO_CLKCR_CLKEN      SDIO_CLKCR_CLKEN_Msk           /*!< Clock enable bit */\r\n#define SDIO_CLKCR_PWRSAV_Pos (9U)\r\n#define SDIO_CLKCR_PWRSAV_Msk (0x1U << SDIO_CLKCR_PWRSAV_Pos) /*!< 0x00000200 */\r\n#define SDIO_CLKCR_PWRSAV     SDIO_CLKCR_PWRSAV_Msk           /*!< Power saving configuration bit */\r\n#define SDIO_CLKCR_BYPASS_Pos (10U)\r\n#define SDIO_CLKCR_BYPASS_Msk (0x1U << SDIO_CLKCR_BYPASS_Pos) /*!< 0x00000400 */\r\n#define SDIO_CLKCR_BYPASS     SDIO_CLKCR_BYPASS_Msk           /*!< Clock divider bypass enable bit */\r\n\r\n#define SDIO_CLKCR_WIDBUS_Pos (11U)\r\n#define SDIO_CLKCR_WIDBUS_Msk (0x3U << SDIO_CLKCR_WIDBUS_Pos) /*!< 0x00001800 */\r\n#define SDIO_CLKCR_WIDBUS     SDIO_CLKCR_WIDBUS_Msk           /*!< WIDBUS[1:0] bits (Wide bus mode enable bit) */\r\n#define SDIO_CLKCR_WIDBUS_0   (0x1U << SDIO_CLKCR_WIDBUS_Pos) /*!< 0x0800 */\r\n#define SDIO_CLKCR_WIDBUS_1   (0x2U << SDIO_CLKCR_WIDBUS_Pos) /*!< 0x1000 */\r\n\r\n#define SDIO_CLKCR_NEGEDGE_Pos (13U)\r\n#define SDIO_CLKCR_NEGEDGE_Msk (0x1U << SDIO_CLKCR_NEGEDGE_Pos) /*!< 0x00002000 */\r\n#define SDIO_CLKCR_NEGEDGE     SDIO_CLKCR_NEGEDGE_Msk           /*!< SDIO_CK dephasing selection bit */\r\n#define SDIO_CLKCR_HWFC_EN_Pos (14U)\r\n#define SDIO_CLKCR_HWFC_EN_Msk (0x1U << SDIO_CLKCR_HWFC_EN_Pos) /*!< 0x00004000 */\r\n#define SDIO_CLKCR_HWFC_EN     SDIO_CLKCR_HWFC_EN_Msk           /*!< HW Flow Control enable */\r\n\r\n/*******************  Bit definition for SDIO_ARG register  *******************/\r\n#define SDIO_ARG_CMDARG_Pos (0U)\r\n#define SDIO_ARG_CMDARG_Msk (0xFFFFFFFFU << SDIO_ARG_CMDARG_Pos) /*!< 0xFFFFFFFF */\r\n#define SDIO_ARG_CMDARG     SDIO_ARG_CMDARG_Msk                  /*!< Command argument */\r\n\r\n/*******************  Bit definition for SDIO_CMD register  *******************/\r\n#define SDIO_CMD_CMDINDEX_Pos (0U)\r\n#define SDIO_CMD_CMDINDEX_Msk (0x3FU << SDIO_CMD_CMDINDEX_Pos) /*!< 0x0000003F */\r\n#define SDIO_CMD_CMDINDEX     SDIO_CMD_CMDINDEX_Msk            /*!< Command Index */\r\n\r\n#define SDIO_CMD_WAITRESP_Pos (6U)\r\n#define SDIO_CMD_WAITRESP_Msk (0x3U << SDIO_CMD_WAITRESP_Pos) /*!< 0x000000C0 */\r\n#define SDIO_CMD_WAITRESP     SDIO_CMD_WAITRESP_Msk           /*!< WAITRESP[1:0] bits (Wait for response bits) */\r\n#define SDIO_CMD_WAITRESP_0   (0x1U << SDIO_CMD_WAITRESP_Pos) /*!< 0x0040 */\r\n#define SDIO_CMD_WAITRESP_1   (0x2U << SDIO_CMD_WAITRESP_Pos) /*!< 0x0080 */\r\n\r\n#define SDIO_CMD_WAITINT_Pos     (8U)\r\n#define SDIO_CMD_WAITINT_Msk     (0x1U << SDIO_CMD_WAITINT_Pos) /*!< 0x00000100 */\r\n#define SDIO_CMD_WAITINT         SDIO_CMD_WAITINT_Msk           /*!< CPSM Waits for Interrupt Request */\r\n#define SDIO_CMD_WAITPEND_Pos    (9U)\r\n#define SDIO_CMD_WAITPEND_Msk    (0x1U << SDIO_CMD_WAITPEND_Pos) /*!< 0x00000200 */\r\n#define SDIO_CMD_WAITPEND        SDIO_CMD_WAITPEND_Msk           /*!< CPSM Waits for ends of data transfer (CmdPend internal signal) */\r\n#define SDIO_CMD_CPSMEN_Pos      (10U)\r\n#define SDIO_CMD_CPSMEN_Msk      (0x1U << SDIO_CMD_CPSMEN_Pos) /*!< 0x00000400 */\r\n#define SDIO_CMD_CPSMEN          SDIO_CMD_CPSMEN_Msk           /*!< Command path state machine (CPSM) Enable bit */\r\n#define SDIO_CMD_SDIOSUSPEND_Pos (11U)\r\n#define SDIO_CMD_SDIOSUSPEND_Msk (0x1U << SDIO_CMD_SDIOSUSPEND_Pos) /*!< 0x00000800 */\r\n#define SDIO_CMD_SDIOSUSPEND     SDIO_CMD_SDIOSUSPEND_Msk           /*!< SD I/O suspend command */\r\n#define SDIO_CMD_ENCMDCOMPL_Pos  (12U)\r\n#define SDIO_CMD_ENCMDCOMPL_Msk  (0x1U << SDIO_CMD_ENCMDCOMPL_Pos) /*!< 0x00001000 */\r\n#define SDIO_CMD_ENCMDCOMPL      SDIO_CMD_ENCMDCOMPL_Msk           /*!< Enable CMD completion */\r\n#define SDIO_CMD_NIEN_Pos        (13U)\r\n#define SDIO_CMD_NIEN_Msk        (0x1U << SDIO_CMD_NIEN_Pos) /*!< 0x00002000 */\r\n#define SDIO_CMD_NIEN            SDIO_CMD_NIEN_Msk           /*!< Not Interrupt Enable */\r\n#define SDIO_CMD_CEATACMD_Pos    (14U)\r\n#define SDIO_CMD_CEATACMD_Msk    (0x1U << SDIO_CMD_CEATACMD_Pos) /*!< 0x00004000 */\r\n#define SDIO_CMD_CEATACMD        SDIO_CMD_CEATACMD_Msk           /*!< CE-ATA command */\r\n\r\n/*****************  Bit definition for SDIO_RESPCMD register  *****************/\r\n#define SDIO_RESPCMD_RESPCMD_Pos (0U)\r\n#define SDIO_RESPCMD_RESPCMD_Msk (0x3FU << SDIO_RESPCMD_RESPCMD_Pos) /*!< 0x0000003F */\r\n#define SDIO_RESPCMD_RESPCMD     SDIO_RESPCMD_RESPCMD_Msk            /*!< Response command index */\r\n\r\n/******************  Bit definition for SDIO_RESP0 register  ******************/\r\n#define SDIO_RESP0_CARDSTATUS0_Pos (0U)\r\n#define SDIO_RESP0_CARDSTATUS0_Msk (0xFFFFFFFFU << SDIO_RESP0_CARDSTATUS0_Pos) /*!< 0xFFFFFFFF */\r\n#define SDIO_RESP0_CARDSTATUS0     SDIO_RESP0_CARDSTATUS0_Msk                  /*!< Card Status */\r\n\r\n/******************  Bit definition for SDIO_RESP1 register  ******************/\r\n#define SDIO_RESP1_CARDSTATUS1_Pos (0U)\r\n#define SDIO_RESP1_CARDSTATUS1_Msk (0xFFFFFFFFU << SDIO_RESP1_CARDSTATUS1_Pos) /*!< 0xFFFFFFFF */\r\n#define SDIO_RESP1_CARDSTATUS1     SDIO_RESP1_CARDSTATUS1_Msk                  /*!< Card Status */\r\n\r\n/******************  Bit definition for SDIO_RESP2 register  ******************/\r\n#define SDIO_RESP2_CARDSTATUS2_Pos (0U)\r\n#define SDIO_RESP2_CARDSTATUS2_Msk (0xFFFFFFFFU << SDIO_RESP2_CARDSTATUS2_Pos) /*!< 0xFFFFFFFF */\r\n#define SDIO_RESP2_CARDSTATUS2     SDIO_RESP2_CARDSTATUS2_Msk                  /*!< Card Status */\r\n\r\n/******************  Bit definition for SDIO_RESP3 register  ******************/\r\n#define SDIO_RESP3_CARDSTATUS3_Pos (0U)\r\n#define SDIO_RESP3_CARDSTATUS3_Msk (0xFFFFFFFFU << SDIO_RESP3_CARDSTATUS3_Pos) /*!< 0xFFFFFFFF */\r\n#define SDIO_RESP3_CARDSTATUS3     SDIO_RESP3_CARDSTATUS3_Msk                  /*!< Card Status */\r\n\r\n/******************  Bit definition for SDIO_RESP4 register  ******************/\r\n#define SDIO_RESP4_CARDSTATUS4_Pos (0U)\r\n#define SDIO_RESP4_CARDSTATUS4_Msk (0xFFFFFFFFU << SDIO_RESP4_CARDSTATUS4_Pos) /*!< 0xFFFFFFFF */\r\n#define SDIO_RESP4_CARDSTATUS4     SDIO_RESP4_CARDSTATUS4_Msk                  /*!< Card Status */\r\n\r\n/******************  Bit definition for SDIO_DTIMER register  *****************/\r\n#define SDIO_DTIMER_DATATIME_Pos (0U)\r\n#define SDIO_DTIMER_DATATIME_Msk (0xFFFFFFFFU << SDIO_DTIMER_DATATIME_Pos) /*!< 0xFFFFFFFF */\r\n#define SDIO_DTIMER_DATATIME     SDIO_DTIMER_DATATIME_Msk                  /*!< Data timeout period. */\r\n\r\n/******************  Bit definition for SDIO_DLEN register  *******************/\r\n#define SDIO_DLEN_DATALENGTH_Pos (0U)\r\n#define SDIO_DLEN_DATALENGTH_Msk (0x1FFFFFFU << SDIO_DLEN_DATALENGTH_Pos) /*!< 0x01FFFFFF */\r\n#define SDIO_DLEN_DATALENGTH     SDIO_DLEN_DATALENGTH_Msk                 /*!< Data length value */\r\n\r\n/******************  Bit definition for SDIO_DCTRL register  ******************/\r\n#define SDIO_DCTRL_DTEN_Pos   (0U)\r\n#define SDIO_DCTRL_DTEN_Msk   (0x1U << SDIO_DCTRL_DTEN_Pos) /*!< 0x00000001 */\r\n#define SDIO_DCTRL_DTEN       SDIO_DCTRL_DTEN_Msk           /*!< Data transfer enabled bit */\r\n#define SDIO_DCTRL_DTDIR_Pos  (1U)\r\n#define SDIO_DCTRL_DTDIR_Msk  (0x1U << SDIO_DCTRL_DTDIR_Pos) /*!< 0x00000002 */\r\n#define SDIO_DCTRL_DTDIR      SDIO_DCTRL_DTDIR_Msk           /*!< Data transfer direction selection */\r\n#define SDIO_DCTRL_DTMODE_Pos (2U)\r\n#define SDIO_DCTRL_DTMODE_Msk (0x1U << SDIO_DCTRL_DTMODE_Pos) /*!< 0x00000004 */\r\n#define SDIO_DCTRL_DTMODE     SDIO_DCTRL_DTMODE_Msk           /*!< Data transfer mode selection */\r\n#define SDIO_DCTRL_DMAEN_Pos  (3U)\r\n#define SDIO_DCTRL_DMAEN_Msk  (0x1U << SDIO_DCTRL_DMAEN_Pos) /*!< 0x00000008 */\r\n#define SDIO_DCTRL_DMAEN      SDIO_DCTRL_DMAEN_Msk           /*!< DMA enabled bit */\r\n\r\n#define SDIO_DCTRL_DBLOCKSIZE_Pos (4U)\r\n#define SDIO_DCTRL_DBLOCKSIZE_Msk (0xFU << SDIO_DCTRL_DBLOCKSIZE_Pos) /*!< 0x000000F0 */\r\n#define SDIO_DCTRL_DBLOCKSIZE     SDIO_DCTRL_DBLOCKSIZE_Msk           /*!< DBLOCKSIZE[3:0] bits (Data block size) */\r\n#define SDIO_DCTRL_DBLOCKSIZE_0   (0x1U << SDIO_DCTRL_DBLOCKSIZE_Pos) /*!< 0x0010 */\r\n#define SDIO_DCTRL_DBLOCKSIZE_1   (0x2U << SDIO_DCTRL_DBLOCKSIZE_Pos) /*!< 0x0020 */\r\n#define SDIO_DCTRL_DBLOCKSIZE_2   (0x4U << SDIO_DCTRL_DBLOCKSIZE_Pos) /*!< 0x0040 */\r\n#define SDIO_DCTRL_DBLOCKSIZE_3   (0x8U << SDIO_DCTRL_DBLOCKSIZE_Pos) /*!< 0x0080 */\r\n\r\n#define SDIO_DCTRL_RWSTART_Pos (8U)\r\n#define SDIO_DCTRL_RWSTART_Msk (0x1U << SDIO_DCTRL_RWSTART_Pos) /*!< 0x00000100 */\r\n#define SDIO_DCTRL_RWSTART     SDIO_DCTRL_RWSTART_Msk           /*!< Read wait start */\r\n#define SDIO_DCTRL_RWSTOP_Pos  (9U)\r\n#define SDIO_DCTRL_RWSTOP_Msk  (0x1U << SDIO_DCTRL_RWSTOP_Pos) /*!< 0x00000200 */\r\n#define SDIO_DCTRL_RWSTOP      SDIO_DCTRL_RWSTOP_Msk           /*!< Read wait stop */\r\n#define SDIO_DCTRL_RWMOD_Pos   (10U)\r\n#define SDIO_DCTRL_RWMOD_Msk   (0x1U << SDIO_DCTRL_RWMOD_Pos) /*!< 0x00000400 */\r\n#define SDIO_DCTRL_RWMOD       SDIO_DCTRL_RWMOD_Msk           /*!< Read wait mode */\r\n#define SDIO_DCTRL_SDIOEN_Pos  (11U)\r\n#define SDIO_DCTRL_SDIOEN_Msk  (0x1U << SDIO_DCTRL_SDIOEN_Pos) /*!< 0x00000800 */\r\n#define SDIO_DCTRL_SDIOEN      SDIO_DCTRL_SDIOEN_Msk           /*!< SD I/O enable functions */\r\n\r\n/******************  Bit definition for SDIO_DCOUNT register  *****************/\r\n#define SDIO_DCOUNT_DATACOUNT_Pos (0U)\r\n#define SDIO_DCOUNT_DATACOUNT_Msk (0x1FFFFFFU << SDIO_DCOUNT_DATACOUNT_Pos) /*!< 0x01FFFFFF */\r\n#define SDIO_DCOUNT_DATACOUNT     SDIO_DCOUNT_DATACOUNT_Msk                 /*!< Data count value */\r\n\r\n/******************  Bit definition for SDIO_STA register  ********************/\r\n#define SDIO_STA_CCRCFAIL_Pos (0U)\r\n#define SDIO_STA_CCRCFAIL_Msk (0x1U << SDIO_STA_CCRCFAIL_Pos) /*!< 0x00000001 */\r\n#define SDIO_STA_CCRCFAIL     SDIO_STA_CCRCFAIL_Msk           /*!< Command response received (CRC check failed) */\r\n#define SDIO_STA_DCRCFAIL_Pos (1U)\r\n#define SDIO_STA_DCRCFAIL_Msk (0x1U << SDIO_STA_DCRCFAIL_Pos) /*!< 0x00000002 */\r\n#define SDIO_STA_DCRCFAIL     SDIO_STA_DCRCFAIL_Msk           /*!< Data block sent/received (CRC check failed) */\r\n#define SDIO_STA_CTIMEOUT_Pos (2U)\r\n#define SDIO_STA_CTIMEOUT_Msk (0x1U << SDIO_STA_CTIMEOUT_Pos) /*!< 0x00000004 */\r\n#define SDIO_STA_CTIMEOUT     SDIO_STA_CTIMEOUT_Msk           /*!< Command response timeout */\r\n#define SDIO_STA_DTIMEOUT_Pos (3U)\r\n#define SDIO_STA_DTIMEOUT_Msk (0x1U << SDIO_STA_DTIMEOUT_Pos) /*!< 0x00000008 */\r\n#define SDIO_STA_DTIMEOUT     SDIO_STA_DTIMEOUT_Msk           /*!< Data timeout */\r\n#define SDIO_STA_TXUNDERR_Pos (4U)\r\n#define SDIO_STA_TXUNDERR_Msk (0x1U << SDIO_STA_TXUNDERR_Pos) /*!< 0x00000010 */\r\n#define SDIO_STA_TXUNDERR     SDIO_STA_TXUNDERR_Msk           /*!< Transmit FIFO underrun error */\r\n#define SDIO_STA_RXOVERR_Pos  (5U)\r\n#define SDIO_STA_RXOVERR_Msk  (0x1U << SDIO_STA_RXOVERR_Pos) /*!< 0x00000020 */\r\n#define SDIO_STA_RXOVERR      SDIO_STA_RXOVERR_Msk           /*!< Received FIFO overrun error */\r\n#define SDIO_STA_CMDREND_Pos  (6U)\r\n#define SDIO_STA_CMDREND_Msk  (0x1U << SDIO_STA_CMDREND_Pos) /*!< 0x00000040 */\r\n#define SDIO_STA_CMDREND      SDIO_STA_CMDREND_Msk           /*!< Command response received (CRC check passed) */\r\n#define SDIO_STA_CMDSENT_Pos  (7U)\r\n#define SDIO_STA_CMDSENT_Msk  (0x1U << SDIO_STA_CMDSENT_Pos) /*!< 0x00000080 */\r\n#define SDIO_STA_CMDSENT      SDIO_STA_CMDSENT_Msk           /*!< Command sent (no response required) */\r\n#define SDIO_STA_DATAEND_Pos  (8U)\r\n#define SDIO_STA_DATAEND_Msk  (0x1U << SDIO_STA_DATAEND_Pos) /*!< 0x00000100 */\r\n#define SDIO_STA_DATAEND      SDIO_STA_DATAEND_Msk           /*!< Data end (data counter, SDIDCOUNT, is zero) */\r\n#define SDIO_STA_STBITERR_Pos (9U)\r\n#define SDIO_STA_STBITERR_Msk (0x1U << SDIO_STA_STBITERR_Pos) /*!< 0x00000200 */\r\n#define SDIO_STA_STBITERR     SDIO_STA_STBITERR_Msk           /*!< Start bit not detected on all data signals in wide bus mode */\r\n#define SDIO_STA_DBCKEND_Pos  (10U)\r\n#define SDIO_STA_DBCKEND_Msk  (0x1U << SDIO_STA_DBCKEND_Pos) /*!< 0x00000400 */\r\n#define SDIO_STA_DBCKEND      SDIO_STA_DBCKEND_Msk           /*!< Data block sent/received (CRC check passed) */\r\n#define SDIO_STA_CMDACT_Pos   (11U)\r\n#define SDIO_STA_CMDACT_Msk   (0x1U << SDIO_STA_CMDACT_Pos) /*!< 0x00000800 */\r\n#define SDIO_STA_CMDACT       SDIO_STA_CMDACT_Msk           /*!< Command transfer in progress */\r\n#define SDIO_STA_TXACT_Pos    (12U)\r\n#define SDIO_STA_TXACT_Msk    (0x1U << SDIO_STA_TXACT_Pos) /*!< 0x00001000 */\r\n#define SDIO_STA_TXACT        SDIO_STA_TXACT_Msk           /*!< Data transmit in progress */\r\n#define SDIO_STA_RXACT_Pos    (13U)\r\n#define SDIO_STA_RXACT_Msk    (0x1U << SDIO_STA_RXACT_Pos) /*!< 0x00002000 */\r\n#define SDIO_STA_RXACT        SDIO_STA_RXACT_Msk           /*!< Data receive in progress */\r\n#define SDIO_STA_TXFIFOHE_Pos (14U)\r\n#define SDIO_STA_TXFIFOHE_Msk (0x1U << SDIO_STA_TXFIFOHE_Pos) /*!< 0x00004000 */\r\n#define SDIO_STA_TXFIFOHE     SDIO_STA_TXFIFOHE_Msk           /*!< Transmit FIFO Half Empty: at least 8 words can be written into the FIFO */\r\n#define SDIO_STA_RXFIFOHF_Pos (15U)\r\n#define SDIO_STA_RXFIFOHF_Msk (0x1U << SDIO_STA_RXFIFOHF_Pos) /*!< 0x00008000 */\r\n#define SDIO_STA_RXFIFOHF     SDIO_STA_RXFIFOHF_Msk           /*!< Receive FIFO Half Full: there are at least 8 words in the FIFO */\r\n#define SDIO_STA_TXFIFOF_Pos  (16U)\r\n#define SDIO_STA_TXFIFOF_Msk  (0x1U << SDIO_STA_TXFIFOF_Pos) /*!< 0x00010000 */\r\n#define SDIO_STA_TXFIFOF      SDIO_STA_TXFIFOF_Msk           /*!< Transmit FIFO full */\r\n#define SDIO_STA_RXFIFOF_Pos  (17U)\r\n#define SDIO_STA_RXFIFOF_Msk  (0x1U << SDIO_STA_RXFIFOF_Pos) /*!< 0x00020000 */\r\n#define SDIO_STA_RXFIFOF      SDIO_STA_RXFIFOF_Msk           /*!< Receive FIFO full */\r\n#define SDIO_STA_TXFIFOE_Pos  (18U)\r\n#define SDIO_STA_TXFIFOE_Msk  (0x1U << SDIO_STA_TXFIFOE_Pos) /*!< 0x00040000 */\r\n#define SDIO_STA_TXFIFOE      SDIO_STA_TXFIFOE_Msk           /*!< Transmit FIFO empty */\r\n#define SDIO_STA_RXFIFOE_Pos  (19U)\r\n#define SDIO_STA_RXFIFOE_Msk  (0x1U << SDIO_STA_RXFIFOE_Pos) /*!< 0x00080000 */\r\n#define SDIO_STA_RXFIFOE      SDIO_STA_RXFIFOE_Msk           /*!< Receive FIFO empty */\r\n#define SDIO_STA_TXDAVL_Pos   (20U)\r\n#define SDIO_STA_TXDAVL_Msk   (0x1U << SDIO_STA_TXDAVL_Pos) /*!< 0x00100000 */\r\n#define SDIO_STA_TXDAVL       SDIO_STA_TXDAVL_Msk           /*!< Data available in transmit FIFO */\r\n#define SDIO_STA_RXDAVL_Pos   (21U)\r\n#define SDIO_STA_RXDAVL_Msk   (0x1U << SDIO_STA_RXDAVL_Pos) /*!< 0x00200000 */\r\n#define SDIO_STA_RXDAVL       SDIO_STA_RXDAVL_Msk           /*!< Data available in receive FIFO */\r\n#define SDIO_STA_SDIOIT_Pos   (22U)\r\n#define SDIO_STA_SDIOIT_Msk   (0x1U << SDIO_STA_SDIOIT_Pos) /*!< 0x00400000 */\r\n#define SDIO_STA_SDIOIT       SDIO_STA_SDIOIT_Msk           /*!< SDIO interrupt received */\r\n#define SDIO_STA_CEATAEND_Pos (23U)\r\n#define SDIO_STA_CEATAEND_Msk (0x1U << SDIO_STA_CEATAEND_Pos) /*!< 0x00800000 */\r\n#define SDIO_STA_CEATAEND     SDIO_STA_CEATAEND_Msk           /*!< CE-ATA command completion signal received for CMD61 */\r\n\r\n/*******************  Bit definition for SDIO_ICR register  *******************/\r\n#define SDIO_ICR_CCRCFAILC_Pos (0U)\r\n#define SDIO_ICR_CCRCFAILC_Msk (0x1U << SDIO_ICR_CCRCFAILC_Pos) /*!< 0x00000001 */\r\n#define SDIO_ICR_CCRCFAILC     SDIO_ICR_CCRCFAILC_Msk           /*!< CCRCFAIL flag clear bit */\r\n#define SDIO_ICR_DCRCFAILC_Pos (1U)\r\n#define SDIO_ICR_DCRCFAILC_Msk (0x1U << SDIO_ICR_DCRCFAILC_Pos) /*!< 0x00000002 */\r\n#define SDIO_ICR_DCRCFAILC     SDIO_ICR_DCRCFAILC_Msk           /*!< DCRCFAIL flag clear bit */\r\n#define SDIO_ICR_CTIMEOUTC_Pos (2U)\r\n#define SDIO_ICR_CTIMEOUTC_Msk (0x1U << SDIO_ICR_CTIMEOUTC_Pos) /*!< 0x00000004 */\r\n#define SDIO_ICR_CTIMEOUTC     SDIO_ICR_CTIMEOUTC_Msk           /*!< CTIMEOUT flag clear bit */\r\n#define SDIO_ICR_DTIMEOUTC_Pos (3U)\r\n#define SDIO_ICR_DTIMEOUTC_Msk (0x1U << SDIO_ICR_DTIMEOUTC_Pos) /*!< 0x00000008 */\r\n#define SDIO_ICR_DTIMEOUTC     SDIO_ICR_DTIMEOUTC_Msk           /*!< DTIMEOUT flag clear bit */\r\n#define SDIO_ICR_TXUNDERRC_Pos (4U)\r\n#define SDIO_ICR_TXUNDERRC_Msk (0x1U << SDIO_ICR_TXUNDERRC_Pos) /*!< 0x00000010 */\r\n#define SDIO_ICR_TXUNDERRC     SDIO_ICR_TXUNDERRC_Msk           /*!< TXUNDERR flag clear bit */\r\n#define SDIO_ICR_RXOVERRC_Pos  (5U)\r\n#define SDIO_ICR_RXOVERRC_Msk  (0x1U << SDIO_ICR_RXOVERRC_Pos) /*!< 0x00000020 */\r\n#define SDIO_ICR_RXOVERRC      SDIO_ICR_RXOVERRC_Msk           /*!< RXOVERR flag clear bit */\r\n#define SDIO_ICR_CMDRENDC_Pos  (6U)\r\n#define SDIO_ICR_CMDRENDC_Msk  (0x1U << SDIO_ICR_CMDRENDC_Pos) /*!< 0x00000040 */\r\n#define SDIO_ICR_CMDRENDC      SDIO_ICR_CMDRENDC_Msk           /*!< CMDREND flag clear bit */\r\n#define SDIO_ICR_CMDSENTC_Pos  (7U)\r\n#define SDIO_ICR_CMDSENTC_Msk  (0x1U << SDIO_ICR_CMDSENTC_Pos) /*!< 0x00000080 */\r\n#define SDIO_ICR_CMDSENTC      SDIO_ICR_CMDSENTC_Msk           /*!< CMDSENT flag clear bit */\r\n#define SDIO_ICR_DATAENDC_Pos  (8U)\r\n#define SDIO_ICR_DATAENDC_Msk  (0x1U << SDIO_ICR_DATAENDC_Pos) /*!< 0x00000100 */\r\n#define SDIO_ICR_DATAENDC      SDIO_ICR_DATAENDC_Msk           /*!< DATAEND flag clear bit */\r\n#define SDIO_ICR_STBITERRC_Pos (9U)\r\n#define SDIO_ICR_STBITERRC_Msk (0x1U << SDIO_ICR_STBITERRC_Pos) /*!< 0x00000200 */\r\n#define SDIO_ICR_STBITERRC     SDIO_ICR_STBITERRC_Msk           /*!< STBITERR flag clear bit */\r\n#define SDIO_ICR_DBCKENDC_Pos  (10U)\r\n#define SDIO_ICR_DBCKENDC_Msk  (0x1U << SDIO_ICR_DBCKENDC_Pos) /*!< 0x00000400 */\r\n#define SDIO_ICR_DBCKENDC      SDIO_ICR_DBCKENDC_Msk           /*!< DBCKEND flag clear bit */\r\n#define SDIO_ICR_SDIOITC_Pos   (22U)\r\n#define SDIO_ICR_SDIOITC_Msk   (0x1U << SDIO_ICR_SDIOITC_Pos) /*!< 0x00400000 */\r\n#define SDIO_ICR_SDIOITC       SDIO_ICR_SDIOITC_Msk           /*!< SDIOIT flag clear bit */\r\n#define SDIO_ICR_CEATAENDC_Pos (23U)\r\n#define SDIO_ICR_CEATAENDC_Msk (0x1U << SDIO_ICR_CEATAENDC_Pos) /*!< 0x00800000 */\r\n#define SDIO_ICR_CEATAENDC     SDIO_ICR_CEATAENDC_Msk           /*!< CEATAEND flag clear bit */\r\n\r\n/******************  Bit definition for SDIO_MASK register  *******************/\r\n#define SDIO_MASK_CCRCFAILIE_Pos (0U)\r\n#define SDIO_MASK_CCRCFAILIE_Msk (0x1U << SDIO_MASK_CCRCFAILIE_Pos) /*!< 0x00000001 */\r\n#define SDIO_MASK_CCRCFAILIE     SDIO_MASK_CCRCFAILIE_Msk           /*!< Command CRC Fail Interrupt Enable */\r\n#define SDIO_MASK_DCRCFAILIE_Pos (1U)\r\n#define SDIO_MASK_DCRCFAILIE_Msk (0x1U << SDIO_MASK_DCRCFAILIE_Pos) /*!< 0x00000002 */\r\n#define SDIO_MASK_DCRCFAILIE     SDIO_MASK_DCRCFAILIE_Msk           /*!< Data CRC Fail Interrupt Enable */\r\n#define SDIO_MASK_CTIMEOUTIE_Pos (2U)\r\n#define SDIO_MASK_CTIMEOUTIE_Msk (0x1U << SDIO_MASK_CTIMEOUTIE_Pos) /*!< 0x00000004 */\r\n#define SDIO_MASK_CTIMEOUTIE     SDIO_MASK_CTIMEOUTIE_Msk           /*!< Command TimeOut Interrupt Enable */\r\n#define SDIO_MASK_DTIMEOUTIE_Pos (3U)\r\n#define SDIO_MASK_DTIMEOUTIE_Msk (0x1U << SDIO_MASK_DTIMEOUTIE_Pos) /*!< 0x00000008 */\r\n#define SDIO_MASK_DTIMEOUTIE     SDIO_MASK_DTIMEOUTIE_Msk           /*!< Data TimeOut Interrupt Enable */\r\n#define SDIO_MASK_TXUNDERRIE_Pos (4U)\r\n#define SDIO_MASK_TXUNDERRIE_Msk (0x1U << SDIO_MASK_TXUNDERRIE_Pos) /*!< 0x00000010 */\r\n#define SDIO_MASK_TXUNDERRIE     SDIO_MASK_TXUNDERRIE_Msk           /*!< Tx FIFO UnderRun Error Interrupt Enable */\r\n#define SDIO_MASK_RXOVERRIE_Pos  (5U)\r\n#define SDIO_MASK_RXOVERRIE_Msk  (0x1U << SDIO_MASK_RXOVERRIE_Pos) /*!< 0x00000020 */\r\n#define SDIO_MASK_RXOVERRIE      SDIO_MASK_RXOVERRIE_Msk           /*!< Rx FIFO OverRun Error Interrupt Enable */\r\n#define SDIO_MASK_CMDRENDIE_Pos  (6U)\r\n#define SDIO_MASK_CMDRENDIE_Msk  (0x1U << SDIO_MASK_CMDRENDIE_Pos) /*!< 0x00000040 */\r\n#define SDIO_MASK_CMDRENDIE      SDIO_MASK_CMDRENDIE_Msk           /*!< Command Response Received Interrupt Enable */\r\n#define SDIO_MASK_CMDSENTIE_Pos  (7U)\r\n#define SDIO_MASK_CMDSENTIE_Msk  (0x1U << SDIO_MASK_CMDSENTIE_Pos) /*!< 0x00000080 */\r\n#define SDIO_MASK_CMDSENTIE      SDIO_MASK_CMDSENTIE_Msk           /*!< Command Sent Interrupt Enable */\r\n#define SDIO_MASK_DATAENDIE_Pos  (8U)\r\n#define SDIO_MASK_DATAENDIE_Msk  (0x1U << SDIO_MASK_DATAENDIE_Pos) /*!< 0x00000100 */\r\n#define SDIO_MASK_DATAENDIE      SDIO_MASK_DATAENDIE_Msk           /*!< Data End Interrupt Enable */\r\n#define SDIO_MASK_STBITERRIE_Pos (9U)\r\n#define SDIO_MASK_STBITERRIE_Msk (0x1U << SDIO_MASK_STBITERRIE_Pos) /*!< 0x00000200 */\r\n#define SDIO_MASK_STBITERRIE     SDIO_MASK_STBITERRIE_Msk           /*!< Start Bit Error Interrupt Enable */\r\n#define SDIO_MASK_DBCKENDIE_Pos  (10U)\r\n#define SDIO_MASK_DBCKENDIE_Msk  (0x1U << SDIO_MASK_DBCKENDIE_Pos) /*!< 0x00000400 */\r\n#define SDIO_MASK_DBCKENDIE      SDIO_MASK_DBCKENDIE_Msk           /*!< Data Block End Interrupt Enable */\r\n#define SDIO_MASK_CMDACTIE_Pos   (11U)\r\n#define SDIO_MASK_CMDACTIE_Msk   (0x1U << SDIO_MASK_CMDACTIE_Pos) /*!< 0x00000800 */\r\n#define SDIO_MASK_CMDACTIE       SDIO_MASK_CMDACTIE_Msk           /*!< Command Acting Interrupt Enable */\r\n#define SDIO_MASK_TXACTIE_Pos    (12U)\r\n#define SDIO_MASK_TXACTIE_Msk    (0x1U << SDIO_MASK_TXACTIE_Pos) /*!< 0x00001000 */\r\n#define SDIO_MASK_TXACTIE        SDIO_MASK_TXACTIE_Msk           /*!< Data Transmit Acting Interrupt Enable */\r\n#define SDIO_MASK_RXACTIE_Pos    (13U)\r\n#define SDIO_MASK_RXACTIE_Msk    (0x1U << SDIO_MASK_RXACTIE_Pos) /*!< 0x00002000 */\r\n#define SDIO_MASK_RXACTIE        SDIO_MASK_RXACTIE_Msk           /*!< Data receive acting interrupt enabled */\r\n#define SDIO_MASK_TXFIFOHEIE_Pos (14U)\r\n#define SDIO_MASK_TXFIFOHEIE_Msk (0x1U << SDIO_MASK_TXFIFOHEIE_Pos) /*!< 0x00004000 */\r\n#define SDIO_MASK_TXFIFOHEIE     SDIO_MASK_TXFIFOHEIE_Msk           /*!< Tx FIFO Half Empty interrupt Enable */\r\n#define SDIO_MASK_RXFIFOHFIE_Pos (15U)\r\n#define SDIO_MASK_RXFIFOHFIE_Msk (0x1U << SDIO_MASK_RXFIFOHFIE_Pos) /*!< 0x00008000 */\r\n#define SDIO_MASK_RXFIFOHFIE     SDIO_MASK_RXFIFOHFIE_Msk           /*!< Rx FIFO Half Full interrupt Enable */\r\n#define SDIO_MASK_TXFIFOFIE_Pos  (16U)\r\n#define SDIO_MASK_TXFIFOFIE_Msk  (0x1U << SDIO_MASK_TXFIFOFIE_Pos) /*!< 0x00010000 */\r\n#define SDIO_MASK_TXFIFOFIE      SDIO_MASK_TXFIFOFIE_Msk           /*!< Tx FIFO Full interrupt Enable */\r\n#define SDIO_MASK_RXFIFOFIE_Pos  (17U)\r\n#define SDIO_MASK_RXFIFOFIE_Msk  (0x1U << SDIO_MASK_RXFIFOFIE_Pos) /*!< 0x00020000 */\r\n#define SDIO_MASK_RXFIFOFIE      SDIO_MASK_RXFIFOFIE_Msk           /*!< Rx FIFO Full interrupt Enable */\r\n#define SDIO_MASK_TXFIFOEIE_Pos  (18U)\r\n#define SDIO_MASK_TXFIFOEIE_Msk  (0x1U << SDIO_MASK_TXFIFOEIE_Pos) /*!< 0x00040000 */\r\n#define SDIO_MASK_TXFIFOEIE      SDIO_MASK_TXFIFOEIE_Msk           /*!< Tx FIFO Empty interrupt Enable */\r\n#define SDIO_MASK_RXFIFOEIE_Pos  (19U)\r\n#define SDIO_MASK_RXFIFOEIE_Msk  (0x1U << SDIO_MASK_RXFIFOEIE_Pos) /*!< 0x00080000 */\r\n#define SDIO_MASK_RXFIFOEIE      SDIO_MASK_RXFIFOEIE_Msk           /*!< Rx FIFO Empty interrupt Enable */\r\n#define SDIO_MASK_TXDAVLIE_Pos   (20U)\r\n#define SDIO_MASK_TXDAVLIE_Msk   (0x1U << SDIO_MASK_TXDAVLIE_Pos) /*!< 0x00100000 */\r\n#define SDIO_MASK_TXDAVLIE       SDIO_MASK_TXDAVLIE_Msk           /*!< Data available in Tx FIFO interrupt Enable */\r\n#define SDIO_MASK_RXDAVLIE_Pos   (21U)\r\n#define SDIO_MASK_RXDAVLIE_Msk   (0x1U << SDIO_MASK_RXDAVLIE_Pos) /*!< 0x00200000 */\r\n#define SDIO_MASK_RXDAVLIE       SDIO_MASK_RXDAVLIE_Msk           /*!< Data available in Rx FIFO interrupt Enable */\r\n#define SDIO_MASK_SDIOITIE_Pos   (22U)\r\n#define SDIO_MASK_SDIOITIE_Msk   (0x1U << SDIO_MASK_SDIOITIE_Pos) /*!< 0x00400000 */\r\n#define SDIO_MASK_SDIOITIE       SDIO_MASK_SDIOITIE_Msk           /*!< SDIO Mode Interrupt Received interrupt Enable */\r\n#define SDIO_MASK_CEATAENDIE_Pos (23U)\r\n#define SDIO_MASK_CEATAENDIE_Msk (0x1U << SDIO_MASK_CEATAENDIE_Pos) /*!< 0x00800000 */\r\n#define SDIO_MASK_CEATAENDIE     SDIO_MASK_CEATAENDIE_Msk           /*!< CE-ATA command completion signal received Interrupt Enable */\r\n\r\n/*****************  Bit definition for SDIO_FIFOCNT register  *****************/\r\n#define SDIO_FIFOCNT_FIFOCOUNT_Pos (0U)\r\n#define SDIO_FIFOCNT_FIFOCOUNT_Msk (0xFFFFFFU << SDIO_FIFOCNT_FIFOCOUNT_Pos) /*!< 0x00FFFFFF */\r\n#define SDIO_FIFOCNT_FIFOCOUNT     SDIO_FIFOCNT_FIFOCOUNT_Msk                /*!< Remaining number of words to be written to or read from the FIFO */\r\n\r\n/******************  Bit definition for SDIO_FIFO register  *******************/\r\n#define SDIO_FIFO_FIFODATA_Pos (0U)\r\n#define SDIO_FIFO_FIFODATA_Msk (0xFFFFFFFFU << SDIO_FIFO_FIFODATA_Pos) /*!< 0xFFFFFFFF */\r\n#define SDIO_FIFO_FIFODATA     SDIO_FIFO_FIFODATA_Msk                  /*!< Receive and transmit FIFO data */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                                   USB Device FS                            */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*!< Endpoint-specific registers */\r\n#define USB_EP0R USB_BASE                /*!< Endpoint 0 register address */\r\n#define USB_EP1R (USB_BASE + 0x00000004) /*!< Endpoint 1 register address */\r\n#define USB_EP2R (USB_BASE + 0x00000008) /*!< Endpoint 2 register address */\r\n#define USB_EP3R (USB_BASE + 0x0000000C) /*!< Endpoint 3 register address */\r\n#define USB_EP4R (USB_BASE + 0x00000010) /*!< Endpoint 4 register address */\r\n#define USB_EP5R (USB_BASE + 0x00000014) /*!< Endpoint 5 register address */\r\n#define USB_EP6R (USB_BASE + 0x00000018) /*!< Endpoint 6 register address */\r\n#define USB_EP7R (USB_BASE + 0x0000001C) /*!< Endpoint 7 register address */\r\n\r\n/* bit positions */\r\n#define USB_EP_CTR_RX_Pos    (15U)\r\n#define USB_EP_CTR_RX_Msk    (0x1U << USB_EP_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP_CTR_RX        USB_EP_CTR_RX_Msk           /*!< EndPoint Correct TRansfer RX */\r\n#define USB_EP_DTOG_RX_Pos   (14U)\r\n#define USB_EP_DTOG_RX_Msk   (0x1U << USB_EP_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP_DTOG_RX       USB_EP_DTOG_RX_Msk           /*!< EndPoint Data TOGGLE RX */\r\n#define USB_EPRX_STAT_Pos    (12U)\r\n#define USB_EPRX_STAT_Msk    (0x3U << USB_EPRX_STAT_Pos) /*!< 0x00003000 */\r\n#define USB_EPRX_STAT        USB_EPRX_STAT_Msk           /*!< EndPoint RX STATus bit field */\r\n#define USB_EP_SETUP_Pos     (11U)\r\n#define USB_EP_SETUP_Msk     (0x1U << USB_EP_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP_SETUP         USB_EP_SETUP_Msk           /*!< EndPoint SETUP */\r\n#define USB_EP_T_FIELD_Pos   (9U)\r\n#define USB_EP_T_FIELD_Msk   (0x3U << USB_EP_T_FIELD_Pos) /*!< 0x00000600 */\r\n#define USB_EP_T_FIELD       USB_EP_T_FIELD_Msk           /*!< EndPoint TYPE */\r\n#define USB_EP_KIND_Pos      (8U)\r\n#define USB_EP_KIND_Msk      (0x1U << USB_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP_KIND          USB_EP_KIND_Msk           /*!< EndPoint KIND */\r\n#define USB_EP_CTR_TX_Pos    (7U)\r\n#define USB_EP_CTR_TX_Msk    (0x1U << USB_EP_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP_CTR_TX        USB_EP_CTR_TX_Msk           /*!< EndPoint Correct TRansfer TX */\r\n#define USB_EP_DTOG_TX_Pos   (6U)\r\n#define USB_EP_DTOG_TX_Msk   (0x1U << USB_EP_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP_DTOG_TX       USB_EP_DTOG_TX_Msk           /*!< EndPoint Data TOGGLE TX */\r\n#define USB_EPTX_STAT_Pos    (4U)\r\n#define USB_EPTX_STAT_Msk    (0x3U << USB_EPTX_STAT_Pos) /*!< 0x00000030 */\r\n#define USB_EPTX_STAT        USB_EPTX_STAT_Msk           /*!< EndPoint TX STATus bit field */\r\n#define USB_EPADDR_FIELD_Pos (0U)\r\n#define USB_EPADDR_FIELD_Msk (0xFU << USB_EPADDR_FIELD_Pos) /*!< 0x0000000F */\r\n#define USB_EPADDR_FIELD     USB_EPADDR_FIELD_Msk           /*!< EndPoint ADDRess FIELD */\r\n\r\n/* EndPoint REGister MASK (no toggle fields) */\r\n#define USB_EPREG_MASK (USB_EP_CTR_RX | USB_EP_SETUP | USB_EP_T_FIELD | USB_EP_KIND | USB_EP_CTR_TX | USB_EPADDR_FIELD)\r\n/*!< EP_TYPE[1:0] EndPoint TYPE */\r\n#define USB_EP_TYPE_MASK_Pos (9U)\r\n#define USB_EP_TYPE_MASK_Msk (0x3U << USB_EP_TYPE_MASK_Pos) /*!< 0x00000600 */\r\n#define USB_EP_TYPE_MASK     USB_EP_TYPE_MASK_Msk           /*!< EndPoint TYPE Mask */\r\n#define USB_EP_BULK          0x00000000U                    /*!< EndPoint BULK */\r\n#define USB_EP_CONTROL       0x00000200U                    /*!< EndPoint CONTROL */\r\n#define USB_EP_ISOCHRONOUS   0x00000400U                    /*!< EndPoint ISOCHRONOUS */\r\n#define USB_EP_INTERRUPT     0x00000600U                    /*!< EndPoint INTERRUPT */\r\n#define USB_EP_T_MASK        (~USB_EP_T_FIELD & USB_EPREG_MASK)\r\n\r\n#define USB_EPKIND_MASK (~USB_EP_KIND & USB_EPREG_MASK) /*!< EP_KIND EndPoint KIND */\r\n                                                        /*!< STAT_TX[1:0] STATus for TX transfer */\r\n#define USB_EP_TX_DIS     0x00000000U                   /*!< EndPoint TX DISabled */\r\n#define USB_EP_TX_STALL   0x00000010U                   /*!< EndPoint TX STALLed */\r\n#define USB_EP_TX_NAK     0x00000020U                   /*!< EndPoint TX NAKed */\r\n#define USB_EP_TX_VALID   0x00000030U                   /*!< EndPoint TX VALID */\r\n#define USB_EPTX_DTOG1    0x00000010U                   /*!< EndPoint TX Data TOGgle bit1 */\r\n#define USB_EPTX_DTOG2    0x00000020U                   /*!< EndPoint TX Data TOGgle bit2 */\r\n#define USB_EPTX_DTOGMASK (USB_EPTX_STAT | USB_EPREG_MASK)\r\n/*!< STAT_RX[1:0] STATus for RX transfer */\r\n#define USB_EP_RX_DIS     0x00000000U /*!< EndPoint RX DISabled */\r\n#define USB_EP_RX_STALL   0x00001000U /*!< EndPoint RX STALLed */\r\n#define USB_EP_RX_NAK     0x00002000U /*!< EndPoint RX NAKed */\r\n#define USB_EP_RX_VALID   0x00003000U /*!< EndPoint RX VALID */\r\n#define USB_EPRX_DTOG1    0x00001000U /*!< EndPoint RX Data TOGgle bit1 */\r\n#define USB_EPRX_DTOG2    0x00002000U /*!< EndPoint RX Data TOGgle bit1 */\r\n#define USB_EPRX_DTOGMASK (USB_EPRX_STAT | USB_EPREG_MASK)\r\n\r\n/*******************  Bit definition for USB_EP0R register  *******************/\r\n#define USB_EP0R_EA_Pos (0U)\r\n#define USB_EP0R_EA_Msk (0xFU << USB_EP0R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP0R_EA     USB_EP0R_EA_Msk           /*!< Endpoint Address */\r\n\r\n#define USB_EP0R_STAT_TX_Pos (4U)\r\n#define USB_EP0R_STAT_TX_Msk (0x3U << USB_EP0R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP0R_STAT_TX     USB_EP0R_STAT_TX_Msk           /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP0R_STAT_TX_0   (0x1U << USB_EP0R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP0R_STAT_TX_1   (0x2U << USB_EP0R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP0R_DTOG_TX_Pos (6U)\r\n#define USB_EP0R_DTOG_TX_Msk (0x1U << USB_EP0R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP0R_DTOG_TX     USB_EP0R_DTOG_TX_Msk           /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP0R_CTR_TX_Pos  (7U)\r\n#define USB_EP0R_CTR_TX_Msk  (0x1U << USB_EP0R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP0R_CTR_TX      USB_EP0R_CTR_TX_Msk           /*!< Correct Transfer for transmission */\r\n#define USB_EP0R_EP_KIND_Pos (8U)\r\n#define USB_EP0R_EP_KIND_Msk (0x1U << USB_EP0R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP0R_EP_KIND     USB_EP0R_EP_KIND_Msk           /*!< Endpoint Kind */\r\n\r\n#define USB_EP0R_EP_TYPE_Pos (9U)\r\n#define USB_EP0R_EP_TYPE_Msk (0x3U << USB_EP0R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP0R_EP_TYPE     USB_EP0R_EP_TYPE_Msk           /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP0R_EP_TYPE_0   (0x1U << USB_EP0R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP0R_EP_TYPE_1   (0x2U << USB_EP0R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP0R_SETUP_Pos (11U)\r\n#define USB_EP0R_SETUP_Msk (0x1U << USB_EP0R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP0R_SETUP     USB_EP0R_SETUP_Msk           /*!< Setup transaction completed */\r\n\r\n#define USB_EP0R_STAT_RX_Pos (12U)\r\n#define USB_EP0R_STAT_RX_Msk (0x3U << USB_EP0R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP0R_STAT_RX     USB_EP0R_STAT_RX_Msk           /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP0R_STAT_RX_0   (0x1U << USB_EP0R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP0R_STAT_RX_1   (0x2U << USB_EP0R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP0R_DTOG_RX_Pos (14U)\r\n#define USB_EP0R_DTOG_RX_Msk (0x1U << USB_EP0R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP0R_DTOG_RX     USB_EP0R_DTOG_RX_Msk           /*!< Data Toggle, for reception transfers */\r\n#define USB_EP0R_CTR_RX_Pos  (15U)\r\n#define USB_EP0R_CTR_RX_Msk  (0x1U << USB_EP0R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP0R_CTR_RX      USB_EP0R_CTR_RX_Msk           /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP1R register  *******************/\r\n#define USB_EP1R_EA_Pos (0U)\r\n#define USB_EP1R_EA_Msk (0xFU << USB_EP1R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP1R_EA     USB_EP1R_EA_Msk           /*!< Endpoint Address */\r\n\r\n#define USB_EP1R_STAT_TX_Pos (4U)\r\n#define USB_EP1R_STAT_TX_Msk (0x3U << USB_EP1R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP1R_STAT_TX     USB_EP1R_STAT_TX_Msk           /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP1R_STAT_TX_0   (0x1U << USB_EP1R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP1R_STAT_TX_1   (0x2U << USB_EP1R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP1R_DTOG_TX_Pos (6U)\r\n#define USB_EP1R_DTOG_TX_Msk (0x1U << USB_EP1R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP1R_DTOG_TX     USB_EP1R_DTOG_TX_Msk           /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP1R_CTR_TX_Pos  (7U)\r\n#define USB_EP1R_CTR_TX_Msk  (0x1U << USB_EP1R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP1R_CTR_TX      USB_EP1R_CTR_TX_Msk           /*!< Correct Transfer for transmission */\r\n#define USB_EP1R_EP_KIND_Pos (8U)\r\n#define USB_EP1R_EP_KIND_Msk (0x1U << USB_EP1R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP1R_EP_KIND     USB_EP1R_EP_KIND_Msk           /*!< Endpoint Kind */\r\n\r\n#define USB_EP1R_EP_TYPE_Pos (9U)\r\n#define USB_EP1R_EP_TYPE_Msk (0x3U << USB_EP1R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP1R_EP_TYPE     USB_EP1R_EP_TYPE_Msk           /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP1R_EP_TYPE_0   (0x1U << USB_EP1R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP1R_EP_TYPE_1   (0x2U << USB_EP1R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP1R_SETUP_Pos (11U)\r\n#define USB_EP1R_SETUP_Msk (0x1U << USB_EP1R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP1R_SETUP     USB_EP1R_SETUP_Msk           /*!< Setup transaction completed */\r\n\r\n#define USB_EP1R_STAT_RX_Pos (12U)\r\n#define USB_EP1R_STAT_RX_Msk (0x3U << USB_EP1R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP1R_STAT_RX     USB_EP1R_STAT_RX_Msk           /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP1R_STAT_RX_0   (0x1U << USB_EP1R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP1R_STAT_RX_1   (0x2U << USB_EP1R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP1R_DTOG_RX_Pos (14U)\r\n#define USB_EP1R_DTOG_RX_Msk (0x1U << USB_EP1R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP1R_DTOG_RX     USB_EP1R_DTOG_RX_Msk           /*!< Data Toggle, for reception transfers */\r\n#define USB_EP1R_CTR_RX_Pos  (15U)\r\n#define USB_EP1R_CTR_RX_Msk  (0x1U << USB_EP1R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP1R_CTR_RX      USB_EP1R_CTR_RX_Msk           /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP2R register  *******************/\r\n#define USB_EP2R_EA_Pos (0U)\r\n#define USB_EP2R_EA_Msk (0xFU << USB_EP2R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP2R_EA     USB_EP2R_EA_Msk           /*!< Endpoint Address */\r\n\r\n#define USB_EP2R_STAT_TX_Pos (4U)\r\n#define USB_EP2R_STAT_TX_Msk (0x3U << USB_EP2R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP2R_STAT_TX     USB_EP2R_STAT_TX_Msk           /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP2R_STAT_TX_0   (0x1U << USB_EP2R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP2R_STAT_TX_1   (0x2U << USB_EP2R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP2R_DTOG_TX_Pos (6U)\r\n#define USB_EP2R_DTOG_TX_Msk (0x1U << USB_EP2R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP2R_DTOG_TX     USB_EP2R_DTOG_TX_Msk           /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP2R_CTR_TX_Pos  (7U)\r\n#define USB_EP2R_CTR_TX_Msk  (0x1U << USB_EP2R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP2R_CTR_TX      USB_EP2R_CTR_TX_Msk           /*!< Correct Transfer for transmission */\r\n#define USB_EP2R_EP_KIND_Pos (8U)\r\n#define USB_EP2R_EP_KIND_Msk (0x1U << USB_EP2R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP2R_EP_KIND     USB_EP2R_EP_KIND_Msk           /*!< Endpoint Kind */\r\n\r\n#define USB_EP2R_EP_TYPE_Pos (9U)\r\n#define USB_EP2R_EP_TYPE_Msk (0x3U << USB_EP2R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP2R_EP_TYPE     USB_EP2R_EP_TYPE_Msk           /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP2R_EP_TYPE_0   (0x1U << USB_EP2R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP2R_EP_TYPE_1   (0x2U << USB_EP2R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP2R_SETUP_Pos (11U)\r\n#define USB_EP2R_SETUP_Msk (0x1U << USB_EP2R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP2R_SETUP     USB_EP2R_SETUP_Msk           /*!< Setup transaction completed */\r\n\r\n#define USB_EP2R_STAT_RX_Pos (12U)\r\n#define USB_EP2R_STAT_RX_Msk (0x3U << USB_EP2R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP2R_STAT_RX     USB_EP2R_STAT_RX_Msk           /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP2R_STAT_RX_0   (0x1U << USB_EP2R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP2R_STAT_RX_1   (0x2U << USB_EP2R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP2R_DTOG_RX_Pos (14U)\r\n#define USB_EP2R_DTOG_RX_Msk (0x1U << USB_EP2R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP2R_DTOG_RX     USB_EP2R_DTOG_RX_Msk           /*!< Data Toggle, for reception transfers */\r\n#define USB_EP2R_CTR_RX_Pos  (15U)\r\n#define USB_EP2R_CTR_RX_Msk  (0x1U << USB_EP2R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP2R_CTR_RX      USB_EP2R_CTR_RX_Msk           /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP3R register  *******************/\r\n#define USB_EP3R_EA_Pos (0U)\r\n#define USB_EP3R_EA_Msk (0xFU << USB_EP3R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP3R_EA     USB_EP3R_EA_Msk           /*!< Endpoint Address */\r\n\r\n#define USB_EP3R_STAT_TX_Pos (4U)\r\n#define USB_EP3R_STAT_TX_Msk (0x3U << USB_EP3R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP3R_STAT_TX     USB_EP3R_STAT_TX_Msk           /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP3R_STAT_TX_0   (0x1U << USB_EP3R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP3R_STAT_TX_1   (0x2U << USB_EP3R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP3R_DTOG_TX_Pos (6U)\r\n#define USB_EP3R_DTOG_TX_Msk (0x1U << USB_EP3R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP3R_DTOG_TX     USB_EP3R_DTOG_TX_Msk           /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP3R_CTR_TX_Pos  (7U)\r\n#define USB_EP3R_CTR_TX_Msk  (0x1U << USB_EP3R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP3R_CTR_TX      USB_EP3R_CTR_TX_Msk           /*!< Correct Transfer for transmission */\r\n#define USB_EP3R_EP_KIND_Pos (8U)\r\n#define USB_EP3R_EP_KIND_Msk (0x1U << USB_EP3R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP3R_EP_KIND     USB_EP3R_EP_KIND_Msk           /*!< Endpoint Kind */\r\n\r\n#define USB_EP3R_EP_TYPE_Pos (9U)\r\n#define USB_EP3R_EP_TYPE_Msk (0x3U << USB_EP3R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP3R_EP_TYPE     USB_EP3R_EP_TYPE_Msk           /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP3R_EP_TYPE_0   (0x1U << USB_EP3R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP3R_EP_TYPE_1   (0x2U << USB_EP3R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP3R_SETUP_Pos (11U)\r\n#define USB_EP3R_SETUP_Msk (0x1U << USB_EP3R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP3R_SETUP     USB_EP3R_SETUP_Msk           /*!< Setup transaction completed */\r\n\r\n#define USB_EP3R_STAT_RX_Pos (12U)\r\n#define USB_EP3R_STAT_RX_Msk (0x3U << USB_EP3R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP3R_STAT_RX     USB_EP3R_STAT_RX_Msk           /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP3R_STAT_RX_0   (0x1U << USB_EP3R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP3R_STAT_RX_1   (0x2U << USB_EP3R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP3R_DTOG_RX_Pos (14U)\r\n#define USB_EP3R_DTOG_RX_Msk (0x1U << USB_EP3R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP3R_DTOG_RX     USB_EP3R_DTOG_RX_Msk           /*!< Data Toggle, for reception transfers */\r\n#define USB_EP3R_CTR_RX_Pos  (15U)\r\n#define USB_EP3R_CTR_RX_Msk  (0x1U << USB_EP3R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP3R_CTR_RX      USB_EP3R_CTR_RX_Msk           /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP4R register  *******************/\r\n#define USB_EP4R_EA_Pos (0U)\r\n#define USB_EP4R_EA_Msk (0xFU << USB_EP4R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP4R_EA     USB_EP4R_EA_Msk           /*!< Endpoint Address */\r\n\r\n#define USB_EP4R_STAT_TX_Pos (4U)\r\n#define USB_EP4R_STAT_TX_Msk (0x3U << USB_EP4R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP4R_STAT_TX     USB_EP4R_STAT_TX_Msk           /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP4R_STAT_TX_0   (0x1U << USB_EP4R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP4R_STAT_TX_1   (0x2U << USB_EP4R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP4R_DTOG_TX_Pos (6U)\r\n#define USB_EP4R_DTOG_TX_Msk (0x1U << USB_EP4R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP4R_DTOG_TX     USB_EP4R_DTOG_TX_Msk           /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP4R_CTR_TX_Pos  (7U)\r\n#define USB_EP4R_CTR_TX_Msk  (0x1U << USB_EP4R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP4R_CTR_TX      USB_EP4R_CTR_TX_Msk           /*!< Correct Transfer for transmission */\r\n#define USB_EP4R_EP_KIND_Pos (8U)\r\n#define USB_EP4R_EP_KIND_Msk (0x1U << USB_EP4R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP4R_EP_KIND     USB_EP4R_EP_KIND_Msk           /*!< Endpoint Kind */\r\n\r\n#define USB_EP4R_EP_TYPE_Pos (9U)\r\n#define USB_EP4R_EP_TYPE_Msk (0x3U << USB_EP4R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP4R_EP_TYPE     USB_EP4R_EP_TYPE_Msk           /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP4R_EP_TYPE_0   (0x1U << USB_EP4R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP4R_EP_TYPE_1   (0x2U << USB_EP4R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP4R_SETUP_Pos (11U)\r\n#define USB_EP4R_SETUP_Msk (0x1U << USB_EP4R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP4R_SETUP     USB_EP4R_SETUP_Msk           /*!< Setup transaction completed */\r\n\r\n#define USB_EP4R_STAT_RX_Pos (12U)\r\n#define USB_EP4R_STAT_RX_Msk (0x3U << USB_EP4R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP4R_STAT_RX     USB_EP4R_STAT_RX_Msk           /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP4R_STAT_RX_0   (0x1U << USB_EP4R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP4R_STAT_RX_1   (0x2U << USB_EP4R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP4R_DTOG_RX_Pos (14U)\r\n#define USB_EP4R_DTOG_RX_Msk (0x1U << USB_EP4R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP4R_DTOG_RX     USB_EP4R_DTOG_RX_Msk           /*!< Data Toggle, for reception transfers */\r\n#define USB_EP4R_CTR_RX_Pos  (15U)\r\n#define USB_EP4R_CTR_RX_Msk  (0x1U << USB_EP4R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP4R_CTR_RX      USB_EP4R_CTR_RX_Msk           /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP5R register  *******************/\r\n#define USB_EP5R_EA_Pos (0U)\r\n#define USB_EP5R_EA_Msk (0xFU << USB_EP5R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP5R_EA     USB_EP5R_EA_Msk           /*!< Endpoint Address */\r\n\r\n#define USB_EP5R_STAT_TX_Pos (4U)\r\n#define USB_EP5R_STAT_TX_Msk (0x3U << USB_EP5R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP5R_STAT_TX     USB_EP5R_STAT_TX_Msk           /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP5R_STAT_TX_0   (0x1U << USB_EP5R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP5R_STAT_TX_1   (0x2U << USB_EP5R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP5R_DTOG_TX_Pos (6U)\r\n#define USB_EP5R_DTOG_TX_Msk (0x1U << USB_EP5R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP5R_DTOG_TX     USB_EP5R_DTOG_TX_Msk           /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP5R_CTR_TX_Pos  (7U)\r\n#define USB_EP5R_CTR_TX_Msk  (0x1U << USB_EP5R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP5R_CTR_TX      USB_EP5R_CTR_TX_Msk           /*!< Correct Transfer for transmission */\r\n#define USB_EP5R_EP_KIND_Pos (8U)\r\n#define USB_EP5R_EP_KIND_Msk (0x1U << USB_EP5R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP5R_EP_KIND     USB_EP5R_EP_KIND_Msk           /*!< Endpoint Kind */\r\n\r\n#define USB_EP5R_EP_TYPE_Pos (9U)\r\n#define USB_EP5R_EP_TYPE_Msk (0x3U << USB_EP5R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP5R_EP_TYPE     USB_EP5R_EP_TYPE_Msk           /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP5R_EP_TYPE_0   (0x1U << USB_EP5R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP5R_EP_TYPE_1   (0x2U << USB_EP5R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP5R_SETUP_Pos (11U)\r\n#define USB_EP5R_SETUP_Msk (0x1U << USB_EP5R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP5R_SETUP     USB_EP5R_SETUP_Msk           /*!< Setup transaction completed */\r\n\r\n#define USB_EP5R_STAT_RX_Pos (12U)\r\n#define USB_EP5R_STAT_RX_Msk (0x3U << USB_EP5R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP5R_STAT_RX     USB_EP5R_STAT_RX_Msk           /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP5R_STAT_RX_0   (0x1U << USB_EP5R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP5R_STAT_RX_1   (0x2U << USB_EP5R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP5R_DTOG_RX_Pos (14U)\r\n#define USB_EP5R_DTOG_RX_Msk (0x1U << USB_EP5R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP5R_DTOG_RX     USB_EP5R_DTOG_RX_Msk           /*!< Data Toggle, for reception transfers */\r\n#define USB_EP5R_CTR_RX_Pos  (15U)\r\n#define USB_EP5R_CTR_RX_Msk  (0x1U << USB_EP5R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP5R_CTR_RX      USB_EP5R_CTR_RX_Msk           /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP6R register  *******************/\r\n#define USB_EP6R_EA_Pos (0U)\r\n#define USB_EP6R_EA_Msk (0xFU << USB_EP6R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP6R_EA     USB_EP6R_EA_Msk           /*!< Endpoint Address */\r\n\r\n#define USB_EP6R_STAT_TX_Pos (4U)\r\n#define USB_EP6R_STAT_TX_Msk (0x3U << USB_EP6R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP6R_STAT_TX     USB_EP6R_STAT_TX_Msk           /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP6R_STAT_TX_0   (0x1U << USB_EP6R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP6R_STAT_TX_1   (0x2U << USB_EP6R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP6R_DTOG_TX_Pos (6U)\r\n#define USB_EP6R_DTOG_TX_Msk (0x1U << USB_EP6R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP6R_DTOG_TX     USB_EP6R_DTOG_TX_Msk           /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP6R_CTR_TX_Pos  (7U)\r\n#define USB_EP6R_CTR_TX_Msk  (0x1U << USB_EP6R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP6R_CTR_TX      USB_EP6R_CTR_TX_Msk           /*!< Correct Transfer for transmission */\r\n#define USB_EP6R_EP_KIND_Pos (8U)\r\n#define USB_EP6R_EP_KIND_Msk (0x1U << USB_EP6R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP6R_EP_KIND     USB_EP6R_EP_KIND_Msk           /*!< Endpoint Kind */\r\n\r\n#define USB_EP6R_EP_TYPE_Pos (9U)\r\n#define USB_EP6R_EP_TYPE_Msk (0x3U << USB_EP6R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP6R_EP_TYPE     USB_EP6R_EP_TYPE_Msk           /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP6R_EP_TYPE_0   (0x1U << USB_EP6R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP6R_EP_TYPE_1   (0x2U << USB_EP6R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP6R_SETUP_Pos (11U)\r\n#define USB_EP6R_SETUP_Msk (0x1U << USB_EP6R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP6R_SETUP     USB_EP6R_SETUP_Msk           /*!< Setup transaction completed */\r\n\r\n#define USB_EP6R_STAT_RX_Pos (12U)\r\n#define USB_EP6R_STAT_RX_Msk (0x3U << USB_EP6R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP6R_STAT_RX     USB_EP6R_STAT_RX_Msk           /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP6R_STAT_RX_0   (0x1U << USB_EP6R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP6R_STAT_RX_1   (0x2U << USB_EP6R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP6R_DTOG_RX_Pos (14U)\r\n#define USB_EP6R_DTOG_RX_Msk (0x1U << USB_EP6R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP6R_DTOG_RX     USB_EP6R_DTOG_RX_Msk           /*!< Data Toggle, for reception transfers */\r\n#define USB_EP6R_CTR_RX_Pos  (15U)\r\n#define USB_EP6R_CTR_RX_Msk  (0x1U << USB_EP6R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP6R_CTR_RX      USB_EP6R_CTR_RX_Msk           /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP7R register  *******************/\r\n#define USB_EP7R_EA_Pos (0U)\r\n#define USB_EP7R_EA_Msk (0xFU << USB_EP7R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP7R_EA     USB_EP7R_EA_Msk           /*!< Endpoint Address */\r\n\r\n#define USB_EP7R_STAT_TX_Pos (4U)\r\n#define USB_EP7R_STAT_TX_Msk (0x3U << USB_EP7R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP7R_STAT_TX     USB_EP7R_STAT_TX_Msk           /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP7R_STAT_TX_0   (0x1U << USB_EP7R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP7R_STAT_TX_1   (0x2U << USB_EP7R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP7R_DTOG_TX_Pos (6U)\r\n#define USB_EP7R_DTOG_TX_Msk (0x1U << USB_EP7R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP7R_DTOG_TX     USB_EP7R_DTOG_TX_Msk           /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP7R_CTR_TX_Pos  (7U)\r\n#define USB_EP7R_CTR_TX_Msk  (0x1U << USB_EP7R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP7R_CTR_TX      USB_EP7R_CTR_TX_Msk           /*!< Correct Transfer for transmission */\r\n#define USB_EP7R_EP_KIND_Pos (8U)\r\n#define USB_EP7R_EP_KIND_Msk (0x1U << USB_EP7R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP7R_EP_KIND     USB_EP7R_EP_KIND_Msk           /*!< Endpoint Kind */\r\n\r\n#define USB_EP7R_EP_TYPE_Pos (9U)\r\n#define USB_EP7R_EP_TYPE_Msk (0x3U << USB_EP7R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP7R_EP_TYPE     USB_EP7R_EP_TYPE_Msk           /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP7R_EP_TYPE_0   (0x1U << USB_EP7R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP7R_EP_TYPE_1   (0x2U << USB_EP7R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP7R_SETUP_Pos (11U)\r\n#define USB_EP7R_SETUP_Msk (0x1U << USB_EP7R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP7R_SETUP     USB_EP7R_SETUP_Msk           /*!< Setup transaction completed */\r\n\r\n#define USB_EP7R_STAT_RX_Pos (12U)\r\n#define USB_EP7R_STAT_RX_Msk (0x3U << USB_EP7R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP7R_STAT_RX     USB_EP7R_STAT_RX_Msk           /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP7R_STAT_RX_0   (0x1U << USB_EP7R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP7R_STAT_RX_1   (0x2U << USB_EP7R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP7R_DTOG_RX_Pos (14U)\r\n#define USB_EP7R_DTOG_RX_Msk (0x1U << USB_EP7R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP7R_DTOG_RX     USB_EP7R_DTOG_RX_Msk           /*!< Data Toggle, for reception transfers */\r\n#define USB_EP7R_CTR_RX_Pos  (15U)\r\n#define USB_EP7R_CTR_RX_Msk  (0x1U << USB_EP7R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP7R_CTR_RX      USB_EP7R_CTR_RX_Msk           /*!< Correct Transfer for reception */\r\n\r\n/*!< Common registers */\r\n/*******************  Bit definition for USB_CNTR register  *******************/\r\n#define USB_CNTR_FRES_Pos    (0U)\r\n#define USB_CNTR_FRES_Msk    (0x1U << USB_CNTR_FRES_Pos) /*!< 0x00000001 */\r\n#define USB_CNTR_FRES        USB_CNTR_FRES_Msk           /*!< Force USB Reset */\r\n#define USB_CNTR_PDWN_Pos    (1U)\r\n#define USB_CNTR_PDWN_Msk    (0x1U << USB_CNTR_PDWN_Pos) /*!< 0x00000002 */\r\n#define USB_CNTR_PDWN        USB_CNTR_PDWN_Msk           /*!< Power down */\r\n#define USB_CNTR_LP_MODE_Pos (2U)\r\n#define USB_CNTR_LP_MODE_Msk (0x1U << USB_CNTR_LP_MODE_Pos) /*!< 0x00000004 */\r\n#define USB_CNTR_LP_MODE     USB_CNTR_LP_MODE_Msk           /*!< Low-power mode */\r\n#define USB_CNTR_FSUSP_Pos   (3U)\r\n#define USB_CNTR_FSUSP_Msk   (0x1U << USB_CNTR_FSUSP_Pos) /*!< 0x00000008 */\r\n#define USB_CNTR_FSUSP       USB_CNTR_FSUSP_Msk           /*!< Force suspend */\r\n#define USB_CNTR_RESUME_Pos  (4U)\r\n#define USB_CNTR_RESUME_Msk  (0x1U << USB_CNTR_RESUME_Pos) /*!< 0x00000010 */\r\n#define USB_CNTR_RESUME      USB_CNTR_RESUME_Msk           /*!< Resume request */\r\n#define USB_CNTR_ESOFM_Pos   (8U)\r\n#define USB_CNTR_ESOFM_Msk   (0x1U << USB_CNTR_ESOFM_Pos) /*!< 0x00000100 */\r\n#define USB_CNTR_ESOFM       USB_CNTR_ESOFM_Msk           /*!< Expected Start Of Frame Interrupt Mask */\r\n#define USB_CNTR_SOFM_Pos    (9U)\r\n#define USB_CNTR_SOFM_Msk    (0x1U << USB_CNTR_SOFM_Pos) /*!< 0x00000200 */\r\n#define USB_CNTR_SOFM        USB_CNTR_SOFM_Msk           /*!< Start Of Frame Interrupt Mask */\r\n#define USB_CNTR_RESETM_Pos  (10U)\r\n#define USB_CNTR_RESETM_Msk  (0x1U << USB_CNTR_RESETM_Pos) /*!< 0x00000400 */\r\n#define USB_CNTR_RESETM      USB_CNTR_RESETM_Msk           /*!< RESET Interrupt Mask */\r\n#define USB_CNTR_SUSPM_Pos   (11U)\r\n#define USB_CNTR_SUSPM_Msk   (0x1U << USB_CNTR_SUSPM_Pos) /*!< 0x00000800 */\r\n#define USB_CNTR_SUSPM       USB_CNTR_SUSPM_Msk           /*!< Suspend mode Interrupt Mask */\r\n#define USB_CNTR_WKUPM_Pos   (12U)\r\n#define USB_CNTR_WKUPM_Msk   (0x1U << USB_CNTR_WKUPM_Pos) /*!< 0x00001000 */\r\n#define USB_CNTR_WKUPM       USB_CNTR_WKUPM_Msk           /*!< Wakeup Interrupt Mask */\r\n#define USB_CNTR_ERRM_Pos    (13U)\r\n#define USB_CNTR_ERRM_Msk    (0x1U << USB_CNTR_ERRM_Pos) /*!< 0x00002000 */\r\n#define USB_CNTR_ERRM        USB_CNTR_ERRM_Msk           /*!< Error Interrupt Mask */\r\n#define USB_CNTR_PMAOVRM_Pos (14U)\r\n#define USB_CNTR_PMAOVRM_Msk (0x1U << USB_CNTR_PMAOVRM_Pos) /*!< 0x00004000 */\r\n#define USB_CNTR_PMAOVRM     USB_CNTR_PMAOVRM_Msk           /*!< Packet Memory Area Over / Underrun Interrupt Mask */\r\n#define USB_CNTR_CTRM_Pos    (15U)\r\n#define USB_CNTR_CTRM_Msk    (0x1U << USB_CNTR_CTRM_Pos) /*!< 0x00008000 */\r\n#define USB_CNTR_CTRM        USB_CNTR_CTRM_Msk           /*!< Correct Transfer Interrupt Mask */\r\n\r\n/*******************  Bit definition for USB_ISTR register  *******************/\r\n#define USB_ISTR_EP_ID_Pos  (0U)\r\n#define USB_ISTR_EP_ID_Msk  (0xFU << USB_ISTR_EP_ID_Pos) /*!< 0x0000000F */\r\n#define USB_ISTR_EP_ID      USB_ISTR_EP_ID_Msk           /*!< Endpoint Identifier */\r\n#define USB_ISTR_DIR_Pos    (4U)\r\n#define USB_ISTR_DIR_Msk    (0x1U << USB_ISTR_DIR_Pos) /*!< 0x00000010 */\r\n#define USB_ISTR_DIR        USB_ISTR_DIR_Msk           /*!< Direction of transaction */\r\n#define USB_ISTR_ESOF_Pos   (8U)\r\n#define USB_ISTR_ESOF_Msk   (0x1U << USB_ISTR_ESOF_Pos) /*!< 0x00000100 */\r\n#define USB_ISTR_ESOF       USB_ISTR_ESOF_Msk           /*!< Expected Start Of Frame */\r\n#define USB_ISTR_SOF_Pos    (9U)\r\n#define USB_ISTR_SOF_Msk    (0x1U << USB_ISTR_SOF_Pos) /*!< 0x00000200 */\r\n#define USB_ISTR_SOF        USB_ISTR_SOF_Msk           /*!< Start Of Frame */\r\n#define USB_ISTR_RESET_Pos  (10U)\r\n#define USB_ISTR_RESET_Msk  (0x1U << USB_ISTR_RESET_Pos) /*!< 0x00000400 */\r\n#define USB_ISTR_RESET      USB_ISTR_RESET_Msk           /*!< USB RESET request */\r\n#define USB_ISTR_SUSP_Pos   (11U)\r\n#define USB_ISTR_SUSP_Msk   (0x1U << USB_ISTR_SUSP_Pos) /*!< 0x00000800 */\r\n#define USB_ISTR_SUSP       USB_ISTR_SUSP_Msk           /*!< Suspend mode request */\r\n#define USB_ISTR_WKUP_Pos   (12U)\r\n#define USB_ISTR_WKUP_Msk   (0x1U << USB_ISTR_WKUP_Pos) /*!< 0x00001000 */\r\n#define USB_ISTR_WKUP       USB_ISTR_WKUP_Msk           /*!< Wake up */\r\n#define USB_ISTR_ERR_Pos    (13U)\r\n#define USB_ISTR_ERR_Msk    (0x1U << USB_ISTR_ERR_Pos) /*!< 0x00002000 */\r\n#define USB_ISTR_ERR        USB_ISTR_ERR_Msk           /*!< Error */\r\n#define USB_ISTR_PMAOVR_Pos (14U)\r\n#define USB_ISTR_PMAOVR_Msk (0x1U << USB_ISTR_PMAOVR_Pos) /*!< 0x00004000 */\r\n#define USB_ISTR_PMAOVR     USB_ISTR_PMAOVR_Msk           /*!< Packet Memory Area Over / Underrun */\r\n#define USB_ISTR_CTR_Pos    (15U)\r\n#define USB_ISTR_CTR_Msk    (0x1U << USB_ISTR_CTR_Pos) /*!< 0x00008000 */\r\n#define USB_ISTR_CTR        USB_ISTR_CTR_Msk           /*!< Correct Transfer */\r\n\r\n/*******************  Bit definition for USB_FNR register  ********************/\r\n#define USB_FNR_FN_Pos   (0U)\r\n#define USB_FNR_FN_Msk   (0x7FFU << USB_FNR_FN_Pos) /*!< 0x000007FF */\r\n#define USB_FNR_FN       USB_FNR_FN_Msk             /*!< Frame Number */\r\n#define USB_FNR_LSOF_Pos (11U)\r\n#define USB_FNR_LSOF_Msk (0x3U << USB_FNR_LSOF_Pos) /*!< 0x00001800 */\r\n#define USB_FNR_LSOF     USB_FNR_LSOF_Msk           /*!< Lost SOF */\r\n#define USB_FNR_LCK_Pos  (13U)\r\n#define USB_FNR_LCK_Msk  (0x1U << USB_FNR_LCK_Pos) /*!< 0x00002000 */\r\n#define USB_FNR_LCK      USB_FNR_LCK_Msk           /*!< Locked */\r\n#define USB_FNR_RXDM_Pos (14U)\r\n#define USB_FNR_RXDM_Msk (0x1U << USB_FNR_RXDM_Pos) /*!< 0x00004000 */\r\n#define USB_FNR_RXDM     USB_FNR_RXDM_Msk           /*!< Receive Data - Line Status */\r\n#define USB_FNR_RXDP_Pos (15U)\r\n#define USB_FNR_RXDP_Msk (0x1U << USB_FNR_RXDP_Pos) /*!< 0x00008000 */\r\n#define USB_FNR_RXDP     USB_FNR_RXDP_Msk           /*!< Receive Data + Line Status */\r\n\r\n/******************  Bit definition for USB_DADDR register  *******************/\r\n#define USB_DADDR_ADD_Pos  (0U)\r\n#define USB_DADDR_ADD_Msk  (0x7FU << USB_DADDR_ADD_Pos) /*!< 0x0000007F */\r\n#define USB_DADDR_ADD      USB_DADDR_ADD_Msk            /*!< ADD[6:0] bits (Device Address) */\r\n#define USB_DADDR_ADD0_Pos (0U)\r\n#define USB_DADDR_ADD0_Msk (0x1U << USB_DADDR_ADD0_Pos) /*!< 0x00000001 */\r\n#define USB_DADDR_ADD0     USB_DADDR_ADD0_Msk           /*!< Bit 0 */\r\n#define USB_DADDR_ADD1_Pos (1U)\r\n#define USB_DADDR_ADD1_Msk (0x1U << USB_DADDR_ADD1_Pos) /*!< 0x00000002 */\r\n#define USB_DADDR_ADD1     USB_DADDR_ADD1_Msk           /*!< Bit 1 */\r\n#define USB_DADDR_ADD2_Pos (2U)\r\n#define USB_DADDR_ADD2_Msk (0x1U << USB_DADDR_ADD2_Pos) /*!< 0x00000004 */\r\n#define USB_DADDR_ADD2     USB_DADDR_ADD2_Msk           /*!< Bit 2 */\r\n#define USB_DADDR_ADD3_Pos (3U)\r\n#define USB_DADDR_ADD3_Msk (0x1U << USB_DADDR_ADD3_Pos) /*!< 0x00000008 */\r\n#define USB_DADDR_ADD3     USB_DADDR_ADD3_Msk           /*!< Bit 3 */\r\n#define USB_DADDR_ADD4_Pos (4U)\r\n#define USB_DADDR_ADD4_Msk (0x1U << USB_DADDR_ADD4_Pos) /*!< 0x00000010 */\r\n#define USB_DADDR_ADD4     USB_DADDR_ADD4_Msk           /*!< Bit 4 */\r\n#define USB_DADDR_ADD5_Pos (5U)\r\n#define USB_DADDR_ADD5_Msk (0x1U << USB_DADDR_ADD5_Pos) /*!< 0x00000020 */\r\n#define USB_DADDR_ADD5     USB_DADDR_ADD5_Msk           /*!< Bit 5 */\r\n#define USB_DADDR_ADD6_Pos (6U)\r\n#define USB_DADDR_ADD6_Msk (0x1U << USB_DADDR_ADD6_Pos) /*!< 0x00000040 */\r\n#define USB_DADDR_ADD6     USB_DADDR_ADD6_Msk           /*!< Bit 6 */\r\n\r\n#define USB_DADDR_EF_Pos (7U)\r\n#define USB_DADDR_EF_Msk (0x1U << USB_DADDR_EF_Pos) /*!< 0x00000080 */\r\n#define USB_DADDR_EF     USB_DADDR_EF_Msk           /*!< Enable Function */\r\n\r\n/******************  Bit definition for USB_BTABLE register  ******************/\r\n#define USB_BTABLE_BTABLE_Pos (3U)\r\n#define USB_BTABLE_BTABLE_Msk (0x1FFFU << USB_BTABLE_BTABLE_Pos) /*!< 0x0000FFF8 */\r\n#define USB_BTABLE_BTABLE     USB_BTABLE_BTABLE_Msk              /*!< Buffer Table */\r\n\r\n/*!< Buffer descriptor table */\r\n/*****************  Bit definition for USB_ADDR0_TX register  *****************/\r\n#define USB_ADDR0_TX_ADDR0_TX_Pos (1U)\r\n#define USB_ADDR0_TX_ADDR0_TX_Msk (0x7FFFU << USB_ADDR0_TX_ADDR0_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR0_TX_ADDR0_TX     USB_ADDR0_TX_ADDR0_TX_Msk              /*!< Transmission Buffer Address 0 */\r\n\r\n/*****************  Bit definition for USB_ADDR1_TX register  *****************/\r\n#define USB_ADDR1_TX_ADDR1_TX_Pos (1U)\r\n#define USB_ADDR1_TX_ADDR1_TX_Msk (0x7FFFU << USB_ADDR1_TX_ADDR1_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR1_TX_ADDR1_TX     USB_ADDR1_TX_ADDR1_TX_Msk              /*!< Transmission Buffer Address 1 */\r\n\r\n/*****************  Bit definition for USB_ADDR2_TX register  *****************/\r\n#define USB_ADDR2_TX_ADDR2_TX_Pos (1U)\r\n#define USB_ADDR2_TX_ADDR2_TX_Msk (0x7FFFU << USB_ADDR2_TX_ADDR2_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR2_TX_ADDR2_TX     USB_ADDR2_TX_ADDR2_TX_Msk              /*!< Transmission Buffer Address 2 */\r\n\r\n/*****************  Bit definition for USB_ADDR3_TX register  *****************/\r\n#define USB_ADDR3_TX_ADDR3_TX_Pos (1U)\r\n#define USB_ADDR3_TX_ADDR3_TX_Msk (0x7FFFU << USB_ADDR3_TX_ADDR3_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR3_TX_ADDR3_TX     USB_ADDR3_TX_ADDR3_TX_Msk              /*!< Transmission Buffer Address 3 */\r\n\r\n/*****************  Bit definition for USB_ADDR4_TX register  *****************/\r\n#define USB_ADDR4_TX_ADDR4_TX_Pos (1U)\r\n#define USB_ADDR4_TX_ADDR4_TX_Msk (0x7FFFU << USB_ADDR4_TX_ADDR4_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR4_TX_ADDR4_TX     USB_ADDR4_TX_ADDR4_TX_Msk              /*!< Transmission Buffer Address 4 */\r\n\r\n/*****************  Bit definition for USB_ADDR5_TX register  *****************/\r\n#define USB_ADDR5_TX_ADDR5_TX_Pos (1U)\r\n#define USB_ADDR5_TX_ADDR5_TX_Msk (0x7FFFU << USB_ADDR5_TX_ADDR5_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR5_TX_ADDR5_TX     USB_ADDR5_TX_ADDR5_TX_Msk              /*!< Transmission Buffer Address 5 */\r\n\r\n/*****************  Bit definition for USB_ADDR6_TX register  *****************/\r\n#define USB_ADDR6_TX_ADDR6_TX_Pos (1U)\r\n#define USB_ADDR6_TX_ADDR6_TX_Msk (0x7FFFU << USB_ADDR6_TX_ADDR6_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR6_TX_ADDR6_TX     USB_ADDR6_TX_ADDR6_TX_Msk              /*!< Transmission Buffer Address 6 */\r\n\r\n/*****************  Bit definition for USB_ADDR7_TX register  *****************/\r\n#define USB_ADDR7_TX_ADDR7_TX_Pos (1U)\r\n#define USB_ADDR7_TX_ADDR7_TX_Msk (0x7FFFU << USB_ADDR7_TX_ADDR7_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR7_TX_ADDR7_TX     USB_ADDR7_TX_ADDR7_TX_Msk              /*!< Transmission Buffer Address 7 */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/*****************  Bit definition for USB_COUNT0_TX register  ****************/\r\n#define USB_COUNT0_TX_COUNT0_TX_Pos (0U)\r\n#define USB_COUNT0_TX_COUNT0_TX_Msk (0x3FFU << USB_COUNT0_TX_COUNT0_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT0_TX_COUNT0_TX     USB_COUNT0_TX_COUNT0_TX_Msk             /*!< Transmission Byte Count 0 */\r\n\r\n/*****************  Bit definition for USB_COUNT1_TX register  ****************/\r\n#define USB_COUNT1_TX_COUNT1_TX_Pos (0U)\r\n#define USB_COUNT1_TX_COUNT1_TX_Msk (0x3FFU << USB_COUNT1_TX_COUNT1_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT1_TX_COUNT1_TX     USB_COUNT1_TX_COUNT1_TX_Msk             /*!< Transmission Byte Count 1 */\r\n\r\n/*****************  Bit definition for USB_COUNT2_TX register  ****************/\r\n#define USB_COUNT2_TX_COUNT2_TX_Pos (0U)\r\n#define USB_COUNT2_TX_COUNT2_TX_Msk (0x3FFU << USB_COUNT2_TX_COUNT2_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT2_TX_COUNT2_TX     USB_COUNT2_TX_COUNT2_TX_Msk             /*!< Transmission Byte Count 2 */\r\n\r\n/*****************  Bit definition for USB_COUNT3_TX register  ****************/\r\n#define USB_COUNT3_TX_COUNT3_TX_Pos (0U)\r\n#define USB_COUNT3_TX_COUNT3_TX_Msk (0x3FFU << USB_COUNT3_TX_COUNT3_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT3_TX_COUNT3_TX     USB_COUNT3_TX_COUNT3_TX_Msk             /*!< Transmission Byte Count 3 */\r\n\r\n/*****************  Bit definition for USB_COUNT4_TX register  ****************/\r\n#define USB_COUNT4_TX_COUNT4_TX_Pos (0U)\r\n#define USB_COUNT4_TX_COUNT4_TX_Msk (0x3FFU << USB_COUNT4_TX_COUNT4_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT4_TX_COUNT4_TX     USB_COUNT4_TX_COUNT4_TX_Msk             /*!< Transmission Byte Count 4 */\r\n\r\n/*****************  Bit definition for USB_COUNT5_TX register  ****************/\r\n#define USB_COUNT5_TX_COUNT5_TX_Pos (0U)\r\n#define USB_COUNT5_TX_COUNT5_TX_Msk (0x3FFU << USB_COUNT5_TX_COUNT5_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT5_TX_COUNT5_TX     USB_COUNT5_TX_COUNT5_TX_Msk             /*!< Transmission Byte Count 5 */\r\n\r\n/*****************  Bit definition for USB_COUNT6_TX register  ****************/\r\n#define USB_COUNT6_TX_COUNT6_TX_Pos (0U)\r\n#define USB_COUNT6_TX_COUNT6_TX_Msk (0x3FFU << USB_COUNT6_TX_COUNT6_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT6_TX_COUNT6_TX     USB_COUNT6_TX_COUNT6_TX_Msk             /*!< Transmission Byte Count 6 */\r\n\r\n/*****************  Bit definition for USB_COUNT7_TX register  ****************/\r\n#define USB_COUNT7_TX_COUNT7_TX_Pos (0U)\r\n#define USB_COUNT7_TX_COUNT7_TX_Msk (0x3FFU << USB_COUNT7_TX_COUNT7_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT7_TX_COUNT7_TX     USB_COUNT7_TX_COUNT7_TX_Msk             /*!< Transmission Byte Count 7 */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/****************  Bit definition for USB_COUNT0_TX_0 register  ***************/\r\n#define USB_COUNT0_TX_0_COUNT0_TX_0 0x000003FFU /*!< Transmission Byte Count 0 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT0_TX_1 register  ***************/\r\n#define USB_COUNT0_TX_1_COUNT0_TX_1 0x03FF0000U /*!< Transmission Byte Count 0 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT1_TX_0 register  ***************/\r\n#define USB_COUNT1_TX_0_COUNT1_TX_0 0x000003FFU /*!< Transmission Byte Count 1 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT1_TX_1 register  ***************/\r\n#define USB_COUNT1_TX_1_COUNT1_TX_1 0x03FF0000U /*!< Transmission Byte Count 1 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT2_TX_0 register  ***************/\r\n#define USB_COUNT2_TX_0_COUNT2_TX_0 0x000003FFU /*!< Transmission Byte Count 2 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT2_TX_1 register  ***************/\r\n#define USB_COUNT2_TX_1_COUNT2_TX_1 0x03FF0000U /*!< Transmission Byte Count 2 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT3_TX_0 register  ***************/\r\n#define USB_COUNT3_TX_0_COUNT3_TX_0 0x000003FFU /*!< Transmission Byte Count 3 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT3_TX_1 register  ***************/\r\n#define USB_COUNT3_TX_1_COUNT3_TX_1 0x03FF0000U /*!< Transmission Byte Count 3 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT4_TX_0 register  ***************/\r\n#define USB_COUNT4_TX_0_COUNT4_TX_0 0x000003FFU /*!< Transmission Byte Count 4 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT4_TX_1 register  ***************/\r\n#define USB_COUNT4_TX_1_COUNT4_TX_1 0x03FF0000U /*!< Transmission Byte Count 4 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT5_TX_0 register  ***************/\r\n#define USB_COUNT5_TX_0_COUNT5_TX_0 0x000003FFU /*!< Transmission Byte Count 5 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT5_TX_1 register  ***************/\r\n#define USB_COUNT5_TX_1_COUNT5_TX_1 0x03FF0000U /*!< Transmission Byte Count 5 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT6_TX_0 register  ***************/\r\n#define USB_COUNT6_TX_0_COUNT6_TX_0 0x000003FFU /*!< Transmission Byte Count 6 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT6_TX_1 register  ***************/\r\n#define USB_COUNT6_TX_1_COUNT6_TX_1 0x03FF0000U /*!< Transmission Byte Count 6 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT7_TX_0 register  ***************/\r\n#define USB_COUNT7_TX_0_COUNT7_TX_0 0x000003FFU /*!< Transmission Byte Count 7 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT7_TX_1 register  ***************/\r\n#define USB_COUNT7_TX_1_COUNT7_TX_1 0x03FF0000U /*!< Transmission Byte Count 7 (high) */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/*****************  Bit definition for USB_ADDR0_RX register  *****************/\r\n#define USB_ADDR0_RX_ADDR0_RX_Pos (1U)\r\n#define USB_ADDR0_RX_ADDR0_RX_Msk (0x7FFFU << USB_ADDR0_RX_ADDR0_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR0_RX_ADDR0_RX     USB_ADDR0_RX_ADDR0_RX_Msk              /*!< Reception Buffer Address 0 */\r\n\r\n/*****************  Bit definition for USB_ADDR1_RX register  *****************/\r\n#define USB_ADDR1_RX_ADDR1_RX_Pos (1U)\r\n#define USB_ADDR1_RX_ADDR1_RX_Msk (0x7FFFU << USB_ADDR1_RX_ADDR1_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR1_RX_ADDR1_RX     USB_ADDR1_RX_ADDR1_RX_Msk              /*!< Reception Buffer Address 1 */\r\n\r\n/*****************  Bit definition for USB_ADDR2_RX register  *****************/\r\n#define USB_ADDR2_RX_ADDR2_RX_Pos (1U)\r\n#define USB_ADDR2_RX_ADDR2_RX_Msk (0x7FFFU << USB_ADDR2_RX_ADDR2_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR2_RX_ADDR2_RX     USB_ADDR2_RX_ADDR2_RX_Msk              /*!< Reception Buffer Address 2 */\r\n\r\n/*****************  Bit definition for USB_ADDR3_RX register  *****************/\r\n#define USB_ADDR3_RX_ADDR3_RX_Pos (1U)\r\n#define USB_ADDR3_RX_ADDR3_RX_Msk (0x7FFFU << USB_ADDR3_RX_ADDR3_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR3_RX_ADDR3_RX     USB_ADDR3_RX_ADDR3_RX_Msk              /*!< Reception Buffer Address 3 */\r\n\r\n/*****************  Bit definition for USB_ADDR4_RX register  *****************/\r\n#define USB_ADDR4_RX_ADDR4_RX_Pos (1U)\r\n#define USB_ADDR4_RX_ADDR4_RX_Msk (0x7FFFU << USB_ADDR4_RX_ADDR4_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR4_RX_ADDR4_RX     USB_ADDR4_RX_ADDR4_RX_Msk              /*!< Reception Buffer Address 4 */\r\n\r\n/*****************  Bit definition for USB_ADDR5_RX register  *****************/\r\n#define USB_ADDR5_RX_ADDR5_RX_Pos (1U)\r\n#define USB_ADDR5_RX_ADDR5_RX_Msk (0x7FFFU << USB_ADDR5_RX_ADDR5_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR5_RX_ADDR5_RX     USB_ADDR5_RX_ADDR5_RX_Msk              /*!< Reception Buffer Address 5 */\r\n\r\n/*****************  Bit definition for USB_ADDR6_RX register  *****************/\r\n#define USB_ADDR6_RX_ADDR6_RX_Pos (1U)\r\n#define USB_ADDR6_RX_ADDR6_RX_Msk (0x7FFFU << USB_ADDR6_RX_ADDR6_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR6_RX_ADDR6_RX     USB_ADDR6_RX_ADDR6_RX_Msk              /*!< Reception Buffer Address 6 */\r\n\r\n/*****************  Bit definition for USB_ADDR7_RX register  *****************/\r\n#define USB_ADDR7_RX_ADDR7_RX_Pos (1U)\r\n#define USB_ADDR7_RX_ADDR7_RX_Msk (0x7FFFU << USB_ADDR7_RX_ADDR7_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR7_RX_ADDR7_RX     USB_ADDR7_RX_ADDR7_RX_Msk              /*!< Reception Buffer Address 7 */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/*****************  Bit definition for USB_COUNT0_RX register  ****************/\r\n#define USB_COUNT0_RX_COUNT0_RX_Pos (0U)\r\n#define USB_COUNT0_RX_COUNT0_RX_Msk (0x3FFU << USB_COUNT0_RX_COUNT0_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT0_RX_COUNT0_RX     USB_COUNT0_RX_COUNT0_RX_Msk             /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT0_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT0_RX_NUM_BLOCK_Msk (0x1FU << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT0_RX_NUM_BLOCK     USB_COUNT0_RX_NUM_BLOCK_Msk            /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT0_RX_NUM_BLOCK_0   (0x01U << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT0_RX_NUM_BLOCK_1   (0x02U << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT0_RX_NUM_BLOCK_2   (0x04U << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT0_RX_NUM_BLOCK_3   (0x08U << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT0_RX_NUM_BLOCK_4   (0x10U << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT0_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT0_RX_BLSIZE_Msk (0x1U << USB_COUNT0_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT0_RX_BLSIZE     USB_COUNT0_RX_BLSIZE_Msk           /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT1_RX register  ****************/\r\n#define USB_COUNT1_RX_COUNT1_RX_Pos (0U)\r\n#define USB_COUNT1_RX_COUNT1_RX_Msk (0x3FFU << USB_COUNT1_RX_COUNT1_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT1_RX_COUNT1_RX     USB_COUNT1_RX_COUNT1_RX_Msk             /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT1_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT1_RX_NUM_BLOCK_Msk (0x1FU << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT1_RX_NUM_BLOCK     USB_COUNT1_RX_NUM_BLOCK_Msk            /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT1_RX_NUM_BLOCK_0   (0x01U << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT1_RX_NUM_BLOCK_1   (0x02U << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT1_RX_NUM_BLOCK_2   (0x04U << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT1_RX_NUM_BLOCK_3   (0x08U << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT1_RX_NUM_BLOCK_4   (0x10U << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT1_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT1_RX_BLSIZE_Msk (0x1U << USB_COUNT1_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT1_RX_BLSIZE     USB_COUNT1_RX_BLSIZE_Msk           /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT2_RX register  ****************/\r\n#define USB_COUNT2_RX_COUNT2_RX_Pos (0U)\r\n#define USB_COUNT2_RX_COUNT2_RX_Msk (0x3FFU << USB_COUNT2_RX_COUNT2_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT2_RX_COUNT2_RX     USB_COUNT2_RX_COUNT2_RX_Msk             /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT2_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT2_RX_NUM_BLOCK_Msk (0x1FU << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT2_RX_NUM_BLOCK     USB_COUNT2_RX_NUM_BLOCK_Msk            /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT2_RX_NUM_BLOCK_0   (0x01U << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT2_RX_NUM_BLOCK_1   (0x02U << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT2_RX_NUM_BLOCK_2   (0x04U << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT2_RX_NUM_BLOCK_3   (0x08U << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT2_RX_NUM_BLOCK_4   (0x10U << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT2_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT2_RX_BLSIZE_Msk (0x1U << USB_COUNT2_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT2_RX_BLSIZE     USB_COUNT2_RX_BLSIZE_Msk           /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT3_RX register  ****************/\r\n#define USB_COUNT3_RX_COUNT3_RX_Pos (0U)\r\n#define USB_COUNT3_RX_COUNT3_RX_Msk (0x3FFU << USB_COUNT3_RX_COUNT3_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT3_RX_COUNT3_RX     USB_COUNT3_RX_COUNT3_RX_Msk             /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT3_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT3_RX_NUM_BLOCK_Msk (0x1FU << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT3_RX_NUM_BLOCK     USB_COUNT3_RX_NUM_BLOCK_Msk            /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT3_RX_NUM_BLOCK_0   (0x01U << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT3_RX_NUM_BLOCK_1   (0x02U << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT3_RX_NUM_BLOCK_2   (0x04U << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT3_RX_NUM_BLOCK_3   (0x08U << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT3_RX_NUM_BLOCK_4   (0x10U << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT3_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT3_RX_BLSIZE_Msk (0x1U << USB_COUNT3_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT3_RX_BLSIZE     USB_COUNT3_RX_BLSIZE_Msk           /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT4_RX register  ****************/\r\n#define USB_COUNT4_RX_COUNT4_RX_Pos (0U)\r\n#define USB_COUNT4_RX_COUNT4_RX_Msk (0x3FFU << USB_COUNT4_RX_COUNT4_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT4_RX_COUNT4_RX     USB_COUNT4_RX_COUNT4_RX_Msk             /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT4_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT4_RX_NUM_BLOCK_Msk (0x1FU << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT4_RX_NUM_BLOCK     USB_COUNT4_RX_NUM_BLOCK_Msk            /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT4_RX_NUM_BLOCK_0   (0x01U << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT4_RX_NUM_BLOCK_1   (0x02U << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT4_RX_NUM_BLOCK_2   (0x04U << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT4_RX_NUM_BLOCK_3   (0x08U << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT4_RX_NUM_BLOCK_4   (0x10U << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT4_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT4_RX_BLSIZE_Msk (0x1U << USB_COUNT4_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT4_RX_BLSIZE     USB_COUNT4_RX_BLSIZE_Msk           /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT5_RX register  ****************/\r\n#define USB_COUNT5_RX_COUNT5_RX_Pos (0U)\r\n#define USB_COUNT5_RX_COUNT5_RX_Msk (0x3FFU << USB_COUNT5_RX_COUNT5_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT5_RX_COUNT5_RX     USB_COUNT5_RX_COUNT5_RX_Msk             /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT5_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT5_RX_NUM_BLOCK_Msk (0x1FU << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT5_RX_NUM_BLOCK     USB_COUNT5_RX_NUM_BLOCK_Msk            /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT5_RX_NUM_BLOCK_0   (0x01U << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT5_RX_NUM_BLOCK_1   (0x02U << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT5_RX_NUM_BLOCK_2   (0x04U << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT5_RX_NUM_BLOCK_3   (0x08U << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT5_RX_NUM_BLOCK_4   (0x10U << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT5_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT5_RX_BLSIZE_Msk (0x1U << USB_COUNT5_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT5_RX_BLSIZE     USB_COUNT5_RX_BLSIZE_Msk           /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT6_RX register  ****************/\r\n#define USB_COUNT6_RX_COUNT6_RX_Pos (0U)\r\n#define USB_COUNT6_RX_COUNT6_RX_Msk (0x3FFU << USB_COUNT6_RX_COUNT6_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT6_RX_COUNT6_RX     USB_COUNT6_RX_COUNT6_RX_Msk             /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT6_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT6_RX_NUM_BLOCK_Msk (0x1FU << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT6_RX_NUM_BLOCK     USB_COUNT6_RX_NUM_BLOCK_Msk            /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT6_RX_NUM_BLOCK_0   (0x01U << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT6_RX_NUM_BLOCK_1   (0x02U << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT6_RX_NUM_BLOCK_2   (0x04U << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT6_RX_NUM_BLOCK_3   (0x08U << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT6_RX_NUM_BLOCK_4   (0x10U << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT6_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT6_RX_BLSIZE_Msk (0x1U << USB_COUNT6_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT6_RX_BLSIZE     USB_COUNT6_RX_BLSIZE_Msk           /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT7_RX register  ****************/\r\n#define USB_COUNT7_RX_COUNT7_RX_Pos (0U)\r\n#define USB_COUNT7_RX_COUNT7_RX_Msk (0x3FFU << USB_COUNT7_RX_COUNT7_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT7_RX_COUNT7_RX     USB_COUNT7_RX_COUNT7_RX_Msk             /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT7_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT7_RX_NUM_BLOCK_Msk (0x1FU << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT7_RX_NUM_BLOCK     USB_COUNT7_RX_NUM_BLOCK_Msk            /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT7_RX_NUM_BLOCK_0   (0x01U << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT7_RX_NUM_BLOCK_1   (0x02U << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT7_RX_NUM_BLOCK_2   (0x04U << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT7_RX_NUM_BLOCK_3   (0x08U << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT7_RX_NUM_BLOCK_4   (0x10U << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT7_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT7_RX_BLSIZE_Msk (0x1U << USB_COUNT7_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT7_RX_BLSIZE     USB_COUNT7_RX_BLSIZE_Msk           /*!< BLock SIZE */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/****************  Bit definition for USB_COUNT0_RX_0 register  ***************/\r\n#define USB_COUNT0_RX_0_COUNT0_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT0_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT0_RX_1 register  ***************/\r\n#define USB_COUNT0_RX_1_COUNT0_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 1 */\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT0_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/****************  Bit definition for USB_COUNT1_RX_0 register  ***************/\r\n#define USB_COUNT1_RX_0_COUNT1_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT1_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT1_RX_1 register  ***************/\r\n#define USB_COUNT1_RX_1_COUNT1_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT1_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/****************  Bit definition for USB_COUNT2_RX_0 register  ***************/\r\n#define USB_COUNT2_RX_0_COUNT2_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT2_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT2_RX_1 register  ***************/\r\n#define USB_COUNT2_RX_1_COUNT2_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT2_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/****************  Bit definition for USB_COUNT3_RX_0 register  ***************/\r\n#define USB_COUNT3_RX_0_COUNT3_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT3_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT3_RX_1 register  ***************/\r\n#define USB_COUNT3_RX_1_COUNT3_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT3_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/****************  Bit definition for USB_COUNT4_RX_0 register  ***************/\r\n#define USB_COUNT4_RX_0_COUNT4_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT4_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT4_RX_1 register  ***************/\r\n#define USB_COUNT4_RX_1_COUNT4_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT4_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/****************  Bit definition for USB_COUNT5_RX_0 register  ***************/\r\n#define USB_COUNT5_RX_0_COUNT5_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT5_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT5_RX_1 register  ***************/\r\n#define USB_COUNT5_RX_1_COUNT5_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT5_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/***************  Bit definition for USB_COUNT6_RX_0  register  ***************/\r\n#define USB_COUNT6_RX_0_COUNT6_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT6_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT6_RX_1 register  ***************/\r\n#define USB_COUNT6_RX_1_COUNT6_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT6_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/***************  Bit definition for USB_COUNT7_RX_0 register  ****************/\r\n#define USB_COUNT7_RX_0_COUNT7_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT7_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/***************  Bit definition for USB_COUNT7_RX_1 register  ****************/\r\n#define USB_COUNT7_RX_1_COUNT7_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT7_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                         Controller Area Network                            */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*!< CAN control and status registers */\r\n/*******************  Bit definition for CAN_MCR register  ********************/\r\n#define CAN_MCR_INRQ_Pos  (0U)\r\n#define CAN_MCR_INRQ_Msk  (0x1U << CAN_MCR_INRQ_Pos) /*!< 0x00000001 */\r\n#define CAN_MCR_INRQ      CAN_MCR_INRQ_Msk           /*!< Initialization Request */\r\n#define CAN_MCR_SLEEP_Pos (1U)\r\n#define CAN_MCR_SLEEP_Msk (0x1U << CAN_MCR_SLEEP_Pos) /*!< 0x00000002 */\r\n#define CAN_MCR_SLEEP     CAN_MCR_SLEEP_Msk           /*!< Sleep Mode Request */\r\n#define CAN_MCR_TXFP_Pos  (2U)\r\n#define CAN_MCR_TXFP_Msk  (0x1U << CAN_MCR_TXFP_Pos) /*!< 0x00000004 */\r\n#define CAN_MCR_TXFP      CAN_MCR_TXFP_Msk           /*!< Transmit FIFO Priority */\r\n#define CAN_MCR_RFLM_Pos  (3U)\r\n#define CAN_MCR_RFLM_Msk  (0x1U << CAN_MCR_RFLM_Pos) /*!< 0x00000008 */\r\n#define CAN_MCR_RFLM      CAN_MCR_RFLM_Msk           /*!< Receive FIFO Locked Mode */\r\n#define CAN_MCR_NART_Pos  (4U)\r\n#define CAN_MCR_NART_Msk  (0x1U << CAN_MCR_NART_Pos) /*!< 0x00000010 */\r\n#define CAN_MCR_NART      CAN_MCR_NART_Msk           /*!< No Automatic Retransmission */\r\n#define CAN_MCR_AWUM_Pos  (5U)\r\n#define CAN_MCR_AWUM_Msk  (0x1U << CAN_MCR_AWUM_Pos) /*!< 0x00000020 */\r\n#define CAN_MCR_AWUM      CAN_MCR_AWUM_Msk           /*!< Automatic Wakeup Mode */\r\n#define CAN_MCR_ABOM_Pos  (6U)\r\n#define CAN_MCR_ABOM_Msk  (0x1U << CAN_MCR_ABOM_Pos) /*!< 0x00000040 */\r\n#define CAN_MCR_ABOM      CAN_MCR_ABOM_Msk           /*!< Automatic Bus-Off Management */\r\n#define CAN_MCR_TTCM_Pos  (7U)\r\n#define CAN_MCR_TTCM_Msk  (0x1U << CAN_MCR_TTCM_Pos) /*!< 0x00000080 */\r\n#define CAN_MCR_TTCM      CAN_MCR_TTCM_Msk           /*!< Time Triggered Communication Mode */\r\n#define CAN_MCR_RESET_Pos (15U)\r\n#define CAN_MCR_RESET_Msk (0x1U << CAN_MCR_RESET_Pos) /*!< 0x00008000 */\r\n#define CAN_MCR_RESET     CAN_MCR_RESET_Msk           /*!< CAN software master reset */\r\n#define CAN_MCR_DBF_Pos   (16U)\r\n#define CAN_MCR_DBF_Msk   (0x1U << CAN_MCR_DBF_Pos) /*!< 0x00010000 */\r\n#define CAN_MCR_DBF       CAN_MCR_DBF_Msk           /*!< CAN Debug freeze */\r\n\r\n/*******************  Bit definition for CAN_MSR register  ********************/\r\n#define CAN_MSR_INAK_Pos  (0U)\r\n#define CAN_MSR_INAK_Msk  (0x1U << CAN_MSR_INAK_Pos) /*!< 0x00000001 */\r\n#define CAN_MSR_INAK      CAN_MSR_INAK_Msk           /*!< Initialization Acknowledge */\r\n#define CAN_MSR_SLAK_Pos  (1U)\r\n#define CAN_MSR_SLAK_Msk  (0x1U << CAN_MSR_SLAK_Pos) /*!< 0x00000002 */\r\n#define CAN_MSR_SLAK      CAN_MSR_SLAK_Msk           /*!< Sleep Acknowledge */\r\n#define CAN_MSR_ERRI_Pos  (2U)\r\n#define CAN_MSR_ERRI_Msk  (0x1U << CAN_MSR_ERRI_Pos) /*!< 0x00000004 */\r\n#define CAN_MSR_ERRI      CAN_MSR_ERRI_Msk           /*!< Error Interrupt */\r\n#define CAN_MSR_WKUI_Pos  (3U)\r\n#define CAN_MSR_WKUI_Msk  (0x1U << CAN_MSR_WKUI_Pos) /*!< 0x00000008 */\r\n#define CAN_MSR_WKUI      CAN_MSR_WKUI_Msk           /*!< Wakeup Interrupt */\r\n#define CAN_MSR_SLAKI_Pos (4U)\r\n#define CAN_MSR_SLAKI_Msk (0x1U << CAN_MSR_SLAKI_Pos) /*!< 0x00000010 */\r\n#define CAN_MSR_SLAKI     CAN_MSR_SLAKI_Msk           /*!< Sleep Acknowledge Interrupt */\r\n#define CAN_MSR_TXM_Pos   (8U)\r\n#define CAN_MSR_TXM_Msk   (0x1U << CAN_MSR_TXM_Pos) /*!< 0x00000100 */\r\n#define CAN_MSR_TXM       CAN_MSR_TXM_Msk           /*!< Transmit Mode */\r\n#define CAN_MSR_RXM_Pos   (9U)\r\n#define CAN_MSR_RXM_Msk   (0x1U << CAN_MSR_RXM_Pos) /*!< 0x00000200 */\r\n#define CAN_MSR_RXM       CAN_MSR_RXM_Msk           /*!< Receive Mode */\r\n#define CAN_MSR_SAMP_Pos  (10U)\r\n#define CAN_MSR_SAMP_Msk  (0x1U << CAN_MSR_SAMP_Pos) /*!< 0x00000400 */\r\n#define CAN_MSR_SAMP      CAN_MSR_SAMP_Msk           /*!< Last Sample Point */\r\n#define CAN_MSR_RX_Pos    (11U)\r\n#define CAN_MSR_RX_Msk    (0x1U << CAN_MSR_RX_Pos) /*!< 0x00000800 */\r\n#define CAN_MSR_RX        CAN_MSR_RX_Msk           /*!< CAN Rx Signal */\r\n\r\n/*******************  Bit definition for CAN_TSR register  ********************/\r\n#define CAN_TSR_RQCP0_Pos (0U)\r\n#define CAN_TSR_RQCP0_Msk (0x1U << CAN_TSR_RQCP0_Pos) /*!< 0x00000001 */\r\n#define CAN_TSR_RQCP0     CAN_TSR_RQCP0_Msk           /*!< Request Completed Mailbox0 */\r\n#define CAN_TSR_TXOK0_Pos (1U)\r\n#define CAN_TSR_TXOK0_Msk (0x1U << CAN_TSR_TXOK0_Pos) /*!< 0x00000002 */\r\n#define CAN_TSR_TXOK0     CAN_TSR_TXOK0_Msk           /*!< Transmission OK of Mailbox0 */\r\n#define CAN_TSR_ALST0_Pos (2U)\r\n#define CAN_TSR_ALST0_Msk (0x1U << CAN_TSR_ALST0_Pos) /*!< 0x00000004 */\r\n#define CAN_TSR_ALST0     CAN_TSR_ALST0_Msk           /*!< Arbitration Lost for Mailbox0 */\r\n#define CAN_TSR_TERR0_Pos (3U)\r\n#define CAN_TSR_TERR0_Msk (0x1U << CAN_TSR_TERR0_Pos) /*!< 0x00000008 */\r\n#define CAN_TSR_TERR0     CAN_TSR_TERR0_Msk           /*!< Transmission Error of Mailbox0 */\r\n#define CAN_TSR_ABRQ0_Pos (7U)\r\n#define CAN_TSR_ABRQ0_Msk (0x1U << CAN_TSR_ABRQ0_Pos) /*!< 0x00000080 */\r\n#define CAN_TSR_ABRQ0     CAN_TSR_ABRQ0_Msk           /*!< Abort Request for Mailbox0 */\r\n#define CAN_TSR_RQCP1_Pos (8U)\r\n#define CAN_TSR_RQCP1_Msk (0x1U << CAN_TSR_RQCP1_Pos) /*!< 0x00000100 */\r\n#define CAN_TSR_RQCP1     CAN_TSR_RQCP1_Msk           /*!< Request Completed Mailbox1 */\r\n#define CAN_TSR_TXOK1_Pos (9U)\r\n#define CAN_TSR_TXOK1_Msk (0x1U << CAN_TSR_TXOK1_Pos) /*!< 0x00000200 */\r\n#define CAN_TSR_TXOK1     CAN_TSR_TXOK1_Msk           /*!< Transmission OK of Mailbox1 */\r\n#define CAN_TSR_ALST1_Pos (10U)\r\n#define CAN_TSR_ALST1_Msk (0x1U << CAN_TSR_ALST1_Pos) /*!< 0x00000400 */\r\n#define CAN_TSR_ALST1     CAN_TSR_ALST1_Msk           /*!< Arbitration Lost for Mailbox1 */\r\n#define CAN_TSR_TERR1_Pos (11U)\r\n#define CAN_TSR_TERR1_Msk (0x1U << CAN_TSR_TERR1_Pos) /*!< 0x00000800 */\r\n#define CAN_TSR_TERR1     CAN_TSR_TERR1_Msk           /*!< Transmission Error of Mailbox1 */\r\n#define CAN_TSR_ABRQ1_Pos (15U)\r\n#define CAN_TSR_ABRQ1_Msk (0x1U << CAN_TSR_ABRQ1_Pos) /*!< 0x00008000 */\r\n#define CAN_TSR_ABRQ1     CAN_TSR_ABRQ1_Msk           /*!< Abort Request for Mailbox 1 */\r\n#define CAN_TSR_RQCP2_Pos (16U)\r\n#define CAN_TSR_RQCP2_Msk (0x1U << CAN_TSR_RQCP2_Pos) /*!< 0x00010000 */\r\n#define CAN_TSR_RQCP2     CAN_TSR_RQCP2_Msk           /*!< Request Completed Mailbox2 */\r\n#define CAN_TSR_TXOK2_Pos (17U)\r\n#define CAN_TSR_TXOK2_Msk (0x1U << CAN_TSR_TXOK2_Pos) /*!< 0x00020000 */\r\n#define CAN_TSR_TXOK2     CAN_TSR_TXOK2_Msk           /*!< Transmission OK of Mailbox 2 */\r\n#define CAN_TSR_ALST2_Pos (18U)\r\n#define CAN_TSR_ALST2_Msk (0x1U << CAN_TSR_ALST2_Pos) /*!< 0x00040000 */\r\n#define CAN_TSR_ALST2     CAN_TSR_ALST2_Msk           /*!< Arbitration Lost for mailbox 2 */\r\n#define CAN_TSR_TERR2_Pos (19U)\r\n#define CAN_TSR_TERR2_Msk (0x1U << CAN_TSR_TERR2_Pos) /*!< 0x00080000 */\r\n#define CAN_TSR_TERR2     CAN_TSR_TERR2_Msk           /*!< Transmission Error of Mailbox 2 */\r\n#define CAN_TSR_ABRQ2_Pos (23U)\r\n#define CAN_TSR_ABRQ2_Msk (0x1U << CAN_TSR_ABRQ2_Pos) /*!< 0x00800000 */\r\n#define CAN_TSR_ABRQ2     CAN_TSR_ABRQ2_Msk           /*!< Abort Request for Mailbox 2 */\r\n#define CAN_TSR_CODE_Pos  (24U)\r\n#define CAN_TSR_CODE_Msk  (0x3U << CAN_TSR_CODE_Pos) /*!< 0x03000000 */\r\n#define CAN_TSR_CODE      CAN_TSR_CODE_Msk           /*!< Mailbox Code */\r\n\r\n#define CAN_TSR_TME_Pos  (26U)\r\n#define CAN_TSR_TME_Msk  (0x7U << CAN_TSR_TME_Pos) /*!< 0x1C000000 */\r\n#define CAN_TSR_TME      CAN_TSR_TME_Msk           /*!< TME[2:0] bits */\r\n#define CAN_TSR_TME0_Pos (26U)\r\n#define CAN_TSR_TME0_Msk (0x1U << CAN_TSR_TME0_Pos) /*!< 0x04000000 */\r\n#define CAN_TSR_TME0     CAN_TSR_TME0_Msk           /*!< Transmit Mailbox 0 Empty */\r\n#define CAN_TSR_TME1_Pos (27U)\r\n#define CAN_TSR_TME1_Msk (0x1U << CAN_TSR_TME1_Pos) /*!< 0x08000000 */\r\n#define CAN_TSR_TME1     CAN_TSR_TME1_Msk           /*!< Transmit Mailbox 1 Empty */\r\n#define CAN_TSR_TME2_Pos (28U)\r\n#define CAN_TSR_TME2_Msk (0x1U << CAN_TSR_TME2_Pos) /*!< 0x10000000 */\r\n#define CAN_TSR_TME2     CAN_TSR_TME2_Msk           /*!< Transmit Mailbox 2 Empty */\r\n\r\n#define CAN_TSR_LOW_Pos  (29U)\r\n#define CAN_TSR_LOW_Msk  (0x7U << CAN_TSR_LOW_Pos) /*!< 0xE0000000 */\r\n#define CAN_TSR_LOW      CAN_TSR_LOW_Msk           /*!< LOW[2:0] bits */\r\n#define CAN_TSR_LOW0_Pos (29U)\r\n#define CAN_TSR_LOW0_Msk (0x1U << CAN_TSR_LOW0_Pos) /*!< 0x20000000 */\r\n#define CAN_TSR_LOW0     CAN_TSR_LOW0_Msk           /*!< Lowest Priority Flag for Mailbox 0 */\r\n#define CAN_TSR_LOW1_Pos (30U)\r\n#define CAN_TSR_LOW1_Msk (0x1U << CAN_TSR_LOW1_Pos) /*!< 0x40000000 */\r\n#define CAN_TSR_LOW1     CAN_TSR_LOW1_Msk           /*!< Lowest Priority Flag for Mailbox 1 */\r\n#define CAN_TSR_LOW2_Pos (31U)\r\n#define CAN_TSR_LOW2_Msk (0x1U << CAN_TSR_LOW2_Pos) /*!< 0x80000000 */\r\n#define CAN_TSR_LOW2     CAN_TSR_LOW2_Msk           /*!< Lowest Priority Flag for Mailbox 2 */\r\n\r\n/*******************  Bit definition for CAN_RF0R register  *******************/\r\n#define CAN_RF0R_FMP0_Pos  (0U)\r\n#define CAN_RF0R_FMP0_Msk  (0x3U << CAN_RF0R_FMP0_Pos) /*!< 0x00000003 */\r\n#define CAN_RF0R_FMP0      CAN_RF0R_FMP0_Msk           /*!< FIFO 0 Message Pending */\r\n#define CAN_RF0R_FULL0_Pos (3U)\r\n#define CAN_RF0R_FULL0_Msk (0x1U << CAN_RF0R_FULL0_Pos) /*!< 0x00000008 */\r\n#define CAN_RF0R_FULL0     CAN_RF0R_FULL0_Msk           /*!< FIFO 0 Full */\r\n#define CAN_RF0R_FOVR0_Pos (4U)\r\n#define CAN_RF0R_FOVR0_Msk (0x1U << CAN_RF0R_FOVR0_Pos) /*!< 0x00000010 */\r\n#define CAN_RF0R_FOVR0     CAN_RF0R_FOVR0_Msk           /*!< FIFO 0 Overrun */\r\n#define CAN_RF0R_RFOM0_Pos (5U)\r\n#define CAN_RF0R_RFOM0_Msk (0x1U << CAN_RF0R_RFOM0_Pos) /*!< 0x00000020 */\r\n#define CAN_RF0R_RFOM0     CAN_RF0R_RFOM0_Msk           /*!< Release FIFO 0 Output Mailbox */\r\n\r\n/*******************  Bit definition for CAN_RF1R register  *******************/\r\n#define CAN_RF1R_FMP1_Pos  (0U)\r\n#define CAN_RF1R_FMP1_Msk  (0x3U << CAN_RF1R_FMP1_Pos) /*!< 0x00000003 */\r\n#define CAN_RF1R_FMP1      CAN_RF1R_FMP1_Msk           /*!< FIFO 1 Message Pending */\r\n#define CAN_RF1R_FULL1_Pos (3U)\r\n#define CAN_RF1R_FULL1_Msk (0x1U << CAN_RF1R_FULL1_Pos) /*!< 0x00000008 */\r\n#define CAN_RF1R_FULL1     CAN_RF1R_FULL1_Msk           /*!< FIFO 1 Full */\r\n#define CAN_RF1R_FOVR1_Pos (4U)\r\n#define CAN_RF1R_FOVR1_Msk (0x1U << CAN_RF1R_FOVR1_Pos) /*!< 0x00000010 */\r\n#define CAN_RF1R_FOVR1     CAN_RF1R_FOVR1_Msk           /*!< FIFO 1 Overrun */\r\n#define CAN_RF1R_RFOM1_Pos (5U)\r\n#define CAN_RF1R_RFOM1_Msk (0x1U << CAN_RF1R_RFOM1_Pos) /*!< 0x00000020 */\r\n#define CAN_RF1R_RFOM1     CAN_RF1R_RFOM1_Msk           /*!< Release FIFO 1 Output Mailbox */\r\n\r\n/********************  Bit definition for CAN_IER register  *******************/\r\n#define CAN_IER_TMEIE_Pos  (0U)\r\n#define CAN_IER_TMEIE_Msk  (0x1U << CAN_IER_TMEIE_Pos) /*!< 0x00000001 */\r\n#define CAN_IER_TMEIE      CAN_IER_TMEIE_Msk           /*!< Transmit Mailbox Empty Interrupt Enable */\r\n#define CAN_IER_FMPIE0_Pos (1U)\r\n#define CAN_IER_FMPIE0_Msk (0x1U << CAN_IER_FMPIE0_Pos) /*!< 0x00000002 */\r\n#define CAN_IER_FMPIE0     CAN_IER_FMPIE0_Msk           /*!< FIFO Message Pending Interrupt Enable */\r\n#define CAN_IER_FFIE0_Pos  (2U)\r\n#define CAN_IER_FFIE0_Msk  (0x1U << CAN_IER_FFIE0_Pos) /*!< 0x00000004 */\r\n#define CAN_IER_FFIE0      CAN_IER_FFIE0_Msk           /*!< FIFO Full Interrupt Enable */\r\n#define CAN_IER_FOVIE0_Pos (3U)\r\n#define CAN_IER_FOVIE0_Msk (0x1U << CAN_IER_FOVIE0_Pos) /*!< 0x00000008 */\r\n#define CAN_IER_FOVIE0     CAN_IER_FOVIE0_Msk           /*!< FIFO Overrun Interrupt Enable */\r\n#define CAN_IER_FMPIE1_Pos (4U)\r\n#define CAN_IER_FMPIE1_Msk (0x1U << CAN_IER_FMPIE1_Pos) /*!< 0x00000010 */\r\n#define CAN_IER_FMPIE1     CAN_IER_FMPIE1_Msk           /*!< FIFO Message Pending Interrupt Enable */\r\n#define CAN_IER_FFIE1_Pos  (5U)\r\n#define CAN_IER_FFIE1_Msk  (0x1U << CAN_IER_FFIE1_Pos) /*!< 0x00000020 */\r\n#define CAN_IER_FFIE1      CAN_IER_FFIE1_Msk           /*!< FIFO Full Interrupt Enable */\r\n#define CAN_IER_FOVIE1_Pos (6U)\r\n#define CAN_IER_FOVIE1_Msk (0x1U << CAN_IER_FOVIE1_Pos) /*!< 0x00000040 */\r\n#define CAN_IER_FOVIE1     CAN_IER_FOVIE1_Msk           /*!< FIFO Overrun Interrupt Enable */\r\n#define CAN_IER_EWGIE_Pos  (8U)\r\n#define CAN_IER_EWGIE_Msk  (0x1U << CAN_IER_EWGIE_Pos) /*!< 0x00000100 */\r\n#define CAN_IER_EWGIE      CAN_IER_EWGIE_Msk           /*!< Error Warning Interrupt Enable */\r\n#define CAN_IER_EPVIE_Pos  (9U)\r\n#define CAN_IER_EPVIE_Msk  (0x1U << CAN_IER_EPVIE_Pos) /*!< 0x00000200 */\r\n#define CAN_IER_EPVIE      CAN_IER_EPVIE_Msk           /*!< Error Passive Interrupt Enable */\r\n#define CAN_IER_BOFIE_Pos  (10U)\r\n#define CAN_IER_BOFIE_Msk  (0x1U << CAN_IER_BOFIE_Pos) /*!< 0x00000400 */\r\n#define CAN_IER_BOFIE      CAN_IER_BOFIE_Msk           /*!< Bus-Off Interrupt Enable */\r\n#define CAN_IER_LECIE_Pos  (11U)\r\n#define CAN_IER_LECIE_Msk  (0x1U << CAN_IER_LECIE_Pos) /*!< 0x00000800 */\r\n#define CAN_IER_LECIE      CAN_IER_LECIE_Msk           /*!< Last Error Code Interrupt Enable */\r\n#define CAN_IER_ERRIE_Pos  (15U)\r\n#define CAN_IER_ERRIE_Msk  (0x1U << CAN_IER_ERRIE_Pos) /*!< 0x00008000 */\r\n#define CAN_IER_ERRIE      CAN_IER_ERRIE_Msk           /*!< Error Interrupt Enable */\r\n#define CAN_IER_WKUIE_Pos  (16U)\r\n#define CAN_IER_WKUIE_Msk  (0x1U << CAN_IER_WKUIE_Pos) /*!< 0x00010000 */\r\n#define CAN_IER_WKUIE      CAN_IER_WKUIE_Msk           /*!< Wakeup Interrupt Enable */\r\n#define CAN_IER_SLKIE_Pos  (17U)\r\n#define CAN_IER_SLKIE_Msk  (0x1U << CAN_IER_SLKIE_Pos) /*!< 0x00020000 */\r\n#define CAN_IER_SLKIE      CAN_IER_SLKIE_Msk           /*!< Sleep Interrupt Enable */\r\n\r\n/********************  Bit definition for CAN_ESR register  *******************/\r\n#define CAN_ESR_EWGF_Pos (0U)\r\n#define CAN_ESR_EWGF_Msk (0x1U << CAN_ESR_EWGF_Pos) /*!< 0x00000001 */\r\n#define CAN_ESR_EWGF     CAN_ESR_EWGF_Msk           /*!< Error Warning Flag */\r\n#define CAN_ESR_EPVF_Pos (1U)\r\n#define CAN_ESR_EPVF_Msk (0x1U << CAN_ESR_EPVF_Pos) /*!< 0x00000002 */\r\n#define CAN_ESR_EPVF     CAN_ESR_EPVF_Msk           /*!< Error Passive Flag */\r\n#define CAN_ESR_BOFF_Pos (2U)\r\n#define CAN_ESR_BOFF_Msk (0x1U << CAN_ESR_BOFF_Pos) /*!< 0x00000004 */\r\n#define CAN_ESR_BOFF     CAN_ESR_BOFF_Msk           /*!< Bus-Off Flag */\r\n\r\n#define CAN_ESR_LEC_Pos (4U)\r\n#define CAN_ESR_LEC_Msk (0x7U << CAN_ESR_LEC_Pos) /*!< 0x00000070 */\r\n#define CAN_ESR_LEC     CAN_ESR_LEC_Msk           /*!< LEC[2:0] bits (Last Error Code) */\r\n#define CAN_ESR_LEC_0   (0x1U << CAN_ESR_LEC_Pos) /*!< 0x00000010 */\r\n#define CAN_ESR_LEC_1   (0x2U << CAN_ESR_LEC_Pos) /*!< 0x00000020 */\r\n#define CAN_ESR_LEC_2   (0x4U << CAN_ESR_LEC_Pos) /*!< 0x00000040 */\r\n\r\n#define CAN_ESR_TEC_Pos (16U)\r\n#define CAN_ESR_TEC_Msk (0xFFU << CAN_ESR_TEC_Pos) /*!< 0x00FF0000 */\r\n#define CAN_ESR_TEC     CAN_ESR_TEC_Msk            /*!< Least significant byte of the 9-bit Transmit Error Counter */\r\n#define CAN_ESR_REC_Pos (24U)\r\n#define CAN_ESR_REC_Msk (0xFFU << CAN_ESR_REC_Pos) /*!< 0xFF000000 */\r\n#define CAN_ESR_REC     CAN_ESR_REC_Msk            /*!< Receive Error Counter */\r\n\r\n/*******************  Bit definition for CAN_BTR register  ********************/\r\n#define CAN_BTR_BRP_Pos  (0U)\r\n#define CAN_BTR_BRP_Msk  (0x3FFU << CAN_BTR_BRP_Pos) /*!< 0x000003FF */\r\n#define CAN_BTR_BRP      CAN_BTR_BRP_Msk             /*!<Baud Rate Prescaler */\r\n#define CAN_BTR_TS1_Pos  (16U)\r\n#define CAN_BTR_TS1_Msk  (0xFU << CAN_BTR_TS1_Pos) /*!< 0x000F0000 */\r\n#define CAN_BTR_TS1      CAN_BTR_TS1_Msk           /*!<Time Segment 1 */\r\n#define CAN_BTR_TS1_0    (0x1U << CAN_BTR_TS1_Pos) /*!< 0x00010000 */\r\n#define CAN_BTR_TS1_1    (0x2U << CAN_BTR_TS1_Pos) /*!< 0x00020000 */\r\n#define CAN_BTR_TS1_2    (0x4U << CAN_BTR_TS1_Pos) /*!< 0x00040000 */\r\n#define CAN_BTR_TS1_3    (0x8U << CAN_BTR_TS1_Pos) /*!< 0x00080000 */\r\n#define CAN_BTR_TS2_Pos  (20U)\r\n#define CAN_BTR_TS2_Msk  (0x7U << CAN_BTR_TS2_Pos) /*!< 0x00700000 */\r\n#define CAN_BTR_TS2      CAN_BTR_TS2_Msk           /*!<Time Segment 2 */\r\n#define CAN_BTR_TS2_0    (0x1U << CAN_BTR_TS2_Pos) /*!< 0x00100000 */\r\n#define CAN_BTR_TS2_1    (0x2U << CAN_BTR_TS2_Pos) /*!< 0x00200000 */\r\n#define CAN_BTR_TS2_2    (0x4U << CAN_BTR_TS2_Pos) /*!< 0x00400000 */\r\n#define CAN_BTR_SJW_Pos  (24U)\r\n#define CAN_BTR_SJW_Msk  (0x3U << CAN_BTR_SJW_Pos) /*!< 0x03000000 */\r\n#define CAN_BTR_SJW      CAN_BTR_SJW_Msk           /*!<Resynchronization Jump Width */\r\n#define CAN_BTR_SJW_0    (0x1U << CAN_BTR_SJW_Pos) /*!< 0x01000000 */\r\n#define CAN_BTR_SJW_1    (0x2U << CAN_BTR_SJW_Pos) /*!< 0x02000000 */\r\n#define CAN_BTR_LBKM_Pos (30U)\r\n#define CAN_BTR_LBKM_Msk (0x1U << CAN_BTR_LBKM_Pos) /*!< 0x40000000 */\r\n#define CAN_BTR_LBKM     CAN_BTR_LBKM_Msk           /*!<Loop Back Mode (Debug) */\r\n#define CAN_BTR_SILM_Pos (31U)\r\n#define CAN_BTR_SILM_Msk (0x1U << CAN_BTR_SILM_Pos) /*!< 0x80000000 */\r\n#define CAN_BTR_SILM     CAN_BTR_SILM_Msk           /*!<Silent Mode */\r\n\r\n/*!< Mailbox registers */\r\n/******************  Bit definition for CAN_TI0R register  ********************/\r\n#define CAN_TI0R_TXRQ_Pos (0U)\r\n#define CAN_TI0R_TXRQ_Msk (0x1U << CAN_TI0R_TXRQ_Pos) /*!< 0x00000001 */\r\n#define CAN_TI0R_TXRQ     CAN_TI0R_TXRQ_Msk           /*!< Transmit Mailbox Request */\r\n#define CAN_TI0R_RTR_Pos  (1U)\r\n#define CAN_TI0R_RTR_Msk  (0x1U << CAN_TI0R_RTR_Pos) /*!< 0x00000002 */\r\n#define CAN_TI0R_RTR      CAN_TI0R_RTR_Msk           /*!< Remote Transmission Request */\r\n#define CAN_TI0R_IDE_Pos  (2U)\r\n#define CAN_TI0R_IDE_Msk  (0x1U << CAN_TI0R_IDE_Pos) /*!< 0x00000004 */\r\n#define CAN_TI0R_IDE      CAN_TI0R_IDE_Msk           /*!< Identifier Extension */\r\n#define CAN_TI0R_EXID_Pos (3U)\r\n#define CAN_TI0R_EXID_Msk (0x3FFFFU << CAN_TI0R_EXID_Pos) /*!< 0x001FFFF8 */\r\n#define CAN_TI0R_EXID     CAN_TI0R_EXID_Msk               /*!< Extended Identifier */\r\n#define CAN_TI0R_STID_Pos (21U)\r\n#define CAN_TI0R_STID_Msk (0x7FFU << CAN_TI0R_STID_Pos) /*!< 0xFFE00000 */\r\n#define CAN_TI0R_STID     CAN_TI0R_STID_Msk             /*!< Standard Identifier or Extended Identifier */\r\n\r\n/******************  Bit definition for CAN_TDT0R register  *******************/\r\n#define CAN_TDT0R_DLC_Pos  (0U)\r\n#define CAN_TDT0R_DLC_Msk  (0xFU << CAN_TDT0R_DLC_Pos) /*!< 0x0000000F */\r\n#define CAN_TDT0R_DLC      CAN_TDT0R_DLC_Msk           /*!< Data Length Code */\r\n#define CAN_TDT0R_TGT_Pos  (8U)\r\n#define CAN_TDT0R_TGT_Msk  (0x1U << CAN_TDT0R_TGT_Pos) /*!< 0x00000100 */\r\n#define CAN_TDT0R_TGT      CAN_TDT0R_TGT_Msk           /*!< Transmit Global Time */\r\n#define CAN_TDT0R_TIME_Pos (16U)\r\n#define CAN_TDT0R_TIME_Msk (0xFFFFU << CAN_TDT0R_TIME_Pos) /*!< 0xFFFF0000 */\r\n#define CAN_TDT0R_TIME     CAN_TDT0R_TIME_Msk              /*!< Message Time Stamp */\r\n\r\n/******************  Bit definition for CAN_TDL0R register  *******************/\r\n#define CAN_TDL0R_DATA0_Pos (0U)\r\n#define CAN_TDL0R_DATA0_Msk (0xFFU << CAN_TDL0R_DATA0_Pos) /*!< 0x000000FF */\r\n#define CAN_TDL0R_DATA0     CAN_TDL0R_DATA0_Msk            /*!< Data byte 0 */\r\n#define CAN_TDL0R_DATA1_Pos (8U)\r\n#define CAN_TDL0R_DATA1_Msk (0xFFU << CAN_TDL0R_DATA1_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDL0R_DATA1     CAN_TDL0R_DATA1_Msk            /*!< Data byte 1 */\r\n#define CAN_TDL0R_DATA2_Pos (16U)\r\n#define CAN_TDL0R_DATA2_Msk (0xFFU << CAN_TDL0R_DATA2_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDL0R_DATA2     CAN_TDL0R_DATA2_Msk            /*!< Data byte 2 */\r\n#define CAN_TDL0R_DATA3_Pos (24U)\r\n#define CAN_TDL0R_DATA3_Msk (0xFFU << CAN_TDL0R_DATA3_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDL0R_DATA3     CAN_TDL0R_DATA3_Msk            /*!< Data byte 3 */\r\n\r\n/******************  Bit definition for CAN_TDH0R register  *******************/\r\n#define CAN_TDH0R_DATA4_Pos (0U)\r\n#define CAN_TDH0R_DATA4_Msk (0xFFU << CAN_TDH0R_DATA4_Pos) /*!< 0x000000FF */\r\n#define CAN_TDH0R_DATA4     CAN_TDH0R_DATA4_Msk            /*!< Data byte 4 */\r\n#define CAN_TDH0R_DATA5_Pos (8U)\r\n#define CAN_TDH0R_DATA5_Msk (0xFFU << CAN_TDH0R_DATA5_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDH0R_DATA5     CAN_TDH0R_DATA5_Msk            /*!< Data byte 5 */\r\n#define CAN_TDH0R_DATA6_Pos (16U)\r\n#define CAN_TDH0R_DATA6_Msk (0xFFU << CAN_TDH0R_DATA6_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDH0R_DATA6     CAN_TDH0R_DATA6_Msk            /*!< Data byte 6 */\r\n#define CAN_TDH0R_DATA7_Pos (24U)\r\n#define CAN_TDH0R_DATA7_Msk (0xFFU << CAN_TDH0R_DATA7_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDH0R_DATA7     CAN_TDH0R_DATA7_Msk            /*!< Data byte 7 */\r\n\r\n/*******************  Bit definition for CAN_TI1R register  *******************/\r\n#define CAN_TI1R_TXRQ_Pos (0U)\r\n#define CAN_TI1R_TXRQ_Msk (0x1U << CAN_TI1R_TXRQ_Pos) /*!< 0x00000001 */\r\n#define CAN_TI1R_TXRQ     CAN_TI1R_TXRQ_Msk           /*!< Transmit Mailbox Request */\r\n#define CAN_TI1R_RTR_Pos  (1U)\r\n#define CAN_TI1R_RTR_Msk  (0x1U << CAN_TI1R_RTR_Pos) /*!< 0x00000002 */\r\n#define CAN_TI1R_RTR      CAN_TI1R_RTR_Msk           /*!< Remote Transmission Request */\r\n#define CAN_TI1R_IDE_Pos  (2U)\r\n#define CAN_TI1R_IDE_Msk  (0x1U << CAN_TI1R_IDE_Pos) /*!< 0x00000004 */\r\n#define CAN_TI1R_IDE      CAN_TI1R_IDE_Msk           /*!< Identifier Extension */\r\n#define CAN_TI1R_EXID_Pos (3U)\r\n#define CAN_TI1R_EXID_Msk (0x3FFFFU << CAN_TI1R_EXID_Pos) /*!< 0x001FFFF8 */\r\n#define CAN_TI1R_EXID     CAN_TI1R_EXID_Msk               /*!< Extended Identifier */\r\n#define CAN_TI1R_STID_Pos (21U)\r\n#define CAN_TI1R_STID_Msk (0x7FFU << CAN_TI1R_STID_Pos) /*!< 0xFFE00000 */\r\n#define CAN_TI1R_STID     CAN_TI1R_STID_Msk             /*!< Standard Identifier or Extended Identifier */\r\n\r\n/*******************  Bit definition for CAN_TDT1R register  ******************/\r\n#define CAN_TDT1R_DLC_Pos  (0U)\r\n#define CAN_TDT1R_DLC_Msk  (0xFU << CAN_TDT1R_DLC_Pos) /*!< 0x0000000F */\r\n#define CAN_TDT1R_DLC      CAN_TDT1R_DLC_Msk           /*!< Data Length Code */\r\n#define CAN_TDT1R_TGT_Pos  (8U)\r\n#define CAN_TDT1R_TGT_Msk  (0x1U << CAN_TDT1R_TGT_Pos) /*!< 0x00000100 */\r\n#define CAN_TDT1R_TGT      CAN_TDT1R_TGT_Msk           /*!< Transmit Global Time */\r\n#define CAN_TDT1R_TIME_Pos (16U)\r\n#define CAN_TDT1R_TIME_Msk (0xFFFFU << CAN_TDT1R_TIME_Pos) /*!< 0xFFFF0000 */\r\n#define CAN_TDT1R_TIME     CAN_TDT1R_TIME_Msk              /*!< Message Time Stamp */\r\n\r\n/*******************  Bit definition for CAN_TDL1R register  ******************/\r\n#define CAN_TDL1R_DATA0_Pos (0U)\r\n#define CAN_TDL1R_DATA0_Msk (0xFFU << CAN_TDL1R_DATA0_Pos) /*!< 0x000000FF */\r\n#define CAN_TDL1R_DATA0     CAN_TDL1R_DATA0_Msk            /*!< Data byte 0 */\r\n#define CAN_TDL1R_DATA1_Pos (8U)\r\n#define CAN_TDL1R_DATA1_Msk (0xFFU << CAN_TDL1R_DATA1_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDL1R_DATA1     CAN_TDL1R_DATA1_Msk            /*!< Data byte 1 */\r\n#define CAN_TDL1R_DATA2_Pos (16U)\r\n#define CAN_TDL1R_DATA2_Msk (0xFFU << CAN_TDL1R_DATA2_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDL1R_DATA2     CAN_TDL1R_DATA2_Msk            /*!< Data byte 2 */\r\n#define CAN_TDL1R_DATA3_Pos (24U)\r\n#define CAN_TDL1R_DATA3_Msk (0xFFU << CAN_TDL1R_DATA3_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDL1R_DATA3     CAN_TDL1R_DATA3_Msk            /*!< Data byte 3 */\r\n\r\n/*******************  Bit definition for CAN_TDH1R register  ******************/\r\n#define CAN_TDH1R_DATA4_Pos (0U)\r\n#define CAN_TDH1R_DATA4_Msk (0xFFU << CAN_TDH1R_DATA4_Pos) /*!< 0x000000FF */\r\n#define CAN_TDH1R_DATA4     CAN_TDH1R_DATA4_Msk            /*!< Data byte 4 */\r\n#define CAN_TDH1R_DATA5_Pos (8U)\r\n#define CAN_TDH1R_DATA5_Msk (0xFFU << CAN_TDH1R_DATA5_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDH1R_DATA5     CAN_TDH1R_DATA5_Msk            /*!< Data byte 5 */\r\n#define CAN_TDH1R_DATA6_Pos (16U)\r\n#define CAN_TDH1R_DATA6_Msk (0xFFU << CAN_TDH1R_DATA6_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDH1R_DATA6     CAN_TDH1R_DATA6_Msk            /*!< Data byte 6 */\r\n#define CAN_TDH1R_DATA7_Pos (24U)\r\n#define CAN_TDH1R_DATA7_Msk (0xFFU << CAN_TDH1R_DATA7_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDH1R_DATA7     CAN_TDH1R_DATA7_Msk            /*!< Data byte 7 */\r\n\r\n/*******************  Bit definition for CAN_TI2R register  *******************/\r\n#define CAN_TI2R_TXRQ_Pos (0U)\r\n#define CAN_TI2R_TXRQ_Msk (0x1U << CAN_TI2R_TXRQ_Pos) /*!< 0x00000001 */\r\n#define CAN_TI2R_TXRQ     CAN_TI2R_TXRQ_Msk           /*!< Transmit Mailbox Request */\r\n#define CAN_TI2R_RTR_Pos  (1U)\r\n#define CAN_TI2R_RTR_Msk  (0x1U << CAN_TI2R_RTR_Pos) /*!< 0x00000002 */\r\n#define CAN_TI2R_RTR      CAN_TI2R_RTR_Msk           /*!< Remote Transmission Request */\r\n#define CAN_TI2R_IDE_Pos  (2U)\r\n#define CAN_TI2R_IDE_Msk  (0x1U << CAN_TI2R_IDE_Pos) /*!< 0x00000004 */\r\n#define CAN_TI2R_IDE      CAN_TI2R_IDE_Msk           /*!< Identifier Extension */\r\n#define CAN_TI2R_EXID_Pos (3U)\r\n#define CAN_TI2R_EXID_Msk (0x3FFFFU << CAN_TI2R_EXID_Pos) /*!< 0x001FFFF8 */\r\n#define CAN_TI2R_EXID     CAN_TI2R_EXID_Msk               /*!< Extended identifier */\r\n#define CAN_TI2R_STID_Pos (21U)\r\n#define CAN_TI2R_STID_Msk (0x7FFU << CAN_TI2R_STID_Pos) /*!< 0xFFE00000 */\r\n#define CAN_TI2R_STID     CAN_TI2R_STID_Msk             /*!< Standard Identifier or Extended Identifier */\r\n\r\n/*******************  Bit definition for CAN_TDT2R register  ******************/\r\n#define CAN_TDT2R_DLC_Pos  (0U)\r\n#define CAN_TDT2R_DLC_Msk  (0xFU << CAN_TDT2R_DLC_Pos) /*!< 0x0000000F */\r\n#define CAN_TDT2R_DLC      CAN_TDT2R_DLC_Msk           /*!< Data Length Code */\r\n#define CAN_TDT2R_TGT_Pos  (8U)\r\n#define CAN_TDT2R_TGT_Msk  (0x1U << CAN_TDT2R_TGT_Pos) /*!< 0x00000100 */\r\n#define CAN_TDT2R_TGT      CAN_TDT2R_TGT_Msk           /*!< Transmit Global Time */\r\n#define CAN_TDT2R_TIME_Pos (16U)\r\n#define CAN_TDT2R_TIME_Msk (0xFFFFU << CAN_TDT2R_TIME_Pos) /*!< 0xFFFF0000 */\r\n#define CAN_TDT2R_TIME     CAN_TDT2R_TIME_Msk              /*!< Message Time Stamp */\r\n\r\n/*******************  Bit definition for CAN_TDL2R register  ******************/\r\n#define CAN_TDL2R_DATA0_Pos (0U)\r\n#define CAN_TDL2R_DATA0_Msk (0xFFU << CAN_TDL2R_DATA0_Pos) /*!< 0x000000FF */\r\n#define CAN_TDL2R_DATA0     CAN_TDL2R_DATA0_Msk            /*!< Data byte 0 */\r\n#define CAN_TDL2R_DATA1_Pos (8U)\r\n#define CAN_TDL2R_DATA1_Msk (0xFFU << CAN_TDL2R_DATA1_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDL2R_DATA1     CAN_TDL2R_DATA1_Msk            /*!< Data byte 1 */\r\n#define CAN_TDL2R_DATA2_Pos (16U)\r\n#define CAN_TDL2R_DATA2_Msk (0xFFU << CAN_TDL2R_DATA2_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDL2R_DATA2     CAN_TDL2R_DATA2_Msk            /*!< Data byte 2 */\r\n#define CAN_TDL2R_DATA3_Pos (24U)\r\n#define CAN_TDL2R_DATA3_Msk (0xFFU << CAN_TDL2R_DATA3_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDL2R_DATA3     CAN_TDL2R_DATA3_Msk            /*!< Data byte 3 */\r\n\r\n/*******************  Bit definition for CAN_TDH2R register  ******************/\r\n#define CAN_TDH2R_DATA4_Pos (0U)\r\n#define CAN_TDH2R_DATA4_Msk (0xFFU << CAN_TDH2R_DATA4_Pos) /*!< 0x000000FF */\r\n#define CAN_TDH2R_DATA4     CAN_TDH2R_DATA4_Msk            /*!< Data byte 4 */\r\n#define CAN_TDH2R_DATA5_Pos (8U)\r\n#define CAN_TDH2R_DATA5_Msk (0xFFU << CAN_TDH2R_DATA5_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDH2R_DATA5     CAN_TDH2R_DATA5_Msk            /*!< Data byte 5 */\r\n#define CAN_TDH2R_DATA6_Pos (16U)\r\n#define CAN_TDH2R_DATA6_Msk (0xFFU << CAN_TDH2R_DATA6_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDH2R_DATA6     CAN_TDH2R_DATA6_Msk            /*!< Data byte 6 */\r\n#define CAN_TDH2R_DATA7_Pos (24U)\r\n#define CAN_TDH2R_DATA7_Msk (0xFFU << CAN_TDH2R_DATA7_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDH2R_DATA7     CAN_TDH2R_DATA7_Msk            /*!< Data byte 7 */\r\n\r\n/*******************  Bit definition for CAN_RI0R register  *******************/\r\n#define CAN_RI0R_RTR_Pos  (1U)\r\n#define CAN_RI0R_RTR_Msk  (0x1U << CAN_RI0R_RTR_Pos) /*!< 0x00000002 */\r\n#define CAN_RI0R_RTR      CAN_RI0R_RTR_Msk           /*!< Remote Transmission Request */\r\n#define CAN_RI0R_IDE_Pos  (2U)\r\n#define CAN_RI0R_IDE_Msk  (0x1U << CAN_RI0R_IDE_Pos) /*!< 0x00000004 */\r\n#define CAN_RI0R_IDE      CAN_RI0R_IDE_Msk           /*!< Identifier Extension */\r\n#define CAN_RI0R_EXID_Pos (3U)\r\n#define CAN_RI0R_EXID_Msk (0x3FFFFU << CAN_RI0R_EXID_Pos) /*!< 0x001FFFF8 */\r\n#define CAN_RI0R_EXID     CAN_RI0R_EXID_Msk               /*!< Extended Identifier */\r\n#define CAN_RI0R_STID_Pos (21U)\r\n#define CAN_RI0R_STID_Msk (0x7FFU << CAN_RI0R_STID_Pos) /*!< 0xFFE00000 */\r\n#define CAN_RI0R_STID     CAN_RI0R_STID_Msk             /*!< Standard Identifier or Extended Identifier */\r\n\r\n/*******************  Bit definition for CAN_RDT0R register  ******************/\r\n#define CAN_RDT0R_DLC_Pos  (0U)\r\n#define CAN_RDT0R_DLC_Msk  (0xFU << CAN_RDT0R_DLC_Pos) /*!< 0x0000000F */\r\n#define CAN_RDT0R_DLC      CAN_RDT0R_DLC_Msk           /*!< Data Length Code */\r\n#define CAN_RDT0R_FMI_Pos  (8U)\r\n#define CAN_RDT0R_FMI_Msk  (0xFFU << CAN_RDT0R_FMI_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDT0R_FMI      CAN_RDT0R_FMI_Msk            /*!< Filter Match Index */\r\n#define CAN_RDT0R_TIME_Pos (16U)\r\n#define CAN_RDT0R_TIME_Msk (0xFFFFU << CAN_RDT0R_TIME_Pos) /*!< 0xFFFF0000 */\r\n#define CAN_RDT0R_TIME     CAN_RDT0R_TIME_Msk              /*!< Message Time Stamp */\r\n\r\n/*******************  Bit definition for CAN_RDL0R register  ******************/\r\n#define CAN_RDL0R_DATA0_Pos (0U)\r\n#define CAN_RDL0R_DATA0_Msk (0xFFU << CAN_RDL0R_DATA0_Pos) /*!< 0x000000FF */\r\n#define CAN_RDL0R_DATA0     CAN_RDL0R_DATA0_Msk            /*!< Data byte 0 */\r\n#define CAN_RDL0R_DATA1_Pos (8U)\r\n#define CAN_RDL0R_DATA1_Msk (0xFFU << CAN_RDL0R_DATA1_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDL0R_DATA1     CAN_RDL0R_DATA1_Msk            /*!< Data byte 1 */\r\n#define CAN_RDL0R_DATA2_Pos (16U)\r\n#define CAN_RDL0R_DATA2_Msk (0xFFU << CAN_RDL0R_DATA2_Pos) /*!< 0x00FF0000 */\r\n#define CAN_RDL0R_DATA2     CAN_RDL0R_DATA2_Msk            /*!< Data byte 2 */\r\n#define CAN_RDL0R_DATA3_Pos (24U)\r\n#define CAN_RDL0R_DATA3_Msk (0xFFU << CAN_RDL0R_DATA3_Pos) /*!< 0xFF000000 */\r\n#define CAN_RDL0R_DATA3     CAN_RDL0R_DATA3_Msk            /*!< Data byte 3 */\r\n\r\n/*******************  Bit definition for CAN_RDH0R register  ******************/\r\n#define CAN_RDH0R_DATA4_Pos (0U)\r\n#define CAN_RDH0R_DATA4_Msk (0xFFU << CAN_RDH0R_DATA4_Pos) /*!< 0x000000FF */\r\n#define CAN_RDH0R_DATA4     CAN_RDH0R_DATA4_Msk            /*!< Data byte 4 */\r\n#define CAN_RDH0R_DATA5_Pos (8U)\r\n#define CAN_RDH0R_DATA5_Msk (0xFFU << CAN_RDH0R_DATA5_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDH0R_DATA5     CAN_RDH0R_DATA5_Msk            /*!< Data byte 5 */\r\n#define CAN_RDH0R_DATA6_Pos (16U)\r\n#define CAN_RDH0R_DATA6_Msk (0xFFU << CAN_RDH0R_DATA6_Pos) /*!< 0x00FF0000 */\r\n#define CAN_RDH0R_DATA6     CAN_RDH0R_DATA6_Msk            /*!< Data byte 6 */\r\n#define CAN_RDH0R_DATA7_Pos (24U)\r\n#define CAN_RDH0R_DATA7_Msk (0xFFU << CAN_RDH0R_DATA7_Pos) /*!< 0xFF000000 */\r\n#define CAN_RDH0R_DATA7     CAN_RDH0R_DATA7_Msk            /*!< Data byte 7 */\r\n\r\n/*******************  Bit definition for CAN_RI1R register  *******************/\r\n#define CAN_RI1R_RTR_Pos  (1U)\r\n#define CAN_RI1R_RTR_Msk  (0x1U << CAN_RI1R_RTR_Pos) /*!< 0x00000002 */\r\n#define CAN_RI1R_RTR      CAN_RI1R_RTR_Msk           /*!< Remote Transmission Request */\r\n#define CAN_RI1R_IDE_Pos  (2U)\r\n#define CAN_RI1R_IDE_Msk  (0x1U << CAN_RI1R_IDE_Pos) /*!< 0x00000004 */\r\n#define CAN_RI1R_IDE      CAN_RI1R_IDE_Msk           /*!< Identifier Extension */\r\n#define CAN_RI1R_EXID_Pos (3U)\r\n#define CAN_RI1R_EXID_Msk (0x3FFFFU << CAN_RI1R_EXID_Pos) /*!< 0x001FFFF8 */\r\n#define CAN_RI1R_EXID     CAN_RI1R_EXID_Msk               /*!< Extended identifier */\r\n#define CAN_RI1R_STID_Pos (21U)\r\n#define CAN_RI1R_STID_Msk (0x7FFU << CAN_RI1R_STID_Pos) /*!< 0xFFE00000 */\r\n#define CAN_RI1R_STID     CAN_RI1R_STID_Msk             /*!< Standard Identifier or Extended Identifier */\r\n\r\n/*******************  Bit definition for CAN_RDT1R register  ******************/\r\n#define CAN_RDT1R_DLC_Pos  (0U)\r\n#define CAN_RDT1R_DLC_Msk  (0xFU << CAN_RDT1R_DLC_Pos) /*!< 0x0000000F */\r\n#define CAN_RDT1R_DLC      CAN_RDT1R_DLC_Msk           /*!< Data Length Code */\r\n#define CAN_RDT1R_FMI_Pos  (8U)\r\n#define CAN_RDT1R_FMI_Msk  (0xFFU << CAN_RDT1R_FMI_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDT1R_FMI      CAN_RDT1R_FMI_Msk            /*!< Filter Match Index */\r\n#define CAN_RDT1R_TIME_Pos (16U)\r\n#define CAN_RDT1R_TIME_Msk (0xFFFFU << CAN_RDT1R_TIME_Pos) /*!< 0xFFFF0000 */\r\n#define CAN_RDT1R_TIME     CAN_RDT1R_TIME_Msk              /*!< Message Time Stamp */\r\n\r\n/*******************  Bit definition for CAN_RDL1R register  ******************/\r\n#define CAN_RDL1R_DATA0_Pos (0U)\r\n#define CAN_RDL1R_DATA0_Msk (0xFFU << CAN_RDL1R_DATA0_Pos) /*!< 0x000000FF */\r\n#define CAN_RDL1R_DATA0     CAN_RDL1R_DATA0_Msk            /*!< Data byte 0 */\r\n#define CAN_RDL1R_DATA1_Pos (8U)\r\n#define CAN_RDL1R_DATA1_Msk (0xFFU << CAN_RDL1R_DATA1_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDL1R_DATA1     CAN_RDL1R_DATA1_Msk            /*!< Data byte 1 */\r\n#define CAN_RDL1R_DATA2_Pos (16U)\r\n#define CAN_RDL1R_DATA2_Msk (0xFFU << CAN_RDL1R_DATA2_Pos) /*!< 0x00FF0000 */\r\n#define CAN_RDL1R_DATA2     CAN_RDL1R_DATA2_Msk            /*!< Data byte 2 */\r\n#define CAN_RDL1R_DATA3_Pos (24U)\r\n#define CAN_RDL1R_DATA3_Msk (0xFFU << CAN_RDL1R_DATA3_Pos) /*!< 0xFF000000 */\r\n#define CAN_RDL1R_DATA3     CAN_RDL1R_DATA3_Msk            /*!< Data byte 3 */\r\n\r\n/*******************  Bit definition for CAN_RDH1R register  ******************/\r\n#define CAN_RDH1R_DATA4_Pos (0U)\r\n#define CAN_RDH1R_DATA4_Msk (0xFFU << CAN_RDH1R_DATA4_Pos) /*!< 0x000000FF */\r\n#define CAN_RDH1R_DATA4     CAN_RDH1R_DATA4_Msk            /*!< Data byte 4 */\r\n#define CAN_RDH1R_DATA5_Pos (8U)\r\n#define CAN_RDH1R_DATA5_Msk (0xFFU << CAN_RDH1R_DATA5_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDH1R_DATA5     CAN_RDH1R_DATA5_Msk            /*!< Data byte 5 */\r\n#define CAN_RDH1R_DATA6_Pos (16U)\r\n#define CAN_RDH1R_DATA6_Msk (0xFFU << CAN_RDH1R_DATA6_Pos) /*!< 0x00FF0000 */\r\n#define CAN_RDH1R_DATA6     CAN_RDH1R_DATA6_Msk            /*!< Data byte 6 */\r\n#define CAN_RDH1R_DATA7_Pos (24U)\r\n#define CAN_RDH1R_DATA7_Msk (0xFFU << CAN_RDH1R_DATA7_Pos) /*!< 0xFF000000 */\r\n#define CAN_RDH1R_DATA7     CAN_RDH1R_DATA7_Msk            /*!< Data byte 7 */\r\n\r\n/*!< CAN filter registers */\r\n/*******************  Bit definition for CAN_FMR register  ********************/\r\n#define CAN_FMR_FINIT_Pos  (0U)\r\n#define CAN_FMR_FINIT_Msk  (0x1U << CAN_FMR_FINIT_Pos) /*!< 0x00000001 */\r\n#define CAN_FMR_FINIT      CAN_FMR_FINIT_Msk           /*!< Filter Init Mode */\r\n#define CAN_FMR_CAN2SB_Pos (8U)\r\n#define CAN_FMR_CAN2SB_Msk (0x3FU << CAN_FMR_CAN2SB_Pos) /*!< 0x00003F00 */\r\n#define CAN_FMR_CAN2SB     CAN_FMR_CAN2SB_Msk            /*!< CAN2 start bank */\r\n\r\n/*******************  Bit definition for CAN_FM1R register  *******************/\r\n#define CAN_FM1R_FBM_Pos   (0U)\r\n#define CAN_FM1R_FBM_Msk   (0x3FFFU << CAN_FM1R_FBM_Pos) /*!< 0x00003FFF */\r\n#define CAN_FM1R_FBM       CAN_FM1R_FBM_Msk              /*!< Filter Mode */\r\n#define CAN_FM1R_FBM0_Pos  (0U)\r\n#define CAN_FM1R_FBM0_Msk  (0x1U << CAN_FM1R_FBM0_Pos) /*!< 0x00000001 */\r\n#define CAN_FM1R_FBM0      CAN_FM1R_FBM0_Msk           /*!< Filter Init Mode for filter 0 */\r\n#define CAN_FM1R_FBM1_Pos  (1U)\r\n#define CAN_FM1R_FBM1_Msk  (0x1U << CAN_FM1R_FBM1_Pos) /*!< 0x00000002 */\r\n#define CAN_FM1R_FBM1      CAN_FM1R_FBM1_Msk           /*!< Filter Init Mode for filter 1 */\r\n#define CAN_FM1R_FBM2_Pos  (2U)\r\n#define CAN_FM1R_FBM2_Msk  (0x1U << CAN_FM1R_FBM2_Pos) /*!< 0x00000004 */\r\n#define CAN_FM1R_FBM2      CAN_FM1R_FBM2_Msk           /*!< Filter Init Mode for filter 2 */\r\n#define CAN_FM1R_FBM3_Pos  (3U)\r\n#define CAN_FM1R_FBM3_Msk  (0x1U << CAN_FM1R_FBM3_Pos) /*!< 0x00000008 */\r\n#define CAN_FM1R_FBM3      CAN_FM1R_FBM3_Msk           /*!< Filter Init Mode for filter 3 */\r\n#define CAN_FM1R_FBM4_Pos  (4U)\r\n#define CAN_FM1R_FBM4_Msk  (0x1U << CAN_FM1R_FBM4_Pos) /*!< 0x00000010 */\r\n#define CAN_FM1R_FBM4      CAN_FM1R_FBM4_Msk           /*!< Filter Init Mode for filter 4 */\r\n#define CAN_FM1R_FBM5_Pos  (5U)\r\n#define CAN_FM1R_FBM5_Msk  (0x1U << CAN_FM1R_FBM5_Pos) /*!< 0x00000020 */\r\n#define CAN_FM1R_FBM5      CAN_FM1R_FBM5_Msk           /*!< Filter Init Mode for filter 5 */\r\n#define CAN_FM1R_FBM6_Pos  (6U)\r\n#define CAN_FM1R_FBM6_Msk  (0x1U << CAN_FM1R_FBM6_Pos) /*!< 0x00000040 */\r\n#define CAN_FM1R_FBM6      CAN_FM1R_FBM6_Msk           /*!< Filter Init Mode for filter 6 */\r\n#define CAN_FM1R_FBM7_Pos  (7U)\r\n#define CAN_FM1R_FBM7_Msk  (0x1U << CAN_FM1R_FBM7_Pos) /*!< 0x00000080 */\r\n#define CAN_FM1R_FBM7      CAN_FM1R_FBM7_Msk           /*!< Filter Init Mode for filter 7 */\r\n#define CAN_FM1R_FBM8_Pos  (8U)\r\n#define CAN_FM1R_FBM8_Msk  (0x1U << CAN_FM1R_FBM8_Pos) /*!< 0x00000100 */\r\n#define CAN_FM1R_FBM8      CAN_FM1R_FBM8_Msk           /*!< Filter Init Mode for filter 8 */\r\n#define CAN_FM1R_FBM9_Pos  (9U)\r\n#define CAN_FM1R_FBM9_Msk  (0x1U << CAN_FM1R_FBM9_Pos) /*!< 0x00000200 */\r\n#define CAN_FM1R_FBM9      CAN_FM1R_FBM9_Msk           /*!< Filter Init Mode for filter 9 */\r\n#define CAN_FM1R_FBM10_Pos (10U)\r\n#define CAN_FM1R_FBM10_Msk (0x1U << CAN_FM1R_FBM10_Pos) /*!< 0x00000400 */\r\n#define CAN_FM1R_FBM10     CAN_FM1R_FBM10_Msk           /*!< Filter Init Mode for filter 10 */\r\n#define CAN_FM1R_FBM11_Pos (11U)\r\n#define CAN_FM1R_FBM11_Msk (0x1U << CAN_FM1R_FBM11_Pos) /*!< 0x00000800 */\r\n#define CAN_FM1R_FBM11     CAN_FM1R_FBM11_Msk           /*!< Filter Init Mode for filter 11 */\r\n#define CAN_FM1R_FBM12_Pos (12U)\r\n#define CAN_FM1R_FBM12_Msk (0x1U << CAN_FM1R_FBM12_Pos) /*!< 0x00001000 */\r\n#define CAN_FM1R_FBM12     CAN_FM1R_FBM12_Msk           /*!< Filter Init Mode for filter 12 */\r\n#define CAN_FM1R_FBM13_Pos (13U)\r\n#define CAN_FM1R_FBM13_Msk (0x1U << CAN_FM1R_FBM13_Pos) /*!< 0x00002000 */\r\n#define CAN_FM1R_FBM13     CAN_FM1R_FBM13_Msk           /*!< Filter Init Mode for filter 13 */\r\n\r\n/*******************  Bit definition for CAN_FS1R register  *******************/\r\n#define CAN_FS1R_FSC_Pos   (0U)\r\n#define CAN_FS1R_FSC_Msk   (0x3FFFU << CAN_FS1R_FSC_Pos) /*!< 0x00003FFF */\r\n#define CAN_FS1R_FSC       CAN_FS1R_FSC_Msk              /*!< Filter Scale Configuration */\r\n#define CAN_FS1R_FSC0_Pos  (0U)\r\n#define CAN_FS1R_FSC0_Msk  (0x1U << CAN_FS1R_FSC0_Pos) /*!< 0x00000001 */\r\n#define CAN_FS1R_FSC0      CAN_FS1R_FSC0_Msk           /*!< Filter Scale Configuration for filter 0 */\r\n#define CAN_FS1R_FSC1_Pos  (1U)\r\n#define CAN_FS1R_FSC1_Msk  (0x1U << CAN_FS1R_FSC1_Pos) /*!< 0x00000002 */\r\n#define CAN_FS1R_FSC1      CAN_FS1R_FSC1_Msk           /*!< Filter Scale Configuration for filter 1 */\r\n#define CAN_FS1R_FSC2_Pos  (2U)\r\n#define CAN_FS1R_FSC2_Msk  (0x1U << CAN_FS1R_FSC2_Pos) /*!< 0x00000004 */\r\n#define CAN_FS1R_FSC2      CAN_FS1R_FSC2_Msk           /*!< Filter Scale Configuration for filter 2 */\r\n#define CAN_FS1R_FSC3_Pos  (3U)\r\n#define CAN_FS1R_FSC3_Msk  (0x1U << CAN_FS1R_FSC3_Pos) /*!< 0x00000008 */\r\n#define CAN_FS1R_FSC3      CAN_FS1R_FSC3_Msk           /*!< Filter Scale Configuration for filter 3 */\r\n#define CAN_FS1R_FSC4_Pos  (4U)\r\n#define CAN_FS1R_FSC4_Msk  (0x1U << CAN_FS1R_FSC4_Pos) /*!< 0x00000010 */\r\n#define CAN_FS1R_FSC4      CAN_FS1R_FSC4_Msk           /*!< Filter Scale Configuration for filter 4 */\r\n#define CAN_FS1R_FSC5_Pos  (5U)\r\n#define CAN_FS1R_FSC5_Msk  (0x1U << CAN_FS1R_FSC5_Pos) /*!< 0x00000020 */\r\n#define CAN_FS1R_FSC5      CAN_FS1R_FSC5_Msk           /*!< Filter Scale Configuration for filter 5 */\r\n#define CAN_FS1R_FSC6_Pos  (6U)\r\n#define CAN_FS1R_FSC6_Msk  (0x1U << CAN_FS1R_FSC6_Pos) /*!< 0x00000040 */\r\n#define CAN_FS1R_FSC6      CAN_FS1R_FSC6_Msk           /*!< Filter Scale Configuration for filter 6 */\r\n#define CAN_FS1R_FSC7_Pos  (7U)\r\n#define CAN_FS1R_FSC7_Msk  (0x1U << CAN_FS1R_FSC7_Pos) /*!< 0x00000080 */\r\n#define CAN_FS1R_FSC7      CAN_FS1R_FSC7_Msk           /*!< Filter Scale Configuration for filter 7 */\r\n#define CAN_FS1R_FSC8_Pos  (8U)\r\n#define CAN_FS1R_FSC8_Msk  (0x1U << CAN_FS1R_FSC8_Pos) /*!< 0x00000100 */\r\n#define CAN_FS1R_FSC8      CAN_FS1R_FSC8_Msk           /*!< Filter Scale Configuration for filter 8 */\r\n#define CAN_FS1R_FSC9_Pos  (9U)\r\n#define CAN_FS1R_FSC9_Msk  (0x1U << CAN_FS1R_FSC9_Pos) /*!< 0x00000200 */\r\n#define CAN_FS1R_FSC9      CAN_FS1R_FSC9_Msk           /*!< Filter Scale Configuration for filter 9 */\r\n#define CAN_FS1R_FSC10_Pos (10U)\r\n#define CAN_FS1R_FSC10_Msk (0x1U << CAN_FS1R_FSC10_Pos) /*!< 0x00000400 */\r\n#define CAN_FS1R_FSC10     CAN_FS1R_FSC10_Msk           /*!< Filter Scale Configuration for filter 10 */\r\n#define CAN_FS1R_FSC11_Pos (11U)\r\n#define CAN_FS1R_FSC11_Msk (0x1U << CAN_FS1R_FSC11_Pos) /*!< 0x00000800 */\r\n#define CAN_FS1R_FSC11     CAN_FS1R_FSC11_Msk           /*!< Filter Scale Configuration for filter 11 */\r\n#define CAN_FS1R_FSC12_Pos (12U)\r\n#define CAN_FS1R_FSC12_Msk (0x1U << CAN_FS1R_FSC12_Pos) /*!< 0x00001000 */\r\n#define CAN_FS1R_FSC12     CAN_FS1R_FSC12_Msk           /*!< Filter Scale Configuration for filter 12 */\r\n#define CAN_FS1R_FSC13_Pos (13U)\r\n#define CAN_FS1R_FSC13_Msk (0x1U << CAN_FS1R_FSC13_Pos) /*!< 0x00002000 */\r\n#define CAN_FS1R_FSC13     CAN_FS1R_FSC13_Msk           /*!< Filter Scale Configuration for filter 13 */\r\n\r\n/******************  Bit definition for CAN_FFA1R register  *******************/\r\n#define CAN_FFA1R_FFA_Pos   (0U)\r\n#define CAN_FFA1R_FFA_Msk   (0x3FFFU << CAN_FFA1R_FFA_Pos) /*!< 0x00003FFF */\r\n#define CAN_FFA1R_FFA       CAN_FFA1R_FFA_Msk              /*!< Filter FIFO Assignment */\r\n#define CAN_FFA1R_FFA0_Pos  (0U)\r\n#define CAN_FFA1R_FFA0_Msk  (0x1U << CAN_FFA1R_FFA0_Pos) /*!< 0x00000001 */\r\n#define CAN_FFA1R_FFA0      CAN_FFA1R_FFA0_Msk           /*!< Filter FIFO Assignment for filter 0 */\r\n#define CAN_FFA1R_FFA1_Pos  (1U)\r\n#define CAN_FFA1R_FFA1_Msk  (0x1U << CAN_FFA1R_FFA1_Pos) /*!< 0x00000002 */\r\n#define CAN_FFA1R_FFA1      CAN_FFA1R_FFA1_Msk           /*!< Filter FIFO Assignment for filter 1 */\r\n#define CAN_FFA1R_FFA2_Pos  (2U)\r\n#define CAN_FFA1R_FFA2_Msk  (0x1U << CAN_FFA1R_FFA2_Pos) /*!< 0x00000004 */\r\n#define CAN_FFA1R_FFA2      CAN_FFA1R_FFA2_Msk           /*!< Filter FIFO Assignment for filter 2 */\r\n#define CAN_FFA1R_FFA3_Pos  (3U)\r\n#define CAN_FFA1R_FFA3_Msk  (0x1U << CAN_FFA1R_FFA3_Pos) /*!< 0x00000008 */\r\n#define CAN_FFA1R_FFA3      CAN_FFA1R_FFA3_Msk           /*!< Filter FIFO Assignment for filter 3 */\r\n#define CAN_FFA1R_FFA4_Pos  (4U)\r\n#define CAN_FFA1R_FFA4_Msk  (0x1U << CAN_FFA1R_FFA4_Pos) /*!< 0x00000010 */\r\n#define CAN_FFA1R_FFA4      CAN_FFA1R_FFA4_Msk           /*!< Filter FIFO Assignment for filter 4 */\r\n#define CAN_FFA1R_FFA5_Pos  (5U)\r\n#define CAN_FFA1R_FFA5_Msk  (0x1U << CAN_FFA1R_FFA5_Pos) /*!< 0x00000020 */\r\n#define CAN_FFA1R_FFA5      CAN_FFA1R_FFA5_Msk           /*!< Filter FIFO Assignment for filter 5 */\r\n#define CAN_FFA1R_FFA6_Pos  (6U)\r\n#define CAN_FFA1R_FFA6_Msk  (0x1U << CAN_FFA1R_FFA6_Pos) /*!< 0x00000040 */\r\n#define CAN_FFA1R_FFA6      CAN_FFA1R_FFA6_Msk           /*!< Filter FIFO Assignment for filter 6 */\r\n#define CAN_FFA1R_FFA7_Pos  (7U)\r\n#define CAN_FFA1R_FFA7_Msk  (0x1U << CAN_FFA1R_FFA7_Pos) /*!< 0x00000080 */\r\n#define CAN_FFA1R_FFA7      CAN_FFA1R_FFA7_Msk           /*!< Filter FIFO Assignment for filter 7 */\r\n#define CAN_FFA1R_FFA8_Pos  (8U)\r\n#define CAN_FFA1R_FFA8_Msk  (0x1U << CAN_FFA1R_FFA8_Pos) /*!< 0x00000100 */\r\n#define CAN_FFA1R_FFA8      CAN_FFA1R_FFA8_Msk           /*!< Filter FIFO Assignment for filter 8 */\r\n#define CAN_FFA1R_FFA9_Pos  (9U)\r\n#define CAN_FFA1R_FFA9_Msk  (0x1U << CAN_FFA1R_FFA9_Pos) /*!< 0x00000200 */\r\n#define CAN_FFA1R_FFA9      CAN_FFA1R_FFA9_Msk           /*!< Filter FIFO Assignment for filter 9 */\r\n#define CAN_FFA1R_FFA10_Pos (10U)\r\n#define CAN_FFA1R_FFA10_Msk (0x1U << CAN_FFA1R_FFA10_Pos) /*!< 0x00000400 */\r\n#define CAN_FFA1R_FFA10     CAN_FFA1R_FFA10_Msk           /*!< Filter FIFO Assignment for filter 10 */\r\n#define CAN_FFA1R_FFA11_Pos (11U)\r\n#define CAN_FFA1R_FFA11_Msk (0x1U << CAN_FFA1R_FFA11_Pos) /*!< 0x00000800 */\r\n#define CAN_FFA1R_FFA11     CAN_FFA1R_FFA11_Msk           /*!< Filter FIFO Assignment for filter 11 */\r\n#define CAN_FFA1R_FFA12_Pos (12U)\r\n#define CAN_FFA1R_FFA12_Msk (0x1U << CAN_FFA1R_FFA12_Pos) /*!< 0x00001000 */\r\n#define CAN_FFA1R_FFA12     CAN_FFA1R_FFA12_Msk           /*!< Filter FIFO Assignment for filter 12 */\r\n#define CAN_FFA1R_FFA13_Pos (13U)\r\n#define CAN_FFA1R_FFA13_Msk (0x1U << CAN_FFA1R_FFA13_Pos) /*!< 0x00002000 */\r\n#define CAN_FFA1R_FFA13     CAN_FFA1R_FFA13_Msk           /*!< Filter FIFO Assignment for filter 13 */\r\n\r\n/*******************  Bit definition for CAN_FA1R register  *******************/\r\n#define CAN_FA1R_FACT_Pos   (0U)\r\n#define CAN_FA1R_FACT_Msk   (0x3FFFU << CAN_FA1R_FACT_Pos) /*!< 0x00003FFF */\r\n#define CAN_FA1R_FACT       CAN_FA1R_FACT_Msk              /*!< Filter Active */\r\n#define CAN_FA1R_FACT0_Pos  (0U)\r\n#define CAN_FA1R_FACT0_Msk  (0x1U << CAN_FA1R_FACT0_Pos) /*!< 0x00000001 */\r\n#define CAN_FA1R_FACT0      CAN_FA1R_FACT0_Msk           /*!< Filter 0 Active */\r\n#define CAN_FA1R_FACT1_Pos  (1U)\r\n#define CAN_FA1R_FACT1_Msk  (0x1U << CAN_FA1R_FACT1_Pos) /*!< 0x00000002 */\r\n#define CAN_FA1R_FACT1      CAN_FA1R_FACT1_Msk           /*!< Filter 1 Active */\r\n#define CAN_FA1R_FACT2_Pos  (2U)\r\n#define CAN_FA1R_FACT2_Msk  (0x1U << CAN_FA1R_FACT2_Pos) /*!< 0x00000004 */\r\n#define CAN_FA1R_FACT2      CAN_FA1R_FACT2_Msk           /*!< Filter 2 Active */\r\n#define CAN_FA1R_FACT3_Pos  (3U)\r\n#define CAN_FA1R_FACT3_Msk  (0x1U << CAN_FA1R_FACT3_Pos) /*!< 0x00000008 */\r\n#define CAN_FA1R_FACT3      CAN_FA1R_FACT3_Msk           /*!< Filter 3 Active */\r\n#define CAN_FA1R_FACT4_Pos  (4U)\r\n#define CAN_FA1R_FACT4_Msk  (0x1U << CAN_FA1R_FACT4_Pos) /*!< 0x00000010 */\r\n#define CAN_FA1R_FACT4      CAN_FA1R_FACT4_Msk           /*!< Filter 4 Active */\r\n#define CAN_FA1R_FACT5_Pos  (5U)\r\n#define CAN_FA1R_FACT5_Msk  (0x1U << CAN_FA1R_FACT5_Pos) /*!< 0x00000020 */\r\n#define CAN_FA1R_FACT5      CAN_FA1R_FACT5_Msk           /*!< Filter 5 Active */\r\n#define CAN_FA1R_FACT6_Pos  (6U)\r\n#define CAN_FA1R_FACT6_Msk  (0x1U << CAN_FA1R_FACT6_Pos) /*!< 0x00000040 */\r\n#define CAN_FA1R_FACT6      CAN_FA1R_FACT6_Msk           /*!< Filter 6 Active */\r\n#define CAN_FA1R_FACT7_Pos  (7U)\r\n#define CAN_FA1R_FACT7_Msk  (0x1U << CAN_FA1R_FACT7_Pos) /*!< 0x00000080 */\r\n#define CAN_FA1R_FACT7      CAN_FA1R_FACT7_Msk           /*!< Filter 7 Active */\r\n#define CAN_FA1R_FACT8_Pos  (8U)\r\n#define CAN_FA1R_FACT8_Msk  (0x1U << CAN_FA1R_FACT8_Pos) /*!< 0x00000100 */\r\n#define CAN_FA1R_FACT8      CAN_FA1R_FACT8_Msk           /*!< Filter 8 Active */\r\n#define CAN_FA1R_FACT9_Pos  (9U)\r\n#define CAN_FA1R_FACT9_Msk  (0x1U << CAN_FA1R_FACT9_Pos) /*!< 0x00000200 */\r\n#define CAN_FA1R_FACT9      CAN_FA1R_FACT9_Msk           /*!< Filter 9 Active */\r\n#define CAN_FA1R_FACT10_Pos (10U)\r\n#define CAN_FA1R_FACT10_Msk (0x1U << CAN_FA1R_FACT10_Pos) /*!< 0x00000400 */\r\n#define CAN_FA1R_FACT10     CAN_FA1R_FACT10_Msk           /*!< Filter 10 Active */\r\n#define CAN_FA1R_FACT11_Pos (11U)\r\n#define CAN_FA1R_FACT11_Msk (0x1U << CAN_FA1R_FACT11_Pos) /*!< 0x00000800 */\r\n#define CAN_FA1R_FACT11     CAN_FA1R_FACT11_Msk           /*!< Filter 11 Active */\r\n#define CAN_FA1R_FACT12_Pos (12U)\r\n#define CAN_FA1R_FACT12_Msk (0x1U << CAN_FA1R_FACT12_Pos) /*!< 0x00001000 */\r\n#define CAN_FA1R_FACT12     CAN_FA1R_FACT12_Msk           /*!< Filter 12 Active */\r\n#define CAN_FA1R_FACT13_Pos (13U)\r\n#define CAN_FA1R_FACT13_Msk (0x1U << CAN_FA1R_FACT13_Pos) /*!< 0x00002000 */\r\n#define CAN_FA1R_FACT13     CAN_FA1R_FACT13_Msk           /*!< Filter 13 Active */\r\n\r\n/*******************  Bit definition for CAN_F0R1 register  *******************/\r\n#define CAN_F0R1_FB0_Pos  (0U)\r\n#define CAN_F0R1_FB0_Msk  (0x1U << CAN_F0R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F0R1_FB0      CAN_F0R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F0R1_FB1_Pos  (1U)\r\n#define CAN_F0R1_FB1_Msk  (0x1U << CAN_F0R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F0R1_FB1      CAN_F0R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F0R1_FB2_Pos  (2U)\r\n#define CAN_F0R1_FB2_Msk  (0x1U << CAN_F0R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F0R1_FB2      CAN_F0R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F0R1_FB3_Pos  (3U)\r\n#define CAN_F0R1_FB3_Msk  (0x1U << CAN_F0R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F0R1_FB3      CAN_F0R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F0R1_FB4_Pos  (4U)\r\n#define CAN_F0R1_FB4_Msk  (0x1U << CAN_F0R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F0R1_FB4      CAN_F0R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F0R1_FB5_Pos  (5U)\r\n#define CAN_F0R1_FB5_Msk  (0x1U << CAN_F0R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F0R1_FB5      CAN_F0R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F0R1_FB6_Pos  (6U)\r\n#define CAN_F0R1_FB6_Msk  (0x1U << CAN_F0R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F0R1_FB6      CAN_F0R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F0R1_FB7_Pos  (7U)\r\n#define CAN_F0R1_FB7_Msk  (0x1U << CAN_F0R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F0R1_FB7      CAN_F0R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F0R1_FB8_Pos  (8U)\r\n#define CAN_F0R1_FB8_Msk  (0x1U << CAN_F0R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F0R1_FB8      CAN_F0R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F0R1_FB9_Pos  (9U)\r\n#define CAN_F0R1_FB9_Msk  (0x1U << CAN_F0R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F0R1_FB9      CAN_F0R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F0R1_FB10_Pos (10U)\r\n#define CAN_F0R1_FB10_Msk (0x1U << CAN_F0R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F0R1_FB10     CAN_F0R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F0R1_FB11_Pos (11U)\r\n#define CAN_F0R1_FB11_Msk (0x1U << CAN_F0R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F0R1_FB11     CAN_F0R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F0R1_FB12_Pos (12U)\r\n#define CAN_F0R1_FB12_Msk (0x1U << CAN_F0R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F0R1_FB12     CAN_F0R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F0R1_FB13_Pos (13U)\r\n#define CAN_F0R1_FB13_Msk (0x1U << CAN_F0R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F0R1_FB13     CAN_F0R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F0R1_FB14_Pos (14U)\r\n#define CAN_F0R1_FB14_Msk (0x1U << CAN_F0R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F0R1_FB14     CAN_F0R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F0R1_FB15_Pos (15U)\r\n#define CAN_F0R1_FB15_Msk (0x1U << CAN_F0R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F0R1_FB15     CAN_F0R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F0R1_FB16_Pos (16U)\r\n#define CAN_F0R1_FB16_Msk (0x1U << CAN_F0R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F0R1_FB16     CAN_F0R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F0R1_FB17_Pos (17U)\r\n#define CAN_F0R1_FB17_Msk (0x1U << CAN_F0R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F0R1_FB17     CAN_F0R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F0R1_FB18_Pos (18U)\r\n#define CAN_F0R1_FB18_Msk (0x1U << CAN_F0R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F0R1_FB18     CAN_F0R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F0R1_FB19_Pos (19U)\r\n#define CAN_F0R1_FB19_Msk (0x1U << CAN_F0R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F0R1_FB19     CAN_F0R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F0R1_FB20_Pos (20U)\r\n#define CAN_F0R1_FB20_Msk (0x1U << CAN_F0R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F0R1_FB20     CAN_F0R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F0R1_FB21_Pos (21U)\r\n#define CAN_F0R1_FB21_Msk (0x1U << CAN_F0R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F0R1_FB21     CAN_F0R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F0R1_FB22_Pos (22U)\r\n#define CAN_F0R1_FB22_Msk (0x1U << CAN_F0R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F0R1_FB22     CAN_F0R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F0R1_FB23_Pos (23U)\r\n#define CAN_F0R1_FB23_Msk (0x1U << CAN_F0R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F0R1_FB23     CAN_F0R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F0R1_FB24_Pos (24U)\r\n#define CAN_F0R1_FB24_Msk (0x1U << CAN_F0R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F0R1_FB24     CAN_F0R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F0R1_FB25_Pos (25U)\r\n#define CAN_F0R1_FB25_Msk (0x1U << CAN_F0R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F0R1_FB25     CAN_F0R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F0R1_FB26_Pos (26U)\r\n#define CAN_F0R1_FB26_Msk (0x1U << CAN_F0R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F0R1_FB26     CAN_F0R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F0R1_FB27_Pos (27U)\r\n#define CAN_F0R1_FB27_Msk (0x1U << CAN_F0R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F0R1_FB27     CAN_F0R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F0R1_FB28_Pos (28U)\r\n#define CAN_F0R1_FB28_Msk (0x1U << CAN_F0R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F0R1_FB28     CAN_F0R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F0R1_FB29_Pos (29U)\r\n#define CAN_F0R1_FB29_Msk (0x1U << CAN_F0R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F0R1_FB29     CAN_F0R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F0R1_FB30_Pos (30U)\r\n#define CAN_F0R1_FB30_Msk (0x1U << CAN_F0R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F0R1_FB30     CAN_F0R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F0R1_FB31_Pos (31U)\r\n#define CAN_F0R1_FB31_Msk (0x1U << CAN_F0R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F0R1_FB31     CAN_F0R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F1R1 register  *******************/\r\n#define CAN_F1R1_FB0_Pos  (0U)\r\n#define CAN_F1R1_FB0_Msk  (0x1U << CAN_F1R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F1R1_FB0      CAN_F1R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F1R1_FB1_Pos  (1U)\r\n#define CAN_F1R1_FB1_Msk  (0x1U << CAN_F1R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F1R1_FB1      CAN_F1R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F1R1_FB2_Pos  (2U)\r\n#define CAN_F1R1_FB2_Msk  (0x1U << CAN_F1R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F1R1_FB2      CAN_F1R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F1R1_FB3_Pos  (3U)\r\n#define CAN_F1R1_FB3_Msk  (0x1U << CAN_F1R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F1R1_FB3      CAN_F1R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F1R1_FB4_Pos  (4U)\r\n#define CAN_F1R1_FB4_Msk  (0x1U << CAN_F1R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F1R1_FB4      CAN_F1R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F1R1_FB5_Pos  (5U)\r\n#define CAN_F1R1_FB5_Msk  (0x1U << CAN_F1R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F1R1_FB5      CAN_F1R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F1R1_FB6_Pos  (6U)\r\n#define CAN_F1R1_FB6_Msk  (0x1U << CAN_F1R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F1R1_FB6      CAN_F1R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F1R1_FB7_Pos  (7U)\r\n#define CAN_F1R1_FB7_Msk  (0x1U << CAN_F1R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F1R1_FB7      CAN_F1R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F1R1_FB8_Pos  (8U)\r\n#define CAN_F1R1_FB8_Msk  (0x1U << CAN_F1R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F1R1_FB8      CAN_F1R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F1R1_FB9_Pos  (9U)\r\n#define CAN_F1R1_FB9_Msk  (0x1U << CAN_F1R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F1R1_FB9      CAN_F1R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F1R1_FB10_Pos (10U)\r\n#define CAN_F1R1_FB10_Msk (0x1U << CAN_F1R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F1R1_FB10     CAN_F1R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F1R1_FB11_Pos (11U)\r\n#define CAN_F1R1_FB11_Msk (0x1U << CAN_F1R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F1R1_FB11     CAN_F1R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F1R1_FB12_Pos (12U)\r\n#define CAN_F1R1_FB12_Msk (0x1U << CAN_F1R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F1R1_FB12     CAN_F1R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F1R1_FB13_Pos (13U)\r\n#define CAN_F1R1_FB13_Msk (0x1U << CAN_F1R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F1R1_FB13     CAN_F1R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F1R1_FB14_Pos (14U)\r\n#define CAN_F1R1_FB14_Msk (0x1U << CAN_F1R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F1R1_FB14     CAN_F1R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F1R1_FB15_Pos (15U)\r\n#define CAN_F1R1_FB15_Msk (0x1U << CAN_F1R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F1R1_FB15     CAN_F1R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F1R1_FB16_Pos (16U)\r\n#define CAN_F1R1_FB16_Msk (0x1U << CAN_F1R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F1R1_FB16     CAN_F1R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F1R1_FB17_Pos (17U)\r\n#define CAN_F1R1_FB17_Msk (0x1U << CAN_F1R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F1R1_FB17     CAN_F1R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F1R1_FB18_Pos (18U)\r\n#define CAN_F1R1_FB18_Msk (0x1U << CAN_F1R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F1R1_FB18     CAN_F1R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F1R1_FB19_Pos (19U)\r\n#define CAN_F1R1_FB19_Msk (0x1U << CAN_F1R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F1R1_FB19     CAN_F1R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F1R1_FB20_Pos (20U)\r\n#define CAN_F1R1_FB20_Msk (0x1U << CAN_F1R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F1R1_FB20     CAN_F1R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F1R1_FB21_Pos (21U)\r\n#define CAN_F1R1_FB21_Msk (0x1U << CAN_F1R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F1R1_FB21     CAN_F1R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F1R1_FB22_Pos (22U)\r\n#define CAN_F1R1_FB22_Msk (0x1U << CAN_F1R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F1R1_FB22     CAN_F1R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F1R1_FB23_Pos (23U)\r\n#define CAN_F1R1_FB23_Msk (0x1U << CAN_F1R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F1R1_FB23     CAN_F1R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F1R1_FB24_Pos (24U)\r\n#define CAN_F1R1_FB24_Msk (0x1U << CAN_F1R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F1R1_FB24     CAN_F1R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F1R1_FB25_Pos (25U)\r\n#define CAN_F1R1_FB25_Msk (0x1U << CAN_F1R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F1R1_FB25     CAN_F1R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F1R1_FB26_Pos (26U)\r\n#define CAN_F1R1_FB26_Msk (0x1U << CAN_F1R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F1R1_FB26     CAN_F1R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F1R1_FB27_Pos (27U)\r\n#define CAN_F1R1_FB27_Msk (0x1U << CAN_F1R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F1R1_FB27     CAN_F1R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F1R1_FB28_Pos (28U)\r\n#define CAN_F1R1_FB28_Msk (0x1U << CAN_F1R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F1R1_FB28     CAN_F1R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F1R1_FB29_Pos (29U)\r\n#define CAN_F1R1_FB29_Msk (0x1U << CAN_F1R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F1R1_FB29     CAN_F1R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F1R1_FB30_Pos (30U)\r\n#define CAN_F1R1_FB30_Msk (0x1U << CAN_F1R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F1R1_FB30     CAN_F1R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F1R1_FB31_Pos (31U)\r\n#define CAN_F1R1_FB31_Msk (0x1U << CAN_F1R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F1R1_FB31     CAN_F1R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F2R1 register  *******************/\r\n#define CAN_F2R1_FB0_Pos  (0U)\r\n#define CAN_F2R1_FB0_Msk  (0x1U << CAN_F2R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F2R1_FB0      CAN_F2R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F2R1_FB1_Pos  (1U)\r\n#define CAN_F2R1_FB1_Msk  (0x1U << CAN_F2R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F2R1_FB1      CAN_F2R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F2R1_FB2_Pos  (2U)\r\n#define CAN_F2R1_FB2_Msk  (0x1U << CAN_F2R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F2R1_FB2      CAN_F2R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F2R1_FB3_Pos  (3U)\r\n#define CAN_F2R1_FB3_Msk  (0x1U << CAN_F2R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F2R1_FB3      CAN_F2R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F2R1_FB4_Pos  (4U)\r\n#define CAN_F2R1_FB4_Msk  (0x1U << CAN_F2R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F2R1_FB4      CAN_F2R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F2R1_FB5_Pos  (5U)\r\n#define CAN_F2R1_FB5_Msk  (0x1U << CAN_F2R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F2R1_FB5      CAN_F2R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F2R1_FB6_Pos  (6U)\r\n#define CAN_F2R1_FB6_Msk  (0x1U << CAN_F2R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F2R1_FB6      CAN_F2R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F2R1_FB7_Pos  (7U)\r\n#define CAN_F2R1_FB7_Msk  (0x1U << CAN_F2R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F2R1_FB7      CAN_F2R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F2R1_FB8_Pos  (8U)\r\n#define CAN_F2R1_FB8_Msk  (0x1U << CAN_F2R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F2R1_FB8      CAN_F2R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F2R1_FB9_Pos  (9U)\r\n#define CAN_F2R1_FB9_Msk  (0x1U << CAN_F2R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F2R1_FB9      CAN_F2R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F2R1_FB10_Pos (10U)\r\n#define CAN_F2R1_FB10_Msk (0x1U << CAN_F2R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F2R1_FB10     CAN_F2R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F2R1_FB11_Pos (11U)\r\n#define CAN_F2R1_FB11_Msk (0x1U << CAN_F2R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F2R1_FB11     CAN_F2R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F2R1_FB12_Pos (12U)\r\n#define CAN_F2R1_FB12_Msk (0x1U << CAN_F2R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F2R1_FB12     CAN_F2R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F2R1_FB13_Pos (13U)\r\n#define CAN_F2R1_FB13_Msk (0x1U << CAN_F2R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F2R1_FB13     CAN_F2R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F2R1_FB14_Pos (14U)\r\n#define CAN_F2R1_FB14_Msk (0x1U << CAN_F2R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F2R1_FB14     CAN_F2R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F2R1_FB15_Pos (15U)\r\n#define CAN_F2R1_FB15_Msk (0x1U << CAN_F2R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F2R1_FB15     CAN_F2R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F2R1_FB16_Pos (16U)\r\n#define CAN_F2R1_FB16_Msk (0x1U << CAN_F2R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F2R1_FB16     CAN_F2R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F2R1_FB17_Pos (17U)\r\n#define CAN_F2R1_FB17_Msk (0x1U << CAN_F2R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F2R1_FB17     CAN_F2R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F2R1_FB18_Pos (18U)\r\n#define CAN_F2R1_FB18_Msk (0x1U << CAN_F2R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F2R1_FB18     CAN_F2R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F2R1_FB19_Pos (19U)\r\n#define CAN_F2R1_FB19_Msk (0x1U << CAN_F2R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F2R1_FB19     CAN_F2R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F2R1_FB20_Pos (20U)\r\n#define CAN_F2R1_FB20_Msk (0x1U << CAN_F2R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F2R1_FB20     CAN_F2R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F2R1_FB21_Pos (21U)\r\n#define CAN_F2R1_FB21_Msk (0x1U << CAN_F2R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F2R1_FB21     CAN_F2R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F2R1_FB22_Pos (22U)\r\n#define CAN_F2R1_FB22_Msk (0x1U << CAN_F2R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F2R1_FB22     CAN_F2R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F2R1_FB23_Pos (23U)\r\n#define CAN_F2R1_FB23_Msk (0x1U << CAN_F2R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F2R1_FB23     CAN_F2R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F2R1_FB24_Pos (24U)\r\n#define CAN_F2R1_FB24_Msk (0x1U << CAN_F2R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F2R1_FB24     CAN_F2R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F2R1_FB25_Pos (25U)\r\n#define CAN_F2R1_FB25_Msk (0x1U << CAN_F2R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F2R1_FB25     CAN_F2R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F2R1_FB26_Pos (26U)\r\n#define CAN_F2R1_FB26_Msk (0x1U << CAN_F2R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F2R1_FB26     CAN_F2R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F2R1_FB27_Pos (27U)\r\n#define CAN_F2R1_FB27_Msk (0x1U << CAN_F2R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F2R1_FB27     CAN_F2R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F2R1_FB28_Pos (28U)\r\n#define CAN_F2R1_FB28_Msk (0x1U << CAN_F2R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F2R1_FB28     CAN_F2R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F2R1_FB29_Pos (29U)\r\n#define CAN_F2R1_FB29_Msk (0x1U << CAN_F2R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F2R1_FB29     CAN_F2R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F2R1_FB30_Pos (30U)\r\n#define CAN_F2R1_FB30_Msk (0x1U << CAN_F2R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F2R1_FB30     CAN_F2R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F2R1_FB31_Pos (31U)\r\n#define CAN_F2R1_FB31_Msk (0x1U << CAN_F2R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F2R1_FB31     CAN_F2R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F3R1 register  *******************/\r\n#define CAN_F3R1_FB0_Pos  (0U)\r\n#define CAN_F3R1_FB0_Msk  (0x1U << CAN_F3R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F3R1_FB0      CAN_F3R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F3R1_FB1_Pos  (1U)\r\n#define CAN_F3R1_FB1_Msk  (0x1U << CAN_F3R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F3R1_FB1      CAN_F3R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F3R1_FB2_Pos  (2U)\r\n#define CAN_F3R1_FB2_Msk  (0x1U << CAN_F3R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F3R1_FB2      CAN_F3R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F3R1_FB3_Pos  (3U)\r\n#define CAN_F3R1_FB3_Msk  (0x1U << CAN_F3R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F3R1_FB3      CAN_F3R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F3R1_FB4_Pos  (4U)\r\n#define CAN_F3R1_FB4_Msk  (0x1U << CAN_F3R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F3R1_FB4      CAN_F3R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F3R1_FB5_Pos  (5U)\r\n#define CAN_F3R1_FB5_Msk  (0x1U << CAN_F3R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F3R1_FB5      CAN_F3R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F3R1_FB6_Pos  (6U)\r\n#define CAN_F3R1_FB6_Msk  (0x1U << CAN_F3R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F3R1_FB6      CAN_F3R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F3R1_FB7_Pos  (7U)\r\n#define CAN_F3R1_FB7_Msk  (0x1U << CAN_F3R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F3R1_FB7      CAN_F3R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F3R1_FB8_Pos  (8U)\r\n#define CAN_F3R1_FB8_Msk  (0x1U << CAN_F3R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F3R1_FB8      CAN_F3R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F3R1_FB9_Pos  (9U)\r\n#define CAN_F3R1_FB9_Msk  (0x1U << CAN_F3R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F3R1_FB9      CAN_F3R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F3R1_FB10_Pos (10U)\r\n#define CAN_F3R1_FB10_Msk (0x1U << CAN_F3R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F3R1_FB10     CAN_F3R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F3R1_FB11_Pos (11U)\r\n#define CAN_F3R1_FB11_Msk (0x1U << CAN_F3R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F3R1_FB11     CAN_F3R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F3R1_FB12_Pos (12U)\r\n#define CAN_F3R1_FB12_Msk (0x1U << CAN_F3R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F3R1_FB12     CAN_F3R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F3R1_FB13_Pos (13U)\r\n#define CAN_F3R1_FB13_Msk (0x1U << CAN_F3R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F3R1_FB13     CAN_F3R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F3R1_FB14_Pos (14U)\r\n#define CAN_F3R1_FB14_Msk (0x1U << CAN_F3R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F3R1_FB14     CAN_F3R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F3R1_FB15_Pos (15U)\r\n#define CAN_F3R1_FB15_Msk (0x1U << CAN_F3R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F3R1_FB15     CAN_F3R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F3R1_FB16_Pos (16U)\r\n#define CAN_F3R1_FB16_Msk (0x1U << CAN_F3R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F3R1_FB16     CAN_F3R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F3R1_FB17_Pos (17U)\r\n#define CAN_F3R1_FB17_Msk (0x1U << CAN_F3R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F3R1_FB17     CAN_F3R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F3R1_FB18_Pos (18U)\r\n#define CAN_F3R1_FB18_Msk (0x1U << CAN_F3R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F3R1_FB18     CAN_F3R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F3R1_FB19_Pos (19U)\r\n#define CAN_F3R1_FB19_Msk (0x1U << CAN_F3R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F3R1_FB19     CAN_F3R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F3R1_FB20_Pos (20U)\r\n#define CAN_F3R1_FB20_Msk (0x1U << CAN_F3R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F3R1_FB20     CAN_F3R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F3R1_FB21_Pos (21U)\r\n#define CAN_F3R1_FB21_Msk (0x1U << CAN_F3R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F3R1_FB21     CAN_F3R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F3R1_FB22_Pos (22U)\r\n#define CAN_F3R1_FB22_Msk (0x1U << CAN_F3R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F3R1_FB22     CAN_F3R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F3R1_FB23_Pos (23U)\r\n#define CAN_F3R1_FB23_Msk (0x1U << CAN_F3R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F3R1_FB23     CAN_F3R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F3R1_FB24_Pos (24U)\r\n#define CAN_F3R1_FB24_Msk (0x1U << CAN_F3R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F3R1_FB24     CAN_F3R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F3R1_FB25_Pos (25U)\r\n#define CAN_F3R1_FB25_Msk (0x1U << CAN_F3R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F3R1_FB25     CAN_F3R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F3R1_FB26_Pos (26U)\r\n#define CAN_F3R1_FB26_Msk (0x1U << CAN_F3R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F3R1_FB26     CAN_F3R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F3R1_FB27_Pos (27U)\r\n#define CAN_F3R1_FB27_Msk (0x1U << CAN_F3R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F3R1_FB27     CAN_F3R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F3R1_FB28_Pos (28U)\r\n#define CAN_F3R1_FB28_Msk (0x1U << CAN_F3R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F3R1_FB28     CAN_F3R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F3R1_FB29_Pos (29U)\r\n#define CAN_F3R1_FB29_Msk (0x1U << CAN_F3R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F3R1_FB29     CAN_F3R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F3R1_FB30_Pos (30U)\r\n#define CAN_F3R1_FB30_Msk (0x1U << CAN_F3R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F3R1_FB30     CAN_F3R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F3R1_FB31_Pos (31U)\r\n#define CAN_F3R1_FB31_Msk (0x1U << CAN_F3R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F3R1_FB31     CAN_F3R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F4R1 register  *******************/\r\n#define CAN_F4R1_FB0_Pos  (0U)\r\n#define CAN_F4R1_FB0_Msk  (0x1U << CAN_F4R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F4R1_FB0      CAN_F4R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F4R1_FB1_Pos  (1U)\r\n#define CAN_F4R1_FB1_Msk  (0x1U << CAN_F4R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F4R1_FB1      CAN_F4R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F4R1_FB2_Pos  (2U)\r\n#define CAN_F4R1_FB2_Msk  (0x1U << CAN_F4R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F4R1_FB2      CAN_F4R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F4R1_FB3_Pos  (3U)\r\n#define CAN_F4R1_FB3_Msk  (0x1U << CAN_F4R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F4R1_FB3      CAN_F4R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F4R1_FB4_Pos  (4U)\r\n#define CAN_F4R1_FB4_Msk  (0x1U << CAN_F4R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F4R1_FB4      CAN_F4R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F4R1_FB5_Pos  (5U)\r\n#define CAN_F4R1_FB5_Msk  (0x1U << CAN_F4R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F4R1_FB5      CAN_F4R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F4R1_FB6_Pos  (6U)\r\n#define CAN_F4R1_FB6_Msk  (0x1U << CAN_F4R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F4R1_FB6      CAN_F4R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F4R1_FB7_Pos  (7U)\r\n#define CAN_F4R1_FB7_Msk  (0x1U << CAN_F4R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F4R1_FB7      CAN_F4R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F4R1_FB8_Pos  (8U)\r\n#define CAN_F4R1_FB8_Msk  (0x1U << CAN_F4R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F4R1_FB8      CAN_F4R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F4R1_FB9_Pos  (9U)\r\n#define CAN_F4R1_FB9_Msk  (0x1U << CAN_F4R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F4R1_FB9      CAN_F4R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F4R1_FB10_Pos (10U)\r\n#define CAN_F4R1_FB10_Msk (0x1U << CAN_F4R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F4R1_FB10     CAN_F4R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F4R1_FB11_Pos (11U)\r\n#define CAN_F4R1_FB11_Msk (0x1U << CAN_F4R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F4R1_FB11     CAN_F4R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F4R1_FB12_Pos (12U)\r\n#define CAN_F4R1_FB12_Msk (0x1U << CAN_F4R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F4R1_FB12     CAN_F4R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F4R1_FB13_Pos (13U)\r\n#define CAN_F4R1_FB13_Msk (0x1U << CAN_F4R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F4R1_FB13     CAN_F4R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F4R1_FB14_Pos (14U)\r\n#define CAN_F4R1_FB14_Msk (0x1U << CAN_F4R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F4R1_FB14     CAN_F4R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F4R1_FB15_Pos (15U)\r\n#define CAN_F4R1_FB15_Msk (0x1U << CAN_F4R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F4R1_FB15     CAN_F4R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F4R1_FB16_Pos (16U)\r\n#define CAN_F4R1_FB16_Msk (0x1U << CAN_F4R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F4R1_FB16     CAN_F4R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F4R1_FB17_Pos (17U)\r\n#define CAN_F4R1_FB17_Msk (0x1U << CAN_F4R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F4R1_FB17     CAN_F4R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F4R1_FB18_Pos (18U)\r\n#define CAN_F4R1_FB18_Msk (0x1U << CAN_F4R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F4R1_FB18     CAN_F4R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F4R1_FB19_Pos (19U)\r\n#define CAN_F4R1_FB19_Msk (0x1U << CAN_F4R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F4R1_FB19     CAN_F4R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F4R1_FB20_Pos (20U)\r\n#define CAN_F4R1_FB20_Msk (0x1U << CAN_F4R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F4R1_FB20     CAN_F4R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F4R1_FB21_Pos (21U)\r\n#define CAN_F4R1_FB21_Msk (0x1U << CAN_F4R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F4R1_FB21     CAN_F4R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F4R1_FB22_Pos (22U)\r\n#define CAN_F4R1_FB22_Msk (0x1U << CAN_F4R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F4R1_FB22     CAN_F4R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F4R1_FB23_Pos (23U)\r\n#define CAN_F4R1_FB23_Msk (0x1U << CAN_F4R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F4R1_FB23     CAN_F4R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F4R1_FB24_Pos (24U)\r\n#define CAN_F4R1_FB24_Msk (0x1U << CAN_F4R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F4R1_FB24     CAN_F4R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F4R1_FB25_Pos (25U)\r\n#define CAN_F4R1_FB25_Msk (0x1U << CAN_F4R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F4R1_FB25     CAN_F4R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F4R1_FB26_Pos (26U)\r\n#define CAN_F4R1_FB26_Msk (0x1U << CAN_F4R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F4R1_FB26     CAN_F4R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F4R1_FB27_Pos (27U)\r\n#define CAN_F4R1_FB27_Msk (0x1U << CAN_F4R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F4R1_FB27     CAN_F4R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F4R1_FB28_Pos (28U)\r\n#define CAN_F4R1_FB28_Msk (0x1U << CAN_F4R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F4R1_FB28     CAN_F4R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F4R1_FB29_Pos (29U)\r\n#define CAN_F4R1_FB29_Msk (0x1U << CAN_F4R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F4R1_FB29     CAN_F4R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F4R1_FB30_Pos (30U)\r\n#define CAN_F4R1_FB30_Msk (0x1U << CAN_F4R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F4R1_FB30     CAN_F4R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F4R1_FB31_Pos (31U)\r\n#define CAN_F4R1_FB31_Msk (0x1U << CAN_F4R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F4R1_FB31     CAN_F4R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F5R1 register  *******************/\r\n#define CAN_F5R1_FB0_Pos  (0U)\r\n#define CAN_F5R1_FB0_Msk  (0x1U << CAN_F5R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F5R1_FB0      CAN_F5R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F5R1_FB1_Pos  (1U)\r\n#define CAN_F5R1_FB1_Msk  (0x1U << CAN_F5R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F5R1_FB1      CAN_F5R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F5R1_FB2_Pos  (2U)\r\n#define CAN_F5R1_FB2_Msk  (0x1U << CAN_F5R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F5R1_FB2      CAN_F5R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F5R1_FB3_Pos  (3U)\r\n#define CAN_F5R1_FB3_Msk  (0x1U << CAN_F5R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F5R1_FB3      CAN_F5R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F5R1_FB4_Pos  (4U)\r\n#define CAN_F5R1_FB4_Msk  (0x1U << CAN_F5R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F5R1_FB4      CAN_F5R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F5R1_FB5_Pos  (5U)\r\n#define CAN_F5R1_FB5_Msk  (0x1U << CAN_F5R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F5R1_FB5      CAN_F5R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F5R1_FB6_Pos  (6U)\r\n#define CAN_F5R1_FB6_Msk  (0x1U << CAN_F5R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F5R1_FB6      CAN_F5R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F5R1_FB7_Pos  (7U)\r\n#define CAN_F5R1_FB7_Msk  (0x1U << CAN_F5R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F5R1_FB7      CAN_F5R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F5R1_FB8_Pos  (8U)\r\n#define CAN_F5R1_FB8_Msk  (0x1U << CAN_F5R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F5R1_FB8      CAN_F5R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F5R1_FB9_Pos  (9U)\r\n#define CAN_F5R1_FB9_Msk  (0x1U << CAN_F5R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F5R1_FB9      CAN_F5R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F5R1_FB10_Pos (10U)\r\n#define CAN_F5R1_FB10_Msk (0x1U << CAN_F5R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F5R1_FB10     CAN_F5R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F5R1_FB11_Pos (11U)\r\n#define CAN_F5R1_FB11_Msk (0x1U << CAN_F5R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F5R1_FB11     CAN_F5R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F5R1_FB12_Pos (12U)\r\n#define CAN_F5R1_FB12_Msk (0x1U << CAN_F5R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F5R1_FB12     CAN_F5R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F5R1_FB13_Pos (13U)\r\n#define CAN_F5R1_FB13_Msk (0x1U << CAN_F5R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F5R1_FB13     CAN_F5R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F5R1_FB14_Pos (14U)\r\n#define CAN_F5R1_FB14_Msk (0x1U << CAN_F5R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F5R1_FB14     CAN_F5R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F5R1_FB15_Pos (15U)\r\n#define CAN_F5R1_FB15_Msk (0x1U << CAN_F5R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F5R1_FB15     CAN_F5R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F5R1_FB16_Pos (16U)\r\n#define CAN_F5R1_FB16_Msk (0x1U << CAN_F5R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F5R1_FB16     CAN_F5R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F5R1_FB17_Pos (17U)\r\n#define CAN_F5R1_FB17_Msk (0x1U << CAN_F5R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F5R1_FB17     CAN_F5R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F5R1_FB18_Pos (18U)\r\n#define CAN_F5R1_FB18_Msk (0x1U << CAN_F5R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F5R1_FB18     CAN_F5R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F5R1_FB19_Pos (19U)\r\n#define CAN_F5R1_FB19_Msk (0x1U << CAN_F5R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F5R1_FB19     CAN_F5R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F5R1_FB20_Pos (20U)\r\n#define CAN_F5R1_FB20_Msk (0x1U << CAN_F5R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F5R1_FB20     CAN_F5R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F5R1_FB21_Pos (21U)\r\n#define CAN_F5R1_FB21_Msk (0x1U << CAN_F5R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F5R1_FB21     CAN_F5R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F5R1_FB22_Pos (22U)\r\n#define CAN_F5R1_FB22_Msk (0x1U << CAN_F5R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F5R1_FB22     CAN_F5R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F5R1_FB23_Pos (23U)\r\n#define CAN_F5R1_FB23_Msk (0x1U << CAN_F5R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F5R1_FB23     CAN_F5R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F5R1_FB24_Pos (24U)\r\n#define CAN_F5R1_FB24_Msk (0x1U << CAN_F5R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F5R1_FB24     CAN_F5R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F5R1_FB25_Pos (25U)\r\n#define CAN_F5R1_FB25_Msk (0x1U << CAN_F5R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F5R1_FB25     CAN_F5R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F5R1_FB26_Pos (26U)\r\n#define CAN_F5R1_FB26_Msk (0x1U << CAN_F5R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F5R1_FB26     CAN_F5R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F5R1_FB27_Pos (27U)\r\n#define CAN_F5R1_FB27_Msk (0x1U << CAN_F5R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F5R1_FB27     CAN_F5R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F5R1_FB28_Pos (28U)\r\n#define CAN_F5R1_FB28_Msk (0x1U << CAN_F5R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F5R1_FB28     CAN_F5R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F5R1_FB29_Pos (29U)\r\n#define CAN_F5R1_FB29_Msk (0x1U << CAN_F5R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F5R1_FB29     CAN_F5R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F5R1_FB30_Pos (30U)\r\n#define CAN_F5R1_FB30_Msk (0x1U << CAN_F5R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F5R1_FB30     CAN_F5R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F5R1_FB31_Pos (31U)\r\n#define CAN_F5R1_FB31_Msk (0x1U << CAN_F5R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F5R1_FB31     CAN_F5R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F6R1 register  *******************/\r\n#define CAN_F6R1_FB0_Pos  (0U)\r\n#define CAN_F6R1_FB0_Msk  (0x1U << CAN_F6R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F6R1_FB0      CAN_F6R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F6R1_FB1_Pos  (1U)\r\n#define CAN_F6R1_FB1_Msk  (0x1U << CAN_F6R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F6R1_FB1      CAN_F6R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F6R1_FB2_Pos  (2U)\r\n#define CAN_F6R1_FB2_Msk  (0x1U << CAN_F6R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F6R1_FB2      CAN_F6R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F6R1_FB3_Pos  (3U)\r\n#define CAN_F6R1_FB3_Msk  (0x1U << CAN_F6R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F6R1_FB3      CAN_F6R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F6R1_FB4_Pos  (4U)\r\n#define CAN_F6R1_FB4_Msk  (0x1U << CAN_F6R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F6R1_FB4      CAN_F6R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F6R1_FB5_Pos  (5U)\r\n#define CAN_F6R1_FB5_Msk  (0x1U << CAN_F6R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F6R1_FB5      CAN_F6R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F6R1_FB6_Pos  (6U)\r\n#define CAN_F6R1_FB6_Msk  (0x1U << CAN_F6R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F6R1_FB6      CAN_F6R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F6R1_FB7_Pos  (7U)\r\n#define CAN_F6R1_FB7_Msk  (0x1U << CAN_F6R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F6R1_FB7      CAN_F6R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F6R1_FB8_Pos  (8U)\r\n#define CAN_F6R1_FB8_Msk  (0x1U << CAN_F6R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F6R1_FB8      CAN_F6R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F6R1_FB9_Pos  (9U)\r\n#define CAN_F6R1_FB9_Msk  (0x1U << CAN_F6R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F6R1_FB9      CAN_F6R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F6R1_FB10_Pos (10U)\r\n#define CAN_F6R1_FB10_Msk (0x1U << CAN_F6R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F6R1_FB10     CAN_F6R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F6R1_FB11_Pos (11U)\r\n#define CAN_F6R1_FB11_Msk (0x1U << CAN_F6R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F6R1_FB11     CAN_F6R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F6R1_FB12_Pos (12U)\r\n#define CAN_F6R1_FB12_Msk (0x1U << CAN_F6R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F6R1_FB12     CAN_F6R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F6R1_FB13_Pos (13U)\r\n#define CAN_F6R1_FB13_Msk (0x1U << CAN_F6R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F6R1_FB13     CAN_F6R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F6R1_FB14_Pos (14U)\r\n#define CAN_F6R1_FB14_Msk (0x1U << CAN_F6R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F6R1_FB14     CAN_F6R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F6R1_FB15_Pos (15U)\r\n#define CAN_F6R1_FB15_Msk (0x1U << CAN_F6R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F6R1_FB15     CAN_F6R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F6R1_FB16_Pos (16U)\r\n#define CAN_F6R1_FB16_Msk (0x1U << CAN_F6R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F6R1_FB16     CAN_F6R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F6R1_FB17_Pos (17U)\r\n#define CAN_F6R1_FB17_Msk (0x1U << CAN_F6R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F6R1_FB17     CAN_F6R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F6R1_FB18_Pos (18U)\r\n#define CAN_F6R1_FB18_Msk (0x1U << CAN_F6R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F6R1_FB18     CAN_F6R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F6R1_FB19_Pos (19U)\r\n#define CAN_F6R1_FB19_Msk (0x1U << CAN_F6R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F6R1_FB19     CAN_F6R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F6R1_FB20_Pos (20U)\r\n#define CAN_F6R1_FB20_Msk (0x1U << CAN_F6R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F6R1_FB20     CAN_F6R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F6R1_FB21_Pos (21U)\r\n#define CAN_F6R1_FB21_Msk (0x1U << CAN_F6R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F6R1_FB21     CAN_F6R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F6R1_FB22_Pos (22U)\r\n#define CAN_F6R1_FB22_Msk (0x1U << CAN_F6R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F6R1_FB22     CAN_F6R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F6R1_FB23_Pos (23U)\r\n#define CAN_F6R1_FB23_Msk (0x1U << CAN_F6R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F6R1_FB23     CAN_F6R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F6R1_FB24_Pos (24U)\r\n#define CAN_F6R1_FB24_Msk (0x1U << CAN_F6R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F6R1_FB24     CAN_F6R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F6R1_FB25_Pos (25U)\r\n#define CAN_F6R1_FB25_Msk (0x1U << CAN_F6R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F6R1_FB25     CAN_F6R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F6R1_FB26_Pos (26U)\r\n#define CAN_F6R1_FB26_Msk (0x1U << CAN_F6R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F6R1_FB26     CAN_F6R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F6R1_FB27_Pos (27U)\r\n#define CAN_F6R1_FB27_Msk (0x1U << CAN_F6R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F6R1_FB27     CAN_F6R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F6R1_FB28_Pos (28U)\r\n#define CAN_F6R1_FB28_Msk (0x1U << CAN_F6R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F6R1_FB28     CAN_F6R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F6R1_FB29_Pos (29U)\r\n#define CAN_F6R1_FB29_Msk (0x1U << CAN_F6R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F6R1_FB29     CAN_F6R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F6R1_FB30_Pos (30U)\r\n#define CAN_F6R1_FB30_Msk (0x1U << CAN_F6R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F6R1_FB30     CAN_F6R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F6R1_FB31_Pos (31U)\r\n#define CAN_F6R1_FB31_Msk (0x1U << CAN_F6R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F6R1_FB31     CAN_F6R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F7R1 register  *******************/\r\n#define CAN_F7R1_FB0_Pos  (0U)\r\n#define CAN_F7R1_FB0_Msk  (0x1U << CAN_F7R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F7R1_FB0      CAN_F7R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F7R1_FB1_Pos  (1U)\r\n#define CAN_F7R1_FB1_Msk  (0x1U << CAN_F7R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F7R1_FB1      CAN_F7R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F7R1_FB2_Pos  (2U)\r\n#define CAN_F7R1_FB2_Msk  (0x1U << CAN_F7R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F7R1_FB2      CAN_F7R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F7R1_FB3_Pos  (3U)\r\n#define CAN_F7R1_FB3_Msk  (0x1U << CAN_F7R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F7R1_FB3      CAN_F7R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F7R1_FB4_Pos  (4U)\r\n#define CAN_F7R1_FB4_Msk  (0x1U << CAN_F7R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F7R1_FB4      CAN_F7R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F7R1_FB5_Pos  (5U)\r\n#define CAN_F7R1_FB5_Msk  (0x1U << CAN_F7R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F7R1_FB5      CAN_F7R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F7R1_FB6_Pos  (6U)\r\n#define CAN_F7R1_FB6_Msk  (0x1U << CAN_F7R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F7R1_FB6      CAN_F7R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F7R1_FB7_Pos  (7U)\r\n#define CAN_F7R1_FB7_Msk  (0x1U << CAN_F7R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F7R1_FB7      CAN_F7R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F7R1_FB8_Pos  (8U)\r\n#define CAN_F7R1_FB8_Msk  (0x1U << CAN_F7R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F7R1_FB8      CAN_F7R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F7R1_FB9_Pos  (9U)\r\n#define CAN_F7R1_FB9_Msk  (0x1U << CAN_F7R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F7R1_FB9      CAN_F7R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F7R1_FB10_Pos (10U)\r\n#define CAN_F7R1_FB10_Msk (0x1U << CAN_F7R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F7R1_FB10     CAN_F7R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F7R1_FB11_Pos (11U)\r\n#define CAN_F7R1_FB11_Msk (0x1U << CAN_F7R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F7R1_FB11     CAN_F7R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F7R1_FB12_Pos (12U)\r\n#define CAN_F7R1_FB12_Msk (0x1U << CAN_F7R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F7R1_FB12     CAN_F7R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F7R1_FB13_Pos (13U)\r\n#define CAN_F7R1_FB13_Msk (0x1U << CAN_F7R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F7R1_FB13     CAN_F7R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F7R1_FB14_Pos (14U)\r\n#define CAN_F7R1_FB14_Msk (0x1U << CAN_F7R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F7R1_FB14     CAN_F7R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F7R1_FB15_Pos (15U)\r\n#define CAN_F7R1_FB15_Msk (0x1U << CAN_F7R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F7R1_FB15     CAN_F7R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F7R1_FB16_Pos (16U)\r\n#define CAN_F7R1_FB16_Msk (0x1U << CAN_F7R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F7R1_FB16     CAN_F7R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F7R1_FB17_Pos (17U)\r\n#define CAN_F7R1_FB17_Msk (0x1U << CAN_F7R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F7R1_FB17     CAN_F7R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F7R1_FB18_Pos (18U)\r\n#define CAN_F7R1_FB18_Msk (0x1U << CAN_F7R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F7R1_FB18     CAN_F7R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F7R1_FB19_Pos (19U)\r\n#define CAN_F7R1_FB19_Msk (0x1U << CAN_F7R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F7R1_FB19     CAN_F7R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F7R1_FB20_Pos (20U)\r\n#define CAN_F7R1_FB20_Msk (0x1U << CAN_F7R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F7R1_FB20     CAN_F7R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F7R1_FB21_Pos (21U)\r\n#define CAN_F7R1_FB21_Msk (0x1U << CAN_F7R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F7R1_FB21     CAN_F7R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F7R1_FB22_Pos (22U)\r\n#define CAN_F7R1_FB22_Msk (0x1U << CAN_F7R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F7R1_FB22     CAN_F7R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F7R1_FB23_Pos (23U)\r\n#define CAN_F7R1_FB23_Msk (0x1U << CAN_F7R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F7R1_FB23     CAN_F7R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F7R1_FB24_Pos (24U)\r\n#define CAN_F7R1_FB24_Msk (0x1U << CAN_F7R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F7R1_FB24     CAN_F7R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F7R1_FB25_Pos (25U)\r\n#define CAN_F7R1_FB25_Msk (0x1U << CAN_F7R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F7R1_FB25     CAN_F7R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F7R1_FB26_Pos (26U)\r\n#define CAN_F7R1_FB26_Msk (0x1U << CAN_F7R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F7R1_FB26     CAN_F7R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F7R1_FB27_Pos (27U)\r\n#define CAN_F7R1_FB27_Msk (0x1U << CAN_F7R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F7R1_FB27     CAN_F7R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F7R1_FB28_Pos (28U)\r\n#define CAN_F7R1_FB28_Msk (0x1U << CAN_F7R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F7R1_FB28     CAN_F7R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F7R1_FB29_Pos (29U)\r\n#define CAN_F7R1_FB29_Msk (0x1U << CAN_F7R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F7R1_FB29     CAN_F7R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F7R1_FB30_Pos (30U)\r\n#define CAN_F7R1_FB30_Msk (0x1U << CAN_F7R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F7R1_FB30     CAN_F7R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F7R1_FB31_Pos (31U)\r\n#define CAN_F7R1_FB31_Msk (0x1U << CAN_F7R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F7R1_FB31     CAN_F7R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F8R1 register  *******************/\r\n#define CAN_F8R1_FB0_Pos  (0U)\r\n#define CAN_F8R1_FB0_Msk  (0x1U << CAN_F8R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F8R1_FB0      CAN_F8R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F8R1_FB1_Pos  (1U)\r\n#define CAN_F8R1_FB1_Msk  (0x1U << CAN_F8R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F8R1_FB1      CAN_F8R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F8R1_FB2_Pos  (2U)\r\n#define CAN_F8R1_FB2_Msk  (0x1U << CAN_F8R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F8R1_FB2      CAN_F8R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F8R1_FB3_Pos  (3U)\r\n#define CAN_F8R1_FB3_Msk  (0x1U << CAN_F8R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F8R1_FB3      CAN_F8R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F8R1_FB4_Pos  (4U)\r\n#define CAN_F8R1_FB4_Msk  (0x1U << CAN_F8R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F8R1_FB4      CAN_F8R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F8R1_FB5_Pos  (5U)\r\n#define CAN_F8R1_FB5_Msk  (0x1U << CAN_F8R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F8R1_FB5      CAN_F8R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F8R1_FB6_Pos  (6U)\r\n#define CAN_F8R1_FB6_Msk  (0x1U << CAN_F8R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F8R1_FB6      CAN_F8R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F8R1_FB7_Pos  (7U)\r\n#define CAN_F8R1_FB7_Msk  (0x1U << CAN_F8R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F8R1_FB7      CAN_F8R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F8R1_FB8_Pos  (8U)\r\n#define CAN_F8R1_FB8_Msk  (0x1U << CAN_F8R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F8R1_FB8      CAN_F8R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F8R1_FB9_Pos  (9U)\r\n#define CAN_F8R1_FB9_Msk  (0x1U << CAN_F8R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F8R1_FB9      CAN_F8R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F8R1_FB10_Pos (10U)\r\n#define CAN_F8R1_FB10_Msk (0x1U << CAN_F8R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F8R1_FB10     CAN_F8R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F8R1_FB11_Pos (11U)\r\n#define CAN_F8R1_FB11_Msk (0x1U << CAN_F8R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F8R1_FB11     CAN_F8R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F8R1_FB12_Pos (12U)\r\n#define CAN_F8R1_FB12_Msk (0x1U << CAN_F8R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F8R1_FB12     CAN_F8R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F8R1_FB13_Pos (13U)\r\n#define CAN_F8R1_FB13_Msk (0x1U << CAN_F8R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F8R1_FB13     CAN_F8R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F8R1_FB14_Pos (14U)\r\n#define CAN_F8R1_FB14_Msk (0x1U << CAN_F8R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F8R1_FB14     CAN_F8R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F8R1_FB15_Pos (15U)\r\n#define CAN_F8R1_FB15_Msk (0x1U << CAN_F8R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F8R1_FB15     CAN_F8R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F8R1_FB16_Pos (16U)\r\n#define CAN_F8R1_FB16_Msk (0x1U << CAN_F8R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F8R1_FB16     CAN_F8R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F8R1_FB17_Pos (17U)\r\n#define CAN_F8R1_FB17_Msk (0x1U << CAN_F8R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F8R1_FB17     CAN_F8R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F8R1_FB18_Pos (18U)\r\n#define CAN_F8R1_FB18_Msk (0x1U << CAN_F8R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F8R1_FB18     CAN_F8R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F8R1_FB19_Pos (19U)\r\n#define CAN_F8R1_FB19_Msk (0x1U << CAN_F8R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F8R1_FB19     CAN_F8R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F8R1_FB20_Pos (20U)\r\n#define CAN_F8R1_FB20_Msk (0x1U << CAN_F8R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F8R1_FB20     CAN_F8R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F8R1_FB21_Pos (21U)\r\n#define CAN_F8R1_FB21_Msk (0x1U << CAN_F8R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F8R1_FB21     CAN_F8R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F8R1_FB22_Pos (22U)\r\n#define CAN_F8R1_FB22_Msk (0x1U << CAN_F8R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F8R1_FB22     CAN_F8R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F8R1_FB23_Pos (23U)\r\n#define CAN_F8R1_FB23_Msk (0x1U << CAN_F8R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F8R1_FB23     CAN_F8R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F8R1_FB24_Pos (24U)\r\n#define CAN_F8R1_FB24_Msk (0x1U << CAN_F8R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F8R1_FB24     CAN_F8R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F8R1_FB25_Pos (25U)\r\n#define CAN_F8R1_FB25_Msk (0x1U << CAN_F8R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F8R1_FB25     CAN_F8R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F8R1_FB26_Pos (26U)\r\n#define CAN_F8R1_FB26_Msk (0x1U << CAN_F8R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F8R1_FB26     CAN_F8R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F8R1_FB27_Pos (27U)\r\n#define CAN_F8R1_FB27_Msk (0x1U << CAN_F8R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F8R1_FB27     CAN_F8R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F8R1_FB28_Pos (28U)\r\n#define CAN_F8R1_FB28_Msk (0x1U << CAN_F8R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F8R1_FB28     CAN_F8R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F8R1_FB29_Pos (29U)\r\n#define CAN_F8R1_FB29_Msk (0x1U << CAN_F8R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F8R1_FB29     CAN_F8R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F8R1_FB30_Pos (30U)\r\n#define CAN_F8R1_FB30_Msk (0x1U << CAN_F8R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F8R1_FB30     CAN_F8R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F8R1_FB31_Pos (31U)\r\n#define CAN_F8R1_FB31_Msk (0x1U << CAN_F8R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F8R1_FB31     CAN_F8R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F9R1 register  *******************/\r\n#define CAN_F9R1_FB0_Pos  (0U)\r\n#define CAN_F9R1_FB0_Msk  (0x1U << CAN_F9R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F9R1_FB0      CAN_F9R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F9R1_FB1_Pos  (1U)\r\n#define CAN_F9R1_FB1_Msk  (0x1U << CAN_F9R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F9R1_FB1      CAN_F9R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F9R1_FB2_Pos  (2U)\r\n#define CAN_F9R1_FB2_Msk  (0x1U << CAN_F9R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F9R1_FB2      CAN_F9R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F9R1_FB3_Pos  (3U)\r\n#define CAN_F9R1_FB3_Msk  (0x1U << CAN_F9R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F9R1_FB3      CAN_F9R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F9R1_FB4_Pos  (4U)\r\n#define CAN_F9R1_FB4_Msk  (0x1U << CAN_F9R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F9R1_FB4      CAN_F9R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F9R1_FB5_Pos  (5U)\r\n#define CAN_F9R1_FB5_Msk  (0x1U << CAN_F9R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F9R1_FB5      CAN_F9R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F9R1_FB6_Pos  (6U)\r\n#define CAN_F9R1_FB6_Msk  (0x1U << CAN_F9R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F9R1_FB6      CAN_F9R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F9R1_FB7_Pos  (7U)\r\n#define CAN_F9R1_FB7_Msk  (0x1U << CAN_F9R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F9R1_FB7      CAN_F9R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F9R1_FB8_Pos  (8U)\r\n#define CAN_F9R1_FB8_Msk  (0x1U << CAN_F9R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F9R1_FB8      CAN_F9R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F9R1_FB9_Pos  (9U)\r\n#define CAN_F9R1_FB9_Msk  (0x1U << CAN_F9R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F9R1_FB9      CAN_F9R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F9R1_FB10_Pos (10U)\r\n#define CAN_F9R1_FB10_Msk (0x1U << CAN_F9R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F9R1_FB10     CAN_F9R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F9R1_FB11_Pos (11U)\r\n#define CAN_F9R1_FB11_Msk (0x1U << CAN_F9R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F9R1_FB11     CAN_F9R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F9R1_FB12_Pos (12U)\r\n#define CAN_F9R1_FB12_Msk (0x1U << CAN_F9R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F9R1_FB12     CAN_F9R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F9R1_FB13_Pos (13U)\r\n#define CAN_F9R1_FB13_Msk (0x1U << CAN_F9R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F9R1_FB13     CAN_F9R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F9R1_FB14_Pos (14U)\r\n#define CAN_F9R1_FB14_Msk (0x1U << CAN_F9R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F9R1_FB14     CAN_F9R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F9R1_FB15_Pos (15U)\r\n#define CAN_F9R1_FB15_Msk (0x1U << CAN_F9R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F9R1_FB15     CAN_F9R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F9R1_FB16_Pos (16U)\r\n#define CAN_F9R1_FB16_Msk (0x1U << CAN_F9R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F9R1_FB16     CAN_F9R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F9R1_FB17_Pos (17U)\r\n#define CAN_F9R1_FB17_Msk (0x1U << CAN_F9R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F9R1_FB17     CAN_F9R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F9R1_FB18_Pos (18U)\r\n#define CAN_F9R1_FB18_Msk (0x1U << CAN_F9R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F9R1_FB18     CAN_F9R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F9R1_FB19_Pos (19U)\r\n#define CAN_F9R1_FB19_Msk (0x1U << CAN_F9R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F9R1_FB19     CAN_F9R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F9R1_FB20_Pos (20U)\r\n#define CAN_F9R1_FB20_Msk (0x1U << CAN_F9R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F9R1_FB20     CAN_F9R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F9R1_FB21_Pos (21U)\r\n#define CAN_F9R1_FB21_Msk (0x1U << CAN_F9R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F9R1_FB21     CAN_F9R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F9R1_FB22_Pos (22U)\r\n#define CAN_F9R1_FB22_Msk (0x1U << CAN_F9R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F9R1_FB22     CAN_F9R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F9R1_FB23_Pos (23U)\r\n#define CAN_F9R1_FB23_Msk (0x1U << CAN_F9R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F9R1_FB23     CAN_F9R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F9R1_FB24_Pos (24U)\r\n#define CAN_F9R1_FB24_Msk (0x1U << CAN_F9R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F9R1_FB24     CAN_F9R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F9R1_FB25_Pos (25U)\r\n#define CAN_F9R1_FB25_Msk (0x1U << CAN_F9R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F9R1_FB25     CAN_F9R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F9R1_FB26_Pos (26U)\r\n#define CAN_F9R1_FB26_Msk (0x1U << CAN_F9R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F9R1_FB26     CAN_F9R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F9R1_FB27_Pos (27U)\r\n#define CAN_F9R1_FB27_Msk (0x1U << CAN_F9R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F9R1_FB27     CAN_F9R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F9R1_FB28_Pos (28U)\r\n#define CAN_F9R1_FB28_Msk (0x1U << CAN_F9R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F9R1_FB28     CAN_F9R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F9R1_FB29_Pos (29U)\r\n#define CAN_F9R1_FB29_Msk (0x1U << CAN_F9R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F9R1_FB29     CAN_F9R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F9R1_FB30_Pos (30U)\r\n#define CAN_F9R1_FB30_Msk (0x1U << CAN_F9R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F9R1_FB30     CAN_F9R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F9R1_FB31_Pos (31U)\r\n#define CAN_F9R1_FB31_Msk (0x1U << CAN_F9R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F9R1_FB31     CAN_F9R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F10R1 register  ******************/\r\n#define CAN_F10R1_FB0_Pos  (0U)\r\n#define CAN_F10R1_FB0_Msk  (0x1U << CAN_F10R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F10R1_FB0      CAN_F10R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F10R1_FB1_Pos  (1U)\r\n#define CAN_F10R1_FB1_Msk  (0x1U << CAN_F10R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F10R1_FB1      CAN_F10R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F10R1_FB2_Pos  (2U)\r\n#define CAN_F10R1_FB2_Msk  (0x1U << CAN_F10R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F10R1_FB2      CAN_F10R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F10R1_FB3_Pos  (3U)\r\n#define CAN_F10R1_FB3_Msk  (0x1U << CAN_F10R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F10R1_FB3      CAN_F10R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F10R1_FB4_Pos  (4U)\r\n#define CAN_F10R1_FB4_Msk  (0x1U << CAN_F10R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F10R1_FB4      CAN_F10R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F10R1_FB5_Pos  (5U)\r\n#define CAN_F10R1_FB5_Msk  (0x1U << CAN_F10R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F10R1_FB5      CAN_F10R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F10R1_FB6_Pos  (6U)\r\n#define CAN_F10R1_FB6_Msk  (0x1U << CAN_F10R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F10R1_FB6      CAN_F10R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F10R1_FB7_Pos  (7U)\r\n#define CAN_F10R1_FB7_Msk  (0x1U << CAN_F10R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F10R1_FB7      CAN_F10R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F10R1_FB8_Pos  (8U)\r\n#define CAN_F10R1_FB8_Msk  (0x1U << CAN_F10R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F10R1_FB8      CAN_F10R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F10R1_FB9_Pos  (9U)\r\n#define CAN_F10R1_FB9_Msk  (0x1U << CAN_F10R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F10R1_FB9      CAN_F10R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F10R1_FB10_Pos (10U)\r\n#define CAN_F10R1_FB10_Msk (0x1U << CAN_F10R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F10R1_FB10     CAN_F10R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F10R1_FB11_Pos (11U)\r\n#define CAN_F10R1_FB11_Msk (0x1U << CAN_F10R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F10R1_FB11     CAN_F10R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F10R1_FB12_Pos (12U)\r\n#define CAN_F10R1_FB12_Msk (0x1U << CAN_F10R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F10R1_FB12     CAN_F10R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F10R1_FB13_Pos (13U)\r\n#define CAN_F10R1_FB13_Msk (0x1U << CAN_F10R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F10R1_FB13     CAN_F10R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F10R1_FB14_Pos (14U)\r\n#define CAN_F10R1_FB14_Msk (0x1U << CAN_F10R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F10R1_FB14     CAN_F10R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F10R1_FB15_Pos (15U)\r\n#define CAN_F10R1_FB15_Msk (0x1U << CAN_F10R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F10R1_FB15     CAN_F10R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F10R1_FB16_Pos (16U)\r\n#define CAN_F10R1_FB16_Msk (0x1U << CAN_F10R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F10R1_FB16     CAN_F10R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F10R1_FB17_Pos (17U)\r\n#define CAN_F10R1_FB17_Msk (0x1U << CAN_F10R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F10R1_FB17     CAN_F10R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F10R1_FB18_Pos (18U)\r\n#define CAN_F10R1_FB18_Msk (0x1U << CAN_F10R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F10R1_FB18     CAN_F10R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F10R1_FB19_Pos (19U)\r\n#define CAN_F10R1_FB19_Msk (0x1U << CAN_F10R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F10R1_FB19     CAN_F10R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F10R1_FB20_Pos (20U)\r\n#define CAN_F10R1_FB20_Msk (0x1U << CAN_F10R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F10R1_FB20     CAN_F10R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F10R1_FB21_Pos (21U)\r\n#define CAN_F10R1_FB21_Msk (0x1U << CAN_F10R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F10R1_FB21     CAN_F10R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F10R1_FB22_Pos (22U)\r\n#define CAN_F10R1_FB22_Msk (0x1U << CAN_F10R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F10R1_FB22     CAN_F10R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F10R1_FB23_Pos (23U)\r\n#define CAN_F10R1_FB23_Msk (0x1U << CAN_F10R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F10R1_FB23     CAN_F10R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F10R1_FB24_Pos (24U)\r\n#define CAN_F10R1_FB24_Msk (0x1U << CAN_F10R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F10R1_FB24     CAN_F10R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F10R1_FB25_Pos (25U)\r\n#define CAN_F10R1_FB25_Msk (0x1U << CAN_F10R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F10R1_FB25     CAN_F10R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F10R1_FB26_Pos (26U)\r\n#define CAN_F10R1_FB26_Msk (0x1U << CAN_F10R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F10R1_FB26     CAN_F10R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F10R1_FB27_Pos (27U)\r\n#define CAN_F10R1_FB27_Msk (0x1U << CAN_F10R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F10R1_FB27     CAN_F10R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F10R1_FB28_Pos (28U)\r\n#define CAN_F10R1_FB28_Msk (0x1U << CAN_F10R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F10R1_FB28     CAN_F10R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F10R1_FB29_Pos (29U)\r\n#define CAN_F10R1_FB29_Msk (0x1U << CAN_F10R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F10R1_FB29     CAN_F10R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F10R1_FB30_Pos (30U)\r\n#define CAN_F10R1_FB30_Msk (0x1U << CAN_F10R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F10R1_FB30     CAN_F10R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F10R1_FB31_Pos (31U)\r\n#define CAN_F10R1_FB31_Msk (0x1U << CAN_F10R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F10R1_FB31     CAN_F10R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F11R1 register  ******************/\r\n#define CAN_F11R1_FB0_Pos  (0U)\r\n#define CAN_F11R1_FB0_Msk  (0x1U << CAN_F11R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F11R1_FB0      CAN_F11R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F11R1_FB1_Pos  (1U)\r\n#define CAN_F11R1_FB1_Msk  (0x1U << CAN_F11R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F11R1_FB1      CAN_F11R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F11R1_FB2_Pos  (2U)\r\n#define CAN_F11R1_FB2_Msk  (0x1U << CAN_F11R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F11R1_FB2      CAN_F11R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F11R1_FB3_Pos  (3U)\r\n#define CAN_F11R1_FB3_Msk  (0x1U << CAN_F11R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F11R1_FB3      CAN_F11R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F11R1_FB4_Pos  (4U)\r\n#define CAN_F11R1_FB4_Msk  (0x1U << CAN_F11R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F11R1_FB4      CAN_F11R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F11R1_FB5_Pos  (5U)\r\n#define CAN_F11R1_FB5_Msk  (0x1U << CAN_F11R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F11R1_FB5      CAN_F11R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F11R1_FB6_Pos  (6U)\r\n#define CAN_F11R1_FB6_Msk  (0x1U << CAN_F11R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F11R1_FB6      CAN_F11R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F11R1_FB7_Pos  (7U)\r\n#define CAN_F11R1_FB7_Msk  (0x1U << CAN_F11R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F11R1_FB7      CAN_F11R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F11R1_FB8_Pos  (8U)\r\n#define CAN_F11R1_FB8_Msk  (0x1U << CAN_F11R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F11R1_FB8      CAN_F11R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F11R1_FB9_Pos  (9U)\r\n#define CAN_F11R1_FB9_Msk  (0x1U << CAN_F11R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F11R1_FB9      CAN_F11R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F11R1_FB10_Pos (10U)\r\n#define CAN_F11R1_FB10_Msk (0x1U << CAN_F11R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F11R1_FB10     CAN_F11R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F11R1_FB11_Pos (11U)\r\n#define CAN_F11R1_FB11_Msk (0x1U << CAN_F11R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F11R1_FB11     CAN_F11R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F11R1_FB12_Pos (12U)\r\n#define CAN_F11R1_FB12_Msk (0x1U << CAN_F11R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F11R1_FB12     CAN_F11R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F11R1_FB13_Pos (13U)\r\n#define CAN_F11R1_FB13_Msk (0x1U << CAN_F11R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F11R1_FB13     CAN_F11R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F11R1_FB14_Pos (14U)\r\n#define CAN_F11R1_FB14_Msk (0x1U << CAN_F11R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F11R1_FB14     CAN_F11R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F11R1_FB15_Pos (15U)\r\n#define CAN_F11R1_FB15_Msk (0x1U << CAN_F11R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F11R1_FB15     CAN_F11R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F11R1_FB16_Pos (16U)\r\n#define CAN_F11R1_FB16_Msk (0x1U << CAN_F11R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F11R1_FB16     CAN_F11R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F11R1_FB17_Pos (17U)\r\n#define CAN_F11R1_FB17_Msk (0x1U << CAN_F11R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F11R1_FB17     CAN_F11R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F11R1_FB18_Pos (18U)\r\n#define CAN_F11R1_FB18_Msk (0x1U << CAN_F11R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F11R1_FB18     CAN_F11R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F11R1_FB19_Pos (19U)\r\n#define CAN_F11R1_FB19_Msk (0x1U << CAN_F11R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F11R1_FB19     CAN_F11R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F11R1_FB20_Pos (20U)\r\n#define CAN_F11R1_FB20_Msk (0x1U << CAN_F11R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F11R1_FB20     CAN_F11R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F11R1_FB21_Pos (21U)\r\n#define CAN_F11R1_FB21_Msk (0x1U << CAN_F11R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F11R1_FB21     CAN_F11R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F11R1_FB22_Pos (22U)\r\n#define CAN_F11R1_FB22_Msk (0x1U << CAN_F11R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F11R1_FB22     CAN_F11R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F11R1_FB23_Pos (23U)\r\n#define CAN_F11R1_FB23_Msk (0x1U << CAN_F11R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F11R1_FB23     CAN_F11R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F11R1_FB24_Pos (24U)\r\n#define CAN_F11R1_FB24_Msk (0x1U << CAN_F11R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F11R1_FB24     CAN_F11R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F11R1_FB25_Pos (25U)\r\n#define CAN_F11R1_FB25_Msk (0x1U << CAN_F11R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F11R1_FB25     CAN_F11R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F11R1_FB26_Pos (26U)\r\n#define CAN_F11R1_FB26_Msk (0x1U << CAN_F11R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F11R1_FB26     CAN_F11R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F11R1_FB27_Pos (27U)\r\n#define CAN_F11R1_FB27_Msk (0x1U << CAN_F11R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F11R1_FB27     CAN_F11R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F11R1_FB28_Pos (28U)\r\n#define CAN_F11R1_FB28_Msk (0x1U << CAN_F11R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F11R1_FB28     CAN_F11R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F11R1_FB29_Pos (29U)\r\n#define CAN_F11R1_FB29_Msk (0x1U << CAN_F11R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F11R1_FB29     CAN_F11R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F11R1_FB30_Pos (30U)\r\n#define CAN_F11R1_FB30_Msk (0x1U << CAN_F11R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F11R1_FB30     CAN_F11R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F11R1_FB31_Pos (31U)\r\n#define CAN_F11R1_FB31_Msk (0x1U << CAN_F11R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F11R1_FB31     CAN_F11R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F12R1 register  ******************/\r\n#define CAN_F12R1_FB0_Pos  (0U)\r\n#define CAN_F12R1_FB0_Msk  (0x1U << CAN_F12R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F12R1_FB0      CAN_F12R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F12R1_FB1_Pos  (1U)\r\n#define CAN_F12R1_FB1_Msk  (0x1U << CAN_F12R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F12R1_FB1      CAN_F12R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F12R1_FB2_Pos  (2U)\r\n#define CAN_F12R1_FB2_Msk  (0x1U << CAN_F12R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F12R1_FB2      CAN_F12R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F12R1_FB3_Pos  (3U)\r\n#define CAN_F12R1_FB3_Msk  (0x1U << CAN_F12R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F12R1_FB3      CAN_F12R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F12R1_FB4_Pos  (4U)\r\n#define CAN_F12R1_FB4_Msk  (0x1U << CAN_F12R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F12R1_FB4      CAN_F12R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F12R1_FB5_Pos  (5U)\r\n#define CAN_F12R1_FB5_Msk  (0x1U << CAN_F12R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F12R1_FB5      CAN_F12R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F12R1_FB6_Pos  (6U)\r\n#define CAN_F12R1_FB6_Msk  (0x1U << CAN_F12R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F12R1_FB6      CAN_F12R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F12R1_FB7_Pos  (7U)\r\n#define CAN_F12R1_FB7_Msk  (0x1U << CAN_F12R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F12R1_FB7      CAN_F12R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F12R1_FB8_Pos  (8U)\r\n#define CAN_F12R1_FB8_Msk  (0x1U << CAN_F12R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F12R1_FB8      CAN_F12R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F12R1_FB9_Pos  (9U)\r\n#define CAN_F12R1_FB9_Msk  (0x1U << CAN_F12R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F12R1_FB9      CAN_F12R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F12R1_FB10_Pos (10U)\r\n#define CAN_F12R1_FB10_Msk (0x1U << CAN_F12R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F12R1_FB10     CAN_F12R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F12R1_FB11_Pos (11U)\r\n#define CAN_F12R1_FB11_Msk (0x1U << CAN_F12R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F12R1_FB11     CAN_F12R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F12R1_FB12_Pos (12U)\r\n#define CAN_F12R1_FB12_Msk (0x1U << CAN_F12R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F12R1_FB12     CAN_F12R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F12R1_FB13_Pos (13U)\r\n#define CAN_F12R1_FB13_Msk (0x1U << CAN_F12R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F12R1_FB13     CAN_F12R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F12R1_FB14_Pos (14U)\r\n#define CAN_F12R1_FB14_Msk (0x1U << CAN_F12R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F12R1_FB14     CAN_F12R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F12R1_FB15_Pos (15U)\r\n#define CAN_F12R1_FB15_Msk (0x1U << CAN_F12R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F12R1_FB15     CAN_F12R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F12R1_FB16_Pos (16U)\r\n#define CAN_F12R1_FB16_Msk (0x1U << CAN_F12R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F12R1_FB16     CAN_F12R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F12R1_FB17_Pos (17U)\r\n#define CAN_F12R1_FB17_Msk (0x1U << CAN_F12R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F12R1_FB17     CAN_F12R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F12R1_FB18_Pos (18U)\r\n#define CAN_F12R1_FB18_Msk (0x1U << CAN_F12R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F12R1_FB18     CAN_F12R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F12R1_FB19_Pos (19U)\r\n#define CAN_F12R1_FB19_Msk (0x1U << CAN_F12R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F12R1_FB19     CAN_F12R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F12R1_FB20_Pos (20U)\r\n#define CAN_F12R1_FB20_Msk (0x1U << CAN_F12R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F12R1_FB20     CAN_F12R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F12R1_FB21_Pos (21U)\r\n#define CAN_F12R1_FB21_Msk (0x1U << CAN_F12R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F12R1_FB21     CAN_F12R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F12R1_FB22_Pos (22U)\r\n#define CAN_F12R1_FB22_Msk (0x1U << CAN_F12R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F12R1_FB22     CAN_F12R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F12R1_FB23_Pos (23U)\r\n#define CAN_F12R1_FB23_Msk (0x1U << CAN_F12R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F12R1_FB23     CAN_F12R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F12R1_FB24_Pos (24U)\r\n#define CAN_F12R1_FB24_Msk (0x1U << CAN_F12R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F12R1_FB24     CAN_F12R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F12R1_FB25_Pos (25U)\r\n#define CAN_F12R1_FB25_Msk (0x1U << CAN_F12R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F12R1_FB25     CAN_F12R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F12R1_FB26_Pos (26U)\r\n#define CAN_F12R1_FB26_Msk (0x1U << CAN_F12R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F12R1_FB26     CAN_F12R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F12R1_FB27_Pos (27U)\r\n#define CAN_F12R1_FB27_Msk (0x1U << CAN_F12R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F12R1_FB27     CAN_F12R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F12R1_FB28_Pos (28U)\r\n#define CAN_F12R1_FB28_Msk (0x1U << CAN_F12R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F12R1_FB28     CAN_F12R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F12R1_FB29_Pos (29U)\r\n#define CAN_F12R1_FB29_Msk (0x1U << CAN_F12R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F12R1_FB29     CAN_F12R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F12R1_FB30_Pos (30U)\r\n#define CAN_F12R1_FB30_Msk (0x1U << CAN_F12R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F12R1_FB30     CAN_F12R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F12R1_FB31_Pos (31U)\r\n#define CAN_F12R1_FB31_Msk (0x1U << CAN_F12R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F12R1_FB31     CAN_F12R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F13R1 register  ******************/\r\n#define CAN_F13R1_FB0_Pos  (0U)\r\n#define CAN_F13R1_FB0_Msk  (0x1U << CAN_F13R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F13R1_FB0      CAN_F13R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F13R1_FB1_Pos  (1U)\r\n#define CAN_F13R1_FB1_Msk  (0x1U << CAN_F13R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F13R1_FB1      CAN_F13R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F13R1_FB2_Pos  (2U)\r\n#define CAN_F13R1_FB2_Msk  (0x1U << CAN_F13R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F13R1_FB2      CAN_F13R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F13R1_FB3_Pos  (3U)\r\n#define CAN_F13R1_FB3_Msk  (0x1U << CAN_F13R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F13R1_FB3      CAN_F13R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F13R1_FB4_Pos  (4U)\r\n#define CAN_F13R1_FB4_Msk  (0x1U << CAN_F13R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F13R1_FB4      CAN_F13R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F13R1_FB5_Pos  (5U)\r\n#define CAN_F13R1_FB5_Msk  (0x1U << CAN_F13R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F13R1_FB5      CAN_F13R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F13R1_FB6_Pos  (6U)\r\n#define CAN_F13R1_FB6_Msk  (0x1U << CAN_F13R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F13R1_FB6      CAN_F13R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F13R1_FB7_Pos  (7U)\r\n#define CAN_F13R1_FB7_Msk  (0x1U << CAN_F13R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F13R1_FB7      CAN_F13R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F13R1_FB8_Pos  (8U)\r\n#define CAN_F13R1_FB8_Msk  (0x1U << CAN_F13R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F13R1_FB8      CAN_F13R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F13R1_FB9_Pos  (9U)\r\n#define CAN_F13R1_FB9_Msk  (0x1U << CAN_F13R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F13R1_FB9      CAN_F13R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F13R1_FB10_Pos (10U)\r\n#define CAN_F13R1_FB10_Msk (0x1U << CAN_F13R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F13R1_FB10     CAN_F13R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F13R1_FB11_Pos (11U)\r\n#define CAN_F13R1_FB11_Msk (0x1U << CAN_F13R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F13R1_FB11     CAN_F13R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F13R1_FB12_Pos (12U)\r\n#define CAN_F13R1_FB12_Msk (0x1U << CAN_F13R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F13R1_FB12     CAN_F13R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F13R1_FB13_Pos (13U)\r\n#define CAN_F13R1_FB13_Msk (0x1U << CAN_F13R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F13R1_FB13     CAN_F13R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F13R1_FB14_Pos (14U)\r\n#define CAN_F13R1_FB14_Msk (0x1U << CAN_F13R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F13R1_FB14     CAN_F13R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F13R1_FB15_Pos (15U)\r\n#define CAN_F13R1_FB15_Msk (0x1U << CAN_F13R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F13R1_FB15     CAN_F13R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F13R1_FB16_Pos (16U)\r\n#define CAN_F13R1_FB16_Msk (0x1U << CAN_F13R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F13R1_FB16     CAN_F13R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F13R1_FB17_Pos (17U)\r\n#define CAN_F13R1_FB17_Msk (0x1U << CAN_F13R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F13R1_FB17     CAN_F13R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F13R1_FB18_Pos (18U)\r\n#define CAN_F13R1_FB18_Msk (0x1U << CAN_F13R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F13R1_FB18     CAN_F13R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F13R1_FB19_Pos (19U)\r\n#define CAN_F13R1_FB19_Msk (0x1U << CAN_F13R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F13R1_FB19     CAN_F13R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F13R1_FB20_Pos (20U)\r\n#define CAN_F13R1_FB20_Msk (0x1U << CAN_F13R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F13R1_FB20     CAN_F13R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F13R1_FB21_Pos (21U)\r\n#define CAN_F13R1_FB21_Msk (0x1U << CAN_F13R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F13R1_FB21     CAN_F13R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F13R1_FB22_Pos (22U)\r\n#define CAN_F13R1_FB22_Msk (0x1U << CAN_F13R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F13R1_FB22     CAN_F13R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F13R1_FB23_Pos (23U)\r\n#define CAN_F13R1_FB23_Msk (0x1U << CAN_F13R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F13R1_FB23     CAN_F13R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F13R1_FB24_Pos (24U)\r\n#define CAN_F13R1_FB24_Msk (0x1U << CAN_F13R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F13R1_FB24     CAN_F13R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F13R1_FB25_Pos (25U)\r\n#define CAN_F13R1_FB25_Msk (0x1U << CAN_F13R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F13R1_FB25     CAN_F13R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F13R1_FB26_Pos (26U)\r\n#define CAN_F13R1_FB26_Msk (0x1U << CAN_F13R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F13R1_FB26     CAN_F13R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F13R1_FB27_Pos (27U)\r\n#define CAN_F13R1_FB27_Msk (0x1U << CAN_F13R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F13R1_FB27     CAN_F13R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F13R1_FB28_Pos (28U)\r\n#define CAN_F13R1_FB28_Msk (0x1U << CAN_F13R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F13R1_FB28     CAN_F13R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F13R1_FB29_Pos (29U)\r\n#define CAN_F13R1_FB29_Msk (0x1U << CAN_F13R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F13R1_FB29     CAN_F13R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F13R1_FB30_Pos (30U)\r\n#define CAN_F13R1_FB30_Msk (0x1U << CAN_F13R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F13R1_FB30     CAN_F13R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F13R1_FB31_Pos (31U)\r\n#define CAN_F13R1_FB31_Msk (0x1U << CAN_F13R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F13R1_FB31     CAN_F13R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F0R2 register  *******************/\r\n#define CAN_F0R2_FB0_Pos  (0U)\r\n#define CAN_F0R2_FB0_Msk  (0x1U << CAN_F0R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F0R2_FB0      CAN_F0R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F0R2_FB1_Pos  (1U)\r\n#define CAN_F0R2_FB1_Msk  (0x1U << CAN_F0R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F0R2_FB1      CAN_F0R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F0R2_FB2_Pos  (2U)\r\n#define CAN_F0R2_FB2_Msk  (0x1U << CAN_F0R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F0R2_FB2      CAN_F0R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F0R2_FB3_Pos  (3U)\r\n#define CAN_F0R2_FB3_Msk  (0x1U << CAN_F0R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F0R2_FB3      CAN_F0R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F0R2_FB4_Pos  (4U)\r\n#define CAN_F0R2_FB4_Msk  (0x1U << CAN_F0R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F0R2_FB4      CAN_F0R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F0R2_FB5_Pos  (5U)\r\n#define CAN_F0R2_FB5_Msk  (0x1U << CAN_F0R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F0R2_FB5      CAN_F0R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F0R2_FB6_Pos  (6U)\r\n#define CAN_F0R2_FB6_Msk  (0x1U << CAN_F0R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F0R2_FB6      CAN_F0R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F0R2_FB7_Pos  (7U)\r\n#define CAN_F0R2_FB7_Msk  (0x1U << CAN_F0R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F0R2_FB7      CAN_F0R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F0R2_FB8_Pos  (8U)\r\n#define CAN_F0R2_FB8_Msk  (0x1U << CAN_F0R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F0R2_FB8      CAN_F0R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F0R2_FB9_Pos  (9U)\r\n#define CAN_F0R2_FB9_Msk  (0x1U << CAN_F0R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F0R2_FB9      CAN_F0R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F0R2_FB10_Pos (10U)\r\n#define CAN_F0R2_FB10_Msk (0x1U << CAN_F0R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F0R2_FB10     CAN_F0R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F0R2_FB11_Pos (11U)\r\n#define CAN_F0R2_FB11_Msk (0x1U << CAN_F0R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F0R2_FB11     CAN_F0R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F0R2_FB12_Pos (12U)\r\n#define CAN_F0R2_FB12_Msk (0x1U << CAN_F0R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F0R2_FB12     CAN_F0R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F0R2_FB13_Pos (13U)\r\n#define CAN_F0R2_FB13_Msk (0x1U << CAN_F0R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F0R2_FB13     CAN_F0R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F0R2_FB14_Pos (14U)\r\n#define CAN_F0R2_FB14_Msk (0x1U << CAN_F0R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F0R2_FB14     CAN_F0R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F0R2_FB15_Pos (15U)\r\n#define CAN_F0R2_FB15_Msk (0x1U << CAN_F0R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F0R2_FB15     CAN_F0R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F0R2_FB16_Pos (16U)\r\n#define CAN_F0R2_FB16_Msk (0x1U << CAN_F0R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F0R2_FB16     CAN_F0R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F0R2_FB17_Pos (17U)\r\n#define CAN_F0R2_FB17_Msk (0x1U << CAN_F0R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F0R2_FB17     CAN_F0R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F0R2_FB18_Pos (18U)\r\n#define CAN_F0R2_FB18_Msk (0x1U << CAN_F0R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F0R2_FB18     CAN_F0R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F0R2_FB19_Pos (19U)\r\n#define CAN_F0R2_FB19_Msk (0x1U << CAN_F0R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F0R2_FB19     CAN_F0R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F0R2_FB20_Pos (20U)\r\n#define CAN_F0R2_FB20_Msk (0x1U << CAN_F0R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F0R2_FB20     CAN_F0R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F0R2_FB21_Pos (21U)\r\n#define CAN_F0R2_FB21_Msk (0x1U << CAN_F0R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F0R2_FB21     CAN_F0R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F0R2_FB22_Pos (22U)\r\n#define CAN_F0R2_FB22_Msk (0x1U << CAN_F0R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F0R2_FB22     CAN_F0R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F0R2_FB23_Pos (23U)\r\n#define CAN_F0R2_FB23_Msk (0x1U << CAN_F0R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F0R2_FB23     CAN_F0R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F0R2_FB24_Pos (24U)\r\n#define CAN_F0R2_FB24_Msk (0x1U << CAN_F0R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F0R2_FB24     CAN_F0R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F0R2_FB25_Pos (25U)\r\n#define CAN_F0R2_FB25_Msk (0x1U << CAN_F0R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F0R2_FB25     CAN_F0R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F0R2_FB26_Pos (26U)\r\n#define CAN_F0R2_FB26_Msk (0x1U << CAN_F0R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F0R2_FB26     CAN_F0R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F0R2_FB27_Pos (27U)\r\n#define CAN_F0R2_FB27_Msk (0x1U << CAN_F0R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F0R2_FB27     CAN_F0R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F0R2_FB28_Pos (28U)\r\n#define CAN_F0R2_FB28_Msk (0x1U << CAN_F0R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F0R2_FB28     CAN_F0R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F0R2_FB29_Pos (29U)\r\n#define CAN_F0R2_FB29_Msk (0x1U << CAN_F0R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F0R2_FB29     CAN_F0R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F0R2_FB30_Pos (30U)\r\n#define CAN_F0R2_FB30_Msk (0x1U << CAN_F0R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F0R2_FB30     CAN_F0R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F0R2_FB31_Pos (31U)\r\n#define CAN_F0R2_FB31_Msk (0x1U << CAN_F0R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F0R2_FB31     CAN_F0R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F1R2 register  *******************/\r\n#define CAN_F1R2_FB0_Pos  (0U)\r\n#define CAN_F1R2_FB0_Msk  (0x1U << CAN_F1R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F1R2_FB0      CAN_F1R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F1R2_FB1_Pos  (1U)\r\n#define CAN_F1R2_FB1_Msk  (0x1U << CAN_F1R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F1R2_FB1      CAN_F1R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F1R2_FB2_Pos  (2U)\r\n#define CAN_F1R2_FB2_Msk  (0x1U << CAN_F1R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F1R2_FB2      CAN_F1R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F1R2_FB3_Pos  (3U)\r\n#define CAN_F1R2_FB3_Msk  (0x1U << CAN_F1R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F1R2_FB3      CAN_F1R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F1R2_FB4_Pos  (4U)\r\n#define CAN_F1R2_FB4_Msk  (0x1U << CAN_F1R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F1R2_FB4      CAN_F1R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F1R2_FB5_Pos  (5U)\r\n#define CAN_F1R2_FB5_Msk  (0x1U << CAN_F1R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F1R2_FB5      CAN_F1R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F1R2_FB6_Pos  (6U)\r\n#define CAN_F1R2_FB6_Msk  (0x1U << CAN_F1R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F1R2_FB6      CAN_F1R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F1R2_FB7_Pos  (7U)\r\n#define CAN_F1R2_FB7_Msk  (0x1U << CAN_F1R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F1R2_FB7      CAN_F1R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F1R2_FB8_Pos  (8U)\r\n#define CAN_F1R2_FB8_Msk  (0x1U << CAN_F1R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F1R2_FB8      CAN_F1R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F1R2_FB9_Pos  (9U)\r\n#define CAN_F1R2_FB9_Msk  (0x1U << CAN_F1R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F1R2_FB9      CAN_F1R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F1R2_FB10_Pos (10U)\r\n#define CAN_F1R2_FB10_Msk (0x1U << CAN_F1R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F1R2_FB10     CAN_F1R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F1R2_FB11_Pos (11U)\r\n#define CAN_F1R2_FB11_Msk (0x1U << CAN_F1R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F1R2_FB11     CAN_F1R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F1R2_FB12_Pos (12U)\r\n#define CAN_F1R2_FB12_Msk (0x1U << CAN_F1R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F1R2_FB12     CAN_F1R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F1R2_FB13_Pos (13U)\r\n#define CAN_F1R2_FB13_Msk (0x1U << CAN_F1R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F1R2_FB13     CAN_F1R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F1R2_FB14_Pos (14U)\r\n#define CAN_F1R2_FB14_Msk (0x1U << CAN_F1R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F1R2_FB14     CAN_F1R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F1R2_FB15_Pos (15U)\r\n#define CAN_F1R2_FB15_Msk (0x1U << CAN_F1R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F1R2_FB15     CAN_F1R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F1R2_FB16_Pos (16U)\r\n#define CAN_F1R2_FB16_Msk (0x1U << CAN_F1R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F1R2_FB16     CAN_F1R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F1R2_FB17_Pos (17U)\r\n#define CAN_F1R2_FB17_Msk (0x1U << CAN_F1R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F1R2_FB17     CAN_F1R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F1R2_FB18_Pos (18U)\r\n#define CAN_F1R2_FB18_Msk (0x1U << CAN_F1R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F1R2_FB18     CAN_F1R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F1R2_FB19_Pos (19U)\r\n#define CAN_F1R2_FB19_Msk (0x1U << CAN_F1R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F1R2_FB19     CAN_F1R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F1R2_FB20_Pos (20U)\r\n#define CAN_F1R2_FB20_Msk (0x1U << CAN_F1R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F1R2_FB20     CAN_F1R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F1R2_FB21_Pos (21U)\r\n#define CAN_F1R2_FB21_Msk (0x1U << CAN_F1R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F1R2_FB21     CAN_F1R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F1R2_FB22_Pos (22U)\r\n#define CAN_F1R2_FB22_Msk (0x1U << CAN_F1R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F1R2_FB22     CAN_F1R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F1R2_FB23_Pos (23U)\r\n#define CAN_F1R2_FB23_Msk (0x1U << CAN_F1R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F1R2_FB23     CAN_F1R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F1R2_FB24_Pos (24U)\r\n#define CAN_F1R2_FB24_Msk (0x1U << CAN_F1R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F1R2_FB24     CAN_F1R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F1R2_FB25_Pos (25U)\r\n#define CAN_F1R2_FB25_Msk (0x1U << CAN_F1R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F1R2_FB25     CAN_F1R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F1R2_FB26_Pos (26U)\r\n#define CAN_F1R2_FB26_Msk (0x1U << CAN_F1R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F1R2_FB26     CAN_F1R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F1R2_FB27_Pos (27U)\r\n#define CAN_F1R2_FB27_Msk (0x1U << CAN_F1R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F1R2_FB27     CAN_F1R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F1R2_FB28_Pos (28U)\r\n#define CAN_F1R2_FB28_Msk (0x1U << CAN_F1R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F1R2_FB28     CAN_F1R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F1R2_FB29_Pos (29U)\r\n#define CAN_F1R2_FB29_Msk (0x1U << CAN_F1R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F1R2_FB29     CAN_F1R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F1R2_FB30_Pos (30U)\r\n#define CAN_F1R2_FB30_Msk (0x1U << CAN_F1R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F1R2_FB30     CAN_F1R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F1R2_FB31_Pos (31U)\r\n#define CAN_F1R2_FB31_Msk (0x1U << CAN_F1R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F1R2_FB31     CAN_F1R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F2R2 register  *******************/\r\n#define CAN_F2R2_FB0_Pos  (0U)\r\n#define CAN_F2R2_FB0_Msk  (0x1U << CAN_F2R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F2R2_FB0      CAN_F2R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F2R2_FB1_Pos  (1U)\r\n#define CAN_F2R2_FB1_Msk  (0x1U << CAN_F2R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F2R2_FB1      CAN_F2R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F2R2_FB2_Pos  (2U)\r\n#define CAN_F2R2_FB2_Msk  (0x1U << CAN_F2R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F2R2_FB2      CAN_F2R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F2R2_FB3_Pos  (3U)\r\n#define CAN_F2R2_FB3_Msk  (0x1U << CAN_F2R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F2R2_FB3      CAN_F2R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F2R2_FB4_Pos  (4U)\r\n#define CAN_F2R2_FB4_Msk  (0x1U << CAN_F2R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F2R2_FB4      CAN_F2R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F2R2_FB5_Pos  (5U)\r\n#define CAN_F2R2_FB5_Msk  (0x1U << CAN_F2R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F2R2_FB5      CAN_F2R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F2R2_FB6_Pos  (6U)\r\n#define CAN_F2R2_FB6_Msk  (0x1U << CAN_F2R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F2R2_FB6      CAN_F2R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F2R2_FB7_Pos  (7U)\r\n#define CAN_F2R2_FB7_Msk  (0x1U << CAN_F2R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F2R2_FB7      CAN_F2R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F2R2_FB8_Pos  (8U)\r\n#define CAN_F2R2_FB8_Msk  (0x1U << CAN_F2R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F2R2_FB8      CAN_F2R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F2R2_FB9_Pos  (9U)\r\n#define CAN_F2R2_FB9_Msk  (0x1U << CAN_F2R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F2R2_FB9      CAN_F2R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F2R2_FB10_Pos (10U)\r\n#define CAN_F2R2_FB10_Msk (0x1U << CAN_F2R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F2R2_FB10     CAN_F2R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F2R2_FB11_Pos (11U)\r\n#define CAN_F2R2_FB11_Msk (0x1U << CAN_F2R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F2R2_FB11     CAN_F2R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F2R2_FB12_Pos (12U)\r\n#define CAN_F2R2_FB12_Msk (0x1U << CAN_F2R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F2R2_FB12     CAN_F2R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F2R2_FB13_Pos (13U)\r\n#define CAN_F2R2_FB13_Msk (0x1U << CAN_F2R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F2R2_FB13     CAN_F2R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F2R2_FB14_Pos (14U)\r\n#define CAN_F2R2_FB14_Msk (0x1U << CAN_F2R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F2R2_FB14     CAN_F2R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F2R2_FB15_Pos (15U)\r\n#define CAN_F2R2_FB15_Msk (0x1U << CAN_F2R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F2R2_FB15     CAN_F2R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F2R2_FB16_Pos (16U)\r\n#define CAN_F2R2_FB16_Msk (0x1U << CAN_F2R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F2R2_FB16     CAN_F2R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F2R2_FB17_Pos (17U)\r\n#define CAN_F2R2_FB17_Msk (0x1U << CAN_F2R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F2R2_FB17     CAN_F2R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F2R2_FB18_Pos (18U)\r\n#define CAN_F2R2_FB18_Msk (0x1U << CAN_F2R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F2R2_FB18     CAN_F2R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F2R2_FB19_Pos (19U)\r\n#define CAN_F2R2_FB19_Msk (0x1U << CAN_F2R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F2R2_FB19     CAN_F2R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F2R2_FB20_Pos (20U)\r\n#define CAN_F2R2_FB20_Msk (0x1U << CAN_F2R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F2R2_FB20     CAN_F2R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F2R2_FB21_Pos (21U)\r\n#define CAN_F2R2_FB21_Msk (0x1U << CAN_F2R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F2R2_FB21     CAN_F2R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F2R2_FB22_Pos (22U)\r\n#define CAN_F2R2_FB22_Msk (0x1U << CAN_F2R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F2R2_FB22     CAN_F2R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F2R2_FB23_Pos (23U)\r\n#define CAN_F2R2_FB23_Msk (0x1U << CAN_F2R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F2R2_FB23     CAN_F2R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F2R2_FB24_Pos (24U)\r\n#define CAN_F2R2_FB24_Msk (0x1U << CAN_F2R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F2R2_FB24     CAN_F2R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F2R2_FB25_Pos (25U)\r\n#define CAN_F2R2_FB25_Msk (0x1U << CAN_F2R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F2R2_FB25     CAN_F2R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F2R2_FB26_Pos (26U)\r\n#define CAN_F2R2_FB26_Msk (0x1U << CAN_F2R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F2R2_FB26     CAN_F2R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F2R2_FB27_Pos (27U)\r\n#define CAN_F2R2_FB27_Msk (0x1U << CAN_F2R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F2R2_FB27     CAN_F2R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F2R2_FB28_Pos (28U)\r\n#define CAN_F2R2_FB28_Msk (0x1U << CAN_F2R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F2R2_FB28     CAN_F2R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F2R2_FB29_Pos (29U)\r\n#define CAN_F2R2_FB29_Msk (0x1U << CAN_F2R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F2R2_FB29     CAN_F2R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F2R2_FB30_Pos (30U)\r\n#define CAN_F2R2_FB30_Msk (0x1U << CAN_F2R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F2R2_FB30     CAN_F2R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F2R2_FB31_Pos (31U)\r\n#define CAN_F2R2_FB31_Msk (0x1U << CAN_F2R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F2R2_FB31     CAN_F2R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F3R2 register  *******************/\r\n#define CAN_F3R2_FB0_Pos  (0U)\r\n#define CAN_F3R2_FB0_Msk  (0x1U << CAN_F3R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F3R2_FB0      CAN_F3R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F3R2_FB1_Pos  (1U)\r\n#define CAN_F3R2_FB1_Msk  (0x1U << CAN_F3R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F3R2_FB1      CAN_F3R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F3R2_FB2_Pos  (2U)\r\n#define CAN_F3R2_FB2_Msk  (0x1U << CAN_F3R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F3R2_FB2      CAN_F3R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F3R2_FB3_Pos  (3U)\r\n#define CAN_F3R2_FB3_Msk  (0x1U << CAN_F3R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F3R2_FB3      CAN_F3R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F3R2_FB4_Pos  (4U)\r\n#define CAN_F3R2_FB4_Msk  (0x1U << CAN_F3R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F3R2_FB4      CAN_F3R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F3R2_FB5_Pos  (5U)\r\n#define CAN_F3R2_FB5_Msk  (0x1U << CAN_F3R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F3R2_FB5      CAN_F3R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F3R2_FB6_Pos  (6U)\r\n#define CAN_F3R2_FB6_Msk  (0x1U << CAN_F3R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F3R2_FB6      CAN_F3R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F3R2_FB7_Pos  (7U)\r\n#define CAN_F3R2_FB7_Msk  (0x1U << CAN_F3R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F3R2_FB7      CAN_F3R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F3R2_FB8_Pos  (8U)\r\n#define CAN_F3R2_FB8_Msk  (0x1U << CAN_F3R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F3R2_FB8      CAN_F3R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F3R2_FB9_Pos  (9U)\r\n#define CAN_F3R2_FB9_Msk  (0x1U << CAN_F3R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F3R2_FB9      CAN_F3R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F3R2_FB10_Pos (10U)\r\n#define CAN_F3R2_FB10_Msk (0x1U << CAN_F3R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F3R2_FB10     CAN_F3R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F3R2_FB11_Pos (11U)\r\n#define CAN_F3R2_FB11_Msk (0x1U << CAN_F3R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F3R2_FB11     CAN_F3R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F3R2_FB12_Pos (12U)\r\n#define CAN_F3R2_FB12_Msk (0x1U << CAN_F3R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F3R2_FB12     CAN_F3R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F3R2_FB13_Pos (13U)\r\n#define CAN_F3R2_FB13_Msk (0x1U << CAN_F3R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F3R2_FB13     CAN_F3R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F3R2_FB14_Pos (14U)\r\n#define CAN_F3R2_FB14_Msk (0x1U << CAN_F3R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F3R2_FB14     CAN_F3R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F3R2_FB15_Pos (15U)\r\n#define CAN_F3R2_FB15_Msk (0x1U << CAN_F3R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F3R2_FB15     CAN_F3R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F3R2_FB16_Pos (16U)\r\n#define CAN_F3R2_FB16_Msk (0x1U << CAN_F3R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F3R2_FB16     CAN_F3R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F3R2_FB17_Pos (17U)\r\n#define CAN_F3R2_FB17_Msk (0x1U << CAN_F3R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F3R2_FB17     CAN_F3R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F3R2_FB18_Pos (18U)\r\n#define CAN_F3R2_FB18_Msk (0x1U << CAN_F3R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F3R2_FB18     CAN_F3R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F3R2_FB19_Pos (19U)\r\n#define CAN_F3R2_FB19_Msk (0x1U << CAN_F3R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F3R2_FB19     CAN_F3R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F3R2_FB20_Pos (20U)\r\n#define CAN_F3R2_FB20_Msk (0x1U << CAN_F3R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F3R2_FB20     CAN_F3R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F3R2_FB21_Pos (21U)\r\n#define CAN_F3R2_FB21_Msk (0x1U << CAN_F3R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F3R2_FB21     CAN_F3R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F3R2_FB22_Pos (22U)\r\n#define CAN_F3R2_FB22_Msk (0x1U << CAN_F3R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F3R2_FB22     CAN_F3R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F3R2_FB23_Pos (23U)\r\n#define CAN_F3R2_FB23_Msk (0x1U << CAN_F3R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F3R2_FB23     CAN_F3R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F3R2_FB24_Pos (24U)\r\n#define CAN_F3R2_FB24_Msk (0x1U << CAN_F3R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F3R2_FB24     CAN_F3R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F3R2_FB25_Pos (25U)\r\n#define CAN_F3R2_FB25_Msk (0x1U << CAN_F3R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F3R2_FB25     CAN_F3R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F3R2_FB26_Pos (26U)\r\n#define CAN_F3R2_FB26_Msk (0x1U << CAN_F3R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F3R2_FB26     CAN_F3R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F3R2_FB27_Pos (27U)\r\n#define CAN_F3R2_FB27_Msk (0x1U << CAN_F3R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F3R2_FB27     CAN_F3R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F3R2_FB28_Pos (28U)\r\n#define CAN_F3R2_FB28_Msk (0x1U << CAN_F3R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F3R2_FB28     CAN_F3R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F3R2_FB29_Pos (29U)\r\n#define CAN_F3R2_FB29_Msk (0x1U << CAN_F3R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F3R2_FB29     CAN_F3R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F3R2_FB30_Pos (30U)\r\n#define CAN_F3R2_FB30_Msk (0x1U << CAN_F3R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F3R2_FB30     CAN_F3R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F3R2_FB31_Pos (31U)\r\n#define CAN_F3R2_FB31_Msk (0x1U << CAN_F3R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F3R2_FB31     CAN_F3R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F4R2 register  *******************/\r\n#define CAN_F4R2_FB0_Pos  (0U)\r\n#define CAN_F4R2_FB0_Msk  (0x1U << CAN_F4R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F4R2_FB0      CAN_F4R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F4R2_FB1_Pos  (1U)\r\n#define CAN_F4R2_FB1_Msk  (0x1U << CAN_F4R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F4R2_FB1      CAN_F4R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F4R2_FB2_Pos  (2U)\r\n#define CAN_F4R2_FB2_Msk  (0x1U << CAN_F4R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F4R2_FB2      CAN_F4R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F4R2_FB3_Pos  (3U)\r\n#define CAN_F4R2_FB3_Msk  (0x1U << CAN_F4R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F4R2_FB3      CAN_F4R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F4R2_FB4_Pos  (4U)\r\n#define CAN_F4R2_FB4_Msk  (0x1U << CAN_F4R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F4R2_FB4      CAN_F4R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F4R2_FB5_Pos  (5U)\r\n#define CAN_F4R2_FB5_Msk  (0x1U << CAN_F4R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F4R2_FB5      CAN_F4R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F4R2_FB6_Pos  (6U)\r\n#define CAN_F4R2_FB6_Msk  (0x1U << CAN_F4R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F4R2_FB6      CAN_F4R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F4R2_FB7_Pos  (7U)\r\n#define CAN_F4R2_FB7_Msk  (0x1U << CAN_F4R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F4R2_FB7      CAN_F4R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F4R2_FB8_Pos  (8U)\r\n#define CAN_F4R2_FB8_Msk  (0x1U << CAN_F4R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F4R2_FB8      CAN_F4R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F4R2_FB9_Pos  (9U)\r\n#define CAN_F4R2_FB9_Msk  (0x1U << CAN_F4R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F4R2_FB9      CAN_F4R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F4R2_FB10_Pos (10U)\r\n#define CAN_F4R2_FB10_Msk (0x1U << CAN_F4R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F4R2_FB10     CAN_F4R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F4R2_FB11_Pos (11U)\r\n#define CAN_F4R2_FB11_Msk (0x1U << CAN_F4R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F4R2_FB11     CAN_F4R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F4R2_FB12_Pos (12U)\r\n#define CAN_F4R2_FB12_Msk (0x1U << CAN_F4R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F4R2_FB12     CAN_F4R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F4R2_FB13_Pos (13U)\r\n#define CAN_F4R2_FB13_Msk (0x1U << CAN_F4R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F4R2_FB13     CAN_F4R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F4R2_FB14_Pos (14U)\r\n#define CAN_F4R2_FB14_Msk (0x1U << CAN_F4R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F4R2_FB14     CAN_F4R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F4R2_FB15_Pos (15U)\r\n#define CAN_F4R2_FB15_Msk (0x1U << CAN_F4R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F4R2_FB15     CAN_F4R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F4R2_FB16_Pos (16U)\r\n#define CAN_F4R2_FB16_Msk (0x1U << CAN_F4R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F4R2_FB16     CAN_F4R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F4R2_FB17_Pos (17U)\r\n#define CAN_F4R2_FB17_Msk (0x1U << CAN_F4R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F4R2_FB17     CAN_F4R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F4R2_FB18_Pos (18U)\r\n#define CAN_F4R2_FB18_Msk (0x1U << CAN_F4R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F4R2_FB18     CAN_F4R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F4R2_FB19_Pos (19U)\r\n#define CAN_F4R2_FB19_Msk (0x1U << CAN_F4R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F4R2_FB19     CAN_F4R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F4R2_FB20_Pos (20U)\r\n#define CAN_F4R2_FB20_Msk (0x1U << CAN_F4R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F4R2_FB20     CAN_F4R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F4R2_FB21_Pos (21U)\r\n#define CAN_F4R2_FB21_Msk (0x1U << CAN_F4R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F4R2_FB21     CAN_F4R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F4R2_FB22_Pos (22U)\r\n#define CAN_F4R2_FB22_Msk (0x1U << CAN_F4R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F4R2_FB22     CAN_F4R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F4R2_FB23_Pos (23U)\r\n#define CAN_F4R2_FB23_Msk (0x1U << CAN_F4R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F4R2_FB23     CAN_F4R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F4R2_FB24_Pos (24U)\r\n#define CAN_F4R2_FB24_Msk (0x1U << CAN_F4R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F4R2_FB24     CAN_F4R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F4R2_FB25_Pos (25U)\r\n#define CAN_F4R2_FB25_Msk (0x1U << CAN_F4R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F4R2_FB25     CAN_F4R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F4R2_FB26_Pos (26U)\r\n#define CAN_F4R2_FB26_Msk (0x1U << CAN_F4R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F4R2_FB26     CAN_F4R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F4R2_FB27_Pos (27U)\r\n#define CAN_F4R2_FB27_Msk (0x1U << CAN_F4R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F4R2_FB27     CAN_F4R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F4R2_FB28_Pos (28U)\r\n#define CAN_F4R2_FB28_Msk (0x1U << CAN_F4R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F4R2_FB28     CAN_F4R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F4R2_FB29_Pos (29U)\r\n#define CAN_F4R2_FB29_Msk (0x1U << CAN_F4R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F4R2_FB29     CAN_F4R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F4R2_FB30_Pos (30U)\r\n#define CAN_F4R2_FB30_Msk (0x1U << CAN_F4R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F4R2_FB30     CAN_F4R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F4R2_FB31_Pos (31U)\r\n#define CAN_F4R2_FB31_Msk (0x1U << CAN_F4R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F4R2_FB31     CAN_F4R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F5R2 register  *******************/\r\n#define CAN_F5R2_FB0_Pos  (0U)\r\n#define CAN_F5R2_FB0_Msk  (0x1U << CAN_F5R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F5R2_FB0      CAN_F5R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F5R2_FB1_Pos  (1U)\r\n#define CAN_F5R2_FB1_Msk  (0x1U << CAN_F5R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F5R2_FB1      CAN_F5R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F5R2_FB2_Pos  (2U)\r\n#define CAN_F5R2_FB2_Msk  (0x1U << CAN_F5R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F5R2_FB2      CAN_F5R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F5R2_FB3_Pos  (3U)\r\n#define CAN_F5R2_FB3_Msk  (0x1U << CAN_F5R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F5R2_FB3      CAN_F5R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F5R2_FB4_Pos  (4U)\r\n#define CAN_F5R2_FB4_Msk  (0x1U << CAN_F5R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F5R2_FB4      CAN_F5R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F5R2_FB5_Pos  (5U)\r\n#define CAN_F5R2_FB5_Msk  (0x1U << CAN_F5R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F5R2_FB5      CAN_F5R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F5R2_FB6_Pos  (6U)\r\n#define CAN_F5R2_FB6_Msk  (0x1U << CAN_F5R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F5R2_FB6      CAN_F5R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F5R2_FB7_Pos  (7U)\r\n#define CAN_F5R2_FB7_Msk  (0x1U << CAN_F5R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F5R2_FB7      CAN_F5R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F5R2_FB8_Pos  (8U)\r\n#define CAN_F5R2_FB8_Msk  (0x1U << CAN_F5R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F5R2_FB8      CAN_F5R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F5R2_FB9_Pos  (9U)\r\n#define CAN_F5R2_FB9_Msk  (0x1U << CAN_F5R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F5R2_FB9      CAN_F5R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F5R2_FB10_Pos (10U)\r\n#define CAN_F5R2_FB10_Msk (0x1U << CAN_F5R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F5R2_FB10     CAN_F5R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F5R2_FB11_Pos (11U)\r\n#define CAN_F5R2_FB11_Msk (0x1U << CAN_F5R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F5R2_FB11     CAN_F5R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F5R2_FB12_Pos (12U)\r\n#define CAN_F5R2_FB12_Msk (0x1U << CAN_F5R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F5R2_FB12     CAN_F5R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F5R2_FB13_Pos (13U)\r\n#define CAN_F5R2_FB13_Msk (0x1U << CAN_F5R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F5R2_FB13     CAN_F5R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F5R2_FB14_Pos (14U)\r\n#define CAN_F5R2_FB14_Msk (0x1U << CAN_F5R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F5R2_FB14     CAN_F5R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F5R2_FB15_Pos (15U)\r\n#define CAN_F5R2_FB15_Msk (0x1U << CAN_F5R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F5R2_FB15     CAN_F5R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F5R2_FB16_Pos (16U)\r\n#define CAN_F5R2_FB16_Msk (0x1U << CAN_F5R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F5R2_FB16     CAN_F5R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F5R2_FB17_Pos (17U)\r\n#define CAN_F5R2_FB17_Msk (0x1U << CAN_F5R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F5R2_FB17     CAN_F5R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F5R2_FB18_Pos (18U)\r\n#define CAN_F5R2_FB18_Msk (0x1U << CAN_F5R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F5R2_FB18     CAN_F5R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F5R2_FB19_Pos (19U)\r\n#define CAN_F5R2_FB19_Msk (0x1U << CAN_F5R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F5R2_FB19     CAN_F5R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F5R2_FB20_Pos (20U)\r\n#define CAN_F5R2_FB20_Msk (0x1U << CAN_F5R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F5R2_FB20     CAN_F5R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F5R2_FB21_Pos (21U)\r\n#define CAN_F5R2_FB21_Msk (0x1U << CAN_F5R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F5R2_FB21     CAN_F5R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F5R2_FB22_Pos (22U)\r\n#define CAN_F5R2_FB22_Msk (0x1U << CAN_F5R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F5R2_FB22     CAN_F5R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F5R2_FB23_Pos (23U)\r\n#define CAN_F5R2_FB23_Msk (0x1U << CAN_F5R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F5R2_FB23     CAN_F5R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F5R2_FB24_Pos (24U)\r\n#define CAN_F5R2_FB24_Msk (0x1U << CAN_F5R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F5R2_FB24     CAN_F5R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F5R2_FB25_Pos (25U)\r\n#define CAN_F5R2_FB25_Msk (0x1U << CAN_F5R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F5R2_FB25     CAN_F5R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F5R2_FB26_Pos (26U)\r\n#define CAN_F5R2_FB26_Msk (0x1U << CAN_F5R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F5R2_FB26     CAN_F5R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F5R2_FB27_Pos (27U)\r\n#define CAN_F5R2_FB27_Msk (0x1U << CAN_F5R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F5R2_FB27     CAN_F5R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F5R2_FB28_Pos (28U)\r\n#define CAN_F5R2_FB28_Msk (0x1U << CAN_F5R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F5R2_FB28     CAN_F5R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F5R2_FB29_Pos (29U)\r\n#define CAN_F5R2_FB29_Msk (0x1U << CAN_F5R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F5R2_FB29     CAN_F5R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F5R2_FB30_Pos (30U)\r\n#define CAN_F5R2_FB30_Msk (0x1U << CAN_F5R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F5R2_FB30     CAN_F5R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F5R2_FB31_Pos (31U)\r\n#define CAN_F5R2_FB31_Msk (0x1U << CAN_F5R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F5R2_FB31     CAN_F5R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F6R2 register  *******************/\r\n#define CAN_F6R2_FB0_Pos  (0U)\r\n#define CAN_F6R2_FB0_Msk  (0x1U << CAN_F6R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F6R2_FB0      CAN_F6R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F6R2_FB1_Pos  (1U)\r\n#define CAN_F6R2_FB1_Msk  (0x1U << CAN_F6R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F6R2_FB1      CAN_F6R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F6R2_FB2_Pos  (2U)\r\n#define CAN_F6R2_FB2_Msk  (0x1U << CAN_F6R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F6R2_FB2      CAN_F6R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F6R2_FB3_Pos  (3U)\r\n#define CAN_F6R2_FB3_Msk  (0x1U << CAN_F6R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F6R2_FB3      CAN_F6R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F6R2_FB4_Pos  (4U)\r\n#define CAN_F6R2_FB4_Msk  (0x1U << CAN_F6R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F6R2_FB4      CAN_F6R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F6R2_FB5_Pos  (5U)\r\n#define CAN_F6R2_FB5_Msk  (0x1U << CAN_F6R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F6R2_FB5      CAN_F6R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F6R2_FB6_Pos  (6U)\r\n#define CAN_F6R2_FB6_Msk  (0x1U << CAN_F6R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F6R2_FB6      CAN_F6R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F6R2_FB7_Pos  (7U)\r\n#define CAN_F6R2_FB7_Msk  (0x1U << CAN_F6R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F6R2_FB7      CAN_F6R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F6R2_FB8_Pos  (8U)\r\n#define CAN_F6R2_FB8_Msk  (0x1U << CAN_F6R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F6R2_FB8      CAN_F6R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F6R2_FB9_Pos  (9U)\r\n#define CAN_F6R2_FB9_Msk  (0x1U << CAN_F6R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F6R2_FB9      CAN_F6R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F6R2_FB10_Pos (10U)\r\n#define CAN_F6R2_FB10_Msk (0x1U << CAN_F6R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F6R2_FB10     CAN_F6R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F6R2_FB11_Pos (11U)\r\n#define CAN_F6R2_FB11_Msk (0x1U << CAN_F6R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F6R2_FB11     CAN_F6R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F6R2_FB12_Pos (12U)\r\n#define CAN_F6R2_FB12_Msk (0x1U << CAN_F6R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F6R2_FB12     CAN_F6R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F6R2_FB13_Pos (13U)\r\n#define CAN_F6R2_FB13_Msk (0x1U << CAN_F6R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F6R2_FB13     CAN_F6R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F6R2_FB14_Pos (14U)\r\n#define CAN_F6R2_FB14_Msk (0x1U << CAN_F6R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F6R2_FB14     CAN_F6R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F6R2_FB15_Pos (15U)\r\n#define CAN_F6R2_FB15_Msk (0x1U << CAN_F6R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F6R2_FB15     CAN_F6R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F6R2_FB16_Pos (16U)\r\n#define CAN_F6R2_FB16_Msk (0x1U << CAN_F6R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F6R2_FB16     CAN_F6R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F6R2_FB17_Pos (17U)\r\n#define CAN_F6R2_FB17_Msk (0x1U << CAN_F6R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F6R2_FB17     CAN_F6R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F6R2_FB18_Pos (18U)\r\n#define CAN_F6R2_FB18_Msk (0x1U << CAN_F6R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F6R2_FB18     CAN_F6R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F6R2_FB19_Pos (19U)\r\n#define CAN_F6R2_FB19_Msk (0x1U << CAN_F6R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F6R2_FB19     CAN_F6R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F6R2_FB20_Pos (20U)\r\n#define CAN_F6R2_FB20_Msk (0x1U << CAN_F6R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F6R2_FB20     CAN_F6R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F6R2_FB21_Pos (21U)\r\n#define CAN_F6R2_FB21_Msk (0x1U << CAN_F6R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F6R2_FB21     CAN_F6R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F6R2_FB22_Pos (22U)\r\n#define CAN_F6R2_FB22_Msk (0x1U << CAN_F6R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F6R2_FB22     CAN_F6R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F6R2_FB23_Pos (23U)\r\n#define CAN_F6R2_FB23_Msk (0x1U << CAN_F6R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F6R2_FB23     CAN_F6R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F6R2_FB24_Pos (24U)\r\n#define CAN_F6R2_FB24_Msk (0x1U << CAN_F6R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F6R2_FB24     CAN_F6R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F6R2_FB25_Pos (25U)\r\n#define CAN_F6R2_FB25_Msk (0x1U << CAN_F6R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F6R2_FB25     CAN_F6R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F6R2_FB26_Pos (26U)\r\n#define CAN_F6R2_FB26_Msk (0x1U << CAN_F6R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F6R2_FB26     CAN_F6R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F6R2_FB27_Pos (27U)\r\n#define CAN_F6R2_FB27_Msk (0x1U << CAN_F6R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F6R2_FB27     CAN_F6R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F6R2_FB28_Pos (28U)\r\n#define CAN_F6R2_FB28_Msk (0x1U << CAN_F6R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F6R2_FB28     CAN_F6R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F6R2_FB29_Pos (29U)\r\n#define CAN_F6R2_FB29_Msk (0x1U << CAN_F6R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F6R2_FB29     CAN_F6R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F6R2_FB30_Pos (30U)\r\n#define CAN_F6R2_FB30_Msk (0x1U << CAN_F6R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F6R2_FB30     CAN_F6R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F6R2_FB31_Pos (31U)\r\n#define CAN_F6R2_FB31_Msk (0x1U << CAN_F6R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F6R2_FB31     CAN_F6R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F7R2 register  *******************/\r\n#define CAN_F7R2_FB0_Pos  (0U)\r\n#define CAN_F7R2_FB0_Msk  (0x1U << CAN_F7R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F7R2_FB0      CAN_F7R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F7R2_FB1_Pos  (1U)\r\n#define CAN_F7R2_FB1_Msk  (0x1U << CAN_F7R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F7R2_FB1      CAN_F7R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F7R2_FB2_Pos  (2U)\r\n#define CAN_F7R2_FB2_Msk  (0x1U << CAN_F7R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F7R2_FB2      CAN_F7R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F7R2_FB3_Pos  (3U)\r\n#define CAN_F7R2_FB3_Msk  (0x1U << CAN_F7R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F7R2_FB3      CAN_F7R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F7R2_FB4_Pos  (4U)\r\n#define CAN_F7R2_FB4_Msk  (0x1U << CAN_F7R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F7R2_FB4      CAN_F7R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F7R2_FB5_Pos  (5U)\r\n#define CAN_F7R2_FB5_Msk  (0x1U << CAN_F7R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F7R2_FB5      CAN_F7R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F7R2_FB6_Pos  (6U)\r\n#define CAN_F7R2_FB6_Msk  (0x1U << CAN_F7R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F7R2_FB6      CAN_F7R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F7R2_FB7_Pos  (7U)\r\n#define CAN_F7R2_FB7_Msk  (0x1U << CAN_F7R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F7R2_FB7      CAN_F7R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F7R2_FB8_Pos  (8U)\r\n#define CAN_F7R2_FB8_Msk  (0x1U << CAN_F7R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F7R2_FB8      CAN_F7R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F7R2_FB9_Pos  (9U)\r\n#define CAN_F7R2_FB9_Msk  (0x1U << CAN_F7R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F7R2_FB9      CAN_F7R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F7R2_FB10_Pos (10U)\r\n#define CAN_F7R2_FB10_Msk (0x1U << CAN_F7R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F7R2_FB10     CAN_F7R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F7R2_FB11_Pos (11U)\r\n#define CAN_F7R2_FB11_Msk (0x1U << CAN_F7R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F7R2_FB11     CAN_F7R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F7R2_FB12_Pos (12U)\r\n#define CAN_F7R2_FB12_Msk (0x1U << CAN_F7R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F7R2_FB12     CAN_F7R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F7R2_FB13_Pos (13U)\r\n#define CAN_F7R2_FB13_Msk (0x1U << CAN_F7R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F7R2_FB13     CAN_F7R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F7R2_FB14_Pos (14U)\r\n#define CAN_F7R2_FB14_Msk (0x1U << CAN_F7R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F7R2_FB14     CAN_F7R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F7R2_FB15_Pos (15U)\r\n#define CAN_F7R2_FB15_Msk (0x1U << CAN_F7R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F7R2_FB15     CAN_F7R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F7R2_FB16_Pos (16U)\r\n#define CAN_F7R2_FB16_Msk (0x1U << CAN_F7R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F7R2_FB16     CAN_F7R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F7R2_FB17_Pos (17U)\r\n#define CAN_F7R2_FB17_Msk (0x1U << CAN_F7R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F7R2_FB17     CAN_F7R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F7R2_FB18_Pos (18U)\r\n#define CAN_F7R2_FB18_Msk (0x1U << CAN_F7R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F7R2_FB18     CAN_F7R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F7R2_FB19_Pos (19U)\r\n#define CAN_F7R2_FB19_Msk (0x1U << CAN_F7R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F7R2_FB19     CAN_F7R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F7R2_FB20_Pos (20U)\r\n#define CAN_F7R2_FB20_Msk (0x1U << CAN_F7R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F7R2_FB20     CAN_F7R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F7R2_FB21_Pos (21U)\r\n#define CAN_F7R2_FB21_Msk (0x1U << CAN_F7R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F7R2_FB21     CAN_F7R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F7R2_FB22_Pos (22U)\r\n#define CAN_F7R2_FB22_Msk (0x1U << CAN_F7R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F7R2_FB22     CAN_F7R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F7R2_FB23_Pos (23U)\r\n#define CAN_F7R2_FB23_Msk (0x1U << CAN_F7R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F7R2_FB23     CAN_F7R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F7R2_FB24_Pos (24U)\r\n#define CAN_F7R2_FB24_Msk (0x1U << CAN_F7R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F7R2_FB24     CAN_F7R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F7R2_FB25_Pos (25U)\r\n#define CAN_F7R2_FB25_Msk (0x1U << CAN_F7R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F7R2_FB25     CAN_F7R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F7R2_FB26_Pos (26U)\r\n#define CAN_F7R2_FB26_Msk (0x1U << CAN_F7R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F7R2_FB26     CAN_F7R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F7R2_FB27_Pos (27U)\r\n#define CAN_F7R2_FB27_Msk (0x1U << CAN_F7R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F7R2_FB27     CAN_F7R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F7R2_FB28_Pos (28U)\r\n#define CAN_F7R2_FB28_Msk (0x1U << CAN_F7R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F7R2_FB28     CAN_F7R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F7R2_FB29_Pos (29U)\r\n#define CAN_F7R2_FB29_Msk (0x1U << CAN_F7R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F7R2_FB29     CAN_F7R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F7R2_FB30_Pos (30U)\r\n#define CAN_F7R2_FB30_Msk (0x1U << CAN_F7R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F7R2_FB30     CAN_F7R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F7R2_FB31_Pos (31U)\r\n#define CAN_F7R2_FB31_Msk (0x1U << CAN_F7R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F7R2_FB31     CAN_F7R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F8R2 register  *******************/\r\n#define CAN_F8R2_FB0_Pos  (0U)\r\n#define CAN_F8R2_FB0_Msk  (0x1U << CAN_F8R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F8R2_FB0      CAN_F8R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F8R2_FB1_Pos  (1U)\r\n#define CAN_F8R2_FB1_Msk  (0x1U << CAN_F8R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F8R2_FB1      CAN_F8R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F8R2_FB2_Pos  (2U)\r\n#define CAN_F8R2_FB2_Msk  (0x1U << CAN_F8R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F8R2_FB2      CAN_F8R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F8R2_FB3_Pos  (3U)\r\n#define CAN_F8R2_FB3_Msk  (0x1U << CAN_F8R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F8R2_FB3      CAN_F8R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F8R2_FB4_Pos  (4U)\r\n#define CAN_F8R2_FB4_Msk  (0x1U << CAN_F8R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F8R2_FB4      CAN_F8R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F8R2_FB5_Pos  (5U)\r\n#define CAN_F8R2_FB5_Msk  (0x1U << CAN_F8R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F8R2_FB5      CAN_F8R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F8R2_FB6_Pos  (6U)\r\n#define CAN_F8R2_FB6_Msk  (0x1U << CAN_F8R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F8R2_FB6      CAN_F8R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F8R2_FB7_Pos  (7U)\r\n#define CAN_F8R2_FB7_Msk  (0x1U << CAN_F8R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F8R2_FB7      CAN_F8R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F8R2_FB8_Pos  (8U)\r\n#define CAN_F8R2_FB8_Msk  (0x1U << CAN_F8R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F8R2_FB8      CAN_F8R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F8R2_FB9_Pos  (9U)\r\n#define CAN_F8R2_FB9_Msk  (0x1U << CAN_F8R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F8R2_FB9      CAN_F8R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F8R2_FB10_Pos (10U)\r\n#define CAN_F8R2_FB10_Msk (0x1U << CAN_F8R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F8R2_FB10     CAN_F8R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F8R2_FB11_Pos (11U)\r\n#define CAN_F8R2_FB11_Msk (0x1U << CAN_F8R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F8R2_FB11     CAN_F8R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F8R2_FB12_Pos (12U)\r\n#define CAN_F8R2_FB12_Msk (0x1U << CAN_F8R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F8R2_FB12     CAN_F8R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F8R2_FB13_Pos (13U)\r\n#define CAN_F8R2_FB13_Msk (0x1U << CAN_F8R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F8R2_FB13     CAN_F8R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F8R2_FB14_Pos (14U)\r\n#define CAN_F8R2_FB14_Msk (0x1U << CAN_F8R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F8R2_FB14     CAN_F8R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F8R2_FB15_Pos (15U)\r\n#define CAN_F8R2_FB15_Msk (0x1U << CAN_F8R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F8R2_FB15     CAN_F8R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F8R2_FB16_Pos (16U)\r\n#define CAN_F8R2_FB16_Msk (0x1U << CAN_F8R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F8R2_FB16     CAN_F8R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F8R2_FB17_Pos (17U)\r\n#define CAN_F8R2_FB17_Msk (0x1U << CAN_F8R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F8R2_FB17     CAN_F8R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F8R2_FB18_Pos (18U)\r\n#define CAN_F8R2_FB18_Msk (0x1U << CAN_F8R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F8R2_FB18     CAN_F8R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F8R2_FB19_Pos (19U)\r\n#define CAN_F8R2_FB19_Msk (0x1U << CAN_F8R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F8R2_FB19     CAN_F8R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F8R2_FB20_Pos (20U)\r\n#define CAN_F8R2_FB20_Msk (0x1U << CAN_F8R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F8R2_FB20     CAN_F8R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F8R2_FB21_Pos (21U)\r\n#define CAN_F8R2_FB21_Msk (0x1U << CAN_F8R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F8R2_FB21     CAN_F8R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F8R2_FB22_Pos (22U)\r\n#define CAN_F8R2_FB22_Msk (0x1U << CAN_F8R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F8R2_FB22     CAN_F8R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F8R2_FB23_Pos (23U)\r\n#define CAN_F8R2_FB23_Msk (0x1U << CAN_F8R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F8R2_FB23     CAN_F8R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F8R2_FB24_Pos (24U)\r\n#define CAN_F8R2_FB24_Msk (0x1U << CAN_F8R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F8R2_FB24     CAN_F8R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F8R2_FB25_Pos (25U)\r\n#define CAN_F8R2_FB25_Msk (0x1U << CAN_F8R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F8R2_FB25     CAN_F8R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F8R2_FB26_Pos (26U)\r\n#define CAN_F8R2_FB26_Msk (0x1U << CAN_F8R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F8R2_FB26     CAN_F8R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F8R2_FB27_Pos (27U)\r\n#define CAN_F8R2_FB27_Msk (0x1U << CAN_F8R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F8R2_FB27     CAN_F8R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F8R2_FB28_Pos (28U)\r\n#define CAN_F8R2_FB28_Msk (0x1U << CAN_F8R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F8R2_FB28     CAN_F8R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F8R2_FB29_Pos (29U)\r\n#define CAN_F8R2_FB29_Msk (0x1U << CAN_F8R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F8R2_FB29     CAN_F8R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F8R2_FB30_Pos (30U)\r\n#define CAN_F8R2_FB30_Msk (0x1U << CAN_F8R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F8R2_FB30     CAN_F8R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F8R2_FB31_Pos (31U)\r\n#define CAN_F8R2_FB31_Msk (0x1U << CAN_F8R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F8R2_FB31     CAN_F8R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F9R2 register  *******************/\r\n#define CAN_F9R2_FB0_Pos  (0U)\r\n#define CAN_F9R2_FB0_Msk  (0x1U << CAN_F9R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F9R2_FB0      CAN_F9R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F9R2_FB1_Pos  (1U)\r\n#define CAN_F9R2_FB1_Msk  (0x1U << CAN_F9R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F9R2_FB1      CAN_F9R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F9R2_FB2_Pos  (2U)\r\n#define CAN_F9R2_FB2_Msk  (0x1U << CAN_F9R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F9R2_FB2      CAN_F9R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F9R2_FB3_Pos  (3U)\r\n#define CAN_F9R2_FB3_Msk  (0x1U << CAN_F9R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F9R2_FB3      CAN_F9R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F9R2_FB4_Pos  (4U)\r\n#define CAN_F9R2_FB4_Msk  (0x1U << CAN_F9R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F9R2_FB4      CAN_F9R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F9R2_FB5_Pos  (5U)\r\n#define CAN_F9R2_FB5_Msk  (0x1U << CAN_F9R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F9R2_FB5      CAN_F9R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F9R2_FB6_Pos  (6U)\r\n#define CAN_F9R2_FB6_Msk  (0x1U << CAN_F9R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F9R2_FB6      CAN_F9R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F9R2_FB7_Pos  (7U)\r\n#define CAN_F9R2_FB7_Msk  (0x1U << CAN_F9R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F9R2_FB7      CAN_F9R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F9R2_FB8_Pos  (8U)\r\n#define CAN_F9R2_FB8_Msk  (0x1U << CAN_F9R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F9R2_FB8      CAN_F9R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F9R2_FB9_Pos  (9U)\r\n#define CAN_F9R2_FB9_Msk  (0x1U << CAN_F9R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F9R2_FB9      CAN_F9R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F9R2_FB10_Pos (10U)\r\n#define CAN_F9R2_FB10_Msk (0x1U << CAN_F9R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F9R2_FB10     CAN_F9R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F9R2_FB11_Pos (11U)\r\n#define CAN_F9R2_FB11_Msk (0x1U << CAN_F9R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F9R2_FB11     CAN_F9R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F9R2_FB12_Pos (12U)\r\n#define CAN_F9R2_FB12_Msk (0x1U << CAN_F9R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F9R2_FB12     CAN_F9R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F9R2_FB13_Pos (13U)\r\n#define CAN_F9R2_FB13_Msk (0x1U << CAN_F9R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F9R2_FB13     CAN_F9R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F9R2_FB14_Pos (14U)\r\n#define CAN_F9R2_FB14_Msk (0x1U << CAN_F9R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F9R2_FB14     CAN_F9R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F9R2_FB15_Pos (15U)\r\n#define CAN_F9R2_FB15_Msk (0x1U << CAN_F9R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F9R2_FB15     CAN_F9R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F9R2_FB16_Pos (16U)\r\n#define CAN_F9R2_FB16_Msk (0x1U << CAN_F9R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F9R2_FB16     CAN_F9R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F9R2_FB17_Pos (17U)\r\n#define CAN_F9R2_FB17_Msk (0x1U << CAN_F9R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F9R2_FB17     CAN_F9R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F9R2_FB18_Pos (18U)\r\n#define CAN_F9R2_FB18_Msk (0x1U << CAN_F9R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F9R2_FB18     CAN_F9R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F9R2_FB19_Pos (19U)\r\n#define CAN_F9R2_FB19_Msk (0x1U << CAN_F9R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F9R2_FB19     CAN_F9R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F9R2_FB20_Pos (20U)\r\n#define CAN_F9R2_FB20_Msk (0x1U << CAN_F9R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F9R2_FB20     CAN_F9R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F9R2_FB21_Pos (21U)\r\n#define CAN_F9R2_FB21_Msk (0x1U << CAN_F9R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F9R2_FB21     CAN_F9R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F9R2_FB22_Pos (22U)\r\n#define CAN_F9R2_FB22_Msk (0x1U << CAN_F9R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F9R2_FB22     CAN_F9R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F9R2_FB23_Pos (23U)\r\n#define CAN_F9R2_FB23_Msk (0x1U << CAN_F9R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F9R2_FB23     CAN_F9R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F9R2_FB24_Pos (24U)\r\n#define CAN_F9R2_FB24_Msk (0x1U << CAN_F9R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F9R2_FB24     CAN_F9R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F9R2_FB25_Pos (25U)\r\n#define CAN_F9R2_FB25_Msk (0x1U << CAN_F9R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F9R2_FB25     CAN_F9R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F9R2_FB26_Pos (26U)\r\n#define CAN_F9R2_FB26_Msk (0x1U << CAN_F9R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F9R2_FB26     CAN_F9R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F9R2_FB27_Pos (27U)\r\n#define CAN_F9R2_FB27_Msk (0x1U << CAN_F9R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F9R2_FB27     CAN_F9R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F9R2_FB28_Pos (28U)\r\n#define CAN_F9R2_FB28_Msk (0x1U << CAN_F9R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F9R2_FB28     CAN_F9R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F9R2_FB29_Pos (29U)\r\n#define CAN_F9R2_FB29_Msk (0x1U << CAN_F9R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F9R2_FB29     CAN_F9R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F9R2_FB30_Pos (30U)\r\n#define CAN_F9R2_FB30_Msk (0x1U << CAN_F9R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F9R2_FB30     CAN_F9R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F9R2_FB31_Pos (31U)\r\n#define CAN_F9R2_FB31_Msk (0x1U << CAN_F9R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F9R2_FB31     CAN_F9R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F10R2 register  ******************/\r\n#define CAN_F10R2_FB0_Pos  (0U)\r\n#define CAN_F10R2_FB0_Msk  (0x1U << CAN_F10R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F10R2_FB0      CAN_F10R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F10R2_FB1_Pos  (1U)\r\n#define CAN_F10R2_FB1_Msk  (0x1U << CAN_F10R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F10R2_FB1      CAN_F10R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F10R2_FB2_Pos  (2U)\r\n#define CAN_F10R2_FB2_Msk  (0x1U << CAN_F10R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F10R2_FB2      CAN_F10R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F10R2_FB3_Pos  (3U)\r\n#define CAN_F10R2_FB3_Msk  (0x1U << CAN_F10R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F10R2_FB3      CAN_F10R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F10R2_FB4_Pos  (4U)\r\n#define CAN_F10R2_FB4_Msk  (0x1U << CAN_F10R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F10R2_FB4      CAN_F10R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F10R2_FB5_Pos  (5U)\r\n#define CAN_F10R2_FB5_Msk  (0x1U << CAN_F10R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F10R2_FB5      CAN_F10R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F10R2_FB6_Pos  (6U)\r\n#define CAN_F10R2_FB6_Msk  (0x1U << CAN_F10R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F10R2_FB6      CAN_F10R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F10R2_FB7_Pos  (7U)\r\n#define CAN_F10R2_FB7_Msk  (0x1U << CAN_F10R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F10R2_FB7      CAN_F10R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F10R2_FB8_Pos  (8U)\r\n#define CAN_F10R2_FB8_Msk  (0x1U << CAN_F10R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F10R2_FB8      CAN_F10R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F10R2_FB9_Pos  (9U)\r\n#define CAN_F10R2_FB9_Msk  (0x1U << CAN_F10R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F10R2_FB9      CAN_F10R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F10R2_FB10_Pos (10U)\r\n#define CAN_F10R2_FB10_Msk (0x1U << CAN_F10R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F10R2_FB10     CAN_F10R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F10R2_FB11_Pos (11U)\r\n#define CAN_F10R2_FB11_Msk (0x1U << CAN_F10R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F10R2_FB11     CAN_F10R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F10R2_FB12_Pos (12U)\r\n#define CAN_F10R2_FB12_Msk (0x1U << CAN_F10R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F10R2_FB12     CAN_F10R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F10R2_FB13_Pos (13U)\r\n#define CAN_F10R2_FB13_Msk (0x1U << CAN_F10R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F10R2_FB13     CAN_F10R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F10R2_FB14_Pos (14U)\r\n#define CAN_F10R2_FB14_Msk (0x1U << CAN_F10R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F10R2_FB14     CAN_F10R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F10R2_FB15_Pos (15U)\r\n#define CAN_F10R2_FB15_Msk (0x1U << CAN_F10R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F10R2_FB15     CAN_F10R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F10R2_FB16_Pos (16U)\r\n#define CAN_F10R2_FB16_Msk (0x1U << CAN_F10R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F10R2_FB16     CAN_F10R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F10R2_FB17_Pos (17U)\r\n#define CAN_F10R2_FB17_Msk (0x1U << CAN_F10R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F10R2_FB17     CAN_F10R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F10R2_FB18_Pos (18U)\r\n#define CAN_F10R2_FB18_Msk (0x1U << CAN_F10R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F10R2_FB18     CAN_F10R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F10R2_FB19_Pos (19U)\r\n#define CAN_F10R2_FB19_Msk (0x1U << CAN_F10R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F10R2_FB19     CAN_F10R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F10R2_FB20_Pos (20U)\r\n#define CAN_F10R2_FB20_Msk (0x1U << CAN_F10R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F10R2_FB20     CAN_F10R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F10R2_FB21_Pos (21U)\r\n#define CAN_F10R2_FB21_Msk (0x1U << CAN_F10R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F10R2_FB21     CAN_F10R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F10R2_FB22_Pos (22U)\r\n#define CAN_F10R2_FB22_Msk (0x1U << CAN_F10R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F10R2_FB22     CAN_F10R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F10R2_FB23_Pos (23U)\r\n#define CAN_F10R2_FB23_Msk (0x1U << CAN_F10R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F10R2_FB23     CAN_F10R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F10R2_FB24_Pos (24U)\r\n#define CAN_F10R2_FB24_Msk (0x1U << CAN_F10R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F10R2_FB24     CAN_F10R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F10R2_FB25_Pos (25U)\r\n#define CAN_F10R2_FB25_Msk (0x1U << CAN_F10R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F10R2_FB25     CAN_F10R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F10R2_FB26_Pos (26U)\r\n#define CAN_F10R2_FB26_Msk (0x1U << CAN_F10R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F10R2_FB26     CAN_F10R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F10R2_FB27_Pos (27U)\r\n#define CAN_F10R2_FB27_Msk (0x1U << CAN_F10R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F10R2_FB27     CAN_F10R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F10R2_FB28_Pos (28U)\r\n#define CAN_F10R2_FB28_Msk (0x1U << CAN_F10R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F10R2_FB28     CAN_F10R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F10R2_FB29_Pos (29U)\r\n#define CAN_F10R2_FB29_Msk (0x1U << CAN_F10R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F10R2_FB29     CAN_F10R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F10R2_FB30_Pos (30U)\r\n#define CAN_F10R2_FB30_Msk (0x1U << CAN_F10R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F10R2_FB30     CAN_F10R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F10R2_FB31_Pos (31U)\r\n#define CAN_F10R2_FB31_Msk (0x1U << CAN_F10R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F10R2_FB31     CAN_F10R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F11R2 register  ******************/\r\n#define CAN_F11R2_FB0_Pos  (0U)\r\n#define CAN_F11R2_FB0_Msk  (0x1U << CAN_F11R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F11R2_FB0      CAN_F11R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F11R2_FB1_Pos  (1U)\r\n#define CAN_F11R2_FB1_Msk  (0x1U << CAN_F11R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F11R2_FB1      CAN_F11R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F11R2_FB2_Pos  (2U)\r\n#define CAN_F11R2_FB2_Msk  (0x1U << CAN_F11R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F11R2_FB2      CAN_F11R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F11R2_FB3_Pos  (3U)\r\n#define CAN_F11R2_FB3_Msk  (0x1U << CAN_F11R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F11R2_FB3      CAN_F11R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F11R2_FB4_Pos  (4U)\r\n#define CAN_F11R2_FB4_Msk  (0x1U << CAN_F11R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F11R2_FB4      CAN_F11R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F11R2_FB5_Pos  (5U)\r\n#define CAN_F11R2_FB5_Msk  (0x1U << CAN_F11R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F11R2_FB5      CAN_F11R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F11R2_FB6_Pos  (6U)\r\n#define CAN_F11R2_FB6_Msk  (0x1U << CAN_F11R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F11R2_FB6      CAN_F11R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F11R2_FB7_Pos  (7U)\r\n#define CAN_F11R2_FB7_Msk  (0x1U << CAN_F11R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F11R2_FB7      CAN_F11R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F11R2_FB8_Pos  (8U)\r\n#define CAN_F11R2_FB8_Msk  (0x1U << CAN_F11R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F11R2_FB8      CAN_F11R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F11R2_FB9_Pos  (9U)\r\n#define CAN_F11R2_FB9_Msk  (0x1U << CAN_F11R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F11R2_FB9      CAN_F11R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F11R2_FB10_Pos (10U)\r\n#define CAN_F11R2_FB10_Msk (0x1U << CAN_F11R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F11R2_FB10     CAN_F11R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F11R2_FB11_Pos (11U)\r\n#define CAN_F11R2_FB11_Msk (0x1U << CAN_F11R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F11R2_FB11     CAN_F11R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F11R2_FB12_Pos (12U)\r\n#define CAN_F11R2_FB12_Msk (0x1U << CAN_F11R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F11R2_FB12     CAN_F11R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F11R2_FB13_Pos (13U)\r\n#define CAN_F11R2_FB13_Msk (0x1U << CAN_F11R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F11R2_FB13     CAN_F11R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F11R2_FB14_Pos (14U)\r\n#define CAN_F11R2_FB14_Msk (0x1U << CAN_F11R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F11R2_FB14     CAN_F11R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F11R2_FB15_Pos (15U)\r\n#define CAN_F11R2_FB15_Msk (0x1U << CAN_F11R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F11R2_FB15     CAN_F11R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F11R2_FB16_Pos (16U)\r\n#define CAN_F11R2_FB16_Msk (0x1U << CAN_F11R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F11R2_FB16     CAN_F11R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F11R2_FB17_Pos (17U)\r\n#define CAN_F11R2_FB17_Msk (0x1U << CAN_F11R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F11R2_FB17     CAN_F11R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F11R2_FB18_Pos (18U)\r\n#define CAN_F11R2_FB18_Msk (0x1U << CAN_F11R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F11R2_FB18     CAN_F11R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F11R2_FB19_Pos (19U)\r\n#define CAN_F11R2_FB19_Msk (0x1U << CAN_F11R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F11R2_FB19     CAN_F11R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F11R2_FB20_Pos (20U)\r\n#define CAN_F11R2_FB20_Msk (0x1U << CAN_F11R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F11R2_FB20     CAN_F11R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F11R2_FB21_Pos (21U)\r\n#define CAN_F11R2_FB21_Msk (0x1U << CAN_F11R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F11R2_FB21     CAN_F11R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F11R2_FB22_Pos (22U)\r\n#define CAN_F11R2_FB22_Msk (0x1U << CAN_F11R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F11R2_FB22     CAN_F11R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F11R2_FB23_Pos (23U)\r\n#define CAN_F11R2_FB23_Msk (0x1U << CAN_F11R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F11R2_FB23     CAN_F11R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F11R2_FB24_Pos (24U)\r\n#define CAN_F11R2_FB24_Msk (0x1U << CAN_F11R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F11R2_FB24     CAN_F11R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F11R2_FB25_Pos (25U)\r\n#define CAN_F11R2_FB25_Msk (0x1U << CAN_F11R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F11R2_FB25     CAN_F11R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F11R2_FB26_Pos (26U)\r\n#define CAN_F11R2_FB26_Msk (0x1U << CAN_F11R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F11R2_FB26     CAN_F11R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F11R2_FB27_Pos (27U)\r\n#define CAN_F11R2_FB27_Msk (0x1U << CAN_F11R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F11R2_FB27     CAN_F11R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F11R2_FB28_Pos (28U)\r\n#define CAN_F11R2_FB28_Msk (0x1U << CAN_F11R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F11R2_FB28     CAN_F11R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F11R2_FB29_Pos (29U)\r\n#define CAN_F11R2_FB29_Msk (0x1U << CAN_F11R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F11R2_FB29     CAN_F11R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F11R2_FB30_Pos (30U)\r\n#define CAN_F11R2_FB30_Msk (0x1U << CAN_F11R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F11R2_FB30     CAN_F11R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F11R2_FB31_Pos (31U)\r\n#define CAN_F11R2_FB31_Msk (0x1U << CAN_F11R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F11R2_FB31     CAN_F11R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F12R2 register  ******************/\r\n#define CAN_F12R2_FB0_Pos  (0U)\r\n#define CAN_F12R2_FB0_Msk  (0x1U << CAN_F12R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F12R2_FB0      CAN_F12R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F12R2_FB1_Pos  (1U)\r\n#define CAN_F12R2_FB1_Msk  (0x1U << CAN_F12R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F12R2_FB1      CAN_F12R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F12R2_FB2_Pos  (2U)\r\n#define CAN_F12R2_FB2_Msk  (0x1U << CAN_F12R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F12R2_FB2      CAN_F12R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F12R2_FB3_Pos  (3U)\r\n#define CAN_F12R2_FB3_Msk  (0x1U << CAN_F12R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F12R2_FB3      CAN_F12R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F12R2_FB4_Pos  (4U)\r\n#define CAN_F12R2_FB4_Msk  (0x1U << CAN_F12R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F12R2_FB4      CAN_F12R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F12R2_FB5_Pos  (5U)\r\n#define CAN_F12R2_FB5_Msk  (0x1U << CAN_F12R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F12R2_FB5      CAN_F12R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F12R2_FB6_Pos  (6U)\r\n#define CAN_F12R2_FB6_Msk  (0x1U << CAN_F12R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F12R2_FB6      CAN_F12R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F12R2_FB7_Pos  (7U)\r\n#define CAN_F12R2_FB7_Msk  (0x1U << CAN_F12R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F12R2_FB7      CAN_F12R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F12R2_FB8_Pos  (8U)\r\n#define CAN_F12R2_FB8_Msk  (0x1U << CAN_F12R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F12R2_FB8      CAN_F12R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F12R2_FB9_Pos  (9U)\r\n#define CAN_F12R2_FB9_Msk  (0x1U << CAN_F12R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F12R2_FB9      CAN_F12R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F12R2_FB10_Pos (10U)\r\n#define CAN_F12R2_FB10_Msk (0x1U << CAN_F12R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F12R2_FB10     CAN_F12R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F12R2_FB11_Pos (11U)\r\n#define CAN_F12R2_FB11_Msk (0x1U << CAN_F12R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F12R2_FB11     CAN_F12R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F12R2_FB12_Pos (12U)\r\n#define CAN_F12R2_FB12_Msk (0x1U << CAN_F12R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F12R2_FB12     CAN_F12R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F12R2_FB13_Pos (13U)\r\n#define CAN_F12R2_FB13_Msk (0x1U << CAN_F12R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F12R2_FB13     CAN_F12R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F12R2_FB14_Pos (14U)\r\n#define CAN_F12R2_FB14_Msk (0x1U << CAN_F12R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F12R2_FB14     CAN_F12R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F12R2_FB15_Pos (15U)\r\n#define CAN_F12R2_FB15_Msk (0x1U << CAN_F12R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F12R2_FB15     CAN_F12R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F12R2_FB16_Pos (16U)\r\n#define CAN_F12R2_FB16_Msk (0x1U << CAN_F12R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F12R2_FB16     CAN_F12R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F12R2_FB17_Pos (17U)\r\n#define CAN_F12R2_FB17_Msk (0x1U << CAN_F12R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F12R2_FB17     CAN_F12R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F12R2_FB18_Pos (18U)\r\n#define CAN_F12R2_FB18_Msk (0x1U << CAN_F12R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F12R2_FB18     CAN_F12R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F12R2_FB19_Pos (19U)\r\n#define CAN_F12R2_FB19_Msk (0x1U << CAN_F12R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F12R2_FB19     CAN_F12R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F12R2_FB20_Pos (20U)\r\n#define CAN_F12R2_FB20_Msk (0x1U << CAN_F12R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F12R2_FB20     CAN_F12R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F12R2_FB21_Pos (21U)\r\n#define CAN_F12R2_FB21_Msk (0x1U << CAN_F12R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F12R2_FB21     CAN_F12R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F12R2_FB22_Pos (22U)\r\n#define CAN_F12R2_FB22_Msk (0x1U << CAN_F12R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F12R2_FB22     CAN_F12R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F12R2_FB23_Pos (23U)\r\n#define CAN_F12R2_FB23_Msk (0x1U << CAN_F12R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F12R2_FB23     CAN_F12R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F12R2_FB24_Pos (24U)\r\n#define CAN_F12R2_FB24_Msk (0x1U << CAN_F12R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F12R2_FB24     CAN_F12R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F12R2_FB25_Pos (25U)\r\n#define CAN_F12R2_FB25_Msk (0x1U << CAN_F12R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F12R2_FB25     CAN_F12R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F12R2_FB26_Pos (26U)\r\n#define CAN_F12R2_FB26_Msk (0x1U << CAN_F12R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F12R2_FB26     CAN_F12R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F12R2_FB27_Pos (27U)\r\n#define CAN_F12R2_FB27_Msk (0x1U << CAN_F12R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F12R2_FB27     CAN_F12R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F12R2_FB28_Pos (28U)\r\n#define CAN_F12R2_FB28_Msk (0x1U << CAN_F12R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F12R2_FB28     CAN_F12R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F12R2_FB29_Pos (29U)\r\n#define CAN_F12R2_FB29_Msk (0x1U << CAN_F12R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F12R2_FB29     CAN_F12R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F12R2_FB30_Pos (30U)\r\n#define CAN_F12R2_FB30_Msk (0x1U << CAN_F12R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F12R2_FB30     CAN_F12R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F12R2_FB31_Pos (31U)\r\n#define CAN_F12R2_FB31_Msk (0x1U << CAN_F12R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F12R2_FB31     CAN_F12R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F13R2 register  ******************/\r\n#define CAN_F13R2_FB0_Pos  (0U)\r\n#define CAN_F13R2_FB0_Msk  (0x1U << CAN_F13R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F13R2_FB0      CAN_F13R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F13R2_FB1_Pos  (1U)\r\n#define CAN_F13R2_FB1_Msk  (0x1U << CAN_F13R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F13R2_FB1      CAN_F13R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F13R2_FB2_Pos  (2U)\r\n#define CAN_F13R2_FB2_Msk  (0x1U << CAN_F13R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F13R2_FB2      CAN_F13R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F13R2_FB3_Pos  (3U)\r\n#define CAN_F13R2_FB3_Msk  (0x1U << CAN_F13R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F13R2_FB3      CAN_F13R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F13R2_FB4_Pos  (4U)\r\n#define CAN_F13R2_FB4_Msk  (0x1U << CAN_F13R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F13R2_FB4      CAN_F13R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F13R2_FB5_Pos  (5U)\r\n#define CAN_F13R2_FB5_Msk  (0x1U << CAN_F13R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F13R2_FB5      CAN_F13R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F13R2_FB6_Pos  (6U)\r\n#define CAN_F13R2_FB6_Msk  (0x1U << CAN_F13R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F13R2_FB6      CAN_F13R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F13R2_FB7_Pos  (7U)\r\n#define CAN_F13R2_FB7_Msk  (0x1U << CAN_F13R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F13R2_FB7      CAN_F13R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F13R2_FB8_Pos  (8U)\r\n#define CAN_F13R2_FB8_Msk  (0x1U << CAN_F13R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F13R2_FB8      CAN_F13R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F13R2_FB9_Pos  (9U)\r\n#define CAN_F13R2_FB9_Msk  (0x1U << CAN_F13R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F13R2_FB9      CAN_F13R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F13R2_FB10_Pos (10U)\r\n#define CAN_F13R2_FB10_Msk (0x1U << CAN_F13R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F13R2_FB10     CAN_F13R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F13R2_FB11_Pos (11U)\r\n#define CAN_F13R2_FB11_Msk (0x1U << CAN_F13R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F13R2_FB11     CAN_F13R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F13R2_FB12_Pos (12U)\r\n#define CAN_F13R2_FB12_Msk (0x1U << CAN_F13R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F13R2_FB12     CAN_F13R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F13R2_FB13_Pos (13U)\r\n#define CAN_F13R2_FB13_Msk (0x1U << CAN_F13R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F13R2_FB13     CAN_F13R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F13R2_FB14_Pos (14U)\r\n#define CAN_F13R2_FB14_Msk (0x1U << CAN_F13R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F13R2_FB14     CAN_F13R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F13R2_FB15_Pos (15U)\r\n#define CAN_F13R2_FB15_Msk (0x1U << CAN_F13R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F13R2_FB15     CAN_F13R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F13R2_FB16_Pos (16U)\r\n#define CAN_F13R2_FB16_Msk (0x1U << CAN_F13R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F13R2_FB16     CAN_F13R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F13R2_FB17_Pos (17U)\r\n#define CAN_F13R2_FB17_Msk (0x1U << CAN_F13R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F13R2_FB17     CAN_F13R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F13R2_FB18_Pos (18U)\r\n#define CAN_F13R2_FB18_Msk (0x1U << CAN_F13R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F13R2_FB18     CAN_F13R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F13R2_FB19_Pos (19U)\r\n#define CAN_F13R2_FB19_Msk (0x1U << CAN_F13R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F13R2_FB19     CAN_F13R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F13R2_FB20_Pos (20U)\r\n#define CAN_F13R2_FB20_Msk (0x1U << CAN_F13R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F13R2_FB20     CAN_F13R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F13R2_FB21_Pos (21U)\r\n#define CAN_F13R2_FB21_Msk (0x1U << CAN_F13R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F13R2_FB21     CAN_F13R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F13R2_FB22_Pos (22U)\r\n#define CAN_F13R2_FB22_Msk (0x1U << CAN_F13R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F13R2_FB22     CAN_F13R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F13R2_FB23_Pos (23U)\r\n#define CAN_F13R2_FB23_Msk (0x1U << CAN_F13R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F13R2_FB23     CAN_F13R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F13R2_FB24_Pos (24U)\r\n#define CAN_F13R2_FB24_Msk (0x1U << CAN_F13R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F13R2_FB24     CAN_F13R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F13R2_FB25_Pos (25U)\r\n#define CAN_F13R2_FB25_Msk (0x1U << CAN_F13R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F13R2_FB25     CAN_F13R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F13R2_FB26_Pos (26U)\r\n#define CAN_F13R2_FB26_Msk (0x1U << CAN_F13R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F13R2_FB26     CAN_F13R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F13R2_FB27_Pos (27U)\r\n#define CAN_F13R2_FB27_Msk (0x1U << CAN_F13R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F13R2_FB27     CAN_F13R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F13R2_FB28_Pos (28U)\r\n#define CAN_F13R2_FB28_Msk (0x1U << CAN_F13R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F13R2_FB28     CAN_F13R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F13R2_FB29_Pos (29U)\r\n#define CAN_F13R2_FB29_Msk (0x1U << CAN_F13R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F13R2_FB29     CAN_F13R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F13R2_FB30_Pos (30U)\r\n#define CAN_F13R2_FB30_Msk (0x1U << CAN_F13R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F13R2_FB30     CAN_F13R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F13R2_FB31_Pos (31U)\r\n#define CAN_F13R2_FB31_Msk (0x1U << CAN_F13R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F13R2_FB31     CAN_F13R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                        Serial Peripheral Interface                         */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for SPI_CR1 register  ********************/\r\n#define SPI_CR1_CPHA_Pos (0U)\r\n#define SPI_CR1_CPHA_Msk (0x1U << SPI_CR1_CPHA_Pos) /*!< 0x00000001 */\r\n#define SPI_CR1_CPHA     SPI_CR1_CPHA_Msk           /*!< Clock Phase */\r\n#define SPI_CR1_CPOL_Pos (1U)\r\n#define SPI_CR1_CPOL_Msk (0x1U << SPI_CR1_CPOL_Pos) /*!< 0x00000002 */\r\n#define SPI_CR1_CPOL     SPI_CR1_CPOL_Msk           /*!< Clock Polarity */\r\n#define SPI_CR1_MSTR_Pos (2U)\r\n#define SPI_CR1_MSTR_Msk (0x1U << SPI_CR1_MSTR_Pos) /*!< 0x00000004 */\r\n#define SPI_CR1_MSTR     SPI_CR1_MSTR_Msk           /*!< Master Selection */\r\n\r\n#define SPI_CR1_BR_Pos (3U)\r\n#define SPI_CR1_BR_Msk (0x7U << SPI_CR1_BR_Pos) /*!< 0x00000038 */\r\n#define SPI_CR1_BR     SPI_CR1_BR_Msk           /*!< BR[2:0] bits (Baud Rate Control) */\r\n#define SPI_CR1_BR_0   (0x1U << SPI_CR1_BR_Pos) /*!< 0x00000008 */\r\n#define SPI_CR1_BR_1   (0x2U << SPI_CR1_BR_Pos) /*!< 0x00000010 */\r\n#define SPI_CR1_BR_2   (0x4U << SPI_CR1_BR_Pos) /*!< 0x00000020 */\r\n\r\n#define SPI_CR1_SPE_Pos      (6U)\r\n#define SPI_CR1_SPE_Msk      (0x1U << SPI_CR1_SPE_Pos) /*!< 0x00000040 */\r\n#define SPI_CR1_SPE          SPI_CR1_SPE_Msk           /*!< SPI Enable */\r\n#define SPI_CR1_LSBFIRST_Pos (7U)\r\n#define SPI_CR1_LSBFIRST_Msk (0x1U << SPI_CR1_LSBFIRST_Pos) /*!< 0x00000080 */\r\n#define SPI_CR1_LSBFIRST     SPI_CR1_LSBFIRST_Msk           /*!< Frame Format */\r\n#define SPI_CR1_SSI_Pos      (8U)\r\n#define SPI_CR1_SSI_Msk      (0x1U << SPI_CR1_SSI_Pos) /*!< 0x00000100 */\r\n#define SPI_CR1_SSI          SPI_CR1_SSI_Msk           /*!< Internal slave select */\r\n#define SPI_CR1_SSM_Pos      (9U)\r\n#define SPI_CR1_SSM_Msk      (0x1U << SPI_CR1_SSM_Pos) /*!< 0x00000200 */\r\n#define SPI_CR1_SSM          SPI_CR1_SSM_Msk           /*!< Software slave management */\r\n#define SPI_CR1_RXONLY_Pos   (10U)\r\n#define SPI_CR1_RXONLY_Msk   (0x1U << SPI_CR1_RXONLY_Pos) /*!< 0x00000400 */\r\n#define SPI_CR1_RXONLY       SPI_CR1_RXONLY_Msk           /*!< Receive only */\r\n#define SPI_CR1_DFF_Pos      (11U)\r\n#define SPI_CR1_DFF_Msk      (0x1U << SPI_CR1_DFF_Pos) /*!< 0x00000800 */\r\n#define SPI_CR1_DFF          SPI_CR1_DFF_Msk           /*!< Data Frame Format */\r\n#define SPI_CR1_CRCNEXT_Pos  (12U)\r\n#define SPI_CR1_CRCNEXT_Msk  (0x1U << SPI_CR1_CRCNEXT_Pos) /*!< 0x00001000 */\r\n#define SPI_CR1_CRCNEXT      SPI_CR1_CRCNEXT_Msk           /*!< Transmit CRC next */\r\n#define SPI_CR1_CRCEN_Pos    (13U)\r\n#define SPI_CR1_CRCEN_Msk    (0x1U << SPI_CR1_CRCEN_Pos) /*!< 0x00002000 */\r\n#define SPI_CR1_CRCEN        SPI_CR1_CRCEN_Msk           /*!< Hardware CRC calculation enable */\r\n#define SPI_CR1_BIDIOE_Pos   (14U)\r\n#define SPI_CR1_BIDIOE_Msk   (0x1U << SPI_CR1_BIDIOE_Pos) /*!< 0x00004000 */\r\n#define SPI_CR1_BIDIOE       SPI_CR1_BIDIOE_Msk           /*!< Output enable in bidirectional mode */\r\n#define SPI_CR1_BIDIMODE_Pos (15U)\r\n#define SPI_CR1_BIDIMODE_Msk (0x1U << SPI_CR1_BIDIMODE_Pos) /*!< 0x00008000 */\r\n#define SPI_CR1_BIDIMODE     SPI_CR1_BIDIMODE_Msk           /*!< Bidirectional data mode enable */\r\n\r\n/*******************  Bit definition for SPI_CR2 register  ********************/\r\n#define SPI_CR2_RXDMAEN_Pos (0U)\r\n#define SPI_CR2_RXDMAEN_Msk (0x1U << SPI_CR2_RXDMAEN_Pos) /*!< 0x00000001 */\r\n#define SPI_CR2_RXDMAEN     SPI_CR2_RXDMAEN_Msk           /*!< Rx Buffer DMA Enable */\r\n#define SPI_CR2_TXDMAEN_Pos (1U)\r\n#define SPI_CR2_TXDMAEN_Msk (0x1U << SPI_CR2_TXDMAEN_Pos) /*!< 0x00000002 */\r\n#define SPI_CR2_TXDMAEN     SPI_CR2_TXDMAEN_Msk           /*!< Tx Buffer DMA Enable */\r\n#define SPI_CR2_SSOE_Pos    (2U)\r\n#define SPI_CR2_SSOE_Msk    (0x1U << SPI_CR2_SSOE_Pos) /*!< 0x00000004 */\r\n#define SPI_CR2_SSOE        SPI_CR2_SSOE_Msk           /*!< SS Output Enable */\r\n#define SPI_CR2_ERRIE_Pos   (5U)\r\n#define SPI_CR2_ERRIE_Msk   (0x1U << SPI_CR2_ERRIE_Pos) /*!< 0x00000020 */\r\n#define SPI_CR2_ERRIE       SPI_CR2_ERRIE_Msk           /*!< Error Interrupt Enable */\r\n#define SPI_CR2_RXNEIE_Pos  (6U)\r\n#define SPI_CR2_RXNEIE_Msk  (0x1U << SPI_CR2_RXNEIE_Pos) /*!< 0x00000040 */\r\n#define SPI_CR2_RXNEIE      SPI_CR2_RXNEIE_Msk           /*!< RX buffer Not Empty Interrupt Enable */\r\n#define SPI_CR2_TXEIE_Pos   (7U)\r\n#define SPI_CR2_TXEIE_Msk   (0x1U << SPI_CR2_TXEIE_Pos) /*!< 0x00000080 */\r\n#define SPI_CR2_TXEIE       SPI_CR2_TXEIE_Msk           /*!< Tx buffer Empty Interrupt Enable */\r\n\r\n/********************  Bit definition for SPI_SR register  ********************/\r\n#define SPI_SR_RXNE_Pos   (0U)\r\n#define SPI_SR_RXNE_Msk   (0x1U << SPI_SR_RXNE_Pos) /*!< 0x00000001 */\r\n#define SPI_SR_RXNE       SPI_SR_RXNE_Msk           /*!< Receive buffer Not Empty */\r\n#define SPI_SR_TXE_Pos    (1U)\r\n#define SPI_SR_TXE_Msk    (0x1U << SPI_SR_TXE_Pos) /*!< 0x00000002 */\r\n#define SPI_SR_TXE        SPI_SR_TXE_Msk           /*!< Transmit buffer Empty */\r\n#define SPI_SR_CHSIDE_Pos (2U)\r\n#define SPI_SR_CHSIDE_Msk (0x1U << SPI_SR_CHSIDE_Pos) /*!< 0x00000004 */\r\n#define SPI_SR_CHSIDE     SPI_SR_CHSIDE_Msk           /*!< Channel side */\r\n#define SPI_SR_UDR_Pos    (3U)\r\n#define SPI_SR_UDR_Msk    (0x1U << SPI_SR_UDR_Pos) /*!< 0x00000008 */\r\n#define SPI_SR_UDR        SPI_SR_UDR_Msk           /*!< Underrun flag */\r\n#define SPI_SR_CRCERR_Pos (4U)\r\n#define SPI_SR_CRCERR_Msk (0x1U << SPI_SR_CRCERR_Pos) /*!< 0x00000010 */\r\n#define SPI_SR_CRCERR     SPI_SR_CRCERR_Msk           /*!< CRC Error flag */\r\n#define SPI_SR_MODF_Pos   (5U)\r\n#define SPI_SR_MODF_Msk   (0x1U << SPI_SR_MODF_Pos) /*!< 0x00000020 */\r\n#define SPI_SR_MODF       SPI_SR_MODF_Msk           /*!< Mode fault */\r\n#define SPI_SR_OVR_Pos    (6U)\r\n#define SPI_SR_OVR_Msk    (0x1U << SPI_SR_OVR_Pos) /*!< 0x00000040 */\r\n#define SPI_SR_OVR        SPI_SR_OVR_Msk           /*!< Overrun flag */\r\n#define SPI_SR_BSY_Pos    (7U)\r\n#define SPI_SR_BSY_Msk    (0x1U << SPI_SR_BSY_Pos) /*!< 0x00000080 */\r\n#define SPI_SR_BSY        SPI_SR_BSY_Msk           /*!< Busy flag */\r\n\r\n/********************  Bit definition for SPI_DR register  ********************/\r\n#define SPI_DR_DR_Pos (0U)\r\n#define SPI_DR_DR_Msk (0xFFFFU << SPI_DR_DR_Pos) /*!< 0x0000FFFF */\r\n#define SPI_DR_DR     SPI_DR_DR_Msk              /*!< Data Register */\r\n\r\n/*******************  Bit definition for SPI_CRCPR register  ******************/\r\n#define SPI_CRCPR_CRCPOLY_Pos (0U)\r\n#define SPI_CRCPR_CRCPOLY_Msk (0xFFFFU << SPI_CRCPR_CRCPOLY_Pos) /*!< 0x0000FFFF */\r\n#define SPI_CRCPR_CRCPOLY     SPI_CRCPR_CRCPOLY_Msk              /*!< CRC polynomial register */\r\n\r\n/******************  Bit definition for SPI_RXCRCR register  ******************/\r\n#define SPI_RXCRCR_RXCRC_Pos (0U)\r\n#define SPI_RXCRCR_RXCRC_Msk (0xFFFFU << SPI_RXCRCR_RXCRC_Pos) /*!< 0x0000FFFF */\r\n#define SPI_RXCRCR_RXCRC     SPI_RXCRCR_RXCRC_Msk              /*!< Rx CRC Register */\r\n\r\n/******************  Bit definition for SPI_TXCRCR register  ******************/\r\n#define SPI_TXCRCR_TXCRC_Pos (0U)\r\n#define SPI_TXCRCR_TXCRC_Msk (0xFFFFU << SPI_TXCRCR_TXCRC_Pos) /*!< 0x0000FFFF */\r\n#define SPI_TXCRCR_TXCRC     SPI_TXCRCR_TXCRC_Msk              /*!< Tx CRC Register */\r\n\r\n/******************  Bit definition for SPI_I2SCFGR register  *****************/\r\n#define SPI_I2SCFGR_I2SMOD_Pos (11U)\r\n#define SPI_I2SCFGR_I2SMOD_Msk (0x1U << SPI_I2SCFGR_I2SMOD_Pos) /*!< 0x00000800 */\r\n#define SPI_I2SCFGR_I2SMOD     SPI_I2SCFGR_I2SMOD_Msk           /*!< I2S mode selection */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                      Inter-integrated Circuit Interface                    */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for I2C_CR1 register  ********************/\r\n#define I2C_CR1_PE_Pos        (0U)\r\n#define I2C_CR1_PE_Msk        (0x1U << I2C_CR1_PE_Pos) /*!< 0x00000001 */\r\n#define I2C_CR1_PE            I2C_CR1_PE_Msk           /*!< Peripheral Enable */\r\n#define I2C_CR1_SMBUS_Pos     (1U)\r\n#define I2C_CR1_SMBUS_Msk     (0x1U << I2C_CR1_SMBUS_Pos) /*!< 0x00000002 */\r\n#define I2C_CR1_SMBUS         I2C_CR1_SMBUS_Msk           /*!< SMBus Mode */\r\n#define I2C_CR1_SMBTYPE_Pos   (3U)\r\n#define I2C_CR1_SMBTYPE_Msk   (0x1U << I2C_CR1_SMBTYPE_Pos) /*!< 0x00000008 */\r\n#define I2C_CR1_SMBTYPE       I2C_CR1_SMBTYPE_Msk           /*!< SMBus Type */\r\n#define I2C_CR1_ENARP_Pos     (4U)\r\n#define I2C_CR1_ENARP_Msk     (0x1U << I2C_CR1_ENARP_Pos) /*!< 0x00000010 */\r\n#define I2C_CR1_ENARP         I2C_CR1_ENARP_Msk           /*!< ARP Enable */\r\n#define I2C_CR1_ENPEC_Pos     (5U)\r\n#define I2C_CR1_ENPEC_Msk     (0x1U << I2C_CR1_ENPEC_Pos) /*!< 0x00000020 */\r\n#define I2C_CR1_ENPEC         I2C_CR1_ENPEC_Msk           /*!< PEC Enable */\r\n#define I2C_CR1_ENGC_Pos      (6U)\r\n#define I2C_CR1_ENGC_Msk      (0x1U << I2C_CR1_ENGC_Pos) /*!< 0x00000040 */\r\n#define I2C_CR1_ENGC          I2C_CR1_ENGC_Msk           /*!< General Call Enable */\r\n#define I2C_CR1_NOSTRETCH_Pos (7U)\r\n#define I2C_CR1_NOSTRETCH_Msk (0x1U << I2C_CR1_NOSTRETCH_Pos) /*!< 0x00000080 */\r\n#define I2C_CR1_NOSTRETCH     I2C_CR1_NOSTRETCH_Msk           /*!< Clock Stretching Disable (Slave mode) */\r\n#define I2C_CR1_START_Pos     (8U)\r\n#define I2C_CR1_START_Msk     (0x1U << I2C_CR1_START_Pos) /*!< 0x00000100 */\r\n#define I2C_CR1_START         I2C_CR1_START_Msk           /*!< Start Generation */\r\n#define I2C_CR1_STOP_Pos      (9U)\r\n#define I2C_CR1_STOP_Msk      (0x1U << I2C_CR1_STOP_Pos) /*!< 0x00000200 */\r\n#define I2C_CR1_STOP          I2C_CR1_STOP_Msk           /*!< Stop Generation */\r\n#define I2C_CR1_ACK_Pos       (10U)\r\n#define I2C_CR1_ACK_Msk       (0x1U << I2C_CR1_ACK_Pos) /*!< 0x00000400 */\r\n#define I2C_CR1_ACK           I2C_CR1_ACK_Msk           /*!< Acknowledge Enable */\r\n#define I2C_CR1_POS_Pos       (11U)\r\n#define I2C_CR1_POS_Msk       (0x1U << I2C_CR1_POS_Pos) /*!< 0x00000800 */\r\n#define I2C_CR1_POS           I2C_CR1_POS_Msk           /*!< Acknowledge/PEC Position (for data reception) */\r\n#define I2C_CR1_PEC_Pos       (12U)\r\n#define I2C_CR1_PEC_Msk       (0x1U << I2C_CR1_PEC_Pos) /*!< 0x00001000 */\r\n#define I2C_CR1_PEC           I2C_CR1_PEC_Msk           /*!< Packet Error Checking */\r\n#define I2C_CR1_ALERT_Pos     (13U)\r\n#define I2C_CR1_ALERT_Msk     (0x1U << I2C_CR1_ALERT_Pos) /*!< 0x00002000 */\r\n#define I2C_CR1_ALERT         I2C_CR1_ALERT_Msk           /*!< SMBus Alert */\r\n#define I2C_CR1_SWRST_Pos     (15U)\r\n#define I2C_CR1_SWRST_Msk     (0x1U << I2C_CR1_SWRST_Pos) /*!< 0x00008000 */\r\n#define I2C_CR1_SWRST         I2C_CR1_SWRST_Msk           /*!< Software Reset */\r\n\r\n/*******************  Bit definition for I2C_CR2 register  ********************/\r\n#define I2C_CR2_FREQ_Pos (0U)\r\n#define I2C_CR2_FREQ_Msk (0x3FU << I2C_CR2_FREQ_Pos) /*!< 0x0000003F */\r\n#define I2C_CR2_FREQ     I2C_CR2_FREQ_Msk            /*!< FREQ[5:0] bits (Peripheral Clock Frequency) */\r\n#define I2C_CR2_FREQ_0   (0x01U << I2C_CR2_FREQ_Pos) /*!< 0x00000001 */\r\n#define I2C_CR2_FREQ_1   (0x02U << I2C_CR2_FREQ_Pos) /*!< 0x00000002 */\r\n#define I2C_CR2_FREQ_2   (0x04U << I2C_CR2_FREQ_Pos) /*!< 0x00000004 */\r\n#define I2C_CR2_FREQ_3   (0x08U << I2C_CR2_FREQ_Pos) /*!< 0x00000008 */\r\n#define I2C_CR2_FREQ_4   (0x10U << I2C_CR2_FREQ_Pos) /*!< 0x00000010 */\r\n#define I2C_CR2_FREQ_5   (0x20U << I2C_CR2_FREQ_Pos) /*!< 0x00000020 */\r\n\r\n#define I2C_CR2_ITERREN_Pos (8U)\r\n#define I2C_CR2_ITERREN_Msk (0x1U << I2C_CR2_ITERREN_Pos) /*!< 0x00000100 */\r\n#define I2C_CR2_ITERREN     I2C_CR2_ITERREN_Msk           /*!< Error Interrupt Enable */\r\n#define I2C_CR2_ITEVTEN_Pos (9U)\r\n#define I2C_CR2_ITEVTEN_Msk (0x1U << I2C_CR2_ITEVTEN_Pos) /*!< 0x00000200 */\r\n#define I2C_CR2_ITEVTEN     I2C_CR2_ITEVTEN_Msk           /*!< Event Interrupt Enable */\r\n#define I2C_CR2_ITBUFEN_Pos (10U)\r\n#define I2C_CR2_ITBUFEN_Msk (0x1U << I2C_CR2_ITBUFEN_Pos) /*!< 0x00000400 */\r\n#define I2C_CR2_ITBUFEN     I2C_CR2_ITBUFEN_Msk           /*!< Buffer Interrupt Enable */\r\n#define I2C_CR2_DMAEN_Pos   (11U)\r\n#define I2C_CR2_DMAEN_Msk   (0x1U << I2C_CR2_DMAEN_Pos) /*!< 0x00000800 */\r\n#define I2C_CR2_DMAEN       I2C_CR2_DMAEN_Msk           /*!< DMA Requests Enable */\r\n#define I2C_CR2_LAST_Pos    (12U)\r\n#define I2C_CR2_LAST_Msk    (0x1U << I2C_CR2_LAST_Pos) /*!< 0x00001000 */\r\n#define I2C_CR2_LAST        I2C_CR2_LAST_Msk           /*!< DMA Last Transfer */\r\n\r\n/*******************  Bit definition for I2C_OAR1 register  *******************/\r\n#define I2C_OAR1_ADD1_7 0x000000FEU /*!< Interface Address */\r\n#define I2C_OAR1_ADD8_9 0x00000300U /*!< Interface Address */\r\n\r\n#define I2C_OAR1_ADD0_Pos (0U)\r\n#define I2C_OAR1_ADD0_Msk (0x1U << I2C_OAR1_ADD0_Pos) /*!< 0x00000001 */\r\n#define I2C_OAR1_ADD0     I2C_OAR1_ADD0_Msk           /*!< Bit 0 */\r\n#define I2C_OAR1_ADD1_Pos (1U)\r\n#define I2C_OAR1_ADD1_Msk (0x1U << I2C_OAR1_ADD1_Pos) /*!< 0x00000002 */\r\n#define I2C_OAR1_ADD1     I2C_OAR1_ADD1_Msk           /*!< Bit 1 */\r\n#define I2C_OAR1_ADD2_Pos (2U)\r\n#define I2C_OAR1_ADD2_Msk (0x1U << I2C_OAR1_ADD2_Pos) /*!< 0x00000004 */\r\n#define I2C_OAR1_ADD2     I2C_OAR1_ADD2_Msk           /*!< Bit 2 */\r\n#define I2C_OAR1_ADD3_Pos (3U)\r\n#define I2C_OAR1_ADD3_Msk (0x1U << I2C_OAR1_ADD3_Pos) /*!< 0x00000008 */\r\n#define I2C_OAR1_ADD3     I2C_OAR1_ADD3_Msk           /*!< Bit 3 */\r\n#define I2C_OAR1_ADD4_Pos (4U)\r\n#define I2C_OAR1_ADD4_Msk (0x1U << I2C_OAR1_ADD4_Pos) /*!< 0x00000010 */\r\n#define I2C_OAR1_ADD4     I2C_OAR1_ADD4_Msk           /*!< Bit 4 */\r\n#define I2C_OAR1_ADD5_Pos (5U)\r\n#define I2C_OAR1_ADD5_Msk (0x1U << I2C_OAR1_ADD5_Pos) /*!< 0x00000020 */\r\n#define I2C_OAR1_ADD5     I2C_OAR1_ADD5_Msk           /*!< Bit 5 */\r\n#define I2C_OAR1_ADD6_Pos (6U)\r\n#define I2C_OAR1_ADD6_Msk (0x1U << I2C_OAR1_ADD6_Pos) /*!< 0x00000040 */\r\n#define I2C_OAR1_ADD6     I2C_OAR1_ADD6_Msk           /*!< Bit 6 */\r\n#define I2C_OAR1_ADD7_Pos (7U)\r\n#define I2C_OAR1_ADD7_Msk (0x1U << I2C_OAR1_ADD7_Pos) /*!< 0x00000080 */\r\n#define I2C_OAR1_ADD7     I2C_OAR1_ADD7_Msk           /*!< Bit 7 */\r\n#define I2C_OAR1_ADD8_Pos (8U)\r\n#define I2C_OAR1_ADD8_Msk (0x1U << I2C_OAR1_ADD8_Pos) /*!< 0x00000100 */\r\n#define I2C_OAR1_ADD8     I2C_OAR1_ADD8_Msk           /*!< Bit 8 */\r\n#define I2C_OAR1_ADD9_Pos (9U)\r\n#define I2C_OAR1_ADD9_Msk (0x1U << I2C_OAR1_ADD9_Pos) /*!< 0x00000200 */\r\n#define I2C_OAR1_ADD9     I2C_OAR1_ADD9_Msk           /*!< Bit 9 */\r\n\r\n#define I2C_OAR1_ADDMODE_Pos (15U)\r\n#define I2C_OAR1_ADDMODE_Msk (0x1U << I2C_OAR1_ADDMODE_Pos) /*!< 0x00008000 */\r\n#define I2C_OAR1_ADDMODE     I2C_OAR1_ADDMODE_Msk           /*!< Addressing Mode (Slave mode) */\r\n\r\n/*******************  Bit definition for I2C_OAR2 register  *******************/\r\n#define I2C_OAR2_ENDUAL_Pos (0U)\r\n#define I2C_OAR2_ENDUAL_Msk (0x1U << I2C_OAR2_ENDUAL_Pos) /*!< 0x00000001 */\r\n#define I2C_OAR2_ENDUAL     I2C_OAR2_ENDUAL_Msk           /*!< Dual addressing mode enable */\r\n#define I2C_OAR2_ADD2_Pos   (1U)\r\n#define I2C_OAR2_ADD2_Msk   (0x7FU << I2C_OAR2_ADD2_Pos) /*!< 0x000000FE */\r\n#define I2C_OAR2_ADD2       I2C_OAR2_ADD2_Msk            /*!< Interface address */\r\n\r\n/********************  Bit definition for I2C_DR register  ********************/\r\n#define I2C_DR_DR_Pos (0U)\r\n#define I2C_DR_DR_Msk (0xFFU << I2C_DR_DR_Pos) /*!< 0x000000FF */\r\n#define I2C_DR_DR     I2C_DR_DR_Msk            /*!< 8-bit Data Register         */\r\n\r\n/*******************  Bit definition for I2C_SR1 register  ********************/\r\n#define I2C_SR1_SB_Pos       (0U)\r\n#define I2C_SR1_SB_Msk       (0x1U << I2C_SR1_SB_Pos) /*!< 0x00000001 */\r\n#define I2C_SR1_SB           I2C_SR1_SB_Msk           /*!< Start Bit (Master mode) */\r\n#define I2C_SR1_ADDR_Pos     (1U)\r\n#define I2C_SR1_ADDR_Msk     (0x1U << I2C_SR1_ADDR_Pos) /*!< 0x00000002 */\r\n#define I2C_SR1_ADDR         I2C_SR1_ADDR_Msk           /*!< Address sent (master mode)/matched (slave mode) */\r\n#define I2C_SR1_BTF_Pos      (2U)\r\n#define I2C_SR1_BTF_Msk      (0x1U << I2C_SR1_BTF_Pos) /*!< 0x00000004 */\r\n#define I2C_SR1_BTF          I2C_SR1_BTF_Msk           /*!< Byte Transfer Finished */\r\n#define I2C_SR1_ADD10_Pos    (3U)\r\n#define I2C_SR1_ADD10_Msk    (0x1U << I2C_SR1_ADD10_Pos) /*!< 0x00000008 */\r\n#define I2C_SR1_ADD10        I2C_SR1_ADD10_Msk           /*!< 10-bit header sent (Master mode) */\r\n#define I2C_SR1_STOPF_Pos    (4U)\r\n#define I2C_SR1_STOPF_Msk    (0x1U << I2C_SR1_STOPF_Pos) /*!< 0x00000010 */\r\n#define I2C_SR1_STOPF        I2C_SR1_STOPF_Msk           /*!< Stop detection (Slave mode) */\r\n#define I2C_SR1_RXNE_Pos     (6U)\r\n#define I2C_SR1_RXNE_Msk     (0x1U << I2C_SR1_RXNE_Pos) /*!< 0x00000040 */\r\n#define I2C_SR1_RXNE         I2C_SR1_RXNE_Msk           /*!< Data Register not Empty (receivers) */\r\n#define I2C_SR1_TXE_Pos      (7U)\r\n#define I2C_SR1_TXE_Msk      (0x1U << I2C_SR1_TXE_Pos) /*!< 0x00000080 */\r\n#define I2C_SR1_TXE          I2C_SR1_TXE_Msk           /*!< Data Register Empty (transmitters) */\r\n#define I2C_SR1_BERR_Pos     (8U)\r\n#define I2C_SR1_BERR_Msk     (0x1U << I2C_SR1_BERR_Pos) /*!< 0x00000100 */\r\n#define I2C_SR1_BERR         I2C_SR1_BERR_Msk           /*!< Bus Error */\r\n#define I2C_SR1_ARLO_Pos     (9U)\r\n#define I2C_SR1_ARLO_Msk     (0x1U << I2C_SR1_ARLO_Pos) /*!< 0x00000200 */\r\n#define I2C_SR1_ARLO         I2C_SR1_ARLO_Msk           /*!< Arbitration Lost (master mode) */\r\n#define I2C_SR1_AF_Pos       (10U)\r\n#define I2C_SR1_AF_Msk       (0x1U << I2C_SR1_AF_Pos) /*!< 0x00000400 */\r\n#define I2C_SR1_AF           I2C_SR1_AF_Msk           /*!< Acknowledge Failure */\r\n#define I2C_SR1_OVR_Pos      (11U)\r\n#define I2C_SR1_OVR_Msk      (0x1U << I2C_SR1_OVR_Pos) /*!< 0x00000800 */\r\n#define I2C_SR1_OVR          I2C_SR1_OVR_Msk           /*!< Overrun/Underrun */\r\n#define I2C_SR1_PECERR_Pos   (12U)\r\n#define I2C_SR1_PECERR_Msk   (0x1U << I2C_SR1_PECERR_Pos) /*!< 0x00001000 */\r\n#define I2C_SR1_PECERR       I2C_SR1_PECERR_Msk           /*!< PEC Error in reception */\r\n#define I2C_SR1_TIMEOUT_Pos  (14U)\r\n#define I2C_SR1_TIMEOUT_Msk  (0x1U << I2C_SR1_TIMEOUT_Pos) /*!< 0x00004000 */\r\n#define I2C_SR1_TIMEOUT      I2C_SR1_TIMEOUT_Msk           /*!< Timeout or Tlow Error */\r\n#define I2C_SR1_SMBALERT_Pos (15U)\r\n#define I2C_SR1_SMBALERT_Msk (0x1U << I2C_SR1_SMBALERT_Pos) /*!< 0x00008000 */\r\n#define I2C_SR1_SMBALERT     I2C_SR1_SMBALERT_Msk           /*!< SMBus Alert */\r\n\r\n/*******************  Bit definition for I2C_SR2 register  ********************/\r\n#define I2C_SR2_MSL_Pos        (0U)\r\n#define I2C_SR2_MSL_Msk        (0x1U << I2C_SR2_MSL_Pos) /*!< 0x00000001 */\r\n#define I2C_SR2_MSL            I2C_SR2_MSL_Msk           /*!< Master/Slave */\r\n#define I2C_SR2_BUSY_Pos       (1U)\r\n#define I2C_SR2_BUSY_Msk       (0x1U << I2C_SR2_BUSY_Pos) /*!< 0x00000002 */\r\n#define I2C_SR2_BUSY           I2C_SR2_BUSY_Msk           /*!< Bus Busy */\r\n#define I2C_SR2_TRA_Pos        (2U)\r\n#define I2C_SR2_TRA_Msk        (0x1U << I2C_SR2_TRA_Pos) /*!< 0x00000004 */\r\n#define I2C_SR2_TRA            I2C_SR2_TRA_Msk           /*!< Transmitter/Receiver */\r\n#define I2C_SR2_GENCALL_Pos    (4U)\r\n#define I2C_SR2_GENCALL_Msk    (0x1U << I2C_SR2_GENCALL_Pos) /*!< 0x00000010 */\r\n#define I2C_SR2_GENCALL        I2C_SR2_GENCALL_Msk           /*!< General Call Address (Slave mode) */\r\n#define I2C_SR2_SMBDEFAULT_Pos (5U)\r\n#define I2C_SR2_SMBDEFAULT_Msk (0x1U << I2C_SR2_SMBDEFAULT_Pos) /*!< 0x00000020 */\r\n#define I2C_SR2_SMBDEFAULT     I2C_SR2_SMBDEFAULT_Msk           /*!< SMBus Device Default Address (Slave mode) */\r\n#define I2C_SR2_SMBHOST_Pos    (6U)\r\n#define I2C_SR2_SMBHOST_Msk    (0x1U << I2C_SR2_SMBHOST_Pos) /*!< 0x00000040 */\r\n#define I2C_SR2_SMBHOST        I2C_SR2_SMBHOST_Msk           /*!< SMBus Host Header (Slave mode) */\r\n#define I2C_SR2_DUALF_Pos      (7U)\r\n#define I2C_SR2_DUALF_Msk      (0x1U << I2C_SR2_DUALF_Pos) /*!< 0x00000080 */\r\n#define I2C_SR2_DUALF          I2C_SR2_DUALF_Msk           /*!< Dual Flag (Slave mode) */\r\n#define I2C_SR2_PEC_Pos        (8U)\r\n#define I2C_SR2_PEC_Msk        (0xFFU << I2C_SR2_PEC_Pos) /*!< 0x0000FF00 */\r\n#define I2C_SR2_PEC            I2C_SR2_PEC_Msk            /*!< Packet Error Checking Register */\r\n\r\n/*******************  Bit definition for I2C_CCR register  ********************/\r\n#define I2C_CCR_CCR_Pos  (0U)\r\n#define I2C_CCR_CCR_Msk  (0xFFFU << I2C_CCR_CCR_Pos) /*!< 0x00000FFF */\r\n#define I2C_CCR_CCR      I2C_CCR_CCR_Msk             /*!< Clock Control Register in Fast/Standard mode (Master mode) */\r\n#define I2C_CCR_DUTY_Pos (14U)\r\n#define I2C_CCR_DUTY_Msk (0x1U << I2C_CCR_DUTY_Pos) /*!< 0x00004000 */\r\n#define I2C_CCR_DUTY     I2C_CCR_DUTY_Msk           /*!< Fast Mode Duty Cycle */\r\n#define I2C_CCR_FS_Pos   (15U)\r\n#define I2C_CCR_FS_Msk   (0x1U << I2C_CCR_FS_Pos) /*!< 0x00008000 */\r\n#define I2C_CCR_FS       I2C_CCR_FS_Msk           /*!< I2C Master Mode Selection */\r\n\r\n/******************  Bit definition for I2C_TRISE register  *******************/\r\n#define I2C_TRISE_TRISE_Pos (0U)\r\n#define I2C_TRISE_TRISE_Msk (0x3FU << I2C_TRISE_TRISE_Pos) /*!< 0x0000003F */\r\n#define I2C_TRISE_TRISE     I2C_TRISE_TRISE_Msk            /*!< Maximum Rise Time in Fast/Standard mode (Master mode) */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*         Universal Synchronous Asynchronous Receiver Transmitter            */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for USART_SR register  *******************/\r\n#define USART_SR_PE_Pos   (0U)\r\n#define USART_SR_PE_Msk   (0x1U << USART_SR_PE_Pos) /*!< 0x00000001 */\r\n#define USART_SR_PE       USART_SR_PE_Msk           /*!< Parity Error */\r\n#define USART_SR_FE_Pos   (1U)\r\n#define USART_SR_FE_Msk   (0x1U << USART_SR_FE_Pos) /*!< 0x00000002 */\r\n#define USART_SR_FE       USART_SR_FE_Msk           /*!< Framing Error */\r\n#define USART_SR_NE_Pos   (2U)\r\n#define USART_SR_NE_Msk   (0x1U << USART_SR_NE_Pos) /*!< 0x00000004 */\r\n#define USART_SR_NE       USART_SR_NE_Msk           /*!< Noise Error Flag */\r\n#define USART_SR_ORE_Pos  (3U)\r\n#define USART_SR_ORE_Msk  (0x1U << USART_SR_ORE_Pos) /*!< 0x00000008 */\r\n#define USART_SR_ORE      USART_SR_ORE_Msk           /*!< OverRun Error */\r\n#define USART_SR_IDLE_Pos (4U)\r\n#define USART_SR_IDLE_Msk (0x1U << USART_SR_IDLE_Pos) /*!< 0x00000010 */\r\n#define USART_SR_IDLE     USART_SR_IDLE_Msk           /*!< IDLE line detected */\r\n#define USART_SR_RXNE_Pos (5U)\r\n#define USART_SR_RXNE_Msk (0x1U << USART_SR_RXNE_Pos) /*!< 0x00000020 */\r\n#define USART_SR_RXNE     USART_SR_RXNE_Msk           /*!< Read Data Register Not Empty */\r\n#define USART_SR_TC_Pos   (6U)\r\n#define USART_SR_TC_Msk   (0x1U << USART_SR_TC_Pos) /*!< 0x00000040 */\r\n#define USART_SR_TC       USART_SR_TC_Msk           /*!< Transmission Complete */\r\n#define USART_SR_TXE_Pos  (7U)\r\n#define USART_SR_TXE_Msk  (0x1U << USART_SR_TXE_Pos) /*!< 0x00000080 */\r\n#define USART_SR_TXE      USART_SR_TXE_Msk           /*!< Transmit Data Register Empty */\r\n#define USART_SR_LBD_Pos  (8U)\r\n#define USART_SR_LBD_Msk  (0x1U << USART_SR_LBD_Pos) /*!< 0x00000100 */\r\n#define USART_SR_LBD      USART_SR_LBD_Msk           /*!< LIN Break Detection Flag */\r\n#define USART_SR_CTS_Pos  (9U)\r\n#define USART_SR_CTS_Msk  (0x1U << USART_SR_CTS_Pos) /*!< 0x00000200 */\r\n#define USART_SR_CTS      USART_SR_CTS_Msk           /*!< CTS Flag */\r\n\r\n/*******************  Bit definition for USART_DR register  *******************/\r\n#define USART_DR_DR_Pos (0U)\r\n#define USART_DR_DR_Msk (0x1FFU << USART_DR_DR_Pos) /*!< 0x000001FF */\r\n#define USART_DR_DR     USART_DR_DR_Msk             /*!< Data value */\r\n\r\n/******************  Bit definition for USART_BRR register  *******************/\r\n#define USART_BRR_DIV_Fraction_Pos (0U)\r\n#define USART_BRR_DIV_Fraction_Msk (0xFU << USART_BRR_DIV_Fraction_Pos) /*!< 0x0000000F */\r\n#define USART_BRR_DIV_Fraction     USART_BRR_DIV_Fraction_Msk           /*!< Fraction of USARTDIV */\r\n#define USART_BRR_DIV_Mantissa_Pos (4U)\r\n#define USART_BRR_DIV_Mantissa_Msk (0xFFFU << USART_BRR_DIV_Mantissa_Pos) /*!< 0x0000FFF0 */\r\n#define USART_BRR_DIV_Mantissa     USART_BRR_DIV_Mantissa_Msk             /*!< Mantissa of USARTDIV */\r\n\r\n/******************  Bit definition for USART_CR1 register  *******************/\r\n#define USART_CR1_SBK_Pos    (0U)\r\n#define USART_CR1_SBK_Msk    (0x1U << USART_CR1_SBK_Pos) /*!< 0x00000001 */\r\n#define USART_CR1_SBK        USART_CR1_SBK_Msk           /*!< Send Break */\r\n#define USART_CR1_RWU_Pos    (1U)\r\n#define USART_CR1_RWU_Msk    (0x1U << USART_CR1_RWU_Pos) /*!< 0x00000002 */\r\n#define USART_CR1_RWU        USART_CR1_RWU_Msk           /*!< Receiver wakeup */\r\n#define USART_CR1_RE_Pos     (2U)\r\n#define USART_CR1_RE_Msk     (0x1U << USART_CR1_RE_Pos) /*!< 0x00000004 */\r\n#define USART_CR1_RE         USART_CR1_RE_Msk           /*!< Receiver Enable */\r\n#define USART_CR1_TE_Pos     (3U)\r\n#define USART_CR1_TE_Msk     (0x1U << USART_CR1_TE_Pos) /*!< 0x00000008 */\r\n#define USART_CR1_TE         USART_CR1_TE_Msk           /*!< Transmitter Enable */\r\n#define USART_CR1_IDLEIE_Pos (4U)\r\n#define USART_CR1_IDLEIE_Msk (0x1U << USART_CR1_IDLEIE_Pos) /*!< 0x00000010 */\r\n#define USART_CR1_IDLEIE     USART_CR1_IDLEIE_Msk           /*!< IDLE Interrupt Enable */\r\n#define USART_CR1_RXNEIE_Pos (5U)\r\n#define USART_CR1_RXNEIE_Msk (0x1U << USART_CR1_RXNEIE_Pos) /*!< 0x00000020 */\r\n#define USART_CR1_RXNEIE     USART_CR1_RXNEIE_Msk           /*!< RXNE Interrupt Enable */\r\n#define USART_CR1_TCIE_Pos   (6U)\r\n#define USART_CR1_TCIE_Msk   (0x1U << USART_CR1_TCIE_Pos) /*!< 0x00000040 */\r\n#define USART_CR1_TCIE       USART_CR1_TCIE_Msk           /*!< Transmission Complete Interrupt Enable */\r\n#define USART_CR1_TXEIE_Pos  (7U)\r\n#define USART_CR1_TXEIE_Msk  (0x1U << USART_CR1_TXEIE_Pos) /*!< 0x00000080 */\r\n#define USART_CR1_TXEIE      USART_CR1_TXEIE_Msk           /*!< PE Interrupt Enable */\r\n#define USART_CR1_PEIE_Pos   (8U)\r\n#define USART_CR1_PEIE_Msk   (0x1U << USART_CR1_PEIE_Pos) /*!< 0x00000100 */\r\n#define USART_CR1_PEIE       USART_CR1_PEIE_Msk           /*!< PE Interrupt Enable */\r\n#define USART_CR1_PS_Pos     (9U)\r\n#define USART_CR1_PS_Msk     (0x1U << USART_CR1_PS_Pos) /*!< 0x00000200 */\r\n#define USART_CR1_PS         USART_CR1_PS_Msk           /*!< Parity Selection */\r\n#define USART_CR1_PCE_Pos    (10U)\r\n#define USART_CR1_PCE_Msk    (0x1U << USART_CR1_PCE_Pos) /*!< 0x00000400 */\r\n#define USART_CR1_PCE        USART_CR1_PCE_Msk           /*!< Parity Control Enable */\r\n#define USART_CR1_WAKE_Pos   (11U)\r\n#define USART_CR1_WAKE_Msk   (0x1U << USART_CR1_WAKE_Pos) /*!< 0x00000800 */\r\n#define USART_CR1_WAKE       USART_CR1_WAKE_Msk           /*!< Wakeup method */\r\n#define USART_CR1_M_Pos      (12U)\r\n#define USART_CR1_M_Msk      (0x1U << USART_CR1_M_Pos) /*!< 0x00001000 */\r\n#define USART_CR1_M          USART_CR1_M_Msk           /*!< Word length */\r\n#define USART_CR1_UE_Pos     (13U)\r\n#define USART_CR1_UE_Msk     (0x1U << USART_CR1_UE_Pos) /*!< 0x00002000 */\r\n#define USART_CR1_UE         USART_CR1_UE_Msk           /*!< USART Enable */\r\n\r\n/******************  Bit definition for USART_CR2 register  *******************/\r\n#define USART_CR2_ADD_Pos   (0U)\r\n#define USART_CR2_ADD_Msk   (0xFU << USART_CR2_ADD_Pos) /*!< 0x0000000F */\r\n#define USART_CR2_ADD       USART_CR2_ADD_Msk           /*!< Address of the USART node */\r\n#define USART_CR2_LBDL_Pos  (5U)\r\n#define USART_CR2_LBDL_Msk  (0x1U << USART_CR2_LBDL_Pos) /*!< 0x00000020 */\r\n#define USART_CR2_LBDL      USART_CR2_LBDL_Msk           /*!< LIN Break Detection Length */\r\n#define USART_CR2_LBDIE_Pos (6U)\r\n#define USART_CR2_LBDIE_Msk (0x1U << USART_CR2_LBDIE_Pos) /*!< 0x00000040 */\r\n#define USART_CR2_LBDIE     USART_CR2_LBDIE_Msk           /*!< LIN Break Detection Interrupt Enable */\r\n#define USART_CR2_LBCL_Pos  (8U)\r\n#define USART_CR2_LBCL_Msk  (0x1U << USART_CR2_LBCL_Pos) /*!< 0x00000100 */\r\n#define USART_CR2_LBCL      USART_CR2_LBCL_Msk           /*!< Last Bit Clock pulse */\r\n#define USART_CR2_CPHA_Pos  (9U)\r\n#define USART_CR2_CPHA_Msk  (0x1U << USART_CR2_CPHA_Pos) /*!< 0x00000200 */\r\n#define USART_CR2_CPHA      USART_CR2_CPHA_Msk           /*!< Clock Phase */\r\n#define USART_CR2_CPOL_Pos  (10U)\r\n#define USART_CR2_CPOL_Msk  (0x1U << USART_CR2_CPOL_Pos) /*!< 0x00000400 */\r\n#define USART_CR2_CPOL      USART_CR2_CPOL_Msk           /*!< Clock Polarity */\r\n#define USART_CR2_CLKEN_Pos (11U)\r\n#define USART_CR2_CLKEN_Msk (0x1U << USART_CR2_CLKEN_Pos) /*!< 0x00000800 */\r\n#define USART_CR2_CLKEN     USART_CR2_CLKEN_Msk           /*!< Clock Enable */\r\n\r\n#define USART_CR2_STOP_Pos (12U)\r\n#define USART_CR2_STOP_Msk (0x3U << USART_CR2_STOP_Pos) /*!< 0x00003000 */\r\n#define USART_CR2_STOP     USART_CR2_STOP_Msk           /*!< STOP[1:0] bits (STOP bits) */\r\n#define USART_CR2_STOP_0   (0x1U << USART_CR2_STOP_Pos) /*!< 0x00001000 */\r\n#define USART_CR2_STOP_1   (0x2U << USART_CR2_STOP_Pos) /*!< 0x00002000 */\r\n\r\n#define USART_CR2_LINEN_Pos (14U)\r\n#define USART_CR2_LINEN_Msk (0x1U << USART_CR2_LINEN_Pos) /*!< 0x00004000 */\r\n#define USART_CR2_LINEN     USART_CR2_LINEN_Msk           /*!< LIN mode enable */\r\n\r\n/******************  Bit definition for USART_CR3 register  *******************/\r\n#define USART_CR3_EIE_Pos   (0U)\r\n#define USART_CR3_EIE_Msk   (0x1U << USART_CR3_EIE_Pos) /*!< 0x00000001 */\r\n#define USART_CR3_EIE       USART_CR3_EIE_Msk           /*!< Error Interrupt Enable */\r\n#define USART_CR3_IREN_Pos  (1U)\r\n#define USART_CR3_IREN_Msk  (0x1U << USART_CR3_IREN_Pos) /*!< 0x00000002 */\r\n#define USART_CR3_IREN      USART_CR3_IREN_Msk           /*!< IrDA mode Enable */\r\n#define USART_CR3_IRLP_Pos  (2U)\r\n#define USART_CR3_IRLP_Msk  (0x1U << USART_CR3_IRLP_Pos) /*!< 0x00000004 */\r\n#define USART_CR3_IRLP      USART_CR3_IRLP_Msk           /*!< IrDA Low-Power */\r\n#define USART_CR3_HDSEL_Pos (3U)\r\n#define USART_CR3_HDSEL_Msk (0x1U << USART_CR3_HDSEL_Pos) /*!< 0x00000008 */\r\n#define USART_CR3_HDSEL     USART_CR3_HDSEL_Msk           /*!< Half-Duplex Selection */\r\n#define USART_CR3_NACK_Pos  (4U)\r\n#define USART_CR3_NACK_Msk  (0x1U << USART_CR3_NACK_Pos) /*!< 0x00000010 */\r\n#define USART_CR3_NACK      USART_CR3_NACK_Msk           /*!< Smartcard NACK enable */\r\n#define USART_CR3_SCEN_Pos  (5U)\r\n#define USART_CR3_SCEN_Msk  (0x1U << USART_CR3_SCEN_Pos) /*!< 0x00000020 */\r\n#define USART_CR3_SCEN      USART_CR3_SCEN_Msk           /*!< Smartcard mode enable */\r\n#define USART_CR3_DMAR_Pos  (6U)\r\n#define USART_CR3_DMAR_Msk  (0x1U << USART_CR3_DMAR_Pos) /*!< 0x00000040 */\r\n#define USART_CR3_DMAR      USART_CR3_DMAR_Msk           /*!< DMA Enable Receiver */\r\n#define USART_CR3_DMAT_Pos  (7U)\r\n#define USART_CR3_DMAT_Msk  (0x1U << USART_CR3_DMAT_Pos) /*!< 0x00000080 */\r\n#define USART_CR3_DMAT      USART_CR3_DMAT_Msk           /*!< DMA Enable Transmitter */\r\n#define USART_CR3_RTSE_Pos  (8U)\r\n#define USART_CR3_RTSE_Msk  (0x1U << USART_CR3_RTSE_Pos) /*!< 0x00000100 */\r\n#define USART_CR3_RTSE      USART_CR3_RTSE_Msk           /*!< RTS Enable */\r\n#define USART_CR3_CTSE_Pos  (9U)\r\n#define USART_CR3_CTSE_Msk  (0x1U << USART_CR3_CTSE_Pos) /*!< 0x00000200 */\r\n#define USART_CR3_CTSE      USART_CR3_CTSE_Msk           /*!< CTS Enable */\r\n#define USART_CR3_CTSIE_Pos (10U)\r\n#define USART_CR3_CTSIE_Msk (0x1U << USART_CR3_CTSIE_Pos) /*!< 0x00000400 */\r\n#define USART_CR3_CTSIE     USART_CR3_CTSIE_Msk           /*!< CTS Interrupt Enable */\r\n\r\n/******************  Bit definition for USART_GTPR register  ******************/\r\n#define USART_GTPR_PSC_Pos (0U)\r\n#define USART_GTPR_PSC_Msk (0xFFU << USART_GTPR_PSC_Pos) /*!< 0x000000FF */\r\n#define USART_GTPR_PSC     USART_GTPR_PSC_Msk            /*!< PSC[7:0] bits (Prescaler value) */\r\n#define USART_GTPR_PSC_0   (0x01U << USART_GTPR_PSC_Pos) /*!< 0x00000001 */\r\n#define USART_GTPR_PSC_1   (0x02U << USART_GTPR_PSC_Pos) /*!< 0x00000002 */\r\n#define USART_GTPR_PSC_2   (0x04U << USART_GTPR_PSC_Pos) /*!< 0x00000004 */\r\n#define USART_GTPR_PSC_3   (0x08U << USART_GTPR_PSC_Pos) /*!< 0x00000008 */\r\n#define USART_GTPR_PSC_4   (0x10U << USART_GTPR_PSC_Pos) /*!< 0x00000010 */\r\n#define USART_GTPR_PSC_5   (0x20U << USART_GTPR_PSC_Pos) /*!< 0x00000020 */\r\n#define USART_GTPR_PSC_6   (0x40U << USART_GTPR_PSC_Pos) /*!< 0x00000040 */\r\n#define USART_GTPR_PSC_7   (0x80U << USART_GTPR_PSC_Pos) /*!< 0x00000080 */\r\n\r\n#define USART_GTPR_GT_Pos (8U)\r\n#define USART_GTPR_GT_Msk (0xFFU << USART_GTPR_GT_Pos) /*!< 0x0000FF00 */\r\n#define USART_GTPR_GT     USART_GTPR_GT_Msk            /*!< Guard time value */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                                 Debug MCU                                  */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/****************  Bit definition for DBGMCU_IDCODE register  *****************/\r\n#define DBGMCU_IDCODE_DEV_ID_Pos (0U)\r\n#define DBGMCU_IDCODE_DEV_ID_Msk (0xFFFU << DBGMCU_IDCODE_DEV_ID_Pos) /*!< 0x00000FFF */\r\n#define DBGMCU_IDCODE_DEV_ID     DBGMCU_IDCODE_DEV_ID_Msk             /*!< Device Identifier */\r\n\r\n#define DBGMCU_IDCODE_REV_ID_Pos (16U)\r\n#define DBGMCU_IDCODE_REV_ID_Msk (0xFFFFU << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0xFFFF0000 */\r\n#define DBGMCU_IDCODE_REV_ID     DBGMCU_IDCODE_REV_ID_Msk              /*!< REV_ID[15:0] bits (Revision Identifier) */\r\n#define DBGMCU_IDCODE_REV_ID_0   (0x0001U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00010000 */\r\n#define DBGMCU_IDCODE_REV_ID_1   (0x0002U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00020000 */\r\n#define DBGMCU_IDCODE_REV_ID_2   (0x0004U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00040000 */\r\n#define DBGMCU_IDCODE_REV_ID_3   (0x0008U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00080000 */\r\n#define DBGMCU_IDCODE_REV_ID_4   (0x0010U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00100000 */\r\n#define DBGMCU_IDCODE_REV_ID_5   (0x0020U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00200000 */\r\n#define DBGMCU_IDCODE_REV_ID_6   (0x0040U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00400000 */\r\n#define DBGMCU_IDCODE_REV_ID_7   (0x0080U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00800000 */\r\n#define DBGMCU_IDCODE_REV_ID_8   (0x0100U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x01000000 */\r\n#define DBGMCU_IDCODE_REV_ID_9   (0x0200U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x02000000 */\r\n#define DBGMCU_IDCODE_REV_ID_10  (0x0400U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x04000000 */\r\n#define DBGMCU_IDCODE_REV_ID_11  (0x0800U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x08000000 */\r\n#define DBGMCU_IDCODE_REV_ID_12  (0x1000U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x10000000 */\r\n#define DBGMCU_IDCODE_REV_ID_13  (0x2000U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x20000000 */\r\n#define DBGMCU_IDCODE_REV_ID_14  (0x4000U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x40000000 */\r\n#define DBGMCU_IDCODE_REV_ID_15  (0x8000U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x80000000 */\r\n\r\n/******************  Bit definition for DBGMCU_CR register  *******************/\r\n#define DBGMCU_CR_DBG_SLEEP_Pos   (0U)\r\n#define DBGMCU_CR_DBG_SLEEP_Msk   (0x1U << DBGMCU_CR_DBG_SLEEP_Pos) /*!< 0x00000001 */\r\n#define DBGMCU_CR_DBG_SLEEP       DBGMCU_CR_DBG_SLEEP_Msk           /*!< Debug Sleep Mode */\r\n#define DBGMCU_CR_DBG_STOP_Pos    (1U)\r\n#define DBGMCU_CR_DBG_STOP_Msk    (0x1U << DBGMCU_CR_DBG_STOP_Pos) /*!< 0x00000002 */\r\n#define DBGMCU_CR_DBG_STOP        DBGMCU_CR_DBG_STOP_Msk           /*!< Debug Stop Mode */\r\n#define DBGMCU_CR_DBG_STANDBY_Pos (2U)\r\n#define DBGMCU_CR_DBG_STANDBY_Msk (0x1U << DBGMCU_CR_DBG_STANDBY_Pos) /*!< 0x00000004 */\r\n#define DBGMCU_CR_DBG_STANDBY     DBGMCU_CR_DBG_STANDBY_Msk           /*!< Debug Standby mode */\r\n#define DBGMCU_CR_TRACE_IOEN_Pos  (5U)\r\n#define DBGMCU_CR_TRACE_IOEN_Msk  (0x1U << DBGMCU_CR_TRACE_IOEN_Pos) /*!< 0x00000020 */\r\n#define DBGMCU_CR_TRACE_IOEN      DBGMCU_CR_TRACE_IOEN_Msk           /*!< Trace Pin Assignment Control */\r\n\r\n#define DBGMCU_CR_TRACE_MODE_Pos (6U)\r\n#define DBGMCU_CR_TRACE_MODE_Msk (0x3U << DBGMCU_CR_TRACE_MODE_Pos) /*!< 0x000000C0 */\r\n#define DBGMCU_CR_TRACE_MODE     DBGMCU_CR_TRACE_MODE_Msk           /*!< TRACE_MODE[1:0] bits (Trace Pin Assignment Control) */\r\n#define DBGMCU_CR_TRACE_MODE_0   (0x1U << DBGMCU_CR_TRACE_MODE_Pos) /*!< 0x00000040 */\r\n#define DBGMCU_CR_TRACE_MODE_1   (0x2U << DBGMCU_CR_TRACE_MODE_Pos) /*!< 0x00000080 */\r\n\r\n#define DBGMCU_CR_DBG_IWDG_STOP_Pos          (8U)\r\n#define DBGMCU_CR_DBG_IWDG_STOP_Msk          (0x1U << DBGMCU_CR_DBG_IWDG_STOP_Pos) /*!< 0x00000100 */\r\n#define DBGMCU_CR_DBG_IWDG_STOP              DBGMCU_CR_DBG_IWDG_STOP_Msk           /*!< Debug Independent Watchdog stopped when Core is halted */\r\n#define DBGMCU_CR_DBG_WWDG_STOP_Pos          (9U)\r\n#define DBGMCU_CR_DBG_WWDG_STOP_Msk          (0x1U << DBGMCU_CR_DBG_WWDG_STOP_Pos) /*!< 0x00000200 */\r\n#define DBGMCU_CR_DBG_WWDG_STOP              DBGMCU_CR_DBG_WWDG_STOP_Msk           /*!< Debug Window Watchdog stopped when Core is halted */\r\n#define DBGMCU_CR_DBG_TIM1_STOP_Pos          (10U)\r\n#define DBGMCU_CR_DBG_TIM1_STOP_Msk          (0x1U << DBGMCU_CR_DBG_TIM1_STOP_Pos) /*!< 0x00000400 */\r\n#define DBGMCU_CR_DBG_TIM1_STOP              DBGMCU_CR_DBG_TIM1_STOP_Msk           /*!< TIM1 counter stopped when core is halted */\r\n#define DBGMCU_CR_DBG_TIM2_STOP_Pos          (11U)\r\n#define DBGMCU_CR_DBG_TIM2_STOP_Msk          (0x1U << DBGMCU_CR_DBG_TIM2_STOP_Pos) /*!< 0x00000800 */\r\n#define DBGMCU_CR_DBG_TIM2_STOP              DBGMCU_CR_DBG_TIM2_STOP_Msk           /*!< TIM2 counter stopped when core is halted */\r\n#define DBGMCU_CR_DBG_TIM3_STOP_Pos          (12U)\r\n#define DBGMCU_CR_DBG_TIM3_STOP_Msk          (0x1U << DBGMCU_CR_DBG_TIM3_STOP_Pos) /*!< 0x00001000 */\r\n#define DBGMCU_CR_DBG_TIM3_STOP              DBGMCU_CR_DBG_TIM3_STOP_Msk           /*!< TIM3 counter stopped when core is halted */\r\n#define DBGMCU_CR_DBG_TIM4_STOP_Pos          (13U)\r\n#define DBGMCU_CR_DBG_TIM4_STOP_Msk          (0x1U << DBGMCU_CR_DBG_TIM4_STOP_Pos) /*!< 0x00002000 */\r\n#define DBGMCU_CR_DBG_TIM4_STOP              DBGMCU_CR_DBG_TIM4_STOP_Msk           /*!< TIM4 counter stopped when core is halted */\r\n#define DBGMCU_CR_DBG_CAN1_STOP_Pos          (14U)\r\n#define DBGMCU_CR_DBG_CAN1_STOP_Msk          (0x1U << DBGMCU_CR_DBG_CAN1_STOP_Pos) /*!< 0x00004000 */\r\n#define DBGMCU_CR_DBG_CAN1_STOP              DBGMCU_CR_DBG_CAN1_STOP_Msk           /*!< Debug CAN1 stopped when Core is halted */\r\n#define DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT_Pos (15U)\r\n#define DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT_Msk (0x1U << DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT_Pos) /*!< 0x00008000 */\r\n#define DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT     DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT_Msk           /*!< SMBUS timeout mode stopped when Core is halted */\r\n#define DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT_Pos (16U)\r\n#define DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT_Msk (0x1U << DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT_Pos) /*!< 0x00010000 */\r\n#define DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT     DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT_Msk           /*!< SMBUS timeout mode stopped when Core is halted */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                      FLASH and Option Bytes Registers                      */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n/*******************  Bit definition for FLASH_ACR register  ******************/\r\n#define FLASH_ACR_LATENCY_Pos (0U)\r\n#define FLASH_ACR_LATENCY_Msk (0x7U << FLASH_ACR_LATENCY_Pos) /*!< 0x00000007 */\r\n#define FLASH_ACR_LATENCY     FLASH_ACR_LATENCY_Msk           /*!< LATENCY[2:0] bits (Latency) */\r\n#define FLASH_ACR_LATENCY_0   (0x1U << FLASH_ACR_LATENCY_Pos) /*!< 0x00000001 */\r\n#define FLASH_ACR_LATENCY_1   (0x2U << FLASH_ACR_LATENCY_Pos) /*!< 0x00000002 */\r\n#define FLASH_ACR_LATENCY_2   (0x4U << FLASH_ACR_LATENCY_Pos) /*!< 0x00000004 */\r\n\r\n#define FLASH_ACR_HLFCYA_Pos (3U)\r\n#define FLASH_ACR_HLFCYA_Msk (0x1U << FLASH_ACR_HLFCYA_Pos) /*!< 0x00000008 */\r\n#define FLASH_ACR_HLFCYA     FLASH_ACR_HLFCYA_Msk           /*!< Flash Half Cycle Access Enable */\r\n#define FLASH_ACR_PRFTBE_Pos (4U)\r\n#define FLASH_ACR_PRFTBE_Msk (0x1U << FLASH_ACR_PRFTBE_Pos) /*!< 0x00000010 */\r\n#define FLASH_ACR_PRFTBE     FLASH_ACR_PRFTBE_Msk           /*!< Prefetch Buffer Enable */\r\n#define FLASH_ACR_PRFTBS_Pos (5U)\r\n#define FLASH_ACR_PRFTBS_Msk (0x1U << FLASH_ACR_PRFTBS_Pos) /*!< 0x00000020 */\r\n#define FLASH_ACR_PRFTBS     FLASH_ACR_PRFTBS_Msk           /*!< Prefetch Buffer Status */\r\n\r\n/******************  Bit definition for FLASH_KEYR register  ******************/\r\n#define FLASH_KEYR_FKEYR_Pos (0U)\r\n#define FLASH_KEYR_FKEYR_Msk (0xFFFFFFFFU << FLASH_KEYR_FKEYR_Pos) /*!< 0xFFFFFFFF */\r\n#define FLASH_KEYR_FKEYR     FLASH_KEYR_FKEYR_Msk                  /*!< FPEC Key */\r\n\r\n#define RDP_KEY_Pos    (0U)\r\n#define RDP_KEY_Msk    (0xA5U << RDP_KEY_Pos) /*!< 0x000000A5 */\r\n#define RDP_KEY        RDP_KEY_Msk            /*!< RDP Key */\r\n#define FLASH_KEY1_Pos (0U)\r\n#define FLASH_KEY1_Msk (0x45670123U << FLASH_KEY1_Pos) /*!< 0x45670123 */\r\n#define FLASH_KEY1     FLASH_KEY1_Msk                  /*!< FPEC Key1 */\r\n#define FLASH_KEY2_Pos (0U)\r\n#define FLASH_KEY2_Msk (0xCDEF89ABU << FLASH_KEY2_Pos) /*!< 0xCDEF89AB */\r\n#define FLASH_KEY2     FLASH_KEY2_Msk                  /*!< FPEC Key2 */\r\n\r\n/*****************  Bit definition for FLASH_OPTKEYR register  ****************/\r\n#define FLASH_OPTKEYR_OPTKEYR_Pos (0U)\r\n#define FLASH_OPTKEYR_OPTKEYR_Msk (0xFFFFFFFFU << FLASH_OPTKEYR_OPTKEYR_Pos) /*!< 0xFFFFFFFF */\r\n#define FLASH_OPTKEYR_OPTKEYR     FLASH_OPTKEYR_OPTKEYR_Msk                  /*!< Option Byte Key */\r\n\r\n#define FLASH_OPTKEY1 FLASH_KEY1 /*!< Option Byte Key1 */\r\n#define FLASH_OPTKEY2 FLASH_KEY2 /*!< Option Byte Key2 */\r\n\r\n/******************  Bit definition for FLASH_SR register  ********************/\r\n#define FLASH_SR_BSY_Pos      (0U)\r\n#define FLASH_SR_BSY_Msk      (0x1U << FLASH_SR_BSY_Pos) /*!< 0x00000001 */\r\n#define FLASH_SR_BSY          FLASH_SR_BSY_Msk           /*!< Busy */\r\n#define FLASH_SR_PGERR_Pos    (2U)\r\n#define FLASH_SR_PGERR_Msk    (0x1U << FLASH_SR_PGERR_Pos) /*!< 0x00000004 */\r\n#define FLASH_SR_PGERR        FLASH_SR_PGERR_Msk           /*!< Programming Error */\r\n#define FLASH_SR_WRPRTERR_Pos (4U)\r\n#define FLASH_SR_WRPRTERR_Msk (0x1U << FLASH_SR_WRPRTERR_Pos) /*!< 0x00000010 */\r\n#define FLASH_SR_WRPRTERR     FLASH_SR_WRPRTERR_Msk           /*!< Write Protection Error */\r\n#define FLASH_SR_EOP_Pos      (5U)\r\n#define FLASH_SR_EOP_Msk      (0x1U << FLASH_SR_EOP_Pos) /*!< 0x00000020 */\r\n#define FLASH_SR_EOP          FLASH_SR_EOP_Msk           /*!< End of operation */\r\n\r\n/*******************  Bit definition for FLASH_CR register  *******************/\r\n#define FLASH_CR_PG_Pos     (0U)\r\n#define FLASH_CR_PG_Msk     (0x1U << FLASH_CR_PG_Pos) /*!< 0x00000001 */\r\n#define FLASH_CR_PG         FLASH_CR_PG_Msk           /*!< Programming */\r\n#define FLASH_CR_PER_Pos    (1U)\r\n#define FLASH_CR_PER_Msk    (0x1U << FLASH_CR_PER_Pos) /*!< 0x00000002 */\r\n#define FLASH_CR_PER        FLASH_CR_PER_Msk           /*!< Page Erase */\r\n#define FLASH_CR_MER_Pos    (2U)\r\n#define FLASH_CR_MER_Msk    (0x1U << FLASH_CR_MER_Pos) /*!< 0x00000004 */\r\n#define FLASH_CR_MER        FLASH_CR_MER_Msk           /*!< Mass Erase */\r\n#define FLASH_CR_OPTPG_Pos  (4U)\r\n#define FLASH_CR_OPTPG_Msk  (0x1U << FLASH_CR_OPTPG_Pos) /*!< 0x00000010 */\r\n#define FLASH_CR_OPTPG      FLASH_CR_OPTPG_Msk           /*!< Option Byte Programming */\r\n#define FLASH_CR_OPTER_Pos  (5U)\r\n#define FLASH_CR_OPTER_Msk  (0x1U << FLASH_CR_OPTER_Pos) /*!< 0x00000020 */\r\n#define FLASH_CR_OPTER      FLASH_CR_OPTER_Msk           /*!< Option Byte Erase */\r\n#define FLASH_CR_STRT_Pos   (6U)\r\n#define FLASH_CR_STRT_Msk   (0x1U << FLASH_CR_STRT_Pos) /*!< 0x00000040 */\r\n#define FLASH_CR_STRT       FLASH_CR_STRT_Msk           /*!< Start */\r\n#define FLASH_CR_LOCK_Pos   (7U)\r\n#define FLASH_CR_LOCK_Msk   (0x1U << FLASH_CR_LOCK_Pos) /*!< 0x00000080 */\r\n#define FLASH_CR_LOCK       FLASH_CR_LOCK_Msk           /*!< Lock */\r\n#define FLASH_CR_OPTWRE_Pos (9U)\r\n#define FLASH_CR_OPTWRE_Msk (0x1U << FLASH_CR_OPTWRE_Pos) /*!< 0x00000200 */\r\n#define FLASH_CR_OPTWRE     FLASH_CR_OPTWRE_Msk           /*!< Option Bytes Write Enable */\r\n#define FLASH_CR_ERRIE_Pos  (10U)\r\n#define FLASH_CR_ERRIE_Msk  (0x1U << FLASH_CR_ERRIE_Pos) /*!< 0x00000400 */\r\n#define FLASH_CR_ERRIE      FLASH_CR_ERRIE_Msk           /*!< Error Interrupt Enable */\r\n#define FLASH_CR_EOPIE_Pos  (12U)\r\n#define FLASH_CR_EOPIE_Msk  (0x1U << FLASH_CR_EOPIE_Pos) /*!< 0x00001000 */\r\n#define FLASH_CR_EOPIE      FLASH_CR_EOPIE_Msk           /*!< End of operation interrupt enable */\r\n\r\n/*******************  Bit definition for FLASH_AR register  *******************/\r\n#define FLASH_AR_FAR_Pos (0U)\r\n#define FLASH_AR_FAR_Msk (0xFFFFFFFFU << FLASH_AR_FAR_Pos) /*!< 0xFFFFFFFF */\r\n#define FLASH_AR_FAR     FLASH_AR_FAR_Msk                  /*!< Flash Address */\r\n\r\n/******************  Bit definition for FLASH_OBR register  *******************/\r\n#define FLASH_OBR_OPTERR_Pos (0U)\r\n#define FLASH_OBR_OPTERR_Msk (0x1U << FLASH_OBR_OPTERR_Pos) /*!< 0x00000001 */\r\n#define FLASH_OBR_OPTERR     FLASH_OBR_OPTERR_Msk           /*!< Option Byte Error */\r\n#define FLASH_OBR_RDPRT_Pos  (1U)\r\n#define FLASH_OBR_RDPRT_Msk  (0x1U << FLASH_OBR_RDPRT_Pos) /*!< 0x00000002 */\r\n#define FLASH_OBR_RDPRT      FLASH_OBR_RDPRT_Msk           /*!< Read protection */\r\n\r\n#define FLASH_OBR_IWDG_SW_Pos    (2U)\r\n#define FLASH_OBR_IWDG_SW_Msk    (0x1U << FLASH_OBR_IWDG_SW_Pos) /*!< 0x00000004 */\r\n#define FLASH_OBR_IWDG_SW        FLASH_OBR_IWDG_SW_Msk           /*!< IWDG SW */\r\n#define FLASH_OBR_nRST_STOP_Pos  (3U)\r\n#define FLASH_OBR_nRST_STOP_Msk  (0x1U << FLASH_OBR_nRST_STOP_Pos) /*!< 0x00000008 */\r\n#define FLASH_OBR_nRST_STOP      FLASH_OBR_nRST_STOP_Msk           /*!< nRST_STOP */\r\n#define FLASH_OBR_nRST_STDBY_Pos (4U)\r\n#define FLASH_OBR_nRST_STDBY_Msk (0x1U << FLASH_OBR_nRST_STDBY_Pos) /*!< 0x00000010 */\r\n#define FLASH_OBR_nRST_STDBY     FLASH_OBR_nRST_STDBY_Msk           /*!< nRST_STDBY */\r\n#define FLASH_OBR_USER_Pos       (2U)\r\n#define FLASH_OBR_USER_Msk       (0x7U << FLASH_OBR_USER_Pos) /*!< 0x0000001C */\r\n#define FLASH_OBR_USER           FLASH_OBR_USER_Msk           /*!< User Option Bytes */\r\n#define FLASH_OBR_DATA0_Pos      (10U)\r\n#define FLASH_OBR_DATA0_Msk      (0xFFU << FLASH_OBR_DATA0_Pos) /*!< 0x0003FC00 */\r\n#define FLASH_OBR_DATA0          FLASH_OBR_DATA0_Msk            /*!< Data0 */\r\n#define FLASH_OBR_DATA1_Pos      (18U)\r\n#define FLASH_OBR_DATA1_Msk      (0xFFU << FLASH_OBR_DATA1_Pos) /*!< 0x03FC0000 */\r\n#define FLASH_OBR_DATA1          FLASH_OBR_DATA1_Msk            /*!< Data1 */\r\n\r\n/******************  Bit definition for FLASH_WRPR register  ******************/\r\n#define FLASH_WRPR_WRP_Pos (0U)\r\n#define FLASH_WRPR_WRP_Msk (0xFFFFFFFFU << FLASH_WRPR_WRP_Pos) /*!< 0xFFFFFFFF */\r\n#define FLASH_WRPR_WRP     FLASH_WRPR_WRP_Msk                  /*!< Write Protect */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/******************  Bit definition for FLASH_RDP register  *******************/\r\n#define FLASH_RDP_RDP_Pos  (0U)\r\n#define FLASH_RDP_RDP_Msk  (0xFFU << FLASH_RDP_RDP_Pos) /*!< 0x000000FF */\r\n#define FLASH_RDP_RDP      FLASH_RDP_RDP_Msk            /*!< Read protection option byte */\r\n#define FLASH_RDP_nRDP_Pos (8U)\r\n#define FLASH_RDP_nRDP_Msk (0xFFU << FLASH_RDP_nRDP_Pos) /*!< 0x0000FF00 */\r\n#define FLASH_RDP_nRDP     FLASH_RDP_nRDP_Msk            /*!< Read protection complemented option byte */\r\n\r\n/******************  Bit definition for FLASH_USER register  ******************/\r\n#define FLASH_USER_USER_Pos  (16U)\r\n#define FLASH_USER_USER_Msk  (0xFFU << FLASH_USER_USER_Pos) /*!< 0x00FF0000 */\r\n#define FLASH_USER_USER      FLASH_USER_USER_Msk            /*!< User option byte */\r\n#define FLASH_USER_nUSER_Pos (24U)\r\n#define FLASH_USER_nUSER_Msk (0xFFU << FLASH_USER_nUSER_Pos) /*!< 0xFF000000 */\r\n#define FLASH_USER_nUSER     FLASH_USER_nUSER_Msk            /*!< User complemented option byte */\r\n\r\n/******************  Bit definition for FLASH_Data0 register  *****************/\r\n#define FLASH_DATA0_DATA0_Pos  (0U)\r\n#define FLASH_DATA0_DATA0_Msk  (0xFFU << FLASH_DATA0_DATA0_Pos) /*!< 0x000000FF */\r\n#define FLASH_DATA0_DATA0      FLASH_DATA0_DATA0_Msk            /*!< User data storage option byte */\r\n#define FLASH_DATA0_nDATA0_Pos (8U)\r\n#define FLASH_DATA0_nDATA0_Msk (0xFFU << FLASH_DATA0_nDATA0_Pos) /*!< 0x0000FF00 */\r\n#define FLASH_DATA0_nDATA0     FLASH_DATA0_nDATA0_Msk            /*!< User data storage complemented option byte */\r\n\r\n/******************  Bit definition for FLASH_Data1 register  *****************/\r\n#define FLASH_DATA1_DATA1_Pos  (16U)\r\n#define FLASH_DATA1_DATA1_Msk  (0xFFU << FLASH_DATA1_DATA1_Pos) /*!< 0x00FF0000 */\r\n#define FLASH_DATA1_DATA1      FLASH_DATA1_DATA1_Msk            /*!< User data storage option byte */\r\n#define FLASH_DATA1_nDATA1_Pos (24U)\r\n#define FLASH_DATA1_nDATA1_Msk (0xFFU << FLASH_DATA1_nDATA1_Pos) /*!< 0xFF000000 */\r\n#define FLASH_DATA1_nDATA1     FLASH_DATA1_nDATA1_Msk            /*!< User data storage complemented option byte */\r\n\r\n/******************  Bit definition for FLASH_WRP0 register  ******************/\r\n#define FLASH_WRP0_WRP0_Pos  (0U)\r\n#define FLASH_WRP0_WRP0_Msk  (0xFFU << FLASH_WRP0_WRP0_Pos) /*!< 0x000000FF */\r\n#define FLASH_WRP0_WRP0      FLASH_WRP0_WRP0_Msk            /*!< Flash memory write protection option bytes */\r\n#define FLASH_WRP0_nWRP0_Pos (8U)\r\n#define FLASH_WRP0_nWRP0_Msk (0xFFU << FLASH_WRP0_nWRP0_Pos) /*!< 0x0000FF00 */\r\n#define FLASH_WRP0_nWRP0     FLASH_WRP0_nWRP0_Msk            /*!< Flash memory write protection complemented option bytes */\r\n\r\n/******************  Bit definition for FLASH_WRP1 register  ******************/\r\n#define FLASH_WRP1_WRP1_Pos  (16U)\r\n#define FLASH_WRP1_WRP1_Msk  (0xFFU << FLASH_WRP1_WRP1_Pos) /*!< 0x00FF0000 */\r\n#define FLASH_WRP1_WRP1      FLASH_WRP1_WRP1_Msk            /*!< Flash memory write protection option bytes */\r\n#define FLASH_WRP1_nWRP1_Pos (24U)\r\n#define FLASH_WRP1_nWRP1_Msk (0xFFU << FLASH_WRP1_nWRP1_Pos) /*!< 0xFF000000 */\r\n#define FLASH_WRP1_nWRP1     FLASH_WRP1_nWRP1_Msk            /*!< Flash memory write protection complemented option bytes */\r\n\r\n/******************  Bit definition for FLASH_WRP2 register  ******************/\r\n#define FLASH_WRP2_WRP2_Pos  (0U)\r\n#define FLASH_WRP2_WRP2_Msk  (0xFFU << FLASH_WRP2_WRP2_Pos) /*!< 0x000000FF */\r\n#define FLASH_WRP2_WRP2      FLASH_WRP2_WRP2_Msk            /*!< Flash memory write protection option bytes */\r\n#define FLASH_WRP2_nWRP2_Pos (8U)\r\n#define FLASH_WRP2_nWRP2_Msk (0xFFU << FLASH_WRP2_nWRP2_Pos) /*!< 0x0000FF00 */\r\n#define FLASH_WRP2_nWRP2     FLASH_WRP2_nWRP2_Msk            /*!< Flash memory write protection complemented option bytes */\r\n\r\n/******************  Bit definition for FLASH_WRP3 register  ******************/\r\n#define FLASH_WRP3_WRP3_Pos  (16U)\r\n#define FLASH_WRP3_WRP3_Msk  (0xFFU << FLASH_WRP3_WRP3_Pos) /*!< 0x00FF0000 */\r\n#define FLASH_WRP3_WRP3      FLASH_WRP3_WRP3_Msk            /*!< Flash memory write protection option bytes */\r\n#define FLASH_WRP3_nWRP3_Pos (24U)\r\n#define FLASH_WRP3_nWRP3_Msk (0xFFU << FLASH_WRP3_nWRP3_Pos) /*!< 0xFF000000 */\r\n#define FLASH_WRP3_nWRP3     FLASH_WRP3_nWRP3_Msk            /*!< Flash memory write protection complemented option bytes */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Exported_macro\r\n * @{\r\n */\r\n\r\n/****************************** ADC Instances *********************************/\r\n#define IS_ADC_ALL_INSTANCE(INSTANCE) (((INSTANCE) == ADC1) || ((INSTANCE) == ADC2))\r\n\r\n#define IS_ADC_COMMON_INSTANCE(INSTANCE) ((INSTANCE) == ADC12_COMMON)\r\n\r\n#define IS_ADC_MULTIMODE_MASTER_INSTANCE(INSTANCE) ((INSTANCE) == ADC1)\r\n\r\n#define IS_ADC_DMA_CAPABILITY_INSTANCE(INSTANCE) ((INSTANCE) == ADC1)\r\n\r\n/****************************** CAN Instances *********************************/\r\n#define IS_CAN_ALL_INSTANCE(INSTANCE) ((INSTANCE) == CAN1)\r\n\r\n/****************************** CRC Instances *********************************/\r\n#define IS_CRC_ALL_INSTANCE(INSTANCE) ((INSTANCE) == CRC)\r\n\r\n/****************************** DAC Instances *********************************/\r\n\r\n/****************************** DMA Instances *********************************/\r\n#define IS_DMA_ALL_INSTANCE(INSTANCE)                                                                                                                                                                 \\\r\n  (((INSTANCE) == DMA1_Channel1) || ((INSTANCE) == DMA1_Channel2) || ((INSTANCE) == DMA1_Channel3) || ((INSTANCE) == DMA1_Channel4) || ((INSTANCE) == DMA1_Channel5) || ((INSTANCE) == DMA1_Channel6) \\\r\n   || ((INSTANCE) == DMA1_Channel7))\r\n\r\n/******************************* GPIO Instances *******************************/\r\n#define IS_GPIO_ALL_INSTANCE(INSTANCE) (((INSTANCE) == GPIOA) || ((INSTANCE) == GPIOB) || ((INSTANCE) == GPIOC) || ((INSTANCE) == GPIOD) || ((INSTANCE) == GPIOE))\r\n\r\n/**************************** GPIO Alternate Function Instances ***************/\r\n#define IS_GPIO_AF_INSTANCE(INSTANCE) IS_GPIO_ALL_INSTANCE(INSTANCE)\r\n\r\n/**************************** GPIO Lock Instances *****************************/\r\n#define IS_GPIO_LOCK_INSTANCE(INSTANCE) IS_GPIO_ALL_INSTANCE(INSTANCE)\r\n\r\n/******************************** I2C Instances *******************************/\r\n#define IS_I2C_ALL_INSTANCE(INSTANCE) (((INSTANCE) == I2C1) || ((INSTANCE) == I2C2))\r\n\r\n/******************************* SMBUS Instances ******************************/\r\n#define IS_SMBUS_ALL_INSTANCE IS_I2C_ALL_INSTANCE\r\n\r\n/****************************** IWDG Instances ********************************/\r\n#define IS_IWDG_ALL_INSTANCE(INSTANCE) ((INSTANCE) == IWDG)\r\n\r\n/******************************** SPI Instances *******************************/\r\n#define IS_SPI_ALL_INSTANCE(INSTANCE) (((INSTANCE) == SPI1) || ((INSTANCE) == SPI2))\r\n\r\n/****************************** START TIM Instances ***************************/\r\n/****************************** TIM Instances *********************************/\r\n#define IS_TIM_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_ADVANCED_INSTANCE(INSTANCE) ((INSTANCE) == TIM1)\r\n\r\n#define IS_TIM_CC1_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CC2_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CC3_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CC4_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CLOCKSOURCE_TIX_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_OCXREF_CLEAR_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_ENCODER_INTERFACE_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_XOR_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_MASTER_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_SLAVE_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_SYNCHRO_INSTANCE(INSTANCE) IS_TIM_MASTER_INSTANCE(INSTANCE)\r\n\r\n#define IS_TIM_DMABURST_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_BREAK_INSTANCE(INSTANCE) ((INSTANCE) == TIM1)\r\n\r\n#define IS_TIM_CCX_INSTANCE(INSTANCE, CHANNEL)                                                                                                                 \\\r\n  ((((INSTANCE) == TIM1) && (((CHANNEL) == TIM_CHANNEL_1) || ((CHANNEL) == TIM_CHANNEL_2) || ((CHANNEL) == TIM_CHANNEL_3) || ((CHANNEL) == TIM_CHANNEL_4)))    \\\r\n   || (((INSTANCE) == TIM2) && (((CHANNEL) == TIM_CHANNEL_1) || ((CHANNEL) == TIM_CHANNEL_2) || ((CHANNEL) == TIM_CHANNEL_3) || ((CHANNEL) == TIM_CHANNEL_4))) \\\r\n   || (((INSTANCE) == TIM3) && (((CHANNEL) == TIM_CHANNEL_1) || ((CHANNEL) == TIM_CHANNEL_2) || ((CHANNEL) == TIM_CHANNEL_3) || ((CHANNEL) == TIM_CHANNEL_4))) \\\r\n   || (((INSTANCE) == TIM4) && (((CHANNEL) == TIM_CHANNEL_1) || ((CHANNEL) == TIM_CHANNEL_2) || ((CHANNEL) == TIM_CHANNEL_3) || ((CHANNEL) == TIM_CHANNEL_4))))\r\n\r\n#define IS_TIM_CCXN_INSTANCE(INSTANCE, CHANNEL) (((INSTANCE) == TIM1) && (((CHANNEL) == TIM_CHANNEL_1) || ((CHANNEL) == TIM_CHANNEL_2) || ((CHANNEL) == TIM_CHANNEL_3)))\r\n\r\n#define IS_TIM_COUNTER_MODE_SELECT_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_REPETITION_COUNTER_INSTANCE(INSTANCE) ((INSTANCE) == TIM1)\r\n\r\n#define IS_TIM_CLOCK_DIVISION_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_DMA_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_DMA_CC_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_COMMUTATION_EVENT_INSTANCE(INSTANCE) ((INSTANCE) == TIM1)\r\n\r\n#define IS_TIM_ETR_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_32B_COUNTER_INSTANCE(INSTANCE) 0U\r\n\r\n/****************************** END TIM Instances *****************************/\r\n\r\n/******************** USART Instances : Synchronous mode **********************/\r\n#define IS_USART_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/******************** UART Instances : Asynchronous mode **********************/\r\n#define IS_UART_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/******************** UART Instances : Half-Duplex mode **********************/\r\n#define IS_UART_HALFDUPLEX_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/******************** UART Instances : LIN mode **********************/\r\n#define IS_UART_LIN_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/****************** UART Instances : Hardware Flow control ********************/\r\n#define IS_UART_HWFLOW_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/********************* UART Instances : Smard card mode ***********************/\r\n#define IS_SMARTCARD_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/*********************** UART Instances : IRDA mode ***************************/\r\n#define IS_IRDA_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/***************** UART Instances : Multi-Processor mode **********************/\r\n#define IS_UART_MULTIPROCESSOR_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/***************** UART Instances : DMA mode available **********************/\r\n#define IS_UART_DMA_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/****************************** RTC Instances *********************************/\r\n#define IS_RTC_ALL_INSTANCE(INSTANCE) ((INSTANCE) == RTC)\r\n\r\n/**************************** WWDG Instances *****************************/\r\n#define IS_WWDG_ALL_INSTANCE(INSTANCE) ((INSTANCE) == WWDG)\r\n\r\n/****************************** USB Instances ********************************/\r\n#define IS_USB_ALL_INSTANCE(INSTANCE) ((INSTANCE) == USB)\r\n\r\n#define RCC_HSE_MIN 4000000U\r\n#define RCC_HSE_MAX 16000000U\r\n\r\n#define RCC_MAX_FREQUENCY 72000000U\r\n\r\n/**\r\n * @}\r\n */\r\n/******************************************************************************/\r\n/*  For a painless codes migration between the STM32F1xx device product       */\r\n/*  lines, the aliases defined below are put in place to overcome the         */\r\n/*  differences in the interrupt handlers and IRQn definitions.               */\r\n/*  No need to update developed interrupt code when moving across             */\r\n/*  product lines within the same STM32F1 Family                              */\r\n/******************************************************************************/\r\n\r\n/* Aliases for __IRQn */\r\n#define ADC1_IRQn               ADC1_2_IRQn\r\n#define TIM9_IRQn               TIM1_BRK_IRQn\r\n#define TIM1_BRK_TIM9_IRQn      TIM1_BRK_IRQn\r\n#define TIM1_BRK_TIM15_IRQn     TIM1_BRK_IRQn\r\n#define TIM1_TRG_COM_TIM17_IRQn TIM1_TRG_COM_IRQn\r\n#define TIM1_TRG_COM_TIM11_IRQn TIM1_TRG_COM_IRQn\r\n#define TIM11_IRQn              TIM1_TRG_COM_IRQn\r\n#define TIM1_UP_TIM10_IRQn      TIM1_UP_IRQn\r\n#define TIM1_UP_TIM16_IRQn      TIM1_UP_IRQn\r\n#define TIM10_IRQn              TIM1_UP_IRQn\r\n#define OTG_FS_WKUP_IRQn        USBWakeUp_IRQn\r\n#define CEC_IRQn                USBWakeUp_IRQn\r\n#define USB_HP_IRQn             USB_HP_CAN1_TX_IRQn\r\n#define CAN1_TX_IRQn            USB_HP_CAN1_TX_IRQn\r\n#define CAN1_RX0_IRQn           USB_LP_CAN1_RX0_IRQn\r\n#define USB_LP_IRQn             USB_LP_CAN1_RX0_IRQn\r\n\r\n/* Aliases for __IRQHandler */\r\n#define ADC1_IRQHandler               ADC1_2_IRQHandler\r\n#define TIM9_IRQHandler               TIM1_BRK_IRQHandler\r\n#define TIM1_BRK_TIM9_IRQHandler      TIM1_BRK_IRQHandler\r\n#define TIM1_BRK_TIM15_IRQHandler     TIM1_BRK_IRQHandler\r\n#define TIM1_TRG_COM_TIM17_IRQHandler TIM1_TRG_COM_IRQHandler\r\n#define TIM1_TRG_COM_TIM11_IRQHandler TIM1_TRG_COM_IRQHandler\r\n#define TIM11_IRQHandler              TIM1_TRG_COM_IRQHandler\r\n#define TIM1_UP_TIM10_IRQHandler      TIM1_UP_IRQHandler\r\n#define TIM1_UP_TIM16_IRQHandler      TIM1_UP_IRQHandler\r\n#define TIM10_IRQHandler              TIM1_UP_IRQHandler\r\n#define OTG_FS_WKUP_IRQHandler        USBWakeUp_IRQHandler\r\n#define CEC_IRQHandler                USBWakeUp_IRQHandler\r\n#define USB_HP_IRQHandler             USB_HP_CAN1_TX_IRQHandler\r\n#define CAN1_TX_IRQHandler            USB_HP_CAN1_TX_IRQHandler\r\n#define CAN1_RX0_IRQHandler           USB_LP_CAN1_RX0_IRQHandler\r\n#define USB_LP_IRQHandler             USB_LP_CAN1_RX0_IRQHandler\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif /* __cplusplus */\r\n\r\n#endif /* __STM32F103xB_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx.h\r\n * @author  MCD Application Team\r\n * @version V4.2.0\r\n * @date    31-March-2017\r\n * @brief   CMSIS STM32F1xx Device Peripheral Access Layer Header File.\r\n *\r\n *          The file is the unique include file that the application programmer\r\n *          is using in the C source code, usually in main.c. This file contains:\r\n *            - Configuration section that allows to select:\r\n *              - The STM32F1xx device used in the target application\r\n *              - To use or not the peripherals drivers in application code(i.e.\r\n *                code will be based on direct access to peripherals registers\r\n *                rather than drivers API), this option is controlled by\r\n *                \"#define USE_HAL_DRIVER\"\r\n *\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/** @addtogroup CMSIS\r\n * @{\r\n */\r\n\r\n/** @addtogroup stm32f1xx\r\n * @{\r\n */\r\n\r\n#ifndef __STM32F1XX_H\r\n#define __STM32F1XX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif /* __cplusplus */\r\n\r\n/** @addtogroup Library_configuration_section\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief STM32 Family\r\n */\r\n#if !defined(STM32F1)\r\n#define STM32F1\r\n#endif /* STM32F1 */\r\n\r\n/* Uncomment the line below according to the target STM32L device used in your\r\n   application\r\n  */\r\n\r\n#if !defined(STM32F100xB) && !defined(STM32F100xE) && !defined(STM32F101x6) && !defined(STM32F101xB) && !defined(STM32F101xE) && !defined(STM32F101xG) && !defined(STM32F102x6) \\\r\n    && !defined(STM32F102xB) && !defined(STM32F103x6) && !defined(STM32F103xB) && !defined(STM32F103xE) && !defined(STM32F103xG) && !defined(STM32F105xC) && !defined(STM32F107xC)\r\n/* #define STM32F100xB  */ /*!< STM32F100C4, STM32F100R4, STM32F100C6, STM32F100R6, STM32F100C8, STM32F100R8, STM32F100V8, STM32F100CB, STM32F100RB and STM32F100VB */\r\n/* #define STM32F100xE */  /*!< STM32F100RC, STM32F100VC, STM32F100ZC, STM32F100RD, STM32F100VD, STM32F100ZD, STM32F100RE, STM32F100VE and STM32F100ZE */\r\n/* #define STM32F101x6  */ /*!< STM32F101C4, STM32F101R4, STM32F101T4, STM32F101C6, STM32F101R6 and STM32F101T6 Devices */\r\n/* #define STM32F101xB  */ /*!< STM32F101C8, STM32F101R8, STM32F101T8, STM32F101V8, STM32F101CB, STM32F101RB, STM32F101TB and STM32F101VB */\r\n/* #define STM32F101xE */  /*!< STM32F101RC, STM32F101VC, STM32F101ZC, STM32F101RD, STM32F101VD, STM32F101ZD, STM32F101RE, STM32F101VE and STM32F101ZE */\r\n/* #define STM32F101xG  */ /*!< STM32F101RF, STM32F101VF, STM32F101ZF, STM32F101RG, STM32F101VG and STM32F101ZG */\r\n/* #define STM32F102x6 */  /*!< STM32F102C4, STM32F102R4, STM32F102C6 and STM32F102R6 */\r\n/* #define STM32F102xB  */ /*!< STM32F102C8, STM32F102R8, STM32F102CB and STM32F102RB */\r\n/* #define STM32F103x6  */ /*!< STM32F103C4, STM32F103R4, STM32F103T4, STM32F103C6, STM32F103R6 and STM32F103T6 */\r\n/* #define STM32F103xB  */ /*!< STM32F103C8, STM32F103R8, STM32F103T8, STM32F103V8, STM32F103CB, STM32F103RB, STM32F103TB and STM32F103VB */\r\n/* #define STM32F103xE */  /*!< STM32F103RC, STM32F103VC, STM32F103ZC, STM32F103RD, STM32F103VD, STM32F103ZD, STM32F103RE, STM32F103VE and STM32F103ZE */\r\n/* #define STM32F103xG  */ /*!< STM32F103RF, STM32F103VF, STM32F103ZF, STM32F103RG, STM32F103VG and STM32F103ZG */\r\n/* #define STM32F105xC */  /*!< STM32F105R8, STM32F105V8, STM32F105RB, STM32F105VB, STM32F105RC and STM32F105VC */\r\n/* #define STM32F107xC  */ /*!< STM32F107RB, STM32F107VB, STM32F107RC and STM32F107VC */\r\n#endif\r\n\r\n/*  Tip: To avoid modifying this file each time you need to switch between these\r\n        devices, you can define the device in your toolchain compiler preprocessor.\r\n  */\r\n\r\n#if !defined(USE_HAL_DRIVER)\r\n/**\r\n * @brief Comment the line below if you will not use the peripherals drivers.\r\n   In this case, these drivers will not be included and the application code will\r\n   be based on direct access to peripherals registers\r\n   */\r\n/*#define USE_HAL_DRIVER */\r\n#endif /* USE_HAL_DRIVER */\r\n\r\n/**\r\n * @brief CMSIS Device version number V4.2.0\r\n */\r\n#define __STM32F1_CMSIS_VERSION_MAIN (0x04) /*!< [31:24] main version */\r\n#define __STM32F1_CMSIS_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */\r\n#define __STM32F1_CMSIS_VERSION_SUB2 (0x00) /*!< [15:8]  sub2 version */\r\n#define __STM32F1_CMSIS_VERSION_RC   (0x00) /*!< [7:0]  release candidate */\r\n#define __STM32F1_CMSIS_VERSION      ((__STM32F1_CMSIS_VERSION_MAIN << 24) | (__STM32F1_CMSIS_VERSION_SUB1 << 16) | (__STM32F1_CMSIS_VERSION_SUB2 << 8) | (__STM32F1_CMSIS_VERSION_RC))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Device_Included\r\n * @{\r\n */\r\n\r\n#if defined(STM32F100xB)\r\n#include \"stm32f100xb.h\"\r\n#elif defined(STM32F100xE)\r\n#include \"stm32f100xe.h\"\r\n#elif defined(STM32F101x6)\r\n#include \"stm32f101x6.h\"\r\n#elif defined(STM32F101xB)\r\n#include \"stm32f101xb.h\"\r\n#elif defined(STM32F101xE)\r\n#include \"stm32f101xe.h\"\r\n#elif defined(STM32F101xG)\r\n#include \"stm32f101xg.h\"\r\n#elif defined(STM32F102x6)\r\n#include \"stm32f102x6.h\"\r\n#elif defined(STM32F102xB)\r\n#include \"stm32f102xb.h\"\r\n#elif defined(STM32F103x6)\r\n#include \"stm32f103x6.h\"\r\n#elif defined(STM32F103xB)\r\n#include \"stm32f103xb.h\"\r\n#elif defined(STM32F103xE)\r\n#include \"stm32f103xe.h\"\r\n#elif defined(STM32F103xG)\r\n#include \"stm32f103xg.h\"\r\n#elif defined(STM32F105xC)\r\n#include \"stm32f105xc.h\"\r\n#elif defined(STM32F107xC)\r\n#include \"stm32f107xc.h\"\r\n#else\r\n#error \"Please select first the target STM32F1xx device used in your application (in stm32f1xx.h file)\"\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Exported_types\r\n * @{\r\n */\r\ntypedef enum { RESET = 0, SET = !RESET } FlagStatus, ITStatus;\r\n\r\ntypedef enum { DISABLE = 0, ENABLE = !DISABLE } FunctionalState;\r\n#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))\r\n\r\ntypedef enum { ERROR = 0, SUCCESS = !ERROR } ErrorStatus;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Exported_macros\r\n * @{\r\n */\r\n#define SET_BIT(REG, BIT) ((REG) |= (BIT))\r\n\r\n#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))\r\n\r\n#define READ_BIT(REG, BIT) ((REG) & (BIT))\r\n\r\n#define CLEAR_REG(REG) ((REG) = (0x0))\r\n\r\n#define WRITE_REG(REG, VAL) ((REG) = (VAL))\r\n\r\n#define READ_REG(REG) ((REG))\r\n\r\n#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))\r\n\r\n#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(USE_HAL_DRIVER)\r\n#include \"stm32f1xx_hal.h\"\r\n#endif /* USE_HAL_DRIVER */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif /* __cplusplus */\r\n\r\n#endif /* __STM32F1xx_H */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    system_stm32f10x.h\r\n * @author  MCD Application Team\r\n * @version V4.2.0\r\n * @date    31-March-2017\r\n * @brief   CMSIS Cortex-M3 Device Peripheral Access Layer System Header File.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/** @addtogroup CMSIS\r\n * @{\r\n */\r\n\r\n/** @addtogroup stm32f10x_system\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief Define to prevent recursive inclusion\r\n */\r\n#ifndef __SYSTEM_STM32F10X_H\r\n#define __SYSTEM_STM32F10X_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/** @addtogroup STM32F10x_System_Includes\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup STM32F10x_System_Exported_types\r\n * @{\r\n */\r\n\r\nextern uint32_t      SystemCoreClock;    /*!< System Clock Frequency (Core Clock) */\r\nextern const uint8_t AHBPrescTable[16U]; /*!< AHB prescalers table values */\r\nextern const uint8_t APBPrescTable[8U];  /*!< APB prescalers table values */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup STM32F10x_System_Exported_Constants\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup STM32F10x_System_Exported_Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup STM32F10x_System_Exported_Functions\r\n * @{\r\n */\r\n\r\nextern void SystemInit(void);\r\nextern void SystemCoreClockUpdate(void);\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /*__SYSTEM_STM32F10X_H */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Include/arm_common_tables.h",
    "content": "/* ----------------------------------------------------------------------\r\n * Copyright (C) 2010-2014 ARM Limited. All rights reserved.\r\n *\r\n * $Date:        19. October 2015\r\n * $Revision: \tV.1.4.5 a\r\n *\r\n * Project: \t    CMSIS DSP Library\r\n * Title:\t    arm_common_tables.h\r\n *\r\n * Description:\tThis file has extern declaration for common tables like Bitreverse, reciprocal etc which are used across different functions\r\n *\r\n * Target Processor: Cortex-M4/Cortex-M3\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions\r\n * are met:\r\n *   - Redistributions of source code must retain the above copyright\r\n *     notice, this list of conditions and the following disclaimer.\r\n *   - Redistributions in binary form must reproduce the above copyright\r\n *     notice, this list of conditions and the following disclaimer in\r\n *     the documentation and/or other materials provided with the\r\n *     distribution.\r\n *   - Neither the name of ARM LIMITED nor the names of its contributors\r\n *     may be used to endorse or promote products derived from this\r\n *     software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\r\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\r\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\r\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r\n * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * -------------------------------------------------------------------- */\r\n\r\n#ifndef _ARM_COMMON_TABLES_H\r\n#define _ARM_COMMON_TABLES_H\r\n\r\n#include \"arm_math.h\"\r\n\r\nextern const uint16_t armBitRevTable[1024];\r\nextern const q15_t    armRecipTableQ15[64];\r\nextern const q31_t    armRecipTableQ31[64];\r\n/* extern const q31_t realCoefAQ31[1024]; */\r\n/* extern const q31_t realCoefBQ31[1024]; */\r\nextern const float32_t twiddleCoef_16[32];\r\nextern const float32_t twiddleCoef_32[64];\r\nextern const float32_t twiddleCoef_64[128];\r\nextern const float32_t twiddleCoef_128[256];\r\nextern const float32_t twiddleCoef_256[512];\r\nextern const float32_t twiddleCoef_512[1024];\r\nextern const float32_t twiddleCoef_1024[2048];\r\nextern const float32_t twiddleCoef_2048[4096];\r\nextern const float32_t twiddleCoef_4096[8192];\r\n#define twiddleCoef twiddleCoef_4096\r\nextern const q31_t     twiddleCoef_16_q31[24];\r\nextern const q31_t     twiddleCoef_32_q31[48];\r\nextern const q31_t     twiddleCoef_64_q31[96];\r\nextern const q31_t     twiddleCoef_128_q31[192];\r\nextern const q31_t     twiddleCoef_256_q31[384];\r\nextern const q31_t     twiddleCoef_512_q31[768];\r\nextern const q31_t     twiddleCoef_1024_q31[1536];\r\nextern const q31_t     twiddleCoef_2048_q31[3072];\r\nextern const q31_t     twiddleCoef_4096_q31[6144];\r\nextern const q15_t     twiddleCoef_16_q15[24];\r\nextern const q15_t     twiddleCoef_32_q15[48];\r\nextern const q15_t     twiddleCoef_64_q15[96];\r\nextern const q15_t     twiddleCoef_128_q15[192];\r\nextern const q15_t     twiddleCoef_256_q15[384];\r\nextern const q15_t     twiddleCoef_512_q15[768];\r\nextern const q15_t     twiddleCoef_1024_q15[1536];\r\nextern const q15_t     twiddleCoef_2048_q15[3072];\r\nextern const q15_t     twiddleCoef_4096_q15[6144];\r\nextern const float32_t twiddleCoef_rfft_32[32];\r\nextern const float32_t twiddleCoef_rfft_64[64];\r\nextern const float32_t twiddleCoef_rfft_128[128];\r\nextern const float32_t twiddleCoef_rfft_256[256];\r\nextern const float32_t twiddleCoef_rfft_512[512];\r\nextern const float32_t twiddleCoef_rfft_1024[1024];\r\nextern const float32_t twiddleCoef_rfft_2048[2048];\r\nextern const float32_t twiddleCoef_rfft_4096[4096];\r\n\r\n/* floating-point bit reversal tables */\r\n#define ARMBITREVINDEXTABLE__16_TABLE_LENGTH ((uint16_t)20)\r\n#define ARMBITREVINDEXTABLE__32_TABLE_LENGTH ((uint16_t)48)\r\n#define ARMBITREVINDEXTABLE__64_TABLE_LENGTH ((uint16_t)56)\r\n#define ARMBITREVINDEXTABLE_128_TABLE_LENGTH ((uint16_t)208)\r\n#define ARMBITREVINDEXTABLE_256_TABLE_LENGTH ((uint16_t)440)\r\n#define ARMBITREVINDEXTABLE_512_TABLE_LENGTH ((uint16_t)448)\r\n#define ARMBITREVINDEXTABLE1024_TABLE_LENGTH ((uint16_t)1800)\r\n#define ARMBITREVINDEXTABLE2048_TABLE_LENGTH ((uint16_t)3808)\r\n#define ARMBITREVINDEXTABLE4096_TABLE_LENGTH ((uint16_t)4032)\r\n\r\nextern const uint16_t armBitRevIndexTable16[ARMBITREVINDEXTABLE__16_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable32[ARMBITREVINDEXTABLE__32_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable64[ARMBITREVINDEXTABLE__64_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable128[ARMBITREVINDEXTABLE_128_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable256[ARMBITREVINDEXTABLE_256_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable512[ARMBITREVINDEXTABLE_512_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable1024[ARMBITREVINDEXTABLE1024_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable2048[ARMBITREVINDEXTABLE2048_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable4096[ARMBITREVINDEXTABLE4096_TABLE_LENGTH];\r\n\r\n/* fixed-point bit reversal tables */\r\n#define ARMBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH ((uint16_t)12)\r\n#define ARMBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH ((uint16_t)24)\r\n#define ARMBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH ((uint16_t)56)\r\n#define ARMBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH ((uint16_t)112)\r\n#define ARMBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH ((uint16_t)240)\r\n#define ARMBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH ((uint16_t)480)\r\n#define ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH ((uint16_t)992)\r\n#define ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH ((uint16_t)1984)\r\n#define ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH ((uint16_t)4032)\r\n\r\nextern const uint16_t armBitRevIndexTable_fixed_16[ARMBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable_fixed_32[ARMBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable_fixed_64[ARMBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable_fixed_128[ARMBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable_fixed_256[ARMBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable_fixed_512[ARMBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable_fixed_1024[ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable_fixed_2048[ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable_fixed_4096[ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH];\r\n\r\n/* Tables for Fast Math Sine and Cosine */\r\nextern const float32_t sinTable_f32[FAST_MATH_TABLE_SIZE + 1];\r\nextern const q31_t     sinTable_q31[FAST_MATH_TABLE_SIZE + 1];\r\nextern const q15_t     sinTable_q15[FAST_MATH_TABLE_SIZE + 1];\r\n\r\n#endif /*  ARM_COMMON_TABLES_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Include/arm_const_structs.h",
    "content": "/* ----------------------------------------------------------------------\r\n * Copyright (C) 2010-2014 ARM Limited. All rights reserved.\r\n *\r\n * $Date:        19. March 2015\r\n * $Revision: \tV.1.4.5\r\n *\r\n * Project: \t    CMSIS DSP Library\r\n * Title:\t    arm_const_structs.h\r\n *\r\n * Description:\tThis file has constant structs that are initialized for\r\n *              user convenience.  For example, some can be given as\r\n *              arguments to the arm_cfft_f32() function.\r\n *\r\n * Target Processor: Cortex-M4/Cortex-M3\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions\r\n * are met:\r\n *   - Redistributions of source code must retain the above copyright\r\n *     notice, this list of conditions and the following disclaimer.\r\n *   - Redistributions in binary form must reproduce the above copyright\r\n *     notice, this list of conditions and the following disclaimer in\r\n *     the documentation and/or other materials provided with the\r\n *     distribution.\r\n *   - Neither the name of ARM LIMITED nor the names of its contributors\r\n *     may be used to endorse or promote products derived from this\r\n *     software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\r\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\r\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\r\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r\n * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * -------------------------------------------------------------------- */\r\n\r\n#ifndef _ARM_CONST_STRUCTS_H\r\n#define _ARM_CONST_STRUCTS_H\r\n\r\n#include \"arm_common_tables.h\"\r\n#include \"arm_math.h\"\r\n\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len16;\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len32;\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len64;\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len128;\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len256;\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len512;\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len1024;\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len2048;\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len4096;\r\n\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len16;\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len32;\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len64;\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len128;\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len256;\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len512;\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len1024;\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len2048;\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len4096;\r\n\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len16;\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len32;\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len64;\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len128;\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len256;\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len512;\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len1024;\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len2048;\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len4096;\r\n\r\n#endif\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Include/arm_math.h",
    "content": "/* ----------------------------------------------------------------------\r\n * Copyright (C) 2010-2015 ARM Limited. All rights reserved.\r\n *\r\n * $Date:        20. October 2015\r\n * $Revision:    V1.4.5 b\r\n *\r\n * Project:      CMSIS DSP Library\r\n * Title:        arm_math.h\r\n *\r\n * Description:  Public header file for CMSIS DSP Library\r\n *\r\n * Target Processor: Cortex-M7/Cortex-M4/Cortex-M3/Cortex-M0\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions\r\n * are met:\r\n *   - Redistributions of source code must retain the above copyright\r\n *     notice, this list of conditions and the following disclaimer.\r\n *   - Redistributions in binary form must reproduce the above copyright\r\n *     notice, this list of conditions and the following disclaimer in\r\n *     the documentation and/or other materials provided with the\r\n *     distribution.\r\n *   - Neither the name of ARM LIMITED nor the names of its contributors\r\n *     may be used to endorse or promote products derived from this\r\n *     software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\r\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\r\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\r\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r\n * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * -------------------------------------------------------------------- */\r\n\r\n/**\r\n   \\mainpage CMSIS DSP Software Library\r\n   *\r\n   * Introduction\r\n   * ------------\r\n   *\r\n   * This user manual describes the CMSIS DSP software library,\r\n   * a suite of common signal processing functions for use on Cortex-M processor based devices.\r\n   *\r\n   * The library is divided into a number of functions each covering a specific category:\r\n   * - Basic math functions\r\n   * - Fast math functions\r\n   * - Complex math functions\r\n   * - Filters\r\n   * - Matrix functions\r\n   * - Transforms\r\n   * - Motor control functions\r\n   * - Statistical functions\r\n   * - Support functions\r\n   * - Interpolation functions\r\n   *\r\n   * The library has separate functions for operating on 8-bit integers, 16-bit integers,\r\n   * 32-bit integer and 32-bit floating-point values.\r\n   *\r\n   * Using the Library\r\n   * ------------\r\n   *\r\n   * The library installer contains prebuilt versions of the libraries in the <code>Lib</code> folder.\r\n   * - arm_cortexM7lfdp_math.lib (Little endian and Double Precision Floating Point Unit on Cortex-M7)\r\n   * - arm_cortexM7bfdp_math.lib (Big endian and Double Precision Floating Point Unit on Cortex-M7)\r\n   * - arm_cortexM7lfsp_math.lib (Little endian and Single Precision Floating Point Unit on Cortex-M7)\r\n   * - arm_cortexM7bfsp_math.lib (Big endian and Single Precision Floating Point Unit on Cortex-M7)\r\n   * - arm_cortexM7l_math.lib (Little endian on Cortex-M7)\r\n   * - arm_cortexM7b_math.lib (Big endian on Cortex-M7)\r\n   * - arm_cortexM4lf_math.lib (Little endian and Floating Point Unit on Cortex-M4)\r\n   * - arm_cortexM4bf_math.lib (Big endian and Floating Point Unit on Cortex-M4)\r\n   * - arm_cortexM4l_math.lib (Little endian on Cortex-M4)\r\n   * - arm_cortexM4b_math.lib (Big endian on Cortex-M4)\r\n   * - arm_cortexM3l_math.lib (Little endian on Cortex-M3)\r\n   * - arm_cortexM3b_math.lib (Big endian on Cortex-M3)\r\n   * - arm_cortexM0l_math.lib (Little endian on Cortex-M0 / CortexM0+)\r\n   * - arm_cortexM0b_math.lib (Big endian on Cortex-M0 / CortexM0+)\r\n   *\r\n   * The library functions are declared in the public file <code>arm_math.h</code> which is placed in the <code>Include</code> folder.\r\n   * Simply include this file and link the appropriate library in the application and begin calling the library functions. The Library supports single\r\n   * public header file <code> arm_math.h</code> for Cortex-M7/M4/M3/M0/M0+ with little endian and big endian. Same header file will be used for floating point unit(FPU) variants.\r\n   * Define the appropriate pre processor MACRO ARM_MATH_CM7 or ARM_MATH_CM4 or  ARM_MATH_CM3 or\r\n   * ARM_MATH_CM0 or ARM_MATH_CM0PLUS depending on the target processor in the application.\r\n   *\r\n   * Examples\r\n   * --------\r\n   *\r\n   * The library ships with a number of examples which demonstrate how to use the library functions.\r\n   *\r\n   * Toolchain Support\r\n   * ------------\r\n   *\r\n   * The library has been developed and tested with MDK-ARM version 5.14.0.0\r\n   * The library is being tested in GCC and IAR toolchains and updates on this activity will be made available shortly.\r\n   *\r\n   * Building the Library\r\n   * ------------\r\n   *\r\n   * The library installer contains a project file to re build libraries on MDK-ARM Tool chain in the <code>CMSIS\\\\DSP_Lib\\\\Source\\\\ARM</code> folder.\r\n   * - arm_cortexM_math.uvprojx\r\n   *\r\n   *\r\n   * The libraries can be built by opening the arm_cortexM_math.uvprojx project in MDK-ARM, selecting a specific target, and defining the optional pre processor MACROs detailed above.\r\n   *\r\n   * Pre-processor Macros\r\n   * ------------\r\n   *\r\n   * Each library project have differant pre-processor macros.\r\n   *\r\n   * - UNALIGNED_SUPPORT_DISABLE:\r\n   *\r\n   * Define macro UNALIGNED_SUPPORT_DISABLE, If the silicon does not support unaligned memory access\r\n   *\r\n   * - ARM_MATH_BIG_ENDIAN:\r\n   *\r\n   * Define macro ARM_MATH_BIG_ENDIAN to build the library for big endian targets. By default library builds for little endian targets.\r\n   *\r\n   * - ARM_MATH_MATRIX_CHECK:\r\n   *\r\n   * Define macro ARM_MATH_MATRIX_CHECK for checking on the input and output sizes of matrices\r\n   *\r\n   * - ARM_MATH_ROUNDING:\r\n   *\r\n   * Define macro ARM_MATH_ROUNDING for rounding on support functions\r\n   *\r\n   * - ARM_MATH_CMx:\r\n   *\r\n   * Define macro ARM_MATH_CM4 for building the library on Cortex-M4 target, ARM_MATH_CM3 for building library on Cortex-M3 target\r\n   * and ARM_MATH_CM0 for building library on Cortex-M0 target, ARM_MATH_CM0PLUS for building library on Cortex-M0+ target, and\r\n   * ARM_MATH_CM7 for building the library on cortex-M7.\r\n   *\r\n   * - __FPU_PRESENT:\r\n   *\r\n   * Initialize macro __FPU_PRESENT = 1 when building on FPU supported Targets. Enable this macro for M4bf and M4lf libraries\r\n   *\r\n   * <hr>\r\n   * CMSIS-DSP in ARM::CMSIS Pack\r\n   * -----------------------------\r\n   *\r\n   * The following files relevant to CMSIS-DSP are present in the <b>ARM::CMSIS</b> Pack directories:\r\n   * |File/Folder                   |Content                                                                 |\r\n   * |------------------------------|------------------------------------------------------------------------|\r\n   * |\\b CMSIS\\\\Documentation\\\\DSP  | This documentation                                                     |\r\n   * |\\b CMSIS\\\\DSP_Lib             | Software license agreement (license.txt)                               |\r\n   * |\\b CMSIS\\\\DSP_Lib\\\\Examples   | Example projects demonstrating the usage of the library functions      |\r\n   * |\\b CMSIS\\\\DSP_Lib\\\\Source     | Source files for rebuilding the library                                |\r\n   *\r\n   * <hr>\r\n   * Revision History of CMSIS-DSP\r\n   * ------------\r\n   * Please refer to \\ref ChangeLog_pg.\r\n   *\r\n   * Copyright Notice\r\n   * ------------\r\n   *\r\n   * Copyright (C) 2010-2015 ARM Limited. All rights reserved.\r\n   */\r\n\r\n/**\r\n * @defgroup groupMath Basic Math Functions\r\n */\r\n\r\n/**\r\n * @defgroup groupFastMath Fast Math Functions\r\n * This set of functions provides a fast approximation to sine, cosine, and square root.\r\n * As compared to most of the other functions in the CMSIS math library, the fast math functions\r\n * operate on individual values and not arrays.\r\n * There are separate functions for Q15, Q31, and floating-point data.\r\n *\r\n */\r\n\r\n/**\r\n * @defgroup groupCmplxMath Complex Math Functions\r\n * This set of functions operates on complex data vectors.\r\n * The data in the complex arrays is stored in an interleaved fashion\r\n * (real, imag, real, imag, ...).\r\n * In the API functions, the number of samples in a complex array refers\r\n * to the number of complex values; the array contains twice this number of\r\n * real values.\r\n */\r\n\r\n/**\r\n * @defgroup groupFilters Filtering Functions\r\n */\r\n\r\n/**\r\n * @defgroup groupMatrix Matrix Functions\r\n *\r\n * This set of functions provides basic matrix math operations.\r\n * The functions operate on matrix data structures.  For example,\r\n * the type\r\n * definition for the floating-point matrix structure is shown\r\n * below:\r\n * <pre>\r\n *     typedef struct\r\n *     {\r\n *       uint16_t numRows;     // number of rows of the matrix.\r\n *       uint16_t numCols;     // number of columns of the matrix.\r\n *       float32_t *pData;     // points to the data of the matrix.\r\n *     } arm_matrix_instance_f32;\r\n * </pre>\r\n * There are similar definitions for Q15 and Q31 data types.\r\n *\r\n * The structure specifies the size of the matrix and then points to\r\n * an array of data.  The array is of size <code>numRows X numCols</code>\r\n * and the values are arranged in row order.  That is, the\r\n * matrix element (i, j) is stored at:\r\n * <pre>\r\n *     pData[i*numCols + j]\r\n * </pre>\r\n *\r\n * \\par Init Functions\r\n * There is an associated initialization function for each type of matrix\r\n * data structure.\r\n * The initialization function sets the values of the internal structure fields.\r\n * Refer to the function <code>arm_mat_init_f32()</code>, <code>arm_mat_init_q31()</code>\r\n * and <code>arm_mat_init_q15()</code> for floating-point, Q31 and Q15 types,  respectively.\r\n *\r\n * \\par\r\n * Use of the initialization function is optional. However, if initialization function is used\r\n * then the instance structure cannot be placed into a const data section.\r\n * To place the instance structure in a const data\r\n * section, manually initialize the data structure.  For example:\r\n * <pre>\r\n * <code>arm_matrix_instance_f32 S = {nRows, nColumns, pData};</code>\r\n * <code>arm_matrix_instance_q31 S = {nRows, nColumns, pData};</code>\r\n * <code>arm_matrix_instance_q15 S = {nRows, nColumns, pData};</code>\r\n * </pre>\r\n * where <code>nRows</code> specifies the number of rows, <code>nColumns</code>\r\n * specifies the number of columns, and <code>pData</code> points to the\r\n * data array.\r\n *\r\n * \\par Size Checking\r\n * By default all of the matrix functions perform size checking on the input and\r\n * output matrices.  For example, the matrix addition function verifies that the\r\n * two input matrices and the output matrix all have the same number of rows and\r\n * columns.  If the size check fails the functions return:\r\n * <pre>\r\n *     ARM_MATH_SIZE_MISMATCH\r\n * </pre>\r\n * Otherwise the functions return\r\n * <pre>\r\n *     ARM_MATH_SUCCESS\r\n * </pre>\r\n * There is some overhead associated with this matrix size checking.\r\n * The matrix size checking is enabled via the \\#define\r\n * <pre>\r\n *     ARM_MATH_MATRIX_CHECK\r\n * </pre>\r\n * within the library project settings.  By default this macro is defined\r\n * and size checking is enabled.  By changing the project settings and\r\n * undefining this macro size checking is eliminated and the functions\r\n * run a bit faster.  With size checking disabled the functions always\r\n * return <code>ARM_MATH_SUCCESS</code>.\r\n */\r\n\r\n/**\r\n * @defgroup groupTransforms Transform Functions\r\n */\r\n\r\n/**\r\n * @defgroup groupController Controller Functions\r\n */\r\n\r\n/**\r\n * @defgroup groupStats Statistics Functions\r\n */\r\n/**\r\n * @defgroup groupSupport Support Functions\r\n */\r\n\r\n/**\r\n * @defgroup groupInterpolation Interpolation Functions\r\n * These functions perform 1- and 2-dimensional interpolation of data.\r\n * Linear interpolation is used for 1-dimensional data and\r\n * bilinear interpolation is used for 2-dimensional data.\r\n */\r\n\r\n/**\r\n * @defgroup groupExamples Examples\r\n */\r\n#ifndef _ARM_MATH_H\r\n#define _ARM_MATH_H\r\n\r\n/* ignore some GCC warnings */\r\n#if defined(__GNUC__)\r\n#pragma GCC diagnostic push\r\n#pragma GCC diagnostic ignored \"-Wsign-conversion\"\r\n#pragma GCC diagnostic ignored \"-Wconversion\"\r\n#pragma GCC diagnostic ignored \"-Wunused-parameter\"\r\n#endif\r\n\r\n#define __CMSIS_GENERIC /* disable NVIC and Systick functions */\r\n\r\n#if defined(ARM_MATH_CM7)\r\n#include \"core_cm7.h\"\r\n#elif defined(ARM_MATH_CM4)\r\n#include \"core_cm4.h\"\r\n#elif defined(ARM_MATH_CM3)\r\n#include \"core_cm3.h\"\r\n#elif defined(ARM_MATH_CM0)\r\n#include \"core_cm0.h\"\r\n#define ARM_MATH_CM0_FAMILY\r\n#elif defined(ARM_MATH_CM0PLUS)\r\n#include \"core_cm0plus.h\"\r\n#define ARM_MATH_CM0_FAMILY\r\n#else\r\n#error \"Define according the used Cortex core ARM_MATH_CM7, ARM_MATH_CM4, ARM_MATH_CM3, ARM_MATH_CM0PLUS or ARM_MATH_CM0\"\r\n#endif\r\n\r\n#undef __CMSIS_GENERIC /* enable NVIC and Systick functions */\r\n#include \"math.h\"\r\n#include \"string.h\"\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n * @brief Macros required for reciprocal calculation in Normalized LMS\r\n */\r\n\r\n#define DELTA_Q31  (0x100)\r\n#define DELTA_Q15  0x5\r\n#define INDEX_MASK 0x0000003F\r\n#ifndef PI\r\n#define PI 3.14159265358979f\r\n#endif\r\n\r\n/**\r\n * @brief Macros required for SINE and COSINE Fast math approximations\r\n */\r\n\r\n#define FAST_MATH_TABLE_SIZE 512\r\n#define FAST_MATH_Q31_SHIFT  (32 - 10)\r\n#define FAST_MATH_Q15_SHIFT  (16 - 10)\r\n#define CONTROLLER_Q31_SHIFT (32 - 9)\r\n#define TABLE_SIZE           256\r\n#define TABLE_SPACING_Q31    0x400000\r\n#define TABLE_SPACING_Q15    0x80\r\n\r\n/**\r\n * @brief Macros required for SINE and COSINE Controller functions\r\n */\r\n/* 1.31(q31) Fixed value of 2/360 */\r\n/* -1 to +1 is divided into 360 values so total spacing is (2/360) */\r\n#define INPUT_SPACING 0xB60B61\r\n\r\n/**\r\n * @brief Macro for Unaligned Support\r\n */\r\n#ifndef UNALIGNED_SUPPORT_DISABLE\r\n#define ALIGN4\r\n#else\r\n#if defined(__GNUC__)\r\n#define ALIGN4 __attribute__((aligned(4)))\r\n#else\r\n#define ALIGN4 __align(4)\r\n#endif\r\n#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */\r\n\r\n/**\r\n * @brief Error status returned by some functions in the library.\r\n */\r\n\r\ntypedef enum {\r\n  ARM_MATH_SUCCESS        = 0,  /**< No error */\r\n  ARM_MATH_ARGUMENT_ERROR = -1, /**< One or more arguments are incorrect */\r\n  ARM_MATH_LENGTH_ERROR   = -2, /**< Length of data buffer is incorrect */\r\n  ARM_MATH_SIZE_MISMATCH  = -3, /**< Size of matrices is not compatible with the operation. */\r\n  ARM_MATH_NANINF         = -4, /**< Not-a-number (NaN) or infinity is generated */\r\n  ARM_MATH_SINGULAR       = -5, /**< Generated by matrix inversion if the input matrix is singular and cannot be inverted. */\r\n  ARM_MATH_TEST_FAILURE   = -6  /**< Test Failed  */\r\n} arm_status;\r\n\r\n/**\r\n * @brief 8-bit fractional data type in 1.7 format.\r\n */\r\ntypedef int8_t q7_t;\r\n\r\n/**\r\n * @brief 16-bit fractional data type in 1.15 format.\r\n */\r\ntypedef int16_t q15_t;\r\n\r\n/**\r\n * @brief 32-bit fractional data type in 1.31 format.\r\n */\r\ntypedef int32_t q31_t;\r\n\r\n/**\r\n * @brief 64-bit fractional data type in 1.63 format.\r\n */\r\ntypedef int64_t q63_t;\r\n\r\n/**\r\n * @brief 32-bit floating-point type definition.\r\n */\r\ntypedef float float32_t;\r\n\r\n/**\r\n * @brief 64-bit floating-point type definition.\r\n */\r\ntypedef double float64_t;\r\n\r\n/**\r\n * @brief definition to read/write two 16 bit values.\r\n */\r\n#if defined __CC_ARM\r\n#define __SIMD32_TYPE int32_t __packed\r\n#define CMSIS_UNUSED  __attribute__((unused))\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define __SIMD32_TYPE int32_t\r\n#define CMSIS_UNUSED  __attribute__((unused))\r\n\r\n#elif defined __GNUC__\r\n#define __SIMD32_TYPE int32_t\r\n#define CMSIS_UNUSED  __attribute__((unused))\r\n\r\n#elif defined __ICCARM__\r\n#define __SIMD32_TYPE int32_t __packed\r\n#define CMSIS_UNUSED\r\n\r\n#elif defined __CSMC__\r\n#define __SIMD32_TYPE int32_t\r\n#define CMSIS_UNUSED\r\n\r\n#elif defined __TASKING__\r\n#define __SIMD32_TYPE __unaligned int32_t\r\n#define CMSIS_UNUSED\r\n\r\n#else\r\n#error Unknown compiler\r\n#endif\r\n\r\n#define __SIMD32(addr)       (*(__SIMD32_TYPE **)&(addr))\r\n#define __SIMD32_CONST(addr) ((__SIMD32_TYPE *)(addr))\r\n#define _SIMD32_OFFSET(addr) (*(__SIMD32_TYPE *)(addr))\r\n#define __SIMD64(addr)       (*(int64_t **)&(addr))\r\n\r\n#if defined(ARM_MATH_CM3) || defined(ARM_MATH_CM0_FAMILY)\r\n/**\r\n * @brief definition to pack two 16 bit values.\r\n */\r\n#define __PKHBT(ARG1, ARG2, ARG3) ((((int32_t)(ARG1) << 0) & (int32_t)0x0000FFFF) | (((int32_t)(ARG2) << ARG3) & (int32_t)0xFFFF0000))\r\n#define __PKHTB(ARG1, ARG2, ARG3) ((((int32_t)(ARG1) << 0) & (int32_t)0xFFFF0000) | (((int32_t)(ARG2) >> ARG3) & (int32_t)0x0000FFFF))\r\n\r\n#endif\r\n\r\n/**\r\n * @brief definition to pack four 8 bit values.\r\n */\r\n#ifndef ARM_MATH_BIG_ENDIAN\r\n\r\n#define __PACKq7(v0, v1, v2, v3) \\\r\n  ((((int32_t)(v0) << 0) & (int32_t)0x000000FF) | (((int32_t)(v1) << 8) & (int32_t)0x0000FF00) | (((int32_t)(v2) << 16) & (int32_t)0x00FF0000) | (((int32_t)(v3) << 24) & (int32_t)0xFF000000))\r\n#else\r\n\r\n#define __PACKq7(v0, v1, v2, v3) \\\r\n  ((((int32_t)(v3) << 0) & (int32_t)0x000000FF) | (((int32_t)(v2) << 8) & (int32_t)0x0000FF00) | (((int32_t)(v1) << 16) & (int32_t)0x00FF0000) | (((int32_t)(v0) << 24) & (int32_t)0xFF000000))\r\n\r\n#endif\r\n\r\n/**\r\n * @brief Clips Q63 to Q31 values.\r\n */\r\nstatic __INLINE q31_t clip_q63_to_q31(q63_t x) { return ((q31_t)(x >> 32) != ((q31_t)x >> 31)) ? ((0x7FFFFFFF ^ ((q31_t)(x >> 63)))) : (q31_t)x; }\r\n\r\n/**\r\n * @brief Clips Q63 to Q15 values.\r\n */\r\nstatic __INLINE q15_t clip_q63_to_q15(q63_t x) { return ((q31_t)(x >> 32) != ((q31_t)x >> 31)) ? ((0x7FFF ^ ((q15_t)(x >> 63)))) : (q15_t)(x >> 15); }\r\n\r\n/**\r\n * @brief Clips Q31 to Q7 values.\r\n */\r\nstatic __INLINE q7_t clip_q31_to_q7(q31_t x) { return ((q31_t)(x >> 24) != ((q31_t)x >> 23)) ? ((0x7F ^ ((q7_t)(x >> 31)))) : (q7_t)x; }\r\n\r\n/**\r\n * @brief Clips Q31 to Q15 values.\r\n */\r\nstatic __INLINE q15_t clip_q31_to_q15(q31_t x) { return ((q31_t)(x >> 16) != ((q31_t)x >> 15)) ? ((0x7FFF ^ ((q15_t)(x >> 31)))) : (q15_t)x; }\r\n\r\n/**\r\n * @brief Multiplies 32 X 64 and returns 32 bit result in 2.30 format.\r\n */\r\n\r\nstatic __INLINE q63_t mult32x64(q63_t x, q31_t y) { return ((((q63_t)(x & 0x00000000FFFFFFFF) * y) >> 32) + (((q63_t)(x >> 32) * y))); }\r\n\r\n/*\r\n  #if defined (ARM_MATH_CM0_FAMILY) && defined ( __CC_ARM   )\r\n  #define __CLZ __clz\r\n  #endif\r\n */\r\n/* note: function can be removed when all toolchain support __CLZ for Cortex-M0 */\r\n#if defined(ARM_MATH_CM0_FAMILY) && ((defined(__ICCARM__)))\r\nstatic __INLINE uint32_t __CLZ(q31_t data);\r\n\r\nstatic __INLINE uint32_t __CLZ(q31_t data) {\r\n  uint32_t count = 0;\r\n  uint32_t mask  = 0x80000000;\r\n\r\n  while ((data & mask) == 0) {\r\n    count += 1u;\r\n    mask = mask >> 1u;\r\n  }\r\n\r\n  return (count);\r\n}\r\n#endif\r\n\r\n/**\r\n * @brief Function to Calculates 1/in (reciprocal) value of Q31 Data type.\r\n */\r\n\r\nstatic __INLINE uint32_t arm_recip_q31(q31_t in, q31_t *dst, q31_t *pRecipTable) {\r\n  q31_t    out;\r\n  uint32_t tempVal;\r\n  uint32_t index, i;\r\n  uint32_t signBits;\r\n\r\n  if (in > 0) {\r\n    signBits = ((uint32_t)(__CLZ(in) - 1));\r\n  } else {\r\n    signBits = ((uint32_t)(__CLZ(-in) - 1));\r\n  }\r\n\r\n  /* Convert input sample to 1.31 format */\r\n  in = (in << signBits);\r\n\r\n  /* calculation of index for initial approximated Val */\r\n  index = (uint32_t)(in >> 24);\r\n  index = (index & INDEX_MASK);\r\n\r\n  /* 1.31 with exp 1 */\r\n  out = pRecipTable[index];\r\n\r\n  /* calculation of reciprocal value */\r\n  /* running approximation for two iterations */\r\n  for (i = 0u; i < 2u; i++) {\r\n    tempVal = (uint32_t)(((q63_t)in * out) >> 31);\r\n    tempVal = 0x7FFFFFFFu - tempVal;\r\n    /*      1.31 with exp 1 */\r\n    /* out = (q31_t) (((q63_t) out * tempVal) >> 30); */\r\n    out = clip_q63_to_q31(((q63_t)out * tempVal) >> 30);\r\n  }\r\n\r\n  /* write output */\r\n  *dst = out;\r\n\r\n  /* return num of signbits of out = 1/in value */\r\n  return (signBits + 1u);\r\n}\r\n\r\n/**\r\n * @brief Function to Calculates 1/in (reciprocal) value of Q15 Data type.\r\n */\r\nstatic __INLINE uint32_t arm_recip_q15(q15_t in, q15_t *dst, q15_t *pRecipTable) {\r\n  q15_t    out     = 0;\r\n  uint32_t tempVal = 0;\r\n  uint32_t index = 0, i = 0;\r\n  uint32_t signBits = 0;\r\n\r\n  if (in > 0) {\r\n    signBits = ((uint32_t)(__CLZ(in) - 17));\r\n  } else {\r\n    signBits = ((uint32_t)(__CLZ(-in) - 17));\r\n  }\r\n\r\n  /* Convert input sample to 1.15 format */\r\n  in = (in << signBits);\r\n\r\n  /* calculation of index for initial approximated Val */\r\n  index = (uint32_t)(in >> 8);\r\n  index = (index & INDEX_MASK);\r\n\r\n  /*      1.15 with exp 1  */\r\n  out = pRecipTable[index];\r\n\r\n  /* calculation of reciprocal value */\r\n  /* running approximation for two iterations */\r\n  for (i = 0u; i < 2u; i++) {\r\n    tempVal = (uint32_t)(((q31_t)in * out) >> 15);\r\n    tempVal = 0x7FFFu - tempVal;\r\n    /*      1.15 with exp 1 */\r\n    out = (q15_t)(((q31_t)out * tempVal) >> 14);\r\n    /* out = clip_q31_to_q15(((q31_t) out * tempVal) >> 14); */\r\n  }\r\n\r\n  /* write output */\r\n  *dst = out;\r\n\r\n  /* return num of signbits of out = 1/in value */\r\n  return (signBits + 1);\r\n}\r\n\r\n/*\r\n * @brief C custom defined intrinisic function for only M0 processors\r\n */\r\n#if defined(ARM_MATH_CM0_FAMILY)\r\nstatic __INLINE q31_t __SSAT(q31_t x, uint32_t y) {\r\n  int32_t  posMax, negMin;\r\n  uint32_t i;\r\n\r\n  posMax = 1;\r\n  for (i = 0; i < (y - 1); i++) {\r\n    posMax = posMax * 2;\r\n  }\r\n\r\n  if (x > 0) {\r\n    posMax = (posMax - 1);\r\n\r\n    if (x > posMax) {\r\n      x = posMax;\r\n    }\r\n  } else {\r\n    negMin = -posMax;\r\n\r\n    if (x < negMin) {\r\n      x = negMin;\r\n    }\r\n  }\r\n  return (x);\r\n}\r\n#endif /* end of ARM_MATH_CM0_FAMILY */\r\n\r\n/*\r\n * @brief C custom defined intrinsic function for M3 and M0 processors\r\n */\r\n#if defined(ARM_MATH_CM3) || defined(ARM_MATH_CM0_FAMILY)\r\n\r\n/*\r\n * @brief C custom defined QADD8 for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __QADD8(uint32_t x, uint32_t y) {\r\n  q31_t r, s, t, u;\r\n\r\n  r = __SSAT(((((q31_t)x << 24) >> 24) + (((q31_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF;\r\n  s = __SSAT(((((q31_t)x << 16) >> 24) + (((q31_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF;\r\n  t = __SSAT(((((q31_t)x << 8) >> 24) + (((q31_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF;\r\n  u = __SSAT(((((q31_t)x) >> 24) + (((q31_t)y) >> 24)), 8) & (int32_t)0x000000FF;\r\n\r\n  return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined QSUB8 for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __QSUB8(uint32_t x, uint32_t y) {\r\n  q31_t r, s, t, u;\r\n\r\n  r = __SSAT(((((q31_t)x << 24) >> 24) - (((q31_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF;\r\n  s = __SSAT(((((q31_t)x << 16) >> 24) - (((q31_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF;\r\n  t = __SSAT(((((q31_t)x << 8) >> 24) - (((q31_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF;\r\n  u = __SSAT(((((q31_t)x) >> 24) - (((q31_t)y) >> 24)), 8) & (int32_t)0x000000FF;\r\n\r\n  return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined QADD16 for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __QADD16(uint32_t x, uint32_t y) {\r\n  /*  q31_t r,     s;  without initialisation 'arm_offset_q15 test' fails  but 'intrinsic' tests pass! for armCC */\r\n  q31_t r = 0, s = 0;\r\n\r\n  r = __SSAT(((((q31_t)x << 16) >> 16) + (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF;\r\n  s = __SSAT(((((q31_t)x) >> 16) + (((q31_t)y) >> 16)), 16) & (int32_t)0x0000FFFF;\r\n\r\n  return ((uint32_t)((s << 16) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SHADD16 for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SHADD16(uint32_t x, uint32_t y) {\r\n  q31_t r, s;\r\n\r\n  r = (((((q31_t)x << 16) >> 16) + (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF;\r\n  s = (((((q31_t)x) >> 16) + (((q31_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF;\r\n\r\n  return ((uint32_t)((s << 16) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined QSUB16 for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __QSUB16(uint32_t x, uint32_t y) {\r\n  q31_t r, s;\r\n\r\n  r = __SSAT(((((q31_t)x << 16) >> 16) - (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF;\r\n  s = __SSAT(((((q31_t)x) >> 16) - (((q31_t)y) >> 16)), 16) & (int32_t)0x0000FFFF;\r\n\r\n  return ((uint32_t)((s << 16) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SHSUB16 for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SHSUB16(uint32_t x, uint32_t y) {\r\n  q31_t r, s;\r\n\r\n  r = (((((q31_t)x << 16) >> 16) - (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF;\r\n  s = (((((q31_t)x) >> 16) - (((q31_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF;\r\n\r\n  return ((uint32_t)((s << 16) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined QASX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __QASX(uint32_t x, uint32_t y) {\r\n  q31_t r, s;\r\n\r\n  r = __SSAT(((((q31_t)x << 16) >> 16) - (((q31_t)y) >> 16)), 16) & (int32_t)0x0000FFFF;\r\n  s = __SSAT(((((q31_t)x) >> 16) + (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF;\r\n\r\n  return ((uint32_t)((s << 16) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SHASX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SHASX(uint32_t x, uint32_t y) {\r\n  q31_t r, s;\r\n\r\n  r = (((((q31_t)x << 16) >> 16) - (((q31_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF;\r\n  s = (((((q31_t)x) >> 16) + (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF;\r\n\r\n  return ((uint32_t)((s << 16) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined QSAX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __QSAX(uint32_t x, uint32_t y) {\r\n  q31_t r, s;\r\n\r\n  r = __SSAT(((((q31_t)x << 16) >> 16) + (((q31_t)y) >> 16)), 16) & (int32_t)0x0000FFFF;\r\n  s = __SSAT(((((q31_t)x) >> 16) - (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF;\r\n\r\n  return ((uint32_t)((s << 16) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SHSAX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SHSAX(uint32_t x, uint32_t y) {\r\n  q31_t r, s;\r\n\r\n  r = (((((q31_t)x << 16) >> 16) + (((q31_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF;\r\n  s = (((((q31_t)x) >> 16) - (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF;\r\n\r\n  return ((uint32_t)((s << 16) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SMUSDX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SMUSDX(uint32_t x, uint32_t y) { return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y) >> 16)) - ((((q31_t)x) >> 16) * (((q31_t)y << 16) >> 16)))); }\r\n\r\n/*\r\n * @brief C custom defined SMUADX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SMUADX(uint32_t x, uint32_t y) { return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y) >> 16)) + ((((q31_t)x) >> 16) * (((q31_t)y << 16) >> 16)))); }\r\n\r\n/*\r\n * @brief C custom defined QADD for M3 and M0 processors\r\n */\r\nstatic __INLINE int32_t __QADD(int32_t x, int32_t y) { return ((int32_t)(clip_q63_to_q31((q63_t)x + (q31_t)y))); }\r\n\r\n/*\r\n * @brief C custom defined QSUB for M3 and M0 processors\r\n */\r\nstatic __INLINE int32_t __QSUB(int32_t x, int32_t y) { return ((int32_t)(clip_q63_to_q31((q63_t)x - (q31_t)y))); }\r\n\r\n/*\r\n * @brief C custom defined SMLAD for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SMLAD(uint32_t x, uint32_t y, uint32_t sum) {\r\n  return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + ((((q31_t)x) >> 16) * (((q31_t)y) >> 16)) + (((q31_t)sum))));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SMLADX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SMLADX(uint32_t x, uint32_t y, uint32_t sum) {\r\n  return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y) >> 16)) + ((((q31_t)x) >> 16) * (((q31_t)y << 16) >> 16)) + (((q31_t)sum))));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SMLSDX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SMLSDX(uint32_t x, uint32_t y, uint32_t sum) {\r\n  return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y) >> 16)) - ((((q31_t)x) >> 16) * (((q31_t)y << 16) >> 16)) + (((q31_t)sum))));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SMLALD for M3 and M0 processors\r\n */\r\nstatic __INLINE uint64_t __SMLALD(uint32_t x, uint32_t y, uint64_t sum) {\r\n  /*  return (sum + ((q15_t) (x >> 16) * (q15_t) (y >> 16)) + ((q15_t) x * (q15_t) y)); */\r\n  return ((uint64_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + ((((q31_t)x) >> 16) * (((q31_t)y) >> 16)) + (((q63_t)sum))));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SMLALDX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint64_t __SMLALDX(uint32_t x, uint32_t y, uint64_t sum) {\r\n  /*  return (sum + ((q15_t) (x >> 16) * (q15_t) y)) + ((q15_t) x * (q15_t) (y >> 16)); */\r\n  return ((uint64_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y) >> 16)) + ((((q31_t)x) >> 16) * (((q31_t)y << 16) >> 16)) + (((q63_t)sum))));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SMUAD for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SMUAD(uint32_t x, uint32_t y) { return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + ((((q31_t)x) >> 16) * (((q31_t)y) >> 16)))); }\r\n\r\n/*\r\n * @brief C custom defined SMUSD for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SMUSD(uint32_t x, uint32_t y) { return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) - ((((q31_t)x) >> 16) * (((q31_t)y) >> 16)))); }\r\n\r\n/*\r\n * @brief C custom defined SXTB16 for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SXTB16(uint32_t x) { return ((uint32_t)(((((q31_t)x << 24) >> 24) & (q31_t)0x0000FFFF) | ((((q31_t)x << 8) >> 8) & (q31_t)0xFFFF0000))); }\r\n\r\n#endif /* defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) */\r\n\r\n/**\r\n * @brief Instance structure for the Q7 FIR filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps; /**< number of filter coefficients in the filter. */\r\n  q7_t *   pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  q7_t *   pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/\r\n} arm_fir_instance_q7;\r\n\r\n/**\r\n * @brief Instance structure for the Q15 FIR filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps; /**< number of filter coefficients in the filter. */\r\n  q15_t *  pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  q15_t *  pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/\r\n} arm_fir_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 FIR filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps; /**< number of filter coefficients in the filter. */\r\n  q31_t *  pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  q31_t *  pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */\r\n} arm_fir_instance_q31;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point FIR filter.\r\n */\r\ntypedef struct {\r\n  uint16_t   numTaps; /**< number of filter coefficients in the filter. */\r\n  float32_t *pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */\r\n} arm_fir_instance_f32;\r\n\r\n/**\r\n * @brief Processing function for the Q7 FIR filter.\r\n * @param[in]  S          points to an instance of the Q7 FIR filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_q7(const arm_fir_instance_q7 *S, q7_t *pSrc, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q7 FIR filter.\r\n * @param[in,out] S          points to an instance of the Q7 FIR structure.\r\n * @param[in]     numTaps    Number of filter coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of samples that are processed.\r\n */\r\nvoid arm_fir_init_q7(arm_fir_instance_q7 *S, uint16_t numTaps, q7_t *pCoeffs, q7_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q15 FIR filter.\r\n * @param[in]  S          points to an instance of the Q15 FIR structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_q15(const arm_fir_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the fast Q15 FIR filter for Cortex-M3 and Cortex-M4.\r\n * @param[in]  S          points to an instance of the Q15 FIR filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_fast_q15(const arm_fir_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q15 FIR filter.\r\n * @param[in,out] S          points to an instance of the Q15 FIR filter structure.\r\n * @param[in]     numTaps    Number of filter coefficients in the filter. Must be even and greater than or equal to 4.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of samples that are processed at a time.\r\n * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_ARGUMENT_ERROR if\r\n * <code>numTaps</code> is not a supported value.\r\n */\r\narm_status arm_fir_init_q15(arm_fir_instance_q15 *S, uint16_t numTaps, q15_t *pCoeffs, q15_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q31 FIR filter.\r\n * @param[in]  S          points to an instance of the Q31 FIR filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_q31(const arm_fir_instance_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the fast Q31 FIR filter for Cortex-M3 and Cortex-M4.\r\n * @param[in]  S          points to an instance of the Q31 FIR structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_fast_q31(const arm_fir_instance_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q31 FIR filter.\r\n * @param[in,out] S          points to an instance of the Q31 FIR structure.\r\n * @param[in]     numTaps    Number of filter coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of samples that are processed at a time.\r\n */\r\nvoid arm_fir_init_q31(arm_fir_instance_q31 *S, uint16_t numTaps, q31_t *pCoeffs, q31_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the floating-point FIR filter.\r\n * @param[in]  S          points to an instance of the floating-point FIR structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_f32(const arm_fir_instance_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point FIR filter.\r\n * @param[in,out] S          points to an instance of the floating-point FIR filter structure.\r\n * @param[in]     numTaps    Number of filter coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of samples that are processed at a time.\r\n */\r\nvoid arm_fir_init_f32(arm_fir_instance_f32 *S, uint16_t numTaps, float32_t *pCoeffs, float32_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 Biquad cascade filter.\r\n */\r\ntypedef struct {\r\n  int8_t numStages; /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */\r\n  q15_t *pState;    /**< Points to the array of state coefficients.  The array is of length 4*numStages. */\r\n  q15_t *pCoeffs;   /**< Points to the array of coefficients.  The array is of length 5*numStages. */\r\n  int8_t postShift; /**< Additional shift, in bits, applied to each output sample. */\r\n} arm_biquad_casd_df1_inst_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 Biquad cascade filter.\r\n */\r\ntypedef struct {\r\n  uint32_t numStages; /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */\r\n  q31_t *  pState;    /**< Points to the array of state coefficients.  The array is of length 4*numStages. */\r\n  q31_t *  pCoeffs;   /**< Points to the array of coefficients.  The array is of length 5*numStages. */\r\n  uint8_t  postShift; /**< Additional shift, in bits, applied to each output sample. */\r\n} arm_biquad_casd_df1_inst_q31;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point Biquad cascade filter.\r\n */\r\ntypedef struct {\r\n  uint32_t   numStages; /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */\r\n  float32_t *pState;    /**< Points to the array of state coefficients.  The array is of length 4*numStages. */\r\n  float32_t *pCoeffs;   /**< Points to the array of coefficients.  The array is of length 5*numStages. */\r\n} arm_biquad_casd_df1_inst_f32;\r\n\r\n/**\r\n * @brief Processing function for the Q15 Biquad cascade filter.\r\n * @param[in]  S          points to an instance of the Q15 Biquad cascade structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cascade_df1_q15(const arm_biquad_casd_df1_inst_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q15 Biquad cascade filter.\r\n * @param[in,out] S          points to an instance of the Q15 Biquad cascade structure.\r\n * @param[in]     numStages  number of 2nd order stages in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     postShift  Shift to be applied to the output. Varies according to the coefficients format\r\n */\r\nvoid arm_biquad_cascade_df1_init_q15(arm_biquad_casd_df1_inst_q15 *S, uint8_t numStages, q15_t *pCoeffs, q15_t *pState, int8_t postShift);\r\n\r\n/**\r\n * @brief Fast but less precise processing function for the Q15 Biquad cascade filter for Cortex-M3 and Cortex-M4.\r\n * @param[in]  S          points to an instance of the Q15 Biquad cascade structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cascade_df1_fast_q15(const arm_biquad_casd_df1_inst_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q31 Biquad cascade filter\r\n * @param[in]  S          points to an instance of the Q31 Biquad cascade structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cascade_df1_q31(const arm_biquad_casd_df1_inst_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Fast but less precise processing function for the Q31 Biquad cascade filter for Cortex-M3 and Cortex-M4.\r\n * @param[in]  S          points to an instance of the Q31 Biquad cascade structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cascade_df1_fast_q31(const arm_biquad_casd_df1_inst_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q31 Biquad cascade filter.\r\n * @param[in,out] S          points to an instance of the Q31 Biquad cascade structure.\r\n * @param[in]     numStages  number of 2nd order stages in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     postShift  Shift to be applied to the output. Varies according to the coefficients format\r\n */\r\nvoid arm_biquad_cascade_df1_init_q31(arm_biquad_casd_df1_inst_q31 *S, uint8_t numStages, q31_t *pCoeffs, q31_t *pState, int8_t postShift);\r\n\r\n/**\r\n * @brief Processing function for the floating-point Biquad cascade filter.\r\n * @param[in]  S          points to an instance of the floating-point Biquad cascade structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cascade_df1_f32(const arm_biquad_casd_df1_inst_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point Biquad cascade filter.\r\n * @param[in,out] S          points to an instance of the floating-point Biquad cascade structure.\r\n * @param[in]     numStages  number of 2nd order stages in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n */\r\nvoid arm_biquad_cascade_df1_init_f32(arm_biquad_casd_df1_inst_f32 *S, uint8_t numStages, float32_t *pCoeffs, float32_t *pState);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point matrix structure.\r\n */\r\ntypedef struct {\r\n  uint16_t   numRows; /**< number of rows of the matrix.     */\r\n  uint16_t   numCols; /**< number of columns of the matrix.  */\r\n  float32_t *pData;   /**< points to the data of the matrix. */\r\n} arm_matrix_instance_f32;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point matrix structure.\r\n */\r\ntypedef struct {\r\n  uint16_t   numRows; /**< number of rows of the matrix.     */\r\n  uint16_t   numCols; /**< number of columns of the matrix.  */\r\n  float64_t *pData;   /**< points to the data of the matrix. */\r\n} arm_matrix_instance_f64;\r\n\r\n/**\r\n * @brief Instance structure for the Q15 matrix structure.\r\n */\r\ntypedef struct {\r\n  uint16_t numRows; /**< number of rows of the matrix.     */\r\n  uint16_t numCols; /**< number of columns of the matrix.  */\r\n  q15_t *  pData;   /**< points to the data of the matrix. */\r\n} arm_matrix_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 matrix structure.\r\n */\r\ntypedef struct {\r\n  uint16_t numRows; /**< number of rows of the matrix.     */\r\n  uint16_t numCols; /**< number of columns of the matrix.  */\r\n  q31_t *  pData;   /**< points to the data of the matrix. */\r\n} arm_matrix_instance_q31;\r\n\r\n/**\r\n * @brief Floating-point matrix addition.\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_add_f32(const arm_matrix_instance_f32 *pSrcA, const arm_matrix_instance_f32 *pSrcB, arm_matrix_instance_f32 *pDst);\r\n\r\n/**\r\n * @brief Q15 matrix addition.\r\n * @param[in]   pSrcA  points to the first input matrix structure\r\n * @param[in]   pSrcB  points to the second input matrix structure\r\n * @param[out]  pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_add_q15(const arm_matrix_instance_q15 *pSrcA, const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst);\r\n\r\n/**\r\n * @brief Q31 matrix addition.\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_add_q31(const arm_matrix_instance_q31 *pSrcA, const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst);\r\n\r\n/**\r\n * @brief Floating-point, complex, matrix multiplication.\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_cmplx_mult_f32(const arm_matrix_instance_f32 *pSrcA, const arm_matrix_instance_f32 *pSrcB, arm_matrix_instance_f32 *pDst);\r\n\r\n/**\r\n * @brief Q15, complex,  matrix multiplication.\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_cmplx_mult_q15(const arm_matrix_instance_q15 *pSrcA, const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst, q15_t *pScratch);\r\n\r\n/**\r\n * @brief Q31, complex, matrix multiplication.\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_cmplx_mult_q31(const arm_matrix_instance_q31 *pSrcA, const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst);\r\n\r\n/**\r\n * @brief Floating-point matrix transpose.\r\n * @param[in]  pSrc  points to the input matrix\r\n * @param[out] pDst  points to the output matrix\r\n * @return    The function returns either  <code>ARM_MATH_SIZE_MISMATCH</code>\r\n * or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_trans_f32(const arm_matrix_instance_f32 *pSrc, arm_matrix_instance_f32 *pDst);\r\n\r\n/**\r\n * @brief Q15 matrix transpose.\r\n * @param[in]  pSrc  points to the input matrix\r\n * @param[out] pDst  points to the output matrix\r\n * @return    The function returns either  <code>ARM_MATH_SIZE_MISMATCH</code>\r\n * or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_trans_q15(const arm_matrix_instance_q15 *pSrc, arm_matrix_instance_q15 *pDst);\r\n\r\n/**\r\n * @brief Q31 matrix transpose.\r\n * @param[in]  pSrc  points to the input matrix\r\n * @param[out] pDst  points to the output matrix\r\n * @return    The function returns either  <code>ARM_MATH_SIZE_MISMATCH</code>\r\n * or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_trans_q31(const arm_matrix_instance_q31 *pSrc, arm_matrix_instance_q31 *pDst);\r\n\r\n/**\r\n * @brief Floating-point matrix multiplication\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_mult_f32(const arm_matrix_instance_f32 *pSrcA, const arm_matrix_instance_f32 *pSrcB, arm_matrix_instance_f32 *pDst);\r\n\r\n/**\r\n * @brief Q15 matrix multiplication\r\n * @param[in]  pSrcA   points to the first input matrix structure\r\n * @param[in]  pSrcB   points to the second input matrix structure\r\n * @param[out] pDst    points to output matrix structure\r\n * @param[in]  pState  points to the array for storing intermediate results\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_mult_q15(const arm_matrix_instance_q15 *pSrcA, const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst, q15_t *pState);\r\n\r\n/**\r\n * @brief Q15 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA   points to the first input matrix structure\r\n * @param[in]  pSrcB   points to the second input matrix structure\r\n * @param[out] pDst    points to output matrix structure\r\n * @param[in]  pState  points to the array for storing intermediate results\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_mult_fast_q15(const arm_matrix_instance_q15 *pSrcA, const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst, q15_t *pState);\r\n\r\n/**\r\n * @brief Q31 matrix multiplication\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_mult_q31(const arm_matrix_instance_q31 *pSrcA, const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst);\r\n\r\n/**\r\n * @brief Q31 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_mult_fast_q31(const arm_matrix_instance_q31 *pSrcA, const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst);\r\n\r\n/**\r\n * @brief Floating-point matrix subtraction\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_sub_f32(const arm_matrix_instance_f32 *pSrcA, const arm_matrix_instance_f32 *pSrcB, arm_matrix_instance_f32 *pDst);\r\n\r\n/**\r\n * @brief Q15 matrix subtraction\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_sub_q15(const arm_matrix_instance_q15 *pSrcA, const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst);\r\n\r\n/**\r\n * @brief Q31 matrix subtraction\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_sub_q31(const arm_matrix_instance_q31 *pSrcA, const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst);\r\n\r\n/**\r\n * @brief Floating-point matrix scaling.\r\n * @param[in]  pSrc   points to the input matrix\r\n * @param[in]  scale  scale factor\r\n * @param[out] pDst   points to the output matrix\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_scale_f32(const arm_matrix_instance_f32 *pSrc, float32_t scale, arm_matrix_instance_f32 *pDst);\r\n\r\n/**\r\n * @brief Q15 matrix scaling.\r\n * @param[in]  pSrc        points to input matrix\r\n * @param[in]  scaleFract  fractional portion of the scale factor\r\n * @param[in]  shift       number of bits to shift the result by\r\n * @param[out] pDst        points to output matrix\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_scale_q15(const arm_matrix_instance_q15 *pSrc, q15_t scaleFract, int32_t shift, arm_matrix_instance_q15 *pDst);\r\n\r\n/**\r\n * @brief Q31 matrix scaling.\r\n * @param[in]  pSrc        points to input matrix\r\n * @param[in]  scaleFract  fractional portion of the scale factor\r\n * @param[in]  shift       number of bits to shift the result by\r\n * @param[out] pDst        points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_scale_q31(const arm_matrix_instance_q31 *pSrc, q31_t scaleFract, int32_t shift, arm_matrix_instance_q31 *pDst);\r\n\r\n/**\r\n * @brief  Q31 matrix initialization.\r\n * @param[in,out] S         points to an instance of the floating-point matrix structure.\r\n * @param[in]     nRows     number of rows in the matrix.\r\n * @param[in]     nColumns  number of columns in the matrix.\r\n * @param[in]     pData     points to the matrix data array.\r\n */\r\nvoid arm_mat_init_q31(arm_matrix_instance_q31 *S, uint16_t nRows, uint16_t nColumns, q31_t *pData);\r\n\r\n/**\r\n * @brief  Q15 matrix initialization.\r\n * @param[in,out] S         points to an instance of the floating-point matrix structure.\r\n * @param[in]     nRows     number of rows in the matrix.\r\n * @param[in]     nColumns  number of columns in the matrix.\r\n * @param[in]     pData     points to the matrix data array.\r\n */\r\nvoid arm_mat_init_q15(arm_matrix_instance_q15 *S, uint16_t nRows, uint16_t nColumns, q15_t *pData);\r\n\r\n/**\r\n * @brief  Floating-point matrix initialization.\r\n * @param[in,out] S         points to an instance of the floating-point matrix structure.\r\n * @param[in]     nRows     number of rows in the matrix.\r\n * @param[in]     nColumns  number of columns in the matrix.\r\n * @param[in]     pData     points to the matrix data array.\r\n */\r\nvoid arm_mat_init_f32(arm_matrix_instance_f32 *S, uint16_t nRows, uint16_t nColumns, float32_t *pData);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 PID Control.\r\n */\r\ntypedef struct {\r\n  q15_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */\r\n#ifdef ARM_MATH_CM0_FAMILY\r\n  q15_t A1;\r\n  q15_t A2;\r\n#else\r\n  q31_t A1; /**< The derived gain A1 = -Kp - 2Kd | Kd.*/\r\n#endif\r\n  q15_t state[3]; /**< The state array of length 3. */\r\n  q15_t Kp;       /**< The proportional gain. */\r\n  q15_t Ki;       /**< The integral gain. */\r\n  q15_t Kd;       /**< The derivative gain. */\r\n} arm_pid_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 PID Control.\r\n */\r\ntypedef struct {\r\n  q31_t A0;       /**< The derived gain, A0 = Kp + Ki + Kd . */\r\n  q31_t A1;       /**< The derived gain, A1 = -Kp - 2Kd. */\r\n  q31_t A2;       /**< The derived gain, A2 = Kd . */\r\n  q31_t state[3]; /**< The state array of length 3. */\r\n  q31_t Kp;       /**< The proportional gain. */\r\n  q31_t Ki;       /**< The integral gain. */\r\n  q31_t Kd;       /**< The derivative gain. */\r\n} arm_pid_instance_q31;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point PID Control.\r\n */\r\ntypedef struct {\r\n  float32_t A0;       /**< The derived gain, A0 = Kp + Ki + Kd . */\r\n  float32_t A1;       /**< The derived gain, A1 = -Kp - 2Kd. */\r\n  float32_t A2;       /**< The derived gain, A2 = Kd . */\r\n  float32_t state[3]; /**< The state array of length 3. */\r\n  float32_t Kp;       /**< The proportional gain. */\r\n  float32_t Ki;       /**< The integral gain. */\r\n  float32_t Kd;       /**< The derivative gain. */\r\n} arm_pid_instance_f32;\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point PID Control.\r\n * @param[in,out] S               points to an instance of the PID structure.\r\n * @param[in]     resetStateFlag  flag to reset the state. 0 = no change in state 1 = reset the state.\r\n */\r\nvoid arm_pid_init_f32(arm_pid_instance_f32 *S, int32_t resetStateFlag);\r\n\r\n/**\r\n * @brief  Reset function for the floating-point PID Control.\r\n * @param[in,out] S  is an instance of the floating-point PID Control structure\r\n */\r\nvoid arm_pid_reset_f32(arm_pid_instance_f32 *S);\r\n\r\n/**\r\n * @brief  Initialization function for the Q31 PID Control.\r\n * @param[in,out] S               points to an instance of the Q15 PID structure.\r\n * @param[in]     resetStateFlag  flag to reset the state. 0 = no change in state 1 = reset the state.\r\n */\r\nvoid arm_pid_init_q31(arm_pid_instance_q31 *S, int32_t resetStateFlag);\r\n\r\n/**\r\n * @brief  Reset function for the Q31 PID Control.\r\n * @param[in,out] S   points to an instance of the Q31 PID Control structure\r\n */\r\n\r\nvoid arm_pid_reset_q31(arm_pid_instance_q31 *S);\r\n\r\n/**\r\n * @brief  Initialization function for the Q15 PID Control.\r\n * @param[in,out] S               points to an instance of the Q15 PID structure.\r\n * @param[in]     resetStateFlag  flag to reset the state. 0 = no change in state 1 = reset the state.\r\n */\r\nvoid arm_pid_init_q15(arm_pid_instance_q15 *S, int32_t resetStateFlag);\r\n\r\n/**\r\n * @brief  Reset function for the Q15 PID Control.\r\n * @param[in,out] S  points to an instance of the q15 PID Control structure\r\n */\r\nvoid arm_pid_reset_q15(arm_pid_instance_q15 *S);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point Linear Interpolate function.\r\n */\r\ntypedef struct {\r\n  uint32_t   nValues;  /**< nValues */\r\n  float32_t  x1;       /**< x1 */\r\n  float32_t  xSpacing; /**< xSpacing */\r\n  float32_t *pYData;   /**< pointer to the table of Y values */\r\n} arm_linear_interp_instance_f32;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point bilinear interpolation function.\r\n */\r\ntypedef struct {\r\n  uint16_t   numRows; /**< number of rows in the data table. */\r\n  uint16_t   numCols; /**< number of columns in the data table. */\r\n  float32_t *pData;   /**< points to the data table. */\r\n} arm_bilinear_interp_instance_f32;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 bilinear interpolation function.\r\n */\r\ntypedef struct {\r\n  uint16_t numRows; /**< number of rows in the data table. */\r\n  uint16_t numCols; /**< number of columns in the data table. */\r\n  q31_t *  pData;   /**< points to the data table. */\r\n} arm_bilinear_interp_instance_q31;\r\n\r\n/**\r\n * @brief Instance structure for the Q15 bilinear interpolation function.\r\n */\r\ntypedef struct {\r\n  uint16_t numRows; /**< number of rows in the data table. */\r\n  uint16_t numCols; /**< number of columns in the data table. */\r\n  q15_t *  pData;   /**< points to the data table. */\r\n} arm_bilinear_interp_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q15 bilinear interpolation function.\r\n */\r\ntypedef struct {\r\n  uint16_t numRows; /**< number of rows in the data table. */\r\n  uint16_t numCols; /**< number of columns in the data table. */\r\n  q7_t *   pData;   /**< points to the data table. */\r\n} arm_bilinear_interp_instance_q7;\r\n\r\n/**\r\n * @brief Q7 vector multiplication.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_mult_q7(q7_t *pSrcA, q7_t *pSrcB, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q15 vector multiplication.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_mult_q15(q15_t *pSrcA, q15_t *pSrcB, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q31 vector multiplication.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_mult_q31(q31_t *pSrcA, q31_t *pSrcB, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Floating-point vector multiplication.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_mult_f32(float32_t *pSrcA, float32_t *pSrcB, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t  fftLen;           /**< length of the FFT. */\r\n  uint8_t   ifftFlag;         /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */\r\n  uint8_t   bitReverseFlag;   /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */\r\n  q15_t *   pTwiddle;         /**< points to the Sin twiddle factor table. */\r\n  uint16_t *pBitRevTable;     /**< points to the bit reversal table. */\r\n  uint16_t  twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  uint16_t  bitRevFactor;     /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */\r\n} arm_cfft_radix2_instance_q15;\r\n\r\n/* Deprecated */\r\narm_status arm_cfft_radix2_init_q15(arm_cfft_radix2_instance_q15 *S, uint16_t fftLen, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/* Deprecated */\r\nvoid arm_cfft_radix2_q15(const arm_cfft_radix2_instance_q15 *S, q15_t *pSrc);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t  fftLen;           /**< length of the FFT. */\r\n  uint8_t   ifftFlag;         /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */\r\n  uint8_t   bitReverseFlag;   /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */\r\n  q15_t *   pTwiddle;         /**< points to the twiddle factor table. */\r\n  uint16_t *pBitRevTable;     /**< points to the bit reversal table. */\r\n  uint16_t  twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  uint16_t  bitRevFactor;     /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */\r\n} arm_cfft_radix4_instance_q15;\r\n\r\n/* Deprecated */\r\narm_status arm_cfft_radix4_init_q15(arm_cfft_radix4_instance_q15 *S, uint16_t fftLen, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/* Deprecated */\r\nvoid arm_cfft_radix4_q15(const arm_cfft_radix4_instance_q15 *S, q15_t *pSrc);\r\n\r\n/**\r\n * @brief Instance structure for the Radix-2 Q31 CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t  fftLen;           /**< length of the FFT. */\r\n  uint8_t   ifftFlag;         /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */\r\n  uint8_t   bitReverseFlag;   /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */\r\n  q31_t *   pTwiddle;         /**< points to the Twiddle factor table. */\r\n  uint16_t *pBitRevTable;     /**< points to the bit reversal table. */\r\n  uint16_t  twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  uint16_t  bitRevFactor;     /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */\r\n} arm_cfft_radix2_instance_q31;\r\n\r\n/* Deprecated */\r\narm_status arm_cfft_radix2_init_q31(arm_cfft_radix2_instance_q31 *S, uint16_t fftLen, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/* Deprecated */\r\nvoid arm_cfft_radix2_q31(const arm_cfft_radix2_instance_q31 *S, q31_t *pSrc);\r\n\r\n/**\r\n * @brief Instance structure for the Q31 CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t  fftLen;           /**< length of the FFT. */\r\n  uint8_t   ifftFlag;         /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */\r\n  uint8_t   bitReverseFlag;   /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */\r\n  q31_t *   pTwiddle;         /**< points to the twiddle factor table. */\r\n  uint16_t *pBitRevTable;     /**< points to the bit reversal table. */\r\n  uint16_t  twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  uint16_t  bitRevFactor;     /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */\r\n} arm_cfft_radix4_instance_q31;\r\n\r\n/* Deprecated */\r\nvoid arm_cfft_radix4_q31(const arm_cfft_radix4_instance_q31 *S, q31_t *pSrc);\r\n\r\n/* Deprecated */\r\narm_status arm_cfft_radix4_init_q31(arm_cfft_radix4_instance_q31 *S, uint16_t fftLen, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t   fftLen;           /**< length of the FFT. */\r\n  uint8_t    ifftFlag;         /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */\r\n  uint8_t    bitReverseFlag;   /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */\r\n  float32_t *pTwiddle;         /**< points to the Twiddle factor table. */\r\n  uint16_t * pBitRevTable;     /**< points to the bit reversal table. */\r\n  uint16_t   twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  uint16_t   bitRevFactor;     /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */\r\n  float32_t  onebyfftLen;      /**< value of 1/fftLen. */\r\n} arm_cfft_radix2_instance_f32;\r\n\r\n/* Deprecated */\r\narm_status arm_cfft_radix2_init_f32(arm_cfft_radix2_instance_f32 *S, uint16_t fftLen, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/* Deprecated */\r\nvoid arm_cfft_radix2_f32(const arm_cfft_radix2_instance_f32 *S, float32_t *pSrc);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t   fftLen;           /**< length of the FFT. */\r\n  uint8_t    ifftFlag;         /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */\r\n  uint8_t    bitReverseFlag;   /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */\r\n  float32_t *pTwiddle;         /**< points to the Twiddle factor table. */\r\n  uint16_t * pBitRevTable;     /**< points to the bit reversal table. */\r\n  uint16_t   twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  uint16_t   bitRevFactor;     /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */\r\n  float32_t  onebyfftLen;      /**< value of 1/fftLen. */\r\n} arm_cfft_radix4_instance_f32;\r\n\r\n/* Deprecated */\r\narm_status arm_cfft_radix4_init_f32(arm_cfft_radix4_instance_f32 *S, uint16_t fftLen, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/* Deprecated */\r\nvoid arm_cfft_radix4_f32(const arm_cfft_radix4_instance_f32 *S, float32_t *pSrc);\r\n\r\n/**\r\n * @brief Instance structure for the fixed-point CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t        fftLen;       /**< length of the FFT. */\r\n  const q15_t *   pTwiddle;     /**< points to the Twiddle factor table. */\r\n  const uint16_t *pBitRevTable; /**< points to the bit reversal table. */\r\n  uint16_t        bitRevLength; /**< bit reversal table length. */\r\n} arm_cfft_instance_q15;\r\n\r\nvoid arm_cfft_q15(const arm_cfft_instance_q15 *S, q15_t *p1, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/**\r\n * @brief Instance structure for the fixed-point CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t        fftLen;       /**< length of the FFT. */\r\n  const q31_t *   pTwiddle;     /**< points to the Twiddle factor table. */\r\n  const uint16_t *pBitRevTable; /**< points to the bit reversal table. */\r\n  uint16_t        bitRevLength; /**< bit reversal table length. */\r\n} arm_cfft_instance_q31;\r\n\r\nvoid arm_cfft_q31(const arm_cfft_instance_q31 *S, q31_t *p1, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t         fftLen;       /**< length of the FFT. */\r\n  const float32_t *pTwiddle;     /**< points to the Twiddle factor table. */\r\n  const uint16_t * pBitRevTable; /**< points to the bit reversal table. */\r\n  uint16_t         bitRevLength; /**< bit reversal table length. */\r\n} arm_cfft_instance_f32;\r\n\r\nvoid arm_cfft_f32(const arm_cfft_instance_f32 *S, float32_t *p1, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 RFFT/RIFFT function.\r\n */\r\ntypedef struct {\r\n  uint32_t                     fftLenReal;        /**< length of the real FFT. */\r\n  uint8_t                      ifftFlagR;         /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */\r\n  uint8_t                      bitReverseFlagR;   /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */\r\n  uint32_t                     twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  q15_t *                      pTwiddleAReal;     /**< points to the real twiddle factor table. */\r\n  q15_t *                      pTwiddleBReal;     /**< points to the imag twiddle factor table. */\r\n  const arm_cfft_instance_q15 *pCfft;             /**< points to the complex FFT instance. */\r\n} arm_rfft_instance_q15;\r\n\r\narm_status arm_rfft_init_q15(arm_rfft_instance_q15 *S, uint32_t fftLenReal, uint32_t ifftFlagR, uint32_t bitReverseFlag);\r\n\r\nvoid arm_rfft_q15(const arm_rfft_instance_q15 *S, q15_t *pSrc, q15_t *pDst);\r\n\r\n/**\r\n * @brief Instance structure for the Q31 RFFT/RIFFT function.\r\n */\r\ntypedef struct {\r\n  uint32_t                     fftLenReal;        /**< length of the real FFT. */\r\n  uint8_t                      ifftFlagR;         /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */\r\n  uint8_t                      bitReverseFlagR;   /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */\r\n  uint32_t                     twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  q31_t *                      pTwiddleAReal;     /**< points to the real twiddle factor table. */\r\n  q31_t *                      pTwiddleBReal;     /**< points to the imag twiddle factor table. */\r\n  const arm_cfft_instance_q31 *pCfft;             /**< points to the complex FFT instance. */\r\n} arm_rfft_instance_q31;\r\n\r\narm_status arm_rfft_init_q31(arm_rfft_instance_q31 *S, uint32_t fftLenReal, uint32_t ifftFlagR, uint32_t bitReverseFlag);\r\n\r\nvoid arm_rfft_q31(const arm_rfft_instance_q31 *S, q31_t *pSrc, q31_t *pDst);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point RFFT/RIFFT function.\r\n */\r\ntypedef struct {\r\n  uint32_t                      fftLenReal;        /**< length of the real FFT. */\r\n  uint16_t                      fftLenBy2;         /**< length of the complex FFT. */\r\n  uint8_t                       ifftFlagR;         /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */\r\n  uint8_t                       bitReverseFlagR;   /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */\r\n  uint32_t                      twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  float32_t *                   pTwiddleAReal;     /**< points to the real twiddle factor table. */\r\n  float32_t *                   pTwiddleBReal;     /**< points to the imag twiddle factor table. */\r\n  arm_cfft_radix4_instance_f32 *pCfft;             /**< points to the complex FFT instance. */\r\n} arm_rfft_instance_f32;\r\n\r\narm_status arm_rfft_init_f32(arm_rfft_instance_f32 *S, arm_cfft_radix4_instance_f32 *S_CFFT, uint32_t fftLenReal, uint32_t ifftFlagR, uint32_t bitReverseFlag);\r\n\r\nvoid arm_rfft_f32(const arm_rfft_instance_f32 *S, float32_t *pSrc, float32_t *pDst);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point RFFT/RIFFT function.\r\n */\r\ntypedef struct {\r\n  arm_cfft_instance_f32 Sint;         /**< Internal CFFT structure. */\r\n  uint16_t              fftLenRFFT;   /**< length of the real sequence */\r\n  float32_t *           pTwiddleRFFT; /**< Twiddle factors real stage  */\r\n} arm_rfft_fast_instance_f32;\r\n\r\narm_status arm_rfft_fast_init_f32(arm_rfft_fast_instance_f32 *S, uint16_t fftLen);\r\n\r\nvoid arm_rfft_fast_f32(arm_rfft_fast_instance_f32 *S, float32_t *p, float32_t *pOut, uint8_t ifftFlag);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point DCT4/IDCT4 function.\r\n */\r\ntypedef struct {\r\n  uint16_t                      N;          /**< length of the DCT4. */\r\n  uint16_t                      Nby2;       /**< half of the length of the DCT4. */\r\n  float32_t                     normalize;  /**< normalizing factor. */\r\n  float32_t *                   pTwiddle;   /**< points to the twiddle factor table. */\r\n  float32_t *                   pCosFactor; /**< points to the cosFactor table. */\r\n  arm_rfft_instance_f32 *       pRfft;      /**< points to the real FFT instance. */\r\n  arm_cfft_radix4_instance_f32 *pCfft;      /**< points to the complex FFT instance. */\r\n} arm_dct4_instance_f32;\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point DCT4/IDCT4.\r\n * @param[in,out] S          points to an instance of floating-point DCT4/IDCT4 structure.\r\n * @param[in]     S_RFFT     points to an instance of floating-point RFFT/RIFFT structure.\r\n * @param[in]     S_CFFT     points to an instance of floating-point CFFT/CIFFT structure.\r\n * @param[in]     N          length of the DCT4.\r\n * @param[in]     Nby2       half of the length of the DCT4.\r\n * @param[in]     normalize  normalizing factor.\r\n * @return      arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLenReal</code> is not a supported transform length.\r\n */\r\narm_status arm_dct4_init_f32(arm_dct4_instance_f32 *S, arm_rfft_instance_f32 *S_RFFT, arm_cfft_radix4_instance_f32 *S_CFFT, uint16_t N, uint16_t Nby2, float32_t normalize);\r\n\r\n/**\r\n * @brief Processing function for the floating-point DCT4/IDCT4.\r\n * @param[in]     S              points to an instance of the floating-point DCT4/IDCT4 structure.\r\n * @param[in]     pState         points to state buffer.\r\n * @param[in,out] pInlineBuffer  points to the in-place input and output buffer.\r\n */\r\nvoid arm_dct4_f32(const arm_dct4_instance_f32 *S, float32_t *pState, float32_t *pInlineBuffer);\r\n\r\n/**\r\n * @brief Instance structure for the Q31 DCT4/IDCT4 function.\r\n */\r\ntypedef struct {\r\n  uint16_t                      N;          /**< length of the DCT4. */\r\n  uint16_t                      Nby2;       /**< half of the length of the DCT4. */\r\n  q31_t                         normalize;  /**< normalizing factor. */\r\n  q31_t *                       pTwiddle;   /**< points to the twiddle factor table. */\r\n  q31_t *                       pCosFactor; /**< points to the cosFactor table. */\r\n  arm_rfft_instance_q31 *       pRfft;      /**< points to the real FFT instance. */\r\n  arm_cfft_radix4_instance_q31 *pCfft;      /**< points to the complex FFT instance. */\r\n} arm_dct4_instance_q31;\r\n\r\n/**\r\n * @brief  Initialization function for the Q31 DCT4/IDCT4.\r\n * @param[in,out] S          points to an instance of Q31 DCT4/IDCT4 structure.\r\n * @param[in]     S_RFFT     points to an instance of Q31 RFFT/RIFFT structure\r\n * @param[in]     S_CFFT     points to an instance of Q31 CFFT/CIFFT structure\r\n * @param[in]     N          length of the DCT4.\r\n * @param[in]     Nby2       half of the length of the DCT4.\r\n * @param[in]     normalize  normalizing factor.\r\n * @return      arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>N</code> is not a supported transform length.\r\n */\r\narm_status arm_dct4_init_q31(arm_dct4_instance_q31 *S, arm_rfft_instance_q31 *S_RFFT, arm_cfft_radix4_instance_q31 *S_CFFT, uint16_t N, uint16_t Nby2, q31_t normalize);\r\n\r\n/**\r\n * @brief Processing function for the Q31 DCT4/IDCT4.\r\n * @param[in]     S              points to an instance of the Q31 DCT4 structure.\r\n * @param[in]     pState         points to state buffer.\r\n * @param[in,out] pInlineBuffer  points to the in-place input and output buffer.\r\n */\r\nvoid arm_dct4_q31(const arm_dct4_instance_q31 *S, q31_t *pState, q31_t *pInlineBuffer);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 DCT4/IDCT4 function.\r\n */\r\ntypedef struct {\r\n  uint16_t                      N;          /**< length of the DCT4. */\r\n  uint16_t                      Nby2;       /**< half of the length of the DCT4. */\r\n  q15_t                         normalize;  /**< normalizing factor. */\r\n  q15_t *                       pTwiddle;   /**< points to the twiddle factor table. */\r\n  q15_t *                       pCosFactor; /**< points to the cosFactor table. */\r\n  arm_rfft_instance_q15 *       pRfft;      /**< points to the real FFT instance. */\r\n  arm_cfft_radix4_instance_q15 *pCfft;      /**< points to the complex FFT instance. */\r\n} arm_dct4_instance_q15;\r\n\r\n/**\r\n * @brief  Initialization function for the Q15 DCT4/IDCT4.\r\n * @param[in,out] S          points to an instance of Q15 DCT4/IDCT4 structure.\r\n * @param[in]     S_RFFT     points to an instance of Q15 RFFT/RIFFT structure.\r\n * @param[in]     S_CFFT     points to an instance of Q15 CFFT/CIFFT structure.\r\n * @param[in]     N          length of the DCT4.\r\n * @param[in]     Nby2       half of the length of the DCT4.\r\n * @param[in]     normalize  normalizing factor.\r\n * @return      arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>N</code> is not a supported transform length.\r\n */\r\narm_status arm_dct4_init_q15(arm_dct4_instance_q15 *S, arm_rfft_instance_q15 *S_RFFT, arm_cfft_radix4_instance_q15 *S_CFFT, uint16_t N, uint16_t Nby2, q15_t normalize);\r\n\r\n/**\r\n * @brief Processing function for the Q15 DCT4/IDCT4.\r\n * @param[in]     S              points to an instance of the Q15 DCT4 structure.\r\n * @param[in]     pState         points to state buffer.\r\n * @param[in,out] pInlineBuffer  points to the in-place input and output buffer.\r\n */\r\nvoid arm_dct4_q15(const arm_dct4_instance_q15 *S, q15_t *pState, q15_t *pInlineBuffer);\r\n\r\n/**\r\n * @brief Floating-point vector addition.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_add_f32(float32_t *pSrcA, float32_t *pSrcB, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q7 vector addition.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_add_q7(q7_t *pSrcA, q7_t *pSrcB, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q15 vector addition.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_add_q15(q15_t *pSrcA, q15_t *pSrcB, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q31 vector addition.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_add_q31(q31_t *pSrcA, q31_t *pSrcB, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Floating-point vector subtraction.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_sub_f32(float32_t *pSrcA, float32_t *pSrcB, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q7 vector subtraction.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_sub_q7(q7_t *pSrcA, q7_t *pSrcB, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q15 vector subtraction.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_sub_q15(q15_t *pSrcA, q15_t *pSrcB, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q31 vector subtraction.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_sub_q31(q31_t *pSrcA, q31_t *pSrcB, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Multiplies a floating-point vector by a scalar.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[in]  scale      scale factor to be applied\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_scale_f32(float32_t *pSrc, float32_t scale, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Multiplies a Q7 vector by a scalar.\r\n * @param[in]  pSrc        points to the input vector\r\n * @param[in]  scaleFract  fractional portion of the scale value\r\n * @param[in]  shift       number of bits to shift the result by\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  blockSize   number of samples in the vector\r\n */\r\nvoid arm_scale_q7(q7_t *pSrc, q7_t scaleFract, int8_t shift, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Multiplies a Q15 vector by a scalar.\r\n * @param[in]  pSrc        points to the input vector\r\n * @param[in]  scaleFract  fractional portion of the scale value\r\n * @param[in]  shift       number of bits to shift the result by\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  blockSize   number of samples in the vector\r\n */\r\nvoid arm_scale_q15(q15_t *pSrc, q15_t scaleFract, int8_t shift, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Multiplies a Q31 vector by a scalar.\r\n * @param[in]  pSrc        points to the input vector\r\n * @param[in]  scaleFract  fractional portion of the scale value\r\n * @param[in]  shift       number of bits to shift the result by\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  blockSize   number of samples in the vector\r\n */\r\nvoid arm_scale_q31(q31_t *pSrc, q31_t scaleFract, int8_t shift, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q7 vector absolute value.\r\n * @param[in]  pSrc       points to the input buffer\r\n * @param[out] pDst       points to the output buffer\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_abs_q7(q7_t *pSrc, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Floating-point vector absolute value.\r\n * @param[in]  pSrc       points to the input buffer\r\n * @param[out] pDst       points to the output buffer\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_abs_f32(float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q15 vector absolute value.\r\n * @param[in]  pSrc       points to the input buffer\r\n * @param[out] pDst       points to the output buffer\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_abs_q15(q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q31 vector absolute value.\r\n * @param[in]  pSrc       points to the input buffer\r\n * @param[out] pDst       points to the output buffer\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_abs_q31(q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Dot product of floating-point vectors.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n * @param[out] result     output result returned here\r\n */\r\nvoid arm_dot_prod_f32(float32_t *pSrcA, float32_t *pSrcB, uint32_t blockSize, float32_t *result);\r\n\r\n/**\r\n * @brief Dot product of Q7 vectors.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n * @param[out] result     output result returned here\r\n */\r\nvoid arm_dot_prod_q7(q7_t *pSrcA, q7_t *pSrcB, uint32_t blockSize, q31_t *result);\r\n\r\n/**\r\n * @brief Dot product of Q15 vectors.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n * @param[out] result     output result returned here\r\n */\r\nvoid arm_dot_prod_q15(q15_t *pSrcA, q15_t *pSrcB, uint32_t blockSize, q63_t *result);\r\n\r\n/**\r\n * @brief Dot product of Q31 vectors.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n * @param[out] result     output result returned here\r\n */\r\nvoid arm_dot_prod_q31(q31_t *pSrcA, q31_t *pSrcB, uint32_t blockSize, q63_t *result);\r\n\r\n/**\r\n * @brief  Shifts the elements of a Q7 vector a specified number of bits.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[in]  shiftBits  number of bits to shift.  A positive value shifts left; a negative value shifts right.\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_shift_q7(q7_t *pSrc, int8_t shiftBits, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Shifts the elements of a Q15 vector a specified number of bits.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[in]  shiftBits  number of bits to shift.  A positive value shifts left; a negative value shifts right.\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_shift_q15(q15_t *pSrc, int8_t shiftBits, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Shifts the elements of a Q31 vector a specified number of bits.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[in]  shiftBits  number of bits to shift.  A positive value shifts left; a negative value shifts right.\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_shift_q31(q31_t *pSrc, int8_t shiftBits, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Adds a constant offset to a floating-point vector.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[in]  offset     is the offset to be added\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_offset_f32(float32_t *pSrc, float32_t offset, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Adds a constant offset to a Q7 vector.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[in]  offset     is the offset to be added\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_offset_q7(q7_t *pSrc, q7_t offset, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Adds a constant offset to a Q15 vector.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[in]  offset     is the offset to be added\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_offset_q15(q15_t *pSrc, q15_t offset, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Adds a constant offset to a Q31 vector.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[in]  offset     is the offset to be added\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_offset_q31(q31_t *pSrc, q31_t offset, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Negates the elements of a floating-point vector.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_negate_f32(float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Negates the elements of a Q7 vector.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_negate_q7(q7_t *pSrc, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Negates the elements of a Q15 vector.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_negate_q15(q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Negates the elements of a Q31 vector.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_negate_q31(q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Copies the elements of a floating-point vector.\r\n * @param[in]  pSrc       input pointer\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_copy_f32(float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Copies the elements of a Q7 vector.\r\n * @param[in]  pSrc       input pointer\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_copy_q7(q7_t *pSrc, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Copies the elements of a Q15 vector.\r\n * @param[in]  pSrc       input pointer\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_copy_q15(q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Copies the elements of a Q31 vector.\r\n * @param[in]  pSrc       input pointer\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_copy_q31(q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Fills a constant value into a floating-point vector.\r\n * @param[in]  value      input value to be filled\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_fill_f32(float32_t value, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Fills a constant value into a Q7 vector.\r\n * @param[in]  value      input value to be filled\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_fill_q7(q7_t value, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Fills a constant value into a Q15 vector.\r\n * @param[in]  value      input value to be filled\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_fill_q15(q15_t value, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Fills a constant value into a Q31 vector.\r\n * @param[in]  value      input value to be filled\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_fill_q31(q31_t value, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Convolution of floating-point sequences.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the location where the output result is written.  Length srcALen+srcBLen-1.\r\n */\r\nvoid arm_conv_f32(float32_t *pSrcA, uint32_t srcALen, float32_t *pSrcB, uint32_t srcBLen, float32_t *pDst);\r\n\r\n/**\r\n * @brief Convolution of Q15 sequences.\r\n * @param[in]  pSrcA      points to the first input sequence.\r\n * @param[in]  srcALen    length of the first input sequence.\r\n * @param[in]  pSrcB      points to the second input sequence.\r\n * @param[in]  srcBLen    length of the second input sequence.\r\n * @param[out] pDst       points to the block of output data  Length srcALen+srcBLen-1.\r\n * @param[in]  pScratch1  points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n * @param[in]  pScratch2  points to scratch buffer of size min(srcALen, srcBLen).\r\n */\r\nvoid arm_conv_opt_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, q15_t *pScratch1, q15_t *pScratch2);\r\n\r\n/**\r\n * @brief Convolution of Q15 sequences.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the location where the output result is written.  Length srcALen+srcBLen-1.\r\n */\r\nvoid arm_conv_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst);\r\n\r\n/**\r\n * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length srcALen+srcBLen-1.\r\n */\r\nvoid arm_conv_fast_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst);\r\n\r\n/**\r\n * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA      points to the first input sequence.\r\n * @param[in]  srcALen    length of the first input sequence.\r\n * @param[in]  pSrcB      points to the second input sequence.\r\n * @param[in]  srcBLen    length of the second input sequence.\r\n * @param[out] pDst       points to the block of output data  Length srcALen+srcBLen-1.\r\n * @param[in]  pScratch1  points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n * @param[in]  pScratch2  points to scratch buffer of size min(srcALen, srcBLen).\r\n */\r\nvoid arm_conv_fast_opt_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, q15_t *pScratch1, q15_t *pScratch2);\r\n\r\n/**\r\n * @brief Convolution of Q31 sequences.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length srcALen+srcBLen-1.\r\n */\r\nvoid arm_conv_q31(q31_t *pSrcA, uint32_t srcALen, q31_t *pSrcB, uint32_t srcBLen, q31_t *pDst);\r\n\r\n/**\r\n * @brief Convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length srcALen+srcBLen-1.\r\n */\r\nvoid arm_conv_fast_q31(q31_t *pSrcA, uint32_t srcALen, q31_t *pSrcB, uint32_t srcBLen, q31_t *pDst);\r\n\r\n/**\r\n * @brief Convolution of Q7 sequences.\r\n * @param[in]  pSrcA      points to the first input sequence.\r\n * @param[in]  srcALen    length of the first input sequence.\r\n * @param[in]  pSrcB      points to the second input sequence.\r\n * @param[in]  srcBLen    length of the second input sequence.\r\n * @param[out] pDst       points to the block of output data  Length srcALen+srcBLen-1.\r\n * @param[in]  pScratch1  points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n * @param[in]  pScratch2  points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen).\r\n */\r\nvoid arm_conv_opt_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst, q15_t *pScratch1, q15_t *pScratch2);\r\n\r\n/**\r\n * @brief Convolution of Q7 sequences.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length srcALen+srcBLen-1.\r\n */\r\nvoid arm_conv_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst);\r\n\r\n/**\r\n * @brief Partial convolution of floating-point sequences.\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_f32(float32_t *pSrcA, uint32_t srcALen, float32_t *pSrcB, uint32_t srcBLen, float32_t *pDst, uint32_t firstIndex, uint32_t numPoints);\r\n\r\n/**\r\n * @brief Partial convolution of Q15 sequences.\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @param[in]  pScratch1   points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n * @param[in]  pScratch2   points to scratch buffer of size min(srcALen, srcBLen).\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_opt_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, uint32_t firstIndex, uint32_t numPoints, q15_t *pScratch1, q15_t *pScratch2);\r\n\r\n/**\r\n * @brief Partial convolution of Q15 sequences.\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, uint32_t firstIndex, uint32_t numPoints);\r\n\r\n/**\r\n * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_fast_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, uint32_t firstIndex, uint32_t numPoints);\r\n\r\n/**\r\n * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @param[in]  pScratch1   points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n * @param[in]  pScratch2   points to scratch buffer of size min(srcALen, srcBLen).\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_fast_opt_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, uint32_t firstIndex, uint32_t numPoints, q15_t *pScratch1, q15_t *pScratch2);\r\n\r\n/**\r\n * @brief Partial convolution of Q31 sequences.\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_q31(q31_t *pSrcA, uint32_t srcALen, q31_t *pSrcB, uint32_t srcBLen, q31_t *pDst, uint32_t firstIndex, uint32_t numPoints);\r\n\r\n/**\r\n * @brief Partial convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_fast_q31(q31_t *pSrcA, uint32_t srcALen, q31_t *pSrcB, uint32_t srcBLen, q31_t *pDst, uint32_t firstIndex, uint32_t numPoints);\r\n\r\n/**\r\n * @brief Partial convolution of Q7 sequences\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @param[in]  pScratch1   points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n * @param[in]  pScratch2   points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen).\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_opt_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst, uint32_t firstIndex, uint32_t numPoints, q15_t *pScratch1, q15_t *pScratch2);\r\n\r\n/**\r\n * @brief Partial convolution of Q7 sequences.\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst, uint32_t firstIndex, uint32_t numPoints);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 FIR decimator.\r\n */\r\ntypedef struct {\r\n  uint8_t  M;       /**< decimation factor. */\r\n  uint16_t numTaps; /**< number of coefficients in the filter. */\r\n  q15_t *  pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/\r\n  q15_t *  pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n} arm_fir_decimate_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 FIR decimator.\r\n */\r\ntypedef struct {\r\n  uint8_t  M;       /**< decimation factor. */\r\n  uint16_t numTaps; /**< number of coefficients in the filter. */\r\n  q31_t *  pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/\r\n  q31_t *  pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n} arm_fir_decimate_instance_q31;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point FIR decimator.\r\n */\r\ntypedef struct {\r\n  uint8_t    M;       /**< decimation factor. */\r\n  uint16_t   numTaps; /**< number of coefficients in the filter. */\r\n  float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/\r\n  float32_t *pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n} arm_fir_decimate_instance_f32;\r\n\r\n/**\r\n * @brief Processing function for the floating-point FIR decimator.\r\n * @param[in]  S          points to an instance of the floating-point FIR decimator structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of input samples to process per call.\r\n */\r\nvoid arm_fir_decimate_f32(const arm_fir_decimate_instance_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point FIR decimator.\r\n * @param[in,out] S          points to an instance of the floating-point FIR decimator structure.\r\n * @param[in]     numTaps    number of coefficients in the filter.\r\n * @param[in]     M          decimation factor.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of input samples to process per call.\r\n * @return    The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if\r\n * <code>blockSize</code> is not a multiple of <code>M</code>.\r\n */\r\narm_status arm_fir_decimate_init_f32(arm_fir_decimate_instance_f32 *S, uint16_t numTaps, uint8_t M, float32_t *pCoeffs, float32_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q15 FIR decimator.\r\n * @param[in]  S          points to an instance of the Q15 FIR decimator structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of input samples to process per call.\r\n */\r\nvoid arm_fir_decimate_q15(const arm_fir_decimate_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q15 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4.\r\n * @param[in]  S          points to an instance of the Q15 FIR decimator structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of input samples to process per call.\r\n */\r\nvoid arm_fir_decimate_fast_q15(const arm_fir_decimate_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q15 FIR decimator.\r\n * @param[in,out] S          points to an instance of the Q15 FIR decimator structure.\r\n * @param[in]     numTaps    number of coefficients in the filter.\r\n * @param[in]     M          decimation factor.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of input samples to process per call.\r\n * @return    The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if\r\n * <code>blockSize</code> is not a multiple of <code>M</code>.\r\n */\r\narm_status arm_fir_decimate_init_q15(arm_fir_decimate_instance_q15 *S, uint16_t numTaps, uint8_t M, q15_t *pCoeffs, q15_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q31 FIR decimator.\r\n * @param[in]  S     points to an instance of the Q31 FIR decimator structure.\r\n * @param[in]  pSrc  points to the block of input data.\r\n * @param[out] pDst  points to the block of output data\r\n * @param[in] blockSize number of input samples to process per call.\r\n */\r\nvoid arm_fir_decimate_q31(const arm_fir_decimate_instance_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q31 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4.\r\n * @param[in]  S          points to an instance of the Q31 FIR decimator structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of input samples to process per call.\r\n */\r\nvoid arm_fir_decimate_fast_q31(arm_fir_decimate_instance_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q31 FIR decimator.\r\n * @param[in,out] S          points to an instance of the Q31 FIR decimator structure.\r\n * @param[in]     numTaps    number of coefficients in the filter.\r\n * @param[in]     M          decimation factor.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of input samples to process per call.\r\n * @return    The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if\r\n * <code>blockSize</code> is not a multiple of <code>M</code>.\r\n */\r\narm_status arm_fir_decimate_init_q31(arm_fir_decimate_instance_q31 *S, uint16_t numTaps, uint8_t M, q31_t *pCoeffs, q31_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 FIR interpolator.\r\n */\r\ntypedef struct {\r\n  uint8_t  L;           /**< upsample factor. */\r\n  uint16_t phaseLength; /**< length of each polyphase filter component. */\r\n  q15_t *  pCoeffs;     /**< points to the coefficient array. The array is of length L*phaseLength. */\r\n  q15_t *  pState;      /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */\r\n} arm_fir_interpolate_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 FIR interpolator.\r\n */\r\ntypedef struct {\r\n  uint8_t  L;           /**< upsample factor. */\r\n  uint16_t phaseLength; /**< length of each polyphase filter component. */\r\n  q31_t *  pCoeffs;     /**< points to the coefficient array. The array is of length L*phaseLength. */\r\n  q31_t *  pState;      /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */\r\n} arm_fir_interpolate_instance_q31;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point FIR interpolator.\r\n */\r\ntypedef struct {\r\n  uint8_t    L;           /**< upsample factor. */\r\n  uint16_t   phaseLength; /**< length of each polyphase filter component. */\r\n  float32_t *pCoeffs;     /**< points to the coefficient array. The array is of length L*phaseLength. */\r\n  float32_t *pState;      /**< points to the state variable array. The array is of length phaseLength+numTaps-1. */\r\n} arm_fir_interpolate_instance_f32;\r\n\r\n/**\r\n * @brief Processing function for the Q15 FIR interpolator.\r\n * @param[in]  S          points to an instance of the Q15 FIR interpolator structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of input samples to process per call.\r\n */\r\nvoid arm_fir_interpolate_q15(const arm_fir_interpolate_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q15 FIR interpolator.\r\n * @param[in,out] S          points to an instance of the Q15 FIR interpolator structure.\r\n * @param[in]     L          upsample factor.\r\n * @param[in]     numTaps    number of filter coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficient buffer.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of input samples to process per call.\r\n * @return        The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if\r\n * the filter length <code>numTaps</code> is not a multiple of the interpolation factor <code>L</code>.\r\n */\r\narm_status arm_fir_interpolate_init_q15(arm_fir_interpolate_instance_q15 *S, uint8_t L, uint16_t numTaps, q15_t *pCoeffs, q15_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q31 FIR interpolator.\r\n * @param[in]  S          points to an instance of the Q15 FIR interpolator structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of input samples to process per call.\r\n */\r\nvoid arm_fir_interpolate_q31(const arm_fir_interpolate_instance_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q31 FIR interpolator.\r\n * @param[in,out] S          points to an instance of the Q31 FIR interpolator structure.\r\n * @param[in]     L          upsample factor.\r\n * @param[in]     numTaps    number of filter coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficient buffer.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of input samples to process per call.\r\n * @return        The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if\r\n * the filter length <code>numTaps</code> is not a multiple of the interpolation factor <code>L</code>.\r\n */\r\narm_status arm_fir_interpolate_init_q31(arm_fir_interpolate_instance_q31 *S, uint8_t L, uint16_t numTaps, q31_t *pCoeffs, q31_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the floating-point FIR interpolator.\r\n * @param[in]  S          points to an instance of the floating-point FIR interpolator structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of input samples to process per call.\r\n */\r\nvoid arm_fir_interpolate_f32(const arm_fir_interpolate_instance_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point FIR interpolator.\r\n * @param[in,out] S          points to an instance of the floating-point FIR interpolator structure.\r\n * @param[in]     L          upsample factor.\r\n * @param[in]     numTaps    number of filter coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficient buffer.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of input samples to process per call.\r\n * @return        The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if\r\n * the filter length <code>numTaps</code> is not a multiple of the interpolation factor <code>L</code>.\r\n */\r\narm_status arm_fir_interpolate_init_f32(arm_fir_interpolate_instance_f32 *S, uint8_t L, uint16_t numTaps, float32_t *pCoeffs, float32_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the high precision Q31 Biquad cascade filter.\r\n */\r\ntypedef struct {\r\n  uint8_t numStages; /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */\r\n  q63_t * pState;    /**< points to the array of state coefficients.  The array is of length 4*numStages. */\r\n  q31_t * pCoeffs;   /**< points to the array of coefficients.  The array is of length 5*numStages. */\r\n  uint8_t postShift; /**< additional shift, in bits, applied to each output sample. */\r\n} arm_biquad_cas_df1_32x64_ins_q31;\r\n\r\n/**\r\n * @param[in]  S          points to an instance of the high precision Q31 Biquad cascade filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cas_df1_32x64_q31(const arm_biquad_cas_df1_32x64_ins_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @param[in,out] S          points to an instance of the high precision Q31 Biquad cascade filter structure.\r\n * @param[in]     numStages  number of 2nd order stages in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     postShift  shift to be applied to the output. Varies according to the coefficients format\r\n */\r\nvoid arm_biquad_cas_df1_32x64_init_q31(arm_biquad_cas_df1_32x64_ins_q31 *S, uint8_t numStages, q31_t *pCoeffs, q63_t *pState, uint8_t postShift);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter.\r\n */\r\ntypedef struct {\r\n  uint8_t    numStages; /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */\r\n  float32_t *pState;    /**< points to the array of state coefficients.  The array is of length 2*numStages. */\r\n  float32_t *pCoeffs;   /**< points to the array of coefficients.  The array is of length 5*numStages. */\r\n} arm_biquad_cascade_df2T_instance_f32;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter.\r\n */\r\ntypedef struct {\r\n  uint8_t    numStages; /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */\r\n  float32_t *pState;    /**< points to the array of state coefficients.  The array is of length 4*numStages. */\r\n  float32_t *pCoeffs;   /**< points to the array of coefficients.  The array is of length 5*numStages. */\r\n} arm_biquad_cascade_stereo_df2T_instance_f32;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter.\r\n */\r\ntypedef struct {\r\n  uint8_t    numStages; /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */\r\n  float64_t *pState;    /**< points to the array of state coefficients.  The array is of length 2*numStages. */\r\n  float64_t *pCoeffs;   /**< points to the array of coefficients.  The array is of length 5*numStages. */\r\n} arm_biquad_cascade_df2T_instance_f64;\r\n\r\n/**\r\n * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter.\r\n * @param[in]  S          points to an instance of the filter data structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cascade_df2T_f32(const arm_biquad_cascade_df2T_instance_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. 2 channels\r\n * @param[in]  S          points to an instance of the filter data structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cascade_stereo_df2T_f32(const arm_biquad_cascade_stereo_df2T_instance_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter.\r\n * @param[in]  S          points to an instance of the filter data structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cascade_df2T_f64(const arm_biquad_cascade_df2T_instance_f64 *S, float64_t *pSrc, float64_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point transposed direct form II Biquad cascade filter.\r\n * @param[in,out] S          points to an instance of the filter data structure.\r\n * @param[in]     numStages  number of 2nd order stages in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n */\r\nvoid arm_biquad_cascade_df2T_init_f32(arm_biquad_cascade_df2T_instance_f32 *S, uint8_t numStages, float32_t *pCoeffs, float32_t *pState);\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point transposed direct form II Biquad cascade filter.\r\n * @param[in,out] S          points to an instance of the filter data structure.\r\n * @param[in]     numStages  number of 2nd order stages in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n */\r\nvoid arm_biquad_cascade_stereo_df2T_init_f32(arm_biquad_cascade_stereo_df2T_instance_f32 *S, uint8_t numStages, float32_t *pCoeffs, float32_t *pState);\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point transposed direct form II Biquad cascade filter.\r\n * @param[in,out] S          points to an instance of the filter data structure.\r\n * @param[in]     numStages  number of 2nd order stages in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n */\r\nvoid arm_biquad_cascade_df2T_init_f64(arm_biquad_cascade_df2T_instance_f64 *S, uint8_t numStages, float64_t *pCoeffs, float64_t *pState);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 FIR lattice filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numStages; /**< number of filter stages. */\r\n  q15_t *  pState;    /**< points to the state variable array. The array is of length numStages. */\r\n  q15_t *  pCoeffs;   /**< points to the coefficient array. The array is of length numStages. */\r\n} arm_fir_lattice_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 FIR lattice filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numStages; /**< number of filter stages. */\r\n  q31_t *  pState;    /**< points to the state variable array. The array is of length numStages. */\r\n  q31_t *  pCoeffs;   /**< points to the coefficient array. The array is of length numStages. */\r\n} arm_fir_lattice_instance_q31;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point FIR lattice filter.\r\n */\r\ntypedef struct {\r\n  uint16_t   numStages; /**< number of filter stages. */\r\n  float32_t *pState;    /**< points to the state variable array. The array is of length numStages. */\r\n  float32_t *pCoeffs;   /**< points to the coefficient array. The array is of length numStages. */\r\n} arm_fir_lattice_instance_f32;\r\n\r\n/**\r\n * @brief Initialization function for the Q15 FIR lattice filter.\r\n * @param[in] S          points to an instance of the Q15 FIR lattice structure.\r\n * @param[in] numStages  number of filter stages.\r\n * @param[in] pCoeffs    points to the coefficient buffer.  The array is of length numStages.\r\n * @param[in] pState     points to the state buffer.  The array is of length numStages.\r\n */\r\nvoid arm_fir_lattice_init_q15(arm_fir_lattice_instance_q15 *S, uint16_t numStages, q15_t *pCoeffs, q15_t *pState);\r\n\r\n/**\r\n * @brief Processing function for the Q15 FIR lattice filter.\r\n * @param[in]  S          points to an instance of the Q15 FIR lattice structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_lattice_q15(const arm_fir_lattice_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for the Q31 FIR lattice filter.\r\n * @param[in] S          points to an instance of the Q31 FIR lattice structure.\r\n * @param[in] numStages  number of filter stages.\r\n * @param[in] pCoeffs    points to the coefficient buffer.  The array is of length numStages.\r\n * @param[in] pState     points to the state buffer.   The array is of length numStages.\r\n */\r\nvoid arm_fir_lattice_init_q31(arm_fir_lattice_instance_q31 *S, uint16_t numStages, q31_t *pCoeffs, q31_t *pState);\r\n\r\n/**\r\n * @brief Processing function for the Q31 FIR lattice filter.\r\n * @param[in]  S          points to an instance of the Q31 FIR lattice structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_lattice_q31(const arm_fir_lattice_instance_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for the floating-point FIR lattice filter.\r\n * @param[in] S          points to an instance of the floating-point FIR lattice structure.\r\n * @param[in] numStages  number of filter stages.\r\n * @param[in] pCoeffs    points to the coefficient buffer.  The array is of length numStages.\r\n * @param[in] pState     points to the state buffer.  The array is of length numStages.\r\n */\r\nvoid arm_fir_lattice_init_f32(arm_fir_lattice_instance_f32 *S, uint16_t numStages, float32_t *pCoeffs, float32_t *pState);\r\n\r\n/**\r\n * @brief Processing function for the floating-point FIR lattice filter.\r\n * @param[in]  S          points to an instance of the floating-point FIR lattice structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_lattice_f32(const arm_fir_lattice_instance_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 IIR lattice filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numStages; /**< number of stages in the filter. */\r\n  q15_t *  pState;    /**< points to the state variable array. The array is of length numStages+blockSize. */\r\n  q15_t *  pkCoeffs;  /**< points to the reflection coefficient array. The array is of length numStages. */\r\n  q15_t *  pvCoeffs;  /**< points to the ladder coefficient array. The array is of length numStages+1. */\r\n} arm_iir_lattice_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 IIR lattice filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numStages; /**< number of stages in the filter. */\r\n  q31_t *  pState;    /**< points to the state variable array. The array is of length numStages+blockSize. */\r\n  q31_t *  pkCoeffs;  /**< points to the reflection coefficient array. The array is of length numStages. */\r\n  q31_t *  pvCoeffs;  /**< points to the ladder coefficient array. The array is of length numStages+1. */\r\n} arm_iir_lattice_instance_q31;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point IIR lattice filter.\r\n */\r\ntypedef struct {\r\n  uint16_t   numStages; /**< number of stages in the filter. */\r\n  float32_t *pState;    /**< points to the state variable array. The array is of length numStages+blockSize. */\r\n  float32_t *pkCoeffs;  /**< points to the reflection coefficient array. The array is of length numStages. */\r\n  float32_t *pvCoeffs;  /**< points to the ladder coefficient array. The array is of length numStages+1. */\r\n} arm_iir_lattice_instance_f32;\r\n\r\n/**\r\n * @brief Processing function for the floating-point IIR lattice filter.\r\n * @param[in]  S          points to an instance of the floating-point IIR lattice structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_iir_lattice_f32(const arm_iir_lattice_instance_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for the floating-point IIR lattice filter.\r\n * @param[in] S          points to an instance of the floating-point IIR lattice structure.\r\n * @param[in] numStages  number of stages in the filter.\r\n * @param[in] pkCoeffs   points to the reflection coefficient buffer.  The array is of length numStages.\r\n * @param[in] pvCoeffs   points to the ladder coefficient buffer.  The array is of length numStages+1.\r\n * @param[in] pState     points to the state buffer.  The array is of length numStages+blockSize-1.\r\n * @param[in] blockSize  number of samples to process.\r\n */\r\nvoid arm_iir_lattice_init_f32(arm_iir_lattice_instance_f32 *S, uint16_t numStages, float32_t *pkCoeffs, float32_t *pvCoeffs, float32_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q31 IIR lattice filter.\r\n * @param[in]  S          points to an instance of the Q31 IIR lattice structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_iir_lattice_q31(const arm_iir_lattice_instance_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for the Q31 IIR lattice filter.\r\n * @param[in] S          points to an instance of the Q31 IIR lattice structure.\r\n * @param[in] numStages  number of stages in the filter.\r\n * @param[in] pkCoeffs   points to the reflection coefficient buffer.  The array is of length numStages.\r\n * @param[in] pvCoeffs   points to the ladder coefficient buffer.  The array is of length numStages+1.\r\n * @param[in] pState     points to the state buffer.  The array is of length numStages+blockSize.\r\n * @param[in] blockSize  number of samples to process.\r\n */\r\nvoid arm_iir_lattice_init_q31(arm_iir_lattice_instance_q31 *S, uint16_t numStages, q31_t *pkCoeffs, q31_t *pvCoeffs, q31_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q15 IIR lattice filter.\r\n * @param[in]  S          points to an instance of the Q15 IIR lattice structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_iir_lattice_q15(const arm_iir_lattice_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for the Q15 IIR lattice filter.\r\n * @param[in] S          points to an instance of the fixed-point Q15 IIR lattice structure.\r\n * @param[in] numStages  number of stages in the filter.\r\n * @param[in] pkCoeffs   points to reflection coefficient buffer.  The array is of length numStages.\r\n * @param[in] pvCoeffs   points to ladder coefficient buffer.  The array is of length numStages+1.\r\n * @param[in] pState     points to state buffer.  The array is of length numStages+blockSize.\r\n * @param[in] blockSize  number of samples to process per call.\r\n */\r\nvoid arm_iir_lattice_init_q15(arm_iir_lattice_instance_q15 *S, uint16_t numStages, q15_t *pkCoeffs, q15_t *pvCoeffs, q15_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point LMS filter.\r\n */\r\ntypedef struct {\r\n  uint16_t   numTaps; /**< number of coefficients in the filter. */\r\n  float32_t *pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */\r\n  float32_t  mu;      /**< step size that controls filter coefficient updates. */\r\n} arm_lms_instance_f32;\r\n\r\n/**\r\n * @brief Processing function for floating-point LMS filter.\r\n * @param[in]  S          points to an instance of the floating-point LMS filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[in]  pRef       points to the block of reference data.\r\n * @param[out] pOut       points to the block of output data.\r\n * @param[out] pErr       points to the block of error data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_lms_f32(const arm_lms_instance_f32 *S, float32_t *pSrc, float32_t *pRef, float32_t *pOut, float32_t *pErr, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for floating-point LMS filter.\r\n * @param[in] S          points to an instance of the floating-point LMS filter structure.\r\n * @param[in] numTaps    number of filter coefficients.\r\n * @param[in] pCoeffs    points to the coefficient buffer.\r\n * @param[in] pState     points to state buffer.\r\n * @param[in] mu         step size that controls filter coefficient updates.\r\n * @param[in] blockSize  number of samples to process.\r\n */\r\nvoid arm_lms_init_f32(arm_lms_instance_f32 *S, uint16_t numTaps, float32_t *pCoeffs, float32_t *pState, float32_t mu, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 LMS filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps;   /**< number of coefficients in the filter. */\r\n  q15_t *  pState;    /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  q15_t *  pCoeffs;   /**< points to the coefficient array. The array is of length numTaps. */\r\n  q15_t    mu;        /**< step size that controls filter coefficient updates. */\r\n  uint32_t postShift; /**< bit shift applied to coefficients. */\r\n} arm_lms_instance_q15;\r\n\r\n/**\r\n * @brief Initialization function for the Q15 LMS filter.\r\n * @param[in] S          points to an instance of the Q15 LMS filter structure.\r\n * @param[in] numTaps    number of filter coefficients.\r\n * @param[in] pCoeffs    points to the coefficient buffer.\r\n * @param[in] pState     points to the state buffer.\r\n * @param[in] mu         step size that controls filter coefficient updates.\r\n * @param[in] blockSize  number of samples to process.\r\n * @param[in] postShift  bit shift applied to coefficients.\r\n */\r\nvoid arm_lms_init_q15(arm_lms_instance_q15 *S, uint16_t numTaps, q15_t *pCoeffs, q15_t *pState, q15_t mu, uint32_t blockSize, uint32_t postShift);\r\n\r\n/**\r\n * @brief Processing function for Q15 LMS filter.\r\n * @param[in]  S          points to an instance of the Q15 LMS filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[in]  pRef       points to the block of reference data.\r\n * @param[out] pOut       points to the block of output data.\r\n * @param[out] pErr       points to the block of error data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_lms_q15(const arm_lms_instance_q15 *S, q15_t *pSrc, q15_t *pRef, q15_t *pOut, q15_t *pErr, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the Q31 LMS filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps;   /**< number of coefficients in the filter. */\r\n  q31_t *  pState;    /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  q31_t *  pCoeffs;   /**< points to the coefficient array. The array is of length numTaps. */\r\n  q31_t    mu;        /**< step size that controls filter coefficient updates. */\r\n  uint32_t postShift; /**< bit shift applied to coefficients. */\r\n} arm_lms_instance_q31;\r\n\r\n/**\r\n * @brief Processing function for Q31 LMS filter.\r\n * @param[in]  S          points to an instance of the Q15 LMS filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[in]  pRef       points to the block of reference data.\r\n * @param[out] pOut       points to the block of output data.\r\n * @param[out] pErr       points to the block of error data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_lms_q31(const arm_lms_instance_q31 *S, q31_t *pSrc, q31_t *pRef, q31_t *pOut, q31_t *pErr, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for Q31 LMS filter.\r\n * @param[in] S          points to an instance of the Q31 LMS filter structure.\r\n * @param[in] numTaps    number of filter coefficients.\r\n * @param[in] pCoeffs    points to coefficient buffer.\r\n * @param[in] pState     points to state buffer.\r\n * @param[in] mu         step size that controls filter coefficient updates.\r\n * @param[in] blockSize  number of samples to process.\r\n * @param[in] postShift  bit shift applied to coefficients.\r\n */\r\nvoid arm_lms_init_q31(arm_lms_instance_q31 *S, uint16_t numTaps, q31_t *pCoeffs, q31_t *pState, q31_t mu, uint32_t blockSize, uint32_t postShift);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point normalized LMS filter.\r\n */\r\ntypedef struct {\r\n  uint16_t   numTaps; /**< number of coefficients in the filter. */\r\n  float32_t *pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */\r\n  float32_t  mu;      /**< step size that control filter coefficient updates. */\r\n  float32_t  energy;  /**< saves previous frame energy. */\r\n  float32_t  x0;      /**< saves previous input sample. */\r\n} arm_lms_norm_instance_f32;\r\n\r\n/**\r\n * @brief Processing function for floating-point normalized LMS filter.\r\n * @param[in]  S          points to an instance of the floating-point normalized LMS filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[in]  pRef       points to the block of reference data.\r\n * @param[out] pOut       points to the block of output data.\r\n * @param[out] pErr       points to the block of error data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_lms_norm_f32(arm_lms_norm_instance_f32 *S, float32_t *pSrc, float32_t *pRef, float32_t *pOut, float32_t *pErr, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for floating-point normalized LMS filter.\r\n * @param[in] S          points to an instance of the floating-point LMS filter structure.\r\n * @param[in] numTaps    number of filter coefficients.\r\n * @param[in] pCoeffs    points to coefficient buffer.\r\n * @param[in] pState     points to state buffer.\r\n * @param[in] mu         step size that controls filter coefficient updates.\r\n * @param[in] blockSize  number of samples to process.\r\n */\r\nvoid arm_lms_norm_init_f32(arm_lms_norm_instance_f32 *S, uint16_t numTaps, float32_t *pCoeffs, float32_t *pState, float32_t mu, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the Q31 normalized LMS filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps;    /**< number of coefficients in the filter. */\r\n  q31_t *  pState;     /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  q31_t *  pCoeffs;    /**< points to the coefficient array. The array is of length numTaps. */\r\n  q31_t    mu;         /**< step size that controls filter coefficient updates. */\r\n  uint8_t  postShift;  /**< bit shift applied to coefficients. */\r\n  q31_t *  recipTable; /**< points to the reciprocal initial value table. */\r\n  q31_t    energy;     /**< saves previous frame energy. */\r\n  q31_t    x0;         /**< saves previous input sample. */\r\n} arm_lms_norm_instance_q31;\r\n\r\n/**\r\n * @brief Processing function for Q31 normalized LMS filter.\r\n * @param[in]  S          points to an instance of the Q31 normalized LMS filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[in]  pRef       points to the block of reference data.\r\n * @param[out] pOut       points to the block of output data.\r\n * @param[out] pErr       points to the block of error data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_lms_norm_q31(arm_lms_norm_instance_q31 *S, q31_t *pSrc, q31_t *pRef, q31_t *pOut, q31_t *pErr, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for Q31 normalized LMS filter.\r\n * @param[in] S          points to an instance of the Q31 normalized LMS filter structure.\r\n * @param[in] numTaps    number of filter coefficients.\r\n * @param[in] pCoeffs    points to coefficient buffer.\r\n * @param[in] pState     points to state buffer.\r\n * @param[in] mu         step size that controls filter coefficient updates.\r\n * @param[in] blockSize  number of samples to process.\r\n * @param[in] postShift  bit shift applied to coefficients.\r\n */\r\nvoid arm_lms_norm_init_q31(arm_lms_norm_instance_q31 *S, uint16_t numTaps, q31_t *pCoeffs, q31_t *pState, q31_t mu, uint32_t blockSize, uint8_t postShift);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 normalized LMS filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps;    /**< Number of coefficients in the filter. */\r\n  q15_t *  pState;     /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  q15_t *  pCoeffs;    /**< points to the coefficient array. The array is of length numTaps. */\r\n  q15_t    mu;         /**< step size that controls filter coefficient updates. */\r\n  uint8_t  postShift;  /**< bit shift applied to coefficients. */\r\n  q15_t *  recipTable; /**< Points to the reciprocal initial value table. */\r\n  q15_t    energy;     /**< saves previous frame energy. */\r\n  q15_t    x0;         /**< saves previous input sample. */\r\n} arm_lms_norm_instance_q15;\r\n\r\n/**\r\n * @brief Processing function for Q15 normalized LMS filter.\r\n * @param[in]  S          points to an instance of the Q15 normalized LMS filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[in]  pRef       points to the block of reference data.\r\n * @param[out] pOut       points to the block of output data.\r\n * @param[out] pErr       points to the block of error data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_lms_norm_q15(arm_lms_norm_instance_q15 *S, q15_t *pSrc, q15_t *pRef, q15_t *pOut, q15_t *pErr, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for Q15 normalized LMS filter.\r\n * @param[in] S          points to an instance of the Q15 normalized LMS filter structure.\r\n * @param[in] numTaps    number of filter coefficients.\r\n * @param[in] pCoeffs    points to coefficient buffer.\r\n * @param[in] pState     points to state buffer.\r\n * @param[in] mu         step size that controls filter coefficient updates.\r\n * @param[in] blockSize  number of samples to process.\r\n * @param[in] postShift  bit shift applied to coefficients.\r\n */\r\nvoid arm_lms_norm_init_q15(arm_lms_norm_instance_q15 *S, uint16_t numTaps, q15_t *pCoeffs, q15_t *pState, q15_t mu, uint32_t blockSize, uint8_t postShift);\r\n\r\n/**\r\n * @brief Correlation of floating-point sequences.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n */\r\nvoid arm_correlate_f32(float32_t *pSrcA, uint32_t srcALen, float32_t *pSrcB, uint32_t srcBLen, float32_t *pDst);\r\n\r\n/**\r\n * @brief Correlation of Q15 sequences\r\n * @param[in]  pSrcA     points to the first input sequence.\r\n * @param[in]  srcALen   length of the first input sequence.\r\n * @param[in]  pSrcB     points to the second input sequence.\r\n * @param[in]  srcBLen   length of the second input sequence.\r\n * @param[out] pDst      points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n * @param[in]  pScratch  points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n */\r\nvoid arm_correlate_opt_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, q15_t *pScratch);\r\n\r\n/**\r\n * @brief Correlation of Q15 sequences.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n */\r\n\r\nvoid arm_correlate_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst);\r\n\r\n/**\r\n * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n */\r\n\r\nvoid arm_correlate_fast_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst);\r\n\r\n/**\r\n * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4.\r\n * @param[in]  pSrcA     points to the first input sequence.\r\n * @param[in]  srcALen   length of the first input sequence.\r\n * @param[in]  pSrcB     points to the second input sequence.\r\n * @param[in]  srcBLen   length of the second input sequence.\r\n * @param[out] pDst      points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n * @param[in]  pScratch  points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n */\r\nvoid arm_correlate_fast_opt_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, q15_t *pScratch);\r\n\r\n/**\r\n * @brief Correlation of Q31 sequences.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n */\r\nvoid arm_correlate_q31(q31_t *pSrcA, uint32_t srcALen, q31_t *pSrcB, uint32_t srcBLen, q31_t *pDst);\r\n\r\n/**\r\n * @brief Correlation of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n */\r\nvoid arm_correlate_fast_q31(q31_t *pSrcA, uint32_t srcALen, q31_t *pSrcB, uint32_t srcBLen, q31_t *pDst);\r\n\r\n/**\r\n * @brief Correlation of Q7 sequences.\r\n * @param[in]  pSrcA      points to the first input sequence.\r\n * @param[in]  srcALen    length of the first input sequence.\r\n * @param[in]  pSrcB      points to the second input sequence.\r\n * @param[in]  srcBLen    length of the second input sequence.\r\n * @param[out] pDst       points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n * @param[in]  pScratch1  points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n * @param[in]  pScratch2  points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen).\r\n */\r\nvoid arm_correlate_opt_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst, q15_t *pScratch1, q15_t *pScratch2);\r\n\r\n/**\r\n * @brief Correlation of Q7 sequences.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n */\r\nvoid arm_correlate_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point sparse FIR filter.\r\n */\r\ntypedef struct {\r\n  uint16_t   numTaps;    /**< number of coefficients in the filter. */\r\n  uint16_t   stateIndex; /**< state buffer index.  Points to the oldest sample in the state buffer. */\r\n  float32_t *pState;     /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */\r\n  float32_t *pCoeffs;    /**< points to the coefficient array. The array is of length numTaps.*/\r\n  uint16_t   maxDelay;   /**< maximum offset specified by the pTapDelay array. */\r\n  int32_t *  pTapDelay;  /**< points to the array of delay values.  The array is of length numTaps. */\r\n} arm_fir_sparse_instance_f32;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 sparse FIR filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps;    /**< number of coefficients in the filter. */\r\n  uint16_t stateIndex; /**< state buffer index.  Points to the oldest sample in the state buffer. */\r\n  q31_t *  pState;     /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */\r\n  q31_t *  pCoeffs;    /**< points to the coefficient array. The array is of length numTaps.*/\r\n  uint16_t maxDelay;   /**< maximum offset specified by the pTapDelay array. */\r\n  int32_t *pTapDelay;  /**< points to the array of delay values.  The array is of length numTaps. */\r\n} arm_fir_sparse_instance_q31;\r\n\r\n/**\r\n * @brief Instance structure for the Q15 sparse FIR filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps;    /**< number of coefficients in the filter. */\r\n  uint16_t stateIndex; /**< state buffer index.  Points to the oldest sample in the state buffer. */\r\n  q15_t *  pState;     /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */\r\n  q15_t *  pCoeffs;    /**< points to the coefficient array. The array is of length numTaps.*/\r\n  uint16_t maxDelay;   /**< maximum offset specified by the pTapDelay array. */\r\n  int32_t *pTapDelay;  /**< points to the array of delay values.  The array is of length numTaps. */\r\n} arm_fir_sparse_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q7 sparse FIR filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps;    /**< number of coefficients in the filter. */\r\n  uint16_t stateIndex; /**< state buffer index.  Points to the oldest sample in the state buffer. */\r\n  q7_t *   pState;     /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */\r\n  q7_t *   pCoeffs;    /**< points to the coefficient array. The array is of length numTaps.*/\r\n  uint16_t maxDelay;   /**< maximum offset specified by the pTapDelay array. */\r\n  int32_t *pTapDelay;  /**< points to the array of delay values.  The array is of length numTaps. */\r\n} arm_fir_sparse_instance_q7;\r\n\r\n/**\r\n * @brief Processing function for the floating-point sparse FIR filter.\r\n * @param[in]  S           points to an instance of the floating-point sparse FIR structure.\r\n * @param[in]  pSrc        points to the block of input data.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  pScratchIn  points to a temporary buffer of size blockSize.\r\n * @param[in]  blockSize   number of input samples to process per call.\r\n */\r\nvoid arm_fir_sparse_f32(arm_fir_sparse_instance_f32 *S, float32_t *pSrc, float32_t *pDst, float32_t *pScratchIn, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point sparse FIR filter.\r\n * @param[in,out] S          points to an instance of the floating-point sparse FIR structure.\r\n * @param[in]     numTaps    number of nonzero coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the array of filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     pTapDelay  points to the array of offset times.\r\n * @param[in]     maxDelay   maximum offset time supported.\r\n * @param[in]     blockSize  number of samples that will be processed per block.\r\n */\r\nvoid arm_fir_sparse_init_f32(arm_fir_sparse_instance_f32 *S, uint16_t numTaps, float32_t *pCoeffs, float32_t *pState, int32_t *pTapDelay, uint16_t maxDelay, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q31 sparse FIR filter.\r\n * @param[in]  S           points to an instance of the Q31 sparse FIR structure.\r\n * @param[in]  pSrc        points to the block of input data.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  pScratchIn  points to a temporary buffer of size blockSize.\r\n * @param[in]  blockSize   number of input samples to process per call.\r\n */\r\nvoid arm_fir_sparse_q31(arm_fir_sparse_instance_q31 *S, q31_t *pSrc, q31_t *pDst, q31_t *pScratchIn, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q31 sparse FIR filter.\r\n * @param[in,out] S          points to an instance of the Q31 sparse FIR structure.\r\n * @param[in]     numTaps    number of nonzero coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the array of filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     pTapDelay  points to the array of offset times.\r\n * @param[in]     maxDelay   maximum offset time supported.\r\n * @param[in]     blockSize  number of samples that will be processed per block.\r\n */\r\nvoid arm_fir_sparse_init_q31(arm_fir_sparse_instance_q31 *S, uint16_t numTaps, q31_t *pCoeffs, q31_t *pState, int32_t *pTapDelay, uint16_t maxDelay, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q15 sparse FIR filter.\r\n * @param[in]  S            points to an instance of the Q15 sparse FIR structure.\r\n * @param[in]  pSrc         points to the block of input data.\r\n * @param[out] pDst         points to the block of output data\r\n * @param[in]  pScratchIn   points to a temporary buffer of size blockSize.\r\n * @param[in]  pScratchOut  points to a temporary buffer of size blockSize.\r\n * @param[in]  blockSize    number of input samples to process per call.\r\n */\r\nvoid arm_fir_sparse_q15(arm_fir_sparse_instance_q15 *S, q15_t *pSrc, q15_t *pDst, q15_t *pScratchIn, q31_t *pScratchOut, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q15 sparse FIR filter.\r\n * @param[in,out] S          points to an instance of the Q15 sparse FIR structure.\r\n * @param[in]     numTaps    number of nonzero coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the array of filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     pTapDelay  points to the array of offset times.\r\n * @param[in]     maxDelay   maximum offset time supported.\r\n * @param[in]     blockSize  number of samples that will be processed per block.\r\n */\r\nvoid arm_fir_sparse_init_q15(arm_fir_sparse_instance_q15 *S, uint16_t numTaps, q15_t *pCoeffs, q15_t *pState, int32_t *pTapDelay, uint16_t maxDelay, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q7 sparse FIR filter.\r\n * @param[in]  S            points to an instance of the Q7 sparse FIR structure.\r\n * @param[in]  pSrc         points to the block of input data.\r\n * @param[out] pDst         points to the block of output data\r\n * @param[in]  pScratchIn   points to a temporary buffer of size blockSize.\r\n * @param[in]  pScratchOut  points to a temporary buffer of size blockSize.\r\n * @param[in]  blockSize    number of input samples to process per call.\r\n */\r\nvoid arm_fir_sparse_q7(arm_fir_sparse_instance_q7 *S, q7_t *pSrc, q7_t *pDst, q7_t *pScratchIn, q31_t *pScratchOut, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q7 sparse FIR filter.\r\n * @param[in,out] S          points to an instance of the Q7 sparse FIR structure.\r\n * @param[in]     numTaps    number of nonzero coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the array of filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     pTapDelay  points to the array of offset times.\r\n * @param[in]     maxDelay   maximum offset time supported.\r\n * @param[in]     blockSize  number of samples that will be processed per block.\r\n */\r\nvoid arm_fir_sparse_init_q7(arm_fir_sparse_instance_q7 *S, uint16_t numTaps, q7_t *pCoeffs, q7_t *pState, int32_t *pTapDelay, uint16_t maxDelay, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Floating-point sin_cos function.\r\n * @param[in]  theta   input value in degrees\r\n * @param[out] pSinVal  points to the processed sine output.\r\n * @param[out] pCosVal  points to the processed cos output.\r\n */\r\nvoid arm_sin_cos_f32(float32_t theta, float32_t *pSinVal, float32_t *pCosVal);\r\n\r\n/**\r\n * @brief  Q31 sin_cos function.\r\n * @param[in]  theta    scaled input value in degrees\r\n * @param[out] pSinVal  points to the processed sine output.\r\n * @param[out] pCosVal  points to the processed cosine output.\r\n */\r\nvoid arm_sin_cos_q31(q31_t theta, q31_t *pSinVal, q31_t *pCosVal);\r\n\r\n/**\r\n * @brief  Floating-point complex conjugate.\r\n * @param[in]  pSrc        points to the input vector\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n */\r\nvoid arm_cmplx_conj_f32(float32_t *pSrc, float32_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q31 complex conjugate.\r\n * @param[in]  pSrc        points to the input vector\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n */\r\nvoid arm_cmplx_conj_q31(q31_t *pSrc, q31_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q15 complex conjugate.\r\n * @param[in]  pSrc        points to the input vector\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n */\r\nvoid arm_cmplx_conj_q15(q15_t *pSrc, q15_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Floating-point complex magnitude squared\r\n * @param[in]  pSrc        points to the complex input vector\r\n * @param[out] pDst        points to the real output vector\r\n * @param[in]  numSamples  number of complex samples in the input vector\r\n */\r\nvoid arm_cmplx_mag_squared_f32(float32_t *pSrc, float32_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q31 complex magnitude squared\r\n * @param[in]  pSrc        points to the complex input vector\r\n * @param[out] pDst        points to the real output vector\r\n * @param[in]  numSamples  number of complex samples in the input vector\r\n */\r\nvoid arm_cmplx_mag_squared_q31(q31_t *pSrc, q31_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q15 complex magnitude squared\r\n * @param[in]  pSrc        points to the complex input vector\r\n * @param[out] pDst        points to the real output vector\r\n * @param[in]  numSamples  number of complex samples in the input vector\r\n */\r\nvoid arm_cmplx_mag_squared_q15(q15_t *pSrc, q15_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @ingroup groupController\r\n */\r\n\r\n/**\r\n * @defgroup PID PID Motor Control\r\n *\r\n * A Proportional Integral Derivative (PID) controller is a generic feedback control\r\n * loop mechanism widely used in industrial control systems.\r\n * A PID controller is the most commonly used type of feedback controller.\r\n *\r\n * This set of functions implements (PID) controllers\r\n * for Q15, Q31, and floating-point data types.  The functions operate on a single sample\r\n * of data and each call to the function returns a single processed value.\r\n * <code>S</code> points to an instance of the PID control data structure.  <code>in</code>\r\n * is the input sample value. The functions return the output value.\r\n *\r\n * \\par Algorithm:\r\n * <pre>\r\n *    y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]\r\n *    A0 = Kp + Ki + Kd\r\n *    A1 = (-Kp ) - (2 * Kd )\r\n *    A2 = Kd  </pre>\r\n *\r\n * \\par\r\n * where \\c Kp is proportional constant, \\c Ki is Integral constant and \\c Kd is Derivative constant\r\n *\r\n * \\par\r\n * \\image html PID.gif \"Proportional Integral Derivative Controller\"\r\n *\r\n * \\par\r\n * The PID controller calculates an \"error\" value as the difference between\r\n * the measured output and the reference input.\r\n * The controller attempts to minimize the error by adjusting the process control inputs.\r\n * The proportional value determines the reaction to the current error,\r\n * the integral value determines the reaction based on the sum of recent errors,\r\n * and the derivative value determines the reaction based on the rate at which the error has been changing.\r\n *\r\n * \\par Instance Structure\r\n * The Gains A0, A1, A2 and state variables for a PID controller are stored together in an instance data structure.\r\n * A separate instance structure must be defined for each PID Controller.\r\n * There are separate instance structure declarations for each of the 3 supported data types.\r\n *\r\n * \\par Reset Functions\r\n * There is also an associated reset function for each data type which clears the state array.\r\n *\r\n * \\par Initialization Functions\r\n * There is also an associated initialization function for each data type.\r\n * The initialization function performs the following operations:\r\n * - Initializes the Gains A0, A1, A2 from Kp,Ki, Kd gains.\r\n * - Zeros out the values in the state buffer.\r\n *\r\n * \\par\r\n * Instance structure cannot be placed into a const data section and it is recommended to use the initialization function.\r\n *\r\n * \\par Fixed-Point Behavior\r\n * Care must be taken when using the fixed-point versions of the PID Controller functions.\r\n * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered.\r\n * Refer to the function specific documentation below for usage guidelines.\r\n */\r\n\r\n/**\r\n * @addtogroup PID\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Process function for the floating-point PID Control.\r\n * @param[in,out] S   is an instance of the floating-point PID Control structure\r\n * @param[in]     in  input sample to process\r\n * @return out processed output sample.\r\n */\r\nstatic __INLINE float32_t arm_pid_f32(arm_pid_instance_f32 *S, float32_t in) {\r\n  float32_t out;\r\n\r\n  /* y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]  */\r\n  out = (S->A0 * in) + (S->A1 * S->state[0]) + (S->A2 * S->state[1]) + (S->state[2]);\r\n\r\n  /* Update state */\r\n  S->state[1] = S->state[0];\r\n  S->state[0] = in;\r\n  S->state[2] = out;\r\n\r\n  /* return to application */\r\n  return (out);\r\n}\r\n\r\n/**\r\n * @brief  Process function for the Q31 PID Control.\r\n * @param[in,out] S  points to an instance of the Q31 PID Control structure\r\n * @param[in]     in  input sample to process\r\n * @return out processed output sample.\r\n *\r\n * <b>Scaling and Overflow Behavior:</b>\r\n * \\par\r\n * The function is implemented using an internal 64-bit accumulator.\r\n * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit.\r\n * Thus, if the accumulator result overflows it wraps around rather than clip.\r\n * In order to avoid overflows completely the input signal must be scaled down by 2 bits as there are four additions.\r\n * After all multiply-accumulates are performed, the 2.62 accumulator is truncated to 1.32 format and then saturated to 1.31 format.\r\n */\r\nstatic __INLINE q31_t arm_pid_q31(arm_pid_instance_q31 *S, q31_t in) {\r\n  q63_t acc;\r\n  q31_t out;\r\n\r\n  /* acc = A0 * x[n]  */\r\n  acc = (q63_t)S->A0 * in;\r\n\r\n  /* acc += A1 * x[n-1] */\r\n  acc += (q63_t)S->A1 * S->state[0];\r\n\r\n  /* acc += A2 * x[n-2]  */\r\n  acc += (q63_t)S->A2 * S->state[1];\r\n\r\n  /* convert output to 1.31 format to add y[n-1] */\r\n  out = (q31_t)(acc >> 31u);\r\n\r\n  /* out += y[n-1] */\r\n  out += S->state[2];\r\n\r\n  /* Update state */\r\n  S->state[1] = S->state[0];\r\n  S->state[0] = in;\r\n  S->state[2] = out;\r\n\r\n  /* return to application */\r\n  return (out);\r\n}\r\n\r\n/**\r\n * @brief  Process function for the Q15 PID Control.\r\n * @param[in,out] S   points to an instance of the Q15 PID Control structure\r\n * @param[in]     in  input sample to process\r\n * @return out processed output sample.\r\n *\r\n * <b>Scaling and Overflow Behavior:</b>\r\n * \\par\r\n * The function is implemented using a 64-bit internal accumulator.\r\n * Both Gains and state variables are represented in 1.15 format and multiplications yield a 2.30 result.\r\n * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format.\r\n * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved.\r\n * After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits.\r\n * Lastly, the accumulator is saturated to yield a result in 1.15 format.\r\n */\r\nstatic __INLINE q15_t arm_pid_q15(arm_pid_instance_q15 *S, q15_t in) {\r\n  q63_t acc;\r\n  q15_t out;\r\n\r\n#ifndef ARM_MATH_CM0_FAMILY\r\n  __SIMD32_TYPE *vstate;\r\n\r\n  /* Implementation of PID controller */\r\n\r\n  /* acc = A0 * x[n]  */\r\n  acc = (q31_t)__SMUAD((uint32_t)S->A0, (uint32_t)in);\r\n\r\n  /* acc += A1 * x[n-1] + A2 * x[n-2]  */\r\n  vstate = __SIMD32_CONST(S->state);\r\n  acc    = (q63_t)__SMLALD((uint32_t)S->A1, (uint32_t)*vstate, (uint64_t)acc);\r\n#else\r\n  /* acc = A0 * x[n]  */\r\n  acc = ((q31_t)S->A0) * in;\r\n\r\n  /* acc += A1 * x[n-1] + A2 * x[n-2]  */\r\n  acc += (q31_t)S->A1 * S->state[0];\r\n  acc += (q31_t)S->A2 * S->state[1];\r\n#endif\r\n\r\n  /* acc += y[n-1] */\r\n  acc += (q31_t)S->state[2] << 15;\r\n\r\n  /* saturate the output */\r\n  out = (q15_t)(__SSAT((acc >> 15), 16));\r\n\r\n  /* Update state */\r\n  S->state[1] = S->state[0];\r\n  S->state[0] = in;\r\n  S->state[2] = out;\r\n\r\n  /* return to application */\r\n  return (out);\r\n}\r\n\r\n/**\r\n * @} end of PID group\r\n */\r\n\r\n/**\r\n * @brief Floating-point matrix inverse.\r\n * @param[in]  src   points to the instance of the input floating-point matrix structure.\r\n * @param[out] dst   points to the instance of the output floating-point matrix structure.\r\n * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match.\r\n * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR.\r\n */\r\narm_status arm_mat_inverse_f32(const arm_matrix_instance_f32 *src, arm_matrix_instance_f32 *dst);\r\n\r\n/**\r\n * @brief Floating-point matrix inverse.\r\n * @param[in]  src   points to the instance of the input floating-point matrix structure.\r\n * @param[out] dst   points to the instance of the output floating-point matrix structure.\r\n * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match.\r\n * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR.\r\n */\r\narm_status arm_mat_inverse_f64(const arm_matrix_instance_f64 *src, arm_matrix_instance_f64 *dst);\r\n\r\n/**\r\n * @ingroup groupController\r\n */\r\n\r\n/**\r\n * @defgroup clarke Vector Clarke Transform\r\n * Forward Clarke transform converts the instantaneous stator phases into a two-coordinate time invariant vector.\r\n * Generally the Clarke transform uses three-phase currents <code>Ia, Ib and Ic</code> to calculate currents\r\n * in the two-phase orthogonal stator axis <code>Ialpha</code> and <code>Ibeta</code>.\r\n * When <code>Ialpha</code> is superposed with <code>Ia</code> as shown in the figure below\r\n * \\image html clarke.gif Stator current space vector and its components in (a,b).\r\n * and <code>Ia + Ib + Ic = 0</code>, in this condition <code>Ialpha</code> and <code>Ibeta</code>\r\n * can be calculated using only <code>Ia</code> and <code>Ib</code>.\r\n *\r\n * The function operates on a single sample of data and each call to the function returns the processed output.\r\n * The library provides separate functions for Q31 and floating-point data types.\r\n * \\par Algorithm\r\n * \\image html clarkeFormula.gif\r\n * where <code>Ia</code> and <code>Ib</code> are the instantaneous stator phases and\r\n * <code>pIalpha</code> and <code>pIbeta</code> are the two coordinates of time invariant vector.\r\n * \\par Fixed-Point Behavior\r\n * Care must be taken when using the Q31 version of the Clarke transform.\r\n * In particular, the overflow and saturation behavior of the accumulator used must be considered.\r\n * Refer to the function specific documentation below for usage guidelines.\r\n */\r\n\r\n/**\r\n * @addtogroup clarke\r\n * @{\r\n */\r\n\r\n/**\r\n *\r\n * @brief  Floating-point Clarke transform\r\n * @param[in]  Ia       input three-phase coordinate <code>a</code>\r\n * @param[in]  Ib       input three-phase coordinate <code>b</code>\r\n * @param[out] pIalpha  points to output two-phase orthogonal vector axis alpha\r\n * @param[out] pIbeta   points to output two-phase orthogonal vector axis beta\r\n */\r\nstatic __INLINE void arm_clarke_f32(float32_t Ia, float32_t Ib, float32_t *pIalpha, float32_t *pIbeta) {\r\n  /* Calculate pIalpha using the equation, pIalpha = Ia */\r\n  *pIalpha = Ia;\r\n\r\n  /* Calculate pIbeta using the equation, pIbeta = (1/sqrt(3)) * Ia + (2/sqrt(3)) * Ib */\r\n  *pIbeta = ((float32_t)0.57735026919 * Ia + (float32_t)1.15470053838 * Ib);\r\n}\r\n\r\n/**\r\n * @brief  Clarke transform for Q31 version\r\n * @param[in]  Ia       input three-phase coordinate <code>a</code>\r\n * @param[in]  Ib       input three-phase coordinate <code>b</code>\r\n * @param[out] pIalpha  points to output two-phase orthogonal vector axis alpha\r\n * @param[out] pIbeta   points to output two-phase orthogonal vector axis beta\r\n *\r\n * <b>Scaling and Overflow Behavior:</b>\r\n * \\par\r\n * The function is implemented using an internal 32-bit accumulator.\r\n * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format.\r\n * There is saturation on the addition, hence there is no risk of overflow.\r\n */\r\nstatic __INLINE void arm_clarke_q31(q31_t Ia, q31_t Ib, q31_t *pIalpha, q31_t *pIbeta) {\r\n  q31_t product1, product2; /* Temporary variables used to store intermediate results */\r\n\r\n  /* Calculating pIalpha from Ia by equation pIalpha = Ia */\r\n  *pIalpha = Ia;\r\n\r\n  /* Intermediate product is calculated by (1/(sqrt(3)) * Ia) */\r\n  product1 = (q31_t)(((q63_t)Ia * 0x24F34E8B) >> 30);\r\n\r\n  /* Intermediate product is calculated by (2/sqrt(3) * Ib) */\r\n  product2 = (q31_t)(((q63_t)Ib * 0x49E69D16) >> 30);\r\n\r\n  /* pIbeta is calculated by adding the intermediate products */\r\n  *pIbeta = __QADD(product1, product2);\r\n}\r\n\r\n/**\r\n * @} end of clarke group\r\n */\r\n\r\n/**\r\n * @brief  Converts the elements of the Q7 vector to Q31 vector.\r\n * @param[in]  pSrc       input pointer\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_q7_to_q31(q7_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @ingroup groupController\r\n */\r\n\r\n/**\r\n * @defgroup inv_clarke Vector Inverse Clarke Transform\r\n * Inverse Clarke transform converts the two-coordinate time invariant vector into instantaneous stator phases.\r\n *\r\n * The function operates on a single sample of data and each call to the function returns the processed output.\r\n * The library provides separate functions for Q31 and floating-point data types.\r\n * \\par Algorithm\r\n * \\image html clarkeInvFormula.gif\r\n * where <code>pIa</code> and <code>pIb</code> are the instantaneous stator phases and\r\n * <code>Ialpha</code> and <code>Ibeta</code> are the two coordinates of time invariant vector.\r\n * \\par Fixed-Point Behavior\r\n * Care must be taken when using the Q31 version of the Clarke transform.\r\n * In particular, the overflow and saturation behavior of the accumulator used must be considered.\r\n * Refer to the function specific documentation below for usage guidelines.\r\n */\r\n\r\n/**\r\n * @addtogroup inv_clarke\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Floating-point Inverse Clarke transform\r\n * @param[in]  Ialpha  input two-phase orthogonal vector axis alpha\r\n * @param[in]  Ibeta   input two-phase orthogonal vector axis beta\r\n * @param[out] pIa     points to output three-phase coordinate <code>a</code>\r\n * @param[out] pIb     points to output three-phase coordinate <code>b</code>\r\n */\r\nstatic __INLINE void arm_inv_clarke_f32(float32_t Ialpha, float32_t Ibeta, float32_t *pIa, float32_t *pIb) {\r\n  /* Calculating pIa from Ialpha by equation pIa = Ialpha */\r\n  *pIa = Ialpha;\r\n\r\n  /* Calculating pIb from Ialpha and Ibeta by equation pIb = -(1/2) * Ialpha + (sqrt(3)/2) * Ibeta */\r\n  *pIb = -0.5f * Ialpha + 0.8660254039f * Ibeta;\r\n}\r\n\r\n/**\r\n * @brief  Inverse Clarke transform for Q31 version\r\n * @param[in]  Ialpha  input two-phase orthogonal vector axis alpha\r\n * @param[in]  Ibeta   input two-phase orthogonal vector axis beta\r\n * @param[out] pIa     points to output three-phase coordinate <code>a</code>\r\n * @param[out] pIb     points to output three-phase coordinate <code>b</code>\r\n *\r\n * <b>Scaling and Overflow Behavior:</b>\r\n * \\par\r\n * The function is implemented using an internal 32-bit accumulator.\r\n * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format.\r\n * There is saturation on the subtraction, hence there is no risk of overflow.\r\n */\r\nstatic __INLINE void arm_inv_clarke_q31(q31_t Ialpha, q31_t Ibeta, q31_t *pIa, q31_t *pIb) {\r\n  q31_t product1, product2; /* Temporary variables used to store intermediate results */\r\n\r\n  /* Calculating pIa from Ialpha by equation pIa = Ialpha */\r\n  *pIa = Ialpha;\r\n\r\n  /* Intermediate product is calculated by (1/(2*sqrt(3)) * Ia) */\r\n  product1 = (q31_t)(((q63_t)(Ialpha) * (0x40000000)) >> 31);\r\n\r\n  /* Intermediate product is calculated by (1/sqrt(3) * pIb) */\r\n  product2 = (q31_t)(((q63_t)(Ibeta) * (0x6ED9EBA1)) >> 31);\r\n\r\n  /* pIb is calculated by subtracting the products */\r\n  *pIb = __QSUB(product2, product1);\r\n}\r\n\r\n/**\r\n * @} end of inv_clarke group\r\n */\r\n\r\n/**\r\n * @brief  Converts the elements of the Q7 vector to Q15 vector.\r\n * @param[in]  pSrc       input pointer\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_q7_to_q15(q7_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @ingroup groupController\r\n */\r\n\r\n/**\r\n * @defgroup park Vector Park Transform\r\n *\r\n * Forward Park transform converts the input two-coordinate vector to flux and torque components.\r\n * The Park transform can be used to realize the transformation of the <code>Ialpha</code> and the <code>Ibeta</code> currents\r\n * from the stationary to the moving reference frame and control the spatial relationship between\r\n * the stator vector current and rotor flux vector.\r\n * If we consider the d axis aligned with the rotor flux, the diagram below shows the\r\n * current vector and the relationship from the two reference frames:\r\n * \\image html park.gif \"Stator current space vector and its component in (a,b) and in the d,q rotating reference frame\"\r\n *\r\n * The function operates on a single sample of data and each call to the function returns the processed output.\r\n * The library provides separate functions for Q31 and floating-point data types.\r\n * \\par Algorithm\r\n * \\image html parkFormula.gif\r\n * where <code>Ialpha</code> and <code>Ibeta</code> are the stator vector components,\r\n * <code>pId</code> and <code>pIq</code> are rotor vector components and <code>cosVal</code> and <code>sinVal</code> are the\r\n * cosine and sine values of theta (rotor flux position).\r\n * \\par Fixed-Point Behavior\r\n * Care must be taken when using the Q31 version of the Park transform.\r\n * In particular, the overflow and saturation behavior of the accumulator used must be considered.\r\n * Refer to the function specific documentation below for usage guidelines.\r\n */\r\n\r\n/**\r\n * @addtogroup park\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief Floating-point Park transform\r\n * @param[in]  Ialpha  input two-phase vector coordinate alpha\r\n * @param[in]  Ibeta   input two-phase vector coordinate beta\r\n * @param[out] pId     points to output   rotor reference frame d\r\n * @param[out] pIq     points to output   rotor reference frame q\r\n * @param[in]  sinVal  sine value of rotation angle theta\r\n * @param[in]  cosVal  cosine value of rotation angle theta\r\n *\r\n * The function implements the forward Park transform.\r\n *\r\n */\r\nstatic __INLINE void arm_park_f32(float32_t Ialpha, float32_t Ibeta, float32_t *pId, float32_t *pIq, float32_t sinVal, float32_t cosVal) {\r\n  /* Calculate pId using the equation, pId = Ialpha * cosVal + Ibeta * sinVal */\r\n  *pId = Ialpha * cosVal + Ibeta * sinVal;\r\n\r\n  /* Calculate pIq using the equation, pIq = - Ialpha * sinVal + Ibeta * cosVal */\r\n  *pIq = -Ialpha * sinVal + Ibeta * cosVal;\r\n}\r\n\r\n/**\r\n * @brief  Park transform for Q31 version\r\n * @param[in]  Ialpha  input two-phase vector coordinate alpha\r\n * @param[in]  Ibeta   input two-phase vector coordinate beta\r\n * @param[out] pId     points to output rotor reference frame d\r\n * @param[out] pIq     points to output rotor reference frame q\r\n * @param[in]  sinVal  sine value of rotation angle theta\r\n * @param[in]  cosVal  cosine value of rotation angle theta\r\n *\r\n * <b>Scaling and Overflow Behavior:</b>\r\n * \\par\r\n * The function is implemented using an internal 32-bit accumulator.\r\n * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format.\r\n * There is saturation on the addition and subtraction, hence there is no risk of overflow.\r\n */\r\nstatic __INLINE void arm_park_q31(q31_t Ialpha, q31_t Ibeta, q31_t *pId, q31_t *pIq, q31_t sinVal, q31_t cosVal) {\r\n  q31_t product1, product2; /* Temporary variables used to store intermediate results */\r\n  q31_t product3, product4; /* Temporary variables used to store intermediate results */\r\n\r\n  /* Intermediate product is calculated by (Ialpha * cosVal) */\r\n  product1 = (q31_t)(((q63_t)(Ialpha) * (cosVal)) >> 31);\r\n\r\n  /* Intermediate product is calculated by (Ibeta * sinVal) */\r\n  product2 = (q31_t)(((q63_t)(Ibeta) * (sinVal)) >> 31);\r\n\r\n  /* Intermediate product is calculated by (Ialpha * sinVal) */\r\n  product3 = (q31_t)(((q63_t)(Ialpha) * (sinVal)) >> 31);\r\n\r\n  /* Intermediate product is calculated by (Ibeta * cosVal) */\r\n  product4 = (q31_t)(((q63_t)(Ibeta) * (cosVal)) >> 31);\r\n\r\n  /* Calculate pId by adding the two intermediate products 1 and 2 */\r\n  *pId = __QADD(product1, product2);\r\n\r\n  /* Calculate pIq by subtracting the two intermediate products 3 from 4 */\r\n  *pIq = __QSUB(product4, product3);\r\n}\r\n\r\n/**\r\n * @} end of park group\r\n */\r\n\r\n/**\r\n * @brief  Converts the elements of the Q7 vector to floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[out] pDst       is output pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n */\r\nvoid arm_q7_to_float(q7_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @ingroup groupController\r\n */\r\n\r\n/**\r\n * @defgroup inv_park Vector Inverse Park transform\r\n * Inverse Park transform converts the input flux and torque components to two-coordinate vector.\r\n *\r\n * The function operates on a single sample of data and each call to the function returns the processed output.\r\n * The library provides separate functions for Q31 and floating-point data types.\r\n * \\par Algorithm\r\n * \\image html parkInvFormula.gif\r\n * where <code>pIalpha</code> and <code>pIbeta</code> are the stator vector components,\r\n * <code>Id</code> and <code>Iq</code> are rotor vector components and <code>cosVal</code> and <code>sinVal</code> are the\r\n * cosine and sine values of theta (rotor flux position).\r\n * \\par Fixed-Point Behavior\r\n * Care must be taken when using the Q31 version of the Park transform.\r\n * In particular, the overflow and saturation behavior of the accumulator used must be considered.\r\n * Refer to the function specific documentation below for usage guidelines.\r\n */\r\n\r\n/**\r\n * @addtogroup inv_park\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Floating-point Inverse Park transform\r\n * @param[in]  Id       input coordinate of rotor reference frame d\r\n * @param[in]  Iq       input coordinate of rotor reference frame q\r\n * @param[out] pIalpha  points to output two-phase orthogonal vector axis alpha\r\n * @param[out] pIbeta   points to output two-phase orthogonal vector axis beta\r\n * @param[in]  sinVal   sine value of rotation angle theta\r\n * @param[in]  cosVal   cosine value of rotation angle theta\r\n */\r\nstatic __INLINE void arm_inv_park_f32(float32_t Id, float32_t Iq, float32_t *pIalpha, float32_t *pIbeta, float32_t sinVal, float32_t cosVal) {\r\n  /* Calculate pIalpha using the equation, pIalpha = Id * cosVal - Iq * sinVal */\r\n  *pIalpha = Id * cosVal - Iq * sinVal;\r\n\r\n  /* Calculate pIbeta using the equation, pIbeta = Id * sinVal + Iq * cosVal */\r\n  *pIbeta = Id * sinVal + Iq * cosVal;\r\n}\r\n\r\n/**\r\n * @brief  Inverse Park transform for   Q31 version\r\n * @param[in]  Id       input coordinate of rotor reference frame d\r\n * @param[in]  Iq       input coordinate of rotor reference frame q\r\n * @param[out] pIalpha  points to output two-phase orthogonal vector axis alpha\r\n * @param[out] pIbeta   points to output two-phase orthogonal vector axis beta\r\n * @param[in]  sinVal   sine value of rotation angle theta\r\n * @param[in]  cosVal   cosine value of rotation angle theta\r\n *\r\n * <b>Scaling and Overflow Behavior:</b>\r\n * \\par\r\n * The function is implemented using an internal 32-bit accumulator.\r\n * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format.\r\n * There is saturation on the addition, hence there is no risk of overflow.\r\n */\r\nstatic __INLINE void arm_inv_park_q31(q31_t Id, q31_t Iq, q31_t *pIalpha, q31_t *pIbeta, q31_t sinVal, q31_t cosVal) {\r\n  q31_t product1, product2; /* Temporary variables used to store intermediate results */\r\n  q31_t product3, product4; /* Temporary variables used to store intermediate results */\r\n\r\n  /* Intermediate product is calculated by (Id * cosVal) */\r\n  product1 = (q31_t)(((q63_t)(Id) * (cosVal)) >> 31);\r\n\r\n  /* Intermediate product is calculated by (Iq * sinVal) */\r\n  product2 = (q31_t)(((q63_t)(Iq) * (sinVal)) >> 31);\r\n\r\n  /* Intermediate product is calculated by (Id * sinVal) */\r\n  product3 = (q31_t)(((q63_t)(Id) * (sinVal)) >> 31);\r\n\r\n  /* Intermediate product is calculated by (Iq * cosVal) */\r\n  product4 = (q31_t)(((q63_t)(Iq) * (cosVal)) >> 31);\r\n\r\n  /* Calculate pIalpha by using the two intermediate products 1 and 2 */\r\n  *pIalpha = __QSUB(product1, product2);\r\n\r\n  /* Calculate pIbeta by using the two intermediate products 3 and 4 */\r\n  *pIbeta = __QADD(product4, product3);\r\n}\r\n\r\n/**\r\n * @} end of Inverse park group\r\n */\r\n\r\n/**\r\n * @brief  Converts the elements of the Q31 vector to floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[out] pDst       is output pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n */\r\nvoid arm_q31_to_float(q31_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @ingroup groupInterpolation\r\n */\r\n\r\n/**\r\n * @defgroup LinearInterpolate Linear Interpolation\r\n *\r\n * Linear interpolation is a method of curve fitting using linear polynomials.\r\n * Linear interpolation works by effectively drawing a straight line between two neighboring samples and returning the appropriate point along that line\r\n *\r\n * \\par\r\n * \\image html LinearInterp.gif \"Linear interpolation\"\r\n *\r\n * \\par\r\n * A  Linear Interpolate function calculates an output value(y), for the input(x)\r\n * using linear interpolation of the input values x0, x1( nearest input values) and the output values y0 and y1(nearest output values)\r\n *\r\n * \\par Algorithm:\r\n * <pre>\r\n *       y = y0 + (x - x0) * ((y1 - y0)/(x1-x0))\r\n *       where x0, x1 are nearest values of input x\r\n *             y0, y1 are nearest values to output y\r\n * </pre>\r\n *\r\n * \\par\r\n * This set of functions implements Linear interpolation process\r\n * for Q7, Q15, Q31, and floating-point data types.  The functions operate on a single\r\n * sample of data and each call to the function returns a single processed value.\r\n * <code>S</code> points to an instance of the Linear Interpolate function data structure.\r\n * <code>x</code> is the input sample value. The functions returns the output value.\r\n *\r\n * \\par\r\n * if x is outside of the table boundary, Linear interpolation returns first value of the table\r\n * if x is below input range and returns last value of table if x is above range.\r\n */\r\n\r\n/**\r\n * @addtogroup LinearInterpolate\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Process function for the floating-point Linear Interpolation Function.\r\n * @param[in,out] S  is an instance of the floating-point Linear Interpolation structure\r\n * @param[in]     x  input sample to process\r\n * @return y processed output sample.\r\n *\r\n */\r\nstatic __INLINE float32_t arm_linear_interp_f32(arm_linear_interp_instance_f32 *S, float32_t x) {\r\n  float32_t  y;\r\n  float32_t  x0, x1;                 /* Nearest input values */\r\n  float32_t  y0, y1;                 /* Nearest output values */\r\n  float32_t  xSpacing = S->xSpacing; /* spacing between input values */\r\n  int32_t    i;                      /* Index variable */\r\n  float32_t *pYData = S->pYData;     /* pointer to output table */\r\n\r\n  /* Calculation of index */\r\n  i = (int32_t)((x - S->x1) / xSpacing);\r\n\r\n  if (i < 0) {\r\n    /* Iniatilize output for below specified range as least output value of table */\r\n    y = pYData[0];\r\n  } else if ((uint32_t)i >= S->nValues) {\r\n    /* Iniatilize output for above specified range as last output value of table */\r\n    y = pYData[S->nValues - 1];\r\n  } else {\r\n    /* Calculation of nearest input values */\r\n    x0 = S->x1 + i * xSpacing;\r\n    x1 = S->x1 + (i + 1) * xSpacing;\r\n\r\n    /* Read of nearest output values */\r\n    y0 = pYData[i];\r\n    y1 = pYData[i + 1];\r\n\r\n    /* Calculation of output */\r\n    y = y0 + (x - x0) * ((y1 - y0) / (x1 - x0));\r\n  }\r\n\r\n  /* returns output value */\r\n  return (y);\r\n}\r\n\r\n/**\r\n *\r\n * @brief  Process function for the Q31 Linear Interpolation Function.\r\n * @param[in] pYData   pointer to Q31 Linear Interpolation table\r\n * @param[in] x        input sample to process\r\n * @param[in] nValues  number of table values\r\n * @return y processed output sample.\r\n *\r\n * \\par\r\n * Input sample <code>x</code> is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part.\r\n * This function can support maximum of table size 2^12.\r\n *\r\n */\r\nstatic __INLINE q31_t arm_linear_interp_q31(q31_t *pYData, q31_t x, uint32_t nValues) {\r\n  q31_t   y;      /* output */\r\n  q31_t   y0, y1; /* Nearest output values */\r\n  q31_t   fract;  /* fractional part */\r\n  int32_t index;  /* Index to read nearest output values */\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  index = ((x & (q31_t)0xFFF00000) >> 20);\r\n\r\n  if (index >= (int32_t)(nValues - 1)) {\r\n    return (pYData[nValues - 1]);\r\n  } else if (index < 0) {\r\n    return (pYData[0]);\r\n  } else {\r\n    /* 20 bits for the fractional part */\r\n    /* shift left by 11 to keep fract in 1.31 format */\r\n    fract = (x & 0x000FFFFF) << 11;\r\n\r\n    /* Read two nearest output values from the index in 1.31(q31) format */\r\n    y0 = pYData[index];\r\n    y1 = pYData[index + 1];\r\n\r\n    /* Calculation of y0 * (1-fract) and y is in 2.30 format */\r\n    y = ((q31_t)((q63_t)y0 * (0x7FFFFFFF - fract) >> 32));\r\n\r\n    /* Calculation of y0 * (1-fract) + y1 *fract and y is in 2.30 format */\r\n    y += ((q31_t)(((q63_t)y1 * fract) >> 32));\r\n\r\n    /* Convert y to 1.31 format */\r\n    return (y << 1u);\r\n  }\r\n}\r\n\r\n/**\r\n *\r\n * @brief  Process function for the Q15 Linear Interpolation Function.\r\n * @param[in] pYData   pointer to Q15 Linear Interpolation table\r\n * @param[in] x        input sample to process\r\n * @param[in] nValues  number of table values\r\n * @return y processed output sample.\r\n *\r\n * \\par\r\n * Input sample <code>x</code> is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part.\r\n * This function can support maximum of table size 2^12.\r\n *\r\n */\r\nstatic __INLINE q15_t arm_linear_interp_q15(q15_t *pYData, q31_t x, uint32_t nValues) {\r\n  q63_t   y;      /* output */\r\n  q15_t   y0, y1; /* Nearest output values */\r\n  q31_t   fract;  /* fractional part */\r\n  int32_t index;  /* Index to read nearest output values */\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  index = ((x & (int32_t)0xFFF00000) >> 20);\r\n\r\n  if (index >= (int32_t)(nValues - 1)) {\r\n    return (pYData[nValues - 1]);\r\n  } else if (index < 0) {\r\n    return (pYData[0]);\r\n  } else {\r\n    /* 20 bits for the fractional part */\r\n    /* fract is in 12.20 format */\r\n    fract = (x & 0x000FFFFF);\r\n\r\n    /* Read two nearest output values from the index */\r\n    y0 = pYData[index];\r\n    y1 = pYData[index + 1];\r\n\r\n    /* Calculation of y0 * (1-fract) and y is in 13.35 format */\r\n    y = ((q63_t)y0 * (0xFFFFF - fract));\r\n\r\n    /* Calculation of (y0 * (1-fract) + y1 * fract) and y is in 13.35 format */\r\n    y += ((q63_t)y1 * (fract));\r\n\r\n    /* convert y to 1.15 format */\r\n    return (q15_t)(y >> 20);\r\n  }\r\n}\r\n\r\n/**\r\n *\r\n * @brief  Process function for the Q7 Linear Interpolation Function.\r\n * @param[in] pYData   pointer to Q7 Linear Interpolation table\r\n * @param[in] x        input sample to process\r\n * @param[in] nValues  number of table values\r\n * @return y processed output sample.\r\n *\r\n * \\par\r\n * Input sample <code>x</code> is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part.\r\n * This function can support maximum of table size 2^12.\r\n */\r\nstatic __INLINE q7_t arm_linear_interp_q7(q7_t *pYData, q31_t x, uint32_t nValues) {\r\n  q31_t    y;      /* output */\r\n  q7_t     y0, y1; /* Nearest output values */\r\n  q31_t    fract;  /* fractional part */\r\n  uint32_t index;  /* Index to read nearest output values */\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  if (x < 0) {\r\n    return (pYData[0]);\r\n  }\r\n  index = (x >> 20) & 0xfff;\r\n\r\n  if (index >= (nValues - 1)) {\r\n    return (pYData[nValues - 1]);\r\n  } else {\r\n    /* 20 bits for the fractional part */\r\n    /* fract is in 12.20 format */\r\n    fract = (x & 0x000FFFFF);\r\n\r\n    /* Read two nearest output values from the index and are in 1.7(q7) format */\r\n    y0 = pYData[index];\r\n    y1 = pYData[index + 1];\r\n\r\n    /* Calculation of y0 * (1-fract ) and y is in 13.27(q27) format */\r\n    y = ((y0 * (0xFFFFF - fract)));\r\n\r\n    /* Calculation of y1 * fract + y0 * (1-fract) and y is in 13.27(q27) format */\r\n    y += (y1 * fract);\r\n\r\n    /* convert y to 1.7(q7) format */\r\n    return (q7_t)(y >> 20);\r\n  }\r\n}\r\n\r\n/**\r\n * @} end of LinearInterpolate group\r\n */\r\n\r\n/**\r\n * @brief  Fast approximation to the trigonometric sine function for floating-point data.\r\n * @param[in] x  input value in radians.\r\n * @return  sin(x).\r\n */\r\nfloat32_t arm_sin_f32(float32_t x);\r\n\r\n/**\r\n * @brief  Fast approximation to the trigonometric sine function for Q31 data.\r\n * @param[in] x  Scaled input value in radians.\r\n * @return  sin(x).\r\n */\r\nq31_t arm_sin_q31(q31_t x);\r\n\r\n/**\r\n * @brief  Fast approximation to the trigonometric sine function for Q15 data.\r\n * @param[in] x  Scaled input value in radians.\r\n * @return  sin(x).\r\n */\r\nq15_t arm_sin_q15(q15_t x);\r\n\r\n/**\r\n * @brief  Fast approximation to the trigonometric cosine function for floating-point data.\r\n * @param[in] x  input value in radians.\r\n * @return  cos(x).\r\n */\r\nfloat32_t arm_cos_f32(float32_t x);\r\n\r\n/**\r\n * @brief Fast approximation to the trigonometric cosine function for Q31 data.\r\n * @param[in] x  Scaled input value in radians.\r\n * @return  cos(x).\r\n */\r\nq31_t arm_cos_q31(q31_t x);\r\n\r\n/**\r\n * @brief  Fast approximation to the trigonometric cosine function for Q15 data.\r\n * @param[in] x  Scaled input value in radians.\r\n * @return  cos(x).\r\n */\r\nq15_t arm_cos_q15(q15_t x);\r\n\r\n/**\r\n * @ingroup groupFastMath\r\n */\r\n\r\n/**\r\n * @defgroup SQRT Square Root\r\n *\r\n * Computes the square root of a number.\r\n * There are separate functions for Q15, Q31, and floating-point data types.\r\n * The square root function is computed using the Newton-Raphson algorithm.\r\n * This is an iterative algorithm of the form:\r\n * <pre>\r\n *      x1 = x0 - f(x0)/f'(x0)\r\n * </pre>\r\n * where <code>x1</code> is the current estimate,\r\n * <code>x0</code> is the previous estimate, and\r\n * <code>f'(x0)</code> is the derivative of <code>f()</code> evaluated at <code>x0</code>.\r\n * For the square root function, the algorithm reduces to:\r\n * <pre>\r\n *     x0 = in/2                         [initial guess]\r\n *     x1 = 1/2 * ( x0 + in / x0)        [each iteration]\r\n * </pre>\r\n */\r\n\r\n/**\r\n * @addtogroup SQRT\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Floating-point square root function.\r\n * @param[in]  in    input value.\r\n * @param[out] pOut  square root of input value.\r\n * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if\r\n * <code>in</code> is negative value and returns zero output for negative values.\r\n */\r\nstatic __INLINE arm_status arm_sqrt_f32(float32_t in, float32_t *pOut) {\r\n  if (in >= 0.0f) {\r\n\r\n#if (__FPU_USED == 1) && defined(__CC_ARM)\r\n    *pOut = __sqrtf(in);\r\n#elif (__FPU_USED == 1) && (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))\r\n    *pOut = __builtin_sqrtf(in);\r\n#elif (__FPU_USED == 1) && defined(__GNUC__)\r\n    *pOut = __builtin_sqrtf(in);\r\n#elif (__FPU_USED == 1) && defined(__ICCARM__) && (__VER__ >= 6040000)\r\n    __ASM(\"VSQRT.F32 %0,%1\" : \"=t\"(*pOut) : \"t\"(in));\r\n#else\r\n    *pOut = sqrtf(in);\r\n#endif\r\n\r\n    return (ARM_MATH_SUCCESS);\r\n  } else {\r\n    *pOut = 0.0f;\r\n    return (ARM_MATH_ARGUMENT_ERROR);\r\n  }\r\n}\r\n\r\n/**\r\n * @brief Q31 square root function.\r\n * @param[in]  in    input value.  The range of the input value is [0 +1) or 0x00000000 to 0x7FFFFFFF.\r\n * @param[out] pOut  square root of input value.\r\n * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if\r\n * <code>in</code> is negative value and returns zero output for negative values.\r\n */\r\narm_status arm_sqrt_q31(q31_t in, q31_t *pOut);\r\n\r\n/**\r\n * @brief  Q15 square root function.\r\n * @param[in]  in    input value.  The range of the input value is [0 +1) or 0x0000 to 0x7FFF.\r\n * @param[out] pOut  square root of input value.\r\n * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if\r\n * <code>in</code> is negative value and returns zero output for negative values.\r\n */\r\narm_status arm_sqrt_q15(q15_t in, q15_t *pOut);\r\n\r\n/**\r\n * @} end of SQRT group\r\n */\r\n\r\n/**\r\n * @brief floating-point Circular write function.\r\n */\r\nstatic __INLINE void arm_circularWrite_f32(int32_t *circBuffer, int32_t L, uint16_t *writeOffset, int32_t bufferInc, const int32_t *src, int32_t srcInc, uint32_t blockSize) {\r\n  uint32_t i = 0u;\r\n  int32_t  wOffset;\r\n\r\n  /* Copy the value of Index pointer that points\r\n   * to the current location where the input samples to be copied */\r\n  wOffset = *writeOffset;\r\n\r\n  /* Loop over the blockSize */\r\n  i = blockSize;\r\n\r\n  while (i > 0u) {\r\n    /* copy the input sample to the circular buffer */\r\n    circBuffer[wOffset] = *src;\r\n\r\n    /* Update the input pointer */\r\n    src += srcInc;\r\n\r\n    /* Circularly update wOffset.  Watch out for positive and negative value */\r\n    wOffset += bufferInc;\r\n    if (wOffset >= L)\r\n      wOffset -= L;\r\n\r\n    /* Decrement the loop counter */\r\n    i--;\r\n  }\r\n\r\n  /* Update the index pointer */\r\n  *writeOffset = (uint16_t)wOffset;\r\n}\r\n\r\n/**\r\n * @brief floating-point Circular Read function.\r\n */\r\nstatic __INLINE void arm_circularRead_f32(int32_t *circBuffer, int32_t L, int32_t *readOffset, int32_t bufferInc, int32_t *dst, int32_t *dst_base, int32_t dst_length, int32_t dstInc,\r\n                                          uint32_t blockSize) {\r\n  uint32_t i = 0u;\r\n  int32_t  rOffset, dst_end;\r\n\r\n  /* Copy the value of Index pointer that points\r\n   * to the current location from where the input samples to be read */\r\n  rOffset = *readOffset;\r\n  dst_end = (int32_t)(dst_base + dst_length);\r\n\r\n  /* Loop over the blockSize */\r\n  i = blockSize;\r\n\r\n  while (i > 0u) {\r\n    /* copy the sample from the circular buffer to the destination buffer */\r\n    *dst = circBuffer[rOffset];\r\n\r\n    /* Update the input pointer */\r\n    dst += dstInc;\r\n\r\n    if (dst == (int32_t *)dst_end) {\r\n      dst = dst_base;\r\n    }\r\n\r\n    /* Circularly update rOffset.  Watch out for positive and negative value  */\r\n    rOffset += bufferInc;\r\n\r\n    if (rOffset >= L) {\r\n      rOffset -= L;\r\n    }\r\n\r\n    /* Decrement the loop counter */\r\n    i--;\r\n  }\r\n\r\n  /* Update the index pointer */\r\n  *readOffset = rOffset;\r\n}\r\n\r\n/**\r\n * @brief Q15 Circular write function.\r\n */\r\nstatic __INLINE void arm_circularWrite_q15(q15_t *circBuffer, int32_t L, uint16_t *writeOffset, int32_t bufferInc, const q15_t *src, int32_t srcInc, uint32_t blockSize) {\r\n  uint32_t i = 0u;\r\n  int32_t  wOffset;\r\n\r\n  /* Copy the value of Index pointer that points\r\n   * to the current location where the input samples to be copied */\r\n  wOffset = *writeOffset;\r\n\r\n  /* Loop over the blockSize */\r\n  i = blockSize;\r\n\r\n  while (i > 0u) {\r\n    /* copy the input sample to the circular buffer */\r\n    circBuffer[wOffset] = *src;\r\n\r\n    /* Update the input pointer */\r\n    src += srcInc;\r\n\r\n    /* Circularly update wOffset.  Watch out for positive and negative value */\r\n    wOffset += bufferInc;\r\n    if (wOffset >= L)\r\n      wOffset -= L;\r\n\r\n    /* Decrement the loop counter */\r\n    i--;\r\n  }\r\n\r\n  /* Update the index pointer */\r\n  *writeOffset = (uint16_t)wOffset;\r\n}\r\n\r\n/**\r\n * @brief Q15 Circular Read function.\r\n */\r\nstatic __INLINE void arm_circularRead_q15(q15_t *circBuffer, int32_t L, int32_t *readOffset, int32_t bufferInc, q15_t *dst, q15_t *dst_base, int32_t dst_length, int32_t dstInc, uint32_t blockSize) {\r\n  uint32_t i = 0;\r\n  int32_t  rOffset, dst_end;\r\n\r\n  /* Copy the value of Index pointer that points\r\n   * to the current location from where the input samples to be read */\r\n  rOffset = *readOffset;\r\n\r\n  dst_end = (int32_t)(dst_base + dst_length);\r\n\r\n  /* Loop over the blockSize */\r\n  i = blockSize;\r\n\r\n  while (i > 0u) {\r\n    /* copy the sample from the circular buffer to the destination buffer */\r\n    *dst = circBuffer[rOffset];\r\n\r\n    /* Update the input pointer */\r\n    dst += dstInc;\r\n\r\n    if (dst == (q15_t *)dst_end) {\r\n      dst = dst_base;\r\n    }\r\n\r\n    /* Circularly update wOffset.  Watch out for positive and negative value */\r\n    rOffset += bufferInc;\r\n\r\n    if (rOffset >= L) {\r\n      rOffset -= L;\r\n    }\r\n\r\n    /* Decrement the loop counter */\r\n    i--;\r\n  }\r\n\r\n  /* Update the index pointer */\r\n  *readOffset = rOffset;\r\n}\r\n\r\n/**\r\n * @brief Q7 Circular write function.\r\n */\r\nstatic __INLINE void arm_circularWrite_q7(q7_t *circBuffer, int32_t L, uint16_t *writeOffset, int32_t bufferInc, const q7_t *src, int32_t srcInc, uint32_t blockSize) {\r\n  uint32_t i = 0u;\r\n  int32_t  wOffset;\r\n\r\n  /* Copy the value of Index pointer that points\r\n   * to the current location where the input samples to be copied */\r\n  wOffset = *writeOffset;\r\n\r\n  /* Loop over the blockSize */\r\n  i = blockSize;\r\n\r\n  while (i > 0u) {\r\n    /* copy the input sample to the circular buffer */\r\n    circBuffer[wOffset] = *src;\r\n\r\n    /* Update the input pointer */\r\n    src += srcInc;\r\n\r\n    /* Circularly update wOffset.  Watch out for positive and negative value */\r\n    wOffset += bufferInc;\r\n    if (wOffset >= L)\r\n      wOffset -= L;\r\n\r\n    /* Decrement the loop counter */\r\n    i--;\r\n  }\r\n\r\n  /* Update the index pointer */\r\n  *writeOffset = (uint16_t)wOffset;\r\n}\r\n\r\n/**\r\n * @brief Q7 Circular Read function.\r\n */\r\nstatic __INLINE void arm_circularRead_q7(q7_t *circBuffer, int32_t L, int32_t *readOffset, int32_t bufferInc, q7_t *dst, q7_t *dst_base, int32_t dst_length, int32_t dstInc, uint32_t blockSize) {\r\n  uint32_t i = 0;\r\n  int32_t  rOffset, dst_end;\r\n\r\n  /* Copy the value of Index pointer that points\r\n   * to the current location from where the input samples to be read */\r\n  rOffset = *readOffset;\r\n\r\n  dst_end = (int32_t)(dst_base + dst_length);\r\n\r\n  /* Loop over the blockSize */\r\n  i = blockSize;\r\n\r\n  while (i > 0u) {\r\n    /* copy the sample from the circular buffer to the destination buffer */\r\n    *dst = circBuffer[rOffset];\r\n\r\n    /* Update the input pointer */\r\n    dst += dstInc;\r\n\r\n    if (dst == (q7_t *)dst_end) {\r\n      dst = dst_base;\r\n    }\r\n\r\n    /* Circularly update rOffset.  Watch out for positive and negative value */\r\n    rOffset += bufferInc;\r\n\r\n    if (rOffset >= L) {\r\n      rOffset -= L;\r\n    }\r\n\r\n    /* Decrement the loop counter */\r\n    i--;\r\n  }\r\n\r\n  /* Update the index pointer */\r\n  *readOffset = rOffset;\r\n}\r\n\r\n/**\r\n * @brief  Sum of the squares of the elements of a Q31 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_power_q31(q31_t *pSrc, uint32_t blockSize, q63_t *pResult);\r\n\r\n/**\r\n * @brief  Sum of the squares of the elements of a floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_power_f32(float32_t *pSrc, uint32_t blockSize, float32_t *pResult);\r\n\r\n/**\r\n * @brief  Sum of the squares of the elements of a Q15 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_power_q15(q15_t *pSrc, uint32_t blockSize, q63_t *pResult);\r\n\r\n/**\r\n * @brief  Sum of the squares of the elements of a Q7 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_power_q7(q7_t *pSrc, uint32_t blockSize, q31_t *pResult);\r\n\r\n/**\r\n * @brief  Mean value of a Q7 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_mean_q7(q7_t *pSrc, uint32_t blockSize, q7_t *pResult);\r\n\r\n/**\r\n * @brief  Mean value of a Q15 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_mean_q15(q15_t *pSrc, uint32_t blockSize, q15_t *pResult);\r\n\r\n/**\r\n * @brief  Mean value of a Q31 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_mean_q31(q31_t *pSrc, uint32_t blockSize, q31_t *pResult);\r\n\r\n/**\r\n * @brief  Mean value of a floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_mean_f32(float32_t *pSrc, uint32_t blockSize, float32_t *pResult);\r\n\r\n/**\r\n * @brief  Variance of the elements of a floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_var_f32(float32_t *pSrc, uint32_t blockSize, float32_t *pResult);\r\n\r\n/**\r\n * @brief  Variance of the elements of a Q31 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_var_q31(q31_t *pSrc, uint32_t blockSize, q31_t *pResult);\r\n\r\n/**\r\n * @brief  Variance of the elements of a Q15 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_var_q15(q15_t *pSrc, uint32_t blockSize, q15_t *pResult);\r\n\r\n/**\r\n * @brief  Root Mean Square of the elements of a floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_rms_f32(float32_t *pSrc, uint32_t blockSize, float32_t *pResult);\r\n\r\n/**\r\n * @brief  Root Mean Square of the elements of a Q31 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_rms_q31(q31_t *pSrc, uint32_t blockSize, q31_t *pResult);\r\n\r\n/**\r\n * @brief  Root Mean Square of the elements of a Q15 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_rms_q15(q15_t *pSrc, uint32_t blockSize, q15_t *pResult);\r\n\r\n/**\r\n * @brief  Standard deviation of the elements of a floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_std_f32(float32_t *pSrc, uint32_t blockSize, float32_t *pResult);\r\n\r\n/**\r\n * @brief  Standard deviation of the elements of a Q31 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_std_q31(q31_t *pSrc, uint32_t blockSize, q31_t *pResult);\r\n\r\n/**\r\n * @brief  Standard deviation of the elements of a Q15 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_std_q15(q15_t *pSrc, uint32_t blockSize, q15_t *pResult);\r\n\r\n/**\r\n * @brief  Floating-point complex magnitude\r\n * @param[in]  pSrc        points to the complex input vector\r\n * @param[out] pDst        points to the real output vector\r\n * @param[in]  numSamples  number of complex samples in the input vector\r\n */\r\nvoid arm_cmplx_mag_f32(float32_t *pSrc, float32_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q31 complex magnitude\r\n * @param[in]  pSrc        points to the complex input vector\r\n * @param[out] pDst        points to the real output vector\r\n * @param[in]  numSamples  number of complex samples in the input vector\r\n */\r\nvoid arm_cmplx_mag_q31(q31_t *pSrc, q31_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q15 complex magnitude\r\n * @param[in]  pSrc        points to the complex input vector\r\n * @param[out] pDst        points to the real output vector\r\n * @param[in]  numSamples  number of complex samples in the input vector\r\n */\r\nvoid arm_cmplx_mag_q15(q15_t *pSrc, q15_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q15 complex dot product\r\n * @param[in]  pSrcA       points to the first input vector\r\n * @param[in]  pSrcB       points to the second input vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n * @param[out] realResult  real part of the result returned here\r\n * @param[out] imagResult  imaginary part of the result returned here\r\n */\r\nvoid arm_cmplx_dot_prod_q15(q15_t *pSrcA, q15_t *pSrcB, uint32_t numSamples, q31_t *realResult, q31_t *imagResult);\r\n\r\n/**\r\n * @brief  Q31 complex dot product\r\n * @param[in]  pSrcA       points to the first input vector\r\n * @param[in]  pSrcB       points to the second input vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n * @param[out] realResult  real part of the result returned here\r\n * @param[out] imagResult  imaginary part of the result returned here\r\n */\r\nvoid arm_cmplx_dot_prod_q31(q31_t *pSrcA, q31_t *pSrcB, uint32_t numSamples, q63_t *realResult, q63_t *imagResult);\r\n\r\n/**\r\n * @brief  Floating-point complex dot product\r\n * @param[in]  pSrcA       points to the first input vector\r\n * @param[in]  pSrcB       points to the second input vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n * @param[out] realResult  real part of the result returned here\r\n * @param[out] imagResult  imaginary part of the result returned here\r\n */\r\nvoid arm_cmplx_dot_prod_f32(float32_t *pSrcA, float32_t *pSrcB, uint32_t numSamples, float32_t *realResult, float32_t *imagResult);\r\n\r\n/**\r\n * @brief  Q15 complex-by-real multiplication\r\n * @param[in]  pSrcCmplx   points to the complex input vector\r\n * @param[in]  pSrcReal    points to the real input vector\r\n * @param[out] pCmplxDst   points to the complex output vector\r\n * @param[in]  numSamples  number of samples in each vector\r\n */\r\nvoid arm_cmplx_mult_real_q15(q15_t *pSrcCmplx, q15_t *pSrcReal, q15_t *pCmplxDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q31 complex-by-real multiplication\r\n * @param[in]  pSrcCmplx   points to the complex input vector\r\n * @param[in]  pSrcReal    points to the real input vector\r\n * @param[out] pCmplxDst   points to the complex output vector\r\n * @param[in]  numSamples  number of samples in each vector\r\n */\r\nvoid arm_cmplx_mult_real_q31(q31_t *pSrcCmplx, q31_t *pSrcReal, q31_t *pCmplxDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Floating-point complex-by-real multiplication\r\n * @param[in]  pSrcCmplx   points to the complex input vector\r\n * @param[in]  pSrcReal    points to the real input vector\r\n * @param[out] pCmplxDst   points to the complex output vector\r\n * @param[in]  numSamples  number of samples in each vector\r\n */\r\nvoid arm_cmplx_mult_real_f32(float32_t *pSrcCmplx, float32_t *pSrcReal, float32_t *pCmplxDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Minimum value of a Q7 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] result     is output pointer\r\n * @param[in]  index      is the array index of the minimum value in the input buffer.\r\n */\r\nvoid arm_min_q7(q7_t *pSrc, uint32_t blockSize, q7_t *result, uint32_t *index);\r\n\r\n/**\r\n * @brief  Minimum value of a Q15 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output pointer\r\n * @param[in]  pIndex     is the array index of the minimum value in the input buffer.\r\n */\r\nvoid arm_min_q15(q15_t *pSrc, uint32_t blockSize, q15_t *pResult, uint32_t *pIndex);\r\n\r\n/**\r\n * @brief  Minimum value of a Q31 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output pointer\r\n * @param[out] pIndex     is the array index of the minimum value in the input buffer.\r\n */\r\nvoid arm_min_q31(q31_t *pSrc, uint32_t blockSize, q31_t *pResult, uint32_t *pIndex);\r\n\r\n/**\r\n * @brief  Minimum value of a floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output pointer\r\n * @param[out] pIndex     is the array index of the minimum value in the input buffer.\r\n */\r\nvoid arm_min_f32(float32_t *pSrc, uint32_t blockSize, float32_t *pResult, uint32_t *pIndex);\r\n\r\n/**\r\n * @brief Maximum value of a Q7 vector.\r\n * @param[in]  pSrc       points to the input buffer\r\n * @param[in]  blockSize  length of the input vector\r\n * @param[out] pResult    maximum value returned here\r\n * @param[out] pIndex     index of maximum value returned here\r\n */\r\nvoid arm_max_q7(q7_t *pSrc, uint32_t blockSize, q7_t *pResult, uint32_t *pIndex);\r\n\r\n/**\r\n * @brief Maximum value of a Q15 vector.\r\n * @param[in]  pSrc       points to the input buffer\r\n * @param[in]  blockSize  length of the input vector\r\n * @param[out] pResult    maximum value returned here\r\n * @param[out] pIndex     index of maximum value returned here\r\n */\r\nvoid arm_max_q15(q15_t *pSrc, uint32_t blockSize, q15_t *pResult, uint32_t *pIndex);\r\n\r\n/**\r\n * @brief Maximum value of a Q31 vector.\r\n * @param[in]  pSrc       points to the input buffer\r\n * @param[in]  blockSize  length of the input vector\r\n * @param[out] pResult    maximum value returned here\r\n * @param[out] pIndex     index of maximum value returned here\r\n */\r\nvoid arm_max_q31(q31_t *pSrc, uint32_t blockSize, q31_t *pResult, uint32_t *pIndex);\r\n\r\n/**\r\n * @brief Maximum value of a floating-point vector.\r\n * @param[in]  pSrc       points to the input buffer\r\n * @param[in]  blockSize  length of the input vector\r\n * @param[out] pResult    maximum value returned here\r\n * @param[out] pIndex     index of maximum value returned here\r\n */\r\nvoid arm_max_f32(float32_t *pSrc, uint32_t blockSize, float32_t *pResult, uint32_t *pIndex);\r\n\r\n/**\r\n * @brief  Q15 complex-by-complex multiplication\r\n * @param[in]  pSrcA       points to the first input vector\r\n * @param[in]  pSrcB       points to the second input vector\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n */\r\nvoid arm_cmplx_mult_cmplx_q15(q15_t *pSrcA, q15_t *pSrcB, q15_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q31 complex-by-complex multiplication\r\n * @param[in]  pSrcA       points to the first input vector\r\n * @param[in]  pSrcB       points to the second input vector\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n */\r\nvoid arm_cmplx_mult_cmplx_q31(q31_t *pSrcA, q31_t *pSrcB, q31_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Floating-point complex-by-complex multiplication\r\n * @param[in]  pSrcA       points to the first input vector\r\n * @param[in]  pSrcB       points to the second input vector\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n */\r\nvoid arm_cmplx_mult_cmplx_f32(float32_t *pSrcA, float32_t *pSrcB, float32_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief Converts the elements of the floating-point vector to Q31 vector.\r\n * @param[in]  pSrc       points to the floating-point input vector\r\n * @param[out] pDst       points to the Q31 output vector\r\n * @param[in]  blockSize  length of the input vector\r\n */\r\nvoid arm_float_to_q31(float32_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Converts the elements of the floating-point vector to Q15 vector.\r\n * @param[in]  pSrc       points to the floating-point input vector\r\n * @param[out] pDst       points to the Q15 output vector\r\n * @param[in]  blockSize  length of the input vector\r\n */\r\nvoid arm_float_to_q15(float32_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Converts the elements of the floating-point vector to Q7 vector.\r\n * @param[in]  pSrc       points to the floating-point input vector\r\n * @param[out] pDst       points to the Q7 output vector\r\n * @param[in]  blockSize  length of the input vector\r\n */\r\nvoid arm_float_to_q7(float32_t *pSrc, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Converts the elements of the Q31 vector to Q15 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[out] pDst       is output pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n */\r\nvoid arm_q31_to_q15(q31_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Converts the elements of the Q31 vector to Q7 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[out] pDst       is output pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n */\r\nvoid arm_q31_to_q7(q31_t *pSrc, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Converts the elements of the Q15 vector to floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[out] pDst       is output pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n */\r\nvoid arm_q15_to_float(q15_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Converts the elements of the Q15 vector to Q31 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[out] pDst       is output pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n */\r\nvoid arm_q15_to_q31(q15_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Converts the elements of the Q15 vector to Q7 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[out] pDst       is output pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n */\r\nvoid arm_q15_to_q7(q15_t *pSrc, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @ingroup groupInterpolation\r\n */\r\n\r\n/**\r\n * @defgroup BilinearInterpolate Bilinear Interpolation\r\n *\r\n * Bilinear interpolation is an extension of linear interpolation applied to a two dimensional grid.\r\n * The underlying function <code>f(x, y)</code> is sampled on a regular grid and the interpolation process\r\n * determines values between the grid points.\r\n * Bilinear interpolation is equivalent to two step linear interpolation, first in the x-dimension and then in the y-dimension.\r\n * Bilinear interpolation is often used in image processing to rescale images.\r\n * The CMSIS DSP library provides bilinear interpolation functions for Q7, Q15, Q31, and floating-point data types.\r\n *\r\n * <b>Algorithm</b>\r\n * \\par\r\n * The instance structure used by the bilinear interpolation functions describes a two dimensional data table.\r\n * For floating-point, the instance structure is defined as:\r\n * <pre>\r\n *   typedef struct\r\n *   {\r\n *     uint16_t numRows;\r\n *     uint16_t numCols;\r\n *     float32_t *pData;\r\n * } arm_bilinear_interp_instance_f32;\r\n * </pre>\r\n *\r\n * \\par\r\n * where <code>numRows</code> specifies the number of rows in the table;\r\n * <code>numCols</code> specifies the number of columns in the table;\r\n * and <code>pData</code> points to an array of size <code>numRows*numCols</code> values.\r\n * The data table <code>pTable</code> is organized in row order and the supplied data values fall on integer indexes.\r\n * That is, table element (x,y) is located at <code>pTable[x + y*numCols]</code> where x and y are integers.\r\n *\r\n * \\par\r\n * Let <code>(x, y)</code> specify the desired interpolation point.  Then define:\r\n * <pre>\r\n *     XF = floor(x)\r\n *     YF = floor(y)\r\n * </pre>\r\n * \\par\r\n * The interpolated output point is computed as:\r\n * <pre>\r\n *  f(x, y) = f(XF, YF) * (1-(x-XF)) * (1-(y-YF))\r\n *           + f(XF+1, YF) * (x-XF)*(1-(y-YF))\r\n *           + f(XF, YF+1) * (1-(x-XF))*(y-YF)\r\n *           + f(XF+1, YF+1) * (x-XF)*(y-YF)\r\n * </pre>\r\n * Note that the coordinates (x, y) contain integer and fractional components.\r\n * The integer components specify which portion of the table to use while the\r\n * fractional components control the interpolation processor.\r\n *\r\n * \\par\r\n * if (x,y) are outside of the table boundary, Bilinear interpolation returns zero output.\r\n */\r\n\r\n/**\r\n * @addtogroup BilinearInterpolate\r\n * @{\r\n */\r\n\r\n/**\r\n *\r\n * @brief  Floating-point bilinear interpolation.\r\n * @param[in,out] S  points to an instance of the interpolation structure.\r\n * @param[in]     X  interpolation coordinate.\r\n * @param[in]     Y  interpolation coordinate.\r\n * @return out interpolated value.\r\n */\r\nstatic __INLINE float32_t arm_bilinear_interp_f32(const arm_bilinear_interp_instance_f32 *S, float32_t X, float32_t Y) {\r\n  float32_t  out;\r\n  float32_t  f00, f01, f10, f11;\r\n  float32_t *pData = S->pData;\r\n  int32_t    xIndex, yIndex, index;\r\n  float32_t  xdiff, ydiff;\r\n  float32_t  b1, b2, b3, b4;\r\n\r\n  xIndex = (int32_t)X;\r\n  yIndex = (int32_t)Y;\r\n\r\n  /* Care taken for table outside boundary */\r\n  /* Returns zero output when values are outside table boundary */\r\n  if (xIndex < 0 || xIndex > (S->numRows - 1) || yIndex < 0 || yIndex > (S->numCols - 1)) {\r\n    return (0);\r\n  }\r\n\r\n  /* Calculation of index for two nearest points in X-direction */\r\n  index = (xIndex - 1) + (yIndex - 1) * S->numCols;\r\n\r\n  /* Read two nearest points in X-direction */\r\n  f00 = pData[index];\r\n  f01 = pData[index + 1];\r\n\r\n  /* Calculation of index for two nearest points in Y-direction */\r\n  index = (xIndex - 1) + (yIndex)*S->numCols;\r\n\r\n  /* Read two nearest points in Y-direction */\r\n  f10 = pData[index];\r\n  f11 = pData[index + 1];\r\n\r\n  /* Calculation of intermediate values */\r\n  b1 = f00;\r\n  b2 = f01 - f00;\r\n  b3 = f10 - f00;\r\n  b4 = f00 - f01 - f10 + f11;\r\n\r\n  /* Calculation of fractional part in X */\r\n  xdiff = X - xIndex;\r\n\r\n  /* Calculation of fractional part in Y */\r\n  ydiff = Y - yIndex;\r\n\r\n  /* Calculation of bi-linear interpolated output */\r\n  out = b1 + b2 * xdiff + b3 * ydiff + b4 * xdiff * ydiff;\r\n\r\n  /* return to application */\r\n  return (out);\r\n}\r\n\r\n/**\r\n *\r\n * @brief  Q31 bilinear interpolation.\r\n * @param[in,out] S  points to an instance of the interpolation structure.\r\n * @param[in]     X  interpolation coordinate in 12.20 format.\r\n * @param[in]     Y  interpolation coordinate in 12.20 format.\r\n * @return out interpolated value.\r\n */\r\nstatic __INLINE q31_t arm_bilinear_interp_q31(arm_bilinear_interp_instance_q31 *S, q31_t X, q31_t Y) {\r\n  q31_t    out;                 /* Temporary output */\r\n  q31_t    acc = 0;             /* output */\r\n  q31_t    xfract, yfract;      /* X, Y fractional parts */\r\n  q31_t    x1, x2, y1, y2;      /* Nearest output values */\r\n  int32_t  rI, cI;              /* Row and column indices */\r\n  q31_t *  pYData = S->pData;   /* pointer to output table values */\r\n  uint32_t nCols  = S->numCols; /* num of rows */\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  rI = ((X & (q31_t)0xFFF00000) >> 20);\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  cI = ((Y & (q31_t)0xFFF00000) >> 20);\r\n\r\n  /* Care taken for table outside boundary */\r\n  /* Returns zero output when values are outside table boundary */\r\n  if (rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) {\r\n    return (0);\r\n  }\r\n\r\n  /* 20 bits for the fractional part */\r\n  /* shift left xfract by 11 to keep 1.31 format */\r\n  xfract = (X & 0x000FFFFF) << 11u;\r\n\r\n  /* Read two nearest output values from the index */\r\n  x1 = pYData[(rI) + (int32_t)nCols * (cI)];\r\n  x2 = pYData[(rI) + (int32_t)nCols * (cI) + 1];\r\n\r\n  /* 20 bits for the fractional part */\r\n  /* shift left yfract by 11 to keep 1.31 format */\r\n  yfract = (Y & 0x000FFFFF) << 11u;\r\n\r\n  /* Read two nearest output values from the index */\r\n  y1 = pYData[(rI) + (int32_t)nCols * (cI + 1)];\r\n  y2 = pYData[(rI) + (int32_t)nCols * (cI + 1) + 1];\r\n\r\n  /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 3.29(q29) format */\r\n  out = ((q31_t)(((q63_t)x1 * (0x7FFFFFFF - xfract)) >> 32));\r\n  acc = ((q31_t)(((q63_t)out * (0x7FFFFFFF - yfract)) >> 32));\r\n\r\n  /* x2 * (xfract) * (1-yfract)  in 3.29(q29) and adding to acc */\r\n  out = ((q31_t)((q63_t)x2 * (0x7FFFFFFF - yfract) >> 32));\r\n  acc += ((q31_t)((q63_t)out * (xfract) >> 32));\r\n\r\n  /* y1 * (1 - xfract) * (yfract)  in 3.29(q29) and adding to acc */\r\n  out = ((q31_t)((q63_t)y1 * (0x7FFFFFFF - xfract) >> 32));\r\n  acc += ((q31_t)((q63_t)out * (yfract) >> 32));\r\n\r\n  /* y2 * (xfract) * (yfract)  in 3.29(q29) and adding to acc */\r\n  out = ((q31_t)((q63_t)y2 * (xfract) >> 32));\r\n  acc += ((q31_t)((q63_t)out * (yfract) >> 32));\r\n\r\n  /* Convert acc to 1.31(q31) format */\r\n  return ((q31_t)(acc << 2));\r\n}\r\n\r\n/**\r\n * @brief  Q15 bilinear interpolation.\r\n * @param[in,out] S  points to an instance of the interpolation structure.\r\n * @param[in]     X  interpolation coordinate in 12.20 format.\r\n * @param[in]     Y  interpolation coordinate in 12.20 format.\r\n * @return out interpolated value.\r\n */\r\nstatic __INLINE q15_t arm_bilinear_interp_q15(arm_bilinear_interp_instance_q15 *S, q31_t X, q31_t Y) {\r\n  q63_t    acc = 0;             /* output */\r\n  q31_t    out;                 /* Temporary output */\r\n  q15_t    x1, x2, y1, y2;      /* Nearest output values */\r\n  q31_t    xfract, yfract;      /* X, Y fractional parts */\r\n  int32_t  rI, cI;              /* Row and column indices */\r\n  q15_t *  pYData = S->pData;   /* pointer to output table values */\r\n  uint32_t nCols  = S->numCols; /* num of rows */\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  rI = ((X & (q31_t)0xFFF00000) >> 20);\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  cI = ((Y & (q31_t)0xFFF00000) >> 20);\r\n\r\n  /* Care taken for table outside boundary */\r\n  /* Returns zero output when values are outside table boundary */\r\n  if (rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) {\r\n    return (0);\r\n  }\r\n\r\n  /* 20 bits for the fractional part */\r\n  /* xfract should be in 12.20 format */\r\n  xfract = (X & 0x000FFFFF);\r\n\r\n  /* Read two nearest output values from the index */\r\n  x1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI)];\r\n  x2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI) + 1];\r\n\r\n  /* 20 bits for the fractional part */\r\n  /* yfract should be in 12.20 format */\r\n  yfract = (Y & 0x000FFFFF);\r\n\r\n  /* Read two nearest output values from the index */\r\n  y1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1)];\r\n  y2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1) + 1];\r\n\r\n  /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 13.51 format */\r\n\r\n  /* x1 is in 1.15(q15), xfract in 12.20 format and out is in 13.35 format */\r\n  /* convert 13.35 to 13.31 by right shifting  and out is in 1.31 */\r\n  out = (q31_t)(((q63_t)x1 * (0xFFFFF - xfract)) >> 4u);\r\n  acc = ((q63_t)out * (0xFFFFF - yfract));\r\n\r\n  /* x2 * (xfract) * (1-yfract)  in 1.51 and adding to acc */\r\n  out = (q31_t)(((q63_t)x2 * (0xFFFFF - yfract)) >> 4u);\r\n  acc += ((q63_t)out * (xfract));\r\n\r\n  /* y1 * (1 - xfract) * (yfract)  in 1.51 and adding to acc */\r\n  out = (q31_t)(((q63_t)y1 * (0xFFFFF - xfract)) >> 4u);\r\n  acc += ((q63_t)out * (yfract));\r\n\r\n  /* y2 * (xfract) * (yfract)  in 1.51 and adding to acc */\r\n  out = (q31_t)(((q63_t)y2 * (xfract)) >> 4u);\r\n  acc += ((q63_t)out * (yfract));\r\n\r\n  /* acc is in 13.51 format and down shift acc by 36 times */\r\n  /* Convert out to 1.15 format */\r\n  return ((q15_t)(acc >> 36));\r\n}\r\n\r\n/**\r\n * @brief  Q7 bilinear interpolation.\r\n * @param[in,out] S  points to an instance of the interpolation structure.\r\n * @param[in]     X  interpolation coordinate in 12.20 format.\r\n * @param[in]     Y  interpolation coordinate in 12.20 format.\r\n * @return out interpolated value.\r\n */\r\nstatic __INLINE q7_t arm_bilinear_interp_q7(arm_bilinear_interp_instance_q7 *S, q31_t X, q31_t Y) {\r\n  q63_t    acc = 0;             /* output */\r\n  q31_t    out;                 /* Temporary output */\r\n  q31_t    xfract, yfract;      /* X, Y fractional parts */\r\n  q7_t     x1, x2, y1, y2;      /* Nearest output values */\r\n  int32_t  rI, cI;              /* Row and column indices */\r\n  q7_t *   pYData = S->pData;   /* pointer to output table values */\r\n  uint32_t nCols  = S->numCols; /* num of rows */\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  rI = ((X & (q31_t)0xFFF00000) >> 20);\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  cI = ((Y & (q31_t)0xFFF00000) >> 20);\r\n\r\n  /* Care taken for table outside boundary */\r\n  /* Returns zero output when values are outside table boundary */\r\n  if (rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) {\r\n    return (0);\r\n  }\r\n\r\n  /* 20 bits for the fractional part */\r\n  /* xfract should be in 12.20 format */\r\n  xfract = (X & (q31_t)0x000FFFFF);\r\n\r\n  /* Read two nearest output values from the index */\r\n  x1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI)];\r\n  x2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI) + 1];\r\n\r\n  /* 20 bits for the fractional part */\r\n  /* yfract should be in 12.20 format */\r\n  yfract = (Y & (q31_t)0x000FFFFF);\r\n\r\n  /* Read two nearest output values from the index */\r\n  y1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1)];\r\n  y2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1) + 1];\r\n\r\n  /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 16.47 format */\r\n  out = ((x1 * (0xFFFFF - xfract)));\r\n  acc = (((q63_t)out * (0xFFFFF - yfract)));\r\n\r\n  /* x2 * (xfract) * (1-yfract)  in 2.22 and adding to acc */\r\n  out = ((x2 * (0xFFFFF - yfract)));\r\n  acc += (((q63_t)out * (xfract)));\r\n\r\n  /* y1 * (1 - xfract) * (yfract)  in 2.22 and adding to acc */\r\n  out = ((y1 * (0xFFFFF - xfract)));\r\n  acc += (((q63_t)out * (yfract)));\r\n\r\n  /* y2 * (xfract) * (yfract)  in 2.22 and adding to acc */\r\n  out = ((y2 * (yfract)));\r\n  acc += (((q63_t)out * (xfract)));\r\n\r\n  /* acc in 16.47 format and down shift by 40 to convert to 1.7 format */\r\n  return ((q7_t)(acc >> 40));\r\n}\r\n\r\n/**\r\n * @} end of BilinearInterpolate group\r\n */\r\n\r\n/* SMMLAR */\r\n#define multAcc_32x32_keep32_R(a, x, y) a = (q31_t)(((((q63_t)a) << 32) + ((q63_t)x * y) + 0x80000000LL) >> 32)\r\n\r\n/* SMMLSR */\r\n#define multSub_32x32_keep32_R(a, x, y) a = (q31_t)(((((q63_t)a) << 32) - ((q63_t)x * y) + 0x80000000LL) >> 32)\r\n\r\n/* SMMULR */\r\n#define mult_32x32_keep32_R(a, x, y) a = (q31_t)(((q63_t)x * y + 0x80000000LL) >> 32)\r\n\r\n/* SMMLA */\r\n#define multAcc_32x32_keep32(a, x, y) a += (q31_t)(((q63_t)x * y) >> 32)\r\n\r\n/* SMMLS */\r\n#define multSub_32x32_keep32(a, x, y) a -= (q31_t)(((q63_t)x * y) >> 32)\r\n\r\n/* SMMUL */\r\n#define mult_32x32_keep32(a, x, y) a = (q31_t)(((q63_t)x * y) >> 32)\r\n\r\n#if defined(__CC_ARM)\r\n/* Enter low optimization region - place directly above function definition */\r\n#if defined(ARM_MATH_CM4) || defined(ARM_MATH_CM7)\r\n#define LOW_OPTIMIZATION_ENTER _Pragma(\"push\") _Pragma(\"O1\")\r\n#else\r\n#define LOW_OPTIMIZATION_ENTER\r\n#endif\r\n\r\n/* Exit low optimization region - place directly after end of function definition */\r\n#if defined(ARM_MATH_CM4) || defined(ARM_MATH_CM7)\r\n#define LOW_OPTIMIZATION_EXIT _Pragma(\"pop\")\r\n#else\r\n#define LOW_OPTIMIZATION_EXIT\r\n#endif\r\n\r\n/* Enter low optimization region - place directly above function definition */\r\n#define IAR_ONLY_LOW_OPTIMIZATION_ENTER\r\n\r\n/* Exit low optimization region - place directly after end of function definition */\r\n#define IAR_ONLY_LOW_OPTIMIZATION_EXIT\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define LOW_OPTIMIZATION_ENTER\r\n#define LOW_OPTIMIZATION_EXIT\r\n#define IAR_ONLY_LOW_OPTIMIZATION_ENTER\r\n#define IAR_ONLY_LOW_OPTIMIZATION_EXIT\r\n\r\n#elif defined(__GNUC__)\r\n#define LOW_OPTIMIZATION_ENTER __attribute__((optimize(\"-O1\")))\r\n#define LOW_OPTIMIZATION_EXIT\r\n#define IAR_ONLY_LOW_OPTIMIZATION_ENTER\r\n#define IAR_ONLY_LOW_OPTIMIZATION_EXIT\r\n\r\n#elif defined(__ICCARM__)\r\n/* Enter low optimization region - place directly above function definition */\r\n#if defined(ARM_MATH_CM4) || defined(ARM_MATH_CM7)\r\n#define LOW_OPTIMIZATION_ENTER _Pragma(\"optimize=low\")\r\n#else\r\n#define LOW_OPTIMIZATION_ENTER\r\n#endif\r\n\r\n/* Exit low optimization region - place directly after end of function definition */\r\n#define LOW_OPTIMIZATION_EXIT\r\n\r\n/* Enter low optimization region - place directly above function definition */\r\n#if defined(ARM_MATH_CM4) || defined(ARM_MATH_CM7)\r\n#define IAR_ONLY_LOW_OPTIMIZATION_ENTER _Pragma(\"optimize=low\")\r\n#else\r\n#define IAR_ONLY_LOW_OPTIMIZATION_ENTER\r\n#endif\r\n\r\n/* Exit low optimization region - place directly after end of function definition */\r\n#define IAR_ONLY_LOW_OPTIMIZATION_EXIT\r\n\r\n#elif defined(__CSMC__)\r\n#define LOW_OPTIMIZATION_ENTER\r\n#define LOW_OPTIMIZATION_EXIT\r\n#define IAR_ONLY_LOW_OPTIMIZATION_ENTER\r\n#define IAR_ONLY_LOW_OPTIMIZATION_EXIT\r\n\r\n#elif defined(__TASKING__)\r\n#define LOW_OPTIMIZATION_ENTER\r\n#define LOW_OPTIMIZATION_EXIT\r\n#define IAR_ONLY_LOW_OPTIMIZATION_ENTER\r\n#define IAR_ONLY_LOW_OPTIMIZATION_EXIT\r\n\r\n#endif\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#if defined(__GNUC__)\r\n#pragma GCC diagnostic pop\r\n#endif\r\n\r\n#endif /* _ARM_MATH_H */\r\n\r\n/**\r\n *\r\n * End of file.\r\n */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Include/cmsis_armcc.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     cmsis_armcc.h\r\n                                                                              * @brief    CMSIS Cortex-M Core Function/Instruction Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#ifndef __CMSIS_ARMCC_H\r\n#define __CMSIS_ARMCC_H\r\n\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 400677)\r\n#error \"Please use ARM Compiler Toolchain V4.0.677 or later!\"\r\n#endif\r\n\r\n/* ###########################  Core Function Access  ########################### */\r\n/** \\ingroup  CMSIS_Core_FunctionInterface\r\n    \\defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions\r\n  @{\r\n */\r\n\r\n/* intrinsic void __enable_irq();     */\r\n/* intrinsic void __disable_irq();    */\r\n\r\n/**\r\n  \\brief   Get Control Register\r\n  \\details Returns the content of the Control Register.\r\n  \\return               Control Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_CONTROL(void) {\r\n  register uint32_t __regControl __ASM(\"control\");\r\n  return (__regControl);\r\n}\r\n\r\n/**\r\n  \\brief   Set Control Register\r\n  \\details Writes the given value to the Control Register.\r\n  \\param [in]    control  Control Register value to set\r\n */\r\n__STATIC_INLINE void __set_CONTROL(uint32_t control) {\r\n  register uint32_t __regControl __ASM(\"control\");\r\n  __regControl = control;\r\n}\r\n\r\n/**\r\n  \\brief   Get IPSR Register\r\n  \\details Returns the content of the IPSR Register.\r\n  \\return               IPSR Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_IPSR(void) {\r\n  register uint32_t __regIPSR __ASM(\"ipsr\");\r\n  return (__regIPSR);\r\n}\r\n\r\n/**\r\n  \\brief   Get APSR Register\r\n  \\details Returns the content of the APSR Register.\r\n  \\return               APSR Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_APSR(void) {\r\n  register uint32_t __regAPSR __ASM(\"apsr\");\r\n  return (__regAPSR);\r\n}\r\n\r\n/**\r\n  \\brief   Get xPSR Register\r\n  \\details Returns the content of the xPSR Register.\r\n  \\return               xPSR Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_xPSR(void) {\r\n  register uint32_t __regXPSR __ASM(\"xpsr\");\r\n  return (__regXPSR);\r\n}\r\n\r\n/**\r\n  \\brief   Get Process Stack Pointer\r\n  \\details Returns the current value of the Process Stack Pointer (PSP).\r\n  \\return               PSP Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_PSP(void) {\r\n  register uint32_t __regProcessStackPointer __ASM(\"psp\");\r\n  return (__regProcessStackPointer);\r\n}\r\n\r\n/**\r\n  \\brief   Set Process Stack Pointer\r\n  \\details Assigns the given value to the Process Stack Pointer (PSP).\r\n  \\param [in]    topOfProcStack  Process Stack Pointer value to set\r\n */\r\n__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) {\r\n  register uint32_t __regProcessStackPointer __ASM(\"psp\");\r\n  __regProcessStackPointer = topOfProcStack;\r\n}\r\n\r\n/**\r\n  \\brief   Get Main Stack Pointer\r\n  \\details Returns the current value of the Main Stack Pointer (MSP).\r\n  \\return               MSP Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_MSP(void) {\r\n  register uint32_t __regMainStackPointer __ASM(\"msp\");\r\n  return (__regMainStackPointer);\r\n}\r\n\r\n/**\r\n  \\brief   Set Main Stack Pointer\r\n  \\details Assigns the given value to the Main Stack Pointer (MSP).\r\n  \\param [in]    topOfMainStack  Main Stack Pointer value to set\r\n */\r\n__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) {\r\n  register uint32_t __regMainStackPointer __ASM(\"msp\");\r\n  __regMainStackPointer = topOfMainStack;\r\n}\r\n\r\n/**\r\n  \\brief   Get Priority Mask\r\n  \\details Returns the current state of the priority mask bit from the Priority Mask Register.\r\n  \\return               Priority Mask value\r\n */\r\n__STATIC_INLINE uint32_t __get_PRIMASK(void) {\r\n  register uint32_t __regPriMask __ASM(\"primask\");\r\n  return (__regPriMask);\r\n}\r\n\r\n/**\r\n  \\brief   Set Priority Mask\r\n  \\details Assigns the given value to the Priority Mask Register.\r\n  \\param [in]    priMask  Priority Mask\r\n */\r\n__STATIC_INLINE void __set_PRIMASK(uint32_t priMask) {\r\n  register uint32_t __regPriMask __ASM(\"primask\");\r\n  __regPriMask = (priMask);\r\n}\r\n\r\n#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U)\r\n\r\n/**\r\n  \\brief   Enable FIQ\r\n  \\details Enables FIQ interrupts by clearing the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n#define __enable_fault_irq __enable_fiq\r\n\r\n/**\r\n  \\brief   Disable FIQ\r\n  \\details Disables FIQ interrupts by setting the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n#define __disable_fault_irq __disable_fiq\r\n\r\n/**\r\n  \\brief   Get Base Priority\r\n  \\details Returns the current value of the Base Priority register.\r\n  \\return               Base Priority register value\r\n */\r\n__STATIC_INLINE uint32_t __get_BASEPRI(void) {\r\n  register uint32_t __regBasePri __ASM(\"basepri\");\r\n  return (__regBasePri);\r\n}\r\n\r\n/**\r\n  \\brief   Set Base Priority\r\n  \\details Assigns the given value to the Base Priority register.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__STATIC_INLINE void __set_BASEPRI(uint32_t basePri) {\r\n  register uint32_t __regBasePri __ASM(\"basepri\");\r\n  __regBasePri = (basePri & 0xFFU);\r\n}\r\n\r\n/**\r\n  \\brief   Set Base Priority with condition\r\n  \\details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled,\r\n           or the new value increases the BASEPRI priority level.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__STATIC_INLINE void __set_BASEPRI_MAX(uint32_t basePri) {\r\n  register uint32_t __regBasePriMax __ASM(\"basepri_max\");\r\n  __regBasePriMax = (basePri & 0xFFU);\r\n}\r\n\r\n/**\r\n  \\brief   Get Fault Mask\r\n  \\details Returns the current value of the Fault Mask register.\r\n  \\return               Fault Mask register value\r\n */\r\n__STATIC_INLINE uint32_t __get_FAULTMASK(void) {\r\n  register uint32_t __regFaultMask __ASM(\"faultmask\");\r\n  return (__regFaultMask);\r\n}\r\n\r\n/**\r\n  \\brief   Set Fault Mask\r\n  \\details Assigns the given value to the Fault Mask register.\r\n  \\param [in]    faultMask  Fault Mask value to set\r\n */\r\n__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) {\r\n  register uint32_t __regFaultMask __ASM(\"faultmask\");\r\n  __regFaultMask = (faultMask & (uint32_t)1);\r\n}\r\n\r\n#endif /* (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U) */\r\n\r\n#if (__CORTEX_M == 0x04U) || (__CORTEX_M == 0x07U)\r\n\r\n/**\r\n  \\brief   Get FPSCR\r\n  \\details Returns the current value of the Floating Point Status/Control register.\r\n  \\return               Floating Point Status/Control register value\r\n */\r\n__STATIC_INLINE uint32_t __get_FPSCR(void) {\r\n#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)\r\n  register uint32_t __regfpscr __ASM(\"fpscr\");\r\n  return (__regfpscr);\r\n#else\r\n  return (0U);\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Set FPSCR\r\n  \\details Assigns the given value to the Floating Point Status/Control register.\r\n  \\param [in]    fpscr  Floating Point Status/Control value to set\r\n */\r\n__STATIC_INLINE void __set_FPSCR(uint32_t fpscr) {\r\n#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)\r\n  register uint32_t __regfpscr __ASM(\"fpscr\");\r\n  __regfpscr = (fpscr);\r\n#endif\r\n}\r\n\r\n#endif /* (__CORTEX_M == 0x04U) || (__CORTEX_M == 0x07U) */\r\n\r\n/*@} end of CMSIS_Core_RegAccFunctions */\r\n\r\n/* ##########################  Core Instruction Access  ######################### */\r\n/** \\defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface\r\n  Access to dedicated instructions\r\n  @{\r\n*/\r\n\r\n/**\r\n  \\brief   No Operation\r\n  \\details No Operation does nothing. This instruction can be used for code alignment purposes.\r\n */\r\n#define __NOP __nop\r\n\r\n/**\r\n  \\brief   Wait For Interrupt\r\n  \\details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.\r\n */\r\n#define __WFI __wfi\r\n\r\n/**\r\n  \\brief   Wait For Event\r\n  \\details Wait For Event is a hint instruction that permits the processor to enter\r\n           a low-power state until one of a number of events occurs.\r\n */\r\n#define __WFE __wfe\r\n\r\n/**\r\n  \\brief   Send Event\r\n  \\details Send Event is a hint instruction. It causes an event to be signaled to the CPU.\r\n */\r\n#define __SEV __sev\r\n\r\n/**\r\n  \\brief   Instruction Synchronization Barrier\r\n  \\details Instruction Synchronization Barrier flushes the pipeline in the processor,\r\n           so that all instructions following the ISB are fetched from cache or memory,\r\n           after the instruction has been completed.\r\n */\r\n#define __ISB()           \\\r\n  do {                    \\\r\n    __schedule_barrier(); \\\r\n    __isb(0xF);           \\\r\n    __schedule_barrier(); \\\r\n  } while (0U)\r\n\r\n/**\r\n  \\brief   Data Synchronization Barrier\r\n  \\details Acts as a special kind of Data Memory Barrier.\r\n           It completes when all explicit memory accesses before this instruction complete.\r\n */\r\n#define __DSB()           \\\r\n  do {                    \\\r\n    __schedule_barrier(); \\\r\n    __dsb(0xF);           \\\r\n    __schedule_barrier(); \\\r\n  } while (0U)\r\n\r\n/**\r\n  \\brief   Data Memory Barrier\r\n  \\details Ensures the apparent order of the explicit memory operations before\r\n           and after the instruction, without ensuring their completion.\r\n */\r\n#define __DMB()           \\\r\n  do {                    \\\r\n    __schedule_barrier(); \\\r\n    __dmb(0xF);           \\\r\n    __schedule_barrier(); \\\r\n  } while (0U)\r\n\r\n/**\r\n  \\brief   Reverse byte order (32 bit)\r\n  \\details Reverses the byte order in integer value.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#define __REV __rev\r\n\r\n/**\r\n  \\brief   Reverse byte order (16 bit)\r\n  \\details Reverses the byte order in two unsigned short values.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#ifndef __NO_EMBEDDED_ASM\r\n__attribute__((section(\".rev16_text\"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value) { rev16 r0, r0 bx lr }\r\n#endif\r\n\r\n/**\r\n  \\brief   Reverse byte order in signed short value\r\n  \\details Reverses the byte order in a signed short value with sign extension to integer.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#ifndef __NO_EMBEDDED_ASM\r\n__attribute__((section(\".revsh_text\"))) __STATIC_INLINE __ASM int32_t __REVSH(int32_t value) { revsh r0, r0 bx lr }\r\n#endif\r\n\r\n/**\r\n  \\brief   Rotate Right in unsigned value (32 bit)\r\n  \\details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.\r\n  \\param [in]    value  Value to rotate\r\n  \\param [in]    value  Number of Bits to rotate\r\n  \\return               Rotated value\r\n */\r\n#define __ROR __ror\r\n\r\n/**\r\n  \\brief   Breakpoint\r\n  \\details Causes the processor to enter Debug state.\r\n           Debug tools can use this to investigate system state when the instruction at a particular address is reached.\r\n  \\param [in]    value  is ignored by the processor.\r\n                 If required, a debugger can use it to store additional information about the breakpoint.\r\n */\r\n#define __BKPT(value) __breakpoint(value)\r\n\r\n/**\r\n  \\brief   Reverse bit order of value\r\n  \\details Reverses the bit order of the given value.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U)\r\n#define __RBIT __rbit\r\n#else\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) {\r\n  uint32_t result;\r\n  int32_t  s = 4 /*sizeof(v)*/ * 8 - 1; /* extra shift needed at end */\r\n\r\n  result = value; /* r will be reversed bits of v; first get LSB of v */\r\n  for (value >>= 1U; value; value >>= 1U) {\r\n    result <<= 1U;\r\n    result |= value & 1U;\r\n    s--;\r\n  }\r\n  result <<= s; /* shift when v's highest bits are zero */\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Count leading zeros\r\n  \\details Counts the number of leading zeros of a data value.\r\n  \\param [in]  value  Value to count the leading zeros\r\n  \\return             number of leading zeros in value\r\n */\r\n#define __CLZ __clz\r\n\r\n#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U)\r\n\r\n/**\r\n  \\brief   LDR Exclusive (8 bit)\r\n  \\details Executes a exclusive LDR instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __LDREXB(ptr) ((uint8_t)__ldrex(ptr))\r\n#else\r\n#define __LDREXB(ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\")((uint8_t)__ldrex(ptr)) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   LDR Exclusive (16 bit)\r\n  \\details Executes a exclusive LDR instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __LDREXH(ptr) ((uint16_t)__ldrex(ptr))\r\n#else\r\n#define __LDREXH(ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\")((uint16_t)__ldrex(ptr)) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   LDR Exclusive (32 bit)\r\n  \\details Executes a exclusive LDR instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __LDREXW(ptr) ((uint32_t)__ldrex(ptr))\r\n#else\r\n#define __LDREXW(ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\")((uint32_t)__ldrex(ptr)) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   STR Exclusive (8 bit)\r\n  \\details Executes a exclusive STR instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __STREXB(value, ptr) __strex(value, ptr)\r\n#else\r\n#define __STREXB(value, ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\") __strex(value, ptr) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   STR Exclusive (16 bit)\r\n  \\details Executes a exclusive STR instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __STREXH(value, ptr) __strex(value, ptr)\r\n#else\r\n#define __STREXH(value, ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\") __strex(value, ptr) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   STR Exclusive (32 bit)\r\n  \\details Executes a exclusive STR instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __STREXW(value, ptr) __strex(value, ptr)\r\n#else\r\n#define __STREXW(value, ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\") __strex(value, ptr) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   Remove the exclusive lock\r\n  \\details Removes the exclusive lock which is created by LDREX.\r\n */\r\n#define __CLREX __clrex\r\n\r\n/**\r\n  \\brief   Signed Saturate\r\n  \\details Saturates a signed value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (1..32)\r\n  \\return             Saturated value\r\n */\r\n#define __SSAT __ssat\r\n\r\n/**\r\n  \\brief   Unsigned Saturate\r\n  \\details Saturates an unsigned value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (0..31)\r\n  \\return             Saturated value\r\n */\r\n#define __USAT __usat\r\n\r\n/**\r\n  \\brief   Rotate Right with Extend (32 bit)\r\n  \\details Moves each bit of a bitstring right by one bit.\r\n           The carry input is shifted in at the left end of the bitstring.\r\n  \\param [in]    value  Value to rotate\r\n  \\return               Rotated value\r\n */\r\n#ifndef __NO_EMBEDDED_ASM\r\n__attribute__((section(\".rrx_text\"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value) { rrx r0, r0 bx lr }\r\n#endif\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n#define __LDRBT(ptr) ((uint8_t)__ldrt(ptr))\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n#define __LDRHT(ptr) ((uint16_t)__ldrt(ptr))\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n#define __LDRT(ptr) ((uint32_t)__ldrt(ptr))\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n#define __STRBT(value, ptr) __strt(value, ptr)\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n#define __STRHT(value, ptr) __strt(value, ptr)\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n#define __STRT(value, ptr) __strt(value, ptr)\r\n\r\n#endif /* (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U) */\r\n\r\n/*@}*/ /* end of group CMSIS_Core_InstructionInterface */\r\n\r\n/* ###################  Compiler specific Intrinsics  ########################### */\r\n/** \\defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics\r\n  Access to dedicated SIMD instructions\r\n  @{\r\n*/\r\n\r\n#if (__CORTEX_M >= 0x04U) /* only for Cortex-M4 and above */\r\n\r\n#define __SADD8   __sadd8\r\n#define __QADD8   __qadd8\r\n#define __SHADD8  __shadd8\r\n#define __UADD8   __uadd8\r\n#define __UQADD8  __uqadd8\r\n#define __UHADD8  __uhadd8\r\n#define __SSUB8   __ssub8\r\n#define __QSUB8   __qsub8\r\n#define __SHSUB8  __shsub8\r\n#define __USUB8   __usub8\r\n#define __UQSUB8  __uqsub8\r\n#define __UHSUB8  __uhsub8\r\n#define __SADD16  __sadd16\r\n#define __QADD16  __qadd16\r\n#define __SHADD16 __shadd16\r\n#define __UADD16  __uadd16\r\n#define __UQADD16 __uqadd16\r\n#define __UHADD16 __uhadd16\r\n#define __SSUB16  __ssub16\r\n#define __QSUB16  __qsub16\r\n#define __SHSUB16 __shsub16\r\n#define __USUB16  __usub16\r\n#define __UQSUB16 __uqsub16\r\n#define __UHSUB16 __uhsub16\r\n#define __SASX    __sasx\r\n#define __QASX    __qasx\r\n#define __SHASX   __shasx\r\n#define __UASX    __uasx\r\n#define __UQASX   __uqasx\r\n#define __UHASX   __uhasx\r\n#define __SSAX    __ssax\r\n#define __QSAX    __qsax\r\n#define __SHSAX   __shsax\r\n#define __USAX    __usax\r\n#define __UQSAX   __uqsax\r\n#define __UHSAX   __uhsax\r\n#define __USAD8   __usad8\r\n#define __USADA8  __usada8\r\n#define __SSAT16  __ssat16\r\n#define __USAT16  __usat16\r\n#define __UXTB16  __uxtb16\r\n#define __UXTAB16 __uxtab16\r\n#define __SXTB16  __sxtb16\r\n#define __SXTAB16 __sxtab16\r\n#define __SMUAD   __smuad\r\n#define __SMUADX  __smuadx\r\n#define __SMLAD   __smlad\r\n#define __SMLADX  __smladx\r\n#define __SMLALD  __smlald\r\n#define __SMLALDX __smlaldx\r\n#define __SMUSD   __smusd\r\n#define __SMUSDX  __smusdx\r\n#define __SMLSD   __smlsd\r\n#define __SMLSDX  __smlsdx\r\n#define __SMLSLD  __smlsld\r\n#define __SMLSLDX __smlsldx\r\n#define __SEL     __sel\r\n#define __QADD    __qadd\r\n#define __QSUB    __qsub\r\n\r\n#define __PKHBT(ARG1, ARG2, ARG3) (((((uint32_t)(ARG1))) & 0x0000FFFFUL) | ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL))\r\n\r\n#define __PKHTB(ARG1, ARG2, ARG3) (((((uint32_t)(ARG1))) & 0xFFFF0000UL) | ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL))\r\n\r\n#define __SMMLA(ARG1, ARG2, ARG3) ((int32_t)((((int64_t)(ARG1) * (ARG2)) + ((int64_t)(ARG3) << 32U)) >> 32U))\r\n\r\n#endif /* (__CORTEX_M >= 0x04) */\r\n/*@} end of group CMSIS_SIMD_intrinsics */\r\n\r\n#endif /* __CMSIS_ARMCC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Include/cmsis_armcc_V6.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     cmsis_armcc_V6.h\r\n                                                                              * @brief    CMSIS Cortex-M Core Function/Instruction Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#ifndef __CMSIS_ARMCC_V6_H\r\n#define __CMSIS_ARMCC_V6_H\r\n\r\n/* ###########################  Core Function Access  ########################### */\r\n/** \\ingroup  CMSIS_Core_FunctionInterface\r\n    \\defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Enable IRQ Interrupts\r\n  \\details Enables IRQ interrupts by clearing the I-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __enable_irq(void) { __ASM volatile(\"cpsie i\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Disable IRQ Interrupts\r\n  \\details Disables IRQ interrupts by setting the I-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __disable_irq(void) { __ASM volatile(\"cpsid i\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Get Control Register\r\n  \\details Returns the content of the Control Register.\r\n  \\return               Control Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_CONTROL(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, control\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get Control Register (non-secure)\r\n  \\details Returns the content of the non-secure Control Register when in secure mode.\r\n  \\return               non-secure Control Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_CONTROL_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, control_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Control Register\r\n  \\details Writes the given value to the Control Register.\r\n  \\param [in]    control  Control Register value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_CONTROL(uint32_t control) { __ASM volatile(\"MSR control, %0\" : : \"r\"(control) : \"memory\"); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Set Control Register (non-secure)\r\n  \\details Writes the given value to the non-secure Control Register when in secure state.\r\n  \\param [in]    control  Control Register value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_CONTROL_NS(uint32_t control) { __ASM volatile(\"MSR control_ns, %0\" : : \"r\"(control) : \"memory\"); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Get IPSR Register\r\n  \\details Returns the content of the IPSR Register.\r\n  \\return               IPSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_IPSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, ipsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get IPSR Register (non-secure)\r\n  \\details Returns the content of the non-secure IPSR Register when in secure state.\r\n  \\return               IPSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_IPSR_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, ipsr_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Get APSR Register\r\n  \\details Returns the content of the APSR Register.\r\n  \\return               APSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_APSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, apsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get APSR Register (non-secure)\r\n  \\details Returns the content of the non-secure APSR Register when in secure state.\r\n  \\return               APSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_APSR_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, apsr_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Get xPSR Register\r\n  \\details Returns the content of the xPSR Register.\r\n  \\return               xPSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_xPSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, xpsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get xPSR Register (non-secure)\r\n  \\details Returns the content of the non-secure xPSR Register when in secure state.\r\n  \\return               xPSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_xPSR_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, xpsr_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Get Process Stack Pointer\r\n  \\details Returns the current value of the Process Stack Pointer (PSP).\r\n  \\return               PSP Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_PSP(void) {\r\n  register uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, psp\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get Process Stack Pointer (non-secure)\r\n  \\details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state.\r\n  \\return               PSP Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_PSP_NS(void) {\r\n  register uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, psp_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Process Stack Pointer\r\n  \\details Assigns the given value to the Process Stack Pointer (PSP).\r\n  \\param [in]    topOfProcStack  Process Stack Pointer value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) { __ASM volatile(\"MSR psp, %0\" : : \"r\"(topOfProcStack) : \"sp\"); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Set Process Stack Pointer (non-secure)\r\n  \\details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state.\r\n  \\param [in]    topOfProcStack  Process Stack Pointer value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) { __ASM volatile(\"MSR psp_ns, %0\" : : \"r\"(topOfProcStack) : \"sp\"); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Get Main Stack Pointer\r\n  \\details Returns the current value of the Main Stack Pointer (MSP).\r\n  \\return               MSP Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_MSP(void) {\r\n  register uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, msp\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get Main Stack Pointer (non-secure)\r\n  \\details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state.\r\n  \\return               MSP Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_MSP_NS(void) {\r\n  register uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, msp_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Main Stack Pointer\r\n  \\details Assigns the given value to the Main Stack Pointer (MSP).\r\n  \\param [in]    topOfMainStack  Main Stack Pointer value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) { __ASM volatile(\"MSR msp, %0\" : : \"r\"(topOfMainStack) : \"sp\"); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Set Main Stack Pointer (non-secure)\r\n  \\details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state.\r\n  \\param [in]    topOfMainStack  Main Stack Pointer value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) { __ASM volatile(\"MSR msp_ns, %0\" : : \"r\"(topOfMainStack) : \"sp\"); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Get Priority Mask\r\n  \\details Returns the current state of the priority mask bit from the Priority Mask Register.\r\n  \\return               Priority Mask value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_PRIMASK(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, primask\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get Priority Mask (non-secure)\r\n  \\details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state.\r\n  \\return               Priority Mask value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_PRIMASK_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, primask_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Priority Mask\r\n  \\details Assigns the given value to the Priority Mask Register.\r\n  \\param [in]    priMask  Priority Mask\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask) { __ASM volatile(\"MSR primask, %0\" : : \"r\"(priMask) : \"memory\"); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Set Priority Mask (non-secure)\r\n  \\details Assigns the given value to the non-secure Priority Mask Register when in secure state.\r\n  \\param [in]    priMask  Priority Mask\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) { __ASM volatile(\"MSR primask_ns, %0\" : : \"r\"(priMask) : \"memory\"); }\r\n#endif\r\n\r\n#if ((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) /* ToDo:  ARMCC_V6: check if this is ok for cortex >=3 */\r\n\r\n/**\r\n  \\brief   Enable FIQ\r\n  \\details Enables FIQ interrupts by clearing the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __enable_fault_irq(void) { __ASM volatile(\"cpsie f\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Disable FIQ\r\n  \\details Disables FIQ interrupts by setting the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __disable_fault_irq(void) { __ASM volatile(\"cpsid f\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Get Base Priority\r\n  \\details Returns the current value of the Base Priority register.\r\n  \\return               Base Priority register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_BASEPRI(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, basepri\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get Base Priority (non-secure)\r\n  \\details Returns the current value of the non-secure Base Priority register when in secure state.\r\n  \\return               Base Priority register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_BASEPRI_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, basepri_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Base Priority\r\n  \\details Assigns the given value to the Base Priority register.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_BASEPRI(uint32_t value) { __ASM volatile(\"MSR basepri, %0\" : : \"r\"(value) : \"memory\"); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Set Base Priority (non-secure)\r\n  \\details Assigns the given value to the non-secure Base Priority register when in secure state.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_BASEPRI_NS(uint32_t value) { __ASM volatile(\"MSR basepri_ns, %0\" : : \"r\"(value) : \"memory\"); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Base Priority with condition\r\n  \\details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled,\r\n           or the new value increases the BASEPRI priority level.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_BASEPRI_MAX(uint32_t value) { __ASM volatile(\"MSR basepri_max, %0\" : : \"r\"(value) : \"memory\"); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Set Base Priority with condition (non_secure)\r\n  \\details Assigns the given value to the non-secure Base Priority register when in secure state only if BASEPRI masking is disabled,\r\n               or the new value increases the BASEPRI priority level.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_BASEPRI_MAX_NS(uint32_t value) { __ASM volatile(\"MSR basepri_max_ns, %0\" : : \"r\"(value) : \"memory\"); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Get Fault Mask\r\n  \\details Returns the current value of the Fault Mask register.\r\n  \\return               Fault Mask register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_FAULTMASK(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, faultmask\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get Fault Mask (non-secure)\r\n  \\details Returns the current value of the non-secure Fault Mask register when in secure state.\r\n  \\return               Fault Mask register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_FAULTMASK_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, faultmask_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Fault Mask\r\n  \\details Assigns the given value to the Fault Mask register.\r\n  \\param [in]    faultMask  Fault Mask value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) { __ASM volatile(\"MSR faultmask, %0\" : : \"r\"(faultMask) : \"memory\"); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Set Fault Mask (non-secure)\r\n  \\details Assigns the given value to the non-secure Fault Mask register when in secure state.\r\n  \\param [in]    faultMask  Fault Mask value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) { __ASM volatile(\"MSR faultmask_ns, %0\" : : \"r\"(faultMask) : \"memory\"); }\r\n#endif\r\n\r\n#endif /* ((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_8M__ == 1U)) */\r\n\r\n#if (__ARM_ARCH_8M__ == 1U)\r\n\r\n/**\r\n  \\brief   Get Process Stack Pointer Limit\r\n  \\details Returns the current value of the Process Stack Pointer Limit (PSPLIM).\r\n  \\return               PSPLIM Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_PSPLIM(void) {\r\n  register uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, psplim\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U) && (__ARM_ARCH_PROFILE == 'M') /* ToDo:  ARMCC_V6: check predefined macro for mainline */\r\n/**\r\n  \\brief   Get Process Stack Pointer Limit (non-secure)\r\n  \\details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state.\r\n  \\return               PSPLIM Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_PSPLIM_NS(void) {\r\n  register uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, psplim_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Process Stack Pointer Limit\r\n  \\details Assigns the given value to the Process Stack Pointer Limit (PSPLIM).\r\n  \\param [in]    ProcStackPtrLimit  Process Stack Pointer Limit value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) { __ASM volatile(\"MSR psplim, %0\" : : \"r\"(ProcStackPtrLimit)); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U) && (__ARM_ARCH_PROFILE == 'M') /* ToDo:  ARMCC_V6: check predefined macro for mainline */\r\n/**\r\n  \\brief   Set Process Stack Pointer (non-secure)\r\n  \\details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state.\r\n  \\param [in]    ProcStackPtrLimit  Process Stack Pointer Limit value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) { __ASM volatile(\"MSR psplim_ns, %0\\n\" : : \"r\"(ProcStackPtrLimit)); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Get Main Stack Pointer Limit\r\n  \\details Returns the current value of the Main Stack Pointer Limit (MSPLIM).\r\n  \\return               MSPLIM Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_MSPLIM(void) {\r\n  register uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, msplim\" : \"=r\"(result));\r\n\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U) && (__ARM_ARCH_PROFILE == 'M') /* ToDo:  ARMCC_V6: check predefined macro for mainline */\r\n/**\r\n  \\brief   Get Main Stack Pointer Limit (non-secure)\r\n  \\details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state.\r\n  \\return               MSPLIM Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_MSPLIM_NS(void) {\r\n  register uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, msplim_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Main Stack Pointer Limit\r\n  \\details Assigns the given value to the Main Stack Pointer Limit (MSPLIM).\r\n  \\param [in]    MainStackPtrLimit  Main Stack Pointer Limit value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) { __ASM volatile(\"MSR msplim, %0\" : : \"r\"(MainStackPtrLimit)); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U) && (__ARM_ARCH_PROFILE == 'M') /* ToDo:  ARMCC_V6: check predefined macro for mainline */\r\n/**\r\n  \\brief   Set Main Stack Pointer Limit (non-secure)\r\n  \\details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state.\r\n  \\param [in]    MainStackPtrLimit  Main Stack Pointer value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) { __ASM volatile(\"MSR msplim_ns, %0\" : : \"r\"(MainStackPtrLimit)); }\r\n#endif\r\n\r\n#endif /* (__ARM_ARCH_8M__ == 1U) */\r\n\r\n#if ((__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) /* ToDo:  ARMCC_V6: check if this is ok for cortex >=4 */\r\n\r\n/**\r\n  \\brief   Get FPSCR\r\n  \\details eturns the current value of the Floating Point Status/Control register.\r\n  \\return               Floating Point Status/Control register value\r\n */\r\n#define __get_FPSCR __builtin_arm_get_fpscr\r\n#if 0\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_FPSCR(void)\r\n{\r\n#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)\r\n  uint32_t result;\r\n\r\n  __ASM volatile (\"\");                                 /* Empty asm statement works as a scheduling barrier */\r\n  __ASM volatile (\"VMRS %0, fpscr\" : \"=r\" (result) );\r\n  __ASM volatile (\"\");\r\n  return(result);\r\n#else\r\n   return(0);\r\n#endif\r\n}\r\n#endif\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get FPSCR (non-secure)\r\n  \\details Returns the current value of the non-secure Floating Point Status/Control register when in secure state.\r\n  \\return               Floating Point Status/Control register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_FPSCR_NS(void) {\r\n#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"\"); /* Empty asm statement works as a scheduling barrier */\r\n  __ASM volatile(\"VMRS %0, fpscr_ns\" : \"=r\"(result));\r\n  __ASM volatile(\"\");\r\n  return (result);\r\n#else\r\n  return (0);\r\n#endif\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set FPSCR\r\n  \\details Assigns the given value to the Floating Point Status/Control register.\r\n  \\param [in]    fpscr  Floating Point Status/Control value to set\r\n */\r\n#define __set_FPSCR __builtin_arm_set_fpscr\r\n#if 0\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr)\r\n{\r\n#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)\r\n  __ASM volatile (\"\");                                 /* Empty asm statement works as a scheduling barrier */\r\n  __ASM volatile (\"VMSR fpscr, %0\" : : \"r\" (fpscr) : \"vfpcc\");\r\n  __ASM volatile (\"\");\r\n#endif\r\n}\r\n#endif\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Set FPSCR (non-secure)\r\n  \\details Assigns the given value to the non-secure Floating Point Status/Control register when in secure state.\r\n  \\param [in]    fpscr  Floating Point Status/Control value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_FPSCR_NS(uint32_t fpscr) {\r\n#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)\r\n  __ASM volatile(\"\"); /* Empty asm statement works as a scheduling barrier */\r\n  __ASM volatile(\"VMSR fpscr_ns, %0\" : : \"r\"(fpscr) : \"vfpcc\");\r\n  __ASM volatile(\"\");\r\n#endif\r\n}\r\n#endif\r\n\r\n#endif /* ((__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) */\r\n\r\n/*@} end of CMSIS_Core_RegAccFunctions */\r\n\r\n/* ##########################  Core Instruction Access  ######################### */\r\n/** \\defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface\r\n  Access to dedicated instructions\r\n  @{\r\n*/\r\n\r\n/* Define macros for porting to both thumb1 and thumb2.\r\n * For thumb1, use low register (r0-r7), specified by constraint \"l\"\r\n * Otherwise, use general registers, specified by constraint \"r\" */\r\n#if defined(__thumb__) && !defined(__thumb2__)\r\n#define __CMSIS_GCC_OUT_REG(r) \"=l\"(r)\r\n#define __CMSIS_GCC_USE_REG(r) \"l\"(r)\r\n#else\r\n#define __CMSIS_GCC_OUT_REG(r) \"=r\"(r)\r\n#define __CMSIS_GCC_USE_REG(r) \"r\"(r)\r\n#endif\r\n\r\n/**\r\n  \\brief   No Operation\r\n  \\details No Operation does nothing. This instruction can be used for code alignment purposes.\r\n */\r\n#define __NOP __builtin_arm_nop\r\n\r\n/**\r\n  \\brief   Wait For Interrupt\r\n  \\details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.\r\n */\r\n#define __WFI __builtin_arm_wfi\r\n\r\n/**\r\n  \\brief   Wait For Event\r\n  \\details Wait For Event is a hint instruction that permits the processor to enter\r\n           a low-power state until one of a number of events occurs.\r\n */\r\n#define __WFE __builtin_arm_wfe\r\n\r\n/**\r\n  \\brief   Send Event\r\n  \\details Send Event is a hint instruction. It causes an event to be signaled to the CPU.\r\n */\r\n#define __SEV __builtin_arm_sev\r\n\r\n/**\r\n  \\brief   Instruction Synchronization Barrier\r\n  \\details Instruction Synchronization Barrier flushes the pipeline in the processor,\r\n           so that all instructions following the ISB are fetched from cache or memory,\r\n           after the instruction has been completed.\r\n */\r\n#define __ISB() __builtin_arm_isb(0xF);\r\n\r\n/**\r\n  \\brief   Data Synchronization Barrier\r\n  \\details Acts as a special kind of Data Memory Barrier.\r\n           It completes when all explicit memory accesses before this instruction complete.\r\n */\r\n#define __DSB() __builtin_arm_dsb(0xF);\r\n\r\n/**\r\n  \\brief   Data Memory Barrier\r\n  \\details Ensures the apparent order of the explicit memory operations before\r\n           and after the instruction, without ensuring their completion.\r\n */\r\n#define __DMB() __builtin_arm_dmb(0xF);\r\n\r\n/**\r\n  \\brief   Reverse byte order (32 bit)\r\n  \\details Reverses the byte order in integer value.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#define __REV __builtin_bswap32\r\n\r\n/**\r\n  \\brief   Reverse byte order (16 bit)\r\n  \\details Reverses the byte order in two unsigned short values.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#define __REV16 __builtin_bswap16 /* ToDo:  ARMCC_V6: check if __builtin_bswap16 could be used */\r\n#if 0\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __REV16(uint32_t value)\r\n{\r\n  uint32_t result;\r\n\r\n  __ASM volatile (\"rev16 %0, %1\" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );\r\n  return(result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Reverse byte order in signed short value\r\n  \\details Reverses the byte order in a signed short value with sign extension to integer.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n/* ToDo:  ARMCC_V6: check if __builtin_bswap16 could be used */\r\n__attribute__((always_inline)) __STATIC_INLINE int32_t __REVSH(int32_t value) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"revsh %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Rotate Right in unsigned value (32 bit)\r\n  \\details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.\r\n  \\param [in]    op1  Value to rotate\r\n  \\param [in]    op2  Number of Bits to rotate\r\n  \\return               Rotated value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2) { return (op1 >> op2) | (op1 << (32U - op2)); }\r\n\r\n/**\r\n  \\brief   Breakpoint\r\n  \\details Causes the processor to enter Debug state.\r\n            Debug tools can use this to investigate system state when the instruction at a particular address is reached.\r\n    \\param [in]    value  is ignored by the processor.\r\n                   If required, a debugger can use it to store additional information about the breakpoint.\r\n */\r\n#define __BKPT(value) __ASM volatile(\"bkpt \" #value)\r\n\r\n/**\r\n  \\brief   Reverse bit order of value\r\n  \\details Reverses the bit order of the given value.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n/* ToDo:  ARMCC_V6: check if __builtin_arm_rbit is supported */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) {\r\n  uint32_t result;\r\n\r\n#if ((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) /* ToDo:  ARMCC_V6: check if this is ok for cortex >=3 */\r\n  __ASM volatile(\"rbit %0, %1\" : \"=r\"(result) : \"r\"(value));\r\n#else\r\n  int32_t s = 4 /*sizeof(v)*/ * 8 - 1; /* extra shift needed at end */\r\n\r\n  result = value; /* r will be reversed bits of v; first get LSB of v */\r\n  for (value >>= 1U; value; value >>= 1U) {\r\n    result <<= 1U;\r\n    result |= value & 1U;\r\n    s--;\r\n  }\r\n  result <<= s; /* shift when v's highest bits are zero */\r\n#endif\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Count leading zeros\r\n  \\details Counts the number of leading zeros of a data value.\r\n  \\param [in]  value  Value to count the leading zeros\r\n  \\return             number of leading zeros in value\r\n */\r\n#define __CLZ __builtin_clz\r\n\r\n#if ((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) /* ToDo:  ARMCC_V6: check if this is ok for cortex >=3 */\r\n\r\n/**\r\n  \\brief   LDR Exclusive (8 bit)\r\n  \\details Executes a exclusive LDR instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n#define __LDREXB (uint8_t) __builtin_arm_ldrex\r\n\r\n/**\r\n  \\brief   LDR Exclusive (16 bit)\r\n  \\details Executes a exclusive LDR instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n#define __LDREXH (uint16_t) __builtin_arm_ldrex\r\n\r\n/**\r\n  \\brief   LDR Exclusive (32 bit)\r\n  \\details Executes a exclusive LDR instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n#define __LDREXW (uint32_t) __builtin_arm_ldrex\r\n\r\n/**\r\n  \\brief   STR Exclusive (8 bit)\r\n  \\details Executes a exclusive STR instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STREXB (uint32_t) __builtin_arm_strex\r\n\r\n/**\r\n  \\brief   STR Exclusive (16 bit)\r\n  \\details Executes a exclusive STR instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STREXH (uint32_t) __builtin_arm_strex\r\n\r\n/**\r\n  \\brief   STR Exclusive (32 bit)\r\n  \\details Executes a exclusive STR instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STREXW (uint32_t) __builtin_arm_strex\r\n\r\n/**\r\n  \\brief   Remove the exclusive lock\r\n  \\details Removes the exclusive lock which is created by LDREX.\r\n */\r\n#define __CLREX __builtin_arm_clrex\r\n\r\n/**\r\n  \\brief   Signed Saturate\r\n  \\details Saturates a signed value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (1..32)\r\n  \\return             Saturated value\r\n */\r\n/*#define __SSAT             __builtin_arm_ssat*/\r\n#define __SSAT(ARG1, ARG2)                                           \\\r\n  ({                                                                 \\\r\n    int32_t __RES, __ARG1 = (ARG1);                                  \\\r\n    __ASM(\"ssat %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                           \\\r\n  })\r\n\r\n/**\r\n  \\brief   Unsigned Saturate\r\n  \\details Saturates an unsigned value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (0..31)\r\n  \\return             Saturated value\r\n */\r\n#define __USAT __builtin_arm_usat\r\n#if 0\r\n#define __USAT(ARG1, ARG2)                                           \\\r\n  ({                                                                 \\\r\n    uint32_t __RES, __ARG1 = (ARG1);                                 \\\r\n    __ASM(\"usat %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                           \\\r\n  })\r\n#endif\r\n\r\n/**\r\n  \\brief   Rotate Right with Extend (32 bit)\r\n  \\details Moves each bit of a bitstring right by one bit.\r\n           The carry input is shifted in at the left end of the bitstring.\r\n  \\param [in]    value  Value to rotate\r\n  \\return               Rotated value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __RRX(uint32_t value) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"rrx %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint8_t __LDRBT(volatile uint8_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldrbt %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return ((uint8_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint16_t __LDRHT(volatile uint16_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldrht %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return ((uint16_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __LDRT(volatile uint32_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldrt %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) { __ASM volatile(\"strbt %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) { __ASM volatile(\"strht %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STRT(uint32_t value, volatile uint32_t *ptr) { __ASM volatile(\"strt %1, %0\" : \"=Q\"(*ptr) : \"r\"(value)); }\r\n\r\n#endif /* ((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) */\r\n\r\n#if (__ARM_ARCH_8M__ == 1U)\r\n\r\n/**\r\n  \\brief   Load-Acquire (8 bit)\r\n  \\details Executes a LDAB instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint8_t __LDAB(volatile uint8_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldab %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return ((uint8_t)result);\r\n}\r\n\r\n/**\r\n  \\brief   Load-Acquire (16 bit)\r\n  \\details Executes a LDAH instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint16_t __LDAH(volatile uint16_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldah %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return ((uint16_t)result);\r\n}\r\n\r\n/**\r\n  \\brief   Load-Acquire (32 bit)\r\n  \\details Executes a LDA instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __LDA(volatile uint32_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"lda %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Store-Release (8 bit)\r\n  \\details Executes a STLB instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STLB(uint8_t value, volatile uint8_t *ptr) { __ASM volatile(\"stlb %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   Store-Release (16 bit)\r\n  \\details Executes a STLH instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STLH(uint16_t value, volatile uint16_t *ptr) { __ASM volatile(\"stlh %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   Store-Release (32 bit)\r\n  \\details Executes a STL instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STL(uint32_t value, volatile uint32_t *ptr) { __ASM volatile(\"stl %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   Load-Acquire Exclusive (8 bit)\r\n  \\details Executes a LDAB exclusive instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n#define __LDAEXB (uint8_t) __builtin_arm_ldaex\r\n\r\n/**\r\n  \\brief   Load-Acquire Exclusive (16 bit)\r\n  \\details Executes a LDAH exclusive instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n#define __LDAEXH (uint16_t) __builtin_arm_ldaex\r\n\r\n/**\r\n  \\brief   Load-Acquire Exclusive (32 bit)\r\n  \\details Executes a LDA exclusive instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n#define __LDAEX (uint32_t) __builtin_arm_ldaex\r\n\r\n/**\r\n  \\brief   Store-Release Exclusive (8 bit)\r\n  \\details Executes a STLB exclusive instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STLEXB (uint32_t) __builtin_arm_stlex\r\n\r\n/**\r\n  \\brief   Store-Release Exclusive (16 bit)\r\n  \\details Executes a STLH exclusive instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STLEXH (uint32_t) __builtin_arm_stlex\r\n\r\n/**\r\n  \\brief   Store-Release Exclusive (32 bit)\r\n  \\details Executes a STL exclusive instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STLEX (uint32_t) __builtin_arm_stlex\r\n\r\n#endif /* (__ARM_ARCH_8M__ == 1U) */\r\n\r\n/*@}*/ /* end of group CMSIS_Core_InstructionInterface */\r\n\r\n/* ###################  Compiler specific Intrinsics  ########################### */\r\n/** \\defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics\r\n  Access to dedicated SIMD instructions\r\n  @{\r\n*/\r\n\r\n#if (__ARM_FEATURE_DSP == 1U) /* ToDo:  ARMCC_V6: This should be ARCH >= ARMv7-M + SIMD */\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usad8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usada8 %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n#define __SSAT16(ARG1, ARG2)                                           \\\r\n  ({                                                                   \\\r\n    uint32_t __RES, __ARG1 = (ARG1);                                   \\\r\n    __ASM(\"ssat16 %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                             \\\r\n  })\r\n\r\n#define __USAT16(ARG1, ARG2)                                           \\\r\n  ({                                                                   \\\r\n    uint32_t __RES, __ARG1 = (ARG1);                                   \\\r\n    __ASM(\"usat16 %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                             \\\r\n  })\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UXTB16(uint32_t op1) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uxtb16 %0, %1\" : \"=r\"(result) : \"r\"(op1));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uxtab16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SXTB16(uint32_t op1) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sxtb16 %0, %1\" : \"=r\"(result) : \"r\"(op1));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sxtab16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUAD(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smuad %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUADX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smuadx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLAD(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlad %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLADX(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smladx %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLALD(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlald %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlald %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLALDX(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlaldx %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlaldx %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUSD(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smusd %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUSDX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smusdx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLSD(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlsd %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLSDX(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlsdx %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLSLD(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlsld %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlsld %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLSLDX(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlsldx %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlsldx %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SEL(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sel %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE int32_t __QADD(int32_t op1, int32_t op2) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"qadd %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE int32_t __QSUB(int32_t op1, int32_t op2) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"qsub %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n#define __PKHBT(ARG1, ARG2, ARG3)                                                          \\\r\n  ({                                                                                       \\\r\n    uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2);                                      \\\r\n    __ASM(\"pkhbt %0, %1, %2, lsl %3\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2), \"I\"(ARG3)); \\\r\n    __RES;                                                                                 \\\r\n  })\r\n\r\n#define __PKHTB(ARG1, ARG2, ARG3)                                                            \\\r\n  ({                                                                                         \\\r\n    uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2);                                        \\\r\n    if (ARG3 == 0)                                                                           \\\r\n      __ASM(\"pkhtb %0, %1, %2\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2));                    \\\r\n    else                                                                                     \\\r\n      __ASM(\"pkhtb %0, %1, %2, asr %3\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2), \"I\"(ARG3)); \\\r\n    __RES;                                                                                   \\\r\n  })\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMMLA(int32_t op1, int32_t op2, int32_t op3) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"smmla %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n#endif /* (__ARM_FEATURE_DSP == 1U) */\r\n/*@} end of group CMSIS_SIMD_intrinsics */\r\n\r\n#endif /* __CMSIS_ARMCC_V6_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Include/cmsis_gcc.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     cmsis_gcc.h\r\n                                                                              * @brief    CMSIS Cortex-M Core Function/Instruction Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#ifndef __CMSIS_GCC_H\r\n#define __CMSIS_GCC_H\r\n\r\n/* ignore some GCC warnings */\r\n#if defined(__GNUC__)\r\n#pragma GCC diagnostic push\r\n#pragma GCC diagnostic ignored \"-Wsign-conversion\"\r\n#pragma GCC diagnostic ignored \"-Wconversion\"\r\n#pragma GCC diagnostic ignored \"-Wunused-parameter\"\r\n#endif\r\n\r\n/* ###########################  Core Function Access  ########################### */\r\n/** \\ingroup  CMSIS_Core_FunctionInterface\r\n    \\defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Enable IRQ Interrupts\r\n  \\details Enables IRQ interrupts by clearing the I-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __enable_irq(void) { __ASM volatile(\"cpsie i\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Disable IRQ Interrupts\r\n  \\details Disables IRQ interrupts by setting the I-bit in the CPSR.\r\n  Can only be executed in Privileged modes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __disable_irq(void) { __ASM volatile(\"cpsid i\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Get Control Register\r\n  \\details Returns the content of the Control Register.\r\n  \\return               Control Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_CONTROL(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, control\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Set Control Register\r\n  \\details Writes the given value to the Control Register.\r\n  \\param [in]    control  Control Register value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_CONTROL(uint32_t control) { __ASM volatile(\"MSR control, %0\" : : \"r\"(control) : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Get IPSR Register\r\n  \\details Returns the content of the IPSR Register.\r\n  \\return               IPSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_IPSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, ipsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Get APSR Register\r\n  \\details Returns the content of the APSR Register.\r\n  \\return               APSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_APSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, apsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Get xPSR Register\r\n  \\details Returns the content of the xPSR Register.\r\n\r\n    \\return               xPSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_xPSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, xpsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Get Process Stack Pointer\r\n  \\details Returns the current value of the Process Stack Pointer (PSP).\r\n  \\return               PSP Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_PSP(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, psp\\n\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Set Process Stack Pointer\r\n  \\details Assigns the given value to the Process Stack Pointer (PSP).\r\n  \\param [in]    topOfProcStack  Process Stack Pointer value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) { __ASM volatile(\"MSR psp, %0\\n\" : : \"r\"(topOfProcStack) : \"sp\"); }\r\n\r\n/**\r\n  \\brief   Get Main Stack Pointer\r\n  \\details Returns the current value of the Main Stack Pointer (MSP).\r\n  \\return               MSP Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_MSP(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, msp\\n\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Set Main Stack Pointer\r\n  \\details Assigns the given value to the Main Stack Pointer (MSP).\r\n\r\n    \\param [in]    topOfMainStack  Main Stack Pointer value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) { __ASM volatile(\"MSR msp, %0\\n\" : : \"r\"(topOfMainStack) : \"sp\"); }\r\n\r\n/**\r\n  \\brief   Get Priority Mask\r\n  \\details Returns the current state of the priority mask bit from the Priority Mask Register.\r\n  \\return               Priority Mask value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_PRIMASK(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, primask\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Set Priority Mask\r\n  \\details Assigns the given value to the Priority Mask Register.\r\n  \\param [in]    priMask  Priority Mask\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask) { __ASM volatile(\"MSR primask, %0\" : : \"r\"(priMask) : \"memory\"); }\r\n\r\n#if (__CORTEX_M >= 0x03U)\r\n\r\n/**\r\n  \\brief   Enable FIQ\r\n  \\details Enables FIQ interrupts by clearing the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __enable_fault_irq(void) { __ASM volatile(\"cpsie f\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Disable FIQ\r\n  \\details Disables FIQ interrupts by setting the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __disable_fault_irq(void) { __ASM volatile(\"cpsid f\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Get Base Priority\r\n  \\details Returns the current value of the Base Priority register.\r\n  \\return               Base Priority register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_BASEPRI(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, basepri\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Set Base Priority\r\n  \\details Assigns the given value to the Base Priority register.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_BASEPRI(uint32_t value) { __ASM volatile(\"MSR basepri, %0\" : : \"r\"(value) : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Set Base Priority with condition\r\n  \\details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled,\r\n           or the new value increases the BASEPRI priority level.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_BASEPRI_MAX(uint32_t value) { __ASM volatile(\"MSR basepri_max, %0\" : : \"r\"(value) : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Get Fault Mask\r\n  \\details Returns the current value of the Fault Mask register.\r\n  \\return               Fault Mask register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_FAULTMASK(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, faultmask\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Set Fault Mask\r\n  \\details Assigns the given value to the Fault Mask register.\r\n  \\param [in]    faultMask  Fault Mask value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) { __ASM volatile(\"MSR faultmask, %0\" : : \"r\"(faultMask) : \"memory\"); }\r\n\r\n#endif /* (__CORTEX_M >= 0x03U) */\r\n\r\n#if (__CORTEX_M == 0x04U) || (__CORTEX_M == 0x07U)\r\n\r\n/**\r\n  \\brief   Get FPSCR\r\n  \\details Returns the current value of the Floating Point Status/Control register.\r\n  \\return               Floating Point Status/Control register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_FPSCR(void) {\r\n#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)\r\n  uint32_t result;\r\n\r\n  /* Empty asm statement works as a scheduling barrier */\r\n  __ASM volatile(\"\");\r\n  __ASM volatile(\"VMRS %0, fpscr\" : \"=r\"(result));\r\n  __ASM volatile(\"\");\r\n  return (result);\r\n#else\r\n  return (0);\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Set FPSCR\r\n  \\details Assigns the given value to the Floating Point Status/Control register.\r\n  \\param [in]    fpscr  Floating Point Status/Control value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr) {\r\n#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)\r\n  /* Empty asm statement works as a scheduling barrier */\r\n  __ASM volatile(\"\");\r\n  __ASM volatile(\"VMSR fpscr, %0\" : : \"r\"(fpscr) : \"vfpcc\");\r\n  __ASM volatile(\"\");\r\n#endif\r\n}\r\n\r\n#endif /* (__CORTEX_M == 0x04U) || (__CORTEX_M == 0x07U) */\r\n\r\n/*@} end of CMSIS_Core_RegAccFunctions */\r\n\r\n/* ##########################  Core Instruction Access  ######################### */\r\n/** \\defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface\r\n  Access to dedicated instructions\r\n  @{\r\n*/\r\n\r\n/* Define macros for porting to both thumb1 and thumb2.\r\n * For thumb1, use low register (r0-r7), specified by constraint \"l\"\r\n * Otherwise, use general registers, specified by constraint \"r\" */\r\n#if defined(__thumb__) && !defined(__thumb2__)\r\n#define __CMSIS_GCC_OUT_REG(r) \"=l\"(r)\r\n#define __CMSIS_GCC_USE_REG(r) \"l\"(r)\r\n#else\r\n#define __CMSIS_GCC_OUT_REG(r) \"=r\"(r)\r\n#define __CMSIS_GCC_USE_REG(r) \"r\"(r)\r\n#endif\r\n\r\n/**\r\n  \\brief   No Operation\r\n  \\details No Operation does nothing. This instruction can be used for code alignment purposes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __NOP(void) { __ASM volatile(\"nop\"); }\r\n\r\n/**\r\n  \\brief   Wait For Interrupt\r\n  \\details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __WFI(void) { __ASM volatile(\"wfi\"); }\r\n\r\n/**\r\n  \\brief   Wait For Event\r\n  \\details Wait For Event is a hint instruction that permits the processor to enter\r\n    a low-power state until one of a number of events occurs.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __WFE(void) { __ASM volatile(\"wfe\"); }\r\n\r\n/**\r\n  \\brief   Send Event\r\n  \\details Send Event is a hint instruction. It causes an event to be signaled to the CPU.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __SEV(void) { __ASM volatile(\"sev\"); }\r\n\r\n/**\r\n  \\brief   Instruction Synchronization Barrier\r\n  \\details Instruction Synchronization Barrier flushes the pipeline in the processor,\r\n           so that all instructions following the ISB are fetched from cache or memory,\r\n           after the instruction has been completed.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __ISB(void) { __ASM volatile(\"isb 0xF\" ::: \"memory\"); }\r\n\r\n/**\r\n  \\brief   Data Synchronization Barrier\r\n  \\details Acts as a special kind of Data Memory Barrier.\r\n           It completes when all explicit memory accesses before this instruction complete.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __DSB(void) { __ASM volatile(\"dsb 0xF\" ::: \"memory\"); }\r\n\r\n/**\r\n  \\brief   Data Memory Barrier\r\n  \\details Ensures the apparent order of the explicit memory operations before\r\n           and after the instruction, without ensuring their completion.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __DMB(void) { __ASM volatile(\"dmb 0xF\" ::: \"memory\"); }\r\n\r\n/**\r\n  \\brief   Reverse byte order (32 bit)\r\n  \\details Reverses the byte order in integer value.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __REV(uint32_t value) {\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)\r\n  return __builtin_bswap32(value);\r\n#else\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"rev %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return (result);\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Reverse byte order (16 bit)\r\n  \\details Reverses the byte order in two unsigned short values.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __REV16(uint32_t value) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"rev16 %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Reverse byte order in signed short value\r\n  \\details Reverses the byte order in a signed short value with sign extension to integer.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE int32_t __REVSH(int32_t value) {\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)\r\n  return (short)__builtin_bswap16(value);\r\n#else\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"revsh %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return (result);\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Rotate Right in unsigned value (32 bit)\r\n  \\details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.\r\n  \\param [in]    value  Value to rotate\r\n  \\param [in]    value  Number of Bits to rotate\r\n  \\return               Rotated value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2) { return (op1 >> op2) | (op1 << (32U - op2)); }\r\n\r\n/**\r\n  \\brief   Breakpoint\r\n  \\details Causes the processor to enter Debug state.\r\n           Debug tools can use this to investigate system state when the instruction at a particular address is reached.\r\n  \\param [in]    value  is ignored by the processor.\r\n                 If required, a debugger can use it to store additional information about the breakpoint.\r\n */\r\n#define __BKPT(value) __ASM volatile(\"bkpt \" #value)\r\n\r\n/**\r\n  \\brief   Reverse bit order of value\r\n  \\details Reverses the bit order of the given value.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) {\r\n  uint32_t result;\r\n\r\n#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U)\r\n  __ASM volatile(\"rbit %0, %1\" : \"=r\"(result) : \"r\"(value));\r\n#else\r\n  int32_t s = 4 /*sizeof(v)*/ * 8 - 1; /* extra shift needed at end */\r\n\r\n  result = value; /* r will be reversed bits of v; first get LSB of v */\r\n  for (value >>= 1U; value; value >>= 1U) {\r\n    result <<= 1U;\r\n    result |= value & 1U;\r\n    s--;\r\n  }\r\n  result <<= s; /* shift when v's highest bits are zero */\r\n#endif\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Count leading zeros\r\n  \\details Counts the number of leading zeros of a data value.\r\n  \\param [in]  value  Value to count the leading zeros\r\n  \\return             number of leading zeros in value\r\n */\r\n#define __CLZ __builtin_clz\r\n\r\n#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U)\r\n\r\n/**\r\n  \\brief   LDR Exclusive (8 bit)\r\n  \\details Executes a exclusive LDR instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint8_t __LDREXB(volatile uint8_t *addr) {\r\n  uint32_t result;\r\n\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)\r\n  __ASM volatile(\"ldrexb %0, %1\" : \"=r\"(result) : \"Q\"(*addr));\r\n#else\r\n  /* Prior to GCC 4.8, \"Q\" will be expanded to [rx, #0] which is not\r\n     accepted by assembler. So has to use following less efficient pattern.\r\n  */\r\n  __ASM volatile(\"ldrexb %0, [%1]\" : \"=r\"(result) : \"r\"(addr) : \"memory\");\r\n#endif\r\n  return ((uint8_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDR Exclusive (16 bit)\r\n  \\details Executes a exclusive LDR instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint16_t __LDREXH(volatile uint16_t *addr) {\r\n  uint32_t result;\r\n\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)\r\n  __ASM volatile(\"ldrexh %0, %1\" : \"=r\"(result) : \"Q\"(*addr));\r\n#else\r\n  /* Prior to GCC 4.8, \"Q\" will be expanded to [rx, #0] which is not\r\n     accepted by assembler. So has to use following less efficient pattern.\r\n  */\r\n  __ASM volatile(\"ldrexh %0, [%1]\" : \"=r\"(result) : \"r\"(addr) : \"memory\");\r\n#endif\r\n  return ((uint16_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDR Exclusive (32 bit)\r\n  \\details Executes a exclusive LDR instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __LDREXW(volatile uint32_t *addr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldrex %0, %1\" : \"=r\"(result) : \"Q\"(*addr));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   STR Exclusive (8 bit)\r\n  \\details Executes a exclusive STR instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"strexb %0, %2, %1\" : \"=&r\"(result), \"=Q\"(*addr) : \"r\"((uint32_t)value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   STR Exclusive (16 bit)\r\n  \\details Executes a exclusive STR instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"strexh %0, %2, %1\" : \"=&r\"(result), \"=Q\"(*addr) : \"r\"((uint32_t)value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   STR Exclusive (32 bit)\r\n  \\details Executes a exclusive STR instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"strex %0, %2, %1\" : \"=&r\"(result), \"=Q\"(*addr) : \"r\"(value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Remove the exclusive lock\r\n  \\details Removes the exclusive lock which is created by LDREX.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __CLREX(void) { __ASM volatile(\"clrex\" ::: \"memory\"); }\r\n\r\n/**\r\n  \\brief   Signed Saturate\r\n  \\details Saturates a signed value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (1..32)\r\n  \\return             Saturated value\r\n */\r\n#define __SSAT(ARG1, ARG2)                                           \\\r\n  ({                                                                 \\\r\n    uint32_t __RES, __ARG1 = (ARG1);                                 \\\r\n    __ASM(\"ssat %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                           \\\r\n  })\r\n\r\n/**\r\n  \\brief   Unsigned Saturate\r\n  \\details Saturates an unsigned value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (0..31)\r\n  \\return             Saturated value\r\n */\r\n#define __USAT(ARG1, ARG2)                                           \\\r\n  ({                                                                 \\\r\n    uint32_t __RES, __ARG1 = (ARG1);                                 \\\r\n    __ASM(\"usat %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                           \\\r\n  })\r\n\r\n/**\r\n  \\brief   Rotate Right with Extend (32 bit)\r\n  \\details Moves each bit of a bitstring right by one bit.\r\n           The carry input is shifted in at the left end of the bitstring.\r\n  \\param [in]    value  Value to rotate\r\n  \\return               Rotated value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __RRX(uint32_t value) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"rrx %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint8_t __LDRBT(volatile uint8_t *addr) {\r\n  uint32_t result;\r\n\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)\r\n  __ASM volatile(\"ldrbt %0, %1\" : \"=r\"(result) : \"Q\"(*addr));\r\n#else\r\n  /* Prior to GCC 4.8, \"Q\" will be expanded to [rx, #0] which is not\r\n     accepted by assembler. So has to use following less efficient pattern.\r\n  */\r\n  __ASM volatile(\"ldrbt %0, [%1]\" : \"=r\"(result) : \"r\"(addr) : \"memory\");\r\n#endif\r\n  return ((uint8_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint16_t __LDRHT(volatile uint16_t *addr) {\r\n  uint32_t result;\r\n\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)\r\n  __ASM volatile(\"ldrht %0, %1\" : \"=r\"(result) : \"Q\"(*addr));\r\n#else\r\n  /* Prior to GCC 4.8, \"Q\" will be expanded to [rx, #0] which is not\r\n     accepted by assembler. So has to use following less efficient pattern.\r\n  */\r\n  __ASM volatile(\"ldrht %0, [%1]\" : \"=r\"(result) : \"r\"(addr) : \"memory\");\r\n#endif\r\n  return ((uint16_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __LDRT(volatile uint32_t *addr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldrt %0, %1\" : \"=r\"(result) : \"Q\"(*addr));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STRBT(uint8_t value, volatile uint8_t *addr) { __ASM volatile(\"strbt %1, %0\" : \"=Q\"(*addr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STRHT(uint16_t value, volatile uint16_t *addr) { __ASM volatile(\"strht %1, %0\" : \"=Q\"(*addr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STRT(uint32_t value, volatile uint32_t *addr) { __ASM volatile(\"strt %1, %0\" : \"=Q\"(*addr) : \"r\"(value)); }\r\n\r\n#endif /* (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U) */\r\n\r\n/*@}*/ /* end of group CMSIS_Core_InstructionInterface */\r\n\r\n/* ###################  Compiler specific Intrinsics  ########################### */\r\n/** \\defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics\r\n  Access to dedicated SIMD instructions\r\n  @{\r\n*/\r\n\r\n#if (__CORTEX_M >= 0x04U) /* only for Cortex-M4 and above */\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usad8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usada8 %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n#define __SSAT16(ARG1, ARG2)                                           \\\r\n  ({                                                                   \\\r\n    int32_t __RES, __ARG1 = (ARG1);                                    \\\r\n    __ASM(\"ssat16 %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                             \\\r\n  })\r\n\r\n#define __USAT16(ARG1, ARG2)                                           \\\r\n  ({                                                                   \\\r\n    uint32_t __RES, __ARG1 = (ARG1);                                   \\\r\n    __ASM(\"usat16 %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                             \\\r\n  })\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UXTB16(uint32_t op1) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uxtb16 %0, %1\" : \"=r\"(result) : \"r\"(op1));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uxtab16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SXTB16(uint32_t op1) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sxtb16 %0, %1\" : \"=r\"(result) : \"r\"(op1));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sxtab16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUAD(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smuad %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUADX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smuadx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLAD(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlad %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLADX(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smladx %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLALD(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlald %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlald %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLALDX(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlaldx %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlaldx %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUSD(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smusd %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUSDX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smusdx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLSD(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlsd %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLSDX(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlsdx %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLSLD(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlsld %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlsld %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLSLDX(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlsldx %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlsldx %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SEL(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sel %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE int32_t __QADD(int32_t op1, int32_t op2) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"qadd %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE int32_t __QSUB(int32_t op1, int32_t op2) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"qsub %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n#define __PKHBT(ARG1, ARG2, ARG3)                                                          \\\r\n  ({                                                                                       \\\r\n    uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2);                                      \\\r\n    __ASM(\"pkhbt %0, %1, %2, lsl %3\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2), \"I\"(ARG3)); \\\r\n    __RES;                                                                                 \\\r\n  })\r\n\r\n#define __PKHTB(ARG1, ARG2, ARG3)                                                            \\\r\n  ({                                                                                         \\\r\n    uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2);                                        \\\r\n    if (ARG3 == 0)                                                                           \\\r\n      __ASM(\"pkhtb %0, %1, %2\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2));                    \\\r\n    else                                                                                     \\\r\n      __ASM(\"pkhtb %0, %1, %2, asr %3\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2), \"I\"(ARG3)); \\\r\n    __RES;                                                                                   \\\r\n  })\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMMLA(int32_t op1, int32_t op2, int32_t op3) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"smmla %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n#endif /* (__CORTEX_M >= 0x04) */\r\n/*@} end of group CMSIS_SIMD_intrinsics */\r\n\r\n#if defined(__GNUC__)\r\n#pragma GCC diagnostic pop\r\n#endif\r\n\r\n#endif /* __CMSIS_GCC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Include/core_cm0.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cm0.h\r\n                                                                              * @brief    CMSIS Cortex-M0 Core Peripheral Access Layer Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CM0_H_GENERIC\r\n#define __CORE_CM0_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup Cortex_M0\r\n  @{\r\n */\r\n\r\n/*  CMSIS CM0 definitions */\r\n#define __CM0_CMSIS_VERSION_MAIN (0x04U)                                                       /*!< [31:16] CMSIS HAL main version */\r\n#define __CM0_CMSIS_VERSION_SUB  (0x1EU)                                                       /*!< [15:0]  CMSIS HAL sub version */\r\n#define __CM0_CMSIS_VERSION      ((__CM0_CMSIS_VERSION_MAIN << 16U) | __CM0_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */\r\n\r\n#define __CORTEX_M (0x00U) /*!< Cortex-M Core */\r\n\r\n#if defined(__CC_ARM)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__GNUC__)\r\n#define __ASM           __asm  /*!< asm keyword for GNU Compiler */\r\n#define __INLINE        inline /*!< inline keyword for GNU Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__ICCARM__)\r\n#define __ASM           __asm  /*!< asm keyword for IAR Compiler */\r\n#define __INLINE        inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TMS470__)\r\n#define __ASM           __asm /*!< asm keyword for TI CCS Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TASKING__)\r\n#define __ASM           __asm  /*!< asm keyword for TASKING Compiler */\r\n#define __INLINE        inline /*!< inline keyword for TASKING Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__CSMC__)\r\n#define __packed\r\n#define __ASM           _asm   /*!< asm keyword for COSMIC Compiler */\r\n#define __INLINE        inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */\r\n#define __STATIC_INLINE static inline\r\n\r\n#else\r\n#error Unknown compiler\r\n#endif\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    This core does not support an FPU at all\r\n*/\r\n#define __FPU_USED 0U\r\n\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TMS470__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"core_cmFunc.h\"  /* Core Function Access */\r\n#include \"core_cmInstr.h\" /* Core Instruction Access */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM0_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_CM0_H_DEPENDANT\r\n#define __CORE_CM0_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __CM0_REV\r\n#define __CM0_REV 0x0000U\r\n#warning \"__CM0_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 2U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group Cortex_M0 */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 28; /*!< bit:  0..27  Reserved */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 15; /*!< bit:  9..23  Reserved */\r\n    uint32_t T : 1;           /*!< bit:     24  Thumb bit        (read 0) */\r\n    uint32_t _reserved1 : 3;  /*!< bit: 25..27  Reserved */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 1;  /*!< bit:      0  Reserved */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t _reserved1 : 30; /*!< bit:  2..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[31U];\r\n  __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[31U];\r\n  __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[31U];\r\n  __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[31U];\r\n  uint32_t       RESERVED4[64U];\r\n  __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */\r\n} NVIC_Type;\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID; /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;  /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n  uint32_t       RESERVED0;\r\n  __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;   /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;   /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  uint32_t       RESERVED1;\r\n  __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */\r\n  __IOM uint32_t SHCSR;   /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor.\r\n            Therefore they are not covered by the Cortex-M0 header file.\r\n  @{\r\n */\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) ((value << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) ((value & field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of Cortex-M0 Hardware */\r\n#define SCS_BASE     (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE    (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE     (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCB     ((SCB_Type *)SCB_BASE)         /*!< SCB configuration struct */\r\n#define SysTick ((SysTick_Type *)SysTick_BASE) /*!< SysTick configuration struct */\r\n#define NVIC    ((NVIC_Type *)NVIC_BASE)       /*!< NVIC configuration struct */\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n/* Interrupt Priorities are WORD accessible only under ARMv6M                   */\r\n/* The following MACROS handle generation of the register offset and byte masks */\r\n#define _BIT_SHIFT(IRQn) (((((uint32_t)(int32_t)(IRQn))) & 0x03UL) * 8UL)\r\n#define _SHP_IDX(IRQn)   ((((((uint32_t)(int32_t)(IRQn)) & 0x0FUL) - 8UL) >> 2UL))\r\n#define _IP_IDX(IRQn)    ((((uint32_t)(int32_t)(IRQn)) >> 2UL))\r\n\r\n/**\r\n  \\brief   Enable External Interrupt\r\n  \\details Enables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Disable External Interrupt\r\n  \\details Disables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) { NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) { return ((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); }\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  Interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) { NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) { NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of an interrupt.\r\n  \\note    The priority cannot be set for every core interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) < 0) {\r\n    SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));\r\n  } else {\r\n    NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of an interrupt.\r\n           The interrupt number can be positive to specify an external (device specific) interrupt,\r\n           or negative to specify an internal (core) interrupt.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) < 0) {\r\n    return ((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn)) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return ((uint32_t)(((NVIC->IP[_IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn)) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__STATIC_INLINE void NVIC_SystemReset(void) {\r\n  __DSB(); /* Ensure all outstanding memory accesses included\r\n              buffered write are completed before reset */\r\n  SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | SCB_AIRCR_SYSRESETREQ_Msk);\r\n  __DSB(); /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM0_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Include/core_cm0plus.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cm0plus.h\r\n                                                                              * @brief    CMSIS Cortex-M0+ Core Peripheral Access Layer Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CM0PLUS_H_GENERIC\r\n#define __CORE_CM0PLUS_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup Cortex-M0+\r\n  @{\r\n */\r\n\r\n/*  CMSIS CM0+ definitions */\r\n#define __CM0PLUS_CMSIS_VERSION_MAIN (0x04U)                                                               /*!< [31:16] CMSIS HAL main version */\r\n#define __CM0PLUS_CMSIS_VERSION_SUB  (0x1EU)                                                               /*!< [15:0]  CMSIS HAL sub version */\r\n#define __CM0PLUS_CMSIS_VERSION      ((__CM0PLUS_CMSIS_VERSION_MAIN << 16U) | __CM0PLUS_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */\r\n\r\n#define __CORTEX_M (0x00U) /*!< Cortex-M Core */\r\n\r\n#if defined(__CC_ARM)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__GNUC__)\r\n#define __ASM           __asm  /*!< asm keyword for GNU Compiler */\r\n#define __INLINE        inline /*!< inline keyword for GNU Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__ICCARM__)\r\n#define __ASM           __asm  /*!< asm keyword for IAR Compiler */\r\n#define __INLINE        inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TMS470__)\r\n#define __ASM           __asm /*!< asm keyword for TI CCS Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TASKING__)\r\n#define __ASM           __asm  /*!< asm keyword for TASKING Compiler */\r\n#define __INLINE        inline /*!< inline keyword for TASKING Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__CSMC__)\r\n#define __packed\r\n#define __ASM           _asm   /*!< asm keyword for COSMIC Compiler */\r\n#define __INLINE        inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */\r\n#define __STATIC_INLINE static inline\r\n\r\n#else\r\n#error Unknown compiler\r\n#endif\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    This core does not support an FPU at all\r\n*/\r\n#define __FPU_USED 0U\r\n\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TMS470__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"core_cmFunc.h\"  /* Core Function Access */\r\n#include \"core_cmInstr.h\" /* Core Instruction Access */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM0PLUS_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_CM0PLUS_H_DEPENDANT\r\n#define __CORE_CM0PLUS_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __CM0PLUS_REV\r\n#define __CM0PLUS_REV 0x0000U\r\n#warning \"__CM0PLUS_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __MPU_PRESENT\r\n#define __MPU_PRESENT 0U\r\n#warning \"__MPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __VTOR_PRESENT\r\n#define __VTOR_PRESENT 0U\r\n#warning \"__VTOR_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 2U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group Cortex-M0+ */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n  - Core MPU Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 28; /*!< bit:  0..27  Reserved */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 15; /*!< bit:  9..23  Reserved */\r\n    uint32_t T : 1;           /*!< bit:     24  Thumb bit        (read 0) */\r\n    uint32_t _reserved1 : 3;  /*!< bit: 25..27  Reserved */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t nPRIV : 1;       /*!< bit:      0  Execution privilege in Thread mode */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t _reserved1 : 30; /*!< bit:  2..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n#define CONTROL_nPRIV_Pos 0U                             /*!< CONTROL: nPRIV Position */\r\n#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[31U];\r\n  __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[31U];\r\n  __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[31U];\r\n  __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[31U];\r\n  uint32_t       RESERVED4[64U];\r\n  __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */\r\n} NVIC_Type;\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID; /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;  /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n#if (__VTOR_PRESENT == 1U)\r\n  __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */\r\n#else\r\n  uint32_t RESERVED0;\r\n#endif\r\n  __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;   /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;   /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  uint32_t       RESERVED1;\r\n  __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */\r\n  __IOM uint32_t SHCSR;   /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n#if (__VTOR_PRESENT == 1U)\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_VTOR_TBLOFF_Pos 8U                                  /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0xFFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n#endif\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_MPU     Memory Protection Unit (MPU)\r\n  \\brief    Type definitions for the Memory Protection Unit (MPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Memory Protection Unit (MPU).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  TYPE; /*!< Offset: 0x000 (R/ )  MPU Type Register */\r\n  __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W)  MPU Control Register */\r\n  __IOM uint32_t RNR;  /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */\r\n  __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */\r\n  __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */\r\n} MPU_Type;\r\n\r\n/* MPU Type Register Definitions */\r\n#define MPU_TYPE_IREGION_Pos 16U                              /*!< MPU TYPE: IREGION Position */\r\n#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */\r\n\r\n#define MPU_TYPE_DREGION_Pos 8U                               /*!< MPU TYPE: DREGION Position */\r\n#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */\r\n\r\n#define MPU_TYPE_SEPARATE_Pos 0U                                 /*!< MPU TYPE: SEPARATE Position */\r\n#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */\r\n\r\n/* MPU Control Register Definitions */\r\n#define MPU_CTRL_PRIVDEFENA_Pos 2U                               /*!< MPU CTRL: PRIVDEFENA Position */\r\n#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */\r\n\r\n#define MPU_CTRL_HFNMIENA_Pos 1U                             /*!< MPU CTRL: HFNMIENA Position */\r\n#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */\r\n\r\n#define MPU_CTRL_ENABLE_Pos 0U                               /*!< MPU CTRL: ENABLE Position */\r\n#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */\r\n\r\n/* MPU Region Number Register Definitions */\r\n#define MPU_RNR_REGION_Pos 0U                                 /*!< MPU RNR: REGION Position */\r\n#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */\r\n\r\n/* MPU Region Base Address Register Definitions */\r\n#define MPU_RBAR_ADDR_Pos 8U                                /*!< MPU RBAR: ADDR Position */\r\n#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */\r\n\r\n#define MPU_RBAR_VALID_Pos 4U                          /*!< MPU RBAR: VALID Position */\r\n#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */\r\n\r\n#define MPU_RBAR_REGION_Pos 0U                                 /*!< MPU RBAR: REGION Position */\r\n#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */\r\n\r\n/* MPU Region Attribute and Size Register Definitions */\r\n#define MPU_RASR_ATTRS_Pos 16U                              /*!< MPU RASR: MPU Region Attribute field Position */\r\n#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */\r\n\r\n#define MPU_RASR_XN_Pos 28U                      /*!< MPU RASR: ATTRS.XN Position */\r\n#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */\r\n\r\n#define MPU_RASR_AP_Pos 24U                        /*!< MPU RASR: ATTRS.AP Position */\r\n#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */\r\n\r\n#define MPU_RASR_TEX_Pos 19U                         /*!< MPU RASR: ATTRS.TEX Position */\r\n#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */\r\n\r\n#define MPU_RASR_S_Pos 18U                     /*!< MPU RASR: ATTRS.S Position */\r\n#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */\r\n\r\n#define MPU_RASR_C_Pos 17U                     /*!< MPU RASR: ATTRS.C Position */\r\n#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */\r\n\r\n#define MPU_RASR_B_Pos 16U                     /*!< MPU RASR: ATTRS.B Position */\r\n#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */\r\n\r\n#define MPU_RASR_SRD_Pos 8U                           /*!< MPU RASR: Sub-Region Disable Position */\r\n#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */\r\n\r\n#define MPU_RASR_SIZE_Pos 1U                            /*!< MPU RASR: Region Size Field Position */\r\n#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */\r\n\r\n#define MPU_RASR_ENABLE_Pos 0U                               /*!< MPU RASR: Region enable bit Position */\r\n#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */\r\n\r\n/*@} end of group CMSIS_MPU */\r\n#endif\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    Cortex-M0+ Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor.\r\n            Therefore they are not covered by the Cortex-M0+ header file.\r\n  @{\r\n */\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) ((value << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) ((value & field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of Cortex-M0+ Hardware */\r\n#define SCS_BASE     (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE    (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE     (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCB     ((SCB_Type *)SCB_BASE)         /*!< SCB configuration struct */\r\n#define SysTick ((SysTick_Type *)SysTick_BASE) /*!< SysTick configuration struct */\r\n#define NVIC    ((NVIC_Type *)NVIC_BASE)       /*!< NVIC configuration struct */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n#define MPU_BASE (SCS_BASE + 0x0D90UL)  /*!< Memory Protection Unit */\r\n#define MPU      ((MPU_Type *)MPU_BASE) /*!< Memory Protection Unit */\r\n#endif\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n/* Interrupt Priorities are WORD accessible only under ARMv6M                   */\r\n/* The following MACROS handle generation of the register offset and byte masks */\r\n#define _BIT_SHIFT(IRQn) (((((uint32_t)(int32_t)(IRQn))) & 0x03UL) * 8UL)\r\n#define _SHP_IDX(IRQn)   ((((((uint32_t)(int32_t)(IRQn)) & 0x0FUL) - 8UL) >> 2UL))\r\n#define _IP_IDX(IRQn)    ((((uint32_t)(int32_t)(IRQn)) >> 2UL))\r\n\r\n/**\r\n  \\brief   Enable External Interrupt\r\n  \\details Enables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Disable External Interrupt\r\n  \\details Disables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) { NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) { return ((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); }\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  Interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) { NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) { NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of an interrupt.\r\n  \\note    The priority cannot be set for every core interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) < 0) {\r\n    SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));\r\n  } else {\r\n    NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of an interrupt.\r\n           The interrupt number can be positive to specify an external (device specific) interrupt,\r\n           or negative to specify an internal (core) interrupt.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) < 0) {\r\n    return ((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn)) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return ((uint32_t)(((NVIC->IP[_IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn)) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__STATIC_INLINE void NVIC_SystemReset(void) {\r\n  __DSB(); /* Ensure all outstanding memory accesses included\r\n              buffered write are completed before reset */\r\n  SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | SCB_AIRCR_SYSRESETREQ_Msk);\r\n  __DSB(); /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM0PLUS_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Include/core_cm3.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cm3.h\r\n                                                                              * @brief    CMSIS Cortex-M3 Core Peripheral Access Layer Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CM3_H_GENERIC\r\n#define __CORE_CM3_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup Cortex_M3\r\n  @{\r\n */\r\n\r\n/*  CMSIS CM3 definitions */\r\n#define __CM3_CMSIS_VERSION_MAIN (0x04U)                                                       /*!< [31:16] CMSIS HAL main version */\r\n#define __CM3_CMSIS_VERSION_SUB  (0x1EU)                                                       /*!< [15:0]  CMSIS HAL sub version */\r\n#define __CM3_CMSIS_VERSION      ((__CM3_CMSIS_VERSION_MAIN << 16U) | __CM3_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */\r\n\r\n#define __CORTEX_M (0x03U) /*!< Cortex-M Core */\r\n\r\n#if defined(__CC_ARM)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__GNUC__)\r\n#define __ASM           __asm  /*!< asm keyword for GNU Compiler */\r\n#define __INLINE        inline /*!< inline keyword for GNU Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__ICCARM__)\r\n#define __ASM           __asm  /*!< asm keyword for IAR Compiler */\r\n#define __INLINE        inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TMS470__)\r\n#define __ASM           __asm /*!< asm keyword for TI CCS Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TASKING__)\r\n#define __ASM           __asm  /*!< asm keyword for TASKING Compiler */\r\n#define __INLINE        inline /*!< inline keyword for TASKING Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__CSMC__)\r\n#define __packed\r\n#define __ASM           _asm   /*!< asm keyword for COSMIC Compiler */\r\n#define __INLINE        inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */\r\n#define __STATIC_INLINE static inline\r\n\r\n#else\r\n#error Unknown compiler\r\n#endif\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    This core does not support an FPU at all\r\n*/\r\n#define __FPU_USED 0U\r\n\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TMS470__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"core_cmFunc.h\"  /* Core Function Access */\r\n#include \"core_cmInstr.h\" /* Core Instruction Access */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM3_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_CM3_H_DEPENDANT\r\n#define __CORE_CM3_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __CM3_REV\r\n#define __CM3_REV 0x0200U\r\n#warning \"__CM3_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __MPU_PRESENT\r\n#define __MPU_PRESENT 0U\r\n#warning \"__MPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 4U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group Cortex_M3 */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n  - Core Debug Register\r\n  - Core MPU Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 27; /*!< bit:  0..26  Reserved */\r\n    uint32_t Q : 1;           /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n#define APSR_Q_Pos 27U                 /*!< APSR: Q Position */\r\n#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 15; /*!< bit:  9..23  Reserved */\r\n    uint32_t T : 1;           /*!< bit:     24  Thumb bit        (read 0) */\r\n    uint32_t IT : 2;          /*!< bit: 25..26  saved IT state   (read 0) */\r\n    uint32_t Q : 1;           /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_Q_Pos 27U                 /*!< xPSR: Q Position */\r\n#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */\r\n\r\n#define xPSR_IT_Pos 25U                  /*!< xPSR: IT Position */\r\n#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t nPRIV : 1;       /*!< bit:      0  Execution privilege in Thread mode */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t _reserved1 : 30; /*!< bit:  2..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n#define CONTROL_nPRIV_Pos 0U                             /*!< CONTROL: nPRIV Position */\r\n#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[24U];\r\n  __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[24U];\r\n  __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[24U];\r\n  __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[24U];\r\n  __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */\r\n  uint32_t       RESERVED4[56U];\r\n  __IOM uint8_t  IP[240U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */\r\n  uint32_t       RESERVED5[644U];\r\n  __OM uint32_t  STIR; /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */\r\n} NVIC_Type;\r\n\r\n/* Software Triggered Interrupt Register Definitions */\r\n#define NVIC_STIR_INTID_Pos 0U                                   /*!< STIR: INTLINESNUM Position */\r\n#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID;    /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;     /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n  __IOM uint32_t VTOR;     /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */\r\n  __IOM uint32_t AIRCR;    /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;      /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;      /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  __IOM uint8_t  SHP[12U]; /*!< Offset: 0x018 (R/W)  System Handlers Priority Registers (4-7, 8-11, 12-15) */\r\n  __IOM uint32_t SHCSR;    /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n  __IOM uint32_t CFSR;     /*!< Offset: 0x028 (R/W)  Configurable Fault Status Register */\r\n  __IOM uint32_t HFSR;     /*!< Offset: 0x02C (R/W)  HardFault Status Register */\r\n  __IOM uint32_t DFSR;     /*!< Offset: 0x030 (R/W)  Debug Fault Status Register */\r\n  __IOM uint32_t MMFAR;    /*!< Offset: 0x034 (R/W)  MemManage Fault Address Register */\r\n  __IOM uint32_t BFAR;     /*!< Offset: 0x038 (R/W)  BusFault Address Register */\r\n  __IOM uint32_t AFSR;     /*!< Offset: 0x03C (R/W)  Auxiliary Fault Status Register */\r\n  __IM uint32_t  PFR[2U];  /*!< Offset: 0x040 (R/ )  Processor Feature Register */\r\n  __IM uint32_t  DFR;      /*!< Offset: 0x048 (R/ )  Debug Feature Register */\r\n  __IM uint32_t  ADR;      /*!< Offset: 0x04C (R/ )  Auxiliary Feature Register */\r\n  __IM uint32_t  MMFR[4U]; /*!< Offset: 0x050 (R/ )  Memory Model Feature Register */\r\n  __IM uint32_t  ISAR[5U]; /*!< Offset: 0x060 (R/ )  Instruction Set Attributes Register */\r\n  uint32_t       RESERVED0[5U];\r\n  __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W)  Coprocessor Access Control Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_RETTOBASE_Pos 11U                             /*!< SCB ICSR: RETTOBASE Position */\r\n#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n/* SCB Vector Table Offset Register Definitions */\r\n#if (__CM3_REV < 0x0201U)                                  /* core r2p1 */\r\n#define SCB_VTOR_TBLBASE_Pos 29U                           /*!< SCB VTOR: TBLBASE Position */\r\n#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */\r\n\r\n#define SCB_VTOR_TBLOFF_Pos 7U                                  /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n#else\r\n#define SCB_VTOR_TBLOFF_Pos 7U                                   /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n#endif\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_PRIGROUP_Pos 8U                              /*!< SCB AIRCR: PRIGROUP Position */\r\n#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n#define SCB_AIRCR_VECTRESET_Pos 0U                                   /*!< SCB AIRCR: VECTRESET Position */\r\n#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_BFHFNMIGN_Pos 8U                             /*!< SCB CCR: BFHFNMIGN Position */\r\n#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */\r\n\r\n#define SCB_CCR_DIV_0_TRP_Pos 4U                             /*!< SCB CCR: DIV_0_TRP Position */\r\n#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n#define SCB_CCR_USERSETMPEND_Pos 1U                                /*!< SCB CCR: USERSETMPEND Position */\r\n#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */\r\n\r\n#define SCB_CCR_NONBASETHRDENA_Pos 0U                                      /*!< SCB CCR: NONBASETHRDENA Position */\r\n#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_USGFAULTENA_Pos 18U                                /*!< SCB SHCSR: USGFAULTENA Position */\r\n#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTENA_Pos 17U                                /*!< SCB SHCSR: BUSFAULTENA Position */\r\n#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTENA_Pos 16U                                /*!< SCB SHCSR: MEMFAULTENA Position */\r\n#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U                                   /*!< SCB SHCSR: BUSFAULTPENDED Position */\r\n#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U                                   /*!< SCB SHCSR: MEMFAULTPENDED Position */\r\n#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTPENDED_Pos 12U                                   /*!< SCB SHCSR: USGFAULTPENDED Position */\r\n#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_SYSTICKACT_Pos 11U                               /*!< SCB SHCSR: SYSTICKACT Position */\r\n#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */\r\n\r\n#define SCB_SHCSR_PENDSVACT_Pos 10U                              /*!< SCB SHCSR: PENDSVACT Position */\r\n#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */\r\n\r\n#define SCB_SHCSR_MONITORACT_Pos 8U                                /*!< SCB SHCSR: MONITORACT Position */\r\n#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */\r\n\r\n#define SCB_SHCSR_SVCALLACT_Pos 7U                               /*!< SCB SHCSR: SVCALLACT Position */\r\n#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTACT_Pos 3U                                 /*!< SCB SHCSR: USGFAULTACT Position */\r\n#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTACT_Pos 1U                                 /*!< SCB SHCSR: BUSFAULTACT Position */\r\n#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTACT_Pos 0U                                     /*!< SCB SHCSR: MEMFAULTACT Position */\r\n#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */\r\n\r\n/* SCB Configurable Fault Status Register Definitions */\r\n#define SCB_CFSR_USGFAULTSR_Pos 16U                                   /*!< SCB CFSR: Usage Fault Status Register Position */\r\n#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_BUSFAULTSR_Pos 8U                                  /*!< SCB CFSR: Bus Fault Status Register Position */\r\n#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_MEMFAULTSR_Pos 0U                                      /*!< SCB CFSR: Memory Manage Fault Status Register Position */\r\n#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */\r\n\r\n/* SCB Hard Fault Status Register Definitions */\r\n#define SCB_HFSR_DEBUGEVT_Pos 31U                            /*!< SCB HFSR: DEBUGEVT Position */\r\n#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */\r\n\r\n#define SCB_HFSR_FORCED_Pos 30U                          /*!< SCB HFSR: FORCED Position */\r\n#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */\r\n\r\n#define SCB_HFSR_VECTTBL_Pos 1U                            /*!< SCB HFSR: VECTTBL Position */\r\n#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */\r\n\r\n/* SCB Debug Fault Status Register Definitions */\r\n#define SCB_DFSR_EXTERNAL_Pos 4U                             /*!< SCB DFSR: EXTERNAL Position */\r\n#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */\r\n\r\n#define SCB_DFSR_VCATCH_Pos 3U                           /*!< SCB DFSR: VCATCH Position */\r\n#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */\r\n\r\n#define SCB_DFSR_DWTTRAP_Pos 2U                            /*!< SCB DFSR: DWTTRAP Position */\r\n#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */\r\n\r\n#define SCB_DFSR_BKPT_Pos 1U                         /*!< SCB DFSR: BKPT Position */\r\n#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */\r\n\r\n#define SCB_DFSR_HALTED_Pos 0U                               /*!< SCB DFSR: HALTED Position */\r\n#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)\r\n  \\brief    Type definitions for the System Control and ID Register not in the SCB\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control and ID Register not in the SCB.\r\n */\r\ntypedef struct {\r\n  uint32_t      RESERVED0[1U];\r\n  __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */\r\n#if ((defined __CM3_REV) && (__CM3_REV >= 0x200U))\r\n  __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */\r\n#else\r\n  uint32_t RESERVED1[1U];\r\n#endif\r\n} SCnSCB_Type;\r\n\r\n/* Interrupt Controller Type Register Definitions */\r\n#define SCnSCB_ICTR_INTLINESNUM_Pos 0U                                         /*!< ICTR: INTLINESNUM Position */\r\n#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */\r\n\r\n/* Auxiliary Control Register Definitions */\r\n\r\n#define SCnSCB_ACTLR_DISFOLD_Pos 2U                                /*!< ACTLR: DISFOLD Position */\r\n#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */\r\n\r\n#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U                                   /*!< ACTLR: DISDEFWBUF Position */\r\n#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */\r\n\r\n#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U                                       /*!< ACTLR: DISMCYCINT Position */\r\n#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */\r\n\r\n/*@} end of group CMSIS_SCnotSCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_ITM     Instrumentation Trace Macrocell (ITM)\r\n  \\brief    Type definitions for the Instrumentation Trace Macrocell (ITM)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Instrumentation Trace Macrocell Register (ITM).\r\n */\r\ntypedef struct {\r\n  __OM union {\r\n    __OM uint8_t  u8;  /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 8-bit */\r\n    __OM uint16_t u16; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 16-bit */\r\n    __OM uint32_t u32; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 32-bit */\r\n  } PORT[32U];         /*!< Offset: 0x000 ( /W)  ITM Stimulus Port Registers */\r\n  uint32_t       RESERVED0[864U];\r\n  __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W)  ITM Trace Enable Register */\r\n  uint32_t       RESERVED1[15U];\r\n  __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */\r\n  uint32_t       RESERVED2[15U];\r\n  __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */\r\n  uint32_t       RESERVED3[29U];\r\n  __OM uint32_t  IWR;  /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */\r\n  __IM uint32_t  IRR;  /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */\r\n  __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */\r\n  uint32_t       RESERVED4[43U];\r\n  __OM uint32_t  LAR; /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */\r\n  __IM uint32_t  LSR; /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */\r\n  uint32_t       RESERVED5[6U];\r\n  __IM uint32_t  PID4; /*!< Offset: 0xFD0 (R/ )  ITM Peripheral Identification Register #4 */\r\n  __IM uint32_t  PID5; /*!< Offset: 0xFD4 (R/ )  ITM Peripheral Identification Register #5 */\r\n  __IM uint32_t  PID6; /*!< Offset: 0xFD8 (R/ )  ITM Peripheral Identification Register #6 */\r\n  __IM uint32_t  PID7; /*!< Offset: 0xFDC (R/ )  ITM Peripheral Identification Register #7 */\r\n  __IM uint32_t  PID0; /*!< Offset: 0xFE0 (R/ )  ITM Peripheral Identification Register #0 */\r\n  __IM uint32_t  PID1; /*!< Offset: 0xFE4 (R/ )  ITM Peripheral Identification Register #1 */\r\n  __IM uint32_t  PID2; /*!< Offset: 0xFE8 (R/ )  ITM Peripheral Identification Register #2 */\r\n  __IM uint32_t  PID3; /*!< Offset: 0xFEC (R/ )  ITM Peripheral Identification Register #3 */\r\n  __IM uint32_t  CID0; /*!< Offset: 0xFF0 (R/ )  ITM Component  Identification Register #0 */\r\n  __IM uint32_t  CID1; /*!< Offset: 0xFF4 (R/ )  ITM Component  Identification Register #1 */\r\n  __IM uint32_t  CID2; /*!< Offset: 0xFF8 (R/ )  ITM Component  Identification Register #2 */\r\n  __IM uint32_t  CID3; /*!< Offset: 0xFFC (R/ )  ITM Component  Identification Register #3 */\r\n} ITM_Type;\r\n\r\n/* ITM Trace Privilege Register Definitions */\r\n#define ITM_TPR_PRIVMASK_Pos 0U                                  /*!< ITM TPR: PRIVMASK Position */\r\n#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */\r\n\r\n/* ITM Trace Control Register Definitions */\r\n#define ITM_TCR_BUSY_Pos 23U                       /*!< ITM TCR: BUSY Position */\r\n#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */\r\n\r\n#define ITM_TCR_TraceBusID_Pos 16U                                /*!< ITM TCR: ATBID Position */\r\n#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */\r\n\r\n#define ITM_TCR_GTSFREQ_Pos 10U                          /*!< ITM TCR: Global timestamp frequency Position */\r\n#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */\r\n\r\n#define ITM_TCR_TSPrescale_Pos 8U                              /*!< ITM TCR: TSPrescale Position */\r\n#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */\r\n\r\n#define ITM_TCR_SWOENA_Pos 4U                          /*!< ITM TCR: SWOENA Position */\r\n#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */\r\n\r\n#define ITM_TCR_DWTENA_Pos 3U                          /*!< ITM TCR: DWTENA Position */\r\n#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */\r\n\r\n#define ITM_TCR_SYNCENA_Pos 2U                           /*!< ITM TCR: SYNCENA Position */\r\n#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */\r\n\r\n#define ITM_TCR_TSENA_Pos 1U                         /*!< ITM TCR: TSENA Position */\r\n#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */\r\n\r\n#define ITM_TCR_ITMENA_Pos 0U                              /*!< ITM TCR: ITM Enable bit Position */\r\n#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */\r\n\r\n/* ITM Integration Write Register Definitions */\r\n#define ITM_IWR_ATVALIDM_Pos 0U                                /*!< ITM IWR: ATVALIDM Position */\r\n#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */\r\n\r\n/* ITM Integration Read Register Definitions */\r\n#define ITM_IRR_ATREADYM_Pos 0U                                /*!< ITM IRR: ATREADYM Position */\r\n#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */\r\n\r\n/* ITM Integration Mode Control Register Definitions */\r\n#define ITM_IMCR_INTEGRATION_Pos 0U                                    /*!< ITM IMCR: INTEGRATION Position */\r\n#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */\r\n\r\n/* ITM Lock Status Register Definitions */\r\n#define ITM_LSR_ByteAcc_Pos 2U                           /*!< ITM LSR: ByteAcc Position */\r\n#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */\r\n\r\n#define ITM_LSR_Access_Pos 1U                          /*!< ITM LSR: Access Position */\r\n#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */\r\n\r\n#define ITM_LSR_Present_Pos 0U                               /*!< ITM LSR: Present Position */\r\n#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_ITM */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)\r\n  \\brief    Type definitions for the Data Watchpoint and Trace (DWT)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Data Watchpoint and Trace Register (DWT).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;      /*!< Offset: 0x000 (R/W)  Control Register */\r\n  __IOM uint32_t CYCCNT;    /*!< Offset: 0x004 (R/W)  Cycle Count Register */\r\n  __IOM uint32_t CPICNT;    /*!< Offset: 0x008 (R/W)  CPI Count Register */\r\n  __IOM uint32_t EXCCNT;    /*!< Offset: 0x00C (R/W)  Exception Overhead Count Register */\r\n  __IOM uint32_t SLEEPCNT;  /*!< Offset: 0x010 (R/W)  Sleep Count Register */\r\n  __IOM uint32_t LSUCNT;    /*!< Offset: 0x014 (R/W)  LSU Count Register */\r\n  __IOM uint32_t FOLDCNT;   /*!< Offset: 0x018 (R/W)  Folded-instruction Count Register */\r\n  __IM uint32_t  PCSR;      /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */\r\n  __IOM uint32_t COMP0;     /*!< Offset: 0x020 (R/W)  Comparator Register 0 */\r\n  __IOM uint32_t MASK0;     /*!< Offset: 0x024 (R/W)  Mask Register 0 */\r\n  __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W)  Function Register 0 */\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t COMP1;     /*!< Offset: 0x030 (R/W)  Comparator Register 1 */\r\n  __IOM uint32_t MASK1;     /*!< Offset: 0x034 (R/W)  Mask Register 1 */\r\n  __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W)  Function Register 1 */\r\n  uint32_t       RESERVED1[1U];\r\n  __IOM uint32_t COMP2;     /*!< Offset: 0x040 (R/W)  Comparator Register 2 */\r\n  __IOM uint32_t MASK2;     /*!< Offset: 0x044 (R/W)  Mask Register 2 */\r\n  __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W)  Function Register 2 */\r\n  uint32_t       RESERVED2[1U];\r\n  __IOM uint32_t COMP3;     /*!< Offset: 0x050 (R/W)  Comparator Register 3 */\r\n  __IOM uint32_t MASK3;     /*!< Offset: 0x054 (R/W)  Mask Register 3 */\r\n  __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W)  Function Register 3 */\r\n} DWT_Type;\r\n\r\n/* DWT Control Register Definitions */\r\n#define DWT_CTRL_NUMCOMP_Pos 28U                             /*!< DWT CTRL: NUMCOMP Position */\r\n#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */\r\n\r\n#define DWT_CTRL_NOTRCPKT_Pos 27U                              /*!< DWT CTRL: NOTRCPKT Position */\r\n#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */\r\n\r\n#define DWT_CTRL_NOEXTTRIG_Pos 26U                               /*!< DWT CTRL: NOEXTTRIG Position */\r\n#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */\r\n\r\n#define DWT_CTRL_NOCYCCNT_Pos 25U                              /*!< DWT CTRL: NOCYCCNT Position */\r\n#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */\r\n\r\n#define DWT_CTRL_NOPRFCNT_Pos 24U                              /*!< DWT CTRL: NOPRFCNT Position */\r\n#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */\r\n\r\n#define DWT_CTRL_CYCEVTENA_Pos 22U                               /*!< DWT CTRL: CYCEVTENA Position */\r\n#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */\r\n\r\n#define DWT_CTRL_FOLDEVTENA_Pos 21U                                /*!< DWT CTRL: FOLDEVTENA Position */\r\n#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */\r\n\r\n#define DWT_CTRL_LSUEVTENA_Pos 20U                               /*!< DWT CTRL: LSUEVTENA Position */\r\n#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */\r\n\r\n#define DWT_CTRL_SLEEPEVTENA_Pos 19U                                 /*!< DWT CTRL: SLEEPEVTENA Position */\r\n#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCEVTENA_Pos 18U                               /*!< DWT CTRL: EXCEVTENA Position */\r\n#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */\r\n\r\n#define DWT_CTRL_CPIEVTENA_Pos 17U                               /*!< DWT CTRL: CPIEVTENA Position */\r\n#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCTRCENA_Pos 16U                               /*!< DWT CTRL: EXCTRCENA Position */\r\n#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */\r\n\r\n#define DWT_CTRL_PCSAMPLENA_Pos 12U                                /*!< DWT CTRL: PCSAMPLENA Position */\r\n#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */\r\n\r\n#define DWT_CTRL_SYNCTAP_Pos 10U                             /*!< DWT CTRL: SYNCTAP Position */\r\n#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */\r\n\r\n#define DWT_CTRL_CYCTAP_Pos 9U                             /*!< DWT CTRL: CYCTAP Position */\r\n#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */\r\n\r\n#define DWT_CTRL_POSTINIT_Pos 5U                               /*!< DWT CTRL: POSTINIT Position */\r\n#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */\r\n\r\n#define DWT_CTRL_POSTPRESET_Pos 1U                                 /*!< DWT CTRL: POSTPRESET Position */\r\n#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */\r\n\r\n#define DWT_CTRL_CYCCNTENA_Pos 0U                                    /*!< DWT CTRL: CYCCNTENA Position */\r\n#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */\r\n\r\n/* DWT CPI Count Register Definitions */\r\n#define DWT_CPICNT_CPICNT_Pos 0U                                    /*!< DWT CPICNT: CPICNT Position */\r\n#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */\r\n\r\n/* DWT Exception Overhead Count Register Definitions */\r\n#define DWT_EXCCNT_EXCCNT_Pos 0U                                    /*!< DWT EXCCNT: EXCCNT Position */\r\n#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */\r\n\r\n/* DWT Sleep Count Register Definitions */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U                                        /*!< DWT SLEEPCNT: SLEEPCNT Position */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */\r\n\r\n/* DWT LSU Count Register Definitions */\r\n#define DWT_LSUCNT_LSUCNT_Pos 0U                                    /*!< DWT LSUCNT: LSUCNT Position */\r\n#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */\r\n\r\n/* DWT Folded-instruction Count Register Definitions */\r\n#define DWT_FOLDCNT_FOLDCNT_Pos 0U                                      /*!< DWT FOLDCNT: FOLDCNT Position */\r\n#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */\r\n\r\n/* DWT Comparator Mask Register Definitions */\r\n#define DWT_MASK_MASK_Pos 0U                                /*!< DWT MASK: MASK Position */\r\n#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */\r\n\r\n/* DWT Comparator Function Register Definitions */\r\n#define DWT_FUNCTION_MATCHED_Pos 24U                                 /*!< DWT FUNCTION: MATCHED Position */\r\n#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR1_Pos 16U                                    /*!< DWT FUNCTION: DATAVADDR1 Position */\r\n#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR0_Pos 12U                                    /*!< DWT FUNCTION: DATAVADDR0 Position */\r\n#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVSIZE_Pos 10U                                   /*!< DWT FUNCTION: DATAVSIZE Position */\r\n#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */\r\n\r\n#define DWT_FUNCTION_LNK1ENA_Pos 9U                                  /*!< DWT FUNCTION: LNK1ENA Position */\r\n#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */\r\n\r\n#define DWT_FUNCTION_DATAVMATCH_Pos 8U                                     /*!< DWT FUNCTION: DATAVMATCH Position */\r\n#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */\r\n\r\n#define DWT_FUNCTION_CYCMATCH_Pos 7U                                   /*!< DWT FUNCTION: CYCMATCH Position */\r\n#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */\r\n\r\n#define DWT_FUNCTION_EMITRANGE_Pos 5U                                    /*!< DWT FUNCTION: EMITRANGE Position */\r\n#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */\r\n\r\n#define DWT_FUNCTION_FUNCTION_Pos 0U                                       /*!< DWT FUNCTION: FUNCTION Position */\r\n#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_DWT */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_TPI     Trace Port Interface (TPI)\r\n  \\brief    Type definitions for the Trace Port Interface (TPI)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Trace Port Interface Register (TPI).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t SSPSR; /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */\r\n  __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */\r\n  uint32_t       RESERVED0[2U];\r\n  __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */\r\n  uint32_t       RESERVED1[55U];\r\n  __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */\r\n  uint32_t       RESERVED2[131U];\r\n  __IM uint32_t  FFSR; /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */\r\n  __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */\r\n  __IM uint32_t  FSCR; /*!< Offset: 0x308 (R/ )  Formatter Synchronization Counter Register */\r\n  uint32_t       RESERVED3[759U];\r\n  __IM uint32_t  TRIGGER;   /*!< Offset: 0xEE8 (R/ )  TRIGGER */\r\n  __IM uint32_t  FIFO0;     /*!< Offset: 0xEEC (R/ )  Integration ETM Data */\r\n  __IM uint32_t  ITATBCTR2; /*!< Offset: 0xEF0 (R/ )  ITATBCTR2 */\r\n  uint32_t       RESERVED4[1U];\r\n  __IM uint32_t  ITATBCTR0; /*!< Offset: 0xEF8 (R/ )  ITATBCTR0 */\r\n  __IM uint32_t  FIFO1;     /*!< Offset: 0xEFC (R/ )  Integration ITM Data */\r\n  __IOM uint32_t ITCTRL;    /*!< Offset: 0xF00 (R/W)  Integration Mode Control */\r\n  uint32_t       RESERVED5[39U];\r\n  __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W)  Claim tag set */\r\n  __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W)  Claim tag clear */\r\n  uint32_t       RESERVED7[8U];\r\n  __IM uint32_t  DEVID;   /*!< Offset: 0xFC8 (R/ )  TPIU_DEVID */\r\n  __IM uint32_t  DEVTYPE; /*!< Offset: 0xFCC (R/ )  TPIU_DEVTYPE */\r\n} TPI_Type;\r\n\r\n/* TPI Asynchronous Clock Prescaler Register Definitions */\r\n#define TPI_ACPR_PRESCALER_Pos 0U                                       /*!< TPI ACPR: PRESCALER Position */\r\n#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */\r\n\r\n/* TPI Selected Pin Protocol Register Definitions */\r\n#define TPI_SPPR_TXMODE_Pos 0U                                 /*!< TPI SPPR: TXMODE Position */\r\n#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */\r\n\r\n/* TPI Formatter and Flush Status Register Definitions */\r\n#define TPI_FFSR_FtNonStop_Pos 3U                                /*!< TPI FFSR: FtNonStop Position */\r\n#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */\r\n\r\n#define TPI_FFSR_TCPresent_Pos 2U                                /*!< TPI FFSR: TCPresent Position */\r\n#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */\r\n\r\n#define TPI_FFSR_FtStopped_Pos 1U                                /*!< TPI FFSR: FtStopped Position */\r\n#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */\r\n\r\n#define TPI_FFSR_FlInProg_Pos 0U                                   /*!< TPI FFSR: FlInProg Position */\r\n#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */\r\n\r\n/* TPI Formatter and Flush Control Register Definitions */\r\n#define TPI_FFCR_TrigIn_Pos 8U                             /*!< TPI FFCR: TrigIn Position */\r\n#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */\r\n\r\n#define TPI_FFCR_EnFCont_Pos 1U                              /*!< TPI FFCR: EnFCont Position */\r\n#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */\r\n\r\n/* TPI TRIGGER Register Definitions */\r\n#define TPI_TRIGGER_TRIGGER_Pos 0U                                     /*!< TPI TRIGGER: TRIGGER Position */\r\n#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */\r\n\r\n/* TPI Integration ETM Data Register Definitions (FIFO0) */\r\n#define TPI_FIFO0_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO0: ITM_ATVALID Position */\r\n#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO0: ITM_bytecount Position */\r\n#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO0: ETM_ATVALID Position */\r\n#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO0: ETM_bytecount Position */\r\n#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM2_Pos 16U                            /*!< TPI FIFO0: ETM2 Position */\r\n#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */\r\n\r\n#define TPI_FIFO0_ETM1_Pos 8U                             /*!< TPI FIFO0: ETM1 Position */\r\n#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */\r\n\r\n#define TPI_FIFO0_ETM0_Pos 0U                                 /*!< TPI FIFO0: ETM0 Position */\r\n#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */\r\n\r\n/* TPI ITATBCTR2 Register Definitions */\r\n#define TPI_ITATBCTR2_ATREADY_Pos 0U                                       /*!< TPI ITATBCTR2: ATREADY Position */\r\n#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/) /*!< TPI ITATBCTR2: ATREADY Mask */\r\n\r\n/* TPI Integration ITM Data Register Definitions (FIFO1) */\r\n#define TPI_FIFO1_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO1: ITM_ATVALID Position */\r\n#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO1: ITM_bytecount Position */\r\n#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO1: ETM_ATVALID Position */\r\n#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO1: ETM_bytecount Position */\r\n#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ITM2_Pos 16U                            /*!< TPI FIFO1: ITM2 Position */\r\n#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */\r\n\r\n#define TPI_FIFO1_ITM1_Pos 8U                             /*!< TPI FIFO1: ITM1 Position */\r\n#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */\r\n\r\n#define TPI_FIFO1_ITM0_Pos 0U                                 /*!< TPI FIFO1: ITM0 Position */\r\n#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */\r\n\r\n/* TPI ITATBCTR0 Register Definitions */\r\n#define TPI_ITATBCTR0_ATREADY_Pos 0U                                       /*!< TPI ITATBCTR0: ATREADY Position */\r\n#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/) /*!< TPI ITATBCTR0: ATREADY Mask */\r\n\r\n/* TPI Integration Mode Control Register Definitions */\r\n#define TPI_ITCTRL_Mode_Pos 0U                                 /*!< TPI ITCTRL: Mode Position */\r\n#define TPI_ITCTRL_Mode_Msk (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */\r\n\r\n/* TPI DEVID Register Definitions */\r\n#define TPI_DEVID_NRZVALID_Pos 11U                               /*!< TPI DEVID: NRZVALID Position */\r\n#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */\r\n\r\n#define TPI_DEVID_MANCVALID_Pos 10U                                /*!< TPI DEVID: MANCVALID Position */\r\n#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */\r\n\r\n#define TPI_DEVID_PTINVALID_Pos 9U                                 /*!< TPI DEVID: PTINVALID Position */\r\n#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */\r\n\r\n#define TPI_DEVID_MinBufSz_Pos 6U                                /*!< TPI DEVID: MinBufSz Position */\r\n#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */\r\n\r\n#define TPI_DEVID_AsynClkIn_Pos 5U                                 /*!< TPI DEVID: AsynClkIn Position */\r\n#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */\r\n\r\n#define TPI_DEVID_NrTraceInput_Pos 0U                                         /*!< TPI DEVID: NrTraceInput Position */\r\n#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */\r\n\r\n/* TPI DEVTYPE Register Definitions */\r\n#define TPI_DEVTYPE_MajorType_Pos 4U                                   /*!< TPI DEVTYPE: MajorType Position */\r\n#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */\r\n\r\n#define TPI_DEVTYPE_SubType_Pos 0U                                     /*!< TPI DEVTYPE: SubType Position */\r\n#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_TPI */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_MPU     Memory Protection Unit (MPU)\r\n  \\brief    Type definitions for the Memory Protection Unit (MPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Memory Protection Unit (MPU).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  TYPE;    /*!< Offset: 0x000 (R/ )  MPU Type Register */\r\n  __IOM uint32_t CTRL;    /*!< Offset: 0x004 (R/W)  MPU Control Register */\r\n  __IOM uint32_t RNR;     /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */\r\n  __IOM uint32_t RBAR;    /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */\r\n  __IOM uint32_t RASR;    /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W)  MPU Alias 1 Region Base Address Register */\r\n  __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W)  MPU Alias 1 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W)  MPU Alias 2 Region Base Address Register */\r\n  __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W)  MPU Alias 2 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W)  MPU Alias 3 Region Base Address Register */\r\n  __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W)  MPU Alias 3 Region Attribute and Size Register */\r\n} MPU_Type;\r\n\r\n/* MPU Type Register Definitions */\r\n#define MPU_TYPE_IREGION_Pos 16U                              /*!< MPU TYPE: IREGION Position */\r\n#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */\r\n\r\n#define MPU_TYPE_DREGION_Pos 8U                               /*!< MPU TYPE: DREGION Position */\r\n#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */\r\n\r\n#define MPU_TYPE_SEPARATE_Pos 0U                                 /*!< MPU TYPE: SEPARATE Position */\r\n#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */\r\n\r\n/* MPU Control Register Definitions */\r\n#define MPU_CTRL_PRIVDEFENA_Pos 2U                               /*!< MPU CTRL: PRIVDEFENA Position */\r\n#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */\r\n\r\n#define MPU_CTRL_HFNMIENA_Pos 1U                             /*!< MPU CTRL: HFNMIENA Position */\r\n#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */\r\n\r\n#define MPU_CTRL_ENABLE_Pos 0U                               /*!< MPU CTRL: ENABLE Position */\r\n#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */\r\n\r\n/* MPU Region Number Register Definitions */\r\n#define MPU_RNR_REGION_Pos 0U                                 /*!< MPU RNR: REGION Position */\r\n#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */\r\n\r\n/* MPU Region Base Address Register Definitions */\r\n#define MPU_RBAR_ADDR_Pos 5U                                 /*!< MPU RBAR: ADDR Position */\r\n#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */\r\n\r\n#define MPU_RBAR_VALID_Pos 4U                          /*!< MPU RBAR: VALID Position */\r\n#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */\r\n\r\n#define MPU_RBAR_REGION_Pos 0U                                 /*!< MPU RBAR: REGION Position */\r\n#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */\r\n\r\n/* MPU Region Attribute and Size Register Definitions */\r\n#define MPU_RASR_ATTRS_Pos 16U                              /*!< MPU RASR: MPU Region Attribute field Position */\r\n#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */\r\n\r\n#define MPU_RASR_XN_Pos 28U                      /*!< MPU RASR: ATTRS.XN Position */\r\n#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */\r\n\r\n#define MPU_RASR_AP_Pos 24U                        /*!< MPU RASR: ATTRS.AP Position */\r\n#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */\r\n\r\n#define MPU_RASR_TEX_Pos 19U                         /*!< MPU RASR: ATTRS.TEX Position */\r\n#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */\r\n\r\n#define MPU_RASR_S_Pos 18U                     /*!< MPU RASR: ATTRS.S Position */\r\n#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */\r\n\r\n#define MPU_RASR_C_Pos 17U                     /*!< MPU RASR: ATTRS.C Position */\r\n#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */\r\n\r\n#define MPU_RASR_B_Pos 16U                     /*!< MPU RASR: ATTRS.B Position */\r\n#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */\r\n\r\n#define MPU_RASR_SRD_Pos 8U                           /*!< MPU RASR: Sub-Region Disable Position */\r\n#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */\r\n\r\n#define MPU_RASR_SIZE_Pos 1U                            /*!< MPU RASR: Region Size Field Position */\r\n#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */\r\n\r\n#define MPU_RASR_ENABLE_Pos 0U                               /*!< MPU RASR: Region enable bit Position */\r\n#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */\r\n\r\n/*@} end of group CMSIS_MPU */\r\n#endif\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    Type definitions for the Core Debug Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Core Debug Register (CoreDebug).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */\r\n  __OM uint32_t  DCRSR; /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */\r\n  __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */\r\n  __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */\r\n} CoreDebug_Type;\r\n\r\n/* Debug Halting Control and Status Register Definitions */\r\n#define CoreDebug_DHCSR_DBGKEY_Pos 16U                                      /*!< CoreDebug DHCSR: DBGKEY Position */\r\n#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U                                     /*!< CoreDebug DHCSR: S_RESET_ST Position */\r\n#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U                                      /*!< CoreDebug DHCSR: S_RETIRE_ST Position */\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U                                   /*!< CoreDebug DHCSR: S_LOCKUP Position */\r\n#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_SLEEP_Pos 18U                                  /*!< CoreDebug DHCSR: S_SLEEP Position */\r\n#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_HALT_Pos 17U                                 /*!< CoreDebug DHCSR: S_HALT Position */\r\n#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_S_REGRDY_Pos 16U                                   /*!< CoreDebug DHCSR: S_REGRDY Position */\r\n#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */\r\n\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U                                       /*!< CoreDebug DHCSR: C_SNAPSTALL Position */\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */\r\n\r\n#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U                                      /*!< CoreDebug DHCSR: C_MASKINTS Position */\r\n#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */\r\n\r\n#define CoreDebug_DHCSR_C_STEP_Pos 2U                                  /*!< CoreDebug DHCSR: C_STEP Position */\r\n#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */\r\n\r\n#define CoreDebug_DHCSR_C_HALT_Pos 1U                                  /*!< CoreDebug DHCSR: C_HALT Position */\r\n#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U                                         /*!< CoreDebug DHCSR: C_DEBUGEN Position */\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */\r\n\r\n/* Debug Core Register Selector Register Definitions */\r\n#define CoreDebug_DCRSR_REGWnR_Pos 16U                                 /*!< CoreDebug DCRSR: REGWnR Position */\r\n#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */\r\n\r\n#define CoreDebug_DCRSR_REGSEL_Pos 0U                                         /*!< CoreDebug DCRSR: REGSEL Position */\r\n#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */\r\n\r\n/* Debug Exception and Monitor Control Register Definitions */\r\n#define CoreDebug_DEMCR_TRCENA_Pos 24U                                 /*!< CoreDebug DEMCR: TRCENA Position */\r\n#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_REQ_Pos 19U                                  /*!< CoreDebug DEMCR: MON_REQ Position */\r\n#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_STEP_Pos 18U                                   /*!< CoreDebug DEMCR: MON_STEP Position */\r\n#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_PEND_Pos 17U                                   /*!< CoreDebug DEMCR: MON_PEND Position */\r\n#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_EN_Pos 16U                                 /*!< CoreDebug DEMCR: MON_EN Position */\r\n#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U                                     /*!< CoreDebug DEMCR: VC_HARDERR Position */\r\n#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_INTERR_Pos 9U                                     /*!< CoreDebug DEMCR: VC_INTERR Position */\r\n#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U                                     /*!< CoreDebug DEMCR: VC_BUSERR Position */\r\n#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_STATERR_Pos 7U                                      /*!< CoreDebug DEMCR: VC_STATERR Position */\r\n#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U                                     /*!< CoreDebug DEMCR: VC_CHKERR Position */\r\n#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U                                      /*!< CoreDebug DEMCR: VC_NOCPERR Position */\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_MMERR_Pos 4U                                    /*!< CoreDebug DEMCR: VC_MMERR Position */\r\n#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */\r\n#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */\r\n\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) ((value << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) ((value & field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of Cortex-M3 Hardware */\r\n#define SCS_BASE       (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define ITM_BASE       (0xE0000000UL)        /*!< ITM Base Address */\r\n#define DWT_BASE       (0xE0001000UL)        /*!< DWT Base Address */\r\n#define TPI_BASE       (0xE0040000UL)        /*!< TPI Base Address */\r\n#define CoreDebug_BASE (0xE000EDF0UL)        /*!< Core Debug Base Address */\r\n#define SysTick_BASE   (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE      (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE       (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCnSCB    ((SCnSCB_Type *)SCS_BASE)          /*!< System control Register not in SCB */\r\n#define SCB       ((SCB_Type *)SCB_BASE)             /*!< SCB configuration struct */\r\n#define SysTick   ((SysTick_Type *)SysTick_BASE)     /*!< SysTick configuration struct */\r\n#define NVIC      ((NVIC_Type *)NVIC_BASE)           /*!< NVIC configuration struct */\r\n#define ITM       ((ITM_Type *)ITM_BASE)             /*!< ITM configuration struct */\r\n#define DWT       ((DWT_Type *)DWT_BASE)             /*!< DWT configuration struct */\r\n#define TPI       ((TPI_Type *)TPI_BASE)             /*!< TPI configuration struct */\r\n#define CoreDebug ((CoreDebug_Type *)CoreDebug_BASE) /*!< Core Debug configuration struct */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n#define MPU_BASE (SCS_BASE + 0x0D90UL)  /*!< Memory Protection Unit */\r\n#define MPU      ((MPU_Type *)MPU_BASE) /*!< Memory Protection Unit */\r\n#endif\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Debug Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Set Priority Grouping\r\n  \\details Sets the priority grouping field using the required unlock sequence.\r\n           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.\r\n           Only values from 0..7 are used.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]      PriorityGroup  Priority grouping field.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) {\r\n  uint32_t reg_value;\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n\r\n  reg_value = SCB->AIRCR;                                                                             /* read old register configuration    */\r\n  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk));                         /* clear bits to change               */\r\n  reg_value  = (reg_value | ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (PriorityGroupTmp << 8U)); /* Insert write key and priorty group */\r\n  SCB->AIRCR = reg_value;\r\n}\r\n\r\n/**\r\n  \\brief   Get Priority Grouping\r\n  \\details Reads the priority grouping field from the NVIC Interrupt Controller.\r\n  \\return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) { return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); }\r\n\r\n/**\r\n  \\brief   Enable External Interrupt\r\n  \\details Enables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Disable External Interrupt\r\n  \\details Disables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) { NVIC->ICER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) {\r\n  return ((uint32_t)(((NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));\r\n}\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  Interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) { NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) { NVIC->ICPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Active Interrupt\r\n  \\details Reads the active register in NVIC and returns the active bit.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not active.\r\n  \\return             1  Interrupt status is active.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) { return ((uint32_t)(((NVIC->IABR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); }\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of an interrupt.\r\n  \\note    The priority cannot be set for every core interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) < 0) {\r\n    SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL) - 4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  } else {\r\n    NVIC->IP[((uint32_t)(int32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of an interrupt.\r\n           The interrupt number can be positive to specify an external (device specific) interrupt,\r\n           or negative to specify an internal (core) interrupt.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) < 0) {\r\n    return (((uint32_t)SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL) - 4UL] >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return (((uint32_t)NVIC->IP[((uint32_t)(int32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Encode Priority\r\n  \\details Encodes the priority for an interrupt with the given priority group,\r\n           preemptive priority value, and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [in]   PreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [in]       SubPriority  Subpriority value (starting from 0).\r\n  \\return                        Encoded priority. Value can be used in the function \\ref NVIC_SetPriority().\r\n */\r\n__STATIC_INLINE uint32_t NVIC_EncodePriority(uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  return (((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | ((SubPriority & (uint32_t)((1UL << (SubPriorityBits)) - 1UL))));\r\n}\r\n\r\n/**\r\n  \\brief   Decode Priority\r\n  \\details Decodes an interrupt priority value with a given priority group to\r\n           preemptive priority value and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.\r\n  \\param [in]         Priority   Priority value, which can be retrieved with the function \\ref NVIC_GetPriority().\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [out] pPreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [out]     pSubPriority  Subpriority value (starting from 0).\r\n */\r\n__STATIC_INLINE void NVIC_DecodePriority(uint32_t Priority, uint32_t PriorityGroup, uint32_t *const pPreemptPriority, uint32_t *const pSubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);\r\n  *pSubPriority     = (Priority) & (uint32_t)((1UL << (SubPriorityBits)) - 1UL);\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__STATIC_INLINE void NVIC_SystemReset(void) {\r\n  __DSB();                                                                                                                         /* Ensure all outstanding memory accesses included\r\n                                                                                                                                      buffered write are completed before reset */\r\n  SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */\r\n  __DSB();                                                                                                                         /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n/* ##################################### Debug In/Output function ########################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_core_DebugFunctions ITM Functions\r\n  \\brief    Functions that access the ITM debug interface.\r\n  @{\r\n */\r\n\r\nextern volatile int32_t ITM_RxBuffer;  /*!< External variable to receive characters. */\r\n#define ITM_RXBUFFER_EMPTY 0x5AA55AA5U /*!< Value identifying \\ref ITM_RxBuffer is ready for next character. */\r\n\r\n/**\r\n  \\brief   ITM Send Character\r\n  \\details Transmits a character via the ITM channel 0, and\r\n           \\li Just returns when no debugger is connected that has booked the output.\r\n           \\li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.\r\n  \\param [in]     ch  Character to transmit.\r\n  \\returns            Character to transmit.\r\n */\r\n__STATIC_INLINE uint32_t ITM_SendChar(uint32_t ch) {\r\n  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */\r\n      ((ITM->TER & 1UL) != 0UL))                  /* ITM Port #0 enabled */\r\n  {\r\n    while (ITM->PORT[0U].u32 == 0UL) {\r\n      __NOP();\r\n    }\r\n    ITM->PORT[0U].u8 = (uint8_t)ch;\r\n  }\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Receive Character\r\n  \\details Inputs a character via the external variable \\ref ITM_RxBuffer.\r\n  \\return             Received character.\r\n  \\return         -1  No character pending.\r\n */\r\n__STATIC_INLINE int32_t ITM_ReceiveChar(void) {\r\n  int32_t ch = -1; /* no character available */\r\n\r\n  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) {\r\n    ch           = ITM_RxBuffer;\r\n    ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */\r\n  }\r\n\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Check Character\r\n  \\details Checks whether a character is pending for reading in the variable \\ref ITM_RxBuffer.\r\n  \\return          0  No character available.\r\n  \\return          1  Character available.\r\n */\r\n__STATIC_INLINE int32_t ITM_CheckChar(void) {\r\n\r\n  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {\r\n    return (0); /* no character available */\r\n  } else {\r\n    return (1); /*    character available */\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_core_DebugFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM3_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Include/core_cm4.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cm4.h\r\n                                                                              * @brief    CMSIS Cortex-M4 Core Peripheral Access Layer Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CM4_H_GENERIC\r\n#define __CORE_CM4_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup Cortex_M4\r\n  @{\r\n */\r\n\r\n/*  CMSIS CM4 definitions */\r\n#define __CM4_CMSIS_VERSION_MAIN (0x04U)                                                       /*!< [31:16] CMSIS HAL main version */\r\n#define __CM4_CMSIS_VERSION_SUB  (0x1EU)                                                       /*!< [15:0]  CMSIS HAL sub version */\r\n#define __CM4_CMSIS_VERSION      ((__CM4_CMSIS_VERSION_MAIN << 16U) | __CM4_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */\r\n\r\n#define __CORTEX_M (0x04U) /*!< Cortex-M Core */\r\n\r\n#if defined(__CC_ARM)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__GNUC__)\r\n#define __ASM           __asm  /*!< asm keyword for GNU Compiler */\r\n#define __INLINE        inline /*!< inline keyword for GNU Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__ICCARM__)\r\n#define __ASM           __asm  /*!< asm keyword for IAR Compiler */\r\n#define __INLINE        inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TMS470__)\r\n#define __ASM           __asm /*!< asm keyword for TI CCS Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TASKING__)\r\n#define __ASM           __asm  /*!< asm keyword for TASKING Compiler */\r\n#define __INLINE        inline /*!< inline keyword for TASKING Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__CSMC__)\r\n#define __packed\r\n#define __ASM           _asm   /*!< asm keyword for COSMIC Compiler */\r\n#define __INLINE        inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */\r\n#define __STATIC_INLINE static inline\r\n\r\n#else\r\n#error Unknown compiler\r\n#endif\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions.\r\n*/\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#if (__FPU_PRESENT == 1)\r\n#define __FPU_USED 1U\r\n#else\r\n#warning \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__TMS470__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"core_cmFunc.h\"  /* Core Function Access */\r\n#include \"core_cmInstr.h\" /* Core Instruction Access */\r\n#include \"core_cmSimd.h\"  /* Compiler specific SIMD Intrinsics */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM4_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_CM4_H_DEPENDANT\r\n#define __CORE_CM4_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __CM4_REV\r\n#define __CM4_REV 0x0000U\r\n#warning \"__CM4_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __FPU_PRESENT\r\n#define __FPU_PRESENT 0U\r\n#warning \"__FPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __MPU_PRESENT\r\n#define __MPU_PRESENT 0U\r\n#warning \"__MPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 4U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group Cortex_M4 */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n  - Core Debug Register\r\n  - Core MPU Register\r\n  - Core FPU Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 16; /*!< bit:  0..15  Reserved */\r\n    uint32_t GE : 4;          /*!< bit: 16..19  Greater than or Equal flags */\r\n    uint32_t _reserved1 : 7;  /*!< bit: 20..26  Reserved */\r\n    uint32_t Q : 1;           /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n#define APSR_Q_Pos 27U                 /*!< APSR: Q Position */\r\n#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */\r\n\r\n#define APSR_GE_Pos 16U                    /*!< APSR: GE Position */\r\n#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;        /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 7; /*!< bit:  9..15  Reserved */\r\n    uint32_t GE : 4;         /*!< bit: 16..19  Greater than or Equal flags */\r\n    uint32_t _reserved1 : 4; /*!< bit: 20..23  Reserved */\r\n    uint32_t T : 1;          /*!< bit:     24  Thumb bit        (read 0) */\r\n    uint32_t IT : 2;         /*!< bit: 25..26  saved IT state   (read 0) */\r\n    uint32_t Q : 1;          /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;          /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;          /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;          /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;          /*!< bit:     31  Negative condition code flag */\r\n  } b;                       /*!< Structure used for bit  access */\r\n  uint32_t w;                /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_Q_Pos 27U                 /*!< xPSR: Q Position */\r\n#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */\r\n\r\n#define xPSR_IT_Pos 25U                  /*!< xPSR: IT Position */\r\n#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_GE_Pos 16U                    /*!< xPSR: GE Position */\r\n#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t nPRIV : 1;       /*!< bit:      0  Execution privilege in Thread mode */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t FPCA : 1;        /*!< bit:      2  FP extension active flag */\r\n    uint32_t _reserved0 : 29; /*!< bit:  3..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_FPCA_Pos 2U                        /*!< CONTROL: FPCA Position */\r\n#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */\r\n\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n#define CONTROL_nPRIV_Pos 0U                             /*!< CONTROL: nPRIV Position */\r\n#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[24U];\r\n  __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[24U];\r\n  __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[24U];\r\n  __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[24U];\r\n  __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */\r\n  uint32_t       RESERVED4[56U];\r\n  __IOM uint8_t  IP[240U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */\r\n  uint32_t       RESERVED5[644U];\r\n  __OM uint32_t  STIR; /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */\r\n} NVIC_Type;\r\n\r\n/* Software Triggered Interrupt Register Definitions */\r\n#define NVIC_STIR_INTID_Pos 0U                                   /*!< STIR: INTLINESNUM Position */\r\n#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID;    /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;     /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n  __IOM uint32_t VTOR;     /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */\r\n  __IOM uint32_t AIRCR;    /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;      /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;      /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  __IOM uint8_t  SHP[12U]; /*!< Offset: 0x018 (R/W)  System Handlers Priority Registers (4-7, 8-11, 12-15) */\r\n  __IOM uint32_t SHCSR;    /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n  __IOM uint32_t CFSR;     /*!< Offset: 0x028 (R/W)  Configurable Fault Status Register */\r\n  __IOM uint32_t HFSR;     /*!< Offset: 0x02C (R/W)  HardFault Status Register */\r\n  __IOM uint32_t DFSR;     /*!< Offset: 0x030 (R/W)  Debug Fault Status Register */\r\n  __IOM uint32_t MMFAR;    /*!< Offset: 0x034 (R/W)  MemManage Fault Address Register */\r\n  __IOM uint32_t BFAR;     /*!< Offset: 0x038 (R/W)  BusFault Address Register */\r\n  __IOM uint32_t AFSR;     /*!< Offset: 0x03C (R/W)  Auxiliary Fault Status Register */\r\n  __IM uint32_t  PFR[2U];  /*!< Offset: 0x040 (R/ )  Processor Feature Register */\r\n  __IM uint32_t  DFR;      /*!< Offset: 0x048 (R/ )  Debug Feature Register */\r\n  __IM uint32_t  ADR;      /*!< Offset: 0x04C (R/ )  Auxiliary Feature Register */\r\n  __IM uint32_t  MMFR[4U]; /*!< Offset: 0x050 (R/ )  Memory Model Feature Register */\r\n  __IM uint32_t  ISAR[5U]; /*!< Offset: 0x060 (R/ )  Instruction Set Attributes Register */\r\n  uint32_t       RESERVED0[5U];\r\n  __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W)  Coprocessor Access Control Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_RETTOBASE_Pos 11U                             /*!< SCB ICSR: RETTOBASE Position */\r\n#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n/* SCB Vector Table Offset Register Definitions */\r\n#define SCB_VTOR_TBLOFF_Pos 7U                                   /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_PRIGROUP_Pos 8U                              /*!< SCB AIRCR: PRIGROUP Position */\r\n#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n#define SCB_AIRCR_VECTRESET_Pos 0U                                   /*!< SCB AIRCR: VECTRESET Position */\r\n#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_BFHFNMIGN_Pos 8U                             /*!< SCB CCR: BFHFNMIGN Position */\r\n#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */\r\n\r\n#define SCB_CCR_DIV_0_TRP_Pos 4U                             /*!< SCB CCR: DIV_0_TRP Position */\r\n#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n#define SCB_CCR_USERSETMPEND_Pos 1U                                /*!< SCB CCR: USERSETMPEND Position */\r\n#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */\r\n\r\n#define SCB_CCR_NONBASETHRDENA_Pos 0U                                      /*!< SCB CCR: NONBASETHRDENA Position */\r\n#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_USGFAULTENA_Pos 18U                                /*!< SCB SHCSR: USGFAULTENA Position */\r\n#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTENA_Pos 17U                                /*!< SCB SHCSR: BUSFAULTENA Position */\r\n#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTENA_Pos 16U                                /*!< SCB SHCSR: MEMFAULTENA Position */\r\n#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U                                   /*!< SCB SHCSR: BUSFAULTPENDED Position */\r\n#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U                                   /*!< SCB SHCSR: MEMFAULTPENDED Position */\r\n#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTPENDED_Pos 12U                                   /*!< SCB SHCSR: USGFAULTPENDED Position */\r\n#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_SYSTICKACT_Pos 11U                               /*!< SCB SHCSR: SYSTICKACT Position */\r\n#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */\r\n\r\n#define SCB_SHCSR_PENDSVACT_Pos 10U                              /*!< SCB SHCSR: PENDSVACT Position */\r\n#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */\r\n\r\n#define SCB_SHCSR_MONITORACT_Pos 8U                                /*!< SCB SHCSR: MONITORACT Position */\r\n#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */\r\n\r\n#define SCB_SHCSR_SVCALLACT_Pos 7U                               /*!< SCB SHCSR: SVCALLACT Position */\r\n#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTACT_Pos 3U                                 /*!< SCB SHCSR: USGFAULTACT Position */\r\n#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTACT_Pos 1U                                 /*!< SCB SHCSR: BUSFAULTACT Position */\r\n#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTACT_Pos 0U                                     /*!< SCB SHCSR: MEMFAULTACT Position */\r\n#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */\r\n\r\n/* SCB Configurable Fault Status Register Definitions */\r\n#define SCB_CFSR_USGFAULTSR_Pos 16U                                   /*!< SCB CFSR: Usage Fault Status Register Position */\r\n#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_BUSFAULTSR_Pos 8U                                  /*!< SCB CFSR: Bus Fault Status Register Position */\r\n#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_MEMFAULTSR_Pos 0U                                      /*!< SCB CFSR: Memory Manage Fault Status Register Position */\r\n#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */\r\n\r\n/* SCB Hard Fault Status Register Definitions */\r\n#define SCB_HFSR_DEBUGEVT_Pos 31U                            /*!< SCB HFSR: DEBUGEVT Position */\r\n#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */\r\n\r\n#define SCB_HFSR_FORCED_Pos 30U                          /*!< SCB HFSR: FORCED Position */\r\n#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */\r\n\r\n#define SCB_HFSR_VECTTBL_Pos 1U                            /*!< SCB HFSR: VECTTBL Position */\r\n#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */\r\n\r\n/* SCB Debug Fault Status Register Definitions */\r\n#define SCB_DFSR_EXTERNAL_Pos 4U                             /*!< SCB DFSR: EXTERNAL Position */\r\n#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */\r\n\r\n#define SCB_DFSR_VCATCH_Pos 3U                           /*!< SCB DFSR: VCATCH Position */\r\n#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */\r\n\r\n#define SCB_DFSR_DWTTRAP_Pos 2U                            /*!< SCB DFSR: DWTTRAP Position */\r\n#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */\r\n\r\n#define SCB_DFSR_BKPT_Pos 1U                         /*!< SCB DFSR: BKPT Position */\r\n#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */\r\n\r\n#define SCB_DFSR_HALTED_Pos 0U                               /*!< SCB DFSR: HALTED Position */\r\n#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)\r\n  \\brief    Type definitions for the System Control and ID Register not in the SCB\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control and ID Register not in the SCB.\r\n */\r\ntypedef struct {\r\n  uint32_t       RESERVED0[1U];\r\n  __IM uint32_t  ICTR;  /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */\r\n  __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */\r\n} SCnSCB_Type;\r\n\r\n/* Interrupt Controller Type Register Definitions */\r\n#define SCnSCB_ICTR_INTLINESNUM_Pos 0U                                         /*!< ICTR: INTLINESNUM Position */\r\n#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */\r\n\r\n/* Auxiliary Control Register Definitions */\r\n#define SCnSCB_ACTLR_DISOOFP_Pos 9U                                /*!< ACTLR: DISOOFP Position */\r\n#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */\r\n\r\n#define SCnSCB_ACTLR_DISFPCA_Pos 8U                                /*!< ACTLR: DISFPCA Position */\r\n#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */\r\n\r\n#define SCnSCB_ACTLR_DISFOLD_Pos 2U                                /*!< ACTLR: DISFOLD Position */\r\n#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */\r\n\r\n#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U                                   /*!< ACTLR: DISDEFWBUF Position */\r\n#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */\r\n\r\n#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U                                       /*!< ACTLR: DISMCYCINT Position */\r\n#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */\r\n\r\n/*@} end of group CMSIS_SCnotSCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_ITM     Instrumentation Trace Macrocell (ITM)\r\n  \\brief    Type definitions for the Instrumentation Trace Macrocell (ITM)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Instrumentation Trace Macrocell Register (ITM).\r\n */\r\ntypedef struct {\r\n  __OM union {\r\n    __OM uint8_t  u8;  /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 8-bit */\r\n    __OM uint16_t u16; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 16-bit */\r\n    __OM uint32_t u32; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 32-bit */\r\n  } PORT[32U];         /*!< Offset: 0x000 ( /W)  ITM Stimulus Port Registers */\r\n  uint32_t       RESERVED0[864U];\r\n  __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W)  ITM Trace Enable Register */\r\n  uint32_t       RESERVED1[15U];\r\n  __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */\r\n  uint32_t       RESERVED2[15U];\r\n  __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */\r\n  uint32_t       RESERVED3[29U];\r\n  __OM uint32_t  IWR;  /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */\r\n  __IM uint32_t  IRR;  /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */\r\n  __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */\r\n  uint32_t       RESERVED4[43U];\r\n  __OM uint32_t  LAR; /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */\r\n  __IM uint32_t  LSR; /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */\r\n  uint32_t       RESERVED5[6U];\r\n  __IM uint32_t  PID4; /*!< Offset: 0xFD0 (R/ )  ITM Peripheral Identification Register #4 */\r\n  __IM uint32_t  PID5; /*!< Offset: 0xFD4 (R/ )  ITM Peripheral Identification Register #5 */\r\n  __IM uint32_t  PID6; /*!< Offset: 0xFD8 (R/ )  ITM Peripheral Identification Register #6 */\r\n  __IM uint32_t  PID7; /*!< Offset: 0xFDC (R/ )  ITM Peripheral Identification Register #7 */\r\n  __IM uint32_t  PID0; /*!< Offset: 0xFE0 (R/ )  ITM Peripheral Identification Register #0 */\r\n  __IM uint32_t  PID1; /*!< Offset: 0xFE4 (R/ )  ITM Peripheral Identification Register #1 */\r\n  __IM uint32_t  PID2; /*!< Offset: 0xFE8 (R/ )  ITM Peripheral Identification Register #2 */\r\n  __IM uint32_t  PID3; /*!< Offset: 0xFEC (R/ )  ITM Peripheral Identification Register #3 */\r\n  __IM uint32_t  CID0; /*!< Offset: 0xFF0 (R/ )  ITM Component  Identification Register #0 */\r\n  __IM uint32_t  CID1; /*!< Offset: 0xFF4 (R/ )  ITM Component  Identification Register #1 */\r\n  __IM uint32_t  CID2; /*!< Offset: 0xFF8 (R/ )  ITM Component  Identification Register #2 */\r\n  __IM uint32_t  CID3; /*!< Offset: 0xFFC (R/ )  ITM Component  Identification Register #3 */\r\n} ITM_Type;\r\n\r\n/* ITM Trace Privilege Register Definitions */\r\n#define ITM_TPR_PRIVMASK_Pos 0U                                  /*!< ITM TPR: PRIVMASK Position */\r\n#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */\r\n\r\n/* ITM Trace Control Register Definitions */\r\n#define ITM_TCR_BUSY_Pos 23U                       /*!< ITM TCR: BUSY Position */\r\n#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */\r\n\r\n#define ITM_TCR_TraceBusID_Pos 16U                                /*!< ITM TCR: ATBID Position */\r\n#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */\r\n\r\n#define ITM_TCR_GTSFREQ_Pos 10U                          /*!< ITM TCR: Global timestamp frequency Position */\r\n#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */\r\n\r\n#define ITM_TCR_TSPrescale_Pos 8U                              /*!< ITM TCR: TSPrescale Position */\r\n#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */\r\n\r\n#define ITM_TCR_SWOENA_Pos 4U                          /*!< ITM TCR: SWOENA Position */\r\n#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */\r\n\r\n#define ITM_TCR_DWTENA_Pos 3U                          /*!< ITM TCR: DWTENA Position */\r\n#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */\r\n\r\n#define ITM_TCR_SYNCENA_Pos 2U                           /*!< ITM TCR: SYNCENA Position */\r\n#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */\r\n\r\n#define ITM_TCR_TSENA_Pos 1U                         /*!< ITM TCR: TSENA Position */\r\n#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */\r\n\r\n#define ITM_TCR_ITMENA_Pos 0U                              /*!< ITM TCR: ITM Enable bit Position */\r\n#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */\r\n\r\n/* ITM Integration Write Register Definitions */\r\n#define ITM_IWR_ATVALIDM_Pos 0U                                /*!< ITM IWR: ATVALIDM Position */\r\n#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */\r\n\r\n/* ITM Integration Read Register Definitions */\r\n#define ITM_IRR_ATREADYM_Pos 0U                                /*!< ITM IRR: ATREADYM Position */\r\n#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */\r\n\r\n/* ITM Integration Mode Control Register Definitions */\r\n#define ITM_IMCR_INTEGRATION_Pos 0U                                    /*!< ITM IMCR: INTEGRATION Position */\r\n#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */\r\n\r\n/* ITM Lock Status Register Definitions */\r\n#define ITM_LSR_ByteAcc_Pos 2U                           /*!< ITM LSR: ByteAcc Position */\r\n#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */\r\n\r\n#define ITM_LSR_Access_Pos 1U                          /*!< ITM LSR: Access Position */\r\n#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */\r\n\r\n#define ITM_LSR_Present_Pos 0U                               /*!< ITM LSR: Present Position */\r\n#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_ITM */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)\r\n  \\brief    Type definitions for the Data Watchpoint and Trace (DWT)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Data Watchpoint and Trace Register (DWT).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;      /*!< Offset: 0x000 (R/W)  Control Register */\r\n  __IOM uint32_t CYCCNT;    /*!< Offset: 0x004 (R/W)  Cycle Count Register */\r\n  __IOM uint32_t CPICNT;    /*!< Offset: 0x008 (R/W)  CPI Count Register */\r\n  __IOM uint32_t EXCCNT;    /*!< Offset: 0x00C (R/W)  Exception Overhead Count Register */\r\n  __IOM uint32_t SLEEPCNT;  /*!< Offset: 0x010 (R/W)  Sleep Count Register */\r\n  __IOM uint32_t LSUCNT;    /*!< Offset: 0x014 (R/W)  LSU Count Register */\r\n  __IOM uint32_t FOLDCNT;   /*!< Offset: 0x018 (R/W)  Folded-instruction Count Register */\r\n  __IM uint32_t  PCSR;      /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */\r\n  __IOM uint32_t COMP0;     /*!< Offset: 0x020 (R/W)  Comparator Register 0 */\r\n  __IOM uint32_t MASK0;     /*!< Offset: 0x024 (R/W)  Mask Register 0 */\r\n  __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W)  Function Register 0 */\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t COMP1;     /*!< Offset: 0x030 (R/W)  Comparator Register 1 */\r\n  __IOM uint32_t MASK1;     /*!< Offset: 0x034 (R/W)  Mask Register 1 */\r\n  __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W)  Function Register 1 */\r\n  uint32_t       RESERVED1[1U];\r\n  __IOM uint32_t COMP2;     /*!< Offset: 0x040 (R/W)  Comparator Register 2 */\r\n  __IOM uint32_t MASK2;     /*!< Offset: 0x044 (R/W)  Mask Register 2 */\r\n  __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W)  Function Register 2 */\r\n  uint32_t       RESERVED2[1U];\r\n  __IOM uint32_t COMP3;     /*!< Offset: 0x050 (R/W)  Comparator Register 3 */\r\n  __IOM uint32_t MASK3;     /*!< Offset: 0x054 (R/W)  Mask Register 3 */\r\n  __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W)  Function Register 3 */\r\n} DWT_Type;\r\n\r\n/* DWT Control Register Definitions */\r\n#define DWT_CTRL_NUMCOMP_Pos 28U                             /*!< DWT CTRL: NUMCOMP Position */\r\n#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */\r\n\r\n#define DWT_CTRL_NOTRCPKT_Pos 27U                              /*!< DWT CTRL: NOTRCPKT Position */\r\n#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */\r\n\r\n#define DWT_CTRL_NOEXTTRIG_Pos 26U                               /*!< DWT CTRL: NOEXTTRIG Position */\r\n#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */\r\n\r\n#define DWT_CTRL_NOCYCCNT_Pos 25U                              /*!< DWT CTRL: NOCYCCNT Position */\r\n#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */\r\n\r\n#define DWT_CTRL_NOPRFCNT_Pos 24U                              /*!< DWT CTRL: NOPRFCNT Position */\r\n#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */\r\n\r\n#define DWT_CTRL_CYCEVTENA_Pos 22U                               /*!< DWT CTRL: CYCEVTENA Position */\r\n#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */\r\n\r\n#define DWT_CTRL_FOLDEVTENA_Pos 21U                                /*!< DWT CTRL: FOLDEVTENA Position */\r\n#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */\r\n\r\n#define DWT_CTRL_LSUEVTENA_Pos 20U                               /*!< DWT CTRL: LSUEVTENA Position */\r\n#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */\r\n\r\n#define DWT_CTRL_SLEEPEVTENA_Pos 19U                                 /*!< DWT CTRL: SLEEPEVTENA Position */\r\n#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCEVTENA_Pos 18U                               /*!< DWT CTRL: EXCEVTENA Position */\r\n#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */\r\n\r\n#define DWT_CTRL_CPIEVTENA_Pos 17U                               /*!< DWT CTRL: CPIEVTENA Position */\r\n#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCTRCENA_Pos 16U                               /*!< DWT CTRL: EXCTRCENA Position */\r\n#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */\r\n\r\n#define DWT_CTRL_PCSAMPLENA_Pos 12U                                /*!< DWT CTRL: PCSAMPLENA Position */\r\n#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */\r\n\r\n#define DWT_CTRL_SYNCTAP_Pos 10U                             /*!< DWT CTRL: SYNCTAP Position */\r\n#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */\r\n\r\n#define DWT_CTRL_CYCTAP_Pos 9U                             /*!< DWT CTRL: CYCTAP Position */\r\n#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */\r\n\r\n#define DWT_CTRL_POSTINIT_Pos 5U                               /*!< DWT CTRL: POSTINIT Position */\r\n#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */\r\n\r\n#define DWT_CTRL_POSTPRESET_Pos 1U                                 /*!< DWT CTRL: POSTPRESET Position */\r\n#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */\r\n\r\n#define DWT_CTRL_CYCCNTENA_Pos 0U                                    /*!< DWT CTRL: CYCCNTENA Position */\r\n#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */\r\n\r\n/* DWT CPI Count Register Definitions */\r\n#define DWT_CPICNT_CPICNT_Pos 0U                                    /*!< DWT CPICNT: CPICNT Position */\r\n#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */\r\n\r\n/* DWT Exception Overhead Count Register Definitions */\r\n#define DWT_EXCCNT_EXCCNT_Pos 0U                                    /*!< DWT EXCCNT: EXCCNT Position */\r\n#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */\r\n\r\n/* DWT Sleep Count Register Definitions */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U                                        /*!< DWT SLEEPCNT: SLEEPCNT Position */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */\r\n\r\n/* DWT LSU Count Register Definitions */\r\n#define DWT_LSUCNT_LSUCNT_Pos 0U                                    /*!< DWT LSUCNT: LSUCNT Position */\r\n#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */\r\n\r\n/* DWT Folded-instruction Count Register Definitions */\r\n#define DWT_FOLDCNT_FOLDCNT_Pos 0U                                      /*!< DWT FOLDCNT: FOLDCNT Position */\r\n#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */\r\n\r\n/* DWT Comparator Mask Register Definitions */\r\n#define DWT_MASK_MASK_Pos 0U                                /*!< DWT MASK: MASK Position */\r\n#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */\r\n\r\n/* DWT Comparator Function Register Definitions */\r\n#define DWT_FUNCTION_MATCHED_Pos 24U                                 /*!< DWT FUNCTION: MATCHED Position */\r\n#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR1_Pos 16U                                    /*!< DWT FUNCTION: DATAVADDR1 Position */\r\n#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR0_Pos 12U                                    /*!< DWT FUNCTION: DATAVADDR0 Position */\r\n#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVSIZE_Pos 10U                                   /*!< DWT FUNCTION: DATAVSIZE Position */\r\n#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */\r\n\r\n#define DWT_FUNCTION_LNK1ENA_Pos 9U                                  /*!< DWT FUNCTION: LNK1ENA Position */\r\n#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */\r\n\r\n#define DWT_FUNCTION_DATAVMATCH_Pos 8U                                     /*!< DWT FUNCTION: DATAVMATCH Position */\r\n#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */\r\n\r\n#define DWT_FUNCTION_CYCMATCH_Pos 7U                                   /*!< DWT FUNCTION: CYCMATCH Position */\r\n#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */\r\n\r\n#define DWT_FUNCTION_EMITRANGE_Pos 5U                                    /*!< DWT FUNCTION: EMITRANGE Position */\r\n#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */\r\n\r\n#define DWT_FUNCTION_FUNCTION_Pos 0U                                       /*!< DWT FUNCTION: FUNCTION Position */\r\n#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_DWT */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_TPI     Trace Port Interface (TPI)\r\n  \\brief    Type definitions for the Trace Port Interface (TPI)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Trace Port Interface Register (TPI).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t SSPSR; /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */\r\n  __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */\r\n  uint32_t       RESERVED0[2U];\r\n  __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */\r\n  uint32_t       RESERVED1[55U];\r\n  __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */\r\n  uint32_t       RESERVED2[131U];\r\n  __IM uint32_t  FFSR; /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */\r\n  __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */\r\n  __IM uint32_t  FSCR; /*!< Offset: 0x308 (R/ )  Formatter Synchronization Counter Register */\r\n  uint32_t       RESERVED3[759U];\r\n  __IM uint32_t  TRIGGER;   /*!< Offset: 0xEE8 (R/ )  TRIGGER */\r\n  __IM uint32_t  FIFO0;     /*!< Offset: 0xEEC (R/ )  Integration ETM Data */\r\n  __IM uint32_t  ITATBCTR2; /*!< Offset: 0xEF0 (R/ )  ITATBCTR2 */\r\n  uint32_t       RESERVED4[1U];\r\n  __IM uint32_t  ITATBCTR0; /*!< Offset: 0xEF8 (R/ )  ITATBCTR0 */\r\n  __IM uint32_t  FIFO1;     /*!< Offset: 0xEFC (R/ )  Integration ITM Data */\r\n  __IOM uint32_t ITCTRL;    /*!< Offset: 0xF00 (R/W)  Integration Mode Control */\r\n  uint32_t       RESERVED5[39U];\r\n  __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W)  Claim tag set */\r\n  __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W)  Claim tag clear */\r\n  uint32_t       RESERVED7[8U];\r\n  __IM uint32_t  DEVID;   /*!< Offset: 0xFC8 (R/ )  TPIU_DEVID */\r\n  __IM uint32_t  DEVTYPE; /*!< Offset: 0xFCC (R/ )  TPIU_DEVTYPE */\r\n} TPI_Type;\r\n\r\n/* TPI Asynchronous Clock Prescaler Register Definitions */\r\n#define TPI_ACPR_PRESCALER_Pos 0U                                       /*!< TPI ACPR: PRESCALER Position */\r\n#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */\r\n\r\n/* TPI Selected Pin Protocol Register Definitions */\r\n#define TPI_SPPR_TXMODE_Pos 0U                                 /*!< TPI SPPR: TXMODE Position */\r\n#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */\r\n\r\n/* TPI Formatter and Flush Status Register Definitions */\r\n#define TPI_FFSR_FtNonStop_Pos 3U                                /*!< TPI FFSR: FtNonStop Position */\r\n#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */\r\n\r\n#define TPI_FFSR_TCPresent_Pos 2U                                /*!< TPI FFSR: TCPresent Position */\r\n#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */\r\n\r\n#define TPI_FFSR_FtStopped_Pos 1U                                /*!< TPI FFSR: FtStopped Position */\r\n#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */\r\n\r\n#define TPI_FFSR_FlInProg_Pos 0U                                   /*!< TPI FFSR: FlInProg Position */\r\n#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */\r\n\r\n/* TPI Formatter and Flush Control Register Definitions */\r\n#define TPI_FFCR_TrigIn_Pos 8U                             /*!< TPI FFCR: TrigIn Position */\r\n#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */\r\n\r\n#define TPI_FFCR_EnFCont_Pos 1U                              /*!< TPI FFCR: EnFCont Position */\r\n#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */\r\n\r\n/* TPI TRIGGER Register Definitions */\r\n#define TPI_TRIGGER_TRIGGER_Pos 0U                                     /*!< TPI TRIGGER: TRIGGER Position */\r\n#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */\r\n\r\n/* TPI Integration ETM Data Register Definitions (FIFO0) */\r\n#define TPI_FIFO0_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO0: ITM_ATVALID Position */\r\n#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO0: ITM_bytecount Position */\r\n#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO0: ETM_ATVALID Position */\r\n#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO0: ETM_bytecount Position */\r\n#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM2_Pos 16U                            /*!< TPI FIFO0: ETM2 Position */\r\n#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */\r\n\r\n#define TPI_FIFO0_ETM1_Pos 8U                             /*!< TPI FIFO0: ETM1 Position */\r\n#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */\r\n\r\n#define TPI_FIFO0_ETM0_Pos 0U                                 /*!< TPI FIFO0: ETM0 Position */\r\n#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */\r\n\r\n/* TPI ITATBCTR2 Register Definitions */\r\n#define TPI_ITATBCTR2_ATREADY_Pos 0U                                       /*!< TPI ITATBCTR2: ATREADY Position */\r\n#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/) /*!< TPI ITATBCTR2: ATREADY Mask */\r\n\r\n/* TPI Integration ITM Data Register Definitions (FIFO1) */\r\n#define TPI_FIFO1_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO1: ITM_ATVALID Position */\r\n#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO1: ITM_bytecount Position */\r\n#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO1: ETM_ATVALID Position */\r\n#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO1: ETM_bytecount Position */\r\n#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ITM2_Pos 16U                            /*!< TPI FIFO1: ITM2 Position */\r\n#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */\r\n\r\n#define TPI_FIFO1_ITM1_Pos 8U                             /*!< TPI FIFO1: ITM1 Position */\r\n#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */\r\n\r\n#define TPI_FIFO1_ITM0_Pos 0U                                 /*!< TPI FIFO1: ITM0 Position */\r\n#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */\r\n\r\n/* TPI ITATBCTR0 Register Definitions */\r\n#define TPI_ITATBCTR0_ATREADY_Pos 0U                                       /*!< TPI ITATBCTR0: ATREADY Position */\r\n#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/) /*!< TPI ITATBCTR0: ATREADY Mask */\r\n\r\n/* TPI Integration Mode Control Register Definitions */\r\n#define TPI_ITCTRL_Mode_Pos 0U                                 /*!< TPI ITCTRL: Mode Position */\r\n#define TPI_ITCTRL_Mode_Msk (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */\r\n\r\n/* TPI DEVID Register Definitions */\r\n#define TPI_DEVID_NRZVALID_Pos 11U                               /*!< TPI DEVID: NRZVALID Position */\r\n#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */\r\n\r\n#define TPI_DEVID_MANCVALID_Pos 10U                                /*!< TPI DEVID: MANCVALID Position */\r\n#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */\r\n\r\n#define TPI_DEVID_PTINVALID_Pos 9U                                 /*!< TPI DEVID: PTINVALID Position */\r\n#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */\r\n\r\n#define TPI_DEVID_MinBufSz_Pos 6U                                /*!< TPI DEVID: MinBufSz Position */\r\n#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */\r\n\r\n#define TPI_DEVID_AsynClkIn_Pos 5U                                 /*!< TPI DEVID: AsynClkIn Position */\r\n#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */\r\n\r\n#define TPI_DEVID_NrTraceInput_Pos 0U                                         /*!< TPI DEVID: NrTraceInput Position */\r\n#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */\r\n\r\n/* TPI DEVTYPE Register Definitions */\r\n#define TPI_DEVTYPE_MajorType_Pos 4U                                   /*!< TPI DEVTYPE: MajorType Position */\r\n#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */\r\n\r\n#define TPI_DEVTYPE_SubType_Pos 0U                                     /*!< TPI DEVTYPE: SubType Position */\r\n#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_TPI */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_MPU     Memory Protection Unit (MPU)\r\n  \\brief    Type definitions for the Memory Protection Unit (MPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Memory Protection Unit (MPU).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  TYPE;    /*!< Offset: 0x000 (R/ )  MPU Type Register */\r\n  __IOM uint32_t CTRL;    /*!< Offset: 0x004 (R/W)  MPU Control Register */\r\n  __IOM uint32_t RNR;     /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */\r\n  __IOM uint32_t RBAR;    /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */\r\n  __IOM uint32_t RASR;    /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W)  MPU Alias 1 Region Base Address Register */\r\n  __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W)  MPU Alias 1 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W)  MPU Alias 2 Region Base Address Register */\r\n  __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W)  MPU Alias 2 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W)  MPU Alias 3 Region Base Address Register */\r\n  __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W)  MPU Alias 3 Region Attribute and Size Register */\r\n} MPU_Type;\r\n\r\n/* MPU Type Register Definitions */\r\n#define MPU_TYPE_IREGION_Pos 16U                              /*!< MPU TYPE: IREGION Position */\r\n#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */\r\n\r\n#define MPU_TYPE_DREGION_Pos 8U                               /*!< MPU TYPE: DREGION Position */\r\n#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */\r\n\r\n#define MPU_TYPE_SEPARATE_Pos 0U                                 /*!< MPU TYPE: SEPARATE Position */\r\n#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */\r\n\r\n/* MPU Control Register Definitions */\r\n#define MPU_CTRL_PRIVDEFENA_Pos 2U                               /*!< MPU CTRL: PRIVDEFENA Position */\r\n#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */\r\n\r\n#define MPU_CTRL_HFNMIENA_Pos 1U                             /*!< MPU CTRL: HFNMIENA Position */\r\n#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */\r\n\r\n#define MPU_CTRL_ENABLE_Pos 0U                               /*!< MPU CTRL: ENABLE Position */\r\n#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */\r\n\r\n/* MPU Region Number Register Definitions */\r\n#define MPU_RNR_REGION_Pos 0U                                 /*!< MPU RNR: REGION Position */\r\n#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */\r\n\r\n/* MPU Region Base Address Register Definitions */\r\n#define MPU_RBAR_ADDR_Pos 5U                                 /*!< MPU RBAR: ADDR Position */\r\n#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */\r\n\r\n#define MPU_RBAR_VALID_Pos 4U                          /*!< MPU RBAR: VALID Position */\r\n#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */\r\n\r\n#define MPU_RBAR_REGION_Pos 0U                                 /*!< MPU RBAR: REGION Position */\r\n#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */\r\n\r\n/* MPU Region Attribute and Size Register Definitions */\r\n#define MPU_RASR_ATTRS_Pos 16U                              /*!< MPU RASR: MPU Region Attribute field Position */\r\n#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */\r\n\r\n#define MPU_RASR_XN_Pos 28U                      /*!< MPU RASR: ATTRS.XN Position */\r\n#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */\r\n\r\n#define MPU_RASR_AP_Pos 24U                        /*!< MPU RASR: ATTRS.AP Position */\r\n#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */\r\n\r\n#define MPU_RASR_TEX_Pos 19U                         /*!< MPU RASR: ATTRS.TEX Position */\r\n#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */\r\n\r\n#define MPU_RASR_S_Pos 18U                     /*!< MPU RASR: ATTRS.S Position */\r\n#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */\r\n\r\n#define MPU_RASR_C_Pos 17U                     /*!< MPU RASR: ATTRS.C Position */\r\n#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */\r\n\r\n#define MPU_RASR_B_Pos 16U                     /*!< MPU RASR: ATTRS.B Position */\r\n#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */\r\n\r\n#define MPU_RASR_SRD_Pos 8U                           /*!< MPU RASR: Sub-Region Disable Position */\r\n#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */\r\n\r\n#define MPU_RASR_SIZE_Pos 1U                            /*!< MPU RASR: Region Size Field Position */\r\n#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */\r\n\r\n#define MPU_RASR_ENABLE_Pos 0U                               /*!< MPU RASR: Region enable bit Position */\r\n#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */\r\n\r\n/*@} end of group CMSIS_MPU */\r\n#endif\r\n\r\n#if (__FPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_FPU     Floating Point Unit (FPU)\r\n  \\brief    Type definitions for the Floating Point Unit (FPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Floating Point Unit (FPU).\r\n */\r\ntypedef struct {\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t FPCCR;  /*!< Offset: 0x004 (R/W)  Floating-Point Context Control Register */\r\n  __IOM uint32_t FPCAR;  /*!< Offset: 0x008 (R/W)  Floating-Point Context Address Register */\r\n  __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W)  Floating-Point Default Status Control Register */\r\n  __IM uint32_t  MVFR0;  /*!< Offset: 0x010 (R/ )  Media and FP Feature Register 0 */\r\n  __IM uint32_t  MVFR1;  /*!< Offset: 0x014 (R/ )  Media and FP Feature Register 1 */\r\n} FPU_Type;\r\n\r\n/* Floating-Point Context Control Register Definitions */\r\n#define FPU_FPCCR_ASPEN_Pos 31U                          /*!< FPCCR: ASPEN bit Position */\r\n#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */\r\n\r\n#define FPU_FPCCR_LSPEN_Pos 30U                          /*!< FPCCR: LSPEN Position */\r\n#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */\r\n\r\n#define FPU_FPCCR_MONRDY_Pos 8U                            /*!< FPCCR: MONRDY Position */\r\n#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */\r\n\r\n#define FPU_FPCCR_BFRDY_Pos 6U                           /*!< FPCCR: BFRDY Position */\r\n#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */\r\n\r\n#define FPU_FPCCR_MMRDY_Pos 5U                           /*!< FPCCR: MMRDY Position */\r\n#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */\r\n\r\n#define FPU_FPCCR_HFRDY_Pos 4U                           /*!< FPCCR: HFRDY Position */\r\n#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */\r\n\r\n#define FPU_FPCCR_THREAD_Pos 3U                            /*!< FPCCR: processor mode bit Position */\r\n#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */\r\n\r\n#define FPU_FPCCR_USER_Pos 1U                          /*!< FPCCR: privilege level bit Position */\r\n#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */\r\n\r\n#define FPU_FPCCR_LSPACT_Pos 0U                                /*!< FPCCR: Lazy state preservation active bit Position */\r\n#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */\r\n\r\n/* Floating-Point Context Address Register Definitions */\r\n#define FPU_FPCAR_ADDRESS_Pos 3U                                      /*!< FPCAR: ADDRESS bit Position */\r\n#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */\r\n\r\n/* Floating-Point Default Status Control Register Definitions */\r\n#define FPU_FPDSCR_AHP_Pos 26U                         /*!< FPDSCR: AHP bit Position */\r\n#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */\r\n\r\n#define FPU_FPDSCR_DN_Pos 25U                        /*!< FPDSCR: DN bit Position */\r\n#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */\r\n\r\n#define FPU_FPDSCR_FZ_Pos 24U                        /*!< FPDSCR: FZ bit Position */\r\n#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */\r\n\r\n#define FPU_FPDSCR_RMode_Pos 22U                           /*!< FPDSCR: RMode bit Position */\r\n#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */\r\n\r\n/* Media and FP Feature Register 0 Definitions */\r\n#define FPU_MVFR0_FP_rounding_modes_Pos 28U                                        /*!< MVFR0: FP rounding modes bits Position */\r\n#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */\r\n\r\n#define FPU_MVFR0_Short_vectors_Pos 24U                                    /*!< MVFR0: Short vectors bits Position */\r\n#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */\r\n\r\n#define FPU_MVFR0_Square_root_Pos 20U                                  /*!< MVFR0: Square root bits Position */\r\n#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */\r\n\r\n#define FPU_MVFR0_Divide_Pos 16U                             /*!< MVFR0: Divide bits Position */\r\n#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */\r\n\r\n#define FPU_MVFR0_FP_excep_trapping_Pos 12U                                        /*!< MVFR0: FP exception trapping bits Position */\r\n#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */\r\n\r\n#define FPU_MVFR0_Double_precision_Pos 8U                                        /*!< MVFR0: Double-precision bits Position */\r\n#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */\r\n\r\n#define FPU_MVFR0_Single_precision_Pos 4U                                        /*!< MVFR0: Single-precision bits Position */\r\n#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */\r\n\r\n#define FPU_MVFR0_A_SIMD_registers_Pos 0U                                            /*!< MVFR0: A_SIMD registers bits Position */\r\n#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */\r\n\r\n/* Media and FP Feature Register 1 Definitions */\r\n#define FPU_MVFR1_FP_fused_MAC_Pos 28U                                   /*!< MVFR1: FP fused MAC bits Position */\r\n#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */\r\n\r\n#define FPU_MVFR1_FP_HPFP_Pos 24U                              /*!< MVFR1: FP HPFP bits Position */\r\n#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */\r\n\r\n#define FPU_MVFR1_D_NaN_mode_Pos 4U                                  /*!< MVFR1: D_NaN mode bits Position */\r\n#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */\r\n\r\n#define FPU_MVFR1_FtZ_mode_Pos 0U                                    /*!< MVFR1: FtZ mode bits Position */\r\n#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */\r\n\r\n/*@} end of group CMSIS_FPU */\r\n#endif\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    Type definitions for the Core Debug Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Core Debug Register (CoreDebug).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */\r\n  __OM uint32_t  DCRSR; /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */\r\n  __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */\r\n  __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */\r\n} CoreDebug_Type;\r\n\r\n/* Debug Halting Control and Status Register Definitions */\r\n#define CoreDebug_DHCSR_DBGKEY_Pos 16U                                      /*!< CoreDebug DHCSR: DBGKEY Position */\r\n#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U                                     /*!< CoreDebug DHCSR: S_RESET_ST Position */\r\n#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U                                      /*!< CoreDebug DHCSR: S_RETIRE_ST Position */\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U                                   /*!< CoreDebug DHCSR: S_LOCKUP Position */\r\n#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_SLEEP_Pos 18U                                  /*!< CoreDebug DHCSR: S_SLEEP Position */\r\n#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_HALT_Pos 17U                                 /*!< CoreDebug DHCSR: S_HALT Position */\r\n#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_S_REGRDY_Pos 16U                                   /*!< CoreDebug DHCSR: S_REGRDY Position */\r\n#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */\r\n\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U                                       /*!< CoreDebug DHCSR: C_SNAPSTALL Position */\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */\r\n\r\n#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U                                      /*!< CoreDebug DHCSR: C_MASKINTS Position */\r\n#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */\r\n\r\n#define CoreDebug_DHCSR_C_STEP_Pos 2U                                  /*!< CoreDebug DHCSR: C_STEP Position */\r\n#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */\r\n\r\n#define CoreDebug_DHCSR_C_HALT_Pos 1U                                  /*!< CoreDebug DHCSR: C_HALT Position */\r\n#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U                                         /*!< CoreDebug DHCSR: C_DEBUGEN Position */\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */\r\n\r\n/* Debug Core Register Selector Register Definitions */\r\n#define CoreDebug_DCRSR_REGWnR_Pos 16U                                 /*!< CoreDebug DCRSR: REGWnR Position */\r\n#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */\r\n\r\n#define CoreDebug_DCRSR_REGSEL_Pos 0U                                         /*!< CoreDebug DCRSR: REGSEL Position */\r\n#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */\r\n\r\n/* Debug Exception and Monitor Control Register Definitions */\r\n#define CoreDebug_DEMCR_TRCENA_Pos 24U                                 /*!< CoreDebug DEMCR: TRCENA Position */\r\n#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_REQ_Pos 19U                                  /*!< CoreDebug DEMCR: MON_REQ Position */\r\n#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_STEP_Pos 18U                                   /*!< CoreDebug DEMCR: MON_STEP Position */\r\n#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_PEND_Pos 17U                                   /*!< CoreDebug DEMCR: MON_PEND Position */\r\n#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_EN_Pos 16U                                 /*!< CoreDebug DEMCR: MON_EN Position */\r\n#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U                                     /*!< CoreDebug DEMCR: VC_HARDERR Position */\r\n#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_INTERR_Pos 9U                                     /*!< CoreDebug DEMCR: VC_INTERR Position */\r\n#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U                                     /*!< CoreDebug DEMCR: VC_BUSERR Position */\r\n#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_STATERR_Pos 7U                                      /*!< CoreDebug DEMCR: VC_STATERR Position */\r\n#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U                                     /*!< CoreDebug DEMCR: VC_CHKERR Position */\r\n#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U                                      /*!< CoreDebug DEMCR: VC_NOCPERR Position */\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_MMERR_Pos 4U                                    /*!< CoreDebug DEMCR: VC_MMERR Position */\r\n#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */\r\n#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */\r\n\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) ((value << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) ((value & field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of Cortex-M4 Hardware */\r\n#define SCS_BASE       (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define ITM_BASE       (0xE0000000UL)        /*!< ITM Base Address */\r\n#define DWT_BASE       (0xE0001000UL)        /*!< DWT Base Address */\r\n#define TPI_BASE       (0xE0040000UL)        /*!< TPI Base Address */\r\n#define CoreDebug_BASE (0xE000EDF0UL)        /*!< Core Debug Base Address */\r\n#define SysTick_BASE   (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE      (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE       (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCnSCB    ((SCnSCB_Type *)SCS_BASE)          /*!< System control Register not in SCB */\r\n#define SCB       ((SCB_Type *)SCB_BASE)             /*!< SCB configuration struct */\r\n#define SysTick   ((SysTick_Type *)SysTick_BASE)     /*!< SysTick configuration struct */\r\n#define NVIC      ((NVIC_Type *)NVIC_BASE)           /*!< NVIC configuration struct */\r\n#define ITM       ((ITM_Type *)ITM_BASE)             /*!< ITM configuration struct */\r\n#define DWT       ((DWT_Type *)DWT_BASE)             /*!< DWT configuration struct */\r\n#define TPI       ((TPI_Type *)TPI_BASE)             /*!< TPI configuration struct */\r\n#define CoreDebug ((CoreDebug_Type *)CoreDebug_BASE) /*!< Core Debug configuration struct */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n#define MPU_BASE (SCS_BASE + 0x0D90UL)  /*!< Memory Protection Unit */\r\n#define MPU      ((MPU_Type *)MPU_BASE) /*!< Memory Protection Unit */\r\n#endif\r\n\r\n#if (__FPU_PRESENT == 1U)\r\n#define FPU_BASE (SCS_BASE + 0x0F30UL)  /*!< Floating Point Unit */\r\n#define FPU      ((FPU_Type *)FPU_BASE) /*!< Floating Point Unit */\r\n#endif\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Debug Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Set Priority Grouping\r\n  \\details Sets the priority grouping field using the required unlock sequence.\r\n           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.\r\n           Only values from 0..7 are used.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]      PriorityGroup  Priority grouping field.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) {\r\n  uint32_t reg_value;\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n\r\n  reg_value = SCB->AIRCR;                                                                             /* read old register configuration    */\r\n  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk));                         /* clear bits to change               */\r\n  reg_value  = (reg_value | ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (PriorityGroupTmp << 8U)); /* Insert write key and priorty group */\r\n  SCB->AIRCR = reg_value;\r\n}\r\n\r\n/**\r\n  \\brief   Get Priority Grouping\r\n  \\details Reads the priority grouping field from the NVIC Interrupt Controller.\r\n  \\return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) { return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); }\r\n\r\n/**\r\n  \\brief   Enable External Interrupt\r\n  \\details Enables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Disable External Interrupt\r\n  \\details Disables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) { NVIC->ICER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) {\r\n  return ((uint32_t)(((NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));\r\n}\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  Interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) { NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) { NVIC->ICPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Active Interrupt\r\n  \\details Reads the active register in NVIC and returns the active bit.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not active.\r\n  \\return             1  Interrupt status is active.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) { return ((uint32_t)(((NVIC->IABR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); }\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of an interrupt.\r\n  \\note    The priority cannot be set for every core interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) < 0) {\r\n    SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL) - 4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  } else {\r\n    NVIC->IP[((uint32_t)(int32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of an interrupt.\r\n           The interrupt number can be positive to specify an external (device specific) interrupt,\r\n           or negative to specify an internal (core) interrupt.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) < 0) {\r\n    return (((uint32_t)SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL) - 4UL] >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return (((uint32_t)NVIC->IP[((uint32_t)(int32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Encode Priority\r\n  \\details Encodes the priority for an interrupt with the given priority group,\r\n           preemptive priority value, and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [in]   PreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [in]       SubPriority  Subpriority value (starting from 0).\r\n  \\return                        Encoded priority. Value can be used in the function \\ref NVIC_SetPriority().\r\n */\r\n__STATIC_INLINE uint32_t NVIC_EncodePriority(uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  return (((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | ((SubPriority & (uint32_t)((1UL << (SubPriorityBits)) - 1UL))));\r\n}\r\n\r\n/**\r\n  \\brief   Decode Priority\r\n  \\details Decodes an interrupt priority value with a given priority group to\r\n           preemptive priority value and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.\r\n  \\param [in]         Priority   Priority value, which can be retrieved with the function \\ref NVIC_GetPriority().\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [out] pPreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [out]     pSubPriority  Subpriority value (starting from 0).\r\n */\r\n__STATIC_INLINE void NVIC_DecodePriority(uint32_t Priority, uint32_t PriorityGroup, uint32_t *const pPreemptPriority, uint32_t *const pSubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);\r\n  *pSubPriority     = (Priority) & (uint32_t)((1UL << (SubPriorityBits)) - 1UL);\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__STATIC_INLINE void NVIC_SystemReset(void) {\r\n  __DSB();                                                                                                                         /* Ensure all outstanding memory accesses included\r\n                                                                                                                                      buffered write are completed before reset */\r\n  SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */\r\n  __DSB();                                                                                                                         /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n/* ##################################### Debug In/Output function ########################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_core_DebugFunctions ITM Functions\r\n  \\brief    Functions that access the ITM debug interface.\r\n  @{\r\n */\r\n\r\nextern volatile int32_t ITM_RxBuffer;  /*!< External variable to receive characters. */\r\n#define ITM_RXBUFFER_EMPTY 0x5AA55AA5U /*!< Value identifying \\ref ITM_RxBuffer is ready for next character. */\r\n\r\n/**\r\n  \\brief   ITM Send Character\r\n  \\details Transmits a character via the ITM channel 0, and\r\n           \\li Just returns when no debugger is connected that has booked the output.\r\n           \\li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.\r\n  \\param [in]     ch  Character to transmit.\r\n  \\returns            Character to transmit.\r\n */\r\n__STATIC_INLINE uint32_t ITM_SendChar(uint32_t ch) {\r\n  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */\r\n      ((ITM->TER & 1UL) != 0UL))                  /* ITM Port #0 enabled */\r\n  {\r\n    while (ITM->PORT[0U].u32 == 0UL) {\r\n      __NOP();\r\n    }\r\n    ITM->PORT[0U].u8 = (uint8_t)ch;\r\n  }\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Receive Character\r\n  \\details Inputs a character via the external variable \\ref ITM_RxBuffer.\r\n  \\return             Received character.\r\n  \\return         -1  No character pending.\r\n */\r\n__STATIC_INLINE int32_t ITM_ReceiveChar(void) {\r\n  int32_t ch = -1; /* no character available */\r\n\r\n  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) {\r\n    ch           = ITM_RxBuffer;\r\n    ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */\r\n  }\r\n\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Check Character\r\n  \\details Checks whether a character is pending for reading in the variable \\ref ITM_RxBuffer.\r\n  \\return          0  No character available.\r\n  \\return          1  Character available.\r\n */\r\n__STATIC_INLINE int32_t ITM_CheckChar(void) {\r\n\r\n  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {\r\n    return (0); /* no character available */\r\n  } else {\r\n    return (1); /*    character available */\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_core_DebugFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM4_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Include/core_cm7.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cm7.h\r\n                                                                              * @brief    CMSIS Cortex-M7 Core Peripheral Access Layer Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CM7_H_GENERIC\r\n#define __CORE_CM7_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup Cortex_M7\r\n  @{\r\n */\r\n\r\n/*  CMSIS CM7 definitions */\r\n#define __CM7_CMSIS_VERSION_MAIN (0x04U)                                                       /*!< [31:16] CMSIS HAL main version */\r\n#define __CM7_CMSIS_VERSION_SUB  (0x1EU)                                                       /*!< [15:0]  CMSIS HAL sub version */\r\n#define __CM7_CMSIS_VERSION      ((__CM7_CMSIS_VERSION_MAIN << 16U) | __CM7_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */\r\n\r\n#define __CORTEX_M (0x07U) /*!< Cortex-M Core */\r\n\r\n#if defined(__CC_ARM)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__GNUC__)\r\n#define __ASM           __asm  /*!< asm keyword for GNU Compiler */\r\n#define __INLINE        inline /*!< inline keyword for GNU Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__ICCARM__)\r\n#define __ASM           __asm  /*!< asm keyword for IAR Compiler */\r\n#define __INLINE        inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TMS470__)\r\n#define __ASM           __asm /*!< asm keyword for TI CCS Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TASKING__)\r\n#define __ASM           __asm  /*!< asm keyword for TASKING Compiler */\r\n#define __INLINE        inline /*!< inline keyword for TASKING Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__CSMC__)\r\n#define __packed\r\n#define __ASM           _asm   /*!< asm keyword for COSMIC Compiler */\r\n#define __INLINE        inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */\r\n#define __STATIC_INLINE static inline\r\n\r\n#else\r\n#error Unknown compiler\r\n#endif\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions.\r\n*/\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#if (__FPU_PRESENT == 1)\r\n#define __FPU_USED 1U\r\n#else\r\n#warning \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__TMS470__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"core_cmFunc.h\"  /* Core Function Access */\r\n#include \"core_cmInstr.h\" /* Core Instruction Access */\r\n#include \"core_cmSimd.h\"  /* Compiler specific SIMD Intrinsics */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM7_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_CM7_H_DEPENDANT\r\n#define __CORE_CM7_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __CM7_REV\r\n#define __CM7_REV 0x0000U\r\n#warning \"__CM7_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __FPU_PRESENT\r\n#define __FPU_PRESENT 0U\r\n#warning \"__FPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __MPU_PRESENT\r\n#define __MPU_PRESENT 0U\r\n#warning \"__MPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __ICACHE_PRESENT\r\n#define __ICACHE_PRESENT 0U\r\n#warning \"__ICACHE_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __DCACHE_PRESENT\r\n#define __DCACHE_PRESENT 0U\r\n#warning \"__DCACHE_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __DTCM_PRESENT\r\n#define __DTCM_PRESENT 0U\r\n#warning \"__DTCM_PRESENT        not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 3U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group Cortex_M7 */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n  - Core Debug Register\r\n  - Core MPU Register\r\n  - Core FPU Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 16; /*!< bit:  0..15  Reserved */\r\n    uint32_t GE : 4;          /*!< bit: 16..19  Greater than or Equal flags */\r\n    uint32_t _reserved1 : 7;  /*!< bit: 20..26  Reserved */\r\n    uint32_t Q : 1;           /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n#define APSR_Q_Pos 27U                 /*!< APSR: Q Position */\r\n#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */\r\n\r\n#define APSR_GE_Pos 16U                    /*!< APSR: GE Position */\r\n#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;        /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 7; /*!< bit:  9..15  Reserved */\r\n    uint32_t GE : 4;         /*!< bit: 16..19  Greater than or Equal flags */\r\n    uint32_t _reserved1 : 4; /*!< bit: 20..23  Reserved */\r\n    uint32_t T : 1;          /*!< bit:     24  Thumb bit        (read 0) */\r\n    uint32_t IT : 2;         /*!< bit: 25..26  saved IT state   (read 0) */\r\n    uint32_t Q : 1;          /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;          /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;          /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;          /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;          /*!< bit:     31  Negative condition code flag */\r\n  } b;                       /*!< Structure used for bit  access */\r\n  uint32_t w;                /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_Q_Pos 27U                 /*!< xPSR: Q Position */\r\n#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */\r\n\r\n#define xPSR_IT_Pos 25U                  /*!< xPSR: IT Position */\r\n#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_GE_Pos 16U                    /*!< xPSR: GE Position */\r\n#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t nPRIV : 1;       /*!< bit:      0  Execution privilege in Thread mode */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t FPCA : 1;        /*!< bit:      2  FP extension active flag */\r\n    uint32_t _reserved0 : 29; /*!< bit:  3..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_FPCA_Pos 2U                        /*!< CONTROL: FPCA Position */\r\n#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */\r\n\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n#define CONTROL_nPRIV_Pos 0U                             /*!< CONTROL: nPRIV Position */\r\n#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[24U];\r\n  __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[24U];\r\n  __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[24U];\r\n  __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[24U];\r\n  __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */\r\n  uint32_t       RESERVED4[56U];\r\n  __IOM uint8_t  IP[240U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */\r\n  uint32_t       RESERVED5[644U];\r\n  __OM uint32_t  STIR; /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */\r\n} NVIC_Type;\r\n\r\n/* Software Triggered Interrupt Register Definitions */\r\n#define NVIC_STIR_INTID_Pos 0U                                   /*!< STIR: INTLINESNUM Position */\r\n#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID;       /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;        /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n  __IOM uint32_t VTOR;        /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */\r\n  __IOM uint32_t AIRCR;       /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;         /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;         /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  __IOM uint8_t  SHPR[12U];   /*!< Offset: 0x018 (R/W)  System Handlers Priority Registers (4-7, 8-11, 12-15) */\r\n  __IOM uint32_t SHCSR;       /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n  __IOM uint32_t CFSR;        /*!< Offset: 0x028 (R/W)  Configurable Fault Status Register */\r\n  __IOM uint32_t HFSR;        /*!< Offset: 0x02C (R/W)  HardFault Status Register */\r\n  __IOM uint32_t DFSR;        /*!< Offset: 0x030 (R/W)  Debug Fault Status Register */\r\n  __IOM uint32_t MMFAR;       /*!< Offset: 0x034 (R/W)  MemManage Fault Address Register */\r\n  __IOM uint32_t BFAR;        /*!< Offset: 0x038 (R/W)  BusFault Address Register */\r\n  __IOM uint32_t AFSR;        /*!< Offset: 0x03C (R/W)  Auxiliary Fault Status Register */\r\n  __IM uint32_t  ID_PFR[2U];  /*!< Offset: 0x040 (R/ )  Processor Feature Register */\r\n  __IM uint32_t  ID_DFR;      /*!< Offset: 0x048 (R/ )  Debug Feature Register */\r\n  __IM uint32_t  ID_AFR;      /*!< Offset: 0x04C (R/ )  Auxiliary Feature Register */\r\n  __IM uint32_t  ID_MFR[4U];  /*!< Offset: 0x050 (R/ )  Memory Model Feature Register */\r\n  __IM uint32_t  ID_ISAR[5U]; /*!< Offset: 0x060 (R/ )  Instruction Set Attributes Register */\r\n  uint32_t       RESERVED0[1U];\r\n  __IM uint32_t  CLIDR;  /*!< Offset: 0x078 (R/ )  Cache Level ID register */\r\n  __IM uint32_t  CTR;    /*!< Offset: 0x07C (R/ )  Cache Type register */\r\n  __IM uint32_t  CCSIDR; /*!< Offset: 0x080 (R/ )  Cache Size ID Register */\r\n  __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W)  Cache Size Selection Register */\r\n  __IOM uint32_t CPACR;  /*!< Offset: 0x088 (R/W)  Coprocessor Access Control Register */\r\n  uint32_t       RESERVED3[93U];\r\n  __OM uint32_t  STIR; /*!< Offset: 0x200 ( /W)  Software Triggered Interrupt Register */\r\n  uint32_t       RESERVED4[15U];\r\n  __IM uint32_t  MVFR0; /*!< Offset: 0x240 (R/ )  Media and VFP Feature Register 0 */\r\n  __IM uint32_t  MVFR1; /*!< Offset: 0x244 (R/ )  Media and VFP Feature Register 1 */\r\n  __IM uint32_t  MVFR2; /*!< Offset: 0x248 (R/ )  Media and VFP Feature Register 1 */\r\n  uint32_t       RESERVED5[1U];\r\n  __OM uint32_t  ICIALLU; /*!< Offset: 0x250 ( /W)  I-Cache Invalidate All to PoU */\r\n  uint32_t       RESERVED6[1U];\r\n  __OM uint32_t  ICIMVAU;  /*!< Offset: 0x258 ( /W)  I-Cache Invalidate by MVA to PoU */\r\n  __OM uint32_t  DCIMVAC;  /*!< Offset: 0x25C ( /W)  D-Cache Invalidate by MVA to PoC */\r\n  __OM uint32_t  DCISW;    /*!< Offset: 0x260 ( /W)  D-Cache Invalidate by Set-way */\r\n  __OM uint32_t  DCCMVAU;  /*!< Offset: 0x264 ( /W)  D-Cache Clean by MVA to PoU */\r\n  __OM uint32_t  DCCMVAC;  /*!< Offset: 0x268 ( /W)  D-Cache Clean by MVA to PoC */\r\n  __OM uint32_t  DCCSW;    /*!< Offset: 0x26C ( /W)  D-Cache Clean by Set-way */\r\n  __OM uint32_t  DCCIMVAC; /*!< Offset: 0x270 ( /W)  D-Cache Clean and Invalidate by MVA to PoC */\r\n  __OM uint32_t  DCCISW;   /*!< Offset: 0x274 ( /W)  D-Cache Clean and Invalidate by Set-way */\r\n  uint32_t       RESERVED7[6U];\r\n  __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W)  Instruction Tightly-Coupled Memory Control Register */\r\n  __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W)  Data Tightly-Coupled Memory Control Registers */\r\n  __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W)  AHBP Control Register */\r\n  __IOM uint32_t CACR;   /*!< Offset: 0x29C (R/W)  L1 Cache Control Register */\r\n  __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W)  AHB Slave Control Register */\r\n  uint32_t       RESERVED8[1U];\r\n  __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W)  Auxiliary Bus Fault Status Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_RETTOBASE_Pos 11U                             /*!< SCB ICSR: RETTOBASE Position */\r\n#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n/* SCB Vector Table Offset Register Definitions */\r\n#define SCB_VTOR_TBLOFF_Pos 7U                                   /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_PRIGROUP_Pos 8U                              /*!< SCB AIRCR: PRIGROUP Position */\r\n#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n#define SCB_AIRCR_VECTRESET_Pos 0U                                   /*!< SCB AIRCR: VECTRESET Position */\r\n#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_BP_Pos 18U                     /*!< SCB CCR: Branch prediction enable bit Position */\r\n#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: Branch prediction enable bit Mask */\r\n\r\n#define SCB_CCR_IC_Pos 17U                     /*!< SCB CCR: Instruction cache enable bit Position */\r\n#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: Instruction cache enable bit Mask */\r\n\r\n#define SCB_CCR_DC_Pos 16U                     /*!< SCB CCR: Cache enable bit Position */\r\n#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: Cache enable bit Mask */\r\n\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_BFHFNMIGN_Pos 8U                             /*!< SCB CCR: BFHFNMIGN Position */\r\n#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */\r\n\r\n#define SCB_CCR_DIV_0_TRP_Pos 4U                             /*!< SCB CCR: DIV_0_TRP Position */\r\n#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n#define SCB_CCR_USERSETMPEND_Pos 1U                                /*!< SCB CCR: USERSETMPEND Position */\r\n#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */\r\n\r\n#define SCB_CCR_NONBASETHRDENA_Pos 0U                                      /*!< SCB CCR: NONBASETHRDENA Position */\r\n#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_USGFAULTENA_Pos 18U                                /*!< SCB SHCSR: USGFAULTENA Position */\r\n#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTENA_Pos 17U                                /*!< SCB SHCSR: BUSFAULTENA Position */\r\n#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTENA_Pos 16U                                /*!< SCB SHCSR: MEMFAULTENA Position */\r\n#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U                                   /*!< SCB SHCSR: BUSFAULTPENDED Position */\r\n#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U                                   /*!< SCB SHCSR: MEMFAULTPENDED Position */\r\n#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTPENDED_Pos 12U                                   /*!< SCB SHCSR: USGFAULTPENDED Position */\r\n#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_SYSTICKACT_Pos 11U                               /*!< SCB SHCSR: SYSTICKACT Position */\r\n#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */\r\n\r\n#define SCB_SHCSR_PENDSVACT_Pos 10U                              /*!< SCB SHCSR: PENDSVACT Position */\r\n#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */\r\n\r\n#define SCB_SHCSR_MONITORACT_Pos 8U                                /*!< SCB SHCSR: MONITORACT Position */\r\n#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */\r\n\r\n#define SCB_SHCSR_SVCALLACT_Pos 7U                               /*!< SCB SHCSR: SVCALLACT Position */\r\n#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTACT_Pos 3U                                 /*!< SCB SHCSR: USGFAULTACT Position */\r\n#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTACT_Pos 1U                                 /*!< SCB SHCSR: BUSFAULTACT Position */\r\n#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTACT_Pos 0U                                     /*!< SCB SHCSR: MEMFAULTACT Position */\r\n#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */\r\n\r\n/* SCB Configurable Fault Status Register Definitions */\r\n#define SCB_CFSR_USGFAULTSR_Pos 16U                                   /*!< SCB CFSR: Usage Fault Status Register Position */\r\n#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_BUSFAULTSR_Pos 8U                                  /*!< SCB CFSR: Bus Fault Status Register Position */\r\n#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_MEMFAULTSR_Pos 0U                                      /*!< SCB CFSR: Memory Manage Fault Status Register Position */\r\n#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */\r\n\r\n/* SCB Hard Fault Status Register Definitions */\r\n#define SCB_HFSR_DEBUGEVT_Pos 31U                            /*!< SCB HFSR: DEBUGEVT Position */\r\n#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */\r\n\r\n#define SCB_HFSR_FORCED_Pos 30U                          /*!< SCB HFSR: FORCED Position */\r\n#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */\r\n\r\n#define SCB_HFSR_VECTTBL_Pos 1U                            /*!< SCB HFSR: VECTTBL Position */\r\n#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */\r\n\r\n/* SCB Debug Fault Status Register Definitions */\r\n#define SCB_DFSR_EXTERNAL_Pos 4U                             /*!< SCB DFSR: EXTERNAL Position */\r\n#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */\r\n\r\n#define SCB_DFSR_VCATCH_Pos 3U                           /*!< SCB DFSR: VCATCH Position */\r\n#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */\r\n\r\n#define SCB_DFSR_DWTTRAP_Pos 2U                            /*!< SCB DFSR: DWTTRAP Position */\r\n#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */\r\n\r\n#define SCB_DFSR_BKPT_Pos 1U                         /*!< SCB DFSR: BKPT Position */\r\n#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */\r\n\r\n#define SCB_DFSR_HALTED_Pos 0U                               /*!< SCB DFSR: HALTED Position */\r\n#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */\r\n\r\n/* SCB Cache Level ID Register Definitions */\r\n#define SCB_CLIDR_LOUU_Pos 27U                         /*!< SCB CLIDR: LoUU Position */\r\n#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */\r\n\r\n#define SCB_CLIDR_LOC_Pos 24U                        /*!< SCB CLIDR: LoC Position */\r\n#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */\r\n\r\n/* SCB Cache Type Register Definitions */\r\n#define SCB_CTR_FORMAT_Pos 29U                         /*!< SCB CTR: Format Position */\r\n#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */\r\n\r\n#define SCB_CTR_CWG_Pos 24U                        /*!< SCB CTR: CWG Position */\r\n#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */\r\n\r\n#define SCB_CTR_ERG_Pos 20U                        /*!< SCB CTR: ERG Position */\r\n#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */\r\n\r\n#define SCB_CTR_DMINLINE_Pos 16U                             /*!< SCB CTR: DminLine Position */\r\n#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */\r\n\r\n#define SCB_CTR_IMINLINE_Pos 0U                                  /*!< SCB CTR: ImInLine Position */\r\n#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */\r\n\r\n/* SCB Cache Size ID Register Definitions */\r\n#define SCB_CCSIDR_WT_Pos 31U                        /*!< SCB CCSIDR: WT Position */\r\n#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */\r\n\r\n#define SCB_CCSIDR_WB_Pos 30U                        /*!< SCB CCSIDR: WB Position */\r\n#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */\r\n\r\n#define SCB_CCSIDR_RA_Pos 29U                        /*!< SCB CCSIDR: RA Position */\r\n#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */\r\n\r\n#define SCB_CCSIDR_WA_Pos 28U                        /*!< SCB CCSIDR: WA Position */\r\n#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */\r\n\r\n#define SCB_CCSIDR_NUMSETS_Pos 13U                                  /*!< SCB CCSIDR: NumSets Position */\r\n#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */\r\n\r\n#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U                                        /*!< SCB CCSIDR: Associativity Position */\r\n#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */\r\n\r\n#define SCB_CCSIDR_LINESIZE_Pos 0U                                   /*!< SCB CCSIDR: LineSize Position */\r\n#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */\r\n\r\n/* SCB Cache Size Selection Register Definitions */\r\n#define SCB_CSSELR_LEVEL_Pos 1U                            /*!< SCB CSSELR: Level Position */\r\n#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */\r\n\r\n#define SCB_CSSELR_IND_Pos 0U                              /*!< SCB CSSELR: InD Position */\r\n#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */\r\n\r\n/* SCB Software Triggered Interrupt Register Definitions */\r\n#define SCB_STIR_INTID_Pos 0U                                  /*!< SCB STIR: INTID Position */\r\n#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */\r\n\r\n/* SCB D-Cache Invalidate by Set-way Register Definitions */\r\n#define SCB_DCISW_WAY_Pos 30U                        /*!< SCB DCISW: Way Position */\r\n#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */\r\n\r\n#define SCB_DCISW_SET_Pos 5U                             /*!< SCB DCISW: Set Position */\r\n#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */\r\n\r\n/* SCB D-Cache Clean by Set-way Register Definitions */\r\n#define SCB_DCCSW_WAY_Pos 30U                        /*!< SCB DCCSW: Way Position */\r\n#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */\r\n\r\n#define SCB_DCCSW_SET_Pos 5U                             /*!< SCB DCCSW: Set Position */\r\n#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */\r\n\r\n/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */\r\n#define SCB_DCCISW_WAY_Pos 30U                         /*!< SCB DCCISW: Way Position */\r\n#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */\r\n\r\n#define SCB_DCCISW_SET_Pos 5U                              /*!< SCB DCCISW: Set Position */\r\n#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */\r\n\r\n/* Instruction Tightly-Coupled Memory Control Register Definitions */\r\n#define SCB_ITCMCR_SZ_Pos 3U                           /*!< SCB ITCMCR: SZ Position */\r\n#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */\r\n\r\n#define SCB_ITCMCR_RETEN_Pos 2U                            /*!< SCB ITCMCR: RETEN Position */\r\n#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */\r\n\r\n#define SCB_ITCMCR_RMW_Pos 1U                          /*!< SCB ITCMCR: RMW Position */\r\n#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */\r\n\r\n#define SCB_ITCMCR_EN_Pos 0U                             /*!< SCB ITCMCR: EN Position */\r\n#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */\r\n\r\n/* Data Tightly-Coupled Memory Control Register Definitions */\r\n#define SCB_DTCMCR_SZ_Pos 3U                           /*!< SCB DTCMCR: SZ Position */\r\n#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */\r\n\r\n#define SCB_DTCMCR_RETEN_Pos 2U                            /*!< SCB DTCMCR: RETEN Position */\r\n#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */\r\n\r\n#define SCB_DTCMCR_RMW_Pos 1U                          /*!< SCB DTCMCR: RMW Position */\r\n#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */\r\n\r\n#define SCB_DTCMCR_EN_Pos 0U                             /*!< SCB DTCMCR: EN Position */\r\n#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */\r\n\r\n/* AHBP Control Register Definitions */\r\n#define SCB_AHBPCR_SZ_Pos 1U                         /*!< SCB AHBPCR: SZ Position */\r\n#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */\r\n\r\n#define SCB_AHBPCR_EN_Pos 0U                             /*!< SCB AHBPCR: EN Position */\r\n#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */\r\n\r\n/* L1 Cache Control Register Definitions */\r\n#define SCB_CACR_FORCEWT_Pos 2U                            /*!< SCB CACR: FORCEWT Position */\r\n#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */\r\n\r\n#define SCB_CACR_ECCEN_Pos 1U                          /*!< SCB CACR: ECCEN Position */\r\n#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< SCB CACR: ECCEN Mask */\r\n\r\n#define SCB_CACR_SIWT_Pos 0U                             /*!< SCB CACR: SIWT Position */\r\n#define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */\r\n\r\n/* AHBS Control Register Definitions */\r\n#define SCB_AHBSCR_INITCOUNT_Pos 11U                                  /*!< SCB AHBSCR: INITCOUNT Position */\r\n#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */\r\n\r\n#define SCB_AHBSCR_TPRI_Pos 2U                               /*!< SCB AHBSCR: TPRI Position */\r\n#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBPCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */\r\n\r\n#define SCB_AHBSCR_CTL_Pos 0U                              /*!< SCB AHBSCR: CTL Position*/\r\n#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBPCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */\r\n\r\n/* Auxiliary Bus Fault Status Register Definitions */\r\n#define SCB_ABFSR_AXIMTYPE_Pos 8U                              /*!< SCB ABFSR: AXIMTYPE Position*/\r\n#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */\r\n\r\n#define SCB_ABFSR_EPPB_Pos 4U                          /*!< SCB ABFSR: EPPB Position*/\r\n#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */\r\n\r\n#define SCB_ABFSR_AXIM_Pos 3U                          /*!< SCB ABFSR: AXIM Position*/\r\n#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */\r\n\r\n#define SCB_ABFSR_AHBP_Pos 2U                          /*!< SCB ABFSR: AHBP Position*/\r\n#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */\r\n\r\n#define SCB_ABFSR_DTCM_Pos 1U                          /*!< SCB ABFSR: DTCM Position*/\r\n#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */\r\n\r\n#define SCB_ABFSR_ITCM_Pos 0U                              /*!< SCB ABFSR: ITCM Position*/\r\n#define SCB_ABFSR_ITCM_Msk (1UL /*<< SCB_ABFSR_ITCM_Pos*/) /*!< SCB ABFSR: ITCM Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)\r\n  \\brief    Type definitions for the System Control and ID Register not in the SCB\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control and ID Register not in the SCB.\r\n */\r\ntypedef struct {\r\n  uint32_t       RESERVED0[1U];\r\n  __IM uint32_t  ICTR;  /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */\r\n  __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */\r\n} SCnSCB_Type;\r\n\r\n/* Interrupt Controller Type Register Definitions */\r\n#define SCnSCB_ICTR_INTLINESNUM_Pos 0U                                         /*!< ICTR: INTLINESNUM Position */\r\n#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */\r\n\r\n/* Auxiliary Control Register Definitions */\r\n#define SCnSCB_ACTLR_DISITMATBFLUSH_Pos 12U                                      /*!< ACTLR: DISITMATBFLUSH Position */\r\n#define SCnSCB_ACTLR_DISITMATBFLUSH_Msk (1UL << SCnSCB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */\r\n\r\n#define SCnSCB_ACTLR_DISRAMODE_Pos 11U                                 /*!< ACTLR: DISRAMODE Position */\r\n#define SCnSCB_ACTLR_DISRAMODE_Msk (1UL << SCnSCB_ACTLR_DISRAMODE_Pos) /*!< ACTLR: DISRAMODE Mask */\r\n\r\n#define SCnSCB_ACTLR_FPEXCODIS_Pos 10U                                 /*!< ACTLR: FPEXCODIS Position */\r\n#define SCnSCB_ACTLR_FPEXCODIS_Msk (1UL << SCnSCB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */\r\n\r\n#define SCnSCB_ACTLR_DISFOLD_Pos 2U                                /*!< ACTLR: DISFOLD Position */\r\n#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */\r\n\r\n#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U                                       /*!< ACTLR: DISMCYCINT Position */\r\n#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */\r\n\r\n/*@} end of group CMSIS_SCnotSCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_ITM     Instrumentation Trace Macrocell (ITM)\r\n  \\brief    Type definitions for the Instrumentation Trace Macrocell (ITM)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Instrumentation Trace Macrocell Register (ITM).\r\n */\r\ntypedef struct {\r\n  __OM union {\r\n    __OM uint8_t  u8;  /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 8-bit */\r\n    __OM uint16_t u16; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 16-bit */\r\n    __OM uint32_t u32; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 32-bit */\r\n  } PORT[32U];         /*!< Offset: 0x000 ( /W)  ITM Stimulus Port Registers */\r\n  uint32_t       RESERVED0[864U];\r\n  __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W)  ITM Trace Enable Register */\r\n  uint32_t       RESERVED1[15U];\r\n  __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */\r\n  uint32_t       RESERVED2[15U];\r\n  __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */\r\n  uint32_t       RESERVED3[29U];\r\n  __OM uint32_t  IWR;  /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */\r\n  __IM uint32_t  IRR;  /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */\r\n  __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */\r\n  uint32_t       RESERVED4[43U];\r\n  __OM uint32_t  LAR; /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */\r\n  __IM uint32_t  LSR; /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */\r\n  uint32_t       RESERVED5[6U];\r\n  __IM uint32_t  PID4; /*!< Offset: 0xFD0 (R/ )  ITM Peripheral Identification Register #4 */\r\n  __IM uint32_t  PID5; /*!< Offset: 0xFD4 (R/ )  ITM Peripheral Identification Register #5 */\r\n  __IM uint32_t  PID6; /*!< Offset: 0xFD8 (R/ )  ITM Peripheral Identification Register #6 */\r\n  __IM uint32_t  PID7; /*!< Offset: 0xFDC (R/ )  ITM Peripheral Identification Register #7 */\r\n  __IM uint32_t  PID0; /*!< Offset: 0xFE0 (R/ )  ITM Peripheral Identification Register #0 */\r\n  __IM uint32_t  PID1; /*!< Offset: 0xFE4 (R/ )  ITM Peripheral Identification Register #1 */\r\n  __IM uint32_t  PID2; /*!< Offset: 0xFE8 (R/ )  ITM Peripheral Identification Register #2 */\r\n  __IM uint32_t  PID3; /*!< Offset: 0xFEC (R/ )  ITM Peripheral Identification Register #3 */\r\n  __IM uint32_t  CID0; /*!< Offset: 0xFF0 (R/ )  ITM Component  Identification Register #0 */\r\n  __IM uint32_t  CID1; /*!< Offset: 0xFF4 (R/ )  ITM Component  Identification Register #1 */\r\n  __IM uint32_t  CID2; /*!< Offset: 0xFF8 (R/ )  ITM Component  Identification Register #2 */\r\n  __IM uint32_t  CID3; /*!< Offset: 0xFFC (R/ )  ITM Component  Identification Register #3 */\r\n} ITM_Type;\r\n\r\n/* ITM Trace Privilege Register Definitions */\r\n#define ITM_TPR_PRIVMASK_Pos 0U                                  /*!< ITM TPR: PRIVMASK Position */\r\n#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */\r\n\r\n/* ITM Trace Control Register Definitions */\r\n#define ITM_TCR_BUSY_Pos 23U                       /*!< ITM TCR: BUSY Position */\r\n#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */\r\n\r\n#define ITM_TCR_TraceBusID_Pos 16U                                /*!< ITM TCR: ATBID Position */\r\n#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */\r\n\r\n#define ITM_TCR_GTSFREQ_Pos 10U                          /*!< ITM TCR: Global timestamp frequency Position */\r\n#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */\r\n\r\n#define ITM_TCR_TSPrescale_Pos 8U                              /*!< ITM TCR: TSPrescale Position */\r\n#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */\r\n\r\n#define ITM_TCR_SWOENA_Pos 4U                          /*!< ITM TCR: SWOENA Position */\r\n#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */\r\n\r\n#define ITM_TCR_DWTENA_Pos 3U                          /*!< ITM TCR: DWTENA Position */\r\n#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */\r\n\r\n#define ITM_TCR_SYNCENA_Pos 2U                           /*!< ITM TCR: SYNCENA Position */\r\n#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */\r\n\r\n#define ITM_TCR_TSENA_Pos 1U                         /*!< ITM TCR: TSENA Position */\r\n#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */\r\n\r\n#define ITM_TCR_ITMENA_Pos 0U                              /*!< ITM TCR: ITM Enable bit Position */\r\n#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */\r\n\r\n/* ITM Integration Write Register Definitions */\r\n#define ITM_IWR_ATVALIDM_Pos 0U                                /*!< ITM IWR: ATVALIDM Position */\r\n#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */\r\n\r\n/* ITM Integration Read Register Definitions */\r\n#define ITM_IRR_ATREADYM_Pos 0U                                /*!< ITM IRR: ATREADYM Position */\r\n#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */\r\n\r\n/* ITM Integration Mode Control Register Definitions */\r\n#define ITM_IMCR_INTEGRATION_Pos 0U                                    /*!< ITM IMCR: INTEGRATION Position */\r\n#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */\r\n\r\n/* ITM Lock Status Register Definitions */\r\n#define ITM_LSR_ByteAcc_Pos 2U                           /*!< ITM LSR: ByteAcc Position */\r\n#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */\r\n\r\n#define ITM_LSR_Access_Pos 1U                          /*!< ITM LSR: Access Position */\r\n#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */\r\n\r\n#define ITM_LSR_Present_Pos 0U                               /*!< ITM LSR: Present Position */\r\n#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_ITM */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)\r\n  \\brief    Type definitions for the Data Watchpoint and Trace (DWT)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Data Watchpoint and Trace Register (DWT).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;      /*!< Offset: 0x000 (R/W)  Control Register */\r\n  __IOM uint32_t CYCCNT;    /*!< Offset: 0x004 (R/W)  Cycle Count Register */\r\n  __IOM uint32_t CPICNT;    /*!< Offset: 0x008 (R/W)  CPI Count Register */\r\n  __IOM uint32_t EXCCNT;    /*!< Offset: 0x00C (R/W)  Exception Overhead Count Register */\r\n  __IOM uint32_t SLEEPCNT;  /*!< Offset: 0x010 (R/W)  Sleep Count Register */\r\n  __IOM uint32_t LSUCNT;    /*!< Offset: 0x014 (R/W)  LSU Count Register */\r\n  __IOM uint32_t FOLDCNT;   /*!< Offset: 0x018 (R/W)  Folded-instruction Count Register */\r\n  __IM uint32_t  PCSR;      /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */\r\n  __IOM uint32_t COMP0;     /*!< Offset: 0x020 (R/W)  Comparator Register 0 */\r\n  __IOM uint32_t MASK0;     /*!< Offset: 0x024 (R/W)  Mask Register 0 */\r\n  __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W)  Function Register 0 */\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t COMP1;     /*!< Offset: 0x030 (R/W)  Comparator Register 1 */\r\n  __IOM uint32_t MASK1;     /*!< Offset: 0x034 (R/W)  Mask Register 1 */\r\n  __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W)  Function Register 1 */\r\n  uint32_t       RESERVED1[1U];\r\n  __IOM uint32_t COMP2;     /*!< Offset: 0x040 (R/W)  Comparator Register 2 */\r\n  __IOM uint32_t MASK2;     /*!< Offset: 0x044 (R/W)  Mask Register 2 */\r\n  __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W)  Function Register 2 */\r\n  uint32_t       RESERVED2[1U];\r\n  __IOM uint32_t COMP3;     /*!< Offset: 0x050 (R/W)  Comparator Register 3 */\r\n  __IOM uint32_t MASK3;     /*!< Offset: 0x054 (R/W)  Mask Register 3 */\r\n  __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W)  Function Register 3 */\r\n  uint32_t       RESERVED3[981U];\r\n  __OM uint32_t  LAR; /*!< Offset: 0xFB0 (  W)  Lock Access Register */\r\n  __IM uint32_t  LSR; /*!< Offset: 0xFB4 (R  )  Lock Status Register */\r\n} DWT_Type;\r\n\r\n/* DWT Control Register Definitions */\r\n#define DWT_CTRL_NUMCOMP_Pos 28U                             /*!< DWT CTRL: NUMCOMP Position */\r\n#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */\r\n\r\n#define DWT_CTRL_NOTRCPKT_Pos 27U                              /*!< DWT CTRL: NOTRCPKT Position */\r\n#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */\r\n\r\n#define DWT_CTRL_NOEXTTRIG_Pos 26U                               /*!< DWT CTRL: NOEXTTRIG Position */\r\n#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */\r\n\r\n#define DWT_CTRL_NOCYCCNT_Pos 25U                              /*!< DWT CTRL: NOCYCCNT Position */\r\n#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */\r\n\r\n#define DWT_CTRL_NOPRFCNT_Pos 24U                              /*!< DWT CTRL: NOPRFCNT Position */\r\n#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */\r\n\r\n#define DWT_CTRL_CYCEVTENA_Pos 22U                               /*!< DWT CTRL: CYCEVTENA Position */\r\n#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */\r\n\r\n#define DWT_CTRL_FOLDEVTENA_Pos 21U                                /*!< DWT CTRL: FOLDEVTENA Position */\r\n#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */\r\n\r\n#define DWT_CTRL_LSUEVTENA_Pos 20U                               /*!< DWT CTRL: LSUEVTENA Position */\r\n#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */\r\n\r\n#define DWT_CTRL_SLEEPEVTENA_Pos 19U                                 /*!< DWT CTRL: SLEEPEVTENA Position */\r\n#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCEVTENA_Pos 18U                               /*!< DWT CTRL: EXCEVTENA Position */\r\n#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */\r\n\r\n#define DWT_CTRL_CPIEVTENA_Pos 17U                               /*!< DWT CTRL: CPIEVTENA Position */\r\n#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCTRCENA_Pos 16U                               /*!< DWT CTRL: EXCTRCENA Position */\r\n#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */\r\n\r\n#define DWT_CTRL_PCSAMPLENA_Pos 12U                                /*!< DWT CTRL: PCSAMPLENA Position */\r\n#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */\r\n\r\n#define DWT_CTRL_SYNCTAP_Pos 10U                             /*!< DWT CTRL: SYNCTAP Position */\r\n#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */\r\n\r\n#define DWT_CTRL_CYCTAP_Pos 9U                             /*!< DWT CTRL: CYCTAP Position */\r\n#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */\r\n\r\n#define DWT_CTRL_POSTINIT_Pos 5U                               /*!< DWT CTRL: POSTINIT Position */\r\n#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */\r\n\r\n#define DWT_CTRL_POSTPRESET_Pos 1U                                 /*!< DWT CTRL: POSTPRESET Position */\r\n#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */\r\n\r\n#define DWT_CTRL_CYCCNTENA_Pos 0U                                    /*!< DWT CTRL: CYCCNTENA Position */\r\n#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */\r\n\r\n/* DWT CPI Count Register Definitions */\r\n#define DWT_CPICNT_CPICNT_Pos 0U                                    /*!< DWT CPICNT: CPICNT Position */\r\n#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */\r\n\r\n/* DWT Exception Overhead Count Register Definitions */\r\n#define DWT_EXCCNT_EXCCNT_Pos 0U                                    /*!< DWT EXCCNT: EXCCNT Position */\r\n#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */\r\n\r\n/* DWT Sleep Count Register Definitions */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U                                        /*!< DWT SLEEPCNT: SLEEPCNT Position */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */\r\n\r\n/* DWT LSU Count Register Definitions */\r\n#define DWT_LSUCNT_LSUCNT_Pos 0U                                    /*!< DWT LSUCNT: LSUCNT Position */\r\n#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */\r\n\r\n/* DWT Folded-instruction Count Register Definitions */\r\n#define DWT_FOLDCNT_FOLDCNT_Pos 0U                                      /*!< DWT FOLDCNT: FOLDCNT Position */\r\n#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */\r\n\r\n/* DWT Comparator Mask Register Definitions */\r\n#define DWT_MASK_MASK_Pos 0U                                /*!< DWT MASK: MASK Position */\r\n#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */\r\n\r\n/* DWT Comparator Function Register Definitions */\r\n#define DWT_FUNCTION_MATCHED_Pos 24U                                 /*!< DWT FUNCTION: MATCHED Position */\r\n#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR1_Pos 16U                                    /*!< DWT FUNCTION: DATAVADDR1 Position */\r\n#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR0_Pos 12U                                    /*!< DWT FUNCTION: DATAVADDR0 Position */\r\n#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVSIZE_Pos 10U                                   /*!< DWT FUNCTION: DATAVSIZE Position */\r\n#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */\r\n\r\n#define DWT_FUNCTION_LNK1ENA_Pos 9U                                  /*!< DWT FUNCTION: LNK1ENA Position */\r\n#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */\r\n\r\n#define DWT_FUNCTION_DATAVMATCH_Pos 8U                                     /*!< DWT FUNCTION: DATAVMATCH Position */\r\n#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */\r\n\r\n#define DWT_FUNCTION_CYCMATCH_Pos 7U                                   /*!< DWT FUNCTION: CYCMATCH Position */\r\n#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */\r\n\r\n#define DWT_FUNCTION_EMITRANGE_Pos 5U                                    /*!< DWT FUNCTION: EMITRANGE Position */\r\n#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */\r\n\r\n#define DWT_FUNCTION_FUNCTION_Pos 0U                                       /*!< DWT FUNCTION: FUNCTION Position */\r\n#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_DWT */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_TPI     Trace Port Interface (TPI)\r\n  \\brief    Type definitions for the Trace Port Interface (TPI)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Trace Port Interface Register (TPI).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t SSPSR; /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */\r\n  __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */\r\n  uint32_t       RESERVED0[2U];\r\n  __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */\r\n  uint32_t       RESERVED1[55U];\r\n  __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */\r\n  uint32_t       RESERVED2[131U];\r\n  __IM uint32_t  FFSR; /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */\r\n  __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */\r\n  __IM uint32_t  FSCR; /*!< Offset: 0x308 (R/ )  Formatter Synchronization Counter Register */\r\n  uint32_t       RESERVED3[759U];\r\n  __IM uint32_t  TRIGGER;   /*!< Offset: 0xEE8 (R/ )  TRIGGER */\r\n  __IM uint32_t  FIFO0;     /*!< Offset: 0xEEC (R/ )  Integration ETM Data */\r\n  __IM uint32_t  ITATBCTR2; /*!< Offset: 0xEF0 (R/ )  ITATBCTR2 */\r\n  uint32_t       RESERVED4[1U];\r\n  __IM uint32_t  ITATBCTR0; /*!< Offset: 0xEF8 (R/ )  ITATBCTR0 */\r\n  __IM uint32_t  FIFO1;     /*!< Offset: 0xEFC (R/ )  Integration ITM Data */\r\n  __IOM uint32_t ITCTRL;    /*!< Offset: 0xF00 (R/W)  Integration Mode Control */\r\n  uint32_t       RESERVED5[39U];\r\n  __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W)  Claim tag set */\r\n  __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W)  Claim tag clear */\r\n  uint32_t       RESERVED7[8U];\r\n  __IM uint32_t  DEVID;   /*!< Offset: 0xFC8 (R/ )  TPIU_DEVID */\r\n  __IM uint32_t  DEVTYPE; /*!< Offset: 0xFCC (R/ )  TPIU_DEVTYPE */\r\n} TPI_Type;\r\n\r\n/* TPI Asynchronous Clock Prescaler Register Definitions */\r\n#define TPI_ACPR_PRESCALER_Pos 0U                                       /*!< TPI ACPR: PRESCALER Position */\r\n#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */\r\n\r\n/* TPI Selected Pin Protocol Register Definitions */\r\n#define TPI_SPPR_TXMODE_Pos 0U                                 /*!< TPI SPPR: TXMODE Position */\r\n#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */\r\n\r\n/* TPI Formatter and Flush Status Register Definitions */\r\n#define TPI_FFSR_FtNonStop_Pos 3U                                /*!< TPI FFSR: FtNonStop Position */\r\n#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */\r\n\r\n#define TPI_FFSR_TCPresent_Pos 2U                                /*!< TPI FFSR: TCPresent Position */\r\n#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */\r\n\r\n#define TPI_FFSR_FtStopped_Pos 1U                                /*!< TPI FFSR: FtStopped Position */\r\n#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */\r\n\r\n#define TPI_FFSR_FlInProg_Pos 0U                                   /*!< TPI FFSR: FlInProg Position */\r\n#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */\r\n\r\n/* TPI Formatter and Flush Control Register Definitions */\r\n#define TPI_FFCR_TrigIn_Pos 8U                             /*!< TPI FFCR: TrigIn Position */\r\n#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */\r\n\r\n#define TPI_FFCR_EnFCont_Pos 1U                              /*!< TPI FFCR: EnFCont Position */\r\n#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */\r\n\r\n/* TPI TRIGGER Register Definitions */\r\n#define TPI_TRIGGER_TRIGGER_Pos 0U                                     /*!< TPI TRIGGER: TRIGGER Position */\r\n#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */\r\n\r\n/* TPI Integration ETM Data Register Definitions (FIFO0) */\r\n#define TPI_FIFO0_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO0: ITM_ATVALID Position */\r\n#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO0: ITM_bytecount Position */\r\n#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO0: ETM_ATVALID Position */\r\n#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO0: ETM_bytecount Position */\r\n#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM2_Pos 16U                            /*!< TPI FIFO0: ETM2 Position */\r\n#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */\r\n\r\n#define TPI_FIFO0_ETM1_Pos 8U                             /*!< TPI FIFO0: ETM1 Position */\r\n#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */\r\n\r\n#define TPI_FIFO0_ETM0_Pos 0U                                 /*!< TPI FIFO0: ETM0 Position */\r\n#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */\r\n\r\n/* TPI ITATBCTR2 Register Definitions */\r\n#define TPI_ITATBCTR2_ATREADY_Pos 0U                                       /*!< TPI ITATBCTR2: ATREADY Position */\r\n#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/) /*!< TPI ITATBCTR2: ATREADY Mask */\r\n\r\n/* TPI Integration ITM Data Register Definitions (FIFO1) */\r\n#define TPI_FIFO1_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO1: ITM_ATVALID Position */\r\n#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO1: ITM_bytecount Position */\r\n#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO1: ETM_ATVALID Position */\r\n#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO1: ETM_bytecount Position */\r\n#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ITM2_Pos 16U                            /*!< TPI FIFO1: ITM2 Position */\r\n#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */\r\n\r\n#define TPI_FIFO1_ITM1_Pos 8U                             /*!< TPI FIFO1: ITM1 Position */\r\n#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */\r\n\r\n#define TPI_FIFO1_ITM0_Pos 0U                                 /*!< TPI FIFO1: ITM0 Position */\r\n#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */\r\n\r\n/* TPI ITATBCTR0 Register Definitions */\r\n#define TPI_ITATBCTR0_ATREADY_Pos 0U                                       /*!< TPI ITATBCTR0: ATREADY Position */\r\n#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/) /*!< TPI ITATBCTR0: ATREADY Mask */\r\n\r\n/* TPI Integration Mode Control Register Definitions */\r\n#define TPI_ITCTRL_Mode_Pos 0U                                 /*!< TPI ITCTRL: Mode Position */\r\n#define TPI_ITCTRL_Mode_Msk (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */\r\n\r\n/* TPI DEVID Register Definitions */\r\n#define TPI_DEVID_NRZVALID_Pos 11U                               /*!< TPI DEVID: NRZVALID Position */\r\n#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */\r\n\r\n#define TPI_DEVID_MANCVALID_Pos 10U                                /*!< TPI DEVID: MANCVALID Position */\r\n#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */\r\n\r\n#define TPI_DEVID_PTINVALID_Pos 9U                                 /*!< TPI DEVID: PTINVALID Position */\r\n#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */\r\n\r\n#define TPI_DEVID_MinBufSz_Pos 6U                                /*!< TPI DEVID: MinBufSz Position */\r\n#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */\r\n\r\n#define TPI_DEVID_AsynClkIn_Pos 5U                                 /*!< TPI DEVID: AsynClkIn Position */\r\n#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */\r\n\r\n#define TPI_DEVID_NrTraceInput_Pos 0U                                         /*!< TPI DEVID: NrTraceInput Position */\r\n#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */\r\n\r\n/* TPI DEVTYPE Register Definitions */\r\n#define TPI_DEVTYPE_MajorType_Pos 4U                                   /*!< TPI DEVTYPE: MajorType Position */\r\n#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */\r\n\r\n#define TPI_DEVTYPE_SubType_Pos 0U                                     /*!< TPI DEVTYPE: SubType Position */\r\n#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_TPI */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_MPU     Memory Protection Unit (MPU)\r\n  \\brief    Type definitions for the Memory Protection Unit (MPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Memory Protection Unit (MPU).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  TYPE;    /*!< Offset: 0x000 (R/ )  MPU Type Register */\r\n  __IOM uint32_t CTRL;    /*!< Offset: 0x004 (R/W)  MPU Control Register */\r\n  __IOM uint32_t RNR;     /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */\r\n  __IOM uint32_t RBAR;    /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */\r\n  __IOM uint32_t RASR;    /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W)  MPU Alias 1 Region Base Address Register */\r\n  __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W)  MPU Alias 1 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W)  MPU Alias 2 Region Base Address Register */\r\n  __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W)  MPU Alias 2 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W)  MPU Alias 3 Region Base Address Register */\r\n  __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W)  MPU Alias 3 Region Attribute and Size Register */\r\n} MPU_Type;\r\n\r\n/* MPU Type Register Definitions */\r\n#define MPU_TYPE_IREGION_Pos 16U                              /*!< MPU TYPE: IREGION Position */\r\n#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */\r\n\r\n#define MPU_TYPE_DREGION_Pos 8U                               /*!< MPU TYPE: DREGION Position */\r\n#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */\r\n\r\n#define MPU_TYPE_SEPARATE_Pos 0U                                 /*!< MPU TYPE: SEPARATE Position */\r\n#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */\r\n\r\n/* MPU Control Register Definitions */\r\n#define MPU_CTRL_PRIVDEFENA_Pos 2U                               /*!< MPU CTRL: PRIVDEFENA Position */\r\n#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */\r\n\r\n#define MPU_CTRL_HFNMIENA_Pos 1U                             /*!< MPU CTRL: HFNMIENA Position */\r\n#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */\r\n\r\n#define MPU_CTRL_ENABLE_Pos 0U                               /*!< MPU CTRL: ENABLE Position */\r\n#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */\r\n\r\n/* MPU Region Number Register Definitions */\r\n#define MPU_RNR_REGION_Pos 0U                                 /*!< MPU RNR: REGION Position */\r\n#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */\r\n\r\n/* MPU Region Base Address Register Definitions */\r\n#define MPU_RBAR_ADDR_Pos 5U                                 /*!< MPU RBAR: ADDR Position */\r\n#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */\r\n\r\n#define MPU_RBAR_VALID_Pos 4U                          /*!< MPU RBAR: VALID Position */\r\n#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */\r\n\r\n#define MPU_RBAR_REGION_Pos 0U                                 /*!< MPU RBAR: REGION Position */\r\n#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */\r\n\r\n/* MPU Region Attribute and Size Register Definitions */\r\n#define MPU_RASR_ATTRS_Pos 16U                              /*!< MPU RASR: MPU Region Attribute field Position */\r\n#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */\r\n\r\n#define MPU_RASR_XN_Pos 28U                      /*!< MPU RASR: ATTRS.XN Position */\r\n#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */\r\n\r\n#define MPU_RASR_AP_Pos 24U                        /*!< MPU RASR: ATTRS.AP Position */\r\n#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */\r\n\r\n#define MPU_RASR_TEX_Pos 19U                         /*!< MPU RASR: ATTRS.TEX Position */\r\n#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */\r\n\r\n#define MPU_RASR_S_Pos 18U                     /*!< MPU RASR: ATTRS.S Position */\r\n#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */\r\n\r\n#define MPU_RASR_C_Pos 17U                     /*!< MPU RASR: ATTRS.C Position */\r\n#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */\r\n\r\n#define MPU_RASR_B_Pos 16U                     /*!< MPU RASR: ATTRS.B Position */\r\n#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */\r\n\r\n#define MPU_RASR_SRD_Pos 8U                           /*!< MPU RASR: Sub-Region Disable Position */\r\n#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */\r\n\r\n#define MPU_RASR_SIZE_Pos 1U                            /*!< MPU RASR: Region Size Field Position */\r\n#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */\r\n\r\n#define MPU_RASR_ENABLE_Pos 0U                               /*!< MPU RASR: Region enable bit Position */\r\n#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */\r\n\r\n/*@} end of group CMSIS_MPU */\r\n#endif\r\n\r\n#if (__FPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_FPU     Floating Point Unit (FPU)\r\n  \\brief    Type definitions for the Floating Point Unit (FPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Floating Point Unit (FPU).\r\n */\r\ntypedef struct {\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t FPCCR;  /*!< Offset: 0x004 (R/W)  Floating-Point Context Control Register */\r\n  __IOM uint32_t FPCAR;  /*!< Offset: 0x008 (R/W)  Floating-Point Context Address Register */\r\n  __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W)  Floating-Point Default Status Control Register */\r\n  __IM uint32_t  MVFR0;  /*!< Offset: 0x010 (R/ )  Media and FP Feature Register 0 */\r\n  __IM uint32_t  MVFR1;  /*!< Offset: 0x014 (R/ )  Media and FP Feature Register 1 */\r\n  __IM uint32_t  MVFR2;  /*!< Offset: 0x018 (R/ )  Media and FP Feature Register 2 */\r\n} FPU_Type;\r\n\r\n/* Floating-Point Context Control Register Definitions */\r\n#define FPU_FPCCR_ASPEN_Pos 31U                          /*!< FPCCR: ASPEN bit Position */\r\n#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */\r\n\r\n#define FPU_FPCCR_LSPEN_Pos 30U                          /*!< FPCCR: LSPEN Position */\r\n#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */\r\n\r\n#define FPU_FPCCR_MONRDY_Pos 8U                            /*!< FPCCR: MONRDY Position */\r\n#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */\r\n\r\n#define FPU_FPCCR_BFRDY_Pos 6U                           /*!< FPCCR: BFRDY Position */\r\n#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */\r\n\r\n#define FPU_FPCCR_MMRDY_Pos 5U                           /*!< FPCCR: MMRDY Position */\r\n#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */\r\n\r\n#define FPU_FPCCR_HFRDY_Pos 4U                           /*!< FPCCR: HFRDY Position */\r\n#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */\r\n\r\n#define FPU_FPCCR_THREAD_Pos 3U                            /*!< FPCCR: processor mode bit Position */\r\n#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */\r\n\r\n#define FPU_FPCCR_USER_Pos 1U                          /*!< FPCCR: privilege level bit Position */\r\n#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */\r\n\r\n#define FPU_FPCCR_LSPACT_Pos 0U                                /*!< FPCCR: Lazy state preservation active bit Position */\r\n#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */\r\n\r\n/* Floating-Point Context Address Register Definitions */\r\n#define FPU_FPCAR_ADDRESS_Pos 3U                                      /*!< FPCAR: ADDRESS bit Position */\r\n#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */\r\n\r\n/* Floating-Point Default Status Control Register Definitions */\r\n#define FPU_FPDSCR_AHP_Pos 26U                         /*!< FPDSCR: AHP bit Position */\r\n#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */\r\n\r\n#define FPU_FPDSCR_DN_Pos 25U                        /*!< FPDSCR: DN bit Position */\r\n#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */\r\n\r\n#define FPU_FPDSCR_FZ_Pos 24U                        /*!< FPDSCR: FZ bit Position */\r\n#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */\r\n\r\n#define FPU_FPDSCR_RMode_Pos 22U                           /*!< FPDSCR: RMode bit Position */\r\n#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */\r\n\r\n/* Media and FP Feature Register 0 Definitions */\r\n#define FPU_MVFR0_FP_rounding_modes_Pos 28U                                        /*!< MVFR0: FP rounding modes bits Position */\r\n#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */\r\n\r\n#define FPU_MVFR0_Short_vectors_Pos 24U                                    /*!< MVFR0: Short vectors bits Position */\r\n#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */\r\n\r\n#define FPU_MVFR0_Square_root_Pos 20U                                  /*!< MVFR0: Square root bits Position */\r\n#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */\r\n\r\n#define FPU_MVFR0_Divide_Pos 16U                             /*!< MVFR0: Divide bits Position */\r\n#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */\r\n\r\n#define FPU_MVFR0_FP_excep_trapping_Pos 12U                                        /*!< MVFR0: FP exception trapping bits Position */\r\n#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */\r\n\r\n#define FPU_MVFR0_Double_precision_Pos 8U                                        /*!< MVFR0: Double-precision bits Position */\r\n#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */\r\n\r\n#define FPU_MVFR0_Single_precision_Pos 4U                                        /*!< MVFR0: Single-precision bits Position */\r\n#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */\r\n\r\n#define FPU_MVFR0_A_SIMD_registers_Pos 0U                                            /*!< MVFR0: A_SIMD registers bits Position */\r\n#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */\r\n\r\n/* Media and FP Feature Register 1 Definitions */\r\n#define FPU_MVFR1_FP_fused_MAC_Pos 28U                                   /*!< MVFR1: FP fused MAC bits Position */\r\n#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */\r\n\r\n#define FPU_MVFR1_FP_HPFP_Pos 24U                              /*!< MVFR1: FP HPFP bits Position */\r\n#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */\r\n\r\n#define FPU_MVFR1_D_NaN_mode_Pos 4U                                  /*!< MVFR1: D_NaN mode bits Position */\r\n#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */\r\n\r\n#define FPU_MVFR1_FtZ_mode_Pos 0U                                    /*!< MVFR1: FtZ mode bits Position */\r\n#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */\r\n\r\n/* Media and FP Feature Register 2 Definitions */\r\n\r\n/*@} end of group CMSIS_FPU */\r\n#endif\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    Type definitions for the Core Debug Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Core Debug Register (CoreDebug).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */\r\n  __OM uint32_t  DCRSR; /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */\r\n  __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */\r\n  __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */\r\n} CoreDebug_Type;\r\n\r\n/* Debug Halting Control and Status Register Definitions */\r\n#define CoreDebug_DHCSR_DBGKEY_Pos 16U                                      /*!< CoreDebug DHCSR: DBGKEY Position */\r\n#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U                                     /*!< CoreDebug DHCSR: S_RESET_ST Position */\r\n#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U                                      /*!< CoreDebug DHCSR: S_RETIRE_ST Position */\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U                                   /*!< CoreDebug DHCSR: S_LOCKUP Position */\r\n#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_SLEEP_Pos 18U                                  /*!< CoreDebug DHCSR: S_SLEEP Position */\r\n#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_HALT_Pos 17U                                 /*!< CoreDebug DHCSR: S_HALT Position */\r\n#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_S_REGRDY_Pos 16U                                   /*!< CoreDebug DHCSR: S_REGRDY Position */\r\n#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */\r\n\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U                                       /*!< CoreDebug DHCSR: C_SNAPSTALL Position */\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */\r\n\r\n#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U                                      /*!< CoreDebug DHCSR: C_MASKINTS Position */\r\n#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */\r\n\r\n#define CoreDebug_DHCSR_C_STEP_Pos 2U                                  /*!< CoreDebug DHCSR: C_STEP Position */\r\n#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */\r\n\r\n#define CoreDebug_DHCSR_C_HALT_Pos 1U                                  /*!< CoreDebug DHCSR: C_HALT Position */\r\n#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U                                         /*!< CoreDebug DHCSR: C_DEBUGEN Position */\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */\r\n\r\n/* Debug Core Register Selector Register Definitions */\r\n#define CoreDebug_DCRSR_REGWnR_Pos 16U                                 /*!< CoreDebug DCRSR: REGWnR Position */\r\n#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */\r\n\r\n#define CoreDebug_DCRSR_REGSEL_Pos 0U                                         /*!< CoreDebug DCRSR: REGSEL Position */\r\n#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */\r\n\r\n/* Debug Exception and Monitor Control Register Definitions */\r\n#define CoreDebug_DEMCR_TRCENA_Pos 24U                                 /*!< CoreDebug DEMCR: TRCENA Position */\r\n#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_REQ_Pos 19U                                  /*!< CoreDebug DEMCR: MON_REQ Position */\r\n#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_STEP_Pos 18U                                   /*!< CoreDebug DEMCR: MON_STEP Position */\r\n#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_PEND_Pos 17U                                   /*!< CoreDebug DEMCR: MON_PEND Position */\r\n#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_EN_Pos 16U                                 /*!< CoreDebug DEMCR: MON_EN Position */\r\n#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U                                     /*!< CoreDebug DEMCR: VC_HARDERR Position */\r\n#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_INTERR_Pos 9U                                     /*!< CoreDebug DEMCR: VC_INTERR Position */\r\n#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U                                     /*!< CoreDebug DEMCR: VC_BUSERR Position */\r\n#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_STATERR_Pos 7U                                      /*!< CoreDebug DEMCR: VC_STATERR Position */\r\n#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U                                     /*!< CoreDebug DEMCR: VC_CHKERR Position */\r\n#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U                                      /*!< CoreDebug DEMCR: VC_NOCPERR Position */\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_MMERR_Pos 4U                                    /*!< CoreDebug DEMCR: VC_MMERR Position */\r\n#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */\r\n#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */\r\n\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) ((value << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) ((value & field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of Cortex-M4 Hardware */\r\n#define SCS_BASE       (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define ITM_BASE       (0xE0000000UL)        /*!< ITM Base Address */\r\n#define DWT_BASE       (0xE0001000UL)        /*!< DWT Base Address */\r\n#define TPI_BASE       (0xE0040000UL)        /*!< TPI Base Address */\r\n#define CoreDebug_BASE (0xE000EDF0UL)        /*!< Core Debug Base Address */\r\n#define SysTick_BASE   (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE      (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE       (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCnSCB    ((SCnSCB_Type *)SCS_BASE)          /*!< System control Register not in SCB */\r\n#define SCB       ((SCB_Type *)SCB_BASE)             /*!< SCB configuration struct */\r\n#define SysTick   ((SysTick_Type *)SysTick_BASE)     /*!< SysTick configuration struct */\r\n#define NVIC      ((NVIC_Type *)NVIC_BASE)           /*!< NVIC configuration struct */\r\n#define ITM       ((ITM_Type *)ITM_BASE)             /*!< ITM configuration struct */\r\n#define DWT       ((DWT_Type *)DWT_BASE)             /*!< DWT configuration struct */\r\n#define TPI       ((TPI_Type *)TPI_BASE)             /*!< TPI configuration struct */\r\n#define CoreDebug ((CoreDebug_Type *)CoreDebug_BASE) /*!< Core Debug configuration struct */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n#define MPU_BASE (SCS_BASE + 0x0D90UL)  /*!< Memory Protection Unit */\r\n#define MPU      ((MPU_Type *)MPU_BASE) /*!< Memory Protection Unit */\r\n#endif\r\n\r\n#if (__FPU_PRESENT == 1U)\r\n#define FPU_BASE (SCS_BASE + 0x0F30UL)  /*!< Floating Point Unit */\r\n#define FPU      ((FPU_Type *)FPU_BASE) /*!< Floating Point Unit */\r\n#endif\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Debug Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Set Priority Grouping\r\n  \\details Sets the priority grouping field using the required unlock sequence.\r\n           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.\r\n           Only values from 0..7 are used.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]      PriorityGroup  Priority grouping field.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) {\r\n  uint32_t reg_value;\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n\r\n  reg_value = SCB->AIRCR;                                                                             /* read old register configuration    */\r\n  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk));                         /* clear bits to change               */\r\n  reg_value  = (reg_value | ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (PriorityGroupTmp << 8U)); /* Insert write key and priorty group */\r\n  SCB->AIRCR = reg_value;\r\n}\r\n\r\n/**\r\n  \\brief   Get Priority Grouping\r\n  \\details Reads the priority grouping field from the NVIC Interrupt Controller.\r\n  \\return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) { return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); }\r\n\r\n/**\r\n  \\brief   Enable External Interrupt\r\n  \\details Enables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Disable External Interrupt\r\n  \\details Disables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) { NVIC->ICER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) {\r\n  return ((uint32_t)(((NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));\r\n}\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  Interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) { NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) { NVIC->ICPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Active Interrupt\r\n  \\details Reads the active register in NVIC and returns the active bit.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not active.\r\n  \\return             1  Interrupt status is active.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) { return ((uint32_t)(((NVIC->IABR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); }\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of an interrupt.\r\n  \\note    The priority cannot be set for every core interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) < 0) {\r\n    SCB->SHPR[(((uint32_t)(int32_t)IRQn) & 0xFUL) - 4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  } else {\r\n    NVIC->IP[((uint32_t)(int32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of an interrupt.\r\n           The interrupt number can be positive to specify an external (device specific) interrupt,\r\n           or negative to specify an internal (core) interrupt.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) < 0) {\r\n    return (((uint32_t)SCB->SHPR[(((uint32_t)(int32_t)IRQn) & 0xFUL) - 4UL] >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return (((uint32_t)NVIC->IP[((uint32_t)(int32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Encode Priority\r\n  \\details Encodes the priority for an interrupt with the given priority group,\r\n           preemptive priority value, and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [in]   PreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [in]       SubPriority  Subpriority value (starting from 0).\r\n  \\return                        Encoded priority. Value can be used in the function \\ref NVIC_SetPriority().\r\n */\r\n__STATIC_INLINE uint32_t NVIC_EncodePriority(uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  return (((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | ((SubPriority & (uint32_t)((1UL << (SubPriorityBits)) - 1UL))));\r\n}\r\n\r\n/**\r\n  \\brief   Decode Priority\r\n  \\details Decodes an interrupt priority value with a given priority group to\r\n           preemptive priority value and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.\r\n  \\param [in]         Priority   Priority value, which can be retrieved with the function \\ref NVIC_GetPriority().\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [out] pPreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [out]     pSubPriority  Subpriority value (starting from 0).\r\n */\r\n__STATIC_INLINE void NVIC_DecodePriority(uint32_t Priority, uint32_t PriorityGroup, uint32_t *const pPreemptPriority, uint32_t *const pSubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);\r\n  *pSubPriority     = (Priority) & (uint32_t)((1UL << (SubPriorityBits)) - 1UL);\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__STATIC_INLINE void NVIC_SystemReset(void) {\r\n  __DSB();                                                                                                                         /* Ensure all outstanding memory accesses included\r\n                                                                                                                                      buffered write are completed before reset */\r\n  SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */\r\n  __DSB();                                                                                                                         /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##########################  FPU functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_FpuFunctions FPU Functions\r\n  \\brief    Function that provides FPU type.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   get FPU type\r\n  \\details returns the FPU type\r\n  \\returns\r\n   - \\b  0: No FPU\r\n   - \\b  1: Single precision FPU\r\n   - \\b  2: Double + Single precision FPU\r\n */\r\n__STATIC_INLINE uint32_t SCB_GetFPUType(void) {\r\n  uint32_t mvfr0;\r\n\r\n  mvfr0 = SCB->MVFR0;\r\n  if ((mvfr0 & 0x00000FF0UL) == 0x220UL) {\r\n    return 2UL; /* Double + Single precision FPU */\r\n  } else if ((mvfr0 & 0x00000FF0UL) == 0x020UL) {\r\n    return 1UL; /* Single precision FPU */\r\n  } else {\r\n    return 0UL; /* No FPU */\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_FpuFunctions */\r\n\r\n/* ##########################  Cache functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_CacheFunctions Cache Functions\r\n  \\brief    Functions that configure Instruction and Data cache.\r\n  @{\r\n */\r\n\r\n/* Cache Size ID Register Macros */\r\n#define CCSIDR_WAYS(x) (((x)&SCB_CCSIDR_ASSOCIATIVITY_Msk) >> SCB_CCSIDR_ASSOCIATIVITY_Pos)\r\n#define CCSIDR_SETS(x) (((x)&SCB_CCSIDR_NUMSETS_Msk) >> SCB_CCSIDR_NUMSETS_Pos)\r\n\r\n/**\r\n  \\brief   Enable I-Cache\r\n  \\details Turns on I-Cache\r\n  */\r\n__STATIC_INLINE void SCB_EnableICache(void) {\r\n#if (__ICACHE_PRESENT == 1U)\r\n  __DSB();\r\n  __ISB();\r\n  SCB->ICIALLU = 0UL;                   /* invalidate I-Cache */\r\n  SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Disable I-Cache\r\n  \\details Turns off I-Cache\r\n  */\r\n__STATIC_INLINE void SCB_DisableICache(void) {\r\n#if (__ICACHE_PRESENT == 1U)\r\n  __DSB();\r\n  __ISB();\r\n  SCB->CCR &= ~(uint32_t)SCB_CCR_IC_Msk; /* disable I-Cache */\r\n  SCB->ICIALLU = 0UL;                    /* invalidate I-Cache */\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Invalidate I-Cache\r\n  \\details Invalidates I-Cache\r\n  */\r\n__STATIC_INLINE void SCB_InvalidateICache(void) {\r\n#if (__ICACHE_PRESENT == 1U)\r\n  __DSB();\r\n  __ISB();\r\n  SCB->ICIALLU = 0UL;\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Enable D-Cache\r\n  \\details Turns on D-Cache\r\n  */\r\n__STATIC_INLINE void SCB_EnableDCache(void) {\r\n#if (__DCACHE_PRESENT == 1U)\r\n  uint32_t ccsidr;\r\n  uint32_t sets;\r\n  uint32_t ways;\r\n\r\n  SCB->CSSELR = (0U << 1U) | 0U; /* Level 1 data cache */\r\n  __DSB();\r\n\r\n  ccsidr = SCB->CCSIDR;\r\n\r\n  /* invalidate D-Cache */\r\n  sets = (uint32_t)(CCSIDR_SETS(ccsidr));\r\n  do {\r\n    ways = (uint32_t)(CCSIDR_WAYS(ccsidr));\r\n    do {\r\n      SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk));\r\n#if defined(__CC_ARM)\r\n      __schedule_barrier();\r\n#endif\r\n    } while (ways--);\r\n  } while (sets--);\r\n  __DSB();\r\n\r\n  SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */\r\n\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Disable D-Cache\r\n  \\details Turns off D-Cache\r\n  */\r\n__STATIC_INLINE void SCB_DisableDCache(void) {\r\n#if (__DCACHE_PRESENT == 1U)\r\n  uint32_t ccsidr;\r\n  uint32_t sets;\r\n  uint32_t ways;\r\n\r\n  SCB->CSSELR = (0U << 1U) | 0U; /* Level 1 data cache */\r\n  __DSB();\r\n\r\n  ccsidr = SCB->CCSIDR;\r\n\r\n  SCB->CCR &= ~(uint32_t)SCB_CCR_DC_Msk; /* disable D-Cache */\r\n\r\n  /* clean & invalidate D-Cache */\r\n  sets = (uint32_t)(CCSIDR_SETS(ccsidr));\r\n  do {\r\n    ways = (uint32_t)(CCSIDR_WAYS(ccsidr));\r\n    do {\r\n      SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk));\r\n#if defined(__CC_ARM)\r\n      __schedule_barrier();\r\n#endif\r\n    } while (ways--);\r\n  } while (sets--);\r\n\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Invalidate D-Cache\r\n  \\details Invalidates D-Cache\r\n  */\r\n__STATIC_INLINE void SCB_InvalidateDCache(void) {\r\n#if (__DCACHE_PRESENT == 1U)\r\n  uint32_t ccsidr;\r\n  uint32_t sets;\r\n  uint32_t ways;\r\n\r\n  SCB->CSSELR = (0U << 1U) | 0U; /* Level 1 data cache */\r\n  __DSB();\r\n\r\n  ccsidr = SCB->CCSIDR;\r\n\r\n  /* invalidate D-Cache */\r\n  sets = (uint32_t)(CCSIDR_SETS(ccsidr));\r\n  do {\r\n    ways = (uint32_t)(CCSIDR_WAYS(ccsidr));\r\n    do {\r\n      SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk));\r\n#if defined(__CC_ARM)\r\n      __schedule_barrier();\r\n#endif\r\n    } while (ways--);\r\n  } while (sets--);\r\n\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Clean D-Cache\r\n  \\details Cleans D-Cache\r\n  */\r\n__STATIC_INLINE void SCB_CleanDCache(void) {\r\n#if (__DCACHE_PRESENT == 1U)\r\n  uint32_t ccsidr;\r\n  uint32_t sets;\r\n  uint32_t ways;\r\n\r\n  SCB->CSSELR = (0U << 1U) | 0U; /* Level 1 data cache */\r\n  __DSB();\r\n\r\n  ccsidr = SCB->CCSIDR;\r\n\r\n  /* clean D-Cache */\r\n  sets = (uint32_t)(CCSIDR_SETS(ccsidr));\r\n  do {\r\n    ways = (uint32_t)(CCSIDR_WAYS(ccsidr));\r\n    do {\r\n      SCB->DCCSW = (((sets << SCB_DCCSW_SET_Pos) & SCB_DCCSW_SET_Msk) | ((ways << SCB_DCCSW_WAY_Pos) & SCB_DCCSW_WAY_Msk));\r\n#if defined(__CC_ARM)\r\n      __schedule_barrier();\r\n#endif\r\n    } while (ways--);\r\n  } while (sets--);\r\n\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Clean & Invalidate D-Cache\r\n  \\details Cleans and Invalidates D-Cache\r\n  */\r\n__STATIC_INLINE void SCB_CleanInvalidateDCache(void) {\r\n#if (__DCACHE_PRESENT == 1U)\r\n  uint32_t ccsidr;\r\n  uint32_t sets;\r\n  uint32_t ways;\r\n\r\n  SCB->CSSELR = (0U << 1U) | 0U; /* Level 1 data cache */\r\n  __DSB();\r\n\r\n  ccsidr = SCB->CCSIDR;\r\n\r\n  /* clean & invalidate D-Cache */\r\n  sets = (uint32_t)(CCSIDR_SETS(ccsidr));\r\n  do {\r\n    ways = (uint32_t)(CCSIDR_WAYS(ccsidr));\r\n    do {\r\n      SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk));\r\n#if defined(__CC_ARM)\r\n      __schedule_barrier();\r\n#endif\r\n    } while (ways--);\r\n  } while (sets--);\r\n\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   D-Cache Invalidate by address\r\n  \\details Invalidates D-Cache for the given address\r\n  \\param[in]   addr    address (aligned to 32-byte boundary)\r\n  \\param[in]   dsize   size of memory block (in number of bytes)\r\n*/\r\n__STATIC_INLINE void SCB_InvalidateDCache_by_Addr(uint32_t *addr, int32_t dsize) {\r\n#if (__DCACHE_PRESENT == 1U)\r\n  int32_t  op_size  = dsize;\r\n  uint32_t op_addr  = (uint32_t)addr;\r\n  int32_t  linesize = 32U; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */\r\n\r\n  __DSB();\r\n\r\n  while (op_size > 0) {\r\n    SCB->DCIMVAC = op_addr;\r\n    op_addr += linesize;\r\n    op_size -= linesize;\r\n  }\r\n\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   D-Cache Clean by address\r\n  \\details Cleans D-Cache for the given address\r\n  \\param[in]   addr    address (aligned to 32-byte boundary)\r\n  \\param[in]   dsize   size of memory block (in number of bytes)\r\n*/\r\n__STATIC_INLINE void SCB_CleanDCache_by_Addr(uint32_t *addr, int32_t dsize) {\r\n#if (__DCACHE_PRESENT == 1)\r\n  int32_t  op_size  = dsize;\r\n  uint32_t op_addr  = (uint32_t)addr;\r\n  int32_t  linesize = 32U; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */\r\n\r\n  __DSB();\r\n\r\n  while (op_size > 0) {\r\n    SCB->DCCMVAC = op_addr;\r\n    op_addr += linesize;\r\n    op_size -= linesize;\r\n  }\r\n\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   D-Cache Clean and Invalidate by address\r\n  \\details Cleans and invalidates D_Cache for the given address\r\n  \\param[in]   addr    address (aligned to 32-byte boundary)\r\n  \\param[in]   dsize   size of memory block (in number of bytes)\r\n*/\r\n__STATIC_INLINE void SCB_CleanInvalidateDCache_by_Addr(uint32_t *addr, int32_t dsize) {\r\n#if (__DCACHE_PRESENT == 1U)\r\n  int32_t  op_size  = dsize;\r\n  uint32_t op_addr  = (uint32_t)addr;\r\n  int32_t  linesize = 32U; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */\r\n\r\n  __DSB();\r\n\r\n  while (op_size > 0) {\r\n    SCB->DCCIMVAC = op_addr;\r\n    op_addr += linesize;\r\n    op_size -= linesize;\r\n  }\r\n\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/*@} end of CMSIS_Core_CacheFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n/* ##################################### Debug In/Output function ########################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_core_DebugFunctions ITM Functions\r\n  \\brief    Functions that access the ITM debug interface.\r\n  @{\r\n */\r\n\r\nextern volatile int32_t ITM_RxBuffer;  /*!< External variable to receive characters. */\r\n#define ITM_RXBUFFER_EMPTY 0x5AA55AA5U /*!< Value identifying \\ref ITM_RxBuffer is ready for next character. */\r\n\r\n/**\r\n  \\brief   ITM Send Character\r\n  \\details Transmits a character via the ITM channel 0, and\r\n           \\li Just returns when no debugger is connected that has booked the output.\r\n           \\li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.\r\n  \\param [in]     ch  Character to transmit.\r\n  \\returns            Character to transmit.\r\n */\r\n__STATIC_INLINE uint32_t ITM_SendChar(uint32_t ch) {\r\n  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */\r\n      ((ITM->TER & 1UL) != 0UL))                  /* ITM Port #0 enabled */\r\n  {\r\n    while (ITM->PORT[0U].u32 == 0UL) {\r\n      __NOP();\r\n    }\r\n    ITM->PORT[0U].u8 = (uint8_t)ch;\r\n  }\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Receive Character\r\n  \\details Inputs a character via the external variable \\ref ITM_RxBuffer.\r\n  \\return             Received character.\r\n  \\return         -1  No character pending.\r\n */\r\n__STATIC_INLINE int32_t ITM_ReceiveChar(void) {\r\n  int32_t ch = -1; /* no character available */\r\n\r\n  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) {\r\n    ch           = ITM_RxBuffer;\r\n    ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */\r\n  }\r\n\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Check Character\r\n  \\details Checks whether a character is pending for reading in the variable \\ref ITM_RxBuffer.\r\n  \\return          0  No character available.\r\n  \\return          1  Character available.\r\n */\r\n__STATIC_INLINE int32_t ITM_CheckChar(void) {\r\n\r\n  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {\r\n    return (0); /* no character available */\r\n  } else {\r\n    return (1); /*    character available */\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_core_DebugFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM7_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Include/core_cmFunc.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cmFunc.h\r\n                                                                              * @brief    CMSIS Cortex-M Core Function Access Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CMFUNC_H\r\n#define __CORE_CMFUNC_H\r\n\r\n/* ###########################  Core Function Access  ########################### */\r\n/** \\ingroup  CMSIS_Core_FunctionInterface\r\n    \\defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions\r\n  @{\r\n*/\r\n\r\n/*------------------ RealView Compiler -----------------*/\r\n#if defined(__CC_ARM)\r\n#include \"cmsis_armcc.h\"\r\n\r\n/*------------------ ARM Compiler V6 -------------------*/\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#include \"cmsis_armcc_V6.h\"\r\n\r\n/*------------------ GNU Compiler ----------------------*/\r\n#elif defined(__GNUC__)\r\n#include \"cmsis_gcc.h\"\r\n\r\n/*------------------ ICC Compiler ----------------------*/\r\n#elif defined(__ICCARM__)\r\n#include <cmsis_iar.h>\r\n\r\n/*------------------ TI CCS Compiler -------------------*/\r\n#elif defined(__TMS470__)\r\n#include <cmsis_ccs.h>\r\n\r\n/*------------------ TASKING Compiler ------------------*/\r\n#elif defined(__TASKING__)\r\n/*\r\n * The CMSIS functions have been implemented as intrinsics in the compiler.\r\n * Please use \"carm -?i\" to get an up to date list of all intrinsics,\r\n * Including the CMSIS ones.\r\n */\r\n\r\n/*------------------ COSMIC Compiler -------------------*/\r\n#elif defined(__CSMC__)\r\n#include <cmsis_csm.h>\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_RegAccFunctions */\r\n\r\n#endif /* __CORE_CMFUNC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Include/core_cmInstr.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cmInstr.h\r\n                                                                              * @brief    CMSIS Cortex-M Core Instruction Access Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CMINSTR_H\r\n#define __CORE_CMINSTR_H\r\n\r\n/* ##########################  Core Instruction Access  ######################### */\r\n/** \\defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface\r\n  Access to dedicated instructions\r\n  @{\r\n*/\r\n\r\n/*------------------ RealView Compiler -----------------*/\r\n#if defined(__CC_ARM)\r\n#include \"cmsis_armcc.h\"\r\n\r\n/*------------------ ARM Compiler V6 -------------------*/\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#include \"cmsis_armcc_V6.h\"\r\n\r\n/*------------------ GNU Compiler ----------------------*/\r\n#elif defined(__GNUC__)\r\n#include \"cmsis_gcc.h\"\r\n\r\n/*------------------ ICC Compiler ----------------------*/\r\n#elif defined(__ICCARM__)\r\n#include <cmsis_iar.h>\r\n\r\n/*------------------ TI CCS Compiler -------------------*/\r\n#elif defined(__TMS470__)\r\n#include <cmsis_ccs.h>\r\n\r\n/*------------------ TASKING Compiler ------------------*/\r\n#elif defined(__TASKING__)\r\n/*\r\n * The CMSIS functions have been implemented as intrinsics in the compiler.\r\n * Please use \"carm -?i\" to get an up to date list of all intrinsics,\r\n * Including the CMSIS ones.\r\n */\r\n\r\n/*------------------ COSMIC Compiler -------------------*/\r\n#elif defined(__CSMC__)\r\n#include <cmsis_csm.h>\r\n\r\n#endif\r\n\r\n/*@}*/ /* end of group CMSIS_Core_InstructionInterface */\r\n\r\n#endif /* __CORE_CMINSTR_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Include/core_cmSimd.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cmSimd.h\r\n                                                                              * @brief    CMSIS Cortex-M SIMD Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CMSIMD_H\r\n#define __CORE_CMSIMD_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* ###################  Compiler specific Intrinsics  ########################### */\r\n/** \\defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics\r\n  Access to dedicated SIMD instructions\r\n  @{\r\n*/\r\n\r\n/*------------------ RealView Compiler -----------------*/\r\n#if defined(__CC_ARM)\r\n#include \"cmsis_armcc.h\"\r\n\r\n/*------------------ ARM Compiler V6 -------------------*/\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#include \"cmsis_armcc_V6.h\"\r\n\r\n/*------------------ GNU Compiler ----------------------*/\r\n#elif defined(__GNUC__)\r\n#include \"cmsis_gcc.h\"\r\n\r\n/*------------------ ICC Compiler ----------------------*/\r\n#elif defined(__ICCARM__)\r\n#include <cmsis_iar.h>\r\n\r\n/*------------------ TI CCS Compiler -------------------*/\r\n#elif defined(__TMS470__)\r\n#include <cmsis_ccs.h>\r\n\r\n/*------------------ TASKING Compiler ------------------*/\r\n#elif defined(__TASKING__)\r\n/*\r\n * The CMSIS functions have been implemented as intrinsics in the compiler.\r\n * Please use \"carm -?i\" to get an up to date list of all intrinsics,\r\n * Including the CMSIS ones.\r\n */\r\n\r\n/*------------------ COSMIC Compiler -------------------*/\r\n#elif defined(__CSMC__)\r\n#include <cmsis_csm.h>\r\n\r\n#endif\r\n\r\n/*@} end of group CMSIS_SIMD_intrinsics */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CMSIMD_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Include/core_sc000.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_sc000.h\r\n                                                                              * @brief    CMSIS SC000 Core Peripheral Access Layer Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_SC000_H_GENERIC\r\n#define __CORE_SC000_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup SC000\r\n  @{\r\n */\r\n\r\n/*  CMSIS SC000 definitions */\r\n#define __SC000_CMSIS_VERSION_MAIN (0x04U)                                                           /*!< [31:16] CMSIS HAL main version */\r\n#define __SC000_CMSIS_VERSION_SUB  (0x1EU)                                                           /*!< [15:0]  CMSIS HAL sub version */\r\n#define __SC000_CMSIS_VERSION      ((__SC000_CMSIS_VERSION_MAIN << 16U) | __SC000_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */\r\n\r\n#define __CORTEX_SC (000U) /*!< Cortex secure core */\r\n\r\n#if defined(__CC_ARM)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__GNUC__)\r\n#define __ASM           __asm  /*!< asm keyword for GNU Compiler */\r\n#define __INLINE        inline /*!< inline keyword for GNU Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__ICCARM__)\r\n#define __ASM           __asm  /*!< asm keyword for IAR Compiler */\r\n#define __INLINE        inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TMS470__)\r\n#define __ASM           __asm /*!< asm keyword for TI CCS Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TASKING__)\r\n#define __ASM           __asm  /*!< asm keyword for TASKING Compiler */\r\n#define __INLINE        inline /*!< inline keyword for TASKING Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__CSMC__)\r\n#define __packed\r\n#define __ASM           _asm   /*!< asm keyword for COSMIC Compiler */\r\n#define __INLINE        inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */\r\n#define __STATIC_INLINE static inline\r\n\r\n#else\r\n#error Unknown compiler\r\n#endif\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    This core does not support an FPU at all\r\n*/\r\n#define __FPU_USED 0U\r\n\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TMS470__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"core_cmFunc.h\"  /* Core Function Access */\r\n#include \"core_cmInstr.h\" /* Core Instruction Access */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_SC000_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_SC000_H_DEPENDANT\r\n#define __CORE_SC000_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __SC000_REV\r\n#define __SC000_REV 0x0000U\r\n#warning \"__SC000_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __MPU_PRESENT\r\n#define __MPU_PRESENT 0U\r\n#warning \"__MPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 2U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group SC000 */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n  - Core MPU Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 28; /*!< bit:  0..27  Reserved */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 15; /*!< bit:  9..23  Reserved */\r\n    uint32_t T : 1;           /*!< bit:     24  Thumb bit        (read 0) */\r\n    uint32_t _reserved1 : 3;  /*!< bit: 25..27  Reserved */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 1;  /*!< bit:      0  Reserved */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t _reserved1 : 30; /*!< bit:  2..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[31U];\r\n  __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[31U];\r\n  __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[31U];\r\n  __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[31U];\r\n  uint32_t       RESERVED4[64U];\r\n  __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */\r\n} NVIC_Type;\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID; /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;  /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n  __IOM uint32_t VTOR;  /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */\r\n  __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;   /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;   /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */\r\n  __IOM uint32_t SHCSR;   /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n  uint32_t       RESERVED1[154U];\r\n  __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W)  Security Features Control Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_VTOR_TBLOFF_Pos 7U                                   /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)\r\n  \\brief    Type definitions for the System Control and ID Register not in the SCB\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control and ID Register not in the SCB.\r\n */\r\ntypedef struct {\r\n  uint32_t       RESERVED0[2U];\r\n  __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */\r\n} SCnSCB_Type;\r\n\r\n/* Auxiliary Control Register Definitions */\r\n#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U                                       /*!< ACTLR: DISMCYCINT Position */\r\n#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */\r\n\r\n/*@} end of group CMSIS_SCnotSCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_MPU     Memory Protection Unit (MPU)\r\n  \\brief    Type definitions for the Memory Protection Unit (MPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Memory Protection Unit (MPU).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  TYPE; /*!< Offset: 0x000 (R/ )  MPU Type Register */\r\n  __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W)  MPU Control Register */\r\n  __IOM uint32_t RNR;  /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */\r\n  __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */\r\n  __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */\r\n} MPU_Type;\r\n\r\n/* MPU Type Register Definitions */\r\n#define MPU_TYPE_IREGION_Pos 16U                              /*!< MPU TYPE: IREGION Position */\r\n#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */\r\n\r\n#define MPU_TYPE_DREGION_Pos 8U                               /*!< MPU TYPE: DREGION Position */\r\n#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */\r\n\r\n#define MPU_TYPE_SEPARATE_Pos 0U                                 /*!< MPU TYPE: SEPARATE Position */\r\n#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */\r\n\r\n/* MPU Control Register Definitions */\r\n#define MPU_CTRL_PRIVDEFENA_Pos 2U                               /*!< MPU CTRL: PRIVDEFENA Position */\r\n#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */\r\n\r\n#define MPU_CTRL_HFNMIENA_Pos 1U                             /*!< MPU CTRL: HFNMIENA Position */\r\n#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */\r\n\r\n#define MPU_CTRL_ENABLE_Pos 0U                               /*!< MPU CTRL: ENABLE Position */\r\n#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */\r\n\r\n/* MPU Region Number Register Definitions */\r\n#define MPU_RNR_REGION_Pos 0U                                 /*!< MPU RNR: REGION Position */\r\n#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */\r\n\r\n/* MPU Region Base Address Register Definitions */\r\n#define MPU_RBAR_ADDR_Pos 8U                                /*!< MPU RBAR: ADDR Position */\r\n#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */\r\n\r\n#define MPU_RBAR_VALID_Pos 4U                          /*!< MPU RBAR: VALID Position */\r\n#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */\r\n\r\n#define MPU_RBAR_REGION_Pos 0U                                 /*!< MPU RBAR: REGION Position */\r\n#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */\r\n\r\n/* MPU Region Attribute and Size Register Definitions */\r\n#define MPU_RASR_ATTRS_Pos 16U                              /*!< MPU RASR: MPU Region Attribute field Position */\r\n#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */\r\n\r\n#define MPU_RASR_XN_Pos 28U                      /*!< MPU RASR: ATTRS.XN Position */\r\n#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */\r\n\r\n#define MPU_RASR_AP_Pos 24U                        /*!< MPU RASR: ATTRS.AP Position */\r\n#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */\r\n\r\n#define MPU_RASR_TEX_Pos 19U                         /*!< MPU RASR: ATTRS.TEX Position */\r\n#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */\r\n\r\n#define MPU_RASR_S_Pos 18U                     /*!< MPU RASR: ATTRS.S Position */\r\n#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */\r\n\r\n#define MPU_RASR_C_Pos 17U                     /*!< MPU RASR: ATTRS.C Position */\r\n#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */\r\n\r\n#define MPU_RASR_B_Pos 16U                     /*!< MPU RASR: ATTRS.B Position */\r\n#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */\r\n\r\n#define MPU_RASR_SRD_Pos 8U                           /*!< MPU RASR: Sub-Region Disable Position */\r\n#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */\r\n\r\n#define MPU_RASR_SIZE_Pos 1U                            /*!< MPU RASR: Region Size Field Position */\r\n#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */\r\n\r\n#define MPU_RASR_ENABLE_Pos 0U                               /*!< MPU RASR: Region enable bit Position */\r\n#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */\r\n\r\n/*@} end of group CMSIS_MPU */\r\n#endif\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    SC000 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor.\r\n            Therefore they are not covered by the SC000 header file.\r\n  @{\r\n */\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) ((value << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) ((value & field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of SC000 Hardware */\r\n#define SCS_BASE     (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE    (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE     (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCnSCB  ((SCnSCB_Type *)SCS_BASE)      /*!< System control Register not in SCB */\r\n#define SCB     ((SCB_Type *)SCB_BASE)         /*!< SCB configuration struct */\r\n#define SysTick ((SysTick_Type *)SysTick_BASE) /*!< SysTick configuration struct */\r\n#define NVIC    ((NVIC_Type *)NVIC_BASE)       /*!< NVIC configuration struct */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n#define MPU_BASE (SCS_BASE + 0x0D90UL)  /*!< Memory Protection Unit */\r\n#define MPU      ((MPU_Type *)MPU_BASE) /*!< Memory Protection Unit */\r\n#endif\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n/* Interrupt Priorities are WORD accessible only under ARMv6M                   */\r\n/* The following MACROS handle generation of the register offset and byte masks */\r\n#define _BIT_SHIFT(IRQn) (((((uint32_t)(int32_t)(IRQn))) & 0x03UL) * 8UL)\r\n#define _SHP_IDX(IRQn)   ((((((uint32_t)(int32_t)(IRQn)) & 0x0FUL) - 8UL) >> 2UL))\r\n#define _IP_IDX(IRQn)    ((((uint32_t)(int32_t)(IRQn)) >> 2UL))\r\n\r\n/**\r\n  \\brief   Enable External Interrupt\r\n  \\details Enables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Disable External Interrupt\r\n  \\details Disables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) { NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) { return ((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); }\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  Interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) { NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) { NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of an interrupt.\r\n  \\note    The priority cannot be set for every core interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) < 0) {\r\n    SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));\r\n  } else {\r\n    NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of an interrupt.\r\n           The interrupt number can be positive to specify an external (device specific) interrupt,\r\n           or negative to specify an internal (core) interrupt.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) < 0) {\r\n    return ((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn)) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return ((uint32_t)(((NVIC->IP[_IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn)) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__STATIC_INLINE void NVIC_SystemReset(void) {\r\n  __DSB(); /* Ensure all outstanding memory accesses included\r\n              buffered write are completed before reset */\r\n  SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | SCB_AIRCR_SYSRESETREQ_Msk);\r\n  __DSB(); /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_SC000_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/CMSIS/Include/core_sc300.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_sc300.h\r\n                                                                              * @brief    CMSIS SC300 Core Peripheral Access Layer Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_SC300_H_GENERIC\r\n#define __CORE_SC300_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup SC3000\r\n  @{\r\n */\r\n\r\n/*  CMSIS SC300 definitions */\r\n#define __SC300_CMSIS_VERSION_MAIN (0x04U)                                                           /*!< [31:16] CMSIS HAL main version */\r\n#define __SC300_CMSIS_VERSION_SUB  (0x1EU)                                                           /*!< [15:0]  CMSIS HAL sub version */\r\n#define __SC300_CMSIS_VERSION      ((__SC300_CMSIS_VERSION_MAIN << 16U) | __SC300_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */\r\n\r\n#define __CORTEX_SC (300U) /*!< Cortex secure core */\r\n\r\n#if defined(__CC_ARM)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__GNUC__)\r\n#define __ASM           __asm  /*!< asm keyword for GNU Compiler */\r\n#define __INLINE        inline /*!< inline keyword for GNU Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__ICCARM__)\r\n#define __ASM           __asm  /*!< asm keyword for IAR Compiler */\r\n#define __INLINE        inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TMS470__)\r\n#define __ASM           __asm /*!< asm keyword for TI CCS Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TASKING__)\r\n#define __ASM           __asm  /*!< asm keyword for TASKING Compiler */\r\n#define __INLINE        inline /*!< inline keyword for TASKING Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__CSMC__)\r\n#define __packed\r\n#define __ASM           _asm   /*!< asm keyword for COSMIC Compiler */\r\n#define __INLINE        inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */\r\n#define __STATIC_INLINE static inline\r\n\r\n#else\r\n#error Unknown compiler\r\n#endif\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    This core does not support an FPU at all\r\n*/\r\n#define __FPU_USED 0U\r\n\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TMS470__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"core_cmFunc.h\"  /* Core Function Access */\r\n#include \"core_cmInstr.h\" /* Core Instruction Access */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_SC300_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_SC300_H_DEPENDANT\r\n#define __CORE_SC300_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __SC300_REV\r\n#define __SC300_REV 0x0000U\r\n#warning \"__SC300_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __MPU_PRESENT\r\n#define __MPU_PRESENT 0U\r\n#warning \"__MPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 4U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group SC300 */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n  - Core Debug Register\r\n  - Core MPU Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 27; /*!< bit:  0..26  Reserved */\r\n    uint32_t Q : 1;           /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n#define APSR_Q_Pos 27U                 /*!< APSR: Q Position */\r\n#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 15; /*!< bit:  9..23  Reserved */\r\n    uint32_t T : 1;           /*!< bit:     24  Thumb bit        (read 0) */\r\n    uint32_t IT : 2;          /*!< bit: 25..26  saved IT state   (read 0) */\r\n    uint32_t Q : 1;           /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_Q_Pos 27U                 /*!< xPSR: Q Position */\r\n#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */\r\n\r\n#define xPSR_IT_Pos 25U                  /*!< xPSR: IT Position */\r\n#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t nPRIV : 1;       /*!< bit:      0  Execution privilege in Thread mode */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t _reserved1 : 30; /*!< bit:  2..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n#define CONTROL_nPRIV_Pos 0U                             /*!< CONTROL: nPRIV Position */\r\n#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[24U];\r\n  __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[24U];\r\n  __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[24U];\r\n  __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[24U];\r\n  __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */\r\n  uint32_t       RESERVED4[56U];\r\n  __IOM uint8_t  IP[240U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */\r\n  uint32_t       RESERVED5[644U];\r\n  __OM uint32_t  STIR; /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */\r\n} NVIC_Type;\r\n\r\n/* Software Triggered Interrupt Register Definitions */\r\n#define NVIC_STIR_INTID_Pos 0U                                   /*!< STIR: INTLINESNUM Position */\r\n#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID;    /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;     /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n  __IOM uint32_t VTOR;     /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */\r\n  __IOM uint32_t AIRCR;    /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;      /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;      /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  __IOM uint8_t  SHP[12U]; /*!< Offset: 0x018 (R/W)  System Handlers Priority Registers (4-7, 8-11, 12-15) */\r\n  __IOM uint32_t SHCSR;    /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n  __IOM uint32_t CFSR;     /*!< Offset: 0x028 (R/W)  Configurable Fault Status Register */\r\n  __IOM uint32_t HFSR;     /*!< Offset: 0x02C (R/W)  HardFault Status Register */\r\n  __IOM uint32_t DFSR;     /*!< Offset: 0x030 (R/W)  Debug Fault Status Register */\r\n  __IOM uint32_t MMFAR;    /*!< Offset: 0x034 (R/W)  MemManage Fault Address Register */\r\n  __IOM uint32_t BFAR;     /*!< Offset: 0x038 (R/W)  BusFault Address Register */\r\n  __IOM uint32_t AFSR;     /*!< Offset: 0x03C (R/W)  Auxiliary Fault Status Register */\r\n  __IM uint32_t  PFR[2U];  /*!< Offset: 0x040 (R/ )  Processor Feature Register */\r\n  __IM uint32_t  DFR;      /*!< Offset: 0x048 (R/ )  Debug Feature Register */\r\n  __IM uint32_t  ADR;      /*!< Offset: 0x04C (R/ )  Auxiliary Feature Register */\r\n  __IM uint32_t  MMFR[4U]; /*!< Offset: 0x050 (R/ )  Memory Model Feature Register */\r\n  __IM uint32_t  ISAR[5U]; /*!< Offset: 0x060 (R/ )  Instruction Set Attributes Register */\r\n  uint32_t       RESERVED0[5U];\r\n  __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W)  Coprocessor Access Control Register */\r\n  uint32_t       RESERVED1[129U];\r\n  __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W)  Security Features Control Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_RETTOBASE_Pos 11U                             /*!< SCB ICSR: RETTOBASE Position */\r\n#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n/* SCB Vector Table Offset Register Definitions */\r\n#define SCB_VTOR_TBLBASE_Pos 29U                           /*!< SCB VTOR: TBLBASE Position */\r\n#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */\r\n\r\n#define SCB_VTOR_TBLOFF_Pos 7U                                  /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_PRIGROUP_Pos 8U                              /*!< SCB AIRCR: PRIGROUP Position */\r\n#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n#define SCB_AIRCR_VECTRESET_Pos 0U                                   /*!< SCB AIRCR: VECTRESET Position */\r\n#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_BFHFNMIGN_Pos 8U                             /*!< SCB CCR: BFHFNMIGN Position */\r\n#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */\r\n\r\n#define SCB_CCR_DIV_0_TRP_Pos 4U                             /*!< SCB CCR: DIV_0_TRP Position */\r\n#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n#define SCB_CCR_USERSETMPEND_Pos 1U                                /*!< SCB CCR: USERSETMPEND Position */\r\n#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */\r\n\r\n#define SCB_CCR_NONBASETHRDENA_Pos 0U                                      /*!< SCB CCR: NONBASETHRDENA Position */\r\n#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_USGFAULTENA_Pos 18U                                /*!< SCB SHCSR: USGFAULTENA Position */\r\n#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTENA_Pos 17U                                /*!< SCB SHCSR: BUSFAULTENA Position */\r\n#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTENA_Pos 16U                                /*!< SCB SHCSR: MEMFAULTENA Position */\r\n#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U                                   /*!< SCB SHCSR: BUSFAULTPENDED Position */\r\n#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U                                   /*!< SCB SHCSR: MEMFAULTPENDED Position */\r\n#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTPENDED_Pos 12U                                   /*!< SCB SHCSR: USGFAULTPENDED Position */\r\n#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_SYSTICKACT_Pos 11U                               /*!< SCB SHCSR: SYSTICKACT Position */\r\n#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */\r\n\r\n#define SCB_SHCSR_PENDSVACT_Pos 10U                              /*!< SCB SHCSR: PENDSVACT Position */\r\n#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */\r\n\r\n#define SCB_SHCSR_MONITORACT_Pos 8U                                /*!< SCB SHCSR: MONITORACT Position */\r\n#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */\r\n\r\n#define SCB_SHCSR_SVCALLACT_Pos 7U                               /*!< SCB SHCSR: SVCALLACT Position */\r\n#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTACT_Pos 3U                                 /*!< SCB SHCSR: USGFAULTACT Position */\r\n#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTACT_Pos 1U                                 /*!< SCB SHCSR: BUSFAULTACT Position */\r\n#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTACT_Pos 0U                                     /*!< SCB SHCSR: MEMFAULTACT Position */\r\n#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */\r\n\r\n/* SCB Configurable Fault Status Register Definitions */\r\n#define SCB_CFSR_USGFAULTSR_Pos 16U                                   /*!< SCB CFSR: Usage Fault Status Register Position */\r\n#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_BUSFAULTSR_Pos 8U                                  /*!< SCB CFSR: Bus Fault Status Register Position */\r\n#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_MEMFAULTSR_Pos 0U                                      /*!< SCB CFSR: Memory Manage Fault Status Register Position */\r\n#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */\r\n\r\n/* SCB Hard Fault Status Register Definitions */\r\n#define SCB_HFSR_DEBUGEVT_Pos 31U                            /*!< SCB HFSR: DEBUGEVT Position */\r\n#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */\r\n\r\n#define SCB_HFSR_FORCED_Pos 30U                          /*!< SCB HFSR: FORCED Position */\r\n#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */\r\n\r\n#define SCB_HFSR_VECTTBL_Pos 1U                            /*!< SCB HFSR: VECTTBL Position */\r\n#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */\r\n\r\n/* SCB Debug Fault Status Register Definitions */\r\n#define SCB_DFSR_EXTERNAL_Pos 4U                             /*!< SCB DFSR: EXTERNAL Position */\r\n#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */\r\n\r\n#define SCB_DFSR_VCATCH_Pos 3U                           /*!< SCB DFSR: VCATCH Position */\r\n#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */\r\n\r\n#define SCB_DFSR_DWTTRAP_Pos 2U                            /*!< SCB DFSR: DWTTRAP Position */\r\n#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */\r\n\r\n#define SCB_DFSR_BKPT_Pos 1U                         /*!< SCB DFSR: BKPT Position */\r\n#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */\r\n\r\n#define SCB_DFSR_HALTED_Pos 0U                               /*!< SCB DFSR: HALTED Position */\r\n#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)\r\n  \\brief    Type definitions for the System Control and ID Register not in the SCB\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control and ID Register not in the SCB.\r\n */\r\ntypedef struct {\r\n  uint32_t      RESERVED0[1U];\r\n  __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */\r\n  uint32_t      RESERVED1[1U];\r\n} SCnSCB_Type;\r\n\r\n/* Interrupt Controller Type Register Definitions */\r\n#define SCnSCB_ICTR_INTLINESNUM_Pos 0U                                         /*!< ICTR: INTLINESNUM Position */\r\n#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */\r\n\r\n/*@} end of group CMSIS_SCnotSCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_ITM     Instrumentation Trace Macrocell (ITM)\r\n  \\brief    Type definitions for the Instrumentation Trace Macrocell (ITM)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Instrumentation Trace Macrocell Register (ITM).\r\n */\r\ntypedef struct {\r\n  __OM union {\r\n    __OM uint8_t  u8;  /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 8-bit */\r\n    __OM uint16_t u16; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 16-bit */\r\n    __OM uint32_t u32; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 32-bit */\r\n  } PORT[32U];         /*!< Offset: 0x000 ( /W)  ITM Stimulus Port Registers */\r\n  uint32_t       RESERVED0[864U];\r\n  __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W)  ITM Trace Enable Register */\r\n  uint32_t       RESERVED1[15U];\r\n  __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */\r\n  uint32_t       RESERVED2[15U];\r\n  __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */\r\n  uint32_t       RESERVED3[29U];\r\n  __OM uint32_t  IWR;  /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */\r\n  __IM uint32_t  IRR;  /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */\r\n  __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */\r\n  uint32_t       RESERVED4[43U];\r\n  __OM uint32_t  LAR; /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */\r\n  __IM uint32_t  LSR; /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */\r\n  uint32_t       RESERVED5[6U];\r\n  __IM uint32_t  PID4; /*!< Offset: 0xFD0 (R/ )  ITM Peripheral Identification Register #4 */\r\n  __IM uint32_t  PID5; /*!< Offset: 0xFD4 (R/ )  ITM Peripheral Identification Register #5 */\r\n  __IM uint32_t  PID6; /*!< Offset: 0xFD8 (R/ )  ITM Peripheral Identification Register #6 */\r\n  __IM uint32_t  PID7; /*!< Offset: 0xFDC (R/ )  ITM Peripheral Identification Register #7 */\r\n  __IM uint32_t  PID0; /*!< Offset: 0xFE0 (R/ )  ITM Peripheral Identification Register #0 */\r\n  __IM uint32_t  PID1; /*!< Offset: 0xFE4 (R/ )  ITM Peripheral Identification Register #1 */\r\n  __IM uint32_t  PID2; /*!< Offset: 0xFE8 (R/ )  ITM Peripheral Identification Register #2 */\r\n  __IM uint32_t  PID3; /*!< Offset: 0xFEC (R/ )  ITM Peripheral Identification Register #3 */\r\n  __IM uint32_t  CID0; /*!< Offset: 0xFF0 (R/ )  ITM Component  Identification Register #0 */\r\n  __IM uint32_t  CID1; /*!< Offset: 0xFF4 (R/ )  ITM Component  Identification Register #1 */\r\n  __IM uint32_t  CID2; /*!< Offset: 0xFF8 (R/ )  ITM Component  Identification Register #2 */\r\n  __IM uint32_t  CID3; /*!< Offset: 0xFFC (R/ )  ITM Component  Identification Register #3 */\r\n} ITM_Type;\r\n\r\n/* ITM Trace Privilege Register Definitions */\r\n#define ITM_TPR_PRIVMASK_Pos 0U                                  /*!< ITM TPR: PRIVMASK Position */\r\n#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */\r\n\r\n/* ITM Trace Control Register Definitions */\r\n#define ITM_TCR_BUSY_Pos 23U                       /*!< ITM TCR: BUSY Position */\r\n#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */\r\n\r\n#define ITM_TCR_TraceBusID_Pos 16U                                /*!< ITM TCR: ATBID Position */\r\n#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */\r\n\r\n#define ITM_TCR_GTSFREQ_Pos 10U                          /*!< ITM TCR: Global timestamp frequency Position */\r\n#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */\r\n\r\n#define ITM_TCR_TSPrescale_Pos 8U                              /*!< ITM TCR: TSPrescale Position */\r\n#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */\r\n\r\n#define ITM_TCR_SWOENA_Pos 4U                          /*!< ITM TCR: SWOENA Position */\r\n#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */\r\n\r\n#define ITM_TCR_DWTENA_Pos 3U                          /*!< ITM TCR: DWTENA Position */\r\n#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */\r\n\r\n#define ITM_TCR_SYNCENA_Pos 2U                           /*!< ITM TCR: SYNCENA Position */\r\n#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */\r\n\r\n#define ITM_TCR_TSENA_Pos 1U                         /*!< ITM TCR: TSENA Position */\r\n#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */\r\n\r\n#define ITM_TCR_ITMENA_Pos 0U                              /*!< ITM TCR: ITM Enable bit Position */\r\n#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */\r\n\r\n/* ITM Integration Write Register Definitions */\r\n#define ITM_IWR_ATVALIDM_Pos 0U                                /*!< ITM IWR: ATVALIDM Position */\r\n#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */\r\n\r\n/* ITM Integration Read Register Definitions */\r\n#define ITM_IRR_ATREADYM_Pos 0U                                /*!< ITM IRR: ATREADYM Position */\r\n#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */\r\n\r\n/* ITM Integration Mode Control Register Definitions */\r\n#define ITM_IMCR_INTEGRATION_Pos 0U                                    /*!< ITM IMCR: INTEGRATION Position */\r\n#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */\r\n\r\n/* ITM Lock Status Register Definitions */\r\n#define ITM_LSR_ByteAcc_Pos 2U                           /*!< ITM LSR: ByteAcc Position */\r\n#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */\r\n\r\n#define ITM_LSR_Access_Pos 1U                          /*!< ITM LSR: Access Position */\r\n#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */\r\n\r\n#define ITM_LSR_Present_Pos 0U                               /*!< ITM LSR: Present Position */\r\n#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_ITM */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)\r\n  \\brief    Type definitions for the Data Watchpoint and Trace (DWT)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Data Watchpoint and Trace Register (DWT).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;      /*!< Offset: 0x000 (R/W)  Control Register */\r\n  __IOM uint32_t CYCCNT;    /*!< Offset: 0x004 (R/W)  Cycle Count Register */\r\n  __IOM uint32_t CPICNT;    /*!< Offset: 0x008 (R/W)  CPI Count Register */\r\n  __IOM uint32_t EXCCNT;    /*!< Offset: 0x00C (R/W)  Exception Overhead Count Register */\r\n  __IOM uint32_t SLEEPCNT;  /*!< Offset: 0x010 (R/W)  Sleep Count Register */\r\n  __IOM uint32_t LSUCNT;    /*!< Offset: 0x014 (R/W)  LSU Count Register */\r\n  __IOM uint32_t FOLDCNT;   /*!< Offset: 0x018 (R/W)  Folded-instruction Count Register */\r\n  __IM uint32_t  PCSR;      /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */\r\n  __IOM uint32_t COMP0;     /*!< Offset: 0x020 (R/W)  Comparator Register 0 */\r\n  __IOM uint32_t MASK0;     /*!< Offset: 0x024 (R/W)  Mask Register 0 */\r\n  __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W)  Function Register 0 */\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t COMP1;     /*!< Offset: 0x030 (R/W)  Comparator Register 1 */\r\n  __IOM uint32_t MASK1;     /*!< Offset: 0x034 (R/W)  Mask Register 1 */\r\n  __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W)  Function Register 1 */\r\n  uint32_t       RESERVED1[1U];\r\n  __IOM uint32_t COMP2;     /*!< Offset: 0x040 (R/W)  Comparator Register 2 */\r\n  __IOM uint32_t MASK2;     /*!< Offset: 0x044 (R/W)  Mask Register 2 */\r\n  __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W)  Function Register 2 */\r\n  uint32_t       RESERVED2[1U];\r\n  __IOM uint32_t COMP3;     /*!< Offset: 0x050 (R/W)  Comparator Register 3 */\r\n  __IOM uint32_t MASK3;     /*!< Offset: 0x054 (R/W)  Mask Register 3 */\r\n  __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W)  Function Register 3 */\r\n} DWT_Type;\r\n\r\n/* DWT Control Register Definitions */\r\n#define DWT_CTRL_NUMCOMP_Pos 28U                             /*!< DWT CTRL: NUMCOMP Position */\r\n#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */\r\n\r\n#define DWT_CTRL_NOTRCPKT_Pos 27U                              /*!< DWT CTRL: NOTRCPKT Position */\r\n#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */\r\n\r\n#define DWT_CTRL_NOEXTTRIG_Pos 26U                               /*!< DWT CTRL: NOEXTTRIG Position */\r\n#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */\r\n\r\n#define DWT_CTRL_NOCYCCNT_Pos 25U                              /*!< DWT CTRL: NOCYCCNT Position */\r\n#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */\r\n\r\n#define DWT_CTRL_NOPRFCNT_Pos 24U                              /*!< DWT CTRL: NOPRFCNT Position */\r\n#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */\r\n\r\n#define DWT_CTRL_CYCEVTENA_Pos 22U                               /*!< DWT CTRL: CYCEVTENA Position */\r\n#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */\r\n\r\n#define DWT_CTRL_FOLDEVTENA_Pos 21U                                /*!< DWT CTRL: FOLDEVTENA Position */\r\n#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */\r\n\r\n#define DWT_CTRL_LSUEVTENA_Pos 20U                               /*!< DWT CTRL: LSUEVTENA Position */\r\n#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */\r\n\r\n#define DWT_CTRL_SLEEPEVTENA_Pos 19U                                 /*!< DWT CTRL: SLEEPEVTENA Position */\r\n#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCEVTENA_Pos 18U                               /*!< DWT CTRL: EXCEVTENA Position */\r\n#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */\r\n\r\n#define DWT_CTRL_CPIEVTENA_Pos 17U                               /*!< DWT CTRL: CPIEVTENA Position */\r\n#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCTRCENA_Pos 16U                               /*!< DWT CTRL: EXCTRCENA Position */\r\n#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */\r\n\r\n#define DWT_CTRL_PCSAMPLENA_Pos 12U                                /*!< DWT CTRL: PCSAMPLENA Position */\r\n#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */\r\n\r\n#define DWT_CTRL_SYNCTAP_Pos 10U                             /*!< DWT CTRL: SYNCTAP Position */\r\n#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */\r\n\r\n#define DWT_CTRL_CYCTAP_Pos 9U                             /*!< DWT CTRL: CYCTAP Position */\r\n#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */\r\n\r\n#define DWT_CTRL_POSTINIT_Pos 5U                               /*!< DWT CTRL: POSTINIT Position */\r\n#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */\r\n\r\n#define DWT_CTRL_POSTPRESET_Pos 1U                                 /*!< DWT CTRL: POSTPRESET Position */\r\n#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */\r\n\r\n#define DWT_CTRL_CYCCNTENA_Pos 0U                                    /*!< DWT CTRL: CYCCNTENA Position */\r\n#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */\r\n\r\n/* DWT CPI Count Register Definitions */\r\n#define DWT_CPICNT_CPICNT_Pos 0U                                    /*!< DWT CPICNT: CPICNT Position */\r\n#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */\r\n\r\n/* DWT Exception Overhead Count Register Definitions */\r\n#define DWT_EXCCNT_EXCCNT_Pos 0U                                    /*!< DWT EXCCNT: EXCCNT Position */\r\n#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */\r\n\r\n/* DWT Sleep Count Register Definitions */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U                                        /*!< DWT SLEEPCNT: SLEEPCNT Position */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */\r\n\r\n/* DWT LSU Count Register Definitions */\r\n#define DWT_LSUCNT_LSUCNT_Pos 0U                                    /*!< DWT LSUCNT: LSUCNT Position */\r\n#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */\r\n\r\n/* DWT Folded-instruction Count Register Definitions */\r\n#define DWT_FOLDCNT_FOLDCNT_Pos 0U                                      /*!< DWT FOLDCNT: FOLDCNT Position */\r\n#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */\r\n\r\n/* DWT Comparator Mask Register Definitions */\r\n#define DWT_MASK_MASK_Pos 0U                                /*!< DWT MASK: MASK Position */\r\n#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */\r\n\r\n/* DWT Comparator Function Register Definitions */\r\n#define DWT_FUNCTION_MATCHED_Pos 24U                                 /*!< DWT FUNCTION: MATCHED Position */\r\n#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR1_Pos 16U                                    /*!< DWT FUNCTION: DATAVADDR1 Position */\r\n#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR0_Pos 12U                                    /*!< DWT FUNCTION: DATAVADDR0 Position */\r\n#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVSIZE_Pos 10U                                   /*!< DWT FUNCTION: DATAVSIZE Position */\r\n#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */\r\n\r\n#define DWT_FUNCTION_LNK1ENA_Pos 9U                                  /*!< DWT FUNCTION: LNK1ENA Position */\r\n#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */\r\n\r\n#define DWT_FUNCTION_DATAVMATCH_Pos 8U                                     /*!< DWT FUNCTION: DATAVMATCH Position */\r\n#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */\r\n\r\n#define DWT_FUNCTION_CYCMATCH_Pos 7U                                   /*!< DWT FUNCTION: CYCMATCH Position */\r\n#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */\r\n\r\n#define DWT_FUNCTION_EMITRANGE_Pos 5U                                    /*!< DWT FUNCTION: EMITRANGE Position */\r\n#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */\r\n\r\n#define DWT_FUNCTION_FUNCTION_Pos 0U                                       /*!< DWT FUNCTION: FUNCTION Position */\r\n#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_DWT */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_TPI     Trace Port Interface (TPI)\r\n  \\brief    Type definitions for the Trace Port Interface (TPI)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Trace Port Interface Register (TPI).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t SSPSR; /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */\r\n  __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */\r\n  uint32_t       RESERVED0[2U];\r\n  __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */\r\n  uint32_t       RESERVED1[55U];\r\n  __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */\r\n  uint32_t       RESERVED2[131U];\r\n  __IM uint32_t  FFSR; /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */\r\n  __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */\r\n  __IM uint32_t  FSCR; /*!< Offset: 0x308 (R/ )  Formatter Synchronization Counter Register */\r\n  uint32_t       RESERVED3[759U];\r\n  __IM uint32_t  TRIGGER;   /*!< Offset: 0xEE8 (R/ )  TRIGGER */\r\n  __IM uint32_t  FIFO0;     /*!< Offset: 0xEEC (R/ )  Integration ETM Data */\r\n  __IM uint32_t  ITATBCTR2; /*!< Offset: 0xEF0 (R/ )  ITATBCTR2 */\r\n  uint32_t       RESERVED4[1U];\r\n  __IM uint32_t  ITATBCTR0; /*!< Offset: 0xEF8 (R/ )  ITATBCTR0 */\r\n  __IM uint32_t  FIFO1;     /*!< Offset: 0xEFC (R/ )  Integration ITM Data */\r\n  __IOM uint32_t ITCTRL;    /*!< Offset: 0xF00 (R/W)  Integration Mode Control */\r\n  uint32_t       RESERVED5[39U];\r\n  __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W)  Claim tag set */\r\n  __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W)  Claim tag clear */\r\n  uint32_t       RESERVED7[8U];\r\n  __IM uint32_t  DEVID;   /*!< Offset: 0xFC8 (R/ )  TPIU_DEVID */\r\n  __IM uint32_t  DEVTYPE; /*!< Offset: 0xFCC (R/ )  TPIU_DEVTYPE */\r\n} TPI_Type;\r\n\r\n/* TPI Asynchronous Clock Prescaler Register Definitions */\r\n#define TPI_ACPR_PRESCALER_Pos 0U                                       /*!< TPI ACPR: PRESCALER Position */\r\n#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */\r\n\r\n/* TPI Selected Pin Protocol Register Definitions */\r\n#define TPI_SPPR_TXMODE_Pos 0U                                 /*!< TPI SPPR: TXMODE Position */\r\n#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */\r\n\r\n/* TPI Formatter and Flush Status Register Definitions */\r\n#define TPI_FFSR_FtNonStop_Pos 3U                                /*!< TPI FFSR: FtNonStop Position */\r\n#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */\r\n\r\n#define TPI_FFSR_TCPresent_Pos 2U                                /*!< TPI FFSR: TCPresent Position */\r\n#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */\r\n\r\n#define TPI_FFSR_FtStopped_Pos 1U                                /*!< TPI FFSR: FtStopped Position */\r\n#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */\r\n\r\n#define TPI_FFSR_FlInProg_Pos 0U                                   /*!< TPI FFSR: FlInProg Position */\r\n#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */\r\n\r\n/* TPI Formatter and Flush Control Register Definitions */\r\n#define TPI_FFCR_TrigIn_Pos 8U                             /*!< TPI FFCR: TrigIn Position */\r\n#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */\r\n\r\n#define TPI_FFCR_EnFCont_Pos 1U                              /*!< TPI FFCR: EnFCont Position */\r\n#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */\r\n\r\n/* TPI TRIGGER Register Definitions */\r\n#define TPI_TRIGGER_TRIGGER_Pos 0U                                     /*!< TPI TRIGGER: TRIGGER Position */\r\n#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */\r\n\r\n/* TPI Integration ETM Data Register Definitions (FIFO0) */\r\n#define TPI_FIFO0_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO0: ITM_ATVALID Position */\r\n#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO0: ITM_bytecount Position */\r\n#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO0: ETM_ATVALID Position */\r\n#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO0: ETM_bytecount Position */\r\n#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM2_Pos 16U                            /*!< TPI FIFO0: ETM2 Position */\r\n#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */\r\n\r\n#define TPI_FIFO0_ETM1_Pos 8U                             /*!< TPI FIFO0: ETM1 Position */\r\n#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */\r\n\r\n#define TPI_FIFO0_ETM0_Pos 0U                                 /*!< TPI FIFO0: ETM0 Position */\r\n#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */\r\n\r\n/* TPI ITATBCTR2 Register Definitions */\r\n#define TPI_ITATBCTR2_ATREADY_Pos 0U                                       /*!< TPI ITATBCTR2: ATREADY Position */\r\n#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/) /*!< TPI ITATBCTR2: ATREADY Mask */\r\n\r\n/* TPI Integration ITM Data Register Definitions (FIFO1) */\r\n#define TPI_FIFO1_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO1: ITM_ATVALID Position */\r\n#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO1: ITM_bytecount Position */\r\n#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO1: ETM_ATVALID Position */\r\n#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO1: ETM_bytecount Position */\r\n#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ITM2_Pos 16U                            /*!< TPI FIFO1: ITM2 Position */\r\n#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */\r\n\r\n#define TPI_FIFO1_ITM1_Pos 8U                             /*!< TPI FIFO1: ITM1 Position */\r\n#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */\r\n\r\n#define TPI_FIFO1_ITM0_Pos 0U                                 /*!< TPI FIFO1: ITM0 Position */\r\n#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */\r\n\r\n/* TPI ITATBCTR0 Register Definitions */\r\n#define TPI_ITATBCTR0_ATREADY_Pos 0U                                       /*!< TPI ITATBCTR0: ATREADY Position */\r\n#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/) /*!< TPI ITATBCTR0: ATREADY Mask */\r\n\r\n/* TPI Integration Mode Control Register Definitions */\r\n#define TPI_ITCTRL_Mode_Pos 0U                                 /*!< TPI ITCTRL: Mode Position */\r\n#define TPI_ITCTRL_Mode_Msk (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */\r\n\r\n/* TPI DEVID Register Definitions */\r\n#define TPI_DEVID_NRZVALID_Pos 11U                               /*!< TPI DEVID: NRZVALID Position */\r\n#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */\r\n\r\n#define TPI_DEVID_MANCVALID_Pos 10U                                /*!< TPI DEVID: MANCVALID Position */\r\n#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */\r\n\r\n#define TPI_DEVID_PTINVALID_Pos 9U                                 /*!< TPI DEVID: PTINVALID Position */\r\n#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */\r\n\r\n#define TPI_DEVID_MinBufSz_Pos 6U                                /*!< TPI DEVID: MinBufSz Position */\r\n#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */\r\n\r\n#define TPI_DEVID_AsynClkIn_Pos 5U                                 /*!< TPI DEVID: AsynClkIn Position */\r\n#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */\r\n\r\n#define TPI_DEVID_NrTraceInput_Pos 0U                                         /*!< TPI DEVID: NrTraceInput Position */\r\n#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */\r\n\r\n/* TPI DEVTYPE Register Definitions */\r\n#define TPI_DEVTYPE_MajorType_Pos 4U                                   /*!< TPI DEVTYPE: MajorType Position */\r\n#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */\r\n\r\n#define TPI_DEVTYPE_SubType_Pos 0U                                     /*!< TPI DEVTYPE: SubType Position */\r\n#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_TPI */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_MPU     Memory Protection Unit (MPU)\r\n  \\brief    Type definitions for the Memory Protection Unit (MPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Memory Protection Unit (MPU).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  TYPE;    /*!< Offset: 0x000 (R/ )  MPU Type Register */\r\n  __IOM uint32_t CTRL;    /*!< Offset: 0x004 (R/W)  MPU Control Register */\r\n  __IOM uint32_t RNR;     /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */\r\n  __IOM uint32_t RBAR;    /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */\r\n  __IOM uint32_t RASR;    /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W)  MPU Alias 1 Region Base Address Register */\r\n  __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W)  MPU Alias 1 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W)  MPU Alias 2 Region Base Address Register */\r\n  __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W)  MPU Alias 2 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W)  MPU Alias 3 Region Base Address Register */\r\n  __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W)  MPU Alias 3 Region Attribute and Size Register */\r\n} MPU_Type;\r\n\r\n/* MPU Type Register Definitions */\r\n#define MPU_TYPE_IREGION_Pos 16U                              /*!< MPU TYPE: IREGION Position */\r\n#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */\r\n\r\n#define MPU_TYPE_DREGION_Pos 8U                               /*!< MPU TYPE: DREGION Position */\r\n#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */\r\n\r\n#define MPU_TYPE_SEPARATE_Pos 0U                                 /*!< MPU TYPE: SEPARATE Position */\r\n#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */\r\n\r\n/* MPU Control Register Definitions */\r\n#define MPU_CTRL_PRIVDEFENA_Pos 2U                               /*!< MPU CTRL: PRIVDEFENA Position */\r\n#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */\r\n\r\n#define MPU_CTRL_HFNMIENA_Pos 1U                             /*!< MPU CTRL: HFNMIENA Position */\r\n#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */\r\n\r\n#define MPU_CTRL_ENABLE_Pos 0U                               /*!< MPU CTRL: ENABLE Position */\r\n#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */\r\n\r\n/* MPU Region Number Register Definitions */\r\n#define MPU_RNR_REGION_Pos 0U                                 /*!< MPU RNR: REGION Position */\r\n#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */\r\n\r\n/* MPU Region Base Address Register Definitions */\r\n#define MPU_RBAR_ADDR_Pos 5U                                 /*!< MPU RBAR: ADDR Position */\r\n#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */\r\n\r\n#define MPU_RBAR_VALID_Pos 4U                          /*!< MPU RBAR: VALID Position */\r\n#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */\r\n\r\n#define MPU_RBAR_REGION_Pos 0U                                 /*!< MPU RBAR: REGION Position */\r\n#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */\r\n\r\n/* MPU Region Attribute and Size Register Definitions */\r\n#define MPU_RASR_ATTRS_Pos 16U                              /*!< MPU RASR: MPU Region Attribute field Position */\r\n#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */\r\n\r\n#define MPU_RASR_XN_Pos 28U                      /*!< MPU RASR: ATTRS.XN Position */\r\n#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */\r\n\r\n#define MPU_RASR_AP_Pos 24U                        /*!< MPU RASR: ATTRS.AP Position */\r\n#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */\r\n\r\n#define MPU_RASR_TEX_Pos 19U                         /*!< MPU RASR: ATTRS.TEX Position */\r\n#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */\r\n\r\n#define MPU_RASR_S_Pos 18U                     /*!< MPU RASR: ATTRS.S Position */\r\n#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */\r\n\r\n#define MPU_RASR_C_Pos 17U                     /*!< MPU RASR: ATTRS.C Position */\r\n#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */\r\n\r\n#define MPU_RASR_B_Pos 16U                     /*!< MPU RASR: ATTRS.B Position */\r\n#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */\r\n\r\n#define MPU_RASR_SRD_Pos 8U                           /*!< MPU RASR: Sub-Region Disable Position */\r\n#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */\r\n\r\n#define MPU_RASR_SIZE_Pos 1U                            /*!< MPU RASR: Region Size Field Position */\r\n#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */\r\n\r\n#define MPU_RASR_ENABLE_Pos 0U                               /*!< MPU RASR: Region enable bit Position */\r\n#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */\r\n\r\n/*@} end of group CMSIS_MPU */\r\n#endif\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    Type definitions for the Core Debug Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Core Debug Register (CoreDebug).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */\r\n  __OM uint32_t  DCRSR; /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */\r\n  __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */\r\n  __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */\r\n} CoreDebug_Type;\r\n\r\n/* Debug Halting Control and Status Register Definitions */\r\n#define CoreDebug_DHCSR_DBGKEY_Pos 16U                                      /*!< CoreDebug DHCSR: DBGKEY Position */\r\n#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U                                     /*!< CoreDebug DHCSR: S_RESET_ST Position */\r\n#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U                                      /*!< CoreDebug DHCSR: S_RETIRE_ST Position */\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U                                   /*!< CoreDebug DHCSR: S_LOCKUP Position */\r\n#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_SLEEP_Pos 18U                                  /*!< CoreDebug DHCSR: S_SLEEP Position */\r\n#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_HALT_Pos 17U                                 /*!< CoreDebug DHCSR: S_HALT Position */\r\n#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_S_REGRDY_Pos 16U                                   /*!< CoreDebug DHCSR: S_REGRDY Position */\r\n#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */\r\n\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U                                       /*!< CoreDebug DHCSR: C_SNAPSTALL Position */\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */\r\n\r\n#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U                                      /*!< CoreDebug DHCSR: C_MASKINTS Position */\r\n#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */\r\n\r\n#define CoreDebug_DHCSR_C_STEP_Pos 2U                                  /*!< CoreDebug DHCSR: C_STEP Position */\r\n#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */\r\n\r\n#define CoreDebug_DHCSR_C_HALT_Pos 1U                                  /*!< CoreDebug DHCSR: C_HALT Position */\r\n#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U                                         /*!< CoreDebug DHCSR: C_DEBUGEN Position */\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */\r\n\r\n/* Debug Core Register Selector Register Definitions */\r\n#define CoreDebug_DCRSR_REGWnR_Pos 16U                                 /*!< CoreDebug DCRSR: REGWnR Position */\r\n#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */\r\n\r\n#define CoreDebug_DCRSR_REGSEL_Pos 0U                                         /*!< CoreDebug DCRSR: REGSEL Position */\r\n#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */\r\n\r\n/* Debug Exception and Monitor Control Register Definitions */\r\n#define CoreDebug_DEMCR_TRCENA_Pos 24U                                 /*!< CoreDebug DEMCR: TRCENA Position */\r\n#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_REQ_Pos 19U                                  /*!< CoreDebug DEMCR: MON_REQ Position */\r\n#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_STEP_Pos 18U                                   /*!< CoreDebug DEMCR: MON_STEP Position */\r\n#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_PEND_Pos 17U                                   /*!< CoreDebug DEMCR: MON_PEND Position */\r\n#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_EN_Pos 16U                                 /*!< CoreDebug DEMCR: MON_EN Position */\r\n#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U                                     /*!< CoreDebug DEMCR: VC_HARDERR Position */\r\n#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_INTERR_Pos 9U                                     /*!< CoreDebug DEMCR: VC_INTERR Position */\r\n#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U                                     /*!< CoreDebug DEMCR: VC_BUSERR Position */\r\n#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_STATERR_Pos 7U                                      /*!< CoreDebug DEMCR: VC_STATERR Position */\r\n#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U                                     /*!< CoreDebug DEMCR: VC_CHKERR Position */\r\n#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U                                      /*!< CoreDebug DEMCR: VC_NOCPERR Position */\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_MMERR_Pos 4U                                    /*!< CoreDebug DEMCR: VC_MMERR Position */\r\n#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */\r\n#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */\r\n\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) ((value << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) ((value & field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of Cortex-M3 Hardware */\r\n#define SCS_BASE       (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define ITM_BASE       (0xE0000000UL)        /*!< ITM Base Address */\r\n#define DWT_BASE       (0xE0001000UL)        /*!< DWT Base Address */\r\n#define TPI_BASE       (0xE0040000UL)        /*!< TPI Base Address */\r\n#define CoreDebug_BASE (0xE000EDF0UL)        /*!< Core Debug Base Address */\r\n#define SysTick_BASE   (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE      (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE       (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCnSCB    ((SCnSCB_Type *)SCS_BASE)          /*!< System control Register not in SCB */\r\n#define SCB       ((SCB_Type *)SCB_BASE)             /*!< SCB configuration struct */\r\n#define SysTick   ((SysTick_Type *)SysTick_BASE)     /*!< SysTick configuration struct */\r\n#define NVIC      ((NVIC_Type *)NVIC_BASE)           /*!< NVIC configuration struct */\r\n#define ITM       ((ITM_Type *)ITM_BASE)             /*!< ITM configuration struct */\r\n#define DWT       ((DWT_Type *)DWT_BASE)             /*!< DWT configuration struct */\r\n#define TPI       ((TPI_Type *)TPI_BASE)             /*!< TPI configuration struct */\r\n#define CoreDebug ((CoreDebug_Type *)CoreDebug_BASE) /*!< Core Debug configuration struct */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n#define MPU_BASE (SCS_BASE + 0x0D90UL)  /*!< Memory Protection Unit */\r\n#define MPU      ((MPU_Type *)MPU_BASE) /*!< Memory Protection Unit */\r\n#endif\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Debug Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Set Priority Grouping\r\n  \\details Sets the priority grouping field using the required unlock sequence.\r\n           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.\r\n           Only values from 0..7 are used.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]      PriorityGroup  Priority grouping field.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) {\r\n  uint32_t reg_value;\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n\r\n  reg_value = SCB->AIRCR;                                                                             /* read old register configuration    */\r\n  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk));                         /* clear bits to change               */\r\n  reg_value  = (reg_value | ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (PriorityGroupTmp << 8U)); /* Insert write key and priorty group */\r\n  SCB->AIRCR = reg_value;\r\n}\r\n\r\n/**\r\n  \\brief   Get Priority Grouping\r\n  \\details Reads the priority grouping field from the NVIC Interrupt Controller.\r\n  \\return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) { return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); }\r\n\r\n/**\r\n  \\brief   Enable External Interrupt\r\n  \\details Enables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Disable External Interrupt\r\n  \\details Disables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) { NVIC->ICER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) {\r\n  return ((uint32_t)(((NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));\r\n}\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  Interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) { NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) { NVIC->ICPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Active Interrupt\r\n  \\details Reads the active register in NVIC and returns the active bit.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not active.\r\n  \\return             1  Interrupt status is active.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) { return ((uint32_t)(((NVIC->IABR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); }\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of an interrupt.\r\n  \\note    The priority cannot be set for every core interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) < 0) {\r\n    SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL) - 4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  } else {\r\n    NVIC->IP[((uint32_t)(int32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of an interrupt.\r\n           The interrupt number can be positive to specify an external (device specific) interrupt,\r\n           or negative to specify an internal (core) interrupt.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) < 0) {\r\n    return (((uint32_t)SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL) - 4UL] >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return (((uint32_t)NVIC->IP[((uint32_t)(int32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Encode Priority\r\n  \\details Encodes the priority for an interrupt with the given priority group,\r\n           preemptive priority value, and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [in]   PreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [in]       SubPriority  Subpriority value (starting from 0).\r\n  \\return                        Encoded priority. Value can be used in the function \\ref NVIC_SetPriority().\r\n */\r\n__STATIC_INLINE uint32_t NVIC_EncodePriority(uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  return (((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | ((SubPriority & (uint32_t)((1UL << (SubPriorityBits)) - 1UL))));\r\n}\r\n\r\n/**\r\n  \\brief   Decode Priority\r\n  \\details Decodes an interrupt priority value with a given priority group to\r\n           preemptive priority value and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.\r\n  \\param [in]         Priority   Priority value, which can be retrieved with the function \\ref NVIC_GetPriority().\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [out] pPreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [out]     pSubPriority  Subpriority value (starting from 0).\r\n */\r\n__STATIC_INLINE void NVIC_DecodePriority(uint32_t Priority, uint32_t PriorityGroup, uint32_t *const pPreemptPriority, uint32_t *const pSubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);\r\n  *pSubPriority     = (Priority) & (uint32_t)((1UL << (SubPriorityBits)) - 1UL);\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__STATIC_INLINE void NVIC_SystemReset(void) {\r\n  __DSB();                                                                                                                         /* Ensure all outstanding memory accesses included\r\n                                                                                                                                      buffered write are completed before reset */\r\n  SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */\r\n  __DSB();                                                                                                                         /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n/* ##################################### Debug In/Output function ########################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_core_DebugFunctions ITM Functions\r\n  \\brief    Functions that access the ITM debug interface.\r\n  @{\r\n */\r\n\r\nextern volatile int32_t ITM_RxBuffer;  /*!< External variable to receive characters. */\r\n#define ITM_RXBUFFER_EMPTY 0x5AA55AA5U /*!< Value identifying \\ref ITM_RxBuffer is ready for next character. */\r\n\r\n/**\r\n  \\brief   ITM Send Character\r\n  \\details Transmits a character via the ITM channel 0, and\r\n           \\li Just returns when no debugger is connected that has booked the output.\r\n           \\li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.\r\n  \\param [in]     ch  Character to transmit.\r\n  \\returns            Character to transmit.\r\n */\r\n__STATIC_INLINE uint32_t ITM_SendChar(uint32_t ch) {\r\n  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */\r\n      ((ITM->TER & 1UL) != 0UL))                  /* ITM Port #0 enabled */\r\n  {\r\n    while (ITM->PORT[0U].u32 == 0UL) {\r\n      __NOP();\r\n    }\r\n    ITM->PORT[0U].u8 = (uint8_t)ch;\r\n  }\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Receive Character\r\n  \\details Inputs a character via the external variable \\ref ITM_RxBuffer.\r\n  \\return             Received character.\r\n  \\return         -1  No character pending.\r\n */\r\n__STATIC_INLINE int32_t ITM_ReceiveChar(void) {\r\n  int32_t ch = -1; /* no character available */\r\n\r\n  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) {\r\n    ch           = ITM_RxBuffer;\r\n    ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */\r\n  }\r\n\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Check Character\r\n  \\details Checks whether a character is pending for reading in the variable \\ref ITM_RxBuffer.\r\n  \\return          0  No character available.\r\n  \\return          1  Character available.\r\n */\r\n__STATIC_INLINE int32_t ITM_CheckChar(void) {\r\n\r\n  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {\r\n    return (0); /* no character available */\r\n  } else {\r\n    return (1); /*    character available */\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_core_DebugFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_SC300_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32_hal_legacy.h\r\n * @author  MCD Application Team\r\n * @version V1.1.1\r\n * @date    12-May-2017\r\n * @brief   This file contains aliases definition for the STM32Cube HAL constants\r\n *          macros and functions maintained for legacy purpose.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32_HAL_LEGACY\r\n#define __STM32_HAL_LEGACY\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n/* Exported types ------------------------------------------------------------*/\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_AES_Aliased_Defines HAL CRYP Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define AES_FLAG_RDERR      CRYP_FLAG_RDERR\r\n#define AES_FLAG_WRERR      CRYP_FLAG_WRERR\r\n#define AES_CLEARFLAG_CCF   CRYP_CLEARFLAG_CCF\r\n#define AES_CLEARFLAG_RDERR CRYP_CLEARFLAG_RDERR\r\n#define AES_CLEARFLAG_WRERR CRYP_CLEARFLAG_WRERR\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define ADC_RESOLUTION12b                   ADC_RESOLUTION_12B\r\n#define ADC_RESOLUTION10b                   ADC_RESOLUTION_10B\r\n#define ADC_RESOLUTION8b                    ADC_RESOLUTION_8B\r\n#define ADC_RESOLUTION6b                    ADC_RESOLUTION_6B\r\n#define OVR_DATA_OVERWRITTEN                ADC_OVR_DATA_OVERWRITTEN\r\n#define OVR_DATA_PRESERVED                  ADC_OVR_DATA_PRESERVED\r\n#define EOC_SINGLE_CONV                     ADC_EOC_SINGLE_CONV\r\n#define EOC_SEQ_CONV                        ADC_EOC_SEQ_CONV\r\n#define EOC_SINGLE_SEQ_CONV                 ADC_EOC_SINGLE_SEQ_CONV\r\n#define REGULAR_GROUP                       ADC_REGULAR_GROUP\r\n#define INJECTED_GROUP                      ADC_INJECTED_GROUP\r\n#define REGULAR_INJECTED_GROUP              ADC_REGULAR_INJECTED_GROUP\r\n#define AWD_EVENT                           ADC_AWD_EVENT\r\n#define AWD1_EVENT                          ADC_AWD1_EVENT\r\n#define AWD2_EVENT                          ADC_AWD2_EVENT\r\n#define AWD3_EVENT                          ADC_AWD3_EVENT\r\n#define OVR_EVENT                           ADC_OVR_EVENT\r\n#define JQOVF_EVENT                         ADC_JQOVF_EVENT\r\n#define ALL_CHANNELS                        ADC_ALL_CHANNELS\r\n#define REGULAR_CHANNELS                    ADC_REGULAR_CHANNELS\r\n#define INJECTED_CHANNELS                   ADC_INJECTED_CHANNELS\r\n#define SYSCFG_FLAG_SENSOR_ADC              ADC_FLAG_SENSOR\r\n#define SYSCFG_FLAG_VREF_ADC                ADC_FLAG_VREFINT\r\n#define ADC_CLOCKPRESCALER_PCLK_DIV1        ADC_CLOCK_SYNC_PCLK_DIV1\r\n#define ADC_CLOCKPRESCALER_PCLK_DIV2        ADC_CLOCK_SYNC_PCLK_DIV2\r\n#define ADC_CLOCKPRESCALER_PCLK_DIV4        ADC_CLOCK_SYNC_PCLK_DIV4\r\n#define ADC_CLOCKPRESCALER_PCLK_DIV6        ADC_CLOCK_SYNC_PCLK_DIV6\r\n#define ADC_CLOCKPRESCALER_PCLK_DIV8        ADC_CLOCK_SYNC_PCLK_DIV8\r\n#define ADC_EXTERNALTRIG0_T6_TRGO           ADC_EXTERNALTRIGCONV_T6_TRGO\r\n#define ADC_EXTERNALTRIG1_T21_CC2           ADC_EXTERNALTRIGCONV_T21_CC2\r\n#define ADC_EXTERNALTRIG2_T2_TRGO           ADC_EXTERNALTRIGCONV_T2_TRGO\r\n#define ADC_EXTERNALTRIG3_T2_CC4            ADC_EXTERNALTRIGCONV_T2_CC4\r\n#define ADC_EXTERNALTRIG4_T22_TRGO          ADC_EXTERNALTRIGCONV_T22_TRGO\r\n#define ADC_EXTERNALTRIG7_EXT_IT11          ADC_EXTERNALTRIGCONV_EXT_IT11\r\n#define ADC_CLOCK_ASYNC                     ADC_CLOCK_ASYNC_DIV1\r\n#define ADC_EXTERNALTRIG_EDGE_NONE          ADC_EXTERNALTRIGCONVEDGE_NONE\r\n#define ADC_EXTERNALTRIG_EDGE_RISING        ADC_EXTERNALTRIGCONVEDGE_RISING\r\n#define ADC_EXTERNALTRIG_EDGE_FALLING       ADC_EXTERNALTRIGCONVEDGE_FALLING\r\n#define ADC_EXTERNALTRIG_EDGE_RISINGFALLING ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING\r\n#define ADC_SAMPLETIME_2CYCLE_5             ADC_SAMPLETIME_2CYCLES_5\r\n\r\n#define HAL_ADC_STATE_BUSY_REG HAL_ADC_STATE_REG_BUSY\r\n#define HAL_ADC_STATE_BUSY_INJ HAL_ADC_STATE_INJ_BUSY\r\n#define HAL_ADC_STATE_EOC_REG  HAL_ADC_STATE_REG_EOC\r\n#define HAL_ADC_STATE_EOC_INJ  HAL_ADC_STATE_INJ_EOC\r\n#define HAL_ADC_STATE_ERROR    HAL_ADC_STATE_ERROR_INTERNAL\r\n#define HAL_ADC_STATE_BUSY     HAL_ADC_STATE_BUSY_INTERNAL\r\n#define HAL_ADC_STATE_AWD      HAL_ADC_STATE_AWD1\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define COMP_WINDOWMODE_DISABLED      COMP_WINDOWMODE_DISABLE\r\n#define COMP_WINDOWMODE_ENABLED       COMP_WINDOWMODE_ENABLE\r\n#define COMP_EXTI_LINE_COMP1_EVENT    COMP_EXTI_LINE_COMP1\r\n#define COMP_EXTI_LINE_COMP2_EVENT    COMP_EXTI_LINE_COMP2\r\n#define COMP_EXTI_LINE_COMP3_EVENT    COMP_EXTI_LINE_COMP3\r\n#define COMP_EXTI_LINE_COMP4_EVENT    COMP_EXTI_LINE_COMP4\r\n#define COMP_EXTI_LINE_COMP5_EVENT    COMP_EXTI_LINE_COMP5\r\n#define COMP_EXTI_LINE_COMP6_EVENT    COMP_EXTI_LINE_COMP6\r\n#define COMP_EXTI_LINE_COMP7_EVENT    COMP_EXTI_LINE_COMP7\r\n#define COMP_LPTIMCONNECTION_ENABLED  COMP_LPTIMCONNECTION_IN1_ENABLED /*!< COMPX output is connected to LPTIM input 1 */\r\n#define COMP_OUTPUT_COMP6TIM2OCREFCLR COMP_OUTPUT_COMP6_TIM2OCREFCLR\r\n#if defined(STM32F373xC) || defined(STM32F378xx)\r\n#define COMP_OUTPUT_TIM3IC1      COMP_OUTPUT_COMP1_TIM3IC1\r\n#define COMP_OUTPUT_TIM3OCREFCLR COMP_OUTPUT_COMP1_TIM3OCREFCLR\r\n#endif /* STM32F373xC || STM32F378xx */\r\n\r\n#if defined(STM32L0) || defined(STM32L4)\r\n#define COMP_WINDOWMODE_ENABLE COMP_WINDOWMODE_COMP1_INPUT_PLUS_COMMON\r\n\r\n#define COMP_NONINVERTINGINPUT_IO1 COMP_INPUT_PLUS_IO1\r\n#define COMP_NONINVERTINGINPUT_IO2 COMP_INPUT_PLUS_IO2\r\n#define COMP_NONINVERTINGINPUT_IO3 COMP_INPUT_PLUS_IO3\r\n#define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4\r\n#define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5\r\n#define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6\r\n\r\n#define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT\r\n#define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT\r\n#define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT\r\n#define COMP_INVERTINGINPUT_VREFINT    COMP_INPUT_MINUS_VREFINT\r\n#define COMP_INVERTINGINPUT_DAC1_CH1   COMP_INPUT_MINUS_DAC1_CH1\r\n#define COMP_INVERTINGINPUT_DAC1_CH2   COMP_INPUT_MINUS_DAC1_CH2\r\n#define COMP_INVERTINGINPUT_DAC1       COMP_INPUT_MINUS_DAC1_CH1\r\n#define COMP_INVERTINGINPUT_DAC2       COMP_INPUT_MINUS_DAC1_CH2\r\n#define COMP_INVERTINGINPUT_IO1        COMP_INPUT_MINUS_IO1\r\n#if defined(STM32L0)\r\n/* Issue fixed on STM32L0 COMP driver: only 2 dedicated IO (IO1 and IO2),     */\r\n/* IO2 was wrongly assigned to IO shared with DAC and IO3 was corresponding   */\r\n/* to the second dedicated IO (only for COMP2).                               */\r\n#define COMP_INVERTINGINPUT_IO2 COMP_INPUT_MINUS_DAC1_CH2\r\n#define COMP_INVERTINGINPUT_IO3 COMP_INPUT_MINUS_IO2\r\n#else\r\n#define COMP_INVERTINGINPUT_IO2 COMP_INPUT_MINUS_IO2\r\n#define COMP_INVERTINGINPUT_IO3 COMP_INPUT_MINUS_IO3\r\n#endif\r\n#define COMP_INVERTINGINPUT_IO4 COMP_INPUT_MINUS_IO4\r\n#define COMP_INVERTINGINPUT_IO5 COMP_INPUT_MINUS_IO5\r\n\r\n#define COMP_OUTPUTLEVEL_LOW  COMP_OUTPUT_LEVEL_LOW\r\n#define COMP_OUTPUTLEVEL_HIGH COMP_OUTPUT_LEVEL_HIGH\r\n\r\n/* Note: Literal \"COMP_FLAG_LOCK\" kept for legacy purpose.                    */\r\n/*       To check COMP lock state, use macro \"__HAL_COMP_IS_LOCKED()\".        */\r\n#if defined(COMP_CSR_LOCK)\r\n#define COMP_FLAG_LOCK COMP_CSR_LOCK\r\n#elif defined(COMP_CSR_COMP1LOCK)\r\n#define COMP_FLAG_LOCK COMP_CSR_COMP1LOCK\r\n#elif defined(COMP_CSR_COMPxLOCK)\r\n#define COMP_FLAG_LOCK COMP_CSR_COMPxLOCK\r\n#endif\r\n\r\n#if defined(STM32L4)\r\n#define COMP_BLANKINGSRCE_TIM1OC5  COMP_BLANKINGSRC_TIM1_OC5_COMP1\r\n#define COMP_BLANKINGSRCE_TIM2OC3  COMP_BLANKINGSRC_TIM2_OC3_COMP1\r\n#define COMP_BLANKINGSRCE_TIM3OC3  COMP_BLANKINGSRC_TIM3_OC3_COMP1\r\n#define COMP_BLANKINGSRCE_TIM3OC4  COMP_BLANKINGSRC_TIM3_OC4_COMP2\r\n#define COMP_BLANKINGSRCE_TIM8OC5  COMP_BLANKINGSRC_TIM8_OC5_COMP2\r\n#define COMP_BLANKINGSRCE_TIM15OC1 COMP_BLANKINGSRC_TIM15_OC1_COMP2\r\n#define COMP_BLANKINGSRCE_NONE     COMP_BLANKINGSRC_NONE\r\n#endif\r\n\r\n#if defined(STM32L0)\r\n#define COMP_MODE_HIGHSPEED COMP_POWERMODE_MEDIUMSPEED\r\n#define COMP_MODE_LOWSPEED  COMP_POWERMODE_ULTRALOWPOWER\r\n#else\r\n#define COMP_MODE_HIGHSPEED     COMP_POWERMODE_HIGHSPEED\r\n#define COMP_MODE_MEDIUMSPEED   COMP_POWERMODE_MEDIUMSPEED\r\n#define COMP_MODE_LOWPOWER      COMP_POWERMODE_LOWPOWER\r\n#define COMP_MODE_ULTRALOWPOWER COMP_POWERMODE_ULTRALOWPOWER\r\n#endif\r\n\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_CORTEX_Aliased_Defines HAL CORTEX Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_CORTEX_SYSTICKCLK_CONFIG HAL_SYSTICK_CLKSourceConfig\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE\r\n#define CRC_OUTPUTDATA_INVERSION_ENABLED  CRC_OUTPUTDATA_INVERSION_ENABLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_DAC_Aliased_Defines HAL DAC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define DAC1_CHANNEL_1              DAC_CHANNEL_1\r\n#define DAC1_CHANNEL_2              DAC_CHANNEL_2\r\n#define DAC2_CHANNEL_1              DAC_CHANNEL_1\r\n#define DAC_WAVE_NONE               0x00000000U\r\n#define DAC_WAVE_NOISE              DAC_CR_WAVE1_0\r\n#define DAC_WAVE_TRIANGLE           DAC_CR_WAVE1_1\r\n#define DAC_WAVEGENERATION_NONE     DAC_WAVE_NONE\r\n#define DAC_WAVEGENERATION_NOISE    DAC_WAVE_NOISE\r\n#define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_REMAPDMA_ADC_DMA_CH2       DMA_REMAP_ADC_DMA_CH2\r\n#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4\r\n#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5\r\n#define HAL_REMAPDMA_TIM16_DMA_CH4     DMA_REMAP_TIM16_DMA_CH4\r\n#define HAL_REMAPDMA_TIM17_DMA_CH2     DMA_REMAP_TIM17_DMA_CH2\r\n#define HAL_REMAPDMA_USART3_DMA_CH32   DMA_REMAP_USART3_DMA_CH32\r\n#define HAL_REMAPDMA_TIM16_DMA_CH6     DMA_REMAP_TIM16_DMA_CH6\r\n#define HAL_REMAPDMA_TIM17_DMA_CH7     DMA_REMAP_TIM17_DMA_CH7\r\n#define HAL_REMAPDMA_SPI2_DMA_CH67     DMA_REMAP_SPI2_DMA_CH67\r\n#define HAL_REMAPDMA_USART2_DMA_CH67   DMA_REMAP_USART2_DMA_CH67\r\n#define HAL_REMAPDMA_USART3_DMA_CH32   DMA_REMAP_USART3_DMA_CH32\r\n#define HAL_REMAPDMA_I2C1_DMA_CH76     DMA_REMAP_I2C1_DMA_CH76\r\n#define HAL_REMAPDMA_TIM1_DMA_CH6      DMA_REMAP_TIM1_DMA_CH6\r\n#define HAL_REMAPDMA_TIM2_DMA_CH7      DMA_REMAP_TIM2_DMA_CH7\r\n#define HAL_REMAPDMA_TIM3_DMA_CH6      DMA_REMAP_TIM3_DMA_CH6\r\n\r\n#define IS_HAL_REMAPDMA                IS_DMA_REMAP\r\n#define __HAL_REMAPDMA_CHANNEL_ENABLE  __HAL_DMA_REMAP_CHANNEL_ENABLE\r\n#define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define TYPEPROGRAM_BYTE             FLASH_TYPEPROGRAM_BYTE\r\n#define TYPEPROGRAM_HALFWORD         FLASH_TYPEPROGRAM_HALFWORD\r\n#define TYPEPROGRAM_WORD             FLASH_TYPEPROGRAM_WORD\r\n#define TYPEPROGRAM_DOUBLEWORD       FLASH_TYPEPROGRAM_DOUBLEWORD\r\n#define TYPEERASE_SECTORS            FLASH_TYPEERASE_SECTORS\r\n#define TYPEERASE_PAGES              FLASH_TYPEERASE_PAGES\r\n#define TYPEERASE_PAGEERASE          FLASH_TYPEERASE_PAGES\r\n#define TYPEERASE_MASSERASE          FLASH_TYPEERASE_MASSERASE\r\n#define WRPSTATE_DISABLE             OB_WRPSTATE_DISABLE\r\n#define WRPSTATE_ENABLE              OB_WRPSTATE_ENABLE\r\n#define HAL_FLASH_TIMEOUT_VALUE      FLASH_TIMEOUT_VALUE\r\n#define OBEX_PCROP                   OPTIONBYTE_PCROP\r\n#define OBEX_BOOTCONFIG              OPTIONBYTE_BOOTCONFIG\r\n#define PCROPSTATE_DISABLE           OB_PCROP_STATE_DISABLE\r\n#define PCROPSTATE_ENABLE            OB_PCROP_STATE_ENABLE\r\n#define TYPEERASEDATA_BYTE           FLASH_TYPEERASEDATA_BYTE\r\n#define TYPEERASEDATA_HALFWORD       FLASH_TYPEERASEDATA_HALFWORD\r\n#define TYPEERASEDATA_WORD           FLASH_TYPEERASEDATA_WORD\r\n#define TYPEPROGRAMDATA_BYTE         FLASH_TYPEPROGRAMDATA_BYTE\r\n#define TYPEPROGRAMDATA_HALFWORD     FLASH_TYPEPROGRAMDATA_HALFWORD\r\n#define TYPEPROGRAMDATA_WORD         FLASH_TYPEPROGRAMDATA_WORD\r\n#define TYPEPROGRAMDATA_FASTBYTE     FLASH_TYPEPROGRAMDATA_FASTBYTE\r\n#define TYPEPROGRAMDATA_FASTHALFWORD FLASH_TYPEPROGRAMDATA_FASTHALFWORD\r\n#define TYPEPROGRAMDATA_FASTWORD     FLASH_TYPEPROGRAMDATA_FASTWORD\r\n#define PAGESIZE                     FLASH_PAGE_SIZE\r\n#define TYPEPROGRAM_FASTBYTE         FLASH_TYPEPROGRAM_BYTE\r\n#define TYPEPROGRAM_FASTHALFWORD     FLASH_TYPEPROGRAM_HALFWORD\r\n#define TYPEPROGRAM_FASTWORD         FLASH_TYPEPROGRAM_WORD\r\n#define VOLTAGE_RANGE_1              FLASH_VOLTAGE_RANGE_1\r\n#define VOLTAGE_RANGE_2              FLASH_VOLTAGE_RANGE_2\r\n#define VOLTAGE_RANGE_3              FLASH_VOLTAGE_RANGE_3\r\n#define VOLTAGE_RANGE_4              FLASH_VOLTAGE_RANGE_4\r\n#define TYPEPROGRAM_FAST             FLASH_TYPEPROGRAM_FAST\r\n#define TYPEPROGRAM_FAST_AND_LAST    FLASH_TYPEPROGRAM_FAST_AND_LAST\r\n#define WRPAREA_BANK1_AREAA          OB_WRPAREA_BANK1_AREAA\r\n#define WRPAREA_BANK1_AREAB          OB_WRPAREA_BANK1_AREAB\r\n#define WRPAREA_BANK2_AREAA          OB_WRPAREA_BANK2_AREAA\r\n#define WRPAREA_BANK2_AREAB          OB_WRPAREA_BANK2_AREAB\r\n#define IWDG_STDBY_FREEZE            OB_IWDG_STDBY_FREEZE\r\n#define IWDG_STDBY_ACTIVE            OB_IWDG_STDBY_RUN\r\n#define IWDG_STOP_FREEZE             OB_IWDG_STOP_FREEZE\r\n#define IWDG_STOP_ACTIVE             OB_IWDG_STOP_RUN\r\n#define FLASH_ERROR_NONE             HAL_FLASH_ERROR_NONE\r\n#define FLASH_ERROR_RD               HAL_FLASH_ERROR_RD\r\n#define FLASH_ERROR_PG               HAL_FLASH_ERROR_PROG\r\n#define FLASH_ERROR_PGP              HAL_FLASH_ERROR_PGS\r\n#define FLASH_ERROR_WRP              HAL_FLASH_ERROR_WRP\r\n#define FLASH_ERROR_OPTV             HAL_FLASH_ERROR_OPTV\r\n#define FLASH_ERROR_OPTVUSR          HAL_FLASH_ERROR_OPTVUSR\r\n#define FLASH_ERROR_PROG             HAL_FLASH_ERROR_PROG\r\n#define FLASH_ERROR_OP               HAL_FLASH_ERROR_OPERATION\r\n#define FLASH_ERROR_PGA              HAL_FLASH_ERROR_PGA\r\n#define FLASH_ERROR_SIZE             HAL_FLASH_ERROR_SIZE\r\n#define FLASH_ERROR_SIZ              HAL_FLASH_ERROR_SIZE\r\n#define FLASH_ERROR_PGS              HAL_FLASH_ERROR_PGS\r\n#define FLASH_ERROR_MIS              HAL_FLASH_ERROR_MIS\r\n#define FLASH_ERROR_FAST             HAL_FLASH_ERROR_FAST\r\n#define FLASH_ERROR_FWWERR           HAL_FLASH_ERROR_FWWERR\r\n#define FLASH_ERROR_NOTZERO          HAL_FLASH_ERROR_NOTZERO\r\n#define FLASH_ERROR_OPERATION        HAL_FLASH_ERROR_OPERATION\r\n#define FLASH_ERROR_ERS              HAL_FLASH_ERROR_ERS\r\n#define OB_WDG_SW                    OB_IWDG_SW\r\n#define OB_WDG_HW                    OB_IWDG_HW\r\n#define OB_SDADC12_VDD_MONITOR_SET   OB_SDACD_VDD_MONITOR_SET\r\n#define OB_SDADC12_VDD_MONITOR_RESET OB_SDACD_VDD_MONITOR_RESET\r\n#define OB_RAM_PARITY_CHECK_SET      OB_SRAM_PARITY_SET\r\n#define OB_RAM_PARITY_CHECK_RESET    OB_SRAM_PARITY_RESET\r\n#define IS_OB_SDADC12_VDD_MONITOR    IS_OB_SDACD_VDD_MONITOR\r\n#define OB_RDP_LEVEL0                OB_RDP_LEVEL_0\r\n#define OB_RDP_LEVEL1                OB_RDP_LEVEL_1\r\n#define OB_RDP_LEVEL2                OB_RDP_LEVEL_2\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9  I2C_FASTMODEPLUS_PA9\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6  I2C_FASTMODEPLUS_PB6\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB7  I2C_FASTMODEPLUS_PB7\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB8  I2C_FASTMODEPLUS_PB8\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB9  I2C_FASTMODEPLUS_PB9\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C1     I2C_FASTMODEPLUS_I2C1\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C2     I2C_FASTMODEPLUS_I2C2\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C3     I2C_FASTMODEPLUS_I2C3\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose\r\n * @{\r\n */\r\n#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7)\r\n#define FMC_NAND_PCC_WAIT_FEATURE_DISABLE FMC_NAND_WAIT_FEATURE_DISABLE\r\n#define FMC_NAND_PCC_WAIT_FEATURE_ENABLE  FMC_NAND_WAIT_FEATURE_ENABLE\r\n#define FMC_NAND_PCC_MEM_BUS_WIDTH_8      FMC_NAND_MEM_BUS_WIDTH_8\r\n#define FMC_NAND_PCC_MEM_BUS_WIDTH_16     FMC_NAND_MEM_BUS_WIDTH_16\r\n#else\r\n#define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE\r\n#define FMC_NAND_WAIT_FEATURE_ENABLE  FMC_NAND_PCC_WAIT_FEATURE_ENABLE\r\n#define FMC_NAND_MEM_BUS_WIDTH_8      FMC_NAND_PCC_MEM_BUS_WIDTH_8\r\n#define FMC_NAND_MEM_BUS_WIDTH_16     FMC_NAND_PCC_MEM_BUS_WIDTH_16\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define FSMC_NORSRAM_TYPEDEF          FSMC_NORSRAM_TypeDef\r\n#define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_GPIO_Aliased_Macros HAL GPIO Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define GET_GPIO_SOURCE GPIO_GET_INDEX\r\n#define GET_GPIO_INDEX  GPIO_GET_INDEX\r\n\r\n#if defined(STM32F4)\r\n#define GPIO_AF12_SDMMC  GPIO_AF12_SDIO\r\n#define GPIO_AF12_SDMMC1 GPIO_AF12_SDIO\r\n#endif\r\n\r\n#if defined(STM32F7)\r\n#define GPIO_AF12_SDIO  GPIO_AF12_SDMMC1\r\n#define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1\r\n#endif\r\n\r\n#if defined(STM32L4)\r\n#define GPIO_AF12_SDIO  GPIO_AF12_SDMMC1\r\n#define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1\r\n#endif\r\n\r\n#define GPIO_AF0_LPTIM GPIO_AF0_LPTIM1\r\n#define GPIO_AF1_LPTIM GPIO_AF1_LPTIM1\r\n#define GPIO_AF2_LPTIM GPIO_AF2_LPTIM1\r\n\r\n#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7)\r\n#define GPIO_SPEED_LOW    GPIO_SPEED_FREQ_LOW\r\n#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM\r\n#define GPIO_SPEED_FAST   GPIO_SPEED_FREQ_HIGH\r\n#define GPIO_SPEED_HIGH   GPIO_SPEED_FREQ_VERY_HIGH\r\n#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 */\r\n\r\n#if defined(STM32L1)\r\n#define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW\r\n#define GPIO_SPEED_LOW      GPIO_SPEED_FREQ_MEDIUM\r\n#define GPIO_SPEED_MEDIUM   GPIO_SPEED_FREQ_HIGH\r\n#define GPIO_SPEED_HIGH     GPIO_SPEED_FREQ_VERY_HIGH\r\n#endif /* STM32L1 */\r\n\r\n#if defined(STM32F0) || defined(STM32F3) || defined(STM32F1)\r\n#define GPIO_SPEED_LOW    GPIO_SPEED_FREQ_LOW\r\n#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM\r\n#define GPIO_SPEED_HIGH   GPIO_SPEED_FREQ_HIGH\r\n#endif /* STM32F0 || STM32F3 || STM32F1 */\r\n\r\n#define GPIO_AF6_DFSDM GPIO_AF6_DFSDM1\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#if defined(STM32H7)\r\n#define __HAL_RCC_JPEG_CLK_ENABLE        __HAL_RCC_JPGDECEN_CLK_ENABLE\r\n#define __HAL_RCC_JPEG_CLK_DISABLE       __HAL_RCC_JPGDECEN_CLK_DISABLE\r\n#define __HAL_RCC_JPEG_FORCE_RESET       __HAL_RCC_JPGDECRST_FORCE_RESET\r\n#define __HAL_RCC_JPEG_RELEASE_RESET     __HAL_RCC_JPGDECRST_RELEASE_RESET\r\n#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE  __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE\r\n#endif /* STM32H7  */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define HRTIM_TIMDELAYEDPROTECTION_DISABLED           HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DISABLED\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT1_EEV68  HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT1_EEV6\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_EEV68  HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_EEV6\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV68  HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV6\r\n#define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV68     HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV6\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT1_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT1_DEEV7\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79  HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7\r\n#define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79     HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7\r\n\r\n#define __HAL_HRTIM_SetCounter        __HAL_HRTIM_SETCOUNTER\r\n#define __HAL_HRTIM_GetCounter        __HAL_HRTIM_GETCOUNTER\r\n#define __HAL_HRTIM_SetPeriod         __HAL_HRTIM_SETPERIOD\r\n#define __HAL_HRTIM_GetPeriod         __HAL_HRTIM_GETPERIOD\r\n#define __HAL_HRTIM_SetClockPrescaler __HAL_HRTIM_SETCLOCKPRESCALER\r\n#define __HAL_HRTIM_GetClockPrescaler __HAL_HRTIM_GETCLOCKPRESCALER\r\n#define __HAL_HRTIM_SetCompare        __HAL_HRTIM_SETCOMPARE\r\n#define __HAL_HRTIM_GetCompare        __HAL_HRTIM_GETCOMPARE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_I2C_Aliased_Defines HAL I2C Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define I2C_DUALADDRESS_DISABLED  I2C_DUALADDRESS_DISABLE\r\n#define I2C_DUALADDRESS_ENABLED   I2C_DUALADDRESS_ENABLE\r\n#define I2C_GENERALCALL_DISABLED  I2C_GENERALCALL_DISABLE\r\n#define I2C_GENERALCALL_ENABLED   I2C_GENERALCALL_ENABLE\r\n#define I2C_NOSTRETCH_DISABLED    I2C_NOSTRETCH_DISABLE\r\n#define I2C_NOSTRETCH_ENABLED     I2C_NOSTRETCH_ENABLE\r\n#define I2C_ANALOGFILTER_ENABLED  I2C_ANALOGFILTER_ENABLE\r\n#define I2C_ANALOGFILTER_DISABLED I2C_ANALOGFILTER_DISABLE\r\n#if defined(STM32F0) || defined(STM32F1) || defined(STM32F3) || defined(STM32G0) || defined(STM32L4) || defined(STM32L1) || defined(STM32F7)\r\n#define HAL_I2C_STATE_MEM_BUSY_TX    HAL_I2C_STATE_BUSY_TX\r\n#define HAL_I2C_STATE_MEM_BUSY_RX    HAL_I2C_STATE_BUSY_RX\r\n#define HAL_I2C_STATE_MASTER_BUSY_TX HAL_I2C_STATE_BUSY_TX\r\n#define HAL_I2C_STATE_MASTER_BUSY_RX HAL_I2C_STATE_BUSY_RX\r\n#define HAL_I2C_STATE_SLAVE_BUSY_TX  HAL_I2C_STATE_BUSY_TX\r\n#define HAL_I2C_STATE_SLAVE_BUSY_RX  HAL_I2C_STATE_BUSY_RX\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_IRDA_Aliased_Defines HAL IRDA Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define IRDA_ONE_BIT_SAMPLE_DISABLED IRDA_ONE_BIT_SAMPLE_DISABLE\r\n#define IRDA_ONE_BIT_SAMPLE_ENABLED  IRDA_ONE_BIT_SAMPLE_ENABLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_IWDG_Aliased_Defines HAL IWDG Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define KR_KEY_RELOAD IWDG_KEY_RELOAD\r\n#define KR_KEY_ENABLE IWDG_KEY_ENABLE\r\n#define KR_KEY_EWA    IWDG_KEY_WRITE_ACCESS_ENABLE\r\n#define KR_KEY_DWA    IWDG_KEY_WRITE_ACCESS_DISABLE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_LPTIM_Aliased_Defines HAL LPTIM Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define LPTIM_CLOCKSAMPLETIME_DIRECTTRANSISTION LPTIM_CLOCKSAMPLETIME_DIRECTTRANSITION\r\n#define LPTIM_CLOCKSAMPLETIME_2TRANSISTIONS     LPTIM_CLOCKSAMPLETIME_2TRANSITIONS\r\n#define LPTIM_CLOCKSAMPLETIME_4TRANSISTIONS     LPTIM_CLOCKSAMPLETIME_4TRANSITIONS\r\n#define LPTIM_CLOCKSAMPLETIME_8TRANSISTIONS     LPTIM_CLOCKSAMPLETIME_8TRANSITIONS\r\n\r\n#define LPTIM_CLOCKPOLARITY_RISINGEDGE  LPTIM_CLOCKPOLARITY_RISING\r\n#define LPTIM_CLOCKPOLARITY_FALLINGEDGE LPTIM_CLOCKPOLARITY_FALLING\r\n#define LPTIM_CLOCKPOLARITY_BOTHEDGES   LPTIM_CLOCKPOLARITY_RISING_FALLING\r\n\r\n#define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION\r\n#define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS     LPTIM_TRIGSAMPLETIME_2TRANSITIONS\r\n#define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS     LPTIM_TRIGSAMPLETIME_4TRANSITIONS\r\n#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS     LPTIM_TRIGSAMPLETIME_8TRANSITIONS\r\n\r\n/* The following 3 definition have also been present in a temporary version of lptim.h */\r\n/* They need to be renamed also to the right name, just in case */\r\n#define LPTIM_TRIGSAMPLETIME_2TRANSITION LPTIM_TRIGSAMPLETIME_2TRANSITIONS\r\n#define LPTIM_TRIGSAMPLETIME_4TRANSITION LPTIM_TRIGSAMPLETIME_4TRANSITIONS\r\n#define LPTIM_TRIGSAMPLETIME_8TRANSITION LPTIM_TRIGSAMPLETIME_8TRANSITIONS\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_NAND_Aliased_Defines HAL NAND Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_NAND_Read_Page       HAL_NAND_Read_Page_8b\r\n#define HAL_NAND_Write_Page      HAL_NAND_Write_Page_8b\r\n#define HAL_NAND_Read_SpareArea  HAL_NAND_Read_SpareArea_8b\r\n#define HAL_NAND_Write_SpareArea HAL_NAND_Write_SpareArea_8b\r\n\r\n#define NAND_AddressTypedef NAND_AddressTypeDef\r\n\r\n#define __ARRAY_ADDRESS  ARRAY_ADDRESS\r\n#define __ADDR_1st_CYCLE ADDR_1ST_CYCLE\r\n#define __ADDR_2nd_CYCLE ADDR_2ND_CYCLE\r\n#define __ADDR_3rd_CYCLE ADDR_3RD_CYCLE\r\n#define __ADDR_4th_CYCLE ADDR_4TH_CYCLE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define NOR_StatusTypedef HAL_NOR_StatusTypeDef\r\n#define NOR_SUCCESS       HAL_NOR_STATUS_SUCCESS\r\n#define NOR_ONGOING       HAL_NOR_STATUS_ONGOING\r\n#define NOR_ERROR         HAL_NOR_STATUS_ERROR\r\n#define NOR_TIMEOUT       HAL_NOR_STATUS_TIMEOUT\r\n\r\n#define __NOR_WRITE      NOR_WRITE\r\n#define __NOR_ADDR_SHIFT NOR_ADDR_SHIFT\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_OPAMP_Aliased_Defines HAL OPAMP Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define OPAMP_NONINVERTINGINPUT_VP0 OPAMP_NONINVERTINGINPUT_IO0\r\n#define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1\r\n#define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2\r\n#define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3\r\n\r\n#define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0\r\n#define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1\r\n#define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2\r\n#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3\r\n\r\n#define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0\r\n#define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1\r\n\r\n#define IOPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0\r\n#define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1\r\n\r\n#define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0\r\n#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1\r\n\r\n#define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1\r\n\r\n#define OPAMP_PGACONNECT_NO  OPAMP_PGA_CONNECT_INVERTINGINPUT_NO\r\n#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0\r\n#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_I2S_Aliased_Defines HAL I2S Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS\r\n#if defined(STM32F7)\r\n#define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_PCCARD_Aliased_Defines HAL PCCARD Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n/* Compact Flash-ATA registers description */\r\n#define CF_DATA                 ATA_DATA\r\n#define CF_SECTOR_COUNT         ATA_SECTOR_COUNT\r\n#define CF_SECTOR_NUMBER        ATA_SECTOR_NUMBER\r\n#define CF_CYLINDER_LOW         ATA_CYLINDER_LOW\r\n#define CF_CYLINDER_HIGH        ATA_CYLINDER_HIGH\r\n#define CF_CARD_HEAD            ATA_CARD_HEAD\r\n#define CF_STATUS_CMD           ATA_STATUS_CMD\r\n#define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE\r\n#define CF_COMMON_DATA_AREA     ATA_COMMON_DATA_AREA\r\n\r\n/* Compact Flash-ATA commands */\r\n#define CF_READ_SECTOR_CMD  ATA_READ_SECTOR_CMD\r\n#define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD\r\n#define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD\r\n#define CF_IDENTIFY_CMD     ATA_IDENTIFY_CMD\r\n\r\n#define PCCARD_StatusTypedef HAL_PCCARD_StatusTypeDef\r\n#define PCCARD_SUCCESS       HAL_PCCARD_STATUS_SUCCESS\r\n#define PCCARD_ONGOING       HAL_PCCARD_STATUS_ONGOING\r\n#define PCCARD_ERROR         HAL_PCCARD_STATUS_ERROR\r\n#define PCCARD_TIMEOUT       HAL_PCCARD_STATUS_TIMEOUT\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define FORMAT_BIN RTC_FORMAT_BIN\r\n#define FORMAT_BCD RTC_FORMAT_BCD\r\n\r\n#define RTC_ALARMSUBSECONDMASK_None    RTC_ALARMSUBSECONDMASK_NONE\r\n#define RTC_TAMPERERASEBACKUP_ENABLED  RTC_TAMPER_ERASE_BACKUP_ENABLE\r\n#define RTC_TAMPERERASEBACKUP_DISABLED RTC_TAMPER_ERASE_BACKUP_DISABLE\r\n#define RTC_TAMPERMASK_FLAG_DISABLED   RTC_TAMPERMASK_FLAG_DISABLE\r\n#define RTC_TAMPERMASK_FLAG_ENABLED    RTC_TAMPERMASK_FLAG_ENABLE\r\n\r\n#define RTC_MASKTAMPERFLAG_DISABLED    RTC_TAMPERMASK_FLAG_DISABLE\r\n#define RTC_MASKTAMPERFLAG_ENABLED     RTC_TAMPERMASK_FLAG_ENABLE\r\n#define RTC_TAMPERERASEBACKUP_ENABLED  RTC_TAMPER_ERASE_BACKUP_ENABLE\r\n#define RTC_TAMPERERASEBACKUP_DISABLED RTC_TAMPER_ERASE_BACKUP_DISABLE\r\n#define RTC_MASKTAMPERFLAG_DISABLED    RTC_TAMPERMASK_FLAG_DISABLE\r\n#define RTC_MASKTAMPERFLAG_ENABLED     RTC_TAMPERMASK_FLAG_ENABLE\r\n#define RTC_TAMPER1_2_INTERRUPT        RTC_ALL_TAMPER_INTERRUPT\r\n#define RTC_TAMPER1_2_3_INTERRUPT      RTC_ALL_TAMPER_INTERRUPT\r\n\r\n#define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT\r\n#define RTC_TIMESTAMPPIN_PA0  RTC_TIMESTAMPPIN_POS1\r\n#define RTC_TIMESTAMPPIN_PI8  RTC_TIMESTAMPPIN_POS1\r\n#define RTC_TIMESTAMPPIN_PC1  RTC_TIMESTAMPPIN_POS2\r\n\r\n#define RTC_OUTPUT_REMAP_PC13 RTC_OUTPUT_REMAP_NONE\r\n#define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1\r\n#define RTC_OUTPUT_REMAP_PB2  RTC_OUTPUT_REMAP_POS1\r\n\r\n#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT\r\n#define RTC_TAMPERPIN_PA0  RTC_TAMPERPIN_POS1\r\n#define RTC_TAMPERPIN_PI8  RTC_TAMPERPIN_POS1\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define SMARTCARD_NACK_ENABLED  SMARTCARD_NACK_ENABLE\r\n#define SMARTCARD_NACK_DISABLED SMARTCARD_NACK_DISABLE\r\n\r\n#define SMARTCARD_ONEBIT_SAMPLING_DISABLED SMARTCARD_ONE_BIT_SAMPLE_DISABLE\r\n#define SMARTCARD_ONEBIT_SAMPLING_ENABLED  SMARTCARD_ONE_BIT_SAMPLE_ENABLE\r\n#define SMARTCARD_ONEBIT_SAMPLING_DISABLE  SMARTCARD_ONE_BIT_SAMPLE_DISABLE\r\n#define SMARTCARD_ONEBIT_SAMPLING_ENABLE   SMARTCARD_ONE_BIT_SAMPLE_ENABLE\r\n\r\n#define SMARTCARD_TIMEOUT_DISABLED SMARTCARD_TIMEOUT_DISABLE\r\n#define SMARTCARD_TIMEOUT_ENABLED  SMARTCARD_TIMEOUT_ENABLE\r\n\r\n#define SMARTCARD_LASTBIT_DISABLED SMARTCARD_LASTBIT_DISABLE\r\n#define SMARTCARD_LASTBIT_ENABLED  SMARTCARD_LASTBIT_ENABLE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define SMBUS_DUALADDRESS_DISABLED   SMBUS_DUALADDRESS_DISABLE\r\n#define SMBUS_DUALADDRESS_ENABLED    SMBUS_DUALADDRESS_ENABLE\r\n#define SMBUS_GENERALCALL_DISABLED   SMBUS_GENERALCALL_DISABLE\r\n#define SMBUS_GENERALCALL_ENABLED    SMBUS_GENERALCALL_ENABLE\r\n#define SMBUS_NOSTRETCH_DISABLED     SMBUS_NOSTRETCH_DISABLE\r\n#define SMBUS_NOSTRETCH_ENABLED      SMBUS_NOSTRETCH_ENABLE\r\n#define SMBUS_ANALOGFILTER_ENABLED   SMBUS_ANALOGFILTER_ENABLE\r\n#define SMBUS_ANALOGFILTER_DISABLED  SMBUS_ANALOGFILTER_DISABLE\r\n#define SMBUS_PEC_DISABLED           SMBUS_PEC_DISABLE\r\n#define SMBUS_PEC_ENABLED            SMBUS_PEC_ENABLE\r\n#define HAL_SMBUS_STATE_SLAVE_LISTEN HAL_SMBUS_STATE_LISTEN\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define SPI_TIMODE_DISABLED SPI_TIMODE_DISABLE\r\n#define SPI_TIMODE_ENABLED  SPI_TIMODE_ENABLE\r\n\r\n#define SPI_CRCCALCULATION_DISABLED SPI_CRCCALCULATION_DISABLE\r\n#define SPI_CRCCALCULATION_ENABLED  SPI_CRCCALCULATION_ENABLE\r\n\r\n#define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE\r\n#define SPI_NSS_PULSE_ENABLED  SPI_NSS_PULSE_ENABLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define CCER_CCxE_MASK  TIM_CCER_CCxE_MASK\r\n#define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK\r\n\r\n#define TIM_DMABase_CR1   TIM_DMABASE_CR1\r\n#define TIM_DMABase_CR2   TIM_DMABASE_CR2\r\n#define TIM_DMABase_SMCR  TIM_DMABASE_SMCR\r\n#define TIM_DMABase_DIER  TIM_DMABASE_DIER\r\n#define TIM_DMABase_SR    TIM_DMABASE_SR\r\n#define TIM_DMABase_EGR   TIM_DMABASE_EGR\r\n#define TIM_DMABase_CCMR1 TIM_DMABASE_CCMR1\r\n#define TIM_DMABase_CCMR2 TIM_DMABASE_CCMR2\r\n#define TIM_DMABase_CCER  TIM_DMABASE_CCER\r\n#define TIM_DMABase_CNT   TIM_DMABASE_CNT\r\n#define TIM_DMABase_PSC   TIM_DMABASE_PSC\r\n#define TIM_DMABase_ARR   TIM_DMABASE_ARR\r\n#define TIM_DMABase_RCR   TIM_DMABASE_RCR\r\n#define TIM_DMABase_CCR1  TIM_DMABASE_CCR1\r\n#define TIM_DMABase_CCR2  TIM_DMABASE_CCR2\r\n#define TIM_DMABase_CCR3  TIM_DMABASE_CCR3\r\n#define TIM_DMABase_CCR4  TIM_DMABASE_CCR4\r\n#define TIM_DMABase_BDTR  TIM_DMABASE_BDTR\r\n#define TIM_DMABase_DCR   TIM_DMABASE_DCR\r\n#define TIM_DMABase_DMAR  TIM_DMABASE_DMAR\r\n#define TIM_DMABase_OR1   TIM_DMABASE_OR1\r\n#define TIM_DMABase_CCMR3 TIM_DMABASE_CCMR3\r\n#define TIM_DMABase_CCR5  TIM_DMABASE_CCR5\r\n#define TIM_DMABase_CCR6  TIM_DMABASE_CCR6\r\n#define TIM_DMABase_OR2   TIM_DMABASE_OR2\r\n#define TIM_DMABase_OR3   TIM_DMABASE_OR3\r\n#define TIM_DMABase_OR    TIM_DMABASE_OR\r\n\r\n#define TIM_EventSource_Update  TIM_EVENTSOURCE_UPDATE\r\n#define TIM_EventSource_CC1     TIM_EVENTSOURCE_CC1\r\n#define TIM_EventSource_CC2     TIM_EVENTSOURCE_CC2\r\n#define TIM_EventSource_CC3     TIM_EVENTSOURCE_CC3\r\n#define TIM_EventSource_CC4     TIM_EVENTSOURCE_CC4\r\n#define TIM_EventSource_COM     TIM_EVENTSOURCE_COM\r\n#define TIM_EventSource_Trigger TIM_EVENTSOURCE_TRIGGER\r\n#define TIM_EventSource_Break   TIM_EVENTSOURCE_BREAK\r\n#define TIM_EventSource_Break2  TIM_EVENTSOURCE_BREAK2\r\n\r\n#define TIM_DMABurstLength_1Transfer   TIM_DMABURSTLENGTH_1TRANSFER\r\n#define TIM_DMABurstLength_2Transfers  TIM_DMABURSTLENGTH_2TRANSFERS\r\n#define TIM_DMABurstLength_3Transfers  TIM_DMABURSTLENGTH_3TRANSFERS\r\n#define TIM_DMABurstLength_4Transfers  TIM_DMABURSTLENGTH_4TRANSFERS\r\n#define TIM_DMABurstLength_5Transfers  TIM_DMABURSTLENGTH_5TRANSFERS\r\n#define TIM_DMABurstLength_6Transfers  TIM_DMABURSTLENGTH_6TRANSFERS\r\n#define TIM_DMABurstLength_7Transfers  TIM_DMABURSTLENGTH_7TRANSFERS\r\n#define TIM_DMABurstLength_8Transfers  TIM_DMABURSTLENGTH_8TRANSFERS\r\n#define TIM_DMABurstLength_9Transfers  TIM_DMABURSTLENGTH_9TRANSFERS\r\n#define TIM_DMABurstLength_10Transfers TIM_DMABURSTLENGTH_10TRANSFERS\r\n#define TIM_DMABurstLength_11Transfers TIM_DMABURSTLENGTH_11TRANSFERS\r\n#define TIM_DMABurstLength_12Transfers TIM_DMABURSTLENGTH_12TRANSFERS\r\n#define TIM_DMABurstLength_13Transfers TIM_DMABURSTLENGTH_13TRANSFERS\r\n#define TIM_DMABurstLength_14Transfers TIM_DMABURSTLENGTH_14TRANSFERS\r\n#define TIM_DMABurstLength_15Transfers TIM_DMABURSTLENGTH_15TRANSFERS\r\n#define TIM_DMABurstLength_16Transfers TIM_DMABURSTLENGTH_16TRANSFERS\r\n#define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS\r\n#define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_TSC_Aliased_Defines HAL TSC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define TSC_SYNC_POL_FALL      TSC_SYNC_POLARITY_FALLING\r\n#define TSC_SYNC_POL_RISE_HIGH TSC_SYNC_POLARITY_RISING\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_UART_Aliased_Defines HAL UART Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define UART_ONEBIT_SAMPLING_DISABLED UART_ONE_BIT_SAMPLE_DISABLE\r\n#define UART_ONEBIT_SAMPLING_ENABLED  UART_ONE_BIT_SAMPLE_ENABLE\r\n#define UART_ONE_BIT_SAMPLE_DISABLED  UART_ONE_BIT_SAMPLE_DISABLE\r\n#define UART_ONE_BIT_SAMPLE_ENABLED   UART_ONE_BIT_SAMPLE_ENABLE\r\n\r\n#define __HAL_UART_ONEBIT_ENABLE  __HAL_UART_ONE_BIT_SAMPLE_ENABLE\r\n#define __HAL_UART_ONEBIT_DISABLE __HAL_UART_ONE_BIT_SAMPLE_DISABLE\r\n\r\n#define __DIV_SAMPLING16      UART_DIV_SAMPLING16\r\n#define __DIVMANT_SAMPLING16  UART_DIVMANT_SAMPLING16\r\n#define __DIVFRAQ_SAMPLING16  UART_DIVFRAQ_SAMPLING16\r\n#define __UART_BRR_SAMPLING16 UART_BRR_SAMPLING16\r\n\r\n#define __DIV_SAMPLING8      UART_DIV_SAMPLING8\r\n#define __DIVMANT_SAMPLING8  UART_DIVMANT_SAMPLING8\r\n#define __DIVFRAQ_SAMPLING8  UART_DIVFRAQ_SAMPLING8\r\n#define __UART_BRR_SAMPLING8 UART_BRR_SAMPLING8\r\n\r\n#define __DIV_LPUART UART_DIV_LPUART\r\n\r\n#define UART_WAKEUPMETHODE_IDLELINE    UART_WAKEUPMETHOD_IDLELINE\r\n#define UART_WAKEUPMETHODE_ADDRESSMARK UART_WAKEUPMETHOD_ADDRESSMARK\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define USART_CLOCK_DISABLED USART_CLOCK_DISABLE\r\n#define USART_CLOCK_ENABLED  USART_CLOCK_ENABLE\r\n\r\n#define USARTNACK_ENABLED  USART_NACK_ENABLE\r\n#define USARTNACK_DISABLED USART_NACK_DISABLE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_WWDG_Aliased_Defines HAL WWDG Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define CFR_BASE WWDG_CFR_BASE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_CAN_Aliased_Defines HAL CAN Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define CAN_FilterFIFO0      CAN_FILTER_FIFO0\r\n#define CAN_FilterFIFO1      CAN_FILTER_FIFO1\r\n#define CAN_IT_RQCP0         CAN_IT_TME\r\n#define CAN_IT_RQCP1         CAN_IT_TME\r\n#define CAN_IT_RQCP2         CAN_IT_TME\r\n#define INAK_TIMEOUT         CAN_TIMEOUT_VALUE\r\n#define SLAK_TIMEOUT         CAN_TIMEOUT_VALUE\r\n#define CAN_TXSTATUS_FAILED  ((uint8_t)0x00)\r\n#define CAN_TXSTATUS_OK      ((uint8_t)0x01)\r\n#define CAN_TXSTATUS_PENDING ((uint8_t)0x02)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define VLAN_TAG            ETH_VLAN_TAG\r\n#define MIN_ETH_PAYLOAD     ETH_MIN_ETH_PAYLOAD\r\n#define MAX_ETH_PAYLOAD     ETH_MAX_ETH_PAYLOAD\r\n#define JUMBO_FRAME_PAYLOAD ETH_JUMBO_FRAME_PAYLOAD\r\n#define MACMIIAR_CR_MASK    ETH_MACMIIAR_CR_MASK\r\n#define MACCR_CLEAR_MASK    ETH_MACCR_CLEAR_MASK\r\n#define MACFCR_CLEAR_MASK   ETH_MACFCR_CLEAR_MASK\r\n#define DMAOMR_CLEAR_MASK   ETH_DMAOMR_CLEAR_MASK\r\n\r\n#define ETH_MMCCR       0x00000100U\r\n#define ETH_MMCRIR      0x00000104U\r\n#define ETH_MMCTIR      0x00000108U\r\n#define ETH_MMCRIMR     0x0000010CU\r\n#define ETH_MMCTIMR     0x00000110U\r\n#define ETH_MMCTGFSCCR  0x0000014CU\r\n#define ETH_MMCTGFMSCCR 0x00000150U\r\n#define ETH_MMCTGFCR    0x00000168U\r\n#define ETH_MMCRFCECR   0x00000194U\r\n#define ETH_MMCRFAECR   0x00000198U\r\n#define ETH_MMCRGUFCR   0x000001C4U\r\n\r\n#define ETH_MAC_TXFIFO_FULL                           0x02000000U /* Tx FIFO full */\r\n#define ETH_MAC_TXFIFONOT_EMPTY                       0x01000000U /* Tx FIFO not empty */\r\n#define ETH_MAC_TXFIFO_WRITE_ACTIVE                   0x00400000U /* Tx FIFO write active */\r\n#define ETH_MAC_TXFIFO_IDLE                           0x00000000U /* Tx FIFO read status: Idle */\r\n#define ETH_MAC_TXFIFO_READ                           0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */\r\n#define ETH_MAC_TXFIFO_WAITING                        0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */\r\n#define ETH_MAC_TXFIFO_WRITING                        0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */\r\n#define ETH_MAC_TRANSMISSION_PAUSE                    0x00080000U /* MAC transmitter in pause */\r\n#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE          0x00000000U /* MAC transmit frame controller: Idle */\r\n#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING       0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */\r\n#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */\r\n#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING  0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */\r\n#define ETH_MAC_MII_TRANSMIT_ACTIVE                   0x00010000U /* MAC MII transmit engine active */\r\n#define ETH_MAC_RXFIFO_EMPTY                          0x00000000U /* Rx FIFO fill level: empty */\r\n#define ETH_MAC_RXFIFO_BELOW_THRESHOLD                0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */\r\n#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD                0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */\r\n#define ETH_MAC_RXFIFO_FULL                           0x00000300U /* Rx FIFO fill level: full */\r\n#define ETH_MAC_READCONTROLLER_IDLE                   0x00000000U /* Rx FIFO read controller IDLE state */\r\n#define ETH_MAC_READCONTROLLER_READING_DATA           0x00000020U /* Rx FIFO read controller Reading frame data */\r\n#define ETH_MAC_READCONTROLLER_READING_STATUS         0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */\r\n#define ETH_MAC_READCONTROLLER_FLUSHING               0x00000060U /* Rx FIFO read controller Flushing the frame data and status */\r\n#define ETH_MAC_RXFIFO_WRITE_ACTIVE                   0x00000010U /* Rx FIFO write controller active */\r\n#define ETH_MAC_SMALL_FIFO_NOTACTIVE                  0x00000000U /* MAC small FIFO read / write controllers not active */\r\n#define ETH_MAC_SMALL_FIFO_READ_ACTIVE                0x00000002U /* MAC small FIFO read controller active */\r\n#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE               0x00000004U /* MAC small FIFO write controller active */\r\n#define ETH_MAC_SMALL_FIFO_RW_ACTIVE                  0x00000006U /* MAC small FIFO read / write controllers active */\r\n#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE           0x00000001U /* MAC MII receive protocol engine active */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_DCMI_ERROR_OVF HAL_DCMI_ERROR_OVR\r\n#define DCMI_IT_OVF        DCMI_IT_OVR\r\n#define DCMI_FLAG_OVFRI    DCMI_FLAG_OVRRI\r\n#define DCMI_FLAG_OVFMI    DCMI_FLAG_OVRMI\r\n\r\n#define HAL_DCMI_ConfigCROP  HAL_DCMI_ConfigCrop\r\n#define HAL_DCMI_EnableCROP  HAL_DCMI_EnableCrop\r\n#define HAL_DCMI_DisableCROP HAL_DCMI_DisableCrop\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)\r\n/** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888\r\n#define DMA2D_RGB888   DMA2D_OUTPUT_RGB888\r\n#define DMA2D_RGB565   DMA2D_OUTPUT_RGB565\r\n#define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555\r\n#define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444\r\n\r\n#define CM_ARGB8888 DMA2D_INPUT_ARGB8888\r\n#define CM_RGB888   DMA2D_INPUT_RGB888\r\n#define CM_RGB565   DMA2D_INPUT_RGB565\r\n#define CM_ARGB1555 DMA2D_INPUT_ARGB1555\r\n#define CM_ARGB4444 DMA2D_INPUT_ARGB4444\r\n#define CM_L8       DMA2D_INPUT_L8\r\n#define CM_AL44     DMA2D_INPUT_AL44\r\n#define CM_AL88     DMA2D_INPUT_AL88\r\n#define CM_L4       DMA2D_INPUT_L4\r\n#define CM_A8       DMA2D_INPUT_A8\r\n#define CM_A4       DMA2D_INPUT_A4\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32L4 ||  STM32F7*/\r\n\r\n/** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_CRYP_Aliased_Functions HAL CRYP Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_HASH_STATETypeDef  HAL_HASH_StateTypeDef\r\n#define HAL_HASHPhaseTypeDef   HAL_HASH_PhaseTypeDef\r\n#define HAL_HMAC_MD5_Finish    HAL_HASH_MD5_Finish\r\n#define HAL_HMAC_SHA1_Finish   HAL_HASH_SHA1_Finish\r\n#define HAL_HMAC_SHA224_Finish HAL_HASH_SHA224_Finish\r\n#define HAL_HMAC_SHA256_Finish HAL_HASH_SHA256_Finish\r\n\r\n/*HASH Algorithm Selection*/\r\n\r\n#define HASH_AlgoSelection_SHA1   HASH_ALGOSELECTION_SHA1\r\n#define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224\r\n#define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256\r\n#define HASH_AlgoSelection_MD5    HASH_ALGOSELECTION_MD5\r\n\r\n#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH\r\n#define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC\r\n\r\n#define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY\r\n#define HASH_HMACKeyType_LongKey  HASH_HMAC_KEYTYPE_LONGKEY\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_EnableDBGSleepMode              HAL_DBGMCU_EnableDBGSleepMode\r\n#define HAL_DisableDBGSleepMode             HAL_DBGMCU_DisableDBGSleepMode\r\n#define HAL_EnableDBGStopMode               HAL_DBGMCU_EnableDBGStopMode\r\n#define HAL_DisableDBGStopMode              HAL_DBGMCU_DisableDBGStopMode\r\n#define HAL_EnableDBGStandbyMode            HAL_DBGMCU_EnableDBGStandbyMode\r\n#define HAL_DisableDBGStandbyMode           HAL_DBGMCU_DisableDBGStandbyMode\r\n#define HAL_DBG_LowPowerConfig(Periph, cmd) (((cmd) == ENABLE) ? HAL_DBGMCU_DBG_EnableLowPowerConfig(Periph) : HAL_DBGMCU_DBG_DisableLowPowerConfig(Periph))\r\n#define HAL_VREFINT_OutputSelect            HAL_SYSCFG_VREFINT_OutputSelect\r\n#define HAL_Lock_Cmd(cmd)                   (((cmd) == ENABLE) ? HAL_SYSCFG_Enable_Lock_VREFINT() : HAL_SYSCFG_Disable_Lock_VREFINT())\r\n#if defined(STM32L0)\r\n#else\r\n#define HAL_VREFINT_Cmd(cmd) (((cmd) == ENABLE) ? HAL_SYSCFG_EnableVREFINT() : HAL_SYSCFG_DisableVREFINT())\r\n#endif\r\n#define HAL_ADC_EnableBuffer_Cmd(cmd)       (((cmd) == ENABLE) ? HAL_ADCEx_EnableVREFINT() : HAL_ADCEx_DisableVREFINT())\r\n#define HAL_ADC_EnableBufferSensor_Cmd(cmd) (((cmd) == ENABLE) ? HAL_ADCEx_EnableVREFINTTempSensor() : HAL_ADCEx_DisableVREFINTTempSensor())\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_FLASH_Aliased_Functions HAL FLASH Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define FLASH_HalfPageProgram     HAL_FLASHEx_HalfPageProgram\r\n#define FLASH_EnableRunPowerDown  HAL_FLASHEx_EnableRunPowerDown\r\n#define FLASH_DisableRunPowerDown HAL_FLASHEx_DisableRunPowerDown\r\n#define HAL_DATA_EEPROMEx_Unlock  HAL_FLASHEx_DATAEEPROM_Unlock\r\n#define HAL_DATA_EEPROMEx_Lock    HAL_FLASHEx_DATAEEPROM_Lock\r\n#define HAL_DATA_EEPROMEx_Erase   HAL_FLASHEx_DATAEEPROM_Erase\r\n#define HAL_DATA_EEPROMEx_Program HAL_FLASHEx_DATAEEPROM_Program\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_I2C_Aliased_Functions HAL I2C Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_I2CEx_AnalogFilter_Config     HAL_I2CEx_ConfigAnalogFilter\r\n#define HAL_I2CEx_DigitalFilter_Config    HAL_I2CEx_ConfigDigitalFilter\r\n#define HAL_FMPI2CEx_AnalogFilter_Config  HAL_FMPI2CEx_ConfigAnalogFilter\r\n#define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter\r\n\r\n#define HAL_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus, cmd) (((cmd) == ENABLE) ? HAL_I2CEx_EnableFastModePlus(SYSCFG_I2CFastModePlus) : HAL_I2CEx_DisableFastModePlus(SYSCFG_I2CFastModePlus))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_PWR_Aliased HAL PWR Aliased maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_PWR_PVDConfig                HAL_PWR_ConfigPVD\r\n#define HAL_PWR_DisableBkUpReg           HAL_PWREx_DisableBkUpReg\r\n#define HAL_PWR_DisableFlashPowerDown    HAL_PWREx_DisableFlashPowerDown\r\n#define HAL_PWR_DisableVddio2Monitor     HAL_PWREx_DisableVddio2Monitor\r\n#define HAL_PWR_EnableBkUpReg            HAL_PWREx_EnableBkUpReg\r\n#define HAL_PWR_EnableFlashPowerDown     HAL_PWREx_EnableFlashPowerDown\r\n#define HAL_PWR_EnableVddio2Monitor      HAL_PWREx_EnableVddio2Monitor\r\n#define HAL_PWR_PVD_PVM_IRQHandler       HAL_PWREx_PVD_PVM_IRQHandler\r\n#define HAL_PWR_PVDLevelConfig           HAL_PWR_ConfigPVD\r\n#define HAL_PWR_Vddio2Monitor_IRQHandler HAL_PWREx_Vddio2Monitor_IRQHandler\r\n#define HAL_PWR_Vddio2MonitorCallback    HAL_PWREx_Vddio2MonitorCallback\r\n#define HAL_PWREx_ActivateOverDrive      HAL_PWREx_EnableOverDrive\r\n#define HAL_PWREx_DeactivateOverDrive    HAL_PWREx_DisableOverDrive\r\n#define HAL_PWREx_DisableSDADCAnalog     HAL_PWREx_DisableSDADC\r\n#define HAL_PWREx_EnableSDADCAnalog      HAL_PWREx_EnableSDADC\r\n#define HAL_PWREx_PVMConfig              HAL_PWREx_ConfigPVM\r\n\r\n#define PWR_MODE_NORMAL               PWR_PVD_MODE_NORMAL\r\n#define PWR_MODE_IT_RISING            PWR_PVD_MODE_IT_RISING\r\n#define PWR_MODE_IT_FALLING           PWR_PVD_MODE_IT_FALLING\r\n#define PWR_MODE_IT_RISING_FALLING    PWR_PVD_MODE_IT_RISING_FALLING\r\n#define PWR_MODE_EVENT_RISING         PWR_PVD_MODE_EVENT_RISING\r\n#define PWR_MODE_EVENT_FALLING        PWR_PVD_MODE_EVENT_FALLING\r\n#define PWR_MODE_EVENT_RISING_FALLING PWR_PVD_MODE_EVENT_RISING_FALLING\r\n\r\n#define CR_OFFSET_BB  PWR_CR_OFFSET_BB\r\n#define CSR_OFFSET_BB PWR_CSR_OFFSET_BB\r\n\r\n#define DBP_BitNumber    DBP_BIT_NUMBER\r\n#define PVDE_BitNumber   PVDE_BIT_NUMBER\r\n#define PMODE_BitNumber  PMODE_BIT_NUMBER\r\n#define EWUP_BitNumber   EWUP_BIT_NUMBER\r\n#define FPDS_BitNumber   FPDS_BIT_NUMBER\r\n#define ODEN_BitNumber   ODEN_BIT_NUMBER\r\n#define ODSWEN_BitNumber ODSWEN_BIT_NUMBER\r\n#define MRLVDS_BitNumber MRLVDS_BIT_NUMBER\r\n#define LPLVDS_BitNumber LPLVDS_BIT_NUMBER\r\n#define BRE_BitNumber    BRE_BIT_NUMBER\r\n\r\n#define PWR_MODE_EVT PWR_PVD_MODE_NORMAL\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_SMBUS_Slave_Listen_IT         HAL_SMBUS_EnableListen_IT\r\n#define HAL_SMBUS_SlaveAddrCallback       HAL_SMBUS_AddrCallback\r\n#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SPI_Aliased_Functions HAL SPI Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_TIM_DMADelayPulseCplt    TIM_DMADelayPulseCplt\r\n#define HAL_TIM_DMAError             TIM_DMAError\r\n#define HAL_TIM_DMACaptureCplt       TIM_DMACaptureCplt\r\n#define HAL_TIMEx_DMACommutationCplt TIMEx_DMACommutationCplt\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_LTDC_LineEvenCallback                   HAL_LTDC_LineEventCallback\r\n#define HAL_LTDC_Relaod                             HAL_LTDC_Reload\r\n#define HAL_LTDC_StructInitFromVideoConfig          HAL_LTDCEx_StructInitFromVideoConfig\r\n#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macros ------------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_AES_Aliased_Macros HAL CRYP Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define AES_IT_CC    CRYP_IT_CC\r\n#define AES_IT_ERR   CRYP_IT_ERR\r\n#define AES_FLAG_CCF CRYP_FLAG_CCF\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_GET_BOOT_MODE           __HAL_SYSCFG_GET_BOOT_MODE\r\n#define __HAL_REMAPMEMORY_FLASH       __HAL_SYSCFG_REMAPMEMORY_FLASH\r\n#define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH\r\n#define __HAL_REMAPMEMORY_SRAM        __HAL_SYSCFG_REMAPMEMORY_SRAM\r\n#define __HAL_REMAPMEMORY_FMC         __HAL_SYSCFG_REMAPMEMORY_FMC\r\n#define __HAL_REMAPMEMORY_FMC_SDRAM   __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM\r\n#define __HAL_REMAPMEMORY_FSMC        __HAL_SYSCFG_REMAPMEMORY_FSMC\r\n#define __HAL_REMAPMEMORY_QUADSPI     __HAL_SYSCFG_REMAPMEMORY_QUADSPI\r\n#define __HAL_FMC_BANK                __HAL_SYSCFG_FMC_BANK\r\n#define __HAL_GET_FLAG                __HAL_SYSCFG_GET_FLAG\r\n#define __HAL_CLEAR_FLAG              __HAL_SYSCFG_CLEAR_FLAG\r\n#define __HAL_VREFINT_OUT_ENABLE      __HAL_SYSCFG_VREFINT_OUT_ENABLE\r\n#define __HAL_VREFINT_OUT_DISABLE     __HAL_SYSCFG_VREFINT_OUT_DISABLE\r\n#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE\r\n\r\n#define SYSCFG_FLAG_VREF_READY        SYSCFG_FLAG_VREFINT_READY\r\n#define SYSCFG_FLAG_RC48              RCC_FLAG_HSI48\r\n#define IS_SYSCFG_FASTMODEPLUS_CONFIG IS_I2C_FASTMODEPLUS\r\n#define UFB_MODE_BitNumber            UFB_MODE_BIT_NUMBER\r\n#define CMP_PD_BitNumber              CMP_PD_BIT_NUMBER\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __ADC_ENABLE                                     __HAL_ADC_ENABLE\r\n#define __ADC_DISABLE                                    __HAL_ADC_DISABLE\r\n#define __HAL_ADC_ENABLING_CONDITIONS                    ADC_ENABLING_CONDITIONS\r\n#define __HAL_ADC_DISABLING_CONDITIONS                   ADC_DISABLING_CONDITIONS\r\n#define __HAL_ADC_IS_ENABLED                             ADC_IS_ENABLE\r\n#define __ADC_IS_ENABLED                                 ADC_IS_ENABLE\r\n#define __HAL_ADC_IS_SOFTWARE_START_REGULAR              ADC_IS_SOFTWARE_START_REGULAR\r\n#define __HAL_ADC_IS_SOFTWARE_START_INJECTED             ADC_IS_SOFTWARE_START_INJECTED\r\n#define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED\r\n#define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR          ADC_IS_CONVERSION_ONGOING_REGULAR\r\n#define __HAL_ADC_IS_CONVERSION_ONGOING_INJECTED         ADC_IS_CONVERSION_ONGOING_INJECTED\r\n#define __HAL_ADC_IS_CONVERSION_ONGOING                  ADC_IS_CONVERSION_ONGOING\r\n#define __HAL_ADC_CLEAR_ERRORCODE                        ADC_CLEAR_ERRORCODE\r\n\r\n#define __HAL_ADC_GET_RESOLUTION              ADC_GET_RESOLUTION\r\n#define __HAL_ADC_JSQR_RK                     ADC_JSQR_RK\r\n#define __HAL_ADC_CFGR_AWD1CH                 ADC_CFGR_AWD1CH_SHIFT\r\n#define __HAL_ADC_CFGR_AWD23CR                ADC_CFGR_AWD23CR\r\n#define __HAL_ADC_CFGR_INJECT_AUTO_CONVERSION ADC_CFGR_INJECT_AUTO_CONVERSION\r\n#define __HAL_ADC_CFGR_INJECT_CONTEXT_QUEUE   ADC_CFGR_INJECT_CONTEXT_QUEUE\r\n#define __HAL_ADC_CFGR_INJECT_DISCCONTINUOUS  ADC_CFGR_INJECT_DISCCONTINUOUS\r\n#define __HAL_ADC_CFGR_REG_DISCCONTINUOUS     ADC_CFGR_REG_DISCCONTINUOUS\r\n#define __HAL_ADC_CFGR_DISCONTINUOUS_NUM      ADC_CFGR_DISCONTINUOUS_NUM\r\n#define __HAL_ADC_CFGR_AUTOWAIT               ADC_CFGR_AUTOWAIT\r\n#define __HAL_ADC_CFGR_CONTINUOUS             ADC_CFGR_CONTINUOUS\r\n#define __HAL_ADC_CFGR_OVERRUN                ADC_CFGR_OVERRUN\r\n#define __HAL_ADC_CFGR_DMACONTREQ             ADC_CFGR_DMACONTREQ\r\n#define __HAL_ADC_CFGR_EXTSEL                 ADC_CFGR_EXTSEL_SET\r\n#define __HAL_ADC_JSQR_JEXTSEL                ADC_JSQR_JEXTSEL_SET\r\n#define __HAL_ADC_OFR_CHANNEL                 ADC_OFR_CHANNEL\r\n#define __HAL_ADC_DIFSEL_CHANNEL              ADC_DIFSEL_CHANNEL\r\n#define __HAL_ADC_CALFACT_DIFF_SET            ADC_CALFACT_DIFF_SET\r\n#define __HAL_ADC_CALFACT_DIFF_GET            ADC_CALFACT_DIFF_GET\r\n#define __HAL_ADC_TRX_HIGHTHRESHOLD           ADC_TRX_HIGHTHRESHOLD\r\n\r\n#define __HAL_ADC_OFFSET_SHIFT_RESOLUTION         ADC_OFFSET_SHIFT_RESOLUTION\r\n#define __HAL_ADC_AWD1THRESHOLD_SHIFT_RESOLUTION  ADC_AWD1THRESHOLD_SHIFT_RESOLUTION\r\n#define __HAL_ADC_AWD23THRESHOLD_SHIFT_RESOLUTION ADC_AWD23THRESHOLD_SHIFT_RESOLUTION\r\n#define __HAL_ADC_COMMON_REGISTER                 ADC_COMMON_REGISTER\r\n#define __HAL_ADC_COMMON_CCR_MULTI                ADC_COMMON_CCR_MULTI\r\n#define __HAL_ADC_MULTIMODE_IS_ENABLED            ADC_MULTIMODE_IS_ENABLE\r\n#define __ADC_MULTIMODE_IS_ENABLED                ADC_MULTIMODE_IS_ENABLE\r\n#define __HAL_ADC_NONMULTIMODE_OR_MULTIMODEMASTER ADC_NONMULTIMODE_OR_MULTIMODEMASTER\r\n#define __HAL_ADC_COMMON_ADC_OTHER                ADC_COMMON_ADC_OTHER\r\n#define __HAL_ADC_MULTI_SLAVE                     ADC_MULTI_SLAVE\r\n\r\n#define __HAL_ADC_SQR1_L                ADC_SQR1_L_SHIFT\r\n#define __HAL_ADC_JSQR_JL               ADC_JSQR_JL_SHIFT\r\n#define __HAL_ADC_JSQR_RK_JL            ADC_JSQR_RK_JL\r\n#define __HAL_ADC_CR1_DISCONTINUOUS_NUM ADC_CR1_DISCONTINUOUS_NUM\r\n#define __HAL_ADC_CR1_SCAN              ADC_CR1_SCAN_SET\r\n#define __HAL_ADC_CONVCYCLES_MAX_RANGE  ADC_CONVCYCLES_MAX_RANGE\r\n#define __HAL_ADC_CLOCK_PRESCALER_RANGE ADC_CLOCK_PRESCALER_RANGE\r\n#define __HAL_ADC_GET_CLOCK_PRESCALER   ADC_GET_CLOCK_PRESCALER\r\n\r\n#define __HAL_ADC_SQR1              ADC_SQR1\r\n#define __HAL_ADC_SMPR1             ADC_SMPR1\r\n#define __HAL_ADC_SMPR2             ADC_SMPR2\r\n#define __HAL_ADC_SQR3_RK           ADC_SQR3_RK\r\n#define __HAL_ADC_SQR2_RK           ADC_SQR2_RK\r\n#define __HAL_ADC_SQR1_RK           ADC_SQR1_RK\r\n#define __HAL_ADC_CR2_CONTINUOUS    ADC_CR2_CONTINUOUS\r\n#define __HAL_ADC_CR1_DISCONTINUOUS ADC_CR1_DISCONTINUOUS\r\n#define __HAL_ADC_CR1_SCANCONV      ADC_CR1_SCANCONV\r\n#define __HAL_ADC_CR2_EOCSelection  ADC_CR2_EOCSelection\r\n#define __HAL_ADC_CR2_DMAContReq    ADC_CR2_DMAContReq\r\n#define __HAL_ADC_GET_RESOLUTION    ADC_GET_RESOLUTION\r\n#define __HAL_ADC_JSQR              ADC_JSQR\r\n\r\n#define __HAL_ADC_CHSELR_CHANNEL           ADC_CHSELR_CHANNEL\r\n#define __HAL_ADC_CFGR1_REG_DISCCONTINUOUS ADC_CFGR1_REG_DISCCONTINUOUS\r\n#define __HAL_ADC_CFGR1_AUTOOFF            ADC_CFGR1_AUTOOFF\r\n#define __HAL_ADC_CFGR1_AUTOWAIT           ADC_CFGR1_AUTOWAIT\r\n#define __HAL_ADC_CFGR1_CONTINUOUS         ADC_CFGR1_CONTINUOUS\r\n#define __HAL_ADC_CFGR1_OVERRUN            ADC_CFGR1_OVERRUN\r\n#define __HAL_ADC_CFGR1_SCANDIR            ADC_CFGR1_SCANDIR\r\n#define __HAL_ADC_CFGR1_DMACONTREQ         ADC_CFGR1_DMACONTREQ\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_DAC_Aliased_Macros HAL DAC Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_DHR12R1_ALIGNEMENT DAC_DHR12R1_ALIGNMENT\r\n#define __HAL_DHR12R2_ALIGNEMENT DAC_DHR12R2_ALIGNMENT\r\n#define __HAL_DHR12RD_ALIGNEMENT DAC_DHR12RD_ALIGNMENT\r\n#define IS_DAC_GENERATE_WAVE     IS_DAC_WAVE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_FREEZE_TIM1_DBGMCU   __HAL_DBGMCU_FREEZE_TIM1\r\n#define __HAL_UNFREEZE_TIM1_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM1\r\n#define __HAL_FREEZE_TIM2_DBGMCU   __HAL_DBGMCU_FREEZE_TIM2\r\n#define __HAL_UNFREEZE_TIM2_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM2\r\n#define __HAL_FREEZE_TIM3_DBGMCU   __HAL_DBGMCU_FREEZE_TIM3\r\n#define __HAL_UNFREEZE_TIM3_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM3\r\n#define __HAL_FREEZE_TIM4_DBGMCU   __HAL_DBGMCU_FREEZE_TIM4\r\n#define __HAL_UNFREEZE_TIM4_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM4\r\n#define __HAL_FREEZE_TIM5_DBGMCU   __HAL_DBGMCU_FREEZE_TIM5\r\n#define __HAL_UNFREEZE_TIM5_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM5\r\n#define __HAL_FREEZE_TIM6_DBGMCU   __HAL_DBGMCU_FREEZE_TIM6\r\n#define __HAL_UNFREEZE_TIM6_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM6\r\n#define __HAL_FREEZE_TIM7_DBGMCU   __HAL_DBGMCU_FREEZE_TIM7\r\n#define __HAL_UNFREEZE_TIM7_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM7\r\n#define __HAL_FREEZE_TIM8_DBGMCU   __HAL_DBGMCU_FREEZE_TIM8\r\n#define __HAL_UNFREEZE_TIM8_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM8\r\n\r\n#define __HAL_FREEZE_TIM9_DBGMCU    __HAL_DBGMCU_FREEZE_TIM9\r\n#define __HAL_UNFREEZE_TIM9_DBGMCU  __HAL_DBGMCU_UNFREEZE_TIM9\r\n#define __HAL_FREEZE_TIM10_DBGMCU   __HAL_DBGMCU_FREEZE_TIM10\r\n#define __HAL_UNFREEZE_TIM10_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM10\r\n#define __HAL_FREEZE_TIM11_DBGMCU   __HAL_DBGMCU_FREEZE_TIM11\r\n#define __HAL_UNFREEZE_TIM11_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM11\r\n#define __HAL_FREEZE_TIM12_DBGMCU   __HAL_DBGMCU_FREEZE_TIM12\r\n#define __HAL_UNFREEZE_TIM12_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM12\r\n#define __HAL_FREEZE_TIM13_DBGMCU   __HAL_DBGMCU_FREEZE_TIM13\r\n#define __HAL_UNFREEZE_TIM13_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM13\r\n#define __HAL_FREEZE_TIM14_DBGMCU   __HAL_DBGMCU_FREEZE_TIM14\r\n#define __HAL_UNFREEZE_TIM14_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM14\r\n#define __HAL_FREEZE_CAN2_DBGMCU    __HAL_DBGMCU_FREEZE_CAN2\r\n#define __HAL_UNFREEZE_CAN2_DBGMCU  __HAL_DBGMCU_UNFREEZE_CAN2\r\n\r\n#define __HAL_FREEZE_TIM15_DBGMCU          __HAL_DBGMCU_FREEZE_TIM15\r\n#define __HAL_UNFREEZE_TIM15_DBGMCU        __HAL_DBGMCU_UNFREEZE_TIM15\r\n#define __HAL_FREEZE_TIM16_DBGMCU          __HAL_DBGMCU_FREEZE_TIM16\r\n#define __HAL_UNFREEZE_TIM16_DBGMCU        __HAL_DBGMCU_UNFREEZE_TIM16\r\n#define __HAL_FREEZE_TIM17_DBGMCU          __HAL_DBGMCU_FREEZE_TIM17\r\n#define __HAL_UNFREEZE_TIM17_DBGMCU        __HAL_DBGMCU_UNFREEZE_TIM17\r\n#define __HAL_FREEZE_RTC_DBGMCU            __HAL_DBGMCU_FREEZE_RTC\r\n#define __HAL_UNFREEZE_RTC_DBGMCU          __HAL_DBGMCU_UNFREEZE_RTC\r\n#define __HAL_FREEZE_WWDG_DBGMCU           __HAL_DBGMCU_FREEZE_WWDG\r\n#define __HAL_UNFREEZE_WWDG_DBGMCU         __HAL_DBGMCU_UNFREEZE_WWDG\r\n#define __HAL_FREEZE_IWDG_DBGMCU           __HAL_DBGMCU_FREEZE_IWDG\r\n#define __HAL_UNFREEZE_IWDG_DBGMCU         __HAL_DBGMCU_UNFREEZE_IWDG\r\n#define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU   __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT\r\n#define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT\r\n#define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU   __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT\r\n#define __HAL_UNFREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT\r\n#define __HAL_FREEZE_I2C3_TIMEOUT_DBGMCU   __HAL_DBGMCU_FREEZE_I2C3_TIMEOUT\r\n#define __HAL_UNFREEZE_I2C3_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C3_TIMEOUT\r\n#define __HAL_FREEZE_CAN1_DBGMCU           __HAL_DBGMCU_FREEZE_CAN1\r\n#define __HAL_UNFREEZE_CAN1_DBGMCU         __HAL_DBGMCU_UNFREEZE_CAN1\r\n#define __HAL_FREEZE_LPTIM1_DBGMCU         __HAL_DBGMCU_FREEZE_LPTIM1\r\n#define __HAL_UNFREEZE_LPTIM1_DBGMCU       __HAL_DBGMCU_UNFREEZE_LPTIM1\r\n#define __HAL_FREEZE_LPTIM2_DBGMCU         __HAL_DBGMCU_FREEZE_LPTIM2\r\n#define __HAL_UNFREEZE_LPTIM2_DBGMCU       __HAL_DBGMCU_UNFREEZE_LPTIM2\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_COMP_Aliased_Macros HAL COMP Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#if defined(STM32F3)\r\n#define COMP_START __HAL_COMP_ENABLE\r\n#define COMP_STOP  __HAL_COMP_DISABLE\r\n#define COMP_LOCK  __HAL_COMP_LOCK\r\n\r\n#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)\r\n#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2)   ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2)   ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2)   ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2)   ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : __HAL_COMP_COMP6_EXTI_ENABLE_IT())\r\n#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : __HAL_COMP_COMP6_EXTI_DISABLE_IT())\r\n#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : __HAL_COMP_COMP6_EXTI_GET_FLAG())\r\n#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : __HAL_COMP_COMP6_EXTI_CLEAR_FLAG())\r\n#endif\r\n#if defined(STM32F302xE) || defined(STM32F302xC)\r\n#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)                                   \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_ENABLE_IT())\r\n#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)                                   \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_DISABLE_IT())\r\n#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)                                   \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() \\\r\n                                          : __HAL_COMP_COMP6_EXTI_GET_FLAG())\r\n#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)                                   \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() \\\r\n                                          : __HAL_COMP_COMP6_EXTI_CLEAR_FLAG())\r\n#endif\r\n#if defined(STM32F303xE) || defined(STM32F398xx) || defined(STM32F303xC) || defined(STM32F358xx)\r\n#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_ENABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_DISABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_ENABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_DISABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)                                   \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_IT() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_ENABLE_IT())\r\n#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)                                   \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_IT() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_DISABLE_IT())\r\n#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)                                   \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_GET_FLAG() \\\r\n                                          : __HAL_COMP_COMP7_EXTI_GET_FLAG())\r\n#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)                                   \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_CLEAR_FLAG() \\\r\n                                          : __HAL_COMP_COMP7_EXTI_CLEAR_FLAG())\r\n#endif\r\n#if defined(STM32F373xC) || defined(STM32F378xx)\r\n#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)   (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)          (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : __HAL_COMP_COMP2_EXTI_ENABLE_IT())\r\n#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)         (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : __HAL_COMP_COMP2_EXTI_DISABLE_IT())\r\n#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)               (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : __HAL_COMP_COMP2_EXTI_GET_FLAG())\r\n#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)             (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : __HAL_COMP_COMP2_EXTI_CLEAR_FLAG())\r\n#endif\r\n#else\r\n#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)   (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)          (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : __HAL_COMP_COMP2_EXTI_ENABLE_IT())\r\n#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)         (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : __HAL_COMP_COMP2_EXTI_DISABLE_IT())\r\n#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)               (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : __HAL_COMP_COMP2_EXTI_GET_FLAG())\r\n#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)             (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : __HAL_COMP_COMP2_EXTI_CLEAR_FLAG())\r\n#endif\r\n\r\n#define __HAL_COMP_GET_EXTI_LINE COMP_GET_EXTI_LINE\r\n\r\n#if defined(STM32L0) || defined(STM32L4)\r\n/* Note: On these STM32 families, the only argument of this macro             */\r\n/*       is COMP_FLAG_LOCK.                                                   */\r\n/*       This macro is replaced by __HAL_COMP_IS_LOCKED with only HAL handle  */\r\n/*       argument.                                                            */\r\n#define __HAL_COMP_GET_FLAG(__HANDLE__, __FLAG__) (__HAL_COMP_IS_LOCKED(__HANDLE__))\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32L0) || defined(STM32L4)\r\n/** @defgroup HAL_COMP_Aliased_Functions HAL COMP Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_COMP_Start_IT HAL_COMP_Start /* Function considered as legacy as EXTI event or IT configuration is done into HAL_COMP_Init() */\r\n#define HAL_COMP_Stop_IT  HAL_COMP_Stop  /* Function considered as legacy as EXTI event or IT configuration is done into HAL_COMP_Init() */\r\n/**\r\n * @}\r\n */\r\n#endif\r\n\r\n/** @defgroup HAL_DAC_Aliased_Macros HAL DAC Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || ((WAVE) == DAC_WAVE_NOISE) || ((WAVE) == DAC_WAVE_TRIANGLE))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_FLASH_Aliased_Macros HAL FLASH Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define IS_WRPAREA          IS_OB_WRPAREA\r\n#define IS_TYPEPROGRAM      IS_FLASH_TYPEPROGRAM\r\n#define IS_TYPEPROGRAMFLASH IS_FLASH_TYPEPROGRAM\r\n#define IS_TYPEERASE        IS_FLASH_TYPEERASE\r\n#define IS_NBSECTORS        IS_FLASH_NBSECTORS\r\n#define IS_OB_WDG_SOURCE    IS_OB_IWDG_SOURCE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_I2C_RESET_CR2      I2C_RESET_CR2\r\n#define __HAL_I2C_GENERATE_START I2C_GENERATE_START\r\n#if defined(STM32F1)\r\n#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE\r\n#else\r\n#define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE\r\n#endif /* STM32F1 */\r\n#define __HAL_I2C_RISE_TIME          I2C_RISE_TIME\r\n#define __HAL_I2C_SPEED_STANDARD     I2C_SPEED_STANDARD\r\n#define __HAL_I2C_SPEED_FAST         I2C_SPEED_FAST\r\n#define __HAL_I2C_SPEED              I2C_SPEED\r\n#define __HAL_I2C_7BIT_ADD_WRITE     I2C_7BIT_ADD_WRITE\r\n#define __HAL_I2C_7BIT_ADD_READ      I2C_7BIT_ADD_READ\r\n#define __HAL_I2C_10BIT_ADDRESS      I2C_10BIT_ADDRESS\r\n#define __HAL_I2C_10BIT_HEADER_WRITE I2C_10BIT_HEADER_WRITE\r\n#define __HAL_I2C_10BIT_HEADER_READ  I2C_10BIT_HEADER_READ\r\n#define __HAL_I2C_MEM_ADD_MSB        I2C_MEM_ADD_MSB\r\n#define __HAL_I2C_MEM_ADD_LSB        I2C_MEM_ADD_LSB\r\n#define __HAL_I2C_FREQRANGE          I2C_FREQRANGE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define IS_I2S_INSTANCE     IS_I2S_ALL_INSTANCE\r\n#define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __IRDA_DISABLE __HAL_IRDA_DISABLE\r\n#define __IRDA_ENABLE  __HAL_IRDA_ENABLE\r\n\r\n#define __HAL_IRDA_GETCLOCKSOURCE   IRDA_GETCLOCKSOURCE\r\n#define __HAL_IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION\r\n#define __IRDA_GETCLOCKSOURCE       IRDA_GETCLOCKSOURCE\r\n#define __IRDA_MASK_COMPUTATION     IRDA_MASK_COMPUTATION\r\n\r\n#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_IWDG_Aliased_Macros HAL IWDG Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_IWDG_ENABLE_WRITE_ACCESS  IWDG_ENABLE_WRITE_ACCESS\r\n#define __HAL_IWDG_DISABLE_WRITE_ACCESS IWDG_DISABLE_WRITE_ACCESS\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_LPTIM_Aliased_Macros HAL LPTIM Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_LPTIM_ENABLE_INTERRUPT  __HAL_LPTIM_ENABLE_IT\r\n#define __HAL_LPTIM_DISABLE_INTERRUPT __HAL_LPTIM_DISABLE_IT\r\n#define __HAL_LPTIM_GET_ITSTATUS      __HAL_LPTIM_GET_IT_SOURCE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __OPAMP_CSR_OPAXPD               OPAMP_CSR_OPAXPD\r\n#define __OPAMP_CSR_S3SELX               OPAMP_CSR_S3SELX\r\n#define __OPAMP_CSR_S4SELX               OPAMP_CSR_S4SELX\r\n#define __OPAMP_CSR_S5SELX               OPAMP_CSR_S5SELX\r\n#define __OPAMP_CSR_S6SELX               OPAMP_CSR_S6SELX\r\n#define __OPAMP_CSR_OPAXCAL_L            OPAMP_CSR_OPAXCAL_L\r\n#define __OPAMP_CSR_OPAXCAL_H            OPAMP_CSR_OPAXCAL_H\r\n#define __OPAMP_CSR_OPAXLPM              OPAMP_CSR_OPAXLPM\r\n#define __OPAMP_CSR_ALL_SWITCHES         OPAMP_CSR_ALL_SWITCHES\r\n#define __OPAMP_CSR_ANAWSELX             OPAMP_CSR_ANAWSELX\r\n#define __OPAMP_CSR_OPAXCALOUT           OPAMP_CSR_OPAXCALOUT\r\n#define __OPAMP_OFFSET_TRIM_BITSPOSITION OPAMP_OFFSET_TRIM_BITSPOSITION\r\n#define __OPAMP_OFFSET_TRIM_SET          OPAMP_OFFSET_TRIM_SET\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_PWR_Aliased_Macros HAL PWR Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_PVD_EVENT_DISABLE               __HAL_PWR_PVD_EXTI_DISABLE_EVENT\r\n#define __HAL_PVD_EVENT_ENABLE                __HAL_PWR_PVD_EXTI_ENABLE_EVENT\r\n#define __HAL_PVD_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE\r\n#define __HAL_PVD_EXTI_FALLINGTRIGGER_ENABLE  __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_PVD_EXTI_RISINGTRIGGER_DISABLE  __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE\r\n#define __HAL_PVD_EXTI_RISINGTRIGGER_ENABLE   __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_PVM_EVENT_DISABLE               __HAL_PWR_PVM_EVENT_DISABLE\r\n#define __HAL_PVM_EVENT_ENABLE                __HAL_PWR_PVM_EVENT_ENABLE\r\n#define __HAL_PVM_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVM_EXTI_FALLINGTRIGGER_DISABLE\r\n#define __HAL_PVM_EXTI_FALLINGTRIGGER_ENABLE  __HAL_PWR_PVM_EXTI_FALLINGTRIGGER_ENABLE\r\n#define __HAL_PVM_EXTI_RISINGTRIGGER_DISABLE  __HAL_PWR_PVM_EXTI_RISINGTRIGGER_DISABLE\r\n#define __HAL_PVM_EXTI_RISINGTRIGGER_ENABLE   __HAL_PWR_PVM_EXTI_RISINGTRIGGER_ENABLE\r\n#define __HAL_PWR_INTERNALWAKEUP_DISABLE      HAL_PWREx_DisableInternalWakeUpLine\r\n#define __HAL_PWR_INTERNALWAKEUP_ENABLE       HAL_PWREx_EnableInternalWakeUpLine\r\n#define __HAL_PWR_PULL_UP_DOWN_CONFIG_DISABLE HAL_PWREx_DisablePullUpPullDownConfig\r\n#define __HAL_PWR_PULL_UP_DOWN_CONFIG_ENABLE  HAL_PWREx_EnablePullUpPullDownConfig\r\n#define __HAL_PWR_PVD_EXTI_CLEAR_EGDE_TRIGGER() \\\r\n  do {                                          \\\r\n    __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();   \\\r\n    __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE();  \\\r\n  } while (0)\r\n#define __HAL_PWR_PVD_EXTI_EVENT_DISABLE            __HAL_PWR_PVD_EXTI_DISABLE_EVENT\r\n#define __HAL_PWR_PVD_EXTI_EVENT_ENABLE             __HAL_PWR_PVD_EXTI_ENABLE_EVENT\r\n#define __HAL_PWR_PVD_EXTI_FALLINGTRIGGER_DISABLE   __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE\r\n#define __HAL_PWR_PVD_EXTI_FALLINGTRIGGER_ENABLE    __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_PWR_PVD_EXTI_RISINGTRIGGER_DISABLE    __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE\r\n#define __HAL_PWR_PVD_EXTI_RISINGTRIGGER_ENABLE     __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_PWR_PVD_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_PWR_PVD_EXTI_SET_RISING_EDGE_TRIGGER  __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_PWR_PVM_DISABLE() \\\r\n  do {                          \\\r\n    HAL_PWREx_DisablePVM1();    \\\r\n    HAL_PWREx_DisablePVM2();    \\\r\n    HAL_PWREx_DisablePVM3();    \\\r\n    HAL_PWREx_DisablePVM4();    \\\r\n  } while (0)\r\n#define __HAL_PWR_PVM_ENABLE() \\\r\n  do {                         \\\r\n    HAL_PWREx_EnablePVM1();    \\\r\n    HAL_PWREx_EnablePVM2();    \\\r\n    HAL_PWREx_EnablePVM3();    \\\r\n    HAL_PWREx_EnablePVM4();    \\\r\n  } while (0)\r\n#define __HAL_PWR_SRAM2CONTENT_PRESERVE_DISABLE        HAL_PWREx_DisableSRAM2ContentRetention\r\n#define __HAL_PWR_SRAM2CONTENT_PRESERVE_ENABLE         HAL_PWREx_EnableSRAM2ContentRetention\r\n#define __HAL_PWR_VDDIO2_DISABLE                       HAL_PWREx_DisableVddIO2\r\n#define __HAL_PWR_VDDIO2_ENABLE                        HAL_PWREx_EnableVddIO2\r\n#define __HAL_PWR_VDDIO2_EXTI_CLEAR_EGDE_TRIGGER       __HAL_PWR_VDDIO2_EXTI_DISABLE_FALLING_EDGE\r\n#define __HAL_PWR_VDDIO2_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_PWR_VDDIO2_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_PWR_VDDUSB_DISABLE                       HAL_PWREx_DisableVddUSB\r\n#define __HAL_PWR_VDDUSB_ENABLE                        HAL_PWREx_EnableVddUSB\r\n\r\n#if defined(STM32F4)\r\n#define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD)     __HAL_PWR_PVD_EXTI_ENABLE_IT()\r\n#define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD)    __HAL_PWR_PVD_EXTI_DISABLE_IT()\r\n#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD)      __HAL_PWR_PVD_EXTI_GET_FLAG()\r\n#define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD)    __HAL_PWR_PVD_EXTI_CLEAR_FLAG()\r\n#define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT()\r\n#else\r\n#define __HAL_PVD_EXTI_CLEAR_FLAG    __HAL_PWR_PVD_EXTI_CLEAR_FLAG\r\n#define __HAL_PVD_EXTI_DISABLE_IT    __HAL_PWR_PVD_EXTI_DISABLE_IT\r\n#define __HAL_PVD_EXTI_ENABLE_IT     __HAL_PWR_PVD_EXTI_ENABLE_IT\r\n#define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT\r\n#define __HAL_PVD_EXTI_GET_FLAG      __HAL_PWR_PVD_EXTI_GET_FLAG\r\n#endif /* STM32F4 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI\r\n#define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI\r\n\r\n#define HAL_RCC_CCSCallback            HAL_RCC_CSSCallback\r\n#define HAL_RC48_EnableBuffer_Cmd(cmd) (((cmd) == ENABLE) ? HAL_RCCEx_EnableHSI48_VREFINT() : HAL_RCCEx_DisableHSI48_VREFINT())\r\n\r\n#define __ADC_CLK_DISABLE           __HAL_RCC_ADC_CLK_DISABLE\r\n#define __ADC_CLK_ENABLE            __HAL_RCC_ADC_CLK_ENABLE\r\n#define __ADC_CLK_SLEEP_DISABLE     __HAL_RCC_ADC_CLK_SLEEP_DISABLE\r\n#define __ADC_CLK_SLEEP_ENABLE      __HAL_RCC_ADC_CLK_SLEEP_ENABLE\r\n#define __ADC_FORCE_RESET           __HAL_RCC_ADC_FORCE_RESET\r\n#define __ADC_RELEASE_RESET         __HAL_RCC_ADC_RELEASE_RESET\r\n#define __ADC1_CLK_DISABLE          __HAL_RCC_ADC1_CLK_DISABLE\r\n#define __ADC1_CLK_ENABLE           __HAL_RCC_ADC1_CLK_ENABLE\r\n#define __ADC1_FORCE_RESET          __HAL_RCC_ADC1_FORCE_RESET\r\n#define __ADC1_RELEASE_RESET        __HAL_RCC_ADC1_RELEASE_RESET\r\n#define __ADC1_CLK_SLEEP_ENABLE     __HAL_RCC_ADC1_CLK_SLEEP_ENABLE\r\n#define __ADC1_CLK_SLEEP_DISABLE    __HAL_RCC_ADC1_CLK_SLEEP_DISABLE\r\n#define __ADC2_CLK_DISABLE          __HAL_RCC_ADC2_CLK_DISABLE\r\n#define __ADC2_CLK_ENABLE           __HAL_RCC_ADC2_CLK_ENABLE\r\n#define __ADC2_FORCE_RESET          __HAL_RCC_ADC2_FORCE_RESET\r\n#define __ADC2_RELEASE_RESET        __HAL_RCC_ADC2_RELEASE_RESET\r\n#define __ADC3_CLK_DISABLE          __HAL_RCC_ADC3_CLK_DISABLE\r\n#define __ADC3_CLK_ENABLE           __HAL_RCC_ADC3_CLK_ENABLE\r\n#define __ADC3_FORCE_RESET          __HAL_RCC_ADC3_FORCE_RESET\r\n#define __ADC3_RELEASE_RESET        __HAL_RCC_ADC3_RELEASE_RESET\r\n#define __AES_CLK_DISABLE           __HAL_RCC_AES_CLK_DISABLE\r\n#define __AES_CLK_ENABLE            __HAL_RCC_AES_CLK_ENABLE\r\n#define __AES_CLK_SLEEP_DISABLE     __HAL_RCC_AES_CLK_SLEEP_DISABLE\r\n#define __AES_CLK_SLEEP_ENABLE      __HAL_RCC_AES_CLK_SLEEP_ENABLE\r\n#define __AES_FORCE_RESET           __HAL_RCC_AES_FORCE_RESET\r\n#define __AES_RELEASE_RESET         __HAL_RCC_AES_RELEASE_RESET\r\n#define __CRYP_CLK_SLEEP_ENABLE     __HAL_RCC_CRYP_CLK_SLEEP_ENABLE\r\n#define __CRYP_CLK_SLEEP_DISABLE    __HAL_RCC_CRYP_CLK_SLEEP_DISABLE\r\n#define __CRYP_CLK_ENABLE           __HAL_RCC_CRYP_CLK_ENABLE\r\n#define __CRYP_CLK_DISABLE          __HAL_RCC_CRYP_CLK_DISABLE\r\n#define __CRYP_FORCE_RESET          __HAL_RCC_CRYP_FORCE_RESET\r\n#define __CRYP_RELEASE_RESET        __HAL_RCC_CRYP_RELEASE_RESET\r\n#define __AFIO_CLK_DISABLE          __HAL_RCC_AFIO_CLK_DISABLE\r\n#define __AFIO_CLK_ENABLE           __HAL_RCC_AFIO_CLK_ENABLE\r\n#define __AFIO_FORCE_RESET          __HAL_RCC_AFIO_FORCE_RESET\r\n#define __AFIO_RELEASE_RESET        __HAL_RCC_AFIO_RELEASE_RESET\r\n#define __AHB_FORCE_RESET           __HAL_RCC_AHB_FORCE_RESET\r\n#define __AHB_RELEASE_RESET         __HAL_RCC_AHB_RELEASE_RESET\r\n#define __AHB1_FORCE_RESET          __HAL_RCC_AHB1_FORCE_RESET\r\n#define __AHB1_RELEASE_RESET        __HAL_RCC_AHB1_RELEASE_RESET\r\n#define __AHB2_FORCE_RESET          __HAL_RCC_AHB2_FORCE_RESET\r\n#define __AHB2_RELEASE_RESET        __HAL_RCC_AHB2_RELEASE_RESET\r\n#define __AHB3_FORCE_RESET          __HAL_RCC_AHB3_FORCE_RESET\r\n#define __AHB3_RELEASE_RESET        __HAL_RCC_AHB3_RELEASE_RESET\r\n#define __APB1_FORCE_RESET          __HAL_RCC_APB1_FORCE_RESET\r\n#define __APB1_RELEASE_RESET        __HAL_RCC_APB1_RELEASE_RESET\r\n#define __APB2_FORCE_RESET          __HAL_RCC_APB2_FORCE_RESET\r\n#define __APB2_RELEASE_RESET        __HAL_RCC_APB2_RELEASE_RESET\r\n#define __BKP_CLK_DISABLE           __HAL_RCC_BKP_CLK_DISABLE\r\n#define __BKP_CLK_ENABLE            __HAL_RCC_BKP_CLK_ENABLE\r\n#define __BKP_FORCE_RESET           __HAL_RCC_BKP_FORCE_RESET\r\n#define __BKP_RELEASE_RESET         __HAL_RCC_BKP_RELEASE_RESET\r\n#define __CAN1_CLK_DISABLE          __HAL_RCC_CAN1_CLK_DISABLE\r\n#define __CAN1_CLK_ENABLE           __HAL_RCC_CAN1_CLK_ENABLE\r\n#define __CAN1_CLK_SLEEP_DISABLE    __HAL_RCC_CAN1_CLK_SLEEP_DISABLE\r\n#define __CAN1_CLK_SLEEP_ENABLE     __HAL_RCC_CAN1_CLK_SLEEP_ENABLE\r\n#define __CAN1_FORCE_RESET          __HAL_RCC_CAN1_FORCE_RESET\r\n#define __CAN1_RELEASE_RESET        __HAL_RCC_CAN1_RELEASE_RESET\r\n#define __CAN_CLK_DISABLE           __HAL_RCC_CAN1_CLK_DISABLE\r\n#define __CAN_CLK_ENABLE            __HAL_RCC_CAN1_CLK_ENABLE\r\n#define __CAN_FORCE_RESET           __HAL_RCC_CAN1_FORCE_RESET\r\n#define __CAN_RELEASE_RESET         __HAL_RCC_CAN1_RELEASE_RESET\r\n#define __CAN2_CLK_DISABLE          __HAL_RCC_CAN2_CLK_DISABLE\r\n#define __CAN2_CLK_ENABLE           __HAL_RCC_CAN2_CLK_ENABLE\r\n#define __CAN2_FORCE_RESET          __HAL_RCC_CAN2_FORCE_RESET\r\n#define __CAN2_RELEASE_RESET        __HAL_RCC_CAN2_RELEASE_RESET\r\n#define __CEC_CLK_DISABLE           __HAL_RCC_CEC_CLK_DISABLE\r\n#define __CEC_CLK_ENABLE            __HAL_RCC_CEC_CLK_ENABLE\r\n#define __COMP_CLK_DISABLE          __HAL_RCC_COMP_CLK_DISABLE\r\n#define __COMP_CLK_ENABLE           __HAL_RCC_COMP_CLK_ENABLE\r\n#define __COMP_FORCE_RESET          __HAL_RCC_COMP_FORCE_RESET\r\n#define __COMP_RELEASE_RESET        __HAL_RCC_COMP_RELEASE_RESET\r\n#define __COMP_CLK_SLEEP_ENABLE     __HAL_RCC_COMP_CLK_SLEEP_ENABLE\r\n#define __COMP_CLK_SLEEP_DISABLE    __HAL_RCC_COMP_CLK_SLEEP_DISABLE\r\n#define __CEC_FORCE_RESET           __HAL_RCC_CEC_FORCE_RESET\r\n#define __CEC_RELEASE_RESET         __HAL_RCC_CEC_RELEASE_RESET\r\n#define __CRC_CLK_DISABLE           __HAL_RCC_CRC_CLK_DISABLE\r\n#define __CRC_CLK_ENABLE            __HAL_RCC_CRC_CLK_ENABLE\r\n#define __CRC_CLK_SLEEP_DISABLE     __HAL_RCC_CRC_CLK_SLEEP_DISABLE\r\n#define __CRC_CLK_SLEEP_ENABLE      __HAL_RCC_CRC_CLK_SLEEP_ENABLE\r\n#define __CRC_FORCE_RESET           __HAL_RCC_CRC_FORCE_RESET\r\n#define __CRC_RELEASE_RESET         __HAL_RCC_CRC_RELEASE_RESET\r\n#define __DAC_CLK_DISABLE           __HAL_RCC_DAC_CLK_DISABLE\r\n#define __DAC_CLK_ENABLE            __HAL_RCC_DAC_CLK_ENABLE\r\n#define __DAC_FORCE_RESET           __HAL_RCC_DAC_FORCE_RESET\r\n#define __DAC_RELEASE_RESET         __HAL_RCC_DAC_RELEASE_RESET\r\n#define __DAC1_CLK_DISABLE          __HAL_RCC_DAC1_CLK_DISABLE\r\n#define __DAC1_CLK_ENABLE           __HAL_RCC_DAC1_CLK_ENABLE\r\n#define __DAC1_CLK_SLEEP_DISABLE    __HAL_RCC_DAC1_CLK_SLEEP_DISABLE\r\n#define __DAC1_CLK_SLEEP_ENABLE     __HAL_RCC_DAC1_CLK_SLEEP_ENABLE\r\n#define __DAC1_FORCE_RESET          __HAL_RCC_DAC1_FORCE_RESET\r\n#define __DAC1_RELEASE_RESET        __HAL_RCC_DAC1_RELEASE_RESET\r\n#define __DBGMCU_CLK_ENABLE         __HAL_RCC_DBGMCU_CLK_ENABLE\r\n#define __DBGMCU_CLK_DISABLE        __HAL_RCC_DBGMCU_CLK_DISABLE\r\n#define __DBGMCU_FORCE_RESET        __HAL_RCC_DBGMCU_FORCE_RESET\r\n#define __DBGMCU_RELEASE_RESET      __HAL_RCC_DBGMCU_RELEASE_RESET\r\n#define __DFSDM_CLK_DISABLE         __HAL_RCC_DFSDM_CLK_DISABLE\r\n#define __DFSDM_CLK_ENABLE          __HAL_RCC_DFSDM_CLK_ENABLE\r\n#define __DFSDM_CLK_SLEEP_DISABLE   __HAL_RCC_DFSDM_CLK_SLEEP_DISABLE\r\n#define __DFSDM_CLK_SLEEP_ENABLE    __HAL_RCC_DFSDM_CLK_SLEEP_ENABLE\r\n#define __DFSDM_FORCE_RESET         __HAL_RCC_DFSDM_FORCE_RESET\r\n#define __DFSDM_RELEASE_RESET       __HAL_RCC_DFSDM_RELEASE_RESET\r\n#define __DMA1_CLK_DISABLE          __HAL_RCC_DMA1_CLK_DISABLE\r\n#define __DMA1_CLK_ENABLE           __HAL_RCC_DMA1_CLK_ENABLE\r\n#define __DMA1_CLK_SLEEP_DISABLE    __HAL_RCC_DMA1_CLK_SLEEP_DISABLE\r\n#define __DMA1_CLK_SLEEP_ENABLE     __HAL_RCC_DMA1_CLK_SLEEP_ENABLE\r\n#define __DMA1_FORCE_RESET          __HAL_RCC_DMA1_FORCE_RESET\r\n#define __DMA1_RELEASE_RESET        __HAL_RCC_DMA1_RELEASE_RESET\r\n#define __DMA2_CLK_DISABLE          __HAL_RCC_DMA2_CLK_DISABLE\r\n#define __DMA2_CLK_ENABLE           __HAL_RCC_DMA2_CLK_ENABLE\r\n#define __DMA2_CLK_SLEEP_DISABLE    __HAL_RCC_DMA2_CLK_SLEEP_DISABLE\r\n#define __DMA2_CLK_SLEEP_ENABLE     __HAL_RCC_DMA2_CLK_SLEEP_ENABLE\r\n#define __DMA2_FORCE_RESET          __HAL_RCC_DMA2_FORCE_RESET\r\n#define __DMA2_RELEASE_RESET        __HAL_RCC_DMA2_RELEASE_RESET\r\n#define __ETHMAC_CLK_DISABLE        __HAL_RCC_ETHMAC_CLK_DISABLE\r\n#define __ETHMAC_CLK_ENABLE         __HAL_RCC_ETHMAC_CLK_ENABLE\r\n#define __ETHMAC_FORCE_RESET        __HAL_RCC_ETHMAC_FORCE_RESET\r\n#define __ETHMAC_RELEASE_RESET      __HAL_RCC_ETHMAC_RELEASE_RESET\r\n#define __ETHMACRX_CLK_DISABLE      __HAL_RCC_ETHMACRX_CLK_DISABLE\r\n#define __ETHMACRX_CLK_ENABLE       __HAL_RCC_ETHMACRX_CLK_ENABLE\r\n#define __ETHMACTX_CLK_DISABLE      __HAL_RCC_ETHMACTX_CLK_DISABLE\r\n#define __ETHMACTX_CLK_ENABLE       __HAL_RCC_ETHMACTX_CLK_ENABLE\r\n#define __FIREWALL_CLK_DISABLE      __HAL_RCC_FIREWALL_CLK_DISABLE\r\n#define __FIREWALL_CLK_ENABLE       __HAL_RCC_FIREWALL_CLK_ENABLE\r\n#define __FLASH_CLK_DISABLE         __HAL_RCC_FLASH_CLK_DISABLE\r\n#define __FLASH_CLK_ENABLE          __HAL_RCC_FLASH_CLK_ENABLE\r\n#define __FLASH_CLK_SLEEP_DISABLE   __HAL_RCC_FLASH_CLK_SLEEP_DISABLE\r\n#define __FLASH_CLK_SLEEP_ENABLE    __HAL_RCC_FLASH_CLK_SLEEP_ENABLE\r\n#define __FLASH_FORCE_RESET         __HAL_RCC_FLASH_FORCE_RESET\r\n#define __FLASH_RELEASE_RESET       __HAL_RCC_FLASH_RELEASE_RESET\r\n#define __FLITF_CLK_DISABLE         __HAL_RCC_FLITF_CLK_DISABLE\r\n#define __FLITF_CLK_ENABLE          __HAL_RCC_FLITF_CLK_ENABLE\r\n#define __FLITF_FORCE_RESET         __HAL_RCC_FLITF_FORCE_RESET\r\n#define __FLITF_RELEASE_RESET       __HAL_RCC_FLITF_RELEASE_RESET\r\n#define __FLITF_CLK_SLEEP_ENABLE    __HAL_RCC_FLITF_CLK_SLEEP_ENABLE\r\n#define __FLITF_CLK_SLEEP_DISABLE   __HAL_RCC_FLITF_CLK_SLEEP_DISABLE\r\n#define __FMC_CLK_DISABLE           __HAL_RCC_FMC_CLK_DISABLE\r\n#define __FMC_CLK_ENABLE            __HAL_RCC_FMC_CLK_ENABLE\r\n#define __FMC_CLK_SLEEP_DISABLE     __HAL_RCC_FMC_CLK_SLEEP_DISABLE\r\n#define __FMC_CLK_SLEEP_ENABLE      __HAL_RCC_FMC_CLK_SLEEP_ENABLE\r\n#define __FMC_FORCE_RESET           __HAL_RCC_FMC_FORCE_RESET\r\n#define __FMC_RELEASE_RESET         __HAL_RCC_FMC_RELEASE_RESET\r\n#define __FSMC_CLK_DISABLE          __HAL_RCC_FSMC_CLK_DISABLE\r\n#define __FSMC_CLK_ENABLE           __HAL_RCC_FSMC_CLK_ENABLE\r\n#define __GPIOA_CLK_DISABLE         __HAL_RCC_GPIOA_CLK_DISABLE\r\n#define __GPIOA_CLK_ENABLE          __HAL_RCC_GPIOA_CLK_ENABLE\r\n#define __GPIOA_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOA_CLK_SLEEP_DISABLE\r\n#define __GPIOA_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOA_CLK_SLEEP_ENABLE\r\n#define __GPIOA_FORCE_RESET         __HAL_RCC_GPIOA_FORCE_RESET\r\n#define __GPIOA_RELEASE_RESET       __HAL_RCC_GPIOA_RELEASE_RESET\r\n#define __GPIOB_CLK_DISABLE         __HAL_RCC_GPIOB_CLK_DISABLE\r\n#define __GPIOB_CLK_ENABLE          __HAL_RCC_GPIOB_CLK_ENABLE\r\n#define __GPIOB_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOB_CLK_SLEEP_DISABLE\r\n#define __GPIOB_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOB_CLK_SLEEP_ENABLE\r\n#define __GPIOB_FORCE_RESET         __HAL_RCC_GPIOB_FORCE_RESET\r\n#define __GPIOB_RELEASE_RESET       __HAL_RCC_GPIOB_RELEASE_RESET\r\n#define __GPIOC_CLK_DISABLE         __HAL_RCC_GPIOC_CLK_DISABLE\r\n#define __GPIOC_CLK_ENABLE          __HAL_RCC_GPIOC_CLK_ENABLE\r\n#define __GPIOC_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOC_CLK_SLEEP_DISABLE\r\n#define __GPIOC_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOC_CLK_SLEEP_ENABLE\r\n#define __GPIOC_FORCE_RESET         __HAL_RCC_GPIOC_FORCE_RESET\r\n#define __GPIOC_RELEASE_RESET       __HAL_RCC_GPIOC_RELEASE_RESET\r\n#define __GPIOD_CLK_DISABLE         __HAL_RCC_GPIOD_CLK_DISABLE\r\n#define __GPIOD_CLK_ENABLE          __HAL_RCC_GPIOD_CLK_ENABLE\r\n#define __GPIOD_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE\r\n#define __GPIOD_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE\r\n#define __GPIOD_FORCE_RESET         __HAL_RCC_GPIOD_FORCE_RESET\r\n#define __GPIOD_RELEASE_RESET       __HAL_RCC_GPIOD_RELEASE_RESET\r\n#define __GPIOE_CLK_DISABLE         __HAL_RCC_GPIOE_CLK_DISABLE\r\n#define __GPIOE_CLK_ENABLE          __HAL_RCC_GPIOE_CLK_ENABLE\r\n#define __GPIOE_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE\r\n#define __GPIOE_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE\r\n#define __GPIOE_FORCE_RESET         __HAL_RCC_GPIOE_FORCE_RESET\r\n#define __GPIOE_RELEASE_RESET       __HAL_RCC_GPIOE_RELEASE_RESET\r\n#define __GPIOF_CLK_DISABLE         __HAL_RCC_GPIOF_CLK_DISABLE\r\n#define __GPIOF_CLK_ENABLE          __HAL_RCC_GPIOF_CLK_ENABLE\r\n#define __GPIOF_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE\r\n#define __GPIOF_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE\r\n#define __GPIOF_FORCE_RESET         __HAL_RCC_GPIOF_FORCE_RESET\r\n#define __GPIOF_RELEASE_RESET       __HAL_RCC_GPIOF_RELEASE_RESET\r\n#define __GPIOG_CLK_DISABLE         __HAL_RCC_GPIOG_CLK_DISABLE\r\n#define __GPIOG_CLK_ENABLE          __HAL_RCC_GPIOG_CLK_ENABLE\r\n#define __GPIOG_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE\r\n#define __GPIOG_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE\r\n#define __GPIOG_FORCE_RESET         __HAL_RCC_GPIOG_FORCE_RESET\r\n#define __GPIOG_RELEASE_RESET       __HAL_RCC_GPIOG_RELEASE_RESET\r\n#define __GPIOH_CLK_DISABLE         __HAL_RCC_GPIOH_CLK_DISABLE\r\n#define __GPIOH_CLK_ENABLE          __HAL_RCC_GPIOH_CLK_ENABLE\r\n#define __GPIOH_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOH_CLK_SLEEP_DISABLE\r\n#define __GPIOH_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOH_CLK_SLEEP_ENABLE\r\n#define __GPIOH_FORCE_RESET         __HAL_RCC_GPIOH_FORCE_RESET\r\n#define __GPIOH_RELEASE_RESET       __HAL_RCC_GPIOH_RELEASE_RESET\r\n#define __I2C1_CLK_DISABLE          __HAL_RCC_I2C1_CLK_DISABLE\r\n#define __I2C1_CLK_ENABLE           __HAL_RCC_I2C1_CLK_ENABLE\r\n#define __I2C1_CLK_SLEEP_DISABLE    __HAL_RCC_I2C1_CLK_SLEEP_DISABLE\r\n#define __I2C1_CLK_SLEEP_ENABLE     __HAL_RCC_I2C1_CLK_SLEEP_ENABLE\r\n#define __I2C1_FORCE_RESET          __HAL_RCC_I2C1_FORCE_RESET\r\n#define __I2C1_RELEASE_RESET        __HAL_RCC_I2C1_RELEASE_RESET\r\n#define __I2C2_CLK_DISABLE          __HAL_RCC_I2C2_CLK_DISABLE\r\n#define __I2C2_CLK_ENABLE           __HAL_RCC_I2C2_CLK_ENABLE\r\n#define __I2C2_CLK_SLEEP_DISABLE    __HAL_RCC_I2C2_CLK_SLEEP_DISABLE\r\n#define __I2C2_CLK_SLEEP_ENABLE     __HAL_RCC_I2C2_CLK_SLEEP_ENABLE\r\n#define __I2C2_FORCE_RESET          __HAL_RCC_I2C2_FORCE_RESET\r\n#define __I2C2_RELEASE_RESET        __HAL_RCC_I2C2_RELEASE_RESET\r\n#define __I2C3_CLK_DISABLE          __HAL_RCC_I2C3_CLK_DISABLE\r\n#define __I2C3_CLK_ENABLE           __HAL_RCC_I2C3_CLK_ENABLE\r\n#define __I2C3_CLK_SLEEP_DISABLE    __HAL_RCC_I2C3_CLK_SLEEP_DISABLE\r\n#define __I2C3_CLK_SLEEP_ENABLE     __HAL_RCC_I2C3_CLK_SLEEP_ENABLE\r\n#define __I2C3_FORCE_RESET          __HAL_RCC_I2C3_FORCE_RESET\r\n#define __I2C3_RELEASE_RESET        __HAL_RCC_I2C3_RELEASE_RESET\r\n#define __LCD_CLK_DISABLE           __HAL_RCC_LCD_CLK_DISABLE\r\n#define __LCD_CLK_ENABLE            __HAL_RCC_LCD_CLK_ENABLE\r\n#define __LCD_CLK_SLEEP_DISABLE     __HAL_RCC_LCD_CLK_SLEEP_DISABLE\r\n#define __LCD_CLK_SLEEP_ENABLE      __HAL_RCC_LCD_CLK_SLEEP_ENABLE\r\n#define __LCD_FORCE_RESET           __HAL_RCC_LCD_FORCE_RESET\r\n#define __LCD_RELEASE_RESET         __HAL_RCC_LCD_RELEASE_RESET\r\n#define __LPTIM1_CLK_DISABLE        __HAL_RCC_LPTIM1_CLK_DISABLE\r\n#define __LPTIM1_CLK_ENABLE         __HAL_RCC_LPTIM1_CLK_ENABLE\r\n#define __LPTIM1_CLK_SLEEP_DISABLE  __HAL_RCC_LPTIM1_CLK_SLEEP_DISABLE\r\n#define __LPTIM1_CLK_SLEEP_ENABLE   __HAL_RCC_LPTIM1_CLK_SLEEP_ENABLE\r\n#define __LPTIM1_FORCE_RESET        __HAL_RCC_LPTIM1_FORCE_RESET\r\n#define __LPTIM1_RELEASE_RESET      __HAL_RCC_LPTIM1_RELEASE_RESET\r\n#define __LPTIM2_CLK_DISABLE        __HAL_RCC_LPTIM2_CLK_DISABLE\r\n#define __LPTIM2_CLK_ENABLE         __HAL_RCC_LPTIM2_CLK_ENABLE\r\n#define __LPTIM2_CLK_SLEEP_DISABLE  __HAL_RCC_LPTIM2_CLK_SLEEP_DISABLE\r\n#define __LPTIM2_CLK_SLEEP_ENABLE   __HAL_RCC_LPTIM2_CLK_SLEEP_ENABLE\r\n#define __LPTIM2_FORCE_RESET        __HAL_RCC_LPTIM2_FORCE_RESET\r\n#define __LPTIM2_RELEASE_RESET      __HAL_RCC_LPTIM2_RELEASE_RESET\r\n#define __LPUART1_CLK_DISABLE       __HAL_RCC_LPUART1_CLK_DISABLE\r\n#define __LPUART1_CLK_ENABLE        __HAL_RCC_LPUART1_CLK_ENABLE\r\n#define __LPUART1_CLK_SLEEP_DISABLE __HAL_RCC_LPUART1_CLK_SLEEP_DISABLE\r\n#define __LPUART1_CLK_SLEEP_ENABLE  __HAL_RCC_LPUART1_CLK_SLEEP_ENABLE\r\n#define __LPUART1_FORCE_RESET       __HAL_RCC_LPUART1_FORCE_RESET\r\n#define __LPUART1_RELEASE_RESET     __HAL_RCC_LPUART1_RELEASE_RESET\r\n#define __OPAMP_CLK_DISABLE         __HAL_RCC_OPAMP_CLK_DISABLE\r\n#define __OPAMP_CLK_ENABLE          __HAL_RCC_OPAMP_CLK_ENABLE\r\n#define __OPAMP_CLK_SLEEP_DISABLE   __HAL_RCC_OPAMP_CLK_SLEEP_DISABLE\r\n#define __OPAMP_CLK_SLEEP_ENABLE    __HAL_RCC_OPAMP_CLK_SLEEP_ENABLE\r\n#define __OPAMP_FORCE_RESET         __HAL_RCC_OPAMP_FORCE_RESET\r\n#define __OPAMP_RELEASE_RESET       __HAL_RCC_OPAMP_RELEASE_RESET\r\n#define __OTGFS_CLK_DISABLE         __HAL_RCC_OTGFS_CLK_DISABLE\r\n#define __OTGFS_CLK_ENABLE          __HAL_RCC_OTGFS_CLK_ENABLE\r\n#define __OTGFS_CLK_SLEEP_DISABLE   __HAL_RCC_OTGFS_CLK_SLEEP_DISABLE\r\n#define __OTGFS_CLK_SLEEP_ENABLE    __HAL_RCC_OTGFS_CLK_SLEEP_ENABLE\r\n#define __OTGFS_FORCE_RESET         __HAL_RCC_OTGFS_FORCE_RESET\r\n#define __OTGFS_RELEASE_RESET       __HAL_RCC_OTGFS_RELEASE_RESET\r\n#define __PWR_CLK_DISABLE           __HAL_RCC_PWR_CLK_DISABLE\r\n#define __PWR_CLK_ENABLE            __HAL_RCC_PWR_CLK_ENABLE\r\n#define __PWR_CLK_SLEEP_DISABLE     __HAL_RCC_PWR_CLK_SLEEP_DISABLE\r\n#define __PWR_CLK_SLEEP_ENABLE      __HAL_RCC_PWR_CLK_SLEEP_ENABLE\r\n#define __PWR_FORCE_RESET           __HAL_RCC_PWR_FORCE_RESET\r\n#define __PWR_RELEASE_RESET         __HAL_RCC_PWR_RELEASE_RESET\r\n#define __QSPI_CLK_DISABLE          __HAL_RCC_QSPI_CLK_DISABLE\r\n#define __QSPI_CLK_ENABLE           __HAL_RCC_QSPI_CLK_ENABLE\r\n#define __QSPI_CLK_SLEEP_DISABLE    __HAL_RCC_QSPI_CLK_SLEEP_DISABLE\r\n#define __QSPI_CLK_SLEEP_ENABLE     __HAL_RCC_QSPI_CLK_SLEEP_ENABLE\r\n#define __QSPI_FORCE_RESET          __HAL_RCC_QSPI_FORCE_RESET\r\n#define __QSPI_RELEASE_RESET        __HAL_RCC_QSPI_RELEASE_RESET\r\n#define __RNG_CLK_DISABLE           __HAL_RCC_RNG_CLK_DISABLE\r\n#define __RNG_CLK_ENABLE            __HAL_RCC_RNG_CLK_ENABLE\r\n#define __RNG_CLK_SLEEP_DISABLE     __HAL_RCC_RNG_CLK_SLEEP_DISABLE\r\n#define __RNG_CLK_SLEEP_ENABLE      __HAL_RCC_RNG_CLK_SLEEP_ENABLE\r\n#define __RNG_FORCE_RESET           __HAL_RCC_RNG_FORCE_RESET\r\n#define __RNG_RELEASE_RESET         __HAL_RCC_RNG_RELEASE_RESET\r\n#define __SAI1_CLK_DISABLE          __HAL_RCC_SAI1_CLK_DISABLE\r\n#define __SAI1_CLK_ENABLE           __HAL_RCC_SAI1_CLK_ENABLE\r\n#define __SAI1_CLK_SLEEP_DISABLE    __HAL_RCC_SAI1_CLK_SLEEP_DISABLE\r\n#define __SAI1_CLK_SLEEP_ENABLE     __HAL_RCC_SAI1_CLK_SLEEP_ENABLE\r\n#define __SAI1_FORCE_RESET          __HAL_RCC_SAI1_FORCE_RESET\r\n#define __SAI1_RELEASE_RESET        __HAL_RCC_SAI1_RELEASE_RESET\r\n#define __SAI2_CLK_DISABLE          __HAL_RCC_SAI2_CLK_DISABLE\r\n#define __SAI2_CLK_ENABLE           __HAL_RCC_SAI2_CLK_ENABLE\r\n#define __SAI2_CLK_SLEEP_DISABLE    __HAL_RCC_SAI2_CLK_SLEEP_DISABLE\r\n#define __SAI2_CLK_SLEEP_ENABLE     __HAL_RCC_SAI2_CLK_SLEEP_ENABLE\r\n#define __SAI2_FORCE_RESET          __HAL_RCC_SAI2_FORCE_RESET\r\n#define __SAI2_RELEASE_RESET        __HAL_RCC_SAI2_RELEASE_RESET\r\n#define __SDIO_CLK_DISABLE          __HAL_RCC_SDIO_CLK_DISABLE\r\n#define __SDIO_CLK_ENABLE           __HAL_RCC_SDIO_CLK_ENABLE\r\n#define __SDMMC_CLK_DISABLE         __HAL_RCC_SDMMC_CLK_DISABLE\r\n#define __SDMMC_CLK_ENABLE          __HAL_RCC_SDMMC_CLK_ENABLE\r\n#define __SDMMC_CLK_SLEEP_DISABLE   __HAL_RCC_SDMMC_CLK_SLEEP_DISABLE\r\n#define __SDMMC_CLK_SLEEP_ENABLE    __HAL_RCC_SDMMC_CLK_SLEEP_ENABLE\r\n#define __SDMMC_FORCE_RESET         __HAL_RCC_SDMMC_FORCE_RESET\r\n#define __SDMMC_RELEASE_RESET       __HAL_RCC_SDMMC_RELEASE_RESET\r\n#define __SPI1_CLK_DISABLE          __HAL_RCC_SPI1_CLK_DISABLE\r\n#define __SPI1_CLK_ENABLE           __HAL_RCC_SPI1_CLK_ENABLE\r\n#define __SPI1_CLK_SLEEP_DISABLE    __HAL_RCC_SPI1_CLK_SLEEP_DISABLE\r\n#define __SPI1_CLK_SLEEP_ENABLE     __HAL_RCC_SPI1_CLK_SLEEP_ENABLE\r\n#define __SPI1_FORCE_RESET          __HAL_RCC_SPI1_FORCE_RESET\r\n#define __SPI1_RELEASE_RESET        __HAL_RCC_SPI1_RELEASE_RESET\r\n#define __SPI2_CLK_DISABLE          __HAL_RCC_SPI2_CLK_DISABLE\r\n#define __SPI2_CLK_ENABLE           __HAL_RCC_SPI2_CLK_ENABLE\r\n#define __SPI2_CLK_SLEEP_DISABLE    __HAL_RCC_SPI2_CLK_SLEEP_DISABLE\r\n#define __SPI2_CLK_SLEEP_ENABLE     __HAL_RCC_SPI2_CLK_SLEEP_ENABLE\r\n#define __SPI2_FORCE_RESET          __HAL_RCC_SPI2_FORCE_RESET\r\n#define __SPI2_RELEASE_RESET        __HAL_RCC_SPI2_RELEASE_RESET\r\n#define __SPI3_CLK_DISABLE          __HAL_RCC_SPI3_CLK_DISABLE\r\n#define __SPI3_CLK_ENABLE           __HAL_RCC_SPI3_CLK_ENABLE\r\n#define __SPI3_CLK_SLEEP_DISABLE    __HAL_RCC_SPI3_CLK_SLEEP_DISABLE\r\n#define __SPI3_CLK_SLEEP_ENABLE     __HAL_RCC_SPI3_CLK_SLEEP_ENABLE\r\n#define __SPI3_FORCE_RESET          __HAL_RCC_SPI3_FORCE_RESET\r\n#define __SPI3_RELEASE_RESET        __HAL_RCC_SPI3_RELEASE_RESET\r\n#define __SRAM_CLK_DISABLE          __HAL_RCC_SRAM_CLK_DISABLE\r\n#define __SRAM_CLK_ENABLE           __HAL_RCC_SRAM_CLK_ENABLE\r\n#define __SRAM1_CLK_SLEEP_DISABLE   __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE\r\n#define __SRAM1_CLK_SLEEP_ENABLE    __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE\r\n#define __SRAM2_CLK_SLEEP_DISABLE   __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE\r\n#define __SRAM2_CLK_SLEEP_ENABLE    __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE\r\n#define __SWPMI1_CLK_DISABLE        __HAL_RCC_SWPMI1_CLK_DISABLE\r\n#define __SWPMI1_CLK_ENABLE         __HAL_RCC_SWPMI1_CLK_ENABLE\r\n#define __SWPMI1_CLK_SLEEP_DISABLE  __HAL_RCC_SWPMI1_CLK_SLEEP_DISABLE\r\n#define __SWPMI1_CLK_SLEEP_ENABLE   __HAL_RCC_SWPMI1_CLK_SLEEP_ENABLE\r\n#define __SWPMI1_FORCE_RESET        __HAL_RCC_SWPMI1_FORCE_RESET\r\n#define __SWPMI1_RELEASE_RESET      __HAL_RCC_SWPMI1_RELEASE_RESET\r\n#define __SYSCFG_CLK_DISABLE        __HAL_RCC_SYSCFG_CLK_DISABLE\r\n#define __SYSCFG_CLK_ENABLE         __HAL_RCC_SYSCFG_CLK_ENABLE\r\n#define __SYSCFG_CLK_SLEEP_DISABLE  __HAL_RCC_SYSCFG_CLK_SLEEP_DISABLE\r\n#define __SYSCFG_CLK_SLEEP_ENABLE   __HAL_RCC_SYSCFG_CLK_SLEEP_ENABLE\r\n#define __SYSCFG_FORCE_RESET        __HAL_RCC_SYSCFG_FORCE_RESET\r\n#define __SYSCFG_RELEASE_RESET      __HAL_RCC_SYSCFG_RELEASE_RESET\r\n#define __TIM1_CLK_DISABLE          __HAL_RCC_TIM1_CLK_DISABLE\r\n#define __TIM1_CLK_ENABLE           __HAL_RCC_TIM1_CLK_ENABLE\r\n#define __TIM1_CLK_SLEEP_DISABLE    __HAL_RCC_TIM1_CLK_SLEEP_DISABLE\r\n#define __TIM1_CLK_SLEEP_ENABLE     __HAL_RCC_TIM1_CLK_SLEEP_ENABLE\r\n#define __TIM1_FORCE_RESET          __HAL_RCC_TIM1_FORCE_RESET\r\n#define __TIM1_RELEASE_RESET        __HAL_RCC_TIM1_RELEASE_RESET\r\n#define __TIM10_CLK_DISABLE         __HAL_RCC_TIM10_CLK_DISABLE\r\n#define __TIM10_CLK_ENABLE          __HAL_RCC_TIM10_CLK_ENABLE\r\n#define __TIM10_FORCE_RESET         __HAL_RCC_TIM10_FORCE_RESET\r\n#define __TIM10_RELEASE_RESET       __HAL_RCC_TIM10_RELEASE_RESET\r\n#define __TIM11_CLK_DISABLE         __HAL_RCC_TIM11_CLK_DISABLE\r\n#define __TIM11_CLK_ENABLE          __HAL_RCC_TIM11_CLK_ENABLE\r\n#define __TIM11_FORCE_RESET         __HAL_RCC_TIM11_FORCE_RESET\r\n#define __TIM11_RELEASE_RESET       __HAL_RCC_TIM11_RELEASE_RESET\r\n#define __TIM12_CLK_DISABLE         __HAL_RCC_TIM12_CLK_DISABLE\r\n#define __TIM12_CLK_ENABLE          __HAL_RCC_TIM12_CLK_ENABLE\r\n#define __TIM12_FORCE_RESET         __HAL_RCC_TIM12_FORCE_RESET\r\n#define __TIM12_RELEASE_RESET       __HAL_RCC_TIM12_RELEASE_RESET\r\n#define __TIM13_CLK_DISABLE         __HAL_RCC_TIM13_CLK_DISABLE\r\n#define __TIM13_CLK_ENABLE          __HAL_RCC_TIM13_CLK_ENABLE\r\n#define __TIM13_FORCE_RESET         __HAL_RCC_TIM13_FORCE_RESET\r\n#define __TIM13_RELEASE_RESET       __HAL_RCC_TIM13_RELEASE_RESET\r\n#define __TIM14_CLK_DISABLE         __HAL_RCC_TIM14_CLK_DISABLE\r\n#define __TIM14_CLK_ENABLE          __HAL_RCC_TIM14_CLK_ENABLE\r\n#define __TIM14_FORCE_RESET         __HAL_RCC_TIM14_FORCE_RESET\r\n#define __TIM14_RELEASE_RESET       __HAL_RCC_TIM14_RELEASE_RESET\r\n#define __TIM15_CLK_DISABLE         __HAL_RCC_TIM15_CLK_DISABLE\r\n#define __TIM15_CLK_ENABLE          __HAL_RCC_TIM15_CLK_ENABLE\r\n#define __TIM15_CLK_SLEEP_DISABLE   __HAL_RCC_TIM15_CLK_SLEEP_DISABLE\r\n#define __TIM15_CLK_SLEEP_ENABLE    __HAL_RCC_TIM15_CLK_SLEEP_ENABLE\r\n#define __TIM15_FORCE_RESET         __HAL_RCC_TIM15_FORCE_RESET\r\n#define __TIM15_RELEASE_RESET       __HAL_RCC_TIM15_RELEASE_RESET\r\n#define __TIM16_CLK_DISABLE         __HAL_RCC_TIM16_CLK_DISABLE\r\n#define __TIM16_CLK_ENABLE          __HAL_RCC_TIM16_CLK_ENABLE\r\n#define __TIM16_CLK_SLEEP_DISABLE   __HAL_RCC_TIM16_CLK_SLEEP_DISABLE\r\n#define __TIM16_CLK_SLEEP_ENABLE    __HAL_RCC_TIM16_CLK_SLEEP_ENABLE\r\n#define __TIM16_FORCE_RESET         __HAL_RCC_TIM16_FORCE_RESET\r\n#define __TIM16_RELEASE_RESET       __HAL_RCC_TIM16_RELEASE_RESET\r\n#define __TIM17_CLK_DISABLE         __HAL_RCC_TIM17_CLK_DISABLE\r\n#define __TIM17_CLK_ENABLE          __HAL_RCC_TIM17_CLK_ENABLE\r\n#define __TIM17_CLK_SLEEP_DISABLE   __HAL_RCC_TIM17_CLK_SLEEP_DISABLE\r\n#define __TIM17_CLK_SLEEP_ENABLE    __HAL_RCC_TIM17_CLK_SLEEP_ENABLE\r\n#define __TIM17_FORCE_RESET         __HAL_RCC_TIM17_FORCE_RESET\r\n#define __TIM17_RELEASE_RESET       __HAL_RCC_TIM17_RELEASE_RESET\r\n#define __TIM2_CLK_DISABLE          __HAL_RCC_TIM2_CLK_DISABLE\r\n#define __TIM2_CLK_ENABLE           __HAL_RCC_TIM2_CLK_ENABLE\r\n#define __TIM2_CLK_SLEEP_DISABLE    __HAL_RCC_TIM2_CLK_SLEEP_DISABLE\r\n#define __TIM2_CLK_SLEEP_ENABLE     __HAL_RCC_TIM2_CLK_SLEEP_ENABLE\r\n#define __TIM2_FORCE_RESET          __HAL_RCC_TIM2_FORCE_RESET\r\n#define __TIM2_RELEASE_RESET        __HAL_RCC_TIM2_RELEASE_RESET\r\n#define __TIM3_CLK_DISABLE          __HAL_RCC_TIM3_CLK_DISABLE\r\n#define __TIM3_CLK_ENABLE           __HAL_RCC_TIM3_CLK_ENABLE\r\n#define __TIM3_CLK_SLEEP_DISABLE    __HAL_RCC_TIM3_CLK_SLEEP_DISABLE\r\n#define __TIM3_CLK_SLEEP_ENABLE     __HAL_RCC_TIM3_CLK_SLEEP_ENABLE\r\n#define __TIM3_FORCE_RESET          __HAL_RCC_TIM3_FORCE_RESET\r\n#define __TIM3_RELEASE_RESET        __HAL_RCC_TIM3_RELEASE_RESET\r\n#define __TIM4_CLK_DISABLE          __HAL_RCC_TIM4_CLK_DISABLE\r\n#define __TIM4_CLK_ENABLE           __HAL_RCC_TIM4_CLK_ENABLE\r\n#define __TIM4_CLK_SLEEP_DISABLE    __HAL_RCC_TIM4_CLK_SLEEP_DISABLE\r\n#define __TIM4_CLK_SLEEP_ENABLE     __HAL_RCC_TIM4_CLK_SLEEP_ENABLE\r\n#define __TIM4_FORCE_RESET          __HAL_RCC_TIM4_FORCE_RESET\r\n#define __TIM4_RELEASE_RESET        __HAL_RCC_TIM4_RELEASE_RESET\r\n#define __TIM5_CLK_DISABLE          __HAL_RCC_TIM5_CLK_DISABLE\r\n#define __TIM5_CLK_ENABLE           __HAL_RCC_TIM5_CLK_ENABLE\r\n#define __TIM5_CLK_SLEEP_DISABLE    __HAL_RCC_TIM5_CLK_SLEEP_DISABLE\r\n#define __TIM5_CLK_SLEEP_ENABLE     __HAL_RCC_TIM5_CLK_SLEEP_ENABLE\r\n#define __TIM5_FORCE_RESET          __HAL_RCC_TIM5_FORCE_RESET\r\n#define __TIM5_RELEASE_RESET        __HAL_RCC_TIM5_RELEASE_RESET\r\n#define __TIM6_CLK_DISABLE          __HAL_RCC_TIM6_CLK_DISABLE\r\n#define __TIM6_CLK_ENABLE           __HAL_RCC_TIM6_CLK_ENABLE\r\n#define __TIM6_CLK_SLEEP_DISABLE    __HAL_RCC_TIM6_CLK_SLEEP_DISABLE\r\n#define __TIM6_CLK_SLEEP_ENABLE     __HAL_RCC_TIM6_CLK_SLEEP_ENABLE\r\n#define __TIM6_FORCE_RESET          __HAL_RCC_TIM6_FORCE_RESET\r\n#define __TIM6_RELEASE_RESET        __HAL_RCC_TIM6_RELEASE_RESET\r\n#define __TIM7_CLK_DISABLE          __HAL_RCC_TIM7_CLK_DISABLE\r\n#define __TIM7_CLK_ENABLE           __HAL_RCC_TIM7_CLK_ENABLE\r\n#define __TIM7_CLK_SLEEP_DISABLE    __HAL_RCC_TIM7_CLK_SLEEP_DISABLE\r\n#define __TIM7_CLK_SLEEP_ENABLE     __HAL_RCC_TIM7_CLK_SLEEP_ENABLE\r\n#define __TIM7_FORCE_RESET          __HAL_RCC_TIM7_FORCE_RESET\r\n#define __TIM7_RELEASE_RESET        __HAL_RCC_TIM7_RELEASE_RESET\r\n#define __TIM8_CLK_DISABLE          __HAL_RCC_TIM8_CLK_DISABLE\r\n#define __TIM8_CLK_ENABLE           __HAL_RCC_TIM8_CLK_ENABLE\r\n#define __TIM8_CLK_SLEEP_DISABLE    __HAL_RCC_TIM8_CLK_SLEEP_DISABLE\r\n#define __TIM8_CLK_SLEEP_ENABLE     __HAL_RCC_TIM8_CLK_SLEEP_ENABLE\r\n#define __TIM8_FORCE_RESET          __HAL_RCC_TIM8_FORCE_RESET\r\n#define __TIM8_RELEASE_RESET        __HAL_RCC_TIM8_RELEASE_RESET\r\n#define __TIM9_CLK_DISABLE          __HAL_RCC_TIM9_CLK_DISABLE\r\n#define __TIM9_CLK_ENABLE           __HAL_RCC_TIM9_CLK_ENABLE\r\n#define __TIM9_FORCE_RESET          __HAL_RCC_TIM9_FORCE_RESET\r\n#define __TIM9_RELEASE_RESET        __HAL_RCC_TIM9_RELEASE_RESET\r\n#define __TSC_CLK_DISABLE           __HAL_RCC_TSC_CLK_DISABLE\r\n#define __TSC_CLK_ENABLE            __HAL_RCC_TSC_CLK_ENABLE\r\n#define __TSC_CLK_SLEEP_DISABLE     __HAL_RCC_TSC_CLK_SLEEP_DISABLE\r\n#define __TSC_CLK_SLEEP_ENABLE      __HAL_RCC_TSC_CLK_SLEEP_ENABLE\r\n#define __TSC_FORCE_RESET           __HAL_RCC_TSC_FORCE_RESET\r\n#define __TSC_RELEASE_RESET         __HAL_RCC_TSC_RELEASE_RESET\r\n#define __UART4_CLK_DISABLE         __HAL_RCC_UART4_CLK_DISABLE\r\n#define __UART4_CLK_ENABLE          __HAL_RCC_UART4_CLK_ENABLE\r\n#define __UART4_CLK_SLEEP_DISABLE   __HAL_RCC_UART4_CLK_SLEEP_DISABLE\r\n#define __UART4_CLK_SLEEP_ENABLE    __HAL_RCC_UART4_CLK_SLEEP_ENABLE\r\n#define __UART4_FORCE_RESET         __HAL_RCC_UART4_FORCE_RESET\r\n#define __UART4_RELEASE_RESET       __HAL_RCC_UART4_RELEASE_RESET\r\n#define __UART5_CLK_DISABLE         __HAL_RCC_UART5_CLK_DISABLE\r\n#define __UART5_CLK_ENABLE          __HAL_RCC_UART5_CLK_ENABLE\r\n#define __UART5_CLK_SLEEP_DISABLE   __HAL_RCC_UART5_CLK_SLEEP_DISABLE\r\n#define __UART5_CLK_SLEEP_ENABLE    __HAL_RCC_UART5_CLK_SLEEP_ENABLE\r\n#define __UART5_FORCE_RESET         __HAL_RCC_UART5_FORCE_RESET\r\n#define __UART5_RELEASE_RESET       __HAL_RCC_UART5_RELEASE_RESET\r\n#define __USART1_CLK_DISABLE        __HAL_RCC_USART1_CLK_DISABLE\r\n#define __USART1_CLK_ENABLE         __HAL_RCC_USART1_CLK_ENABLE\r\n#define __USART1_CLK_SLEEP_DISABLE  __HAL_RCC_USART1_CLK_SLEEP_DISABLE\r\n#define __USART1_CLK_SLEEP_ENABLE   __HAL_RCC_USART1_CLK_SLEEP_ENABLE\r\n#define __USART1_FORCE_RESET        __HAL_RCC_USART1_FORCE_RESET\r\n#define __USART1_RELEASE_RESET      __HAL_RCC_USART1_RELEASE_RESET\r\n#define __USART2_CLK_DISABLE        __HAL_RCC_USART2_CLK_DISABLE\r\n#define __USART2_CLK_ENABLE         __HAL_RCC_USART2_CLK_ENABLE\r\n#define __USART2_CLK_SLEEP_DISABLE  __HAL_RCC_USART2_CLK_SLEEP_DISABLE\r\n#define __USART2_CLK_SLEEP_ENABLE   __HAL_RCC_USART2_CLK_SLEEP_ENABLE\r\n#define __USART2_FORCE_RESET        __HAL_RCC_USART2_FORCE_RESET\r\n#define __USART2_RELEASE_RESET      __HAL_RCC_USART2_RELEASE_RESET\r\n#define __USART3_CLK_DISABLE        __HAL_RCC_USART3_CLK_DISABLE\r\n#define __USART3_CLK_ENABLE         __HAL_RCC_USART3_CLK_ENABLE\r\n#define __USART3_CLK_SLEEP_DISABLE  __HAL_RCC_USART3_CLK_SLEEP_DISABLE\r\n#define __USART3_CLK_SLEEP_ENABLE   __HAL_RCC_USART3_CLK_SLEEP_ENABLE\r\n#define __USART3_FORCE_RESET        __HAL_RCC_USART3_FORCE_RESET\r\n#define __USART3_RELEASE_RESET      __HAL_RCC_USART3_RELEASE_RESET\r\n#define __USART4_CLK_DISABLE        __HAL_RCC_UART4_CLK_DISABLE\r\n#define __USART4_CLK_ENABLE         __HAL_RCC_UART4_CLK_ENABLE\r\n#define __USART4_CLK_SLEEP_ENABLE   __HAL_RCC_UART4_CLK_SLEEP_ENABLE\r\n#define __USART4_CLK_SLEEP_DISABLE  __HAL_RCC_UART4_CLK_SLEEP_DISABLE\r\n#define __USART4_FORCE_RESET        __HAL_RCC_UART4_FORCE_RESET\r\n#define __USART4_RELEASE_RESET      __HAL_RCC_UART4_RELEASE_RESET\r\n#define __USART5_CLK_DISABLE        __HAL_RCC_UART5_CLK_DISABLE\r\n#define __USART5_CLK_ENABLE         __HAL_RCC_UART5_CLK_ENABLE\r\n#define __USART5_CLK_SLEEP_ENABLE   __HAL_RCC_UART5_CLK_SLEEP_ENABLE\r\n#define __USART5_CLK_SLEEP_DISABLE  __HAL_RCC_UART5_CLK_SLEEP_DISABLE\r\n#define __USART5_FORCE_RESET        __HAL_RCC_UART5_FORCE_RESET\r\n#define __USART5_RELEASE_RESET      __HAL_RCC_UART5_RELEASE_RESET\r\n#define __USART7_CLK_DISABLE        __HAL_RCC_UART7_CLK_DISABLE\r\n#define __USART7_CLK_ENABLE         __HAL_RCC_UART7_CLK_ENABLE\r\n#define __USART7_FORCE_RESET        __HAL_RCC_UART7_FORCE_RESET\r\n#define __USART7_RELEASE_RESET      __HAL_RCC_UART7_RELEASE_RESET\r\n#define __USART8_CLK_DISABLE        __HAL_RCC_UART8_CLK_DISABLE\r\n#define __USART8_CLK_ENABLE         __HAL_RCC_UART8_CLK_ENABLE\r\n#define __USART8_FORCE_RESET        __HAL_RCC_UART8_FORCE_RESET\r\n#define __USART8_RELEASE_RESET      __HAL_RCC_UART8_RELEASE_RESET\r\n#define __USB_CLK_DISABLE           __HAL_RCC_USB_CLK_DISABLE\r\n#define __USB_CLK_ENABLE            __HAL_RCC_USB_CLK_ENABLE\r\n#define __USB_FORCE_RESET           __HAL_RCC_USB_FORCE_RESET\r\n#define __USB_CLK_SLEEP_ENABLE      __HAL_RCC_USB_CLK_SLEEP_ENABLE\r\n#define __USB_CLK_SLEEP_DISABLE     __HAL_RCC_USB_CLK_SLEEP_DISABLE\r\n#define __USB_OTG_FS_CLK_DISABLE    __HAL_RCC_USB_OTG_FS_CLK_DISABLE\r\n#define __USB_OTG_FS_CLK_ENABLE     __HAL_RCC_USB_OTG_FS_CLK_ENABLE\r\n#define __USB_RELEASE_RESET         __HAL_RCC_USB_RELEASE_RESET\r\n#define __WWDG_CLK_DISABLE          __HAL_RCC_WWDG_CLK_DISABLE\r\n#define __WWDG_CLK_ENABLE           __HAL_RCC_WWDG_CLK_ENABLE\r\n#define __WWDG_CLK_SLEEP_DISABLE    __HAL_RCC_WWDG_CLK_SLEEP_DISABLE\r\n#define __WWDG_CLK_SLEEP_ENABLE     __HAL_RCC_WWDG_CLK_SLEEP_ENABLE\r\n#define __WWDG_FORCE_RESET          __HAL_RCC_WWDG_FORCE_RESET\r\n#define __WWDG_RELEASE_RESET        __HAL_RCC_WWDG_RELEASE_RESET\r\n#define __TIM21_CLK_ENABLE          __HAL_RCC_TIM21_CLK_ENABLE\r\n#define __TIM21_CLK_DISABLE         __HAL_RCC_TIM21_CLK_DISABLE\r\n#define __TIM21_FORCE_RESET         __HAL_RCC_TIM21_FORCE_RESET\r\n#define __TIM21_RELEASE_RESET       __HAL_RCC_TIM21_RELEASE_RESET\r\n#define __TIM21_CLK_SLEEP_ENABLE    __HAL_RCC_TIM21_CLK_SLEEP_ENABLE\r\n#define __TIM21_CLK_SLEEP_DISABLE   __HAL_RCC_TIM21_CLK_SLEEP_DISABLE\r\n#define __TIM22_CLK_ENABLE          __HAL_RCC_TIM22_CLK_ENABLE\r\n#define __TIM22_CLK_DISABLE         __HAL_RCC_TIM22_CLK_DISABLE\r\n#define __TIM22_FORCE_RESET         __HAL_RCC_TIM22_FORCE_RESET\r\n#define __TIM22_RELEASE_RESET       __HAL_RCC_TIM22_RELEASE_RESET\r\n#define __TIM22_CLK_SLEEP_ENABLE    __HAL_RCC_TIM22_CLK_SLEEP_ENABLE\r\n#define __TIM22_CLK_SLEEP_DISABLE   __HAL_RCC_TIM22_CLK_SLEEP_DISABLE\r\n#define __CRS_CLK_DISABLE           __HAL_RCC_CRS_CLK_DISABLE\r\n#define __CRS_CLK_ENABLE            __HAL_RCC_CRS_CLK_ENABLE\r\n#define __CRS_CLK_SLEEP_DISABLE     __HAL_RCC_CRS_CLK_SLEEP_DISABLE\r\n#define __CRS_CLK_SLEEP_ENABLE      __HAL_RCC_CRS_CLK_SLEEP_ENABLE\r\n#define __CRS_FORCE_RESET           __HAL_RCC_CRS_FORCE_RESET\r\n#define __CRS_RELEASE_RESET         __HAL_RCC_CRS_RELEASE_RESET\r\n#define __RCC_BACKUPRESET_FORCE     __HAL_RCC_BACKUPRESET_FORCE\r\n#define __RCC_BACKUPRESET_RELEASE   __HAL_RCC_BACKUPRESET_RELEASE\r\n\r\n#define __USB_OTG_FS_FORCE_RESET                  __HAL_RCC_USB_OTG_FS_FORCE_RESET\r\n#define __USB_OTG_FS_RELEASE_RESET                __HAL_RCC_USB_OTG_FS_RELEASE_RESET\r\n#define __USB_OTG_FS_CLK_SLEEP_ENABLE             __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE\r\n#define __USB_OTG_FS_CLK_SLEEP_DISABLE            __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE\r\n#define __USB_OTG_HS_CLK_DISABLE                  __HAL_RCC_USB_OTG_HS_CLK_DISABLE\r\n#define __USB_OTG_HS_CLK_ENABLE                   __HAL_RCC_USB_OTG_HS_CLK_ENABLE\r\n#define __USB_OTG_HS_ULPI_CLK_ENABLE              __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE\r\n#define __USB_OTG_HS_ULPI_CLK_DISABLE             __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE\r\n#define __TIM9_CLK_SLEEP_ENABLE                   __HAL_RCC_TIM9_CLK_SLEEP_ENABLE\r\n#define __TIM9_CLK_SLEEP_DISABLE                  __HAL_RCC_TIM9_CLK_SLEEP_DISABLE\r\n#define __TIM10_CLK_SLEEP_ENABLE                  __HAL_RCC_TIM10_CLK_SLEEP_ENABLE\r\n#define __TIM10_CLK_SLEEP_DISABLE                 __HAL_RCC_TIM10_CLK_SLEEP_DISABLE\r\n#define __TIM11_CLK_SLEEP_ENABLE                  __HAL_RCC_TIM11_CLK_SLEEP_ENABLE\r\n#define __TIM11_CLK_SLEEP_DISABLE                 __HAL_RCC_TIM11_CLK_SLEEP_DISABLE\r\n#define __ETHMACPTP_CLK_SLEEP_ENABLE              __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE\r\n#define __ETHMACPTP_CLK_SLEEP_DISABLE             __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE\r\n#define __ETHMACPTP_CLK_ENABLE                    __HAL_RCC_ETHMACPTP_CLK_ENABLE\r\n#define __ETHMACPTP_CLK_DISABLE                   __HAL_RCC_ETHMACPTP_CLK_DISABLE\r\n#define __HASH_CLK_ENABLE                         __HAL_RCC_HASH_CLK_ENABLE\r\n#define __HASH_FORCE_RESET                        __HAL_RCC_HASH_FORCE_RESET\r\n#define __HASH_RELEASE_RESET                      __HAL_RCC_HASH_RELEASE_RESET\r\n#define __HASH_CLK_SLEEP_ENABLE                   __HAL_RCC_HASH_CLK_SLEEP_ENABLE\r\n#define __HASH_CLK_SLEEP_DISABLE                  __HAL_RCC_HASH_CLK_SLEEP_DISABLE\r\n#define __HASH_CLK_DISABLE                        __HAL_RCC_HASH_CLK_DISABLE\r\n#define __SPI5_CLK_ENABLE                         __HAL_RCC_SPI5_CLK_ENABLE\r\n#define __SPI5_CLK_DISABLE                        __HAL_RCC_SPI5_CLK_DISABLE\r\n#define __SPI5_FORCE_RESET                        __HAL_RCC_SPI5_FORCE_RESET\r\n#define __SPI5_RELEASE_RESET                      __HAL_RCC_SPI5_RELEASE_RESET\r\n#define __SPI5_CLK_SLEEP_ENABLE                   __HAL_RCC_SPI5_CLK_SLEEP_ENABLE\r\n#define __SPI5_CLK_SLEEP_DISABLE                  __HAL_RCC_SPI5_CLK_SLEEP_DISABLE\r\n#define __SPI6_CLK_ENABLE                         __HAL_RCC_SPI6_CLK_ENABLE\r\n#define __SPI6_CLK_DISABLE                        __HAL_RCC_SPI6_CLK_DISABLE\r\n#define __SPI6_FORCE_RESET                        __HAL_RCC_SPI6_FORCE_RESET\r\n#define __SPI6_RELEASE_RESET                      __HAL_RCC_SPI6_RELEASE_RESET\r\n#define __SPI6_CLK_SLEEP_ENABLE                   __HAL_RCC_SPI6_CLK_SLEEP_ENABLE\r\n#define __SPI6_CLK_SLEEP_DISABLE                  __HAL_RCC_SPI6_CLK_SLEEP_DISABLE\r\n#define __LTDC_CLK_ENABLE                         __HAL_RCC_LTDC_CLK_ENABLE\r\n#define __LTDC_CLK_DISABLE                        __HAL_RCC_LTDC_CLK_DISABLE\r\n#define __LTDC_FORCE_RESET                        __HAL_RCC_LTDC_FORCE_RESET\r\n#define __LTDC_RELEASE_RESET                      __HAL_RCC_LTDC_RELEASE_RESET\r\n#define __LTDC_CLK_SLEEP_ENABLE                   __HAL_RCC_LTDC_CLK_SLEEP_ENABLE\r\n#define __ETHMAC_CLK_SLEEP_ENABLE                 __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE\r\n#define __ETHMAC_CLK_SLEEP_DISABLE                __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE\r\n#define __ETHMACTX_CLK_SLEEP_ENABLE               __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE\r\n#define __ETHMACTX_CLK_SLEEP_DISABLE              __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE\r\n#define __ETHMACRX_CLK_SLEEP_ENABLE               __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE\r\n#define __ETHMACRX_CLK_SLEEP_DISABLE              __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE\r\n#define __TIM12_CLK_SLEEP_ENABLE                  __HAL_RCC_TIM12_CLK_SLEEP_ENABLE\r\n#define __TIM12_CLK_SLEEP_DISABLE                 __HAL_RCC_TIM12_CLK_SLEEP_DISABLE\r\n#define __TIM13_CLK_SLEEP_ENABLE                  __HAL_RCC_TIM13_CLK_SLEEP_ENABLE\r\n#define __TIM13_CLK_SLEEP_DISABLE                 __HAL_RCC_TIM13_CLK_SLEEP_DISABLE\r\n#define __TIM14_CLK_SLEEP_ENABLE                  __HAL_RCC_TIM14_CLK_SLEEP_ENABLE\r\n#define __TIM14_CLK_SLEEP_DISABLE                 __HAL_RCC_TIM14_CLK_SLEEP_DISABLE\r\n#define __BKPSRAM_CLK_ENABLE                      __HAL_RCC_BKPSRAM_CLK_ENABLE\r\n#define __BKPSRAM_CLK_DISABLE                     __HAL_RCC_BKPSRAM_CLK_DISABLE\r\n#define __BKPSRAM_CLK_SLEEP_ENABLE                __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE\r\n#define __BKPSRAM_CLK_SLEEP_DISABLE               __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE\r\n#define __CCMDATARAMEN_CLK_ENABLE                 __HAL_RCC_CCMDATARAMEN_CLK_ENABLE\r\n#define __CCMDATARAMEN_CLK_DISABLE                __HAL_RCC_CCMDATARAMEN_CLK_DISABLE\r\n#define __USART6_CLK_ENABLE                       __HAL_RCC_USART6_CLK_ENABLE\r\n#define __USART6_CLK_DISABLE                      __HAL_RCC_USART6_CLK_DISABLE\r\n#define __USART6_FORCE_RESET                      __HAL_RCC_USART6_FORCE_RESET\r\n#define __USART6_RELEASE_RESET                    __HAL_RCC_USART6_RELEASE_RESET\r\n#define __USART6_CLK_SLEEP_ENABLE                 __HAL_RCC_USART6_CLK_SLEEP_ENABLE\r\n#define __USART6_CLK_SLEEP_DISABLE                __HAL_RCC_USART6_CLK_SLEEP_DISABLE\r\n#define __SPI4_CLK_ENABLE                         __HAL_RCC_SPI4_CLK_ENABLE\r\n#define __SPI4_CLK_DISABLE                        __HAL_RCC_SPI4_CLK_DISABLE\r\n#define __SPI4_FORCE_RESET                        __HAL_RCC_SPI4_FORCE_RESET\r\n#define __SPI4_RELEASE_RESET                      __HAL_RCC_SPI4_RELEASE_RESET\r\n#define __SPI4_CLK_SLEEP_ENABLE                   __HAL_RCC_SPI4_CLK_SLEEP_ENABLE\r\n#define __SPI4_CLK_SLEEP_DISABLE                  __HAL_RCC_SPI4_CLK_SLEEP_DISABLE\r\n#define __GPIOI_CLK_ENABLE                        __HAL_RCC_GPIOI_CLK_ENABLE\r\n#define __GPIOI_CLK_DISABLE                       __HAL_RCC_GPIOI_CLK_DISABLE\r\n#define __GPIOI_FORCE_RESET                       __HAL_RCC_GPIOI_FORCE_RESET\r\n#define __GPIOI_RELEASE_RESET                     __HAL_RCC_GPIOI_RELEASE_RESET\r\n#define __GPIOI_CLK_SLEEP_ENABLE                  __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE\r\n#define __GPIOI_CLK_SLEEP_DISABLE                 __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE\r\n#define __GPIOJ_CLK_ENABLE                        __HAL_RCC_GPIOJ_CLK_ENABLE\r\n#define __GPIOJ_CLK_DISABLE                       __HAL_RCC_GPIOJ_CLK_DISABLE\r\n#define __GPIOJ_FORCE_RESET                       __HAL_RCC_GPIOJ_FORCE_RESET\r\n#define __GPIOJ_RELEASE_RESET                     __HAL_RCC_GPIOJ_RELEASE_RESET\r\n#define __GPIOJ_CLK_SLEEP_ENABLE                  __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE\r\n#define __GPIOJ_CLK_SLEEP_DISABLE                 __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE\r\n#define __GPIOK_CLK_ENABLE                        __HAL_RCC_GPIOK_CLK_ENABLE\r\n#define __GPIOK_CLK_DISABLE                       __HAL_RCC_GPIOK_CLK_DISABLE\r\n#define __GPIOK_RELEASE_RESET                     __HAL_RCC_GPIOK_RELEASE_RESET\r\n#define __GPIOK_CLK_SLEEP_ENABLE                  __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE\r\n#define __GPIOK_CLK_SLEEP_DISABLE                 __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE\r\n#define __ETH_CLK_ENABLE                          __HAL_RCC_ETH_CLK_ENABLE\r\n#define __ETH_CLK_DISABLE                         __HAL_RCC_ETH_CLK_DISABLE\r\n#define __DCMI_CLK_ENABLE                         __HAL_RCC_DCMI_CLK_ENABLE\r\n#define __DCMI_CLK_DISABLE                        __HAL_RCC_DCMI_CLK_DISABLE\r\n#define __DCMI_FORCE_RESET                        __HAL_RCC_DCMI_FORCE_RESET\r\n#define __DCMI_RELEASE_RESET                      __HAL_RCC_DCMI_RELEASE_RESET\r\n#define __DCMI_CLK_SLEEP_ENABLE                   __HAL_RCC_DCMI_CLK_SLEEP_ENABLE\r\n#define __DCMI_CLK_SLEEP_DISABLE                  __HAL_RCC_DCMI_CLK_SLEEP_DISABLE\r\n#define __UART7_CLK_ENABLE                        __HAL_RCC_UART7_CLK_ENABLE\r\n#define __UART7_CLK_DISABLE                       __HAL_RCC_UART7_CLK_DISABLE\r\n#define __UART7_RELEASE_RESET                     __HAL_RCC_UART7_RELEASE_RESET\r\n#define __UART7_FORCE_RESET                       __HAL_RCC_UART7_FORCE_RESET\r\n#define __UART7_CLK_SLEEP_ENABLE                  __HAL_RCC_UART7_CLK_SLEEP_ENABLE\r\n#define __UART7_CLK_SLEEP_DISABLE                 __HAL_RCC_UART7_CLK_SLEEP_DISABLE\r\n#define __UART8_CLK_ENABLE                        __HAL_RCC_UART8_CLK_ENABLE\r\n#define __UART8_CLK_DISABLE                       __HAL_RCC_UART8_CLK_DISABLE\r\n#define __UART8_FORCE_RESET                       __HAL_RCC_UART8_FORCE_RESET\r\n#define __UART8_RELEASE_RESET                     __HAL_RCC_UART8_RELEASE_RESET\r\n#define __UART8_CLK_SLEEP_ENABLE                  __HAL_RCC_UART8_CLK_SLEEP_ENABLE\r\n#define __UART8_CLK_SLEEP_DISABLE                 __HAL_RCC_UART8_CLK_SLEEP_DISABLE\r\n#define __OTGHS_CLK_SLEEP_ENABLE                  __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE\r\n#define __OTGHS_CLK_SLEEP_DISABLE                 __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE\r\n#define __OTGHS_FORCE_RESET                       __HAL_RCC_USB_OTG_HS_FORCE_RESET\r\n#define __OTGHS_RELEASE_RESET                     __HAL_RCC_USB_OTG_HS_RELEASE_RESET\r\n#define __OTGHSULPI_CLK_SLEEP_ENABLE              __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE\r\n#define __OTGHSULPI_CLK_SLEEP_DISABLE             __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE          __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_OTGHS_CLK_SLEEP_DISABLE         __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED      __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED\r\n#define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED     __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED\r\n#define __HAL_RCC_OTGHS_FORCE_RESET               __HAL_RCC_USB_OTG_HS_FORCE_RESET\r\n#define __HAL_RCC_OTGHS_RELEASE_RESET             __HAL_RCC_USB_OTG_HS_RELEASE_RESET\r\n#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE      __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE     __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED  __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED\r\n#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED\r\n#define __CRYP_FORCE_RESET                        __HAL_RCC_CRYP_FORCE_RESET\r\n#define __SRAM3_CLK_SLEEP_ENABLE                  __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE\r\n#define __CAN2_CLK_SLEEP_ENABLE                   __HAL_RCC_CAN2_CLK_SLEEP_ENABLE\r\n#define __CAN2_CLK_SLEEP_DISABLE                  __HAL_RCC_CAN2_CLK_SLEEP_DISABLE\r\n#define __DAC_CLK_SLEEP_ENABLE                    __HAL_RCC_DAC_CLK_SLEEP_ENABLE\r\n#define __DAC_CLK_SLEEP_DISABLE                   __HAL_RCC_DAC_CLK_SLEEP_DISABLE\r\n#define __ADC2_CLK_SLEEP_ENABLE                   __HAL_RCC_ADC2_CLK_SLEEP_ENABLE\r\n#define __ADC2_CLK_SLEEP_DISABLE                  __HAL_RCC_ADC2_CLK_SLEEP_DISABLE\r\n#define __ADC3_CLK_SLEEP_ENABLE                   __HAL_RCC_ADC3_CLK_SLEEP_ENABLE\r\n#define __ADC3_CLK_SLEEP_DISABLE                  __HAL_RCC_ADC3_CLK_SLEEP_DISABLE\r\n#define __FSMC_FORCE_RESET                        __HAL_RCC_FSMC_FORCE_RESET\r\n#define __FSMC_RELEASE_RESET                      __HAL_RCC_FSMC_RELEASE_RESET\r\n#define __FSMC_CLK_SLEEP_ENABLE                   __HAL_RCC_FSMC_CLK_SLEEP_ENABLE\r\n#define __FSMC_CLK_SLEEP_DISABLE                  __HAL_RCC_FSMC_CLK_SLEEP_DISABLE\r\n#define __SDIO_FORCE_RESET                        __HAL_RCC_SDIO_FORCE_RESET\r\n#define __SDIO_RELEASE_RESET                      __HAL_RCC_SDIO_RELEASE_RESET\r\n#define __SDIO_CLK_SLEEP_DISABLE                  __HAL_RCC_SDIO_CLK_SLEEP_DISABLE\r\n#define __SDIO_CLK_SLEEP_ENABLE                   __HAL_RCC_SDIO_CLK_SLEEP_ENABLE\r\n#define __DMA2D_CLK_ENABLE                        __HAL_RCC_DMA2D_CLK_ENABLE\r\n#define __DMA2D_CLK_DISABLE                       __HAL_RCC_DMA2D_CLK_DISABLE\r\n#define __DMA2D_FORCE_RESET                       __HAL_RCC_DMA2D_FORCE_RESET\r\n#define __DMA2D_RELEASE_RESET                     __HAL_RCC_DMA2D_RELEASE_RESET\r\n#define __DMA2D_CLK_SLEEP_ENABLE                  __HAL_RCC_DMA2D_CLK_SLEEP_ENABLE\r\n#define __DMA2D_CLK_SLEEP_DISABLE                 __HAL_RCC_DMA2D_CLK_SLEEP_DISABLE\r\n\r\n/* alias define maintained for legacy */\r\n#define __HAL_RCC_OTGFS_FORCE_RESET   __HAL_RCC_USB_OTG_FS_FORCE_RESET\r\n#define __HAL_RCC_OTGFS_RELEASE_RESET __HAL_RCC_USB_OTG_FS_RELEASE_RESET\r\n\r\n#define __ADC12_CLK_ENABLE   __HAL_RCC_ADC12_CLK_ENABLE\r\n#define __ADC12_CLK_DISABLE  __HAL_RCC_ADC12_CLK_DISABLE\r\n#define __ADC34_CLK_ENABLE   __HAL_RCC_ADC34_CLK_ENABLE\r\n#define __ADC34_CLK_DISABLE  __HAL_RCC_ADC34_CLK_DISABLE\r\n#define __ADC12_CLK_ENABLE   __HAL_RCC_ADC12_CLK_ENABLE\r\n#define __ADC12_CLK_DISABLE  __HAL_RCC_ADC12_CLK_DISABLE\r\n#define __DAC2_CLK_ENABLE    __HAL_RCC_DAC2_CLK_ENABLE\r\n#define __DAC2_CLK_DISABLE   __HAL_RCC_DAC2_CLK_DISABLE\r\n#define __TIM18_CLK_ENABLE   __HAL_RCC_TIM18_CLK_ENABLE\r\n#define __TIM18_CLK_DISABLE  __HAL_RCC_TIM18_CLK_DISABLE\r\n#define __TIM19_CLK_ENABLE   __HAL_RCC_TIM19_CLK_ENABLE\r\n#define __TIM19_CLK_DISABLE  __HAL_RCC_TIM19_CLK_DISABLE\r\n#define __TIM20_CLK_ENABLE   __HAL_RCC_TIM20_CLK_ENABLE\r\n#define __TIM20_CLK_DISABLE  __HAL_RCC_TIM20_CLK_DISABLE\r\n#define __HRTIM1_CLK_ENABLE  __HAL_RCC_HRTIM1_CLK_ENABLE\r\n#define __HRTIM1_CLK_DISABLE __HAL_RCC_HRTIM1_CLK_DISABLE\r\n#define __SDADC1_CLK_ENABLE  __HAL_RCC_SDADC1_CLK_ENABLE\r\n#define __SDADC2_CLK_ENABLE  __HAL_RCC_SDADC2_CLK_ENABLE\r\n#define __SDADC3_CLK_ENABLE  __HAL_RCC_SDADC3_CLK_ENABLE\r\n#define __SDADC1_CLK_DISABLE __HAL_RCC_SDADC1_CLK_DISABLE\r\n#define __SDADC2_CLK_DISABLE __HAL_RCC_SDADC2_CLK_DISABLE\r\n#define __SDADC3_CLK_DISABLE __HAL_RCC_SDADC3_CLK_DISABLE\r\n\r\n#define __ADC12_FORCE_RESET    __HAL_RCC_ADC12_FORCE_RESET\r\n#define __ADC12_RELEASE_RESET  __HAL_RCC_ADC12_RELEASE_RESET\r\n#define __ADC34_FORCE_RESET    __HAL_RCC_ADC34_FORCE_RESET\r\n#define __ADC34_RELEASE_RESET  __HAL_RCC_ADC34_RELEASE_RESET\r\n#define __ADC12_FORCE_RESET    __HAL_RCC_ADC12_FORCE_RESET\r\n#define __ADC12_RELEASE_RESET  __HAL_RCC_ADC12_RELEASE_RESET\r\n#define __DAC2_FORCE_RESET     __HAL_RCC_DAC2_FORCE_RESET\r\n#define __DAC2_RELEASE_RESET   __HAL_RCC_DAC2_RELEASE_RESET\r\n#define __TIM18_FORCE_RESET    __HAL_RCC_TIM18_FORCE_RESET\r\n#define __TIM18_RELEASE_RESET  __HAL_RCC_TIM18_RELEASE_RESET\r\n#define __TIM19_FORCE_RESET    __HAL_RCC_TIM19_FORCE_RESET\r\n#define __TIM19_RELEASE_RESET  __HAL_RCC_TIM19_RELEASE_RESET\r\n#define __TIM20_FORCE_RESET    __HAL_RCC_TIM20_FORCE_RESET\r\n#define __TIM20_RELEASE_RESET  __HAL_RCC_TIM20_RELEASE_RESET\r\n#define __HRTIM1_FORCE_RESET   __HAL_RCC_HRTIM1_FORCE_RESET\r\n#define __HRTIM1_RELEASE_RESET __HAL_RCC_HRTIM1_RELEASE_RESET\r\n#define __SDADC1_FORCE_RESET   __HAL_RCC_SDADC1_FORCE_RESET\r\n#define __SDADC2_FORCE_RESET   __HAL_RCC_SDADC2_FORCE_RESET\r\n#define __SDADC3_FORCE_RESET   __HAL_RCC_SDADC3_FORCE_RESET\r\n#define __SDADC1_RELEASE_RESET __HAL_RCC_SDADC1_RELEASE_RESET\r\n#define __SDADC2_RELEASE_RESET __HAL_RCC_SDADC2_RELEASE_RESET\r\n#define __SDADC3_RELEASE_RESET __HAL_RCC_SDADC3_RELEASE_RESET\r\n\r\n#define __ADC1_IS_CLK_ENABLED    __HAL_RCC_ADC1_IS_CLK_ENABLED\r\n#define __ADC1_IS_CLK_DISABLED   __HAL_RCC_ADC1_IS_CLK_DISABLED\r\n#define __ADC12_IS_CLK_ENABLED   __HAL_RCC_ADC12_IS_CLK_ENABLED\r\n#define __ADC12_IS_CLK_DISABLED  __HAL_RCC_ADC12_IS_CLK_DISABLED\r\n#define __ADC34_IS_CLK_ENABLED   __HAL_RCC_ADC34_IS_CLK_ENABLED\r\n#define __ADC34_IS_CLK_DISABLED  __HAL_RCC_ADC34_IS_CLK_DISABLED\r\n#define __CEC_IS_CLK_ENABLED     __HAL_RCC_CEC_IS_CLK_ENABLED\r\n#define __CEC_IS_CLK_DISABLED    __HAL_RCC_CEC_IS_CLK_DISABLED\r\n#define __CRC_IS_CLK_ENABLED     __HAL_RCC_CRC_IS_CLK_ENABLED\r\n#define __CRC_IS_CLK_DISABLED    __HAL_RCC_CRC_IS_CLK_DISABLED\r\n#define __DAC1_IS_CLK_ENABLED    __HAL_RCC_DAC1_IS_CLK_ENABLED\r\n#define __DAC1_IS_CLK_DISABLED   __HAL_RCC_DAC1_IS_CLK_DISABLED\r\n#define __DAC2_IS_CLK_ENABLED    __HAL_RCC_DAC2_IS_CLK_ENABLED\r\n#define __DAC2_IS_CLK_DISABLED   __HAL_RCC_DAC2_IS_CLK_DISABLED\r\n#define __DMA1_IS_CLK_ENABLED    __HAL_RCC_DMA1_IS_CLK_ENABLED\r\n#define __DMA1_IS_CLK_DISABLED   __HAL_RCC_DMA1_IS_CLK_DISABLED\r\n#define __DMA2_IS_CLK_ENABLED    __HAL_RCC_DMA2_IS_CLK_ENABLED\r\n#define __DMA2_IS_CLK_DISABLED   __HAL_RCC_DMA2_IS_CLK_DISABLED\r\n#define __FLITF_IS_CLK_ENABLED   __HAL_RCC_FLITF_IS_CLK_ENABLED\r\n#define __FLITF_IS_CLK_DISABLED  __HAL_RCC_FLITF_IS_CLK_DISABLED\r\n#define __FMC_IS_CLK_ENABLED     __HAL_RCC_FMC_IS_CLK_ENABLED\r\n#define __FMC_IS_CLK_DISABLED    __HAL_RCC_FMC_IS_CLK_DISABLED\r\n#define __GPIOA_IS_CLK_ENABLED   __HAL_RCC_GPIOA_IS_CLK_ENABLED\r\n#define __GPIOA_IS_CLK_DISABLED  __HAL_RCC_GPIOA_IS_CLK_DISABLED\r\n#define __GPIOB_IS_CLK_ENABLED   __HAL_RCC_GPIOB_IS_CLK_ENABLED\r\n#define __GPIOB_IS_CLK_DISABLED  __HAL_RCC_GPIOB_IS_CLK_DISABLED\r\n#define __GPIOC_IS_CLK_ENABLED   __HAL_RCC_GPIOC_IS_CLK_ENABLED\r\n#define __GPIOC_IS_CLK_DISABLED  __HAL_RCC_GPIOC_IS_CLK_DISABLED\r\n#define __GPIOD_IS_CLK_ENABLED   __HAL_RCC_GPIOD_IS_CLK_ENABLED\r\n#define __GPIOD_IS_CLK_DISABLED  __HAL_RCC_GPIOD_IS_CLK_DISABLED\r\n#define __GPIOE_IS_CLK_ENABLED   __HAL_RCC_GPIOE_IS_CLK_ENABLED\r\n#define __GPIOE_IS_CLK_DISABLED  __HAL_RCC_GPIOE_IS_CLK_DISABLED\r\n#define __GPIOF_IS_CLK_ENABLED   __HAL_RCC_GPIOF_IS_CLK_ENABLED\r\n#define __GPIOF_IS_CLK_DISABLED  __HAL_RCC_GPIOF_IS_CLK_DISABLED\r\n#define __GPIOG_IS_CLK_ENABLED   __HAL_RCC_GPIOG_IS_CLK_ENABLED\r\n#define __GPIOG_IS_CLK_DISABLED  __HAL_RCC_GPIOG_IS_CLK_DISABLED\r\n#define __GPIOH_IS_CLK_ENABLED   __HAL_RCC_GPIOH_IS_CLK_ENABLED\r\n#define __GPIOH_IS_CLK_DISABLED  __HAL_RCC_GPIOH_IS_CLK_DISABLED\r\n#define __HRTIM1_IS_CLK_ENABLED  __HAL_RCC_HRTIM1_IS_CLK_ENABLED\r\n#define __HRTIM1_IS_CLK_DISABLED __HAL_RCC_HRTIM1_IS_CLK_DISABLED\r\n#define __I2C1_IS_CLK_ENABLED    __HAL_RCC_I2C1_IS_CLK_ENABLED\r\n#define __I2C1_IS_CLK_DISABLED   __HAL_RCC_I2C1_IS_CLK_DISABLED\r\n#define __I2C2_IS_CLK_ENABLED    __HAL_RCC_I2C2_IS_CLK_ENABLED\r\n#define __I2C2_IS_CLK_DISABLED   __HAL_RCC_I2C2_IS_CLK_DISABLED\r\n#define __I2C3_IS_CLK_ENABLED    __HAL_RCC_I2C3_IS_CLK_ENABLED\r\n#define __I2C3_IS_CLK_DISABLED   __HAL_RCC_I2C3_IS_CLK_DISABLED\r\n#define __PWR_IS_CLK_ENABLED     __HAL_RCC_PWR_IS_CLK_ENABLED\r\n#define __PWR_IS_CLK_DISABLED    __HAL_RCC_PWR_IS_CLK_DISABLED\r\n#define __SYSCFG_IS_CLK_ENABLED  __HAL_RCC_SYSCFG_IS_CLK_ENABLED\r\n#define __SYSCFG_IS_CLK_DISABLED __HAL_RCC_SYSCFG_IS_CLK_DISABLED\r\n#define __SPI1_IS_CLK_ENABLED    __HAL_RCC_SPI1_IS_CLK_ENABLED\r\n#define __SPI1_IS_CLK_DISABLED   __HAL_RCC_SPI1_IS_CLK_DISABLED\r\n#define __SPI2_IS_CLK_ENABLED    __HAL_RCC_SPI2_IS_CLK_ENABLED\r\n#define __SPI2_IS_CLK_DISABLED   __HAL_RCC_SPI2_IS_CLK_DISABLED\r\n#define __SPI3_IS_CLK_ENABLED    __HAL_RCC_SPI3_IS_CLK_ENABLED\r\n#define __SPI3_IS_CLK_DISABLED   __HAL_RCC_SPI3_IS_CLK_DISABLED\r\n#define __SPI4_IS_CLK_ENABLED    __HAL_RCC_SPI4_IS_CLK_ENABLED\r\n#define __SPI4_IS_CLK_DISABLED   __HAL_RCC_SPI4_IS_CLK_DISABLED\r\n#define __SDADC1_IS_CLK_ENABLED  __HAL_RCC_SDADC1_IS_CLK_ENABLED\r\n#define __SDADC1_IS_CLK_DISABLED __HAL_RCC_SDADC1_IS_CLK_DISABLED\r\n#define __SDADC2_IS_CLK_ENABLED  __HAL_RCC_SDADC2_IS_CLK_ENABLED\r\n#define __SDADC2_IS_CLK_DISABLED __HAL_RCC_SDADC2_IS_CLK_DISABLED\r\n#define __SDADC3_IS_CLK_ENABLED  __HAL_RCC_SDADC3_IS_CLK_ENABLED\r\n#define __SDADC3_IS_CLK_DISABLED __HAL_RCC_SDADC3_IS_CLK_DISABLED\r\n#define __SRAM_IS_CLK_ENABLED    __HAL_RCC_SRAM_IS_CLK_ENABLED\r\n#define __SRAM_IS_CLK_DISABLED   __HAL_RCC_SRAM_IS_CLK_DISABLED\r\n#define __TIM1_IS_CLK_ENABLED    __HAL_RCC_TIM1_IS_CLK_ENABLED\r\n#define __TIM1_IS_CLK_DISABLED   __HAL_RCC_TIM1_IS_CLK_DISABLED\r\n#define __TIM2_IS_CLK_ENABLED    __HAL_RCC_TIM2_IS_CLK_ENABLED\r\n#define __TIM2_IS_CLK_DISABLED   __HAL_RCC_TIM2_IS_CLK_DISABLED\r\n#define __TIM3_IS_CLK_ENABLED    __HAL_RCC_TIM3_IS_CLK_ENABLED\r\n#define __TIM3_IS_CLK_DISABLED   __HAL_RCC_TIM3_IS_CLK_DISABLED\r\n#define __TIM4_IS_CLK_ENABLED    __HAL_RCC_TIM4_IS_CLK_ENABLED\r\n#define __TIM4_IS_CLK_DISABLED   __HAL_RCC_TIM4_IS_CLK_DISABLED\r\n#define __TIM5_IS_CLK_ENABLED    __HAL_RCC_TIM5_IS_CLK_ENABLED\r\n#define __TIM5_IS_CLK_DISABLED   __HAL_RCC_TIM5_IS_CLK_DISABLED\r\n#define __TIM6_IS_CLK_ENABLED    __HAL_RCC_TIM6_IS_CLK_ENABLED\r\n#define __TIM6_IS_CLK_DISABLED   __HAL_RCC_TIM6_IS_CLK_DISABLED\r\n#define __TIM7_IS_CLK_ENABLED    __HAL_RCC_TIM7_IS_CLK_ENABLED\r\n#define __TIM7_IS_CLK_DISABLED   __HAL_RCC_TIM7_IS_CLK_DISABLED\r\n#define __TIM8_IS_CLK_ENABLED    __HAL_RCC_TIM8_IS_CLK_ENABLED\r\n#define __TIM8_IS_CLK_DISABLED   __HAL_RCC_TIM8_IS_CLK_DISABLED\r\n#define __TIM12_IS_CLK_ENABLED   __HAL_RCC_TIM12_IS_CLK_ENABLED\r\n#define __TIM12_IS_CLK_DISABLED  __HAL_RCC_TIM12_IS_CLK_DISABLED\r\n#define __TIM13_IS_CLK_ENABLED   __HAL_RCC_TIM13_IS_CLK_ENABLED\r\n#define __TIM13_IS_CLK_DISABLED  __HAL_RCC_TIM13_IS_CLK_DISABLED\r\n#define __TIM14_IS_CLK_ENABLED   __HAL_RCC_TIM14_IS_CLK_ENABLED\r\n#define __TIM14_IS_CLK_DISABLED  __HAL_RCC_TIM14_IS_CLK_DISABLED\r\n#define __TIM15_IS_CLK_ENABLED   __HAL_RCC_TIM15_IS_CLK_ENABLED\r\n#define __TIM15_IS_CLK_DISABLED  __HAL_RCC_TIM15_IS_CLK_DISABLED\r\n#define __TIM16_IS_CLK_ENABLED   __HAL_RCC_TIM16_IS_CLK_ENABLED\r\n#define __TIM16_IS_CLK_DISABLED  __HAL_RCC_TIM16_IS_CLK_DISABLED\r\n#define __TIM17_IS_CLK_ENABLED   __HAL_RCC_TIM17_IS_CLK_ENABLED\r\n#define __TIM17_IS_CLK_DISABLED  __HAL_RCC_TIM17_IS_CLK_DISABLED\r\n#define __TIM18_IS_CLK_ENABLED   __HAL_RCC_TIM18_IS_CLK_ENABLED\r\n#define __TIM18_IS_CLK_DISABLED  __HAL_RCC_TIM18_IS_CLK_DISABLED\r\n#define __TIM19_IS_CLK_ENABLED   __HAL_RCC_TIM19_IS_CLK_ENABLED\r\n#define __TIM19_IS_CLK_DISABLED  __HAL_RCC_TIM19_IS_CLK_DISABLED\r\n#define __TIM20_IS_CLK_ENABLED   __HAL_RCC_TIM20_IS_CLK_ENABLED\r\n#define __TIM20_IS_CLK_DISABLED  __HAL_RCC_TIM20_IS_CLK_DISABLED\r\n#define __TSC_IS_CLK_ENABLED     __HAL_RCC_TSC_IS_CLK_ENABLED\r\n#define __TSC_IS_CLK_DISABLED    __HAL_RCC_TSC_IS_CLK_DISABLED\r\n#define __UART4_IS_CLK_ENABLED   __HAL_RCC_UART4_IS_CLK_ENABLED\r\n#define __UART4_IS_CLK_DISABLED  __HAL_RCC_UART4_IS_CLK_DISABLED\r\n#define __UART5_IS_CLK_ENABLED   __HAL_RCC_UART5_IS_CLK_ENABLED\r\n#define __UART5_IS_CLK_DISABLED  __HAL_RCC_UART5_IS_CLK_DISABLED\r\n#define __USART1_IS_CLK_ENABLED  __HAL_RCC_USART1_IS_CLK_ENABLED\r\n#define __USART1_IS_CLK_DISABLED __HAL_RCC_USART1_IS_CLK_DISABLED\r\n#define __USART2_IS_CLK_ENABLED  __HAL_RCC_USART2_IS_CLK_ENABLED\r\n#define __USART2_IS_CLK_DISABLED __HAL_RCC_USART2_IS_CLK_DISABLED\r\n#define __USART3_IS_CLK_ENABLED  __HAL_RCC_USART3_IS_CLK_ENABLED\r\n#define __USART3_IS_CLK_DISABLED __HAL_RCC_USART3_IS_CLK_DISABLED\r\n#define __USB_IS_CLK_ENABLED     __HAL_RCC_USB_IS_CLK_ENABLED\r\n#define __USB_IS_CLK_DISABLED    __HAL_RCC_USB_IS_CLK_DISABLED\r\n#define __WWDG_IS_CLK_ENABLED    __HAL_RCC_WWDG_IS_CLK_ENABLED\r\n#define __WWDG_IS_CLK_DISABLED   __HAL_RCC_WWDG_IS_CLK_DISABLED\r\n\r\n#if defined(STM32F4)\r\n#define __HAL_RCC_SDMMC1_FORCE_RESET       __HAL_RCC_SDIO_FORCE_RESET\r\n#define __HAL_RCC_SDMMC1_RELEASE_RESET     __HAL_RCC_SDIO_RELEASE_RESET\r\n#define __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE  __HAL_RCC_SDIO_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_SDMMC1_CLK_ENABLE        __HAL_RCC_SDIO_CLK_ENABLE\r\n#define __HAL_RCC_SDMMC1_CLK_DISABLE       __HAL_RCC_SDIO_CLK_DISABLE\r\n#define __HAL_RCC_SDMMC1_IS_CLK_ENABLED    __HAL_RCC_SDIO_IS_CLK_ENABLED\r\n#define __HAL_RCC_SDMMC1_IS_CLK_DISABLED   __HAL_RCC_SDIO_IS_CLK_DISABLED\r\n#define Sdmmc1ClockSelection               SdioClockSelection\r\n#define RCC_PERIPHCLK_SDMMC1               RCC_PERIPHCLK_SDIO\r\n#define RCC_SDMMC1CLKSOURCE_CLK48          RCC_SDIOCLKSOURCE_CK48\r\n#define RCC_SDMMC1CLKSOURCE_SYSCLK         RCC_SDIOCLKSOURCE_SYSCLK\r\n#define __HAL_RCC_SDMMC1_CONFIG            __HAL_RCC_SDIO_CONFIG\r\n#define __HAL_RCC_GET_SDMMC1_SOURCE        __HAL_RCC_GET_SDIO_SOURCE\r\n#endif\r\n\r\n#if defined(STM32F7) || defined(STM32L4)\r\n#define __HAL_RCC_SDIO_FORCE_RESET       __HAL_RCC_SDMMC1_FORCE_RESET\r\n#define __HAL_RCC_SDIO_RELEASE_RESET     __HAL_RCC_SDMMC1_RELEASE_RESET\r\n#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE  __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_SDIO_CLK_ENABLE        __HAL_RCC_SDMMC1_CLK_ENABLE\r\n#define __HAL_RCC_SDIO_CLK_DISABLE       __HAL_RCC_SDMMC1_CLK_DISABLE\r\n#define __HAL_RCC_SDIO_IS_CLK_ENABLED    __HAL_RCC_SDMMC1_IS_CLK_ENABLED\r\n#define __HAL_RCC_SDIO_IS_CLK_DISABLED   __HAL_RCC_SDMMC1_IS_CLK_DISABLED\r\n#define SdioClockSelection               Sdmmc1ClockSelection\r\n#define RCC_PERIPHCLK_SDIO               RCC_PERIPHCLK_SDMMC1\r\n#define __HAL_RCC_SDIO_CONFIG            __HAL_RCC_SDMMC1_CONFIG\r\n#define __HAL_RCC_GET_SDIO_SOURCE        __HAL_RCC_GET_SDMMC1_SOURCE\r\n#endif\r\n\r\n#if defined(STM32H7)\r\n#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE()             __HAL_RCC_USB1_OTG_HS_CLK_ENABLE()\r\n#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE()        __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE()\r\n#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE()            __HAL_RCC_USB1_OTG_HS_CLK_DISABLE()\r\n#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE()       __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE()\r\n#define __HAL_RCC_USB_OTG_HS_FORCE_RESET()            __HAL_RCC_USB1_OTG_HS_FORCE_RESET()\r\n#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET()          __HAL_RCC_USB1_OTG_HS_RELEASE_RESET()\r\n#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE()       __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE()\r\n#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE()  __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE()\r\n#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE()      __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE()\r\n#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE()\r\n\r\n#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE()             __HAL_RCC_USB2_OTG_FS_CLK_ENABLE()\r\n#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE()        __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE()\r\n#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE()            __HAL_RCC_USB2_OTG_FS_CLK_DISABLE()\r\n#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE()       __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE()\r\n#define __HAL_RCC_USB_OTG_FS_FORCE_RESET()            __HAL_RCC_USB2_OTG_FS_FORCE_RESET()\r\n#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET()          __HAL_RCC_USB2_OTG_FS_RELEASE_RESET()\r\n#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE()       __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE()\r\n#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE()  __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE()\r\n#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE()      __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE()\r\n#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE()\r\n#endif\r\n\r\n#if defined(STM32F7)\r\n#define RCC_SDIOCLKSOURCE_CLK48  RCC_SDMMC1CLKSOURCE_CLK48\r\n#define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK\r\n#endif\r\n\r\n#define __HAL_RCC_I2SCLK        __HAL_RCC_I2S_CONFIG\r\n#define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG\r\n\r\n#define __RCC_PLLSRC RCC_GET_PLL_OSCSOURCE\r\n\r\n#define IS_RCC_MSIRANGE      IS_RCC_MSI_CLOCK_RANGE\r\n#define IS_RCC_RTCCLK_SOURCE IS_RCC_RTCCLKSOURCE\r\n#define IS_RCC_SYSCLK_DIV    IS_RCC_HCLK\r\n#define IS_RCC_HCLK_DIV      IS_RCC_PCLK\r\n#define IS_RCC_PERIPHCLK     IS_RCC_PERIPHCLOCK\r\n\r\n#define RCC_IT_HSI14 RCC_IT_HSI14RDY\r\n\r\n#define RCC_IT_CSSLSE RCC_IT_LSECSS\r\n#define RCC_IT_CSSHSE RCC_IT_CSS\r\n\r\n#define RCC_PLLMUL_3  RCC_PLL_MUL3\r\n#define RCC_PLLMUL_4  RCC_PLL_MUL4\r\n#define RCC_PLLMUL_6  RCC_PLL_MUL6\r\n#define RCC_PLLMUL_8  RCC_PLL_MUL8\r\n#define RCC_PLLMUL_12 RCC_PLL_MUL12\r\n#define RCC_PLLMUL_16 RCC_PLL_MUL16\r\n#define RCC_PLLMUL_24 RCC_PLL_MUL24\r\n#define RCC_PLLMUL_32 RCC_PLL_MUL32\r\n#define RCC_PLLMUL_48 RCC_PLL_MUL48\r\n\r\n#define RCC_PLLDIV_2 RCC_PLL_DIV2\r\n#define RCC_PLLDIV_3 RCC_PLL_DIV3\r\n#define RCC_PLLDIV_4 RCC_PLL_DIV4\r\n\r\n#define IS_RCC_MCOSOURCE           IS_RCC_MCO1SOURCE\r\n#define __HAL_RCC_MCO_CONFIG       __HAL_RCC_MCO1_CONFIG\r\n#define RCC_MCO_NODIV              RCC_MCODIV_1\r\n#define RCC_MCO_DIV1               RCC_MCODIV_1\r\n#define RCC_MCO_DIV2               RCC_MCODIV_2\r\n#define RCC_MCO_DIV4               RCC_MCODIV_4\r\n#define RCC_MCO_DIV8               RCC_MCODIV_8\r\n#define RCC_MCO_DIV16              RCC_MCODIV_16\r\n#define RCC_MCO_DIV32              RCC_MCODIV_32\r\n#define RCC_MCO_DIV64              RCC_MCODIV_64\r\n#define RCC_MCO_DIV128             RCC_MCODIV_128\r\n#define RCC_MCOSOURCE_NONE         RCC_MCO1SOURCE_NOCLOCK\r\n#define RCC_MCOSOURCE_LSI          RCC_MCO1SOURCE_LSI\r\n#define RCC_MCOSOURCE_LSE          RCC_MCO1SOURCE_LSE\r\n#define RCC_MCOSOURCE_SYSCLK       RCC_MCO1SOURCE_SYSCLK\r\n#define RCC_MCOSOURCE_HSI          RCC_MCO1SOURCE_HSI\r\n#define RCC_MCOSOURCE_HSI14        RCC_MCO1SOURCE_HSI14\r\n#define RCC_MCOSOURCE_HSI48        RCC_MCO1SOURCE_HSI48\r\n#define RCC_MCOSOURCE_HSE          RCC_MCO1SOURCE_HSE\r\n#define RCC_MCOSOURCE_PLLCLK_DIV1  RCC_MCO1SOURCE_PLLCLK\r\n#define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK\r\n#define RCC_MCOSOURCE_PLLCLK_DIV2  RCC_MCO1SOURCE_PLLCLK_DIV2\r\n\r\n#define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK\r\n\r\n#define RCC_USBCLK_PLLSAI1      RCC_USBCLKSOURCE_PLLSAI1\r\n#define RCC_USBCLK_PLL          RCC_USBCLKSOURCE_PLL\r\n#define RCC_USBCLK_MSI          RCC_USBCLKSOURCE_MSI\r\n#define RCC_USBCLKSOURCE_PLLCLK RCC_USBCLKSOURCE_PLL\r\n#define RCC_USBPLLCLK_DIV1      RCC_USBCLKSOURCE_PLL\r\n#define RCC_USBPLLCLK_DIV1_5    RCC_USBCLKSOURCE_PLL_DIV1_5\r\n#define RCC_USBPLLCLK_DIV2      RCC_USBCLKSOURCE_PLL_DIV2\r\n#define RCC_USBPLLCLK_DIV3      RCC_USBCLKSOURCE_PLL_DIV3\r\n\r\n#define HSION_BitNumber             RCC_HSION_BIT_NUMBER\r\n#define HSION_BITNUMBER             RCC_HSION_BIT_NUMBER\r\n#define HSEON_BitNumber             RCC_HSEON_BIT_NUMBER\r\n#define HSEON_BITNUMBER             RCC_HSEON_BIT_NUMBER\r\n#define MSION_BITNUMBER             RCC_MSION_BIT_NUMBER\r\n#define CSSON_BitNumber             RCC_CSSON_BIT_NUMBER\r\n#define CSSON_BITNUMBER             RCC_CSSON_BIT_NUMBER\r\n#define PLLON_BitNumber             RCC_PLLON_BIT_NUMBER\r\n#define PLLON_BITNUMBER             RCC_PLLON_BIT_NUMBER\r\n#define PLLI2SON_BitNumber          RCC_PLLI2SON_BIT_NUMBER\r\n#define I2SSRC_BitNumber            RCC_I2SSRC_BIT_NUMBER\r\n#define RTCEN_BitNumber             RCC_RTCEN_BIT_NUMBER\r\n#define RTCEN_BITNUMBER             RCC_RTCEN_BIT_NUMBER\r\n#define BDRST_BitNumber             RCC_BDRST_BIT_NUMBER\r\n#define BDRST_BITNUMBER             RCC_BDRST_BIT_NUMBER\r\n#define RTCRST_BITNUMBER            RCC_RTCRST_BIT_NUMBER\r\n#define LSION_BitNumber             RCC_LSION_BIT_NUMBER\r\n#define LSION_BITNUMBER             RCC_LSION_BIT_NUMBER\r\n#define LSEON_BitNumber             RCC_LSEON_BIT_NUMBER\r\n#define LSEON_BITNUMBER             RCC_LSEON_BIT_NUMBER\r\n#define LSEBYP_BITNUMBER            RCC_LSEBYP_BIT_NUMBER\r\n#define PLLSAION_BitNumber          RCC_PLLSAION_BIT_NUMBER\r\n#define TIMPRE_BitNumber            RCC_TIMPRE_BIT_NUMBER\r\n#define RMVF_BitNumber              RCC_RMVF_BIT_NUMBER\r\n#define RMVF_BITNUMBER              RCC_RMVF_BIT_NUMBER\r\n#define RCC_CR2_HSI14TRIM_BitNumber RCC_HSI14TRIM_BIT_NUMBER\r\n#define CR_BYTE2_ADDRESS            RCC_CR_BYTE2_ADDRESS\r\n#define CIR_BYTE1_ADDRESS           RCC_CIR_BYTE1_ADDRESS\r\n#define CIR_BYTE2_ADDRESS           RCC_CIR_BYTE2_ADDRESS\r\n#define BDCR_BYTE0_ADDRESS          RCC_BDCR_BYTE0_ADDRESS\r\n#define DBP_TIMEOUT_VALUE           RCC_DBP_TIMEOUT_VALUE\r\n#define LSE_TIMEOUT_VALUE           RCC_LSE_TIMEOUT_VALUE\r\n\r\n#define CR_HSION_BB       RCC_CR_HSION_BB\r\n#define CR_CSSON_BB       RCC_CR_CSSON_BB\r\n#define CR_PLLON_BB       RCC_CR_PLLON_BB\r\n#define CR_PLLI2SON_BB    RCC_CR_PLLI2SON_BB\r\n#define CR_MSION_BB       RCC_CR_MSION_BB\r\n#define CSR_LSION_BB      RCC_CSR_LSION_BB\r\n#define CSR_LSEON_BB      RCC_CSR_LSEON_BB\r\n#define CSR_LSEBYP_BB     RCC_CSR_LSEBYP_BB\r\n#define CSR_RTCEN_BB      RCC_CSR_RTCEN_BB\r\n#define CSR_RTCRST_BB     RCC_CSR_RTCRST_BB\r\n#define CFGR_I2SSRC_BB    RCC_CFGR_I2SSRC_BB\r\n#define BDCR_RTCEN_BB     RCC_BDCR_RTCEN_BB\r\n#define BDCR_BDRST_BB     RCC_BDCR_BDRST_BB\r\n#define CR_HSEON_BB       RCC_CR_HSEON_BB\r\n#define CSR_RMVF_BB       RCC_CSR_RMVF_BB\r\n#define CR_PLLSAION_BB    RCC_CR_PLLSAION_BB\r\n#define DCKCFGR_TIMPRE_BB RCC_DCKCFGR_TIMPRE_BB\r\n\r\n#define __HAL_RCC_CRS_ENABLE_FREQ_ERROR_COUNTER  __HAL_RCC_CRS_FREQ_ERROR_COUNTER_ENABLE\r\n#define __HAL_RCC_CRS_DISABLE_FREQ_ERROR_COUNTER __HAL_RCC_CRS_FREQ_ERROR_COUNTER_DISABLE\r\n#define __HAL_RCC_CRS_ENABLE_AUTOMATIC_CALIB     __HAL_RCC_CRS_AUTOMATIC_CALIB_ENABLE\r\n#define __HAL_RCC_CRS_DISABLE_AUTOMATIC_CALIB    __HAL_RCC_CRS_AUTOMATIC_CALIB_DISABLE\r\n#define __HAL_RCC_CRS_CALCULATE_RELOADVALUE      __HAL_RCC_CRS_RELOADVALUE_CALCULATE\r\n\r\n#define __HAL_RCC_GET_IT_SOURCE __HAL_RCC_GET_IT\r\n\r\n#define RCC_CRS_SYNCWARM RCC_CRS_SYNCWARN\r\n#define RCC_CRS_TRIMOV   RCC_CRS_TRIMOVF\r\n\r\n#define RCC_PERIPHCLK_CK48        RCC_PERIPHCLK_CLK48\r\n#define RCC_CK48CLKSOURCE_PLLQ    RCC_CLK48CLKSOURCE_PLLQ\r\n#define RCC_CK48CLKSOURCE_PLLSAIP RCC_CLK48CLKSOURCE_PLLSAIP\r\n#define RCC_CK48CLKSOURCE_PLLI2SQ RCC_CLK48CLKSOURCE_PLLI2SQ\r\n#define IS_RCC_CK48CLKSOURCE      IS_RCC_CLK48CLKSOURCE\r\n#define RCC_SDIOCLKSOURCE_CK48    RCC_SDIOCLKSOURCE_CLK48\r\n\r\n#define __HAL_RCC_DFSDM_CLK_ENABLE            __HAL_RCC_DFSDM1_CLK_ENABLE\r\n#define __HAL_RCC_DFSDM_CLK_DISABLE           __HAL_RCC_DFSDM1_CLK_DISABLE\r\n#define __HAL_RCC_DFSDM_IS_CLK_ENABLED        __HAL_RCC_DFSDM1_IS_CLK_ENABLED\r\n#define __HAL_RCC_DFSDM_IS_CLK_DISABLED       __HAL_RCC_DFSDM1_IS_CLK_DISABLED\r\n#define __HAL_RCC_DFSDM_FORCE_RESET           __HAL_RCC_DFSDM1_FORCE_RESET\r\n#define __HAL_RCC_DFSDM_RELEASE_RESET         __HAL_RCC_DFSDM1_RELEASE_RESET\r\n#define __HAL_RCC_DFSDM_CLK_SLEEP_ENABLE      __HAL_RCC_DFSDM1_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_DFSDM_CLK_SLEEP_DISABLE     __HAL_RCC_DFSDM1_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_DFSDM_IS_CLK_SLEEP_ENABLED  __HAL_RCC_DFSDM1_IS_CLK_SLEEP_ENABLED\r\n#define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED\r\n#define DfsdmClockSelection                   Dfsdm1ClockSelection\r\n#define RCC_PERIPHCLK_DFSDM                   RCC_PERIPHCLK_DFSDM1\r\n#define RCC_DFSDMCLKSOURCE_PCLK               RCC_DFSDM1CLKSOURCE_PCLK2\r\n#define RCC_DFSDMCLKSOURCE_SYSCLK             RCC_DFSDM1CLKSOURCE_SYSCLK\r\n#define __HAL_RCC_DFSDM_CONFIG                __HAL_RCC_DFSDM1_CONFIG\r\n#define __HAL_RCC_GET_DFSDM_SOURCE            __HAL_RCC_GET_DFSDM1_SOURCE\r\n#define RCC_DFSDM1CLKSOURCE_PCLK              RCC_DFSDM1CLKSOURCE_PCLK2\r\n#define RCC_SWPMI1CLKSOURCE_PCLK              RCC_SWPMI1CLKSOURCE_PCLK1\r\n#define RCC_LPTIM1CLKSOURCE_PCLK              RCC_LPTIM1CLKSOURCE_PCLK1\r\n#define RCC_LPTIM2CLKSOURCE_PCLK              RCC_LPTIM2CLKSOURCE_PCLK1\r\n\r\n#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1\r\n#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2\r\n#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1\r\n#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2\r\n#define RCC_DFSDM1CLKSOURCE_APB2         RCC_DFSDM1CLKSOURCE_PCLK2\r\n#define RCC_DFSDM2CLKSOURCE_APB2         RCC_DFSDM2CLKSOURCE_PCLK2\r\n#define RCC_FMPI2C1CLKSOURCE_APB         RCC_FMPI2C1CLKSOURCE_PCLK1\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG\r\n#define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT\r\n#define __HAL_RTC_ENABLE_IT  __HAL_RTC_EXTI_ENABLE_IT\r\n\r\n#if defined(STM32F1)\r\n#define __HAL_RTC_EXTI_CLEAR_FLAG(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_CLEAR_FLAG()\r\n\r\n#define __HAL_RTC_EXTI_ENABLE_IT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_ENABLE_IT()\r\n\r\n#define __HAL_RTC_EXTI_DISABLE_IT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_DISABLE_IT()\r\n\r\n#define __HAL_RTC_EXTI_GET_FLAG(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_GET_FLAG()\r\n\r\n#define __HAL_RTC_EXTI_GENERATE_SWIT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_GENERATE_SWIT()\r\n#else\r\n#define __HAL_RTC_EXTI_CLEAR_FLAG(__EXTI_LINE__)                                      \\\r\n  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_CLEAR_FLAG() \\\r\n                                                  : (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG() : __HAL_RTC_TAMPER_TIMESTAMP_EXTI_CLEAR_FLAG()))\r\n#define __HAL_RTC_EXTI_ENABLE_IT(__EXTI_LINE__)                                      \\\r\n  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_ENABLE_IT() \\\r\n                                                  : (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT() : __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_IT()))\r\n#define __HAL_RTC_EXTI_DISABLE_IT(__EXTI_LINE__)                                      \\\r\n  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_DISABLE_IT() \\\r\n                                                  : (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_IT() : __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_IT()))\r\n#define __HAL_RTC_EXTI_GET_FLAG(__EXTI_LINE__)                                      \\\r\n  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_GET_FLAG() \\\r\n                                                  : (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_GET_FLAG() : __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GET_FLAG()))\r\n#define __HAL_RTC_EXTI_GENERATE_SWIT(__EXTI_LINE__) \\\r\n  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT)   \\\r\n       ? __HAL_RTC_ALARM_EXTI_GENERATE_SWIT()       \\\r\n       : (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_GENERATE_SWIT() : __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GENERATE_SWIT()))\r\n#endif /* STM32F1 */\r\n\r\n#define IS_ALARM                              IS_RTC_ALARM\r\n#define IS_ALARM_MASK                         IS_RTC_ALARM_MASK\r\n#define IS_TAMPER                             IS_RTC_TAMPER\r\n#define IS_TAMPER_ERASE_MODE                  IS_RTC_TAMPER_ERASE_MODE\r\n#define IS_TAMPER_FILTER                      IS_RTC_TAMPER_FILTER\r\n#define IS_TAMPER_INTERRUPT                   IS_RTC_TAMPER_INTERRUPT\r\n#define IS_TAMPER_MASKFLAG_STATE              IS_RTC_TAMPER_MASKFLAG_STATE\r\n#define IS_TAMPER_PRECHARGE_DURATION          IS_RTC_TAMPER_PRECHARGE_DURATION\r\n#define IS_TAMPER_PULLUP_STATE                IS_RTC_TAMPER_PULLUP_STATE\r\n#define IS_TAMPER_SAMPLING_FREQ               IS_RTC_TAMPER_SAMPLING_FREQ\r\n#define IS_TAMPER_TIMESTAMPONTAMPER_DETECTION IS_RTC_TAMPER_TIMESTAMPONTAMPER_DETECTION\r\n#define IS_TAMPER_TRIGGER                     IS_RTC_TAMPER_TRIGGER\r\n#define IS_WAKEUP_CLOCK                       IS_RTC_WAKEUP_CLOCK\r\n#define IS_WAKEUP_COUNTER                     IS_RTC_WAKEUP_COUNTER\r\n\r\n#define __RTC_WRITEPROTECTION_ENABLE  __HAL_RTC_WRITEPROTECTION_ENABLE\r\n#define __RTC_WRITEPROTECTION_DISABLE __HAL_RTC_WRITEPROTECTION_DISABLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SD_Aliased_Macros HAL SD Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE\r\n#define SD_CMD_SD_APP_STAUS       SD_CMD_SD_APP_STATUS\r\n\r\n#if defined(STM32F4) || defined(STM32F2)\r\n#define SD_SDMMC_DISABLED          SD_SDIO_DISABLED\r\n#define SD_SDMMC_FUNCTION_BUSY     SD_SDIO_FUNCTION_BUSY\r\n#define SD_SDMMC_FUNCTION_FAILED   SD_SDIO_FUNCTION_FAILED\r\n#define SD_SDMMC_UNKNOWN_FUNCTION  SD_SDIO_UNKNOWN_FUNCTION\r\n#define SD_CMD_SDMMC_SEN_OP_COND   SD_CMD_SDIO_SEN_OP_COND\r\n#define SD_CMD_SDMMC_RW_DIRECT     SD_CMD_SDIO_RW_DIRECT\r\n#define SD_CMD_SDMMC_RW_EXTENDED   SD_CMD_SDIO_RW_EXTENDED\r\n#define __HAL_SD_SDMMC_ENABLE      __HAL_SD_SDIO_ENABLE\r\n#define __HAL_SD_SDMMC_DISABLE     __HAL_SD_SDIO_DISABLE\r\n#define __HAL_SD_SDMMC_DMA_ENABLE  __HAL_SD_SDIO_DMA_ENABLE\r\n#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL\r\n#define __HAL_SD_SDMMC_ENABLE_IT   __HAL_SD_SDIO_ENABLE_IT\r\n#define __HAL_SD_SDMMC_DISABLE_IT  __HAL_SD_SDIO_DISABLE_IT\r\n#define __HAL_SD_SDMMC_GET_FLAG    __HAL_SD_SDIO_GET_FLAG\r\n#define __HAL_SD_SDMMC_CLEAR_FLAG  __HAL_SD_SDIO_CLEAR_FLAG\r\n#define __HAL_SD_SDMMC_GET_IT      __HAL_SD_SDIO_GET_IT\r\n#define __HAL_SD_SDMMC_CLEAR_IT    __HAL_SD_SDIO_CLEAR_IT\r\n#define SDMMC_STATIC_FLAGS         SDIO_STATIC_FLAGS\r\n#define SDMMC_CMD0TIMEOUT          SDIO_CMD0TIMEOUT\r\n#define SD_SDMMC_SEND_IF_COND      SD_SDIO_SEND_IF_COND\r\n/* alias CMSIS */\r\n#define SDMMC1_IRQn       SDIO_IRQn\r\n#define SDMMC1_IRQHandler SDIO_IRQHandler\r\n#endif\r\n\r\n#if defined(STM32F7) || defined(STM32L4)\r\n#define SD_SDIO_DISABLED         SD_SDMMC_DISABLED\r\n#define SD_SDIO_FUNCTION_BUSY    SD_SDMMC_FUNCTION_BUSY\r\n#define SD_SDIO_FUNCTION_FAILED  SD_SDMMC_FUNCTION_FAILED\r\n#define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION\r\n#define SD_CMD_SDIO_SEN_OP_COND  SD_CMD_SDMMC_SEN_OP_COND\r\n#define SD_CMD_SDIO_RW_DIRECT    SD_CMD_SDMMC_RW_DIRECT\r\n#define SD_CMD_SDIO_RW_EXTENDED  SD_CMD_SDMMC_RW_EXTENDED\r\n#define __HAL_SD_SDIO_ENABLE     __HAL_SD_SDMMC_ENABLE\r\n#define __HAL_SD_SDIO_DISABLE    __HAL_SD_SDMMC_DISABLE\r\n#define __HAL_SD_SDIO_DMA_ENABLE __HAL_SD_SDMMC_DMA_ENABLE\r\n#define __HAL_SD_SDIO_DMA_DISABL __HAL_SD_SDMMC_DMA_DISABLE\r\n#define __HAL_SD_SDIO_ENABLE_IT  __HAL_SD_SDMMC_ENABLE_IT\r\n#define __HAL_SD_SDIO_DISABLE_IT __HAL_SD_SDMMC_DISABLE_IT\r\n#define __HAL_SD_SDIO_GET_FLAG   __HAL_SD_SDMMC_GET_FLAG\r\n#define __HAL_SD_SDIO_CLEAR_FLAG __HAL_SD_SDMMC_CLEAR_FLAG\r\n#define __HAL_SD_SDIO_GET_IT     __HAL_SD_SDMMC_GET_IT\r\n#define __HAL_SD_SDIO_CLEAR_IT   __HAL_SD_SDMMC_CLEAR_IT\r\n#define SDIO_STATIC_FLAGS        SDMMC_STATIC_FLAGS\r\n#define SDIO_CMD0TIMEOUT         SDMMC_CMD0TIMEOUT\r\n#define SD_SDIO_SEND_IF_COND     SD_SDMMC_SEND_IF_COND\r\n/* alias CMSIS for compatibilities */\r\n#define SDIO_IRQn       SDMMC1_IRQn\r\n#define SDIO_IRQHandler SDMMC1_IRQHandler\r\n#endif\r\n\r\n#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2)\r\n#define HAL_SD_CardCIDTypedef    HAL_SD_CardCIDTypeDef\r\n#define HAL_SD_CardCSDTypedef    HAL_SD_CardCSDTypeDef\r\n#define HAL_SD_CardStatusTypedef HAL_SD_CardStatusTypeDef\r\n#define HAL_SD_CardStateTypedef  HAL_SD_CardStateTypeDef\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SMARTCARD_Aliased_Macros HAL SMARTCARD Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __SMARTCARD_ENABLE_IT           __HAL_SMARTCARD_ENABLE_IT\r\n#define __SMARTCARD_DISABLE_IT          __HAL_SMARTCARD_DISABLE_IT\r\n#define __SMARTCARD_ENABLE              __HAL_SMARTCARD_ENABLE\r\n#define __SMARTCARD_DISABLE             __HAL_SMARTCARD_DISABLE\r\n#define __SMARTCARD_DMA_REQUEST_ENABLE  __HAL_SMARTCARD_DMA_REQUEST_ENABLE\r\n#define __SMARTCARD_DMA_REQUEST_DISABLE __HAL_SMARTCARD_DMA_REQUEST_DISABLE\r\n\r\n#define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE\r\n#define __SMARTCARD_GETCLOCKSOURCE     SMARTCARD_GETCLOCKSOURCE\r\n\r\n#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SMBUS_Aliased_Macros HAL SMBUS Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_SMBUS_RESET_CR1         SMBUS_RESET_CR1\r\n#define __HAL_SMBUS_RESET_CR2         SMBUS_RESET_CR2\r\n#define __HAL_SMBUS_GENERATE_START    SMBUS_GENERATE_START\r\n#define __HAL_SMBUS_GET_ADDR_MATCH    SMBUS_GET_ADDR_MATCH\r\n#define __HAL_SMBUS_GET_DIR           SMBUS_GET_DIR\r\n#define __HAL_SMBUS_GET_STOP_MODE     SMBUS_GET_STOP_MODE\r\n#define __HAL_SMBUS_GET_PEC_MODE      SMBUS_GET_PEC_MODE\r\n#define __HAL_SMBUS_GET_ALERT_ENABLED SMBUS_GET_ALERT_ENABLED\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SPI_Aliased_Macros HAL SPI Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_SPI_1LINE_TX  SPI_1LINE_TX\r\n#define __HAL_SPI_1LINE_RX  SPI_1LINE_RX\r\n#define __HAL_SPI_RESET_CRC SPI_RESET_CRC\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_UART_GETCLOCKSOURCE   UART_GETCLOCKSOURCE\r\n#define __HAL_UART_MASK_COMPUTATION UART_MASK_COMPUTATION\r\n#define __UART_GETCLOCKSOURCE       UART_GETCLOCKSOURCE\r\n#define __UART_MASK_COMPUTATION     UART_MASK_COMPUTATION\r\n\r\n#define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD\r\n\r\n#define IS_UART_ONEBIT_SAMPLE   IS_UART_ONE_BIT_SAMPLE\r\n#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_USART_Aliased_Macros HAL USART Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __USART_ENABLE_IT  __HAL_USART_ENABLE_IT\r\n#define __USART_DISABLE_IT __HAL_USART_DISABLE_IT\r\n#define __USART_ENABLE     __HAL_USART_ENABLE\r\n#define __USART_DISABLE    __HAL_USART_DISABLE\r\n\r\n#define __HAL_USART_GETCLOCKSOURCE USART_GETCLOCKSOURCE\r\n#define __USART_GETCLOCKSOURCE     USART_GETCLOCKSOURCE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_USB_Aliased_Macros HAL USB Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define USB_EXTI_LINE_WAKEUP USB_WAKEUP_EXTI_LINE\r\n\r\n#define USB_FS_EXTI_TRIGGER_RISING_EDGE  USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE\r\n#define USB_FS_EXTI_TRIGGER_FALLING_EDGE USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE\r\n#define USB_FS_EXTI_TRIGGER_BOTH_EDGE    USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE\r\n#define USB_FS_EXTI_LINE_WAKEUP          USB_OTG_FS_WAKEUP_EXTI_LINE\r\n\r\n#define USB_HS_EXTI_TRIGGER_RISING_EDGE  USB_OTG_HS_WAKEUP_EXTI_RISING_EDGE\r\n#define USB_HS_EXTI_TRIGGER_FALLING_EDGE USB_OTG_HS_WAKEUP_EXTI_FALLING_EDGE\r\n#define USB_HS_EXTI_TRIGGER_BOTH_EDGE    USB_OTG_HS_WAKEUP_EXTI_RISING_FALLING_EDGE\r\n#define USB_HS_EXTI_LINE_WAKEUP          USB_OTG_HS_WAKEUP_EXTI_LINE\r\n\r\n#define __HAL_USB_EXTI_ENABLE_IT                 __HAL_USB_WAKEUP_EXTI_ENABLE_IT\r\n#define __HAL_USB_EXTI_DISABLE_IT                __HAL_USB_WAKEUP_EXTI_DISABLE_IT\r\n#define __HAL_USB_EXTI_GET_FLAG                  __HAL_USB_WAKEUP_EXTI_GET_FLAG\r\n#define __HAL_USB_EXTI_CLEAR_FLAG                __HAL_USB_WAKEUP_EXTI_CLEAR_FLAG\r\n#define __HAL_USB_EXTI_SET_RISING_EDGE_TRIGGER   __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_USB_EXTI_SET_FALLING_EDGE_TRIGGER  __HAL_USB_WAKEUP_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_USB_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE\r\n\r\n#define __HAL_USB_FS_EXTI_ENABLE_IT                 __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT\r\n#define __HAL_USB_FS_EXTI_DISABLE_IT                __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT\r\n#define __HAL_USB_FS_EXTI_GET_FLAG                  __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG\r\n#define __HAL_USB_FS_EXTI_CLEAR_FLAG                __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG\r\n#define __HAL_USB_FS_EXTI_SET_RISING_EGDE_TRIGGER   __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_USB_FS_EXTI_SET_FALLING_EGDE_TRIGGER  __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_USB_FS_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE\r\n#define __HAL_USB_FS_EXTI_GENERATE_SWIT             __HAL_USB_OTG_FS_WAKEUP_EXTI_GENERATE_SWIT\r\n\r\n#define __HAL_USB_HS_EXTI_ENABLE_IT                 __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_IT\r\n#define __HAL_USB_HS_EXTI_DISABLE_IT                __HAL_USB_OTG_HS_WAKEUP_EXTI_DISABLE_IT\r\n#define __HAL_USB_HS_EXTI_GET_FLAG                  __HAL_USB_OTG_HS_WAKEUP_EXTI_GET_FLAG\r\n#define __HAL_USB_HS_EXTI_CLEAR_FLAG                __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG\r\n#define __HAL_USB_HS_EXTI_SET_RISING_EGDE_TRIGGER   __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_USB_HS_EXTI_SET_FALLING_EGDE_TRIGGER  __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_USB_HS_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE\r\n#define __HAL_USB_HS_EXTI_GENERATE_SWIT             __HAL_USB_OTG_HS_WAKEUP_EXTI_GENERATE_SWIT\r\n\r\n#define HAL_PCD_ActiveRemoteWakeup   HAL_PCD_ActivateRemoteWakeup\r\n#define HAL_PCD_DeActiveRemoteWakeup HAL_PCD_DeActivateRemoteWakeup\r\n\r\n#define HAL_PCD_SetTxFiFo HAL_PCDEx_SetTxFiFo\r\n#define HAL_PCD_SetRxFiFo HAL_PCDEx_SetRxFiFo\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_TIM_Aliased_Macros HAL TIM Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_TIM_SetICPrescalerValue   TIM_SET_ICPRESCALERVALUE\r\n#define __HAL_TIM_ResetICPrescalerValue TIM_RESET_ICPRESCALERVALUE\r\n\r\n#define TIM_GET_ITSTATUS __HAL_TIM_GET_IT_SOURCE\r\n#define TIM_GET_CLEAR_IT __HAL_TIM_CLEAR_IT\r\n\r\n#define __HAL_TIM_GET_ITSTATUS __HAL_TIM_GET_IT_SOURCE\r\n\r\n#define __HAL_TIM_DIRECTION_STATUS __HAL_TIM_IS_TIM_COUNTING_DOWN\r\n#define __HAL_TIM_PRESCALER        __HAL_TIM_SET_PRESCALER\r\n#define __HAL_TIM_SetCounter       __HAL_TIM_SET_COUNTER\r\n#define __HAL_TIM_GetCounter       __HAL_TIM_GET_COUNTER\r\n#define __HAL_TIM_SetAutoreload    __HAL_TIM_SET_AUTORELOAD\r\n#define __HAL_TIM_GetAutoreload    __HAL_TIM_GET_AUTORELOAD\r\n#define __HAL_TIM_SetClockDivision __HAL_TIM_SET_CLOCKDIVISION\r\n#define __HAL_TIM_GetClockDivision __HAL_TIM_GET_CLOCKDIVISION\r\n#define __HAL_TIM_SetICPrescaler   __HAL_TIM_SET_ICPRESCALER\r\n#define __HAL_TIM_GetICPrescaler   __HAL_TIM_GET_ICPRESCALER\r\n#define __HAL_TIM_SetCompare       __HAL_TIM_SET_COMPARE\r\n#define __HAL_TIM_GetCompare       __HAL_TIM_GET_COMPARE\r\n\r\n#define TIM_BREAKINPUTSOURCE_DFSDM TIM_BREAKINPUTSOURCE_DFSDM1\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_ETH_EXTI_ENABLE_IT                 __HAL_ETH_WAKEUP_EXTI_ENABLE_IT\r\n#define __HAL_ETH_EXTI_DISABLE_IT                __HAL_ETH_WAKEUP_EXTI_DISABLE_IT\r\n#define __HAL_ETH_EXTI_GET_FLAG                  __HAL_ETH_WAKEUP_EXTI_GET_FLAG\r\n#define __HAL_ETH_EXTI_CLEAR_FLAG                __HAL_ETH_WAKEUP_EXTI_CLEAR_FLAG\r\n#define __HAL_ETH_EXTI_SET_RISING_EGDE_TRIGGER   __HAL_ETH_WAKEUP_EXTI_ENABLE_RISING_EDGE_TRIGGER\r\n#define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER  __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER\r\n#define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER\r\n\r\n#define ETH_PROMISCIOUSMODE_ENABLE  ETH_PROMISCUOUS_MODE_ENABLE\r\n#define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE\r\n#define IS_ETH_PROMISCIOUS_MODE     IS_ETH_PROMISCUOUS_MODE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_LTDC_Aliased_Macros HAL LTDC Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_LTDC_LAYER         LTDC_LAYER\r\n#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SAI_Aliased_Macros HAL SAI Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define SAI_OUTPUTDRIVE_DISABLED        SAI_OUTPUTDRIVE_DISABLE\r\n#define SAI_OUTPUTDRIVE_ENABLED         SAI_OUTPUTDRIVE_ENABLE\r\n#define SAI_MASTERDIVIDER_ENABLED       SAI_MASTERDIVIDER_ENABLE\r\n#define SAI_MASTERDIVIDER_DISABLED      SAI_MASTERDIVIDER_DISABLE\r\n#define SAI_STREOMODE                   SAI_STEREOMODE\r\n#define SAI_FIFOStatus_Empty            SAI_FIFOSTATUS_EMPTY\r\n#define SAI_FIFOStatus_Less1QuarterFull SAI_FIFOSTATUS_LESS1QUARTERFULL\r\n#define SAI_FIFOStatus_1QuarterFull     SAI_FIFOSTATUS_1QUARTERFULL\r\n#define SAI_FIFOStatus_HalfFull         SAI_FIFOSTATUS_HALFFULL\r\n#define SAI_FIFOStatus_3QuartersFull    SAI_FIFOSTATUS_3QUARTERFULL\r\n#define SAI_FIFOStatus_Full             SAI_FIFOSTATUS_FULL\r\n#define IS_SAI_BLOCK_MONO_STREO_MODE    IS_SAI_BLOCK_MONO_STEREO_MODE\r\n#define SAI_SYNCHRONOUS_EXT             SAI_SYNCHRONOUS_EXT_SAI1\r\n#define SAI_SYNCEXT_IN_ENABLE           SAI_SYNCEXT_OUTBLOCKA_ENABLE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* ___STM32_HAL_LEGACY */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal.h\r\n * @author  MCD Application Team\r\n * @brief   This file contains all the functions prototypes for the HAL\r\n *          module driver.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_H\r\n#define __STM32F1xx_HAL_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_conf.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup HAL\r\n * @{\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_Exported_Constants HAL Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup HAL_TICK_FREQ Tick Frequency\r\n * @{\r\n */\r\ntypedef enum { HAL_TICK_FREQ_10HZ = 100U, HAL_TICK_FREQ_100HZ = 10U, HAL_TICK_FREQ_1KHZ = 1U, HAL_TICK_FREQ_DEFAULT = HAL_TICK_FREQ_1KHZ } HAL_TickFreqTypeDef;\r\n/**\r\n * @}\r\n */\r\n/* Exported types ------------------------------------------------------------*/\r\nextern uint32_t            uwTickPrio;\r\nextern HAL_TickFreqTypeDef uwTickFreq;\r\n\r\n/**\r\n * @}\r\n */\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup HAL_Exported_Macros HAL Exported Macros\r\n * @{\r\n */\r\n\r\n/** @defgroup DBGMCU_Freeze_Unfreeze Freeze Unfreeze Peripherals in Debug mode\r\n * @brief   Freeze/Unfreeze Peripherals in Debug mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @{\r\n */\r\n\r\n/* Peripherals on APB1 */\r\n/**\r\n * @brief  TIM2 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM2()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM2_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM2() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM2_STOP)\r\n\r\n/**\r\n * @brief  TIM3 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM3()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM3_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM3() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM3_STOP)\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM4_STOP)\r\n/**\r\n * @brief  TIM4 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM4()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM4_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM4() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM4_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM5_STOP)\r\n/**\r\n * @brief  TIM5 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM5()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM5_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM5() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM5_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM6_STOP)\r\n/**\r\n * @brief  TIM6 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM6()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM6_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM6() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM6_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM7_STOP)\r\n/**\r\n * @brief  TIM7 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM7()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM7_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM7() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM7_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM12_STOP)\r\n/**\r\n * @brief  TIM12 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM12()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM12_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM12() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM12_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM13_STOP)\r\n/**\r\n * @brief  TIM13 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM13()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM13_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM13() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM13_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM14_STOP)\r\n/**\r\n * @brief  TIM14 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM14()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM14_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM14() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM14_STOP)\r\n#endif\r\n\r\n/**\r\n * @brief  WWDG Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_WWDG()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_WWDG_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_WWDG() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_WWDG_STOP)\r\n\r\n/**\r\n * @brief  IWDG Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_IWDG()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_IWDG_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_IWDG() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_IWDG_STOP)\r\n\r\n/**\r\n * @brief  I2C1 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT)\r\n#define __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT)\r\n\r\n#if defined(DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT)\r\n/**\r\n * @brief  I2C2 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT)\r\n#define __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_CAN1_STOP)\r\n/**\r\n * @brief  CAN1 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_CAN1()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN1_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_CAN1() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN1_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_CAN2_STOP)\r\n/**\r\n * @brief  CAN2 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_CAN2()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN2_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_CAN2() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN2_STOP)\r\n#endif\r\n\r\n/* Peripherals on APB2 */\r\n#if defined(DBGMCU_CR_DBG_TIM1_STOP)\r\n/**\r\n * @brief  TIM1 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM1()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM1_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM1() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM1_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM8_STOP)\r\n/**\r\n * @brief  TIM8 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM8()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM8_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM8() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM8_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM9_STOP)\r\n/**\r\n * @brief  TIM9 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM9()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM9_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM9() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM9_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM10_STOP)\r\n/**\r\n * @brief  TIM10 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM10()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM10_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM10() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM10_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM11_STOP)\r\n/**\r\n * @brief  TIM11 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM11()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM11_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM11() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM11_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM15_STOP)\r\n/**\r\n * @brief  TIM15 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM15()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM15_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM15() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM15_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM16_STOP)\r\n/**\r\n * @brief  TIM16 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM16()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM16_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM16() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM16_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM17_STOP)\r\n/**\r\n * @brief  TIM17 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM17()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM17_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM17() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM17_STOP)\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_Private_Macros HAL Private Macros\r\n * @{\r\n */\r\n#define IS_TICKFREQ(FREQ) (((FREQ) == HAL_TICK_FREQ_10HZ) || ((FREQ) == HAL_TICK_FREQ_100HZ) || ((FREQ) == HAL_TICK_FREQ_1KHZ))\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup HAL_Exported_Functions\r\n * @{\r\n */\r\n/** @addtogroup HAL_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* Initialization and de-initialization functions  ******************************/\r\nHAL_StatusTypeDef HAL_Init(void);\r\nHAL_StatusTypeDef HAL_DeInit(void);\r\nvoid              HAL_MspInit(void);\r\nvoid              HAL_MspDeInit(void);\r\nHAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup HAL_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* Peripheral Control functions  ************************************************/\r\nvoid                HAL_IncTick(void);\r\nvoid                HAL_Delay(uint32_t Delay);\r\nuint32_t            HAL_GetTick(void);\r\nuint32_t            HAL_GetTickPrio(void);\r\nHAL_StatusTypeDef   HAL_SetTickFreq(HAL_TickFreqTypeDef Freq);\r\nHAL_TickFreqTypeDef HAL_GetTickFreq(void);\r\nvoid                HAL_SuspendTick(void);\r\nvoid                HAL_ResumeTick(void);\r\nuint32_t            HAL_GetHalVersion(void);\r\nuint32_t            HAL_GetREVID(void);\r\nuint32_t            HAL_GetDEVID(void);\r\nuint32_t            HAL_GetUIDw0(void);\r\nuint32_t            HAL_GetUIDw1(void);\r\nuint32_t            HAL_GetUIDw2(void);\r\nvoid                HAL_DBGMCU_EnableDBGSleepMode(void);\r\nvoid                HAL_DBGMCU_DisableDBGSleepMode(void);\r\nvoid                HAL_DBGMCU_EnableDBGStopMode(void);\r\nvoid                HAL_DBGMCU_DisableDBGStopMode(void);\r\nvoid                HAL_DBGMCU_EnableDBGStandbyMode(void);\r\nvoid                HAL_DBGMCU_DisableDBGStandbyMode(void);\r\nvoid                HAL_GetUID(uint32_t *UID);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* Private types -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/** @defgroup HAL_Private_Variables HAL Private Variables\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n/* Private constants ---------------------------------------------------------*/\r\n/** @defgroup HAL_Private_Constants HAL Private Constants\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n/* Private macros ------------------------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_adc.h\r\n * @author  MCD Application Team\r\n * @brief   Header file containing functions prototypes of ADC HAL library.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_ADC_H\r\n#define __STM32F1xx_HAL_ADC_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup ADC\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup ADC_Exported_Types ADC Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Structure definition of ADC and regular group initialization\r\n * @note   Parameters of this structure are shared within 2 scopes:\r\n *          - Scope entire ADC (affects regular and injected groups): DataAlign, ScanConvMode.\r\n *          - Scope regular group: ContinuousConvMode, NbrOfConversion, DiscontinuousConvMode, NbrOfDiscConversion, ExternalTrigConvEdge, ExternalTrigConv.\r\n * @note   The setting of these parameters with function HAL_ADC_Init() is conditioned to ADC state.\r\n *         ADC can be either disabled or enabled without conversion on going on regular group.\r\n */\r\ntypedef struct {\r\n  uint32_t DataAlign;          /*!< Specifies ADC data alignment to right (MSB on register bit 11 and LSB on register bit 0) (default setting)\r\n                                    or to left (if regular group: MSB on register bit 15 and LSB on register bit 4, if injected group (MSB kept as signed value due to potential negative value after offset\r\n                                  application): MSB on register bit 14 and LSB on register bit 3).          This parameter can be a value of @ref ADC_Data_align */\r\n  uint32_t ScanConvMode;       /*!< Configures the sequencer of regular and injected groups.\r\n                                    This parameter can be associated to parameter 'DiscontinuousConvMode' to have main sequence subdivided in successive parts.\r\n                                    If disabled: Conversion is performed in single mode (one channel converted, the one defined in rank 1).\r\n                                                 Parameters 'NbrOfConversion' and 'InjectedNbrOfConversion' are discarded (equivalent to set to 1).\r\n                                    If enabled:  Conversions are performed in sequence mode (multiple ranks defined by 'NbrOfConversion'/'InjectedNbrOfConversion' and each channel rank).\r\n                                                 Scan direction is upward: from rank1 to rank 'n'.\r\n                                    This parameter can be a value of @ref ADC_Scan_mode\r\n                                    Note: For regular group, this parameter should be enabled in conversion either by polling (HAL_ADC_Start with Discontinuous mode and NbrOfDiscConversion=1)\r\n                                          or by DMA (HAL_ADC_Start_DMA), but not by interruption (HAL_ADC_Start_IT): in scan mode, interruption is triggered only on the\r\n                                          the last conversion of the sequence. All previous conversions would be overwritten by the last one.\r\n                                          Injected group used with scan mode has not this constraint: each rank has its own result register, no data is overwritten. */\r\n  uint32_t ContinuousConvMode; /*!< Specifies whether the conversion is performed in single mode (one conversion) or continuous mode for regular group,\r\n                                    after the selected trigger occurred (software start or external trigger).\r\n                                    This parameter can be set to ENABLE or DISABLE. */\r\n  uint32_t NbrOfConversion;    /*!< Specifies the number of ranks that will be converted within the regular group sequencer.\r\n                                    To use regular group sequencer and convert several ranks, parameter 'ScanConvMode' must be enabled.\r\n                                    This parameter must be a number between Min_Data = 1 and Max_Data = 16. */\r\n  uint32_t\r\n      DiscontinuousConvMode; /*!< Specifies whether the conversions sequence of regular group is performed in Complete-sequence/Discontinuous-sequence (main sequence subdivided in successive parts).\r\n                                  Discontinuous mode is used only if sequencer is enabled (parameter 'ScanConvMode'). If sequencer is disabled, this parameter is discarded.\r\n                                  Discontinuous mode can be enabled only if continuous mode is disabled. If continuous mode is enabled, this parameter setting is discarded.\r\n                                  This parameter can be set to ENABLE or DISABLE. */\r\n  uint32_t NbrOfDiscConversion; /*!< Specifies the number of discontinuous conversions in which the  main sequence of regular group (parameter NbrOfConversion) will be subdivided.\r\n                                     If parameter 'DiscontinuousConvMode' is disabled, this parameter is discarded.\r\n                                     This parameter must be a number between Min_Data = 1 and Max_Data = 8. */\r\n  uint32_t ExternalTrigConv;    /*!< Selects the external event used to trigger the conversion start of regular group.\r\n                                     If set to ADC_SOFTWARE_START, external triggers are disabled.\r\n                                     If set to external trigger source, triggering is on event rising edge.\r\n                                     This parameter can be a value of @ref ADC_External_trigger_source_Regular */\r\n} ADC_InitTypeDef;\r\n\r\n/**\r\n * @brief  Structure definition of ADC channel for regular group\r\n * @note   The setting of these parameters with function HAL_ADC_ConfigChannel() is conditioned to ADC state.\r\n *         ADC can be either disabled or enabled without conversion on going on regular group.\r\n */\r\ntypedef struct {\r\n  uint32_t\r\n      Channel;           /*!< Specifies the channel to configure into ADC regular group.\r\n                              This parameter can be a value of @ref ADC_channels\r\n                              Note: Depending on devices, some channels may not be available on package pins. Refer to device datasheet for channels availability.\r\n                              Note: On STM32F1 devices with several ADC: Only ADC1 can access internal measurement channels (VrefInt/TempSensor)\r\n                              Note: On STM32F10xx8 and STM32F10xxB devices: A low-amplitude voltage glitch may be generated (on ADC input 0) on the PA0 pin, when the ADC is converting with injection\r\n                            trigger.      It is advised to distribute the analog channels so that Channel 0 is configured as an injected channel.      Refer to errata sheet of these devices for more details. */\r\n  uint32_t Rank;         /*!< Specifies the rank in the regular group sequencer\r\n                              This parameter can be a value of @ref ADC_regular_rank\r\n                              Note: In case of need to disable a channel or change order of conversion sequencer, rank containing a previous channel setting can be overwritten by the new channel setting (or\r\n                            parameter number of conversions can be adjusted) */\r\n  uint32_t SamplingTime; /*!< Sampling time value to be set for the selected channel.\r\n                              Unit: ADC clock cycles\r\n                              Conversion time is the addition of sampling time and processing time (12.5 ADC clock cycles at ADC resolution 12 bits).\r\n                              This parameter can be a value of @ref ADC_sampling_times\r\n                              Caution: This parameter updates the parameter property of the channel, that can be used into regular and/or injected groups.\r\n                                       If this same channel has been previously configured in the other group (regular/injected), it will be updated to last setting.\r\n                              Note: In case of usage of internal measurement channels (VrefInt/TempSensor),\r\n                                    sampling time constraints must be respected (sampling time can be adjusted in function of ADC clock frequency and sampling time setting)\r\n                                    Refer to device datasheet for timings values, parameters TS_vrefint, TS_temp (values rough order: 5us to 17.1us min). */\r\n} ADC_ChannelConfTypeDef;\r\n\r\n/**\r\n * @brief  ADC Configuration analog watchdog definition\r\n * @note   The setting of these parameters with function is conditioned to ADC state.\r\n *         ADC state can be either disabled or enabled without conversion on going on regular and injected groups.\r\n */\r\ntypedef struct {\r\n  uint32_t WatchdogMode;   /*!< Configures the ADC analog watchdog mode: single/all channels, regular/injected group.\r\n                                This parameter can be a value of @ref ADC_analog_watchdog_mode. */\r\n  uint32_t Channel;        /*!< Selects which ADC channel to monitor by analog watchdog.\r\n                                This parameter has an effect only if watchdog mode is configured on single channel (parameter WatchdogMode)\r\n                                This parameter can be a value of @ref ADC_channels. */\r\n  uint32_t ITMode;         /*!< Specifies whether the analog watchdog is configured in interrupt or polling mode.\r\n                                This parameter can be set to ENABLE or DISABLE */\r\n  uint32_t HighThreshold;  /*!< Configures the ADC analog watchdog High threshold value.\r\n                                This parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF. */\r\n  uint32_t LowThreshold;   /*!< Configures the ADC analog watchdog High threshold value.\r\n                                This parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF. */\r\n  uint32_t WatchdogNumber; /*!< Reserved for future use, can be set to 0 */\r\n} ADC_AnalogWDGConfTypeDef;\r\n\r\n/**\r\n * @brief  HAL ADC state machine: ADC states definition (bitfields)\r\n */\r\n/* States of ADC global scope */\r\n#define HAL_ADC_STATE_RESET         0x00000000U /*!< ADC not yet initialized or disabled */\r\n#define HAL_ADC_STATE_READY         0x00000001U /*!< ADC peripheral ready for use */\r\n#define HAL_ADC_STATE_BUSY_INTERNAL 0x00000002U /*!< ADC is busy to internal process (initialization, calibration) */\r\n#define HAL_ADC_STATE_TIMEOUT       0x00000004U /*!< TimeOut occurrence */\r\n\r\n/* States of ADC errors */\r\n#define HAL_ADC_STATE_ERROR_INTERNAL 0x00000010U /*!< Internal error occurrence */\r\n#define HAL_ADC_STATE_ERROR_CONFIG   0x00000020U /*!< Configuration error occurrence */\r\n#define HAL_ADC_STATE_ERROR_DMA      0x00000040U /*!< DMA error occurrence */\r\n\r\n/* States of ADC group regular */\r\n#define HAL_ADC_STATE_REG_BUSY                                                                                                     \\\r\n  0x00000100U                               /*!< A conversion on group regular is ongoing or can occur (either by continuous mode, \\\r\n                                                external trigger, low power auto power-on, multimode ADC master control) */\r\n#define HAL_ADC_STATE_REG_EOC   0x00000200U /*!< Conversion data available on group regular */\r\n#define HAL_ADC_STATE_REG_OVR   0x00000400U /*!< Not available on STM32F1 device: Overrun occurrence */\r\n#define HAL_ADC_STATE_REG_EOSMP 0x00000800U /*!< Not available on STM32F1 device: End Of Sampling flag raised  */\r\n\r\n/* States of ADC group injected */\r\n#define HAL_ADC_STATE_INJ_BUSY                                                                                                          \\\r\n  0x00001000U                               /*!< A conversion on group injected is ongoing or can occur (either by auto-injection mode, \\\r\n                                                external trigger, low power auto power-on, multimode ADC master control) */\r\n#define HAL_ADC_STATE_INJ_EOC   0x00002000U /*!< Conversion data available on group injected */\r\n#define HAL_ADC_STATE_INJ_JQOVF 0x00004000U /*!< Not available on STM32F1 device: Injected queue overflow occurrence */\r\n\r\n/* States of ADC analog watchdogs */\r\n#define HAL_ADC_STATE_AWD1 0x00010000U /*!< Out-of-window occurrence of analog watchdog 1 */\r\n#define HAL_ADC_STATE_AWD2 0x00020000U /*!< Not available on STM32F1 device: Out-of-window occurrence of analog watchdog 2 */\r\n#define HAL_ADC_STATE_AWD3 0x00040000U /*!< Not available on STM32F1 device: Out-of-window occurrence of analog watchdog 3 */\r\n\r\n/* States of ADC multi-mode */\r\n#define HAL_ADC_STATE_MULTIMODE_SLAVE 0x00100000U /*!< ADC in multimode slave state, controlled by another ADC master ( */\r\n\r\n/**\r\n * @brief  ADC handle Structure definition\r\n */\r\ntypedef struct {\r\n  ADC_TypeDef *Instance; /*!< Register base address */\r\n\r\n  ADC_InitTypeDef Init; /*!< ADC required parameters */\r\n\r\n  DMA_HandleTypeDef *DMA_Handle; /*!< Pointer DMA Handler */\r\n\r\n  HAL_LockTypeDef Lock; /*!< ADC locking object */\r\n\r\n  __IO uint32_t State; /*!< ADC communication state (bitmap of ADC states) */\r\n\r\n  __IO uint32_t ErrorCode; /*!< ADC Error code */\r\n} ADC_HandleTypeDef;\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup ADC_Exported_Constants ADC Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup ADC_Error_Code ADC Error Code\r\n * @{\r\n */\r\n#define HAL_ADC_ERROR_NONE 0x00U /*!< No error                                              */\r\n#define HAL_ADC_ERROR_INTERNAL                                                      \\\r\n  0x01U                         /*!< ADC IP internal error: if problem of clocking, \\\r\n                                     enable/disable, erroneous state                       */\r\n#define HAL_ADC_ERROR_OVR 0x02U /*!< Overrun error                                         */\r\n#define HAL_ADC_ERROR_DMA 0x04U /*!< DMA transfer error                                    */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Data_align ADC data alignment\r\n * @{\r\n */\r\n#define ADC_DATAALIGN_RIGHT 0x00000000U\r\n#define ADC_DATAALIGN_LEFT  ((uint32_t)ADC_CR2_ALIGN)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Scan_mode ADC scan mode\r\n * @{\r\n */\r\n/* Note: Scan mode values are not among binary choices ENABLE/DISABLE for     */\r\n/*       compatibility with other STM32 devices having a sequencer with       */\r\n/*       additional options.                                                  */\r\n#define ADC_SCAN_DISABLE 0x00000000U\r\n#define ADC_SCAN_ENABLE  ((uint32_t)ADC_CR1_SCAN)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_External_trigger_edge_Regular ADC external trigger enable for regular group\r\n * @{\r\n */\r\n#define ADC_EXTERNALTRIGCONVEDGE_NONE   0x00000000U\r\n#define ADC_EXTERNALTRIGCONVEDGE_RISING ((uint32_t)ADC_CR2_EXTTRIG)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_channels ADC channels\r\n * @{\r\n */\r\n/* Note: Depending on devices, some channels may not be available on package  */\r\n/*       pins. Refer to device datasheet for channels availability.           */\r\n#define ADC_CHANNEL_0  0x00000000U\r\n#define ADC_CHANNEL_1  ((uint32_t)(ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_2  ((uint32_t)(ADC_SQR3_SQ1_1))\r\n#define ADC_CHANNEL_3  ((uint32_t)(ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_4  ((uint32_t)(ADC_SQR3_SQ1_2))\r\n#define ADC_CHANNEL_5  ((uint32_t)(ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_6  ((uint32_t)(ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_1))\r\n#define ADC_CHANNEL_7  ((uint32_t)(ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_8  ((uint32_t)(ADC_SQR3_SQ1_3))\r\n#define ADC_CHANNEL_9  ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_10 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_1))\r\n#define ADC_CHANNEL_11 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_12 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_2))\r\n#define ADC_CHANNEL_13 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_14 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_1))\r\n#define ADC_CHANNEL_15 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_16 ((uint32_t)(ADC_SQR3_SQ1_4))\r\n#define ADC_CHANNEL_17 ((uint32_t)(ADC_SQR3_SQ1_4 | ADC_SQR3_SQ1_0))\r\n\r\n// #define ADC_CHANNEL_TEMPSENSOR ADC_CHANNEL_16 /* ADC internal channel (no connection on device pin) */\r\n// #define ADC_CHANNEL_VREFINT    ADC_CHANNEL_17 /* ADC internal channel (no connection on device pin) */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_sampling_times ADC sampling times\r\n * @{\r\n */\r\n#define ADC_SAMPLETIME_1CYCLE_5    0x00000000U                                                          /*!< Sampling time 1.5 ADC clock cycle */\r\n#define ADC_SAMPLETIME_7CYCLES_5   ((uint32_t)(ADC_SMPR2_SMP0_0))                                       /*!< Sampling time 7.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_13CYCLES_5  ((uint32_t)(ADC_SMPR2_SMP0_1))                                       /*!< Sampling time 13.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_28CYCLES_5  ((uint32_t)(ADC_SMPR2_SMP0_1 | ADC_SMPR2_SMP0_0))                    /*!< Sampling time 28.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_41CYCLES_5  ((uint32_t)(ADC_SMPR2_SMP0_2))                                       /*!< Sampling time 41.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_55CYCLES_5  ((uint32_t)(ADC_SMPR2_SMP0_2 | ADC_SMPR2_SMP0_0))                    /*!< Sampling time 55.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_71CYCLES_5  ((uint32_t)(ADC_SMPR2_SMP0_2 | ADC_SMPR2_SMP0_1))                    /*!< Sampling time 71.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_239CYCLES_5 ((uint32_t)(ADC_SMPR2_SMP0_2 | ADC_SMPR2_SMP0_1 | ADC_SMPR2_SMP0_0)) /*!< Sampling time 239.5 ADC clock cycles */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_regular_rank ADC rank into regular group\r\n * @{\r\n */\r\n#define ADC_REGULAR_RANK_1  0x00000001U\r\n#define ADC_REGULAR_RANK_2  0x00000002U\r\n#define ADC_REGULAR_RANK_3  0x00000003U\r\n#define ADC_REGULAR_RANK_4  0x00000004U\r\n#define ADC_REGULAR_RANK_5  0x00000005U\r\n#define ADC_REGULAR_RANK_6  0x00000006U\r\n#define ADC_REGULAR_RANK_7  0x00000007U\r\n#define ADC_REGULAR_RANK_8  0x00000008U\r\n#define ADC_REGULAR_RANK_9  0x00000009U\r\n#define ADC_REGULAR_RANK_10 0x0000000AU\r\n#define ADC_REGULAR_RANK_11 0x0000000BU\r\n#define ADC_REGULAR_RANK_12 0x0000000CU\r\n#define ADC_REGULAR_RANK_13 0x0000000DU\r\n#define ADC_REGULAR_RANK_14 0x0000000EU\r\n#define ADC_REGULAR_RANK_15 0x0000000FU\r\n#define ADC_REGULAR_RANK_16 0x00000010U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_analog_watchdog_mode ADC analog watchdog mode\r\n * @{\r\n */\r\n#define ADC_ANALOGWATCHDOG_NONE            0x00000000U\r\n#define ADC_ANALOGWATCHDOG_SINGLE_REG      ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_AWDEN))\r\n#define ADC_ANALOGWATCHDOG_SINGLE_INJEC    ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_JAWDEN))\r\n#define ADC_ANALOGWATCHDOG_SINGLE_REGINJEC ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_AWDEN | ADC_CR1_JAWDEN))\r\n#define ADC_ANALOGWATCHDOG_ALL_REG         ((uint32_t)ADC_CR1_AWDEN)\r\n#define ADC_ANALOGWATCHDOG_ALL_INJEC       ((uint32_t)ADC_CR1_JAWDEN)\r\n#define ADC_ANALOGWATCHDOG_ALL_REGINJEC    ((uint32_t)(ADC_CR1_AWDEN | ADC_CR1_JAWDEN))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_conversion_group ADC conversion group\r\n * @{\r\n */\r\n#define ADC_REGULAR_GROUP          ((uint32_t)(ADC_FLAG_EOC))\r\n#define ADC_INJECTED_GROUP         ((uint32_t)(ADC_FLAG_JEOC))\r\n#define ADC_REGULAR_INJECTED_GROUP ((uint32_t)(ADC_FLAG_EOC | ADC_FLAG_JEOC))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Event_type ADC Event type\r\n * @{\r\n */\r\n#define ADC_AWD_EVENT ((uint32_t)ADC_FLAG_AWD) /*!< ADC Analog watchdog event */\r\n\r\n#define ADC_AWD1_EVENT ADC_AWD_EVENT /*!< ADC Analog watchdog 1 event: Alternate naming for compatibility with other STM32 devices having several analog watchdogs */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_interrupts_definition ADC interrupts definition\r\n * @{\r\n */\r\n#define ADC_IT_EOC  ADC_CR1_EOCIE  /*!< ADC End of Regular Conversion interrupt source */\r\n#define ADC_IT_JEOC ADC_CR1_JEOCIE /*!< ADC End of Injected Conversion interrupt source */\r\n#define ADC_IT_AWD  ADC_CR1_AWDIE  /*!< ADC Analog watchdog interrupt source */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_flags_definition ADC flags definition\r\n * @{\r\n */\r\n#define ADC_FLAG_STRT  ADC_SR_STRT  /*!< ADC Regular group start flag */\r\n#define ADC_FLAG_JSTRT ADC_SR_JSTRT /*!< ADC Injected group start flag */\r\n#define ADC_FLAG_EOC   ADC_SR_EOC   /*!< ADC End of Regular conversion flag */\r\n#define ADC_FLAG_JEOC  ADC_SR_JEOC  /*!< ADC End of Injected conversion flag */\r\n#define ADC_FLAG_AWD   ADC_SR_AWD   /*!< ADC Analog watchdog flag */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private constants ---------------------------------------------------------*/\r\n\r\n/** @addtogroup ADC_Private_Constants ADC Private Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup ADC_conversion_cycles ADC conversion cycles\r\n * @{\r\n */\r\n/* ADC conversion cycles (unit: ADC clock cycles)                           */\r\n/* (selected sampling time + conversion time of 12.5 ADC clock cycles, with */\r\n/* resolution 12 bits)                                                      */\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_1CYCLE5    14U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_7CYCLES5   20U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_13CYCLES5  26U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_28CYCLES5  41U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_41CYCLES5  54U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_55CYCLES5  68U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_71CYCLES5  84U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_239CYCLES5 252U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_sampling_times_all_channels ADC sampling times all channels\r\n * @{\r\n */\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2 \\\r\n  (ADC_SMPR2_SMP9_2 | ADC_SMPR2_SMP8_2 | ADC_SMPR2_SMP7_2 | ADC_SMPR2_SMP6_2 | ADC_SMPR2_SMP5_2 | ADC_SMPR2_SMP4_2 | ADC_SMPR2_SMP3_2 | ADC_SMPR2_SMP2_2 | ADC_SMPR2_SMP1_2 | ADC_SMPR2_SMP0_2)\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2 \\\r\n  (ADC_SMPR1_SMP17_2 | ADC_SMPR1_SMP16_2 | ADC_SMPR1_SMP15_2 | ADC_SMPR1_SMP14_2 | ADC_SMPR1_SMP13_2 | ADC_SMPR1_SMP12_2 | ADC_SMPR1_SMP11_2 | ADC_SMPR1_SMP10_2)\r\n\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1 \\\r\n  (ADC_SMPR2_SMP9_1 | ADC_SMPR2_SMP8_1 | ADC_SMPR2_SMP7_1 | ADC_SMPR2_SMP6_1 | ADC_SMPR2_SMP5_1 | ADC_SMPR2_SMP4_1 | ADC_SMPR2_SMP3_1 | ADC_SMPR2_SMP2_1 | ADC_SMPR2_SMP1_1 | ADC_SMPR2_SMP0_1)\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1 \\\r\n  (ADC_SMPR1_SMP17_1 | ADC_SMPR1_SMP16_1 | ADC_SMPR1_SMP15_1 | ADC_SMPR1_SMP14_1 | ADC_SMPR1_SMP13_1 | ADC_SMPR1_SMP12_1 | ADC_SMPR1_SMP11_1 | ADC_SMPR1_SMP10_1)\r\n\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0 \\\r\n  (ADC_SMPR2_SMP9_0 | ADC_SMPR2_SMP8_0 | ADC_SMPR2_SMP7_0 | ADC_SMPR2_SMP6_0 | ADC_SMPR2_SMP5_0 | ADC_SMPR2_SMP4_0 | ADC_SMPR2_SMP3_0 | ADC_SMPR2_SMP2_0 | ADC_SMPR2_SMP1_0 | ADC_SMPR2_SMP0_0)\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0 \\\r\n  (ADC_SMPR1_SMP17_0 | ADC_SMPR1_SMP16_0 | ADC_SMPR1_SMP15_0 | ADC_SMPR1_SMP14_0 | ADC_SMPR1_SMP13_0 | ADC_SMPR1_SMP12_0 | ADC_SMPR1_SMP11_0 | ADC_SMPR1_SMP10_0)\r\n\r\n#define ADC_SAMPLETIME_1CYCLE5_SMPR2ALLCHANNELS    0x00000000U\r\n#define ADC_SAMPLETIME_7CYCLES5_SMPR2ALLCHANNELS   (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0)\r\n#define ADC_SAMPLETIME_13CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1)\r\n#define ADC_SAMPLETIME_28CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0)\r\n#define ADC_SAMPLETIME_41CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2)\r\n#define ADC_SAMPLETIME_55CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0)\r\n#define ADC_SAMPLETIME_71CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1)\r\n#define ADC_SAMPLETIME_239CYCLES5_SMPR2ALLCHANNELS (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0)\r\n\r\n#define ADC_SAMPLETIME_1CYCLE5_SMPR1ALLCHANNELS    0x00000000U\r\n#define ADC_SAMPLETIME_7CYCLES5_SMPR1ALLCHANNELS   (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0)\r\n#define ADC_SAMPLETIME_13CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1)\r\n#define ADC_SAMPLETIME_28CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0)\r\n#define ADC_SAMPLETIME_41CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2)\r\n#define ADC_SAMPLETIME_55CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0)\r\n#define ADC_SAMPLETIME_71CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1)\r\n#define ADC_SAMPLETIME_239CYCLES5_SMPR1ALLCHANNELS (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0)\r\n/**\r\n * @}\r\n */\r\n\r\n/* Combination of all post-conversion flags bits: EOC/EOS, JEOC/JEOS, OVR, AWDx */\r\n#define ADC_FLAG_POSTCONV_ALL (ADC_FLAG_EOC | ADC_FLAG_JEOC | ADC_FLAG_AWD)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n\r\n/** @defgroup ADC_Exported_Macros ADC Exported Macros\r\n * @{\r\n */\r\n/* Macro for internal HAL driver usage, and possibly can be used into code of */\r\n/* final user.                                                                */\r\n\r\n/**\r\n * @brief Enable the ADC peripheral\r\n * @note ADC enable requires a delay for ADC stabilization time\r\n *       (refer to device datasheet, parameter tSTAB)\r\n * @note On STM32F1, if ADC is already enabled this macro trigs a conversion\r\n *       SW start on regular group.\r\n * @param __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#define __HAL_ADC_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR2, (ADC_CR2_ADON)))\r\n\r\n/**\r\n * @brief Disable the ADC peripheral\r\n * @param __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#define __HAL_ADC_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CR2, (ADC_CR2_ADON)))\r\n\r\n/** @brief Enable the ADC end of conversion interrupt.\r\n * @param __HANDLE__: ADC handle\r\n * @param __INTERRUPT__: ADC Interrupt\r\n *          This parameter can be any combination of the following values:\r\n *            @arg ADC_IT_EOC: ADC End of Regular Conversion interrupt source\r\n *            @arg ADC_IT_JEOC: ADC End of Injected Conversion interrupt source\r\n *            @arg ADC_IT_AWD: ADC Analog watchdog interrupt source\r\n * @retval None\r\n */\r\n#define __HAL_ADC_ENABLE_IT(__HANDLE__, __INTERRUPT__) (SET_BIT((__HANDLE__)->Instance->CR1, (__INTERRUPT__)))\r\n\r\n/** @brief Disable the ADC end of conversion interrupt.\r\n * @param __HANDLE__: ADC handle\r\n * @param __INTERRUPT__: ADC Interrupt\r\n *          This parameter can be any combination of the following values:\r\n *            @arg ADC_IT_EOC: ADC End of Regular Conversion interrupt source\r\n *            @arg ADC_IT_JEOC: ADC End of Injected Conversion interrupt source\r\n *            @arg ADC_IT_AWD: ADC Analog watchdog interrupt source\r\n * @retval None\r\n */\r\n#define __HAL_ADC_DISABLE_IT(__HANDLE__, __INTERRUPT__) (CLEAR_BIT((__HANDLE__)->Instance->CR1, (__INTERRUPT__)))\r\n\r\n/** @brief  Checks if the specified ADC interrupt source is enabled or disabled.\r\n * @param __HANDLE__: ADC handle\r\n * @param __INTERRUPT__: ADC interrupt source to check\r\n *          This parameter can be any combination of the following values:\r\n *            @arg ADC_IT_EOC: ADC End of Regular Conversion interrupt source\r\n *            @arg ADC_IT_JEOC: ADC End of Injected Conversion interrupt source\r\n *            @arg ADC_IT_AWD: ADC Analog watchdog interrupt source\r\n * @retval None\r\n */\r\n#define __HAL_ADC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR1 & (__INTERRUPT__)) == (__INTERRUPT__))\r\n\r\n/** @brief Get the selected ADC's flag status.\r\n * @param __HANDLE__: ADC handle\r\n * @param __FLAG__: ADC flag\r\n *          This parameter can be any combination of the following values:\r\n *            @arg ADC_FLAG_STRT: ADC Regular group start flag\r\n *            @arg ADC_FLAG_JSTRT: ADC Injected group start flag\r\n *            @arg ADC_FLAG_EOC: ADC End of Regular conversion flag\r\n *            @arg ADC_FLAG_JEOC: ADC End of Injected conversion flag\r\n *            @arg ADC_FLAG_AWD: ADC Analog watchdog flag\r\n * @retval None\r\n */\r\n#define __HAL_ADC_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))\r\n\r\n/** @brief Clear the ADC's pending flags\r\n * @param __HANDLE__: ADC handle\r\n * @param __FLAG__: ADC flag\r\n *          This parameter can be any combination of the following values:\r\n *            @arg ADC_FLAG_STRT: ADC Regular group start flag\r\n *            @arg ADC_FLAG_JSTRT: ADC Injected group start flag\r\n *            @arg ADC_FLAG_EOC: ADC End of Regular conversion flag\r\n *            @arg ADC_FLAG_JEOC: ADC End of Injected conversion flag\r\n *            @arg ADC_FLAG_AWD: ADC Analog watchdog flag\r\n * @retval None\r\n */\r\n#define __HAL_ADC_CLEAR_FLAG(__HANDLE__, __FLAG__) (WRITE_REG((__HANDLE__)->Instance->SR, ~(__FLAG__)))\r\n\r\n/** @brief  Reset ADC handle state\r\n * @param  __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#define __HAL_ADC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_ADC_STATE_RESET)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro ------------------------------------------------------------*/\r\n\r\n/** @defgroup ADC_Private_Macros ADC Private Macros\r\n * @{\r\n */\r\n/* Macro reserved for internal HAL driver usage, not intended to be used in   */\r\n/* code of final user.                                                        */\r\n\r\n/**\r\n * @brief Verification of ADC state: enabled or disabled\r\n * @param __HANDLE__: ADC handle\r\n * @retval SET (ADC enabled) or RESET (ADC disabled)\r\n */\r\n#define ADC_IS_ENABLE(__HANDLE__) (((((__HANDLE__)->Instance->CR2 & ADC_CR2_ADON) == ADC_CR2_ADON)) ? SET : RESET)\r\n\r\n/**\r\n * @brief Test if conversion trigger of regular group is software start\r\n *        or external trigger.\r\n * @param __HANDLE__: ADC handle\r\n * @retval SET (software start) or RESET (external trigger)\r\n */\r\n#define ADC_IS_SOFTWARE_START_REGULAR(__HANDLE__) (READ_BIT((__HANDLE__)->Instance->CR2, ADC_CR2_EXTSEL) == ADC_SOFTWARE_START)\r\n\r\n/**\r\n * @brief Test if conversion trigger of injected group is software start\r\n *        or external trigger.\r\n * @param __HANDLE__: ADC handle\r\n * @retval SET (software start) or RESET (external trigger)\r\n */\r\n#define ADC_IS_SOFTWARE_START_INJECTED(__HANDLE__) (READ_BIT((__HANDLE__)->Instance->CR2, ADC_CR2_JEXTSEL) == ADC_INJECTED_SOFTWARE_START)\r\n\r\n/**\r\n * @brief Simultaneously clears and sets specific bits of the handle State\r\n * @note: ADC_STATE_CLR_SET() macro is merely aliased to generic macro MODIFY_REG(),\r\n *        the first parameter is the ADC handle State, the second parameter is the\r\n *        bit field to clear, the third and last parameter is the bit field to set.\r\n * @retval None\r\n */\r\n#define ADC_STATE_CLR_SET MODIFY_REG\r\n\r\n/**\r\n * @brief Clear ADC error code (set it to error code: \"no error\")\r\n * @param __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#define ADC_CLEAR_ERRORCODE(__HANDLE__) ((__HANDLE__)->ErrorCode = HAL_ADC_ERROR_NONE)\r\n\r\n/**\r\n * @brief Set ADC number of conversions into regular channel sequence length.\r\n * @param _NbrOfConversion_: Regular channel sequence length\r\n * @retval None\r\n */\r\n#define ADC_SQR1_L_SHIFT(_NbrOfConversion_) (((_NbrOfConversion_) - (uint8_t)1) << ADC_SQR1_L_Pos)\r\n\r\n/**\r\n * @brief Set the ADC's sample time for channel numbers between 10 and 18.\r\n * @param _SAMPLETIME_: Sample time parameter.\r\n * @param _CHANNELNB_: Channel number.\r\n * @retval None\r\n */\r\n#define ADC_SMPR1(_SAMPLETIME_, _CHANNELNB_) ((_SAMPLETIME_) << (ADC_SMPR1_SMP11_Pos * ((_CHANNELNB_)-10)))\r\n\r\n/**\r\n * @brief Set the ADC's sample time for channel numbers between 0 and 9.\r\n * @param _SAMPLETIME_: Sample time parameter.\r\n * @param _CHANNELNB_: Channel number.\r\n * @retval None\r\n */\r\n#define ADC_SMPR2(_SAMPLETIME_, _CHANNELNB_) ((_SAMPLETIME_) << (ADC_SMPR2_SMP1_Pos * (_CHANNELNB_)))\r\n\r\n/**\r\n * @brief Set the selected regular channel rank for rank between 1 and 6.\r\n * @param _CHANNELNB_: Channel number.\r\n * @param _RANKNB_: Rank number.\r\n * @retval None\r\n */\r\n#define ADC_SQR3_RK(_CHANNELNB_, _RANKNB_) ((_CHANNELNB_) << (ADC_SQR3_SQ2_Pos * ((_RANKNB_)-1)))\r\n\r\n/**\r\n * @brief Set the selected regular channel rank for rank between 7 and 12.\r\n * @param _CHANNELNB_: Channel number.\r\n * @param _RANKNB_: Rank number.\r\n * @retval None\r\n */\r\n#define ADC_SQR2_RK(_CHANNELNB_, _RANKNB_) ((_CHANNELNB_) << (ADC_SQR2_SQ8_Pos * ((_RANKNB_)-7)))\r\n\r\n/**\r\n * @brief Set the selected regular channel rank for rank between 13 and 16.\r\n * @param _CHANNELNB_: Channel number.\r\n * @param _RANKNB_: Rank number.\r\n * @retval None\r\n */\r\n#define ADC_SQR1_RK(_CHANNELNB_, _RANKNB_) ((_CHANNELNB_) << (ADC_SQR1_SQ14_Pos * ((_RANKNB_)-13)))\r\n\r\n/**\r\n * @brief Set the injected sequence length.\r\n * @param _JSQR_JL_: Sequence length.\r\n * @retval None\r\n */\r\n#define ADC_JSQR_JL_SHIFT(_JSQR_JL_) (((_JSQR_JL_)-1) << ADC_JSQR_JL_Pos)\r\n\r\n/**\r\n * @brief Set the selected injected channel rank\r\n *        Note: on STM32F1 devices, channel rank position in JSQR register\r\n *              is depending on total number of ranks selected into\r\n *              injected sequencer (ranks sequence starting from 4-JL)\r\n * @param _CHANNELNB_: Channel number.\r\n * @param _RANKNB_: Rank number.\r\n * @param _JSQR_JL_: Sequence length.\r\n * @retval None\r\n */\r\n#define ADC_JSQR_RK_JL(_CHANNELNB_, _RANKNB_, _JSQR_JL_) ((_CHANNELNB_) << (ADC_JSQR_JSQ2_Pos * ((4 - ((_JSQR_JL_) - (_RANKNB_))) - 1)))\r\n\r\n/**\r\n * @brief Enable ADC continuous conversion mode.\r\n * @param _CONTINUOUS_MODE_: Continuous mode.\r\n * @retval None\r\n */\r\n#define ADC_CR2_CONTINUOUS(_CONTINUOUS_MODE_) ((_CONTINUOUS_MODE_) << ADC_CR2_CONT_Pos)\r\n\r\n/**\r\n * @brief Configures the number of discontinuous conversions for the regular group channels.\r\n * @param _NBR_DISCONTINUOUS_CONV_: Number of discontinuous conversions.\r\n * @retval None\r\n */\r\n#define ADC_CR1_DISCONTINUOUS_NUM(_NBR_DISCONTINUOUS_CONV_) (((_NBR_DISCONTINUOUS_CONV_)-1) << ADC_CR1_DISCNUM_Pos)\r\n\r\n/**\r\n * @brief Enable ADC scan mode to convert multiple ranks with sequencer.\r\n * @param _SCAN_MODE_: Scan conversion mode.\r\n * @retval None\r\n */\r\n/* Note: Scan mode is compared to ENABLE for legacy purpose, this parameter   */\r\n/*       is equivalent to ADC_SCAN_ENABLE.                                    */\r\n#define ADC_CR1_SCAN_SET(_SCAN_MODE_) ((((_SCAN_MODE_) == ADC_SCAN_ENABLE) || ((_SCAN_MODE_) == ENABLE)) ? (ADC_SCAN_ENABLE) : (ADC_SCAN_DISABLE))\r\n\r\n/**\r\n * @brief Get the maximum ADC conversion cycles on all channels.\r\n * Returns the selected sampling time + conversion time (12.5 ADC clock cycles)\r\n * Approximation of sampling time within 4 ranges, returns the highest value:\r\n *   below 7.5 cycles {1.5 cycle; 7.5 cycles},\r\n *   between 13.5 cycles and 28.5 cycles {13.5 cycles; 28.5 cycles}\r\n *   between 41.5 cycles and 71.5 cycles {41.5 cycles; 55.5 cycles; 71.5cycles}\r\n *   equal to 239.5 cycles\r\n * Unit: ADC clock cycles\r\n * @param __HANDLE__: ADC handle\r\n * @retval ADC conversion cycles on all channels\r\n */\r\n#define ADC_CONVCYCLES_MAX_RANGE(__HANDLE__)                                                                                                                                            \\\r\n  (((((__HANDLE__)->Instance->SMPR2 & ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2) == RESET) && (((__HANDLE__)->Instance->SMPR1 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2) == RESET))             \\\r\n       ?                                                                                                                                                                                \\\r\n                                                                                                                                                                                        \\\r\n       (((((__HANDLE__)->Instance->SMPR2 & ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1) == RESET) && (((__HANDLE__)->Instance->SMPR1 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1) == RESET))        \\\r\n            ? ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_7CYCLES5                                                                                                                             \\\r\n            : ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_28CYCLES5)                                                                                                                           \\\r\n       : ((((((__HANDLE__)->Instance->SMPR2 & ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1) == RESET) && (((__HANDLE__)->Instance->SMPR1 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1) == RESET))     \\\r\n           || ((((__HANDLE__)->Instance->SMPR2 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0) == RESET) && (((__HANDLE__)->Instance->SMPR1 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0) == RESET))) \\\r\n              ? ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_71CYCLES5                                                                                                                          \\\r\n              : ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_239CYCLES5))\r\n\r\n#define IS_ADC_DATA_ALIGN(ALIGN) (((ALIGN) == ADC_DATAALIGN_RIGHT) || ((ALIGN) == ADC_DATAALIGN_LEFT))\r\n\r\n#define IS_ADC_SCAN_MODE(SCAN_MODE) (((SCAN_MODE) == ADC_SCAN_DISABLE) || ((SCAN_MODE) == ADC_SCAN_ENABLE))\r\n\r\n#define IS_ADC_EXTTRIG_EDGE(EDGE) (((EDGE) == ADC_EXTERNALTRIGCONVEDGE_NONE) || ((EDGE) == ADC_EXTERNALTRIGCONVEDGE_RISING))\r\n\r\n#define IS_ADC_CHANNEL(CHANNEL)                                                                                                                                                                      \\\r\n  (((CHANNEL) == ADC_CHANNEL_0) || ((CHANNEL) == ADC_CHANNEL_1) || ((CHANNEL) == ADC_CHANNEL_2) || ((CHANNEL) == ADC_CHANNEL_3) || ((CHANNEL) == ADC_CHANNEL_4) || ((CHANNEL) == ADC_CHANNEL_5)      \\\r\n   || ((CHANNEL) == ADC_CHANNEL_6) || ((CHANNEL) == ADC_CHANNEL_7) || ((CHANNEL) == ADC_CHANNEL_8) || ((CHANNEL) == ADC_CHANNEL_9) || ((CHANNEL) == ADC_CHANNEL_10) || ((CHANNEL) == ADC_CHANNEL_11) \\\r\n   || ((CHANNEL) == ADC_CHANNEL_12) || ((CHANNEL) == ADC_CHANNEL_13) || ((CHANNEL) == ADC_CHANNEL_14) || ((CHANNEL) == ADC_CHANNEL_15) || ((CHANNEL) == ADC_CHANNEL_16)                              \\\r\n   || ((CHANNEL) == ADC_CHANNEL_17))\r\n\r\n#define IS_ADC_SAMPLE_TIME(TIME)                                                                                                                                 \\\r\n  (((TIME) == ADC_SAMPLETIME_1CYCLE_5) || ((TIME) == ADC_SAMPLETIME_7CYCLES_5) || ((TIME) == ADC_SAMPLETIME_13CYCLES_5) || ((TIME) == ADC_SAMPLETIME_28CYCLES_5) \\\r\n   || ((TIME) == ADC_SAMPLETIME_41CYCLES_5) || ((TIME) == ADC_SAMPLETIME_55CYCLES_5) || ((TIME) == ADC_SAMPLETIME_71CYCLES_5) || ((TIME) == ADC_SAMPLETIME_239CYCLES_5))\r\n\r\n#define IS_ADC_REGULAR_RANK(CHANNEL)                                                                                                                                                             \\\r\n  (((CHANNEL) == ADC_REGULAR_RANK_1) || ((CHANNEL) == ADC_REGULAR_RANK_2) || ((CHANNEL) == ADC_REGULAR_RANK_3) || ((CHANNEL) == ADC_REGULAR_RANK_4) || ((CHANNEL) == ADC_REGULAR_RANK_5)         \\\r\n   || ((CHANNEL) == ADC_REGULAR_RANK_6) || ((CHANNEL) == ADC_REGULAR_RANK_7) || ((CHANNEL) == ADC_REGULAR_RANK_8) || ((CHANNEL) == ADC_REGULAR_RANK_9) || ((CHANNEL) == ADC_REGULAR_RANK_10)     \\\r\n   || ((CHANNEL) == ADC_REGULAR_RANK_11) || ((CHANNEL) == ADC_REGULAR_RANK_12) || ((CHANNEL) == ADC_REGULAR_RANK_13) || ((CHANNEL) == ADC_REGULAR_RANK_14) || ((CHANNEL) == ADC_REGULAR_RANK_15) \\\r\n   || ((CHANNEL) == ADC_REGULAR_RANK_16))\r\n\r\n#define IS_ADC_ANALOG_WATCHDOG_MODE(WATCHDOG)                                                                                                                                                        \\\r\n  (((WATCHDOG) == ADC_ANALOGWATCHDOG_NONE) || ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_REG) || ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_INJEC) || ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_REGINJEC) \\\r\n   || ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_REG) || ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_INJEC) || ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_REGINJEC))\r\n\r\n#define IS_ADC_CONVERSION_GROUP(CONVERSION) (((CONVERSION) == ADC_REGULAR_GROUP) || ((CONVERSION) == ADC_INJECTED_GROUP) || ((CONVERSION) == ADC_REGULAR_INJECTED_GROUP))\r\n\r\n#define IS_ADC_EVENT_TYPE(EVENT) ((EVENT) == ADC_AWD_EVENT)\r\n\r\n/** @defgroup ADC_range_verification ADC range verification\r\n * For a unique ADC resolution: 12 bits\r\n * @{\r\n */\r\n#define IS_ADC_RANGE(ADC_VALUE) ((ADC_VALUE) <= 0x0FFFU)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_regular_nb_conv_verification ADC regular nb conv verification\r\n * @{\r\n */\r\n#define IS_ADC_REGULAR_NB_CONV(LENGTH) (((LENGTH) >= 1U) && ((LENGTH) <= 16U))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_regular_discontinuous_mode_number_verification ADC regular discontinuous mode number verification\r\n * @{\r\n */\r\n#define IS_ADC_REGULAR_DISCONT_NUMBER(NUMBER) (((NUMBER) >= 1U) && ((NUMBER) <= 8U))\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Include ADC HAL Extension module */\r\n#include \"stm32f1xx_hal_adc_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup ADC_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup ADC_Exported_Functions_Group1\r\n * @{\r\n */\r\n\r\n/* Initialization and de-initialization functions  **********************************/\r\nHAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADC_DeInit(ADC_HandleTypeDef *hadc);\r\nvoid              HAL_ADC_MspInit(ADC_HandleTypeDef *hadc);\r\nvoid              HAL_ADC_MspDeInit(ADC_HandleTypeDef *hadc);\r\n/**\r\n * @}\r\n */\r\n\r\n/* IO operation functions  *****************************************************/\r\n\r\n/** @addtogroup ADC_Exported_Functions_Group2\r\n * @{\r\n */\r\n\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout);\r\nHAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef *hadc, uint32_t EventType, uint32_t Timeout);\r\n\r\n/* Non-blocking mode: Interruption */\r\nHAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef *hadc);\r\n\r\n/* Non-blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length);\r\nHAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef *hadc);\r\n\r\n/* ADC retrieve conversion value intended to be used with polling or interruption */\r\nuint32_t HAL_ADC_GetValue(ADC_HandleTypeDef *hadc);\r\n\r\n/* ADC IRQHandler and Callbacks used in non-blocking modes (Interruption and DMA) */\r\nvoid HAL_ADC_IRQHandler(ADC_HandleTypeDef *hadc);\r\n/**\r\n * @}\r\n */\r\n\r\n/* Peripheral Control functions ***********************************************/\r\n/** @addtogroup ADC_Exported_Functions_Group3\r\n * @{\r\n */\r\nHAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef *hadc, ADC_ChannelConfTypeDef *sConfig);\r\nHAL_StatusTypeDef HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef *hadc, ADC_AnalogWDGConfTypeDef *AnalogWDGConfig);\r\n/**\r\n * @}\r\n */\r\n\r\n/* Peripheral State functions *************************************************/\r\n/** @addtogroup ADC_Exported_Functions_Group4\r\n * @{\r\n */\r\nuint32_t HAL_ADC_GetState(ADC_HandleTypeDef *hadc);\r\nuint32_t HAL_ADC_GetError(ADC_HandleTypeDef *hadc);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Internal HAL driver functions **********************************************/\r\n/** @addtogroup ADC_Private_Functions\r\n * @{\r\n */\r\nHAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef ADC_ConversionStop_Disable(ADC_HandleTypeDef *hadc);\r\nvoid              ADC_StabilizationTime(uint32_t DelayUs);\r\nvoid              ADC_DMAConvCplt(DMA_HandleTypeDef *hdma);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_ADC_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc_ex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_adc_ex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of ADC HAL extension module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_ADC_EX_H\r\n#define __STM32F1xx_HAL_ADC_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup ADCEx\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup ADCEx_Exported_Types ADCEx Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  ADC Configuration injected Channel structure definition\r\n * @note   Parameters of this structure are shared within 2 scopes:\r\n *          - Scope channel: InjectedChannel, InjectedRank, InjectedSamplingTime, InjectedOffset\r\n *          - Scope injected group (affects all channels of injected group): InjectedNbrOfConversion, InjectedDiscontinuousConvMode,\r\n *            AutoInjectedConv, ExternalTrigInjecConvEdge, ExternalTrigInjecConv.\r\n * @note   The setting of these parameters with function HAL_ADCEx_InjectedConfigChannel() is conditioned to ADC state.\r\n *         ADC state can be either:\r\n *          - For all parameters: ADC disabled (this is the only possible ADC state to modify parameter 'ExternalTrigInjecConv')\r\n *          - For all except parameters 'ExternalTrigInjecConv': ADC enabled without conversion on going on injected group.\r\n */\r\ntypedef struct {\r\n  uint32_t InjectedChannel;         /*!< Selection of ADC channel to configure\r\n                                         This parameter can be a value of @ref ADC_channels\r\n                                         Note: Depending on devices, some channels may not be available on package pins. Refer to device datasheet for channels availability.\r\n                                         Note: On STM32F1 devices with several ADC: Only ADC1 can access internal measurement channels (VrefInt/TempSensor)\r\n                                         Note: On STM32F10xx8 and STM32F10xxB devices: A low-amplitude voltage glitch may be generated (on ADC input 0) on the PA0 pin, when the ADC is converting with\r\n                                       injection         trigger.              It is advised to distribute the analog channels so that Channel 0 is configured as an injected channel.              Refer to\r\n                                       errata         sheet of these devices for more details. */\r\n  uint32_t InjectedRank;            /*!< Rank in the injected group sequencer\r\n                                         This parameter must be a value of @ref ADCEx_injected_rank\r\n                                         Note: In case of need to disable a channel or change order of conversion sequencer, rank containing a previous channel setting can be overwritten by the new channel\r\n                                       setting (or parameter number of conversions can be adjusted) */\r\n  uint32_t InjectedSamplingTime;    /*!< Sampling time value to be set for the selected channel.\r\n                                         Unit: ADC clock cycles\r\n                                         Conversion time is the addition of sampling time and processing time (12.5 ADC clock cycles at ADC resolution 12 bits).\r\n                                         This parameter can be a value of @ref ADC_sampling_times\r\n                                         Caution: This parameter updates the parameter property of the channel, that can be used into regular and/or injected groups.\r\n                                                  If this same channel has been previously configured in the other group (regular/injected), it will be updated to last setting.\r\n                                         Note: In case of usage of internal measurement channels (VrefInt/TempSensor),\r\n                                               sampling time constraints must be respected (sampling time can be adjusted in function of ADC clock frequency and sampling time setting)\r\n                                               Refer to device datasheet for timings values, parameters TS_vrefint, TS_temp (values rough order: 5us to 17.1us min). */\r\n  uint32_t InjectedOffset;          /*!< Defines the offset to be subtracted from the raw converted data (for channels set on injected group only).\r\n                                         Offset value must be a positive number.\r\n                                         Depending of ADC resolution selected (12, 10, 8 or 6 bits),\r\n                                         this parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF, 0x3FF, 0xFF or 0x3F respectively. */\r\n  uint32_t InjectedNbrOfConversion; /*!< Specifies the number of ranks that will be converted within the injected group sequencer.\r\n                                         To use the injected group sequencer and convert several ranks, parameter 'ScanConvMode' must be enabled.\r\n                                         This parameter must be a number between Min_Data = 1 and Max_Data = 4.\r\n                                         Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to\r\n                                                  configure a channel on injected group can impact the configuration of other channels previously set. */\r\n  uint32_t\r\n      InjectedDiscontinuousConvMode; /*!< Specifies whether the conversions sequence of injected group is performed in Complete-sequence/Discontinuous-sequence (main sequence subdivided in successive\r\n                                        parts). Discontinuous mode is used only if sequencer is enabled (parameter 'ScanConvMode'). If sequencer is disabled, this parameter is discarded. Discontinuous\r\n                                        mode can be enabled only if continuous mode is disabled. If continuous mode is enabled, this parameter setting is discarded. This parameter can be set to ENABLE\r\n                                        or DISABLE. Note: For injected group, number of discontinuous ranks increment is fixed to one-by-one. Caution: this setting impacts the entire injected group.\r\n                                        Therefore, call of HAL_ADCEx_InjectedConfigChannel() to configure a channel on injected group can impact the configuration of other channels previously set. */\r\n  uint32_t AutoInjectedConv;         /*!< Enables or disables the selected ADC automatic injected group conversion after regular one\r\n                                          This parameter can be set to ENABLE or DISABLE.\r\n                                          Note: To use Automatic injected conversion, discontinuous mode must be disabled ('DiscontinuousConvMode' and 'InjectedDiscontinuousConvMode' set to DISABLE)\r\n                                          Note: To use Automatic injected conversion, injected group external triggers must be disabled ('ExternalTrigInjecConv' set to ADC_SOFTWARE_START)\r\n                                          Note: In case of DMA used with regular group: if DMA configured in normal mode (single shot) JAUTO will be stopped upon DMA transfer complete.\r\n                                                To maintain JAUTO always enabled, DMA must be configured in circular mode.\r\n                                          Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to\r\n                                                   configure a channel on injected group can impact the configuration of other channels previously set. */\r\n  uint32_t ExternalTrigInjecConv;    /*!< Selects the external event used to trigger the conversion start of injected group.\r\n                                          If set to ADC_INJECTED_SOFTWARE_START, external triggers are disabled.\r\n                                          If set to external trigger source, triggering is on event rising edge.\r\n                                          This parameter can be a value of @ref ADCEx_External_trigger_source_Injected\r\n                                          Note: This parameter must be modified when ADC is disabled (before ADC start conversion or after ADC stop conversion).\r\n                                                If ADC is enabled, this parameter setting is bypassed without error reporting (as it can be the expected behaviour in case of another parameter update on\r\n                                        the fly)    Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to\r\n                                                   configure a channel on injected group can impact the configuration of other channels previously set. */\r\n} ADC_InjectionConfTypeDef;\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief  Structure definition of ADC multimode\r\n * @note   The setting of these parameters with function HAL_ADCEx_MultiModeConfigChannel() is conditioned to ADCs state (both ADCs of the common group).\r\n *         State of ADCs of the common group must be: disabled.\r\n */\r\ntypedef struct {\r\n  uint32_t Mode; /*!< Configures the ADC to operate in independent or multi mode.\r\n                      This parameter can be a value of @ref ADCEx_Common_mode\r\n                      Note: In dual mode, a change of channel configuration generates a restart that can produce a loss of synchronization. It is recommended to disable dual mode before any\r\n                    configuration change. Note: In case of simultaneous mode used: Exactly the same sampling time should be configured for the 2 channels that will be sampled simultaneously by ACD1\r\n                    and ADC2. Note: In case of interleaved mode used: To avoid overlap between conversions, maximum sampling time allowed is 7 ADC clock cycles for fast interleaved mode and 14 ADC\r\n                    clock cycles for slow interleaved mode. Note: Some multimode parameters are fixed on STM32F1 and can be configured on other STM32 devices with several ADC (multimode configuration\r\n                    structure can have additional parameters). The equivalences are:\r\n                              - Parameter 'DMAAccessMode': On STM32F1, this parameter is fixed to 1 DMA channel (one DMA channel for both ADC, DMA of ADC master). On other STM32 devices with several\r\n                    ADC, this is equivalent to parameter 'ADC_DMAACCESSMODE_12_10_BITS'.\r\n                              - Parameter 'TwoSamplingDelay': On STM32F1, this parameter is fixed to 7 or 14 ADC clock cycles depending on fast or slow interleaved mode selected. On other STM32\r\n                    devices with several ADC, this is equivalent to parameter 'ADC_TWOSAMPLINGDELAY_7CYCLES' (for fast interleaved mode). */\r\n\r\n} ADC_MultiModeTypeDef;\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup ADCEx_Exported_Constants ADCEx Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup ADCEx_injected_rank ADCEx rank into injected group\r\n * @{\r\n */\r\n#define ADC_INJECTED_RANK_1 0x00000001U\r\n#define ADC_INJECTED_RANK_2 0x00000002U\r\n#define ADC_INJECTED_RANK_3 0x00000003U\r\n#define ADC_INJECTED_RANK_4 0x00000004U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADCEx_External_trigger_edge_Injected ADCEx external trigger enable for injected group\r\n * @{\r\n */\r\n#define ADC_EXTERNALTRIGINJECCONV_EDGE_NONE   0x00000000U\r\n#define ADC_EXTERNALTRIGINJECCONV_EDGE_RISING ((uint32_t)ADC_CR2_JEXTTRIG)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_External_trigger_source_Regular ADC External trigger selection for regular group\r\n * @{\r\n */\r\n/*!< List of external triggers with generic trigger name, independently of    */\r\n/* ADC target, sorted by trigger name:                                        */\r\n\r\n/*!< External triggers of regular group for ADC1&ADC2 only */\r\n#define ADC_EXTERNALTRIGCONV_T1_CC1   ADC1_2_EXTERNALTRIG_T1_CC1\r\n#define ADC_EXTERNALTRIGCONV_T1_CC2   ADC1_2_EXTERNALTRIG_T1_CC2\r\n#define ADC_EXTERNALTRIGCONV_T2_CC2   ADC1_2_EXTERNALTRIG_T2_CC2\r\n#define ADC_EXTERNALTRIGCONV_T3_TRGO  ADC1_2_EXTERNALTRIG_T3_TRGO\r\n#define ADC_EXTERNALTRIGCONV_T4_CC4   ADC1_2_EXTERNALTRIG_T4_CC4\r\n#define ADC_EXTERNALTRIGCONV_EXT_IT11 ADC1_2_EXTERNALTRIG_EXT_IT11\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n/*!< External triggers of regular group for ADC3 only */\r\n#define ADC_EXTERNALTRIGCONV_T2_CC3 ADC3_EXTERNALTRIG_T2_CC3\r\n#define ADC_EXTERNALTRIGCONV_T3_CC1 ADC3_EXTERNALTRIG_T3_CC1\r\n#define ADC_EXTERNALTRIGCONV_T5_CC1 ADC3_EXTERNALTRIG_T5_CC1\r\n#define ADC_EXTERNALTRIGCONV_T5_CC3 ADC3_EXTERNALTRIG_T5_CC3\r\n#define ADC_EXTERNALTRIGCONV_T8_CC1 ADC3_EXTERNALTRIG_T8_CC1\r\n#endif /* STM32F103xE || defined STM32F103xG */\r\n\r\n/*!< External triggers of regular group for all ADC instances */\r\n#define ADC_EXTERNALTRIGCONV_T1_CC3 ADC1_2_3_EXTERNALTRIG_T1_CC3\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n/*!< Note: TIM8_TRGO is available on ADC1 and ADC2 only in high-density and   */\r\n/*         XL-density devices.                                                */\r\n/*         To use it on ADC or ADC2, a remap of trigger must be done from     */\r\n/*         EXTI line 11 to TIM8_TRGO with macro:                              */\r\n/*           __HAL_AFIO_REMAP_ADC1_ETRGREG_ENABLE()                           */\r\n/*           __HAL_AFIO_REMAP_ADC2_ETRGREG_ENABLE()                           */\r\n\r\n/* Note for internal constant value management: If TIM8_TRGO is available,    */\r\n/* its definition is set to value for ADC1&ADC2 by default and changed to     */\r\n/* value for ADC3 by HAL ADC driver if ADC3 is selected.                      */\r\n#define ADC_EXTERNALTRIGCONV_T8_TRGO ADC1_2_EXTERNALTRIG_T8_TRGO\r\n#endif /* STM32F101xE || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#define ADC_SOFTWARE_START ADC1_2_3_SWSTART\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADCEx_External_trigger_source_Injected ADCEx External trigger selection for injected group\r\n * @{\r\n */\r\n/*!< List of external triggers with generic trigger name, independently of    */\r\n/* ADC target, sorted by trigger name:                                        */\r\n\r\n/*!< External triggers of injected group for ADC1&ADC2 only */\r\n#define ADC_EXTERNALTRIGINJECCONV_T2_TRGO  ADC1_2_EXTERNALTRIGINJEC_T2_TRGO\r\n#define ADC_EXTERNALTRIGINJECCONV_T2_CC1   ADC1_2_EXTERNALTRIGINJEC_T2_CC1\r\n#define ADC_EXTERNALTRIGINJECCONV_T3_CC4   ADC1_2_EXTERNALTRIGINJEC_T3_CC4\r\n#define ADC_EXTERNALTRIGINJECCONV_T4_TRGO  ADC1_2_EXTERNALTRIGINJEC_T4_TRGO\r\n#define ADC_EXTERNALTRIGINJECCONV_EXT_IT15 ADC1_2_EXTERNALTRIGINJEC_EXT_IT15\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n/*!< External triggers of injected group for ADC3 only */\r\n#define ADC_EXTERNALTRIGINJECCONV_T4_CC3  ADC3_EXTERNALTRIGINJEC_T4_CC3\r\n#define ADC_EXTERNALTRIGINJECCONV_T8_CC2  ADC3_EXTERNALTRIGINJEC_T8_CC2\r\n#define ADC_EXTERNALTRIGINJECCONV_T5_TRGO ADC3_EXTERNALTRIGINJEC_T5_TRGO\r\n#define ADC_EXTERNALTRIGINJECCONV_T5_CC4  ADC3_EXTERNALTRIGINJEC_T5_CC4\r\n#endif /* STM32F103xE || defined STM32F103xG */\r\n\r\n/*!< External triggers of injected group for all ADC instances */\r\n#define ADC_EXTERNALTRIGINJECCONV_T1_CC4  ADC1_2_3_EXTERNALTRIGINJEC_T1_CC4\r\n#define ADC_EXTERNALTRIGINJECCONV_T1_TRGO ADC1_2_3_EXTERNALTRIGINJEC_T1_TRGO\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n/*!< Note: TIM8_CC4 is available on ADC1 and ADC2 only in high-density and    */\r\n/*         XL-density devices.                                                */\r\n/*         To use it on ADC1 or ADC2, a remap of trigger must be done from    */\r\n/*         EXTI line 11 to TIM8_CC4 with macro:                               */\r\n/*           __HAL_AFIO_REMAP_ADC1_ETRGINJ_ENABLE()                           */\r\n/*           __HAL_AFIO_REMAP_ADC2_ETRGINJ_ENABLE()                           */\r\n\r\n/* Note for internal constant value management: If TIM8_CC4 is available,     */\r\n/* its definition is set to value for ADC1&ADC2 by default and changed to     */\r\n/* value for ADC3 by HAL ADC driver if ADC3 is selected.                      */\r\n#define ADC_EXTERNALTRIGINJECCONV_T8_CC4 ADC1_2_EXTERNALTRIGINJEC_T8_CC4\r\n#endif /* STM32F101xE || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#define ADC_INJECTED_SOFTWARE_START ADC1_2_3_JSWSTART\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/** @defgroup ADCEx_Common_mode ADC Extended Dual ADC Mode\r\n * @{\r\n */\r\n#define ADC_MODE_INDEPENDENT               0x00000000U                     /*!< ADC dual mode disabled (ADC independent mode) */\r\n#define ADC_DUALMODE_REGSIMULT_INJECSIMULT ((uint32_t)(ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Combined regular simultaneous + injected simultaneous mode, on groups regular and injected */\r\n#define ADC_DUALMODE_REGSIMULT_ALTERTRIG   ((uint32_t)(ADC_CR1_DUALMOD_1)) /*!< ADC dual mode enabled: Combined regular simultaneous + alternate trigger mode, on groups regular and injected */\r\n#define ADC_DUALMODE_INJECSIMULT_INTERLFAST                                                                                                                                                          \\\r\n  ((uint32_t)(ADC_CR1_DUALMOD_1 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Combined injected simultaneous + fast interleaved mode, on groups regular and injected (delay between ADC sampling \\\r\n                                                         phases: 7 ADC clock cycles (equivalent to parameter \"TwoSamplingDelay\" set to \"ADC_TWOSAMPLINGDELAY_7CYCLES\" on other STM32 devices)) */\r\n#define ADC_DUALMODE_INJECSIMULT_INTERLSLOW                                                                                                                                                           \\\r\n  ((uint32_t)(ADC_CR1_DUALMOD_2)) /*!< ADC dual mode enabled: Combined injected simultaneous + slow Interleaved mode, on groups regular and injected (delay between ADC sampling phases: 14 ADC clock \\\r\n                                     cycles (equivalent to parameter \"TwoSamplingDelay\" set to \"ADC_TWOSAMPLINGDELAY_7CYCLES\" on other STM32 devices)) */\r\n#define ADC_DUALMODE_INJECSIMULT ((uint32_t)(ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Injected simultaneous mode, on group injected */\r\n#define ADC_DUALMODE_REGSIMULT   ((uint32_t)(ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_1)) /*!< ADC dual mode enabled: Regular simultaneous mode, on group regular */\r\n#define ADC_DUALMODE_INTERLFAST                                                                                                                                                                      \\\r\n  ((uint32_t)(ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_1 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Fast interleaved mode, on group regular (delay between ADC sampling phases: 7 ADC clock cycles \\\r\n                                                                             (equivalent to parameter \"TwoSamplingDelay\" set to \"ADC_TWOSAMPLINGDELAY_7CYCLES\" on other STM32 devices)) */\r\n#define ADC_DUALMODE_INTERLSLOW                                                                                                                                                        \\\r\n  ((uint32_t)(ADC_CR1_DUALMOD_3)) /*!< ADC dual mode enabled: Slow interleaved mode, on group regular (delay between ADC sampling phases: 14 ADC clock cycles (equivalent to parameter \\\r\n                                     \"TwoSamplingDelay\" set to \"ADC_TWOSAMPLINGDELAY_7CYCLES\" on other STM32 devices)) */\r\n#define ADC_DUALMODE_ALTERTRIG ((uint32_t)(ADC_CR1_DUALMOD_3 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Alternate trigger mode, on group injected */\r\n/**\r\n * @}\r\n */\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private constants ---------------------------------------------------------*/\r\n\r\n/** @addtogroup ADCEx_Private_Constants ADCEx Private Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup ADCEx_Internal_HAL_driver_Ext_trig_src_Regular ADC Extended Internal HAL driver trigger selection for regular group\r\n * @{\r\n */\r\n/* List of external triggers of regular group for ADC1, ADC2, ADC3 (if ADC    */\r\n/* instance is available on the selected device).                             */\r\n/* (used internally by HAL driver. To not use into HAL structure parameters)  */\r\n\r\n/* External triggers of regular group for ADC1&ADC2 (if ADCx available) */\r\n#define ADC1_2_EXTERNALTRIG_T1_CC1   0x00000000U\r\n#define ADC1_2_EXTERNALTRIG_T1_CC2   ((uint32_t)(ADC_CR2_EXTSEL_0))\r\n#define ADC1_2_EXTERNALTRIG_T2_CC2   ((uint32_t)(ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))\r\n#define ADC1_2_EXTERNALTRIG_T3_TRGO  ((uint32_t)(ADC_CR2_EXTSEL_2))\r\n#define ADC1_2_EXTERNALTRIG_T4_CC4   ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_0))\r\n#define ADC1_2_EXTERNALTRIG_EXT_IT11 ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1))\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/* Note: TIM8_TRGO is available on ADC1 and ADC2 only in high-density and     */\r\n/* XL-density devices.                                                        */\r\n#define ADC1_2_EXTERNALTRIG_T8_TRGO ADC1_2_EXTERNALTRIG_EXT_IT11\r\n#endif\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n/* External triggers of regular group for ADC3 */\r\n#define ADC3_EXTERNALTRIG_T3_CC1  ADC1_2_EXTERNALTRIG_T1_CC1\r\n#define ADC3_EXTERNALTRIG_T2_CC3  ADC1_2_EXTERNALTRIG_T1_CC2\r\n#define ADC3_EXTERNALTRIG_T8_CC1  ADC1_2_EXTERNALTRIG_T2_CC2\r\n#define ADC3_EXTERNALTRIG_T8_TRGO ADC1_2_EXTERNALTRIG_T3_TRGO\r\n#define ADC3_EXTERNALTRIG_T5_CC1  ADC1_2_EXTERNALTRIG_T4_CC4\r\n#define ADC3_EXTERNALTRIG_T5_CC3  ADC1_2_EXTERNALTRIG_EXT_IT11\r\n#endif\r\n\r\n/* External triggers of regular group for ADC1&ADC2&ADC3 (if ADCx available) */\r\n#define ADC1_2_3_EXTERNALTRIG_T1_CC3 ((uint32_t)(ADC_CR2_EXTSEL_1))\r\n#define ADC1_2_3_SWSTART             ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADCEx_Internal_HAL_driver_Ext_trig_src_Injected ADC Extended Internal HAL driver trigger selection for injected group\r\n * @{\r\n */\r\n/* List of external triggers of injected group for ADC1, ADC2, ADC3 (if ADC    */\r\n/* instance is available on the selected device).                             */\r\n/* (used internally by HAL driver. To not use into HAL structure parameters)  */\r\n\r\n/* External triggers of injected group for ADC1&ADC2 (if ADCx available) */\r\n#define ADC1_2_EXTERNALTRIGINJEC_T2_TRGO  ((uint32_t)(ADC_CR2_JEXTSEL_1))\r\n#define ADC1_2_EXTERNALTRIGINJEC_T2_CC1   ((uint32_t)(ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0))\r\n#define ADC1_2_EXTERNALTRIGINJEC_T3_CC4   ((uint32_t)(ADC_CR2_JEXTSEL_2))\r\n#define ADC1_2_EXTERNALTRIGINJEC_T4_TRGO  ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_0))\r\n#define ADC1_2_EXTERNALTRIGINJEC_EXT_IT15 ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1))\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/* Note: TIM8_CC4 is available on ADC1 and ADC2 only in high-density and      */\r\n/* XL-density devices.                                                        */\r\n#define ADC1_2_EXTERNALTRIGINJEC_T8_CC4 ADC1_2_EXTERNALTRIGINJEC_EXT_IT15\r\n#endif\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n/* External triggers of injected group for ADC3 */\r\n#define ADC3_EXTERNALTRIGINJEC_T4_CC3  ADC1_2_EXTERNALTRIGINJEC_T2_TRGO\r\n#define ADC3_EXTERNALTRIGINJEC_T8_CC2  ADC1_2_EXTERNALTRIGINJEC_T2_CC1\r\n#define ADC3_EXTERNALTRIGINJEC_T8_CC4  ADC1_2_EXTERNALTRIGINJEC_T3_CC4\r\n#define ADC3_EXTERNALTRIGINJEC_T5_TRGO ADC1_2_EXTERNALTRIGINJEC_T4_TRGO\r\n#define ADC3_EXTERNALTRIGINJEC_T5_CC4  ADC1_2_EXTERNALTRIGINJEC_EXT_IT15\r\n#endif /* STM32F103xE || defined STM32F103xG */\r\n\r\n/* External triggers of injected group for ADC1&ADC2&ADC3 (if ADCx available) */\r\n#define ADC1_2_3_EXTERNALTRIGINJEC_T1_TRGO 0x00000000U\r\n#define ADC1_2_3_EXTERNALTRIGINJEC_T1_CC4  ((uint32_t)(ADC_CR2_JEXTSEL_0))\r\n#define ADC1_2_3_JSWSTART                  ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0))\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n\r\n/** @defgroup ADCEx_Private_Macro ADCEx Private Macro\r\n * @{\r\n */\r\n/* Macro reserved for internal HAL driver usage, not intended to be used in   */\r\n/* code of final user.                                                        */\r\n\r\n/**\r\n * @brief For devices with 3 ADCs: Defines the external trigger source\r\n *        for regular group according to ADC into common group ADC1&ADC2 or\r\n *        ADC3 (some triggers with same source have different value to\r\n *        be programmed into ADC EXTSEL bits of CR2 register).\r\n *        For devices with 2 ADCs or less: this macro makes no change.\r\n * @param __HANDLE__: ADC handle\r\n * @param __EXT_TRIG_CONV__: External trigger selected for regular group.\r\n * @retval External trigger to be programmed into EXTSEL bits of CR2 register\r\n */\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define ADC_CFGR_EXTSEL(__HANDLE__, __EXT_TRIG_CONV__) \\\r\n  (((((__HANDLE__)->Instance) == ADC3)) ? (((__EXT_TRIG_CONV__) == ADC_EXTERNALTRIGCONV_T8_TRGO) ? (ADC3_EXTERNALTRIG_T8_TRGO) : (__EXT_TRIG_CONV__)) : (__EXT_TRIG_CONV__))\r\n#else\r\n#define ADC_CFGR_EXTSEL(__HANDLE__, __EXT_TRIG_CONV__) (__EXT_TRIG_CONV__)\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n/**\r\n * @brief For devices with 3 ADCs: Defines the external trigger source\r\n *        for injected group according to ADC into common group ADC1&ADC2 or\r\n *        ADC3 (some triggers with same source have different value to\r\n *        be programmed into ADC JEXTSEL bits of CR2 register).\r\n *        For devices with 2 ADCs or less: this macro makes no change.\r\n * @param __HANDLE__: ADC handle\r\n * @param __EXT_TRIG_INJECTCONV__: External trigger selected for injected group.\r\n * @retval External trigger to be programmed into JEXTSEL bits of CR2 register\r\n */\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define ADC_CFGR_JEXTSEL(__HANDLE__, __EXT_TRIG_INJECTCONV__) \\\r\n  (((((__HANDLE__)->Instance) == ADC3)) ? (((__EXT_TRIG_INJECTCONV__) == ADC_EXTERNALTRIGINJECCONV_T8_CC4) ? (ADC3_EXTERNALTRIGINJEC_T8_CC4) : (__EXT_TRIG_INJECTCONV__)) : (__EXT_TRIG_INJECTCONV__))\r\n#else\r\n#define ADC_CFGR_JEXTSEL(__HANDLE__, __EXT_TRIG_INJECTCONV__) (__EXT_TRIG_INJECTCONV__)\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n/**\r\n * @brief Verification if multimode is enabled for the selected ADC (multimode ADC master or ADC slave) (applicable for devices with several ADCs)\r\n * @param __HANDLE__: ADC handle\r\n * @retval Multimode state: RESET if multimode is disabled, other value if multimode is enabled\r\n */\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define ADC_MULTIMODE_IS_ENABLE(__HANDLE__) (((((__HANDLE__)->Instance) == ADC1) || (((__HANDLE__)->Instance) == ADC2)) ? (ADC1->CR1 & ADC_CR1_DUALMOD) : (RESET))\r\n#else\r\n#define ADC_MULTIMODE_IS_ENABLE(__HANDLE__) (RESET)\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @brief Verification of condition for ADC start conversion: ADC must be in non-multimode, or multimode with handle of ADC master (applicable for devices with several ADCs)\r\n * @param __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define ADC_NONMULTIMODE_OR_MULTIMODEMASTER(__HANDLE__) (((((__HANDLE__)->Instance) == ADC2)) ? ((ADC1->CR1 & ADC_CR1_DUALMOD) == RESET) : (!RESET))\r\n#else\r\n#define ADC_NONMULTIMODE_OR_MULTIMODEMASTER(__HANDLE__) (!RESET)\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @brief Check ADC multimode setting: In case of multimode, check whether ADC master of the selected ADC has feature auto-injection enabled (applicable for devices with several ADCs)\r\n * @param __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define ADC_MULTIMODE_AUTO_INJECTED(__HANDLE__) (((((__HANDLE__)->Instance) == ADC1) || (((__HANDLE__)->Instance) == ADC2)) ? (ADC1->CR1 & ADC_CR1_JAUTO) : (RESET))\r\n#else\r\n#define ADC_MULTIMODE_AUTO_INJECTED(__HANDLE__) (RESET)\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief Set handle of the other ADC sharing the common multimode settings\r\n * @param __HANDLE__: ADC handle\r\n * @param __HANDLE_OTHER_ADC__: other ADC handle\r\n * @retval None\r\n */\r\n#define ADC_COMMON_ADC_OTHER(__HANDLE__, __HANDLE_OTHER_ADC__) ((__HANDLE_OTHER_ADC__)->Instance = ADC2)\r\n\r\n/**\r\n * @brief Set handle of the ADC slave associated to the ADC master\r\n * On STM32F1 devices, ADC slave is always ADC2 (this can be different\r\n * on other STM32 devices)\r\n * @param __HANDLE_MASTER__: ADC master handle\r\n * @param __HANDLE_SLAVE__: ADC slave handle\r\n * @retval None\r\n */\r\n#define ADC_MULTI_SLAVE(__HANDLE_MASTER__, __HANDLE_SLAVE__) ((__HANDLE_SLAVE__)->Instance = ADC2)\r\n\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n#define IS_ADC_INJECTED_RANK(CHANNEL) (((CHANNEL) == ADC_INJECTED_RANK_1) || ((CHANNEL) == ADC_INJECTED_RANK_2) || ((CHANNEL) == ADC_INJECTED_RANK_3) || ((CHANNEL) == ADC_INJECTED_RANK_4))\r\n\r\n#define IS_ADC_EXTTRIGINJEC_EDGE(EDGE) (((EDGE) == ADC_EXTERNALTRIGINJECCONV_EDGE_NONE) || ((EDGE) == ADC_EXTERNALTRIGINJECCONV_EDGE_RISING))\r\n\r\n/** @defgroup ADCEx_injected_nb_conv_verification ADCEx injected nb conv verification\r\n * @{\r\n */\r\n#define IS_ADC_INJECTED_NB_CONV(LENGTH) (((LENGTH) >= 1U) && ((LENGTH) <= 4U))\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) \\\r\n    || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define IS_ADC_EXTTRIG(REGTRIG)                                                                                                                                                          \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11) || ((REGTRIG) == ADC_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F101xE)\r\n#define IS_ADC_EXTTRIG(REGTRIG)                                                                                                                                                          \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_TRGO) || ((REGTRIG) == ADC_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F101xG)\r\n#define IS_ADC_EXTTRIG(REGTRIG)                                                                                                                                                          \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11) || ((REGTRIG) == ADC_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define IS_ADC_EXTTRIG(REGTRIG)                                                                                                                                                              \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO)     \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC3) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T5_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T5_CC3) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC3)   \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_TRGO) || ((REGTRIG) == ADC_SOFTWARE_START))\r\n#endif\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) \\\r\n    || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define IS_ADC_EXTTRIGINJEC(REGTRIG)                                                                                                                           \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)      \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || ((REGTRIG) == ADC_INJECTED_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F101xE)\r\n#define IS_ADC_EXTTRIGINJEC(REGTRIG)                                                                                                                           \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)      \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC4) || ((REGTRIG) == ADC_INJECTED_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F101xG)\r\n#define IS_ADC_EXTTRIGINJEC(REGTRIG)                                                                                                                           \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)      \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || ((REGTRIG) == ADC_INJECTED_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define IS_ADC_EXTTRIGINJEC(REGTRIG)                                                                                                                           \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)      \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC3) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_TRGO)   \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO)   \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC4) || ((REGTRIG) == ADC_INJECTED_SOFTWARE_START))\r\n#endif\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define IS_ADC_MODE(MODE)                                                                                                                                                                \\\r\n  (((MODE) == ADC_MODE_INDEPENDENT) || ((MODE) == ADC_DUALMODE_REGSIMULT_INJECSIMULT) || ((MODE) == ADC_DUALMODE_REGSIMULT_ALTERTRIG) || ((MODE) == ADC_DUALMODE_INJECSIMULT_INTERLFAST) \\\r\n   || ((MODE) == ADC_DUALMODE_INJECSIMULT_INTERLSLOW) || ((MODE) == ADC_DUALMODE_INJECSIMULT) || ((MODE) == ADC_DUALMODE_REGSIMULT) || ((MODE) == ADC_DUALMODE_INTERLFAST)               \\\r\n   || ((MODE) == ADC_DUALMODE_INTERLSLOW) || ((MODE) == ADC_DUALMODE_ALTERTRIG))\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup ADCEx_Exported_Functions\r\n * @{\r\n */\r\n\r\n/* IO operation functions  *****************************************************/\r\n/** @addtogroup ADCEx_Exported_Functions_Group1\r\n * @{\r\n */\r\n\r\n/* ADC calibration */\r\nHAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc);\r\n\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout);\r\n\r\n/* Non-blocking mode: Interruption */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef *hadc);\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/* ADC multimode */\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length);\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef *hadc);\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/* ADC retrieve conversion value intended to be used with polling or interruption */\r\nuint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef *hadc, uint32_t InjectedRank);\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\nuint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef *hadc);\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/* ADC IRQHandler and Callbacks used in non-blocking modes (Interruption) */\r\nvoid HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc);\r\n/**\r\n * @}\r\n */\r\n\r\n/* Peripheral Control functions ***********************************************/\r\n/** @addtogroup ADCEx_Exported_Functions_Group2\r\n * @{\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef *hadc, ADC_InjectionConfTypeDef *sConfigInjected);\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode);\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_ADC_EX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_cortex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of CORTEX HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_CORTEX_H\r\n#define __STM32F1xx_HAL_CORTEX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup CORTEX\r\n * @{\r\n */\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup CORTEX_Exported_Types Cortex Exported Types\r\n * @{\r\n */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/** @defgroup CORTEX_MPU_Region_Initialization_Structure_definition MPU Region Initialization Structure Definition\r\n * @brief  MPU Region initialization structure\r\n * @{\r\n */\r\ntypedef struct {\r\n  uint8_t Enable;           /*!< Specifies the status of the region.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Region_Enable                 */\r\n  uint8_t Number;           /*!< Specifies the number of the region to protect.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Region_Number                 */\r\n  uint32_t BaseAddress;     /*!< Specifies the base address of the region to protect.                           */\r\n  uint8_t  Size;            /*!< Specifies the size of the region to protect.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Region_Size                   */\r\n  uint8_t SubRegionDisable; /*!< Specifies the number of the subregion protection to disable.\r\n                                 This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF    */\r\n  uint8_t TypeExtField;     /*!< Specifies the TEX field level.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_TEX_Levels                    */\r\n  uint8_t AccessPermission; /*!< Specifies the region access permission type.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Region_Permission_Attributes  */\r\n  uint8_t DisableExec;      /*!< Specifies the instruction access status.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Instruction_Access            */\r\n  uint8_t IsShareable;      /*!< Specifies the shareability status of the protected region.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Access_Shareable              */\r\n  uint8_t IsCacheable;      /*!< Specifies the cacheable status of the region protected.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Access_Cacheable              */\r\n  uint8_t IsBufferable;     /*!< Specifies the bufferable status of the protected region.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Access_Bufferable             */\r\n} MPU_Region_InitTypeDef;\r\n/**\r\n * @}\r\n */\r\n#endif /* __MPU_PRESENT */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup CORTEX_Exported_Constants CORTEX Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup CORTEX_Preemption_Priority_Group CORTEX Preemption Priority Group\r\n * @{\r\n */\r\n#define NVIC_PRIORITYGROUP_0                       \\\r\n  0x00000007U /*!< 0 bits for pre-emption priority \\\r\n                   4 bits for subpriority */\r\n#define NVIC_PRIORITYGROUP_1                       \\\r\n  0x00000006U /*!< 1 bits for pre-emption priority \\\r\n                   3 bits for subpriority */\r\n#define NVIC_PRIORITYGROUP_2                       \\\r\n  0x00000005U /*!< 2 bits for pre-emption priority \\\r\n                   2 bits for subpriority */\r\n#define NVIC_PRIORITYGROUP_3                       \\\r\n  0x00000004U /*!< 3 bits for pre-emption priority \\\r\n                   1 bits for subpriority */\r\n#define NVIC_PRIORITYGROUP_4                       \\\r\n  0x00000003U /*!< 4 bits for pre-emption priority \\\r\n                   0 bits for subpriority */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_SysTick_clock_source CORTEX _SysTick clock source\r\n * @{\r\n */\r\n#define SYSTICK_CLKSOURCE_HCLK_DIV8 0x00000000U\r\n#define SYSTICK_CLKSOURCE_HCLK      0x00000004U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if (__MPU_PRESENT == 1)\r\n/** @defgroup CORTEX_MPU_HFNMI_PRIVDEF_Control MPU HFNMI and PRIVILEGED Access control\r\n * @{\r\n */\r\n#define MPU_HFNMI_PRIVDEF_NONE 0x00000000U\r\n#define MPU_HARDFAULT_NMI      MPU_CTRL_HFNMIENA_Msk\r\n#define MPU_PRIVILEGED_DEFAULT MPU_CTRL_PRIVDEFENA_Msk\r\n#define MPU_HFNMI_PRIVDEF      (MPU_CTRL_HFNMIENA_Msk | MPU_CTRL_PRIVDEFENA_Msk)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Region_Enable CORTEX MPU Region Enable\r\n * @{\r\n */\r\n#define MPU_REGION_ENABLE  ((uint8_t)0x01)\r\n#define MPU_REGION_DISABLE ((uint8_t)0x00)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Instruction_Access CORTEX MPU Instruction Access\r\n * @{\r\n */\r\n#define MPU_INSTRUCTION_ACCESS_ENABLE  ((uint8_t)0x00)\r\n#define MPU_INSTRUCTION_ACCESS_DISABLE ((uint8_t)0x01)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Access_Shareable CORTEX MPU Instruction Access Shareable\r\n * @{\r\n */\r\n#define MPU_ACCESS_SHAREABLE     ((uint8_t)0x01)\r\n#define MPU_ACCESS_NOT_SHAREABLE ((uint8_t)0x00)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Access_Cacheable CORTEX MPU Instruction Access Cacheable\r\n * @{\r\n */\r\n#define MPU_ACCESS_CACHEABLE     ((uint8_t)0x01)\r\n#define MPU_ACCESS_NOT_CACHEABLE ((uint8_t)0x00)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Access_Bufferable CORTEX MPU Instruction Access Bufferable\r\n * @{\r\n */\r\n#define MPU_ACCESS_BUFFERABLE     ((uint8_t)0x01)\r\n#define MPU_ACCESS_NOT_BUFFERABLE ((uint8_t)0x00)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_TEX_Levels MPU TEX Levels\r\n * @{\r\n */\r\n#define MPU_TEX_LEVEL0 ((uint8_t)0x00)\r\n#define MPU_TEX_LEVEL1 ((uint8_t)0x01)\r\n#define MPU_TEX_LEVEL2 ((uint8_t)0x02)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Region_Size CORTEX MPU Region Size\r\n * @{\r\n */\r\n#define MPU_REGION_SIZE_32B   ((uint8_t)0x04)\r\n#define MPU_REGION_SIZE_64B   ((uint8_t)0x05)\r\n#define MPU_REGION_SIZE_128B  ((uint8_t)0x06)\r\n#define MPU_REGION_SIZE_256B  ((uint8_t)0x07)\r\n#define MPU_REGION_SIZE_512B  ((uint8_t)0x08)\r\n#define MPU_REGION_SIZE_1KB   ((uint8_t)0x09)\r\n#define MPU_REGION_SIZE_2KB   ((uint8_t)0x0A)\r\n#define MPU_REGION_SIZE_4KB   ((uint8_t)0x0B)\r\n#define MPU_REGION_SIZE_8KB   ((uint8_t)0x0C)\r\n#define MPU_REGION_SIZE_16KB  ((uint8_t)0x0D)\r\n#define MPU_REGION_SIZE_32KB  ((uint8_t)0x0E)\r\n#define MPU_REGION_SIZE_64KB  ((uint8_t)0x0F)\r\n#define MPU_REGION_SIZE_128KB ((uint8_t)0x10)\r\n#define MPU_REGION_SIZE_256KB ((uint8_t)0x11)\r\n#define MPU_REGION_SIZE_512KB ((uint8_t)0x12)\r\n#define MPU_REGION_SIZE_1MB   ((uint8_t)0x13)\r\n#define MPU_REGION_SIZE_2MB   ((uint8_t)0x14)\r\n#define MPU_REGION_SIZE_4MB   ((uint8_t)0x15)\r\n#define MPU_REGION_SIZE_8MB   ((uint8_t)0x16)\r\n#define MPU_REGION_SIZE_16MB  ((uint8_t)0x17)\r\n#define MPU_REGION_SIZE_32MB  ((uint8_t)0x18)\r\n#define MPU_REGION_SIZE_64MB  ((uint8_t)0x19)\r\n#define MPU_REGION_SIZE_128MB ((uint8_t)0x1A)\r\n#define MPU_REGION_SIZE_256MB ((uint8_t)0x1B)\r\n#define MPU_REGION_SIZE_512MB ((uint8_t)0x1C)\r\n#define MPU_REGION_SIZE_1GB   ((uint8_t)0x1D)\r\n#define MPU_REGION_SIZE_2GB   ((uint8_t)0x1E)\r\n#define MPU_REGION_SIZE_4GB   ((uint8_t)0x1F)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Region_Permission_Attributes CORTEX MPU Region Permission Attributes\r\n * @{\r\n */\r\n#define MPU_REGION_NO_ACCESS   ((uint8_t)0x00)\r\n#define MPU_REGION_PRIV_RW     ((uint8_t)0x01)\r\n#define MPU_REGION_PRIV_RW_URO ((uint8_t)0x02)\r\n#define MPU_REGION_FULL_ACCESS ((uint8_t)0x03)\r\n#define MPU_REGION_PRIV_RO     ((uint8_t)0x05)\r\n#define MPU_REGION_PRIV_RO_URO ((uint8_t)0x06)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Region_Number CORTEX MPU Region Number\r\n * @{\r\n */\r\n#define MPU_REGION_NUMBER0 ((uint8_t)0x00)\r\n#define MPU_REGION_NUMBER1 ((uint8_t)0x01)\r\n#define MPU_REGION_NUMBER2 ((uint8_t)0x02)\r\n#define MPU_REGION_NUMBER3 ((uint8_t)0x03)\r\n#define MPU_REGION_NUMBER4 ((uint8_t)0x04)\r\n#define MPU_REGION_NUMBER5 ((uint8_t)0x05)\r\n#define MPU_REGION_NUMBER6 ((uint8_t)0x06)\r\n#define MPU_REGION_NUMBER7 ((uint8_t)0x07)\r\n/**\r\n * @}\r\n */\r\n#endif /* __MPU_PRESENT */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported Macros -----------------------------------------------------------*/\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup CORTEX_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup CORTEX_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* Initialization and de-initialization functions *****************************/\r\nvoid     HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup);\r\nvoid     HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);\r\nvoid     HAL_NVIC_EnableIRQ(IRQn_Type IRQn);\r\nvoid     HAL_NVIC_DisableIRQ(IRQn_Type IRQn);\r\nvoid     HAL_NVIC_SystemReset(void);\r\nuint32_t HAL_SYSTICK_Config(uint32_t TicksNumb);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup CORTEX_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* Peripheral Control functions ***********************************************/\r\nuint32_t HAL_NVIC_GetPriorityGrouping(void);\r\nvoid     HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t *pPreemptPriority, uint32_t *pSubPriority);\r\nuint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn);\r\nvoid     HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn);\r\nvoid     HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn);\r\nuint32_t HAL_NVIC_GetActive(IRQn_Type IRQn);\r\nvoid     HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource);\r\nvoid     HAL_SYSTICK_IRQHandler(void);\r\nvoid     HAL_SYSTICK_Callback(void);\r\n\r\n#if (__MPU_PRESENT == 1U)\r\nvoid HAL_MPU_Enable(uint32_t MPU_Control);\r\nvoid HAL_MPU_Disable(void);\r\nvoid HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init);\r\n#endif /* __MPU_PRESENT */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private types -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private constants ---------------------------------------------------------*/\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup CORTEX_Private_Macros CORTEX Private Macros\r\n * @{\r\n */\r\n#define IS_NVIC_PRIORITY_GROUP(GROUP) \\\r\n  (((GROUP) == NVIC_PRIORITYGROUP_0) || ((GROUP) == NVIC_PRIORITYGROUP_1) || ((GROUP) == NVIC_PRIORITYGROUP_2) || ((GROUP) == NVIC_PRIORITYGROUP_3) || ((GROUP) == NVIC_PRIORITYGROUP_4))\r\n\r\n#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < 0x10U)\r\n\r\n#define IS_NVIC_SUB_PRIORITY(PRIORITY) ((PRIORITY) < 0x10U)\r\n\r\n#define IS_NVIC_DEVICE_IRQ(IRQ) ((IRQ) >= (IRQn_Type)0x00U)\r\n\r\n#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SYSTICK_CLKSOURCE_HCLK) || ((SOURCE) == SYSTICK_CLKSOURCE_HCLK_DIV8))\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n#define IS_MPU_REGION_ENABLE(STATE) (((STATE) == MPU_REGION_ENABLE) || ((STATE) == MPU_REGION_DISABLE))\r\n\r\n#define IS_MPU_INSTRUCTION_ACCESS(STATE) (((STATE) == MPU_INSTRUCTION_ACCESS_ENABLE) || ((STATE) == MPU_INSTRUCTION_ACCESS_DISABLE))\r\n\r\n#define IS_MPU_ACCESS_SHAREABLE(STATE) (((STATE) == MPU_ACCESS_SHAREABLE) || ((STATE) == MPU_ACCESS_NOT_SHAREABLE))\r\n\r\n#define IS_MPU_ACCESS_CACHEABLE(STATE) (((STATE) == MPU_ACCESS_CACHEABLE) || ((STATE) == MPU_ACCESS_NOT_CACHEABLE))\r\n\r\n#define IS_MPU_ACCESS_BUFFERABLE(STATE) (((STATE) == MPU_ACCESS_BUFFERABLE) || ((STATE) == MPU_ACCESS_NOT_BUFFERABLE))\r\n\r\n#define IS_MPU_TEX_LEVEL(TYPE) (((TYPE) == MPU_TEX_LEVEL0) || ((TYPE) == MPU_TEX_LEVEL1) || ((TYPE) == MPU_TEX_LEVEL2))\r\n\r\n#define IS_MPU_REGION_PERMISSION_ATTRIBUTE(TYPE)                                                                                                                                    \\\r\n  (((TYPE) == MPU_REGION_NO_ACCESS) || ((TYPE) == MPU_REGION_PRIV_RW) || ((TYPE) == MPU_REGION_PRIV_RW_URO) || ((TYPE) == MPU_REGION_FULL_ACCESS) || ((TYPE) == MPU_REGION_PRIV_RO) \\\r\n   || ((TYPE) == MPU_REGION_PRIV_RO_URO))\r\n\r\n#define IS_MPU_REGION_NUMBER(NUMBER)                                                                                                                                                \\\r\n  (((NUMBER) == MPU_REGION_NUMBER0) || ((NUMBER) == MPU_REGION_NUMBER1) || ((NUMBER) == MPU_REGION_NUMBER2) || ((NUMBER) == MPU_REGION_NUMBER3) || ((NUMBER) == MPU_REGION_NUMBER4) \\\r\n   || ((NUMBER) == MPU_REGION_NUMBER5) || ((NUMBER) == MPU_REGION_NUMBER6) || ((NUMBER) == MPU_REGION_NUMBER7))\r\n\r\n#define IS_MPU_REGION_SIZE(SIZE)                                                                                                                                                          \\\r\n  (((SIZE) == MPU_REGION_SIZE_32B) || ((SIZE) == MPU_REGION_SIZE_64B) || ((SIZE) == MPU_REGION_SIZE_128B) || ((SIZE) == MPU_REGION_SIZE_256B) || ((SIZE) == MPU_REGION_SIZE_512B)         \\\r\n   || ((SIZE) == MPU_REGION_SIZE_1KB) || ((SIZE) == MPU_REGION_SIZE_2KB) || ((SIZE) == MPU_REGION_SIZE_4KB) || ((SIZE) == MPU_REGION_SIZE_8KB) || ((SIZE) == MPU_REGION_SIZE_16KB)        \\\r\n   || ((SIZE) == MPU_REGION_SIZE_32KB) || ((SIZE) == MPU_REGION_SIZE_64KB) || ((SIZE) == MPU_REGION_SIZE_128KB) || ((SIZE) == MPU_REGION_SIZE_256KB) || ((SIZE) == MPU_REGION_SIZE_512KB) \\\r\n   || ((SIZE) == MPU_REGION_SIZE_1MB) || ((SIZE) == MPU_REGION_SIZE_2MB) || ((SIZE) == MPU_REGION_SIZE_4MB) || ((SIZE) == MPU_REGION_SIZE_8MB) || ((SIZE) == MPU_REGION_SIZE_16MB)        \\\r\n   || ((SIZE) == MPU_REGION_SIZE_32MB) || ((SIZE) == MPU_REGION_SIZE_64MB) || ((SIZE) == MPU_REGION_SIZE_128MB) || ((SIZE) == MPU_REGION_SIZE_256MB) || ((SIZE) == MPU_REGION_SIZE_512MB) \\\r\n   || ((SIZE) == MPU_REGION_SIZE_1GB) || ((SIZE) == MPU_REGION_SIZE_2GB) || ((SIZE) == MPU_REGION_SIZE_4GB))\r\n\r\n#define IS_MPU_SUB_REGION_DISABLE(SUBREGION) ((SUBREGION) < (uint16_t)0x00FF)\r\n#endif /* __MPU_PRESENT */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private functions ---------------------------------------------------------*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_CORTEX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_def.h\r\n * @author  MCD Application Team\r\n * @brief   This file contains HAL common defines, enumeration, macros and\r\n *          structures definitions.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_DEF\r\n#define __STM32F1xx_HAL_DEF\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx.h\"\r\n#if defined(USE_HAL_LEGACY)\r\n#include \"Legacy/stm32_hal_legacy.h\"\r\n#endif\r\n#include <stdio.h>\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n\r\n/**\r\n * @brief  HAL Status structures definition\r\n */\r\ntypedef enum { HAL_OK = 0x00U, HAL_ERROR = 0x01U, HAL_BUSY = 0x02U, HAL_TIMEOUT = 0x03U } HAL_StatusTypeDef;\r\n\r\n/**\r\n * @brief  HAL Lock structures definition\r\n */\r\ntypedef enum { HAL_UNLOCKED = 0x00U, HAL_LOCKED = 0x01U } HAL_LockTypeDef;\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n#define HAL_MAX_DELAY 0xFFFFFFFFU\r\n\r\n#define HAL_IS_BIT_SET(REG, BIT) (((REG) & (BIT)) != 0U)\r\n#define HAL_IS_BIT_CLR(REG, BIT) (((REG) & (BIT)) == 0U)\r\n\r\n#define __HAL_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__) \\\r\n  do {                                                               \\\r\n    (__HANDLE__)->__PPP_DMA_FIELD__ = &(__DMA_HANDLE__);             \\\r\n    (__DMA_HANDLE__).Parent         = (__HANDLE__);                  \\\r\n  } while (0U)\r\n\r\n#define UNUSED(X) (void)X /* To avoid gcc/g++ warnings */\r\n\r\n/** @brief Reset the Handle's State field.\r\n * @param __HANDLE__: specifies the Peripheral Handle.\r\n * @note  This macro can be used for the following purpose:\r\n *          - When the Handle is declared as local variable; before passing it as parameter\r\n *            to HAL_PPP_Init() for the first time, it is mandatory to use this macro\r\n *            to set to 0 the Handle's \"State\" field.\r\n *            Otherwise, \"State\" field may have any random value and the first time the function\r\n *            HAL_PPP_Init() is called, the low level hardware initialization will be missed\r\n *            (i.e. HAL_PPP_MspInit() will not be executed).\r\n *          - When there is a need to reconfigure the low level hardware: instead of calling\r\n *            HAL_PPP_DeInit() then HAL_PPP_Init(), user can make a call to this macro then HAL_PPP_Init().\r\n *            In this later function, when the Handle's \"State\" field is set to 0, it will execute the function\r\n *            HAL_PPP_MspInit() which will reconfigure the low level hardware.\r\n * @retval None\r\n */\r\n#define __HAL_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = 0U)\r\n\r\n#if (USE_RTOS == 1U)\r\n/* Reserved for future use */\r\n#error \"USE_RTOS should be 0 in the current HAL release\"\r\n#else\r\n#define __HAL_LOCK(__HANDLE__)              \\\r\n  do {                                      \\\r\n    if ((__HANDLE__)->Lock == HAL_LOCKED) { \\\r\n      return HAL_BUSY;                      \\\r\n    } else {                                \\\r\n      (__HANDLE__)->Lock = HAL_LOCKED;      \\\r\n    }                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_UNLOCK(__HANDLE__)       \\\r\n  do {                                 \\\r\n    (__HANDLE__)->Lock = HAL_UNLOCKED; \\\r\n  } while (0U)\r\n#endif /* USE_RTOS */\r\n\r\n#if defined(__GNUC__) && !defined(__CC_ARM) /* GNU Compiler */\r\n#ifndef __weak\r\n#define __weak __attribute__((weak))\r\n#endif /* __weak */\r\n#ifndef __packed\r\n#define __packed __attribute__((__packed__))\r\n#endif /* __packed */\r\n#endif /* __GNUC__ */\r\n\r\n/* Macro to get variable aligned on 4-bytes, for __ICCARM__ the directive \"#pragma data_alignment=4\" must be used instead */\r\n#if defined(__GNUC__) && !defined(__CC_ARM) /* GNU Compiler */\r\n#ifndef __ALIGN_END\r\n#define __ALIGN_END __attribute__((aligned(4)))\r\n#endif /* __ALIGN_END */\r\n#ifndef __ALIGN_BEGIN\r\n#define __ALIGN_BEGIN\r\n#endif /* __ALIGN_BEGIN */\r\n#else\r\n#ifndef __ALIGN_END\r\n#define __ALIGN_END\r\n#endif /* __ALIGN_END */\r\n#ifndef __ALIGN_BEGIN\r\n#if defined(__CC_ARM) /* ARM Compiler */\r\n#define __ALIGN_BEGIN __align(4)\r\n#elif defined(__ICCARM__) /* IAR Compiler */\r\n#define __ALIGN_BEGIN\r\n#endif /* __CC_ARM */\r\n#endif /* __ALIGN_BEGIN */\r\n#endif /* __GNUC__ */\r\n\r\n/**\r\n * @brief  __RAM_FUNC definition\r\n */\r\n#if defined(__CC_ARM)\r\n/* ARM Compiler\r\n   ------------\r\n   RAM functions are defined using the toolchain options.\r\n   Functions that are executed in RAM should reside in a separate source module.\r\n   Using the 'Options for File' dialog you can simply change the 'Code / Const'\r\n   area of a module to a memory space in physical RAM.\r\n   Available memory areas are declared in the 'Target' tab of the 'Options for Target'\r\n   dialog.\r\n*/\r\n#define __RAM_FUNC\r\n\r\n#elif defined(__ICCARM__)\r\n/* ICCARM Compiler\r\n   ---------------\r\n   RAM functions are defined using a specific toolchain keyword \"__ramfunc\".\r\n*/\r\n#define __RAM_FUNC __ramfunc\r\n\r\n#elif defined(__GNUC__)\r\n/* GNU Compiler\r\n   ------------\r\n  RAM functions are defined using a specific toolchain attribute\r\n   \"__attribute__((section(\".RamFunc\")))\".\r\n*/\r\n#define __RAM_FUNC __attribute__((section(\".RamFunc\")))\r\n\r\n#endif\r\n\r\n/**\r\n * @brief  __NOINLINE definition\r\n */\r\n#if defined(__CC_ARM) || defined(__GNUC__)\r\n/* ARM & GNUCompiler\r\n   ----------------\r\n*/\r\n#define __NOINLINE __attribute__((noinline))\r\n\r\n#elif defined(__ICCARM__)\r\n/* ICCARM Compiler\r\n   ---------------\r\n*/\r\n#define __NOINLINE _Pragma(\"optimize = no_inline\")\r\n\r\n#endif\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* ___STM32F1xx_HAL_DEF */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_dma.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of DMA HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_DMA_H\r\n#define __STM32F1xx_HAL_DMA_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup DMA\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n\r\n/** @defgroup DMA_Exported_Types DMA Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  DMA Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t Direction; /*!< Specifies if the data will be transferred from memory to peripheral,\r\n                           from memory to memory or from peripheral to memory.\r\n                           This parameter can be a value of @ref DMA_Data_transfer_direction */\r\n\r\n  uint32_t PeriphInc; /*!< Specifies whether the Peripheral address register should be incremented or not.\r\n                           This parameter can be a value of @ref DMA_Peripheral_incremented_mode */\r\n\r\n  uint32_t MemInc; /*!< Specifies whether the memory address register should be incremented or not.\r\n                        This parameter can be a value of @ref DMA_Memory_incremented_mode */\r\n\r\n  uint32_t PeriphDataAlignment; /*!< Specifies the Peripheral data width.\r\n                                     This parameter can be a value of @ref DMA_Peripheral_data_size */\r\n\r\n  uint32_t MemDataAlignment; /*!< Specifies the Memory data width.\r\n                                  This parameter can be a value of @ref DMA_Memory_data_size */\r\n\r\n  uint32_t Mode; /*!< Specifies the operation mode of the DMAy Channelx.\r\n                      This parameter can be a value of @ref DMA_mode\r\n                      @note The circular buffer mode cannot be used if the memory-to-memory\r\n                            data transfer is configured on the selected Channel */\r\n\r\n  uint32_t Priority; /*!< Specifies the software priority for the DMAy Channelx.\r\n                          This parameter can be a value of @ref DMA_Priority_level */\r\n} DMA_InitTypeDef;\r\n\r\n/**\r\n * @brief  HAL DMA State structures definition\r\n */\r\ntypedef enum {\r\n  HAL_DMA_STATE_RESET   = 0x00U, /*!< DMA not yet initialized or disabled    */\r\n  HAL_DMA_STATE_READY   = 0x01U, /*!< DMA initialized and ready for use      */\r\n  HAL_DMA_STATE_BUSY    = 0x02U, /*!< DMA process is ongoing                 */\r\n  HAL_DMA_STATE_TIMEOUT = 0x03U  /*!< DMA timeout state                      */\r\n} HAL_DMA_StateTypeDef;\r\n\r\n/**\r\n * @brief  HAL DMA Error Code structure definition\r\n */\r\ntypedef enum {\r\n  HAL_DMA_FULL_TRANSFER = 0x00U, /*!< Full transfer     */\r\n  HAL_DMA_HALF_TRANSFER = 0x01U  /*!< Half Transfer     */\r\n} HAL_DMA_LevelCompleteTypeDef;\r\n\r\n/**\r\n * @brief  HAL DMA Callback ID structure definition\r\n */\r\ntypedef enum {\r\n  HAL_DMA_XFER_CPLT_CB_ID     = 0x00U, /*!< Full transfer     */\r\n  HAL_DMA_XFER_HALFCPLT_CB_ID = 0x01U, /*!< Half transfer     */\r\n  HAL_DMA_XFER_ERROR_CB_ID    = 0x02U, /*!< Error             */\r\n  HAL_DMA_XFER_ABORT_CB_ID    = 0x03U, /*!< Abort             */\r\n  HAL_DMA_XFER_ALL_CB_ID      = 0x04U  /*!< All               */\r\n\r\n} HAL_DMA_CallbackIDTypeDef;\r\n\r\n/**\r\n * @brief  DMA handle Structure definition\r\n */\r\ntypedef struct __DMA_HandleTypeDef {\r\n  DMA_Channel_TypeDef *Instance; /*!< Register base address                  */\r\n\r\n  DMA_InitTypeDef Init; /*!< DMA communication parameters           */\r\n\r\n  HAL_LockTypeDef Lock; /*!< DMA locking object                     */\r\n\r\n  HAL_DMA_StateTypeDef State; /*!< DMA transfer state                     */\r\n\r\n  void *Parent; /*!< Parent object state                    */\r\n\r\n  void (*XferCpltCallback)(struct __DMA_HandleTypeDef *hdma); /*!< DMA transfer complete callback         */\r\n\r\n  void (*XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma); /*!< DMA Half transfer complete callback    */\r\n\r\n  void (*XferErrorCallback)(struct __DMA_HandleTypeDef *hdma); /*!< DMA transfer error callback            */\r\n\r\n  void (*XferAbortCallback)(struct __DMA_HandleTypeDef *hdma); /*!< DMA transfer abort callback            */\r\n\r\n  __IO uint32_t ErrorCode; /*!< DMA Error code                         */\r\n\r\n  DMA_TypeDef *DmaBaseAddress; /*!< DMA Channel Base Address               */\r\n\r\n  uint32_t ChannelIndex; /*!< DMA Channel Index                      */\r\n\r\n} DMA_HandleTypeDef;\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup DMA_Exported_Constants DMA Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup DMA_Error_Code DMA Error Code\r\n * @{\r\n */\r\n#define HAL_DMA_ERROR_NONE          0x00000000U /*!< No error             */\r\n#define HAL_DMA_ERROR_TE            0x00000001U /*!< Transfer error       */\r\n#define HAL_DMA_ERROR_NO_XFER       0x00000004U /*!< no ongoing transfer  */\r\n#define HAL_DMA_ERROR_TIMEOUT       0x00000020U /*!< Timeout error        */\r\n#define HAL_DMA_ERROR_NOT_SUPPORTED 0x00000100U /*!< Not supported mode                    */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Data_transfer_direction DMA Data transfer direction\r\n * @{\r\n */\r\n#define DMA_PERIPH_TO_MEMORY 0x00000000U                 /*!< Peripheral to memory direction */\r\n#define DMA_MEMORY_TO_PERIPH ((uint32_t)DMA_CCR_DIR)     /*!< Memory to peripheral direction */\r\n#define DMA_MEMORY_TO_MEMORY ((uint32_t)DMA_CCR_MEM2MEM) /*!< Memory to memory direction     */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Peripheral_incremented_mode DMA Peripheral incremented mode\r\n * @{\r\n */\r\n#define DMA_PINC_ENABLE  ((uint32_t)DMA_CCR_PINC) /*!< Peripheral increment mode Enable */\r\n#define DMA_PINC_DISABLE 0x00000000U              /*!< Peripheral increment mode Disable */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Memory_incremented_mode DMA Memory incremented mode\r\n * @{\r\n */\r\n#define DMA_MINC_ENABLE  ((uint32_t)DMA_CCR_MINC) /*!< Memory increment mode Enable  */\r\n#define DMA_MINC_DISABLE 0x00000000U              /*!< Memory increment mode Disable */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Peripheral_data_size DMA Peripheral data size\r\n * @{\r\n */\r\n#define DMA_PDATAALIGN_BYTE     0x00000000U                 /*!< Peripheral data alignment: Byte     */\r\n#define DMA_PDATAALIGN_HALFWORD ((uint32_t)DMA_CCR_PSIZE_0) /*!< Peripheral data alignment: HalfWord */\r\n#define DMA_PDATAALIGN_WORD     ((uint32_t)DMA_CCR_PSIZE_1) /*!< Peripheral data alignment: Word     */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Memory_data_size DMA Memory data size\r\n * @{\r\n */\r\n#define DMA_MDATAALIGN_BYTE     0x00000000U                 /*!< Memory data alignment: Byte     */\r\n#define DMA_MDATAALIGN_HALFWORD ((uint32_t)DMA_CCR_MSIZE_0) /*!< Memory data alignment: HalfWord */\r\n#define DMA_MDATAALIGN_WORD     ((uint32_t)DMA_CCR_MSIZE_1) /*!< Memory data alignment: Word     */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_mode DMA mode\r\n * @{\r\n */\r\n#define DMA_NORMAL   0x00000000U              /*!< Normal mode                  */\r\n#define DMA_CIRCULAR ((uint32_t)DMA_CCR_CIRC) /*!< Circular mode                */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Priority_level DMA Priority level\r\n * @{\r\n */\r\n#define DMA_PRIORITY_LOW       0x00000000U              /*!< Priority level : Low       */\r\n#define DMA_PRIORITY_MEDIUM    ((uint32_t)DMA_CCR_PL_0) /*!< Priority level : Medium    */\r\n#define DMA_PRIORITY_HIGH      ((uint32_t)DMA_CCR_PL_1) /*!< Priority level : High      */\r\n#define DMA_PRIORITY_VERY_HIGH ((uint32_t)DMA_CCR_PL)   /*!< Priority level : Very_High */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_interrupt_enable_definitions DMA interrupt enable definitions\r\n * @{\r\n */\r\n#define DMA_IT_TC ((uint32_t)DMA_CCR_TCIE)\r\n#define DMA_IT_HT ((uint32_t)DMA_CCR_HTIE)\r\n#define DMA_IT_TE ((uint32_t)DMA_CCR_TEIE)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_flag_definitions DMA flag definitions\r\n * @{\r\n */\r\n#define DMA_FLAG_GL1 0x00000001U\r\n#define DMA_FLAG_TC1 0x00000002U\r\n#define DMA_FLAG_HT1 0x00000004U\r\n#define DMA_FLAG_TE1 0x00000008U\r\n#define DMA_FLAG_GL2 0x00000010U\r\n#define DMA_FLAG_TC2 0x00000020U\r\n#define DMA_FLAG_HT2 0x00000040U\r\n#define DMA_FLAG_TE2 0x00000080U\r\n#define DMA_FLAG_GL3 0x00000100U\r\n#define DMA_FLAG_TC3 0x00000200U\r\n#define DMA_FLAG_HT3 0x00000400U\r\n#define DMA_FLAG_TE3 0x00000800U\r\n#define DMA_FLAG_GL4 0x00001000U\r\n#define DMA_FLAG_TC4 0x00002000U\r\n#define DMA_FLAG_HT4 0x00004000U\r\n#define DMA_FLAG_TE4 0x00008000U\r\n#define DMA_FLAG_GL5 0x00010000U\r\n#define DMA_FLAG_TC5 0x00020000U\r\n#define DMA_FLAG_HT5 0x00040000U\r\n#define DMA_FLAG_TE5 0x00080000U\r\n#define DMA_FLAG_GL6 0x00100000U\r\n#define DMA_FLAG_TC6 0x00200000U\r\n#define DMA_FLAG_HT6 0x00400000U\r\n#define DMA_FLAG_TE6 0x00800000U\r\n#define DMA_FLAG_GL7 0x01000000U\r\n#define DMA_FLAG_TC7 0x02000000U\r\n#define DMA_FLAG_HT7 0x04000000U\r\n#define DMA_FLAG_TE7 0x08000000U\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macros -----------------------------------------------------------*/\r\n/** @defgroup DMA_Exported_Macros DMA Exported Macros\r\n * @{\r\n */\r\n\r\n/** @brief  Reset DMA handle state.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval None\r\n */\r\n#define __HAL_DMA_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DMA_STATE_RESET)\r\n\r\n/**\r\n * @brief  Enable the specified DMA Channel.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval None\r\n */\r\n#define __HAL_DMA_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CCR, DMA_CCR_EN))\r\n\r\n/**\r\n * @brief  Disable the specified DMA Channel.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval None\r\n */\r\n#define __HAL_DMA_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CCR, DMA_CCR_EN))\r\n\r\n/* Interrupt & Flag management */\r\n\r\n/**\r\n * @brief  Enables the specified DMA Channel interrupts.\r\n * @param  __HANDLE__: DMA handle\r\n * @param __INTERRUPT__: specifies the DMA interrupt sources to be enabled or disabled.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_IT_TC:  Transfer complete interrupt mask\r\n *            @arg DMA_IT_HT:  Half transfer complete interrupt mask\r\n *            @arg DMA_IT_TE:  Transfer error interrupt mask\r\n * @retval None\r\n */\r\n#define __HAL_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__) (SET_BIT((__HANDLE__)->Instance->CCR, (__INTERRUPT__)))\r\n\r\n/**\r\n * @brief  Disable the specified DMA Channel interrupts.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __INTERRUPT__: specifies the DMA interrupt sources to be enabled or disabled.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_IT_TC:  Transfer complete interrupt mask\r\n *            @arg DMA_IT_HT:  Half transfer complete interrupt mask\r\n *            @arg DMA_IT_TE:  Transfer error interrupt mask\r\n * @retval None\r\n */\r\n#define __HAL_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__) (CLEAR_BIT((__HANDLE__)->Instance->CCR, (__INTERRUPT__)))\r\n\r\n/**\r\n * @brief  Check whether the specified DMA Channel interrupt is enabled or not.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __INTERRUPT__: specifies the DMA interrupt source to check.\r\n *          This parameter can be one of the following values:\r\n *            @arg DMA_IT_TC:  Transfer complete interrupt mask\r\n *            @arg DMA_IT_HT:  Half transfer complete interrupt mask\r\n *            @arg DMA_IT_TE:  Transfer error interrupt mask\r\n * @retval The state of DMA_IT (SET or RESET).\r\n */\r\n#define __HAL_DMA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CCR & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)\r\n\r\n/**\r\n * @brief  Return the number of remaining data units in the current DMA Channel transfer.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The number of remaining data units in the current DMA Channel transfer.\r\n */\r\n#define __HAL_DMA_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNDTR)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Include DMA HAL Extension module */\r\n#include \"stm32f1xx_hal_dma_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup DMA_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup DMA_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* Initialization and de-initialization functions *****************************/\r\nHAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma);\r\nHAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup DMA_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* IO operation functions *****************************************************/\r\nHAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);\r\nHAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);\r\nHAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma);\r\nHAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma);\r\nHAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout);\r\nvoid              HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma);\r\nHAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (*pCallback)(DMA_HandleTypeDef *_hdma));\r\nHAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup DMA_Exported_Functions_Group3\r\n * @{\r\n */\r\n/* Peripheral State and Error functions ***************************************/\r\nHAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma);\r\nuint32_t             HAL_DMA_GetError(DMA_HandleTypeDef *hdma);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup DMA_Private_Macros DMA Private Macros\r\n * @{\r\n */\r\n\r\n#define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_PERIPH_TO_MEMORY) || ((DIRECTION) == DMA_MEMORY_TO_PERIPH) || ((DIRECTION) == DMA_MEMORY_TO_MEMORY))\r\n\r\n#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1U) && ((SIZE) < 0x10000U))\r\n\r\n#define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PINC_ENABLE) || ((STATE) == DMA_PINC_DISABLE))\r\n\r\n#define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MINC_ENABLE) || ((STATE) == DMA_MINC_DISABLE))\r\n\r\n#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PDATAALIGN_BYTE) || ((SIZE) == DMA_PDATAALIGN_HALFWORD) || ((SIZE) == DMA_PDATAALIGN_WORD))\r\n\r\n#define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MDATAALIGN_BYTE) || ((SIZE) == DMA_MDATAALIGN_HALFWORD) || ((SIZE) == DMA_MDATAALIGN_WORD))\r\n\r\n#define IS_DMA_MODE(MODE) (((MODE) == DMA_NORMAL) || ((MODE) == DMA_CIRCULAR))\r\n\r\n#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_PRIORITY_LOW) || ((PRIORITY) == DMA_PRIORITY_MEDIUM) || ((PRIORITY) == DMA_PRIORITY_HIGH) || ((PRIORITY) == DMA_PRIORITY_VERY_HIGH))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private functions ---------------------------------------------------------*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_DMA_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_dma_ex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of DMA HAL extension module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_DMA_EX_H\r\n#define __STM32F1xx_HAL_DMA_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup DMAEx DMAEx\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/* Exported constants --------------------------------------------------------*/\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup DMAEx_Exported_Macros DMA Extended Exported Macros\r\n * @{\r\n */\r\n/* Interrupt & Flag management */\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup DMAEx_High_density_XL_density_Product_devices DMAEx High density and XL density product devices\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Returns the current DMA Channel transfer complete flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer complete flag index.\r\n */\r\n#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_TC1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_TC2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_TC3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_TC4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_TC5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_TC6 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7)) ? DMA_FLAG_TC7 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1)) ? DMA_FLAG_TC1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2)) ? DMA_FLAG_TC2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3)) ? DMA_FLAG_TC3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4)) ? DMA_FLAG_TC4 \\\r\n                                                                       : DMA_FLAG_TC5)\r\n\r\n/**\r\n * @brief  Returns the current DMA Channel half transfer complete flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified half transfer complete flag index.\r\n */\r\n#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_HT1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_HT2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_HT3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_HT4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_HT5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_HT6 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7)) ? DMA_FLAG_HT7 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1)) ? DMA_FLAG_HT1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2)) ? DMA_FLAG_HT2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3)) ? DMA_FLAG_HT3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4)) ? DMA_FLAG_HT4 \\\r\n                                                                       : DMA_FLAG_HT5)\r\n\r\n/**\r\n * @brief  Returns the current DMA Channel transfer error flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer error flag index.\r\n */\r\n#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_TE1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_TE2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_TE3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_TE4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_TE5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_TE6 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7)) ? DMA_FLAG_TE7 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1)) ? DMA_FLAG_TE1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2)) ? DMA_FLAG_TE2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3)) ? DMA_FLAG_TE3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4)) ? DMA_FLAG_TE4 \\\r\n                                                                       : DMA_FLAG_TE5)\r\n\r\n/**\r\n * @brief  Return the current DMA Channel Global interrupt flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer error flag index.\r\n */\r\n#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_GL1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_GL2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_GL3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_GL4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_GL5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_GL6 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7)) ? DMA_FLAG_GL7 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1)) ? DMA_FLAG_GL1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2)) ? DMA_FLAG_GL2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3)) ? DMA_FLAG_GL3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4)) ? DMA_FLAG_GL4 \\\r\n                                                                       : DMA_FLAG_GL5)\r\n\r\n/**\r\n * @brief  Get the DMA Channel pending flags.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __FLAG__: Get the specified flag.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_FLAG_TCx:  Transfer complete flag\r\n *            @arg DMA_FLAG_HTx:  Half transfer complete flag\r\n *            @arg DMA_FLAG_TEx:  Transfer error flag\r\n *         Where x can be 1_7 or 1_5 (depending on DMA1 or DMA2) to select the DMA Channel flag.\r\n * @retval The state of FLAG (SET or RESET).\r\n */\r\n#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__) (((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Channel7) ? (DMA2->ISR & (__FLAG__)) : (DMA1->ISR & (__FLAG__)))\r\n\r\n/**\r\n * @brief  Clears the DMA Channel pending flags.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __FLAG__: specifies the flag to clear.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_FLAG_TCx:  Transfer complete flag\r\n *            @arg DMA_FLAG_HTx:  Half transfer complete flag\r\n *            @arg DMA_FLAG_TEx:  Transfer error flag\r\n *         Where x can be 1_7 or 1_5 (depending on DMA1 or DMA2) to select the DMA Channel flag.\r\n * @retval None\r\n */\r\n#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) (((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Channel7) ? (DMA2->IFCR = (__FLAG__)) : (DMA1->IFCR = (__FLAG__)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#else\r\n/** @defgroup DMA_Low_density_Medium_density_Product_devices DMA Low density and Medium density product devices\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Returns the current DMA Channel transfer complete flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer complete flag index.\r\n */\r\n#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_TC1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_TC2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_TC3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_TC4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_TC5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_TC6 \\\r\n                                                                       : DMA_FLAG_TC7)\r\n\r\n/**\r\n * @brief  Return the current DMA Channel half transfer complete flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified half transfer complete flag index.\r\n */\r\n#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_HT1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_HT2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_HT3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_HT4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_HT5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_HT6 \\\r\n                                                                       : DMA_FLAG_HT7)\r\n\r\n/**\r\n * @brief  Return the current DMA Channel transfer error flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer error flag index.\r\n */\r\n#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_TE1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_TE2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_TE3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_TE4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_TE5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_TE6 \\\r\n                                                                       : DMA_FLAG_TE7)\r\n\r\n/**\r\n * @brief  Return the current DMA Channel Global interrupt flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer error flag index.\r\n */\r\n#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_GL1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_GL2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_GL3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_GL4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_GL5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_GL6 \\\r\n                                                                       : DMA_FLAG_GL7)\r\n\r\n/**\r\n * @brief  Get the DMA Channel pending flags.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __FLAG__: Get the specified flag.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_FLAG_TCx:  Transfer complete flag\r\n *            @arg DMA_FLAG_HTx:  Half transfer complete flag\r\n *            @arg DMA_FLAG_TEx:  Transfer error flag\r\n *            @arg DMA_FLAG_GLx:  Global interrupt flag\r\n *         Where x can be 1_7 to select the DMA Channel flag.\r\n * @retval The state of FLAG (SET or RESET).\r\n */\r\n\r\n#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__)   (DMA1->ISR & (__FLAG__))\r\n\r\n/**\r\n * @brief  Clear the DMA Channel pending flags.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __FLAG__: specifies the flag to clear.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_FLAG_TCx:  Transfer complete flag\r\n *            @arg DMA_FLAG_HTx:  Half transfer complete flag\r\n *            @arg DMA_FLAG_TEx:  Transfer error flag\r\n *            @arg DMA_FLAG_GLx:  Global interrupt flag\r\n *         Where x can be 1_7 to select the DMA Channel flag.\r\n * @retval None\r\n */\r\n#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) (DMA1->IFCR = (__FLAG__))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || */\r\n       /* STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#endif /* __STM32F1xx_HAL_DMA_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_flash.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of Flash HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_FLASH_H\r\n#define __STM32F1xx_HAL_FLASH_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASH\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASH_Private_Constants\r\n * @{\r\n */\r\n#define FLASH_TIMEOUT_VALUE 50000U /* 50 s */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASH_Private_Macros\r\n * @{\r\n */\r\n\r\n#define IS_FLASH_TYPEPROGRAM(VALUE) (((VALUE) == FLASH_TYPEPROGRAM_HALFWORD) || ((VALUE) == FLASH_TYPEPROGRAM_WORD) || ((VALUE) == FLASH_TYPEPROGRAM_DOUBLEWORD))\r\n\r\n#if defined(FLASH_ACR_LATENCY)\r\n#define IS_FLASH_LATENCY(__LATENCY__) (((__LATENCY__) == FLASH_LATENCY_0) || ((__LATENCY__) == FLASH_LATENCY_1) || ((__LATENCY__) == FLASH_LATENCY_2))\r\n\r\n#else\r\n#define IS_FLASH_LATENCY(__LATENCY__) ((__LATENCY__) == FLASH_LATENCY_0)\r\n#endif /* FLASH_ACR_LATENCY */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup FLASH_Exported_Types FLASH Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  FLASH Procedure structure definition\r\n */\r\ntypedef enum {\r\n  FLASH_PROC_NONE              = 0U,\r\n  FLASH_PROC_PAGEERASE         = 1U,\r\n  FLASH_PROC_MASSERASE         = 2U,\r\n  FLASH_PROC_PROGRAMHALFWORD   = 3U,\r\n  FLASH_PROC_PROGRAMWORD       = 4U,\r\n  FLASH_PROC_PROGRAMDOUBLEWORD = 5U\r\n} FLASH_ProcedureTypeDef;\r\n\r\n/**\r\n * @brief  FLASH handle Structure definition\r\n */\r\ntypedef struct {\r\n  __IO FLASH_ProcedureTypeDef ProcedureOnGoing; /*!< Internal variable to indicate which procedure is ongoing or not in IT context */\r\n\r\n  __IO uint32_t DataRemaining; /*!< Internal variable to save the remaining pages to erase or half-word to program in IT context */\r\n\r\n  __IO uint32_t Address; /*!< Internal variable to save address selected for program or erase */\r\n\r\n  __IO uint64_t Data; /*!< Internal variable to save data to be programmed */\r\n\r\n  HAL_LockTypeDef Lock; /*!< FLASH locking object                */\r\n\r\n  __IO uint32_t ErrorCode; /*!< FLASH error code\r\n                                This parameter can be a value of @ref FLASH_Error_Codes  */\r\n} FLASH_ProcessTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup FLASH_Exported_Constants FLASH Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASH_Error_Codes FLASH Error Codes\r\n * @{\r\n */\r\n\r\n#define HAL_FLASH_ERROR_NONE 0x00U /*!< No error */\r\n#define HAL_FLASH_ERROR_PROG 0x01U /*!< Programming error */\r\n#define HAL_FLASH_ERROR_WRP  0x02U /*!< Write protection error */\r\n#define HAL_FLASH_ERROR_OPTV 0x04U /*!< Option validity error */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASH_Type_Program FLASH Type Program\r\n * @{\r\n */\r\n#define FLASH_TYPEPROGRAM_HALFWORD   0x01U /*!<Program a half-word (16-bit) at a specified address.*/\r\n#define FLASH_TYPEPROGRAM_WORD       0x02U /*!<Program a word (32-bit) at a specified address.*/\r\n#define FLASH_TYPEPROGRAM_DOUBLEWORD 0x03U /*!<Program a double word (64-bit) at a specified address*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(FLASH_ACR_LATENCY)\r\n/** @defgroup FLASH_Latency FLASH Latency\r\n * @{\r\n */\r\n#define FLASH_LATENCY_0 0x00000000U         /*!< FLASH Zero Latency cycle */\r\n#define FLASH_LATENCY_1 FLASH_ACR_LATENCY_0 /*!< FLASH One Latency cycle */\r\n#define FLASH_LATENCY_2 FLASH_ACR_LATENCY_1 /*!< FLASH Two Latency cycles */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#else\r\n/** @defgroup FLASH_Latency FLASH Latency\r\n * @{\r\n */\r\n#define FLASH_LATENCY_0 0x00000000U /*!< FLASH Zero Latency cycle */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* FLASH_ACR_LATENCY */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n\r\n/** @defgroup FLASH_Exported_Macros FLASH Exported Macros\r\n *  @brief macros to control FLASH features\r\n *  @{\r\n */\r\n\r\n/** @defgroup FLASH_Half_Cycle FLASH Half Cycle\r\n *  @brief macros to handle FLASH half cycle\r\n * @{\r\n */\r\n\r\n/**\r\n  * @brief  Enable the FLASH half cycle access.\r\n  * @note   half cycle access can only be used with a low-frequency clock of less than\r\n            8 MHz that can be obtained with the use of HSI or HSE but not of PLL.\r\n  * @retval None\r\n  */\r\n#define __HAL_FLASH_HALF_CYCLE_ACCESS_ENABLE() (FLASH->ACR |= FLASH_ACR_HLFCYA)\r\n\r\n/**\r\n  * @brief  Disable the FLASH half cycle access.\r\n  * @note   half cycle access can only be used with a low-frequency clock of less than\r\n            8 MHz that can be obtained with the use of HSI or HSE but not of PLL.\r\n  * @retval None\r\n  */\r\n#define __HAL_FLASH_HALF_CYCLE_ACCESS_DISABLE() (FLASH->ACR &= (~FLASH_ACR_HLFCYA))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(FLASH_ACR_LATENCY)\r\n/** @defgroup FLASH_EM_Latency FLASH Latency\r\n *  @brief macros to handle FLASH Latency\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Set the FLASH Latency.\r\n * @param  __LATENCY__ FLASH Latency\r\n *         The value of this parameter depend on device used within the same series\r\n * @retval None\r\n */\r\n#define __HAL_FLASH_SET_LATENCY(__LATENCY__) (FLASH->ACR = (FLASH->ACR & (~FLASH_ACR_LATENCY)) | (__LATENCY__))\r\n\r\n/**\r\n * @brief  Get the FLASH Latency.\r\n * @retval FLASH Latency\r\n *         The value of this parameter depend on device used within the same series\r\n */\r\n#define __HAL_FLASH_GET_LATENCY() (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* FLASH_ACR_LATENCY */\r\n/** @defgroup FLASH_Prefetch FLASH Prefetch\r\n *  @brief macros to handle FLASH Prefetch buffer\r\n * @{\r\n */\r\n/**\r\n * @brief  Enable the FLASH prefetch buffer.\r\n * @retval None\r\n */\r\n#define __HAL_FLASH_PREFETCH_BUFFER_ENABLE() (FLASH->ACR |= FLASH_ACR_PRFTBE)\r\n\r\n/**\r\n * @brief  Disable the FLASH prefetch buffer.\r\n * @retval None\r\n */\r\n#define __HAL_FLASH_PREFETCH_BUFFER_DISABLE() (FLASH->ACR &= (~FLASH_ACR_PRFTBE))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Include FLASH HAL Extended module */\r\n#include \"stm32f1xx_hal_flash_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup FLASH_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASH_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* IO operation functions *****************************************************/\r\nHAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data);\r\nHAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data);\r\n\r\n/* FLASH IRQ handler function */\r\nvoid HAL_FLASH_IRQHandler(void);\r\n/* Callbacks in non blocking modes */\r\nvoid HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue);\r\nvoid HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASH_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* Peripheral Control functions ***********************************************/\r\nHAL_StatusTypeDef HAL_FLASH_Unlock(void);\r\nHAL_StatusTypeDef HAL_FLASH_Lock(void);\r\nHAL_StatusTypeDef HAL_FLASH_OB_Unlock(void);\r\nHAL_StatusTypeDef HAL_FLASH_OB_Lock(void);\r\nvoid              HAL_FLASH_OB_Launch(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASH_Exported_Functions_Group3\r\n * @{\r\n */\r\n/* Peripheral State and Error functions ***************************************/\r\nuint32_t HAL_FLASH_GetError(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private function -------------------------------------------------*/\r\n/** @addtogroup FLASH_Private_Functions\r\n * @{\r\n */\r\nHAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout);\r\n#if defined(FLASH_BANK2_END)\r\nHAL_StatusTypeDef FLASH_WaitForLastOperationBank2(uint32_t Timeout);\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_FLASH_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_flash_ex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of Flash HAL Extended module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_FLASH_EX_H\r\n#define __STM32F1xx_HAL_FLASH_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASHEx\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASHEx_Private_Constants\r\n * @{\r\n */\r\n\r\n#define FLASH_SIZE_DATA_REGISTER 0x1FFFF7E0U\r\n#define OBR_REG_INDEX            1U\r\n#define SR_FLAG_MASK             ((uint32_t)(FLASH_SR_BSY | FLASH_SR_PGERR | FLASH_SR_WRPRTERR | FLASH_SR_EOP))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASHEx_Private_Macros\r\n * @{\r\n */\r\n\r\n#define IS_FLASH_TYPEERASE(VALUE) (((VALUE) == FLASH_TYPEERASE_PAGES) || ((VALUE) == FLASH_TYPEERASE_MASSERASE))\r\n\r\n#define IS_OPTIONBYTE(VALUE) (((VALUE) <= (OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER | OPTIONBYTE_DATA)))\r\n\r\n#define IS_WRPSTATE(VALUE) (((VALUE) == OB_WRPSTATE_DISABLE) || ((VALUE) == OB_WRPSTATE_ENABLE))\r\n\r\n#define IS_OB_RDP_LEVEL(LEVEL) (((LEVEL) == OB_RDP_LEVEL_0) || ((LEVEL) == OB_RDP_LEVEL_1))\r\n\r\n#define IS_OB_DATA_ADDRESS(ADDRESS) (((ADDRESS) == OB_DATA_ADDRESS_DATA0) || ((ADDRESS) == OB_DATA_ADDRESS_DATA1))\r\n\r\n#define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW))\r\n\r\n#define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NO_RST) || ((SOURCE) == OB_STOP_RST))\r\n\r\n#define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NO_RST) || ((SOURCE) == OB_STDBY_RST))\r\n\r\n#if defined(FLASH_BANK2_END)\r\n#define IS_OB_BOOT1(BOOT1) (((BOOT1) == OB_BOOT1_RESET) || ((BOOT1) == OB_BOOT1_SET))\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/* Low Density */\r\n#if (defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6))\r\n#define IS_FLASH_NB_PAGES(ADDRESS, NBPAGES) \\\r\n  (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x08007FFFU) : ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x08003FFFU))\r\n#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */\r\n\r\n/* Medium Density */\r\n#if (defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB))\r\n#define IS_FLASH_NB_PAGES(ADDRESS, NBPAGES)                                  \\\r\n  (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U)                      \\\r\n       ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0801FFFFU)        \\\r\n       : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x40U)               \\\r\n              ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0800FFFFU) \\\r\n              : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x08007FFFU) : ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x08003FFFU))))\r\n#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB*/\r\n\r\n/* High Density */\r\n#if (defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE))\r\n#define IS_FLASH_NB_PAGES(ADDRESS, NBPAGES)                           \\\r\n  (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x200U)              \\\r\n       ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0807FFFFU) \\\r\n       : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x180U) ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0805FFFFU) : ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0803FFFFU)))\r\n#endif /* STM32F100xE || STM32F101xE || STM32F103xE */\r\n\r\n/* XL Density */\r\n#if defined(FLASH_BANK2_END)\r\n#define IS_FLASH_NB_PAGES(ADDRESS, NBPAGES) \\\r\n  (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x400U) ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x080FFFFFU) : ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x080BFFFFU))\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/* Connectivity Line */\r\n#if (defined(STM32F105xC) || defined(STM32F107xC))\r\n#define IS_FLASH_NB_PAGES(ADDRESS, NBPAGES)                           \\\r\n  (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x100U)              \\\r\n       ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0803FFFFU) \\\r\n       : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U) ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0801FFFFU) : ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0800FFFFU)))\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#define IS_OB_WRP(PAGE) (((PAGE) != 0x0000000U))\r\n\r\n#if defined(FLASH_BANK2_END)\r\n#define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1) || ((BANK) == FLASH_BANK_2) || ((BANK) == FLASH_BANK_BOTH))\r\n#else\r\n#define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1))\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/* Low Density */\r\n#if (defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6))\r\n#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? ((ADDRESS) <= FLASH_BANK1_END) : ((ADDRESS) <= 0x08003FFFU)))\r\n\r\n#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */\r\n\r\n/* Medium Density */\r\n#if (defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB))\r\n#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)                                                      \\\r\n  (((ADDRESS) >= FLASH_BASE)                                                                   \\\r\n   && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U)                                    \\\r\n           ? ((ADDRESS) <= FLASH_BANK1_END)                                                    \\\r\n           : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x40U) ? ((ADDRESS) <= 0x0800FFFF) \\\r\n                                                                   : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? ((ADDRESS) <= 0x08007FFF) : ((ADDRESS) <= 0x08003FFFU)))))\r\n\r\n#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB*/\r\n\r\n/* High Density */\r\n#if (defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE))\r\n#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)                                                     \\\r\n  (((ADDRESS) >= FLASH_BASE)                                                                  \\\r\n   && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x200U) ? ((ADDRESS) <= FLASH_BANK1_END) \\\r\n                                                             : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x180U) ? ((ADDRESS) <= 0x0805FFFFU) : ((ADDRESS) <= 0x0803FFFFU))))\r\n\r\n#endif /* STM32F100xE || STM32F101xE || STM32F103xE */\r\n\r\n/* XL Density */\r\n#if defined(FLASH_BANK2_END)\r\n#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x400U) ? ((ADDRESS) <= FLASH_BANK2_END) : ((ADDRESS) <= 0x080BFFFFU)))\r\n\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/* Connectivity Line */\r\n#if (defined(STM32F105xC) || defined(STM32F107xC))\r\n#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)                                                     \\\r\n  (((ADDRESS) >= FLASH_BASE)                                                                  \\\r\n   && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x100U) ? ((ADDRESS) <= FLASH_BANK1_END) \\\r\n                                                             : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U) ? ((ADDRESS) <= 0x0801FFFFU) : ((ADDRESS) <= 0x0800FFFFU))))\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Exported_Types FLASHEx Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  FLASH Erase structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t TypeErase; /*!< TypeErase: Mass erase or page erase.\r\n                           This parameter can be a value of @ref FLASHEx_Type_Erase */\r\n\r\n  uint32_t Banks; /*!< Select banks to erase when Mass erase is enabled.\r\n                       This parameter must be a value of @ref FLASHEx_Banks */\r\n\r\n  uint32_t PageAddress; /*!< PageAdress: Initial FLASH page address to erase when mass erase is disabled\r\n                             This parameter must be a number between Min_Data = 0x08000000 and Max_Data = FLASH_BANKx_END\r\n                             (x = 1 or 2 depending on devices)*/\r\n\r\n  uint32_t NbPages; /*!< NbPages: Number of pagess to be erased.\r\n                         This parameter must be a value between Min_Data = 1 and Max_Data = (max number of pages - value of initial page)*/\r\n\r\n} FLASH_EraseInitTypeDef;\r\n\r\n/**\r\n * @brief  FLASH Options bytes program structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t OptionType; /*!< OptionType: Option byte to be configured.\r\n                            This parameter can be a value of @ref FLASHEx_OB_Type */\r\n\r\n  uint32_t WRPState; /*!< WRPState: Write protection activation or deactivation.\r\n                          This parameter can be a value of @ref FLASHEx_OB_WRP_State */\r\n\r\n  uint32_t WRPPage; /*!< WRPPage: specifies the page(s) to be write protected\r\n                         This parameter can be a value of @ref FLASHEx_OB_Write_Protection */\r\n\r\n  uint32_t Banks; /*!< Select banks for WRP activation/deactivation of all sectors.\r\n                       This parameter must be a value of @ref FLASHEx_Banks */\r\n\r\n  uint8_t RDPLevel; /*!< RDPLevel: Set the read protection level..\r\n                         This parameter can be a value of @ref FLASHEx_OB_Read_Protection */\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  uint8_t USERConfig; /*!< USERConfig: Program the FLASH User Option Byte:\r\n                           IWDG / STOP / STDBY / BOOT1\r\n                           This parameter can be a combination of @ref FLASHEx_OB_IWatchdog, @ref FLASHEx_OB_nRST_STOP,\r\n                           @ref FLASHEx_OB_nRST_STDBY, @ref FLASHEx_OB_BOOT1 */\r\n#else\r\n  uint8_t USERConfig; /*!< USERConfig: Program the FLASH User Option Byte:\r\n                           IWDG / STOP / STDBY\r\n                           This parameter can be a combination of @ref FLASHEx_OB_IWatchdog, @ref FLASHEx_OB_nRST_STOP,\r\n                           @ref FLASHEx_OB_nRST_STDBY */\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  uint32_t DATAAddress; /*!< DATAAddress: Address of the option byte DATA to be programmed\r\n                             This parameter can be a value of @ref FLASHEx_OB_Data_Address */\r\n\r\n  uint8_t DATAData; /*!< DATAData: Data to be stored in the option byte DATA\r\n                         This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF */\r\n} FLASH_OBProgramInitTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Exported_Constants FLASHEx Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASHEx_Constants FLASH Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASHEx_Page_Size Page Size\r\n * @{\r\n */\r\n#if (defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6) || defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB))\r\n#define FLASH_PAGE_SIZE 0x400U\r\n#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */\r\n       /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */\r\n\r\n#if (defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC))\r\n#define FLASH_PAGE_SIZE 0x800U\r\n#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */\r\n       /* STM32F101xG || STM32F103xG */\r\n       /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_Type_Erase Type Erase\r\n * @{\r\n */\r\n#define FLASH_TYPEERASE_PAGES     0x00U /*!<Pages erase only*/\r\n#define FLASH_TYPEERASE_MASSERASE 0x02U /*!<Flash mass erase activation*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_Banks Banks\r\n * @{\r\n */\r\n#if defined(FLASH_BANK2_END)\r\n#define FLASH_BANK_1    1U                                      /*!< Bank 1   */\r\n#define FLASH_BANK_2    2U                                      /*!< Bank 2   */\r\n#define FLASH_BANK_BOTH ((uint32_t)FLASH_BANK_1 | FLASH_BANK_2) /*!< Bank1 and Bank2  */\r\n\r\n#else\r\n#define FLASH_BANK_1 1U /*!< Bank 1   */\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OptionByte_Constants Option Byte Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_Type Option Bytes Type\r\n * @{\r\n */\r\n#define OPTIONBYTE_WRP  0x01U /*!<WRP option byte configuration*/\r\n#define OPTIONBYTE_RDP  0x02U /*!<RDP option byte configuration*/\r\n#define OPTIONBYTE_USER 0x04U /*!<USER option byte configuration*/\r\n#define OPTIONBYTE_DATA 0x08U /*!<DATA option byte configuration*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_WRP_State Option Byte WRP State\r\n * @{\r\n */\r\n#define OB_WRPSTATE_DISABLE 0x00U /*!<Disable the write protection of the desired pages*/\r\n#define OB_WRPSTATE_ENABLE  0x01U /*!<Enable the write protection of the desired pagess*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_Write_Protection Option Bytes Write Protection\r\n * @{\r\n */\r\n/* STM32 Low and Medium density devices */\r\n#if defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6) || defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB)\r\n#define OB_WRP_PAGES0TO3   0x00000001U /*!< Write protection of page 0 to 3 */\r\n#define OB_WRP_PAGES4TO7   0x00000002U /*!< Write protection of page 4 to 7 */\r\n#define OB_WRP_PAGES8TO11  0x00000004U /*!< Write protection of page 8 to 11 */\r\n#define OB_WRP_PAGES12TO15 0x00000008U /*!< Write protection of page 12 to 15 */\r\n#define OB_WRP_PAGES16TO19 0x00000010U /*!< Write protection of page 16 to 19 */\r\n#define OB_WRP_PAGES20TO23 0x00000020U /*!< Write protection of page 20 to 23 */\r\n#define OB_WRP_PAGES24TO27 0x00000040U /*!< Write protection of page 24 to 27 */\r\n#define OB_WRP_PAGES28TO31 0x00000080U /*!< Write protection of page 28 to 31 */\r\n#endif                                 /* STM32F101x6 || STM32F102x6 || STM32F103x6 */\r\n                                       /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */\r\n\r\n/* STM32 Medium-density devices */\r\n#if defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB)\r\n#define OB_WRP_PAGES32TO35   0x00000100U /*!< Write protection of page 32 to 35 */\r\n#define OB_WRP_PAGES36TO39   0x00000200U /*!< Write protection of page 36 to 39 */\r\n#define OB_WRP_PAGES40TO43   0x00000400U /*!< Write protection of page 40 to 43 */\r\n#define OB_WRP_PAGES44TO47   0x00000800U /*!< Write protection of page 44 to 47 */\r\n#define OB_WRP_PAGES48TO51   0x00001000U /*!< Write protection of page 48 to 51 */\r\n#define OB_WRP_PAGES52TO55   0x00002000U /*!< Write protection of page 52 to 55 */\r\n#define OB_WRP_PAGES56TO59   0x00004000U /*!< Write protection of page 56 to 59 */\r\n#define OB_WRP_PAGES60TO63   0x00008000U /*!< Write protection of page 60 to 63 */\r\n#define OB_WRP_PAGES64TO67   0x00010000U /*!< Write protection of page 64 to 67 */\r\n#define OB_WRP_PAGES68TO71   0x00020000U /*!< Write protection of page 68 to 71 */\r\n#define OB_WRP_PAGES72TO75   0x00040000U /*!< Write protection of page 72 to 75 */\r\n#define OB_WRP_PAGES76TO79   0x00080000U /*!< Write protection of page 76 to 79 */\r\n#define OB_WRP_PAGES80TO83   0x00100000U /*!< Write protection of page 80 to 83 */\r\n#define OB_WRP_PAGES84TO87   0x00200000U /*!< Write protection of page 84 to 87 */\r\n#define OB_WRP_PAGES88TO91   0x00400000U /*!< Write protection of page 88 to 91 */\r\n#define OB_WRP_PAGES92TO95   0x00800000U /*!< Write protection of page 92 to 95 */\r\n#define OB_WRP_PAGES96TO99   0x01000000U /*!< Write protection of page 96 to 99 */\r\n#define OB_WRP_PAGES100TO103 0x02000000U /*!< Write protection of page 100 to 103 */\r\n#define OB_WRP_PAGES104TO107 0x04000000U /*!< Write protection of page 104 to 107 */\r\n#define OB_WRP_PAGES108TO111 0x08000000U /*!< Write protection of page 108 to 111 */\r\n#define OB_WRP_PAGES112TO115 0x10000000U /*!< Write protection of page 112 to 115 */\r\n#define OB_WRP_PAGES116TO119 0x20000000U /*!< Write protection of page 115 to 119 */\r\n#define OB_WRP_PAGES120TO123 0x40000000U /*!< Write protection of page 120 to 123 */\r\n#define OB_WRP_PAGES124TO127 0x80000000U /*!< Write protection of page 124 to 127 */\r\n#endif                                   /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */\r\n\r\n/* STM32 High-density, XL-density and Connectivity line devices */\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define OB_WRP_PAGES0TO1    0x00000001U /*!< Write protection of page 0 TO 1 */\r\n#define OB_WRP_PAGES2TO3    0x00000002U /*!< Write protection of page 2 TO 3 */\r\n#define OB_WRP_PAGES4TO5    0x00000004U /*!< Write protection of page 4 TO 5 */\r\n#define OB_WRP_PAGES6TO7    0x00000008U /*!< Write protection of page 6 TO 7 */\r\n#define OB_WRP_PAGES8TO9    0x00000010U /*!< Write protection of page 8 TO 9 */\r\n#define OB_WRP_PAGES10TO11  0x00000020U /*!< Write protection of page 10 TO 11 */\r\n#define OB_WRP_PAGES12TO13  0x00000040U /*!< Write protection of page 12 TO 13 */\r\n#define OB_WRP_PAGES14TO15  0x00000080U /*!< Write protection of page 14 TO 15 */\r\n#define OB_WRP_PAGES16TO17  0x00000100U /*!< Write protection of page 16 TO 17 */\r\n#define OB_WRP_PAGES18TO19  0x00000200U /*!< Write protection of page 18 TO 19 */\r\n#define OB_WRP_PAGES20TO21  0x00000400U /*!< Write protection of page 20 TO 21 */\r\n#define OB_WRP_PAGES22TO23  0x00000800U /*!< Write protection of page 22 TO 23 */\r\n#define OB_WRP_PAGES24TO25  0x00001000U /*!< Write protection of page 24 TO 25 */\r\n#define OB_WRP_PAGES26TO27  0x00002000U /*!< Write protection of page 26 TO 27 */\r\n#define OB_WRP_PAGES28TO29  0x00004000U /*!< Write protection of page 28 TO 29 */\r\n#define OB_WRP_PAGES30TO31  0x00008000U /*!< Write protection of page 30 TO 31 */\r\n#define OB_WRP_PAGES32TO33  0x00010000U /*!< Write protection of page 32 TO 33 */\r\n#define OB_WRP_PAGES34TO35  0x00020000U /*!< Write protection of page 34 TO 35 */\r\n#define OB_WRP_PAGES36TO37  0x00040000U /*!< Write protection of page 36 TO 37 */\r\n#define OB_WRP_PAGES38TO39  0x00080000U /*!< Write protection of page 38 TO 39 */\r\n#define OB_WRP_PAGES40TO41  0x00100000U /*!< Write protection of page 40 TO 41 */\r\n#define OB_WRP_PAGES42TO43  0x00200000U /*!< Write protection of page 42 TO 43 */\r\n#define OB_WRP_PAGES44TO45  0x00400000U /*!< Write protection of page 44 TO 45 */\r\n#define OB_WRP_PAGES46TO47  0x00800000U /*!< Write protection of page 46 TO 47 */\r\n#define OB_WRP_PAGES48TO49  0x01000000U /*!< Write protection of page 48 TO 49 */\r\n#define OB_WRP_PAGES50TO51  0x02000000U /*!< Write protection of page 50 TO 51 */\r\n#define OB_WRP_PAGES52TO53  0x04000000U /*!< Write protection of page 52 TO 53 */\r\n#define OB_WRP_PAGES54TO55  0x08000000U /*!< Write protection of page 54 TO 55 */\r\n#define OB_WRP_PAGES56TO57  0x10000000U /*!< Write protection of page 56 TO 57 */\r\n#define OB_WRP_PAGES58TO59  0x20000000U /*!< Write protection of page 58 TO 59 */\r\n#define OB_WRP_PAGES60TO61  0x40000000U /*!< Write protection of page 60 TO 61 */\r\n#define OB_WRP_PAGES62TO127 0x80000000U /*!< Write protection of page 62 TO 127 */\r\n#define OB_WRP_PAGES62TO255 0x80000000U /*!< Write protection of page 62 TO 255 */\r\n#define OB_WRP_PAGES62TO511 0x80000000U /*!< Write protection of page 62 TO 511 */\r\n#endif                                  /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */\r\n                                        /* STM32F101xG || STM32F103xG */\r\n                                        /* STM32F105xC || STM32F107xC */\r\n\r\n#define OB_WRP_ALLPAGES 0xFFFFFFFFU /*!< Write protection of all Pages */\r\n\r\n/* Low Density */\r\n#if defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6)\r\n#define OB_WRP_PAGES0TO31MASK 0x000000FFU\r\n#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */\r\n\r\n/* Medium Density */\r\n#if defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB)\r\n#define OB_WRP_PAGES0TO31MASK   0x000000FFU\r\n#define OB_WRP_PAGES32TO63MASK  0x0000FF00U\r\n#define OB_WRP_PAGES64TO95MASK  0x00FF0000U\r\n#define OB_WRP_PAGES96TO127MASK 0xFF000000U\r\n#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB*/\r\n\r\n/* High Density */\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE)\r\n#define OB_WRP_PAGES0TO15MASK   0x000000FFU\r\n#define OB_WRP_PAGES16TO31MASK  0x0000FF00U\r\n#define OB_WRP_PAGES32TO47MASK  0x00FF0000U\r\n#define OB_WRP_PAGES48TO255MASK 0xFF000000U\r\n#endif /* STM32F100xE || STM32F101xE || STM32F103xE */\r\n\r\n/* XL Density */\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define OB_WRP_PAGES0TO15MASK   0x000000FFU\r\n#define OB_WRP_PAGES16TO31MASK  0x0000FF00U\r\n#define OB_WRP_PAGES32TO47MASK  0x00FF0000U\r\n#define OB_WRP_PAGES48TO511MASK 0xFF000000U\r\n#endif /* STM32F101xG || STM32F103xG */\r\n\r\n/* Connectivity line devices */\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define OB_WRP_PAGES0TO15MASK   0x000000FFU\r\n#define OB_WRP_PAGES16TO31MASK  0x0000FF00U\r\n#define OB_WRP_PAGES32TO47MASK  0x00FF0000U\r\n#define OB_WRP_PAGES48TO127MASK 0xFF000000U\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_Read_Protection Option Byte Read Protection\r\n * @{\r\n */\r\n#define OB_RDP_LEVEL_0 ((uint8_t)0xA5)\r\n#define OB_RDP_LEVEL_1 ((uint8_t)0x00)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_IWatchdog Option Byte IWatchdog\r\n * @{\r\n */\r\n#define OB_IWDG_SW ((uint16_t)0x0001) /*!< Software IWDG selected */\r\n#define OB_IWDG_HW ((uint16_t)0x0000) /*!< Hardware IWDG selected */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_nRST_STOP Option Byte nRST STOP\r\n * @{\r\n */\r\n#define OB_STOP_NO_RST ((uint16_t)0x0002) /*!< No reset generated when entering in STOP */\r\n#define OB_STOP_RST    ((uint16_t)0x0000) /*!< Reset generated when entering in STOP */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_nRST_STDBY Option Byte nRST STDBY\r\n * @{\r\n */\r\n#define OB_STDBY_NO_RST ((uint16_t)0x0004) /*!< No reset generated when entering in STANDBY */\r\n#define OB_STDBY_RST    ((uint16_t)0x0000) /*!< Reset generated when entering in STANDBY */\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(FLASH_BANK2_END)\r\n/** @defgroup FLASHEx_OB_BOOT1 Option Byte BOOT1\r\n * @{\r\n */\r\n#define OB_BOOT1_RESET ((uint16_t)0x0000) /*!< BOOT1 Reset */\r\n#define OB_BOOT1_SET   ((uint16_t)0x0008) /*!< BOOT1 Set */\r\n/**\r\n * @}\r\n */\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/** @defgroup FLASHEx_OB_Data_Address  Option Byte Data Address\r\n * @{\r\n */\r\n#define OB_DATA_ADDRESS_DATA0 0x1FFFF804U\r\n#define OB_DATA_ADDRESS_DATA1 0x1FFFF806U\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASHEx_Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASH_Flag_definition Flag definition\r\n * @brief Flag definition\r\n * @{\r\n */\r\n#if defined(FLASH_BANK2_END)\r\n#define FLASH_FLAG_BSY    FLASH_FLAG_BSY_BANK1    /*!< FLASH Bank1 Busy flag                   */\r\n#define FLASH_FLAG_PGERR  FLASH_FLAG_PGERR_BANK1  /*!< FLASH Bank1 Programming error flag      */\r\n#define FLASH_FLAG_WRPERR FLASH_FLAG_WRPERR_BANK1 /*!< FLASH Bank1 Write protected error flag  */\r\n#define FLASH_FLAG_EOP    FLASH_FLAG_EOP_BANK1    /*!< FLASH Bank1 End of Operation flag       */\r\n\r\n#define FLASH_FLAG_BSY_BANK1    FLASH_SR_BSY      /*!< FLASH Bank1 Busy flag                   */\r\n#define FLASH_FLAG_PGERR_BANK1  FLASH_SR_PGERR    /*!< FLASH Bank1 Programming error flag      */\r\n#define FLASH_FLAG_WRPERR_BANK1 FLASH_SR_WRPRTERR /*!< FLASH Bank1 Write protected error flag  */\r\n#define FLASH_FLAG_EOP_BANK1    FLASH_SR_EOP      /*!< FLASH Bank1 End of Operation flag       */\r\n\r\n#define FLASH_FLAG_BSY_BANK2    (FLASH_SR2_BSY << 16U)      /*!< FLASH Bank2 Busy flag                   */\r\n#define FLASH_FLAG_PGERR_BANK2  (FLASH_SR2_PGERR << 16U)    /*!< FLASH Bank2 Programming error flag      */\r\n#define FLASH_FLAG_WRPERR_BANK2 (FLASH_SR2_WRPRTERR << 16U) /*!< FLASH Bank2 Write protected error flag  */\r\n#define FLASH_FLAG_EOP_BANK2    (FLASH_SR2_EOP << 16U)      /*!< FLASH Bank2 End of Operation flag       */\r\n\r\n#else\r\n\r\n#define FLASH_FLAG_BSY    FLASH_SR_BSY      /*!< FLASH Busy flag                          */\r\n#define FLASH_FLAG_PGERR  FLASH_SR_PGERR    /*!< FLASH Programming error flag             */\r\n#define FLASH_FLAG_WRPERR FLASH_SR_WRPRTERR /*!< FLASH Write protected error flag         */\r\n#define FLASH_FLAG_EOP    FLASH_SR_EOP      /*!< FLASH End of Operation flag              */\r\n\r\n#endif\r\n#define FLASH_FLAG_OPTVERR ((OBR_REG_INDEX << 8U | FLASH_OBR_OPTERR)) /*!< Option Byte Error        */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASH_Interrupt_definition Interrupt definition\r\n * @brief FLASH Interrupt definition\r\n * @{\r\n */\r\n#if defined(FLASH_BANK2_END)\r\n#define FLASH_IT_EOP FLASH_IT_EOP_BANK1 /*!< End of FLASH Operation Interrupt source Bank1 */\r\n#define FLASH_IT_ERR FLASH_IT_ERR_BANK1 /*!< Error Interrupt source Bank1                  */\r\n\r\n#define FLASH_IT_EOP_BANK1 FLASH_CR_EOPIE /*!< End of FLASH Operation Interrupt source Bank1 */\r\n#define FLASH_IT_ERR_BANK1 FLASH_CR_ERRIE /*!< Error Interrupt source Bank1                  */\r\n\r\n#define FLASH_IT_EOP_BANK2 (FLASH_CR2_EOPIE << 16U) /*!< End of FLASH Operation Interrupt source Bank2 */\r\n#define FLASH_IT_ERR_BANK2 (FLASH_CR2_ERRIE << 16U) /*!< Error Interrupt source Bank2                  */\r\n\r\n#else\r\n\r\n#define FLASH_IT_EOP FLASH_CR_EOPIE /*!< End of FLASH Operation Interrupt source */\r\n#define FLASH_IT_ERR FLASH_CR_ERRIE /*!< Error Interrupt source                  */\r\n\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Exported_Macros FLASHEx Exported Macros\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASH_Interrupt Interrupt\r\n *  @brief macros to handle FLASH interrupts\r\n * @{\r\n */\r\n\r\n#if defined(FLASH_BANK2_END)\r\n/**\r\n * @brief  Enable the specified FLASH interrupt.\r\n * @param  __INTERRUPT__  FLASH interrupt\r\n *     This parameter can be any combination of the following values:\r\n *     @arg @ref FLASH_IT_EOP_BANK1 End of FLASH Operation Interrupt on bank1\r\n *     @arg @ref FLASH_IT_ERR_BANK1 Error Interrupt on bank1\r\n *     @arg @ref FLASH_IT_EOP_BANK2 End of FLASH Operation Interrupt on bank2\r\n *     @arg @ref FLASH_IT_ERR_BANK2 Error Interrupt on bank2\r\n * @retval none\r\n */\r\n#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__)           \\\r\n  do {                                                 \\\r\n    /* Enable Bank1 IT */                              \\\r\n    SET_BIT(FLASH->CR, ((__INTERRUPT__)&0x0000FFFFU)); \\\r\n    /* Enable Bank2 IT */                              \\\r\n    SET_BIT(FLASH->CR2, ((__INTERRUPT__) >> 16U));     \\\r\n  } while (0U)\r\n\r\n/**\r\n * @brief  Disable the specified FLASH interrupt.\r\n * @param  __INTERRUPT__  FLASH interrupt\r\n *     This parameter can be any combination of the following values:\r\n *     @arg @ref FLASH_IT_EOP_BANK1 End of FLASH Operation Interrupt on bank1\r\n *     @arg @ref FLASH_IT_ERR_BANK1 Error Interrupt on bank1\r\n *     @arg @ref FLASH_IT_EOP_BANK2 End of FLASH Operation Interrupt on bank2\r\n *     @arg @ref FLASH_IT_ERR_BANK2 Error Interrupt on bank2\r\n * @retval none\r\n */\r\n#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__)            \\\r\n  do {                                                   \\\r\n    /* Disable Bank1 IT */                               \\\r\n    CLEAR_BIT(FLASH->CR, ((__INTERRUPT__)&0x0000FFFFU)); \\\r\n    /* Disable Bank2 IT */                               \\\r\n    CLEAR_BIT(FLASH->CR2, ((__INTERRUPT__) >> 16U));     \\\r\n  } while (0U)\r\n\r\n/**\r\n * @brief  Get the specified FLASH flag status.\r\n * @param  __FLAG__ specifies the FLASH flag to check.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref FLASH_FLAG_EOP_BANK1    FLASH End of Operation flag on bank1\r\n *            @arg @ref FLASH_FLAG_WRPERR_BANK1 FLASH Write protected error flag on bank1\r\n *            @arg @ref FLASH_FLAG_PGERR_BANK1  FLASH Programming error flag on bank1\r\n *            @arg @ref FLASH_FLAG_BSY_BANK1    FLASH Busy flag on bank1\r\n *            @arg @ref FLASH_FLAG_EOP_BANK2    FLASH End of Operation flag on bank2\r\n *            @arg @ref FLASH_FLAG_WRPERR_BANK2 FLASH Write protected error flag on bank2\r\n *            @arg @ref FLASH_FLAG_PGERR_BANK2  FLASH Programming error flag on bank2\r\n *            @arg @ref FLASH_FLAG_BSY_BANK2    FLASH Busy flag on bank2\r\n *            @arg @ref FLASH_FLAG_OPTVERR  Loaded OB and its complement do not match\r\n * @retval The new state of __FLAG__ (SET or RESET).\r\n */\r\n#define __HAL_FLASH_GET_FLAG(__FLAG__) \\\r\n  (((__FLAG__) == FLASH_FLAG_OPTVERR) ? (FLASH->OBR & FLASH_OBR_OPTERR) : ((((__FLAG__)&SR_FLAG_MASK) != RESET) ? (FLASH->SR & ((__FLAG__)&SR_FLAG_MASK)) : (FLASH->SR2 & ((__FLAG__) >> 16U))))\r\n\r\n/**\r\n * @brief  Clear the specified FLASH flag.\r\n * @param  __FLAG__ specifies the FLASH flags to clear.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg @ref FLASH_FLAG_EOP_BANK1    FLASH End of Operation flag on bank1\r\n *            @arg @ref FLASH_FLAG_WRPERR_BANK1 FLASH Write protected error flag on bank1\r\n *            @arg @ref FLASH_FLAG_PGERR_BANK1  FLASH Programming error flag on bank1\r\n *            @arg @ref FLASH_FLAG_BSY_BANK1    FLASH Busy flag on bank1\r\n *            @arg @ref FLASH_FLAG_EOP_BANK2    FLASH End of Operation flag on bank2\r\n *            @arg @ref FLASH_FLAG_WRPERR_BANK2 FLASH Write protected error flag on bank2\r\n *            @arg @ref FLASH_FLAG_PGERR_BANK2  FLASH Programming error flag on bank2\r\n *            @arg @ref FLASH_FLAG_BSY_BANK2    FLASH Busy flag on bank2\r\n *            @arg @ref FLASH_FLAG_OPTVERR  Loaded OB and its complement do not match\r\n * @retval none\r\n */\r\n#define __HAL_FLASH_CLEAR_FLAG(__FLAG__)        \\\r\n  do {                                          \\\r\n    /* Clear FLASH_FLAG_OPTVERR flag */         \\\r\n    if ((__FLAG__) == FLASH_FLAG_OPTVERR) {     \\\r\n      CLEAR_BIT(FLASH->OBR, FLASH_OBR_OPTERR);  \\\r\n    } else {                                    \\\r\n      /* Clear Flag in Bank1 */                 \\\r\n      if (((__FLAG__)&SR_FLAG_MASK) != RESET) { \\\r\n        FLASH->SR = ((__FLAG__)&SR_FLAG_MASK);  \\\r\n      }                                         \\\r\n      /* Clear Flag in Bank2 */                 \\\r\n      if (((__FLAG__) >> 16U) != RESET) {       \\\r\n        FLASH->SR2 = ((__FLAG__) >> 16U);       \\\r\n      }                                         \\\r\n    }                                           \\\r\n  } while (0U)\r\n#else\r\n                      /**\r\n                       * @brief  Enable the specified FLASH interrupt.\r\n                       * @param  __INTERRUPT__  FLASH interrupt\r\n                       *         This parameter can be any combination of the following values:\r\n                       *     @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt\r\n                       *     @arg @ref FLASH_IT_ERR Error Interrupt\r\n                       * @retval none\r\n                       */\r\n#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__)  (FLASH->CR |= (__INTERRUPT__))\r\n\r\n/**\r\n * @brief  Disable the specified FLASH interrupt.\r\n * @param  __INTERRUPT__  FLASH interrupt\r\n *         This parameter can be any combination of the following values:\r\n *     @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt\r\n *     @arg @ref FLASH_IT_ERR Error Interrupt\r\n * @retval none\r\n */\r\n#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__) (FLASH->CR &= ~(__INTERRUPT__))\r\n\r\n/**\r\n * @brief  Get the specified FLASH flag status.\r\n * @param  __FLAG__ specifies the FLASH flag to check.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref FLASH_FLAG_EOP    FLASH End of Operation flag\r\n *            @arg @ref FLASH_FLAG_WRPERR FLASH Write protected error flag\r\n *            @arg @ref FLASH_FLAG_PGERR  FLASH Programming error flag\r\n *            @arg @ref FLASH_FLAG_BSY    FLASH Busy flag\r\n *            @arg @ref FLASH_FLAG_OPTVERR  Loaded OB and its complement do not match\r\n * @retval The new state of __FLAG__ (SET or RESET).\r\n */\r\n#define __HAL_FLASH_GET_FLAG(__FLAG__)        (((__FLAG__) == FLASH_FLAG_OPTVERR) ? (FLASH->OBR & FLASH_OBR_OPTERR) : (FLASH->SR & (__FLAG__)))\r\n/**\r\n * @brief  Clear the specified FLASH flag.\r\n * @param  __FLAG__ specifies the FLASH flags to clear.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg @ref FLASH_FLAG_EOP    FLASH End of Operation flag\r\n *            @arg @ref FLASH_FLAG_WRPERR FLASH Write protected error flag\r\n *            @arg @ref FLASH_FLAG_PGERR  FLASH Programming error flag\r\n *            @arg @ref FLASH_FLAG_OPTVERR  Loaded OB and its complement do not match\r\n * @retval none\r\n */\r\n#define __HAL_FLASH_CLEAR_FLAG(__FLAG__)       \\\r\n  do {                                         \\\r\n    /* Clear FLASH_FLAG_OPTVERR flag */        \\\r\n    if ((__FLAG__) == FLASH_FLAG_OPTVERR) {    \\\r\n      CLEAR_BIT(FLASH->OBR, FLASH_OBR_OPTERR); \\\r\n    } else {                                   \\\r\n      /* Clear Flag in Bank1 */                \\\r\n      FLASH->SR = (__FLAG__);                  \\\r\n    }                                          \\\r\n  } while (0U)\r\n\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup FLASHEx_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASHEx_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* IO operation functions *****************************************************/\r\nHAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError);\r\nHAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASHEx_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* Peripheral Control functions ***********************************************/\r\nHAL_StatusTypeDef HAL_FLASHEx_OBErase(void);\r\nHAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit);\r\nvoid              HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit);\r\nuint32_t          HAL_FLASHEx_OBGetUserData(uint32_t DATAAdress);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_FLASH_EX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_gpio.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of GPIO HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_GPIO_H\r\n#define __STM32F1xx_HAL_GPIO_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup GPIO\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup GPIO_Exported_Types GPIO Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief GPIO Init structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t Pin; /*!< Specifies the GPIO pins to be configured.\r\n                     This parameter can be any value of @ref GPIO_pins_define */\r\n\r\n  uint32_t Mode; /*!< Specifies the operating mode for the selected pins.\r\n                      This parameter can be a value of @ref GPIO_mode_define */\r\n\r\n  uint32_t Pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.\r\n                      This parameter can be a value of @ref GPIO_pull_define */\r\n\r\n  uint32_t Speed; /*!< Specifies the speed for the selected pins.\r\n                       This parameter can be a value of @ref GPIO_speed_define */\r\n} GPIO_InitTypeDef;\r\n\r\n/**\r\n * @brief  GPIO Bit SET and Bit RESET enumeration\r\n */\r\ntypedef enum { GPIO_PIN_RESET = 0U, GPIO_PIN_SET } GPIO_PinState;\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup GPIO_Exported_Constants GPIO Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIO_pins_define GPIO pins define\r\n * @{\r\n */\r\n#define GPIO_PIN_0   ((uint16_t)0x0001) /* Pin 0 selected    */\r\n#define GPIO_PIN_1   ((uint16_t)0x0002) /* Pin 1 selected    */\r\n#define GPIO_PIN_2   ((uint16_t)0x0004) /* Pin 2 selected    */\r\n#define GPIO_PIN_3   ((uint16_t)0x0008) /* Pin 3 selected    */\r\n#define GPIO_PIN_4   ((uint16_t)0x0010) /* Pin 4 selected    */\r\n#define GPIO_PIN_5   ((uint16_t)0x0020) /* Pin 5 selected    */\r\n#define GPIO_PIN_6   ((uint16_t)0x0040) /* Pin 6 selected    */\r\n#define GPIO_PIN_7   ((uint16_t)0x0080) /* Pin 7 selected    */\r\n#define GPIO_PIN_8   ((uint16_t)0x0100) /* Pin 8 selected    */\r\n#define GPIO_PIN_9   ((uint16_t)0x0200) /* Pin 9 selected    */\r\n#define GPIO_PIN_10  ((uint16_t)0x0400) /* Pin 10 selected   */\r\n#define GPIO_PIN_11  ((uint16_t)0x0800) /* Pin 11 selected   */\r\n#define GPIO_PIN_12  ((uint16_t)0x1000) /* Pin 12 selected   */\r\n#define GPIO_PIN_13  ((uint16_t)0x2000) /* Pin 13 selected   */\r\n#define GPIO_PIN_14  ((uint16_t)0x4000) /* Pin 14 selected   */\r\n#define GPIO_PIN_15  ((uint16_t)0x8000) /* Pin 15 selected   */\r\n#define GPIO_PIN_All ((uint16_t)0xFFFF) /* All pins selected */\r\n\r\n#define GPIO_PIN_MASK 0x0000FFFFU /* PIN mask for assert test */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIO_mode_define GPIO mode define\r\n * @brief GPIO Configuration Mode\r\n *        Elements values convention: 0xX0yz00YZ\r\n *           - X  : GPIO mode or EXTI Mode\r\n *           - y  : External IT or Event trigger detection\r\n *           - z  : IO configuration on External IT or Event\r\n *           - Y  : Output type (Push Pull or Open Drain)\r\n *           - Z  : IO Direction mode (Input, Output, Alternate or Analog)\r\n * @{\r\n */\r\n#define GPIO_MODE_INPUT     0x00000000U     /*!< Input Floating Mode                   */\r\n#define GPIO_MODE_OUTPUT_PP 0x00000001U     /*!< Output Push Pull Mode                 */\r\n#define GPIO_MODE_OUTPUT_OD 0x00000011U     /*!< Output Open Drain Mode                */\r\n#define GPIO_MODE_AF_PP     0x00000002U     /*!< Alternate Function Push Pull Mode     */\r\n#define GPIO_MODE_AF_OD     0x00000012U     /*!< Alternate Function Open Drain Mode    */\r\n#define GPIO_MODE_AF_INPUT  GPIO_MODE_INPUT /*!< Alternate Function Input Mode         */\r\n\r\n#define GPIO_MODE_ANALOG 0x00000003U /*!< Analog Mode  */\r\n\r\n#define GPIO_MODE_IT_RISING         0x10110000U /*!< External Interrupt Mode with Rising edge trigger detection          */\r\n#define GPIO_MODE_IT_FALLING        0x10210000U /*!< External Interrupt Mode with Falling edge trigger detection         */\r\n#define GPIO_MODE_IT_RISING_FALLING 0x10310000U /*!< External Interrupt Mode with Rising/Falling edge trigger detection  */\r\n\r\n#define GPIO_MODE_EVT_RISING         0x10120000U /*!< External Event Mode with Rising edge trigger detection               */\r\n#define GPIO_MODE_EVT_FALLING        0x10220000U /*!< External Event Mode with Falling edge trigger detection              */\r\n#define GPIO_MODE_EVT_RISING_FALLING 0x10320000U /*!< External Event Mode with Rising/Falling edge trigger detection       */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIO_speed_define  GPIO speed define\r\n * @brief GPIO Output Maximum frequency\r\n * @{\r\n */\r\n#define GPIO_SPEED_FREQ_LOW    (GPIO_CRL_MODE0_1) /*!< Low speed */\r\n#define GPIO_SPEED_FREQ_MEDIUM (GPIO_CRL_MODE0_0) /*!< Medium speed */\r\n#define GPIO_SPEED_FREQ_HIGH   (GPIO_CRL_MODE0)   /*!< High speed */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIO_pull_define GPIO pull define\r\n * @brief GPIO Pull-Up or Pull-Down Activation\r\n * @{\r\n */\r\n#define GPIO_NOPULL   0x00000000U /*!< No Pull-up or Pull-down activation  */\r\n#define GPIO_PULLUP   0x00000001U /*!< Pull-up activation                  */\r\n#define GPIO_PULLDOWN 0x00000002U /*!< Pull-down activation                */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup GPIO_Exported_Macros GPIO Exported Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Checks whether the specified EXTI line flag is set or not.\r\n * @param  __EXTI_LINE__: specifies the EXTI line flag to check.\r\n *         This parameter can be GPIO_PIN_x where x can be(0..15)\r\n * @retval The new state of __EXTI_LINE__ (SET or RESET).\r\n */\r\n#define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__))\r\n\r\n/**\r\n * @brief  Clears the EXTI's line pending flags.\r\n * @param  __EXTI_LINE__: specifies the EXTI lines flags to clear.\r\n *         This parameter can be any combination of GPIO_PIN_x where x can be (0..15)\r\n * @retval None\r\n */\r\n#define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__))\r\n\r\n/**\r\n * @brief  Checks whether the specified EXTI line is asserted or not.\r\n * @param  __EXTI_LINE__: specifies the EXTI line to check.\r\n *          This parameter can be GPIO_PIN_x where x can be(0..15)\r\n * @retval The new state of __EXTI_LINE__ (SET or RESET).\r\n */\r\n#define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__))\r\n\r\n/**\r\n * @brief  Clears the EXTI's line pending bits.\r\n * @param  __EXTI_LINE__: specifies the EXTI lines to clear.\r\n *          This parameter can be any combination of GPIO_PIN_x where x can be (0..15)\r\n * @retval None\r\n */\r\n#define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__))\r\n\r\n/**\r\n * @brief  Generates a Software interrupt on selected EXTI line.\r\n * @param  __EXTI_LINE__: specifies the EXTI line to check.\r\n *          This parameter can be GPIO_PIN_x where x can be(0..15)\r\n * @retval None\r\n */\r\n#define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER |= (__EXTI_LINE__))\r\n/**\r\n * @}\r\n */\r\n\r\n/* Include GPIO HAL Extension module */\r\n#include \"stm32f1xx_hal_gpio_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup GPIO_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup GPIO_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* Initialization and de-initialization functions *****************************/\r\nvoid HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);\r\nvoid HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup GPIO_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* IO operation functions *****************************************************/\r\nGPIO_PinState     HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);\r\nvoid              HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);\r\nvoid              HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);\r\nHAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);\r\nvoid              HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);\r\nvoid              HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* Private types -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private constants ---------------------------------------------------------*/\r\n/** @defgroup GPIO_Private_Constants GPIO Private Constants\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup GPIO_Private_Macros GPIO Private Macros\r\n * @{\r\n */\r\n#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))\r\n#define IS_GPIO_PIN(PIN)           ((((PIN)&GPIO_PIN_MASK) != 0x00U) && (((PIN) & ~GPIO_PIN_MASK) == 0x00U))\r\n#define IS_GPIO_MODE(MODE)                                                                                                                                                                             \\\r\n  (((MODE) == GPIO_MODE_INPUT) || ((MODE) == GPIO_MODE_OUTPUT_PP) || ((MODE) == GPIO_MODE_OUTPUT_OD) || ((MODE) == GPIO_MODE_AF_PP) || ((MODE) == GPIO_MODE_AF_OD) || ((MODE) == GPIO_MODE_IT_RISING)  \\\r\n   || ((MODE) == GPIO_MODE_IT_FALLING) || ((MODE) == GPIO_MODE_IT_RISING_FALLING) || ((MODE) == GPIO_MODE_EVT_RISING) || ((MODE) == GPIO_MODE_EVT_FALLING) || ((MODE) == GPIO_MODE_EVT_RISING_FALLING) \\\r\n   || ((MODE) == GPIO_MODE_ANALOG))\r\n#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_SPEED_FREQ_LOW) || ((SPEED) == GPIO_SPEED_FREQ_MEDIUM) || ((SPEED) == GPIO_SPEED_FREQ_HIGH))\r\n#define IS_GPIO_PULL(PULL)   (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || ((PULL) == GPIO_PULLDOWN))\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private functions ---------------------------------------------------------*/\r\n/** @defgroup GPIO_Private_Functions GPIO Private Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_GPIO_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_gpio_ex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of GPIO HAL Extension module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_GPIO_EX_H\r\n#define __STM32F1xx_HAL_GPIO_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIOEx GPIOEx\r\n * @{\r\n */\r\n/* Exported types ------------------------------------------------------------*/\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup GPIOEx_Exported_Constants GPIOEx Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIOEx_EVENTOUT EVENTOUT Cortex Configuration\r\n * @brief This section propose definition to use the Cortex EVENTOUT signal.\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIOEx_EVENTOUT_PIN EVENTOUT Pin\r\n * @{\r\n */\r\n\r\n#define AFIO_EVENTOUT_PIN_0  AFIO_EVCR_PIN_PX0  /*!< EVENTOUT on pin 0 */\r\n#define AFIO_EVENTOUT_PIN_1  AFIO_EVCR_PIN_PX1  /*!< EVENTOUT on pin 1 */\r\n#define AFIO_EVENTOUT_PIN_2  AFIO_EVCR_PIN_PX2  /*!< EVENTOUT on pin 2 */\r\n#define AFIO_EVENTOUT_PIN_3  AFIO_EVCR_PIN_PX3  /*!< EVENTOUT on pin 3 */\r\n#define AFIO_EVENTOUT_PIN_4  AFIO_EVCR_PIN_PX4  /*!< EVENTOUT on pin 4 */\r\n#define AFIO_EVENTOUT_PIN_5  AFIO_EVCR_PIN_PX5  /*!< EVENTOUT on pin 5 */\r\n#define AFIO_EVENTOUT_PIN_6  AFIO_EVCR_PIN_PX6  /*!< EVENTOUT on pin 6 */\r\n#define AFIO_EVENTOUT_PIN_7  AFIO_EVCR_PIN_PX7  /*!< EVENTOUT on pin 7 */\r\n#define AFIO_EVENTOUT_PIN_8  AFIO_EVCR_PIN_PX8  /*!< EVENTOUT on pin 8 */\r\n#define AFIO_EVENTOUT_PIN_9  AFIO_EVCR_PIN_PX9  /*!< EVENTOUT on pin 9 */\r\n#define AFIO_EVENTOUT_PIN_10 AFIO_EVCR_PIN_PX10 /*!< EVENTOUT on pin 10 */\r\n#define AFIO_EVENTOUT_PIN_11 AFIO_EVCR_PIN_PX11 /*!< EVENTOUT on pin 11 */\r\n#define AFIO_EVENTOUT_PIN_12 AFIO_EVCR_PIN_PX12 /*!< EVENTOUT on pin 12 */\r\n#define AFIO_EVENTOUT_PIN_13 AFIO_EVCR_PIN_PX13 /*!< EVENTOUT on pin 13 */\r\n#define AFIO_EVENTOUT_PIN_14 AFIO_EVCR_PIN_PX14 /*!< EVENTOUT on pin 14 */\r\n#define AFIO_EVENTOUT_PIN_15 AFIO_EVCR_PIN_PX15 /*!< EVENTOUT on pin 15 */\r\n\r\n#define IS_AFIO_EVENTOUT_PIN(__PIN__)                                                                                                                                                                 \\\r\n  (((__PIN__) == AFIO_EVENTOUT_PIN_0) || ((__PIN__) == AFIO_EVENTOUT_PIN_1) || ((__PIN__) == AFIO_EVENTOUT_PIN_2) || ((__PIN__) == AFIO_EVENTOUT_PIN_3) || ((__PIN__) == AFIO_EVENTOUT_PIN_4)         \\\r\n   || ((__PIN__) == AFIO_EVENTOUT_PIN_5) || ((__PIN__) == AFIO_EVENTOUT_PIN_6) || ((__PIN__) == AFIO_EVENTOUT_PIN_7) || ((__PIN__) == AFIO_EVENTOUT_PIN_8) || ((__PIN__) == AFIO_EVENTOUT_PIN_9)      \\\r\n   || ((__PIN__) == AFIO_EVENTOUT_PIN_10) || ((__PIN__) == AFIO_EVENTOUT_PIN_11) || ((__PIN__) == AFIO_EVENTOUT_PIN_12) || ((__PIN__) == AFIO_EVENTOUT_PIN_13) || ((__PIN__) == AFIO_EVENTOUT_PIN_14) \\\r\n   || ((__PIN__) == AFIO_EVENTOUT_PIN_15))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIOEx_EVENTOUT_PORT EVENTOUT Port\r\n * @{\r\n */\r\n\r\n#define AFIO_EVENTOUT_PORT_A AFIO_EVCR_PORT_PA /*!< EVENTOUT on port A */\r\n#define AFIO_EVENTOUT_PORT_B AFIO_EVCR_PORT_PB /*!< EVENTOUT on port B */\r\n#define AFIO_EVENTOUT_PORT_C AFIO_EVCR_PORT_PC /*!< EVENTOUT on port C */\r\n#define AFIO_EVENTOUT_PORT_D AFIO_EVCR_PORT_PD /*!< EVENTOUT on port D */\r\n#define AFIO_EVENTOUT_PORT_E AFIO_EVCR_PORT_PE /*!< EVENTOUT on port E */\r\n\r\n#define IS_AFIO_EVENTOUT_PORT(__PORT__) \\\r\n  (((__PORT__) == AFIO_EVENTOUT_PORT_A) || ((__PORT__) == AFIO_EVENTOUT_PORT_B) || ((__PORT__) == AFIO_EVENTOUT_PORT_C) || ((__PORT__) == AFIO_EVENTOUT_PORT_D) || ((__PORT__) == AFIO_EVENTOUT_PORT_E))\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIOEx_AFIO_AF_REMAPPING Alternate Function Remapping\r\n * @brief This section propose definition to remap the alternate function to some other port/pins.\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief Enable the remapping of SPI1 alternate function NSS, SCK, MISO and MOSI.\r\n * @note  ENABLE: Remap     (NSS/PA15, SCK/PB3, MISO/PB4, MOSI/PB5)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SPI1_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_SPI1_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of SPI1 alternate function NSS, SCK, MISO and MOSI.\r\n * @note  DISABLE: No remap (NSS/PA4,  SCK/PA5, MISO/PA6, MOSI/PA7)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SPI1_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_SPI1_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of I2C1 alternate function SCL and SDA.\r\n * @note  ENABLE: Remap     (SCL/PB8, SDA/PB9)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_I2C1_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_I2C1_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of I2C1 alternate function SCL and SDA.\r\n * @note  DISABLE: No remap (SCL/PB6, SDA/PB7)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_I2C1_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_I2C1_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of USART1 alternate function TX and RX.\r\n * @note  ENABLE: Remap     (TX/PB6, RX/PB7)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART1_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_USART1_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of USART1 alternate function TX and RX.\r\n * @note  DISABLE: No remap (TX/PA9, RX/PA10)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART1_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_USART1_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of USART2 alternate function CTS, RTS, CK, TX and RX.\r\n * @note  ENABLE: Remap     (CTS/PD3, RTS/PD4, TX/PD5, RX/PD6, CK/PD7)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART2_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_USART2_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of USART2 alternate function CTS, RTS, CK, TX and RX.\r\n * @note  DISABLE: No remap (CTS/PA0, RTS/PA1, TX/PA2, RX/PA3, CK/PA4)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART2_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_USART2_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX.\r\n * @note  ENABLE: Full remap     (TX/PD8,  RX/PD9,  CK/PD10, CTS/PD11, RTS/PD12)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART3_ENABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_USART3_REMAP_FULLREMAP, AFIO_MAPR_USART3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX.\r\n * @note  PARTIAL: Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART3_PARTIAL() AFIO_REMAP_PARTIAL(AFIO_MAPR_USART3_REMAP_PARTIALREMAP, AFIO_MAPR_USART3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX.\r\n * @note  DISABLE: No remap      (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART3_DISABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_USART3_REMAP_NOREMAP, AFIO_MAPR_USART3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN)\r\n * @note  ENABLE: Full remap     (ETR/PE7,  CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8,  CH2N/PE10, CH3N/PE12)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM1_ENABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM1_REMAP_FULLREMAP, AFIO_MAPR_TIM1_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN)\r\n * @note  PARTIAL: Partial remap (ETR/PA12, CH1/PA8, CH2/PA9,  CH3/PA10, CH4/PA11, BKIN/PA6,  CH1N/PA7,  CH2N/PB0,  CH3N/PB1)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM1_PARTIAL() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM1_REMAP_PARTIALREMAP, AFIO_MAPR_TIM1_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN)\r\n * @note  DISABLE: No remap      (ETR/PA12, CH1/PA8, CH2/PA9,  CH3/PA10, CH4/PA11, BKIN/PB12, CH1N/PB13, CH2N/PB14, CH3N/PB15)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM1_DISABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM1_REMAP_NOREMAP, AFIO_MAPR_TIM1_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR)\r\n * @note  ENABLE: Full remap       (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM2_ENABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM2_REMAP_FULLREMAP, AFIO_MAPR_TIM2_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR)\r\n * @note  PARTIAL_2: Partial remap (CH1/ETR/PA0,  CH2/PA1, CH3/PB10, CH4/PB11)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM2_PARTIAL_2() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2, AFIO_MAPR_TIM2_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR)\r\n * @note  PARTIAL_1: Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2,  CH4/PA3)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM2_PARTIAL_1() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1, AFIO_MAPR_TIM2_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR)\r\n * @note  DISABLE: No remap        (CH1/ETR/PA0,  CH2/PA1, CH3/PA2,  CH4/PA3)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM2_DISABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM2_REMAP_NOREMAP, AFIO_MAPR_TIM2_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM3 alternate function channels 1 to 4\r\n * @note  ENABLE: Full remap     (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9)\r\n * @note  TIM3_ETR on PE0 is not re-mapped.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM3_ENABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM3_REMAP_FULLREMAP, AFIO_MAPR_TIM3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM3 alternate function channels 1 to 4\r\n * @note  PARTIAL: Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1)\r\n * @note  TIM3_ETR on PE0 is not re-mapped.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM3_PARTIAL() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM3_REMAP_PARTIALREMAP, AFIO_MAPR_TIM3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM3 alternate function channels 1 to 4\r\n * @note  DISABLE: No remap      (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1)\r\n * @note  TIM3_ETR on PE0 is not re-mapped.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM3_DISABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM3_REMAP_NOREMAP, AFIO_MAPR_TIM3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM4 alternate function channels 1 to 4.\r\n * @note  ENABLE: Full remap (TIM4_CH1/PD12, TIM4_CH2/PD13, TIM4_CH3/PD14, TIM4_CH4/PD15)\r\n * @note  TIM4_ETR on PE0 is not re-mapped.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM4_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_TIM4_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM4 alternate function channels 1 to 4.\r\n * @note  DISABLE: No remap  (TIM4_CH1/PB6,  TIM4_CH2/PB7,  TIM4_CH3/PB8,  TIM4_CH4/PB9)\r\n * @note  TIM4_ETR on PE0 is not re-mapped.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM4_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_TIM4_REMAP)\r\n\r\n#if defined(AFIO_MAPR_CAN_REMAP_REMAP1)\r\n\r\n/**\r\n * @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface.\r\n * @note  CASE 1: CAN_RX mapped to PA11, CAN_TX mapped to PA12\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CAN1_1() AFIO_REMAP_PARTIAL(AFIO_MAPR_CAN_REMAP_REMAP1, AFIO_MAPR_CAN_REMAP)\r\n\r\n/**\r\n * @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface.\r\n * @note  CASE 2: CAN_RX mapped to PB8,  CAN_TX mapped to PB9 (not available on 36-pin package)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CAN1_2() AFIO_REMAP_PARTIAL(AFIO_MAPR_CAN_REMAP_REMAP2, AFIO_MAPR_CAN_REMAP)\r\n\r\n/**\r\n * @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface.\r\n * @note  CASE 3: CAN_RX mapped to PD0,  CAN_TX mapped to PD1\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CAN1_3() AFIO_REMAP_PARTIAL(AFIO_MAPR_CAN_REMAP_REMAP3, AFIO_MAPR_CAN_REMAP)\r\n\r\n#endif\r\n\r\n/**\r\n * @brief Enable the remapping of PD0 and PD1. When the HSE oscillator is not used\r\n *        (application running on internal 8 MHz RC) PD0 and PD1 can be mapped on OSC_IN and\r\n *        OSC_OUT. This is available only on 36, 48 and 64 pins packages (PD0 and PD1 are available\r\n *        on 100-pin and 144-pin packages, no need for remapping).\r\n * @note  ENABLE: PD0 remapped on OSC_IN, PD1 remapped on OSC_OUT.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_PD01_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_PD01_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of PD0 and PD1. When the HSE oscillator is not used\r\n *        (application running on internal 8 MHz RC) PD0 and PD1 can be mapped on OSC_IN and\r\n *        OSC_OUT. This is available only on 36, 48 and 64 pins packages (PD0 and PD1 are available\r\n *        on 100-pin and 144-pin packages, no need for remapping).\r\n * @note  DISABLE: No remapping of PD0 and PD1\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_PD01_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_PD01_REMAP)\r\n\r\n#if defined(AFIO_MAPR_TIM5CH4_IREMAP)\r\n/**\r\n * @brief Enable the remapping of TIM5CH4.\r\n * @note  ENABLE: LSI internal clock is connected to TIM5_CH4 input for calibration purpose.\r\n * @note  This function is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM5CH4_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_TIM5CH4_IREMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM5CH4.\r\n * @note  DISABLE: TIM5_CH4 is connected to PA3\r\n * @note  This function is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM5CH4_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_TIM5CH4_IREMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_ETH_REMAP)\r\n/**\r\n * @brief Enable the remapping of Ethernet MAC connections with the PHY.\r\n * @note  ENABLE: Remap     (RX_DV-CRS_DV/PD8, RXD0/PD9, RXD1/PD10, RXD2/PD11, RXD3/PD12)\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ETH_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ETH_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of Ethernet MAC connections with the PHY.\r\n * @note  DISABLE: No remap (RX_DV-CRS_DV/PA7, RXD0/PC4, RXD1/PC5,  RXD2/PB0,  RXD3/PB1)\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ETH_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ETH_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_CAN2_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of CAN2 alternate function CAN2_RX and CAN2_TX.\r\n * @note  ENABLE: Remap     (CAN2_RX/PB5,  CAN2_TX/PB6)\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CAN2_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_CAN2_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of CAN2 alternate function CAN2_RX and CAN2_TX.\r\n * @note  DISABLE: No remap (CAN2_RX/PB12, CAN2_TX/PB13)\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CAN2_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_CAN2_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_MII_RMII_SEL)\r\n/**\r\n * @brief Configures the Ethernet MAC internally for use with an external MII or RMII PHY.\r\n * @note  ETH_RMII: Configure Ethernet MAC for connection with an RMII PHY\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_ETH_RMII() AFIO_REMAP_ENABLE(AFIO_MAPR_MII_RMII_SEL)\r\n\r\n/**\r\n * @brief Configures the Ethernet MAC internally for use with an external MII or RMII PHY.\r\n * @note  ETH_MII: Configure Ethernet MAC for connection with an MII PHY\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_ETH_MII() AFIO_REMAP_DISABLE(AFIO_MAPR_MII_RMII_SEL)\r\n#endif\r\n\r\n/**\r\n * @brief Enable the remapping of ADC1_ETRGINJ (ADC 1 External trigger injected conversion).\r\n * @note  ENABLE: ADC1 External Event injected conversion is connected to TIM8 Channel4.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC1_ETRGINJ_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ADC1_ETRGINJ_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of ADC1_ETRGINJ (ADC 1 External trigger injected conversion).\r\n * @note  DISABLE: ADC1 External trigger injected conversion is connected to EXTI15\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC1_ETRGINJ_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ADC1_ETRGINJ_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of ADC1_ETRGREG (ADC 1 External trigger regular conversion).\r\n * @note  ENABLE: ADC1 External Event regular conversion is connected to TIM8 TRG0.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC1_ETRGREG_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ADC1_ETRGREG_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of ADC1_ETRGREG (ADC 1 External trigger regular conversion).\r\n * @note  DISABLE: ADC1 External trigger regular conversion is connected to EXTI11\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC1_ETRGREG_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ADC1_ETRGREG_REMAP)\r\n\r\n#if defined(AFIO_MAPR_ADC2_ETRGINJ_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger injected conversion).\r\n * @note  ENABLE: ADC2 External Event injected conversion is connected to TIM8 Channel4.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC2_ETRGINJ_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ADC2_ETRGINJ_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger injected conversion).\r\n * @note  DISABLE: ADC2 External trigger injected conversion is connected to EXTI15\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC2_ETRGINJ_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ADC2_ETRGINJ_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_ADC2_ETRGREG_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion).\r\n * @note  ENABLE: ADC2 External Event regular conversion is connected to TIM8 TRG0.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC2_ETRGREG_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ADC2_ETRGREG_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion).\r\n * @note  DISABLE: ADC2 External trigger regular conversion is connected to EXTI11\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC2_ETRGREG_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ADC2_ETRGREG_REMAP)\r\n#endif\r\n\r\n/**\r\n * @brief Enable the Serial wire JTAG configuration\r\n * @note  ENABLE: Full SWJ (JTAG-DP + SW-DP): Reset State\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SWJ_ENABLE() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_RESET)\r\n\r\n/**\r\n * @brief Enable the Serial wire JTAG configuration\r\n * @note  NONJTRST: Full SWJ (JTAG-DP + SW-DP) but without NJTRST\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SWJ_NONJTRST() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_NOJNTRST)\r\n\r\n/**\r\n * @brief Enable the Serial wire JTAG configuration\r\n * @note  NOJTAG: JTAG-DP Disabled and SW-DP Enabled\r\n * @retval None\r\n */\r\n\r\n#define __HAL_AFIO_REMAP_SWJ_NOJTAG() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_JTAGDISABLE)\r\n\r\n/**\r\n * @brief Disable the Serial wire JTAG configuration\r\n * @note  DISABLE: JTAG-DP Disabled and SW-DP Disabled\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SWJ_DISABLE() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_DISABLE)\r\n\r\n#if defined(AFIO_MAPR_SPI3_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of SPI3 alternate functions SPI3_NSS/I2S3_WS, SPI3_SCK/I2S3_CK, SPI3_MISO, SPI3_MOSI/I2S3_SD.\r\n * @note  ENABLE: Remap     (SPI3_NSS-I2S3_WS/PA4,  SPI3_SCK-I2S3_CK/PC10, SPI3_MISO/PC11, SPI3_MOSI-I2S3_SD/PC12)\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SPI3_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_SPI3_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of SPI3 alternate functions SPI3_NSS/I2S3_WS, SPI3_SCK/I2S3_CK, SPI3_MISO, SPI3_MOSI/I2S3_SD.\r\n * @note  DISABLE: No remap (SPI3_NSS-I2S3_WS/PA15, SPI3_SCK-I2S3_CK/PB3,  SPI3_MISO/PB4,  SPI3_MOSI-I2S3_SD/PB5).\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SPI3_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_SPI3_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_TIM2ITR1_IREMAP)\r\n\r\n/**\r\n * @brief Control of TIM2_ITR1 internal mapping.\r\n * @note  TO_USB: Connect USB OTG SOF (Start of Frame) output to TIM2_ITR1 for calibration purposes.\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_TIM2ITR1_TO_USB() AFIO_REMAP_ENABLE(AFIO_MAPR_TIM2ITR1_IREMAP)\r\n\r\n/**\r\n * @brief Control of TIM2_ITR1 internal mapping.\r\n * @note  TO_ETH: Connect TIM2_ITR1 internally to the Ethernet PTP output for calibration purposes.\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_TIM2ITR1_TO_ETH() AFIO_REMAP_DISABLE(AFIO_MAPR_TIM2ITR1_IREMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_PTP_PPS_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion).\r\n * @note  ENABLE: PTP_PPS is output on PB5 pin.\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_ETH_PTP_PPS_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_PTP_PPS_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion).\r\n * @note  DISABLE: PTP_PPS not output on PB5 pin.\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_ETH_PTP_PPS_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_PTP_PPS_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM9_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM9_CH1 and TIM9_CH2.\r\n * @note  ENABLE: Remap     (TIM9_CH1 on PE5 and TIM9_CH2 on PE6).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM9_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM9_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM9_CH1 and TIM9_CH2.\r\n * @note  DISABLE: No remap (TIM9_CH1 on PA2 and TIM9_CH2 on PA3).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM9_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM9_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM10_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM10_CH1.\r\n * @note  ENABLE: Remap     (TIM10_CH1 on PF6).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM10_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM10_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM10_CH1.\r\n * @note  DISABLE: No remap (TIM10_CH1 on PB8).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM10_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM10_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM11_REMAP)\r\n/**\r\n * @brief Enable the remapping of TIM11_CH1.\r\n * @note  ENABLE: Remap     (TIM11_CH1 on PF7).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM11_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM11_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM11_CH1.\r\n * @note  DISABLE: No remap (TIM11_CH1 on PB9).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM11_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM11_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM13_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM13_CH1.\r\n * @note  ENABLE: Remap     STM32F100:(TIM13_CH1 on PF8). Others:(TIM13_CH1 on PB0).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM13_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM13_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM13_CH1.\r\n * @note  DISABLE: No remap STM32F100:(TIM13_CH1 on PA6). Others:(TIM13_CH1 on PC8).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM13_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM13_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM14_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM14_CH1.\r\n * @note  ENABLE: Remap     STM32F100:(TIM14_CH1 on PB1). Others:(TIM14_CH1 on PF9).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM14_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM14_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM14_CH1.\r\n * @note  DISABLE: No remap STM32F100:(TIM14_CH1 on PC9). Others:(TIM14_CH1 on PA7).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM14_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM14_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_FSMC_NADV_REMAP)\r\n\r\n/**\r\n * @brief Controls the use of the optional FSMC_NADV signal.\r\n * @note  DISCONNECTED: The NADV signal is not connected. The I/O pin can be used by another peripheral.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_FSMCNADV_DISCONNECTED() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_FSMC_NADV_REMAP)\r\n\r\n/**\r\n * @brief Controls the use of the optional FSMC_NADV signal.\r\n * @note  CONNECTED: The NADV signal is connected to the output (default).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_FSMCNADV_CONNECTED() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_FSMC_NADV_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM15_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM15_CH1 and TIM15_CH2.\r\n * @note  ENABLE: Remap     (TIM15_CH1 on PB14 and TIM15_CH2 on PB15).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM15_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM15_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM15_CH1 and TIM15_CH2.\r\n * @note  DISABLE: No remap (TIM15_CH1 on PA2  and TIM15_CH2 on PA3).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM15_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM15_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM16_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM16_CH1.\r\n * @note  ENABLE: Remap     (TIM16_CH1 on PA6).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM16_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM16_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM16_CH1.\r\n * @note  DISABLE: No remap (TIM16_CH1 on PB8).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM16_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM16_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM17_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM17_CH1.\r\n * @note  ENABLE: Remap     (TIM17_CH1 on PA7).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM17_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM17_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM17_CH1.\r\n * @note  DISABLE: No remap (TIM17_CH1 on PB9).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM17_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM17_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_CEC_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of CEC.\r\n * @note  ENABLE: Remap     (CEC on PB10).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CEC_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_CEC_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of CEC.\r\n * @note  DISABLE: No remap (CEC on PB8).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CEC_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_CEC_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM1_DMA_REMAP)\r\n\r\n/**\r\n * @brief Controls the mapping of the TIM1_CH1 TIM1_CH2 DMA requests onto the DMA1 channels.\r\n * @note  ENABLE: Remap (TIM1_CH1 DMA request/DMA1 Channel6, TIM1_CH2 DMA request/DMA1 Channel6)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM1DMA_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM1_DMA_REMAP)\r\n\r\n/**\r\n * @brief Controls the mapping of the TIM1_CH1 TIM1_CH2 DMA requests onto the DMA1 channels.\r\n * @note  DISABLE: No remap (TIM1_CH1 DMA request/DMA1 Channel2, TIM1_CH2 DMA request/DMA1 Channel3).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM1DMA_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM1_DMA_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM67_DAC_DMA_REMAP)\r\n\r\n/**\r\n * @brief Controls the mapping of the TIM6_DAC1 and TIM7_DAC2 DMA requests onto the DMA1 channels.\r\n * @note  ENABLE: Remap (TIM6_DAC1 DMA request/DMA1 Channel3, TIM7_DAC2 DMA request/DMA1 Channel4)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM67DACDMA_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM67_DAC_DMA_REMAP)\r\n\r\n/**\r\n * @brief Controls the mapping of the TIM6_DAC1 and TIM7_DAC2 DMA requests onto the DMA1 channels.\r\n * @note  DISABLE: No remap (TIM6_DAC1 DMA request/DMA2 Channel3, TIM7_DAC2 DMA request/DMA2 Channel4)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM67DACDMA_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM67_DAC_DMA_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM12_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM12_CH1 and TIM12_CH2.\r\n * @note  ENABLE: Remap     (TIM12_CH1 on PB12 and TIM12_CH2 on PB13).\r\n * @note  This bit is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM12_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM12_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM12_CH1 and TIM12_CH2.\r\n * @note  DISABLE: No remap (TIM12_CH1 on PC4  and TIM12_CH2 on PC5).\r\n * @note  This bit is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM12_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM12_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_MISC_REMAP)\r\n\r\n/**\r\n * @brief Miscellaneous features remapping.\r\n *        This bit is set and cleared by software. It controls miscellaneous features.\r\n *        The DMA2 channel 5 interrupt position in the vector table.\r\n *        The timer selection for DAC trigger 3 (TSEL[2:0] = 011, for more details refer to the DAC_CR register).\r\n * @note  ENABLE: DMA2 channel 5 interrupt is mapped separately at position 60 and TIM15 TRGO event is\r\n *        selected as DAC Trigger 3, TIM15 triggers TIM1/3.\r\n * @note  This bit is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_MISC_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_MISC_REMAP)\r\n\r\n/**\r\n * @brief Miscellaneous features remapping.\r\n *        This bit is set and cleared by software. It controls miscellaneous features.\r\n *        The DMA2 channel 5 interrupt position in the vector table.\r\n *        The timer selection for DAC trigger 3 (TSEL[2:0] = 011, for more details refer to the DAC_CR register).\r\n * @note  DISABLE: DMA2 channel 5 interrupt is mapped with DMA2 channel 4 at position 59, TIM5 TRGO\r\n *        event is selected as DAC Trigger 3, TIM5 triggers TIM1/3.\r\n * @note  This bit is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_MISC_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_MISC_REMAP)\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIOEx_Private_Macros GPIOEx Private Macros\r\n * @{\r\n */\r\n#if defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\r\n#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA)) ? 0U : ((__GPIOx__) == (GPIOB)) ? 1U : ((__GPIOx__) == (GPIOC)) ? 2U : 3U)\r\n#elif defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA)) ? 0U : ((__GPIOx__) == (GPIOB)) ? 1U : ((__GPIOx__) == (GPIOC)) ? 2U : ((__GPIOx__) == (GPIOD)) ? 3U : 4U)\r\n#elif defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define GPIO_GET_INDEX(__GPIOx__) \\\r\n  (((__GPIOx__) == (GPIOA)) ? 0U : ((__GPIOx__) == (GPIOB)) ? 1U : ((__GPIOx__) == (GPIOC)) ? 2U : ((__GPIOx__) == (GPIOD)) ? 3U : ((__GPIOx__) == (GPIOE)) ? 4U : ((__GPIOx__) == (GPIOF)) ? 5U : 6U)\r\n#endif\r\n\r\n#define AFIO_REMAP_ENABLE(REMAP_PIN) \\\r\n  do {                               \\\r\n    uint32_t tmpreg = AFIO->MAPR;    \\\r\n    tmpreg |= AFIO_MAPR_SWJ_CFG;     \\\r\n    tmpreg |= REMAP_PIN;             \\\r\n    AFIO->MAPR = tmpreg;             \\\r\n  } while (0U)\r\n\r\n#define AFIO_REMAP_DISABLE(REMAP_PIN) \\\r\n  do {                                \\\r\n    uint32_t tmpreg = AFIO->MAPR;     \\\r\n    tmpreg |= AFIO_MAPR_SWJ_CFG;      \\\r\n    tmpreg &= ~REMAP_PIN;             \\\r\n    AFIO->MAPR = tmpreg;              \\\r\n  } while (0U)\r\n\r\n#define AFIO_REMAP_PARTIAL(REMAP_PIN, REMAP_PIN_MASK) \\\r\n  do {                                                \\\r\n    uint32_t tmpreg = AFIO->MAPR;                     \\\r\n    tmpreg &= ~REMAP_PIN_MASK;                        \\\r\n    tmpreg |= AFIO_MAPR_SWJ_CFG;                      \\\r\n    tmpreg |= REMAP_PIN;                              \\\r\n    AFIO->MAPR = tmpreg;                              \\\r\n  } while (0U)\r\n\r\n#define AFIO_DBGAFR_CONFIG(DBGAFR_SWJCFG) \\\r\n  do {                                    \\\r\n    uint32_t tmpreg = AFIO->MAPR;         \\\r\n    tmpreg &= ~AFIO_MAPR_SWJ_CFG_Msk;     \\\r\n    tmpreg |= DBGAFR_SWJCFG;              \\\r\n    AFIO->MAPR = tmpreg;                  \\\r\n  } while (0U)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @addtogroup GPIOEx_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup GPIOEx_Exported_Functions_Group1\r\n * @{\r\n */\r\nvoid HAL_GPIOEx_ConfigEventout(uint32_t GPIO_PortSource, uint32_t GPIO_PinSource);\r\nvoid HAL_GPIOEx_EnableEventout(void);\r\nvoid HAL_GPIOEx_DisableEventout(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_GPIO_EX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_i2c.h",
    "content": "\r\n#ifndef __STM32F1xx_HAL_I2C_H\r\n#define __STM32F1xx_HAL_I2C_H\r\n\r\n#endif /* __STM32F1xx_HAL_I2C_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_iwdg.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_iwdg.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of IWDG HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_IWDG_H\r\n#define __STM32F1xx_HAL_IWDG_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup IWDG\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup IWDG_Exported_Types IWDG Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  IWDG Init structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t Prescaler; /*!< Select the prescaler of the IWDG.\r\n                           This parameter can be a value of @ref IWDG_Prescaler */\r\n\r\n  uint32_t Reload; /*!< Specifies the IWDG down-counter reload value.\r\n                        This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF */\r\n\r\n} IWDG_InitTypeDef;\r\n\r\n/**\r\n * @brief  IWDG Handle Structure definition\r\n */\r\ntypedef struct {\r\n  IWDG_TypeDef *Instance; /*!< Register base address    */\r\n\r\n  IWDG_InitTypeDef Init; /*!< IWDG required parameters */\r\n\r\n} IWDG_HandleTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup IWDG_Exported_Constants IWDG Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup IWDG_Prescaler IWDG Prescaler\r\n * @{\r\n */\r\n#define IWDG_PRESCALER_4   0x00000000U                   /*!< IWDG prescaler set to 4   */\r\n#define IWDG_PRESCALER_8   IWDG_PR_PR_0                  /*!< IWDG prescaler set to 8   */\r\n#define IWDG_PRESCALER_16  IWDG_PR_PR_1                  /*!< IWDG prescaler set to 16  */\r\n#define IWDG_PRESCALER_32  (IWDG_PR_PR_1 | IWDG_PR_PR_0) /*!< IWDG prescaler set to 32  */\r\n#define IWDG_PRESCALER_64  IWDG_PR_PR_2                  /*!< IWDG prescaler set to 64  */\r\n#define IWDG_PRESCALER_128 (IWDG_PR_PR_2 | IWDG_PR_PR_0) /*!< IWDG prescaler set to 128 */\r\n#define IWDG_PRESCALER_256 (IWDG_PR_PR_2 | IWDG_PR_PR_1) /*!< IWDG prescaler set to 256 */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macros -----------------------------------------------------------*/\r\n/** @defgroup IWDG_Exported_Macros IWDG Exported Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Enable the IWDG peripheral.\r\n * @param  __HANDLE__  IWDG handle\r\n * @retval None\r\n */\r\n#define __HAL_IWDG_START(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_ENABLE)\r\n\r\n/**\r\n * @brief  Reload IWDG counter with value defined in the reload register\r\n *         (write access to IWDG_PR & IWDG_RLR registers disabled).\r\n * @param  __HANDLE__  IWDG handle\r\n * @retval None\r\n */\r\n#define __HAL_IWDG_RELOAD_COUNTER(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_RELOAD)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @defgroup IWDG_Exported_Functions  IWDG Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup IWDG_Exported_Functions_Group1 Initialization and Start functions\r\n * @{\r\n */\r\n/* Initialization/Start functions  ********************************************/\r\nHAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup IWDG_Exported_Functions_Group2 IO operation functions\r\n * @{\r\n */\r\n/* I/O operation functions ****************************************************/\r\nHAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private constants ---------------------------------------------------------*/\r\n/** @defgroup IWDG_Private_Constants IWDG Private Constants\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  IWDG Key Register BitMask\r\n */\r\n#define IWDG_KEY_RELOAD               0x0000AAAAU /*!< IWDG Reload Counter Enable   */\r\n#define IWDG_KEY_ENABLE               0x0000CCCCU /*!< IWDG Peripheral Enable       */\r\n#define IWDG_KEY_WRITE_ACCESS_ENABLE  0x00005555U /*!< IWDG KR Write Access Enable  */\r\n#define IWDG_KEY_WRITE_ACCESS_DISABLE 0x00000000U /*!< IWDG KR Write Access Disable */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup IWDG_Private_Macros IWDG Private Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Enable write access to IWDG_PR and IWDG_RLR registers.\r\n * @param  __HANDLE__  IWDG handle\r\n * @retval None\r\n */\r\n#define IWDG_ENABLE_WRITE_ACCESS(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_WRITE_ACCESS_ENABLE)\r\n\r\n/**\r\n * @brief  Disable write access to IWDG_PR and IWDG_RLR registers.\r\n * @param  __HANDLE__  IWDG handle\r\n * @retval None\r\n */\r\n#define IWDG_DISABLE_WRITE_ACCESS(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_WRITE_ACCESS_DISABLE)\r\n\r\n/**\r\n * @brief  Check IWDG prescaler value.\r\n * @param  __PRESCALER__  IWDG prescaler value\r\n * @retval None\r\n */\r\n#define IS_IWDG_PRESCALER(__PRESCALER__)                                                                                                                              \\\r\n  (((__PRESCALER__) == IWDG_PRESCALER_4) || ((__PRESCALER__) == IWDG_PRESCALER_8) || ((__PRESCALER__) == IWDG_PRESCALER_16) || ((__PRESCALER__) == IWDG_PRESCALER_32) \\\r\n   || ((__PRESCALER__) == IWDG_PRESCALER_64) || ((__PRESCALER__) == IWDG_PRESCALER_128) || ((__PRESCALER__) == IWDG_PRESCALER_256))\r\n\r\n/**\r\n * @brief  Check IWDG reload value.\r\n * @param  __RELOAD__  IWDG reload value\r\n * @retval None\r\n */\r\n#define IS_IWDG_RELOAD(__RELOAD__) ((__RELOAD__) <= IWDG_RLR_RL)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_IWDG_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_pwr.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of PWR HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_PWR_H\r\n#define __STM32F1xx_HAL_PWR_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup PWR\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n\r\n/** @defgroup PWR_Exported_Types PWR Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  PWR PVD configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t PVDLevel; /*!< PVDLevel: Specifies the PVD detection level.\r\n                          This parameter can be a value of @ref PWR_PVD_detection_level */\r\n\r\n  uint32_t Mode; /*!< Mode: Specifies the operating mode for the selected pins.\r\n                      This parameter can be a value of @ref PWR_PVD_Mode */\r\n} PWR_PVDTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Internal constants --------------------------------------------------------*/\r\n\r\n/** @addtogroup PWR_Private_Constants\r\n * @{\r\n */\r\n\r\n#define PWR_EXTI_LINE_PVD ((uint32_t)0x00010000) /*!< External interrupt line 16 Connected to the PVD EXTI Line */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup PWR_Exported_Constants PWR Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup PWR_PVD_detection_level PWR PVD detection level\r\n * @{\r\n */\r\n#define PWR_PVDLEVEL_0 PWR_CR_PLS_2V2\r\n#define PWR_PVDLEVEL_1 PWR_CR_PLS_2V3\r\n#define PWR_PVDLEVEL_2 PWR_CR_PLS_2V4\r\n#define PWR_PVDLEVEL_3 PWR_CR_PLS_2V5\r\n#define PWR_PVDLEVEL_4 PWR_CR_PLS_2V6\r\n#define PWR_PVDLEVEL_5 PWR_CR_PLS_2V7\r\n#define PWR_PVDLEVEL_6 PWR_CR_PLS_2V8\r\n#define PWR_PVDLEVEL_7 PWR_CR_PLS_2V9\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_PVD_Mode PWR PVD Mode\r\n * @{\r\n */\r\n#define PWR_PVD_MODE_NORMAL               0x00000000U /*!< basic mode is used */\r\n#define PWR_PVD_MODE_IT_RISING            0x00010001U /*!< External Interrupt Mode with Rising edge trigger detection */\r\n#define PWR_PVD_MODE_IT_FALLING           0x00010002U /*!< External Interrupt Mode with Falling edge trigger detection */\r\n#define PWR_PVD_MODE_IT_RISING_FALLING    0x00010003U /*!< External Interrupt Mode with Rising/Falling edge trigger detection */\r\n#define PWR_PVD_MODE_EVENT_RISING         0x00020001U /*!< Event Mode with Rising edge trigger detection */\r\n#define PWR_PVD_MODE_EVENT_FALLING        0x00020002U /*!< Event Mode with Falling edge trigger detection */\r\n#define PWR_PVD_MODE_EVENT_RISING_FALLING 0x00020003U /*!< Event Mode with Rising/Falling edge trigger detection */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_WakeUp_Pins PWR WakeUp Pins\r\n * @{\r\n */\r\n\r\n#define PWR_WAKEUP_PIN1 PWR_CSR_EWUP\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_Regulator_state_in_SLEEP_STOP_mode PWR Regulator state in SLEEP/STOP mode\r\n * @{\r\n */\r\n#define PWR_MAINREGULATOR_ON     0x00000000U\r\n#define PWR_LOWPOWERREGULATOR_ON PWR_CR_LPDS\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_SLEEP_mode_entry PWR SLEEP mode entry\r\n * @{\r\n */\r\n#define PWR_SLEEPENTRY_WFI ((uint8_t)0x01)\r\n#define PWR_SLEEPENTRY_WFE ((uint8_t)0x02)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_STOP_mode_entry PWR STOP mode entry\r\n * @{\r\n */\r\n#define PWR_STOPENTRY_WFI ((uint8_t)0x01)\r\n#define PWR_STOPENTRY_WFE ((uint8_t)0x02)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_Flag PWR Flag\r\n * @{\r\n */\r\n#define PWR_FLAG_WU   PWR_CSR_WUF\r\n#define PWR_FLAG_SB   PWR_CSR_SBF\r\n#define PWR_FLAG_PVDO PWR_CSR_PVDO\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup PWR_Exported_Macros PWR Exported Macros\r\n * @{\r\n */\r\n\r\n/** @brief  Check PWR flag is set or not.\r\n * @param  __FLAG__: specifies the flag to check.\r\n *           This parameter can be one of the following values:\r\n *            @arg PWR_FLAG_WU: Wake Up flag. This flag indicates that a wakeup event\r\n *                  was received from the WKUP pin or from the RTC alarm\r\n *                  An additional wakeup event is detected if the WKUP pin is enabled\r\n *                  (by setting the EWUP bit) when the WKUP pin level is already high.\r\n *            @arg PWR_FLAG_SB: StandBy flag. This flag indicates that the system was\r\n *                  resumed from StandBy mode.\r\n *            @arg PWR_FLAG_PVDO: PVD Output. This flag is valid only if PVD is enabled\r\n *                  by the HAL_PWR_EnablePVD() function. The PVD is stopped by Standby mode\r\n *                  For this reason, this bit is equal to 0 after Standby or reset\r\n *                  until the PVDE bit is set.\r\n * @retval The new state of __FLAG__ (TRUE or FALSE).\r\n */\r\n#define __HAL_PWR_GET_FLAG(__FLAG__) ((PWR->CSR & (__FLAG__)) == (__FLAG__))\r\n\r\n/** @brief  Clear the PWR's pending flags.\r\n * @param  __FLAG__: specifies the flag to clear.\r\n *          This parameter can be one of the following values:\r\n *            @arg PWR_FLAG_WU: Wake Up flag\r\n *            @arg PWR_FLAG_SB: StandBy flag\r\n */\r\n#define __HAL_PWR_CLEAR_FLAG(__FLAG__) SET_BIT(PWR->CR, ((__FLAG__) << 2))\r\n\r\n/**\r\n * @brief Enable interrupt on PVD Exti Line 16.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_ENABLE_IT() SET_BIT(EXTI->IMR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief Disable interrupt on PVD Exti Line 16.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->IMR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief Enable event on PVD Exti Line 16.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_ENABLE_EVENT() SET_BIT(EXTI->EMR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief Disable event on PVD Exti Line 16.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->EMR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief  PVD EXTI line configuration: set falling edge trigger.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief Disable the PVD Extended Interrupt Falling Trigger.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief  PVD EXTI line configuration: set rising edge trigger.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief Disable the PVD Extended Interrupt Rising Trigger.\r\n * This parameter can be:\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief  PVD EXTI line configuration: set rising & falling edge trigger.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_FALLING_EDGE() \\\r\n  __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();              \\\r\n  __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE();\r\n\r\n/**\r\n * @brief Disable the PVD Extended Interrupt Rising & Falling Trigger.\r\n * This parameter can be:\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_FALLING_EDGE() \\\r\n  __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();              \\\r\n  __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE();\r\n\r\n/**\r\n * @brief Check whether the specified PVD EXTI interrupt flag is set or not.\r\n * @retval EXTI PVD Line Status.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_GET_FLAG() (EXTI->PR & (PWR_EXTI_LINE_PVD))\r\n\r\n/**\r\n * @brief Clear the PVD EXTI flag.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_CLEAR_FLAG() (EXTI->PR = (PWR_EXTI_LINE_PVD))\r\n\r\n/**\r\n * @brief Generate a Software interrupt on selected EXTI line.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER, PWR_EXTI_LINE_PVD)\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/** @defgroup PWR_Private_Macros PWR Private Macros\r\n * @{\r\n */\r\n#define IS_PWR_PVD_LEVEL(LEVEL)                                                                                                                                                           \\\r\n  (((LEVEL) == PWR_PVDLEVEL_0) || ((LEVEL) == PWR_PVDLEVEL_1) || ((LEVEL) == PWR_PVDLEVEL_2) || ((LEVEL) == PWR_PVDLEVEL_3) || ((LEVEL) == PWR_PVDLEVEL_4) || ((LEVEL) == PWR_PVDLEVEL_5) \\\r\n   || ((LEVEL) == PWR_PVDLEVEL_6) || ((LEVEL) == PWR_PVDLEVEL_7))\r\n\r\n#define IS_PWR_PVD_MODE(MODE)                                                                                                                                       \\\r\n  (((MODE) == PWR_PVD_MODE_IT_RISING) || ((MODE) == PWR_PVD_MODE_IT_FALLING) || ((MODE) == PWR_PVD_MODE_IT_RISING_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING) \\\r\n   || ((MODE) == PWR_PVD_MODE_EVENT_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING_FALLING) || ((MODE) == PWR_PVD_MODE_NORMAL))\r\n\r\n#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1))\r\n\r\n#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_ON) || ((REGULATOR) == PWR_LOWPOWERREGULATOR_ON))\r\n\r\n#define IS_PWR_SLEEP_ENTRY(ENTRY) (((ENTRY) == PWR_SLEEPENTRY_WFI) || ((ENTRY) == PWR_SLEEPENTRY_WFE))\r\n\r\n#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPENTRY_WFI) || ((ENTRY) == PWR_STOPENTRY_WFE))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @addtogroup PWR_Exported_Functions PWR Exported Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions\r\n * @{\r\n */\r\n\r\n/* Initialization and de-initialization functions *******************************/\r\nvoid HAL_PWR_DeInit(void);\r\nvoid HAL_PWR_EnableBkUpAccess(void);\r\nvoid HAL_PWR_DisableBkUpAccess(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup PWR_Exported_Functions_Group2 Peripheral Control functions\r\n * @{\r\n */\r\n\r\n/* Peripheral Control functions  ************************************************/\r\nvoid HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD);\r\n/* #define HAL_PWR_ConfigPVD 12*/\r\nvoid HAL_PWR_EnablePVD(void);\r\nvoid HAL_PWR_DisablePVD(void);\r\n\r\n/* WakeUp pins configuration functions ****************************************/\r\nvoid HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx);\r\nvoid HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx);\r\n\r\n/* Low Power modes configuration functions ************************************/\r\nvoid HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry);\r\nvoid HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry);\r\nvoid HAL_PWR_EnterSTANDBYMode(void);\r\n\r\nvoid HAL_PWR_EnableSleepOnExit(void);\r\nvoid HAL_PWR_DisableSleepOnExit(void);\r\nvoid HAL_PWR_EnableSEVOnPend(void);\r\nvoid HAL_PWR_DisableSEVOnPend(void);\r\n\r\nvoid HAL_PWR_PVD_IRQHandler(void);\r\nvoid HAL_PWR_PVDCallback(void);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_PWR_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_rcc.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of RCC HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_RCC_H\r\n#define __STM32F1xx_HAL_RCC_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup RCC\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n\r\n/** @defgroup RCC_Exported_Types RCC Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  RCC PLL configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t PLLState; /*!< PLLState: The new state of the PLL.\r\n                         This parameter can be a value of @ref RCC_PLL_Config */\r\n\r\n  uint32_t PLLSource; /*!< PLLSource: PLL entry clock source.\r\n                          This parameter must be a value of @ref RCC_PLL_Clock_Source */\r\n\r\n  uint32_t PLLMUL; /*!< PLLMUL: Multiplication factor for PLL VCO input clock\r\n                       This parameter must be a value of @ref RCCEx_PLL_Multiplication_Factor */\r\n} RCC_PLLInitTypeDef;\r\n\r\n/**\r\n * @brief  RCC System, AHB and APB busses clock configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t ClockType; /*!< The clock to be configured.\r\n                           This parameter can be a value of @ref RCC_System_Clock_Type */\r\n\r\n  uint32_t SYSCLKSource; /*!< The clock source (SYSCLKS) used as system clock.\r\n                              This parameter can be a value of @ref RCC_System_Clock_Source */\r\n\r\n  uint32_t AHBCLKDivider; /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK).\r\n                               This parameter can be a value of @ref RCC_AHB_Clock_Source */\r\n\r\n  uint32_t APB1CLKDivider; /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK).\r\n                                This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */\r\n\r\n  uint32_t APB2CLKDivider; /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK).\r\n                                This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */\r\n} RCC_ClkInitTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup RCC_Exported_Constants RCC Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup RCC_PLL_Clock_Source PLL Clock Source\r\n * @{\r\n */\r\n\r\n#define RCC_PLLSOURCE_HSI_DIV2 0x00000000U     /*!< HSI clock divided by 2 selected as PLL entry clock source */\r\n#define RCC_PLLSOURCE_HSE      RCC_CFGR_PLLSRC /*!< HSE clock selected as PLL entry clock source */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Oscillator_Type Oscillator Type\r\n * @{\r\n */\r\n#define RCC_OSCILLATORTYPE_NONE 0x00000000U\r\n#define RCC_OSCILLATORTYPE_HSE  0x00000001U\r\n#define RCC_OSCILLATORTYPE_HSI  0x00000002U\r\n#define RCC_OSCILLATORTYPE_LSE  0x00000004U\r\n#define RCC_OSCILLATORTYPE_LSI  0x00000008U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_HSE_Config HSE Config\r\n * @{\r\n */\r\n#define RCC_HSE_OFF    0x00000000U                                /*!< HSE clock deactivation */\r\n#define RCC_HSE_ON     RCC_CR_HSEON                               /*!< HSE clock activation */\r\n#define RCC_HSE_BYPASS ((uint32_t)(RCC_CR_HSEBYP | RCC_CR_HSEON)) /*!< External clock source for HSE clock */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_LSE_Config LSE Config\r\n * @{\r\n */\r\n#define RCC_LSE_OFF    0x00000000U                                    /*!< LSE clock deactivation */\r\n#define RCC_LSE_ON     RCC_BDCR_LSEON                                 /*!< LSE clock activation */\r\n#define RCC_LSE_BYPASS ((uint32_t)(RCC_BDCR_LSEBYP | RCC_BDCR_LSEON)) /*!< External clock source for LSE clock */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_HSI_Config HSI Config\r\n * @{\r\n */\r\n#define RCC_HSI_OFF 0x00000000U  /*!< HSI clock deactivation */\r\n#define RCC_HSI_ON  RCC_CR_HSION /*!< HSI clock activation */\r\n\r\n#define RCC_HSICALIBRATION_DEFAULT 0x10U /* Default HSI calibration trimming value */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_LSI_Config LSI Config\r\n * @{\r\n */\r\n#define RCC_LSI_OFF 0x00000000U   /*!< LSI clock deactivation */\r\n#define RCC_LSI_ON  RCC_CSR_LSION /*!< LSI clock activation */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_PLL_Config PLL Config\r\n * @{\r\n */\r\n#define RCC_PLL_NONE 0x00000000U /*!< PLL is not configured */\r\n#define RCC_PLL_OFF  0x00000001U /*!< PLL deactivation */\r\n#define RCC_PLL_ON   0x00000002U /*!< PLL activation */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_System_Clock_Type System Clock Type\r\n * @{\r\n */\r\n#define RCC_CLOCKTYPE_SYSCLK 0x00000001U /*!< SYSCLK to configure */\r\n#define RCC_CLOCKTYPE_HCLK   0x00000002U /*!< HCLK to configure */\r\n#define RCC_CLOCKTYPE_PCLK1  0x00000004U /*!< PCLK1 to configure */\r\n#define RCC_CLOCKTYPE_PCLK2  0x00000008U /*!< PCLK2 to configure */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_System_Clock_Source System Clock Source\r\n * @{\r\n */\r\n#define RCC_SYSCLKSOURCE_HSI    RCC_CFGR_SW_HSI /*!< HSI selected as system clock */\r\n#define RCC_SYSCLKSOURCE_HSE    RCC_CFGR_SW_HSE /*!< HSE selected as system clock */\r\n#define RCC_SYSCLKSOURCE_PLLCLK RCC_CFGR_SW_PLL /*!< PLL selected as system clock */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_System_Clock_Source_Status System Clock Source Status\r\n * @{\r\n */\r\n#define RCC_SYSCLKSOURCE_STATUS_HSI    RCC_CFGR_SWS_HSI /*!< HSI used as system clock */\r\n#define RCC_SYSCLKSOURCE_STATUS_HSE    RCC_CFGR_SWS_HSE /*!< HSE used as system clock */\r\n#define RCC_SYSCLKSOURCE_STATUS_PLLCLK RCC_CFGR_SWS_PLL /*!< PLL used as system clock */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_AHB_Clock_Source AHB Clock Source\r\n * @{\r\n */\r\n#define RCC_SYSCLK_DIV1   RCC_CFGR_HPRE_DIV1   /*!< SYSCLK not divided */\r\n#define RCC_SYSCLK_DIV2   RCC_CFGR_HPRE_DIV2   /*!< SYSCLK divided by 2 */\r\n#define RCC_SYSCLK_DIV4   RCC_CFGR_HPRE_DIV4   /*!< SYSCLK divided by 4 */\r\n#define RCC_SYSCLK_DIV8   RCC_CFGR_HPRE_DIV8   /*!< SYSCLK divided by 8 */\r\n#define RCC_SYSCLK_DIV16  RCC_CFGR_HPRE_DIV16  /*!< SYSCLK divided by 16 */\r\n#define RCC_SYSCLK_DIV64  RCC_CFGR_HPRE_DIV64  /*!< SYSCLK divided by 64 */\r\n#define RCC_SYSCLK_DIV128 RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */\r\n#define RCC_SYSCLK_DIV256 RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */\r\n#define RCC_SYSCLK_DIV512 RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB1_APB2_Clock_Source APB1 APB2 Clock Source\r\n * @{\r\n */\r\n#define RCC_HCLK_DIV1  RCC_CFGR_PPRE1_DIV1  /*!< HCLK not divided */\r\n#define RCC_HCLK_DIV2  RCC_CFGR_PPRE1_DIV2  /*!< HCLK divided by 2 */\r\n#define RCC_HCLK_DIV4  RCC_CFGR_PPRE1_DIV4  /*!< HCLK divided by 4 */\r\n#define RCC_HCLK_DIV8  RCC_CFGR_PPRE1_DIV8  /*!< HCLK divided by 8 */\r\n#define RCC_HCLK_DIV16 RCC_CFGR_PPRE1_DIV16 /*!< HCLK divided by 16 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_RTC_Clock_Source RTC Clock Source\r\n * @{\r\n */\r\n#define RCC_RTCCLKSOURCE_NO_CLK     0x00000000U         /*!< No clock */\r\n#define RCC_RTCCLKSOURCE_LSE        RCC_BDCR_RTCSEL_LSE /*!< LSE oscillator clock used as RTC clock */\r\n#define RCC_RTCCLKSOURCE_LSI        RCC_BDCR_RTCSEL_LSI /*!< LSI oscillator clock used as RTC clock */\r\n#define RCC_RTCCLKSOURCE_HSE_DIV128 RCC_BDCR_RTCSEL_HSE /*!< HSE oscillator clock divided by 128 used as RTC clock */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_MCO_Index MCO Index\r\n * @{\r\n */\r\n#define RCC_MCO1 0x00000000U\r\n#define RCC_MCO  RCC_MCO1 /*!< MCO1 to be compliant with other families with 2 MCOs*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_MCOx_Clock_Prescaler MCO Clock Prescaler\r\n * @{\r\n */\r\n#define RCC_MCODIV_1 0x00000000U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Interrupt Interrupts\r\n * @{\r\n */\r\n#define RCC_IT_LSIRDY ((uint8_t)RCC_CIR_LSIRDYF) /*!< LSI Ready Interrupt flag */\r\n#define RCC_IT_LSERDY ((uint8_t)RCC_CIR_LSERDYF) /*!< LSE Ready Interrupt flag */\r\n#define RCC_IT_HSIRDY ((uint8_t)RCC_CIR_HSIRDYF) /*!< HSI Ready Interrupt flag */\r\n#define RCC_IT_HSERDY ((uint8_t)RCC_CIR_HSERDYF) /*!< HSE Ready Interrupt flag */\r\n#define RCC_IT_PLLRDY ((uint8_t)RCC_CIR_PLLRDYF) /*!< PLL Ready Interrupt flag */\r\n#define RCC_IT_CSS    ((uint8_t)RCC_CIR_CSSF)    /*!< Clock Security System Interrupt flag */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Flag Flags\r\n *        Elements values convention: XXXYYYYYb\r\n *           - YYYYY  : Flag position in the register\r\n *           - X XX  : Register index\r\n *                 - 001: CR register\r\n *                 - 010: BDCR register\r\n *                 - 011: CSR register\r\n * @{\r\n */\r\n/* Flags in the CR register */\r\n#define RCC_FLAG_HSIRDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_HSIRDY_Pos)) /*!< Internal High Speed clock ready flag */\r\n#define RCC_FLAG_HSERDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_HSERDY_Pos)) /*!< External High Speed clock ready flag */\r\n#define RCC_FLAG_PLLRDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_PLLRDY_Pos)) /*!< PLL clock ready flag */\r\n\r\n/* Flags in the CSR register */\r\n#define RCC_FLAG_LSIRDY  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_LSIRDY_Pos))   /*!< Internal Low Speed oscillator Ready */\r\n#define RCC_FLAG_PINRST  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_PINRSTF_Pos))  /*!< PIN reset flag */\r\n#define RCC_FLAG_PORRST  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_PORRSTF_Pos))  /*!< POR/PDR reset flag */\r\n#define RCC_FLAG_SFTRST  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_SFTRSTF_Pos))  /*!< Software Reset flag */\r\n#define RCC_FLAG_IWDGRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_IWDGRSTF_Pos)) /*!< Independent Watchdog reset flag */\r\n#define RCC_FLAG_WWDGRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_WWDGRSTF_Pos)) /*!< Window watchdog reset flag */\r\n#define RCC_FLAG_LPWRRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_LPWRRSTF_Pos)) /*!< Low-Power reset flag */\r\n\r\n/* Flags in the BDCR register */\r\n#define RCC_FLAG_LSERDY ((uint8_t)((BDCR_REG_INDEX << 5U) | RCC_BDCR_LSERDY_Pos)) /*!< External Low Speed oscillator Ready */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n\r\n/** @defgroup RCC_Exported_Macros RCC Exported Macros\r\n * @{\r\n */\r\n\r\n/** @defgroup RCC_Peripheral_Clock_Enable_Disable Peripheral Clock Enable Disable\r\n * @brief  Enable or disable the AHB1 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n#define __HAL_RCC_DMA1_CLK_ENABLE()                    \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN); \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SRAM_CLK_ENABLE()                    \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_SRAMEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_SRAMEN); \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_FLITF_CLK_ENABLE()                    \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_FLITFEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FLITFEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_CRC_CLK_ENABLE()                     \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_CRCEN);            \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_CRCEN);  \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_DMA1_CLK_DISABLE()  (RCC->AHBENR &= ~(RCC_AHBENR_DMA1EN))\r\n#define __HAL_RCC_SRAM_CLK_DISABLE()  (RCC->AHBENR &= ~(RCC_AHBENR_SRAMEN))\r\n#define __HAL_RCC_FLITF_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_FLITFEN))\r\n#define __HAL_RCC_CRC_CLK_DISABLE()   (RCC->AHBENR &= ~(RCC_AHBENR_CRCEN))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_AHB_Peripheral_Clock_Enable_Disable_Status AHB Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the AHB peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#define __HAL_RCC_DMA1_IS_CLK_ENABLED()   ((RCC->AHBENR & (RCC_AHBENR_DMA1EN)) != RESET)\r\n#define __HAL_RCC_DMA1_IS_CLK_DISABLED()  ((RCC->AHBENR & (RCC_AHBENR_DMA1EN)) == RESET)\r\n#define __HAL_RCC_SRAM_IS_CLK_ENABLED()   ((RCC->AHBENR & (RCC_AHBENR_SRAMEN)) != RESET)\r\n#define __HAL_RCC_SRAM_IS_CLK_DISABLED()  ((RCC->AHBENR & (RCC_AHBENR_SRAMEN)) == RESET)\r\n#define __HAL_RCC_FLITF_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_FLITFEN)) != RESET)\r\n#define __HAL_RCC_FLITF_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_FLITFEN)) == RESET)\r\n#define __HAL_RCC_CRC_IS_CLK_ENABLED()    ((RCC->AHBENR & (RCC_AHBENR_CRCEN)) != RESET)\r\n#define __HAL_RCC_CRC_IS_CLK_DISABLED()   ((RCC->AHBENR & (RCC_AHBENR_CRCEN)) == RESET)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB1_Clock_Enable_Disable APB1 Clock Enable Disable\r\n * @brief  Enable or disable the Low Speed APB (APB1) peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n#define __HAL_RCC_TIM2_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM3_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_WWDG_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_USART2_CLK_ENABLE()                      \\\r\n  do {                                                     \\\r\n    __IO uint32_t tmpreg;                                  \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */     \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN); \\\r\n    UNUSED(tmpreg);                                        \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_I2C1_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_BKP_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_BKPEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_BKPEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_PWR_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM2_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN))\r\n#define __HAL_RCC_TIM3_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN))\r\n#define __HAL_RCC_WWDG_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_WWDGEN))\r\n#define __HAL_RCC_USART2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART2EN))\r\n#define __HAL_RCC_I2C1_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C1EN))\r\n\r\n#define __HAL_RCC_BKP_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_BKPEN))\r\n#define __HAL_RCC_PWR_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_PWREN))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the APB1 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#define __HAL_RCC_TIM2_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET)\r\n#define __HAL_RCC_TIM2_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET)\r\n#define __HAL_RCC_TIM3_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET)\r\n#define __HAL_RCC_TIM3_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET)\r\n#define __HAL_RCC_WWDG_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) != RESET)\r\n#define __HAL_RCC_WWDG_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) == RESET)\r\n#define __HAL_RCC_USART2_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) != RESET)\r\n#define __HAL_RCC_USART2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) == RESET)\r\n#define __HAL_RCC_I2C1_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) != RESET)\r\n#define __HAL_RCC_I2C1_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) == RESET)\r\n#define __HAL_RCC_BKP_IS_CLK_ENABLED()     ((RCC->APB1ENR & (RCC_APB1ENR_BKPEN)) != RESET)\r\n#define __HAL_RCC_BKP_IS_CLK_DISABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_BKPEN)) == RESET)\r\n#define __HAL_RCC_PWR_IS_CLK_ENABLED()     ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) != RESET)\r\n#define __HAL_RCC_PWR_IS_CLK_DISABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) == RESET)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB2_Clock_Enable_Disable APB2 Clock Enable Disable\r\n * @brief  Enable or disable the High Speed APB (APB2) peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n#define __HAL_RCC_AFIO_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_AFIOEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_AFIOEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOA_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPAEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPAEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOB_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPBEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPBEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOC_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPCEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPCEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOD_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ADC1_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM1_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SPI1_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_USART1_CLK_ENABLE()                      \\\r\n  do {                                                     \\\r\n    __IO uint32_t tmpreg;                                  \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */     \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN); \\\r\n    UNUSED(tmpreg);                                        \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_AFIO_CLK_DISABLE()  (RCC->APB2ENR &= ~(RCC_APB2ENR_AFIOEN))\r\n#define __HAL_RCC_GPIOA_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPAEN))\r\n#define __HAL_RCC_GPIOB_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPBEN))\r\n#define __HAL_RCC_GPIOC_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPCEN))\r\n#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPDEN))\r\n#define __HAL_RCC_ADC1_CLK_DISABLE()  (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC1EN))\r\n\r\n#define __HAL_RCC_TIM1_CLK_DISABLE()   (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM1EN))\r\n#define __HAL_RCC_SPI1_CLK_DISABLE()   (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI1EN))\r\n#define __HAL_RCC_USART1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_USART1EN))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the APB2 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#define __HAL_RCC_AFIO_IS_CLK_ENABLED()    ((RCC->APB2ENR & (RCC_APB2ENR_AFIOEN)) != RESET)\r\n#define __HAL_RCC_AFIO_IS_CLK_DISABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_AFIOEN)) == RESET)\r\n#define __HAL_RCC_GPIOA_IS_CLK_ENABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_IOPAEN)) != RESET)\r\n#define __HAL_RCC_GPIOA_IS_CLK_DISABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPAEN)) == RESET)\r\n#define __HAL_RCC_GPIOB_IS_CLK_ENABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_IOPBEN)) != RESET)\r\n#define __HAL_RCC_GPIOB_IS_CLK_DISABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPBEN)) == RESET)\r\n#define __HAL_RCC_GPIOC_IS_CLK_ENABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_IOPCEN)) != RESET)\r\n#define __HAL_RCC_GPIOC_IS_CLK_DISABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPCEN)) == RESET)\r\n#define __HAL_RCC_GPIOD_IS_CLK_ENABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_IOPDEN)) != RESET)\r\n#define __HAL_RCC_GPIOD_IS_CLK_DISABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPDEN)) == RESET)\r\n#define __HAL_RCC_ADC1_IS_CLK_ENABLED()    ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) != RESET)\r\n#define __HAL_RCC_ADC1_IS_CLK_DISABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) == RESET)\r\n#define __HAL_RCC_TIM1_IS_CLK_ENABLED()    ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) != RESET)\r\n#define __HAL_RCC_TIM1_IS_CLK_DISABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) == RESET)\r\n#define __HAL_RCC_SPI1_IS_CLK_ENABLED()    ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) != RESET)\r\n#define __HAL_RCC_SPI1_IS_CLK_DISABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) == RESET)\r\n#define __HAL_RCC_USART1_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) != RESET)\r\n#define __HAL_RCC_USART1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) == RESET)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB1_Force_Release_Reset APB1 Force Release Reset\r\n * @brief  Force or release APB1 peripheral reset.\r\n * @{\r\n */\r\n#define __HAL_RCC_APB1_FORCE_RESET()   (RCC->APB2RSTR = 0xFFFFFFFFU)\r\n#define __HAL_RCC_TIM2_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST))\r\n#define __HAL_RCC_TIM3_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST))\r\n#define __HAL_RCC_WWDG_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_WWDGRST))\r\n#define __HAL_RCC_USART2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART2RST))\r\n#define __HAL_RCC_I2C1_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C1RST))\r\n\r\n#define __HAL_RCC_BKP_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_BKPRST))\r\n#define __HAL_RCC_PWR_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_PWRRST))\r\n\r\n#define __HAL_RCC_APB1_RELEASE_RESET()   (RCC->APB1RSTR = 0x00)\r\n#define __HAL_RCC_TIM2_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST))\r\n#define __HAL_RCC_TIM3_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST))\r\n#define __HAL_RCC_WWDG_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_WWDGRST))\r\n#define __HAL_RCC_USART2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART2RST))\r\n#define __HAL_RCC_I2C1_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C1RST))\r\n\r\n#define __HAL_RCC_BKP_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_BKPRST))\r\n#define __HAL_RCC_PWR_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_PWRRST))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB2_Force_Release_Reset APB2 Force Release Reset\r\n * @brief  Force or release APB2 peripheral reset.\r\n * @{\r\n */\r\n#define __HAL_RCC_APB2_FORCE_RESET()  (RCC->APB2RSTR = 0xFFFFFFFFU)\r\n#define __HAL_RCC_AFIO_FORCE_RESET()  (RCC->APB2RSTR |= (RCC_APB2RSTR_AFIORST))\r\n#define __HAL_RCC_GPIOA_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPARST))\r\n#define __HAL_RCC_GPIOB_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPBRST))\r\n#define __HAL_RCC_GPIOC_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPCRST))\r\n#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPDRST))\r\n#define __HAL_RCC_ADC1_FORCE_RESET()  (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC1RST))\r\n\r\n#define __HAL_RCC_TIM1_FORCE_RESET()   (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM1RST))\r\n#define __HAL_RCC_SPI1_FORCE_RESET()   (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI1RST))\r\n#define __HAL_RCC_USART1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_USART1RST))\r\n\r\n#define __HAL_RCC_APB2_RELEASE_RESET()  (RCC->APB2RSTR = 0x00)\r\n#define __HAL_RCC_AFIO_RELEASE_RESET()  (RCC->APB2RSTR &= ~(RCC_APB2RSTR_AFIORST))\r\n#define __HAL_RCC_GPIOA_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPARST))\r\n#define __HAL_RCC_GPIOB_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPBRST))\r\n#define __HAL_RCC_GPIOC_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPCRST))\r\n#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPDRST))\r\n#define __HAL_RCC_ADC1_RELEASE_RESET()  (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC1RST))\r\n\r\n#define __HAL_RCC_TIM1_RELEASE_RESET()   (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM1RST))\r\n#define __HAL_RCC_SPI1_RELEASE_RESET()   (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI1RST))\r\n#define __HAL_RCC_USART1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_USART1RST))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_HSI_Configuration HSI Configuration\r\n * @{\r\n */\r\n\r\n/** @brief  Macros to enable or disable the Internal High Speed oscillator (HSI).\r\n * @note   The HSI is stopped by hardware when entering STOP and STANDBY modes.\r\n * @note   HSI can not be stopped if it is used as system clock source. In this case,\r\n *         you have to select another source of the system clock then stop the HSI.\r\n * @note   After enabling the HSI, the application software should wait on HSIRDY\r\n *         flag to be set indicating that HSI clock is stable and can be used as\r\n *         system clock source.\r\n * @note   When the HSI is stopped, HSIRDY flag goes low after 6 HSI oscillator\r\n *         clock cycles.\r\n */\r\n#define __HAL_RCC_HSI_ENABLE()  (*(__IO uint32_t *)RCC_CR_HSION_BB = ENABLE)\r\n#define __HAL_RCC_HSI_DISABLE() (*(__IO uint32_t *)RCC_CR_HSION_BB = DISABLE)\r\n\r\n/** @brief  Macro to adjust the Internal High Speed oscillator (HSI) calibration value.\r\n * @note   The calibration is used to compensate for the variations in voltage\r\n *         and temperature that influence the frequency of the internal HSI RC.\r\n * @param  _HSICALIBRATIONVALUE_ specifies the calibration trimming value.\r\n *         (default is RCC_HSICALIBRATION_DEFAULT).\r\n *         This parameter must be a number between 0 and 0x1F.\r\n */\r\n#define __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(_HSICALIBRATIONVALUE_) (MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, (uint32_t)(_HSICALIBRATIONVALUE_) << RCC_CR_HSITRIM_Pos))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_LSI_Configuration  LSI Configuration\r\n * @{\r\n */\r\n\r\n/** @brief Macro to enable the Internal Low Speed oscillator (LSI).\r\n * @note   After enabling the LSI, the application software should wait on\r\n *         LSIRDY flag to be set indicating that LSI clock is stable and can\r\n *         be used to clock the IWDG and/or the RTC.\r\n */\r\n#define __HAL_RCC_LSI_ENABLE() (*(__IO uint32_t *)RCC_CSR_LSION_BB = ENABLE)\r\n\r\n/** @brief Macro to disable the Internal Low Speed oscillator (LSI).\r\n * @note   LSI can not be disabled if the IWDG is running.\r\n * @note   When the LSI is stopped, LSIRDY flag goes low after 6 LSI oscillator\r\n *         clock cycles.\r\n */\r\n#define __HAL_RCC_LSI_DISABLE() (*(__IO uint32_t *)RCC_CSR_LSION_BB = DISABLE)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_HSE_Configuration HSE Configuration\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Macro to configure the External High Speed oscillator (HSE).\r\n * @note   Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not\r\n *         supported by this macro. User should request a transition to HSE Off\r\n *         first and then HSE On or HSE Bypass.\r\n * @note   After enabling the HSE (RCC_HSE_ON or RCC_HSE_Bypass), the application\r\n *         software should wait on HSERDY flag to be set indicating that HSE clock\r\n *         is stable and can be used to clock the PLL and/or system clock.\r\n * @note   HSE state can not be changed if it is used directly or through the\r\n *         PLL as system clock. In this case, you have to select another source\r\n *         of the system clock then change the HSE state (ex. disable it).\r\n * @note   The HSE is stopped by hardware when entering STOP and STANDBY modes.\r\n * @note   This function reset the CSSON bit, so if the clock security system(CSS)\r\n *         was previously enabled you have to enable it again after calling this\r\n *         function.\r\n * @param  __STATE__ specifies the new state of the HSE.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_HSE_OFF turn OFF the HSE oscillator, HSERDY flag goes low after\r\n *                              6 HSE oscillator clock cycles.\r\n *            @arg @ref RCC_HSE_ON turn ON the HSE oscillator\r\n *            @arg @ref RCC_HSE_BYPASS HSE oscillator bypassed with external clock\r\n */\r\n#define __HAL_RCC_HSE_CONFIG(__STATE__)         \\\r\n  do {                                          \\\r\n    if ((__STATE__) == RCC_HSE_ON) {            \\\r\n      SET_BIT(RCC->CR, RCC_CR_HSEON);           \\\r\n    } else if ((__STATE__) == RCC_HSE_OFF) {    \\\r\n      CLEAR_BIT(RCC->CR, RCC_CR_HSEON);         \\\r\n      CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);        \\\r\n    } else if ((__STATE__) == RCC_HSE_BYPASS) { \\\r\n      SET_BIT(RCC->CR, RCC_CR_HSEBYP);          \\\r\n      SET_BIT(RCC->CR, RCC_CR_HSEON);           \\\r\n    } else {                                    \\\r\n      CLEAR_BIT(RCC->CR, RCC_CR_HSEON);         \\\r\n      CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);        \\\r\n    }                                           \\\r\n  } while (0U)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_LSE_Configuration LSE Configuration\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Macro to configure the External Low Speed oscillator (LSE).\r\n * @note Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not supported by this macro.\r\n * @note   As the LSE is in the Backup domain and write access is denied to\r\n *         this domain after reset, you have to enable write access using\r\n *         @ref HAL_PWR_EnableBkUpAccess() function before to configure the LSE\r\n *         (to be done once after reset).\r\n * @note   After enabling the LSE (RCC_LSE_ON or RCC_LSE_BYPASS), the application\r\n *         software should wait on LSERDY flag to be set indicating that LSE clock\r\n *         is stable and can be used to clock the RTC.\r\n * @param  __STATE__ specifies the new state of the LSE.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref RCC_LSE_OFF turn OFF the LSE oscillator, LSERDY flag goes low after\r\n *                              6 LSE oscillator clock cycles.\r\n *            @arg @ref RCC_LSE_ON turn ON the LSE oscillator.\r\n *            @arg @ref RCC_LSE_BYPASS LSE oscillator bypassed with external clock.\r\n */\r\n#define __HAL_RCC_LSE_CONFIG(__STATE__)         \\\r\n  do {                                          \\\r\n    if ((__STATE__) == RCC_LSE_ON) {            \\\r\n      SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);       \\\r\n    } else if ((__STATE__) == RCC_LSE_OFF) {    \\\r\n      CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);     \\\r\n      CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);    \\\r\n    } else if ((__STATE__) == RCC_LSE_BYPASS) { \\\r\n      SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);      \\\r\n      SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);       \\\r\n    } else {                                    \\\r\n      CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);     \\\r\n      CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);    \\\r\n    }                                           \\\r\n  } while (0U)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_PLL_Configuration PLL Configuration\r\n * @{\r\n */\r\n\r\n/** @brief Macro to enable the main PLL.\r\n * @note   After enabling the main PLL, the application software should wait on\r\n *         PLLRDY flag to be set indicating that PLL clock is stable and can\r\n *         be used as system clock source.\r\n * @note   The main PLL is disabled by hardware when entering STOP and STANDBY modes.\r\n */\r\n#define __HAL_RCC_PLL_ENABLE() (*(__IO uint32_t *)RCC_CR_PLLON_BB = ENABLE)\r\n\r\n/** @brief Macro to disable the main PLL.\r\n * @note   The main PLL can not be disabled if it is used as system clock source\r\n */\r\n#define __HAL_RCC_PLL_DISABLE() (*(__IO uint32_t *)RCC_CR_PLLON_BB = DISABLE)\r\n\r\n/** @brief Macro to configure the main PLL clock source and multiplication factors.\r\n  * @note   This function must be used only when the main PLL is disabled.\r\n  *\r\n  * @param  __RCC_PLLSOURCE__ specifies the PLL entry clock source.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_PLLSOURCE_HSI_DIV2 HSI oscillator clock selected as PLL clock entry\r\n  *            @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL clock entry\r\n  * @param  __PLLMUL__ specifies the multiplication factor for PLL VCO output clock\r\n  *          This parameter can be one of the following values:\r\n  *             @arg @ref RCC_PLL_MUL4   PLLVCO = PLL clock entry x 4\r\n  *             @arg @ref RCC_PLL_MUL6   PLLVCO = PLL clock entry x 6\r\n  @if STM32F105xC\r\n  *             @arg @ref RCC_PLL_MUL6_5 PLLVCO = PLL clock entry x 6.5\r\n  @elseif STM32F107xC\r\n  *             @arg @ref RCC_PLL_MUL6_5 PLLVCO = PLL clock entry x 6.5\r\n  @else\r\n  *             @arg @ref RCC_PLL_MUL2   PLLVCO = PLL clock entry x 2\r\n  *             @arg @ref RCC_PLL_MUL3   PLLVCO = PLL clock entry x 3\r\n  *             @arg @ref RCC_PLL_MUL10  PLLVCO = PLL clock entry x 10\r\n  *             @arg @ref RCC_PLL_MUL11  PLLVCO = PLL clock entry x 11\r\n  *             @arg @ref RCC_PLL_MUL12  PLLVCO = PLL clock entry x 12\r\n  *             @arg @ref RCC_PLL_MUL13  PLLVCO = PLL clock entry x 13\r\n  *             @arg @ref RCC_PLL_MUL14  PLLVCO = PLL clock entry x 14\r\n  *             @arg @ref RCC_PLL_MUL15  PLLVCO = PLL clock entry x 15\r\n  *             @arg @ref RCC_PLL_MUL16  PLLVCO = PLL clock entry x 16\r\n  @endif\r\n  *             @arg @ref RCC_PLL_MUL8   PLLVCO = PLL clock entry x 8\r\n  *             @arg @ref RCC_PLL_MUL9   PLLVCO = PLL clock entry x 9\r\n  *\r\n  */\r\n#define __HAL_RCC_PLL_CONFIG(__RCC_PLLSOURCE__, __PLLMUL__) MODIFY_REG(RCC->CFGR, (RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL), ((__RCC_PLLSOURCE__) | (__PLLMUL__)))\r\n\r\n/** @brief  Get oscillator clock selected as PLL input clock\r\n * @retval The clock source used for PLL entry. The returned value can be one\r\n *         of the following:\r\n *             @arg @ref RCC_PLLSOURCE_HSI_DIV2 HSI oscillator clock selected as PLL input clock\r\n *             @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL input clock\r\n */\r\n#define __HAL_RCC_GET_PLL_OSCSOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Get_Clock_source Get Clock source\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Macro to configure the system clock source.\r\n * @param  __SYSCLKSOURCE__ specifies the system clock source.\r\n *          This parameter can be one of the following values:\r\n *              @arg @ref RCC_SYSCLKSOURCE_HSI HSI oscillator is used as system clock source.\r\n *              @arg @ref RCC_SYSCLKSOURCE_HSE HSE oscillator is used as system clock source.\r\n *              @arg @ref RCC_SYSCLKSOURCE_PLLCLK PLL output is used as system clock source.\r\n */\r\n#define __HAL_RCC_SYSCLK_CONFIG(__SYSCLKSOURCE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, (__SYSCLKSOURCE__))\r\n\r\n/** @brief  Macro to get the clock source used as system clock.\r\n * @retval The clock source used as system clock. The returned value can be one\r\n *         of the following:\r\n *             @arg @ref RCC_SYSCLKSOURCE_STATUS_HSI HSI used as system clock\r\n *             @arg @ref RCC_SYSCLKSOURCE_STATUS_HSE HSE used as system clock\r\n *             @arg @ref RCC_SYSCLKSOURCE_STATUS_PLLCLK PLL used as system clock\r\n */\r\n#define __HAL_RCC_GET_SYSCLK_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_MCOx_Clock_Config RCC Extended MCOx Clock Config\r\n * @{\r\n */\r\n\r\n#if defined(RCC_CFGR_MCO_3)\r\n/** @brief  Macro to configure the MCO clock.\r\n * @param  __MCOCLKSOURCE__ specifies the MCO clock source.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref RCC_MCO1SOURCE_NOCLOCK      No clock selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_SYSCLK       System clock (SYSCLK) selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_HSI          HSI selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_HSE          HSE selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_PLLCLK       PLL clock divided by 2 selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_PLL2CLK      PLL2 clock selected by 2 selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_PLL3CLK_DIV2 PLL3 clock divided by 2 selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_EXT_HSE XT1  external 3-25 MHz oscillator clock selected (for Ethernet) as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_PLL3CLK      PLL3 clock selected (for Ethernet) as MCO clock\r\n * @param  __MCODIV__ specifies the MCO clock prescaler.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref RCC_MCODIV_1 No division applied on MCO clock source\r\n */\r\n#else\r\n/** @brief  Macro to configure the MCO clock.\r\n * @param  __MCOCLKSOURCE__ specifies the MCO clock source.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref RCC_MCO1SOURCE_NOCLOCK No clock selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_SYSCLK  System clock (SYSCLK) selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_HSI HSI selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_HSE HSE selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_PLLCLK  PLL clock divided by 2 selected as MCO clock\r\n * @param  __MCODIV__ specifies the MCO clock prescaler.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref RCC_MCODIV_1 No division applied on MCO clock source\r\n */\r\n#endif\r\n\r\n#define __HAL_RCC_MCO1_CONFIG(__MCOCLKSOURCE__, __MCODIV__) MODIFY_REG(RCC->CFGR, RCC_CFGR_MCO, (__MCOCLKSOURCE__))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_RTC_Clock_Configuration RCC RTC Clock Configuration\r\n * @{\r\n */\r\n\r\n/** @brief Macro to configure the RTC clock (RTCCLK).\r\n * @note   As the RTC clock configuration bits are in the Backup domain and write\r\n *         access is denied to this domain after reset, you have to enable write\r\n *         access using the Power Backup Access macro before to configure\r\n *         the RTC clock source (to be done once after reset).\r\n * @note   Once the RTC clock is configured it can't be changed unless the\r\n *         Backup domain is reset using @ref __HAL_RCC_BACKUPRESET_FORCE() macro, or by\r\n *         a Power On Reset (POR).\r\n *\r\n * @param  __RTC_CLKSOURCE__ specifies the RTC clock source.\r\n *          This parameter can be one of the following values:\r\n *             @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock\r\n *             @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock\r\n *             @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock\r\n *             @arg @ref RCC_RTCCLKSOURCE_HSE_DIV128 HSE divided by 128 selected as RTC clock\r\n * @note   If the LSE or LSI is used as RTC clock source, the RTC continues to\r\n *         work in STOP and STANDBY modes, and can be used as wakeup source.\r\n *         However, when the HSE clock is used as RTC clock source, the RTC\r\n *         cannot be used in STOP and STANDBY modes.\r\n * @note   The maximum input clock frequency for RTC is 1MHz (when using HSE as\r\n *         RTC clock source).\r\n */\r\n#define __HAL_RCC_RTC_CONFIG(__RTC_CLKSOURCE__) MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, (__RTC_CLKSOURCE__))\r\n\r\n/** @brief Macro to get the RTC clock source.\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock\r\n *            @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock\r\n *            @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock\r\n *            @arg @ref RCC_RTCCLKSOURCE_HSE_DIV128 HSE divided by 128 selected as RTC clock\r\n */\r\n#define __HAL_RCC_GET_RTC_SOURCE() (READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL))\r\n\r\n/** @brief Macro to enable the the RTC clock.\r\n * @note   These macros must be used only after the RTC clock source was selected.\r\n */\r\n#define __HAL_RCC_RTC_ENABLE() (*(__IO uint32_t *)RCC_BDCR_RTCEN_BB = ENABLE)\r\n\r\n/** @brief Macro to disable the the RTC clock.\r\n * @note  These macros must be used only after the RTC clock source was selected.\r\n */\r\n#define __HAL_RCC_RTC_DISABLE() (*(__IO uint32_t *)RCC_BDCR_RTCEN_BB = DISABLE)\r\n\r\n/** @brief  Macro to force the Backup domain reset.\r\n * @note   This function resets the RTC peripheral (including the backup registers)\r\n *         and the RTC clock source selection in RCC_BDCR register.\r\n */\r\n#define __HAL_RCC_BACKUPRESET_FORCE() (*(__IO uint32_t *)RCC_BDCR_BDRST_BB = ENABLE)\r\n\r\n/** @brief  Macros to release the Backup domain reset.\r\n */\r\n#define __HAL_RCC_BACKUPRESET_RELEASE() (*(__IO uint32_t *)RCC_BDCR_BDRST_BB = DISABLE)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Flags_Interrupts_Management Flags Interrupts Management\r\n * @brief macros to manage the specified RCC Flags and interrupts.\r\n * @{\r\n */\r\n\r\n/** @brief Enable RCC interrupt.\r\n  * @param  __INTERRUPT__ specifies the RCC interrupt sources to be enabled.\r\n  *          This parameter can be any combination of the following values:\r\n  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt\r\n  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt\r\n  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt\r\n  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt\r\n  *            @arg @ref RCC_IT_PLLRDY main PLL ready interrupt\r\n  @if STM32F105xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @elsif STM32F107xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @endif\r\n  */\r\n#define __HAL_RCC_ENABLE_IT(__INTERRUPT__) (*(__IO uint8_t *)RCC_CIR_BYTE1_ADDRESS |= (__INTERRUPT__))\r\n\r\n/** @brief Disable RCC interrupt.\r\n  * @param  __INTERRUPT__ specifies the RCC interrupt sources to be disabled.\r\n  *          This parameter can be any combination of the following values:\r\n  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt\r\n  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt\r\n  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt\r\n  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt\r\n  *            @arg @ref RCC_IT_PLLRDY main PLL ready interrupt\r\n  @if STM32F105xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @elsif STM32F107xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @endif\r\n  */\r\n#define __HAL_RCC_DISABLE_IT(__INTERRUPT__) (*(__IO uint8_t *)RCC_CIR_BYTE1_ADDRESS &= (uint8_t)(~(__INTERRUPT__)))\r\n\r\n/** @brief Clear the RCC's interrupt pending bits.\r\n  * @param  __INTERRUPT__ specifies the interrupt pending bit to clear.\r\n  *          This parameter can be any combination of the following values:\r\n  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt.\r\n  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt.\r\n  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt.\r\n  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLRDY Main PLL ready interrupt.\r\n  @if STM32F105xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @elsif STM32F107xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @endif\r\n  *            @arg @ref RCC_IT_CSS Clock Security System interrupt\r\n  */\r\n#define __HAL_RCC_CLEAR_IT(__INTERRUPT__) (*(__IO uint8_t *)RCC_CIR_BYTE2_ADDRESS = (__INTERRUPT__))\r\n\r\n/** @brief Check the RCC's interrupt has occurred or not.\r\n  * @param  __INTERRUPT__ specifies the RCC interrupt source to check.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt.\r\n  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt.\r\n  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt.\r\n  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLRDY Main PLL ready interrupt.\r\n  @if STM32F105xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @elsif STM32F107xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @endif\r\n  *            @arg @ref RCC_IT_CSS Clock Security System interrupt\r\n  * @retval The new state of __INTERRUPT__ (TRUE or FALSE).\r\n  */\r\n#define __HAL_RCC_GET_IT(__INTERRUPT__) ((RCC->CIR & (__INTERRUPT__)) == (__INTERRUPT__))\r\n\r\n/** @brief Set RMVF bit to clear the reset flags.\r\n *         The reset flags are RCC_FLAG_PINRST, RCC_FLAG_PORRST, RCC_FLAG_SFTRST,\r\n *         RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST, RCC_FLAG_LPWRRST\r\n */\r\n#define __HAL_RCC_CLEAR_RESET_FLAGS() (*(__IO uint32_t *)RCC_CSR_RMVF_BB = ENABLE)\r\n\r\n/** @brief  Check RCC flag is set or not.\r\n  * @param  __FLAG__ specifies the flag to check.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_FLAG_HSIRDY HSI oscillator clock ready.\r\n  *            @arg @ref RCC_FLAG_HSERDY HSE oscillator clock ready.\r\n  *            @arg @ref RCC_FLAG_PLLRDY Main PLL clock ready.\r\n  @if STM32F105xx\r\n  *            @arg @ref RCC_FLAG_PLL2RDY Main PLL2 clock ready.\r\n  *            @arg @ref RCC_FLAG_PLLI2SRDY Main PLLI2S clock ready.\r\n  @elsif STM32F107xx\r\n  *            @arg @ref RCC_FLAG_PLL2RDY Main PLL2 clock ready.\r\n  *            @arg @ref RCC_FLAG_PLLI2SRDY Main PLLI2S clock ready.\r\n  @endif\r\n  *            @arg @ref RCC_FLAG_LSERDY LSE oscillator clock ready.\r\n  *            @arg @ref RCC_FLAG_LSIRDY LSI oscillator clock ready.\r\n  *            @arg @ref RCC_FLAG_PINRST  Pin reset.\r\n  *            @arg @ref RCC_FLAG_PORRST  POR/PDR reset.\r\n  *            @arg @ref RCC_FLAG_SFTRST  Software reset.\r\n  *            @arg @ref RCC_FLAG_IWDGRST Independent Watchdog reset.\r\n  *            @arg @ref RCC_FLAG_WWDGRST Window Watchdog reset.\r\n  *            @arg @ref RCC_FLAG_LPWRRST Low Power reset.\r\n  * @retval The new state of __FLAG__ (TRUE or FALSE).\r\n  */\r\n#define __HAL_RCC_GET_FLAG(__FLAG__) (((((__FLAG__) >> 5U) == CR_REG_INDEX) ? RCC->CR : ((((__FLAG__) >> 5U) == BDCR_REG_INDEX) ? RCC->BDCR : RCC->CSR)) & (1U << ((__FLAG__)&RCC_FLAG_MASK)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Include RCC HAL Extension module */\r\n#include \"stm32f1xx_hal_rcc_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup RCC_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup RCC_Exported_Functions_Group1\r\n * @{\r\n */\r\n\r\n/* Initialization and de-initialization functions  ******************************/\r\nHAL_StatusTypeDef HAL_RCC_DeInit(void);\r\nHAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct);\r\nHAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCC_Exported_Functions_Group2\r\n * @{\r\n */\r\n\r\n/* Peripheral Control functions  ************************************************/\r\nvoid     HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv);\r\nvoid     HAL_RCC_EnableCSS(void);\r\nvoid     HAL_RCC_DisableCSS(void);\r\nuint32_t HAL_RCC_GetSysClockFreq(void);\r\nuint32_t HAL_RCC_GetHCLKFreq(void);\r\nuint32_t HAL_RCC_GetPCLK1Freq(void);\r\nuint32_t HAL_RCC_GetPCLK2Freq(void);\r\nvoid     HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct);\r\nvoid     HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency);\r\n\r\n/* CSS NMI IRQ handler */\r\nvoid HAL_RCC_NMI_IRQHandler(void);\r\n\r\n/* User Callbacks in non blocking mode (IT mode) */\r\nvoid HAL_RCC_CSSCallback(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCC_Private_Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup RCC_Timeout RCC Timeout\r\n * @{\r\n */\r\n\r\n/* Disable Backup domain write protection state change timeout */\r\n#define RCC_DBP_TIMEOUT_VALUE 100U /* 100 ms */\r\n/* LSE state change timeout */\r\n#define RCC_LSE_TIMEOUT_VALUE     LSE_STARTUP_TIMEOUT\r\n#define CLOCKSWITCH_TIMEOUT_VALUE 5000 /* 5 s    */\r\n#define HSE_TIMEOUT_VALUE         HSE_STARTUP_TIMEOUT\r\n#define HSI_TIMEOUT_VALUE         2U /* 2 ms (minimum Tick + 1) */\r\n#define LSI_TIMEOUT_VALUE         2U /* 2 ms (minimum Tick + 1) */\r\n#define PLL_TIMEOUT_VALUE         2U /* 2 ms (minimum Tick + 1) */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Register_Offset Register offsets\r\n * @{\r\n */\r\n#define RCC_OFFSET      (RCC_BASE - PERIPH_BASE)\r\n#define RCC_CR_OFFSET   0x00U\r\n#define RCC_CFGR_OFFSET 0x04U\r\n#define RCC_CIR_OFFSET  0x08U\r\n#define RCC_BDCR_OFFSET 0x20U\r\n#define RCC_CSR_OFFSET  0x24U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_BitAddress_AliasRegion BitAddress AliasRegion\r\n * @brief RCC registers bit address in the alias region\r\n * @{\r\n */\r\n#define RCC_CR_OFFSET_BB   (RCC_OFFSET + RCC_CR_OFFSET)\r\n#define RCC_CFGR_OFFSET_BB (RCC_OFFSET + RCC_CFGR_OFFSET)\r\n#define RCC_CIR_OFFSET_BB  (RCC_OFFSET + RCC_CIR_OFFSET)\r\n#define RCC_BDCR_OFFSET_BB (RCC_OFFSET + RCC_BDCR_OFFSET)\r\n#define RCC_CSR_OFFSET_BB  (RCC_OFFSET + RCC_CSR_OFFSET)\r\n\r\n/* --- CR Register ---*/\r\n/* Alias word address of HSION bit */\r\n#define RCC_HSION_BIT_NUMBER RCC_CR_HSION_Pos\r\n#define RCC_CR_HSION_BB      ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_HSION_BIT_NUMBER * 4U)))\r\n/* Alias word address of HSEON bit */\r\n#define RCC_HSEON_BIT_NUMBER RCC_CR_HSEON_Pos\r\n#define RCC_CR_HSEON_BB      ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_HSEON_BIT_NUMBER * 4U)))\r\n/* Alias word address of CSSON bit */\r\n#define RCC_CSSON_BIT_NUMBER RCC_CR_CSSON_Pos\r\n#define RCC_CR_CSSON_BB      ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_CSSON_BIT_NUMBER * 4U)))\r\n/* Alias word address of PLLON bit */\r\n#define RCC_PLLON_BIT_NUMBER RCC_CR_PLLON_Pos\r\n#define RCC_CR_PLLON_BB      ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_PLLON_BIT_NUMBER * 4U)))\r\n\r\n/* --- CSR Register ---*/\r\n/* Alias word address of LSION bit */\r\n#define RCC_LSION_BIT_NUMBER RCC_CSR_LSION_Pos\r\n#define RCC_CSR_LSION_BB     ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32U) + (RCC_LSION_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of RMVF bit */\r\n#define RCC_RMVF_BIT_NUMBER RCC_CSR_RMVF_Pos\r\n#define RCC_CSR_RMVF_BB     ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32U) + (RCC_RMVF_BIT_NUMBER * 4U)))\r\n\r\n/* --- BDCR Registers ---*/\r\n/* Alias word address of LSEON bit */\r\n#define RCC_LSEON_BIT_NUMBER RCC_BDCR_LSEON_Pos\r\n#define RCC_BDCR_LSEON_BB    ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32U) + (RCC_LSEON_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of LSEON bit */\r\n#define RCC_LSEBYP_BIT_NUMBER RCC_BDCR_LSEBYP_Pos\r\n#define RCC_BDCR_LSEBYP_BB    ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32U) + (RCC_LSEBYP_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of RTCEN bit */\r\n#define RCC_RTCEN_BIT_NUMBER RCC_BDCR_RTCEN_Pos\r\n#define RCC_BDCR_RTCEN_BB    ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32U) + (RCC_RTCEN_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of BDRST bit */\r\n#define RCC_BDRST_BIT_NUMBER RCC_BDCR_BDRST_Pos\r\n#define RCC_BDCR_BDRST_BB    ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32U) + (RCC_BDRST_BIT_NUMBER * 4U)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* CR register byte 2 (Bits[23:16]) base address */\r\n#define RCC_CR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + RCC_CR_OFFSET + 0x02U))\r\n\r\n/* CIR register byte 1 (Bits[15:8]) base address */\r\n#define RCC_CIR_BYTE1_ADDRESS ((uint32_t)(RCC_BASE + RCC_CIR_OFFSET + 0x01U))\r\n\r\n/* CIR register byte 2 (Bits[23:16]) base address */\r\n#define RCC_CIR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + RCC_CIR_OFFSET + 0x02U))\r\n\r\n/* Defines used for Flags */\r\n#define CR_REG_INDEX   ((uint8_t)1)\r\n#define BDCR_REG_INDEX ((uint8_t)2)\r\n#define CSR_REG_INDEX  ((uint8_t)3)\r\n\r\n#define RCC_FLAG_MASK ((uint8_t)0x1F)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCC_Private_Macros\r\n * @{\r\n */\r\n/** @defgroup RCC_Alias_For_Legacy Alias define maintained for legacy\r\n * @{\r\n */\r\n#define __HAL_RCC_SYSCFG_CLK_DISABLE   __HAL_RCC_AFIO_CLK_DISABLE\r\n#define __HAL_RCC_SYSCFG_CLK_ENABLE    __HAL_RCC_AFIO_CLK_ENABLE\r\n#define __HAL_RCC_SYSCFG_FORCE_RESET   __HAL_RCC_AFIO_FORCE_RESET\r\n#define __HAL_RCC_SYSCFG_RELEASE_RESET __HAL_RCC_AFIO_RELEASE_RESET\r\n/**\r\n * @}\r\n */\r\n\r\n#define IS_RCC_PLLSOURCE(__SOURCE__) (((__SOURCE__) == RCC_PLLSOURCE_HSI_DIV2) || ((__SOURCE__) == RCC_PLLSOURCE_HSE))\r\n#define IS_RCC_OSCILLATORTYPE(__OSCILLATOR__)                                                                                                                                                      \\\r\n  (((__OSCILLATOR__) == RCC_OSCILLATORTYPE_NONE) || (((__OSCILLATOR__)&RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) || (((__OSCILLATOR__)&RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) \\\r\n   || (((__OSCILLATOR__)&RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) || (((__OSCILLATOR__)&RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE))\r\n#define IS_RCC_HSE(__HSE__)                 (((__HSE__) == RCC_HSE_OFF) || ((__HSE__) == RCC_HSE_ON) || ((__HSE__) == RCC_HSE_BYPASS))\r\n#define IS_RCC_LSE(__LSE__)                 (((__LSE__) == RCC_LSE_OFF) || ((__LSE__) == RCC_LSE_ON) || ((__LSE__) == RCC_LSE_BYPASS))\r\n#define IS_RCC_HSI(__HSI__)                 (((__HSI__) == RCC_HSI_OFF) || ((__HSI__) == RCC_HSI_ON))\r\n#define IS_RCC_CALIBRATION_VALUE(__VALUE__) ((__VALUE__) <= 0x1FU)\r\n#define IS_RCC_LSI(__LSI__)                 (((__LSI__) == RCC_LSI_OFF) || ((__LSI__) == RCC_LSI_ON))\r\n#define IS_RCC_PLL(__PLL__)                 (((__PLL__) == RCC_PLL_NONE) || ((__PLL__) == RCC_PLL_OFF) || ((__PLL__) == RCC_PLL_ON))\r\n\r\n#define IS_RCC_CLOCKTYPE(CLK)                                                                                                                                           \\\r\n  ((((CLK)&RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) || (((CLK)&RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) || (((CLK)&RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) \\\r\n   || (((CLK)&RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2))\r\n#define IS_RCC_SYSCLKSOURCE(__SOURCE__)        (((__SOURCE__) == RCC_SYSCLKSOURCE_HSI) || ((__SOURCE__) == RCC_SYSCLKSOURCE_HSE) || ((__SOURCE__) == RCC_SYSCLKSOURCE_PLLCLK))\r\n#define IS_RCC_SYSCLKSOURCE_STATUS(__SOURCE__) (((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_HSI) || ((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_HSE) || ((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_PLLCLK))\r\n#define IS_RCC_HCLK(__HCLK__)                                                                                                                                                   \\\r\n  (((__HCLK__) == RCC_SYSCLK_DIV1) || ((__HCLK__) == RCC_SYSCLK_DIV2) || ((__HCLK__) == RCC_SYSCLK_DIV4) || ((__HCLK__) == RCC_SYSCLK_DIV8) || ((__HCLK__) == RCC_SYSCLK_DIV16) \\\r\n   || ((__HCLK__) == RCC_SYSCLK_DIV64) || ((__HCLK__) == RCC_SYSCLK_DIV128) || ((__HCLK__) == RCC_SYSCLK_DIV256) || ((__HCLK__) == RCC_SYSCLK_DIV512))\r\n#define IS_RCC_PCLK(__PCLK__)  (((__PCLK__) == RCC_HCLK_DIV1) || ((__PCLK__) == RCC_HCLK_DIV2) || ((__PCLK__) == RCC_HCLK_DIV4) || ((__PCLK__) == RCC_HCLK_DIV8) || ((__PCLK__) == RCC_HCLK_DIV16))\r\n#define IS_RCC_MCO(__MCO__)    ((__MCO__) == RCC_MCO)\r\n#define IS_RCC_MCODIV(__DIV__) (((__DIV__) == RCC_MCODIV_1))\r\n#define IS_RCC_RTCCLKSOURCE(__SOURCE__) \\\r\n  (((__SOURCE__) == RCC_RTCCLKSOURCE_NO_CLK) || ((__SOURCE__) == RCC_RTCCLKSOURCE_LSE) || ((__SOURCE__) == RCC_RTCCLKSOURCE_LSI) || ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV128))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_RCC_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_rcc_ex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of RCC HAL Extension module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_RCC_EX_H\r\n#define __STM32F1xx_HAL_RCC_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup RCCEx\r\n * @{\r\n */\r\n\r\n/** @addtogroup RCCEx_Private_Constants\r\n * @{\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n\r\n/* Alias word address of PLLI2SON bit */\r\n#define PLLI2SON_BITNUMBER RCC_CR_PLL3ON_Pos\r\n#define RCC_CR_PLLI2SON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (PLLI2SON_BITNUMBER * 4U)))\r\n/* Alias word address of PLL2ON bit */\r\n#define PLL2ON_BITNUMBER RCC_CR_PLL2ON_Pos\r\n#define RCC_CR_PLL2ON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (PLL2ON_BITNUMBER * 4U)))\r\n\r\n#define PLLI2S_TIMEOUT_VALUE 100U /* 100 ms */\r\n#define PLL2_TIMEOUT_VALUE   100U /* 100 ms */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#define CR_REG_INDEX ((uint8_t)1)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCCEx_Private_Macros\r\n * @{\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define IS_RCC_PREDIV1_SOURCE(__SOURCE__) (((__SOURCE__) == RCC_PREDIV1_SOURCE_HSE) || ((__SOURCE__) == RCC_PREDIV1_SOURCE_PLL2))\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB) || defined(STM32F100xE)\r\n#define IS_RCC_HSE_PREDIV(__DIV__)                                                                                                                                                                    \\\r\n  (((__DIV__) == RCC_HSE_PREDIV_DIV1) || ((__DIV__) == RCC_HSE_PREDIV_DIV2) || ((__DIV__) == RCC_HSE_PREDIV_DIV3) || ((__DIV__) == RCC_HSE_PREDIV_DIV4) || ((__DIV__) == RCC_HSE_PREDIV_DIV5)         \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV_DIV6) || ((__DIV__) == RCC_HSE_PREDIV_DIV7) || ((__DIV__) == RCC_HSE_PREDIV_DIV8) || ((__DIV__) == RCC_HSE_PREDIV_DIV9) || ((__DIV__) == RCC_HSE_PREDIV_DIV10)     \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV_DIV11) || ((__DIV__) == RCC_HSE_PREDIV_DIV12) || ((__DIV__) == RCC_HSE_PREDIV_DIV13) || ((__DIV__) == RCC_HSE_PREDIV_DIV14) || ((__DIV__) == RCC_HSE_PREDIV_DIV15) \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV_DIV16))\r\n\r\n#else\r\n#define IS_RCC_HSE_PREDIV(__DIV__) (((__DIV__) == RCC_HSE_PREDIV_DIV1) || ((__DIV__) == RCC_HSE_PREDIV_DIV2))\r\n#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define IS_RCC_PLL_MUL(__MUL__)                                                                                                                                                           \\\r\n  (((__MUL__) == RCC_PLL_MUL4) || ((__MUL__) == RCC_PLL_MUL5) || ((__MUL__) == RCC_PLL_MUL6) || ((__MUL__) == RCC_PLL_MUL7) || ((__MUL__) == RCC_PLL_MUL8) || ((__MUL__) == RCC_PLL_MUL9) \\\r\n   || ((__MUL__) == RCC_PLL_MUL6_5))\r\n\r\n#define IS_RCC_MCO1SOURCE(__SOURCE__)                                                                                                                                                   \\\r\n  (((__SOURCE__) == RCC_MCO1SOURCE_SYSCLK) || ((__SOURCE__) == RCC_MCO1SOURCE_HSI) || ((__SOURCE__) == RCC_MCO1SOURCE_HSE) || ((__SOURCE__) == RCC_MCO1SOURCE_PLLCLK)                   \\\r\n   || ((__SOURCE__) == RCC_MCO1SOURCE_PLL2CLK) || ((__SOURCE__) == RCC_MCO1SOURCE_PLL3CLK) || ((__SOURCE__) == RCC_MCO1SOURCE_PLL3CLK_DIV2) || ((__SOURCE__) == RCC_MCO1SOURCE_EXT_HSE) \\\r\n   || ((__SOURCE__) == RCC_MCO1SOURCE_NOCLOCK))\r\n\r\n#else\r\n#define IS_RCC_PLL_MUL(__MUL__)                                                                                                                                                                  \\\r\n  (((__MUL__) == RCC_PLL_MUL2) || ((__MUL__) == RCC_PLL_MUL3) || ((__MUL__) == RCC_PLL_MUL4) || ((__MUL__) == RCC_PLL_MUL5) || ((__MUL__) == RCC_PLL_MUL6) || ((__MUL__) == RCC_PLL_MUL7)        \\\r\n   || ((__MUL__) == RCC_PLL_MUL8) || ((__MUL__) == RCC_PLL_MUL9) || ((__MUL__) == RCC_PLL_MUL10) || ((__MUL__) == RCC_PLL_MUL11) || ((__MUL__) == RCC_PLL_MUL12) || ((__MUL__) == RCC_PLL_MUL13) \\\r\n   || ((__MUL__) == RCC_PLL_MUL14) || ((__MUL__) == RCC_PLL_MUL15) || ((__MUL__) == RCC_PLL_MUL16))\r\n\r\n#define IS_RCC_MCO1SOURCE(__SOURCE__)                                                                                                                                 \\\r\n  (((__SOURCE__) == RCC_MCO1SOURCE_SYSCLK) || ((__SOURCE__) == RCC_MCO1SOURCE_HSI) || ((__SOURCE__) == RCC_MCO1SOURCE_HSE) || ((__SOURCE__) == RCC_MCO1SOURCE_PLLCLK) \\\r\n   || ((__SOURCE__) == RCC_MCO1SOURCE_NOCLOCK))\r\n\r\n#endif /* STM32F105xC || STM32F107xC*/\r\n\r\n#define IS_RCC_ADCPLLCLK_DIV(__ADCCLK__) (((__ADCCLK__) == RCC_ADCPCLK2_DIV2) || ((__ADCCLK__) == RCC_ADCPCLK2_DIV4) || ((__ADCCLK__) == RCC_ADCPCLK2_DIV6) || ((__ADCCLK__) == RCC_ADCPCLK2_DIV8))\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define IS_RCC_I2S2CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_I2S2CLKSOURCE_SYSCLK) || ((__SOURCE__) == RCC_I2S2CLKSOURCE_PLLI2S_VCO))\r\n\r\n#define IS_RCC_I2S3CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_I2S3CLKSOURCE_SYSCLK) || ((__SOURCE__) == RCC_I2S3CLKSOURCE_PLLI2S_VCO))\r\n\r\n#define IS_RCC_USBPLLCLK_DIV(__USBCLK__) (((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV2) || ((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV3))\r\n\r\n#define IS_RCC_PLLI2S_MUL(__MUL__)                                                                                                                                           \\\r\n  (((__MUL__) == RCC_PLLI2S_MUL8) || ((__MUL__) == RCC_PLLI2S_MUL9) || ((__MUL__) == RCC_PLLI2S_MUL10) || ((__MUL__) == RCC_PLLI2S_MUL11) || ((__MUL__) == RCC_PLLI2S_MUL12) \\\r\n   || ((__MUL__) == RCC_PLLI2S_MUL13) || ((__MUL__) == RCC_PLLI2S_MUL14) || ((__MUL__) == RCC_PLLI2S_MUL16) || ((__MUL__) == RCC_PLLI2S_MUL20))\r\n\r\n#define IS_RCC_HSE_PREDIV2(__DIV__)                                                                                                                                                                    \\\r\n  (((__DIV__) == RCC_HSE_PREDIV2_DIV1) || ((__DIV__) == RCC_HSE_PREDIV2_DIV2) || ((__DIV__) == RCC_HSE_PREDIV2_DIV3) || ((__DIV__) == RCC_HSE_PREDIV2_DIV4) || ((__DIV__) == RCC_HSE_PREDIV2_DIV5)     \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV2_DIV6) || ((__DIV__) == RCC_HSE_PREDIV2_DIV7) || ((__DIV__) == RCC_HSE_PREDIV2_DIV8) || ((__DIV__) == RCC_HSE_PREDIV2_DIV9) || ((__DIV__) == RCC_HSE_PREDIV2_DIV10) \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV2_DIV11) || ((__DIV__) == RCC_HSE_PREDIV2_DIV12) || ((__DIV__) == RCC_HSE_PREDIV2_DIV13) || ((__DIV__) == RCC_HSE_PREDIV2_DIV14)                                     \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV2_DIV15) || ((__DIV__) == RCC_HSE_PREDIV2_DIV16))\r\n\r\n#define IS_RCC_PLL2(__PLL__) (((__PLL__) == RCC_PLL2_NONE) || ((__PLL__) == RCC_PLL2_OFF) || ((__PLL__) == RCC_PLL2_ON))\r\n\r\n#define IS_RCC_PLL2_MUL(__MUL__)                                                                                                                                                                    \\\r\n  (((__MUL__) == RCC_PLL2_MUL8) || ((__MUL__) == RCC_PLL2_MUL9) || ((__MUL__) == RCC_PLL2_MUL10) || ((__MUL__) == RCC_PLL2_MUL11) || ((__MUL__) == RCC_PLL2_MUL12) || ((__MUL__) == RCC_PLL2_MUL13) \\\r\n   || ((__MUL__) == RCC_PLL2_MUL14) || ((__MUL__) == RCC_PLL2_MUL16) || ((__MUL__) == RCC_PLL2_MUL20))\r\n\r\n#define IS_RCC_PERIPHCLOCK(__SELECTION__)                                                                                                                                                   \\\r\n  ((((__SELECTION__)&RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || (((__SELECTION__)&RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || (((__SELECTION__)&RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2) \\\r\n   || (((__SELECTION__)&RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3) || (((__SELECTION__)&RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB))\r\n\r\n#elif defined(STM32F103xE) || defined(STM32F103xG)\r\n\r\n#define IS_RCC_I2S2CLKSOURCE(__SOURCE__) ((__SOURCE__) == RCC_I2S2CLKSOURCE_SYSCLK)\r\n\r\n#define IS_RCC_I2S3CLKSOURCE(__SOURCE__) ((__SOURCE__) == RCC_I2S3CLKSOURCE_SYSCLK)\r\n\r\n#define IS_RCC_PERIPHCLOCK(__SELECTION__)                                                                                                                                                   \\\r\n  ((((__SELECTION__)&RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || (((__SELECTION__)&RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || (((__SELECTION__)&RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2) \\\r\n   || (((__SELECTION__)&RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3) || (((__SELECTION__)&RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB))\r\n\r\n#elif defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB)\r\n\r\n#define IS_RCC_PERIPHCLOCK(__SELECTION__) \\\r\n  ((((__SELECTION__)&RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || (((__SELECTION__)&RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || (((__SELECTION__)&RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB))\r\n\r\n#else\r\n\r\n#define IS_RCC_PERIPHCLOCK(__SELECTION__) ((((__SELECTION__)&RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || (((__SELECTION__)&RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC))\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n\r\n#define IS_RCC_USBPLLCLK_DIV(__USBCLK__) (((__USBCLK__) == RCC_USBCLKSOURCE_PLL) || ((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV1_5))\r\n\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n\r\n/** @defgroup RCCEx_Exported_Types RCCEx Exported Types\r\n * @{\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/**\r\n * @brief  RCC PLL2 configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t PLL2State; /*!< The new state of the PLL2.\r\n                          This parameter can be a value of @ref RCCEx_PLL2_Config */\r\n\r\n  uint32_t PLL2MUL; /*!< PLL2MUL: Multiplication factor for PLL2 VCO input clock\r\n                      This parameter must be a value of @ref RCCEx_PLL2_Multiplication_Factor*/\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t HSEPrediv2Value; /*!<  The Prediv2 factor value.\r\n                                 This parameter can be a value of @ref RCCEx_Prediv2_Factor */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n} RCC_PLL2InitTypeDef;\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @brief  RCC Internal/External Oscillator (HSE, HSI, LSE and LSI) configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t OscillatorType; /*!< The oscillators to be configured.\r\n                                 This parameter can be a value of @ref RCC_Oscillator_Type */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t Prediv1Source; /*!<  The Prediv1 source value.\r\n                                 This parameter can be a value of @ref RCCEx_Prediv1_Source */\r\n#endif                    /* STM32F105xC || STM32F107xC */\r\n\r\n  uint32_t HSEState; /*!< The new state of the HSE.\r\n                          This parameter can be a value of @ref RCC_HSE_Config */\r\n\r\n  uint32_t HSEPredivValue; /*!<  The Prediv1 factor value (named PREDIV1 or PLLXTPRE in RM)\r\n                                 This parameter can be a value of @ref RCCEx_Prediv1_Factor */\r\n\r\n  uint32_t LSEState; /*!<  The new state of the LSE.\r\n                           This parameter can be a value of @ref RCC_LSE_Config */\r\n\r\n  uint32_t HSIState; /*!< The new state of the HSI.\r\n                          This parameter can be a value of @ref RCC_HSI_Config */\r\n\r\n  uint32_t HSICalibrationValue; /*!< The HSI calibration trimming value (default is RCC_HSICALIBRATION_DEFAULT).\r\n                                     This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x1F */\r\n\r\n  uint32_t LSIState; /*!<  The new state of the LSI.\r\n                           This parameter can be a value of @ref RCC_LSI_Config */\r\n\r\n  RCC_PLLInitTypeDef PLL; /*!< PLL structure parameters */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  RCC_PLL2InitTypeDef PLL2; /*!< PLL2 structure parameters */\r\n#endif                      /* STM32F105xC || STM32F107xC */\r\n} RCC_OscInitTypeDef;\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/**\r\n * @brief  RCC PLLI2S configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t PLLI2SMUL; /*!< PLLI2SMUL: Multiplication factor for PLLI2S VCO input clock\r\n                      This parameter must be a value of @ref RCCEx_PLLI2S_Multiplication_Factor*/\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t HSEPrediv2Value; /*!<  The Prediv2 factor value.\r\n                                 This parameter can be a value of @ref RCCEx_Prediv2_Factor */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n} RCC_PLLI2SInitTypeDef;\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @brief  RCC extended clocks structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured.\r\n                                  This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */\r\n\r\n  uint32_t RTCClockSelection; /*!< specifies the RTC clock source.\r\n                               This parameter can be a value of @ref RCC_RTC_Clock_Source */\r\n\r\n  uint32_t AdcClockSelection; /*!< ADC clock source\r\n                               This parameter can be a value of @ref RCCEx_ADC_Prescaler */\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t I2s2ClockSelection; /*!< I2S2 clock source\r\n                               This parameter can be a value of @ref RCCEx_I2S2_Clock_Source */\r\n\r\n  uint32_t I2s3ClockSelection; /*!< I2S3 clock source\r\n                               This parameter can be a value of @ref RCCEx_I2S3_Clock_Source */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  RCC_PLLI2SInitTypeDef PLLI2S; /*!< PLL I2S structure parameters\r\n                                     This parameter will be used only when PLLI2S is selected as Clock Source I2S2 or I2S3 */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t UsbClockSelection; /*!< USB clock source\r\n                               This parameter can be a value of @ref RCCEx_USB_Prescaler */\r\n\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n} RCC_PeriphCLKInitTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup RCCEx_Exported_Constants RCCEx Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup RCCEx_Periph_Clock_Selection Periph Clock Selection\r\n * @{\r\n */\r\n#define RCC_PERIPHCLK_RTC 0x00000001U\r\n#define RCC_PERIPHCLK_ADC 0x00000002U\r\n#if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_PERIPHCLK_I2S2 0x00000004U\r\n#define RCC_PERIPHCLK_I2S3 0x00000008U\r\n#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_PERIPHCLK_USB 0x00000010U\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_ADC_Prescaler ADC Prescaler\r\n * @{\r\n */\r\n#define RCC_ADCPCLK2_DIV2 RCC_CFGR_ADCPRE_DIV2\r\n#define RCC_ADCPCLK2_DIV4 RCC_CFGR_ADCPRE_DIV4\r\n#define RCC_ADCPCLK2_DIV6 RCC_CFGR_ADCPRE_DIV6\r\n#define RCC_ADCPCLK2_DIV8 RCC_CFGR_ADCPRE_DIV8\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_I2S2_Clock_Source I2S2 Clock Source\r\n * @{\r\n */\r\n#define RCC_I2S2CLKSOURCE_SYSCLK 0x00000000U\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_I2S2CLKSOURCE_PLLI2S_VCO RCC_CFGR2_I2S2SRC\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_I2S3_Clock_Source I2S3 Clock Source\r\n * @{\r\n */\r\n#define RCC_I2S3CLKSOURCE_SYSCLK 0x00000000U\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_I2S3CLKSOURCE_PLLI2S_VCO RCC_CFGR2_I2S3SRC\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n\r\n/** @defgroup RCCEx_USB_Prescaler USB Prescaler\r\n * @{\r\n */\r\n#define RCC_USBCLKSOURCE_PLL        RCC_CFGR_USBPRE\r\n#define RCC_USBCLKSOURCE_PLL_DIV1_5 0x00000000U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_USB_Prescaler USB Prescaler\r\n * @{\r\n */\r\n#define RCC_USBCLKSOURCE_PLL_DIV2 RCC_CFGR_OTGFSPRE\r\n#define RCC_USBCLKSOURCE_PLL_DIV3 0x00000000U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_PLLI2S_Multiplication_Factor PLLI2S Multiplication Factor\r\n * @{\r\n */\r\n\r\n#define RCC_PLLI2S_MUL8  RCC_CFGR2_PLL3MUL8  /*!< PLLI2S input clock * 8 */\r\n#define RCC_PLLI2S_MUL9  RCC_CFGR2_PLL3MUL9  /*!< PLLI2S input clock * 9 */\r\n#define RCC_PLLI2S_MUL10 RCC_CFGR2_PLL3MUL10 /*!< PLLI2S input clock * 10 */\r\n#define RCC_PLLI2S_MUL11 RCC_CFGR2_PLL3MUL11 /*!< PLLI2S input clock * 11 */\r\n#define RCC_PLLI2S_MUL12 RCC_CFGR2_PLL3MUL12 /*!< PLLI2S input clock * 12 */\r\n#define RCC_PLLI2S_MUL13 RCC_CFGR2_PLL3MUL13 /*!< PLLI2S input clock * 13 */\r\n#define RCC_PLLI2S_MUL14 RCC_CFGR2_PLL3MUL14 /*!< PLLI2S input clock * 14 */\r\n#define RCC_PLLI2S_MUL16 RCC_CFGR2_PLL3MUL16 /*!< PLLI2S input clock * 16 */\r\n#define RCC_PLLI2S_MUL20 RCC_CFGR2_PLL3MUL20 /*!< PLLI2S input clock * 20 */\r\n\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_Prediv1_Source Prediv1 Source\r\n * @{\r\n */\r\n\r\n#define RCC_PREDIV1_SOURCE_HSE  RCC_CFGR2_PREDIV1SRC_HSE\r\n#define RCC_PREDIV1_SOURCE_PLL2 RCC_CFGR2_PREDIV1SRC_PLL2\r\n\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/** @defgroup RCCEx_Prediv1_Factor HSE Prediv1 Factor\r\n * @{\r\n */\r\n\r\n#define RCC_HSE_PREDIV_DIV1 0x00000000U\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB) || defined(STM32F100xE)\r\n#define RCC_HSE_PREDIV_DIV2  RCC_CFGR2_PREDIV1_DIV2\r\n#define RCC_HSE_PREDIV_DIV3  RCC_CFGR2_PREDIV1_DIV3\r\n#define RCC_HSE_PREDIV_DIV4  RCC_CFGR2_PREDIV1_DIV4\r\n#define RCC_HSE_PREDIV_DIV5  RCC_CFGR2_PREDIV1_DIV5\r\n#define RCC_HSE_PREDIV_DIV6  RCC_CFGR2_PREDIV1_DIV6\r\n#define RCC_HSE_PREDIV_DIV7  RCC_CFGR2_PREDIV1_DIV7\r\n#define RCC_HSE_PREDIV_DIV8  RCC_CFGR2_PREDIV1_DIV8\r\n#define RCC_HSE_PREDIV_DIV9  RCC_CFGR2_PREDIV1_DIV9\r\n#define RCC_HSE_PREDIV_DIV10 RCC_CFGR2_PREDIV1_DIV10\r\n#define RCC_HSE_PREDIV_DIV11 RCC_CFGR2_PREDIV1_DIV11\r\n#define RCC_HSE_PREDIV_DIV12 RCC_CFGR2_PREDIV1_DIV12\r\n#define RCC_HSE_PREDIV_DIV13 RCC_CFGR2_PREDIV1_DIV13\r\n#define RCC_HSE_PREDIV_DIV14 RCC_CFGR2_PREDIV1_DIV14\r\n#define RCC_HSE_PREDIV_DIV15 RCC_CFGR2_PREDIV1_DIV15\r\n#define RCC_HSE_PREDIV_DIV16 RCC_CFGR2_PREDIV1_DIV16\r\n#else\r\n#define RCC_HSE_PREDIV_DIV2 RCC_CFGR_PLLXTPRE\r\n#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_Prediv2_Factor HSE Prediv2 Factor\r\n * @{\r\n */\r\n\r\n#define RCC_HSE_PREDIV2_DIV1  RCC_CFGR2_PREDIV2_DIV1  /*!< PREDIV2 input clock not divided */\r\n#define RCC_HSE_PREDIV2_DIV2  RCC_CFGR2_PREDIV2_DIV2  /*!< PREDIV2 input clock divided by 2 */\r\n#define RCC_HSE_PREDIV2_DIV3  RCC_CFGR2_PREDIV2_DIV3  /*!< PREDIV2 input clock divided by 3 */\r\n#define RCC_HSE_PREDIV2_DIV4  RCC_CFGR2_PREDIV2_DIV4  /*!< PREDIV2 input clock divided by 4 */\r\n#define RCC_HSE_PREDIV2_DIV5  RCC_CFGR2_PREDIV2_DIV5  /*!< PREDIV2 input clock divided by 5 */\r\n#define RCC_HSE_PREDIV2_DIV6  RCC_CFGR2_PREDIV2_DIV6  /*!< PREDIV2 input clock divided by 6 */\r\n#define RCC_HSE_PREDIV2_DIV7  RCC_CFGR2_PREDIV2_DIV7  /*!< PREDIV2 input clock divided by 7 */\r\n#define RCC_HSE_PREDIV2_DIV8  RCC_CFGR2_PREDIV2_DIV8  /*!< PREDIV2 input clock divided by 8 */\r\n#define RCC_HSE_PREDIV2_DIV9  RCC_CFGR2_PREDIV2_DIV9  /*!< PREDIV2 input clock divided by 9 */\r\n#define RCC_HSE_PREDIV2_DIV10 RCC_CFGR2_PREDIV2_DIV10 /*!< PREDIV2 input clock divided by 10 */\r\n#define RCC_HSE_PREDIV2_DIV11 RCC_CFGR2_PREDIV2_DIV11 /*!< PREDIV2 input clock divided by 11 */\r\n#define RCC_HSE_PREDIV2_DIV12 RCC_CFGR2_PREDIV2_DIV12 /*!< PREDIV2 input clock divided by 12 */\r\n#define RCC_HSE_PREDIV2_DIV13 RCC_CFGR2_PREDIV2_DIV13 /*!< PREDIV2 input clock divided by 13 */\r\n#define RCC_HSE_PREDIV2_DIV14 RCC_CFGR2_PREDIV2_DIV14 /*!< PREDIV2 input clock divided by 14 */\r\n#define RCC_HSE_PREDIV2_DIV15 RCC_CFGR2_PREDIV2_DIV15 /*!< PREDIV2 input clock divided by 15 */\r\n#define RCC_HSE_PREDIV2_DIV16 RCC_CFGR2_PREDIV2_DIV16 /*!< PREDIV2 input clock divided by 16 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_PLL2_Config PLL Config\r\n * @{\r\n */\r\n#define RCC_PLL2_NONE 0x00000000U\r\n#define RCC_PLL2_OFF  0x00000001U\r\n#define RCC_PLL2_ON   0x00000002U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_PLL2_Multiplication_Factor PLL2 Multiplication Factor\r\n * @{\r\n */\r\n\r\n#define RCC_PLL2_MUL8  RCC_CFGR2_PLL2MUL8  /*!< PLL2 input clock * 8 */\r\n#define RCC_PLL2_MUL9  RCC_CFGR2_PLL2MUL9  /*!< PLL2 input clock * 9 */\r\n#define RCC_PLL2_MUL10 RCC_CFGR2_PLL2MUL10 /*!< PLL2 input clock * 10 */\r\n#define RCC_PLL2_MUL11 RCC_CFGR2_PLL2MUL11 /*!< PLL2 input clock * 11 */\r\n#define RCC_PLL2_MUL12 RCC_CFGR2_PLL2MUL12 /*!< PLL2 input clock * 12 */\r\n#define RCC_PLL2_MUL13 RCC_CFGR2_PLL2MUL13 /*!< PLL2 input clock * 13 */\r\n#define RCC_PLL2_MUL14 RCC_CFGR2_PLL2MUL14 /*!< PLL2 input clock * 14 */\r\n#define RCC_PLL2_MUL16 RCC_CFGR2_PLL2MUL16 /*!< PLL2 input clock * 16 */\r\n#define RCC_PLL2_MUL20 RCC_CFGR2_PLL2MUL20 /*!< PLL2 input clock * 20 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/** @defgroup RCCEx_PLL_Multiplication_Factor PLL Multiplication Factor\r\n * @{\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#else\r\n#define RCC_PLL_MUL2 RCC_CFGR_PLLMULL2\r\n#define RCC_PLL_MUL3 RCC_CFGR_PLLMULL3\r\n#endif /* STM32F105xC || STM32F107xC */\r\n#define RCC_PLL_MUL4 RCC_CFGR_PLLMULL4\r\n#define RCC_PLL_MUL5 RCC_CFGR_PLLMULL5\r\n#define RCC_PLL_MUL6 RCC_CFGR_PLLMULL6\r\n#define RCC_PLL_MUL7 RCC_CFGR_PLLMULL7\r\n#define RCC_PLL_MUL8 RCC_CFGR_PLLMULL8\r\n#define RCC_PLL_MUL9 RCC_CFGR_PLLMULL9\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_PLL_MUL6_5 RCC_CFGR_PLLMULL6_5\r\n#else\r\n#define RCC_PLL_MUL10 RCC_CFGR_PLLMULL10\r\n#define RCC_PLL_MUL11 RCC_CFGR_PLLMULL11\r\n#define RCC_PLL_MUL12 RCC_CFGR_PLLMULL12\r\n#define RCC_PLL_MUL13 RCC_CFGR_PLLMULL13\r\n#define RCC_PLL_MUL14 RCC_CFGR_PLLMULL14\r\n#define RCC_PLL_MUL15 RCC_CFGR_PLLMULL15\r\n#define RCC_PLL_MUL16 RCC_CFGR_PLLMULL16\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_MCO1_Clock_Source MCO1 Clock Source\r\n * @{\r\n */\r\n#define RCC_MCO1SOURCE_NOCLOCK ((uint32_t)RCC_CFGR_MCO_NOCLOCK)\r\n#define RCC_MCO1SOURCE_SYSCLK  ((uint32_t)RCC_CFGR_MCO_SYSCLK)\r\n#define RCC_MCO1SOURCE_HSI     ((uint32_t)RCC_CFGR_MCO_HSI)\r\n#define RCC_MCO1SOURCE_HSE     ((uint32_t)RCC_CFGR_MCO_HSE)\r\n#define RCC_MCO1SOURCE_PLLCLK  ((uint32_t)RCC_CFGR_MCO_PLLCLK_DIV2)\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_MCO1SOURCE_PLL2CLK      ((uint32_t)RCC_CFGR_MCO_PLL2CLK)\r\n#define RCC_MCO1SOURCE_PLL3CLK_DIV2 ((uint32_t)RCC_CFGR_MCO_PLL3CLK_DIV2)\r\n#define RCC_MCO1SOURCE_EXT_HSE      ((uint32_t)RCC_CFGR_MCO_EXT_HSE)\r\n#define RCC_MCO1SOURCE_PLL3CLK      ((uint32_t)RCC_CFGR_MCO_PLL3CLK)\r\n#endif /* STM32F105xC || STM32F107xC*/\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_Interrupt RCCEx Interrupt\r\n * @{\r\n */\r\n#define RCC_IT_PLL2RDY   ((uint8_t)RCC_CIR_PLL2RDYF)\r\n#define RCC_IT_PLLI2SRDY ((uint8_t)RCC_CIR_PLL3RDYF)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_Flag RCCEx Flag\r\n *        Elements values convention: 0XXYYYYYb\r\n *           - YYYYY  : Flag position in the register\r\n *           - XX  : Register index\r\n *                 - 01: CR register\r\n * @{\r\n */\r\n/* Flags in the CR register */\r\n#define RCC_FLAG_PLL2RDY   ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_PLL2RDY_Pos))\r\n#define RCC_FLAG_PLLI2SRDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_PLL3RDY_Pos))\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros\r\n * @{\r\n */\r\n\r\n/** @defgroup RCCEx_Peripheral_Clock_Enable_Disable Peripheral Clock Enable Disable\r\n * @brief  Enable or disable the AHB1 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xE)\r\n#define __HAL_RCC_DMA2_CLK_ENABLE()                    \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN); \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_DMA2_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_DMA2EN))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F105xC || STM32F107xC || STM32F100xE */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F100xE)\r\n#define __HAL_RCC_FSMC_CLK_ENABLE()                    \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN); \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_FSMC_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_FSMCEN))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F100xE */\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_SDIO_CLK_ENABLE()                    \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_SDIOEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_SDIOEN); \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_SDIOEN))\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE()               \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_OTGFSEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_OTGFSEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_OTGFSEN))\r\n#endif /* STM32F105xC || STM32F107xC*/\r\n\r\n#if defined(STM32F107xC)\r\n#define __HAL_RCC_ETHMAC_CLK_ENABLE()                    \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ETHMACTX_CLK_ENABLE()                    \\\r\n  do {                                                     \\\r\n    __IO uint32_t tmpreg;                                  \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACTXEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */     \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACTXEN); \\\r\n    UNUSED(tmpreg);                                        \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ETHMACRX_CLK_ENABLE()                    \\\r\n  do {                                                     \\\r\n    __IO uint32_t tmpreg;                                  \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACRXEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */     \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACRXEN); \\\r\n    UNUSED(tmpreg);                                        \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ETHMAC_CLK_DISABLE()   (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACEN))\r\n#define __HAL_RCC_ETHMACTX_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACTXEN))\r\n#define __HAL_RCC_ETHMACRX_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACRXEN))\r\n\r\n/**\r\n * @brief  Enable ETHERNET clock.\r\n */\r\n#define __HAL_RCC_ETH_CLK_ENABLE()   \\\r\n  do {                               \\\r\n    __HAL_RCC_ETHMAC_CLK_ENABLE();   \\\r\n    __HAL_RCC_ETHMACTX_CLK_ENABLE(); \\\r\n    __HAL_RCC_ETHMACRX_CLK_ENABLE(); \\\r\n  } while (0U)\r\n/**\r\n * @brief  Disable ETHERNET clock.\r\n */\r\n#define __HAL_RCC_ETH_CLK_DISABLE()   \\\r\n  do {                                \\\r\n    __HAL_RCC_ETHMACTX_CLK_DISABLE(); \\\r\n    __HAL_RCC_ETHMACRX_CLK_DISABLE(); \\\r\n    __HAL_RCC_ETHMAC_CLK_DISABLE();   \\\r\n  } while (0U)\r\n\r\n#endif /* STM32F107xC*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the AHB1 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xE)\r\n#define __HAL_RCC_DMA2_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) != RESET)\r\n#define __HAL_RCC_DMA2_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) == RESET)\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F105xC || STM32F107xC || STM32F100xE */\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F100xE)\r\n#define __HAL_RCC_FSMC_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_FSMCEN)) != RESET)\r\n#define __HAL_RCC_FSMC_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_FSMCEN)) == RESET)\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F100xE */\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_SDIO_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_SDIOEN)) != RESET)\r\n#define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_SDIOEN)) == RESET)\r\n#endif /* STM32F103xE || STM32F103xG */\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_OTGFSEN)) != RESET)\r\n#define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_OTGFSEN)) == RESET)\r\n#endif /* STM32F105xC || STM32F107xC*/\r\n#if defined(STM32F107xC)\r\n#define __HAL_RCC_ETHMAC_IS_CLK_ENABLED()    ((RCC->AHBENR & (RCC_AHBENR_ETHMACEN)) != RESET)\r\n#define __HAL_RCC_ETHMAC_IS_CLK_DISABLED()   ((RCC->AHBENR & (RCC_AHBENR_ETHMACEN)) == RESET)\r\n#define __HAL_RCC_ETHMACTX_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_ETHMACTXEN)) != RESET)\r\n#define __HAL_RCC_ETHMACTX_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACTXEN)) == RESET)\r\n#define __HAL_RCC_ETHMACRX_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_ETHMACRXEN)) != RESET)\r\n#define __HAL_RCC_ETHMACRX_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACRXEN)) == RESET)\r\n#endif /* STM32F107xC*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Clock Enable Disable\r\n * @brief  Enable or disable the Low Speed APB (APB1) peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_CAN1_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_CAN1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN1EN))\r\n#endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB) || defined(STM32F103xB) || defined(STM32F103xE) \\\r\n    || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM4_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SPI2_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_USART3_CLK_ENABLE()                      \\\r\n  do {                                                     \\\r\n    __IO uint32_t tmpreg;                                  \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */     \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN); \\\r\n    UNUSED(tmpreg);                                        \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_I2C2_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM4_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN))\r\n#define __HAL_RCC_SPI2_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI2EN))\r\n#define __HAL_RCC_USART3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN))\r\n#define __HAL_RCC_I2C2_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C2EN))\r\n#endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_USB_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_USB_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USBEN))\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM5_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM6_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM7_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SPI3_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_UART4_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_UART5_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_DAC_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM5_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN))\r\n#define __HAL_RCC_TIM6_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN))\r\n#define __HAL_RCC_TIM7_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN))\r\n#define __HAL_RCC_SPI3_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN))\r\n#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN))\r\n#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN))\r\n#define __HAL_RCC_DAC_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM6_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM7_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_DAC_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_CEC_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN))\r\n#define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN))\r\n#define __HAL_RCC_DAC_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN))\r\n#define __HAL_RCC_CEC_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_CECEN))\r\n#endif /* STM32F100xB || STM32F100xE */\r\n\r\n#ifdef STM32F100xE\r\n#define __HAL_RCC_TIM5_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM12_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM13_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM14_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SPI3_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_UART4_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_UART5_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM5_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN))\r\n#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN))\r\n#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN))\r\n#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN))\r\n#define __HAL_RCC_SPI3_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN))\r\n#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN))\r\n#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN))\r\n#endif /* STM32F100xE */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_CAN2_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_CAN2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN2EN))\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM12_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM13_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM14_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN))\r\n#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN))\r\n#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN))\r\n#endif /* STM32F101xG || STM32F103xG*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the APB1 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_CAN1_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) != RESET)\r\n#define __HAL_RCC_CAN1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) == RESET)\r\n#endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB) || defined(STM32F103xB) || defined(STM32F103xE) \\\r\n    || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM4_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET)\r\n#define __HAL_RCC_TIM4_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET)\r\n#define __HAL_RCC_SPI2_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) != RESET)\r\n#define __HAL_RCC_SPI2_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) == RESET)\r\n#define __HAL_RCC_USART3_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != RESET)\r\n#define __HAL_RCC_USART3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == RESET)\r\n#define __HAL_RCC_I2C2_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) != RESET)\r\n#define __HAL_RCC_I2C2_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) == RESET)\r\n#endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_USB_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) != RESET)\r\n#define __HAL_RCC_USB_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) == RESET)\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM5_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) != RESET)\r\n#define __HAL_RCC_TIM5_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) == RESET)\r\n#define __HAL_RCC_TIM6_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET)\r\n#define __HAL_RCC_TIM6_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET)\r\n#define __HAL_RCC_TIM7_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET)\r\n#define __HAL_RCC_TIM7_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET)\r\n#define __HAL_RCC_SPI3_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET)\r\n#define __HAL_RCC_SPI3_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET)\r\n#define __HAL_RCC_UART4_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET)\r\n#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET)\r\n#define __HAL_RCC_UART5_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET)\r\n#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET)\r\n#define __HAL_RCC_DAC_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET)\r\n#define __HAL_RCC_DAC_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET)\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM6_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET)\r\n#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET)\r\n#define __HAL_RCC_TIM7_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET)\r\n#define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET)\r\n#define __HAL_RCC_DAC_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET)\r\n#define __HAL_RCC_DAC_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET)\r\n#define __HAL_RCC_CEC_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) != RESET)\r\n#define __HAL_RCC_CEC_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) == RESET)\r\n#endif /* STM32F100xB || STM32F100xE */\r\n#ifdef STM32F100xE\r\n#define __HAL_RCC_TIM5_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) != RESET)\r\n#define __HAL_RCC_TIM5_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) == RESET)\r\n#define __HAL_RCC_TIM12_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET)\r\n#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET)\r\n#define __HAL_RCC_TIM13_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET)\r\n#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET)\r\n#define __HAL_RCC_TIM14_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET)\r\n#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET)\r\n#define __HAL_RCC_SPI3_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET)\r\n#define __HAL_RCC_SPI3_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET)\r\n#define __HAL_RCC_UART4_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET)\r\n#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET)\r\n#define __HAL_RCC_UART5_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET)\r\n#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET)\r\n#define __HAL_RCC_CAN2_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) != RESET)\r\n#define __HAL_RCC_CAN2_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) == RESET)\r\n#endif /* STM32F100xE */\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM12_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET)\r\n#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET)\r\n#endif /* STM32F105xC || STM32F107xC */\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM13_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET)\r\n#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET)\r\n#define __HAL_RCC_TIM14_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET)\r\n#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET)\r\n#endif /* STM32F101xG || STM32F103xG*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Clock Enable Disable\r\n * @brief  Enable or disable the High Speed APB (APB2) peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_ADC2_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ADC2_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC2EN))\r\n#endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM15_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM15EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM15EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM16_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM16EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM16EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM17_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM17EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM17EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM15_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM15EN))\r\n#define __HAL_RCC_TIM16_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM16EN))\r\n#define __HAL_RCC_TIM17_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM17EN))\r\n#endif /* STM32F100xB || STM32F100xE */\r\n\r\n#if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) \\\r\n    || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_GPIOE_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPEEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPEEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPEEN))\r\n#endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_GPIOF_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOG_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPFEN))\r\n#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPGEN))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM8_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ADC3_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM8_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM8EN))\r\n#define __HAL_RCC_ADC3_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC3EN))\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F100xE)\r\n#define __HAL_RCC_GPIOF_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOG_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPFEN))\r\n#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPGEN))\r\n#endif /* STM32F100xE */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM9_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM10_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM11_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM9_CLK_DISABLE()  (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM9EN))\r\n#define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN))\r\n#define __HAL_RCC_TIM11_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM11EN))\r\n#endif /* STM32F101xG || STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the APB2 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_ADC2_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) != RESET)\r\n#define __HAL_RCC_ADC2_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) == RESET)\r\n#endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM15_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM15EN)) != RESET)\r\n#define __HAL_RCC_TIM15_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM15EN)) == RESET)\r\n#define __HAL_RCC_TIM16_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM16EN)) != RESET)\r\n#define __HAL_RCC_TIM16_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM16EN)) == RESET)\r\n#define __HAL_RCC_TIM17_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM17EN)) != RESET)\r\n#define __HAL_RCC_TIM17_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM17EN)) == RESET)\r\n#endif /* STM32F100xB || STM32F100xE */\r\n#if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) \\\r\n    || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_GPIOE_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPEEN)) != RESET)\r\n#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPEEN)) == RESET)\r\n#endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_GPIOF_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) != RESET)\r\n#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) == RESET)\r\n#define __HAL_RCC_GPIOG_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) != RESET)\r\n#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) == RESET)\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM8_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) != RESET)\r\n#define __HAL_RCC_TIM8_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) == RESET)\r\n#define __HAL_RCC_ADC3_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) != RESET)\r\n#define __HAL_RCC_ADC3_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) == RESET)\r\n#endif /* STM32F103xE || STM32F103xG */\r\n#if defined(STM32F100xE)\r\n#define __HAL_RCC_GPIOF_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) != RESET)\r\n#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) == RESET)\r\n#define __HAL_RCC_GPIOG_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) != RESET)\r\n#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) == RESET)\r\n#endif /* STM32F100xE */\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM9_IS_CLK_ENABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) != RESET)\r\n#define __HAL_RCC_TIM9_IS_CLK_DISABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) == RESET)\r\n#define __HAL_RCC_TIM10_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != RESET)\r\n#define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == RESET)\r\n#define __HAL_RCC_TIM11_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) != RESET)\r\n#define __HAL_RCC_TIM11_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) == RESET)\r\n#endif /* STM32F101xG || STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_Peripheral_Clock_Force_Release Peripheral Clock Force Release\r\n * @brief  Force or release AHB peripheral reset.\r\n * @{\r\n */\r\n#define __HAL_RCC_AHB_FORCE_RESET()        (RCC->AHBRSTR = 0xFFFFFFFFU)\r\n#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_OTGFSRST))\r\n#if defined(STM32F107xC)\r\n#define __HAL_RCC_ETHMAC_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_ETHMACRST))\r\n#endif /* STM32F107xC */\r\n\r\n#define __HAL_RCC_AHB_RELEASE_RESET()        (RCC->AHBRSTR = 0x00)\r\n#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_OTGFSRST))\r\n#if defined(STM32F107xC)\r\n#define __HAL_RCC_ETHMAC_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_ETHMACRST))\r\n#endif /* STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset\r\n * @brief  Force or release APB1 peripheral reset.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_CAN1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN1RST))\r\n\r\n#define __HAL_RCC_CAN1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN1RST))\r\n#endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB) || defined(STM32F103xB) || defined(STM32F103xE) \\\r\n    || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM4_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST))\r\n#define __HAL_RCC_SPI2_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI2RST))\r\n#define __HAL_RCC_USART3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST))\r\n#define __HAL_RCC_I2C2_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C2RST))\r\n\r\n#define __HAL_RCC_TIM4_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST))\r\n#define __HAL_RCC_SPI2_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI2RST))\r\n#define __HAL_RCC_USART3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST))\r\n#define __HAL_RCC_I2C2_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C2RST))\r\n#endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_USB_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_USBRST))\r\n#define __HAL_RCC_USB_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USBRST))\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM5_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST))\r\n#define __HAL_RCC_TIM6_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST))\r\n#define __HAL_RCC_TIM7_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST))\r\n#define __HAL_RCC_SPI3_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST))\r\n#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST))\r\n#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST))\r\n#define __HAL_RCC_DAC_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST))\r\n\r\n#define __HAL_RCC_TIM5_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST))\r\n#define __HAL_RCC_TIM6_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST))\r\n#define __HAL_RCC_TIM7_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST))\r\n#define __HAL_RCC_SPI3_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST))\r\n#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST))\r\n#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST))\r\n#define __HAL_RCC_DAC_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST))\r\n#define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST))\r\n#define __HAL_RCC_DAC_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST))\r\n#define __HAL_RCC_CEC_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_CECRST))\r\n\r\n#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST))\r\n#define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST))\r\n#define __HAL_RCC_DAC_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST))\r\n#define __HAL_RCC_CEC_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CECRST))\r\n#endif /* STM32F100xB || STM32F100xE */\r\n\r\n#if defined(STM32F100xE)\r\n#define __HAL_RCC_TIM5_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST))\r\n#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST))\r\n#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST))\r\n#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST))\r\n#define __HAL_RCC_SPI3_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST))\r\n#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST))\r\n#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST))\r\n\r\n#define __HAL_RCC_TIM5_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST))\r\n#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST))\r\n#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST))\r\n#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST))\r\n#define __HAL_RCC_SPI3_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST))\r\n#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST))\r\n#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST))\r\n#endif /* STM32F100xE */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_CAN2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN2RST))\r\n\r\n#define __HAL_RCC_CAN2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN2RST))\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST))\r\n#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST))\r\n#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST))\r\n\r\n#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST))\r\n#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST))\r\n#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST))\r\n#endif /* STM32F101xG || STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset\r\n * @brief  Force or release APB2 peripheral reset.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_ADC2_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC2RST))\r\n\r\n#define __HAL_RCC_ADC2_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC2RST))\r\n#endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM15_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM15RST))\r\n#define __HAL_RCC_TIM16_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM16RST))\r\n#define __HAL_RCC_TIM17_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM17RST))\r\n\r\n#define __HAL_RCC_TIM15_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM15RST))\r\n#define __HAL_RCC_TIM16_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM16RST))\r\n#define __HAL_RCC_TIM17_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM17RST))\r\n#endif /* STM32F100xB || STM32F100xE */\r\n\r\n#if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) \\\r\n    || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPERST))\r\n\r\n#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPERST))\r\n#endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPFRST))\r\n#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPGRST))\r\n\r\n#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPFRST))\r\n#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPGRST))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM8_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM8RST))\r\n#define __HAL_RCC_ADC3_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC3RST))\r\n\r\n#define __HAL_RCC_TIM8_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM8RST))\r\n#define __HAL_RCC_ADC3_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC3RST))\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F100xE)\r\n#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPFRST))\r\n#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPGRST))\r\n\r\n#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPFRST))\r\n#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPGRST))\r\n#endif /* STM32F100xE */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM9_FORCE_RESET()  (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM9RST))\r\n#define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST))\r\n#define __HAL_RCC_TIM11_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM11RST))\r\n\r\n#define __HAL_RCC_TIM9_RELEASE_RESET()  (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM9RST))\r\n#define __HAL_RCC_TIM10_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST))\r\n#define __HAL_RCC_TIM11_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM11RST))\r\n#endif /* STM32F101xG || STM32F103xG*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_HSE_Configuration HSE Configuration\r\n * @{\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB) || defined(STM32F100xE)\r\n/**\r\n * @brief  Macro to configure the External High Speed oscillator (HSE) Predivision factor for PLL.\r\n * @note   Predivision factor can not be changed if PLL is used as system clock\r\n *         In this case, you have to select another source of the system clock, disable the PLL and\r\n *         then change the HSE predivision factor.\r\n * @param  __HSE_PREDIV_VALUE__ specifies the division value applied to HSE.\r\n *         This parameter must be a number between RCC_HSE_PREDIV_DIV1 and RCC_HSE_PREDIV_DIV16.\r\n */\r\n#define __HAL_RCC_HSE_PREDIV_CONFIG(__HSE_PREDIV_VALUE__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV1, (uint32_t)(__HSE_PREDIV_VALUE__))\r\n#else\r\n/**\r\n * @brief  Macro to configure the External High Speed oscillator (HSE) Predivision factor for PLL.\r\n * @note   Predivision factor can not be changed if PLL is used as system clock\r\n *         In this case, you have to select another source of the system clock, disable the PLL and\r\n *         then change the HSE predivision factor.\r\n * @param  __HSE_PREDIV_VALUE__ specifies the division value applied to HSE.\r\n *         This parameter must be a number between RCC_HSE_PREDIV_DIV1 and RCC_HSE_PREDIV_DIV2.\r\n */\r\n#define __HAL_RCC_HSE_PREDIV_CONFIG(__HSE_PREDIV_VALUE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLXTPRE, (uint32_t)(__HSE_PREDIV_VALUE__))\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB) || defined(STM32F100xE)\r\n/**\r\n * @brief  Macro to get prediv1 factor for PLL.\r\n */\r\n#define __HAL_RCC_HSE_GET_PREDIV() READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1)\r\n\r\n#else\r\n/**\r\n * @brief  Macro to get prediv1 factor for PLL.\r\n */\r\n#define __HAL_RCC_HSE_GET_PREDIV() READ_BIT(RCC->CFGR, RCC_CFGR_PLLXTPRE)\r\n\r\n#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_PLLI2S_Configuration PLLI2S Configuration\r\n * @{\r\n */\r\n\r\n/** @brief Macros to enable the main PLLI2S.\r\n * @note   After enabling the main PLLI2S, the application software should wait on\r\n *         PLLI2SRDY flag to be set indicating that PLLI2S clock is stable and can\r\n *         be used as system clock source.\r\n * @note   The main PLLI2S is disabled by hardware when entering STOP and STANDBY modes.\r\n */\r\n#define __HAL_RCC_PLLI2S_ENABLE() (*(__IO uint32_t *)RCC_CR_PLLI2SON_BB = ENABLE)\r\n\r\n/** @brief Macros to disable the main PLLI2S.\r\n * @note   The main PLLI2S is disabled by hardware when entering STOP and STANDBY modes.\r\n */\r\n#define __HAL_RCC_PLLI2S_DISABLE() (*(__IO uint32_t *)RCC_CR_PLLI2SON_BB = DISABLE)\r\n\r\n/** @brief macros to configure the main PLLI2S multiplication factor.\r\n * @note   This function must be used only when the main PLLI2S is disabled.\r\n *\r\n * @param  __PLLI2SMUL__ specifies the multiplication factor for PLLI2S VCO output clock\r\n *          This parameter can be one of the following values:\r\n *             @arg @ref RCC_PLLI2S_MUL8 PLLI2SVCO = PLLI2S clock entry x 8\r\n *             @arg @ref RCC_PLLI2S_MUL9 PLLI2SVCO = PLLI2S clock entry x 9\r\n *             @arg @ref RCC_PLLI2S_MUL10 PLLI2SVCO = PLLI2S clock entry x 10\r\n *             @arg @ref RCC_PLLI2S_MUL11 PLLI2SVCO = PLLI2S clock entry x 11\r\n *             @arg @ref RCC_PLLI2S_MUL12 PLLI2SVCO = PLLI2S clock entry x 12\r\n *             @arg @ref RCC_PLLI2S_MUL13 PLLI2SVCO = PLLI2S clock entry x 13\r\n *             @arg @ref RCC_PLLI2S_MUL14 PLLI2SVCO = PLLI2S clock entry x 14\r\n *             @arg @ref RCC_PLLI2S_MUL16 PLLI2SVCO = PLLI2S clock entry x 16\r\n *             @arg @ref RCC_PLLI2S_MUL20 PLLI2SVCO = PLLI2S clock entry x 20\r\n *\r\n */\r\n#define __HAL_RCC_PLLI2S_CONFIG(__PLLI2SMUL__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PLL3MUL, (__PLLI2SMUL__))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/** @defgroup RCCEx_Peripheral_Configuration Peripheral Configuration\r\n * @brief  Macros to configure clock source of different peripherals.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/** @brief  Macro to configure the USB clock.\r\n * @param  __USBCLKSOURCE__ specifies the USB clock source.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL PLL clock divided by 1 selected as USB clock\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV1_5 PLL clock divided by 1.5 selected as USB clock\r\n */\r\n#define __HAL_RCC_USB_CONFIG(__USBCLKSOURCE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_USBPRE, (uint32_t)(__USBCLKSOURCE__))\r\n\r\n/** @brief  Macro to get the USB clock (USBCLK).\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL PLL clock divided by 1 selected as USB clock\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV1_5 PLL clock divided by 1.5 selected as USB clock\r\n */\r\n#define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_USBPRE)))\r\n\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n\r\n/** @brief  Macro to configure the USB OTSclock.\r\n * @param  __USBCLKSOURCE__ specifies the USB clock source.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV2 PLL clock divided by 2 selected as USB OTG FS clock\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV3 PLL clock divided by 3 selected as USB OTG FS clock\r\n */\r\n#define __HAL_RCC_USB_CONFIG(__USBCLKSOURCE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_OTGFSPRE, (uint32_t)(__USBCLKSOURCE__))\r\n\r\n/** @brief  Macro to get the USB clock (USBCLK).\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV2 PLL clock divided by 2 selected as USB OTG FS clock\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV3 PLL clock divided by 3 selected as USB OTG FS clock\r\n */\r\n#define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_OTGFSPRE)))\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/** @brief  Macro to configure the ADCx clock (x=1 to 3 depending on devices).\r\n * @param  __ADCCLKSOURCE__ specifies the ADC clock source.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_ADCPCLK2_DIV2 PCLK2 clock divided by 2 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV4 PCLK2 clock divided by 4 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV6 PCLK2 clock divided by 6 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV8 PCLK2 clock divided by 8 selected as ADC clock\r\n */\r\n#define __HAL_RCC_ADC_CONFIG(__ADCCLKSOURCE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_ADCPRE, (uint32_t)(__ADCCLKSOURCE__))\r\n\r\n/** @brief  Macro to get the ADC clock (ADCxCLK, x=1 to 3 depending on devices).\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_ADCPCLK2_DIV2 PCLK2 clock divided by 2 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV4 PCLK2 clock divided by 4 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV6 PCLK2 clock divided by 6 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV8 PCLK2 clock divided by 8 selected as ADC clock\r\n */\r\n#define __HAL_RCC_GET_ADC_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_ADCPRE)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n\r\n/** @addtogroup RCCEx_HSE_Configuration\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Macro to configure the PLL2 & PLLI2S Predivision factor.\r\n * @note   Predivision factor can not be changed if PLL2 is used indirectly as system clock\r\n *         In this case, you have to select another source of the system clock, disable the PLL2 and PLLI2S and\r\n *         then change the PREDIV2 factor.\r\n * @param  __HSE_PREDIV2_VALUE__ specifies the PREDIV2 value applied to PLL2 & PLLI2S.\r\n *         This parameter must be a number between RCC_HSE_PREDIV2_DIV1 and RCC_HSE_PREDIV2_DIV16.\r\n */\r\n#define __HAL_RCC_HSE_PREDIV2_CONFIG(__HSE_PREDIV2_VALUE__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV2, (uint32_t)(__HSE_PREDIV2_VALUE__))\r\n\r\n/**\r\n * @brief  Macro to get prediv2 factor for PLL2 & PLL3.\r\n */\r\n#define __HAL_RCC_HSE_GET_PREDIV2() READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV2)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCCEx_PLLI2S_Configuration\r\n * @{\r\n */\r\n\r\n/** @brief Macros to enable the main PLL2.\r\n * @note   After enabling the main PLL2, the application software should wait on\r\n *         PLL2RDY flag to be set indicating that PLL2 clock is stable and can\r\n *         be used as system clock source.\r\n * @note   The main PLL2 is disabled by hardware when entering STOP and STANDBY modes.\r\n */\r\n#define __HAL_RCC_PLL2_ENABLE() (*(__IO uint32_t *)RCC_CR_PLL2ON_BB = ENABLE)\r\n\r\n/** @brief Macros to disable the main PLL2.\r\n * @note   The main PLL2 can not be disabled if it is used indirectly as system clock source\r\n * @note   The main PLL2 is disabled by hardware when entering STOP and STANDBY modes.\r\n */\r\n#define __HAL_RCC_PLL2_DISABLE() (*(__IO uint32_t *)RCC_CR_PLL2ON_BB = DISABLE)\r\n\r\n/** @brief macros to configure the main PLL2 multiplication factor.\r\n * @note   This function must be used only when the main PLL2 is disabled.\r\n *\r\n * @param  __PLL2MUL__ specifies the multiplication factor for PLL2 VCO output clock\r\n *          This parameter can be one of the following values:\r\n *             @arg @ref RCC_PLL2_MUL8 PLL2VCO = PLL2 clock entry x 8\r\n *             @arg @ref RCC_PLL2_MUL9 PLL2VCO = PLL2 clock entry x 9\r\n *             @arg @ref RCC_PLL2_MUL10 PLL2VCO = PLL2 clock entry x 10\r\n *             @arg @ref RCC_PLL2_MUL11 PLL2VCO = PLL2 clock entry x 11\r\n *             @arg @ref RCC_PLL2_MUL12 PLL2VCO = PLL2 clock entry x 12\r\n *             @arg @ref RCC_PLL2_MUL13 PLL2VCO = PLL2 clock entry x 13\r\n *             @arg @ref RCC_PLL2_MUL14 PLL2VCO = PLL2 clock entry x 14\r\n *             @arg @ref RCC_PLL2_MUL16 PLL2VCO = PLL2 clock entry x 16\r\n *             @arg @ref RCC_PLL2_MUL20 PLL2VCO = PLL2 clock entry x 20\r\n *\r\n */\r\n#define __HAL_RCC_PLL2_CONFIG(__PLL2MUL__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PLL2MUL, (__PLL2MUL__))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_I2S_Configuration I2S Configuration\r\n * @brief  Macros to configure clock source of I2S peripherals.\r\n * @{\r\n */\r\n\r\n/** @brief  Macro to configure the I2S2 clock.\r\n * @param  __I2S2CLKSOURCE__ specifies the I2S2 clock source.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_I2S2CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry\r\n *            @arg @ref RCC_I2S2CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry\r\n */\r\n#define __HAL_RCC_I2S2_CONFIG(__I2S2CLKSOURCE__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_I2S2SRC, (uint32_t)(__I2S2CLKSOURCE__))\r\n\r\n/** @brief  Macro to get the I2S2 clock (I2S2CLK).\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_I2S2CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry\r\n *            @arg @ref RCC_I2S2CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry\r\n */\r\n#define __HAL_RCC_GET_I2S2_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_I2S2SRC)))\r\n\r\n/** @brief  Macro to configure the I2S3 clock.\r\n * @param  __I2S2CLKSOURCE__ specifies the I2S3 clock source.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_I2S3CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry\r\n *            @arg @ref RCC_I2S3CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry\r\n */\r\n#define __HAL_RCC_I2S3_CONFIG(__I2S2CLKSOURCE__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_I2S3SRC, (uint32_t)(__I2S2CLKSOURCE__))\r\n\r\n/** @brief  Macro to get the I2S3 clock (I2S3CLK).\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_I2S3CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry\r\n *            @arg @ref RCC_I2S3CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry\r\n */\r\n#define __HAL_RCC_GET_I2S3_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_I2S3SRC)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup RCCEx_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup RCCEx_Exported_Functions_Group1\r\n * @{\r\n */\r\n\r\nHAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit);\r\nvoid              HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit);\r\nuint32_t          HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @addtogroup RCCEx_Exported_Functions_Group2\r\n * @{\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_EnablePLLI2S(RCC_PLLI2SInitTypeDef *PLLI2SInit);\r\nHAL_StatusTypeDef HAL_RCCEx_DisablePLLI2S(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCCEx_Exported_Functions_Group3\r\n * @{\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_EnablePLL2(RCC_PLL2InitTypeDef *PLL2Init);\r\nHAL_StatusTypeDef HAL_RCCEx_DisablePLL2(void);\r\n\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_RCC_EX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_tim.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of TIM HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef STM32F1xx_HAL_TIM_H\r\n#define STM32F1xx_HAL_TIM_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n#ifndef USE_HAL_TIM_REGISTER_CALLBACKS\r\n#define USE_HAL_TIM_REGISTER_CALLBACKS 0\r\n#endif\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup TIM\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup TIM_Exported_Types TIM Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  TIM Time base Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock.\r\n                           This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */\r\n\r\n  uint32_t CounterMode; /*!< Specifies the counter mode.\r\n                             This parameter can be a value of @ref TIM_Counter_Mode */\r\n\r\n  uint32_t Period; /*!< Specifies the period value to be loaded into the active\r\n                        Auto-Reload Register at the next update event.\r\n                        This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF.  */\r\n\r\n  uint32_t ClockDivision; /*!< Specifies the clock division.\r\n                               This parameter can be a value of @ref TIM_ClockDivision */\r\n\r\n  uint32_t RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter\r\n                                   reaches zero, an update event is generated and counting restarts\r\n                                   from the RCR value (N).\r\n                                   This means in PWM mode that (N+1) corresponds to:\r\n                                       - the number of PWM periods in edge-aligned mode\r\n                                       - the number of half PWM period in center-aligned mode\r\n                                    GP timers: this parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF.\r\n                                    Advanced timers: this parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */\r\n\r\n  uint32_t AutoReloadPreload; /*!< Specifies the auto-reload preload.\r\n                                  This parameter can be a value of @ref TIM_AutoReloadPreload */\r\n} TIM_Base_InitTypeDef;\r\n\r\n/**\r\n * @brief  TIM Output Compare Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t OCMode; /*!< Specifies the TIM mode.\r\n                        This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */\r\n\r\n  uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register.\r\n                       This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */\r\n\r\n  uint32_t OCPolarity; /*!< Specifies the output polarity.\r\n                            This parameter can be a value of @ref TIM_Output_Compare_Polarity */\r\n\r\n  uint32_t OCNPolarity; /*!< Specifies the complementary output polarity.\r\n                             This parameter can be a value of @ref TIM_Output_Compare_N_Polarity\r\n                             @note This parameter is valid only for timer instances supporting break feature. */\r\n\r\n  uint32_t OCFastMode; /*!< Specifies the Fast mode state.\r\n                            This parameter can be a value of @ref TIM_Output_Fast_State\r\n                            @note This parameter is valid only in PWM1 and PWM2 mode. */\r\n\r\n  uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state.\r\n                             This parameter can be a value of @ref TIM_Output_Compare_Idle_State\r\n                             @note This parameter is valid only for timer instances supporting break feature. */\r\n\r\n  uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state.\r\n                              This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State\r\n                              @note This parameter is valid only for timer instances supporting break feature. */\r\n} TIM_OC_InitTypeDef;\r\n\r\n/**\r\n * @brief  TIM One Pulse Mode Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t OCMode; /*!< Specifies the TIM mode.\r\n                        This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */\r\n\r\n  uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register.\r\n                       This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */\r\n\r\n  uint32_t OCPolarity; /*!< Specifies the output polarity.\r\n                            This parameter can be a value of @ref TIM_Output_Compare_Polarity */\r\n\r\n  uint32_t OCNPolarity; /*!< Specifies the complementary output polarity.\r\n                             This parameter can be a value of @ref TIM_Output_Compare_N_Polarity\r\n                             @note This parameter is valid only for timer instances supporting break feature. */\r\n\r\n  uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state.\r\n                             This parameter can be a value of @ref TIM_Output_Compare_Idle_State\r\n                             @note This parameter is valid only for timer instances supporting break feature. */\r\n\r\n  uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state.\r\n                              This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State\r\n                              @note This parameter is valid only for timer instances supporting break feature. */\r\n\r\n  uint32_t ICPolarity; /*!< Specifies the active edge of the input signal.\r\n                            This parameter can be a value of @ref TIM_Input_Capture_Polarity */\r\n\r\n  uint32_t ICSelection; /*!< Specifies the input.\r\n                            This parameter can be a value of @ref TIM_Input_Capture_Selection */\r\n\r\n  uint32_t ICFilter; /*!< Specifies the input capture filter.\r\n                         This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n} TIM_OnePulse_InitTypeDef;\r\n\r\n/**\r\n * @brief  TIM Input Capture Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t ICPolarity; /*!< Specifies the active edge of the input signal.\r\n                            This parameter can be a value of @ref TIM_Input_Capture_Polarity */\r\n\r\n  uint32_t ICSelection; /*!< Specifies the input.\r\n                             This parameter can be a value of @ref TIM_Input_Capture_Selection */\r\n\r\n  uint32_t ICPrescaler; /*!< Specifies the Input Capture Prescaler.\r\n                             This parameter can be a value of @ref TIM_Input_Capture_Prescaler */\r\n\r\n  uint32_t ICFilter; /*!< Specifies the input capture filter.\r\n                          This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n} TIM_IC_InitTypeDef;\r\n\r\n/**\r\n * @brief  TIM Encoder Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t EncoderMode; /*!< Specifies the active edge of the input signal.\r\n                             This parameter can be a value of @ref TIM_Encoder_Mode */\r\n\r\n  uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal.\r\n                             This parameter can be a value of @ref TIM_Encoder_Input_Polarity */\r\n\r\n  uint32_t IC1Selection; /*!< Specifies the input.\r\n                              This parameter can be a value of @ref TIM_Input_Capture_Selection */\r\n\r\n  uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler.\r\n                              This parameter can be a value of @ref TIM_Input_Capture_Prescaler */\r\n\r\n  uint32_t IC1Filter; /*!< Specifies the input capture filter.\r\n                           This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n\r\n  uint32_t IC2Polarity; /*!< Specifies the active edge of the input signal.\r\n                             This parameter can be a value of @ref TIM_Encoder_Input_Polarity */\r\n\r\n  uint32_t IC2Selection; /*!< Specifies the input.\r\n                             This parameter can be a value of @ref TIM_Input_Capture_Selection */\r\n\r\n  uint32_t IC2Prescaler; /*!< Specifies the Input Capture Prescaler.\r\n                              This parameter can be a value of @ref TIM_Input_Capture_Prescaler */\r\n\r\n  uint32_t IC2Filter; /*!< Specifies the input capture filter.\r\n                           This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n} TIM_Encoder_InitTypeDef;\r\n\r\n/**\r\n * @brief  Clock Configuration Handle Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t ClockSource;    /*!< TIM clock sources\r\n                                This parameter can be a value of @ref TIM_Clock_Source */\r\n  uint32_t ClockPolarity;  /*!< TIM clock polarity\r\n                                This parameter can be a value of @ref TIM_Clock_Polarity */\r\n  uint32_t ClockPrescaler; /*!< TIM clock prescaler\r\n                                This parameter can be a value of @ref TIM_Clock_Prescaler */\r\n  uint32_t ClockFilter;    /*!< TIM clock filter\r\n                                This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n} TIM_ClockConfigTypeDef;\r\n\r\n/**\r\n * @brief  TIM Clear Input Configuration Handle Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t ClearInputState;     /*!< TIM clear Input state\r\n                                     This parameter can be ENABLE or DISABLE */\r\n  uint32_t ClearInputSource;    /*!< TIM clear Input sources\r\n                                     This parameter can be a value of @ref TIM_ClearInput_Source */\r\n  uint32_t ClearInputPolarity;  /*!< TIM Clear Input polarity\r\n                                     This parameter can be a value of @ref TIM_ClearInput_Polarity */\r\n  uint32_t ClearInputPrescaler; /*!< TIM Clear Input prescaler\r\n                                     This parameter must be 0: When OCRef clear feature is used with ETR source, ETR prescaler must be off */\r\n  uint32_t ClearInputFilter;    /*!< TIM Clear Input filter\r\n                                     This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n} TIM_ClearInputConfigTypeDef;\r\n\r\n/**\r\n * @brief  TIM Master configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t MasterOutputTrigger; /*!< Trigger output (TRGO) selection\r\n                                     This parameter can be a value of @ref TIM_Master_Mode_Selection */\r\n  uint32_t MasterSlaveMode;     /*!< Master/slave mode selection\r\n                                     This parameter can be a value of @ref TIM_Master_Slave_Mode\r\n                                     @note When the Master/slave mode is enabled, the effect of\r\n                                     an event on the trigger input (TRGI) is delayed to allow a\r\n                                     perfect synchronization between the current timer and its\r\n                                     slaves (through TRGO). It is not mandatory in case of timer\r\n                                     synchronization mode. */\r\n} TIM_MasterConfigTypeDef;\r\n\r\n/**\r\n * @brief  TIM Slave configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t SlaveMode;        /*!< Slave mode selection\r\n                                  This parameter can be a value of @ref TIM_Slave_Mode */\r\n  uint32_t InputTrigger;     /*!< Input Trigger source\r\n                                  This parameter can be a value of @ref TIM_Trigger_Selection */\r\n  uint32_t TriggerPolarity;  /*!< Input Trigger polarity\r\n                                  This parameter can be a value of @ref TIM_Trigger_Polarity */\r\n  uint32_t TriggerPrescaler; /*!< Input trigger prescaler\r\n                                  This parameter can be a value of @ref TIM_Trigger_Prescaler */\r\n  uint32_t TriggerFilter;    /*!< Input trigger filter\r\n                                  This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF  */\r\n\r\n} TIM_SlaveConfigTypeDef;\r\n\r\n/**\r\n * @brief  TIM Break input(s) and Dead time configuration Structure definition\r\n * @note   2 break inputs can be configured (BKIN and BKIN2) with configurable\r\n *        filter and polarity.\r\n */\r\ntypedef struct {\r\n  uint32_t OffStateRunMode;  /*!< TIM off state in run mode\r\n                                  This parameter can be a value of @ref TIM_OSSR_Off_State_Selection_for_Run_mode_state */\r\n  uint32_t OffStateIDLEMode; /*!< TIM off state in IDLE mode\r\n                                  This parameter can be a value of @ref TIM_OSSI_Off_State_Selection_for_Idle_mode_state */\r\n  uint32_t LockLevel;        /*!< TIM Lock level\r\n                                  This parameter can be a value of @ref TIM_Lock_level */\r\n  uint32_t DeadTime;         /*!< TIM dead Time\r\n                                  This parameter can be a number between Min_Data = 0x00 and Max_Data = 0xFF */\r\n  uint32_t BreakState;       /*!< TIM Break State\r\n                                  This parameter can be a value of @ref TIM_Break_Input_enable_disable */\r\n  uint32_t BreakPolarity;    /*!< TIM Break input polarity\r\n                                  This parameter can be a value of @ref TIM_Break_Polarity */\r\n  uint32_t BreakFilter;      /*!< Specifies the break input filter.\r\n                                  This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n  uint32_t AutomaticOutput;  /*!< TIM Automatic Output Enable state\r\n                                  This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */\r\n} TIM_BreakDeadTimeConfigTypeDef;\r\n\r\n/**\r\n * @brief  HAL State structures definition\r\n */\r\ntypedef enum {\r\n  HAL_TIM_STATE_RESET   = 0x00U, /*!< Peripheral not yet initialized or disabled  */\r\n  HAL_TIM_STATE_READY   = 0x01U, /*!< Peripheral Initialized and ready for use    */\r\n  HAL_TIM_STATE_BUSY    = 0x02U, /*!< An internal process is ongoing              */\r\n  HAL_TIM_STATE_TIMEOUT = 0x03U, /*!< Timeout state                               */\r\n  HAL_TIM_STATE_ERROR   = 0x04U  /*!< Reception process is ongoing                */\r\n} HAL_TIM_StateTypeDef;\r\n\r\n/**\r\n * @brief  TIM Channel States definition\r\n */\r\ntypedef enum {\r\n  HAL_TIM_CHANNEL_STATE_RESET = 0x00U, /*!< TIM Channel initial state                         */\r\n  HAL_TIM_CHANNEL_STATE_READY = 0x01U, /*!< TIM Channel ready for use                         */\r\n  HAL_TIM_CHANNEL_STATE_BUSY  = 0x02U, /*!< An internal process is ongoing on the TIM channel */\r\n} HAL_TIM_ChannelStateTypeDef;\r\n\r\n/**\r\n * @brief  DMA Burst States definition\r\n */\r\ntypedef enum {\r\n  HAL_DMA_BURST_STATE_RESET = 0x00U, /*!< DMA Burst initial state */\r\n  HAL_DMA_BURST_STATE_READY = 0x01U, /*!< DMA Burst ready for use */\r\n  HAL_DMA_BURST_STATE_BUSY  = 0x02U, /*!< Ongoing DMA Burst       */\r\n} HAL_TIM_DMABurstStateTypeDef;\r\n\r\n/**\r\n * @brief  HAL Active channel structures definition\r\n */\r\ntypedef enum {\r\n  HAL_TIM_ACTIVE_CHANNEL_1       = 0x01U, /*!< The active channel is 1     */\r\n  HAL_TIM_ACTIVE_CHANNEL_2       = 0x02U, /*!< The active channel is 2     */\r\n  HAL_TIM_ACTIVE_CHANNEL_3       = 0x04U, /*!< The active channel is 3     */\r\n  HAL_TIM_ACTIVE_CHANNEL_4       = 0x08U, /*!< The active channel is 4     */\r\n  HAL_TIM_ACTIVE_CHANNEL_CLEARED = 0x00U  /*!< All active channels cleared */\r\n} HAL_TIM_ActiveChannel;\r\n\r\n/**\r\n * @brief  TIM Time Base Handle Structure definition\r\n */\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\ntypedef struct __TIM_HandleTypeDef\r\n#else\r\ntypedef struct\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n{\r\n  TIM_TypeDef *         Instance;                     /*!< Register base address                             */\r\n  TIM_Base_InitTypeDef  Init;                         /*!< TIM Time Base required parameters                 */\r\n  HAL_TIM_ActiveChannel Channel;                      /*!< Active channel                                    */\r\n  DMA_HandleTypeDef *   hdma[7];                      /*!< DMA Handlers array\r\n                                                           This array is accessed by a @ref DMA_Handle_index */\r\n  HAL_LockTypeDef                   Lock;             /*!< Locking object                                    */\r\n  __IO HAL_TIM_StateTypeDef         State;            /*!< TIM operation state                               */\r\n  __IO HAL_TIM_ChannelStateTypeDef  ChannelState[4];  /*!< TIM channel operation state                       */\r\n  __IO HAL_TIM_ChannelStateTypeDef  ChannelNState[4]; /*!< TIM complementary channel operation state         */\r\n  __IO HAL_TIM_DMABurstStateTypeDef DMABurstState;    /*!< DMA burst operation state                         */\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  void (*Base_MspInitCallback)(struct __TIM_HandleTypeDef *htim);              /*!< TIM Base Msp Init Callback                              */\r\n  void (*Base_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);            /*!< TIM Base Msp DeInit Callback                            */\r\n  void (*IC_MspInitCallback)(struct __TIM_HandleTypeDef *htim);                /*!< TIM IC Msp Init Callback                                */\r\n  void (*IC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);              /*!< TIM IC Msp DeInit Callback                              */\r\n  void (*OC_MspInitCallback)(struct __TIM_HandleTypeDef *htim);                /*!< TIM OC Msp Init Callback                                */\r\n  void (*OC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);              /*!< TIM OC Msp DeInit Callback                              */\r\n  void (*PWM_MspInitCallback)(struct __TIM_HandleTypeDef *htim);               /*!< TIM PWM Msp Init Callback                               */\r\n  void (*PWM_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);             /*!< TIM PWM Msp DeInit Callback                             */\r\n  void (*OnePulse_MspInitCallback)(struct __TIM_HandleTypeDef *htim);          /*!< TIM One Pulse Msp Init Callback                         */\r\n  void (*OnePulse_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);        /*!< TIM One Pulse Msp DeInit Callback                       */\r\n  void (*Encoder_MspInitCallback)(struct __TIM_HandleTypeDef *htim);           /*!< TIM Encoder Msp Init Callback                           */\r\n  void (*Encoder_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);         /*!< TIM Encoder Msp DeInit Callback                         */\r\n  void (*HallSensor_MspInitCallback)(struct __TIM_HandleTypeDef *htim);        /*!< TIM Hall Sensor Msp Init Callback                       */\r\n  void (*HallSensor_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);      /*!< TIM Hall Sensor Msp DeInit Callback                     */\r\n  void (*PeriodElapsedCallback)(struct __TIM_HandleTypeDef *htim);             /*!< TIM Period Elapsed Callback                             */\r\n  void (*PeriodElapsedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);     /*!< TIM Period Elapsed half complete Callback               */\r\n  void (*TriggerCallback)(struct __TIM_HandleTypeDef *htim);                   /*!< TIM Trigger Callback                                    */\r\n  void (*TriggerHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);           /*!< TIM Trigger half complete Callback                      */\r\n  void (*IC_CaptureCallback)(struct __TIM_HandleTypeDef *htim);                /*!< TIM Input Capture Callback                              */\r\n  void (*IC_CaptureHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);        /*!< TIM Input Capture half complete Callback                */\r\n  void (*OC_DelayElapsedCallback)(struct __TIM_HandleTypeDef *htim);           /*!< TIM Output Compare Delay Elapsed Callback               */\r\n  void (*PWM_PulseFinishedCallback)(struct __TIM_HandleTypeDef *htim);         /*!< TIM PWM Pulse Finished Callback                         */\r\n  void (*PWM_PulseFinishedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Pulse Finished half complete Callback           */\r\n  void (*ErrorCallback)(struct __TIM_HandleTypeDef *htim);                     /*!< TIM Error Callback                                      */\r\n  void (*CommutationCallback)(struct __TIM_HandleTypeDef *htim);               /*!< TIM Commutation Callback                                */\r\n  void (*CommutationHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);       /*!< TIM Commutation half complete Callback                  */\r\n  void (*BreakCallback)(struct __TIM_HandleTypeDef *htim);                     /*!< TIM Break Callback                                      */\r\n#endif                                                                         /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n} TIM_HandleTypeDef;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n/**\r\n * @brief  HAL TIM Callback ID enumeration definition\r\n */\r\ntypedef enum {\r\n  HAL_TIM_BASE_MSPINIT_CB_ID = 0x00U /*!< TIM Base MspInit Callback ID                              */\r\n  ,\r\n  HAL_TIM_BASE_MSPDEINIT_CB_ID = 0x01U /*!< TIM Base MspDeInit Callback ID                            */\r\n  ,\r\n  HAL_TIM_IC_MSPINIT_CB_ID = 0x02U /*!< TIM IC MspInit Callback ID                                */\r\n  ,\r\n  HAL_TIM_IC_MSPDEINIT_CB_ID = 0x03U /*!< TIM IC MspDeInit Callback ID                              */\r\n  ,\r\n  HAL_TIM_OC_MSPINIT_CB_ID = 0x04U /*!< TIM OC MspInit Callback ID                                */\r\n  ,\r\n  HAL_TIM_OC_MSPDEINIT_CB_ID = 0x05U /*!< TIM OC MspDeInit Callback ID                              */\r\n  ,\r\n  HAL_TIM_PWM_MSPINIT_CB_ID = 0x06U /*!< TIM PWM MspInit Callback ID                               */\r\n  ,\r\n  HAL_TIM_PWM_MSPDEINIT_CB_ID = 0x07U /*!< TIM PWM MspDeInit Callback ID                             */\r\n  ,\r\n  HAL_TIM_ONE_PULSE_MSPINIT_CB_ID = 0x08U /*!< TIM One Pulse MspInit Callback ID                         */\r\n  ,\r\n  HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID = 0x09U /*!< TIM One Pulse MspDeInit Callback ID                       */\r\n  ,\r\n  HAL_TIM_ENCODER_MSPINIT_CB_ID = 0x0AU /*!< TIM Encoder MspInit Callback ID                           */\r\n  ,\r\n  HAL_TIM_ENCODER_MSPDEINIT_CB_ID = 0x0BU /*!< TIM Encoder MspDeInit Callback ID                         */\r\n  ,\r\n  HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID = 0x0CU /*!< TIM Hall Sensor MspDeInit Callback ID                     */\r\n  ,\r\n  HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID = 0x0DU /*!< TIM Hall Sensor MspDeInit Callback ID                     */\r\n  ,\r\n  HAL_TIM_PERIOD_ELAPSED_CB_ID = 0x0EU /*!< TIM Period Elapsed Callback ID                             */\r\n  ,\r\n  HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID = 0x0FU /*!< TIM Period Elapsed half complete Callback ID               */\r\n  ,\r\n  HAL_TIM_TRIGGER_CB_ID = 0x10U /*!< TIM Trigger Callback ID                                    */\r\n  ,\r\n  HAL_TIM_TRIGGER_HALF_CB_ID = 0x11U /*!< TIM Trigger half complete Callback ID                      */\r\n\r\n  ,\r\n  HAL_TIM_IC_CAPTURE_CB_ID = 0x12U /*!< TIM Input Capture Callback ID                              */\r\n  ,\r\n  HAL_TIM_IC_CAPTURE_HALF_CB_ID = 0x13U /*!< TIM Input Capture half complete Callback ID                */\r\n  ,\r\n  HAL_TIM_OC_DELAY_ELAPSED_CB_ID = 0x14U /*!< TIM Output Compare Delay Elapsed Callback ID               */\r\n  ,\r\n  HAL_TIM_PWM_PULSE_FINISHED_CB_ID = 0x15U /*!< TIM PWM Pulse Finished Callback ID           */\r\n  ,\r\n  HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID = 0x16U /*!< TIM PWM Pulse Finished half complete Callback ID           */\r\n  ,\r\n  HAL_TIM_ERROR_CB_ID = 0x17U /*!< TIM Error Callback ID                                      */\r\n  ,\r\n  HAL_TIM_COMMUTATION_CB_ID = 0x18U /*!< TIM Commutation Callback ID                                */\r\n  ,\r\n  HAL_TIM_COMMUTATION_HALF_CB_ID = 0x19U /*!< TIM Commutation half complete Callback ID                  */\r\n  ,\r\n  HAL_TIM_BREAK_CB_ID = 0x1AU /*!< TIM Break Callback ID                                      */\r\n} HAL_TIM_CallbackIDTypeDef;\r\n\r\n/**\r\n * @brief  HAL TIM Callback pointer definition\r\n */\r\ntypedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to the TIM callback function */\r\n\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported types -----------------------------------------------------*/\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup TIM_Exported_Constants TIM Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup TIM_ClearInput_Source TIM Clear Input Source\r\n * @{\r\n */\r\n#define TIM_CLEARINPUTSOURCE_NONE 0x00000000U /*!< OCREF_CLR is disabled */\r\n#define TIM_CLEARINPUTSOURCE_ETR  0x00000001U /*!< OCREF_CLR is connected to ETRF input */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_DMA_Base_address TIM DMA Base Address\r\n * @{\r\n */\r\n#define TIM_DMABASE_CR1   0x00000000U\r\n#define TIM_DMABASE_CR2   0x00000001U\r\n#define TIM_DMABASE_SMCR  0x00000002U\r\n#define TIM_DMABASE_DIER  0x00000003U\r\n#define TIM_DMABASE_SR    0x00000004U\r\n#define TIM_DMABASE_EGR   0x00000005U\r\n#define TIM_DMABASE_CCMR1 0x00000006U\r\n#define TIM_DMABASE_CCMR2 0x00000007U\r\n#define TIM_DMABASE_CCER  0x00000008U\r\n#define TIM_DMABASE_CNT   0x00000009U\r\n#define TIM_DMABASE_PSC   0x0000000AU\r\n#define TIM_DMABASE_ARR   0x0000000BU\r\n#define TIM_DMABASE_RCR   0x0000000CU\r\n#define TIM_DMABASE_CCR1  0x0000000DU\r\n#define TIM_DMABASE_CCR2  0x0000000EU\r\n#define TIM_DMABASE_CCR3  0x0000000FU\r\n#define TIM_DMABASE_CCR4  0x00000010U\r\n#define TIM_DMABASE_BDTR  0x00000011U\r\n#define TIM_DMABASE_DCR   0x00000012U\r\n#define TIM_DMABASE_DMAR  0x00000013U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Event_Source TIM Event Source\r\n * @{\r\n */\r\n#define TIM_EVENTSOURCE_UPDATE  TIM_EGR_UG   /*!< Reinitialize the counter and generates an update of the registers */\r\n#define TIM_EVENTSOURCE_CC1     TIM_EGR_CC1G /*!< A capture/compare event is generated on channel 1 */\r\n#define TIM_EVENTSOURCE_CC2     TIM_EGR_CC2G /*!< A capture/compare event is generated on channel 2 */\r\n#define TIM_EVENTSOURCE_CC3     TIM_EGR_CC3G /*!< A capture/compare event is generated on channel 3 */\r\n#define TIM_EVENTSOURCE_CC4     TIM_EGR_CC4G /*!< A capture/compare event is generated on channel 4 */\r\n#define TIM_EVENTSOURCE_COM     TIM_EGR_COMG /*!< A commutation event is generated */\r\n#define TIM_EVENTSOURCE_TRIGGER TIM_EGR_TG   /*!< A trigger event is generated */\r\n#define TIM_EVENTSOURCE_BREAK   TIM_EGR_BG   /*!< A break event is generated */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Input_Channel_Polarity TIM Input Channel polarity\r\n * @{\r\n */\r\n#define TIM_INPUTCHANNELPOLARITY_RISING   0x00000000U                      /*!< Polarity for TIx source */\r\n#define TIM_INPUTCHANNELPOLARITY_FALLING  TIM_CCER_CC1P                    /*!< Polarity for TIx source */\r\n#define TIM_INPUTCHANNELPOLARITY_BOTHEDGE (TIM_CCER_CC1P | TIM_CCER_CC1NP) /*!< Polarity for TIx source */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_ETR_Polarity TIM ETR Polarity\r\n * @{\r\n */\r\n#define TIM_ETRPOLARITY_INVERTED    TIM_SMCR_ETP /*!< Polarity for ETR source */\r\n#define TIM_ETRPOLARITY_NONINVERTED 0x00000000U  /*!< Polarity for ETR source */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_ETR_Prescaler TIM ETR Prescaler\r\n * @{\r\n */\r\n#define TIM_ETRPRESCALER_DIV1 0x00000000U     /*!< No prescaler is used */\r\n#define TIM_ETRPRESCALER_DIV2 TIM_SMCR_ETPS_0 /*!< ETR input source is divided by 2 */\r\n#define TIM_ETRPRESCALER_DIV4 TIM_SMCR_ETPS_1 /*!< ETR input source is divided by 4 */\r\n#define TIM_ETRPRESCALER_DIV8 TIM_SMCR_ETPS   /*!< ETR input source is divided by 8 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Counter_Mode TIM Counter Mode\r\n * @{\r\n */\r\n#define TIM_COUNTERMODE_UP             0x00000000U   /*!< Counter used as up-counter   */\r\n#define TIM_COUNTERMODE_DOWN           TIM_CR1_DIR   /*!< Counter used as down-counter */\r\n#define TIM_COUNTERMODE_CENTERALIGNED1 TIM_CR1_CMS_0 /*!< Center-aligned mode 1        */\r\n#define TIM_COUNTERMODE_CENTERALIGNED2 TIM_CR1_CMS_1 /*!< Center-aligned mode 2        */\r\n#define TIM_COUNTERMODE_CENTERALIGNED3 TIM_CR1_CMS   /*!< Center-aligned mode 3        */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_ClockDivision TIM Clock Division\r\n * @{\r\n */\r\n#define TIM_CLOCKDIVISION_DIV1 0x00000000U   /*!< Clock division: tDTS=tCK_INT   */\r\n#define TIM_CLOCKDIVISION_DIV2 TIM_CR1_CKD_0 /*!< Clock division: tDTS=2*tCK_INT */\r\n#define TIM_CLOCKDIVISION_DIV4 TIM_CR1_CKD_1 /*!< Clock division: tDTS=4*tCK_INT */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_State TIM Output Compare State\r\n * @{\r\n */\r\n#define TIM_OUTPUTSTATE_DISABLE 0x00000000U   /*!< Capture/Compare 1 output disabled */\r\n#define TIM_OUTPUTSTATE_ENABLE  TIM_CCER_CC1E /*!< Capture/Compare 1 output enabled */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_AutoReloadPreload TIM Auto-Reload Preload\r\n * @{\r\n */\r\n#define TIM_AUTORELOAD_PRELOAD_DISABLE 0x00000000U  /*!< TIMx_ARR register is not buffered */\r\n#define TIM_AUTORELOAD_PRELOAD_ENABLE  TIM_CR1_ARPE /*!< TIMx_ARR register is buffered */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Fast_State TIM Output Fast State\r\n * @{\r\n */\r\n#define TIM_OCFAST_DISABLE 0x00000000U     /*!< Output Compare fast disable */\r\n#define TIM_OCFAST_ENABLE  TIM_CCMR1_OC1FE /*!< Output Compare fast enable  */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_N_State TIM Complementary Output Compare State\r\n * @{\r\n */\r\n#define TIM_OUTPUTNSTATE_DISABLE 0x00000000U    /*!< OCxN is disabled  */\r\n#define TIM_OUTPUTNSTATE_ENABLE  TIM_CCER_CC1NE /*!< OCxN is enabled   */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_Polarity TIM Output Compare Polarity\r\n * @{\r\n */\r\n#define TIM_OCPOLARITY_HIGH 0x00000000U   /*!< Capture/Compare output polarity  */\r\n#define TIM_OCPOLARITY_LOW  TIM_CCER_CC1P /*!< Capture/Compare output polarity  */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_N_Polarity TIM Complementary Output Compare Polarity\r\n * @{\r\n */\r\n#define TIM_OCNPOLARITY_HIGH 0x00000000U    /*!< Capture/Compare complementary output polarity */\r\n#define TIM_OCNPOLARITY_LOW  TIM_CCER_CC1NP /*!< Capture/Compare complementary output polarity */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_Idle_State TIM Output Compare Idle State\r\n * @{\r\n */\r\n#define TIM_OCIDLESTATE_SET   TIM_CR2_OIS1 /*!< Output Idle state: OCx=1 when MOE=0 */\r\n#define TIM_OCIDLESTATE_RESET 0x00000000U  /*!< Output Idle state: OCx=0 when MOE=0 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_N_Idle_State TIM Complementary Output Compare Idle State\r\n * @{\r\n */\r\n#define TIM_OCNIDLESTATE_SET   TIM_CR2_OIS1N /*!< Complementary output Idle state: OCxN=1 when MOE=0 */\r\n#define TIM_OCNIDLESTATE_RESET 0x00000000U   /*!< Complementary output Idle state: OCxN=0 when MOE=0 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Input_Capture_Polarity TIM Input Capture Polarity\r\n * @{\r\n */\r\n#define TIM_ICPOLARITY_RISING   TIM_INPUTCHANNELPOLARITY_RISING   /*!< Capture triggered by rising edge on timer input                  */\r\n#define TIM_ICPOLARITY_FALLING  TIM_INPUTCHANNELPOLARITY_FALLING  /*!< Capture triggered by falling edge on timer input                 */\r\n#define TIM_ICPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Capture triggered by both rising and falling edges on timer input*/\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Encoder_Input_Polarity TIM Encoder Input Polarity\r\n * @{\r\n */\r\n#define TIM_ENCODERINPUTPOLARITY_RISING  TIM_INPUTCHANNELPOLARITY_RISING  /*!< Encoder input with rising edge polarity  */\r\n#define TIM_ENCODERINPUTPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Encoder input with falling edge polarity */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection\r\n * @{\r\n */\r\n#define TIM_ICSELECTION_DIRECTTI                                 \\\r\n  TIM_CCMR1_CC1S_0 /*!< TIM Input 1, 2, 3 or 4 is selected to be \\\r\n                        connected to IC1, IC2, IC3 or IC4, respectively */\r\n#define TIM_ICSELECTION_INDIRECTTI                                                       \\\r\n  TIM_CCMR1_CC1S_1                         /*!< TIM Input 1, 2, 3 or 4 is selected to be \\\r\n                                                connected to IC2, IC1, IC4 or IC3, respectively */\r\n#define TIM_ICSELECTION_TRC TIM_CCMR1_CC1S /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Input_Capture_Prescaler TIM Input Capture Prescaler\r\n * @{\r\n */\r\n#define TIM_ICPSC_DIV1 0x00000000U        /*!< Capture performed each time an edge is detected on the capture input */\r\n#define TIM_ICPSC_DIV2 TIM_CCMR1_IC1PSC_0 /*!< Capture performed once every 2 events                                */\r\n#define TIM_ICPSC_DIV4 TIM_CCMR1_IC1PSC_1 /*!< Capture performed once every 4 events                                */\r\n#define TIM_ICPSC_DIV8 TIM_CCMR1_IC1PSC   /*!< Capture performed once every 8 events                                */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_One_Pulse_Mode TIM One Pulse Mode\r\n * @{\r\n */\r\n#define TIM_OPMODE_SINGLE     TIM_CR1_OPM /*!< Counter stops counting at the next update event */\r\n#define TIM_OPMODE_REPETITIVE 0x00000000U /*!< Counter is not stopped at update event          */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Encoder_Mode TIM Encoder Mode\r\n * @{\r\n */\r\n#define TIM_ENCODERMODE_TI1  TIM_SMCR_SMS_0                    /*!< Quadrature encoder mode 1, x2 mode, counts up/down on TI1FP1 edge depending on TI2FP2 level  */\r\n#define TIM_ENCODERMODE_TI2  TIM_SMCR_SMS_1                    /*!< Quadrature encoder mode 2, x2 mode, counts up/down on TI2FP2 edge depending on TI1FP1 level. */\r\n#define TIM_ENCODERMODE_TI12 (TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< Quadrature encoder mode 3, x4 mode, counts up/down on both TI1FP1 and TI2FP2 edges depending on the level of the other input. */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Interrupt_definition TIM interrupt Definition\r\n * @{\r\n */\r\n#define TIM_IT_UPDATE  TIM_DIER_UIE   /*!< Update interrupt            */\r\n#define TIM_IT_CC1     TIM_DIER_CC1IE /*!< Capture/Compare 1 interrupt */\r\n#define TIM_IT_CC2     TIM_DIER_CC2IE /*!< Capture/Compare 2 interrupt */\r\n#define TIM_IT_CC3     TIM_DIER_CC3IE /*!< Capture/Compare 3 interrupt */\r\n#define TIM_IT_CC4     TIM_DIER_CC4IE /*!< Capture/Compare 4 interrupt */\r\n#define TIM_IT_COM     TIM_DIER_COMIE /*!< Commutation interrupt       */\r\n#define TIM_IT_TRIGGER TIM_DIER_TIE   /*!< Trigger interrupt           */\r\n#define TIM_IT_BREAK   TIM_DIER_BIE   /*!< Break interrupt             */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Commutation_Source  TIM Commutation Source\r\n * @{\r\n */\r\n#define TIM_COMMUTATION_TRGI     TIM_CR2_CCUS /*!< When Capture/compare control bits are preloaded, they are updated by setting the COMG bit or when an rising edge occurs on trigger input */\r\n#define TIM_COMMUTATION_SOFTWARE 0x00000000U  /*!< When Capture/compare control bits are preloaded, they are updated by setting the COMG bit */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_DMA_sources TIM DMA Sources\r\n * @{\r\n */\r\n#define TIM_DMA_UPDATE  TIM_DIER_UDE   /*!< DMA request is triggered by the update event */\r\n#define TIM_DMA_CC1     TIM_DIER_CC1DE /*!< DMA request is triggered by the capture/compare macth 1 event */\r\n#define TIM_DMA_CC2     TIM_DIER_CC2DE /*!< DMA request is triggered by the capture/compare macth 2 event event */\r\n#define TIM_DMA_CC3     TIM_DIER_CC3DE /*!< DMA request is triggered by the capture/compare macth 3 event event */\r\n#define TIM_DMA_CC4     TIM_DIER_CC4DE /*!< DMA request is triggered by the capture/compare macth 4 event event */\r\n#define TIM_DMA_COM     TIM_DIER_COMDE /*!< DMA request is triggered by the commutation event */\r\n#define TIM_DMA_TRIGGER TIM_DIER_TDE   /*!< DMA request is triggered by the trigger event */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Flag_definition TIM Flag Definition\r\n * @{\r\n */\r\n#define TIM_FLAG_UPDATE  TIM_SR_UIF   /*!< Update interrupt flag         */\r\n#define TIM_FLAG_CC1     TIM_SR_CC1IF /*!< Capture/Compare 1 interrupt flag */\r\n#define TIM_FLAG_CC2     TIM_SR_CC2IF /*!< Capture/Compare 2 interrupt flag */\r\n#define TIM_FLAG_CC3     TIM_SR_CC3IF /*!< Capture/Compare 3 interrupt flag */\r\n#define TIM_FLAG_CC4     TIM_SR_CC4IF /*!< Capture/Compare 4 interrupt flag */\r\n#define TIM_FLAG_COM     TIM_SR_COMIF /*!< Commutation interrupt flag    */\r\n#define TIM_FLAG_TRIGGER TIM_SR_TIF   /*!< Trigger interrupt flag        */\r\n#define TIM_FLAG_BREAK   TIM_SR_BIF   /*!< Break interrupt flag          */\r\n#define TIM_FLAG_CC1OF   TIM_SR_CC1OF /*!< Capture 1 overcapture flag    */\r\n#define TIM_FLAG_CC2OF   TIM_SR_CC2OF /*!< Capture 2 overcapture flag    */\r\n#define TIM_FLAG_CC3OF   TIM_SR_CC3OF /*!< Capture 3 overcapture flag    */\r\n#define TIM_FLAG_CC4OF   TIM_SR_CC4OF /*!< Capture 4 overcapture flag    */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Channel TIM Channel\r\n * @{\r\n */\r\n#define TIM_CHANNEL_1   0x00000000U /*!< Capture/compare channel 1 identifier      */\r\n#define TIM_CHANNEL_2   0x00000004U /*!< Capture/compare channel 2 identifier      */\r\n#define TIM_CHANNEL_3   0x00000008U /*!< Capture/compare channel 3 identifier      */\r\n#define TIM_CHANNEL_4   0x0000000CU /*!< Capture/compare channel 4 identifier      */\r\n#define TIM_CHANNEL_ALL 0x0000003CU /*!< Global Capture/compare channel identifier  */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Clock_Source TIM Clock Source\r\n * @{\r\n */\r\n#define TIM_CLOCKSOURCE_ETRMODE2 TIM_SMCR_ETPS_1 /*!< External clock source mode 2                          */\r\n#define TIM_CLOCKSOURCE_INTERNAL TIM_SMCR_ETPS_0 /*!< Internal clock source                                 */\r\n#define TIM_CLOCKSOURCE_ITR0     TIM_TS_ITR0     /*!< External clock source mode 1 (ITR0)                   */\r\n#define TIM_CLOCKSOURCE_ITR1     TIM_TS_ITR1     /*!< External clock source mode 1 (ITR1)                   */\r\n#define TIM_CLOCKSOURCE_ITR2     TIM_TS_ITR2     /*!< External clock source mode 1 (ITR2)                   */\r\n#define TIM_CLOCKSOURCE_ITR3     TIM_TS_ITR3     /*!< External clock source mode 1 (ITR3)                   */\r\n#define TIM_CLOCKSOURCE_TI1ED    TIM_TS_TI1F_ED  /*!< External clock source mode 1 (TTI1FP1 + edge detect.) */\r\n#define TIM_CLOCKSOURCE_TI1      TIM_TS_TI1FP1   /*!< External clock source mode 1 (TTI1FP1)                */\r\n#define TIM_CLOCKSOURCE_TI2      TIM_TS_TI2FP2   /*!< External clock source mode 1 (TTI2FP2)                */\r\n#define TIM_CLOCKSOURCE_ETRMODE1 TIM_TS_ETRF     /*!< External clock source mode 1 (ETRF)                   */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Clock_Polarity TIM Clock Polarity\r\n * @{\r\n */\r\n#define TIM_CLOCKPOLARITY_INVERTED    TIM_ETRPOLARITY_INVERTED          /*!< Polarity for ETRx clock sources */\r\n#define TIM_CLOCKPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED       /*!< Polarity for ETRx clock sources */\r\n#define TIM_CLOCKPOLARITY_RISING      TIM_INPUTCHANNELPOLARITY_RISING   /*!< Polarity for TIx clock sources */\r\n#define TIM_CLOCKPOLARITY_FALLING     TIM_INPUTCHANNELPOLARITY_FALLING  /*!< Polarity for TIx clock sources */\r\n#define TIM_CLOCKPOLARITY_BOTHEDGE    TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Polarity for TIx clock sources */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Clock_Prescaler TIM Clock Prescaler\r\n * @{\r\n */\r\n#define TIM_CLOCKPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used                                                     */\r\n#define TIM_CLOCKPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR Clock: Capture performed once every 2 events. */\r\n#define TIM_CLOCKPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR Clock: Capture performed once every 4 events. */\r\n#define TIM_CLOCKPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR Clock: Capture performed once every 8 events. */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_ClearInput_Polarity TIM Clear Input Polarity\r\n * @{\r\n */\r\n#define TIM_CLEARINPUTPOLARITY_INVERTED    TIM_ETRPOLARITY_INVERTED    /*!< Polarity for ETRx pin */\r\n#define TIM_CLEARINPUTPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx pin */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_ClearInput_Prescaler TIM Clear Input Prescaler\r\n * @{\r\n */\r\n#define TIM_CLEARINPUTPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used                                                   */\r\n#define TIM_CLEARINPUTPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR pin: Capture performed once every 2 events. */\r\n#define TIM_CLEARINPUTPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR pin: Capture performed once every 4 events. */\r\n#define TIM_CLEARINPUTPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR pin: Capture performed once every 8 events. */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_OSSR_Off_State_Selection_for_Run_mode_state TIM OSSR OffState Selection for Run mode state\r\n * @{\r\n */\r\n#define TIM_OSSR_ENABLE  TIM_BDTR_OSSR /*!< When inactive, OC/OCN outputs are enabled (still controlled by the timer)           */\r\n#define TIM_OSSR_DISABLE 0x00000000U   /*!< When inactive, OC/OCN outputs are disabled (not controlled any longer by the timer) */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_OSSI_Off_State_Selection_for_Idle_mode_state TIM OSSI OffState Selection for Idle mode state\r\n * @{\r\n */\r\n#define TIM_OSSI_ENABLE  TIM_BDTR_OSSI /*!< When inactive, OC/OCN outputs are enabled (still controlled by the timer)           */\r\n#define TIM_OSSI_DISABLE 0x00000000U   /*!< When inactive, OC/OCN outputs are disabled (not controlled any longer by the timer) */\r\n/**\r\n * @}\r\n */\r\n/** @defgroup TIM_Lock_level  TIM Lock level\r\n * @{\r\n */\r\n#define TIM_LOCKLEVEL_OFF 0x00000000U     /*!< LOCK OFF     */\r\n#define TIM_LOCKLEVEL_1   TIM_BDTR_LOCK_0 /*!< LOCK Level 1 */\r\n#define TIM_LOCKLEVEL_2   TIM_BDTR_LOCK_1 /*!< LOCK Level 2 */\r\n#define TIM_LOCKLEVEL_3   TIM_BDTR_LOCK   /*!< LOCK Level 3 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Break_Input_enable_disable TIM Break Input Enable\r\n * @{\r\n */\r\n#define TIM_BREAK_ENABLE  TIM_BDTR_BKE /*!< Break input BRK is enabled  */\r\n#define TIM_BREAK_DISABLE 0x00000000U  /*!< Break input BRK is disabled */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Break_Polarity TIM Break Input Polarity\r\n * @{\r\n */\r\n#define TIM_BREAKPOLARITY_LOW  0x00000000U  /*!< Break input BRK is active low  */\r\n#define TIM_BREAKPOLARITY_HIGH TIM_BDTR_BKP /*!< Break input BRK is active high */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_AOE_Bit_Set_Reset TIM Automatic Output Enable\r\n * @{\r\n */\r\n#define TIM_AUTOMATICOUTPUT_DISABLE 0x00000000U /*!< MOE can be set only by software */\r\n#define TIM_AUTOMATICOUTPUT_ENABLE                                                       \\\r\n  TIM_BDTR_AOE /*!< MOE can be set by software or automatically at the next update event \\\r\n                   (if none of the break inputs BRK and BRK2 is active) */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Master_Mode_Selection TIM Master Mode Selection\r\n * @{\r\n */\r\n#define TIM_TRGO_RESET  0x00000000U                                     /*!< TIMx_EGR.UG bit is used as trigger output (TRGO)              */\r\n#define TIM_TRGO_ENABLE TIM_CR2_MMS_0                                   /*!< TIMx_CR1.CEN bit is used as trigger output (TRGO)             */\r\n#define TIM_TRGO_UPDATE TIM_CR2_MMS_1                                   /*!< Update event is used as trigger output (TRGO)                 */\r\n#define TIM_TRGO_OC1    (TIM_CR2_MMS_1 | TIM_CR2_MMS_0)                 /*!< Capture or a compare match 1 is used as trigger output (TRGO) */\r\n#define TIM_TRGO_OC1REF TIM_CR2_MMS_2                                   /*!< OC1REF signal is used as trigger output (TRGO)                */\r\n#define TIM_TRGO_OC2REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_0)                 /*!< OC2REF signal is used as trigger output(TRGO)                 */\r\n#define TIM_TRGO_OC3REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_1)                 /*!< OC3REF signal is used as trigger output(TRGO)                 */\r\n#define TIM_TRGO_OC4REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_1 | TIM_CR2_MMS_0) /*!< OC4REF signal is used as trigger output(TRGO)                 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Master_Slave_Mode TIM Master/Slave Mode\r\n * @{\r\n */\r\n#define TIM_MASTERSLAVEMODE_ENABLE  TIM_SMCR_MSM /*!< No action */\r\n#define TIM_MASTERSLAVEMODE_DISABLE 0x00000000U  /*!< Master/slave mode is selected */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Slave_Mode TIM Slave mode\r\n * @{\r\n */\r\n#define TIM_SLAVEMODE_DISABLE   0x00000000U                                        /*!< Slave mode disabled           */\r\n#define TIM_SLAVEMODE_RESET     TIM_SMCR_SMS_2                                     /*!< Reset Mode                    */\r\n#define TIM_SLAVEMODE_GATED     (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_0)                  /*!< Gated Mode                    */\r\n#define TIM_SLAVEMODE_TRIGGER   (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1)                  /*!< Trigger Mode                  */\r\n#define TIM_SLAVEMODE_EXTERNAL1 (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< External Clock Mode 1         */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_and_PWM_modes TIM Output Compare and PWM Modes\r\n * @{\r\n */\r\n#define TIM_OCMODE_TIMING          0x00000000U                                              /*!< Frozen                                 */\r\n#define TIM_OCMODE_ACTIVE          TIM_CCMR1_OC1M_0                                         /*!< Set channel to active level on match   */\r\n#define TIM_OCMODE_INACTIVE        TIM_CCMR1_OC1M_1                                         /*!< Set channel to inactive level on match */\r\n#define TIM_OCMODE_TOGGLE          (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0)                    /*!< Toggle                                 */\r\n#define TIM_OCMODE_PWM1            (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1)                    /*!< PWM mode 1                             */\r\n#define TIM_OCMODE_PWM2            (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0) /*!< PWM mode 2                             */\r\n#define TIM_OCMODE_FORCED_ACTIVE   (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_0)                    /*!< Force active level                     */\r\n#define TIM_OCMODE_FORCED_INACTIVE TIM_CCMR1_OC1M_2                                         /*!< Force inactive level                   */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Trigger_Selection TIM Trigger Selection\r\n * @{\r\n */\r\n#define TIM_TS_ITR0    0x00000000U                                     /*!< Internal Trigger 0 (ITR0)              */\r\n#define TIM_TS_ITR1    TIM_SMCR_TS_0                                   /*!< Internal Trigger 1 (ITR1)              */\r\n#define TIM_TS_ITR2    TIM_SMCR_TS_1                                   /*!< Internal Trigger 2 (ITR2)              */\r\n#define TIM_TS_ITR3    (TIM_SMCR_TS_0 | TIM_SMCR_TS_1)                 /*!< Internal Trigger 3 (ITR3)              */\r\n#define TIM_TS_TI1F_ED TIM_SMCR_TS_2                                   /*!< TI1 Edge Detector (TI1F_ED)            */\r\n#define TIM_TS_TI1FP1  (TIM_SMCR_TS_0 | TIM_SMCR_TS_2)                 /*!< Filtered Timer Input 1 (TI1FP1)        */\r\n#define TIM_TS_TI2FP2  (TIM_SMCR_TS_1 | TIM_SMCR_TS_2)                 /*!< Filtered Timer Input 2 (TI2FP2)        */\r\n#define TIM_TS_ETRF    (TIM_SMCR_TS_0 | TIM_SMCR_TS_1 | TIM_SMCR_TS_2) /*!< Filtered External Trigger input (ETRF) */\r\n#define TIM_TS_NONE    0x0000FFFFU                                     /*!< No trigger selected                    */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Trigger_Polarity TIM Trigger Polarity\r\n * @{\r\n */\r\n#define TIM_TRIGGERPOLARITY_INVERTED    TIM_ETRPOLARITY_INVERTED          /*!< Polarity for ETRx trigger sources             */\r\n#define TIM_TRIGGERPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED       /*!< Polarity for ETRx trigger sources             */\r\n#define TIM_TRIGGERPOLARITY_RISING      TIM_INPUTCHANNELPOLARITY_RISING   /*!< Polarity for TIxFPx or TI1_ED trigger sources */\r\n#define TIM_TRIGGERPOLARITY_FALLING     TIM_INPUTCHANNELPOLARITY_FALLING  /*!< Polarity for TIxFPx or TI1_ED trigger sources */\r\n#define TIM_TRIGGERPOLARITY_BOTHEDGE    TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Polarity for TIxFPx or TI1_ED trigger sources */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Trigger_Prescaler TIM Trigger Prescaler\r\n * @{\r\n */\r\n#define TIM_TRIGGERPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used                                                       */\r\n#define TIM_TRIGGERPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR Trigger: Capture performed once every 2 events. */\r\n#define TIM_TRIGGERPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR Trigger: Capture performed once every 4 events. */\r\n#define TIM_TRIGGERPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR Trigger: Capture performed once every 8 events. */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_TI1_Selection TIM TI1 Input Selection\r\n * @{\r\n */\r\n#define TIM_TI1SELECTION_CH1            0x00000000U  /*!< The TIMx_CH1 pin is connected to TI1 input */\r\n#define TIM_TI1SELECTION_XORCOMBINATION TIM_CR2_TI1S /*!< The TIMx_CH1, CH2 and CH3 pins are connected to the TI1 input (XOR combination) */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_DMA_Burst_Length TIM DMA Burst Length\r\n * @{\r\n */\r\n#define TIM_DMABURSTLENGTH_1TRANSFER   0x00000000U /*!< The transfer is done to 1 register starting trom TIMx_CR1 + TIMx_DCR.DBA   */\r\n#define TIM_DMABURSTLENGTH_2TRANSFERS  0x00000100U /*!< The transfer is done to 2 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_3TRANSFERS  0x00000200U /*!< The transfer is done to 3 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_4TRANSFERS  0x00000300U /*!< The transfer is done to 4 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_5TRANSFERS  0x00000400U /*!< The transfer is done to 5 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_6TRANSFERS  0x00000500U /*!< The transfer is done to 6 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_7TRANSFERS  0x00000600U /*!< The transfer is done to 7 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_8TRANSFERS  0x00000700U /*!< The transfer is done to 8 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_9TRANSFERS  0x00000800U /*!< The transfer is done to 9 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_10TRANSFERS 0x00000900U /*!< The transfer is done to 10 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_11TRANSFERS 0x00000A00U /*!< The transfer is done to 11 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_12TRANSFERS 0x00000B00U /*!< The transfer is done to 12 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_13TRANSFERS 0x00000C00U /*!< The transfer is done to 13 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_14TRANSFERS 0x00000D00U /*!< The transfer is done to 14 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_15TRANSFERS 0x00000E00U /*!< The transfer is done to 15 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_16TRANSFERS 0x00000F00U /*!< The transfer is done to 16 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_17TRANSFERS 0x00001000U /*!< The transfer is done to 17 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_18TRANSFERS 0x00001100U /*!< The transfer is done to 18 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Handle_index TIM DMA Handle Index\r\n * @{\r\n */\r\n#define TIM_DMA_ID_UPDATE      ((uint16_t)0x0000) /*!< Index of the DMA handle used for Update DMA requests */\r\n#define TIM_DMA_ID_CC1         ((uint16_t)0x0001) /*!< Index of the DMA handle used for Capture/Compare 1 DMA requests */\r\n#define TIM_DMA_ID_CC2         ((uint16_t)0x0002) /*!< Index of the DMA handle used for Capture/Compare 2 DMA requests */\r\n#define TIM_DMA_ID_CC3         ((uint16_t)0x0003) /*!< Index of the DMA handle used for Capture/Compare 3 DMA requests */\r\n#define TIM_DMA_ID_CC4         ((uint16_t)0x0004) /*!< Index of the DMA handle used for Capture/Compare 4 DMA requests */\r\n#define TIM_DMA_ID_COMMUTATION ((uint16_t)0x0005) /*!< Index of the DMA handle used for Commutation DMA requests */\r\n#define TIM_DMA_ID_TRIGGER     ((uint16_t)0x0006) /*!< Index of the DMA handle used for Trigger DMA requests */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup Channel_CC_State TIM Capture/Compare Channel State\r\n * @{\r\n */\r\n#define TIM_CCx_ENABLE   0x00000001U /*!< Input or output channel is enabled */\r\n#define TIM_CCx_DISABLE  0x00000000U /*!< Input or output channel is disabled */\r\n#define TIM_CCxN_ENABLE  0x00000004U /*!< Complementary output channel is enabled */\r\n#define TIM_CCxN_DISABLE 0x00000000U /*!< Complementary output channel is enabled */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported constants -------------------------------------------------*/\r\n\r\n/* Exported macros -----------------------------------------------------------*/\r\n/** @defgroup TIM_Exported_Macros TIM Exported Macros\r\n * @{\r\n */\r\n\r\n/** @brief  Reset TIM handle state.\r\n * @param  __HANDLE__ TIM handle.\r\n * @retval None\r\n */\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__)                              \\\r\n  do {                                                                        \\\r\n    (__HANDLE__)->State                        = HAL_TIM_STATE_RESET;         \\\r\n    (__HANDLE__)->ChannelState[0]              = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[1]              = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[2]              = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[3]              = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[0]             = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[1]             = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[2]             = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[3]             = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->DMABurstState                = HAL_DMA_BURST_STATE_RESET;   \\\r\n    (__HANDLE__)->Base_MspInitCallback         = NULL;                        \\\r\n    (__HANDLE__)->Base_MspDeInitCallback       = NULL;                        \\\r\n    (__HANDLE__)->IC_MspInitCallback           = NULL;                        \\\r\n    (__HANDLE__)->IC_MspDeInitCallback         = NULL;                        \\\r\n    (__HANDLE__)->OC_MspInitCallback           = NULL;                        \\\r\n    (__HANDLE__)->OC_MspDeInitCallback         = NULL;                        \\\r\n    (__HANDLE__)->PWM_MspInitCallback          = NULL;                        \\\r\n    (__HANDLE__)->PWM_MspDeInitCallback        = NULL;                        \\\r\n    (__HANDLE__)->OnePulse_MspInitCallback     = NULL;                        \\\r\n    (__HANDLE__)->OnePulse_MspDeInitCallback   = NULL;                        \\\r\n    (__HANDLE__)->Encoder_MspInitCallback      = NULL;                        \\\r\n    (__HANDLE__)->Encoder_MspDeInitCallback    = NULL;                        \\\r\n    (__HANDLE__)->HallSensor_MspInitCallback   = NULL;                        \\\r\n    (__HANDLE__)->HallSensor_MspDeInitCallback = NULL;                        \\\r\n  } while (0)\r\n#else\r\n#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__)                  \\\r\n  do {                                                            \\\r\n    (__HANDLE__)->State            = HAL_TIM_STATE_RESET;         \\\r\n    (__HANDLE__)->ChannelState[0]  = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[1]  = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[2]  = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[3]  = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[0] = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[1] = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[2] = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[3] = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->DMABurstState    = HAL_DMA_BURST_STATE_RESET;   \\\r\n  } while (0)\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @brief  Enable the TIM peripheral.\r\n * @param  __HANDLE__ TIM handle\r\n * @retval None\r\n */\r\n#define __HAL_TIM_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= (TIM_CR1_CEN))\r\n\r\n/**\r\n * @brief  Enable the TIM main Output.\r\n * @param  __HANDLE__ TIM handle\r\n * @retval None\r\n */\r\n#define __HAL_TIM_MOE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->BDTR |= (TIM_BDTR_MOE))\r\n\r\n/**\r\n * @brief  Disable the TIM peripheral.\r\n * @param  __HANDLE__ TIM handle\r\n * @retval None\r\n */\r\n#define __HAL_TIM_DISABLE(__HANDLE__)                                    \\\r\n  do {                                                                   \\\r\n    if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) {    \\\r\n      if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) { \\\r\n        (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN);                   \\\r\n      }                                                                  \\\r\n    }                                                                    \\\r\n  } while (0)\r\n\r\n/**\r\n * @brief  Disable the TIM main Output.\r\n * @param  __HANDLE__ TIM handle\r\n * @retval None\r\n * @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been disabled\r\n */\r\n#define __HAL_TIM_MOE_DISABLE(__HANDLE__)                                \\\r\n  do {                                                                   \\\r\n    if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) {    \\\r\n      if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) { \\\r\n        (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE);                 \\\r\n      }                                                                  \\\r\n    }                                                                    \\\r\n  } while (0)\r\n\r\n/**\r\n * @brief  Disable the TIM main Output.\r\n * @param  __HANDLE__ TIM handle\r\n * @retval None\r\n * @note The Main Output Enable of a timer instance is disabled unconditionally\r\n */\r\n#define __HAL_TIM_MOE_DISABLE_UNCONDITIONALLY(__HANDLE__) (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE)\r\n\r\n/** @brief  Enable the specified TIM interrupt.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __INTERRUPT__ specifies the TIM interrupt source to enable.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_IT_UPDATE: Update interrupt\r\n *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt\r\n *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt\r\n *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt\r\n *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt\r\n *            @arg TIM_IT_COM:   Commutation interrupt\r\n *            @arg TIM_IT_TRIGGER: Trigger interrupt\r\n *            @arg TIM_IT_BREAK: Break interrupt\r\n * @retval None\r\n */\r\n#define __HAL_TIM_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER |= (__INTERRUPT__))\r\n\r\n/** @brief  Disable the specified TIM interrupt.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __INTERRUPT__ specifies the TIM interrupt source to disable.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_IT_UPDATE: Update interrupt\r\n *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt\r\n *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt\r\n *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt\r\n *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt\r\n *            @arg TIM_IT_COM:   Commutation interrupt\r\n *            @arg TIM_IT_TRIGGER: Trigger interrupt\r\n *            @arg TIM_IT_BREAK: Break interrupt\r\n * @retval None\r\n */\r\n#define __HAL_TIM_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER &= ~(__INTERRUPT__))\r\n\r\n/** @brief  Enable the specified DMA request.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __DMA__ specifies the TIM DMA request to enable.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: Update DMA request\r\n *            @arg TIM_DMA_CC1:   Capture/Compare 1 DMA request\r\n *            @arg TIM_DMA_CC2:  Capture/Compare 2 DMA request\r\n *            @arg TIM_DMA_CC3:  Capture/Compare 3 DMA request\r\n *            @arg TIM_DMA_CC4:  Capture/Compare 4 DMA request\r\n *            @arg TIM_DMA_COM:   Commutation DMA request\r\n *            @arg TIM_DMA_TRIGGER: Trigger DMA request\r\n * @retval None\r\n */\r\n#define __HAL_TIM_ENABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER |= (__DMA__))\r\n\r\n/** @brief  Disable the specified DMA request.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __DMA__ specifies the TIM DMA request to disable.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: Update DMA request\r\n *            @arg TIM_DMA_CC1:   Capture/Compare 1 DMA request\r\n *            @arg TIM_DMA_CC2:  Capture/Compare 2 DMA request\r\n *            @arg TIM_DMA_CC3:  Capture/Compare 3 DMA request\r\n *            @arg TIM_DMA_CC4:  Capture/Compare 4 DMA request\r\n *            @arg TIM_DMA_COM:   Commutation DMA request\r\n *            @arg TIM_DMA_TRIGGER: Trigger DMA request\r\n * @retval None\r\n */\r\n#define __HAL_TIM_DISABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER &= ~(__DMA__))\r\n\r\n/** @brief  Check whether the specified TIM interrupt flag is set or not.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __FLAG__ specifies the TIM interrupt flag to check.\r\n *        This parameter can be one of the following values:\r\n *            @arg TIM_FLAG_UPDATE: Update interrupt flag\r\n *            @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag\r\n *            @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag\r\n *            @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag\r\n *            @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag\r\n *            @arg TIM_FLAG_COM:  Commutation interrupt flag\r\n *            @arg TIM_FLAG_TRIGGER: Trigger interrupt flag\r\n *            @arg TIM_FLAG_BREAK: Break interrupt flag\r\n *            @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag\r\n *            @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag\r\n *            @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag\r\n *            @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag\r\n * @retval The new state of __FLAG__ (TRUE or FALSE).\r\n */\r\n#define __HAL_TIM_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))\r\n\r\n/** @brief  Clear the specified TIM interrupt flag.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __FLAG__ specifies the TIM interrupt flag to clear.\r\n *        This parameter can be one of the following values:\r\n *            @arg TIM_FLAG_UPDATE: Update interrupt flag\r\n *            @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag\r\n *            @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag\r\n *            @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag\r\n *            @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag\r\n *            @arg TIM_FLAG_COM:  Commutation interrupt flag\r\n *            @arg TIM_FLAG_TRIGGER: Trigger interrupt flag\r\n *            @arg TIM_FLAG_BREAK: Break interrupt flag\r\n *            @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag\r\n *            @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag\r\n *            @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag\r\n *            @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag\r\n * @retval The new state of __FLAG__ (TRUE or FALSE).\r\n */\r\n#define __HAL_TIM_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__))\r\n\r\n/**\r\n * @brief  Check whether the specified TIM interrupt source is enabled or not.\r\n * @param  __HANDLE__ TIM handle\r\n * @param  __INTERRUPT__ specifies the TIM interrupt source to check.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_IT_UPDATE: Update interrupt\r\n *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt\r\n *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt\r\n *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt\r\n *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt\r\n *            @arg TIM_IT_COM:   Commutation interrupt\r\n *            @arg TIM_IT_TRIGGER: Trigger interrupt\r\n *            @arg TIM_IT_BREAK: Break interrupt\r\n * @retval The state of TIM_IT (SET or RESET).\r\n */\r\n#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)\r\n\r\n/** @brief Clear the TIM interrupt pending bits.\r\n * @param  __HANDLE__ TIM handle\r\n * @param  __INTERRUPT__ specifies the interrupt pending bit to clear.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_IT_UPDATE: Update interrupt\r\n *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt\r\n *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt\r\n *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt\r\n *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt\r\n *            @arg TIM_IT_COM:   Commutation interrupt\r\n *            @arg TIM_IT_TRIGGER: Trigger interrupt\r\n *            @arg TIM_IT_BREAK: Break interrupt\r\n * @retval None\r\n */\r\n#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__))\r\n\r\n/**\r\n  * @brief  Indicates whether or not the TIM Counter is used as downcounter.\r\n  * @param  __HANDLE__ TIM handle.\r\n  * @retval False (Counter used as upcounter) or True (Counter used as downcounter)\r\n  * @note This macro is particularly useful to get the counting mode when the timer operates in Center-aligned mode or Encoder\r\nmode.\r\n  */\r\n#define __HAL_TIM_IS_TIM_COUNTING_DOWN(__HANDLE__) (((__HANDLE__)->Instance->CR1 & (TIM_CR1_DIR)) == (TIM_CR1_DIR))\r\n\r\n/**\r\n * @brief  Set the TIM Prescaler on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __PRESC__ specifies the Prescaler new value.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_PRESCALER(__HANDLE__, __PRESC__) ((__HANDLE__)->Instance->PSC = (__PRESC__))\r\n\r\n/**\r\n * @brief  Set the TIM Counter Register value on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __COUNTER__ specifies the Counter register new value.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__) ((__HANDLE__)->Instance->CNT = (__COUNTER__))\r\n\r\n/**\r\n * @brief  Get the TIM Counter Register value on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT)\r\n */\r\n#define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT)\r\n\r\n/**\r\n * @brief  Set the TIM Autoreload Register value on runtime without calling another time any Init function.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __AUTORELOAD__ specifies the Counter register new value.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \\\r\n  do {                                                       \\\r\n    (__HANDLE__)->Instance->ARR = (__AUTORELOAD__);          \\\r\n    (__HANDLE__)->Init.Period   = (__AUTORELOAD__);          \\\r\n  } while (0)\r\n\r\n/**\r\n * @brief  Get the TIM Autoreload Register value on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR)\r\n */\r\n#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) ((__HANDLE__)->Instance->ARR)\r\n\r\n/**\r\n * @brief  Set the TIM Clock Division value on runtime without calling another time any Init function.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CKD__ specifies the clock division value.\r\n *          This parameter can be one of the following value:\r\n *            @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT\r\n *            @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT\r\n *            @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \\\r\n  do {                                                   \\\r\n    (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD);       \\\r\n    (__HANDLE__)->Instance->CR1 |= (__CKD__);            \\\r\n    (__HANDLE__)->Init.ClockDivision = (__CKD__);        \\\r\n  } while (0)\r\n\r\n/**\r\n * @brief  Get the TIM Clock Division value on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @retval The clock division can be one of the following values:\r\n *            @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT\r\n *            @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT\r\n *            @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT\r\n */\r\n#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)\r\n\r\n/**\r\n * @brief  Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() function.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  __ICPSC__ specifies the Input Capture4 prescaler new value.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPSC_DIV1: no prescaler\r\n *            @arg TIM_ICPSC_DIV2: capture is done once every 2 events\r\n *            @arg TIM_ICPSC_DIV4: capture is done once every 4 events\r\n *            @arg TIM_ICPSC_DIV8: capture is done once every 8 events\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__)   \\\r\n  do {                                                                  \\\r\n    TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__));            \\\r\n    TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \\\r\n  } while (0)\r\n\r\n/**\r\n * @brief  Get the TIM Input Capture prescaler on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: get input capture 1 prescaler value\r\n *            @arg TIM_CHANNEL_2: get input capture 2 prescaler value\r\n *            @arg TIM_CHANNEL_3: get input capture 3 prescaler value\r\n *            @arg TIM_CHANNEL_4: get input capture 4 prescaler value\r\n * @retval The input capture prescaler can be one of the following values:\r\n *            @arg TIM_ICPSC_DIV1: no prescaler\r\n *            @arg TIM_ICPSC_DIV2: capture is done once every 2 events\r\n *            @arg TIM_ICPSC_DIV4: capture is done once every 4 events\r\n *            @arg TIM_ICPSC_DIV8: capture is done once every 8 events\r\n */\r\n#define __HAL_TIM_GET_ICPRESCALER(__HANDLE__, __CHANNEL__)                                         \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC1PSC)         \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? (((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC2PSC) >> 8U) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC3PSC)         \\\r\n                                      : (((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC4PSC)) >> 8U)\r\n\r\n/**\r\n * @brief  Set the TIM Capture Compare Register value on runtime without calling another time ConfigChannel function.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  __COMPARE__ specifies the Capture Compare register new value.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__)                    \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) \\\r\n                                      : ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)))\r\n\r\n/**\r\n * @brief  Get the TIM Capture Compare Register value on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channel associated with the capture compare register\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: get capture/compare 1 register value\r\n *            @arg TIM_CHANNEL_2: get capture/compare 2 register value\r\n *            @arg TIM_CHANNEL_3: get capture/compare 3 register value\r\n *            @arg TIM_CHANNEL_4: get capture/compare 4 register value\r\n * @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy)\r\n */\r\n#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__)                 \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCR1) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) \\\r\n                                      : ((__HANDLE__)->Instance->CCR4))\r\n\r\n/**\r\n * @brief  Set the TIM Output compare preload.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval None\r\n */\r\n#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__)                               \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE))\r\n\r\n/**\r\n * @brief  Reset the TIM Output compare preload.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval None\r\n */\r\n#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__)                               \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE))\r\n\r\n/**\r\n * @brief  Enable fast mode for a given channel.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @note  When fast mode is enabled an active edge on the trigger input acts\r\n *        like a compare match on CCx output. Delay to sample the trigger\r\n *        input and to activate CCx output is reduced to 3 clock cycles.\r\n * @note  Fast mode acts only if the channel is configured in PWM1 or PWM2 mode.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__)                                  \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE))\r\n\r\n/**\r\n * @brief  Disable fast mode for a given channel.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @note  When fast mode is disabled CCx output behaves normally depending\r\n *        on counter and CCRx values even when the trigger is ON. The minimum\r\n *        delay to activate CCx output when an active edge occurs on the\r\n *        trigger input is 5 clock cycles.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__)                                  \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE))\r\n\r\n/**\r\n * @brief  Set the Update Request Source (URS) bit of the TIMx_CR1 register.\r\n * @param  __HANDLE__ TIM handle.\r\n * @note  When the URS bit of the TIMx_CR1 register is set, only counter\r\n *        overflow/underflow generates an update interrupt or DMA request (if\r\n *        enabled)\r\n * @retval None\r\n */\r\n#define __HAL_TIM_URS_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= TIM_CR1_URS)\r\n\r\n/**\r\n * @brief  Reset the Update Request Source (URS) bit of the TIMx_CR1 register.\r\n * @param  __HANDLE__ TIM handle.\r\n * @note  When the URS bit of the TIMx_CR1 register is reset, any of the\r\n *        following events generate an update interrupt or DMA request (if\r\n *        enabled):\r\n *           _ Counter overflow underflow\r\n *           _ Setting the UG bit\r\n *           _ Update generation through the slave mode controller\r\n * @retval None\r\n */\r\n#define __HAL_TIM_URS_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~TIM_CR1_URS)\r\n\r\n/**\r\n * @brief  Set the TIM Capture x input polarity on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  __POLARITY__ Polarity for TIx source\r\n *            @arg TIM_INPUTCHANNELPOLARITY_RISING: Rising Edge\r\n *            @arg TIM_INPUTCHANNELPOLARITY_FALLING: Falling Edge\r\n *            @arg TIM_INPUTCHANNELPOLARITY_BOTHEDGE: Rising and Falling Edge\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \\\r\n  do {                                                                       \\\r\n    TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__));                  \\\r\n    TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__));    \\\r\n  } while (0)\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported macros ----------------------------------------------------*/\r\n\r\n/* Private constants ---------------------------------------------------------*/\r\n/** @defgroup TIM_Private_Constants TIM Private Constants\r\n * @{\r\n */\r\n/* The counter of a timer instance is disabled only if all the CCx and CCxN\r\n   channels have been disabled */\r\n#define TIM_CCER_CCxE_MASK  ((uint32_t)(TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E))\r\n#define TIM_CCER_CCxNE_MASK ((uint32_t)(TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE))\r\n/**\r\n * @}\r\n */\r\n/* End of private constants --------------------------------------------------*/\r\n\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup TIM_Private_Macros TIM Private Macros\r\n * @{\r\n */\r\n#define IS_TIM_CLEARINPUT_SOURCE(__MODE__) (((__MODE__) == TIM_CLEARINPUTSOURCE_NONE) || ((__MODE__) == TIM_CLEARINPUTSOURCE_ETR))\r\n\r\n#define IS_TIM_DMA_BASE(__BASE__)                                                                                                                                                      \\\r\n  (((__BASE__) == TIM_DMABASE_CR1) || ((__BASE__) == TIM_DMABASE_CR2) || ((__BASE__) == TIM_DMABASE_SMCR) || ((__BASE__) == TIM_DMABASE_DIER) || ((__BASE__) == TIM_DMABASE_SR)        \\\r\n   || ((__BASE__) == TIM_DMABASE_EGR) || ((__BASE__) == TIM_DMABASE_CCMR1) || ((__BASE__) == TIM_DMABASE_CCMR2) || ((__BASE__) == TIM_DMABASE_CCER) || ((__BASE__) == TIM_DMABASE_CNT) \\\r\n   || ((__BASE__) == TIM_DMABASE_PSC) || ((__BASE__) == TIM_DMABASE_ARR) || ((__BASE__) == TIM_DMABASE_RCR) || ((__BASE__) == TIM_DMABASE_CCR1) || ((__BASE__) == TIM_DMABASE_CCR2)    \\\r\n   || ((__BASE__) == TIM_DMABASE_CCR3) || ((__BASE__) == TIM_DMABASE_CCR4) || ((__BASE__) == TIM_DMABASE_BDTR))\r\n\r\n#define IS_TIM_EVENT_SOURCE(__SOURCE__) ((((__SOURCE__)&0xFFFFFF00U) == 0x00000000U) && ((__SOURCE__) != 0x00000000U))\r\n\r\n#define IS_TIM_COUNTER_MODE(__MODE__)                                                                                                                                             \\\r\n  (((__MODE__) == TIM_COUNTERMODE_UP) || ((__MODE__) == TIM_COUNTERMODE_DOWN) || ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED1) || ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED2) \\\r\n   || ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED3))\r\n\r\n#define IS_TIM_CLOCKDIVISION_DIV(__DIV__) (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || ((__DIV__) == TIM_CLOCKDIVISION_DIV2) || ((__DIV__) == TIM_CLOCKDIVISION_DIV4))\r\n\r\n#define IS_TIM_AUTORELOAD_PRELOAD(PRELOAD) (((PRELOAD) == TIM_AUTORELOAD_PRELOAD_DISABLE) || ((PRELOAD) == TIM_AUTORELOAD_PRELOAD_ENABLE))\r\n\r\n#define IS_TIM_FAST_STATE(__STATE__) (((__STATE__) == TIM_OCFAST_DISABLE) || ((__STATE__) == TIM_OCFAST_ENABLE))\r\n\r\n#define IS_TIM_OC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_OCPOLARITY_HIGH) || ((__POLARITY__) == TIM_OCPOLARITY_LOW))\r\n\r\n#define IS_TIM_OCN_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_OCNPOLARITY_HIGH) || ((__POLARITY__) == TIM_OCNPOLARITY_LOW))\r\n\r\n#define IS_TIM_OCIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCIDLESTATE_SET) || ((__STATE__) == TIM_OCIDLESTATE_RESET))\r\n\r\n#define IS_TIM_OCNIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCNIDLESTATE_SET) || ((__STATE__) == TIM_OCNIDLESTATE_RESET))\r\n\r\n#define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_RISING) || ((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_FALLING))\r\n\r\n#define IS_TIM_IC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ICPOLARITY_RISING) || ((__POLARITY__) == TIM_ICPOLARITY_FALLING) || ((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE))\r\n\r\n#define IS_TIM_IC_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_ICSELECTION_DIRECTTI) || ((__SELECTION__) == TIM_ICSELECTION_INDIRECTTI) || ((__SELECTION__) == TIM_ICSELECTION_TRC))\r\n\r\n#define IS_TIM_IC_PRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_ICPSC_DIV1) || ((__PRESCALER__) == TIM_ICPSC_DIV2) || ((__PRESCALER__) == TIM_ICPSC_DIV4) || ((__PRESCALER__) == TIM_ICPSC_DIV8))\r\n\r\n#define IS_TIM_OPM_MODE(__MODE__) (((__MODE__) == TIM_OPMODE_SINGLE) || ((__MODE__) == TIM_OPMODE_REPETITIVE))\r\n\r\n#define IS_TIM_ENCODER_MODE(__MODE__) (((__MODE__) == TIM_ENCODERMODE_TI1) || ((__MODE__) == TIM_ENCODERMODE_TI2) || ((__MODE__) == TIM_ENCODERMODE_TI12))\r\n\r\n#define IS_TIM_DMA_SOURCE(__SOURCE__) ((((__SOURCE__)&0xFFFF80FFU) == 0x00000000U) && ((__SOURCE__) != 0x00000000U))\r\n\r\n#define IS_TIM_CHANNELS(__CHANNEL__) \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1) || ((__CHANNEL__) == TIM_CHANNEL_2) || ((__CHANNEL__) == TIM_CHANNEL_3) || ((__CHANNEL__) == TIM_CHANNEL_4) || ((__CHANNEL__) == TIM_CHANNEL_ALL))\r\n\r\n#define IS_TIM_OPM_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || ((__CHANNEL__) == TIM_CHANNEL_2))\r\n\r\n#define IS_TIM_COMPLEMENTARY_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || ((__CHANNEL__) == TIM_CHANNEL_2) || ((__CHANNEL__) == TIM_CHANNEL_3))\r\n\r\n#define IS_TIM_CLOCKSOURCE(__CLOCK__)                                                                                                                                       \\\r\n  (((__CLOCK__) == TIM_CLOCKSOURCE_INTERNAL) || ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE2) || ((__CLOCK__) == TIM_CLOCKSOURCE_ITR0) || ((__CLOCK__) == TIM_CLOCKSOURCE_ITR1) \\\r\n   || ((__CLOCK__) == TIM_CLOCKSOURCE_ITR2) || ((__CLOCK__) == TIM_CLOCKSOURCE_ITR3) || ((__CLOCK__) == TIM_CLOCKSOURCE_TI1ED) || ((__CLOCK__) == TIM_CLOCKSOURCE_TI1)      \\\r\n   || ((__CLOCK__) == TIM_CLOCKSOURCE_TI2) || ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE1))\r\n\r\n#define IS_TIM_CLOCKPOLARITY(__POLARITY__)                                                                                                             \\\r\n  (((__POLARITY__) == TIM_CLOCKPOLARITY_INVERTED) || ((__POLARITY__) == TIM_CLOCKPOLARITY_NONINVERTED) || ((__POLARITY__) == TIM_CLOCKPOLARITY_RISING) \\\r\n   || ((__POLARITY__) == TIM_CLOCKPOLARITY_FALLING) || ((__POLARITY__) == TIM_CLOCKPOLARITY_BOTHEDGE))\r\n\r\n#define IS_TIM_CLOCKPRESCALER(__PRESCALER__) \\\r\n  (((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV1) || ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV2) || ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV4) || ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV8))\r\n\r\n#define IS_TIM_CLOCKFILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU)\r\n\r\n#define IS_TIM_CLEARINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_CLEARINPUTPOLARITY_INVERTED) || ((__POLARITY__) == TIM_CLEARINPUTPOLARITY_NONINVERTED))\r\n\r\n#define IS_TIM_CLEARINPUT_PRESCALER(__PRESCALER__)                                                                                                             \\\r\n  (((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV1) || ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV2) || ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV4) \\\r\n   || ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV8))\r\n\r\n#define IS_TIM_CLEARINPUT_FILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU)\r\n\r\n#define IS_TIM_OSSR_STATE(__STATE__) (((__STATE__) == TIM_OSSR_ENABLE) || ((__STATE__) == TIM_OSSR_DISABLE))\r\n\r\n#define IS_TIM_OSSI_STATE(__STATE__) (((__STATE__) == TIM_OSSI_ENABLE) || ((__STATE__) == TIM_OSSI_DISABLE))\r\n\r\n#define IS_TIM_LOCK_LEVEL(__LEVEL__) (((__LEVEL__) == TIM_LOCKLEVEL_OFF) || ((__LEVEL__) == TIM_LOCKLEVEL_1) || ((__LEVEL__) == TIM_LOCKLEVEL_2) || ((__LEVEL__) == TIM_LOCKLEVEL_3))\r\n\r\n#define IS_TIM_BREAK_FILTER(__BRKFILTER__) ((__BRKFILTER__) <= 0xFUL)\r\n\r\n#define IS_TIM_BREAK_STATE(__STATE__) (((__STATE__) == TIM_BREAK_ENABLE) || ((__STATE__) == TIM_BREAK_DISABLE))\r\n\r\n#define IS_TIM_BREAK_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_BREAKPOLARITY_LOW) || ((__POLARITY__) == TIM_BREAKPOLARITY_HIGH))\r\n\r\n#define IS_TIM_AUTOMATIC_OUTPUT_STATE(__STATE__) (((__STATE__) == TIM_AUTOMATICOUTPUT_ENABLE) || ((__STATE__) == TIM_AUTOMATICOUTPUT_DISABLE))\r\n\r\n#define IS_TIM_TRGO_SOURCE(__SOURCE__)                                                                                                                                               \\\r\n  (((__SOURCE__) == TIM_TRGO_RESET) || ((__SOURCE__) == TIM_TRGO_ENABLE) || ((__SOURCE__) == TIM_TRGO_UPDATE) || ((__SOURCE__) == TIM_TRGO_OC1) || ((__SOURCE__) == TIM_TRGO_OC1REF) \\\r\n   || ((__SOURCE__) == TIM_TRGO_OC2REF) || ((__SOURCE__) == TIM_TRGO_OC3REF) || ((__SOURCE__) == TIM_TRGO_OC4REF))\r\n\r\n#define IS_TIM_MSM_STATE(__STATE__) (((__STATE__) == TIM_MASTERSLAVEMODE_ENABLE) || ((__STATE__) == TIM_MASTERSLAVEMODE_DISABLE))\r\n\r\n#define IS_TIM_SLAVE_MODE(__MODE__)                                                                                                                             \\\r\n  (((__MODE__) == TIM_SLAVEMODE_DISABLE) || ((__MODE__) == TIM_SLAVEMODE_RESET) || ((__MODE__) == TIM_SLAVEMODE_GATED) || ((__MODE__) == TIM_SLAVEMODE_TRIGGER) \\\r\n   || ((__MODE__) == TIM_SLAVEMODE_EXTERNAL1))\r\n\r\n#define IS_TIM_PWM_MODE(__MODE__) (((__MODE__) == TIM_OCMODE_PWM1) || ((__MODE__) == TIM_OCMODE_PWM2))\r\n\r\n#define IS_TIM_OC_MODE(__MODE__)                                                                                                                                                                  \\\r\n  (((__MODE__) == TIM_OCMODE_TIMING) || ((__MODE__) == TIM_OCMODE_ACTIVE) || ((__MODE__) == TIM_OCMODE_INACTIVE) || ((__MODE__) == TIM_OCMODE_TOGGLE) || ((__MODE__) == TIM_OCMODE_FORCED_ACTIVE) \\\r\n   || ((__MODE__) == TIM_OCMODE_FORCED_INACTIVE))\r\n\r\n#define IS_TIM_TRIGGER_SELECTION(__SELECTION__)                                                                                                                                        \\\r\n  (((__SELECTION__) == TIM_TS_ITR0) || ((__SELECTION__) == TIM_TS_ITR1) || ((__SELECTION__) == TIM_TS_ITR2) || ((__SELECTION__) == TIM_TS_ITR3) || ((__SELECTION__) == TIM_TS_TI1F_ED) \\\r\n   || ((__SELECTION__) == TIM_TS_TI1FP1) || ((__SELECTION__) == TIM_TS_TI2FP2) || ((__SELECTION__) == TIM_TS_ETRF))\r\n\r\n#define IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(__SELECTION__) \\\r\n  (((__SELECTION__) == TIM_TS_ITR0) || ((__SELECTION__) == TIM_TS_ITR1) || ((__SELECTION__) == TIM_TS_ITR2) || ((__SELECTION__) == TIM_TS_ITR3) || ((__SELECTION__) == TIM_TS_NONE))\r\n\r\n#define IS_TIM_TRIGGERPOLARITY(__POLARITY__)                                                                                                                 \\\r\n  (((__POLARITY__) == TIM_TRIGGERPOLARITY_INVERTED) || ((__POLARITY__) == TIM_TRIGGERPOLARITY_NONINVERTED) || ((__POLARITY__) == TIM_TRIGGERPOLARITY_RISING) \\\r\n   || ((__POLARITY__) == TIM_TRIGGERPOLARITY_FALLING) || ((__POLARITY__) == TIM_TRIGGERPOLARITY_BOTHEDGE))\r\n\r\n#define IS_TIM_TRIGGERPRESCALER(__PRESCALER__) \\\r\n  (((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV1) || ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV2) || ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV4) || ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV8))\r\n\r\n#define IS_TIM_TRIGGERFILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU)\r\n\r\n#define IS_TIM_TI1SELECTION(__TI1SELECTION__) (((__TI1SELECTION__) == TIM_TI1SELECTION_CH1) || ((__TI1SELECTION__) == TIM_TI1SELECTION_XORCOMBINATION))\r\n\r\n#define IS_TIM_DMA_LENGTH(__LENGTH__)                                                                                                                          \\\r\n  (((__LENGTH__) == TIM_DMABURSTLENGTH_1TRANSFER) || ((__LENGTH__) == TIM_DMABURSTLENGTH_2TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_3TRANSFERS)        \\\r\n   || ((__LENGTH__) == TIM_DMABURSTLENGTH_4TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_5TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_6TRANSFERS)    \\\r\n   || ((__LENGTH__) == TIM_DMABURSTLENGTH_7TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_8TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_9TRANSFERS)    \\\r\n   || ((__LENGTH__) == TIM_DMABURSTLENGTH_10TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_11TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_12TRANSFERS) \\\r\n   || ((__LENGTH__) == TIM_DMABURSTLENGTH_13TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_14TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_15TRANSFERS) \\\r\n   || ((__LENGTH__) == TIM_DMABURSTLENGTH_16TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_17TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_18TRANSFERS))\r\n\r\n#define IS_TIM_DMA_DATA_LENGTH(LENGTH) (((LENGTH) >= 0x1U) && ((LENGTH) < 0x10000U))\r\n\r\n#define IS_TIM_IC_FILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU)\r\n\r\n#define IS_TIM_DEADTIME(__DEADTIME__) ((__DEADTIME__) <= 0xFFU)\r\n\r\n#define IS_TIM_SLAVEMODE_TRIGGER_ENABLED(__TRIGGER__) ((__TRIGGER__) == TIM_SLAVEMODE_TRIGGER)\r\n\r\n#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__)                           \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__))         \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__))         \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))\r\n\r\n#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__)                                  \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC))\r\n\r\n#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__)                           \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__))         \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) \\\r\n                                      : ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))\r\n\r\n#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__)                                                  \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC3P))                  \\\r\n                                      : ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC4P)))\r\n\r\n#define TIM_CHANNEL_STATE_GET(__HANDLE__, __CHANNEL__)                \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? (__HANDLE__)->ChannelState[0] \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? (__HANDLE__)->ChannelState[1] \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? (__HANDLE__)->ChannelState[2] \\\r\n                                      : (__HANDLE__)->ChannelState[3])\r\n\r\n#define TIM_CHANNEL_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__)                     \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->ChannelState[0] = (__CHANNEL_STATE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->ChannelState[1] = (__CHANNEL_STATE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->ChannelState[2] = (__CHANNEL_STATE__)) \\\r\n                                      : ((__HANDLE__)->ChannelState[3] = (__CHANNEL_STATE__)))\r\n\r\n#define TIM_CHANNEL_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__) \\\r\n  do {                                                           \\\r\n    (__HANDLE__)->ChannelState[0] = (__CHANNEL_STATE__);         \\\r\n    (__HANDLE__)->ChannelState[1] = (__CHANNEL_STATE__);         \\\r\n    (__HANDLE__)->ChannelState[2] = (__CHANNEL_STATE__);         \\\r\n    (__HANDLE__)->ChannelState[3] = (__CHANNEL_STATE__);         \\\r\n  } while (0)\r\n\r\n#define TIM_CHANNEL_N_STATE_GET(__HANDLE__, __CHANNEL__)               \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? (__HANDLE__)->ChannelNState[0] \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? (__HANDLE__)->ChannelNState[1] \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? (__HANDLE__)->ChannelNState[2] \\\r\n                                      : (__HANDLE__)->ChannelNState[3])\r\n\r\n#define TIM_CHANNEL_N_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__)                    \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->ChannelNState[0] = (__CHANNEL_STATE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->ChannelNState[1] = (__CHANNEL_STATE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->ChannelNState[2] = (__CHANNEL_STATE__)) \\\r\n                                      : ((__HANDLE__)->ChannelNState[3] = (__CHANNEL_STATE__)))\r\n\r\n#define TIM_CHANNEL_N_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__) \\\r\n  do {                                                             \\\r\n    (__HANDLE__)->ChannelNState[0] = (__CHANNEL_STATE__);          \\\r\n    (__HANDLE__)->ChannelNState[1] = (__CHANNEL_STATE__);          \\\r\n    (__HANDLE__)->ChannelNState[2] = (__CHANNEL_STATE__);          \\\r\n    (__HANDLE__)->ChannelNState[3] = (__CHANNEL_STATE__);          \\\r\n  } while (0)\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of private macros -----------------------------------------------------*/\r\n\r\n/* Include TIM HAL Extended module */\r\n#include \"stm32f1xx_hal_tim_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup TIM_Exported_Functions TIM Exported Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group1 TIM Time Base functions\r\n *  @brief   Time Base functions\r\n * @{\r\n */\r\n/* Time Base functions ********************************************************/\r\nHAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group2 TIM Output Compare functions\r\n *  @brief   TIM Output Compare functions\r\n * @{\r\n */\r\n/* Timer Output Compare functions *********************************************/\r\nHAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group3 TIM PWM functions\r\n *  @brief   TIM PWM functions\r\n * @{\r\n */\r\n/* Timer PWM functions ********************************************************/\r\nHAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group4 TIM Input Capture functions\r\n *  @brief   TIM Input Capture functions\r\n * @{\r\n */\r\n/* Timer Input Capture functions **********************************************/\r\nHAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group5 TIM One Pulse functions\r\n *  @brief   TIM One Pulse functions\r\n * @{\r\n */\r\n/* Timer One Pulse functions **************************************************/\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode);\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group6 TIM Encoder functions\r\n *  @brief   TIM Encoder functions\r\n * @{\r\n */\r\n/* Timer Encoder functions ****************************************************/\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_InitTypeDef *sConfig);\r\nHAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group7 TIM IRQ handler management\r\n *  @brief   IRQ handler management\r\n * @{\r\n */\r\n/* Interrupt Handler functions  ***********************************************/\r\nvoid HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions\r\n *  @brief   Peripheral Control functions\r\n * @{\r\n */\r\n/* Control functions  *********************************************************/\r\nHAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel);\r\nHAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig);\r\nHAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection);\r\nHAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);\r\nHAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength, uint32_t DataLength);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_MultiReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength, uint32_t DataLength);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);\r\nHAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource);\r\nuint32_t          HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions\r\n *  @brief   TIM Callbacks functions\r\n * @{\r\n */\r\n/* Callback in non blocking modes (Interrupt and DMA) *************************/\r\nvoid HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim);\r\n\r\n/* Callbacks Register/UnRegister functions  ***********************************/\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\nHAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback);\r\nHAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions\r\n *  @brief  Peripheral State functions\r\n * @{\r\n */\r\n/* Peripheral State functions  ************************************************/\r\nHAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim);\r\n\r\n/* Peripheral Channel state functions  ************************************************/\r\nHAL_TIM_ActiveChannel        HAL_TIM_GetActiveChannel(TIM_HandleTypeDef *htim);\r\nHAL_TIM_ChannelStateTypeDef  HAL_TIM_GetChannelState(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(TIM_HandleTypeDef *htim);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported functions -------------------------------------------------*/\r\n\r\n/* Private functions----------------------------------------------------------*/\r\n/** @defgroup TIM_Private_Functions TIM Private Functions\r\n * @{\r\n */\r\nvoid TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure);\r\nvoid TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);\r\nvoid TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);\r\nvoid TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter);\r\n\r\nvoid TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma);\r\nvoid TIM_DMAError(DMA_HandleTypeDef *hdma);\r\nvoid TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma);\r\nvoid TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma);\r\nvoid TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\nvoid TIM_ResetCallback(TIM_HandleTypeDef *htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of private functions --------------------------------------------------*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* STM32F1xx_HAL_TIM_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_tim_ex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of TIM HAL Extended module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef STM32F1xx_HAL_TIM_EX_H\r\n#define STM32F1xx_HAL_TIM_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup TIMEx\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup TIMEx_Exported_Types TIM Extended Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  TIM Hall sensor Configuration Structure definition\r\n */\r\n\r\ntypedef struct {\r\n  uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal.\r\n                             This parameter can be a value of @ref TIM_Input_Capture_Polarity */\r\n\r\n  uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler.\r\n                              This parameter can be a value of @ref TIM_Input_Capture_Prescaler */\r\n\r\n  uint32_t IC1Filter; /*!< Specifies the input capture filter.\r\n                           This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n\r\n  uint32_t Commutation_Delay; /*!< Specifies the pulse value to be loaded into the Capture Compare Register.\r\n                                   This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */\r\n} TIM_HallSensor_InitTypeDef;\r\n/**\r\n * @}\r\n */\r\n/* End of exported types -----------------------------------------------------*/\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup TIMEx_Exported_Constants TIM Extended Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup TIMEx_Remap TIM Extended Remapping\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported constants -------------------------------------------------*/\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup TIMEx_Exported_Macros TIM Extended Exported Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported macro -----------------------------------------------------*/\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/** @defgroup TIMEx_Private_Macros TIM Extended Private Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of private macro ------------------------------------------------------*/\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup TIMEx_Exported_Functions TIM Extended Exported Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions\r\n *  @brief    Timer Hall Sensor functions\r\n * @{\r\n */\r\n/*  Timer Hall Sensor functions  **********************************************/\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig);\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim);\r\n\r\nvoid HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim);\r\n\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions\r\n *  @brief   Timer Complementary Output Compare functions\r\n * @{\r\n */\r\n/*  Timer Complementary Output Compare functions  *****************************/\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions\r\n *  @brief    Timer Complementary PWM functions\r\n * @{\r\n */\r\n/*  Timer Complementary PWM functions  ****************************************/\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions\r\n *  @brief    Timer Complementary One Pulse functions\r\n * @{\r\n */\r\n/*  Timer Complementary One Pulse functions  **********************************/\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\n\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions\r\n *  @brief    Peripheral Control functions\r\n * @{\r\n */\r\n/* Extended Control functions  ************************************************/\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);\r\nHAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig);\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);\r\nHAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group6 Extended Callbacks functions\r\n * @brief    Extended Callbacks functions\r\n * @{\r\n */\r\n/* Extended Callback **********************************************************/\r\nvoid HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIMEx_CommutHalfCpltCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group7 Extended Peripheral State functions\r\n * @brief    Extended Peripheral State functions\r\n * @{\r\n */\r\n/* Extended Peripheral State functions  ***************************************/\r\nHAL_TIM_StateTypeDef        HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_ChannelStateTypeDef HAL_TIMEx_GetChannelNState(TIM_HandleTypeDef *htim, uint32_t ChannelN);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported functions -------------------------------------------------*/\r\n\r\n/* Private functions----------------------------------------------------------*/\r\n/** @addtogroup TIMEx_Private_Functions TIMEx Private Functions\r\n * @{\r\n */\r\nvoid TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma);\r\nvoid TIMEx_DMACommutationHalfCplt(DMA_HandleTypeDef *hdma);\r\n/**\r\n * @}\r\n */\r\n/* End of private functions --------------------------------------------------*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* STM32F1xx_HAL_TIM_EX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal.c\r\n  * @author  MCD Application Team\r\n  * @brief   HAL module driver.\r\n  *          This is the common part of the HAL initialization\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n    [..]\r\n    The common HAL driver contains a set of generic and common APIs that can be\r\n    used by the PPP peripheral drivers and the user to start using the HAL.\r\n    [..]\r\n    The HAL contains two APIs' categories:\r\n         (+) Common HAL APIs\r\n         (+) Services HAL APIs\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup HAL HAL\r\n * @brief HAL module driver.\r\n * @{\r\n */\r\n\r\n#ifdef HAL_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_Private_Constants HAL Private Constants\r\n * @{\r\n */\r\n/**\r\n * @brief STM32F1xx HAL Driver version number V1.1.3\r\n */\r\n#define __STM32F1xx_HAL_VERSION_MAIN (0x01U) /*!< [31:24] main version */\r\n#define __STM32F1xx_HAL_VERSION_SUB1 (0x01U) /*!< [23:16] sub1 version */\r\n#define __STM32F1xx_HAL_VERSION_SUB2 (0x03U) /*!< [15:8]  sub2 version */\r\n#define __STM32F1xx_HAL_VERSION_RC   (0x00U) /*!< [7:0]  release candidate */\r\n#define __STM32F1xx_HAL_VERSION      ((__STM32F1xx_HAL_VERSION_MAIN << 24) | (__STM32F1xx_HAL_VERSION_SUB1 << 16) | (__STM32F1xx_HAL_VERSION_SUB2 << 8) | (__STM32F1xx_HAL_VERSION_RC))\r\n\r\n#define IDCODE_DEVID_MASK 0x00000FFFU\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_Private_Variables HAL Private Variables\r\n * @{\r\n */\r\n__IO uint32_t       uwTick;\r\nuint32_t            uwTickPrio = (1UL << __NVIC_PRIO_BITS); /* Invalid PRIO */\r\nHAL_TickFreqTypeDef uwTickFreq = HAL_TICK_FREQ_DEFAULT;     /* 1KHz */\r\n/**\r\n * @}\r\n */\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Exported functions ---------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_Exported_Functions HAL Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup HAL_Exported_Functions_Group1 Initialization and de-initialization Functions\r\n *  @brief    Initialization and de-initialization functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n              ##### Initialization and de-initialization functions #####\r\n ===============================================================================\r\n   [..]  This section provides functions allowing to:\r\n      (+) Initializes the Flash interface, the NVIC allocation and initial clock\r\n          configuration. It initializes the systick also when timeout is needed\r\n          and the backup domain when enabled.\r\n      (+) de-Initializes common part of the HAL.\r\n      (+) Configure The time base source to have 1ms time base with a dedicated\r\n          Tick interrupt priority.\r\n        (++) SysTick timer is used by default as source of time base, but user\r\n             can eventually implement his proper time base source (a general purpose\r\n             timer for example or other time source), keeping in mind that Time base\r\n             duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and\r\n             handled in milliseconds basis.\r\n        (++) Time base configuration function (HAL_InitTick ()) is called automatically\r\n             at the beginning of the program after reset by HAL_Init() or at any time\r\n             when clock is configured, by HAL_RCC_ClockConfig().\r\n        (++) Source of time base is configured  to generate interrupts at regular\r\n             time intervals. Care must be taken if HAL_Delay() is called from a\r\n             peripheral ISR process, the Tick interrupt line must have higher priority\r\n            (numerically lower) than the peripheral interrupt. Otherwise the caller\r\n            ISR process will be blocked.\r\n       (++) functions affecting time base configurations are declared as __weak\r\n             to make  override possible  in case of other  implementations in user file.\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  This function is used to initialize the HAL Library; it must be the first\r\n *         instruction to be executed in the main program (before to call any other\r\n *         HAL function), it performs the following:\r\n *           Configure the Flash prefetch.\r\n *           Configures the SysTick to generate an interrupt each 1 millisecond,\r\n *           which is clocked by the HSI (at this stage, the clock is not yet\r\n *           configured and thus the system is running from the internal HSI at 16 MHz).\r\n *           Set NVIC Group Priority to 4.\r\n *           Calls the HAL_MspInit() callback function defined in user file\r\n *           \"stm32f1xx_hal_msp.c\" to do the global low level hardware initialization\r\n *\r\n * @note   SysTick is used as time base for the HAL_Delay() function, the application\r\n *         need to ensure that the SysTick time base is always set to 1 millisecond\r\n *         to have correct HAL operation.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_Init(void) {\r\n  /* Configure Flash prefetch */\r\n#if (PREFETCH_ENABLE != 0)\r\n#if defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) ||    \\\r\n    defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n\r\n  /* Prefetch buffer is not available on value line devices */\r\n  __HAL_FLASH_PREFETCH_BUFFER_ENABLE();\r\n#endif\r\n#endif /* PREFETCH_ENABLE */\r\n\r\n  /* Set Interrupt Group Priority */\r\n  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);\r\n\r\n  /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */\r\n  HAL_InitTick(TICK_INT_PRIORITY);\r\n\r\n  /* Init the low level hardware */\r\n  HAL_MspInit();\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief This function de-Initializes common part of the HAL and stops the systick.\r\n *        of time base.\r\n * @note This function is optional.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DeInit(void) {\r\n  /* Reset of all peripherals */\r\n  __HAL_RCC_APB1_FORCE_RESET();\r\n  __HAL_RCC_APB1_RELEASE_RESET();\r\n\r\n  __HAL_RCC_APB2_FORCE_RESET();\r\n  __HAL_RCC_APB2_RELEASE_RESET();\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  __HAL_RCC_AHB_FORCE_RESET();\r\n  __HAL_RCC_AHB_RELEASE_RESET();\r\n#endif\r\n\r\n  /* De-Init the low level hardware */\r\n  HAL_MspDeInit();\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initialize the MSP.\r\n * @retval None\r\n */\r\n__weak void HAL_MspInit(void) {\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the MSP.\r\n * @retval None\r\n */\r\n__weak void HAL_MspDeInit(void) {\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief This function configures the source of the time base.\r\n *        The time source is configured  to have 1ms time base with a dedicated\r\n *        Tick interrupt priority.\r\n * @note This function is called  automatically at the beginning of program after\r\n *       reset by HAL_Init() or at any time when clock is reconfigured  by HAL_RCC_ClockConfig().\r\n * @note In the default implementation, SysTick timer is the source of time base.\r\n *       It is used to generate interrupts at regular time intervals.\r\n *       Care must be taken if HAL_Delay() is called from a peripheral ISR process,\r\n *       The SysTick interrupt must have higher priority (numerically lower)\r\n *       than the peripheral interrupt. Otherwise the caller ISR process will be blocked.\r\n *       The function is declared as __weak  to be overwritten  in case of other\r\n *       implementation  in user file.\r\n * @param TickPriority Tick interrupt priority.\r\n * @retval HAL status\r\n */\r\n__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {\r\n  /* Configure the SysTick to have interrupt in 1ms time basis*/\r\n  if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Configure the SysTick IRQ priority */\r\n  if (TickPriority < (1UL << __NVIC_PRIO_BITS)) {\r\n    HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);\r\n    uwTickPrio = TickPriority;\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_Exported_Functions_Group2 HAL Control functions\r\n  *  @brief    HAL Control functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### HAL Control functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Provide a tick value in millisecond\r\n      (+) Provide a blocking delay in millisecond\r\n      (+) Suspend the time base source interrupt\r\n      (+) Resume the time base source interrupt\r\n      (+) Get the HAL API driver version\r\n      (+) Get the device identifier\r\n      (+) Get the device revision identifier\r\n      (+) Enable/Disable Debug module during SLEEP mode\r\n      (+) Enable/Disable Debug module during STOP mode\r\n      (+) Enable/Disable Debug module during STANDBY mode\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief This function is called to increment  a global variable \"uwTick\"\r\n *        used as application time base.\r\n * @note In the default implementation, this variable is incremented each 1ms\r\n *       in SysTick ISR.\r\n * @note This function is declared as __weak to be overwritten in case of other\r\n *      implementations in user file.\r\n * @retval None\r\n */\r\n__weak void HAL_IncTick(void) { uwTick += uwTickFreq; }\r\n\r\n/**\r\n * @brief Provides a tick value in millisecond.\r\n * @note  This function is declared as __weak to be overwritten in case of other\r\n *       implementations in user file.\r\n * @retval tick value\r\n */\r\n__weak uint32_t HAL_GetTick(void) { return uwTick; }\r\n\r\n/**\r\n * @brief This function returns a tick priority.\r\n * @retval tick priority\r\n */\r\nuint32_t HAL_GetTickPrio(void) { return uwTickPrio; }\r\n\r\n/**\r\n * @brief Set new tick Freq.\r\n * @retval Status\r\n */\r\nHAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n  assert_param(IS_TICKFREQ(Freq));\r\n\r\n  if (uwTickFreq != Freq) {\r\n    uwTickFreq = Freq;\r\n\r\n    /* Apply the new tick Freq  */\r\n    status = HAL_InitTick(uwTickPrio);\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief Return tick frequency.\r\n * @retval tick period in Hz\r\n */\r\nHAL_TickFreqTypeDef HAL_GetTickFreq(void) { return uwTickFreq; }\r\n\r\n/**\r\n * @brief This function provides minimum delay (in milliseconds) based\r\n *        on variable incremented.\r\n * @note In the default implementation , SysTick timer is the source of time base.\r\n *       It is used to generate interrupts at regular time intervals where uwTick\r\n *       is incremented.\r\n * @note This function is declared as __weak to be overwritten in case of other\r\n *       implementations in user file.\r\n * @param Delay specifies the delay time length, in milliseconds.\r\n * @retval None\r\n */\r\n__weak void HAL_Delay(uint32_t Delay) {\r\n  uint32_t tickstart = HAL_GetTick();\r\n  uint32_t wait      = Delay;\r\n\r\n  /* Add a freq to guarantee minimum wait */\r\n  if (wait < HAL_MAX_DELAY) {\r\n    wait += (uint32_t)(uwTickFreq);\r\n  }\r\n\r\n  while ((HAL_GetTick() - tickstart) < wait) {\r\n  }\r\n}\r\n\r\n/**\r\n * @brief Suspend Tick increment.\r\n * @note In the default implementation , SysTick timer is the source of time base. It is\r\n *       used to generate interrupts at regular time intervals. Once HAL_SuspendTick()\r\n *       is called, the SysTick interrupt will be disabled and so Tick increment\r\n *       is suspended.\r\n * @note This function is declared as __weak to be overwritten in case of other\r\n *       implementations in user file.\r\n * @retval None\r\n */\r\n__weak void HAL_SuspendTick(void) {\r\n  /* Disable SysTick Interrupt */\r\n  CLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);\r\n}\r\n\r\n/**\r\n * @brief Resume Tick increment.\r\n * @note In the default implementation , SysTick timer is the source of time base. It is\r\n *       used to generate interrupts at regular time intervals. Once HAL_ResumeTick()\r\n *       is called, the SysTick interrupt will be enabled and so Tick increment\r\n *       is resumed.\r\n * @note This function is declared as __weak to be overwritten in case of other\r\n *       implementations in user file.\r\n * @retval None\r\n */\r\n__weak void HAL_ResumeTick(void) {\r\n  /* Enable SysTick Interrupt */\r\n  SET_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);\r\n}\r\n\r\n/**\r\n * @brief  Returns the HAL revision\r\n * @retval version 0xXYZR (8bits for each decimal, R for RC)\r\n */\r\nuint32_t HAL_GetHalVersion(void) { return __STM32F1xx_HAL_VERSION; }\r\n\r\n/**\r\n * @brief Returns the device revision identifier.\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval Device revision identifier\r\n */\r\nuint32_t HAL_GetREVID(void) { return ((DBGMCU->IDCODE) >> DBGMCU_IDCODE_REV_ID_Pos); }\r\n\r\n/**\r\n * @brief  Returns the device identifier.\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval Device identifier\r\n */\r\nuint32_t HAL_GetDEVID(void) { return ((DBGMCU->IDCODE) & IDCODE_DEVID_MASK); }\r\n\r\n/**\r\n * @brief  Enable the Debug Module during SLEEP mode\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_EnableDBGSleepMode(void) { SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); }\r\n\r\n/**\r\n * @brief  Disable the Debug Module during SLEEP mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_DisableDBGSleepMode(void) { CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); }\r\n\r\n/**\r\n * @brief  Enable the Debug Module during STOP mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * Note: On all STM32F1 devices:\r\n *       If the system tick timer interrupt is enabled during the Stop mode\r\n *       debug (DBG_STOP bit set in the DBGMCU_CR register ), it will wakeup\r\n *       the system from Stop mode.\r\n *       Workaround: To debug the Stop mode, disable the system tick timer\r\n *       interrupt.\r\n *       Refer to errata sheet of these devices for more details.\r\n * Note: On all STM32F1 devices:\r\n *       If the system tick timer interrupt is enabled during the Stop mode\r\n *       debug (DBG_STOP bit set in the DBGMCU_CR register ), it will wakeup\r\n *       the system from Stop mode.\r\n *       Workaround: To debug the Stop mode, disable the system tick timer\r\n *       interrupt.\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_EnableDBGStopMode(void) { SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); }\r\n\r\n/**\r\n * @brief  Disable the Debug Module during STOP mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_DisableDBGStopMode(void) { CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); }\r\n\r\n/**\r\n * @brief  Enable the Debug Module during STANDBY mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_EnableDBGStandbyMode(void) { SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); }\r\n\r\n/**\r\n * @brief  Disable the Debug Module during STANDBY mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_DisableDBGStandbyMode(void) { CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); }\r\n\r\n/**\r\n * @brief Return the unique device identifier (UID based on 96 bits)\r\n * @param UID pointer to 3 words array.\r\n * @retval Device identifier\r\n */\r\nvoid HAL_GetUID(uint32_t *UID) {\r\n  UID[0] = (uint32_t)(READ_REG(*((uint32_t *)UID_BASE)));\r\n  UID[1] = (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE + 4U))));\r\n  UID[2] = (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE + 8U))));\r\n}\r\n\r\n/**\r\n * @brief  Returns first word of the unique device identifier (UID based on 96 bits)\r\n * @retval Device identifier\r\n */\r\nuint32_t HAL_GetUIDw0(void) { return (READ_REG(*((uint32_t *)UID_BASE))); }\r\n\r\n/**\r\n * @brief  Returns second word of the unique device identifier (UID based on 96 bits)\r\n * @retval Device identifier\r\n */\r\nuint32_t HAL_GetUIDw1(void) { return (READ_REG(*((uint32_t *)(UID_BASE + 4U)))); }\r\n\r\n/**\r\n * @brief  Returns third word of the unique device identifier (UID based on 96 bits)\r\n * @retval Device identifier\r\n */\r\nuint32_t HAL_GetUIDw2(void) { return (READ_REG(*((uint32_t *)(UID_BASE + 8U)))); }\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_adc.c\r\n  * @author  MCD Application Team\r\n  * @brief   This file provides firmware functions to manage the following\r\n  *          functionalities of the Analog to Digital Convertor (ADC)\r\n  *          peripheral:\r\n  *           + Initialization and de-initialization functions\r\n  *             ++ Initialization and Configuration of ADC\r\n  *           + Operation functions\r\n  *             ++ Start, stop, get result of conversions of regular\r\n  *                group, using 3 possible modes: polling, interruption or DMA.\r\n  *           + Control functions\r\n  *             ++ Channels configuration on regular group\r\n  *             ++ Channels configuration on injected group\r\n  *             ++ Analog Watchdog configuration\r\n  *           + State functions\r\n  *             ++ ADC state machine management\r\n  *             ++ Interrupts and flags management\r\n  *          Other functions (extended functions) are available in file\r\n  *          \"stm32f1xx_hal_adc_ex.c\".\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                     ##### ADC peripheral features #####\r\n  ==============================================================================\r\n  [..]\r\n  (+) 12-bit resolution\r\n\r\n  (+) Interrupt generation at the end of regular conversion, end of injected\r\n      conversion, and in case of analog watchdog or overrun events.\r\n\r\n  (+) Single and continuous conversion modes.\r\n\r\n  (+) Scan mode for conversion of several channels sequentially.\r\n\r\n  (+) Data alignment with in-built data coherency.\r\n\r\n  (+) Programmable sampling time (channel wise)\r\n\r\n  (+) ADC conversion of regular group and injected group.\r\n\r\n  (+) External trigger (timer or EXTI)\r\n      for both regular and injected groups.\r\n\r\n  (+) DMA request generation for transfer of conversions data of regular group.\r\n\r\n  (+) Multimode Dual mode (available on devices with 2 ADCs or more).\r\n\r\n  (+) Configurable DMA data storage in Multimode Dual mode (available on devices\r\n      with 2 DCs or more).\r\n\r\n  (+) Configurable delay between conversions in Dual interleaved mode (available\r\n      on devices with 2 DCs or more).\r\n\r\n  (+) ADC calibration\r\n\r\n  (+) ADC supply requirements: 2.4 V to 3.6 V at full speed and down to 1.8 V at\r\n      slower speed.\r\n\r\n  (+) ADC input range: from Vref- (connected to Vssa) to Vref+ (connected to\r\n      Vdda or to an external voltage reference).\r\n\r\n\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n    [..]\r\n\r\n     *** Configuration of top level parameters related to ADC ***\r\n     ============================================================\r\n     [..]\r\n\r\n    (#) Enable the ADC interface\r\n      (++) As prerequisite, ADC clock must be configured at RCC top level.\r\n           Caution: On STM32F1, ADC clock frequency max is 14MHz (refer\r\n                    to device datasheet).\r\n                    Therefore, ADC clock prescaler must be configured in\r\n                    function of ADC clock source frequency to remain below\r\n                    this maximum frequency.\r\n        (++) One clock setting is mandatory:\r\n             ADC clock (core clock, also possibly conversion clock).\r\n             (+++) Example:\r\n                   Into HAL_ADC_MspInit() (recommended code location) or with\r\n                   other device clock parameters configuration:\r\n               (+++) RCC_PeriphCLKInitTypeDef  PeriphClkInit;\r\n               (+++) __ADC1_CLK_ENABLE();\r\n               (+++) PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;\r\n               (+++) PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;\r\n               (+++) HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);\r\n\r\n    (#) ADC pins configuration\r\n         (++) Enable the clock for the ADC GPIOs\r\n              using macro __HAL_RCC_GPIOx_CLK_ENABLE()\r\n         (++) Configure these ADC pins in analog mode\r\n              using function HAL_GPIO_Init()\r\n\r\n    (#) Optionally, in case of usage of ADC with interruptions:\r\n         (++) Configure the NVIC for ADC\r\n              using function HAL_NVIC_EnableIRQ(ADCx_IRQn)\r\n         (++) Insert the ADC interruption handler function HAL_ADC_IRQHandler()\r\n              into the function of corresponding ADC interruption vector\r\n              ADCx_IRQHandler().\r\n\r\n    (#) Optionally, in case of usage of DMA:\r\n         (++) Configure the DMA (DMA channel, mode normal or circular, ...)\r\n              using function HAL_DMA_Init().\r\n         (++) Configure the NVIC for DMA\r\n              using function HAL_NVIC_EnableIRQ(DMAx_Channelx_IRQn)\r\n         (++) Insert the ADC interruption handler function HAL_ADC_IRQHandler()\r\n              into the function of corresponding DMA interruption vector\r\n              DMAx_Channelx_IRQHandler().\r\n\r\n     *** Configuration of ADC, groups regular/injected, channels parameters ***\r\n     ==========================================================================\r\n     [..]\r\n\r\n    (#) Configure the ADC parameters (resolution, data alignment, ...)\r\n        and regular group parameters (conversion trigger, sequencer, ...)\r\n        using function HAL_ADC_Init().\r\n\r\n    (#) Configure the channels for regular group parameters (channel number,\r\n        channel rank into sequencer, ..., into regular group)\r\n        using function HAL_ADC_ConfigChannel().\r\n\r\n    (#) Optionally, configure the injected group parameters (conversion trigger,\r\n        sequencer, ..., of injected group)\r\n        and the channels for injected group parameters (channel number,\r\n        channel rank into sequencer, ..., into injected group)\r\n        using function HAL_ADCEx_InjectedConfigChannel().\r\n\r\n    (#) Optionally, configure the analog watchdog parameters (channels\r\n        monitored, thresholds, ...)\r\n        using function HAL_ADC_AnalogWDGConfig().\r\n\r\n    (#) Optionally, for devices with several ADC instances: configure the\r\n        multimode parameters\r\n        using function HAL_ADCEx_MultiModeConfigChannel().\r\n\r\n     *** Execution of ADC conversions ***\r\n     ====================================\r\n     [..]\r\n\r\n    (#) Optionally, perform an automatic ADC calibration to improve the\r\n        conversion accuracy\r\n        using function HAL_ADCEx_Calibration_Start().\r\n\r\n    (#) ADC driver can be used among three modes: polling, interruption,\r\n        transfer by DMA.\r\n\r\n        (++) ADC conversion by polling:\r\n          (+++) Activate the ADC peripheral and start conversions\r\n                using function HAL_ADC_Start()\r\n          (+++) Wait for ADC conversion completion\r\n                using function HAL_ADC_PollForConversion()\r\n                (or for injected group: HAL_ADCEx_InjectedPollForConversion() )\r\n          (+++) Retrieve conversion results\r\n                using function HAL_ADC_GetValue()\r\n                (or for injected group: HAL_ADCEx_InjectedGetValue() )\r\n          (+++) Stop conversion and disable the ADC peripheral\r\n                using function HAL_ADC_Stop()\r\n\r\n        (++) ADC conversion by interruption:\r\n          (+++) Activate the ADC peripheral and start conversions\r\n                using function HAL_ADC_Start_IT()\r\n          (+++) Wait for ADC conversion completion by call of function\r\n                HAL_ADC_ConvCpltCallback()\r\n                (this function must be implemented in user program)\r\n                (or for injected group: HAL_ADCEx_InjectedConvCpltCallback() )\r\n          (+++) Retrieve conversion results\r\n                using function HAL_ADC_GetValue()\r\n                (or for injected group: HAL_ADCEx_InjectedGetValue() )\r\n          (+++) Stop conversion and disable the ADC peripheral\r\n                using function HAL_ADC_Stop_IT()\r\n\r\n        (++) ADC conversion with transfer by DMA:\r\n          (+++) Activate the ADC peripheral and start conversions\r\n                using function HAL_ADC_Start_DMA()\r\n          (+++) Wait for ADC conversion completion by call of function\r\n                HAL_ADC_ConvCpltCallback() or HAL_ADC_ConvHalfCpltCallback()\r\n                (these functions must be implemented in user program)\r\n          (+++) Conversion results are automatically transferred by DMA into\r\n                destination variable address.\r\n          (+++) Stop conversion and disable the ADC peripheral\r\n                using function HAL_ADC_Stop_DMA()\r\n\r\n        (++) For devices with several ADCs: ADC multimode conversion\r\n             with transfer by DMA:\r\n          (+++) Activate the ADC peripheral (slave) and start conversions\r\n                using function HAL_ADC_Start()\r\n          (+++) Activate the ADC peripheral (master) and start conversions\r\n                using function HAL_ADCEx_MultiModeStart_DMA()\r\n          (+++) Wait for ADC conversion completion by call of function\r\n                HAL_ADC_ConvCpltCallback() or HAL_ADC_ConvHalfCpltCallback()\r\n                (these functions must be implemented in user program)\r\n          (+++) Conversion results are automatically transferred by DMA into\r\n                destination variable address.\r\n          (+++) Stop conversion and disable the ADC peripheral (master)\r\n                using function HAL_ADCEx_MultiModeStop_DMA()\r\n          (+++) Stop conversion and disable the ADC peripheral (slave)\r\n                using function HAL_ADC_Stop_IT()\r\n\r\n     [..]\r\n\r\n    (@) Callback functions must be implemented in user program:\r\n      (+@) HAL_ADC_ErrorCallback()\r\n      (+@) HAL_ADC_LevelOutOfWindowCallback() (callback of analog watchdog)\r\n      (+@) HAL_ADC_ConvCpltCallback()\r\n      (+@) HAL_ADC_ConvHalfCpltCallback\r\n      (+@) HAL_ADCEx_InjectedConvCpltCallback()\r\n\r\n     *** Deinitialization of ADC ***\r\n     ============================================================\r\n     [..]\r\n\r\n    (#) Disable the ADC interface\r\n      (++) ADC clock can be hard reset and disabled at RCC top level.\r\n        (++) Hard reset of ADC peripherals\r\n             using macro __ADCx_FORCE_RESET(), __ADCx_RELEASE_RESET().\r\n        (++) ADC clock disable\r\n             using the equivalent macro/functions as configuration step.\r\n             (+++) Example:\r\n                   Into HAL_ADC_MspDeInit() (recommended code location) or with\r\n                   other device clock parameters configuration:\r\n               (+++) PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC\r\n               (+++) PeriphClkInit.AdcClockSelection = RCC_ADCPLLCLK2_OFF\r\n               (+++) HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit)\r\n\r\n    (#) ADC pins configuration\r\n         (++) Disable the clock for the ADC GPIOs\r\n              using macro __HAL_RCC_GPIOx_CLK_DISABLE()\r\n\r\n    (#) Optionally, in case of usage of ADC with interruptions:\r\n         (++) Disable the NVIC for ADC\r\n              using function HAL_NVIC_EnableIRQ(ADCx_IRQn)\r\n\r\n    (#) Optionally, in case of usage of DMA:\r\n         (++) Deinitialize the DMA\r\n              using function HAL_DMA_Init().\r\n         (++) Disable the NVIC for DMA\r\n              using function HAL_NVIC_EnableIRQ(DMAx_Channelx_IRQn)\r\n\r\n    [..]\r\n\r\n    @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup ADC ADC\r\n * @brief ADC HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_ADC_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup ADC_Private_Constants ADC Private Constants\r\n * @{\r\n */\r\n\r\n/* Timeout values for ADC enable and disable settling time.                 */\r\n/* Values defined to be higher than worst cases: low clocks freq,           */\r\n/* maximum prescaler.                                                       */\r\n/* Ex of profile low frequency : Clock source at 0.1 MHz, ADC clock         */\r\n/* prescaler 4, sampling time 12.5 ADC clock cycles, resolution 12 bits.    */\r\n/* Unit: ms                                                                 */\r\n#define ADC_ENABLE_TIMEOUT  2U\r\n#define ADC_DISABLE_TIMEOUT 2U\r\n\r\n/* Delay for ADC stabilization time.                                        */\r\n/* Maximum delay is 1us (refer to device datasheet, parameter tSTAB).       */\r\n/* Unit: us                                                                 */\r\n#define ADC_STAB_DELAY_US 1U\r\n\r\n/* Delay for temperature sensor stabilization time.                         */\r\n/* Maximum delay is 10us (refer to device datasheet, parameter tSTART).     */\r\n/* Unit: us                                                                 */\r\n#define ADC_TEMPSENSOR_DELAY_US 10U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @defgroup ADC_Private_Functions ADC Private Functions\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @defgroup ADC_Exported_Functions ADC Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup ADC_Exported_Functions_Group1 Initialization/de-initialization functions\r\n  * @brief    Initialization and Configuration functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n              ##### Initialization and de-initialization functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Initialize and configure the ADC.\r\n      (+) De-initialize the ADC.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initializes the ADC peripheral and regular group according to\r\n *         parameters specified in structure \"ADC_InitTypeDef\".\r\n * @note   As prerequisite, ADC clock must be configured at RCC top level\r\n *         (clock source APB2).\r\n *         See commented example code below that can be copied and uncommented\r\n *         into HAL_ADC_MspInit().\r\n * @note   Possibility to update parameters on the fly:\r\n *         This function initializes the ADC MSP (HAL_ADC_MspInit()) only when\r\n *         coming from ADC state reset. Following calls to this function can\r\n *         be used to reconfigure some parameters of ADC_InitTypeDef\r\n *         structure on the fly, without modifying MSP configuration. If ADC\r\n *         MSP has to be modified again, HAL_ADC_DeInit() must be called\r\n *         before HAL_ADC_Init().\r\n *         The setting of these parameters is conditioned to ADC state.\r\n *         For parameters constraints, see comments of structure\r\n *         \"ADC_InitTypeDef\".\r\n * @note   This function configures the ADC within 2 scopes: scope of entire\r\n *         ADC and scope of regular group. For parameters details, see comments\r\n *         of structure \"ADC_InitTypeDef\".\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n  uint32_t          tmp_cr1        = 0U;\r\n  uint32_t          tmp_cr2        = 0U;\r\n  uint32_t          tmp_sqr1       = 0U;\r\n\r\n  /* Check ADC handle */\r\n  if (hadc == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_DATA_ALIGN(hadc->Init.DataAlign));\r\n  assert_param(IS_ADC_SCAN_MODE(hadc->Init.ScanConvMode));\r\n  assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));\r\n  assert_param(IS_ADC_EXTTRIG(hadc->Init.ExternalTrigConv));\r\n\r\n  if (hadc->Init.ScanConvMode != ADC_SCAN_DISABLE) {\r\n    assert_param(IS_ADC_REGULAR_NB_CONV(hadc->Init.NbrOfConversion));\r\n    assert_param(IS_FUNCTIONAL_STATE(hadc->Init.DiscontinuousConvMode));\r\n    if (hadc->Init.DiscontinuousConvMode != DISABLE) {\r\n      assert_param(IS_ADC_REGULAR_DISCONT_NUMBER(hadc->Init.NbrOfDiscConversion));\r\n    }\r\n  }\r\n\r\n  /* As prerequisite, into HAL_ADC_MspInit(), ADC clock must be configured    */\r\n  /* at RCC top level.                                                        */\r\n  /* Refer to header of this file for more details on clock enabling          */\r\n  /* procedure.                                                               */\r\n\r\n  /* Actions performed only if ADC is coming from state reset:                */\r\n  /* - Initialization of ADC MSP                                              */\r\n  if (hadc->State == HAL_ADC_STATE_RESET) {\r\n    /* Initialize ADC error code */\r\n    ADC_CLEAR_ERRORCODE(hadc);\r\n\r\n    /* Allocate lock resource and initialize it */\r\n    hadc->Lock = HAL_UNLOCKED;\r\n\r\n    /* Init the low level hardware */\r\n    HAL_ADC_MspInit(hadc);\r\n  }\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC peripheral */\r\n  /* Note: In case of ADC already enabled, precaution to not launch an        */\r\n  /*       unwanted conversion while modifying register CR2 by writing 1 to   */\r\n  /*       bit ADON.                                                          */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Configuration of ADC parameters if previous preliminary actions are      */\r\n  /* correctly completed.                                                     */\r\n  if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL) && (tmp_hal_status == HAL_OK)) {\r\n    /* Set ADC state */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_BUSY_INTERNAL);\r\n\r\n    /* Set ADC parameters */\r\n\r\n    /* Configuration of ADC:                                                  */\r\n    /*  - data alignment                                                      */\r\n    /*  - external trigger to start conversion                                */\r\n    /*  - external trigger polarity (always set to 1, because needed for all  */\r\n    /*    triggers: external trigger of SW start)                             */\r\n    /*  - continuous conversion mode                                          */\r\n    /* Note: External trigger polarity (ADC_CR2_EXTTRIG) is set into          */\r\n    /*       HAL_ADC_Start_xxx functions because if set in this function,     */\r\n    /*       a conversion on injected group would start a conversion also on  */\r\n    /*       regular group after ADC enabling.                                */\r\n    tmp_cr2 |= (hadc->Init.DataAlign | ADC_CFGR_EXTSEL(hadc, hadc->Init.ExternalTrigConv) | ADC_CR2_CONTINUOUS(hadc->Init.ContinuousConvMode));\r\n\r\n    /* Configuration of ADC:                                                  */\r\n    /*  - scan mode                                                           */\r\n    /*  - discontinuous mode disable/enable                                   */\r\n    /*  - discontinuous mode number of conversions                            */\r\n    tmp_cr1 |= (ADC_CR1_SCAN_SET(hadc->Init.ScanConvMode));\r\n\r\n    /* Enable discontinuous mode only if continuous mode is disabled */\r\n    /* Note: If parameter \"Init.ScanConvMode\" is set to disable, parameter    */\r\n    /*       discontinuous is set anyway, but will have no effect on ADC HW.  */\r\n    if (hadc->Init.DiscontinuousConvMode == ENABLE) {\r\n      if (hadc->Init.ContinuousConvMode == DISABLE) {\r\n        /* Enable the selected ADC regular discontinuous mode */\r\n        /* Set the number of channels to be converted in discontinuous mode */\r\n        SET_BIT(tmp_cr1, ADC_CR1_DISCEN | ADC_CR1_DISCONTINUOUS_NUM(hadc->Init.NbrOfDiscConversion));\r\n      } else {\r\n        /* ADC regular group settings continuous and sequencer discontinuous*/\r\n        /* cannot be enabled simultaneously.                                */\r\n\r\n        /* Update ADC state machine to error */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n        /* Set ADC error code to ADC IP internal error */\r\n        SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);\r\n      }\r\n    }\r\n\r\n    /* Update ADC configuration register CR1 with previous settings */\r\n    MODIFY_REG(hadc->Instance->CR1, ADC_CR1_SCAN | ADC_CR1_DISCEN | ADC_CR1_DISCNUM, tmp_cr1);\r\n\r\n    /* Update ADC configuration register CR2 with previous settings */\r\n    MODIFY_REG(hadc->Instance->CR2, ADC_CR2_ALIGN | ADC_CR2_EXTSEL | ADC_CR2_EXTTRIG | ADC_CR2_CONT, tmp_cr2);\r\n\r\n    /* Configuration of regular group sequencer:                              */\r\n    /* - if scan mode is disabled, regular channels sequence length is set to */\r\n    /*   0x00: 1 channel converted (channel on regular rank 1)                */\r\n    /*   Parameter \"NbrOfConversion\" is discarded.                            */\r\n    /*   Note: Scan mode is present by hardware on this device and, if        */\r\n    /*   disabled, discards automatically nb of conversions. Anyway, nb of    */\r\n    /*   conversions is forced to 0x00 for alignment over all STM32 devices.  */\r\n    /* - if scan mode is enabled, regular channels sequence length is set to  */\r\n    /*   parameter \"NbrOfConversion\"                                          */\r\n    if (ADC_CR1_SCAN_SET(hadc->Init.ScanConvMode) == ADC_SCAN_ENABLE) {\r\n      tmp_sqr1 = ADC_SQR1_L_SHIFT(hadc->Init.NbrOfConversion);\r\n    }\r\n\r\n    MODIFY_REG(hadc->Instance->SQR1, ADC_SQR1_L, tmp_sqr1);\r\n\r\n    /* Check back that ADC registers have effectively been configured to      */\r\n    /* ensure of no potential problem of ADC core IP clocking.                */\r\n    /* Check through register CR2 (excluding bits set in other functions:     */\r\n    /* execution control bits (ADON, JSWSTART, SWSTART), regular group bits   */\r\n    /* (DMA), injected group bits (JEXTTRIG and JEXTSEL), channel internal    */\r\n    /* measurement path bit (TSVREFE).                                        */\r\n    if (READ_BIT(hadc->Instance->CR2, ~(ADC_CR2_ADON | ADC_CR2_DMA | ADC_CR2_SWSTART | ADC_CR2_JSWSTART | ADC_CR2_JEXTTRIG | ADC_CR2_JEXTSEL | ADC_CR2_TSVREFE)) == tmp_cr2) {\r\n      /* Set ADC error code to none */\r\n      ADC_CLEAR_ERRORCODE(hadc);\r\n\r\n      /* Set the ADC state */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_READY);\r\n    } else {\r\n      /* Update ADC state machine to error */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n      /* Set ADC error code to ADC IP internal error */\r\n      SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);\r\n\r\n      tmp_hal_status = HAL_ERROR;\r\n    }\r\n\r\n  } else {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n    tmp_hal_status = HAL_ERROR;\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Deinitialize the ADC peripheral registers to their default reset\r\n *         values, with deinitialization of the ADC MSP.\r\n *         If needed, the example code can be copied and uncommented into\r\n *         function HAL_ADC_MspDeInit().\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_DeInit(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check ADC handle */\r\n  if (hadc == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Set ADC state */\r\n  SET_BIT(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL);\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Configuration of ADC parameters if previous preliminary actions are      */\r\n  /* correctly completed.                                                     */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* ========== Reset ADC registers ========== */\r\n\r\n    /* Reset register SR */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_AWD | ADC_FLAG_JEOC | ADC_FLAG_EOC | ADC_FLAG_JSTRT | ADC_FLAG_STRT));\r\n\r\n    /* Reset register CR1 */\r\n    CLEAR_BIT(hadc->Instance->CR1, (ADC_CR1_AWDEN | ADC_CR1_JAWDEN | ADC_CR1_DISCNUM | ADC_CR1_JDISCEN | ADC_CR1_DISCEN | ADC_CR1_JAUTO | ADC_CR1_AWDSGL | ADC_CR1_SCAN | ADC_CR1_JEOCIE |\r\n                                    ADC_CR1_AWDIE | ADC_CR1_EOCIE | ADC_CR1_AWDCH));\r\n\r\n    /* Reset register CR2 */\r\n    CLEAR_BIT(hadc->Instance->CR2, (ADC_CR2_TSVREFE | ADC_CR2_SWSTART | ADC_CR2_JSWSTART | ADC_CR2_EXTTRIG | ADC_CR2_EXTSEL | ADC_CR2_JEXTTRIG | ADC_CR2_JEXTSEL | ADC_CR2_ALIGN | ADC_CR2_DMA |\r\n                                    ADC_CR2_RSTCAL | ADC_CR2_CAL | ADC_CR2_CONT | ADC_CR2_ADON));\r\n\r\n    /* Reset register SMPR1 */\r\n    CLEAR_BIT(hadc->Instance->SMPR1, (ADC_SMPR1_SMP17 | ADC_SMPR1_SMP16 | ADC_SMPR1_SMP15 | ADC_SMPR1_SMP14 | ADC_SMPR1_SMP13 | ADC_SMPR1_SMP12 | ADC_SMPR1_SMP11 | ADC_SMPR1_SMP10));\r\n\r\n    /* Reset register SMPR2 */\r\n    CLEAR_BIT(hadc->Instance->SMPR2,\r\n              (ADC_SMPR2_SMP9 | ADC_SMPR2_SMP8 | ADC_SMPR2_SMP7 | ADC_SMPR2_SMP6 | ADC_SMPR2_SMP5 | ADC_SMPR2_SMP4 | ADC_SMPR2_SMP3 | ADC_SMPR2_SMP2 | ADC_SMPR2_SMP1 | ADC_SMPR2_SMP0));\r\n\r\n    /* Reset register JOFR1 */\r\n    CLEAR_BIT(hadc->Instance->JOFR1, ADC_JOFR1_JOFFSET1);\r\n    /* Reset register JOFR2 */\r\n    CLEAR_BIT(hadc->Instance->JOFR2, ADC_JOFR2_JOFFSET2);\r\n    /* Reset register JOFR3 */\r\n    CLEAR_BIT(hadc->Instance->JOFR3, ADC_JOFR3_JOFFSET3);\r\n    /* Reset register JOFR4 */\r\n    CLEAR_BIT(hadc->Instance->JOFR4, ADC_JOFR4_JOFFSET4);\r\n\r\n    /* Reset register HTR */\r\n    CLEAR_BIT(hadc->Instance->HTR, ADC_HTR_HT);\r\n    /* Reset register LTR */\r\n    CLEAR_BIT(hadc->Instance->LTR, ADC_LTR_LT);\r\n\r\n    /* Reset register SQR1 */\r\n    CLEAR_BIT(hadc->Instance->SQR1, ADC_SQR1_L | ADC_SQR1_SQ16 | ADC_SQR1_SQ15 | ADC_SQR1_SQ14 | ADC_SQR1_SQ13);\r\n\r\n    /* Reset register SQR1 */\r\n    CLEAR_BIT(hadc->Instance->SQR1, ADC_SQR1_L | ADC_SQR1_SQ16 | ADC_SQR1_SQ15 | ADC_SQR1_SQ14 | ADC_SQR1_SQ13);\r\n\r\n    /* Reset register SQR2 */\r\n    CLEAR_BIT(hadc->Instance->SQR2, ADC_SQR2_SQ12 | ADC_SQR2_SQ11 | ADC_SQR2_SQ10 | ADC_SQR2_SQ9 | ADC_SQR2_SQ8 | ADC_SQR2_SQ7);\r\n\r\n    /* Reset register SQR3 */\r\n    CLEAR_BIT(hadc->Instance->SQR3, ADC_SQR3_SQ6 | ADC_SQR3_SQ5 | ADC_SQR3_SQ4 | ADC_SQR3_SQ3 | ADC_SQR3_SQ2 | ADC_SQR3_SQ1);\r\n\r\n    /* Reset register JSQR */\r\n    CLEAR_BIT(hadc->Instance->JSQR, ADC_JSQR_JL | ADC_JSQR_JSQ4 | ADC_JSQR_JSQ3 | ADC_JSQR_JSQ2 | ADC_JSQR_JSQ1);\r\n\r\n    /* Reset register JSQR */\r\n    CLEAR_BIT(hadc->Instance->JSQR, ADC_JSQR_JL | ADC_JSQR_JSQ4 | ADC_JSQR_JSQ3 | ADC_JSQR_JSQ2 | ADC_JSQR_JSQ1);\r\n\r\n    /* Reset register DR */\r\n    /* bits in access mode read only, no direct reset applicable*/\r\n\r\n    /* Reset registers JDR1, JDR2, JDR3, JDR4 */\r\n    /* bits in access mode read only, no direct reset applicable*/\r\n\r\n    /* ========== Hard reset ADC peripheral ========== */\r\n    /* Performs a global reset of the entire ADC peripheral: ADC state is     */\r\n    /* forced to a similar state after device power-on.                       */\r\n    /* If needed, copy-paste and uncomment the following reset code into      */\r\n    /* function \"void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)\":              */\r\n    /*                                                                        */\r\n    /*  __HAL_RCC_ADC1_FORCE_RESET()                                          */\r\n    /*  __HAL_RCC_ADC1_RELEASE_RESET()                                        */\r\n\r\n    /* DeInit the low level hardware */\r\n    HAL_ADC_MspDeInit(hadc);\r\n\r\n    /* Set ADC error code to none */\r\n    ADC_CLEAR_ERRORCODE(hadc);\r\n\r\n    /* Set ADC state */\r\n    hadc->State = HAL_ADC_STATE_RESET;\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the ADC MSP.\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\n__weak void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hadc);\r\n  /* NOTE : This function should not be modified. When the callback is needed,\r\n            function HAL_ADC_MspInit must be implemented in the user file.\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the ADC MSP.\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\n__weak void HAL_ADC_MspDeInit(ADC_HandleTypeDef *hadc) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hadc);\r\n  /* NOTE : This function should not be modified. When the callback is needed,\r\n            function HAL_ADC_MspDeInit must be implemented in the user file.\r\n   */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Exported_Functions_Group2 IO operation functions\r\n *  @brief    Input and Output operation functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### IO operation functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Start conversion of regular group.\r\n      (+) Stop conversion of regular group.\r\n      (+) Poll for conversion complete on regular group.\r\n      (+) Poll for conversion event.\r\n      (+) Get result of regular channel conversion.\r\n      (+) Start conversion of regular group and enable interruptions.\r\n      (+) Stop conversion of regular group and disable interruptions.\r\n      (+) Handle ADC interrupt request\r\n      (+) Start conversion of regular group and enable DMA transfer.\r\n      (+) Stop conversion of regular group and disable ADC DMA transfer.\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Enables ADC, starts conversion of regular group.\r\n *         Interruptions enabled in this function: None.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Enable the ADC peripheral */\r\n  tmp_hal_status = ADC_Enable(hadc);\r\n\r\n  /* Start conversion if ADC is effectively enabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state                                                          */\r\n    /* - Clear state bitfield related to regular group conversion results     */\r\n    /* - Set state bitfield related to regular operation                      */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC, HAL_ADC_STATE_REG_BUSY);\r\n\r\n    /* Set group injected state (from auto-injection) and multimode state     */\r\n    /* for all cases of multimode: independent mode, multimode ADC master     */\r\n    /* or multimode ADC slave (for devices with several ADCs):                */\r\n    if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      /* Set ADC state (ADC independent or master) */\r\n      CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n      /* If conversions on group regular are also triggering group injected,  */\r\n      /* update ADC state.                                                    */\r\n      if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) {\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n      }\r\n    } else {\r\n      /* Set ADC state (ADC slave) */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n      /* If conversions on group regular are also triggering group injected,  */\r\n      /* update ADC state.                                                    */\r\n      if (ADC_MULTIMODE_AUTO_INJECTED(hadc)) {\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n      }\r\n    }\r\n\r\n    /* State machine update: Check if an injected conversion is ongoing */\r\n    if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n      /* Reset ADC error code fields related to conversions on group regular */\r\n      CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA));\r\n    } else {\r\n      /* Reset ADC all error code fields */\r\n      ADC_CLEAR_ERRORCODE(hadc);\r\n    }\r\n\r\n    /* Process unlocked */\r\n    /* Unlock before starting ADC conversions: in case of potential           */\r\n    /* interruption, to let the process to ADC IRQ Handler.                   */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    /* Clear regular group conversion flag */\r\n    /* (To ensure of no unknown state from potential previous ADC operations) */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC);\r\n\r\n    /* Enable conversion of regular group.                                    */\r\n    /* If software start has been selected, conversion starts immediately.    */\r\n    /* If external trigger has been selected, conversion will start at next   */\r\n    /* trigger event.                                                         */\r\n    /* Case of multimode enabled:                                             */\r\n    /*  - if ADC is slave, ADC is enabled only (conversion is not started).   */\r\n    /*  - if ADC is master, ADC is enabled and conversion is started.         */\r\n    /* If ADC is master, ADC is enabled and conversion is started.            */\r\n    /* Note: Alternate trigger for single conversion could be to force an     */\r\n    /*       additional set of bit ADON \"hadc->Instance->CR2 |= ADC_CR2_ADON;\"*/\r\n    if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      /* Start ADC conversion on regular group with SW start */\r\n      SET_BIT(hadc->Instance->CR2, (ADC_CR2_SWSTART | ADC_CR2_EXTTRIG));\r\n    } else {\r\n      /* Start ADC conversion on regular group with external trigger */\r\n      SET_BIT(hadc->Instance->CR2, ADC_CR2_EXTTRIG);\r\n    }\r\n  } else {\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop ADC conversion of regular group (and injected channels in\r\n *         case of auto_injection mode), disable ADC peripheral.\r\n * @note:  ADC peripheral disable is forcing stop of potential\r\n *         conversion on injected group. If injected group is under use, it\r\n *         should be preliminarily stopped using HAL_ADCEx_InjectedStop function.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status.\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Check if ADC is effectively disabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Wait for regular group conversion to be completed.\r\n * @note   This function cannot be used in a particular setup: ADC configured\r\n *         in DMA mode.\r\n *         In this case, DMA resets the flag EOC and polling cannot be\r\n *         performed on each conversion.\r\n * @note   On STM32F1 devices, limitation in case of sequencer enabled\r\n *         (several ranks selected): polling cannot be done on each\r\n *         conversion inside the sequence. In this case, polling is replaced by\r\n *         wait for maximum conversion time.\r\n * @param  hadc: ADC handle\r\n * @param  Timeout: Timeout value in millisecond.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Variables for polling in case of scan mode enabled and polling for each  */\r\n  /* conversion.                                                              */\r\n  __IO uint32_t Conversion_Timeout_CPU_cycles     = 0U;\r\n  uint32_t      Conversion_Timeout_CPU_cycles_max = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Get tick count */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Verification that ADC configuration is compliant with polling for        */\r\n  /* each conversion:                                                         */\r\n  /* Particular case is ADC configured in DMA mode                            */\r\n  if (HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_DMA)) {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Polling for end of conversion: differentiation if single/sequence        */\r\n  /* conversion.                                                              */\r\n  /*  - If single conversion for regular group (Scan mode disabled or enabled */\r\n  /*    with NbrOfConversion =1), flag EOC is used to determine the           */\r\n  /*    conversion completion.                                                */\r\n  /*  - If sequence conversion for regular group (scan mode enabled and       */\r\n  /*    NbrOfConversion >=2), flag EOC is set only at the end of the          */\r\n  /*    sequence.                                                             */\r\n  /*    To poll for each conversion, the maximum conversion time is computed  */\r\n  /*    from ADC conversion time (selected sampling time + conversion time of */\r\n  /*    12.5 ADC clock cycles) and APB2/ADC clock prescalers (depending on    */\r\n  /*    settings, conversion time range can be from 28 to 32256 CPU cycles).  */\r\n  /*    As flag EOC is not set after each conversion, no timeout status can   */\r\n  /*    be set.                                                               */\r\n  if (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_SCAN) && HAL_IS_BIT_CLR(hadc->Instance->SQR1, ADC_SQR1_L)) {\r\n    /* Wait until End of Conversion flag is raised */\r\n    while (HAL_IS_BIT_CLR(hadc->Instance->SR, ADC_FLAG_EOC)) {\r\n      /* Check if timeout is disabled (set to infinite wait) */\r\n      if (Timeout != HAL_MAX_DELAY) {\r\n        if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n          /* Update ADC state machine to timeout */\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);\r\n\r\n          /* Process unlocked */\r\n          __HAL_UNLOCK(hadc);\r\n\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n  } else {\r\n    /* Replace polling by wait for maximum conversion time */\r\n    /*  - Computation of CPU clock cycles corresponding to ADC clock cycles   */\r\n    /*    and ADC maximum conversion cycles on all channels.                  */\r\n    /*  - Wait for the expected ADC clock cycles delay                        */\r\n    Conversion_Timeout_CPU_cycles_max = ((SystemCoreClock / HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC)) * ADC_CONVCYCLES_MAX_RANGE(hadc));\r\n\r\n    while (Conversion_Timeout_CPU_cycles < Conversion_Timeout_CPU_cycles_max) {\r\n      /* Check if timeout is disabled (set to infinite wait) */\r\n      if (Timeout != HAL_MAX_DELAY) {\r\n        if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n          /* Update ADC state machine to timeout */\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);\r\n\r\n          /* Process unlocked */\r\n          __HAL_UNLOCK(hadc);\r\n\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n      Conversion_Timeout_CPU_cycles++;\r\n    }\r\n  }\r\n\r\n  /* Clear regular group conversion flag */\r\n  __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_STRT | ADC_FLAG_EOC);\r\n\r\n  /* Update ADC state machine */\r\n  SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC);\r\n\r\n  /* Determine whether any further conversion upcoming on group regular       */\r\n  /* by external trigger, continuous mode or scan sequence on going.          */\r\n  /* Note: On STM32F1 devices, in case of sequencer enabled                   */\r\n  /*       (several ranks selected), end of conversion flag is raised         */\r\n  /*       at the end of the sequence.                                        */\r\n  if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && (hadc->Init.ContinuousConvMode == DISABLE)) {\r\n    /* Set ADC state */\r\n    CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);\r\n\r\n    if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_READY);\r\n    }\r\n  }\r\n\r\n  /* Return ADC state */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Poll for conversion event.\r\n * @param  hadc: ADC handle\r\n * @param  EventType: the ADC event type.\r\n *          This parameter can be one of the following values:\r\n *            @arg ADC_AWD_EVENT: ADC Analog watchdog event.\r\n * @param  Timeout: Timeout value in millisecond.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef *hadc, uint32_t EventType, uint32_t Timeout) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_EVENT_TYPE(EventType));\r\n\r\n  /* Get tick count */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Check selected event flag */\r\n  while (__HAL_ADC_GET_FLAG(hadc, EventType) == RESET) {\r\n    /* Check if timeout is disabled (set to infinite wait) */\r\n    if (Timeout != HAL_MAX_DELAY) {\r\n      if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n        /* Update ADC state machine to timeout */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);\r\n\r\n        /* Process unlocked */\r\n        __HAL_UNLOCK(hadc);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Analog watchdog (level out of window) event */\r\n  /* Set ADC state */\r\n  SET_BIT(hadc->State, HAL_ADC_STATE_AWD1);\r\n\r\n  /* Clear ADC analog watchdog flag */\r\n  __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_AWD);\r\n\r\n  /* Return ADC state */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Enables ADC, starts conversion of regular group with interruption.\r\n *         Interruptions enabled in this function:\r\n *          - EOC (end of conversion of regular group)\r\n *         Each of these interruptions has its dedicated callback function.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Enable the ADC peripheral */\r\n  tmp_hal_status = ADC_Enable(hadc);\r\n\r\n  /* Start conversion if ADC is effectively enabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state                                                          */\r\n    /* - Clear state bitfield related to regular group conversion results     */\r\n    /* - Set state bitfield related to regular operation                      */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR | HAL_ADC_STATE_REG_EOSMP, HAL_ADC_STATE_REG_BUSY);\r\n\r\n    /* Set group injected state (from auto-injection) and multimode state     */\r\n    /* for all cases of multimode: independent mode, multimode ADC master     */\r\n    /* or multimode ADC slave (for devices with several ADCs):                */\r\n    if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      /* Set ADC state (ADC independent or master) */\r\n      CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n      /* If conversions on group regular are also triggering group injected,  */\r\n      /* update ADC state.                                                    */\r\n      if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) {\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n      }\r\n    } else {\r\n      /* Set ADC state (ADC slave) */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n      /* If conversions on group regular are also triggering group injected,  */\r\n      /* update ADC state.                                                    */\r\n      if (ADC_MULTIMODE_AUTO_INJECTED(hadc)) {\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n      }\r\n    }\r\n\r\n    /* State machine update: Check if an injected conversion is ongoing */\r\n    if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n      /* Reset ADC error code fields related to conversions on group regular */\r\n      CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA));\r\n    } else {\r\n      /* Reset ADC all error code fields */\r\n      ADC_CLEAR_ERRORCODE(hadc);\r\n    }\r\n\r\n    /* Process unlocked */\r\n    /* Unlock before starting ADC conversions: in case of potential           */\r\n    /* interruption, to let the process to ADC IRQ Handler.                   */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    /* Clear regular group conversion flag and overrun flag */\r\n    /* (To ensure of no unknown state from potential previous ADC operations) */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC);\r\n\r\n    /* Enable end of conversion interrupt for regular group */\r\n    __HAL_ADC_ENABLE_IT(hadc, ADC_IT_EOC);\r\n\r\n    /* Enable conversion of regular group.                                    */\r\n    /* If software start has been selected, conversion starts immediately.    */\r\n    /* If external trigger has been selected, conversion will start at next   */\r\n    /* trigger event.                                                         */\r\n    /* Case of multimode enabled:                                             */\r\n    /*  - if ADC is slave, ADC is enabled only (conversion is not started).   */\r\n    /*  - if ADC is master, ADC is enabled and conversion is started.         */\r\n    if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      /* Start ADC conversion on regular group with SW start */\r\n      SET_BIT(hadc->Instance->CR2, (ADC_CR2_SWSTART | ADC_CR2_EXTTRIG));\r\n    } else {\r\n      /* Start ADC conversion on regular group with external trigger */\r\n      SET_BIT(hadc->Instance->CR2, ADC_CR2_EXTTRIG);\r\n    }\r\n  } else {\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop ADC conversion of regular group (and injected group in\r\n *         case of auto_injection mode), disable interrution of\r\n *         end-of-conversion, disable ADC peripheral.\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Check if ADC is effectively disabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Disable ADC end of conversion interrupt for regular group */\r\n    __HAL_ADC_DISABLE_IT(hadc, ADC_IT_EOC);\r\n\r\n    /* Set ADC state */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Enables ADC, starts conversion of regular group and transfers result\r\n *         through DMA.\r\n *         Interruptions enabled in this function:\r\n *          - DMA transfer complete\r\n *          - DMA half transfer\r\n *         Each of these interruptions has its dedicated callback function.\r\n * @note   For devices with several ADCs: This function is for single-ADC mode\r\n *         only. For multimode, use the dedicated MultimodeStart function.\r\n * @note   On STM32F1 devices, only ADC1 and ADC3 (ADC availability depending\r\n *         on devices) have DMA capability.\r\n *         ADC2 converted data can be transferred in dual ADC mode using DMA\r\n *         of ADC1 (ADC master in multimode).\r\n *         In case of using ADC1 with DMA on a device featuring 2 ADC\r\n *         instances: ADC1 conversion register DR contains ADC1 conversion\r\n *         result (ADC1 register DR bits 0 to 11) and, additionally, ADC2 last\r\n *         conversion result (ADC1 register DR bits 16 to 27). Therefore, to\r\n *         have DMA transferring the conversion results of ADC1 only, DMA must\r\n *         be configured to transfer size: half word.\r\n * @param  hadc: ADC handle\r\n * @param  pData: The destination Buffer address.\r\n * @param  Length: The length of data to be transferred from ADC peripheral to memory.\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_DMA_CAPABILITY_INSTANCE(hadc->Instance));\r\n\r\n  /* Verification if multimode is disabled (for devices with several ADC)     */\r\n  /* If multimode is enabled, dedicated function multimode conversion         */\r\n  /* start DMA must be used.                                                  */\r\n  if (ADC_MULTIMODE_IS_ENABLE(hadc) == RESET) {\r\n    /* Process locked */\r\n    __HAL_LOCK(hadc);\r\n\r\n    /* Enable the ADC peripheral */\r\n    tmp_hal_status = ADC_Enable(hadc);\r\n\r\n    /* Start conversion if ADC is effectively enabled */\r\n    if (tmp_hal_status == HAL_OK) {\r\n      /* Set ADC state                                                        */\r\n      /* - Clear state bitfield related to regular group conversion results   */\r\n      /* - Set state bitfield related to regular operation                    */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR | HAL_ADC_STATE_REG_EOSMP, HAL_ADC_STATE_REG_BUSY);\r\n\r\n      /* Set group injected state (from auto-injection) and multimode state     */\r\n      /* for all cases of multimode: independent mode, multimode ADC master     */\r\n      /* or multimode ADC slave (for devices with several ADCs):                */\r\n      if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n        /* Set ADC state (ADC independent or master) */\r\n        CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n        /* If conversions on group regular are also triggering group injected,  */\r\n        /* update ADC state.                                                    */\r\n        if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) {\r\n          ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n        }\r\n      } else {\r\n        /* Set ADC state (ADC slave) */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n        /* If conversions on group regular are also triggering group injected,  */\r\n        /* update ADC state.                                                    */\r\n        if (ADC_MULTIMODE_AUTO_INJECTED(hadc)) {\r\n          ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n        }\r\n      }\r\n\r\n      /* State machine update: Check if an injected conversion is ongoing */\r\n      if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n        /* Reset ADC error code fields related to conversions on group regular */\r\n        CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA));\r\n      } else {\r\n        /* Reset ADC all error code fields */\r\n        ADC_CLEAR_ERRORCODE(hadc);\r\n      }\r\n\r\n      /* Process unlocked */\r\n      /* Unlock before starting ADC conversions: in case of potential         */\r\n      /* interruption, to let the process to ADC IRQ Handler.                 */\r\n      __HAL_UNLOCK(hadc);\r\n\r\n      /* Set the DMA transfer complete callback */\r\n      hadc->DMA_Handle->XferCpltCallback = ADC_DMAConvCplt;\r\n\r\n      /* Manage ADC and DMA start: ADC overrun interruption, DMA start, ADC   */\r\n      /* start (in case of SW start):                                         */\r\n\r\n      /* Clear regular group conversion flag and overrun flag */\r\n      /* (To ensure of no unknown state from potential previous ADC           */\r\n      /* operations)                                                          */\r\n      __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC);\r\n\r\n      /* Enable ADC DMA mode */\r\n      SET_BIT(hadc->Instance->CR2, ADC_CR2_DMA);\r\n\r\n      /* Start the DMA channel */\r\n      HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&hadc->Instance->DR, (uint32_t)pData, Length);\r\n\r\n      /* Enable conversion of regular group.                                  */\r\n      /* If software start has been selected, conversion starts immediately.  */\r\n      /* If external trigger has been selected, conversion will start at next */\r\n      /* trigger event.                                                       */\r\n      if (ADC_IS_SOFTWARE_START_REGULAR(hadc)) {\r\n        /* Start ADC conversion on regular group with SW start */\r\n        SET_BIT(hadc->Instance->CR2, (ADC_CR2_SWSTART | ADC_CR2_EXTTRIG));\r\n      } else {\r\n        /* Start ADC conversion on regular group with external trigger */\r\n        SET_BIT(hadc->Instance->CR2, ADC_CR2_EXTTRIG);\r\n      }\r\n    } else {\r\n      /* Process unlocked */\r\n      __HAL_UNLOCK(hadc);\r\n    }\r\n  } else {\r\n    tmp_hal_status = HAL_ERROR;\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop ADC conversion of regular group (and injected group in\r\n *         case of auto_injection mode), disable ADC DMA transfer, disable\r\n *         ADC peripheral.\r\n * @note:  ADC peripheral disable is forcing stop of potential\r\n *         conversion on injected group. If injected group is under use, it\r\n *         should be preliminarily stopped using HAL_ADCEx_InjectedStop function.\r\n * @note   For devices with several ADCs: This function is for single-ADC mode\r\n *         only. For multimode, use the dedicated MultimodeStop function.\r\n * @note   On STM32F1 devices, only ADC1 and ADC3 (ADC availability depending\r\n *         on devices) have DMA capability.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status.\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_DMA_CAPABILITY_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Check if ADC is effectively disabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Disable ADC DMA mode */\r\n    CLEAR_BIT(hadc->Instance->CR2, ADC_CR2_DMA);\r\n\r\n    /* Disable the DMA channel (in case of DMA in circular mode or stop while */\r\n    /* DMA transfer is on going)                                              */\r\n    tmp_hal_status = HAL_DMA_Abort(hadc->DMA_Handle);\r\n\r\n    /* Check if DMA channel effectively disabled */\r\n    if (tmp_hal_status == HAL_OK) {\r\n      /* Set ADC state */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n    } else {\r\n      /* Update ADC state machine to error */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_DMA);\r\n    }\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Get ADC regular group conversion result.\r\n * @note   Reading register DR automatically clears ADC flag EOC\r\n *         (ADC group regular end of unitary conversion).\r\n * @note   This function does not clear ADC flag EOS\r\n *         (ADC group regular end of sequence conversion).\r\n *         Occurrence of flag EOS rising:\r\n *          - If sequencer is composed of 1 rank, flag EOS is equivalent\r\n *            to flag EOC.\r\n *          - If sequencer is composed of several ranks, during the scan\r\n *            sequence flag EOC only is raised, at the end of the scan sequence\r\n *            both flags EOC and EOS are raised.\r\n *         To clear this flag, either use function:\r\n *         in programming model IT: @ref HAL_ADC_IRQHandler(), in programming\r\n *         model polling: @ref HAL_ADC_PollForConversion()\r\n *         or @ref __HAL_ADC_CLEAR_FLAG(&hadc, ADC_FLAG_EOS).\r\n * @param  hadc: ADC handle\r\n * @retval ADC group regular conversion data\r\n */\r\nuint32_t HAL_ADC_GetValue(ADC_HandleTypeDef *hadc) {\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Note: EOC flag is not cleared here by software because automatically     */\r\n  /*       cleared by hardware when reading register DR.                      */\r\n\r\n  /* Return ADC converted value */\r\n  return hadc->Instance->DR;\r\n}\r\n\r\n/**\r\n * @brief  Handles ADC interrupt request\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\nvoid HAL_ADC_IRQHandler(ADC_HandleTypeDef *hadc) {\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));\r\n  assert_param(IS_ADC_REGULAR_NB_CONV(hadc->Init.NbrOfConversion));\r\n\r\n  /* ========== Check End of Conversion flag for regular group ========== */\r\n  if (__HAL_ADC_GET_IT_SOURCE(hadc, ADC_IT_EOC)) {\r\n    if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOC)) {\r\n      /* Update state machine on conversion status if not in error state */\r\n      if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL)) {\r\n        /* Set ADC state */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC);\r\n      }\r\n\r\n      /* Determine whether any further conversion upcoming on group regular   */\r\n      /* by external trigger, continuous mode or scan sequence on going.      */\r\n      /* Note: On STM32F1 devices, in case of sequencer enabled               */\r\n      /*       (several ranks selected), end of conversion flag is raised     */\r\n      /*       at the end of the sequence.                                    */\r\n      if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && (hadc->Init.ContinuousConvMode == DISABLE)) {\r\n        /* Disable ADC end of conversion interrupt on group regular */\r\n        __HAL_ADC_DISABLE_IT(hadc, ADC_IT_EOC);\r\n\r\n        /* Set ADC state */\r\n        CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);\r\n\r\n        if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_READY);\r\n        }\r\n      }\r\n\r\n      /* Clear regular group conversion flag */\r\n      __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_STRT | ADC_FLAG_EOC);\r\n    }\r\n  }\r\n\r\n  /* ========== Check End of Conversion flag for injected group ========== */\r\n  if (__HAL_ADC_GET_IT_SOURCE(hadc, ADC_IT_JEOC)) {\r\n    if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_JEOC)) {\r\n      /* Update state machine on conversion status if not in error state */\r\n      if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL)) {\r\n        /* Set ADC state */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_INJ_EOC);\r\n      }\r\n\r\n      /* Determine whether any further conversion upcoming on group injected  */\r\n      /* by external trigger, scan sequence on going or by automatic injected */\r\n      /* conversion from group regular (same conditions as group regular      */\r\n      /* interruption disabling above).                                       */\r\n      /* Note: On STM32F1 devices, in case of sequencer enabled               */\r\n      /*       (several ranks selected), end of conversion flag is raised     */\r\n      /*       at the end of the sequence.                                    */\r\n      if (ADC_IS_SOFTWARE_START_INJECTED(hadc) || (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO) && (ADC_IS_SOFTWARE_START_REGULAR(hadc) && (hadc->Init.ContinuousConvMode == DISABLE)))) {\r\n        /* Disable ADC end of conversion interrupt on group injected */\r\n        __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOC);\r\n\r\n        /* Set ADC state */\r\n        CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY);\r\n\r\n        if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) {\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_READY);\r\n        }\r\n      }\r\n\r\n      /* Conversion complete callback */\r\n      HAL_ADCEx_InjectedConvCpltCallback(hadc);\r\n\r\n      /* Clear injected group conversion flag */\r\n      __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_JSTRT | ADC_FLAG_JEOC));\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Exported_Functions_Group3 Peripheral Control functions\r\n *  @brief    Peripheral Control functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n             ##### Peripheral Control functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Configure channels on regular group\r\n      (+) Configure the analog watchdog\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Configures the the selected channel to be linked to the regular\r\n *         group.\r\n * @note   In case of usage of internal measurement channels:\r\n *         Vbat/VrefInt/TempSensor.\r\n *         These internal paths can be be disabled using function\r\n *         HAL_ADC_DeInit().\r\n * @note   Possibility to update parameters on the fly:\r\n *         This function initializes channel into regular group, following\r\n *         calls to this function can be used to reconfigure some parameters\r\n *         of structure \"ADC_ChannelConfTypeDef\" on the fly, without reseting\r\n *         the ADC.\r\n *         The setting of these parameters is conditioned to ADC state.\r\n *         For parameters constraints, see comments of structure\r\n *         \"ADC_ChannelConfTypeDef\".\r\n * @param  hadc: ADC handle\r\n * @param  sConfig: Structure of ADC channel for regular group.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef *hadc, ADC_ChannelConfTypeDef *sConfig) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_CHANNEL(sConfig->Channel));\r\n  assert_param(IS_ADC_REGULAR_RANK(sConfig->Rank));\r\n  assert_param(IS_ADC_SAMPLE_TIME(sConfig->SamplingTime));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Regular sequence configuration */\r\n  /* For Rank 1 to 6 */\r\n  if (sConfig->Rank < 7U) {\r\n    MODIFY_REG(hadc->Instance->SQR3, ADC_SQR3_RK(ADC_SQR3_SQ1, sConfig->Rank), ADC_SQR3_RK(sConfig->Channel, sConfig->Rank));\r\n  }\r\n  /* For Rank 7 to 12 */\r\n  else if (sConfig->Rank < 13U) {\r\n    MODIFY_REG(hadc->Instance->SQR2, ADC_SQR2_RK(ADC_SQR2_SQ7, sConfig->Rank), ADC_SQR2_RK(sConfig->Channel, sConfig->Rank));\r\n  }\r\n  /* For Rank 13 to 16 */\r\n  else {\r\n    MODIFY_REG(hadc->Instance->SQR1, ADC_SQR1_RK(ADC_SQR1_SQ13, sConfig->Rank), ADC_SQR1_RK(sConfig->Channel, sConfig->Rank));\r\n  }\r\n\r\n  /* Channel sampling time configuration */\r\n  /* For channels 10 to 17 */\r\n  if (sConfig->Channel >= ADC_CHANNEL_10) {\r\n    MODIFY_REG(hadc->Instance->SMPR1, ADC_SMPR1(ADC_SMPR1_SMP10, sConfig->Channel), ADC_SMPR1(sConfig->SamplingTime, sConfig->Channel));\r\n  } else /* For channels 0 to 9 */\r\n  {\r\n    MODIFY_REG(hadc->Instance->SMPR2, ADC_SMPR2(ADC_SMPR2_SMP0, sConfig->Channel), ADC_SMPR2(sConfig->SamplingTime, sConfig->Channel));\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Configures the analog watchdog.\r\n * @note   Analog watchdog thresholds can be modified while ADC conversion\r\n *         is on going.\r\n *         In this case, some constraints must be taken into account:\r\n *         the programmed threshold values are effective from the next\r\n *         ADC EOC (end of unitary conversion).\r\n *         Considering that registers write delay may happen due to\r\n *         bus activity, this might cause an uncertainty on the\r\n *         effective timing of the new programmed threshold values.\r\n * @param  hadc: ADC handle\r\n * @param  AnalogWDGConfig: Structure of ADC analog watchdog configuration\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef *hadc, ADC_AnalogWDGConfTypeDef *AnalogWDGConfig) {\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_ANALOG_WATCHDOG_MODE(AnalogWDGConfig->WatchdogMode));\r\n  assert_param(IS_FUNCTIONAL_STATE(AnalogWDGConfig->ITMode));\r\n  assert_param(IS_ADC_RANGE(AnalogWDGConfig->HighThreshold));\r\n  assert_param(IS_ADC_RANGE(AnalogWDGConfig->LowThreshold));\r\n\r\n  if ((AnalogWDGConfig->WatchdogMode == ADC_ANALOGWATCHDOG_SINGLE_REG) || (AnalogWDGConfig->WatchdogMode == ADC_ANALOGWATCHDOG_SINGLE_INJEC) ||\r\n      (AnalogWDGConfig->WatchdogMode == ADC_ANALOGWATCHDOG_SINGLE_REGINJEC)) {\r\n    assert_param(IS_ADC_CHANNEL(AnalogWDGConfig->Channel));\r\n  }\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Analog watchdog configuration */\r\n\r\n  /* Configure ADC Analog watchdog interrupt */\r\n  if (AnalogWDGConfig->ITMode == ENABLE) {\r\n    /* Enable the ADC Analog watchdog interrupt */\r\n    __HAL_ADC_ENABLE_IT(hadc, ADC_IT_AWD);\r\n  } else {\r\n    /* Disable the ADC Analog watchdog interrupt */\r\n    __HAL_ADC_DISABLE_IT(hadc, ADC_IT_AWD);\r\n  }\r\n\r\n  /* Configuration of analog watchdog:                                        */\r\n  /*  - Set the analog watchdog enable mode: regular and/or injected groups,  */\r\n  /*    one or all channels.                                                  */\r\n  /*  - Set the Analog watchdog channel (is not used if watchdog              */\r\n  /*    mode \"all channels\": ADC_CFGR_AWD1SGL=0).                             */\r\n  MODIFY_REG(hadc->Instance->CR1, ADC_CR1_AWDSGL | ADC_CR1_JAWDEN | ADC_CR1_AWDEN | ADC_CR1_AWDCH, AnalogWDGConfig->WatchdogMode | AnalogWDGConfig->Channel);\r\n\r\n  /* Set the high threshold */\r\n  WRITE_REG(hadc->Instance->HTR, AnalogWDGConfig->HighThreshold);\r\n\r\n  /* Set the low threshold */\r\n  WRITE_REG(hadc->Instance->LTR, AnalogWDGConfig->LowThreshold);\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Exported_Functions_Group4 Peripheral State functions\r\n *  @brief    Peripheral State functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n            ##### Peripheral State and Errors functions #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides functions to get in run-time the status of the\r\n    peripheral.\r\n      (+) Check the ADC state\r\n      (+) Check the ADC error code\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  return the ADC state\r\n * @param  hadc: ADC handle\r\n * @retval HAL state\r\n */\r\nuint32_t HAL_ADC_GetState(ADC_HandleTypeDef *hadc) {\r\n  /* Return ADC state */\r\n  return hadc->State;\r\n}\r\n\r\n/**\r\n * @brief  Return the ADC error code\r\n * @param  hadc: ADC handle\r\n * @retval ADC Error Code\r\n */\r\nuint32_t HAL_ADC_GetError(ADC_HandleTypeDef *hadc) { return hadc->ErrorCode; }\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Private_Functions ADC Private Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Enable the selected ADC.\r\n * @note   Prerequisite condition to use this function: ADC must be disabled\r\n *         and voltage regulator must be enabled (done into HAL_ADC_Init()).\r\n * @param  hadc: ADC handle\r\n * @retval HAL status.\r\n */\r\nHAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef *hadc) {\r\n  uint32_t      tickstart       = 0U;\r\n  __IO uint32_t wait_loop_index = 0U;\r\n\r\n  /* ADC enable and wait for ADC ready (in case of ADC is disabled or         */\r\n  /* enabling phase not yet completed: flag ADC ready not yet set).           */\r\n  /* Timeout implemented to not be stuck if ADC cannot be enabled (possible   */\r\n  /* causes: ADC clock not running, ...).                                     */\r\n  if (ADC_IS_ENABLE(hadc) == RESET) {\r\n    /* Enable the Peripheral */\r\n    __HAL_ADC_ENABLE(hadc);\r\n\r\n    /* Delay for ADC stabilization time */\r\n    /* Compute number of CPU cycles to wait for */\r\n    wait_loop_index = (ADC_STAB_DELAY_US * (SystemCoreClock / 1000000U));\r\n    while (wait_loop_index != 0U) {\r\n      wait_loop_index--;\r\n    }\r\n\r\n    /* Get tick count */\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait for ADC effectively enabled */\r\n    while (ADC_IS_ENABLE(hadc) == RESET) {\r\n      if ((HAL_GetTick() - tickstart) > ADC_ENABLE_TIMEOUT) {\r\n        /* Update ADC state machine to error */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n        /* Set ADC error code to ADC IP internal error */\r\n        SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);\r\n\r\n        /* Process unlocked */\r\n        __HAL_UNLOCK(hadc);\r\n\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Return HAL status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stop ADC conversion and disable the selected ADC\r\n * @note   Prerequisite condition to use this function: ADC conversions must be\r\n *         stopped to disable the ADC.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status.\r\n */\r\nHAL_StatusTypeDef ADC_ConversionStop_Disable(ADC_HandleTypeDef *hadc) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Verification if ADC is not already disabled */\r\n  if (ADC_IS_ENABLE(hadc) != RESET) {\r\n    /* Disable the ADC peripheral */\r\n    __HAL_ADC_DISABLE(hadc);\r\n\r\n    /* Get tick count */\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait for ADC effectively disabled */\r\n    while (ADC_IS_ENABLE(hadc) != RESET) {\r\n      if ((HAL_GetTick() - tickstart) > ADC_DISABLE_TIMEOUT) {\r\n        /* Update ADC state machine to error */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n        /* Set ADC error code to ADC IP internal error */\r\n        SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);\r\n\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Return HAL status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DMA transfer complete callback.\r\n * @param  hdma: pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid ADC_DMAConvCplt(DMA_HandleTypeDef *hdma) {\r\n  /* Retrieve ADC handle corresponding to current DMA handle */\r\n  ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  /* Update state machine on conversion status if not in error state */\r\n  if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL | HAL_ADC_STATE_ERROR_DMA)) {\r\n    /* Update ADC state machine */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC);\r\n\r\n    /* Determine whether any further conversion upcoming on group regular     */\r\n    /* by external trigger, continuous mode or scan sequence on going.        */\r\n    /* Note: On STM32F1 devices, in case of sequencer enabled                 */\r\n    /*       (several ranks selected), end of conversion flag is raised       */\r\n    /*       at the end of the sequence.                                      */\r\n    if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && (hadc->Init.ContinuousConvMode == DISABLE)) {\r\n      /* Set ADC state */\r\n      CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);\r\n\r\n      if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_READY);\r\n      }\r\n    }\r\n\r\n  } else {\r\n    /* Call DMA error callback */\r\n    hadc->DMA_Handle->XferErrorCallback(hdma);\r\n  }\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_ADC_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_adc_ex.c\r\n  * @author  MCD Application Team\r\n  * @brief   This file provides firmware functions to manage the following\r\n  *          functionalities of the Analog to Digital Convertor (ADC)\r\n  *          peripheral:\r\n  *           + Operation functions\r\n  *             ++ Start, stop, get result of conversions of injected\r\n  *                group, using 2 possible modes: polling, interruption.\r\n  *             ++ Multimode feature (available on devices with 2 ADCs or more)\r\n  *             ++ Calibration (ADC automatic self-calibration)\r\n  *           + Control functions\r\n  *             ++ Channels configuration on injected group\r\n  *          Other functions (generic functions) are available in file\r\n  *          \"stm32f1xx_hal_adc.c\".\r\n  *\r\n  @verbatim\r\n  [..]\r\n  (@) Sections \"ADC peripheral features\" and \"How to use this driver\" are\r\n      available in file of generic functions \"stm32f1xx_hal_adc.c\".\r\n  [..]\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup ADCEx ADCEx\r\n * @brief ADC Extension HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_ADC_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup ADCEx_Private_Constants ADCEx Private Constants\r\n * @{\r\n */\r\n\r\n/* Delay for ADC calibration:                                               */\r\n/* Hardware prerequisite before starting a calibration: the ADC must have   */\r\n/* been in power-on state for at least two ADC clock cycles.                */\r\n/* Unit: ADC clock cycles                                                   */\r\n#define ADC_PRECALIBRATION_DELAY_ADCCLOCKCYCLES 2U\r\n\r\n/* Timeout value for ADC calibration                                        */\r\n/* Value defined to be higher than worst cases: low clocks freq,            */\r\n/* maximum prescaler.                                                       */\r\n/* Ex of profile low frequency : Clock source at 0.1 MHz, ADC clock         */\r\n/* prescaler 4, sampling time 12.5 ADC clock cycles, resolution 12 bits.    */\r\n/* Unit: ms                                                                 */\r\n#define ADC_CALIBRATION_TIMEOUT 10U\r\n\r\n/* Delay for temperature sensor stabilization time.                         */\r\n/* Maximum delay is 10us (refer to device datasheet, parameter tSTART).     */\r\n/* Unit: us                                                                 */\r\n#define ADC_TEMPSENSOR_DELAY_US 10U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n\r\n/** @defgroup ADCEx_Exported_Functions ADCEx Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup ADCEx_Exported_Functions_Group1 Extended Extended IO operation functions\r\n *  @brief    Extended Extended Input and Output operation functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### IO operation functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Start conversion of injected group.\r\n      (+) Stop conversion of injected group.\r\n      (+) Poll for conversion complete on injected group.\r\n      (+) Get result of injected channel conversion.\r\n      (+) Start conversion of injected group and enable interruptions.\r\n      (+) Stop conversion of injected group and disable interruptions.\r\n\r\n      (+) Start multimode and enable DMA transfer.\r\n      (+) Stop multimode and disable ADC DMA transfer.\r\n      (+) Get result of multimode conversion.\r\n\r\n      (+) Perform the ADC self-calibration for single or differential ending.\r\n      (+) Get calibration factors for single or differential ending.\r\n      (+) Set calibration factors for single or differential ending.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Perform an ADC automatic self-calibration\r\n *         Calibration prerequisite: ADC must be disabled (execute this\r\n *         function before HAL_ADC_Start() or after HAL_ADC_Stop() ).\r\n *         During calibration process, ADC is enabled. ADC is let enabled at\r\n *         the completion of this function.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n  uint32_t          tickstart;\r\n  __IO uint32_t     wait_loop_index = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* 1. Calibration prerequisite:                                             */\r\n  /*    - ADC must be disabled for at least two ADC clock cycles in disable   */\r\n  /*      mode before ADC enable                                              */\r\n  /* Stop potential conversion on going, on regular and injected groups       */\r\n  /* Disable ADC peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Check if ADC is effectively disabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_BUSY_INTERNAL);\r\n\r\n    /* Hardware prerequisite: delay before starting the calibration.          */\r\n    /*  - Computation of CPU clock cycles corresponding to ADC clock cycles.  */\r\n    /*  - Wait for the expected ADC clock cycles delay */\r\n    wait_loop_index = ((SystemCoreClock / HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC)) * ADC_PRECALIBRATION_DELAY_ADCCLOCKCYCLES);\r\n\r\n    while (wait_loop_index != 0U) {\r\n      wait_loop_index--;\r\n    }\r\n\r\n    /* 2. Enable the ADC peripheral */\r\n    ADC_Enable(hadc);\r\n\r\n    /* 3. Resets ADC calibration registers */\r\n    SET_BIT(hadc->Instance->CR2, ADC_CR2_RSTCAL);\r\n\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait for calibration reset completion */\r\n    while (HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_RSTCAL)) {\r\n      if ((HAL_GetTick() - tickstart) > ADC_CALIBRATION_TIMEOUT) {\r\n        /* Update ADC state machine to error */\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n        /* Process unlocked */\r\n        __HAL_UNLOCK(hadc);\r\n\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n\r\n    /* 4. Start ADC calibration */\r\n    SET_BIT(hadc->Instance->CR2, ADC_CR2_CAL);\r\n\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait for calibration completion */\r\n    while (HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_CAL)) {\r\n      if ((HAL_GetTick() - tickstart) > ADC_CALIBRATION_TIMEOUT) {\r\n        /* Update ADC state machine to error */\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n        /* Process unlocked */\r\n        __HAL_UNLOCK(hadc);\r\n\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n\r\n    /* Set ADC state */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_READY);\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Enables ADC, starts conversion of injected group.\r\n *         Interruptions enabled in this function: None.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Enable the ADC peripheral */\r\n  tmp_hal_status = ADC_Enable(hadc);\r\n\r\n  /* Start conversion if ADC is effectively enabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state                                                          */\r\n    /* - Clear state bitfield related to injected group conversion results    */\r\n    /* - Set state bitfield related to injected operation                     */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n\r\n    /* Case of independent mode or multimode (for devices with several ADCs): */\r\n    /* Set multimode state.                                                   */\r\n    if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n    } else {\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n    }\r\n\r\n    /* Check if a regular conversion is ongoing */\r\n    /* Note: On this device, there is no ADC error code fields related to     */\r\n    /*       conversions on group injected only. In case of conversion on     */\r\n    /*       going on group regular, no error code is reset.                  */\r\n    if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) {\r\n      /* Reset ADC all error code fields */\r\n      ADC_CLEAR_ERRORCODE(hadc);\r\n    }\r\n\r\n    /* Process unlocked */\r\n    /* Unlock before starting ADC conversions: in case of potential           */\r\n    /* interruption, to let the process to ADC IRQ Handler.                   */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    /* Clear injected group conversion flag */\r\n    /* (To ensure of no unknown state from potential previous ADC operations) */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JEOC);\r\n\r\n    /* Enable conversion of injected group.                                   */\r\n    /* If software start has been selected, conversion starts immediately.    */\r\n    /* If external trigger has been selected, conversion will start at next   */\r\n    /* trigger event.                                                         */\r\n    /* If automatic injected conversion is enabled, conversion will start     */\r\n    /* after next regular group conversion.                                   */\r\n    /* Case of multimode enabled (for devices with several ADCs): if ADC is   */\r\n    /* slave, ADC is enabled only (conversion is not started). If ADC is      */\r\n    /* master, ADC is enabled and conversion is started.                      */\r\n    if (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO)) {\r\n      if (ADC_IS_SOFTWARE_START_INJECTED(hadc) && ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n        /* Start ADC conversion on injected group with SW start */\r\n        SET_BIT(hadc->Instance->CR2, (ADC_CR2_JSWSTART | ADC_CR2_JEXTTRIG));\r\n      } else {\r\n        /* Start ADC conversion on injected group with external trigger */\r\n        SET_BIT(hadc->Instance->CR2, ADC_CR2_JEXTTRIG);\r\n      }\r\n    }\r\n  } else {\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop conversion of injected channels. Disable ADC peripheral if\r\n *         no regular conversion is on going.\r\n * @note   If ADC must be disabled and if conversion is on going on\r\n *         regular group, function HAL_ADC_Stop must be used to stop both\r\n *         injected and regular groups, and disable the ADC.\r\n * @note   If injected group mode auto-injection is enabled,\r\n *         function HAL_ADC_Stop must be used.\r\n * @note   In case of auto-injection mode, HAL_ADC_Stop must be used.\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion and disable ADC peripheral                     */\r\n  /* Conditioned to:                                                          */\r\n  /* - No conversion on the other group (regular group) is intended to        */\r\n  /*   continue (injected and regular groups stop conversion and ADC disable  */\r\n  /*   are common)                                                            */\r\n  /* - In case of auto-injection mode, HAL_ADC_Stop must be used.             */\r\n  if (((hadc->State & HAL_ADC_STATE_REG_BUSY) == RESET) && HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO)) {\r\n    /* Stop potential conversion on going, on regular and injected groups */\r\n    /* Disable ADC peripheral */\r\n    tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n    /* Check if ADC is effectively disabled */\r\n    if (tmp_hal_status == HAL_OK) {\r\n      /* Set ADC state */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n    }\r\n  } else {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n    tmp_hal_status = HAL_ERROR;\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Wait for injected group conversion to be completed.\r\n * @param  hadc: ADC handle\r\n * @param  Timeout: Timeout value in millisecond.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout) {\r\n  uint32_t tickstart;\r\n\r\n  /* Variables for polling in case of scan mode enabled and polling for each  */\r\n  /* conversion.                                                              */\r\n  __IO uint32_t Conversion_Timeout_CPU_cycles     = 0U;\r\n  uint32_t      Conversion_Timeout_CPU_cycles_max = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Get timeout */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Polling for end of conversion: differentiation if single/sequence        */\r\n  /* conversion.                                                              */\r\n  /* For injected group, flag JEOC is set only at the end of the sequence,    */\r\n  /* not for each conversion within the sequence.                             */\r\n  /*  - If single conversion for injected group (scan mode disabled or        */\r\n  /*    InjectedNbrOfConversion ==1), flag JEOC is used to determine the      */\r\n  /*    conversion completion.                                                */\r\n  /*  - If sequence conversion for injected group (scan mode enabled and      */\r\n  /*    InjectedNbrOfConversion >=2), flag JEOC is set only at the end of the */\r\n  /*    sequence.                                                             */\r\n  /*    To poll for each conversion, the maximum conversion time is computed  */\r\n  /*    from ADC conversion time (selected sampling time + conversion time of */\r\n  /*    12.5 ADC clock cycles) and APB2/ADC clock prescalers (depending on    */\r\n  /*    settings, conversion time range can be from 28 to 32256 CPU cycles).  */\r\n  /*    As flag JEOC is not set after each conversion, no timeout status can  */\r\n  /*    be set.                                                               */\r\n  if ((hadc->Instance->JSQR & ADC_JSQR_JL) == RESET) {\r\n    /* Wait until End of Conversion flag is raised */\r\n    while (HAL_IS_BIT_CLR(hadc->Instance->SR, ADC_FLAG_JEOC)) {\r\n      /* Check if timeout is disabled (set to infinite wait) */\r\n      if (Timeout != HAL_MAX_DELAY) {\r\n        if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n          /* Update ADC state machine to timeout */\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);\r\n\r\n          /* Process unlocked */\r\n          __HAL_UNLOCK(hadc);\r\n\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n  } else {\r\n    /* Replace polling by wait for maximum conversion time */\r\n    /*  - Computation of CPU clock cycles corresponding to ADC clock cycles   */\r\n    /*    and ADC maximum conversion cycles on all channels.                  */\r\n    /*  - Wait for the expected ADC clock cycles delay                        */\r\n    Conversion_Timeout_CPU_cycles_max = ((SystemCoreClock / HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC)) * ADC_CONVCYCLES_MAX_RANGE(hadc));\r\n\r\n    while (Conversion_Timeout_CPU_cycles < Conversion_Timeout_CPU_cycles_max) {\r\n      /* Check if timeout is disabled (set to infinite wait) */\r\n      if (Timeout != HAL_MAX_DELAY) {\r\n        if ((Timeout == 0) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n          /* Update ADC state machine to timeout */\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);\r\n\r\n          /* Process unlocked */\r\n          __HAL_UNLOCK(hadc);\r\n\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n      Conversion_Timeout_CPU_cycles++;\r\n    }\r\n  }\r\n\r\n  /* Clear injected group conversion flag */\r\n  /* Note: On STM32F1 ADC, clear regular conversion flag raised               */\r\n  /* simultaneously.                                                          */\r\n  __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JSTRT | ADC_FLAG_JEOC | ADC_FLAG_EOC);\r\n\r\n  /* Update ADC state machine */\r\n  SET_BIT(hadc->State, HAL_ADC_STATE_INJ_EOC);\r\n\r\n  /* Determine whether any further conversion upcoming on group injected      */\r\n  /* by external trigger or by automatic injected conversion                  */\r\n  /* from group regular.                                                      */\r\n  if (ADC_IS_SOFTWARE_START_INJECTED(hadc) || (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO) && (ADC_IS_SOFTWARE_START_REGULAR(hadc) && (hadc->Init.ContinuousConvMode == DISABLE)))) {\r\n    /* Set ADC state */\r\n    CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY);\r\n\r\n    if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) {\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_READY);\r\n    }\r\n  }\r\n\r\n  /* Return ADC state */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Enables ADC, starts conversion of injected group with interruption.\r\n *          - JEOC (end of conversion of injected group)\r\n *         Each of these interruptions has its dedicated callback function.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status.\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Enable the ADC peripheral */\r\n  tmp_hal_status = ADC_Enable(hadc);\r\n\r\n  /* Start conversion if ADC is effectively enabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state                                                          */\r\n    /* - Clear state bitfield related to injected group conversion results    */\r\n    /* - Set state bitfield related to injected operation                     */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n\r\n    /* Case of independent mode or multimode (for devices with several ADCs): */\r\n    /* Set multimode state.                                                   */\r\n    if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n    } else {\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n    }\r\n\r\n    /* Check if a regular conversion is ongoing */\r\n    /* Note: On this device, there is no ADC error code fields related to     */\r\n    /*       conversions on group injected only. In case of conversion on     */\r\n    /*       going on group regular, no error code is reset.                  */\r\n    if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) {\r\n      /* Reset ADC all error code fields */\r\n      ADC_CLEAR_ERRORCODE(hadc);\r\n    }\r\n\r\n    /* Process unlocked */\r\n    /* Unlock before starting ADC conversions: in case of potential           */\r\n    /* interruption, to let the process to ADC IRQ Handler.                   */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    /* Clear injected group conversion flag */\r\n    /* (To ensure of no unknown state from potential previous ADC operations) */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JEOC);\r\n\r\n    /* Enable end of conversion interrupt for injected channels */\r\n    __HAL_ADC_ENABLE_IT(hadc, ADC_IT_JEOC);\r\n\r\n    /* Start conversion of injected group if software start has been selected */\r\n    /* and if automatic injected conversion is disabled.                      */\r\n    /* If external trigger has been selected, conversion will start at next   */\r\n    /* trigger event.                                                         */\r\n    /* If automatic injected conversion is enabled, conversion will start     */\r\n    /* after next regular group conversion.                                   */\r\n    if (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO)) {\r\n      if (ADC_IS_SOFTWARE_START_INJECTED(hadc) && ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n        /* Start ADC conversion on injected group with SW start */\r\n        SET_BIT(hadc->Instance->CR2, (ADC_CR2_JSWSTART | ADC_CR2_JEXTTRIG));\r\n      } else {\r\n        /* Start ADC conversion on injected group with external trigger */\r\n        SET_BIT(hadc->Instance->CR2, ADC_CR2_JEXTTRIG);\r\n      }\r\n    }\r\n  } else {\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop conversion of injected channels, disable interruption of\r\n *         end-of-conversion. Disable ADC peripheral if no regular conversion\r\n *         is on going.\r\n * @note   If ADC must be disabled and if conversion is on going on\r\n *         regular group, function HAL_ADC_Stop must be used to stop both\r\n *         injected and regular groups, and disable the ADC.\r\n * @note   If injected group mode auto-injection is enabled,\r\n *         function HAL_ADC_Stop must be used.\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion and disable ADC peripheral                     */\r\n  /* Conditioned to:                                                          */\r\n  /* - No conversion on the other group (regular group) is intended to        */\r\n  /*   continue (injected and regular groups stop conversion and ADC disable  */\r\n  /*   are common)                                                            */\r\n  /* - In case of auto-injection mode, HAL_ADC_Stop must be used.             */\r\n  if (((hadc->State & HAL_ADC_STATE_REG_BUSY) == RESET) && HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO)) {\r\n    /* Stop potential conversion on going, on regular and injected groups */\r\n    /* Disable ADC peripheral */\r\n    tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n    /* Check if ADC is effectively disabled */\r\n    if (tmp_hal_status == HAL_OK) {\r\n      /* Disable ADC end of conversion interrupt for injected channels */\r\n      __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOC);\r\n\r\n      /* Set ADC state */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n    }\r\n  } else {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n    tmp_hal_status = HAL_ERROR;\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief  Enables ADC, starts conversion of regular group and transfers result\r\n *         through DMA.\r\n *         Multimode must have been previously configured using\r\n *         HAL_ADCEx_MultiModeConfigChannel() function.\r\n *         Interruptions enabled in this function:\r\n *          - DMA transfer complete\r\n *          - DMA half transfer\r\n *         Each of these interruptions has its dedicated callback function.\r\n * @note:  On STM32F1 devices, ADC slave regular group must be configured\r\n *         with conversion trigger ADC_SOFTWARE_START.\r\n * @note:  ADC slave can be enabled preliminarily using single-mode\r\n *         HAL_ADC_Start() function.\r\n * @param  hadc: ADC handle of ADC master (handle of ADC slave must not be used)\r\n * @param  pData: The destination Buffer address.\r\n * @param  Length: The length of data to be transferred from ADC peripheral to memory.\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n  ADC_HandleTypeDef tmphadcSlave;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));\r\n  assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Set a temporary handle of the ADC slave associated to the ADC master     */\r\n  ADC_MULTI_SLAVE(hadc, &tmphadcSlave);\r\n\r\n  /* On STM32F1 devices, ADC slave regular group must be configured with      */\r\n  /* conversion trigger ADC_SOFTWARE_START.                                   */\r\n  /* Note: External trigger of ADC slave must be enabled, it is already done  */\r\n  /*       into function \"HAL_ADC_Init()\".                                    */\r\n  if (!ADC_IS_SOFTWARE_START_REGULAR(&tmphadcSlave)) {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Enable the ADC peripherals: master and slave (in case if not already     */\r\n  /* enabled previously)                                                      */\r\n  tmp_hal_status = ADC_Enable(hadc);\r\n  if (tmp_hal_status == HAL_OK) {\r\n    tmp_hal_status = ADC_Enable(&tmphadcSlave);\r\n  }\r\n\r\n  /* Start conversion if all ADCs of multimode are effectively enabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state (ADC master)                                             */\r\n    /* - Clear state bitfield related to regular group conversion results     */\r\n    /* - Set state bitfield related to regular operation                      */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_MULTIMODE_SLAVE, HAL_ADC_STATE_REG_BUSY);\r\n\r\n    /* If conversions on group regular are also triggering group injected,    */\r\n    /* update ADC state.                                                      */\r\n    if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) {\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n    }\r\n\r\n    /* Process unlocked */\r\n    /* Unlock before starting ADC conversions: in case of potential           */\r\n    /* interruption, to let the process to ADC IRQ Handler.                   */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    /* Set ADC error code to none */\r\n    ADC_CLEAR_ERRORCODE(hadc);\r\n\r\n    /* Set the DMA transfer complete callback */\r\n    hadc->DMA_Handle->XferCpltCallback = ADC_DMAConvCplt;\r\n\r\n    /* Manage ADC and DMA start: ADC overrun interruption, DMA start, ADC     */\r\n    /* start (in case of SW start):                                           */\r\n\r\n    /* Clear regular group conversion flag and overrun flag */\r\n    /* (To ensure of no unknown state from potential previous ADC operations) */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC);\r\n\r\n    /* Enable ADC DMA mode of ADC master */\r\n    SET_BIT(hadc->Instance->CR2, ADC_CR2_DMA);\r\n\r\n    /* Start the DMA channel */\r\n    HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&hadc->Instance->DR, (uint32_t)pData, Length);\r\n\r\n    /* Start conversion of regular group if software start has been selected. */\r\n    /* If external trigger has been selected, conversion will start at next   */\r\n    /* trigger event.                                                         */\r\n    /* Note: Alternate trigger for single conversion could be to force an     */\r\n    /*       additional set of bit ADON \"hadc->Instance->CR2 |= ADC_CR2_ADON;\"*/\r\n    if (ADC_IS_SOFTWARE_START_REGULAR(hadc)) {\r\n      /* Start ADC conversion on regular group with SW start */\r\n      SET_BIT(hadc->Instance->CR2, (ADC_CR2_SWSTART | ADC_CR2_EXTTRIG));\r\n    } else {\r\n      /* Start ADC conversion on regular group with external trigger */\r\n      SET_BIT(hadc->Instance->CR2, ADC_CR2_EXTTRIG);\r\n    }\r\n  } else {\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop ADC conversion of regular group (and injected channels in\r\n *         case of auto_injection mode), disable ADC DMA transfer, disable\r\n *         ADC peripheral.\r\n * @note   Multimode is kept enabled after this function. To disable multimode\r\n *         (set with HAL_ADCEx_MultiModeConfigChannel(), ADC must be\r\n *         reinitialized using HAL_ADC_Init() or HAL_ADC_ReInit().\r\n * @note   In case of DMA configured in circular mode, function\r\n *         HAL_ADC_Stop_DMA must be called after this function with handle of\r\n *         ADC slave, to properly disable the DMA channel.\r\n * @param  hadc: ADC handle of ADC master (handle of ADC slave must not be used)\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n  ADC_HandleTypeDef tmphadcSlave;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC master peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Check if ADC is effectively disabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set a temporary handle of the ADC slave associated to the ADC master   */\r\n    ADC_MULTI_SLAVE(hadc, &tmphadcSlave);\r\n\r\n    /* Disable ADC slave peripheral */\r\n    tmp_hal_status = ADC_ConversionStop_Disable(&tmphadcSlave);\r\n\r\n    /* Check if ADC is effectively disabled */\r\n    if (tmp_hal_status != HAL_OK) {\r\n      /* Update ADC state machine to error */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n      /* Process unlocked */\r\n      __HAL_UNLOCK(hadc);\r\n\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Disable ADC DMA mode */\r\n    CLEAR_BIT(hadc->Instance->CR2, ADC_CR2_DMA);\r\n\r\n    /* Reset configuration of ADC DMA continuous request for dual mode */\r\n    CLEAR_BIT(hadc->Instance->CR1, ADC_CR1_DUALMOD);\r\n\r\n    /* Disable the DMA channel (in case of DMA in circular mode or stop while */\r\n    /* while DMA transfer is on going)                                        */\r\n    tmp_hal_status = HAL_DMA_Abort(hadc->DMA_Handle);\r\n\r\n    /* Change ADC state (ADC master) */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @brief  Get ADC injected group conversion result.\r\n * @note   Reading register JDRx automatically clears ADC flag JEOC\r\n *         (ADC group injected end of unitary conversion).\r\n * @note   This function does not clear ADC flag JEOS\r\n *         (ADC group injected end of sequence conversion)\r\n *         Occurrence of flag JEOS rising:\r\n *          - If sequencer is composed of 1 rank, flag JEOS is equivalent\r\n *            to flag JEOC.\r\n *          - If sequencer is composed of several ranks, during the scan\r\n *            sequence flag JEOC only is raised, at the end of the scan sequence\r\n *            both flags JEOC and EOS are raised.\r\n *         Flag JEOS must not be cleared by this function because\r\n *         it would not be compliant with low power features\r\n *         (feature low power auto-wait, not available on all STM32 families).\r\n *         To clear this flag, either use function:\r\n *         in programming model IT: @ref HAL_ADC_IRQHandler(), in programming\r\n *         model polling: @ref HAL_ADCEx_InjectedPollForConversion()\r\n *         or @ref __HAL_ADC_CLEAR_FLAG(&hadc, ADC_FLAG_JEOS).\r\n * @param  hadc: ADC handle\r\n * @param  InjectedRank: the converted ADC injected rank.\r\n *          This parameter can be one of the following values:\r\n *            @arg ADC_INJECTED_RANK_1: Injected Channel1 selected\r\n *            @arg ADC_INJECTED_RANK_2: Injected Channel2 selected\r\n *            @arg ADC_INJECTED_RANK_3: Injected Channel3 selected\r\n *            @arg ADC_INJECTED_RANK_4: Injected Channel4 selected\r\n * @retval ADC group injected conversion data\r\n */\r\nuint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef *hadc, uint32_t InjectedRank) {\r\n  uint32_t tmp_jdr = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_INJECTED_RANK(InjectedRank));\r\n\r\n  /* Get ADC converted value */\r\n  switch (InjectedRank) {\r\n  case ADC_INJECTED_RANK_4:\r\n    tmp_jdr = hadc->Instance->JDR4;\r\n    break;\r\n  case ADC_INJECTED_RANK_3:\r\n    tmp_jdr = hadc->Instance->JDR3;\r\n    break;\r\n  case ADC_INJECTED_RANK_2:\r\n    tmp_jdr = hadc->Instance->JDR2;\r\n    break;\r\n  case ADC_INJECTED_RANK_1:\r\n  default:\r\n    tmp_jdr = hadc->Instance->JDR1;\r\n    break;\r\n  }\r\n\r\n  /* Return ADC converted value */\r\n  return tmp_jdr;\r\n}\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief  Returns the last ADC Master&Slave regular conversions results data\r\n *         in the selected multi mode.\r\n * @param  hadc: ADC handle of ADC master (handle of ADC slave must not be used)\r\n * @retval The converted data value.\r\n */\r\nuint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef *hadc) {\r\n  uint32_t tmpDR = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Note: EOC flag is not cleared here by software because automatically     */\r\n  /*       cleared by hardware when reading register DR.                      */\r\n\r\n  /* On STM32F1 devices, ADC1 data register DR contains ADC2 conversions      */\r\n  /* only if ADC1 DMA mode is enabled.                                        */\r\n  tmpDR = hadc->Instance->DR;\r\n\r\n  if (HAL_IS_BIT_CLR(ADC1->CR2, ADC_CR2_DMA)) {\r\n    tmpDR |= (ADC2->DR << 16U);\r\n  }\r\n\r\n  /* Return ADC converted value */\r\n  return tmpDR;\r\n}\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @brief  Injected conversion complete callback in non blocking mode\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\n__weak void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hadc);\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_ADCEx_InjectedConvCpltCallback could be implemented in the user file\r\n  */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADCEx_Exported_Functions_Group2 Extended Peripheral Control functions\r\n  * @brief    Extended Peripheral Control functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n             ##### Peripheral Control functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Configure channels on injected group\r\n      (+) Configure multimode\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Configures the ADC injected group and the selected channel to be\r\n *         linked to the injected group.\r\n * @note   Possibility to update parameters on the fly:\r\n *         This function initializes injected group, following calls to this\r\n *         function can be used to reconfigure some parameters of structure\r\n *         \"ADC_InjectionConfTypeDef\" on the fly, without reseting the ADC.\r\n *         The setting of these parameters is conditioned to ADC state:\r\n *         this function must be called when ADC is not under conversion.\r\n * @param  hadc: ADC handle\r\n * @param  sConfigInjected: Structure of ADC injected group and ADC channel for\r\n *         injected group.\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef *hadc, ADC_InjectionConfTypeDef *sConfigInjected) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_CHANNEL(sConfigInjected->InjectedChannel));\r\n  assert_param(IS_ADC_SAMPLE_TIME(sConfigInjected->InjectedSamplingTime));\r\n  assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->AutoInjectedConv));\r\n  assert_param(IS_ADC_EXTTRIGINJEC(sConfigInjected->ExternalTrigInjecConv));\r\n  assert_param(IS_ADC_RANGE(sConfigInjected->InjectedOffset));\r\n\r\n  if (hadc->Init.ScanConvMode != ADC_SCAN_DISABLE) {\r\n    assert_param(IS_ADC_INJECTED_RANK(sConfigInjected->InjectedRank));\r\n    assert_param(IS_ADC_INJECTED_NB_CONV(sConfigInjected->InjectedNbrOfConversion));\r\n    assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->InjectedDiscontinuousConvMode));\r\n  }\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Configuration of injected group sequencer:                               */\r\n  /* - if scan mode is disabled, injected channels sequence length is set to  */\r\n  /*   0x00: 1 channel converted (channel on regular rank 1)                  */\r\n  /*   Parameter \"InjectedNbrOfConversion\" is discarded.                      */\r\n  /*   Note: Scan mode is present by hardware on this device and, if          */\r\n  /*   disabled, discards automatically nb of conversions. Anyway, nb of      */\r\n  /*   conversions is forced to 0x00 for alignment over all STM32 devices.    */\r\n  /* - if scan mode is enabled, injected channels sequence length is set to   */\r\n  /*   parameter \"InjectedNbrOfConversion\".                                   */\r\n  //  if (hadc->Init.ScanConvMode == ADC_SCAN_DISABLE)\r\n  //  {\r\n  //    if (sConfigInjected->InjectedRank == ADC_INJECTED_RANK_1)\r\n  //    {\r\n  //      /* Clear the old SQx bits for all injected ranks */\r\n  //      MODIFY_REG(hadc->Instance->JSQR                             ,\r\n  //                 ADC_JSQR_JL   |\r\n  //                 ADC_JSQR_JSQ4 |\r\n  //                 ADC_JSQR_JSQ3 |\r\n  //                 ADC_JSQR_JSQ2 |\r\n  //                 ADC_JSQR_JSQ1                                    ,\r\n  //                 ADC_JSQR_RK_JL(sConfigInjected->InjectedChannel,\r\n  //                                  ADC_INJECTED_RANK_1,\r\n  //                                  0x01U));\r\n  //    }\r\n  //    /* If another injected rank than rank1 was intended to be set, and could  */\r\n  //    /* not due to ScanConvMode disabled, error is reported.                   */\r\n  //    else\r\n  //    {\r\n  //      /* Update ADC state machine to error */\r\n  //      SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n  //\r\n  //      tmp_hal_status = HAL_ERROR;\r\n  //    }\r\n  //  }\r\n  //  else\r\n  {\r\n    /* Since injected channels rank conv. order depends on total number of   */\r\n    /* injected conversions, selected rank must be below or equal to total   */\r\n    /* number of injected conversions to be updated.                         */\r\n    if (sConfigInjected->InjectedRank <= sConfigInjected->InjectedNbrOfConversion) {\r\n      /* Clear the old SQx bits for the selected rank */\r\n      /* Set the SQx bits for the selected rank */\r\n      MODIFY_REG(hadc->Instance->JSQR,\r\n\r\n                 ADC_JSQR_JL | ADC_JSQR_RK_JL(ADC_JSQR_JSQ1, sConfigInjected->InjectedRank, sConfigInjected->InjectedNbrOfConversion),\r\n\r\n                 ADC_JSQR_JL_SHIFT(sConfigInjected->InjectedNbrOfConversion) |\r\n                     ADC_JSQR_RK_JL(sConfigInjected->InjectedChannel, sConfigInjected->InjectedRank, sConfigInjected->InjectedNbrOfConversion));\r\n    } else {\r\n      /* Clear the old SQx bits for the selected rank */\r\n      MODIFY_REG(hadc->Instance->JSQR,\r\n\r\n                 ADC_JSQR_JL | ADC_JSQR_RK_JL(ADC_JSQR_JSQ1, sConfigInjected->InjectedRank, sConfigInjected->InjectedNbrOfConversion),\r\n\r\n                 0x00000000U);\r\n    }\r\n  }\r\n\r\n  /* Configuration of injected group                                          */\r\n  /* Parameters update conditioned to ADC state:                              */\r\n  /* Parameters that can be updated only when ADC is disabled:                */\r\n  /*  - external trigger to start conversion                                  */\r\n  /* Parameters update not conditioned to ADC state:                          */\r\n  /*  - Automatic injected conversion                                         */\r\n  /*  - Injected discontinuous mode                                           */\r\n  /* Note: In case of ADC already enabled, caution to not launch an unwanted  */\r\n  /*       conversion while modifying register CR2 by writing 1 to bit ADON.  */\r\n  if (ADC_IS_ENABLE(hadc) == RESET) {\r\n    MODIFY_REG(hadc->Instance->CR2, ADC_CR2_JEXTSEL | ADC_CR2_ADON, ADC_CFGR_JEXTSEL(hadc, sConfigInjected->ExternalTrigInjecConv));\r\n  }\r\n\r\n  /* Configuration of injected group                                          */\r\n  /*  - Automatic injected conversion                                         */\r\n  /*  - Injected discontinuous mode                                           */\r\n\r\n  /* Automatic injected conversion can be enabled if injected group         */\r\n  /* external triggers are disabled.                                        */\r\n  if (sConfigInjected->AutoInjectedConv == ENABLE) {\r\n    if (sConfigInjected->ExternalTrigInjecConv == ADC_INJECTED_SOFTWARE_START) {\r\n      SET_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO);\r\n    } else {\r\n      /* Update ADC state machine to error */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n      tmp_hal_status = HAL_ERROR;\r\n    }\r\n  }\r\n\r\n  /* Injected discontinuous can be enabled only if auto-injected mode is    */\r\n  /* disabled.                                                              */\r\n  if (sConfigInjected->InjectedDiscontinuousConvMode == ENABLE) {\r\n    if (sConfigInjected->AutoInjectedConv == DISABLE) {\r\n      SET_BIT(hadc->Instance->CR1, ADC_CR1_JDISCEN);\r\n    } else {\r\n      /* Update ADC state machine to error */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n      tmp_hal_status = HAL_ERROR;\r\n    }\r\n  }\r\n\r\n  /* InjectedChannel sampling time configuration */\r\n  /* For channels 10 to 17 */\r\n  if (sConfigInjected->InjectedChannel >= ADC_CHANNEL_10) {\r\n    MODIFY_REG(hadc->Instance->SMPR1, ADC_SMPR1(ADC_SMPR1_SMP10, sConfigInjected->InjectedChannel), ADC_SMPR1(sConfigInjected->InjectedSamplingTime, sConfigInjected->InjectedChannel));\r\n  } else /* For channels 0 to 9 */\r\n  {\r\n    MODIFY_REG(hadc->Instance->SMPR2, ADC_SMPR2(ADC_SMPR2_SMP0, sConfigInjected->InjectedChannel), ADC_SMPR2(sConfigInjected->InjectedSamplingTime, sConfigInjected->InjectedChannel));\r\n  }\r\n\r\n  /* Configure the offset: offset enable/disable, InjectedChannel, offset value */\r\n  switch (sConfigInjected->InjectedRank) {\r\n  case 1:\r\n    /* Set injected channel 1 offset */\r\n    MODIFY_REG(hadc->Instance->JOFR1, ADC_JOFR1_JOFFSET1, sConfigInjected->InjectedOffset);\r\n    break;\r\n  case 2:\r\n    /* Set injected channel 2 offset */\r\n    MODIFY_REG(hadc->Instance->JOFR2, ADC_JOFR2_JOFFSET2, sConfigInjected->InjectedOffset);\r\n    break;\r\n  case 3:\r\n    /* Set injected channel 3 offset */\r\n    MODIFY_REG(hadc->Instance->JOFR3, ADC_JOFR3_JOFFSET3, sConfigInjected->InjectedOffset);\r\n    break;\r\n  case 4:\r\n  default:\r\n    MODIFY_REG(hadc->Instance->JOFR4, ADC_JOFR4_JOFFSET4, sConfigInjected->InjectedOffset);\r\n    break;\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief  Enable ADC multimode and configure multimode parameters\r\n * @note   Possibility to update parameters on the fly:\r\n *         This function initializes multimode parameters, following\r\n *         calls to this function can be used to reconfigure some parameters\r\n *         of structure \"ADC_MultiModeTypeDef\" on the fly, without reseting\r\n *         the ADCs (both ADCs of the common group).\r\n *         The setting of these parameters is conditioned to ADC state.\r\n *         For parameters constraints, see comments of structure\r\n *         \"ADC_MultiModeTypeDef\".\r\n * @note   To change back configuration from multimode to single mode, ADC must\r\n *         be reset (using function HAL_ADC_Init() ).\r\n * @param  hadc: ADC handle\r\n * @param  multimode: Structure of ADC multimode configuration\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n  ADC_HandleTypeDef tmphadcSlave;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_MODE(multimode->Mode));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Set a temporary handle of the ADC slave associated to the ADC master     */\r\n  ADC_MULTI_SLAVE(hadc, &tmphadcSlave);\r\n\r\n  /* Parameters update conditioned to ADC state:                              */\r\n  /* Parameters that can be updated when ADC is disabled or enabled without   */\r\n  /* conversion on going on regular group:                                    */\r\n  /*  - ADC master and ADC slave DMA configuration                            */\r\n  /* Parameters that can be updated only when ADC is disabled:                */\r\n  /*  - Multimode mode selection                                              */\r\n  /* To optimize code, all multimode settings can be set when both ADCs of    */\r\n  /* the common group are in state: disabled.                                 */\r\n  if ((ADC_IS_ENABLE(hadc) == RESET) && (ADC_IS_ENABLE(&tmphadcSlave) == RESET) && (IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance))) {\r\n    MODIFY_REG(hadc->Instance->CR1, ADC_CR1_DUALMOD, multimode->Mode);\r\n  }\r\n  /* If one of the ADC sharing the same common group is enabled, no update    */\r\n  /* could be done on neither of the multimode structure parameters.          */\r\n  else {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n    tmp_hal_status = HAL_ERROR;\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_ADC_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_cortex.c\r\n  * @author  MCD Application Team\r\n  * @brief   CORTEX HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the CORTEX:\r\n  *           + Initialization and de-initialization functions\r\n  *           + Peripheral Control functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                        ##### How to use this driver #####\r\n  ==============================================================================\r\n\r\n    [..]\r\n    *** How to configure Interrupts using CORTEX HAL driver ***\r\n    ===========================================================\r\n    [..]\r\n    This section provides functions allowing to configure the NVIC interrupts (IRQ).\r\n    The Cortex-M3 exceptions are managed by CMSIS functions.\r\n\r\n    (#) Configure the NVIC Priority Grouping using HAL_NVIC_SetPriorityGrouping()\r\n        function according to the following table.\r\n    (#) Configure the priority of the selected IRQ Channels using HAL_NVIC_SetPriority().\r\n    (#) Enable the selected IRQ Channels using HAL_NVIC_EnableIRQ().\r\n    (#) please refer to programming manual for details in how to configure priority.\r\n\r\n     -@- When the NVIC_PRIORITYGROUP_0 is selected, IRQ preemption is no more possible.\r\n         The pending IRQ priority will be managed only by the sub priority.\r\n\r\n     -@- IRQ priority order (sorted by highest to lowest priority):\r\n        (+@) Lowest preemption priority\r\n        (+@) Lowest sub priority\r\n        (+@) Lowest hardware priority (IRQ number)\r\n\r\n    [..]\r\n    *** How to configure Systick using CORTEX HAL driver ***\r\n    ========================================================\r\n    [..]\r\n    Setup SysTick Timer for time base.\r\n\r\n   (+) The HAL_SYSTICK_Config()function calls the SysTick_Config() function which\r\n       is a CMSIS function that:\r\n        (++) Configures the SysTick Reload register with value passed as function parameter.\r\n        (++) Configures the SysTick IRQ priority to the lowest value 0x0F.\r\n        (++) Resets the SysTick Counter register.\r\n        (++) Configures the SysTick Counter clock source to be Core Clock Source (HCLK).\r\n        (++) Enables the SysTick Interrupt.\r\n        (++) Starts the SysTick Counter.\r\n\r\n   (+) You can change the SysTick Clock source to be HCLK_Div8 by calling the macro\r\n       __HAL_CORTEX_SYSTICKCLK_CONFIG(SYSTICK_CLKSOURCE_HCLK_DIV8) just after the\r\n       HAL_SYSTICK_Config() function call. The __HAL_CORTEX_SYSTICKCLK_CONFIG() macro is defined\r\n       inside the stm32f1xx_hal_cortex.h file.\r\n\r\n   (+) You can change the SysTick IRQ priority by calling the\r\n       HAL_NVIC_SetPriority(SysTick_IRQn,...) function just after the HAL_SYSTICK_Config() function\r\n       call. The HAL_NVIC_SetPriority() call the NVIC_SetPriority() function which is a CMSIS function.\r\n\r\n   (+) To adjust the SysTick time base, use the following formula:\r\n\r\n       Reload Value = SysTick Counter Clock (Hz) x  Desired Time base (s)\r\n       (++) Reload Value is the parameter to be passed for HAL_SYSTICK_Config() function\r\n       (++) Reload Value should not exceed 0xFFFFFF\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup CORTEX CORTEX\r\n * @brief CORTEX HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_CORTEX_MODULE_ENABLED\r\n\r\n/* Private types -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private constants ---------------------------------------------------------*/\r\n/* Private macros ------------------------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @defgroup CORTEX_Exported_Functions CORTEX Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup CORTEX_Exported_Functions_Group1 Initialization and de-initialization functions\r\n  *  @brief    Initialization and Configuration functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n              ##### Initialization and de-initialization functions #####\r\n  ==============================================================================\r\n    [..]\r\n      This section provides the CORTEX HAL driver functions allowing to configure Interrupts\r\n      Systick functionalities\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Sets the priority grouping field (preemption priority and subpriority)\r\n *         using the required unlock sequence.\r\n * @param  PriorityGroup: The priority grouping bits length.\r\n *         This parameter can be one of the following values:\r\n *         @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority\r\n *                                    4 bits for subpriority\r\n *         @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority\r\n *                                    3 bits for subpriority\r\n *         @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority\r\n *                                    2 bits for subpriority\r\n *         @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority\r\n *                                    1 bits for subpriority\r\n *         @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority\r\n *                                    0 bits for subpriority\r\n * @note   When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible.\r\n *         The pending IRQ priority will be managed only by the subpriority.\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));\r\n\r\n  /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */\r\n  NVIC_SetPriorityGrouping(PriorityGroup);\r\n}\r\n\r\n/**\r\n * @brief  Sets the priority of an interrupt.\r\n * @param  IRQn: External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xx.h))\r\n * @param  PreemptPriority: The preemption priority for the IRQn channel.\r\n *         This parameter can be a value between 0 and 15\r\n *         A lower priority value indicates a higher priority\r\n * @param  SubPriority: the subpriority level for the IRQ channel.\r\n *         This parameter can be a value between 0 and 15\r\n *         A lower priority value indicates a higher priority.\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) {\r\n  uint32_t prioritygroup = 0x00U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_SUB_PRIORITY(SubPriority));\r\n  assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority));\r\n\r\n  prioritygroup = NVIC_GetPriorityGrouping();\r\n\r\n  NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority));\r\n}\r\n\r\n/**\r\n * @brief  Enables a device specific interrupt in the NVIC interrupt controller.\r\n * @note   To configure interrupts priority correctly, the NVIC_PriorityGroupConfig()\r\n *         function should be called before.\r\n * @param  IRQn External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_EnableIRQ(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Enable interrupt */\r\n  NVIC_EnableIRQ(IRQn);\r\n}\r\n\r\n/**\r\n * @brief  Disables a device specific interrupt in the NVIC interrupt controller.\r\n * @param  IRQn External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_DisableIRQ(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Disable interrupt */\r\n  NVIC_DisableIRQ(IRQn);\r\n}\r\n\r\n/**\r\n * @brief  Initiates a system reset request to reset the MCU.\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_SystemReset(void) {\r\n  /* System Reset */\r\n  NVIC_SystemReset();\r\n}\r\n\r\n/**\r\n * @brief  Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n *         Counter is in free running mode to generate periodic interrupts.\r\n * @param  TicksNumb: Specifies the ticks Number of ticks between two interrupts.\r\n * @retval status:  - 0  Function succeeded.\r\n *                  - 1  Function failed.\r\n */\r\nuint32_t HAL_SYSTICK_Config(uint32_t TicksNumb) { return SysTick_Config(TicksNumb); }\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_Exported_Functions_Group2 Peripheral Control functions\r\n  *  @brief   Cortex control functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                      ##### Peripheral Control functions #####\r\n  ==============================================================================\r\n    [..]\r\n      This subsection provides a set of functions allowing to control the CORTEX\r\n      (NVIC, SYSTICK, MPU) functionalities.\r\n\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/**\r\n * @brief  Disables the MPU\r\n * @retval None\r\n */\r\nvoid HAL_MPU_Disable(void) {\r\n  /* Make sure outstanding transfers are done */\r\n  __DMB();\r\n\r\n  /* Disable fault exceptions */\r\n  SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;\r\n\r\n  /* Disable the MPU and clear the control register*/\r\n  MPU->CTRL = 0U;\r\n}\r\n\r\n/**\r\n * @brief  Enable the MPU.\r\n * @param  MPU_Control: Specifies the control mode of the MPU during hard fault,\r\n *          NMI, FAULTMASK and privileged access to the default memory\r\n *          This parameter can be one of the following values:\r\n *            @arg MPU_HFNMI_PRIVDEF_NONE\r\n *            @arg MPU_HARDFAULT_NMI\r\n *            @arg MPU_PRIVILEGED_DEFAULT\r\n *            @arg MPU_HFNMI_PRIVDEF\r\n * @retval None\r\n */\r\nvoid HAL_MPU_Enable(uint32_t MPU_Control) {\r\n  /* Enable the MPU */\r\n  MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;\r\n\r\n  /* Enable fault exceptions */\r\n  SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;\r\n\r\n  /* Ensure MPU setting take effects */\r\n  __DSB();\r\n  __ISB();\r\n}\r\n\r\n/**\r\n * @brief  Initializes and configures the Region and the memory to be protected.\r\n * @param  MPU_Init: Pointer to a MPU_Region_InitTypeDef structure that contains\r\n *                the initialization and configuration information.\r\n * @retval None\r\n */\r\nvoid HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init) {\r\n  /* Check the parameters */\r\n  assert_param(IS_MPU_REGION_NUMBER(MPU_Init->Number));\r\n  assert_param(IS_MPU_REGION_ENABLE(MPU_Init->Enable));\r\n\r\n  /* Set the Region number */\r\n  MPU->RNR = MPU_Init->Number;\r\n\r\n  if ((MPU_Init->Enable) != RESET) {\r\n    /* Check the parameters */\r\n    assert_param(IS_MPU_INSTRUCTION_ACCESS(MPU_Init->DisableExec));\r\n    assert_param(IS_MPU_REGION_PERMISSION_ATTRIBUTE(MPU_Init->AccessPermission));\r\n    assert_param(IS_MPU_TEX_LEVEL(MPU_Init->TypeExtField));\r\n    assert_param(IS_MPU_ACCESS_SHAREABLE(MPU_Init->IsShareable));\r\n    assert_param(IS_MPU_ACCESS_CACHEABLE(MPU_Init->IsCacheable));\r\n    assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable));\r\n    assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable));\r\n    assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size));\r\n\r\n    MPU->RBAR = MPU_Init->BaseAddress;\r\n    MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) | ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) | ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) |\r\n                ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) | ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) | ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) |\r\n                ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) | ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) | ((uint32_t)MPU_Init->Enable << MPU_RASR_ENABLE_Pos);\r\n  } else {\r\n    MPU->RBAR = 0x00U;\r\n    MPU->RASR = 0x00U;\r\n  }\r\n}\r\n#endif /* __MPU_PRESENT */\r\n\r\n/**\r\n * @brief  Gets the priority grouping field from the NVIC Interrupt Controller.\r\n * @retval Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field)\r\n */\r\nuint32_t HAL_NVIC_GetPriorityGrouping(void) {\r\n  /* Get the PRIGROUP[10:8] field value */\r\n  return NVIC_GetPriorityGrouping();\r\n}\r\n\r\n/**\r\n * @brief  Gets the priority of an interrupt.\r\n * @param  IRQn: External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @param   PriorityGroup: the priority grouping bits length.\r\n *         This parameter can be one of the following values:\r\n *           @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority\r\n *                                      4 bits for subpriority\r\n *           @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority\r\n *                                      3 bits for subpriority\r\n *           @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority\r\n *                                      2 bits for subpriority\r\n *           @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority\r\n *                                      1 bits for subpriority\r\n *           @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority\r\n *                                      0 bits for subpriority\r\n * @param  pPreemptPriority: Pointer on the Preemptive priority value (starting from 0).\r\n * @param  pSubPriority: Pointer on the Subpriority value (starting from 0).\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t *pPreemptPriority, uint32_t *pSubPriority) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));\r\n  /* Get priority for Cortex-M system or device specific interrupts */\r\n  NVIC_DecodePriority(NVIC_GetPriority(IRQn), PriorityGroup, pPreemptPriority, pSubPriority);\r\n}\r\n\r\n/**\r\n * @brief  Sets Pending bit of an external interrupt.\r\n * @param  IRQn External interrupt number\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Set interrupt pending */\r\n  NVIC_SetPendingIRQ(IRQn);\r\n}\r\n\r\n/**\r\n * @brief  Gets Pending Interrupt (reads the pending register in the NVIC\r\n *         and returns the pending bit for the specified interrupt).\r\n * @param  IRQn External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval status: - 0  Interrupt status is not pending.\r\n *                 - 1  Interrupt status is pending.\r\n */\r\nuint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Return 1 if pending else 0 */\r\n  return NVIC_GetPendingIRQ(IRQn);\r\n}\r\n\r\n/**\r\n * @brief  Clears the pending bit of an external interrupt.\r\n * @param  IRQn External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Clear pending interrupt */\r\n  NVIC_ClearPendingIRQ(IRQn);\r\n}\r\n\r\n/**\r\n * @brief Gets active interrupt ( reads the active register in NVIC and returns the active bit).\r\n * @param IRQn External interrupt number\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval status: - 0  Interrupt status is not pending.\r\n *                 - 1  Interrupt status is pending.\r\n */\r\nuint32_t HAL_NVIC_GetActive(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Return 1 if active else 0 */\r\n  return NVIC_GetActive(IRQn);\r\n}\r\n\r\n/**\r\n * @brief  Configures the SysTick clock source.\r\n * @param  CLKSource: specifies the SysTick clock source.\r\n *         This parameter can be one of the following values:\r\n *             @arg SYSTICK_CLKSOURCE_HCLK_DIV8: AHB clock divided by 8 selected as SysTick clock source.\r\n *             @arg SYSTICK_CLKSOURCE_HCLK: AHB clock selected as SysTick clock source.\r\n * @retval None\r\n */\r\nvoid HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource) {\r\n  /* Check the parameters */\r\n  assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource));\r\n  if (CLKSource == SYSTICK_CLKSOURCE_HCLK) {\r\n    SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK;\r\n  } else {\r\n    SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  This function handles SYSTICK interrupt request.\r\n * @retval None\r\n */\r\nvoid HAL_SYSTICK_IRQHandler(void) { HAL_SYSTICK_Callback(); }\r\n\r\n/**\r\n * @brief  SYSTICK callback.\r\n * @retval None\r\n */\r\n__weak void HAL_SYSTICK_Callback(void) {\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_SYSTICK_Callback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_CORTEX_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_dma.c\r\n  * @author  MCD Application Team\r\n  * @brief   DMA HAL module driver.\r\n  *         This file provides firmware functions to manage the following\r\n  *         functionalities of the Direct Memory Access (DMA) peripheral:\r\n  *           + Initialization and de-initialization functions\r\n  *           + IO operation functions\r\n  *           + Peripheral State and errors functions\r\n  @verbatim\r\n  ==============================================================================\r\n                        ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..]\r\n   (#) Enable and configure the peripheral to be connected to the DMA Channel\r\n       (except for internal SRAM / FLASH memories: no initialization is\r\n       necessary). Please refer to the Reference manual for connection between peripherals\r\n       and DMA requests.\r\n\r\n   (#) For a given Channel, program the required configuration through the following parameters:\r\n       Channel request, Transfer Direction, Source and Destination data formats,\r\n       Circular or Normal mode, Channel Priority level, Source and Destination Increment mode\r\n       using HAL_DMA_Init() function.\r\n\r\n   (#) Use HAL_DMA_GetState() function to return the DMA state and HAL_DMA_GetError() in case of error\r\n       detection.\r\n\r\n   (#) Use HAL_DMA_Abort() function to abort the current transfer\r\n\r\n     -@-   In Memory-to-Memory transfer mode, Circular mode is not allowed.\r\n     *** Polling mode IO operation ***\r\n     =================================\r\n    [..]\r\n          (+) Use HAL_DMA_Start() to start DMA transfer after the configuration of Source\r\n              address and destination address and the Length of data to be transferred\r\n          (+) Use HAL_DMA_PollForTransfer() to poll for the end of current transfer, in this\r\n              case a fixed Timeout can be configured by User depending from his application.\r\n\r\n     *** Interrupt mode IO operation ***\r\n     ===================================\r\n    [..]\r\n          (+) Configure the DMA interrupt priority using HAL_NVIC_SetPriority()\r\n          (+) Enable the DMA IRQ handler using HAL_NVIC_EnableIRQ()\r\n          (+) Use HAL_DMA_Start_IT() to start DMA transfer after the configuration of\r\n              Source address and destination address and the Length of data to be transferred.\r\n              In this case the DMA interrupt is configured\r\n          (+) Use HAL_DMA_IRQHandler() called under DMA_IRQHandler() Interrupt subroutine\r\n          (+) At the end of data transfer HAL_DMA_IRQHandler() function is executed and user can\r\n              add his own function by customization of function pointer XferCpltCallback and\r\n              XferErrorCallback (i.e. a member of DMA handle structure).\r\n\r\n     *** DMA HAL driver macros list ***\r\n     =============================================\r\n      [..]\r\n       Below the list of most used macros in DMA HAL driver.\r\n\r\n       (+) __HAL_DMA_ENABLE: Enable the specified DMA Channel.\r\n       (+) __HAL_DMA_DISABLE: Disable the specified DMA Channel.\r\n       (+) __HAL_DMA_GET_FLAG: Get the DMA Channel pending flags.\r\n       (+) __HAL_DMA_CLEAR_FLAG: Clear the DMA Channel pending flags.\r\n       (+) __HAL_DMA_ENABLE_IT: Enable the specified DMA Channel interrupts.\r\n       (+) __HAL_DMA_DISABLE_IT: Disable the specified DMA Channel interrupts.\r\n       (+) __HAL_DMA_GET_IT_SOURCE: Check whether the specified DMA Channel interrupt has occurred or not.\r\n\r\n     [..]\r\n      (@) You can refer to the DMA HAL driver header file for more useful macros\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup DMA DMA\r\n * @brief DMA HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_DMA_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @defgroup DMA_Private_Functions DMA Private Functions\r\n * @{\r\n */\r\nstatic void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions ---------------------------------------------------------*/\r\n\r\n/** @defgroup DMA_Exported_Functions DMA Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup DMA_Exported_Functions_Group1 Initialization and de-initialization functions\r\n  *  @brief   Initialization and de-initialization functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n             ##### Initialization and de-initialization functions  #####\r\n ===============================================================================\r\n    [..]\r\n    This section provides functions allowing to initialize the DMA Channel source\r\n    and destination addresses, incrementation and data sizes, transfer direction,\r\n    circular/normal mode selection, memory-to-memory mode selection and Channel priority value.\r\n    [..]\r\n    The HAL_DMA_Init() function follows the DMA configuration procedures as described in\r\n    reference manual.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initialize the DMA according to the specified\r\n *         parameters in the DMA_InitTypeDef and initialize the associated handle.\r\n * @param  hdma: Pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) {\r\n  uint32_t tmp = 0U;\r\n\r\n  /* Check the DMA handle allocation */\r\n  if (hdma == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance));\r\n  assert_param(IS_DMA_DIRECTION(hdma->Init.Direction));\r\n  assert_param(IS_DMA_PERIPHERAL_INC_STATE(hdma->Init.PeriphInc));\r\n  assert_param(IS_DMA_MEMORY_INC_STATE(hdma->Init.MemInc));\r\n  assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(hdma->Init.PeriphDataAlignment));\r\n  assert_param(IS_DMA_MEMORY_DATA_SIZE(hdma->Init.MemDataAlignment));\r\n  assert_param(IS_DMA_MODE(hdma->Init.Mode));\r\n  assert_param(IS_DMA_PRIORITY(hdma->Init.Priority));\r\n\r\n#if defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F100xE) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  /* calculation of the channel index */\r\n  if ((uint32_t)(hdma->Instance) < (uint32_t)(DMA2_Channel1)) {\r\n    /* DMA1 */\r\n    hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2;\r\n    hdma->DmaBaseAddress = DMA1;\r\n  } else {\r\n    /* DMA2 */\r\n    hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA2_Channel1) / ((uint32_t)DMA2_Channel2 - (uint32_t)DMA2_Channel1)) << 2;\r\n    hdma->DmaBaseAddress = DMA2;\r\n  }\r\n#else\r\n  /* DMA1 */\r\n  hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2;\r\n  hdma->DmaBaseAddress = DMA1;\r\n#endif /* STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG || STM32F100xE || STM32F105xC || STM32F107xC */\r\n\r\n  /* Change DMA peripheral state */\r\n  hdma->State = HAL_DMA_STATE_BUSY;\r\n\r\n  /* Get the CR register value */\r\n  tmp = hdma->Instance->CCR;\r\n\r\n  /* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC and DIR bits */\r\n  tmp &= ((uint32_t)~(DMA_CCR_PL | DMA_CCR_MSIZE | DMA_CCR_PSIZE | DMA_CCR_MINC | DMA_CCR_PINC | DMA_CCR_CIRC | DMA_CCR_DIR));\r\n\r\n  /* Prepare the DMA Channel configuration */\r\n  tmp |= hdma->Init.Direction | hdma->Init.PeriphInc | hdma->Init.MemInc | hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment | hdma->Init.Mode | hdma->Init.Priority;\r\n\r\n  /* Write to DMA Channel CR register */\r\n  hdma->Instance->CCR = tmp;\r\n\r\n  /* Initialise the error code */\r\n  hdma->ErrorCode = HAL_DMA_ERROR_NONE;\r\n\r\n  /* Initialize the DMA state*/\r\n  hdma->State = HAL_DMA_STATE_READY;\r\n  /* Allocate lock resource and initialize it */\r\n  hdma->Lock = HAL_UNLOCKED;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitialize the DMA peripheral.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma) {\r\n  /* Check the DMA handle allocation */\r\n  if (hdma == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance));\r\n\r\n  /* Disable the selected DMA Channelx */\r\n  __HAL_DMA_DISABLE(hdma);\r\n\r\n  /* Reset DMA Channel control register */\r\n  hdma->Instance->CCR = 0U;\r\n\r\n  /* Reset DMA Channel Number of Data to Transfer register */\r\n  hdma->Instance->CNDTR = 0U;\r\n\r\n  /* Reset DMA Channel peripheral address register */\r\n  hdma->Instance->CPAR = 0U;\r\n\r\n  /* Reset DMA Channel memory address register */\r\n  hdma->Instance->CMAR = 0U;\r\n\r\n#if defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F100xE) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  /* calculation of the channel index */\r\n  if ((uint32_t)(hdma->Instance) < (uint32_t)(DMA2_Channel1)) {\r\n    /* DMA1 */\r\n    hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2;\r\n    hdma->DmaBaseAddress = DMA1;\r\n  } else {\r\n    /* DMA2 */\r\n    hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA2_Channel1) / ((uint32_t)DMA2_Channel2 - (uint32_t)DMA2_Channel1)) << 2;\r\n    hdma->DmaBaseAddress = DMA2;\r\n  }\r\n#else\r\n  /* DMA1 */\r\n  hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2;\r\n  hdma->DmaBaseAddress = DMA1;\r\n#endif /* STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG || STM32F100xE || STM32F105xC || STM32F107xC */\r\n\r\n  /* Clear all flags */\r\n  hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << (hdma->ChannelIndex));\r\n\r\n  /* Clean all callbacks */\r\n  hdma->XferCpltCallback     = NULL;\r\n  hdma->XferHalfCpltCallback = NULL;\r\n  hdma->XferErrorCallback    = NULL;\r\n  hdma->XferAbortCallback    = NULL;\r\n\r\n  /* Reset the error code */\r\n  hdma->ErrorCode = HAL_DMA_ERROR_NONE;\r\n\r\n  /* Reset the DMA state */\r\n  hdma->State = HAL_DMA_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(hdma);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Exported_Functions_Group2 Input and Output operation functions\r\n  *  @brief   Input and Output operation functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                      #####  IO operation functions  #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Configure the source, destination address and data length and Start DMA transfer\r\n      (+) Configure the source, destination address and data length and\r\n          Start DMA transfer with interrupt\r\n      (+) Abort DMA transfer\r\n      (+) Poll for transfer complete\r\n      (+) Handle DMA interrupt request\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Start the DMA Transfer.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @param  SrcAddress: The source memory Buffer address\r\n * @param  DstAddress: The destination memory Buffer address\r\n * @param  DataLength: The length of data to be transferred from source to destination\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_DMA_BUFFER_SIZE(DataLength));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hdma);\r\n\r\n  if (HAL_DMA_STATE_READY == hdma->State) {\r\n    /* Change DMA peripheral state */\r\n    hdma->State     = HAL_DMA_STATE_BUSY;\r\n    hdma->ErrorCode = HAL_DMA_ERROR_NONE;\r\n\r\n    /* Disable the peripheral */\r\n    __HAL_DMA_DISABLE(hdma);\r\n\r\n    /* Configure the source, destination address and the data length & clear flags*/\r\n    DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength);\r\n\r\n    /* Enable the Peripheral */\r\n    __HAL_DMA_ENABLE(hdma);\r\n  } else {\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hdma);\r\n    status = HAL_BUSY;\r\n  }\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Start the DMA Transfer with interrupt enabled.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @param  SrcAddress: The source memory Buffer address\r\n * @param  DstAddress: The destination memory Buffer address\r\n * @param  DataLength: The length of data to be transferred from source to destination\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_DMA_BUFFER_SIZE(DataLength));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hdma);\r\n\r\n  if (HAL_DMA_STATE_READY == hdma->State) {\r\n    /* Change DMA peripheral state */\r\n    hdma->State     = HAL_DMA_STATE_BUSY;\r\n    hdma->ErrorCode = HAL_DMA_ERROR_NONE;\r\n\r\n    /* Disable the peripheral */\r\n    __HAL_DMA_DISABLE(hdma);\r\n\r\n    /* Configure the source, destination address and the data length & clear flags*/\r\n    DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength);\r\n\r\n    /* Enable the transfer complete interrupt */\r\n    /* Enable the transfer Error interrupt */\r\n    if (NULL != hdma->XferHalfCpltCallback) {\r\n      /* Enable the Half transfer complete interrupt as well */\r\n      __HAL_DMA_ENABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));\r\n    } else {\r\n      __HAL_DMA_DISABLE_IT(hdma, DMA_IT_HT);\r\n      __HAL_DMA_ENABLE_IT(hdma, (DMA_IT_TC | DMA_IT_TE));\r\n    }\r\n    /* Enable the Peripheral */\r\n    __HAL_DMA_ENABLE(hdma);\r\n  } else {\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hdma);\r\n\r\n    /* Remain BUSY */\r\n    status = HAL_BUSY;\r\n  }\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Abort the DMA Transfer.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Disable DMA IT */\r\n  __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));\r\n\r\n  /* Disable the channel */\r\n  __HAL_DMA_DISABLE(hdma);\r\n\r\n  /* Clear all flags */\r\n  hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex);\r\n\r\n  /* Change the DMA state */\r\n  hdma->State = HAL_DMA_STATE_READY;\r\n\r\n  /* Process Unlocked */\r\n  __HAL_UNLOCK(hdma);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Aborts the DMA Transfer in Interrupt mode.\r\n * @param  hdma  : pointer to a DMA_HandleTypeDef structure that contains\r\n *                 the configuration information for the specified DMA Channel.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  if (HAL_DMA_STATE_BUSY != hdma->State) {\r\n    /* no transfer ongoing */\r\n    hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;\r\n\r\n    status = HAL_ERROR;\r\n  } else {\r\n    /* Disable DMA IT */\r\n    __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));\r\n\r\n    /* Disable the channel */\r\n    __HAL_DMA_DISABLE(hdma);\r\n\r\n    /* Clear all flags */\r\n    __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_GI_FLAG_INDEX(hdma));\r\n\r\n    /* Change the DMA state */\r\n    hdma->State = HAL_DMA_STATE_READY;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hdma);\r\n\r\n    /* Call User Abort callback */\r\n    if (hdma->XferAbortCallback != NULL) {\r\n      hdma->XferAbortCallback(hdma);\r\n    }\r\n  }\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Polling for transfer complete.\r\n * @param  hdma:    pointer to a DMA_HandleTypeDef structure that contains\r\n *                  the configuration information for the specified DMA Channel.\r\n * @param  CompleteLevel: Specifies the DMA level complete.\r\n * @param  Timeout:       Timeout duration.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout) {\r\n  uint32_t temp;\r\n  uint32_t tickstart = 0U;\r\n\r\n  if (HAL_DMA_STATE_BUSY != hdma->State) {\r\n    /* no transfer ongoing */\r\n    hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;\r\n    __HAL_UNLOCK(hdma);\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Polling mode not supported in circular mode */\r\n  if (RESET != (hdma->Instance->CCR & DMA_CCR_CIRC)) {\r\n    hdma->ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED;\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Get the level transfer complete flag */\r\n  if (CompleteLevel == HAL_DMA_FULL_TRANSFER) {\r\n    /* Transfer Complete flag */\r\n    temp = __HAL_DMA_GET_TC_FLAG_INDEX(hdma);\r\n  } else {\r\n    /* Half Transfer Complete flag */\r\n    temp = __HAL_DMA_GET_HT_FLAG_INDEX(hdma);\r\n  }\r\n\r\n  /* Get tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  while (__HAL_DMA_GET_FLAG(hdma, temp) == RESET) {\r\n    if ((__HAL_DMA_GET_FLAG(hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma)) != RESET)) {\r\n      /* When a DMA transfer error occurs */\r\n      /* A hardware clear of its EN bits is performed */\r\n      /* Clear all flags */\r\n      hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex);\r\n\r\n      /* Update error code */\r\n      SET_BIT(hdma->ErrorCode, HAL_DMA_ERROR_TE);\r\n\r\n      /* Change the DMA state */\r\n      hdma->State = HAL_DMA_STATE_READY;\r\n\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(hdma);\r\n\r\n      return HAL_ERROR;\r\n    }\r\n    /* Check for the Timeout */\r\n    if (Timeout != HAL_MAX_DELAY) {\r\n      if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n        /* Update error code */\r\n        SET_BIT(hdma->ErrorCode, HAL_DMA_ERROR_TIMEOUT);\r\n\r\n        /* Change the DMA state */\r\n        hdma->State = HAL_DMA_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hdma);\r\n\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n  }\r\n\r\n  if (CompleteLevel == HAL_DMA_FULL_TRANSFER) {\r\n    /* Clear the transfer complete flag */\r\n    __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma));\r\n\r\n    /* The selected Channelx EN bit is cleared (DMA is disabled and\r\n    all transfers are complete) */\r\n    hdma->State = HAL_DMA_STATE_READY;\r\n  } else {\r\n    /* Clear the half transfer complete flag */\r\n    __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma));\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hdma);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Handles DMA interrupt request.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @retval None\r\n */\r\nvoid HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma) {\r\n  uint32_t flag_it   = hdma->DmaBaseAddress->ISR;\r\n  uint32_t source_it = hdma->Instance->CCR;\r\n\r\n  /* Half Transfer Complete Interrupt management ******************************/\r\n  if (((flag_it & (DMA_FLAG_HT1 << hdma->ChannelIndex)) != RESET) && ((source_it & DMA_IT_HT) != RESET)) {\r\n\r\n    /* Clear the half transfer complete flag */\r\n    __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma));\r\n\r\n  }\r\n\r\n  /* Transfer Complete Interrupt management ***********************************/\r\n  else if (((flag_it & (DMA_FLAG_TC1 << hdma->ChannelIndex)) != RESET) && ((source_it & DMA_IT_TC) != RESET)) {\r\n    if ((hdma->Instance->CCR & DMA_CCR_CIRC) == 0U) {\r\n      /* Disable the transfer complete and error interrupt */\r\n      __HAL_DMA_DISABLE_IT(hdma, DMA_IT_TE | DMA_IT_TC);\r\n\r\n      /* Change the DMA state */\r\n      hdma->State = HAL_DMA_STATE_READY;\r\n    }\r\n    /* Clear the transfer complete flag */\r\n    __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma));\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hdma);\r\n\r\n    if (hdma->XferCpltCallback != NULL) {\r\n      /* Transfer complete callback */\r\n      hdma->XferCpltCallback(hdma);\r\n    }\r\n  }\r\n\r\n  /* Transfer Error Interrupt management **************************************/\r\n  else if ((RESET != (flag_it & (DMA_FLAG_TE1 << hdma->ChannelIndex))) && (RESET != (source_it & DMA_IT_TE))) {\r\n    /* When a DMA transfer error occurs */\r\n    /* A hardware clear of its EN bits is performed */\r\n    /* Disable ALL DMA IT */\r\n    __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));\r\n\r\n    /* Clear all flags */\r\n    hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex);\r\n\r\n    /* Update error code */\r\n    hdma->ErrorCode = HAL_DMA_ERROR_TE;\r\n\r\n    /* Change the DMA state */\r\n    hdma->State = HAL_DMA_STATE_READY;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hdma);\r\n\r\n    if (hdma->XferErrorCallback != NULL) {\r\n      /* Transfer error callback */\r\n      hdma->XferErrorCallback(hdma);\r\n    }\r\n  }\r\n  return;\r\n}\r\n\r\n/**\r\n * @brief Register callbacks\r\n * @param hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *              the configuration information for the specified DMA Channel.\r\n * @param CallbackID: User Callback identifer\r\n *                    a HAL_DMA_CallbackIDTypeDef ENUM as parameter.\r\n * @param pCallback: pointer to private callbacsk function which has pointer to\r\n *                   a DMA_HandleTypeDef structure as parameter.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (*pCallback)(DMA_HandleTypeDef *_hdma)) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hdma);\r\n\r\n  if (HAL_DMA_STATE_READY == hdma->State) {\r\n    switch (CallbackID) {\r\n    case HAL_DMA_XFER_CPLT_CB_ID:\r\n      hdma->XferCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_HALFCPLT_CB_ID:\r\n      hdma->XferHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_ERROR_CB_ID:\r\n      hdma->XferErrorCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_ABORT_CB_ID:\r\n      hdma->XferAbortCallback = pCallback;\r\n      break;\r\n\r\n    default:\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else {\r\n    status = HAL_ERROR;\r\n  }\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(hdma);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief UnRegister callbacks\r\n * @param hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *              the configuration information for the specified DMA Channel.\r\n * @param CallbackID: User Callback identifer\r\n *                    a HAL_DMA_CallbackIDTypeDef ENUM as parameter.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hdma);\r\n\r\n  if (HAL_DMA_STATE_READY == hdma->State) {\r\n    switch (CallbackID) {\r\n    case HAL_DMA_XFER_CPLT_CB_ID:\r\n      hdma->XferCpltCallback = NULL;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_HALFCPLT_CB_ID:\r\n      hdma->XferHalfCpltCallback = NULL;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_ERROR_CB_ID:\r\n      hdma->XferErrorCallback = NULL;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_ABORT_CB_ID:\r\n      hdma->XferAbortCallback = NULL;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_ALL_CB_ID:\r\n      hdma->XferCpltCallback     = NULL;\r\n      hdma->XferHalfCpltCallback = NULL;\r\n      hdma->XferErrorCallback    = NULL;\r\n      hdma->XferAbortCallback    = NULL;\r\n      break;\r\n\r\n    default:\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else {\r\n    status = HAL_ERROR;\r\n  }\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(hdma);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Exported_Functions_Group3 Peripheral State and Errors functions\r\n  *  @brief    Peripheral State and Errors functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n            ##### Peripheral State and Errors functions #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides functions allowing to\r\n      (+) Check the DMA state\r\n      (+) Get error code\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Return the DMA hande state.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @retval HAL state\r\n */\r\nHAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma) {\r\n  /* Return DMA handle state */\r\n  return hdma->State;\r\n}\r\n\r\n/**\r\n * @brief  Return the DMA error code.\r\n * @param  hdma : pointer to a DMA_HandleTypeDef structure that contains\r\n *              the configuration information for the specified DMA Channel.\r\n * @retval DMA Error Code\r\n */\r\nuint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma) { return hdma->ErrorCode; }\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup DMA_Private_Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Sets the DMA Transfer parameter.\r\n * @param  hdma:       pointer to a DMA_HandleTypeDef structure that contains\r\n *                     the configuration information for the specified DMA Channel.\r\n * @param  SrcAddress: The source memory Buffer address\r\n * @param  DstAddress: The destination memory Buffer address\r\n * @param  DataLength: The length of data to be transferred from source to destination\r\n * @retval HAL status\r\n */\r\nstatic void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) {\r\n  /* Clear all flags */\r\n  hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex);\r\n\r\n  /* Configure DMA Channel data length */\r\n  hdma->Instance->CNDTR = DataLength;\r\n\r\n  /* Memory to Peripheral */\r\n  if ((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH) {\r\n    /* Configure DMA Channel destination address */\r\n    hdma->Instance->CPAR = DstAddress;\r\n\r\n    /* Configure DMA Channel source address */\r\n    hdma->Instance->CMAR = SrcAddress;\r\n  }\r\n  /* Peripheral to Memory */\r\n  else {\r\n    /* Configure DMA Channel source address */\r\n    hdma->Instance->CPAR = SrcAddress;\r\n\r\n    /* Configure DMA Channel destination address */\r\n    hdma->Instance->CMAR = DstAddress;\r\n  }\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_DMA_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_flash.c\r\n  * @author  MCD Application Team\r\n  * @brief   FLASH HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the internal FLASH memory:\r\n  *           + Program operations functions\r\n  *           + Memory Control functions\r\n  *           + Peripheral State functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                        ##### FLASH peripheral features #####\r\n  ==============================================================================\r\n  [..] The Flash memory interface manages CPU AHB I-Code and D-Code accesses\r\n       to the Flash memory. It implements the erase and program Flash memory operations\r\n       and the read and write protection mechanisms.\r\n\r\n  [..] The Flash memory interface accelerates code execution with a system of instruction\r\n      prefetch.\r\n\r\n  [..] The FLASH main features are:\r\n      (+) Flash memory read operations\r\n      (+) Flash memory program/erase operations\r\n      (+) Read / write protections\r\n      (+) Prefetch on I-Code\r\n      (+) Option Bytes programming\r\n\r\n\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..]\r\n      This driver provides functions and macros to configure and program the FLASH\r\n      memory of all STM32F1xx devices.\r\n\r\n      (#) FLASH Memory I/O Programming functions: this group includes all needed\r\n          functions to erase and program the main memory:\r\n        (++) Lock and Unlock the FLASH interface\r\n        (++) Erase function: Erase page, erase all pages\r\n        (++) Program functions: half word, word and doubleword\r\n      (#) FLASH Option Bytes Programming functions: this group includes all needed\r\n          functions to manage the Option Bytes:\r\n        (++) Lock and Unlock the Option Bytes\r\n        (++) Set/Reset the write protection\r\n        (++) Set the Read protection Level\r\n        (++) Program the user Option Bytes\r\n        (++) Launch the Option Bytes loader\r\n        (++) Erase Option Bytes\r\n        (++) Program the data Option Bytes\r\n        (++) Get the Write protection.\r\n        (++) Get the user option bytes.\r\n\r\n      (#) Interrupts and flags management functions : this group\r\n          includes all needed functions to:\r\n        (++) Handle FLASH interrupts\r\n        (++) Wait for last FLASH operation according to its status\r\n        (++) Get error flag status\r\n\r\n  [..] In addition to these function, this driver includes a set of macros allowing\r\n       to handle the following operations:\r\n\r\n      (+) Set/Get the latency\r\n      (+) Enable/Disable the prefetch buffer\r\n      (+) Enable/Disable the half cycle access\r\n      (+) Enable/Disable the FLASH interrupts\r\n      (+) Monitor the FLASH flags status\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_FLASH_MODULE_ENABLED\r\n\r\n/** @defgroup FLASH FLASH\r\n * @brief FLASH HAL module driver\r\n * @{\r\n */\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup FLASH_Private_Constants FLASH Private Constants\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro ---------------------------- ---------------------------------*/\r\n/** @defgroup FLASH_Private_Macros FLASH Private Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private variables ---------------------------------------------------------*/\r\n/** @defgroup FLASH_Private_Variables FLASH Private Variables\r\n * @{\r\n */\r\n/* Variables used for Erase pages under interruption*/\r\nFLASH_ProcessTypeDef pFlash;\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @defgroup FLASH_Private_Functions FLASH Private Functions\r\n * @{\r\n */\r\nstatic void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data);\r\nstatic void FLASH_SetErrorCode(void);\r\nextern void FLASH_PageErase(uint32_t PageAddress);\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions ---------------------------------------------------------*/\r\n/** @defgroup FLASH_Exported_Functions FLASH Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASH_Exported_Functions_Group1 Programming operation functions\r\n  *  @brief   Programming operation functions\r\n  *\r\n@verbatim\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Program halfword, word or double word at a specified address\r\n * @note   The function HAL_FLASH_Unlock() should be called before to unlock the FLASH interface\r\n *         The function HAL_FLASH_Lock() should be called after to lock the FLASH interface\r\n *\r\n * @note   If an erase and a program operations are requested simultaneously,\r\n *         the erase operation is performed before the program one.\r\n *\r\n * @note   FLASH should be previously erased before new programmation (only exception to this\r\n *         is when 0x0000 is programmed)\r\n *\r\n * @param  TypeProgram:  Indicate the way to program at a specified address.\r\n *                       This parameter can be a value of @ref FLASH_Type_Program\r\n * @param  Address:      Specifies the address to be programmed.\r\n * @param  Data:         Specifies the data to be programmed\r\n *\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data) {\r\n  HAL_StatusTypeDef status       = HAL_ERROR;\r\n  uint8_t           index        = 0;\r\n  uint8_t           nbiterations = 0;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(&pFlash);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));\r\n  assert_param(IS_FLASH_PROGRAM_ADDRESS(Address));\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  if (Address <= FLASH_BANK1_END) {\r\n#endif /* FLASH_BANK2_END */\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);\r\n#if defined(FLASH_BANK2_END)\r\n  } else {\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperationBank2(FLASH_TIMEOUT_VALUE);\r\n  }\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  if (status == HAL_OK) {\r\n    if (TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) {\r\n      /* Program halfword (16-bit) at a specified address. */\r\n      nbiterations = 1U;\r\n    } else if (TypeProgram == FLASH_TYPEPROGRAM_WORD) {\r\n      /* Program word (32-bit = 2*16-bit) at a specified address. */\r\n      nbiterations = 2U;\r\n    } else {\r\n      /* Program double word (64-bit = 4*16-bit) at a specified address. */\r\n      nbiterations = 4U;\r\n    }\r\n\r\n    for (index = 0U; index < nbiterations; index++) {\r\n      FLASH_Program_HalfWord((Address + (2U * index)), (uint16_t)(Data >> (16U * index)));\r\n\r\n#if defined(FLASH_BANK2_END)\r\n      if (Address <= FLASH_BANK1_END) {\r\n#endif /* FLASH_BANK2_END */\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);\r\n\r\n        /* If the program operation is completed, disable the PG Bit */\r\n        CLEAR_BIT(FLASH->CR, FLASH_CR_PG);\r\n#if defined(FLASH_BANK2_END)\r\n      } else {\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperationBank2(FLASH_TIMEOUT_VALUE);\r\n\r\n        /* If the program operation is completed, disable the PG Bit */\r\n        CLEAR_BIT(FLASH->CR2, FLASH_CR2_PG);\r\n      }\r\n#endif /* FLASH_BANK2_END */\r\n      /* In case of error, stop programation procedure */\r\n      if (status != HAL_OK) {\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Process Unlocked */\r\n  __HAL_UNLOCK(&pFlash);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Program halfword, word or double word at a specified address  with interrupt enabled.\r\n * @note   The function HAL_FLASH_Unlock() should be called before to unlock the FLASH interface\r\n *         The function HAL_FLASH_Lock() should be called after to lock the FLASH interface\r\n *\r\n * @note   If an erase and a program operations are requested simultaneously,\r\n *         the erase operation is performed before the program one.\r\n *\r\n * @param  TypeProgram: Indicate the way to program at a specified address.\r\n *                      This parameter can be a value of @ref FLASH_Type_Program\r\n * @param  Address:     Specifies the address to be programmed.\r\n * @param  Data:        Specifies the data to be programmed\r\n *\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(&pFlash);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));\r\n  assert_param(IS_FLASH_PROGRAM_ADDRESS(Address));\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  /* If procedure already ongoing, reject the next one */\r\n  if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  if (Address <= FLASH_BANK1_END) {\r\n    /* Enable End of FLASH Operation and Error source interrupts */\r\n    __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP_BANK1 | FLASH_IT_ERR_BANK1);\r\n\r\n  } else {\r\n    /* Enable End of FLASH Operation and Error source interrupts */\r\n    __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP_BANK2 | FLASH_IT_ERR_BANK2);\r\n  }\r\n#else\r\n  /* Enable End of FLASH Operation and Error source interrupts */\r\n  __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR);\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  pFlash.Address = Address;\r\n  pFlash.Data    = Data;\r\n\r\n  if (TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) {\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMHALFWORD;\r\n    /* Program halfword (16-bit) at a specified address. */\r\n    pFlash.DataRemaining = 1U;\r\n  } else if (TypeProgram == FLASH_TYPEPROGRAM_WORD) {\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMWORD;\r\n    /* Program word (32-bit : 2*16-bit) at a specified address. */\r\n    pFlash.DataRemaining = 2U;\r\n  } else {\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMDOUBLEWORD;\r\n    /* Program double word (64-bit : 4*16-bit) at a specified address. */\r\n    pFlash.DataRemaining = 4U;\r\n  }\r\n\r\n  /* Program halfword (16-bit) at a specified address. */\r\n  FLASH_Program_HalfWord(Address, (uint16_t)Data);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief This function handles FLASH interrupt request.\r\n * @retval None\r\n */\r\nvoid HAL_FLASH_IRQHandler(void) {\r\n  uint32_t addresstmp = 0U;\r\n\r\n  /* Check FLASH operation error flags */\r\n#if defined(FLASH_BANK2_END)\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR_BANK1) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR_BANK1) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR_BANK2) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR_BANK2)))\r\n#else\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR))\r\n#endif /* FLASH_BANK2_END */\r\n  {\r\n    /* Return the faulty address */\r\n    addresstmp = pFlash.Address;\r\n    /* Reset address */\r\n    pFlash.Address = 0xFFFFFFFFU;\r\n\r\n    /* Save the Error code */\r\n    FLASH_SetErrorCode();\r\n\r\n    /* FLASH error interrupt user callback */\r\n    HAL_FLASH_OperationErrorCallback(addresstmp);\r\n\r\n    /* Stop the procedure ongoing */\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n  }\r\n\r\n  /* Check FLASH End of Operation flag  */\r\n#if defined(FLASH_BANK2_END)\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP_BANK1)) {\r\n    /* Clear FLASH End of Operation pending bit */\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP_BANK1);\r\n#else\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP)) {\r\n    /* Clear FLASH End of Operation pending bit */\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);\r\n#endif /* FLASH_BANK2_END */\r\n\r\n    /* Process can continue only if no error detected */\r\n    if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE) {\r\n      if (pFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE) {\r\n        /* Nb of pages to erased can be decreased */\r\n        pFlash.DataRemaining--;\r\n\r\n        /* Check if there are still pages to erase */\r\n        if (pFlash.DataRemaining != 0U) {\r\n          addresstmp = pFlash.Address;\r\n          /*Indicate user which sector has been erased */\r\n          HAL_FLASH_EndOfOperationCallback(addresstmp);\r\n\r\n          /*Increment sector number*/\r\n          addresstmp     = pFlash.Address + FLASH_PAGE_SIZE;\r\n          pFlash.Address = addresstmp;\r\n\r\n          /* If the erase operation is completed, disable the PER Bit */\r\n          CLEAR_BIT(FLASH->CR, FLASH_CR_PER);\r\n\r\n          FLASH_PageErase(addresstmp);\r\n        } else {\r\n          /* No more pages to Erase, user callback can be called. */\r\n          /* Reset Sector and stop Erase pages procedure */\r\n          pFlash.Address = addresstmp = 0xFFFFFFFFU;\r\n          pFlash.ProcedureOnGoing     = FLASH_PROC_NONE;\r\n          /* FLASH EOP interrupt user callback */\r\n          HAL_FLASH_EndOfOperationCallback(addresstmp);\r\n        }\r\n      } else if (pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) {\r\n        /* Operation is completed, disable the MER Bit */\r\n        CLEAR_BIT(FLASH->CR, FLASH_CR_MER);\r\n\r\n#if defined(FLASH_BANK2_END)\r\n        /* Stop Mass Erase procedure if no pending mass erase on other bank */\r\n        if (HAL_IS_BIT_CLR(FLASH->CR2, FLASH_CR2_MER)) {\r\n#endif /* FLASH_BANK2_END */\r\n          /* MassErase ended. Return the selected bank */\r\n          /* FLASH EOP interrupt user callback */\r\n          HAL_FLASH_EndOfOperationCallback(0U);\r\n\r\n          /* Stop Mass Erase procedure*/\r\n          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n        }\r\n#if defined(FLASH_BANK2_END)\r\n      }\r\n#endif /* FLASH_BANK2_END */\r\n      else {\r\n        /* Nb of 16-bit data to program can be decreased */\r\n        pFlash.DataRemaining--;\r\n\r\n        /* Check if there are still 16-bit data to program */\r\n        if (pFlash.DataRemaining != 0U) {\r\n          /* Increment address to 16-bit */\r\n          pFlash.Address += 2U;\r\n          addresstmp = pFlash.Address;\r\n\r\n          /* Shift to have next 16-bit data */\r\n          pFlash.Data = (pFlash.Data >> 16U);\r\n\r\n          /* Operation is completed, disable the PG Bit */\r\n          CLEAR_BIT(FLASH->CR, FLASH_CR_PG);\r\n\r\n          /*Program halfword (16-bit) at a specified address.*/\r\n          FLASH_Program_HalfWord(addresstmp, (uint16_t)pFlash.Data);\r\n        } else {\r\n          /* Program ended. Return the selected address */\r\n          /* FLASH EOP interrupt user callback */\r\n          if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMHALFWORD) {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address);\r\n          } else if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMWORD) {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address - 2U);\r\n          } else {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address - 6U);\r\n          }\r\n\r\n          /* Reset Address and stop Program procedure */\r\n          pFlash.Address          = 0xFFFFFFFFU;\r\n          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  /* Check FLASH End of Operation flag  */\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP_BANK2)) {\r\n    /* Clear FLASH End of Operation pending bit */\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP_BANK2);\r\n\r\n    /* Process can continue only if no error detected */\r\n    if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE) {\r\n      if (pFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE) {\r\n        /* Nb of pages to erased can be decreased */\r\n        pFlash.DataRemaining--;\r\n\r\n        /* Check if there are still pages to erase*/\r\n        if (pFlash.DataRemaining != 0U) {\r\n          /* Indicate user which page address has been erased*/\r\n          HAL_FLASH_EndOfOperationCallback(pFlash.Address);\r\n\r\n          /* Increment page address to next page */\r\n          pFlash.Address += FLASH_PAGE_SIZE;\r\n          addresstmp = pFlash.Address;\r\n\r\n          /* Operation is completed, disable the PER Bit */\r\n          CLEAR_BIT(FLASH->CR2, FLASH_CR2_PER);\r\n\r\n          FLASH_PageErase(addresstmp);\r\n        } else {\r\n          /*No more pages to Erase*/\r\n\r\n          /*Reset Address and stop Erase pages procedure*/\r\n          pFlash.Address          = 0xFFFFFFFFU;\r\n          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n\r\n          /* FLASH EOP interrupt user callback */\r\n          HAL_FLASH_EndOfOperationCallback(pFlash.Address);\r\n        }\r\n      } else if (pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) {\r\n        /* Operation is completed, disable the MER Bit */\r\n        CLEAR_BIT(FLASH->CR2, FLASH_CR2_MER);\r\n\r\n        if (HAL_IS_BIT_CLR(FLASH->CR, FLASH_CR_MER)) {\r\n          /* MassErase ended. Return the selected bank*/\r\n          /* FLASH EOP interrupt user callback */\r\n          HAL_FLASH_EndOfOperationCallback(0U);\r\n\r\n          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n        }\r\n      } else {\r\n        /* Nb of 16-bit data to program can be decreased */\r\n        pFlash.DataRemaining--;\r\n\r\n        /* Check if there are still 16-bit data to program */\r\n        if (pFlash.DataRemaining != 0U) {\r\n          /* Increment address to 16-bit */\r\n          pFlash.Address += 2U;\r\n          addresstmp = pFlash.Address;\r\n\r\n          /* Shift to have next 16-bit data */\r\n          pFlash.Data = (pFlash.Data >> 16U);\r\n\r\n          /* Operation is completed, disable the PG Bit */\r\n          CLEAR_BIT(FLASH->CR2, FLASH_CR2_PG);\r\n\r\n          /*Program halfword (16-bit) at a specified address.*/\r\n          FLASH_Program_HalfWord(addresstmp, (uint16_t)pFlash.Data);\r\n        } else {\r\n          /*Program ended. Return the selected address*/\r\n          /* FLASH EOP interrupt user callback */\r\n          if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMHALFWORD) {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address);\r\n          } else if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMWORD) {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address - 2U);\r\n          } else {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address - 6U);\r\n          }\r\n\r\n          /* Reset Address and stop Program procedure*/\r\n          pFlash.Address          = 0xFFFFFFFFU;\r\n          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n        }\r\n      }\r\n    }\r\n  }\r\n#endif\r\n\r\n  if (pFlash.ProcedureOnGoing == FLASH_PROC_NONE) {\r\n#if defined(FLASH_BANK2_END)\r\n    /* Operation is completed, disable the PG, PER and MER Bits for both bank */\r\n    CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_PER | FLASH_CR_MER));\r\n    CLEAR_BIT(FLASH->CR2, (FLASH_CR2_PG | FLASH_CR2_PER | FLASH_CR2_MER));\r\n\r\n    /* Disable End of FLASH Operation and Error source interrupts for both banks */\r\n    __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP_BANK1 | FLASH_IT_ERR_BANK1 | FLASH_IT_EOP_BANK2 | FLASH_IT_ERR_BANK2);\r\n#else\r\n    /* Operation is completed, disable the PG, PER and MER Bits */\r\n    CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_PER | FLASH_CR_MER));\r\n\r\n    /* Disable End of FLASH Operation and Error source interrupts */\r\n    __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR);\r\n#endif /* FLASH_BANK2_END */\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(&pFlash);\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  FLASH end of operation interrupt callback\r\n * @param  ReturnValue: The value saved in this parameter depends on the ongoing procedure\r\n *                 - Mass Erase: No return value expected\r\n *                 - Pages Erase: Address of the page which has been erased\r\n *                    (if 0xFFFFFFFF, it means that all the selected pages have been erased)\r\n *                 - Program: Address which was selected for data program\r\n * @retval none\r\n */\r\n__weak void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(ReturnValue);\r\n\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_FLASH_EndOfOperationCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  FLASH operation error interrupt callback\r\n * @param  ReturnValue: The value saved in this parameter depends on the ongoing procedure\r\n *                 - Mass Erase: No return value expected\r\n *                 - Pages Erase: Address of the page which returned an error\r\n *                 - Program: Address which was selected for data program\r\n * @retval none\r\n */\r\n__weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(ReturnValue);\r\n\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_FLASH_OperationErrorCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASH_Exported_Functions_Group2 Peripheral Control functions\r\n *  @brief   management functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### Peripheral Control functions #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the FLASH\r\n    memory operations.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Unlock the FLASH control register access\r\n * @retval HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_Unlock(void) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  if (READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) {\r\n    /* Authorize the FLASH Registers access */\r\n    WRITE_REG(FLASH->KEYR, FLASH_KEY1);\r\n    WRITE_REG(FLASH->KEYR, FLASH_KEY2);\r\n\r\n    /* Verify Flash is unlocked */\r\n    if (READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) {\r\n      status = HAL_ERROR;\r\n    }\r\n  }\r\n#if defined(FLASH_BANK2_END)\r\n  if (READ_BIT(FLASH->CR2, FLASH_CR2_LOCK) != RESET) {\r\n    /* Authorize the FLASH BANK2 Registers access */\r\n    WRITE_REG(FLASH->KEYR2, FLASH_KEY1);\r\n    WRITE_REG(FLASH->KEYR2, FLASH_KEY2);\r\n\r\n    /* Verify Flash BANK2 is unlocked */\r\n    if (READ_BIT(FLASH->CR2, FLASH_CR2_LOCK) != RESET) {\r\n      status = HAL_ERROR;\r\n    }\r\n  }\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Locks the FLASH control register access\r\n * @retval HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_Lock(void) {\r\n  /* Set the LOCK Bit to lock the FLASH Registers access */\r\n  SET_BIT(FLASH->CR, FLASH_CR_LOCK);\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  /* Set the LOCK Bit to lock the FLASH BANK2 Registers access */\r\n  SET_BIT(FLASH->CR2, FLASH_CR2_LOCK);\r\n\r\n#endif /* FLASH_BANK2_END */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Unlock the FLASH Option Control Registers access.\r\n * @retval HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_OB_Unlock(void) {\r\n  if (HAL_IS_BIT_CLR(FLASH->CR, FLASH_CR_OPTWRE)) {\r\n    /* Authorizes the Option Byte register programming */\r\n    WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY1);\r\n    WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY2);\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Lock the FLASH Option Control Registers access.\r\n * @retval HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_OB_Lock(void) {\r\n  /* Clear the OPTWRE Bit to lock the FLASH Option Byte Registers access */\r\n  CLEAR_BIT(FLASH->CR, FLASH_CR_OPTWRE);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Launch the option byte loading.\r\n * @note   This function will reset automatically the MCU.\r\n * @retval None\r\n */\r\nvoid HAL_FLASH_OB_Launch(void) {\r\n  /* Initiates a system reset request to launch the option byte loading */\r\n  HAL_NVIC_SystemReset();\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASH_Exported_Functions_Group3 Peripheral errors functions\r\n *  @brief    Peripheral errors functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### Peripheral Errors functions #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection permit to get in run-time errors of  the FLASH peripheral.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Get the specific FLASH error flag.\r\n * @retval FLASH_ErrorCode The returned value can be:\r\n *            @ref FLASH_Error_Codes\r\n */\r\nuint32_t HAL_FLASH_GetError(void) { return pFlash.ErrorCode; }\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASH_Private_Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Program a half-word (16-bit) at a specified address.\r\n * @param  Address specify the address to be programmed.\r\n * @param  Data    specify the data to be programmed.\r\n * @retval None\r\n */\r\nstatic void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data) {\r\n  /* Clean the error context */\r\n  pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  if (Address <= FLASH_BANK1_END) {\r\n#endif /* FLASH_BANK2_END */\r\n    /* Proceed to program the new data */\r\n    SET_BIT(FLASH->CR, FLASH_CR_PG);\r\n#if defined(FLASH_BANK2_END)\r\n  } else {\r\n    /* Proceed to program the new data */\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_PG);\r\n  }\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  /* Write data in the address */\r\n  *(__IO uint16_t *)Address = Data;\r\n}\r\n\r\n/**\r\n * @brief  Wait for a FLASH operation to complete.\r\n * @param  Timeout  maximum flash operation timeout\r\n * @retval HAL Status\r\n */\r\nHAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout) {\r\n  /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset.\r\n     Even if the FLASH operation fails, the BUSY flag will be reset and an error\r\n     flag will be set */\r\n\r\n  uint32_t tickstart = HAL_GetTick();\r\n\r\n  while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) {\r\n    if (Timeout != HAL_MAX_DELAY) {\r\n      if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Check FLASH End of Operation flag  */\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP)) {\r\n    /* Clear FLASH End of Operation pending bit */\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);\r\n  }\r\n\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR)) {\r\n    /*Save the error code*/\r\n    FLASH_SetErrorCode();\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* There is no error flag set */\r\n  return HAL_OK;\r\n}\r\n\r\n#if defined(FLASH_BANK2_END)\r\n/**\r\n * @brief  Wait for a FLASH BANK2 operation to complete.\r\n * @param  Timeout maximum flash operation timeout\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef FLASH_WaitForLastOperationBank2(uint32_t Timeout) {\r\n  /* Wait for the FLASH BANK2 operation to complete by polling on BUSY flag to be reset.\r\n     Even if the FLASH BANK2 operation fails, the BUSY flag will be reset and an error\r\n     flag will be set */\r\n\r\n  uint32_t tickstart = HAL_GetTick();\r\n\r\n  while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY_BANK2)) {\r\n    if (Timeout != HAL_MAX_DELAY) {\r\n      if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Check FLASH End of Operation flag  */\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP_BANK2)) {\r\n    /* Clear FLASH End of Operation pending bit */\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP_BANK2);\r\n  }\r\n\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR_BANK2) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR_BANK2)) {\r\n    /*Save the error code*/\r\n    FLASH_SetErrorCode();\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* If there is an error flag set */\r\n  return HAL_OK;\r\n}\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/**\r\n * @brief  Set the specific FLASH error flag.\r\n * @retval None\r\n */\r\nstatic void FLASH_SetErrorCode(void) {\r\n  uint32_t flags = 0U;\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR_BANK2))\r\n#else\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR))\r\n#endif /* FLASH_BANK2_END */\r\n  {\r\n    pFlash.ErrorCode |= HAL_FLASH_ERROR_WRP;\r\n#if defined(FLASH_BANK2_END)\r\n    flags |= FLASH_FLAG_WRPERR | FLASH_FLAG_WRPERR_BANK2;\r\n#else\r\n    flags |= FLASH_FLAG_WRPERR;\r\n#endif /* FLASH_BANK2_END */\r\n  }\r\n#if defined(FLASH_BANK2_END)\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR_BANK2))\r\n#else\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR))\r\n#endif /* FLASH_BANK2_END */\r\n  {\r\n    pFlash.ErrorCode |= HAL_FLASH_ERROR_PROG;\r\n#if defined(FLASH_BANK2_END)\r\n    flags |= FLASH_FLAG_PGERR | FLASH_FLAG_PGERR_BANK2;\r\n#else\r\n    flags |= FLASH_FLAG_PGERR;\r\n#endif /* FLASH_BANK2_END */\r\n  }\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR)) {\r\n    pFlash.ErrorCode |= HAL_FLASH_ERROR_OPTV;\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);\r\n  }\r\n\r\n  /* Clear FLASH error pending bits */\r\n  __HAL_FLASH_CLEAR_FLAG(flags);\r\n}\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_FLASH_MODULE_ENABLED */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_flash_ex.c\r\n  * @author  MCD Application Team\r\n  * @brief   Extended FLASH HAL module driver.\r\n  *\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the FLASH peripheral:\r\n  *           + Extended Initialization/de-initialization functions\r\n  *           + Extended I/O operation functions\r\n  *           + Extended Peripheral Control functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n               ##### Flash peripheral extended features  #####\r\n  ==============================================================================\r\n\r\n                      ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..] This driver provides functions to configure and program the FLASH memory\r\n       of all STM32F1xxx devices. It includes\r\n\r\n        (++) Set/Reset the write protection\r\n        (++) Program the user Option Bytes\r\n        (++) Get the Read protection Level\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n#ifdef HAL_FLASH_MODULE_ENABLED\r\n\r\n/** @addtogroup FLASH\r\n * @{\r\n */\r\n/** @addtogroup FLASH_Private_Variables\r\n * @{\r\n */\r\n/* Variables used for Erase pages under interruption*/\r\nextern FLASH_ProcessTypeDef pFlash;\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx FLASHEx\r\n * @brief FLASH HAL Extension module driver\r\n * @{\r\n */\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Private_Constants FLASHEx Private Constants\r\n * @{\r\n */\r\n#define FLASH_POSITION_IWDGSW_BIT       FLASH_OBR_IWDG_SW_Pos\r\n#define FLASH_POSITION_OB_USERDATA0_BIT FLASH_OBR_DATA0_Pos\r\n#define FLASH_POSITION_OB_USERDATA1_BIT FLASH_OBR_DATA1_Pos\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Private_Macros FLASHEx Private Macros\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @defgroup FLASHEx_Private_Functions FLASHEx Private Functions\r\n * @{\r\n */\r\n/* Erase operations */\r\nstatic void FLASH_MassErase(uint32_t Banks);\r\nvoid        FLASH_PageErase(uint32_t PageAddress);\r\n\r\n/* Option bytes control */\r\nstatic HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WriteProtectPage);\r\nstatic HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WriteProtectPage);\r\nstatic HAL_StatusTypeDef FLASH_OB_RDP_LevelConfig(uint8_t ReadProtectLevel);\r\nstatic HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t UserConfig);\r\nstatic HAL_StatusTypeDef FLASH_OB_ProgramData(uint32_t Address, uint8_t Data);\r\nstatic uint32_t          FLASH_OB_GetWRP(void);\r\nstatic uint32_t          FLASH_OB_GetRDP(void);\r\nstatic uint8_t           FLASH_OB_GetUser(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions ---------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Exported_Functions FLASHEx Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASHEx_Exported_Functions_Group1 FLASHEx Memory Erasing functions\r\n *  @brief   FLASH Memory Erasing functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                ##### FLASH Erasing Programming functions #####\r\n  ==============================================================================\r\n\r\n    [..] The FLASH Memory Erasing functions, includes the following functions:\r\n    (+) @ref HAL_FLASHEx_Erase: return only when erase has been done\r\n    (+) @ref HAL_FLASHEx_Erase_IT: end of erase is done when @ref HAL_FLASH_EndOfOperationCallback\r\n        is called with parameter 0xFFFFFFFF\r\n\r\n    [..] Any operation of erase should follow these steps:\r\n    (#) Call the @ref HAL_FLASH_Unlock() function to enable the flash control register and\r\n        program memory access.\r\n    (#) Call the desired function to erase page.\r\n    (#) Call the @ref HAL_FLASH_Lock() to disable the flash program memory access\r\n       (recommended to protect the FLASH memory against possible unwanted operation).\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Perform a mass erase or erase the specified FLASH memory pages\r\n * @note   To correctly run this function, the @ref HAL_FLASH_Unlock() function\r\n *         must be called before.\r\n *         Call the @ref HAL_FLASH_Lock() to disable the flash memory access\r\n *         (recommended to protect the FLASH memory against possible unwanted operation)\r\n * @param[in]  pEraseInit pointer to an FLASH_EraseInitTypeDef structure that\r\n *         contains the configuration information for the erasing.\r\n *\r\n * @param[out]  PageError pointer to variable  that\r\n *         contains the configuration information on faulty page in case of error\r\n *         (0xFFFFFFFF means that all the pages have been correctly erased)\r\n *\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError) {\r\n  HAL_StatusTypeDef status  = HAL_ERROR;\r\n  uint32_t          address = 0U;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(&pFlash);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase));\r\n\r\n  if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) {\r\n#if defined(FLASH_BANK2_END)\r\n    if (pEraseInit->Banks == FLASH_BANK_BOTH) {\r\n      /* Mass Erase requested for Bank1 and Bank2 */\r\n      /* Wait for last operation to be completed */\r\n      if ((FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) && (FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK)) {\r\n        /*Mass erase to be done*/\r\n        FLASH_MassErase(FLASH_BANK_BOTH);\r\n\r\n        /* Wait for last operation to be completed */\r\n        if ((FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) && (FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK)) {\r\n          status = HAL_OK;\r\n        }\r\n\r\n        /* If the erase operation is completed, disable the MER Bit */\r\n        CLEAR_BIT(FLASH->CR, FLASH_CR_MER);\r\n        CLEAR_BIT(FLASH->CR2, FLASH_CR2_MER);\r\n      }\r\n    } else if (pEraseInit->Banks == FLASH_BANK_2) {\r\n      /* Mass Erase requested for Bank2 */\r\n      /* Wait for last operation to be completed */\r\n      if (FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) {\r\n        /*Mass erase to be done*/\r\n        FLASH_MassErase(FLASH_BANK_2);\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n        /* If the erase operation is completed, disable the MER Bit */\r\n        CLEAR_BIT(FLASH->CR2, FLASH_CR2_MER);\r\n      }\r\n    } else\r\n#endif /* FLASH_BANK2_END */\r\n    {\r\n      /* Mass Erase requested for Bank1 */\r\n      /* Wait for last operation to be completed */\r\n      if (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) {\r\n        /*Mass erase to be done*/\r\n        FLASH_MassErase(FLASH_BANK_1);\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n        /* If the erase operation is completed, disable the MER Bit */\r\n        CLEAR_BIT(FLASH->CR, FLASH_CR_MER);\r\n      }\r\n    }\r\n  } else {\r\n    /* Page Erase is requested */\r\n    /* Check the parameters */\r\n    assert_param(IS_FLASH_PROGRAM_ADDRESS(pEraseInit->PageAddress));\r\n    assert_param(IS_FLASH_NB_PAGES(pEraseInit->PageAddress, pEraseInit->NbPages));\r\n\r\n#if defined(FLASH_BANK2_END)\r\n    /* Page Erase requested on address located on bank2 */\r\n    if (pEraseInit->PageAddress > FLASH_BANK1_END) {\r\n      /* Wait for last operation to be completed */\r\n      if (FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) {\r\n        /*Initialization of PageError variable*/\r\n        *PageError = 0xFFFFFFFFU;\r\n\r\n        /* Erase by page by page to be done*/\r\n        for (address = pEraseInit->PageAddress; address < (pEraseInit->PageAddress + (pEraseInit->NbPages) * FLASH_PAGE_SIZE); address += FLASH_PAGE_SIZE) {\r\n          FLASH_PageErase(address);\r\n\r\n          /* Wait for last operation to be completed */\r\n          status = FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n          /* If the erase operation is completed, disable the PER Bit */\r\n          CLEAR_BIT(FLASH->CR2, FLASH_CR2_PER);\r\n\r\n          if (status != HAL_OK) {\r\n            /* In case of error, stop erase procedure and return the faulty address */\r\n            *PageError = address;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    } else\r\n#endif /* FLASH_BANK2_END */\r\n    {\r\n      /* Page Erase requested on address located on bank1 */\r\n      /* Wait for last operation to be completed */\r\n      if (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) {\r\n        /*Initialization of PageError variable*/\r\n        *PageError = 0xFFFFFFFFU;\r\n\r\n        /* Erase page by page to be done*/\r\n        for (address = pEraseInit->PageAddress; address < ((pEraseInit->NbPages * FLASH_PAGE_SIZE) + pEraseInit->PageAddress); address += FLASH_PAGE_SIZE) {\r\n          FLASH_PageErase(address);\r\n\r\n          /* Wait for last operation to be completed */\r\n          status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n          /* If the erase operation is completed, disable the PER Bit */\r\n          CLEAR_BIT(FLASH->CR, FLASH_CR_PER);\r\n\r\n          if (status != HAL_OK) {\r\n            /* In case of error, stop erase procedure and return the faulty address */\r\n            *PageError = address;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Process Unlocked */\r\n  __HAL_UNLOCK(&pFlash);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Perform a mass erase or erase the specified FLASH memory pages with interrupt enabled\r\n * @note   To correctly run this function, the @ref HAL_FLASH_Unlock() function\r\n *         must be called before.\r\n *         Call the @ref HAL_FLASH_Lock() to disable the flash memory access\r\n *         (recommended to protect the FLASH memory against possible unwanted operation)\r\n * @param  pEraseInit pointer to an FLASH_EraseInitTypeDef structure that\r\n *         contains the configuration information for the erasing.\r\n *\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(&pFlash);\r\n\r\n  /* If procedure already ongoing, reject the next one */\r\n  if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase));\r\n\r\n  /* Enable End of FLASH Operation and Error source interrupts */\r\n  __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR);\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  /* Enable End of FLASH Operation and Error source interrupts */\r\n  __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP_BANK2 | FLASH_IT_ERR_BANK2);\r\n\r\n#endif\r\n  if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) {\r\n    /*Mass erase to be done*/\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_MASSERASE;\r\n    FLASH_MassErase(pEraseInit->Banks);\r\n  } else {\r\n    /* Erase by page to be done*/\r\n\r\n    /* Check the parameters */\r\n    assert_param(IS_FLASH_PROGRAM_ADDRESS(pEraseInit->PageAddress));\r\n    assert_param(IS_FLASH_NB_PAGES(pEraseInit->PageAddress, pEraseInit->NbPages));\r\n\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_PAGEERASE;\r\n    pFlash.DataRemaining    = pEraseInit->NbPages;\r\n    pFlash.Address          = pEraseInit->PageAddress;\r\n\r\n    /*Erase 1st page and wait for IT*/\r\n    FLASH_PageErase(pEraseInit->PageAddress);\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_Exported_Functions_Group2 Option Bytes Programming functions\r\n *  @brief   Option Bytes Programming functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                ##### Option Bytes Programming functions #####\r\n  ==============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the FLASH\r\n    option bytes operations.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Erases the FLASH option bytes.\r\n * @note   This functions erases all option bytes except the Read protection (RDP).\r\n *         The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface\r\n *         The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes\r\n *         The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes\r\n *         (system reset will occur)\r\n * @retval HAL status\r\n */\r\n\r\nHAL_StatusTypeDef HAL_FLASHEx_OBErase(void) {\r\n  uint8_t           rdptmp = OB_RDP_LEVEL_0;\r\n  HAL_StatusTypeDef status = HAL_ERROR;\r\n\r\n  /* Get the actual read protection Option Byte value */\r\n  rdptmp = FLASH_OB_GetRDP();\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* If the previous operation is completed, proceed to erase the option bytes */\r\n    SET_BIT(FLASH->CR, FLASH_CR_OPTER);\r\n    SET_BIT(FLASH->CR, FLASH_CR_STRT);\r\n\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n    /* If the erase operation is completed, disable the OPTER Bit */\r\n    CLEAR_BIT(FLASH->CR, FLASH_CR_OPTER);\r\n\r\n    if (status == HAL_OK) {\r\n      /* Restore the last read protection Option Byte value */\r\n      status = FLASH_OB_RDP_LevelConfig(rdptmp);\r\n    }\r\n  }\r\n\r\n  /* Return the erase status */\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Program option bytes\r\n * @note   The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface\r\n *         The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes\r\n *         The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes\r\n *         (system reset will occur)\r\n *\r\n * @param  pOBInit pointer to an FLASH_OBInitStruct structure that\r\n *         contains the configuration information for the programming.\r\n *\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit) {\r\n  HAL_StatusTypeDef status = HAL_ERROR;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(&pFlash);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OPTIONBYTE(pOBInit->OptionType));\r\n\r\n  /* Write protection configuration */\r\n  if ((pOBInit->OptionType & OPTIONBYTE_WRP) == OPTIONBYTE_WRP) {\r\n    assert_param(IS_WRPSTATE(pOBInit->WRPState));\r\n    if (pOBInit->WRPState == OB_WRPSTATE_ENABLE) {\r\n      /* Enable of Write protection on the selected page */\r\n      status = FLASH_OB_EnableWRP(pOBInit->WRPPage);\r\n    } else {\r\n      /* Disable of Write protection on the selected page */\r\n      status = FLASH_OB_DisableWRP(pOBInit->WRPPage);\r\n    }\r\n    if (status != HAL_OK) {\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(&pFlash);\r\n      return status;\r\n    }\r\n  }\r\n\r\n  /* Read protection configuration */\r\n  if ((pOBInit->OptionType & OPTIONBYTE_RDP) == OPTIONBYTE_RDP) {\r\n    status = FLASH_OB_RDP_LevelConfig(pOBInit->RDPLevel);\r\n    if (status != HAL_OK) {\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(&pFlash);\r\n      return status;\r\n    }\r\n  }\r\n\r\n  /* USER configuration */\r\n  if ((pOBInit->OptionType & OPTIONBYTE_USER) == OPTIONBYTE_USER) {\r\n    status = FLASH_OB_UserConfig(pOBInit->USERConfig);\r\n    if (status != HAL_OK) {\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(&pFlash);\r\n      return status;\r\n    }\r\n  }\r\n\r\n  /* DATA configuration*/\r\n  if ((pOBInit->OptionType & OPTIONBYTE_DATA) == OPTIONBYTE_DATA) {\r\n    status = FLASH_OB_ProgramData(pOBInit->DATAAddress, pOBInit->DATAData);\r\n    if (status != HAL_OK) {\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(&pFlash);\r\n      return status;\r\n    }\r\n  }\r\n\r\n  /* Process Unlocked */\r\n  __HAL_UNLOCK(&pFlash);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Get the Option byte configuration\r\n * @param  pOBInit pointer to an FLASH_OBInitStruct structure that\r\n *         contains the configuration information for the programming.\r\n *\r\n * @retval None\r\n */\r\nvoid HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit) {\r\n  pOBInit->OptionType = OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER;\r\n\r\n  /*Get WRP*/\r\n  pOBInit->WRPPage = FLASH_OB_GetWRP();\r\n\r\n  /*Get RDP Level*/\r\n  pOBInit->RDPLevel = FLASH_OB_GetRDP();\r\n\r\n  /*Get USER*/\r\n  pOBInit->USERConfig = FLASH_OB_GetUser();\r\n}\r\n\r\n/**\r\n * @brief  Get the Option byte user data\r\n * @param  DATAAdress Address of the option byte DATA\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref OB_DATA_ADDRESS_DATA0\r\n *            @arg @ref OB_DATA_ADDRESS_DATA1\r\n * @retval Value programmed in USER data\r\n */\r\nuint32_t HAL_FLASHEx_OBGetUserData(uint32_t DATAAdress) {\r\n  uint32_t value = 0;\r\n\r\n  if (DATAAdress == OB_DATA_ADDRESS_DATA0) {\r\n    /* Get value programmed in OB USER Data0 */\r\n    value = READ_BIT(FLASH->OBR, FLASH_OBR_DATA0) >> FLASH_POSITION_OB_USERDATA0_BIT;\r\n  } else {\r\n    /* Get value programmed in OB USER Data1 */\r\n    value = READ_BIT(FLASH->OBR, FLASH_OBR_DATA1) >> FLASH_POSITION_OB_USERDATA1_BIT;\r\n  }\r\n\r\n  return value;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASHEx_Private_Functions\r\n * @{\r\n */\r\n\r\n/**\r\n  * @brief  Full erase of FLASH memory Bank\r\n  * @param  Banks Banks to be erased\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref FLASH_BANK_1 Bank1 to be erased\r\n  @if STM32F101xG\r\n  *            @arg @ref FLASH_BANK_2 Bank2 to be erased\r\n  *            @arg @ref FLASH_BANK_BOTH Bank1 and Bank2 to be erased\r\n  @endif\r\n  @if STM32F103xG\r\n  *            @arg @ref FLASH_BANK_2 Bank2 to be erased\r\n  *            @arg @ref FLASH_BANK_BOTH Bank1 and Bank2 to be erased\r\n  @endif\r\n  *\r\n  * @retval None\r\n  */\r\nstatic void FLASH_MassErase(uint32_t Banks) {\r\n  /* Check the parameters */\r\n  assert_param(IS_FLASH_BANK(Banks));\r\n\r\n  /* Clean the error context */\r\n  pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  if (Banks == FLASH_BANK_BOTH) {\r\n    /* bank1 & bank2 will be erased*/\r\n    SET_BIT(FLASH->CR, FLASH_CR_MER);\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_MER);\r\n    SET_BIT(FLASH->CR, FLASH_CR_STRT);\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_STRT);\r\n  } else if (Banks == FLASH_BANK_2) {\r\n    /*Only bank2 will be erased*/\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_MER);\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_STRT);\r\n  } else {\r\n#endif /* FLASH_BANK2_END */\r\n#if !defined(FLASH_BANK2_END)\r\n    /* Prevent unused argument(s) compilation warning */\r\n    UNUSED(Banks);\r\n#endif /* FLASH_BANK2_END */\r\n    /* Only bank1 will be erased*/\r\n    SET_BIT(FLASH->CR, FLASH_CR_MER);\r\n    SET_BIT(FLASH->CR, FLASH_CR_STRT);\r\n#if defined(FLASH_BANK2_END)\r\n  }\r\n#endif /* FLASH_BANK2_END */\r\n}\r\n\r\n/**\r\n * @brief  Enable the write protection of the desired pages\r\n * @note   An option byte erase is done automatically in this function.\r\n * @note   When the memory read protection level is selected (RDP level = 1),\r\n *         it is not possible to program or erase the flash page i if\r\n *         debug features are connected or boot code is executed in RAM, even if nWRPi = 1\r\n *\r\n * @param  WriteProtectPage specifies the page(s) to be write protected.\r\n *         The value of this parameter depend on device used within the same series\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WriteProtectPage) {\r\n  HAL_StatusTypeDef status    = HAL_OK;\r\n  uint16_t          WRP0_Data = 0xFFFF;\r\n#if defined(FLASH_WRP1_WRP1)\r\n  uint16_t WRP1_Data = 0xFFFF;\r\n#endif /* FLASH_WRP1_WRP1 */\r\n#if defined(FLASH_WRP2_WRP2)\r\n  uint16_t WRP2_Data = 0xFFFF;\r\n#endif /* FLASH_WRP2_WRP2 */\r\n#if defined(FLASH_WRP3_WRP3)\r\n  uint16_t WRP3_Data = 0xFFFF;\r\n#endif /* FLASH_WRP3_WRP3 */\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OB_WRP(WriteProtectPage));\r\n\r\n  /* Get current write protected pages and the new pages to be protected ******/\r\n  WriteProtectPage = (uint32_t)(~((~FLASH_OB_GetWRP()) | WriteProtectPage));\r\n\r\n#if defined(OB_WRP_PAGES0TO15MASK)\r\n  WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO15MASK);\r\n#elif defined(OB_WRP_PAGES0TO31MASK)\r\n  WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO31MASK);\r\n#endif /* OB_WRP_PAGES0TO31MASK */\r\n\r\n#if defined(OB_WRP_PAGES16TO31MASK)\r\n  WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES16TO31MASK) >> 8U);\r\n#elif defined(OB_WRP_PAGES32TO63MASK)\r\n  WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO63MASK) >> 8U);\r\n#endif /* OB_WRP_PAGES32TO63MASK */\r\n\r\n#if defined(OB_WRP_PAGES64TO95MASK)\r\n  WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES64TO95MASK) >> 16U);\r\n#endif /* OB_WRP_PAGES64TO95MASK */\r\n#if defined(OB_WRP_PAGES32TO47MASK)\r\n  WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO47MASK) >> 16U);\r\n#endif /* OB_WRP_PAGES32TO47MASK */\r\n\r\n#if defined(OB_WRP_PAGES96TO127MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES96TO127MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO255MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO255MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO511MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO511MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO127MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO127MASK) >> 24U);\r\n#endif /* OB_WRP_PAGES96TO127MASK */\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* To be able to write again option byte, need to perform a option byte erase */\r\n    status = HAL_FLASHEx_OBErase();\r\n    if (status == HAL_OK) {\r\n      /* Enable write protection */\r\n      SET_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n\r\n#if defined(FLASH_WRP0_WRP0)\r\n      if (WRP0_Data != 0xFFU) {\r\n        OB->WRP0 &= WRP0_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP0_WRP0 */\r\n\r\n#if defined(FLASH_WRP1_WRP1)\r\n      if ((status == HAL_OK) && (WRP1_Data != 0xFFU)) {\r\n        OB->WRP1 &= WRP1_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP1_WRP1 */\r\n\r\n#if defined(FLASH_WRP2_WRP2)\r\n      if ((status == HAL_OK) && (WRP2_Data != 0xFFU)) {\r\n        OB->WRP2 &= WRP2_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP2_WRP2 */\r\n\r\n#if defined(FLASH_WRP3_WRP3)\r\n      if ((status == HAL_OK) && (WRP3_Data != 0xFFU)) {\r\n        OB->WRP3 &= WRP3_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP3_WRP3 */\r\n\r\n      /* if the program operation is completed, disable the OPTPG Bit */\r\n      CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n    }\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Disable the write protection of the desired pages\r\n * @note   An option byte erase is done automatically in this function.\r\n * @note   When the memory read protection level is selected (RDP level = 1),\r\n *         it is not possible to program or erase the flash page i if\r\n *         debug features are connected or boot code is executed in RAM, even if nWRPi = 1\r\n *\r\n * @param  WriteProtectPage specifies the page(s) to be write unprotected.\r\n *         The value of this parameter depend on device used within the same series\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WriteProtectPage) {\r\n  HAL_StatusTypeDef status    = HAL_OK;\r\n  uint16_t          WRP0_Data = 0xFFFF;\r\n#if defined(FLASH_WRP1_WRP1)\r\n  uint16_t WRP1_Data = 0xFFFF;\r\n#endif /* FLASH_WRP1_WRP1 */\r\n#if defined(FLASH_WRP2_WRP2)\r\n  uint16_t WRP2_Data = 0xFFFF;\r\n#endif /* FLASH_WRP2_WRP2 */\r\n#if defined(FLASH_WRP3_WRP3)\r\n  uint16_t WRP3_Data = 0xFFFF;\r\n#endif /* FLASH_WRP3_WRP3 */\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OB_WRP(WriteProtectPage));\r\n\r\n  /* Get current write protected pages and the new pages to be unprotected ******/\r\n  WriteProtectPage = (FLASH_OB_GetWRP() | WriteProtectPage);\r\n\r\n#if defined(OB_WRP_PAGES0TO15MASK)\r\n  WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO15MASK);\r\n#elif defined(OB_WRP_PAGES0TO31MASK)\r\n  WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO31MASK);\r\n#endif /* OB_WRP_PAGES0TO31MASK */\r\n\r\n#if defined(OB_WRP_PAGES16TO31MASK)\r\n  WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES16TO31MASK) >> 8U);\r\n#elif defined(OB_WRP_PAGES32TO63MASK)\r\n  WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO63MASK) >> 8U);\r\n#endif /* OB_WRP_PAGES32TO63MASK */\r\n\r\n#if defined(OB_WRP_PAGES64TO95MASK)\r\n  WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES64TO95MASK) >> 16U);\r\n#endif /* OB_WRP_PAGES64TO95MASK */\r\n#if defined(OB_WRP_PAGES32TO47MASK)\r\n  WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO47MASK) >> 16U);\r\n#endif /* OB_WRP_PAGES32TO47MASK */\r\n\r\n#if defined(OB_WRP_PAGES96TO127MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES96TO127MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO255MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO255MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO511MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO511MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO127MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO127MASK) >> 24U);\r\n#endif /* OB_WRP_PAGES96TO127MASK */\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* To be able to write again option byte, need to perform a option byte erase */\r\n    status = HAL_FLASHEx_OBErase();\r\n    if (status == HAL_OK) {\r\n      SET_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n\r\n#if defined(FLASH_WRP0_WRP0)\r\n      if (WRP0_Data != 0xFFU) {\r\n        OB->WRP0 |= WRP0_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP0_WRP0 */\r\n\r\n#if defined(FLASH_WRP1_WRP1)\r\n      if ((status == HAL_OK) && (WRP1_Data != 0xFFU)) {\r\n        OB->WRP1 |= WRP1_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP1_WRP1 */\r\n\r\n#if defined(FLASH_WRP2_WRP2)\r\n      if ((status == HAL_OK) && (WRP2_Data != 0xFFU)) {\r\n        OB->WRP2 |= WRP2_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP2_WRP2 */\r\n\r\n#if defined(FLASH_WRP3_WRP3)\r\n      if ((status == HAL_OK) && (WRP3_Data != 0xFFU)) {\r\n        OB->WRP3 |= WRP3_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP3_WRP3 */\r\n\r\n      /* if the program operation is completed, disable the OPTPG Bit */\r\n      CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n    }\r\n  }\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Set the read protection level.\r\n * @param  ReadProtectLevel specifies the read protection level.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref OB_RDP_LEVEL_0 No protection\r\n *            @arg @ref OB_RDP_LEVEL_1 Read protection of the memory\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef FLASH_OB_RDP_LevelConfig(uint8_t ReadProtectLevel) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OB_RDP_LEVEL(ReadProtectLevel));\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* If the previous operation is completed, proceed to erase the option bytes */\r\n    SET_BIT(FLASH->CR, FLASH_CR_OPTER);\r\n    SET_BIT(FLASH->CR, FLASH_CR_STRT);\r\n\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n    /* If the erase operation is completed, disable the OPTER Bit */\r\n    CLEAR_BIT(FLASH->CR, FLASH_CR_OPTER);\r\n\r\n    if (status == HAL_OK) {\r\n      /* Enable the Option Bytes Programming operation */\r\n      SET_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n\r\n      WRITE_REG(OB->RDP, ReadProtectLevel);\r\n\r\n      /* Wait for last operation to be completed */\r\n      status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n      /* if the program operation is completed, disable the OPTPG Bit */\r\n      CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n    }\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Program the FLASH User Option Byte.\r\n * @note   Programming of the OB should be performed only after an erase (otherwise PGERR occurs)\r\n * @param  UserConfig The FLASH User Option Bytes values FLASH_OBR_IWDG_SW(Bit2),\r\n *         FLASH_OBR_nRST_STOP(Bit3),FLASH_OBR_nRST_STDBY(Bit4).\r\n *         And BFBF2(Bit5) for STM32F101xG and STM32F103xG .\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t UserConfig) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OB_IWDG_SOURCE((UserConfig & OB_IWDG_SW)));\r\n  assert_param(IS_OB_STOP_SOURCE((UserConfig & OB_STOP_NO_RST)));\r\n  assert_param(IS_OB_STDBY_SOURCE((UserConfig & OB_STDBY_NO_RST)));\r\n#if defined(FLASH_BANK2_END)\r\n  assert_param(IS_OB_BOOT1((UserConfig & OB_BOOT1_SET)));\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* Enable the Option Bytes Programming operation */\r\n    SET_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n\r\n#if defined(FLASH_BANK2_END)\r\n    OB->USER = (UserConfig | 0xF0U);\r\n#else\r\n    OB->USER = (UserConfig | 0x88U);\r\n#endif /* FLASH_BANK2_END */\r\n\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n    /* if the program operation is completed, disable the OPTPG Bit */\r\n    CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Programs a half word at a specified Option Byte Data address.\r\n * @note   The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface\r\n *         The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes\r\n *         The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes\r\n *         (system reset will occur)\r\n *         Programming of the OB should be performed only after an erase (otherwise PGERR occurs)\r\n * @param  Address specifies the address to be programmed.\r\n *         This parameter can be 0x1FFFF804 or 0x1FFFF806.\r\n * @param  Data specifies the data to be programmed.\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef FLASH_OB_ProgramData(uint32_t Address, uint8_t Data) {\r\n  HAL_StatusTypeDef status = HAL_ERROR;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OB_DATA_ADDRESS(Address));\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* Enables the Option Bytes Programming operation */\r\n    SET_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n    *(__IO uint16_t *)Address = Data;\r\n\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n    /* If the program operation is completed, disable the OPTPG Bit */\r\n    CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n  }\r\n  /* Return the Option Byte Data Program Status */\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Return the FLASH Write Protection Option Bytes value.\r\n * @retval The FLASH Write Protection Option Bytes value\r\n */\r\nstatic uint32_t FLASH_OB_GetWRP(void) {\r\n  /* Return the FLASH write protection Register value */\r\n  return (uint32_t)(READ_REG(FLASH->WRPR));\r\n}\r\n\r\n/**\r\n * @brief  Returns the FLASH Read Protection level.\r\n * @retval FLASH RDP level\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref OB_RDP_LEVEL_0 No protection\r\n *            @arg @ref OB_RDP_LEVEL_1 Read protection of the memory\r\n */\r\nstatic uint32_t FLASH_OB_GetRDP(void) {\r\n  uint32_t readstatus = OB_RDP_LEVEL_0;\r\n  uint32_t tmp_reg    = 0U;\r\n\r\n  /* Read RDP level bits */\r\n  tmp_reg = READ_BIT(FLASH->OBR, FLASH_OBR_RDPRT);\r\n\r\n  if (tmp_reg == FLASH_OBR_RDPRT) {\r\n    readstatus = OB_RDP_LEVEL_1;\r\n  } else {\r\n    readstatus = OB_RDP_LEVEL_0;\r\n  }\r\n\r\n  return readstatus;\r\n}\r\n\r\n/**\r\n * @brief  Return the FLASH User Option Byte value.\r\n * @retval The FLASH User Option Bytes values: FLASH_OBR_IWDG_SW(Bit2),\r\n *         FLASH_OBR_nRST_STOP(Bit3),FLASH_OBR_nRST_STDBY(Bit4).\r\n *         And FLASH_OBR_BFB2(Bit5) for STM32F101xG and STM32F103xG .\r\n */\r\nstatic uint8_t FLASH_OB_GetUser(void) {\r\n  /* Return the User Option Byte */\r\n  return (uint8_t)((READ_REG(FLASH->OBR) & FLASH_OBR_USER) >> FLASH_POSITION_IWDGSW_BIT);\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASH\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASH_Private_Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Erase the specified FLASH memory page\r\n * @param  PageAddress FLASH page to erase\r\n *         The value of this parameter depend on device used within the same series\r\n *\r\n * @retval None\r\n */\r\nvoid FLASH_PageErase(uint32_t PageAddress) {\r\n  /* Clean the error context */\r\n  pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  if (PageAddress > FLASH_BANK1_END) {\r\n    /* Proceed to erase the page */\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_PER);\r\n    WRITE_REG(FLASH->AR2, PageAddress);\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_STRT);\r\n  } else {\r\n#endif /* FLASH_BANK2_END */\r\n    /* Proceed to erase the page */\r\n    SET_BIT(FLASH->CR, FLASH_CR_PER);\r\n    WRITE_REG(FLASH->AR, PageAddress);\r\n    SET_BIT(FLASH->CR, FLASH_CR_STRT);\r\n#if defined(FLASH_BANK2_END)\r\n  }\r\n#endif /* FLASH_BANK2_END */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_FLASH_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_gpio.c\r\n  * @author  MCD Application Team\r\n  * @brief   GPIO HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the General Purpose Input/Output (GPIO) peripheral:\r\n  *           + Initialization and de-initialization functions\r\n  *           + IO operation functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                    ##### GPIO Peripheral features #####\r\n  ==============================================================================\r\n  [..]\r\n  Subject to the specific hardware characteristics of each I/O port listed in the datasheet, each\r\n  port bit of the General Purpose IO (GPIO) Ports, can be individually configured by software\r\n  in several modes:\r\n  (+) Input mode\r\n  (+) Analog mode\r\n  (+) Output mode\r\n  (+) Alternate function mode\r\n  (+) External interrupt/event lines\r\n\r\n  [..]\r\n  During and just after reset, the alternate functions and external interrupt\r\n  lines are not active and the I/O ports are configured in input floating mode.\r\n\r\n  [..]\r\n  All GPIO pins have weak internal pull-up and pull-down resistors, which can be\r\n  activated or not.\r\n\r\n  [..]\r\n  In Output or Alternate mode, each IO can be configured on open-drain or push-pull\r\n  type and the IO speed can be selected depending on the VDD value.\r\n\r\n  [..]\r\n  All ports have external interrupt/event capability. To use external interrupt\r\n  lines, the port must be configured in input mode. All available GPIO pins are\r\n  connected to the 16 external interrupt/event lines from EXTI0 to EXTI15.\r\n\r\n  [..]\r\n  The external interrupt/event controller consists of up to 20 edge detectors in connectivity\r\n  line devices, or 19 edge detectors in other devices for generating event/interrupt requests.\r\n  Each input line can be independently configured to select the type (event or interrupt) and\r\n  the corresponding trigger event (rising or falling or both). Each line can also masked\r\n  independently. A pending register maintains the status line of the interrupt requests\r\n\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n [..]\r\n   (#) Enable the GPIO APB2 clock using the following function : __HAL_RCC_GPIOx_CLK_ENABLE().\r\n\r\n   (#) Configure the GPIO pin(s) using HAL_GPIO_Init().\r\n       (++) Configure the IO mode using \"Mode\" member from GPIO_InitTypeDef structure\r\n       (++) Activate Pull-up, Pull-down resistor using \"Pull\" member from GPIO_InitTypeDef\r\n            structure.\r\n       (++) In case of Output or alternate function mode selection: the speed is\r\n            configured through \"Speed\" member from GPIO_InitTypeDef structure\r\n       (++) Analog mode is required when a pin is to be used as ADC channel\r\n            or DAC output.\r\n       (++) In case of external interrupt/event selection the \"Mode\" member from\r\n            GPIO_InitTypeDef structure select the type (interrupt or event) and\r\n            the corresponding trigger event (rising or falling or both).\r\n\r\n   (#) In case of external interrupt/event mode selection, configure NVIC IRQ priority\r\n       mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using\r\n       HAL_NVIC_EnableIRQ().\r\n\r\n   (#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin().\r\n\r\n   (#) To set/reset the level of a pin configured in output mode use\r\n       HAL_GPIO_WritePin()/HAL_GPIO_TogglePin().\r\n\r\n   (#) To lock pin configuration until next reset use HAL_GPIO_LockPin().\r\n\r\n   (#) During and just after reset, the alternate functions are not\r\n       active and the GPIO pins are configured in input floating mode (except JTAG\r\n       pins).\r\n\r\n   (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose\r\n       (PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has\r\n       priority over the GPIO function.\r\n\r\n   (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as\r\n       general purpose PD0 and PD1, respectively, when the HSE oscillator is off.\r\n       The HSE has priority over the GPIO function.\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIO GPIO\r\n * @brief GPIO HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_GPIO_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @addtogroup GPIO_Private_Constants GPIO Private Constants\r\n * @{\r\n */\r\n#define GPIO_MODE        0x00000003U\r\n#define EXTI_MODE        0x10000000U\r\n#define GPIO_MODE_IT     0x00010000U\r\n#define GPIO_MODE_EVT    0x00020000U\r\n#define RISING_EDGE      0x00100000U\r\n#define FALLING_EDGE     0x00200000U\r\n#define GPIO_OUTPUT_TYPE 0x00000010U\r\n\r\n#define GPIO_NUMBER 16U\r\n\r\n/* Definitions for bit manipulation of CRL and CRH register */\r\n#define GPIO_CR_MODE_INPUT         0x00000000U /*!< 00: Input mode (reset state)  */\r\n#define GPIO_CR_CNF_ANALOG         0x00000000U /*!< 00: Analog mode  */\r\n#define GPIO_CR_CNF_INPUT_FLOATING 0x00000004U /*!< 01: Floating input (reset state)  */\r\n#define GPIO_CR_CNF_INPUT_PU_PD    0x00000008U /*!< 10: Input with pull-up / pull-down  */\r\n#define GPIO_CR_CNF_GP_OUTPUT_PP   0x00000000U /*!< 00: General purpose output push-pull  */\r\n#define GPIO_CR_CNF_GP_OUTPUT_OD   0x00000004U /*!< 01: General purpose output Open-drain  */\r\n#define GPIO_CR_CNF_AF_OUTPUT_PP   0x00000008U /*!< 10: Alternate function output Push-pull  */\r\n#define GPIO_CR_CNF_AF_OUTPUT_OD   0x0000000CU /*!< 11: Alternate function output Open-drain  */\r\n\r\n/**\r\n * @}\r\n */\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @defgroup GPIO_Exported_Functions GPIO Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIO_Exported_Functions_Group1 Initialization and de-initialization functions\r\n *  @brief    Initialization and Configuration functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n              ##### Initialization and de-initialization functions #####\r\n ===============================================================================\r\n  [..]\r\n    This section provides functions allowing to initialize and de-initialize the GPIOs\r\n    to be ready for use.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initializes the GPIOx peripheral according to the specified parameters in the GPIO_Init.\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Init: pointer to a GPIO_InitTypeDef structure that contains\r\n *         the configuration information for the specified GPIO peripheral.\r\n * @retval None\r\n */\r\nvoid HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) {\r\n  uint32_t       position;\r\n  uint32_t       ioposition = 0x00U;\r\n  uint32_t       iocurrent  = 0x00U;\r\n  uint32_t       temp       = 0x00U;\r\n  uint32_t       config     = 0x00U;\r\n  __IO uint32_t *configregister;      /* Store the address of CRL or CRH register based on pin number */\r\n  uint32_t       registeroffset = 0U; /* offset used during computation of CNF and MODE bits placement inside CRL or CRH register */\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));\r\n  assert_param(IS_GPIO_PIN(GPIO_Init->Pin));\r\n  assert_param(IS_GPIO_MODE(GPIO_Init->Mode));\r\n\r\n  /* Configure the port pins */\r\n  for (position = 0U; position < GPIO_NUMBER; position++) {\r\n    /* Get the IO position */\r\n    ioposition = (0x01U << position);\r\n\r\n    /* Get the current IO position */\r\n    iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition;\r\n\r\n    if (iocurrent == ioposition) {\r\n      /* Check the Alternate function parameters */\r\n      assert_param(IS_GPIO_AF_INSTANCE(GPIOx));\r\n\r\n      /* Based on the required mode, filling config variable with MODEy[1:0] and CNFy[3:2] corresponding bits */\r\n      switch (GPIO_Init->Mode) {\r\n      /* If we are configuring the pin in OUTPUT push-pull mode */\r\n      case GPIO_MODE_OUTPUT_PP:\r\n        /* Check the GPIO speed parameter */\r\n        assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));\r\n        config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_PP;\r\n        break;\r\n\r\n      /* If we are configuring the pin in OUTPUT open-drain mode */\r\n      case GPIO_MODE_OUTPUT_OD:\r\n        /* Check the GPIO speed parameter */\r\n        assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));\r\n        config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_OD;\r\n        break;\r\n\r\n      /* If we are configuring the pin in ALTERNATE FUNCTION push-pull mode */\r\n      case GPIO_MODE_AF_PP:\r\n        /* Check the GPIO speed parameter */\r\n        assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));\r\n        config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_PP;\r\n        break;\r\n\r\n      /* If we are configuring the pin in ALTERNATE FUNCTION open-drain mode */\r\n      case GPIO_MODE_AF_OD:\r\n        /* Check the GPIO speed parameter */\r\n        assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));\r\n        config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_OD;\r\n        break;\r\n\r\n      /* If we are configuring the pin in INPUT (also applicable to EVENT and IT mode) */\r\n      case GPIO_MODE_INPUT:\r\n      case GPIO_MODE_IT_RISING:\r\n      case GPIO_MODE_IT_FALLING:\r\n      case GPIO_MODE_IT_RISING_FALLING:\r\n      case GPIO_MODE_EVT_RISING:\r\n      case GPIO_MODE_EVT_FALLING:\r\n      case GPIO_MODE_EVT_RISING_FALLING:\r\n        /* Check the GPIO pull parameter */\r\n        assert_param(IS_GPIO_PULL(GPIO_Init->Pull));\r\n        if (GPIO_Init->Pull == GPIO_NOPULL) {\r\n          config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_FLOATING;\r\n        } else if (GPIO_Init->Pull == GPIO_PULLUP) {\r\n          config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD;\r\n\r\n          /* Set the corresponding ODR bit */\r\n          GPIOx->BSRR = ioposition;\r\n        } else /* GPIO_PULLDOWN */\r\n        {\r\n          config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD;\r\n\r\n          /* Reset the corresponding ODR bit */\r\n          GPIOx->BRR = ioposition;\r\n        }\r\n        break;\r\n\r\n      /* If we are configuring the pin in INPUT analog mode */\r\n      case GPIO_MODE_ANALOG:\r\n        config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_ANALOG;\r\n        break;\r\n\r\n      /* Parameters are checked with assert_param */\r\n      default:\r\n        break;\r\n      }\r\n\r\n      /* Check if the current bit belongs to first half or last half of the pin count number\r\n       in order to address CRH or CRL register*/\r\n      configregister = (iocurrent < GPIO_PIN_8) ? &GPIOx->CRL : &GPIOx->CRH;\r\n      registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2U) : ((position - 8U) << 2U);\r\n\r\n      /* Apply the new configuration of the pin to the register */\r\n      MODIFY_REG((*configregister), ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset), (config << registeroffset));\r\n\r\n      /*--------------------- EXTI Mode Configuration ------------------------*/\r\n      /* Configure the External Interrupt or event for the current IO */\r\n      if ((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE) {\r\n        /* Enable AFIO Clock */\r\n        __HAL_RCC_AFIO_CLK_ENABLE();\r\n        temp = AFIO->EXTICR[position >> 2U];\r\n        CLEAR_BIT(temp, (0x0FU) << (4U * (position & 0x03U)));\r\n        SET_BIT(temp, (GPIO_GET_INDEX(GPIOx)) << (4U * (position & 0x03U)));\r\n        AFIO->EXTICR[position >> 2U] = temp;\r\n\r\n        /* Configure the interrupt mask */\r\n        if ((GPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT) {\r\n          SET_BIT(EXTI->IMR, iocurrent);\r\n        } else {\r\n          CLEAR_BIT(EXTI->IMR, iocurrent);\r\n        }\r\n\r\n        /* Configure the event mask */\r\n        if ((GPIO_Init->Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT) {\r\n          SET_BIT(EXTI->EMR, iocurrent);\r\n        } else {\r\n          CLEAR_BIT(EXTI->EMR, iocurrent);\r\n        }\r\n\r\n        /* Enable or disable the rising trigger */\r\n        if ((GPIO_Init->Mode & RISING_EDGE) == RISING_EDGE) {\r\n          SET_BIT(EXTI->RTSR, iocurrent);\r\n        } else {\r\n          CLEAR_BIT(EXTI->RTSR, iocurrent);\r\n        }\r\n\r\n        /* Enable or disable the falling trigger */\r\n        if ((GPIO_Init->Mode & FALLING_EDGE) == FALLING_EDGE) {\r\n          SET_BIT(EXTI->FTSR, iocurrent);\r\n        } else {\r\n          CLEAR_BIT(EXTI->FTSR, iocurrent);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  De-initializes the GPIOx peripheral registers to their default reset values.\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Pin: specifies the port bit to be written.\r\n *         This parameter can be one of GPIO_PIN_x where x can be (0..15).\r\n * @retval None\r\n */\r\nvoid HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin) {\r\n  uint32_t       position  = 0x00U;\r\n  uint32_t       iocurrent = 0x00U;\r\n  uint32_t       tmp       = 0x00U;\r\n  __IO uint32_t *configregister; /* Store the address of CRL or CRH register based on pin number */\r\n  uint32_t       registeroffset = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));\r\n  assert_param(IS_GPIO_PIN(GPIO_Pin));\r\n\r\n  /* Configure the port pins */\r\n  while ((GPIO_Pin >> position) != 0U) {\r\n    /* Get current io position */\r\n    iocurrent = (GPIO_Pin) & (1U << position);\r\n\r\n    if (iocurrent) {\r\n      /*------------------------- GPIO Mode Configuration --------------------*/\r\n      /* Check if the current bit belongs to first half or last half of the pin count number\r\n       in order to address CRH or CRL register */\r\n      configregister = (iocurrent < GPIO_PIN_8) ? &GPIOx->CRL : &GPIOx->CRH;\r\n      registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2U) : ((position - 8U) << 2U);\r\n\r\n      /* CRL/CRH default value is floating input(0x04) shifted to correct position */\r\n      MODIFY_REG(*configregister, ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset), GPIO_CRL_CNF0_0 << registeroffset);\r\n\r\n      /* ODR default value is 0 */\r\n      CLEAR_BIT(GPIOx->ODR, iocurrent);\r\n\r\n      /*------------------------- EXTI Mode Configuration --------------------*/\r\n      /* Clear the External Interrupt or Event for the current IO */\r\n\r\n      tmp = AFIO->EXTICR[position >> 2U];\r\n      tmp &= 0x0FU << (4U * (position & 0x03U));\r\n      if (tmp == (GPIO_GET_INDEX(GPIOx) << (4U * (position & 0x03U)))) {\r\n        tmp = 0x0FU << (4U * (position & 0x03U));\r\n        CLEAR_BIT(AFIO->EXTICR[position >> 2U], tmp);\r\n\r\n        /* Clear EXTI line configuration */\r\n        CLEAR_BIT(EXTI->IMR, (uint32_t)iocurrent);\r\n        CLEAR_BIT(EXTI->EMR, (uint32_t)iocurrent);\r\n\r\n        /* Clear Rising Falling edge configuration */\r\n        CLEAR_BIT(EXTI->RTSR, (uint32_t)iocurrent);\r\n        CLEAR_BIT(EXTI->FTSR, (uint32_t)iocurrent);\r\n      }\r\n    }\r\n\r\n    position++;\r\n  }\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIO_Exported_Functions_Group2 IO operation functions\r\n *  @brief   GPIO Read and Write\r\n *\r\n@verbatim\r\n ===============================================================================\r\n                       ##### IO operation functions #####\r\n ===============================================================================\r\n  [..]\r\n    This subsection provides a set of functions allowing to manage the GPIOs.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Reads the specified input port pin.\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Pin: specifies the port bit to read.\r\n *         This parameter can be GPIO_PIN_x where x can be (0..15).\r\n * @retval The input port pin value.\r\n */\r\nGPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) {\r\n  GPIO_PinState bitstatus;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_PIN(GPIO_Pin));\r\n\r\n  if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET) {\r\n    bitstatus = GPIO_PIN_SET;\r\n  } else {\r\n    bitstatus = GPIO_PIN_RESET;\r\n  }\r\n  return bitstatus;\r\n}\r\n\r\n/**\r\n * @brief  Sets or clears the selected data port bit.\r\n *\r\n * @note   This function uses GPIOx_BSRR register to allow atomic read/modify\r\n *         accesses. In this way, there is no risk of an IRQ occurring between\r\n *         the read and the modify access.\r\n *\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Pin: specifies the port bit to be written.\r\n *          This parameter can be one of GPIO_PIN_x where x can be (0..15).\r\n * @param  PinState: specifies the value to be written to the selected bit.\r\n *          This parameter can be one of the GPIO_PinState enum values:\r\n *            @arg GPIO_PIN_RESET: to clear the port pin\r\n *            @arg GPIO_PIN_SET: to set the port pin\r\n * @retval None\r\n */\r\nvoid HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) {\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_PIN(GPIO_Pin));\r\n  assert_param(IS_GPIO_PIN_ACTION(PinState));\r\n\r\n  if (PinState != GPIO_PIN_RESET) {\r\n    GPIOx->BSRR = GPIO_Pin;\r\n  } else {\r\n    GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Toggles the specified GPIO pin\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Pin: Specifies the pins to be toggled.\r\n * @retval None\r\n */\r\nvoid HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) {\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_PIN(GPIO_Pin));\r\n\r\n  GPIOx->ODR ^= GPIO_Pin;\r\n}\r\n\r\n/**\r\n * @brief  Locks GPIO Pins configuration registers.\r\n * @note   The locking mechanism allows the IO configuration to be frozen. When the LOCK sequence\r\n *         has been applied on a port bit, it is no longer possible to modify the value of the port bit until\r\n *         the next reset.\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Pin: specifies the port bit to be locked.\r\n *         This parameter can be any combination of GPIO_Pin_x where x can be (0..15).\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) {\r\n  __IO uint32_t tmp = GPIO_LCKR_LCKK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_LOCK_INSTANCE(GPIOx));\r\n  assert_param(IS_GPIO_PIN(GPIO_Pin));\r\n\r\n  /* Apply lock key write sequence */\r\n  SET_BIT(tmp, GPIO_Pin);\r\n  /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */\r\n  GPIOx->LCKR = tmp;\r\n  /* Reset LCKx bit(s): LCKK='0' + LCK[15-0] */\r\n  GPIOx->LCKR = GPIO_Pin;\r\n  /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */\r\n  GPIOx->LCKR = tmp;\r\n  /* Read LCKK bit*/\r\n  tmp = GPIOx->LCKR;\r\n\r\n  if ((uint32_t)(GPIOx->LCKR & GPIO_LCKR_LCKK)) {\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  This function handles EXTI interrupt request.\r\n * @param  GPIO_Pin: Specifies the pins connected EXTI line\r\n * @retval None\r\n */\r\nvoid HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) {\r\n  /* EXTI line interrupt detected */\r\n  if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET) {\r\n    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);\r\n    HAL_GPIO_EXTI_Callback(GPIO_Pin);\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  EXTI line detection callbacks.\r\n * @param  GPIO_Pin: Specifies the pins connected EXTI line\r\n * @retval None\r\n */\r\n__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(GPIO_Pin);\r\n  /* NOTE: This function Should not be modified, when the callback is needed,\r\n           the HAL_GPIO_EXTI_Callback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_GPIO_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_gpio_ex.c\r\n  * @author  MCD Application Team\r\n  * @brief   GPIO Extension HAL module driver.\r\n  *         This file provides firmware functions to manage the following\r\n  *          functionalities of the General Purpose Input/Output (GPIO) extension peripheral.\r\n  *           + Extended features functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                    ##### GPIO Peripheral extension features #####\r\n  ==============================================================================\r\n  [..] GPIO module on STM32F1 family, manage also the AFIO register:\r\n       (+) Possibility to use the EVENTOUT Cortex feature\r\n\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..] This driver provides functions to use EVENTOUT Cortex feature\r\n    (#) Configure EVENTOUT Cortex feature using the function HAL_GPIOEx_ConfigEventout()\r\n    (#) Activate EVENTOUT Cortex feature using the HAL_GPIOEx_EnableEventout()\r\n    (#) Deactivate EVENTOUT Cortex feature using the HAL_GPIOEx_DisableEventout()\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIOEx GPIOEx\r\n * @brief GPIO HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_GPIO_MODULE_ENABLED\r\n\r\n/** @defgroup GPIOEx_Exported_Functions GPIOEx Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIOEx_Exported_Functions_Group1 Extended features functions\r\n *  @brief    Extended features functions\r\n *\r\n@verbatim\r\n  ==============================================================================\r\n                 ##### Extended features functions #####\r\n  ==============================================================================\r\n    [..]  This section provides functions allowing to:\r\n    (+) Configure EVENTOUT Cortex feature using the function HAL_GPIOEx_ConfigEventout()\r\n    (+) Activate EVENTOUT Cortex feature using the HAL_GPIOEx_EnableEventout()\r\n    (+) Deactivate EVENTOUT Cortex feature using the HAL_GPIOEx_DisableEventout()\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Configures the port and pin on which the EVENTOUT Cortex signal will be connected.\r\n * @param  GPIO_PortSource Select the port used to output the Cortex EVENTOUT signal.\r\n *   This parameter can be a value of @ref GPIOEx_EVENTOUT_PORT.\r\n * @param  GPIO_PinSource Select the pin used to output the Cortex EVENTOUT signal.\r\n *   This parameter can be a value of @ref GPIOEx_EVENTOUT_PIN.\r\n * @retval None\r\n */\r\nvoid HAL_GPIOEx_ConfigEventout(uint32_t GPIO_PortSource, uint32_t GPIO_PinSource) {\r\n  /* Verify the parameters */\r\n  assert_param(IS_AFIO_EVENTOUT_PORT(GPIO_PortSource));\r\n  assert_param(IS_AFIO_EVENTOUT_PIN(GPIO_PinSource));\r\n\r\n  /* Apply the new configuration */\r\n  MODIFY_REG(AFIO->EVCR, (AFIO_EVCR_PORT) | (AFIO_EVCR_PIN), (GPIO_PortSource) | (GPIO_PinSource));\r\n}\r\n\r\n/**\r\n * @brief  Enables the Event Output.\r\n * @retval None\r\n */\r\nvoid HAL_GPIOEx_EnableEventout(void) { SET_BIT(AFIO->EVCR, AFIO_EVCR_EVOE); }\r\n\r\n/**\r\n * @brief  Disables the Event Output.\r\n * @retval None\r\n */\r\nvoid HAL_GPIOEx_DisableEventout(void) { CLEAR_BIT(AFIO->EVCR, AFIO_EVCR_EVOE); }\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_GPIO_MODULE_ENABLED */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_iwdg.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_iwdg.c\r\n  * @author  MCD Application Team\r\n  * @brief   IWDG HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the Independent Watchdog (IWDG) peripheral:\r\n  *           + Initialization and Start functions\r\n  *           + IO operation functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                    ##### IWDG Generic features #####\r\n  ==============================================================================\r\n  [..]\r\n    (+) The IWDG can be started by either software or hardware (configurable\r\n        through option byte).\r\n\r\n    (+) The IWDG is clocked by Low-Speed clock (LSI) and thus stays active even\r\n        if the main clock fails.\r\n\r\n    (+) Once the IWDG is started, the LSI is forced ON and both can not be\r\n        disabled. The counter starts counting down from the reset value (0xFFF).\r\n        When it reaches the end of count value (0x000) a reset signal is\r\n        generated (IWDG reset).\r\n\r\n    (+) Whenever the key value 0x0000 AAAA is written in the IWDG_KR register,\r\n        the IWDG_RLR value is reloaded in the counter and the watchdog reset is\r\n        prevented.\r\n\r\n    (+) The IWDG is implemented in the VDD voltage domain that is still functional\r\n        in STOP and STANDBY mode (IWDG reset can wake-up from STANDBY).\r\n        IWDGRST flag in RCC_CSR register can be used to inform when an IWDG\r\n        reset occurs.\r\n\r\n    (+) Debug mode : When the microcontroller enters debug mode (core halted),\r\n        the IWDG counter either continues to work normally or stops, depending\r\n        on DBG_IWDG_STOP configuration bit in DBG module, accessible through\r\n        __HAL_DBGMCU_FREEZE_IWDG() and __HAL_DBGMCU_UNFREEZE_IWDG() macros\r\n\r\n    [..] Min-max timeout value @32KHz (LSI): ~125us / ~32.7s\r\n         The IWDG timeout may vary due to LSI frequency dispersion. STM32F1xx\r\n         devices provide the capability to measure the LSI frequency (LSI clock\r\n         connected internally to TIM5 CH4 input capture). The measured value\r\n         can be used to have an IWDG timeout with an acceptable accuracy.\r\n\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..]\r\n    (#) Use IWDG using HAL_IWDG_Init() function to :\r\n      (++) Enable instance by writing Start keyword in IWDG_KEY register. LSI\r\n           clock is forced ON and IWDG counter starts downcounting.\r\n      (++) Enable write access to configuration register: IWDG_PR & IWDG_RLR.\r\n      (++) Configure the IWDG prescaler and counter reload value. This reload\r\n           value will be loaded in the IWDG counter each time the watchdog is\r\n           reloaded, then the IWDG will start counting down from this value.\r\n      (++) wait for status flags to be reset\"\r\n\r\n    (#) Then the application program must refresh the IWDG counter at regular\r\n        intervals during normal operation to prevent an MCU reset, using\r\n        HAL_IWDG_Refresh() function.\r\n\r\n     *** IWDG HAL driver macros list ***\r\n     ====================================\r\n     [..]\r\n       Below the list of most used macros in IWDG HAL driver:\r\n      (+) __HAL_IWDG_START: Enable the IWDG peripheral\r\n      (+) __HAL_IWDG_RELOAD_COUNTER: Reloads IWDG counter with value defined in\r\n          the reload register\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_IWDG_MODULE_ENABLED\r\n/** @defgroup IWDG IWDG\r\n * @brief IWDG HAL module driver.\r\n * @{\r\n */\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup IWDG_Private_Defines IWDG Private Defines\r\n * @{\r\n */\r\n/* Status register need 5 RC LSI divided by prescaler clock to be updated. With\r\n   higher prescaler (256), and according to HSI variation, we need to wait at\r\n   least 6 cycles so 48 ms. */\r\n#define HAL_IWDG_DEFAULT_TIMEOUT 48U\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @addtogroup IWDG_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup IWDG_Exported_Functions_Group1\r\n  *  @brief    Initialization and Start functions.\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n          ##### Initialization and Start functions #####\r\n ===============================================================================\r\n [..]  This section provides functions allowing to:\r\n      (+) Initialize the IWDG according to the specified parameters in the\r\n          IWDG_InitTypeDef of associated handle.\r\n      (+) Once initialization is performed in HAL_IWDG_Init function, Watchdog\r\n          is reloaded in order to exit function with correct time base.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initialize the IWDG according to the specified parameters in the\r\n *         IWDG_InitTypeDef and start watchdog. Before exiting function,\r\n *         watchdog is refreshed in order to have correct time base.\r\n * @param  hiwdg  pointer to a IWDG_HandleTypeDef structure that contains\r\n *                the configuration information for the specified IWDG module.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg) {\r\n  uint32_t tickstart;\r\n\r\n  /* Check the IWDG handle allocation */\r\n  if (hiwdg == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_IWDG_ALL_INSTANCE(hiwdg->Instance));\r\n  assert_param(IS_IWDG_PRESCALER(hiwdg->Init.Prescaler));\r\n  assert_param(IS_IWDG_RELOAD(hiwdg->Init.Reload));\r\n\r\n  /* Enable IWDG. LSI is turned on automaticaly */\r\n  __HAL_IWDG_START(hiwdg);\r\n\r\n  /* Enable write access to IWDG_PR and IWDG_RLR registers by writing 0x5555 in KR */\r\n  IWDG_ENABLE_WRITE_ACCESS(hiwdg);\r\n\r\n  /* Write to IWDG registers the Prescaler & Reload values to work with */\r\n  hiwdg->Instance->PR  = hiwdg->Init.Prescaler;\r\n  hiwdg->Instance->RLR = hiwdg->Init.Reload;\r\n\r\n  /* Check pending flag, if previous update not done, return timeout */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Wait for register to be updated */\r\n  while (hiwdg->Instance->SR != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > HAL_IWDG_DEFAULT_TIMEOUT) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Reload IWDG counter with value defined in the reload register */\r\n  __HAL_IWDG_RELOAD_COUNTER(hiwdg);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup IWDG_Exported_Functions_Group2\r\n  *  @brief   IO operation functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### IO operation functions #####\r\n ===============================================================================\r\n [..]  This section provides functions allowing to:\r\n      (+) Refresh the IWDG.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Refresh the IWDG.\r\n * @param  hiwdg  pointer to a IWDG_HandleTypeDef structure that contains\r\n *                the configuration information for the specified IWDG module.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg) {\r\n  /* Reload IWDG counter with value defined in the reload register */\r\n  __HAL_IWDG_RELOAD_COUNTER(hiwdg);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_IWDG_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_pwr.c\r\n * @author  MCD Application Team\r\n * @brief   PWR HAL module driver.\r\n *\r\n *          This file provides firmware functions to manage the following\r\n *          functionalities of the Power Controller (PWR) peripheral:\r\n *           + Initialization/de-initialization functions\r\n *           + Peripheral Control functions\r\n *\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup PWR PWR\r\n * @brief    PWR HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_PWR_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n\r\n/** @defgroup PWR_Private_Constants PWR Private Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup PWR_PVD_Mode_Mask PWR PVD Mode Mask\r\n * @{\r\n */\r\n#define PVD_MODE_IT      0x00010000U\r\n#define PVD_MODE_EVT     0x00020000U\r\n#define PVD_RISING_EDGE  0x00000001U\r\n#define PVD_FALLING_EDGE 0x00000002U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_register_alias_address PWR Register alias address\r\n * @{\r\n */\r\n/* ------------- PWR registers bit address in the alias region ---------------*/\r\n#define PWR_OFFSET        (PWR_BASE - PERIPH_BASE)\r\n#define PWR_CR_OFFSET     0x00U\r\n#define PWR_CSR_OFFSET    0x04U\r\n#define PWR_CR_OFFSET_BB  (PWR_OFFSET + PWR_CR_OFFSET)\r\n#define PWR_CSR_OFFSET_BB (PWR_OFFSET + PWR_CSR_OFFSET)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_CR_register_alias PWR CR Register alias address\r\n * @{\r\n */\r\n/* --- CR Register ---*/\r\n/* Alias word address of LPSDSR bit */\r\n#define LPSDSR_BIT_NUMBER PWR_CR_LPDS_Pos\r\n#define CR_LPSDSR_BB      ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (LPSDSR_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of DBP bit */\r\n#define DBP_BIT_NUMBER PWR_CR_DBP_Pos\r\n#define CR_DBP_BB      ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (DBP_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of PVDE bit */\r\n#define PVDE_BIT_NUMBER PWR_CR_PVDE_Pos\r\n#define CR_PVDE_BB      ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (PVDE_BIT_NUMBER * 4U)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_CSR_register_alias PWR CSR Register alias address\r\n * @{\r\n */\r\n\r\n/* --- CSR Register ---*/\r\n/* Alias word address of EWUP1 bit */\r\n#define CSR_EWUP_BB(VAL) ((uint32_t)(PERIPH_BB_BASE + (PWR_CSR_OFFSET_BB * 32U) + (POSITION_VAL(VAL) * 4U)))\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @defgroup PWR_Private_Functions PWR Private Functions\r\n * brief   WFE cortex command overloaded for HAL_PWR_EnterSTOPMode usage only (see Workaround section)\r\n * @{\r\n */\r\nstatic void PWR_OverloadWfe(void);\r\n\r\n/* Private functions ---------------------------------------------------------*/\r\n__NOINLINE\r\nstatic void PWR_OverloadWfe(void) {\r\n  __asm volatile(\"wfe\");\r\n  __asm volatile(\"nop\");\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_Exported_Functions PWR Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions\r\n  *  @brief   Initialization and de-initialization functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n              ##### Initialization and de-initialization functions #####\r\n ===============================================================================\r\n    [..]\r\n      After reset, the backup domain (RTC registers, RTC backup data\r\n      registers) is protected against possible unwanted\r\n      write accesses.\r\n      To enable access to the RTC Domain and RTC registers, proceed as follows:\r\n        (+) Enable the Power Controller (PWR) APB1 interface clock using the\r\n            __HAL_RCC_PWR_CLK_ENABLE() macro.\r\n        (+) Enable access to RTC domain using the HAL_PWR_EnableBkUpAccess() function.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Deinitializes the PWR peripheral registers to their default reset values.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DeInit(void) {\r\n  __HAL_RCC_PWR_FORCE_RESET();\r\n  __HAL_RCC_PWR_RELEASE_RESET();\r\n}\r\n\r\n/**\r\n * @brief  Enables access to the backup domain (RTC registers, RTC\r\n *         backup data registers ).\r\n * @note   If the HSE divided by 128 is used as the RTC clock, the\r\n *         Backup Domain Access should be kept enabled.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnableBkUpAccess(void) {\r\n  /* Enable access to RTC and backup registers */\r\n  *(__IO uint32_t *)CR_DBP_BB = (uint32_t)ENABLE;\r\n}\r\n\r\n/**\r\n * @brief  Disables access to the backup domain (RTC registers, RTC\r\n *         backup data registers).\r\n * @note   If the HSE divided by 128 is used as the RTC clock, the\r\n *         Backup Domain Access should be kept enabled.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DisableBkUpAccess(void) {\r\n  /* Disable access to RTC and backup registers */\r\n  *(__IO uint32_t *)CR_DBP_BB = (uint32_t)DISABLE;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_Exported_Functions_Group2 Peripheral Control functions\r\n  * @brief    Low Power modes configuration functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                 ##### Peripheral Control functions #####\r\n ===============================================================================\r\n\r\n    *** PVD configuration ***\r\n    =========================\r\n    [..]\r\n      (+) The PVD is used to monitor the VDD power supply by comparing it to a\r\n          threshold selected by the PVD Level (PLS[2:0] bits in the PWR_CR).\r\n\r\n      (+) A PVDO flag is available to indicate if VDD/VDDA is higher or lower\r\n          than the PVD threshold. This event is internally connected to the EXTI\r\n          line16 and can generate an interrupt if enabled. This is done through\r\n          __HAL_PVD_EXTI_ENABLE_IT() macro.\r\n      (+) The PVD is stopped in Standby mode.\r\n\r\n    *** WakeUp pin configuration ***\r\n    ================================\r\n    [..]\r\n      (+) WakeUp pin is used to wake up the system from Standby mode. This pin is\r\n          forced in input pull-down configuration and is active on rising edges.\r\n      (+) There is one WakeUp pin:\r\n          WakeUp Pin 1 on PA.00.\r\n\r\n    [..]\r\n\r\n    *** Low Power modes configuration ***\r\n    =====================================\r\n     [..]\r\n      The device features 3 low-power modes:\r\n      (+) Sleep mode: CPU clock off, all peripherals including Cortex-M3 core peripherals like\r\n                      NVIC, SysTick, etc. are kept running\r\n      (+) Stop mode: All clocks are stopped\r\n      (+) Standby mode: 1.8V domain powered off\r\n\r\n\r\n   *** Sleep mode ***\r\n   ==================\r\n    [..]\r\n      (+) Entry:\r\n          The Sleep mode is entered by using the HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFx)\r\n              functions with\r\n          (++) PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction\r\n          (++) PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction\r\n\r\n      (+) Exit:\r\n        (++) WFI entry mode, Any peripheral interrupt acknowledged by the nested vectored interrupt\r\n             controller (NVIC) can wake up the device from Sleep mode.\r\n        (++) WFE entry mode, Any wakeup event can wake up the device from Sleep mode.\r\n           (+++) Any peripheral interrupt w/o NVIC configuration & SEVONPEND bit set in the Cortex (HAL_PWR_EnableSEVOnPend)\r\n           (+++) Any EXTI Line (Internal or External) configured in Event mode\r\n\r\n   *** Stop mode ***\r\n   =================\r\n    [..]\r\n      The Stop mode is based on the Cortex-M3 deepsleep mode combined with peripheral\r\n      clock gating. The voltage regulator can be configured either in normal or low-power mode.\r\n      In Stop mode, all clocks in the 1.8 V domain are stopped, the PLL, the HSI and the HSE RC\r\n      oscillators are disabled. SRAM and register contents are preserved.\r\n      In Stop mode, all I/O pins keep the same state as in Run mode.\r\n\r\n      (+) Entry:\r\n           The Stop mode is entered using the HAL_PWR_EnterSTOPMode(PWR_REGULATOR_VALUE, PWR_SLEEPENTRY_WFx )\r\n             function with:\r\n          (++) PWR_REGULATOR_VALUE= PWR_MAINREGULATOR_ON: Main regulator ON.\r\n          (++) PWR_REGULATOR_VALUE= PWR_LOWPOWERREGULATOR_ON: Low Power regulator ON.\r\n          (++) PWR_SLEEPENTRY_WFx= PWR_SLEEPENTRY_WFI: enter STOP mode with WFI instruction\r\n          (++) PWR_SLEEPENTRY_WFx= PWR_SLEEPENTRY_WFE: enter STOP mode with WFE instruction\r\n      (+) Exit:\r\n          (++) WFI entry mode, Any EXTI Line (Internal or External) configured in Interrupt mode with NVIC configured\r\n          (++) WFE entry mode, Any EXTI Line (Internal or External) configured in Event mode.\r\n\r\n   *** Standby mode ***\r\n   ====================\r\n     [..]\r\n      The Standby mode allows to achieve the lowest power consumption. It is based on the\r\n      Cortex-M3 deepsleep mode, with the voltage regulator disabled. The 1.8 V domain is\r\n      consequently powered off. The PLL, the HSI oscillator and the HSE oscillator are also\r\n      switched off. SRAM and register contents are lost except for registers in the Backup domain\r\n      and Standby circuitry\r\n\r\n      (+) Entry:\r\n        (++) The Standby mode is entered using the HAL_PWR_EnterSTANDBYMode() function.\r\n      (+) Exit:\r\n        (++) WKUP pin rising edge, RTC alarm event rising edge, external Reset in\r\n             NRSTpin, IWDG Reset\r\n\r\n   *** Auto-wakeup (AWU) from low-power mode ***\r\n       =============================================\r\n       [..]\r\n\r\n       (+) The MCU can be woken up from low-power mode by an RTC Alarm event,\r\n           without depending on an external interrupt (Auto-wakeup mode).\r\n\r\n       (+) RTC auto-wakeup (AWU) from the Stop and Standby modes\r\n\r\n           (++) To wake up from the Stop mode with an RTC alarm event, it is necessary to\r\n                configure the RTC to generate the RTC alarm using the HAL_RTC_SetAlarm_IT() function.\r\n\r\n   *** PWR Workarounds linked to Silicon Limitation ***\r\n       ====================================================\r\n       [..]\r\n       Below the list of all silicon limitations known on STM32F1xx prouct.\r\n\r\n       (#)Workarounds Implemented inside PWR HAL Driver\r\n          (##)Debugging Stop mode with WFE entry - overloaded the WFE by an internal function\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Configures the voltage threshold detected by the Power Voltage Detector(PVD).\r\n * @param  sConfigPVD: pointer to an PWR_PVDTypeDef structure that contains the configuration\r\n *         information for the PVD.\r\n * @note   Refer to the electrical characteristics of your device datasheet for\r\n *         more details about the voltage threshold corresponding to each\r\n *         detection level.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD) {\r\n  /* Check the parameters */\r\n  assert_param(IS_PWR_PVD_LEVEL(sConfigPVD->PVDLevel));\r\n  assert_param(IS_PWR_PVD_MODE(sConfigPVD->Mode));\r\n\r\n  /* Set PLS[7:5] bits according to PVDLevel value */\r\n  MODIFY_REG(PWR->CR, PWR_CR_PLS, sConfigPVD->PVDLevel);\r\n\r\n  /* Clear any previous config. Keep it clear if no event or IT mode is selected */\r\n  __HAL_PWR_PVD_EXTI_DISABLE_EVENT();\r\n  __HAL_PWR_PVD_EXTI_DISABLE_IT();\r\n  __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE();\r\n  __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();\r\n\r\n  /* Configure interrupt mode */\r\n  if ((sConfigPVD->Mode & PVD_MODE_IT) == PVD_MODE_IT) {\r\n    __HAL_PWR_PVD_EXTI_ENABLE_IT();\r\n  }\r\n\r\n  /* Configure event mode */\r\n  if ((sConfigPVD->Mode & PVD_MODE_EVT) == PVD_MODE_EVT) {\r\n    __HAL_PWR_PVD_EXTI_ENABLE_EVENT();\r\n  }\r\n\r\n  /* Configure the edge */\r\n  if ((sConfigPVD->Mode & PVD_RISING_EDGE) == PVD_RISING_EDGE) {\r\n    __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();\r\n  }\r\n\r\n  if ((sConfigPVD->Mode & PVD_FALLING_EDGE) == PVD_FALLING_EDGE) {\r\n    __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE();\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Enables the Power Voltage Detector(PVD).\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnablePVD(void) {\r\n  /* Enable the power voltage detector */\r\n  *(__IO uint32_t *)CR_PVDE_BB = (uint32_t)ENABLE;\r\n}\r\n\r\n/**\r\n * @brief  Disables the Power Voltage Detector(PVD).\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DisablePVD(void) {\r\n  /* Disable the power voltage detector */\r\n  *(__IO uint32_t *)CR_PVDE_BB = (uint32_t)DISABLE;\r\n}\r\n\r\n/**\r\n * @brief Enables the WakeUp PINx functionality.\r\n * @param WakeUpPinx: Specifies the Power Wake-Up pin to enable.\r\n *        This parameter can be one of the following values:\r\n *           @arg PWR_WAKEUP_PIN1\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx) {\r\n  /* Check the parameter */\r\n  assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx));\r\n  /* Enable the EWUPx pin */\r\n  *(__IO uint32_t *)CSR_EWUP_BB(WakeUpPinx) = (uint32_t)ENABLE;\r\n}\r\n\r\n/**\r\n * @brief Disables the WakeUp PINx functionality.\r\n * @param WakeUpPinx: Specifies the Power Wake-Up pin to disable.\r\n *        This parameter can be one of the following values:\r\n *           @arg PWR_WAKEUP_PIN1\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx) {\r\n  /* Check the parameter */\r\n  assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx));\r\n  /* Disable the EWUPx pin */\r\n  *(__IO uint32_t *)CSR_EWUP_BB(WakeUpPinx) = (uint32_t)DISABLE;\r\n}\r\n\r\n/**\r\n * @brief Enters Sleep mode.\r\n * @note  In Sleep mode, all I/O pins keep the same state as in Run mode.\r\n * @param Regulator: Regulator state as no effect in SLEEP mode -  allows to support portability from legacy software\r\n * @param SLEEPEntry: Specifies if SLEEP mode is entered with WFI or WFE instruction.\r\n *           When WFI entry is used, tick interrupt have to be disabled if not desired as\r\n *           the interrupt wake up source.\r\n *           This parameter can be one of the following values:\r\n *            @arg PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction\r\n *            @arg PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry) {\r\n  /* Check the parameters */\r\n  /* No check on Regulator because parameter not used in SLEEP mode */\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(Regulator);\r\n\r\n  assert_param(IS_PWR_SLEEP_ENTRY(SLEEPEntry));\r\n\r\n  /* Clear SLEEPDEEP bit of Cortex System Control Register */\r\n  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));\r\n\r\n  /* Select SLEEP mode entry -------------------------------------------------*/\r\n  if (SLEEPEntry == PWR_SLEEPENTRY_WFI) {\r\n    /* Request Wait For Interrupt */\r\n    __WFI();\r\n  } else {\r\n    /* Request Wait For Event */\r\n    __SEV();\r\n    __WFE();\r\n    __WFE();\r\n  }\r\n}\r\n\r\n/**\r\n * @brief Enters Stop mode.\r\n * @note  In Stop mode, all I/O pins keep the same state as in Run mode.\r\n * @note  When exiting Stop mode by using an interrupt or a wakeup event,\r\n *        HSI RC oscillator is selected as system clock.\r\n * @note  When the voltage regulator operates in low power mode, an additional\r\n *         startup delay is incurred when waking up from Stop mode.\r\n *         By keeping the internal regulator ON during Stop mode, the consumption\r\n *         is higher although the startup time is reduced.\r\n * @param Regulator: Specifies the regulator state in Stop mode.\r\n *          This parameter can be one of the following values:\r\n *            @arg PWR_MAINREGULATOR_ON: Stop mode with regulator ON\r\n *            @arg PWR_LOWPOWERREGULATOR_ON: Stop mode with low power regulator ON\r\n * @param STOPEntry: Specifies if Stop mode in entered with WFI or WFE instruction.\r\n *          This parameter can be one of the following values:\r\n *            @arg PWR_STOPENTRY_WFI: Enter Stop mode with WFI instruction\r\n *            @arg PWR_STOPENTRY_WFE: Enter Stop mode with WFE instruction\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry) {\r\n  /* Check the parameters */\r\n  assert_param(IS_PWR_REGULATOR(Regulator));\r\n  assert_param(IS_PWR_STOP_ENTRY(STOPEntry));\r\n\r\n  /* Clear PDDS bit in PWR register to specify entering in STOP mode when CPU enter in Deepsleep */\r\n  CLEAR_BIT(PWR->CR, PWR_CR_PDDS);\r\n\r\n  /* Select the voltage regulator mode by setting LPDS bit in PWR register according to Regulator parameter value */\r\n  MODIFY_REG(PWR->CR, PWR_CR_LPDS, Regulator);\r\n\r\n  /* Set SLEEPDEEP bit of Cortex System Control Register */\r\n  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));\r\n\r\n  /* Select Stop mode entry --------------------------------------------------*/\r\n  if (STOPEntry == PWR_STOPENTRY_WFI) {\r\n    /* Request Wait For Interrupt */\r\n    __WFI();\r\n  } else {\r\n    /* Request Wait For Event */\r\n    __SEV();\r\n    PWR_OverloadWfe(); /* WFE redefine locally */\r\n    PWR_OverloadWfe(); /* WFE redefine locally */\r\n  }\r\n  /* Reset SLEEPDEEP bit of Cortex System Control Register */\r\n  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));\r\n}\r\n\r\n/**\r\n * @brief Enters Standby mode.\r\n * @note  In Standby mode, all I/O pins are high impedance except for:\r\n *          - Reset pad (still available)\r\n *          - TAMPER pin if configured for tamper or calibration out.\r\n *          - WKUP pin (PA0) if enabled.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnterSTANDBYMode(void) {\r\n  /* Select Standby mode */\r\n  SET_BIT(PWR->CR, PWR_CR_PDDS);\r\n\r\n  /* Set SLEEPDEEP bit of Cortex System Control Register */\r\n  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));\r\n\r\n  /* This option is used to ensure that store operations are completed */\r\n#if defined(__CC_ARM)\r\n  __force_stores();\r\n#endif\r\n  /* Request Wait For Interrupt */\r\n  __WFI();\r\n}\r\n\r\n/**\r\n * @brief Indicates Sleep-On-Exit when returning from Handler mode to Thread mode.\r\n * @note Set SLEEPONEXIT bit of SCR register. When this bit is set, the processor\r\n *       re-enters SLEEP mode when an interruption handling is over.\r\n *       Setting this bit is useful when the processor is expected to run only on\r\n *       interruptions handling.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnableSleepOnExit(void) {\r\n  /* Set SLEEPONEXIT bit of Cortex System Control Register */\r\n  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));\r\n}\r\n\r\n/**\r\n * @brief Disables Sleep-On-Exit feature when returning from Handler mode to Thread mode.\r\n * @note Clears SLEEPONEXIT bit of SCR register. When this bit is set, the processor\r\n *       re-enters SLEEP mode when an interruption handling is over.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DisableSleepOnExit(void) {\r\n  /* Clear SLEEPONEXIT bit of Cortex System Control Register */\r\n  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));\r\n}\r\n\r\n/**\r\n * @brief Enables CORTEX M3 SEVONPEND bit.\r\n * @note Sets SEVONPEND bit of SCR register. When this bit is set, this causes\r\n *       WFE to wake up when an interrupt moves from inactive to pended.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnableSEVOnPend(void) {\r\n  /* Set SEVONPEND bit of Cortex System Control Register */\r\n  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));\r\n}\r\n\r\n/**\r\n * @brief Disables CORTEX M3 SEVONPEND bit.\r\n * @note Clears SEVONPEND bit of SCR register. When this bit is set, this causes\r\n *       WFE to wake up when an interrupt moves from inactive to pended.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DisableSEVOnPend(void) {\r\n  /* Clear SEVONPEND bit of Cortex System Control Register */\r\n  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));\r\n}\r\n\r\n/**\r\n * @brief  This function handles the PWR PVD interrupt request.\r\n * @note   This API should be called under the PVD_IRQHandler().\r\n * @retval None\r\n */\r\nvoid HAL_PWR_PVD_IRQHandler(void) {\r\n  /* Check PWR exti flag */\r\n  if (__HAL_PWR_PVD_EXTI_GET_FLAG() != RESET) {\r\n    /* PWR PVD interrupt user callback */\r\n    HAL_PWR_PVDCallback();\r\n\r\n    /* Clear PWR Exti pending bit */\r\n    __HAL_PWR_PVD_EXTI_CLEAR_FLAG();\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  PWR PVD interrupt callback\r\n * @retval None\r\n */\r\n__weak void HAL_PWR_PVDCallback(void) {\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_PWR_PVDCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_PWR_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_rcc.c\r\n  * @author  MCD Application Team\r\n  * @brief   RCC HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the Reset and Clock Control (RCC) peripheral:\r\n  *           + Initialization and de-initialization functions\r\n  *           + Peripheral Control functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                      ##### RCC specific features #####\r\n  ==============================================================================\r\n    [..]\r\n      After reset the device is running from Internal High Speed oscillator\r\n      (HSI 8MHz) with Flash 0 wait state, Flash prefetch buffer is enabled,\r\n      and all peripherals are off except internal SRAM, Flash and JTAG.\r\n      (+) There is no prescaler on High speed (AHB) and Low speed (APB) buses;\r\n          all peripherals mapped on these buses are running at HSI speed.\r\n      (+) The clock for all peripherals is switched off, except the SRAM and FLASH.\r\n      (+) All GPIOs are in input floating state, except the JTAG pins which\r\n          are assigned to be used for debug purpose.\r\n    [..] Once the device started from reset, the user application has to:\r\n      (+) Configure the clock source to be used to drive the System clock\r\n          (if the application needs higher frequency/performance)\r\n      (+) Configure the System clock frequency and Flash settings\r\n      (+) Configure the AHB and APB buses prescalers\r\n      (+) Enable the clock for the peripheral(s) to be used\r\n      (+) Configure the clock source(s) for peripherals whose clocks are not\r\n          derived from the System clock (I2S, RTC, ADC, USB OTG FS)\r\n\r\n                      ##### RCC Limitations #####\r\n  ==============================================================================\r\n    [..]\r\n      A delay between an RCC peripheral clock enable and the effective peripheral\r\n      enabling should be taken into account in order to manage the peripheral read/write\r\n      from/to registers.\r\n      (+) This delay depends on the peripheral mapping.\r\n        (++) AHB & APB peripherals, 1 dummy read is necessary\r\n\r\n    [..]\r\n      Workarounds:\r\n      (#) For AHB & APB peripherals, a dummy read to the peripheral register has been\r\n          inserted in each __HAL_RCC_PPP_CLK_ENABLE() macro.\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n*/\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup RCC RCC\r\n * @brief RCC HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_RCC_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup RCC_Private_Constants RCC Private Constants\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n/* Private macro -------------------------------------------------------------*/\r\n/** @defgroup RCC_Private_Macros RCC Private Macros\r\n * @{\r\n */\r\n\r\n#define MCO1_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()\r\n#define MCO1_GPIO_PORT    GPIOA\r\n#define MCO1_PIN          GPIO_PIN_8\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private variables ---------------------------------------------------------*/\r\n/** @defgroup RCC_Private_Variables RCC Private Variables\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private function prototypes -----------------------------------------------*/\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @defgroup RCC_Exported_Functions RCC Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup RCC_Exported_Functions_Group1 Initialization and de-initialization functions\r\n  *  @brief    Initialization and Configuration functions\r\n  *\r\n  @verbatim\r\n  ===============================================================================\r\n           ##### Initialization and de-initialization functions #####\r\n  ===============================================================================\r\n    [..]\r\n      This section provides functions allowing to configure the internal/external oscillators\r\n      (HSE, HSI, LSE, LSI, PLL, CSS and MCO) and the System buses clocks (SYSCLK, AHB, APB1\r\n      and APB2).\r\n\r\n    [..] Internal/external clock and PLL configuration\r\n      (#) HSI (high-speed internal), 8 MHz factory-trimmed RC used directly or through\r\n          the PLL as System clock source.\r\n      (#) LSI (low-speed internal), ~40 KHz low consumption RC used as IWDG and/or RTC\r\n          clock source.\r\n\r\n      (#) HSE (high-speed external), 4 to 24 MHz (STM32F100xx) or 4 to 16 MHz (STM32F101x/STM32F102x/STM32F103x) or 3 to 25 MHz (STM32F105x/STM32F107x)  crystal oscillator used directly or\r\n          through the PLL as System clock source. Can be used also as RTC clock source.\r\n\r\n      (#) LSE (low-speed external), 32 KHz oscillator used as RTC clock source.\r\n\r\n      (#) PLL (clocked by HSI or HSE), featuring different output clocks:\r\n        (++) The first output is used to generate the high speed system clock (up to 72 MHz for STM32F10xxx or up to 24 MHz for STM32F100xx)\r\n        (++) The second output is used to generate the clock for the USB OTG FS (48 MHz)\r\n\r\n      (#) CSS (Clock security system), once enable using the macro __HAL_RCC_CSS_ENABLE()\r\n          and if a HSE clock failure occurs(HSE used directly or through PLL as System\r\n          clock source), the System clocks automatically switched to HSI and an interrupt\r\n          is generated if enabled. The interrupt is linked to the Cortex-M3 NMI\r\n          (Non-Maskable Interrupt) exception vector.\r\n\r\n      (#) MCO1 (microcontroller clock output), used to output SYSCLK, HSI,\r\n          HSE or PLL clock (divided by 2) on PA8 pin + PLL2CLK, PLL3CLK/2, PLL3CLK and XTI for STM32F105x/STM32F107x\r\n\r\n    [..] System, AHB and APB buses clocks configuration\r\n      (#) Several clock sources can be used to drive the System clock (SYSCLK): HSI,\r\n          HSE and PLL.\r\n          The AHB clock (HCLK) is derived from System clock through configurable\r\n          prescaler and used to clock the CPU, memory and peripherals mapped\r\n          on AHB bus (DMA, GPIO...). APB1 (PCLK1) and APB2 (PCLK2) clocks are derived\r\n          from AHB clock through configurable prescalers and used to clock\r\n          the peripherals mapped on these buses. You can use\r\n          \"@ref HAL_RCC_GetSysClockFreq()\" function to retrieve the frequencies of these clocks.\r\n\r\n      -@- All the peripheral clocks are derived from the System clock (SYSCLK) except:\r\n          (+@) RTC: RTC clock can be derived either from the LSI, LSE or HSE clock\r\n              divided by 128.\r\n          (+@) USB OTG FS and RTC: USB OTG FS require a frequency equal to 48 MHz\r\n              to work correctly. This clock is derived of the main PLL through PLL Multiplier.\r\n          (+@) I2S interface on STM32F105x/STM32F107x can be derived from PLL3CLK\r\n          (+@) IWDG clock which is always the LSI clock.\r\n\r\n      (#) For STM32F10xxx, the maximum frequency of the SYSCLK and HCLK/PCLK2 is 72 MHz, PCLK1 36 MHz.\r\n          For STM32F100xx, the maximum frequency of the SYSCLK and HCLK/PCLK1/PCLK2 is 24 MHz.\r\n          Depending on the SYSCLK frequency, the flash latency should be adapted accordingly.\r\n  @endverbatim\r\n  * @{\r\n  */\r\n\r\n/*\r\n  Additional consideration on the SYSCLK based on Latency settings:\r\n        +-----------------------------------------------+\r\n        | Latency       | SYSCLK clock frequency (MHz)  |\r\n        |---------------|-------------------------------|\r\n        |0WS(1CPU cycle)|       0 < SYSCLK <= 24        |\r\n        |---------------|-------------------------------|\r\n        |1WS(2CPU cycle)|      24 < SYSCLK <= 48        |\r\n        |---------------|-------------------------------|\r\n        |2WS(3CPU cycle)|      48 < SYSCLK <= 72        |\r\n        +-----------------------------------------------+\r\n  */\r\n\r\n/**\r\n * @brief  Resets the RCC clock configuration to the default reset state.\r\n * @note   The default reset state of the clock configuration is given below:\r\n *            - HSI ON and used as system clock source\r\n *            - HSE, PLL, PLL2 and PLL3 are OFF\r\n *            - AHB, APB1 and APB2 prescaler set to 1.\r\n *            - CSS and MCO1 OFF\r\n *            - All interrupts disabled\r\n *            - All flags are cleared\r\n * @note   This function does not modify the configuration of the\r\n *            - Peripheral clocks\r\n *            - LSI, LSE and RTC clocks\r\n * @retval HAL_StatusTypeDef\r\n */\r\nHAL_StatusTypeDef HAL_RCC_DeInit(void) {\r\n  uint32_t tickstart;\r\n\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Set HSION bit */\r\n  SET_BIT(RCC->CR, RCC_CR_HSION);\r\n\r\n  /* Wait till HSI is ready */\r\n  while (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RESET) {\r\n    if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Set HSITRIM bits to the reset value */\r\n  MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, (0x10U << RCC_CR_HSITRIM_Pos));\r\n\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Reset CFGR register */\r\n  CLEAR_REG(RCC->CFGR);\r\n\r\n  /* Wait till clock switch is ready */\r\n  while (READ_BIT(RCC->CFGR, RCC_CFGR_SWS) != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Update the SystemCoreClock global variable */\r\n  SystemCoreClock = HSI_VALUE;\r\n\r\n  /* Adapt Systick interrupt period */\r\n  if (HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Second step is to clear PLLON bit */\r\n  CLEAR_BIT(RCC->CR, RCC_CR_PLLON);\r\n\r\n  /* Wait till PLL is disabled */\r\n  while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Ensure to reset PLLSRC and PLLMUL bits */\r\n  CLEAR_REG(RCC->CFGR);\r\n\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Reset HSEON & CSSON bits */\r\n  CLEAR_BIT(RCC->CR, RCC_CR_HSEON | RCC_CR_CSSON);\r\n\r\n  /* Wait till HSE is disabled */\r\n  while (READ_BIT(RCC->CR, RCC_CR_HSERDY) != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Reset HSEBYP bit */\r\n  CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);\r\n\r\n#if defined(RCC_PLL2_SUPPORT)\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Clear PLL2ON bit */\r\n  CLEAR_BIT(RCC->CR, RCC_CR_PLL2ON);\r\n\r\n  /* Wait till PLL2 is disabled */\r\n  while (READ_BIT(RCC->CR, RCC_CR_PLL2RDY) != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n#endif /* RCC_PLL2_SUPPORT */\r\n\r\n#if defined(RCC_PLLI2S_SUPPORT)\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Clear PLL3ON bit */\r\n  CLEAR_BIT(RCC->CR, RCC_CR_PLL3ON);\r\n\r\n  /* Wait till PLL3 is disabled */\r\n  while (READ_BIT(RCC->CR, RCC_CR_PLL3RDY) != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n#endif /* RCC_PLLI2S_SUPPORT */\r\n\r\n#if defined(RCC_CFGR2_PREDIV1)\r\n  /* Reset CFGR2 register */\r\n  CLEAR_REG(RCC->CFGR2);\r\n#endif /* RCC_CFGR2_PREDIV1 */\r\n\r\n  /* Reset all CSR flags */\r\n  SET_BIT(RCC->CSR, RCC_CSR_RMVF);\r\n\r\n  /* Disable all interrupts */\r\n  CLEAR_REG(RCC->CIR);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the RCC Oscillators according to the specified parameters in the\r\n *         RCC_OscInitTypeDef.\r\n * @param  RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that\r\n *         contains the configuration information for the RCC Oscillators.\r\n * @note   The PLL is not disabled when used as system clock.\r\n * @note   The PLL is not disabled when USB OTG FS clock is enabled (specific to devices with USB FS)\r\n * @note   Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not\r\n *         supported by this macro. User should request a transition to LSE Off\r\n *         first and then LSE On or LSE Bypass.\r\n * @note   Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not\r\n *         supported by this macro. User should request a transition to HSE Off\r\n *         first and then HSE On or HSE Bypass.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(RCC_OscInitStruct != NULL);\r\n  assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));\r\n\r\n  /*------------------------------- HSE Configuration ------------------------*/\r\n  /*----------------------------- HSI Configuration --------------------------*/\r\n  if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));\r\n    assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));\r\n\r\n    /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */\r\n    if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI) ||\r\n        ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSI_DIV2))) {\r\n      /* When HSI is used as system clock it will not disabled */\r\n      if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) {\r\n        return HAL_ERROR;\r\n      }\r\n      /* Otherwise, just the calibration is allowed */\r\n      else {\r\n        /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/\r\n        __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);\r\n      }\r\n    } else {\r\n      /* Check the HSI State */\r\n      if (RCC_OscInitStruct->HSIState != RCC_HSI_OFF) {\r\n        /* Enable the Internal High Speed oscillator (HSI). */\r\n        __HAL_RCC_HSI_ENABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till HSI is ready */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) {\r\n          if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n\r\n        /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/\r\n        __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);\r\n      } else {\r\n        /* Disable the Internal High Speed oscillator (HSI). */\r\n        __HAL_RCC_HSI_DISABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till HSI is disabled */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) {\r\n          if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n  /*------------------------------ LSI Configuration -------------------------*/\r\n\r\n  /*------------------------------ LSE Configuration -------------------------*/\r\n\r\n#if defined(RCC_CR_PLL2ON)\r\n  /*-------------------------------- PLL2 Configuration -----------------------*/\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_PLL2(RCC_OscInitStruct->PLL2.PLL2State));\r\n  if ((RCC_OscInitStruct->PLL2.PLL2State) != RCC_PLL2_NONE) {\r\n    /* This bit can not be cleared if the PLL2 clock is used indirectly as system\r\n      clock (i.e. it is used as PLL clock entry that is used as system clock). */\r\n    if ((__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE) && (__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) &&\r\n        ((READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) == RCC_CFGR2_PREDIV1SRC_PLL2)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      if ((RCC_OscInitStruct->PLL2.PLL2State) == RCC_PLL2_ON) {\r\n        /* Check the parameters */\r\n        assert_param(IS_RCC_PLL2_MUL(RCC_OscInitStruct->PLL2.PLL2MUL));\r\n        assert_param(IS_RCC_HSE_PREDIV2(RCC_OscInitStruct->PLL2.HSEPrediv2Value));\r\n\r\n        /* Prediv2 can be written only when the PLLI2S is disabled. */\r\n        /* Return an error only if new value is different from the programmed value */\r\n        if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON) && (__HAL_RCC_HSE_GET_PREDIV2() != RCC_OscInitStruct->PLL2.HSEPrediv2Value)) {\r\n          return HAL_ERROR;\r\n        }\r\n\r\n        /* Disable the main PLL2. */\r\n        __HAL_RCC_PLL2_DISABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL2 is disabled */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n\r\n        /* Configure the HSE prediv2 factor --------------------------------*/\r\n        __HAL_RCC_HSE_PREDIV2_CONFIG(RCC_OscInitStruct->PLL2.HSEPrediv2Value);\r\n\r\n        /* Configure the main PLL2 multiplication factors. */\r\n        __HAL_RCC_PLL2_CONFIG(RCC_OscInitStruct->PLL2.PLL2MUL);\r\n\r\n        /* Enable the main PLL2. */\r\n        __HAL_RCC_PLL2_ENABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL2 is ready */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      } else {\r\n        /* Set PREDIV1 source to HSE */\r\n        CLEAR_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC);\r\n\r\n        /* Disable the main PLL2. */\r\n        __HAL_RCC_PLL2_DISABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL2 is disabled */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n#endif /* RCC_CR_PLL2ON */\r\n  /*-------------------------------- PLL Configuration -----------------------*/\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState));\r\n  if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE) {\r\n    /* Check if the PLL is used as system clock or not */\r\n    if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK) {\r\n      if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) {\r\n        /* Check the parameters */\r\n        assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource));\r\n        assert_param(IS_RCC_PLL_MUL(RCC_OscInitStruct->PLL.PLLMUL));\r\n\r\n        /* Disable the main PLL. */\r\n        __HAL_RCC_PLL_DISABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL is disabled */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n\r\n        /* Configure the HSE prediv factor --------------------------------*/\r\n        /* It can be written only when the PLL is disabled. Not used in PLL source is different than HSE */\r\n        if (RCC_OscInitStruct->PLL.PLLSource == RCC_PLLSOURCE_HSE) {\r\n          /* Check the parameter */\r\n          assert_param(IS_RCC_HSE_PREDIV(RCC_OscInitStruct->HSEPredivValue));\r\n#if defined(RCC_CFGR2_PREDIV1SRC)\r\n          assert_param(IS_RCC_PREDIV1_SOURCE(RCC_OscInitStruct->Prediv1Source));\r\n\r\n          /* Set PREDIV1 source */\r\n          SET_BIT(RCC->CFGR2, RCC_OscInitStruct->Prediv1Source);\r\n#endif /* RCC_CFGR2_PREDIV1SRC */\r\n\r\n          /* Set PREDIV1 Value */\r\n          __HAL_RCC_HSE_PREDIV_CONFIG(RCC_OscInitStruct->HSEPredivValue);\r\n        }\r\n\r\n        /* Configure the main PLL clock source and multiplication factors. */\r\n        __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource, RCC_OscInitStruct->PLL.PLLMUL);\r\n        /* Enable the main PLL. */\r\n        __HAL_RCC_PLL_ENABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL is ready */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      } else {\r\n        /* Disable the main PLL. */\r\n        __HAL_RCC_PLL_DISABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL is disabled */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      return HAL_ERROR;\r\n    }\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the CPU, AHB and APB buses clocks according to the specified\r\n *         parameters in the RCC_ClkInitStruct.\r\n * @param  RCC_ClkInitStruct pointer to an RCC_OscInitTypeDef structure that\r\n *         contains the configuration information for the RCC peripheral.\r\n * @param  FLatency FLASH Latency\r\n *          The value of this parameter depend on device used within the same series\r\n * @note   The SystemCoreClock CMSIS variable is used to store System Clock Frequency\r\n *         and updated by @ref HAL_RCC_GetHCLKFreq() function called within this function\r\n *\r\n * @note   The HSI is used (enabled by hardware) as system clock source after\r\n *         start-up from Reset, wake-up from STOP and STANDBY mode, or in case\r\n *         of failure of the HSE used directly or indirectly as system clock\r\n *         (if the Clock Security System CSS is enabled).\r\n *\r\n * @note   A switch from one clock source to another occurs only if the target\r\n *         clock source is ready (clock stable after start-up delay or PLL locked).\r\n *         If a clock source which is not yet ready is selected, the switch will\r\n *         occur when the clock source will be ready.\r\n *         You can use @ref HAL_RCC_GetClockConfig() function to know which clock is\r\n *         currently used as system clock source.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(RCC_ClkInitStruct != NULL);\r\n  assert_param(IS_RCC_CLOCKTYPE(RCC_ClkInitStruct->ClockType));\r\n  assert_param(IS_FLASH_LATENCY(FLatency));\r\n\r\n  /* To correctly read data from FLASH memory, the number of wait states (LATENCY)\r\n  must be correctly programmed according to the frequency of the CPU clock\r\n    (HCLK) of the device. */\r\n\r\n#if defined(FLASH_ACR_LATENCY)\r\n  /* Increasing the number of wait states because of higher CPU frequency */\r\n  if (FLatency > (FLASH->ACR & FLASH_ACR_LATENCY)) {\r\n    /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */\r\n    __HAL_FLASH_SET_LATENCY(FLatency);\r\n\r\n    /* Check that the new number of wait states is taken into account to access the Flash\r\n    memory by reading the FLASH_ACR register */\r\n    if ((FLASH->ACR & FLASH_ACR_LATENCY) != FLatency) {\r\n      return HAL_ERROR;\r\n    }\r\n  }\r\n\r\n#endif /* FLASH_ACR_LATENCY */\r\n  /*-------------------------- HCLK Configuration --------------------------*/\r\n  if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) {\r\n    /* Set the highest APBx dividers in order to ensure that we do not go through\r\n    a non-spec phase whatever we decrease or increase HCLK. */\r\n    if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) {\r\n      MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16);\r\n    }\r\n\r\n    if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) {\r\n      MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3));\r\n    }\r\n\r\n    /* Set the new HCLK clock divider */\r\n    assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider));\r\n    MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider);\r\n  }\r\n\r\n  /*------------------------- SYSCLK Configuration ---------------------------*/\r\n  if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) {\r\n    assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));\r\n\r\n    /* HSE is selected as System Clock Source */\r\n    if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) {\r\n      /* Check the HSE ready flag */\r\n      if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) {\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n    /* PLL is selected as System Clock Source */\r\n    else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) {\r\n      /* Check the PLL ready flag */\r\n      if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) {\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n    /* HSI is selected as System Clock Source */\r\n    else {\r\n      /* Check the HSI ready flag */\r\n      if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) {\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n    __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource);\r\n\r\n    /* Get Start Tick */\r\n    tickstart = HAL_GetTick();\r\n\r\n    if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) {\r\n      while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_HSE) {\r\n        if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    } else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) {\r\n      while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK) {\r\n        if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    } else {\r\n      while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_HSI) {\r\n        if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n  }\r\n#if defined(FLASH_ACR_LATENCY)\r\n  /* Decreasing the number of wait states because of lower CPU frequency */\r\n  if (FLatency < (FLASH->ACR & FLASH_ACR_LATENCY)) {\r\n    /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */\r\n    __HAL_FLASH_SET_LATENCY(FLatency);\r\n\r\n    /* Check that the new number of wait states is taken into account to access the Flash\r\n    memory by reading the FLASH_ACR register */\r\n    if ((FLASH->ACR & FLASH_ACR_LATENCY) != FLatency) {\r\n      return HAL_ERROR;\r\n    }\r\n  }\r\n#endif /* FLASH_ACR_LATENCY */\r\n\r\n  /*-------------------------- PCLK1 Configuration ---------------------------*/\r\n  if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) {\r\n    assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider));\r\n    MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider);\r\n  }\r\n\r\n  /*-------------------------- PCLK2 Configuration ---------------------------*/\r\n  if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) {\r\n    assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider));\r\n    MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3));\r\n  }\r\n\r\n  /* Update the SystemCoreClock global variable */\r\n  SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos];\r\n\r\n  /* Configure the source of time base considering new system clocks settings*/\r\n  HAL_InitTick(TICK_INT_PRIORITY);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Exported_Functions_Group2 Peripheral Control functions\r\n  *  @brief   RCC clocks control functions\r\n  *\r\n  @verbatim\r\n  ===============================================================================\r\n                  ##### Peripheral Control functions #####\r\n  ===============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the RCC Clocks\r\n    frequencies.\r\n\r\n  @endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n  * @brief  Selects the clock source to output on MCO pin.\r\n  * @note   MCO pin should be configured in alternate function mode.\r\n  * @param  RCC_MCOx specifies the output direction for the clock source.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_MCO1 Clock source to output on MCO1 pin(PA8).\r\n  * @param  RCC_MCOSource specifies the clock source to output.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_MCO1SOURCE_NOCLOCK     No clock selected as MCO clock\r\n  *            @arg @ref RCC_MCO1SOURCE_SYSCLK      System clock selected as MCO clock\r\n  *            @arg @ref RCC_MCO1SOURCE_HSI         HSI selected as MCO clock\r\n  *            @arg @ref RCC_MCO1SOURCE_HSE         HSE selected as MCO clock\r\n  @if STM32F105xC\r\n  *            @arg @ref RCC_MCO1SOURCE_PLLCLK       PLL clock divided by 2 selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL2CLK      PLL2 clock selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL3CLK_DIV2 PLL3 clock divided by 2 selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_EXT_HSE      XT1 external 3-25 MHz oscillator clock selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL3CLK      PLL3 clock selected as MCO source\r\n  @endif\r\n  @if STM32F107xC\r\n  *            @arg @ref RCC_MCO1SOURCE_PLLCLK       PLL clock divided by 2 selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL2CLK      PLL2 clock selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL3CLK_DIV2 PLL3 clock divided by 2 selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_EXT_HSE XT1  external 3-25 MHz oscillator clock selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL3CLK      PLL3 clock selected as MCO source\r\n  @endif\r\n  * @param  RCC_MCODiv specifies the MCO DIV.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_MCODIV_1 no division applied to MCO clock\r\n  * @retval None\r\n  */\r\nvoid HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv) {\r\n  GPIO_InitTypeDef gpio = {0U};\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_MCO(RCC_MCOx));\r\n  assert_param(IS_RCC_MCODIV(RCC_MCODiv));\r\n  assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource));\r\n\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(RCC_MCOx);\r\n  UNUSED(RCC_MCODiv);\r\n\r\n  /* Configure the MCO1 pin in alternate function mode */\r\n  gpio.Mode  = GPIO_MODE_AF_PP;\r\n  gpio.Speed = GPIO_SPEED_FREQ_HIGH;\r\n  gpio.Pull  = GPIO_NOPULL;\r\n  gpio.Pin   = MCO1_PIN;\r\n\r\n  /* MCO1 Clock Enable */\r\n  MCO1_CLK_ENABLE();\r\n\r\n  HAL_GPIO_Init(MCO1_GPIO_PORT, &gpio);\r\n\r\n  /* Configure the MCO clock source */\r\n  __HAL_RCC_MCO1_CONFIG(RCC_MCOSource, RCC_MCODiv);\r\n}\r\n\r\n/**\r\n * @brief  Enables the Clock Security System.\r\n * @note   If a failure is detected on the HSE oscillator clock, this oscillator\r\n *         is automatically disabled and an interrupt is generated to inform the\r\n *         software about the failure (Clock Security System Interrupt, CSSI),\r\n *         allowing the MCU to perform rescue operations. The CSSI is linked to\r\n *         the Cortex-M3 NMI (Non-Maskable Interrupt) exception vector.\r\n * @retval None\r\n */\r\nvoid HAL_RCC_EnableCSS(void) { *(__IO uint32_t *)RCC_CR_CSSON_BB = (uint32_t)ENABLE; }\r\n\r\n/**\r\n * @brief  Disables the Clock Security System.\r\n * @retval None\r\n */\r\nvoid HAL_RCC_DisableCSS(void) { *(__IO uint32_t *)RCC_CR_CSSON_BB = (uint32_t)DISABLE; }\r\n\r\n/**\r\n * @brief  Returns the SYSCLK frequency\r\n * @note   The system frequency computed by this function is not the real\r\n *         frequency in the chip. It is calculated based on the predefined\r\n *         constant and the selected clock source:\r\n * @note     If SYSCLK source is HSI, function returns values based on HSI_VALUE(*)\r\n * @note     If SYSCLK source is HSE, function returns a value based on HSE_VALUE\r\n *           divided by PREDIV factor(**)\r\n * @note     If SYSCLK source is PLL, function returns a value based on HSE_VALUE\r\n *           divided by PREDIV factor(**) or HSI_VALUE(*) multiplied by the PLL factor.\r\n * @note     (*) HSI_VALUE is a constant defined in stm32f1xx_hal_conf.h file (default value\r\n *               8 MHz) but the real value may vary depending on the variations\r\n *               in voltage and temperature.\r\n * @note     (**) HSE_VALUE is a constant defined in stm32f1xx_hal_conf.h file (default value\r\n *                8 MHz), user has to ensure that HSE_VALUE is same as the real\r\n *                frequency of the crystal used. Otherwise, this function may\r\n *                have wrong result.\r\n *\r\n * @note   The result of this function could be not correct when using fractional\r\n *         value for HSE crystal.\r\n *\r\n * @note   This function can be used by the user application to compute the\r\n *         baud-rate for the communication peripherals or configure other parameters.\r\n *\r\n * @note   Each time SYSCLK changes, this function must be called to update the\r\n *         right SYSCLK value. Otherwise, any configuration based on this function will be incorrect.\r\n *\r\n * @retval SYSCLK frequency\r\n */\r\nuint32_t HAL_RCC_GetSysClockFreq(void) {\r\n#if defined(RCC_CFGR2_PREDIV1SRC)\r\n  const uint8_t aPLLMULFactorTable[14] = {0, 0, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 13};\r\n  const uint8_t aPredivFactorTable[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};\r\n#else\r\n  const uint8_t aPLLMULFactorTable[16] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16};\r\n#if defined(RCC_CFGR2_PREDIV1)\r\n  const uint8_t aPredivFactorTable[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};\r\n#else\r\n  const uint8_t aPredivFactorTable[2] = {1, 2};\r\n#endif /*RCC_CFGR2_PREDIV1*/\r\n\r\n#endif\r\n  uint32_t tmpreg = 0U, prediv = 0U, pllclk = 0U, pllmul = 0U;\r\n  uint32_t sysclockfreq = 0U;\r\n#if defined(RCC_CFGR2_PREDIV1SRC)\r\n  uint32_t prediv2 = 0U, pll2mul = 0U;\r\n#endif /*RCC_CFGR2_PREDIV1SRC*/\r\n\r\n  tmpreg = RCC->CFGR;\r\n\r\n  /* Get SYSCLK source -------------------------------------------------------*/\r\n  switch (tmpreg & RCC_CFGR_SWS) {\r\n  case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock */\r\n  {\r\n    sysclockfreq = HSE_VALUE;\r\n    break;\r\n  }\r\n  case RCC_SYSCLKSOURCE_STATUS_PLLCLK: /* PLL used as system clock */\r\n  {\r\n    pllmul = aPLLMULFactorTable[(uint32_t)(tmpreg & RCC_CFGR_PLLMULL) >> RCC_CFGR_PLLMULL_Pos];\r\n    if ((tmpreg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) {\r\n#if defined(RCC_CFGR2_PREDIV1)\r\n      prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV1) >> RCC_CFGR2_PREDIV1_Pos];\r\n#else\r\n      prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR & RCC_CFGR_PLLXTPRE) >> RCC_CFGR_PLLXTPRE_Pos];\r\n#endif /*RCC_CFGR2_PREDIV1*/\r\n#if defined(RCC_CFGR2_PREDIV1SRC)\r\n\r\n      if (HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) {\r\n        /* PLL2 selected as Prediv1 source */\r\n        /* PLLCLK = PLL2CLK / PREDIV1 * PLLMUL with PLL2CLK = HSE/PREDIV2 * PLL2MUL */\r\n        prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1;\r\n        pll2mul = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> RCC_CFGR2_PLL2MUL_Pos) + 2;\r\n        pllclk  = (uint32_t)(((uint64_t)HSE_VALUE * (uint64_t)pll2mul * (uint64_t)pllmul) / ((uint64_t)prediv2 * (uint64_t)prediv));\r\n      } else {\r\n        /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */\r\n        pllclk = (uint32_t)((HSE_VALUE * pllmul) / prediv);\r\n      }\r\n\r\n      /* If PLLMUL was set to 13 means that it was to cover the case PLLMUL 6.5 (avoid using float) */\r\n      /* In this case need to divide pllclk by 2 */\r\n      if (pllmul == aPLLMULFactorTable[(uint32_t)(RCC_CFGR_PLLMULL6_5) >> RCC_CFGR_PLLMULL_Pos]) {\r\n        pllclk = pllclk / 2;\r\n      }\r\n#else\r\n      /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */\r\n      pllclk = (uint32_t)((HSE_VALUE * pllmul) / prediv);\r\n#endif /*RCC_CFGR2_PREDIV1SRC*/\r\n    } else {\r\n      /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */\r\n      pllclk = (uint32_t)((HSI_VALUE >> 1) * pllmul);\r\n    }\r\n    sysclockfreq = pllclk;\r\n    break;\r\n  }\r\n  case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */\r\n  default:                          /* HSI used as system clock */\r\n  {\r\n    sysclockfreq = HSI_VALUE;\r\n    break;\r\n  }\r\n  }\r\n  return sysclockfreq;\r\n}\r\n\r\n/**\r\n * @brief  Returns the HCLK frequency\r\n * @note   Each time HCLK changes, this function must be called to update the\r\n *         right HCLK value. Otherwise, any configuration based on this function will be incorrect.\r\n *\r\n * @note   The SystemCoreClock CMSIS variable is used to store System Clock Frequency\r\n *         and updated within this function\r\n * @retval HCLK frequency\r\n */\r\nuint32_t HAL_RCC_GetHCLKFreq(void) { return SystemCoreClock; }\r\n\r\n/**\r\n * @brief  Returns the PCLK1 frequency\r\n * @note   Each time PCLK1 changes, this function must be called to update the\r\n *         right PCLK1 value. Otherwise, any configuration based on this function will be incorrect.\r\n * @retval PCLK1 frequency\r\n */\r\nuint32_t HAL_RCC_GetPCLK1Freq(void) {\r\n  /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/\r\n  return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]);\r\n}\r\n\r\n/**\r\n * @brief  Returns the PCLK2 frequency\r\n * @note   Each time PCLK2 changes, this function must be called to update the\r\n *         right PCLK2 value. Otherwise, any configuration based on this function will be incorrect.\r\n * @retval PCLK2 frequency\r\n */\r\nuint32_t HAL_RCC_GetPCLK2Freq(void) {\r\n  /* Get HCLK source and Compute PCLK2 frequency ---------------------------*/\r\n  return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_Pos]);\r\n}\r\n\r\n/**\r\n * @brief  Configures the RCC_OscInitStruct according to the internal\r\n * RCC configuration registers.\r\n * @param  RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that\r\n * will be configured.\r\n * @retval None\r\n */\r\nvoid HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) {\r\n  /* Check the parameters */\r\n  assert_param(RCC_OscInitStruct != NULL);\r\n\r\n  /* Set all possible values for the Oscillator type parameter ---------------*/\r\n  RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI;\r\n\r\n#if defined(RCC_CFGR2_PREDIV1SRC)\r\n  /* Get the Prediv1 source --------------------------------------------------*/\r\n  RCC_OscInitStruct->Prediv1Source = READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC);\r\n#endif /* RCC_CFGR2_PREDIV1SRC */\r\n\r\n  /* Get the HSE configuration -----------------------------------------------*/\r\n  if ((RCC->CR & RCC_CR_HSEBYP) == RCC_CR_HSEBYP) {\r\n    RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS;\r\n  } else if ((RCC->CR & RCC_CR_HSEON) == RCC_CR_HSEON) {\r\n    RCC_OscInitStruct->HSEState = RCC_HSE_ON;\r\n  } else {\r\n    RCC_OscInitStruct->HSEState = RCC_HSE_OFF;\r\n  }\r\n  RCC_OscInitStruct->HSEPredivValue = __HAL_RCC_HSE_GET_PREDIV();\r\n\r\n  /* Get the HSI configuration -----------------------------------------------*/\r\n  if ((RCC->CR & RCC_CR_HSION) == RCC_CR_HSION) {\r\n    RCC_OscInitStruct->HSIState = RCC_HSI_ON;\r\n  } else {\r\n    RCC_OscInitStruct->HSIState = RCC_HSI_OFF;\r\n  }\r\n\r\n  RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR & RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);\r\n\r\n  /* Get the LSE configuration -----------------------------------------------*/\r\n  if ((RCC->BDCR & RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP) {\r\n    RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS;\r\n  } else if ((RCC->BDCR & RCC_BDCR_LSEON) == RCC_BDCR_LSEON) {\r\n    RCC_OscInitStruct->LSEState = RCC_LSE_ON;\r\n  } else {\r\n    RCC_OscInitStruct->LSEState = RCC_LSE_OFF;\r\n  }\r\n\r\n  /* Get the LSI configuration -----------------------------------------------*/\r\n  if ((RCC->CSR & RCC_CSR_LSION) == RCC_CSR_LSION) {\r\n    RCC_OscInitStruct->LSIState = RCC_LSI_ON;\r\n  } else {\r\n    RCC_OscInitStruct->LSIState = RCC_LSI_OFF;\r\n  }\r\n\r\n  /* Get the PLL configuration -----------------------------------------------*/\r\n  if ((RCC->CR & RCC_CR_PLLON) == RCC_CR_PLLON) {\r\n    RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON;\r\n  } else {\r\n    RCC_OscInitStruct->PLL.PLLState = RCC_PLL_OFF;\r\n  }\r\n  RCC_OscInitStruct->PLL.PLLSource = (uint32_t)(RCC->CFGR & RCC_CFGR_PLLSRC);\r\n  RCC_OscInitStruct->PLL.PLLMUL    = (uint32_t)(RCC->CFGR & RCC_CFGR_PLLMULL);\r\n#if defined(RCC_CR_PLL2ON)\r\n  /* Get the PLL2 configuration -----------------------------------------------*/\r\n  if ((RCC->CR & RCC_CR_PLL2ON) == RCC_CR_PLL2ON) {\r\n    RCC_OscInitStruct->PLL2.PLL2State = RCC_PLL2_ON;\r\n  } else {\r\n    RCC_OscInitStruct->PLL2.PLL2State = RCC_PLL2_OFF;\r\n  }\r\n  RCC_OscInitStruct->PLL2.HSEPrediv2Value = __HAL_RCC_HSE_GET_PREDIV2();\r\n  RCC_OscInitStruct->PLL2.PLL2MUL         = (uint32_t)(RCC->CFGR2 & RCC_CFGR2_PLL2MUL);\r\n#endif /* RCC_CR_PLL2ON */\r\n}\r\n\r\n/**\r\n * @brief  Get the RCC_ClkInitStruct according to the internal\r\n * RCC configuration registers.\r\n * @param  RCC_ClkInitStruct pointer to an RCC_ClkInitTypeDef structure that\r\n * contains the current clock configuration.\r\n * @param  pFLatency Pointer on the Flash Latency.\r\n * @retval None\r\n */\r\nvoid HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency) {\r\n  /* Check the parameters */\r\n  assert_param(RCC_ClkInitStruct != NULL);\r\n  assert_param(pFLatency != NULL);\r\n\r\n  /* Set all possible values for the Clock type parameter --------------------*/\r\n  RCC_ClkInitStruct->ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;\r\n\r\n  /* Get the SYSCLK configuration --------------------------------------------*/\r\n  RCC_ClkInitStruct->SYSCLKSource = (uint32_t)(RCC->CFGR & RCC_CFGR_SW);\r\n\r\n  /* Get the HCLK configuration ----------------------------------------------*/\r\n  RCC_ClkInitStruct->AHBCLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_HPRE);\r\n\r\n  /* Get the APB1 configuration ----------------------------------------------*/\r\n  RCC_ClkInitStruct->APB1CLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_PPRE1);\r\n\r\n  /* Get the APB2 configuration ----------------------------------------------*/\r\n  RCC_ClkInitStruct->APB2CLKDivider = (uint32_t)((RCC->CFGR & RCC_CFGR_PPRE2) >> 3);\r\n\r\n#if defined(FLASH_ACR_LATENCY)\r\n  /* Get the Flash Wait State (Latency) configuration ------------------------*/\r\n  *pFLatency = (uint32_t)(FLASH->ACR & FLASH_ACR_LATENCY);\r\n#else\r\n  /* For VALUE lines devices, only LATENCY_0 can be set*/\r\n  *pFLatency = (uint32_t)FLASH_LATENCY_0;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief This function handles the RCC CSS interrupt request.\r\n * @note This API should be called under the NMI_Handler().\r\n * @retval None\r\n */\r\nvoid HAL_RCC_NMI_IRQHandler(void) {\r\n  /* Check RCC CSSF flag  */\r\n  if (__HAL_RCC_GET_IT(RCC_IT_CSS)) {\r\n    /* RCC Clock Security System interrupt user callback */\r\n    HAL_RCC_CSSCallback();\r\n\r\n    /* Clear RCC CSS pending bit */\r\n    __HAL_RCC_CLEAR_IT(RCC_IT_CSS);\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  RCC Clock Security System interrupt callback\r\n * @retval none\r\n */\r\n__weak void HAL_RCC_CSSCallback(void) {\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n    the HAL_RCC_CSSCallback could be implemented in the user file\r\n    */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_RCC_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_rcc_ex.c\r\n * @author  MCD Application Team\r\n * @brief   Extended RCC HAL module driver.\r\n *          This file provides firmware functions to manage the following\r\n *          functionalities RCC extension peripheral:\r\n *           + Extended Peripheral Control functions\r\n *\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_RCC_MODULE_ENABLED\r\n\r\n/** @defgroup RCCEx RCCEx\r\n * @brief RCC Extension HAL module driver.\r\n * @{\r\n */\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup RCCEx_Private_Constants RCCEx Private Constants\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/** @defgroup RCCEx_Private_Macros RCCEx Private Macros\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n\r\n/** @defgroup RCCEx_Exported_Functions RCCEx Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup RCCEx_Exported_Functions_Group1 Peripheral Control functions\r\n  *  @brief  Extended Peripheral Control functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                ##### Extended Peripheral Control functions  #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the RCC Clocks\r\n    frequencies.\r\n    [..]\r\n    (@) Important note: Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to\r\n        select the RTC clock source; in this case the Backup domain will be reset in\r\n        order to modify the RTC Clock source, as consequence RTC registers (including\r\n        the backup registers) are set to their reset values.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initializes the RCC extended peripherals clocks according to the specified parameters in the\r\n *         RCC_PeriphCLKInitTypeDef.\r\n * @param  PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that\r\n *         contains the configuration information for the Extended Peripherals clocks(RTC clock).\r\n *\r\n * @note   Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select\r\n *         the RTC clock source; in this case the Backup domain will be reset in\r\n *         order to modify the RTC Clock source, as consequence RTC registers (including\r\n *         the backup registers) are set to their reset values.\r\n *\r\n * @note   In case of STM32F105xC or STM32F107xC devices, PLLI2S will be enabled if requested on\r\n *         one of 2 I2S interfaces. When PLLI2S is enabled, you need to call HAL_RCCEx_DisablePLLI2S to\r\n *         manually disable it.\r\n *\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) {\r\n  uint32_t tickstart = 0U, temp_reg = 0U;\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t pllactive = 0U;\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection));\r\n\r\n  /*------------------------------- RTC/LCD Configuration ------------------------*/\r\n  if ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)) {\r\n    /* check for RTC Parameters used to output RTCCLK */\r\n    assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection));\r\n\r\n    FlagStatus pwrclkchanged = RESET;\r\n\r\n    /* As soon as function is called to change RTC clock source, activation of the\r\n       power domain is done. */\r\n    /* Requires to enable write access to Backup Domain of necessary */\r\n    if (__HAL_RCC_PWR_IS_CLK_DISABLED()) {\r\n      __HAL_RCC_PWR_CLK_ENABLE();\r\n      pwrclkchanged = SET;\r\n    }\r\n\r\n    if (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) {\r\n      /* Enable write access to Backup domain */\r\n      SET_BIT(PWR->CR, PWR_CR_DBP);\r\n\r\n      /* Wait for Backup domain Write protection disable */\r\n      tickstart = HAL_GetTick();\r\n\r\n      while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) {\r\n        if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */\r\n    temp_reg = (RCC->BDCR & RCC_BDCR_RTCSEL);\r\n    if ((temp_reg != 0x00000000U) && (temp_reg != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) {\r\n      /* Store the content of BDCR register before the reset of Backup Domain */\r\n      temp_reg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL));\r\n      /* RTC Clock selection can be changed only if the Backup Domain is reset */\r\n      __HAL_RCC_BACKUPRESET_FORCE();\r\n      __HAL_RCC_BACKUPRESET_RELEASE();\r\n      /* Restore the Content of BDCR register */\r\n      RCC->BDCR = temp_reg;\r\n\r\n      /* Wait for LSERDY if LSE was enabled */\r\n      if (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSEON)) {\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till LSE is ready */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) {\r\n          if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection);\r\n\r\n    /* Require to disable power clock if necessary */\r\n    if (pwrclkchanged == SET) {\r\n      __HAL_RCC_PWR_CLK_DISABLE();\r\n    }\r\n  }\r\n\r\n  /*------------------------------ ADC clock Configuration ------------------*/\r\n  if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_ADCPLLCLK_DIV(PeriphClkInit->AdcClockSelection));\r\n\r\n    /* Configure the ADC clock source */\r\n    __HAL_RCC_ADC_CONFIG(PeriphClkInit->AdcClockSelection);\r\n  }\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  /*------------------------------ I2S2 Configuration ------------------------*/\r\n  if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_I2S2CLKSOURCE(PeriphClkInit->I2s2ClockSelection));\r\n\r\n    /* Configure the I2S2 clock source */\r\n    __HAL_RCC_I2S2_CONFIG(PeriphClkInit->I2s2ClockSelection);\r\n  }\r\n\r\n  /*------------------------------ I2S3 Configuration ------------------------*/\r\n  if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_I2S3CLKSOURCE(PeriphClkInit->I2s3ClockSelection));\r\n\r\n    /* Configure the I2S3 clock source */\r\n    __HAL_RCC_I2S3_CONFIG(PeriphClkInit->I2s3ClockSelection);\r\n  }\r\n\r\n  /*------------------------------ PLL I2S Configuration ----------------------*/\r\n  /* Check that PLLI2S need to be enabled */\r\n  if (HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_I2S2SRC) || HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_I2S3SRC)) {\r\n    /* Update flag to indicate that PLL I2S should be active */\r\n    pllactive = 1;\r\n  }\r\n\r\n  /* Check if PLL I2S need to be enabled */\r\n  if (pllactive == 1) {\r\n    /* Enable PLL I2S only if not active */\r\n    if (HAL_IS_BIT_CLR(RCC->CR, RCC_CR_PLL3ON)) {\r\n      /* Check the parameters */\r\n      assert_param(IS_RCC_PLLI2S_MUL(PeriphClkInit->PLLI2S.PLLI2SMUL));\r\n      assert_param(IS_RCC_HSE_PREDIV2(PeriphClkInit->PLLI2S.HSEPrediv2Value));\r\n\r\n      /* Prediv2 can be written only when the PLL2 is disabled. */\r\n      /* Return an error only if new value is different from the programmed value */\r\n      if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2ON) && (__HAL_RCC_HSE_GET_PREDIV2() != PeriphClkInit->PLLI2S.HSEPrediv2Value)) {\r\n        return HAL_ERROR;\r\n      }\r\n\r\n      /* Configure the HSE prediv2 factor --------------------------------*/\r\n      __HAL_RCC_HSE_PREDIV2_CONFIG(PeriphClkInit->PLLI2S.HSEPrediv2Value);\r\n\r\n      /* Configure the main PLLI2S multiplication factors. */\r\n      __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SMUL);\r\n\r\n      /* Enable the main PLLI2S. */\r\n      __HAL_RCC_PLLI2S_ENABLE();\r\n\r\n      /* Get Start Tick*/\r\n      tickstart = HAL_GetTick();\r\n\r\n      /* Wait till PLLI2S is ready */\r\n      while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) {\r\n        if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    } else {\r\n      /* Return an error only if user wants to change the PLLI2SMUL whereas PLLI2S is active */\r\n      if (READ_BIT(RCC->CFGR2, RCC_CFGR2_PLL3MUL) != PeriphClkInit->PLLI2S.PLLI2SMUL) {\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n  }\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  /*------------------------------ USB clock Configuration ------------------*/\r\n  if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_USBPLLCLK_DIV(PeriphClkInit->UsbClockSelection));\r\n\r\n    /* Configure the USB clock source */\r\n    __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection);\r\n  }\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Get the PeriphClkInit according to the internal\r\n * RCC configuration registers.\r\n * @param  PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that\r\n *         returns the configuration information for the Extended Peripherals clocks(RTC, I2S, ADC clocks).\r\n * @retval None\r\n */\r\nvoid HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) {\r\n  uint32_t srcclk = 0U;\r\n\r\n  /* Set all possible values for the extended clock type parameter------------*/\r\n  PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_RTC;\r\n\r\n  /* Get the RTC configuration -----------------------------------------------*/\r\n  srcclk = __HAL_RCC_GET_RTC_SOURCE();\r\n  /* Source clock is LSE or LSI*/\r\n  PeriphClkInit->RTCClockSelection = srcclk;\r\n\r\n  /* Get the ADC clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_ADC;\r\n  PeriphClkInit->AdcClockSelection = __HAL_RCC_GET_ADC_SOURCE();\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  /* Get the I2S2 clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S2;\r\n  PeriphClkInit->I2s2ClockSelection = __HAL_RCC_GET_I2S2_SOURCE();\r\n\r\n  /* Get the I2S3 clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S3;\r\n  PeriphClkInit->I2s3ClockSelection = __HAL_RCC_GET_I2S3_SOURCE();\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n  /* Get the I2S2 clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S2;\r\n  PeriphClkInit->I2s2ClockSelection = RCC_I2S2CLKSOURCE_SYSCLK;\r\n\r\n  /* Get the I2S3 clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S3;\r\n  PeriphClkInit->I2s3ClockSelection = RCC_I2S3CLKSOURCE_SYSCLK;\r\n\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  /* Get the USB clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_USB;\r\n  PeriphClkInit->UsbClockSelection = __HAL_RCC_GET_USB_SOURCE();\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n}\r\n\r\n/**\r\n  * @brief  Returns the peripheral clock frequency\r\n  * @note   Returns 0 if peripheral clock is unknown\r\n  * @param  PeriphClk Peripheral clock identifier\r\n  *         This parameter can be one of the following values:\r\n  *            @arg @ref RCC_PERIPHCLK_RTC  RTC peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_ADC  ADC peripheral clock\r\n  @if STM32F103xE\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  @endif\r\n  @if STM32F103xG\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  @endif\r\n  @if STM32F105xC\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_USB  USB peripheral clock\r\n  @endif\r\n  @if STM32F107xC\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_USB  USB peripheral clock\r\n  @endif\r\n  @if STM32F102xx\r\n  *            @arg @ref RCC_PERIPHCLK_USB  USB peripheral clock\r\n  @endif\r\n  @if STM32F103xx\r\n  *            @arg @ref RCC_PERIPHCLK_USB  USB peripheral clock\r\n  @endif\r\n  * @retval Frequency in Hz (0: means that no available frequency for the peripheral)\r\n  */\r\nuint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) {\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  const uint8_t aPLLMULFactorTable[14] = {0, 0, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 13};\r\n  const uint8_t aPredivFactorTable[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};\r\n\r\n  uint32_t prediv1 = 0U, pllclk = 0U, pllmul = 0U;\r\n  uint32_t pll2mul = 0U, pll3mul = 0U, prediv2 = 0U;\r\n#endif /* STM32F105xC || STM32F107xC */\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n  const uint8_t aPLLMULFactorTable[16] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16};\r\n  const uint8_t aPredivFactorTable[2]  = {1, 2};\r\n\r\n  uint32_t prediv1 = 0U, pllclk = 0U, pllmul = 0U;\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n  uint32_t temp_reg = 0U, frequency = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_PERIPHCLOCK(PeriphClk));\r\n\r\n  switch (PeriphClk) {\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  case RCC_PERIPHCLK_USB: {\r\n    /* Get RCC configuration ------------------------------------------------------*/\r\n    temp_reg = RCC->CFGR;\r\n\r\n    /* Check if PLL is enabled */\r\n    if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLON)) {\r\n      pllmul = aPLLMULFactorTable[(uint32_t)(temp_reg & RCC_CFGR_PLLMULL) >> RCC_CFGR_PLLMULL_Pos];\r\n      if ((temp_reg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) {\r\n#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB) || defined(STM32F100xE)\r\n        prediv1 = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV1) >> RCC_CFGR2_PREDIV1_Pos];\r\n#else\r\n        prediv1 = aPredivFactorTable[(uint32_t)(RCC->CFGR & RCC_CFGR_PLLXTPRE) >> RCC_CFGR_PLLXTPRE_Pos];\r\n#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n        if (HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) {\r\n          /* PLL2 selected as Prediv1 source */\r\n          /* PLLCLK = PLL2CLK / PREDIV1 * PLLMUL with PLL2CLK = HSE/PREDIV2 * PLL2MUL */\r\n          prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1;\r\n          pll2mul = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> RCC_CFGR2_PLL2MUL_Pos) + 2;\r\n          pllclk  = (uint32_t)((((HSE_VALUE / prediv2) * pll2mul) / prediv1) * pllmul);\r\n        } else {\r\n          /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */\r\n          pllclk = (uint32_t)((HSE_VALUE / prediv1) * pllmul);\r\n        }\r\n\r\n        /* If PLLMUL was set to 13 means that it was to cover the case PLLMUL 6.5 (avoid using float) */\r\n        /* In this case need to divide pllclk by 2 */\r\n        if (pllmul == aPLLMULFactorTable[(uint32_t)(RCC_CFGR_PLLMULL6_5) >> RCC_CFGR_PLLMULL_Pos]) {\r\n          pllclk = pllclk / 2;\r\n        }\r\n#else\r\n        if ((temp_reg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) {\r\n          /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */\r\n          pllclk = (uint32_t)((HSE_VALUE / prediv1) * pllmul);\r\n        }\r\n#endif /* STM32F105xC || STM32F107xC */\r\n      } else {\r\n        /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */\r\n        pllclk = (uint32_t)((HSI_VALUE >> 1) * pllmul);\r\n      }\r\n\r\n      /* Calcul of the USB frequency*/\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n      /* USBCLK = PLLVCO = (2 x PLLCLK) / USB prescaler */\r\n      if (__HAL_RCC_GET_USB_SOURCE() == RCC_USBCLKSOURCE_PLL_DIV2) {\r\n        /* Prescaler of 2 selected for USB */\r\n        frequency = pllclk;\r\n      } else {\r\n        /* Prescaler of 3 selected for USB */\r\n        frequency = (2 * pllclk) / 3;\r\n      }\r\n#else\r\n      /* USBCLK = PLLCLK / USB prescaler */\r\n      if (__HAL_RCC_GET_USB_SOURCE() == RCC_USBCLKSOURCE_PLL) {\r\n        /* No prescaler selected for USB */\r\n        frequency = pllclk;\r\n      } else {\r\n        /* Prescaler of 1.5 selected for USB */\r\n        frequency = (pllclk * 2) / 3;\r\n      }\r\n#endif\r\n    }\r\n    break;\r\n  }\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  case RCC_PERIPHCLK_I2S2: {\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n    /* SYSCLK used as source clock for I2S2 */\r\n    frequency = HAL_RCC_GetSysClockFreq();\r\n#else\r\n    if (__HAL_RCC_GET_I2S2_SOURCE() == RCC_I2S2CLKSOURCE_SYSCLK) {\r\n      /* SYSCLK used as source clock for I2S2 */\r\n      frequency = HAL_RCC_GetSysClockFreq();\r\n    } else {\r\n      /* Check if PLLI2S is enabled */\r\n      if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON)) {\r\n        /* PLLI2SVCO = 2 * PLLI2SCLK = 2 * (HSE/PREDIV2 * PLL3MUL) */\r\n        prediv2   = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1;\r\n        pll3mul   = ((RCC->CFGR2 & RCC_CFGR2_PLL3MUL) >> RCC_CFGR2_PLL3MUL_Pos) + 2;\r\n        frequency = (uint32_t)(2 * ((HSE_VALUE / prediv2) * pll3mul));\r\n      }\r\n    }\r\n#endif /* STM32F103xE || STM32F103xG */\r\n    break;\r\n  }\r\n  case RCC_PERIPHCLK_I2S3: {\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n    /* SYSCLK used as source clock for I2S3 */\r\n    frequency = HAL_RCC_GetSysClockFreq();\r\n#else\r\n    if (__HAL_RCC_GET_I2S3_SOURCE() == RCC_I2S3CLKSOURCE_SYSCLK) {\r\n      /* SYSCLK used as source clock for I2S3 */\r\n      frequency = HAL_RCC_GetSysClockFreq();\r\n    } else {\r\n      /* Check if PLLI2S is enabled */\r\n      if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON)) {\r\n        /* PLLI2SVCO = 2 * PLLI2SCLK = 2 * (HSE/PREDIV2 * PLL3MUL) */\r\n        prediv2   = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1;\r\n        pll3mul   = ((RCC->CFGR2 & RCC_CFGR2_PLL3MUL) >> RCC_CFGR2_PLL3MUL_Pos) + 2;\r\n        frequency = (uint32_t)(2 * ((HSE_VALUE / prediv2) * pll3mul));\r\n      }\r\n    }\r\n#endif /* STM32F103xE || STM32F103xG */\r\n    break;\r\n  }\r\n#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n  case RCC_PERIPHCLK_RTC: {\r\n    /* Get RCC BDCR configuration ------------------------------------------------------*/\r\n    temp_reg = RCC->BDCR;\r\n\r\n    /* Check if LSE is ready if RTC clock selection is LSE */\r\n    if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_LSE) && (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSERDY))) {\r\n      frequency = LSE_VALUE;\r\n    }\r\n    /* Check if LSI is ready if RTC clock selection is LSI */\r\n    else if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_LSI) && (HAL_IS_BIT_SET(RCC->CSR, RCC_CSR_LSIRDY))) {\r\n      frequency = LSI_VALUE;\r\n    } else if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_HSE_DIV128) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))) {\r\n      frequency = HSE_VALUE / 128U;\r\n    }\r\n    /* Clock not enabled for RTC*/\r\n    else {\r\n      frequency = 0U;\r\n    }\r\n    break;\r\n  }\r\n  case RCC_PERIPHCLK_ADC: {\r\n    frequency = HAL_RCC_GetPCLK2Freq() / (((__HAL_RCC_GET_ADC_SOURCE() >> RCC_CFGR_ADCPRE_Pos) + 1) * 2);\r\n    break;\r\n  }\r\n  default: {\r\n    break;\r\n  }\r\n  }\r\n  return (frequency);\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_Exported_Functions_Group2 PLLI2S Management function\r\n  *  @brief  PLLI2S Management functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                ##### Extended PLLI2S Management functions  #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the PLLI2S\r\n    activation or deactivation\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Enable PLLI2S\r\n * @param  PLLI2SInit pointer to an RCC_PLLI2SInitTypeDef structure that\r\n *         contains the configuration information for the PLLI2S\r\n * @note   The PLLI2S configuration not modified if used by I2S2 or I2S3 Interface.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_EnablePLLI2S(RCC_PLLI2SInitTypeDef *PLLI2SInit) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Check that PLL I2S has not been already enabled by I2S2 or I2S3*/\r\n  if (HAL_IS_BIT_CLR(RCC->CFGR2, RCC_CFGR2_I2S2SRC) && HAL_IS_BIT_CLR(RCC->CFGR2, RCC_CFGR2_I2S3SRC)) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_PLLI2S_MUL(PLLI2SInit->PLLI2SMUL));\r\n    assert_param(IS_RCC_HSE_PREDIV2(PLLI2SInit->HSEPrediv2Value));\r\n\r\n    /* Prediv2 can be written only when the PLL2 is disabled. */\r\n    /* Return an error only if new value is different from the programmed value */\r\n    if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2ON) && (__HAL_RCC_HSE_GET_PREDIV2() != PLLI2SInit->HSEPrediv2Value)) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Disable the main PLLI2S. */\r\n    __HAL_RCC_PLLI2S_DISABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLLI2S is ready */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n\r\n    /* Configure the HSE prediv2 factor --------------------------------*/\r\n    __HAL_RCC_HSE_PREDIV2_CONFIG(PLLI2SInit->HSEPrediv2Value);\r\n\r\n    /* Configure the main PLLI2S multiplication factors. */\r\n    __HAL_RCC_PLLI2S_CONFIG(PLLI2SInit->PLLI2SMUL);\r\n\r\n    /* Enable the main PLLI2S. */\r\n    __HAL_RCC_PLLI2S_ENABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLLI2S is ready */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  } else {\r\n    /* PLLI2S cannot be modified as already used by I2S2 or I2S3 */\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Disable PLLI2S\r\n * @note   PLLI2S is not disabled if used by I2S2 or I2S3 Interface.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_DisablePLLI2S(void) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Disable PLL I2S as not requested by I2S2 or I2S3*/\r\n  if (HAL_IS_BIT_CLR(RCC->CFGR2, RCC_CFGR2_I2S2SRC) && HAL_IS_BIT_CLR(RCC->CFGR2, RCC_CFGR2_I2S3SRC)) {\r\n    /* Disable the main PLLI2S. */\r\n    __HAL_RCC_PLLI2S_DISABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLLI2S is ready */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  } else {\r\n    /* PLLI2S is currently used by I2S2 or I2S3. Cannot be disabled.*/\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_Exported_Functions_Group3 PLL2 Management function\r\n  *  @brief  PLL2 Management functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                ##### Extended PLL2 Management functions  #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the PLL2\r\n    activation or deactivation\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Enable PLL2\r\n * @param  PLL2Init pointer to an RCC_PLL2InitTypeDef structure that\r\n *         contains the configuration information for the PLL2\r\n * @note   The PLL2 configuration not modified if used indirectly as system clock.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_EnablePLL2(RCC_PLL2InitTypeDef *PLL2Init) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* This bit can not be cleared if the PLL2 clock is used indirectly as system\r\n    clock (i.e. it is used as PLL clock entry that is used as system clock). */\r\n  if ((__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE) && (__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) &&\r\n      ((READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) == RCC_CFGR2_PREDIV1SRC_PLL2)) {\r\n    return HAL_ERROR;\r\n  } else {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_PLL2_MUL(PLL2Init->PLL2MUL));\r\n    assert_param(IS_RCC_HSE_PREDIV2(PLL2Init->HSEPrediv2Value));\r\n\r\n    /* Prediv2 can be written only when the PLLI2S is disabled. */\r\n    /* Return an error only if new value is different from the programmed value */\r\n    if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON) && (__HAL_RCC_HSE_GET_PREDIV2() != PLL2Init->HSEPrediv2Value)) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Disable the main PLL2. */\r\n    __HAL_RCC_PLL2_DISABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLL2 is disabled */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n\r\n    /* Configure the HSE prediv2 factor --------------------------------*/\r\n    __HAL_RCC_HSE_PREDIV2_CONFIG(PLL2Init->HSEPrediv2Value);\r\n\r\n    /* Configure the main PLL2 multiplication factors. */\r\n    __HAL_RCC_PLL2_CONFIG(PLL2Init->PLL2MUL);\r\n\r\n    /* Enable the main PLL2. */\r\n    __HAL_RCC_PLL2_ENABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLL2 is ready */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Disable PLL2\r\n * @note   PLL2 is not disabled if used indirectly as system clock.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_DisablePLL2(void) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* This bit can not be cleared if the PLL2 clock is used indirectly as system\r\n    clock (i.e. it is used as PLL clock entry that is used as system clock). */\r\n  if ((__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE) && (__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) &&\r\n      ((READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) == RCC_CFGR2_PREDIV1SRC_PLL2)) {\r\n    return HAL_ERROR;\r\n  } else {\r\n    /* Disable the main PLL2. */\r\n    __HAL_RCC_PLL2_DISABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLL2 is disabled */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_RCC_MODULE_ENABLED */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_tim.c\r\n  * @author  MCD Application Team\r\n  * @brief   TIM HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the Timer (TIM) peripheral:\r\n  *           + TIM Time Base Initialization\r\n  *           + TIM Time Base Start\r\n  *           + TIM Time Base Start Interruption\r\n  *           + TIM Time Base Start DMA\r\n  *           + TIM Output Compare/PWM Initialization\r\n  *           + TIM Output Compare/PWM Channel Configuration\r\n  *           + TIM Output Compare/PWM  Start\r\n  *           + TIM Output Compare/PWM  Start Interruption\r\n  *           + TIM Output Compare/PWM Start DMA\r\n  *           + TIM Input Capture Initialization\r\n  *           + TIM Input Capture Channel Configuration\r\n  *           + TIM Input Capture Start\r\n  *           + TIM Input Capture Start Interruption\r\n  *           + TIM Input Capture Start DMA\r\n  *           + TIM One Pulse Initialization\r\n  *           + TIM One Pulse Channel Configuration\r\n  *           + TIM One Pulse Start\r\n  *           + TIM Encoder Interface Initialization\r\n  *           + TIM Encoder Interface Start\r\n  *           + TIM Encoder Interface Start Interruption\r\n  *           + TIM Encoder Interface Start DMA\r\n  *           + Commutation Event configuration with Interruption and DMA\r\n  *           + TIM OCRef clear configuration\r\n  *           + TIM External Clock configuration\r\n  @verbatim\r\n  ==============================================================================\r\n                      ##### TIMER Generic features #####\r\n  ==============================================================================\r\n  [..] The Timer features include:\r\n       (#) 16-bit up, down, up/down auto-reload counter.\r\n       (#) 16-bit programmable prescaler allowing dividing (also on the fly) the\r\n           counter clock frequency either by any factor between 1 and 65536.\r\n       (#) Up to 4 independent channels for:\r\n           (++) Input Capture\r\n           (++) Output Compare\r\n           (++) PWM generation (Edge and Center-aligned Mode)\r\n           (++) One-pulse mode output\r\n       (#) Synchronization circuit to control the timer with external signals and to interconnect\r\n            several timers together.\r\n       (#) Supports incremental encoder for positioning purposes\r\n\r\n            ##### How to use this driver #####\r\n  ==============================================================================\r\n    [..]\r\n     (#) Initialize the TIM low level resources by implementing the following functions\r\n         depending on the selected feature:\r\n           (++) Time Base : HAL_TIM_Base_MspInit()\r\n           (++) Input Capture : HAL_TIM_IC_MspInit()\r\n           (++) Output Compare : HAL_TIM_OC_MspInit()\r\n           (++) PWM generation : HAL_TIM_PWM_MspInit()\r\n           (++) One-pulse mode output : HAL_TIM_OnePulse_MspInit()\r\n           (++) Encoder mode output : HAL_TIM_Encoder_MspInit()\r\n\r\n     (#) Initialize the TIM low level resources :\r\n        (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE();\r\n        (##) TIM pins configuration\r\n            (+++) Enable the clock for the TIM GPIOs using the following function:\r\n             __HAL_RCC_GPIOx_CLK_ENABLE();\r\n            (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init();\r\n\r\n     (#) The external Clock can be configured, if needed (the default clock is the\r\n         internal clock from the APBx), using the following function:\r\n         HAL_TIM_ConfigClockSource, the clock configuration should be done before\r\n         any start function.\r\n\r\n     (#) Configure the TIM in the desired functioning mode using one of the\r\n       Initialization function of this driver:\r\n       (++) HAL_TIM_Base_Init: to use the Timer to generate a simple time base\r\n       (++) HAL_TIM_OC_Init and HAL_TIM_OC_ConfigChannel: to use the Timer to generate an\r\n            Output Compare signal.\r\n       (++) HAL_TIM_PWM_Init and HAL_TIM_PWM_ConfigChannel: to use the Timer to generate a\r\n            PWM signal.\r\n       (++) HAL_TIM_IC_Init and HAL_TIM_IC_ConfigChannel: to use the Timer to measure an\r\n            external signal.\r\n       (++) HAL_TIM_OnePulse_Init and HAL_TIM_OnePulse_ConfigChannel: to use the Timer\r\n            in One Pulse Mode.\r\n       (++) HAL_TIM_Encoder_Init: to use the Timer Encoder Interface.\r\n\r\n     (#) Activate the TIM peripheral using one of the start functions depending from the feature used:\r\n           (++) Time Base : HAL_TIM_Base_Start(), HAL_TIM_Base_Start_DMA(), HAL_TIM_Base_Start_IT()\r\n           (++) Input Capture :  HAL_TIM_IC_Start(), HAL_TIM_IC_Start_DMA(), HAL_TIM_IC_Start_IT()\r\n           (++) Output Compare : HAL_TIM_OC_Start(), HAL_TIM_OC_Start_DMA(), HAL_TIM_OC_Start_IT()\r\n           (++) PWM generation : HAL_TIM_PWM_Start(), HAL_TIM_PWM_Start_DMA(), HAL_TIM_PWM_Start_IT()\r\n           (++) One-pulse mode output : HAL_TIM_OnePulse_Start(), HAL_TIM_OnePulse_Start_IT()\r\n           (++) Encoder mode output : HAL_TIM_Encoder_Start(), HAL_TIM_Encoder_Start_DMA(), HAL_TIM_Encoder_Start_IT().\r\n\r\n     (#) The DMA Burst is managed with the two following functions:\r\n         HAL_TIM_DMABurst_WriteStart()\r\n         HAL_TIM_DMABurst_ReadStart()\r\n\r\n    *** Callback registration ***\r\n  =============================================\r\n\r\n  [..]\r\n  The compilation define  USE_HAL_TIM_REGISTER_CALLBACKS when set to 1\r\n  allows the user to configure dynamically the driver callbacks.\r\n\r\n  [..]\r\n  Use Function @ref HAL_TIM_RegisterCallback() to register a callback.\r\n  @ref HAL_TIM_RegisterCallback() takes as parameters the HAL peripheral handle,\r\n  the Callback ID and a pointer to the user callback function.\r\n\r\n  [..]\r\n  Use function @ref HAL_TIM_UnRegisterCallback() to reset a callback to the default\r\n  weak function.\r\n  @ref HAL_TIM_UnRegisterCallback takes as parameters the HAL peripheral handle,\r\n  and the Callback ID.\r\n\r\n  [..]\r\n  These functions allow to register/unregister following callbacks:\r\n    (+) Base_MspInitCallback              : TIM Base Msp Init Callback.\r\n    (+) Base_MspDeInitCallback            : TIM Base Msp DeInit Callback.\r\n    (+) IC_MspInitCallback                : TIM IC Msp Init Callback.\r\n    (+) IC_MspDeInitCallback              : TIM IC Msp DeInit Callback.\r\n    (+) OC_MspInitCallback                : TIM OC Msp Init Callback.\r\n    (+) OC_MspDeInitCallback              : TIM OC Msp DeInit Callback.\r\n    (+) PWM_MspInitCallback               : TIM PWM Msp Init Callback.\r\n    (+) PWM_MspDeInitCallback             : TIM PWM Msp DeInit Callback.\r\n    (+) OnePulse_MspInitCallback          : TIM One Pulse Msp Init Callback.\r\n    (+) OnePulse_MspDeInitCallback        : TIM One Pulse Msp DeInit Callback.\r\n    (+) Encoder_MspInitCallback           : TIM Encoder Msp Init Callback.\r\n    (+) Encoder_MspDeInitCallback         : TIM Encoder Msp DeInit Callback.\r\n    (+) HallSensor_MspInitCallback        : TIM Hall Sensor Msp Init Callback.\r\n    (+) HallSensor_MspDeInitCallback      : TIM Hall Sensor Msp DeInit Callback.\r\n    (+) PeriodElapsedCallback             : TIM Period Elapsed Callback.\r\n    (+) PeriodElapsedHalfCpltCallback     : TIM Period Elapsed half complete Callback.\r\n    (+) TriggerCallback                   : TIM Trigger Callback.\r\n    (+) TriggerHalfCpltCallback           : TIM Trigger half complete Callback.\r\n    (+) IC_CaptureCallback                : TIM Input Capture Callback.\r\n    (+) IC_CaptureHalfCpltCallback        : TIM Input Capture half complete Callback.\r\n    (+) OC_DelayElapsedCallback           : TIM Output Compare Delay Elapsed Callback.\r\n    (+) PWM_PulseFinishedCallback         : TIM PWM Pulse Finished Callback.\r\n    (+) PWM_PulseFinishedHalfCpltCallback : TIM PWM Pulse Finished half complete Callback.\r\n    (+) ErrorCallback                     : TIM Error Callback.\r\n    (+) CommutationCallback               : TIM Commutation Callback.\r\n    (+) CommutationHalfCpltCallback       : TIM Commutation half complete Callback.\r\n    (+) BreakCallback                     : TIM Break Callback.\r\n\r\n  [..]\r\nBy default, after the Init and when the state is HAL_TIM_STATE_RESET\r\nall interrupt callbacks are set to the corresponding weak functions:\r\n  examples @ref HAL_TIM_TriggerCallback(), @ref HAL_TIM_ErrorCallback().\r\n\r\n  [..]\r\n  Exception done for MspInit and MspDeInit functions that are reset to the legacy weak\r\n  functionalities in the Init / DeInit only when these callbacks are null\r\n  (not registered beforehand). If not, MspInit or MspDeInit are not null, the Init / DeInit\r\n    keep and use the user MspInit / MspDeInit callbacks(registered beforehand)\r\n\r\n  [..]\r\n    Callbacks can be registered / unregistered in HAL_TIM_STATE_READY state only.\r\n    Exception done MspInit / MspDeInit that can be registered / unregistered\r\n    in HAL_TIM_STATE_READY or HAL_TIM_STATE_RESET state,\r\n    thus registered(user) MspInit / DeInit callbacks can be used during the Init / DeInit.\r\n  In that case first register the MspInit/MspDeInit user callbacks\r\n      using @ref HAL_TIM_RegisterCallback() before calling DeInit or Init function.\r\n\r\n  [..]\r\n      When The compilation define USE_HAL_TIM_REGISTER_CALLBACKS is set to 0 or\r\n      not defined, the callback registration feature is not available and all callbacks\r\n      are set to the corresponding weak functions.\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup TIM TIM\r\n * @brief TIM HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_TIM_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/* Private macros ------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @addtogroup TIM_Private_Functions\r\n * @{\r\n */\r\nstatic void              TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);\r\nstatic void              TIM_OC3_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);\r\nstatic void              TIM_OC4_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);\r\nstatic void              TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter);\r\nstatic void              TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);\r\nstatic void              TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter);\r\nstatic void              TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);\r\nstatic void              TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);\r\nstatic void              TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource);\r\nstatic void              TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma);\r\nstatic void              TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma);\r\nstatic void              TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma);\r\nstatic void              TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma);\r\nstatic void              TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma);\r\nstatic HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);\r\n/**\r\n * @}\r\n */\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @defgroup TIM_Exported_Functions TIM Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group1 TIM Time Base functions\r\n  *  @brief    Time Base functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n              ##### Time Base functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure the TIM base.\r\n    (+) De-initialize the TIM base.\r\n    (+) Start the Time Base.\r\n    (+) Stop the Time Base.\r\n    (+) Start the Time Base and enable interrupt.\r\n    (+) Stop the Time Base and disable interrupt.\r\n    (+) Start the Time Base and enable DMA transfer.\r\n    (+) Stop the Time Base and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM Time base Unit according to the specified\r\n *         parameters in the TIM_HandleTypeDef and initialize the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init()\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim) {\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->Base_MspInitCallback == NULL) {\r\n      htim->Base_MspInitCallback = HAL_TIM_Base_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->Base_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    HAL_TIM_Base_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Set the Time Base configuration */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM Base peripheral\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->Base_MspDeInitCallback == NULL) {\r\n    htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->Base_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */\r\n  HAL_TIM_Base_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Change the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Base MSP.\r\n * @param  htim TIM Base handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_Base_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM Base MSP.\r\n * @param  htim TIM Base handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_Base_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Base generation.\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  /* Check the TIM state */\r\n  if (htim->State != HAL_TIM_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Base generation.\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Base generation in interrupt mode.\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  /* Check the TIM state */\r\n  if (htim->State != HAL_TIM_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Enable the TIM Update interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Base generation in interrupt mode.\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the TIM Update interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_UPDATE);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Base generation in DMA mode.\r\n * @param  htim TIM Base handle\r\n * @param  pData The source Buffer address.\r\n * @param  Length The length of data to be transferred from memory to peripheral.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM state */\r\n  if (htim->State == HAL_TIM_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (htim->State == HAL_TIM_STATE_READY) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      htim->State = HAL_TIM_STATE_BUSY;\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the DMA Period elapsed callbacks */\r\n  htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback     = TIM_DMAPeriodElapsedCplt;\r\n  htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt;\r\n\r\n  /* Set the DMA error callback */\r\n  htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError;\r\n\r\n  /* Enable the DMA channel */\r\n  if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)pData, (uint32_t)&htim->Instance->ARR, Length) != HAL_OK) {\r\n    /* Return error status */\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Enable the TIM Update DMA request */\r\n  __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_UPDATE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Base generation in DMA mode.\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the TIM Update DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_UPDATE);\r\n\r\n  (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group2 TIM Output Compare functions\r\n  *  @brief    TIM Output Compare functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                  ##### TIM Output Compare functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure the TIM Output Compare.\r\n    (+) De-initialize the TIM Output Compare.\r\n    (+) Start the TIM Output Compare.\r\n    (+) Stop the TIM Output Compare.\r\n    (+) Start the TIM Output Compare and enable interrupt.\r\n    (+) Stop the TIM Output Compare and disable interrupt.\r\n    (+) Start the TIM Output Compare and enable DMA transfer.\r\n    (+) Stop the TIM Output Compare and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM Output Compare according to the specified\r\n *         parameters in the TIM_HandleTypeDef and initializes the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_OC_DeInit() before HAL_TIM_OC_Init()\r\n * @param  htim TIM Output Compare handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim) {\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->OC_MspInitCallback == NULL) {\r\n      htim->OC_MspInitCallback = HAL_TIM_OC_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->OC_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIM_OC_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Init the base time for the Output Compare */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM peripheral\r\n * @param  htim TIM Output Compare handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->OC_MspDeInitCallback == NULL) {\r\n    htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->OC_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */\r\n  HAL_TIM_OC_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Change the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Output Compare MSP.\r\n * @param  htim TIM Output Compare handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_OC_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM Output Compare MSP.\r\n * @param  htim TIM Output Compare handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_OC_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Disable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation in interrupt mode.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Enable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Enable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Enable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Enable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation in interrupt mode.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation in DMA mode.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  pData The source Buffer address.\r\n * @param  Length The length of data to be transferred from memory to TIM peripheral\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Set the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Enable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Enable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 3 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 4 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation in DMA mode.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group3 TIM PWM functions\r\n  *  @brief    TIM PWM functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                          ##### TIM PWM functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure the TIM PWM.\r\n    (+) De-initialize the TIM PWM.\r\n    (+) Start the TIM PWM.\r\n    (+) Stop the TIM PWM.\r\n    (+) Start the TIM PWM and enable interrupt.\r\n    (+) Stop the TIM PWM and disable interrupt.\r\n    (+) Start the TIM PWM and enable DMA transfer.\r\n    (+) Stop the TIM PWM and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM PWM Time Base according to the specified\r\n *         parameters in the TIM_HandleTypeDef and initializes the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_PWM_DeInit() before HAL_TIM_PWM_Init()\r\n * @param  htim TIM PWM handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim) {\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->PWM_MspInitCallback == NULL) {\r\n      htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->PWM_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIM_PWM_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Init the base time for the PWM */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM peripheral\r\n * @param  htim TIM PWM handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->PWM_MspDeInitCallback == NULL) {\r\n    htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->PWM_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */\r\n  HAL_TIM_PWM_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Change the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM PWM MSP.\r\n * @param  htim TIM PWM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PWM_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM PWM MSP.\r\n * @param  htim TIM PWM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PWM_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the PWM signal generation.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  // if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n  //   /* Enable the main output */\r\n  //   __HAL_TIM_MOE_ENABLE(htim);\r\n  // }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the PWM signal generation.\r\n * @param  htim TIM PWM handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Disable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the PWM signal generation in interrupt mode.\r\n * @param  htim TIM PWM handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Enable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Enable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Enable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Enable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the PWM signal generation in interrupt mode.\r\n * @param  htim TIM PWM handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM PWM signal generation in DMA mode.\r\n * @param  htim TIM PWM handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  pData The source Buffer address.\r\n * @param  Length The length of data to be transferred from memory to TIM peripheral\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Set the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Enable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Output Capture/Compare 3 request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 4 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM PWM signal generation in DMA mode.\r\n * @param  htim TIM PWM handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group4 TIM Input Capture functions\r\n  *  @brief    TIM Input Capture functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n              ##### TIM Input Capture functions #####\r\n  ==============================================================================\r\n [..]\r\n   This section provides functions allowing to:\r\n   (+) Initialize and configure the TIM Input Capture.\r\n   (+) De-initialize the TIM Input Capture.\r\n   (+) Start the TIM Input Capture.\r\n   (+) Stop the TIM Input Capture.\r\n   (+) Start the TIM Input Capture and enable interrupt.\r\n   (+) Stop the TIM Input Capture and disable interrupt.\r\n   (+) Start the TIM Input Capture and enable DMA transfer.\r\n   (+) Stop the TIM Input Capture and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM Input Capture Time base according to the specified\r\n *         parameters in the TIM_HandleTypeDef and initializes the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_IC_DeInit() before HAL_TIM_IC_Init()\r\n * @param  htim TIM Input Capture handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim) {\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->IC_MspInitCallback == NULL) {\r\n      htim->IC_MspInitCallback = HAL_TIM_IC_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->IC_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIM_IC_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Init the base time for the input capture */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM peripheral\r\n * @param  htim TIM Input Capture handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->IC_MspDeInitCallback == NULL) {\r\n    htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->IC_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */\r\n  HAL_TIM_IC_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Change the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Input Capture MSP.\r\n * @param  htim TIM Input Capture handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_IC_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM Input Capture MSP.\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_IC_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Input Capture measurement.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_state               = TIM_CHANNEL_STATE_GET(htim, Channel);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if ((channel_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Input Capture measurement.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Disable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Input Capture measurement in interrupt mode.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_state               = TIM_CHANNEL_STATE_GET(htim, Channel);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if ((channel_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Enable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Enable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Enable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Enable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n  /* Enable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Input Capture measurement in interrupt mode.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Input Capture measurement in DMA mode.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  pData The destination Buffer address.\r\n * @param  Length The length of data to be transferred from TIM peripheral to memory.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_state               = TIM_CHANNEL_STATE_GET(htim, Channel);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n  assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM channel state */\r\n  if ((channel_state == HAL_TIM_CHANNEL_STATE_BUSY) || (complementary_channel_state == HAL_TIM_CHANNEL_STATE_BUSY)) {\r\n    return HAL_BUSY;\r\n  } else if ((channel_state == HAL_TIM_CHANNEL_STATE_READY) && (complementary_channel_state == HAL_TIM_CHANNEL_STATE_READY)) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 2  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->CCR3, (uint32_t)pData, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 3  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->CCR4, (uint32_t)pData, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 4  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Input Capture measurement in DMA mode.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n  assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3  DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4  DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group5 TIM One Pulse functions\r\n  *  @brief    TIM One Pulse functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                        ##### TIM One Pulse functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure the TIM One Pulse.\r\n    (+) De-initialize the TIM One Pulse.\r\n    (+) Start the TIM One Pulse.\r\n    (+) Stop the TIM One Pulse.\r\n    (+) Start the TIM One Pulse and enable interrupt.\r\n    (+) Stop the TIM One Pulse and disable interrupt.\r\n    (+) Start the TIM One Pulse and enable DMA transfer.\r\n    (+) Stop the TIM One Pulse and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM One Pulse Time Base according to the specified\r\n *         parameters in the TIM_HandleTypeDef and initializes the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_OnePulse_DeInit() before HAL_TIM_OnePulse_Init()\r\n * @note   When the timer instance is initialized in One Pulse mode, timer\r\n *         channels 1 and channel 2 are reserved and cannot be used for other\r\n *         purpose.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OnePulseMode Select the One pulse mode.\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_OPMODE_SINGLE: Only one pulse will be generated.\r\n *            @arg TIM_OPMODE_REPETITIVE: Repetitive pulses will be generated.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode) {\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_OPM_MODE(OnePulseMode));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->OnePulse_MspInitCallback == NULL) {\r\n      htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->OnePulse_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIM_OnePulse_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Configure the Time base in the One Pulse Mode */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Reset the OPM Bit */\r\n  htim->Instance->CR1 &= ~TIM_CR1_OPM;\r\n\r\n  /* Configure the OPM Mode */\r\n  htim->Instance->CR1 |= OnePulseMode;\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM One Pulse\r\n * @param  htim TIM One Pulse handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->OnePulse_MspDeInitCallback == NULL) {\r\n    htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->OnePulse_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */\r\n  HAL_TIM_OnePulse_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM One Pulse MSP.\r\n * @param  htim TIM One Pulse handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_OnePulse_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM One Pulse MSP.\r\n * @param  htim TIM One Pulse handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_OnePulse_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM One Pulse signal generation.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(OutputChannel);\r\n\r\n  /* Check the TIM channels state */\r\n  if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n      (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Capture compare and the Input Capture channels\r\n    (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)\r\n    if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and\r\n    if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output\r\n    in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together\r\n\r\n    No need to enable the counter, it's enabled automatically by hardware\r\n    (the counter starts in response to a stimulus and generate a pulse */\r\n\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM One Pulse signal generation.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channels to be disable\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(OutputChannel);\r\n\r\n  /* Disable the Capture compare and the Input Capture channels\r\n  (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)\r\n  if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and\r\n  if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output\r\n  in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */\r\n\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM One Pulse signal generation in interrupt mode.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(OutputChannel);\r\n\r\n  /* Check the TIM channels state */\r\n  if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n      (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Capture compare and the Input Capture channels\r\n    (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)\r\n    if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and\r\n    if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output\r\n    in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together\r\n\r\n    No need to enable the counter, it's enabled automatically by hardware\r\n    (the counter starts in response to a stimulus and generate a pulse */\r\n\r\n  /* Enable the TIM Capture/Compare 1 interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Enable the TIM Capture/Compare 2 interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM One Pulse signal generation in interrupt mode.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(OutputChannel);\r\n\r\n  /* Disable the TIM Capture/Compare 1 interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Disable the TIM Capture/Compare 2 interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n\r\n  /* Disable the Capture compare and the Input Capture channels\r\n  (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)\r\n  if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and\r\n  if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output\r\n  in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group6 TIM Encoder functions\r\n  *  @brief    TIM Encoder functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                          ##### TIM Encoder functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure the TIM Encoder.\r\n    (+) De-initialize the TIM Encoder.\r\n    (+) Start the TIM Encoder.\r\n    (+) Stop the TIM Encoder.\r\n    (+) Start the TIM Encoder and enable interrupt.\r\n    (+) Stop the TIM Encoder and disable interrupt.\r\n    (+) Start the TIM Encoder and enable DMA transfer.\r\n    (+) Stop the TIM Encoder and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM Encoder Interface and initialize the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_Encoder_DeInit() before HAL_TIM_Encoder_Init()\r\n * @note   Encoder mode and External clock mode 2 are not compatible and must not be selected together\r\n *         Ex: A call for @ref HAL_TIM_Encoder_Init will erase the settings of @ref HAL_TIM_ConfigClockSource\r\n *         using TIM_CLOCKSOURCE_ETRMODE2 and vice versa\r\n * @note   When the timer instance is initialized in Encoder mode, timer\r\n *         channels 1 and channel 2 are reserved and cannot be used for other\r\n *         purpose.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  sConfig TIM Encoder Interface configuration structure\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_InitTypeDef *sConfig) {\r\n  uint32_t tmpsmcr;\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n  assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode));\r\n  assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection));\r\n  assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection));\r\n  assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC1Polarity));\r\n  assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC2Polarity));\r\n  assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));\r\n  assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler));\r\n  assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));\r\n  assert_param(IS_TIM_IC_FILTER(sConfig->IC2Filter));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->Encoder_MspInitCallback == NULL) {\r\n      htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->Encoder_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIM_Encoder_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Reset the SMS and ECE bits */\r\n  htim->Instance->SMCR &= ~(TIM_SMCR_SMS | TIM_SMCR_ECE);\r\n\r\n  /* Configure the Time base in the Encoder Mode */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Get the TIMx SMCR register value */\r\n  tmpsmcr = htim->Instance->SMCR;\r\n\r\n  /* Get the TIMx CCMR1 register value */\r\n  tmpccmr1 = htim->Instance->CCMR1;\r\n\r\n  /* Get the TIMx CCER register value */\r\n  tmpccer = htim->Instance->CCER;\r\n\r\n  /* Set the encoder Mode */\r\n  tmpsmcr |= sConfig->EncoderMode;\r\n\r\n  /* Select the Capture Compare 1 and the Capture Compare 2 as input */\r\n  tmpccmr1 &= ~(TIM_CCMR1_CC1S | TIM_CCMR1_CC2S);\r\n  tmpccmr1 |= (sConfig->IC1Selection | (sConfig->IC2Selection << 8U));\r\n\r\n  /* Set the Capture Compare 1 and the Capture Compare 2 prescalers and filters */\r\n  tmpccmr1 &= ~(TIM_CCMR1_IC1PSC | TIM_CCMR1_IC2PSC);\r\n  tmpccmr1 &= ~(TIM_CCMR1_IC1F | TIM_CCMR1_IC2F);\r\n  tmpccmr1 |= sConfig->IC1Prescaler | (sConfig->IC2Prescaler << 8U);\r\n  tmpccmr1 |= (sConfig->IC1Filter << 4U) | (sConfig->IC2Filter << 12U);\r\n\r\n  /* Set the TI1 and the TI2 Polarities */\r\n  tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P);\r\n  tmpccer |= sConfig->IC1Polarity | (sConfig->IC2Polarity << 4U);\r\n\r\n  /* Write to TIMx SMCR */\r\n  htim->Instance->SMCR = tmpsmcr;\r\n\r\n  /* Write to TIMx CCMR1 */\r\n  htim->Instance->CCMR1 = tmpccmr1;\r\n\r\n  /* Write to TIMx CCER */\r\n  htim->Instance->CCER = tmpccer;\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM Encoder interface\r\n * @param  htim TIM Encoder Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->Encoder_MspDeInitCallback == NULL) {\r\n    htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->Encoder_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */\r\n  HAL_TIM_Encoder_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Encoder Interface MSP.\r\n * @param  htim TIM Encoder Interface handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_Encoder_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM Encoder Interface MSP.\r\n * @param  htim TIM Encoder Interface handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_Encoder_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Encoder Interface.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    if ((channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n        (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  }\r\n\r\n  /* Enable the encoder interface channels */\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n    break;\r\n  }\r\n\r\n  default: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n    break;\r\n  }\r\n  }\r\n  /* Enable the Peripheral */\r\n  __HAL_TIM_ENABLE(htim);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Encoder Interface.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channels 1 and 2\r\n    (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n    break;\r\n  }\r\n\r\n  default: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n    break;\r\n  }\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) {\r\n    TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else {\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Encoder Interface in interrupt mode.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    if ((channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n        (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  }\r\n\r\n  /* Enable the encoder interface channels */\r\n  /* Enable the capture compare Interrupts 1 and/or 2 */\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  default: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n  }\r\n\r\n  /* Enable the Peripheral */\r\n  __HAL_TIM_ENABLE(htim);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Encoder Interface in interrupt mode.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channels 1 and 2\r\n    (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare Interrupts 1 */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare Interrupts 2 */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n  } else {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare Interrupts 1 and 2 */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) {\r\n    TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else {\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Encoder Interface in DMA mode.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @param  pData1 The destination Buffer address for IC1.\r\n * @param  pData2 The destination Buffer address for IC2.\r\n * @param  Length The length of data to be transferred from TIM peripheral to memory.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length) {\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)) {\r\n      return HAL_BUSY;\r\n    } else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY)) {\r\n      if ((pData1 == NULL) && (Length > 0U)) {\r\n        return HAL_ERROR;\r\n      } else {\r\n        TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n        TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      }\r\n    } else {\r\n      return HAL_ERROR;\r\n    }\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    if ((channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY) || (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY)) {\r\n      return HAL_BUSY;\r\n    } else if ((channel_2_state == HAL_TIM_CHANNEL_STATE_READY) && (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_READY)) {\r\n      if ((pData2 == NULL) && (Length > 0U)) {\r\n        return HAL_ERROR;\r\n      } else {\r\n        TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n        TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      }\r\n    } else {\r\n      return HAL_ERROR;\r\n    }\r\n  } else {\r\n    if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) || (channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY) || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) ||\r\n        (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY)) {\r\n      return HAL_BUSY;\r\n    } else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) && (channel_2_state == HAL_TIM_CHANNEL_STATE_READY) && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY) &&\r\n               (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_READY)) {\r\n      if ((((pData1 == NULL) || (pData2 == NULL))) && (Length > 0U)) {\r\n        return HAL_ERROR;\r\n      } else {\r\n        TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n        TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n        TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n        TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      }\r\n    } else {\r\n      return HAL_ERROR;\r\n    }\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Input Capture DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n\r\n    /* Enable the Peripheral */\r\n    __HAL_TIM_ENABLE(htim);\r\n\r\n    /* Enable the Capture compare channel */\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Input Capture  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n\r\n    /* Enable the Peripheral */\r\n    __HAL_TIM_ENABLE(htim);\r\n\r\n    /* Enable the Capture compare channel */\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_ALL: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the Peripheral */\r\n    __HAL_TIM_ENABLE(htim);\r\n\r\n    /* Enable the Capture compare channel */\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n\r\n    /* Enable the TIM Input Capture  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    /* Enable the TIM Input Capture  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Encoder Interface in DMA mode.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channels 1 and 2\r\n    (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare DMA Request 1 */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare DMA Request 2 */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n  } else {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare DMA Request 1 and 2 */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) {\r\n    TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else {\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management\r\n  *  @brief    TIM IRQ handler management\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                        ##### IRQ handler management #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides Timer IRQ handler function.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  This function handles TIM interrupts requests.\r\n * @param  htim TIM  handle\r\n * @retval None\r\n */\r\nvoid HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) {\r\n  /* Capture compare 1 event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC1) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC1) != RESET) {\r\n      {\r\n        __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC1);\r\n        htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n\r\n        /* Input capture event */\r\n        if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U) {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n          htim->IC_CaptureCallback(htim);\r\n#else\r\n          HAL_TIM_IC_CaptureCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n        }\r\n        /* Output compare event */\r\n        else {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n          htim->OC_DelayElapsedCallback(htim);\r\n          htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n          HAL_TIM_OC_DelayElapsedCallback(htim);\r\n          HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n        }\r\n        htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n      }\r\n    }\r\n  }\r\n  /* Capture compare 2 event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC2) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC2) != RESET) {\r\n      __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC2);\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n      /* Input capture event */\r\n      if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U) {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->IC_CaptureCallback(htim);\r\n#else\r\n        HAL_TIM_IC_CaptureCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      /* Output compare event */\r\n      else {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->OC_DelayElapsedCallback(htim);\r\n        htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n        HAL_TIM_OC_DelayElapsedCallback(htim);\r\n        HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n    }\r\n  }\r\n  /* Capture compare 3 event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC3) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC3) != RESET) {\r\n      __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC3);\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n      /* Input capture event */\r\n      if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U) {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->IC_CaptureCallback(htim);\r\n#else\r\n        HAL_TIM_IC_CaptureCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      /* Output compare event */\r\n      else {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->OC_DelayElapsedCallback(htim);\r\n        htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n        HAL_TIM_OC_DelayElapsedCallback(htim);\r\n        HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n    }\r\n  }\r\n  /* Capture compare 4 event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC4) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC4) != RESET) {\r\n      __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC4);\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n      /* Input capture event */\r\n      if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U) {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->IC_CaptureCallback(htim);\r\n#else\r\n        HAL_TIM_IC_CaptureCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      /* Output compare event */\r\n      else {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->OC_DelayElapsedCallback(htim);\r\n        htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n        HAL_TIM_OC_DelayElapsedCallback(htim);\r\n        HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n    }\r\n  }\r\n  /* TIM Update event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_UPDATE) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) != RESET) {\r\n      __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n      htim->PeriodElapsedCallback(htim);\r\n#else\r\n      HAL_TIM_PeriodElapsedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions\r\n  *  @brief    TIM Peripheral Control functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                   ##### Peripheral Control functions #####\r\n  ==============================================================================\r\n [..]\r\n   This section provides functions allowing to:\r\n      (+) Configure The Input Output channels for OC, PWM, IC or One Pulse mode.\r\n      (+) Configure External Clock source.\r\n      (+) Configure Complementary channels, break features and dead time.\r\n      (+) Configure Master and the Slave synchronization.\r\n      (+) Configure the DMA Burst Mode.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initializes the TIM Output Compare Channels according to the specified\r\n *         parameters in the TIM_OC_InitTypeDef.\r\n * @param  htim TIM Output Compare handle\r\n * @param  sConfig TIM Output Compare configuration structure\r\n * @param  Channel TIM Channels to configure\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CHANNELS(Channel));\r\n  assert_param(IS_TIM_OC_MODE(sConfig->OCMode));\r\n  assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity));\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the TIM Channel 1 in Output Compare */\r\n    TIM_OC1_SetConfig(htim->Instance, sConfig);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the TIM Channel 2 in Output Compare */\r\n    TIM_OC2_SetConfig(htim->Instance, sConfig);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the TIM Channel 3 in Output Compare */\r\n    TIM_OC3_SetConfig(htim->Instance, sConfig);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the TIM Channel 4 in Output Compare */\r\n    TIM_OC4_SetConfig(htim->Instance, sConfig);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Input Capture Channels according to the specified\r\n *         parameters in the TIM_IC_InitTypeDef.\r\n * @param  htim TIM IC handle\r\n * @param  sConfig TIM Input Capture configuration structure\r\n * @param  Channel TIM Channel to configure\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_IC_POLARITY(sConfig->ICPolarity));\r\n  assert_param(IS_TIM_IC_SELECTION(sConfig->ICSelection));\r\n  assert_param(IS_TIM_IC_PRESCALER(sConfig->ICPrescaler));\r\n  assert_param(IS_TIM_IC_FILTER(sConfig->ICFilter));\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    /* TI1 Configuration */\r\n    TIM_TI1_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n    /* Reset the IC1PSC Bits */\r\n    htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;\r\n\r\n    /* Set the IC1PSC value */\r\n    htim->Instance->CCMR1 |= sConfig->ICPrescaler;\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    /* TI2 Configuration */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n    TIM_TI2_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n    /* Reset the IC2PSC Bits */\r\n    htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC;\r\n\r\n    /* Set the IC2PSC value */\r\n    htim->Instance->CCMR1 |= (sConfig->ICPrescaler << 8U);\r\n  } else if (Channel == TIM_CHANNEL_3) {\r\n    /* TI3 Configuration */\r\n    assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));\r\n\r\n    TIM_TI3_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n    /* Reset the IC3PSC Bits */\r\n    htim->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC;\r\n\r\n    /* Set the IC3PSC value */\r\n    htim->Instance->CCMR2 |= sConfig->ICPrescaler;\r\n  } else {\r\n    /* TI4 Configuration */\r\n    assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));\r\n\r\n    TIM_TI4_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n    /* Reset the IC4PSC Bits */\r\n    htim->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC;\r\n\r\n    /* Set the IC4PSC value */\r\n    htim->Instance->CCMR2 |= (sConfig->ICPrescaler << 8U);\r\n  }\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM PWM  channels according to the specified\r\n *         parameters in the TIM_OC_InitTypeDef.\r\n * @param  htim TIM PWM handle\r\n * @param  sConfig TIM PWM configuration structure\r\n * @param  Channel TIM Channels to be configured\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CHANNELS(Channel));\r\n  assert_param(IS_TIM_PWM_MODE(sConfig->OCMode));\r\n  assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity));\r\n  assert_param(IS_TIM_FAST_STATE(sConfig->OCFastMode));\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the Channel 1 in PWM mode */\r\n    TIM_OC1_SetConfig(htim->Instance, sConfig);\r\n\r\n    /* Set the Preload enable bit for channel1 */\r\n    htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE;\r\n\r\n    /* Configure the Output Fast mode */\r\n    htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE;\r\n    htim->Instance->CCMR1 |= sConfig->OCFastMode;\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the Channel 2 in PWM mode */\r\n    TIM_OC2_SetConfig(htim->Instance, sConfig);\r\n\r\n    /* Set the Preload enable bit for channel2 */\r\n    htim->Instance->CCMR1 |= TIM_CCMR1_OC2PE;\r\n\r\n    /* Configure the Output Fast mode */\r\n    htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE;\r\n    htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U;\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the Channel 3 in PWM mode */\r\n    TIM_OC3_SetConfig(htim->Instance, sConfig);\r\n\r\n    /* Set the Preload enable bit for channel3 */\r\n    htim->Instance->CCMR2 |= TIM_CCMR2_OC3PE;\r\n\r\n    /* Configure the Output Fast mode */\r\n    htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE;\r\n    htim->Instance->CCMR2 |= sConfig->OCFastMode;\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the Channel 4 in PWM mode */\r\n    TIM_OC4_SetConfig(htim->Instance, sConfig);\r\n\r\n    /* Set the Preload enable bit for channel4 */\r\n    htim->Instance->CCMR2 |= TIM_CCMR2_OC4PE;\r\n\r\n    /* Configure the Output Fast mode */\r\n    htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE;\r\n    htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U;\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM One Pulse Channels according to the specified\r\n *         parameters in the TIM_OnePulse_InitTypeDef.\r\n * @param  htim TIM One Pulse handle\r\n * @param  sConfig TIM One Pulse configuration structure\r\n * @param  OutputChannel TIM output channel to configure\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @param  InputChannel TIM input Channel to configure\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @note  To output a waveform with a minimum delay user can enable the fast\r\n *        mode by calling the @ref __HAL_TIM_ENABLE_OCxFAST macro. Then CCx\r\n *        output is forced in response to the edge detection on TIx input,\r\n *        without taking in account the comparison.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel) {\r\n  TIM_OC_InitTypeDef temp1;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_OPM_CHANNELS(OutputChannel));\r\n  assert_param(IS_TIM_OPM_CHANNELS(InputChannel));\r\n\r\n  if (OutputChannel != InputChannel) {\r\n    /* Process Locked */\r\n    __HAL_LOCK(htim);\r\n\r\n    htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n    /* Extract the Output compare configuration from sConfig structure */\r\n    temp1.OCMode       = sConfig->OCMode;\r\n    temp1.Pulse        = sConfig->Pulse;\r\n    temp1.OCPolarity   = sConfig->OCPolarity;\r\n    temp1.OCNPolarity  = sConfig->OCNPolarity;\r\n    temp1.OCIdleState  = sConfig->OCIdleState;\r\n    temp1.OCNIdleState = sConfig->OCNIdleState;\r\n\r\n    switch (OutputChannel) {\r\n    case TIM_CHANNEL_1: {\r\n      assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n\r\n      TIM_OC1_SetConfig(htim->Instance, &temp1);\r\n      break;\r\n    }\r\n    case TIM_CHANNEL_2: {\r\n      assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n      TIM_OC2_SetConfig(htim->Instance, &temp1);\r\n      break;\r\n    }\r\n    default:\r\n      break;\r\n    }\r\n\r\n    switch (InputChannel) {\r\n    case TIM_CHANNEL_1: {\r\n      assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n\r\n      TIM_TI1_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n      /* Reset the IC1PSC Bits */\r\n      htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;\r\n\r\n      /* Select the Trigger source */\r\n      htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n      htim->Instance->SMCR |= TIM_TS_TI1FP1;\r\n\r\n      /* Select the Slave Mode */\r\n      htim->Instance->SMCR &= ~TIM_SMCR_SMS;\r\n      htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER;\r\n      break;\r\n    }\r\n    case TIM_CHANNEL_2: {\r\n      assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n      TIM_TI2_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n      /* Reset the IC2PSC Bits */\r\n      htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC;\r\n\r\n      /* Select the Trigger source */\r\n      htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n      htim->Instance->SMCR |= TIM_TS_TI2FP2;\r\n\r\n      /* Select the Slave Mode */\r\n      htim->Instance->SMCR &= ~TIM_SMCR_SMS;\r\n      htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER;\r\n      break;\r\n    }\r\n\r\n    default:\r\n      break;\r\n    }\r\n\r\n    htim->State = HAL_TIM_STATE_READY;\r\n\r\n    __HAL_UNLOCK(htim);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Configure the DMA Burst to transfer Data from the memory to the TIM peripheral\r\n * @param  htim TIM handle\r\n * @param  BurstBaseAddress TIM Base address from where the DMA  will start the Data write\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMABASE_CR1\r\n *            @arg TIM_DMABASE_CR2\r\n *            @arg TIM_DMABASE_SMCR\r\n *            @arg TIM_DMABASE_DIER\r\n *            @arg TIM_DMABASE_SR\r\n *            @arg TIM_DMABASE_EGR\r\n *            @arg TIM_DMABASE_CCMR1\r\n *            @arg TIM_DMABASE_CCMR2\r\n *            @arg TIM_DMABASE_CCER\r\n *            @arg TIM_DMABASE_CNT\r\n *            @arg TIM_DMABASE_PSC\r\n *            @arg TIM_DMABASE_ARR\r\n *            @arg TIM_DMABASE_RCR\r\n *            @arg TIM_DMABASE_CCR1\r\n *            @arg TIM_DMABASE_CCR2\r\n *            @arg TIM_DMABASE_CCR3\r\n *            @arg TIM_DMABASE_CCR4\r\n *            @arg TIM_DMABASE_BDTR\r\n * @param  BurstRequestSrc TIM DMA Request sources\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: TIM update Interrupt source\r\n *            @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source\r\n *            @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source\r\n *            @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source\r\n *            @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source\r\n *            @arg TIM_DMA_COM: TIM Commutation DMA source\r\n *            @arg TIM_DMA_TRIGGER: TIM Trigger DMA source\r\n * @param  BurstBuffer The Buffer address.\r\n * @param  BurstLength DMA Burst length. This parameter can be one value\r\n *         between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS.\r\n * @note   This function should be used only when BurstLength is equal to DMA data transfer length.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength) {\r\n  return HAL_TIM_DMABurst_MultiWriteStart(htim, BurstBaseAddress, BurstRequestSrc, BurstBuffer, BurstLength, ((BurstLength) >> 8U) + 1U);\r\n}\r\n\r\n/**\r\n * @brief  Configure the DMA Burst to transfer multiple Data from the memory to the TIM peripheral\r\n * @param  htim TIM handle\r\n * @param  BurstBaseAddress TIM Base address from where the DMA will start the Data write\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMABASE_CR1\r\n *            @arg TIM_DMABASE_CR2\r\n *            @arg TIM_DMABASE_SMCR\r\n *            @arg TIM_DMABASE_DIER\r\n *            @arg TIM_DMABASE_SR\r\n *            @arg TIM_DMABASE_EGR\r\n *            @arg TIM_DMABASE_CCMR1\r\n *            @arg TIM_DMABASE_CCMR2\r\n *            @arg TIM_DMABASE_CCER\r\n *            @arg TIM_DMABASE_CNT\r\n *            @arg TIM_DMABASE_PSC\r\n *            @arg TIM_DMABASE_ARR\r\n *            @arg TIM_DMABASE_RCR\r\n *            @arg TIM_DMABASE_CCR1\r\n *            @arg TIM_DMABASE_CCR2\r\n *            @arg TIM_DMABASE_CCR3\r\n *            @arg TIM_DMABASE_CCR4\r\n *            @arg TIM_DMABASE_BDTR\r\n * @param  BurstRequestSrc TIM DMA Request sources\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: TIM update Interrupt source\r\n *            @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source\r\n *            @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source\r\n *            @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source\r\n *            @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source\r\n *            @arg TIM_DMA_COM: TIM Commutation DMA source\r\n *            @arg TIM_DMA_TRIGGER: TIM Trigger DMA source\r\n * @param  BurstBuffer The Buffer address.\r\n * @param  BurstLength DMA Burst length. This parameter can be one value\r\n *         between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS.\r\n * @param  DataLength Data length. This parameter can be one value\r\n *         between 1 and 0xFFFF.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength, uint32_t DataLength) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_DMA_BASE(BurstBaseAddress));\r\n  assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));\r\n  assert_param(IS_TIM_DMA_LENGTH(BurstLength));\r\n  assert_param(IS_TIM_DMA_DATA_LENGTH(DataLength));\r\n\r\n  if (htim->DMABurstState == HAL_DMA_BURST_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (htim->DMABurstState == HAL_DMA_BURST_STATE_READY) {\r\n    if ((BurstBuffer == NULL) && (BurstLength > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      htim->DMABurstState = HAL_DMA_BURST_STATE_BUSY;\r\n    }\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n  switch (BurstRequestSrc) {\r\n  case TIM_DMA_UPDATE: {\r\n    /* Set the DMA Period elapsed callbacks */\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback     = TIM_DMAPeriodElapsedCplt;\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC1: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC2: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC3: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC4: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_COM: {\r\n    /* Set the DMA commutation callbacks */\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback     = TIMEx_DMACommutationCplt;\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_TRIGGER: {\r\n    /* Set the DMA trigger callbacks */\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback     = TIM_DMATriggerCplt;\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferHalfCpltCallback = TIM_DMATriggerHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Configure the DMA Burst Mode */\r\n  htim->Instance->DCR = (BurstBaseAddress | BurstLength);\r\n  /* Enable the TIM DMA Request */\r\n  __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM DMA Burst mode\r\n * @param  htim TIM handle\r\n * @param  BurstRequestSrc TIM DMA Request sources to disable\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));\r\n\r\n  /* Abort the DMA transfer (at least disable the DMA channel) */\r\n  switch (BurstRequestSrc) {\r\n  case TIM_DMA_UPDATE: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC1: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC2: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC3: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC4: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);\r\n    break;\r\n  }\r\n  case TIM_DMA_COM: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_COMMUTATION]);\r\n    break;\r\n  }\r\n  case TIM_DMA_TRIGGER: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_TRIGGER]);\r\n    break;\r\n  }\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the TIM Update DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc);\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configure the DMA Burst to transfer Data from the TIM peripheral to the memory\r\n * @param  htim TIM handle\r\n * @param  BurstBaseAddress TIM Base address from where the DMA  will start the Data read\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMABASE_CR1\r\n *            @arg TIM_DMABASE_CR2\r\n *            @arg TIM_DMABASE_SMCR\r\n *            @arg TIM_DMABASE_DIER\r\n *            @arg TIM_DMABASE_SR\r\n *            @arg TIM_DMABASE_EGR\r\n *            @arg TIM_DMABASE_CCMR1\r\n *            @arg TIM_DMABASE_CCMR2\r\n *            @arg TIM_DMABASE_CCER\r\n *            @arg TIM_DMABASE_CNT\r\n *            @arg TIM_DMABASE_PSC\r\n *            @arg TIM_DMABASE_ARR\r\n *            @arg TIM_DMABASE_RCR\r\n *            @arg TIM_DMABASE_CCR1\r\n *            @arg TIM_DMABASE_CCR2\r\n *            @arg TIM_DMABASE_CCR3\r\n *            @arg TIM_DMABASE_CCR4\r\n *            @arg TIM_DMABASE_BDTR\r\n * @param  BurstRequestSrc TIM DMA Request sources\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: TIM update Interrupt source\r\n *            @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source\r\n *            @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source\r\n *            @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source\r\n *            @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source\r\n *            @arg TIM_DMA_COM: TIM Commutation DMA source\r\n *            @arg TIM_DMA_TRIGGER: TIM Trigger DMA source\r\n * @param  BurstBuffer The Buffer address.\r\n * @param  BurstLength DMA Burst length. This parameter can be one value\r\n *         between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS.\r\n * @note   This function should be used only when BurstLength is equal to DMA data transfer length.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength) {\r\n  return HAL_TIM_DMABurst_MultiReadStart(htim, BurstBaseAddress, BurstRequestSrc, BurstBuffer, BurstLength, ((BurstLength) >> 8U) + 1U);\r\n}\r\n\r\n/**\r\n * @brief  Configure the DMA Burst to transfer Data from the TIM peripheral to the memory\r\n * @param  htim TIM handle\r\n * @param  BurstBaseAddress TIM Base address from where the DMA  will start the Data read\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMABASE_CR1\r\n *            @arg TIM_DMABASE_CR2\r\n *            @arg TIM_DMABASE_SMCR\r\n *            @arg TIM_DMABASE_DIER\r\n *            @arg TIM_DMABASE_SR\r\n *            @arg TIM_DMABASE_EGR\r\n *            @arg TIM_DMABASE_CCMR1\r\n *            @arg TIM_DMABASE_CCMR2\r\n *            @arg TIM_DMABASE_CCER\r\n *            @arg TIM_DMABASE_CNT\r\n *            @arg TIM_DMABASE_PSC\r\n *            @arg TIM_DMABASE_ARR\r\n *            @arg TIM_DMABASE_RCR\r\n *            @arg TIM_DMABASE_CCR1\r\n *            @arg TIM_DMABASE_CCR2\r\n *            @arg TIM_DMABASE_CCR3\r\n *            @arg TIM_DMABASE_CCR4\r\n *            @arg TIM_DMABASE_BDTR\r\n * @param  BurstRequestSrc TIM DMA Request sources\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: TIM update Interrupt source\r\n *            @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source\r\n *            @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source\r\n *            @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source\r\n *            @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source\r\n *            @arg TIM_DMA_COM: TIM Commutation DMA source\r\n *            @arg TIM_DMA_TRIGGER: TIM Trigger DMA source\r\n * @param  BurstBuffer The Buffer address.\r\n * @param  BurstLength DMA Burst length. This parameter can be one value\r\n *         between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS.\r\n * @param  DataLength Data length. This parameter can be one value\r\n *         between 1 and 0xFFFF.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_MultiReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength, uint32_t DataLength) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_DMA_BASE(BurstBaseAddress));\r\n  assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));\r\n  assert_param(IS_TIM_DMA_LENGTH(BurstLength));\r\n  assert_param(IS_TIM_DMA_DATA_LENGTH(DataLength));\r\n\r\n  if (htim->DMABurstState == HAL_DMA_BURST_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (htim->DMABurstState == HAL_DMA_BURST_STATE_READY) {\r\n    if ((BurstBuffer == NULL) && (BurstLength > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      htim->DMABurstState = HAL_DMA_BURST_STATE_BUSY;\r\n    }\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n  switch (BurstRequestSrc) {\r\n  case TIM_DMA_UPDATE: {\r\n    /* Set the DMA Period elapsed callbacks */\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback     = TIM_DMAPeriodElapsedCplt;\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC1: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC2: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC3: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC4: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_COM: {\r\n    /* Set the DMA commutation callbacks */\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback     = TIMEx_DMACommutationCplt;\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_TRIGGER: {\r\n    /* Set the DMA trigger callbacks */\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback     = TIM_DMATriggerCplt;\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferHalfCpltCallback = TIM_DMATriggerHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Configure the DMA Burst Mode */\r\n  htim->Instance->DCR = (BurstBaseAddress | BurstLength);\r\n\r\n  /* Enable the TIM DMA Request */\r\n  __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stop the DMA burst reading\r\n * @param  htim TIM handle\r\n * @param  BurstRequestSrc TIM DMA Request sources to disable.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));\r\n\r\n  /* Abort the DMA transfer (at least disable the DMA channel) */\r\n  switch (BurstRequestSrc) {\r\n  case TIM_DMA_UPDATE: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC1: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC2: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC3: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC4: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);\r\n    break;\r\n  }\r\n  case TIM_DMA_COM: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_COMMUTATION]);\r\n    break;\r\n  }\r\n  case TIM_DMA_TRIGGER: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_TRIGGER]);\r\n    break;\r\n  }\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the TIM Update DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc);\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Generate a software event\r\n * @param  htim TIM handle\r\n * @param  EventSource specifies the event source.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_EVENTSOURCE_UPDATE: Timer update Event source\r\n *            @arg TIM_EVENTSOURCE_CC1: Timer Capture Compare 1 Event source\r\n *            @arg TIM_EVENTSOURCE_CC2: Timer Capture Compare 2 Event source\r\n *            @arg TIM_EVENTSOURCE_CC3: Timer Capture Compare 3 Event source\r\n *            @arg TIM_EVENTSOURCE_CC4: Timer Capture Compare 4 Event source\r\n *            @arg TIM_EVENTSOURCE_COM: Timer COM event source\r\n *            @arg TIM_EVENTSOURCE_TRIGGER: Timer Trigger Event source\r\n *            @arg TIM_EVENTSOURCE_BREAK: Timer Break event source\r\n * @note   Basic timers can only generate an update event.\r\n * @note   TIM_EVENTSOURCE_COM is relevant only with advanced timer instances.\r\n * @note   TIM_EVENTSOURCE_BREAK are relevant only for timer instances\r\n *         supporting a break input.\r\n * @retval HAL status\r\n */\r\n\r\nHAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_EVENT_SOURCE(EventSource));\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  /* Change the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Set the event sources */\r\n  htim->Instance->EGR = EventSource;\r\n\r\n  /* Change the TIM state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the OCRef clear feature\r\n * @param  htim TIM handle\r\n * @param  sClearInputConfig pointer to a TIM_ClearInputConfigTypeDef structure that\r\n *         contains the OCREF clear feature and parameters for the TIM peripheral.\r\n * @param  Channel specifies the TIM Channel\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_OCXREF_CLEAR_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_CLEARINPUT_SOURCE(sClearInputConfig->ClearInputSource));\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  switch (sClearInputConfig->ClearInputSource) {\r\n  case TIM_CLEARINPUTSOURCE_NONE: {\r\n    /* Clear the OCREF clear selection bit and the the ETR Bits */\r\n    CLEAR_BIT(htim->Instance->SMCR, (TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP));\r\n    break;\r\n  }\r\n\r\n  case TIM_CLEARINPUTSOURCE_ETR: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CLEARINPUT_POLARITY(sClearInputConfig->ClearInputPolarity));\r\n    assert_param(IS_TIM_CLEARINPUT_PRESCALER(sClearInputConfig->ClearInputPrescaler));\r\n    assert_param(IS_TIM_CLEARINPUT_FILTER(sClearInputConfig->ClearInputFilter));\r\n\r\n    /* When OCRef clear feature is used with ETR source, ETR prescaler must be off */\r\n    if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1) {\r\n      htim->State = HAL_TIM_STATE_READY;\r\n      __HAL_UNLOCK(htim);\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    TIM_ETR_SetConfig(htim->Instance, sClearInputConfig->ClearInputPrescaler, sClearInputConfig->ClearInputPolarity, sClearInputConfig->ClearInputFilter);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) {\r\n      /* Enable the OCREF clear feature for Channel 1 */\r\n      SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE);\r\n    } else {\r\n      /* Disable the OCREF clear feature for Channel 1 */\r\n      CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE);\r\n    }\r\n    break;\r\n  }\r\n  case TIM_CHANNEL_2: {\r\n    if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) {\r\n      /* Enable the OCREF clear feature for Channel 2 */\r\n      SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE);\r\n    } else {\r\n      /* Disable the OCREF clear feature for Channel 2 */\r\n      CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE);\r\n    }\r\n    break;\r\n  }\r\n  case TIM_CHANNEL_3: {\r\n    if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) {\r\n      /* Enable the OCREF clear feature for Channel 3 */\r\n      SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE);\r\n    } else {\r\n      /* Disable the OCREF clear feature for Channel 3 */\r\n      CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE);\r\n    }\r\n    break;\r\n  }\r\n  case TIM_CHANNEL_4: {\r\n    if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) {\r\n      /* Enable the OCREF clear feature for Channel 4 */\r\n      SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE);\r\n    } else {\r\n      /* Disable the OCREF clear feature for Channel 4 */\r\n      CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE);\r\n    }\r\n    break;\r\n  }\r\n  default:\r\n    break;\r\n  }\r\n\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief   Configures the clock source to be used\r\n * @param  htim TIM handle\r\n * @param  sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that\r\n *         contains the clock source information for the TIM peripheral.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource));\r\n\r\n  /* Reset the SMS, TS, ECE, ETPS and ETRF bits */\r\n  tmpsmcr = htim->Instance->SMCR;\r\n  tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS);\r\n  tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);\r\n  htim->Instance->SMCR = tmpsmcr;\r\n\r\n  switch (sClockSourceConfig->ClockSource) {\r\n  case TIM_CLOCKSOURCE_INTERNAL: {\r\n    assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_ETRMODE1: {\r\n    /* Check whether or not the timer instance supports external trigger input mode 1 (ETRF)*/\r\n    assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance));\r\n\r\n    /* Check ETR input conditioning related parameters */\r\n    assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));\r\n    assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));\r\n    assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));\r\n\r\n    /* Configure the ETR Clock source */\r\n    TIM_ETR_SetConfig(htim->Instance, sClockSourceConfig->ClockPrescaler, sClockSourceConfig->ClockPolarity, sClockSourceConfig->ClockFilter);\r\n\r\n    /* Select the External clock mode1 and the ETRF trigger */\r\n    tmpsmcr = htim->Instance->SMCR;\r\n    tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1);\r\n    /* Write to TIMx SMCR */\r\n    htim->Instance->SMCR = tmpsmcr;\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_ETRMODE2: {\r\n    /* Check whether or not the timer instance supports external trigger input mode 2 (ETRF)*/\r\n    assert_param(IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(htim->Instance));\r\n\r\n    /* Check ETR input conditioning related parameters */\r\n    assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));\r\n    assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));\r\n    assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));\r\n\r\n    /* Configure the ETR Clock source */\r\n    TIM_ETR_SetConfig(htim->Instance, sClockSourceConfig->ClockPrescaler, sClockSourceConfig->ClockPolarity, sClockSourceConfig->ClockFilter);\r\n    /* Enable the External clock mode2 */\r\n    htim->Instance->SMCR |= TIM_SMCR_ECE;\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_TI1: {\r\n    /* Check whether or not the timer instance supports external clock mode 1 */\r\n    assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance));\r\n\r\n    /* Check TI1 input conditioning related parameters */\r\n    assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));\r\n    assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));\r\n\r\n    TIM_TI1_ConfigInputStage(htim->Instance, sClockSourceConfig->ClockPolarity, sClockSourceConfig->ClockFilter);\r\n    TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_TI2: {\r\n    /* Check whether or not the timer instance supports external clock mode 1 (ETRF)*/\r\n    assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance));\r\n\r\n    /* Check TI2 input conditioning related parameters */\r\n    assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));\r\n    assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));\r\n\r\n    TIM_TI2_ConfigInputStage(htim->Instance, sClockSourceConfig->ClockPolarity, sClockSourceConfig->ClockFilter);\r\n    TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_TI1ED: {\r\n    /* Check whether or not the timer instance supports external clock mode 1 */\r\n    assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance));\r\n\r\n    /* Check TI1 input conditioning related parameters */\r\n    assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));\r\n    assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));\r\n\r\n    TIM_TI1_ConfigInputStage(htim->Instance, sClockSourceConfig->ClockPolarity, sClockSourceConfig->ClockFilter);\r\n    TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED);\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_ITR0:\r\n  case TIM_CLOCKSOURCE_ITR1:\r\n  case TIM_CLOCKSOURCE_ITR2:\r\n  case TIM_CLOCKSOURCE_ITR3: {\r\n    /* Check whether or not the timer instance supports internal trigger input */\r\n    assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance));\r\n\r\n    TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Selects the signal connected to the TI1 input: direct from CH1_input\r\n *         or a XOR combination between CH1_input, CH2_input & CH3_input\r\n * @param  htim TIM handle.\r\n * @param  TI1_Selection Indicate whether or not channel 1 is connected to the\r\n *         output of a XOR gate.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_TI1SELECTION_CH1: The TIMx_CH1 pin is connected to TI1 input\r\n *            @arg TIM_TI1SELECTION_XORCOMBINATION: The TIMx_CH1, CH2 and CH3\r\n *            pins are connected to the TI1 input (XOR combination)\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection) {\r\n  uint32_t tmpcr2;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_XOR_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_TI1SELECTION(TI1_Selection));\r\n\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = htim->Instance->CR2;\r\n\r\n  /* Reset the TI1 selection */\r\n  tmpcr2 &= ~TIM_CR2_TI1S;\r\n\r\n  /* Set the TI1 selection */\r\n  tmpcr2 |= TI1_Selection;\r\n\r\n  /* Write to TIMxCR2 */\r\n  htim->Instance->CR2 = tmpcr2;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the TIM in Slave mode\r\n * @param  htim TIM handle.\r\n * @param  sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that\r\n *         contains the selected trigger (internal trigger input, filtered\r\n *         timer input or external trigger input) and the Slave mode\r\n *         (Disable, Reset, Gated, Trigger, External clock mode 1).\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode));\r\n  assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger));\r\n\r\n  __HAL_LOCK(htim);\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK) {\r\n    htim->State = HAL_TIM_STATE_READY;\r\n    __HAL_UNLOCK(htim);\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Disable Trigger Interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_TRIGGER);\r\n\r\n  /* Disable Trigger DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER);\r\n\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the TIM in Slave mode in interrupt mode\r\n * @param  htim TIM handle.\r\n * @param  sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that\r\n *         contains the selected trigger (internal trigger input, filtered\r\n *         timer input or external trigger input) and the Slave mode\r\n *         (Disable, Reset, Gated, Trigger, External clock mode 1).\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode));\r\n  assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger));\r\n\r\n  __HAL_LOCK(htim);\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK) {\r\n    htim->State = HAL_TIM_STATE_READY;\r\n    __HAL_UNLOCK(htim);\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Enable Trigger Interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_TRIGGER);\r\n\r\n  /* Disable Trigger DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER);\r\n\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Read the captured value from Capture Compare unit\r\n * @param  htim TIM handle.\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval Captured value\r\n */\r\nuint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpreg = 0U;\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n\r\n    /* Return the capture 1 value */\r\n    tmpreg = htim->Instance->CCR1;\r\n\r\n    break;\r\n  }\r\n  case TIM_CHANNEL_2: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n    /* Return the capture 2 value */\r\n    tmpreg = htim->Instance->CCR2;\r\n\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));\r\n\r\n    /* Return the capture 3 value */\r\n    tmpreg = htim->Instance->CCR3;\r\n\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));\r\n\r\n    /* Return the capture 4 value */\r\n    tmpreg = htim->Instance->CCR4;\r\n\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return tmpreg;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions\r\n  *  @brief    TIM Callbacks functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                        ##### TIM Callbacks functions #####\r\n  ==============================================================================\r\n [..]\r\n   This section provides TIM callback functions:\r\n   (+) TIM Period elapsed callback\r\n   (+) TIM Output Compare callback\r\n   (+) TIM Input capture callback\r\n   (+) TIM Trigger callback\r\n   (+) TIM Error callback\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Period elapsed callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PeriodElapsedCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Period elapsed half complete callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PeriodElapsedHalfCpltCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Output Compare callback in non-blocking mode\r\n * @param  htim TIM OC handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Input Capture callback in non-blocking mode\r\n * @param  htim TIM IC handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_IC_CaptureCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Input Capture half complete callback in non-blocking mode\r\n * @param  htim TIM IC handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_IC_CaptureHalfCpltCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  PWM Pulse finished callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  PWM Pulse finished half complete callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PWM_PulseFinishedHalfCpltCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Hall Trigger detection callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_TriggerCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Hall Trigger detection half complete callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_TriggerHalfCpltCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Timer error callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_ErrorCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n/**\r\n * @brief  Register a User TIM callback to be used instead of the weak predefined callback\r\n * @param htim tim handle\r\n * @param CallbackID ID of the callback to be registered\r\n *        This parameter can be one of the following values:\r\n *          @arg @ref HAL_TIM_BASE_MSPINIT_CB_ID Base MspInit Callback ID\r\n *          @arg @ref HAL_TIM_BASE_MSPDEINIT_CB_ID Base MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_IC_MSPINIT_CB_ID IC MspInit Callback ID\r\n *          @arg @ref HAL_TIM_IC_MSPDEINIT_CB_ID IC MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_OC_MSPINIT_CB_ID OC MspInit Callback ID\r\n *          @arg @ref HAL_TIM_OC_MSPDEINIT_CB_ID OC MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_PWM_MSPINIT_CB_ID PWM MspInit Callback ID\r\n *          @arg @ref HAL_TIM_PWM_MSPDEINIT_CB_ID PWM MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_ONE_PULSE_MSPINIT_CB_ID One Pulse MspInit Callback ID\r\n *          @arg @ref HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID One Pulse MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_ENCODER_MSPINIT_CB_ID Encoder MspInit Callback ID\r\n *          @arg @ref HAL_TIM_ENCODER_MSPDEINIT_CB_ID Encoder MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID Hall Sensor MspInit Callback ID\r\n *          @arg @ref HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID Hall Sensor MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_PERIOD_ELAPSED_CB_ID Period Elapsed Callback ID\r\n *          @arg @ref HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID Period Elapsed half complete Callback ID\r\n *          @arg @ref HAL_TIM_TRIGGER_CB_ID Trigger Callback ID\r\n *          @arg @ref HAL_TIM_TRIGGER_HALF_CB_ID Trigger half complete Callback ID\r\n *          @arg @ref HAL_TIM_IC_CAPTURE_CB_ID Input Capture Callback ID\r\n *          @arg @ref HAL_TIM_IC_CAPTURE_HALF_CB_ID Input Capture half complete Callback ID\r\n *          @arg @ref HAL_TIM_OC_DELAY_ELAPSED_CB_ID Output Compare Delay Elapsed Callback ID\r\n *          @arg @ref HAL_TIM_PWM_PULSE_FINISHED_CB_ID PWM Pulse Finished Callback ID\r\n *          @arg @ref HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID PWM Pulse Finished half complete Callback ID\r\n *          @arg @ref HAL_TIM_ERROR_CB_ID Error Callback ID\r\n *          @arg @ref HAL_TIM_COMMUTATION_CB_ID Commutation Callback ID\r\n *          @arg @ref HAL_TIM_COMMUTATION_HALF_CB_ID Commutation half complete Callback ID\r\n *          @arg @ref HAL_TIM_BREAK_CB_ID Break Callback ID\r\n *          @param pCallback pointer to the callback function\r\n *          @retval status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  if (pCallback == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n  /* Process locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  if (htim->State == HAL_TIM_STATE_READY) {\r\n    switch (CallbackID) {\r\n    case HAL_TIM_BASE_MSPINIT_CB_ID:\r\n      htim->Base_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_BASE_MSPDEINIT_CB_ID:\r\n      htim->Base_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPINIT_CB_ID:\r\n      htim->IC_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPDEINIT_CB_ID:\r\n      htim->IC_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPINIT_CB_ID:\r\n      htim->OC_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPDEINIT_CB_ID:\r\n      htim->OC_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPINIT_CB_ID:\r\n      htim->PWM_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPDEINIT_CB_ID:\r\n      htim->PWM_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID:\r\n      htim->OnePulse_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID:\r\n      htim->OnePulse_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPINIT_CB_ID:\r\n      htim->Encoder_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPDEINIT_CB_ID:\r\n      htim->Encoder_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID:\r\n      htim->HallSensor_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID:\r\n      htim->HallSensor_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PERIOD_ELAPSED_CB_ID:\r\n      htim->PeriodElapsedCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID:\r\n      htim->PeriodElapsedHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_TRIGGER_CB_ID:\r\n      htim->TriggerCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_TRIGGER_HALF_CB_ID:\r\n      htim->TriggerHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_CAPTURE_CB_ID:\r\n      htim->IC_CaptureCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_CAPTURE_HALF_CB_ID:\r\n      htim->IC_CaptureHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_OC_DELAY_ELAPSED_CB_ID:\r\n      htim->OC_DelayElapsedCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_PULSE_FINISHED_CB_ID:\r\n      htim->PWM_PulseFinishedCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID:\r\n      htim->PWM_PulseFinishedHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ERROR_CB_ID:\r\n      htim->ErrorCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_COMMUTATION_CB_ID:\r\n      htim->CommutationCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_COMMUTATION_HALF_CB_ID:\r\n      htim->CommutationHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_BREAK_CB_ID:\r\n      htim->BreakCallback = pCallback;\r\n      break;\r\n\r\n    default:\r\n      /* Return error status */\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else if (htim->State == HAL_TIM_STATE_RESET) {\r\n    switch (CallbackID) {\r\n    case HAL_TIM_BASE_MSPINIT_CB_ID:\r\n      htim->Base_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_BASE_MSPDEINIT_CB_ID:\r\n      htim->Base_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPINIT_CB_ID:\r\n      htim->IC_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPDEINIT_CB_ID:\r\n      htim->IC_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPINIT_CB_ID:\r\n      htim->OC_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPDEINIT_CB_ID:\r\n      htim->OC_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPINIT_CB_ID:\r\n      htim->PWM_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPDEINIT_CB_ID:\r\n      htim->PWM_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID:\r\n      htim->OnePulse_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID:\r\n      htim->OnePulse_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPINIT_CB_ID:\r\n      htim->Encoder_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPDEINIT_CB_ID:\r\n      htim->Encoder_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID:\r\n      htim->HallSensor_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID:\r\n      htim->HallSensor_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    default:\r\n      /* Return error status */\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else {\r\n    /* Return error status */\r\n    status = HAL_ERROR;\r\n  }\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Unregister a TIM callback\r\n *         TIM callback is redirected to the weak predefined callback\r\n * @param htim tim handle\r\n * @param CallbackID ID of the callback to be unregistered\r\n *        This parameter can be one of the following values:\r\n *          @arg @ref HAL_TIM_BASE_MSPINIT_CB_ID Base MspInit Callback ID\r\n *          @arg @ref HAL_TIM_BASE_MSPDEINIT_CB_ID Base MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_IC_MSPINIT_CB_ID IC MspInit Callback ID\r\n *          @arg @ref HAL_TIM_IC_MSPDEINIT_CB_ID IC MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_OC_MSPINIT_CB_ID OC MspInit Callback ID\r\n *          @arg @ref HAL_TIM_OC_MSPDEINIT_CB_ID OC MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_PWM_MSPINIT_CB_ID PWM MspInit Callback ID\r\n *          @arg @ref HAL_TIM_PWM_MSPDEINIT_CB_ID PWM MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_ONE_PULSE_MSPINIT_CB_ID One Pulse MspInit Callback ID\r\n *          @arg @ref HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID One Pulse MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_ENCODER_MSPINIT_CB_ID Encoder MspInit Callback ID\r\n *          @arg @ref HAL_TIM_ENCODER_MSPDEINIT_CB_ID Encoder MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID Hall Sensor MspInit Callback ID\r\n *          @arg @ref HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID Hall Sensor MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_PERIOD_ELAPSED_CB_ID Period Elapsed Callback ID\r\n *          @arg @ref HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID Period Elapsed half complete Callback ID\r\n *          @arg @ref HAL_TIM_TRIGGER_CB_ID Trigger Callback ID\r\n *          @arg @ref HAL_TIM_TRIGGER_HALF_CB_ID Trigger half complete Callback ID\r\n *          @arg @ref HAL_TIM_IC_CAPTURE_CB_ID Input Capture Callback ID\r\n *          @arg @ref HAL_TIM_IC_CAPTURE_HALF_CB_ID Input Capture half complete Callback ID\r\n *          @arg @ref HAL_TIM_OC_DELAY_ELAPSED_CB_ID Output Compare Delay Elapsed Callback ID\r\n *          @arg @ref HAL_TIM_PWM_PULSE_FINISHED_CB_ID PWM Pulse Finished Callback ID\r\n *          @arg @ref HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID PWM Pulse Finished half complete Callback ID\r\n *          @arg @ref HAL_TIM_ERROR_CB_ID Error Callback ID\r\n *          @arg @ref HAL_TIM_COMMUTATION_CB_ID Commutation Callback ID\r\n *          @arg @ref HAL_TIM_COMMUTATION_HALF_CB_ID Commutation half complete Callback ID\r\n *          @arg @ref HAL_TIM_BREAK_CB_ID Break Callback ID\r\n *          @retval status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  if (htim->State == HAL_TIM_STATE_READY) {\r\n    switch (CallbackID) {\r\n    case HAL_TIM_BASE_MSPINIT_CB_ID:\r\n      htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; /* Legacy weak Base MspInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_BASE_MSPDEINIT_CB_ID:\r\n      htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; /* Legacy weak Base Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPINIT_CB_ID:\r\n      htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; /* Legacy weak IC Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPDEINIT_CB_ID:\r\n      htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; /* Legacy weak IC Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPINIT_CB_ID:\r\n      htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; /* Legacy weak OC Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPDEINIT_CB_ID:\r\n      htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; /* Legacy weak OC Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPINIT_CB_ID:\r\n      htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; /* Legacy weak PWM Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPDEINIT_CB_ID:\r\n      htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; /* Legacy weak PWM Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID:\r\n      htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; /* Legacy weak One Pulse Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID:\r\n      htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; /* Legacy weak One Pulse Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPINIT_CB_ID:\r\n      htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; /* Legacy weak Encoder Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPDEINIT_CB_ID:\r\n      htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; /* Legacy weak Encoder Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID:\r\n      htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; /* Legacy weak Hall Sensor Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID:\r\n      htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; /* Legacy weak Hall Sensor Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PERIOD_ELAPSED_CB_ID:\r\n      htim->PeriodElapsedCallback = HAL_TIM_PeriodElapsedCallback; /* Legacy weak Period Elapsed Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID:\r\n      htim->PeriodElapsedHalfCpltCallback = HAL_TIM_PeriodElapsedHalfCpltCallback; /* Legacy weak Period Elapsed half complete Callback */\r\n      break;\r\n\r\n    case HAL_TIM_TRIGGER_CB_ID:\r\n      htim->TriggerCallback = HAL_TIM_TriggerCallback; /* Legacy weak Trigger Callback */\r\n      break;\r\n\r\n    case HAL_TIM_TRIGGER_HALF_CB_ID:\r\n      htim->TriggerHalfCpltCallback = HAL_TIM_TriggerHalfCpltCallback; /* Legacy weak Trigger half complete Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_CAPTURE_CB_ID:\r\n      htim->IC_CaptureCallback = HAL_TIM_IC_CaptureCallback; /* Legacy weak IC Capture Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_CAPTURE_HALF_CB_ID:\r\n      htim->IC_CaptureHalfCpltCallback = HAL_TIM_IC_CaptureHalfCpltCallback; /* Legacy weak IC Capture half complete Callback */\r\n      break;\r\n\r\n    case HAL_TIM_OC_DELAY_ELAPSED_CB_ID:\r\n      htim->OC_DelayElapsedCallback = HAL_TIM_OC_DelayElapsedCallback; /* Legacy weak OC Delay Elapsed Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_PULSE_FINISHED_CB_ID:\r\n      htim->PWM_PulseFinishedCallback = HAL_TIM_PWM_PulseFinishedCallback; /* Legacy weak PWM Pulse Finished Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID:\r\n      htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback; /* Legacy weak PWM Pulse Finished half complete Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ERROR_CB_ID:\r\n      htim->ErrorCallback = HAL_TIM_ErrorCallback; /* Legacy weak Error Callback */\r\n      break;\r\n\r\n    case HAL_TIM_COMMUTATION_CB_ID:\r\n      htim->CommutationCallback = HAL_TIMEx_CommutCallback; /* Legacy weak Commutation Callback */\r\n      break;\r\n\r\n    case HAL_TIM_COMMUTATION_HALF_CB_ID:\r\n      htim->CommutationHalfCpltCallback = HAL_TIMEx_CommutHalfCpltCallback; /* Legacy weak Commutation half complete Callback */\r\n      break;\r\n\r\n    case HAL_TIM_BREAK_CB_ID:\r\n      htim->BreakCallback = HAL_TIMEx_BreakCallback; /* Legacy weak Break Callback */\r\n      break;\r\n\r\n    default:\r\n      /* Return error status */\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else if (htim->State == HAL_TIM_STATE_RESET) {\r\n    switch (CallbackID) {\r\n    case HAL_TIM_BASE_MSPINIT_CB_ID:\r\n      htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; /* Legacy weak Base MspInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_BASE_MSPDEINIT_CB_ID:\r\n      htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; /* Legacy weak Base Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPINIT_CB_ID:\r\n      htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; /* Legacy weak IC Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPDEINIT_CB_ID:\r\n      htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; /* Legacy weak IC Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPINIT_CB_ID:\r\n      htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; /* Legacy weak OC Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPDEINIT_CB_ID:\r\n      htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; /* Legacy weak OC Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPINIT_CB_ID:\r\n      htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; /* Legacy weak PWM Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPDEINIT_CB_ID:\r\n      htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; /* Legacy weak PWM Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID:\r\n      htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; /* Legacy weak One Pulse Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID:\r\n      htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; /* Legacy weak One Pulse Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPINIT_CB_ID:\r\n      htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; /* Legacy weak Encoder Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPDEINIT_CB_ID:\r\n      htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; /* Legacy weak Encoder Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID:\r\n      htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; /* Legacy weak Hall Sensor Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID:\r\n      htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; /* Legacy weak Hall Sensor Msp DeInit Callback */\r\n      break;\r\n\r\n    default:\r\n      /* Return error status */\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else {\r\n    /* Return error status */\r\n    status = HAL_ERROR;\r\n  }\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return status;\r\n}\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions\r\n  *  @brief   TIM Peripheral State functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                        ##### Peripheral State functions #####\r\n  ==============================================================================\r\n    [..]\r\n    This subsection permits to get in run-time the status of the peripheral\r\n    and the data flow.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Return the TIM Base handle state.\r\n * @param  htim TIM Base handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM OC handle state.\r\n * @param  htim TIM Output Compare handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM PWM handle state.\r\n * @param  htim TIM handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM Input Capture handle state.\r\n * @param  htim TIM IC handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM One Pulse Mode handle state.\r\n * @param  htim TIM OPM handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM Encoder Mode handle state.\r\n * @param  htim TIM Encoder Interface handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM Encoder Mode handle state.\r\n * @param  htim TIM handle\r\n * @retval Active channel\r\n */\r\nHAL_TIM_ActiveChannel HAL_TIM_GetActiveChannel(TIM_HandleTypeDef *htim) { return htim->Channel; }\r\n\r\n/**\r\n * @brief  Return actual state of the TIM channel.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4\r\n *            @arg TIM_CHANNEL_5: TIM Channel 5\r\n *            @arg TIM_CHANNEL_6: TIM Channel 6\r\n * @retval TIM Channel state\r\n */\r\nHAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  HAL_TIM_ChannelStateTypeDef channel_state;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  channel_state = TIM_CHANNEL_STATE_GET(htim, Channel);\r\n\r\n  return channel_state;\r\n}\r\n\r\n/**\r\n * @brief  Return actual state of a DMA burst operation.\r\n * @param  htim TIM handle\r\n * @retval DMA burst state\r\n */\r\nHAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));\r\n\r\n  return htim->DMABurstState;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Private_Functions TIM Private Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  TIM DMA error callback\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIM_DMAError(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else {\r\n    htim->State = HAL_TIM_STATE_READY;\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->ErrorCallback(htim);\r\n#else\r\n  HAL_TIM_ErrorCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Delay Pulse complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n  HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Delay Pulse half complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->PWM_PulseFinishedHalfCpltCallback(htim);\r\n#else\r\n  HAL_TIM_PWM_PulseFinishedHalfCpltCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Capture complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->IC_CaptureCallback(htim);\r\n#else\r\n  HAL_TIM_IC_CaptureCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Capture half complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->IC_CaptureHalfCpltCallback(htim);\r\n#else\r\n  HAL_TIM_IC_CaptureHalfCpltCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Period Elapse complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (htim->hdma[TIM_DMA_ID_UPDATE]->Init.Mode == DMA_NORMAL) {\r\n    htim->State = HAL_TIM_STATE_READY;\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->PeriodElapsedCallback(htim);\r\n#else\r\n  HAL_TIM_PeriodElapsedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Period Elapse half complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->PeriodElapsedHalfCpltCallback(htim);\r\n#else\r\n  HAL_TIM_PeriodElapsedHalfCpltCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Trigger callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (htim->hdma[TIM_DMA_ID_TRIGGER]->Init.Mode == DMA_NORMAL) {\r\n    htim->State = HAL_TIM_STATE_READY;\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->TriggerCallback(htim);\r\n#else\r\n  HAL_TIM_TriggerCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Trigger half complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->TriggerHalfCpltCallback(htim);\r\n#else\r\n  HAL_TIM_TriggerHalfCpltCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  Time Base configuration\r\n * @param  TIMx TIM peripheral\r\n * @param  Structure TIM Base configuration structure\r\n * @retval None\r\n */\r\nvoid TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure) {\r\n  uint32_t tmpcr1;\r\n  tmpcr1 = TIMx->CR1;\r\n\r\n  /* Set TIM Time Base Unit parameters ---------------------------------------*/\r\n  if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx)) {\r\n    /* Select the Counter Mode */\r\n    tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS);\r\n    tmpcr1 |= Structure->CounterMode;\r\n  }\r\n\r\n  if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx)) {\r\n    /* Set the clock division */\r\n    tmpcr1 &= ~TIM_CR1_CKD;\r\n    tmpcr1 |= (uint32_t)Structure->ClockDivision;\r\n  }\r\n\r\n  /* Set the auto-reload preload */\r\n  MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload);\r\n\r\n  TIMx->CR1 = tmpcr1;\r\n\r\n  /* Set the Autoreload value */\r\n  TIMx->ARR = (uint32_t)Structure->Period;\r\n\r\n  /* Set the Prescaler value */\r\n  TIMx->PSC = Structure->Prescaler;\r\n\r\n  if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx)) {\r\n    /* Set the Repetition Counter value */\r\n    TIMx->RCR = Structure->RepetitionCounter;\r\n  }\r\n\r\n  /* Generate an update event to reload the Prescaler\r\n     and the repetition counter (only for advanced timer) value immediately */\r\n  TIMx->EGR = TIM_EGR_UG;\r\n}\r\n\r\n/**\r\n * @brief  Timer Output Compare 1 configuration\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  OC_Config The output configuration structure\r\n * @retval None\r\n */\r\nstatic void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) {\r\n  uint32_t tmpccmrx;\r\n  uint32_t tmpccer;\r\n  uint32_t tmpcr2;\r\n\r\n  /* Disable the Channel 1: Reset the CC1E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC1E;\r\n\r\n  /* Get the TIMx CCER register value */\r\n  tmpccer = TIMx->CCER;\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = TIMx->CR2;\r\n\r\n  /* Get the TIMx CCMR1 register value */\r\n  tmpccmrx = TIMx->CCMR1;\r\n\r\n  /* Reset the Output Compare Mode Bits */\r\n  tmpccmrx &= ~TIM_CCMR1_OC1M;\r\n  tmpccmrx &= ~TIM_CCMR1_CC1S;\r\n  /* Select the Output Compare Mode */\r\n  tmpccmrx |= OC_Config->OCMode;\r\n\r\n  /* Reset the Output Polarity level */\r\n  tmpccer &= ~TIM_CCER_CC1P;\r\n  /* Set the Output Compare Polarity */\r\n  tmpccer |= OC_Config->OCPolarity;\r\n\r\n  if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1)) {\r\n    /* Check parameters */\r\n    assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));\r\n\r\n    /* Reset the Output N Polarity level */\r\n    tmpccer &= ~TIM_CCER_CC1NP;\r\n    /* Set the Output N Polarity */\r\n    tmpccer |= OC_Config->OCNPolarity;\r\n    /* Reset the Output N State */\r\n    tmpccer &= ~TIM_CCER_CC1NE;\r\n  }\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(TIMx)) {\r\n    /* Check parameters */\r\n    assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));\r\n    assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));\r\n\r\n    /* Reset the Output Compare and Output Compare N IDLE State */\r\n    tmpcr2 &= ~TIM_CR2_OIS1;\r\n    tmpcr2 &= ~TIM_CR2_OIS1N;\r\n    /* Set the Output Idle state */\r\n    tmpcr2 |= OC_Config->OCIdleState;\r\n    /* Set the Output N Idle state */\r\n    tmpcr2 |= OC_Config->OCNIdleState;\r\n  }\r\n\r\n  /* Write to TIMx CR2 */\r\n  TIMx->CR2 = tmpcr2;\r\n\r\n  /* Write to TIMx CCMR1 */\r\n  TIMx->CCMR1 = tmpccmrx;\r\n\r\n  /* Set the Capture Compare Register value */\r\n  TIMx->CCR1 = OC_Config->Pulse;\r\n\r\n  /* Write to TIMx CCER */\r\n  TIMx->CCER = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Timer Output Compare 2 configuration\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  OC_Config The output configuration structure\r\n * @retval None\r\n */\r\nvoid TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) {\r\n  uint32_t tmpccmrx;\r\n  uint32_t tmpccer;\r\n  uint32_t tmpcr2;\r\n\r\n  /* Disable the Channel 2: Reset the CC2E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC2E;\r\n\r\n  /* Get the TIMx CCER register value */\r\n  tmpccer = TIMx->CCER;\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = TIMx->CR2;\r\n\r\n  /* Get the TIMx CCMR1 register value */\r\n  tmpccmrx = TIMx->CCMR1;\r\n\r\n  /* Reset the Output Compare mode and Capture/Compare selection Bits */\r\n  tmpccmrx &= ~TIM_CCMR1_OC2M;\r\n  tmpccmrx &= ~TIM_CCMR1_CC2S;\r\n\r\n  /* Select the Output Compare Mode */\r\n  tmpccmrx |= (OC_Config->OCMode << 8U);\r\n\r\n  /* Reset the Output Polarity level */\r\n  tmpccer &= ~TIM_CCER_CC2P;\r\n  /* Set the Output Compare Polarity */\r\n  tmpccer |= (OC_Config->OCPolarity << 4U);\r\n\r\n  if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_2)) {\r\n    assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));\r\n\r\n    /* Reset the Output N Polarity level */\r\n    tmpccer &= ~TIM_CCER_CC2NP;\r\n    /* Set the Output N Polarity */\r\n    tmpccer |= (OC_Config->OCNPolarity << 4U);\r\n    /* Reset the Output N State */\r\n    tmpccer &= ~TIM_CCER_CC2NE;\r\n  }\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(TIMx)) {\r\n    /* Check parameters */\r\n    assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));\r\n    assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));\r\n\r\n    /* Reset the Output Compare and Output Compare N IDLE State */\r\n    tmpcr2 &= ~TIM_CR2_OIS2;\r\n    tmpcr2 &= ~TIM_CR2_OIS2N;\r\n    /* Set the Output Idle state */\r\n    tmpcr2 |= (OC_Config->OCIdleState << 2U);\r\n    /* Set the Output N Idle state */\r\n    tmpcr2 |= (OC_Config->OCNIdleState << 2U);\r\n  }\r\n\r\n  /* Write to TIMx CR2 */\r\n  TIMx->CR2 = tmpcr2;\r\n\r\n  /* Write to TIMx CCMR1 */\r\n  TIMx->CCMR1 = tmpccmrx;\r\n\r\n  /* Set the Capture Compare Register value */\r\n  TIMx->CCR2 = OC_Config->Pulse;\r\n\r\n  /* Write to TIMx CCER */\r\n  TIMx->CCER = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Timer Output Compare 3 configuration\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  OC_Config The output configuration structure\r\n * @retval None\r\n */\r\nstatic void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) {\r\n  uint32_t tmpccmrx;\r\n  uint32_t tmpccer;\r\n  uint32_t tmpcr2;\r\n\r\n  /* Disable the Channel 3: Reset the CC2E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC3E;\r\n\r\n  /* Get the TIMx CCER register value */\r\n  tmpccer = TIMx->CCER;\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = TIMx->CR2;\r\n\r\n  /* Get the TIMx CCMR2 register value */\r\n  tmpccmrx = TIMx->CCMR2;\r\n\r\n  /* Reset the Output Compare mode and Capture/Compare selection Bits */\r\n  tmpccmrx &= ~TIM_CCMR2_OC3M;\r\n  tmpccmrx &= ~TIM_CCMR2_CC3S;\r\n  /* Select the Output Compare Mode */\r\n  tmpccmrx |= OC_Config->OCMode;\r\n\r\n  /* Reset the Output Polarity level */\r\n  tmpccer &= ~TIM_CCER_CC3P;\r\n  /* Set the Output Compare Polarity */\r\n  tmpccer |= (OC_Config->OCPolarity << 8U);\r\n\r\n  if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_3)) {\r\n    assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));\r\n\r\n    /* Reset the Output N Polarity level */\r\n    tmpccer &= ~TIM_CCER_CC3NP;\r\n    /* Set the Output N Polarity */\r\n    tmpccer |= (OC_Config->OCNPolarity << 8U);\r\n    /* Reset the Output N State */\r\n    tmpccer &= ~TIM_CCER_CC3NE;\r\n  }\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(TIMx)) {\r\n    /* Check parameters */\r\n    assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));\r\n    assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));\r\n\r\n    /* Reset the Output Compare and Output Compare N IDLE State */\r\n    tmpcr2 &= ~TIM_CR2_OIS3;\r\n    tmpcr2 &= ~TIM_CR2_OIS3N;\r\n    /* Set the Output Idle state */\r\n    tmpcr2 |= (OC_Config->OCIdleState << 4U);\r\n    /* Set the Output N Idle state */\r\n    tmpcr2 |= (OC_Config->OCNIdleState << 4U);\r\n  }\r\n\r\n  /* Write to TIMx CR2 */\r\n  TIMx->CR2 = tmpcr2;\r\n\r\n  /* Write to TIMx CCMR2 */\r\n  TIMx->CCMR2 = tmpccmrx;\r\n\r\n  /* Set the Capture Compare Register value */\r\n  TIMx->CCR3 = OC_Config->Pulse;\r\n\r\n  /* Write to TIMx CCER */\r\n  TIMx->CCER = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Timer Output Compare 4 configuration\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  OC_Config The output configuration structure\r\n * @retval None\r\n */\r\nstatic void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) {\r\n  uint32_t tmpccmrx;\r\n  uint32_t tmpccer;\r\n  uint32_t tmpcr2;\r\n\r\n  /* Disable the Channel 4: Reset the CC4E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC4E;\r\n\r\n  /* Get the TIMx CCER register value */\r\n  tmpccer = TIMx->CCER;\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = TIMx->CR2;\r\n\r\n  /* Get the TIMx CCMR2 register value */\r\n  tmpccmrx = TIMx->CCMR2;\r\n\r\n  /* Reset the Output Compare mode and Capture/Compare selection Bits */\r\n  tmpccmrx &= ~TIM_CCMR2_OC4M;\r\n  tmpccmrx &= ~TIM_CCMR2_CC4S;\r\n\r\n  /* Select the Output Compare Mode */\r\n  tmpccmrx |= (OC_Config->OCMode << 8U);\r\n\r\n  /* Reset the Output Polarity level */\r\n  tmpccer &= ~TIM_CCER_CC4P;\r\n  /* Set the Output Compare Polarity */\r\n  tmpccer |= (OC_Config->OCPolarity << 12U);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(TIMx)) {\r\n    /* Check parameters */\r\n    assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));\r\n\r\n    /* Reset the Output Compare IDLE State */\r\n    tmpcr2 &= ~TIM_CR2_OIS4;\r\n\r\n    /* Set the Output Idle state */\r\n    tmpcr2 |= (OC_Config->OCIdleState << 6U);\r\n  }\r\n\r\n  /* Write to TIMx CR2 */\r\n  TIMx->CR2 = tmpcr2;\r\n\r\n  /* Write to TIMx CCMR2 */\r\n  TIMx->CCMR2 = tmpccmrx;\r\n\r\n  /* Set the Capture Compare Register value */\r\n  TIMx->CCR4 = OC_Config->Pulse;\r\n\r\n  /* Write to TIMx CCER */\r\n  TIMx->CCER = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Slave Timer configuration function\r\n * @param  htim TIM handle\r\n * @param  sSlaveConfig Slave timer configuration\r\n * @retval None\r\n */\r\nstatic HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig) {\r\n  uint32_t tmpsmcr;\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Get the TIMx SMCR register value */\r\n  tmpsmcr = htim->Instance->SMCR;\r\n\r\n  /* Reset the Trigger Selection Bits */\r\n  tmpsmcr &= ~TIM_SMCR_TS;\r\n  /* Set the Input Trigger source */\r\n  tmpsmcr |= sSlaveConfig->InputTrigger;\r\n\r\n  /* Reset the slave mode Bits */\r\n  tmpsmcr &= ~TIM_SMCR_SMS;\r\n  /* Set the slave mode */\r\n  tmpsmcr |= sSlaveConfig->SlaveMode;\r\n\r\n  /* Write to TIMx SMCR */\r\n  htim->Instance->SMCR = tmpsmcr;\r\n\r\n  /* Configure the trigger prescaler, filter, and polarity */\r\n  switch (sSlaveConfig->InputTrigger) {\r\n  case TIM_TS_ETRF: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance));\r\n    assert_param(IS_TIM_TRIGGERPRESCALER(sSlaveConfig->TriggerPrescaler));\r\n    assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity));\r\n    assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter));\r\n    /* Configure the ETR Trigger source */\r\n    TIM_ETR_SetConfig(htim->Instance, sSlaveConfig->TriggerPrescaler, sSlaveConfig->TriggerPolarity, sSlaveConfig->TriggerFilter);\r\n    break;\r\n  }\r\n\r\n  case TIM_TS_TI1F_ED: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n    assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter));\r\n\r\n    if (sSlaveConfig->SlaveMode == TIM_SLAVEMODE_GATED) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Disable the Channel 1: Reset the CC1E Bit */\r\n    tmpccer = htim->Instance->CCER;\r\n    htim->Instance->CCER &= ~TIM_CCER_CC1E;\r\n    tmpccmr1 = htim->Instance->CCMR1;\r\n\r\n    /* Set the filter */\r\n    tmpccmr1 &= ~TIM_CCMR1_IC1F;\r\n    tmpccmr1 |= ((sSlaveConfig->TriggerFilter) << 4U);\r\n\r\n    /* Write to TIMx CCMR1 and CCER registers */\r\n    htim->Instance->CCMR1 = tmpccmr1;\r\n    htim->Instance->CCER  = tmpccer;\r\n    break;\r\n  }\r\n\r\n  case TIM_TS_TI1FP1: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n    assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity));\r\n    assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter));\r\n\r\n    /* Configure TI1 Filter and Polarity */\r\n    TIM_TI1_ConfigInputStage(htim->Instance, sSlaveConfig->TriggerPolarity, sSlaveConfig->TriggerFilter);\r\n    break;\r\n  }\r\n\r\n  case TIM_TS_TI2FP2: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n    assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity));\r\n    assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter));\r\n\r\n    /* Configure TI2 Filter and Polarity */\r\n    TIM_TI2_ConfigInputStage(htim->Instance, sSlaveConfig->TriggerPolarity, sSlaveConfig->TriggerFilter);\r\n    break;\r\n  }\r\n\r\n  case TIM_TS_ITR0:\r\n  case TIM_TS_ITR1:\r\n  case TIM_TS_ITR2:\r\n  case TIM_TS_ITR3: {\r\n    /* Check the parameter */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TI1 as Input.\r\n * @param  TIMx to select the TIM peripheral.\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n *            @arg TIM_ICPOLARITY_BOTHEDGE\r\n * @param  TIM_ICSelection specifies the input to be used.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICSELECTION_DIRECTTI: TIM Input 1 is selected to be connected to IC1.\r\n *            @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 1 is selected to be connected to IC2.\r\n *            @arg TIM_ICSELECTION_TRC: TIM Input 1 is selected to be connected to TRC.\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @retval None\r\n * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI2FP1\r\n *       (on channel2 path) is used as the input signal. Therefore CCMR1 must be\r\n *        protected against un-initialized filter and polarity values.\r\n */\r\nvoid TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 1: Reset the CC1E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC1E;\r\n  tmpccmr1 = TIMx->CCMR1;\r\n  tmpccer  = TIMx->CCER;\r\n\r\n  /* Select the Input */\r\n  if (IS_TIM_CC2_INSTANCE(TIMx) != RESET) {\r\n    tmpccmr1 &= ~TIM_CCMR1_CC1S;\r\n    tmpccmr1 |= TIM_ICSelection;\r\n  } else {\r\n    tmpccmr1 |= TIM_CCMR1_CC1S_0;\r\n  }\r\n\r\n  /* Set the filter */\r\n  tmpccmr1 &= ~TIM_CCMR1_IC1F;\r\n  tmpccmr1 |= ((TIM_ICFilter << 4U) & TIM_CCMR1_IC1F);\r\n\r\n  /* Select the Polarity and set the CC1E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);\r\n  tmpccer |= (TIM_ICPolarity & (TIM_CCER_CC1P | TIM_CCER_CC1NP));\r\n\r\n  /* Write to TIMx CCMR1 and CCER registers */\r\n  TIMx->CCMR1 = tmpccmr1;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Configure the Polarity and Filter for TI1.\r\n * @param  TIMx to select the TIM peripheral.\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n *            @arg TIM_ICPOLARITY_BOTHEDGE\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @retval None\r\n */\r\nstatic void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 1: Reset the CC1E Bit */\r\n  tmpccer = TIMx->CCER;\r\n  TIMx->CCER &= ~TIM_CCER_CC1E;\r\n  tmpccmr1 = TIMx->CCMR1;\r\n\r\n  /* Set the filter */\r\n  tmpccmr1 &= ~TIM_CCMR1_IC1F;\r\n  tmpccmr1 |= (TIM_ICFilter << 4U);\r\n\r\n  /* Select the Polarity and set the CC1E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);\r\n  tmpccer |= TIM_ICPolarity;\r\n\r\n  /* Write to TIMx CCMR1 and CCER registers */\r\n  TIMx->CCMR1 = tmpccmr1;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TI2 as Input.\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n *            @arg TIM_ICPOLARITY_BOTHEDGE\r\n * @param  TIM_ICSelection specifies the input to be used.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICSELECTION_DIRECTTI: TIM Input 2 is selected to be connected to IC2.\r\n *            @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 2 is selected to be connected to IC1.\r\n *            @arg TIM_ICSELECTION_TRC: TIM Input 2 is selected to be connected to TRC.\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @retval None\r\n * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI1FP2\r\n *       (on channel1 path) is used as the input signal. Therefore CCMR1 must be\r\n *        protected against un-initialized filter and polarity values.\r\n */\r\nstatic void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 2: Reset the CC2E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC2E;\r\n  tmpccmr1 = TIMx->CCMR1;\r\n  tmpccer  = TIMx->CCER;\r\n\r\n  /* Select the Input */\r\n  tmpccmr1 &= ~TIM_CCMR1_CC2S;\r\n  tmpccmr1 |= (TIM_ICSelection << 8U);\r\n\r\n  /* Set the filter */\r\n  tmpccmr1 &= ~TIM_CCMR1_IC2F;\r\n  tmpccmr1 |= ((TIM_ICFilter << 12U) & TIM_CCMR1_IC2F);\r\n\r\n  /* Select the Polarity and set the CC2E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);\r\n  tmpccer |= ((TIM_ICPolarity << 4U) & (TIM_CCER_CC2P | TIM_CCER_CC2NP));\r\n\r\n  /* Write to TIMx CCMR1 and CCER registers */\r\n  TIMx->CCMR1 = tmpccmr1;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Configure the Polarity and Filter for TI2.\r\n * @param  TIMx to select the TIM peripheral.\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n *            @arg TIM_ICPOLARITY_BOTHEDGE\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @retval None\r\n */\r\nstatic void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 2: Reset the CC2E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC2E;\r\n  tmpccmr1 = TIMx->CCMR1;\r\n  tmpccer  = TIMx->CCER;\r\n\r\n  /* Set the filter */\r\n  tmpccmr1 &= ~TIM_CCMR1_IC2F;\r\n  tmpccmr1 |= (TIM_ICFilter << 12U);\r\n\r\n  /* Select the Polarity and set the CC2E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);\r\n  tmpccer |= (TIM_ICPolarity << 4U);\r\n\r\n  /* Write to TIMx CCMR1 and CCER registers */\r\n  TIMx->CCMR1 = tmpccmr1;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TI3 as Input.\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n * @param  TIM_ICSelection specifies the input to be used.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICSELECTION_DIRECTTI: TIM Input 3 is selected to be connected to IC3.\r\n *            @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 3 is selected to be connected to IC4.\r\n *            @arg TIM_ICSELECTION_TRC: TIM Input 3 is selected to be connected to TRC.\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @retval None\r\n * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI3FP4\r\n *       (on channel1 path) is used as the input signal. Therefore CCMR2 must be\r\n *        protected against un-initialized filter and polarity values.\r\n */\r\nstatic void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr2;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 3: Reset the CC3E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC3E;\r\n  tmpccmr2 = TIMx->CCMR2;\r\n  tmpccer  = TIMx->CCER;\r\n\r\n  /* Select the Input */\r\n  tmpccmr2 &= ~TIM_CCMR2_CC3S;\r\n  tmpccmr2 |= TIM_ICSelection;\r\n\r\n  /* Set the filter */\r\n  tmpccmr2 &= ~TIM_CCMR2_IC3F;\r\n  tmpccmr2 |= ((TIM_ICFilter << 4U) & TIM_CCMR2_IC3F);\r\n\r\n  /* Select the Polarity and set the CC3E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC3P);\r\n  tmpccer |= ((TIM_ICPolarity << 8U) & TIM_CCER_CC3P);\r\n\r\n  /* Write to TIMx CCMR2 and CCER registers */\r\n  TIMx->CCMR2 = tmpccmr2;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TI4 as Input.\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n * @param  TIM_ICSelection specifies the input to be used.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICSELECTION_DIRECTTI: TIM Input 4 is selected to be connected to IC4.\r\n *            @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 4 is selected to be connected to IC3.\r\n *            @arg TIM_ICSELECTION_TRC: TIM Input 4 is selected to be connected to TRC.\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI4FP3\r\n *       (on channel1 path) is used as the input signal. Therefore CCMR2 must be\r\n *        protected against un-initialized filter and polarity values.\r\n * @retval None\r\n */\r\nstatic void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr2;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 4: Reset the CC4E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC4E;\r\n  tmpccmr2 = TIMx->CCMR2;\r\n  tmpccer  = TIMx->CCER;\r\n\r\n  /* Select the Input */\r\n  tmpccmr2 &= ~TIM_CCMR2_CC4S;\r\n  tmpccmr2 |= (TIM_ICSelection << 8U);\r\n\r\n  /* Set the filter */\r\n  tmpccmr2 &= ~TIM_CCMR2_IC4F;\r\n  tmpccmr2 |= ((TIM_ICFilter << 12U) & TIM_CCMR2_IC4F);\r\n\r\n  /* Select the Polarity and set the CC4E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC4P);\r\n  tmpccer |= ((TIM_ICPolarity << 12U) & TIM_CCER_CC4P);\r\n\r\n  /* Write to TIMx CCMR2 and CCER registers */\r\n  TIMx->CCMR2 = tmpccmr2;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Selects the Input Trigger source\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  InputTriggerSource The Input Trigger source.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_TS_ITR0: Internal Trigger 0\r\n *            @arg TIM_TS_ITR1: Internal Trigger 1\r\n *            @arg TIM_TS_ITR2: Internal Trigger 2\r\n *            @arg TIM_TS_ITR3: Internal Trigger 3\r\n *            @arg TIM_TS_TI1F_ED: TI1 Edge Detector\r\n *            @arg TIM_TS_TI1FP1: Filtered Timer Input 1\r\n *            @arg TIM_TS_TI2FP2: Filtered Timer Input 2\r\n *            @arg TIM_TS_ETRF: External Trigger input\r\n * @retval None\r\n */\r\nstatic void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Get the TIMx SMCR register value */\r\n  tmpsmcr = TIMx->SMCR;\r\n  /* Reset the TS Bits */\r\n  tmpsmcr &= ~TIM_SMCR_TS;\r\n  /* Set the Input Trigger source and the slave mode*/\r\n  tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1);\r\n  /* Write to TIMx SMCR */\r\n  TIMx->SMCR = tmpsmcr;\r\n}\r\n/**\r\n * @brief  Configures the TIMx External Trigger (ETR).\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  TIM_ExtTRGPrescaler The external Trigger Prescaler.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ETRPRESCALER_DIV1: ETRP Prescaler OFF.\r\n *            @arg TIM_ETRPRESCALER_DIV2: ETRP frequency divided by 2.\r\n *            @arg TIM_ETRPRESCALER_DIV4: ETRP frequency divided by 4.\r\n *            @arg TIM_ETRPRESCALER_DIV8: ETRP frequency divided by 8.\r\n * @param  TIM_ExtTRGPolarity The external Trigger Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ETRPOLARITY_INVERTED: active low or falling edge active.\r\n *            @arg TIM_ETRPOLARITY_NONINVERTED: active high or rising edge active.\r\n * @param  ExtTRGFilter External Trigger Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F\r\n * @retval None\r\n */\r\nvoid TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter) {\r\n  uint32_t tmpsmcr;\r\n\r\n  tmpsmcr = TIMx->SMCR;\r\n\r\n  /* Reset the ETR Bits */\r\n  tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);\r\n\r\n  /* Set the Prescaler, the Filter value and the Polarity */\r\n  tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U)));\r\n\r\n  /* Write to TIMx SMCR */\r\n  TIMx->SMCR = tmpsmcr;\r\n}\r\n\r\n/**\r\n * @brief  Enables or disables the TIM Capture Compare Channel x.\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  Channel specifies the TIM Channel\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4\r\n * @param  ChannelState specifies the TIM Channel CCxE bit new state.\r\n *          This parameter can be: TIM_CCx_ENABLE or TIM_CCx_DISABLE.\r\n * @retval None\r\n */\r\nvoid TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState) {\r\n  uint32_t tmp;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CC1_INSTANCE(TIMx));\r\n  assert_param(IS_TIM_CHANNELS(Channel));\r\n\r\n  tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */\r\n\r\n  /* Reset the CCxE Bit */\r\n  TIMx->CCER &= ~tmp;\r\n\r\n  /* Set or reset the CCxE Bit */\r\n  TIMx->CCER |= (uint32_t)(ChannelState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */\r\n}\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n/**\r\n * @brief  Reset interrupt callbacks to the legacy weak callbacks.\r\n * @param  htim pointer to a TIM_HandleTypeDef structure that contains\r\n *                the configuration information for TIM module.\r\n * @retval None\r\n */\r\nvoid TIM_ResetCallback(TIM_HandleTypeDef *htim) {\r\n  /* Reset the TIM callback to the legacy weak callbacks */\r\n  htim->PeriodElapsedCallback             = HAL_TIM_PeriodElapsedCallback;             /* Legacy weak PeriodElapsedCallback             */\r\n  htim->PeriodElapsedHalfCpltCallback     = HAL_TIM_PeriodElapsedHalfCpltCallback;     /* Legacy weak PeriodElapsedHalfCpltCallback     */\r\n  htim->TriggerCallback                   = HAL_TIM_TriggerCallback;                   /* Legacy weak TriggerCallback                   */\r\n  htim->TriggerHalfCpltCallback           = HAL_TIM_TriggerHalfCpltCallback;           /* Legacy weak TriggerHalfCpltCallback           */\r\n  htim->IC_CaptureCallback                = HAL_TIM_IC_CaptureCallback;                /* Legacy weak IC_CaptureCallback                */\r\n  htim->IC_CaptureHalfCpltCallback        = HAL_TIM_IC_CaptureHalfCpltCallback;        /* Legacy weak IC_CaptureHalfCpltCallback        */\r\n  htim->OC_DelayElapsedCallback           = HAL_TIM_OC_DelayElapsedCallback;           /* Legacy weak OC_DelayElapsedCallback           */\r\n  htim->PWM_PulseFinishedCallback         = HAL_TIM_PWM_PulseFinishedCallback;         /* Legacy weak PWM_PulseFinishedCallback         */\r\n  htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback; /* Legacy weak PWM_PulseFinishedHalfCpltCallback */\r\n  htim->ErrorCallback                     = HAL_TIM_ErrorCallback;                     /* Legacy weak ErrorCallback                     */\r\n  htim->CommutationCallback               = HAL_TIMEx_CommutCallback;                  /* Legacy weak CommutationCallback               */\r\n  htim->CommutationHalfCpltCallback       = HAL_TIMEx_CommutHalfCpltCallback;          /* Legacy weak CommutationHalfCpltCallback       */\r\n  htim->BreakCallback                     = HAL_TIMEx_BreakCallback;                   /* Legacy weak BreakCallback                     */\r\n}\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_TIM_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_tim_ex.c\r\n  * @author  MCD Application Team\r\n  * @brief   TIM HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the Timer Extended peripheral:\r\n  *           + Time Hall Sensor Interface Initialization\r\n  *           + Time Hall Sensor Interface Start\r\n  *           + Time Complementary signal break and dead time configuration\r\n  *           + Time Master and Slave synchronization configuration\r\n  *           + Timer remapping capabilities configuration\r\n  @verbatim\r\n  ==============================================================================\r\n                      ##### TIMER Extended features #####\r\n  ==============================================================================\r\n  [..]\r\n    The Timer Extended features include:\r\n    (#) Complementary outputs with programmable dead-time for :\r\n        (++) Output Compare\r\n        (++) PWM generation (Edge and Center-aligned Mode)\r\n        (++) One-pulse mode output\r\n    (#) Synchronization circuit to control the timer with external signals and to\r\n        interconnect several timers together.\r\n    (#) Break input to put the timer output signals in reset state or in a known state.\r\n    (#) Supports incremental (quadrature) encoder and hall-sensor circuitry for\r\n        positioning purposes\r\n\r\n            ##### How to use this driver #####\r\n  ==============================================================================\r\n    [..]\r\n     (#) Initialize the TIM low level resources by implementing the following functions\r\n         depending on the selected feature:\r\n           (++) Hall Sensor output : HAL_TIMEx_HallSensor_MspInit()\r\n\r\n     (#) Initialize the TIM low level resources :\r\n        (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE();\r\n        (##) TIM pins configuration\r\n            (+++) Enable the clock for the TIM GPIOs using the following function:\r\n              __HAL_RCC_GPIOx_CLK_ENABLE();\r\n            (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init();\r\n\r\n     (#) The external Clock can be configured, if needed (the default clock is the\r\n         internal clock from the APBx), using the following function:\r\n         HAL_TIM_ConfigClockSource, the clock configuration should be done before\r\n         any start function.\r\n\r\n     (#) Configure the TIM in the desired functioning mode using one of the\r\n         initialization function of this driver:\r\n          (++) HAL_TIMEx_HallSensor_Init() and HAL_TIMEx_ConfigCommutEvent(): to use the\r\n               Timer Hall Sensor Interface and the commutation event with the corresponding\r\n               Interrupt and DMA request if needed (Note that One Timer is used to interface\r\n               with the Hall sensor Interface and another Timer should be used to use\r\n               the commutation event).\r\n\r\n     (#) Activate the TIM peripheral using one of the start functions:\r\n           (++) Complementary Output Compare : HAL_TIMEx_OCN_Start(), HAL_TIMEx_OCN_Start_DMA(), HAL_TIMEx_OCN_Start_IT()\r\n           (++) Complementary PWM generation : HAL_TIMEx_PWMN_Start(), HAL_TIMEx_PWMN_Start_DMA(), HAL_TIMEx_PWMN_Start_IT()\r\n           (++) Complementary One-pulse mode output : HAL_TIMEx_OnePulseN_Start(), HAL_TIMEx_OnePulseN_Start_IT()\r\n           (++) Hall Sensor output : HAL_TIMEx_HallSensor_Start(), HAL_TIMEx_HallSensor_Start_DMA(), HAL_TIMEx_HallSensor_Start_IT().\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup TIMEx TIMEx\r\n * @brief TIM Extended HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_TIM_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/* Private macros ------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\nstatic void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma);\r\nstatic void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma);\r\nstatic void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState);\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @defgroup TIMEx_Exported_Functions TIM Extended Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions\r\n  * @brief    Timer Hall Sensor functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                      ##### Timer Hall Sensor functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure TIM HAL Sensor.\r\n    (+) De-initialize TIM HAL Sensor.\r\n    (+) Start the Hall Sensor Interface.\r\n    (+) Stop the Hall Sensor Interface.\r\n    (+) Start the Hall Sensor Interface and enable interrupts.\r\n    (+) Stop the Hall Sensor Interface and disable interrupts.\r\n    (+) Start the Hall Sensor Interface and enable DMA transfers.\r\n    (+) Stop the Hall Sensor Interface and disable DMA transfers.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM Hall Sensor Interface and initialize the associated handle.\r\n * @note   When the timer instance is initialized in Hall Sensor Interface mode,\r\n *         timer channels 1 and channel 2 are reserved and cannot be used for\r\n *         other purpose.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @param  sConfig TIM Hall Sensor configuration structure\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig) {\r\n  TIM_OC_InitTypeDef OC_Config;\r\n\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n  assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity));\r\n  assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));\r\n  assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy week callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->HallSensor_MspInitCallback == NULL) {\r\n      htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->HallSensor_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIMEx_HallSensor_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Configure the Time base in the Encoder Mode */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Configure the Channel 1 as Input Channel to interface with the three Outputs of the  Hall sensor */\r\n  TIM_TI1_SetConfig(htim->Instance, sConfig->IC1Polarity, TIM_ICSELECTION_TRC, sConfig->IC1Filter);\r\n\r\n  /* Reset the IC1PSC Bits */\r\n  htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;\r\n  /* Set the IC1PSC value */\r\n  htim->Instance->CCMR1 |= sConfig->IC1Prescaler;\r\n\r\n  /* Enable the Hall sensor interface (XOR function of the three inputs) */\r\n  htim->Instance->CR2 |= TIM_CR2_TI1S;\r\n\r\n  /* Select the TIM_TS_TI1F_ED signal as Input trigger for the TIM */\r\n  htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n  htim->Instance->SMCR |= TIM_TS_TI1F_ED;\r\n\r\n  /* Use the TIM_TS_TI1F_ED signal to reset the TIM counter each edge detection */\r\n  htim->Instance->SMCR &= ~TIM_SMCR_SMS;\r\n  htim->Instance->SMCR |= TIM_SLAVEMODE_RESET;\r\n\r\n  /* Program channel 2 in PWM 2 mode with the desired Commutation_Delay*/\r\n  OC_Config.OCFastMode   = TIM_OCFAST_DISABLE;\r\n  OC_Config.OCIdleState  = TIM_OCIDLESTATE_RESET;\r\n  OC_Config.OCMode       = TIM_OCMODE_PWM2;\r\n  OC_Config.OCNIdleState = TIM_OCNIDLESTATE_RESET;\r\n  OC_Config.OCNPolarity  = TIM_OCNPOLARITY_HIGH;\r\n  OC_Config.OCPolarity   = TIM_OCPOLARITY_HIGH;\r\n  OC_Config.Pulse        = sConfig->Commutation_Delay;\r\n\r\n  TIM_OC2_SetConfig(htim->Instance, &OC_Config);\r\n\r\n  /* Select OC2REF as trigger output on TRGO: write the MMS bits in the TIMx_CR2\r\n    register to 101 */\r\n  htim->Instance->CR2 &= ~TIM_CR2_MMS;\r\n  htim->Instance->CR2 |= TIM_TRGO_OC2REF;\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM Hall Sensor interface\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->HallSensor_MspDeInitCallback == NULL) {\r\n    htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->HallSensor_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */\r\n  HAL_TIMEx_HallSensor_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Change the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Hall Sensor MSP.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIMEx_HallSensor_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM Hall Sensor MSP.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIMEx_HallSensor_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Hall Sensor Interface.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Check the TIM channels state */\r\n  if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n      (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Input Capture channel 1\r\n  (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Hall sensor Interface.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channels 1, 2 and 3\r\n    (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Hall Sensor Interface in interrupt mode.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Check the TIM channels state */\r\n  if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n      (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the capture compare Interrupts 1 event */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Enable the Input Capture channel 1\r\n    (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Hall Sensor Interface in interrupt mode.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channel 1\r\n    (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the capture compare Interrupts event */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Hall Sensor Interface in DMA mode.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @param  pData The destination Buffer address.\r\n * @param  Length The length of data to be transferred from TIM peripheral to memory.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM channel state */\r\n  if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)) {\r\n    return HAL_BUSY;\r\n  } else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY)) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Enable the Input Capture channel 1\r\n    (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n\r\n  /* Set the DMA Input Capture 1 Callbacks */\r\n  htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n  htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n  /* Set the DMA error callback */\r\n  htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n  /* Enable the DMA channel for Capture 1*/\r\n  if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length) != HAL_OK) {\r\n    /* Return error status */\r\n    return HAL_ERROR;\r\n  }\r\n  /* Enable the capture compare 1 Interrupt */\r\n  __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Hall Sensor Interface in DMA mode.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channel 1\r\n    (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the capture compare Interrupts 1 event */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n\r\n  (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions\r\n  *  @brief   Timer Complementary Output Compare functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n              ##### Timer Complementary Output Compare functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Start the Complementary Output Compare/PWM.\r\n    (+) Stop the Complementary Output Compare/PWM.\r\n    (+) Start the Complementary Output Compare/PWM and enable interrupts.\r\n    (+) Stop the Complementary Output Compare/PWM and disable interrupts.\r\n    (+) Start the Complementary Output Compare/PWM and enable DMA transfers.\r\n    (+) Stop the Complementary Output Compare/PWM and disable DMA transfers.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation on the complementary\r\n *         output.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation on the complementary\r\n *         output.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Disable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation in interrupt mode\r\n *         on the complementary output.\r\n * @param  htim TIM OC handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Enable the TIM Output Compare interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Enable the TIM Output Compare interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Enable the TIM Output Compare interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the TIM Break interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK);\r\n\r\n  /* Enable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation in interrupt mode\r\n *         on the complementary output.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpccer;\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Output Compare interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Output Compare interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Output Compare interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the TIM Break interrupt (only if no more channel is active) */\r\n  tmpccer = htim->Instance->CCER;\r\n  if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == (uint32_t)RESET) {\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK);\r\n  }\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation in DMA mode\r\n *         on the complementary output.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @param  pData The source Buffer address.\r\n * @param  Length The length of data to be transferred from memory to TIM peripheral\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Set the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Output Compare DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Output Compare DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Output Compare DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation in DMA mode\r\n *         on the complementary output.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Output Compare DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Output Compare DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Output Compare DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions\r\n  * @brief    Timer Complementary PWM functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                 ##### Timer Complementary PWM functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Start the Complementary PWM.\r\n    (+) Stop the Complementary PWM.\r\n    (+) Start the Complementary PWM and enable interrupts.\r\n    (+) Stop the Complementary PWM and disable interrupts.\r\n    (+) Start the Complementary PWM and enable DMA transfers.\r\n    (+) Stop the Complementary PWM and disable DMA transfers.\r\n    (+) Start the Complementary Input Capture measurement.\r\n    (+) Stop the Complementary Input Capture.\r\n    (+) Start the Complementary Input Capture and enable interrupts.\r\n    (+) Stop the Complementary Input Capture and disable interrupts.\r\n    (+) Start the Complementary Input Capture and enable DMA transfers.\r\n    (+) Stop the Complementary Input Capture and disable DMA transfers.\r\n    (+) Start the Complementary One Pulse generation.\r\n    (+) Stop the Complementary One Pulse.\r\n    (+) Start the Complementary One Pulse and enable interrupts.\r\n    (+) Stop the Complementary One Pulse and disable interrupts.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Starts the PWM signal generation on the complementary output.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the complementary PWM output  */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the PWM signal generation on the complementary output.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Disable the complementary PWM output  */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the PWM signal generation in interrupt mode on the\r\n *         complementary output.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Enable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Enable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Enable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the TIM Break interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK);\r\n\r\n  /* Enable the complementary PWM output  */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the PWM signal generation in interrupt mode on the\r\n *         complementary output.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpccer;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the complementary PWM output  */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the TIM Break interrupt (only if no more channel is active) */\r\n  tmpccer = htim->Instance->CCER;\r\n  if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == (uint32_t)RESET) {\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK);\r\n  }\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM PWM signal generation in DMA mode on the\r\n *         complementary output\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @param  pData The source Buffer address.\r\n * @param  Length The length of data to be transferred from memory to TIM peripheral\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Set the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 3 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the complementary PWM output  */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM PWM signal generation in DMA mode on the complementary\r\n *         output\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the complementary PWM output */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions\r\n  * @brief    Timer Complementary One Pulse functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                ##### Timer Complementary One Pulse functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Start the Complementary One Pulse generation.\r\n    (+) Stop the Complementary One Pulse.\r\n    (+) Start the Complementary One Pulse and enable interrupts.\r\n    (+) Stop the Complementary One Pulse and disable interrupts.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Starts the TIM One Pulse signal generation on the complementary\r\n *         output.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  uint32_t                    input_channel        = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1;\r\n  HAL_TIM_ChannelStateTypeDef input_channel_state  = TIM_CHANNEL_STATE_GET(htim, input_channel);\r\n  HAL_TIM_ChannelStateTypeDef output_channel_state = TIM_CHANNEL_N_STATE_GET(htim, OutputChannel);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));\r\n\r\n  /* Check the TIM channels state */\r\n  if ((output_channel_state != HAL_TIM_CHANNEL_STATE_READY) || (input_channel_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, OutputChannel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, input_channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the complementary One Pulse output channel and the Input Capture channel */\r\n  TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM One Pulse signal generation on the complementary\r\n *         output.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));\r\n\r\n  /* Disable the complementary One Pulse output channel and the Input Capture channel */\r\n  TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM  channels state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, OutputChannel, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, input_channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM One Pulse signal generation in interrupt mode on the\r\n *         complementary channel.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  uint32_t                    input_channel        = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1;\r\n  HAL_TIM_ChannelStateTypeDef input_channel_state  = TIM_CHANNEL_STATE_GET(htim, input_channel);\r\n  HAL_TIM_ChannelStateTypeDef output_channel_state = TIM_CHANNEL_N_STATE_GET(htim, OutputChannel);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));\r\n\r\n  /* Check the TIM channels state */\r\n  if ((output_channel_state != HAL_TIM_CHANNEL_STATE_READY) || (input_channel_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, OutputChannel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, input_channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the TIM Capture/Compare 1 interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Enable the TIM Capture/Compare 2 interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n\r\n  /* Enable the complementary One Pulse output channel and the Input Capture channel */\r\n  TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM One Pulse signal generation in interrupt mode on the\r\n *         complementary channel.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));\r\n\r\n  /* Disable the TIM Capture/Compare 1 interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Disable the TIM Capture/Compare 2 interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n\r\n  /* Disable the complementary One Pulse output channel and the Input Capture channel */\r\n  TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM  channels state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, OutputChannel, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, input_channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions\r\n  * @brief    Peripheral Control functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                    ##### Peripheral Control functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n      (+) Configure the commutation event in case of use of the Hall sensor interface.\r\n      (+) Configure Output channels for OC and PWM mode.\r\n\r\n      (+) Configure Complementary channels, break features and dead time.\r\n      (+) Configure Master synchronization.\r\n      (+) Configure timer remapping capabilities.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Configure the TIM commutation event sequence.\r\n * @note  This function is mandatory to use the commutation event in order to\r\n *        update the configuration at each commutation detection on the TRGI input of the Timer,\r\n *        the typical use of this feature is with the use of another Timer(interface Timer)\r\n *        configured in Hall sensor interface, this interface Timer will generate the\r\n *        commutation at its TRGO output (connected to Timer used in this function) each time\r\n *        the TI1 of the Interface Timer detect a commutation at its input TI1.\r\n * @param  htim TIM handle\r\n * @param  InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_TS_ITR0: Internal trigger 0 selected\r\n *            @arg TIM_TS_ITR1: Internal trigger 1 selected\r\n *            @arg TIM_TS_ITR2: Internal trigger 2 selected\r\n *            @arg TIM_TS_ITR3: Internal trigger 3 selected\r\n *            @arg TIM_TS_NONE: No trigger is needed\r\n * @param  CommutationSource the Commutation Event source\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer\r\n *            @arg TIM_COMMUTATION_SOFTWARE:  Commutation source is set by software using the COMG bit\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger));\r\n\r\n  __HAL_LOCK(htim);\r\n\r\n  if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) {\r\n    /* Select the Input trigger */\r\n    htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n    htim->Instance->SMCR |= InputTrigger;\r\n  }\r\n\r\n  /* Select the Capture Compare preload feature */\r\n  htim->Instance->CR2 |= TIM_CR2_CCPC;\r\n  /* Select the Commutation event source */\r\n  htim->Instance->CR2 &= ~TIM_CR2_CCUS;\r\n  htim->Instance->CR2 |= CommutationSource;\r\n\r\n  /* Disable Commutation Interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_COM);\r\n\r\n  /* Disable Commutation DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM);\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TIM commutation event sequence with interrupt.\r\n * @note  This function is mandatory to use the commutation event in order to\r\n *        update the configuration at each commutation detection on the TRGI input of the Timer,\r\n *        the typical use of this feature is with the use of another Timer(interface Timer)\r\n *        configured in Hall sensor interface, this interface Timer will generate the\r\n *        commutation at its TRGO output (connected to Timer used in this function) each time\r\n *        the TI1 of the Interface Timer detect a commutation at its input TI1.\r\n * @param  htim TIM handle\r\n * @param  InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_TS_ITR0: Internal trigger 0 selected\r\n *            @arg TIM_TS_ITR1: Internal trigger 1 selected\r\n *            @arg TIM_TS_ITR2: Internal trigger 2 selected\r\n *            @arg TIM_TS_ITR3: Internal trigger 3 selected\r\n *            @arg TIM_TS_NONE: No trigger is needed\r\n * @param  CommutationSource the Commutation Event source\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer\r\n *            @arg TIM_COMMUTATION_SOFTWARE:  Commutation source is set by software using the COMG bit\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger));\r\n\r\n  __HAL_LOCK(htim);\r\n\r\n  if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) {\r\n    /* Select the Input trigger */\r\n    htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n    htim->Instance->SMCR |= InputTrigger;\r\n  }\r\n\r\n  /* Select the Capture Compare preload feature */\r\n  htim->Instance->CR2 |= TIM_CR2_CCPC;\r\n  /* Select the Commutation event source */\r\n  htim->Instance->CR2 &= ~TIM_CR2_CCUS;\r\n  htim->Instance->CR2 |= CommutationSource;\r\n\r\n  /* Disable Commutation DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM);\r\n\r\n  /* Enable the Commutation Interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_COM);\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TIM commutation event sequence with DMA.\r\n * @note  This function is mandatory to use the commutation event in order to\r\n *        update the configuration at each commutation detection on the TRGI input of the Timer,\r\n *        the typical use of this feature is with the use of another Timer(interface Timer)\r\n *        configured in Hall sensor interface, this interface Timer will generate the\r\n *        commutation at its TRGO output (connected to Timer used in this function) each time\r\n *        the TI1 of the Interface Timer detect a commutation at its input TI1.\r\n * @note  The user should configure the DMA in his own software, in This function only the COMDE bit is set\r\n * @param  htim TIM handle\r\n * @param  InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_TS_ITR0: Internal trigger 0 selected\r\n *            @arg TIM_TS_ITR1: Internal trigger 1 selected\r\n *            @arg TIM_TS_ITR2: Internal trigger 2 selected\r\n *            @arg TIM_TS_ITR3: Internal trigger 3 selected\r\n *            @arg TIM_TS_NONE: No trigger is needed\r\n * @param  CommutationSource the Commutation Event source\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer\r\n *            @arg TIM_COMMUTATION_SOFTWARE:  Commutation source is set by software using the COMG bit\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger));\r\n\r\n  __HAL_LOCK(htim);\r\n\r\n  if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) {\r\n    /* Select the Input trigger */\r\n    htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n    htim->Instance->SMCR |= InputTrigger;\r\n  }\r\n\r\n  /* Select the Capture Compare preload feature */\r\n  htim->Instance->CR2 |= TIM_CR2_CCPC;\r\n  /* Select the Commutation event source */\r\n  htim->Instance->CR2 &= ~TIM_CR2_CCUS;\r\n  htim->Instance->CR2 |= CommutationSource;\r\n\r\n  /* Enable the Commutation DMA Request */\r\n  /* Set the DMA Commutation Callback */\r\n  htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback     = TIMEx_DMACommutationCplt;\r\n  htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt;\r\n  /* Set the DMA error callback */\r\n  htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError;\r\n\r\n  /* Disable Commutation Interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_COM);\r\n\r\n  /* Enable the Commutation DMA Request */\r\n  __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_COM);\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the TIM in master mode.\r\n * @param  htim TIM handle.\r\n * @param  sMasterConfig pointer to a TIM_MasterConfigTypeDef structure that\r\n *         contains the selected trigger output (TRGO) and the Master/Slave\r\n *         mode.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig) {\r\n  uint32_t tmpcr2;\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));\r\n  assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));\r\n\r\n  /* Check input state */\r\n  __HAL_LOCK(htim);\r\n\r\n  /* Change the handler state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = htim->Instance->CR2;\r\n\r\n  /* Get the TIMx SMCR register value */\r\n  tmpsmcr = htim->Instance->SMCR;\r\n\r\n  /* Reset the MMS Bits */\r\n  tmpcr2 &= ~TIM_CR2_MMS;\r\n  /* Select the TRGO source */\r\n  tmpcr2 |= sMasterConfig->MasterOutputTrigger;\r\n\r\n  /* Update TIMx CR2 */\r\n  htim->Instance->CR2 = tmpcr2;\r\n\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    /* Reset the MSM Bit */\r\n    tmpsmcr &= ~TIM_SMCR_MSM;\r\n    /* Set master mode */\r\n    tmpsmcr |= sMasterConfig->MasterSlaveMode;\r\n\r\n    /* Update TIMx SMCR */\r\n    htim->Instance->SMCR = tmpsmcr;\r\n  }\r\n\r\n  /* Change the htim state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the Break feature, dead time, Lock level, OSSI/OSSR State\r\n *         and the AOE(automatic output enable).\r\n * @param  htim TIM handle\r\n * @param  sBreakDeadTimeConfig pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that\r\n *         contains the BDTR Register configuration  information for the TIM peripheral.\r\n * @note   Interrupts can be generated when an active level is detected on the\r\n *         break input, the break 2 input or the system break input. Break\r\n *         interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig) {\r\n  /* Keep this variable initialized to 0 as it is used to configure BDTR register */\r\n  uint32_t tmpbdtr = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_OSSR_STATE(sBreakDeadTimeConfig->OffStateRunMode));\r\n  assert_param(IS_TIM_OSSI_STATE(sBreakDeadTimeConfig->OffStateIDLEMode));\r\n  assert_param(IS_TIM_LOCK_LEVEL(sBreakDeadTimeConfig->LockLevel));\r\n  assert_param(IS_TIM_DEADTIME(sBreakDeadTimeConfig->DeadTime));\r\n  assert_param(IS_TIM_BREAK_STATE(sBreakDeadTimeConfig->BreakState));\r\n  assert_param(IS_TIM_BREAK_POLARITY(sBreakDeadTimeConfig->BreakPolarity));\r\n  assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(sBreakDeadTimeConfig->AutomaticOutput));\r\n\r\n  /* Check input state */\r\n  __HAL_LOCK(htim);\r\n\r\n  /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State,\r\n     the OSSI State, the dead time value and the Automatic Output Enable Bit */\r\n\r\n  /* Set the BDTR bits */\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_DTG, sBreakDeadTimeConfig->DeadTime);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_LOCK, sBreakDeadTimeConfig->LockLevel);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_OSSI, sBreakDeadTimeConfig->OffStateIDLEMode);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_OSSR, sBreakDeadTimeConfig->OffStateRunMode);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_BKE, sBreakDeadTimeConfig->BreakState);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_BKP, sBreakDeadTimeConfig->BreakPolarity);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_AOE, sBreakDeadTimeConfig->AutomaticOutput);\r\n\r\n  /* Set TIMx_BDTR */\r\n  htim->Instance->BDTR = tmpbdtr;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the TIMx Remapping input capabilities.\r\n * @param  htim TIM handle.\r\n * @param  Remap specifies the TIM remapping source.\r\n *\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n  UNUSED(Remap);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group6 Extended Callbacks functions\r\n  * @brief    Extended Callbacks functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                    ##### Extended Callbacks functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides Extended TIM callback functions:\r\n    (+) Timer Commutation callback\r\n    (+) Timer Break callback\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Hall commutation changed callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIMEx_CommutCallback could be implemented in the user file\r\n   */\r\n}\r\n/**\r\n * @brief  Hall commutation changed half complete callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIMEx_CommutHalfCpltCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIMEx_CommutHalfCpltCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Hall Break detection callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIMEx_BreakCallback could be implemented in the user file\r\n   */\r\n}\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group7 Extended Peripheral State functions\r\n  * @brief    Extended Peripheral State functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                ##### Extended Peripheral State functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This subsection permits to get in run-time the status of the peripheral\r\n    and the data flow.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Return the TIM Hall Sensor interface handle state.\r\n * @param  htim TIM Hall Sensor handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return actual state of the TIM complementary channel.\r\n * @param  htim TIM handle\r\n * @param  ChannelN TIM Complementary channel\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3\r\n * @retval TIM Complementary channel state\r\n */\r\nHAL_TIM_ChannelStateTypeDef HAL_TIMEx_GetChannelNState(TIM_HandleTypeDef *htim, uint32_t ChannelN) {\r\n  HAL_TIM_ChannelStateTypeDef channel_state;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, ChannelN));\r\n\r\n  channel_state = TIM_CHANNEL_N_STATE_GET(htim, ChannelN);\r\n\r\n  return channel_state;\r\n}\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private functions ---------------------------------------------------------*/\r\n/** @defgroup TIMEx_Private_Functions TIMEx Private Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  TIM DMA Commutation callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  /* Change the htim state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->CommutationCallback(htim);\r\n#else\r\n  HAL_TIMEx_CommutCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Commutation half complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIMEx_DMACommutationHalfCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  /* Change the htim state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->CommutationHalfCpltCallback(htim);\r\n#else\r\n  HAL_TIMEx_CommutHalfCpltCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Delay Pulse complete callback (complementary channel).\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n  HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA error callback (complementary channel)\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->ErrorCallback(htim);\r\n#else\r\n  HAL_TIM_ErrorCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  Enables or disables the TIM Capture Compare Channel xN.\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  Channel specifies the TIM Channel\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3\r\n * @param  ChannelNState specifies the TIM Channel CCxNE bit new state.\r\n *          This parameter can be: TIM_CCxN_ENABLE or TIM_CCxN_Disable.\r\n * @retval None\r\n */\r\nstatic void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState) {\r\n  uint32_t tmp;\r\n\r\n  tmp = TIM_CCER_CC1NE << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */\r\n\r\n  /* Reset the CCxNE Bit */\r\n  TIMx->CCER &= ~tmp;\r\n\r\n  /* Set or reset the CCxNE Bit */\r\n  TIMx->CCER |= (uint32_t)(ChannelNState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */\r\n}\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_TIM_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/configuration.h",
    "content": "#ifndef CONFIGURATION_H_\n#define CONFIGURATION_H_\n#include <stdint.h>\n/**\n * Configuration.h\n * Define here your default pre settings for TS80(P) or TS10(0/1)\n *\n */\n\n//===========================================================================\n//============================= Default Settings ============================\n//===========================================================================\n/**\n * Default soldering temp is 320.0 C\n * Temperature the iron sleeps at - default 150.0 C\n */\n\n#define SLEEP_TEMP         150 // Default sleep temperature\n#define BOOST_TEMP         420 // Default boost temp.\n#define BOOST_MODE_ENABLED 1   // 0: Disable 1: Enable\n\n/**\n * Blink the temperature on the cooling screen when its > 50C\n */\n#define COOLING_TEMP_BLINK 0 // 0: Disable 1: Enable\n\n/**\n * How many seconds/minutes we wait until going to sleep/shutdown.\n * Values -> SLEEP_TIME * 10; i.e. 5*10 = 50 Seconds!\n */\n#define SLEEP_TIME    5  // x10 Seconds\n#define SHUTDOWN_TIME 10 // Minutes\n\n/**\n * Auto start off for safety.\n * Pissible values are:\n *  0 - none\n *  1 - Soldering Temperature\n *  2 - Sleep Temperature\n *  3 - Sleep Off Temperature\n */\n#define AUTO_START_MODE 0 // Default to none\n\n/**\n * Locking Mode\n * When in soldering mode a long press on both keys toggle the lock of the buttons\n * Possible values are:\n *  0 - Desactivated\n *  1 - Lock except boost\n *  2 - Full lock\n */\n#define LOCKING_MODE 0 // Default to desactivated for safety\n\n/**\n * OLED Orientation\n *\n */\n#define ORIENTATION_MODE           2 // 0: Right 1:Left 2:Automatic - Default Automatic\n#define MAX_ORIENTATION_MODE       2 // Up to auto\n#define REVERSE_BUTTON_TEMP_CHANGE 0 // 0:Default 1:Reverse - Reverse the plus and minus button assigment for temperature change\n\n/**\n * OLED Brightness\n *\n */\n#if defined(MODEL_TS101)\n  #define MIN_BRIGHTNESS     1   // Min OLED brightness selectable\n  #define MAX_BRIGHTNESS     101 // Max OLED brightness selectable\n#else\n  #define MIN_BRIGHTNESS     0   // Min OLED brightness selectable\n  #define MAX_BRIGHTNESS     100 // Max OLED brightness selectable\n#endif\n#define BRIGHTNESS_STEP    25  // OLED brightness increment\n#define DEFAULT_BRIGHTNESS 25  // default OLED brightness\n\n/**\n * Temp change settings\n */\n#define TEMP_CHANGE_SHORT_STEP     1  // Default temp change short step +1\n#define TEMP_CHANGE_LONG_STEP      10 // Default temp change long step +10\n#define TEMP_CHANGE_SHORT_STEP_MAX 50 // Temp change short step MAX value\n#define TEMP_CHANGE_LONG_STEP_MAX  90 // Temp change long step MAX value\n\n/* Power pulse for keeping power banks awake*/\n#define POWER_PULSE_INCREMENT    1\n#define POWER_PULSE_MAX          100 // x10 max watts\n#define POWER_PULSE_WAIT_MAX     9   // 9*2.5s = 22.5 seconds\n#define POWER_PULSE_DURATION_MAX 9   // 9*250ms = 2.25 seconds\n\n#ifdef MODEL_TS100\n#define POWER_PULSE_DEFAULT 0\n#else\n#define POWER_PULSE_DEFAULT 5\n#endif                                 /* TS100 */\n#define POWER_PULSE_WAIT_DEFAULT     4 // Default rate of the power pulse: 4*2500 = 10000 ms = 10 s\n#define POWER_PULSE_DURATION_DEFAULT 1 // Default duration of the power pulse: 1*250 = 250 ms\n\n/**\n * OLED Orientation Sensitivity on Automatic mode!\n * Motion Sensitivity <0=Off 1=Least Sensitive 9=Most Sensitive>\n */\n#define SENSITIVITY 7 // Default 7\n\n/**\n * Detailed soldering screen\n * Detailed idle screen (off for first time users)\n */\n#define DETAILED_SOLDERING 0 // 0: Disable 1: Enable - Default 0\n#define DETAILED_IDLE      0 // 0: Disable 1: Enable - Default 0\n\n#define THERMAL_RUNAWAY_TIME_SEC 20\n#define THERMAL_RUNAWAY_TEMP_C   3\n\n#define CUT_OUT_SETTING          0  // default to no cut-off voltage\n#define RECOM_VOL_CELL           33 // Minimum voltage per cell (Recommended 3.3V (33))\n#define TEMPERATURE_INF          0  // default to 0\n#define DESCRIPTION_SCROLL_SPEED 0  // 0: Slow 1: Fast - default to slow\n#define ANIMATION_LOOP           1  // 0: off 1: on\n#define ANIMATION_SPEED          settingOffSpeed_t::MEDIUM\n\n#define OP_AMP_Rf_TS100  750 * 1000 // 750  Kilo-ohms -> From schematic, R1\n#define OP_AMP_Rin_TS100 2370       // 2.37 Kilo-ohms -> From schematic, R2\n\n#define OP_AMP_GAIN_STAGE_TS100 (1 + (OP_AMP_Rf_TS100 / OP_AMP_Rin_TS100))\n\n#define OP_AMP_Rf_TS80  180 * 1000 //  180  Kilo-ohms -> From schematic, R6\n#define OP_AMP_Rin_TS80 2000       //  2.0  Kilo-ohms -> From schematic, R3\n\n#define OP_AMP_GAIN_STAGE_TS80 (1 + (OP_AMP_Rf_TS80 / OP_AMP_Rin_TS80))\n\n#define ADC_MAX_READING (4096 * 8) // Maximum reading of the adc\n#define ADC_VDD_MV      3300       // ADC max reading millivolts\n\n#define POW_PD_EXT 0\n\n// Deriving the Voltage div:\n// Vin_max = (3.3*(r1+r2))/(r2)\n// vdiv = (32768*4)/(vin_max*10)\n\n#if defined(MODEL_TS100) + defined(MODEL_TS80) + defined(MODEL_TS80P) + defined(MODEL_TS101) > 1\n#error \"Multiple models defined!\"\n#elif defined(MODEL_TS100) + defined(MODEL_TS80) + defined(MODEL_TS80P) + defined(MODEL_TS101) == 0\n#error \"No model defined!\"\n#endif\n#define NEEDS_VBUS_PROBE 0\n// Miniware is swapping IMU's around a bit now, so we turn them all on\n\n#define ACCEL_MMA\n#define ACCEL_LIS\n#define ACCEL_SC7\n#define ACCEL_MSA\n#define ACCEL_BMA\n\n#define MIN_CALIBRATION_OFFSET 100 // Min value for calibration\n#define SOLDERING_TEMP         320 // Default soldering temp is 320.0 °C\n#define PID_TIM_HZ             (8) // Tick rate of the PID loop\n#define MAX_TEMP_C             450 // Max soldering temp selectable °C\n#define MAX_TEMP_F             850 // Max soldering temp selectable °F\n#define MIN_TEMP_C             10  // Min soldering temp selectable °C\n#define MIN_TEMP_F             50  // Min soldering temp selectable °F\n#define MIN_BOOST_TEMP_C       250 // The min settable temp for boost mode °C\n#define MIN_BOOST_TEMP_F       480 // The min settable temp for boost mode °F\n\n// Miniware cant be trusted, and keep using the GD32 randomly now, so assume they will clones in the future\n\n#define I2C_SOFT_BUS_1 1\n\n#ifdef MODEL_TS100\n#define VOLTAGE_DIV        467 // 467 - Default divider from schematic\n#define CALIBRATION_OFFSET 900 // 900 - Default adc offset in uV\n#define PID_POWER_LIMIT    70  // Sets the max pwm power limit\n#define POWER_LIMIT        0   // 0 watts default limit\n#define MAX_POWER_LIMIT    70\n#define POWER_LIMIT_STEPS  5\n#define OP_AMP_GAIN_STAGE  OP_AMP_GAIN_STAGE_TS100\n#define TEMP_uV_LOOKUP_HAKKO\n#define USB_PD_VMAX              20 // Maximum voltage for PD to negotiate\n#define OLED_I2CBB1              1\n#define ACCEL_I2CBB1             1\n#define HARDWARE_MAX_WATTAGE_X10 750\n#define TIP_THERMAL_MASS         65 // X10 watts to raise 1 deg C in 1 second\n#define TIP_RESISTANCE           75 // x10 ohms, 7.5 typical for ts100 tips\n\n#define POW_DC\n#define I2C_SOFT_BUS_1 1\n#define OLED_I2CBB1    1\n#define ACCEL_I2CBB1   1\n#define TIPTYPE_T12    1 // Can manually pick a T12 tip\n\n#define TEMP_TMP36\n#endif /* TS100 */\n\n#ifdef MODEL_TS101\n#define VOLTAGE_DIV        700 // 700 - Default divider from schematic\n#define CALIBRATION_OFFSET 900 // 900 - Default adc offset in uV\n#define PID_POWER_LIMIT    100 // Sets the max pwm power limit\n#define POWER_LIMIT        0   // 0 watts default limit\n#define MAX_POWER_LIMIT    100\n#define POWER_LIMIT_STEPS  5\n#define OP_AMP_GAIN_STAGE  OP_AMP_GAIN_STAGE_TS100\n#define TEMP_uV_LOOKUP_HAKKO\n#define ACCEL_LIS_CLONE          1\n#define HARDWARE_MAX_WATTAGE_X10 1000\n#define TIP_THERMAL_MASS         65 // X10 watts to raise 1 deg C in 1 second\n#define TIP_RESISTANCE           75 // x10 ohms, 7.5 typical for ts100 tips\n\n#define TIP_HAS_DIRECT_PWM   1\n#define POW_DC               1\n#define POW_PD               1\n#define USB_PD_EPR_WATTAGE   140 /* EPR Supported */\n#define I2C_SOFT_BUS_2       1\n#define OLED_I2CBB1          1\n#define USB_PD_I2CBB2        1\n#define USB_PD_VMAX          28 // Device supposedly can do 28V; looks like vmax is 33 ish\n#define OLED_128x32          1\n#define OLED_FLIP            1\n#define HAS_SPLIT_POWER_PATH 1\n#define TEMP_NTC             1\n#define ACCEL_I2CBB1         1\n#define POW_EPR              1\n#define TIP_TYPE_SUPPORT     1 // Support for tips of different types, i.e. resistance\n#define AUTO_TIP_SELECTION   1 // Can auto-select the tip\n#define TIPTYPE_T12          1 // Can manually pick a T12 tip\n#define HAS_POWER_DEBUG_MENU\n#define DEBUG_POWER_MENU_BUTTON_B\n\n#endif /* TS101 */\n\n#if defined(MODEL_TS80) + defined(MODEL_TS80P) > 0\n#define MAX_POWER_LIMIT   40\n#define POWER_LIMIT_STEPS 2\n#define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS80\n#define TEMP_uV_LOOKUP_TS80\n#define USB_PD_VMAX 12 // Maximum voltage for PD to negotiate\n\n#define TIP_THERMAL_MASS 40\n#define TIP_RESISTANCE   45 // x10 ohms, 4.5 typical for ts80 tips\n#define I2C_SOFT_BUS_2   1\n#define LIS_ORI_FLIP\n#define OLED_FLIP\n#define TIPTYPE_TS80 1 // Only one tip type so far\n\n#endif /* TS80(P) */\n\n#ifdef MODEL_TS80\n#define VOLTAGE_DIV        780 // Default divider from schematic\n#define CALIBRATION_OFFSET 900 // the adc offset in uV\n#define PID_POWER_LIMIT    35  // Sets the max pwm power limit\n#define POWER_LIMIT        32  // 24 watts default power limit\n#define OLED_I2CBB1        1\n#define ACCEL_I2CBB1       1\n\n#define HARDWARE_MAX_WATTAGE_X10 320\n\n#define POW_QC\n\n#define TEMP_TMP36\n#define I2C_SOFT_BUS_1 1\n#define OLED_I2CBB1    1\n#define ACCEL_I2CBB1   1\n#endif /* TS80 */\n\n#ifdef MODEL_TS80P\n#define VOLTAGE_DIV              650  // Default for TS80P with slightly different resistors\n#define CALIBRATION_OFFSET       1500 // the adc offset in uV\n#define PID_POWER_LIMIT          35   // Sets the max pwm power limit\n#define POWER_LIMIT              32   // 30 watts default power limit\n#define I2C_SOFT_BUS_2           1\n#define HARDWARE_MAX_WATTAGE_X10 320\n#define OLED_I2CBB1              1\n#define ACCEL_I2CBB1             1\n\n#define POW_PD             1\n#define USB_PD_EPR_WATTAGE 0 /*No EPR*/\n#define POW_QC             1\n#define TEMP_NTC\n#define I2C_SOFT_BUS_2 1\n#define I2C_SOFT_BUS_1 1\n#define OLED_I2CBB1    1\n#define ACCEL_I2CBB1   1\n#define SC7_ORI_FLIP\n#endif /* TS80P */\n\n#ifdef MODEL_TS101\n// For whatever reason, Miniware decided to not build a reliable DFU bootloader\n// It can't appear to flash to some of the upper pages of flash,\n// I'm slightly suspect a watchdog or something runs out\n// as device resets before file finishes copying\n// So logo has to be located on page 99 or else it cant be flashed on stock bootloader\n#define FLASH_LOGOADDR      (0x08000000 + (99 * 1024))\n#define SETTINGS_START_PAGE (0x08000000 + (127 * 1024))\n#else\n#define FLASH_LOGOADDR      (0x08000000 + (62 * 1024))\n#define SETTINGS_START_PAGE (0x08000000 + (63 * 1024))\n#define OLED_96x16          1\n#endif /* TS101 */\n\n#endif /* CONFIGURATION_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Miniware/flash.c",
    "content": "/*\r\n * flash.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"BSP.h\"\r\n#include \"BSP_Flash.h\"\r\n#include \"stm32f1xx_hal.h\"\r\n#include \"string.h\"\r\n\r\nvoid flash_save_buffer(const uint8_t *buffer, const uint16_t length) {\r\n  FLASH_EraseInitTypeDef pEraseInit;\r\n  pEraseInit.TypeErase    = FLASH_TYPEERASE_PAGES;\r\n  pEraseInit.Banks        = FLASH_BANK_1;\r\n  pEraseInit.NbPages      = 1;\r\n  pEraseInit.PageAddress  = (uint32_t)SETTINGS_START_PAGE;\r\n  uint32_t failingAddress = 0;\r\n  resetWatchdog();\r\n  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR | FLASH_FLAG_BSY);\r\n  HAL_FLASH_Unlock();\r\n  HAL_Delay(1);\r\n  resetWatchdog();\r\n  HAL_FLASHEx_Erase(&pEraseInit, &failingAddress);\r\n  //^ Erase the page of flash (1024 bytes on this stm32)\r\n  // erased the chunk\r\n  // now we program it\r\n  uint16_t *data = (uint16_t *)buffer;\r\n  HAL_FLASH_Unlock();\r\n  for (uint16_t i = 0; i < (length / 2); i++) {\r\n    resetWatchdog();\r\n    HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, SETTINGS_START_PAGE + (i * sizeof(uint16_t)), data[i]);\r\n  }\r\n  HAL_FLASH_Lock();\r\n}\r\n\r\nvoid flash_read_buffer(uint8_t *buffer, const uint16_t length) { memcpy(buffer, (uint8_t *)SETTINGS_START_PAGE, length); }\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/fusb_user.cpp",
    "content": "#include \"configuration.h\"\n#ifdef POW_PD\n#include \"BSP.h\"\n#include \"I2CBB2.hpp\"\n#include \"Setup.h\"\n\nbool fusb_read_buf(const uint8_t deviceAddr, const uint8_t registerAdd, const uint8_t size, uint8_t *buf) { return I2CBB2::Mem_Read(deviceAddr, registerAdd, buf, size); }\n\nbool fusb_write_buf(const uint8_t deviceAddr, const uint8_t registerAdd, const uint8_t size, uint8_t *buf) { return I2CBB2::Mem_Write(deviceAddr, registerAdd, buf, size); }\n\nvoid setupFUSBIRQ() {\n  GPIO_InitTypeDef GPIO_InitStruct;\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;\n  GPIO_InitStruct.Pin   = INT_PD_Pin;\n  GPIO_InitStruct.Mode  = GPIO_MODE_IT_FALLING;\n  GPIO_InitStruct.Pull  = GPIO_PULLUP;\n  HAL_GPIO_Init(INT_PD_GPIO_Port, &GPIO_InitStruct);\n  HAL_NVIC_SetPriority(EXTI9_5_IRQn, 10, 0);\n  HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);\n}\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Miniware/port.c",
    "content": "/*\r\n * FreeRTOS Kernel V10.3.1\r\n * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n * this software and associated documentation files (the \"Software\"), to deal in\r\n * the Software without restriction, including without limitation the rights to\r\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n * the Software, and to permit persons to whom the Software is furnished to do so,\r\n * subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n * http://www.FreeRTOS.org\r\n * http://aws.amazon.com/freertos\r\n *\r\n * 1 tab == 4 spaces!\r\n */\r\n\r\n/*-----------------------------------------------------------\r\n * Implementation of functions defined in portable.h for the ARM CM3 port.\r\n *----------------------------------------------------------*/\r\n\r\n/* Scheduler includes. */\r\n#include \"FreeRTOS.h\"\r\n#include \"task.h\"\r\n\r\n/* For backward compatibility, ensure configKERNEL_INTERRUPT_PRIORITY is\r\n defined.  The value should also ensure backward compatibility.\r\n FreeRTOS.org versions prior to V4.4.0 did not include this definition. */\r\n#ifndef configKERNEL_INTERRUPT_PRIORITY\r\n#define configKERNEL_INTERRUPT_PRIORITY 255\r\n#endif\r\n\r\n#ifndef configSYSTICK_CLOCK_HZ\r\n#define configSYSTICK_CLOCK_HZ configCPU_CLOCK_HZ\r\n/* Ensure the SysTick is clocked at the same frequency as the core. */\r\n#define portNVIC_SYSTICK_CLK_BIT (1UL << 2UL)\r\n#else\r\n/* The way the SysTick is clocked is not modified in case it is not the same\r\nas the core. */\r\n#define portNVIC_SYSTICK_CLK_BIT (0)\r\n#endif\r\n\r\n/* Constants required to manipulate the core.  Registers first... */\r\n#define portNVIC_SYSTICK_CTRL_REG          (*((volatile uint32_t *)0xe000e010))\r\n#define portNVIC_SYSTICK_LOAD_REG          (*((volatile uint32_t *)0xe000e014))\r\n#define portNVIC_SYSTICK_CURRENT_VALUE_REG (*((volatile uint32_t *)0xe000e018))\r\n#define portNVIC_SYSPRI2_REG               (*((volatile uint32_t *)0xe000ed20))\r\n/* ...then bits in the registers. */\r\n#define portNVIC_SYSTICK_INT_BIT        (1UL << 1UL)\r\n#define portNVIC_SYSTICK_ENABLE_BIT     (1UL << 0UL)\r\n#define portNVIC_SYSTICK_COUNT_FLAG_BIT (1UL << 16UL)\r\n#define portNVIC_PENDSVCLEAR_BIT        (1UL << 27UL)\r\n#define portNVIC_PEND_SYSTICK_CLEAR_BIT (1UL << 25UL)\r\n\r\n#define portNVIC_PENDSV_PRI  (((uint32_t)configKERNEL_INTERRUPT_PRIORITY) << 16UL)\r\n#define portNVIC_SYSTICK_PRI (((uint32_t)configKERNEL_INTERRUPT_PRIORITY) << 24UL)\r\n\r\n/* Constants required to check the validity of an interrupt priority. */\r\n#define portFIRST_USER_INTERRUPT_NUMBER (16)\r\n#define portNVIC_IP_REGISTERS_OFFSET_16 (0xE000E3F0)\r\n#define portAIRCR_REG                   (*((volatile uint32_t *)0xE000ED0C))\r\n#define portMAX_8_BIT_VALUE             ((uint8_t)0xff)\r\n#define portTOP_BIT_OF_BYTE             ((uint8_t)0x80)\r\n#define portMAX_PRIGROUP_BITS           ((uint8_t)7)\r\n#define portPRIORITY_GROUP_MASK         (0x07UL << 8UL)\r\n#define portPRIGROUP_SHIFT              (8UL)\r\n\r\n/* Masks off all bits but the VECTACTIVE bits in the ICSR register. */\r\n#define portVECTACTIVE_MASK (0xFFUL)\r\n\r\n/* Constants required to set up the initial stack. */\r\n#define portINITIAL_XPSR (0x01000000UL)\r\n\r\n/* The systick is a 24-bit counter. */\r\n#define portMAX_24_BIT_NUMBER (0xffffffUL)\r\n\r\n/* A fiddle factor to estimate the number of SysTick counts that would have\r\n occurred while the SysTick counter is stopped during tickless idle\r\n calculations. */\r\n#define portMISSED_COUNTS_FACTOR (45UL)\r\n\r\n/* For strict compliance with the Cortex-M spec the task start address should\r\n have bit-0 clear, as it is loaded into the PC on exit from an ISR. */\r\n#define portSTART_ADDRESS_MASK ((StackType_t)0xfffffffeUL)\r\n\r\n/* Let the user override the pre-loading of the initial LR with the address of\r\n prvTaskExitError() in case it messes up unwinding of the stack in the\r\n debugger. */\r\n#ifdef configTASK_RETURN_ADDRESS\r\n#define portTASK_RETURN_ADDRESS configTASK_RETURN_ADDRESS\r\n#else\r\n#define portTASK_RETURN_ADDRESS prvTaskExitError\r\n#endif\r\n\r\n/*\r\n * Setup the timer to generate the tick interrupts.  The implementation in this\r\n * file is weak to allow application writers to change the timer used to\r\n * generate the tick interrupt.\r\n */\r\nvoid vPortSetupTimerInterrupt(void);\r\n\r\n/*\r\n * Exception handlers.\r\n */\r\nvoid xPortPendSVHandler(void) __attribute__((naked));\r\nvoid xPortSysTickHandler(void);\r\nvoid vPortSVCHandler(void) __attribute__((naked));\r\n\r\n/*\r\n * Start first task is a separate function so it can be tested in isolation.\r\n */\r\nstatic void prvPortStartFirstTask(void) __attribute__((naked));\r\n\r\n/*\r\n * Used to catch tasks that attempt to return from their implementing function.\r\n */\r\nstatic void prvTaskExitError(void);\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Each task maintains its own interrupt status in the critical nesting\r\n variable. */\r\nstatic UBaseType_t uxCriticalNesting = 0xaaaaaaaa;\r\n\r\n/*\r\n * The number of SysTick increments that make up one tick period.\r\n */\r\n#if (configUSE_TICKLESS_IDLE == 1)\r\nstatic uint32_t ulTimerCountsForOneTick = 0;\r\n#endif /* configUSE_TICKLESS_IDLE */\r\n\r\n/*\r\n * The maximum number of tick periods that can be suppressed is limited by the\r\n * 24 bit resolution of the SysTick timer.\r\n */\r\n#if (configUSE_TICKLESS_IDLE == 1)\r\nstatic uint32_t xMaximumPossibleSuppressedTicks = 0;\r\n#endif /* configUSE_TICKLESS_IDLE */\r\n\r\n/*\r\n * Compensate for the CPU cycles that pass while the SysTick is stopped (low\r\n * power functionality only.\r\n */\r\n#if (configUSE_TICKLESS_IDLE == 1)\r\nstatic uint32_t ulStoppedTimerCompensation = 0;\r\n#endif /* configUSE_TICKLESS_IDLE */\r\n\r\n/*\r\n * Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure\r\n * FreeRTOS API functions are not called from interrupts that have been assigned\r\n * a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY.\r\n */\r\n#if (configASSERT_DEFINED == 1)\r\nstatic uint8_t                       ucMaxSysCallPriority         = 0;\r\nstatic uint32_t                      ulMaxPRIGROUPValue           = 0;\r\nstatic const volatile uint8_t *const pcInterruptPriorityRegisters = (const volatile uint8_t *const)portNVIC_IP_REGISTERS_OFFSET_16;\r\n#endif /* configASSERT_DEFINED */\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n/*\r\n * See header file for description.\r\n */\r\nStackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters) {\r\n  /* Simulate the stack frame as it would be created by a context switch\r\n   interrupt. */\r\n  pxTopOfStack--;                   /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */\r\n  *pxTopOfStack = portINITIAL_XPSR; /* xPSR */\r\n  pxTopOfStack--;\r\n  *pxTopOfStack = ((StackType_t)pxCode) & portSTART_ADDRESS_MASK; /* PC */\r\n  pxTopOfStack--;\r\n  *pxTopOfStack = (StackType_t)portTASK_RETURN_ADDRESS; /* LR */\r\n  pxTopOfStack -= 5;                                    /* R12, R3, R2 and R1. */\r\n  *pxTopOfStack = (StackType_t)pvParameters;            /* R0 */\r\n  pxTopOfStack -= 8;                                    /* R11, R10, R9, R8, R7, R6, R5 and R4. */\r\n\r\n  return pxTopOfStack;\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nstatic void prvTaskExitError(void) {\r\n  // volatile uint32_t ulDummy = 0UL;\r\n\r\n  // /* A function that implements a task must not exit or attempt to return to\r\n  //  its caller as there is nothing to return to.  If a task wants to exit it\r\n  //  should instead call vTaskDelete( NULL ).\r\n\r\n  //  Artificially force an assert() to be triggered if configASSERT() is\r\n  //  defined, then stop here so application writers can catch the error. */\r\n  // configASSERT(uxCriticalNesting == ~0UL);\r\n  // portDISABLE_INTERRUPTS();\r\n  // while (ulDummy == 0) {\r\n  //   /* This file calls prvTaskExitError() after the scheduler has been\r\n  //    started to remove a compiler warning about the function being defined\r\n  //    but never called.  ulDummy is used purely to quieten other warnings\r\n  //    about code appearing after this function is called - making ulDummy\r\n  //    volatile makes the compiler think the function could return and\r\n  //    therefore not output an 'unreachable code' warning for code that appears\r\n  //    after it. */\r\n  // }\r\n  for (;;) {\r\n  }\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid vPortSVCHandler(void) {\r\n  __asm volatile(\"\tldr\tr3, pxCurrentTCBConst2\t\t\\n\"                 /* Restore the context. */\r\n                 \"\tldr r1, [r3]\t\t\t\t\t\\n\"         /* Use pxCurrentTCBConst to get the pxCurrentTCB address. */\r\n                 \"\tldr r0, [r1]\t\t\t\t\t\\n\"         /* The first item in pxCurrentTCB is the task top of stack. */\r\n                 \"\tldmia r0!, {r4-r11}\t\t\t\t\\n\"         /* Pop the registers that are not automatically saved on exception entry and the critical nesting count. */\r\n                 \"\tmsr psp, r0\t\t\t\t\t\t\\n\" /* Restore the task stack pointer. */\r\n                 \"\tisb\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmov r0, #0 \t\t\t\t\t\t\\n\"\r\n                 \"\tmsr\tbasepri, r0\t\t\t\t\t\\n\"\r\n                 \"\torr r14, #0xd\t\t\t\t\t\\n\"\r\n                 \"\tbx r14\t\t\t\t\t\t\t\\n\"\r\n                 \"\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\t.align 4\t\t\t\t\t\t\\n\"\r\n                 \"pxCurrentTCBConst2: .word pxCurrentTCB\t\t\t\t\\n\");\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nstatic void prvPortStartFirstTask(void) {\r\n  __asm volatile(\" ldr r0, =0xE000ED08 \t\\n\" /* Use the NVIC offset register to locate the stack. */\r\n                 \" ldr r0, [r0] \t\t\t\\n\"\r\n                 \" ldr r0, [r0] \t\t\t\\n\"\r\n                 \" msr msp, r0\t\t\t\\n\"         /* Set the msp back to the start of the stack. */\r\n                 \" cpsie i\t\t\t\t\\n\" /* Globally enable interrupts. */\r\n                 \" cpsie f\t\t\t\t\\n\"\r\n                 \" dsb\t\t\t\t\t\\n\"\r\n                 \" isb\t\t\t\t\t\\n\"\r\n                 \" svc 0\t\t\t\t\t\\n\" /* System call to start first task. */\r\n                 \" nop\t\t\t\t\t\\n\");\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\n/*\r\n * See header file for description.\r\n */\r\nBaseType_t xPortStartScheduler(void) {\r\n  /* configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0.\r\n   See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */\r\n  configASSERT(configMAX_SYSCALL_INTERRUPT_PRIORITY);\r\n\r\n#if (configASSERT_DEFINED == 1)\r\n  {\r\n    volatile uint32_t       ulOriginalPriority;\r\n    volatile uint8_t *const pucFirstUserPriorityRegister = (volatile uint8_t *const)(portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER);\r\n    volatile uint8_t        ucMaxPriorityValue;\r\n\r\n    /* Determine the maximum priority from which ISR safe FreeRTOS API\r\n     functions can be called.  ISR safe functions are those that end in\r\n     \"FromISR\".  FreeRTOS maintains separate thread and ISR API functions to\r\n     ensure interrupt entry is as fast and simple as possible.\r\n\r\n     Save the interrupt priority value that is about to be clobbered. */\r\n    ulOriginalPriority = *pucFirstUserPriorityRegister;\r\n\r\n    /* Determine the number of priority bits available.  First write to all\r\n     possible bits. */\r\n    *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE;\r\n\r\n    /* Read the value back to see how many bits stuck. */\r\n    ucMaxPriorityValue = *pucFirstUserPriorityRegister;\r\n\r\n    /* Use the same mask on the maximum system call priority. */\r\n    ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue;\r\n\r\n    /* Calculate the maximum acceptable priority group value for the number\r\n     of bits read back. */\r\n    ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS;\r\n    while ((ucMaxPriorityValue & portTOP_BIT_OF_BYTE) == portTOP_BIT_OF_BYTE) {\r\n      ulMaxPRIGROUPValue--;\r\n      ucMaxPriorityValue <<= (uint8_t)0x01;\r\n    }\r\n\r\n#ifdef __NVIC_PRIO_BITS\r\n    {\r\n      /* Check the CMSIS configuration that defines the number of\r\n      priority bits matches the number of priority bits actually queried\r\n      from the hardware. */\r\n      configASSERT((portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue) == __NVIC_PRIO_BITS);\r\n    }\r\n#endif\r\n\r\n#ifdef configPRIO_BITS\r\n    {\r\n      /* Check the FreeRTOS configuration that defines the number of\r\n      priority bits matches the number of priority bits actually queried\r\n      from the hardware. */\r\n      configASSERT((portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue) == configPRIO_BITS);\r\n    }\r\n#endif\r\n\r\n    /* Shift the priority group value back to its position within the AIRCR\r\n     register. */\r\n    ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT;\r\n    ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK;\r\n\r\n    /* Restore the clobbered interrupt priority register to its original\r\n     value. */\r\n    *pucFirstUserPriorityRegister = ulOriginalPriority;\r\n  }\r\n#endif /* conifgASSERT_DEFINED */\r\n\r\n  /* Make PendSV and SysTick the lowest priority interrupts. */\r\n  portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI;\r\n  portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI;\r\n\r\n  /* Start the timer that generates the tick ISR.  Interrupts are disabled\r\n   here already. */\r\n  vPortSetupTimerInterrupt();\r\n\r\n  /* Initialise the critical nesting count ready for the first task. */\r\n  uxCriticalNesting = 0;\r\n\r\n  /* Start the first task. */\r\n  prvPortStartFirstTask();\r\n\r\n  /* Should never get here as the tasks will now be executing!  Call the task\r\n   exit error function to prevent compiler warnings about a static function\r\n   not being called in the case that the application writer overrides this\r\n   functionality by defining configTASK_RETURN_ADDRESS.  Call\r\n   vTaskSwitchContext() so link time optimisation does not remove the\r\n   symbol. */\r\n  vTaskSwitchContext();\r\n  prvTaskExitError();\r\n\r\n  /* Should not get here! */\r\n  return 0;\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid vPortEndScheduler(void) {\r\n  /* Not implemented in ports where there is nothing to return to.\r\n   Artificially force an assert. */\r\n  configASSERT(uxCriticalNesting == 1000UL);\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid vPortEnterCritical(void) {\r\n  portDISABLE_INTERRUPTS();\r\n  uxCriticalNesting++;\r\n\r\n  /* This is not the interrupt safe version of the enter critical function so\r\n   assert() if it is being called from an interrupt context.  Only API\r\n   functions that end in \"FromISR\" can be used in an interrupt.  Only assert if\r\n   the critical nesting count is 1 to protect against recursive calls if the\r\n   assert function also uses a critical section. */\r\n  if (uxCriticalNesting == 1) {\r\n    configASSERT((portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK) == 0);\r\n  }\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid vPortExitCritical(void) {\r\n  configASSERT(uxCriticalNesting);\r\n  uxCriticalNesting--;\r\n  if (uxCriticalNesting == 0) {\r\n    portENABLE_INTERRUPTS();\r\n  }\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid xPortPendSVHandler(void) {\r\n  /* This is a naked function. */\r\n\r\n  __asm volatile(\"\tmrs r0, psp\t\t\t\t\t\t\t\\n\"\r\n                 \"\tisb\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tldr\tr3, pxCurrentTCBConst\t\t\t\\n\" /* Get the location of the current TCB. */\r\n                 \"\tldr\tr2, [r3]\t\t\t\t\t\t\\n\"\r\n                 \"\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tstmdb r0!, {r4-r11}\t\t\t\t\t\\n\" /* Save the remaining registers. */\r\n                 \"\tstr r0, [r2]\t\t\t\t\t\t\\n\" /* Save the new top of stack into the first member of the TCB. */\r\n                 \"\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tstmdb sp!, {r3, r14}\t\t\t\t\\n\"\r\n                 \"\tmov r0, %0\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmsr basepri, r0\t\t\t\t\t\t\\n\"\r\n                 \"\tbl vTaskSwitchContext\t\t\t\t\\n\"\r\n                 \"\tmov r0, #0\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmsr basepri, r0\t\t\t\t\t\t\\n\"\r\n                 \"\tldmia sp!, {r3, r14}\t\t\t\t\\n\"\r\n                 \"\t\t\t\t\t\t\t\t\t\t\\n\" /* Restore the context, including the critical nesting count. */\r\n                 \"\tldr r1, [r3]\t\t\t\t\t\t\\n\"\r\n                 \"\tldr r0, [r1]\t\t\t\t\t\t\\n\" /* The first item in pxCurrentTCB is the task top of stack. */\r\n                 \"\tldmia r0!, {r4-r11}\t\t\t\t\t\\n\" /* Pop the registers. */\r\n                 \"\tmsr psp, r0\t\t\t\t\t\t\t\\n\"\r\n                 \"\tisb\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tbx r14\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\t.align 4\t\t\t\t\t\t\t\\n\"\r\n                 \"pxCurrentTCBConst: .word pxCurrentTCB\t\\n\" ::\"i\"(configMAX_SYSCALL_INTERRUPT_PRIORITY));\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid xPortSysTickHandler(void) {\r\n  /* The SysTick runs at the lowest interrupt priority, so when this interrupt\r\n   executes all interrupts must be unmasked.  There is therefore no need to\r\n   save and then restore the interrupt mask value as its value is already\r\n   known. */\r\n  portDISABLE_INTERRUPTS();\r\n  {\r\n    /* Increment the RTOS tick. */\r\n    if (xTaskIncrementTick() != pdFALSE) {\r\n      /* A context switch is required.  Context switching is performed in\r\n       the PendSV interrupt.  Pend the PendSV interrupt. */\r\n      portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;\r\n    }\r\n  }\r\n  portENABLE_INTERRUPTS();\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\n#if (configUSE_TICKLESS_IDLE == 1)\r\n\r\n__attribute__((weak)) void vPortSuppressTicksAndSleep(TickType_t xExpectedIdleTime) {\r\n  uint32_t   ulReloadValue, ulCompleteTickPeriods, ulCompletedSysTickDecrements;\r\n  TickType_t xModifiableIdleTime;\r\n\r\n  /* Make sure the SysTick reload value does not overflow the counter. */\r\n  if (xExpectedIdleTime > xMaximumPossibleSuppressedTicks) {\r\n    xExpectedIdleTime = xMaximumPossibleSuppressedTicks;\r\n  }\r\n\r\n  /* Stop the SysTick momentarily.  The time the SysTick is stopped for\r\n  is accounted for as best it can be, but using the tickless mode will\r\n  inevitably result in some tiny drift of the time maintained by the\r\n  kernel with respect to calendar time. */\r\n  portNVIC_SYSTICK_CTRL_REG &= ~portNVIC_SYSTICK_ENABLE_BIT;\r\n\r\n  /* Calculate the reload value required to wait xExpectedIdleTime\r\n  tick periods.  -1 is used because this code will execute part way\r\n  through one of the tick periods. */\r\n  ulReloadValue = portNVIC_SYSTICK_CURRENT_VALUE_REG + (ulTimerCountsForOneTick * (xExpectedIdleTime - 1UL));\r\n  if (ulReloadValue > ulStoppedTimerCompensation) {\r\n    ulReloadValue -= ulStoppedTimerCompensation;\r\n  }\r\n\r\n  /* Enter a critical section but don't use the taskENTER_CRITICAL()\r\n  method as that will mask interrupts that should exit sleep mode. */\r\n  __asm volatile(\"cpsid i\" ::: \"memory\");\r\n  __asm volatile(\"dsb\");\r\n  __asm volatile(\"isb\");\r\n\r\n  /* If a context switch is pending or a task is waiting for the scheduler\r\n  to be unsuspended then abandon the low power entry. */\r\n  if (eTaskConfirmSleepModeStatus() == eAbortSleep) {\r\n    /* Restart from whatever is left in the count register to complete\r\n    this tick period. */\r\n    portNVIC_SYSTICK_LOAD_REG = portNVIC_SYSTICK_CURRENT_VALUE_REG;\r\n\r\n    /* Restart SysTick. */\r\n    portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT;\r\n\r\n    /* Reset the reload register to the value required for normal tick\r\n    periods. */\r\n    portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r\n\r\n    /* Re-enable interrupts - see comments above the cpsid instruction()\r\n    above. */\r\n    __asm volatile(\"cpsie i\" ::: \"memory\");\r\n  } else {\r\n    /* Set the new reload value. */\r\n    portNVIC_SYSTICK_LOAD_REG = ulReloadValue;\r\n\r\n    /* Clear the SysTick count flag and set the count value back to\r\n    zero. */\r\n    portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;\r\n\r\n    /* Restart SysTick. */\r\n    portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT;\r\n\r\n    /* Sleep until something happens.  configPRE_SLEEP_PROCESSING() can\r\n    set its parameter to 0 to indicate that its implementation contains\r\n    its own wait for interrupt or wait for event instruction, and so wfi\r\n    should not be executed again.  However, the original expected idle\r\n    time variable must remain unmodified, so a copy is taken. */\r\n    xModifiableIdleTime = xExpectedIdleTime;\r\n    configPRE_SLEEP_PROCESSING(xModifiableIdleTime);\r\n    if (xModifiableIdleTime > 0) {\r\n      __asm volatile(\"dsb\" ::: \"memory\");\r\n      __asm volatile(\"wfi\");\r\n      __asm volatile(\"isb\");\r\n    }\r\n    configPOST_SLEEP_PROCESSING(xExpectedIdleTime);\r\n\r\n    /* Re-enable interrupts to allow the interrupt that brought the MCU\r\n    out of sleep mode to execute immediately.  see comments above\r\n    __disable_interrupt() call above. */\r\n    __asm volatile(\"cpsie i\" ::: \"memory\");\r\n    __asm volatile(\"dsb\");\r\n    __asm volatile(\"isb\");\r\n\r\n    /* Disable interrupts again because the clock is about to be stopped\r\n    and interrupts that execute while the clock is stopped will increase\r\n    any slippage between the time maintained by the RTOS and calendar\r\n    time. */\r\n    __asm volatile(\"cpsid i\" ::: \"memory\");\r\n    __asm volatile(\"dsb\");\r\n    __asm volatile(\"isb\");\r\n\r\n    /* Disable the SysTick clock without reading the\r\n    portNVIC_SYSTICK_CTRL_REG register to ensure the\r\n    portNVIC_SYSTICK_COUNT_FLAG_BIT is not cleared if it is set.  Again,\r\n    the time the SysTick is stopped for is accounted for as best it can\r\n    be, but using the tickless mode will inevitably result in some tiny\r\n    drift of the time maintained by the kernel with respect to calendar\r\n    time*/\r\n    portNVIC_SYSTICK_CTRL_REG = (portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT);\r\n\r\n    /* Determine if the SysTick clock has already counted to zero and\r\n    been set back to the current reload value (the reload back being\r\n    correct for the entire expected idle time) or if the SysTick is yet\r\n    to count to zero (in which case an interrupt other than the SysTick\r\n    must have brought the system out of sleep mode). */\r\n    if ((portNVIC_SYSTICK_CTRL_REG & portNVIC_SYSTICK_COUNT_FLAG_BIT) != 0) {\r\n      uint32_t ulCalculatedLoadValue;\r\n\r\n      /* The tick interrupt is already pending, and the SysTick count\r\n      reloaded with ulReloadValue.  Reset the\r\n      portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick\r\n      period. */\r\n      ulCalculatedLoadValue = (ulTimerCountsForOneTick - 1UL) - (ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG);\r\n\r\n      /* Don't allow a tiny value, or values that have somehow\r\n      underflowed because the post sleep hook did something\r\n      that took too long. */\r\n      if ((ulCalculatedLoadValue < ulStoppedTimerCompensation) || (ulCalculatedLoadValue > ulTimerCountsForOneTick)) {\r\n        ulCalculatedLoadValue = (ulTimerCountsForOneTick - 1UL);\r\n      }\r\n\r\n      portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue;\r\n\r\n      /* As the pending tick will be processed as soon as this\r\n      function exits, the tick value maintained by the tick is stepped\r\n      forward by one less than the time spent waiting. */\r\n      ulCompleteTickPeriods = xExpectedIdleTime - 1UL;\r\n    } else {\r\n      /* Something other than the tick interrupt ended the sleep.\r\n      Work out how long the sleep lasted rounded to complete tick\r\n      periods (not the ulReload value which accounted for part\r\n      ticks). */\r\n      ulCompletedSysTickDecrements = (xExpectedIdleTime * ulTimerCountsForOneTick) - portNVIC_SYSTICK_CURRENT_VALUE_REG;\r\n\r\n      /* How many complete tick periods passed while the processor\r\n      was waiting? */\r\n      ulCompleteTickPeriods = ulCompletedSysTickDecrements / ulTimerCountsForOneTick;\r\n\r\n      /* The reload value is set to whatever fraction of a single tick\r\n      period remains. */\r\n      portNVIC_SYSTICK_LOAD_REG = ((ulCompleteTickPeriods + 1UL) * ulTimerCountsForOneTick) - ulCompletedSysTickDecrements;\r\n    }\r\n\r\n    /* Restart SysTick so it runs from portNVIC_SYSTICK_LOAD_REG\r\n    again, then set portNVIC_SYSTICK_LOAD_REG back to its standard\r\n    value. */\r\n    portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;\r\n    portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT;\r\n    vTaskStepTick(ulCompleteTickPeriods);\r\n    portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r\n\r\n    /* Exit with interrupts enabled. */\r\n    __asm volatile(\"cpsie i\" ::: \"memory\");\r\n  }\r\n}\r\n\r\n#endif /* configUSE_TICKLESS_IDLE */\r\n/*-----------------------------------------------------------*/\r\n\r\n/*\r\n * Setup the systick timer to generate the tick interrupts at the required\r\n * frequency.\r\n */\r\n__attribute__((weak)) void vPortSetupTimerInterrupt(void) {\r\n  /* Calculate the constants required to configure the tick interrupt. */\r\n#if (configUSE_TICKLESS_IDLE == 1)\r\n  {\r\n    ulTimerCountsForOneTick         = (configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ);\r\n    xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick;\r\n    ulStoppedTimerCompensation      = portMISSED_COUNTS_FACTOR / (configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ);\r\n  }\r\n#endif /* configUSE_TICKLESS_IDLE */\r\n\r\n  /* Stop and clear the SysTick. */\r\n  portNVIC_SYSTICK_CTRL_REG          = 0UL;\r\n  portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;\r\n\r\n  /* Configure SysTick to interrupt at the requested rate. */\r\n  portNVIC_SYSTICK_LOAD_REG = (configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ) - 1UL;\r\n  portNVIC_SYSTICK_CTRL_REG = (portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT);\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\n#if (configASSERT_DEFINED == 1)\r\n\r\nvoid vPortValidateInterruptPriority(void) {\r\n  uint32_t ulCurrentInterrupt;\r\n  uint8_t  ucCurrentPriority;\r\n\r\n  /* Obtain the number of the currently executing interrupt. */\r\n  __asm volatile(\"mrs %0, ipsr\" : \"=r\"(ulCurrentInterrupt)::\"memory\");\r\n\r\n  /* Is the interrupt number a user defined interrupt? */\r\n  if (ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER) {\r\n    /* Look up the interrupt's priority. */\r\n    ucCurrentPriority = pcInterruptPriorityRegisters[ulCurrentInterrupt];\r\n\r\n    /* The following assertion will fail if a service routine (ISR) for\r\n     an interrupt that has been assigned a priority above\r\n     configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API\r\n     function.  ISR safe FreeRTOS API functions must *only* be called\r\n     from interrupts that have been assigned a priority at or below\r\n     configMAX_SYSCALL_INTERRUPT_PRIORITY.\r\n\r\n     Numerically low interrupt priority numbers represent logically high\r\n     interrupt priorities, therefore the priority of the interrupt must\r\n     be set to a value equal to or numerically *higher* than\r\n     configMAX_SYSCALL_INTERRUPT_PRIORITY.\r\n\r\n     Interrupts that\tuse the FreeRTOS API must not be left at their\r\n     default priority of\tzero as that is the highest possible priority,\r\n     which is guaranteed to be above configMAX_SYSCALL_INTERRUPT_PRIORITY,\r\n     and\ttherefore also guaranteed to be invalid.\r\n\r\n     FreeRTOS maintains separate thread and ISR API functions to ensure\r\n     interrupt entry is as fast and simple as possible.\r\n\r\n     The following links provide detailed information:\r\n     http://www.freertos.org/RTOS-Cortex-M3-M4.html\r\n     http://www.freertos.org/FAQHelp.html */\r\n    configASSERT(ucCurrentPriority >= ucMaxSysCallPriority);\r\n  }\r\n\r\n  /* Priority grouping:  The interrupt controller (NVIC) allows the bits\r\n   that define each interrupt's priority to be split between bits that\r\n   define the interrupt's pre-emption priority bits and bits that define\r\n   the interrupt's sub-priority.  For simplicity all bits must be defined\r\n   to be pre-emption priority bits.  The following assertion will fail if\r\n   this is not the case (if some bits represent a sub-priority).\r\n\r\n   If the application only uses CMSIS libraries for interrupt\r\n   configuration then the correct setting can be achieved on all Cortex-M\r\n   devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the\r\n   scheduler.  Note however that some vendor specific peripheral libraries\r\n   assume a non-zero priority group setting, in which cases using a value\r\n   of zero will result in unpredictable behaviour. */\r\n  configASSERT((portAIRCR_REG & portPRIORITY_GROUP_MASK) <= ulMaxPRIGROUPValue);\r\n}\r\n\r\n#endif /* configASSERT_DEFINED */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/portmacro.h",
    "content": "/*\r\n * FreeRTOS Kernel V10.3.1\r\n * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n * this software and associated documentation files (the \"Software\"), to deal in\r\n * the Software without restriction, including without limitation the rights to\r\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n * the Software, and to permit persons to whom the Software is furnished to do so,\r\n * subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n * http://www.FreeRTOS.org\r\n * http://aws.amazon.com/freertos\r\n *\r\n * 1 tab == 4 spaces!\r\n */\r\n\r\n#ifndef PORTMACRO_H\r\n#define PORTMACRO_H\r\n#include \"FreeRTOSConfig.h\"\r\n#include \"projdefs.h\"\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/*-----------------------------------------------------------\r\n * Port specific definitions.\r\n *\r\n * The settings in this file configure FreeRTOS correctly for the\r\n * given hardware and compiler.\r\n *\r\n * These settings should not be altered.\r\n *-----------------------------------------------------------\r\n */\r\n\r\n/* Type definitions. */\r\n#define portCHAR       char\r\n#define portFLOAT      float\r\n#define portDOUBLE     double\r\n#define portLONG       long\r\n#define portSHORT      short\r\n#define portSTACK_TYPE uint32_t\r\n#define portBASE_TYPE  long\r\n\r\ntypedef portSTACK_TYPE StackType_t;\r\ntypedef long           BaseType_t;\r\ntypedef unsigned long  UBaseType_t;\r\n\r\n#if (configUSE_16_BIT_TICKS == 1)\r\ntypedef uint16_t TickType_t;\r\n#define portMAX_DELAY (TickType_t)0xffff\r\n#else\r\ntypedef uint32_t TickType_t;\r\n#define portMAX_DELAY           (TickType_t)0xffffffffUL\r\n\r\n/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do\r\n not need to be guarded with a critical section. */\r\n#define portTICK_TYPE_IS_ATOMIC 1\r\n#endif\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Architecture specifics. */\r\n#define portSTACK_GROWTH   (-1)\r\n#define portTICK_PERIOD_MS ((TickType_t)1000 / configTICK_RATE_HZ)\r\n#define portBYTE_ALIGNMENT 8\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Scheduler utilities. */\r\n#define portYIELD()                                                            \\\r\n  {                                                                            \\\r\n    /* Set a PendSV to request a context switch. */                            \\\r\n    portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;                            \\\r\n                                                                               \\\r\n    /* Barriers are normally not required but do ensure the code is completely \\\r\n    within the specified behaviour for the architecture. */                    \\\r\n    __asm volatile(\"dsb\" ::: \"memory\");                                        \\\r\n    __asm volatile(\"isb\");                                                     \\\r\n  }\r\n\r\n#define portNVIC_INT_CTRL_REG  (*((volatile uint32_t *)0xe000ed04))\r\n#define portNVIC_PENDSVSET_BIT (1UL << 28UL)\r\n#define portEND_SWITCHING_ISR(xSwitchRequired) \\\r\n  if (xSwitchRequired != pdFALSE)              \\\r\n  portYIELD()\r\n#define portYIELD_FROM_ISR(x) portEND_SWITCHING_ISR(x)\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Critical section management. */\r\nextern void vPortEnterCritical(void);\r\nextern void vPortExitCritical(void);\r\n#define portSET_INTERRUPT_MASK_FROM_ISR()    ulPortRaiseBASEPRI()\r\n#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortSetBASEPRI(x)\r\n#define portDISABLE_INTERRUPTS()             vPortRaiseBASEPRI()\r\n#define portENABLE_INTERRUPTS()              vPortSetBASEPRI(0)\r\n#define portENTER_CRITICAL()                 vPortEnterCritical()\r\n#define portEXIT_CRITICAL()                  vPortExitCritical()\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Task function macros as described on the FreeRTOS.org WEB site.  These are\r\n not necessary for to use this port.  They are defined so the common demo files\r\n (which build with all the ports) will build. */\r\n#define portTASK_FUNCTION_PROTO(vFunction, pvParameters) void vFunction(void *pvParameters)\r\n#define portTASK_FUNCTION(vFunction, pvParameters)       void vFunction(void *pvParameters)\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Tickless idle/low power functionality. */\r\n#ifndef portSUPPRESS_TICKS_AND_SLEEP\r\nextern void vPortSuppressTicksAndSleep(TickType_t xExpectedIdleTime);\r\n#define portSUPPRESS_TICKS_AND_SLEEP(xExpectedIdleTime) vPortSuppressTicksAndSleep(xExpectedIdleTime)\r\n#endif\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Architecture specific optimisations. */\r\n#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION\r\n#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1\r\n#endif\r\n\r\n#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1\r\n\r\n/* Generic helper function. */\r\n__attribute__((always_inline)) static inline uint8_t ucPortCountLeadingZeros(uint32_t ulBitmap) {\r\n  uint8_t ucReturn;\r\n\r\n  __asm volatile(\"clz %0, %1\" : \"=r\"(ucReturn) : \"r\"(ulBitmap) : \"memory\");\r\n  return ucReturn;\r\n}\r\n\r\n/* Check the configuration. */\r\n#if (configMAX_PRIORITIES > 32)\r\n#error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32.  It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice.\r\n#endif\r\n\r\n/* Store/clear the ready priorities in a bit map. */\r\n#define portRECORD_READY_PRIORITY(uxPriority, uxReadyPriorities) (uxReadyPriorities) |= (1UL << (uxPriority))\r\n#define portRESET_READY_PRIORITY(uxPriority, uxReadyPriorities)  (uxReadyPriorities) &= ~(1UL << (uxPriority))\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n#define portGET_HIGHEST_PRIORITY(uxTopPriority, uxReadyPriorities) uxTopPriority = (31UL - (uint32_t)ucPortCountLeadingZeros((uxReadyPriorities)))\r\n\r\n#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n#ifdef configASSERT\r\nvoid vPortValidateInterruptPriority(void);\r\n#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() vPortValidateInterruptPriority()\r\n#endif\r\n\r\n/* portNOP() is not required by this port. */\r\n#define portNOP()\r\n\r\n#define portINLINE __inline\r\n\r\n#ifndef portFORCE_INLINE\r\n#define portFORCE_INLINE inline __attribute__((always_inline))\r\n#endif\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\nportFORCE_INLINE static BaseType_t xPortIsInsideInterrupt(void) {\r\n  uint32_t   ulCurrentInterrupt;\r\n  BaseType_t xReturn;\r\n\r\n  /* Obtain the number of the currently executing interrupt. */\r\n  __asm volatile(\"mrs %0, ipsr\" : \"=r\"(ulCurrentInterrupt)::\"memory\");\r\n\r\n  if (ulCurrentInterrupt == 0) {\r\n    xReturn = pdFALSE;\r\n  } else {\r\n    xReturn = pdTRUE;\r\n  }\r\n\r\n  return xReturn;\r\n}\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\nportFORCE_INLINE static void vPortRaiseBASEPRI(void) {\r\n  uint32_t ulNewBASEPRI;\r\n\r\n  __asm volatile(\"\tmov %0, %1\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmsr basepri, %0\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tisb\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tdsb\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 : \"=r\"(ulNewBASEPRI)\r\n                 : \"i\"(configMAX_SYSCALL_INTERRUPT_PRIORITY)\r\n                 : \"memory\");\r\n}\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\nportFORCE_INLINE static uint32_t ulPortRaiseBASEPRI(void) {\r\n  uint32_t ulOriginalBASEPRI, ulNewBASEPRI;\r\n\r\n  __asm volatile(\"\tmrs %0, basepri\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmov %1, %2\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmsr basepri, %1\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tisb\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tdsb\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 : \"=r\"(ulOriginalBASEPRI), \"=r\"(ulNewBASEPRI)\r\n                 : \"i\"(configMAX_SYSCALL_INTERRUPT_PRIORITY)\r\n                 : \"memory\");\r\n\r\n  /* This return will not be reached but is necessary to prevent compiler\r\n   warnings. */\r\n  return ulOriginalBASEPRI;\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nportFORCE_INLINE static void vPortSetBASEPRI(uint32_t ulNewMaskValue) { __asm volatile(\"\tmsr basepri, %0\t\" ::\"r\"(ulNewMaskValue) : \"memory\"); }\r\n/*-----------------------------------------------------------*/\r\n\r\n#define portMEMORY_BARRIER() __asm volatile(\"\" ::: \"memory\")\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* PORTMACRO_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/postRTOS.cpp",
    "content": "#include \"BSP.h\"\n\n// Initialisation to be performed with scheduler active\nvoid postRToSInit() {}\n"
  },
  {
    "path": "source/Core/BSP/Miniware/preRTOS.cpp",
    "content": "/*\r\n * preRTOS.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"BSP.h\"\r\n#include \"I2CBB1.hpp\"\r\n#include \"I2CBB2.hpp\"\r\n#include \"Pins.h\"\r\n#include \"Setup.h\"\r\n#include \"configuration.h\"\r\n#include <I2C_Wrapper.hpp>\r\n\r\nvoid preRToSInit() {\r\n  /* Reset of all peripherals, Initializes the Flash interface and the Systick.\r\n   */\r\n  HAL_Init();\r\n  Setup_HAL(); // Setup all the HAL objects\r\n  BSPInit();\r\n#ifdef I2C_SOFT_BUS_2\r\n  I2CBB2::init();\r\n#endif\r\n#ifdef I2C_SOFT_BUS_1\r\n  I2CBB1::init();\r\n#endif\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/stm32f103.ld",
    "content": "\r\n\r\n/* Entry Point */\r\nENTRY(Reset_Handler)\r\n\r\n/* Highest address of the user mode stack */\r\n_estack = 0x20005000;    /* end of RAM */\r\n\r\n_Min_Heap_Size = 0x300;      /* required amount of heap  */\r\n_Min_Stack_Size = 1024; /* required amount of stack */\r\n\r\n__APP_BASE_ADDRESS__ = 0x08000000 + __BOOTLDR_SIZE__;\r\n__ROM_REGION_LENGTH__ = __FLASH_SIZE__ - __BOOTLDR_SIZE__;\r\n__FLASH_END_ADDR__ = __APP_BASE_ADDRESS__ + __ROM_REGION_LENGTH__;\r\n\r\n/* Memories definition */\r\nMEMORY\r\n{\r\n  RAM (xrw)\t\t: ORIGIN = 0x20000000, LENGTH = 20K\r\n  ROM (rx)\t\t: ORIGIN = __APP_BASE_ADDRESS__, LENGTH = __ROM_REGION_LENGTH__\r\n}\r\n/* ROM is normally 48K after the bootloader, however we allocate the last page for settings, and the second last one for display boot logo*/\r\n\r\n/* Sections */\r\nSECTIONS\r\n{\r\n  /* The startup code into ROM memory */\r\n  .isr_vector :\r\n  {\r\n    . = ALIGN(4);\r\n    KEEP(*(.isr_vector)) /* Startup code */\r\n    . = ALIGN(4);\r\n  } >ROM\r\n\r\n  /* The program code and other data into ROM memory */\r\n  .text :\r\n  {\r\n    . = ALIGN(4);\r\n    *(.text)           /* .text sections (code) */\r\n    *(.text*)          /* .text* sections (code) */\r\n    *(.glue_7)         /* glue arm to thumb code */\r\n    *(.glue_7t)        /* glue thumb to arm code */\r\n    *(.eh_frame)\r\n\r\n    KEEP (*(.init))\r\n    KEEP (*(.fini))\r\n\r\n    . = ALIGN(4);\r\n    _etext = .;        /* define a global symbols at end of code */\r\n  } >ROM\r\n\r\n  /* Constant data into ROM memory*/\r\n  .rodata :\r\n  {\r\n    . = ALIGN(4);\r\n    *(.rodata)         /* .rodata sections (constants, strings, etc.) */\r\n    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */\r\n    . = ALIGN(4);\r\n  } >ROM\r\n\r\n  .ARM.extab   : { \r\n  \t. = ALIGN(4);\r\n  \t*(.ARM.extab* .gnu.linkonce.armextab.*)\r\n  \t. = ALIGN(4);\r\n  } >ROM\r\n  \r\n  .ARM : {\r\n    . = ALIGN(4);\r\n    __exidx_start = .;\r\n    *(.ARM.exidx*)\r\n    __exidx_end = .;\r\n    . = ALIGN(4);\r\n  } >ROM\r\n\r\n  .preinit_array     :\r\n  {\r\n    . = ALIGN(4);\r\n    PROVIDE_HIDDEN (__preinit_array_start = .);\r\n    KEEP (*(.preinit_array*))\r\n    PROVIDE_HIDDEN (__preinit_array_end = .);\r\n    . = ALIGN(4);\r\n  } >ROM\r\n  \r\n  .init_array :\r\n  {\r\n    . = ALIGN(4);\r\n    PROVIDE_HIDDEN (__init_array_start = .);\r\n    KEEP (*(SORT(.init_array.*)))\r\n    KEEP (*(.init_array*))\r\n    PROVIDE_HIDDEN (__init_array_end = .);\r\n    . = ALIGN(4);\r\n  } >ROM\r\n  \r\n  .fini_array :\r\n  {\r\n    . = ALIGN(4);\r\n    PROVIDE_HIDDEN (__fini_array_start = .);\r\n    KEEP (*(SORT(.fini_array.*)))\r\n    KEEP (*(.fini_array*))\r\n    PROVIDE_HIDDEN (__fini_array_end = .);\r\n    . = ALIGN(4);\r\n  } >ROM\r\n\r\n  /* Used by the startup to initialize data */\r\n  _sidata = LOADADDR(.data);\r\n\r\n  /* Initialized data sections into RAM memory */\r\n  .data : \r\n  {\r\n    . = ALIGN(4);\r\n    _sdata = .;        /* create a global symbol at data start */\r\n    *(.data)           /* .data sections */\r\n    *(.data*)          /* .data* sections */\r\n\r\n    . = ALIGN(4);\r\n    _edata = .;        /* define a global symbol at data end */\r\n  } >RAM AT> ROM\r\n\r\n\r\n  .bss :\r\n  {\r\n    /* Uninitialized data section into RAM memory */\r\n    . = ALIGN(4);\r\n    /* This is used by the startup in order to initialize the .bss secion */\r\n    _sbss = .;         /* define a global symbol at bss start */\r\n    __bss_start__ = _sbss;\r\n    *(.bss)\r\n    *(.bss*)\r\n    *(COMMON)\r\n\r\n    . = ALIGN(4);\r\n    _ebss = .;         /* define a global symbol at bss end */\r\n    __bss_end__ = _ebss;\r\n  } >RAM\r\n\r\n  /* User_heap_stack section, used to check that there is enough RAM left */\r\n  ._user_heap_stack :\r\n  {\r\n    . = ALIGN(8);\r\n    PROVIDE ( end = . );\r\n    PROVIDE ( _end = . );\r\n    . = . + _Min_Heap_Size;\r\n    . = . + _Min_Stack_Size;\r\n    . = ALIGN(8);\r\n  } >RAM\r\n\r\n  \r\n\r\n  /* Remove information from the compiler libraries */\r\n  /DISCARD/ :\r\n  {\r\n    libc.a ( * )\r\n    libm.a ( * )\r\n    libgcc.a ( * )\r\n  }\r\n\r\n  .ARM.attributes 0 : { *(.ARM.attributes) }\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/stm32f1xx_hal_msp.c",
    "content": "#include \"Pins.h\"\r\n#include \"Setup.h\"\r\n#include \"stm32f1xx_hal.h\"\r\n/**\r\n * Initializes the Global MSP.\r\n */\r\nvoid HAL_MspInit(void) {\r\n  __HAL_RCC_AFIO_CLK_ENABLE();\r\n\r\n  // HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);\r\n\r\n  /* System interrupt init*/\r\n  /* MemoryManagement_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(MemoryManagement_IRQn, 0, 0);\r\n  /* BusFault_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(BusFault_IRQn, 0, 0);\r\n  /* UsageFault_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(UsageFault_IRQn, 0, 0);\r\n  /* SVCall_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(SVCall_IRQn, 0, 0);\r\n  /* DebugMonitor_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(DebugMonitor_IRQn, 0, 0);\r\n  /* PendSV_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);\r\n  /* SysTick_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(SysTick_IRQn, 15, 0);\r\n}\r\n\r\nvoid HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) {\r\n\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  if (hadc->Instance == ADC1) {\r\n    __HAL_RCC_ADC1_CLK_ENABLE();\r\n\r\n    /* ADC1 DMA Init */\r\n    /* ADC1 Init */\r\n    hdma_adc1.Instance                 = DMA1_Channel1;\r\n    hdma_adc1.Init.Direction           = DMA_PERIPH_TO_MEMORY;\r\n    hdma_adc1.Init.PeriphInc           = DMA_PINC_DISABLE;\r\n    hdma_adc1.Init.MemInc              = DMA_MINC_ENABLE;\r\n    hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;\r\n    hdma_adc1.Init.MemDataAlignment    = DMA_MDATAALIGN_HALFWORD;\r\n    hdma_adc1.Init.Mode                = DMA_CIRCULAR;\r\n    hdma_adc1.Init.Priority            = DMA_PRIORITY_MEDIUM;\r\n    HAL_DMA_Init(&hdma_adc1);\r\n\r\n    __HAL_LINKDMA(hadc, DMA_Handle, hdma_adc1);\r\n\r\n    /* ADC1 interrupt Init */\r\n    HAL_NVIC_SetPriority(ADC1_2_IRQn, 15, 0);\r\n    HAL_NVIC_EnableIRQ(ADC1_2_IRQn);\r\n  } else {\r\n    __HAL_RCC_ADC2_CLK_ENABLE();\r\n\r\n    /**ADC2 GPIO Configuration\r\n     PB0     ------> ADC2_IN8\r\n     PB1     ------> ADC2_IN9\r\n     */\r\n    GPIO_InitStruct.Pin  = TIP_TEMP_Pin;\r\n    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;\r\n    GPIO_InitStruct.Pull = GPIO_NOPULL;\r\n    HAL_GPIO_Init(TIP_TEMP_GPIO_Port, &GPIO_InitStruct);\r\n\r\n    GPIO_InitStruct.Pin  = TMP36_INPUT_Pin;\r\n    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;\r\n    HAL_GPIO_Init(TMP36_INPUT_GPIO_Port, &GPIO_InitStruct);\r\n\r\n    GPIO_InitStruct.Pin  = VIN_Pin;\r\n    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;\r\n    HAL_GPIO_Init(VIN_GPIO_Port, &GPIO_InitStruct);\r\n\r\n#ifdef PD_VIN_Pin\r\n\r\n    GPIO_InitStruct.Pin  = PD_VIN_Pin;\r\n    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;\r\n    HAL_GPIO_Init(PD_VIN_GPIO_Port, &GPIO_InitStruct);\r\n#endif\r\n    /* ADC2 interrupt Init */\r\n    HAL_NVIC_SetPriority(ADC1_2_IRQn, 15, 0);\r\n    HAL_NVIC_EnableIRQ(ADC1_2_IRQn);\r\n  }\r\n}\r\n\r\nvoid HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim_base) {\r\n  if (htim_base->Instance == TIM3) {\r\n    /* Peripheral clock enable */\r\n    __HAL_RCC_TIM3_CLK_ENABLE();\r\n  } else if (htim_base->Instance == TIM2) {\r\n    /* Peripheral clock enable */\r\n    __HAL_RCC_TIM2_CLK_ENABLE();\r\n  } else if (htim_base->Instance == TIM4) {\r\n    /* Peripheral clock enable */\r\n    __HAL_RCC_TIM4_CLK_ENABLE();\r\n  }\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/stm32f1xx_hal_timebase_TIM.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_timebase_TIM.c\r\n * @brief   HAL time base based on the hardware TIM.\r\n ******************************************************************************\r\n * This notice applies to any and all portions of this file\r\n * that are not between comment pairs USER CODE BEGIN and\r\n * USER CODE END. Other portions of this file, whether\r\n * inserted by the user or by software development tools\r\n * are owned by their respective copyright owners.\r\n *\r\n * Copyright (c) 2017 STMicroelectronics International N.V.\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted, provided that the following conditions are met:\r\n *\r\n * 1. Redistribution of source code must retain the above copyright notice,\r\n *    this list of conditions and the following disclaimer.\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n *    this list of conditions and the following disclaimer in the documentation\r\n *    and/or other materials provided with the distribution.\r\n * 3. Neither the name of STMicroelectronics nor the names of other\r\n *    contributors to this software may be used to endorse or promote products\r\n *    derived from this software without specific written permission.\r\n * 4. This software, including modifications and/or derivative works of this\r\n *    software, must execute solely and exclusively on microcontroller or\r\n *    microprocessor devices manufactured by or for STMicroelectronics.\r\n * 5. Redistribution and use of this software other than as permitted under\r\n *    this license is void and will automatically terminate your rights under\r\n *    this license.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT\r\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\n * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY\r\n * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT\r\n * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r\n * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r\n * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n#include \"stm32f1xx_hal_tim.h\"\r\n/** @addtogroup STM32F7xx_HAL_Examples\r\n * @{\r\n */\r\n\r\n/** @addtogroup HAL_TimeBase\r\n * @{\r\n */\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\nTIM_HandleTypeDef htim1;\r\nuint32_t          uwIncrementState = 0;\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n\r\n/**\r\n * @brief  This function configures the TIM1 as a time base source.\r\n *         The time source is configured  to have 1ms time base with a dedicated\r\n *         Tick interrupt priority.\r\n * @note   This function is called  automatically at the beginning of program after\r\n *         reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig().\r\n * @param  TickPriority: Tick interrupt priorty.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {\r\n  RCC_ClkInitTypeDef clkconfig;\r\n  uint32_t           uwTimclock       = 0;\r\n  uint32_t           uwPrescalerValue = 0;\r\n  uint32_t           pFLatency;\r\n\r\n  /*Configure the TIM1 IRQ priority */\r\n  HAL_NVIC_SetPriority(TIM1_UP_IRQn, TickPriority, 0);\r\n\r\n  /* Enable the TIM1 global Interrupt */\r\n  HAL_NVIC_EnableIRQ(TIM1_UP_IRQn);\r\n\r\n  /* Enable TIM1 clock */\r\n  __HAL_RCC_TIM1_CLK_ENABLE();\r\n\r\n  /* Get clock configuration */\r\n  HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);\r\n\r\n  /* Compute TIM1 clock */\r\n  uwTimclock = HAL_RCC_GetPCLK2Freq();\r\n\r\n  /* Compute the prescaler value to have TIM1 counter clock equal to 1MHz */\r\n  uwPrescalerValue = (uint32_t)((uwTimclock / 1000000) - 1);\r\n\r\n  /* Initialize TIM1 */\r\n  htim1.Instance = TIM1;\r\n\r\n  /* Initialize TIMx peripheral as follow:\r\n   + Period = [(TIM1CLK/1000) - 1]. to have a (1/1000) s time base.\r\n   + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.\r\n   + ClockDivision = 0\r\n   + Counter direction = Up\r\n   */\r\n  htim1.Init.Period        = (1000000 / 1000) - 1;\r\n  htim1.Init.Prescaler     = uwPrescalerValue;\r\n  htim1.Init.ClockDivision = 0;\r\n  htim1.Init.CounterMode   = TIM_COUNTERMODE_UP;\r\n  if (HAL_TIM_Base_Init(&htim1) == HAL_OK) {\r\n    /* Start the TIM time Base generation in interrupt mode */\r\n    return HAL_TIM_Base_Start_IT(&htim1);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_ERROR;\r\n}\r\n\r\n/**\r\n * @brief  Suspend Tick increment.\r\n * @note   Disable the tick increment by disabling TIM1 update interrupt.\r\n * @param  None\r\n * @retval None\r\n */\r\nvoid HAL_SuspendTick(void) {\r\n  /* Disable TIM1 update Interrupt */\r\n  __HAL_TIM_DISABLE_IT(&htim1, TIM_IT_UPDATE);\r\n}\r\n\r\n/**\r\n * @brief  Resume Tick increment.\r\n * @note   Enable the tick increment by Enabling TIM1 update interrupt.\r\n * @param  None\r\n * @retval None\r\n */\r\nvoid HAL_ResumeTick(void) {\r\n  /* Enable TIM1 Update interrupt */\r\n  __HAL_TIM_ENABLE_IT(&htim1, TIM_IT_UPDATE);\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/stm32f1xx_it.c",
    "content": "// This is the stock standard STM interrupt file full of handlers\r\n#include \"stm32f1xx_it.h\"\r\n#include \"Pins.h\"\r\n#include \"Setup.h\"\r\n#include \"cmsis_os.h\"\r\n#include \"stm32f1xx.h\"\r\n#include \"stm32f1xx_hal.h\"\r\n\r\nextern TIM_HandleTypeDef htim1; // used for the systick\r\n\r\n/******************************************************************************/\r\n/*            Cortex-M3 Processor Interruption and Exception Handlers         */\r\n/******************************************************************************/\r\n\r\n// Systick is used by FreeRTOS tick\r\nvoid SysTick_Handler(void) { osSystickHandler(); }\r\n\r\n/******************************************************************************/\r\n/* STM32F1xx Peripheral Interrupt Handlers                                    */\r\n/* Add here the Interrupt Handlers for the used peripherals.                  */\r\n/* For the available peripheral interrupt handler names,                      */\r\n/* please refer to the startup file.\t\t\t\t\t                      */\r\n/******************************************************************************/\r\n\r\n// DMA used to move the ADC readings into system ram\r\nvoid DMA1_Channel1_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_adc1); }\r\n// ADC interrupt used for DMA\r\nvoid ADC1_2_IRQHandler(void) { HAL_ADC_IRQHandler(&hadc1); }\r\n\r\n// Timer 1 has overflowed, used for HAL ticks\r\nvoid TIM1_UP_IRQHandler(void) { HAL_TIM_IRQHandler(&htim1); }\r\n\r\n// Timer 3 is used for the PWM output to the tip\r\nvoid TIM3_IRQHandler(void) {\r\n  TIM_HandleTypeDef *handle = &htimADC;\r\n  if (htimTip.Instance == TIM3) {\r\n    handle = &htimTip;\r\n  }\r\n  HAL_TIM_IRQHandler(handle);\r\n}\r\n\r\n// Timer 2 is used for co-ordination of PWM & ADC\r\nvoid TIM2_IRQHandler(void) {\r\n  TIM_HandleTypeDef *handle = &htimADC;\r\n  if (htimTip.Instance == TIM2) {\r\n    handle = &htimTip;\r\n  }\r\n  HAL_TIM_IRQHandler(handle);\r\n}\r\n\r\n// Timer 2 is used for co-ordination of PWM & ADC\r\nvoid TIM4_IRQHandler(void) {\r\n  TIM_HandleTypeDef *handle = &htimADC;\r\n  if (htimTip.Instance == TIM4) {\r\n    handle = &htimTip;\r\n  }\r\n  HAL_TIM_IRQHandler(handle);\r\n}\r\n\r\nvoid EXTI9_5_IRQHandler(void) {\r\n#ifdef INT_PD_Pin\r\n  HAL_GPIO_EXTI_IRQHandler(INT_PD_Pin);\r\n#endif\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Miniware/system_stm32f1xx.c",
    "content": "// This file was automatically generated by the STM Cube software\r\n// And as such, is BSD licneced from STM\r\n#include \"stm32f1xx.h\"\r\n\r\n#if !defined(HSI_VALUE)\r\n#define HSI_VALUE                                                                                                                                                                                      \\\r\n  8000000U /*!< Default value of the Internal oscillator in Hz.                                                                                                                                        \\\r\n                This value can be provided and adapted by the user application. */\r\n#endif     /* HSI_VALUE */\r\n\r\n/*!< Uncomment the following line if you need to use external SRAM  */\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/* #define DATA_IN_ExtSRAM */\r\n#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */\r\n#ifndef VECT_TAB_OFFSET\r\n#error VECT_TAB_OFFSET\r\n#endif\r\n\r\n/*******************************************************************************\r\n *  Clock Definitions\r\n *******************************************************************************/\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\nuint32_t SystemCoreClock = 24000000U; /*!< System Clock Frequency (Core Clock) */\r\n#else                                 /*!< HSI Selected as System Clock source */\r\nuint32_t SystemCoreClock = 64000000U; /*!< System Clock Frequency (Core Clock) */\r\n#endif\r\n\r\nconst uint8_t AHBPrescTable[16U] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};\r\nconst uint8_t APBPrescTable[8U]  = {0, 0, 0, 0, 1, 2, 3, 4};\r\n\r\n/**\r\n * @brief  Setup the microcontroller system\r\n *         Initialize the Embedded Flash Interface, the PLL and update the\r\n *         SystemCoreClock variable.\r\n * @note   This function should be used only after reset.\r\n * @param  None\r\n * @retval None\r\n */\r\nvoid SystemInit(void) {\r\n  /* Reset the RCC clock configuration to the default reset state(for debug purpose) */\r\n  /* Set HSION bit */\r\n  RCC->CR |= 0x00000001U;\r\n\r\n  /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */\r\n#if !defined(STM32F105xC) && !defined(STM32F107xC)\r\n  RCC->CFGR &= 0xF8FF0000U;\r\n#else\r\n  RCC->CFGR &= 0xF0FF0000U;\r\n#endif /* STM32F105xC */\r\n\r\n  /* Reset HSEON, CSSON and PLLON bits */\r\n  RCC->CR &= 0xFEF6FFFFU;\r\n\r\n  /* Reset HSEBYP bit */\r\n  RCC->CR &= 0xFFFBFFFFU;\r\n\r\n  /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */\r\n  RCC->CFGR &= 0xFF80FFFFU;\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  /* Reset PLL2ON and PLL3ON bits */\r\n  RCC->CR &= 0xEBFFFFFFU;\r\n\r\n  /* Disable all interrupts and clear pending bits  */\r\n  RCC->CIR = 0x00FF0000U;\r\n\r\n  /* Reset CFGR2 register */\r\n  RCC->CFGR2 = 0x00000000U;\r\n#elif defined(STM32F100xB) || defined(STM32F100xE)\r\n  /* Disable all interrupts and clear pending bits  */\r\n  RCC->CIR = 0x009F0000U;\r\n\r\n  /* Reset CFGR2 register */\r\n  RCC->CFGR2 = 0x00000000U;\r\n#else\r\n  /* Disable all interrupts and clear pending bits  */\r\n  RCC->CIR = 0x009F0000U;\r\n#endif /* STM32F105xC */\r\n\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#ifdef DATA_IN_ExtSRAM\r\n  SystemInit_ExtMemCtl();\r\n#endif /* DATA_IN_ExtSRAM */\r\n#endif\r\n\r\n#ifdef VECT_TAB_SRAM\r\n  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */\r\n#else\r\n  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief  Update SystemCoreClock variable according to Clock Register Values.\r\n *         The SystemCoreClock variable contains the core clock (HCLK), it can\r\n *         be used by the user application to setup the SysTick timer or configure\r\n *         other parameters.\r\n *\r\n * @note   Each time the core clock (HCLK) changes, this function must be called\r\n *         to update SystemCoreClock variable value. Otherwise, any configuration\r\n *         based on this variable will be incorrect.\r\n *\r\n * @note   - The system frequency computed by this function is not the real\r\n *           frequency in the chip. It is calculated based on the predefined\r\n *           constant and the selected clock source:\r\n *\r\n *           - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)\r\n *\r\n *           - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)\r\n *\r\n *           - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)\r\n *             or HSI_VALUE(*) multiplied by the PLL factors.\r\n *\r\n *         (*) HSI_VALUE is a constant defined in stm32f1xx.h file (default value\r\n *             8 MHz) but the real value may vary depending on the variations\r\n *             in voltage and temperature.\r\n *\r\n *         (**) HSE_VALUE is a constant defined in stm32f1xx.h file (default value\r\n *              8 MHz or 25 MHz, depending on the product used), user has to ensure\r\n *              that HSE_VALUE is same as the real frequency of the crystal used.\r\n *              Otherwise, this function may have wrong result.\r\n *\r\n *         - The result of this function could be not correct when using fractional\r\n *           value for HSE crystal.\r\n * @param  None\r\n * @retval None\r\n */\r\nvoid SystemCoreClockUpdate(void) {\r\n  uint32_t tmp = 0U, pllmull = 0U, pllsource = 0U;\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t prediv1source = 0U, prediv1factor = 0U, prediv2factor = 0U, pll2mull = 0U;\r\n#endif /* STM32F105xC */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n  uint32_t prediv1factor = 0U;\r\n#endif /* STM32F100xB or STM32F100xE */\r\n\r\n  /* Get SYSCLK source -------------------------------------------------------*/\r\n  tmp = RCC->CFGR & RCC_CFGR_SWS;\r\n\r\n  switch (tmp) {\r\n  case 0x00U: /* HSI used as system clock */\r\n    SystemCoreClock = HSI_VALUE;\r\n    break;\r\n  case 0x04U: /* HSE used as system clock */\r\n    SystemCoreClock = HSE_VALUE;\r\n    break;\r\n  case 0x08U: /* PLL used as system clock */\r\n\r\n    /* Get PLL clock source and multiplication factor ----------------------*/\r\n    pllmull   = RCC->CFGR & RCC_CFGR_PLLMULL;\r\n    pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;\r\n\r\n#if !defined(STM32F105xC) && !defined(STM32F107xC)\r\n    pllmull = (pllmull >> 18U) + 2U;\r\n\r\n    if (pllsource == 0x00U) {\r\n      /* HSI oscillator clock divided by 2 selected as PLL clock entry */\r\n      SystemCoreClock = (HSI_VALUE >> 1U) * pllmull;\r\n    } else {\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n      prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U;\r\n      /* HSE oscillator clock selected as PREDIV1 clock entry */\r\n      SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull;\r\n#else\r\n      /* HSE selected as PLL clock entry */\r\n      if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET) { /* HSE oscillator clock divided by 2 */\r\n        SystemCoreClock = (HSE_VALUE >> 1U) * pllmull;\r\n      } else {\r\n        SystemCoreClock = HSE_VALUE * pllmull;\r\n      }\r\n#endif\r\n    }\r\n#else\r\n    pllmull = pllmull >> 18U;\r\n\r\n    if (pllmull != 0x0DU) {\r\n      pllmull += 2U;\r\n    } else { /* PLL multiplication factor = PLL input clock * 6.5 */\r\n      pllmull = 13U / 2U;\r\n    }\r\n\r\n    if (pllsource == 0x00U) {\r\n      /* HSI oscillator clock divided by 2 selected as PLL clock entry */\r\n      SystemCoreClock = (HSI_VALUE >> 1U) * pllmull;\r\n    } else { /* PREDIV1 selected as PLL clock entry */\r\n\r\n      /* Get PREDIV1 clock source and division factor */\r\n      prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC;\r\n      prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U;\r\n\r\n      if (prediv1source == 0U) {\r\n        /* HSE oscillator clock selected as PREDIV1 clock entry */\r\n        SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull;\r\n      } else { /* PLL2 clock selected as PREDIV1 clock entry */\r\n\r\n        /* Get PREDIV2 division factor and PLL2 multiplication factor */\r\n        prediv2factor   = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4U) + 1U;\r\n        pll2mull        = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8U) + 2U;\r\n        SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull;\r\n      }\r\n    }\r\n#endif /* STM32F105xC */\r\n    break;\r\n\r\n  default:\r\n    SystemCoreClock = HSI_VALUE;\r\n    break;\r\n  }\r\n\r\n  /* Compute HCLK clock frequency ----------------*/\r\n  /* Get HCLK prescaler */\r\n  tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4U)];\r\n  /* HCLK clock frequency */\r\n  SystemCoreClock >>= tmp;\r\n}\r\n\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief  Setup the external memory controller. Called in startup_stm32f1xx.s\r\n *          before jump to __main\r\n * @param  None\r\n * @retval None\r\n */\r\n#ifdef DATA_IN_ExtSRAM\r\n/**\r\n * @brief  Setup the external memory controller.\r\n *         Called in startup_stm32f1xx_xx.s/.c before jump to main.\r\n *         This function configures the external SRAM mounted on STM3210E-EVAL\r\n *         board (STM32 High density devices). This SRAM will be used as program\r\n *         data memory (including heap and stack).\r\n * @param  None\r\n * @retval None\r\n */\r\nvoid SystemInit_ExtMemCtl(void) {\r\n  __IO uint32_t tmpreg;\r\n  /*!< FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is\r\n    required, then adjust the Register Addresses */\r\n\r\n  /* Enable FSMC clock */\r\n  RCC->AHBENR = 0x00000114U;\r\n\r\n  /* Delay after an RCC peripheral clock enabling */\r\n  tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN);\r\n\r\n  /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */\r\n  RCC->APB2ENR = 0x000001E0U;\r\n\r\n  /* Delay after an RCC peripheral clock enabling */\r\n  tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN);\r\n\r\n  (void)(tmpreg);\r\n\r\n  /* ---------------  SRAM Data lines, NOE and NWE configuration ---------------*/\r\n  /*----------------  SRAM Address lines configuration -------------------------*/\r\n  /*----------------  NOE and NWE configuration --------------------------------*/\r\n  /*----------------  NE3 configuration ----------------------------------------*/\r\n  /*----------------  NBL0, NBL1 configuration ---------------------------------*/\r\n\r\n  GPIOD->CRL = 0x44BB44BBU;\r\n  GPIOD->CRH = 0xBBBBBBBBU;\r\n\r\n  GPIOE->CRL = 0xB44444BBU;\r\n  GPIOE->CRH = 0xBBBBBBBBU;\r\n\r\n  GPIOF->CRL = 0x44BBBBBBU;\r\n  GPIOF->CRH = 0xBBBB4444U;\r\n\r\n  GPIOG->CRL = 0x44BBBBBBU;\r\n  GPIOG->CRH = 0x444B4B44U;\r\n\r\n  /*----------------  FSMC Configuration ---------------------------------------*/\r\n  /*----------------  Enable FSMC Bank1_SRAM Bank ------------------------------*/\r\n\r\n  FSMC_Bank1->BTCR[4U] = 0x00001091U;\r\n  FSMC_Bank1->BTCR[5U] = 0x00110212U;\r\n}\r\n#endif /* DATA_IN_ExtSRAM */\r\n#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/BSP.cpp",
    "content": "// BSP mapping functions\r\n\r\n#include \"BSP.h\"\r\n#include \"BootLogo.h\"\r\n#include \"I2C_Wrapper.hpp\"\r\n#include \"IRQ.h\"\r\n#include \"Pins.h\"\r\n#include \"Settings.h\"\r\n#include \"Setup.h\"\r\n#include \"TipThermoModel.h\"\r\n#include \"configuration.h\"\r\n#include \"gd32vf103_timer.h\"\r\n#include \"history.hpp\"\r\n#include \"main.hpp\"\r\n\r\nconst uint16_t powerPWM         = 255;\r\nconst uint8_t  holdoffTicks     = 10;\r\nconst uint8_t  tempMeasureTicks = 14;\r\n\r\nuint16_t totalPWM; // Total length of the cycle's ticks\r\n\r\nvoid resetWatchdog() { fwdgt_counter_reload(); }\r\n\r\nuint16_t getHandleTemperature(uint8_t sample) {\r\n#ifdef TEMP_TMP36\r\n  // We return the current handle temperature in X10 C\r\n  // TMP36 in handle, 0.5V offset and then 10mV per deg C (0.75V @ 25C for\r\n  // example) STM32 = 4096 count @ 3.3V input -> But We oversample by 32/(2^2) =\r\n  // 8 times oversampling Therefore 32768 is the 3.3V input, so 0.1007080078125\r\n  // mV per count So we need to subtract an offset of 0.5V to center on 0C\r\n  // (4964.8 counts)\r\n  //\r\n  int32_t result = getADCHandleTemp(sample);\r\n  result -= 4965; // remove 0.5V offset\r\n  // 10mV per C\r\n  // 99.29 counts per Deg C above 0C\r\n  result *= 100;\r\n  result /= 993;\r\n  return result;\r\n#else\r\n#error Pinecil only uses TMP36\r\n#endif\r\n}\r\nuint16_t getInputVoltageX10(uint16_t divisor, uint8_t sample) {\r\n  uint32_t res = getADCVin(sample);\r\n  res *= 4;\r\n  res /= divisor;\r\n  return res;\r\n}\r\n\r\nvoid unstick_I2C() {\r\n  /* configure SDA/SCL for GPIO */\r\n  GPIO_BC(GPIOB) |= SDA_Pin | SCL_Pin;\r\n  gpio_init(SDA_GPIO_Port, GPIO_MODE_OUT_OD, GPIO_OSPEED_50MHZ, SDA_Pin | SCL_Pin);\r\n  for (int i = 0; i < 8; i++) {\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    GPIO_BOP(GPIOB) |= SCL_Pin;\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    GPIO_BOP(GPIOB) &= SCL_Pin;\r\n  }\r\n  /* connect PB6 to I2C0_SCL */\r\n  /* connect PB7 to I2C0_SDA */\r\n  gpio_init(SDA_GPIO_Port, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, SDA_Pin | SCL_Pin);\r\n}\r\n\r\nuint8_t getButtonA() { return (gpio_input_bit_get(KEY_A_GPIO_Port, KEY_A_Pin) == SET) ? 1 : 0; }\r\nuint8_t getButtonB() { return (gpio_input_bit_get(KEY_B_GPIO_Port, KEY_B_Pin) == SET) ? 1 : 0; }\r\n\r\nvoid reboot() { eclic_system_reset(); }\r\n\r\nvoid     delay_ms(uint16_t count) { delay_1ms(count); }\r\nuint32_t __get_IPSR(void) {\r\n  return 0; // To shut-up CMSIS\r\n}\r\n\r\nbool isTipDisconnected() {\r\n\r\n  uint16_t tipDisconnectedThres = TipThermoModel::getTipMaxInC() - 5;\r\n  uint32_t tipTemp              = TipThermoModel::getTipInC();\r\n  return tipTemp > tipDisconnectedThres;\r\n}\r\n\r\nvoid setStatusLED(const enum StatusLED state) {}\r\nvoid setBuzzer(bool on) {}\r\n\r\nuint8_t  preStartChecks() { return 1; }\r\nuint64_t getDeviceID() { return dbg_id_get(); }\r\n\r\nuint8_t getTipResistanceX10() {\r\n  uint8_t user_selected_tip = getUserSelectedTipResistance();\r\n  if (user_selected_tip == 0) {\r\n    return TIP_RESISTANCE; // Auto mode\r\n  }\r\n  return user_selected_tip;\r\n}\r\nbool    isTipShorted() { return false; }\r\nuint8_t preStartChecksDone() { return 1; }\r\n\r\nuint16_t getTipThermalMass() { return TIP_THERMAL_MASS; }\r\nuint16_t getTipInertia() { return TIP_THERMAL_MASS; }\r\n\r\nvoid showBootLogo(void) { BootLogo::handleShowingLogo((uint8_t *)FLASH_LOGOADDR); }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Debug.cpp",
    "content": "/*\r\n * Debug.cpp\r\n *\r\n *  Created on: 26 Jan. 2021\r\n *      Author: Ralim\r\n */\r\n#include \"Debug.h\"\r\n#include \"FreeRTOS.h\"\r\n#include \"Pins.h\"\r\n\r\nextern \"C\" {\r\n\r\n#include \"gd32vf103_usart.h\"\r\n}\r\nchar                    uartOutputBuffer[uartOutputBufferLength];\r\nvolatile uint32_t       currentOutputPos = 0xFF;\r\nvolatile uint32_t       outputLength     = 0;\r\nextern volatile uint8_t pendingPWM;\r\nvoid                    log_system_state(int32_t PWMWattsx10) {\r\n  if (currentOutputPos == 0xFF) {\r\n\r\n    // Want to print a CSV log out the uart\r\n    // Tip_Temp_C,Handle_Temp_C,Output_Power_Wattx10,PWM,Tip_Raw\\r\\n\r\n    // 3+1+3+1+3+1+3+1+5+2 = 23, so sizing at 32 for now\r\n\r\n    outputLength = snprintf(uartOutputBuffer, uartOutputBufferLength, \"%lu,%u,%li,%u,%lu\\r\\n\",\r\n                                               TipThermoModel::getTipInC(false),                            // Tip temp in C\r\n                                               getHandleTemperature(0),                                     // Handle temp in C X10\r\n                                               PWMWattsx10,                                                 // Output Wattage\r\n                                               pendingPWM,                                                  // PWM\r\n                                               TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0), true) // Tip temp in uV\r\n                       );\r\n\r\n    // Now print this out the uart via IRQ (DMA cant be used as oled has it)\r\n    currentOutputPos = 0;\r\n    /* enable USART1 Transmit Buffer Empty interrupt */\r\n    usart_interrupt_enable(UART_PERIF, USART_INT_TBE);\r\n  }\r\n}\r\nssize_t _write(int fd, const void *ptr, size_t len) {\r\n  if (len > uartOutputBufferLength) {\r\n    len = uartOutputBufferLength;\r\n  }\r\n  outputLength     = len;\r\n  currentOutputPos = 0;\r\n  memcpy(uartOutputBuffer, ptr, len);\r\n  /* enable USART1 Transmit Buffer Empty interrupt */\r\n  usart_interrupt_enable(UART_PERIF, USART_INT_TBE);\r\n  delay_ms(1);\r\n  return len;\r\n}\r\nvoid USART1_IRQHandler(void) {\r\n  if (RESET != usart_interrupt_flag_get(UART_PERIF, USART_INT_FLAG_TBE)) {\r\n    /* write one byte to the transmit data register */\r\n    usart_data_transmit(UART_PERIF, uartOutputBuffer[currentOutputPos++]);\r\n    if (currentOutputPos >= outputLength) {\r\n      currentOutputPos = 0xFF; // Mark done\r\n      usart_interrupt_disable(UART_PERIF, USART_INT_TBE);\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Debug.h",
    "content": "/*\r\n * Debug.h\r\n *\r\n *  Created on: 26 Jan. 2021\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef CORE_BSP_PINE64_DEBUG_H_\r\n#define CORE_BSP_PINE64_DEBUG_H_\r\n\r\n#include \"BSP.h\"\r\n#include \"TipThermoModel.h\"\r\n#include <stdio.h>\r\n#include <string.h>\r\n\r\nconst unsigned int uartOutputBufferLength = 32;\r\nextern char        uartOutputBuffer[uartOutputBufferLength];\r\nextern \"C\" {\r\nssize_t _write(int fd, const void *ptr, size_t len);\r\nvoid    USART1_IRQHandler(void);\r\n}\r\n#endif /* CORE_BSP_PINE64_DEBUG_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/FreeRTOSConfig.h",
    "content": "#ifndef FREERTOS_CONFIG_H\n#define FREERTOS_CONFIG_H\n#include \"nuclei_sdk_soc.h\"\n#include <stdint.h>\n#define configUSE_PREEMPTION                    1\n#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0\n#define configUSE_TICKLESS_IDLE                 0\n#define configCPU_CLOCK_HZ                      ((uint32_t)SystemCoreClock)\n#define configRTC_CLOCK_HZ                      ((uint32_t)32768)\n#define configTICK_RATE_HZ                      ((TickType_t)1000)\n#define configMAX_PRIORITIES                    (7)\n#define configMINIMAL_STACK_SIZE                ((unsigned short)128)\n#define configMAX_TASK_NAME_LEN                 24\n#define configIDLE_SHOULD_YIELD                 0\n#define configUSE_TASK_NOTIFICATIONS            1\n#define configUSE_MUTEXES                       1\n#define configUSE_RECURSIVE_MUTEXES             0\n#define configUSE_COUNTING_SEMAPHORES           0\n#define configQUEUE_REGISTRY_SIZE               10\n#define configUSE_QUEUE_SETS                    0\n#define configUSE_TIME_SLICING                  1\n#define configUSE_NEWLIB_REENTRANT              0\n#define configENABLE_BACKWARD_COMPATIBILITY     0\n#define configTICK_TYPE_WIDTH_IN_BITS           TICK_TYPE_WIDTH_32_BITS\n\n#define INCLUDE_uxTaskGetStackHighWaterMark 1\n#define INCLUDE_xTaskGetSchedulerState      1\n#define INCLUDE_vTaskDelay                  1\n/* Memory allocation related definitions. */\n#define configSUPPORT_STATIC_ALLOCATION  1\n#define configSUPPORT_DYNAMIC_ALLOCATION 0\n#define configTOTAL_HEAP_SIZE            1024\n#define configAPPLICATION_ALLOCATED_HEAP 0\n\n/* Hook function related definitions. */\n#define configUSE_IDLE_HOOK                1\n#define configUSE_TICK_HOOK                0\n#define configCHECK_FOR_STACK_OVERFLOW     1\n#define configUSE_MALLOC_FAILED_HOOK       0\n#define configUSE_DAEMON_TASK_STARTUP_HOOK 0\n\n/* Run time and task stats gathering related definitions. */\n#define configGENERATE_RUN_TIME_STATS        0\n#define configUSE_TRACE_FACILITY             0\n#define configUSE_STATS_FORMATTING_FUNCTIONS 0\n\n/* Co-routine related definitions. */\n#define configUSE_CO_ROUTINES           0\n#define configMAX_CO_ROUTINE_PRIORITIES 1\n\n/* Software timer related definitions. */\n#define configUSE_TIMERS             0\n#define configTIMER_TASK_PRIORITY    3\n#define configTIMER_QUEUE_LENGTH     5\n#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE\n\n/* Interrupt nesting behaviour configuration. */\n#define configPRIO_BITS                              (4UL)\n#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY      0x1\n#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 0xe\n#define configKERNEL_INTERRUPT_PRIORITY              (configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))\n#define configMAX_SYSCALL_INTERRUPT_PRIORITY         (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))\n\n/* Define to trap errors during development. */\n#define configASSERT(x)                                                                                                                                                                                \\\n  if ((x) == 0) {                                                                                                                                                                                      \\\n    taskDISABLE_INTERRUPTS();                                                                                                                                                                          \\\n    for (;;)                                                                                                                                                                                           \\\n      ;                                                                                                                                                                                                \\\n  }\n\n#define INCLUDE_vTaskPrioritySet            1\n#define INCLUDE_uxTaskPriorityGet           1\n#define INCLUDE_vTaskDelete                 1\n#define INCLUDE_vTaskSuspend                1\n#define INCLUDE_xResumeFromISR              1\n#define INCLUDE_vTaskDelayUntil             1\n#define INCLUDE_vTaskDelay                  1\n#define INCLUDE_xTaskGetSchedulerState      1\n#define INCLUDE_xTaskGetCurrentTaskHandle   1\n#define INCLUDE_uxTaskGetStackHighWaterMark 1\n#define INCLUDE_xTaskGetIdleTaskHandle      1\n#define INCLUDE_eTaskGetState               0\n#define INCLUDE_xEventGroupSetBitFromISR    1\n#define INCLUDE_xTimerPendFunctionCall      0\n#define INCLUDE_xTaskAbortDelay             0\n#define INCLUDE_xTaskGetHandle              1\n#define INCLUDE_xTaskResumeFromISR          1\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n#endif /* FREERTOS_CONFIG_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/I2C_Wrapper.cpp",
    "content": "/*\r\n * FRToSI2C.cpp\r\n *\r\n *  Created on: 14Apr.,2018\r\n *      Author: Ralim\r\n */\r\n#include \"BSP.h\"\r\n#include \"IRQ.h\"\r\n#include \"Setup.h\"\r\n#include <I2C_Wrapper.hpp>\r\n\r\nSemaphoreHandle_t FRToSI2C::I2CSemaphore = nullptr;\r\nStaticSemaphore_t FRToSI2C::xSemaphoreBuffer;\r\n#define I2C_TIME_OUT (uint16_t)(12000)\r\nvoid FRToSI2C::CpltCallback() {\r\n  // TODO\r\n}\r\n\r\nbool FRToSI2C::I2C_RegisterWrite(uint8_t address, uint8_t reg, uint8_t data) { return Mem_Write(address, reg, &data, 1); }\r\n\r\nuint8_t FRToSI2C::I2C_RegisterRead(uint8_t add, uint8_t reg) {\r\n  uint8_t temp = 0;\r\n  Mem_Read(add, reg, &temp, 1);\r\n  return temp;\r\n}\r\n\r\nenum class i2c_step {\r\n  // Write+read steps\r\n  Write_start,                 // Sending start on bus\r\n  Write_device_address,        // start sent, send device address\r\n  Write_device_memory_address, // device address sent, write the memory location\r\n  Write_device_data_start,     // Write all of the remaining data using DMA\r\n  Write_device_data_finish,    // Write all of the remaining data using DMA\r\n\r\n  Read_start,              // second read\r\n  Read_device_address,     // Send device address again for the read\r\n  Read_device_data_start,  // read device data via DMA\r\n  Read_device_data_finish, // read device data via DMA\r\n  Send_stop,               // send the stop at the end of the transaction\r\n  Wait_stop,               // Wait for stop to send and we are done\r\n  Done,                    // Finished\r\n  Error_occured,           // Error occured on the bus\r\n};\r\n\r\nstruct i2c_state {\r\n  i2c_step             currentStep;\r\n  bool                 isMemoryWrite;\r\n  bool                 wakePart;\r\n  uint8_t              deviceAddress;\r\n  uint8_t              memoryAddress;\r\n  uint8_t             *buffer;\r\n  uint16_t             numberOfBytes;\r\n  dma_parameter_struct dma_init_struct;\r\n};\r\n\r\ni2c_state currentState;\r\n\r\nvoid perform_i2c_step() {\r\n  // Performs next step of the i2c state machine\r\n  if (i2c_flag_get(I2C0, I2C_FLAG_AERR)) {\r\n    i2c_flag_clear(I2C0, I2C_FLAG_AERR);\r\n    // Arb error - we lost the bus / nacked\r\n    currentState.currentStep = i2c_step::Error_occured;\r\n  }\r\n  switch (currentState.currentStep) {\r\n  case i2c_step::Error_occured:\r\n    i2c_stop_on_bus(I2C0);\r\n    break;\r\n  case i2c_step::Write_start:\r\n\r\n    /* enable acknowledge */\r\n    i2c_ack_config(I2C0, I2C_ACK_ENABLE);\r\n    /* i2c master sends start signal only when the bus is idle */\r\n    if (!i2c_flag_get(I2C0, I2C_FLAG_I2CBSY)) {\r\n      /* send the start signal */\r\n      i2c_start_on_bus(I2C0);\r\n      currentState.currentStep = i2c_step::Write_device_address;\r\n    }\r\n    break;\r\n\r\n  case i2c_step::Write_device_address:\r\n    /* i2c master sends START signal successfully */\r\n    if (i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) {\r\n      i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND); // Clear sbsend by reading ctrl banks\r\n      i2c_master_addressing(I2C0, currentState.deviceAddress, I2C_TRANSMITTER);\r\n      currentState.currentStep = i2c_step::Write_device_memory_address;\r\n    }\r\n    break;\r\n  case i2c_step::Write_device_memory_address:\r\n    // Send the device memory location\r\n\r\n    if (i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) { // addr sent\r\n      i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);\r\n\r\n      if (currentState.wakePart) {\r\n        // We are stopping here\r\n        currentState.currentStep = i2c_step::Send_stop;\r\n        return;\r\n      }\r\n      i2c_flag_clear(I2C0, I2C_FLAG_BTC);\r\n      // Write out the 8 byte address\r\n      i2c_data_transmit(I2C0, currentState.memoryAddress);\r\n      if (currentState.isMemoryWrite) {\r\n        currentState.currentStep = i2c_step::Write_device_data_start;\r\n      } else {\r\n        currentState.currentStep = i2c_step::Read_start;\r\n      }\r\n    }\r\n\r\n    break;\r\n  case i2c_step::Write_device_data_start:\r\n    /* wait until the transmission data register is empty */\r\n    if (i2c_flag_get(I2C0, I2C_FLAG_BTC)) {\r\n      dma_deinit(DMA0, DMA_CH5);\r\n      dma_init(DMA0, DMA_CH5, &currentState.dma_init_struct);\r\n      i2c_dma_last_transfer_config(I2C0, I2C_DMALST_ON);\r\n      dma_circulation_disable(DMA0, DMA_CH5);\r\n      /* enable I2C0 DMA */\r\n      i2c_dma_enable(I2C0, I2C_DMA_ON);\r\n      /* enable DMA0 channel5 */\r\n      dma_channel_enable(DMA0, DMA_CH5);\r\n      currentState.currentStep = i2c_step::Write_device_data_finish;\r\n    }\r\n    break;\r\n\r\n  case i2c_step::Write_device_data_finish: // Wait for complete then goto stop\r\n    /* wait until BTC bit is set */\r\n    if (dma_flag_get(DMA0, DMA_CH5, DMA_FLAG_FTF)) {\r\n      /* wait until BTC bit is set */\r\n      if (i2c_flag_get(I2C0, I2C_FLAG_BTC)) {\r\n        currentState.currentStep = i2c_step::Send_stop;\r\n      }\r\n    }\r\n    break;\r\n  case i2c_step::Read_start:\r\n    if (i2c_flag_get(I2C0, I2C_FLAG_BTC)) {\r\n      /* wait until BTC bit is set */\r\n      i2c_start_on_bus(I2C0);\r\n      currentState.currentStep = i2c_step::Read_device_address;\r\n    }\r\n    break;\r\n  case i2c_step::Read_device_address:\r\n    if (i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) {\r\n      i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);\r\n      if (currentState.numberOfBytes == 1) {\r\n        /* disable acknowledge */\r\n        i2c_master_addressing(I2C0, currentState.deviceAddress, I2C_RECEIVER);\r\n        while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) {\r\n        }\r\n        i2c_ack_config(I2C0, I2C_ACK_DISABLE);\r\n        i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);\r\n        /* wait for the byte to be received */\r\n        while (!i2c_flag_get(I2C0, I2C_FLAG_RBNE)) {\r\n        }\r\n        /* read the byte received from the EEPROM */\r\n        *currentState.buffer = i2c_data_receive(I2C0);\r\n        while (i2c_flag_get(I2C0, I2C_FLAG_RBNE)) {\r\n          i2c_data_receive(I2C0);\r\n        }\r\n        i2c_stop_on_bus(I2C0);\r\n        while ((I2C_CTL0(I2C0) & I2C_CTL0_STOP)) {\r\n          asm(\"nop\");\r\n        }\r\n        currentState.currentStep = i2c_step::Done;\r\n      } else if (currentState.numberOfBytes == 2) {\r\n        /* disable acknowledge */\r\n        i2c_master_addressing(I2C0, currentState.deviceAddress, I2C_RECEIVER);\r\n        while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) {\r\n        }\r\n        i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);\r\n        /* wait for the byte to be received */\r\n        while (!i2c_flag_get(I2C0, I2C_FLAG_RBNE)) {\r\n        }\r\n        i2c_ackpos_config(I2C0, I2C_ACKPOS_CURRENT);\r\n        i2c_ack_config(I2C0, I2C_ACK_DISABLE);\r\n\r\n        /* read the byte received from the EEPROM */\r\n        *currentState.buffer = i2c_data_receive(I2C0);\r\n        currentState.buffer++;\r\n\r\n        /* wait for the byte to be received */\r\n        while (!i2c_flag_get(I2C0, I2C_FLAG_RBNE)) {\r\n        }\r\n        /* read the byte received from the EEPROM */\r\n        *currentState.buffer = i2c_data_receive(I2C0);\r\n        while (i2c_flag_get(I2C0, I2C_FLAG_RBNE)) {\r\n          i2c_data_receive(I2C0);\r\n        }\r\n        i2c_stop_on_bus(I2C0);\r\n        while ((I2C_CTL0(I2C0) & I2C_CTL0_STOP)) {\r\n          asm(\"nop\");\r\n        }\r\n        currentState.currentStep = i2c_step::Done;\r\n      } else {\r\n        i2c_master_addressing(I2C0, currentState.deviceAddress, I2C_RECEIVER);\r\n        currentState.currentStep = i2c_step::Read_device_data_start;\r\n      }\r\n    }\r\n    break;\r\n  case i2c_step::Read_device_data_start:\r\n    if (i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) { // addr sent\r\n      i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);\r\n      /* one byte master reception procedure (polling) */\r\n      if (currentState.numberOfBytes == 0) {\r\n        currentState.currentStep = i2c_step::Send_stop;\r\n      } else { /* more than one byte master reception procedure (DMA) */\r\n\r\n        while (currentState.numberOfBytes) {\r\n\r\n          if (3 == currentState.numberOfBytes) {\r\n            /* wait until BTC bit is set */\r\n            while (!i2c_flag_get(I2C0, I2C_FLAG_BTC)) {\r\n            }\r\n            i2c_ackpos_config(I2C0, I2C_ACKPOS_CURRENT);\r\n            /* disable acknowledge */\r\n            i2c_ack_config(I2C0, I2C_ACK_DISABLE);\r\n          } else if (2 == currentState.numberOfBytes) {\r\n            /* wait until BTC bit is set */\r\n            while (!i2c_flag_get(I2C0, I2C_FLAG_BTC)) {\r\n            }\r\n            /* disable acknowledge */\r\n            i2c_ack_config(I2C0, I2C_ACK_DISABLE);\r\n            /* send a stop condition to I2C bus */\r\n            i2c_stop_on_bus(I2C0);\r\n          }\r\n          /* wait until RBNE bit is set */\r\n          while (!i2c_flag_get(I2C0, I2C_FLAG_RBNE)) {\r\n          }\r\n          /* read a byte from the EEPROM */\r\n          *currentState.buffer = i2c_data_receive(I2C0);\r\n\r\n          /* point to the next location where the byte read will be saved */\r\n          currentState.buffer++;\r\n\r\n          /* decrement the read bytes counter */\r\n          currentState.numberOfBytes--;\r\n        }\r\n        currentState.currentStep = i2c_step::Wait_stop;\r\n        // currentState.currentStep = i2c_step::Read_device_data_finish;\r\n      }\r\n    }\r\n    break;\r\n  case i2c_step::Read_device_data_finish: // Wait for complete then goto stop\r\n    /* wait until BTC bit is set */\r\n\r\n    break;\r\n  case i2c_step::Send_stop:\r\n    /* send a stop condition to I2C bus*/\r\n    i2c_stop_on_bus(I2C0);\r\n    currentState.currentStep = i2c_step::Wait_stop;\r\n    break;\r\n  case i2c_step::Wait_stop:\r\n    /* i2c master sends STOP signal successfully */\r\n    if ((I2C_CTL0(I2C0) & I2C_CTL0_STOP) != I2C_CTL0_STOP) {\r\n      currentState.currentStep = i2c_step::Done;\r\n    }\r\n    break;\r\n  default:\r\n    // If we get here something is amiss\r\n    return;\r\n  }\r\n}\r\n\r\nbool perform_i2c_transaction(uint16_t DevAddress, uint16_t memory_address, uint8_t *p_buffer, uint16_t number_of_byte, bool isWrite, bool isWakeOnly) {\r\n\r\n  currentState.isMemoryWrite = isWrite;\r\n  currentState.wakePart      = isWakeOnly;\r\n  currentState.deviceAddress = DevAddress;\r\n  currentState.memoryAddress = memory_address;\r\n  currentState.numberOfBytes = number_of_byte;\r\n  currentState.buffer        = p_buffer;\r\n  // Setup DMA\r\n  currentState.dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;\r\n  currentState.dma_init_struct.memory_addr  = (uint32_t)p_buffer;\r\n  currentState.dma_init_struct.memory_inc   = DMA_MEMORY_INCREASE_ENABLE;\r\n  currentState.dma_init_struct.number       = number_of_byte;\r\n  currentState.dma_init_struct.periph_addr  = (uint32_t)&I2C_DATA(I2C0);\r\n  currentState.dma_init_struct.periph_inc   = DMA_PERIPH_INCREASE_DISABLE;\r\n  currentState.dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;\r\n  currentState.dma_init_struct.priority     = DMA_PRIORITY_ULTRA_HIGH;\r\n\r\n  if (currentState.isMemoryWrite) {\r\n    currentState.dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL;\r\n  } else {\r\n    currentState.dma_init_struct.direction = DMA_PERIPHERAL_TO_MEMORY;\r\n  }\r\n  // Clear flags\r\n  I2C_STAT0(I2C0) = 0;\r\n  I2C_STAT1(I2C0) = 0;\r\n  i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);\r\n  i2c_ackpos_config(I2C0, I2C_ACKPOS_CURRENT);\r\n  i2c_data_receive(I2C0);\r\n  i2c_data_receive(I2C0);\r\n  currentState.currentStep = i2c_step::Write_start; // Always start in write mode\r\n  TickType_t timeout       = xTaskGetTickCount() + TICKS_100MS;\r\n  while ((currentState.currentStep != i2c_step::Done) && (currentState.currentStep != i2c_step::Error_occured)) {\r\n    if (xTaskGetTickCount() > timeout) {\r\n      i2c_stop_on_bus(I2C0);\r\n      return false;\r\n    }\r\n    perform_i2c_step();\r\n  }\r\n  return currentState.currentStep == i2c_step::Done;\r\n}\r\n\r\nbool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t read_address, uint8_t *p_buffer, uint16_t number_of_byte) {\r\n  if (!lock()) {\r\n    return false;\r\n  }\r\n  bool res = perform_i2c_transaction(DevAddress, read_address, p_buffer, number_of_byte, false, false);\r\n  if (!res) {\r\n    I2C_Unstick();\r\n  }\r\n  unlock();\r\n  return res;\r\n}\r\n\r\nbool FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, uint8_t *p_buffer, uint16_t number_of_byte) {\r\n  if (!lock()) {\r\n    return false;\r\n  }\r\n  bool res = perform_i2c_transaction(DevAddress, MemAddress, p_buffer, number_of_byte, true, false);\r\n  if (!res) {\r\n    I2C_Unstick();\r\n  }\r\n  unlock();\r\n  return res;\r\n}\r\n\r\nbool FRToSI2C::Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size) { return Mem_Write(DevAddress, pData[0], pData + 1, Size - 1); }\r\n\r\nbool FRToSI2C::probe(uint16_t DevAddress) {\r\n  uint8_t temp[1];\r\n  return Mem_Read(DevAddress, 0x00, temp, sizeof(temp));\r\n}\r\n\r\nvoid FRToSI2C::I2C_Unstick() { unstick_I2C(); }\r\n\r\nbool FRToSI2C::lock() {\r\n  if (I2CSemaphore == nullptr) {\r\n    return false;\r\n  }\r\n  return xSemaphoreTake(I2CSemaphore, TICKS_SECOND) == pdTRUE;\r\n}\r\n\r\nvoid FRToSI2C::unlock() { xSemaphoreGive(I2CSemaphore); }\r\n\r\nbool FRToSI2C::writeRegistersBulk(const uint8_t address, const I2C_REG *registers, const uint8_t registersLength) {\r\n  for (int index = 0; index < registersLength; index++) {\r\n    if (!I2C_RegisterWrite(address, registers[index].reg, registers[index].val)) {\r\n      return false;\r\n    }\r\n    if (registers[index].pause_ms) {\r\n      delay_ms(registers[index].pause_ms);\r\n    }\r\n  }\r\n  return true;\r\n}\r\n\r\nbool FRToSI2C::wakePart(uint16_t DevAddress) {\r\n  // wakepart is a special case  where only the device address is sent\r\n  if (!lock()) {\r\n    return false;\r\n  }\r\n  bool res = perform_i2c_transaction(DevAddress, 0, NULL, 0, false, true);\r\n  if (!res) {\r\n    I2C_Unstick();\r\n  }\r\n  unlock();\r\n  return res;\r\n}\r\n\r\nvoid I2C_EV_IRQ() {}\r\nvoid I2C_ER_IRQ() {\r\n  // Error callbacks\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/IRQ.cpp",
    "content": "/*\r\n * IRQ.c\r\n *\r\n *  Created on: 30 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"IRQ.h\"\r\n#include \"Pins.h\"\r\n#include \"configuration.h\"\r\nvolatile uint8_t  i2c_read_process  = 0;\r\nvolatile uint8_t  i2c_write_process = 0;\r\nvolatile uint8_t  i2c_slave_address = 0;\r\nvolatile uint8_t  i2c_error_code    = 0;\r\nvolatile uint8_t *i2c_write;\r\nvolatile uint8_t *i2c_read;\r\nvolatile uint16_t i2c_nbytes;\r\nvolatile uint16_t i2c_write_dress;\r\nvolatile uint16_t i2c_read_dress;\r\nvolatile uint8_t  i2c_process_flag = 0;\r\nstatic bool       fastPWM;\r\nstatic void       switchToSlowPWM(void);\r\nstatic void       switchToFastPWM(void);\r\nvoid              ADC0_1_IRQHandler(void) {\r\n\r\n  adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC);\r\n  // unblock the PID controller thread\r\n  if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {\r\n    BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r\n    if (pidTaskNotification) {\r\n      vTaskNotifyGiveFromISR(pidTaskNotification, &xHigherPriorityTaskWoken);\r\n      portYIELD_FROM_ISR(xHigherPriorityTaskWoken);\r\n    }\r\n  }\r\n}\r\n\r\nvolatile uint16_t PWMSafetyTimer = 0;\r\nvolatile uint8_t  pendingPWM     = 0;\r\nvoid              TIMER1_IRQHandler(void) {\r\n  static bool lastPeriodWasFast = false;\r\n\r\n  if (timer_interrupt_flag_get(TIMER1, TIMER_INT_UP) == SET) {\r\n    timer_interrupt_flag_clear(TIMER1, TIMER_INT_UP);\r\n    // rollover turn on output if required\r\n    if (PWMSafetyTimer) {\r\n      PWMSafetyTimer--;\r\n      if (lastPeriodWasFast != fastPWM) {\r\n        if (fastPWM) {\r\n          switchToFastPWM();\r\n        } else {\r\n          switchToSlowPWM();\r\n        }\r\n      }\r\n      if (pendingPWM) {\r\n        timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_1, pendingPWM);\r\n        timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, 50);\r\n      } else {\r\n        timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, 0);\r\n      }\r\n    }\r\n  }\r\n  if (timer_interrupt_flag_get(TIMER1, TIMER_INT_CH1) == SET) {\r\n    timer_interrupt_flag_clear(TIMER1, TIMER_INT_CH1);\r\n    timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, 0);\r\n  }\r\n}\r\n\r\nvoid switchToFastPWM(void) {\r\n  fastPWM           = true;\r\n  totalPWM          = powerPWM + tempMeasureTicks + holdoffTicks;\r\n  TIMER_CAR(TIMER1) = (uint32_t)totalPWM;\r\n\r\n  // ~10Hz\r\n  TIMER_CH0CV(TIMER1) = powerPWM + holdoffTicks;\r\n  // 1 kHz tick rate\r\n  TIMER_PSC(TIMER1) = 18000;\r\n}\r\n\r\nvoid switchToSlowPWM(void) {\r\n  // 5Hz\r\n  fastPWM             = false;\r\n  totalPWM            = powerPWM + tempMeasureTicks / 2 + holdoffTicks / 2;\r\n  TIMER_CAR(TIMER1)   = (uint32_t)totalPWM;\r\n  TIMER_CH0CV(TIMER1) = powerPWM + holdoffTicks / 2;\r\n  TIMER_PSC(TIMER1)   = 36000;\r\n}\r\nvoid setTipPWM(const uint8_t pulse, const bool shouldUseFastModePWM) {\r\n  PWMSafetyTimer = 10; // This is decremented in the handler for PWM so that the tip pwm is\r\n                       // disabled if the PID task is not scheduled often enough.\r\n  pendingPWM = pulse;\r\n  fastPWM    = shouldUseFastModePWM;\r\n}\r\nextern osThreadId POWTaskHandle;\r\n\r\nvoid EXTI5_9_IRQHandler(void) {\r\n#ifdef POW_PD\r\n  if (RESET != exti_interrupt_flag_get(EXTI_5)) {\r\n    exti_interrupt_flag_clear(EXTI_5);\r\n\r\n    if (POWTaskHandle != nullptr) {\r\n      BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r\n      xTaskNotifyFromISR(POWTaskHandle, 1, eSetBits, &xHigherPriorityTaskWoken);\r\n      /* Force a context switch if xHigherPriorityTaskWoken is now set to pdTRUE.\r\n      The macro used to do this is dependent on the port and may be called\r\n      portEND_SWITCHING_ISR. */\r\n      portYIELD_FROM_ISR(xHigherPriorityTaskWoken);\r\n    }\r\n  }\r\n#endif\r\n}\r\n\r\nbool getFUS302IRQLow() {\r\n  // Return true if the IRQ line is still held low\r\n  return (RESET == gpio_input_bit_get(FUSB302_IRQ_GPIO_Port, FUSB302_IRQ_Pin));\r\n}\r\n// These are unused for now\r\nvoid I2C0_EV_IRQHandler(void) {}\r\n\r\nvoid I2C0_ER_IRQHandler(void) {}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/IRQ.h",
    "content": "/*\r\n * Irqs.h\r\n *\r\n *  Created on: 30 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_PINE64_IRQ_H_\r\n#define BSP_PINE64_IRQ_H_\r\n\r\n#include \"BSP.h\"\r\n#include \"I2C_Wrapper.hpp\"\r\n#include \"Setup.h\"\r\n#include \"gd32vf103.h\"\r\n#include \"main.hpp\"\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\nvoid ADC0_1_IRQHandler(void);\r\nvoid TIMER1_IRQHandler(void);\r\nvoid EXTI5_9_IRQHandler(void);\r\n/* handle I2C0 event interrupt request */\r\nvoid I2C0_EV_IRQHandler(void);\r\n/* handle I2C0 error interrupt request */\r\nvoid I2C0_ER_IRQHandler(void);\r\ntypedef enum {\r\n  I2C_SEND_ADDRESS_FIRST = 0,    // Sending slave address\r\n  I2C_CLEAR_ADDRESS_FLAG_FIRST,  // Clear address send\r\n  I2C_TRANSMIT_WRITE_READ_ADD,   // Transmit the memory address to read/write from\r\n  I2C_SEND_ADDRESS_SECOND,       // Send address again for read\r\n  I2C_CLEAR_ADDRESS_FLAG_SECOND, // Clear address again\r\n  I2C_TRANSMIT_DATA,             // Transmit recieve data\r\n  I2C_STOP,                      // Send stop\r\n  I2C_ABORTED,                   //\r\n  I2C_DONE,                      // I2C transfer is complete\r\n  I2C_START,\r\n  I2C_END,\r\n  I2C_OK,\r\n  I2C_SEND_ADDRESS,\r\n  I2C_CLEAR_ADDRESS_FLAG,\r\n} i2c_process_enum;\r\nextern volatile uint8_t  i2c_slave_address;\r\nextern volatile uint8_t  i2c_read_process;\r\nextern volatile uint8_t  i2c_write_process;\r\nextern volatile uint8_t  i2c_error_code;\r\nextern volatile uint8_t *i2c_write;\r\nextern volatile uint8_t *i2c_read;\r\nextern volatile uint16_t i2c_nbytes;\r\nextern volatile uint16_t i2c_write_dress;\r\nextern volatile uint16_t i2c_read_dress;\r\nextern volatile uint8_t  i2c_process_flag;\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n#endif /* BSP_PINE64_IRQ_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/NOTES.md",
    "content": "# Notes on RISC-V\n\n## Pinmap\n\n| Pin Number | Name | Function         | Notes       |\n| ---------- | ---- | ---------------- | ----------- |\n| 17         | PB2  | BOOT2            | Pulldown    |\n| 32         |      | IMU INT 1        | N/A         |\n| 30         |      | IMU INT 2        | N/A         |\n|            | PA4  | Handle Temp      | ADC Input ? |\n|            | PA1  | Tip Temp         | ADC Input ? |\n|            | PB1  | B Button         | Active High |\n|            | PB0  | A Button         | Active High |\n|            | PA11 | USB D-           | -           |\n|            | PA12 | USB D+           | -           |\n|            | PA6  | Tip PWM Out      | -  |\n|            | PA0  | Input DC V Sense | ADC Input ? |\n|            | PA9  | OLED Reset       |             |\n|            | PB7  | SDA              | I2C0_SDA    |\n|            | PB6  | SCL              | I2C0_SCL    |\n\n## ADC Configuration\n\nFor now running in matching mode for TS100\n\n- X channels DMA in background\n- Sample tip using \"Intereted\" channels using TIMER 0,1,3 TRGO or timer0,1,2 channels\n- Using just 12 bit mode for now and move to hardware oversampling later\n- use DMA for normal samples and 4x16 bit regs for tip temp\n- It has dual ADC's so run them in pair mode\n\n## Timers\n\n### Timer 2\n\nTimer 2 CH0 is tip drive PWM out.\nThis is fixed at 50% duty cycle and used via the cap to turn on the heater tip.\nThis should toggle relatively quickly.\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Pins.h",
    "content": "/*\r\n * Pins.h\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_PINE64_PINS_H_\r\n#define BSP_PINE64_PINS_H_\r\n#include \"gd32vf103_gpio.h\"\r\n\r\n#define KEY_B_Pin             BIT(1)\r\n#define KEY_B_GPIO_Port       GPIOB\r\n#define TMP36_INPUT_Pin       BIT(4)\r\n#define TMP36_INPUT_GPIO_Port GPIOA\r\n#define TMP36_ADC0_CHANNEL    ADC_CHANNEL_4\r\n#define TMP36_ADC1_CHANNEL    ADC_CHANNEL_4\r\n#define TIP_TEMP_Pin          BIT(1)\r\n#define TIP_TEMP_GPIO_Port    GPIOA\r\n#define TIP_TEMP_ADC0_CHANNEL ADC_CHANNEL_1\r\n#define TIP_TEMP_ADC1_CHANNEL ADC_CHANNEL_1\r\n\r\n#define VIN_Pin              BIT(0)\r\n#define VIN_GPIO_Port        GPIOA\r\n#define VIN_ADC0_CHANNEL     ADC_CHANNEL_0\r\n#define VIN_ADC1_CHANNEL     ADC_CHANNEL_0\r\n#define OLED_RESET_Pin       BIT(9)\r\n#define OLED_RESET_GPIO_Port GPIOA\r\n#define KEY_A_Pin            BIT(0)\r\n#define KEY_A_GPIO_Port      GPIOB\r\n#define PWM_Out_Pin          BIT(6)\r\n#define PWM_Out_GPIO_Port    GPIOA\r\n#define SCL_Pin              BIT(6)\r\n#define SCL_GPIO_Port        GPIOB\r\n#define SDA_Pin              BIT(7)\r\n#define SDA_GPIO_Port        GPIOB\r\n\r\n#define USB_DM_Pin           BIT(11)\r\n#define USB_DM_LOW_GPIO_Port GPIOA\r\n\r\n#define QC_DP_LOW_Pin       BIT(7)\r\n#define QC_DP_LOW_GPIO_Port GPIOA\r\n\r\n// LOW = low resistance, HIGH = high resistance\r\n#define QC_DM_LOW_Pin        BIT(8)\r\n#define QC_DM_LOW_GPIO_Port  GPIOA\r\n#define QC_DM_HIGH_Pin       BIT(10)\r\n#define QC_DM_HIGH_GPIO_Port GPIOA\r\n\r\n#define FUSB302_IRQ_Pin       BIT(5)\r\n#define FUSB302_IRQ_GPIO_Port GPIOB\r\n\r\n// uart\r\n#define UART_TX_Pin       BIT(2)\r\n#define UART_TX_GPIO_Port GPIOA\r\n#define UART_RX_Pin       BIT(3)\r\n#define UART_RX_GPIO_Port GPIOA\r\n#define UART_PERIF        USART1\r\n\r\n#endif /* BSP_PINE64_PINS_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Power.cpp",
    "content": "#include \"BSP.h\"\n#include \"BSP_Power.h\"\n#include \"Pins.h\"\n#include \"QC3.h\"\n#include \"Settings.h\"\n#include \"USBPD.h\"\n#include \"configuration.h\"\n\nvoid power_check() {\n#ifdef POW_PD\n  // Cant start QC until either PD works or fails\n  if (!USBPowerDelivery::negotiationComplete()) {\n    return;\n  }\n  if (USBPowerDelivery::negotiationHasWorked()) {\n    return; // We are using PD\n  }\n#endif\n#ifdef POW_QC\n  QC_resync();\n#endif\n}\n\nbool getIsPoweredByDCIN() {\n#ifdef POW_PD\n  if (!USBPowerDelivery::negotiationComplete()) {\n    return false; // We are assuming not dc while negotiating\n  }\n  if (USBPowerDelivery::negotiationHasWorked()) {\n    return false; // We are using PD\n  }\n#endif\n\n#ifdef POW_QC\n  if (hasQCNegotiated()) {\n    return false; // We are using QC\n  }\n#endif\n  return true;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/QC_GPIO.cpp",
    "content": "/*\r\n * QC.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n#include \"BSP.h\"\r\n#include \"Pins.h\"\r\n#include \"QC3.h\"\r\n#include \"Settings.h\"\r\n#include \"gd32vf103_libopt.h\"\r\n\r\n#ifdef POW_QC\r\nvoid QC_DPlusZero_Six() {\r\n  // pull down D+\r\n  gpio_bit_reset(QC_DP_LOW_GPIO_Port, QC_DP_LOW_Pin);\r\n}\r\nvoid QC_DNegZero_Six() {\r\n  gpio_bit_set(QC_DM_HIGH_GPIO_Port, QC_DM_HIGH_Pin);\r\n  gpio_bit_reset(QC_DM_LOW_GPIO_Port, QC_DM_LOW_Pin);\r\n}\r\nvoid QC_DPlusThree_Three() {\r\n  // pull up D+\r\n  gpio_bit_set(QC_DP_LOW_GPIO_Port, QC_DP_LOW_Pin);\r\n}\r\nvoid QC_DNegThree_Three() {\r\n  gpio_bit_set(QC_DM_LOW_GPIO_Port, QC_DM_LOW_Pin);\r\n  gpio_bit_set(QC_DM_HIGH_GPIO_Port, QC_DM_HIGH_Pin);\r\n}\r\nvoid QC_DM_PullDown() { gpio_init(USB_DM_LOW_GPIO_Port, GPIO_MODE_IPD, GPIO_OSPEED_2MHZ, USB_DM_Pin); }\r\nvoid QC_DM_No_PullDown() { gpio_init(USB_DM_LOW_GPIO_Port, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_2MHZ, USB_DM_Pin); }\r\nvoid QC_Init_GPIO() {\r\n  // Setup any GPIO into the right states for QC\r\n  // D+ pulldown as output\r\n  gpio_init(QC_DP_LOW_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, QC_DP_LOW_Pin);\r\n  // Make two D- pins floating\r\n  QC_DM_PullDown();\r\n}\r\nvoid QC_Post_Probe_En() {\r\n  // Make two D- pins outputs\r\n  gpio_init(QC_DM_LOW_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, QC_DM_LOW_Pin);\r\n  gpio_init(QC_DM_HIGH_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, QC_DM_HIGH_Pin);\r\n}\r\n\r\nuint8_t QC_DM_PulledDown() { return gpio_input_bit_get(USB_DM_LOW_GPIO_Port, USB_DM_Pin) == RESET ? 1 : 0; }\r\n#endif\r\nvoid QC_resync() {\r\n#ifdef POW_QC\r\n  seekQC(getSettingValue(SettingsOptions::QCIdealVoltage), getSettingValue(SettingsOptions::VoltageDiv)); // Run the QC seek again if we have drifted too much\r\n#endif\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/README.md",
    "content": "# BSP section for Pinecil \r\n\r\nThis folder contains the hardware abstractions required for the Pinecil. A RISC-V based soldering iron.\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Setup.cpp",
    "content": "/*\n * Setup.c\n *\n *  Created on: 29Aug.,2017\n *      Author: Ben V. Brown\n */\n#include \"Setup.h\"\n#include \"BSP.h\"\n#include \"Debug.h\"\n#include \"Pins.h\"\n#include \"gd32vf103.h\"\n#include \"history.hpp\"\n#include <string.h>\n#define ADC_NORM_SAMPLES 16\n#define ADC_FILTER_LEN   4\nuint16_t ADCReadings[ADC_NORM_SAMPLES]; // room for 32 lots of the pair of readings\n\n// Functions\nvoid setup_gpio();\nvoid setup_dma();\nvoid setup_i2c();\nvoid setup_adc();\nvoid setup_timers();\nvoid setup_iwdg();\nvoid setup_uart();\n\nvoid hardware_init() {\n  // I2C\n  setup_i2c();\n  // GPIO\n  setup_gpio();\n  // DMA\n  setup_dma();\n  // ADC's\n  setup_adc();\n  // Timers\n  setup_timers();\n  // Watchdog\n  setup_iwdg();\n  // ELIC\n  eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL0_PRIO4);\n  // uart for debugging\n  setup_uart();\n  /* enable TIMER1 - PWM control timing*/\n  timer_enable(TIMER1);\n  timer_enable(TIMER2);\n}\n\nuint16_t getADCHandleTemp(uint8_t sample) {\n  static history<uint16_t, ADC_FILTER_LEN> filter = {{0}, 0, 0};\n  if (sample) {\n    uint32_t sum = 0;\n    for (uint8_t i = 0; i < ADC_NORM_SAMPLES; i++) {\n      sum += ADCReadings[i];\n    }\n    filter.update(sum);\n  }\n  return filter.average() >> 1;\n}\n\nuint16_t getADCVin(uint8_t sample) {\n  static history<uint16_t, ADC_FILTER_LEN> filter = {{0}, 0, 0};\n  if (sample) {\n    uint16_t latestADC = 0;\n\n    latestADC += adc_inserted_data_read(ADC1, 0);\n    latestADC += adc_inserted_data_read(ADC1, 1);\n    latestADC += adc_inserted_data_read(ADC1, 2);\n    latestADC += adc_inserted_data_read(ADC1, 3);\n    latestADC <<= 1;\n    filter.update(latestADC);\n  }\n  return filter.average();\n}\n// Returns either average or instant value. When sample is set the samples from the injected ADC are copied to the filter and then the raw reading is returned\nuint16_t getTipRawTemp(uint8_t sample) {\n  static history<uint16_t, ADC_FILTER_LEN> filter = {{0}, 0, 0};\n  if (sample) {\n    uint16_t latestADC = 0;\n\n    latestADC += adc_inserted_data_read(ADC0, 0);\n    latestADC += adc_inserted_data_read(ADC0, 1);\n    latestADC += adc_inserted_data_read(ADC0, 2);\n    latestADC += adc_inserted_data_read(ADC0, 3);\n    latestADC <<= 1;\n    filter.update(latestADC);\n    return latestADC;\n  }\n  return filter.average();\n}\n\nvoid setup_uart() {\n  // Setup the uart pins as a uart with dma\n\n  /* enable USART clock */\n  rcu_periph_clock_enable(RCU_USART1);\n\n  /* connect port to USARTx_Tx */\n  gpio_init(UART_TX_GPIO_Port, GPIO_MODE_AF_PP, GPIO_OSPEED_10MHZ, UART_TX_Pin);\n\n  /* connect port to USARTx_Rx */\n  gpio_init(UART_RX_GPIO_Port, GPIO_MODE_IPU, GPIO_OSPEED_10MHZ, UART_RX_Pin);\n\n  /* USART configure */\n  usart_deinit(UART_PERIF);\n  usart_baudrate_set(UART_PERIF, 1000000);\n  usart_word_length_set(UART_PERIF, USART_WL_8BIT);\n  usart_stop_bit_set(UART_PERIF, USART_STB_1BIT);\n  usart_parity_config(UART_PERIF, USART_PM_NONE);\n  usart_hardware_flow_rts_config(UART_PERIF, USART_RTS_DISABLE);\n  usart_hardware_flow_cts_config(UART_PERIF, USART_CTS_DISABLE);\n  usart_receive_config(UART_PERIF, USART_RECEIVE_DISABLE); // Dont use rx for now\n  usart_transmit_config(UART_PERIF, USART_TRANSMIT_ENABLE);\n  eclic_irq_enable(USART1_IRQn, 15, 15);\n  usart_enable(UART_PERIF);\n}\n\nvoid setup_gpio() {\n  /* enable GPIOB clock */\n  rcu_periph_clock_enable(RCU_GPIOA);\n  /* enable GPIOB clock */\n  rcu_periph_clock_enable(RCU_GPIOB);\n  // Alternate function clock enable\n  rcu_periph_clock_enable(RCU_AF);\n  // Buttons as input\n  gpio_init(KEY_A_GPIO_Port, GPIO_MODE_IPD, GPIO_OSPEED_2MHZ, KEY_A_Pin);\n  gpio_init(KEY_B_GPIO_Port, GPIO_MODE_IPD, GPIO_OSPEED_2MHZ, KEY_B_Pin);\n  // OLED reset as output\n  gpio_init(OLED_RESET_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, OLED_RESET_Pin);\n  // I2C as AF Open Drain\n  gpio_init(SDA_GPIO_Port, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, SDA_Pin);\n  gpio_init(SCL_GPIO_Port, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, SCL_Pin);\n  // PWM output as AF Push Pull\n  gpio_init(PWM_Out_GPIO_Port, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, PWM_Out_Pin);\n  // Analog Inputs ... as analog inputs\n  gpio_init(TMP36_INPUT_GPIO_Port, GPIO_MODE_AIN, GPIO_OSPEED_2MHZ, TMP36_INPUT_Pin);\n  gpio_init(TIP_TEMP_GPIO_Port, GPIO_MODE_AIN, GPIO_OSPEED_2MHZ, TIP_TEMP_Pin);\n  gpio_init(VIN_GPIO_Port, GPIO_MODE_AIN, GPIO_OSPEED_2MHZ, VIN_Pin);\n\n  // Remap PB4 away from JTAG NJRST\n  gpio_pin_remap_config(GPIO_SWJ_NONJTRST_REMAP, ENABLE);\n  // FUSB interrupt\n  gpio_init(FUSB302_IRQ_GPIO_Port, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, FUSB302_IRQ_Pin);\n}\nvoid setup_dma() {\n  // Setup DMA for ADC0\n  {\n    /* enable DMA0 clock */\n    rcu_periph_clock_enable(RCU_DMA0);\n    // rcu_periph_clock_enable(RCU_DMA1);\n    /* ADC_DMA_channel configuration */\n    dma_parameter_struct dma_data_parameter;\n\n    /* ADC DMA_channel configuration */\n    dma_deinit(DMA0, DMA_CH0);\n\n    /* initialize DMA data mode */\n    dma_data_parameter.periph_addr  = (uint32_t)(&ADC_RDATA(ADC0));\n    dma_data_parameter.periph_inc   = DMA_PERIPH_INCREASE_DISABLE;\n    dma_data_parameter.memory_addr  = (uint32_t)(ADCReadings);\n    dma_data_parameter.memory_inc   = DMA_MEMORY_INCREASE_ENABLE;\n    dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;\n    dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_16BIT;\n    dma_data_parameter.direction    = DMA_PERIPHERAL_TO_MEMORY;\n    dma_data_parameter.number       = ADC_NORM_SAMPLES;\n    dma_data_parameter.priority     = DMA_PRIORITY_HIGH;\n    dma_init(DMA0, DMA_CH0, &dma_data_parameter);\n\n    dma_circulation_enable(DMA0, DMA_CH0);\n\n    /* enable DMA channel */\n    dma_channel_enable(DMA0, DMA_CH0);\n  }\n}\nvoid setup_i2c() {\n  /* enable I2C0 clock */\n  rcu_periph_clock_enable(RCU_I2C0);\n  /* enable DMA0 clock */\n  rcu_periph_clock_enable(RCU_DMA0);\n  // Setup I20 at 400kHz\n  i2c_clock_config(I2C0, 400 * 1000, I2C_DTCY_2);\n  i2c_mode_addr_config(I2C0, I2C_I2CMODE_ENABLE, I2C_ADDFORMAT_7BITS, 0x7F);\n  i2c_enable(I2C0);\n  /* enable acknowledge */\n  i2c_ack_config(I2C0, I2C_ACK_ENABLE);\n}\nvoid setup_adc() {\n\n  // Setup ADC in normal + injected mode\n  // Want it to sample handle temp and input voltage normally via dma\n  // Then injected trigger to sample tip temp\n  memset(ADCReadings, 0, sizeof(ADCReadings));\n  rcu_periph_clock_enable(RCU_ADC0);\n  rcu_periph_clock_enable(RCU_ADC1);\n  adc_deinit(ADC0);\n  adc_deinit(ADC1);\n  /* config ADC clock */\n  rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV16);\n  // Run in normal parallel + inserted parallel\n  adc_mode_config(ADC_DAUL_INSERTED_PARALLEL);\n  adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE);\n  adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);\n  adc_special_function_config(ADC1, ADC_CONTINUOUS_MODE, ENABLE);\n  adc_special_function_config(ADC1, ADC_SCAN_MODE, ENABLE);\n  // Align right\n  adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);\n  adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT);\n  // Setup reading the handle temp\n  adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 1);\n  adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL, 0);\n  // Setup the two channels\n  adc_regular_channel_config(ADC0, 0, TMP36_ADC0_CHANNEL,\n                             ADC_SAMPLETIME_71POINT5); // temp sensor\n  // Setup that we want all 4 inserted readings to be the tip temp\n  adc_channel_length_config(ADC0, ADC_INSERTED_CHANNEL, 4);\n  adc_channel_length_config(ADC1, ADC_INSERTED_CHANNEL, 4);\n  for (int rank = 0; rank < 4; rank++) {\n    adc_inserted_channel_config(ADC0, rank, TIP_TEMP_ADC0_CHANNEL, ADC_SAMPLETIME_28POINT5);\n    adc_inserted_channel_config(ADC1, rank, VIN_ADC1_CHANNEL, ADC_SAMPLETIME_28POINT5);\n  }\n  // Setup timer 1 channel 0 to trigger injected measurements\n  adc_external_trigger_source_config(ADC0, ADC_INSERTED_CHANNEL, ADC0_1_EXTTRIG_INSERTED_T1_TRGO);\n  adc_external_trigger_source_config(ADC1, ADC_INSERTED_CHANNEL, ADC0_1_EXTTRIG_INSERTED_T1_TRGO);\n\n  adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_EXTTRIG_REGULAR_NONE);\n  adc_external_trigger_source_config(ADC1, ADC_REGULAR_CHANNEL, ADC0_1_EXTTRIG_REGULAR_NONE);\n  // Enable triggers for the ADC\n  adc_external_trigger_config(ADC0, ADC_INSERTED_CHANNEL, ENABLE);\n  adc_external_trigger_config(ADC1, ADC_INSERTED_CHANNEL, ENABLE);\n  adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);\n  adc_external_trigger_config(ADC1, ADC_REGULAR_CHANNEL, ENABLE);\n\n  adc_watchdog_disable(ADC0);\n  adc_watchdog_disable(ADC1);\n  adc_resolution_config(ADC0, ADC_RESOLUTION_12B);\n  adc_resolution_config(ADC1, ADC_RESOLUTION_12B);\n  /* clear the ADC flag */\n  adc_oversample_mode_disable(ADC0);\n  adc_oversample_mode_disable(ADC1);\n  adc_enable(ADC0);\n  adc_calibration_enable(ADC0);\n  adc_enable(ADC1);\n  adc_calibration_enable(ADC1);\n  adc_dma_mode_enable(ADC0);\n  // Enable interrupt on end of injected readings\n  adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOC);\n  adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC);\n  adc_interrupt_enable(ADC0, ADC_INT_EOIC);\n  eclic_irq_enable(ADC0_1_IRQn, 2, 0);\n  adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);\n  adc_software_trigger_enable(ADC1, ADC_REGULAR_CHANNEL);\n  adc_tempsensor_vrefint_disable();\n}\nvoid setup_timers() {\n  // Setup timer 1 to run the actual PWM level\n  /* enable timer1 clock */\n  rcu_periph_clock_enable(RCU_TIMER1);\n  rcu_periph_clock_enable(RCU_TIMER2);\n  timer_oc_parameter_struct timer_ocintpara;\n  timer_parameter_struct    timer_initpara;\n  {\n    // deinit to reset the timer\n    timer_deinit(TIMER1);\n    /* initialize TIMER init parameter struct */\n    timer_struct_para_init(&timer_initpara);\n    /* TIMER1 configuration */\n    timer_initpara.prescaler         = 30000;\n    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;\n    timer_initpara.counterdirection  = TIMER_COUNTER_UP;\n    timer_initpara.period            = powerPWM + tempMeasureTicks + holdoffTicks;\n    timer_initpara.clockdivision     = TIMER_CKDIV_DIV4;\n    timer_initpara.repetitioncounter = 0;\n    timer_init(TIMER1, &timer_initpara);\n\n    /* CH0 configured to implement the PWM irq's for the output control*/\n    timer_channel_output_struct_para_init(&timer_ocintpara);\n    timer_ocintpara.ocpolarity  = TIMER_OC_POLARITY_LOW;\n    timer_ocintpara.outputstate = TIMER_CCX_ENABLE;\n    timer_channel_output_config(TIMER1, TIMER_CH_0, &timer_ocintpara);\n\n    timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_0, powerPWM + holdoffTicks);\n    timer_channel_output_mode_config(TIMER1, TIMER_CH_0, TIMER_OC_MODE_PWM1);\n    timer_channel_output_shadow_config(TIMER1, TIMER_CH_0, TIMER_OC_SHADOW_DISABLE);\n    /* CH1 used for irq */\n    timer_channel_output_struct_para_init(&timer_ocintpara);\n    timer_ocintpara.ocpolarity  = TIMER_OC_POLARITY_HIGH;\n    timer_ocintpara.outputstate = TIMER_CCX_ENABLE;\n    timer_channel_output_config(TIMER1, TIMER_CH_1, &timer_ocintpara);\n    timer_master_output_trigger_source_select(TIMER1, TIMER_TRI_OUT_SRC_CH0);\n    timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_1, 0);\n    timer_channel_output_mode_config(TIMER1, TIMER_CH_1, TIMER_OC_MODE_PWM0);\n    timer_channel_output_shadow_config(TIMER1, TIMER_CH_1, TIMER_OC_SHADOW_DISABLE);\n    // IRQ\n    timer_interrupt_enable(TIMER1, TIMER_INT_UP);\n    timer_interrupt_enable(TIMER1, TIMER_INT_CH1);\n  }\n\n  eclic_irq_enable(TIMER1_IRQn, 2, 5);\n  // Setup timer 2 to control the output signal\n  {\n    timer_deinit(TIMER2);\n    /* initialize TIMER init parameter struct */\n    timer_struct_para_init(&timer_initpara);\n    /* TIMER1 configuration */\n    timer_initpara.prescaler         = 200;\n    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;\n    timer_initpara.counterdirection  = TIMER_COUNTER_UP;\n    timer_initpara.period            = 100;\n    timer_initpara.clockdivision     = TIMER_CKDIV_DIV4;\n    timer_initpara.repetitioncounter = 0;\n    timer_init(TIMER2, &timer_initpara);\n\n    /* CH0 configuration in PWM mode0 */\n    timer_channel_output_struct_para_init(&timer_ocintpara);\n    timer_ocintpara.outputstate  = TIMER_CCX_ENABLE;\n    timer_ocintpara.outputnstate = TIMER_CCXN_DISABLE;\n    timer_ocintpara.ocpolarity   = TIMER_OC_POLARITY_HIGH;\n    timer_ocintpara.ocnpolarity  = TIMER_OCN_POLARITY_HIGH;\n    timer_ocintpara.ocidlestate  = TIMER_OC_IDLE_STATE_LOW;\n    timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;\n    timer_channel_output_config(TIMER2, TIMER_CH_0, &timer_ocintpara);\n    timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, 0);\n    timer_channel_output_mode_config(TIMER2, TIMER_CH_0, TIMER_OC_MODE_PWM0);\n    timer_channel_output_shadow_config(TIMER2, TIMER_CH_0, TIMER_OC_SHADOW_DISABLE);\n    timer_auto_reload_shadow_enable(TIMER2);\n    timer_enable(TIMER2);\n  }\n}\nvoid setup_iwdg() {\n\n  fwdgt_config(0x0FFF, FWDGT_PSC_DIV256);\n  fwdgt_enable();\n}\n\nvoid setupFUSBIRQ() {\n  eclic_global_interrupt_enable();\n  eclic_irq_enable(EXTI5_9_IRQn, 15, 0);\n  gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_5);\n\n  /* configure key EXTI line */\n  exti_init(EXTI_5, EXTI_INTERRUPT, EXTI_TRIG_FALLING);\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Setup.h",
    "content": "/*\r\n * Setup.h\r\n *\r\n *  Created on: 29Aug.,2017\r\n *      Author: Ben V. Brown\r\n */\r\n\r\n#ifndef PINE_SETUP_H_\r\n#define PINE_SETUP_H_\r\n#include \"gd32vf103_libopt.h\"\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\nuint16_t getADC(uint8_t channel);\r\nvoid     hardware_init();\r\nuint16_t getADCHandleTemp(uint8_t sample);\r\nuint16_t getADCVin(uint8_t sample);\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\nvoid                 setupFUSBIRQ();\r\nextern const uint8_t holdoffTicks;\r\nextern const uint8_t tempMeasureTicks;\r\n#endif /* PINE_SETUP_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/ThermoModel.cpp",
    "content": "/*\r\n * ThermoModel.cpp\r\n *\r\n *  Created on: 1 May 2021\r\n *      Author: Ralim\r\n */\r\n#include \"TipThermoModel.h\"\r\n#include \"Utils.hpp\"\r\n#include \"configuration.h\"\r\n\r\n#ifdef TEMP_uV_LOOKUP_HAKKO\r\nconst int32_t uVtoDegC[] = {\r\n    //\r\n    // uv -> temp in C\r\n    0,     0,   //\r\n    266,   10,  //\r\n    522,   20,  //\r\n    770,   30,  //\r\n    1010,  40,  //\r\n    1244,  50,  //\r\n    1473,  60,  //\r\n    1697,  70,  //\r\n    1917,  80,  //\r\n    2135,  90,  //\r\n    2351,  100, //\r\n    2566,  110, //\r\n    2780,  120, //\r\n    2994,  130, //\r\n    3209,  140, //\r\n    3426,  150, //\r\n    3644,  160, //\r\n    3865,  170, //\r\n    4088,  180, //\r\n    4314,  190, //\r\n    4544,  200, //\r\n    4777,  210, //\r\n    5014,  220, //\r\n    5255,  230, //\r\n    5500,  240, //\r\n    5750,  250, //\r\n    6003,  260, //\r\n    6261,  270, //\r\n    6523,  280, //\r\n    6789,  290, //\r\n    7059,  300, //\r\n    7332,  310, //\r\n    7609,  320, //\r\n    7889,  330, //\r\n    8171,  340, //\r\n    8456,  350, //\r\n    8742,  360, //\r\n    9030,  370, //\r\n    9319,  380, //\r\n    9607,  390, //\r\n    9896,  400, //\r\n    10183, 410, //\r\n    10468, 420, //\r\n    10750, 430, //\r\n    11029, 440, //\r\n    11304, 450, //\r\n    11573, 460, //\r\n    11835, 470, //\r\n    12091, 480, //\r\n    12337, 490, //\r\n    12575, 500, //\r\n\r\n};\r\n#endif\r\n\r\nconst int uVtoDegCItems = sizeof(uVtoDegC) / (2 * sizeof(uVtoDegC[0]));\r\n\r\nTemperatureType_t TipThermoModel::convertuVToDegC(uint32_t tipuVDelta) { return Utils::InterpolateLookupTable(uVtoDegC, uVtoDegCItems, tipuVDelta); }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/UnitSettings.h",
    "content": "/*\r\n * UnitSettings.h\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_PINE64_UNITSETTINGS_H_\r\n#define BSP_PINE64_UNITSETTINGS_H_\r\n\r\n#endif /* BSP_PINE64_UNITSETTINGS_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/NMSIS/Core/Include/core_compatiable.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __CORE_COMPATIABLE_H__\n#define __CORE_COMPATIABLE_H__\n/*!\n * @file     core_compatiable.h\n * @brief    ARM compatiable function definitions header file\n */\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* ===== ARM Compatiable Functions ===== */\n/**\n * \\defgroup NMSIS_Core_ARMCompatiable_Functions   ARM Compatiable Functions\n * \\ingroup  NMSIS_Core\n * \\brief    A few functions that compatiable with ARM CMSIS-Core.\n * \\details\n *\n * Here we provided a few functions that compatiable with ARM CMSIS-Core,\n * mostly used in the DSP and NN library.\n * @{\n */\n/** \\brief Instruction Synchronization Barrier, compatiable with ARM */\n#define __ISB() __RWMB()\n\n/** \\brief Data Synchronization Barrier, compatiable with ARM */\n#define __DSB() __RWMB()\n\n/** \\brief Data Memory Barrier, compatiable with ARM */\n#define __DMB() __RWMB()\n\n/** \\brief LDRT Unprivileged (8 bit), ARM Compatiable */\n#define __LDRBT(ptr) __LB((ptr))\n/** \\brief LDRT Unprivileged (16 bit), ARM Compatiable */\n#define __LDRHT(ptr) __LH((ptr))\n/** \\brief LDRT Unprivileged (32 bit), ARM Compatiable */\n#define __LDRT(ptr) __LW((ptr))\n\n/** \\brief STRT Unprivileged (8 bit), ARM Compatiable */\n#define __STRBT(ptr) __SB((ptr))\n/** \\brief STRT Unprivileged (16 bit), ARM Compatiable */\n#define __STRHT(ptr) __SH((ptr))\n/** \\brief STRT Unprivileged (32 bit), ARM Compatiable */\n#define __STRT(ptr) __SW((ptr))\n\n/* ===== Saturation Operations ===== */\n/**\n * \\brief   Signed Saturate\n * \\details Saturates a signed value.\n * \\param [in]  value  Value to be saturated\n * \\param [in]    sat  Bit position to saturate to (1..32)\n * \\return             Saturated value\n */\n#if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1)\n#define __SSAT(val, sat) __RV_SCLIP32((val), (sat - 1))\n#else\n__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) {\n  if ((sat >= 1U) && (sat <= 32U)) {\n    const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U);\n    const int32_t min = -1 - max;\n    if (val > max) {\n      return max;\n    } else if (val < min) {\n      return min;\n    }\n  }\n  return val;\n}\n#endif\n\n/**\n * \\brief   Unsigned Saturate\n * \\details Saturates an unsigned value.\n * \\param [in]  value  Value to be saturated\n * \\param [in]    sat  Bit position to saturate to (0..31)\n * \\return             Saturated value\n */\n#if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1)\n#define __USAT(val, sat) __RV_UCLIP32((val), (sat - 1))\n#else\n__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) {\n  if (sat <= 31U) {\n    const uint32_t max = ((1U << sat) - 1U);\n    if (val > (int32_t)max) {\n      return max;\n    } else if (val < 0) {\n      return 0U;\n    }\n  }\n  return (uint32_t)val;\n}\n#endif\n\n/* ===== Data Processing Operations ===== */\n/**\n * \\brief   Reverse byte order (32 bit)\n * \\details Reverses the byte order in unsigned integer value.\n * For example, 0x12345678 becomes 0x78563412.\n * \\param [in]    value  Value to reverse\n * \\return               Reversed value\n */\n__STATIC_FORCEINLINE uint32_t __REV(uint32_t value) {\n  uint32_t result;\n\n  result = ((value & 0xff000000) >> 24) | ((value & 0x00ff0000) >> 8) | ((value & 0x0000ff00) << 8) | ((value & 0x000000ff) << 24);\n  return result;\n}\n\n/**\n * \\brief   Reverse byte order (16 bit)\n * \\details Reverses the byte order within each halfword of a word.\n * For example, 0x12345678 becomes 0x34127856.\n * \\param [in]    value  Value to reverse\n * \\return               Reversed value\n */\n__STATIC_FORCEINLINE uint32_t __REV16(uint32_t value) {\n  uint32_t result;\n  result = ((value & 0xff000000) >> 8) | ((value & 0x00ff00000) << 8) | ((value & 0x0000ff00) >> 8) | ((value & 0x000000ff) << 8);\n\n  return result;\n}\n\n/**\n * \\brief   Reverse byte order (16 bit)\n * \\details Reverses the byte order in a 16-bit value\n * and returns the signed 16-bit result.\n * For example, 0x0080 becomes 0x8000.\n * \\param [in]    value  Value to reverse\n * \\return               Reversed value\n */\n__STATIC_FORCEINLINE int16_t __REVSH(int16_t value) {\n  int16_t result;\n  result = ((value & 0xff00) >> 8) | ((value & 0x00ff) << 8);\n  return result;\n}\n\n/**\n * \\brief   Rotate Right in unsigned value (32 bit)\n * \\details Rotate Right (immediate) provides the value of\n * the contents of a register rotated by a variable number of bits.\n * \\param [in]    op1  Value to rotate\n * \\param [in]    op2  Number of Bits to rotate(0-31)\n * \\return               Rotated value\n */\n__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) {\n  op2 = op2 & 0x1F;\n  if (op2 == 0U) {\n    return op1;\n  }\n  return (op1 >> op2) | (op1 << (32U - op2));\n}\n\n/**\n * \\brief   Reverse bit order of value\n * \\details Reverses the bit order of the given value.\n * \\param [in]    value  Value to reverse\n * \\return               Reversed value\n */\n#if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1)\n#define __RBIT(value) __RV_BITREVI((value), 31)\n#else\n__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value) {\n  uint32_t result;\n  uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */\n\n  result = value; /* r will be reversed bits of v; first get LSB of v */\n  for (value >>= 1U; value != 0U; value >>= 1U) {\n    result <<= 1U;\n    result |= value & 1U;\n    s--;\n  }\n  result <<= s; /* shift when v's highest bits are zero */\n  return result;\n}\n#endif /* defined(__DSP_PRESENT) && (__DSP_PRESENT == 1) */\n\n/**\n * \\brief   Count leading zeros\n * \\details Counts the number of leading zeros of a data value.\n * \\param [in]  data  Value to count the leading zeros\n * \\return             number of leading zeros in value\n */\n#if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1)\n#define __CLZ(data) __RV_CLZ32(data)\n#else\n__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t data) {\n  uint8_t  ret  = 0;\n  uint32_t temp = ~data;\n  while (temp & 0x80000000) {\n    temp <<= 1;\n    ret++;\n  }\n  return ret;\n}\n#endif /* defined(__DSP_PRESENT) && (__DSP_PRESENT == 1) */\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_ARMCompatiable_Functions */\n\n#ifdef __cplusplus\n}\n#endif\n#endif /* __CORE_COMPATIABLE_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/NMSIS/Core/Include/core_feature_base.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#ifndef __CORE_FEATURE_BASE__\n#define __CORE_FEATURE_BASE__\n/*!\n * @file     core_feature_base.h\n * @brief    Base core feature API for Nuclei N/NX Core\n */\n#include \"riscv_encoding.h\"\n#include <stdint.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**\n * \\defgroup NMSIS_Core_Registers     Register Define and Type Definitions\n * \\brief   Type definitions and defines for core registers.\n *\n * @{\n */\n#ifndef __RISCV_XLEN\n/** \\brief Refer to the width of an integer register in bits(either 32 or 64) */\n#ifndef __riscv_xlen\n#define __RISCV_XLEN 32\n#else\n#define __RISCV_XLEN __riscv_xlen\n#endif\n#endif /* __RISCV_XLEN */\n\n/** \\brief Type of Control and Status Register(CSR), depends on the XLEN defined in RISC-V */\n#if __RISCV_XLEN == 32\ntypedef uint32_t rv_csr_t;\n#elif __RISCV_XLEN == 64\ntypedef uint64_t rv_csr_t;\n#else\ntypedef uint32_t rv_csr_t;\n#endif\n/** @} */ /* End of Doxygen Group NMSIS_Core_Registers */\n/**\n * \\defgroup NMSIS_Core_Base_Registers     Base Register Define and Type Definitions\n * \\ingroup NMSIS_Core_Registers\n * \\brief   Type definitions and defines for base core registers.\n *\n * @{\n */\n/**\n * \\brief  Union type to access MISA register.\n */\ntypedef union {\n  struct {\n    rv_csr_t a : 1;          /*!< bit:     0  Atomic extension */\n    rv_csr_t b : 1;          /*!< bit:     1  Tentatively reserved for Bit-Manipulation extension */\n    rv_csr_t c : 1;          /*!< bit:     2  Compressed extension */\n    rv_csr_t d : 1;          /*!< bit:     3  Double-precision floating-point extension */\n    rv_csr_t e : 1;          /*!< bit:     4  RV32E base ISA */\n    rv_csr_t f : 1;          /*!< bit:     5  Single-precision floating-point extension */\n    rv_csr_t g : 1;          /*!< bit:     6  Additional standard extensions present */\n    rv_csr_t h : 1;          /*!< bit:     7  Hypervisor extension */\n    rv_csr_t i : 1;          /*!< bit:     8  RV32I/64I/128I base ISA */\n    rv_csr_t j : 1;          /*!< bit:     9  Tentatively reserved for Dynamically Translated Languages extension */\n    rv_csr_t _reserved1 : 1; /*!< bit:     10 Reserved  */\n    rv_csr_t l : 1;          /*!< bit:     11 Tentatively reserved for Decimal Floating-Point extension  */\n    rv_csr_t m : 1;          /*!< bit:     12 Integer Multiply/Divide extension */\n    rv_csr_t n : 1;          /*!< bit:     13 User-level interrupts supported  */\n    rv_csr_t _reserved2 : 1; /*!< bit:     14 Reserved  */\n    rv_csr_t p : 1;          /*!< bit:     15 Tentatively reserved for Packed-SIMD extension  */\n    rv_csr_t q : 1;          /*!< bit:     16 Quad-precision floating-point extension  */\n    rv_csr_t _resreved3 : 1; /*!< bit:     17 Reserved  */\n    rv_csr_t s : 1;          /*!< bit:     18 Supervisor mode implemented  */\n    rv_csr_t t : 1;          /*!< bit:     19 Tentatively reserved for Transactional Memory extension  */\n    rv_csr_t u : 1;          /*!< bit:     20 User mode implemented  */\n    rv_csr_t v : 1;          /*!< bit:     21 Tentatively reserved for Vector extension  */\n    rv_csr_t _reserved4 : 1; /*!< bit:     22 Reserved  */\n    rv_csr_t x : 1;          /*!< bit:     23 Non-standard extensions present  */\n#if defined(__RISCV_XLEN) && __RISCV_XLEN == 64\n    rv_csr_t _reserved5 : 38; /*!< bit:     24..61 Reserved  */\n    rv_csr_t mxl : 2;         /*!< bit:     62..63 Machine XLEN  */\n#else\n    rv_csr_t _reserved5 : 6;  /*!< bit:     24..29 Reserved  */\n    rv_csr_t mxl : 2;         /*!< bit:     30..31 Machine XLEN  */\n#endif\n  } b;        /*!< Structure used for bit  access */\n  rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MISA_Type;\n\n/**\n * \\brief  Union type to access MSTATUS configure register.\n */\ntypedef union {\n  struct {\n#if defined(__RISCV_XLEN) && __RISCV_XLEN == 64\n    rv_csr_t _reserved0 : 3;  /*!< bit:     0..2  Reserved */\n    rv_csr_t mie : 1;         /*!< bit:     3  Machine mode interrupt enable flag */\n    rv_csr_t _reserved1 : 3;  /*!< bit:     4..6  Reserved */\n    rv_csr_t mpie : 1;        /*!< bit:     7  mirror of MIE flag */\n    rv_csr_t _reserved2 : 3;  /*!< bit:     8..10  Reserved */\n    rv_csr_t mpp : 2;         /*!< bit:     11..12 mirror of Privilege Mode */\n    rv_csr_t fs : 2;          /*!< bit:     13..14 FS status flag */\n    rv_csr_t xs : 2;          /*!< bit:     15..16 XS status flag */\n    rv_csr_t mprv : 1;        /*!< bit:     Machine mode PMP */\n    rv_csr_t _reserved3 : 14; /*!< bit:     18..31 Reserved */\n    rv_csr_t uxl : 2;         /*!< bit:     32..33 user mode xlen */\n    rv_csr_t _reserved6 : 29; /*!< bit:     34..62 Reserved  */\n    rv_csr_t sd : 1;          /*!< bit:     Dirty status for XS or FS */\n#else\n    rv_csr_t _reserved0 : 1;  /*!< bit:     0  Reserved */\n    rv_csr_t sie : 1;         /*!< bit:     1  supervisor interrupt enable flag */\n    rv_csr_t _reserved1 : 1;  /*!< bit:     2  Reserved */\n    rv_csr_t mie : 1;         /*!< bit:     3  Machine mode interrupt enable flag */\n    rv_csr_t _reserved2 : 1;  /*!< bit:     4  Reserved */\n    rv_csr_t spie : 1;        /*!< bit:     3  Supervisor Privilede mode interrupt enable flag */\n    rv_csr_t _reserved3 : 1;  /*!< bit:     Reserved */\n    rv_csr_t mpie : 1;        /*!< bit:     mirror of MIE flag */\n    rv_csr_t _reserved4 : 3;  /*!< bit:     Reserved */\n    rv_csr_t mpp : 2;         /*!< bit:     mirror of Privilege Mode */\n    rv_csr_t fs : 2;          /*!< bit:     FS status flag */\n    rv_csr_t xs : 2;          /*!< bit:     XS status flag */\n    rv_csr_t mprv : 1;        /*!< bit:     Machine mode PMP */\n    rv_csr_t sum : 1;         /*!< bit:     Supervisor Mode load and store protection */\n    rv_csr_t _reserved6 : 12; /*!< bit:     19..30 Reserved  */\n    rv_csr_t sd : 1;          /*!< bit:     Dirty status for XS or FS */\n#endif\n  } b;        /*!< Structure used for bit  access */\n  rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MSTATUS_Type;\n\n/**\n * \\brief  Union type to access MTVEC configure register.\n */\ntypedef union {\n  struct {\n    rv_csr_t mode : 6; /*!< bit:     0..5   interrupt mode control */\n#if defined(__RISCV_XLEN) && __RISCV_XLEN == 64\n    rv_csr_t addr : 58; /*!< bit:     6..63  mtvec address */\n#else\n    rv_csr_t addr : 26;       /*!< bit:     6..31  mtvec address */\n#endif\n  } b;        /*!< Structure used for bit  access */\n  rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MTVEC_Type;\n\n/**\n * \\brief  Union type to access MCAUSE configure register.\n */\ntypedef union {\n  struct {\n    rv_csr_t exccode : 12;   /*!< bit:     11..0  exception or interrupt code */\n    rv_csr_t _reserved0 : 4; /*!< bit:     15..12  Reserved */\n    rv_csr_t mpil : 8;       /*!< bit:     23..16  Previous interrupt level */\n    rv_csr_t _reserved1 : 3; /*!< bit:     26..24  Reserved */\n    rv_csr_t mpie : 1;       /*!< bit:     27  Interrupt enable flag before enter interrupt */\n    rv_csr_t mpp : 2;        /*!< bit:     29..28  Privilede mode flag before enter interrupt */\n    rv_csr_t minhv : 1;      /*!< bit:     30  Machine interrupt vector table */\n#if defined(__RISCV_XLEN) && __RISCV_XLEN == 64\n    rv_csr_t _reserved2 : 32; /*!< bit:     31..62  Reserved */\n    rv_csr_t interrupt : 1;   /*!< bit:     63  trap type. 0 means exception and 1 means interrupt */\n#else\n    rv_csr_t interrupt : 1;   /*!< bit:     31  trap type. 0 means exception and 1 means interrupt */\n#endif\n  } b;        /*!< Structure used for bit  access */\n  rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MCAUSE_Type;\n\n/**\n * \\brief  Union type to access MCOUNTINHIBIT configure register.\n */\ntypedef union {\n  struct {\n    rv_csr_t cy : 1;         /*!< bit:     0     1 means disable mcycle counter */\n    rv_csr_t _reserved0 : 1; /*!< bit:     1     Reserved */\n    rv_csr_t ir : 1;         /*!< bit:     2     1 means disable minstret counter */\n#if defined(__RISCV_XLEN) && __RISCV_XLEN == 64\n    rv_csr_t _reserved1 : 61; /*!< bit:     3..63 Reserved */\n#else\n    rv_csr_t _reserved1 : 29; /*!< bit:     3..31 Reserved */\n#endif\n  } b;        /*!< Structure used for bit  access */\n  rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MCOUNTINHIBIT_Type;\n\n/**\n * \\brief  Union type to access msubm configure register.\n */\ntypedef union {\n  struct {\n    rv_csr_t _reserved0 : 6; /*!< bit:     0..5   Reserved */\n    rv_csr_t typ : 2;        /*!< bit:     6..7   current trap type */\n    rv_csr_t ptyp : 2;       /*!< bit:     8..9   previous trap type */\n#if defined(__RISCV_XLEN) && __RISCV_XLEN == 64\n    rv_csr_t _reserved1 : 54; /*!< bit:     10..63 Reserved */\n#else\n    rv_csr_t _reserved1 : 22; /*!< bit:     10..31 Reserved */\n#endif\n  } b;        /*!< Structure used for bit  access */\n  rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MSUBM_Type;\n\n/**\n * \\brief  Union type to access MMISC_CTRL configure register.\n */\ntypedef union {\n  struct {\n    rv_csr_t _reserved0 : 3; /*!< bit:     0..2  Reserved */\n    rv_csr_t bpu : 1;        /*!< bit:     3     dynamic prediction enable flag */\n    rv_csr_t _reserved1 : 2; /*!< bit:     4..5  Reserved */\n    rv_csr_t misalign : 1;   /*!< bit:     6     misaligned access support flag */\n    rv_csr_t _reserved2 : 2; /*!< bit:     7..8  Reserved */\n    rv_csr_t nmi_cause : 1;  /*!< bit:     9     mnvec control and nmi mcase exccode */\n#if defined(__RISCV_XLEN) && __RISCV_XLEN == 64\n    rv_csr_t _reserved3 : 54; /*!< bit:     10..63 Reserved */\n#else\n    rv_csr_t _reserved3 : 22; /*!< bit:     10..31 Reserved */\n#endif\n  } b;        /*!< Structure used for bit  access */\n  rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MMISCCTRL_Type;\n\n/**\n * \\brief  Union type to access MSAVESTATUS configure register.\n */\ntypedef union {\n  struct {\n    rv_csr_t mpie1 : 1;      /*!< bit:     0     interrupt enable flag of fisrt level NMI/exception nestting */\n    rv_csr_t mpp1 : 2;       /*!< bit:     1..2  privilede mode of fisrt level NMI/exception nestting */\n    rv_csr_t _reserved0 : 3; /*!< bit:     3..5  Reserved */\n    rv_csr_t ptyp1 : 2;      /*!< bit:     6..7  NMI/exception type of before first nestting */\n    rv_csr_t mpie2 : 1;      /*!< bit:     8     interrupt enable flag of second level NMI/exception nestting */\n    rv_csr_t mpp2 : 2;       /*!< bit:     9..10 privilede mode of second level NMI/exception nestting */\n    rv_csr_t _reserved1 : 3; /*!< bit:     11..13     Reserved */\n    rv_csr_t ptyp2 : 2;      /*!< bit:     14..15     NMI/exception type of before second nestting */\n#if defined(__RISCV_XLEN) && __RISCV_XLEN == 64\n    rv_csr_t _reserved2 : 48; /*!< bit:     16..63 Reserved*/\n#else\n    rv_csr_t _reserved2 : 16; /*!< bit:     16..31 Reserved*/\n#endif\n  } b;        /*!< Structure used for bit  access */\n  rv_csr_t w; /*!< Type      used for csr data access */\n} CSR_MSAVESTATUS_Type;\n/** @} */ /* End of Doxygen Group NMSIS_Core_Base_Registers */\n\n/* ###########################  Core Function Access  ########################### */\n/**\n * \\defgroup NMSIS_Core_CSR_Register_Access    Core CSR Register Access\n * \\ingroup  NMSIS_Core\n * \\brief    Functions to access the Core CSR Registers\n * \\details\n *\n * The following functions or macros provide access to Core CSR registers.\n * - \\ref NMSIS_Core_CSR_Encoding\n * - \\ref NMSIS_Core_CSR_Registers\n *   @{\n */\n\n#ifndef __ASSEMBLY__\n\n/**\n * \\brief CSR operation Macro for csrrw instruction.\n * \\details\n * Read the content of csr register to __v,\n * then write content of val into csr register, then return __v\n * \\param csr   CSR macro definition defined in\n *              \\ref NMSIS_Core_CSR_Registers, eg. \\ref CSR_MSTATUS\n * \\param val   value to store into the CSR register\n * \\return the CSR register value before written\n */\n#define __RV_CSR_SWAP(csr, val)                                                            \\\n  ({                                                                                       \\\n    volatile rv_csr_t __v = (unsigned long)(val);                                          \\\n    __ASM volatile(\"csrrw %0, \" STRINGIFY(csr) \", %1\" : \"=r\"(__v) : \"rK\"(__v) : \"memory\"); \\\n    __v;                                                                                   \\\n  })\n\n/**\n * \\brief CSR operation Macro for csrr instruction.\n * \\details\n * Read the content of csr register to __v and return it\n * \\param csr   CSR macro definition defined in\n *              \\ref NMSIS_Core_CSR_Registers, eg. \\ref CSR_MSTATUS\n * \\return the CSR register value\n */\n#define __RV_CSR_READ(csr)                                               \\\n  ({                                                                     \\\n    volatile rv_csr_t __v;                                               \\\n    __ASM volatile(\"csrr %0, \" STRINGIFY(csr) : \"=r\"(__v) : : \"memory\"); \\\n    __v;                                                                 \\\n  })\n\n/**\n * \\brief CSR operation Macro for csrw instruction.\n * \\details\n * Write the content of val to csr register\n * \\param csr   CSR macro definition defined in\n *              \\ref NMSIS_Core_CSR_Registers, eg. \\ref CSR_MSTATUS\n * \\param val   value to store into the CSR register\n */\n#define __RV_CSR_WRITE(csr, val)                                            \\\n  ({                                                                        \\\n    volatile rv_csr_t __v = (rv_csr_t)(val);                                \\\n    __ASM volatile(\"csrw \" STRINGIFY(csr) \", %0\" : : \"rK\"(__v) : \"memory\"); \\\n  })\n\n/**\n * \\brief CSR operation Macro for csrrs instruction.\n * \\details\n * Read the content of csr register to __v,\n * then set csr register to be __v | val, then return __v\n * \\param csr   CSR macro definition defined in\n *              \\ref NMSIS_Core_CSR_Registers, eg. \\ref CSR_MSTATUS\n * \\param val   Mask value to be used wih csrrs instruction\n * \\return the CSR register value before written\n */\n#define __RV_CSR_READ_SET(csr, val)                                                        \\\n  ({                                                                                       \\\n    volatile rv_csr_t __v = (rv_csr_t)(val);                                               \\\n    __ASM volatile(\"csrrs %0, \" STRINGIFY(csr) \", %1\" : \"=r\"(__v) : \"rK\"(__v) : \"memory\"); \\\n    __v;                                                                                   \\\n  })\n\n/**\n * \\brief CSR operation Macro for csrs instruction.\n * \\details\n * Set csr register to be csr_content | val\n * \\param csr   CSR macro definition defined in\n *              \\ref NMSIS_Core_CSR_Registers, eg. \\ref CSR_MSTATUS\n * \\param val   Mask value to be used wih csrs instruction\n */\n#define __RV_CSR_SET(csr, val)                                              \\\n  ({                                                                        \\\n    volatile rv_csr_t __v = (rv_csr_t)(val);                                \\\n    __ASM volatile(\"csrs \" STRINGIFY(csr) \", %0\" : : \"rK\"(__v) : \"memory\"); \\\n  })\n\n/**\n * \\brief CSR operation Macro for csrrc instruction.\n * \\details\n * Read the content of csr register to __v,\n * then set csr register to be __v & ~val, then return __v\n * \\param csr   CSR macro definition defined in\n *              \\ref NMSIS_Core_CSR_Registers, eg. \\ref CSR_MSTATUS\n * \\param val   Mask value to be used wih csrrc instruction\n * \\return the CSR register value before written\n */\n#define __RV_CSR_READ_CLEAR(csr, val)                                                      \\\n  ({                                                                                       \\\n    volatile rv_csr_t __v = (rv_csr_t)(val);                                               \\\n    __ASM volatile(\"csrrc %0, \" STRINGIFY(csr) \", %1\" : \"=r\"(__v) : \"rK\"(__v) : \"memory\"); \\\n    __v;                                                                                   \\\n  })\n\n/**\n * \\brief CSR operation Macro for csrc instruction.\n * \\details\n * Set csr register to be csr_content & ~val\n * \\param csr   CSR macro definition defined in\n *              \\ref NMSIS_Core_CSR_Registers, eg. \\ref CSR_MSTATUS\n * \\param val   Mask value to be used wih csrc instruction\n */\n#define __RV_CSR_CLEAR(csr, val)                                            \\\n  ({                                                                        \\\n    volatile rv_csr_t __v = (rv_csr_t)(val);                                \\\n    __ASM volatile(\"csrc \" STRINGIFY(csr) \", %0\" : : \"rK\"(__v) : \"memory\"); \\\n  })\n#endif /* __ASSEMBLY__ */\n\n/**\n * \\brief   Enable IRQ Interrupts\n * \\details Enables IRQ interrupts by setting the MIE-bit in the MSTATUS Register.\n * \\remarks\n *          Can only be executed in Privileged modes.\n */\n__STATIC_FORCEINLINE void __enable_irq(void) { __RV_CSR_SET(CSR_MSTATUS, MSTATUS_MIE); }\n\n/**\n * \\brief   Disable IRQ Interrupts\n * \\details Disables IRQ interrupts by clearing the MIE-bit in the MSTATUS Register.\n * \\remarks\n *          Can only be executed in Privileged modes.\n */\n__STATIC_FORCEINLINE void __disable_irq(void) { __RV_CSR_CLEAR(CSR_MSTATUS, MSTATUS_MIE); }\n\n/**\n * \\brief   Read whole 64 bits value of mcycle counter\n * \\details This function will read the whole 64 bits of MCYCLE register\n * \\return  The whole 64 bits value of MCYCLE\n * \\remarks It will work for both RV32 and RV64 to get full 64bits value of MCYCLE\n */\n__STATIC_FORCEINLINE uint64_t __get_rv_cycle(void) {\n#if __RISCV_XLEN == 32\n  volatile uint32_t high0, low, high;\n  uint64_t          full;\n\n  high0 = __RV_CSR_READ(CSR_MCYCLEH);\n  low   = __RV_CSR_READ(CSR_MCYCLE);\n  high  = __RV_CSR_READ(CSR_MCYCLEH);\n  if (high0 != high) {\n    low = __RV_CSR_READ(CSR_MCYCLE);\n  }\n  full = (((uint64_t)high) << 32) | low;\n  return full;\n#elif __RISCV_XLEN == 64\n  return (uint64_t)__RV_CSR_READ(CSR_MCYCLE);\n#else // TODO Need cover for XLEN=128 case in future\n  return (uint64_t)__RV_CSR_READ(CSR_MCYCLE);\n#endif\n}\n\n/**\n * \\brief   Read whole 64 bits value of machine instruction-retired counter\n * \\details This function will read the whole 64 bits of MINSTRET register\n * \\return  The whole 64 bits value of MINSTRET\n * \\remarks It will work for both RV32 and RV64 to get full 64bits value of MINSTRET\n */\n__STATIC_FORCEINLINE uint64_t __get_rv_instret(void) {\n#if __RISCV_XLEN == 32\n  volatile uint32_t high0, low, high;\n  uint64_t          full;\n\n  high0 = __RV_CSR_READ(CSR_MINSTRETH);\n  low   = __RV_CSR_READ(CSR_MINSTRET);\n  high  = __RV_CSR_READ(CSR_MINSTRETH);\n  if (high0 != high) {\n    low = __RV_CSR_READ(CSR_MINSTRET);\n  }\n  full = (((uint64_t)high) << 32) | low;\n  return full;\n#elif __RISCV_XLEN == 64\n  return (uint64_t)__RV_CSR_READ(CSR_MINSTRET);\n#else // TODO Need cover for XLEN=128 case in future\n  return (uint64_t)__RV_CSR_READ(CSR_MINSTRET);\n#endif\n}\n\n/**\n * \\brief   Read whole 64 bits value of real-time clock\n * \\details This function will read the whole 64 bits of TIME register\n * \\return  The whole 64 bits value of TIME CSR\n * \\remarks It will work for both RV32 and RV64 to get full 64bits value of TIME\n * \\attention only available when user mode available\n */\n__STATIC_FORCEINLINE uint64_t __get_rv_time(void) {\n#if __RISCV_XLEN == 32\n  volatile uint32_t high0, low, high;\n  uint64_t          full;\n\n  high0 = __RV_CSR_READ(CSR_TIMEH);\n  low   = __RV_CSR_READ(CSR_TIME);\n  high  = __RV_CSR_READ(CSR_TIMEH);\n  if (high0 != high) {\n    low = __RV_CSR_READ(CSR_TIME);\n  }\n  full = (((uint64_t)high) << 32) | low;\n  return full;\n#elif __RISCV_XLEN == 64\n  return (uint64_t)__RV_CSR_READ(CSR_TIME);\n#else // TODO Need cover for XLEN=128 case in future\n  return (uint64_t)__RV_CSR_READ(CSR_TIME);\n#endif\n}\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_CSR_Register_Access */\n\n/* ###########################  CPU Intrinsic Functions ########################### */\n/**\n * \\defgroup NMSIS_Core_CPU_Intrinsic   Intrinsic Functions for CPU Intructions\n * \\ingroup  NMSIS_Core\n * \\brief    Functions that generate RISC-V CPU instructions.\n * \\details\n *\n * The following functions generate specified RISC-V instructions that cannot be directly accessed by compiler.\n *   @{\n */\n\n/**\n * \\brief   NOP Instruction\n * \\details\n * No Operation does nothing.\n * This instruction can be used for code alignment purposes.\n */\n__STATIC_FORCEINLINE void __NOP(void) { __ASM volatile(\"nop\"); }\n\n/**\n * \\brief   Wait For Interrupt\n * \\details\n * Wait For Interrupt is is executed using CSR_WFE.WFE=0 and WFI instruction.\n * It will suspends execution until interrupt, NMI or Debug happened.\n * When Core is waked up by interrupt, if\n * 1. mstatus.MIE == 1(interrupt enabled), Core will enter ISR code\n * 2. mstatus.MIE == 0(interrupt disabled), Core will resume previous execution\n */\n__STATIC_FORCEINLINE void __WFI(void) {\n  __RV_CSR_CLEAR(CSR_WFE, WFE_WFE);\n  __ASM volatile(\"wfi\");\n}\n\n/**\n * \\brief   Wait For Event\n * \\details\n * Wait For Event is executed using CSR_WFE.WFE=1 and WFI instruction.\n * It will suspends execution until event, NMI or Debug happened.\n * When Core is waked up, Core will resume previous execution\n */\n__STATIC_FORCEINLINE void __WFE(void) {\n  __RV_CSR_SET(CSR_WFE, WFE_WFE);\n  __ASM volatile(\"wfi\");\n  __RV_CSR_CLEAR(CSR_WFE, WFE_WFE);\n}\n\n/**\n * \\brief   Breakpoint Instruction\n * \\details\n * Causes the processor to enter Debug state.\n * Debug tools can use this to investigate system state\n * when the instruction at a particular address is reached.\n */\n__STATIC_FORCEINLINE void __EBREAK(void) { __ASM volatile(\"ebreak\"); }\n\n/**\n * \\brief   Environment Call Instruction\n * \\details\n * The ECALL instruction is used to make a service request to\n * the execution environment.\n */\n__STATIC_FORCEINLINE void __ECALL(void) { __ASM volatile(\"ecall\"); }\n\n/**\n * \\brief WFI Sleep Mode enumeration\n */\ntypedef enum WFI_SleepMode {\n  WFI_SHALLOW_SLEEP = 0, /*!< Shallow sleep mode, the core_clk will poweroff */\n  WFI_DEEP_SLEEP    = 1  /*!< Deep sleep mode, the core_clk and core_ano_clk will poweroff */\n} WFI_SleepMode_Type;\n\n/**\n * \\brief   Set Sleep mode of WFI\n * \\details\n * Set the SLEEPVALUE CSR register to control the\n * WFI Sleep mode.\n * \\param[in] mode      The sleep mode to be set\n */\n__STATIC_FORCEINLINE void __set_wfi_sleepmode(WFI_SleepMode_Type mode) { __RV_CSR_WRITE(CSR_SLEEPVALUE, mode); }\n\n/**\n * \\brief   Send TX Event\n * \\details\n * Set the CSR TXEVT to control send a TX Event.\n * The Core will output signal tx_evt as output event signal.\n */\n__STATIC_FORCEINLINE void __TXEVT(void) { __RV_CSR_SET(CSR_TXEVT, 0x1); }\n\n/**\n * \\brief   Enable MCYCLE counter\n * \\details\n * Clear the CY bit of MCOUNTINHIBIT to 0 to enable MCYCLE Counter\n */\n__STATIC_FORCEINLINE void __enable_mcycle_counter(void) { __RV_CSR_CLEAR(CSR_MCOUNTINHIBIT, MCOUNTINHIBIT_CY); }\n\n/**\n * \\brief   Disable MCYCLE counter\n * \\details\n * Set the CY bit of MCOUNTINHIBIT to 1 to disable MCYCLE Counter\n */\n__STATIC_FORCEINLINE void __disable_mcycle_counter(void) { __RV_CSR_SET(CSR_MCOUNTINHIBIT, MCOUNTINHIBIT_CY); }\n\n/**\n * \\brief   Enable MINSTRET counter\n * \\details\n * Clear the IR bit of MCOUNTINHIBIT to 0 to enable MINSTRET Counter\n */\n__STATIC_FORCEINLINE void __enable_minstret_counter(void) { __RV_CSR_CLEAR(CSR_MCOUNTINHIBIT, MCOUNTINHIBIT_IR); }\n\n/**\n * \\brief   Disable MINSTRET counter\n * \\details\n * Set the IR bit of MCOUNTINHIBIT to 1 to disable MINSTRET Counter\n */\n__STATIC_FORCEINLINE void __disable_minstret_counter(void) { __RV_CSR_SET(CSR_MCOUNTINHIBIT, MCOUNTINHIBIT_IR); }\n\n/**\n * \\brief   Enable MCYCLE & MINSTRET counter\n * \\details\n * Clear the IR and CY bit of MCOUNTINHIBIT to 1 to enable MINSTRET & MCYCLE Counter\n */\n__STATIC_FORCEINLINE void __enable_all_counter(void) { __RV_CSR_CLEAR(CSR_MCOUNTINHIBIT, MCOUNTINHIBIT_IR | MCOUNTINHIBIT_CY); }\n\n/**\n * \\brief   Disable MCYCLE & MINSTRET counter\n * \\details\n * Set the IR and CY bit of MCOUNTINHIBIT to 1 to disable MINSTRET & MCYCLE Counter\n */\n__STATIC_FORCEINLINE void __disable_all_counter(void) { __RV_CSR_SET(CSR_MCOUNTINHIBIT, MCOUNTINHIBIT_IR | MCOUNTINHIBIT_CY); }\n\n/**\n * \\brief Execute fence instruction, p -> pred, s -> succ\n * \\details\n * the FENCE instruction ensures that all memory accesses from instructions preceding\n * the fence in program order (the `predecessor set`) appear earlier in the global memory order than\n * memory accesses from instructions appearing after the fence in program order (the `successor set`).\n * For details, please refer to The RISC-V Instruction Set Manual\n * \\param p     predecessor set, such as iorw, rw, r, w\n * \\param s     successor set, such as iorw, rw, r, w\n **/\n#define __FENCE(p, s) __ASM volatile(\"fence \" #p \",\" #s : : : \"memory\")\n\n/**\n * \\brief   Fence.i Instruction\n * \\details\n * The FENCE.I instruction is used to synchronize the instruction\n * and data streams.\n */\n__STATIC_FORCEINLINE void __FENCE_I(void) { __ASM volatile(\"fence.i\"); }\n\n/** \\brief Read & Write Memory barrier */\n#define __RWMB() __FENCE(iorw, iorw)\n\n/** \\brief Read Memory barrier */\n#define __RMB() __FENCE(ir, ir)\n\n/** \\brief Write Memory barrier */\n#define __WMB() __FENCE(ow, ow)\n\n/** \\brief SMP Read & Write Memory barrier */\n#define __SMP_RWMB() __FENCE(rw, rw)\n\n/** \\brief SMP Read Memory barrier */\n#define __SMP_RMB() __FENCE(r, r)\n\n/** \\brief SMP Write Memory barrier */\n#define __SMP_WMB() __FENCE(w, w)\n\n/** \\brief CPU relax for busy loop */\n#define __CPU_RELAX() __ASM volatile(\"\" : : : \"memory\")\n\n/* ===== Load/Store Operations ===== */\n/**\n * \\brief  Load 8bit value from address (8 bit)\n * \\details Load 8 bit value.\n * \\param [in]    addr  Address pointer to data\n * \\return              value of type uint8_t at (*addr)\n */\n__STATIC_FORCEINLINE uint8_t __LB(volatile void *addr) {\n  uint8_t result;\n\n  __ASM volatile(\"lb %0, 0(%1)\" : \"=r\"(result) : \"r\"(addr));\n  return result;\n}\n\n/**\n * \\brief  Load 16bit value from address (16 bit)\n * \\details Load 16 bit value.\n * \\param [in]    addr  Address pointer to data\n * \\return              value of type uint16_t at (*addr)\n */\n__STATIC_FORCEINLINE uint16_t __LH(volatile void *addr) {\n  uint16_t result;\n\n  __ASM volatile(\"lh %0, 0(%1)\" : \"=r\"(result) : \"r\"(addr));\n  return result;\n}\n\n/**\n * \\brief  Load 32bit value from address (32 bit)\n * \\details Load 32 bit value.\n * \\param [in]    addr  Address pointer to data\n * \\return              value of type uint32_t at (*addr)\n */\n__STATIC_FORCEINLINE uint32_t __LW(volatile void *addr) {\n  uint32_t result;\n\n  __ASM volatile(\"lw %0, 0(%1)\" : \"=r\"(result) : \"r\"(addr));\n  return result;\n}\n\n#if __RISCV_XLEN != 32\n/**\n * \\brief  Load 64bit value from address (64 bit)\n * \\details Load 64 bit value.\n * \\param [in]    addr  Address pointer to data\n * \\return              value of type uint64_t at (*addr)\n * \\remarks RV64 only macro\n */\n__STATIC_FORCEINLINE uint64_t __LD(volatile void *addr) {\n  uint64_t result;\n  __ASM volatile(\"ld %0, 0(%1)\" : \"=r\"(result) : \"r\"(addr));\n  return result;\n}\n#endif\n\n/**\n * \\brief  Write 8bit value to address (8 bit)\n * \\details Write 8 bit value.\n * \\param [in]    addr  Address pointer to data\n * \\param [in]    val   Value to set\n */\n__STATIC_FORCEINLINE void __SB(volatile void *addr, uint8_t val) { __ASM volatile(\"sb %0, 0(%1)\" : : \"r\"(val), \"r\"(addr)); }\n\n/**\n * \\brief  Write 16bit value to address (16 bit)\n * \\details Write 16 bit value.\n * \\param [in]    addr  Address pointer to data\n * \\param [in]    val   Value to set\n */\n__STATIC_FORCEINLINE void __SH(volatile void *addr, uint16_t val) { __ASM volatile(\"sh %0, 0(%1)\" : : \"r\"(val), \"r\"(addr)); }\n\n/**\n * \\brief  Write 32bit value to address (32 bit)\n * \\details Write 32 bit value.\n * \\param [in]    addr  Address pointer to data\n * \\param [in]    val   Value to set\n */\n__STATIC_FORCEINLINE void __SW(volatile void *addr, uint32_t val) { __ASM volatile(\"sw %0, 0(%1)\" : : \"r\"(val), \"r\"(addr)); }\n\n#if __RISCV_XLEN != 32\n/**\n * \\brief  Write 64bit value to address (64 bit)\n * \\details Write 64 bit value.\n * \\param [in]    addr  Address pointer to data\n * \\param [in]    val   Value to set\n */\n__STATIC_FORCEINLINE void __SD(volatile void *addr, uint64_t val) { __ASM volatile(\"sd %0, 0(%1)\" : : \"r\"(val), \"r\"(addr)); }\n#endif\n\n/**\n * \\brief  Compare and Swap 32bit value using LR and SC\n * \\details Compare old value with memory, if identical,\n * store new value in memory. Return the initial value in memory.\n * Success is indicated by comparing return value with OLD.\n * memory address, return 0 if successful, otherwise return !0\n * \\param [in]    addr      Address pointer to data, address need to be 4byte aligned\n * \\param [in]    oldval    Old value of the data in address\n * \\param [in]    newval    New value to be stored into the address\n * \\return  return the initial value in memory\n */\n__STATIC_FORCEINLINE uint32_t __CAS_W(volatile uint32_t *addr, uint32_t oldval, uint32_t newval) {\n  uint32_t result;\n  uint32_t rc;\n\n  __ASM volatile(\"0:     lr.w %0, %2      \\n\"\n                 \"       bne  %0, %z3, 1f \\n\"\n                 \"       sc.w %1, %z4, %2 \\n\"\n                 \"       bnez %1, 0b      \\n\"\n                 \"1:\\n\"\n                 : \"=&r\"(result), \"=&r\"(rc), \"+A\"(*addr)\n                 : \"r\"(oldval), \"r\"(newval)\n                 : \"memory\");\n  return result;\n}\n\n/**\n * \\brief  Atomic Swap 32bit value into memory\n * \\details Atomically swap new 32bit value into memory using amoswap.d.\n * \\param [in]    addr      Address pointer to data, address need to be 4byte aligned\n * \\param [in]    newval    New value to be stored into the address\n * \\return  return the original value in memory\n */\n__STATIC_FORCEINLINE uint32_t __AMOSWAP_W(volatile uint32_t *addr, uint32_t newval) {\n  uint32_t result;\n\n  __ASM volatile(\"amoswap.w %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(newval) : \"memory\");\n  return result;\n}\n\n/**\n * \\brief  Atomic Add with 32bit value\n * \\details Atomically ADD 32bit value with value in memory using amoadd.d.\n * \\param [in]    addr   Address pointer to data, address need to be 4byte aligned\n * \\param [in]    value  value to be ADDed\n * \\return  return memory value + add value\n */\n__STATIC_FORCEINLINE int32_t __AMOADD_W(volatile int32_t *addr, int32_t value) {\n  int32_t result;\n\n  __ASM volatile(\"amoadd.w %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(value) : \"memory\");\n  return *addr;\n}\n\n/**\n * \\brief  Atomic And with 32bit value\n * \\details Atomically AND 32bit value with value in memory using amoand.d.\n * \\param [in]    addr   Address pointer to data, address need to be 4byte aligned\n * \\param [in]    value  value to be ANDed\n * \\return  return memory value & and value\n */\n__STATIC_FORCEINLINE int32_t __AMOAND_W(volatile int32_t *addr, int32_t value) {\n  int32_t result;\n\n  __ASM volatile(\"amoand.w %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(value) : \"memory\");\n  return *addr;\n}\n\n/**\n * \\brief  Atomic OR with 32bit value\n * \\details Atomically OR 32bit value with value in memory using amoor.d.\n * \\param [in]    addr   Address pointer to data, address need to be 4byte aligned\n * \\param [in]    value  value to be ORed\n * \\return  return memory value | and value\n */\n__STATIC_FORCEINLINE int32_t __AMOOR_W(volatile int32_t *addr, int32_t value) {\n  int32_t result;\n\n  __ASM volatile(\"amoor.w %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(value) : \"memory\");\n  return *addr;\n}\n\n/**\n * \\brief  Atomic XOR with 32bit value\n * \\details Atomically XOR 32bit value with value in memory using amoxor.d.\n * \\param [in]    addr   Address pointer to data, address need to be 4byte aligned\n * \\param [in]    value  value to be XORed\n * \\return  return memory value ^ and value\n */\n__STATIC_FORCEINLINE int32_t __AMOXOR_W(volatile int32_t *addr, int32_t value) {\n  int32_t result;\n\n  __ASM volatile(\"amoxor.w %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(value) : \"memory\");\n  return *addr;\n}\n\n/**\n * \\brief  Atomic unsigned MAX with 32bit value\n * \\details Atomically unsigned max compare 32bit value with value in memory using amomaxu.d.\n * \\param [in]    addr   Address pointer to data, address need to be 4byte aligned\n * \\param [in]    value  value to be compared\n * \\return  return the bigger value\n */\n__STATIC_FORCEINLINE uint32_t __AMOMAXU_W(volatile uint32_t *addr, uint32_t value) {\n  uint32_t result;\n\n  __ASM volatile(\"amomaxu.w %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(value) : \"memory\");\n  return *addr;\n}\n\n/**\n * \\brief  Atomic signed MAX with 32bit value\n * \\details Atomically signed max compare 32bit value with value in memory using amomax.d.\n * \\param [in]    addr   Address pointer to data, address need to be 4byte aligned\n * \\param [in]    value  value to be compared\n * \\return the bigger value\n */\n__STATIC_FORCEINLINE int32_t __AMOMAX_W(volatile int32_t *addr, int32_t value) {\n  int32_t result;\n\n  __ASM volatile(\"amomax.w %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(value) : \"memory\");\n  return *addr;\n}\n\n/**\n * \\brief  Atomic unsigned MIN with 32bit value\n * \\details Atomically unsigned min compare 32bit value with value in memory using amominu.d.\n * \\param [in]    addr   Address pointer to data, address need to be 4byte aligned\n * \\param [in]    value  value to be compared\n * \\return the smaller value\n */\n__STATIC_FORCEINLINE uint32_t __AMOMINU_W(volatile uint32_t *addr, uint32_t value) {\n  uint32_t result;\n\n  __ASM volatile(\"amominu.w %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(value) : \"memory\");\n  return *addr;\n}\n\n/**\n * \\brief  Atomic signed MIN with 32bit value\n * \\details Atomically signed min compare 32bit value with value in memory using amomin.d.\n * \\param [in]    addr   Address pointer to data, address need to be 4byte aligned\n * \\param [in]    value  value to be compared\n * \\return  the smaller value\n */\n__STATIC_FORCEINLINE int32_t __AMOMIN_W(volatile int32_t *addr, int32_t value) {\n  int32_t result;\n\n  __ASM volatile(\"amomin.w %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(value) : \"memory\");\n  return *addr;\n}\n\n#if __RISCV_XLEN == 64\n/**\n * \\brief  Compare and Swap 64bit value using LR and SC\n * \\details Compare old value with memory, if identical,\n * store new value in memory. Return the initial value in memory.\n * Success is indicated by comparing return value with OLD.\n * memory address, return 0 if successful, otherwise return !0\n * \\param [in]    addr      Address pointer to data, address need to be 8byte aligned\n * \\param [in]    oldval    Old value of the data in address\n * \\param [in]    newval    New value to be stored into the address\n * \\return  return the initial value in memory\n */\n__STATIC_FORCEINLINE uint64_t __CAS_D(volatile uint64_t *addr, uint64_t oldval, uint64_t newval) {\n  register uint64_t result;\n  register uint64_t rc;\n\n  __ASM volatile(\"0:     lr.d %0, %2      \\n\"\n                 \"       bne  %0, %z3, 1f \\n\"\n                 \"       sc.d %1, %z4, %2 \\n\"\n                 \"       bnez %1, 0b      \\n\"\n                 \"1:\\n\"\n                 : \"=&r\"(result), \"=&r\"(rc), \"+A\"(*addr)\n                 : \"r\"(oldval), \"r\"(newval)\n                 : \"memory\");\n  return result;\n}\n\n/**\n * \\brief  Atomic Swap 64bit value into memory\n * \\details Atomically swap new 64bit value into memory using amoswap.d.\n * \\param [in]    addr      Address pointer to data, address need to be 8byte aligned\n * \\param [in]    newval    New value to be stored into the address\n * \\return  return the original value in memory\n */\n__STATIC_FORCEINLINE uint64_t __AMOSWAP_D(volatile uint64_t *addr, uint64_t newval) {\n  register uint64_t result;\n\n  __ASM volatile(\"amoswap.d %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(newval) : \"memory\");\n  return result;\n}\n\n/**\n * \\brief  Atomic Add with 64bit value\n * \\details Atomically ADD 64bit value with value in memory using amoadd.d.\n * \\param [in]    addr   Address pointer to data, address need to be 8byte aligned\n * \\param [in]    value  value to be ADDed\n * \\return  return memory value + add value\n */\n__STATIC_FORCEINLINE int64_t __AMOADD_D(volatile int64_t *addr, int64_t value) {\n  register int64_t result;\n\n  __ASM volatile(\"amoadd.d %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(value) : \"memory\");\n  return *addr;\n}\n\n/**\n * \\brief  Atomic And with 64bit value\n * \\details Atomically AND 64bit value with value in memory using amoand.d.\n * \\param [in]    addr   Address pointer to data, address need to be 8byte aligned\n * \\param [in]    value  value to be ANDed\n * \\return  return memory value & and value\n */\n__STATIC_FORCEINLINE int64_t __AMOAND_D(volatile int64_t *addr, int64_t value) {\n  register int64_t result;\n\n  __ASM volatile(\"amoand.d %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(value) : \"memory\");\n  return *addr;\n}\n\n/**\n * \\brief  Atomic OR with 64bit value\n * \\details Atomically OR 64bit value with value in memory using amoor.d.\n * \\param [in]    addr   Address pointer to data, address need to be 8byte aligned\n * \\param [in]    value  value to be ORed\n * \\return  return memory value | and value\n */\n__STATIC_FORCEINLINE int64_t __AMOOR_D(volatile int64_t *addr, int64_t value) {\n  register int64_t result;\n\n  __ASM volatile(\"amoor.d %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(value) : \"memory\");\n  return *addr;\n}\n\n/**\n * \\brief  Atomic XOR with 64bit value\n * \\details Atomically XOR 64bit value with value in memory using amoxor.d.\n * \\param [in]    addr   Address pointer to data, address need to be 8byte aligned\n * \\param [in]    value  value to be XORed\n * \\return  return memory value ^ and value\n */\n__STATIC_FORCEINLINE int64_t __AMOXOR_D(volatile int64_t *addr, int64_t value) {\n  register int64_t result;\n\n  __ASM volatile(\"amoxor.d %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(value) : \"memory\");\n  return *addr;\n}\n\n/**\n * \\brief  Atomic unsigned MAX with 64bit value\n * \\details Atomically unsigned max compare 64bit value with value in memory using amomaxu.d.\n * \\param [in]    addr   Address pointer to data, address need to be 8byte aligned\n * \\param [in]    value  value to be compared\n * \\return  return the bigger value\n */\n__STATIC_FORCEINLINE uint64_t __AMOMAXU_D(volatile uint64_t *addr, uint64_t value) {\n  register uint64_t result;\n\n  __ASM volatile(\"amomaxu.d %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(value) : \"memory\");\n  return *addr;\n}\n\n/**\n * \\brief  Atomic signed MAX with 64bit value\n * \\details Atomically signed max compare 64bit value with value in memory using amomax.d.\n * \\param [in]    addr   Address pointer to data, address need to be 8byte aligned\n * \\param [in]    value  value to be compared\n * \\return the bigger value\n */\n__STATIC_FORCEINLINE int64_t __AMOMAX_D(volatile int64_t *addr, int64_t value) {\n  register int64_t result;\n\n  __ASM volatile(\"amomax.d %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(value) : \"memory\");\n  return *addr;\n}\n\n/**\n * \\brief  Atomic unsigned MIN with 64bit value\n * \\details Atomically unsigned min compare 64bit value with value in memory using amominu.d.\n * \\param [in]    addr   Address pointer to data, address need to be 8byte aligned\n * \\param [in]    value  value to be compared\n * \\return the smaller value\n */\n__STATIC_FORCEINLINE uint64_t __AMOMINU_D(volatile uint64_t *addr, uint64_t value) {\n  register uint64_t result;\n\n  __ASM volatile(\"amominu.d %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(value) : \"memory\");\n  return *addr;\n}\n\n/**\n * \\brief  Atomic signed MIN with 64bit value\n * \\details Atomically signed min compare 64bit value with value in memory using amomin.d.\n * \\param [in]    addr   Address pointer to data, address need to be 8byte aligned\n * \\param [in]    value  value to be compared\n * \\return  the smaller value\n */\n__STATIC_FORCEINLINE int64_t __AMOMIN_D(volatile int64_t *addr, int64_t value) {\n  register int64_t result;\n\n  __ASM volatile(\"amomin.d %0, %2, %1\" : \"=r\"(result), \"+A\"(*addr) : \"r\"(value) : \"memory\");\n  return *addr;\n}\n#endif /* __RISCV_XLEN == 64  */\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_CPU_Intrinsic */\n\n#ifdef __cplusplus\n}\n#endif\n#endif /* __CORE_FEATURE_BASE__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/NMSIS/Core/Include/core_feature_cache.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __CORE_FEATURE_CACHE_H__\n#define __CORE_FEATURE_CACHE_H__\n/*!\n * @file     core_feature_cache.h\n * @brief    Cache feature API header file for Nuclei N/NX Core\n */\n/*\n * Cache Feature Configuration Macro:\n * 1. __ICACHE_PRESENT:  Define whether I-Cache Unit is present or not.\n *   * 0: Not present\n *   * 1: Present\n * 1. __DCACHE_PRESENT:  Define whether D-Cache Unit is present or not.\n *   * 0: Not present\n *   * 1: Present\n */\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1)\n\n/* ##########################  Cache functions  #################################### */\n/**\n * \\defgroup NMSIS_Core_Cache       Cache Functions\n * \\brief    Functions that configure Instruction and Data Cache.\n * @{\n */\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_Cache */\n\n/**\n * \\defgroup NMSIS_Core_ICache      I-Cache Functions\n * \\ingroup  NMSIS_Core_Cache\n * \\brief    Functions that configure Instruction Cache.\n * @{\n */\n/**\n * \\brief  Enable ICache\n * \\details\n * This function enable I-Cache\n * \\remarks\n * - This \\ref CSR_MCACHE_CTL register control I Cache enable.\n * \\sa\n * - \\ref DisableICache\n */\n__STATIC_FORCEINLINE void EnableICache(void) { __RV_CSR_SET(CSR_MCACHE_CTL, CSR_MCACHE_CTL_IE); }\n\n/**\n * \\brief  Disable ICache\n * \\details\n * This function Disable I-Cache\n * \\remarks\n * - This \\ref CSR_MCACHE_CTL register control I Cache enable.\n * \\sa\n * - \\ref EnableICache\n */\n__STATIC_FORCEINLINE void DisableICache(void) { __RV_CSR_CLEAR(CSR_MCACHE_CTL, CSR_MCACHE_CTL_IE); }\n/** @} */ /* End of Doxygen Group NMSIS_Core_ICache */\n#endif    /* defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1) */\n\n#if defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1)\n/**\n * \\defgroup NMSIS_Core_DCache      D-Cache Functions\n * \\ingroup  NMSIS_Core_Cache\n * \\brief    Functions that configure Data Cache.\n * @{\n */\n/**\n * \\brief  Enable DCache\n * \\details\n * This function enable D-Cache\n * \\remarks\n * - This \\ref CSR_MCACHE_CTL register control D Cache enable.\n * \\sa\n * - \\ref DisableDCache\n */\n__STATIC_FORCEINLINE void EnableDCache(void) { __RV_CSR_SET(CSR_MCACHE_CTL, CSR_MCACHE_CTL_DE); }\n\n/**\n * \\brief  Disable DCache\n * \\details\n * This function Disable D-Cache\n * \\remarks\n * - This \\ref CSR_MCACHE_CTL register control D Cache enable.\n * \\sa\n * - \\ref EnableDCache\n */\n__STATIC_FORCEINLINE void DisableDCache(void) { __RV_CSR_CLEAR(CSR_MCACHE_CTL, CSR_MCACHE_CTL_DE); }\n/** @} */ /* End of Doxygen Group NMSIS_Core_DCache */\n#endif    /* defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1) */\n\n#ifdef __cplusplus\n}\n#endif\n#endif /** __CORE_FEATURE_CACHE_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/NMSIS/Core/Include/core_feature_dsp.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __CORE_FEATURE_DSP__\n#define __CORE_FEATURE_DSP__\n\n/*!\n * @file     core_feature_dsp.h\n * @brief    DSP feature API header file for Nuclei N/NX Core\n */\n/*\n * DSP Feature Configuration Macro:\n * 1. __DSP_PRESENT:  Define whether Digital Signal Processing Unit(DSP) is present or not\n *   * 0: Not present\n *   * 1: Present\n */\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1)\n\n/* ###########################  CPU SIMD DSP Intrinsic Functions ########################### */\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic   Intrinsic Functions for SIMD Instructions\n * \\ingroup  NMSIS_Core\n * \\brief    Functions that generate RISC-V DSP SIMD instructions.\n * \\details\n *\n * The following functions generate specified RISC-V SIMD instructions that cannot be directly accessed by compiler.\n * * **DSP ISA Extension Instruction Summary**\n *   + **Shorthand Definitions**\n *     - r.H == rH1: r[31:16], r.L == r.H0: r[15:0]\n *     - r.B3: r[31:24], r.B2: r[23:16], r.B1: r[15:8], r.B0: r[7:0]\n *     - r.B[x]: r[(x*8+7):(x*8+0)]\n *     - r.H[x]: r[(x*16+7):(x*16+0)]\n *     - r.W[x]: r[(x*32+31):(x*32+0)]\n *     - r[xU]: the upper 32-bit of a 64-bit number; xU represents the GPR number that contains this upper part 32-bit value.\n *     - r[xL]: the lower 32-bit of a 64-bit number; xL represents the GPR number that contains this lower part 32-bit value.\n *     - r[xU].r[xL]: a 64-bit number that is formed from a pair of GPRs.\n *     - s>>: signed arithmetic right shift:\n *     - u>>: unsigned logical right shift\n *     - SAT.Qn(): Saturate to the range of [-2^n, 2^n-1], if saturation happens, set PSW.OV.\n *     - SAT.Um(): Saturate to the range of [0, 2^m-1], if saturation happens, set PSW.OV.\n *     - RUND(): Indicate `rounding`, i.e., add 1 to the most significant discarded bit for right shift or MSW-type multiplication instructions.\n *     - Sign or Zero Extending functions:\n *       - SEm(data): Sign-Extend data to m-bit.:\n *       - ZEm(data): Zero-Extend data to m-bit.\n *     - ABS(x): Calculate the absolute value of `x`.\n *     - CONCAT(x,y): Concatinate `x` and `y` to form a value.\n *     - u<: Unsinged less than comparison.\n *     - u<=: Unsinged less than & equal comparison.\n *     - u>: Unsinged greater than comparison.\n *     - s*: Signed multiplication.\n *     - u*: Unsigned multiplication.\n *\n *   @{\n */\n/** @} */ /* End of Doxygen Group NMSIS_Core_DSP_Intrinsic */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS      SIMD Data Processing Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic\n * \\brief    SIMD Data Processing Instructions\n * \\details\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB      SIMD 16-bit Add/Subtract Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 16-bit Add/Subtract Instructions\n * \\details\n * Based on the combination of the types of the two 16-bit arithmetic operations, the SIMD 16-bit\n * add/subtract instructions can be classified into 6 main categories: Addition (two 16-bit addition),\n * Subtraction (two 16-bit subtraction), Crossed Add & Sub (one addition and one subtraction), and\n * Crossed Sub & Add (one subtraction and one addition), Straight Add & Sub (one addition and one\n * subtraction), and Straight Sub & Add (one subtraction and one addition).\n * Based on the way of how an overflow condition is handled, the SIMD 16-bit add/subtract\n * instructions can be classified into 5 groups: Wrap-around (dropping overflow), Signed Halving\n * (keeping overflow by dropping 1 LSB bit), Unsigned Halving, Signed Saturation (clipping overflow),\n * and Unsigned Saturation.\n * Together, there are 30 SIMD 16-bit add/subtract instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB      SIMD 8-bit Addition & Subtraction Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 8-bit Addition & Subtraction Instructions\n * \\details\n * Based on the types of the four 8-bit arithmetic operations, the SIMD 8-bit add/subtract instructions\n * can be classified into 2 main categories: Addition (four 8-bit addition), and Subtraction (four 8-bit\n * subtraction).\n * Based on the way of how an overflow condition is handled for singed or unsigned operation, the\n * SIMD 8-bit add/subtract instructions can be classified into 5 groups: Wrap-around (dropping\n * overflow), Signed Halving (keeping overflow by dropping 1 LSB bit), Unsigned Halving, Signed\n * Saturation (clipping overflow), and Unsigned Saturation.\n * Together, there are 10 SIMD 8-bit add/subtract instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT      SIMD 16-bit Shift Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 16-bit Shift Instructions\n * \\details\n * there are 14 SIMD 16-bit shift instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT      SIMD 8-bit Shift Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 8-bit Shift Instructions\n * \\details\n *  there are 14 SIMD 8-bit shift instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_CMP      SIMD 16-bit Compare Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 16-bit Compare Instructions\n * \\details\n *  there are 5 SIMD 16-bit Compare instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_CMP      SIMD 8-bit Compare Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 8-bit Compare Instructions\n * \\details\n *  there are 5  SIMD 8-bit Compare instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MULTIPLY      SIMD 16-bit Multiply Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 16-bit Multiply Instructions\n * \\details\n * there are 6 SIMD 16-bit Multiply instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MULTIPLY      SIMD 8-bit Multiply Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 8-bit Multiply Instructions\n * \\details\n *  there are 6 SIMD 8-bit Multiply instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC      SIMD 16-bit Miscellaneous Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 16-bit Miscellaneous Instructions\n * \\details\n *  there are 10 SIMD 16-bit Misc instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC      SIMD 8-bit Miscellaneous Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 8-bit Miscellaneous Instructions\n * \\details\n *  there are 10 SIMD 8-bit Miscellaneous instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK      SIMD 8-bit Unpacking Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 8-bit Unpacking Instructions\n * \\details\n *  there are 8 SIMD 8-bit Unpacking instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_NON_SIMD      Non-SIMD Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic\n * \\brief    Non-SIMD Instructions\n * \\details\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q15_SAT_ALU      Non-SIMD Q15 saturation ALU Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NON_SIMD\n * \\brief    Non-SIMD Q15 saturation ALU Instructions\n * \\details\n * there are 7 Non-SIMD Q15 saturation ALU Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU      Non-SIMD Q31 saturation ALU Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NON_SIMD\n * \\brief    Non-SIMD Q31 saturation ALU Instructions\n * \\details\n *  there are Non-SIMD Q31 saturation ALU Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION      32-bit Computation Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NON_SIMD\n * \\brief    32-bit Computation Instructions\n * \\details\n * there are 8 32-bit Computation Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_OV_FLAG_SC      OV (Overflow) flag Set/Clear Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NON_SIMD\n * \\brief    OV (Overflow) flag Set/Clear Instructions\n * \\details\n * The following table lists the user instructions related to Overflow (OV) flag manipulation. there are 2 OV (Overflow) flag Set/Clear Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC      Non-SIMD Miscellaneous Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NON_SIMD\n * \\brief    Non-SIMD Miscellaneous Instructions\n * \\details\n * There are 13 Miscellaneous Instructions here.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_DATA_PROCESS      Partial-SIMD Data Processing Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic\n * \\brief    Partial-SIMD Data Processing Instructions\n * \\details\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_PACK      SIMD 16-bit Packing Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_PART_SIMD_DATA_PROCESS\n * \\brief    SIMD 16-bit Packing Instructions\n * \\details\n * there are 4 SIMD16-bit Packing Instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC      Signed MSW 32x32 Multiply and Add Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_PART_SIMD_DATA_PROCESS\n * \\brief    Signed MSW 32x32 Multiply and Add Instructions\n * \\details\n *  there are 8 Signed MSW 32x32 Multiply and Add Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC      Signed MSW 32x16 Multiply and Add Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_PART_SIMD_DATA_PROCESS\n * \\brief    Signed MSW 32x16 Multiply and Add Instructions\n * \\details\n * there are 15 Signed MSW 32x16 Multiply and Add Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB      Signed 16-bit Multiply 32-bit Add/Subtract Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_PART_SIMD_DATA_PROCESS\n * \\brief    Signed 16-bit Multiply 32-bit Add/Subtract Instructions\n * \\details\n *  there are 18 Signed 16-bit Multiply 32-bit Add/Subtract Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB      Signed 16-bit Multiply 64-bit Add/Subtract Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_PART_SIMD_DATA_PROCESS\n * \\brief    Signed 16-bit Multiply 64-bit Add/Subtract Instructions\n * \\details\n *  there is Signed 16-bit Multiply 64-bit Add/Subtract Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_MISC      Partial-SIMD Miscellaneous Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_PART_SIMD_DATA_PROCESS\n * \\brief    Partial-SIMD Miscellaneous Instructions\n * \\details\n *  there are  7 Partial-SIMD Miscellaneous Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_8B_MULT_32B_ADD      8-bit Multiply with 32-bit Add Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_PART_SIMD_DATA_PROCESS\n * \\brief    8-bit Multiply with 32-bit Add Instructions\n * \\details\n * there are  3 8-bit Multiply with 32-bit Add Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_64B_PROFILE      64-bit Profile Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic\n * \\brief    64-bit Profile Instructions\n * \\details\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB      64-bit Addition & Subtraction Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_64B_PROFILE\n * \\brief    64-bit Addition & Subtraction Instructions\n * \\details\n * there are 10 64-bit Addition & Subtraction Instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB      32-bit Multiply with 64-bit Add/Subtract Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_64B_PROFILE\n * \\brief    32-bit Multiply with 64-bit Add/Subtract Instructions\n * \\details\n *  there are 32-bit Multiply 64-bit Add/Subtract Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB      Signed 16-bit Multiply with 64-bit Add/Subtract Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_64B_PROFILE\n * \\brief    Signed 16-bit Multiply with 64-bit Add/Subtract Instructions\n * \\details\n * there are 10 Signed 16-bit Multiply with 64-bit Add/Subtract Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_ONLY      RV64 Only Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic\n * \\brief    RV64 Only Instructions\n * \\details\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB      (RV64 Only) SIMD 32-bit Add/Subtract Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    (RV64 Only) SIMD 32-bit Add/Subtract Instructions\n * \\details\n * The following tables list instructions that are only present in RV64.\n * There are 30 SIMD 32-bit addition or subtraction instructions.there are 4 SIMD16-bit Packing Instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT      (RV64 Only) SIMD 32-bit Shift Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    (RV64 Only) SIMD 32-bit Shift Instructions\n * \\details\n *  there are 14 (RV64 Only) SIMD 32-bit Shift Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_MISC      (RV64 Only) SIMD 32-bit Miscellaneous Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    (RV64 Only) SIMD 32-bit Miscellaneous Instructions\n * \\details\n * there are 5  (RV64 Only) SIMD 32-bit Miscellaneous Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT      (RV64 Only) SIMD Q15 Saturating Multiply Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    (RV64 Only) SIMD Q15 Saturating Multiply Instructions\n * \\details\n *  there are 9 (RV64 Only) SIMD Q15 saturating Multiply Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_32B_MULT      (RV64 Only) 32-bit Multiply Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    (RV64 Only) 32-bit Multiply Instructions\n * \\details\n *  there is 3 RV64 Only) 32-bit Multiply Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_32B_MULT_ADD      (RV64 Only) 32-bit Multiply & Add Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    (RV64 Only) 32-bit Multiply & Add Instructions\n * \\details\n *  there are  3 (RV64 Only) 32-bit Multiply & Add Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC      (RV64 Only) 32-bit Parallel Multiply & Add Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    (RV64 Only) 32-bit Parallel Multiply & Add Instructions\n * \\details\n * there are 12 (RV64 Only) 32-bit Parallel Multiply & Add Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_NON_SIMD_32B_SHIFT      (RV64 Only) Non-SIMD 32-bit Shift Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    (RV64 Only) Non-SIMD 32-bit Shift Instructions\n * \\details\n *  there are 1  (RV64 Only) Non-SIMD 32-bit Shift Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PACK      32-bit Packing Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    32-bit Packing Instructions\n * \\details\n *  There are four 32-bit packing instructions here\n */\n\n/* ===== Inline Function Start for 3.1. ADD8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief ADD8 (SIMD 8-bit Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * ADD8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit integer element additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 8-bit integer elements in Rs1 with the 8-bit integer elements\n * in Rs2, and then writes the 8-bit element results to Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned addition.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = Rs1.B[x] + Rs2.B[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_ADD8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"add8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.1. ADD8 ===== */\n\n/* ===== Inline Function Start for 3.2. ADD16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief ADD16 (SIMD 16-bit Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * ADD16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit integer element additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit integer elements in Rs1 with the 16-bit integer\n * elements in Rs2, and then writes the 16-bit element results to Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned addition.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = Rs1.H[x] + Rs2.H[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_ADD16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"add16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.2. ADD16 ===== */\n\n/* ===== Inline Function Start for 3.3. ADD64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief ADD64 (64-bit Addition)\n * \\details\n * **Type**: 64-bit Profile\n *\n * **Syntax**:\\n\n * ~~~\n * ADD64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add two 64-bit signed or unsigned integers.\n *\n * **RV32 Description**:\\n\n * This instruction adds the 64-bit integer of an even/odd pair of registers specified\n * by Rs1(4,1) with the 64-bit integer of an even/odd pair of registers specified by Rs2(4,1), and then\n * writes the 64-bit result to an even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., value d, determines the even/odd pair group of two registers. Specifically, the register\n * pair includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction has the same behavior as the ADD instruction in RV64I.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned addition.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n *  t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n *  a_L = CONCAT(Rs1(4,1),1'b0); a_H = CONCAT(Rs1(4,1),1'b1);\n *  b_L = CONCAT(Rs2(4,1),1'b0); b_H = CONCAT(Rs2(4,1),1'b1);\n *  R[t_H].R[t_L] = R[a_H].R[a_L] + R[b_H].R[b_L];\n * RV64:\n *  Rd = Rs1 + Rs2;\n * ~~~\n *\n * \\param [in]  a    unsigned long long type of value stored in a\n * \\param [in]  b    unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_ADD64(unsigned long long a, unsigned long long b) {\n  register unsigned long long result;\n  __ASM volatile(\"add64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.3. ADD64 ===== */\n\n/* ===== Inline Function Start for 3.4. AVE ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief AVE (Average with Rounding)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * AVE Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Calculate the average of the contents of two general registers.\n *\n * **Description**:\\n\n * This instruction calculates the average value of two signed integers stored in Rs1 and\n * Rs2, rounds up a half-integer result to the nearest integer, and writes the result to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Sum = CONCAT(Rs1[MSB],Rs1[MSB:0]) + CONCAT(Rs2[MSB],Rs2[MSB:0]) + 1;\n * Rd = Sum[(MSB+1):1];\n * for RV32: MSB=31,\n * for RV64: MSB=63\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_AVE(long a, long b) {\n  register long result;\n  __ASM volatile(\"ave %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.4. AVE ===== */\n\n/* ===== Inline Function Start for 3.5. BITREV ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief BITREV (Bit Reverse)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * BITREV Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Reverse the bit positions of the source operand within a specified width starting from bit\n * 0. The reversed width is a variable from a GPR.\n *\n * **Description**:\\n\n * This instruction reverses the bit positions of the content of Rs1. The reversed bit width\n * is calculated as Rs2[4:0]+1 (RV32) or Rs2[5:0]+1 (RV64). The upper bits beyond the reversed width\n * are filled with zeros. After the bit reverse operation, the result is written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * msb = Rs2[4:0]; (for RV32)\n * msb = Rs2[5:0]; (for RV64)\n * rev[0:msb] = Rs1[msb:0];\n * Rd = ZE(rev[msb:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_BITREV(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"bitrev %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.5. BITREV ===== */\n\n/* ===== Inline Function Start for 3.6. BITREVI ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief BITREVI (Bit Reverse Immediate)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * (RV32) BITREVI Rd, Rs1, imm[4:0]\n * (RV64) BITREVI Rd, Rs1, imm[5:0]\n * ~~~\n *\n * **Purpose**:\\n\n * Reverse the bit positions of the source operand within a specified width starting from bit\n * 0. The reversed width is an immediate value.\n *\n * **Description**:\\n\n * This instruction reverses the bit positions of the content of Rs1. The reversed bit width\n * is calculated as imm[4:0]+1 (RV32) or imm[5:0]+1 (RV64). The upper bits beyond the reversed width\n * are filled with zeros. After the bit reverse operation, the result is written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * msb = imm[4:0]; (RV32)\n * msb = imm[5:0]; (RV64)\n * rev[0:msb] = Rs1[msb:0];\n * Rd = ZE(rev[msb:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_BITREVI(a, b)                                                  \\\n  ({                                                                        \\\n    register unsigned long result;                                          \\\n    register unsigned long __a = (unsigned long)(a);                        \\\n    __ASM volatile(\"bitrevi %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                 \\\n  })\n/* ===== Inline Function End for 3.6. BITREVI ===== */\n\n/* ===== Inline Function Start for 3.7. BPICK ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief BPICK (Bit-wise Pick)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * BPICK Rd, Rs1, Rs2, Rc\n * ~~~\n *\n * **Purpose**:\\n\n * Select from two source operands based on a bit mask in the third operand.\n *\n * **Description**:\\n\n * This instruction selects individual bits from Rs1 or Rs2, based on the bit mask value in\n * Rc. If a bit in Rc is 1, the corresponding bit is from Rs1; otherwise, the corresponding bit is from Rs2.\n * The selection results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd[x] = Rc[x]? Rs1[x] : Rs2[x];\n * for RV32, x=31...0\n * for RV64, x=63...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\param [in]  c    unsigned long type of value stored in c\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_BPICK(unsigned long a, unsigned long b, unsigned long c) {\n  register unsigned long result;\n  __ASM volatile(\"bpick %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(a), \"r\"(b), \"r\"(c));\n  return result;\n}\n/* ===== Inline Function End for 3.7. BPICK ===== */\n\n/* ===== Inline Function Start for 3.8. CLROV ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_OV_FLAG_SC\n * \\brief CLROV (Clear OV flag)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * CLROV # pseudo mnemonic\n * ~~~\n *\n * **Purpose**:\\n\n * This pseudo instruction is an alias to `CSRRCI x0, ucode, 1` instruction.\n *\n *\n */\n__STATIC_FORCEINLINE void __RV_CLROV(void) { __ASM volatile(\"clrov \"); }\n/* ===== Inline Function End for 3.8. CLROV ===== */\n\n/* ===== Inline Function Start for 3.9. CLRS8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief CLRS8 (SIMD 8-bit Count Leading Redundant Sign)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLRS8 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of redundant sign bits of the 8-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the bits next to the sign bits of the 8-bit elements of Rs1, this instruction\n * counts the number of redundant sign bits and writes the result to the corresponding 8-bit elements\n * of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.B[x];\n * cnt[x] = 0;\n * for (i = 6 to 0) {\n *   if (snum[x](i) == snum[x](7)) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.B[x] = cnt[x];\n * for RV32: x=3...0\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLRS8(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"clrs8 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.9. CLRS8 ===== */\n\n/* ===== Inline Function Start for 3.10. CLRS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief CLRS16 (SIMD 16-bit Count Leading Redundant Sign)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLRS16 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of redundant sign bits of the 16-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the bits next to the sign bits of the 16-bit elements of Rs1, this\n * instruction counts the number of redundant sign bits and writes the result to the corresponding 16-\n * bit elements of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.H[x];\n * cnt[x] = 0;\n * for (i = 14 to 0) {\n *   if (snum[x](i) == snum[x](15)) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.H[x] = cnt[x];\n * for RV32: x=1...0\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLRS16(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"clrs16 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.10. CLRS16 ===== */\n\n/* ===== Inline Function Start for 3.11. CLRS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_MISC\n * \\brief CLRS32 (SIMD 32-bit Count Leading Redundant Sign)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLRS32 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of redundant sign bits of the 32-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the bits next to the sign bits of the 32-bit elements of Rs1, this\n * instruction counts the number of redundant sign bits and writes the result to the corresponding 32-\n * bit elements of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.W[x];\n * cnt[x] = 0;\n * for (i = 30 to 0) {\n *   if (snum[x](i) == snum[x](31)) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.W[x] = cnt[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLRS32(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"clrs32 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.11. CLRS32 ===== */\n\n/* ===== Inline Function Start for 3.12. CLO8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief CLO8 (SIMD 8-bit Count Leading One)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLO8 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of leading one bits of the 8-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the most significant bits of the 8-bit elements of Rs1, this instruction\n * counts the number of leading one bits and writes the results to the corresponding 8-bit elements of\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.B[x];\n * cnt[x] = 0;\n *   for (i = 7 to 0) {\n *   if (snum[x](i) == 1) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.B[x] = cnt[x];\n * for RV32: x=3...0\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLO8(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"clo8 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.12. CLO8 ===== */\n\n/* ===== Inline Function Start for 3.13. CLO16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief CLO16 (SIMD 16-bit Count Leading One)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLO16 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of leading one bits of the 16-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the most significant bits of the 16-bit elements of Rs1, this instruction\n * counts the number of leading one bits and writes the results to the corresponding 16-bit elements\n * of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.H[x];\n * cnt[x] = 0;\n * for (i = 15 to 0) {\n *   if (snum[x](i) == 1) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.H[x] = cnt[x];\n * for RV32: x=1...0\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLO16(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"clo16 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.13. CLO16 ===== */\n\n/* ===== Inline Function Start for 3.14. CLO32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_MISC\n * \\brief CLO32 (SIMD 32-bit Count Leading One)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLO32 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of leading one bits of the 32-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the most significant bits of the 32-bit elements of Rs1, this instruction\n * counts the number of leading one bits and writes the results to the corresponding 32-bit elements\n * of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.W[x];\n * cnt[x] = 0;\n * for (i = 31 to 0) {\n *   if (snum[x](i) == 1) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.W[x] = cnt[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLO32(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"clo32 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.14. CLO32 ===== */\n\n/* ===== Inline Function Start for 3.15. CLZ8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief CLZ8 (SIMD 8-bit Count Leading Zero)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLZ8 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of leading zero bits of the 8-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the most significant bits of the 8-bit elements of Rs1, this instruction\n * counts the number of leading zero bits and writes the results to the corresponding 8-bit elements of\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.B[x];\n * cnt[x] = 0;\n * for (i = 7 to 0) {\n *   if (snum[x](i) == 0) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.B[x] = cnt[x];\n * for RV32: x=3...0\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLZ8(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"clz8 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.15. CLZ8 ===== */\n\n/* ===== Inline Function Start for 3.16. CLZ16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief CLZ16 (SIMD 16-bit Count Leading Zero)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLZ16 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of leading zero bits of the 16-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the most significant bits of the 16-bit elements of Rs1, this instruction\n * counts the number of leading zero bits and writes the results to the corresponding 16-bit elements\n * of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.H[x];\n * cnt[x] = 0;\n * for (i = 15 to 0) {\n *   if (snum[x](i) == 0) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.H[x] = cnt[x];\n * for RV32: x=1...0\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLZ16(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"clz16 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.16. CLZ16 ===== */\n\n/* ===== Inline Function Start for 3.17. CLZ32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_MISC\n * \\brief CLZ32 (SIMD 32-bit Count Leading Zero)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLZ32 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of leading zero bits of the 32-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the most significant bits of the 32-bit elements of Rs1, this instruction\n * counts the number of leading zero bits and writes the results to the corresponding 32-bit elements\n * of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.W[x];\n * cnt[x] = 0;\n * for (i = 31 to 0) {\n *   if (snum[x](i) == 0) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.W[x] = cnt[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLZ32(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"clz32 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.17. CLZ32 ===== */\n\n/* ===== Inline Function Start for 3.18. CMPEQ8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_CMP\n * \\brief CMPEQ8 (SIMD 8-bit Integer Compare Equal)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CMPEQ8 Rs, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit integer elements equal comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit integer elements in Rs1 with the 8-bit integer\n * elements in Rs2 to see if they are equal. If they are equal, the result is 0xFF; otherwise, the result is\n * 0x0. The 8-bit element comparison results are written to Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned numbers.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] == Rs2.B[x])? 0xff : 0x0;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CMPEQ8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"cmpeq8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.18. CMPEQ8 ===== */\n\n/* ===== Inline Function Start for 3.19. CMPEQ16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_CMP\n * \\brief CMPEQ16 (SIMD 16-bit Integer Compare Equal)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CMPEQ16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit integer elements equal comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit integer elements in Rs1 with the 16-bit integer\n * elements in Rs2 to see if they are equal. If they are equal, the result is 0xFFFF; otherwise, the result\n * is 0x0. The 16-bit element comparison results are written to Rt.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned numbers.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] == Rs2.H[x])? 0xffff : 0x0;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CMPEQ16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"cmpeq16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.19. CMPEQ16 ===== */\n\n/* ===== Inline Function Start for 3.20. CRAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief CRAS16 (SIMD 16-bit Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CRAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit integer element addition and 16-bit integer element subtraction in a 32-bit\n * chunk simultaneously. Operands are from crossed positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit integer element in [31:16] of 32-bit chunks in Rs1 with\n * the 16-bit integer element in [15:0] of 32-bit chunks in Rs2, and writes the result to [31:16] of 32-bit\n * chunks in Rd; at the same time, it subtracts the 16-bit integer element in [31:16] of 32-bit chunks in\n * Rs2 from the 16-bit integer element in [15:0] of 32-bit chunks, and writes the result to [15:0] of 32-\n * bit chunks in Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned operations.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = Rs1.W[x][31:16] + Rs2.W[x][15:0];\n * Rd.W[x][15:0] = Rs1.W[x][15:0] - Rs2.W[x][31:16];\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CRAS16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"cras16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.20. CRAS16 ===== */\n\n/* ===== Inline Function Start for 3.21. CRSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief CRSA16 (SIMD 16-bit Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CRSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit integer element subtraction and 16-bit integer element addition in a 32-bit\n * chunk simultaneously. Operands are from crossed positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit integer element in [15:0] of 32-bit chunks in Rs2\n * from the 16-bit integer element in [31:16] of 32-bit chunks in Rs1, and writes the result to [31:16] of\n * 32-bit chunks in Rd; at the same time, it adds the 16-bit integer element in [31:16] of 32-bit chunks\n * in Rs2 with the 16-bit integer element in [15:0] of 32-bit chunks in Rs1, and writes the result to\n * [15:0] of 32-bit chunks in Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned operations.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = Rs1.W[x][31:16] - Rs2.W[x][15:0];\n * Rd.W[x][15:0] = Rs1.W[x][15:0] + Rs2.W[x][31:16];\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CRSA16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"crsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.21. CRSA16 ===== */\n\n/* ===== Inline Function Start for 3.22. INSB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief INSB (Insert Byte)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * (RV32) INSB Rd, Rs1, imm[1:0]\n * (RV64) INSB Rd, Rs1, imm[2:0]\n * ~~~\n *\n * **Purpose**:\\n\n * Insert byte 0 of a 32-bit or 64-bit register into one of the byte elements of another register.\n *\n * **Description**:\\n\n * This instruction inserts byte 0 of Rs1 into byte `imm[1:0]` (RV32) or `imm[2:0]` (RV64)\n * of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * bpos = imm[1:0]; (RV32)\n * bpos = imm[2:0]; (RV64)\n * Rd.B[bpos] = Rs1.B[0]\n * ~~~\n *\n * \\param [in]  t    unsigned long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_INSB(t, a, b)                                            \\\n  ({                                                                  \\\n    register unsigned long __t = (unsigned long)(t);                  \\\n    register unsigned long __a = (unsigned long)(a);                  \\\n    __ASM volatile(\"insb %0, %1, %2\" : \"+r\"(__t) : \"r\"(__a), \"K\"(b)); \\\n    __t;                                                              \\\n  })\n/* ===== Inline Function End for 3.22. INSB ===== */\n\n/* ===== Inline Function Start for 3.23. KABS8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief KABS8 (SIMD 8-bit Saturating Absolute)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KABS8 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Get the absolute value of 8-bit signed integer elements simultaneously.\n *\n * **Description**:\\n\n * This instruction calculates the absolute value of 8-bit signed integer elements stored\n * in Rs1 and writes the element results to Rd. If the input number is 0x80, this instruction generates\n * 0x7f as the output and sets the OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.B[x];\n * if (src == 0x80) {\n *   src = 0x7f;\n *   OV = 1;\n * } else if (src[7] == 1)\n *   src = -src;\n * }\n * Rd.B[x] = src;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KABS8(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"kabs8 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.23. KABS8 ===== */\n\n/* ===== Inline Function Start for 3.24. KABS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief KABS16 (SIMD 16-bit Saturating Absolute)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KABS16 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Get the absolute value of 16-bit signed integer elements simultaneously.\n *\n * **Description**:\\n\n * This instruction calculates the absolute value of 16-bit signed integer elements stored\n * in Rs1 and writes the element results to Rd. If the input number is 0x8000, this instruction\n * generates 0x7fff as the output and sets the OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.H[x];\n * if (src == 0x8000) {\n *   src = 0x7fff;\n *   OV = 1;\n * } else if (src[15] == 1)\n *   src = -src;\n * }\n * Rd.H[x] = src;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KABS16(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"kabs16 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.24. KABS16 ===== */\n\n/* ===== Inline Function Start for 3.25. KABSW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KABSW (Scalar 32-bit Absolute Value with Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KABSW Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Get the absolute value of a signed 32-bit integer in a general register.\n *\n * **Description**:\\n\n * This instruction calculates the absolute value of a signed 32-bit integer stored in Rs1.\n * The result is sign-extended (for RV64) and written to Rd. This instruction with the minimum\n * negative integer input of 0x80000000 will produce a saturated output of maximum positive integer\n * of 0x7fffffff and the OV flag will be set to 1.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs1.W[0] >= 0) {\n *   res = Rs1.W[0];\n * } else {\n *   If (Rs1.W[0] == 0x80000000) {\n *     res = 0x7fffffff;\n *     OV = 1;\n *   } else {\n *     res = -Rs1.W[0];\n *   }\n * }\n * Rd = SE32(res);\n * ~~~\n *\n * \\param [in]  a    signed long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KABSW(signed long a) {\n  register unsigned long result;\n  __ASM volatile(\"kabsw %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.25. KABSW ===== */\n\n/* ===== Inline Function Start for 3.26. KADD8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief KADD8 (SIMD 8-bit Signed Saturating Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KADD8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed integer element saturating additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 8-bit signed integer elements in Rs1 with the 8-bit signed\n * integer elements in Rs2. If any of the results are beyond the Q7 number range (-2^7 <= Q7 <= 2^7-1), they\n * are saturated to the range and the OV bit is set to 1. The saturated results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.B[x] + Rs2.B[x];\n * if (res[x] > 127) {\n *   res[x] = 127;\n *   OV = 1;\n * } else if (res[x] < -128) {\n *   res[x] = -128;\n *   OV = 1;\n * }\n * Rd.B[x] = res[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KADD8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"kadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.26. KADD8 ===== */\n\n/* ===== Inline Function Start for 3.27. KADD16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief KADD16 (SIMD 16-bit Signed Saturating Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KADD16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element saturating additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit signed integer elements in Rs1 with the 16-bit signed\n * integer elements in Rs2. If any of the results are beyond the Q15 number range (-2^15 <= Q15 <= 2^15-1),\n * they are saturated to the range and the OV bit is set to 1. The saturated results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.H[x] + Rs2.H[x];\n * if (res[x] > 32767) {\n *   res[x] = 32767;\n *   OV = 1;\n * } else if (res[x] < -32768) {\n *   res[x] = -32768;\n *   OV = 1;\n * }\n * Rd.H[x] = res[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KADD16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"kadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.27. KADD16 ===== */\n\n/* ===== Inline Function Start for 3.28. KADD64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief KADD64 (64-bit Signed Saturating Addition)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * KADD64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add two 64-bit signed integers. The result is saturated to the Q63 range.\n *\n * **RV32 Description**:\\n\n * This instruction adds the 64-bit signed integer of an even/odd pair of registers\n * specified by Rs1(4,1) with the 64-bit signed integer of an even/odd pair of registers specified by\n * Rs2(4,1). If the 64-bit result is beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the\n * range and the OV bit is set to 1. The saturated result is written to an even/odd pair of registers\n * specified by Rd(4,1).\n * Rx(4,1), i.e., value d, determines the even/odd pair group of two registers. Specifically, the register\n * pair includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction adds the 64-bit signed integer in Rs1 with the 64-bit signed\n * integer in Rs2. If the result is beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the\n * range and the OV bit is set to 1. The saturated result is written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n *  t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n *  a_L = CONCAT(Rs1(4,1),1'b0); a_H = CONCAT(Rs1(4,1),1'b1);\n *  b_L = CONCAT(Rs2(4,1),1'b0); b_H = CONCAT(Rs2(4,1),1'b1);\n *  result = R[a_H].R[a_L] + R[b_H].R[b_L];\n *  if (result > (2^63)-1) {\n *    result = (2^63)-1; OV = 1;\n *  } else if (result < -2^63) {\n *    result = -2^63; OV = 1;\n *  }\n *  R[t_H].R[t_L] = result;\n * RV64:\n *  result = Rs1 + Rs2;\n *  if (result > (2^63)-1) {\n *    result = (2^63)-1; OV = 1;\n *  } else if (result < -2^63) {\n *    result = -2^63; OV = 1;\n *  }\n *  Rd = result;\n * ~~~\n *\n * \\param [in]  a    long long type of value stored in a\n * \\param [in]  b    long long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_KADD64(long long a, long long b) {\n  register long long result;\n  __ASM volatile(\"kadd64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.28. KADD64 ===== */\n\n/* ===== Inline Function Start for 3.29. KADDH ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q15_SAT_ALU\n * \\brief KADDH (Signed Addition with Q15 Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KADDH Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add the signed lower 32-bit content of two registers with Q15 saturation.\n *\n * **Description**:\\n\n * The signed lower 32-bit content of Rs1 is added with the signed lower 32-bit content of\n * Rs2. And the result is saturated to the 16-bit signed integer range of [-2^15, 2^15-1] and then sign-\n * extended and written to Rd. If saturation happens, this instruction sets the OV flag.\n *\n * **Operations**:\\n\n * ~~~\n * tmp = Rs1.W[0] + Rs2.W[0];\n * if (tmp > 32767) {\n *   res = 32767;\n *   OV = 1;\n * } else if (tmp < -32768) {\n *   res = -32768;\n *   OV = 1\n * } else {\n *   res = tmp;\n * }\n * Rd = SE(tmp[15:0]);\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KADDH(int a, int b) {\n  register long result;\n  __ASM volatile(\"kaddh %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.29. KADDH ===== */\n\n/* ===== Inline Function Start for 3.30. KADDW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KADDW (Signed Addition with Q31 Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KADDW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add the lower 32-bit signed content of two registers with Q31 saturation.\n *\n * **Description**:\\n\n * The lower 32-bit signed content of Rs1 is added with the lower 32-bit signed content of\n * Rs2. And the result is saturated to the 32-bit signed integer range of [-2^31, 2^31-1] and then sign-\n * extended and written to Rd. If saturation happens, this instruction sets the OV flag.\n *\n * **Operations**:\\n\n * ~~~\n * tmp = Rs1.W[0] + Rs2.W[0];\n * if (tmp > (2^31)-1) {\n *   res = (2^31)-1;\n *   OV = 1;\n * } else if (tmp < -2^31) {\n *   res = -2^31;\n *   OV = 1\n * } else {\n *   res = tmp;\n * }\n * Rd = res[31:0]; // RV32\n * Rd = SE(res[31:0]) // RV64\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KADDW(int a, int b) {\n  register long result;\n  __ASM volatile(\"kaddw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.30. KADDW ===== */\n\n/* ===== Inline Function Start for 3.31. KCRAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief KCRAS16 (SIMD 16-bit Signed Saturating Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KCRAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element saturating addition and 16-bit signed integer element\n * saturating subtraction in a 32-bit chunk simultaneously. Operands are from crossed positions in 32-\n * bit chunks.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit signed integer element in [31:16] of 32-bit chunks in\n * Rs1 with the 16-bit signed integer element in [15:0] of 32-bit chunks in Rs2; at the same time, it\n * subtracts the 16-bit signed integer element in [31:16] of 32-bit chunks in Rs2 from the 16-bit signed\n * integer element in [15:0] of 32-bit chunks in Rs1. If any of the results are beyond the Q15 number\n * range (-2^15 <= Q15 <= 2^15-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to [31:16] of 32-bit chunks in Rd for addition and [15:0] of 32-bit chunks in Rd for\n * subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[x][31:16] + Rs2.W[x][15:0];\n * res2 = Rs1.W[x][15:0] - Rs2.W[x][31:16];\n * for (res in [res1, res2]) {\n *   if (res > (2^15)-1) {\n *     res = (2^15)-1;\n *     OV = 1;\n *   } else if (res < -2^15) {\n *     res = -2^15;\n *     OV = 1;\n *   }\n * }\n * Rd.W[x][31:16] = res1;\n * Rd.W[x][15:0] = res2;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KCRAS16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"kcras16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.31. KCRAS16 ===== */\n\n/* ===== Inline Function Start for 3.32. KCRSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief KCRSA16 (SIMD 16-bit Signed Saturating Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KCRSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element saturating subtraction and 16-bit signed integer element\n * saturating addition in a 32-bit chunk simultaneously. Operands are from crossed positions in 32-bit\n * chunks.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit signed integer element in [15:0] of 32-bit chunks\n * in Rs2 from the 16-bit signed integer element in [31:16] of 32-bit chunks in Rs1; at the same time, it\n * adds the 16-bit signed integer element in [31:16] of 32-bit chunks in Rs2 with the 16-bit signed\n * integer element in [15:0] of 32-bit chunks in Rs1. If any of the results are beyond the Q15 number\n * range (-2^15 <= Q15 <= 2^15-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to [31:16] of 32-bit chunks in Rd for subtraction and [15:0] of 32-bit chunks in Rd\n * for addition.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[x][31:16] - Rs2.W[x][15:0];\n * res2 = Rs1.W[x][15:0] + Rs2.W[x][31:16];\n * for (res in [res1, res2]) {\n *   if (res > (2^15)-1) {\n *     res = (2^15)-1;\n *     OV = 1;\n *   } else if (res < -2^15) {\n *     res = -2^15;\n *     OV = 1;\n *   }\n * }\n * Rd.W[x][31:16] = res1;\n * Rd.W[x][15:0] = res2;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KCRSA16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"kcrsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.32. KCRSA16 ===== */\n\n/* ===== Inline Function Start for 3.33.1. KDMBB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KDMBB (Signed Saturating Double Multiply B16 x B16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KDMxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then double and saturate the Q31 result. The result is\n * written into the destination register for RV32 or sign-extended to 64-bits and written into the\n * destination register for RV64. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then\n * doubled and saturated into a Q31 value. The Q31 value is then written into Rd (sign-extended in\n * RV64). When both the two Q15 inputs are 0x8000, saturation will happen. The result will be\n * saturated to 0x7FFFFFFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KDMBB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KDMBT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KDMTT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult = aop * bop;\n *   resQ31 = Mresult << 1;\n *   Rd = resQ31; // RV32\n *   Rd = SE(resQ31); // RV64\n * } else {\n *   resQ31 = 0x7FFFFFFF;\n *   Rd = resQ31; // RV32\n *   Rd = SE(resQ31); // RV64\n *   OV = 1;\n * }\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KDMBB(unsigned int a, unsigned int b) {\n  register long result;\n  __ASM volatile(\"kdmbb %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.33.1. KDMBB ===== */\n\n/* ===== Inline Function Start for 3.33.2. KDMBT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KDMBT (Signed Saturating Double Multiply B16 x T16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KDMxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then double and saturate the Q31 result. The result is\n * written into the destination register for RV32 or sign-extended to 64-bits and written into the\n * destination register for RV64. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then\n * doubled and saturated into a Q31 value. The Q31 value is then written into Rd (sign-extended in\n * RV64). When both the two Q15 inputs are 0x8000, saturation will happen. The result will be\n * saturated to 0x7FFFFFFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KDMBB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KDMBT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KDMTT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult = aop * bop;\n *   resQ31 = Mresult << 1;\n *   Rd = resQ31; // RV32\n *   Rd = SE(resQ31); // RV64\n * } else {\n *   resQ31 = 0x7FFFFFFF;\n *   Rd = resQ31; // RV32\n *   Rd = SE(resQ31); // RV64\n *   OV = 1;\n * }\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KDMBT(unsigned int a, unsigned int b) {\n  register long result;\n  __ASM volatile(\"kdmbt %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.33.2. KDMBT ===== */\n\n/* ===== Inline Function Start for 3.33.3. KDMTT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KDMTT (Signed Saturating Double Multiply T16 x T16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KDMxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then double and saturate the Q31 result. The result is\n * written into the destination register for RV32 or sign-extended to 64-bits and written into the\n * destination register for RV64. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then\n * doubled and saturated into a Q31 value. The Q31 value is then written into Rd (sign-extended in\n * RV64). When both the two Q15 inputs are 0x8000, saturation will happen. The result will be\n * saturated to 0x7FFFFFFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KDMBB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KDMBT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KDMTT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult = aop * bop;\n *   resQ31 = Mresult << 1;\n *   Rd = resQ31; // RV32\n *   Rd = SE(resQ31); // RV64\n * } else {\n *   resQ31 = 0x7FFFFFFF;\n *   Rd = resQ31; // RV32\n *   Rd = SE(resQ31); // RV64\n *   OV = 1;\n * }\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KDMTT(unsigned int a, unsigned int b) {\n  register long result;\n  __ASM volatile(\"kdmtt %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.33.3. KDMTT ===== */\n\n/* ===== Inline Function Start for 3.34.1. KDMABB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KDMABB (Signed Saturating Double Multiply Addition B16 x B16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KDMAxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then double and saturate the Q31 result, add the result\n * with the sign-extended lower 32-bit chunk destination register and write the saturated addition\n * result into the destination register. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then\n * doubled and saturated into a Q31 value. The Q31 value is then added with the content of Rd. If the\n * addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and\n * the OV flag is set to 1. The result after saturation is written to Rd.\n * When both the two Q15 inputs are 0x8000, saturation will happen and the overflow flag OV will be\n * set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KDMABB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KDMABT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KDMATT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult = aop * bop;\n *   resQ31 = Mresult << 1;\n * } else {\n *   resQ31 = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * resadd = Rd + resQ31; // RV32\n * resadd = Rd.W[0] + resQ31; // RV64\n * if (resadd > (2^31)-1) {\n *   resadd = (2^31)-1;\n *   OV = 1;\n * } else if (resadd < -2^31) {\n *   resadd = -2^31;\n *   OV = 1;\n * }\n * Rd = resadd; // RV32\n * Rd = SE(resadd); // RV64\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KDMABB(long t, unsigned int a, unsigned int b) {\n  __ASM volatile(\"kdmabb %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.34.1. KDMABB ===== */\n\n/* ===== Inline Function Start for 3.34.2. KDMABT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KDMABT (Signed Saturating Double Multiply Addition B16 x T16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KDMAxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then double and saturate the Q31 result, add the result\n * with the sign-extended lower 32-bit chunk destination register and write the saturated addition\n * result into the destination register. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then\n * doubled and saturated into a Q31 value. The Q31 value is then added with the content of Rd. If the\n * addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and\n * the OV flag is set to 1. The result after saturation is written to Rd.\n * When both the two Q15 inputs are 0x8000, saturation will happen and the overflow flag OV will be\n * set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KDMABB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KDMABT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KDMATT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult = aop * bop;\n *   resQ31 = Mresult << 1;\n * } else {\n *   resQ31 = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * resadd = Rd + resQ31; // RV32\n * resadd = Rd.W[0] + resQ31; // RV64\n * if (resadd > (2^31)-1) {\n *   resadd = (2^31)-1;\n *   OV = 1;\n * } else if (resadd < -2^31) {\n *   resadd = -2^31;\n *   OV = 1;\n * }\n * Rd = resadd; // RV32\n * Rd = SE(resadd); // RV64\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KDMABT(long t, unsigned int a, unsigned int b) {\n  __ASM volatile(\"kdmabt %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.34.2. KDMABT ===== */\n\n/* ===== Inline Function Start for 3.34.3. KDMATT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KDMATT (Signed Saturating Double Multiply Addition T16 x T16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KDMAxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then double and saturate the Q31 result, add the result\n * with the sign-extended lower 32-bit chunk destination register and write the saturated addition\n * result into the destination register. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then\n * doubled and saturated into a Q31 value. The Q31 value is then added with the content of Rd. If the\n * addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and\n * the OV flag is set to 1. The result after saturation is written to Rd.\n * When both the two Q15 inputs are 0x8000, saturation will happen and the overflow flag OV will be\n * set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KDMABB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KDMABT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KDMATT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult = aop * bop;\n *   resQ31 = Mresult << 1;\n * } else {\n *   resQ31 = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * resadd = Rd + resQ31; // RV32\n * resadd = Rd.W[0] + resQ31; // RV64\n * if (resadd > (2^31)-1) {\n *   resadd = (2^31)-1;\n *   OV = 1;\n * } else if (resadd < -2^31) {\n *   resadd = -2^31;\n *   OV = 1;\n * }\n * Rd = resadd; // RV32\n * Rd = SE(resadd); // RV64\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KDMATT(long t, unsigned int a, unsigned int b) {\n  __ASM volatile(\"kdmatt %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.34.3. KDMATT ===== */\n\n/* ===== Inline Function Start for 3.35.1. KHM8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MULTIPLY\n * \\brief KHM8 (SIMD Signed Saturating Q7 Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KHM8 Rd, Rs1, Rs2\n * KHMX8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do Q7xQ7 element multiplications simultaneously. The Q14 results are then reduced to Q7\n * numbers again.\n *\n * **Description**:\\n\n * For the `KHM8` instruction, multiply the top 8-bit Q7 content of 16-bit chunks in Rs1\n * with the top 8-bit Q7 content of 16-bit chunks in Rs2. At the same time, multiply the bottom 8-bit Q7\n * content of 16-bit chunks in Rs1 with the bottom 8-bit Q7 content of 16-bit chunks in Rs2.\n * For the `KHMX16` instruction, multiply the top 8-bit Q7 content of 16-bit chunks in Rs1 with the\n * bottom 8-bit Q7 content of 16-bit chunks in Rs2. At the same time, multiply the bottom 8-bit Q7\n * content of 16-bit chunks in Rs1 with the top 8-bit Q7 content of 16-bit chunks in Rs2.\n * The Q14 results are then right-shifted 7-bits and saturated into Q7 values. The Q7 results are then\n * written into Rd. When both the two Q7 inputs of a multiplication are 0x80, saturation will happen.\n * The result will be saturated to 0x7F and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * if (is `KHM8`) {\n *   op1t = Rs1.B[x+1]; op2t = Rs2.B[x+1]; // top\n *   op1b = Rs1.B[x]; op2b = Rs2.B[x]; // bottom\n * } else if (is `KHMX8`) {\n *   op1t = Rs1.H[x+1]; op2t = Rs2.H[x]; // Rs1 top\n *   op1b = Rs1.H[x]; op2b = Rs2.H[x+1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   if (0x80 != aop | 0x80 != bop) {\n *     res = (aop s* bop) >> 7;\n *   } else {\n *     res= 0x7F;\n *     OV = 1;\n *   }\n * }\n * Rd.H[x/2] = concat(rest, resb);\n * for RV32, x=0,2\n * for RV64, x=0,2,4,6\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KHM8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"khm8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.35.1. KHM8 ===== */\n\n/* ===== Inline Function Start for 3.35.2. KHMX8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MULTIPLY\n * \\brief KHMX8 (SIMD Signed Saturating Crossed Q7 Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KHM8 Rd, Rs1, Rs2\n * KHMX8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do Q7xQ7 element multiplications simultaneously. The Q14 results are then reduced to Q7\n * numbers again.\n *\n * **Description**:\\n\n * For the `KHM8` instruction, multiply the top 8-bit Q7 content of 16-bit chunks in Rs1\n * with the top 8-bit Q7 content of 16-bit chunks in Rs2. At the same time, multiply the bottom 8-bit Q7\n * content of 16-bit chunks in Rs1 with the bottom 8-bit Q7 content of 16-bit chunks in Rs2.\n * For the `KHMX16` instruction, multiply the top 8-bit Q7 content of 16-bit chunks in Rs1 with the\n * bottom 8-bit Q7 content of 16-bit chunks in Rs2. At the same time, multiply the bottom 8-bit Q7\n * content of 16-bit chunks in Rs1 with the top 8-bit Q7 content of 16-bit chunks in Rs2.\n * The Q14 results are then right-shifted 7-bits and saturated into Q7 values. The Q7 results are then\n * written into Rd. When both the two Q7 inputs of a multiplication are 0x80, saturation will happen.\n * The result will be saturated to 0x7F and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * if (is `KHM8`) {\n *   op1t = Rs1.B[x+1]; op2t = Rs2.B[x+1]; // top\n *   op1b = Rs1.B[x]; op2b = Rs2.B[x]; // bottom\n * } else if (is `KHMX8`) {\n *   op1t = Rs1.H[x+1]; op2t = Rs2.H[x]; // Rs1 top\n *   op1b = Rs1.H[x]; op2b = Rs2.H[x+1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   if (0x80 != aop | 0x80 != bop) {\n *     res = (aop s* bop) >> 7;\n *   } else {\n *     res= 0x7F;\n *     OV = 1;\n *   }\n * }\n * Rd.H[x/2] = concat(rest, resb);\n * for RV32, x=0,2\n * for RV64, x=0,2,4,6\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KHMX8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"khmx8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.35.2. KHMX8 ===== */\n\n/* ===== Inline Function Start for 3.36.1. KHM16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MULTIPLY\n * \\brief KHM16 (SIMD Signed Saturating Q15 Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KHM16 Rd, Rs1, Rs2\n * KHMX16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do Q15xQ15 element multiplications simultaneously. The Q30 results are then reduced to\n * Q15 numbers again.\n *\n * **Description**:\\n\n * For the `KHM16` instruction, multiply the top 16-bit Q15 content of 32-bit chunks in\n * Rs1 with the top 16-bit Q15 content of 32-bit chunks in Rs2. At the same time, multiply the bottom\n * 16-bit Q15 content of 32-bit chunks in Rs1 with the bottom 16-bit Q15 content of 32-bit chunks in\n * Rs2.\n * For the `KHMX16` instruction, multiply the top 16-bit Q15 content of 32-bit chunks in Rs1 with the\n * bottom 16-bit Q15 content of 32-bit chunks in Rs2. At the same time, multiply the bottom 16-bit Q15\n * content of 32-bit chunks in Rs1 with the top 16-bit Q15 content of 32-bit chunks in Rs2.\n * The Q30 results are then right-shifted 15-bits and saturated into Q15 values. The Q15 results are\n * then written into Rd. When both the two Q15 inputs of a multiplication are 0x8000, saturation will\n * happen. The result will be saturated to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * if (is `KHM16`) {\n *   op1t = Rs1.H[x+1]; op2t = Rs2.H[x+1]; // top\n *   op1b = Rs1.H[x]; op2b = Rs2.H[x]; // bottom\n * } else if (is `KHMX16`) {\n *   op1t = Rs1.H[x+1]; op2t = Rs2.H[x]; // Rs1 top\n *   op1b = Rs1.H[x]; op2b = Rs2.H[x+1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   if (0x8000 != aop | 0x8000 != bop) {\n *     res = (aop s* bop) >> 15;\n *   } else {\n *     res= 0x7FFF;\n *     OV = 1;\n *   }\n * }\n * Rd.W[x/2] = concat(rest, resb);\n * for RV32: x=0\n * for RV64: x=0,2\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KHM16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"khm16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.36.1. KHM16 ===== */\n\n/* ===== Inline Function Start for 3.36.2. KHMX16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MULTIPLY\n * \\brief KHMX16 (SIMD Signed Saturating Crossed Q15 Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KHM16 Rd, Rs1, Rs2\n * KHMX16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do Q15xQ15 element multiplications simultaneously. The Q30 results are then reduced to\n * Q15 numbers again.\n *\n * **Description**:\\n\n * For the `KHM16` instruction, multiply the top 16-bit Q15 content of 32-bit chunks in\n * Rs1 with the top 16-bit Q15 content of 32-bit chunks in Rs2. At the same time, multiply the bottom\n * 16-bit Q15 content of 32-bit chunks in Rs1 with the bottom 16-bit Q15 content of 32-bit chunks in\n * Rs2.\n * For the `KHMX16` instruction, multiply the top 16-bit Q15 content of 32-bit chunks in Rs1 with the\n * bottom 16-bit Q15 content of 32-bit chunks in Rs2. At the same time, multiply the bottom 16-bit Q15\n * content of 32-bit chunks in Rs1 with the top 16-bit Q15 content of 32-bit chunks in Rs2.\n * The Q30 results are then right-shifted 15-bits and saturated into Q15 values. The Q15 results are\n * then written into Rd. When both the two Q15 inputs of a multiplication are 0x8000, saturation will\n * happen. The result will be saturated to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * if (is `KHM16`) {\n *   op1t = Rs1.H[x+1]; op2t = Rs2.H[x+1]; // top\n *   op1b = Rs1.H[x]; op2b = Rs2.H[x]; // bottom\n * } else if (is `KHMX16`) {\n *   op1t = Rs1.H[x+1]; op2t = Rs2.H[x]; // Rs1 top\n *   op1b = Rs1.H[x]; op2b = Rs2.H[x+1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   if (0x8000 != aop | 0x8000 != bop) {\n *     res = (aop s* bop) >> 15;\n *   } else {\n *     res= 0x7FFF;\n *     OV = 1;\n *   }\n * }\n * Rd.W[x/2] = concat(rest, resb);\n * for RV32: x=0\n * for RV64: x=0,2\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KHMX16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"khmx16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.36.2. KHMX16 ===== */\n\n/* ===== Inline Function Start for 3.37.1. KHMBB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q15_SAT_ALU\n * \\brief KHMBB (Signed Saturating Half Multiply B16 x B16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KHMxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 number contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then right-shift 15 bits to turn the Q30 result into a Q15\n * number again and saturate the Q15 result into the destination register. If saturation happens, an\n * overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then right-\n * shifted 15-bits and saturated into a Q15 value. The Q15 value is then sing-extended and written into\n * Rd. When both the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated\n * to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KHMBB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KHMBT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KHMTT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult[31:0] = aop * bop;\n *   res[15:0] = Mresult[30:15];\n * } else {\n *   res[15:0] = 0x7FFF;\n *   OV = 1;\n * }\n * Rd = SE32(res[15:0]); // Rv32\n * Rd = SE64(res[15:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KHMBB(unsigned int a, unsigned int b) {\n  register long result;\n  __ASM volatile(\"khmbb %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.37.1. KHMBB ===== */\n\n/* ===== Inline Function Start for 3.37.2. KHMBT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q15_SAT_ALU\n * \\brief KHMBT (Signed Saturating Half Multiply B16 x T16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KHMxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 number contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then right-shift 15 bits to turn the Q30 result into a Q15\n * number again and saturate the Q15 result into the destination register. If saturation happens, an\n * overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then right-\n * shifted 15-bits and saturated into a Q15 value. The Q15 value is then sing-extended and written into\n * Rd. When both the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated\n * to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KHMBB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KHMBT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KHMTT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult[31:0] = aop * bop;\n *   res[15:0] = Mresult[30:15];\n * } else {\n *   res[15:0] = 0x7FFF;\n *   OV = 1;\n * }\n * Rd = SE32(res[15:0]); // Rv32\n * Rd = SE64(res[15:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KHMBT(unsigned int a, unsigned int b) {\n  register long result;\n  __ASM volatile(\"khmbt %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.37.2. KHMBT ===== */\n\n/* ===== Inline Function Start for 3.37.3. KHMTT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q15_SAT_ALU\n * \\brief KHMTT (Signed Saturating Half Multiply T16 x T16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KHMxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 number contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then right-shift 15 bits to turn the Q30 result into a Q15\n * number again and saturate the Q15 result into the destination register. If saturation happens, an\n * overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then right-\n * shifted 15-bits and saturated into a Q15 value. The Q15 value is then sing-extended and written into\n * Rd. When both the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated\n * to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KHMBB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KHMBT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KHMTT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult[31:0] = aop * bop;\n *   res[15:0] = Mresult[30:15];\n * } else {\n *   res[15:0] = 0x7FFF;\n *   OV = 1;\n * }\n * Rd = SE32(res[15:0]); // Rv32\n * Rd = SE64(res[15:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KHMTT(unsigned int a, unsigned int b) {\n  register long result;\n  __ASM volatile(\"khmtt %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.37.3. KHMTT ===== */\n\n/* ===== Inline Function Start for 3.38.1. KMABB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMABB (SIMD Saturating Signed Multiply Bottom Halfs & Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMABB Rd, Rs1, Rs2\n * KMABT Rd, Rs1, Rs2\n * KMATT Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of 32-bit elements in a register with the 16-bit content\n * of 32-bit elements in another register and add the result to the content of 32-bit elements in the\n * third register. The addition result may be saturated and is written to the third register.\n * * KMABB: rd.W[x] + bottom*bottom (per 32-bit element)\n * * KMABT rd.W[x] + bottom*top (per 32-bit element)\n * * KMATT rd.W[x] + top*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMABB` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the bottom 16-bit content of 32-bit elements in Rs2.\n * For the `KMABT` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the top 16-bit content of 32-bit elements in Rs2.\n * For the `KMATT` instruction, it multiplies the top 16-bit content of 32-bit elements in Rs1 with the\n * top 16-bit content of 32-bit elements in Rs2.\n * The multiplication result is added to the content of 32-bit elements in Rd. If the addition result is\n * beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to\n * 1. The results after saturation are written to Rd. The 16-bit contents of Rs1 and Rs2 are treated as\n * signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[0]); // KMABB\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[1]); // KMABT\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[1]); // KMATT\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMABB(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmabb %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.38.1. KMABB ===== */\n\n/* ===== Inline Function Start for 3.38.2. KMABT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMABT (SIMD Saturating Signed Multiply Bottom & Top Halfs & Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMABB Rd, Rs1, Rs2\n * KMABT Rd, Rs1, Rs2\n * KMATT Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of 32-bit elements in a register with the 16-bit content\n * of 32-bit elements in another register and add the result to the content of 32-bit elements in the\n * third register. The addition result may be saturated and is written to the third register.\n * * KMABB: rd.W[x] + bottom*bottom (per 32-bit element)\n * * KMABT rd.W[x] + bottom*top (per 32-bit element)\n * * KMATT rd.W[x] + top*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMABB` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the bottom 16-bit content of 32-bit elements in Rs2.\n * For the `KMABT` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the top 16-bit content of 32-bit elements in Rs2.\n * For the `KMATT` instruction, it multiplies the top 16-bit content of 32-bit elements in Rs1 with the\n * top 16-bit content of 32-bit elements in Rs2.\n * The multiplication result is added to the content of 32-bit elements in Rd. If the addition result is\n * beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to\n * 1. The results after saturation are written to Rd. The 16-bit contents of Rs1 and Rs2 are treated as\n * signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[0]); // KMABB\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[1]); // KMABT\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[1]); // KMATT\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMABT(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmabt %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.38.2. KMABT ===== */\n\n/* ===== Inline Function Start for 3.38.3. KMATT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMATT (SIMD Saturating Signed Multiply Top Halfs & Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMABB Rd, Rs1, Rs2\n * KMABT Rd, Rs1, Rs2\n * KMATT Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of 32-bit elements in a register with the 16-bit content\n * of 32-bit elements in another register and add the result to the content of 32-bit elements in the\n * third register. The addition result may be saturated and is written to the third register.\n * * KMABB: rd.W[x] + bottom*bottom (per 32-bit element)\n * * KMABT rd.W[x] + bottom*top (per 32-bit element)\n * * KMATT rd.W[x] + top*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMABB` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the bottom 16-bit content of 32-bit elements in Rs2.\n * For the `KMABT` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the top 16-bit content of 32-bit elements in Rs2.\n * For the `KMATT` instruction, it multiplies the top 16-bit content of 32-bit elements in Rs1 with the\n * top 16-bit content of 32-bit elements in Rs2.\n * The multiplication result is added to the content of 32-bit elements in Rd. If the addition result is\n * beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to\n * 1. The results after saturation are written to Rd. The 16-bit contents of Rs1 and Rs2 are treated as\n * signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[0]); // KMABB\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[1]); // KMABT\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[1]); // KMATT\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMATT(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmatt %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.38.3. KMATT ===== */\n\n/* ===== Inline Function Start for 3.39.1. KMADA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMADA (SIMD Saturating Signed Multiply Two Halfs and Two Adds)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMADA Rd, Rs1, Rs2\n * KMAXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from 32-bit elements in two registers; and then adds\n * the two 32-bit results and 32-bit elements in a third register together. The addition result may be\n * saturated.\n * * KMADA: rd.W[x] + top*top + bottom*bottom (per 32-bit element)\n * * KMAXDA: rd.W[x] + top*bottom + bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMADA instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the bottom 16-bit content of 32-bit elements in Rs2 and then adds the result to the result of\n * multiplying the top 16-bit content of 32-bit elements in Rs1 with the top 16-bit content of 32-bit\n * elements in Rs2.\n * For the `KMAXDA` instruction, it multiplies the top 16-bit content of 32-bit elements in Rs1 with the\n * bottom 16-bit content of 32-bit elements in Rs2 and then adds the result to the result of multiplying\n * the bottom 16-bit content of 32-bit elements in Rs1 with the top 16-bit content of 32-bit elements in\n * Rs2.\n * The result is added to the content of 32-bit elements in Rd. If the addition result is beyond the Q31\n * number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to 1. The 32-bit\n * results after saturation are written to Rd. The 16-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * // KMADA\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[1]) + (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * // KMAXDA\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[0]) + (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n * OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMADA(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmada %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.39.1. KMADA ===== */\n\n/* ===== Inline Function Start for 3.39.2. KMAXDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMAXDA (SIMD Saturating Signed Crossed Multiply Two Halfs and Two Adds)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMADA Rd, Rs1, Rs2\n * KMAXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from 32-bit elements in two registers; and then adds\n * the two 32-bit results and 32-bit elements in a third register together. The addition result may be\n * saturated.\n * * KMADA: rd.W[x] + top*top + bottom*bottom (per 32-bit element)\n * * KMAXDA: rd.W[x] + top*bottom + bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMADA instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the bottom 16-bit content of 32-bit elements in Rs2 and then adds the result to the result of\n * multiplying the top 16-bit content of 32-bit elements in Rs1 with the top 16-bit content of 32-bit\n * elements in Rs2.\n * For the `KMAXDA` instruction, it multiplies the top 16-bit content of 32-bit elements in Rs1 with the\n * bottom 16-bit content of 32-bit elements in Rs2 and then adds the result to the result of multiplying\n * the bottom 16-bit content of 32-bit elements in Rs1 with the top 16-bit content of 32-bit elements in\n * Rs2.\n * The result is added to the content of 32-bit elements in Rd. If the addition result is beyond the Q31\n * number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to 1. The 32-bit\n * results after saturation are written to Rd. The 16-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * // KMADA\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[1]) + (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * // KMAXDA\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[0]) + (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n * OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMAXDA(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmaxda %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.39.2. KMAXDA ===== */\n\n/* ===== Inline Function Start for 3.40.1. KMADS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMADS (SIMD Saturating Signed Multiply Two Halfs & Subtract & Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMADS Rd, Rs1, Rs2\n * KMADRS Rd, Rs1, Rs2\n * KMAXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from 32-bit elements in two registers; and then\n * perform a subtraction operation between the two 32-bit results. Then add the subtraction result to\n * the corresponding 32-bit elements in a third register. The addition result may be saturated.\n * * KMADS: rd.W[x] + (top*top - bottom*bottom) (per 32-bit element)\n * * KMADRS: rd.W[x] + (bottom*bottom - top*top) (per 32-bit element)\n * * KMAXDS: rd.W[x] + (top*bottom - bottom*top) (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMADS` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the bottom 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the top 16-bit content of 32-bit elements in Rs1 with the top 16-bit content of 32-bit\n * elements in Rs2.\n * For the `KMADRS` instruction, it multiplies the top 16-bit content of 32-bit elements in Rs1 with the\n * top 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of 32-bit elements in Rs1 with the bottom 16-bit content of 32-\n * bit elements in Rs2.\n * For the `KMAXDS` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the top 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the top 16-bit content of 32-bit elements in Rs1 with the bottom 16-bit content of 32-bit\n * elements in Rs2.\n * The subtraction result is then added to the content of the corresponding 32-bit elements in Rd. If the\n * addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and\n * the OV bit is set to 1. The 32-bit results after saturation are written to Rd. The 16-bit contents of Rs1\n * and Rs2 are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * // KMADS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[1]) - (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * // KMADRS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[0]) - (Rs1.W[x].H[1] * Rs2.W[x].H[1]);\n * // KMAXDS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[0]) - (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMADS(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmads %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.40.1. KMADS ===== */\n\n/* ===== Inline Function Start for 3.40.2. KMADRS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMADRS (SIMD Saturating Signed Multiply Two Halfs & Reverse Subtract & Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMADS Rd, Rs1, Rs2\n * KMADRS Rd, Rs1, Rs2\n * KMAXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from 32-bit elements in two registers; and then\n * perform a subtraction operation between the two 32-bit results. Then add the subtraction result to\n * the corresponding 32-bit elements in a third register. The addition result may be saturated.\n * * KMADS: rd.W[x] + (top*top - bottom*bottom) (per 32-bit element)\n * * KMADRS: rd.W[x] + (bottom*bottom - top*top) (per 32-bit element)\n * * KMAXDS: rd.W[x] + (top*bottom - bottom*top) (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMADS` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the bottom 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the top 16-bit content of 32-bit elements in Rs1 with the top 16-bit content of 32-bit\n * elements in Rs2.\n * For the `KMADRS` instruction, it multiplies the top 16-bit content of 32-bit elements in Rs1 with the\n * top 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of 32-bit elements in Rs1 with the bottom 16-bit content of 32-\n * bit elements in Rs2.\n * For the `KMAXDS` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the top 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the top 16-bit content of 32-bit elements in Rs1 with the bottom 16-bit content of 32-bit\n * elements in Rs2.\n * The subtraction result is then added to the content of the corresponding 32-bit elements in Rd. If the\n * addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and\n * the OV bit is set to 1. The 32-bit results after saturation are written to Rd. The 16-bit contents of Rs1\n * and Rs2 are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * // KMADS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[1]) - (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * // KMADRS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[0]) - (Rs1.W[x].H[1] * Rs2.W[x].H[1]);\n * // KMAXDS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[0]) - (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMADRS(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmadrs %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.40.2. KMADRS ===== */\n\n/* ===== Inline Function Start for 3.40.3. KMAXDS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMAXDS (SIMD Saturating Signed Crossed Multiply Two Halfs & Subtract & Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMADS Rd, Rs1, Rs2\n * KMADRS Rd, Rs1, Rs2\n * KMAXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from 32-bit elements in two registers; and then\n * perform a subtraction operation between the two 32-bit results. Then add the subtraction result to\n * the corresponding 32-bit elements in a third register. The addition result may be saturated.\n * * KMADS: rd.W[x] + (top*top - bottom*bottom) (per 32-bit element)\n * * KMADRS: rd.W[x] + (bottom*bottom - top*top) (per 32-bit element)\n * * KMAXDS: rd.W[x] + (top*bottom - bottom*top) (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMADS` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the bottom 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the top 16-bit content of 32-bit elements in Rs1 with the top 16-bit content of 32-bit\n * elements in Rs2.\n * For the `KMADRS` instruction, it multiplies the top 16-bit content of 32-bit elements in Rs1 with the\n * top 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of 32-bit elements in Rs1 with the bottom 16-bit content of 32-\n * bit elements in Rs2.\n * For the `KMAXDS` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the top 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the top 16-bit content of 32-bit elements in Rs1 with the bottom 16-bit content of 32-bit\n * elements in Rs2.\n * The subtraction result is then added to the content of the corresponding 32-bit elements in Rd. If the\n * addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and\n * the OV bit is set to 1. The 32-bit results after saturation are written to Rd. The 16-bit contents of Rs1\n * and Rs2 are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * // KMADS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[1]) - (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * // KMADRS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[0]) - (Rs1.W[x].H[1] * Rs2.W[x].H[1]);\n * // KMAXDS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[0]) - (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMAXDS(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmaxds %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.40.3. KMAXDS ===== */\n\n/* ===== Inline Function Start for 3.41. KMAR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB\n * \\brief KMAR64 (Signed Multiply and Saturating Add to 64-Bit Data)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * KMAR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit signed elements in two registers and add the 64-bit multiplication\n * results to the 64-bit signed data of a pair of registers (RV32) or a register (RV64). The result is\n * saturated to the Q63 range and written back to the pair of registers (RV32) or the register (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit signed data of Rs1 with that of Rs2. It adds\n * the 64-bit multiplication result to the 64-bit signed data of an even/odd pair of registers specified by\n * Rd(4,1) with unlimited precision. If the 64-bit addition result is beyond the Q63 number range (-2^63 <=\n * Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to 1. The saturated result is written back\n * to the even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., value d, determines the even/odd pair group of two registers. Specifically, the register\n * pair includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the 32-bit signed elements of Rs1 with that of Rs2. It\n * adds the 64-bit multiplication results to the 64-bit signed data of Rd with unlimited precision. If the\n * 64-bit addition result is beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range\n * and the OV bit is set to 1. The saturated result is written back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * result = R[t_H].R[t_L] + (Rs1 * Rs2);\n * if (result > (2^63)-1) {\n *   result = (2^63)-1; OV = 1;\n * } else if (result < -2^63) {\n *   result = -2^63; OV = 1;\n * }\n * R[t_H].R[t_L] = result;\n * RV64:\n * // `result` has unlimited precision\n * result = Rd + (Rs1.W[0] * Rs2.W[0]) + (Rs1.W[1] * Rs2.W[1]);\n * if (result > (2^63)-1) {\n *   result = (2^63)-1; OV = 1;\n * } else if (result < -2^63) {\n *   result = -2^63; OV = 1;\n * }\n * Rd = result;\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_KMAR64(long long t, long a, long b) {\n  __ASM volatile(\"kmar64 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.41. KMAR64 ===== */\n\n/* ===== Inline Function Start for 3.42.1. KMDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMDA (SIMD Signed Multiply Two Halfs and Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMDA Rd, Rs1, Rs2\n * KMXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * adds the two 32-bit results together. The addition result may be saturated.\n * * KMDA: top*top + bottom*bottom (per 32-bit element)\n * * KMXDA: top*bottom + bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then adds the result to the result of\n * multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the 32-\n * bit elements of Rs2.\n * For the `KMXDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and then adds the result to the result of\n * multiplying the top 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit content of the\n * 32-bit elements of Rs2.\n * The addition result is checked for saturation. If saturation happens, the result is saturated to 2^31-1.\n * The final results are written to Rd. The 16-bit contents are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * if  Rs1.W[x]  !=  0x80008000)  or  (Rs2.W[x]  !=  0x80008000  {  //  KMDA  Rd.W[x]  =  Rs1.W[x].H[1]  *\n * Rs2.W[x].H[1]) + (Rs1.W[x].H[0] * Rs2.W[x].H[0]; // KMXDA Rd.W[x] = Rs1.W[x].H[1] * Rs2.W[x].H[0])\n * +  (Rs1.W[x].H[0]  *  Rs2.W[x].H[1];  }  else  {  Rd.W[x]  =  0x7fffffff;  OV  =  1;  }  for  RV32:  x=0  for  RV64:\n * x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMDA(unsigned long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"kmda %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.42.1. KMDA ===== */\n\n/* ===== Inline Function Start for 3.42.2. KMXDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMXDA (SIMD Signed Crossed Multiply Two Halfs and Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMDA Rd, Rs1, Rs2\n * KMXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * adds the two 32-bit results together. The addition result may be saturated.\n * * KMDA: top*top + bottom*bottom (per 32-bit element)\n * * KMXDA: top*bottom + bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then adds the result to the result of\n * multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the 32-\n * bit elements of Rs2.\n * For the `KMXDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and then adds the result to the result of\n * multiplying the top 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit content of the\n * 32-bit elements of Rs2.\n * The addition result is checked for saturation. If saturation happens, the result is saturated to 2^31-1.\n * The final results are written to Rd. The 16-bit contents are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * if  Rs1.W[x]  !=  0x80008000)  or  (Rs2.W[x]  !=  0x80008000  {  //  KMDA  Rd.W[x]  =  Rs1.W[x].H[1]  *\n * Rs2.W[x].H[1]) + (Rs1.W[x].H[0] * Rs2.W[x].H[0]; // KMXDA Rd.W[x] = Rs1.W[x].H[1] * Rs2.W[x].H[0])\n * +  (Rs1.W[x].H[0]  *  Rs2.W[x].H[1];  }  else  {  Rd.W[x]  =  0x7fffffff;  OV  =  1;  }  for  RV32:  x=0  for  RV64:\n * x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMXDA(unsigned long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"kmxda %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.42.2. KMXDA ===== */\n\n/* ===== Inline Function Start for 3.43.1. KMMAC ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC\n * \\brief KMMAC (SIMD Saturating MSW Signed Multiply Word and Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAC Rd, Rs1, Rs2\n * KMMAC.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of two registers and add the most significant\n * 32-bit results with the signed 32-bit integer elements of a third register. The addition results are\n * saturated first and then written back to the third register. The `.u` form performs an additional\n * rounding up operation on the multiplication results before adding the most significant 32-bit part\n * of the results.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed 32-bit elements of Rs2\n * and adds the most significant 32-bit multiplication results with the signed 32-bit elements of Rd. If\n * the addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range\n * and the OV bit is set to 1. The results after saturation are written to Rd. The `.u` form of the\n * instruction additionally rounds up the most significant 32-bit of the 64-bit multiplication results by\n * adding a 1 to bit 31 of the results.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][63:0] = Rs1.W[x] * Rs2.W[x];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][63:31] + 1;\n *   res[x] = Rd.W[x] + Round[x][32:1];\n * } else {\n *   res[x] = Rd.W[x] + Mres[x][63:32];\n * }\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAC(long t, long a, long b) {\n  __ASM volatile(\"kmmac %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.43.1. KMMAC ===== */\n\n/* ===== Inline Function Start for 3.43.2. KMMAC.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC\n * \\brief KMMAC.u (SIMD Saturating MSW Signed Multiply Word and Add with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAC Rd, Rs1, Rs2\n * KMMAC.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of two registers and add the most significant\n * 32-bit results with the signed 32-bit integer elements of a third register. The addition results are\n * saturated first and then written back to the third register. The `.u` form performs an additional\n * rounding up operation on the multiplication results before adding the most significant 32-bit part\n * of the results.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed 32-bit elements of Rs2\n * and adds the most significant 32-bit multiplication results with the signed 32-bit elements of Rd. If\n * the addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range\n * and the OV bit is set to 1. The results after saturation are written to Rd. The `.u` form of the\n * instruction additionally rounds up the most significant 32-bit of the 64-bit multiplication results by\n * adding a 1 to bit 31 of the results.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][63:0] = Rs1.W[x] * Rs2.W[x];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][63:31] + 1;\n *   res[x] = Rd.W[x] + Round[x][32:1];\n * } else {\n *   res[x] = Rd.W[x] + Mres[x][63:32];\n * }\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAC_U(long t, long a, long b) {\n  __ASM volatile(\"kmmac.u %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.43.2. KMMAC.u ===== */\n\n/* ===== Inline Function Start for 3.44.1. KMMAWB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMAWB (SIMD Saturating MSW Signed Multiply Word and Bottom Half and Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAWB Rd, Rs1, Rs2\n * KMMAWB.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the bottom 16-bit of the\n * corresponding 32-bit elements of another register and add the most significant 32-bit results with\n * the corresponding signed 32-bit elements of a third register. The addition result is written to the\n * corresponding 32-bit elements of the third register. The `.u` form rounds up the multiplication\n * results from the most significant discarded bit before the addition operations.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed bottom 16-bit content\n * of the corresponding 32-bit elements of Rs2 and adds the most significant 32-bit multiplication\n * results with the corresponding signed 32-bit elements of Rd. If the addition result is beyond the Q31\n * number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to 1. The results\n * after saturation are written to the corresponding 32-bit elements of Rd. The `.u` form of the\n * instruction rounds up the most significant 32-bit of the 48-bit multiplication results by adding a 1 to\n * bit 15 of the result before the addition operations.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][47:0] = Rs1.W[x] * Rs2.W[x].H[0];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][47:15] + 1;\n *   res[x] = Rd.W[x] + Round[x][32:1];\n * } else {\n *   res[x] = Rd.W[x] + Mres[x][47:16];\n * }\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAWB(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmmawb %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.44.1. KMMAWB ===== */\n\n/* ===== Inline Function Start for 3.44.2. KMMAWB.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMAWB.u (SIMD Saturating MSW Signed Multiply Word and Bottom Half and Add with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAWB Rd, Rs1, Rs2\n * KMMAWB.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the bottom 16-bit of the\n * corresponding 32-bit elements of another register and add the most significant 32-bit results with\n * the corresponding signed 32-bit elements of a third register. The addition result is written to the\n * corresponding 32-bit elements of the third register. The `.u` form rounds up the multiplication\n * results from the most significant discarded bit before the addition operations.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed bottom 16-bit content\n * of the corresponding 32-bit elements of Rs2 and adds the most significant 32-bit multiplication\n * results with the corresponding signed 32-bit elements of Rd. If the addition result is beyond the Q31\n * number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to 1. The results\n * after saturation are written to the corresponding 32-bit elements of Rd. The `.u` form of the\n * instruction rounds up the most significant 32-bit of the 48-bit multiplication results by adding a 1 to\n * bit 15 of the result before the addition operations.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][47:0] = Rs1.W[x] * Rs2.W[x].H[0];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][47:15] + 1;\n *   res[x] = Rd.W[x] + Round[x][32:1];\n * } else {\n *   res[x] = Rd.W[x] + Mres[x][47:16];\n * }\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAWB_U(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmmawb.u %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.44.2. KMMAWB.u ===== */\n\n/* ===== Inline Function Start for 3.45.1. KMMAWB2 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMAWB2 (SIMD Saturating MSW Signed Multiply Word and Bottom Half & 2 and Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAWB2 Rd, Rs1, Rs2\n * KMMAWB2.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit elements of one register and the bottom 16-bit of the\n * corresponding 32-bit elements of another register, double the multiplication results and add the\n * saturated most significant 32-bit results with the corresponding signed 32-bit elements of a third\n * register. The saturated addition result is written to the corresponding 32-bit elements of the third\n * register. The `.u` form rounds up the multiplication results from the most significant discarded bit\n * before the addition operations.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit Q31 elements of Rs1 with the signed bottom 16-bit Q15\n * content of the corresponding 32-bit elements of Rs2, doubles the Q46 results to Q47 numbers and\n * adds the saturated most significant 32-bit Q31 multiplication results with the corresponding signed\n * 32-bit elements of Rd. If the addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is\n * saturated to the range and the OV bit is set to 1. The results after saturation are written to the\n * corresponding 32-bit elements of Rd. The `.u` form of the instruction rounds up the most significant\n * 32-bit of the 48-bit Q47 multiplication results by adding a 1 to bit 15 (i.e., bit 14 before doubling) of\n * the result before the addition operations.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1.W[x] == 0x80000000) & (Rs2.W[x].H[0] == 0x8000)) {\n *   addop.W[x] = 0x7fffffff;\n *   OV = 1;\n * } else {\n *   Mres[x][47:0] = Rs1.W[x] s* Rs2.W[x].H[0];\n *   if (`.u` form) {\n *     Mres[x][47:14] = Mres[x][47:14] + 1;\n *   }\n *   addop.W[x] = Mres[x][46:15]; // doubling\n * }\n * res[x] = Rd.W[x] + addop.W[x];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAWB2(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmmawb2 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.45.1. KMMAWB2 ===== */\n\n/* ===== Inline Function Start for 3.45.2. KMMAWB2.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMAWB2.u (SIMD Saturating MSW Signed Multiply Word and Bottom Half & 2 and Add with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAWB2 Rd, Rs1, Rs2\n * KMMAWB2.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit elements of one register and the bottom 16-bit of the\n * corresponding 32-bit elements of another register, double the multiplication results and add the\n * saturated most significant 32-bit results with the corresponding signed 32-bit elements of a third\n * register. The saturated addition result is written to the corresponding 32-bit elements of the third\n * register. The `.u` form rounds up the multiplication results from the most significant discarded bit\n * before the addition operations.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit Q31 elements of Rs1 with the signed bottom 16-bit Q15\n * content of the corresponding 32-bit elements of Rs2, doubles the Q46 results to Q47 numbers and\n * adds the saturated most significant 32-bit Q31 multiplication results with the corresponding signed\n * 32-bit elements of Rd. If the addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is\n * saturated to the range and the OV bit is set to 1. The results after saturation are written to the\n * corresponding 32-bit elements of Rd. The `.u` form of the instruction rounds up the most significant\n * 32-bit of the 48-bit Q47 multiplication results by adding a 1 to bit 15 (i.e., bit 14 before doubling) of\n * the result before the addition operations.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1.W[x] == 0x80000000) & (Rs2.W[x].H[0] == 0x8000)) {\n *   addop.W[x] = 0x7fffffff;\n *   OV = 1;\n * } else {\n *   Mres[x][47:0] = Rs1.W[x] s* Rs2.W[x].H[0];\n *   if (`.u` form) {\n *     Mres[x][47:14] = Mres[x][47:14] + 1;\n *   }\n *   addop.W[x] = Mres[x][46:15]; // doubling\n * }\n * res[x] = Rd.W[x] + addop.W[x];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAWB2_U(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmmawb2.u %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.45.2. KMMAWB2.u ===== */\n\n/* ===== Inline Function Start for 3.46.1. KMMAWT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMAWT (SIMD Saturating MSW Signed Multiply Word and Top Half and Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAWT Rd, Rs1, Rs2\n * KMMAWT.u Rd Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the signed top 16-bit of the\n * corresponding 32-bit elements of another register and add the most significant 32-bit results with\n * the corresponding signed 32-bit elements of a third register. The addition results are written to the\n * corresponding 32-bit elements of the third register. The `.u` form rounds up the multiplication\n * results from the most significant discarded bit before the addition operations.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed top 16-bit of the\n * corresponding 32-bit elements of Rs2 and adds the most significant 32-bit multiplication results\n * with the corresponding signed 32-bit elements of Rd. If the addition result is beyond the Q31\n * number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to 1. The results\n * after saturation are written to the corresponding 32-bit elements of Rd. The `.u` form of the\n * instruction rounds up the most significant 32-bit of the 48-bit multiplication results by adding a 1 to\n * bit 15 of the result before the addition operations.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][47:0] = Rs1.W[x] * Rs2.W[x].H[1];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][47:15] + 1;\n *   res[x] = Rd.W[x] + Round[x][32:1];\n * } else {\n *   res[x] = Rd.W[x] + Mres[x][47:16];\n * }\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAWT(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmmawt %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.46.1. KMMAWT ===== */\n\n/* ===== Inline Function Start for 3.46.2. KMMAWT.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMAWT.u (SIMD Saturating MSW Signed Multiply Word and Top Half and Add with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAWT Rd, Rs1, Rs2\n * KMMAWT.u Rd Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the signed top 16-bit of the\n * corresponding 32-bit elements of another register and add the most significant 32-bit results with\n * the corresponding signed 32-bit elements of a third register. The addition results are written to the\n * corresponding 32-bit elements of the third register. The `.u` form rounds up the multiplication\n * results from the most significant discarded bit before the addition operations.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed top 16-bit of the\n * corresponding 32-bit elements of Rs2 and adds the most significant 32-bit multiplication results\n * with the corresponding signed 32-bit elements of Rd. If the addition result is beyond the Q31\n * number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to 1. The results\n * after saturation are written to the corresponding 32-bit elements of Rd. The `.u` form of the\n * instruction rounds up the most significant 32-bit of the 48-bit multiplication results by adding a 1 to\n * bit 15 of the result before the addition operations.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][47:0] = Rs1.W[x] * Rs2.W[x].H[1];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][47:15] + 1;\n *   res[x] = Rd.W[x] + Round[x][32:1];\n * } else {\n *   res[x] = Rd.W[x] + Mres[x][47:16];\n * }\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAWT_U(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmmawt.u %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.46.2. KMMAWT.u ===== */\n\n/* ===== Inline Function Start for 3.47.1. KMMAWT2 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMAWT2 (SIMD Saturating MSW Signed Multiply Word and Top Half & 2 and Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAWT2 Rd, Rs1, Rs2\n * KMMAWT2.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit elements of one register and the top 16-bit of the\n * corresponding 32-bit elements of another register, double the multiplication results and add the\n * saturated most significant 32-bit results with the corresponding signed 32-bit elements of a third\n * register. The saturated addition result is written to the corresponding 32-bit elements of the third\n * register. The `.u` form rounds up the multiplication results from the most significant discarded bit\n * before the addition operations.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit Q31 elements of Rs1 with the signed top 16-bit Q15\n * content of the corresponding 32-bit elements of Rs2, doubles the Q46 results to Q47 numbers and\n * adds the saturated most significant 32-bit Q31 multiplication results with the corresponding signed\n * 32-bit elements of Rd. If the addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is\n * saturated to the range and the OV bit is set to 1. The results after saturation are written to the\n * corresponding 32-bit elements of Rd. The `.u` form of the instruction rounds up the most significant\n * 32-bit of the 48-bit Q47 multiplication results by adding a 1 to bit 15 (i.e., bit 14 before doubling) of\n * the result before the addition operations.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1.W[x] == 0x80000000) & (Rs2.W[x].H[1] == 0x8000)) {\n *   addop.W[x] = 0x7fffffff;\n *   OV = 1;\n * } else {\n *   Mres[x][47:0] = Rs1.W[x] s* Rs2.W[x].H[1];\n *   if (`.u` form) {\n *     Mres[x][47:14] = Mres[x][47:14] + 1;\n *   }\n *   addop.W[x] = Mres[x][46:15]; // doubling\n * }\n * res[x] = Rd.W[x] + addop.W[x];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAWT2(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmmawt2 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.47.1. KMMAWT2 ===== */\n\n/* ===== Inline Function Start for 3.47.2. KMMAWT2.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMAWT2.u (SIMD Saturating MSW Signed Multiply Word and Top Half & 2 and Add with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAWT2 Rd, Rs1, Rs2\n * KMMAWT2.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit elements of one register and the top 16-bit of the\n * corresponding 32-bit elements of another register, double the multiplication results and add the\n * saturated most significant 32-bit results with the corresponding signed 32-bit elements of a third\n * register. The saturated addition result is written to the corresponding 32-bit elements of the third\n * register. The `.u` form rounds up the multiplication results from the most significant discarded bit\n * before the addition operations.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit Q31 elements of Rs1 with the signed top 16-bit Q15\n * content of the corresponding 32-bit elements of Rs2, doubles the Q46 results to Q47 numbers and\n * adds the saturated most significant 32-bit Q31 multiplication results with the corresponding signed\n * 32-bit elements of Rd. If the addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is\n * saturated to the range and the OV bit is set to 1. The results after saturation are written to the\n * corresponding 32-bit elements of Rd. The `.u` form of the instruction rounds up the most significant\n * 32-bit of the 48-bit Q47 multiplication results by adding a 1 to bit 15 (i.e., bit 14 before doubling) of\n * the result before the addition operations.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1.W[x] == 0x80000000) & (Rs2.W[x].H[1] == 0x8000)) {\n *   addop.W[x] = 0x7fffffff;\n *   OV = 1;\n * } else {\n *   Mres[x][47:0] = Rs1.W[x] s* Rs2.W[x].H[1];\n *   if (`.u` form) {\n *     Mres[x][47:14] = Mres[x][47:14] + 1;\n *   }\n *   addop.W[x] = Mres[x][46:15]; // doubling\n * }\n * res[x] = Rd.W[x] + addop.W[x];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAWT2_U(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmmawt2.u %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.47.2. KMMAWT2.u ===== */\n\n/* ===== Inline Function Start for 3.48.1. KMMSB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC\n * \\brief KMMSB (SIMD Saturating MSW Signed Multiply Word and Subtract)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMSB Rd, Rs1, Rs2\n * KMMSB.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of two registers and subtract the most\n * significant 32-bit results from the signed 32-bit elements of a third register. The subtraction results\n * are written to the third register. The `.u` form performs an additional rounding up operation on\n * the multiplication results before subtracting the most significant 32-bit part of the results.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed 32-bit elements of Rs2\n * and subtracts the most significant 32-bit multiplication results from the signed 32-bit elements of\n * Rd. If the subtraction result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the\n * range and the OV bit is set to 1. The results after saturation are written to Rd. The `.u` form of the\n * instruction additionally rounds up the most significant 32-bit of the 64-bit multiplication results by\n * adding a 1 to bit 31 of the results.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][63:0] = Rs1.W[x] * Rs2.W[x];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][63:31] + 1;\n *   res[x] = Rd.W[x] - Round[x][32:1];\n * } else {\n *   res[x] = Rd.W[x] - Mres[x][63:32];\n * }\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMSB(long t, long a, long b) {\n  __ASM volatile(\"kmmsb %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.48.1. KMMSB ===== */\n\n/* ===== Inline Function Start for 3.48.2. KMMSB.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC\n * \\brief KMMSB.u (SIMD Saturating MSW Signed Multiply Word and Subtraction with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMSB Rd, Rs1, Rs2\n * KMMSB.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of two registers and subtract the most\n * significant 32-bit results from the signed 32-bit elements of a third register. The subtraction results\n * are written to the third register. The `.u` form performs an additional rounding up operation on\n * the multiplication results before subtracting the most significant 32-bit part of the results.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed 32-bit elements of Rs2\n * and subtracts the most significant 32-bit multiplication results from the signed 32-bit elements of\n * Rd. If the subtraction result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the\n * range and the OV bit is set to 1. The results after saturation are written to Rd. The `.u` form of the\n * instruction additionally rounds up the most significant 32-bit of the 64-bit multiplication results by\n * adding a 1 to bit 31 of the results.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][63:0] = Rs1.W[x] * Rs2.W[x];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][63:31] + 1;\n *   res[x] = Rd.W[x] - Round[x][32:1];\n * } else {\n *   res[x] = Rd.W[x] - Mres[x][63:32];\n * }\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMSB_U(long t, long a, long b) {\n  __ASM volatile(\"kmmsb.u %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.48.2. KMMSB.u ===== */\n\n/* ===== Inline Function Start for 3.49.1. KMMWB2 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMWB2 (SIMD Saturating MSW Signed Multiply Word and Bottom Half & 2)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMWB2 Rd, Rs1, Rs2\n * KMMWB2.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the bottom 16-bit of the\n * corresponding 32-bit elements of another register, double the multiplication results and write the\n * saturated most significant 32-bit results to the corresponding 32-bit elements of a register. The `.u`\n * form rounds up the results from the most significant discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit Q31 elements of Rs1 with the signed bottom 16-bit Q15\n * content of the corresponding 32-bit elements of Rs2, doubles the Q46 results to Q47 numbers and\n * writes the saturated most significant 32-bit Q31 multiplication results to the corresponding 32-bit\n * elements of Rd. The `.u` form of the instruction rounds up the most significant 32-bit of the 48-bit\n * Q47 multiplication results by adding a 1 to bit 15 (i.e., bit 14 before doubling) of the results.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1.W[x] == 0x80000000) & (Rs2.W[x].H[0] == 0x8000)) {\n *   Rd.W[x] = 0x7fffffff;\n *   OV = 1;\n * } else {\n *   Mres[x][47:0] = Rs1.W[x] s* Rs2.W[x].H[0];\n *   if (`.u` form) {\n *     Round[x][32:0] = Mres[x][46:14] + 1;\n *     Rd.W[x] = Round[x][32:1];\n *   } else {\n *     Rd.W[x] = Mres[x][46:15];\n *   }\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMWB2(long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"kmmwb2 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.49.1. KMMWB2 ===== */\n\n/* ===== Inline Function Start for 3.49.2. KMMWB2.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMWB2.u (SIMD Saturating MSW Signed Multiply Word and Bottom Half & 2 with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMWB2 Rd, Rs1, Rs2\n * KMMWB2.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the bottom 16-bit of the\n * corresponding 32-bit elements of another register, double the multiplication results and write the\n * saturated most significant 32-bit results to the corresponding 32-bit elements of a register. The `.u`\n * form rounds up the results from the most significant discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit Q31 elements of Rs1 with the signed bottom 16-bit Q15\n * content of the corresponding 32-bit elements of Rs2, doubles the Q46 results to Q47 numbers and\n * writes the saturated most significant 32-bit Q31 multiplication results to the corresponding 32-bit\n * elements of Rd. The `.u` form of the instruction rounds up the most significant 32-bit of the 48-bit\n * Q47 multiplication results by adding a 1 to bit 15 (i.e., bit 14 before doubling) of the results.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1.W[x] == 0x80000000) & (Rs2.W[x].H[0] == 0x8000)) {\n *   Rd.W[x] = 0x7fffffff;\n *   OV = 1;\n * } else {\n *   Mres[x][47:0] = Rs1.W[x] s* Rs2.W[x].H[0];\n *   if (`.u` form) {\n *     Round[x][32:0] = Mres[x][46:14] + 1;\n *     Rd.W[x] = Round[x][32:1];\n *   } else {\n *     Rd.W[x] = Mres[x][46:15];\n *   }\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMWB2_U(long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"kmmwb2.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.49.2. KMMWB2.u ===== */\n\n/* ===== Inline Function Start for 3.50.1. KMMWT2 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMWT2 (SIMD Saturating MSW Signed Multiply Word and Top Half & 2)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMWT2 Rd, Rs1, Rs2\n * KMMWT2.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the top 16-bit of the\n * corresponding 32-bit elements of another register, double the multiplication results and write the\n * saturated most significant 32-bit results to the corresponding 32-bit elements of a register. The `.u`\n * form rounds up the results from the most significant discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit Q31 elements of Rs1 with the signed top 16-bit Q15\n * content of the corresponding 32-bit elements of Rs2, doubles the Q46 results to Q47 numbers and\n * writes the saturated most significant 32-bit Q31 multiplication results to the corresponding 32-bit\n * elements of Rd. The `.u` form of the instruction rounds up the most significant 32-bit of the 48-bit\n * Q47 multiplication results by adding a 1 to bit 15 (i.e., bit 14 before doubling) of the results.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1.W[x] == 0x80000000) & (Rs2.W[x].H[1] == 0x8000)) {\n *   Rd.W[x] = 0x7fffffff;\n *   OV = 1;\n * } else {\n *   Mres[x][47:0] = Rs1.W[x] s* Rs2.W[x].H[1];\n *   if (`.u` form) {\n *     Round[x][32:0] = Mres[x][46:14] + 1;\n *     Rd.W[x] = Round[x][32:1];\n *   } else {\n *     Rd.W[x] = Mres[x][46:15];\n *   }\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMWT2(long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"kmmwt2 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.50.1. KMMWT2 ===== */\n\n/* ===== Inline Function Start for 3.50.2. KMMWT2.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMWT2.u (SIMD Saturating MSW Signed Multiply Word and Top Half & 2 with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMWT2 Rd, Rs1, Rs2\n * KMMWT2.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the top 16-bit of the\n * corresponding 32-bit elements of another register, double the multiplication results and write the\n * saturated most significant 32-bit results to the corresponding 32-bit elements of a register. The `.u`\n * form rounds up the results from the most significant discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit Q31 elements of Rs1 with the signed top 16-bit Q15\n * content of the corresponding 32-bit elements of Rs2, doubles the Q46 results to Q47 numbers and\n * writes the saturated most significant 32-bit Q31 multiplication results to the corresponding 32-bit\n * elements of Rd. The `.u` form of the instruction rounds up the most significant 32-bit of the 48-bit\n * Q47 multiplication results by adding a 1 to bit 15 (i.e., bit 14 before doubling) of the results.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1.W[x] == 0x80000000) & (Rs2.W[x].H[1] == 0x8000)) {\n *   Rd.W[x] = 0x7fffffff;\n *   OV = 1;\n * } else {\n *   Mres[x][47:0] = Rs1.W[x] s* Rs2.W[x].H[1];\n *   if (`.u` form) {\n *     Round[x][32:0] = Mres[x][46:14] + 1;\n *     Rd.W[x] = Round[x][32:1];\n *   } else {\n *     Rd.W[x] = Mres[x][46:15];\n *   }\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMWT2_U(long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"kmmwt2.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.50.2. KMMWT2.u ===== */\n\n/* ===== Inline Function Start for 3.51.1. KMSDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMSDA (SIMD Saturating Signed Multiply Two Halfs & Add & Subtract)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMSDA Rd, Rs1, Rs2\n * KMSXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * subtracts the two 32-bit results from the corresponding 32-bit elements of a third register. The\n * subtraction result may be saturated.\n * * KMSDA: rd.W[x] - top*top - bottom*bottom (per 32-bit element)\n * * KMSXDA: rd.W[x] - top*bottom - bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMSDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and multiplies the top 16-bit content of\n * the 32-bit elements of Rs1 with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `KMSXDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and multiplies the top 16-bit content of the\n * 32-bit elements of Rs1 with the bottom 16-bit content of the 32-bit elements of Rs2.\n * The two 32-bit multiplication results are then subtracted from the content of the corresponding 32-\n * bit elements of Rd. If the subtraction result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is\n * saturated to the range and the OV bit is set to 1. The results after saturation are written to Rd. The\n * 16-bit contents are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * // KMSDA\n * res[x] = Rd.W[x] - (Rs1.W[x].H[1] * Rs2.W[x].H[1]) - (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * // KMSXDA\n * res[x] = Rd.W[x] - (Rs1.W[x].H[1] * Rs2.W[x].H[0]) - (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMSDA(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmsda %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.51.1. KMSDA ===== */\n\n/* ===== Inline Function Start for 3.51.2. KMSXDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMSXDA (SIMD Saturating Signed Crossed Multiply Two Halfs & Add & Subtract)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMSDA Rd, Rs1, Rs2\n * KMSXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * subtracts the two 32-bit results from the corresponding 32-bit elements of a third register. The\n * subtraction result may be saturated.\n * * KMSDA: rd.W[x] - top*top - bottom*bottom (per 32-bit element)\n * * KMSXDA: rd.W[x] - top*bottom - bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMSDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and multiplies the top 16-bit content of\n * the 32-bit elements of Rs1 with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `KMSXDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and multiplies the top 16-bit content of the\n * 32-bit elements of Rs1 with the bottom 16-bit content of the 32-bit elements of Rs2.\n * The two 32-bit multiplication results are then subtracted from the content of the corresponding 32-\n * bit elements of Rd. If the subtraction result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is\n * saturated to the range and the OV bit is set to 1. The results after saturation are written to Rd. The\n * 16-bit contents are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * // KMSDA\n * res[x] = Rd.W[x] - (Rs1.W[x].H[1] * Rs2.W[x].H[1]) - (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * // KMSXDA\n * res[x] = Rd.W[x] - (Rs1.W[x].H[1] * Rs2.W[x].H[0]) - (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMSXDA(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmsxda %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.51.2. KMSXDA ===== */\n\n/* ===== Inline Function Start for 3.52. KMSR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB\n * \\brief KMSR64 (Signed Multiply and Saturating Subtract from 64-Bit Data)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * KMSR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit signed elements in two registers and subtract the 64-bit multiplication\n * results from the 64-bit signed data of a pair of registers (RV32) or a register (RV64). The result is\n * saturated to the Q63 range and written back to the pair of registers (RV32) or the register (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit signed data of Rs1 with that of Rs2. It\n * subtracts the 64-bit multiplication result from the 64-bit signed data of an even/odd pair of registers\n * specified by Rd(4,1) with unlimited precision. If the 64-bit subtraction result is beyond the Q63\n * number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to 1. The saturated\n * result is written back to the even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the 32-bit signed elements of Rs1 with that of Rs2. It\n * subtracts the 64-bit multiplication results from the 64-bit signed data in Rd with unlimited\n * precision. If the 64-bit subtraction result is beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is\n * saturated to the range and the OV bit is set to 1. The saturated result is written back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * result = R[t_H].R[t_L] - (Rs1 * Rs2);\n * if (result > (2^63)-1) {\n *   result = (2^63)-1; OV = 1;\n * } else if (result < -2^63) {\n *   result = -2^63; OV = 1;\n * }\n * R[t_H].R[t_L] = result;\n * RV64:\n * // `result` has unlimited precision\n * result = Rd - (Rs1.W[0] * Rs2.W[0]) - (Rs1.W[1] * Rs2.W[1]);\n * if (result > (2^63)-1) {\n *   result = (2^63)-1; OV = 1;\n * } else if (result < -2^63) {\n *   result = -2^63; OV = 1;\n * }\n * Rd = result;\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_KMSR64(long long t, long a, long b) {\n  __ASM volatile(\"kmsr64 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.52. KMSR64 ===== */\n\n/* ===== Inline Function Start for 3.53. KSLLW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KSLLW (Saturating Shift Left Logical for Word)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KSLLW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do logical left shift operation with saturation on a 32-bit word. The shift amount is a\n * variable from a GPR.\n *\n * **Description**:\\n\n * The first word data in Rs1 is left-shifted logically. The shifted out bits are filled with\n * zero and the shift amount is specified by the low-order 5-bits of the value in the Rs2 register. Any\n * shifted value greater than 2^31-1 is saturated to 2^31-1. Any shifted value smaller than -2^31 is saturated\n * to -2^31. And the saturated result is sign-extended and written to Rd. If any saturation is performed,\n * set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[4:0];\n * res[(31+sa):0] = Rs1.W[0] << sa;\n * if (res > (2^31)-1) {\n *   res = 0x7fffffff; OV = 1;\n * } else if (res < -2^31) {\n *   res = 0x80000000; OV = 1;\n * }\n * Rd[31:0] = res[31:0]; // RV32\n * Rd[63:0] = SE(res[31:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KSLLW(long a, unsigned int b) {\n  register long result;\n  __ASM volatile(\"ksllw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.53. KSLLW ===== */\n\n/* ===== Inline Function Start for 3.54. KSLLIW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KSLLIW (Saturating Shift Left Logical Immediate for Word)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KSLLIW Rd, Rs1, imm5u\n * ~~~\n *\n * **Purpose**:\\n\n * Do logical left shift operation with saturation on a 32-bit word. The shift amount is an\n * immediate value.\n *\n * **Description**:\\n\n * The first word data in Rs1 is left-shifted logically. The shifted out bits are filled with\n * zero and the shift amount is specified by the imm5u constant. Any shifted value greater than 2^31-1 is\n * saturated to 2^31-1. Any shifted value smaller than -2^31 is saturated to -2^31. And the saturated result is\n * sign-extended and written to Rd. If any saturation is performed, set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm5u;\n * res[(31+sa):0] = Rs1.W[0] << sa;\n * if (res > (2^31)-1) {\n *   res = 0x7fffffff; OV = 1;\n * } else if (res < -2^31) {\n *   res = 0x80000000; OV = 1;\n * }\n * Rd[31:0] = res[31:0]; // RV32\n * Rd[63:0] = SE(res[31:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n#define __RV_KSLLIW(a, b)                                                  \\\n  ({                                                                       \\\n    register long result;                                                  \\\n    register long __a = (long)(a);                                         \\\n    __ASM volatile(\"kslliw %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                \\\n  })\n/* ===== Inline Function End for 3.54. KSLLIW ===== */\n\n/* ===== Inline Function Start for 3.55. KSLL8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief KSLL8 (SIMD 8-bit Saturating Shift Left Logical)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSLL8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical left shift operations with saturation simultaneously. The shift\n * amount is a variable from a GPR.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are left-shifted logically. The shifted out bits are filled\n * with zero and the shift amount is specified by the low-order 3-bits of the value in the Rs2 register.\n * Any shifted value greater than 2^7-1 is saturated to 2^7-1. Any shifted value smaller than -2^7 is\n * saturated to -2^7. And the saturated results are written to Rd. If any saturation is performed, set OV\n * bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[2:0];\n * if (sa != 0) {\n *   res[(7+sa):0] = Rs1.B[x] << sa;\n *   if (res > (2^7)-1) {\n *     res = 0x7f; OV = 1;\n *   } else if (res < -2^7) {\n *     res = 0x80; OV = 1;\n *   }\n *   Rd.B[x] = res[7:0];\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLL8(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"ksll8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.55. KSLL8 ===== */\n\n/* ===== Inline Function Start for 3.56. KSLLI8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief KSLLI8 (SIMD 8-bit Saturating Shift Left Logical Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSLLI8 Rd, Rs1, imm3u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical left shift operations with saturation simultaneously. The shift\n * amount is an immediate value.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are left-shifted logically. The shifted out bits are filled\n * with zero and the shift amount is specified by the imm3u constant. Any shifted value greater than\n * 2^7-1 is saturated to 2^7-1. Any shifted value smaller than -2^7 is saturated to -2^7. And the saturated\n * results are written to Rd. If any saturation is performed, set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm3u[2:0];\n * if (sa != 0) {\n *   res[(7+sa):0] = Rs1.B[x] << sa;\n *   if (res > (2^7)-1) {\n *     res = 0x7f; OV = 1;\n *   } else if (res < -2^7) {\n *     res = 0x80; OV = 1;\n *   }\n *   Rd.B[x] = res[7:0];\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_KSLLI8(a, b)                                                  \\\n  ({                                                                       \\\n    register unsigned long result;                                         \\\n    register unsigned long __a = (unsigned long)(a);                       \\\n    __ASM volatile(\"kslli8 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                \\\n  })\n/* ===== Inline Function End for 3.56. KSLLI8 ===== */\n\n/* ===== Inline Function Start for 3.57. KSLL16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief KSLL16 (SIMD 16-bit Saturating Shift Left Logical)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSLL16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical left shift operations with saturation simultaneously. The shift\n * amount is a variable from a GPR.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are left-shifted logically. The shifted out bits are filled\n * with zero and the shift amount is specified by the low-order 4-bits of the value in the Rs2 register.\n * Any shifted value greater than 2^15-1 is saturated to 2^15-1. Any shifted value smaller than -2^15 is\n * saturated to -2^15. And the saturated results are written to Rd. If any saturation is performed, set OV\n * bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[3:0];\n * if (sa != 0) {\n *   res[(15+sa):0] = Rs1.H[x] << sa;\n *   if (res > (2^15)-1) {\n *     res = 0x7fff; OV = 1;\n *   } else if (res < -2^15) {\n *     res = 0x8000; OV = 1;\n *   }\n *   Rd.H[x] = res[15:0];\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLL16(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"ksll16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.57. KSLL16 ===== */\n\n/* ===== Inline Function Start for 3.58. KSLLI16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief KSLLI16 (SIMD 16-bit Saturating Shift Left Logical Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSLLI16 Rd, Rs1, imm4u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical left shift operations with saturation simultaneously. The shift\n * amount is an immediate value.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are left-shifted logically. The shifted out bits are filled\n * with zero and the shift amount is specified by the imm4u constant. Any shifted value greater than\n * 2^15-1 is saturated to 2^15-1. Any shifted value smaller than -2^15 is saturated to -2^15. And the saturated\n * results are written to Rd. If any saturation is performed, set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm4u[3:0];\n * if (sa != 0) {\n *   res[(15+sa):0] = Rs1.H[x] << sa;\n *   if (res > (2^15)-1) {\n *     res = 0x7fff; OV = 1;\n *   } else if (res < -2^15) {\n *     res = 0x8000; OV = 1;\n *   }\n *   Rd.H[x] = res[15:0];\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_KSLLI16(a, b)                                                  \\\n  ({                                                                        \\\n    register unsigned long result;                                          \\\n    register unsigned long __a = (unsigned long)(a);                        \\\n    __ASM volatile(\"kslli16 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                 \\\n  })\n/* ===== Inline Function End for 3.58. KSLLI16 ===== */\n\n/* ===== Inline Function Start for 3.59.1. KSLRA8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief KSLRA8 (SIMD 8-bit Shift Left Logical with Saturation or Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSLRA8 Rd, Rs1, Rs2\n * KSLRA8.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical left (positive) or arithmetic right (negative) shift operation with\n * Q7 saturation for the left shift. The `.u` form performs additional rounding up operations for the\n * right shift.\n *\n * **Description**:\\n\n * The 8-bit data elements of Rs1 are left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[3:0]. Rs2[3:0] is in the signed range of [-2^3, 2^3-1]. A positive Rs2[3:0] means\n * logical left shift and a negative Rs2[3:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[3:0]. However, the behavior of `Rs2[3:0]==-2^3 (0x8)` is defined to be\n * equivalent to the behavior of `Rs2[3:0]==-(2^3-1) (0x9)`.\n * The left-shifted results are saturated to the 8-bit signed integer range of [-2^7, 2^7-1]. For the `.u` form\n * of the instruction, the right-shifted results are added a 1 to the most significant discarded bit\n * position for rounding effect. After the shift, saturation, or rounding, the final results are written to\n * Rd. If any saturation happens, this instruction sets the OV flag. The value of Rs2[31:4] will not affect\n * this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[3:0] < 0) {\n *   sa = -Rs2[3:0];\n *   sa = (sa == 8)? 7 : sa;\n *   if (`.u` form) {\n *     res[7:-1] = SE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[7:0];\n *   } else {\n *     Rd.B[x] = SE8(Rs1.B[x][7:sa]);\n *   }\n * } else {\n *   sa = Rs2[2:0];\n *   res[(7+sa):0] = Rs1.B[x] <<(logic) sa;\n *   if (res > (2^7)-1) {\n *     res[7:0] = 0x7f; OV = 1;\n *   } else if (res < -2^7) {\n *     res[7:0] = 0x80; OV = 1;\n *   }\n *   Rd.B[x] = res[7:0];\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLRA8(unsigned long a, int b) {\n  register unsigned long result;\n  __ASM volatile(\"kslra8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.59.1. KSLRA8 ===== */\n\n/* ===== Inline Function Start for 3.59.2. KSLRA8.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief KSLRA8.u (SIMD 8-bit Shift Left Logical with Saturation or Rounding Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSLRA8 Rd, Rs1, Rs2\n * KSLRA8.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical left (positive) or arithmetic right (negative) shift operation with\n * Q7 saturation for the left shift. The `.u` form performs additional rounding up operations for the\n * right shift.\n *\n * **Description**:\\n\n * The 8-bit data elements of Rs1 are left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[3:0]. Rs2[3:0] is in the signed range of [-2^3, 2^3-1]. A positive Rs2[3:0] means\n * logical left shift and a negative Rs2[3:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[3:0]. However, the behavior of `Rs2[3:0]==-2^3 (0x8)` is defined to be\n * equivalent to the behavior of `Rs2[3:0]==-(2^3-1) (0x9)`.\n * The left-shifted results are saturated to the 8-bit signed integer range of [-2^7, 2^7-1]. For the `.u` form\n * of the instruction, the right-shifted results are added a 1 to the most significant discarded bit\n * position for rounding effect. After the shift, saturation, or rounding, the final results are written to\n * Rd. If any saturation happens, this instruction sets the OV flag. The value of Rs2[31:4] will not affect\n * this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[3:0] < 0) {\n *   sa = -Rs2[3:0];\n *   sa = (sa == 8)? 7 : sa;\n *   if (`.u` form) {\n *     res[7:-1] = SE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[7:0];\n *   } else {\n *     Rd.B[x] = SE8(Rs1.B[x][7:sa]);\n *   }\n * } else {\n *   sa = Rs2[2:0];\n *   res[(7+sa):0] = Rs1.B[x] <<(logic) sa;\n *   if (res > (2^7)-1) {\n *     res[7:0] = 0x7f; OV = 1;\n *   } else if (res < -2^7) {\n *     res[7:0] = 0x80; OV = 1;\n *   }\n *   Rd.B[x] = res[7:0];\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLRA8_U(unsigned long a, int b) {\n  register unsigned long result;\n  __ASM volatile(\"kslra8.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.59.2. KSLRA8.u ===== */\n\n/* ===== Inline Function Start for 3.60.1. KSLRA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief KSLRA16 (SIMD 16-bit Shift Left Logical with Saturation or Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSLRA16 Rd, Rs1, Rs2\n * KSLRA16.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical left (positive) or arithmetic right (negative) shift operation with\n * Q15 saturation for the left shift. The `.u` form performs additional rounding up operations for the\n * right shift.\n *\n * **Description**:\\n\n * The 16-bit data elements of Rs1 are left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[4:0]. Rs2[4:0] is in the signed range of [-2^4, 2^4-1]. A positive Rs2[4:0] means\n * logical left shift and a negative Rs2[4:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[4:0]. However, the behavior of `Rs2[4:0]==-2^4 (0x10)` is defined to be\n * equivalent to the behavior of `Rs2[4:0]==-(2^4-1) (0x11)`.\n * The left-shifted results are saturated to the 16-bit signed integer range of [-2^15, 2^15-1]. For the `.u`\n * form of the instruction, the right-shifted results are added a 1 to the most significant discarded bit\n * position for rounding effect. After the shift, saturation, or rounding, the final results are written to\n * Rd. If any saturation happens, this instruction sets the OV flag. The value of Rs2[31:5] will not affect\n * this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[4:0] < 0) {\n *   sa = -Rs2[4:0];\n *   sa = (sa == 16)? 15 : sa;\n *   if (`.u` form) {\n *     res[15:-1] = SE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[15:0];\n *   } else {\n *     Rd.H[x] = SE16(Rs1.H[x][15:sa]);\n *   }\n * } else {\n *   sa = Rs2[3:0];\n *   res[(15+sa):0] = Rs1.H[x] <<(logic) sa;\n *   if (res > (2^15)-1) {\n *     res[15:0] = 0x7fff; OV = 1;\n *   } else if (res < -2^15) {\n *     res[15:0] = 0x8000; OV = 1;\n *   }\n *   d.H[x] = res[15:0];\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLRA16(unsigned long a, int b) {\n  register unsigned long result;\n  __ASM volatile(\"kslra16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.60.1. KSLRA16 ===== */\n\n/* ===== Inline Function Start for 3.60.2. KSLRA16.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief KSLRA16.u (SIMD 16-bit Shift Left Logical with Saturation or Rounding Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSLRA16 Rd, Rs1, Rs2\n * KSLRA16.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical left (positive) or arithmetic right (negative) shift operation with\n * Q15 saturation for the left shift. The `.u` form performs additional rounding up operations for the\n * right shift.\n *\n * **Description**:\\n\n * The 16-bit data elements of Rs1 are left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[4:0]. Rs2[4:0] is in the signed range of [-2^4, 2^4-1]. A positive Rs2[4:0] means\n * logical left shift and a negative Rs2[4:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[4:0]. However, the behavior of `Rs2[4:0]==-2^4 (0x10)` is defined to be\n * equivalent to the behavior of `Rs2[4:0]==-(2^4-1) (0x11)`.\n * The left-shifted results are saturated to the 16-bit signed integer range of [-2^15, 2^15-1]. For the `.u`\n * form of the instruction, the right-shifted results are added a 1 to the most significant discarded bit\n * position for rounding effect. After the shift, saturation, or rounding, the final results are written to\n * Rd. If any saturation happens, this instruction sets the OV flag. The value of Rs2[31:5] will not affect\n * this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[4:0] < 0) {\n *   sa = -Rs2[4:0];\n *   sa = (sa == 16)? 15 : sa;\n *   if (`.u` form) {\n *     res[15:-1] = SE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[15:0];\n *   } else {\n *     Rd.H[x] = SE16(Rs1.H[x][15:sa]);\n *   }\n * } else {\n *   sa = Rs2[3:0];\n *   res[(15+sa):0] = Rs1.H[x] <<(logic) sa;\n *   if (res > (2^15)-1) {\n *     res[15:0] = 0x7fff; OV = 1;\n *   } else if (res < -2^15) {\n *     res[15:0] = 0x8000; OV = 1;\n *   }\n *   d.H[x] = res[15:0];\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLRA16_U(unsigned long a, int b) {\n  register unsigned long result;\n  __ASM volatile(\"kslra16.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.60.2. KSLRA16.u ===== */\n\n/* ===== Inline Function Start for 3.61. KSLRAW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KSLRAW (Shift Left Logical with Q31 Saturation or Shift Right Arithmetic)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KSLRAW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Perform a logical left (positive) or arithmetic right (negative) shift operation with Q31\n * saturation for the left shift on a 32-bit data.\n *\n * **Description**:\\n\n * The lower 32-bit content of Rs1 is left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[5:0]. Rs2[5:0] is in the signed range of [-25, 25-1]. A positive Rs2[5:0] means\n * logical left shift and a negative Rs2[5:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[5:0] clamped to the actual shift range of [0, 31].\n * The left-shifted result is saturated to the 32-bit signed integer range of [-2^31, 2^31-1]. After the shift\n * operation, the final result is bit-31 sign-extended and written to Rd. If any saturation happens, this\n * instruction sets the OV flag. The value of Rs2[31:6] will not affected the operation of this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[5:0] < 0) {\n *   sa = -Rs2[5:0];\n *   sa = (sa == 32)? 31 : sa;\n *   res[31:0] = Rs1.W[0] >>(arith) sa;\n * } else {\n *   sa = Rs2[5:0];\n *   tmp = Rs1.W[0] <<(logic) sa;\n *   if (tmp > (2^31)-1) {\n *     res[31:0] = (2^31)-1;\n *     OV = 1;\n *   } else if (tmp < -2^31) {\n *     res[31:0] = -2^31;\n *     OV = 1\n *   } else {\n *     res[31:0] = tmp[31:0];\n *   }\n * }\n * Rd = res[31:0]; // RV32\n * Rd = SE64(res[31:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KSLRAW(int a, int b) {\n  register long result;\n  __ASM volatile(\"kslraw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.61. KSLRAW ===== */\n\n/* ===== Inline Function Start for 3.62. KSLRAW.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KSLRAW.u (Shift Left Logical with Q31 Saturation or Rounding Shift Right Arithmetic)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KSLRAW.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Perform a logical left (positive) or arithmetic right (negative) shift operation with Q31\n * saturation for the left shift and a rounding up operation for the right shift on a 32-bit data.\n *\n * **Description**:\\n\n * The lower 32-bit content of Rs1 is left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[5:0]. Rs2[5:0] is in the signed range of [-25, 25-1]. A positive Rs2[5:0] means\n * logical left shift and a negative Rs2[5:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[5:0] clamped to the actual shift range of [0, 31].\n * The left-shifted result is saturated to the 32-bit signed integer range of [-2^31, 2^31-1]. The right-shifted\n * result is added a 1 to the most significant discarded bit position for rounding effect. After the shift,\n * saturation, or rounding, the final result is bit-31 sign-extended and written to Rd. If any saturation\n * happens, this instruction sets the OV flag. The value of Rs2[31:6] will not affect the operation of this\n * instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[5:0] < 0) {\n *   sa = -Rs2[5:0];\n *   sa = (sa == 32)? 31 : sa;\n *   res[31:-1] = SE33(Rs1[31:(sa-1)]) + 1;\n *   rst[31:0] = res[31:0];\n * } else {\n *   sa = Rs2[5:0];\n *   tmp = Rs1.W[0] <<(logic) sa;\n *   if (tmp > (2^31)-1) {\n *     rst[31:0] = (2^31)-1;\n *     OV = 1;\n *   } else if (tmp < -2^31) {\n *     rst[31:0] = -2^31;\n *     OV = 1\n *   } else {\n *     rst[31:0] = tmp[31:0];\n *   }\n * }\n * Rd = rst[31:0]; // RV32\n * Rd = SE64(rst[31:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KSLRAW_U(int a, int b) {\n  register long result;\n  __ASM volatile(\"kslraw.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.62. KSLRAW.u ===== */\n\n/* ===== Inline Function Start for 3.63. KSTAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief KSTAS16 (SIMD 16-bit Signed Saturating Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSTAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element saturating addition and 16-bit signed integer element\n * saturating subtraction in a 32-bit chunk simultaneously. Operands are from corresponding\n * positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit signed integer element in [31:16] of 32-bit chunks in\n * Rs1 with the 16-bit signed integer element in [31:16] of 32-bit chunks in Rs2; at the same time, it\n * subtracts the 16-bit signed integer element in [15:0] of 32-bit chunks in Rs2 from the 16-bit signed\n * integer element in [15:0] of 32-bit chunks in Rs1. If any of the results are beyond the Q15 number\n * range (-2^15 <= Q15 <= 2^15-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to [31:16] of 32-bit chunks in Rd for addition and [15:0] of 32-bit chunks in Rd for\n * subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[x][31:16] + Rs2.W[x][31:16];\n * res2 = Rs1.W[x][15:0] - Rs2.W[x][15:0];\n * for (res in [res1, res2]) {\n *   if (res > (2^15)-1) {\n *     res = (2^15)-1;\n *     OV = 1;\n *   } else if (res < -2^15) {\n *     res = -2^15;\n *     OV = 1;\n *   }\n * }\n * Rd.W[x][31:16] = res1;\n * Rd.W[x][15:0] = res2;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSTAS16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"kstas16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.63. KSTAS16 ===== */\n\n/* ===== Inline Function Start for 3.64. KSTSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief KSTSA16 (SIMD 16-bit Signed Saturating Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSTSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element saturating subtraction and 16-bit signed integer element\n * saturating addition in a 32-bit chunk simultaneously. Operands are from corresponding positions in\n * 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit signed integer element in [31:16] of 32-bit chunks\n * in Rs2 from the 16-bit signed integer element in [31:16] of 32-bit chunks in Rs1; at the same time, it\n * adds the 16-bit signed integer element in [15:0] of 32-bit chunks in Rs2 with the 16-bit signed integer\n * element in [15:0] of 32-bit chunks in Rs1. If any of the results are beyond the Q15 number range (-2^15\n * <= Q15 <= 2^15-1), they are saturated to the range and the OV bit is set to 1. The saturated results are\n * written to [31:16] of 32-bit chunks in Rd for subtraction and [15:0] of 32-bit chunks in Rd for\n * addition.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[x][31:16] - Rs2.W[x][31:16];\n * res2 = Rs1.W[x][15:0] + Rs2.W[x][15:0];\n * for (res in [res1, res2]) {\n *   if (res > (2^15)-1) {\n *     res = (2^15)-1;\n *     OV = 1;\n *   } else if (res < -2^15) {\n *     res = -2^15;\n *     OV = 1;\n *   }\n * }\n * Rd.W[x][31:16] = res1;\n * Rd.W[x][15:0] = res2;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSTSA16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"kstsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.64. KSTSA16 ===== */\n\n/* ===== Inline Function Start for 3.65. KSUB8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief KSUB8 (SIMD 8-bit Signed Saturating Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSUB8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed elements saturating subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 8-bit signed integer elements in Rs2 from the 8-bit\n * signed integer elements in Rs1. If any of the results are beyond the Q7 number range (-2^7 <= Q7 <= 27\n * -1), they are saturated to the range and the OV bit is set to 1. The saturated results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.B[x] - Rs2.B[x];\n * if (res[x] > (2^7)-1) {\n *   res[x] = (2^7)-1;\n *   OV = 1;\n * } else if (res[x] < -2^7) {\n *   res[x] = -2^7;\n *   OV = 1;\n * }\n * Rd.B[x] = res[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSUB8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ksub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.65. KSUB8 ===== */\n\n/* ===== Inline Function Start for 3.66. KSUB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief KSUB16 (SIMD 16-bit Signed Saturating Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSUB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer elements saturating subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit signed integer elements in Rs2 from the 16-bit\n * signed integer elements in Rs1. If any of the results are beyond the Q15 number range (-2^15 <= Q15 <=\n * 2^15-1), they are saturated to the range and the OV bit is set to 1. The saturated results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.H[x] - Rs2.H[x];\n * if (res[x] > (2^15)-1) {\n *   res[x] = (2^15)-1;\n *   OV = 1;\n * } else if (res[x] < -2^15) {\n *   res[x] = -2^15;\n *   OV = 1;\n * }\n * Rd.H[x] = res[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSUB16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ksub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.66. KSUB16 ===== */\n\n/* ===== Inline Function Start for 3.67. KSUB64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief KSUB64 (64-bit Signed Saturating Subtraction)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * KSUB64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Perform a 64-bit signed integer subtraction. The result is saturated to the Q63 range.\n *\n * **RV32 Description**:\\n\n * This instruction subtracts the 64-bit signed integer of an even/odd pair of\n * registers specified by Rs2(4,1) from the 64-bit signed integer of an even/odd pair of registers\n * specified by Rs1(4,1). If the 64-bit result is beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is\n * saturated to the range and the OV bit is set to 1. The saturated result is then written to an even/odd\n * pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * This instruction subtracts the 64-bit signed integer of Rs2 from the 64-bit signed\n * integer of Rs1. If the 64-bit result is beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated\n * to the range and the OV bit is set to 1. The saturated result is then written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * a_L = CONCAT(Rs1(4,1),1'b0); a_H = CONCAT(Rs1(4,1),1'b1);\n * b_L = CONCAT(Rs2(4,1),1'b0); b_H = CONCAT(Rs2(4,1),1'b1);\n * result = R[a_H].R[a_L] - R[b_H].R[b_L];\n * if (result > (2^63)-1) {\n *   result = (2^63)-1; OV = 1;\n * } else if (result < -2^63) {\n *   result = -2^63; OV = 1;\n * }\n * R[t_H].R[t_L] = result;\n * RV64:\n * result = Rs1 - Rs2;\n * if (result > (2^63)-1) {\n *   result = (2^63)-1; OV = 1;\n * } else if (result < -2^63) {\n *   result = -2^63; OV = 1;\n * }\n * Rd = result;\n * ~~~\n *\n * \\param [in]  a    long long type of value stored in a\n * \\param [in]  b    long long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_KSUB64(long long a, long long b) {\n  register long long result;\n  __ASM volatile(\"ksub64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.67. KSUB64 ===== */\n\n/* ===== Inline Function Start for 3.68. KSUBH ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q15_SAT_ALU\n * \\brief KSUBH (Signed Subtraction with Q15 Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KSUBH Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Subtract the signed lower 32-bit content of two registers with Q15 saturation.\n *\n * **Description**:\\n\n * The signed lower 32-bit content of Rs2 is subtracted from the signed lower 32-bit\n * content of Rs1. And the result is saturated to the 16-bit signed integer range of [-2^15, 2^15-1] and then\n * sign-extended and written to Rd. If saturation happens, this instruction sets the OV flag.\n *\n * **Operations**:\\n\n * ~~~\n * tmp = Rs1.W[0] - Rs2.W[0];\n * if (tmp > (2^15)-1) {\n *   res = (2^15)-1;\n *   OV = 1;\n * } else if (tmp < -2^15) {\n *   res = -2^15;\n *   OV = 1\n * } else {\n *   res = tmp;\n * }\n * Rd = SE(res[15:0]);\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KSUBH(int a, int b) {\n  register long result;\n  __ASM volatile(\"ksubh %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.68. KSUBH ===== */\n\n/* ===== Inline Function Start for 3.69. KSUBW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KSUBW (Signed Subtraction with Q31 Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KSUBW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Subtract the signed lower 32-bit content of two registers with Q31 saturation.\n *\n * **Description**:\\n\n * The signed lower 32-bit content of Rs2 is subtracted from the signed lower 32-bit\n * content of Rs1. And the result is saturated to the 32-bit signed integer range of [-2^31, 2^31-1] and then\n * sign-extened and written to Rd. If saturation happens, this instruction sets the OV flag.\n *\n * **Operations**:\\n\n * ~~~\n * tmp = Rs1.W[0] - Rs2.W[0];\n * if (tmp > (2^31)-1) {\n *   res = (2^31)-1;\n *   OV = 1;\n * } else if (tmp < -2^31) {\n * res = -2^31;\n *   OV = 1\n * } else {\n *   res = tmp;\n * }\n * Rd = res[31:0]; // RV32\n * Rd = SE(res[31:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KSUBW(int a, int b) {\n  register long result;\n  __ASM volatile(\"ksubw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.69. KSUBW ===== */\n\n/* ===== Inline Function Start for 3.70.1. KWMMUL ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC\n * \\brief KWMMUL (SIMD Saturating MSW Signed Multiply Word & Double)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KWMMUL Rd, Rs1, Rs2\n * KWMMUL.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of two registers, shift the results left 1-bit,\n * saturate, and write the most significant 32-bit results to a register. The `.u` form additionally\n * rounds up the multiplication results from the most signification discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the 32-bit elements of Rs1 with the 32-bit elements of Rs2. It then shifts\n * the multiplication results one bit to the left and takes the most significant 32-bit results. If the\n * shifted result is greater than 2^31-1, it is saturated to 2^31-1 and the OV flag is set to 1. The final element\n * result is written to Rd. The 32-bit elements of Rs1 and Rs2 are treated as signed integers. The `.u`\n * form of the instruction additionally rounds up the 64-bit multiplication results by adding a 1 to bit\n * 30 before the shift and saturation operations.\n *\n * **Operations**:\\n\n * ~~~\n * if ((0x80000000 != Rs1.W[x]) | (0x80000000 != Rs2.W[x])) {\n *   Mres[x][63:0] = Rs1.W[x] * Rs2.W[x];\n *   if (`.u` form) {\n *     Round[x][33:0] = Mres[x][63:30] + 1;\n *     Rd.W[x] = Round[x][32:1];\n *   } else {\n *     Rd.W[x] = Mres[x][62:31];\n *   }\n * } else {\n *   Rd.W[x] = 0x7fffffff;\n *   OV = 1;\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KWMMUL(long a, long b) {\n  register long result;\n  __ASM volatile(\"kwmmul %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.70.1. KWMMUL ===== */\n\n/* ===== Inline Function Start for 3.70.2. KWMMUL.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC\n * \\brief KWMMUL.u (SIMD Saturating MSW Signed Multiply Word & Double with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KWMMUL Rd, Rs1, Rs2\n * KWMMUL.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of two registers, shift the results left 1-bit,\n * saturate, and write the most significant 32-bit results to a register. The `.u` form additionally\n * rounds up the multiplication results from the most signification discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the 32-bit elements of Rs1 with the 32-bit elements of Rs2. It then shifts\n * the multiplication results one bit to the left and takes the most significant 32-bit results. If the\n * shifted result is greater than 2^31-1, it is saturated to 2^31-1 and the OV flag is set to 1. The final element\n * result is written to Rd. The 32-bit elements of Rs1 and Rs2 are treated as signed integers. The `.u`\n * form of the instruction additionally rounds up the 64-bit multiplication results by adding a 1 to bit\n * 30 before the shift and saturation operations.\n *\n * **Operations**:\\n\n * ~~~\n * if ((0x80000000 != Rs1.W[x]) | (0x80000000 != Rs2.W[x])) {\n *   Mres[x][63:0] = Rs1.W[x] * Rs2.W[x];\n *   if (`.u` form) {\n *     Round[x][33:0] = Mres[x][63:30] + 1;\n *     Rd.W[x] = Round[x][32:1];\n *   } else {\n *     Rd.W[x] = Mres[x][62:31];\n *   }\n * } else {\n *   Rd.W[x] = 0x7fffffff;\n *   OV = 1;\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KWMMUL_U(long a, long b) {\n  register long result;\n  __ASM volatile(\"kwmmul.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.70.2. KWMMUL.u ===== */\n\n/* ===== Inline Function Start for 3.71. MADDR32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief MADDR32 (Multiply and Add to 32-Bit Word)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * MADDR32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit contents of two registers and add the lower 32-bit multiplication result\n * to the 32-bit content of a destination register. Write the final result back to the destination register.\n *\n * **Description**:\\n\n * This instruction multiplies the lower 32-bit content of Rs1 with that of Rs2. It adds the\n * lower 32-bit multiplication result to the lower 32-bit content of Rd and writes the final result (RV32)\n * or sign-extended result (RV64) back to Rd. The contents of Rs1 and Rs2 can be either signed or\n * unsigned integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Mresult = Rs1 * Rs2;\n * Rd = Rd + Mresult.W[0];\n * RV64:\n * Mresult = Rs1.W[0] * Rs2.W[0];\n * tres[31:0] = Rd.W[0] + Mresult.W[0];\n * Rd = SE64(tres[31:0]);\n * ~~~\n *\n * \\param [in]  t    unsigned long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_MADDR32(unsigned long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"maddr32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.71. MADDR32 ===== */\n\n/* ===== Inline Function Start for 3.72. MAXW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION\n * \\brief MAXW (32-bit Signed Word Maximum)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * MAXW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Get the larger value from the 32-bit contents of two general registers.\n *\n * **Description**:\\n\n * This instruction compares two signed 32-bit integers stored in Rs1 and Rs2, picks the\n * larger value as the result, and writes the result to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs1.W[0] >= Rs2.W[0]) {\n *   Rd = SE(Rs1.W[0]);\n * } else {\n *   Rd = SE(Rs2.W[0]);\n * }\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_MAXW(int a, int b) {\n  register long result;\n  __ASM volatile(\"maxw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.72. MAXW ===== */\n\n/* ===== Inline Function Start for 3.73. MINW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION\n * \\brief MINW (32-bit Signed Word Minimum)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * MINW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Get the smaller value from the 32-bit contents of two general registers.\n *\n * **Description**:\\n\n * This instruction compares two signed 32-bit integers stored in Rs1 and Rs2, picks the\n * smaller value as the result, and writes the result to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs1.W[0] >= Rs2.W[0]) { Rd = SE(Rs2.W[0]); } else { Rd = SE(Rs1.W[0]); }\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_MINW(int a, int b) {\n  register long result;\n  __ASM volatile(\"minw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.73. MINW ===== */\n\n/* ===== Inline Function Start for 3.74. MSUBR32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief MSUBR32 (Multiply and Subtract from 32-Bit Word)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * MSUBR32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit contents of two registers and subtract the lower 32-bit multiplication\n * result from the 32-bit content of a destination register. Write the final result back to the destination\n * register.\n *\n * **Description**:\\n\n * This instruction multiplies the lower 32-bit content of Rs1 with that of Rs2, subtracts\n * the lower 32-bit multiplication result from the lower 32-bit content of Rd, then writes the final\n * result (RV32) or sign-extended result (RV64) back to Rd. The contents of Rs1 and Rs2 can be either\n * signed or unsigned integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Mresult = Rs1 * Rs2;\n * Rd = Rd - Mresult.W[0];\n * RV64:\n * Mresult = Rs1.W[0] * Rs2.W[0];\n * tres[31:0] = Rd.W[0] - Mresult.W[0];\n * Rd = SE64(tres[31:0]);\n * ~~~\n *\n * \\param [in]  t    unsigned long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_MSUBR32(unsigned long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"msubr32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.74. MSUBR32 ===== */\n\n/* ===== Inline Function Start for 3.75. MULR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION\n * \\brief MULR64 (Multiply Word Unsigned to 64-bit Data)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * MULR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit unsigned integer contents of two registers and write the 64-bit result.\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit content of Rs1 with that of Rs2 and writes the 64-bit\n * multiplication result to an even/odd pair of registers containing Rd. Rd(4,1) index d determines the\n * even/odd pair group of the two registers. Specifically, the register pair includes register 2d and\n * 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n * The lower 32-bit contents of Rs1 and Rs2 are treated as unsigned integers.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the lower 32-bit content of Rs1 with that of Rs2 and writes the 64-bit\n * multiplication result to Rd.\n * The lower 32-bit contents of Rs1 and Rs2 are treated as unsigned integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Mresult = CONCAT(1`b0,Rs1) u* CONCAT(1`b0,Rs2);\n * R[Rd(4,1).1(0)][31:0] = Mresult[63:32];\n * R[Rd(4,1).0(0)][31:0] = Mresult[31:0];\n * RV64:\n * Rd = Mresult[63:0];\n * Mresult = CONCAT(1`b0,Rs1.W[0]) u* CONCAT(1`b0,Rs2.W[0]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_MULR64(unsigned long a, unsigned long b) {\n  register unsigned long long result;\n  __ASM volatile(\"mulr64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.75. MULR64 ===== */\n\n/* ===== Inline Function Start for 3.76. MULSR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION\n * \\brief MULSR64 (Multiply Word Signed to 64-bit Data)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * MULSR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit signed integer contents of two registers and write the 64-bit result.\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the lower 32-bit content of Rs1 with the lower 32-bit content of Rs2 and\n * writes the 64-bit multiplication result to an even/odd pair of registers containing Rd. Rd(4,1) index d\n * determines the even/odd pair group of the two registers. Specifically, the register pair includes\n * register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n * The lower 32-bit contents of Rs1 and Rs2 are treated as signed integers.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the lower 32-bit content of Rs1 with the lower 32-bit content of Rs2 and\n * writes the 64-bit multiplication result to Rd.\n * The lower 32-bit contents of Rs1 and Rs2 are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Mresult = Ra s* Rb;\n * R[Rd(4,1).1(0)][31:0] = Mresult[63:32];\n * R[Rd(4,1).0(0)][31:0] = Mresult[31:0];\n * RV64:\n * Mresult = Ra.W[0] s* Rb.W[0];\n * Rd = Mresult[63:0];\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_MULSR64(long a, long b) {\n  register long long result;\n  __ASM volatile(\"mulsr64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.76. MULSR64 ===== */\n\n/* ===== Inline Function Start for 3.77. PBSAD ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_MISC\n * \\brief PBSAD (Parallel Byte Sum of Absolute Difference)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * PBSAD Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Calculate the sum of absolute difference of unsigned 8-bit data elements.\n *\n * **Description**:\\n\n * This instruction subtracts the un-signed 8-bit elements of Rs2 from those of Rs1. Then\n * it adds the absolute value of each difference together and writes the result to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * absdiff[x] = ABS(Rs1.B[x] - Rs2.B[x]);\n * Rd = SUM(absdiff[x]);\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PBSAD(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"pbsad %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.77. PBSAD ===== */\n\n/* ===== Inline Function Start for 3.78. PBSADA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_MISC\n * \\brief PBSADA (Parallel Byte Sum of Absolute Difference Accum)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * PBSADA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Calculate the sum of absolute difference of four unsigned 8-bit data elements and\n * accumulate it into a register.\n *\n * **Description**:\\n\n * This instruction subtracts the un-signed 8-bit elements of Rs2 from those of Rs1. It\n * then adds the absolute value of each difference together along with the content of Rd and writes the\n * accumulated result back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * absdiff[x] = ABS(Rs1.B[x] - Rs2.B[x]);\n * Rd = Rd + SUM(absdiff[x]);\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  t    unsigned long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PBSADA(unsigned long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"pbsada %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.78. PBSADA ===== */\n\n/* ===== Inline Function Start for 3.79.1. PKBB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_PACK\n * \\brief PKBB16 (Pack Two 16-bit Data from Both Bottom Half)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * PKBB16 Rd, Rs1, Rs2\n * PKBT16 Rd, Rs1, Rs2\n * PKTT16 Rd, Rs1, Rs2\n * PKTB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Pack 16-bit data from 32-bit chunks in two registers.\n * * PKBB16: bottom.bottom\n * * PKBT16 bottom.top\n * * PKTT16 top.top\n * * PKTB16 top.bottom\n *\n * **Description**:\\n\n * (PKBB16) moves Rs1.W[x][15:0] to Rd.W[x][31:16] and moves Rs2.W[x] [15:0] to\n * Rd.W[x] [15:0].\n * (PKBT16) moves Rs1.W[x] [15:0] to Rd.W[x] [31:16] and moves Rs2.W[x] [31:16] to Rd.W[x] [15:0].\n * (PKTT16) moves Rs1.W[x] [31:16] to Rd.W[x] [31:16] and moves Rs2.W[x] [31:16] to Rd.W[x] [15:0].\n * (PKTB16) moves Rs1.W[x] [31:16] to Rd.W[x] [31:16] and moves Rs2.W[x] [15:0] to Rd.W[x] [15:0].\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][15:0], Rs2.W[x][15:0]); // PKBB16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][15:0], Rs2.W[x][31:16]); // PKBT16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][31:16], Rs2.W[x][15:0]); // PKTB16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][31:16], Rs2.W[x][31:16]); // PKTT16\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PKBB16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"pkbb16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.79.1. PKBB16 ===== */\n\n/* ===== Inline Function Start for 3.79.2. PKBT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_PACK\n * \\brief PKBT16 (Pack Two 16-bit Data from Bottom and Top Half)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * PKBB16 Rd, Rs1, Rs2\n * PKBT16 Rd, Rs1, Rs2\n * PKTT16 Rd, Rs1, Rs2\n * PKTB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Pack 16-bit data from 32-bit chunks in two registers.\n * * PKBB16: bottom.bottom\n * * PKBT16 bottom.top\n * * PKTT16 top.top\n * * PKTB16 top.bottom\n *\n * **Description**:\\n\n * (PKBB16) moves Rs1.W[x][15:0] to Rd.W[x][31:16] and moves Rs2.W[x] [15:0] to\n * Rd.W[x] [15:0].\n * (PKBT16) moves Rs1.W[x] [15:0] to Rd.W[x] [31:16] and moves Rs2.W[x] [31:16] to Rd.W[x] [15:0].\n * (PKTT16) moves Rs1.W[x] [31:16] to Rd.W[x] [31:16] and moves Rs2.W[x] [31:16] to Rd.W[x] [15:0].\n * (PKTB16) moves Rs1.W[x] [31:16] to Rd.W[x] [31:16] and moves Rs2.W[x] [15:0] to Rd.W[x] [15:0].\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][15:0], Rs2.W[x][15:0]); // PKBB16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][15:0], Rs2.W[x][31:16]); // PKBT16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][31:16], Rs2.W[x][15:0]); // PKTB16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][31:16], Rs2.W[x][31:16]); // PKTT16\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PKBT16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"pkbt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.79.2. PKBT16 ===== */\n\n/* ===== Inline Function Start for 3.79.3. PKTT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_PACK\n * \\brief PKTT16 (Pack Two 16-bit Data from Both Top Half)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * PKBB16 Rd, Rs1, Rs2\n * PKBT16 Rd, Rs1, Rs2\n * PKTT16 Rd, Rs1, Rs2\n * PKTB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Pack 16-bit data from 32-bit chunks in two registers.\n * * PKBB16: bottom.bottom\n * * PKBT16 bottom.top\n * * PKTT16 top.top\n * * PKTB16 top.bottom\n *\n * **Description**:\\n\n * (PKBB16) moves Rs1.W[x][15:0] to Rd.W[x][31:16] and moves Rs2.W[x] [15:0] to\n * Rd.W[x] [15:0].\n * (PKBT16) moves Rs1.W[x] [15:0] to Rd.W[x] [31:16] and moves Rs2.W[x] [31:16] to Rd.W[x] [15:0].\n * (PKTT16) moves Rs1.W[x] [31:16] to Rd.W[x] [31:16] and moves Rs2.W[x] [31:16] to Rd.W[x] [15:0].\n * (PKTB16) moves Rs1.W[x] [31:16] to Rd.W[x] [31:16] and moves Rs2.W[x] [15:0] to Rd.W[x] [15:0].\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][15:0], Rs2.W[x][15:0]); // PKBB16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][15:0], Rs2.W[x][31:16]); // PKBT16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][31:16], Rs2.W[x][15:0]); // PKTB16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][31:16], Rs2.W[x][31:16]); // PKTT16\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PKTT16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"pktt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.79.3. PKTT16 ===== */\n\n/* ===== Inline Function Start for 3.79.4. PKTB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_PACK\n * \\brief PKTB16 (Pack Two 16-bit Data from Top and Bottom Half)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * PKBB16 Rd, Rs1, Rs2\n * PKBT16 Rd, Rs1, Rs2\n * PKTT16 Rd, Rs1, Rs2\n * PKTB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Pack 16-bit data from 32-bit chunks in two registers.\n * * PKBB16: bottom.bottom\n * * PKBT16 bottom.top\n * * PKTT16 top.top\n * * PKTB16 top.bottom\n *\n * **Description**:\\n\n * (PKBB16) moves Rs1.W[x][15:0] to Rd.W[x][31:16] and moves Rs2.W[x] [15:0] to\n * Rd.W[x] [15:0].\n * (PKBT16) moves Rs1.W[x] [15:0] to Rd.W[x] [31:16] and moves Rs2.W[x] [31:16] to Rd.W[x] [15:0].\n * (PKTT16) moves Rs1.W[x] [31:16] to Rd.W[x] [31:16] and moves Rs2.W[x] [31:16] to Rd.W[x] [15:0].\n * (PKTB16) moves Rs1.W[x] [31:16] to Rd.W[x] [31:16] and moves Rs2.W[x] [15:0] to Rd.W[x] [15:0].\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][15:0], Rs2.W[x][15:0]); // PKBB16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][15:0], Rs2.W[x][31:16]); // PKBT16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][31:16], Rs2.W[x][15:0]); // PKTB16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][31:16], Rs2.W[x][31:16]); // PKTT16\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PKTB16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"pktb16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.79.4. PKTB16 ===== */\n\n/* ===== Inline Function Start for 3.80. RADD8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief RADD8 (SIMD 8-bit Signed Halving Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * RADD8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed integer element additions simultaneously. The element results are halved\n * to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 8-bit signed integer elements in Rs1 with the 8-bit signed\n * integer elements in Rs2. The results are first arithmetically right-shifted by 1 bit and then written to\n * Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Rs1 = 0x7F, Rs2 = 0x7F, Rd = 0x7F\n * * Rs1 = 0x80, Rs2 = 0x80, Rd = 0x80\n * * Rs1 = 0x40, Rs2 = 0x80, Rd = 0xE0\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] + Rs2.B[x]) s>> 1; for RV32: x=3...0, for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RADD8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"radd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.80. RADD8 ===== */\n\n/* ===== Inline Function Start for 3.81. RADD16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief RADD16 (SIMD 16-bit Signed Halving Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * RADD16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element additions simultaneously. The results are halved to avoid\n * overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit signed integer elements in Rs1 with the 16-bit signed\n * integer elements in Rs2. The results are first arithmetically right-shifted by 1 bit and then written to\n * Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Rs1 = 0x7FFF, Rs2 = 0x7FFF, Rd = 0x7FFF\n * * Rs1 = 0x8000, Rs2 = 0x8000, Rd = 0x8000\n * * Rs1 = 0x4000, Rs2 = 0x8000, Rd = 0xE000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] + Rs2.H[x]) s>> 1; for RV32: x=1...0, for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RADD16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"radd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.81. RADD16 ===== */\n\n/* ===== Inline Function Start for 3.82. RADD64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief RADD64 (64-bit Signed Halving Addition)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * RADD64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add two 64-bit signed integers. The result is halved to avoid overflow or saturation.\n *\n * **RV32 Description**:\\n\n * This instruction adds the 64-bit signed integer of an even/odd pair of registers\n * specified by Rs1(4,1) with the 64-bit signed integer of an even/odd pair of registers specified by\n * Rs2(4,1). The 64-bit addition result is first arithmetically right-shifted by 1 bit and then written to an\n * even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., value d, determines the even/odd pair group of two registers. Specifically, the register\n * pair includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction adds the 64-bit signed integer in Rs1 with the 64-bit signed\n * integer in Rs2. The 64-bit addition result is first arithmetically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * a_L = CONCAT(Rs1(4,1),1'b0); a_H = CONCAT(Rs1(4,1),1'b1);\n * b_L = CONCAT(Rs2(4,1),1'b0); b_H = CONCAT(Rs2(4,1),1'b1);\n * R[t_H].R[t_L] = (R[a_H].R[a_L] + R[b_H].R[b_L]) s>> 1;\n * RV64:\n * Rd = (Rs1 + Rs2) s>> 1;\n * ~~~\n *\n * \\param [in]  a    long long type of value stored in a\n * \\param [in]  b    long long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_RADD64(long long a, long long b) {\n  register long long result;\n  __ASM volatile(\"radd64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.82. RADD64 ===== */\n\n/* ===== Inline Function Start for 3.83. RADDW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION\n * \\brief RADDW (32-bit Signed Halving Addition)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * RADDW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add 32-bit signed integers and the results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the first 32-bit signed integer in Rs1 with the first 32-bit signed\n * integer in Rs2. The result is first arithmetically right-shifted by 1 bit and then sign-extended and\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Rs1 = 0x7FFFFFFF, Rs2 = 0x7FFFFFFF, Rd = 0x7FFFFFFF\n * * Rs1 = 0x80000000, Rs2 = 0x80000000, Rd = 0x80000000\n * * Rs1 = 0x40000000, Rs2 = 0x80000000, Rd = 0xE0000000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Rd[31:0] = (Rs1[31:0] + Rs2[31:0]) s>> 1;\n * RV64:\n * resw[31:0] = (Rs1[31:0] + Rs2[31:0]) s>> 1;\n * Rd[63:0] = SE(resw[31:0]);\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_RADDW(int a, int b) {\n  register long result;\n  __ASM volatile(\"raddw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.83. RADDW ===== */\n\n/* ===== Inline Function Start for 3.84. RCRAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief RCRAS16 (SIMD 16-bit Signed Halving Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * RCRAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element addition and 16-bit signed integer element subtraction in\n * a 32-bit chunk simultaneously. Operands are from crossed positions in 32-bit chunks. The results\n * are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit signed integer element in [31:16] of 32-bit chunks in\n * Rs1 with the 16-bit signed integer element in [15:0] of 32-bit chunks in Rs2, and subtracts the 16-bit\n * signed integer element in [31:16] of 32-bit chunks in Rs2 from the 16-bit signed integer element in\n * [15:0] of 32-bit chunks in Rs1. The element results are first arithmetically right-shifted by 1 bit and\n * then written to [31:16] of 32-bit chunks in Rd and [15:0] of 32-bit chunks in Rd.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `RADD16` and `RSUB16` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = (Rs1.W[x][31:16] + Rs2.W[x][15:0]) s>> 1;\n * Rd.W[x][15:0] = (Rs1.W[x][15:0] - Rs2.W[x][31:16]) s>> 1;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RCRAS16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"rcras16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.84. RCRAS16 ===== */\n\n/* ===== Inline Function Start for 3.85. RCRSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief RCRSA16 (SIMD 16-bit Signed Halving Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * RCRSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element subtraction and 16-bit signed integer element addition in\n * a 32-bit chunk simultaneously. Operands are from crossed positions in 32-bit chunks. The results\n * are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit signed integer element in [15:0] of 32-bit chunks\n * in Rs2 from the 16-bit signed integer element in [31:16] of 32-bit chunks in Rs1, and adds the 16-bit\n * signed element integer in [15:0] of 32-bit chunks in Rs1 with the 16-bit signed integer element in\n * [31:16] of 32-bit chunks in Rs2. The two results are first arithmetically right-shifted by 1 bit and\n * then written to [31:16] of 32-bit chunks in Rd and [15:0] of 32-bit chunks in Rd.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `RADD16` and `RSUB16` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = (Rs1.W[x][31:16] - Rs2.W[x][15:0]) s>> 1;\n * Rd.W[x][15:0] = (Rs1.W[x][15:0] + Rs2.W[x][31:16]) s>> 1;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RCRSA16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"rcrsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.85. RCRSA16 ===== */\n\n/* ===== Inline Function Start for 3.86. RDOV ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_OV_FLAG_SC\n * \\brief RDOV (Read OV flag)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * RDOV Rd  # pseudo mnemonic\n * ~~~\n *\n * **Purpose**:\\n\n * This pseudo instruction is an alias to `CSRR Rd, ucode` instruction which maps to the real\n * instruction of `CSRRS Rd, ucode, x0`.\n *\n *\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RDOV(void) {\n  register unsigned long result;\n  __ASM volatile(\"rdov %0\" : \"=r\"(result));\n  return result;\n}\n/* ===== Inline Function End for 3.86. RDOV ===== */\n\n/* ===== Inline Function Start for 3.87. RSTAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief RSTAS16 (SIMD 16-bit Signed Halving Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * RSTAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element addition and 16-bit signed integer element subtraction in\n * a 32-bit chunk simultaneously. Operands are from corresponding positions in 32-bit chunks. The\n * results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit signed integer element in [31:16] of 32-bit chunks in\n * Rs1 with the 16-bit signed integer element in [31:16] of 32-bit chunks in Rs2, and subtracts the 16-bit\n * signed integer element in [15:0] of 32-bit chunks in Rs2 from the 16-bit signed integer element in\n * [15:0] of 32-bit chunks in Rs1. The element results are first arithmetically right-shifted by 1 bit and\n * then written to [31:16] of 32-bit chunks in Rd and [15:0] of 32-bit chunks in Rd.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `RADD16` and `RSUB16` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = (Rs1.W[x][31:16] + Rs2.W[x][31:16]) s>> 1;\n * Rd.W[x][15:0] = (Rs1.W[x][15:0] - Rs2.W[x][15:0]) s>> 1;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RSTAS16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"rstas16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.87. RSTAS16 ===== */\n\n/* ===== Inline Function Start for 3.88. RSTSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief RSTSA16 (SIMD 16-bit Signed Halving Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * RSTSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element subtraction and 16-bit signed integer element addition in\n * a 32-bit chunk simultaneously. Operands are from corresponding positions in 32-bit chunks. The\n * results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit signed integer element in [31:16] of 32-bit chunks\n * in Rs2 from the 16-bit signed integer element in [31:16] of 32-bit chunks in Rs1, and adds the 16-bit\n * signed element integer in [15:0] of 32-bit chunks in Rs1 with the 16-bit signed integer element in\n * [15:0] of 32-bit chunks in Rs2. The two results are first arithmetically right-shifted by 1 bit and then\n * written to [31:16] of 32-bit chunks in Rd and [15:0] of 32-bit chunks in Rd.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `RADD16` and `RSUB16` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = (Rs1.W[x][31:16] - Rs2.W[x][31:16]) s>> 1;\n * Rd.W[x][15:0] = (Rs1.W[x][15:0] + Rs2.W[x][15:0]) s>> 1;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RSTSA16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"rstsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.88. RSTSA16 ===== */\n\n/* ===== Inline Function Start for 3.89. RSUB8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief RSUB8 (SIMD 8-bit Signed Halving Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * RSUB8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed integer element subtractions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 8-bit signed integer elements in Rs2 from the 8-bit\n * signed integer elements in Rs1. The results are first arithmetically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Rs1 = 0x7F, Rs2 = 0x80, Rd = 0x7F\n * * Rs1 = 0x80, Rs2 = 0x7F, Rd = 0x80\n * * Rs1= 0x80, Rs2 = 0x40, Rd = 0xA0\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] - Rs2.B[x]) s>> 1;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RSUB8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"rsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.89. RSUB8 ===== */\n\n/* ===== Inline Function Start for 3.90. RSUB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief RSUB16 (SIMD 16-bit Signed Halving Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * RSUB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element subtractions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit signed integer elements in Rs2 from the 16-bit\n * signed integer elements in Rs1. The results are first arithmetically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7FFF, Rb = 0x8000, Rt = 0x7FFF\n * * Ra = 0x8000, Rb = 0x7FFF, Rt = 0x8000\n * * Ra = 0x8000, Rb = 0x4000, Rt = 0xA000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] - Rs2.H[x]) s>> 1;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RSUB16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"rsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.90. RSUB16 ===== */\n\n/* ===== Inline Function Start for 3.91. RSUB64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief RSUB64 (64-bit Signed Halving Subtraction)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * RSUB64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Perform a 64-bit signed integer subtraction. The result is halved to avoid overflow or\n * saturation.\n *\n * **RV32 Description**:\\n\n * This instruction subtracts the 64-bit signed integer of an even/odd pair of\n * registers specified by Rb(4,1) from the 64-bit signed integer of an even/odd pair of registers\n * specified by Ra(4,1). The subtraction result is first arithmetically right-shifted by 1 bit and then\n * written to an even/odd pair of registers specified by Rt(4,1).\n * Rx(4,1), i.e., value d, determines the even/odd pair group of two registers. Specifically, the register\n * pair includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction subtracts the 64-bit signed integer in Rs2 from the 64-bit signed\n * integer in Rs1. The 64-bit subtraction result is first arithmetically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * a_L = CONCAT(Rs1(4,1),1'b0); a_H = CONCAT(Rs1(4,1),1'b1);\n * b_L = CONCAT(Rs2(4,1),1'b0); b_H = CONCAT(Rs2(4,1),1'b1);\n * R[t_H].R[t_L] = (R[a_H].R[a_L] - R[b_H].R[b_L]) s>> 1;\n * RV64:\n * Rd = (Rs1 - Rs2) s>> 1;\n * ~~~\n *\n * \\param [in]  a    long long type of value stored in a\n * \\param [in]  b    long long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_RSUB64(long long a, long long b) {\n  register long long result;\n  __ASM volatile(\"rsub64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.91. RSUB64 ===== */\n\n/* ===== Inline Function Start for 3.92. RSUBW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION\n * \\brief RSUBW (32-bit Signed Halving Subtraction)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * RSUBW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Subtract 32-bit signed integers and the result is halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the first 32-bit signed integer in Rs2 from the first 32-bit\n * signed integer in Rs1. The result is first arithmetically right-shifted by 1 bit and then sign-extended\n * and written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Rs1 = 0x7FFFFFFF, Rs2 = 0x80000000, Rd = 0x7FFFFFFF\n * * Rs1 = 0x80000000, Rs2 = 0x7FFFFFFF, Rd = 0x80000000\n * * Rs1 = 0x80000000, Rs2 = 0x40000000, Rd = 0xA0000000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Rd[31:0] = (Rs1[31:0] - Rs2[31:0]) s>> 1;\n * RV64:\n * resw[31:0] = (Rs1[31:0] - Rs2[31:0]) s>> 1;\n * Rd[63:0] = SE(resw[31:0]);\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_RSUBW(int a, int b) {\n  register long result;\n  __ASM volatile(\"rsubw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.92. RSUBW ===== */\n\n/* ===== Inline Function Start for 3.93. SCLIP8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief SCLIP8 (SIMD 8-bit Signed Clip Value)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SCLIP8 Rd, Rs1, imm3u[2:0]\n * ~~~\n *\n * **Purpose**:\\n\n * Limit the 8-bit signed integer elements of a register into a signed range simultaneously.\n *\n * **Description**:\\n\n * This instruction limits the 8-bit signed integer elements stored in Rs1 into a signed\n * integer range between 2^imm3u-1 and -2^imm3u, and writes the limited results to Rd. For example, if\n * imm3u is 3, the 8-bit input values should be saturated between 7 and -8. If saturation is performed,\n * set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.B[x];\n * if (src > (2^imm3u)-1) {\n *   src = (2^imm3u)-1;\n *   OV = 1;\n * } else if (src < -2^imm3u) {\n *   src = -2^imm3u;\n *   OV = 1;\n * }\n * Rd.B[x] = src\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SCLIP8(a, b)                                                  \\\n  ({                                                                       \\\n    register unsigned long result;                                         \\\n    register unsigned long __a = (unsigned long)(a);                       \\\n    __ASM volatile(\"sclip8 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                \\\n  })\n/* ===== Inline Function End for 3.93. SCLIP8 ===== */\n\n/* ===== Inline Function Start for 3.94. SCLIP16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief SCLIP16 (SIMD 16-bit Signed Clip Value)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SCLIP16 Rd, Rs1, imm4u[3:0]\n * ~~~\n *\n * **Purpose**:\\n\n * Limit the 16-bit signed integer elements of a register into a signed range simultaneously.\n *\n * **Description**:\\n\n * This instruction limits the 16-bit signed integer elements stored in Rs1 into a signed\n * integer range between 2imm4u-1 and -2imm4u, and writes the limited results to Rd. For example, if\n * imm4u is 3, the 16-bit input values should be saturated between 7 and -8. If saturation is performed,\n * set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.H[x];\n * if (src > (2^imm4u)-1) {\n *   src = (2^imm4u)-1;\n *   OV = 1;\n * } else if (src < -2^imm4u) {\n *   src = -2^imm4u;\n *   OV = 1;\n * }\n * Rd.H[x] = src\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SCLIP16(a, b)                                                  \\\n  ({                                                                        \\\n    register unsigned long result;                                          \\\n    register unsigned long __a = (unsigned long)(a);                        \\\n    __ASM volatile(\"sclip16 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                 \\\n  })\n/* ===== Inline Function End for 3.94. SCLIP16 ===== */\n\n/* ===== Inline Function Start for 3.95. SCLIP32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_MISC\n * \\brief SCLIP32 (SIMD 32-bit Signed Clip Value)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SCLIP32 Rd, Rs1, imm5u[4:0]\n * ~~~\n *\n * **Purpose**:\\n\n * Limit the 32-bit signed integer elements of a register into a signed range simultaneously.\n *\n * **Description**:\\n\n * This instruction limits the 32-bit signed integer elements stored in Rs1 into a signed\n * integer range between 2imm5u-1 and -2imm5u, and writes the limited results to Rd. For example, if\n * imm5u is 3, the 32-bit input values should be saturated between 7 and -8. If saturation is performed,\n * set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.W[x];\n * if (src > (2^imm5u)-1) {\n *   src = (2^imm5u)-1;\n *   OV = 1;\n * } else if (src < -2^imm5u) {\n *   src = -2^imm5u;\n *   OV = 1;\n * }\n * Rd.W[x] = src\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n#define __RV_SCLIP32(a, b)                                                  \\\n  ({                                                                        \\\n    register long result;                                                   \\\n    register long __a = (long)(a);                                          \\\n    __ASM volatile(\"sclip32 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                 \\\n  })\n/* ===== Inline Function End for 3.95. SCLIP32 ===== */\n\n/* ===== Inline Function Start for 3.96. SCMPLE8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_CMP\n * \\brief SCMPLE8 (SIMD 8-bit Signed Compare Less Than & Equal)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SCMPLE8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed integer elements less than & equal comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit signed integer elements in Rs1 with the 8-bit\n * signed integer elements in Rs2 to see if the one in Rs1 is less than or equal to the one in Rs2. If it is\n * true, the result is 0xFF; otherwise, the result is 0x0. The element comparison results are written to\n * Rd\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] {le} Rs2.B[x])? 0xff : 0x0;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SCMPLE8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"scmple8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.96. SCMPLE8 ===== */\n\n/* ===== Inline Function Start for 3.97. SCMPLE16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_CMP\n * \\brief SCMPLE16 (SIMD 16-bit Signed Compare Less Than & Equal)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SCMPLE16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer elements less than & equal comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit signed integer elements in Rs1 with the 16-bit\n * signed integer elements in Rs2 to see if the one in Rs1 is less than or equal to the one in Rs2. If it is\n * true, the result is 0xFFFF; otherwise, the result is 0x0. The element comparison results are written\n * to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] {le} Rs2.H[x])? 0xffff : 0x0;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SCMPLE16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"scmple16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.97. SCMPLE16 ===== */\n\n/* ===== Inline Function Start for 3.98. SCMPLT8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_CMP\n * \\brief SCMPLT8 (SIMD 8-bit Signed Compare Less Than)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SCMPLT8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed integer elements less than comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit signed integer elements in Rs1 with the 8-bit\n * signed integer elements in Rs2 to see if the one in Rs1 is less than the one in Rs2. If it is true, the\n * result is 0xFF; otherwise, the result is 0x0. The element comparison results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] < Rs2.B[x])? 0xff : 0x0;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SCMPLT8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"scmplt8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.98. SCMPLT8 ===== */\n\n/* ===== Inline Function Start for 3.99. SCMPLT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_CMP\n * \\brief SCMPLT16 (SIMD 16-bit Signed Compare Less Than)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SCMPLT16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer elements less than comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit signed integer elements in Rs1 with the two 16-\n * bit signed integer elements in Rs2 to see if the one in Rs1 is less than the one in Rs2. If it is true, the\n * result is 0xFFFF; otherwise, the result is 0x0. The element comparison results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] < Rs2.H[x])? 0xffff : 0x0;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SCMPLT16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"scmplt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.99. SCMPLT16 ===== */\n\n/* ===== Inline Function Start for 3.100. SLL8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SLL8 (SIMD 8-bit Shift Left Logical)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SLL8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical left shift operations simultaneously. The shift amount is a\n * variable from a GPR.\n *\n * **Description**:\\n\n * The 8-bit elements in Rs1 are left-shifted logically. And the results are written to Rd.\n * The shifted out bits are filled with zero and the shift amount is specified by the low-order 3-bits of\n * the value in the Rs2 register.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[2:0];\n * Rd.B[x] = Rs1.B[x] << sa;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SLL8(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"sll8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.100. SLL8 ===== */\n\n/* ===== Inline Function Start for 3.101. SLLI8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SLLI8 (SIMD 8-bit Shift Left Logical Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SLLI8 Rd, Rs1, imm3u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical left shift operations simultaneously. The shift amount is an\n * immediate value.\n *\n * **Description**:\\n\n * The 8-bit elements in Rs1 are left-shifted logically. And the results are written to Rd.\n * The shifted out bits are filled with zero and the shift amount is specified by the imm3u constant.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm3u[2:0];\n * Rd.B[x] = Rs1.B[x] << sa;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SLLI8(a, b)                                                  \\\n  ({                                                                      \\\n    register unsigned long result;                                        \\\n    register unsigned long __a = (unsigned long)(a);                      \\\n    __ASM volatile(\"slli8 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                               \\\n  })\n/* ===== Inline Function End for 3.101. SLLI8 ===== */\n\n/* ===== Inline Function Start for 3.102. SLL16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SLL16 (SIMD 16-bit Shift Left Logical)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SLL16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical left shift operations simultaneously. The shift amount is a\n * variable from a GPR.\n *\n * **Description**:\\n\n * The 16-bit elements in Rs1 are left-shifted logically. And the results are written to Rd.\n * The shifted out bits are filled with zero and the shift amount is specified by the low-order 4-bits of\n * the value in the Rs2 register.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[3:0];\n * Rd.H[x] = Rs1.H[x] << sa;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SLL16(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"sll16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.102. SLL16 ===== */\n\n/* ===== Inline Function Start for 3.103. SLLI16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SLLI16 (SIMD 16-bit Shift Left Logical Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SLLI16 Rd, Rs1, imm4[3:0]\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit element logical left shift operations simultaneously. The shift amount is an\n * immediate value.\n *\n * **Description**:\\n\n * The 16-bit elements in Rs1 are left-shifted logically. The shifted out bits are filled with\n * zero and the shift amount is specified by the imm4[3:0] constant. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm4[3:0];\n * Rd.H[x] = Rs1.H[x] << sa;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SLLI16(a, b)                                                  \\\n  ({                                                                       \\\n    register unsigned long result;                                         \\\n    register unsigned long __a = (unsigned long)(a);                       \\\n    __ASM volatile(\"slli16 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                \\\n  })\n/* ===== Inline Function End for 3.103. SLLI16 ===== */\n\n/* ===== Inline Function Start for 3.104. SMAL ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMAL (Signed Multiply Halfs & Add 64-bit)\n * \\details\n * **Type**: Partial-SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMAL Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed bottom 16-bit content of the 32-bit elements of a register with the top\n * 16-bit content of the same 32-bit elements of the same register, and add the results with a 64-bit\n * value of an even/odd pair of registers (RV32) or a register (RV64). The addition result is written back\n * to another even/odd pair of registers (RV32) or a register (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the bottom 16-bit content of the lower 32-bit of Rs2 with the top 16-bit\n * content of the lower 32-bit of Rs2 and adds the result with the 64-bit value of an even/odd pair of\n * registers specified by Rs1(4,1). The 64-bit addition result is written back to an even/odd pair of\n * registers specified by Rd(4,1). The 16-bit values of Rs2, and the 64-bit value of the Rs1(4,1) register-\n * pair are treated as signed integers.\n * Rx(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the bottom 16-bit content of the 32-bit elements of Rs2 with the top 16-bit\n * content of the same 32-bit elements of Rs2 and adds the results with the 64-bit value of Rs1. The 64-\n * bit addition result is written back to Rd. The 16-bit values of Rs2, and the 64-bit value of Rs1 are\n * treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Mres[31:0] = Rs2.H[1] * Rs2.H[0];\n * Idx0 = CONCAT(Rs1(4,1),1'b0); Idx1 = CONCAT(Rs1(4,1),1'b1); +\n * Idx2 = CONCAT(Rd(4,1),1'b0); Idx3 = CONCAT(Rd(4,1),1'b1);\n * R[Idx3].R[Idx2] = R[Idx1].R[Idx0] + SE64(Mres[31:0]);\n * RV64:\n * Mres[0][31:0] = Rs2.W[0].H[1] * Rs2.W[0].H[0];\n * Mres[1][31:0] = Rs2.W[1].H[1] * Rs2.W[1].H[0];\n * Rd = Rs1 + SE64(Mres[1][31:0]) + SE64(Mres[0][31:0]);\n * ~~~\n *\n * \\param [in]  a    long long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMAL(long long a, unsigned long b) {\n  register long long result;\n  __ASM volatile(\"smal %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.104. SMAL ===== */\n\n/* ===== Inline Function Start for 3.105.1. SMALBB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMALBB (Signed Multiply Bottom Halfs & Add 64-bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMALBB Rd, Rs1, Rs2\n * SMALBT Rd, Rs1, Rs2\n * SMALTT Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of the 32-bit elements of a register with the 16-bit\n * content of the corresponding 32-bit elements of another register and add the results with a 64-bit\n * value of an even/odd pair of registers (RV32) or a register (RV64). The addition result is written back\n * to the register-pair (RV32) or the register (RV64).\n * * SMALBB: rt pair + bottom*bottom (all 32-bit elements)\n * * SMALBT rt pair + bottom*top (all 32-bit elements)\n * * SMALTT rt pair + top*top (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMALBB` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2.\n * For the `SMALBT` instruction, it multiplies the bottom 16-bit content of Rs1 with the top 16-bit\n * content of Rs2.\n * For the `SMALTT` instruction, it multiplies the top 16-bit content of Rs1 with the top 16-bit content\n * of Rs2.\n * The multiplication result is added with the 64-bit value of an even/odd pair of registers specified by\n * Rd(4,1). The 64-bit addition result is written back to the register-pair. The 16-bit values of Rs1 and\n * Rs2, and the 64-bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * For the `SMALBB` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2.\n * For the `SMALBT` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `SMALTT` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2.\n * The multiplication results are added with the 64-bit value of Rd. The 64-bit addition result is written\n * back to Rd. The 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Mres[31:0] = Rs1.H[0] * Rs2.H[0]; // SMALBB\n * Mres[31:0] = Rs1.H[0] * Rs2.H[1]; // SMALBT\n * Mres[31:0] = Rs1.H[1] * Rs2.H[1]; // SMALTT\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] + SE64(Mres[31:0]);\n * RV64:\n * // SMALBB\n * Mres[0][31:0] = Rs1.W[0].H[0] * Rs2.W[0].H[0];\n * Mres[1][31:0] = Rs1.W[1].H[0] * Rs2.W[1].H[0];\n * // SMALBT\n * Mres[0][31:0] = Rs1.W[0].H[0] * Rs2.W[0].H[1];\n * Mres[1][31:0] = Rs1.W[1].H[0] * Rs2.W[1].H[1];\n * // SMALTT\n * Mres[0][31:0] = Rs1.W[0].H[1] * Rs2.W[0].H[1];\n * Mres[1][31:0] = Rs1.W[1].H[1] * Rs2.W[1].H[1];\n * Rd = Rd + SE64(Mres[0][31:0]) + SE64(Mres[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMALBB(long long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"smalbb %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.105.1. SMALBB ===== */\n\n/* ===== Inline Function Start for 3.105.2. SMALBT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMALBT (Signed Multiply Bottom Half & Top Half & Add 64-bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMALBB Rd, Rs1, Rs2\n * SMALBT Rd, Rs1, Rs2\n * SMALTT Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of the 32-bit elements of a register with the 16-bit\n * content of the corresponding 32-bit elements of another register and add the results with a 64-bit\n * value of an even/odd pair of registers (RV32) or a register (RV64). The addition result is written back\n * to the register-pair (RV32) or the register (RV64).\n * * SMALBB: rt pair + bottom*bottom (all 32-bit elements)\n * * SMALBT rt pair + bottom*top (all 32-bit elements)\n * * SMALTT rt pair + top*top (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMALBB` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2.\n * For the `SMALBT` instruction, it multiplies the bottom 16-bit content of Rs1 with the top 16-bit\n * content of Rs2.\n * For the `SMALTT` instruction, it multiplies the top 16-bit content of Rs1 with the top 16-bit content\n * of Rs2.\n * The multiplication result is added with the 64-bit value of an even/odd pair of registers specified by\n * Rd(4,1). The 64-bit addition result is written back to the register-pair. The 16-bit values of Rs1 and\n * Rs2, and the 64-bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * For the `SMALBB` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2.\n * For the `SMALBT` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `SMALTT` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2.\n * The multiplication results are added with the 64-bit value of Rd. The 64-bit addition result is written\n * back to Rd. The 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Mres[31:0] = Rs1.H[0] * Rs2.H[0]; // SMALBB\n * Mres[31:0] = Rs1.H[0] * Rs2.H[1]; // SMALBT\n * Mres[31:0] = Rs1.H[1] * Rs2.H[1]; // SMALTT\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] + SE64(Mres[31:0]);\n * RV64:\n * // SMALBB\n * Mres[0][31:0] = Rs1.W[0].H[0] * Rs2.W[0].H[0];\n * Mres[1][31:0] = Rs1.W[1].H[0] * Rs2.W[1].H[0];\n * // SMALBT\n * Mres[0][31:0] = Rs1.W[0].H[0] * Rs2.W[0].H[1];\n * Mres[1][31:0] = Rs1.W[1].H[0] * Rs2.W[1].H[1];\n * // SMALTT\n * Mres[0][31:0] = Rs1.W[0].H[1] * Rs2.W[0].H[1];\n * Mres[1][31:0] = Rs1.W[1].H[1] * Rs2.W[1].H[1];\n * Rd = Rd + SE64(Mres[0][31:0]) + SE64(Mres[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMALBT(long long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"smalbt %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.105.2. SMALBT ===== */\n\n/* ===== Inline Function Start for 3.105.3. SMALTT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMALTT (Signed Multiply Top Halfs & Add 64-bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMALBB Rd, Rs1, Rs2\n * SMALBT Rd, Rs1, Rs2\n * SMALTT Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of the 32-bit elements of a register with the 16-bit\n * content of the corresponding 32-bit elements of another register and add the results with a 64-bit\n * value of an even/odd pair of registers (RV32) or a register (RV64). The addition result is written back\n * to the register-pair (RV32) or the register (RV64).\n * * SMALBB: rt pair + bottom*bottom (all 32-bit elements)\n * * SMALBT rt pair + bottom*top (all 32-bit elements)\n * * SMALTT rt pair + top*top (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMALBB` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2.\n * For the `SMALBT` instruction, it multiplies the bottom 16-bit content of Rs1 with the top 16-bit\n * content of Rs2.\n * For the `SMALTT` instruction, it multiplies the top 16-bit content of Rs1 with the top 16-bit content\n * of Rs2.\n * The multiplication result is added with the 64-bit value of an even/odd pair of registers specified by\n * Rd(4,1). The 64-bit addition result is written back to the register-pair. The 16-bit values of Rs1 and\n * Rs2, and the 64-bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * For the `SMALBB` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2.\n * For the `SMALBT` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `SMALTT` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2.\n * The multiplication results are added with the 64-bit value of Rd. The 64-bit addition result is written\n * back to Rd. The 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Mres[31:0] = Rs1.H[0] * Rs2.H[0]; // SMALBB\n * Mres[31:0] = Rs1.H[0] * Rs2.H[1]; // SMALBT\n * Mres[31:0] = Rs1.H[1] * Rs2.H[1]; // SMALTT\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] + SE64(Mres[31:0]);\n * RV64:\n * // SMALBB\n * Mres[0][31:0] = Rs1.W[0].H[0] * Rs2.W[0].H[0];\n * Mres[1][31:0] = Rs1.W[1].H[0] * Rs2.W[1].H[0];\n * // SMALBT\n * Mres[0][31:0] = Rs1.W[0].H[0] * Rs2.W[0].H[1];\n * Mres[1][31:0] = Rs1.W[1].H[0] * Rs2.W[1].H[1];\n * // SMALTT\n * Mres[0][31:0] = Rs1.W[0].H[1] * Rs2.W[0].H[1];\n * Mres[1][31:0] = Rs1.W[1].H[1] * Rs2.W[1].H[1];\n * Rd = Rd + SE64(Mres[0][31:0]) + SE64(Mres[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMALTT(long long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"smaltt %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.105.3. SMALTT ===== */\n\n/* ===== Inline Function Start for 3.106.1. SMALDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMALDA (Signed Multiply Two Halfs and Two Adds 64-bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMALDA Rd, Rs1, Rs2\n * SMALXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * adds the two 32-bit results and the 64-bit value of an even/odd pair of registers together.\n * * SMALDA: rt pair+ top*top + bottom*bottom (all 32-bit elements)\n * * SMALXDA: rt pair+ top*bottom + bottom*top (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMALDA` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and then adds the result to the result of multiplying the top 16-bit content of Rs1 with\n * the top 16-bit content of Rs2 with unlimited precision.\n * For the `SMALXDA` instruction, it multiplies the top 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and then adds the result to the result of multiplying the bottom 16-bit content of Rs1\n * with the top 16-bit content of Rs2 with unlimited precision.\n * The result is added to the 64-bit value of an even/odd pair of registers specified by Rd(4,1). The 64-\n * bit addition result is written back to the register-pair. The 16-bit values of Rs1 and Rs2, and the 64-\n * bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * For the `SMALDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then adds the result to the result of\n * multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the 32-\n * bit elements of Rs2 with unlimited precision.\n * For the `SMALXDA` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then adds the result to the result of\n * multiplying the bottom 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the\n * 32-bit elements of Rs2 with unlimited precision.\n * The results are added to the 64-bit value of Rd. The 64-bit addition result is written back to Rd. The\n * 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * // SMALDA\n * Mres0[31:0] = (Rs1.H[0] * Rs2.H[0]);\n * Mres1[31:0] = (Rs1.H[1] * Rs2.H[1]);\n * // SMALXDA\n * Mres0[31:0] = (Rs1.H[0] * Rs2.H[1]);\n * Mres1[31:0] = (Rs1.H[1] * Rs2.H[0]);\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] + SE64(Mres0[31:0]) + SE64(Mres1[31:0]);\n * RV64:\n * // SMALDA\n * Mres0[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[0]);\n * Mres1[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[1]);\n * Mres0[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[1].H[0]);\n * Mres1[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[1].H[1]);\n * // SMALXDA\n * Mres0[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[1]);\n * Mres1[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[0]);\n * Mres0[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[1].H[1]);\n * Mres1[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[1].H[0]);\n * Rd = Rd + SE64(Mres0[0][31:0]) + SE64(Mres1[0][31:0]) + SE64(Mres0[1][31:0]) +\n * SE64(Mres1[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMALDA(long long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"smalda %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.106.1. SMALDA ===== */\n\n/* ===== Inline Function Start for 3.106.2. SMALXDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMALXDA (Signed Crossed Multiply Two Halfs and Two Adds 64-bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMALDA Rd, Rs1, Rs2\n * SMALXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * adds the two 32-bit results and the 64-bit value of an even/odd pair of registers together.\n * * SMALDA: rt pair+ top*top + bottom*bottom (all 32-bit elements)\n * * SMALXDA: rt pair+ top*bottom + bottom*top (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMALDA` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and then adds the result to the result of multiplying the top 16-bit content of Rs1 with\n * the top 16-bit content of Rs2 with unlimited precision.\n * For the `SMALXDA` instruction, it multiplies the top 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and then adds the result to the result of multiplying the bottom 16-bit content of Rs1\n * with the top 16-bit content of Rs2 with unlimited precision.\n * The result is added to the 64-bit value of an even/odd pair of registers specified by Rd(4,1). The 64-\n * bit addition result is written back to the register-pair. The 16-bit values of Rs1 and Rs2, and the 64-\n * bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * For the `SMALDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then adds the result to the result of\n * multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the 32-\n * bit elements of Rs2 with unlimited precision.\n * For the `SMALXDA` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then adds the result to the result of\n * multiplying the bottom 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the\n * 32-bit elements of Rs2 with unlimited precision.\n * The results are added to the 64-bit value of Rd. The 64-bit addition result is written back to Rd. The\n * 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * // SMALDA\n * Mres0[31:0] = (Rs1.H[0] * Rs2.H[0]);\n * Mres1[31:0] = (Rs1.H[1] * Rs2.H[1]);\n * // SMALXDA\n * Mres0[31:0] = (Rs1.H[0] * Rs2.H[1]);\n * Mres1[31:0] = (Rs1.H[1] * Rs2.H[0]);\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] + SE64(Mres0[31:0]) + SE64(Mres1[31:0]);\n * RV64:\n * // SMALDA\n * Mres0[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[0]);\n * Mres1[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[1]);\n * Mres0[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[1].H[0]);\n * Mres1[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[1].H[1]);\n * // SMALXDA\n * Mres0[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[1]);\n * Mres1[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[0]);\n * Mres0[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[1].H[1]);\n * Mres1[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[1].H[0]);\n * Rd = Rd + SE64(Mres0[0][31:0]) + SE64(Mres1[0][31:0]) + SE64(Mres0[1][31:0]) +\n * SE64(Mres1[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMALXDA(long long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"smalxda %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.106.2. SMALXDA ===== */\n\n/* ===== Inline Function Start for 3.107.1. SMALDS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMALDS (Signed Multiply Two Halfs & Subtract & Add 64-bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMALDS Rd, Rs1, Rs2\n * SMALDRS Rd, Rs1, Rs2\n * SMALXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * perform a subtraction operation between the two 32-bit results. Then add the subtraction result to\n * the 64-bit value of an even/odd pair of registers (RV32) or a register (RV64). The addition result is\n * written back to the register-pair.\n * * SMALDS: rt pair + (top*top - bottom*bottom) (all 32-bit elements)\n * * SMALDRS: rt pair + (bottom*bottom - top*top) (all 32-bit elements)\n * * SMALXDS: rt pair + (top*bottom - bottom*top) (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMALDS` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and then subtracts the result from the result of multiplying the top 16-bit content of\n * Rs1 with the top 16-bit content of Rs2.\n * For the `SMALDRS` instruction, it multiplies the top 16-bit content of Rs1 with the top 16-bit content\n * of Rs2 and then subtracts the result from the result of multiplying the bottom 16-bit content of Rs1\n * with the bottom 16-bit content of Rs2.\n * For the `SMALXDS` instruction, it multiplies the bottom 16-bit content of Rs1 with the top 16-bit\n * content of Rs2 and then subtracts the result from the result of multiplying the top 16-bit content of\n * Rs1 with the bottom 16-bit content of Rs2.\n * The subtraction result is then added to the 64-bit value of an even/odd pair of registers specified by\n * Rd(4,1). The 64-bit addition result is written back to the register-pair. The 16-bit values of Rs1 and\n * Rs2, and the 64-bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * For the `SMALDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content\n * of the 32-bit elements of Rs2.\n * For the `SMALDRS` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit content of\n * the 32-bit elements of Rs2.\n * For the `SMALXDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit\n * content of the 32-bit elements of Rs2.\n * The subtraction results are then added to the 64-bit value of Rd. The 64-bit addition result is written\n * back to Rd. The 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * Mres[31:0] = (Rs1.H[1] * Rs2.H[1]) - (Rs1.H[0] * Rs2.H[0]); // SMALDS\n * Mres[31:0] = (Rs1.H[0] * Rs2.H[0]) - (Rs1.H[1] * Rs2.H[1]); // SMALDRS\n * Mres[31:0] = (Rs1.H[1] * Rs2.H[0]) - (Rs1.H[0] * Rs2.H[1]); // SMALXDS\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] + SE64(Mres[31:0]);\n * * RV64:\n * // SMALDS\n * Mres[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[1]) - (Rs1.W[0].H[0] * Rs2.W[0].H[0]);\n * Mres[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[0].H[1]) - (Rs1.W[1].H[0] * Rs2.W[1].H[0]);\n * // SMALDRS\n * Mres[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[0]) - (Rs1.W[0].H[1] * Rs2.W[0].H[1]);\n * Mres[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[0].H[0]) - (Rs1.W[1].H[1] * Rs2.W[1].H[1]);\n * // SMALXDS\n * Mres[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[0]) - (Rs1.W[0].H[0] * Rs2.W[0].H[1]);\n * Mres[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[0].H[0]) - (Rs1.W[1].H[0] * Rs2.W[1].H[1]);\n * Rd = Rd + SE64(Mres[0][31:0]) + SE64(Mres[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMALDS(long long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"smalds %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.107.1. SMALDS ===== */\n\n/* ===== Inline Function Start for 3.107.2. SMALDRS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMALDRS (Signed Multiply Two Halfs & Reverse Subtract & Add 64- bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMALDS Rd, Rs1, Rs2\n * SMALDRS Rd, Rs1, Rs2\n * SMALXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * perform a subtraction operation between the two 32-bit results. Then add the subtraction result to\n * the 64-bit value of an even/odd pair of registers (RV32) or a register (RV64). The addition result is\n * written back to the register-pair.\n * * SMALDS: rt pair + (top*top - bottom*bottom) (all 32-bit elements)\n * * SMALDRS: rt pair + (bottom*bottom - top*top) (all 32-bit elements)\n * * SMALXDS: rt pair + (top*bottom - bottom*top) (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMALDS` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and then subtracts the result from the result of multiplying the top 16-bit content of\n * Rs1 with the top 16-bit content of Rs2.\n * For the `SMALDRS` instruction, it multiplies the top 16-bit content of Rs1 with the top 16-bit content\n * of Rs2 and then subtracts the result from the result of multiplying the bottom 16-bit content of Rs1\n * with the bottom 16-bit content of Rs2.\n * For the `SMALXDS` instruction, it multiplies the bottom 16-bit content of Rs1 with the top 16-bit\n * content of Rs2 and then subtracts the result from the result of multiplying the top 16-bit content of\n * Rs1 with the bottom 16-bit content of Rs2.\n * The subtraction result is then added to the 64-bit value of an even/odd pair of registers specified by\n * Rd(4,1). The 64-bit addition result is written back to the register-pair. The 16-bit values of Rs1 and\n * Rs2, and the 64-bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * For the `SMALDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content\n * of the 32-bit elements of Rs2.\n * For the `SMALDRS` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit content of\n * the 32-bit elements of Rs2.\n * For the `SMALXDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit\n * content of the 32-bit elements of Rs2.\n * The subtraction results are then added to the 64-bit value of Rd. The 64-bit addition result is written\n * back to Rd. The 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * Mres[31:0] = (Rs1.H[1] * Rs2.H[1]) - (Rs1.H[0] * Rs2.H[0]); // SMALDS\n * Mres[31:0] = (Rs1.H[0] * Rs2.H[0]) - (Rs1.H[1] * Rs2.H[1]); // SMALDRS\n * Mres[31:0] = (Rs1.H[1] * Rs2.H[0]) - (Rs1.H[0] * Rs2.H[1]); // SMALXDS\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] + SE64(Mres[31:0]);\n * * RV64:\n * // SMALDS\n * Mres[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[1]) - (Rs1.W[0].H[0] * Rs2.W[0].H[0]);\n * Mres[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[0].H[1]) - (Rs1.W[1].H[0] * Rs2.W[1].H[0]);\n * // SMALDRS\n * Mres[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[0]) - (Rs1.W[0].H[1] * Rs2.W[0].H[1]);\n * Mres[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[0].H[0]) - (Rs1.W[1].H[1] * Rs2.W[1].H[1]);\n * // SMALXDS\n * Mres[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[0]) - (Rs1.W[0].H[0] * Rs2.W[0].H[1]);\n * Mres[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[0].H[0]) - (Rs1.W[1].H[0] * Rs2.W[1].H[1]);\n * Rd = Rd + SE64(Mres[0][31:0]) + SE64(Mres[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMALDRS(long long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"smaldrs %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.107.2. SMALDRS ===== */\n\n/* ===== Inline Function Start for 3.107.3. SMALXDS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMALXDS (Signed Crossed Multiply Two Halfs & Subtract & Add 64- bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMALDS Rd, Rs1, Rs2\n * SMALDRS Rd, Rs1, Rs2\n * SMALXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * perform a subtraction operation between the two 32-bit results. Then add the subtraction result to\n * the 64-bit value of an even/odd pair of registers (RV32) or a register (RV64). The addition result is\n * written back to the register-pair.\n * * SMALDS: rt pair + (top*top - bottom*bottom) (all 32-bit elements)\n * * SMALDRS: rt pair + (bottom*bottom - top*top) (all 32-bit elements)\n * * SMALXDS: rt pair + (top*bottom - bottom*top) (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMALDS` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and then subtracts the result from the result of multiplying the top 16-bit content of\n * Rs1 with the top 16-bit content of Rs2.\n * For the `SMALDRS` instruction, it multiplies the top 16-bit content of Rs1 with the top 16-bit content\n * of Rs2 and then subtracts the result from the result of multiplying the bottom 16-bit content of Rs1\n * with the bottom 16-bit content of Rs2.\n * For the `SMALXDS` instruction, it multiplies the bottom 16-bit content of Rs1 with the top 16-bit\n * content of Rs2 and then subtracts the result from the result of multiplying the top 16-bit content of\n * Rs1 with the bottom 16-bit content of Rs2.\n * The subtraction result is then added to the 64-bit value of an even/odd pair of registers specified by\n * Rd(4,1). The 64-bit addition result is written back to the register-pair. The 16-bit values of Rs1 and\n * Rs2, and the 64-bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * For the `SMALDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content\n * of the 32-bit elements of Rs2.\n * For the `SMALDRS` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit content of\n * the 32-bit elements of Rs2.\n * For the `SMALXDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit\n * content of the 32-bit elements of Rs2.\n * The subtraction results are then added to the 64-bit value of Rd. The 64-bit addition result is written\n * back to Rd. The 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * Mres[31:0] = (Rs1.H[1] * Rs2.H[1]) - (Rs1.H[0] * Rs2.H[0]); // SMALDS\n * Mres[31:0] = (Rs1.H[0] * Rs2.H[0]) - (Rs1.H[1] * Rs2.H[1]); // SMALDRS\n * Mres[31:0] = (Rs1.H[1] * Rs2.H[0]) - (Rs1.H[0] * Rs2.H[1]); // SMALXDS\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] + SE64(Mres[31:0]);\n * * RV64:\n * // SMALDS\n * Mres[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[1]) - (Rs1.W[0].H[0] * Rs2.W[0].H[0]);\n * Mres[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[0].H[1]) - (Rs1.W[1].H[0] * Rs2.W[1].H[0]);\n * // SMALDRS\n * Mres[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[0]) - (Rs1.W[0].H[1] * Rs2.W[0].H[1]);\n * Mres[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[0].H[0]) - (Rs1.W[1].H[1] * Rs2.W[1].H[1]);\n * // SMALXDS\n * Mres[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[0]) - (Rs1.W[0].H[0] * Rs2.W[0].H[1]);\n * Mres[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[0].H[0]) - (Rs1.W[1].H[0] * Rs2.W[1].H[1]);\n * Rd = Rd + SE64(Mres[0][31:0]) + SE64(Mres[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMALXDS(long long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"smalxds %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.107.3. SMALXDS ===== */\n\n/* ===== Inline Function Start for 3.108. SMAR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB\n * \\brief SMAR64 (Signed Multiply and Add to 64-Bit Data)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMAR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit signed elements in two registers and add the 64-bit multiplication\n * result to the 64-bit signed data of a pair of registers (RV32) or a register (RV64). The result is written\n * back to the pair of registers (RV32) or a register (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit signed data of Rs1 with that of Rs2. It adds\n * the 64-bit multiplication result to the 64-bit signed data of an even/odd pair of registers specified by\n * Rd(4,1). The addition result is written back to the even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the 32-bit signed elements of Rs1 with that of Rs2. It\n * adds the 64-bit multiplication results to the 64-bit signed data of Rd. The addition result is written\n * back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H].R[t_L] = R[t_H].R[t_L] + (Rs1 * Rs2);\n * * RV64:\n * Rd = Rd + (Rs1.W[0] * Rs2.W[0]) + (Rs1.W[1] * Rs2.W[1]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMAR64(long long t, long a, long b) {\n  __ASM volatile(\"smar64 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.108. SMAR64 ===== */\n\n/* ===== Inline Function Start for 3.109. SMAQA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_8B_MULT_32B_ADD\n * \\brief SMAQA (Signed Multiply Four Bytes with 32-bit Adds)\n * \\details\n * **Type**: Partial-SIMD (Reduction)\n *\n * **Syntax**:\\n\n * ~~~\n * SMAQA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do four signed 8-bit multiplications from 32-bit chunks of two registers; and then adds\n * the four 16-bit results and the content of corresponding 32-bit chunks of a third register together.\n *\n * **Description**:\\n\n * This instruction multiplies the four signed 8-bit elements of 32-bit chunks of Rs1 with the four\n * signed 8-bit elements of 32-bit chunks of Rs2 and then adds the four results together with the signed\n * content of the corresponding 32-bit chunks of Rd. The final results are written back to the\n * corresponding 32-bit chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rd.W[x] +\n *    (Rs1.W[x].B[3] s* Rs2.W[x].B[3]) + (Rs1.W[x].B[2] s* Rs2.W[x].B[2]) +\n *    (Rs1.W[x].B[1] s* Rs2.W[x].B[1]) + (Rs1.W[x].B[0] s* Rs2.W[x].B[0]);\n * Rd.W[x] = res[x];\n * for RV32: x=0,\n * for RV64: x=1,0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMAQA(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"smaqa %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.109. SMAQA ===== */\n\n/* ===== Inline Function Start for 3.110. SMAQA.SU ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_8B_MULT_32B_ADD\n * \\brief SMAQA.SU (Signed and Unsigned Multiply Four Bytes with 32-bit Adds)\n * \\details\n * **Type**: Partial-SIMD (Reduction)\n *\n * **Syntax**:\\n\n * ~~~\n * SMAQA.SU Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do four `signed x unsigned` 8-bit multiplications from 32-bit chunks of two registers; and\n * then adds the four 16-bit results and the content of corresponding 32-bit chunks of a third register\n * together.\n *\n * **Description**:\\n\n * This instruction multiplies the four signed 8-bit elements of 32-bit chunks of Rs1 with the four\n * unsigned 8-bit elements of 32-bit chunks of Rs2 and then adds the four results together with the\n * signed content of the corresponding 32-bit chunks of Rd. The final results are written back to the\n * corresponding 32-bit chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rd.W[x] +\n *    (Rs1.W[x].B[3] su* Rs2.W[x].B[3]) + (Rs1.W[x].B[2] su* Rs2.W[x].B[2]) +\n *    (Rs1.W[x].B[1] su* Rs2.W[x].B[1]) + (Rs1.W[x].B[0] su* Rs2.W[x].B[0]);\n * Rd.W[x] = res[x];\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMAQA_SU(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"smaqa.su %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.110. SMAQA.SU ===== */\n\n/* ===== Inline Function Start for 3.111. SMAX8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief SMAX8 (SIMD 8-bit Signed Maximum)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMAX8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed integer elements finding maximum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit signed integer elements in Rs1 with the 8-bit\n * signed integer elements in Rs2 and selects the numbers that is greater than the other one. The\n * selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] > Rs2.B[x])? Rs1.B[x] : Rs2.B[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SMAX8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"smax8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.111. SMAX8 ===== */\n\n/* ===== Inline Function Start for 3.112. SMAX16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief SMAX16 (SIMD 16-bit Signed Maximum)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMAX16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer elements finding maximum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit signed integer elements in Rs1 with the 16-bit\n * signed integer elements in Rs2 and selects the numbers that is greater than the other one. The\n * selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] > Rs2.H[x])? Rs1.H[x] : Rs2.H[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SMAX16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"smax16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.112. SMAX16 ===== */\n\n/* ===== Inline Function Start for 3.113.1. SMBB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief SMBB16 (SIMD Signed Multiply Bottom Half & Bottom Half)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMBB16 Rd, Rs1, Rs2\n * SMBT16 Rd, Rs1, Rs2\n * SMTT16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of the 32-bit elements of a register with the signed 16-\n * bit content of the 32-bit elements of another register and write the result to a third register.\n * * SMBB16: W[x].bottom*W[x].bottom\n * * SMBT16: W[x].bottom *W[x].top\n * * SMTT16: W[x].top * W[x].top\n *\n * **Description**:\\n\n * For the `SMBB16` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2.\n * For the `SMBT16` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `SMTT16` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2.\n * The multiplication results are written to Rd. The 16-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = Rs1.W[x].H[0] * Rs2.W[x].H[0]; // SMBB16\n * Rd.W[x] = Rs1.W[x].H[0] * Rs2.W[x].H[1]; // SMBT16\n * Rd.W[x] = Rs1.W[x].H[1] * Rs2.W[x].H[1]; // SMTT16\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMBB16(unsigned long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"smbb16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.113.1. SMBB16 ===== */\n\n/* ===== Inline Function Start for 3.113.2. SMBT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief SMBT16 (SIMD Signed Multiply Bottom Half & Top Half)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMBB16 Rd, Rs1, Rs2\n * SMBT16 Rd, Rs1, Rs2\n * SMTT16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of the 32-bit elements of a register with the signed 16-\n * bit content of the 32-bit elements of another register and write the result to a third register.\n * * SMBB16: W[x].bottom*W[x].bottom\n * * SMBT16: W[x].bottom *W[x].top\n * * SMTT16: W[x].top * W[x].top\n *\n * **Description**:\\n\n * For the `SMBB16` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2.\n * For the `SMBT16` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `SMTT16` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2.\n * The multiplication results are written to Rd. The 16-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = Rs1.W[x].H[0] * Rs2.W[x].H[0]; // SMBB16\n * Rd.W[x] = Rs1.W[x].H[0] * Rs2.W[x].H[1]; // SMBT16\n * Rd.W[x] = Rs1.W[x].H[1] * Rs2.W[x].H[1]; // SMTT16\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMBT16(unsigned long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"smbt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.113.2. SMBT16 ===== */\n\n/* ===== Inline Function Start for 3.113.3. SMTT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief SMTT16 (SIMD Signed Multiply Top Half & Top Half)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMBB16 Rd, Rs1, Rs2\n * SMBT16 Rd, Rs1, Rs2\n * SMTT16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of the 32-bit elements of a register with the signed 16-\n * bit content of the 32-bit elements of another register and write the result to a third register.\n * * SMBB16: W[x].bottom*W[x].bottom\n * * SMBT16: W[x].bottom *W[x].top\n * * SMTT16: W[x].top * W[x].top\n *\n * **Description**:\\n\n * For the `SMBB16` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2.\n * For the `SMBT16` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `SMTT16` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2.\n * The multiplication results are written to Rd. The 16-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = Rs1.W[x].H[0] * Rs2.W[x].H[0]; // SMBB16\n * Rd.W[x] = Rs1.W[x].H[0] * Rs2.W[x].H[1]; // SMBT16\n * Rd.W[x] = Rs1.W[x].H[1] * Rs2.W[x].H[1]; // SMTT16\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMTT16(unsigned long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"smtt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.113.3. SMTT16 ===== */\n\n/* ===== Inline Function Start for 3.114.1. SMDS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief SMDS (SIMD Signed Multiply Two Halfs and Subtract)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMDS Rd, Rs1, Rs2\n * SMDRS Rd, Rs1, Rs2\n * SMXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * perform a subtraction operation between the two 32-bit results.\n * * SMDS: top*top - bottom*bottom (per 32-bit element)\n * * SMDRS: bottom*bottom - top*top (per 32-bit element)\n * * SMXDS: top*bottom - bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `SMDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1 with\n * the bottom 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result\n * of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the\n * 32-bit elements of Rs2.\n * For the `SMDRS` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit content of\n * the 32-bit elements of Rs2.\n * For the `SMXDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit\n * content of the 32-bit elements of Rs2.\n * The subtraction result is written to the corresponding 32-bit element of Rd. The 16-bit contents of\n * multiplication are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * * SMDS:\n * Rd.W[x] = (Rs1.W[x].H[1] * Rs2.W[x].H[1]) - (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * * SMDRS:\n * Rd.W[x] = (Rs1.W[x].H[0] * Rs2.W[x].H[0]) - (Rs1.W[x].H[1] * Rs2.W[x].H[1]);\n * * SMXDS:\n * Rd.W[x] = (Rs1.W[x].H[1] * Rs2.W[x].H[0]) - (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMDS(unsigned long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"smds %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.114.1. SMDS ===== */\n\n/* ===== Inline Function Start for 3.114.2. SMDRS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief SMDRS (SIMD Signed Multiply Two Halfs and Reverse Subtract)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMDS Rd, Rs1, Rs2\n * SMDRS Rd, Rs1, Rs2\n * SMXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * perform a subtraction operation between the two 32-bit results.\n * * SMDS: top*top - bottom*bottom (per 32-bit element)\n * * SMDRS: bottom*bottom - top*top (per 32-bit element)\n * * SMXDS: top*bottom - bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `SMDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1 with\n * the bottom 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result\n * of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the\n * 32-bit elements of Rs2.\n * For the `SMDRS` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit content of\n * the 32-bit elements of Rs2.\n * For the `SMXDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit\n * content of the 32-bit elements of Rs2.\n * The subtraction result is written to the corresponding 32-bit element of Rd. The 16-bit contents of\n * multiplication are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * * SMDS:\n * Rd.W[x] = (Rs1.W[x].H[1] * Rs2.W[x].H[1]) - (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * * SMDRS:\n * Rd.W[x] = (Rs1.W[x].H[0] * Rs2.W[x].H[0]) - (Rs1.W[x].H[1] * Rs2.W[x].H[1]);\n * * SMXDS:\n * Rd.W[x] = (Rs1.W[x].H[1] * Rs2.W[x].H[0]) - (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMDRS(unsigned long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"smdrs %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.114.2. SMDRS ===== */\n\n/* ===== Inline Function Start for 3.114.3. SMXDS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief SMXDS (SIMD Signed Crossed Multiply Two Halfs and Subtract)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMDS Rd, Rs1, Rs2\n * SMDRS Rd, Rs1, Rs2\n * SMXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * perform a subtraction operation between the two 32-bit results.\n * * SMDS: top*top - bottom*bottom (per 32-bit element)\n * * SMDRS: bottom*bottom - top*top (per 32-bit element)\n * * SMXDS: top*bottom - bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `SMDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1 with\n * the bottom 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result\n * of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the\n * 32-bit elements of Rs2.\n * For the `SMDRS` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit content of\n * the 32-bit elements of Rs2.\n * For the `SMXDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit\n * content of the 32-bit elements of Rs2.\n * The subtraction result is written to the corresponding 32-bit element of Rd. The 16-bit contents of\n * multiplication are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * * SMDS:\n * Rd.W[x] = (Rs1.W[x].H[1] * Rs2.W[x].H[1]) - (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * * SMDRS:\n * Rd.W[x] = (Rs1.W[x].H[0] * Rs2.W[x].H[0]) - (Rs1.W[x].H[1] * Rs2.W[x].H[1]);\n * * SMXDS:\n * Rd.W[x] = (Rs1.W[x].H[1] * Rs2.W[x].H[0]) - (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMXDS(unsigned long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"smxds %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.114.3. SMXDS ===== */\n\n/* ===== Inline Function Start for 3.115. SMIN8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief SMIN8 (SIMD 8-bit Signed Minimum)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMIN8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed integer elements finding minimum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit signed integer elements in Rs1 with the 8-bit\n * signed integer elements in Rs2 and selects the numbers that is less than the other one. The selected\n * results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] < Rs2.B[x])? Rs1.B[x] : Rs2.B[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SMIN8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"smin8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.115. SMIN8 ===== */\n\n/* ===== Inline Function Start for 3.116. SMIN16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief SMIN16 (SIMD 16-bit Signed Minimum)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMIN16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer elements finding minimum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit signed integer elements in Rs1 with the 16-bit\n * signed integer elements in Rs2 and selects the numbers that is less than the other one. The selected\n * results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] < Rs2.H[x])? Rs1.H[x] : Rs2.H[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SMIN16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"smin16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.116. SMIN16 ===== */\n\n/* ===== Inline Function Start for 3.117.1. SMMUL ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC\n * \\brief SMMUL (SIMD MSW Signed Multiply Word)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMMUL Rd, Rs1, Rs2\n * SMMUL.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit signed integer elements of two registers and write the most significant\n * 32-bit results to the corresponding 32-bit elements of a register. The `.u` form performs an\n * additional rounding up operation on the multiplication results before taking the most significant\n * 32-bit part of the results.\n *\n * **Description**:\\n\n * This instruction multiplies the 32-bit elements of Rs1 with the 32-bit elements of Rs2 and writes the\n * most significant 32-bit multiplication results to the corresponding 32-bit elements of Rd. The 32-bit\n * elements of Rs1 and Rs2 are treated as signed integers. The `.u` form of the instruction rounds up\n * the most significant 32-bit of the 64-bit multiplication results by adding a 1 to bit 31 of the results.\n * * For `smmul/RV32` instruction, it is an alias to `mulh/RV32` instruction.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][63:0] = Rs1.W[x] * Rs2.W[x];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][63:31] + 1;\n *   Rd.W[x] = Round[x][32:1];\n * } else {\n *   Rd.W[x] = Mres[x][63:32];\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMMUL(long a, long b) {\n  register long result;\n  __ASM volatile(\"smmul %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.117.1. SMMUL ===== */\n\n/* ===== Inline Function Start for 3.117.2. SMMUL.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC\n * \\brief SMMUL.u (SIMD MSW Signed Multiply Word with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMMUL Rd, Rs1, Rs2\n * SMMUL.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit signed integer elements of two registers and write the most significant\n * 32-bit results to the corresponding 32-bit elements of a register. The `.u` form performs an\n * additional rounding up operation on the multiplication results before taking the most significant\n * 32-bit part of the results.\n *\n * **Description**:\\n\n * This instruction multiplies the 32-bit elements of Rs1 with the 32-bit elements of Rs2 and writes the\n * most significant 32-bit multiplication results to the corresponding 32-bit elements of Rd. The 32-bit\n * elements of Rs1 and Rs2 are treated as signed integers. The `.u` form of the instruction rounds up\n * the most significant 32-bit of the 64-bit multiplication results by adding a 1 to bit 31 of the results.\n * * For `smmul/RV32` instruction, it is an alias to `mulh/RV32` instruction.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][63:0] = Rs1.W[x] * Rs2.W[x];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][63:31] + 1;\n *   Rd.W[x] = Round[x][32:1];\n * } else {\n *   Rd.W[x] = Mres[x][63:32];\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMMUL_U(long a, long b) {\n  register long result;\n  __ASM volatile(\"smmul.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.117.2. SMMUL.u ===== */\n\n/* ===== Inline Function Start for 3.118.1. SMMWB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief SMMWB (SIMD MSW Signed Multiply Word and Bottom Half)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMMWB Rd, Rs1, Rs2\n * SMMWB.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the bottom 16-bit of the\n * corresponding 32-bit elements of another register, and write the most significant 32-bit results to\n * the corresponding 32-bit elements of a register. The `.u` form rounds up the results from the most\n * significant discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed bottom 16-bit content\n * of the corresponding 32-bit elements of Rs2 and writes the most significant 32-bit multiplication\n * results to the corresponding 32-bit elements of Rd. The `.u` form of the instruction rounds up the\n * most significant 32-bit of the 48-bit multiplication results by adding a 1 to bit 15 of the results.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][47:0] = Rs1.W[x] * Rs2.W[x].H[0];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][47:15] + 1;\n *   Rd.W[x] = Round[x][32:1];\n * } else {\n *   Rd.W[x] = Mres[x][47:16];\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMMWB(long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"smmwb %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.118.1. SMMWB ===== */\n\n/* ===== Inline Function Start for 3.118.2. SMMWB.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief SMMWB.u (SIMD MSW Signed Multiply Word and Bottom Half with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMMWB Rd, Rs1, Rs2\n * SMMWB.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the bottom 16-bit of the\n * corresponding 32-bit elements of another register, and write the most significant 32-bit results to\n * the corresponding 32-bit elements of a register. The `.u` form rounds up the results from the most\n * significant discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed bottom 16-bit content\n * of the corresponding 32-bit elements of Rs2 and writes the most significant 32-bit multiplication\n * results to the corresponding 32-bit elements of Rd. The `.u` form of the instruction rounds up the\n * most significant 32-bit of the 48-bit multiplication results by adding a 1 to bit 15 of the results.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][47:0] = Rs1.W[x] * Rs2.W[x].H[0];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][47:15] + 1;\n *   Rd.W[x] = Round[x][32:1];\n * } else {\n *   Rd.W[x] = Mres[x][47:16];\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMMWB_U(long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"smmwb.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.118.2. SMMWB.u ===== */\n\n/* ===== Inline Function Start for 3.119.1. SMMWT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief SMMWT (SIMD MSW Signed Multiply Word and Top Half)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMMWT Rd, Rs1, Rs2\n * SMMWT.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the top 16-bit of the\n * corresponding 32-bit elements of another register, and write the most significant 32-bit results to\n * the corresponding 32-bit elements of a register. The `.u` form rounds up the results from the most\n * significant discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the top signed 16-bit content of\n * the corresponding 32-bit elements of Rs2 and writes the most significant 32-bit multiplication\n * results to the corresponding 32-bit elements of Rd. The `.u` form of the instruction rounds up the\n * most significant 32-bit of the 48-bit multiplication results by adding a 1 to bit 15 of the results.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][47:0] = Rs1.W[x] * Rs2.W[x].H[1];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][47:15] + 1;\n *   Rd.W[x] = Round[x][32:1];\n * } else {\n *   Rd.W[x] = Mres[x][47:16];\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMMWT(long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"smmwt %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.119.1. SMMWT ===== */\n\n/* ===== Inline Function Start for 3.119.2. SMMWT.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief SMMWT.u (SIMD MSW Signed Multiply Word and Top Half with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMMWT Rd, Rs1, Rs2\n * SMMWT.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the top 16-bit of the\n * corresponding 32-bit elements of another register, and write the most significant 32-bit results to\n * the corresponding 32-bit elements of a register. The `.u` form rounds up the results from the most\n * significant discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the top signed 16-bit content of\n * the corresponding 32-bit elements of Rs2 and writes the most significant 32-bit multiplication\n * results to the corresponding 32-bit elements of Rd. The `.u` form of the instruction rounds up the\n * most significant 32-bit of the 48-bit multiplication results by adding a 1 to bit 15 of the results.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][47:0] = Rs1.W[x] * Rs2.W[x].H[1];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][47:15] + 1;\n *   Rd.W[x] = Round[x][32:1];\n * } else {\n *   Rd.W[x] = Mres[x][47:16];\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMMWT_U(long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"smmwt.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.119.2. SMMWT.u ===== */\n\n/* ===== Inline Function Start for 3.120.1. SMSLDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMSLDA (Signed Multiply Two Halfs & Add & Subtract 64-bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMSLDA Rd, Rs1, Rs2\n * SMSLXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * subtracts the two 32-bit results from the 64-bit value of an even/odd pair of registers (RV32) or a\n * register (RV64). The subtraction result is written back to the register-pair.\n * * SMSLDA: rd pair - top*top - bottom*bottom (all 32-bit elements)\n * * SMSLXDA: rd pair - top*bottom - bottom*top (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMSLDA` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content Rs2 and multiplies the top 16-bit content of Rs1 with the top 16-bit content of Rs2.\n * For the `SMSLXDA` instruction, it multiplies the top 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and multiplies the bottom 16-bit content of Rs1 with the top 16-bit content of Rs2.\n * The two multiplication results are subtracted from the 64-bit value of an even/odd pair of registers\n * specified by Rd(4,1). The 64-bit subtraction result is written back to the register-pair. The 16-bit\n * values of Rs1 and Rs2, and the 64-bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * For the `SMSLDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and multiplies the top 16-bit content of\n * the 32-bit elements of Rs1 with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `SMSLXDA` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the bottom 16-bit content of the 32-bit elements of Rs2 and multiplies the bottom 16-bit content of\n * the 32-bit elements of Rs1 with the top 16-bit content of the 32-bit elements of Rs2.\n * The four multiplication results are subtracted from the 64-bit value of Rd. The 64-bit subtraction\n * result is written back to Rd. The 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated\n * as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * // SMSLDA\n * Mres0[31:0] = (Rs1.H[0] * Rs2.H[0]);\n * Mres1[31:0] = (Rs1.H[1] * Rs2.H[1]);\n * // SMSLXDA\n * Mres0[31:0] = (Rs1.H[0] * Rs2.H[1]);\n * Mres1[31:0] = (Rs1.H[1] * Rs2.H[0]);\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] - SE64(Mres0[31:0]) - SE64(Mres1[31:0]);\n * * RV64:\n * // SMSLDA\n * Mres0[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[0]);\n * Mres1[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[1]);\n * Mres0[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[1].H[0]);\n * Mres1[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[1].H[1]);\n * // SMSLXDA\n * Mres0[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[1]);\n * Mres1[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[0]);\n * Mres0[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[1].H[1]);\n * Mres1[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[1].H[0]);\n * Rd = Rd - SE64(Mres0[0][31:0]) - SE64(Mres1[0][31:0]) - SE64(Mres0[1][31:0]) -\n * SE64(Mres1[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMSLDA(long long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"smslda %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.120.1. SMSLDA ===== */\n\n/* ===== Inline Function Start for 3.120.2. SMSLXDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMSLXDA (Signed Crossed Multiply Two Halfs & Add & Subtract 64- bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMSLDA Rd, Rs1, Rs2\n * SMSLXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * subtracts the two 32-bit results from the 64-bit value of an even/odd pair of registers (RV32) or a\n * register (RV64). The subtraction result is written back to the register-pair.\n * * SMSLDA: rd pair - top*top - bottom*bottom (all 32-bit elements)\n * * SMSLXDA: rd pair - top*bottom - bottom*top (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMSLDA` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content Rs2 and multiplies the top 16-bit content of Rs1 with the top 16-bit content of Rs2.\n * For the `SMSLXDA` instruction, it multiplies the top 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and multiplies the bottom 16-bit content of Rs1 with the top 16-bit content of Rs2.\n * The two multiplication results are subtracted from the 64-bit value of an even/odd pair of registers\n * specified by Rd(4,1). The 64-bit subtraction result is written back to the register-pair. The 16-bit\n * values of Rs1 and Rs2, and the 64-bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * For the `SMSLDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and multiplies the top 16-bit content of\n * the 32-bit elements of Rs1 with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `SMSLXDA` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the bottom 16-bit content of the 32-bit elements of Rs2 and multiplies the bottom 16-bit content of\n * the 32-bit elements of Rs1 with the top 16-bit content of the 32-bit elements of Rs2.\n * The four multiplication results are subtracted from the 64-bit value of Rd. The 64-bit subtraction\n * result is written back to Rd. The 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated\n * as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * // SMSLDA\n * Mres0[31:0] = (Rs1.H[0] * Rs2.H[0]);\n * Mres1[31:0] = (Rs1.H[1] * Rs2.H[1]);\n * // SMSLXDA\n * Mres0[31:0] = (Rs1.H[0] * Rs2.H[1]);\n * Mres1[31:0] = (Rs1.H[1] * Rs2.H[0]);\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] - SE64(Mres0[31:0]) - SE64(Mres1[31:0]);\n * * RV64:\n * // SMSLDA\n * Mres0[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[0]);\n * Mres1[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[1]);\n * Mres0[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[1].H[0]);\n * Mres1[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[1].H[1]);\n * // SMSLXDA\n * Mres0[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[1]);\n * Mres1[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[0]);\n * Mres0[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[1].H[1]);\n * Mres1[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[1].H[0]);\n * Rd = Rd - SE64(Mres0[0][31:0]) - SE64(Mres1[0][31:0]) - SE64(Mres0[1][31:0]) -\n * SE64(Mres1[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMSLXDA(long long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"smslxda %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.120.2. SMSLXDA ===== */\n\n/* ===== Inline Function Start for 3.121. SMSR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB\n * \\brief SMSR64 (Signed Multiply and Subtract from 64- Bit Data)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMSR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit signed elements in two registers and subtract the 64-bit multiplication\n * results from the 64-bit signed data of a pair of registers (RV32) or a register (RV64). The result is\n * written back to the pair of registers (RV32) or a register (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit signed data of Rs1 with that of Rs2. It\n * subtracts the 64-bit multiplication result from the 64-bit signed data of an even/odd pair of registers\n * specified by Rd(4,1). The subtraction result is written back to the even/odd pair of registers\n * specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the 32-bit signed elements of Rs1 with that of Rs2. It\n * subtracts the 64-bit multiplication results from the 64-bit signed data of Rd. The subtraction result is\n * written back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H].R[t_L] = R[t_H].R[t_L] - (Rs1 * Rs2);\n * * RV64:\n * Rd = Rd - (Rs1.W[0] * Rs2.W[0]) - (Rs1.W[1] * Rs2.W[1]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMSR64(long long t, long a, long b) {\n  __ASM volatile(\"smsr64 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.121. SMSR64 ===== */\n\n/* ===== Inline Function Start for 3.122.1. SMUL8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MULTIPLY\n * \\brief SMUL8 (SIMD Signed 8-bit Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMUL8 Rd, Rs1, Rs2\n * SMULX8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do signed 8-bit multiplications and generate four 16-bit results simultaneously.\n *\n * **RV32 Description**:\\n\n * For the `SMUL8` instruction, multiply the 8-bit data elements of Rs1 with the\n * corresponding 8-bit data elements of Rs2.\n * For the `SMULX8` instruction, multiply the first and second 8-bit data elements of Rs1 with the\n * second and first 8-bit data elements of Rs2. At the same time, multiply the third and fourth 8-bit data\n * elements of Rs1 with the fourth and third 8-bit data elements of Rs2.\n * The four 16-bit results are then written into an even/odd pair of registers specified by Rd(4,1).\n * Rd(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the two 16-bit results calculated from the top part of\n * Rs1 and the even `2d` register of the pair contains the two 16-bit results calculated from the bottom\n * part of Rs1.\n *\n * **RV64 Description**:\\n\n * For the `SMUL8` instruction, multiply the 8-bit data elements of Rs1 with the\n * corresponding 8-bit data elements of Rs2.\n * For the `SMULX8` instruction, multiply the first and second 8-bit data elements of Rs1 with the\n * second and first 8-bit data elements of Rs2. At the same time, multiply the third and fourth 8-bit data\n * elements of Rs1 with the fourth and third 8-bit data elements of Rs2.\n * The four 16-bit results are then written into Rd. The Rd.W[1] contains the two 16-bit results\n * calculated from the top part of Rs1 and the Rd.W[0] contains the two 16-bit results calculated from\n * the bottom part of Rs1.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * if (is `SMUL8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x+1]; // top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x]; // bottom\n * } else if (is `SMULX8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x]; // Rs1 top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x+1]; // Rs1 bottom\n * }\n * rest[x/2] = op1t[x/2] s* op2t[x/2];\n * resb[x/2] = op1b[x/2] s* op2b[x/2];\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H].H[1] = rest[1]; R[t_H].H[0] = resb[1];\n * R[t_L].H[1] = rest[0]; R[t_L].H[0] = resb[0];\n * x = 0 and 2\n * * RV64:\n * if (is `SMUL8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x+1]; // top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x]; // bottom\n * } else if (is `SMULX8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x]; // Rs1 top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x+1]; // Rs1 bottom\n * }\n * rest[x/2] = op1t[x/2] s* op2t[x/2];\n * resb[x/2] = op1b[x/2] s* op2b[x/2];\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * Rd.W[1].H[1] = rest[1]; Rd.W[1].H[0] = resb[1];\n * Rd.W[0].H[1] = rest[0]; Rd.W[0].H[0] = resb[0];\n * x = 0 and 2\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_SMUL8(unsigned int a, unsigned int b) {\n  register unsigned long long result;\n  __ASM volatile(\"smul8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.122.1. SMUL8 ===== */\n\n/* ===== Inline Function Start for 3.122.2. SMULX8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MULTIPLY\n * \\brief SMULX8 (SIMD Signed Crossed 8-bit Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMUL8 Rd, Rs1, Rs2\n * SMULX8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do signed 8-bit multiplications and generate four 16-bit results simultaneously.\n *\n * **RV32 Description**:\\n\n * For the `SMUL8` instruction, multiply the 8-bit data elements of Rs1 with the\n * corresponding 8-bit data elements of Rs2.\n * For the `SMULX8` instruction, multiply the first and second 8-bit data elements of Rs1 with the\n * second and first 8-bit data elements of Rs2. At the same time, multiply the third and fourth 8-bit data\n * elements of Rs1 with the fourth and third 8-bit data elements of Rs2.\n * The four 16-bit results are then written into an even/odd pair of registers specified by Rd(4,1).\n * Rd(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the two 16-bit results calculated from the top part of\n * Rs1 and the even `2d` register of the pair contains the two 16-bit results calculated from the bottom\n * part of Rs1.\n *\n * **RV64 Description**:\\n\n * For the `SMUL8` instruction, multiply the 8-bit data elements of Rs1 with the\n * corresponding 8-bit data elements of Rs2.\n * For the `SMULX8` instruction, multiply the first and second 8-bit data elements of Rs1 with the\n * second and first 8-bit data elements of Rs2. At the same time, multiply the third and fourth 8-bit data\n * elements of Rs1 with the fourth and third 8-bit data elements of Rs2.\n * The four 16-bit results are then written into Rd. The Rd.W[1] contains the two 16-bit results\n * calculated from the top part of Rs1 and the Rd.W[0] contains the two 16-bit results calculated from\n * the bottom part of Rs1.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * if (is `SMUL8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x+1]; // top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x]; // bottom\n * } else if (is `SMULX8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x]; // Rs1 top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x+1]; // Rs1 bottom\n * }\n * rest[x/2] = op1t[x/2] s* op2t[x/2];\n * resb[x/2] = op1b[x/2] s* op2b[x/2];\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H].H[1] = rest[1]; R[t_H].H[0] = resb[1];\n * R[t_L].H[1] = rest[0]; R[t_L].H[0] = resb[0];\n * x = 0 and 2\n * * RV64:\n * if (is `SMUL8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x+1]; // top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x]; // bottom\n * } else if (is `SMULX8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x]; // Rs1 top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x+1]; // Rs1 bottom\n * }\n * rest[x/2] = op1t[x/2] s* op2t[x/2];\n * resb[x/2] = op1b[x/2] s* op2b[x/2];\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * Rd.W[1].H[1] = rest[1]; Rd.W[1].H[0] = resb[1];\n * Rd.W[0].H[1] = rest[0]; Rd.W[0].H[0] = resb[0];\n * x = 0 and 2\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_SMULX8(unsigned int a, unsigned int b) {\n  register unsigned long long result;\n  __ASM volatile(\"smulx8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.122.2. SMULX8 ===== */\n\n/* ===== Inline Function Start for 3.123.1. SMUL16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MULTIPLY\n * \\brief SMUL16 (SIMD Signed 16-bit Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMUL16 Rd, Rs1, Rs2\n * SMULX16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do signed 16-bit multiplications and generate two 32-bit results simultaneously.\n *\n * **RV32 Description**:\\n\n * For the `SMUL16` instruction, multiply the top 16-bit Q15 content of Rs1 with\n * the top 16-bit Q15 content of Rs2. At the same time, multiply the bottom 16-bit Q15 content of Rs1\n * with the bottom 16-bit Q15 content of Rs2.\n * For the `SMULX16` instruction, multiply the top 16-bit Q15 content of Rs1 with the bottom 16-bit\n * Q15 content of Rs2. At the same time, multiply the bottom 16-bit Q15 content of Rs1 with the top 16-\n * bit Q15 content of Rs2.\n * The two Q30 results are then written into an even/odd pair of registers specified by Rd(4,1). Rd(4,1),\n * i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair includes\n * register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the 32-bit result calculated from the top part of Rs1 and\n * the even `2d` register of the pair contains the 32-bit result calculated from the bottom part of Rs1.\n *\n * **RV64 Description**:\\n\n * For the `SMUL16` instruction, multiply the top 16-bit Q15 content of the lower\n * 32-bit word in Rs1 with the top 16-bit Q15 content of the lower 32-bit word in Rs2. At the same time,\n * multiply the bottom 16-bit Q15 content of the lower 32-bit word in Rs1 with the bottom 16-bit Q15\n * content of the lower 32-bit word in Rs2.\n * For the `SMULX16` instruction, multiply the top 16-bit Q15 content of the lower 32-bit word in Rs1\n * with the bottom 16-bit Q15 content of the lower 32-bit word in Rs2. At the same time, multiply the\n * bottom 16-bit Q15 content of the lower 32-bit word in Rs1 with the top 16-bit Q15 content of the\n * lower 32-bit word in Rs2.\n * The two 32-bit Q30 results are then written into Rd. The result calculated from the top 16-bit of the\n * lower 32-bit word in Rs1 is written to Rd.W[1]. And the result calculated from the bottom 16-bit of\n * the lower 32-bit word in Rs1 is written to Rd.W[0]\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * if (is `SMUL16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[1]; // top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[0]; // bottom\n * } else if (is `SMULX16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[0]; // Rs1 top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   res = aop s* bop;\n * }\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H] = rest;\n * R[t_L] = resb;\n * * RV64:\n * if (is `SMUL16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[1]; // top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[0]; // bottom\n * } else if (is `SMULX16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[0]; // Rs1 top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   res = aop s* bop;\n * }\n * Rd.W[1] = rest;\n * Rd.W[0] = resb;\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_SMUL16(unsigned int a, unsigned int b) {\n  register unsigned long long result;\n  __ASM volatile(\"smul16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.123.1. SMUL16 ===== */\n\n/* ===== Inline Function Start for 3.123.2. SMULX16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MULTIPLY\n * \\brief SMULX16 (SIMD Signed Crossed 16-bit Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMUL16 Rd, Rs1, Rs2\n * SMULX16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do signed 16-bit multiplications and generate two 32-bit results simultaneously.\n *\n * **RV32 Description**:\\n\n * For the `SMUL16` instruction, multiply the top 16-bit Q15 content of Rs1 with\n * the top 16-bit Q15 content of Rs2. At the same time, multiply the bottom 16-bit Q15 content of Rs1\n * with the bottom 16-bit Q15 content of Rs2.\n * For the `SMULX16` instruction, multiply the top 16-bit Q15 content of Rs1 with the bottom 16-bit\n * Q15 content of Rs2. At the same time, multiply the bottom 16-bit Q15 content of Rs1 with the top 16-\n * bit Q15 content of Rs2.\n * The two Q30 results are then written into an even/odd pair of registers specified by Rd(4,1). Rd(4,1),\n * i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair includes\n * register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the 32-bit result calculated from the top part of Rs1 and\n * the even `2d` register of the pair contains the 32-bit result calculated from the bottom part of Rs1.\n *\n * **RV64 Description**:\\n\n * For the `SMUL16` instruction, multiply the top 16-bit Q15 content of the lower\n * 32-bit word in Rs1 with the top 16-bit Q15 content of the lower 32-bit word in Rs2. At the same time,\n * multiply the bottom 16-bit Q15 content of the lower 32-bit word in Rs1 with the bottom 16-bit Q15\n * content of the lower 32-bit word in Rs2.\n * For the `SMULX16` instruction, multiply the top 16-bit Q15 content of the lower 32-bit word in Rs1\n * with the bottom 16-bit Q15 content of the lower 32-bit word in Rs2. At the same time, multiply the\n * bottom 16-bit Q15 content of the lower 32-bit word in Rs1 with the top 16-bit Q15 content of the\n * lower 32-bit word in Rs2.\n * The two 32-bit Q30 results are then written into Rd. The result calculated from the top 16-bit of the\n * lower 32-bit word in Rs1 is written to Rd.W[1]. And the result calculated from the bottom 16-bit of\n * the lower 32-bit word in Rs1 is written to Rd.W[0]\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * if (is `SMUL16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[1]; // top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[0]; // bottom\n * } else if (is `SMULX16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[0]; // Rs1 top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   res = aop s* bop;\n * }\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H] = rest;\n * R[t_L] = resb;\n * * RV64:\n * if (is `SMUL16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[1]; // top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[0]; // bottom\n * } else if (is `SMULX16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[0]; // Rs1 top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   res = aop s* bop;\n * }\n * Rd.W[1] = rest;\n * Rd.W[0] = resb;\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_SMULX16(unsigned int a, unsigned int b) {\n  register unsigned long long result;\n  __ASM volatile(\"smulx16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.123.2. SMULX16 ===== */\n\n/* ===== Inline Function Start for 3.124. SRA.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief SRA.u (Rounding Shift Right Arithmetic)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SRA.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Perform an arithmetic right shift operation with rounding. The shift amount is a variable\n * from a GPR.\n *\n * **Description**:\\n\n * This instruction right-shifts the content of Rs1 arithmetically. The shifted out bits are\n * filled with the sign-bit and the shift amount is specified by the low-order 5-bits (RV32) or 6-bits\n * (RV64) of the Rs2 register. For the rounding operation, a value of 1 is added to the most significant\n * discarded bit of the data to calculate the final result. And the result is written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * sa = Rs2[4:0];\n * if (sa > 0) {\n *   res[31:-1] = SE33(Rs1[31:(sa-1)]) + 1;\n *   Rd = res[31:0];\n * } else {\n *   Rd = Rs1;\n * }\n * * RV64:\n * sa = Rs2[5:0];\n * if (sa > 0) {\n *   res[63:-1] = SE65(Rs1[63:(sa-1)]) + 1;\n *   Rd = res[63:0];\n * } else {\n *   Rd = Rs1;\n * }\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SRA_U(long a, unsigned int b) {\n  register long result;\n  __ASM volatile(\"sra.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.124. SRA.u ===== */\n\n/* ===== Inline Function Start for 3.125. SRAI.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief SRAI.u (Rounding Shift Right Arithmetic Immediate)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SRAI.u Rd, Rs1, imm6u[4:0] (RV32)\n * SRAI.u Rd, Rs1, imm6u[5:0] (RV64)\n * ~~~\n *\n * **Purpose**:\\n\n * Perform an arithmetic right shift operation with rounding. The shift amount is an\n * immediate value.\n *\n * **Description**:\\n\n * This instruction right-shifts the content of Rs1 arithmetically. The shifted out bits are\n * filled with the sign-bit and the shift amount is specified by the imm6u[4:0] (RV32) or imm6u[5:0]\n * (RV64) constant . For the rounding operation, a value of 1 is added to the most significant discarded\n * bit of the data to calculate the final result. And the result is written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * sa = imm6u[4:0];\n * if (sa > 0) {\n *   res[31:-1] = SE33(Rs1[31:(sa-1)]) + 1;\n *   Rd = res[31:0];\n * } else {\n *   Rd = Rs1;\n * }\n * * RV64:\n * sa = imm6u[5:0];\n * if (sa > 0) {\n *   res[63:-1] = SE65(Rs1[63:(sa-1)]) + 1;\n *   Rd = res[63:0];\n * } else {\n *   Rd = Rs1;\n * }\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n#define __RV_SRAI_U(a, b)                                                  \\\n  ({                                                                       \\\n    register long result;                                                  \\\n    register long __a = (long)(a);                                         \\\n    __ASM volatile(\"srai.u %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                \\\n  })\n/* ===== Inline Function End for 3.125. SRAI.u ===== */\n\n/* ===== Inline Function Start for 3.126.1. SRA8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SRA8 (SIMD 8-bit Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRA8 Rd, Rs1, Rs2\n * SRA8.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit element arithmetic right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the data elements. The shift amount is specified by the low-order\n * 3-bits of the value in the Rs2 register. For the rounding operation of the `.u` form, a value of 1 is\n * added to the most significant discarded bit of each 8-bit data element to calculate the final results.\n * And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[2:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRA8.u\n *     res[7:-1] = SE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[7:0];\n *   } else { // SRA8\n *     Rd.B[x] = SE8(Rd.B[x][7:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRA8(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"sra8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.126.1. SRA8 ===== */\n\n/* ===== Inline Function Start for 3.126.2. SRA8.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SRA8.u (SIMD 8-bit Rounding Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRA8 Rd, Rs1, Rs2\n * SRA8.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit element arithmetic right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the data elements. The shift amount is specified by the low-order\n * 3-bits of the value in the Rs2 register. For the rounding operation of the `.u` form, a value of 1 is\n * added to the most significant discarded bit of each 8-bit data element to calculate the final results.\n * And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[2:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRA8.u\n *     res[7:-1] = SE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[7:0];\n *   } else { // SRA8\n *     Rd.B[x] = SE8(Rd.B[x][7:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRA8_U(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"sra8.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.126.2. SRA8.u ===== */\n\n/* ===== Inline Function Start for 3.127.1. SRAI8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SRAI8 (SIMD 8-bit Shift Right Arithmetic Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRAI8 Rd, Rs1, imm3u\n * SRAI8.u Rd, Rs1, imm3u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit element arithmetic right shift operations simultaneously. The shift amount is an\n * immediate value. The `.u` form performs additional rounding up operations on the shifted results.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the data elements. The shift amount is specified by the imm3u\n * constant. For the rounding operation of the `.u` form, a value of 1 is added to the most significant\n * discarded bit of each 8-bit data element to calculate the final results. And the results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm3u[2:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRA8.u\n *     res[7:-1] = SE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[7:0];\n *   } else { // SRA8\n *     Rd.B[x] = SE8(Rd.B[x][7:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SRAI8(a, b)                                                  \\\n  ({                                                                      \\\n    register unsigned long result;                                        \\\n    register unsigned long __a = (unsigned long)(a);                      \\\n    __ASM volatile(\"srai8 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                               \\\n  })\n/* ===== Inline Function End for 3.127.1. SRAI8 ===== */\n\n/* ===== Inline Function Start for 3.127.2. SRAI8.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SRAI8.u (SIMD 8-bit Rounding Shift Right Arithmetic Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRAI8 Rd, Rs1, imm3u\n * SRAI8.u Rd, Rs1, imm3u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit element arithmetic right shift operations simultaneously. The shift amount is an\n * immediate value. The `.u` form performs additional rounding up operations on the shifted results.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the data elements. The shift amount is specified by the imm3u\n * constant. For the rounding operation of the `.u` form, a value of 1 is added to the most significant\n * discarded bit of each 8-bit data element to calculate the final results. And the results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm3u[2:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRA8.u\n *     res[7:-1] = SE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[7:0];\n *   } else { // SRA8\n *     Rd.B[x] = SE8(Rd.B[x][7:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SRAI8_U(a, b)                                                  \\\n  ({                                                                        \\\n    register unsigned long result;                                          \\\n    register unsigned long __a = (unsigned long)(a);                        \\\n    __ASM volatile(\"srai8.u %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                 \\\n  })\n/* ===== Inline Function End for 3.127.2. SRAI8.u ===== */\n\n/* ===== Inline Function Start for 3.128.1. SRA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SRA16 (SIMD 16-bit Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRA16 Rd, Rs1, Rs2\n * SRA16.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit element arithmetic right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the data elements. The shift amount is specified by the low-order\n * 4-bits of the value in the Rs2 register. For the rounding operation of the `.u` form, a value of 1 is\n * added to the most significant discarded bit of each 16-bit data element to calculate the final results.\n * And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[3:0];\n * if (sa != 0) {\n *   if (`.u` form) { // SRA16.u\n *     res[15:-1] = SE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[15:0];\n *   } else { // SRA16\n *     Rd.H[x] = SE16(Rs1.H[x][15:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRA16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"sra16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.128.1. SRA16 ===== */\n\n/* ===== Inline Function Start for 3.128.2. SRA16.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SRA16.u (SIMD 16-bit Rounding Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRA16 Rd, Rs1, Rs2\n * SRA16.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit element arithmetic right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the data elements. The shift amount is specified by the low-order\n * 4-bits of the value in the Rs2 register. For the rounding operation of the `.u` form, a value of 1 is\n * added to the most significant discarded bit of each 16-bit data element to calculate the final results.\n * And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[3:0];\n * if (sa != 0) {\n *   if (`.u` form) { // SRA16.u\n *     res[15:-1] = SE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[15:0];\n *   } else { // SRA16\n *     Rd.H[x] = SE16(Rs1.H[x][15:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRA16_U(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"sra16.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.128.2. SRA16.u ===== */\n\n/* ===== Inline Function Start for 3.129.1. SRAI16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SRAI16 (SIMD 16-bit Shift Right Arithmetic Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRAI16 Rd, Rs1, imm4u\n * SRAI16.u Rd, Rs1, imm4u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements arithmetic right shift operations simultaneously. The shift amount is\n * an immediate value. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the 16-bit data elements. The shift amount is specified by the\n * imm4u constant. For the rounding operation of the `.u` form, a value of 1 is added to the most\n * significant discarded bit of each 16-bit data to calculate the final results. And the results are written\n * to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm4u[3:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRAI16.u\n *     res[15:-1] = SE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[15:0];\n *   } else { // SRAI16\n *     Rd.H[x] = SE16(Rs1.H[x][15:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SRAI16(a, b)                                                  \\\n  ({                                                                       \\\n    register unsigned long result;                                         \\\n    register unsigned long __a = (unsigned long)(a);                       \\\n    __ASM volatile(\"srai16 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                \\\n  })\n/* ===== Inline Function End for 3.129.1. SRAI16 ===== */\n\n/* ===== Inline Function Start for 3.129.2. SRAI16.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SRAI16.u (SIMD 16-bit Rounding Shift Right Arithmetic Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRAI16 Rd, Rs1, imm4u\n * SRAI16.u Rd, Rs1, imm4u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements arithmetic right shift operations simultaneously. The shift amount is\n * an immediate value. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the 16-bit data elements. The shift amount is specified by the\n * imm4u constant. For the rounding operation of the `.u` form, a value of 1 is added to the most\n * significant discarded bit of each 16-bit data to calculate the final results. And the results are written\n * to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm4u[3:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRAI16.u\n *     res[15:-1] = SE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[15:0];\n *   } else { // SRAI16\n *     Rd.H[x] = SE16(Rs1.H[x][15:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SRAI16_U(a, b)                                                  \\\n  ({                                                                         \\\n    register unsigned long result;                                           \\\n    register unsigned long __a = (unsigned long)(a);                         \\\n    __ASM volatile(\"srai16.u %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                  \\\n  })\n/* ===== Inline Function End for 3.129.2. SRAI16.u ===== */\n\n/* ===== Inline Function Start for 3.130.1. SRL8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SRL8 (SIMD 8-bit Shift Right Logical)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRL8 Rt, Ra, Rb\n * SRL8.u Rt, Ra, Rb\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits are\n * filled with zero. The shift amount is specified by the low-order 3-bits of the value in the Rs2 register.\n * For the rounding operation of the `.u` form, a value of 1 is added to the most significant discarded\n * bit of each 8-bit data element to calculate the final results. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[2:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRL8.u\n *     res[8:0] = ZE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[8:1];\n *   } else { // SRL8\n *     Rd.B[x] = ZE8(Rs1.B[x][7:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRL8(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"srl8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.130.1. SRL8 ===== */\n\n/* ===== Inline Function Start for 3.130.2. SRL8.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SRL8.u (SIMD 8-bit Rounding Shift Right Logical)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRL8 Rt, Ra, Rb\n * SRL8.u Rt, Ra, Rb\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits are\n * filled with zero. The shift amount is specified by the low-order 3-bits of the value in the Rs2 register.\n * For the rounding operation of the `.u` form, a value of 1 is added to the most significant discarded\n * bit of each 8-bit data element to calculate the final results. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[2:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRL8.u\n *     res[8:0] = ZE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[8:1];\n *   } else { // SRL8\n *     Rd.B[x] = ZE8(Rs1.B[x][7:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRL8_U(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"srl8.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.130.2. SRL8.u ===== */\n\n/* ===== Inline Function Start for 3.131.1. SRLI8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SRLI8 (SIMD 8-bit Shift Right Logical Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRLI8 Rt, Ra, imm3u\n * SRLI8.u Rt, Ra, imm3u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical right shift operations simultaneously. The shift amount is an\n * immediate value. The `.u` form performs additional rounding up operations on the shifted results.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits are\n * filled with zero. The shift amount is specified by the imm3u constant. For the rounding operation of\n * the `.u` form, a value of 1 is added to the most significant discarded bit of each 8-bit data element to\n * calculate the final results. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm3u[2:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRLI8.u\n *     res[8:0] = ZE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[8:1];\n *   } else { // SRLI8\n *     Rd.B[x] = ZE8(Rs1.B[x][7:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SRLI8(a, b)                                                  \\\n  ({                                                                      \\\n    register unsigned long result;                                        \\\n    register unsigned long __a = (unsigned long)(a);                      \\\n    __ASM volatile(\"srli8 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                               \\\n  })\n/* ===== Inline Function End for 3.131.1. SRLI8 ===== */\n\n/* ===== Inline Function Start for 3.131.2. SRLI8.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SRLI8.u (SIMD 8-bit Rounding Shift Right Logical Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRLI8 Rt, Ra, imm3u\n * SRLI8.u Rt, Ra, imm3u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical right shift operations simultaneously. The shift amount is an\n * immediate value. The `.u` form performs additional rounding up operations on the shifted results.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits are\n * filled with zero. The shift amount is specified by the imm3u constant. For the rounding operation of\n * the `.u` form, a value of 1 is added to the most significant discarded bit of each 8-bit data element to\n * calculate the final results. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm3u[2:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRLI8.u\n *     res[8:0] = ZE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[8:1];\n *   } else { // SRLI8\n *     Rd.B[x] = ZE8(Rs1.B[x][7:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SRLI8_U(a, b)                                                  \\\n  ({                                                                        \\\n    register unsigned long result;                                          \\\n    register unsigned long __a = (unsigned long)(a);                        \\\n    __ASM volatile(\"srli8.u %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                 \\\n  })\n/* ===== Inline Function End for 3.131.2. SRLI8.u ===== */\n\n/* ===== Inline Function Start for 3.132.1. SRL16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SRL16 (SIMD 16-bit Shift Right Logical)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRL16 Rt, Ra, Rb\n *  SRL16.u Rt, Ra, Rb\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical right shift operations simultaneously. The shift amount is a variable from a GPR. The `.u` form performs additional rounding upoperations on the shifted results.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits\n * are filled with zero. The shift amount is specified by the low-order 4-bits of the value in the Rs2\n * register. For the rounding operation of the `.u` form, a value of 1 is added to the most significant\n * discarded bit of each 16-bit data element to calculate the final results. And the results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[3:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRL16.u\n *     res[16:0] = ZE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[16:1];\n *   } else { // SRL16\n *     Rd.H[x] = ZE16(Rs1.H[x][15:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRL16(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"srl16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.132.1. SRL16 ===== */\n\n/* ===== Inline Function Start for 3.132.2. SRL16.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SRL16.u (SIMD 16-bit Rounding Shift Right Logical)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRL16 Rt, Ra, Rb\n *  SRL16.u Rt, Ra, Rb\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical right shift operations simultaneously. The shift amount is a variable from a GPR. The `.u` form performs additional rounding upoperations on the shifted results.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits\n * are filled with zero. The shift amount is specified by the low-order 4-bits of the value in the Rs2\n * register. For the rounding operation of the `.u` form, a value of 1 is added to the most significant\n * discarded bit of each 16-bit data element to calculate the final results. And the results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[3:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRL16.u\n *     res[16:0] = ZE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[16:1];\n *   } else { // SRL16\n *     Rd.H[x] = ZE16(Rs1.H[x][15:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRL16_U(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"srl16.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.132.2. SRL16.u ===== */\n\n/* ===== Inline Function Start for 3.133.1. SRLI16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SRLI16 (SIMD 16-bit Shift Right Logical Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRLI16 Rt, Ra, imm4u\n * SRLI16.u Rt, Ra, imm4u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical right shift operations simultaneously. The shift amount is an\n * immediate value. The `.u` form performs additional rounding up operations on the shifted results.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits\n * are filled with zero. The shift amount is specified by the imm4u constant. For the rounding\n * operation of the `.u` form, a value of 1 is added to the most significant discarded bit of each 16-bit\n * data element to calculate the final results. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm4u;\n * if (sa > 0) {\n *   if (`.u` form) { // SRLI16.u\n *     res[16:0] = ZE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[16:1];\n *   } else { // SRLI16\n *     Rd.H[x] = ZE16(Rs1.H[x][15:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SRLI16(a, b)                                                  \\\n  ({                                                                       \\\n    register unsigned long result;                                         \\\n    register unsigned long __a = (unsigned long)(a);                       \\\n    __ASM volatile(\"srli16 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                \\\n  })\n/* ===== Inline Function End for 3.133.1. SRLI16 ===== */\n\n/* ===== Inline Function Start for 3.133.2. SRLI16.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SRLI16.u (SIMD 16-bit Rounding Shift Right Logical Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRLI16 Rt, Ra, imm4u\n * SRLI16.u Rt, Ra, imm4u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical right shift operations simultaneously. The shift amount is an\n * immediate value. The `.u` form performs additional rounding up operations on the shifted results.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits\n * are filled with zero. The shift amount is specified by the imm4u constant. For the rounding\n * operation of the `.u` form, a value of 1 is added to the most significant discarded bit of each 16-bit\n * data element to calculate the final results. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm4u;\n * if (sa > 0) {\n *   if (`.u` form) { // SRLI16.u\n *     res[16:0] = ZE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[16:1];\n *   } else { // SRLI16\n *     Rd.H[x] = ZE16(Rs1.H[x][15:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SRLI16_U(a, b)                                                  \\\n  ({                                                                         \\\n    register unsigned long result;                                           \\\n    register unsigned long __a = (unsigned long)(a);                         \\\n    __ASM volatile(\"srli16.u %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                  \\\n  })\n/* ===== Inline Function End for 3.133.2. SRLI16.u ===== */\n\n/* ===== Inline Function Start for 3.134. STAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief STAS16 (SIMD 16-bit Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * STAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit integer element addition and 16-bit integer element subtraction in a 32-bit\n * chunk simultaneously. Operands are from corresponding positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit integer element in [31:16] of 32-bit chunks in Rs1 with\n * the 16-bit integer element in [31:16] of 32-bit chunks in Rs2, and writes the result to [31:16] of 32-bit\n * chunks in Rd; at the same time, it subtracts the 16-bit integer element in [15:0] of 32-bit chunks in\n * Rs2 from the 16-bit integer element in [15:0] of 32-bit chunks, and writes the result to [15:0] of 32-\n * bit chunks in Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned operations.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = Rs1.W[x][31:16] + Rs2.W[x][31:16];\n * Rd.W[x][15:0] = Rs1.W[x][15:0] - Rs2.W[x][15:0];\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_STAS16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"stas16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.134. STAS16 ===== */\n\n/* ===== Inline Function Start for 3.135. STSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief STSA16 (SIMD 16-bit Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * STSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit integer element subtraction and 16-bit integer element addition in a 32-bit\n * chunk simultaneously. Operands are from corresponding positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit integer element in [31:16] of 32-bit chunks in Rs2\n * from the 16-bit integer element in [31:16] of 32-bit chunks in Rs1, and writes the result to [31:16] of\n * 32-bit chunks in Rd; at the same time, it adds the 16-bit integer element in [15:0] of 32-bit chunks in\n * Rs2 with the 16-bit integer element in [15:0] of 32-bit chunks in Rs1, and writes the result to [15:0] of\n * 32-bit chunks in Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned operations.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = Rs1.W[x][31:16] - Rs2.W[x][31:16];\n * Rd.W[x][15:0] = Rs1.W[x][15:0] + Rs2.W[x][15:0];\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_STSA16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"stsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.135. STSA16 ===== */\n\n/* ===== Inline Function Start for 3.136. SUB8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief SUB8 (SIMD 8-bit Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SUB8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit integer element subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 8-bit integer elements in Rs2 from the 8-bit integer\n * elements in Rs1, and then writes the result to Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = Rs1.B[x] - Rs2.B[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SUB8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"sub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.136. SUB8 ===== */\n\n/* ===== Inline Function Start for 3.137. SUB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief SUB16 (SIMD 16-bit Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SUB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit integer element subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit integer elements in Rs2 from the 16-bit integer\n * elements in Rs1, and then writes the result to Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = Rs1.H[x] - Rs2.H[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SUB16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"sub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.137. SUB16 ===== */\n\n/* ===== Inline Function Start for 3.138. SUB64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief SUB64 (64-bit Subtraction)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SUB64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Perform a 64-bit signed or unsigned integer subtraction.\n *\n * **RV32 Description**:\\n\n * This instruction subtracts the 64-bit integer of an even/odd pair of registers\n * specified by Rs2(4,1) from the 64-bit integer of an even/odd pair of registers specified by Rs1(4,1),\n * and then writes the 64-bit result to an even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * This instruction subtracts the 64-bit integer of Rs2 from the 64-bit integer of Rs1,\n * and then writes the 64-bit result to Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * a_L = CONCAT(Rs1(4,1),1'b0); a_H = CONCAT(Rs1(4,1),1'b1);\n * b_L = CONCAT(Rs2(4,1),1'b0); b_H = CONCAT(Rs2(4,1),1'b1);\n * R[t_H].R[t_L] = R[a_H].R[a_L] - R[b_H].R[b_L];\n * * RV64:\n * Rd = Rs1 - Rs2;\n * ~~~\n *\n * \\param [in]  a    unsigned long long type of value stored in a\n * \\param [in]  b    unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_SUB64(unsigned long long a, unsigned long long b) {\n  register unsigned long long result;\n  __ASM volatile(\"sub64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.138. SUB64 ===== */\n\n/* ===== Inline Function Start for 3.139.1. SUNPKD810 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief SUNPKD810 (Signed Unpacking Bytes 1 & 0)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte *x and byte y* of 32-bit chunks in a register into two 16-bit signed halfwords\n * of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `SUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit signed halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = SE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = SE16(Rs1.W[m].B[y])\n * // SUNPKD810, x=1,y=0\n * // SUNPKD820, x=2,y=0\n * // SUNPKD830, x=3,y=0\n * // SUNPKD831, x=3,y=1\n * // SUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SUNPKD810(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"sunpkd810 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.139.1. SUNPKD810 ===== */\n\n/* ===== Inline Function Start for 3.139.2. SUNPKD820 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief SUNPKD820 (Signed Unpacking Bytes 2 & 0)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte *x and byte y* of 32-bit chunks in a register into two 16-bit signed halfwords\n * of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `SUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit signed halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = SE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = SE16(Rs1.W[m].B[y])\n * // SUNPKD810, x=1,y=0\n * // SUNPKD820, x=2,y=0\n * // SUNPKD830, x=3,y=0\n * // SUNPKD831, x=3,y=1\n * // SUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SUNPKD820(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"sunpkd820 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.139.2. SUNPKD820 ===== */\n\n/* ===== Inline Function Start for 3.139.3. SUNPKD830 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief SUNPKD830 (Signed Unpacking Bytes 3 & 0)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte *x and byte y* of 32-bit chunks in a register into two 16-bit signed halfwords\n * of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `SUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit signed halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = SE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = SE16(Rs1.W[m].B[y])\n * // SUNPKD810, x=1,y=0\n * // SUNPKD820, x=2,y=0\n * // SUNPKD830, x=3,y=0\n * // SUNPKD831, x=3,y=1\n * // SUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SUNPKD830(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"sunpkd830 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.139.3. SUNPKD830 ===== */\n\n/* ===== Inline Function Start for 3.139.4. SUNPKD831 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief SUNPKD831 (Signed Unpacking Bytes 3 & 1)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte *x and byte y* of 32-bit chunks in a register into two 16-bit signed halfwords\n * of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `SUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit signed halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = SE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = SE16(Rs1.W[m].B[y])\n * // SUNPKD810, x=1,y=0\n * // SUNPKD820, x=2,y=0\n * // SUNPKD830, x=3,y=0\n * // SUNPKD831, x=3,y=1\n * // SUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SUNPKD831(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"sunpkd831 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.139.4. SUNPKD831 ===== */\n\n/* ===== Inline Function Start for 3.139.5. SUNPKD832 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief SUNPKD832 (Signed Unpacking Bytes 3 & 2)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte *x and byte y* of 32-bit chunks in a register into two 16-bit signed halfwords\n * of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `SUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit signed halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = SE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = SE16(Rs1.W[m].B[y])\n * // SUNPKD810, x=1,y=0\n * // SUNPKD820, x=2,y=0\n * // SUNPKD830, x=3,y=0\n * // SUNPKD831, x=3,y=1\n * // SUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SUNPKD832(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"sunpkd832 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.139.5. SUNPKD832 ===== */\n\n/* ===== Inline Function Start for 3.140. SWAP8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief SWAP8 (Swap Byte within Halfword)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SWAP8 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Swap the bytes within each halfword of a register.\n *\n * **Description**:\\n\n * This instruction swaps the bytes within each halfword of Rs1 and writes the result to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = CONCAT(Rs1.H[x][7:0],Rs1.H[x][15:8]);\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SWAP8(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"swap8 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.140. SWAP8 ===== */\n\n/* ===== Inline Function Start for 3.141. SWAP16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief SWAP16 (Swap Halfword within Word)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SWAP16 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Swap the 16-bit halfwords within each word of a register.\n *\n * **Description**:\\n\n * This instruction swaps the 16-bit halfwords within each word of Rs1 and writes the\n * result to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = CONCAT(Rs1.W[x][15:0],Rs1.H[x][31:16]);\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SWAP16(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"swap16 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.141. SWAP16 ===== */\n\n/* ===== Inline Function Start for 3.142. UCLIP8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief UCLIP8 (SIMD 8-bit Unsigned Clip Value)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UCLIP8 Rt, Ra, imm3u\n * ~~~\n *\n * **Purpose**:\\n\n * Limit the 8-bit signed elements of a register into an unsigned range simultaneously.\n *\n * **Description**:\\n\n * This instruction limits the 8-bit signed elements stored in Rs1 into an unsigned integer\n * range between 2^imm3u-1 and 0, and writes the limited results to Rd. For example, if imm3u is 3, the 8-\n * bit input values should be saturated between 7 and 0. If saturation is performed, set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.H[x];\n * if (src > (2^imm3u)-1) {\n *   src = (2^imm3u)-1;\n *   OV = 1;\n * } else if (src < 0) {\n *   src = 0;\n *   OV = 1;\n * }\n * Rd.H[x] = src;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_UCLIP8(a, b)                                                  \\\n  ({                                                                       \\\n    register unsigned long result;                                         \\\n    register unsigned long __a = (unsigned long)(a);                       \\\n    __ASM volatile(\"uclip8 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                \\\n  })\n/* ===== Inline Function End for 3.142. UCLIP8 ===== */\n\n/* ===== Inline Function Start for 3.143. UCLIP16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief UCLIP16 (SIMD 16-bit Unsigned Clip Value)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UCLIP16 Rt, Ra, imm4u\n * ~~~\n *\n * **Purpose**:\\n\n * Limit the 16-bit signed elements of a register into an unsigned range simultaneously.\n *\n * **Description**:\\n\n * This instruction limits the 16-bit signed elements stored in Rs1 into an unsigned\n * integer range between 2imm4u-1 and 0, and writes the limited results to Rd. For example, if imm4u is\n * 3, the 16-bit input values should be saturated between 7 and 0. If saturation is performed, set OV bit\n * to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.H[x];\n * if (src > (2^imm4u)-1) {\n *   src = (2^imm4u)-1;\n *   OV = 1;\n * } else if (src < 0) {\n *   src = 0;\n *   OV = 1;\n * }\n * Rd.H[x] = src;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_UCLIP16(a, b)                                                  \\\n  ({                                                                        \\\n    register unsigned long result;                                          \\\n    register unsigned long __a = (unsigned long)(a);                        \\\n    __ASM volatile(\"uclip16 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                 \\\n  })\n/* ===== Inline Function End for 3.143. UCLIP16 ===== */\n\n/* ===== Inline Function Start for 3.144. UCLIP32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_MISC\n * \\brief UCLIP32 (SIMD 32-bit Unsigned Clip Value)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UCLIP32 Rd, Rs1, imm5u[4:0]\n * ~~~\n *\n * **Purpose**:\\n\n * Limit the 32-bit signed integer elements of a register into an unsigned range\n * simultaneously.\n *\n * **Description**:\\n\n * This instruction limits the 32-bit signed integer elements stored in Rs1 into an\n * unsigned integer range between 2imm5u-1 and 0, and writes the limited results to Rd. For example, if\n * imm5u is 3, the 32-bit input values should be saturated between 7 and 0. If saturation is performed,\n * set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.W[x];\n * if (src > (2^imm5u)-1) {\n *   src = (2^imm5u)-1;\n *   OV = 1;\n * } else if (src < 0) {\n *   src = 0;\n *   OV = 1;\n * }\n * Rd.W[x] = src\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_UCLIP32(a, b)                                                  \\\n  ({                                                                        \\\n    register unsigned long result;                                          \\\n    register unsigned long __a = (unsigned long)(a);                        \\\n    __ASM volatile(\"uclip32 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                                 \\\n  })\n/* ===== Inline Function End for 3.144. UCLIP32 ===== */\n\n/* ===== Inline Function Start for 3.145. UCMPLE8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_CMP\n * \\brief UCMPLE8 (SIMD 8-bit Unsigned Compare Less Than & Equal)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UCMPLE8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit unsigned integer elements less than & equal comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit unsigned integer elements in Rs1 with the 8-bit\n * unsigned integer elements in Rs2 to see if the one in Rs1 is less than or equal to the one in Rs2. If it\n * is true, the result is 0xFF; otherwise, the result is 0x0. The four comparison results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] <=u Rs2.B[x])? 0xff : 0x0;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UCMPLE8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ucmple8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.145. UCMPLE8 ===== */\n\n/* ===== Inline Function Start for 3.146. UCMPLE16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_CMP\n * \\brief UCMPLE16 (SIMD 16-bit Unsigned Compare Less Than & Equal)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UCMPLE16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer elements less than & equal comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit unsigned integer elements in Rs1 with the 16-bit\n * unsigned integer elements in Rs2 to see if the one in Rs1 is less than or equal to the one in Rs2. If it\n * is true, the result is 0xFFFF; otherwise, the result is 0x0. The element comparison results are\n * written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] <=u Rs2.H[x])? 0xffff : 0x0;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UCMPLE16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ucmple16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.146. UCMPLE16 ===== */\n\n/* ===== Inline Function Start for 3.147. UCMPLT8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_CMP\n * \\brief UCMPLT8 (SIMD 8-bit Unsigned Compare Less Than)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UCMPLT8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit unsigned integer elements less than comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit unsigned integer elements in Rs1 with the 8-bit\n * unsigned integer elements in Rs2 to see if the one in Rs1 is less than the one in Rs2. If it is true, the\n * result is 0xFF; otherwise, the result is 0x0. The element comparison results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] <u Rs2.B[x])? 0xff : 0x0;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UCMPLT8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ucmplt8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.147. UCMPLT8 ===== */\n\n/* ===== Inline Function Start for 3.148. UCMPLT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_CMP\n * \\brief UCMPLT16 (SIMD 16-bit Unsigned Compare Less Than)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UCMPLT16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer elements less than comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit unsigned integer elements in Rs1 with the 16-bit\n * unsigned integer elements in Rs2 to see if the one in Rs1 is less than the one in Rs2. If it is true, the\n * result is 0xFFFF; otherwise, the result is 0x0. The element comparison results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] <u Rs2.H[x])? 0xffff : 0x0;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UCMPLT16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ucmplt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.148. UCMPLT16 ===== */\n\n/* ===== Inline Function Start for 3.149. UKADD8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief UKADD8 (SIMD 8-bit Unsigned Saturating Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UKADD8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit unsigned integer element saturating additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 8-bit unsigned integer elements in Rs1 with the 8-bit\n * unsigned integer elements in Rs2. If any of the results are beyond the 8-bit unsigned number range\n * (0 <= RES <= 28-1), they are saturated to the range and the OV bit is set to 1. The saturated results are\n * written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.B[x] + Rs2.B[x];\n * if (res[x] > (2^8)-1) {\n *   res[x] = (2^8)-1;\n *   OV = 1;\n * }\n * Rd.B[x] = res[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKADD8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ukadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.149. UKADD8 ===== */\n\n/* ===== Inline Function Start for 3.150. UKADD16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief UKADD16 (SIMD 16-bit Unsigned Saturating Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UKADD16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer element saturating additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit unsigned integer elements in Rs1 with the 16-bit\n * unsigned integer elements in Rs2. If any of the results are beyond the 16-bit unsigned number\n * range (0 <= RES <= 2^16-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.H[x] + Rs2.H[x];\n * if (res[x] > (2^16)-1) {\n *   res[x] = (2^16)-1;\n *   OV = 1;\n * }\n * Rd.H[x] = res[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKADD16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ukadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.150. UKADD16 ===== */\n\n/* ===== Inline Function Start for 3.151. UKADD64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief UKADD64 (64-bit Unsigned Saturating Addition)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * UKADD64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add two 64-bit unsigned integers. The result is saturated to the U64 range.\n *\n * **RV32 Description**:\\n\n * This instruction adds the 64-bit unsigned integer of an even/odd pair of registers\n * specified by Rs1(4,1) with the 64-bit unsigned integer of an even/odd pair of registers specified by\n * Rs2(4,1). If the 64-bit result is beyond the U64 number range (0 <= U64 <= 2^64-1), it is saturated to the\n * range and the OV bit is set to 1. The saturated result is written to an even/odd pair of registers\n * specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction adds the 64-bit unsigned integer in Rs1 with the 64-bit unsigned\n * integer in Rs2. If the 64-bit result is beyond the U64 number range (0 <= U64 <= 2^64-1), it is saturated to\n * the range and the OV bit is set to 1. The saturated result is written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rt(4,1),1'b0); t_H = CONCAT(Rt(4,1),1'b1);\n * a_L = CONCAT(Ra(4,1),1'b0); a_H = CONCAT(Ra(4,1),1'b1);\n * b_L = CONCAT(Rb(4,1),1'b0); b_H = CONCAT(Rb(4,1),1'b1);\n * result = R[a_H].R[a_L] + R[b_H].R[b_L];\n * if (result > (2^64)-1) {\n *   result = (2^64)-1; OV = 1;\n * }\n * R[t_H].R[t_L] = result;\n * * RV64:\n * result = Rs1 + Rs2;\n * if (result > (2^64)-1) {\n *   result = (2^64)-1; OV = 1;\n * }\n * Rd = result;\n * ~~~\n *\n * \\param [in]  a    unsigned long long type of value stored in a\n * \\param [in]  b    unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UKADD64(unsigned long long a, unsigned long long b) {\n  register unsigned long long result;\n  __ASM volatile(\"ukadd64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.151. UKADD64 ===== */\n\n/* ===== Inline Function Start for 3.152. UKADDH ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q15_SAT_ALU\n * \\brief UKADDH (Unsigned Addition with U16 Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * UKADDH Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add the unsigned lower 32-bit content of two registers with U16 saturation.\n *\n * **Description**:\\n\n * The unsigned lower 32-bit content of Rs1 is added with the unsigned lower 32-bit\n * content of Rs2. And the result is saturated to the 16-bit unsigned integer range of [0, 2^16-1] and then\n * sign-extended and written to Rd. If saturation happens, this instruction sets the OV flag.\n *\n * **Operations**:\\n\n * ~~~\n * tmp = Rs1.W[0] + Rs2.W[0];\n * if (tmp > (2^16)-1) {\n *   tmp = (2^16)-1;\n *   OV = 1;\n * }\n * Rd = SE(tmp[15:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKADDH(unsigned int a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"ukaddh %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.152. UKADDH ===== */\n\n/* ===== Inline Function Start for 3.153. UKADDW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief UKADDW (Unsigned Addition with U32 Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * UKADDW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add the unsigned lower 32-bit content of two registers with U32 saturation.\n *\n * **Description**:\\n\n * The unsigned lower 32-bit content of Rs1 is added with the unsigned lower 32-bit\n * content of Rs2. And the result is saturated to the 32-bit unsigned integer range of [0, 2^32-1] and then\n * sign-extended and written to Rd. If saturation happens, this instruction sets the OV flag.\n *\n * **Operations**:\\n\n * ~~~\n * tmp = Rs1.W[0] + Rs2.W[0];\n * if (tmp > (2^32)-1) {\n *   tmp[31:0] = (2^32)-1;\n *   OV = 1;\n * }\n * Rd = tmp[31:0]; // RV32\n * Rd = SE(tmp[31:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKADDW(unsigned int a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"ukaddw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.153. UKADDW ===== */\n\n/* ===== Inline Function Start for 3.154. UKCRAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief UKCRAS16 (SIMD 16-bit Unsigned Saturating Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UKCRAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do one 16-bit unsigned integer element saturating addition and one 16-bit unsigned\n * integer element saturating subtraction in a 32-bit chunk simultaneously. Operands are from crossed\n * positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit unsigned integer element in [31:16] of 32-bit chunks in\n * Rs1 with the 16-bit unsigned integer element in [15:0] of 32-bit chunks in Rs2; at the same time, it\n * subtracts the 16-bit unsigned integer element in [31:16] of 32-bit chunks in Rs2 from the 16-bit\n * unsigned integer element in [15:0] of 32-bit chunks in Rs1. If any of the results are beyond the 16-bit\n * unsigned number range (0 <= RES <= 2^16-1), they are saturated to the range and the OV bit is set to 1.\n * The saturated results are written to [31:16] of 32-bit chunks in Rd for addition and [15:0] of 32-bit\n * chunks in Rd for subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[x][31:16] + Rs2.W[x][15:0];\n * res2 = Rs1.W[x][15:0] - Rs2.W[x][31:16];\n * if (res1 > (2^16)-1) {\n *   res1 = (2^16)-1;\n *   OV = 1;\n * }\n * if (res2 < 0) {\n *   res2 = 0;\n *   OV = 1;\n * }\n * Rd.W[x][31:16] = res1;\n * Rd.W[x][15:0] = res2;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKCRAS16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ukcras16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.154. UKCRAS16 ===== */\n\n/* ===== Inline Function Start for 3.155. UKCRSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief UKCRSA16 (SIMD 16-bit Unsigned Saturating Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UKCRSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do one 16-bit unsigned integer element saturating subtraction and one 16-bit unsigned\n * integer element saturating addition in a 32-bit chunk simultaneously. Operands are from crossed\n * positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit unsigned integer element in [15:0] of 32-bit\n * chunks in Rs2 from the 16-bit unsigned integer element in [31:16] of 32-bit chunks in Rs1; at the\n * same time, it adds the 16-bit unsigned integer element in [31:16] of 32-bit chunks in Rs2 with the 16-\n * bit unsigned integer element in [15:0] of 32-bit chunks in Rs1. If any of the results are beyond the\n * 16-bit unsigned number range (0 <= RES <= 2^16-1), they are saturated to the range and the OV bit is set\n * to 1. The saturated results are written to [31:16] of 32-bit chunks in Rd for subtraction and [15:0] of\n * 32-bit chunks in Rd for addition.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[x][31:16] - Rs2.W[x][15:0];\n * res2 = Rs1.W[x][15:0] + Rs2.W[x][31:16];\n * if (res1 < 0) {\n *   res1 = 0;\n *   OV = 1;\n * } else if (res2 > (2^16)-1) {\n *   res2 = (2^16)-1;\n *   OV = 1;\n * }\n * Rd.W[x][31:16] = res1;\n * Rd.W[x][15:0] = res2;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKCRSA16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ukcrsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.155. UKCRSA16 ===== */\n\n/* ===== Inline Function Start for 3.156. UKMAR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB\n * \\brief UKMAR64 (Unsigned Multiply and Saturating Add to 64-Bit Data)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * UKMAR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit unsigned elements in two registers and add the 64-bit multiplication\n * results to the 64-bit unsigned data of a pair of registers (RV32) or a register (RV64). The result is\n * saturated to the U64 range and written back to the pair of registers (RV32) or the register (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit unsigned data of Rs1 with that of Rs2. It\n * adds the 64-bit multiplication result to the 64-bit unsigned data of an even/odd pair of registers\n * specified by Rd(4,1) with unlimited precision. If the 64-bit addition result is beyond the U64 number\n * range (0 <= U64 <= 2^64-1), it is saturated to the range and the OV bit is set to 1. The saturated result is\n * written back to the even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the 32-bit unsigned elements of Rs1 with that of Rs2.\n * It adds the 64-bit multiplication results to the 64-bit unsigned data in Rd with unlimited precision. If\n * the 64-bit addition result is beyond the U64 number range (0 <= U64 <= 2^64-1), it is saturated to the\n * range and the OV bit is set to 1. The saturated result is written back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * result = R[t_H].R[t_L] + (Rs1 * Rs2);\n * if (result > (2^64)-1) {\n *   result = (2^64)-1; OV = 1;\n * }\n * R[t_H].R[t_L] = result;\n * * RV64:\n * // `result` has unlimited precision\n * result = Rd + (Rs1.W[0] u* Rs2.W[0]) + (Rs1.W[1] u* Rs2.W[1]);\n * if (result > (2^64)-1) {\n *   result = (2^64)-1; OV = 1;\n * }\n * Rd = result;\n * ~~~\n *\n * \\param [in]  t    unsigned long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UKMAR64(unsigned long long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"ukmar64 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.156. UKMAR64 ===== */\n\n/* ===== Inline Function Start for 3.157. UKMSR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB\n * \\brief UKMSR64 (Unsigned Multiply and Saturating Subtract from 64-Bit Data)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * UKMSR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit unsigned elements in two registers and subtract the 64-bit\n * multiplication results from the 64-bit unsigned data of a pair of registers (RV32) or a register (RV64).\n * The result is saturated to the U64 range and written back to the pair of registers (RV32) or a register\n * (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit unsigned data of Rs1 with that of Rs2. It\n * subtracts the 64-bit multiplication result from the 64-bit unsigned data of an even/odd pair of\n * registers specified by Rd(4,1) with unlimited precision. If the 64-bit subtraction result is beyond the\n * U64 number range (0 <= U64 <= 2^64-1), it is saturated to the range and the OV bit is set to 1. The\n * saturated result is written back to the even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the 32-bit unsigned elements of Rs1 with that of Rs2.\n * It subtracts the 64-bit multiplication results from the 64-bit unsigned data of Rd with unlimited\n * precision. If the 64-bit subtraction result is beyond the U64 number range (0 <= U64 <= 2^64-1), it is\n * saturated to the range and the OV bit is set to 1. The saturated result is written back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * result = R[t_H].R[t_L] - (Rs1 u* Rs2);\n * if (result < 0) {\n *   result = 0; OV = 1;\n * }\n * R[t_H].R[t_L] = result;\n * * RV64:\n * // `result` has unlimited precision\n * result = Rd - (Rs1.W[0] u* Rs2.W[0]) - (Rs1.W[1] u* Rs2.W[1]);\n * if (result < 0) {\n *   result = 0; OV = 1;\n * }\n * Rd = result;\n * ~~~\n *\n * \\param [in]  t    unsigned long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UKMSR64(unsigned long long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"ukmsr64 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.157. UKMSR64 ===== */\n\n/* ===== Inline Function Start for 3.158. UKSTAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief UKSTAS16 (SIMD 16-bit Unsigned Saturating Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UKSTAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do one 16-bit unsigned integer element saturating addition and one 16-bit unsigned\n * integer element saturating subtraction in a 32-bit chunk simultaneously. Operands are from\n * corresponding positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit unsigned integer element in [31:16] of 32-bit chunks in\n * Rs1 with the 16-bit unsigned integer element in [31:16] of 32-bit chunks in Rs2; at the same time, it\n * subtracts the 16-bit unsigned integer element in [15:0] of 32-bit chunks in Rs2 from the 16-bit\n * unsigned integer element in [15:0] of 32-bit chunks in Rs1. If any of the results are beyond the 16-bit\n * unsigned number range (0 <= RES <= 2^16-1), they are saturated to the range and the OV bit is set to 1.\n * The saturated results are written to [31:16] of 32-bit chunks in Rd for addition and [15:0] of 32-bit\n * chunks in Rd for subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[x][31:16] + Rs2.W[x][31:16];\n * res2 = Rs1.W[x][15:0] - Rs2.W[x][15:0];\n * if (res1 > (2^16)-1) {\n *   res1 = (2^16)-1;\n *   OV = 1;\n * }\n * if (res2 < 0) {\n *   res2 = 0;\n *   OV = 1;\n * }\n * Rd.W[x][31:16] = res1;\n * Rd.W[x][15:0] = res2;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSTAS16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ukstas16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.158. UKSTAS16 ===== */\n\n/* ===== Inline Function Start for 3.159. UKSTSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief UKSTSA16 (SIMD 16-bit Unsigned Saturating Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UKSTSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do one 16-bit unsigned integer element saturating subtraction and one 16-bit unsigned\n * integer element saturating addition in a 32-bit chunk simultaneously. Operands are from\n * corresponding positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit unsigned integer element in [31:16] of 32-bit\n * chunks in Rs2 from the 16-bit unsigned integer element in [31:16] of 32-bit chunks in Rs1; at the\n * same time, it adds the 16-bit unsigned integer element in [15:0] of 32-bit chunks in Rs2 with the 16-\n * bit unsigned integer element in [15:0] of 32-bit chunks in Rs1. If any of the results are beyond the\n * 16-bit unsigned number range (0 <= RES <= 2^16-1), they are saturated to the range and the OV bit is set\n * to 1. The saturated results are written to [31:16] of 32-bit chunks in Rd for subtraction and [15:0] of\n * 32-bit chunks in Rd for addition.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[x][31:16] - Rs2.W[x][31:16];\n * res2 = Rs1.W[x][15:0] + Rs2.W[x][15:0];\n * if (res1 < 0) {\n *   res1 = 0;\n *   OV = 1;\n * } else if (res2 > (2^16)-1) {\n *   res2 = (2^16)-1;\n *   OV = 1;\n * }\n * Rd.W[x][31:16] = res1;\n * Rd.W[x][15:0] = res2;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSTSA16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ukstsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.159. UKSTSA16 ===== */\n\n/* ===== Inline Function Start for 3.160. UKSUB8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief UKSUB8 (SIMD 8-bit Unsigned Saturating Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UKSUB8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit unsigned integer elements saturating subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 8-bit unsigned integer elements in Rs2 from the 8-bit\n * unsigned integer elements in Rs1. If any of the results are beyond the 8-bit unsigned number range\n * (0 <= RES <= 28-1), they are saturated to the range and the OV bit is set to 1. The saturated results are\n * written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.B[x] - Rs2.B[x];\n * if (res[x] < 0) {\n *   res[x] = 0;\n *   OV = 1;\n * }\n * Rd.B[x] = res[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSUB8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"uksub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.160. UKSUB8 ===== */\n\n/* ===== Inline Function Start for 3.161. UKSUB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief UKSUB16 (SIMD 16-bit Unsigned Saturating Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UKSUB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer elements saturating subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit unsigned integer elements in Rs2 from the 16-bit\n * unsigned integer elements in Rs1. If any of the results are beyond the 16-bit unsigned number\n * range (0 <= RES <= 2^16-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.H[x] - Rs2.H[x];\n * if (res[x] < 0) {\n *   res[x] = 0;\n *   OV = 1;\n * }\n * Rd.H[x] = res[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSUB16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"uksub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.161. UKSUB16 ===== */\n\n/* ===== Inline Function Start for 3.162. UKSUB64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief UKSUB64 (64-bit Unsigned Saturating Subtraction)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * UKSUB64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Perform a 64-bit signed integer subtraction. The result is saturated to the U64 range.\n *\n * **RV32 Description**:\\n\n * This instruction subtracts the 64-bit unsigned integer of an even/odd pair of\n * registers specified by Rs2(4,1) from the 64-bit unsigned integer of an even/odd pair of registers\n * specified by Rs1(4,1). If the 64-bit result is beyond the U64 number range (0 <= U64 <= 2^64-1), it is\n * saturated to the range and the OV bit is set to 1. The saturated result is then written to an even/odd\n * pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * This instruction subtracts the 64-bit unsigned integer of Rs2 from the 64-bit\n * unsigned integer of an even/odd pair of Rs1. If the 64-bit result is beyond the U64 number range (0 <=\n * U64 <= 2^64-1), it is saturated to the range and the OV bit is set to 1. The saturated result is then written\n * to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * a_L = CONCAT(Rs1(4,1),1'b0); a_H = CONCAT(Rs1(4,1),1'b1);\n * b_L = CONCAT(Rs2(4,1),1'b0); b_H = CONCAT(Rs2(4,1),1'b1);\n * result = R[a_H].R[a_L] - R[b_H].R[b_L];\n * if (result < 0) {\n *   result = 0; OV = 1;\n * }\n * R[t_H].R[t_L] = result;\n * * RV64\n * result = Rs1 - Rs2;\n * if (result < 0) {\n *   result = 0; OV = 1;\n * }\n * Rd = result;\n * ~~~\n *\n * \\param [in]  a    unsigned long long type of value stored in a\n * \\param [in]  b    unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UKSUB64(unsigned long long a, unsigned long long b) {\n  register unsigned long long result;\n  __ASM volatile(\"uksub64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.162. UKSUB64 ===== */\n\n/* ===== Inline Function Start for 3.163. UKSUBH ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q15_SAT_ALU\n * \\brief UKSUBH (Unsigned Subtraction with U16 Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * UKSUBH Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Subtract the unsigned lower 32-bit content of two registers with U16 saturation.\n *\n * **Description**:\\n\n * The unsigned lower 32-bit content of Rs2 is subtracted from the unsigned lower 32-bit\n * content of Rs1. And the result is saturated to the 16-bit unsigned integer range of [0, 2^16-1] and then\n * sign-extended and written to Rd. If saturation happens, this instruction sets the OV flag.\n *\n * **Operations**:\\n\n * ~~~\n * tmp = Rs1.W[0] - Rs2.W[0];\n * if (tmp > (2^16)-1) {\n *   tmp = (2^16)-1;\n *   OV = 1;\n * }\n * else if (tmp < 0) {\n *   tmp = 0;\n *   OV = 1;\n * }\n * Rd = SE(tmp[15:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSUBH(unsigned int a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"uksubh %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.163. UKSUBH ===== */\n\n/* ===== Inline Function Start for 3.164. UKSUBW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief UKSUBW (Unsigned Subtraction with U32 Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * UKSUBW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Subtract the unsigned lower 32-bit content of two registers with unsigned 32-bit\n * saturation.\n *\n * **Description**:\\n\n * The unsigned lower 32-bit content of Rs2 is subtracted from the unsigned lower 32-bit\n * content of Rs1. And the result is saturated to the 32-bit unsigned integer range of [0, 2^32-1] and then\n * sign-extended and written to Rd. If saturation happens, this instruction sets the OV flag.\n *\n * **Operations**:\\n\n * ~~~\n * tmp = Rs1.W[0] - Rs2.W[0];\n * if (tmp < 0) {\n *   tmp[31:0] = 0;\n *   OV = 1;\n * }\n * Rd = tmp[31:0]; // RV32\n * Rd = SE(tmp[31:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSUBW(unsigned int a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"uksubw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.164. UKSUBW ===== */\n\n/* ===== Inline Function Start for 3.165. UMAR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB\n * \\brief UMAR64 (Unsigned Multiply and Add to 64-Bit Data)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * UMAR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit unsigned elements in two registers and add the 64-bit multiplication\n * results to the 64-bit unsigned data of a pair of registers (RV32) or a register (RV64). The result is\n * written back to the pair of registers (RV32) or a register (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit unsigned data of Rs1 with that of Rs2. It\n * adds the 64-bit multiplication result to the 64-bit unsigned data of an even/odd pair of registers\n * specified by Rd(4,1). The addition result is written back to the even/odd pair of registers specified by\n * Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the 32-bit unsigned elements of Rs1 with that of Rs2.\n * It adds the 64-bit multiplication results to the 64-bit unsigned data of Rd. The addition result is\n * written back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H].R[t_L] = R[t_H].R[t_L] + (Rs1 * Rs2);\n * * RV64:\n * Rd = Rd + (Rs1.W[0] u* Rs2.W[0]) + (Rs1.W[1] u* Rs2.W[1]);\n * ~~~\n *\n * \\param [in]  t    unsigned long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UMAR64(unsigned long long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"umar64 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.165. UMAR64 ===== */\n\n/* ===== Inline Function Start for 3.166. UMAQA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_8B_MULT_32B_ADD\n * \\brief UMAQA (Unsigned Multiply Four Bytes with 32- bit Adds)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * UMAQA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do four unsigned 8-bit multiplications from 32-bit chunks of two registers; and then adds\n * the four 16-bit results and the content of corresponding 32-bit chunks of a third register together.\n *\n * **Description**:\\n\n * This instruction multiplies the four unsigned 8-bit elements of 32-bit chunks of Rs1 with the four\n * unsigned 8-bit elements of 32-bit chunks of Rs2 and then adds the four results together with the\n * unsigned content of the corresponding 32-bit chunks of Rd. The final results are written back to the\n * corresponding 32-bit chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rd.W[x] + (Rs1.W[x].B[3] u* Rs2.W[x].B[3]) +\n *          (Rs1.W[x].B[2] u* Rs2.W[x].B[2]) + (Rs1.W[x].B[1] u* Rs2.W[x].B[1]) +\n *          (Rs1.W[x].B[0] u* Rs2.W[x].B[0]);\n * Rd.W[x] = res[x];\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    unsigned long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UMAQA(unsigned long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"umaqa %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.166. UMAQA ===== */\n\n/* ===== Inline Function Start for 3.167. UMAX8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief UMAX8 (SIMD 8-bit Unsigned Maximum)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UMAX8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit unsigned integer elements finding maximum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit unsigned integer elements in Rs1 with the four 8-\n * bit unsigned integer elements in Rs2 and selects the numbers that is greater than the other one. The\n * two selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] >u Rs2.B[x])? Rs1.B[x] : Rs2.B[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UMAX8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"umax8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.167. UMAX8 ===== */\n\n/* ===== Inline Function Start for 3.168. UMAX16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief UMAX16 (SIMD 16-bit Unsigned Maximum)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UMAX16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer elements finding maximum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit unsigned integer elements in Rs1 with the 16-bit\n * unsigned integer elements in Rs2 and selects the numbers that is greater than the other one. The\n * selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] >u Rs2.H[x])? Rs1.H[x] : Rs2.H[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UMAX16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"umax16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.168. UMAX16 ===== */\n\n/* ===== Inline Function Start for 3.169. UMIN8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief UMIN8 (SIMD 8-bit Unsigned Minimum)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UMIN8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit unsigned integer elements finding minimum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit unsigned integer elements in Rs1 with the 8-bit\n * unsigned integer elements in Rs2 and selects the numbers that is less than the other one. The\n * selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] <u Rs2.B[x])? Rs1.B[x] : Rs2.B[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UMIN8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"umin8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.169. UMIN8 ===== */\n\n/* ===== Inline Function Start for 3.170. UMIN16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief UMIN16 (SIMD 16-bit Unsigned Minimum)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UMIN16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer elements finding minimum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit unsigned integer elements in Rs1 with the 16-bit\n * unsigned integer elements in Rs2 and selects the numbers that is less than the other one. The\n * selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] <u Rs2.H[x])? Rs1.H[x] : Rs2.H[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UMIN16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"umin16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.170. UMIN16 ===== */\n\n/* ===== Inline Function Start for 3.171. UMSR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB\n * \\brief UMSR64 (Unsigned Multiply and Subtract from 64-Bit Data)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * UMSR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit unsigned elements in two registers and subtract the 64-bit\n * multiplication results from the 64-bit unsigned data of a pair of registers (RV32) or a register (RV64).\n * The result is written back to the pair of registers (RV32) or a register (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit unsigned data of Rs1 with that of Rs2. It\n * subtracts the 64-bit multiplication result from the 64-bit unsigned data of an even/odd pair of\n * registers specified by Rd(4,1). The subtraction result is written back to the even/odd pair of registers\n * specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the 32-bit unsigned elements of Rs1 with that of Rs2.\n * It subtracts the 64-bit multiplication results from the 64-bit unsigned data of Rd. The subtraction\n * result is written back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H].R[t_L] = R[t_H].R[t_L] - (Rs1 * Rs2);\n * * RV64:\n * Rd = Rd - (Rs1.W[0] u* Rs2.W[0]) - (Rs1.W[1] u* Rs2.W[1]);\n * ~~~\n *\n * \\param [in]  t    unsigned long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UMSR64(unsigned long long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"umsr64 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 3.171. UMSR64 ===== */\n\n/* ===== Inline Function Start for 3.172.1. UMUL8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MULTIPLY\n * \\brief UMUL8 (SIMD Unsigned 8-bit Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UMUL8 Rd, Rs1, Rs2\n * UMULX8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do unsigned 8-bit multiplications and generate four 16-bit results simultaneously.\n *\n * **RV32 Description**:\\n\n * For the `UMUL8` instruction, multiply the unsigned 8-bit data elements of Rs1\n * with the corresponding unsigned 8-bit data elements of Rs2.\n * For the `UMULX8` instruction, multiply the first and second unsigned 8-bit data elements of Rs1\n * with the second and first unsigned 8-bit data elements of Rs2. At the same time, multiply the third\n * and fourth unsigned 8-bit data elements of Rs1 with the fourth and third unsigned 8-bit data\n * elements of Rs2.\n * The four 16-bit results are then written into an even/odd pair of registers specified by Rd(4,1).\n * Rd(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the two 16-bit results calculated from the top part of\n * Rs1 and the even `2d` register of the pair contains the two 16-bit results calculated from the bottom\n * part of Rs1.\n *\n * **RV64 Description**:\\n\n * For the `UMUL8` instruction, multiply the unsigned 8-bit data elements of Rs1\n * with the corresponding unsigned 8-bit data elements of Rs2.\n * For the `UMULX8` instruction, multiply the first and second unsigned 8-bit data elements of Rs1\n * with the second and first unsigned 8-bit data elements of Rs2. At the same time, multiply the third\n * and fourth unsigned 8-bit data elements of Rs1 with the fourth and third unsigned 8-bit data\n * elements of Rs2.\n * The four 16-bit results are then written into Rd. The Rd.W[1] contains the two 16-bit results\n * calculated from the top part of Rs1 and the Rd.W[0] contains the two 16-bit results calculated from\n * the bottom part of Rs1.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * if (is `UMUL8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x+1]; // top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x]; // bottom\n * } else if (is `UMULX8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x]; // Rs1 top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x+1]; // Rs1 bottom\n * }\n * rest[x/2] = op1t[x/2] u* op2t[x/2];\n * resb[x/2] = op1b[x/2] u* op2b[x/2];\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H].H[1] = rest[1]; R[t_H].H[0] = resb[1];\n * R[t_L].H[1] = rest[0]; R[t_L].H[0] = resb[0];\n * x = 0 and 2\n * * RV64:\n * if (is `UMUL8`) {\n *     op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x+1]; // top\n *     op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x]; // bottom\n * } else if (is `UMULX8`) {\n *     op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x]; // Rs1 top\n *     op1b[x/2]  =  Rs1.B[x]; op2b[x/2]  =  Rs2.B[x+1];  //  Rs1  bottom\n * }\n * rest[x/2]  =  op1t[x/2]  u*  op2t[x/2];\n * resb[x/2]  =  op1b[x/2]  u*  op2b[x/2];\n * t_L  =  CONCAT(Rd(4,1),1'b0); t_H  =  CONCAT(Rd(4,1),1'b1);\n * Rd.W[1].H[1] = rest[1]; Rd.W[1].H[0] = resb[1];\n * Rd.W[0].H[1] = rest[0]; Rd.W[0].H[0] = resb[0]; x = 0 and 2\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UMUL8(unsigned int a, unsigned int b) {\n  register unsigned long long result;\n  __ASM volatile(\"umul8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.172.1. UMUL8 ===== */\n\n/* ===== Inline Function Start for 3.172.2. UMULX8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MULTIPLY\n * \\brief UMULX8 (SIMD Unsigned Crossed 8-bit Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UMUL8 Rd, Rs1, Rs2\n * UMULX8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do unsigned 8-bit multiplications and generate four 16-bit results simultaneously.\n *\n * **RV32 Description**:\\n\n * For the `UMUL8` instruction, multiply the unsigned 8-bit data elements of Rs1\n * with the corresponding unsigned 8-bit data elements of Rs2.\n * For the `UMULX8` instruction, multiply the first and second unsigned 8-bit data elements of Rs1\n * with the second and first unsigned 8-bit data elements of Rs2. At the same time, multiply the third\n * and fourth unsigned 8-bit data elements of Rs1 with the fourth and third unsigned 8-bit data\n * elements of Rs2.\n * The four 16-bit results are then written into an even/odd pair of registers specified by Rd(4,1).\n * Rd(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the two 16-bit results calculated from the top part of\n * Rs1 and the even `2d` register of the pair contains the two 16-bit results calculated from the bottom\n * part of Rs1.\n *\n * **RV64 Description**:\\n\n * For the `UMUL8` instruction, multiply the unsigned 8-bit data elements of Rs1\n * with the corresponding unsigned 8-bit data elements of Rs2.\n * For the `UMULX8` instruction, multiply the first and second unsigned 8-bit data elements of Rs1\n * with the second and first unsigned 8-bit data elements of Rs2. At the same time, multiply the third\n * and fourth unsigned 8-bit data elements of Rs1 with the fourth and third unsigned 8-bit data\n * elements of Rs2.\n * The four 16-bit results are then written into Rd. The Rd.W[1] contains the two 16-bit results\n * calculated from the top part of Rs1 and the Rd.W[0] contains the two 16-bit results calculated from\n * the bottom part of Rs1.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * if (is `UMUL8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x+1]; // top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x]; // bottom\n * } else if (is `UMULX8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x]; // Rs1 top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x+1]; // Rs1 bottom\n * }\n * rest[x/2] = op1t[x/2] u* op2t[x/2];\n * resb[x/2] = op1b[x/2] u* op2b[x/2];\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H].H[1] = rest[1]; R[t_H].H[0] = resb[1];\n * R[t_L].H[1] = rest[0]; R[t_L].H[0] = resb[0];\n * x = 0 and 2\n * * RV64:\n * if (is `UMUL8`) {\n *     op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x+1]; // top\n *     op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x]; // bottom\n * } else if (is `UMULX8`) {\n *     op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x]; // Rs1 top\n *     op1b[x/2]  =  Rs1.B[x]; op2b[x/2]  =  Rs2.B[x+1];  //  Rs1  bottom\n * }\n * rest[x/2]  =  op1t[x/2]  u*  op2t[x/2];\n * resb[x/2]  =  op1b[x/2]  u*  op2b[x/2];\n * t_L  =  CONCAT(Rd(4,1),1'b0); t_H  =  CONCAT(Rd(4,1),1'b1);\n * Rd.W[1].H[1] = rest[1]; Rd.W[1].H[0] = resb[1];\n * Rd.W[0].H[1] = rest[0]; Rd.W[0].H[0] = resb[0]; x = 0 and 2\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UMULX8(unsigned int a, unsigned int b) {\n  register unsigned long long result;\n  __ASM volatile(\"umulx8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.172.2. UMULX8 ===== */\n\n/* ===== Inline Function Start for 3.173.1. UMUL16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MULTIPLY\n * \\brief UMUL16 (SIMD Unsigned 16-bit Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UMUL16 Rd, Rs1, Rs2\n * UMULX16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do unsigned 16-bit multiplications and generate two 32-bit results simultaneously.\n *\n * **RV32 Description**:\\n\n * For the `UMUL16` instruction, multiply the top 16-bit U16 content of Rs1 with\n * the top 16-bit U16 content of Rs2. At the same time, multiply the bottom 16-bit U16 content of Rs1\n * with the bottom 16-bit U16 content of Rs2.\n * For the `UMULX16` instruction, multiply the top 16-bit U16 content of Rs1 with the bottom 16-bit\n * U16 content of Rs2. At the same time, multiply the bottom 16-bit U16 content of Rs1 with the top 16-\n * bit U16 content of Rs2.\n * The two U32 results are then written into an even/odd pair of registers specified by Rd(4,1). Rd(4,1),\n * i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair includes\n * register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the 32-bit result calculated from the top part of Rs1 and\n * the even `2d` register of the pair contains the 32-bit result calculated from the bottom part of Rs1.\n *\n * **RV64 Description**:\\n\n * For the `UMUL16` instruction, multiply the top 16-bit U16 content of the lower\n * 32-bit word in Rs1 with the top 16-bit U16 content of the lower 32-bit word in Rs2. At the same time,\n * multiply the bottom 16-bit U16 content of the lower 32-bit word in Rs1 with the bottom 16-bit U16\n * content of the lower 32-bit word in Rs2.\n * For the `UMULX16` instruction, multiply the top 16-bit U16 content of the lower 32-bit word in Rs1\n * with the bottom 16-bit U16 content of the lower 32-bit word in Rs2. At the same time, multiply the\n * bottom 16-bit U16 content of the lower 32-bit word in Rs1 with the top 16-bit U16 content of the\n * lower 32-bit word in Rs2.\n * The two 32-bit U32 results are then written into Rd. The result calculated from the top 16-bit of the\n * lower 32-bit word in Rs1 is written to Rd.W[1]. And the result calculated from the bottom 16-bit of\n * the lower 32-bit word in Rs1 is written to Rd.W[0]\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * if (is `UMUL16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[1]; // top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[0]; // bottom\n * } else if (is `UMULX16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[0]; // Rs1 top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   res = aop u* bop;\n * }\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H] = rest;\n * R[t_L] = resb;\n * * RV64:\n * if (is `UMUL16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[1]; // top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[0]; // bottom\n * } else if (is `UMULX16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[0]; // Rs1 top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   res = aop u* bop;\n * }\n * Rd.W[1] = rest;\n * Rd.W[0] = resb;\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UMUL16(unsigned int a, unsigned int b) {\n  register unsigned long long result;\n  __ASM volatile(\"umul16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.173.1. UMUL16 ===== */\n\n/* ===== Inline Function Start for 3.173.2. UMULX16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MULTIPLY\n * \\brief UMULX16 (SIMD Unsigned Crossed 16-bit Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UMUL16 Rd, Rs1, Rs2\n * UMULX16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do unsigned 16-bit multiplications and generate two 32-bit results simultaneously.\n *\n * **RV32 Description**:\\n\n * For the `UMUL16` instruction, multiply the top 16-bit U16 content of Rs1 with\n * the top 16-bit U16 content of Rs2. At the same time, multiply the bottom 16-bit U16 content of Rs1\n * with the bottom 16-bit U16 content of Rs2.\n * For the `UMULX16` instruction, multiply the top 16-bit U16 content of Rs1 with the bottom 16-bit\n * U16 content of Rs2. At the same time, multiply the bottom 16-bit U16 content of Rs1 with the top 16-\n * bit U16 content of Rs2.\n * The two U32 results are then written into an even/odd pair of registers specified by Rd(4,1). Rd(4,1),\n * i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair includes\n * register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the 32-bit result calculated from the top part of Rs1 and\n * the even `2d` register of the pair contains the 32-bit result calculated from the bottom part of Rs1.\n *\n * **RV64 Description**:\\n\n * For the `UMUL16` instruction, multiply the top 16-bit U16 content of the lower\n * 32-bit word in Rs1 with the top 16-bit U16 content of the lower 32-bit word in Rs2. At the same time,\n * multiply the bottom 16-bit U16 content of the lower 32-bit word in Rs1 with the bottom 16-bit U16\n * content of the lower 32-bit word in Rs2.\n * For the `UMULX16` instruction, multiply the top 16-bit U16 content of the lower 32-bit word in Rs1\n * with the bottom 16-bit U16 content of the lower 32-bit word in Rs2. At the same time, multiply the\n * bottom 16-bit U16 content of the lower 32-bit word in Rs1 with the top 16-bit U16 content of the\n * lower 32-bit word in Rs2.\n * The two 32-bit U32 results are then written into Rd. The result calculated from the top 16-bit of the\n * lower 32-bit word in Rs1 is written to Rd.W[1]. And the result calculated from the bottom 16-bit of\n * the lower 32-bit word in Rs1 is written to Rd.W[0]\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * if (is `UMUL16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[1]; // top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[0]; // bottom\n * } else if (is `UMULX16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[0]; // Rs1 top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   res = aop u* bop;\n * }\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H] = rest;\n * R[t_L] = resb;\n * * RV64:\n * if (is `UMUL16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[1]; // top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[0]; // bottom\n * } else if (is `UMULX16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[0]; // Rs1 top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   res = aop u* bop;\n * }\n * Rd.W[1] = rest;\n * Rd.W[0] = resb;\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UMULX16(unsigned int a, unsigned int b) {\n  register unsigned long long result;\n  __ASM volatile(\"umulx16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.173.2. UMULX16 ===== */\n\n/* ===== Inline Function Start for 3.174. URADD8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief URADD8 (SIMD 8-bit Unsigned Halving Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * URADD8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit unsigned integer element additions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 8-bit unsigned integer elements in Rs1 with the 8-bit\n * unsigned integer elements in Rs2. The results are first logically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7F, Rb = 0x7F, Rt = 0x7F\n * * Ra = 0x80, Rb = 0x80, Rt = 0x80\n * * Ra = 0x40, Rb = 0x80, Rt = 0x60\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] + Rs2.B[x]) u>> 1;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URADD8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"uradd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.174. URADD8 ===== */\n\n/* ===== Inline Function Start for 3.175. URADD16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief URADD16 (SIMD 16-bit Unsigned Halving Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * URADD16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer element additions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit unsigned integer elements in Rs1 with the 16-bit\n * unsigned integer elements in Rs2. The results are first logically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7FFF, Rb = 0x7FFF Rt = 0x7FFF\n * * Ra = 0x8000, Rb = 0x8000 Rt = 0x8000\n * * Ra = 0x4000, Rb = 0x8000 Rt = 0x6000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] + Rs2.H[x]) u>> 1;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URADD16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"uradd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.175. URADD16 ===== */\n\n/* ===== Inline Function Start for 3.176. URADD64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief URADD64 (64-bit Unsigned Halving Addition)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * URADD64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add two 64-bit unsigned integers. The result is halved to avoid overflow or saturation.\n *\n * **RV32 Description**:\\n\n * This instruction adds the 64-bit unsigned integer of an even/odd pair of registers\n * specified by Rs1(4,1) with the 64-bit unsigned integer of an even/odd pair of registers specified by\n * Rs2(4,1). The 64-bit addition result is first logically right-shifted by 1 bit and then written to an\n * even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction adds the 64-bit unsigned integer in Rs1 with the 64-bit unsigned\n * integer Rs2. The 64-bit addition result is first logically right-shifted by 1 bit and then written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rt(4,1),1'b0); t_H = CONCAT(Rt(4,1),1'b1);\n * a_L = CONCAT(Ra(4,1),1'b0); a_H = CONCAT(Ra(4,1),1'b1);\n * b_L = CONCAT(Rb(4,1),1'b0); b_H = CONCAT(Rb(4,1),1'b1);\n * R[t_H].R[t_L] = (R[a_H].R[a_L] + R[b_H].R[b_L]) u>> 1;\n * * RV64:\n * Rd = (Rs1 + Rs2) u>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long long type of value stored in a\n * \\param [in]  b    unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_URADD64(unsigned long long a, unsigned long long b) {\n  register unsigned long long result;\n  __ASM volatile(\"uradd64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.176. URADD64 ===== */\n\n/* ===== Inline Function Start for 3.177. URADDW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION\n * \\brief URADDW (32-bit Unsigned Halving Addition)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * URADDW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add 32-bit unsigned integers and the results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the first 32-bit unsigned integer in Rs1 with the first 32-bit\n * unsigned integer in Rs2. The result is first logically right-shifted by 1 bit and then sign-extended and\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7FFFFFFF, Rb = 0x7FFFFFFF Rt = 0x7FFFFFFF\n * * Ra = 0x80000000, Rb = 0x80000000 Rt = 0x80000000\n * * Ra = 0x40000000, Rb = 0x80000000 Rt = 0x60000000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * Rd[31:0] = (Rs1[31:0] + Rs2[31:0]) u>> 1;\n * * RV64:\n * resw[31:0] = (Rs1[31:0] + Rs2[31:0]) u>> 1;\n * Rd[63:0] = SE(resw[31:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URADDW(unsigned int a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"uraddw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.177. URADDW ===== */\n\n/* ===== Inline Function Start for 3.178. URCRAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief URCRAS16 (SIMD 16-bit Unsigned Halving Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * URCRAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer element addition and 16-bit unsigned integer element\n * subtraction in a 32-bit chunk simultaneously. Operands are from crossed positions in 32-bit chunks.\n * The results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit unsigned integer in [31:16] of 32-bit chunks in Rs1\n * with the 16-bit unsigned integer in [15:0] of 32-bit chunks in Rs2, and subtracts the 16-bit unsigned\n * integer in [31:16] of 32-bit chunks in Rs2 from the 16-bit unsigned integer in [15:0] of 32-bit chunks\n * in Rs1. The element results are first logically right-shifted by 1 bit and then written to [31:16] of 32-\n * bit chunks in Rd and [15:0] of 32-bit chunks in Rd.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `URADD16` and `URSUB16` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = (Rs1.W[x][31:16] + Rs2.W[x][15:0]) u>> 1;\n * Rd.W[x][15:0] = (Rs1.W[x][15:0] - Rs2.W[x][31:16]) u>> 1;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URCRAS16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"urcras16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.178. URCRAS16 ===== */\n\n/* ===== Inline Function Start for 3.179. URCRSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief URCRSA16 (SIMD 16-bit Unsigned Halving Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * URCRSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer element subtraction and 16-bit unsigned integer element\n * addition in a 32-bit chunk simultaneously. Operands are from crossed positions in 32-bit chunks.\n * The results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit unsigned integer in [15:0] of 32-bit chunks in Rs2\n * from the 16-bit unsigned integer in [31:16] of 32-bit chunks in Rs1, and adds the 16-bit unsigned\n * integer in [15:0] of 32-bit chunks in Rs1 with the 16-bit unsigned integer in [31:16] of 32-bit chunks\n * in Rs2. The two results are first logically right-shifted by 1 bit and then written to [31:16] of 32-bit\n * chunks in Rd and [15:0] of 32-bit chunks in Rd.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `URADD16` and `URSUB16` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = (Rs1.W[x][31:16] - Rs2.W[x][15:0]) u>> 1;\n * Rd.W[x][15:0] = (Rs1.W[x][15:0] + Rs2.W[x][31:16]) u>> 1;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URCRSA16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"urcrsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.179. URCRSA16 ===== */\n\n/* ===== Inline Function Start for 3.180. URSTAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief URSTAS16 (SIMD 16-bit Unsigned Halving Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * URSTAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer element addition and 16-bit unsigned integer element\n * subtraction in a 32-bit chunk simultaneously. Operands are from corresponding positions in 32-bit\n * chunks. The results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit unsigned integer in [31:16] of 32-bit chunks in Rs1\n * with the 16-bit unsigned integer in [31:16] of 32-bit chunks in Rs2, and subtracts the 16-bit unsigned\n * integer in [15:0] of 32-bit chunks in Rs2 from the 16-bit unsigned integer in [15:0] of 32-bit chunks\n * in Rs1. The element results are first logically right-shifted by 1 bit and then written to [31:16] of 32-\n * bit chunks in Rd and [15:0] of 32-bit chunks in Rd.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `URADD16` and `URSUB16` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = (Rs1.W[x][31:16] + Rs2.W[x][31:16]) u>> 1;\n * Rd.W[x][15:0] = (Rs1.W[x][15:0] - Rs2.W[x][15:0]) u>> 1;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URSTAS16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"urstas16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.180. URSTAS16 ===== */\n\n/* ===== Inline Function Start for 3.181. URSTSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief URSTSA16 (SIMD 16-bit Unsigned Halving Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * URCRSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer element subtraction and 16-bit unsigned integer element\n * addition in a 32-bit chunk simultaneously. Operands are from corresponding positions in 32-bit\n * chunks. The results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit unsigned integer in [31:16] of 32-bit chunks in Rs2\n * from the 16-bit unsigned integer in [31:16] of 32-bit chunks in Rs1, and adds the 16-bit unsigned\n * integer in [15:0] of 32-bit chunks in Rs1 with the 16-bit unsigned integer in [15:0] of 32-bit chunks in\n * Rs2. The two results are first logically right-shifted by 1 bit and then written to [31:16] of 32-bit\n * chunks in Rd and [15:0] of 32-bit chunks in Rd.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `URADD16` and `URSUB16` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = (Rs1.W[x][31:16] - Rs2.W[x][31:16]) u>> 1;\n * Rd.W[x][15:0] = (Rs1.W[x][15:0] + Rs2.W[x][15:0]) u>> 1;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URSTSA16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"urstsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.181. URSTSA16 ===== */\n\n/* ===== Inline Function Start for 3.182. URSUB8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief URSUB8 (SIMD 8-bit Unsigned Halving Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * URSUB8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit unsigned integer element subtractions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 8-bit unsigned integer elements in Rs2 from the 8-bit\n * unsigned integer elements in Rs1. The results are first logically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7F, Rb = 0x80 Rt = 0xFF\n * * Ra = 0x80, Rb = 0x7F Rt = 0x00\n * * Ra = 0x80, Rb = 0x40 Rt = 0x20\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] - Rs2.B[x]) u>> 1;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URSUB8(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ursub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.182. URSUB8 ===== */\n\n/* ===== Inline Function Start for 3.183. URSUB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief URSUB16 (SIMD 16-bit Unsigned Halving Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * URSUB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer element subtractions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit unsigned integer elements in Rs2 from the 16-bit\n * unsigned integer elements in Rs1. The results are first logically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7FFF, Rb = 0x8000 Rt = 0xFFFF\n * * Ra = 0x8000, Rb = 0x7FFF Rt = 0x0000\n * * Ra = 0x8000, Rb = 0x4000 Rt = 0x2000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] - Rs2.H[x]) u>> 1;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URSUB16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ursub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.183. URSUB16 ===== */\n\n/* ===== Inline Function Start for 3.184. URSUB64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief URSUB64 (64-bit Unsigned Halving Subtraction)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * URSUB64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Perform a 64-bit unsigned integer subtraction. The result is halved to avoid overflow or\n * saturation.\n *\n * **RV32 Description**:\\n\n * This instruction subtracts the 64-bit unsigned integer of an even/odd pair of\n * registers specified by Rs2(4,1) from the 64-bit unsigned integer of an even/odd pair of registers\n * specified by Rs1(4,1). The subtraction result is first logically right-shifted by 1 bit and then written\n * to an even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction subtracts the 64-bit unsigned integer in Rs2 from the 64-bit\n * unsigned integer in Rs1. The subtraction result is first logically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rt(4,1),1'b0); t_H = CONCAT(Rt(4,1),1'b1);\n * a_L = CONCAT(Ra(4,1),1'b0); a_H = CONCAT(Ra(4,1),1'b1);\n * b_L = CONCAT(Rb(4,1),1'b0); b_H = CONCAT(Rb(4,1),1'b1);\n * R[t_H].R[t_L] = (R[a_H].R[a_L] - R[b_H].R[b_L]) u>> 1;\n * * RV64:\n * Rd = (Rs1 - Rs2) u>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long long type of value stored in a\n * \\param [in]  b    unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_URSUB64(unsigned long long a, unsigned long long b) {\n  register unsigned long long result;\n  __ASM volatile(\"ursub64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.184. URSUB64 ===== */\n\n/* ===== Inline Function Start for 3.185. URSUBW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION\n * \\brief URSUBW (32-bit Unsigned Halving Subtraction)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * URSUBW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Subtract 32-bit unsigned integers and the result is halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the first 32-bit signed integer in Rs2 from the first 32-bit\n * signed integer in Rs1. The result is first logically right-shifted by 1 bit and then sign-extended and\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7FFFFFFF, Rb = 0x80000000 Rt = 0xFFFFFFFF\n * * Ra = 0x80000000, Rb = 0x7FFFFFFF Rt = 0x00000000\n * * Ra = 0x80000000, Rb = 0x40000000 Rt = 0x20000000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * Rd[31:0] = (Rs1[31:0] - Rs2[31:0]) u>> 1;\n * * RV64:\n * resw[31:0] = (Rs1[31:0] - Rs2[31:0]) u>> 1;\n * Rd[63:0] = SE(resw[31:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URSUBW(unsigned int a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"ursubw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.185. URSUBW ===== */\n\n/* ===== Inline Function Start for 3.186. WEXTI ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief WEXTI (Extract Word from 64-bit Immediate)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * WEXTI Rd, Rs1, #LSBloc\n * ~~~\n *\n * **Purpose**:\\n\n * Extract a 32-bit word from a 64-bit value stored in an even/odd pair of registers (RV32) or\n * a register (RV64) starting from a specified immediate LSB bit position.\n *\n * **RV32 Description**:\\n\n * This instruction extracts a 32-bit word from a 64-bit value of an even/odd pair of registers specified\n * by Rs1(4,1) starting from a specified immediate LSB bit position, #LSBloc. The extracted word is\n * written to Rd.\n * Rs1(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register\n * pair includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the 64-bit value and the even `2d`\n * register of the pair contains the low 32-bit of the 64-bit value.\n *\n * **RV64 Description**:\\n\n * This instruction extracts a 32-bit word from a 64-bit value in Rs1 starting from a specified\n * immediate LSB bit position, #LSBloc. The extracted word is sign-extended and written to lower 32-\n * bit of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * Idx0 = CONCAT(Rs1(4,1),1'b0); Idx1 = CONCAT(Rs2(4,1),1'b1);\n * src[63:0] = Concat(R[Idx1], R[Idx0]);\n * Rd = src[31+LSBloc:LSBloc];\n * * RV64:\n * ExtractW = Rs1[31+LSBloc:LSBloc];\n * Rd = SE(ExtractW)\n * ~~~\n *\n * \\param [in]  a    long long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_WEXTI(a, b)                                                  \\\n  ({                                                                      \\\n    register unsigned long result;                                        \\\n    register long long     __a = (long long)(a);                          \\\n    __ASM volatile(\"wexti %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b)); \\\n    result;                                                               \\\n  })\n/* ===== Inline Function End for 3.186. WEXTI ===== */\n\n/* ===== Inline Function Start for 3.187. WEXT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief WEXT (Extract Word from 64-bit)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * WEXT Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Extract a 32-bit word from a 64-bit value stored in an even/odd pair of registers (RV32) or\n * a register (RV64) starting from a specified LSB bit position in a register.\n *\n * **RV32 Description**:\\n\n * This instruction extracts a 32-bit word from a 64-bit value of an even/odd pair of registers specified\n * by Rs1(4,1) starting from a specified LSB bit position, specified in Rs2[4:0]. The extracted word is\n * written to Rd.\n * Rs1(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register\n * pair includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the 64-bit value and the even `2d`\n * register of the pair contains the low 32-bit of the 64-bit value.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * Idx0 = CONCAT(Rs1(4,1),1'b0); Idx1 = CONCAT(Rs1(4,1),1'b1);\n * src[63:0] = Concat(R[Idx1], R[Idx0]);\n * LSBloc = Rs2[4:0];\n * Rd = src[31+LSBloc:LSBloc];\n * * RV64:\n * LSBloc = Rs2[4:0];\n * ExtractW = Rs1[31+LSBloc:LSBloc];\n * Rd = SE(ExtractW)\n * ~~~\n *\n * \\param [in]  a    long long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_WEXT(long long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"wext %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 3.187. WEXT ===== */\n\n/* ===== Inline Function Start for 3.188.1. ZUNPKD810 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief ZUNPKD810 (Unsigned Unpacking Bytes 1 & 0)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * ZUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte x and byte y of 32-bit chunks in a register into two 16-bit unsigned\n * halfwords of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `ZUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit unsigned halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = ZE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = ZE16(Rs1.W[m].B[y])\n * // ZUNPKD810, x=1,y=0\n * // ZUNPKD820, x=2,y=0\n * // ZUNPKD830, x=3,y=0\n * // ZUNPKD831, x=3,y=1\n * // ZUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_ZUNPKD810(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"zunpkd810 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.188.1. ZUNPKD810 ===== */\n\n/* ===== Inline Function Start for 3.188.2. ZUNPKD820 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief ZUNPKD820 (Unsigned Unpacking Bytes 2 & 0)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * ZUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte x and byte y of 32-bit chunks in a register into two 16-bit unsigned\n * halfwords of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `ZUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit unsigned halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = ZE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = ZE16(Rs1.W[m].B[y])\n * // ZUNPKD810, x=1,y=0\n * // ZUNPKD820, x=2,y=0\n * // ZUNPKD830, x=3,y=0\n * // ZUNPKD831, x=3,y=1\n * // ZUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_ZUNPKD820(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"zunpkd820 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.188.2. ZUNPKD820 ===== */\n\n/* ===== Inline Function Start for 3.188.3. ZUNPKD830 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief ZUNPKD830 (Unsigned Unpacking Bytes 3 & 0)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * ZUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte x and byte y of 32-bit chunks in a register into two 16-bit unsigned\n * halfwords of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `ZUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit unsigned halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = ZE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = ZE16(Rs1.W[m].B[y])\n * // ZUNPKD810, x=1,y=0\n * // ZUNPKD820, x=2,y=0\n * // ZUNPKD830, x=3,y=0\n * // ZUNPKD831, x=3,y=1\n * // ZUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_ZUNPKD830(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"zunpkd830 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.188.3. ZUNPKD830 ===== */\n\n/* ===== Inline Function Start for 3.188.4. ZUNPKD831 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief ZUNPKD831 (Unsigned Unpacking Bytes 3 & 1)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * ZUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte x and byte y of 32-bit chunks in a register into two 16-bit unsigned\n * halfwords of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `ZUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit unsigned halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = ZE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = ZE16(Rs1.W[m].B[y])\n * // ZUNPKD810, x=1,y=0\n * // ZUNPKD820, x=2,y=0\n * // ZUNPKD830, x=3,y=0\n * // ZUNPKD831, x=3,y=1\n * // ZUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_ZUNPKD831(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"zunpkd831 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.188.4. ZUNPKD831 ===== */\n\n/* ===== Inline Function Start for 3.188.5. ZUNPKD832 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief ZUNPKD832 (Unsigned Unpacking Bytes 3 & 2)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * ZUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte x and byte y of 32-bit chunks in a register into two 16-bit unsigned\n * halfwords of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `ZUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit unsigned halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = ZE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = ZE16(Rs1.W[m].B[y])\n * // ZUNPKD810, x=1,y=0\n * // ZUNPKD820, x=2,y=0\n * // ZUNPKD830, x=3,y=0\n * // ZUNPKD831, x=3,y=1\n * // ZUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_ZUNPKD832(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"zunpkd832 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 3.188.5. ZUNPKD832 ===== */\n\n#if (__RISCV_XLEN == 64) || defined(__ONLY_FOR_DOXYGEN_DOCUMENT_GENERATION__)\n\n/* ===== Inline Function Start for 4.1. ADD32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief ADD32 (SIMD 32-bit Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * ADD32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit integer element additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit integer elements in Rs1 with the 32-bit integer\n * elements in Rs2, and then writes the 32-bit element results to Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned addition.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = Rs1.W[x] + Rs2.W[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_ADD32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"add32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.1. ADD32 ===== */\n\n/* ===== Inline Function Start for 4.2. CRAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief CRAS32 (SIMD 32-bit Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * CRAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit integer element addition and 32-bit integer element subtraction in a 64-bit\n * chunk simultaneously. Operands are from crossed 32-bit elements.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit integer element in [63:32] of Rs1 with the 32-bit\n * integer element in [31:0] of Rs2, and writes the result to [63:32] of Rd; at the same time, it subtracts\n * the 32-bit integer element in [63:32] of Rs2 from the 32-bit integer element in [31:0] of Rs1, and\n * writes the result to [31:0] of Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned operations.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = Rs1.W[1] + Rs2.W[0];\n * Rd.W[0] = Rs1.W[0] - Rs2.W[1];\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CRAS32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"cras32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.2. CRAS32 ===== */\n\n/* ===== Inline Function Start for 4.3. CRSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief CRSA32 (SIMD 32-bit Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * CRSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit integer element subtraction and 32-bit integer element addition in a 64-bit\n * chunk simultaneously. Operands are from crossed 32-bit elements.\n * *Description: *\n * This instruction subtracts the 32-bit integer element in [31:0] of Rs2 from the 32-bit integer element\n * in [63:32] of Rs1, and writes the result to [63:32] of Rd; at the same time, it adds the 32-bit integer\n * element in [31:0] of Rs1 with the 32-bit integer element in [63:32] of Rs2, and writes the result to\n * [31:0] of Rd\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned operations.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = Rs1.W[1] - Rs2.W[0];\n * Rd.W[0] = Rs1.W[0] + Rs2.W[1];\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CRSA32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"crsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.3. CRSA32 ===== */\n\n/* ===== Inline Function Start for 4.4. KABS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_MISC\n * \\brief KABS32 (Scalar 32-bit Absolute Value with Saturation)\n * \\details\n * **Type**: DSP (RV64 Only)\n24    20\n19    15\n14    12\n11    7\nKABS32\n10010\nRs1\n000\nRd\n6    0\nGE80B\n1111111\n *\n * **Syntax**:\\n\n * ~~~\n * KABS32 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Get the absolute value of signed 32-bit integer elements in a general register.\n *\n * **Description**:\\n\n * This instruction calculates the absolute value of signed 32-bit integer elements stored\n * in Rs1. The results are written to Rd. This instruction with the minimum negative integer input of\n * 0x80000000 will produce a saturated output of maximum positive integer of 0x7fffffff and the OV\n * flag will be set to 1.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs1.W[x] >= 0) {\n *   res[x] = Rs1.W[x];\n * } else {\n *   If (Rs1.W[x] == 0x80000000) {\n *     res[x] = 0x7fffffff;\n *     OV = 1;\n *   } else {\n *     res[x] = -Rs1.W[x];\n *   }\n * }\n * Rd.W[x] = res[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KABS32(unsigned long a) {\n  register unsigned long result;\n  __ASM volatile(\"kabs32 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for 4.4. KABS32 ===== */\n\n/* ===== Inline Function Start for 4.5. KADD32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief KADD32 (SIMD 32-bit Signed Saturating Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KADD32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element saturating additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit signed integer elements in Rs1 with the 32-bit signed\n * integer elements in Rs2. If any of the results are beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1),\n * they are saturated to the range and the OV bit is set to 1. The saturated results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.W[x] + Rs2.W[x];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KADD32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"kadd32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.5. KADD32 ===== */\n\n/* ===== Inline Function Start for 4.6. KCRAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief KCRAS32 (SIMD 32-bit Signed Saturating Cross Addition & Subtraction)\n * \\details\n * **Type**: SIM (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KCRAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element saturating addition and 32-bit signed integer element\n * saturating subtraction in a 64-bit chunk simultaneously. Operands are from crossed 32-bit elements.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit integer element in [63:32] of Rs1 with the 32-bit\n * integer element in [31:0] of Rs2; at the same time, it subtracts the 32-bit integer element in [63:32] of\n * Rs2 from the 32-bit integer element in [31:0] of Rs1. If any of the results are beyond the Q31 number\n * range (-2^31 <= Q31 <= 2^31-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to [63:32] of Rd for addition and [31:0] of Rd for subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * res[1] = Rs1.W[1] + Rs2.W[0];\n * res[0] = Rs1.W[0] - Rs2.W[1];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[1] = res[1];\n * Rd.W[0] = res[0];\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KCRAS32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"kcras32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.6. KCRAS32 ===== */\n\n/* ===== Inline Function Start for 4.7. KCRSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief KCRSA32 (SIMD 32-bit Signed Saturating Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KCRSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element saturating subtraction and 32-bit signed integer element\n * saturating addition in a 64-bit chunk simultaneously. Operands are from crossed 32-bit elements.\n * *Description: *\n * This instruction subtracts the 32-bit integer element in [31:0] of Rs2 from the 32-bit integer element\n * in [63:32] of Rs1; at the same time, it adds the 32-bit integer element in [31:0] of Rs1 with the 32-bit\n * integer element in [63:32] of Rs2. If any of the results are beyond the Q31 number range (-2^31 <= Q31\n * <= 2^31-1), they are saturated to the range and the OV bit is set to 1. The saturated results are written to\n * [63:32] of Rd for subtraction and [31:0] of Rd for addition.\n *\n * **Operations**:\\n\n * ~~~\n * res[1] = Rs1.W[1] - Rs2.W[0];\n * res[0] = Rs1.W[0] + Rs2.W[1];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[1] = res[1];\n * Rd.W[0] = res[0];\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KCRSA32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"kcrsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.7. KCRSA32 ===== */\n\n/* ===== Inline Function Start for 4.8.1. KDMBB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KDMBB16 (SIMD Signed Saturating Double Multiply B16 x B16)\n * \\details\n * **Type**: SIMD (RV64 only)\n *\n * **Syntax**:\\n\n * ~~~\n * KDMxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then double and saturate the Q31 results into the 32-bit chunks\n * in the destination register. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the 32-bit portions in Rs2. The Q30 results are then doubled and\n * saturated into Q31 values. The Q31 values are then written into the 32-bit chunks in Rd. When both\n * the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated to 0x7FFFFFFF\n * and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * // KDMBB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KDMBT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KDMTT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop[z] = Rs1.H[x]; bop[z] = Rs2.H[y];\n * If (0x8000 != aop[z] | 0x8000 != bop[z]) {\n *   Mresult[z] = aop[z] * bop[z];\n *   resQ31[z] = Mresult[z] << 1;\n * } else {\n *   resQ31[z] = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * Rd.W[z] = resQ31[z];\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KDMBB16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"kdmbb16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.8.1. KDMBB16 ===== */\n\n/* ===== Inline Function Start for 4.8.2. KDMBT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KDMBT16 (SIMD Signed Saturating Double Multiply B16 x T16)\n * \\details\n * **Type**: SIMD (RV64 only)\n *\n * **Syntax**:\\n\n * ~~~\n * KDMxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then double and saturate the Q31 results into the 32-bit chunks\n * in the destination register. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the 32-bit portions in Rs2. The Q30 results are then doubled and\n * saturated into Q31 values. The Q31 values are then written into the 32-bit chunks in Rd. When both\n * the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated to 0x7FFFFFFF\n * and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * // KDMBB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KDMBT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KDMTT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop[z] = Rs1.H[x]; bop[z] = Rs2.H[y];\n * If (0x8000 != aop[z] | 0x8000 != bop[z]) {\n *   Mresult[z] = aop[z] * bop[z];\n *   resQ31[z] = Mresult[z] << 1;\n * } else {\n *   resQ31[z] = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * Rd.W[z] = resQ31[z];\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KDMBT16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"kdmbt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.8.2. KDMBT16 ===== */\n\n/* ===== Inline Function Start for 4.8.3. KDMTT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KDMTT16 (SIMD Signed Saturating Double Multiply T16 x T16)\n * \\details\n * **Type**: SIMD (RV64 only)\n *\n * **Syntax**:\\n\n * ~~~\n * KDMxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then double and saturate the Q31 results into the 32-bit chunks\n * in the destination register. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the 32-bit portions in Rs2. The Q30 results are then doubled and\n * saturated into Q31 values. The Q31 values are then written into the 32-bit chunks in Rd. When both\n * the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated to 0x7FFFFFFF\n * and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * // KDMBB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KDMBT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KDMTT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop[z] = Rs1.H[x]; bop[z] = Rs2.H[y];\n * If (0x8000 != aop[z] | 0x8000 != bop[z]) {\n *   Mresult[z] = aop[z] * bop[z];\n *   resQ31[z] = Mresult[z] << 1;\n * } else {\n *   resQ31[z] = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * Rd.W[z] = resQ31[z];\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KDMTT16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"kdmtt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.8.3. KDMTT16 ===== */\n\n/* ===== Inline Function Start for 4.9.1. KDMABB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KDMABB16 (SIMD Signed Saturating Double Multiply Addition B16 x B16)\n * \\details\n * **Type**: SIMD (RV64 only)\n *\n * **Syntax**:\\n\n * ~~~\n * KDMAxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then double and saturate the Q31 results, add the results with\n * the values of the corresponding 32-bit chunks from the destination register and write the saturated\n * addition results back into the corresponding 32-bit chunks of the destination register. If saturation\n * happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the corresponding 32-bit portions in Rs2. The Q30 results are then\n * doubled and saturated into Q31 values. The Q31 values are then added with the content of the\n * corresponding 32-bit portions of Rd. If the addition results are beyond the Q31 number range (-2^31 <=\n * Q31 <= 2^31-1), they are saturated to the range and the OV flag is set to 1. The results after saturation\n * are written back to Rd.\n * When both the two Q15 inputs are 0x8000, saturation will happen and the overflow flag OV will be\n * set.\n *\n * **Operations**:\\n\n * ~~~\n * // KDMABB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KDMABT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KDMATT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop[z] = Rs1.H[x]; bop[z] = Rs2.H[y];\n * If (0x8000 != aop[z] | 0x8000 != bop[z]) {\n *   Mresult[z] = aop[z] * bop[z];\n *   resQ31[z] = Mresult[z] << 1;\n * } else {\n *   resQ31[z] = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * resadd[z] = Rd.W[z] + resQ31[z];\n * if (resadd[z] > (2^31)-1) {\n *   resadd[z] = (2^31)-1;\n *   OV = 1;\n * } else if (resadd[z] < -2^31) {\n *   resadd[z] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[z] = resadd[z];\n * ~~~\n *\n * \\param [in]  t    unsigned long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KDMABB16(unsigned long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kdmabb16 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 4.9.1. KDMABB16 ===== */\n\n/* ===== Inline Function Start for 4.9.2. KDMABT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KDMABT16 (SIMD Signed Saturating Double Multiply Addition B16 x T16)\n * \\details\n * **Type**: SIMD (RV64 only)\n *\n * **Syntax**:\\n\n * ~~~\n * KDMAxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then double and saturate the Q31 results, add the results with\n * the values of the corresponding 32-bit chunks from the destination register and write the saturated\n * addition results back into the corresponding 32-bit chunks of the destination register. If saturation\n * happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the corresponding 32-bit portions in Rs2. The Q30 results are then\n * doubled and saturated into Q31 values. The Q31 values are then added with the content of the\n * corresponding 32-bit portions of Rd. If the addition results are beyond the Q31 number range (-2^31 <=\n * Q31 <= 2^31-1), they are saturated to the range and the OV flag is set to 1. The results after saturation\n * are written back to Rd.\n * When both the two Q15 inputs are 0x8000, saturation will happen and the overflow flag OV will be\n * set.\n *\n * **Operations**:\\n\n * ~~~\n * // KDMABB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KDMABT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KDMATT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop[z] = Rs1.H[x]; bop[z] = Rs2.H[y];\n * If (0x8000 != aop[z] | 0x8000 != bop[z]) {\n *   Mresult[z] = aop[z] * bop[z];\n *   resQ31[z] = Mresult[z] << 1;\n * } else {\n *   resQ31[z] = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * resadd[z] = Rd.W[z] + resQ31[z];\n * if (resadd[z] > (2^31)-1) {\n *   resadd[z] = (2^31)-1;\n *   OV = 1;\n * } else if (resadd[z] < -2^31) {\n *   resadd[z] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[z] = resadd[z];\n * ~~~\n *\n * \\param [in]  t    unsigned long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KDMABT16(unsigned long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kdmabt16 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 4.9.2. KDMABT16 ===== */\n\n/* ===== Inline Function Start for 4.9.3. KDMATT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KDMATT16 (SIMD Signed Saturating Double Multiply Addition T16 x T16)\n * \\details\n * **Type**: SIMD (RV64 only)\n *\n * **Syntax**:\\n\n * ~~~\n * KDMAxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then double and saturate the Q31 results, add the results with\n * the values of the corresponding 32-bit chunks from the destination register and write the saturated\n * addition results back into the corresponding 32-bit chunks of the destination register. If saturation\n * happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the corresponding 32-bit portions in Rs2. The Q30 results are then\n * doubled and saturated into Q31 values. The Q31 values are then added with the content of the\n * corresponding 32-bit portions of Rd. If the addition results are beyond the Q31 number range (-2^31 <=\n * Q31 <= 2^31-1), they are saturated to the range and the OV flag is set to 1. The results after saturation\n * are written back to Rd.\n * When both the two Q15 inputs are 0x8000, saturation will happen and the overflow flag OV will be\n * set.\n *\n * **Operations**:\\n\n * ~~~\n * // KDMABB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KDMABT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KDMATT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop[z] = Rs1.H[x]; bop[z] = Rs2.H[y];\n * If (0x8000 != aop[z] | 0x8000 != bop[z]) {\n *   Mresult[z] = aop[z] * bop[z];\n *   resQ31[z] = Mresult[z] << 1;\n * } else {\n *   resQ31[z] = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * resadd[z] = Rd.W[z] + resQ31[z];\n * if (resadd[z] > (2^31)-1) {\n *   resadd[z] = (2^31)-1;\n *   OV = 1;\n * } else if (resadd[z] < -2^31) {\n *   resadd[z] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[z] = resadd[z];\n * ~~~\n *\n * \\param [in]  t    unsigned long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KDMATT16(unsigned long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kdmatt16 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 4.9.3. KDMATT16 ===== */\n\n/* ===== Inline Function Start for 4.10.1. KHMBB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KHMBB16 (SIMD Signed Saturating Half Multiply B16 x B16)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KHMxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then right-shift 15 bits to turn the Q30 results into Q15\n * numbers again and saturate the Q15 results into the destination register. If saturation happens, an\n * overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the 32-bit portion in Rs2. The Q30 results are then right-shifted 15-\n * bits and saturated into Q15 values. The 32-bit Q15 values are then written into the 32-bit chunks in\n * Rd. When both the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated\n * to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * // KHMBB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KHMBT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KHMTT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop = Rs1.H[x]; bop = Rs2.H[y];\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult[31:0] = aop * bop;\n *   res[15:0] = Mresult[30:15];\n * } else {\n *   res[15:0] = 0x7FFF;\n *   OV = 1;\n * }\n * Rd.W[z] = SE32(res[15:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KHMBB16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"khmbb16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.10.1. KHMBB16 ===== */\n\n/* ===== Inline Function Start for 4.10.2. KHMBT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KHMBT16 (SIMD Signed Saturating Half Multiply B16 x T16)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KHMxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then right-shift 15 bits to turn the Q30 results into Q15\n * numbers again and saturate the Q15 results into the destination register. If saturation happens, an\n * overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the 32-bit portion in Rs2. The Q30 results are then right-shifted 15-\n * bits and saturated into Q15 values. The 32-bit Q15 values are then written into the 32-bit chunks in\n * Rd. When both the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated\n * to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * // KHMBB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KHMBT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KHMTT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop = Rs1.H[x]; bop = Rs2.H[y];\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult[31:0] = aop * bop;\n *   res[15:0] = Mresult[30:15];\n * } else {\n *   res[15:0] = 0x7FFF;\n *   OV = 1;\n * }\n * Rd.W[z] = SE32(res[15:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KHMBT16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"khmbt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.10.2. KHMBT16 ===== */\n\n/* ===== Inline Function Start for 4.10.3. KHMTT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KHMTT16 (SIMD Signed Saturating Half Multiply T16 x T16)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KHMxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then right-shift 15 bits to turn the Q30 results into Q15\n * numbers again and saturate the Q15 results into the destination register. If saturation happens, an\n * overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the 32-bit portion in Rs2. The Q30 results are then right-shifted 15-\n * bits and saturated into Q15 values. The 32-bit Q15 values are then written into the 32-bit chunks in\n * Rd. When both the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated\n * to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * // KHMBB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KHMBT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KHMTT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop = Rs1.H[x]; bop = Rs2.H[y];\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult[31:0] = aop * bop;\n *   res[15:0] = Mresult[30:15];\n * } else {\n *   res[15:0] = 0x7FFF;\n *   OV = 1;\n * }\n * Rd.W[z] = SE32(res[15:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KHMTT16(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"khmtt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.10.3. KHMTT16 ===== */\n\n/* ===== Inline Function Start for 4.11.1. KMABB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_MULT_ADD\n * \\brief KMABB32 (Saturating Signed Multiply Bottom Words & Add)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMABB32 Rd, Rs1, Rs2\n * KMABT32 Rd, Rs1, Rs2\n * KMATT32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit element in a register with the 32-bit element in another register\n * and add the result to the content of 64-bit data in the third register. The addition result may be\n * saturated and is written to the third register.\n * * KMABB32: rd + bottom*bottom\n * * KMABT32: rd + bottom*top\n * * KMATT32: rd + top*top\n *\n * **Description**:\\n\n * For the `KMABB32` instruction, it multiplies the bottom 32-bit element in Rs1 with the bottom 32-bit\n * element in Rs2.\n * For the `KMABT32` instruction, it multiplies the bottom 32-bit element in Rs1 with the top 32-bit\n * element in Rs2.\n * For the `KMATT32` instruction, it multiplies the top 32-bit element in Rs1 with the top 32-bit\n * element in Rs2.\n * The multiplication result is added to the content of 64-bit data in Rd. If the addition result is beyond\n * the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to 1. The\n * result after saturation is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd + (Rs1.W[0] * Rs2.W[0]); // KMABB32\n *  res = Rd + (Rs1.W[0] * Rs2.W[1]); // KMABT32\n *  res = Rd + (Rs1.W[1] * Rs2.W[1]); // KMATT32\n *  if (res > (2^63)-1) {\n *    res = (2^63)-1;\n *    OV = 1;\n *  } else if (res < -2^63) {\n *    res = -2^63;\n *    OV = 1;\n *  }\n *  Rd = res;\n * *Exceptions:* None\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMABB32(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmabb32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 4.11.1. KMABB32 ===== */\n\n/* ===== Inline Function Start for 4.11.2. KMABT32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_MULT_ADD\n * \\brief KMABT32 (Saturating Signed Multiply Bottom & Top Words & Add)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMABB32 Rd, Rs1, Rs2\n * KMABT32 Rd, Rs1, Rs2\n * KMATT32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit element in a register with the 32-bit element in another register\n * and add the result to the content of 64-bit data in the third register. The addition result may be\n * saturated and is written to the third register.\n * * KMABB32: rd + bottom*bottom\n * * KMABT32: rd + bottom*top\n * * KMATT32: rd + top*top\n *\n * **Description**:\\n\n * For the `KMABB32` instruction, it multiplies the bottom 32-bit element in Rs1 with the bottom 32-bit\n * element in Rs2.\n * For the `KMABT32` instruction, it multiplies the bottom 32-bit element in Rs1 with the top 32-bit\n * element in Rs2.\n * For the `KMATT32` instruction, it multiplies the top 32-bit element in Rs1 with the top 32-bit\n * element in Rs2.\n * The multiplication result is added to the content of 64-bit data in Rd. If the addition result is beyond\n * the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to 1. The\n * result after saturation is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd + (Rs1.W[0] * Rs2.W[0]); // KMABB32\n *  res = Rd + (Rs1.W[0] * Rs2.W[1]); // KMABT32\n *  res = Rd + (Rs1.W[1] * Rs2.W[1]); // KMATT32\n *  if (res > (2^63)-1) {\n *    res = (2^63)-1;\n *    OV = 1;\n *  } else if (res < -2^63) {\n *    res = -2^63;\n *    OV = 1;\n *  }\n *  Rd = res;\n * *Exceptions:* None\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMABT32(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmabt32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 4.11.2. KMABT32 ===== */\n\n/* ===== Inline Function Start for 4.11.3. KMATT32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_MULT_ADD\n * \\brief KMATT32 (Saturating Signed Multiply Top Words & Add)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMABB32 Rd, Rs1, Rs2\n * KMABT32 Rd, Rs1, Rs2\n * KMATT32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit element in a register with the 32-bit element in another register\n * and add the result to the content of 64-bit data in the third register. The addition result may be\n * saturated and is written to the third register.\n * * KMABB32: rd + bottom*bottom\n * * KMABT32: rd + bottom*top\n * * KMATT32: rd + top*top\n *\n * **Description**:\\n\n * For the `KMABB32` instruction, it multiplies the bottom 32-bit element in Rs1 with the bottom 32-bit\n * element in Rs2.\n * For the `KMABT32` instruction, it multiplies the bottom 32-bit element in Rs1 with the top 32-bit\n * element in Rs2.\n * For the `KMATT32` instruction, it multiplies the top 32-bit element in Rs1 with the top 32-bit\n * element in Rs2.\n * The multiplication result is added to the content of 64-bit data in Rd. If the addition result is beyond\n * the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to 1. The\n * result after saturation is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd + (Rs1.W[0] * Rs2.W[0]); // KMABB32\n *  res = Rd + (Rs1.W[0] * Rs2.W[1]); // KMABT32\n *  res = Rd + (Rs1.W[1] * Rs2.W[1]); // KMATT32\n *  if (res > (2^63)-1) {\n *    res = (2^63)-1;\n *    OV = 1;\n *  } else if (res < -2^63) {\n *    res = -2^63;\n *    OV = 1;\n *  }\n *  Rd = res;\n * *Exceptions:* None\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMATT32(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmatt32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 4.11.3. KMATT32 ===== */\n\n/* ===== Inline Function Start for 4.12.1. KMADA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMADA32 (Saturating Signed Multiply Two Words and Two Adds)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMADA32 Rd, Rs1, Rs2\n * KMAXDA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from 32-bit data in two registers; and then adds the\n * two 64-bit results and 64-bit data in a third register together. The addition result may be saturated.\n * * KMADA32: rd + top*top + bottom*bottom\n * * KMAXDA32: rd + top*bottom + bottom*top\n *\n * **Description**:\\n\n * For the `KMADA32` instruction, it multiplies the bottom 32-bit element in Rs1 with the bottom 32-\n * bit element in Rs2 and then adds the result to the result of multiplying the top 32-bit element in Rs1\n * with the top 32-bit element in Rs2. It is actually an alias of the `KMAR64` instruction.\n * For the `KMAXDA32` instruction, it multiplies the top 32-bit element in Rs1 with the bottom 32-bit\n * element in Rs2 and then adds the result to the result of multiplying the bottom 32-bit element in Rs1\n * with the top 32-bit element in Rs2.\n * The result is added to the content of 64-bit data in Rd. If the addition result is beyond the Q63\n * number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to 1. The 64-bit\n * result is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd + (Rs1.W[1] * Rs2.w[1]) + (Rs1.W[0] * Rs2.W[0]); // KMADA32\n * res = Rd + (Rs1.W[1] * Rs2.W[0]) + (Rs1.W[0] * Rs2.W[1]); // KMAXDA32\n * if (res > (2^63)-1) {\n *   res = (2^63)-1;\n *   OV = 1;\n * } else if (res < -2^63) {\n *   res = -2^63;\n *   OV = 1;\n * }\n * Rd = res;\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMADA32(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmada32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 4.12.1. KMADA32 ===== */\n\n/* ===== Inline Function Start for 4.12.2. KMAXDA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMAXDA32 (Saturating Signed Crossed Multiply Two Words and Two Adds)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMADA32 Rd, Rs1, Rs2\n * KMAXDA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from 32-bit data in two registers; and then adds the\n * two 64-bit results and 64-bit data in a third register together. The addition result may be saturated.\n * * KMADA32: rd + top*top + bottom*bottom\n * * KMAXDA32: rd + top*bottom + bottom*top\n *\n * **Description**:\\n\n * For the `KMADA32` instruction, it multiplies the bottom 32-bit element in Rs1 with the bottom 32-\n * bit element in Rs2 and then adds the result to the result of multiplying the top 32-bit element in Rs1\n * with the top 32-bit element in Rs2. It is actually an alias of the `KMAR64` instruction.\n * For the `KMAXDA32` instruction, it multiplies the top 32-bit element in Rs1 with the bottom 32-bit\n * element in Rs2 and then adds the result to the result of multiplying the bottom 32-bit element in Rs1\n * with the top 32-bit element in Rs2.\n * The result is added to the content of 64-bit data in Rd. If the addition result is beyond the Q63\n * number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to 1. The 64-bit\n * result is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd + (Rs1.W[1] * Rs2.w[1]) + (Rs1.W[0] * Rs2.W[0]); // KMADA32\n * res = Rd + (Rs1.W[1] * Rs2.W[0]) + (Rs1.W[0] * Rs2.W[1]); // KMAXDA32\n * if (res > (2^63)-1) {\n *   res = (2^63)-1;\n *   OV = 1;\n * } else if (res < -2^63) {\n *   res = -2^63;\n *   OV = 1;\n * }\n * Rd = res;\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMAXDA32(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmaxda32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 4.12.2. KMAXDA32 ===== */\n\n/* ===== Inline Function Start for 4.13.1. KMDA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMDA32 (Signed Multiply Two Words and Add)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMDA32 Rd, Rs1, Rs2\n * KMXDA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from the 32-bit element of two registers; and then\n * adds the two 64-bit results together. The addition result may be saturated.\n * * KMDA32: top*top + bottom*bottom\n * * KMXDA32: top*bottom + bottom*top\n *\n * **Description**:\\n\n * For the `KMDA32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2 and then adds the result to the result of multiplying the top 32-bit element of Rs1\n * with the top 32-bit element of Rs2.\n * For the `KMXDA32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and then adds the result to the result of multiplying the top 32-bit element of Rs1\n * with the bottom 32-bit element of Rs2.\n * The addition result is checked for saturation. If saturation happens, the result is saturated to 2^63-1.\n * The final result is written to Rd. The 32-bit contents are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1 != 0x8000000080000000) or (Rs2 != 0x8000000080000000)) {\n *   Rd = (Rs1.W[1] * Rs2.W[1]) + (Rs1.W[0] * Rs2.W[0]); // KMDA32\n *   Rd = (Rs1.W[1] * Rs2.W[0]) + (Rs1.W[0] * Rs2.W[1]); // KMXDA32\n * } else {\n *   Rd = 0x7fffffffffffffff;\n *   OV = 1;\n * }\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMDA32(unsigned long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"kmda32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.13.1. KMDA32 ===== */\n\n/* ===== Inline Function Start for 4.13.2. KMXDA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMXDA32 (Signed Crossed Multiply Two Words and Add)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMDA32 Rd, Rs1, Rs2\n * KMXDA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from the 32-bit element of two registers; and then\n * adds the two 64-bit results together. The addition result may be saturated.\n * * KMDA32: top*top + bottom*bottom\n * * KMXDA32: top*bottom + bottom*top\n *\n * **Description**:\\n\n * For the `KMDA32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2 and then adds the result to the result of multiplying the top 32-bit element of Rs1\n * with the top 32-bit element of Rs2.\n * For the `KMXDA32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and then adds the result to the result of multiplying the top 32-bit element of Rs1\n * with the bottom 32-bit element of Rs2.\n * The addition result is checked for saturation. If saturation happens, the result is saturated to 2^63-1.\n * The final result is written to Rd. The 32-bit contents are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1 != 0x8000000080000000) or (Rs2 != 0x8000000080000000)) {\n *   Rd = (Rs1.W[1] * Rs2.W[1]) + (Rs1.W[0] * Rs2.W[0]); // KMDA32\n *   Rd = (Rs1.W[1] * Rs2.W[0]) + (Rs1.W[0] * Rs2.W[1]); // KMXDA32\n * } else {\n *   Rd = 0x7fffffffffffffff;\n *   OV = 1;\n * }\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMXDA32(unsigned long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"kmxda32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.13.2. KMXDA32 ===== */\n\n/* ===== Inline Function Start for 4.14.1. KMADS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMADS32 (Saturating Signed Multiply Two Words & Subtract & Add)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMADS32 Rd, Rs1, Rs2\n * KMADRS32 Rd, Rs1, Rs2\n * KMAXDS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from 32-bit elements in two registers; and then\n * perform a subtraction operation between the two 64-bit results. Then add the subtraction result to\n * 64-bit data in a third register. The addition result may be saturated.\n * * KMADS32: rd + (top*top - bottom*bottom)\n * * KMADRS32: rd + (bottom*bottom - top*top)\n * * KMAXDS32: rd + (top*bottom - bottom*top)\n *\n * **Description**:\\n\n * For the `KMADS32` instruction, it multiplies the bottom 32-bit element in Rs1 with the bottom 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the top 32-bit element in\n * Rs1 with the top 32-bit element in Rs2.\n * For the `KMADRS32` instruction, it multiplies the top 32-bit element in Rs1 with the top 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the bottom 32-bit\n * element in Rs1 with the bottom 32-bit element in Rs2.\n * For the `KMAXDS32` instruction, it multiplies the bottom 32-bit element in Rs1 with the top 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the top 32-bit element in\n * Rs1 with the bottom 32-bit element in Rs2.\n * The subtraction result is then added to the content of 64-bit data in Rd. If the addition result is\n * beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to\n * 1. The 64-bit result after saturation is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated\n * as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd + (Rs1.W[1] * Rs2.W[1]) - (Rs1.W[0] * Rs2.W[0]); // KMADS32\n * res = Rd + (Rs1.W[0] * Rs2.W[0]) - (Rs1.W[1] * Rs2.W[1]); // KMADRS32\n * res = Rd + (Rs1.W[1] * Rs2.W[0]) - (Rs1.W[0] * Rs2.W[1]); // KMAXDS32\n * if (res > (2^63)-1) {\n *   res = (2^63)-1;\n *   OV = 1;\n * } else if (res < -2^63) {\n *   res = -2^63;\n *   OV = 1;\n * }\n * Rd = res;\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMADS32(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmads32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 4.14.1. KMADS32 ===== */\n\n/* ===== Inline Function Start for 4.14.2. KMADRS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMADRS32 (Saturating Signed Multiply Two Words & Reverse Subtract & Add)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMADS32 Rd, Rs1, Rs2\n * KMADRS32 Rd, Rs1, Rs2\n * KMAXDS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from 32-bit elements in two registers; and then\n * perform a subtraction operation between the two 64-bit results. Then add the subtraction result to\n * 64-bit data in a third register. The addition result may be saturated.\n * * KMADS32: rd + (top*top - bottom*bottom)\n * * KMADRS32: rd + (bottom*bottom - top*top)\n * * KMAXDS32: rd + (top*bottom - bottom*top)\n *\n * **Description**:\\n\n * For the `KMADS32` instruction, it multiplies the bottom 32-bit element in Rs1 with the bottom 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the top 32-bit element in\n * Rs1 with the top 32-bit element in Rs2.\n * For the `KMADRS32` instruction, it multiplies the top 32-bit element in Rs1 with the top 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the bottom 32-bit\n * element in Rs1 with the bottom 32-bit element in Rs2.\n * For the `KMAXDS32` instruction, it multiplies the bottom 32-bit element in Rs1 with the top 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the top 32-bit element in\n * Rs1 with the bottom 32-bit element in Rs2.\n * The subtraction result is then added to the content of 64-bit data in Rd. If the addition result is\n * beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to\n * 1. The 64-bit result after saturation is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated\n * as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd + (Rs1.W[1] * Rs2.W[1]) - (Rs1.W[0] * Rs2.W[0]); // KMADS32\n * res = Rd + (Rs1.W[0] * Rs2.W[0]) - (Rs1.W[1] * Rs2.W[1]); // KMADRS32\n * res = Rd + (Rs1.W[1] * Rs2.W[0]) - (Rs1.W[0] * Rs2.W[1]); // KMAXDS32\n * if (res > (2^63)-1) {\n *   res = (2^63)-1;\n *   OV = 1;\n * } else if (res < -2^63) {\n *   res = -2^63;\n *   OV = 1;\n * }\n * Rd = res;\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMADRS32(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmadrs32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 4.14.2. KMADRS32 ===== */\n\n/* ===== Inline Function Start for 4.14.3. KMAXDS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMAXDS32 (Saturating Signed Crossed Multiply Two Words & Subtract & Add)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMADS32 Rd, Rs1, Rs2\n * KMADRS32 Rd, Rs1, Rs2\n * KMAXDS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from 32-bit elements in two registers; and then\n * perform a subtraction operation between the two 64-bit results. Then add the subtraction result to\n * 64-bit data in a third register. The addition result may be saturated.\n * * KMADS32: rd + (top*top - bottom*bottom)\n * * KMADRS32: rd + (bottom*bottom - top*top)\n * * KMAXDS32: rd + (top*bottom - bottom*top)\n *\n * **Description**:\\n\n * For the `KMADS32` instruction, it multiplies the bottom 32-bit element in Rs1 with the bottom 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the top 32-bit element in\n * Rs1 with the top 32-bit element in Rs2.\n * For the `KMADRS32` instruction, it multiplies the top 32-bit element in Rs1 with the top 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the bottom 32-bit\n * element in Rs1 with the bottom 32-bit element in Rs2.\n * For the `KMAXDS32` instruction, it multiplies the bottom 32-bit element in Rs1 with the top 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the top 32-bit element in\n * Rs1 with the bottom 32-bit element in Rs2.\n * The subtraction result is then added to the content of 64-bit data in Rd. If the addition result is\n * beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to\n * 1. The 64-bit result after saturation is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated\n * as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd + (Rs1.W[1] * Rs2.W[1]) - (Rs1.W[0] * Rs2.W[0]); // KMADS32\n * res = Rd + (Rs1.W[0] * Rs2.W[0]) - (Rs1.W[1] * Rs2.W[1]); // KMADRS32\n * res = Rd + (Rs1.W[1] * Rs2.W[0]) - (Rs1.W[0] * Rs2.W[1]); // KMAXDS32\n * if (res > (2^63)-1) {\n *   res = (2^63)-1;\n *   OV = 1;\n * } else if (res < -2^63) {\n *   res = -2^63;\n *   OV = 1;\n * }\n * Rd = res;\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMAXDS32(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmaxds32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 4.14.3. KMAXDS32 ===== */\n\n/* ===== Inline Function Start for 4.15.1. KMSDA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMSDA32 (Saturating Signed Multiply Two Words & Add & Subtract)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMSDA32 Rd, Rs1, Rs2\n * KMSXDA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from the 32-bit element of two registers; and then\n * subtracts the two 64-bit results from a third register. The subtraction result may be saturated.\n * * KMSDA: rd - top*top - bottom*bottom\n * * KMSXDA: rd - top*bottom - bottom*top\n *\n * **Description**:\\n\n * For the `KMSDA32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2 and multiplies the top 32-bit element of Rs1 with the top 32-bit element of Rs2.\n * For the `KMSXDA32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and multiplies the top 32-bit element of Rs1 with the bottom 32-bit element of Rs2.\n * The two 64-bit multiplication results are then subtracted from the content of Rd. If the subtraction\n * result is beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit\n * is set to 1. The result after saturation is written to Rd. The 32-bit contents are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd - (Rs1.W[1] * Rs2.W[1]) - (Rs1.W[0] * Rs2.W[0]); // KMSDA32\n * res = Rd - (Rs1.W[1] * Rs2.W[0]) - (Rs1.W[0] * Rs2.W[1]); // KMSXDA32\n * if (res > (2^63)-1) {\n *   res = (2^63)-1;\n *   OV = 1;\n * } else if (res < -2^63) {\n *   res = -2^63;\n *   OV = 1;\n * }\n * Rd = res;\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMSDA32(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmsda32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 4.15.1. KMSDA32 ===== */\n\n/* ===== Inline Function Start for 4.15.2. KMSXDA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMSXDA32 (Saturating Signed Crossed Multiply Two Words & Add & Subtract)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMSDA32 Rd, Rs1, Rs2\n * KMSXDA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from the 32-bit element of two registers; and then\n * subtracts the two 64-bit results from a third register. The subtraction result may be saturated.\n * * KMSDA: rd - top*top - bottom*bottom\n * * KMSXDA: rd - top*bottom - bottom*top\n *\n * **Description**:\\n\n * For the `KMSDA32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2 and multiplies the top 32-bit element of Rs1 with the top 32-bit element of Rs2.\n * For the `KMSXDA32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and multiplies the top 32-bit element of Rs1 with the bottom 32-bit element of Rs2.\n * The two 64-bit multiplication results are then subtracted from the content of Rd. If the subtraction\n * result is beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit\n * is set to 1. The result after saturation is written to Rd. The 32-bit contents are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd - (Rs1.W[1] * Rs2.W[1]) - (Rs1.W[0] * Rs2.W[0]); // KMSDA32\n * res = Rd - (Rs1.W[1] * Rs2.W[0]) - (Rs1.W[0] * Rs2.W[1]); // KMSXDA32\n * if (res > (2^63)-1) {\n *   res = (2^63)-1;\n *   OV = 1;\n * } else if (res < -2^63) {\n *   res = -2^63;\n *   OV = 1;\n * }\n * Rd = res;\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMSXDA32(long t, unsigned long a, unsigned long b) {\n  __ASM volatile(\"kmsxda32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n  return t;\n}\n/* ===== Inline Function End for 4.15.2. KMSXDA32 ===== */\n\n/* ===== Inline Function Start for 4.16. KSLL32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief KSLL32 (SIMD 32-bit Saturating Shift Left Logical)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KSLL32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements logical left shift operations with saturation simultaneously. The shift\n * amount is a variable from a GPR.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are left-shifted logically. The shifted out bits are filled\n * with zero and the shift amount is specified by the low-order 5-bits of the value in the Rs2 register.\n * Any shifted value greater than 2^31-1 is saturated to 2^31-1. Any shifted value smaller than -2^31 is\n * saturated to -2^31. And the saturated results are written to Rd. If any saturation is performed, set OV\n * bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[4:0];\n * if (sa != 0) {\n *   res[(31+sa):0] = Rs1.W[x] << sa;\n *   if (res > (2^31)-1) {\n *     res = 0x7fffffff; OV = 1;\n *   } else if (res < -2^31) {\n *     res = 0x80000000; OV = 1;\n *   }\n *   Rd.W[x] = res[31:0];\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLL32(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"ksll32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.16. KSLL32 ===== */\n\n/* ===== Inline Function Start for 4.17. KSLLI32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief KSLLI32 (SIMD 32-bit Saturating Shift Left Logical Immediate)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KSLLI32 Rd, Rs1, imm5u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements logical left shift operations with saturation simultaneously. The shift\n * amount is an immediate value.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are left-shifted logically. The shifted out bits are filled\n * with zero and the shift amount is specified by the imm5u constant. Any shifted value greater than\n * 2^31-1 is saturated to 2^31-1. Any shifted value smaller than -2^31 is saturated to -2^31. And the saturated\n * results are written to Rd. If any saturation is performed, set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm5u[4:0];\n * if (sa != 0) {\n *   res[(31+sa):0] = Rs1.W[x] << sa;\n *   if (res > (2^31)-1) {\n *     res = 0x7fffffff; OV = 1;\n *   } else if (res < -2^31) {\n *     res = 0x80000000; OV = 1;\n *   }\n *   Rd.W[x] = res[31:0];\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLLI32(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"kslli32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.17. KSLLI32 ===== */\n\n/* ===== Inline Function Start for 4.18.1. KSLRA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief KSLRA32 (SIMD 32-bit Shift Left Logical with Saturation or Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KSLRA32 Rd, Rs1, Rs2\n * KSLRA32.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements logical left (positive) or arithmetic right (negative) shift operation with\n * Q31 saturation for the left shift. The `.u` form performs additional rounding up operations for the\n * right shift.\n *\n * **Description**:\\n\n * The 32-bit data elements of Rs1 are left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[5:0]. Rs2[5:0] is in the signed range of [-25, 25-1]. A positive Rs2[5:0] means\n * logical left shift and a negative Rs2[5:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[5:0]. However, the behavior of `Rs2[5:0]==-25 (0x20)` is defined to be\n * equivalent to the behavior of `Rs2[5:0]==-(25-1) (0x21)`.\n * The left-shifted results are saturated to the 32-bit signed integer range of [-2^31, 2^31-1]. For the `.u`\n * form of the instruction, the right-shifted results are added a 1 to the most significant discarded bit\n * position for rounding effect. After the shift, saturation, or rounding, the final results are written to\n * Rd. If any saturation happens, this instruction sets the OV flag. The value of Rs2[31:6] will not affect\n * this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[5:0] < 0) {\n *   sa = -Rs2[5:0];\n *   sa = (sa == 32)? 31 : sa;\n *   if (`.u` form) {\n *     res[31:-1] = SE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   } else {\n *     Rd.W[x] = SE32(Rs1.W[x][31:sa]);\n *   }\n * } else {\n *   sa = Rs2[4:0];\n *   res[(31+sa):0] = Rs1.W[x] <<(logic) sa;\n *   if (res > (2^31)-1) {\n *     res[31:0] = 0x7fffffff; OV = 1;\n *   } else if (res < -2^31) {\n *     res[31:0] = 0x80000000; OV = 1;\n *   }\n *   Rd.W[x] = res[31:0];\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLRA32(unsigned long a, int b) {\n  register unsigned long result;\n  __ASM volatile(\"kslra32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.18.1. KSLRA32 ===== */\n\n/* ===== Inline Function Start for 4.18.2. KSLRA32.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief KSLRA32.u (SIMD 32-bit Shift Left Logical with Saturation or Rounding Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KSLRA32 Rd, Rs1, Rs2\n * KSLRA32.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements logical left (positive) or arithmetic right (negative) shift operation with\n * Q31 saturation for the left shift. The `.u` form performs additional rounding up operations for the\n * right shift.\n *\n * **Description**:\\n\n * The 32-bit data elements of Rs1 are left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[5:0]. Rs2[5:0] is in the signed range of [-25, 25-1]. A positive Rs2[5:0] means\n * logical left shift and a negative Rs2[5:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[5:0]. However, the behavior of `Rs2[5:0]==-25 (0x20)` is defined to be\n * equivalent to the behavior of `Rs2[5:0]==-(25-1) (0x21)`.\n * The left-shifted results are saturated to the 32-bit signed integer range of [-2^31, 2^31-1]. For the `.u`\n * form of the instruction, the right-shifted results are added a 1 to the most significant discarded bit\n * position for rounding effect. After the shift, saturation, or rounding, the final results are written to\n * Rd. If any saturation happens, this instruction sets the OV flag. The value of Rs2[31:6] will not affect\n * this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[5:0] < 0) {\n *   sa = -Rs2[5:0];\n *   sa = (sa == 32)? 31 : sa;\n *   if (`.u` form) {\n *     res[31:-1] = SE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   } else {\n *     Rd.W[x] = SE32(Rs1.W[x][31:sa]);\n *   }\n * } else {\n *   sa = Rs2[4:0];\n *   res[(31+sa):0] = Rs1.W[x] <<(logic) sa;\n *   if (res > (2^31)-1) {\n *     res[31:0] = 0x7fffffff; OV = 1;\n *   } else if (res < -2^31) {\n *     res[31:0] = 0x80000000; OV = 1;\n *   }\n *   Rd.W[x] = res[31:0];\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLRA32_U(unsigned long a, int b) {\n  register unsigned long result;\n  __ASM volatile(\"kslra32.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.18.2. KSLRA32.u ===== */\n\n/* ===== Inline Function Start for 4.19. KSTAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief KSTAS32 (SIMD 32-bit Signed Saturating Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KSTAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element saturating addition and 32-bit signed integer element\n * saturating subtraction in a 64-bit chunk simultaneously. Operands are from corresponding 32-bit\n * elements.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit integer element in [63:32] of Rs1 with the 32-bit\n * integer element in [63:32] of Rs2; at the same time, it subtracts the 32-bit integer element in [31:0] of\n * Rs2 from the 32-bit integer element in [31:0] of Rs1. If any of the results are beyond the Q31 number\n * range (-2^31 <= Q31 <= 2^31-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to [63:32] of Rd for addition and [31:0] of Rd for subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * res[1] = Rs1.W[1] + Rs2.W[1];\n * res[0] = Rs1.W[0] - Rs2.W[0];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[1] = res[1];\n * Rd.W[0] = res[0];\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSTAS32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"kstas32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.19. KSTAS32 ===== */\n\n/* ===== Inline Function Start for 4.20. KSTSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief KSTSA32 (SIMD 32-bit Signed Saturating Straight Subtraction & Addition)\n * \\details\n * **Type**: SIM (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KSTSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element saturating subtraction and 32-bit signed integer element\n * saturating addition in a 64-bit chunk simultaneously. Operands are from corresponding 32-bit\n * elements.\n * *Description: *\n * This instruction subtracts the 32-bit integer element in [63:32] of Rs2 from the 32-bit integer\n * element in [63:32] of Rs1; at the same time, it adds the 32-bit integer element in [31:0] of Rs1 with\n * the 32-bit integer element in [31:0] of Rs2. If any of the results are beyond the Q31 number range (-\n * 231 <= Q31 <= 2^31-1), they are saturated to the range and the OV bit is set to 1. The saturated results are\n * written to [63:32] of Rd for subtraction and [31:0] of Rd for addition.\n *\n * **Operations**:\\n\n * ~~~\n * res[1] = Rs1.W[1] - Rs2.W[1];\n * res[0] = Rs1.W[0] + Rs2.W[0];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[1] = res[1];\n * Rd.W[0] = res[0];\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSTSA32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"kstsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.20. KSTSA32 ===== */\n\n/* ===== Inline Function Start for 4.21. KSUB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief KSUB32 (SIMD 32-bit Signed Saturating Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KSUB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer elements saturating subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit signed integer elements in Rs2 from the 32-bit\n * signed integer elements in Rs1. If any of the results are beyond the Q31 number range (-2^31 <= Q31 <=\n * 2^31-1), they are saturated to the range and the OV bit is set to 1. The saturated results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.W[x] - Rs2.W[x];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSUB32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ksub32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.21. KSUB32 ===== */\n\n/* ===== Inline Function Start for 4.22.1. PKBB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PACK\n * \\brief PKBB32 (Pack Two 32-bit Data from Both Bottom Half)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * PKBB32 Rd, Rs1, Rs2\n * PKBT32 Rd, Rs1, Rs2\n * PKTT32 Rd, Rs1, Rs2\n * PKTB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Pack 32-bit data from 64-bit chunks in two registers.\n * * PKBB32: bottom.bottom\n * * PKBT32: bottom.top\n * * PKTT32: top.top\n * * PKTB32: top.bottom\n *\n * **Description**:\\n\n * (PKBB32) moves Rs1.W[0] to Rd.W[1] and moves Rs2.W[0] to Rd.W[0].\n * (PKBT32) moves Rs1.W[0] to Rd.W[1] and moves Rs2.W[1] to Rd.W[0].\n * (PKTT32) moves Rs1.W[1] to Rd.W[1] and moves Rs2.W[1] to Rd.W[0].\n * (PKTB32) moves Rs1.W[1] to Rd.W[1] and moves Rs2.W[0] to Rd.W[0].\n *\n * **Operations**:\\n\n * ~~~\n * Rd = CONCAT(Rs1.W[_*0*_], Rs2.W[_*0*_]); // PKBB32\n * Rd = CONCAT(Rs1.W[_*0*_], Rs2.W[_*1*_]); // PKBT32\n * Rd = CONCAT(Rs1.W[_*1*_], Rs2.W[_*1*_]); // PKTT32\n * Rd = CONCAT(Rs1.W[_*1*_], Rs2.W[_*0*_]); // PKTB32\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PKBB32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"pkbb32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.22.1. PKBB32 ===== */\n\n/* ===== Inline Function Start for 4.22.2. PKBT32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PACK\n * \\brief PKBT32 (Pack Two 32-bit Data from Bottom and Top Half)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * PKBB32 Rd, Rs1, Rs2\n * PKBT32 Rd, Rs1, Rs2\n * PKTT32 Rd, Rs1, Rs2\n * PKTB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Pack 32-bit data from 64-bit chunks in two registers.\n * * PKBB32: bottom.bottom\n * * PKBT32: bottom.top\n * * PKTT32: top.top\n * * PKTB32: top.bottom\n *\n * **Description**:\\n\n * (PKBB32) moves Rs1.W[0] to Rd.W[1] and moves Rs2.W[0] to Rd.W[0].\n * (PKBT32) moves Rs1.W[0] to Rd.W[1] and moves Rs2.W[1] to Rd.W[0].\n * (PKTT32) moves Rs1.W[1] to Rd.W[1] and moves Rs2.W[1] to Rd.W[0].\n * (PKTB32) moves Rs1.W[1] to Rd.W[1] and moves Rs2.W[0] to Rd.W[0].\n *\n * **Operations**:\\n\n * ~~~\n * Rd = CONCAT(Rs1.W[_*0*_], Rs2.W[_*0*_]); // PKBB32\n * Rd = CONCAT(Rs1.W[_*0*_], Rs2.W[_*1*_]); // PKBT32\n * Rd = CONCAT(Rs1.W[_*1*_], Rs2.W[_*1*_]); // PKTT32\n * Rd = CONCAT(Rs1.W[_*1*_], Rs2.W[_*0*_]); // PKTB32\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PKBT32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"pkbt32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.22.2. PKBT32 ===== */\n\n/* ===== Inline Function Start for 4.22.3. PKTT32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PACK\n * \\brief PKTT32 (Pack Two 32-bit Data from Both Top Half)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * PKBB32 Rd, Rs1, Rs2\n * PKBT32 Rd, Rs1, Rs2\n * PKTT32 Rd, Rs1, Rs2\n * PKTB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Pack 32-bit data from 64-bit chunks in two registers.\n * * PKBB32: bottom.bottom\n * * PKBT32: bottom.top\n * * PKTT32: top.top\n * * PKTB32: top.bottom\n *\n * **Description**:\\n\n * (PKBB32) moves Rs1.W[0] to Rd.W[1] and moves Rs2.W[0] to Rd.W[0].\n * (PKBT32) moves Rs1.W[0] to Rd.W[1] and moves Rs2.W[1] to Rd.W[0].\n * (PKTT32) moves Rs1.W[1] to Rd.W[1] and moves Rs2.W[1] to Rd.W[0].\n * (PKTB32) moves Rs1.W[1] to Rd.W[1] and moves Rs2.W[0] to Rd.W[0].\n *\n * **Operations**:\\n\n * ~~~\n * Rd = CONCAT(Rs1.W[_*0*_], Rs2.W[_*0*_]); // PKBB32\n * Rd = CONCAT(Rs1.W[_*0*_], Rs2.W[_*1*_]); // PKBT32\n * Rd = CONCAT(Rs1.W[_*1*_], Rs2.W[_*1*_]); // PKTT32\n * Rd = CONCAT(Rs1.W[_*1*_], Rs2.W[_*0*_]); // PKTB32\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PKTT32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"pktt32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.22.3. PKTT32 ===== */\n\n/* ===== Inline Function Start for 4.22.4. PKTB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PACK\n * \\brief PKTB32 (Pack Two 32-bit Data from Top and Bottom Half)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * PKBB32 Rd, Rs1, Rs2\n * PKBT32 Rd, Rs1, Rs2\n * PKTT32 Rd, Rs1, Rs2\n * PKTB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Pack 32-bit data from 64-bit chunks in two registers.\n * * PKBB32: bottom.bottom\n * * PKBT32: bottom.top\n * * PKTT32: top.top\n * * PKTB32: top.bottom\n *\n * **Description**:\\n\n * (PKBB32) moves Rs1.W[0] to Rd.W[1] and moves Rs2.W[0] to Rd.W[0].\n * (PKBT32) moves Rs1.W[0] to Rd.W[1] and moves Rs2.W[1] to Rd.W[0].\n * (PKTT32) moves Rs1.W[1] to Rd.W[1] and moves Rs2.W[1] to Rd.W[0].\n * (PKTB32) moves Rs1.W[1] to Rd.W[1] and moves Rs2.W[0] to Rd.W[0].\n *\n * **Operations**:\\n\n * ~~~\n * Rd = CONCAT(Rs1.W[_*0*_], Rs2.W[_*0*_]); // PKBB32\n * Rd = CONCAT(Rs1.W[_*0*_], Rs2.W[_*1*_]); // PKBT32\n * Rd = CONCAT(Rs1.W[_*1*_], Rs2.W[_*1*_]); // PKTT32\n * Rd = CONCAT(Rs1.W[_*1*_], Rs2.W[_*0*_]); // PKTB32\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PKTB32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"pktb32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.22.4. PKTB32 ===== */\n\n/* ===== Inline Function Start for 4.23. RADD32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief RADD32 (SIMD 32-bit Signed Halving Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * RADD32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element additions simultaneously. The results are halved to avoid\n * overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit signed integer elements in Rs1 with the 32-bit signed\n * integer elements in Rs2. The results are first arithmetically right-shifted by 1 bit and then written to\n * Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Rs1 = 0x7FFFFFFF, Rs2 = 0x7FFFFFFF Rd = 0x7FFFFFFF\n * * Rs1 = 0x80000000, Rs2 = 0x80000000 Rd = 0x80000000\n * * Rs1 = 0x40000000, Rs2 = 0x80000000 Rd = 0xE0000000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = (Rs1.W[x] + Rs2.W[x]) s>> 1;\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RADD32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"radd32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.23. RADD32 ===== */\n\n/* ===== Inline Function Start for 4.24. RCRAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief RCRAS32 (SIMD 32-bit Signed Halving Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * RCRAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element addition and 32-bit signed integer element subtraction in\n * a 64-bit chunk simultaneously. Operands are from crossed 32-bit elements. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit signed integer element in [63:32] of Rs1 with the 32-bit\n * signed integer element in [31:0] of Rs2, and subtracts the 32-bit signed integer element in [63:32] of\n * Rs2 from the 32-bit signed integer element in [31:0] of Rs1. The element results are first\n * arithmetically right-shifted by 1 bit and then written to [63:32] of Rd for addition and [31:0] of Rd\n * for subtraction.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `RADD32` and `RSUB32` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = (Rs1.W[1] + Rs2.W[0]) s>> 1;\n * Rd.W[0] = (Rs1.W[0] - Rs2.W[1]) s>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RCRAS32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"rcras32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.24. RCRAS32 ===== */\n\n/* ===== Inline Function Start for 4.25. RCRSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief RCRSA32 (SIMD 32-bit Signed Halving Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * RCRSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element subtraction and 32-bit signed integer element addition in\n * a 64-bit chunk simultaneously. Operands are from crossed 32-bit elements. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit signed integer element in [31:0] of Rs2 from the\n * 32-bit signed integer element in [63:32] of Rs1, and adds the 32-bit signed element integer in [31:0]\n * of Rs1 with the 32-bit signed integer element in [63:32] of Rs2. The two results are first\n * arithmetically right-shifted by 1 bit and then written to [63:32] of Rd for subtraction and [31:0] of\n * Rd for addition.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `RADD32` and `RSUB32` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = (Rs1.W[1] - Rs2.W[0]) s>> 1;\n * Rd.W[0] = (Rs1.W[0] + Rs2.W[1]) s>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RCRSA32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"rcrsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.25. RCRSA32 ===== */\n\n/* ===== Inline Function Start for 4.26. RSTAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief RSTAS32 (SIMD 32-bit Signed Halving Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * RSTAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element addition and 32-bit signed integer element subtraction in\n * a 64-bit chunk simultaneously. Operands are from corresponding 32-bit elements. The results are\n * halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit signed integer element in [63:32] of Rs1 with the 32-bit\n * signed integer element in [63:32] of Rs2, and subtracts the 32-bit signed integer element in [31:0] of\n * Rs2 from the 32-bit signed integer element in [31:0] of Rs1. The element results are first\n * arithmetically right-shifted by 1 bit and then written to [63:32] of Rd for addition and [31:0] of Rd\n * for subtraction.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `RADD32` and `RSUB32` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = (Rs1.W[1] + Rs2.W[1]) s>> 1;\n * Rd.W[0] = (Rs1.W[0] - Rs2.W[0]) s>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RSTAS32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"rstas32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.26. RSTAS32 ===== */\n\n/* ===== Inline Function Start for 4.27. RSTSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief RSTSA32 (SIMD 32-bit Signed Halving Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * RSTSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element subtraction and 32-bit signed integer element addition in\n * a 64-bit chunk simultaneously. Operands are from corresponding 32-bit elements. The results are\n * halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit signed integer element in [63:32] of Rs2 from the\n * 32-bit signed integer element in [63:32] of Rs1, and adds the 32-bit signed element integer in [31:0]\n * of Rs1 with the 32-bit signed integer element in [31:0] of Rs2. The two results are first arithmetically\n * right-shifted by 1 bit and then written to [63:32] of Rd for subtraction and [31:0] of Rd for addition.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `RADD32` and `RSUB32` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = (Rs1.W[1] - Rs2.W[1]) s>> 1;\n * Rd.W[0] = (Rs1.W[0] + Rs2.W[0]) s>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RSTSA32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"rstsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.27. RSTSA32 ===== */\n\n/* ===== Inline Function Start for 4.28. RSUB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief RSUB32 (SIMD 32-bit Signed Halving Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * RSUB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element subtractions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit signed integer elements in Rs2 from the 32-bit\n * signed integer elements in Rs1. The results are first arithmetically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7FFFFFFF, Rb = 0x80000000 Rt = 0x7FFFFFFF\n * * Ra = 0x80000000, Rb = 0x7FFFFFFF Rt = 0x80000000\n * * Ra = 0x80000000, Rb = 0x40000000 Rt = 0xA0000000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = (Rs1.W[x] - Rs2.W[x]) s>> 1;\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RSUB32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"rsub32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.28. RSUB32 ===== */\n\n/* ===== Inline Function Start for 4.29. SLL32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SLL32 (SIMD 32-bit Shift Left Logical)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SLL32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements logical left shift operations simultaneously. The shift amount is a\n * variable from a GPR.\n *\n * **Description**:\\n\n * The 32-bit elements in Rs1 are left-shifted logically. And the results are written to Rd.\n * The shifted out bits are filled with zero and the shift amount is specified by the low-order 5-bits of\n * the value in the Rs2 register.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[4:0];\n * Rd.W[x] = Rs1.W[x] << sa;\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SLL32(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"sll32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.29. SLL32 ===== */\n\n/* ===== Inline Function Start for 4.30. SLLI32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SLLI32 (SIMD 32-bit Shift Left Logical Immediate)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SLLI32 Rd, Rs1, imm5u[4:0]\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit element logical left shift operations simultaneously. The shift amount is an\n * immediate value.\n *\n * **Description**:\\n\n * The 32-bit elements in Rs1 are left-shifted logically. The shifted out bits are filled with\n * zero and the shift amount is specified by the imm5u[4:0] constant. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm5u[4:0];\n * Rd.W[x] = Rs1.W[x] << sa;\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SLLI32(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"slli32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.30. SLLI32 ===== */\n\n/* ===== Inline Function Start for 4.31. SMAX32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_MISC\n * \\brief SMAX32 (SIMD 32-bit Signed Maximum)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SMAX32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer elements finding maximum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 32-bit signed integer elements in Rs1 with the 32-bit\n * signed integer elements in Rs2 and selects the numbers that is greater than the other one. The\n * selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = (Rs1.W[x] > Rs2.W[x])? Rs1.W[x] : Rs2.W[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SMAX32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"smax32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.31. SMAX32 ===== */\n\n/* ===== Inline Function Start for 4.32.1. SMBB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_MULT\n * \\brief SMBB32 (Signed Multiply Bottom Word & Bottom Word)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SMBB32 Rd, Rs1, Rs2\n * SMBT32 Rd, Rs1, Rs2\n * SMTT32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit element of a register with the signed 32-bit element of another\n * register and write the 64-bit result to a third register.\n * * SMBB32: bottom*bottom\n * * SMBT32: bottom*top\n * * SMTT32: top*top\n *\n * **Description**:\\n\n * For the `SMBB32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2. It is actually an alias of `MULSR64` instruction.\n * For the `SMBT32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2.\n * For the `SMTT32` instruction, it multiplies the top 32-bit element of Rs1 with the top 32-bit element\n * of Rs2.\n * The 64-bit multiplication result is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as\n * signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rs1.W[0] * Rs2.W[0]; // SMBB32 res = Rs1.W[0] * Rs2.w[1]; // SMBT32 res = Rs1.W[1] * Rs2.W[1];\n * // SMTT32 Rd = res;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMBB32(unsigned long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"smbb32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.32.1. SMBB32 ===== */\n\n/* ===== Inline Function Start for 4.32.2. SMBT32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_MULT\n * \\brief SMBT32 (Signed Multiply Bottom Word & Top Word)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SMBB32 Rd, Rs1, Rs2\n * SMBT32 Rd, Rs1, Rs2\n * SMTT32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit element of a register with the signed 32-bit element of another\n * register and write the 64-bit result to a third register.\n * * SMBB32: bottom*bottom\n * * SMBT32: bottom*top\n * * SMTT32: top*top\n *\n * **Description**:\\n\n * For the `SMBB32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2. It is actually an alias of `MULSR64` instruction.\n * For the `SMBT32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2.\n * For the `SMTT32` instruction, it multiplies the top 32-bit element of Rs1 with the top 32-bit element\n * of Rs2.\n * The 64-bit multiplication result is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as\n * signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rs1.W[0] * Rs2.W[0]; // SMBB32 res = Rs1.W[0] * Rs2.w[1]; // SMBT32 res = Rs1.W[1] * Rs2.W[1];\n * // SMTT32 Rd = res;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMBT32(unsigned long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"smbt32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.32.2. SMBT32 ===== */\n\n/* ===== Inline Function Start for 4.32.3. SMTT32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_MULT\n * \\brief SMTT32 (Signed Multiply Top Word & Top Word)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SMBB32 Rd, Rs1, Rs2\n * SMBT32 Rd, Rs1, Rs2\n * SMTT32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit element of a register with the signed 32-bit element of another\n * register and write the 64-bit result to a third register.\n * * SMBB32: bottom*bottom\n * * SMBT32: bottom*top\n * * SMTT32: top*top\n *\n * **Description**:\\n\n * For the `SMBB32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2. It is actually an alias of `MULSR64` instruction.\n * For the `SMBT32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2.\n * For the `SMTT32` instruction, it multiplies the top 32-bit element of Rs1 with the top 32-bit element\n * of Rs2.\n * The 64-bit multiplication result is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as\n * signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rs1.W[0] * Rs2.W[0]; // SMBB32 res = Rs1.W[0] * Rs2.w[1]; // SMBT32 res = Rs1.W[1] * Rs2.W[1];\n * // SMTT32 Rd = res;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMTT32(unsigned long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"smtt32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.32.3. SMTT32 ===== */\n\n/* ===== Inline Function Start for 4.33.1. SMDS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief SMDS32 (Signed Multiply Two Words and Subtract)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SMDS32 Rd, Rs1, Rs2\n * SMDRS32 Rd, Rs1, Rs2\n * SMXDS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from the l 32-bit element of two registers; and then\n * perform a subtraction operation between the two 64-bit results.\n * * SMDS32: top*top - bottom*bottom\n * * SMDRS32: bottom*bottom - top*top\n * * SMXDS32: top*bottom - bottom*top\n *\n * **Description**:\\n\n * For the `SMDS32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the top 32-bit element of\n * Rs1 with the top 32-bit element of Rs2.\n * For the `SMDRS32` instruction, it multiplies the top 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the bottom 32-bit\n * element of Rs1 with the bottom 32-bit element of Rs2.\n * For the `SMXDS32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the top 32-bit element of\n * Rs1 with the bottom 32-bit element of Rs2.\n * The subtraction result is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * Rt = (Rs1.W[1] * Rs2.W[1]) - (Rs1.W[0] * Rs2.W[0]); // SMDS32\n * Rt = (Rs1.W[0] * Rs2.W[0]) - (Rs1.W[1] * Rs2.W[1]); // SMDRS32\n * Rt = (Rs1.W[1] * Rs2.W[0]) - (Rs1.W[0] * Rs2.W[1]); // SMXDS32\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMDS32(unsigned long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"smds32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.33.1. SMDS32 ===== */\n\n/* ===== Inline Function Start for 4.33.2. SMDRS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief SMDRS32 (Signed Multiply Two Words and Reverse Subtract)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SMDS32 Rd, Rs1, Rs2\n * SMDRS32 Rd, Rs1, Rs2\n * SMXDS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from the l 32-bit element of two registers; and then\n * perform a subtraction operation between the two 64-bit results.\n * * SMDS32: top*top - bottom*bottom\n * * SMDRS32: bottom*bottom - top*top\n * * SMXDS32: top*bottom - bottom*top\n *\n * **Description**:\\n\n * For the `SMDS32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the top 32-bit element of\n * Rs1 with the top 32-bit element of Rs2.\n * For the `SMDRS32` instruction, it multiplies the top 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the bottom 32-bit\n * element of Rs1 with the bottom 32-bit element of Rs2.\n * For the `SMXDS32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the top 32-bit element of\n * Rs1 with the bottom 32-bit element of Rs2.\n * The subtraction result is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * Rt = (Rs1.W[1] * Rs2.W[1]) - (Rs1.W[0] * Rs2.W[0]); // SMDS32\n * Rt = (Rs1.W[0] * Rs2.W[0]) - (Rs1.W[1] * Rs2.W[1]); // SMDRS32\n * Rt = (Rs1.W[1] * Rs2.W[0]) - (Rs1.W[0] * Rs2.W[1]); // SMXDS32\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMDRS32(unsigned long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"smdrs32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.33.2. SMDRS32 ===== */\n\n/* ===== Inline Function Start for 4.33.3. SMXDS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief SMXDS32 (Signed Crossed Multiply Two Words and Subtract)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SMDS32 Rd, Rs1, Rs2\n * SMDRS32 Rd, Rs1, Rs2\n * SMXDS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from the l 32-bit element of two registers; and then\n * perform a subtraction operation between the two 64-bit results.\n * * SMDS32: top*top - bottom*bottom\n * * SMDRS32: bottom*bottom - top*top\n * * SMXDS32: top*bottom - bottom*top\n *\n * **Description**:\\n\n * For the `SMDS32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the top 32-bit element of\n * Rs1 with the top 32-bit element of Rs2.\n * For the `SMDRS32` instruction, it multiplies the top 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the bottom 32-bit\n * element of Rs1 with the bottom 32-bit element of Rs2.\n * For the `SMXDS32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the top 32-bit element of\n * Rs1 with the bottom 32-bit element of Rs2.\n * The subtraction result is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * Rt = (Rs1.W[1] * Rs2.W[1]) - (Rs1.W[0] * Rs2.W[0]); // SMDS32\n * Rt = (Rs1.W[0] * Rs2.W[0]) - (Rs1.W[1] * Rs2.W[1]); // SMDRS32\n * Rt = (Rs1.W[1] * Rs2.W[0]) - (Rs1.W[0] * Rs2.W[1]); // SMXDS32\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMXDS32(unsigned long a, unsigned long b) {\n  register long result;\n  __ASM volatile(\"smxds32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.33.3. SMXDS32 ===== */\n\n/* ===== Inline Function Start for 4.34. SMIN32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_MISC\n * \\brief SMIN32 (SIMD 32-bit Signed Minimum)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SMIN32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer elements finding minimum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 32-bit signed integer elements in Rs1 with the 32-bit\n * signed integer elements in Rs2 and selects the numbers that is less than the other one. The selected\n * results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = (Rs1.W[x] < Rs2.W[x])? Rs1.W[x] : Rs2.W[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SMIN32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"smin32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.34. SMIN32 ===== */\n\n/* ===== Inline Function Start for 4.35.1. SRA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SRA32 (SIMD 32-bit Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRA32 Rd, Rs1, Rs2\n * SRA32.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit element arithmetic right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the data elements. The shift amount is specified by the low-order\n * 5-bits of the value in the Rs2 register. For the rounding operation of the `.u` form, a value of 1 is\n * added to the most significant discarded bit of each 32-bit data element to calculate the final results.\n * And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[4:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRA32.u\n *     res[31:-1] = SE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   else { // SRA32\n *     Rd.W[x] = SE32(Rs1.W[x][31:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRA32(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"sra32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.35.1. SRA32 ===== */\n\n/* ===== Inline Function Start for 4.35.2. SRA32.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SRA32.u (SIMD 32-bit Rounding Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRA32 Rd, Rs1, Rs2\n * SRA32.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit element arithmetic right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the data elements. The shift amount is specified by the low-order\n * 5-bits of the value in the Rs2 register. For the rounding operation of the `.u` form, a value of 1 is\n * added to the most significant discarded bit of each 32-bit data element to calculate the final results.\n * And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[4:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRA32.u\n *     res[31:-1] = SE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   else { // SRA32\n *     Rd.W[x] = SE32(Rs1.W[x][31:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRA32_U(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"sra32.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.35.2. SRA32.u ===== */\n\n/* ===== Inline Function Start for 4.36.1. SRAI32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SRAI32 (SIMD 32-bit Shift Right Arithmetic Immediate)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRAI32 Rd, Rs1, imm5u\n * SRAI32.u Rd, Rs1, imm5u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements arithmetic right shift operations simultaneously. The shift amount is\n * an immediate value. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the 32-bit data elements. The shift amount is specified by the\n * imm5u constant. For the rounding operation of the `.u` form, a value of 1 is added to the most\n * significant discarded bit of each 32-bit data to calculate the final results. And the results are written\n * to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm5u[4:0];\n *   if (sa > 0) {\n *   if (`.u` form) { // SRAI32.u\n *     res[31:-1] = SE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   else { // SRAI32\n *     Rd.W[x] = SE32(Rs1.W[x][31:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRAI32(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"srai32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.36.1. SRAI32 ===== */\n\n/* ===== Inline Function Start for 4.36.2. SRAI32.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SRAI32.u (SIMD 32-bit Rounding Shift Right Arithmetic Immediate)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRAI32 Rd, Rs1, imm5u\n * SRAI32.u Rd, Rs1, imm5u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements arithmetic right shift operations simultaneously. The shift amount is\n * an immediate value. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the 32-bit data elements. The shift amount is specified by the\n * imm5u constant. For the rounding operation of the `.u` form, a value of 1 is added to the most\n * significant discarded bit of each 32-bit data to calculate the final results. And the results are written\n * to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm5u[4:0];\n *   if (sa > 0) {\n *   if (`.u` form) { // SRAI32.u\n *     res[31:-1] = SE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   else { // SRAI32\n *     Rd.W[x] = SE32(Rs1.W[x][31:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRAI32_U(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"srai32.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.36.2. SRAI32.u ===== */\n\n/* ===== Inline Function Start for 4.37. SRAIW.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_NON_SIMD_32B_SHIFT\n * \\brief SRAIW.u (Rounding Shift Right Arithmetic Immediate Word)\n * \\details\n * **Type**: DSP (RV64 only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRAIW.u Rd, Rs1, imm5u\n * ~~~\n *\n * **Purpose**:\\n\n * Perform a 32-bit arithmetic right shift operation with rounding. The shift amount is an\n * immediate value.\n *\n * **Description**:\\n\n * This instruction right-shifts the lower 32-bit content of Rs1 arithmetically. The shifted\n * out bits are filled with the sign-bit Rs1(31) and the shift amount is specified by the imm5u constant.\n * For the rounding operation, a value of 1 is added to the most significant discarded bit of the data to\n * calculate the final result. And the result is sign-extended and written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm5u;\n * if (sa != 0) {\n *   res[31:-1] = SE33(Rs1[31:(sa-1)]) + 1;\n *   Rd = SE32(res[31:0]);\n * } else {\n *   Rd = SE32(Rs1.W[0]);\n * }\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SRAIW_U(int a, unsigned int b) {\n  register long result;\n  __ASM volatile(\"sraiw.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.37. SRAIW.u ===== */\n\n/* ===== Inline Function Start for 4.38.1. SRL32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SRL32 (SIMD 32-bit Shift Right Logical)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRL32 Rd, Rs1, Rs2\n * SRL32.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit element logical right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits\n * are filled with zero. The shift amount is specified by the low-order 5-bits of the value in the Rs2\n * register. For the rounding operation of the `.u` form, a value of 1 is added to the most significant\n * discarded bit of each 32-bit data element to calculate the final results. And the results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[4:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRA32.u\n *     res[31:-1] = ZE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   else { // SRA32\n *     Rd.W[x] = ZE32(Rs1.W[x][31:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRL32(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"srl32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.38.1. SRL32 ===== */\n\n/* ===== Inline Function Start for 4.38.2. SRL32.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SRL32.u (SIMD 32-bit Rounding Shift Right Logical)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRL32 Rd, Rs1, Rs2\n * SRL32.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit element logical right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits\n * are filled with zero. The shift amount is specified by the low-order 5-bits of the value in the Rs2\n * register. For the rounding operation of the `.u` form, a value of 1 is added to the most significant\n * discarded bit of each 32-bit data element to calculate the final results. And the results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[4:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRA32.u\n *     res[31:-1] = ZE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   else { // SRA32\n *     Rd.W[x] = ZE32(Rs1.W[x][31:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRL32_U(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"srl32.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.38.2. SRL32.u ===== */\n\n/* ===== Inline Function Start for 4.39.1. SRLI32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SRLI32 (SIMD 32-bit Shift Right Logical Immediate)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRLI32 Rd, Rs1, imm5u\n * SRLI32.u Rd, Rs1, imm5u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements logical right shift operations simultaneously. The shift amount is an\n * immediate value. The `.u` form performs additional rounding up operations on the shifted results.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits\n * are filled with zero. The shift amount is specified by the imm5u constant. For the rounding\n * operation of the `.u` form, a value of 1 is added to the most significant discarded bit of each 32-bit\n * data to calculate the final results. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm5u[4:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRLI32.u\n *     res[31:-1] = ZE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   else { // SRLI32\n *     Rd.W[x] = ZE32(Rs1.W[x][31:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRLI32(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"srli32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.39.1. SRLI32 ===== */\n\n/* ===== Inline Function Start for 4.39.2. SRLI32.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SRLI32.u (SIMD 32-bit Rounding Shift Right Logical Immediate)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRLI32 Rd, Rs1, imm5u\n * SRLI32.u Rd, Rs1, imm5u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements logical right shift operations simultaneously. The shift amount is an\n * immediate value. The `.u` form performs additional rounding up operations on the shifted results.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits\n * are filled with zero. The shift amount is specified by the imm5u constant. For the rounding\n * operation of the `.u` form, a value of 1 is added to the most significant discarded bit of each 32-bit\n * data to calculate the final results. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm5u[4:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRLI32.u\n *     res[31:-1] = ZE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   else { // SRLI32\n *     Rd.W[x] = ZE32(Rs1.W[x][31:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRLI32_U(unsigned long a, unsigned int b) {\n  register unsigned long result;\n  __ASM volatile(\"srli32.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.39.2. SRLI32.u ===== */\n\n/* ===== Inline Function Start for 4.40. STAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief STAS32 (SIMD 32-bit Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * STAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit integer element addition and 32-bit integer element subtraction in a 64-bit\n * chunk simultaneously. Operands are from corresponding 32-bit elements.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit integer element in [63:32] of Rs1 with the 32-bit\n * integer element in [63:32] of Rs2, and writes the result to [63:32] of Rd; at the same time, it subtracts\n * the 32-bit integer element in [31:0] of Rs2 from the 32-bit integer element in [31:0] of Rs1, and\n * writes the result to [31:0] of Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned operations.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = Rs1.W[1] + Rs2.W[1];\n * Rd.W[0] = Rs1.W[0] - Rs2.W[0];\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_STAS32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"stas32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.40. STAS32 ===== */\n\n/* ===== Inline Function Start for 4.41. STSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief STSA32 (SIMD 32-bit Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * STSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit integer element subtraction and 32-bit integer element addition in a 64-bit\n * chunk simultaneously. Operands are from corresponding 32-bit elements.\n * *Description: *\n * This instruction subtracts the 32-bit integer element in [63:32] of Rs2 from the 32-bit integer\n * element in [63:32] of Rs1, and writes the result to [63:32] of Rd; at the same time, it adds the 32-bit\n * integer element in [31:0] of Rs1 with the 32-bit integer element in [31:0] of Rs2, and writes the result\n * to [31:0] of Rd\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned operations.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = Rs1.W[1] - Rs2.W[1];\n * Rd.W[0] = Rs1.W[0] + Rs2.W[0];\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_STSA32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"stsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.41. STSA32 ===== */\n\n/* ===== Inline Function Start for 4.42. SUB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief SUB32 (SIMD 32-bit Subtraction)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SUB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit integer element subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit integer elements in Rs2 from the 32-bit integer\n * elements in Rs1, and then writes the results to Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = Rs1.W[x] - Rs2.W[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SUB32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"sub32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.42. SUB32 ===== */\n\n/* ===== Inline Function Start for 4.43. UKADD32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief UKADD32 (SIMD 32-bit Unsigned Saturating Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * UKADD32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer element saturating additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit unsigned integer elements in Rs1 with the 32-bit\n * unsigned integer elements in Rs2. If any of the results are beyond the 32-bit unsigned number\n * range (0 <= RES <= 2^32-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.W[x] + Rs2.W[x];\n * if (res[x] > (2^32)-1) {\n *   res[x] = (2^32)-1;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKADD32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ukadd32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.43. UKADD32 ===== */\n\n/* ===== Inline Function Start for 4.44. UKCRAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief UKCRAS32 (SIMD 32-bit Unsigned Saturating Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * UKCRAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do one 32-bit unsigned integer element saturating addition and one 32-bit unsigned\n * integer element saturating subtraction in a 64-bit chunk simultaneously. Operands are from crossed\n * 32-bit elements.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit unsigned integer element in [63:32] of Rs1 with the 32-\n * bit unsigned integer element in [31:0] of Rs2; at the same time, it subtracts the 32-bit unsigned\n * integer element in [63:32] of Rs2 from the 32-bit unsigned integer element in [31:0] Rs1. If any of the\n * results are beyond the 32-bit unsigned number range (0 <= RES <= 2^32-1), they are saturated to the\n * range and the OV bit is set to 1. The saturated results are written to [63:32] of Rd for addition and\n * [31:0] of Rd for subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[1] + Rs2.W[0];\n * res2 = Rs1.W[0] - Rs2.W[1];\n * if (res1 > (2^32)-1) {\n *   res1 = (2^32)-1;\n *   OV = 1;\n * }\n * if (res2 < 0) {\n *   res2 = 0;\n *   OV = 1;\n * }\n * Rd.W[1] = res1;\n * Rd.W[0] = res2;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKCRAS32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ukcras32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.44. UKCRAS32 ===== */\n\n/* ===== Inline Function Start for 4.45. UKCRSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief UKCRSA32 (SIMD 32-bit Unsigned Saturating Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * UKCRSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do one 32-bit unsigned integer element saturating subtraction and one 32-bit unsigned\n * integer element saturating addition in a 64-bit chunk simultaneously. Operands are from crossed\n * 32-bit elements.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit unsigned integer element in [31:0] of Rs2 from the\n * 32-bit unsigned integer element in [63:32] of Rs1; at the same time, it adds the 32-bit unsigned\n * integer element in [63:32] of Rs2 with the 32-bit unsigned integer element in [31:0] Rs1. If any of the\n * results are beyond the 32-bit unsigned number range (0 <= RES <= 2^32-1), they are saturated to the\n * range and the OV bit is set to 1. The saturated results are written to [63:32] of Rd for subtraction and\n * [31:0] of Rd for addition.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[1] - Rs2.W[0];\n * res2 = Rs1.W[0] + Rs2.W[1];\n * if (res1 < 0) {\n *   res1 = 0;\n *   OV = 1;\n * } else if (res2 > (2^32)-1) {\n *   res2 = (2^32)-1;\n *   OV = 1;\n * }\n * Rd.W[1] = res1;\n * Rd.W[0] = res2;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKCRSA32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ukcrsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.45. UKCRSA32 ===== */\n\n/* ===== Inline Function Start for 4.46. UKSTAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief UKSTAS32 (SIMD 32-bit Unsigned Saturating Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * UKSTAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do one 32-bit unsigned integer element saturating addition and one 32-bit unsigned\n * integer element saturating subtraction in a 64-bit chunk simultaneously. Operands are from\n * corresponding 32-bit elements.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit unsigned integer element in [63:32] of Rs1 with the 32-\n * bit unsigned integer element in [63:32] of Rs2; at the same time, it subtracts the 32-bit unsigned\n * integer element in [31:0] of Rs2 from the 32-bit unsigned integer element in [31:0] Rs1. If any of the\n * results are beyond the 32-bit unsigned number range (0 <= RES <= 2^32-1), they are saturated to the\n * range and the OV bit is set to 1. The saturated results are written to [63:32] of Rd for addition and\n * [31:0] of Rd for subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[1] + Rs2.W[1];\n * res2 = Rs1.W[0] - Rs2.W[0];\n * if (res1 > (2^32)-1) {\n *   res1 = (2^32)-1;\n *   OV = 1;\n * }\n * if (res2 < 0) {\n *   res2 = 0;\n *   OV = 1;\n * }\n * Rd.W[1] = res1;\n * Rd.W[0] = res2;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSTAS32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ukstas32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.46. UKSTAS32 ===== */\n\n/* ===== Inline Function Start for 4.47. UKSTSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief UKSTSA32 (SIMD 32-bit Unsigned Saturating Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * UKSTSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do one 32-bit unsigned integer element saturating subtraction and one 32-bit unsigned\n * integer element saturating addition in a 64-bit chunk simultaneously. Operands are from\n * corresponding 32-bit elements.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit unsigned integer element in [63:32] of Rs2 from\n * the 32-bit unsigned integer element in [63:32] of Rs1; at the same time, it adds the 32-bit unsigned\n * integer element in [31:0] of Rs2 with the 32-bit unsigned integer element in [31:0] Rs1. If any of the\n * results are beyond the 32-bit unsigned number range (0 <= RES <= 2^32-1), they are saturated to the\n * range and the OV bit is set to 1. The saturated results are written to [63:32] of Rd for subtraction and\n * [31:0] of Rd for addition.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[1] - Rs2.W[1];\n * res2 = Rs1.W[0] + Rs2.W[0];\n * if (res1 < 0) {\n *   res1 = 0;\n *   OV = 1;\n * } else if (res2 > (2^32)-1) {\n *   res2 = (2^32)-1;\n *   OV = 1;\n * }\n * Rd.W[1] = res1;\n * Rd.W[0] = res2;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSTSA32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ukstsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.47. UKSTSA32 ===== */\n\n/* ===== Inline Function Start for 4.48. UKSUB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief UKSUB32 (SIMD 32-bit Unsigned Saturating Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * UKSUB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer elements saturating subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit unsigned integer elements in Rs2 from the 32-bit\n * unsigned integer elements in Rs1. If any of the results are beyond the 32-bit unsigned number\n * range (0 <= RES <= 2^32-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.W[x] - Rs2.W[x];\n * if (res[x] < 0) {\n *   res[x] = 0;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSUB32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"uksub32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.48. UKSUB32 ===== */\n\n/* ===== Inline Function Start for 4.49. UMAX32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_MISC\n * \\brief UMAX32 (SIMD 32-bit Unsigned Maximum)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * UMAX32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer elements finding maximum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 32-bit unsigned integer elements in Rs1 with the 32-bit\n * unsigned integer elements in Rs2 and selects the numbers that is greater than the other one. The\n * selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = (Rs1.W[x] u> Rs2.W[x])? Rs1.W[x] : Rs2.W[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UMAX32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"umax32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.49. UMAX32 ===== */\n\n/* ===== Inline Function Start for 4.50. UMIN32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_MISC\n * \\brief UMIN32 (SIMD 32-bit Unsigned Minimum)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * UMIN32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer elements finding minimum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 32-bit unsigned integer elements in Rs1 with the 32-bit\n * unsigned integer elements in Rs2 and selects the numbers that is less than the other one. The\n * selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = (Rs1.W[x] <u Rs2.W[x])? Rs1.W[x] : Rs2.W[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UMIN32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"umin32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.50. UMIN32 ===== */\n\n/* ===== Inline Function Start for 4.51. URADD32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief URADD32 (SIMD 32-bit Unsigned Halving Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * URADD32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer element additions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit unsigned integer elements in Rs1 with the 32-bit\n * unsigned integer elements in Rs2. The results are first logically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7FFFFFFF, Rb = 0x7FFFFFFF Rt = 0x7FFFFFFF\n * * Ra = 0x80000000, Rb = 0x80000000 Rt = 0x80000000\n * * Ra = 0x40000000, Rb = 0x80000000 Rt = 0x60000000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = (Rs1.W[x] + Rs2.W[x]) u>> 1;\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URADD32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"uradd32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.51. URADD32 ===== */\n\n/* ===== Inline Function Start for 4.52. URCRAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief URCRAS32 (SIMD 32-bit Unsigned Halving Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * URCRAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer element addition and 32-bit unsigned integer element\n * subtraction in a 64-bit chunk simultaneously. Operands are from crossed 32-bit elements. The\n * results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit unsigned integer element in [63:32] of Rs1 with the 32-\n * bit unsigned integer element in [31:0] of Rs2, and subtracts the 32-bit unsigned integer element in\n * [63:32] of Rs2 from the 32-bit unsigned integer element in [31:0] of Rs1. The element results are first\n * logically right-shifted by 1 bit and then written to [63:32] of Rd for addition and [31:0] of Rd for\n * subtraction.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `URADD32` and `URSUB32` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = (Rs1.W[1] + Rs2.W[0]) u>> 1;\n * Rd.W[0] = (Rs1.W[0] - Rs2.W[1]) u>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URCRAS32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"urcras32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.52. URCRAS32 ===== */\n\n/* ===== Inline Function Start for 4.53. URCRSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief URCRSA32 (SIMD 32-bit Unsigned Halving Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * URCRSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer element subtraction and 32-bit unsigned integer element\n * addition in a 64-bit chunk simultaneously. Operands are from crossed 32-bit elements. The results\n * are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit unsigned integer element in [31:0] of Rs2 from the\n * 32-bit unsigned integer element in [63:32] of Rs1, and adds the 32-bit unsigned element integer in\n * [31:0] of Rs1 with the 32-bit unsigned integer element in [63:32] of Rs2. The two results are first\n * logically right-shifted by 1 bit and then written to [63:32] of Rd for subtraction and [31:0] of Rd for\n * addition.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `URADD32` and `URSUB32` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = (Rs1.W[1] - Rs2.W[0]) u>> 1;\n * Rd.W[0] = (Rs1.W[0] + Rs2.W[1]) u>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URCRSA32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"urcrsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.53. URCRSA32 ===== */\n\n/* ===== Inline Function Start for 4.54. URSTAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief URSTAS32 (SIMD 32-bit Unsigned Halving Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * URSTAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer element addition and 32-bit unsigned integer element\n * subtraction in a 64-bit chunk simultaneously. Operands are from corresponding 32-bit elements.\n * The results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit unsigned integer element in [63:32] of Rs1 with the 32-\n * bit unsigned integer element in [63:32] of Rs2, and subtracts the 32-bit unsigned integer element in\n * [31:0] of Rs2 from the 32-bit unsigned integer element in [31:0] of Rs1. The element results are first\n * logically right-shifted by 1 bit and then written to [63:32] of Rd for addition and [31:0] of Rd for\n * subtraction.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `URADD32` and `URSUB32` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = (Rs1.W[1] + Rs2.W[1]) u>> 1;\n * Rd.W[0] = (Rs1.W[0] - Rs2.W[0]) u>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URSTAS32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"urstas32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.54. URSTAS32 ===== */\n\n/* ===== Inline Function Start for 4.55. URSTSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief URSTSA32 (SIMD 32-bit Unsigned Halving Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * URSTSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer element subtraction and 32-bit unsigned integer element\n * addition in a 64-bit chunk simultaneously. Operands are from corresponding 32-bit elements. The\n * results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit unsigned integer element in [63:32] of Rs2 from\n * the 32-bit unsigned integer element in [63:32] of Rs1, and adds the 32-bit unsigned element integer\n * in [31:0] of Rs1 with the 32-bit unsigned integer element in [31:0] of Rs2. The two results are first\n * logically right-shifted by 1 bit and then written to [63:32] of Rd for subtraction and [31:0] of Rd for\n * addition.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `URADD32` and `URSUB32` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = (Rs1.W[1] - Rs2.W[1]) u>> 1;\n * Rd.W[0] = (Rs1.W[0] + Rs2.W[0]) u>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URSTSA32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"urstsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.55. URSTSA32 ===== */\n\n/* ===== Inline Function Start for 4.56. URSUB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief URSUB32 (SIMD 32-bit Unsigned Halving Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * URSUB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer element subtractions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit unsigned integer elements in Rs2 from the 32-bit\n * unsigned integer elements in Rs1. The results are first logically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7FFFFFFF, Rb = 0x80000000, Rt = 0xFFFFFFFF\n * * Ra = 0x80000000, Rb = 0x7FFFFFFF, Rt = 0x00000000\n * * Ra = 0x80000000, Rb = 0x40000000, Rt = 0x20000000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = (Rs1.W[x] - Rs2.W[x]) u>> 1;\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URSUB32(unsigned long a, unsigned long b) {\n  register unsigned long result;\n  __ASM volatile(\"ursub32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for 4.56. URSUB32 ===== */\n\n#endif /* __RISCV_XLEN == 64 */\n\n#if (__RISCV_XLEN == 32) || defined(__ONLY_FOR_DOXYGEN_DOCUMENT_GENERATION__)\n/* XXXXX Nuclei Extended DSP Instructions for RV32 XXXXX */\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM      Nuclei Customized DSP Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic\n * \\brief    (RV32 only)Nuclei Customized DSP Instructions\n * \\details  This is Nuclei customized DSP instructions only for RV32\n */\n/* ===== Inline Function Start for A.1. DKHM8 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKHM8 (64-bit SIMD Signed Saturating Q7 Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKHM8 Rd, Rs1, Rs2\n * # Rd, Rs1, Rs2 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Do Q7xQ7 element multiplications simultaneously. The Q14 results are then reduced to Q7\n * numbers again.\n *\n * **Description**:\\n\n * For the `DKHM8` instruction, multiply the top 8-bit Q7 content of 16-bit chunks in Rs1\n * with the top 8-bit Q7 content of 16-bit chunks in Rs2. At the same time, multiply the bottom 8-bit Q7\n * content of 16-bit chunks in Rs1 with the bottom 8-bit Q7 content of 16-bit chunks in Rs2.\n *\n * The Q14 results are then right-shifted 7-bits and saturated into Q7 values. The Q7 results are then\n * written into Rd. When both the two Q7 inputs of a multiplication are 0x80, saturation will happen.\n * The result will be saturated to 0x7F and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * op1t = Rs1.B[x+1]; op2t = Rs2.B[x+1]; // top\n * op1b = Rs1.B[x]; op2b = Rs2.B[x]; // bottom\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   if (0x80 != aop | 0x80 != bop) {\n *     res = (aop s* bop) >> 7;\n *   } else {\n *     res= 0x7F;\n *     OV = 1;\n *   }\n * }\n * Rd.H[x/2] = concat(rest, resb);\n * for RV32, x=0,2,4,6\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\param [in]  b unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKHM8(unsigned long long a, unsigned long long b) {\n  unsigned long long result;\n  __ASM volatile(\"dkhm8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for A.1. DKHM8 ===== */\n\n/* ===== Inline Function Start for A.2. DKHM16 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKHM16 (64-bit SIMD Signed Saturating Q15 Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKHM16 Rd, Rs1, Rs2\n * # Rd, Rs1, Rs2 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Do Q15xQ15 element multiplications simultaneously. The Q30 results are then reduced to\n * Q15 numbers again.\n *\n * **Description**:\\n\n * For the `DKHM16` instruction, multiply the top 16-bit Q15 content of 32-bit chunks in\n * Rs1 with the top 16-bit Q15 content of 32-bit chunks in Rs2. At the same time, multiply the bottom\n * 16-bit Q15 content of 32-bit chunks in Rs1 with the bottom 16-bit Q15 content of 32-bit chunks in\n * Rs2.\n *\n * The Q30 results are then right-shifted 15-bits and saturated into Q15 values. The Q15 results are\n * then written into Rd. When both the two Q15 inputs of a multiplication are 0x8000, saturation will\n * happen. The result will be saturated to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * op1t = Rs1.H[x+1]; op2t = Rs2.H[x+1]; // top\n * op1b = Rs1.H[x]; op2b = Rs2.H[x]; // bottom\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   if (0x8000 != aop | 0x8000 != bop) {\n *     res = (aop s* bop) >> 15;\n *   } else {\n *     res= 0x7FFF;\n *     OV = 1;\n *   }\n * }\n * Rd.W[x/2] = concat(rest, resb);\n * for RV32: x=0, 2\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\param [in]  b unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKHM16(unsigned long long a, unsigned long long b) {\n  unsigned long long result;\n  __ASM volatile(\"dkhm16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for A.2. DKHM16 ===== */\n\n/* ===== Inline Function Start for A.3. DKABS8 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKABS8 (64-bit SIMD 8-bit Saturating Absolute)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKABS8 Rd, Rs1\n * # Rd, Rs1 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Get the absolute value of 8-bit signed integer elements simultaneously.\n *\n * **Description**:\\n\n * This instruction calculates the absolute value of 8-bit signed integer elements stored\n * in Rs1 and writes the element results to Rd. If the input number is 0x80, this instruction generates\n * 0x7f as the output and sets the OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.B[x];\n * if (src == 0x80) {\n *   src = 0x7f;\n *   OV = 1;\n * } else if (src[7] == 1)\n *   src = -src;\n * }\n * Rd.B[x] = src;\n * for RV32: x=7...0,\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKABS8(unsigned long long a) {\n  unsigned long long result;\n  __ASM volatile(\"dkabs8 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for A.3. DKABS8 ===== */\n\n/* ===== Inline Function Start for A.4. DKABS16 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKABS16 (64-bit SIMD 16-bit Saturating Absolute)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKABS16 Rd, Rs1\n * # Rd, Rs1 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Get the absolute value of 16-bit signed integer elements simultaneously.\n *\n * **Description**:\\n\n * This instruction calculates the absolute value of 16-bit signed integer elements stored\n * in Rs1 and writes the element results to Rd. If the input number is 0x8000, this instruction\n * generates 0x7fff as the output and sets the OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.H[x];\n * if (src == 0x8000) {\n *   src = 0x7fff;\n *   OV = 1;\n * } else if (src[15] == 1)\n *   src = -src;\n * }\n * Rd.H[x] = src;\n * for RV32: x=3...0,\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKABS16(unsigned long long a) {\n  unsigned long long result;\n  __ASM volatile(\"dkabs16 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for A.4. DKABS16 ===== */\n\n/* ===== Inline Function Start for A.5. DKSLRA8 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKSLRA8 (64-bit SIMD 8-bit Shift Left Logical with Saturation or Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKSLRA8 Rd, Rs1, Rs2\n * # Rd, Rs1 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical left (positive) or arithmetic right (negative) shift operation with\n * Q7 saturation for the left shift.\n *\n * **Description**:\\n\n * The 8-bit data elements of Rs1 are left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[3:0]. Rs2[3:0] is in the signed range of [-2^3, 2^3-1]. A positive Rs2[3:0] means\n * logical left shift and a negative Rs2[3:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[3:0]. However, the behavior of `Rs2[3:0]==-2^3 (0x8)` is defined to be\n * equivalent to the behavior of `Rs2[3:0]==-(2^3-1) (0x9)`.\n * The left-shifted results are saturated to the 8-bit signed integer range of [-2^7, 2^7-1].\n * If any saturation happens, this instruction sets the OV flag. The value of Rs2[31:4] will not affect\n * this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[3:0] < 0) {\n *   sa = -Rs2[3:0];\n *   sa = (sa == 8)? 7 : sa;\n *   Rd.B[x] = SE8(Rs1.B[x][7:sa]);\n * } else {\n *   sa = Rs2[2:0];\n *   res[(7+sa):0] = Rs1.B[x] <<(logic) sa;\n *   if (res > (2^7)-1) {\n *     res[7:0] = 0x7f; OV = 1;\n *   } else if (res < -2^7) {\n *     res[7:0] = 0x80; OV = 1;\n *   }\n *   Rd.B[x] = res[7:0];\n * }\n * for RV32: x=7...0,\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\param [in]  b int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKSLRA8(unsigned long long a, int b) {\n  unsigned long long result;\n  __ASM volatile(\"dkslra8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for A.5. DKSLRA8 ===== */\n\n/* ===== Inline Function Start for A.6. DKSLRA16 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKSLRA16 (64-bit SIMD 16-bit Shift Left Logical with Saturation or Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKSLRA16 Rd, Rs1, Rs2\n * # Rd, Rs1 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical left (positive) or arithmetic right (negative) shift operation with\n * Q15 saturation for the left shift.\n *\n * **Description**:\\n\n * The 16-bit data elements of Rs1 are left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[4:0]. Rs2[4:0] is in the signed range of [-2^4, 2^4-1]. A positive Rs2[4:0] means\n * logical left shift and a negative Rs2[4:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[4:0]. However, the behavior of `Rs2[4:0]==-2^4 (0x10)` is defined to be\n * equivalent to the behavior of `Rs2[4:0]==-(2^4-1) (0x11)`.\n * The left-shifted results are saturated to the 16-bit signed integer range of [-2^15, 2^15-1].\n * After the shift, saturation, or rounding, the final results are written to\n * Rd. If any saturation happens, this instruction sets the OV flag. The value of Rs2[31:5] will not affect\n * this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[4:0] < 0) {\n *   sa = -Rs2[4:0];\n *   sa = (sa == 16)? 15 : sa;\n *   Rd.H[x] = SE16(Rs1.H[x][15:sa]);\n * } else {\n *   sa = Rs2[3:0];\n *   res[(15+sa):0] = Rs1.H[x] <<(logic) sa;\n *   if (res > (2^15)-1) {\n *     res[15:0] = 0x7fff; OV = 1;\n *   } else if (res < -2^15) {\n *     res[15:0] = 0x8000; OV = 1;\n *   }\n *   d.H[x] = res[15:0];\n * }\n * for RV32: x=3...0,\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\param [in]  b int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKSLRA16(unsigned long long a, int b) {\n  unsigned long long result;\n  __ASM volatile(\"dkslra16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for A.6. DKSLRA16 ===== */\n\n/* ===== Inline Function Start for A.7. DKADD8 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKADD8 (64-bit SIMD 8-bit Signed Saturating Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKADD8 Rd, Rs1, Rs2\n * # Rd, Rs1, Rs2 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed integer element saturating additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 8-bit signed integer elements in Rs1 with the 8-bit signed\n * integer elements in Rs2. If any of the results are beyond the Q7 number range (-2^7 <= Q7 <= 2^7-1), they\n * are saturated to the range and the OV bit is set to 1. The saturated results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.B[x] + Rs2.B[x];\n * if (res[x] > 127) {\n *   res[x] = 127;\n *   OV = 1;\n * } else if (res[x] < -128) {\n *   res[x] = -128;\n *   OV = 1;\n * }\n * Rd.B[x] = res[x];\n * for RV32: x=7...0,\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\param [in]  b unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKADD8(unsigned long long a, unsigned long long b) {\n  unsigned long long result;\n  __ASM volatile(\"dkadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for A.7. DKADD8 ===== */\n\n/* ===== Inline Function Start for A.8. DKADD16 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKADD16 (64-bit SIMD 16-bit Signed Saturating Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKADD16 Rd, Rs1, Rs2\n * # Rd, Rs1, Rs2 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element saturating additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit signed integer elements in Rs1 with the 16-bit signed\n * integer elements in Rs2. If any of the results are beyond the Q15 number range (-2^15 <= Q15 <= 2^15-1),\n * they are saturated to the range and the OV bit is set to 1. The saturated results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.H[x] + Rs2.H[x];\n * if (res[x] > 32767) {\n *   res[x] = 32767;\n *   OV = 1;\n * } else if (res[x] < -32768) {\n *   res[x] = -32768;\n *   OV = 1;\n * }\n * Rd.H[x] = res[x];\n * for RV32: x=3...0,\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\param [in]  b unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKADD16(unsigned long long a, unsigned long long b) {\n  unsigned long long result;\n  __ASM volatile(\"dkadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for A.8. DKADD16 ===== */\n\n/* ===== Inline Function Start for A.10. DKSUB8 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKSUB8 (64-bit SIMD 8-bit Signed Saturating Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKSUB8 Rd, Rs1, Rs2\n * # Rd, Rs1, Rs2 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed elements saturating subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 8-bit signed integer elements in Rs2 from the 8-bit\n * signed integer elements in Rs1. If any of the results are beyond the Q7 number range (-2^7 <= Q7 <= 2^7-1),\n * they are saturated to the range and the OV bit is set to 1. The saturated results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.B[x] - Rs2.B[x];\n * if (res[x] > (2^7)-1) {\n *   res[x] = (2^7)-1;\n *   OV = 1;\n * } else if (res[x] < -2^7) {\n *   res[x] = -2^7;\n *   OV = 1;\n * }\n * Rd.B[x] = res[x];\n * for RV32: x=7...0,\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\param [in]  b unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKSUB8(unsigned long long a, unsigned long long b) {\n  unsigned long long result;\n  __ASM volatile(\"dksub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for A.9. DKSUB8 ===== */\n\n/* ===== Inline Function Start for A.10. DKSUB16 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKSUB16 (64-bit SIMD 16-bit Signed Saturating Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKSUB16 Rd, Rs1, Rs2\n * # Rd, Rs1, Rs2 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer elements saturating subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit signed integer elements in Rs2 from the 16-bit\n * signed integer elements in Rs1. If any of the results are beyond the Q15 number range (-2^15 <= Q15 <=\n * 2^15-1), they are saturated to the range and the OV bit is set to 1. The saturated results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.H[x] - Rs2.H[x];\n * if (res[x] > (2^15)-1) {\n *   res[x] = (2^15)-1;\n *   OV = 1;\n * } else if (res[x] < -2^15) {\n *   res[x] = -2^15;\n *   OV = 1;\n * }\n * Rd.H[x] = res[x];\n * for RV32: x=3...0,\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\param [in]  b unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKSUB16(unsigned long long a, unsigned long long b) {\n  unsigned long long result;\n  __ASM volatile(\"dksub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n  return result;\n}\n/* ===== Inline Function End for A.10. DKSUB16 ===== */\n\n/* ===== Inline Function Start for A.11.1. EXPD80 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief EXPD80 (Expand and Copy Byte 0 to 32bit)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * EXPD80 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Copy 8-bit data from 32-bit chunks into 4 bytes in a register.\n *\n * **Description**:\\n\n * Moves Rs1.B[0][7:0] to Rd.[0][7:0], Rd.[1][7:0], Rd.[2][7:0], Rd.[3][7:0]\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:0] = CONCAT(Rs1.B[0][7:0], Rs1.B[0][7:0], Rs1.B[0][7:0], Rs1.B[0][7:0]);\n * for RV32: x=0\n * ~~~\n *\n * \\param [in]  a unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_EXPD80(unsigned long a) {\n  unsigned long result;\n  __ASM volatile(\"expd80 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for A11.1. EXPD80 ===== */\n\n/* ===== Inline Function Start for A.11.2. EXPD81 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief EXPD81 (Expand and Copy Byte 1 to 32bit)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * EXPD81 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Copy 8-bit data from 32-bit chunks into 4 bytes in a register.\n *\n * **Description**:\\n\n * Moves Rs1.B[1][7:0] to Rd.[0][7:0], Rd.[1][7:0], Rd.[2][7:0], Rd.[3][7:0]\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:0] = CONCAT(Rs1.B[1][7:0], Rs1.B[1][7:0], Rs1.B[1][7:0], Rs1.B[1][7:0]);\n * for RV32: x=0\n * ~~~\n *\n * \\param [in]  a unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_EXPD81(unsigned long a) {\n  unsigned long result;\n  __ASM volatile(\"expd81 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for A11.2. EXPD81 ===== */\n\n/* ===== Inline Function Start for A.11.3. EXPD82 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief EXPD82 (Expand and Copy Byte 2 to 32bit)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * EXPD82 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Copy 8-bit data from 32-bit chunks into 4 bytes in a register.\n *\n * **Description**:\\n\n * Moves Rs1.B[2][7:0] to Rd.[0][7:0], Rd.[1][7:0], Rd.[2][7:0], Rd.[3][7:0]\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:0] = CONCAT(Rs1.B[2][7:0], Rs1.B[2][7:0], Rs1.B[2][7:0], Rs1.B[2][7:0]);\n * for RV32: x=0\n * ~~~\n *\n * \\param [in]  a unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_EXPD82(unsigned long a) {\n  unsigned long result;\n  __ASM volatile(\"expd82 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for A11.3. EXPD82 ===== */\n\n/* ===== Inline Function Start for A.11.4. EXPD83 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief EXPD83 (Expand and Copy Byte 3 to 32bit)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * EXPD83 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Copy 8-bit data from 32-bit chunks into 4 bytes in a register.\n *\n * **Description**:\\n\n * Moves Rs1.B[3][7:0] to Rd.[0][7:0], Rd.[1][7:0], Rd.[2][7:0], Rd.[3][7:0]\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:0] = CONCAT(Rs1.B[3][7:0], Rs1.B[3][7:0], Rs1.B[3][7:0], Rs1.B[3][7:0]);\n * for RV32: x=0\n * ~~~\n *\n * \\param [in]  a unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_EXPD83(unsigned long a) {\n  unsigned long result;\n  __ASM volatile(\"expd83 %0, %1\" : \"=r\"(result) : \"r\"(a));\n  return result;\n}\n/* ===== Inline Function End for A11.4. EXPD83 ===== */\n#endif /* __RISCV_XLEN == 32 */\n\n#if defined(__RISCV_FEATURE_DSP) && (__RISCV_FEATURE_DSP == 1)\n/* XXXXX ARM Compatiable SIMD API XXXXX */\n/** \\brief Q setting quad 8-bit saturating addition. */\n#define __QADD8(x, y) __RV_KADD8(x, y)\n/** \\brief Q setting quad 8-bit saturating subtract. */\n#define __QSUB8(x, y) __RV_KSUB8((x), (y))\n/** \\brief Q setting dual 16-bit saturating addition. */\n#define __QADD16(x, y) __RV_KADD16((x), (y))\n/** \\brief Dual 16-bit signed addition with halved results. */\n#define __SHADD16(x, y) __RV_RADD16((x), (y))\n/** \\brief Q setting dual 16-bit saturating subtract. */\n#define __QSUB16(x, y) __RV_KSUB16((x), (y))\n/** \\brief Dual 16-bit signed subtraction with halved results. */\n#define __SHSUB16(x, y) __RV_RSUB16((x), (y))\n/** \\brief Q setting dual 16-bit add and subtract with exchange. */\n#define __QASX(x, y) __RV_KCRAS16((x), (y))\n/** \\brief Dual 16-bit signed addition and subtraction with halved results.*/\n#define __SHASX(x, y) __RV_RCRAS16((x), (y))\n/** \\brief Q setting dual 16-bit subtract and add with exchange. */\n#define __QSAX(x, y) __RV_KCRSA16((x), (y))\n/** \\brief Dual 16-bit signed subtraction and addition with halved results.*/\n#define __SHSAX(x, y) __RV_RCRSA16((x), (y))\n/** \\brief Dual 16-bit signed multiply with exchange returning difference. */\n#define __SMUSDX(x, y) __RV_SMXDS((y), (x))\n/** \\brief Q setting sum of dual 16-bit signed multiply with exchange. */\n__STATIC_FORCEINLINE int32_t __SMUADX(int32_t op1, int32_t op2) { return (int32_t)__RV_KMXDA(op1, op2); }\n/** \\brief Q setting saturating add. */\n#define __QADD(x, y) __RV_KADDW((x), (y))\n/** \\brief Q setting saturating subtract. */\n#define __QSUB(x, y) __RV_KSUBW((x), (y))\n/** \\brief Q setting dual 16-bit signed multiply with single 32-bit accumulator. */\n__STATIC_FORCEINLINE int32_t __SMLAD(int32_t op1, int32_t op2, int32_t op3) { return (int32_t)__RV_KMADA(op3, op1, op2); }\n/** \\brief Q setting pre-exchanged dual 16-bit signed multiply with single 32-bit accumulator.  */\n__STATIC_FORCEINLINE int32_t __SMLADX(int32_t op1, int32_t op2, int32_t op3) { return (int32_t)__RV_KMAXDA(op3, op1, op2); }\n/** \\brief Q setting dual 16-bit signed multiply with exchange subtract with 32-bit accumulate.  */\n__STATIC_FORCEINLINE int32_t __SMLSDX(int32_t op1, int32_t op2, int32_t op3) { return (op3 - (int32_t)__RV_SMXDS(op1, op2)); }\n/** \\brief Dual 16-bit signed multiply with single 64-bit accumulator. */\n__STATIC_FORCEINLINE int64_t __SMLALD(int32_t op1, int32_t op2, int64_t acc) { return (int64_t)__RV_SMALDA(acc, op1, op2); }\n/** \\brief Dual 16-bit signed multiply with exchange with single 64-bit accumulator.  */\n__STATIC_FORCEINLINE int64_t __SMLALDX(int32_t op1, int32_t op2, int64_t acc) { return (int64_t)__RV_SMALXDA(acc, op1, op2); }\n/** \\brief Q setting sum of dual 16-bit signed multiply. */\n__STATIC_FORCEINLINE int32_t __SMUAD(int32_t op1, int32_t op2) { return (int32_t)__RV_KMDA(op1, op2); }\n/** \\brief Dual 16-bit signed multiply returning difference. */\n__STATIC_FORCEINLINE int32_t __SMUSD(int32_t op1, int32_t op2) { return (int32_t)__RV_SMDRS(op1, op2); }\n/** \\brief Dual extract 8-bits and sign extend each to 16-bits. */\n#define __SXTB16(x) __RV_SUNPKD820(x)\n/** \\brief Dual extracted 8-bit to 16-bit signed addition. TODO Need test */\n__STATIC_FORCEINLINE int32_t __SXTAB16(uint32_t op1, uint32_t op2) { return __RV_ADD16(op1, __RV_SUNPKD830(op2)); }\n/** \\brief 32-bit signed multiply with 32-bit truncated accumulator. */\n__STATIC_FORCEINLINE int32_t __SMMLA(int32_t op1, int32_t op2, int32_t op3) {\n  int32_t mul;\n  mul = (int32_t)__RV_SMMUL(op1, op2);\n  return (op3 + mul);\n}\n#define __DKHM8    __RV_DKHM8\n#define __DKHM16   __RV_DKHM16\n#define __DKSUB16  __RV_DKSUB16\n#define __SMAQA    __RV_SMAQA\n#define __MULSR64  __RV_MULSR64\n#define __DQADD8   __RV_DKADD8\n#define __DQSUB8   __RV_DKSUB8\n#define __DKADD16  __RV_DKADD16\n#define __PKBB16   __RV_PKBB16\n#define __DKSLRA16 __RV_DKSLRA16\n#define __DKSLRA8  __RV_DKSLRA8\n#define __KABSW    __RV_KABSW\n#define __DKABS8   __RV_DKABS8\n#define __DKABS16  __RV_DKABS16\n#define __SMALDA   __RV_SMALDA\n#define __SMSLDA   __RV_SMSLDA\n#define __SMALBB   __RV_SMALBB\n#define __SUB64    __RV_SUB64\n#define __ADD64    __RV_ADD64\n#define __SMBB16   __RV_SMBB16\n#define __SMBT16   __RV_SMBT16\n#define __SMTT16   __RV_SMTT16\n#define __EXPD80   __RV_EXPD80\n#define __SMAX8    __RV_SMAX8\n#define __SMAX16   __RV_SMAX16\n#define __PKTT16   __RV_PKTT16\n#define __KADD16   __RV_KADD16\n#define __SADD16   __RV_ADD16\n\n#endif /* (__RISCV_FEATURE_DSP == 1) */\n\n#endif /* defined(__DSP_PRESENT) && (__DSP_PRESENT == 1) */\n\n/** \\brief Halfword packing instruction. Combines bits[15:0] of val1 with bits[31:16] of val2 levitated with the val3. */\n#define __PKHBT(ARG1, ARG2, ARG3) (((((uint32_t)(ARG1))) & 0x0000FFFFUL) | ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL))\n/** \\brief Halfword packing instruction. Combines bits[31:16] of val1 with bits[15:0] of val2 right-shifted with the val3. */\n#define __PKHTB(ARG1, ARG2, ARG3) (((((uint32_t)(ARG1))) & 0xFFFF0000UL) | ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL))\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __CORE_FEATURE_DSP__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/NMSIS/Core/Include/core_feature_eclic.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __CORE_FEATURE_ECLIC__\n#define __CORE_FEATURE_ECLIC__\n/*!\n * @file     core_feature_eclic.h\n * @brief    ECLIC feature API header file for Nuclei N/NX Core\n */\n/*\n * ECLIC Feature Configuration Macro:\n * 1. __ECLIC_PRESENT:  Define whether Enhanced Core Local Interrupt Controller (ECLIC) Unit is present or not\n *   * 0: Not present\n *   * 1: Present\n * 2. __ECLIC_BASEADDR:  Base address of the ECLIC unit.\n * 3. ECLIC_GetInfoCtlbits():  Define the number of hardware bits are actually implemented in the clicintctl registers.\n *   Valid number is 1 - 8.\n * 4. __ECLIC_INTNUM  : Define the external interrupt number of ECLIC Unit\n *\n */\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if defined(__ECLIC_PRESENT) && (__ECLIC_PRESENT == 1)\n/**\n * \\defgroup NMSIS_Core_ECLIC_Registers     Register Define and Type Definitions Of ECLIC\n * \\ingroup NMSIS_Core_Registers\n * \\brief   Type definitions and defines for eclic registers.\n *\n * @{\n */\n\n/**\n * \\brief  Union type to access CLICFG configure register.\n */\ntypedef union {\n  struct {\n    uint8_t _reserved0 : 1; /*!< bit:     0   Overflow condition code flag */\n    uint8_t nlbits : 4;     /*!< bit:     29  Carry condition code flag */\n    uint8_t _reserved1 : 2; /*!< bit:     30  Zero condition code flag */\n    uint8_t _reserved2 : 1; /*!< bit:     31  Negative condition code flag */\n  } b;                      /*!< Structure used for bit  access */\n  uint8_t w;                /*!< Type      used for byte access */\n} CLICCFG_Type;\n\n/**\n * \\brief  Union type to access CLICINFO information register.\n */\ntypedef union {\n  struct {\n    uint32_t numint : 13;    /*!< bit:  0..12   number of maximum interrupt inputs supported */\n    uint32_t version : 8;    /*!< bit:  13..20  20:17 for architecture version,16:13 for implementation version */\n    uint32_t intctlbits : 4; /*!< bit:  21..24  specifies how many hardware bits are actually implemented in the clicintctl registers */\n    uint32_t _reserved0 : 8; /*!< bit:  25..31  Reserved */\n  } b;                       /*!< Structure used for bit  access */\n  uint32_t w;                /*!< Type      used for word access */\n} CLICINFO_Type;\n\n/**\n * \\brief Access to the structure of a vector interrupt controller.\n */\ntypedef struct {\n  __IOM uint8_t INTIP;   /*!< Offset: 0x000 (R/W)  Interrupt set pending register */\n  __IOM uint8_t INTIE;   /*!< Offset: 0x001 (R/W)  Interrupt set enable register */\n  __IOM uint8_t INTATTR; /*!< Offset: 0x002 (R/W)  Interrupt set attributes register */\n  __IOM uint8_t INTCTRL; /*!< Offset: 0x003 (R/W)  Interrupt configure register */\n} CLIC_CTRL_Type;\n\ntypedef struct {\n  __IOM uint8_t  CFG; /*!< Offset: 0x000 (R/W)  CLIC configuration register */\n  uint8_t        RESERVED0[3];\n  __IM uint32_t  INFO; /*!< Offset: 0x004 (R/ )  CLIC information register */\n  uint8_t        RESERVED1[3];\n  __IOM uint8_t  MTH; /*!< Offset: 0x00B (R/W)  CLIC machine mode threshold register */\n  uint32_t       RESERVED2[0x3FD];\n  CLIC_CTRL_Type CTRL[4096]; /*!< Offset: 0x1000 (R/W) CLIC register structure for INTIP, INTIE, INTATTR, INTCTL */\n} CLIC_Type;\n\n#define CLIC_CLICCFG_NLBIT_Pos 1U                                /*!< CLIC CLICCFG: NLBIT Position */\n#define CLIC_CLICCFG_NLBIT_Msk (0xFUL << CLIC_CLICCFG_NLBIT_Pos) /*!< CLIC CLICCFG: NLBIT Mask */\n\n#define CLIC_CLICINFO_CTLBIT_Pos 21U                                 /*!< CLIC INTINFO: __ECLIC_GetInfoCtlbits() Position */\n#define CLIC_CLICINFO_CTLBIT_Msk (0xFUL << CLIC_CLICINFO_CTLBIT_Pos) /*!< CLIC INTINFO: __ECLIC_GetInfoCtlbits() Mask */\n\n#define CLIC_CLICINFO_VER_Pos 13U                                /*!< CLIC CLICINFO: VERSION Position */\n#define CLIC_CLICINFO_VER_Msk (0xFFUL << CLIC_CLICCFG_NLBIT_Pos) /*!< CLIC CLICINFO: VERSION Mask */\n\n#define CLIC_CLICINFO_NUM_Pos 0U                                 /*!< CLIC CLICINFO: NUM Position */\n#define CLIC_CLICINFO_NUM_Msk (0xFFFUL << CLIC_CLICINFO_NUM_Pos) /*!< CLIC CLICINFO: NUM Mask */\n\n#define CLIC_INTIP_IP_Pos 0U                           /*!< CLIC INTIP: IP Position */\n#define CLIC_INTIP_IP_Msk (0x1UL << CLIC_INTIP_IP_Pos) /*!< CLIC INTIP: IP Mask */\n\n#define CLIC_INTIE_IE_Pos 0U                           /*!< CLIC INTIE: IE Position */\n#define CLIC_INTIE_IE_Msk (0x1UL << CLIC_INTIE_IE_Pos) /*!< CLIC INTIE: IE Mask */\n\n#define CLIC_INTATTR_TRIG_Pos 1U                               /*!< CLIC INTATTR: TRIG Position */\n#define CLIC_INTATTR_TRIG_Msk (0x3UL << CLIC_INTATTR_TRIG_Pos) /*!< CLIC INTATTR: TRIG Mask */\n\n#define CLIC_INTATTR_SHV_Pos 0U                              /*!< CLIC INTATTR: SHV Position */\n#define CLIC_INTATTR_SHV_Msk (0x1UL << CLIC_INTATTR_SHV_Pos) /*!< CLIC INTATTR: SHV Mask */\n\n#define ECLIC_MAX_NLBITS     8U /*!< Max nlbit of the CLICINTCTLBITS */\n#define ECLIC_MODE_MTVEC_Msk 3U /*!< ECLIC Mode mask for MTVT CSR Register */\n\n#define ECLIC_NON_VECTOR_INTERRUPT 0x0 /*!< Non-Vector Interrupt Mode of ECLIC */\n#define ECLIC_VECTOR_INTERRUPT     0x1 /*!< Vector Interrupt Mode of ECLIC */\n\n/**\\brief ECLIC Trigger Enum for different Trigger Type */\ntypedef enum ECLIC_TRIGGER {\n  ECLIC_LEVEL_TRIGGER        = 0x0, /*!< Level Triggerred, trig[0] = 0 */\n  ECLIC_POSTIVE_EDGE_TRIGGER = 0x1, /*!< Postive/Rising Edge Triggered, trig[1] = 1, trig[0] = 0 */\n  ECLIC_NEGTIVE_EDGE_TRIGGER = 0x3, /*!< Negtive/Falling Edge Triggered, trig[1] = 1, trig[0] = 0 */\n  ECLIC_MAX_TRIGGER          = 0x3  /*!< MAX Supported Trigger Mode */\n} ECLIC_TRIGGER_Type;\n\n#ifndef __ECLIC_BASEADDR\n/* Base address of ECLIC(__ECLIC_BASEADDR) should be defined in <Device.h> */\n#error \"__ECLIC_BASEADDR is not defined, please check!\"\n#endif\n\n#ifndef __ECLIC_INTCTLBITS\n/* Define __ECLIC_INTCTLBITS to get via ECLIC->INFO if not defined */\n#define __ECLIC_INTCTLBITS (__ECLIC_GetInfoCtlbits())\n#endif\n\n/* ECLIC Memory mapping of Device */\n#define ECLIC_BASE __ECLIC_BASEADDR          /*!< ECLIC Base Address */\n#define ECLIC      ((CLIC_Type *)ECLIC_BASE) /*!< CLIC configuration struct */\n\n/** @} */ /* end of group NMSIS_Core_ECLIC_Registers */\n\n/* ##########################   ECLIC functions  #################################### */\n/**\n * \\defgroup   NMSIS_Core_IntExc        Interrupts and Exceptions\n * \\brief Functions that manage interrupts and exceptions via the ECLIC.\n *\n * @{\n */\n\n/**\n * \\brief  Definition of IRQn numbers\n * \\details\n * The core interrupt enumeration names for IRQn values are defined in the file <b><Device>.h</b>.\n * - Interrupt ID(IRQn) from 0 to 18 are reserved for core internal interrupts.\n * - Interrupt ID(IRQn) start from 19 represent device-specific external interrupts.\n * - The first device-specific interrupt has the IRQn value 19.\n *\n * The table below describes the core interrupt names and their availability in various Nuclei Cores.\n */\n/* The following enum IRQn definition in this file\n * is only used for doxygen documentation generation,\n * The <Device>.h is the real file to define it by vendor\n */\n#if defined(__ONLY_FOR_DOXYGEN_DOCUMENT_GENERATION__)\ntypedef enum IRQn {\n  /* ========= Nuclei N/NX Core Specific Interrupt Numbers  =========== */\n  /* Core Internal Interrupt IRQn definitions */\n  Reserved0_IRQn  = 0,  /*!<  Internal reserved */\n  Reserved1_IRQn  = 1,  /*!<  Internal reserved */\n  Reserved2_IRQn  = 2,  /*!<  Internal reserved */\n  SysTimerSW_IRQn = 3,  /*!<  System Timer SW interrupt */\n  Reserved3_IRQn  = 4,  /*!<  Internal reserved */\n  Reserved4_IRQn  = 5,  /*!<  Internal reserved */\n  Reserved5_IRQn  = 6,  /*!<  Internal reserved */\n  SysTimer_IRQn   = 7,  /*!<  System Timer Interrupt */\n  Reserved6_IRQn  = 8,  /*!<  Internal reserved */\n  Reserved7_IRQn  = 9,  /*!<  Internal reserved */\n  Reserved8_IRQn  = 10, /*!<  Internal reserved */\n  Reserved9_IRQn  = 11, /*!<  Internal reserved */\n  Reserved10_IRQn = 12, /*!<  Internal reserved */\n  Reserved11_IRQn = 13, /*!<  Internal reserved */\n  Reserved12_IRQn = 14, /*!<  Internal reserved */\n  Reserved13_IRQn = 15, /*!<  Internal reserved */\n  Reserved14_IRQn = 16, /*!<  Internal reserved */\n  Reserved15_IRQn = 17, /*!<  Internal reserved */\n  Reserved16_IRQn = 18, /*!<  Internal reserved */\n\n  /* ========= Device Specific Interrupt Numbers  =================== */\n  /* ToDo: add here your device specific external interrupt numbers.\n   * 19~max(NUM_INTERRUPT, 1023) is reserved number for user.\n   * Maxmum interrupt supported could get from clicinfo.NUM_INTERRUPT.\n   * According the interrupt handlers defined in startup_Device.S\n   * eg.: Interrupt for Timer#1       eclic_tim1_handler   ->   TIM1_IRQn */\n  FirstDeviceSpecificInterrupt_IRQn = 19, /*!< First Device Specific Interrupt */\n  SOC_INT_MAX,                            /*!< Number of total interrupts */\n} IRQn_Type;\n#endif /* __ONLY_FOR_DOXYGEN_DOCUMENT_GENERATION__ */\n\n#ifdef NMSIS_ECLIC_VIRTUAL\n#ifndef NMSIS_ECLIC_VIRTUAL_HEADER_FILE\n#define NMSIS_ECLIC_VIRTUAL_HEADER_FILE \"nmsis_eclic_virtual.h\"\n#endif\n#include NMSIS_ECLIC_VIRTUAL_HEADER_FILE\n#else\n#define ECLIC_SetCfgNlbits    __ECLIC_SetCfgNlbits\n#define ECLIC_GetCfgNlbits    __ECLIC_GetCfgNlbits\n#define ECLIC_GetInfoVer      __ECLIC_GetInfoVer\n#define ECLIC_GetInfoCtlbits  __ECLIC_GetInfoCtlbits\n#define ECLIC_GetInfoNum      __ECLIC_GetInfoNum\n#define ECLIC_SetMth          __ECLIC_SetMth\n#define ECLIC_GetMth          __ECLIC_GetMth\n#define ECLIC_EnableIRQ       __ECLIC_EnableIRQ\n#define ECLIC_GetEnableIRQ    __ECLIC_GetEnableIRQ\n#define ECLIC_DisableIRQ      __ECLIC_DisableIRQ\n#define ECLIC_SetPendingIRQ   __ECLIC_SetPendingIRQ\n#define ECLIC_GetPendingIRQ   __ECLIC_GetPendingIRQ\n#define ECLIC_ClearPendingIRQ __ECLIC_ClearPendingIRQ\n#define ECLIC_SetTrigIRQ      __ECLIC_SetTrigIRQ\n#define ECLIC_GetTrigIRQ      __ECLIC_GetTrigIRQ\n#define ECLIC_SetShvIRQ       __ECLIC_SetShvIRQ\n#define ECLIC_GetShvIRQ       __ECLIC_GetShvIRQ\n#define ECLIC_SetCtrlIRQ      __ECLIC_SetCtrlIRQ\n#define ECLIC_GetCtrlIRQ      __ECLIC_GetCtrlIRQ\n#define ECLIC_SetLevelIRQ     __ECLIC_SetLevelIRQ\n#define ECLIC_GetLevelIRQ     __ECLIC_GetLevelIRQ\n#define ECLIC_SetPriorityIRQ  __ECLIC_SetPriorityIRQ\n#define ECLIC_GetPriorityIRQ  __ECLIC_GetPriorityIRQ\n\n#endif /* NMSIS_ECLIC_VIRTUAL */\n\n#ifdef NMSIS_VECTAB_VIRTUAL\n#ifndef NMSIS_VECTAB_VIRTUAL_HEADER_FILE\n#define NMSIS_VECTAB_VIRTUAL_HEADER_FILE \"nmsis_vectab_virtual.h\"\n#endif\n#include NMSIS_VECTAB_VIRTUAL_HEADER_FILE\n#else\n#define ECLIC_SetVector __ECLIC_SetVector\n#define ECLIC_GetVector __ECLIC_GetVector\n#endif /* (NMSIS_VECTAB_VIRTUAL) */\n\n/**\n * \\brief  Set nlbits value\n * \\details\n * This function set the nlbits value of CLICCFG register.\n * \\param [in]    nlbits    nlbits value\n * \\remarks\n * - nlbits is used to set the width of level in the CLICINTCTL[i].\n * \\sa\n * - \\ref ECLIC_GetCfgNlbits\n */\n__STATIC_FORCEINLINE void __ECLIC_SetCfgNlbits(uint32_t nlbits) {\n  ECLIC->CFG &= ~CLIC_CLICCFG_NLBIT_Msk;\n  ECLIC->CFG |= (uint8_t)((nlbits << CLIC_CLICCFG_NLBIT_Pos) & CLIC_CLICCFG_NLBIT_Msk);\n}\n\n/**\n * \\brief  Get nlbits value\n * \\details\n * This function get the nlbits value of CLICCFG register.\n * \\return   nlbits value of CLICCFG register\n * \\remarks\n * - nlbits is used to set the width of level in the CLICINTCTL[i].\n * \\sa\n * - \\ref ECLIC_SetCfgNlbits\n */\n__STATIC_FORCEINLINE uint32_t __ECLIC_GetCfgNlbits(void) { return ((uint32_t)((ECLIC->CFG & CLIC_CLICCFG_NLBIT_Msk) >> CLIC_CLICCFG_NLBIT_Pos)); }\n\n/**\n * \\brief  Get the ECLIC version number\n * \\details\n * This function gets the hardware version information from CLICINFO register.\n * \\return   hardware version number in CLICINFO register.\n * \\remarks\n * - This function gets harware version information from CLICINFO register.\n * - Bit 20:17 for architecture version, bit 16:13 for implementation version.\n * \\sa\n * - \\ref ECLIC_GetInfoNum\n */\n__STATIC_FORCEINLINE uint32_t __ECLIC_GetInfoVer(void) { return ((uint32_t)((ECLIC->INFO & CLIC_CLICINFO_VER_Msk) >> CLIC_CLICINFO_VER_Pos)); }\n\n/**\n * \\brief  Get CLICINTCTLBITS\n * \\details\n * This function gets CLICINTCTLBITS from CLICINFO register.\n * \\return  CLICINTCTLBITS from CLICINFO register.\n * \\remarks\n * - In the CLICINTCTL[i] registers, with 2 <= CLICINTCTLBITS <= 8.\n * - The implemented bits are kept left-justified in the most-significant bits of each 8-bit\n *   CLICINTCTL[I] register, with the lower unimplemented bits treated as hardwired to 1.\n * \\sa\n * - \\ref ECLIC_GetInfoNum\n */\n__STATIC_FORCEINLINE uint32_t __ECLIC_GetInfoCtlbits(void) { return ((uint32_t)((ECLIC->INFO & CLIC_CLICINFO_CTLBIT_Msk) >> CLIC_CLICINFO_CTLBIT_Pos)); }\n\n/**\n * \\brief  Get number of maximum interrupt inputs supported\n * \\details\n * This function gets number of maximum interrupt inputs supported from CLICINFO register.\n * \\return  number of maximum interrupt inputs supported from CLICINFO register.\n * \\remarks\n * - This function gets number of maximum interrupt inputs supported from CLICINFO register.\n * - The num_interrupt field specifies the actual number of maximum interrupt inputs supported in this implementation.\n * \\sa\n * - \\ref ECLIC_GetInfoCtlbits\n */\n__STATIC_FORCEINLINE uint32_t __ECLIC_GetInfoNum(void) { return ((uint32_t)((ECLIC->INFO & CLIC_CLICINFO_NUM_Msk) >> CLIC_CLICINFO_NUM_Pos)); }\n\n/**\n * \\brief  Set Machine Mode Interrupt Level Threshold\n * \\details\n * This function sets machine mode interrupt level threshold.\n * \\param [in]  mth       Interrupt Level Threshold.\n * \\sa\n * - \\ref ECLIC_GetMth\n */\n__STATIC_FORCEINLINE void __ECLIC_SetMth(uint8_t mth) { ECLIC->MTH = mth; }\n\n/**\n * \\brief  Get Machine Mode Interrupt Level Threshold\n * \\details\n * This function gets machine mode interrupt level threshold.\n * \\return       Interrupt Level Threshold.\n * \\sa\n * - \\ref ECLIC_SetMth\n */\n__STATIC_FORCEINLINE uint8_t __ECLIC_GetMth(void) { return (ECLIC->MTH); }\n\n/**\n * \\brief  Enable a specific interrupt\n * \\details\n * This function enables the specific interrupt \\em IRQn.\n * \\param [in]  IRQn  Interrupt number\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_DisableIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_EnableIRQ(IRQn_Type IRQn) { ECLIC->CTRL[IRQn].INTIE |= CLIC_INTIE_IE_Msk; }\n\n/**\n * \\brief  Get a specific interrupt enable status\n * \\details\n * This function returns the interrupt enable status for the specific interrupt \\em IRQn.\n * \\param [in]  IRQn  Interrupt number\n * \\returns\n * - 0  Interrupt is not enabled\n * - 1  Interrupt is pending\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_EnableIRQ\n * - \\ref ECLIC_DisableIRQ\n */\n__STATIC_FORCEINLINE uint32_t __ECLIC_GetEnableIRQ(IRQn_Type IRQn) { return ((uint32_t)(ECLIC->CTRL[IRQn].INTIE) & CLIC_INTIE_IE_Msk); }\n\n/**\n * \\brief  Disable a specific interrupt\n * \\details\n * This function disables the specific interrupt \\em IRQn.\n * \\param [in]  IRQn  Number of the external interrupt to disable\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_EnableIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_DisableIRQ(IRQn_Type IRQn) { ECLIC->CTRL[IRQn].INTIE &= ~CLIC_INTIE_IE_Msk; }\n\n/**\n * \\brief  Get the pending specific interrupt\n * \\details\n * This function returns the pending status of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\returns\n * - 0  Interrupt is not pending\n * - 1  Interrupt is pending\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_SetPendingIRQ\n * - \\ref ECLIC_ClearPendingIRQ\n */\n__STATIC_FORCEINLINE int32_t __ECLIC_GetPendingIRQ(IRQn_Type IRQn) { return ((uint32_t)(ECLIC->CTRL[IRQn].INTIP) & CLIC_INTIP_IP_Msk); }\n\n/**\n * \\brief  Set a specific interrupt to pending\n * \\details\n * This function sets the pending bit for the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_GetPendingIRQ\n * - \\ref ECLIC_ClearPendingIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_SetPendingIRQ(IRQn_Type IRQn) { ECLIC->CTRL[IRQn].INTIP |= CLIC_INTIP_IP_Msk; }\n\n/**\n * \\brief  Clear a specific interrupt from pending\n * \\details\n * This function removes the pending state of the specific interrupt \\em IRQn.\n * \\em IRQn cannot be a negative number.\n * \\param [in]      IRQn  Interrupt number\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_SetPendingIRQ\n * - \\ref ECLIC_GetPendingIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_ClearPendingIRQ(IRQn_Type IRQn) { ECLIC->CTRL[IRQn].INTIP &= ~CLIC_INTIP_IP_Msk; }\n\n/**\n * \\brief  Set trigger mode and polarity for a specific interrupt\n * \\details\n * This function set trigger mode and polarity of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\param [in]      trig\n *                   - 00  level trigger, \\ref ECLIC_LEVEL_TRIGGER\n *                   - 01  positive edge trigger, \\ref ECLIC_POSTIVE_EDGE_TRIGGER\n *                   - 02  level trigger, \\ref ECLIC_LEVEL_TRIGGER\n *                   - 03  negative edge trigger, \\ref ECLIC_NEGTIVE_EDGE_TRIGGER\n * \\remarks\n * - IRQn must not be negative.\n *\n * \\sa\n * - \\ref ECLIC_GetTrigIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_SetTrigIRQ(IRQn_Type IRQn, uint32_t trig) {\n  ECLIC->CTRL[IRQn].INTATTR &= ~CLIC_INTATTR_TRIG_Msk;\n  ECLIC->CTRL[IRQn].INTATTR |= (uint8_t)(trig << CLIC_INTATTR_TRIG_Pos);\n}\n\n/**\n * \\brief  Get trigger mode and polarity for a specific interrupt\n * \\details\n * This function get trigger mode and polarity of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\return\n *                 - 00  level trigger, \\ref ECLIC_LEVEL_TRIGGER\n *                 - 01  positive edge trigger, \\ref ECLIC_POSTIVE_EDGE_TRIGGER\n *                 - 02  level trigger, \\ref ECLIC_LEVEL_TRIGGER\n *                 - 03  negative edge trigger, \\ref ECLIC_NEGTIVE_EDGE_TRIGGER\n * \\remarks\n *     - IRQn must not be negative.\n * \\sa\n *     - \\ref ECLIC_SetTrigIRQ\n */\n__STATIC_FORCEINLINE uint32_t __ECLIC_GetTrigIRQ(IRQn_Type IRQn) { return ((int32_t)(((ECLIC->CTRL[IRQn].INTATTR) & CLIC_INTATTR_TRIG_Msk) >> CLIC_INTATTR_TRIG_Pos)); }\n\n/**\n * \\brief  Set interrupt working mode for a specific interrupt\n * \\details\n * This function set selective hardware vector or non-vector working mode of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\param [in]      shv\n *                        - 0  non-vector mode, \\ref ECLIC_NON_VECTOR_INTERRUPT\n *                        - 1  vector mode, \\ref ECLIC_VECTOR_INTERRUPT\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_GetShvIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_SetShvIRQ(IRQn_Type IRQn, uint32_t shv) {\n  ECLIC->CTRL[IRQn].INTATTR &= ~CLIC_INTATTR_SHV_Msk;\n  ECLIC->CTRL[IRQn].INTATTR |= (uint8_t)(shv << CLIC_INTATTR_SHV_Pos);\n}\n\n/**\n * \\brief  Get interrupt working mode for a specific interrupt\n * \\details\n * This function get selective hardware vector or non-vector working mode of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\return       shv\n *                        - 0  non-vector mode, \\ref ECLIC_NON_VECTOR_INTERRUPT\n *                        - 1  vector mode, \\ref ECLIC_VECTOR_INTERRUPT\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_SetShvIRQ\n */\n__STATIC_FORCEINLINE uint32_t __ECLIC_GetShvIRQ(IRQn_Type IRQn) { return ((int32_t)(((ECLIC->CTRL[IRQn].INTATTR) & CLIC_INTATTR_SHV_Msk) >> CLIC_INTATTR_SHV_Pos)); }\n\n/**\n * \\brief  Modify ECLIC Interrupt Input Control Register for a specific interrupt\n * \\details\n * This function modify ECLIC Interrupt Input Control(CLICINTCTL[i]) register of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\param [in]      intctrl  Set value for CLICINTCTL[i] register\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_GetCtrlIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_SetCtrlIRQ(IRQn_Type IRQn, uint8_t intctrl) { ECLIC->CTRL[IRQn].INTCTRL = intctrl; }\n\n/**\n * \\brief  Get ECLIC Interrupt Input Control Register value for a specific interrupt\n * \\details\n * This function modify ECLIC Interrupt Input Control register of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\return       value of ECLIC Interrupt Input Control register\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_SetCtrlIRQ\n */\n__STATIC_FORCEINLINE uint8_t __ECLIC_GetCtrlIRQ(IRQn_Type IRQn) { return (ECLIC->CTRL[IRQn].INTCTRL); }\n\n/**\n * \\brief  Set ECLIC Interrupt level of a specific interrupt\n * \\details\n * This function set interrupt level of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\param [in]      lvl_abs   Interrupt level\n * \\remarks\n * - IRQn must not be negative.\n * - If lvl_abs to be set is larger than the max level allowed, it will be force to be max level.\n * - When you set level value you need use clciinfo.nlbits to get the width of level.\n *   Then we could know the maximum of level. CLICINTCTLBITS is how many total bits are\n *   present in the CLICINTCTL register.\n * \\sa\n * - \\ref ECLIC_GetLevelIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_SetLevelIRQ(IRQn_Type IRQn, uint8_t lvl_abs) {\n  uint8_t nlbits     = __ECLIC_GetCfgNlbits();\n  uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;\n\n  if (nlbits == 0) {\n    return;\n  }\n\n  if (nlbits > intctlbits) {\n    nlbits = intctlbits;\n  }\n  uint8_t maxlvl = ((1 << nlbits) - 1);\n  if (lvl_abs > maxlvl) {\n    lvl_abs = maxlvl;\n  }\n  uint8_t lvl      = lvl_abs << (ECLIC_MAX_NLBITS - nlbits);\n  uint8_t cur_ctrl = __ECLIC_GetCtrlIRQ(IRQn);\n  cur_ctrl         = cur_ctrl << nlbits;\n  cur_ctrl         = cur_ctrl >> nlbits;\n  __ECLIC_SetCtrlIRQ(IRQn, (cur_ctrl | lvl));\n}\n\n/**\n * \\brief  Get ECLIC Interrupt level of a specific interrupt\n * \\details\n * This function get interrupt level of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\return         Interrupt level\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_SetLevelIRQ\n */\n__STATIC_FORCEINLINE uint8_t __ECLIC_GetLevelIRQ(IRQn_Type IRQn) {\n  uint8_t nlbits     = __ECLIC_GetCfgNlbits();\n  uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;\n\n  if (nlbits == 0) {\n    return 0;\n  }\n\n  if (nlbits > intctlbits) {\n    nlbits = intctlbits;\n  }\n  uint8_t intctrl = __ECLIC_GetCtrlIRQ(IRQn);\n  uint8_t lvl_abs = intctrl >> (ECLIC_MAX_NLBITS - nlbits);\n  return lvl_abs;\n}\n\n/**\n * \\brief  Get ECLIC Interrupt priority of a specific interrupt\n * \\details\n * This function get interrupt priority of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\param [in]      pri   Interrupt priority\n * \\remarks\n * - IRQn must not be negative.\n * - If pri to be set is larger than the max priority allowed, it will be force to be max priority.\n * - Priority width is CLICINTCTLBITS minus clciinfo.nlbits if clciinfo.nlbits\n *   is less than CLICINTCTLBITS. Otherwise priority width is 0.\n * \\sa\n * - \\ref ECLIC_GetPriorityIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_SetPriorityIRQ(IRQn_Type IRQn, uint8_t pri) {\n  uint8_t nlbits     = __ECLIC_GetCfgNlbits();\n  uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;\n  if (nlbits < intctlbits) {\n    uint8_t maxpri = ((1 << (intctlbits - nlbits)) - 1);\n    if (pri > maxpri) {\n      pri = maxpri;\n    }\n    pri              = pri << (ECLIC_MAX_NLBITS - intctlbits);\n    uint8_t mask     = ((uint8_t)(-1)) >> intctlbits;\n    pri              = pri | mask;\n    uint8_t cur_ctrl = __ECLIC_GetCtrlIRQ(IRQn);\n    cur_ctrl         = cur_ctrl >> (ECLIC_MAX_NLBITS - nlbits);\n    cur_ctrl         = cur_ctrl << (ECLIC_MAX_NLBITS - nlbits);\n    __ECLIC_SetCtrlIRQ(IRQn, (cur_ctrl | pri));\n  }\n}\n\n/**\n * \\brief  Get ECLIC Interrupt priority of a specific interrupt\n * \\details\n * This function get interrupt priority of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\return   Interrupt priority\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_SetPriorityIRQ\n */\n__STATIC_FORCEINLINE uint8_t __ECLIC_GetPriorityIRQ(IRQn_Type IRQn) {\n  uint8_t nlbits     = __ECLIC_GetCfgNlbits();\n  uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;\n  if (nlbits < intctlbits) {\n    uint8_t cur_ctrl = __ECLIC_GetCtrlIRQ(IRQn);\n    uint8_t pri      = cur_ctrl << nlbits;\n    pri              = pri >> nlbits;\n    pri              = pri >> (ECLIC_MAX_NLBITS - intctlbits);\n    return pri;\n  } else {\n    return 0;\n  }\n}\n\n/**\n * \\brief  Set Interrupt Vector of a specific interrupt\n * \\details\n * This function set interrupt handler address of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\param [in]      vector   Interrupt handler address\n * \\remarks\n * - IRQn must not be negative.\n * - You can set the \\ref CSR_CSR_MTVT to set interrupt vector table entry address.\n * - If your vector table is placed in readonly section, the vector for IRQn will not be modified.\n *   For this case, you need to use the correct irq handler name defined in your vector table as\n *   your irq handler function name.\n * - This function will only work correctly when the vector table is placed in an read-write enabled section.\n * \\sa\n * - \\ref ECLIC_GetVector\n */\n__STATIC_FORCEINLINE void __ECLIC_SetVector(IRQn_Type IRQn, rv_csr_t vector) {\n#if __RISCV_XLEN == 32\n  volatile uint32_t vec_base;\n  vec_base                                             = ((uint32_t)__RV_CSR_READ(CSR_MTVT));\n  (*(unsigned long *)(vec_base + ((int32_t)IRQn) * 4)) = vector;\n#elif __RISCV_XLEN == 64\n  volatile uint64_t vec_base;\n  vec_base                                             = ((uint64_t)__RV_CSR_READ(CSR_MTVT));\n  (*(unsigned long *)(vec_base + ((int32_t)IRQn) * 8)) = vector;\n#else // TODO Need cover for XLEN=128 case in future\n  volatile uint64_t vec_base;\n  vec_base                                             = ((uint64_t)__RV_CSR_READ(CSR_MTVT));\n  (*(unsigned long *)(vec_base + ((int32_t)IRQn) * 8)) = vector;\n#endif\n}\n\n/**\n * \\brief  Get Interrupt Vector of a specific interrupt\n * \\details\n * This function get interrupt handler address of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\return        Interrupt handler address\n * \\remarks\n * - IRQn must not be negative.\n * - You can read \\ref CSR_CSR_MTVT to get interrupt vector table entry address.\n * \\sa\n *     - \\ref ECLIC_SetVector\n */\n__STATIC_FORCEINLINE rv_csr_t __ECLIC_GetVector(IRQn_Type IRQn) {\n#if __RISCV_XLEN == 32\n  return (*(uint32_t *)(__RV_CSR_READ(CSR_MTVT) + IRQn * 4));\n#elif __RISCV_XLEN == 64\n  return (*(uint64_t *)(__RV_CSR_READ(CSR_MTVT) + IRQn * 8));\n#else // TODO Need cover for XLEN=128 case in future\n  return (*(uint64_t *)(__RV_CSR_READ(CSR_MTVT) + IRQn * 8));\n#endif\n}\n\n/**\n * \\brief  Set Exception entry address\n * \\details\n * This function set exception handler address to 'CSR_MTVEC'.\n * \\param [in]      addr  Exception handler address\n * \\remarks\n * - This function use to set exception handler address to 'CSR_MTVEC'. Address is 4 bytes align.\n * \\sa\n * - \\ref __get_exc_entry\n */\n__STATIC_FORCEINLINE void __set_exc_entry(rv_csr_t addr) {\n  addr &= (rv_csr_t)(~0x3F);\n  addr |= ECLIC_MODE_MTVEC_Msk;\n  __RV_CSR_WRITE(CSR_MTVEC, addr);\n}\n\n/**\n * \\brief  Get Exception entry address\n * \\details\n * This function get exception handler address from 'CSR_MTVEC'.\n * \\return       Exception handler address\n * \\remarks\n * - This function use to get exception handler address from 'CSR_MTVEC'. Address is 4 bytes align\n * \\sa\n * - \\ref __set_exc_entry\n */\n__STATIC_FORCEINLINE rv_csr_t __get_exc_entry(void) {\n  unsigned long addr = __RV_CSR_READ(CSR_MTVEC);\n  return (addr & ~ECLIC_MODE_MTVEC_Msk);\n}\n\n/**\n * \\brief  Set Non-vector interrupt entry address\n * \\details\n * This function set Non-vector interrupt address.\n * \\param [in]      addr  Non-vector interrupt entry address\n * \\remarks\n * - This function use to set non-vector interrupt entry address to 'CSR_MTVT2' if\n * - CSR_MTVT2 bit0 is 1. If 'CSR_MTVT2' bit0 is 0 then set address to 'CSR_MTVEC'\n * \\sa\n * - \\ref __get_nonvec_entry\n */\n__STATIC_FORCEINLINE void __set_nonvec_entry(rv_csr_t addr) {\n  if (__RV_CSR_READ(CSR_MTVT2) & 0x1) {\n    __RV_CSR_WRITE(CSR_MTVT2, addr | 0x01);\n  } else {\n    addr &= (rv_csr_t)(~0x3F);\n    addr |= ECLIC_MODE_MTVEC_Msk;\n    __RV_CSR_WRITE(CSR_MTVEC, addr);\n  }\n}\n\n/**\n * \\brief  Get Non-vector interrupt entry address\n * \\details\n * This function get Non-vector interrupt address.\n * \\return      Non-vector interrupt handler address\n * \\remarks\n * - This function use to get non-vector interrupt entry address from 'CSR_MTVT2' if\n * - CSR_MTVT2 bit0 is 1. If 'CSR_MTVT2' bit0 is 0 then get address from 'CSR_MTVEC'.\n * \\sa\n * - \\ref __set_nonvec_entry\n */\n__STATIC_FORCEINLINE rv_csr_t __get_nonvec_entry(void) {\n  if (__RV_CSR_READ(CSR_MTVT2) & 0x1) {\n    return __RV_CSR_READ(CSR_MTVT2) & (~(rv_csr_t)(0x1));\n  } else {\n    rv_csr_t addr = __RV_CSR_READ(CSR_MTVEC);\n    return (addr & ~ECLIC_MODE_MTVEC_Msk);\n  }\n}\n\n/**\n * \\brief  Get NMI interrupt entry from 'CSR_MNVEC'\n * \\details\n * This function get NMI interrupt address from 'CSR_MNVEC'.\n * \\return      NMI interrupt handler address\n * \\remarks\n * - This function use to get NMI interrupt handler address from 'CSR_MNVEC'. If CSR_MMISC_CTL[9] = 1 'CSR_MNVEC'\n * - will be equal as mtvec. If CSR_MMISC_CTL[9] = 0 'CSR_MNVEC' will be equal as reset vector.\n * - NMI entry is defined via \\ref CSR_MMISC_CTL, writing to \\ref CSR_MNVEC will be ignored.\n */\n__STATIC_FORCEINLINE rv_csr_t __get_nmi_entry(void) { return __RV_CSR_READ(CSR_MNVEC); }\n\n/**\n * \\brief   Save necessary CSRs into variables for vector interrupt nesting\n * \\details\n * This macro is used to declare variables which are used for saving\n * CSRs(MCAUSE, MEPC, MSUB), and it will read these CSR content into\n * these variables, it need to be used in a vector-interrupt if nesting\n * is required.\n * \\remarks\n * - Interrupt will be enabled after this macro is called\n * - It need to be used together with \\ref RESTORE_IRQ_CSR_CONTEXT\n * - Don't use variable names __mcause, __mpec, __msubm in your ISR code\n * - If you want to enable interrupt nesting feature for vector interrupt,\n * you can do it like this:\n * \\code\n * // __INTERRUPT attribute will generates function entry and exit sequences suitable\n * // for use in an interrupt handler when this attribute is present\n * __INTERRUPT void eclic_mtip_handler(void)\n * {\n *     // Must call this to save CSRs\n *     SAVE_IRQ_CSR_CONTEXT();\n *     // !!!Interrupt is enabled here!!!\n *     // !!!Higher priority interrupt could nest it!!!\n *\n *     // put you own interrupt handling code here\n *\n *     // Must call this to restore CSRs\n *     RESTORE_IRQ_CSR_CONTEXT();\n * }\n * \\endcode\n */\n#define SAVE_IRQ_CSR_CONTEXT()                   \\\n  rv_csr_t __mcause = __RV_CSR_READ(CSR_MCAUSE); \\\n  rv_csr_t __mepc   = __RV_CSR_READ(CSR_MEPC);   \\\n  rv_csr_t __msubm  = __RV_CSR_READ(CSR_MSUBM);  \\\n  __enable_irq();\n\n/**\n * \\brief   Restore necessary CSRs from variables for vector interrupt nesting\n * \\details\n * This macro is used restore CSRs(MCAUSE, MEPC, MSUB) from pre-defined variables\n * in \\ref SAVE_IRQ_CSR_CONTEXT macro.\n * \\remarks\n * - Interrupt will be disabled after this macro is called\n * - It need to be used together with \\ref SAVE_IRQ_CSR_CONTEXT\n */\n#define RESTORE_IRQ_CSR_CONTEXT()     \\\n  __disable_irq();                    \\\n  __RV_CSR_WRITE(CSR_MSUBM, __msubm); \\\n  __RV_CSR_WRITE(CSR_MEPC, __mepc);   \\\n  __RV_CSR_WRITE(CSR_MCAUSE, __mcause);\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_IntExc */\n\n#endif /* defined(__ECLIC_PRESENT) && (__ECLIC_PRESENT == 1) */\n\n#ifdef __cplusplus\n}\n#endif\n#endif /** __CORE_FEATURE_ECLIC__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/NMSIS/Core/Include/core_feature_fpu.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __CORE_FEATURE_FPU_H__\n#define __CORE_FEATURE_FPU_H__\n/*!\n * @file     core_feature_fpu.h\n * @brief    FPU feature API header file for Nuclei N/NX Core\n */\n/*\n * FPU Feature Configuration Macro:\n * 1. __FPU_PRESENT:  Define whether Floating Point Unit(FPU) is present or not\n *   * 0: Not present\n *   * 1: Single precision FPU present, __RISCV_FLEN == 32\n *   * 2: Double precision FPU present, __RISCV_FLEN == 64\n */\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* ===== FPU Operations ===== */\n/**\n * \\defgroup NMSIS_Core_FPU_Functions   FPU Functions\n * \\ingroup  NMSIS_Core\n * \\brief    Functions that related to the RISC-V FPU (F and D extension).\n * \\details\n *\n * Nuclei provided floating point unit by RISC-V F and D extension.\n * * `F extension` adds single-precision floating-point computational\n * instructions compliant with the IEEE 754-2008 arithmetic standard, __RISCV_FLEN = 32.\n *   The F extension adds 32 floating-point registers, f0-f31, each 32 bits wide,\n *   and a floating-point control and status register fcsr, which contains the\n *   operating mode and exception status of the floating-point unit.\n * * `D extension` adds double-precision floating-point computational instructions\n * compliant with the IEEE 754-2008 arithmetic standard.\n *   The D extension widens the 32 floating-point registers, f0-f31, to 64 bits, __RISCV_FLEN = 64\n *   @{\n */\n#if defined(__FPU_PRESENT) && (__FPU_PRESENT > 0)\n\n#if __FPU_PRESENT == 1\n/** \\brief Refer to the width of the floating point register in bits(either 32 or 64) */\n#define __RISCV_FLEN 32\n#elif __FPU_PRESENT == 2\n#define __RISCV_FLEN 64\n#else\n#define __RISCV_FLEN __riscv_flen\n#endif /* __FPU_PRESENT == 1 */\n\n/** \\brief Get FCSR CSR Register */\n#define __get_FCSR() __RV_CSR_READ(CSR_FCSR)\n/** \\brief Set FCSR CSR Register with val */\n#define __set_FCSR(val) __RV_CSR_WRITE(CSR_FCSR, (val))\n/** \\brief Get FRM CSR Register */\n#define __get_FRM() __RV_CSR_READ(CSR_FRM)\n/** \\brief Set FRM CSR Register with val */\n#define __set_FRM(val) __RV_CSR_WRITE(CSR_FRM, (val))\n/** \\brief Get FFLAGS CSR Register */\n#define __get_FFLAGS() __RV_CSR_READ(CSR_FFLAGS)\n/** \\brief Set FFLAGS CSR Register with val */\n#define __set_FFLAGS(val) __RV_CSR_WRITE(CSR_FFLAGS, (val))\n\n/** \\brief Enable FPU Unit */\n#define __enable_FPU() __RV_CSR_SET(CSR_MSTATUS, MSTATUS_FS)\n/**\n * \\brief Disable FPU Unit\n * \\details\n * * We can save power by disable FPU Unit.\n * * When FPU Unit is disabled, any access to FPU related CSR registers\n * and FPU instructions will cause illegal Instuction Exception.\n * */\n#define __disable_FPU() __RV_CSR_CLEAR(CSR_MSTATUS, MSTATUS_FS)\n\n/**\n * \\brief   Load a single-precision value from memory into float point register freg using flw instruction\n * \\details The FLW instruction loads a single-precision floating point value from memory\n * address (addr + ofs) into floating point register freg(f0-f31)\n * \\param [in]    freg   The floating point register, eg. FREG(0), f0\n * \\param [in]    addr   The memory base address, 4 byte aligned required\n * \\param [in]    ofs    a 12-bit immediate signed byte offset value, should be an const value\n * \\remarks\n * * FLW and FSW operations need to make sure the address is 4 bytes aligned,\n *   otherwise it will cause exception code 4(Load address misaligned) or 6 (Store/AMO address misaligned)\n * * FLW and FSW do not modify the bits being transferred; in particular, the payloads of non-canonical\n * NaNs are preserved\n *\n */\n#define __RV_FLW(freg, addr, ofs)                                                             \\\n  ({                                                                                          \\\n    register rv_csr_t __addr = (rv_csr_t)(addr);                                              \\\n    __ASM volatile(\"flw \" STRINGIFY(freg) \", %0(%1)  \" : : \"I\"(ofs), \"r\"(__addr) : \"memory\"); \\\n  })\n\n/**\n * \\brief   Store a single-precision value from float point freg into memory using fsw instruction\n * \\details The FSW instruction stores a single-precision value from floating point register to memory\n * \\param [in]    freg   The floating point register(f0-f31), eg. FREG(0), f0\n * \\param [in]    addr   The memory base address, 4 byte aligned required\n * \\param [in]    ofs    a 12-bit immediate signed byte offset value, should be an const value\n * \\remarks\n * * FLW and FSW operations need to make sure the address is 4 bytes aligned,\n *   otherwise it will cause exception code 4(Load address misaligned) or 6 (Store/AMO address misaligned)\n * * FLW and FSW do not modify the bits being transferred; in particular, the payloads of non-canonical\n * NaNs are preserved\n *\n */\n#define __RV_FSW(freg, addr, ofs)                                                             \\\n  ({                                                                                          \\\n    register rv_csr_t __addr = (rv_csr_t)(addr);                                              \\\n    __ASM volatile(\"fsw \" STRINGIFY(freg) \", %0(%1)  \" : : \"I\"(ofs), \"r\"(__addr) : \"memory\"); \\\n  })\n\n/**\n * \\brief   Load a double-precision value from memory into float point register freg using fld instruction\n * \\details The FLD instruction loads a double-precision floating point value from memory\n * address (addr + ofs) into floating point register freg(f0-f31)\n * \\param [in]    freg   The floating point register, eg. FREG(0), f0\n * \\param [in]    addr   The memory base address, 8 byte aligned required\n * \\param [in]    ofs    a 12-bit immediate signed byte offset value, should be an const value\n * \\attention\n * * Function only available for double precision floating point unit, FLEN = 64\n * \\remarks\n * * FLD and FSD operations need to make sure the address is 8 bytes aligned,\n *   otherwise it will cause exception code 4(Load address misaligned) or 6 (Store/AMO address misaligned)\n * * FLD and FSD do not modify the bits being transferred; in particular, the payloads of non-canonical\n * NaNs are preserved.\n */\n#define __RV_FLD(freg, addr, ofs)                                                             \\\n  ({                                                                                          \\\n    register rv_csr_t __addr = (rv_csr_t)(addr);                                              \\\n    __ASM volatile(\"fld \" STRINGIFY(freg) \", %0(%1)  \" : : \"I\"(ofs), \"r\"(__addr) : \"memory\"); \\\n  })\n\n/**\n * \\brief   Store a double-precision value from float point freg into memory using fsd instruction\n * \\details The FSD instruction stores double-precision value from floating point register to memory\n * \\param [in]    freg   The floating point register(f0-f31), eg. FREG(0), f0\n * \\param [in]    addr   The memory base address, 8 byte aligned required\n * \\param [in]    ofs    a 12-bit immediate signed byte offset value, should be an const value\n * \\attention\n * * Function only available for double precision floating point unit, FLEN = 64\n * \\remarks\n * * FLD and FSD operations need to make sure the address is 8 bytes aligned,\n *   otherwise it will cause exception code 4(Load address misaligned) or 6 (Store/AMO address misaligned)\n * * FLD and FSD do not modify the bits being transferred; in particular, the payloads of non-canonical\n * NaNs are preserved.\n *\n */\n#define __RV_FSD(freg, addr, ofs)                                                             \\\n  ({                                                                                          \\\n    register rv_csr_t __addr = (rv_csr_t)(addr);                                              \\\n    __ASM volatile(\"fsd \" STRINGIFY(freg) \", %0(%1)  \" : : \"I\"(ofs), \"r\"(__addr) : \"memory\"); \\\n  })\n\n/**\n * \\def __RV_FLOAD\n * \\brief   Load a float point value from memory into float point register freg using flw/fld instruction\n * \\details\n * * For Single-Precison Floating-Point Mode(__FPU_PRESENT == 1, __RISCV_FLEN == 32):\n *   It will call \\ref __RV_FLW to load a single-precision floating point value from memory to floating point register\n * * For Double-Precison Floating-Point Mode(__FPU_PRESENT == 2, __RISCV_FLEN == 64):\n *   It will call \\ref __RV_FLD to load a double-precision floating point value from memory to floating point register\n *\n * \\attention\n * Function behaviour is different for __FPU_PRESENT = 1 or 2, please see the real function this macro represent\n */\n/**\n * \\def __RV_FSTORE\n * \\brief   Store a float value from float point freg into memory using fsw/fsd instruction\n * \\details\n * * For Single-Precison Floating-Point Mode(__FPU_PRESENT == 1, __RISCV_FLEN == 32):\n *   It will call \\ref __RV_FSW to store floating point register into memory\n * * For Double-Precison Floating-Point Mode(__FPU_PRESENT == 2, __RISCV_FLEN == 64):\n *   It will call \\ref __RV_FSD to store floating point register into memory\n *\n * \\attention\n * Function behaviour is different for __FPU_PRESENT = 1 or 2, please see the real function this macro represent\n */\n#if __FPU_PRESENT == 1\n#define __RV_FLOAD  __RV_FLW\n#define __RV_FSTORE __RV_FSW\n/** \\brief Type of FPU register, depends on the FLEN defined in RISC-V */\ntypedef uint32_t rv_fpu_t;\n#elif __FPU_PRESENT == 2\n#define __RV_FLOAD  __RV_FLD\n#define __RV_FSTORE __RV_FSD\n/** \\brief Type of FPU register, depends on the FLEN defined in RISC-V */\ntypedef uint64_t rv_fpu_t;\n#endif /* __FPU_PRESENT == 2 */\n\n/**\n * \\brief   Save FPU context into variables for interrupt nesting\n * \\details\n * This macro is used to declare variables which are used for saving\n * FPU context, and it will store the nessary fpu registers into\n * these variables, it need to be used in a interrupt when in this\n * interrupt fpu registers are used.\n * \\remarks\n * - It need to be used together with \\ref RESTORE_FPU_CONTEXT\n * - Don't use variable names __fpu_context in your ISR code\n * - If you isr code will use fpu registers, and this interrupt is nested.\n * Then you can do it like this:\n * \\code\n * void eclic_mtip_handler(void)\n * {\n *     // !!!Interrupt is enabled here!!!\n *     // !!!Higher priority interrupt could nest it!!!\n *\n *     // Necessary only when you need to use fpu registers\n *     // in this isr handler functions\n *     SAVE_FPU_CONTEXT();\n *\n *     // put you own interrupt handling code here\n *\n *     // pair of SAVE_FPU_CONTEXT()\n *     RESTORE_FPU_CONTEXT();\n * }\n * \\endcode\n */\n#define SAVE_FPU_CONTEXT()                                    \\\n  rv_fpu_t __fpu_context[20];                                 \\\n  __RV_FSTORE(FREG(0), __fpu_context, 0 << LOG_FPREGBYTES);   \\\n  __RV_FSTORE(FREG(1), __fpu_context, 1 << LOG_FPREGBYTES);   \\\n  __RV_FSTORE(FREG(2), __fpu_context, 2 << LOG_FPREGBYTES);   \\\n  __RV_FSTORE(FREG(3), __fpu_context, 3 << LOG_FPREGBYTES);   \\\n  __RV_FSTORE(FREG(4), __fpu_context, 4 << LOG_FPREGBYTES);   \\\n  __RV_FSTORE(FREG(5), __fpu_context, 5 << LOG_FPREGBYTES);   \\\n  __RV_FSTORE(FREG(6), __fpu_context, 6 << LOG_FPREGBYTES);   \\\n  __RV_FSTORE(FREG(7), __fpu_context, 7 << LOG_FPREGBYTES);   \\\n  __RV_FSTORE(FREG(10), __fpu_context, 8 << LOG_FPREGBYTES);  \\\n  __RV_FSTORE(FREG(11), __fpu_context, 9 << LOG_FPREGBYTES);  \\\n  __RV_FSTORE(FREG(12), __fpu_context, 10 << LOG_FPREGBYTES); \\\n  __RV_FSTORE(FREG(13), __fpu_context, 11 << LOG_FPREGBYTES); \\\n  __RV_FSTORE(FREG(14), __fpu_context, 12 << LOG_FPREGBYTES); \\\n  __RV_FSTORE(FREG(15), __fpu_context, 13 << LOG_FPREGBYTES); \\\n  __RV_FSTORE(FREG(16), __fpu_context, 14 << LOG_FPREGBYTES); \\\n  __RV_FSTORE(FREG(17), __fpu_context, 15 << LOG_FPREGBYTES); \\\n  __RV_FSTORE(FREG(28), __fpu_context, 16 << LOG_FPREGBYTES); \\\n  __RV_FSTORE(FREG(29), __fpu_context, 17 << LOG_FPREGBYTES); \\\n  __RV_FSTORE(FREG(30), __fpu_context, 18 << LOG_FPREGBYTES); \\\n  __RV_FSTORE(FREG(31), __fpu_context, 19 << LOG_FPREGBYTES);\n\n/**\n * \\brief   Restore necessary fpu registers from variables for interrupt nesting\n * \\details\n * This macro is used restore necessary fpu registers from pre-defined variables\n * in \\ref SAVE_FPU_CONTEXT macro.\n * \\remarks\n * - It need to be used together with \\ref SAVE_FPU_CONTEXT\n */\n#define RESTORE_FPU_CONTEXT()                                \\\n  __RV_FLOAD(FREG(0), __fpu_context, 0 << LOG_FPREGBYTES);   \\\n  __RV_FLOAD(FREG(1), __fpu_context, 1 << LOG_FPREGBYTES);   \\\n  __RV_FLOAD(FREG(2), __fpu_context, 2 << LOG_FPREGBYTES);   \\\n  __RV_FLOAD(FREG(3), __fpu_context, 3 << LOG_FPREGBYTES);   \\\n  __RV_FLOAD(FREG(4), __fpu_context, 4 << LOG_FPREGBYTES);   \\\n  __RV_FLOAD(FREG(5), __fpu_context, 5 << LOG_FPREGBYTES);   \\\n  __RV_FLOAD(FREG(6), __fpu_context, 6 << LOG_FPREGBYTES);   \\\n  __RV_FLOAD(FREG(7), __fpu_context, 7 << LOG_FPREGBYTES);   \\\n  __RV_FLOAD(FREG(10), __fpu_context, 8 << LOG_FPREGBYTES);  \\\n  __RV_FLOAD(FREG(11), __fpu_context, 9 << LOG_FPREGBYTES);  \\\n  __RV_FLOAD(FREG(12), __fpu_context, 10 << LOG_FPREGBYTES); \\\n  __RV_FLOAD(FREG(13), __fpu_context, 11 << LOG_FPREGBYTES); \\\n  __RV_FLOAD(FREG(14), __fpu_context, 12 << LOG_FPREGBYTES); \\\n  __RV_FLOAD(FREG(15), __fpu_context, 13 << LOG_FPREGBYTES); \\\n  __RV_FLOAD(FREG(16), __fpu_context, 14 << LOG_FPREGBYTES); \\\n  __RV_FLOAD(FREG(17), __fpu_context, 15 << LOG_FPREGBYTES); \\\n  __RV_FLOAD(FREG(28), __fpu_context, 16 << LOG_FPREGBYTES); \\\n  __RV_FLOAD(FREG(29), __fpu_context, 17 << LOG_FPREGBYTES); \\\n  __RV_FLOAD(FREG(30), __fpu_context, 18 << LOG_FPREGBYTES); \\\n  __RV_FLOAD(FREG(31), __fpu_context, 19 << LOG_FPREGBYTES);\n#else\n#define SAVE_FPU_CONTEXT()\n#define RESTORE_FPU_CONTEXT()\n#endif    /* __FPU_PRESENT > 0 */\n/** @} */ /* End of Doxygen Group NMSIS_Core_FPU_Functions */\n\n#ifdef __cplusplus\n}\n#endif\n#endif /** __RISCV_EXT_FPU_H__  */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/NMSIS/Core/Include/core_feature_pmp.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __CORE_FEATURE_PMP_H__\n#define __CORE_FEATURE_PMP_H__\n/*!\n * @file     core_feature_pmp.h\n * @brief    PMP feature API header file for Nuclei N/NX Core\n */\n/*\n * PMP Feature Configuration Macro:\n * 1. __PMP_PRESENT:  Define whether Physical Memory Protection(PMP) is present or not\n *   * 0: Not present\n *   * 1: Present\n * 2. __PMP_ENTRY_NUM:  Define the number of PMP entries, only 8 or 16 is configurable.\n */\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if defined(__PMP_PRESENT) && (__PMP_PRESENT == 1)\n/* ===== PMP Operations ===== */\n/**\n * \\defgroup NMSIS_Core_PMP_Functions   PMP Functions\n * \\ingroup  NMSIS_Core\n * \\brief    Functions that related to the RISCV Phyiscal Memory Protection.\n * \\details\n * Optional physical memory protection (PMP) unit provides per-hart machine-mode\n * control registers to allow physical memory access privileges (read, write, execute)\n * to be specified for each physical memory region.\n *\n * The PMP can supports region access control settings as small as four bytes.\n *\n *   @{\n */\n#ifndef __PMP_ENTRY_NUM\n/* numbers of PMP entries(__PMP_ENTRY_NUM) should be defined in <Device.h> */\n#error \"__PMP_ENTRY_NUM is not defined, please check!\"\n#endif\n\n/**\n * \\brief   Get 8bit PMPxCFG Register by PMP entry index\n * \\details Return the content of the PMPxCFG Register.\n * \\param [in]    idx    PMP region index(0-15)\n * \\return               PMPxCFG Register value\n */\n__STATIC_INLINE uint8_t __get_PMPxCFG(uint32_t idx) {\n  rv_csr_t pmpcfg = 0;\n\n  if (idx >= __PMP_ENTRY_NUM)\n    return 0;\n#if __RISCV_XLEN == 32\n  if (idx < 4) {\n    pmpcfg = __RV_CSR_READ(CSR_PMPCFG0);\n  } else if ((idx >= 4) && (idx < 8)) {\n    idx -= 4;\n    pmpcfg = __RV_CSR_READ(CSR_PMPCFG1);\n  } else if ((idx >= 8) && (idx < 12)) {\n    idx -= 8;\n    pmpcfg = __RV_CSR_READ(CSR_PMPCFG2);\n  } else {\n    idx -= 12;\n    pmpcfg = __RV_CSR_READ(CSR_PMPCFG3);\n  }\n\n  idx = idx << 3;\n  return (uint8_t)((pmpcfg >> idx) & 0xFF);\n#elif __RISCV_XLEN == 64\n  if (idx < 8) {\n    pmpcfg = __RV_CSR_READ(CSR_PMPCFG0);\n  } else {\n    idx -= 8;\n    pmpcfg = __RV_CSR_READ(CSR_PMPCFG2);\n  }\n  idx = idx << 3;\n  return (uint8_t)((pmpcfg >> idx) & 0xFF);\n#else\n  // TODO Add RV128 Handling\n  return 0;\n#endif\n}\n\n/**\n * \\brief   Set 8bit PMPxCFG by pmp entry index\n * \\details Set the given pmpxcfg value to the PMPxCFG Register.\n * \\param [in]    idx      PMPx region index(0-15)\n * \\param [in]    pmpxcfg  PMPxCFG register value to set\n */\n__STATIC_INLINE void __set_PMPxCFG(uint32_t idx, uint8_t pmpxcfg) {\n  rv_csr_t pmpcfgx = 0;\n  if (idx >= __PMP_ENTRY_NUM)\n    return;\n\n#if __RISCV_XLEN == 32\n  if (idx < 4) {\n    pmpcfgx = __RV_CSR_READ(CSR_PMPCFG0);\n    idx     = idx << 3;\n    pmpcfgx = (pmpcfgx & ~(0xFFUL << idx)) | ((rv_csr_t)pmpxcfg << idx);\n    __RV_CSR_WRITE(CSR_PMPCFG0, pmpcfgx);\n  } else if ((idx >= 4) && (idx < 8)) {\n    idx -= 4;\n    pmpcfgx = __RV_CSR_READ(CSR_PMPCFG1);\n    idx     = idx << 3;\n    pmpcfgx = (pmpcfgx & ~(0xFFUL << idx)) | ((rv_csr_t)pmpxcfg << idx);\n    __RV_CSR_WRITE(CSR_PMPCFG1, pmpcfgx);\n  } else if ((idx >= 8) && (idx < 12)) {\n    idx -= 8;\n    pmpcfgx = __RV_CSR_READ(CSR_PMPCFG2);\n    idx     = idx << 3;\n    pmpcfgx = (pmpcfgx & ~(0xFFUL << idx)) | ((rv_csr_t)pmpxcfg << idx);\n    __RV_CSR_WRITE(CSR_PMPCFG2, pmpcfgx);\n  } else {\n    idx -= 12;\n    pmpcfgx = __RV_CSR_READ(CSR_PMPCFG3);\n    idx     = idx << 3;\n    pmpcfgx = (pmpcfgx & ~(0xFFUL << idx)) | ((rv_csr_t)pmpxcfg << idx);\n    __RV_CSR_WRITE(CSR_PMPCFG3, pmpcfgx);\n  }\n#elif __RISCV_XLEN == 64\n  if (idx < 8) {\n    pmpcfgx = __RV_CSR_READ(CSR_PMPCFG0);\n    idx     = idx << 3;\n    pmpcfgx = (pmpcfgx & ~(0xFFULL << idx)) | ((rv_csr_t)pmpxcfg << idx);\n    __RV_CSR_WRITE(CSR_PMPCFG0, pmpcfgx);\n  } else {\n    idx -= 8;\n    pmpcfgx = __RV_CSR_READ(CSR_PMPCFG2);\n    idx     = idx << 3;\n    pmpcfgx = (pmpcfgx & ~(0xFFULL << idx)) | ((rv_csr_t)pmpxcfg << idx);\n    __RV_CSR_WRITE(CSR_PMPCFG2, pmpcfgx);\n  }\n#else\n    // TODO Add RV128 Handling\n#endif\n}\n\n/**\n * \\brief   Get PMPCFGx Register by index\n * \\details Return the content of the PMPCFGx Register.\n * \\param [in]    idx    PMPCFG CSR index(0-3)\n * \\return               PMPCFGx Register value\n * \\remark\n * - For RV64, only idx = 0 and idx = 2 is allowed.\n *   pmpcfg0 and pmpcfg2 hold the configurations\n *   for the 16 PMP entries, pmpcfg1 and pmpcfg3 are illegal\n * - For RV32, pmpcfg0–pmpcfg3, hold the configurations\n *   pmp0cfg–pmp15cfg for the 16 PMP entries\n */\n__STATIC_INLINE rv_csr_t __get_PMPCFGx(uint32_t idx) {\n  switch (idx) {\n  case 0:\n    return __RV_CSR_READ(CSR_PMPCFG0);\n  case 1:\n    return __RV_CSR_READ(CSR_PMPCFG1);\n  case 2:\n    return __RV_CSR_READ(CSR_PMPCFG2);\n  case 3:\n    return __RV_CSR_READ(CSR_PMPCFG3);\n  default:\n    return 0;\n  }\n}\n\n/**\n * \\brief   Set PMPCFGx by index\n * \\details Write the given value to the PMPCFGx Register.\n * \\param [in]    idx      PMPCFG CSR index(0-3)\n * \\param [in]    pmpcfg   PMPCFGx Register value to set\n * \\remark\n * - For RV64, only idx = 0 and idx = 2 is allowed.\n *   pmpcfg0 and pmpcfg2 hold the configurations\n *   for the 16 PMP entries, pmpcfg1 and pmpcfg3 are illegal\n * - For RV32, pmpcfg0–pmpcfg3, hold the configurations\n *   pmp0cfg–pmp15cfg for the 16 PMP entries\n */\n__STATIC_INLINE void __set_PMPCFGx(uint32_t idx, rv_csr_t pmpcfg) {\n  switch (idx) {\n  case 0:\n    __RV_CSR_WRITE(CSR_PMPCFG0, pmpcfg);\n    break;\n  case 1:\n    __RV_CSR_WRITE(CSR_PMPCFG1, pmpcfg);\n    break;\n  case 2:\n    __RV_CSR_WRITE(CSR_PMPCFG2, pmpcfg);\n    break;\n  case 3:\n    __RV_CSR_WRITE(CSR_PMPCFG3, pmpcfg);\n    break;\n  default:\n    return;\n  }\n}\n\n/**\n * \\brief   Get PMPADDRx Register by index\n * \\details Return the content of the PMPADDRx Register.\n * \\param [in]    idx    PMP region index(0-15)\n * \\return               PMPADDRx Register value\n */\n__STATIC_INLINE rv_csr_t __get_PMPADDRx(uint32_t idx) {\n  switch (idx) {\n  case 0:\n    return __RV_CSR_READ(CSR_PMPADDR0);\n  case 1:\n    return __RV_CSR_READ(CSR_PMPADDR1);\n  case 2:\n    return __RV_CSR_READ(CSR_PMPADDR2);\n  case 3:\n    return __RV_CSR_READ(CSR_PMPADDR3);\n  case 4:\n    return __RV_CSR_READ(CSR_PMPADDR4);\n  case 5:\n    return __RV_CSR_READ(CSR_PMPADDR5);\n  case 6:\n    return __RV_CSR_READ(CSR_PMPADDR6);\n  case 7:\n    return __RV_CSR_READ(CSR_PMPADDR7);\n  case 8:\n    return __RV_CSR_READ(CSR_PMPADDR8);\n  case 9:\n    return __RV_CSR_READ(CSR_PMPADDR9);\n  case 10:\n    return __RV_CSR_READ(CSR_PMPADDR10);\n  case 11:\n    return __RV_CSR_READ(CSR_PMPADDR11);\n  case 12:\n    return __RV_CSR_READ(CSR_PMPADDR12);\n  case 13:\n    return __RV_CSR_READ(CSR_PMPADDR13);\n  case 14:\n    return __RV_CSR_READ(CSR_PMPADDR14);\n  case 15:\n    return __RV_CSR_READ(CSR_PMPADDR15);\n  default:\n    return 0;\n  }\n}\n\n/**\n * \\brief   Set PMPADDRx by index\n * \\details Write the given value to the PMPADDRx Register.\n * \\param [in]    idx      PMP region index(0-15)\n * \\param [in]    pmpaddr  PMPADDRx Register value to set\n */\n__STATIC_INLINE void __set_PMPADDRx(uint32_t idx, rv_csr_t pmpaddr) {\n  switch (idx) {\n  case 0:\n    __RV_CSR_WRITE(CSR_PMPADDR0, pmpaddr);\n    break;\n  case 1:\n    __RV_CSR_WRITE(CSR_PMPADDR1, pmpaddr);\n    break;\n  case 2:\n    __RV_CSR_WRITE(CSR_PMPADDR2, pmpaddr);\n    break;\n  case 3:\n    __RV_CSR_WRITE(CSR_PMPADDR3, pmpaddr);\n    break;\n  case 4:\n    __RV_CSR_WRITE(CSR_PMPADDR4, pmpaddr);\n    break;\n  case 5:\n    __RV_CSR_WRITE(CSR_PMPADDR5, pmpaddr);\n    break;\n  case 6:\n    __RV_CSR_WRITE(CSR_PMPADDR6, pmpaddr);\n    break;\n  case 7:\n    __RV_CSR_WRITE(CSR_PMPADDR7, pmpaddr);\n    break;\n  case 8:\n    __RV_CSR_WRITE(CSR_PMPADDR8, pmpaddr);\n    break;\n  case 9:\n    __RV_CSR_WRITE(CSR_PMPADDR9, pmpaddr);\n    break;\n  case 10:\n    __RV_CSR_WRITE(CSR_PMPADDR10, pmpaddr);\n    break;\n  case 11:\n    __RV_CSR_WRITE(CSR_PMPADDR11, pmpaddr);\n    break;\n  case 12:\n    __RV_CSR_WRITE(CSR_PMPADDR12, pmpaddr);\n    break;\n  case 13:\n    __RV_CSR_WRITE(CSR_PMPADDR13, pmpaddr);\n    break;\n  case 14:\n    __RV_CSR_WRITE(CSR_PMPADDR14, pmpaddr);\n    break;\n  case 15:\n    __RV_CSR_WRITE(CSR_PMPADDR15, pmpaddr);\n    break;\n  default:\n    return;\n  }\n}\n/** @} */ /* End of Doxygen Group NMSIS_Core_PMP_Functions */\n#endif    /* defined(__PMP_PRESENT) && (__PMP_PRESENT == 1) */\n\n#ifdef __cplusplus\n}\n#endif\n#endif /** __CORE_FEATURE_PMP_H__  */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/NMSIS/Core/Include/core_feature_timer.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __CORE_FEATURE_TIMER_H__\n#define __CORE_FEATURE_TIMER_H__\n/*!\n * @file     core_feature_timer.h\n * @brief    System Timer feature API header file for Nuclei N/NX Core\n */\n/*\n * System Timer Feature Configuration Macro:\n * 1. __SYSTIMER_PRESENT:  Define whether Private System Timer is present or not.\n *   * 0: Not present\n *   * 1: Present\n * 2. __SYSTIMER_BASEADDR:  Define the base address of the System Timer.\n */\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if defined(__SYSTIMER_PRESENT) && (__SYSTIMER_PRESENT == 1)\n/**\n * \\defgroup NMSIS_Core_SysTimer_Registers     Register Define and Type Definitions Of System Timer\n * \\ingroup NMSIS_Core_Registers\n * \\brief   Type definitions and defines for system timer registers.\n *\n * @{\n */\n/**\n * \\brief  Structure type to access the System Timer (SysTimer).\n * \\details\n * Structure definition to access the system timer(SysTimer).\n * \\remarks\n * - MSFTRST register is introduced in Nuclei N Core version 1.3(\\ref __NUCLEI_N_REV >= 0x0103)\n * - MSTOP register is renamed to MTIMECTL register in Nuclei N Core version 1.4(\\ref __NUCLEI_N_REV >= 0x0104)\n * - CMPCLREN and CLKSRC bit in MTIMECTL register is introduced in Nuclei N Core version 1.4(\\ref __NUCLEI_N_REV >= 0x0104)\n */\ntypedef struct {\n  __IOM uint64_t MTIMER;           /*!< Offset: 0x000 (R/W)  System Timer current value 64bits Register */\n  __IOM uint64_t MTIMERCMP;        /*!< Offset: 0x008 (R/W)  System Timer compare Value 64bits Register */\n  __IOM uint32_t RESERVED0[0x3F8]; /*!< Offset: 0x010 - 0xFEC Reserved */\n  __IOM uint32_t MSFTRST;          /*!< Offset: 0xFF0 (R/W)  System Timer Software Core Reset Register */\n  __IOM uint32_t RESERVED1;        /*!< Offset: 0xFF4 Reserved */\n  __IOM uint32_t MTIMECTL;         /*!< Offset: 0xFF8 (R/W)  System Timer Control Register, previously MSTOP register */\n  __IOM uint32_t MSIP;             /*!< Offset: 0xFFC (R/W)  System Timer SW interrupt Register */\n} SysTimer_Type;\n\n/* Timer Control / Status Register Definitions */\n#define SysTimer_MTIMECTL_TIMESTOP_Pos 0U                                      /*!< SysTick Timer MTIMECTL: TIMESTOP bit Position */\n#define SysTimer_MTIMECTL_TIMESTOP_Msk (1UL << SysTimer_MTIMECTL_TIMESTOP_Pos) /*!< SysTick Timer MTIMECTL: TIMESTOP Mask */\n#define SysTimer_MTIMECTL_CMPCLREN_Pos 1U                                      /*!< SysTick Timer MTIMECTL: CMPCLREN bit Position */\n#define SysTimer_MTIMECTL_CMPCLREN_Msk (1UL << SysTimer_MTIMECTL_CMPCLREN_Pos) /*!< SysTick Timer MTIMECTL: CMPCLREN Mask */\n#define SysTimer_MTIMECTL_CLKSRC_Pos   2U                                      /*!< SysTick Timer MTIMECTL: CLKSRC bit Position */\n#define SysTimer_MTIMECTL_CLKSRC_Msk   (1UL << SysTimer_MTIMECTL_CLKSRC_Pos)   /*!< SysTick Timer MTIMECTL: CLKSRC Mask */\n\n#define SysTimer_MSIP_MSIP_Pos 0U                              /*!< SysTick Timer MSIP: MSIP bit Position */\n#define SysTimer_MSIP_MSIP_Msk (1UL << SysTimer_MSIP_MSIP_Pos) /*!< SysTick Timer MSIP: MSIP Mask */\n\n#define SysTimer_MTIMER_Msk    (0xFFFFFFFFFFFFFFFFULL) /*!< SysTick Timer MTIMER value Mask */\n#define SysTimer_MTIMERCMP_Msk (0xFFFFFFFFFFFFFFFFULL) /*!< SysTick Timer MTIMERCMP value Mask */\n#define SysTimer_MTIMECTL_Msk  (0xFFFFFFFFUL)          /*!< SysTick Timer MTIMECTL/MSTOP value Mask */\n#define SysTimer_MSIP_Msk      (0xFFFFFFFFUL)          /*!< SysTick Timer MSIP   value Mask */\n#define SysTimer_MSFTRST_Msk   (0xFFFFFFFFUL)          /*!< SysTick Timer MSFTRST value Mask */\n\n#define SysTimer_MSFRST_KEY (0x80000A5FUL) /*!< SysTick Timer Software Reset Request Key */\n\n#ifndef __SYSTIMER_BASEADDR\n/* Base address of SYSTIMER(__SYSTIMER_BASEADDR) should be defined in <Device.h> */\n#error \"__SYSTIMER_BASEADDR is not defined, please check!\"\n#endif\n/* System Timer Memory mapping of Device  */\n#define SysTimer_BASE __SYSTIMER_BASEADDR              /*!< SysTick Base Address */\n#define SysTimer      ((SysTimer_Type *)SysTimer_BASE) /*!< SysTick configuration struct */\n/** @} */                                              /* end of group NMSIS_Core_SysTimer_Registers */\n\n/* ##################################    SysTimer function  ############################################ */\n/**\n * \\defgroup NMSIS_Core_SysTimer SysTimer Functions\n * \\brief    Functions that configure the Core System Timer.\n * @{\n */\n/**\n * \\brief  Set system timer load value\n * \\details\n * This function set the system timer load value in MTIMER register.\n * \\param [in]  value   value to set system timer MTIMER register.\n * \\remarks\n * - Load value is 64bits wide.\n * - \\ref SysTimer_GetLoadValue\n */\n__STATIC_FORCEINLINE void SysTimer_SetLoadValue(uint64_t value) { SysTimer->MTIMER = value; }\n\n/**\n * \\brief  Get system timer load value\n * \\details\n * This function get the system timer current value in MTIMER register.\n * \\return  current value(64bit) of system timer MTIMER register.\n * \\remarks\n * - Load value is 64bits wide.\n * - \\ref SysTimer_SetLoadValue\n */\n__STATIC_FORCEINLINE uint64_t SysTimer_GetLoadValue(void) { return SysTimer->MTIMER; }\n\n/**\n * \\brief  Set system timer compare value\n * \\details\n * This function set the system Timer compare value in MTIMERCMP register.\n * \\param [in]  value   compare value to set system timer MTIMERCMP register.\n * \\remarks\n * - Compare value is 64bits wide.\n * - If compare value is larger than current value timer interrupt generate.\n * - Modify the load value or compare value less to clear the interrupt.\n * - \\ref SysTimer_GetCompareValue\n */\n__STATIC_FORCEINLINE void SysTimer_SetCompareValue(uint64_t value) { SysTimer->MTIMERCMP = value; }\n\n/**\n * \\brief  Get system timer compare value\n * \\details\n * This function get the system timer compare value in MTIMERCMP register.\n * \\return  compare value of system timer MTIMERCMP register.\n * \\remarks\n * - Compare value is 64bits wide.\n * - \\ref SysTimer_SetCompareValue\n */\n__STATIC_FORCEINLINE uint64_t SysTimer_GetCompareValue(void) { return SysTimer->MTIMERCMP; }\n\n/**\n * \\brief  Enable system timer counter running\n * \\details\n * Enable system timer counter running by clear\n * TIMESTOP bit in MTIMECTL register.\n */\n__STATIC_FORCEINLINE void SysTimer_Start(void) { SysTimer->MTIMECTL &= ~(SysTimer_MTIMECTL_TIMESTOP_Msk); }\n\n/**\n * \\brief  Stop system timer counter running\n * \\details\n * Stop system timer counter running by set\n * TIMESTOP bit in MTIMECTL register.\n */\n__STATIC_FORCEINLINE void SysTimer_Stop(void) { SysTimer->MTIMECTL |= SysTimer_MTIMECTL_TIMESTOP_Msk; }\n\n/**\n * \\brief  Set system timer control value\n * \\details\n * This function set the system timer MTIMECTL register value.\n * \\param [in]  mctl    value to set MTIMECTL register\n * \\remarks\n * - Bit TIMESTOP is used to start and stop timer.\n *   Clear TIMESTOP bit to 0 to start timer, otherwise to stop timer.\n * - Bit CMPCLREN is used to enable auto MTIMER clear to zero when MTIMER >= MTIMERCMP.\n *   Clear CMPCLREN bit to 0 to stop auto clear MTIMER feature, otherwise to enable it.\n * - Bit CLKSRC is used to select timer clock source.\n *   Clear CLKSRC bit to 0 to use *mtime_toggle_a*, otherwise use *core_clk_aon*\n * - \\ref SysTimer_GetControlValue\n */\n__STATIC_FORCEINLINE void SysTimer_SetControlValue(uint32_t mctl) { SysTimer->MTIMECTL = (mctl & SysTimer_MTIMECTL_Msk); }\n\n/**\n * \\brief  Get system timer control value\n * \\details\n * This function get the system timer MTIMECTL register value.\n * \\return  MTIMECTL register value\n * \\remarks\n * - \\ref SysTimer_SetControlValue\n */\n__STATIC_FORCEINLINE uint32_t SysTimer_GetControlValue(void) { return (SysTimer->MTIMECTL & SysTimer_MTIMECTL_Msk); }\n\n/**\n * \\brief  Trigger or set software interrupt via system timer\n * \\details\n * This function set the system timer MSIP bit in MSIP register.\n * \\remarks\n * - Set system timer MSIP bit and generate a SW interrupt.\n * - \\ref SysTimer_ClearSWIRQ\n * - \\ref SysTimer_GetMsipValue\n */\n__STATIC_FORCEINLINE void SysTimer_SetSWIRQ(void) { SysTimer->MSIP |= SysTimer_MSIP_MSIP_Msk; }\n\n/**\n * \\brief  Clear system timer software interrupt pending request\n * \\details\n * This function clear the system timer MSIP bit in MSIP register.\n * \\remarks\n * - Clear system timer MSIP bit in MSIP register to clear the software interrupt pending.\n * - \\ref SysTimer_SetSWIRQ\n * - \\ref SysTimer_GetMsipValue\n */\n__STATIC_FORCEINLINE void SysTimer_ClearSWIRQ(void) { SysTimer->MSIP &= ~SysTimer_MSIP_MSIP_Msk; }\n\n/**\n * \\brief  Get system timer MSIP register value\n * \\details\n * This function get the system timer MSIP register value.\n * \\return    Value of Timer MSIP register.\n * \\remarks\n * - Bit0 is SW interrupt flag.\n *   Bit0 is 1 then SW interrupt set. Bit0 is 0 then SW interrupt clear.\n * - \\ref SysTimer_SetSWIRQ\n * - \\ref SysTimer_ClearSWIRQ\n */\n__STATIC_FORCEINLINE uint32_t SysTimer_GetMsipValue(void) { return (uint32_t)(SysTimer->MSIP & SysTimer_MSIP_Msk); }\n\n/**\n * \\brief  Set system timer MSIP register value\n * \\details\n * This function set the system timer MSIP register value.\n * \\param [in]  msip   value to set MSIP register\n */\n__STATIC_FORCEINLINE void SysTimer_SetMsipValue(uint32_t msip) { SysTimer->MSIP = (msip & SysTimer_MSIP_Msk); }\n\n/**\n * \\brief  Do software reset request\n * \\details\n * This function will do software reset request through MTIMER\n * - Software need to write \\ref SysTimer_MSFRST_KEY to generate software reset request\n * - The software request flag can be cleared by reset operation to clear\n * \\remarks\n * - The software reset is sent to SoC, SoC need to generate reset signal and send back to Core\n * - This function will not return, it will do while(1) to wait the Core reset happened\n */\n__STATIC_FORCEINLINE void SysTimer_SoftwareReset(void) {\n  SysTimer->MSFTRST = SysTimer_MSFRST_KEY;\n  while (1)\n    ;\n}\n\n#if defined(__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) && defined(__ECLIC_PRESENT) && (__ECLIC_PRESENT == 1)\n/**\n * \\brief   System Tick Configuration\n * \\details Initializes the System Timer and its non-vector interrupt, and starts the System Tick Timer.\n *\n *  In our default implementation, the timer counter will be set to zero, and it will start a timer compare non-vector interrupt\n *  when it matchs the ticks user set, during the timer interrupt user should reload the system tick using \\ref SysTick_Reload function\n *  or similar function written by user, so it can produce period timer interrupt.\n * \\param [in]  ticks  Number of ticks between two interrupts.\n * \\return          0  Function succeeded.\n * \\return          1  Function failed.\n * \\remarks\n * - For \\ref __NUCLEI_N_REV >= 0x0104, the CMPCLREN bit in MTIMECTL is introduced,\n *   but we assume that the CMPCLREN bit is set to 0, so MTIMER register will not be\n *   auto cleared to 0 when MTIMER >= MTIMERCMP.\n * - When the variable \\ref __Vendor_SysTickConfig is set to 1, then the\n *   function \\ref SysTick_Config is not included.\n * - In this case, the file <b><Device>.h</b> must contain a vendor-specific implementation\n *   of this function.\n * - If user need this function to start a period timer interrupt, then in timer interrupt handler\n *   routine code, user should call \\ref SysTick_Reload with ticks to reload the timer.\n * - This function only available when __SYSTIMER_PRESENT == 1 and __ECLIC_PRESENT == 1 and __Vendor_SysTickConfig == 0\n * \\sa\n * - \\ref SysTimer_SetCompareValue; SysTimer_SetLoadValue\n */\n__STATIC_INLINE uint32_t SysTick_Config(uint64_t ticks) {\n  SysTimer_SetLoadValue(0);\n  SysTimer_SetCompareValue(ticks);\n  ECLIC_SetShvIRQ(SysTimer_IRQn, ECLIC_NON_VECTOR_INTERRUPT);\n  ECLIC_SetLevelIRQ(SysTimer_IRQn, 0);\n  ECLIC_EnableIRQ(SysTimer_IRQn);\n  return (0UL);\n}\n\n/**\n * \\brief   System Tick Reload\n * \\details Reload the System Timer Tick when the MTIMECMP reached TIME value\n *\n * \\param [in]  ticks  Number of ticks between two interrupts.\n * \\return          0  Function succeeded.\n * \\return          1  Function failed.\n * \\remarks\n * - For \\ref __NUCLEI_N_REV >= 0x0104, the CMPCLREN bit in MTIMECTL is introduced,\n *   but for this \\ref SysTick_Config function, we assume this CMPCLREN bit is set to 0,\n *   so in interrupt handler function, user still need to set the MTIMERCMP or MTIMER to reload\n *   the system tick, if vendor want to use this timer's auto clear feature, they can define\n *   \\ref __Vendor_SysTickConfig to 1, and implement \\ref SysTick_Config and \\ref SysTick_Reload functions.\n * - When the variable \\ref __Vendor_SysTickConfig is set to 1, then the\n *   function \\ref SysTick_Reload is not included.\n * - In this case, the file <b><Device>.h</b> must contain a vendor-specific implementation\n *   of this function.\n * - This function only available when __SYSTIMER_PRESENT == 1 and __ECLIC_PRESENT == 1 and __Vendor_SysTickConfig == 0\n * - Since the MTIMERCMP value might overflow, if overflowed, MTIMER will be set to 0, and MTIMERCMP set to ticks\n * \\sa\n * - \\ref SysTimer_SetCompareValue\n * - \\ref SysTimer_SetLoadValue\n */\n__STATIC_FORCEINLINE uint32_t SysTick_Reload(uint64_t ticks) {\n  uint64_t cur_ticks    = SysTimer->MTIMER;\n  uint64_t reload_ticks = ticks + cur_ticks;\n\n  if (__USUALLY(reload_ticks > cur_ticks)) {\n    SysTimer->MTIMERCMP = reload_ticks;\n  } else {\n    /* When added the ticks value, then the MTIMERCMP < TIMER,\n     * which means the MTIMERCMP is overflowed,\n     * so we need to reset the counter to zero */\n    SysTimer->MTIMER    = 0;\n    SysTimer->MTIMERCMP = ticks;\n  }\n\n  return (0UL);\n}\n\n#endif    /* defined(__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) */\n/** @} */ /* End of Doxygen Group NMSIS_Core_SysTimer */\n\n#endif /* defined(__SYSTIMER_PRESENT) && (__SYSTIMER_PRESENT == 1) */\n\n#ifdef __cplusplus\n}\n#endif\n#endif /** __CORE_FEATURE_TIMER_H__  */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/NMSIS/Core/Include/nmsis_compiler.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#ifndef __NMSIS_COMPILER_H\n#define __NMSIS_COMPILER_H\n\n#include <stdint.h>\n\n/*!\n * @file     nmsis_compiler.h\n * @brief    NMSIS compiler generic header file\n */\n#if defined(__GNUC__)\n/** GNU GCC Compiler */\n#include \"nmsis_gcc.h\"\n#else\n#error Unknown compiler.\n#endif\n\n#endif /* __NMSIS_COMPILER_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/NMSIS/Core/Include/nmsis_core.h",
    "content": "/*\n * Copyright (c) 2009-2019 Arm Limited. All rights reserved.\n * -- Adaptable modifications made for Nuclei Processors. --\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __NMSIS_CORE_H__\n#define __NMSIS_CORE_H__\n\n#include <stdint.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"nmsis_version.h\"\n\n/**\n * \\ingroup NMSIS_Core_VersionControl\n * @{\n */\n/* The following enum __NUCLEI_N_REV/__NUCLEI_NX_REV definition in this file\n * is only used for doxygen documentation generation,\n * The <device>.h is the real file to define it by vendor\n */\n#if defined(__ONLY_FOR_DOXYGEN_DOCUMENT_GENERATION__)\n/**\n * \\brief Nuclei N class core revision number\n * \\details\n * Reversion number format: [15:8] revision number, [7:0] patch number\n * \\attention\n * This define is exclusive with \\ref __NUCLEI_NX_REV\n */\n#define __NUCLEI_N_REV (0x0104)\n/**\n * \\brief Nuclei NX class core revision number\n * \\details\n * Reversion number format: [15:8] revision number, [7:0] patch number\n * \\attention\n * This define is exclusive with \\ref __NUCLEI_N_REV\n */\n#define __NUCLEI_NX_REV (0x0100)\n#endif    /* __ONLY_FOR_DOXYGEN_DOCUMENT_GENERATION__ */\n/** @} */ /* End of Group NMSIS_Core_VersionControl */\n\n#include \"nmsis_compiler.h\" /* NMSIS compiler specific defines */\n\n/* === Include Nuclei Core Related Headers === */\n/* Include core base feature header file */\n#include \"core_feature_base.h\"\n\n#ifndef __NMSIS_GENERIC\n/* Include core eclic feature header file */\n#include \"core_feature_eclic.h\"\n/* Include core systimer feature header file */\n#include \"core_feature_timer.h\"\n#endif\n\n/* Include core fpu feature header file */\n#include \"core_feature_fpu.h\"\n/* Include core dsp feature header file */\n#include \"core_feature_dsp.h\"\n/* Include core pmp feature header file */\n#include \"core_feature_pmp.h\"\n/* Include core cache feature header file */\n#include \"core_feature_cache.h\"\n\n/* Include compatiable functions header file */\n#include \"core_compatiable.h\"\n\n#ifdef __cplusplus\n}\n#endif\n#endif /* __NMSIS_CORE_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/NMSIS/Core/Include/nmsis_gcc.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#ifndef __NMSIS_GCC_H__\n#define __NMSIS_GCC_H__\n/*!\n * @file     nmsis_gcc.h\n * @brief    NMSIS compiler GCC header file\n */\n#include \"riscv_encoding.h\"\n#include <stdint.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* #########################  Startup and Lowlevel Init  ######################## */\n/**\n * \\defgroup NMSIS_Core_CompilerControl    Compiler Control\n * \\ingroup  NMSIS_Core\n * \\brief    Compiler agnostic \\#define symbols for generic c/c++ source code\n * \\details\n *\n * The NMSIS-Core provides the header file <b>nmsis_compiler.h</b> with consistent \\#define symbols for generate C or C++ source files that should be compiler agnostic.\n * Each NMSIS compliant compiler should support the functionality described in this section.\n *\n * The header file <b>nmsis_compiler.h</b> is also included by each Device Header File <device.h> so that these definitions are available.\n *   @{\n */\n/* ignore some GCC warnings */\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wsign-conversion\"\n#pragma GCC diagnostic ignored \"-Wconversion\"\n#pragma GCC diagnostic ignored \"-Wunused-parameter\"\n\n/* Fallback for __has_builtin */\n#ifndef __has_builtin\n#define __has_builtin(x) (0)\n#endif\n\n/* NMSIS compiler specific defines */\n/** \\brief Pass information from the compiler to the assembler. */\n#ifndef __ASM\n#define __ASM __asm\n#endif\n\n/** \\brief Recommend that function should be inlined by the compiler. */\n#ifndef __INLINE\n#define __INLINE inline\n#endif\n\n/** \\brief Define a static function that may be inlined by the compiler. */\n#ifndef __STATIC_INLINE\n#define __STATIC_INLINE static inline\n#endif\n\n/** \\brief Define a static function that should be always inlined by the compiler. */\n#ifndef __STATIC_FORCEINLINE\n#define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline\n#endif\n\n/** \\brief Inform the compiler that a function does not return. */\n#ifndef __NO_RETURN\n#define __NO_RETURN __attribute__((__noreturn__))\n#endif\n\n/** \\brief Inform that a variable shall be retained in executable image. */\n#ifndef __USED\n#define __USED __attribute__((used))\n#endif\n\n/** \\brief restrict pointer qualifier to enable additional optimizations. */\n#ifndef __WEAK\n#define __WEAK __attribute__((weak))\n#endif\n\n/** \\brief specified the vector size of the variable, measured in bytes */\n#ifndef __VECTOR_SIZE\n#define __VECTOR_SIZE(x) __attribute__((vector_size(x)))\n#endif\n\n/** \\brief Request smallest possible alignment. */\n#ifndef __PACKED\n#define __PACKED __attribute__((packed, aligned(1)))\n#endif\n\n/** \\brief Request smallest possible alignment for a structure. */\n#ifndef __PACKED_STRUCT\n#define __PACKED_STRUCT struct __attribute__((packed, aligned(1)))\n#endif\n\n/** \\brief Request smallest possible alignment for a union. */\n#ifndef __PACKED_UNION\n#define __PACKED_UNION union __attribute__((packed, aligned(1)))\n#endif\n\n#ifndef __UNALIGNED_UINT16_WRITE\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wpacked\"\n#pragma GCC diagnostic ignored \"-Wattributes\"\n/** \\brief Packed struct for unaligned uint16_t write access */\n__PACKED_STRUCT        T_UINT16_WRITE { uint16_t v; };\n#pragma GCC diagnostic pop\n/** \\brief Pointer for unaligned write of a uint16_t variable. */\n#define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))\n#endif\n\n#ifndef __UNALIGNED_UINT16_READ\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wpacked\"\n#pragma GCC diagnostic ignored \"-Wattributes\"\n/** \\brief Packed struct for unaligned uint16_t read access */\n__PACKED_STRUCT        T_UINT16_READ { uint16_t v; };\n#pragma GCC diagnostic pop\n/** \\brief Pointer for unaligned read of a uint16_t variable. */\n#define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)\n#endif\n\n#ifndef __UNALIGNED_UINT32_WRITE\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wpacked\"\n#pragma GCC diagnostic ignored \"-Wattributes\"\n/** \\brief Packed struct for unaligned uint32_t write access */\n__PACKED_STRUCT        T_UINT32_WRITE { uint32_t v; };\n#pragma GCC diagnostic pop\n/** \\brief Pointer for unaligned write of a uint32_t variable. */\n#define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))\n#endif\n\n#ifndef __UNALIGNED_UINT32_READ\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wpacked\"\n#pragma GCC diagnostic ignored \"-Wattributes\"\n/** \\brief Packed struct for unaligned uint32_t read access */\n__PACKED_STRUCT        T_UINT32_READ { uint32_t v; };\n#pragma GCC diagnostic pop\n/** \\brief Pointer for unaligned read of a uint32_t variable. */\n#define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)\n#endif\n\n/** \\brief Minimum `x` bytes alignment for a variable. */\n#ifndef __ALIGNED\n#define __ALIGNED(x) __attribute__((aligned(x)))\n#endif\n\n/** \\brief restrict pointer qualifier to enable additional optimizations. */\n#ifndef __RESTRICT\n#define __RESTRICT __restrict\n#endif\n\n/** \\brief Barrier to prevent compiler from reordering instructions. */\n#ifndef __COMPILER_BARRIER\n#define __COMPILER_BARRIER() __ASM volatile(\"\" ::: \"memory\")\n#endif\n\n/** \\brief provide the compiler with branch prediction information, the branch is usually true */\n#ifndef __USUALLY\n#define __USUALLY(exp) __builtin_expect((exp), 1)\n#endif\n\n/** \\brief provide the compiler with branch prediction information, the branch is rarely true */\n#ifndef __RARELY\n#define __RARELY(exp) __builtin_expect((exp), 0)\n#endif\n\n/** \\brief Use this attribute to indicate that the specified function is an interrupt handler. */\n#ifndef __INTERRUPT\n#define __INTERRUPT __attribute__((interrupt))\n#endif\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_CompilerControl */\n\n/* IO definitions (access restrictions to peripheral registers) */\n/**\n * \\defgroup NMSIS_Core_PeriphAccess     Peripheral Access\n * \\brief  Naming conventions and optional features for accessing peripherals.\n *\n * The section below describes the naming conventions, requirements, and optional features\n * for accessing device specific peripherals.\n * Most of the rules also apply to the core peripherals.\n *\n * The **Device Header File <device.h>** contains typically these definition\n * and also includes the core specific header files.\n *\n * @{\n */\n/** \\brief Defines 'read only' permissions */\n#ifdef __cplusplus\n#define __I volatile\n#else\n#define __I volatile const\n#endif\n/** \\brief Defines 'write only' permissions */\n#define __O volatile\n/** \\brief Defines 'read / write' permissions */\n#define __IO volatile\n\n/* following defines should be used for structure members */\n/** \\brief Defines 'read only' structure member permissions */\n#define __IM volatile const\n/** \\brief Defines 'write only' structure member permissions */\n#define __OM volatile\n/** \\brief Defines 'read/write' structure member permissions */\n#define __IOM volatile\n\n/**\n * \\brief   Mask and shift a bit field value for use in a register bit range.\n * \\details The macro \\ref _VAL2FLD uses the #define's _Pos and _Msk of the related bit\n * field to shift bit-field values for assigning to a register.\n *\n * **Example**:\n * \\code\n * ECLIC->CFG = _VAL2FLD(CLIC_CLICCFG_NLBIT, 3);\n * \\endcode\n * \\param[in] field  Name of the register bit field.\n * \\param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.\n * \\return           Masked and shifted value.\n */\n#define _VAL2FLD(field, value) (((uint32_t)(value) << field##_Pos) & field##_Msk)\n\n/**\n * \\brief   Mask and shift a register value to extract a bit filed value.\n * \\details The macro \\ref _FLD2VAL uses the #define's _Pos and _Msk of the related bit\n * field to extract the value of a bit field from a register.\n *\n * **Example**:\n * \\code\n * nlbits = _FLD2VAL(CLIC_CLICCFG_NLBIT, ECLIC->CFG);\n * \\endcode\n * \\param[in] field  Name of the register bit field.\n * \\param[in] value  Value of register. This parameter is interpreted as an uint32_t type.\n * \\return           Masked and shifted bit field value.\n */\n#define _FLD2VAL(field, value) (((uint32_t)(value)&field##_Msk) >> field##_Pos)\n\n  /** @} */ /* end of group NMSIS_Core_PeriphAccess */\n\n#ifdef __cplusplus\n}\n#endif\n#endif /* __NMSIS_GCC_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/NMSIS/Core/Include/nmsis_version.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __NMSIS_VERSION_H\n#define __NMSIS_VERSION_H\n\n/**\n * \\defgroup NMSIS_Core_VersionControl    Version Control\n * \\ingroup  NMSIS_Core\n * \\brief    Version \\#define symbols for NMSIS release specific C/C++ source code\n * \\details\n *\n * We followed the [semantic versioning 2.0.0](https://semver.org/) to control NMSIS version.\n * The version format is **MAJOR.MINOR.PATCH**, increment the:\n * 1. MAJOR version when you make incompatible API changes,\n * 2. MINOR version when you add functionality in a backwards compatible manner, and\n * 3. PATCH version when you make backwards compatible bug fixes.\n *\n * The header file `nmsis_version.h` is included by each core header so that these definitions are available.\n *\n * **Example Usage for NMSIS Version Check**:\n * \\code\n *   #if defined(__NMSIS_VERSION) && (__NMSIS_VERSION >= 0x00010105)\n *      #warning \"Yes, we have NMSIS 1.1.5 or later\"\n *   #else\n *      #error \"We need NMSIS 1.1.5 or later!\"\n *   #endif\n * \\endcode\n *\n * @{\n */\n\n/*!\n * \\file     nmsis_version.h\n * \\brief    NMSIS Version definitions\n **/\n\n/**\n * \\brief   Represent the NMSIS major version\n * \\details\n * The NMSIS major version can be used to\n * differentiate between NMSIS major releases.\n * */\n#define __NMSIS_VERSION_MAJOR (1U)\n\n/**\n * \\brief   Represent the NMSIS minor version\n * \\details\n * The NMSIS minor version can be used to\n * query a NMSIS release update including new features.\n *\n **/\n#define __NMSIS_VERSION_MINOR (0U)\n\n/**\n * \\brief   Represent the NMSIS patch version\n * \\details\n * The NMSIS patch version can be used to\n * show bug fixes in this package.\n **/\n#define __NMSIS_VERSION_PATCH (0U)\n/**\n * \\brief   Represent the NMSIS Version\n * \\details\n * NMSIS Version format: **MAJOR.MINOR.PATCH**\n * * MAJOR: \\ref __NMSIS_VERSION_MAJOR, stored in `bits [31:16]` of \\ref __NMSIS_VERSION\n * * MINOR: \\ref __NMSIS_VERSION_MINOR, stored in `bits [15:8]` of \\ref __NMSIS_VERSION\n * * PATCH: \\ref __NMSIS_VERSION_PATCH, stored in `bits [7:0]` of \\ref __NMSIS_VERSION\n **/\n#define __NMSIS_VERSION ((__NMSIS_VERSION_MAJOR << 16U) | (__NMSIS_VERSION_MINOR << 8) | __NMSIS_VERSION_PATCH)\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_VersionControl */\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/NMSIS/Core/Include/riscv_bits.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __RISCV_BITS_H__\n#define __RISCV_BITS_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if __riscv_xlen == 64\n#define SLL32        sllw\n#define STORE        sd\n#define LOAD         ld\n#define LWU          lwu\n#define LOG_REGBYTES 3\n#else\n#define SLL32        sll\n#define STORE        sw\n#define LOAD         lw\n#define LWU          lw\n#define LOG_REGBYTES 2\n#endif /* __riscv_xlen */\n\n#define REGBYTES (1 << LOG_REGBYTES)\n#ifdef __riscv_flen\n#if __riscv_flen == 64\n#define FPSTORE        fsd\n#define FPLOAD         fld\n#define LOG_FPREGBYTES 3\n#else\n#define FPSTORE        fsw\n#define FPLOAD         flw\n#define LOG_FPREGBYTES 2\n#endif /* __riscv_flen */\n#endif\n\n#define FPREGBYTES (1 << LOG_FPREGBYTES)\n\n#define __rv_likely(x)   __builtin_expect((x), 1)\n#define __rv_unlikely(x) __builtin_expect((x), 0)\n\n#define __RV_ROUNDUP(a, b)   ((((a)-1) / (b) + 1) * (b))\n#define __RV_ROUNDDOWN(a, b) ((a) / (b) * (b))\n\n#define __RV_MAX(a, b)        ((a) > (b) ? (a) : (b))\n#define __RV_MIN(a, b)        ((a) < (b) ? (a) : (b))\n#define __RV_CLAMP(a, lo, hi) MIN(MAX(a, lo), hi)\n\n#define __RV_EXTRACT_FIELD(val, which)          (((val) & (which)) / ((which) & ~((which)-1)))\n#define __RV_INSERT_FIELD(val, which, fieldval) (((val) & ~(which)) | ((fieldval) * ((which) & ~((which)-1))))\n\n#ifdef __ASSEMBLY__\n#define _AC(X, Y) X\n#define _AT(T, X) X\n#else\n#define __AC(X, Y) (X##Y)\n#define _AC(X, Y)  __AC(X, Y)\n#define _AT(T, X)  ((T)(X))\n#endif /* __ASSEMBLY__ */\n\n#define _UL(x)  (_AC(x, UL))\n#define _ULL(x) (_AC(x, ULL))\n\n#define _BITUL(x)  (_UL(1) << (x))\n#define _BITULL(x) (_ULL(1) << (x))\n\n#define UL(x)  (_UL(x))\n#define ULL(x) (_ULL(x))\n\n#define STR(x)       XSTR(x)\n#define XSTR(x)      #x\n#define __STR(s)     #s\n#define STRINGIFY(s) __STR(s)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /** __RISCV_BITS_H__  */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/NMSIS/Core/Include/riscv_encoding.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __RISCV_ENCODING_H__\n#define __RISCV_ENCODING_H__\n\n#include \"riscv_bits.h\"\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n/**\n * \\defgroup NMSIS_Core_CSR_Encoding    Core CSR Encodings\n * \\ingroup  NMSIS_Core\n * \\brief    NMSIS Core CSR Encodings\n * \\details\n *\n * The following macros are used for CSR encodings\n *   @{\n */\n#define MSTATUS_UIE  0x00000001\n#define MSTATUS_SIE  0x00000002\n#define MSTATUS_HIE  0x00000004\n#define MSTATUS_MIE  0x00000008\n#define MSTATUS_UPIE 0x00000010\n#define MSTATUS_SPIE 0x00000020\n#define MSTATUS_HPIE 0x00000040\n#define MSTATUS_MPIE 0x00000080\n#define MSTATUS_SPP  0x00000100\n#define MSTATUS_MPP  0x00001800\n#define MSTATUS_FS   0x00006000\n#define MSTATUS_XS   0x00018000\n#define MSTATUS_MPRV 0x00020000\n#define MSTATUS_PUM  0x00040000\n#define MSTATUS_MXR  0x00080000\n#define MSTATUS_VM   0x1F000000\n#define MSTATUS32_SD 0x80000000\n#define MSTATUS64_SD 0x8000000000000000\n\n#define MSTATUS_FS_INITIAL 0x00002000\n#define MSTATUS_FS_CLEAN   0x00004000\n#define MSTATUS_FS_DIRTY   0x00006000\n\n#define SSTATUS_UIE  0x00000001\n#define SSTATUS_SIE  0x00000002\n#define SSTATUS_UPIE 0x00000010\n#define SSTATUS_SPIE 0x00000020\n#define SSTATUS_SPP  0x00000100\n#define SSTATUS_FS   0x00006000\n#define SSTATUS_XS   0x00018000\n#define SSTATUS_PUM  0x00040000\n#define SSTATUS32_SD 0x80000000\n#define SSTATUS64_SD 0x8000000000000000\n\n#define CSR_MCACHE_CTL_IE 0x00000001\n#define CSR_MCACHE_CTL_DE 0x00010000\n\n#define DCSR_XDEBUGVER (3U << 30)\n#define DCSR_NDRESET   (1 << 29)\n#define DCSR_FULLRESET (1 << 28)\n#define DCSR_EBREAKM   (1 << 15)\n#define DCSR_EBREAKH   (1 << 14)\n#define DCSR_EBREAKS   (1 << 13)\n#define DCSR_EBREAKU   (1 << 12)\n#define DCSR_STOPCYCLE (1 << 10)\n#define DCSR_STOPTIME  (1 << 9)\n#define DCSR_CAUSE     (7 << 6)\n#define DCSR_DEBUGINT  (1 << 5)\n#define DCSR_HALT      (1 << 3)\n#define DCSR_STEP      (1 << 2)\n#define DCSR_PRV       (3 << 0)\n\n#define DCSR_CAUSE_NONE     0\n#define DCSR_CAUSE_SWBP     1\n#define DCSR_CAUSE_HWBP     2\n#define DCSR_CAUSE_DEBUGINT 3\n#define DCSR_CAUSE_STEP     4\n#define DCSR_CAUSE_HALT     5\n\n#define MCONTROL_TYPE(xlen)    (0xfULL << ((xlen)-4))\n#define MCONTROL_DMODE(xlen)   (1ULL << ((xlen)-5))\n#define MCONTROL_MASKMAX(xlen) (0x3fULL << ((xlen)-11))\n\n#define MCONTROL_SELECT  (1 << 19)\n#define MCONTROL_TIMING  (1 << 18)\n#define MCONTROL_ACTION  (0x3f << 12)\n#define MCONTROL_CHAIN   (1 << 11)\n#define MCONTROL_MATCH   (0xf << 7)\n#define MCONTROL_M       (1 << 6)\n#define MCONTROL_H       (1 << 5)\n#define MCONTROL_S       (1 << 4)\n#define MCONTROL_U       (1 << 3)\n#define MCONTROL_EXECUTE (1 << 2)\n#define MCONTROL_STORE   (1 << 1)\n#define MCONTROL_LOAD    (1 << 0)\n\n#define MCONTROL_TYPE_NONE  0\n#define MCONTROL_TYPE_MATCH 2\n\n#define MCONTROL_ACTION_DEBUG_EXCEPTION 0\n#define MCONTROL_ACTION_DEBUG_MODE      1\n#define MCONTROL_ACTION_TRACE_START     2\n#define MCONTROL_ACTION_TRACE_STOP      3\n#define MCONTROL_ACTION_TRACE_EMIT      4\n\n#define MCONTROL_MATCH_EQUAL     0\n#define MCONTROL_MATCH_NAPOT     1\n#define MCONTROL_MATCH_GE        2\n#define MCONTROL_MATCH_LT        3\n#define MCONTROL_MATCH_MASK_LOW  4\n#define MCONTROL_MATCH_MASK_HIGH 5\n\n#define MIP_SSIP (1 << IRQ_S_SOFT)\n#define MIP_HSIP (1 << IRQ_H_SOFT)\n#define MIP_MSIP (1 << IRQ_M_SOFT)\n#define MIP_STIP (1 << IRQ_S_TIMER)\n#define MIP_HTIP (1 << IRQ_H_TIMER)\n#define MIP_MTIP (1 << IRQ_M_TIMER)\n#define MIP_SEIP (1 << IRQ_S_EXT)\n#define MIP_HEIP (1 << IRQ_H_EXT)\n#define MIP_MEIP (1 << IRQ_M_EXT)\n\n#define MIE_SSIE MIP_SSIP\n#define MIE_HSIE MIP_HSIP\n#define MIE_MSIE MIP_MSIP\n#define MIE_STIE MIP_STIP\n#define MIE_HTIE MIP_HTIP\n#define MIE_MTIE MIP_MTIP\n#define MIE_SEIE MIP_SEIP\n#define MIE_HEIE MIP_HEIP\n#define MIE_MEIE MIP_MEIP\n\n/* === Nuclei custom CSR bit mask === */\n\n#define WFE_WFE               (0x1)\n#define TXEVT_TXEVT           (0x1)\n#define SLEEPVALUE_SLEEPVALUE (0x1)\n\n#define MCOUNTINHIBIT_IR (1 << 2)\n#define MCOUNTINHIBIT_CY (1 << 0)\n\n#define MILM_CTL_ILM_BPA (((1ULL << ((__riscv_xlen)-10)) - 1) << 10)\n#define MILM_CTL_ILM_EN  (1 << 0)\n\n#define MDLM_CTL_DLM_BPA (((1ULL << ((__riscv_xlen)-10)) - 1) << 10)\n#define MDLM_CTL_DLM_EN  (1 << 0)\n\n#define MSUBM_PTYP (0x3 << 8)\n#define MSUBM_TYP  (0x3 << 6)\n\n#define MDCAUSE_MDCAUSE (0x3)\n\n#define MMISC_CTL_NMI_CAUSE_FFF (1 << 9)\n#define MMISC_CTL_MISALIGN      (1 << 6)\n#define MMISC_CTL_BPU           (1 << 3)\n\n#define MCACHE_CTL_IC_EN       (1 << 0)\n#define MCACHE_CTL_IC_SCPD_MOD (1 << 1)\n#define MCACHE_CTL_DC_EN       (1 << 16)\n\n#define MTVT2_MTVT2EN           (1 << 0)\n#define MTVT2_COMMON_CODE_ENTRY (((1ULL << ((__riscv_xlen)-2)) - 1) << 2)\n\n#define MCFG_INFO_TEE    (1 << 0)\n#define MCFG_INFO_ECC    (1 << 1)\n#define MCFG_INFO_CLIC   (1 << 2)\n#define MCFG_INFO_PLIC   (1 << 3)\n#define MCFG_INFO_FIO    (1 << 4)\n#define MCFG_INFO_PPI    (1 << 5)\n#define MCFG_INFO_NICE   (1 << 6)\n#define MCFG_INFO_ILM    (1 << 7)\n#define MCFG_INFO_DLM    (1 << 8)\n#define MCFG_INFO_ICACHE (1 << 9)\n#define MCFG_INFO_DCACHE (1 << 10)\n\n#define MICFG_IC_SET    (0xF << 0)\n#define MICFG_IC_WAY    (0x7 << 4)\n#define MICFG_IC_LSIZE  (0x7 << 7)\n#define MICFG_ILM_SIZE  (0x1F << 16)\n#define MICFG_ILM_XONLY (1 << 21)\n\n#define MDCFG_DC_SET   (0xF << 0)\n#define MDCFG_DC_WAY   (0x7 << 4)\n#define MDCFG_DC_LSIZE (0x7 << 7)\n#define MDCFG_DLM_SIZE (0x1F << 16)\n\n#define MPPICFG_INFO_PPI_SIZE (0x1F << 1)\n#define MPPICFG_INFO_PPI_BPA  (((1ULL << ((__riscv_xlen)-10)) - 1) << 10)\n\n#define MFIOCFG_INFO_FIO_SIZE (0x1F << 1)\n#define MFIOCFG_INFO_FIO_BPA  (((1ULL << ((__riscv_xlen)-10)) - 1) << 10)\n\n#define SIP_SSIP MIP_SSIP\n#define SIP_STIP MIP_STIP\n\n#define PRV_U 0\n#define PRV_S 1\n#define PRV_H 2\n#define PRV_M 3\n\n#define VM_MBARE 0\n#define VM_MBB   1\n#define VM_MBBID 2\n#define VM_SV32  8\n#define VM_SV39  9\n#define VM_SV48  10\n\n#define IRQ_S_SOFT  1\n#define IRQ_H_SOFT  2\n#define IRQ_M_SOFT  3\n#define IRQ_S_TIMER 5\n#define IRQ_H_TIMER 6\n#define IRQ_M_TIMER 7\n#define IRQ_S_EXT   9\n#define IRQ_H_EXT   10\n#define IRQ_M_EXT   11\n#define IRQ_COP     12\n#define IRQ_HOST    13\n\n#define DEFAULT_RSTVEC     0x00001000\n#define DEFAULT_NMIVEC     0x00001004\n#define DEFAULT_MTVEC      0x00001010\n#define CONFIG_STRING_ADDR 0x0000100C\n#define EXT_IO_BASE        0x40000000\n#define DRAM_BASE          0x80000000\n\n/* === FPU FRM Rounding Mode === */\n/** FPU Round to Nearest, ties to Even*/\n#define FRM_RNDMODE_RNE 0x0\n/** FPU Round Towards Zero */\n#define FRM_RNDMODE_RTZ 0x1\n/** FPU Round Down (towards -inf) */\n#define FRM_RNDMODE_RDN 0x2\n/** FPU Round Up (towards +inf) */\n#define FRM_RNDMODE_RUP 0x3\n/** FPU Round to nearest, ties to Max Magnitude */\n#define FRM_RNDMODE_RMM 0x4\n/**\n * In instruction's rm, selects dynamic rounding mode.\n * In Rounding Mode register, Invalid */\n#define FRM_RNDMODE_DYN 0x7\n\n/* === FPU FFLAGS Accrued Exceptions === */\n/** FPU Inexact */\n#define FFLAGS_AE_NX (1 << 0)\n/** FPU Underflow */\n#define FFLAGS_AE_UF (1 << 1)\n/** FPU Overflow */\n#define FFLAGS_AE_OF (1 << 2)\n/** FPU Divide by Zero */\n#define FFLAGS_AE_DZ (1 << 3)\n/** FPU Invalid Operation */\n#define FFLAGS_AE_NV (1 << 4)\n\n/** Floating Point Register f0-f31, eg. f0 -> FREG(0) */\n#define FREG(idx) f##idx\n\n/* === PMP CFG Bits === */\n#define PMP_R       0x01\n#define PMP_W       0x02\n#define PMP_X       0x04\n#define PMP_A       0x18\n#define PMP_A_TOR   0x08\n#define PMP_A_NA4   0x10\n#define PMP_A_NAPOT 0x18\n#define PMP_L       0x80\n\n#define PMP_SHIFT 2\n#define PMP_COUNT 16\n\n// page table entry (PTE) fields\n#define PTE_V    0x001 // Valid\n#define PTE_R    0x002 // Read\n#define PTE_W    0x004 // Write\n#define PTE_X    0x008 // Execute\n#define PTE_U    0x010 // User\n#define PTE_G    0x020 // Global\n#define PTE_A    0x040 // Accessed\n#define PTE_D    0x080 // Dirty\n#define PTE_SOFT 0x300 // Reserved for Software\n\n#define PTE_PPN_SHIFT 10\n\n#define PTE_TABLE(PTE) (((PTE) & (PTE_V | PTE_R | PTE_W | PTE_X)) == PTE_V)\n\n#ifdef __riscv\n\n#ifdef __riscv64\n#define MSTATUS_SD         MSTATUS64_SD\n#define SSTATUS_SD         SSTATUS64_SD\n#define RISCV_PGLEVEL_BITS 9\n#else\n#define MSTATUS_SD         MSTATUS32_SD\n#define SSTATUS_SD         SSTATUS32_SD\n#define RISCV_PGLEVEL_BITS 10\n#endif /* __riscv64 */\n\n#define RISCV_PGSHIFT 12\n#define RISCV_PGSIZE  (1 << RISCV_PGSHIFT)\n\n#endif /* __riscv */\n\n#define DOWNLOAD_MODE_FLASHXIP 0\n#define DOWNLOAD_MODE_FLASH    1\n#define DOWNLOAD_MODE_ILM      2\n#define DOWNLOAD_MODE_DDR      3\n\n/**\n * \\defgroup NMSIS_Core_CSR_Registers    Core CSR Registers\n * \\ingroup  NMSIS_Core\n * \\brief    NMSIS Core CSR Register Definitions\n * \\details\n *\n * The following macros are used for CSR Register Defintions.\n *   @{\n */\n/* === Standard RISC-V CSR Registers === */\n#define CSR_USTATUS        0x0\n#define CSR_FFLAGS         0x1\n#define CSR_FRM            0x2\n#define CSR_FCSR           0x3\n#define CSR_CYCLE          0xc00\n#define CSR_TIME           0xc01\n#define CSR_INSTRET        0xc02\n#define CSR_HPMCOUNTER3    0xc03\n#define CSR_HPMCOUNTER4    0xc04\n#define CSR_HPMCOUNTER5    0xc05\n#define CSR_HPMCOUNTER6    0xc06\n#define CSR_HPMCOUNTER7    0xc07\n#define CSR_HPMCOUNTER8    0xc08\n#define CSR_HPMCOUNTER9    0xc09\n#define CSR_HPMCOUNTER10   0xc0a\n#define CSR_HPMCOUNTER11   0xc0b\n#define CSR_HPMCOUNTER12   0xc0c\n#define CSR_HPMCOUNTER13   0xc0d\n#define CSR_HPMCOUNTER14   0xc0e\n#define CSR_HPMCOUNTER15   0xc0f\n#define CSR_HPMCOUNTER16   0xc10\n#define CSR_HPMCOUNTER17   0xc11\n#define CSR_HPMCOUNTER18   0xc12\n#define CSR_HPMCOUNTER19   0xc13\n#define CSR_HPMCOUNTER20   0xc14\n#define CSR_HPMCOUNTER21   0xc15\n#define CSR_HPMCOUNTER22   0xc16\n#define CSR_HPMCOUNTER23   0xc17\n#define CSR_HPMCOUNTER24   0xc18\n#define CSR_HPMCOUNTER25   0xc19\n#define CSR_HPMCOUNTER26   0xc1a\n#define CSR_HPMCOUNTER27   0xc1b\n#define CSR_HPMCOUNTER28   0xc1c\n#define CSR_HPMCOUNTER29   0xc1d\n#define CSR_HPMCOUNTER30   0xc1e\n#define CSR_HPMCOUNTER31   0xc1f\n#define CSR_SSTATUS        0x100\n#define CSR_SIE            0x104\n#define CSR_STVEC          0x105\n#define CSR_SSCRATCH       0x140\n#define CSR_SEPC           0x141\n#define CSR_SCAUSE         0x142\n#define CSR_SBADADDR       0x143\n#define CSR_SIP            0x144\n#define CSR_SPTBR          0x180\n#define CSR_MSTATUS        0x300\n#define CSR_MISA           0x301\n#define CSR_MEDELEG        0x302\n#define CSR_MIDELEG        0x303\n#define CSR_MIE            0x304\n#define CSR_MTVEC          0x305\n#define CSR_MCOUNTEREN     0x306\n#define CSR_MSCRATCH       0x340\n#define CSR_MEPC           0x341\n#define CSR_MCAUSE         0x342\n#define CSR_MBADADDR       0x343\n#define CSR_MTVAL          0x343\n#define CSR_MIP            0x344\n#define CSR_PMPCFG0        0x3a0\n#define CSR_PMPCFG1        0x3a1\n#define CSR_PMPCFG2        0x3a2\n#define CSR_PMPCFG3        0x3a3\n#define CSR_PMPADDR0       0x3b0\n#define CSR_PMPADDR1       0x3b1\n#define CSR_PMPADDR2       0x3b2\n#define CSR_PMPADDR3       0x3b3\n#define CSR_PMPADDR4       0x3b4\n#define CSR_PMPADDR5       0x3b5\n#define CSR_PMPADDR6       0x3b6\n#define CSR_PMPADDR7       0x3b7\n#define CSR_PMPADDR8       0x3b8\n#define CSR_PMPADDR9       0x3b9\n#define CSR_PMPADDR10      0x3ba\n#define CSR_PMPADDR11      0x3bb\n#define CSR_PMPADDR12      0x3bc\n#define CSR_PMPADDR13      0x3bd\n#define CSR_PMPADDR14      0x3be\n#define CSR_PMPADDR15      0x3bf\n#define CSR_TSELECT        0x7a0\n#define CSR_TDATA1         0x7a1\n#define CSR_TDATA2         0x7a2\n#define CSR_TDATA3         0x7a3\n#define CSR_DCSR           0x7b0\n#define CSR_DPC            0x7b1\n#define CSR_DSCRATCH       0x7b2\n#define CSR_MCYCLE         0xb00\n#define CSR_MINSTRET       0xb02\n#define CSR_MHPMCOUNTER3   0xb03\n#define CSR_MHPMCOUNTER4   0xb04\n#define CSR_MHPMCOUNTER5   0xb05\n#define CSR_MHPMCOUNTER6   0xb06\n#define CSR_MHPMCOUNTER7   0xb07\n#define CSR_MHPMCOUNTER8   0xb08\n#define CSR_MHPMCOUNTER9   0xb09\n#define CSR_MHPMCOUNTER10  0xb0a\n#define CSR_MHPMCOUNTER11  0xb0b\n#define CSR_MHPMCOUNTER12  0xb0c\n#define CSR_MHPMCOUNTER13  0xb0d\n#define CSR_MHPMCOUNTER14  0xb0e\n#define CSR_MHPMCOUNTER15  0xb0f\n#define CSR_MHPMCOUNTER16  0xb10\n#define CSR_MHPMCOUNTER17  0xb11\n#define CSR_MHPMCOUNTER18  0xb12\n#define CSR_MHPMCOUNTER19  0xb13\n#define CSR_MHPMCOUNTER20  0xb14\n#define CSR_MHPMCOUNTER21  0xb15\n#define CSR_MHPMCOUNTER22  0xb16\n#define CSR_MHPMCOUNTER23  0xb17\n#define CSR_MHPMCOUNTER24  0xb18\n#define CSR_MHPMCOUNTER25  0xb19\n#define CSR_MHPMCOUNTER26  0xb1a\n#define CSR_MHPMCOUNTER27  0xb1b\n#define CSR_MHPMCOUNTER28  0xb1c\n#define CSR_MHPMCOUNTER29  0xb1d\n#define CSR_MHPMCOUNTER30  0xb1e\n#define CSR_MHPMCOUNTER31  0xb1f\n#define CSR_MUCOUNTEREN    0x320\n#define CSR_MSCOUNTEREN    0x321\n#define CSR_MHPMEVENT3     0x323\n#define CSR_MHPMEVENT4     0x324\n#define CSR_MHPMEVENT5     0x325\n#define CSR_MHPMEVENT6     0x326\n#define CSR_MHPMEVENT7     0x327\n#define CSR_MHPMEVENT8     0x328\n#define CSR_MHPMEVENT9     0x329\n#define CSR_MHPMEVENT10    0x32a\n#define CSR_MHPMEVENT11    0x32b\n#define CSR_MHPMEVENT12    0x32c\n#define CSR_MHPMEVENT13    0x32d\n#define CSR_MHPMEVENT14    0x32e\n#define CSR_MHPMEVENT15    0x32f\n#define CSR_MHPMEVENT16    0x330\n#define CSR_MHPMEVENT17    0x331\n#define CSR_MHPMEVENT18    0x332\n#define CSR_MHPMEVENT19    0x333\n#define CSR_MHPMEVENT20    0x334\n#define CSR_MHPMEVENT21    0x335\n#define CSR_MHPMEVENT22    0x336\n#define CSR_MHPMEVENT23    0x337\n#define CSR_MHPMEVENT24    0x338\n#define CSR_MHPMEVENT25    0x339\n#define CSR_MHPMEVENT26    0x33a\n#define CSR_MHPMEVENT27    0x33b\n#define CSR_MHPMEVENT28    0x33c\n#define CSR_MHPMEVENT29    0x33d\n#define CSR_MHPMEVENT30    0x33e\n#define CSR_MHPMEVENT31    0x33f\n#define CSR_MVENDORID      0xf11\n#define CSR_MARCHID        0xf12\n#define CSR_MIMPID         0xf13\n#define CSR_MHARTID        0xf14\n#define CSR_CYCLEH         0xc80\n#define CSR_TIMEH          0xc81\n#define CSR_INSTRETH       0xc82\n#define CSR_HPMCOUNTER3H   0xc83\n#define CSR_HPMCOUNTER4H   0xc84\n#define CSR_HPMCOUNTER5H   0xc85\n#define CSR_HPMCOUNTER6H   0xc86\n#define CSR_HPMCOUNTER7H   0xc87\n#define CSR_HPMCOUNTER8H   0xc88\n#define CSR_HPMCOUNTER9H   0xc89\n#define CSR_HPMCOUNTER10H  0xc8a\n#define CSR_HPMCOUNTER11H  0xc8b\n#define CSR_HPMCOUNTER12H  0xc8c\n#define CSR_HPMCOUNTER13H  0xc8d\n#define CSR_HPMCOUNTER14H  0xc8e\n#define CSR_HPMCOUNTER15H  0xc8f\n#define CSR_HPMCOUNTER16H  0xc90\n#define CSR_HPMCOUNTER17H  0xc91\n#define CSR_HPMCOUNTER18H  0xc92\n#define CSR_HPMCOUNTER19H  0xc93\n#define CSR_HPMCOUNTER20H  0xc94\n#define CSR_HPMCOUNTER21H  0xc95\n#define CSR_HPMCOUNTER22H  0xc96\n#define CSR_HPMCOUNTER23H  0xc97\n#define CSR_HPMCOUNTER24H  0xc98\n#define CSR_HPMCOUNTER25H  0xc99\n#define CSR_HPMCOUNTER26H  0xc9a\n#define CSR_HPMCOUNTER27H  0xc9b\n#define CSR_HPMCOUNTER28H  0xc9c\n#define CSR_HPMCOUNTER29H  0xc9d\n#define CSR_HPMCOUNTER30H  0xc9e\n#define CSR_HPMCOUNTER31H  0xc9f\n#define CSR_MCYCLEH        0xb80\n#define CSR_MINSTRETH      0xb82\n#define CSR_MHPMCOUNTER3H  0xb83\n#define CSR_MHPMCOUNTER4H  0xb84\n#define CSR_MHPMCOUNTER5H  0xb85\n#define CSR_MHPMCOUNTER6H  0xb86\n#define CSR_MHPMCOUNTER7H  0xb87\n#define CSR_MHPMCOUNTER8H  0xb88\n#define CSR_MHPMCOUNTER9H  0xb89\n#define CSR_MHPMCOUNTER10H 0xb8a\n#define CSR_MHPMCOUNTER11H 0xb8b\n#define CSR_MHPMCOUNTER12H 0xb8c\n#define CSR_MHPMCOUNTER13H 0xb8d\n#define CSR_MHPMCOUNTER14H 0xb8e\n#define CSR_MHPMCOUNTER15H 0xb8f\n#define CSR_MHPMCOUNTER16H 0xb90\n#define CSR_MHPMCOUNTER17H 0xb91\n#define CSR_MHPMCOUNTER18H 0xb92\n#define CSR_MHPMCOUNTER19H 0xb93\n#define CSR_MHPMCOUNTER20H 0xb94\n#define CSR_MHPMCOUNTER21H 0xb95\n#define CSR_MHPMCOUNTER22H 0xb96\n#define CSR_MHPMCOUNTER23H 0xb97\n#define CSR_MHPMCOUNTER24H 0xb98\n#define CSR_MHPMCOUNTER25H 0xb99\n#define CSR_MHPMCOUNTER26H 0xb9a\n#define CSR_MHPMCOUNTER27H 0xb9b\n#define CSR_MHPMCOUNTER28H 0xb9c\n#define CSR_MHPMCOUNTER29H 0xb9d\n#define CSR_MHPMCOUNTER30H 0xb9e\n#define CSR_MHPMCOUNTER31H 0xb9f\n\n/* === CLIC CSR Registers === */\n#define CSR_MTVT         0x307\n#define CSR_MNXTI        0x345\n#define CSR_MINTSTATUS   0x346\n#define CSR_MSCRATCHCSW  0x348\n#define CSR_MSCRATCHCSWL 0x349\n#define CSR_MCLICBASE    0x350\n\n/* === Nuclei custom CSR Registers === */\n#define CSR_MCOUNTINHIBIT 0x320\n#define CSR_MILM_CTL      0x7C0\n#define CSR_MDLM_CTL      0x7C1\n#define CSR_MNVEC         0x7C3\n#define CSR_MSUBM         0x7C4\n#define CSR_MDCAUSE       0x7C9\n#define CSR_MCACHE_CTL    0x7CA\n#define CSR_MMISC_CTL     0x7D0\n#define CSR_MSAVESTATUS   0x7D6\n#define CSR_MSAVEEPC1     0x7D7\n#define CSR_MSAVECAUSE1   0x7D8\n#define CSR_MSAVEEPC2     0x7D9\n#define CSR_MSAVECAUSE2   0x7DA\n#define CSR_MSAVEDCAUSE1  0x7DB\n#define CSR_MSAVEDCAUSE2  0x7DC\n#define CSR_PUSHMSUBM     0x7EB\n#define CSR_MTVT2         0x7EC\n#define CSR_JALMNXTI      0x7ED\n#define CSR_PUSHMCAUSE    0x7EE\n#define CSR_PUSHMEPC      0x7EF\n#define CSR_MPPICFG_INFO  0x7F0\n#define CSR_MFIOCFG_INFO  0x7F1\n#define CSR_SLEEPVALUE    0x811\n#define CSR_TXEVT         0x812\n#define CSR_WFE           0x810\n#define CSR_MICFG_INFO    0xFC0\n#define CSR_MDCFG_INFO    0xFC1\n#define CSR_MCFG_INFO     0xFC2\n\n/** @} */ /** End of Doxygen Group NMSIS_Core_CSR_Registers **/\n\n/* Exception Code in MCAUSE CSR */\n#define CAUSE_MISALIGNED_FETCH    0x0\n#define CAUSE_FAULT_FETCH         0x1\n#define CAUSE_ILLEGAL_INSTRUCTION 0x2\n#define CAUSE_BREAKPOINT          0x3\n#define CAUSE_MISALIGNED_LOAD     0x4\n#define CAUSE_FAULT_LOAD          0x5\n#define CAUSE_MISALIGNED_STORE    0x6\n#define CAUSE_FAULT_STORE         0x7\n#define CAUSE_USER_ECALL          0x8\n#define CAUSE_SUPERVISOR_ECALL    0x9\n#define CAUSE_HYPERVISOR_ECALL    0xa\n#define CAUSE_MACHINE_ECALL       0xb\n\n/* Exception Subcode in MDCAUSE CSR */\n#define DCAUSE_FAULT_FETCH_PMP  0x1\n#define DCAUSE_FAULT_FETCH_INST 0x2\n\n#define DCAUSE_FAULT_LOAD_PMP  0x1\n#define DCAUSE_FAULT_LOAD_INST 0x2\n#define DCAUSE_FAULT_LOAD_NICE 0x3\n\n#define DCAUSE_FAULT_STORE_PMP  0x1\n#define DCAUSE_FAULT_STORE_INST 0x2\n\n#define read_fpu(reg)                                \\\n  ({                                                 \\\n    unsigned long __tmp;                             \\\n    asm volatile(\"fmv.x.w %0, \" #reg : \"=r\"(__tmp)); \\\n    __tmp;                                           \\\n  })\n\n#define write_fpu(reg, val)                                     \\\n  ({                                                            \\\n    if (__builtin_constant_p(val) && (unsigned long)(val) < 32) \\\n      asm volatile(\"fmv.w.x \" #reg \", %0\" ::\"i\"(val));          \\\n    else                                                        \\\n      asm volatile(\"fmv.w.x \" #reg \", %0\" ::\"r\"(val));          \\\n  })\n\n#define read_csr(reg)                             \\\n  ({                                              \\\n    unsigned long __tmp;                          \\\n    asm volatile(\"csrr %0, \" #reg : \"=r\"(__tmp)); \\\n    __tmp;                                        \\\n  })\n\n#define write_csr(reg, val)                                     \\\n  ({                                                            \\\n    if (__builtin_constant_p(val) && (unsigned long)(val) < 32) \\\n      asm volatile(\"csrw \" #reg \", %0\" ::\"i\"(val));             \\\n    else                                                        \\\n      asm volatile(\"csrw \" #reg \", %0\" ::\"r\"(val));             \\\n  })\n\n#define swap_csr(reg, val)                                             \\\n  ({                                                                   \\\n    unsigned long __tmp;                                               \\\n    if (__builtin_constant_p(val) && (unsigned long)(val) < 32)        \\\n      asm volatile(\"csrrw %0, \" #reg \", %1\" : \"=r\"(__tmp) : \"i\"(val)); \\\n    else                                                               \\\n      asm volatile(\"csrrw %0, \" #reg \", %1\" : \"=r\"(__tmp) : \"r\"(val)); \\\n    __tmp;                                                             \\\n  })\n\n#define set_csr(reg, bit)                                              \\\n  ({                                                                   \\\n    unsigned long __tmp;                                               \\\n    if (__builtin_constant_p(bit) && (unsigned long)(bit) < 32)        \\\n      asm volatile(\"csrrs %0, \" #reg \", %1\" : \"=r\"(__tmp) : \"i\"(bit)); \\\n    else                                                               \\\n      asm volatile(\"csrrs %0, \" #reg \", %1\" : \"=r\"(__tmp) : \"r\"(bit)); \\\n    __tmp;                                                             \\\n  })\n\n#define clear_csr(reg, bit)                                            \\\n  ({                                                                   \\\n    unsigned long __tmp;                                               \\\n    if (__builtin_constant_p(bit) && (unsigned long)(bit) < 32)        \\\n      asm volatile(\"csrrc %0, \" #reg \", %1\" : \"=r\"(__tmp) : \"i\"(bit)); \\\n    else                                                               \\\n      asm volatile(\"csrrc %0, \" #reg \", %1\" : \"=r\"(__tmp) : \"r\"(bit)); \\\n    __tmp;                                                             \\\n  })\n\n#define rdtime()    read_csr(time)\n#define rdcycle()   read_csr(cycle)\n#define rdinstret() read_csr(instret)\n\n#define ECLICINTCTLBITS 4\n\n/*ECLIC memory map */\n/* Offset */\n/* 0x0000       1B          RW        ecliccfg */\n#define ECLIC_CFG_OFFSET 0x0\n/*  0x0004       4B          R         eclicinfo */\n#define ECLIC_INFO_OFFSET 0x4\n/*  0x000B       1B          RW        mintthresh */\n#define ECLIC_MTH_OFFSET 0xB\n\n/* 0x1000+4*i   1B/input    RW        eclicintip[i] */\n#define ECLIC_INT_IP_OFFSET _AC(0x1000, UL)\n/* 0x1001+4*i   1B/input    RW        eclicintie[i] */\n#define ECLIC_INT_IE_OFFSET _AC(0x1001, UL)\n/* 0x1002+4*i   1B/input    RW        eclicintattr[i]*/\n#define ECLIC_INT_ATTR_OFFSET _AC(0x1002, UL)\n\n#define ECLIC_INT_ATTR_SHV        0x01\n#define ECLIC_INT_ATTR_TRIG_LEVEL 0x00\n#define ECLIC_INT_ATTR_TRIG_EDGE  0x02\n#define ECLIC_INT_ATTR_TRIG_POS   0x00\n#define ECLIC_INT_ATTR_TRIG_NEG   0x04\n\n/* 0x1003+4*i   1B/input    RW        eclicintctl[i] */\n#define ECLIC_INT_CTRL_OFFSET _AC(0x1003, UL)\n\n#define ECLIC_ADDR_BASE 0xd2000000\n\n#define ECLIC_CFG_NLBITS_MASK _AC(0x1E, UL)\n#define ECLIC_CFG_NLBITS_LSB  (1u)\n\n#define MSIP_HANDLER  eclic_msip_handler\n#define MTIME_HANDLER eclic_mtip_handler\n#define BWEI_HANDLER  eclic_bwei_handler\n#define PMOVI_HANDLER eclic_pmovi_handler\n\n#define TIMER_MSIP          0xFFC\n#define TIMER_MSIP_size     0x4\n#define TIMER_MTIMECMP      0x8\n#define TIMER_MTIMECMP_size 0x8\n#define TIMER_MTIME         0x0\n#define TIMER_MTIME_size    0x8\n\n#define TIMER_CTRL_ADDR   0xd1000000\n#define TIMER_REG(offset) _REG32(TIMER_CTRL_ADDR, offset)\n#define TIMER_FREQ        ((uint32_t)SystemCoreClock / 4)\n\n/** @} */ /** End of Doxygen Group NMSIS_Core_CSR_Encoding **/\n\n#ifdef __cplusplus\n}\n#endif\n#endif /* __RISCV_ENCODING_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/OS/FreeRTOS/Source/portable/GCC/port.c",
    "content": "/*\n * FreeRTOS Kernel V10.2.1\n * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * http://www.FreeRTOS.org\n * http://aws.amazon.com/freertos\n *\n * 1 tab == 4 spaces!\n */\n\n/*-----------------------------------------------------------\n * Implementation of functions defined in portable.h for the Nuclei N/NX Processor port.\n *----------------------------------------------------------*/\n\n/* Scheduler includes. */\n#include \"FreeRTOS.h\"\n#include \"task.h\"\n#include <stdio.h>\n\n// #define ENABLE_KERNEL_DEBUG\n\n#ifdef ENABLE_KERNEL_DEBUG\n#define FREERTOS_PORT_DEBUG(...) printf(__VA_ARGS__)\n#else\n#define FREERTOS_PORT_DEBUG(...)\n#endif\n\n#ifndef configSYSTICK_CLOCK_HZ\n#define configSYSTICK_CLOCK_HZ SOC_TIMER_FREQ\n#endif\n\n#ifndef configKERNEL_INTERRUPT_PRIORITY\n#define configKERNEL_INTERRUPT_PRIORITY 0\n#endif\n\n#ifndef configMAX_SYSCALL_INTERRUPT_PRIORITY\n// See function prvCheckMaxSysCallPrio and prvCalcMaxSysCallMTH\n#define configMAX_SYSCALL_INTERRUPT_PRIORITY 255\n#endif\n\n/* Constants required to check the validity of an interrupt priority. */\n#define portFIRST_USER_INTERRUPT_NUMBER (18)\n\n#define SYSTICK_TICK_CONST (configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ)\n\n/* Masks off all bits but the ECLIC MTH bits in the MTH register. */\n#define portMTH_MASK (0xFFUL)\n\n/* Constants required to set up the initial stack. */\n#define portINITIAL_MSTATUS    (MSTATUS_MPP | MSTATUS_MPIE | MSTATUS_FS_INITIAL)\n#define portINITIAL_EXC_RETURN (0xfffffffd)\n\n/* The systick is a 64-bit counter. */\n#define portMAX_BIT_NUMBER (SysTimer_MTIMER_Msk)\n\n/* A fiddle factor to estimate the number of SysTick counts that would have\noccurred while the SysTick counter is stopped during tickless idle\ncalculations. */\n#define portMISSED_COUNTS_FACTOR (45UL)\n\n/* Let the user override the pre-loading of the initial LR with the address of\nprvTaskExitError() in case it messes up unwinding of the stack in the\ndebugger. */\n#ifdef configTASK_RETURN_ADDRESS\n#define portTASK_RETURN_ADDRESS configTASK_RETURN_ADDRESS\n#else\n#define portTASK_RETURN_ADDRESS prvTaskExitError\n#endif\n\n/*\n * Setup the timer to generate the tick interrupts.  The implementation in this\n * file is weak to allow application writers to change the timer used to\n * generate the tick interrupt.\n */\nvoid vPortSetupTimerInterrupt(void);\n\n/*\n * Exception handlers.\n */\nvoid xPortSysTickHandler(void);\n\n/*\n * Start first task is a separate function so it can be tested in isolation.\n */\nextern void prvPortStartFirstTask(void) __attribute__((naked));\n\n/*\n * Used to catch tasks that attempt to return from their implementing function.\n */\nstatic void prvTaskExitError(void);\n\n#define xPortSysTickHandler eclic_mtip_handler\n\n/*-----------------------------------------------------------*/\n\n/* Each task maintains its own interrupt status in the critical nesting\nvariable. */\nstatic UBaseType_t uxCriticalNesting = 0xaaaaaaaa;\n\n/*\n * Record the real MTH calculated by the configMAX_SYSCALL_INTERRUPT_PRIORITY\n * The configMAX_SYSCALL_INTERRUPT_PRIORITY is not the left-aligned level value,\n * See equations below:\n * Level Bits number: lvlbits = min(nlbits, CLICINTCTLBITS)\n * Left align Bits number: lfabits = 8-lvlbits\n * 0 < configMAX_SYSCALL_INTERRUPT_PRIORITY <= (2^lvlbits-1)\n * uxMaxSysCallMTH = (configMAX_SYSCALL_INTERRUPT_PRIORITY << lfabits) | ((2^lfabits)-1)\n * If nlbits = 3, CLICINTCTLBITS=3, then lvlbits = 3, lfabits = 5\n * Set configMAX_SYSCALL_INTERRUPT_PRIORITY to 6\n * Then uxMaxSysCallMTH = (6<<5) | (2^5 - 1) = 223\n *\n * See function prvCheckMaxSysCallPrio and prvCalcMaxSysCallMTH\n */\nuint8_t uxMaxSysCallMTH = 255;\n\n/*\n * The number of SysTick increments that make up one tick period.\n */\n#if (configUSE_TICKLESS_IDLE == 1)\nstatic TickType_t ulTimerCountsForOneTick = 0;\n#endif /* configUSE_TICKLESS_IDLE */\n\n/*\n * The maximum number of tick periods that can be suppressed is limited by the\n * 24 bit resolution of the SysTick timer.\n */\n#if (configUSE_TICKLESS_IDLE == 1)\nstatic TickType_t xMaximumPossibleSuppressedTicks = 0;\n#endif /* configUSE_TICKLESS_IDLE */\n\n/*\n * Compensate for the CPU cycles that pass while the SysTick is stopped (low\n * power functionality only.\n */\n#if (configUSE_TICKLESS_IDLE == 1)\nstatic TickType_t ulStoppedTimerCompensation = 0;\n#endif /* configUSE_TICKLESS_IDLE */\n\n/*\n * Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure\n * FreeRTOS API functions are not called from interrupts that have been assigned\n * a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY.\n */\n#if (configASSERT_DEFINED == 1)\nstatic uint8_t ucMaxSysCallPriority = 0;\n#endif /* configASSERT_DEFINED */\n\n/*-----------------------------------------------------------*/\n\n/*\n * See header file for description.\n * As per the standard RISC-V ABI pxTopcOfStack is passed in in a0, pxCode in\n * a1, and pvParameters in a2.  The new top of stack is passed out in a0.\n *\n * RISC-V maps registers to ABI names as follows (X1 to X31 integer registers\n * for the 'I' profile, X1 to X15 for the 'E' profile, currently I assumed).\n *\n * Register        ABI Name    Description                         Saver\n * x0              zero        Hard-wired zero                     -\n * x1              ra          Return address                      Caller\n * x2              sp          Stack pointer                       Callee\n * x3              gp          Global pointer                      -\n * x4              tp          Thread pointer                      -\n * x5-7            t0-2        Temporaries                         Caller\n * x8              s0/fp       Saved register/Frame pointer        Callee\n * x9              s1          Saved register                      Callee\n * x10-11          a0-1        Function Arguments/return values    Caller\n * x12-17          a2-7        Function arguments                  Caller\n * x18-27          s2-11       Saved registers                     Callee\n * x28-31          t3-6        Temporaries                         Caller\n *\n * The RISC-V context is saved RTOS tasks in the following stack frame,\n * where the global and thread pointers are currently assumed to be constant so\n * are not saved:\n *\n * mstatus\n * #ifndef __riscv_32e\n * x31\n * x30\n * x29\n * x28\n * x27\n * x26\n * x25\n * x24\n * x23\n * x22\n * x21\n * x20\n * x19\n * x18\n * x17\n * x16\n * #endif\n * x15\n * x14\n * x13\n * x12\n * x11\n * pvParameters\n * x9\n * x8\n * x7\n * x6\n * x5\n * portTASK_RETURN_ADDRESS\n * pxCode\n */\nStackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters) {\n  /* Simulate the stack frame as it would be created by a context switch\n  interrupt. */\n\n  /* Offset added to account for the way the MCU uses the stack on entry/exit\n  of interrupts, and to ensure alignment. */\n  pxTopOfStack--;\n  *pxTopOfStack = portINITIAL_MSTATUS; /* MSTATUS */\n\n  /* Save code space by skipping register initialisation. */\n#ifndef __riscv_32e\n  pxTopOfStack -= 22; /* X11 - X31. */\n#else\n  pxTopOfStack -= 6; /* X11 - X15. */\n#endif\n  *pxTopOfStack = (StackType_t)pvParameters;            /* X10/A0 */\n  pxTopOfStack -= 6;                                    /* X5 - X9 */\n  *pxTopOfStack = (StackType_t)portTASK_RETURN_ADDRESS; /* RA, X1 */\n\n  pxTopOfStack--;\n  *pxTopOfStack = ((StackType_t)pxCode); /* PC */\n\n  return pxTopOfStack;\n}\n/*-----------------------------------------------------------*/\n\nstatic void prvTaskExitError(void) {\n  volatile uint32_t ulDummy = 0;\n\n  /* A function that implements a task must not exit or attempt to return to\n  its caller as there is nothing to return to.  If a task wants to exit it\n  should instead call vTaskDelete( NULL ).\n\n  Artificially force an assert() to be triggered if configASSERT() is\n  defined, then stop here so application writers can catch the error. */\n  configASSERT(uxCriticalNesting == ~0UL);\n  portDISABLE_INTERRUPTS();\n  while (ulDummy == 0) {\n    /* This file calls prvTaskExitError() after the scheduler has been\n    started to remove a compiler warning about the function being defined\n    but never called.  ulDummy is used purely to quieten other warnings\n    about code appearing after this function is called - making ulDummy\n    volatile makes the compiler think the function could return and\n    therefore not output an 'unreachable code' warning for code that appears\n    after it. */\n    /* Sleep and wait for interrupt */\n    __WFI();\n  }\n}\n/*-----------------------------------------------------------*/\n\nstatic uint8_t prvCheckMaxSysCallPrio(uint8_t max_syscall_prio) {\n  uint8_t nlbits     = __ECLIC_GetCfgNlbits();\n  uint8_t intctlbits = __ECLIC_INTCTLBITS;\n  uint8_t lvlbits, temp;\n\n  if (nlbits <= intctlbits) {\n    lvlbits = nlbits;\n  } else {\n    lvlbits = intctlbits;\n  }\n\n  temp = ((1 << lvlbits) - 1);\n  if (max_syscall_prio > temp) {\n    max_syscall_prio = temp;\n  }\n  return max_syscall_prio;\n}\n\nstatic uint8_t prvCalcMaxSysCallMTH(uint8_t max_syscall_prio) {\n  uint8_t nlbits     = __ECLIC_GetCfgNlbits();\n  uint8_t intctlbits = __ECLIC_INTCTLBITS;\n  uint8_t lvlbits, lfabits;\n  uint8_t maxsyscallmth = 0;\n  uint8_t temp;\n\n  if (nlbits <= intctlbits) {\n    lvlbits = nlbits;\n  } else {\n    lvlbits = intctlbits;\n  }\n\n  lfabits = 8 - lvlbits;\n\n  temp = ((1 << lvlbits) - 1);\n  if (max_syscall_prio > temp) {\n    max_syscall_prio = temp;\n  }\n\n  maxsyscallmth = (max_syscall_prio << lfabits) | ((1 << lfabits) - 1);\n\n  return maxsyscallmth;\n}\n\n/*\n * See header file for description.\n */\nBaseType_t xPortStartScheduler(void) {\n  /* configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0. */\n  configASSERT(configMAX_SYSCALL_INTERRUPT_PRIORITY);\n\n  /* Get the real MTH should be set to ECLIC MTH register */\n  uxMaxSysCallMTH = prvCalcMaxSysCallMTH(configMAX_SYSCALL_INTERRUPT_PRIORITY);\n  FREERTOS_PORT_DEBUG(\"Max SysCall MTH is set to 0x%x\\n\", uxMaxSysCallMTH);\n\n#if (configASSERT_DEFINED == 1)\n  {\n    /* Use the same mask on the maximum system call priority. */\n    ucMaxSysCallPriority = prvCheckMaxSysCallPrio(configMAX_SYSCALL_INTERRUPT_PRIORITY);\n    FREERTOS_PORT_DEBUG(\"Max SysCall Priority is set to %d\\n\", ucMaxSysCallPriority);\n  }\n#endif /* conifgASSERT_DEFINED */\n\n  __disable_irq();\n  /* Start the timer that generates the tick ISR.  Interrupts are disabled\n  here already. */\n  vPortSetupTimerInterrupt();\n\n  /* Initialise the critical nesting count ready for the first task. */\n  uxCriticalNesting = 0;\n\n  /* Start the first task. */\n  prvPortStartFirstTask();\n\n  /* Should never get here as the tasks will now be executing!  Call the task\n  exit error function to prevent compiler warnings about a static function\n  not being called in the case that the application writer overrides this\n  functionality by defining configTASK_RETURN_ADDRESS.  Call\n  vTaskSwitchContext() so link time optimisation does not remove the\n  symbol. */\n  vTaskSwitchContext();\n  prvTaskExitError();\n\n  /* Should not get here! */\n  return 0;\n}\n/*-----------------------------------------------------------*/\n\nvoid vPortEndScheduler(void) {\n  /* Not implemented in ports where there is nothing to return to.\n  Artificially force an assert. */\n  configASSERT(uxCriticalNesting == 1000UL);\n}\n/*-----------------------------------------------------------*/\n\nvoid vPortEnterCritical(void) {\n  portDISABLE_INTERRUPTS();\n  uxCriticalNesting++;\n\n  /* This is not the interrupt safe version of the enter critical function so\n  assert() if it is being called from an interrupt context.  Only API\n  functions that end in \"FromISR\" can be used in an interrupt.  Only assert if\n  the critical nesting count is 1 to protect against recursive calls if the\n  assert function also uses a critical section. */\n  if (uxCriticalNesting == 1) {\n    configASSERT((__ECLIC_GetMth() & portMTH_MASK) == uxMaxSysCallMTH);\n  }\n}\n/*-----------------------------------------------------------*/\n\nvoid vPortExitCritical(void) {\n  configASSERT(uxCriticalNesting);\n  uxCriticalNesting--;\n  if (uxCriticalNesting == 0) {\n    portENABLE_INTERRUPTS();\n  }\n}\n/*-----------------------------------------------------------*/\n\nvoid vPortAssert(int32_t x) {\n  TaskHandle_t th;\n  if ((x) == 0) {\n    taskDISABLE_INTERRUPTS();\n#if (INCLUDE_xTaskGetCurrentTaskHandle == 1)\n    th = xTaskGetCurrentTaskHandle();\n    if (th) {\n      printf(\"Assert in task %s\\n\", pcTaskGetName(th));\n    }\n#endif\n    while (1) {\n      /* Sleep and wait for interrupt */\n      __WFI();\n    };\n  }\n}\n/*-----------------------------------------------------------*/\n\nvoid xPortTaskSwitch(void) {\n  portDISABLE_INTERRUPTS();\n  /* Clear Software IRQ, A MUST */\n  SysTimer_ClearSWIRQ();\n  vTaskSwitchContext();\n  portENABLE_INTERRUPTS();\n}\n/*-----------------------------------------------------------*/\n\nvoid xPortSysTickHandler(void) {\n  /* The SysTick runs at the lowest interrupt priority, so when this interrupt\n  executes all interrupts must be unmasked.  There is therefore no need to\n  save and then restore the interrupt mask value as its value is already\n  known. */\n  portDISABLE_INTERRUPTS();\n  {\n    SysTick_Reload(SYSTICK_TICK_CONST);\n    /* Increment the RTOS tick. */\n    if (xTaskIncrementTick() != pdFALSE) {\n      /* A context switch is required.  Context switching is performed in\n      the SWI interrupt.  Pend the SWI interrupt. */\n      portYIELD();\n    }\n  }\n  portENABLE_INTERRUPTS();\n}\n/*-----------------------------------------------------------*/\n\n#if (configUSE_TICKLESS_IDLE == 1)\n\n__attribute__((weak)) void vPortSuppressTicksAndSleep(TickType_t xExpectedIdleTime) {\n  uint32_t            ulReloadValue, ulCompleteTickPeriods, ulCompletedSysTickDecrements;\n  volatile TickType_t xModifiableIdleTime, xTickCountBeforeSleep, XLastLoadValue;\n\n  FREERTOS_PORT_DEBUG(\"Enter TickLess %d\\n\", (uint32_t)xExpectedIdleTime);\n\n  /* Make sure the SysTick reload value does not overflow the counter. */\n  if (xExpectedIdleTime > xMaximumPossibleSuppressedTicks) {\n    xExpectedIdleTime = xMaximumPossibleSuppressedTicks;\n  }\n\n  /* Stop the SysTick momentarily.  The time the SysTick is stopped for\n  is accounted for as best it can be, but using the tickless mode will\n  inevitably result in some tiny drift of the time maintained by the\n  kernel with respect to calendar time. */\n  SysTimer_Stop();\n\n  /* Calculate the reload value required to wait xExpectedIdleTime\n  tick periods.  -1 is used because this code will execute part way\n  through one of the tick periods. */\n  ulReloadValue = (ulTimerCountsForOneTick * (xExpectedIdleTime - 1UL));\n  if (ulReloadValue > ulStoppedTimerCompensation) {\n    ulReloadValue -= ulStoppedTimerCompensation;\n  }\n\n  /* Enter a critical section but don't use the taskENTER_CRITICAL()\n  method as that will mask interrupts that should exit sleep mode. */\n  __disable_irq();\n\n  /* If a context switch is pending or a task is waiting for the scheduler\n  to be unsuspended then abandon the low power entry. */\n  if (eTaskConfirmSleepModeStatus() == eAbortSleep) {\n    /* Restart from whatever is left in the count register to complete\n    this tick period. */\n    /* Restart SysTick. */\n    SysTimer_Start();\n\n    /* Reset the reload register to the value required for normal tick\n       periods. */\n    SysTick_Reload(ulTimerCountsForOneTick);\n\n    /* Re-enable interrupts - see comments above the cpsid instruction()\n       above. */\n    __enable_irq();\n  } else {\n    xTickCountBeforeSleep = xTaskGetTickCount();\n\n    /* Set the new reload value. */\n    SysTick_Reload(ulReloadValue);\n\n    /* Get System timer load value before sleep */\n    XLastLoadValue = SysTimer_GetLoadValue();\n\n    /* Restart SysTick. */\n    SysTimer_Start();\n    ECLIC_EnableIRQ(SysTimer_IRQn);\n    __RWMB();\n\n    /* Sleep until something happens.  configPRE_SLEEP_PROCESSING() can\n    set its parameter to 0 to indicate that its implementation contains\n    its own wait for interrupt or wait for event instruction, and so wfi\n    should not be executed again.  However, the original expected idle\n    time variable must remain unmodified, so a copy is taken. */\n    xModifiableIdleTime = xExpectedIdleTime;\n    configPRE_SLEEP_PROCESSING(xModifiableIdleTime);\n    if (xModifiableIdleTime > 0) {\n      __WFI();\n    }\n    configPOST_SLEEP_PROCESSING(xExpectedIdleTime);\n\n    /* Re-enable interrupts to allow the interrupt that brought the MCU\n    out of sleep mode to execute immediately. */\n    __enable_irq();\n\n    /* Make sure interrupt enable is executed */\n    __RWMB();\n    __FENCE_I();\n    __NOP();\n\n    /* Disable interrupts again because the clock is about to be stopped\n       and interrupts that execute while the clock is stopped will increase\n       any slippage between the time maintained by the RTOS and calendar\n       time. */\n    __disable_irq();\n\n    /* Disable the SysTick clock.  Again,\n       the time the SysTick is stopped for is accounted for as best it can\n       be, but using the tickless mode will inevitably result in some tiny\n       drift of the time maintained by the kernel with respect to calendar\n       time*/\n    ECLIC_DisableIRQ(SysTimer_IRQn);\n\n    /* Determine if SysTimer Interrupt is not yet happened,\n    (in which case an interrupt other than the SysTick\n    must have brought the system out of sleep mode). */\n    if (SysTimer_GetLoadValue() >= (XLastLoadValue + ulReloadValue)) {\n      /* As the pending tick will be processed as soon as this\n      function exits, the tick value maintained by the tick is stepped\n      forward by one less than the time spent waiting. */\n      ulCompleteTickPeriods = xExpectedIdleTime - 1UL;\n      FREERTOS_PORT_DEBUG(\"TickLess - SysTimer Interrupt Entered!\\n\");\n    } else {\n      /* Something other than the tick interrupt ended the sleep.\n      Work out how long the sleep lasted rounded to complete tick\n      periods (not the ulReload value which accounted for part\n      ticks). */\n      xModifiableIdleTime = SysTimer_GetLoadValue();\n      if (xModifiableIdleTime > XLastLoadValue) {\n        ulCompletedSysTickDecrements = (xModifiableIdleTime - XLastLoadValue);\n      } else {\n        ulCompletedSysTickDecrements = (xModifiableIdleTime + portMAX_BIT_NUMBER - XLastLoadValue);\n      }\n\n      /* How many complete tick periods passed while the processor\n      was waiting? */\n      ulCompleteTickPeriods = ulCompletedSysTickDecrements / ulTimerCountsForOneTick;\n\n      /* The reload value is set to whatever fraction of a single tick\n      period remains. */\n      SysTick_Reload(ulTimerCountsForOneTick);\n      FREERTOS_PORT_DEBUG(\"TickLess - External Interrupt Happened!\\n\");\n    }\n\n    FREERTOS_PORT_DEBUG(\"End TickLess %d\\n\", (uint32_t)ulCompleteTickPeriods);\n\n    /* Restart SysTick */\n    vTaskStepTick(ulCompleteTickPeriods);\n\n    /* Exit with interrupts enabled. */\n    ECLIC_EnableIRQ(SysTimer_IRQn);\n    __enable_irq();\n  }\n}\n\n#endif /* #if configUSE_TICKLESS_IDLE */\n/*-----------------------------------------------------------*/\n\n/*\n * Setup the systick timer to generate the tick interrupts at the required\n * frequency.\n */\n__attribute__((weak)) void vPortSetupTimerInterrupt(void) {\n/* Calculate the constants required to configure the tick interrupt. */\n#if (configUSE_TICKLESS_IDLE == 1)\n  {\n    ulTimerCountsForOneTick         = (SYSTICK_TICK_CONST);\n    xMaximumPossibleSuppressedTicks = portMAX_BIT_NUMBER / ulTimerCountsForOneTick;\n    ulStoppedTimerCompensation      = portMISSED_COUNTS_FACTOR / (configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ);\n    FREERTOS_PORT_DEBUG(\"CountsForOneTick, SuppressedTicks and TimerCompensation: %u, %u, %u\\n\", (uint32_t)ulTimerCountsForOneTick, (uint32_t)xMaximumPossibleSuppressedTicks,\n                        (uint32_t)ulStoppedTimerCompensation);\n  }\n#endif /* configUSE_TICKLESS_IDLE */\n  TickType_t ticks = SYSTICK_TICK_CONST;\n\n  /* Make SWI and SysTick the lowest priority interrupts. */\n  /* Stop and clear the SysTimer. SysTimer as Non-Vector Interrupt */\n  SysTick_Config(ticks);\n  ECLIC_DisableIRQ(SysTimer_IRQn);\n  ECLIC_SetLevelIRQ(SysTimer_IRQn, configKERNEL_INTERRUPT_PRIORITY);\n  ECLIC_SetShvIRQ(SysTimer_IRQn, ECLIC_NON_VECTOR_INTERRUPT);\n  ECLIC_EnableIRQ(SysTimer_IRQn);\n\n  /* Set SWI interrupt level to lowest level/priority, SysTimerSW as Vector Interrupt */\n  ECLIC_SetShvIRQ(SysTimerSW_IRQn, ECLIC_VECTOR_INTERRUPT);\n  ECLIC_SetLevelIRQ(SysTimerSW_IRQn, configKERNEL_INTERRUPT_PRIORITY);\n  ECLIC_EnableIRQ(SysTimerSW_IRQn);\n}\n/*-----------------------------------------------------------*/\n\n/*-----------------------------------------------------------*/\n\n#if (configASSERT_DEFINED == 1)\n\nvoid vPortValidateInterruptPriority(void) {\n  uint32_t ulCurrentInterrupt;\n  uint8_t  ucCurrentPriority;\n\n  /* Obtain the number of the currently executing interrupt. */\n  CSR_MCAUSE_Type mcause = (CSR_MCAUSE_Type)__RV_CSR_READ(CSR_MCAUSE);\n  /* Make sure current trap type is interrupt */\n  configASSERT(mcause.b.interrupt == 1);\n  if (mcause.b.interrupt) {\n    ulCurrentInterrupt = mcause.b.exccode;\n    /* Is the interrupt number a user defined interrupt? */\n    if (ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER) {\n      /* Look up the interrupt's priority. */\n      ucCurrentPriority = __ECLIC_GetLevelIRQ(ulCurrentInterrupt);\n      /* The following assertion will fail if a service routine (ISR) for\n      an interrupt that has been assigned a priority above\n      ucMaxSysCallPriority calls an ISR safe FreeRTOS API\n      function.  ISR safe FreeRTOS API functions must *only* be called\n      from interrupts that have been assigned a priority at or below\n      ucMaxSysCallPriority.\n\n      Numerically low interrupt priority numbers represent logically high\n      interrupt priorities, therefore the priority of the interrupt must\n      be set to a value equal to or numerically *higher* than\n      ucMaxSysCallPriority.\n\n      Interrupts that use the FreeRTOS API must not be left at their\n      default priority of zero as that is the highest possible priority,\n      which is guaranteed to be above ucMaxSysCallPriority,\n      and therefore also guaranteed to be invalid.\n\n      FreeRTOS maintains separate thread and ISR API functions to ensure\n      interrupt entry is as fast and simple as possible.\n\n      The following links provide detailed information:\n      http://www.freertos.org/FAQHelp.html */\n      configASSERT(ucCurrentPriority <= ucMaxSysCallPriority);\n    }\n  }\n}\n\n#endif /* configASSERT_DEFINED */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/OS/FreeRTOS/Source/portable/GCC/portasm.S",
    "content": "\n/*\n * FreeRTOS Kernel V10.2.1\n * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * http://www.FreeRTOS.org\n * http://aws.amazon.com/freertos\n *\n * 1 tab == 4 spaces!\n */\n\n#include \"riscv_encoding.h\"\n\n#ifndef __riscv_32e\n#define portRegNum          30\n#else\n#define portRegNum          14\n#endif\n\n#define portCONTEXT_SIZE    ( portRegNum * REGBYTES )\n\n.section    .text.entry\n.align 8\n\n.extern xPortTaskSwitch\n.extern pxCurrentTCB\n.global prvPortStartFirstTask\n\n/**\n * \\brief  Global interrupt disabled\n * \\details\n *  This function disable global interrupt.\n * \\remarks\n *  - All the interrupt requests will be ignored by CPU.\n */\n.macro DISABLE_MIE\n    csrc CSR_MSTATUS, MSTATUS_MIE\n.endm\n\n/**\n * \\brief  Macro for context save\n * \\details\n * This macro save ABI defined caller saved registers in the stack.\n * \\remarks\n * - This Macro could use to save context when you enter to interrupt\n * or exception\n*/\n/* Save caller registers */\n.macro SAVE_CONTEXT\n    csrrw sp, CSR_MSCRATCHCSWL, sp\n    /* Allocate stack space for context saving */\n#ifndef __riscv_32e\n    addi sp, sp, -20*REGBYTES\n#else\n    addi sp, sp, -14*REGBYTES\n#endif /* __riscv_32e */\n\n    STORE x1, 0*REGBYTES(sp)\n    STORE x4, 1*REGBYTES(sp)\n    STORE x5, 2*REGBYTES(sp)\n    STORE x6, 3*REGBYTES(sp)\n    STORE x7, 4*REGBYTES(sp)\n    STORE x10, 5*REGBYTES(sp)\n    STORE x11, 6*REGBYTES(sp)\n    STORE x12, 7*REGBYTES(sp)\n    STORE x13, 8*REGBYTES(sp)\n    STORE x14, 9*REGBYTES(sp)\n    STORE x15, 10*REGBYTES(sp)\n#ifndef __riscv_32e\n    STORE x16, 14*REGBYTES(sp)\n    STORE x17, 15*REGBYTES(sp)\n    STORE x28, 16*REGBYTES(sp)\n    STORE x29, 17*REGBYTES(sp)\n    STORE x30, 18*REGBYTES(sp)\n    STORE x31, 19*REGBYTES(sp)\n#endif /* __riscv_32e */\n.endm\n\n/**\n * \\brief  Macro for restore caller registers\n * \\details\n * This macro restore ABI defined caller saved registers from stack.\n * \\remarks\n * - You could use this macro to restore context before you want return\n * from interrupt or exeception\n */\n/* Restore caller registers */\n.macro RESTORE_CONTEXT\n    LOAD x1, 0*REGBYTES(sp)\n    LOAD x4, 1*REGBYTES(sp)\n    LOAD x5, 2*REGBYTES(sp)\n    LOAD x6, 3*REGBYTES(sp)\n    LOAD x7, 4*REGBYTES(sp)\n    LOAD x10, 5*REGBYTES(sp)\n    LOAD x11, 6*REGBYTES(sp)\n    LOAD x12, 7*REGBYTES(sp)\n    LOAD x13, 8*REGBYTES(sp)\n    LOAD x14, 9*REGBYTES(sp)\n    LOAD x15, 10*REGBYTES(sp)\n#ifndef __riscv_32e\n    LOAD x16, 14*REGBYTES(sp)\n    LOAD x17, 15*REGBYTES(sp)\n    LOAD x28, 16*REGBYTES(sp)\n    LOAD x29, 17*REGBYTES(sp)\n    LOAD x30, 18*REGBYTES(sp)\n    LOAD x31, 19*REGBYTES(sp)\n\n    /* De-allocate the stack space */\n    addi sp, sp, 20*REGBYTES\n#else\n    /* De-allocate the stack space */\n    addi sp, sp, 14*REGBYTES\n#endif /* __riscv_32e */\n    csrrw sp, CSR_MSCRATCHCSWL, sp\n.endm\n\n/**\n * \\brief  Macro for save necessary CSRs to stack\n * \\details\n * This macro store MCAUSE, MEPC, MSUBM to stack.\n */\n.macro SAVE_CSR_CONTEXT\n    /* Store CSR mcause to stack using pushmcause */\n    csrrwi  x0, CSR_PUSHMCAUSE, 11\n    /* Store CSR mepc to stack using pushmepc */\n    csrrwi  x0, CSR_PUSHMEPC, 12\n    /* Store CSR msub to stack using pushmsub */\n    csrrwi  x0, CSR_PUSHMSUBM, 13\n.endm\n\n/**\n * \\brief  Macro for restore necessary CSRs from stack\n * \\details\n * This macro restore MSUBM, MEPC, MCAUSE from stack.\n */\n.macro RESTORE_CSR_CONTEXT\n    LOAD x5,  13*REGBYTES(sp)\n    csrw CSR_MSUBM, x5\n    LOAD x5,  12*REGBYTES(sp)\n    csrw CSR_MEPC, x5\n    LOAD x5,  11*REGBYTES(sp)\n    csrw CSR_MCAUSE, x5\n.endm\n\n/**\n * \\brief  Exception/NMI Entry\n * \\details\n * This function provide common entry functions for exception/nmi.\n * \\remarks\n * This function provide a default exception/nmi entry.\n * ABI defined caller save register and some CSR registers\n * to be saved before enter interrupt handler and be restored before return.\n */\n.section .text.trap\n/* In CLIC mode, the exeception entry must be 64bytes aligned */\n.align 6\n.global exc_entry\nexc_entry:\n    /* Save the caller saving registers (context) */\n    SAVE_CONTEXT\n    /* Save the necessary CSR registers */\n    SAVE_CSR_CONTEXT\n\n    /*\n     * Set the exception handler function arguments\n     * argument 1: mcause value\n     * argument 2: current stack point(SP) value\n     */\n    csrr a0, mcause\n    mv a1, sp\n    /*\n     * TODO: Call the exception handler function\n     * By default, the function template is provided in\n     * system_Device.c, you can adjust it as you want\n     */\n    call core_exception_handler\n\n    /* Restore the necessary CSR registers */\n    RESTORE_CSR_CONTEXT\n    /* Restore the caller saving registers (context) */\n    RESTORE_CONTEXT\n\n    /* Return to regular code */\n    mret\n\n/**\n * \\brief  Non-Vector Interrupt Entry\n * \\details\n * This function provide common entry functions for handling\n * non-vector interrupts\n * \\remarks\n * This function provide a default non-vector interrupt entry.\n * ABI defined caller save register and some CSR registers need\n * to be saved before enter interrupt handler and be restored before return.\n */\n.section      .text.irq\n/* In CLIC mode, the interrupt entry must be 4bytes aligned */\n.align 2\n.global irq_entry\n/* This label will be set to MTVT2 register */\nirq_entry:\n    /* Save the caller saving registers (context) */\n    SAVE_CONTEXT\n    /* Save the necessary CSR registers */\n    SAVE_CSR_CONTEXT\n\n    /* This special CSR read/write operation, which is actually\n     * claim the CLIC to find its pending highest ID, if the ID\n     * is not 0, then automatically enable the mstatus.MIE, and\n     * jump to its vector-entry-label, and update the link register\n     */\n    csrrw ra, CSR_JALMNXTI, ra\n\n    /* Critical section with interrupts disabled */\n    DISABLE_MIE\n\n    /* Restore the necessary CSR registers */\n    RESTORE_CSR_CONTEXT\n    /* Restore the caller saving registers (context) */\n    RESTORE_CONTEXT\n\n    /* Return to regular code */\n    mret\n\n/* Default Handler for Exceptions / Interrupts */\n.global default_intexc_handler\nUndef_Handler:\ndefault_intexc_handler:\n1:\n    j 1b\n\n/* Start the first task.  This also clears the bit that indicates the FPU is\n    in use in case the FPU was used before the scheduler was started - which\n    would otherwise result in the unnecessary leaving of space in the stack\n    for lazy saving of FPU registers. */\n.align 3\nprvPortStartFirstTask:\n    /* Setup Interrupt Stack using\n       The stack that was used by main()\n       before the scheduler is started is\n       no longer required after the scheduler is started.\n       Interrupt stack pointer is stored in CSR_MSCRATCH */\n    la t0, _sp\n    csrw CSR_MSCRATCH, t0\n    LOAD sp, pxCurrentTCB           /* Load pxCurrentTCB. */\n    LOAD sp, 0x0(sp)                /* Read sp from first TCB member */\n\n    /* Pop PC from stack and set MEPC */\n    LOAD t0,  0  * REGBYTES(sp)\n    csrw CSR_MEPC, t0\n    /* Pop mstatus from stack and set it */\n    LOAD t0,  (portRegNum - 1)  * REGBYTES(sp)\n    csrw CSR_MSTATUS, t0\n    /* Interrupt still disable here */\n    /* Restore Registers from Stack */\n    LOAD x1,  1  * REGBYTES(sp)    /* RA */\n    LOAD x5,  2  * REGBYTES(sp)\n    LOAD x6,  3  * REGBYTES(sp)\n    LOAD x7,  4  * REGBYTES(sp)\n    LOAD x8,  5  * REGBYTES(sp)\n    LOAD x9,  6  * REGBYTES(sp)\n    LOAD x10, 7  * REGBYTES(sp)\n    LOAD x11, 8  * REGBYTES(sp)\n    LOAD x12, 9  * REGBYTES(sp)\n    LOAD x13, 10 * REGBYTES(sp)\n    LOAD x14, 11 * REGBYTES(sp)\n    LOAD x15, 12 * REGBYTES(sp)\n#ifndef __riscv_32e\n    LOAD x16, 13 * REGBYTES(sp)\n    LOAD x17, 14 * REGBYTES(sp)\n    LOAD x18, 15 * REGBYTES(sp)\n    LOAD x19, 16 * REGBYTES(sp)\n    LOAD x20, 17 * REGBYTES(sp)\n    LOAD x21, 18 * REGBYTES(sp)\n    LOAD x22, 19 * REGBYTES(sp)\n    LOAD x23, 20 * REGBYTES(sp)\n    LOAD x24, 21 * REGBYTES(sp)\n    LOAD x25, 22 * REGBYTES(sp)\n    LOAD x26, 23 * REGBYTES(sp)\n    LOAD x27, 24 * REGBYTES(sp)\n    LOAD x28, 25 * REGBYTES(sp)\n    LOAD x29, 26 * REGBYTES(sp)\n    LOAD x30, 27 * REGBYTES(sp)\n    LOAD x31, 28 * REGBYTES(sp)\n#endif\n\n    addi sp, sp, portCONTEXT_SIZE\n\n    mret\n\n.align 2\n.global eclic_msip_handler\neclic_msip_handler:\n    addi sp, sp, -portCONTEXT_SIZE\n    STORE x1,  1  * REGBYTES(sp)    /* RA */\n    STORE x5,  2  * REGBYTES(sp)\n    STORE x6,  3  * REGBYTES(sp)\n    STORE x7,  4  * REGBYTES(sp)\n    STORE x8,  5  * REGBYTES(sp)\n    STORE x9,  6  * REGBYTES(sp)\n    STORE x10, 7  * REGBYTES(sp)\n    STORE x11, 8  * REGBYTES(sp)\n    STORE x12, 9  * REGBYTES(sp)\n    STORE x13, 10 * REGBYTES(sp)\n    STORE x14, 11 * REGBYTES(sp)\n    STORE x15, 12 * REGBYTES(sp)\n#ifndef __riscv_32e\n    STORE x16, 13 * REGBYTES(sp)\n    STORE x17, 14 * REGBYTES(sp)\n    STORE x18, 15 * REGBYTES(sp)\n    STORE x19, 16 * REGBYTES(sp)\n    STORE x20, 17 * REGBYTES(sp)\n    STORE x21, 18 * REGBYTES(sp)\n    STORE x22, 19 * REGBYTES(sp)\n    STORE x23, 20 * REGBYTES(sp)\n    STORE x24, 21 * REGBYTES(sp)\n    STORE x25, 22 * REGBYTES(sp)\n    STORE x26, 23 * REGBYTES(sp)\n    STORE x27, 24 * REGBYTES(sp)\n    STORE x28, 25 * REGBYTES(sp)\n    STORE x29, 26 * REGBYTES(sp)\n    STORE x30, 27 * REGBYTES(sp)\n    STORE x31, 28 * REGBYTES(sp)\n#endif\n    /* Push mstatus to stack */\n    csrr t0, CSR_MSTATUS\n    STORE t0,  (portRegNum - 1)  * REGBYTES(sp)\n\n    /* Push additional registers */\n\n    /* Store sp to task stack */\n    LOAD t0, pxCurrentTCB\n    STORE sp, 0(t0)\n\n    csrr t0, CSR_MEPC\n    STORE t0, 0(sp)\n    jal xPortTaskSwitch\n\n    /* Switch task context */\n    LOAD t0, pxCurrentTCB           /* Load pxCurrentTCB. */\n    LOAD sp, 0x0(t0)                /* Read sp from first TCB member */\n\n    /* Pop PC from stack and set MEPC */\n    LOAD t0,  0  * REGBYTES(sp)\n    csrw CSR_MEPC, t0\n    /* Pop additional registers */\n\n    /* Pop mstatus from stack and set it */\n    LOAD t0,  (portRegNum - 1)  * REGBYTES(sp)\n    csrw CSR_MSTATUS, t0\n    /* Interrupt still disable here */\n    /* Restore Registers from Stack */\n    LOAD x1,  1  * REGBYTES(sp)    /* RA */\n    LOAD x5,  2  * REGBYTES(sp)\n    LOAD x6,  3  * REGBYTES(sp)\n    LOAD x7,  4  * REGBYTES(sp)\n    LOAD x8,  5  * REGBYTES(sp)\n    LOAD x9,  6  * REGBYTES(sp)\n    LOAD x10, 7  * REGBYTES(sp)\n    LOAD x11, 8  * REGBYTES(sp)\n    LOAD x12, 9  * REGBYTES(sp)\n    LOAD x13, 10 * REGBYTES(sp)\n    LOAD x14, 11 * REGBYTES(sp)\n    LOAD x15, 12 * REGBYTES(sp)\n#ifndef __riscv_32e\n    LOAD x16, 13 * REGBYTES(sp)\n    LOAD x17, 14 * REGBYTES(sp)\n    LOAD x18, 15 * REGBYTES(sp)\n    LOAD x19, 16 * REGBYTES(sp)\n    LOAD x20, 17 * REGBYTES(sp)\n    LOAD x21, 18 * REGBYTES(sp)\n    LOAD x22, 19 * REGBYTES(sp)\n    LOAD x23, 20 * REGBYTES(sp)\n    LOAD x24, 21 * REGBYTES(sp)\n    LOAD x25, 22 * REGBYTES(sp)\n    LOAD x26, 23 * REGBYTES(sp)\n    LOAD x27, 24 * REGBYTES(sp)\n    LOAD x28, 25 * REGBYTES(sp)\n    LOAD x29, 26 * REGBYTES(sp)\n    LOAD x30, 27 * REGBYTES(sp)\n    LOAD x31, 28 * REGBYTES(sp)\n#endif\n\n    addi sp, sp, portCONTEXT_SIZE\n    mret\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/OS/FreeRTOS/Source/portable/GCC/portmacro.h",
    "content": "/*\n * FreeRTOS Kernel V10.2.1\n * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * http://www.FreeRTOS.org\n * http://aws.amazon.com/freertos\n *\n * 1 tab == 4 spaces!\n */\n\n#ifndef PORTMACRO_H\n#define PORTMACRO_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"nuclei_sdk_soc.h\"\n\n/*-----------------------------------------------------------\n * Port specific definitions.\n *\n * The settings in this file configure FreeRTOS correctly for the\n * given hardware and compiler.\n *\n * These settings should not be altered.\n *-----------------------------------------------------------\n */\n\n/* Type definitions. */\n#define portCHAR              char\n#define portFLOAT             float\n#define portDOUBLE            double\n#define portLONG              long\n#define portSHORT             short\n#define portSTACK_TYPE        unsigned long\n#define portBASE_TYPE         long\n#define portPOINTER_SIZE_TYPE unsigned long\n\ntypedef portSTACK_TYPE StackType_t;\ntypedef long           BaseType_t;\ntypedef unsigned long  UBaseType_t;\n\n/* RISC-V TIMER is 64-bit long */\ntypedef uint64_t TickType_t;\n#define portMAX_DELAY (TickType_t)0xFFFFFFFFFFFFFFFFULL\n/*-----------------------------------------------------------*/\n\n/* Architecture specifics. */\n#define portSTACK_GROWTH   (-1)\n#define portTICK_PERIOD_MS ((TickType_t)1000 / configTICK_RATE_HZ)\n#define portBYTE_ALIGNMENT 8\n/*-----------------------------------------------------------*/\n\n/* Scheduler utilities. */\n#define portYIELD()                                                            \\\n  {                                                                            \\\n    /* Set a software interrupt(SWI) request to request a context switch. */   \\\n    SysTimer_SetSWIRQ();                                                       \\\n    /* Barriers are normally not required but do ensure the code is completely \\\n    within the specified behaviour for the architecture. */                    \\\n    __RWMB();                                                                  \\\n  }\n\n#define portEND_SWITCHING_ISR(xSwitchRequired) \\\n  if (xSwitchRequired != pdFALSE)              \\\n  portYIELD()\n#define portYIELD_FROM_ISR(x) portEND_SWITCHING_ISR(x)\n/*-----------------------------------------------------------*/\n\n/* Critical section management. */\nextern void vPortEnterCritical(void);\nextern void vPortExitCritical(void);\n\n#define portSET_INTERRUPT_MASK_FROM_ISR()    ulPortRaiseBASEPRI()\n#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortSetBASEPRI(x)\n#define portDISABLE_INTERRUPTS()             vPortRaiseBASEPRI()\n#define portENABLE_INTERRUPTS()              vPortSetBASEPRI(0)\n#define portENTER_CRITICAL()                 vPortEnterCritical()\n#define portEXIT_CRITICAL()                  vPortExitCritical()\n\n/*-----------------------------------------------------------*/\n\n/* Task function macros as described on the FreeRTOS.org WEB site.  These are\nnot necessary for to use this port.  They are defined so the common demo files\n(which build with all the ports) will build. */\n#define portTASK_FUNCTION_PROTO(vFunction, pvParameters) void vFunction(void *pvParameters)\n#define portTASK_FUNCTION(vFunction, pvParameters)       void vFunction(void *pvParameters)\n/*-----------------------------------------------------------*/\n\n/* Tickless idle/low power functionality. */\n#ifndef portSUPPRESS_TICKS_AND_SLEEP\nextern void vPortSuppressTicksAndSleep(TickType_t xExpectedIdleTime);\n#define portSUPPRESS_TICKS_AND_SLEEP(xExpectedIdleTime) vPortSuppressTicksAndSleep(xExpectedIdleTime)\n#endif\n/*-----------------------------------------------------------*/\n\n/*-----------------------------------------------------------*/\n\n#ifdef configASSERT\nextern void vPortValidateInterruptPriority(void);\n#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() vPortValidateInterruptPriority()\n#endif\n\n/* portNOP() is not required by this port. */\n#define portNOP() __NOP()\n\n#define portINLINE __inline\n\n#ifndef portFORCE_INLINE\n#define portFORCE_INLINE inline __attribute__((always_inline))\n#endif\n\n/* This variable should not be set in any of the FreeRTOS application\n  only used internal of FreeRTOS Port code */\nextern uint8_t uxMaxSysCallMTH;\n\n/*-----------------------------------------------------------*/\nportFORCE_INLINE static void vPortRaiseBASEPRI(void) {\n  ECLIC_SetMth(uxMaxSysCallMTH);\n  __RWMB();\n}\n\n/*-----------------------------------------------------------*/\n\nportFORCE_INLINE static uint8_t ulPortRaiseBASEPRI(void) {\n  uint8_t ulOriginalBASEPRI;\n\n  ulOriginalBASEPRI = ECLIC_GetMth();\n  ECLIC_SetMth(uxMaxSysCallMTH);\n  __RWMB();\n\n  /* This return might not be reached but is necessary to prevent compiler\n  warnings. */\n  return ulOriginalBASEPRI;\n}\n/*-----------------------------------------------------------*/\n\nportFORCE_INLINE static void vPortSetBASEPRI(uint8_t ulNewMaskValue) {\n  ECLIC_SetMth(ulNewMaskValue);\n  __RWMB();\n}\n/*-----------------------------------------------------------*/\n\n#define portMEMORY_BARRIER() __asm volatile(\"\" ::: \"memory\")\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* PORTMACRO_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Board/pinecil/Source/GCC/gcc_gd32vf103_flashxip.ld",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/******************************************************************************\n * @file     gcc_Device.ld\n * @brief    GNU Linker Script for gd32vf103 based device\n * @version  V1.0.0\n * @date     17. Dec 2019\n ******************************************************************************/\n\n/*********** Use Configuration Wizard in Context Menu *************************/\n\nOUTPUT_ARCH( \"riscv\" )\n/********************* Flash Configuration ************************************\n * <h> Flash Configuration\n * <o0> Flash Base Address <0x0-0xFFFFFFFF:8>\n * <o1> Flash Size (in Bytes) <0x0-0xFFFFFFFF:8>\n * </h>\n */\n__ROM_BASE = 0x08000000;\n__ROM_SIZE = 0x0001F400;\n\n/*--------------------- ILM RAM Configuration ---------------------------\n * <h> ILM RAM Configuration\n * <o0> ILM RAM Base Address    <0x0-0xFFFFFFFF:8>\n * <o1> ILM RAM Size (in Bytes) <0x0-0xFFFFFFFF:8>\n * </h>\n */\n__ILM_RAM_BASE = 0x80000000;\n__ILM_RAM_SIZE = 0x00010000;\n\n/*--------------------- Embedded RAM Configuration ---------------------------\n * <h> RAM Configuration\n * <o0> RAM Base Address    <0x0-0xFFFFFFFF:8>\n * <o1> RAM Size (in Bytes) <0x0-0xFFFFFFFF:8>\n * </h>\n*/\n__RAM_BASE = 0x20000000;\n__RAM_SIZE = 0x00006800;\n\n/********************* Stack / Heap Configuration ****************************\n * <h> Stack / Heap Configuration\n * <o0> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>\n * <o1> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>\n * </h>\n */\n__STACK_SIZE = 0x00000800;\n__HEAP_SIZE  = 0x00000800;\n\n/**************************** end of configuration section ********************/\n\n/* Define base address and length of flash and ram */\nMEMORY\n{\n  flash (rxai!w) : ORIGIN = __ROM_BASE, LENGTH = __ROM_SIZE\n  ram (wxa!ri) : ORIGIN = __RAM_BASE, LENGTH = __RAM_SIZE\n}\n/* Linker script to place sections and symbol values. Should be used together\n * with other linker script that defines memory regions FLASH,ILM and RAM.\n * It references following symbols, which must be defined in code:\n *   _Start : Entry of reset handler\n *\n * It defines following symbols, which code can use without definition:\n *   _ilm_lma\n *   _ilm\n *   __etext\n *   _etext\n *   etext\n *   _eilm\n *   __preinit_array_start\n *   __preinit_array_end\n *   __init_array_start\n *   __init_array_end\n *   __fini_array_start\n *   __fini_array_end\n *   _data_lma\n *   _edata\n *   edata\n *   __data_end__\n *   __bss_start\n *   __fbss\n *   _end\n *   end\n *   __heap_end\n *   __StackLimit\n *   __StackTop\n *   __STACK_SIZE\n */\n/* Define entry label of program */\nENTRY(_start)\nSECTIONS\n{\n  __STACK_SIZE = DEFINED(__STACK_SIZE) ? __STACK_SIZE : 2K;\n\n  .init           :\n  {\n    /* vector table locate at flash */\n    *(.vtable)\n    KEEP (*(SORT_NONE(.init)))\n  } >flash AT>flash\n\n  .ilalign         :\n  {\n    . = ALIGN(4);\n    /* Create a section label as _ilm_lma which located at flash */\n    PROVIDE( _ilm_lma = . );\n  } >flash AT>flash\n\n  .ialign         :\n  {\n    /* Create a section label as _ilm which located at flash */\n    PROVIDE( _ilm = . );\n  } >flash AT>flash\n\n  /* Code section located at flash */\n  .text           :\n  {\n    *(.text.unlikely .text.unlikely.*)\n    *(.text.startup .text.startup.*)\n    *(.text .text.*)\n    *(.gnu.linkonce.t.*)\n  } >flash AT>flash\n\n  .rodata : ALIGN(4)\n  {\n    . = ALIGN(4);\n    *(.rdata)\n    *(.rodata .rodata.*)\n    /* section information for initial. */\n    . = ALIGN(4);\n    __rt_init_start = .;\n    KEEP(*(SORT(.rti_fn*)))\n    __rt_init_end = .;\n    /* section information for finsh shell */\n    . = ALIGN(4);\n    __fsymtab_start = .;\n    KEEP(*(FSymTab))\n    __fsymtab_end = .;\n    . = ALIGN(4);\n    __vsymtab_start = .;\n    KEEP(*(VSymTab))\n    __vsymtab_end = .;\n    *(.gnu.linkonce.r.*)\n    . = ALIGN(8);\n    *(.srodata.cst16)\n    *(.srodata.cst8)\n    *(.srodata.cst4)\n    *(.srodata.cst2)\n    *(.srodata .srodata.*)\n  } >flash AT>flash\n\n  .fini           :\n  {\n    KEEP (*(SORT_NONE(.fini)))\n  } >flash AT>flash\n\n  . = ALIGN(4);\n\n  PROVIDE (__etext = .);\n  PROVIDE (_etext = .);\n  PROVIDE (etext = .);\n  PROVIDE( _eilm = . );\n\n\n  .preinit_array  :\n  {\n    PROVIDE_HIDDEN (__preinit_array_start = .);\n    KEEP (*(.preinit_array))\n    PROVIDE_HIDDEN (__preinit_array_end = .);\n  } >flash AT>flash\n\n  .init_array     :\n  {\n    PROVIDE_HIDDEN (__init_array_start = .);\n    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))\n    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))\n    PROVIDE_HIDDEN (__init_array_end = .);\n  } >flash AT>flash\n\n  .fini_array     :\n  {\n    PROVIDE_HIDDEN (__fini_array_start = .);\n    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))\n    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))\n    PROVIDE_HIDDEN (__fini_array_end = .);\n  } >flash AT>flash\n\n  .ctors          :\n  {\n    /* gcc uses crtbegin.o to find the start of\n     * the constructors, so we make sure it is\n     * first.  Because this is a wildcard, it\n     * doesn't matter if the user does not\n     * actually link against crtbegin.o; the\n     * linker won't look for a file to match a\n     * wildcard.  The wildcard also means that it\n     * doesn't matter which directory crtbegin.o\n     * is in.\n     */\n    KEEP (*crtbegin.o(.ctors))\n    KEEP (*crtbegin?.o(.ctors))\n    /* We don't want to include the .ctor section from\n     * the crtend.o file until after the sorted ctors.\n     * The .ctor section from the crtend file contains the\n     * end of ctors marker and it must be last\n     */\n    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))\n    KEEP (*(SORT(.ctors.*)))\n    KEEP (*(.ctors))\n  } >flash AT>flash\n\n  .dtors          :\n  {\n    KEEP (*crtbegin.o(.dtors))\n    KEEP (*crtbegin?.o(.dtors))\n    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))\n    KEEP (*(SORT(.dtors.*)))\n    KEEP (*(.dtors))\n  } >flash AT>flash\n\n  .lalign         :\n  {\n    . = ALIGN(4);\n    PROVIDE( _data_lma = . );\n  } >flash AT>flash\n\n  .dalign         :\n  {\n    . = ALIGN(4);\n    PROVIDE( _data = . );\n  } >ram AT>flash\n\n  /* Define data section virtual address is ram and physical address is flash */\n  .data          :\n  {\n    *(.data .data.*)\n    *(.gnu.linkonce.d.*)\n    . = ALIGN(8);\n    PROVIDE( __global_pointer$ = . + 0x800 );\n    *(.sdata .sdata.* .sdata*)\n    *(.gnu.linkonce.s.*)\n  } >ram AT>flash\n\n  . = ALIGN(4);\n  PROVIDE( _edata = . );\n  PROVIDE( edata = . );\n\n  PROVIDE( _fbss = . );\n  PROVIDE( __bss_start = . );\n  .bss            :\n  {\n    *(.sbss*)\n    *(.gnu.linkonce.sb.*)\n    *(.bss .bss.*)\n    *(.gnu.linkonce.b.*)\n    *(COMMON)\n    . = ALIGN(4);\n  } >ram AT>ram\n\n  . = ALIGN(8);\n  PROVIDE( _end = . );\n  PROVIDE( end = . );\n  /* Define stack and head location at ram */\n  .stack ORIGIN(ram) + LENGTH(ram) - __STACK_SIZE :\n  {\n    PROVIDE( _heap_end = . );\n    . = __STACK_SIZE;\n    PROVIDE( _sp = . );\n  } >ram AT>ram\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Board/pinecil/openocd_gd32vf103.cfg",
    "content": "adapter_khz     100\nreset_config srst_only\nadapter_nsrst_assert_width 100\n\ninterface cmsis-dap\n\ntransport select jtag\nadapter_khz     100\n\nautoexit true\n\nset _CHIPNAME riscv\njtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x1e200a6d\n\nset _TARGETNAME $_CHIPNAME.cpu\ntarget create $_TARGETNAME riscv -chain-position $_TARGETNAME\n$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size 20480 -work-area-backup 0\n\n# Work-area is a space in RAM used for flash programming\nif { [info exists WORKAREASIZE] } {\n   set _WORKAREASIZE $WORKAREASIZE\n} else {\n   set _WORKAREASIZE 0x5000\n}\n\n# Allow overriding the Flash bank size\nif { [info exists FLASH_SIZE] } {\n    set _FLASH_SIZE $FLASH_SIZE\n} else {\n    # autodetect size\n    set _FLASH_SIZE 0\n}\n\n# flash size will be probed\nset _FLASHNAME $_CHIPNAME.flash\n\nflash bank $_FLASHNAME gd32vf103 0x08000000 0 0 0 $_TARGETNAME\n\n# Expose Nuclei self-defined CSRS range 770-800,835-850,1984-2032,2064-2070\n# See https://github.com/riscv/riscv-gnu-toolchain/issues/319#issuecomment-358397306\n# Then user can view the csr register value in gdb using: info reg csr775 for CSR MTVT(0x307)\nriscv expose_csrs 770-800,835-850,1984-2032,2064-2070\n\nriscv set_reset_timeout_sec 1\n\ninit\n\nhalt\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/drv_usb_core.h",
    "content": "/*!\r\n    \\file  drv_usb_core.h\r\n    \\brief USB core low level driver header file\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef __DRV_USB_CORE_H\r\n#define __DRV_USB_CORE_H\r\n\r\n#include \"drv_usb_regs.h\"\r\n#include \"usb_ch9_std.h\"\r\n\r\n#define USB_FS_EP0_MAX_LEN 64U /* maximum packet size of EndPoint0 */\r\n\r\n#define HC_MAX_PACKET_COUNT 140U /* maximum packet count */\r\n\r\n#define EP_ID(x)  ((uint8_t)((x)&0x7FU)) /* endpoint number */\r\n#define EP_DIR(x) ((uint8_t)((x) >> 7))  /* endpoint direction */\r\n\r\nenum _usb_eptype {\r\n  USB_EPTYPE_CTRL = 0U, /*!< control endpoint type */\r\n  USB_EPTYPE_ISOC = 1U, /*!< isochronous endpoint type */\r\n  USB_EPTYPE_BULK = 2U, /*!< bulk endpoint type */\r\n  USB_EPTYPE_INTR = 3U, /*!< interrupt endpoint type */\r\n  USB_EPTYPE_MASK = 3U, /*!< endpoint type mask */\r\n};\r\n\r\ntypedef enum {\r\n  USB_OTG_OK = 0, /*!< USB OTG status OK*/\r\n  USB_OTG_FAIL    /*!< USB OTG status fail*/\r\n} usb_otg_status;\r\n\r\ntypedef enum {\r\n  USB_OK = 0, /*!< USB status OK*/\r\n  USB_FAIL    /*!< USB status fail*/\r\n} usb_status;\r\n\r\ntypedef enum {\r\n  USB_USE_FIFO, /*!< USB use FIFO transfer mode */\r\n  USB_USE_DMA   /*!< USB use DMA transfer mode */\r\n} usb_transfer_mode;\r\n\r\ntypedef struct {\r\n  uint8_t core_enum;     /*!< USB core type */\r\n  uint8_t core_speed;    /*!< USB core speed */\r\n  uint8_t num_pipe;      /*!< USB host channel numbers */\r\n  uint8_t num_ep;        /*!< USB device endpoint numbers */\r\n  uint8_t transfer_mode; /*!< USB transfer mode */\r\n  uint8_t phy_itf;       /*!< USB core PHY interface */\r\n  uint8_t sof_enable;    /*!< USB SOF output */\r\n  uint8_t low_power;     /*!< USB low power */\r\n} usb_core_basic;\r\n\r\n/* function declarations */\r\n\r\n/* config core capabilities */\r\nusb_status usb_basic_init(usb_core_basic *usb_basic, usb_core_regs *usb_regs, usb_core_enum usb_core);\r\n\r\n/*initializes the USB controller registers and prepares the core device mode or host mode operation*/\r\nusb_status usb_core_init(usb_core_basic usb_basic, usb_core_regs *usb_regs);\r\n\r\n/* read a packet from the Rx FIFO associated with the endpoint */\r\nvoid *usb_rxfifo_read(usb_core_regs *core_regs, uint8_t *dest_buf, uint16_t byte_count);\r\n\r\n/* write a packet into the Tx FIFO associated with the endpoint */\r\nusb_status usb_txfifo_write(usb_core_regs *usb_regs, uint8_t *src_buf, uint8_t fifo_num, uint16_t byte_count);\r\n\r\n/* flush a Tx FIFO or all Tx FIFOs */\r\nusb_status usb_txfifo_flush(usb_core_regs *usb_regs, uint8_t fifo_num);\r\n\r\n/* flush the entire Rx FIFO */\r\nusb_status usb_rxfifo_flush(usb_core_regs *usb_regs);\r\n\r\n/* get the global interrupts */\r\nstatic inline uint32_t usb_coreintr_get(usb_core_regs *usb_regs) { return usb_regs->gr->GINTEN & usb_regs->gr->GINTF; }\r\n\r\n#endif /* __DRV_USB_CORE_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/drv_usb_dev.h",
    "content": "/*!\r\n    \\file  drv_usb_dev.h\r\n    \\brief USB device low level driver header file\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef __DRV_USB_DEV_H\r\n#define __DRV_USB_DEV_H\r\n\r\n#include \"drv_usb_core.h\"\r\n\r\nenum usb_ctl_status {\r\n  USB_CTL_IDLE = 0U,     /*!< USB control transfer idle state */\r\n  USB_CTL_DATA_IN,       /*!< USB control transfer data in state */\r\n  USB_CTL_LAST_DATA_IN,  /*!< USB control transfer last data in state */\r\n  USB_CTL_DATA_OUT,      /*!< USB control transfer data out state */\r\n  USB_CTL_LAST_DATA_OUT, /*!< USB control transfer last data out state */\r\n  USB_CTL_STATUS_IN,     /*!< USB control transfer status in state*/\r\n  USB_CTL_STATUS_OUT     /*!< USB control transfer status out state */\r\n};\r\n\r\n#define EP_IN(x)  ((uint8_t)(0x80U | (x))) /*!< device IN endpoint */\r\n#define EP_OUT(x) ((uint8_t)(x))           /*!< device OUT endpoint */\r\n\r\n/* USB descriptor */\r\ntypedef struct _usb_desc {\r\n  uint8_t *dev_desc;    /*!< device descriptor */\r\n  uint8_t *config_desc; /*!< config descriptor */\r\n  uint8_t *bos_desc;    /*!< BOS descriptor */\r\n\r\n  void *const *strings; /*!< string descriptor */\r\n} usb_desc;\r\n\r\n/* USB power management */\r\ntypedef struct _usb_pm {\r\n  uint8_t power_mode;        /*!< power mode */\r\n  uint8_t power_low;         /*!< power low */\r\n  uint8_t dev_remote_wakeup; /*!< remote wakeup */\r\n  uint8_t remote_wakeup_on;  /*!< remote wakeup on */\r\n} usb_pm;\r\n\r\n/* USB control information */\r\ntypedef struct _usb_control {\r\n  usb_req req; /*!< USB standard device request */\r\n\r\n  uint8_t ctl_state; /*!< USB control transfer state */\r\n  uint8_t ctl_zlp;   /*!< zero lenth package */\r\n} usb_control;\r\n\r\ntypedef struct {\r\n  struct {\r\n    uint8_t num : 4; /*!< the endpoint number.it can be from 0 to 6 */\r\n    uint8_t pad : 3; /*!< padding between number and direction */\r\n    uint8_t dir : 1; /*!< the endpoint direction */\r\n  } ep_addr;\r\n\r\n  uint8_t ep_type;  /*!< USB endpoint type */\r\n  uint8_t ep_stall; /*!< USB endpoint stall status */\r\n\r\n  uint8_t  frame_num; /*!< number of frame */\r\n  uint16_t max_len;   /*!< Maximum packet lenth */\r\n\r\n  /* transaction level variables */\r\n  uint8_t *xfer_buf;   /*!< transmit buffer */\r\n  uint32_t xfer_len;   /*!< transmit buffer length */\r\n  uint32_t xfer_count; /*!< transmit buffer count */\r\n\r\n  uint32_t remain_len; /*!< remain packet lenth */\r\n\r\n  uint32_t dma_addr; /*!< DMA address */\r\n} usb_transc;\r\n\r\ntypedef struct _usb_core_driver usb_dev;\r\n\r\ntypedef struct _usb_class_core {\r\n  uint8_t command;   /*!< device class request command */\r\n  uint8_t alter_set; /*!< alternative set */\r\n\r\n  uint8_t (*init)(usb_dev *udev, uint8_t config_index);   /*!< initialize handler */\r\n  uint8_t (*deinit)(usb_dev *udev, uint8_t config_index); /*!< de-initialize handler */\r\n\r\n  uint8_t (*req_proc)(usb_dev *udev, usb_req *req); /*!< device request handler */\r\n\r\n  uint8_t (*data_in)(usb_dev *udev, uint8_t ep_num);  /*!< device data in handler */\r\n  uint8_t (*data_out)(usb_dev *udev, uint8_t ep_num); /*!< device data out handler */\r\n\r\n  uint8_t (*SOF)(usb_dev *udev); /*!< Start of frame handler */\r\n\r\n  uint8_t (*incomplete_isoc_in)(usb_dev *udev);  /*!< Incomplete synchronization IN transfer handler */\r\n  uint8_t (*incomplete_isoc_out)(usb_dev *udev); /*!< Incomplete synchronization OUT transfer handler */\r\n} usb_class_core;\r\n\r\ntypedef struct _usb_perp_dev {\r\n  uint8_t config;   /*!< configuration */\r\n  uint8_t dev_addr; /*!< device address */\r\n\r\n  __IO uint8_t cur_status;    /*!< current status */\r\n  __IO uint8_t backup_status; /*!< backup status */\r\n\r\n  usb_transc transc_in[USBFS_MAX_TX_FIFOS];  /*!< endpoint IN transaction */\r\n  usb_transc transc_out[USBFS_MAX_TX_FIFOS]; /*!< endpoint OUT transaction */\r\n\r\n  usb_pm      pm;      /*!< power management */\r\n  usb_desc    desc;    /*!< USB descriptors */\r\n  usb_control control; /*!< USB control information */\r\n\r\n  usb_class_core *class_core; /*!< class driver */\r\n} usb_perp_dev;\r\n\r\ntypedef struct _usb_core_driver {\r\n  usb_core_basic bp;   /*!< USB basic parameters */\r\n  usb_core_regs  regs; /*!< USB registers */\r\n  usb_perp_dev   dev;  /*!< USB peripheral device */\r\n} usb_core_driver;\r\n\r\n/* function declarations */\r\n\r\n/* initialize USB core registers for device mode */\r\nusb_status usb_devcore_init(usb_core_driver *udev);\r\n\r\n/* enable the USB device mode interrupts */\r\nusb_status usb_devint_enable(usb_core_driver *udev);\r\n\r\n/* active the usb transaction */\r\nusb_status usb_transc_active(usb_core_driver *udev, usb_transc *transc);\r\n\r\n/* deactive the usb transaction */\r\nusb_status usb_transc_deactivate(usb_core_driver *udev, usb_transc *transc);\r\n\r\n/* configure usb transaction to start IN transfer */\r\nusb_status usb_transc_inxfer(usb_core_driver *udev, usb_transc *transc);\r\n\r\n/* configure usb transaction to start OUT transfer */\r\nusb_status usb_transc_outxfer(usb_core_driver *udev, usb_transc *transc);\r\n\r\n/* set the usb transaction STALL status */\r\nusb_status usb_transc_stall(usb_core_driver *udev, usb_transc *transc);\r\n\r\n/* clear the usb transaction STALL status */\r\nusb_status usb_transc_clrstall(usb_core_driver *udev, usb_transc *transc);\r\n\r\n/* read device all OUT endpoint interrupt register */\r\nuint32_t usb_oepintnum_read(usb_core_driver *udev);\r\n\r\n/* read device OUT endpoint interrupt flag register */\r\nuint32_t usb_oepintr_read(usb_core_driver *udev, uint8_t ep_num);\r\n\r\n/* read device all IN endpoint interrupt register */\r\nuint32_t usb_iepintnum_read(usb_core_driver *udev);\r\n\r\n/* read device IN endpoint interrupt flag register */\r\nuint32_t usb_iepintr_read(usb_core_driver *udev, uint8_t ep_num);\r\n\r\n/* config the USB device to be disconnected */\r\nvoid usb_dev_disconnect(usb_core_driver *udev);\r\n\r\n/* config the USB device to be connected */\r\nvoid usb_dev_connect(usb_core_driver *udev);\r\n\r\n/* set the USB device address */\r\nvoid usb_devaddr_set(usb_core_driver *pudev, uint8_t dev_addr);\r\n\r\n/* configures OUT endpoint 0 to receive SETUP packets */\r\nvoid usb_ctlep_startout(usb_core_driver *udev);\r\n\r\n/* active remote wakeup signalling */\r\nvoid usb_rwkup_active(usb_core_driver *udev);\r\n\r\n/* reset remote wakeup signalling */\r\nvoid usb_rwkup_reset(usb_core_driver *udev);\r\n\r\n/* set remote wakeup signalling */\r\nvoid usb_rwkup_set(usb_core_driver *udev);\r\n\r\n/* active USB core clock */\r\nvoid usb_clock_active(usb_core_driver *udev);\r\n\r\n/* usb device suspend */\r\nvoid usb_dev_suspend(usb_core_driver *udev);\r\n\r\n/* stop the device and clean up fifos */\r\nvoid usb_dev_stop(usb_core_driver *udev);\r\n\r\n#endif /* __DRV_USB_DEV_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/drv_usb_host.h",
    "content": "/*!\r\n    \\file  drv_usb_host.h\r\n    \\brief USB host mode low level driver header file\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef __DRV_USB_HOST_H\r\n#define __DRV_USB_HOST_H\r\n\r\n#include \"drv_usb_core.h\"\r\n#include \"drv_usb_regs.h\"\r\n#include \"usb_ch9_std.h\"\r\n\r\ntypedef enum _usb_pipe_status {\r\n  PIPE_IDLE = 0U,\r\n  PIPE_XF,\r\n  PIPE_HALTED,\r\n  PIPE_NAK,\r\n  PIPE_NYET,\r\n  PIPE_STALL,\r\n  PIPE_TRACERR,\r\n  PIPE_BBERR,\r\n  PIPE_REQOVR,\r\n  PIPE_DTGERR,\r\n} usb_pipe_staus;\r\n\r\ntypedef enum _usb_pipe_mode { PIPE_PERIOD = 0U, PIPE_NON_PERIOD = 1U } usb_pipe_mode;\r\n\r\ntypedef enum _usb_urb_state { URB_IDLE = 0U, URB_DONE, URB_NOTREADY, URB_ERROR, URB_STALL } usb_urb_state;\r\n\r\ntypedef struct _usb_pipe {\r\n  uint8_t  in_used;\r\n  uint8_t  dev_addr;\r\n  uint32_t dev_speed;\r\n\r\n  struct {\r\n    uint8_t  num;\r\n    uint8_t  dir;\r\n    uint8_t  type;\r\n    uint16_t mps;\r\n  } ep;\r\n\r\n  uint8_t  ping;\r\n  uint32_t DPID;\r\n\r\n  uint8_t *xfer_buf;\r\n  uint32_t xfer_len;\r\n  uint32_t xfer_count;\r\n\r\n  uint8_t data_toggle_in;\r\n  uint8_t data_toggle_out;\r\n\r\n  __IO uint32_t       err_count;\r\n  __IO usb_pipe_staus pp_status;\r\n  __IO usb_urb_state  urb_state;\r\n} usb_pipe;\r\n\r\ntypedef struct _usb_host_drv {\r\n  uint8_t       rx_buf[512U];\r\n  __IO uint32_t connect_status;\r\n  __IO uint32_t port_enabled;\r\n  __IO uint32_t backup_xfercount[USBFS_MAX_TX_FIFOS];\r\n\r\n  usb_pipe pipe[USBFS_MAX_TX_FIFOS];\r\n} usb_host_drv;\r\n\r\ntypedef struct _usb_core_driver {\r\n  usb_core_basic bp;\r\n\r\n  usb_core_regs regs;\r\n\r\n  usb_host_drv host;\r\n} usb_core_driver;\r\n\r\n/* initializes USB core for host mode */\r\nusb_status usb_host_init(usb_core_driver *pudev);\r\n\r\n/* initialize host pipe */\r\nusb_status usb_pipe_init(usb_core_driver *pudev, uint8_t pipe_num);\r\n\r\n/* prepare host pipe for transferring packets */\r\nusb_status usb_pipe_xfer(usb_core_driver *pudev, uint8_t pipe_num);\r\n\r\n/* halt host pipe */\r\nusb_status usb_pipe_halt(usb_core_driver *pudev, uint8_t pipe_num);\r\n\r\n/* configure host pipe to do ping operation */\r\nusb_status usb_pipe_ping(usb_core_driver *pudev, uint8_t pipe_num);\r\n\r\n/* reset host port */\r\nuint32_t usb_port_reset(usb_core_driver *pudev);\r\n\r\n/* control the VBUS to power */\r\nvoid usb_portvbus_switch(usb_core_driver *pudev, uint8_t state);\r\n\r\n/* stop the USB host and clean up FIFO */\r\nvoid usb_host_stop(usb_core_driver *pudev);\r\n\r\n//__STATIC_INLINE uint8_t usb_frame_even (usb_core_driver *pudev)\r\nuint32_t usb_frame_even(usb_core_driver *pudev);\r\n//{\r\n//  return !(pudev->regs.hr->HFINFR & 0x01U);\r\n//}\r\n\r\n//__STATIC_INLINE void usb_phyclock_config (usb_core_driver *pudev, uint8_t clock)\r\nvoid usb_phyclock_config(usb_core_driver *pudev, uint8_t clock);\r\n//{\r\n// pudev->regs.hr->HCTL &= ~HCTL_CLKSEL;\r\n// pudev->regs.hr->HCTL |= clock;\r\n//}\r\n\r\nuint32_t usb_port_read(usb_core_driver *pudev);\r\n// inline uint32_t usb_port_read (usb_core_driver *pudev)\r\n//{\r\n// return *pudev->regs.HPCS & ~(HPCS_PE | HPCS_PCD | HPCS_PEDC);\r\n//}\r\n\r\nuint32_t usb_curspeed_get(usb_core_driver *pudev);\r\n\r\n// inline uint32_t usb_curspeed_get (usb_core_driver *pudev)\r\n//{\r\n// return *pudev->regs.HPCS & HPCS_PS;\r\n//}\r\n\r\n//__STATIC_INLINE uint32_t usb_curframe_get (usb_core_driver *pudev)\r\nuint32_t usb_curframe_get(usb_core_driver *pudev);\r\n//{\r\n//  return (pudev->regs.hr->HFINFR & 0xFFFFU);\r\n//}\r\n\r\n#endif /* __DRV_USB_HOST_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/drv_usb_hw.h",
    "content": "/*!\n    \\file  drv_usb_hw.h\n    \\brief usb hardware configuration header file\n\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\n*/\n\n/*\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\n\n    Redistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n    1. Redistributions of source code must retain the above copyright notice, this\n       list of conditions and the following disclaimer.\n    2. Redistributions in binary form must reproduce the above copyright notice,\n       this list of conditions and the following disclaimer in the documentation\n       and/or other materials provided with the distribution.\n    3. Neither the name of the copyright holder nor the names of its contributors\n       may be used to endorse or promote products derived from this software without\n       specific prior written permission.\n\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\nOF SUCH DAMAGE.\n*/\n\n#ifndef __DRV_USB_HW_H\n#define __DRV_USB_HW_H\n\n#include \"usb_conf.h\"\n\n/* configure USB clock */\nvoid usb_rcu_config(void);\n\n/* configure USB interrupt */\nvoid usb_intr_config(void);\n\n/* initializes delay unit using Timer2 */\nvoid usb_timer_init(void);\n\n/* delay in micro seconds */\nvoid usb_udelay(const uint32_t usec);\n\n/* delay in milli seconds */\nvoid usb_mdelay(const uint32_t msec);\n\n// Functions for USE_HOST_MODE\n/* configure USB VBus */\nvoid usb_vbus_config(void);\n/* drive usb VBus */\nvoid usb_vbus_drive(uint8_t State);\n\n#endif /* __DRV_USB_HW_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/drv_usb_regs.h",
    "content": "/*!\r\n    \\file  drv_usb_regs.h\r\n    \\brief USB cell registers definition and handle macros\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef __DRV_USB_REGS_H\r\n#define __DRV_USB_REGS_H\r\n\r\n#include \"usb_conf.h\"\r\n\r\n#define USBHS_REG_BASE 0x40040000L /*!< base address of USBHS registers */\r\n#define USBFS_REG_BASE 0x50000000L /*!< base address of USBFS registers */\r\n\r\n#define USBFS_MAX_TX_FIFOS 15 /*!< FIFO number */\r\n\r\n#define USBFS_MAX_PACKET_SIZE   64U  /*!< USBFS max packet size */\r\n#define USBFS_MAX_CHANNEL_COUNT 8U   /*!< USBFS host channel count */\r\n#define USBFS_MAX_EP_COUNT      4U   /*!< USBFS device endpoint count */\r\n#define USBFS_MAX_FIFO_WORDLEN  320U /*!< USBFS max fifo size in words */\r\n\r\n#define USBHS_MAX_PACKET_SIZE   512U  /*!< USBHS max packet size */\r\n#define USBHS_MAX_CHANNEL_COUNT 12U   /*!< USBHS host channel count */\r\n#define USBHS_MAX_EP_COUNT      6U    /*!< USBHS device endpoint count */\r\n#define USBHS_MAX_FIFO_WORDLEN  1280U /*!< USBHS max fifo size in words */\r\n\r\n#define USB_DATA_FIFO_OFFSET 0x1000U /*!< USB data fifo offset */\r\n#define USB_DATA_FIFO_SIZE   0x1000U /*!< USB data fifo size */\r\n\r\ntypedef enum {\r\n  USB_CORE_ENUM_HS = 0, /*!< USB core type is HS */\r\n  USB_CORE_ENUM_FS = 1  /*!< USB core type is FS */\r\n} usb_core_enum;\r\n\r\nenum usb_reg_offset {\r\n  USB_REG_OFFSET_CORE      = 0x0000U, /*!< global OTG control and status register */\r\n  USB_REG_OFFSET_DEV       = 0x0800U, /*!< device mode control and status registers */\r\n  USB_REG_OFFSET_EP        = 0x0020U,\r\n  USB_REG_OFFSET_EP_IN     = 0x0900U, /*!< device IN endpoint 0 control register */\r\n  USB_REG_OFFSET_EP_OUT    = 0x0B00U, /*!< device OUT endpoint 0 control register */\r\n  USB_REG_OFFSET_HOST      = 0x0400U, /*!< host control register */\r\n  USB_REG_OFFSET_CH        = 0x0020U,\r\n  USB_REG_OFFSET_PORT      = 0x0440U, /*!< host port control and status register */\r\n  USB_REG_OFFSET_CH_INOUT  = 0x0500U, /*!< Host channel-x control registers */\r\n  USB_REG_OFFSET_PWRCLKCTL = 0x0E00U, /*!< power and clock register */\r\n};\r\n\r\ntypedef struct {\r\n  __IO uint32_t GOTGCS;              /*!< USB global OTG control and status register       000h */\r\n  __IO uint32_t GOTGINTF;            /*!< USB global OTG interrupt flag register           004h */\r\n  __IO uint32_t GAHBCS;              /*!< USB global AHB control and status register       008h */\r\n  __IO uint32_t GUSBCS;              /*!< USB global USB control and status register       00Ch */\r\n  __IO uint32_t GRSTCTL;             /*!< USB global reset control register                010h */\r\n  __IO uint32_t GINTF;               /*!< USB global interrupt flag register               014h */\r\n  __IO uint32_t GINTEN;              /*!< USB global interrupt enable register             018h */\r\n  __IO uint32_t GRSTATR;             /*!< USB receive status debug read register           01Ch */\r\n  __IO uint32_t GRSTATP;             /*!< USB receive status and pop register              020h */\r\n  __IO uint32_t GRFLEN;              /*!< USB global receive FIFO length register          024h */\r\n  __IO uint32_t DIEP0TFLEN_HNPTFLEN; /*!< USB device IN endpoint 0/host non-periodic transmit FIFO length register 028h */\r\n  __IO uint32_t HNPTFQSTAT;          /*!< USB host non-periodic FIFO/queue status register 02Ch */\r\n  uint32_t      Reserved30[2];       /*!< Reserved                                         030h */\r\n  __IO uint32_t GCCFG;               /*!< USB global core configuration register           038h */\r\n  __IO uint32_t CID;                 /*!< USB core ID register                             03Ch */\r\n  uint32_t      Reserved40[48];      /*!< Reserved                                         040h-0FFh */\r\n  __IO uint32_t HPTFLEN;             /*!< USB host periodic transmit FIFO length register  100h */\r\n  __IO uint32_t DIEPTFLEN[15];       /*!< USB device IN endpoint transmit FIFO length register 104h */\r\n} usb_gr;\r\n\r\ntypedef struct {\r\n  __IO uint32_t HCTL;        /*!< USB host control register                             400h */\r\n  __IO uint32_t HFT;         /*!< USB host frame interval register                      404h */\r\n  __IO uint32_t HFINFR;      /*!< USB host frame information remaining register         408h */\r\n  uint32_t      Reserved40C; /*!< Reserved                                              40Ch */\r\n  __IO uint32_t HPTFQSTAT;   /*!< USB host periodic transmit FIFO/queue status register 410h */\r\n  __IO uint32_t HACHINT;     /*!< USB host all channels interrupt register              414h */\r\n  __IO uint32_t HACHINTEN;   /*!< USB host all channels interrupt enable register       418h */\r\n} usb_hr;\r\n\r\ntypedef struct {\r\n  __IO uint32_t HCHCTL;     /*!< USB host channel control register          500h */\r\n  __IO uint32_t HCHSTCTL;   /*!< Reserved                                   504h */\r\n  __IO uint32_t HCHINTF;    /*!< USB host channel interrupt flag register   508h */\r\n  __IO uint32_t HCHINTEN;   /*!< USB host channel interrupt enable register 50Ch */\r\n  __IO uint32_t HCHLEN;     /*!< USB host channel transfer length register  510h */\r\n  __IO uint32_t HCHDMAADDR; /*!< USB host channel-x DMA address register    514h*/\r\n  uint32_t      Reserved[2];\r\n} usb_pr;\r\n\r\ntypedef struct {\r\n  __IO uint32_t DCFG;           /*!< USB device configuration register                           800h */\r\n  __IO uint32_t DCTL;           /*!< USB device control register                                 804h */\r\n  __IO uint32_t DSTAT;          /*!< USB device status register                                  808h */\r\n  uint32_t      Reserved0C;     /*!< Reserved                                                    80Ch */\r\n  __IO uint32_t DIEPINTEN;      /*!< USB device IN endpoint common interrupt enable register     810h */\r\n  __IO uint32_t DOEPINTEN;      /*!< USB device OUT endpoint common interrupt enable register    814h */\r\n  __IO uint32_t DAEPINT;        /*!< USB device all endpoints interrupt register                 818h */\r\n  __IO uint32_t DAEPINTEN;      /*!< USB device all endpoints interrupt enable register          81Ch */\r\n  uint32_t      Reserved20;     /*!< Reserved                                                    820h */\r\n  uint32_t      Reserved24;     /*!< Reserved                                                    824h */\r\n  __IO uint32_t DVBUSDT;        /*!< USB device VBUS discharge time register                     828h */\r\n  __IO uint32_t DVBUSPT;        /*!< USB device VBUS pulsing time register                       82Ch */\r\n  __IO uint32_t DTHRCTL;        /*!< dev thr                                                     830h */\r\n  __IO uint32_t DIEPFEINTEN;    /*!< USB Device IN endpoint FIFO empty interrupt enable register 834h */\r\n  __IO uint32_t DEP1INT;        /*!< USB device endpoint 1 interrupt register                    838h */\r\n  __IO uint32_t DEP1INTEN;      /*!< USB device endpoint 1 interrupt enable register             83Ch */\r\n  uint32_t      Reserved40;     /*!< Reserved                                                    840h */\r\n  __IO uint32_t DIEP1INTEN;     /*!< USB device IN endpoint-1 interrupt enable register          844h */\r\n  uint32_t      Reserved48[15]; /*!< Reserved                                                848-880h */\r\n  __IO uint32_t DOEP1INTEN;     /*!< USB device OUT endpoint-1 interrupt enable register         884h */\r\n} usb_dr;\r\n\r\ntypedef struct {\r\n  __IO uint32_t DIEPCTL;     /*!< USB device IN endpoint control register         900h + (EpNum * 20h) + 00h */\r\n  uint32_t      Reserved04;  /*!< Reserved                                        900h + (EpNum * 20h) + 04h */\r\n  __IO uint32_t DIEPINTF;    /*!< USB device IN endpoint interrupt flag register  900h + (EpNum * 20h) + 08h */\r\n  uint32_t      Reserved0C;  /*!< Reserved                                        900h + (EpNum * 20h) + 0Ch */\r\n  __IO uint32_t DIEPLEN;     /*!< USB device IN endpoint transfer length register 900h + (EpNum * 20h) + 10h */\r\n  __IO uint32_t DIEPDMAADDR; /*!< Device IN endpoint-x DMA address register       900h + (EpNum * 20h) + 14h */\r\n  __IO uint32_t DIEPTFSTAT;  /*!< USB device IN endpoint transmit FIFO status register 900h + (EpNum * 20h) + 18h */\r\n} usb_erin;\r\n\r\ntypedef struct {\r\n  __IO uint32_t DOEPCTL;     /*!< USB device IN endpoint control register         B00h + (EpNum * 20h) + 00h */\r\n  uint32_t      Reserved04;  /*!< Reserved                                        B00h + (EpNum * 20h) + 04h */\r\n  __IO uint32_t DOEPINTF;    /*!< USB device IN endpoint interrupt flag register  B00h + (EpNum * 20h) + 08h */\r\n  uint32_t      Reserved0C;  /*!< Reserved                                        B00h + (EpNum * 20h) + 0Ch */\r\n  __IO uint32_t DOEPLEN;     /*!< USB device IN endpoint transfer length register B00h + (EpNum * 20h) + 10h */\r\n  __IO uint32_t DOEPDMAADDR; /*!< Device OUT endpoint-x DMA address register      B00h + (EpNum * 20h) + 0Ch */\r\n} usb_erout;\r\n\r\ntypedef struct _usb_regs {\r\n  usb_gr *   gr;        /*!< USBFS global registers */\r\n  usb_dr *   dr;        /*!< Device control and status registers */\r\n  usb_hr *   hr;        /*!< Host control and status registers */\r\n  usb_erin * er_in[6];  /*!< USB device IN endpoint register */\r\n  usb_erout *er_out[6]; /*!< USB device OUT endpoint register */\r\n  usb_pr *   pr[15];    /*!< USB Host channel-x control register */\r\n\r\n  __IO uint32_t *HPCS; /*!< USB host port control and status register */\r\n  __IO uint32_t *DFIFO[USBFS_MAX_TX_FIFOS];\r\n  __IO uint32_t *PWRCLKCTL; /*!< USB power and clock control register */\r\n} usb_core_regs;\r\n\r\n/* global OTG control and status register bits definitions */\r\n#define GOTGCS_BSV    BIT(19) /*!< B-Session Valid */\r\n#define GOTGCS_ASV    BIT(18) /*!< A-session valid */\r\n#define GOTGCS_DI     BIT(17) /*!< debounce interval */\r\n#define GOTGCS_CIDPS  BIT(16) /*!< id pin status */\r\n#define GOTGCS_DHNPEN BIT(11) /*!< device HNP enable */\r\n#define GOTGCS_HHNPEN BIT(10) /*!< host HNP enable */\r\n#define GOTGCS_HNPREQ BIT(9)  /*!< HNP request */\r\n#define GOTGCS_HNPS   BIT(8)  /*!< HNP successes */\r\n#define GOTGCS_SRPREQ BIT(1)  /*!< SRP request */\r\n#define GOTGCS_SRPS   BIT(0)  /*!< SRP successes */\r\n\r\n/* global OTG interrupt flag register bits definitions */\r\n#define GOTGINTF_DF     BIT(19) /*!< debounce finish */\r\n#define GOTGINTF_ADTO   BIT(18) /*!< A-device timeout */\r\n#define GOTGINTF_HNPDET BIT(17) /*!< host negotiation request detected */\r\n#define GOTGINTF_HNPEND BIT(9)  /*!< HNP end */\r\n#define GOTGINTF_SRPEND BIT(8)  /*!< SRP end */\r\n#define GOTGINTF_SESEND BIT(2)  /*!< session end */\r\n\r\n/* global AHB control and status register bits definitions */\r\n#define GAHBCS_PTXFTH BIT(8)     /*!< periodic Tx FIFO threshold */\r\n#define GAHBCS_TXFTH  BIT(7)     /*!< tx FIFO threshold */\r\n#define GAHBCS_DMAEN  BIT(5)     /*!< DMA function Enable */\r\n#define GAHBCS_BURST  BITS(1, 4) /*!< the AHB burst type used by DMA */\r\n#define GAHBCS_GINTEN BIT(0)     /*!< global interrupt enable */\r\n\r\n/* global USB control and status register bits definitions */\r\n#define GUSBCS_FDM     BIT(30)      /*!< force device mode */\r\n#define GUSBCS_FHM     BIT(29)      /*!< force host mode */\r\n#define GUSBCS_ULPIEOI BIT(21)      /*!< ULPI external over-current indicator */\r\n#define GUSBCS_ULPIEVD BIT(20)      /*!< ULPI external VBUS driver */\r\n#define GUSBCS_UTT     BITS(10, 13) /*!< USB turnaround time */\r\n#define GUSBCS_HNPCEN  BIT(9)       /*!< HNP capability enable */\r\n#define GUSBCS_SRPCEN  BIT(8)       /*!< SRP capability enable */\r\n#define GUSBCS_EMBPHY  BIT(6)       /*!< embedded PHY selected */\r\n#define GUSBCS_TOC     BITS(0, 2)   /*!< timeout calibration */\r\n\r\n/* global reset control register bits definitions */\r\n#define GRSTCTL_DMAIDL BIT(31)     /*!< DMA idle state */\r\n#define GRSTCTL_DMABSY BIT(30)     /*!< DMA busy */\r\n#define GRSTCTL_TXFNUM BITS(6, 10) /*!< tx FIFO number */\r\n#define GRSTCTL_TXFF   BIT(5)      /*!< tx FIFO flush */\r\n#define GRSTCTL_RXFF   BIT(4)      /*!< rx FIFO flush */\r\n#define GRSTCTL_HFCRST BIT(2)      /*!< host frame counter reset */\r\n#define GRSTCTL_HCSRST BIT(1)      /*!< HCLK soft reset */\r\n#define GRSTCTL_CSRST  BIT(0)      /*!< core soft reset */\r\n\r\n/* global interrupt flag register bits definitions */\r\n#define GINTF_WKUPIF   BIT(31) /*!< wakeup interrupt flag */\r\n#define GINTF_SESIF    BIT(30) /*!< session interrupt flag */\r\n#define GINTF_DISCIF   BIT(29) /*!< disconnect interrupt flag */\r\n#define GINTF_IDPSC    BIT(28) /*!< id pin status change */\r\n#define GINTF_PTXFEIF  BIT(26) /*!< periodic tx FIFO empty interrupt flag */\r\n#define GINTF_HCIF     BIT(25) /*!< host channels interrupt flag */\r\n#define GINTF_HPIF     BIT(24) /*!< host port interrupt flag */\r\n#define GINTF_PXNCIF   BIT(21) /*!< periodic transfer not complete interrupt flag */\r\n#define GINTF_ISOONCIF BIT(21) /*!< isochronous OUT transfer not complete interrupt flag */\r\n#define GINTF_ISOINCIF BIT(20) /*!< isochronous IN transfer not complete interrupt flag */\r\n#define GINTF_OEPIF    BIT(19) /*!< OUT endpoint interrupt flag */\r\n#define GINTF_IEPIF    BIT(18) /*!< IN endpoint interrupt flag */\r\n#define GINTF_EOPFIF   BIT(15) /*!< end of periodic frame interrupt flag */\r\n#define GINTF_ISOOPDIF BIT(14) /*!< isochronous OUT packet dropped interrupt flag */\r\n#define GINTF_ENUMFIF  BIT(13) /*!< enumeration finished */\r\n#define GINTF_RST      BIT(12) /*!< USB reset */\r\n#define GINTF_SP       BIT(11) /*!< USB suspend */\r\n#define GINTF_ESP      BIT(10) /*!< early suspend */\r\n#define GINTF_GONAK    BIT(7)  /*!< global OUT NAK effective */\r\n#define GINTF_GNPINAK  BIT(6)  /*!< global IN non-periodic NAK effective */\r\n#define GINTF_NPTXFEIF BIT(5)  /*!< non-periodic tx FIFO empty interrupt flag */\r\n#define GINTF_RXFNEIF  BIT(4)  /*!< rx FIFO non-empty interrupt flag */\r\n#define GINTF_SOF      BIT(3)  /*!< start of frame */\r\n#define GINTF_OTGIF    BIT(2)  /*!< OTG interrupt flag */\r\n#define GINTF_MFIF     BIT(1)  /*!< mode fault interrupt flag */\r\n#define GINTF_COPM     BIT(0)  /*!< current operation mode */\r\n\r\n/* global interrupt enable register bits definitions */\r\n#define GINTEN_WKUPIE    BIT(31) /*!< wakeup interrupt enable */\r\n#define GINTEN_SESIE     BIT(30) /*!< session interrupt enable */\r\n#define GINTEN_DISCIE    BIT(29) /*!< disconnect interrupt enable */\r\n#define GINTEN_IDPSCIE   BIT(28) /*!< id pin status change interrupt enable */\r\n#define GINTEN_PTXFEIE   BIT(26) /*!< periodic tx FIFO empty interrupt enable */\r\n#define GINTEN_HCIE      BIT(25) /*!< host channels interrupt enable */\r\n#define GINTEN_HPIE      BIT(24) /*!< host port interrupt enable */\r\n#define GINTEN_IPXIE     BIT(21) /*!< periodic transfer not complete interrupt enable */\r\n#define GINTEN_ISOONCIE  BIT(21) /*!< isochronous OUT transfer not complete interrupt enable */\r\n#define GINTEN_ISOINCIE  BIT(20) /*!< isochronous IN transfer not complete interrupt enable */\r\n#define GINTEN_OEPIE     BIT(19) /*!< OUT endpoints interrupt enable */\r\n#define GINTEN_IEPIE     BIT(18) /*!< IN endpoints interrupt enable */\r\n#define GINTEN_EOPFIE    BIT(15) /*!< end of periodic frame interrupt enable */\r\n#define GINTEN_ISOOPDIE  BIT(14) /*!< isochronous OUT packet dropped interrupt enable */\r\n#define GINTEN_ENUMFIE   BIT(13) /*!< enumeration finish enable */\r\n#define GINTEN_RSTIE     BIT(12) /*!< USB reset interrupt enable */\r\n#define GINTEN_SPIE      BIT(11) /*!< USB suspend interrupt enable */\r\n#define GINTEN_ESPIE     BIT(10) /*!< early suspend interrupt enable */\r\n#define GINTEN_GONAKIE   BIT(7)  /*!< global OUT NAK effective interrupt enable */\r\n#define GINTEN_GNPINAKIE BIT(6)  /*!< global non-periodic IN NAK effective interrupt enable */\r\n#define GINTEN_NPTXFEIE  BIT(5)  /*!< non-periodic Tx FIFO empty interrupt enable */\r\n#define GINTEN_RXFNEIE   BIT(4)  /*!< receive FIFO non-empty interrupt enable */\r\n#define GINTEN_SOFIE     BIT(3)  /*!< start of frame interrupt enable */\r\n#define GINTEN_OTGIE     BIT(2)  /*!< OTG interrupt enable */\r\n#define GINTEN_MFIE      BIT(1)  /*!< mode fault interrupt enable */\r\n\r\n/* global receive status read and pop register bits definitions */\r\n#define GRSTATRP_RPCKST BITS(17, 20) /*!< received packet status */\r\n#define GRSTATRP_DPID   BITS(15, 16) /*!< data PID */\r\n#define GRSTATRP_BCOUNT BITS(4, 14)  /*!< byte count */\r\n#define GRSTATRP_CNUM   BITS(0, 3)   /*!< channel number */\r\n#define GRSTATRP_EPNUM  BITS(0, 3)   /*!< endpoint number */\r\n\r\n/* global receive FIFO length register bits definitions */\r\n#define GRFLEN_RXFD BITS(0, 15) /*!< rx FIFO depth */\r\n\r\n/* host non-periodic transmit FIFO length register bits definitions */\r\n#define HNPTFLEN_HNPTXFD   BITS(16, 31) /*!< non-periodic Tx FIFO depth */\r\n#define HNPTFLEN_HNPTXRSAR BITS(0, 15)  /*!< non-periodic Tx RAM start address */\r\n\r\n/**\r\n * @brief USB IN endpoint 0 transmit FIFO length register bits definitions\r\n */\r\n#define DIEP0TFLEN_IEP0TXFD   BITS(16, 31) /*!< IN Endpoint 0 Tx FIFO depth */\r\n#define DIEP0TFLEN_IEP0TXRSAR BITS(0, 15)  /*!< IN Endpoint 0 TX RAM start address */\r\n\r\n/* host non-periodic transmit FIFO/queue status register bits definitions */\r\n#define HNPTFQSTAT_NPTXRQTOP BITS(24, 30) /*!< top entry of the non-periodic Tx request queue */\r\n#define HNPTFQSTAT_NPTXRQS   BITS(16, 23) /*!< non-periodic Tx request queue space */\r\n#define HNPTFQSTAT_NPTXFS    BITS(0, 15)  /*!< non-periodic Tx FIFO space */\r\n#define HNPTFQSTAT_CNUM      BITS(27, 30) /*!< channel number*/\r\n#define HNPTFQSTAT_EPNUM     BITS(27, 30) /*!< endpoint number */\r\n#define HNPTFQSTAT_TYPE      BITS(25, 26) /*!< token type */\r\n#define HNPTFQSTAT_TMF       BIT(24)      /*!< terminate flag */\r\n\r\n/* global core configuration register bits definitions */\r\n#define GCCFG_VBUSIG   BIT(21) /*!< vbus ignored */\r\n#define GCCFG_SOFOEN   BIT(20) /*!< SOF output enable */\r\n#define GCCFG_VBUSBCEN BIT(19) /*!< the VBUS B-device comparer enable */\r\n#define GCCFG_VBUSACEN BIT(18) /*!< the VBUS A-device comparer enable */\r\n#define GCCFG_PWRON    BIT(16) /*!< power on */\r\n\r\n/* core ID register bits definitions */\r\n#define CID_CID BITS(0, 31) /*!< core ID */\r\n\r\n/* host periodic transmit FIFO length register bits definitions */\r\n#define HPTFLEN_HPTXFD   BITS(16, 31) /*!< host periodic Tx FIFO depth */\r\n#define HPTFLEN_HPTXFSAR BITS(0, 15)  /*!< host periodic Tx RAM start address */\r\n\r\n/* device IN endpoint transmit FIFO length register bits definitions */\r\n#define DIEPTFLEN_IEPTXFD   BITS(16, 31) /*!< IN endpoint Tx FIFO x depth */\r\n#define DIEPTFLEN_IEPTXRSAR BITS(0, 15)  /*!< IN endpoint FIFOx Tx x RAM start address */\r\n\r\n/* host control register bits definitions */\r\n#define HCTL_SPDFSLS BIT(2)     /*!< speed limited to FS and LS */\r\n#define HCTL_CLKSEL  BITS(0, 1) /*!< clock select for USB clock */\r\n\r\n/* host frame interval register bits definitions */\r\n#define HFT_FRI BITS(0, 15) /*!< frame interval */\r\n\r\n/* host frame information remaining register bits definitions */\r\n#define HFINFR_FRT   BITS(16, 31) /*!< frame remaining time */\r\n#define HFINFR_FRNUM BITS(0, 15)  /*!< frame number */\r\n\r\n/* host periodic transmit FIFO/queue status register bits definitions */\r\n#define HPTFQSTAT_PTXREQT BITS(24, 31) /*!< top entry of the periodic Tx request queue */\r\n#define HPTFQSTAT_PTXREQS BITS(16, 23) /*!< periodic Tx request queue space */\r\n#define HPTFQSTAT_PTXFS   BITS(0, 15)  /*!< periodic Tx FIFO space */\r\n#define HPTFQSTAT_OEFRM   BIT(31)      /*!< odd/eveb frame */\r\n#define HPTFQSTAT_CNUM    BITS(27, 30) /*!< channel number */\r\n#define HPTFQSTAT_EPNUM   BITS(27, 30) /*!< endpoint number */\r\n#define HPTFQSTAT_TYPE    BITS(25, 26) /*!< token type */\r\n#define HPTFQSTAT_TMF     BIT(24)      /*!< terminate flag */\r\n\r\n#define TFQSTAT_TXFS BITS(0, 15)\r\n#define TFQSTAT_CNUM BITS(27, 30)\r\n\r\n/* host all channels interrupt register bits definitions */\r\n#define HACHINT_HACHINT BITS(0, 11) /*!< host all channel interrupts */\r\n\r\n/* host all channels interrupt enable register bits definitions */\r\n#define HACHINTEN_CINTEN BITS(0, 11) /*!< channel interrupt enable */\r\n\r\n/* host port control and status register bits definitions */\r\n#define HPCS_PS   BITS(17, 18) /*!< port speed */\r\n#define HPCS_PP   BIT(12)      /*!< port power */\r\n#define HPCS_PLST BITS(10, 11) /*!< port line status */\r\n#define HPCS_PRST BIT(8)       /*!< port reset */\r\n#define HPCS_PSP  BIT(7)       /*!< port suspend */\r\n#define HPCS_PREM BIT(6)       /*!< port resume */\r\n#define HPCS_PEDC BIT(3)       /*!< port enable/disable change */\r\n#define HPCS_PE   BIT(2)       /*!< port enable */\r\n#define HPCS_PCD  BIT(1)       /*!< port connect detected */\r\n#define HPCS_PCST BIT(0)       /*!< port connect status */\r\n\r\n/* host channel-x control register bits definitions */\r\n#define HCHCTL_CEN    BIT(31)      /*!< channel enable */\r\n#define HCHCTL_CDIS   BIT(30)      /*!< channel disable */\r\n#define HCHCTL_ODDFRM BIT(29)      /*!< odd frame */\r\n#define HCHCTL_DAR    BITS(22, 28) /*!< device address */\r\n#define HCHCTL_MPC    BITS(20, 21) /*!< multiple packet count */\r\n#define HCHCTL_EPTYPE BITS(18, 19) /*!< endpoint type */\r\n#define HCHCTL_LSD    BIT(17)      /*!< low-speed device */\r\n#define HCHCTL_EPDIR  BIT(15)      /*!< endpoint direction */\r\n#define HCHCTL_EPNUM  BITS(11, 14) /*!< endpoint number */\r\n#define HCHCTL_MPL    BITS(0, 10)  /*!< maximum packet length */\r\n\r\n/* host channel-x split transaction register bits definitions */\r\n#define HCHSTCTL_SPLEN  BIT(31)      /*!< enable high-speed split transaction */\r\n#define HCHSTCTL_CSPLT  BIT(16)      /*!< complete-split enable */\r\n#define HCHSTCTL_ISOPCE BITS(14, 15) /*!< isochronous OUT payload continuation encoding */\r\n#define HCHSTCTL_HADDR  BITS(7, 13)  /*!< HUB address */\r\n#define HCHSTCTL_PADDR  BITS(0, 6)   /*!< port address */\r\n\r\n/* host channel-x interrupt flag register bits definitions */\r\n#define HCHINTF_DTER   BIT(10) /*!< data toggle error */\r\n#define HCHINTF_REQOVR BIT(9)  /*!< request queue overrun */\r\n#define HCHINTF_BBER   BIT(8)  /*!< babble error */\r\n#define HCHINTF_USBER  BIT(7)  /*!< USB bus Error */\r\n#define HCHINTF_NYET   BIT(6)  /*!< NYET */\r\n#define HCHINTF_ACK    BIT(5)  /*!< ACK */\r\n#define HCHINTF_NAK    BIT(4)  /*!< NAK */\r\n#define HCHINTF_STALL  BIT(3)  /*!< STALL */\r\n#define HCHINTF_DMAER  BIT(2)  /*!< DMA error */\r\n#define HCHINTF_CH     BIT(1)  /*!< channel halted */\r\n#define HCHINTF_TF     BIT(0)  /*!< transfer finished */\r\n\r\n/* host channel-x interrupt enable register bits definitions */\r\n#define HCHINTEN_DTERIE   BIT(10) /*!< data toggle error interrupt enable */\r\n#define HCHINTEN_REQOVRIE BIT(9)  /*!< request queue overrun interrupt enable */\r\n#define HCHINTEN_BBERIE   BIT(8)  /*!< babble error interrupt enable */\r\n#define HCHINTEN_USBERIE  BIT(7)  /*!< USB bus error interrupt enable */\r\n#define HCHINTEN_NYETIE   BIT(6)  /*!< NYET interrupt enable */\r\n#define HCHINTEN_ACKIE    BIT(5)  /*!< ACK interrupt enable */\r\n#define HCHINTEN_NAKIE    BIT(4)  /*!< NAK interrupt enable */\r\n#define HCHINTEN_STALLIE  BIT(3)  /*!< STALL interrupt enable */\r\n#define HCHINTEN_DMAERIE  BIT(2)  /*!< DMA error interrupt enable */\r\n#define HCHINTEN_CHIE     BIT(1)  /*!< channel halted interrupt enable */\r\n#define HCHINTEN_TFIE     BIT(0)  /*!< transfer finished interrupt enable */\r\n\r\n/* host channel-x transfer length register bits definitions */\r\n#define HCHLEN_PING BIT(31)      /*!< PING token request */\r\n#define HCHLEN_DPID BITS(29, 30) /*!< data PID */\r\n#define HCHLEN_PCNT BITS(19, 28) /*!< packet count */\r\n#define HCHLEN_TLEN BITS(0, 18)  /*!< transfer length */\r\n\r\n/* host channel-x DMA address register bits definitions */\r\n#define HCHDMAADDR_DMAADDR BITS(0, 31) /*!< DMA address */\r\n\r\n#define PORT_SPEED(x) (((uint32_t)(x) << 17) & HPCS_PS) /*!< Port speed */\r\n\r\n#define PORT_SPEED_HIGH PORT_SPEED(0) /*!< high speed */\r\n#define PORT_SPEED_FULL PORT_SPEED(1) /*!< full speed */\r\n#define PORT_SPEED_LOW  PORT_SPEED(2) /*!< low speed */\r\n\r\n#define PIPE_CTL_DAR(x)    (((uint32_t)(x) << 22) & HCHCTL_DAR)    /*!< device address */\r\n#define PIPE_CTL_EPTYPE(x) (((uint32_t)(x) << 18) & HCHCTL_EPTYPE) /*!< endpoint type */\r\n#define PIPE_CTL_EPNUM(x)  (((uint32_t)(x) << 11) & HCHCTL_EPNUM)  /*!< endpoint number */\r\n#define PIPE_CTL_EPDIR(x)  (((uint32_t)(x) << 15) & HCHCTL_EPDIR)  /*!< endpoint direction */\r\n#define PIPE_CTL_EPMPL(x)  (((uint32_t)(x) << 0) & HCHCTL_MPL)     /*!< maximum packet length */\r\n#define PIPE_CTL_LSD(x)    (((uint32_t)(x) << 17) & HCHCTL_LSD)    /*!< low-Speed device */\r\n\r\n#define PIPE_XFER_PCNT(x) (((uint32_t)(x) << 19) & HCHLEN_PCNT) /*!< packet count */\r\n#define PIPE_XFER_DPID(x) (((uint32_t)(x) << 29) & HCHLEN_DPID) /*!< data PID */\r\n\r\n#define PIPE_DPID_DATA0 PIPE_XFER_DPID(0) /*!< DATA0 */\r\n#define PIPE_DPID_DATA1 PIPE_XFER_DPID(2) /*!< DATA1 */\r\n#define PIPE_DPID_DATA2 PIPE_XFER_DPID(1) /*!< DATA2 */\r\n#define PIPE_DPID_SETUP PIPE_XFER_DPID(3) /*!< MDATA (non-control)/SETUP (control) */\r\n\r\nextern const uint32_t PIPE_DPID[];\r\n\r\n/* device configuration registers bits definitions */\r\n#define DCFG_EOPFT  BITS(11, 12) /*!< end of periodic frame time */\r\n#define DCFG_DAR    BITS(4, 10)  /*!< device address */\r\n#define DCFG_NZLSOH BIT(2)       /*!< non-zero-length status OUT handshake */\r\n#define DCFG_DS     BITS(0, 1)   /*!< device speed */\r\n\r\n/* device control registers bits definitions */\r\n#define DCTL_POIF   BIT(11) /*!< power-on initialization finished */\r\n#define DCTL_CGONAK BIT(10) /*!< clear global OUT NAK */\r\n#define DCTL_SGONAK BIT(9)  /*!< set global OUT NAK */\r\n#define DCTL_CGINAK BIT(8)  /*!< clear global IN NAK */\r\n#define DCTL_SGINAK BIT(7)  /*!< set global IN NAK */\r\n#define DCTL_GONS   BIT(3)  /*!< global OUT NAK status */\r\n#define DCTL_GINS   BIT(2)  /*!< global IN NAK status */\r\n#define DCTL_SD     BIT(1)  /*!< soft disconnect */\r\n#define DCTL_RWKUP  BIT(0)  /*!< remote wakeup */\r\n\r\n/* device status registers bits definitions */\r\n#define DSTAT_FNRSOF BITS(8, 21) /*!< the frame number of the received SOF. */\r\n#define DSTAT_ES     BITS(1, 2)  /*!< enumerated speed */\r\n#define DSTAT_SPST   BIT(0)      /*!< suspend status */\r\n\r\n/* device IN endpoint common interrupt enable registers bits definitions */\r\n#define DIEPINTEN_NAKEN     BIT(13) /*!< NAK handshake sent by USBHS interrupt enable bit */\r\n#define DIEPINTEN_TXFEEN    BIT(7)  /*!< transmit FIFO empty interrupt enable bit */\r\n#define DIEPINTEN_IEPNEEN   BIT(6)  /*!< IN endpoint NAK effective interrupt enable bit */\r\n#define DIEPINTEN_EPTXFUDEN BIT(4)  /*!< endpoint Tx FIFO underrun interrupt enable bit */\r\n#define DIEPINTEN_CITOEN    BIT(3)  /*!< control In Timeout interrupt enable bit */\r\n#define DIEPINTEN_EPDISEN   BIT(1)  /*!< endpoint disabled interrupt enable bit */\r\n#define DIEPINTEN_TFEN      BIT(0)  /*!< transfer finished interrupt enable bit */\r\n\r\n/* device OUT endpoint common interrupt enable registers bits definitions */\r\n#define DOEPINTEN_NYETEN     BIT(14) /*!< NYET handshake is sent interrupt enable bit */\r\n#define DOEPINTEN_BTBSTPEN   BIT(6)  /*!< back-to-back SETUP packets interrupt enable bit */\r\n#define DOEPINTEN_EPRXFOVREN BIT(4)  /*!< endpoint Rx FIFO overrun interrupt enable bit */\r\n#define DOEPINTEN_STPFEN     BIT(3)  /*!< SETUP phase finished interrupt enable bit */\r\n#define DOEPINTEN_EPDISEN    BIT(1)  /*!< endpoint disabled interrupt enable bit */\r\n#define DOEPINTEN_TFEN       BIT(0)  /*!< transfer finished interrupt enable bit */\r\n\r\n/* device all endpoints interrupt registers bits definitions */\r\n#define DAEPINT_OEPITB BITS(16, 21) /*!< device all OUT endpoint interrupt bits */\r\n#define DAEPINT_IEPITB BITS(0, 5)   /*!< device all IN endpoint interrupt bits */\r\n\r\n/* device all endpoints interrupt enable registers bits definitions */\r\n#define DAEPINTEN_OEPIE BITS(16, 21) /*!< OUT endpoint interrupt enable */\r\n#define DAEPINTEN_IEPIE BITS(0, 3)   /*!< IN endpoint interrupt enable */\r\n\r\n/* device Vbus discharge time registers bits definitions */\r\n#define DVBUSDT_DVBUSDT BITS(0, 15) /*!< device VBUS discharge time */\r\n\r\n/* device Vbus pulsing time registers bits definitions */\r\n#define DVBUSPT_DVBUSPT BITS(0, 11) /*!< device VBUS pulsing time */\r\n\r\n/* device IN endpoint FIFO empty interrupt enable register bits definitions */\r\n#define DIEPFEINTEN_IEPTXFEIE BITS(0, 5) /*!< IN endpoint Tx FIFO empty interrupt enable bits */\r\n\r\n/* device endpoint 0 control register bits definitions */\r\n#define DEP0CTL_EPEN    BIT(31)      /*!< endpoint enable */\r\n#define DEP0CTL_EPD     BIT(30)      /*!< endpoint disable */\r\n#define DEP0CTL_SNAK    BIT(27)      /*!< set NAK */\r\n#define DEP0CTL_CNAK    BIT(26)      /*!< clear NAK */\r\n#define DIEP0CTL_TXFNUM BITS(22, 25) /*!< tx FIFO number */\r\n#define DEP0CTL_STALL   BIT(21)      /*!< STALL handshake */\r\n#define DOEP0CTL_SNOOP  BIT(20)      /*!< snoop mode */\r\n#define DEP0CTL_EPTYPE  BITS(18, 19) /*!< endpoint type */\r\n#define DEP0CTL_NAKS    BIT(17)      /*!< NAK status */\r\n#define DEP0CTL_EPACT   BIT(15)      /*!< endpoint active */\r\n#define DEP0CTL_MPL     BITS(0, 1)   /*!< maximum packet length */\r\n\r\n/* device endpoint x control register bits definitions */\r\n#define DEPCTL_EPEN    BIT(31)      /*!< endpoint enable */\r\n#define DEPCTL_EPD     BIT(30)      /*!< endpoint disable */\r\n#define DEPCTL_SODDFRM BIT(29)      /*!< set odd frame */\r\n#define DEPCTL_SD1PID  BIT(29)      /*!< set DATA1 PID */\r\n#define DEPCTL_SEVNFRM BIT(28)      /*!< set even frame */\r\n#define DEPCTL_SD0PID  BIT(28)      /*!< set DATA0 PID */\r\n#define DEPCTL_SNAK    BIT(27)      /*!< set NAK */\r\n#define DEPCTL_CNAK    BIT(26)      /*!< clear NAK */\r\n#define DIEPCTL_TXFNUM BITS(22, 25) /*!< tx FIFO number */\r\n#define DEPCTL_STALL   BIT(21)      /*!< STALL handshake */\r\n#define DOEPCTL_SNOOP  BIT(20)      /*!< snoop mode */\r\n#define DEPCTL_EPTYPE  BITS(18, 19) /*!< endpoint type */\r\n#define DEPCTL_NAKS    BIT(17)      /*!< NAK status */\r\n#define DEPCTL_EOFRM   BIT(16)      /*!< even/odd frame */\r\n#define DEPCTL_DPID    BIT(16)      /*!< endpoint data PID */\r\n#define DEPCTL_EPACT   BIT(15)      /*!< endpoint active */\r\n#define DEPCTL_MPL     BITS(0, 10)  /*!< maximum packet length */\r\n\r\n/* device IN endpoint-x interrupt flag register bits definitions */\r\n#define DIEPINTF_NAK     BIT(13) /*!< NAK handshake sent by USBHS */\r\n#define DIEPINTF_TXFE    BIT(7)  /*!< transmit FIFO empty */\r\n#define DIEPINTF_IEPNE   BIT(6)  /*!< IN endpoint NAK effective */\r\n#define DIEPINTF_EPTXFUD BIT(4)  /*!< endpoint Tx FIFO underrun */\r\n#define DIEPINTF_CITO    BIT(3)  /*!< control In Timeout interrupt */\r\n#define DIEPINTF_EPDIS   BIT(1)  /*!< endpoint disabled */\r\n#define DIEPINTF_TF      BIT(0)  /*!< transfer finished */\r\n\r\n/* device OUT endpoint-x interrupt flag register bits definitions */\r\n#define DOEPINTF_NYET     BIT(14) /*!< NYET handshake is sent */\r\n#define DOEPINTF_BTBSTP   BIT(6)  /*!< back-to-back SETUP packets */\r\n#define DOEPINTF_EPRXFOVR BIT(4)  /*!< endpoint Rx FIFO overrun */\r\n#define DOEPINTF_STPF     BIT(3)  /*!< SETUP phase finished */\r\n#define DOEPINTF_EPDIS    BIT(1)  /*!< endpoint disabled */\r\n#define DOEPINTF_TF       BIT(0)  /*!< transfer finished */\r\n\r\n/* device IN endpoint 0 transfer length register bits definitions */\r\n#define DIEP0LEN_PCNT BITS(19, 20) /*!< packet count */\r\n#define DIEP0LEN_TLEN BITS(0, 6)   /*!< transfer length */\r\n\r\n/* device OUT endpoint 0 transfer length register bits definitions */\r\n#define DOEP0LEN_STPCNT BITS(29, 30) /*!< SETUP packet count */\r\n#define DOEP0LEN_PCNT   BIT(19)      /*!< packet count */\r\n#define DOEP0LEN_TLEN   BITS(0, 6)   /*!< transfer length */\r\n\r\n/* device OUT endpoint-x transfer length register bits definitions */\r\n#define DOEPLEN_RXDPID BITS(29, 30) /*!< received data PID */\r\n#define DOEPLEN_STPCNT BITS(29, 30) /*!< SETUP packet count */\r\n#define DIEPLEN_MCNT   BITS(29, 30) /*!< multi count */\r\n#define DEPLEN_PCNT    BITS(19, 28) /*!< packet count */\r\n#define DEPLEN_TLEN    BITS(0, 18)  /*!< transfer length */\r\n\r\n/* device IN endpoint-x DMA address register bits definitions */\r\n#define DIEPDMAADDR_DMAADDR BITS(0, 31) /*!< DMA address */\r\n\r\n/* device OUT endpoint-x DMA address register bits definitions */\r\n#define DOEPDMAADDR_DMAADDR BITS(0, 31) /*!< DMA address */\r\n\r\n/* device IN endpoint-x transmit FIFO status register bits definitions */\r\n#define DIEPTFSTAT_IEPTFS BITS(0, 15) /*!< IN endpoint Tx FIFO space remaining */\r\n\r\n/* USB power and clock registers bits definition */\r\n#define PWRCLKCTL_SHCLK BIT(1) /*!< stop HCLK */\r\n#define PWRCLKCTL_SUCLK BIT(0) /*!< stop the USB clock */\r\n\r\n#define RSTAT_GOUT_NAK   1U /* global OUT NAK (triggers an interrupt) */\r\n#define RSTAT_DATA_UPDT  2U /* OUT data packet received */\r\n#define RSTAT_XFER_COMP  3U /* OUT transfer completed (triggers an interrupt) */\r\n#define RSTAT_SETUP_COMP 4U /* SETUP transaction completed (triggers an interrupt) */\r\n#define RSTAT_SETUP_UPDT 6U /* SETUP data packet received */\r\n\r\n#define DSTAT_EM_HS_PHY_30MHZ_60MHZ 0U /* USB enumerate speed use high-speed PHY clock in 30MHz or 60MHz */\r\n#define DSTAT_EM_FS_PHY_30MHZ_60MHZ 1U /* USB enumerate speed use full-speed PHY clock in 30MHz or 60MHz */\r\n#define DSTAT_EM_LS_PHY_6MHZ        2U /* USB enumerate speed use low-speed PHY clock in 6MHz */\r\n#define DSTAT_EM_FS_PHY_48MHZ       3U /* USB enumerate speed use full-speed PHY clock in 48MHz */\r\n\r\n#define DPID_DATA0 0U /* device endpoint data PID is DATA0 */\r\n#define DPID_DATA1 2U /* device endpoint data PID is DATA1 */\r\n#define DPID_DATA2 1U /* device endpoint data PID is DATA2 */\r\n#define DPID_MDATA 3U /* device endpoint data PID is MDATA */\r\n\r\n#define GAHBCS_DMAINCR(regval) (GAHBCS_BURST & ((regval) << 1U)) /*!< AHB burst type used by DMA*/\r\n\r\n#define DMA_INCR0  GAHBCS_DMAINCR(0U) /*!< single burst type used by DMA*/\r\n#define DMA_INCR1  GAHBCS_DMAINCR(1U) /*!< 4-beat incrementing burst type used by DMA*/\r\n#define DMA_INCR4  GAHBCS_DMAINCR(3U) /*!< 8-beat incrementing burst type used by DMA*/\r\n#define DMA_INCR8  GAHBCS_DMAINCR(5U) /*!< 16-beat incrementing burst type used by DMA*/\r\n#define DMA_INCR16 GAHBCS_DMAINCR(7U) /*!< 32-beat incrementing burst type used by DMA*/\r\n\r\n#define DCFG_PFRI(regval) (DCFG_EOPFT & ((regval) << 11U)) /*!< end of periodic frame time configuration */\r\n\r\n#define FRAME_INTERVAL_80 DCFG_PFRI(0U) /*!< 80% of the frame time */\r\n#define FRAME_INTERVAL_85 DCFG_PFRI(1U) /*!< 85% of the frame time */\r\n#define FRAME_INTERVAL_90 DCFG_PFRI(2U) /*!< 90% of the frame time */\r\n#define FRAME_INTERVAL_95 DCFG_PFRI(3U) /*!< 95% of the frame time */\r\n\r\n#define DCFG_DEVSPEED(regval) (DCFG_DS & ((regval) << 0U)) /*!< device speed configuration */\r\n\r\n#define USB_SPEED_EXP_HIGH DCFG_DEVSPEED(0U) /*!< device external PHY high speed */\r\n#define USB_SPEED_EXP_FULL DCFG_DEVSPEED(1U) /*!< device external PHY full speed */\r\n#define USB_SPEED_INP_FULL DCFG_DEVSPEED(3U) /*!< device internal PHY full speed */\r\n\r\n#define DEP0_MPL(regval) (DEP0CTL_MPL & ((regval) << 0U)) /*!< maximum packet length configuration */\r\n\r\n#define EP0MPL_64 DEP0_MPL(0U) /*!< maximum packet length 64 bytes */\r\n#define EP0MPL_32 DEP0_MPL(1U) /*!< maximum packet length 32 bytes */\r\n#define EP0MPL_16 DEP0_MPL(2U) /*!< maximum packet length 16 bytes */\r\n#define EP0MPL_8  DEP0_MPL(3U) /*!< maximum packet length 8 bytes */\r\n\r\n#define DOEP0_TLEN(regval)   (DOEP0LEN_TLEN & ((regval) << 0))    /*!< Transfer length */\r\n#define DOEP0_PCNT(regval)   (DOEP0LEN_PCNT & ((regval) << 19))   /*!< Packet count */\r\n#define DOEP0_STPCNT(regval) (DOEP0LEN_STPCNT & ((regval) << 29)) /*!< SETUP packet count */\r\n\r\n#define USB_ULPI_PHY     1 /*!< ULPI interface external PHY */\r\n#define USB_EMBEDDED_PHY 2 /*!< Embedded PHY */\r\n\r\n#define GRXSTS_PKTSTS_IN              2\r\n#define GRXSTS_PKTSTS_IN_XFER_COMP    3\r\n#define GRXSTS_PKTSTS_DATA_TOGGLE_ERR 5\r\n#define GRXSTS_PKTSTS_CH_HALTED       7\r\n\r\n#define DEVICE_MODE 0 /*!< device mode */\r\n#define HOST_MODE   1 /*!< host mode */\r\n#define OTG_MODE    2 /*!< OTG mode */\r\n\r\n#define HCTL_30_60MHZ 0 /*!< USB clock 30-60MHZ */\r\n#define HCTL_48MHZ    1 /*!< USB clock 48MHZ */\r\n#define HCTL_6MHZ     2 /*!< USB clock 6MHZ */\r\n\r\nenum USB_SPEED {\r\n  USB_SPEED_UNKNOWN = 0, /*!< USB speed unknown */\r\n  USB_SPEED_LOW,         /*!< USB speed low */\r\n  USB_SPEED_FULL,        /*!< USB speed full */\r\n  USB_SPEED_HIGH         /*!< USB speed high */\r\n};\r\n\r\n#define EP0_OUT ((uint8_t)0x00) /*!< endpoint out 0 */\r\n#define EP0_IN  ((uint8_t)0x80) /*!< endpoint in 0 */\r\n#define EP1_OUT ((uint8_t)0x01) /*!< endpoint out 1 */\r\n#define EP1_IN  ((uint8_t)0x81) /*!< endpoint in 1 */\r\n#define EP2_OUT ((uint8_t)0x02) /*!< endpoint out 2 */\r\n#define EP2_IN  ((uint8_t)0x82) /*!< endpoint in 2 */\r\n#define EP3_OUT ((uint8_t)0x03) /*!< endpoint out 3 */\r\n#define EP3_IN  ((uint8_t)0x83) /*!< endpoint in 3 */\r\n\r\n#endif /* __DRV_USB_REGS_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/drv_usbd_int.h",
    "content": "/*!\r\n    \\file  drv_usbd_int.h\r\n    \\brief USB device mode interrupt header file\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef __DRV_USBD_INT_H\r\n#define __DRV_USBD_INT_H\r\n\r\n#include \"drv_usb_core.h\"\r\n#include \"drv_usb_dev.h\"\r\n\r\n/* USB device-mode interrupts global service routine handler */\r\nvoid usbd_isr(usb_core_driver *udev);\r\n\r\n#ifdef USB_HS_DEDICATED_EP1_ENABLED\r\n\r\nuint32_t USBD_OTG_EP1IN_ISR_Handler(usb_core_driver *udev);\r\nuint32_t USBD_OTG_EP1OUT_ISR_Handler(usb_core_driver *udev);\r\n\r\n#endif\r\n\r\n#endif /* __DRV_USBD_INT_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/drv_usbh_int.h",
    "content": "/*!\r\n    \\file  drv_usbh_int.h.h\r\n    \\brief USB host mode interrupt management header file\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef __DRV_USBH_INT_H\r\n#define __DRV_USBH_INT_H\r\n\r\n#include \"drv_usb_host.h\"\r\n\r\ntypedef struct _usbh_int_cb {\r\n  uint8_t (*SOF)(usb_core_driver *pudev);\r\n} usbh_int_cb;\r\n\r\nextern usbh_int_cb *usbh_int_fop;\r\n\r\nuint32_t usbh_isr(usb_core_driver *pudev);\r\n\r\n#endif /* __DRV_USBH_INT_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/usb_ch9_std.h",
    "content": "/*!\r\n    \\file  usb_ch9_std.h\r\n    \\brief USB 2.0 standard defines\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef __USB_CH9_STD_H\r\n#define __USB_CH9_STD_H\r\n\r\n#include \"usb_conf.h\"\r\n\r\n#define USB_DEV_QUALIFIER_DESC_LEN 0x0AU /*!< USB device qualifier descriptor length */\r\n#define USB_DEV_DESC_LEN           0x12U /*!< USB device descriptor length */\r\n#define USB_CFG_DESC_LEN           0x09U /*!< USB configuration descriptor length */\r\n#define USB_ITF_DESC_LEN           0x09U /*!< USB interface descriptor length */\r\n#define USB_EP_DESC_LEN            0x07U /*!< USB endpoint descriptor length */\r\n#define USB_OTG_DESC_LEN           0x03U /*!< USB device OTG descriptor length */\r\n\r\n#define USB_SETUP_PACKET_LEN 0x08U /*!< USB setup packet length */\r\n\r\n/* bit 7 of bmRequestType: data phase transfer direction */\r\n#define USB_TRX_MASK 0x80U /*!< USB transfer direction mask */\r\n#define USB_TRX_OUT  0x00U /*!< USB transfer OUT direction */\r\n#define USB_TRX_IN   0x80U /*!< USB transfer IN direction */\r\n\r\n/* bit 6..5 of bmRequestType: request type */\r\n#define USB_REQTYPE_STRD   0x00U /*!< USB standard request */\r\n#define USB_REQTYPE_CLASS  0x20U /*!< USB class request */\r\n#define USB_REQTYPE_VENDOR 0x40U /*!< USB vendor request */\r\n#define USB_REQTYPE_MASK   0x60U /*!< USB request mask */\r\n\r\n#define USBD_BUS_POWERED  0x00U /*!< USB bus power supply */\r\n#define USBD_SELF_POWERED 0x01U /*!< USB self power supply */\r\n\r\n#define USB_STATUS_REMOTE_WAKEUP 2U /*!< USB is in remote wakeup status */\r\n#define USB_STATUS_SELF_POWERED  1U /*!< USB is in self powered status */\r\n\r\n/* bit 4..0 of bmRequestType: recipient type */\r\nenum _usb_recp_type {\r\n  USB_RECPTYPE_DEV  = 0x0U, /*!< USB device request type */\r\n  USB_RECPTYPE_ITF  = 0x1U, /*!< USB interface request type */\r\n  USB_RECPTYPE_EP   = 0x2U, /*!< USB endpoint request type */\r\n  USB_RECPTYPE_MASK = 0x3U  /*!< USB request type mask */\r\n};\r\n\r\n/* bRequest value */\r\nenum _usb_request {\r\n  USB_GET_STATUS        = 0x0U, /*!< USB get status request */\r\n  USB_CLEAR_FEATURE     = 0x1U, /*!< USB clear feature request */\r\n  USB_RESERVED2         = 0x2U,\r\n  USB_SET_FEATURE       = 0x3U, /*!< USB set feature request */\r\n  USB_RESERVED4         = 0x4U,\r\n  USB_SET_ADDRESS       = 0x5U, /*!< USB set address request */\r\n  USB_GET_DESCRIPTOR    = 0x6U, /*!< USB get descriptor request */\r\n  USB_SET_DESCRIPTOR    = 0x7U, /*!< USB set descriptor request */\r\n  USB_GET_CONFIGURATION = 0x8U, /*!< USB get configuration request */\r\n  USB_SET_CONFIGURATION = 0x9U, /*!< USB set configuration request */\r\n  USB_GET_INTERFACE     = 0xAU, /*!< USB get interface request */\r\n  USB_SET_INTERFACE     = 0xBU, /*!< USB set interface request */\r\n  USB_SYNCH_FRAME       = 0xCU  /*!< USB synchronize frame request */\r\n};\r\n\r\n/* descriptor types of USB specifications */\r\nenum _usb_desctype {\r\n  USB_DESCTYPE_DEV              = 0x1U, /*!< USB device descriptor type */\r\n  USB_DESCTYPE_CONFIG           = 0x2U, /*!< USB configuration descriptor type */\r\n  USB_DESCTYPE_STR              = 0x3U, /*!< USB string descriptor type */\r\n  USB_DESCTYPE_ITF              = 0x4U, /*!< USB interface descriptor type */\r\n  USB_DESCTYPE_EP               = 0x5U, /*!< USB endpoint descriptor type */\r\n  USB_DESCTYPE_DEV_QUALIFIER    = 0x6U, /*!< USB device qualtfier descriptor type */\r\n  USB_DESCTYPE_OTHER_SPD_CONFIG = 0x7U, /*!< USB other speed configuration descriptor type */\r\n  USB_DESCTYPE_ITF_POWER        = 0x8U, /*!< USB interface power descriptor type */\r\n  USB_DESCTYPE_BOS              = 0xFU  /*!< USB BOS descriptor type  */\r\n};\r\n\r\n/* USB Endpoint Descriptor bmAttributes bit definitions */\r\n/* bits 1..0 : transfer type */\r\nenum _usbx_type {\r\n  USB_EP_ATTR_CTL  = 0x0U, /*!< USB control transfer type */\r\n  USB_EP_ATTR_ISO  = 0x1U, /*!< USB Isochronous transfer type */\r\n  USB_EP_ATTR_BULK = 0x2U, /*!< USB Bulk transfer type */\r\n  USB_EP_ATTR_INT  = 0x3U  /*!< USB Interrupt transfer type */\r\n};\r\n\r\n/* bits 3..2 : Sync type (only if ISOCHRONOUS) */\r\n#define USB_EP_ATTR_NOSYNC   0x00 /* No Synchronization */\r\n#define USB_EP_ATTR_ASYNC    0x04 /* Asynchronous */\r\n#define USB_EP_ATTR_ADAPTIVE 0x08 /* Adaptive */\r\n#define USB_EP_ATTR_SYNC     0x0C /* Synchronous */\r\n#define USB_EP_ATTR_SYNCTYPE 0x0C /* Synchronous type */\r\n\r\n/* bits 5..4 : usage type (only if ISOCHRONOUS) */\r\n#define USB_EP_ATTR_DATA                   0x00 /* Data endpoint */\r\n#define USB_EP_ATTR_FEEDBACK               0x10 /* Feedback endpoint */\r\n#define USB_EP_ATTR_IMPLICIT_FEEDBACK_DATA 0x20 /* Implicit feedback Data endpoint */\r\n#define USB_EP_ATTR_USAGETYPE              0x30 /* Usage type */\r\n\r\n#define FEATURE_SELECTOR_EP  0x00 /* USB endpoint feature selector */\r\n#define FEATURE_SELECTOR_DEV 0x01 /* USB device feature selector */\r\n\r\n#define BYTE_SWAP(addr) (((uint16_t)(*((uint8_t *)(addr)))) + (uint16_t)(((uint16_t)(*(((uint8_t *)(addr)) + 1U))) << 8U))\r\n\r\n#define BYTE_LOW(x)  ((uint8_t)((x)&0x00FFU))\r\n#define BYTE_HIGH(x) ((uint8_t)(((x)&0xFF00U) >> 8U))\r\n\r\n#define USB_MIN(a, b) (((a) < (b)) ? (a) : (b))\r\n\r\n#define USB_DEFAULT_CONFIG 0U\r\n\r\n/* USB classes */\r\n#define USB_CLASS_HID 0x03U /*!< USB HID class */\r\n#define USB_CLASS_MSC 0x08U /*!< USB MSC class */\r\n\r\n/* use the following values when USB host need to get descriptor  */\r\n#define USBH_DESC(x) (((x) << 8U) & 0xFF00U)\r\n\r\n/* as per usb specs 9.2.6.4 :standard request with data request timeout: 5sec\r\n   standard request with no data stage timeout : 50ms */\r\n#define DATA_STAGE_TIMEOUT   5000U /*!< USB data stage timeout*/\r\n#define NODATA_STAGE_TIMEOUT 50U   /*!< USB no data stage timeout*/\r\n\r\n#pragma pack(1)\r\n\r\n/* USB standard device request structure */\r\ntypedef struct _usb_req {\r\n  uint8_t  bmRequestType; /*!< type of request */\r\n  uint8_t  bRequest;      /*!< request of setup packet */\r\n  uint16_t wValue;        /*!< value of setup packet */\r\n  uint16_t wIndex;        /*!< index of setup packet */\r\n  uint16_t wLength;       /*!< length of setup packet */\r\n} usb_req;\r\n\r\n/* USB setup packet define */\r\ntypedef union _usb_setup {\r\n  uint8_t data[8];\r\n\r\n  usb_req req;\r\n} usb_setup;\r\n\r\n/* USB descriptor defines */\r\n\r\ntypedef struct _usb_desc_header {\r\n  uint8_t bLength;         /*!< size of the descriptor */\r\n  uint8_t bDescriptorType; /*!< type of the descriptor */\r\n} usb_desc_header;\r\n\r\ntypedef struct _usb_desc_dev {\r\n  usb_desc_header header; /*!< descriptor header, including type and size */\r\n\r\n  uint16_t bcdUSB;                /*!< BCD of the supported USB specification */\r\n  uint8_t  bDeviceClass;          /*!< USB device class */\r\n  uint8_t  bDeviceSubClass;       /*!< USB device subclass */\r\n  uint8_t  bDeviceProtocol;       /*!< USB device protocol */\r\n  uint8_t  bMaxPacketSize0;       /*!< size of the control (address 0) endpoint's bank in bytes */\r\n  uint16_t idVendor;              /*!< vendor ID for the USB product */\r\n  uint16_t idProduct;             /*!< unique product ID for the USB product */\r\n  uint16_t bcdDevice;             /*!< product release (version) number */\r\n  uint8_t  iManufacturer;         /*!< string index for the manufacturer's name */\r\n  uint8_t  iProduct;              /*!< string index for the product name/details */\r\n  uint8_t  iSerialNumber;         /*!< string index for the product's globally unique hexadecimal serial number */\r\n  uint8_t  bNumberConfigurations; /*!< total number of configurations supported by the device */\r\n} usb_desc_dev;\r\n\r\ntypedef struct _usb_desc_config {\r\n  usb_desc_header header; /*!< descriptor header, including type and size */\r\n\r\n  uint16_t wTotalLength;        /*!< size of the configuration descriptor header,and all sub descriptors inside the configuration */\r\n  uint8_t  bNumInterfaces;      /*!< total number of interfaces in the configuration */\r\n  uint8_t  bConfigurationValue; /*!< configuration index of the current configuration */\r\n  uint8_t  iConfiguration;      /*!< index of a string descriptor describing the configuration */\r\n  uint8_t  bmAttributes;        /*!< configuration attributes */\r\n  uint8_t  bMaxPower;           /*!< maximum power consumption of the device while in the current configuration */\r\n} usb_desc_config;\r\n\r\ntypedef struct _usb_desc_itf {\r\n  usb_desc_header header; /*!< descriptor header, including type and size */\r\n\r\n  uint8_t bInterfaceNumber;   /*!< index of the interface in the current configuration */\r\n  uint8_t bAlternateSetting;  /*!< alternate setting for the interface number */\r\n  uint8_t bNumEndpoints;      /*!< total number of endpoints in the interface */\r\n  uint8_t bInterfaceClass;    /*!< interface class ID */\r\n  uint8_t bInterfaceSubClass; /*!< interface subclass ID */\r\n  uint8_t bInterfaceProtocol; /*!< interface protocol ID */\r\n  uint8_t iInterface;         /*!< index of the string descriptor describing the interface */\r\n} usb_desc_itf;\r\n\r\ntypedef struct _usb_desc_ep {\r\n  usb_desc_header header; /*!< descriptor header, including type and size. */\r\n\r\n  uint8_t  bEndpointAddress; /*!< logical address of the endpoint */\r\n  uint8_t  bmAttributes;     /*!< endpoint attributes */\r\n  uint16_t wMaxPacketSize;   /*!< size of the endpoint bank, in bytes */\r\n\r\n  uint8_t bInterval; /*!< polling interval in milliseconds for the endpoint if it is an INTERRUPT or ISOCHRONOUS type */\r\n#ifdef AUDIO_ENDPOINT\r\n  uint8_t bRefresh;      /*!< reset to 0 */\r\n  uint8_t bSynchAddress; /*!< reset to 0 */\r\n#endif\r\n} usb_desc_ep;\r\n\r\ntypedef struct _usb_desc_LANGID {\r\n  usb_desc_header header;  /*!< descriptor header, including type and size. */\r\n  uint16_t        wLANGID; /*!< LANGID code */\r\n} usb_desc_LANGID;\r\n\r\n#pragma pack()\r\n\r\n#endif /* __USB_CH9_STD_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/usb_conf.h",
    "content": "#ifndef __USB_CONF_H\n#define __USB_CONF_H\n\n#include \"gd32vf103.h\"\n#include <stddef.h>\n\n//#ifndef USE_USB_FS\n//#define USE_USB_HS\n//#endif\n\n#define USE_USB_FS\n\n#ifdef USE_USB_FS\n#define USB_FS_CORE\n#endif\n\n#ifdef USE_USB_HS\n#define USB_HS_CORE\n#endif\n\n#ifdef USB_FS_CORE\n#define RX_FIFO_FS_SIZE        128\n#define TX0_FIFO_FS_SIZE       64\n#define TX1_FIFO_FS_SIZE       128\n#define TX2_FIFO_FS_SIZE       0\n#define TX3_FIFO_FS_SIZE       0\n#define USB_RX_FIFO_FS_SIZE    128\n#define USB_HTX_NPFIFO_FS_SIZE 96\n#define USB_HTX_PFIFO_FS_SIZE  96\n#endif /* USB_FS_CORE */\n\n#ifdef USB_HS_CORE\n#define RX_FIFO_HS_SIZE  512\n#define TX0_FIFO_HS_SIZE 128\n#define TX1_FIFO_HS_SIZE 372\n#define TX2_FIFO_HS_SIZE 0\n#define TX3_FIFO_HS_SIZE 0\n#define TX4_FIFO_HS_SIZE 0\n#define TX5_FIFO_HS_SIZE 0\n\n#ifdef USE_ULPI_PHY\n#define USB_OTG_ULPI_PHY_ENABLED\n#endif\n\n#ifdef USE_EMBEDDED_PHY\n#define USB_OTG_EMBEDDED_PHY_ENABLED\n#endif\n\n#define USB_OTG_HS_INTERNAL_DMA_ENABLED\n#define USB_OTG_HS_DEDICATED_EP1_ENABLED\n#endif /* USB_HS_CORE */\n\n#ifndef USB_SOF_OUTPUT\n#define USB_SOF_OUTPUT 0\n#endif\n\n#ifndef USB_LOW_POWER\n#define USB_LOW_POWER 0\n#endif\n\n//#define USE_HOST_MODE\n//#define USE_DEVICE_MODE\n//#define USE_OTG_MODE\n\n#ifndef USE_HOST_MODE\n#define USE_DEVICE_MODE\n#endif\n\n#ifndef USB_FS_CORE\n#ifndef USB_HS_CORE\n#error \"USB_HS_CORE or USB_FS_CORE should be defined\"\n#endif\n#endif\n\n#ifndef USE_DEVICE_MODE\n#ifndef USE_HOST_MODE\n#error \"USE_DEVICE_MODE or USE_HOST_MODE should be defined\"\n#endif\n#endif\n\n#ifndef USE_USB_HS\n#ifndef USE_USB_FS\n#error \"USE_USB_HS or USE_USB_FS should be defined\"\n#endif\n#endif\n\n/****************** C Compilers dependant keywords ****************************/\n/* In HS mode and when the DMA is used, all variables and data structures dealing\n   with the DMA during the transaction process should be 4-bytes aligned */\n#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED\n#if defined(__GNUC__) /* GNU Compiler */\n#define __ALIGN_END __attribute__((aligned(4)))\n#define __ALIGN_BEGIN\n#endif /* __GNUC__ */\n#else\n#define __ALIGN_BEGIN\n#define __ALIGN_END\n#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */\n\n#endif /* __USB_CONF_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/usbd_conf.h",
    "content": "#ifndef __USBD_CONF_H\n#define __USBD_CONF_H\n\n#include \"usb_conf.h\"\n\n#define USBD_CFG_MAX_NUM 1\n#define USBD_ITF_MAX_NUM 1\n\n#endif /* __USBD_CONF_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/usbd_core.h",
    "content": "/*!\r\n    \\file  usbd_core.h\r\n    \\brief USB device mode core functions protype\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef __USBD_CORE_H\r\n#define __USBD_CORE_H\r\n\r\n#include \"drv_usb_core.h\"\r\n#include \"drv_usb_dev.h\"\r\n\r\ntypedef enum {\r\n  USBD_OK = 0, /*!< status OK */\r\n  USBD_BUSY,   /*!< status busy */\r\n  USBD_FAIL,   /*!< status fail */\r\n} usbd_status;\r\n\r\nenum _usbd_status {\r\n  USBD_DEFAULT    = 1, /*!< default status */\r\n  USBD_ADDRESSED  = 2, /*!< address send status */\r\n  USBD_CONFIGURED = 3, /*!< configured status */\r\n  USBD_SUSPENDED  = 4  /*!< suspended status */\r\n};\r\n\r\n/* function declarations */\r\n\r\n/* device connect */\r\nvoid usbd_connect(usb_core_driver *udev);\r\n\r\n/* device disconnect */\r\nvoid usbd_disconnect(usb_core_driver *udev);\r\n\r\n/* set USB device address */\r\nvoid usbd_addr_set(usb_core_driver *udev, uint8_t addr);\r\n\r\n/* initailizes the USB device-mode stack and load the class driver */\r\nvoid usbd_init(usb_core_driver *udev, usb_core_enum core, usb_class_core *class_core);\r\n\r\n/* endpoint initialization */\r\nuint32_t usbd_ep_setup(usb_core_driver *udev, const usb_desc_ep *ep_desc);\r\n\r\n/* configure the endpoint when it is disabled */\r\nuint32_t usbd_ep_clear(usb_core_driver *udev, uint8_t ep_addr);\r\n\r\n/* endpoint prepare to receive data */\r\nuint32_t usbd_ep_recev(usb_core_driver *udev, uint8_t ep_addr, uint8_t *pbuf, uint16_t len);\r\n\r\n/* endpoint prepare to transmit data */\r\nuint32_t usbd_ep_send(usb_core_driver *udev, uint8_t ep_addr, uint8_t *pbuf, uint16_t len);\r\n\r\n/* set an endpoint to STALL status */\r\nuint32_t usbd_ep_stall(usb_core_driver *udev, uint8_t ep_addr);\r\n\r\n/* clear endpoint STALLed status */\r\nuint32_t usbd_ep_stall_clear(usb_core_driver *udev, uint8_t ep_addr);\r\n\r\n/* flush the endpoint FIFOs */\r\nuint32_t usbd_fifo_flush(usb_core_driver *udev, uint8_t ep_addr);\r\n\r\n/* get the received data length */\r\nuint16_t usbd_rxcount_get(usb_core_driver *udev, uint8_t ep_num);\r\n\r\n#endif /* __USBD_CORE_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/usbd_enum.h",
    "content": "/*!\r\n    \\file  usbd_enum.h\r\n    \\brief USB enumeration definitions\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef __USBD_ENUM_H\r\n#define __USBD_ENUM_H\r\n\r\n#include \"usbd_conf.h\"\r\n#include \"usbd_core.h\"\r\n#include <wchar.h>\r\n\r\n#ifndef NULL\r\n#define NULL 0U\r\n#endif\r\n\r\ntypedef enum _usb_reqsta {\r\n  REQ_SUPP    = 0x0U, /* request support */\r\n  REQ_NOTSUPP = 0x1U  /* request not support */\r\n} usb_reqsta;\r\n\r\n/* string descriptor index */\r\nenum _str_index {\r\n  STR_IDX_LANGID  = 0x0U, /* language ID string index */\r\n  STR_IDX_MFC     = 0x1U, /* manufacturer string index */\r\n  STR_IDX_PRODUCT = 0x2U, /* product string index */\r\n  STR_IDX_SERIAL  = 0x3U, /* serial string index */\r\n  STR_IDX_CONFIG  = 0x4U, /* configuration string index */\r\n  STR_IDX_ITF     = 0x5U, /* interface string index */\r\n  STR_IDX_MAX     = 0x6U  /* string maximum index */\r\n};\r\n\r\ntypedef enum _usb_pwrsta {\r\n  USB_PWRSTA_SELF_POWERED  = 0x1U, /* USB is in self powered status */\r\n  USB_PWRSTA_REMOTE_WAKEUP = 0x2U, /* USB is in remote wakeup status */\r\n} usb_pwrsta;\r\n\r\ntypedef enum _usb_feature {\r\n  USB_FEATURE_EP_HALT       = 0x0U, /* USB has endpoint halt feature */\r\n  USB_FEATURE_REMOTE_WAKEUP = 0x1U, /* USB has endpoint remote wakeup feature */\r\n  USB_FEATURE_TEST_MODE     = 0x2U  /* USB has endpoint test mode feature */\r\n} usb_feature;\r\n\r\n#define ENG_LANGID 0x0409U /* english language ID */\r\n#define CHN_LANGID 0x0804U /* chinese language ID */\r\n\r\n/* USB device exported macros */\r\n#define CTL_EP(ep) (((ep) == 0x00U) || ((ep) == 0x80U))\r\n\r\n#define WIDE_STRING(string)  _WIDE_STRING(string)\r\n#define _WIDE_STRING(string) L##string\r\n\r\n#define USBD_STRING_DESC(string)                                                 \\\r\n  (void *)&(const struct {                                                       \\\r\n    uint8_t _len;                                                                \\\r\n    uint8_t _type;                                                               \\\r\n    wchar_t _data[sizeof(string)];                                               \\\r\n  }) {                                                                           \\\r\n    sizeof(WIDE_STRING(string)) + 2U - 2U, USB_DESCTYPE_STR, WIDE_STRING(string) \\\r\n  }\r\n\r\n/* function declarations */\r\n\r\n/* handle USB standard device request */\r\nusb_reqsta usbd_standard_request(usb_core_driver *udev, usb_req *req);\r\n\r\n/* handle USB device class request */\r\nusb_reqsta usbd_class_request(usb_core_driver *udev, usb_req *req);\r\n\r\n/* handle USB vendor request */\r\nusb_reqsta usbd_vendor_request(usb_core_driver *udev, usb_req *req);\r\n\r\n/* handle USB enumeration error */\r\nvoid usbd_enum_error(usb_core_driver *udev, usb_req *req);\r\n\r\n/* convert hex 32bits value into unicode char */\r\nvoid int_to_unicode(uint32_t value, uint8_t *pbuf, uint8_t len);\r\n\r\n#endif /* __USBD_ENUM_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/usbd_transc.h",
    "content": "/*!\r\n    \\file  usbd_transc.h\r\n    \\brief USB transaction core functions prototype\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef __USBD_TRANSC_H\r\n#define __USBD_TRANSC_H\r\n\r\n#include \"usbd_core.h\"\r\n\r\n/* function declarations */\r\n\r\n/* USB send data in the control transaction */\r\nusbd_status usbd_ctl_send(usb_core_driver *udev);\r\n\r\n/* USB receive data in control transaction */\r\nusbd_status usbd_ctl_recev(usb_core_driver *udev);\r\n\r\n/* USB send control transaction status */\r\nusbd_status usbd_ctl_status_send(usb_core_driver *udev);\r\n\r\n/* USB control receive status */\r\nusbd_status usbd_ctl_status_recev(usb_core_driver *udev);\r\n\r\n/* USB setup stage processing */\r\nuint8_t usbd_setup_transc(usb_core_driver *udev);\r\n\r\n/* data out stage processing */\r\nuint8_t usbd_out_transc(usb_core_driver *udev, uint8_t ep_num) __attribute__((optimize(\"O0\")));\r\n\r\n/* data in stage processing */\r\nuint8_t usbd_in_transc(usb_core_driver *udev, uint8_t ep_num) __attribute__((optimize(\"O0\")));\r\n\r\n#endif /* __USBD_TRANSC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/usbh_conf.h",
    "content": "#ifndef __USBH_CONF_H\n#define __USBH_CONF_H\n\n#define USBH_MAX_EP_NUM         2\n#define USBH_MAX_INTERFACES_NUM 2\n#define USBH_MSC_MPS_SIZE       0x200\n\n#endif /* __USBH_CONF_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/usbh_core.h",
    "content": "/*!\r\n    \\file  usbh_core.h\r\n    \\brief USB host core state machine header file\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef __USBH_CORE_H\r\n#define __USBH_CORE_H\r\n\r\n#include \"drv_usb_host.h\"\r\n#include \"usbh_conf.h\"\r\n\r\n#define MSC_CLASS    0x08U\r\n#define HID_CLASS    0x03U\r\n#define MSC_PROTOCOL 0x50U\r\n#define CBI_PROTOCOL 0x01U\r\n\r\n#define USBH_MAX_ERROR_COUNT 3U\r\n\r\n#define USBH_DEV_ADDR_DEFAULT 0U\r\n#define USBH_DEV_ADDR         1U\r\n\r\ntypedef enum { USBH_OK = 0U, USBH_BUSY, USBH_FAIL, USBH_NOT_SUPPORTED, USBH_UNRECOVERED_ERROR, USBH_SPEED_UNKNOWN_ERROR, USBH_APPLY_DEINIT } usbh_status;\r\n\r\n/* USB host global operation state */\r\ntypedef enum {\r\n  HOST_DEFAULT = 0U,\r\n  HOST_DETECT_DEV_SPEED,\r\n  HOST_DEV_ATTACHED,\r\n  HOST_DEV_DETACHED,\r\n  HOST_ENUM,\r\n  HOST_CLASS_ENUM,\r\n  HOST_CLASS_HANDLER,\r\n  HOST_USER_INPUT,\r\n  HOST_SUSPENDED,\r\n  HOST_ERROR\r\n} usb_host_state;\r\n\r\n/* USB host enumeration state */\r\ntypedef enum { ENUM_DEFAULT = 0U, ENUM_GET_DEV_DESC, ENUM_SET_ADDR, ENUM_GET_CFG_DESC, ENUM_GET_CFG_DESC_SET, ENUM_GET_STR_DESC, ENUM_SET_CONFIGURATION, ENUM_DEV_CONFIGURED } usbh_enum_state;\r\n\r\n/* USB host control transfer state */\r\ntypedef enum { CTL_IDLE = 0U, CTL_SETUP, CTL_DATA_IN, CTL_DATA_OUT, CTL_STATUS_IN, CTL_STATUS_OUT, CTL_ERROR, CTL_FINISH } usbh_ctl_state;\r\n\r\n/* user action state */\r\ntypedef enum {\r\n  USBH_USER_NO_RESP = 0U,\r\n  USBH_USER_RESP_OK = 1U,\r\n} usbh_user_status;\r\n\r\n/* control transfer information */\r\ntypedef struct _usbh_control {\r\n  uint8_t pipe_in_num;\r\n  uint8_t pipe_out_num;\r\n  uint8_t max_len;\r\n  uint8_t error_count;\r\n\r\n  uint8_t *buf;\r\n  uint16_t ctl_len;\r\n  uint16_t timer;\r\n\r\n  usb_setup      setup;\r\n  usbh_ctl_state ctl_state;\r\n} usbh_control;\r\n\r\n/* USB device property */\r\ntypedef struct {\r\n  uint8_t  addr;\r\n  uint32_t speed;\r\n\r\n  usb_desc_dev    dev_desc;\r\n  usb_desc_config cfg_desc;\r\n  usb_desc_itf    itf_desc[USBH_MAX_INTERFACES_NUM];\r\n  usb_desc_ep     ep_desc[USBH_MAX_INTERFACES_NUM][USBH_MAX_EP_NUM];\r\n} usb_dev_prop;\r\n\r\n/**\r\n * @brief Device class callbacks\r\n */\r\ntypedef struct {\r\n  usbh_status (*class_init)(usb_core_driver *pudev, void *phost);\r\n  void (*class_deinit)(usb_core_driver *pudev, void *phost);\r\n  usbh_status (*class_requests)(usb_core_driver *pudev, void *phost);\r\n  usbh_status (*class_machine)(usb_core_driver *pudev, void *phost);\r\n} usbh_class_cb;\r\n\r\n/**\r\n * @brief User callbacks\r\n */\r\ntypedef struct {\r\n  void (*dev_init)(void);\r\n  void (*dev_deinit)(void);\r\n  void (*dev_attach)(void);\r\n  void (*dev_reset)(void);\r\n  void (*dev_detach)(void);\r\n  void (*dev_over_currented)(void);\r\n  void (*dev_speed_detected)(uint32_t dev_speed);\r\n  void (*dev_devdesc_assigned)(void *dev_desc);\r\n  void (*dev_address_set)(void);\r\n\r\n  void (*dev_cfgdesc_assigned)(usb_desc_config *cfg_desc, usb_desc_itf *itf_desc, usb_desc_ep *ep_desc);\r\n\r\n  void (*dev_mfc_str)(void *mfc_str);\r\n  void (*dev_prod_str)(void *prod_str);\r\n  void (*dev_seral_str)(void *serial_str);\r\n  void (*dev_enumerated)(void);\r\n  usbh_user_status (*dev_user_input)(void);\r\n  int (*dev_user_app)(void);\r\n  void (*dev_not_supported)(void);\r\n  void (*dev_error)(void);\r\n} usbh_user_cb;\r\n\r\n/**\r\n * @brief Host information\r\n */\r\ntypedef struct {\r\n  usb_host_state  cur_state;    /*!< host state machine value */\r\n  usb_host_state  backup_state; /*!< backup of previous state machine value */\r\n  usbh_enum_state enum_state;   /*!< enumeration state machine */\r\n  usbh_control    control;      /*!< USB host control state machine */\r\n  usb_dev_prop    dev_prop;     /*!< USB device properity */\r\n\r\n  usbh_class_cb *class_cb; /*!< USB class callback */\r\n  usbh_user_cb * usr_cb;   /*!< USB user callback */\r\n} usbh_host;\r\n\r\n/* USB host stack initializations */\r\nvoid usbh_init(usb_core_driver *pudev, usb_core_enum core, usbh_host *puhost);\r\n\r\n/* de-initialize USB host */\r\nusbh_status usbh_deinit(usb_core_driver *pudev, usbh_host *puhost);\r\n\r\n/* USB host core main state machine process */\r\nvoid usbh_core_task(usb_core_driver *pudev, usbh_host *puhost);\r\n\r\n/* handle the error on USB host side */\r\nvoid usbh_error_handler(usbh_host *puhost, usbh_status ErrType);\r\n\r\n/* get USB URB state */\r\nstatic inline usb_urb_state usbh_urbstate_get(usb_core_driver *pudev, uint8_t pp_num) { return pudev->host.pipe[pp_num].urb_state; }\r\n\r\n/* get USB transfer data count */\r\nstatic inline uint32_t usbh_xfercount_get(usb_core_driver *pudev, uint8_t pp_num) { return pudev->host.backup_xfercount[pp_num]; }\r\n\r\n#endif /* __USBH_CORE_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/usbh_enum.h",
    "content": "/*!\r\n    \\file  usbh_enum.h\r\n    \\brief USB host mode USB enumeration header file\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef __USBH_ENUM_H\r\n#define __USBH_ENUM_H\r\n\r\n#include \"usb_conf.h\"\r\n#include \"usbh_core.h\"\r\n\r\n/* get the next descriptor header */\r\nusb_desc_header *usbh_nextdesc_get(uint8_t *pbuf, uint16_t *ptr);\r\n\r\n/* configure USB control status parameters */\r\nvoid usbh_ctlstate_config(usbh_host *puhost, uint8_t *buf, uint16_t len);\r\n\r\n/* get device descriptor from the USB device */\r\nusbh_status usbh_devdesc_get(usb_core_driver *pudev, usbh_host *puhost, uint8_t len);\r\n\r\n/* get configuration descriptor from the USB device */\r\nusbh_status usbh_cfgdesc_get(usb_core_driver *pudev, usbh_host *puhost, uint16_t len);\r\n\r\n/* get string descriptor from the USB device */\r\nusbh_status usbh_strdesc_get(usb_core_driver *pudev, usbh_host *puhost, uint8_t str_index, uint8_t *buf, uint16_t len);\r\n\r\n/* set the configuration value to the connected device */\r\nusbh_status usbh_setcfg(usb_core_driver *pudev, usbh_host *puhost, uint16_t config);\r\n\r\n/* set the address to the connected device */\r\nusbh_status usbh_setaddress(usb_core_driver *pudev, usbh_host *puhost, uint8_t dev_addr);\r\n\r\n/* clear or disable a specific feature */\r\nusbh_status usbh_clrfeature(usb_core_driver *pudev, usbh_host *puhost, uint8_t ep_num, uint8_t pp_num);\r\n\r\n/* set the interface value to the connected device */\r\nusbh_status usbh_setinterface(usb_core_driver *pudev, usbh_host *puhost, uint8_t ep_num, uint8_t alter_setting);\r\n\r\n#endif /* __USBH_ENUM_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/usbh_pipe.h",
    "content": "/*!\r\n    \\file  usbh_pipe.h\r\n    \\brief USB host mode pipe header file\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef __USBH_PIPE_H\r\n#define __USBH_PIPE_H\r\n\r\n#include \"usbh_core.h\"\r\n\r\n#define HC_MAX 8U\r\n\r\n#define HC_OK        0x0000U\r\n#define HC_USED      0x8000U\r\n#define HC_ERROR     0xFFFFU\r\n#define HC_USED_MASK 0x7FFFU\r\n\r\n/* allocate a new pipe */\r\nuint8_t usbh_pipe_allocate(usb_core_driver *pudev, uint8_t ep_addr);\r\n\r\n/* delete all USB host pipe */\r\nuint8_t usbh_pipe_delete(usb_core_driver *pudev);\r\n\r\n/* free a pipe */\r\nuint8_t usbh_pipe_free(usb_core_driver *pudev, uint8_t pp_num);\r\n\r\n/* create a pipe */\r\nuint8_t usbh_pipe_create(usb_core_driver *pudev, usb_dev_prop *udev, uint8_t pp_num, uint8_t ep_type, uint16_t ep_mpl);\r\n\r\n/* modify a pipe */\r\nuint8_t usbh_pipe_update(usb_core_driver *pudev, uint8_t pp_num, uint8_t dev_addr, uint32_t dev_speed, uint16_t ep_mpl);\r\n\r\n#endif /* __USBH_PIPE_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb/usbh_transc.h",
    "content": "/*!\r\n    \\file  usbh_transc.h\r\n    \\brief USB host mode transactions header file\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef __USBH_TRANSC_H\r\n#define __USBH_TRANSC_H\r\n\r\n#include \"usb_conf.h\"\r\n#include \"usbh_core.h\"\r\n\r\n/* send the setup packet to the USB device */\r\nusbh_status usbh_ctlsetup_send(usb_core_driver *pudev, uint8_t *buf, uint8_t pp_num);\r\n\r\n/* send a data packet to the USB device */\r\nusbh_status usbh_data_send(usb_core_driver *pudev, uint8_t *buf, uint8_t pp_num, uint16_t len);\r\n\r\n/* receive a data packet from the USB device */\r\nusbh_status usbh_data_recev(usb_core_driver *pudev, uint8_t *buf, uint8_t pp_num, uint16_t len);\r\n\r\n/* USB control transfer handler */\r\nusbh_status usbh_ctl_handler(usb_core_driver *pudev, usbh_host *puhost);\r\n\r\n#endif /* __USBH_TRANSC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103.h",
    "content": "/******************************************************************************\n * @file     gd32vf103.h\n * @brief    NMSIS Core Peripheral Access Layer Header File for GD32VF103 series\n *\n * @version  V1.00\n * @date     4. Jan 2020\n ******************************************************************************/\n/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#ifndef __GD32VF103_H__\n#define __GD32VF103_H__\n\n#include <stddef.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** @addtogroup gd32\n * @{\n */\n\n/** @addtogroup gd32vf103\n * @{\n */\n\n/** @addtogroup Configuration_of_NMSIS\n * @{\n */\n\n/* =========================================================================================================================== */\n/* ================                                Interrupt Number Definition                                ================ */\n/* =========================================================================================================================== */\n\ntypedef enum IRQn {\n  /* =======================================  Nuclei Core Specific Interrupt Numbers  ======================================== */\n\n  Reserved0_IRQn  = 0,  /*!<  Internal reserved */\n  Reserved1_IRQn  = 1,  /*!<  Internal reserved */\n  Reserved2_IRQn  = 2,  /*!<  Internal reserved */\n  SysTimerSW_IRQn = 3,  /*!<  System Timer SW interrupt */\n  Reserved3_IRQn  = 4,  /*!<  Internal reserved */\n  Reserved4_IRQn  = 5,  /*!<  Internal reserved */\n  Reserved5_IRQn  = 6,  /*!<  Internal reserved */\n  SysTimer_IRQn   = 7,  /*!<  System Timer Interrupt */\n  Reserved6_IRQn  = 8,  /*!<  Internal reserved */\n  Reserved7_IRQn  = 9,  /*!<  Internal reserved */\n  Reserved8_IRQn  = 10, /*!<  Internal reserved */\n  Reserved9_IRQn  = 11, /*!<  Internal reserved */\n  Reserved10_IRQn = 12, /*!<  Internal reserved */\n  Reserved11_IRQn = 13, /*!<  Internal reserved */\n  Reserved12_IRQn = 14, /*!<  Internal reserved */\n  Reserved13_IRQn = 15, /*!<  Internal reserved */\n  Reserved14_IRQn = 16, /*!<  Internal reserved */\n  BusError_IRQn   = 17, /*!<  Bus Error interrupt */\n  PerfMon_IRQn    = 18, /*!<  Performance Monitor */\n\n  /* ===========================================  GD32VF103 Specific Interrupt Numbers  ========================================= */\n  /* ToDo: add here your device specific external interrupt numbers. 19~1023 is reserved number for user. Maxmum interrupt supported\n           could get from clicinfo.NUM_INTERRUPT. According the interrupt handlers defined in startup_Device.s\n           eg.: Interrupt for Timer#1       TIM1_IRQHandler   ->   TIM1_IRQn */\n  /* interruput numbers */\n  WWDGT_IRQn          = 19, /*!< window watchDog timer interrupt                          */\n  LVD_IRQn            = 20, /*!< LVD through EXTI line detect interrupt                   */\n  TAMPER_IRQn         = 21, /*!< tamper through EXTI line detect                          */\n  RTC_IRQn            = 22, /*!< RTC alarm interrupt                                      */\n  FMC_IRQn            = 23, /*!< FMC interrupt                                            */\n  RCU_CTC_IRQn        = 24, /*!< RCU and CTC interrupt                                    */\n  EXTI0_IRQn          = 25, /*!< EXTI line 0 interrupts                                   */\n  EXTI1_IRQn          = 26, /*!< EXTI line 1 interrupts                                   */\n  EXTI2_IRQn          = 27, /*!< EXTI line 2 interrupts                                   */\n  EXTI3_IRQn          = 28, /*!< EXTI line 3 interrupts                                   */\n  EXTI4_IRQn          = 29, /*!< EXTI line 4 interrupts                                   */\n  DMA0_Channel0_IRQn  = 30, /*!< DMA0 channel0 interrupt                                  */\n  DMA0_Channel1_IRQn  = 31, /*!< DMA0 channel1 interrupt                                  */\n  DMA0_Channel2_IRQn  = 32, /*!< DMA0 channel2 interrupt                                  */\n  DMA0_Channel3_IRQn  = 33, /*!< DMA0 channel3 interrupt                                  */\n  DMA0_Channel4_IRQn  = 34, /*!< DMA0 channel4 interrupt                                  */\n  DMA0_Channel5_IRQn  = 35, /*!< DMA0 channel5 interrupt                                  */\n  DMA0_Channel6_IRQn  = 36, /*!< DMA0 channel6 interrupt                                  */\n  ADC0_1_IRQn         = 37, /*!< ADC0 and ADC1 interrupt                                  */\n  CAN0_TX_IRQn        = 38, /*!< CAN0 TX interrupts                                       */\n  CAN0_RX0_IRQn       = 39, /*!< CAN0 RX0 interrupts                                      */\n  CAN0_RX1_IRQn       = 40, /*!< CAN0 RX1 interrupts                                      */\n  CAN0_EWMC_IRQn      = 41, /*!< CAN0 EWMC interrupts                                     */\n  EXTI5_9_IRQn        = 42, /*!< EXTI[9:5] interrupts                                     */\n  TIMER0_BRK_IRQn     = 43, /*!< TIMER0 break interrupts                                  */\n  TIMER0_UP_IRQn      = 44, /*!< TIMER0 update interrupts                                 */\n  TIMER0_TRG_CMT_IRQn = 45, /*!< TIMER0 trigger and commutation interrupts                */\n  TIMER0_Channel_IRQn = 46, /*!< TIMER0 channel capture compare interrupts                */\n  TIMER1_IRQn         = 47, /*!< TIMER1 interrupt                                         */\n  TIMER2_IRQn         = 48, /*!< TIMER2 interrupt                                         */\n  TIMER3_IRQn         = 49, /*!< TIMER3 interrupts                                        */\n  I2C0_EV_IRQn        = 50, /*!< I2C0 event interrupt                                     */\n  I2C0_ER_IRQn        = 51, /*!< I2C0 error interrupt                                     */\n  I2C1_EV_IRQn        = 52, /*!< I2C1 event interrupt                                     */\n  I2C1_ER_IRQn        = 53, /*!< I2C1 error interrupt                                     */\n  SPI0_IRQn           = 54, /*!< SPI0 interrupt                                           */\n  SPI1_IRQn           = 55, /*!< SPI1 interrupt                                           */\n  USART0_IRQn         = 56, /*!< USART0 interrupt                                         */\n  USART1_IRQn         = 57, /*!< USART1 interrupt                                         */\n  USART2_IRQn         = 58, /*!< USART2 interrupt                                         */\n  EXTI10_15_IRQn      = 59, /*!< EXTI[15:10] interrupts                                   */\n  RTC_ALARM_IRQn      = 60, /*!< RTC alarm interrupt EXTI                                 */\n  USBFS_WKUP_IRQn     = 61, /*!< USBFS wakeup interrupt                                   */\n\n  EXMC_IRQn = 67, /*!< EXMC global interrupt                                    */\n\n  TIMER4_IRQn        = 69, /*!< TIMER4 global interrupt                                  */\n  SPI2_IRQn          = 70, /*!< SPI2 global interrupt                                    */\n  UART3_IRQn         = 71, /*!< UART3 global interrupt                                   */\n  UART4_IRQn         = 72, /*!< UART4 global interrupt                                   */\n  TIMER5_IRQn        = 73, /*!< TIMER5 global interrupt                                  */\n  TIMER6_IRQn        = 74, /*!< TIMER6 global interrupt                                  */\n  DMA1_Channel0_IRQn = 75, /*!< DMA1 channel0 global interrupt                           */\n  DMA1_Channel1_IRQn = 76, /*!< DMA1 channel1 global interrupt                           */\n  DMA1_Channel2_IRQn = 77, /*!< DMA1 channel2 global interrupt                           */\n  DMA1_Channel3_IRQn = 78, /*!< DMA1 channel3 global interrupt                           */\n  DMA1_Channel4_IRQn = 79, /*!< DMA1 channel3 global interrupt                           */\n\n  CAN1_TX_IRQn   = 82, /*!< CAN1 TX interrupt                                        */\n  CAN1_RX0_IRQn  = 83, /*!< CAN1 RX0 interrupt                                       */\n  CAN1_RX1_IRQn  = 84, /*!< CAN1 RX1 interrupt                                       */\n  CAN1_EWMC_IRQn = 85, /*!< CAN1 EWMC interrupt                                      */\n  USBFS_IRQn     = 86, /*!< USBFS global interrupt                                   */\n\n  SOC_INT_MAX,\n\n} IRQn_Type;\n\n/* =========================================================================================================================== */\n/* ================                                  Exception Code Definition                                ================ */\n/* =========================================================================================================================== */\n\ntypedef enum EXCn {\n  /* =======================================  Nuclei N/NX Specific Exception Code  ======================================== */\n  InsUnalign_EXCn    = 0,     /*!<  Instruction address misaligned */\n  InsAccFault_EXCn   = 1,     /*!<  Instruction access fault */\n  IlleIns_EXCn       = 2,     /*!<  Illegal instruction */\n  Break_EXCn         = 3,     /*!<  Beakpoint */\n  LdAddrUnalign_EXCn = 4,     /*!<  Load address misaligned */\n  LdFault_EXCn       = 5,     /*!<  Load access fault */\n  StAddrUnalign_EXCn = 6,     /*!<  Store or AMO address misaligned */\n  StAccessFault_EXCn = 7,     /*!<  Store or AMO access fault */\n  UmodeEcall_EXCn    = 8,     /*!<  Environment call from User mode */\n  MmodeEcall_EXCn    = 11,    /*!<  Environment call from Machine mode */\n  NMI_EXCn           = 0xfff, /*!<  NMI interrupt*/\n} EXCn_Type;\n\n/* =========================================================================================================================== */\n/* ================                           Processor and Core Peripheral Section                           ================ */\n/* =========================================================================================================================== */\n\n/* ToDo: set the defines according your Device */\n/* ToDo: define the correct core revision */\n#define __NUCLEI_N_REV 0x0100 /*!< Core Revision r1p0 */\n\n/* ToDo: define the correct core features for the nuclei_soc */\n#define __ECLIC_PRESENT  1            /*!< Set to 1 if ECLIC is present */\n#define __ECLIC_BASEADDR 0xD2000000UL /*!< Set to ECLIC baseaddr of your device */\n\n#define __ECLIC_INTCTLBITS  4            /*!< Set to 1 - 8, the number of hardware bits are actually implemented in the clicintctl registers. */\n#define __ECLIC_INTNUM      86           /*!< Set to 1 - 1005, the external interrupt number of ECLIC Unit */\n#define __SYSTIMER_PRESENT  1            /*!< Set to 1 if System Timer is present */\n#define __SYSTIMER_BASEADDR 0xD1000000UL /*!< Set to SysTimer baseaddr of your device */\n\n/*!< Set to 0, 1, or 2, 0 not present, 1 single floating point unit present, 2 double floating point unit present */\n#define __FPU_PRESENT 0\n\n#define __DSP_PRESENT          0 /*!< Set to 1 if DSP is present */\n#define __PMP_PRESENT          1 /*!< Set to 1 if PMP is present */\n#define __PMP_ENTRY_NUM        8 /*!< Set to 8 or 16, the number of PMP entries */\n#define __ICACHE_PRESENT       0 /*!< Set to 1 if I-Cache is present */\n#define __DCACHE_PRESENT       0 /*!< Set to 1 if D-Cache is present */\n#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */\n#define __Vendor_EXCEPTION     0 /*!< Set to 1 if vendor exception hander is present */\n\n/** @} */ /* End of group Configuration_of_CMSIS */\n\n#include <nmsis_core.h> /*!< Nuclei N/NX class processor and core peripherals */\n/* ToDo: include your system_nuclei_soc.h file\n         replace 'Device' with your device name */\n#include \"system_gd32vf103.h\" /*!< gd32vf103 System */\n\n/* ========================================  Start of section using anonymous unions  ======================================== */\n#if defined(__GNUC__)\n/* anonymous unions are enabled by default */\n#else\n#warning Not supported compiler type\n#endif\n\n/* system frequency define */\n#define __IRC8M       (IRC8M_VALUE) /* internal 8 MHz RC oscillator frequency */\n#define __HXTAL       (HXTAL_VALUE) /* high speed crystal oscillator frequency */\n#define __SYS_OSC_CLK (__IRC8M)     /* main oscillator frequency */\n\n#define __SYSTEM_CLOCK_108M_PLL_HXTAL (uint32_t)(108000000)\n\n#define RTC_FREQ LXTAL_VALUE\n// The TIMER frequency is just the RTC frequency\n#define SOC_TIMER_FREQ ((uint32_t)SystemCoreClock / 4) // LXTAL_VALUE units HZ\n\n/* enum definitions */\ntypedef enum { DISABLE = 0, ENABLE = !DISABLE } EventStatus, ControlStatus;\n\ntypedef enum { FALSE = 0, TRUE = !FALSE } BOOL;\n\ntypedef enum { RESET = 0, SET = 1, MAX = 0X7FFFFFFF } FlagStatus;\n\ntypedef enum { ERROR = 0, SUCCESS = !ERROR } ErrStatus;\n\n/* =========================================================================================================================== */\n/* ================                            Device Specific Peripheral Section                             ================ */\n/* =========================================================================================================================== */\n\n/** @addtogroup Device_Peripheral_peripherals\n * @{\n */\n\n/****************************************************************************\n * Platform definitions\n *****************************************************************************/\n\n/* ToDo: add here your device specific peripheral access structure typedefs\n         following is an example for Systick Timer*/\n\n/* =========================================================================================================================== */\n/* ================                                            SysTick Timer                                            ================ */\n/* =========================================================================================================================== */\n\n/*@}*/ /* end of group nuclei_soc_Peripherals */\n\n/* =========================================  End of section using anonymous unions  ========================================= */\n#if defined(__GNUC__)\n/* anonymous unions are enabled by default */\n#else\n#warning Not supported compiler type\n#endif\n\n/* =========================================================================================================================== */\n/* ================                          Device Specific Peripheral Address Map                           ================ */\n/* =========================================================================================================================== */\n\n/* ToDo: add here your device peripherals base addresses\n         following is an example for timer */\n/** @addtogroup Device_Peripheral_peripheralAddr\n * @{\n */\n/* main flash and SRAM memory map */\n#define FLASH_BASE ((uint32_t)0x08000000U) /*!< main FLASH base address          */\n#define SRAM_BASE  ((uint32_t)0x20000000U) /*!< SRAM0 base address               */\n#define OB_BASE    ((uint32_t)0x1FFFF800U) /*!< OB base address                  */\n#define DBG_BASE   ((uint32_t)0xE0042000U) /*!< DBG base address                 */\n#define EXMC_BASE  ((uint32_t)0xA0000000U) /*!< EXMC register base address       */\n\n/* peripheral memory map */\n#define APB1_BUS_BASE ((uint32_t)0x40000000U) /*!< apb1 base address                */\n#define APB2_BUS_BASE ((uint32_t)0x40010000U) /*!< apb2 base address                */\n#define AHB1_BUS_BASE ((uint32_t)0x40018000U) /*!< ahb1 base address                */\n#define AHB3_BUS_BASE ((uint32_t)0x60000000U) /*!< ahb3 base address                */\n\n/* advanced peripheral bus 1 memory map */\n#define TIMER_BASE (APB1_BUS_BASE + 0x00000000U) /*!< TIMER base address               */\n#define RTC_BASE   (APB1_BUS_BASE + 0x00002800U) /*!< RTC base address                 */\n#define WWDGT_BASE (APB1_BUS_BASE + 0x00002C00U) /*!< WWDGT base address               */\n#define FWDGT_BASE (APB1_BUS_BASE + 0x00003000U) /*!< FWDGT base address               */\n#define SPI_BASE   (APB1_BUS_BASE + 0x00003800U) /*!< SPI base address                 */\n#define USART_BASE (APB1_BUS_BASE + 0x00004400U) /*!< USART base address               */\n#define I2C_BASE   (APB1_BUS_BASE + 0x00005400U) /*!< I2C base address                 */\n#define CAN_BASE   (APB1_BUS_BASE + 0x00006400U) /*!< CAN base address                 */\n#define BKP_BASE   (APB1_BUS_BASE + 0x00006C00U) /*!< BKP base address                 */\n#define PMU_BASE   (APB1_BUS_BASE + 0x00007000U) /*!< PMU base address                 */\n#define DAC_BASE   (APB1_BUS_BASE + 0x00007400U) /*!< DAC base address                 */\n\n/* advanced peripheral bus 2 memory map */\n#define AFIO_BASE (APB2_BUS_BASE + 0x00000000U) /*!< AFIO base address                */\n#define EXTI_BASE (APB2_BUS_BASE + 0x00000400U) /*!< EXTI base address                */\n#define GPIO_BASE (APB2_BUS_BASE + 0x00000800U) /*!< GPIO base address                */\n#define ADC_BASE  (APB2_BUS_BASE + 0x00002400U) /*!< ADC base address                 */\n\n/* advanced high performance bus 1 memory map */\n#define DMA_BASE   (AHB1_BUS_BASE + 0x00008000U) /*!< DMA base address                 */\n#define RCU_BASE   (AHB1_BUS_BASE + 0x00009000U) /*!< RCU base address                 */\n#define FMC_BASE   (AHB1_BUS_BASE + 0x0000A000U) /*!< FMC base address                 */\n#define CRC_BASE   (AHB1_BUS_BASE + 0x0000B000U) /*!< CRC base address                 */\n#define USBFS_BASE (AHB1_BUS_BASE + 0x0FFE8000U) /*!< USBFS base address               */\n\n/** @} */ /* End of group Device_Peripheral_peripheralAddr */\n\n/* =========================================================================================================================== */\n/* ================                                  Peripheral declaration                                   ================ */\n/* =========================================================================================================================== */\n\n/* ToDo: add here your device peripherals pointer definitions\n         following is an example for timer */\n/** @addtogroup Device_Peripheral_declaration\n * @{\n */\n/* bit operations */\n#define REG32(addr)                  (*(volatile uint32_t *)(uint32_t)(addr))\n#define REG16(addr)                  (*(volatile uint16_t *)(uint32_t)(addr))\n#define REG8(addr)                   (*(volatile uint8_t *)(uint32_t)(addr))\n#define BIT(x)                       ((uint32_t)((uint32_t)0x01U << (x)))\n#define BITS(start, end)             ((0xFFFFFFFFUL << (start)) & (0xFFFFFFFFUL >> (31U - (uint32_t)(end))))\n#define GET_BITS(regval, start, end) (((regval)&BITS((start), (end))) >> (start))\n\n// Interrupt Numbers\n#define SOC_ECLIC_NUM_INTERRUPTS 86\n#define SOC_ECLIC_INT_GPIO_BASE  19\n\n// Interrupt Handler Definitions\n#define SOC_MTIMER_HANDLER  eclic_mtip_handler\n#define SOC_SOFTINT_HANDLER eclic_msip_handler\n\n#define NUM_GPIO 32\n\nextern uint32_t get_cpu_freq(void);\n\n/**\n *  \\brief      delay a time in milliseconds\n *  \\param[in]  count: count in milliseconds\n *  \\param[out] none\n *  \\retval     none\n */\nextern void delay_1ms(uint32_t count);\n\n/** @} */ /* End of group gd32vf103_soc */\n\n/** @} */ /* End of group gd32vf103 */\n\n/* define startup timeout value of high speed crystal oscillator (HXTAL) */\n#if !defined(HXTAL_STARTUP_TIMEOUT)\n#define HXTAL_STARTUP_TIMEOUT ((uint16_t)0xFFFF)\n#endif /* high speed crystal oscillator startup timeout */\n\n/* define value of internal 8MHz RC oscillator (IRC8M) in Hz */\n#if !defined(IRC8M_VALUE)\n#define IRC8M_VALUE ((uint32_t)8000000)\n#endif /* internal 8MHz RC oscillator value */\n\n/* define startup timeout value of internal 8MHz RC oscillator (IRC8M) */\n#if !defined(IRC8M_STARTUP_TIMEOUT)\n#define IRC8M_STARTUP_TIMEOUT ((uint16_t)0x0500)\n#endif /* internal 8MHz RC oscillator startup timeout */\n\n/* define value of internal 40KHz RC oscillator(IRC40K) in Hz */\n#if !defined(IRC40K_VALUE)\n#define IRC40K_VALUE ((uint32_t)40000)\n#endif /* internal 40KHz RC oscillator value */\n\n/* define value of low speed crystal oscillator (LXTAL)in Hz */\n#if !defined(LXTAL_VALUE)\n#define LXTAL_VALUE ((uint32_t)32768)\n#endif /* low speed crystal oscillator value */\n\n#if !defined(HXTAL_VALUE)\n#define HXTAL_VALUE ((uint32_t)8000000)\n#endif /* high speed crystal oscillator value */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __GD32VF103_SOC_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_adc.h",
    "content": "/*!\r\n    \\file    gd32vf103_adc.h\r\n    \\brief   definitions for the ADC\r\n\r\n    \\version 2020-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_ADC_H\r\n#define GD32VF103_ADC_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* ADC definitions */\r\n#define ADC0 ADC_BASE\r\n#define ADC1 (ADC_BASE + 0x400U)\r\n\r\n/* registers definitions */\r\n#define ADC_STAT(adcx)   REG32((adcx) + 0x00U) /*!< ADC status register */\r\n#define ADC_CTL0(adcx)   REG32((adcx) + 0x04U) /*!< ADC control register 0 */\r\n#define ADC_CTL1(adcx)   REG32((adcx) + 0x08U) /*!< ADC control register 1 */\r\n#define ADC_SAMPT0(adcx) REG32((adcx) + 0x0CU) /*!< ADC sampling time register 0 */\r\n#define ADC_SAMPT1(adcx) REG32((adcx) + 0x10U) /*!< ADC sampling time register 1 */\r\n#define ADC_IOFF0(adcx)  REG32((adcx) + 0x14U) /*!< ADC inserted channel data offset register 0 */\r\n#define ADC_IOFF1(adcx)  REG32((adcx) + 0x18U) /*!< ADC inserted channel data offset register 1 */\r\n#define ADC_IOFF2(adcx)  REG32((adcx) + 0x1CU) /*!< ADC inserted channel data offset register 2 */\r\n#define ADC_IOFF3(adcx)  REG32((adcx) + 0x20U) /*!< ADC inserted channel data offset register 3 */\r\n#define ADC_WDHT(adcx)   REG32((adcx) + 0x24U) /*!< ADC watchdog high threshold register */\r\n#define ADC_WDLT(adcx)   REG32((adcx) + 0x28U) /*!< ADC watchdog low threshold register */\r\n#define ADC_RSQ0(adcx)   REG32((adcx) + 0x2CU) /*!< ADC regular sequence register 0 */\r\n#define ADC_RSQ1(adcx)   REG32((adcx) + 0x30U) /*!< ADC regular sequence register 1 */\r\n#define ADC_RSQ2(adcx)   REG32((adcx) + 0x34U) /*!< ADC regular sequence register 2 */\r\n#define ADC_ISQ(adcx)    REG32((adcx) + 0x38U) /*!< ADC inserted sequence register */\r\n#define ADC_IDATA0(adcx) REG32((adcx) + 0x3CU) /*!< ADC inserted data register 0 */\r\n#define ADC_IDATA1(adcx) REG32((adcx) + 0x40U) /*!< ADC inserted data register 1 */\r\n#define ADC_IDATA2(adcx) REG32((adcx) + 0x44U) /*!< ADC inserted data register 2 */\r\n#define ADC_IDATA3(adcx) REG32((adcx) + 0x48U) /*!< ADC inserted data register 3 */\r\n#define ADC_RDATA(adcx)  REG32((adcx) + 0x4CU) /*!< ADC regular data register */\r\n#define ADC_OVSCR(adcx)  REG32((adcx) + 0x80U) /*!< ADC oversample control register */\r\n\r\n/* bits definitions */\r\n/* ADC_STAT */\r\n#define ADC_STAT_WDE  BIT(0) /*!< analog watchdog event flag */\r\n#define ADC_STAT_EOC  BIT(1) /*!< end of conversion */\r\n#define ADC_STAT_EOIC BIT(2) /*!< inserted channel end of conversion */\r\n#define ADC_STAT_STIC BIT(3) /*!< inserted channel start flag */\r\n#define ADC_STAT_STRC BIT(4) /*!< regular channel start flag */\r\n\r\n/* ADC_CTL0 */\r\n#define ADC_CTL0_WDCHSEL BITS(0, 4)   /*!< analog watchdog channel select bits */\r\n#define ADC_CTL0_EOCIE   BIT(5)       /*!< interrupt enable for EOC */\r\n#define ADC_CTL0_WDEIE   BIT(6)       /*!< analog watchdog interrupt enable */\r\n#define ADC_CTL0_EOICIE  BIT(7)       /*!< interrupt enable for inserted channels */\r\n#define ADC_CTL0_SM      BIT(8)       /*!< scan mode */\r\n#define ADC_CTL0_WDSC    BIT(9)       /*!< when in scan mode, analog watchdog is effective on a single channel */\r\n#define ADC_CTL0_ICA     BIT(10)      /*!< automatic inserted group conversion */\r\n#define ADC_CTL0_DISRC   BIT(11)      /*!< discontinuous mode on regular channels */\r\n#define ADC_CTL0_DISIC   BIT(12)      /*!< discontinuous mode on inserted channels */\r\n#define ADC_CTL0_DISNUM  BITS(13, 15) /*!< discontinuous mode channel count */\r\n#define ADC_CTL0_SYNCM   BITS(16, 19) /*!< sync mode selection */\r\n#define ADC_CTL0_IWDEN   BIT(22)      /*!< analog watchdog enable on inserted channels */\r\n#define ADC_CTL0_RWDEN   BIT(23)      /*!< analog watchdog enable on regular channels */\r\n\r\n/* ADC_CTL1 */\r\n#define ADC_CTL1_ADCON  BIT(0)       /*!< ADC converter on */\r\n#define ADC_CTL1_CTN    BIT(1)       /*!< continuous conversion */\r\n#define ADC_CTL1_CLB    BIT(2)       /*!< ADC calibration */\r\n#define ADC_CTL1_RSTCLB BIT(3)       /*!< reset calibration */\r\n#define ADC_CTL1_DMA    BIT(8)       /*!< direct memory access mode */\r\n#define ADC_CTL1_DAL    BIT(11)      /*!< data alignment */\r\n#define ADC_CTL1_ETSIC  BITS(12, 14) /*!< external trigger select for inserted channel */\r\n#define ADC_CTL1_ETEIC  BIT(15)      /*!< external trigger enable for inserted channel */\r\n#define ADC_CTL1_ETSRC  BITS(17, 19) /*!< external trigger select for regular channel */\r\n#define ADC_CTL1_ETERC  BIT(20)      /*!< external trigger conversion mode for inserted channels */\r\n#define ADC_CTL1_SWICST BIT(21)      /*!< start on inserted channel */\r\n#define ADC_CTL1_SWRCST BIT(22)      /*!< start on regular channel */\r\n#define ADC_CTL1_TSVREN BIT(23)      /*!< channel 16 and 17 enable of ADC0 */\r\n\r\n/* ADC_SAMPTx x=0..1 */\r\n#define ADC_SAMPTX_SPTN BITS(0, 2) /*!< channel n sample time selection */\r\n\r\n/* ADC_IOFFx x=0..3 */\r\n#define ADC_IOFFX_IOFF BITS(0, 11) /*!< data offset for inserted channel x */\r\n\r\n/* ADC_WDHT */\r\n#define ADC_WDHT_WDHT BITS(0, 11) /*!< analog watchdog high threshold */\r\n\r\n/* ADC_WDLT */\r\n#define ADC_WDLT_WDLT BITS(0, 11) /*!< analog watchdog low threshold */\r\n\r\n/* ADC_RSQx x=0..2 */\r\n#define ADC_RSQX_RSQN BITS(0, 4)   /*!< nth conversion in regular sequence */\r\n#define ADC_RSQ0_RL   BITS(20, 23) /*!< regular channel sequence length */\r\n\r\n/* ADC_ISQ */\r\n#define ADC_ISQ_ISQN BITS(0, 4)   /*!< nth conversion in inserted sequence */\r\n#define ADC_ISQ_IL   BITS(20, 21) /*!< inserted sequence length */\r\n\r\n/* ADC_IDATAx x=0..3*/\r\n#define ADC_IDATAX_IDATAN BITS(0, 15) /*!< inserted data n */\r\n\r\n/* ADC_RDATA */\r\n#define ADC_RDATA_RDATA    BITS(0, 15)  /*!< regular data */\r\n#define ADC_RDATA_ADC1RDTR BITS(16, 31) /*!< ADC1 regular channel data */\r\n\r\n/* ADC_OVSCR */\r\n#define ADC_OVSCR_OVSEN BIT(0)       /*!< oversampling enable */\r\n#define ADC_OVSCR_OVSR  BITS(2, 4)   /*!< oversampling ratio */\r\n#define ADC_OVSCR_OVSS  BITS(5, 8)   /*!< oversampling shift */\r\n#define ADC_OVSCR_TOVS  BIT(9)       /*!< triggered oversampling */\r\n#define ADC_OVSCR_DRES  BITS(12, 13) /*!< ADC data resolution */\r\n\r\n/* constants definitions */\r\n/* adc_stat register value */\r\n#define ADC_FLAG_WDE  ADC_STAT_WDE  /*!< analog watchdog event flag */\r\n#define ADC_FLAG_EOC  ADC_STAT_EOC  /*!< end of conversion */\r\n#define ADC_FLAG_EOIC ADC_STAT_EOIC /*!< inserted channel end of conversion */\r\n#define ADC_FLAG_STIC ADC_STAT_STIC /*!< inserted channel start flag */\r\n#define ADC_FLAG_STRC ADC_STAT_STRC /*!< regular channel start flag */\r\n\r\n/* adc_ctl0 register value */\r\n#define CTL0_DISNUM(regval) (BITS(13, 15) & ((uint32_t)(regval) << 13)) /*!< write value to ADC_CTL0_DISNUM bit field */\r\n\r\n/* scan mode */\r\n#define ADC_SCAN_MODE ADC_CTL0_SM /*!< scan mode */\r\n\r\n/* inserted channel group convert automatically */\r\n#define ADC_INSERTED_CHANNEL_AUTO ADC_CTL0_ICA /*!< inserted channel group convert automatically */\r\n\r\n/* ADC sync mode */\r\n#define CTL0_SYNCM(regval)                               (BITS(16, 19) & ((uint32_t)(regval) << 16)) /*!< write value to ADC_CTL0_SYNCM bit field */\r\n#define ADC_MODE_FREE                                    CTL0_SYNCM(0)                               /*!< all the ADCs work independently */\r\n#define ADC_DAUL_REGULAL_PARALLEL_INSERTED_PARALLEL      CTL0_SYNCM(1)                               /*!< ADC0 and ADC1 work in combined regular parallel + inserted parallel mode */\r\n#define ADC_DAUL_REGULAL_PARALLEL_INSERTED_ROTATION      CTL0_SYNCM(2)                               /*!< ADC0 and ADC1 work in combined regular parallel + trigger rotation mode */\r\n#define ADC_DAUL_INSERTED_PARALLEL_REGULAL_FOLLOWUP_FAST CTL0_SYNCM(3)                               /*!< ADC0 and ADC1 work in combined inserted parallel + follow-up fast mode */\r\n#define ADC_DAUL_INSERTED_PARALLEL_REGULAL_FOLLOWUP_SLOW CTL0_SYNCM(4)                               /*!< ADC0 and ADC1 work in combined inserted parallel + follow-up slow mode */\r\n#define ADC_DAUL_INSERTED_PARALLEL                       CTL0_SYNCM(5)                               /*!< ADC0 and ADC1 work in inserted parallel mode only */\r\n#define ADC_DAUL_REGULAL_PARALLEL                        CTL0_SYNCM(6)                               /*!< ADC0 and ADC1 work in regular parallel mode only */\r\n#define ADC_DAUL_REGULAL_FOLLOWUP_FAST                   CTL0_SYNCM(7)                               /*!< ADC0 and ADC1 work in follow-up fast mode only */\r\n#define ADC_DAUL_REGULAL_FOLLOWUP_SLOW                   CTL0_SYNCM(8)                               /*!< ADC0 and ADC1 work in follow-up slow mode only */\r\n#define ADC_DAUL_INSERTED_TRIGGER_ROTATION               CTL0_SYNCM(9)                               /*!< ADC0 and ADC1 work in trigger rotation mode only */\r\n\r\n/* adc_ctl1 register value */\r\n#define ADC_DATAALIGN_RIGHT ((uint32_t)0x00000000U) /*!< LSB alignment */\r\n#define ADC_DATAALIGN_LEFT  ADC_CTL1_DAL            /*!< MSB alignment */\r\n\r\n/* continuous mode */\r\n#define ADC_CONTINUOUS_MODE ADC_CTL1_CTN /*!< continuous mode */\r\n\r\n/* external trigger select for regular channel */\r\n#define CTL1_ETSRC(regval) (BITS(17, 19) & ((uint32_t)(regval) << 17)) /*!< write value to ADC_CTL1_ETSRC bit field */\r\n/* for ADC0 and ADC1 regular channel */\r\n#define ADC0_1_EXTTRIG_REGULAR_T0_CH0  CTL1_ETSRC(0) /*!< TIMER0 CH0 event select */\r\n#define ADC0_1_EXTTRIG_REGULAR_T0_CH1  CTL1_ETSRC(1) /*!< TIMER0 CH1 event select */\r\n#define ADC0_1_EXTTRIG_REGULAR_T0_CH2  CTL1_ETSRC(2) /*!< TIMER0 CH2 event select */\r\n#define ADC0_1_EXTTRIG_REGULAR_T1_CH1  CTL1_ETSRC(3) /*!< TIMER1 CH1 event select */\r\n#define ADC0_1_EXTTRIG_REGULAR_T2_TRGO CTL1_ETSRC(4) /*!< TIMER2 TRGO event select */\r\n#define ADC0_1_EXTTRIG_REGULAR_T3_CH3  CTL1_ETSRC(5) /*!< TIMER3 CH3 event select */\r\n#define ADC0_1_EXTTRIG_REGULAR_EXTI_11 CTL1_ETSRC(6) /*!< external interrupt line 11 */\r\n#define ADC0_1_EXTTRIG_REGULAR_NONE    CTL1_ETSRC(7) /*!< software trigger */\r\n\r\n/* external trigger mode for inserted channel */\r\n#define CTL1_ETSIC(regval) (BITS(12, 14) & ((uint32_t)(regval) << 12)) /*!< write value to ADC_CTL1_ETSIC bit field */\r\n/* for ADC0 and ADC1 inserted channel */\r\n#define ADC0_1_EXTTRIG_INSERTED_T0_TRGO CTL1_ETSIC(0) /*!< TIMER0 TRGO event select */\r\n#define ADC0_1_EXTTRIG_INSERTED_T0_CH3  CTL1_ETSIC(1) /*!< TIMER0 CH3 event select */\r\n#define ADC0_1_EXTTRIG_INSERTED_T1_TRGO CTL1_ETSIC(2) /*!< TIMER1 TRGO event select */\r\n#define ADC0_1_EXTTRIG_INSERTED_T1_CH0  CTL1_ETSIC(3) /*!< TIMER1 CH0 event select */\r\n#define ADC0_1_EXTTRIG_INSERTED_T2_CH3  CTL1_ETSIC(4) /*!< TIMER2 CH3 event select */\r\n#define ADC0_1_EXTTRIG_INSERTED_T3_TRGO CTL1_ETSIC(5) /*!< TIMER3 TRGO event select */\r\n#define ADC0_1_EXTTRIG_INSERTED_EXTI_15 CTL1_ETSIC(6) /*!< external interrupt line 15 */\r\n#define ADC0_1_EXTTRIG_INSERTED_NONE    CTL1_ETSIC(7) /*!< software trigger */\r\n\r\n/* adc_samptx register value */\r\n#define SAMPTX_SPT(regval)       (BITS(0, 2) & ((uint32_t)(regval) << 0)) /*!< write value to ADC_SAMPTX_SPT bit field */\r\n#define ADC_SAMPLETIME_1POINT5   SAMPTX_SPT(0)                            /*!< 1.5 sampling cycles */\r\n#define ADC_SAMPLETIME_7POINT5   SAMPTX_SPT(1)                            /*!< 7.5 sampling cycles */\r\n#define ADC_SAMPLETIME_13POINT5  SAMPTX_SPT(2)                            /*!< 13.5 sampling cycles */\r\n#define ADC_SAMPLETIME_28POINT5  SAMPTX_SPT(3)                            /*!< 28.5 sampling cycles */\r\n#define ADC_SAMPLETIME_41POINT5  SAMPTX_SPT(4)                            /*!< 41.5 sampling cycles */\r\n#define ADC_SAMPLETIME_55POINT5  SAMPTX_SPT(5)                            /*!< 55.5 sampling cycles */\r\n#define ADC_SAMPLETIME_71POINT5  SAMPTX_SPT(6)                            /*!< 71.5 sampling cycles */\r\n#define ADC_SAMPLETIME_239POINT5 SAMPTX_SPT(7)                            /*!< 239.5 sampling cycles */\r\n\r\n/* adc_ioffx register value */\r\n#define IOFFX_IOFF(regval) (BITS(0, 11) & ((uint32_t)(regval) << 0)) /*!< write value to ADC_IOFFX_IOFF bit field */\r\n\r\n/* adc_wdht register value */\r\n#define WDHT_WDHT(regval) (BITS(0, 11) & ((uint32_t)(regval) << 0)) /*!< write value to ADC_WDHT_WDHT bit field */\r\n\r\n/* adc_wdlt register value */\r\n#define WDLT_WDLT(regval) (BITS(0, 11) & ((uint32_t)(regval) << 0)) /*!< write value to ADC_WDLT_WDLT bit field */\r\n\r\n/* adc_rsqx register value */\r\n#define RSQ0_RL(regval) (BITS(20, 23) & ((uint32_t)(regval) << 20)) /*!< write value to ADC_RSQ0_RL bit field */\r\n\r\n/* adc_isq register value */\r\n#define ISQ_IL(regval) (BITS(20, 21) & ((uint32_t)(regval) << 20)) /*!< write value to ADC_ISQ_IL bit field */\r\n\r\n/* ADC channel group definitions */\r\n#define ADC_REGULAR_CHANNEL          ((uint8_t)0x01U) /*!< adc regular channel group */\r\n#define ADC_INSERTED_CHANNEL         ((uint8_t)0x02U) /*!< adc inserted channel group */\r\n#define ADC_REGULAR_INSERTED_CHANNEL ((uint8_t)0x03U) /*!< both regular and inserted channel group */\r\n\r\n#define ADC_CHANNEL_DISCON_DISABLE ((uint8_t)0x04U) /*!< disable discontinuous mode of regular & inserted channel */\r\n\r\n/* ADC inserted channel definitions */\r\n#define ADC_INSERTED_CHANNEL_0 ((uint8_t)0x00U) /*!< adc inserted channel 0 */\r\n#define ADC_INSERTED_CHANNEL_1 ((uint8_t)0x01U) /*!< adc inserted channel 1 */\r\n#define ADC_INSERTED_CHANNEL_2 ((uint8_t)0x02U) /*!< adc inserted channel 2 */\r\n#define ADC_INSERTED_CHANNEL_3 ((uint8_t)0x03U) /*!< adc inserted channel 3 */\r\n\r\n/* ADC channel definitions */\r\n#define ADC_CHANNEL_0  ((uint8_t)0x00U) /*!< ADC channel 0 */\r\n#define ADC_CHANNEL_1  ((uint8_t)0x01U) /*!< ADC channel 1 */\r\n#define ADC_CHANNEL_2  ((uint8_t)0x02U) /*!< ADC channel 2 */\r\n#define ADC_CHANNEL_3  ((uint8_t)0x03U) /*!< ADC channel 3 */\r\n#define ADC_CHANNEL_4  ((uint8_t)0x04U) /*!< ADC channel 4 */\r\n#define ADC_CHANNEL_5  ((uint8_t)0x05U) /*!< ADC channel 5 */\r\n#define ADC_CHANNEL_6  ((uint8_t)0x06U) /*!< ADC channel 6 */\r\n#define ADC_CHANNEL_7  ((uint8_t)0x07U) /*!< ADC channel 7 */\r\n#define ADC_CHANNEL_8  ((uint8_t)0x08U) /*!< ADC channel 8 */\r\n#define ADC_CHANNEL_9  ((uint8_t)0x09U) /*!< ADC channel 9 */\r\n#define ADC_CHANNEL_10 ((uint8_t)0x0AU) /*!< ADC channel 10 */\r\n#define ADC_CHANNEL_11 ((uint8_t)0x0BU) /*!< ADC channel 11 */\r\n#define ADC_CHANNEL_12 ((uint8_t)0x0CU) /*!< ADC channel 12 */\r\n#define ADC_CHANNEL_13 ((uint8_t)0x0DU) /*!< ADC channel 13 */\r\n#define ADC_CHANNEL_14 ((uint8_t)0x0EU) /*!< ADC channel 14 */\r\n#define ADC_CHANNEL_15 ((uint8_t)0x0FU) /*!< ADC channel 15 */\r\n#define ADC_CHANNEL_16 ((uint8_t)0x10U) /*!< ADC channel 16 */\r\n#define ADC_CHANNEL_17 ((uint8_t)0x11U) /*!< ADC channel 17 */\r\n\r\n/* ADC interrupt */\r\n#define ADC_INT_WDE  ADC_STAT_WDE  /*!< analog watchdog event interrupt */\r\n#define ADC_INT_EOC  ADC_STAT_EOC  /*!< end of group conversion interrupt */\r\n#define ADC_INT_EOIC ADC_STAT_EOIC /*!< end of inserted group conversion interrupt */\r\n\r\n/* ADC interrupt flag */\r\n#define ADC_INT_FLAG_WDE  ADC_STAT_WDE  /*!< analog watchdog event interrupt flag */\r\n#define ADC_INT_FLAG_EOC  ADC_STAT_EOC  /*!< end of group conversion interrupt flag */\r\n#define ADC_INT_FLAG_EOIC ADC_STAT_EOIC /*!< end of inserted group conversion interrupt flag */\r\n\r\n/* ADC resolution definitions */\r\n#define OVSCR_DRES(regval) (BITS(12, 13) & ((uint32_t)(regval) << 12))\r\n#define ADC_RESOLUTION_12B OVSCR_DRES(0) /*!< 12-bit ADC resolution */\r\n#define ADC_RESOLUTION_10B OVSCR_DRES(1) /*!< 10-bit ADC resolution */\r\n#define ADC_RESOLUTION_8B  OVSCR_DRES(2) /*!< 8-bit ADC resolution */\r\n#define ADC_RESOLUTION_6B  OVSCR_DRES(3) /*!< 6-bit ADC resolution */\r\n\r\n/* ADC oversampling mode */\r\n#define ADC_OVERSAMPLING_ALL_CONVERT 0 /*!< all oversampled conversions for a channel are done consecutively after a trigger */\r\n#define ADC_OVERSAMPLING_ONE_CONVERT 1 /*!< each oversampled conversion for a channel needs a trigger */\r\n\r\n/* ADC oversampling shift */\r\n#define OVSCR_OVSS(regval)          (BITS(5, 8) & ((uint32_t)(regval) << 5))\r\n#define ADC_OVERSAMPLING_SHIFT_NONE OVSCR_OVSS(0) /*!< no oversampling shift */\r\n#define ADC_OVERSAMPLING_SHIFT_1B   OVSCR_OVSS(1) /*!< 1-bit oversampling shift */\r\n#define ADC_OVERSAMPLING_SHIFT_2B   OVSCR_OVSS(2) /*!< 2-bit oversampling shift */\r\n#define ADC_OVERSAMPLING_SHIFT_3B   OVSCR_OVSS(3) /*!< 3-bit oversampling shift */\r\n#define ADC_OVERSAMPLING_SHIFT_4B   OVSCR_OVSS(4) /*!< 4-bit oversampling shift */\r\n#define ADC_OVERSAMPLING_SHIFT_5B   OVSCR_OVSS(5) /*!< 5-bit oversampling shift */\r\n#define ADC_OVERSAMPLING_SHIFT_6B   OVSCR_OVSS(6) /*!< 6-bit oversampling shift */\r\n#define ADC_OVERSAMPLING_SHIFT_7B   OVSCR_OVSS(7) /*!< 7-bit oversampling shift */\r\n#define ADC_OVERSAMPLING_SHIFT_8B   OVSCR_OVSS(8) /*!< 8-bit oversampling shift */\r\n\r\n/* ADC oversampling ratio */\r\n#define OVSCR_OVSR(regval)            (BITS(2, 4) & ((uint32_t)(regval) << 2))\r\n#define ADC_OVERSAMPLING_RATIO_MUL2   OVSCR_OVSR(0) /*!< oversampling ratio X2 */\r\n#define ADC_OVERSAMPLING_RATIO_MUL4   OVSCR_OVSR(1) /*!< oversampling ratio X4 */\r\n#define ADC_OVERSAMPLING_RATIO_MUL8   OVSCR_OVSR(2) /*!< oversampling ratio X8 */\r\n#define ADC_OVERSAMPLING_RATIO_MUL16  OVSCR_OVSR(3) /*!< oversampling ratio X16 */\r\n#define ADC_OVERSAMPLING_RATIO_MUL32  OVSCR_OVSR(4) /*!< oversampling ratio X32 */\r\n#define ADC_OVERSAMPLING_RATIO_MUL64  OVSCR_OVSR(5) /*!< oversampling ratio X64 */\r\n#define ADC_OVERSAMPLING_RATIO_MUL128 OVSCR_OVSR(6) /*!< oversampling ratio X128 */\r\n#define ADC_OVERSAMPLING_RATIO_MUL256 OVSCR_OVSR(7) /*!< oversampling ratio X256 */\r\n\r\n/* function declarations */\r\n/* initialization config */\r\n/* reset ADC */\r\nvoid adc_deinit(uint32_t adc_periph);\r\n/* configure the ADC sync mode */\r\nvoid adc_mode_config(uint32_t mode);\r\n/* enable or disable ADC special function */\r\nvoid adc_special_function_config(uint32_t adc_periph, uint32_t function, ControlStatus newvalue);\r\n/* configure ADC data alignment */\r\nvoid adc_data_alignment_config(uint32_t adc_periph, uint32_t data_alignment);\r\n/* enable ADC interface */\r\nvoid adc_enable(uint32_t adc_periph);\r\n/* disable ADC interface */\r\nvoid adc_disable(uint32_t adc_periph);\r\n/* ADC calibration and reset calibration */\r\nvoid adc_calibration_enable(uint32_t adc_periph);\r\n/* enable the temperature sensor and Vrefint channel */\r\nvoid adc_tempsensor_vrefint_enable(void);\r\n/* disable the temperature sensor and Vrefint channel */\r\nvoid adc_tempsensor_vrefint_disable(void);\r\n\r\n/* DMA config */\r\n/* enable DMA request */\r\nvoid adc_dma_mode_enable(uint32_t adc_periph);\r\n/* disable DMA request */\r\nvoid adc_dma_mode_disable(uint32_t adc_periph);\r\n\r\n/* regular group and inserted group config */\r\n/* configure ADC discontinuous mode */\r\nvoid adc_discontinuous_mode_config(uint32_t adc_periph, uint8_t adc_channel_group, uint8_t length);\r\n\r\n/* configure the length of regular channel group or inserted channel group */\r\nvoid adc_channel_length_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t length);\r\n/* configure ADC regular channel */\r\nvoid adc_regular_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t adc_channel, uint32_t sample_time);\r\n/* configure ADC inserted channel */\r\nvoid adc_inserted_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t adc_channel, uint32_t sample_time);\r\n/* configure ADC inserted channel offset */\r\nvoid adc_inserted_channel_offset_config(uint32_t adc_periph, uint8_t inserted_channel, uint16_t offset);\r\n\r\n/* configure ADC external trigger source */\r\nvoid adc_external_trigger_source_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t external_trigger_source);\r\n/* configure ADC external trigger */\r\nvoid adc_external_trigger_config(uint32_t adc_periph, uint8_t adc_channel_group, ControlStatus newvalue);\r\n/* enable ADC software trigger */\r\nvoid adc_software_trigger_enable(uint32_t adc_periph, uint8_t adc_channel_group);\r\n\r\n/* get channel data */\r\n/* read ADC regular group data register */\r\nuint16_t adc_regular_data_read(uint32_t adc_periph);\r\n/* read ADC inserted group data register */\r\nuint16_t adc_inserted_data_read(uint32_t adc_periph, uint8_t inserted_channel);\r\n/* read the last ADC0 and ADC1 conversion result data in sync mode */\r\nuint32_t adc_sync_mode_convert_value_read(void);\r\n\r\n/* watchdog config */\r\n/* configure ADC analog watchdog single channel */\r\nvoid adc_watchdog_single_channel_enable(uint32_t adc_periph, uint8_t adc_channel);\r\n/* configure ADC analog watchdog group channel */\r\nvoid adc_watchdog_group_channel_enable(uint32_t adc_periph, uint8_t adc_channel_group);\r\n/* disable ADC analog watchdog */\r\nvoid adc_watchdog_disable(uint32_t adc_periph);\r\n/* configure ADC analog watchdog threshold */\r\nvoid adc_watchdog_threshold_config(uint32_t adc_periph, uint16_t low_threshold, uint16_t high_threshold);\r\n\r\n/* interrupt & flag functions */\r\n/* get the ADC flag bits */\r\nFlagStatus adc_flag_get(uint32_t adc_periph, uint32_t adc_flag);\r\n/* clear the ADC flag bits */\r\nvoid adc_flag_clear(uint32_t adc_periph, uint32_t adc_flag);\r\n/* get the bit state of ADCx software start conversion */\r\nFlagStatus adc_regular_software_startconv_flag_get(uint32_t adc_periph);\r\n/* get the bit state of ADCx software inserted channel start conversion */\r\nFlagStatus adc_inserted_software_startconv_flag_get(uint32_t adc_periph);\r\n/* get the ADC interrupt bits */\r\nFlagStatus adc_interrupt_flag_get(uint32_t adc_periph, uint32_t adc_interrupt);\r\n/* clear the ADC flag */\r\nvoid adc_interrupt_flag_clear(uint32_t adc_periph, uint32_t adc_interrupt);\r\n/* enable ADC interrupt */\r\nvoid adc_interrupt_enable(uint32_t adc_periph, uint32_t adc_interrupt);\r\n/* disable ADC interrupt */\r\nvoid adc_interrupt_disable(uint32_t adc_periph, uint32_t adc_interrupt);\r\n\r\n/* ADC resolution & oversample */\r\n/* ADC resolution config */\r\nvoid adc_resolution_config(uint32_t adc_periph, uint32_t resolution);\r\n/* ADC oversample mode config */\r\nvoid adc_oversample_mode_config(uint32_t adc_periph, uint8_t mode, uint16_t shift, uint8_t ratio);\r\n/* enable ADC oversample mode */\r\nvoid adc_oversample_mode_enable(uint32_t adc_periph);\r\n/* disable ADC oversample mode */\r\nvoid adc_oversample_mode_disable(uint32_t adc_periph);\r\n\r\n#endif /* GD32VF103_ADC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_bkp.h",
    "content": "/*!\r\n    \\file    gd32vf103_bkp.h\r\n    \\brief   definitions for the BKP\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_BKP_H\r\n#define GD32VF103_BKP_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* BKP definitions */\r\n#define BKP BKP_BASE /*!< BKP base address */\r\n\r\n/* registers definitions */\r\n#define BKP_DATA0  REG16((BKP) + 0x04U) /*!< BKP data register 0 */\r\n#define BKP_DATA1  REG16((BKP) + 0x08U) /*!< BKP data register 1 */\r\n#define BKP_DATA2  REG16((BKP) + 0x0CU) /*!< BKP data register 2 */\r\n#define BKP_DATA3  REG16((BKP) + 0x10U) /*!< BKP data register 3 */\r\n#define BKP_DATA4  REG16((BKP) + 0x14U) /*!< BKP data register 4 */\r\n#define BKP_DATA5  REG16((BKP) + 0x18U) /*!< BKP data register 5 */\r\n#define BKP_DATA6  REG16((BKP) + 0x1CU) /*!< BKP data register 6 */\r\n#define BKP_DATA7  REG16((BKP) + 0x20U) /*!< BKP data register 7 */\r\n#define BKP_DATA8  REG16((BKP) + 0x24U) /*!< BKP data register 8 */\r\n#define BKP_DATA9  REG16((BKP) + 0x28U) /*!< BKP data register 9 */\r\n#define BKP_DATA10 REG16((BKP) + 0x40U) /*!< BKP data register 10 */\r\n#define BKP_DATA11 REG16((BKP) + 0x44U) /*!< BKP data register 11 */\r\n#define BKP_DATA12 REG16((BKP) + 0x48U) /*!< BKP data register 12 */\r\n#define BKP_DATA13 REG16((BKP) + 0x4CU) /*!< BKP data register 13 */\r\n#define BKP_DATA14 REG16((BKP) + 0x50U) /*!< BKP data register 14 */\r\n#define BKP_DATA15 REG16((BKP) + 0x54U) /*!< BKP data register 15 */\r\n#define BKP_DATA16 REG16((BKP) + 0x58U) /*!< BKP data register 16 */\r\n#define BKP_DATA17 REG16((BKP) + 0x5CU) /*!< BKP data register 17 */\r\n#define BKP_DATA18 REG16((BKP) + 0x60U) /*!< BKP data register 18 */\r\n#define BKP_DATA19 REG16((BKP) + 0x64U) /*!< BKP data register 19 */\r\n#define BKP_DATA20 REG16((BKP) + 0x68U) /*!< BKP data register 20 */\r\n#define BKP_DATA21 REG16((BKP) + 0x6CU) /*!< BKP data register 21 */\r\n#define BKP_DATA22 REG16((BKP) + 0x70U) /*!< BKP data register 22 */\r\n#define BKP_DATA23 REG16((BKP) + 0x74U) /*!< BKP data register 23 */\r\n#define BKP_DATA24 REG16((BKP) + 0x78U) /*!< BKP data register 24 */\r\n#define BKP_DATA25 REG16((BKP) + 0x7CU) /*!< BKP data register 25 */\r\n#define BKP_DATA26 REG16((BKP) + 0x80U) /*!< BKP data register 26 */\r\n#define BKP_DATA27 REG16((BKP) + 0x84U) /*!< BKP data register 27 */\r\n#define BKP_DATA28 REG16((BKP) + 0x88U) /*!< BKP data register 28 */\r\n#define BKP_DATA29 REG16((BKP) + 0x8CU) /*!< BKP data register 29 */\r\n#define BKP_DATA30 REG16((BKP) + 0x90U) /*!< BKP data register 30 */\r\n#define BKP_DATA31 REG16((BKP) + 0x94U) /*!< BKP data register 31 */\r\n#define BKP_DATA32 REG16((BKP) + 0x98U) /*!< BKP data register 32 */\r\n#define BKP_DATA33 REG16((BKP) + 0x9CU) /*!< BKP data register 33 */\r\n#define BKP_DATA34 REG16((BKP) + 0xA0U) /*!< BKP data register 34 */\r\n#define BKP_DATA35 REG16((BKP) + 0xA4U) /*!< BKP data register 35 */\r\n#define BKP_DATA36 REG16((BKP) + 0xA8U) /*!< BKP data register 36 */\r\n#define BKP_DATA37 REG16((BKP) + 0xACU) /*!< BKP data register 37 */\r\n#define BKP_DATA38 REG16((BKP) + 0xB0U) /*!< BKP data register 38 */\r\n#define BKP_DATA39 REG16((BKP) + 0xB4U) /*!< BKP data register 39 */\r\n#define BKP_DATA40 REG16((BKP) + 0xB8U) /*!< BKP data register 40 */\r\n#define BKP_DATA41 REG16((BKP) + 0xBCU) /*!< BKP data register 41 */\r\n#define BKP_OCTL   REG16((BKP) + 0x2CU) /*!< RTC signal output control register */\r\n#define BKP_TPCTL  REG16((BKP) + 0x30U) /*!< tamper pin control register */\r\n#define BKP_TPCS   REG16((BKP) + 0x34U) /*!< tamper control and status register */\r\n\r\n/* bits definitions */\r\n/* BKP_DATA */\r\n#define BKP_DATA BITS(0, 15) /*!< backup data */\r\n\r\n/* BKP_OCTL */\r\n#define BKP_OCTL_RCCV  BITS(0, 6) /*!< RTC clock calibration value */\r\n#define BKP_OCTL_COEN  BIT(7)     /*!< RTC clock calibration output enable */\r\n#define BKP_OCTL_ASOEN BIT(8)     /*!< RTC alarm or second signal output enable */\r\n#define BKP_OCTL_ROSEL BIT(9)     /*!< RTC output selection */\r\n\r\n/* BKP_TPCTL */\r\n#define BKP_TPCTL_TPEN BIT(0) /*!< tamper detection enable */\r\n#define BKP_TPCTL_TPAL BIT(1) /*!< tamper pin active level */\r\n\r\n/* BKP_TPCS */\r\n#define BKP_TPCS_TER  BIT(0) /*!< tamper event reset */\r\n#define BKP_TPCS_TIR  BIT(1) /*!< tamper interrupt reset */\r\n#define BKP_TPCS_TPIE BIT(2) /*!< tamper interrupt enable */\r\n#define BKP_TPCS_TEF  BIT(8) /*!< tamper event flag */\r\n#define BKP_TPCS_TIF  BIT(9) /*!< tamper interrupt flag */\r\n\r\n/* constants definitions */\r\n/* BKP data register number */\r\ntypedef enum {\r\n  BKP_DATA_0 = 1, /*!< BKP data register 0 */\r\n  BKP_DATA_1,     /*!< BKP data register 1 */\r\n  BKP_DATA_2,     /*!< BKP data register 2 */\r\n  BKP_DATA_3,     /*!< BKP data register 3 */\r\n  BKP_DATA_4,     /*!< BKP data register 4 */\r\n  BKP_DATA_5,     /*!< BKP data register 5 */\r\n  BKP_DATA_6,     /*!< BKP data register 6 */\r\n  BKP_DATA_7,     /*!< BKP data register 7 */\r\n  BKP_DATA_8,     /*!< BKP data register 8 */\r\n  BKP_DATA_9,     /*!< BKP data register 9 */\r\n  BKP_DATA_10,    /*!< BKP data register 10 */\r\n  BKP_DATA_11,    /*!< BKP data register 11 */\r\n  BKP_DATA_12,    /*!< BKP data register 12 */\r\n  BKP_DATA_13,    /*!< BKP data register 13 */\r\n  BKP_DATA_14,    /*!< BKP data register 14 */\r\n  BKP_DATA_15,    /*!< BKP data register 15 */\r\n  BKP_DATA_16,    /*!< BKP data register 16 */\r\n  BKP_DATA_17,    /*!< BKP data register 17 */\r\n  BKP_DATA_18,    /*!< BKP data register 18 */\r\n  BKP_DATA_19,    /*!< BKP data register 19 */\r\n  BKP_DATA_20,    /*!< BKP data register 20 */\r\n  BKP_DATA_21,    /*!< BKP data register 21 */\r\n  BKP_DATA_22,    /*!< BKP data register 22 */\r\n  BKP_DATA_23,    /*!< BKP data register 23 */\r\n  BKP_DATA_24,    /*!< BKP data register 24 */\r\n  BKP_DATA_25,    /*!< BKP data register 25 */\r\n  BKP_DATA_26,    /*!< BKP data register 26 */\r\n  BKP_DATA_27,    /*!< BKP data register 27 */\r\n  BKP_DATA_28,    /*!< BKP data register 28 */\r\n  BKP_DATA_29,    /*!< BKP data register 29 */\r\n  BKP_DATA_30,    /*!< BKP data register 30 */\r\n  BKP_DATA_31,    /*!< BKP data register 31 */\r\n  BKP_DATA_32,    /*!< BKP data register 32 */\r\n  BKP_DATA_33,    /*!< BKP data register 33 */\r\n  BKP_DATA_34,    /*!< BKP data register 34 */\r\n  BKP_DATA_35,    /*!< BKP data register 35 */\r\n  BKP_DATA_36,    /*!< BKP data register 36 */\r\n  BKP_DATA_37,    /*!< BKP data register 37 */\r\n  BKP_DATA_38,    /*!< BKP data register 38 */\r\n  BKP_DATA_39,    /*!< BKP data register 39 */\r\n  BKP_DATA_40,    /*!< BKP data register 40 */\r\n  BKP_DATA_41,    /*!< BKP data register 41 */\r\n} bkp_data_register_enum;\r\n\r\n/* BKP register */\r\n#define BKP_DATA0_9(number)   REG16((BKP) + 0x04U + (number)*0x04U)\r\n#define BKP_DATA10_41(number) REG16((BKP) + 0x40U + ((number)-10U) * 0x04U)\r\n\r\n/* get data of BKP data register */\r\n#define BKP_DATA_GET(regval) GET_BITS((uint32_t)(regval), 0, 15)\r\n\r\n/* RTC clock calibration value */\r\n#define OCTL_RCCV(regval) (BITS(0, 6) & ((uint32_t)(regval) << 0))\r\n\r\n/* RTC output selection */\r\n#define RTC_OUTPUT_ALARM_PULSE  ((uint16_t)0x0000U) /*!< RTC alarm pulse is selected as the RTC output */\r\n#define RTC_OUTPUT_SECOND_PULSE ((uint16_t)0x0200U) /*!< RTC second pulse is selected as the RTC output */\r\n\r\n/* tamper pin active level */\r\n#define TAMPER_PIN_ACTIVE_HIGH ((uint16_t)0x0000U) /*!< the tamper pin is active high */\r\n#define TAMPER_PIN_ACTIVE_LOW  ((uint16_t)0x0002U) /*!< the tamper pin is active low */\r\n\r\n/* tamper flag */\r\n#define BKP_FLAG_TAMPER BKP_TPCS_TEF /*!< tamper event flag */\r\n\r\n/* tamper interrupt flag */\r\n#define BKP_INT_FLAG_TAMPER BKP_TPCS_TIF /*!< tamper interrupt flag */\r\n\r\n/* function declarations */\r\n/* reset BKP registers */\r\nvoid bkp_deinit(void);\r\n/* write BKP data register */\r\nvoid bkp_data_write(bkp_data_register_enum register_number, uint16_t data);\r\n/* read BKP data register */\r\nuint16_t bkp_data_read(bkp_data_register_enum register_number);\r\n\r\n/* RTC related functions */\r\n/* enable RTC clock calibration output */\r\nvoid bkp_rtc_calibration_output_enable(void);\r\n/* disable RTC clock calibration output */\r\nvoid bkp_rtc_calibration_output_disable(void);\r\n/* enable RTC alarm or second signal output */\r\nvoid bkp_rtc_signal_output_enable(void);\r\n/* disable RTC alarm or second signal output */\r\nvoid bkp_rtc_signal_output_disable(void);\r\n/* select RTC output */\r\nvoid bkp_rtc_output_select(uint16_t outputsel);\r\n/* set RTC clock calibration value */\r\nvoid bkp_rtc_calibration_value_set(uint8_t value);\r\n\r\n/* tamper pin related functions */\r\n/* enable tamper pin detection */\r\nvoid bkp_tamper_detection_enable(void);\r\n/* disable tamper pin detection */\r\nvoid bkp_tamper_detection_disable(void);\r\n/* set tamper pin active level */\r\nvoid bkp_tamper_active_level_set(uint16_t level);\r\n\r\n/* interrupt & flag functions */\r\n/* enable tamper interrupt */\r\nvoid bkp_interrupt_enable(void);\r\n/* disable tamper interrupt */\r\nvoid bkp_interrupt_disable(void);\r\n/* get tamper flag state */\r\nFlagStatus bkp_flag_get(void);\r\n/* clear tamper flag state */\r\nvoid bkp_flag_clear(void);\r\n/* get tamper interrupt flag state */\r\nFlagStatus bkp_interrupt_flag_get(void);\r\n/* clear tamper interrupt flag state */\r\nvoid bkp_interrupt_flag_clear(void);\r\n\r\n#endif /* GD32VF103_BKP_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_crc.h",
    "content": "/*!\r\n    \\file    gd32vf103_crc.h\r\n    \\brief   definitions for the CRC\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_CRC_H\r\n#define GD32VF103_CRC_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* CRC definitions */\r\n#define CRC CRC_BASE\r\n\r\n/* registers definitions */\r\n#define CRC_DATA  REG32(CRC + 0x00U) /*!< CRC data register */\r\n#define CRC_FDATA REG32(CRC + 0x04U) /*!< CRC free data register */\r\n#define CRC_CTL   REG32(CRC + 0x08U) /*!< CRC control register */\r\n\r\n/* bits definitions */\r\n/* CRC_DATA */\r\n#define CRC_DATA_DATA BITS(0, 31) /*!< CRC calculation result bits */\r\n\r\n/* CRC_FDATA */\r\n#define CRC_FDATA_FDATA BITS(0, 7) /*!< CRC free data bits */\r\n\r\n/* CRC_CTL */\r\n#define CRC_CTL_RST BIT(0) /*!< CRC reset CRC_DATA register bit */\r\n\r\n/* function declarations */\r\n/* deinit CRC calculation unit */\r\nvoid crc_deinit(void);\r\n\r\n/* reset data register(CRC_DATA) to the value of 0xFFFFFFFF */\r\nvoid crc_data_register_reset(void);\r\n/* read the value of the data register */\r\nuint32_t crc_data_register_read(void);\r\n\r\n/* read the value of the free data register */\r\nuint8_t crc_free_data_register_read(void);\r\n/* write data to the free data register */\r\nvoid crc_free_data_register_write(uint8_t free_data);\r\n\r\n/* calculate the CRC value of a 32-bit data */\r\nuint32_t crc_single_data_calculate(uint32_t sdata);\r\n/* calculate the CRC value of an array of 32-bit values */\r\nuint32_t crc_block_data_calculate(uint32_t array[], uint32_t size);\r\n\r\n#endif /* GD32VF103_CRC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_dac.h",
    "content": "/*!\r\n    \\file    gd32vf103_dac.h\r\n    \\brief   definitions for the DAC\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_DAC_H\r\n#define GD32VF103_DAC_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* DACx(x=0,1) definitions */\r\n#define DAC  DAC_BASE\r\n#define DAC0 (0U)\r\n#define DAC1 (1U)\r\n\r\n/* registers definitions */\r\n#define DAC_CTL    REG32(DAC + 0x00U) /*!< DAC control register */\r\n#define DAC_SWT    REG32(DAC + 0x04U) /*!< DAC software trigger register */\r\n#define DAC0_R12DH REG32(DAC + 0x08U) /*!< DAC0 12-bit right-aligned data holding register */\r\n#define DAC0_L12DH REG32(DAC + 0x0CU) /*!< DAC0 12-bit left-aligned data holding register */\r\n#define DAC0_R8DH  REG32(DAC + 0x10U) /*!< DAC0 8-bit right-aligned data holding register */\r\n#define DAC1_R12DH REG32(DAC + 0x14U) /*!< DAC1 12-bit right-aligned data holding register */\r\n#define DAC1_L12DH REG32(DAC + 0x18U) /*!< DAC1 12-bit left-aligned data holding register */\r\n#define DAC1_R8DH  REG32(DAC + 0x1CU) /*!< DAC1 8-bit right-aligned data holding register */\r\n#define DACC_R12DH REG32(DAC + 0x20U) /*!< DAC concurrent mode 12-bit right-aligned data holding register */\r\n#define DACC_L12DH REG32(DAC + 0x24U) /*!< DAC concurrent mode 12-bit left-aligned data holding register */\r\n#define DACC_R8DH  REG32(DAC + 0x28U) /*!< DAC concurrent mode 8-bit right-aligned data holding register */\r\n#define DAC0_DO    REG32(DAC + 0x2CU) /*!< DAC0 data output register */\r\n#define DAC1_DO    REG32(DAC + 0x30U) /*!< DAC1 data output register */\r\n\r\n/* bits definitions */\r\n/* DAC_CTL */\r\n#define DAC_CTL_DEN0    BIT(0)       /*!< DAC0 enable/disable bit */\r\n#define DAC_CTL_DBOFF0  BIT(1)       /*!< DAC0 output buffer turn on/turn off bit */\r\n#define DAC_CTL_DTEN0   BIT(2)       /*!< DAC0 trigger enable/disable bit */\r\n#define DAC_CTL_DTSEL0  BITS(3, 5)   /*!< DAC0 trigger source selection enable/disable bits */\r\n#define DAC_CTL_DWM0    BITS(6, 7)   /*!< DAC0 noise wave mode */\r\n#define DAC_CTL_DWBW0   BITS(8, 11)  /*!< DAC0 noise wave bit width */\r\n#define DAC_CTL_DDMAEN0 BIT(12)      /*!< DAC0 DMA enable/disable bit */\r\n#define DAC_CTL_DEN1    BIT(16)      /*!< DAC1 enable/disable bit */\r\n#define DAC_CTL_DBOFF1  BIT(17)      /*!< DAC1 output buffer turn on/turn off bit */\r\n#define DAC_CTL_DTEN1   BIT(18)      /*!< DAC1 trigger enable/disable bit */\r\n#define DAC_CTL_DTSEL1  BITS(19, 21) /*!< DAC1 trigger source selection enable/disable bits */\r\n#define DAC_CTL_DWM1    BITS(22, 23) /*!< DAC1 noise wave mode */\r\n#define DAC_CTL_DWBW1   BITS(24, 27) /*!< DAC1 noise wave bit width */\r\n#define DAC_CTL_DDMAEN1 BIT(28)      /*!< DAC1 DMA enable/disable bit */\r\n\r\n/* DAC_SWT */\r\n#define DAC_SWT_SWTR0 BIT(0) /*!< DAC0 software trigger bit, cleared by hardware */\r\n#define DAC_SWT_SWTR1 BIT(1) /*!< DAC1 software trigger bit, cleared by hardware */\r\n\r\n/* DAC0_R12DH */\r\n#define DAC0_R12DH_DAC0_DH BITS(0, 11) /*!< DAC0 12-bit right-aligned data bits */\r\n\r\n/* DAC0_L12DH */\r\n#define DAC0_L12DH_DAC0_DH BITS(4, 15) /*!< DAC0 12-bit left-aligned data bits */\r\n\r\n/* DAC0_R8DH */\r\n#define DAC0_R8DH_DAC0_DH BITS(0, 7) /*!< DAC0 8-bit right-aligned data bits */\r\n\r\n/* DAC1_R12DH */\r\n#define DAC1_R12DH_DAC1_DH BITS(0, 11) /*!< DAC1 12-bit right-aligned data bits */\r\n\r\n/* DAC1_L12DH */\r\n#define DAC1_L12DH_DAC1_DH BITS(4, 15) /*!< DAC1 12-bit left-aligned data bits */\r\n\r\n/* DAC1_R8DH */\r\n#define DAC1_R8DH_DAC1_DH BITS(0, 7) /*!< DAC1 8-bit right-aligned data bits */\r\n\r\n/* DACC_R12DH */\r\n#define DACC_R12DH_DAC0_DH BITS(0, 11)  /*!< DAC concurrent mode DAC0 12-bit right-aligned data bits */\r\n#define DACC_R12DH_DAC1_DH BITS(16, 27) /*!< DAC concurrent mode DAC1 12-bit right-aligned data bits */\r\n\r\n/* DACC_L12DH */\r\n#define DACC_L12DH_DAC0_DH BITS(4, 15)  /*!< DAC concurrent mode DAC0 12-bit left-aligned data bits */\r\n#define DACC_L12DH_DAC1_DH BITS(20, 31) /*!< DAC concurrent mode DAC1 12-bit left-aligned data bits */\r\n\r\n/* DACC_R8DH */\r\n#define DACC_R8DH_DAC0_DH BITS(0, 7)  /*!< DAC concurrent mode DAC0 8-bit right-aligned data bits */\r\n#define DACC_R8DH_DAC1_DH BITS(8, 15) /*!< DAC concurrent mode DAC1 8-bit right-aligned data bits */\r\n\r\n/* DAC0_DO */\r\n#define DAC0_DO_DAC0_DO BITS(0, 11) /*!< DAC0 12-bit output data bits */\r\n\r\n/* DAC1_DO */\r\n#define DAC1_DO_DAC1_DO BITS(0, 11) /*!< DAC1 12-bit output data bits */\r\n\r\n/* constants definitions */\r\n/* DAC trigger source */\r\n#define CTL_DTSEL(regval)    (BITS(3, 5) & ((uint32_t)(regval) << 3))\r\n#define DAC_TRIGGER_T5_TRGO  CTL_DTSEL(0) /*!< TIMER5 TRGO */\r\n#define DAC_TRIGGER_T2_TRGO  CTL_DTSEL(1) /*!< TIMER2 TRGO */\r\n#define DAC_TRIGGER_T6_TRGO  CTL_DTSEL(2) /*!< TIMER6 TRGO */\r\n#define DAC_TRIGGER_T4_TRGO  CTL_DTSEL(3) /*!< TIMER4 TRGO */\r\n#define DAC_TRIGGER_T1_TRGO  CTL_DTSEL(4) /*!< TIMER1 TRGO */\r\n#define DAC_TRIGGER_T3_TRGO  CTL_DTSEL(5) /*!< TIMER3 TRGO */\r\n#define DAC_TRIGGER_EXTI_9   CTL_DTSEL(6) /*!< EXTI interrupt line9 event */\r\n#define DAC_TRIGGER_SOFTWARE CTL_DTSEL(7) /*!< software trigger */\r\n\r\n/* DAC noise wave mode */\r\n#define CTL_DWM(regval)        (BITS(6, 7) & ((uint32_t)(regval) << 6))\r\n#define DAC_WAVE_DISABLE       CTL_DWM(0) /*!< wave disable */\r\n#define DAC_WAVE_MODE_LFSR     CTL_DWM(1) /*!< LFSR noise mode */\r\n#define DAC_WAVE_MODE_TRIANGLE CTL_DWM(2) /*!< triangle noise mode */\r\n\r\n/* DAC noise wave bit width */\r\n#define DWBW(regval)          (BITS(8, 11) & ((uint32_t)(regval) << 8))\r\n#define DAC_WAVE_BIT_WIDTH_1  DWBW(0)  /*!< bit width of the wave signal is 1 */\r\n#define DAC_WAVE_BIT_WIDTH_2  DWBW(1)  /*!< bit width of the wave signal is 2 */\r\n#define DAC_WAVE_BIT_WIDTH_3  DWBW(2)  /*!< bit width of the wave signal is 3 */\r\n#define DAC_WAVE_BIT_WIDTH_4  DWBW(3)  /*!< bit width of the wave signal is 4 */\r\n#define DAC_WAVE_BIT_WIDTH_5  DWBW(4)  /*!< bit width of the wave signal is 5 */\r\n#define DAC_WAVE_BIT_WIDTH_6  DWBW(5)  /*!< bit width of the wave signal is 6 */\r\n#define DAC_WAVE_BIT_WIDTH_7  DWBW(6)  /*!< bit width of the wave signal is 7 */\r\n#define DAC_WAVE_BIT_WIDTH_8  DWBW(7)  /*!< bit width of the wave signal is 8 */\r\n#define DAC_WAVE_BIT_WIDTH_9  DWBW(8)  /*!< bit width of the wave signal is 9 */\r\n#define DAC_WAVE_BIT_WIDTH_10 DWBW(9)  /*!< bit width of the wave signal is 10 */\r\n#define DAC_WAVE_BIT_WIDTH_11 DWBW(10) /*!< bit width of the wave signal is 11 */\r\n#define DAC_WAVE_BIT_WIDTH_12 DWBW(11) /*!< bit width of the wave signal is 12 */\r\n\r\n/* unmask LFSR bits in DAC LFSR noise mode */\r\n#define DAC_LFSR_BIT0     DAC_WAVE_BIT_WIDTH_1  /*!< unmask the LFSR bit0 */\r\n#define DAC_LFSR_BITS1_0  DAC_WAVE_BIT_WIDTH_2  /*!< unmask the LFSR bits[1:0] */\r\n#define DAC_LFSR_BITS2_0  DAC_WAVE_BIT_WIDTH_3  /*!< unmask the LFSR bits[2:0] */\r\n#define DAC_LFSR_BITS3_0  DAC_WAVE_BIT_WIDTH_4  /*!< unmask the LFSR bits[3:0] */\r\n#define DAC_LFSR_BITS4_0  DAC_WAVE_BIT_WIDTH_5  /*!< unmask the LFSR bits[4:0] */\r\n#define DAC_LFSR_BITS5_0  DAC_WAVE_BIT_WIDTH_6  /*!< unmask the LFSR bits[5:0] */\r\n#define DAC_LFSR_BITS6_0  DAC_WAVE_BIT_WIDTH_7  /*!< unmask the LFSR bits[6:0] */\r\n#define DAC_LFSR_BITS7_0  DAC_WAVE_BIT_WIDTH_8  /*!< unmask the LFSR bits[7:0] */\r\n#define DAC_LFSR_BITS8_0  DAC_WAVE_BIT_WIDTH_9  /*!< unmask the LFSR bits[8:0] */\r\n#define DAC_LFSR_BITS9_0  DAC_WAVE_BIT_WIDTH_10 /*!< unmask the LFSR bits[9:0] */\r\n#define DAC_LFSR_BITS10_0 DAC_WAVE_BIT_WIDTH_11 /*!< unmask the LFSR bits[10:0] */\r\n#define DAC_LFSR_BITS11_0 DAC_WAVE_BIT_WIDTH_12 /*!< unmask the LFSR bits[11:0] */\r\n\r\n/* DAC data alignment */\r\n#define DATA_ALIGN(regval) (BITS(0, 1) & ((uint32_t)(regval) << 0))\r\n#define DAC_ALIGN_12B_R    DATA_ALIGN(0) /*!< data right 12b alignment */\r\n#define DAC_ALIGN_12B_L    DATA_ALIGN(1) /*!< data left  12b alignment */\r\n#define DAC_ALIGN_8B_R     DATA_ALIGN(2) /*!< data right  8b alignment */\r\n/* triangle amplitude in DAC triangle noise mode */\r\n#define DAC_TRIANGLE_AMPLITUDE_1    DAC_WAVE_BIT_WIDTH_1  /*!< triangle amplitude is 1 */\r\n#define DAC_TRIANGLE_AMPLITUDE_3    DAC_WAVE_BIT_WIDTH_2  /*!< triangle amplitude is 3 */\r\n#define DAC_TRIANGLE_AMPLITUDE_7    DAC_WAVE_BIT_WIDTH_3  /*!< triangle amplitude is 7 */\r\n#define DAC_TRIANGLE_AMPLITUDE_15   DAC_WAVE_BIT_WIDTH_4  /*!< triangle amplitude is 15 */\r\n#define DAC_TRIANGLE_AMPLITUDE_31   DAC_WAVE_BIT_WIDTH_5  /*!< triangle amplitude is 31 */\r\n#define DAC_TRIANGLE_AMPLITUDE_63   DAC_WAVE_BIT_WIDTH_6  /*!< triangle amplitude is 63 */\r\n#define DAC_TRIANGLE_AMPLITUDE_127  DAC_WAVE_BIT_WIDTH_7  /*!< triangle amplitude is 127 */\r\n#define DAC_TRIANGLE_AMPLITUDE_255  DAC_WAVE_BIT_WIDTH_8  /*!< triangle amplitude is 255 */\r\n#define DAC_TRIANGLE_AMPLITUDE_511  DAC_WAVE_BIT_WIDTH_9  /*!< triangle amplitude is 511 */\r\n#define DAC_TRIANGLE_AMPLITUDE_1023 DAC_WAVE_BIT_WIDTH_10 /*!< triangle amplitude is 1023 */\r\n#define DAC_TRIANGLE_AMPLITUDE_2047 DAC_WAVE_BIT_WIDTH_11 /*!< triangle amplitude is 2047 */\r\n#define DAC_TRIANGLE_AMPLITUDE_4095 DAC_WAVE_BIT_WIDTH_12 /*!< triangle amplitude is 4095 */\r\n\r\n/* function declarations */\r\n/* initialization functions */\r\n/* deinitialize DAC */\r\nvoid dac_deinit(void);\r\n/* enable DAC */\r\nvoid dac_enable(uint32_t dac_periph);\r\n/* disable DAC */\r\nvoid dac_disable(uint32_t dac_periph);\r\n/* enable DAC DMA */\r\nvoid dac_dma_enable(uint32_t dac_periph);\r\n/* disable DAC DMA */\r\nvoid dac_dma_disable(uint32_t dac_periph);\r\n/* enable DAC output buffer */\r\nvoid dac_output_buffer_enable(uint32_t dac_periph);\r\n/* disable DAC output buffer */\r\nvoid dac_output_buffer_disable(uint32_t dac_periph);\r\n/* get the last data output value */\r\nuint16_t dac_output_value_get(uint32_t dac_periph);\r\n/* set DAC data holding register value */\r\nvoid dac_data_set(uint32_t dac_periph, uint32_t dac_align, uint16_t data);\r\n\r\n/* DAC trigger configuration */\r\n/* enable DAC trigger */\r\nvoid dac_trigger_enable(uint32_t dac_periph);\r\n/* disable DAC trigger */\r\nvoid dac_trigger_disable(uint32_t dac_periph);\r\n/* configure DAC trigger source */\r\nvoid dac_trigger_source_config(uint32_t dac_periph, uint32_t triggersource);\r\n/* enable DAC software trigger */\r\nvoid dac_software_trigger_enable(uint32_t dac_periph);\r\n/* disable DAC software trigger */\r\nvoid dac_software_trigger_disable(uint32_t dac_periph);\r\n\r\n/* DAC wave mode configuration */\r\n/* configure DAC wave mode */\r\nvoid dac_wave_mode_config(uint32_t dac_periph, uint32_t wave_mode);\r\n/* configure DAC wave bit width */\r\nvoid dac_wave_bit_width_config(uint32_t dac_periph, uint32_t bit_width);\r\n/* configure DAC LFSR noise mode */\r\nvoid dac_lfsr_noise_config(uint32_t dac_periph, uint32_t unmask_bits);\r\n/* configure DAC triangle noise mode */\r\nvoid dac_triangle_noise_config(uint32_t dac_periph, uint32_t amplitude);\r\n\r\n/* DAC concurrent mode configuration */\r\n/* enable DAC concurrent mode */\r\nvoid dac_concurrent_enable(void);\r\n/* disable DAC concurrent mode */\r\nvoid dac_concurrent_disable(void);\r\n/* enable DAC concurrent software trigger */\r\nvoid dac_concurrent_software_trigger_enable(void);\r\n/* disable DAC concurrent software trigger */\r\nvoid dac_concurrent_software_trigger_disable(void);\r\n/* enable DAC concurrent buffer function */\r\nvoid dac_concurrent_output_buffer_enable(void);\r\n/* disable DAC concurrent buffer function */\r\nvoid dac_concurrent_output_buffer_disable(void);\r\n/* set DAC concurrent mode data holding register value */\r\nvoid dac_concurrent_data_set(uint32_t dac_align, uint16_t data0, uint16_t data1);\r\n\r\n#endif /* GD32VF103_DAC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_dbg.h",
    "content": "/*!\r\n    \\file    gd32vf103_dbg.h\r\n    \\brief   definitions for the DBG\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_DBG_H\r\n#define GD32VF103_DBG_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* DBG definitions */\r\n#define DBG DBG_BASE\r\n\r\n/* registers definitions */\r\n#define DBG_ID  REG32(DBG + 0x00U) /*!< DBG_ID code register */\r\n#define DBG_CTL REG32(DBG + 0x04U) /*!< DBG control register */\r\n\r\n/* bits definitions */\r\n/* DBG_ID */\r\n#define DBG_ID_ID_CODE BITS(0, 31) /*!< DBG ID code values */\r\n\r\n/* DBG_CTL */\r\n#define DBG_CTL_SLP_HOLD    BIT(0)  /*!< keep debugger connection during sleep mode */\r\n#define DBG_CTL_DSLP_HOLD   BIT(1)  /*!< keep debugger connection during deepsleep mode */\r\n#define DBG_CTL_STB_HOLD    BIT(2)  /*!< keep debugger connection during standby mode */\r\n#define DBG_CTL_FWDGT_HOLD  BIT(8)  /*!< debug FWDGT kept when core is halted */\r\n#define DBG_CTL_WWDGT_HOLD  BIT(9)  /*!< debug WWDGT kept when core is halted */\r\n#define DBG_CTL_TIMER0_HOLD BIT(10) /*!< hold TIMER0 counter when core is halted */\r\n#define DBG_CTL_TIMER1_HOLD BIT(11) /*!< hold TIMER1 counter when core is halted */\r\n#define DBG_CTL_TIMER2_HOLD BIT(12) /*!< hold TIMER2 counter when core is halted */\r\n#define DBG_CTL_TIMER3_HOLD BIT(13) /*!< hold TIMER3 counter when core is halted */\r\n#define DBG_CTL_CAN0_HOLD   BIT(14) /*!< debug CAN0 kept when core is halted */\r\n#define DBG_CTL_I2C0_HOLD   BIT(15) /*!< hold I2C0 smbus when core is halted */\r\n#define DBG_CTL_I2C1_HOLD   BIT(16) /*!< hold I2C1 smbus when core is halted */\r\n#define DBG_CTL_TIMER4_HOLD BIT(18) /*!< hold TIMER4 counter when core is halted */\r\n#define DBG_CTL_TIMER5_HOLD BIT(19) /*!< hold TIMER5 counter when core is halted */\r\n#define DBG_CTL_TIMER6_HOLD BIT(20) /*!< hold TIMER6 counter when core is halted */\r\n#define DBG_CTL_CAN1_HOLD   BIT(21) /*!< debug CAN1 kept when core is halted */\r\n\r\n/* constants definitions */\r\n/* debug hold when core is halted */\r\ntypedef enum {\r\n  DBG_FWDGT_HOLD  = BIT(8),  /*!< debug FWDGT kept when core is halted */\r\n  DBG_WWDGT_HOLD  = BIT(9),  /*!< debug WWDGT kept when core is halted */\r\n  DBG_TIMER0_HOLD = BIT(10), /*!< hold TIMER0 counter when core is halted */\r\n  DBG_TIMER1_HOLD = BIT(11), /*!< hold TIMER1 counter when core is halted */\r\n  DBG_TIMER2_HOLD = BIT(12), /*!< hold TIMER2 counter when core is halted */\r\n  DBG_TIMER3_HOLD = BIT(13), /*!< hold TIMER3 counter when core is halted */\r\n  DBG_CAN0_HOLD   = BIT(14), /*!< debug CAN0 kept when core is halted */\r\n  DBG_I2C0_HOLD   = BIT(15), /*!< hold I2C0 smbus when core is halted */\r\n  DBG_I2C1_HOLD   = BIT(16), /*!< hold I2C1 smbus when core is halted */\r\n  DBG_TIMER4_HOLD = BIT(17), /*!< hold TIMER4 counter when core is halted */\r\n  DBG_TIMER5_HOLD = BIT(18), /*!< hold TIMER5 counter when core is halted */\r\n  DBG_TIMER6_HOLD = BIT(19), /*!< hold TIMER6 counter when core is halted */\r\n  DBG_CAN1_HOLD   = BIT(21), /*!< debug CAN1 kept when core is halted */\r\n} dbg_periph_enum;\r\n\r\n/* DBG low power mode configurations */\r\n#define DBG_LOW_POWER_SLEEP     DBG_CTL_SLP_HOLD  /*!< keep debugger connection during sleep mode */\r\n#define DBG_LOW_POWER_DEEPSLEEP DBG_CTL_DSLP_HOLD /*!< keep debugger connection during deepsleep mode */\r\n#define DBG_LOW_POWER_STANDBY   DBG_CTL_STB_HOLD  /*!< keep debugger connection during standby mode */\r\n\r\n/* function declarations */\r\n/* read DBG_ID code register */\r\nuint32_t dbg_id_get(void);\r\n\r\n/* low power behavior configuration */\r\n/* enable low power behavior when the MCU is in debug mode */\r\nvoid dbg_low_power_enable(uint32_t dbg_low_power);\r\n/* disable low power behavior when the MCU is in debug mode */\r\nvoid dbg_low_power_disable(uint32_t dbg_low_power);\r\n\r\n/* peripheral behavior configuration */\r\n/* enable peripheral behavior when the MCU is in debug mode */\r\nvoid dbg_periph_enable(dbg_periph_enum dbg_periph);\r\n/* disable peripheral behavior when the MCU is in debug mode */\r\nvoid dbg_periph_disable(dbg_periph_enum dbg_periph);\r\n\r\n#endif /* GD32VF103_DBG_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_dma.h",
    "content": "/*!\r\n    \\file    gd32vf103_dma.h\r\n    \\brief   definitions for the DMA\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2019-10-30, V1.0.1, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_DMA_H\r\n#define GD32VF103_DMA_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* DMA definitions */\r\n#define DMA0 (DMA_BASE)           /*!< DMA0 base address */\r\n#define DMA1 (DMA_BASE + 0x0400U) /*!< DMA1 base address */\r\n\r\n/* registers definitions */\r\n#define DMA_INTF(dmax) REG32((dmax) + 0x00U) /*!< DMA interrupt flag register */\r\n#define DMA_INTC(dmax) REG32((dmax) + 0x04U) /*!< DMA interrupt flag clear register */\r\n\r\n#define DMA_CH0CTL(dmax)   REG32((dmax) + 0x08U) /*!< DMA channel 0 control register */\r\n#define DMA_CH0CNT(dmax)   REG32((dmax) + 0x0CU) /*!< DMA channel 0 counter register */\r\n#define DMA_CH0PADDR(dmax) REG32((dmax) + 0x10U) /*!< DMA channel 0 peripheral base address register */\r\n#define DMA_CH0MADDR(dmax) REG32((dmax) + 0x14U) /*!< DMA channel 0 memory base address register */\r\n\r\n#define DMA_CH1CTL(dmax)   REG32((dmax) + 0x1CU) /*!< DMA channel 1 control register */\r\n#define DMA_CH1CNT(dmax)   REG32((dmax) + 0x20U) /*!< DMA channel 1 counter register */\r\n#define DMA_CH1PADDR(dmax) REG32((dmax) + 0x24U) /*!< DMA channel 1 peripheral base address register */\r\n#define DMA_CH1MADDR(dmax) REG32((dmax) + 0x28U) /*!< DMA channel 1 memory base address register */\r\n\r\n#define DMA_CH2CTL(dmax)   REG32((dmax) + 0x30U) /*!< DMA channel 2 control register */\r\n#define DMA_CH2CNT(dmax)   REG32((dmax) + 0x34U) /*!< DMA channel 2 counter register */\r\n#define DMA_CH2PADDR(dmax) REG32((dmax) + 0x38U) /*!< DMA channel 2 peripheral base address register */\r\n#define DMA_CH2MADDR(dmax) REG32((dmax) + 0x3CU) /*!< DMA channel 2 memory base address register */\r\n\r\n#define DMA_CH3CTL(dmax)   REG32((dmax) + 0x44U) /*!< DMA channel 3 control register */\r\n#define DMA_CH3CNT(dmax)   REG32((dmax) + 0x48U) /*!< DMA channel 3 counter register */\r\n#define DMA_CH3PADDR(dmax) REG32((dmax) + 0x4CU) /*!< DMA channel 3 peripheral base address register */\r\n#define DMA_CH3MADDR(dmax) REG32((dmax) + 0x50U) /*!< DMA channel 3 memory base address register */\r\n\r\n#define DMA_CH4CTL(dmax)   REG32((dmax) + 0x58U) /*!< DMA channel 4 control register */\r\n#define DMA_CH4CNT(dmax)   REG32((dmax) + 0x5CU) /*!< DMA channel 4 counter register */\r\n#define DMA_CH4PADDR(dmax) REG32((dmax) + 0x60U) /*!< DMA channel 4 peripheral base address register */\r\n#define DMA_CH4MADDR(dmax) REG32((dmax) + 0x64U) /*!< DMA channel 4 memory base address register */\r\n\r\n#define DMA_CH5CTL(dmax)   REG32((dmax) + 0x6CU) /*!< DMA channel 5 control register */\r\n#define DMA_CH5CNT(dmax)   REG32((dmax) + 0x70U) /*!< DMA channel 5 counter register */\r\n#define DMA_CH5PADDR(dmax) REG32((dmax) + 0x74U) /*!< DMA channel 5 peripheral base address register */\r\n#define DMA_CH5MADDR(dmax) REG32((dmax) + 0x78U) /*!< DMA channel 5 memory base address register */\r\n\r\n#define DMA_CH6CTL(dmax)   REG32((dmax) + 0x80U) /*!< DMA channel 6 control register */\r\n#define DMA_CH6CNT(dmax)   REG32((dmax) + 0x84U) /*!< DMA channel 6 counter register */\r\n#define DMA_CH6PADDR(dmax) REG32((dmax) + 0x88U) /*!< DMA channel 6 peripheral base address register */\r\n#define DMA_CH6MADDR(dmax) REG32((dmax) + 0x8CU) /*!< DMA channel 6 memory base address register */\r\n\r\n/* bits definitions */\r\n/* DMA_INTF */\r\n#define DMA_INTF_GIF   BIT(0) /*!< global interrupt flag of channel */\r\n#define DMA_INTF_FTFIF BIT(1) /*!< full transfer finish flag of channel */\r\n#define DMA_INTF_HTFIF BIT(2) /*!< half transfer finish flag of channel */\r\n#define DMA_INTF_ERRIF BIT(3) /*!< error flag of channel */\r\n\r\n/* DMA_INTC */\r\n#define DMA_INTC_GIFC   BIT(0) /*!< clear global interrupt flag of channel */\r\n#define DMA_INTC_FTFIFC BIT(1) /*!< clear transfer finish flag of channel */\r\n#define DMA_INTC_HTFIFC BIT(2) /*!< clear half transfer finish flag of channel */\r\n#define DMA_INTC_ERRIFC BIT(3) /*!< clear error flag of channel */\r\n\r\n/* DMA_CHxCTL, x=0..6 */\r\n#define DMA_CHXCTL_CHEN   BIT(0)       /*!< channel enable */\r\n#define DMA_CHXCTL_FTFIE  BIT(1)       /*!< enable bit for channel full transfer finish interrupt */\r\n#define DMA_CHXCTL_HTFIE  BIT(2)       /*!< enable bit for channel half transfer finish interrupt */\r\n#define DMA_CHXCTL_ERRIE  BIT(3)       /*!< enable bit for channel error interrupt */\r\n#define DMA_CHXCTL_DIR    BIT(4)       /*!< transfer direction */\r\n#define DMA_CHXCTL_CMEN   BIT(5)       /*!< circular mode enable */\r\n#define DMA_CHXCTL_PNAGA  BIT(6)       /*!< next address generation algorithm of peripheral */\r\n#define DMA_CHXCTL_MNAGA  BIT(7)       /*!< next address generation algorithm of memory */\r\n#define DMA_CHXCTL_PWIDTH BITS(8, 9)   /*!< transfer data width of peripheral */\r\n#define DMA_CHXCTL_MWIDTH BITS(10, 11) /*!< transfer data width of memory */\r\n#define DMA_CHXCTL_PRIO   BITS(12, 13) /*!< priority level */\r\n#define DMA_CHXCTL_M2M    BIT(14)      /*!< memory to memory mode */\r\n\r\n/* DMA_CHxCNT, x=0..6 */\r\n#define DMA_CHXCNT_CNT BITS(0, 15) /*!< transfer counter */\r\n\r\n/* DMA_CHxPADDR, x=0..6 */\r\n#define DMA_CHXPADDR_PADDR BITS(0, 31) /*!< peripheral base address */\r\n\r\n/* DMA_CHxMADDR, x=0..6 */\r\n#define DMA_CHXMADDR_MADDR BITS(0, 31) /*!< memory base address */\r\n\r\n/* constants definitions */\r\n/* DMA channel select */\r\ntypedef enum {\r\n  DMA_CH0 = 0, /*!< DMA Channel0 */\r\n  DMA_CH1,     /*!< DMA Channel1 */\r\n  DMA_CH2,     /*!< DMA Channel2 */\r\n  DMA_CH3,     /*!< DMA Channel3 */\r\n  DMA_CH4,     /*!< DMA Channel4 */\r\n  DMA_CH5,     /*!< DMA Channel5 */\r\n  DMA_CH6      /*!< DMA Channel6 */\r\n} dma_channel_enum;\r\n\r\n/* DMA initialize struct */\r\ntypedef struct {\r\n  uint32_t periph_addr;  /*!< peripheral base address */\r\n  uint32_t periph_width; /*!< transfer data size of peripheral */\r\n  uint32_t memory_addr;  /*!< memory base address */\r\n  uint32_t memory_width; /*!< transfer data size of memory */\r\n  uint32_t number;       /*!< channel transfer number */\r\n  uint32_t priority;     /*!< channel priority level */\r\n  uint8_t  periph_inc;   /*!< peripheral increasing mode */\r\n  uint8_t  memory_inc;   /*!< memory increasing mode */\r\n  uint8_t  direction;    /*!< channel data transfer direction */\r\n\r\n} dma_parameter_struct;\r\n\r\n#define DMA_FLAG_ADD(flag, shift) ((flag) << ((shift)*4U)) /*!< DMA channel flag shift */\r\n\r\n/* DMA_register address */\r\n#define DMA_CHCTL(dma, channel)   REG32(((dma) + 0x08U) + 0x14U * (uint32_t)(channel)) /*!< the address of DMA channel CHXCTL register */\r\n#define DMA_CHCNT(dma, channel)   REG32(((dma) + 0x0CU) + 0x14U * (uint32_t)(channel)) /*!< the address of DMA channel CHXCNT register */\r\n#define DMA_CHPADDR(dma, channel) REG32(((dma) + 0x10U) + 0x14U * (uint32_t)(channel)) /*!< the address of DMA channel CHXPADDR register */\r\n#define DMA_CHMADDR(dma, channel) REG32(((dma) + 0x14U) + 0x14U * (uint32_t)(channel)) /*!< the address of DMA channel CHXMADDR register */\r\n\r\n/* DMA reset value */\r\n#define DMA_CHCTL_RESET_VALUE   ((uint32_t)0x00000000U)                                           /*!< the reset value of DMA channel CHXCTL register */\r\n#define DMA_CHCNT_RESET_VALUE   ((uint32_t)0x00000000U)                                           /*!< the reset value of DMA channel CHXCNT register */\r\n#define DMA_CHPADDR_RESET_VALUE ((uint32_t)0x00000000U)                                           /*!< the reset value of DMA channel CHXPADDR register */\r\n#define DMA_CHMADDR_RESET_VALUE ((uint32_t)0x00000000U)                                           /*!< the reset value of DMA channel CHXMADDR register */\r\n#define DMA_CHINTF_RESET_VALUE  (DMA_INTF_GIF | DMA_INTF_FTFIF | DMA_INTF_HTFIF | DMA_INTF_ERRIF) /*!< clear DMA channel DMA_INTF register */\r\n\r\n/* DMA_INTF register */\r\n/* interrupt flag bits */\r\n#define DMA_INT_FLAG_G   DMA_INTF_GIF   /*!< global interrupt flag of channel */\r\n#define DMA_INT_FLAG_FTF DMA_INTF_FTFIF /*!< full transfer finish interrupt flag of channel */\r\n#define DMA_INT_FLAG_HTF DMA_INTF_HTFIF /*!< half transfer finish interrupt flag of channel */\r\n#define DMA_INT_FLAG_ERR DMA_INTF_ERRIF /*!< error interrupt flag of channel */\r\n\r\n/* flag bits */\r\n#define DMA_FLAG_G   DMA_INTF_GIF   /*!< global interrupt flag of channel */\r\n#define DMA_FLAG_FTF DMA_INTF_FTFIF /*!< full transfer finish flag of channel */\r\n#define DMA_FLAG_HTF DMA_INTF_HTFIF /*!< half transfer finish flag of channel */\r\n#define DMA_FLAG_ERR DMA_INTF_ERRIF /*!< error flag of channel */\r\n\r\n/* DMA_CHxCTL register */\r\n/* interrupt enable bits */\r\n#define DMA_INT_FTF DMA_CHXCTL_FTFIE /*!< enable bit for channel full transfer finish interrupt */\r\n#define DMA_INT_HTF DMA_CHXCTL_HTFIE /*!< enable bit for channel half transfer finish interrupt */\r\n#define DMA_INT_ERR DMA_CHXCTL_ERRIE /*!< enable bit for channel error interrupt */\r\n\r\n/* transfer direction */\r\n#define DMA_PERIPHERAL_TO_MEMORY ((uint8_t)0x00U) /*!< read from peripheral and write to memory */\r\n#define DMA_MEMORY_TO_PERIPHERAL ((uint8_t)0x01U) /*!< read from memory and write to peripheral */\r\n\r\n/* peripheral increasing mode */\r\n#define DMA_PERIPH_INCREASE_DISABLE ((uint8_t)0x00U) /*!< next address of peripheral is fixed address mode */\r\n#define DMA_PERIPH_INCREASE_ENABLE  ((uint8_t)0x01U) /*!< next address of peripheral is increasing address mode */\r\n\r\n/* memory increasing mode */\r\n#define DMA_MEMORY_INCREASE_DISABLE ((uint8_t)0x00U) /*!< next address of memory is fixed address mode */\r\n#define DMA_MEMORY_INCREASE_ENABLE  ((uint8_t)0x01U) /*!< next address of memory is increasing address mode */\r\n\r\n/* transfer data size of peripheral */\r\n#define CHCTL_PWIDTH(regval)       (BITS(8, 9) & ((uint32_t)(regval) << 8)) /*!< transfer data size of peripheral */\r\n#define DMA_PERIPHERAL_WIDTH_8BIT  CHCTL_PWIDTH(0U)                         /*!< transfer data size of peripheral is 8-bit */\r\n#define DMA_PERIPHERAL_WIDTH_16BIT CHCTL_PWIDTH(1U)                         /*!< transfer data size of peripheral is 16-bit */\r\n#define DMA_PERIPHERAL_WIDTH_32BIT CHCTL_PWIDTH(2U)                         /*!< transfer data size of peripheral is 32-bit */\r\n\r\n/* transfer data size of memory */\r\n#define CHCTL_MWIDTH(regval)   (BITS(10, 11) & ((uint32_t)(regval) << 10)) /*!< transfer data size of memory */\r\n#define DMA_MEMORY_WIDTH_8BIT  CHCTL_MWIDTH(0U)                            /*!< transfer data size of memory is 8-bit */\r\n#define DMA_MEMORY_WIDTH_16BIT CHCTL_MWIDTH(1U)                            /*!< transfer data size of memory is 16-bit */\r\n#define DMA_MEMORY_WIDTH_32BIT CHCTL_MWIDTH(2U)                            /*!< transfer data size of memory is 32-bit */\r\n\r\n/* channel priority level */\r\n#define CHCTL_PRIO(regval)      (BITS(12, 13) & ((uint32_t)(regval) << 12)) /*!< DMA channel priority level */\r\n#define DMA_PRIORITY_LOW        CHCTL_PRIO(0U)                              /*!< low priority */\r\n#define DMA_PRIORITY_MEDIUM     CHCTL_PRIO(1U)                              /*!< medium priority */\r\n#define DMA_PRIORITY_HIGH       CHCTL_PRIO(2U)                              /*!< high priority */\r\n#define DMA_PRIORITY_ULTRA_HIGH CHCTL_PRIO(3U)                              /*!< ultra high priority */\r\n\r\n/* memory to memory mode */\r\n#define DMA_MEMORY_TO_MEMORY_DISABLE ((uint32_t)0x00000000U) /*!< disable memory to memory mode */\r\n#define DMA_MEMORY_TO_MEMORY_ENABLE  ((uint32_t)0x00000001U) /*!< enable memory to memory mode */\r\n\r\n/* DMA_CHxCNT register */\r\n/* transfer counter */\r\n#define DMA_CHANNEL_CNT_MASK DMA_CHXCNT_CNT /*!< transfer counter mask */\r\n\r\n/* function declarations */\r\n/* DMA deinitialization and initialization functions */\r\n/* deinitialize DMA a channel registers */\r\nvoid dma_deinit(uint32_t dma_periph, dma_channel_enum channelx);\r\n/* initialize the parameters of DMA struct with the default values */\r\nvoid dma_struct_para_init(dma_parameter_struct *init_struct);\r\n/* initialize DMA channel */\r\nvoid dma_init(uint32_t dma_periph, dma_channel_enum channelx, dma_parameter_struct *init_struct);\r\n/* enable DMA circulation mode */\r\nvoid dma_circulation_enable(uint32_t dma_periph, dma_channel_enum channelx);\r\n/* disable DMA circulation mode */\r\nvoid dma_circulation_disable(uint32_t dma_periph, dma_channel_enum channelx);\r\n/* enable memory to memory mode */\r\nvoid dma_memory_to_memory_enable(uint32_t dma_periph, dma_channel_enum channelx);\r\n/* disable memory to memory mode */\r\nvoid dma_memory_to_memory_disable(uint32_t dma_periph, dma_channel_enum channelx);\r\n/* enable DMA channel */\r\nvoid dma_channel_enable(uint32_t dma_periph, dma_channel_enum channelx);\r\n/* disable DMA channel */\r\nvoid dma_channel_disable(uint32_t dma_periph, dma_channel_enum channelx);\r\n\r\n/* DMA configuration functions */\r\n/* set DMA peripheral base address */\r\nvoid dma_periph_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address);\r\n/* set DMA memory base address */\r\nvoid dma_memory_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address);\r\n/* set the number of remaining data to be transferred by the DMA */\r\nvoid dma_transfer_number_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t number);\r\n/* get the number of remaining data to be transferred by the DMA */\r\nuint32_t dma_transfer_number_get(uint32_t dma_periph, dma_channel_enum channelx);\r\n/* configure priority level of DMA channel */\r\nvoid dma_priority_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t priority);\r\n/* configure transfer data size of memory */\r\nvoid dma_memory_width_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t mwidth);\r\n/* configure transfer data size of peripheral */\r\nvoid dma_periph_width_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t pwidth);\r\n/* enable next address increasement algorithm of memory */\r\nvoid dma_memory_increase_enable(uint32_t dma_periph, dma_channel_enum channelx);\r\n/* disable next address increasement algorithm of memory */\r\nvoid dma_memory_increase_disable(uint32_t dma_periph, dma_channel_enum channelx);\r\n/* enable next address increasement algorithm of peripheral */\r\nvoid dma_periph_increase_enable(uint32_t dma_periph, dma_channel_enum channelx);\r\n/* disable next address increasement algorithm of peripheral */\r\nvoid dma_periph_increase_disable(uint32_t dma_periph, dma_channel_enum channelx);\r\n/* configure the direction of data transfer on the channel */\r\nvoid dma_transfer_direction_config(uint32_t dma_periph, dma_channel_enum channelx, uint8_t direction);\r\n\r\n/* flag and interrupt functions */\r\n/* check DMA flag is set or not */\r\nFlagStatus dma_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag);\r\n/* clear the flag of a DMA channel */\r\nvoid dma_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag);\r\n/* check DMA flag and interrupt enable bit is set or not */\r\nFlagStatus dma_interrupt_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag);\r\n/* clear the interrupt flag of a DMA channel */\r\nvoid dma_interrupt_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag);\r\n/* enable DMA interrupt */\r\nvoid dma_interrupt_enable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source);\r\n/* disable DMA interrupt */\r\nvoid dma_interrupt_disable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source);\r\n\r\n#endif /* GD32VF103_DMA_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_eclic.h",
    "content": "/*!\r\n    \\file    gd32vf103_eclic.h\r\n    \\brief   definitions for the ECLIC(Enhancement Core-Local Interrupt Controller)\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_ECLIC_H\r\n#define GD32VF103_ECLIC_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* constants definitions */\r\n#define ECLIC_PRIGROUP_LEVEL0_PRIO4 0 /*!< 0 bits for level 4 bits for priority */\r\n#define ECLIC_PRIGROUP_LEVEL1_PRIO3 1 /*!< 1 bits for level 3 bits for priority */\r\n#define ECLIC_PRIGROUP_LEVEL2_PRIO2 2 /*!< 2 bits for level 2 bits for priority */\r\n#define ECLIC_PRIGROUP_LEVEL3_PRIO1 3 /*!< 3 bits for level 1 bits for priority */\r\n#define ECLIC_PRIGROUP_LEVEL4_PRIO0 4 /*!< 4 bits for level 0 bits for priority */\r\n\r\n#define __SEV eclic_send_event\r\n\r\n/* function declarations */\r\n/* enable the global interrupt */\r\nvoid eclic_global_interrupt_enable(void);\r\n/* disable the global interrupt */\r\nvoid eclic_global_interrupt_disable(void);\r\n/* set the priority group */\r\nvoid eclic_priority_group_set(uint8_t prigroup);\r\n/* enable the interrupt request */\r\nvoid eclic_irq_enable(uint32_t source, uint8_t level, uint8_t priority);\r\n/* disable the interrupt request */\r\nvoid eclic_irq_disable(uint32_t source);\r\n\r\n/* reset system */\r\nvoid eclic_system_reset(void);\r\n/* send event(SEV) */\r\nvoid eclic_send_event(void);\r\n\r\n#endif /* GD32VF103_ECLIC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_exmc.h",
    "content": "/*!\r\n    \\file    gd32vf103_exmc.h\r\n    \\brief   definitions for the EXMC\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_EXMC_H\r\n#define GD32VF103_EXMC_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* EXMC definitions */\r\n#define EXMC (EXMC_BASE) /*!< EXMC register base address */\r\n\r\n/* registers definitions */\r\n/* NOR/PSRAM */\r\n#define EXMC_SNCTL0   REG32(EXMC + 0x00U)  /*!< EXMC SRAM/NOR flash control register 0 */\r\n#define EXMC_SNTCFG0  REG32(EXMC + 0x04U)  /*!< EXMC SRAM/NOR flash timing configuration register 0 */\r\n#define EXMC_SNWTCFG0 REG32(EXMC + 0x104U) /*!< EXMC SRAM/NOR flash write timing configuration register 0 */\r\n\r\n/* bits definitions */\r\n/* NOR/PSRAM */\r\n/* EXMC_SNCTLx, x=0 */\r\n#define EXMC_SNCTL_NRBKEN    BIT(0)     /*!< NOR bank enable */\r\n#define EXMC_SNCTL_NRMUX     BIT(1)     /*!< NOR bank memory address/data multiplexing */\r\n#define EXMC_SNCTL_NRTP      BITS(2, 3) /*!< NOR bank memory type */\r\n#define EXMC_SNCTL_NRW       BITS(4, 5) /*!< NOR bank memory data bus width */\r\n#define EXMC_SNCTL_NREN      BIT(6)     /*!< NOR flash access enable */\r\n#define EXMC_SNCTL_NRWTPOL   BIT(9)     /*!< NWAIT signal polarity */\r\n#define EXMC_SNCTL_WREN      BIT(12)    /*!< write enable */\r\n#define EXMC_SNCTL_NRWTEN    BIT(13)    /*!< NWAIT signal enable */\r\n#define EXMC_SNCTL_ASYNCWAIT BIT(15)    /*!< asynchronous wait */\r\n\r\n/* EXMC_SNTCFGx, x=0 */\r\n#define EXMC_SNTCFG_ASET   BITS(0, 3)   /*!< address setup time */\r\n#define EXMC_SNTCFG_AHLD   BITS(4, 7)   /*!< address hold time */\r\n#define EXMC_SNTCFG_DSET   BITS(8, 15)  /*!< data setup time */\r\n#define EXMC_SNTCFG_BUSLAT BITS(16, 19) /*!< bus latency */\r\n\r\n/* constants definitions */\r\n/* EXMC NOR/SRAM timing initialize struct */\r\ntypedef struct {\r\n  uint32_t bus_latency;            /*!< configure the bus latency */\r\n  uint32_t asyn_data_setuptime;    /*!< configure the data setup time,asynchronous access mode valid */\r\n  uint32_t asyn_address_holdtime;  /*!< configure the address hold time,asynchronous access mode valid */\r\n  uint32_t asyn_address_setuptime; /*!< configure the data setup time,asynchronous access mode valid */\r\n} exmc_norsram_timing_parameter_struct;\r\n\r\n/* EXMC NOR/SRAM initialize struct */\r\ntypedef struct {\r\n  uint32_t                              norsram_region;    /*!< select the region of EXMC NOR/SRAM bank */\r\n  ControlStatus                         asyn_wait;         /*!< enable or disable the asynchronous wait function */\r\n  ControlStatus                         nwait_signal;      /*!< enable or disable the NWAIT signal */\r\n  ControlStatus                         memory_write;      /*!< enable or disable the write operation */\r\n  uint32_t                              nwait_polarity;    /*!< specifies the polarity of NWAIT signal from memory */\r\n  uint32_t                              databus_width;     /*!< specifies the databus width of external memory */\r\n  uint32_t                              memory_type;       /*!< specifies the type of external memory */\r\n  ControlStatus                         address_data_mux;  /*!< specifies whether the data bus and address bus are multiplexed */\r\n  exmc_norsram_timing_parameter_struct *read_write_timing; /*!< timing parameters for read and write */\r\n} exmc_norsram_parameter_struct;\r\n\r\n/* EXMC register address */\r\n#define EXMC_SNCTL(region)  REG32(EXMC + 0x08U * (region))         /*!< EXMC SRAM/NOR flash control register */\r\n#define EXMC_SNTCFG(region) REG32(EXMC + 0x04U + 0x08U * (region)) /*!< EXMC SRAM/NOR flash timing configuration register */\r\n\r\n/* NOR bank memory data bus width */\r\n#define SNCTL_NRW(regval)          (BITS(4, 5) & ((uint32_t)(regval) << 4))\r\n#define EXMC_NOR_DATABUS_WIDTH_8B  SNCTL_NRW(0) /*!< NOR data width 8 bits */\r\n#define EXMC_NOR_DATABUS_WIDTH_16B SNCTL_NRW(1) /*!< NOR data width 16 bits */\r\n\r\n/* NOR bank memory type */\r\n#define SNCTL_NRTP(regval)     (BITS(2, 3) & ((uint32_t)(regval) << 2))\r\n#define EXMC_MEMORY_TYPE_SRAM  SNCTL_NRTP(0) /*!< SRAM,ROM */\r\n#define EXMC_MEMORY_TYPE_PSRAM SNCTL_NRTP(1) /*!< PSRAM,CRAM */\r\n#define EXMC_MEMORY_TYPE_NOR   SNCTL_NRTP(2) /*!< NOR flash */\r\n\r\n/* EXMC NOR/SRAM bank region definition */\r\n#define EXMC_BANK0_NORSRAM_REGION0 ((uint32_t)0x00000000U) /*!< bank0 NOR/SRAM region0 */\r\n\r\n/* EXMC NWAIT signal polarity configuration */\r\n#define EXMC_NWAIT_POLARITY_LOW  ((uint32_t)0x00000000U) /*!< low level is active of NWAIT */\r\n#define EXMC_NWAIT_POLARITY_HIGH ((uint32_t)0x00000200U) /*!< high level is active of NWAIT */\r\n\r\n/* function declarations */\r\n/* deinitialize EXMC NOR/SRAM region */\r\nvoid exmc_norsram_deinit(uint32_t norsram_region);\r\n/* exmc_norsram_parameter_struct parameter initialize */\r\nvoid exmc_norsram_struct_para_init(exmc_norsram_parameter_struct *exmc_norsram_init_struct);\r\n/* initialize EXMC NOR/SRAM region */\r\nvoid exmc_norsram_init(exmc_norsram_parameter_struct *exmc_norsram_init_struct);\r\n/* EXMC NOR/SRAM bank enable */\r\nvoid exmc_norsram_enable(uint32_t norsram_region);\r\n/* EXMC NOR/SRAM bank disable */\r\nvoid exmc_norsram_disable(uint32_t norsram_region);\r\n\r\n#endif /* GD32VF103_EXMC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_exti.h",
    "content": "/*!\r\n    \\file    gd32vf103_exti.h\r\n    \\brief   definitions for the EXTI\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_EXTI_H\r\n#define GD32VF103_EXTI_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* EXTI definitions */\r\n#define EXTI EXTI_BASE\r\n\r\n/* registers definitions */\r\n#define EXTI_INTEN REG32(EXTI + 0x00U) /*!< interrupt enable register */\r\n#define EXTI_EVEN  REG32(EXTI + 0x04U) /*!< event enable register */\r\n#define EXTI_RTEN  REG32(EXTI + 0x08U) /*!< rising edge trigger enable register */\r\n#define EXTI_FTEN  REG32(EXTI + 0x0CU) /*!< falling trigger enable register */\r\n#define EXTI_SWIEV REG32(EXTI + 0x10U) /*!< software interrupt event register */\r\n#define EXTI_PD    REG32(EXTI + 0x14U) /*!< pending register */\r\n\r\n/* bits definitions */\r\n/* EXTI_INTEN */\r\n#define EXTI_INTEN_INTEN0  BIT(0)  /*!< interrupt from line 0 */\r\n#define EXTI_INTEN_INTEN1  BIT(1)  /*!< interrupt from line 1 */\r\n#define EXTI_INTEN_INTEN2  BIT(2)  /*!< interrupt from line 2 */\r\n#define EXTI_INTEN_INTEN3  BIT(3)  /*!< interrupt from line 3 */\r\n#define EXTI_INTEN_INTEN4  BIT(4)  /*!< interrupt from line 4 */\r\n#define EXTI_INTEN_INTEN5  BIT(5)  /*!< interrupt from line 5 */\r\n#define EXTI_INTEN_INTEN6  BIT(6)  /*!< interrupt from line 6 */\r\n#define EXTI_INTEN_INTEN7  BIT(7)  /*!< interrupt from line 7 */\r\n#define EXTI_INTEN_INTEN8  BIT(8)  /*!< interrupt from line 8 */\r\n#define EXTI_INTEN_INTEN9  BIT(9)  /*!< interrupt from line 9 */\r\n#define EXTI_INTEN_INTEN10 BIT(10) /*!< interrupt from line 10 */\r\n#define EXTI_INTEN_INTEN11 BIT(11) /*!< interrupt from line 11 */\r\n#define EXTI_INTEN_INTEN12 BIT(12) /*!< interrupt from line 12 */\r\n#define EXTI_INTEN_INTEN13 BIT(13) /*!< interrupt from line 13 */\r\n#define EXTI_INTEN_INTEN14 BIT(14) /*!< interrupt from line 14 */\r\n#define EXTI_INTEN_INTEN15 BIT(15) /*!< interrupt from line 15 */\r\n#define EXTI_INTEN_INTEN16 BIT(16) /*!< interrupt from line 16 */\r\n#define EXTI_INTEN_INTEN17 BIT(17) /*!< interrupt from line 17 */\r\n#define EXTI_INTEN_INTEN18 BIT(18) /*!< interrupt from line 18 */\r\n\r\n/* EXTI_EVEN */\r\n#define EXTI_EVEN_EVEN0  BIT(0)  /*!< event from line 0 */\r\n#define EXTI_EVEN_EVEN1  BIT(1)  /*!< event from line 1 */\r\n#define EXTI_EVEN_EVEN2  BIT(2)  /*!< event from line 2 */\r\n#define EXTI_EVEN_EVEN3  BIT(3)  /*!< event from line 3 */\r\n#define EXTI_EVEN_EVEN4  BIT(4)  /*!< event from line 4 */\r\n#define EXTI_EVEN_EVEN5  BIT(5)  /*!< event from line 5 */\r\n#define EXTI_EVEN_EVEN6  BIT(6)  /*!< event from line 6 */\r\n#define EXTI_EVEN_EVEN7  BIT(7)  /*!< event from line 7 */\r\n#define EXTI_EVEN_EVEN8  BIT(8)  /*!< event from line 8 */\r\n#define EXTI_EVEN_EVEN9  BIT(9)  /*!< event from line 9 */\r\n#define EXTI_EVEN_EVEN10 BIT(10) /*!< event from line 10 */\r\n#define EXTI_EVEN_EVEN11 BIT(11) /*!< event from line 11 */\r\n#define EXTI_EVEN_EVEN12 BIT(12) /*!< event from line 12 */\r\n#define EXTI_EVEN_EVEN13 BIT(13) /*!< event from line 13 */\r\n#define EXTI_EVEN_EVEN14 BIT(14) /*!< event from line 14 */\r\n#define EXTI_EVEN_EVEN15 BIT(15) /*!< event from line 15 */\r\n#define EXTI_EVEN_EVEN16 BIT(16) /*!< event from line 16 */\r\n#define EXTI_EVEN_EVEN17 BIT(17) /*!< event from line 17 */\r\n#define EXTI_EVEN_EVEN18 BIT(18) /*!< event from line 18 */\r\n\r\n/* EXTI_RTEN */\r\n#define EXTI_RTEN_RTEN0  BIT(0)  /*!< rising edge from line 0 */\r\n#define EXTI_RTEN_RTEN1  BIT(1)  /*!< rising edge from line 1 */\r\n#define EXTI_RTEN_RTEN2  BIT(2)  /*!< rising edge from line 2 */\r\n#define EXTI_RTEN_RTEN3  BIT(3)  /*!< rising edge from line 3 */\r\n#define EXTI_RTEN_RTEN4  BIT(4)  /*!< rising edge from line 4 */\r\n#define EXTI_RTEN_RTEN5  BIT(5)  /*!< rising edge from line 5 */\r\n#define EXTI_RTEN_RTEN6  BIT(6)  /*!< rising edge from line 6 */\r\n#define EXTI_RTEN_RTEN7  BIT(7)  /*!< rising edge from line 7 */\r\n#define EXTI_RTEN_RTEN8  BIT(8)  /*!< rising edge from line 8 */\r\n#define EXTI_RTEN_RTEN9  BIT(9)  /*!< rising edge from line 9 */\r\n#define EXTI_RTEN_RTEN10 BIT(10) /*!< rising edge from line 10 */\r\n#define EXTI_RTEN_RTEN11 BIT(11) /*!< rising edge from line 11 */\r\n#define EXTI_RTEN_RTEN12 BIT(12) /*!< rising edge from line 12 */\r\n#define EXTI_RTEN_RTEN13 BIT(13) /*!< rising edge from line 13 */\r\n#define EXTI_RTEN_RTEN14 BIT(14) /*!< rising edge from line 14 */\r\n#define EXTI_RTEN_RTEN15 BIT(15) /*!< rising edge from line 15 */\r\n#define EXTI_RTEN_RTEN16 BIT(16) /*!< rising edge from line 16 */\r\n#define EXTI_RTEN_RTEN17 BIT(17) /*!< rising edge from line 17 */\r\n#define EXTI_RTEN_RTEN18 BIT(18) /*!< rising edge from line 18 */\r\n\r\n/* EXTI_FTEN */\r\n#define EXTI_FTEN_FTEN0  BIT(0)  /*!< falling edge from line 0 */\r\n#define EXTI_FTEN_FTEN1  BIT(1)  /*!< falling edge from line 1 */\r\n#define EXTI_FTEN_FTEN2  BIT(2)  /*!< falling edge from line 2 */\r\n#define EXTI_FTEN_FTEN3  BIT(3)  /*!< falling edge from line 3 */\r\n#define EXTI_FTEN_FTEN4  BIT(4)  /*!< falling edge from line 4 */\r\n#define EXTI_FTEN_FTEN5  BIT(5)  /*!< falling edge from line 5 */\r\n#define EXTI_FTEN_FTEN6  BIT(6)  /*!< falling edge from line 6 */\r\n#define EXTI_FTEN_FTEN7  BIT(7)  /*!< falling edge from line 7 */\r\n#define EXTI_FTEN_FTEN8  BIT(8)  /*!< falling edge from line 8 */\r\n#define EXTI_FTEN_FTEN9  BIT(9)  /*!< falling edge from line 9 */\r\n#define EXTI_FTEN_FTEN10 BIT(10) /*!< falling edge from line 10 */\r\n#define EXTI_FTEN_FTEN11 BIT(11) /*!< falling edge from line 11 */\r\n#define EXTI_FTEN_FTEN12 BIT(12) /*!< falling edge from line 12 */\r\n#define EXTI_FTEN_FTEN13 BIT(13) /*!< falling edge from line 13 */\r\n#define EXTI_FTEN_FTEN14 BIT(14) /*!< falling edge from line 14 */\r\n#define EXTI_FTEN_FTEN15 BIT(15) /*!< falling edge from line 15 */\r\n#define EXTI_FTEN_FTEN16 BIT(16) /*!< falling edge from line 16 */\r\n#define EXTI_FTEN_FTEN17 BIT(17) /*!< falling edge from line 17 */\r\n#define EXTI_FTEN_FTEN18 BIT(18) /*!< falling edge from line 18 */\r\n\r\n/* EXTI_SWIEV */\r\n#define EXTI_SWIEV_SWIEV0  BIT(0)  /*!< software interrupt/event request from line 0 */\r\n#define EXTI_SWIEV_SWIEV1  BIT(1)  /*!< software interrupt/event request from line 1 */\r\n#define EXTI_SWIEV_SWIEV2  BIT(2)  /*!< software interrupt/event request from line 2 */\r\n#define EXTI_SWIEV_SWIEV3  BIT(3)  /*!< software interrupt/event request from line 3 */\r\n#define EXTI_SWIEV_SWIEV4  BIT(4)  /*!< software interrupt/event request from line 4 */\r\n#define EXTI_SWIEV_SWIEV5  BIT(5)  /*!< software interrupt/event request from line 5 */\r\n#define EXTI_SWIEV_SWIEV6  BIT(6)  /*!< software interrupt/event request from line 6 */\r\n#define EXTI_SWIEV_SWIEV7  BIT(7)  /*!< software interrupt/event request from line 7 */\r\n#define EXTI_SWIEV_SWIEV8  BIT(8)  /*!< software interrupt/event request from line 8 */\r\n#define EXTI_SWIEV_SWIEV9  BIT(9)  /*!< software interrupt/event request from line 9 */\r\n#define EXTI_SWIEV_SWIEV10 BIT(10) /*!< software interrupt/event request from line 10 */\r\n#define EXTI_SWIEV_SWIEV11 BIT(11) /*!< software interrupt/event request from line 11 */\r\n#define EXTI_SWIEV_SWIEV12 BIT(12) /*!< software interrupt/event request from line 12 */\r\n#define EXTI_SWIEV_SWIEV13 BIT(13) /*!< software interrupt/event request from line 13 */\r\n#define EXTI_SWIEV_SWIEV14 BIT(14) /*!< software interrupt/event request from line 14 */\r\n#define EXTI_SWIEV_SWIEV15 BIT(15) /*!< software interrupt/event request from line 15 */\r\n#define EXTI_SWIEV_SWIEV16 BIT(16) /*!< software interrupt/event request from line 16 */\r\n#define EXTI_SWIEV_SWIEV17 BIT(17) /*!< software interrupt/event request from line 17 */\r\n#define EXTI_SWIEV_SWIEV18 BIT(18) /*!< software interrupt/event request from line 18 */\r\n\r\n/* EXTI_PD */\r\n#define EXTI_PD_PD0  BIT(0)  /*!< interrupt/event pending status from line 0 */\r\n#define EXTI_PD_PD1  BIT(1)  /*!< interrupt/event pending status from line 1 */\r\n#define EXTI_PD_PD2  BIT(2)  /*!< interrupt/event pending status from line 2 */\r\n#define EXTI_PD_PD3  BIT(3)  /*!< interrupt/event pending status from line 3 */\r\n#define EXTI_PD_PD4  BIT(4)  /*!< interrupt/event pending status from line 4 */\r\n#define EXTI_PD_PD5  BIT(5)  /*!< interrupt/event pending status from line 5 */\r\n#define EXTI_PD_PD6  BIT(6)  /*!< interrupt/event pending status from line 6 */\r\n#define EXTI_PD_PD7  BIT(7)  /*!< interrupt/event pending status from line 7 */\r\n#define EXTI_PD_PD8  BIT(8)  /*!< interrupt/event pending status from line 8 */\r\n#define EXTI_PD_PD9  BIT(9)  /*!< interrupt/event pending status from line 9 */\r\n#define EXTI_PD_PD10 BIT(10) /*!< interrupt/event pending status from line 10 */\r\n#define EXTI_PD_PD11 BIT(11) /*!< interrupt/event pending status from line 11 */\r\n#define EXTI_PD_PD12 BIT(12) /*!< interrupt/event pending status from line 12 */\r\n#define EXTI_PD_PD13 BIT(13) /*!< interrupt/event pending status from line 13 */\r\n#define EXTI_PD_PD14 BIT(14) /*!< interrupt/event pending status from line 14 */\r\n#define EXTI_PD_PD15 BIT(15) /*!< interrupt/event pending status from line 15 */\r\n#define EXTI_PD_PD16 BIT(16) /*!< interrupt/event pending status from line 16 */\r\n#define EXTI_PD_PD17 BIT(17) /*!< interrupt/event pending status from line 17 */\r\n#define EXTI_PD_PD18 BIT(18) /*!< interrupt/event pending status from line 18 */\r\n\r\n/* constants definitions */\r\n/* EXTI line number */\r\ntypedef enum {\r\n  EXTI_0  = BIT(0),  /*!< EXTI line 0 */\r\n  EXTI_1  = BIT(1),  /*!< EXTI line 1 */\r\n  EXTI_2  = BIT(2),  /*!< EXTI line 2 */\r\n  EXTI_3  = BIT(3),  /*!< EXTI line 3 */\r\n  EXTI_4  = BIT(4),  /*!< EXTI line 4 */\r\n  EXTI_5  = BIT(5),  /*!< EXTI line 5 */\r\n  EXTI_6  = BIT(6),  /*!< EXTI line 6 */\r\n  EXTI_7  = BIT(7),  /*!< EXTI line 7 */\r\n  EXTI_8  = BIT(8),  /*!< EXTI line 8 */\r\n  EXTI_9  = BIT(9),  /*!< EXTI line 9 */\r\n  EXTI_10 = BIT(10), /*!< EXTI line 10 */\r\n  EXTI_11 = BIT(11), /*!< EXTI line 11 */\r\n  EXTI_12 = BIT(12), /*!< EXTI line 12 */\r\n  EXTI_13 = BIT(13), /*!< EXTI line 13 */\r\n  EXTI_14 = BIT(14), /*!< EXTI line 14 */\r\n  EXTI_15 = BIT(15), /*!< EXTI line 15 */\r\n  EXTI_16 = BIT(16), /*!< EXTI line 16 */\r\n  EXTI_17 = BIT(17), /*!< EXTI line 17 */\r\n  EXTI_18 = BIT(18), /*!< EXTI line 18 */\r\n} exti_line_enum;\r\n\r\n/* external interrupt and event  */\r\ntypedef enum {\r\n  EXTI_INTERRUPT = 0, /*!< EXTI interrupt mode */\r\n  EXTI_EVENT          /*!< EXTI event mode */\r\n} exti_mode_enum;\r\n\r\n/* interrupt trigger mode */\r\ntypedef enum {\r\n  EXTI_TRIG_RISING = 0, /*!< EXTI rising edge trigger */\r\n  EXTI_TRIG_FALLING,    /*!< EXTI falling edge trigger */\r\n  EXTI_TRIG_BOTH,       /*!< EXTI rising edge and falling edge trigger */\r\n  EXTI_TRIG_NONE        /*!< without rising edge or falling edge trigger */\r\n} exti_trig_type_enum;\r\n\r\n/* function declarations */\r\n/* initialization, EXTI lines configuration functions */\r\n/* deinitialize the EXTI */\r\nvoid exti_deinit(void);\r\n/* enable the configuration of EXTI initialize */\r\nvoid exti_init(exti_line_enum linex, exti_mode_enum mode, exti_trig_type_enum trig_type);\r\n/* enable the interrupts from EXTI line x */\r\nvoid exti_interrupt_enable(exti_line_enum linex);\r\n/* enable the events from EXTI line x */\r\nvoid exti_event_enable(exti_line_enum linex);\r\n/* disable the interrupts from EXTI line x */\r\nvoid exti_interrupt_disable(exti_line_enum linex);\r\n/* disable the events from EXTI line x */\r\nvoid exti_event_disable(exti_line_enum linex);\r\n\r\n/* interrupt & flag functions */\r\n/* get EXTI lines pending flag */\r\nFlagStatus exti_flag_get(exti_line_enum linex);\r\n/* clear EXTI lines pending flag */\r\nvoid exti_flag_clear(exti_line_enum linex);\r\n/* get EXTI lines flag when the interrupt flag is set */\r\nFlagStatus exti_interrupt_flag_get(exti_line_enum linex);\r\n/* clear EXTI lines pending flag */\r\nvoid exti_interrupt_flag_clear(exti_line_enum linex);\r\n/* enable the EXTI software interrupt event  */\r\nvoid exti_software_interrupt_enable(exti_line_enum linex);\r\n/* disable the EXTI software interrupt event  */\r\nvoid exti_software_interrupt_disable(exti_line_enum linex);\r\n\r\n#endif /* GD32VF103_EXTI_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_fmc.h",
    "content": "/*!\r\n    \\file    gd32vf103_fmc.h\r\n    \\brief   definitions for the FMC\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2019-09-18, V1.0.1, firmware for GD32VF103\r\n    \\version 2020-02-20, V1.0.2, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_FMC_H\r\n#define GD32VF103_FMC_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* FMC and option byte definition */\r\n#define FMC FMC_BASE /*!< FMC register base address */\r\n#define OB  OB_BASE  /*!< option bytes base address */\r\n\r\n/* registers definitions */\r\n#define FMC_WS     REG32((FMC) + 0x00U)  /*!< FMC wait state register */\r\n#define FMC_KEY    REG32((FMC) + 0x04U)  /*!< FMC unlock key register */\r\n#define FMC_OBKEY  REG32((FMC) + 0x08U)  /*!< FMC option bytes unlock key register */\r\n#define FMC_STAT   REG32((FMC) + 0x0CU)  /*!< FMC status register */\r\n#define FMC_CTL    REG32((FMC) + 0x10U)  /*!< FMC control register */\r\n#define FMC_ADDR   REG32((FMC) + 0x14U)  /*!< FMC address register */\r\n#define FMC_OBSTAT REG32((FMC) + 0x1CU)  /*!< FMC option bytes status register */\r\n#define FMC_WP     REG32((FMC) + 0x20U)  /*!< FMC erase/program protection register */\r\n#define FMC_PID    REG32((FMC) + 0x100U) /*!< FMC product ID register */\r\n\r\n#define OB_SPC  REG16((OB) + 0x00U) /*!< option byte security protection value */\r\n#define OB_USER REG16((OB) + 0x02U) /*!< option byte user value*/\r\n#define OB_WP0  REG16((OB) + 0x08U) /*!< option byte write protection 0 */\r\n#define OB_WP1  REG16((OB) + 0x0AU) /*!< option byte write protection 1 */\r\n#define OB_WP2  REG16((OB) + 0x0CU) /*!< option byte write protection 2 */\r\n#define OB_WP3  REG16((OB) + 0x0EU) /*!< option byte write protection 3 */\r\n\r\n/* bits definitions */\r\n/* FMC_WS */\r\n#define FMC_WS_WSCNT BITS(0, 2) /*!< wait state counter */\r\n\r\n/* FMC_KEY */\r\n#define FMC_KEY_KEY BITS(0, 31) /*!< FMC_CTL unlock key bits */\r\n\r\n/* FMC_OBKEY */\r\n#define FMC_OBKEY_OBKEY BITS(0, 31) /*!< option bytes unlock key bits */\r\n\r\n/* FMC_STAT */\r\n#define FMC_STAT_BUSY  BIT(0) /*!< flash busy flag bit */\r\n#define FMC_STAT_PGERR BIT(2) /*!< flash program error flag bit */\r\n#define FMC_STAT_WPERR BIT(4) /*!< erase/program protection error flag bit */\r\n#define FMC_STAT_ENDF  BIT(5) /*!< end of operation flag bit */\r\n\r\n/* FMC_CTL */\r\n#define FMC_CTL_PG    BIT(0)  /*!< main flash program command bit */\r\n#define FMC_CTL_PER   BIT(1)  /*!< main flash page erase command bit */\r\n#define FMC_CTL_MER   BIT(2)  /*!< main flash mass erase command bit */\r\n#define FMC_CTL_OBPG  BIT(4)  /*!< option bytes program command bit */\r\n#define FMC_CTL_OBER  BIT(5)  /*!< option bytes erase command bit */\r\n#define FMC_CTL_START BIT(6)  /*!< send erase command to FMC bit */\r\n#define FMC_CTL_LK    BIT(7)  /*!< FMC_CTL lock bit */\r\n#define FMC_CTL_OBWEN BIT(9)  /*!< option bytes erase/program enable bit */\r\n#define FMC_CTL_ERRIE BIT(10) /*!< error interrupt enable bit */\r\n#define FMC_CTL_ENDIE BIT(12) /*!< end of operation interrupt enable bit */\r\n\r\n/* FMC_ADDR */\r\n#define FMC_ADDR0_ADDR BITS(0, 31) /*!< Flash erase/program command address bits */\r\n\r\n/* FMC_OBSTAT */\r\n#define FMC_OBSTAT_OBERR BIT(0)       /*!< option bytes read error bit. */\r\n#define FMC_OBSTAT_SPC   BIT(1)       /*!< option bytes security protection code */\r\n#define FMC_OBSTAT_USER  BITS(2, 9)   /*!< store USER of option bytes block after system reset */\r\n#define FMC_OBSTAT_DATA  BITS(10, 25) /*!< store DATA of option bytes block after system reset. */\r\n\r\n/* FMC_WP */\r\n#define FMC_WP_WP BITS(0, 31) /*!< store WP of option bytes block after system reset */\r\n\r\n/* FMC_WSEN */\r\n#define FMC_WSEN_WSEN BIT(0) /*!< FMC wait state enable bit */\r\n\r\n/* FMC_PID */\r\n#define FMC_PID_PID BITS(0, 31) /*!< product ID bits */\r\n\r\n/* constants definitions */\r\n/* define the FMC bit position and its register index offset */\r\n#define FMC_REGIDX_BIT(regidx, bitpos)            (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos))\r\n#define FMC_REG_VAL(offset)                       (REG32(FMC + ((uint32_t)(offset) >> 6)))\r\n#define FMC_BIT_POS(val)                          ((uint32_t)(val)&0x1FU)\r\n#define FMC_REGIDX_BITS(regidx, bitpos0, bitpos1) (((uint32_t)(regidx) << 12) | ((uint32_t)(bitpos0) << 6) | (uint32_t)(bitpos1))\r\n#define FMC_REG_VALS(offset)                      (REG32(FMC + ((uint32_t)(offset) >> 12)))\r\n#define FMC_BIT_POS0(val)                         (((uint32_t)(val) >> 6) & 0x1FU)\r\n#define FMC_BIT_POS1(val)                         ((uint32_t)(val)&0x1FU)\r\n#define FMC_REG_OFFSET_GET(flag)                  ((uint32_t)(flag) >> 12)\r\n\r\n/* configuration register */\r\n#define FMC_STAT_REG_OFFSET   0x0CU /*!< status register offset */\r\n#define FMC_CTL_REG_OFFSET    0x10U /*!< control register offset */\r\n#define FMC_OBSTAT_REG_OFFSET 0x1CU /*!< option byte status register offset */\r\n\r\n/* fmc state */\r\ntypedef enum {\r\n  FMC_READY, /*!< the operation has been completed */\r\n  FMC_BUSY,  /*!< the operation is in progress */\r\n  FMC_PGERR, /*!< program error */\r\n  FMC_WPERR, /*!< erase/program protection error */\r\n  FMC_TOERR, /*!< timeout error */\r\n} fmc_state_enum;\r\n\r\n/* FMC interrupt enable */\r\ntypedef enum {\r\n  FMC_INT_END = FMC_CTL_ENDIE, /*!< enable FMC end of program interrupt */\r\n  FMC_INT_ERR = FMC_CTL_ERRIE, /*!< enable FMC error interrupt */\r\n} fmc_int_enum;\r\n\r\n/* FMC flags */\r\ntypedef enum {\r\n  FMC_FLAG_BUSY  = FMC_STAT_BUSY,  /*!< FMC busy flag */\r\n  FMC_FLAG_PGERR = FMC_STAT_PGERR, /*!< FMC operation error flag */\r\n  FMC_FLAG_WPERR = FMC_STAT_WPERR, /*!< FMC erase/program protection error flag */\r\n  FMC_FLAG_END   = FMC_STAT_ENDF,  /*!< FMC end of operation flag */\r\n} fmc_flag_enum;\r\n\r\n/* FMC interrupt flags */\r\ntypedef enum {\r\n  FMC_INT_FLAG_PGERR = FMC_STAT_PGERR, /*!< FMC operation error interrupt flag */\r\n  FMC_INT_FLAG_WPERR = FMC_STAT_WPERR, /*!< FMC erase/program protection error interrupt flag */\r\n  FMC_INT_FLAG_END   = FMC_STAT_ENDF,  /*!< FMC end of operation interrupt flag */\r\n} fmc_interrupt_flag_enum;\r\n\r\n/* unlock key */\r\n#define UNLOCK_KEY0 ((uint32_t)0x45670123U) /*!< unlock key 0 */\r\n#define UNLOCK_KEY1 ((uint32_t)0xCDEF89ABU) /*!< unlock key 1 */\r\n\r\n/* FMC wait state counter */\r\n#define WS_WSCNT(regval) (BITS(0, 2) & ((uint32_t)(regval)))\r\n#define WS_WSCNT_0       WS_WSCNT(0) /*!< FMC 0 wait */\r\n#define WS_WSCNT_1       WS_WSCNT(1) /*!< FMC 1 wait */\r\n#define WS_WSCNT_2       WS_WSCNT(2) /*!< FMC 2 wait */\r\n\r\n/* option bytes software/hardware free watch dog timer */\r\n#define OB_FWDGT_SW ((uint8_t)0x01U) /*!< software free watchdog */\r\n#define OB_FWDGT_HW ((uint8_t)0x00U) /*!< hardware free watchdog */\r\n\r\n/* option bytes reset or not entering deep sleep mode */\r\n#define OB_DEEPSLEEP_NRST ((uint8_t)0x02U) /*!< no reset when entering deepsleep mode */\r\n#define OB_DEEPSLEEP_RST  ((uint8_t)0x00U) /*!< generate a reset instead of entering deepsleep mode */\r\n\r\n/* option bytes reset or not entering standby mode */\r\n#define OB_STDBY_NRST ((uint8_t)0x04U) /*!< no reset when entering deepsleep mode */\r\n#define OB_STDBY_RST  ((uint8_t)0x00U) /*!< generate a reset instead of entering standby mode */\r\n\r\n/* option bytes boot bank value */\r\n#define OB_BOOT_B0 ((uint8_t)0x08U) /*!< boot from bank0 */\r\n\r\n#define OB_USER_MASK ((uint8_t)0xF0U) /*!< MASK value */\r\n\r\n/* read protect configure */\r\n#define FMC_NSPC ((uint8_t)0xA5U) /*!< no security protection */\r\n#define FMC_USPC ((uint8_t)0xBBU) /*!< under security protection */\r\n\r\n/* OB_SPC */\r\n#define OB_SPC_SPC   ((uint32_t)0x000000FFU) /*!< option byte security protection value */\r\n#define OB_SPC_SPC_N ((uint32_t)0x0000FF00U) /*!< option byte security protection complement value */\r\n\r\n/* OB_USER */\r\n#define OB_USER_USER   ((uint32_t)0x00FF0000U) /*!< user option value */\r\n#define OB_USER_USER_N ((uint32_t)0xFF000000U) /*!< user option complement value */\r\n\r\n/* OB_WP0 */\r\n#define OB_WP0_WP0 ((uint32_t)0x000000FFU) /*!< FMC write protection option value */\r\n\r\n/* OB_WP1 */\r\n#define OB_WP1_WP1 ((uint32_t)0x0000FF00U) /*!< FMC write protection option complement value */\r\n\r\n/* OB_WP2 */\r\n#define OB_WP2_WP2 ((uint32_t)0x00FF0000U) /*!< FMC write protection option value */\r\n\r\n/* OB_WP3 */\r\n#define OB_WP3_WP3 ((uint32_t)0xFF000000U) /*!< FMC write protection option complement value */\r\n\r\n/* option bytes write protection */\r\n#define OB_WP_0   ((uint32_t)0x00000001U) /*!< erase/program protection of sector 0  */\r\n#define OB_WP_1   ((uint32_t)0x00000002U) /*!< erase/program protection of sector 1  */\r\n#define OB_WP_2   ((uint32_t)0x00000004U) /*!< erase/program protection of sector 2  */\r\n#define OB_WP_3   ((uint32_t)0x00000008U) /*!< erase/program protection of sector 3  */\r\n#define OB_WP_4   ((uint32_t)0x00000010U) /*!< erase/program protection of sector 4  */\r\n#define OB_WP_5   ((uint32_t)0x00000020U) /*!< erase/program protection of sector 5  */\r\n#define OB_WP_6   ((uint32_t)0x00000040U) /*!< erase/program protection of sector 6  */\r\n#define OB_WP_7   ((uint32_t)0x00000080U) /*!< erase/program protection of sector 7  */\r\n#define OB_WP_8   ((uint32_t)0x00000100U) /*!< erase/program protection of sector 8  */\r\n#define OB_WP_9   ((uint32_t)0x00000200U) /*!< erase/program protection of sector 9  */\r\n#define OB_WP_10  ((uint32_t)0x00000400U) /*!< erase/program protection of sector 10 */\r\n#define OB_WP_11  ((uint32_t)0x00000800U) /*!< erase/program protection of sector 11 */\r\n#define OB_WP_12  ((uint32_t)0x00001000U) /*!< erase/program protection of sector 12 */\r\n#define OB_WP_13  ((uint32_t)0x00002000U) /*!< erase/program protection of sector 13 */\r\n#define OB_WP_14  ((uint32_t)0x00004000U) /*!< erase/program protection of sector 14 */\r\n#define OB_WP_15  ((uint32_t)0x00008000U) /*!< erase/program protection of sector 15 */\r\n#define OB_WP_16  ((uint32_t)0x00010000U) /*!< erase/program protection of sector 16 */\r\n#define OB_WP_17  ((uint32_t)0x00020000U) /*!< erase/program protection of sector 17 */\r\n#define OB_WP_18  ((uint32_t)0x00040000U) /*!< erase/program protection of sector 18 */\r\n#define OB_WP_19  ((uint32_t)0x00080000U) /*!< erase/program protection of sector 19 */\r\n#define OB_WP_20  ((uint32_t)0x00100000U) /*!< erase/program protection of sector 20 */\r\n#define OB_WP_21  ((uint32_t)0x00200000U) /*!< erase/program protection of sector 21 */\r\n#define OB_WP_22  ((uint32_t)0x00400000U) /*!< erase/program protection of sector 22 */\r\n#define OB_WP_23  ((uint32_t)0x00800000U) /*!< erase/program protection of sector 23 */\r\n#define OB_WP_24  ((uint32_t)0x01000000U) /*!< erase/program protection of sector 24 */\r\n#define OB_WP_25  ((uint32_t)0x02000000U) /*!< erase/program protection of sector 25 */\r\n#define OB_WP_26  ((uint32_t)0x04000000U) /*!< erase/program protection of sector 26 */\r\n#define OB_WP_27  ((uint32_t)0x08000000U) /*!< erase/program protection of sector 27 */\r\n#define OB_WP_28  ((uint32_t)0x10000000U) /*!< erase/program protection of sector 28 */\r\n#define OB_WP_29  ((uint32_t)0x20000000U) /*!< erase/program protection of sector 29 */\r\n#define OB_WP_30  ((uint32_t)0x40000000U) /*!< erase/program protection of sector 30 */\r\n#define OB_WP_31  ((uint32_t)0x80000000U) /*!< erase/program protection of sector 31 */\r\n#define OB_WP_ALL ((uint32_t)0xFFFFFFFFU) /*!< erase/program protection of all sectors */\r\n\r\n/* FMC timeout */\r\n#define FMC_TIMEOUT_COUNT ((uint32_t)0x000F0000U) /*!< FMC timeout count value */\r\n\r\n/* FMC BANK address */\r\n#define FMC_SIZE  (*(uint16_t *)0x1FFFF7E0U) /*!< FMC size */\r\n#define SRAM_SIZE (*(uint16_t *)0x1FFFF7E2U) /*!< SRAM size*/\r\n\r\n/* function declarations */\r\n/* FMC main memory programming functions */\r\n/* set the FMC wait state counter */\r\nvoid fmc_wscnt_set(uint32_t wscnt);\r\n/* unlock the main FMC operation */\r\nvoid fmc_unlock(void);\r\n/* lock the main FMC operation */\r\nvoid fmc_lock(void);\r\n/* FMC erase page */\r\nfmc_state_enum fmc_page_erase(uint32_t page_address);\r\n/* FMC erase whole chip */\r\nfmc_state_enum fmc_mass_erase(void);\r\n/* FMC program a word at the corresponding address */\r\nfmc_state_enum fmc_word_program(uint32_t address, uint32_t data);\r\n/* FMC program a half word at the corresponding address */\r\nfmc_state_enum fmc_halfword_program(uint32_t address, uint16_t data);\r\n\r\n/* FMC option bytes programming functions */\r\n/* unlock the option byte operation */\r\nvoid ob_unlock(void);\r\n/* lock the option byte operation */\r\nvoid ob_lock(void);\r\n/* erase the FMC option byte */\r\nfmc_state_enum ob_erase(void);\r\n/* enable write protection */\r\nfmc_state_enum ob_write_protection_enable(uint32_t ob_wp);\r\n/* configure security protection */\r\nfmc_state_enum ob_security_protection_config(uint8_t ob_spc);\r\n/* program the FMC user option byte */\r\nfmc_state_enum ob_user_write(uint8_t ob_fwdgt, uint8_t ob_deepsleep, uint8_t ob_stdby, uint8_t ob_boot);\r\n/* program the FMC data option byte */\r\nfmc_state_enum ob_data_program(uint32_t address, uint8_t data);\r\n/* get OB_USER in register FMC_OBSTAT */\r\nuint8_t ob_user_get(void);\r\n/* get OB_DATA in register FMC_OBSTAT */\r\nuint16_t ob_data_get(void);\r\n/* get the FMC option byte write protection */\r\nuint32_t ob_write_protection_get(void);\r\n/* get FMC option byte security protection state */\r\nFlagStatus ob_spc_get(void);\r\n\r\n/* FMC interrupts and flags management functions */\r\n/* enable FMC interrupt */\r\nvoid fmc_interrupt_enable(fmc_int_enum interrupt);\r\n/* disable FMC interrupt */\r\nvoid fmc_interrupt_disable(fmc_int_enum interrupt);\r\n/* check flag is set or not */\r\nFlagStatus fmc_flag_get(fmc_flag_enum flag);\r\n/* clear the FMC flag */\r\nvoid fmc_flag_clear(fmc_flag_enum flag);\r\n/* get FMC interrupt flag state */\r\nFlagStatus fmc_interrupt_flag_get(fmc_interrupt_flag_enum flag);\r\n/* clear FMC interrupt flag state */\r\nvoid fmc_interrupt_flag_clear(fmc_interrupt_flag_enum flag);\r\n/* return the FMC  state */\r\nfmc_state_enum fmc_state_get(void);\r\n/* check FMC ready or not */\r\nfmc_state_enum fmc_ready_wait(uint32_t timeout);\r\n\r\n#endif /* GD32VF103_FMC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_fwdgt.h",
    "content": "/*!\r\n    \\file    gd32vf103_fwdgt.h\r\n    \\brief   definitions for the FWDGT\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_FWDGT_H\r\n#define GD32VF103_FWDGT_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* FWDGT definitions */\r\n#define FWDGT FWDGT_BASE /*!< FWDGT base address */\r\n\r\n/* registers definitions */\r\n#define FWDGT_CTL  REG32((FWDGT) + 0x00000000U) /*!< FWDGT control register */\r\n#define FWDGT_PSC  REG32((FWDGT) + 0x00000004U) /*!< FWDGT prescaler register */\r\n#define FWDGT_RLD  REG32((FWDGT) + 0x00000008U) /*!< FWDGT reload register */\r\n#define FWDGT_STAT REG32((FWDGT) + 0x0000000CU) /*!< FWDGT status register */\r\n\r\n/* bits definitions */\r\n/* FWDGT_CTL */\r\n#define FWDGT_CTL_CMD BITS(0, 15) /*!< FWDGT command value */\r\n\r\n/* FWDGT_PSC */\r\n#define FWDGT_PSC_PSC BITS(0, 2) /*!< FWDGT prescaler divider value */\r\n\r\n/* FWDGT_RLD */\r\n#define FWDGT_RLD_RLD BITS(0, 11) /*!< FWDGT counter reload value */\r\n\r\n/* FWDGT_STAT */\r\n#define FWDGT_STAT_PUD BIT(0) /*!< FWDGT prescaler divider value update */\r\n#define FWDGT_STAT_RUD BIT(1) /*!< FWDGT counter reload value update */\r\n\r\n/* constants definitions */\r\n/* psc register value */\r\n#define PSC_PSC(regval)  (BITS(0, 2) & ((uint32_t)(regval) << 0))\r\n#define FWDGT_PSC_DIV4   ((uint8_t)PSC_PSC(0)) /*!< FWDGT prescaler set to 4 */\r\n#define FWDGT_PSC_DIV8   ((uint8_t)PSC_PSC(1)) /*!< FWDGT prescaler set to 8 */\r\n#define FWDGT_PSC_DIV16  ((uint8_t)PSC_PSC(2)) /*!< FWDGT prescaler set to 16 */\r\n#define FWDGT_PSC_DIV32  ((uint8_t)PSC_PSC(3)) /*!< FWDGT prescaler set to 32 */\r\n#define FWDGT_PSC_DIV64  ((uint8_t)PSC_PSC(4)) /*!< FWDGT prescaler set to 64 */\r\n#define FWDGT_PSC_DIV128 ((uint8_t)PSC_PSC(5)) /*!< FWDGT prescaler set to 128 */\r\n#define FWDGT_PSC_DIV256 ((uint8_t)PSC_PSC(6)) /*!< FWDGT prescaler set to 256 */\r\n\r\n/* control value */\r\n#define FWDGT_WRITEACCESS_ENABLE  ((uint16_t)0x5555U) /*!< FWDGT_CTL bits write access enable value */\r\n#define FWDGT_WRITEACCESS_DISABLE ((uint16_t)0x0000U) /*!< FWDGT_CTL bits write access disable value */\r\n#define FWDGT_KEY_RELOAD          ((uint16_t)0xAAAAU) /*!< FWDGT_CTL bits fwdgt counter reload value */\r\n#define FWDGT_KEY_ENABLE          ((uint16_t)0xCCCCU) /*!< FWDGT_CTL bits fwdgt counter enable value */\r\n\r\n/* FWDGT timeout value */\r\n#define FWDGT_PSC_TIMEOUT ((uint32_t)0x000FFFFFU) /*!< FWDGT_PSC register write operation state flag timeout */\r\n#define FWDGT_RLD_TIMEOUT ((uint32_t)0x000FFFFFU) /*!< FWDGT_RLD register write operation state flag timeout */\r\n\r\n/* FWDGT flag definitions */\r\n#define FWDGT_FLAG_PUD FWDGT_STAT_PUD /*!< FWDGT prescaler divider value update flag */\r\n#define FWDGT_FLAG_RUD FWDGT_STAT_RUD /*!< FWDGT counter reload value update flag */\r\n\r\n/* function declarations */\r\n/* enable write access to FWDGT_PSC and FWDGT_RLD */\r\nvoid fwdgt_write_enable(void);\r\n/* disable write access to FWDGT_PSC and FWDGT_RLD */\r\nvoid fwdgt_write_disable(void);\r\n/* start the free watchdog timer counter */\r\nvoid fwdgt_enable(void);\r\n\r\n/* reload the counter of FWDGT */\r\nvoid fwdgt_counter_reload(void);\r\n/* configure counter reload value, and prescaler divider value */\r\nErrStatus fwdgt_config(uint16_t reload_value, uint8_t prescaler_div);\r\n\r\n/* get flag state of FWDGT */\r\nFlagStatus fwdgt_flag_get(uint16_t flag);\r\n\r\n#endif /* GD32VF103_FWDGT_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_gpio.h",
    "content": "/*!\r\n    \\file    gd32vf103_gpio.h\r\n    \\brief   definitions for the GPIO\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_GPIO_H\r\n#define GD32VF103_GPIO_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* GPIOx(x=A,B,C,D,E) definitions */\r\n#define GPIOA (GPIO_BASE + 0x00000000U)\r\n#define GPIOB (GPIO_BASE + 0x00000400U)\r\n#define GPIOC (GPIO_BASE + 0x00000800U)\r\n#define GPIOD (GPIO_BASE + 0x00000C00U)\r\n#define GPIOE (GPIO_BASE + 0x00001000U)\r\n\r\n/* AFIO definitions */\r\n#define AFIO AFIO_BASE\r\n\r\n/* registers definitions */\r\n\r\n/* GPIO registers definitions */\r\n#define GPIO_CTL0(gpiox)  REG32((gpiox) + 0x00U) /*!< GPIO port control register 0 */\r\n#define GPIO_CTL1(gpiox)  REG32((gpiox) + 0x04U) /*!< GPIO port control register 1 */\r\n#define GPIO_ISTAT(gpiox) REG32((gpiox) + 0x08U) /*!< GPIO port input status register */\r\n#define GPIO_OCTL(gpiox)  REG32((gpiox) + 0x0CU) /*!< GPIO port output control register */\r\n#define GPIO_BOP(gpiox)   REG32((gpiox) + 0x10U) /*!< GPIO port bit operation register */\r\n#define GPIO_BC(gpiox)    REG32((gpiox) + 0x14U) /*!< GPIO bit clear register */\r\n#define GPIO_LOCK(gpiox)  REG32((gpiox) + 0x18U) /*!< GPIO port configuration lock register */\r\n\r\n/* AFIO registers definitions */\r\n#define AFIO_EC      REG32(AFIO + 0x00U) /*!< AFIO event control register */\r\n#define AFIO_PCF0    REG32(AFIO + 0x04U) /*!< AFIO port configuration register 0 */\r\n#define AFIO_EXTISS0 REG32(AFIO + 0x08U) /*!< AFIO port EXTI sources selection register 0 */\r\n#define AFIO_EXTISS1 REG32(AFIO + 0x0CU) /*!< AFIO port EXTI sources selection register 1 */\r\n#define AFIO_EXTISS2 REG32(AFIO + 0x10U) /*!< AFIO port EXTI sources selection register 2 */\r\n#define AFIO_EXTISS3 REG32(AFIO + 0x14U) /*!< AFIO port EXTI sources selection register 3 */\r\n#define AFIO_PCF1    REG32(AFIO + 0x1CU) /*!< AFIO port configuration register 1 */\r\n\r\n/* bits definitions */\r\n/* GPIO_CTL0 */\r\n#define GPIO_CTL0_MD0  BITS(0, 1)   /*!< port 0 mode bits */\r\n#define GPIO_CTL0_CTL0 BITS(2, 3)   /*!< pin 0 configuration bits */\r\n#define GPIO_CTL0_MD1  BITS(4, 5)   /*!< port 1 mode bits */\r\n#define GPIO_CTL0_CTL1 BITS(6, 7)   /*!< pin 1 configuration bits */\r\n#define GPIO_CTL0_MD2  BITS(8, 9)   /*!< port 2 mode bits */\r\n#define GPIO_CTL0_CTL2 BITS(10, 11) /*!< pin 2 configuration bits */\r\n#define GPIO_CTL0_MD3  BITS(12, 13) /*!< port 3 mode bits */\r\n#define GPIO_CTL0_CTL3 BITS(14, 15) /*!< pin 3 configuration bits */\r\n#define GPIO_CTL0_MD4  BITS(16, 17) /*!< port 4 mode bits */\r\n#define GPIO_CTL0_CTL4 BITS(18, 19) /*!< pin 4 configuration bits */\r\n#define GPIO_CTL0_MD5  BITS(20, 21) /*!< port 5 mode bits */\r\n#define GPIO_CTL0_CTL5 BITS(22, 23) /*!< pin 5 configuration bits */\r\n#define GPIO_CTL0_MD6  BITS(24, 25) /*!< port 6 mode bits */\r\n#define GPIO_CTL0_CTL6 BITS(26, 27) /*!< pin 6 configuration bits */\r\n#define GPIO_CTL0_MD7  BITS(28, 29) /*!< port 7 mode bits */\r\n#define GPIO_CTL0_CTL7 BITS(30, 31) /*!< pin 7 configuration bits */\r\n\r\n/* GPIO_CTL1 */\r\n#define GPIO_CTL1_MD8   BITS(0, 1)   /*!< port 8 mode bits */\r\n#define GPIO_CTL1_CTL8  BITS(2, 3)   /*!< pin 8 configuration bits */\r\n#define GPIO_CTL1_MD9   BITS(4, 5)   /*!< port 9 mode bits */\r\n#define GPIO_CTL1_CTL9  BITS(6, 7)   /*!< pin 9 configuration bits */\r\n#define GPIO_CTL1_MD10  BITS(8, 9)   /*!< port 10 mode bits */\r\n#define GPIO_CTL1_CTL10 BITS(10, 11) /*!< pin 10 configuration bits */\r\n#define GPIO_CTL1_MD11  BITS(12, 13) /*!< port 11 mode bits */\r\n#define GPIO_CTL1_CTL11 BITS(14, 15) /*!< pin 11 configuration bits */\r\n#define GPIO_CTL1_MD12  BITS(16, 17) /*!< port 12 mode bits */\r\n#define GPIO_CTL1_CTL12 BITS(18, 19) /*!< pin 12 configuration bits */\r\n#define GPIO_CTL1_MD13  BITS(20, 21) /*!< port 13 mode bits */\r\n#define GPIO_CTL1_CTL13 BITS(22, 23) /*!< pin 13 configuration bits */\r\n#define GPIO_CTL1_MD14  BITS(24, 25) /*!< port 14 mode bits */\r\n#define GPIO_CTL1_CTL14 BITS(26, 27) /*!< pin 14 configuration bits */\r\n#define GPIO_CTL1_MD15  BITS(28, 29) /*!< port 15 mode bits */\r\n#define GPIO_CTL1_CTL15 BITS(30, 31) /*!< pin 15 configuration bits */\r\n\r\n/* GPIO_ISTAT */\r\n#define GPIO_ISTAT_ISTAT0  BIT(0)  /*!< pin 0 input status */\r\n#define GPIO_ISTAT_ISTAT1  BIT(1)  /*!< pin 1 input status */\r\n#define GPIO_ISTAT_ISTAT2  BIT(2)  /*!< pin 2 input status */\r\n#define GPIO_ISTAT_ISTAT3  BIT(3)  /*!< pin 3 input status */\r\n#define GPIO_ISTAT_ISTAT4  BIT(4)  /*!< pin 4 input status */\r\n#define GPIO_ISTAT_ISTAT5  BIT(5)  /*!< pin 5 input status */\r\n#define GPIO_ISTAT_ISTAT6  BIT(6)  /*!< pin 6 input status */\r\n#define GPIO_ISTAT_ISTAT7  BIT(7)  /*!< pin 7 input status */\r\n#define GPIO_ISTAT_ISTAT8  BIT(8)  /*!< pin 8 input status */\r\n#define GPIO_ISTAT_ISTAT9  BIT(9)  /*!< pin 9 input status */\r\n#define GPIO_ISTAT_ISTAT10 BIT(10) /*!< pin 10 input status */\r\n#define GPIO_ISTAT_ISTAT11 BIT(11) /*!< pin 11 input status */\r\n#define GPIO_ISTAT_ISTAT12 BIT(12) /*!< pin 12 input status */\r\n#define GPIO_ISTAT_ISTAT13 BIT(13) /*!< pin 13 input status */\r\n#define GPIO_ISTAT_ISTAT14 BIT(14) /*!< pin 14 input status */\r\n#define GPIO_ISTAT_ISTAT15 BIT(15) /*!< pin 15 input status */\r\n\r\n/* GPIO_OCTL */\r\n#define GPIO_OCTL_OCTL0  BIT(0)  /*!< pin 0 output bit */\r\n#define GPIO_OCTL_OCTL1  BIT(1)  /*!< pin 1 output bit */\r\n#define GPIO_OCTL_OCTL2  BIT(2)  /*!< pin 2 output bit */\r\n#define GPIO_OCTL_OCTL3  BIT(3)  /*!< pin 3 output bit */\r\n#define GPIO_OCTL_OCTL4  BIT(4)  /*!< pin 4 output bit */\r\n#define GPIO_OCTL_OCTL5  BIT(5)  /*!< pin 5 output bit */\r\n#define GPIO_OCTL_OCTL6  BIT(6)  /*!< pin 6 output bit */\r\n#define GPIO_OCTL_OCTL7  BIT(7)  /*!< pin 7 output bit */\r\n#define GPIO_OCTL_OCTL8  BIT(8)  /*!< pin 8 output bit */\r\n#define GPIO_OCTL_OCTL9  BIT(9)  /*!< pin 9 output bit */\r\n#define GPIO_OCTL_OCTL10 BIT(10) /*!< pin 10 output bit */\r\n#define GPIO_OCTL_OCTL11 BIT(11) /*!< pin 11 output bit */\r\n#define GPIO_OCTL_OCTL12 BIT(12) /*!< pin 12 output bit */\r\n#define GPIO_OCTL_OCTL13 BIT(13) /*!< pin 13 output bit */\r\n#define GPIO_OCTL_OCTL14 BIT(14) /*!< pin 14 output bit */\r\n#define GPIO_OCTL_OCTL15 BIT(15) /*!< pin 15 output bit */\r\n\r\n/* GPIO_BOP */\r\n#define GPIO_BOP_BOP0  BIT(0)  /*!< pin 0 set bit */\r\n#define GPIO_BOP_BOP1  BIT(1)  /*!< pin 1 set bit */\r\n#define GPIO_BOP_BOP2  BIT(2)  /*!< pin 2 set bit */\r\n#define GPIO_BOP_BOP3  BIT(3)  /*!< pin 3 set bit */\r\n#define GPIO_BOP_BOP4  BIT(4)  /*!< pin 4 set bit */\r\n#define GPIO_BOP_BOP5  BIT(5)  /*!< pin 5 set bit */\r\n#define GPIO_BOP_BOP6  BIT(6)  /*!< pin 6 set bit */\r\n#define GPIO_BOP_BOP7  BIT(7)  /*!< pin 7 set bit */\r\n#define GPIO_BOP_BOP8  BIT(8)  /*!< pin 8 set bit */\r\n#define GPIO_BOP_BOP9  BIT(9)  /*!< pin 9 set bit */\r\n#define GPIO_BOP_BOP10 BIT(10) /*!< pin 10 set bit */\r\n#define GPIO_BOP_BOP11 BIT(11) /*!< pin 11 set bit */\r\n#define GPIO_BOP_BOP12 BIT(12) /*!< pin 12 set bit */\r\n#define GPIO_BOP_BOP13 BIT(13) /*!< pin 13 set bit */\r\n#define GPIO_BOP_BOP14 BIT(14) /*!< pin 14 set bit */\r\n#define GPIO_BOP_BOP15 BIT(15) /*!< pin 15 set bit */\r\n#define GPIO_BOP_CR0   BIT(16) /*!< pin 0 clear bit */\r\n#define GPIO_BOP_CR1   BIT(17) /*!< pin 1 clear bit */\r\n#define GPIO_BOP_CR2   BIT(18) /*!< pin 2 clear bit */\r\n#define GPIO_BOP_CR3   BIT(19) /*!< pin 3 clear bit */\r\n#define GPIO_BOP_CR4   BIT(20) /*!< pin 4 clear bit */\r\n#define GPIO_BOP_CR5   BIT(21) /*!< pin 5 clear bit */\r\n#define GPIO_BOP_CR6   BIT(22) /*!< pin 6 clear bit */\r\n#define GPIO_BOP_CR7   BIT(23) /*!< pin 7 clear bit */\r\n#define GPIO_BOP_CR8   BIT(24) /*!< pin 8 clear bit */\r\n#define GPIO_BOP_CR9   BIT(25) /*!< pin 9 clear bit */\r\n#define GPIO_BOP_CR10  BIT(26) /*!< pin 10 clear bit */\r\n#define GPIO_BOP_CR11  BIT(27) /*!< pin 11 clear bit */\r\n#define GPIO_BOP_CR12  BIT(28) /*!< pin 12 clear bit */\r\n#define GPIO_BOP_CR13  BIT(29) /*!< pin 13 clear bit */\r\n#define GPIO_BOP_CR14  BIT(30) /*!< pin 14 clear bit */\r\n#define GPIO_BOP_CR15  BIT(31) /*!< pin 15 clear bit */\r\n\r\n/* GPIO_BC */\r\n#define GPIO_BC_CR0  BIT(0)  /*!< pin 0 clear bit */\r\n#define GPIO_BC_CR1  BIT(1)  /*!< pin 1 clear bit */\r\n#define GPIO_BC_CR2  BIT(2)  /*!< pin 2 clear bit */\r\n#define GPIO_BC_CR3  BIT(3)  /*!< pin 3 clear bit */\r\n#define GPIO_BC_CR4  BIT(4)  /*!< pin 4 clear bit */\r\n#define GPIO_BC_CR5  BIT(5)  /*!< pin 5 clear bit */\r\n#define GPIO_BC_CR6  BIT(6)  /*!< pin 6 clear bit */\r\n#define GPIO_BC_CR7  BIT(7)  /*!< pin 7 clear bit */\r\n#define GPIO_BC_CR8  BIT(8)  /*!< pin 8 clear bit */\r\n#define GPIO_BC_CR9  BIT(9)  /*!< pin 9 clear bit */\r\n#define GPIO_BC_CR10 BIT(10) /*!< pin 10 clear bit */\r\n#define GPIO_BC_CR11 BIT(11) /*!< pin 11 clear bit */\r\n#define GPIO_BC_CR12 BIT(12) /*!< pin 12 clear bit */\r\n#define GPIO_BC_CR13 BIT(13) /*!< pin 13 clear bit */\r\n#define GPIO_BC_CR14 BIT(14) /*!< pin 14 clear bit */\r\n#define GPIO_BC_CR15 BIT(15) /*!< pin 15 clear bit */\r\n\r\n/* GPIO_LOCK */\r\n#define GPIO_LOCK_LK0  BIT(0)  /*!< pin 0 lock bit */\r\n#define GPIO_LOCK_LK1  BIT(1)  /*!< pin 1 lock bit */\r\n#define GPIO_LOCK_LK2  BIT(2)  /*!< pin 2 lock bit */\r\n#define GPIO_LOCK_LK3  BIT(3)  /*!< pin 3 lock bit */\r\n#define GPIO_LOCK_LK4  BIT(4)  /*!< pin 4 lock bit */\r\n#define GPIO_LOCK_LK5  BIT(5)  /*!< pin 5 lock bit */\r\n#define GPIO_LOCK_LK6  BIT(6)  /*!< pin 6 lock bit */\r\n#define GPIO_LOCK_LK7  BIT(7)  /*!< pin 7 lock bit */\r\n#define GPIO_LOCK_LK8  BIT(8)  /*!< pin 8 lock bit */\r\n#define GPIO_LOCK_LK9  BIT(9)  /*!< pin 9 lock bit */\r\n#define GPIO_LOCK_LK10 BIT(10) /*!< pin 10 lock bit */\r\n#define GPIO_LOCK_LK11 BIT(11) /*!< pin 11 lock bit */\r\n#define GPIO_LOCK_LK12 BIT(12) /*!< pin 12 lock bit */\r\n#define GPIO_LOCK_LK13 BIT(13) /*!< pin 13 lock bit */\r\n#define GPIO_LOCK_LK14 BIT(14) /*!< pin 14 lock bit */\r\n#define GPIO_LOCK_LK15 BIT(15) /*!< pin 15 lock bit */\r\n#define GPIO_LOCK_LKK  BIT(16) /*!< pin sequence lock key */\r\n\r\n/* AFIO_EC */\r\n#define AFIO_EC_PIN  BITS(0, 3) /*!< event output pin selection */\r\n#define AFIO_EC_PORT BITS(4, 6) /*!< event output port selection */\r\n#define AFIO_EC_EOE  BIT(7)     /*!< event output enable */\r\n\r\n/* AFIO_PCF0 */\r\n#define AFIO_PCF0_SPI0_REMAP        BIT(0)       /*!< SPI0 remapping */\r\n#define AFIO_PCF0_I2C0_REMAP        BIT(1)       /*!< I2C0 remapping */\r\n#define AFIO_PCF0_USART0_REMAP      BIT(2)       /*!< USART0 remapping */\r\n#define AFIO_PCF0_USART1_REMAP      BIT(3)       /*!< USART1 remapping */\r\n#define AFIO_PCF0_USART2_REMAP      BITS(4, 5)   /*!< USART2 remapping */\r\n#define AFIO_PCF0_TIMER0_REMAP      BITS(6, 7)   /*!< TIMER0 remapping */\r\n#define AFIO_PCF0_TIMER1_REMAP      BITS(8, 9)   /*!< TIMER1 remapping */\r\n#define AFIO_PCF0_TIMER2_REMAP      BITS(10, 11) /*!< TIMER2 remapping */\r\n#define AFIO_PCF0_TIMER3_REMAP      BIT(12)      /*!< TIMER3 remapping */\r\n#define AFIO_PCF0_CAN_REMAP         BITS(13, 14) /*!< CAN remapping */\r\n#define AFIO_PCF0_PD01_REMAP        BIT(15)      /*!< port D0/port D1 mapping on OSC_IN/OSC_OUT */\r\n#define AFIO_PCF0_TIMER4CH3_IREMAP  BIT(16)      /*!< TIMER3 channel3 internal remapping */\r\n#define AFIO_PCF0_SWJ_CFG           BITS(24, 26) /*!< serial wire JTAG configuration */\r\n#define AFIO_PCF0_SPI2_REMAP        BIT(28)      /*!< SPI2/I2S2 remapping */\r\n#define AFIO_PCF0_TIMER1_ITI1_REMAP BIT(29)      /*!< TIMER1 internal trigger 1 remapping */\r\n\r\n/* AFIO_EXTISS0 */\r\n#define AFIO_EXTI0_SS BITS(0, 3)   /*!< EXTI 0 sources selection */\r\n#define AFIO_EXTI1_SS BITS(4, 7)   /*!< EXTI 1 sources selection */\r\n#define AFIO_EXTI2_SS BITS(8, 11)  /*!< EXTI 2 sources selection */\r\n#define AFIO_EXTI3_SS BITS(12, 15) /*!< EXTI 3 sources selection */\r\n\r\n/* AFIO_EXTISS1 */\r\n#define AFIO_EXTI4_SS BITS(0, 3)   /*!< EXTI 4 sources selection */\r\n#define AFIO_EXTI5_SS BITS(4, 7)   /*!< EXTI 5 sources selection */\r\n#define AFIO_EXTI6_SS BITS(8, 11)  /*!< EXTI 6 sources selection */\r\n#define AFIO_EXTI7_SS BITS(12, 15) /*!< EXTI 7 sources selection */\r\n\r\n/* AFIO_EXTISS2 */\r\n#define AFIO_EXTI8_SS  BITS(0, 3)   /*!< EXTI 8 sources selection */\r\n#define AFIO_EXTI9_SS  BITS(4, 7)   /*!< EXTI 9 sources selection */\r\n#define AFIO_EXTI10_SS BITS(8, 11)  /*!< EXTI 10 sources selection */\r\n#define AFIO_EXTI11_SS BITS(12, 15) /*!< EXTI 11 sources selection */\r\n\r\n/* AFIO_EXTISS3 */\r\n#define AFIO_EXTI12_SS BITS(0, 3)   /*!< EXTI 12 sources selection */\r\n#define AFIO_EXTI13_SS BITS(4, 7)   /*!< EXTI 13 sources selection */\r\n#define AFIO_EXTI14_SS BITS(8, 11)  /*!< EXTI 14 sources selection */\r\n#define AFIO_EXTI15_SS BITS(12, 15) /*!< EXTI 15 sources selection */\r\n\r\n/* AFIO_PCF1 */\r\n#define AFIO_PCF1_EXMC_NADV BIT(10) /*!< EXMC_NADV connect/disconnect */\r\n\r\n/* constants definitions */\r\ntypedef FlagStatus bit_status;\r\n\r\n/* GPIO mode values set */\r\n#define GPIO_MODE_SET(n, mode) ((uint32_t)((uint32_t)(mode) << (4U * (n))))\r\n#define GPIO_MODE_MASK(n)      (0xFU << (4U * (n)))\r\n\r\n/* GPIO mode definitions */\r\n#define GPIO_MODE_AIN         ((uint8_t)0x00U) /*!< analog input mode */\r\n#define GPIO_MODE_IN_FLOATING ((uint8_t)0x04U) /*!< floating input mode */\r\n#define GPIO_MODE_IPD         ((uint8_t)0x28U) /*!< pull-down input mode */\r\n#define GPIO_MODE_IPU         ((uint8_t)0x48U) /*!< pull-up input mode */\r\n#define GPIO_MODE_OUT_OD      ((uint8_t)0x14U) /*!< GPIO output with open-drain */\r\n#define GPIO_MODE_OUT_PP      ((uint8_t)0x10U) /*!< GPIO output with push-pull */\r\n#define GPIO_MODE_AF_OD       ((uint8_t)0x1CU) /*!< AFIO output with open-drain */\r\n#define GPIO_MODE_AF_PP       ((uint8_t)0x18U) /*!< AFIO output with push-pull */\r\n\r\n/* GPIO output max speed value */\r\n#define GPIO_OSPEED_10MHZ ((uint8_t)0x01U) /*!< output max speed 10MHz */\r\n#define GPIO_OSPEED_2MHZ  ((uint8_t)0x02U) /*!< output max speed 2MHz */\r\n#define GPIO_OSPEED_50MHZ ((uint8_t)0x03U) /*!< output max speed 50MHz */\r\n\r\n/* GPIO event output port definitions */\r\n#define GPIO_EVENT_PORT_GPIOA ((uint8_t)0x00U) /*!< event output port A */\r\n#define GPIO_EVENT_PORT_GPIOB ((uint8_t)0x01U) /*!< event output port B */\r\n#define GPIO_EVENT_PORT_GPIOC ((uint8_t)0x02U) /*!< event output port C */\r\n#define GPIO_EVENT_PORT_GPIOD ((uint8_t)0x03U) /*!< event output port D */\r\n#define GPIO_EVENT_PORT_GPIOE ((uint8_t)0x04U) /*!< event output port E */\r\n\r\n/* GPIO output port source definitions */\r\n#define GPIO_PORT_SOURCE_GPIOA ((uint8_t)0x00U) /*!< output port source A */\r\n#define GPIO_PORT_SOURCE_GPIOB ((uint8_t)0x01U) /*!< output port source B */\r\n#define GPIO_PORT_SOURCE_GPIOC ((uint8_t)0x02U) /*!< output port source C */\r\n#define GPIO_PORT_SOURCE_GPIOD ((uint8_t)0x03U) /*!< output port source D */\r\n#define GPIO_PORT_SOURCE_GPIOE ((uint8_t)0x04U) /*!< output port source E */\r\n\r\n/* GPIO event output pin definitions */\r\n#define GPIO_EVENT_PIN_0  ((uint8_t)0x00U) /*!< GPIO event pin 0 */\r\n#define GPIO_EVENT_PIN_1  ((uint8_t)0x01U) /*!< GPIO event pin 1 */\r\n#define GPIO_EVENT_PIN_2  ((uint8_t)0x02U) /*!< GPIO event pin 2 */\r\n#define GPIO_EVENT_PIN_3  ((uint8_t)0x03U) /*!< GPIO event pin 3 */\r\n#define GPIO_EVENT_PIN_4  ((uint8_t)0x04U) /*!< GPIO event pin 4 */\r\n#define GPIO_EVENT_PIN_5  ((uint8_t)0x05U) /*!< GPIO event pin 5 */\r\n#define GPIO_EVENT_PIN_6  ((uint8_t)0x06U) /*!< GPIO event pin 6 */\r\n#define GPIO_EVENT_PIN_7  ((uint8_t)0x07U) /*!< GPIO event pin 7 */\r\n#define GPIO_EVENT_PIN_8  ((uint8_t)0x08U) /*!< GPIO event pin 8 */\r\n#define GPIO_EVENT_PIN_9  ((uint8_t)0x09U) /*!< GPIO event pin 9 */\r\n#define GPIO_EVENT_PIN_10 ((uint8_t)0x0AU) /*!< GPIO event pin 10 */\r\n#define GPIO_EVENT_PIN_11 ((uint8_t)0x0BU) /*!< GPIO event pin 11 */\r\n#define GPIO_EVENT_PIN_12 ((uint8_t)0x0CU) /*!< GPIO event pin 12 */\r\n#define GPIO_EVENT_PIN_13 ((uint8_t)0x0DU) /*!< GPIO event pin 13 */\r\n#define GPIO_EVENT_PIN_14 ((uint8_t)0x0EU) /*!< GPIO event pin 14 */\r\n#define GPIO_EVENT_PIN_15 ((uint8_t)0x0FU) /*!< GPIO event pin 15 */\r\n\r\n/* GPIO output pin source definitions */\r\n#define GPIO_PIN_SOURCE_0  ((uint8_t)0x00U) /*!< GPIO pin source 0 */\r\n#define GPIO_PIN_SOURCE_1  ((uint8_t)0x01U) /*!< GPIO pin source 1 */\r\n#define GPIO_PIN_SOURCE_2  ((uint8_t)0x02U) /*!< GPIO pin source 2 */\r\n#define GPIO_PIN_SOURCE_3  ((uint8_t)0x03U) /*!< GPIO pin source 3 */\r\n#define GPIO_PIN_SOURCE_4  ((uint8_t)0x04U) /*!< GPIO pin source 4 */\r\n#define GPIO_PIN_SOURCE_5  ((uint8_t)0x05U) /*!< GPIO pin source 5 */\r\n#define GPIO_PIN_SOURCE_6  ((uint8_t)0x06U) /*!< GPIO pin source 6 */\r\n#define GPIO_PIN_SOURCE_7  ((uint8_t)0x07U) /*!< GPIO pin source 7 */\r\n#define GPIO_PIN_SOURCE_8  ((uint8_t)0x08U) /*!< GPIO pin source 8 */\r\n#define GPIO_PIN_SOURCE_9  ((uint8_t)0x09U) /*!< GPIO pin source 9 */\r\n#define GPIO_PIN_SOURCE_10 ((uint8_t)0x0AU) /*!< GPIO pin source 10 */\r\n#define GPIO_PIN_SOURCE_11 ((uint8_t)0x0BU) /*!< GPIO pin source 11 */\r\n#define GPIO_PIN_SOURCE_12 ((uint8_t)0x0CU) /*!< GPIO pin source 12 */\r\n#define GPIO_PIN_SOURCE_13 ((uint8_t)0x0DU) /*!< GPIO pin source 13 */\r\n#define GPIO_PIN_SOURCE_14 ((uint8_t)0x0EU) /*!< GPIO pin source 14 */\r\n#define GPIO_PIN_SOURCE_15 ((uint8_t)0x0FU) /*!< GPIO pin source 15 */\r\n\r\n/* GPIO pin definitions */\r\n#define GPIO_PIN_0   BIT(0)      /*!< GPIO pin 0 */\r\n#define GPIO_PIN_1   BIT(1)      /*!< GPIO pin 1 */\r\n#define GPIO_PIN_2   BIT(2)      /*!< GPIO pin 2 */\r\n#define GPIO_PIN_3   BIT(3)      /*!< GPIO pin 3 */\r\n#define GPIO_PIN_4   BIT(4)      /*!< GPIO pin 4 */\r\n#define GPIO_PIN_5   BIT(5)      /*!< GPIO pin 5 */\r\n#define GPIO_PIN_6   BIT(6)      /*!< GPIO pin 6 */\r\n#define GPIO_PIN_7   BIT(7)      /*!< GPIO pin 7 */\r\n#define GPIO_PIN_8   BIT(8)      /*!< GPIO pin 8 */\r\n#define GPIO_PIN_9   BIT(9)      /*!< GPIO pin 9 */\r\n#define GPIO_PIN_10  BIT(10)     /*!< GPIO pin 10 */\r\n#define GPIO_PIN_11  BIT(11)     /*!< GPIO pin 11 */\r\n#define GPIO_PIN_12  BIT(12)     /*!< GPIO pin 12 */\r\n#define GPIO_PIN_13  BIT(13)     /*!< GPIO pin 13 */\r\n#define GPIO_PIN_14  BIT(14)     /*!< GPIO pin 14 */\r\n#define GPIO_PIN_15  BIT(15)     /*!< GPIO pin 15 */\r\n#define GPIO_PIN_ALL BITS(0, 15) /*!< GPIO pin all */\r\n\r\n/* GPIO remap definitions */\r\n#define GPIO_SPI0_REMAP            ((uint32_t)0x00000001U) /*!< SPI0 remapping */\r\n#define GPIO_I2C0_REMAP            ((uint32_t)0x00000002U) /*!< I2C0 remapping */\r\n#define GPIO_USART0_REMAP          ((uint32_t)0x00000004U) /*!< USART0 remapping */\r\n#define GPIO_USART1_REMAP          ((uint32_t)0x00000008U) /*!< USART1 remapping */\r\n#define GPIO_USART2_PARTIAL_REMAP  ((uint32_t)0x00140010U) /*!< USART2 partial remapping */\r\n#define GPIO_USART2_FULL_REMAP     ((uint32_t)0x00140030U) /*!< USART2 full remapping */\r\n#define GPIO_TIMER0_PARTIAL_REMAP  ((uint32_t)0x00160040U) /*!< TIMER0 partial remapping */\r\n#define GPIO_TIMER0_FULL_REMAP     ((uint32_t)0x001600C0U) /*!< TIMER0 full remapping */\r\n#define GPIO_TIMER1_PARTIAL_REMAP0 ((uint32_t)0x00180100U) /*!< TIMER1 partial remapping */\r\n#define GPIO_TIMER1_PARTIAL_REMAP1 ((uint32_t)0x00180200U) /*!< TIMER1 partial remapping */\r\n#define GPIO_TIMER1_FULL_REMAP     ((uint32_t)0x00180300U) /*!< TIMER1 full remapping */\r\n#define GPIO_TIMER2_PARTIAL_REMAP  ((uint32_t)0x001A0800U) /*!< TIMER2 partial remapping */\r\n#define GPIO_TIMER2_FULL_REMAP     ((uint32_t)0x001A0C00U) /*!< TIMER2 full remapping */\r\n#define GPIO_TIMER3_REMAP          ((uint32_t)0x00001000U) /*!< TIMER3 remapping */\r\n#define GPIO_CAN0_PARTIAL_REMAP    ((uint32_t)0x001D4000U) /*!< CAN0 partial remapping */\r\n#define GPIO_CAN0_FULL_REMAP       ((uint32_t)0x001D6000U) /*!< CAN0 full remapping */\r\n#define GPIO_PD01_REMAP            ((uint32_t)0x00008000U) /*!< PD01 remapping */\r\n#define GPIO_TIMER4CH3_IREMAP      ((uint32_t)0x00200001U) /*!< TIMER4 channel3 internal remapping */\r\n#define GPIO_CAN1_REMAP            ((uint32_t)0x00200040U) /*!< CAN1 remapping */\r\n#define GPIO_SWJ_NONJTRST_REMAP    ((uint32_t)0x00300100U) /*!< JTAG-DP,but without NJTRST */\r\n#define GPIO_SWJ_DISABLE_REMAP     ((uint32_t)0x00300200U) /*!< JTAG-DP disabled */\r\n#define GPIO_SPI2_REMAP            ((uint32_t)0x00201100U) /*!< SPI2 remapping */\r\n#define GPIO_TIMER1ITI1_REMAP      ((uint32_t)0x00202000U) /*!< TIMER1 internal trigger 1 remapping */\r\n#define GPIO_EXMC_NADV_REMAP       ((uint32_t)0x80000400U) /*!< EXMC_NADV connect/disconnect */\r\n\r\n/* function declarations */\r\n/* reset GPIO port */\r\nvoid gpio_deinit(uint32_t gpio_periph);\r\n/* reset alternate function I/O(AFIO) */\r\nvoid gpio_afio_deinit(void);\r\n/* GPIO parameter initialization */\r\nvoid gpio_init(uint32_t gpio_periph, uint32_t mode, uint32_t speed, uint32_t pin);\r\n\r\n/* set GPIO pin bit */\r\nvoid gpio_bit_set(uint32_t gpio_periph, uint32_t pin);\r\n/* reset GPIO pin bit */\r\nvoid gpio_bit_reset(uint32_t gpio_periph, uint32_t pin);\r\n/* write data to the specified GPIO pin */\r\nvoid gpio_bit_write(uint32_t gpio_periph, uint32_t pin, bit_status bit_value);\r\n/* write data to the specified GPIO port */\r\nvoid gpio_port_write(uint32_t gpio_periph, uint16_t data);\r\n\r\n/* get GPIO pin input status */\r\nFlagStatus gpio_input_bit_get(uint32_t gpio_periph, uint32_t pin);\r\n/* get GPIO port input status */\r\nuint16_t gpio_input_port_get(uint32_t gpio_periph);\r\n/* get GPIO pin output status */\r\nFlagStatus gpio_output_bit_get(uint32_t gpio_periph, uint32_t pin);\r\n/* get GPIO port output status */\r\nuint16_t gpio_output_port_get(uint32_t gpio_periph);\r\n\r\n/* configure GPIO pin remap */\r\nvoid gpio_pin_remap_config(uint32_t remap, ControlStatus newvalue);\r\n\r\n/* select GPIO pin exti sources */\r\nvoid gpio_exti_source_select(uint8_t output_port, uint8_t output_pin);\r\n/* configure GPIO pin event output */\r\nvoid gpio_event_output_config(uint8_t output_port, uint8_t output_pin);\r\n/* enable GPIO pin event output */\r\nvoid gpio_event_output_enable(void);\r\n/* disable GPIO pin event output */\r\nvoid gpio_event_output_disable(void);\r\n\r\n/* lock GPIO pin bit */\r\nvoid gpio_pin_lock(uint32_t gpio_periph, uint32_t pin);\r\n\r\n#endif /* GD32VF103_GPIO_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_i2c.h",
    "content": "/*!\r\n    \\file    gd32vf103_i2c.h\r\n    \\brief   definitions for the I2C\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_I2C_H\r\n#define GD32VF103_I2C_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* I2Cx(x=0,1) definitions */\r\n#define I2C0 I2C_BASE                 /*!< I2C0 base address */\r\n#define I2C1 (I2C_BASE + 0x00000400U) /*!< I2C1 base address */\r\n\r\n/* registers definitions */\r\n#define I2C_CTL0(i2cx)   REG32((i2cx) + 0x00U) /*!< I2C control register 0 */\r\n#define I2C_CTL1(i2cx)   REG32((i2cx) + 0x04U) /*!< I2C control register 1 */\r\n#define I2C_SADDR0(i2cx) REG32((i2cx) + 0x08U) /*!< I2C slave address register 0*/\r\n#define I2C_SADDR1(i2cx) REG32((i2cx) + 0x0CU) /*!< I2C slave address register */\r\n#define I2C_DATA(i2cx)   REG32((i2cx) + 0x10U) /*!< I2C transfer buffer register */\r\n#define I2C_STAT0(i2cx)  REG32((i2cx) + 0x14U) /*!< I2C transfer status register 0 */\r\n#define I2C_STAT1(i2cx)  REG32((i2cx) + 0x18U) /*!< I2C transfer status register */\r\n#define I2C_CKCFG(i2cx)  REG32((i2cx) + 0x1CU) /*!< I2C clock configure register */\r\n#define I2C_RT(i2cx)     REG32((i2cx) + 0x20U) /*!< I2C rise time register */\r\n#define I2C_FMPCFG(i2cx) REG32((i2cx) + 0x90U) /*!< I2C fast-mode-plus configure register */\r\n/* bits definitions */\r\n/* I2Cx_CTL0 */\r\n#define I2C_CTL0_I2CEN    BIT(0)  /*!< peripheral enable */\r\n#define I2C_CTL0_SMBEN    BIT(1)  /*!< SMBus mode */\r\n#define I2C_CTL0_SMBSEL   BIT(3)  /*!< SMBus type */\r\n#define I2C_CTL0_ARPEN    BIT(4)  /*!< ARP enable */\r\n#define I2C_CTL0_PECEN    BIT(5)  /*!< PEC enable */\r\n#define I2C_CTL0_GCEN     BIT(6)  /*!< general call enable */\r\n#define I2C_CTL0_SS       BIT(7)  /*!< clock stretching disable (slave mode) */\r\n#define I2C_CTL0_START    BIT(8)  /*!< start generation */\r\n#define I2C_CTL0_STOP     BIT(9)  /*!< stop generation */\r\n#define I2C_CTL0_ACKEN    BIT(10) /*!< acknowledge enable */\r\n#define I2C_CTL0_POAP     BIT(11) /*!< acknowledge/PEC position (for data reception) */\r\n#define I2C_CTL0_PECTRANS BIT(12) /*!< packet error checking */\r\n#define I2C_CTL0_SALT     BIT(13) /*!< SMBus alert */\r\n#define I2C_CTL0_SRESET   BIT(15) /*!< software reset */\r\n\r\n/* I2Cx_CTL1 */\r\n#define I2C_CTL1_I2CCLK BITS(0, 5) /*!< I2CCLK[5:0] bits (peripheral clock frequency) */\r\n#define I2C_CTL1_ERRIE  BIT(8)     /*!< error interrupt enable */\r\n#define I2C_CTL1_EVIE   BIT(9)     /*!< event interrupt enable */\r\n#define I2C_CTL1_BUFIE  BIT(10)    /*!< buffer interrupt enable */\r\n#define I2C_CTL1_DMAON  BIT(11)    /*!< DMA requests enable */\r\n#define I2C_CTL1_DMALST BIT(12)    /*!< DMA last transfer */\r\n\r\n/* I2Cx_SADDR0 */\r\n#define I2C_SADDR0_ADDRESS0  BIT(0)     /*!< bit 0 of a 10-bit address */\r\n#define I2C_SADDR0_ADDRESS   BITS(1, 7) /*!< 7-bit address or bits 7:1 of a 10-bit address */\r\n#define I2C_SADDR0_ADDRESS_H BITS(8, 9) /*!< highest two bits of a 10-bit address */\r\n#define I2C_SADDR0_ADDFORMAT BIT(15)    /*!< address mode for the I2C slave */\r\n\r\n/* I2Cx_SADDR1 */\r\n#define I2C_SADDR1_DUADEN   BIT(0)     /*!< aual-address mode switch */\r\n#define I2C_SADDR1_ADDRESS2 BITS(1, 7) /*!< second I2C address for the slave in dual-address mode */\r\n\r\n/* I2Cx_DATA */\r\n#define I2C_DATA_TRB BITS(0, 7) /*!< 8-bit data register */\r\n\r\n/* I2Cx_STAT0 */\r\n#define I2C_STAT0_SBSEND    BIT(0)  /*!< start bit (master mode) */\r\n#define I2C_STAT0_ADDSEND   BIT(1)  /*!< address sent (master mode)/matched (slave mode) */\r\n#define I2C_STAT0_BTC       BIT(2)  /*!< byte transfer finished */\r\n#define I2C_STAT0_ADD10SEND BIT(3)  /*!< 10-bit header sent (master mode) */\r\n#define I2C_STAT0_STPDET    BIT(4)  /*!< stop detection (slave mode) */\r\n#define I2C_STAT0_RBNE      BIT(6)  /*!< data register not empty (receivers) */\r\n#define I2C_STAT0_TBE       BIT(7)  /*!< data register empty (transmitters) */\r\n#define I2C_STAT0_BERR      BIT(8)  /*!< bus error */\r\n#define I2C_STAT0_LOSTARB   BIT(9)  /*!< arbitration lost (master mode) */\r\n#define I2C_STAT0_AERR      BIT(10) /*!< acknowledge failure */\r\n#define I2C_STAT0_OUERR     BIT(11) /*!< overrun/underrun */\r\n#define I2C_STAT0_PECERR    BIT(12) /*!< PEC error in reception */\r\n#define I2C_STAT0_SMBTO     BIT(14) /*!< timeout signal in SMBus mode */\r\n#define I2C_STAT0_SMBALT    BIT(15) /*!< SMBus alert status */\r\n\r\n/* I2Cx_STAT1 */\r\n#define I2C_STAT1_MASTER BIT(0)      /*!< master/slave */\r\n#define I2C_STAT1_I2CBSY BIT(1)      /*!< bus busy */\r\n#define I2C_STAT1_TR     BIT(2)      /*!< transmitter/receiver */\r\n#define I2C_STAT1_RXGC   BIT(4)      /*!< general call address (slave mode) */\r\n#define I2C_STAT1_DEFSMB BIT(5)      /*!< SMBus device default address (slave mode) */\r\n#define I2C_STAT1_HSTSMB BIT(6)      /*!< SMBus host header (slave mode) */\r\n#define I2C_STAT1_DUMODF BIT(7)      /*!< dual flag (slave mode) */\r\n#define I2C_STAT1_PECV   BITS(8, 15) /*!< packet error checking value */\r\n\r\n/* I2Cx_CKCFG */\r\n#define I2C_CKCFG_CLKC BITS(0, 11) /*!< clock control register in fast/standard mode (master mode) */\r\n#define I2C_CKCFG_DTCY BIT(14)     /*!< fast mode duty cycle */\r\n#define I2C_CKCFG_FAST BIT(15)     /*!< I2C speed selection in master mode */\r\n\r\n/* I2Cx_RT */\r\n#define I2C_RT_RISETIME BITS(0, 5) /*!< maximum rise time in fast/standard mode (Master mode) */\r\n\r\n/* I2Cx_FMPCFG */\r\n#define I2C_FMPCFG_FMPEN BIT(0) /*!< fast mode plus enable bit */\r\n\r\n/* constants definitions */\r\n/* define the I2C bit position and its register index offset */\r\n#define I2C_REGIDX_BIT(regidx, bitpos)                    (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos))\r\n#define I2C_REG_VAL(i2cx, offset)                         (REG32((i2cx) + (((uint32_t)(offset)&0xFFFFU) >> 6)))\r\n#define I2C_BIT_POS(val)                                  ((uint32_t)(val)&0x1FU)\r\n#define I2C_REGIDX_BIT2(regidx, bitpos, regidx2, bitpos2) (((uint32_t)(regidx2) << 22) | (uint32_t)((bitpos2) << 16) | (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)))\r\n#define I2C_REG_VAL2(i2cx, offset)                        (REG32((i2cx) + ((uint32_t)(offset) >> 22)))\r\n#define I2C_BIT_POS2(val)                                 (((uint32_t)(val)&0x1F0000U) >> 16)\r\n\r\n/* register offset */\r\n#define I2C_CTL1_REG_OFFSET  0x04U /*!< CTL1 register offset */\r\n#define I2C_STAT0_REG_OFFSET 0x14U /*!< STAT0 register offset */\r\n#define I2C_STAT1_REG_OFFSET 0x18U /*!< STAT1 register offset */\r\n\r\n/* I2C flags */\r\ntypedef enum {\r\n  /* flags in STAT0 register */\r\n  I2C_FLAG_SBSEND    = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 0U),  /*!< start condition sent out in master mode */\r\n  I2C_FLAG_ADDSEND   = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 1U),  /*!< address is sent in master mode or received and matches in slave mode */\r\n  I2C_FLAG_BTC       = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 2U),  /*!< byte transmission finishes */\r\n  I2C_FLAG_ADD10SEND = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 3U),  /*!< header of 10-bit address is sent in master mode */\r\n  I2C_FLAG_STPDET    = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 4U),  /*!< stop condition detected in slave mode */\r\n  I2C_FLAG_RBNE      = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 6U),  /*!< I2C_DATA is not Empty during receiving */\r\n  I2C_FLAG_TBE       = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 7U),  /*!< I2C_DATA is empty during transmitting */\r\n  I2C_FLAG_BERR      = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 8U),  /*!< a bus error occurs indication a unexpected start or stop condition on I2C bus */\r\n  I2C_FLAG_LOSTARB   = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 9U),  /*!< arbitration lost in master mode */\r\n  I2C_FLAG_AERR      = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 10U), /*!< acknowledge error */\r\n  I2C_FLAG_OUERR     = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 11U), /*!< over-run or under-run situation occurs in slave mode */\r\n  I2C_FLAG_PECERR    = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 12U), /*!< PEC error when receiving data */\r\n  I2C_FLAG_SMBTO     = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 14U), /*!< timeout signal in SMBus mode */\r\n  I2C_FLAG_SMBALT    = I2C_REGIDX_BIT(I2C_STAT0_REG_OFFSET, 15U), /*!< SMBus alert status */\r\n  /* flags in STAT1 register */\r\n  I2C_FLAG_MASTER = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 0U), /*!< a flag indicating whether I2C block is in master or slave mode */\r\n  I2C_FLAG_I2CBSY = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 1U), /*!< busy flag */\r\n  I2C_FLAG_TR     = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 2U), /*!< whether the I2C is a transmitter or a receiver */\r\n  I2C_FLAG_RXGC   = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 4U), /*!< general call address (00h) received */\r\n  I2C_FLAG_DEFSMB = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 5U), /*!< default address of SMBus device */\r\n  I2C_FLAG_HSTSMB = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 6U), /*!< SMBus host header detected in slave mode */\r\n  I2C_FLAG_DUMODF = I2C_REGIDX_BIT(I2C_STAT1_REG_OFFSET, 7U), /*!< dual flag in slave mode indicating which address is matched in dual-address mode */\r\n} i2c_flag_enum;\r\n\r\n/* I2C interrupt flags */\r\ntypedef enum {\r\n  /* interrupt flags in CTL1 register */\r\n  I2C_INT_FLAG_SBSEND    = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 0U),  /*!< start condition sent out in master mode interrupt flag */\r\n  I2C_INT_FLAG_ADDSEND   = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 1U),  /*!< address is sent in master mode or received and matches in slave mode interrupt flag */\r\n  I2C_INT_FLAG_BTC       = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 2U),  /*!< byte transmission finishes */\r\n  I2C_INT_FLAG_ADD10SEND = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 3U),  /*!< header of 10-bit address is sent in master mode interrupt flag */\r\n  I2C_INT_FLAG_STPDET    = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 4U),  /*!< stop condition detected in slave mode interrupt flag */\r\n  I2C_INT_FLAG_RBNE      = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 6U),  /*!< I2C_DATA is not Empty during receiving interrupt flag */\r\n  I2C_INT_FLAG_TBE       = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 9U, I2C_STAT0_REG_OFFSET, 7U),  /*!< I2C_DATA is empty during transmitting interrupt flag */\r\n  I2C_INT_FLAG_BERR      = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 8U),  /*!< a bus error occurs indication a unexpected start or stop condition on I2C bus interrupt flag */\r\n  I2C_INT_FLAG_LOSTARB   = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 9U),  /*!< arbitration lost in master mode interrupt flag */\r\n  I2C_INT_FLAG_AERR      = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 10U), /*!< acknowledge error interrupt flag */\r\n  I2C_INT_FLAG_OUERR     = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 11U), /*!< over-run or under-run situation occurs in slave mode interrupt flag */\r\n  I2C_INT_FLAG_PECERR    = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 12U), /*!< PEC error when receiving data interrupt flag */\r\n  I2C_INT_FLAG_SMBTO     = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 14U), /*!< timeout signal in SMBus mode interrupt flag */\r\n  I2C_INT_FLAG_SMBALT    = I2C_REGIDX_BIT2(I2C_CTL1_REG_OFFSET, 8U, I2C_STAT0_REG_OFFSET, 15U), /*!< SMBus Alert status interrupt flag */\r\n} i2c_interrupt_flag_enum;\r\n\r\n/* I2C interrupt enable or disable */\r\ntypedef enum {\r\n  /* interrupt in CTL1 register */\r\n  I2C_INT_ERR = I2C_REGIDX_BIT(I2C_CTL1_REG_OFFSET, 8U),  /*!< error interrupt enable */\r\n  I2C_INT_EV  = I2C_REGIDX_BIT(I2C_CTL1_REG_OFFSET, 9U),  /*!< event interrupt enable */\r\n  I2C_INT_BUF = I2C_REGIDX_BIT(I2C_CTL1_REG_OFFSET, 10U), /*!< buffer interrupt enable */\r\n} i2c_interrupt_enum;\r\n\r\n/* SMBus/I2C mode switch and SMBus type selection */\r\n#define I2C_I2CMODE_ENABLE   ((uint32_t)0x00000000U) /*!< I2C mode */\r\n#define I2C_SMBUSMODE_ENABLE I2C_CTL0_SMBEN          /*!< SMBus mode */\r\n\r\n/* SMBus/I2C mode switch and SMBus type selection */\r\n#define I2C_SMBUS_DEVICE ((uint32_t)0x00000000U) /*!< SMBus mode device type */\r\n#define I2C_SMBUS_HOST   I2C_CTL0_SMBSEL         /*!< SMBus mode host type */\r\n\r\n/* I2C transfer direction */\r\n#define I2C_RECEIVER    ((uint32_t)0x00000001U) /*!< receiver */\r\n#define I2C_TRANSMITTER ((uint32_t)0xFFFFFFFEU) /*!< transmitter */\r\n\r\n/* whether or not to send an ACK */\r\n#define I2C_ACK_DISABLE ((uint32_t)0x00000000U) /*!< ACK will be not sent */\r\n#define I2C_ACK_ENABLE  ((uint32_t)0x00000001U) /*!< ACK will be sent */\r\n\r\n/* I2C POAP position*/\r\n#define I2C_ACKPOS_NEXT    ((uint32_t)0x00000000U) /*!< ACKEN bit decides whether or not to send ACK for the next byte */\r\n#define I2C_ACKPOS_CURRENT ((uint32_t)0x00000001U) /*!< ACKEN bit decides whether or not to send ACK or not for the current byte */\r\n\r\n/* I2C dual-address mode switch */\r\n#define I2C_DUADEN_DISABLE ((uint32_t)0x00000000U) /*!< dual-address mode disabled */\r\n#define I2C_DUADEN_ENABLE  ((uint32_t)0x00000001U) /*!< dual-address mode enabled */\r\n\r\n/* whether or not to stretch SCL low */\r\n#define I2C_SCLSTRETCH_ENABLE  ((uint32_t)0x00000000U) /*!< SCL stretching is enabled */\r\n#define I2C_SCLSTRETCH_DISABLE I2C_CTL0_SS             /*!< SCL stretching is disabled */\r\n\r\n/* whether or not to response to a general call */\r\n#define I2C_GCEN_ENABLE  I2C_CTL0_GCEN           /*!< slave will response to a general call */\r\n#define I2C_GCEN_DISABLE ((uint32_t)0x00000000U) /*!< slave will not response to a general call */\r\n\r\n/* software reset I2C */\r\n#define I2C_SRESET_SET   I2C_CTL0_SRESET         /*!< I2C is under reset */\r\n#define I2C_SRESET_RESET ((uint32_t)0x00000000U) /*!< I2C is not under reset */\r\n\r\n/* I2C DMA mode configure */\r\n/* DMA mode switch */\r\n#define I2C_DMA_ON  I2C_CTL1_DMAON          /*!< DMA mode enabled */\r\n#define I2C_DMA_OFF ((uint32_t)0x00000000U) /*!< DMA mode disabled */\r\n\r\n/* flag indicating DMA last transfer */\r\n#define I2C_DMALST_ON  I2C_CTL1_DMALST         /*!< next DMA EOT is the last transfer */\r\n#define I2C_DMALST_OFF ((uint32_t)0x00000000U) /*!< next DMA EOT is not the last transfer */\r\n\r\n/* I2C PEC configure */\r\n/* PEC enable */\r\n#define I2C_PEC_ENABLE  I2C_CTL0_PECEN          /*!< PEC calculation on */\r\n#define I2C_PEC_DISABLE ((uint32_t)0x00000000U) /*!< PEC calculation off */\r\n\r\n/* PEC transfer */\r\n#define I2C_PECTRANS_ENABLE  I2C_CTL0_PECTRANS       /*!< transfer PEC */\r\n#define I2C_PECTRANS_DISABLE ((uint32_t)0x00000000U) /*!< not transfer PEC value */\r\n\r\n/* I2C SMBus configure */\r\n/* issue or not alert through SMBA pin */\r\n#define I2C_SALTSEND_ENABLE  I2C_CTL0_SALT           /*!< issue alert through SMBA pin */\r\n#define I2C_SALTSEND_DISABLE ((uint32_t)0x00000000U) /*!< not issue alert through SMBA */\r\n\r\n/* ARP protocol in SMBus switch */\r\n#define I2C_ARP_ENABLE  I2C_CTL0_ARPEN          /*!< ARP enable */\r\n#define I2C_ARP_DISABLE ((uint32_t)0x00000000U) /*!< ARP disable */\r\n\r\n/* transmit I2C data */\r\n#define DATA_TRANS(regval) (BITS(0, 7) & ((uint32_t)(regval) << 0))\r\n\r\n/* receive I2C data */\r\n#define DATA_RECV(regval) GET_BITS((uint32_t)(regval), 0, 7)\r\n\r\n/* I2C duty cycle in fast mode */\r\n#define I2C_DTCY_2    ((uint32_t)0x00000000U) /*!< I2C fast mode Tlow/Thigh = 2 */\r\n#define I2C_DTCY_16_9 I2C_CKCFG_DTCY          /*!< I2C fast mode Tlow/Thigh = 16/9 */\r\n\r\n/* address mode for the I2C slave */\r\n#define I2C_ADDFORMAT_7BITS  ((uint32_t)0x00000000U) /*!< address:7 bits */\r\n#define I2C_ADDFORMAT_10BITS I2C_SADDR0_ADDFORMAT    /*!< address:10 bits */\r\n\r\n/* function declarations */\r\n/* reset I2C */\r\nvoid i2c_deinit(uint32_t i2c_periph);\r\n/* configure I2C clock */\r\nvoid i2c_clock_config(uint32_t i2c_periph, uint32_t clkspeed, uint32_t dutycyc);\r\n/* configure I2C address */\r\nvoid i2c_mode_addr_config(uint32_t i2c_periph, uint32_t mode, uint32_t addformat, uint32_t addr);\r\n/* SMBus type selection */\r\nvoid i2c_smbus_type_config(uint32_t i2c_periph, uint32_t type);\r\n/* whether or not to send an ACK */\r\nvoid i2c_ack_config(uint32_t i2c_periph, uint32_t ack);\r\n/* configure I2C POAP position */\r\nvoid i2c_ackpos_config(uint32_t i2c_periph, uint32_t pos);\r\n/* master sends slave address */\r\nvoid i2c_master_addressing(uint32_t i2c_periph, uint32_t addr, uint32_t trandirection);\r\n/* enable dual-address mode */\r\nvoid i2c_dualaddr_enable(uint32_t i2c_periph, uint32_t dualaddr);\r\n/* disable dual-address mode */\r\nvoid i2c_dualaddr_disable(uint32_t i2c_periph);\r\n/* enable I2C */\r\nvoid i2c_enable(uint32_t i2c_periph);\r\n/* disable I2C */\r\nvoid i2c_disable(uint32_t i2c_periph);\r\n\r\n/* generate a START condition on I2C bus */\r\nvoid i2c_start_on_bus(uint32_t i2c_periph);\r\n/* generate a STOP condition on I2C bus */\r\nvoid i2c_stop_on_bus(uint32_t i2c_periph);\r\n/* I2C transmit data function */\r\nvoid i2c_data_transmit(uint32_t i2c_periph, uint8_t data);\r\n/* I2C receive data function */\r\nuint8_t i2c_data_receive(uint32_t i2c_periph);\r\n/* enable I2C DMA mode */\r\nvoid i2c_dma_enable(uint32_t i2c_periph, uint32_t dmastate);\r\n/* configure whether next DMA EOT is DMA last transfer or not */\r\nvoid i2c_dma_last_transfer_config(uint32_t i2c_periph, uint32_t dmalast);\r\n/* whether to stretch SCL low when data is not ready in slave mode */\r\nvoid i2c_stretch_scl_low_config(uint32_t i2c_periph, uint32_t stretchpara);\r\n/* whether or not to response to a general call */\r\nvoid i2c_slave_response_to_gcall_config(uint32_t i2c_periph, uint32_t gcallpara);\r\n/* software reset I2C */\r\nvoid i2c_software_reset_config(uint32_t i2c_periph, uint32_t sreset);\r\n\r\n/* I2C PEC calculation on or off */\r\nvoid i2c_pec_enable(uint32_t i2c_periph, uint32_t pecstate);\r\n/* I2C whether to transfer PEC value */\r\nvoid i2c_pec_transfer_enable(uint32_t i2c_periph, uint32_t pecpara);\r\n/* packet error checking value */\r\nuint8_t i2c_pec_value_get(uint32_t i2c_periph);\r\n/* I2C issue alert through SMBA pin */\r\nvoid i2c_smbus_issue_alert(uint32_t i2c_periph, uint32_t smbuspara);\r\n/* I2C ARP protocol in SMBus switch */\r\nvoid i2c_smbus_arp_enable(uint32_t i2c_periph, uint32_t arpstate);\r\n\r\n/* check I2C flag is set or not */\r\nFlagStatus i2c_flag_get(uint32_t i2c_periph, i2c_flag_enum flag);\r\n/* clear I2C flag */\r\nvoid i2c_flag_clear(uint32_t i2c_periph, i2c_flag_enum flag);\r\n/* enable I2C interrupt */\r\nvoid i2c_interrupt_enable(uint32_t i2c_periph, i2c_interrupt_enum interrupt);\r\n/* disable I2C interrupt */\r\nvoid i2c_interrupt_disable(uint32_t i2c_periph, i2c_interrupt_enum interrupt);\r\n/* check I2C interrupt flag */\r\nFlagStatus i2c_interrupt_flag_get(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag);\r\n/* clear I2C interrupt flag */\r\nvoid i2c_interrupt_flag_clear(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag);\r\n\r\n#endif /* GD32VF103_I2C_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_libopt.h",
    "content": "/*!\r\n    \\file  gd32vf103_libopt.h\r\n    \\brief library optional for gd32vf103\r\n\r\n    \\version 2019-6-5, V1.0.0, demo for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_LIBOPT_H\r\n#define GD32VF103_LIBOPT_H\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n#include \"gd32vf103.h\"\r\n#include \"gd32vf103_adc.h\"\r\n#include \"gd32vf103_bkp.h\"\r\n#include \"gd32vf103_crc.h\"\r\n#include \"gd32vf103_dac.h\"\r\n#include \"gd32vf103_dbg.h\"\r\n#include \"gd32vf103_dma.h\"\r\n#include \"gd32vf103_eclic.h\"\r\n#include \"gd32vf103_exmc.h\"\r\n#include \"gd32vf103_exti.h\"\r\n#include \"gd32vf103_fmc.h\"\r\n#include \"gd32vf103_fwdgt.h\"\r\n#include \"gd32vf103_gpio.h\"\r\n#include \"gd32vf103_i2c.h\"\r\n#include \"gd32vf103_pmu.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n#include \"gd32vf103_rtc.h\"\r\n#include \"gd32vf103_spi.h\"\r\n#include \"gd32vf103_timer.h\"\r\n#include \"gd32vf103_usart.h\"\r\n#include \"gd32vf103_wwdgt.h\"\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* GD32VF103_LIBOPT_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_pmu.h",
    "content": "/*!\r\n    \\file    gd32vf103_pmu.h\r\n    \\brief   definitions for the PMU\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_PMU_H\r\n#define GD32VF103_PMU_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* PMU definitions */\r\n#define PMU PMU_BASE /*!< PMU base address */\r\n\r\n/* registers definitions */\r\n#define PMU_CTL REG32((PMU) + 0x00U) /*!< PMU control register */\r\n#define PMU_CS  REG32((PMU) + 0x04U) /*!< PMU control and status register */\r\n\r\n/* bits definitions */\r\n/* PMU_CTL */\r\n#define PMU_CTL_LDOLP  BIT(0)     /*!< LDO low power mode */\r\n#define PMU_CTL_STBMOD BIT(1)     /*!< standby mode */\r\n#define PMU_CTL_WURST  BIT(2)     /*!< wakeup flag reset */\r\n#define PMU_CTL_STBRST BIT(3)     /*!< standby flag reset */\r\n#define PMU_CTL_LVDEN  BIT(4)     /*!< low voltage detector enable */\r\n#define PMU_CTL_LVDT   BITS(5, 7) /*!< low voltage detector threshold */\r\n#define PMU_CTL_BKPWEN BIT(8)     /*!< backup domain write enable */\r\n\r\n/* PMU_CS */\r\n#define PMU_CS_WUF   BIT(0) /*!< wakeup flag */\r\n#define PMU_CS_STBF  BIT(1) /*!< standby flag */\r\n#define PMU_CS_LVDF  BIT(2) /*!< low voltage detector status flag */\r\n#define PMU_CS_WUPEN BIT(8) /*!< wakeup pin enable */\r\n\r\n/* constants definitions */\r\n/* PMU low voltage detector threshold definitions */\r\n#define CTL_LVDT(regval) (BITS(5, 7) & ((uint32_t)(regval) << 5))\r\n#define PMU_LVDT_0       CTL_LVDT(0) /*!< voltage threshold is 2.2V */\r\n#define PMU_LVDT_1       CTL_LVDT(1) /*!< voltage threshold is 2.3V */\r\n#define PMU_LVDT_2       CTL_LVDT(2) /*!< voltage threshold is 2.4V */\r\n#define PMU_LVDT_3       CTL_LVDT(3) /*!< voltage threshold is 2.5V */\r\n#define PMU_LVDT_4       CTL_LVDT(4) /*!< voltage threshold is 2.6V */\r\n#define PMU_LVDT_5       CTL_LVDT(5) /*!< voltage threshold is 2.7V */\r\n#define PMU_LVDT_6       CTL_LVDT(6) /*!< voltage threshold is 2.8V */\r\n#define PMU_LVDT_7       CTL_LVDT(7) /*!< voltage threshold is 2.9V */\r\n\r\n/* PMU flag definitions */\r\n#define PMU_FLAG_WAKEUP  PMU_CS_WUF  /*!< wakeup flag status */\r\n#define PMU_FLAG_STANDBY PMU_CS_STBF /*!< standby flag status */\r\n#define PMU_FLAG_LVD     PMU_CS_LVDF /*!< lvd flag status */\r\n\r\n/* PMU ldo definitions */\r\n#define PMU_LDO_NORMAL   ((uint32_t)0x00000000U) /*!< LDO normal work when PMU enter deepsleep mode */\r\n#define PMU_LDO_LOWPOWER PMU_CTL_LDOLP           /*!< LDO work at low power status when PMU enter deepsleep mode */\r\n\r\n/* PMU flag reset definitions */\r\n#define PMU_FLAG_RESET_WAKEUP  ((uint8_t)0x00U) /*!< wakeup flag reset */\r\n#define PMU_FLAG_RESET_STANDBY ((uint8_t)0x01U) /*!< standby flag reset */\r\n\r\n/* PMU command constants definitions */\r\n#define WFI_CMD ((uint8_t)0x00U) /*!< use WFI command */\r\n#define WFE_CMD ((uint8_t)0x01U) /*!< use WFE command */\r\n\r\n/* function declarations */\r\n/* reset PMU registers */\r\nvoid pmu_deinit(void);\r\n\r\n/* select low voltage detector threshold */\r\nvoid pmu_lvd_select(uint32_t lvdt_n);\r\n/* disable PMU lvd */\r\nvoid pmu_lvd_disable(void);\r\n\r\n/* set PMU mode */\r\n/* PMU work at sleep mode */\r\nvoid pmu_to_sleepmode(uint8_t sleepmodecmd);\r\n/* PMU work at deepsleep mode */\r\nvoid pmu_to_deepsleepmode(uint32_t ldo, uint8_t deepsleepmodecmd);\r\n/* PMU work at standby mode */\r\nvoid pmu_to_standbymode(uint8_t standbymodecmd);\r\n/* enable PMU wakeup pin */\r\nvoid pmu_wakeup_pin_enable(void);\r\n/* disable PMU wakeup pin */\r\nvoid pmu_wakeup_pin_disable(void);\r\n\r\n/* backup related functions */\r\n/* enable write access to the registers in backup domain */\r\nvoid pmu_backup_write_enable(void);\r\n/* disable write access to the registers in backup domain */\r\nvoid pmu_backup_write_disable(void);\r\n\r\n/* flag functions */\r\n/* get flag state */\r\nFlagStatus pmu_flag_get(uint32_t flag);\r\n/* clear flag bit */\r\nvoid pmu_flag_clear(uint32_t flag_reset);\r\n\r\n#endif /* GD32VF103_PMU_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_rcu.h",
    "content": "/*!\r\n    \\file    gd32vf103_rcu.h\r\n    \\brief   definitions for the RCU\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_RCU_H\r\n#define GD32VF103_RCU_H\r\n\r\n#include \"gd32vf103.h\"\r\n/* define clock source */\r\n#define SEL_IRC8M ((uint16_t)0U)\r\n#define SEL_HXTAL ((uint16_t)1U)\r\n#define SEL_PLL   ((uint16_t)2U)\r\n/* RCU definitions */\r\n#define RCU RCU_BASE\r\n\r\n/* registers definitions */\r\n\r\n#define RCU_CTL     REG32(RCU + 0x00U) /*!< control register */\r\n#define RCU_CFG0    REG32(RCU + 0x04U) /*!< clock configuration register 0 */\r\n#define RCU_INT     REG32(RCU + 0x08U) /*!< clock interrupt register */\r\n#define RCU_APB2RST REG32(RCU + 0x0CU) /*!< APB2 reset register */\r\n#define RCU_APB1RST REG32(RCU + 0x10U) /*!< APB1 reset register */\r\n#define RCU_AHBEN   REG32(RCU + 0x14U) /*!< AHB1 enable register */\r\n#define RCU_APB2EN  REG32(RCU + 0x18U) /*!< APB2 enable register */\r\n#define RCU_APB1EN  REG32(RCU + 0x1CU) /*!< APB1 enable register */\r\n#define RCU_BDCTL   REG32(RCU + 0x20U) /*!< backup domain control register */\r\n#define RCU_RSTSCK  REG32(RCU + 0x24U) /*!< reset source / clock register */\r\n#define RCU_AHBRST  REG32(RCU + 0x28U) /*!< AHB reset register */\r\n#define RCU_CFG1    REG32(RCU + 0x2CU) /*!< clock configuration register 1 */\r\n#define RCU_DSV     REG32(RCU + 0x34U) /*!< deep-sleep mode voltage register */\r\n\r\n/* bits definitions */\r\n/* RCU_CTL */\r\n#define RCU_CTL_IRC8MEN    BIT(0)      /*!< internal high speed oscillator enable */\r\n#define RCU_CTL_IRC8MSTB   BIT(1)      /*!< IRC8M high speed internal oscillator stabilization flag */\r\n#define RCU_CTL_IRC8MADJ   BITS(3, 7)  /*!< high speed internal oscillator clock trim adjust value */\r\n#define RCU_CTL_IRC8MCALIB BITS(8, 15) /*!< high speed internal oscillator calibration value register */\r\n#define RCU_CTL_HXTALEN    BIT(16)     /*!< external high speed oscillator enable */\r\n#define RCU_CTL_HXTALSTB   BIT(17)     /*!< external crystal oscillator clock stabilization flag */\r\n#define RCU_CTL_HXTALBPS   BIT(18)     /*!< external crystal oscillator clock bypass mode enable */\r\n#define RCU_CTL_CKMEN      BIT(19)     /*!< HXTAL clock monitor enable */\r\n#define RCU_CTL_PLLEN      BIT(24)     /*!< PLL enable */\r\n#define RCU_CTL_PLLSTB     BIT(25)     /*!< PLL clock stabilization flag */\r\n#define RCU_CTL_PLL1EN     BIT(26)     /*!< PLL1 enable */\r\n#define RCU_CTL_PLL1STB    BIT(27)     /*!< PLL1 clock stabilization flag */\r\n#define RCU_CTL_PLL2EN     BIT(28)     /*!< PLL2 enable */\r\n#define RCU_CTL_PLL2STB    BIT(29)     /*!< PLL2 clock stabilization flag */\r\n\r\n#define RCU_CFG0_SCS        BITS(0, 1)   /*!< system clock switch */\r\n#define RCU_CFG0_SCSS       BITS(2, 3)   /*!< system clock switch status */\r\n#define RCU_CFG0_AHBPSC     BITS(4, 7)   /*!< AHB prescaler selection */\r\n#define RCU_CFG0_APB1PSC    BITS(8, 10)  /*!< APB1 prescaler selection */\r\n#define RCU_CFG0_APB2PSC    BITS(11, 13) /*!< APB2 prescaler selection */\r\n#define RCU_CFG0_ADCPSC     BITS(14, 15) /*!< ADC prescaler selection */\r\n#define RCU_CFG0_PLLSEL     BIT(16)      /*!< PLL clock source selection */\r\n#define RCU_CFG0_PREDV0_LSB BIT(17)      /*!< the LSB of PREDV0 division factor */\r\n#define RCU_CFG0_PLLMF      BITS(18, 21) /*!< PLL clock multiplication factor */\r\n#define RCU_CFG0_USBFSPSC   BITS(22, 23) /*!< USBFS clock prescaler selection */\r\n#define RCU_CFG0_CKOUT0SEL  BITS(24, 27) /*!< CKOUT0 clock source selection */\r\n#define RCU_CFG0_ADCPSC_2   BIT(28)      /*!< bit 2 of ADCPSC */\r\n#define RCU_CFG0_PLLMF_4    BIT(29)      /*!< bit 4 of PLLMF */\r\n\r\n/* RCU_INT */\r\n#define RCU_INT_IRC40KSTBIF BIT(0)  /*!< IRC40K stabilization interrupt flag */\r\n#define RCU_INT_LXTALSTBIF  BIT(1)  /*!< LXTAL stabilization interrupt flag */\r\n#define RCU_INT_IRC8MSTBIF  BIT(2)  /*!< IRC8M stabilization interrupt flag */\r\n#define RCU_INT_HXTALSTBIF  BIT(3)  /*!< HXTAL stabilization interrupt flag */\r\n#define RCU_INT_PLLSTBIF    BIT(4)  /*!< PLL stabilization interrupt flag */\r\n#define RCU_INT_PLL1STBIF   BIT(5)  /*!< PLL1 stabilization interrupt flag */\r\n#define RCU_INT_PLL2STBIF   BIT(6)  /*!< PLL2 stabilization interrupt flag */\r\n#define RCU_INT_CKMIF       BIT(7)  /*!< HXTAL clock stuck interrupt flag */\r\n#define RCU_INT_IRC40KSTBIE BIT(8)  /*!< IRC40K stabilization interrupt enable */\r\n#define RCU_INT_LXTALSTBIE  BIT(9)  /*!< LXTAL stabilization interrupt enable */\r\n#define RCU_INT_IRC8MSTBIE  BIT(10) /*!< IRC8M stabilization interrupt enable */\r\n#define RCU_INT_HXTALSTBIE  BIT(11) /*!< HXTAL stabilization interrupt enable */\r\n#define RCU_INT_PLLSTBIE    BIT(12) /*!< PLL stabilization interrupt enable */\r\n#define RCU_INT_PLL1STBIE   BIT(13) /*!< PLL1 stabilization interrupt enable */\r\n#define RCU_INT_PLL2STBIE   BIT(14) /*!< PLL2 stabilization interrupt enable */\r\n#define RCU_INT_IRC40KSTBIC BIT(16) /*!< IRC40K stabilization interrupt clear */\r\n#define RCU_INT_LXTALSTBIC  BIT(17) /*!< LXTAL stabilization interrupt clear */\r\n#define RCU_INT_IRC8MSTBIC  BIT(18) /*!< IRC8M stabilization interrupt clear */\r\n#define RCU_INT_HXTALSTBIC  BIT(19) /*!< HXTAL stabilization interrupt clear */\r\n#define RCU_INT_PLLSTBIC    BIT(20) /*!< PLL stabilization interrupt clear */\r\n#define RCU_INT_PLL1STBIC   BIT(21) /*!< PLL1 stabilization interrupt clear */\r\n#define RCU_INT_PLL2STBIC   BIT(22) /*!< PLL2 stabilization interrupt clear */\r\n#define RCU_INT_CKMIC       BIT(23) /*!< HXTAL clock stuck interrupt clear */\r\n\r\n/* RCU_APB2RST */\r\n#define RCU_APB2RST_AFRST     BIT(0)  /*!< alternate function I/O reset */\r\n#define RCU_APB2RST_PARST     BIT(2)  /*!< GPIO port A reset */\r\n#define RCU_APB2RST_PBRST     BIT(3)  /*!< GPIO port B reset */\r\n#define RCU_APB2RST_PCRST     BIT(4)  /*!< GPIO port C reset */\r\n#define RCU_APB2RST_PDRST     BIT(5)  /*!< GPIO port D reset */\r\n#define RCU_APB2RST_PERST     BIT(6)  /*!< GPIO port E reset */\r\n#define RCU_APB2RST_ADC0RST   BIT(9)  /*!< ADC0 reset */\r\n#define RCU_APB2RST_ADC1RST   BIT(10) /*!< ADC1 reset */\r\n#define RCU_APB2RST_TIMER0RST BIT(11) /*!< TIMER0 reset */\r\n#define RCU_APB2RST_SPI0RST   BIT(12) /*!< SPI0 reset */\r\n#define RCU_APB2RST_USART0RST BIT(14) /*!< USART0 reset */\r\n\r\n/* RCU_APB1RST */\r\n#define RCU_APB1RST_TIMER1RST BIT(0) /*!< TIMER1 reset */\r\n#define RCU_APB1RST_TIMER2RST BIT(1) /*!< TIMER2 reset */\r\n#define RCU_APB1RST_TIMER3RST BIT(2) /*!< TIMER3 reset */\r\n#define RCU_APB1RST_TIMER4RST BIT(3) /*!< TIMER4 reset */\r\n#define RCU_APB1RST_TIMER5RST BIT(4) /*!< TIMER5 reset */\r\n#define RCU_APB1RST_TIMER6RST BIT(5) /*!< TIMER6 reset */\r\n\r\n#define RCU_APB1RST_WWDGTRST  BIT(11) /*!< WWDGT reset */\r\n#define RCU_APB1RST_SPI1RST   BIT(14) /*!< SPI1 reset */\r\n#define RCU_APB1RST_SPI2RST   BIT(15) /*!< SPI2 reset */\r\n#define RCU_APB1RST_USART1RST BIT(17) /*!< USART1 reset */\r\n#define RCU_APB1RST_USART2RST BIT(18) /*!< USART2 reset */\r\n#define RCU_APB1RST_UART3RST  BIT(19) /*!< UART3 reset */\r\n#define RCU_APB1RST_UART4RST  BIT(20) /*!< UART4 reset */\r\n#define RCU_APB1RST_I2C0RST   BIT(21) /*!< I2C0 reset */\r\n#define RCU_APB1RST_I2C1RST   BIT(22) /*!< I2C1 reset */\r\n#define RCU_APB1RST_CAN0RST   BIT(25) /*!< CAN0 reset */\r\n#define RCU_APB1RST_CAN1RST   BIT(26) /*!< CAN1 reset */\r\n#define RCU_APB1RST_BKPIRST   BIT(27) /*!< backup interface reset */\r\n#define RCU_APB1RST_PMURST    BIT(28) /*!< PMU reset */\r\n#define RCU_APB1RST_DACRST    BIT(29) /*!< DAC reset */\r\n\r\n/* RCU_AHBEN */\r\n#define RCU_AHBEN_DMA0EN   BIT(0)  /*!< DMA0 clock enable */\r\n#define RCU_AHBEN_DMA1EN   BIT(1)  /*!< DMA1 clock enable */\r\n#define RCU_AHBEN_SRAMSPEN BIT(2)  /*!< SRAM clock enable when sleep mode */\r\n#define RCU_AHBEN_FMCSPEN  BIT(4)  /*!< FMC clock enable when sleep mode */\r\n#define RCU_AHBEN_CRCEN    BIT(6)  /*!< CRC clock enable */\r\n#define RCU_AHBEN_EXMCEN   BIT(8)  /*!< EXMC clock enable */\r\n#define RCU_AHBEN_USBFSEN  BIT(12) /*!< USBFS clock enable */\r\n\r\n/* RCU_APB2EN */\r\n#define RCU_APB2EN_AFEN     BIT(0)  /*!< alternate function IO clock enable */\r\n#define RCU_APB2EN_PAEN     BIT(2)  /*!< GPIO port A clock enable */\r\n#define RCU_APB2EN_PBEN     BIT(3)  /*!< GPIO port B clock enable */\r\n#define RCU_APB2EN_PCEN     BIT(4)  /*!< GPIO port C clock enable */\r\n#define RCU_APB2EN_PDEN     BIT(5)  /*!< GPIO port D clock enable */\r\n#define RCU_APB2EN_PEEN     BIT(6)  /*!< GPIO port E clock enable */\r\n#define RCU_APB2EN_ADC0EN   BIT(9)  /*!< ADC0 clock enable */\r\n#define RCU_APB2EN_ADC1EN   BIT(10) /*!< ADC1 clock enable */\r\n#define RCU_APB2EN_TIMER0EN BIT(11) /*!< TIMER0 clock enable */\r\n#define RCU_APB2EN_SPI0EN   BIT(12) /*!< SPI0 clock enable */\r\n#define RCU_APB2EN_USART0EN BIT(14) /*!< USART0 clock enable */\r\n\r\n/* RCU_APB1EN */\r\n#define RCU_APB1EN_TIMER1EN BIT(0)  /*!< TIMER1 clock enable */\r\n#define RCU_APB1EN_TIMER2EN BIT(1)  /*!< TIMER2 clock enable */\r\n#define RCU_APB1EN_TIMER3EN BIT(2)  /*!< TIMER3 clock enable */\r\n#define RCU_APB1EN_TIMER4EN BIT(3)  /*!< TIMER4 clock enable */\r\n#define RCU_APB1EN_TIMER5EN BIT(4)  /*!< TIMER5 clock enable */\r\n#define RCU_APB1EN_TIMER6EN BIT(5)  /*!< TIMER6 clock enable */\r\n#define RCU_APB1EN_WWDGTEN  BIT(11) /*!< WWDGT clock enable */\r\n#define RCU_APB1EN_SPI1EN   BIT(14) /*!< SPI1 clock enable */\r\n#define RCU_APB1EN_SPI2EN   BIT(15) /*!< SPI2 clock enable */\r\n#define RCU_APB1EN_USART1EN BIT(17) /*!< USART1 clock enable */\r\n#define RCU_APB1EN_USART2EN BIT(18) /*!< USART2 clock enable */\r\n#define RCU_APB1EN_UART3EN  BIT(19) /*!< UART3 clock enable */\r\n#define RCU_APB1EN_UART4EN  BIT(20) /*!< UART4 clock enable */\r\n#define RCU_APB1EN_I2C0EN   BIT(21) /*!< I2C0 clock enable */\r\n#define RCU_APB1EN_I2C1EN   BIT(22) /*!< I2C1 clock enable */\r\n#define RCU_APB1EN_CAN0EN   BIT(25) /*!< CAN0 clock enable */\r\n#define RCU_APB1EN_CAN1EN   BIT(26) /*!< CAN1 clock enable */\r\n#define RCU_APB1EN_BKPIEN   BIT(27) /*!< backup interface clock enable */\r\n#define RCU_APB1EN_PMUEN    BIT(28) /*!< PMU clock enable */\r\n#define RCU_APB1EN_DACEN    BIT(29) /*!< DAC clock enable */\r\n\r\n/* RCU_BDCTL */\r\n#define RCU_BDCTL_LXTALEN  BIT(0)     /*!< LXTAL enable */\r\n#define RCU_BDCTL_LXTALSTB BIT(1)     /*!< low speed crystal oscillator stabilization flag */\r\n#define RCU_BDCTL_LXTALBPS BIT(2)     /*!< LXTAL bypass mode enable */\r\n#define RCU_BDCTL_RTCSRC   BITS(8, 9) /*!< RTC clock entry selection */\r\n#define RCU_BDCTL_RTCEN    BIT(15)    /*!< RTC clock enable */\r\n#define RCU_BDCTL_BKPRST   BIT(16)    /*!< backup domain reset */\r\n\r\n/* RCU_RSTSCK */\r\n#define RCU_RSTSCK_IRC40KEN  BIT(0)  /*!< IRC40K enable */\r\n#define RCU_RSTSCK_IRC40KSTB BIT(1)  /*!< IRC40K stabilization flag */\r\n#define RCU_RSTSCK_RSTFC     BIT(24) /*!< reset flag clear */\r\n#define RCU_RSTSCK_EPRSTF    BIT(26) /*!< external pin reset flag */\r\n#define RCU_RSTSCK_PORRSTF   BIT(27) /*!< power reset flag */\r\n#define RCU_RSTSCK_SWRSTF    BIT(28) /*!< software reset flag */\r\n#define RCU_RSTSCK_FWDGTRSTF BIT(29) /*!< free watchdog timer reset flag */\r\n#define RCU_RSTSCK_WWDGTRSTF BIT(30) /*!< window watchdog timer reset flag */\r\n#define RCU_RSTSCK_LPRSTF    BIT(31) /*!< low-power reset flag */\r\n\r\n/* RCU_AHBRST */\r\n#define RCU_AHBRST_USBFSRST BIT(12) /*!< USBFS reset */\r\n\r\n/* RCU_CFG1 */\r\n#define RCU_CFG1_PREDV0    BITS(0, 3)   /*!< PREDV0 division factor */\r\n#define RCU_CFG1_PREDV1    BITS(4, 7)   /*!< PREDV1 division factor */\r\n#define RCU_CFG1_PLL1MF    BITS(8, 11)  /*!< PLL1 clock multiplication factor */\r\n#define RCU_CFG1_PLL2MF    BITS(12, 15) /*!< PLL2 clock multiplication factor */\r\n#define RCU_CFG1_PREDV0SEL BIT(16)      /*!< PREDV0 input clock source selection */\r\n#define RCU_CFG1_I2S1SEL   BIT(17)      /*!< I2S1 clock source selection */\r\n#define RCU_CFG1_I2S2SEL   BIT(18)      /*!< I2S2 clock source selection  */\r\n\r\n/* RCU_DSV */\r\n#define RCU_DSV_DSLPVS BITS(0, 1) /*!< deep-sleep mode voltage select */\r\n\r\n/* constants definitions */\r\n/* define the peripheral clock enable bit position and its register index offset */\r\n#define RCU_REGIDX_BIT(regidx, bitpos) (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos))\r\n#define RCU_REG_VAL(periph)            (REG32(RCU + ((uint32_t)(periph) >> 6)))\r\n#define RCU_BIT_POS(val)               ((uint32_t)(val)&0x1FU)\r\n\r\n/* register offset */\r\n/* peripherals enable */\r\n#define AHBEN_REG_OFFSET  0x14U /*!< AHB enable register offset */\r\n#define APB1EN_REG_OFFSET 0x1CU /*!< APB1 enable register offset */\r\n#define APB2EN_REG_OFFSET 0x18U /*!< APB2 enable register offset */\r\n\r\n/* peripherals reset */\r\n#define AHBRST_REG_OFFSET  0x28U /*!< AHB reset register offset */\r\n#define APB1RST_REG_OFFSET 0x10U /*!< APB1 reset register offset */\r\n#define APB2RST_REG_OFFSET 0x0CU /*!< APB2 reset register offset */\r\n#define RSTSCK_REG_OFFSET  0x24U /*!< reset source/clock register offset */\r\n\r\n/* clock control */\r\n#define CTL_REG_OFFSET   0x00U /*!< control register offset */\r\n#define BDCTL_REG_OFFSET 0x20U /*!< backup domain control register offset */\r\n\r\n/* clock stabilization and stuck interrupt */\r\n#define INT_REG_OFFSET 0x08U /*!< clock interrupt register offset */\r\n\r\n/* configuration register */\r\n#define CFG0_REG_OFFSET 0x04U /*!< clock configuration register 0 offset */\r\n#define CFG1_REG_OFFSET 0x2CU /*!< clock configuration register 1 offset */\r\n\r\n/* peripheral clock enable */\r\ntypedef enum {\r\n  /* AHB peripherals */\r\n  RCU_DMA0  = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 0U),  /*!< DMA0 clock */\r\n  RCU_DMA1  = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 1U),  /*!< DMA1 clock */\r\n  RCU_CRC   = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 6U),  /*!< CRC clock */\r\n  RCU_EXMC  = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 8U),  /*!< EXMC clock */\r\n  RCU_USBFS = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 12U), /*!< USBFS clock */\r\n  /* APB1 peripherals */\r\n  RCU_TIMER1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 0U),  /*!< TIMER1 clock */\r\n  RCU_TIMER2 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 1U),  /*!< TIMER2 clock */\r\n  RCU_TIMER3 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 2U),  /*!< TIMER3 clock */\r\n  RCU_TIMER4 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 3U),  /*!< TIMER4 clock */\r\n  RCU_TIMER5 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 4U),  /*!< TIMER5 clock */\r\n  RCU_TIMER6 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 5U),  /*!< TIMER6 clock */\r\n  RCU_WWDGT  = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 11U), /*!< WWDGT clock */\r\n  RCU_SPI1   = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 14U), /*!< SPI1 clock */\r\n  RCU_SPI2   = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 15U), /*!< SPI2 clock */\r\n  RCU_USART1 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 17U), /*!< USART1 clock */\r\n  RCU_USART2 = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 18U), /*!< USART2 clock */\r\n  RCU_UART3  = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 19U), /*!< UART3 clock */\r\n  RCU_UART4  = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 20U), /*!< UART4 clock */\r\n  RCU_I2C0   = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 21U), /*!< I2C0 clock */\r\n  RCU_I2C1   = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 22U), /*!< I2C1 clock */\r\n  RCU_CAN0   = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 25U), /*!< CAN0 clock */\r\n  RCU_CAN1   = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 26U), /*!< CAN1 clock */\r\n  RCU_BKPI   = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 27U), /*!< BKPI clock */\r\n  RCU_PMU    = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 28U), /*!< PMU clock */\r\n  RCU_DAC    = RCU_REGIDX_BIT(APB1EN_REG_OFFSET, 29U), /*!< DAC clock */\r\n  RCU_RTC    = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 15U),  /*!< RTC clock */\r\n  /* APB2 peripherals */\r\n  RCU_AF     = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 0U),  /*!< alternate function clock */\r\n  RCU_GPIOA  = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 2U),  /*!< GPIOA clock */\r\n  RCU_GPIOB  = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 3U),  /*!< GPIOB clock */\r\n  RCU_GPIOC  = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 4U),  /*!< GPIOC clock */\r\n  RCU_GPIOD  = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 5U),  /*!< GPIOD clock */\r\n  RCU_GPIOE  = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 6U),  /*!< GPIOE clock */\r\n  RCU_ADC0   = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 9U),  /*!< ADC0 clock */\r\n  RCU_ADC1   = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 10U), /*!< ADC1 clock */\r\n  RCU_TIMER0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 11U), /*!< TIMER0 clock */\r\n  RCU_SPI0   = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 12U), /*!< SPI0 clock */\r\n  RCU_USART0 = RCU_REGIDX_BIT(APB2EN_REG_OFFSET, 14U), /*!< USART0 clock */\r\n} rcu_periph_enum;\r\n\r\n/* peripheral clock enable when sleep mode*/\r\ntypedef enum {\r\n  /* AHB peripherals */\r\n  RCU_SRAM_SLP = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 2U), /*!< SRAM clock */\r\n  RCU_FMC_SLP  = RCU_REGIDX_BIT(AHBEN_REG_OFFSET, 4U), /*!< FMC clock */\r\n} rcu_periph_sleep_enum;\r\n\r\n/* peripherals reset */\r\ntypedef enum {\r\n  /* AHB peripherals */\r\n  RCU_USBFSRST = RCU_REGIDX_BIT(AHBRST_REG_OFFSET, 12U), /*!< USBFS clock reset */\r\n  /* APB1 peripherals */\r\n  RCU_TIMER1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 0U),  /*!< TIMER1 clock reset */\r\n  RCU_TIMER2RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 1U),  /*!< TIMER2 clock reset */\r\n  RCU_TIMER3RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 2U),  /*!< TIMER3 clock reset */\r\n  RCU_TIMER4RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 3U),  /*!< TIMER4 clock reset */\r\n  RCU_TIMER5RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 4U),  /*!< TIMER5 clock reset */\r\n  RCU_TIMER6RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 5U),  /*!< TIMER6 clock reset */\r\n  RCU_WWDGTRST  = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 11U), /*!< WWDGT clock reset */\r\n  RCU_SPI1RST   = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 14U), /*!< SPI1 clock reset */\r\n  RCU_SPI2RST   = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 15U), /*!< SPI2 clock reset */\r\n  RCU_USART1RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 17U), /*!< USART1 clock reset */\r\n  RCU_USART2RST = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 18U), /*!< USART2 clock reset */\r\n  RCU_UART3RST  = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 19U), /*!< UART3 clock reset */\r\n  RCU_UART4RST  = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 20U), /*!< UART4 clock reset */\r\n  RCU_I2C0RST   = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 21U), /*!< I2C0 clock reset */\r\n  RCU_I2C1RST   = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 22U), /*!< I2C1 clock reset */\r\n  RCU_CAN0RST   = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 25U), /*!< CAN0 clock reset */\r\n  RCU_CAN1RST   = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 26U), /*!< CAN1 clock reset */\r\n  RCU_BKPIRST   = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 27U), /*!< BKPI clock reset */\r\n  RCU_PMURST    = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 28U), /*!< PMU clock reset */\r\n  RCU_DACRST    = RCU_REGIDX_BIT(APB1RST_REG_OFFSET, 29U), /*!< DAC clock reset */\r\n  /* APB2 peripherals */\r\n  RCU_AFRST     = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 0U),  /*!< alternate function clock reset */\r\n  RCU_GPIOARST  = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 2U),  /*!< GPIOA clock reset */\r\n  RCU_GPIOBRST  = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 3U),  /*!< GPIOB clock reset */\r\n  RCU_GPIOCRST  = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 4U),  /*!< GPIOC clock reset */\r\n  RCU_GPIODRST  = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 5U),  /*!< GPIOD clock reset */\r\n  RCU_GPIOERST  = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 6U),  /*!< GPIOE clock reset */\r\n  RCU_ADC0RST   = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 9U),  /*!< ADC0 clock reset */\r\n  RCU_ADC1RST   = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 10U), /*!< ADC1 clock reset */\r\n  RCU_TIMER0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 11U), /*!< TIMER0 clock reset */\r\n  RCU_SPI0RST   = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 12U), /*!< SPI0 clock reset */\r\n  RCU_USART0RST = RCU_REGIDX_BIT(APB2RST_REG_OFFSET, 14U), /*!< USART0 clock reset */\r\n} rcu_periph_reset_enum;\r\n\r\n/* clock stabilization and peripheral reset flags */\r\ntypedef enum {\r\n  /* clock stabilization flags */\r\n  RCU_FLAG_IRC8MSTB  = RCU_REGIDX_BIT(CTL_REG_OFFSET, 1U),    /*!< IRC8M stabilization flags */\r\n  RCU_FLAG_HXTALSTB  = RCU_REGIDX_BIT(CTL_REG_OFFSET, 17U),   /*!< HXTAL stabilization flags */\r\n  RCU_FLAG_PLLSTB    = RCU_REGIDX_BIT(CTL_REG_OFFSET, 25U),   /*!< PLL stabilization flags */\r\n  RCU_FLAG_PLL1STB   = RCU_REGIDX_BIT(CTL_REG_OFFSET, 27U),   /*!< PLL1 stabilization flags */\r\n  RCU_FLAG_PLL2STB   = RCU_REGIDX_BIT(CTL_REG_OFFSET, 29U),   /*!< PLL2 stabilization flags */\r\n  RCU_FLAG_LXTALSTB  = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 1U),  /*!< LXTAL stabilization flags */\r\n  RCU_FLAG_IRC40KSTB = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 1U), /*!< IRC40K stabilization flags */\r\n  /* reset source flags */\r\n  RCU_FLAG_EPRST    = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 26U), /*!< external PIN reset flags */\r\n  RCU_FLAG_PORRST   = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 27U), /*!< power reset flags */\r\n  RCU_FLAG_SWRST    = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 28U), /*!< software reset flags */\r\n  RCU_FLAG_FWDGTRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 29U), /*!< FWDGT reset flags */\r\n  RCU_FLAG_WWDGTRST = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 30U), /*!< WWDGT reset flags */\r\n  RCU_FLAG_LPRST    = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 31U), /*!< low-power reset flags */\r\n} rcu_flag_enum;\r\n\r\n/* clock stabilization and ckm interrupt flags */\r\ntypedef enum {\r\n  RCU_INT_FLAG_IRC40KSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 0U), /*!< IRC40K stabilization interrupt flag */\r\n  RCU_INT_FLAG_LXTALSTB  = RCU_REGIDX_BIT(INT_REG_OFFSET, 1U), /*!< LXTAL stabilization interrupt flag */\r\n  RCU_INT_FLAG_IRC8MSTB  = RCU_REGIDX_BIT(INT_REG_OFFSET, 2U), /*!< IRC8M stabilization interrupt flag */\r\n  RCU_INT_FLAG_HXTALSTB  = RCU_REGIDX_BIT(INT_REG_OFFSET, 3U), /*!< HXTAL stabilization interrupt flag */\r\n  RCU_INT_FLAG_PLLSTB    = RCU_REGIDX_BIT(INT_REG_OFFSET, 4U), /*!< PLL stabilization interrupt flag */\r\n  RCU_INT_FLAG_PLL1STB   = RCU_REGIDX_BIT(INT_REG_OFFSET, 5U), /*!< PLL1 stabilization interrupt flag */\r\n  RCU_INT_FLAG_PLL2STB   = RCU_REGIDX_BIT(INT_REG_OFFSET, 6U), /*!< PLL2 stabilization interrupt flag */\r\n  RCU_INT_FLAG_CKM       = RCU_REGIDX_BIT(INT_REG_OFFSET, 7U), /*!< HXTAL clock stuck interrupt flag */\r\n} rcu_int_flag_enum;\r\n\r\n/* clock stabilization and stuck interrupt flags clear */\r\ntypedef enum {\r\n  RCU_INT_FLAG_IRC40KSTB_CLR = RCU_REGIDX_BIT(INT_REG_OFFSET, 16U), /*!< IRC40K stabilization interrupt flags clear */\r\n  RCU_INT_FLAG_LXTALSTB_CLR  = RCU_REGIDX_BIT(INT_REG_OFFSET, 17U), /*!< LXTAL stabilization interrupt flags clear */\r\n  RCU_INT_FLAG_IRC8MSTB_CLR  = RCU_REGIDX_BIT(INT_REG_OFFSET, 18U), /*!< IRC8M stabilization interrupt flags clear */\r\n  RCU_INT_FLAG_HXTALSTB_CLR  = RCU_REGIDX_BIT(INT_REG_OFFSET, 19U), /*!< HXTAL stabilization interrupt flags clear */\r\n  RCU_INT_FLAG_PLLSTB_CLR    = RCU_REGIDX_BIT(INT_REG_OFFSET, 20U), /*!< PLL stabilization interrupt flags clear */\r\n  RCU_INT_FLAG_PLL1STB_CLR   = RCU_REGIDX_BIT(INT_REG_OFFSET, 21U), /*!< PLL1 stabilization interrupt flags clear */\r\n  RCU_INT_FLAG_PLL2STB_CLR   = RCU_REGIDX_BIT(INT_REG_OFFSET, 22U), /*!< PLL2 stabilization interrupt flags clear */\r\n  RCU_INT_FLAG_CKM_CLR       = RCU_REGIDX_BIT(INT_REG_OFFSET, 23U), /*!< CKM interrupt flags clear */\r\n} rcu_int_flag_clear_enum;\r\n\r\n/* clock stabilization interrupt enable or disable */\r\ntypedef enum {\r\n  RCU_INT_IRC40KSTB = RCU_REGIDX_BIT(INT_REG_OFFSET, 8U),  /*!< IRC40K stabilization interrupt */\r\n  RCU_INT_LXTALSTB  = RCU_REGIDX_BIT(INT_REG_OFFSET, 9U),  /*!< LXTAL stabilization interrupt */\r\n  RCU_INT_IRC8MSTB  = RCU_REGIDX_BIT(INT_REG_OFFSET, 10U), /*!< IRC8M stabilization interrupt */\r\n  RCU_INT_HXTALSTB  = RCU_REGIDX_BIT(INT_REG_OFFSET, 11U), /*!< HXTAL stabilization interrupt */\r\n  RCU_INT_PLLSTB    = RCU_REGIDX_BIT(INT_REG_OFFSET, 12U), /*!< PLL stabilization interrupt */\r\n  RCU_INT_PLL1STB   = RCU_REGIDX_BIT(INT_REG_OFFSET, 13U), /*!< PLL1 stabilization interrupt */\r\n  RCU_INT_PLL2STB   = RCU_REGIDX_BIT(INT_REG_OFFSET, 14U), /*!< PLL2 stabilization interrupt */\r\n} rcu_int_enum;\r\n\r\n/* oscillator types */\r\ntypedef enum {\r\n  RCU_HXTAL   = RCU_REGIDX_BIT(CTL_REG_OFFSET, 16U),   /*!< HXTAL */\r\n  RCU_LXTAL   = RCU_REGIDX_BIT(BDCTL_REG_OFFSET, 0U),  /*!< LXTAL */\r\n  RCU_IRC8M   = RCU_REGIDX_BIT(CTL_REG_OFFSET, 0U),    /*!< IRC8M */\r\n  RCU_IRC40K  = RCU_REGIDX_BIT(RSTSCK_REG_OFFSET, 0U), /*!< IRC40K */\r\n  RCU_PLL_CK  = RCU_REGIDX_BIT(CTL_REG_OFFSET, 24U),   /*!< PLL */\r\n  RCU_PLL1_CK = RCU_REGIDX_BIT(CTL_REG_OFFSET, 26U),   /*!< PLL1 */\r\n  RCU_PLL2_CK = RCU_REGIDX_BIT(CTL_REG_OFFSET, 28U),   /*!< PLL2 */\r\n} rcu_osci_type_enum;\r\n\r\n/* rcu clock frequency */\r\ntypedef enum {\r\n  CK_SYS = 0, /*!< system clock */\r\n  CK_AHB,     /*!< AHB clock */\r\n  CK_APB1,    /*!< APB1 clock */\r\n  CK_APB2,    /*!< APB2 clock */\r\n} rcu_clock_freq_enum;\r\n\r\n/* RCU_CFG0 register bit define */\r\n/* system clock source select */\r\n#define CFG0_SCS(regval)   (BITS(0, 1) & ((uint32_t)(regval) << 0))\r\n#define RCU_CKSYSSRC_IRC8M CFG0_SCS(0) /*!< system clock source select IRC8M */\r\n#define RCU_CKSYSSRC_HXTAL CFG0_SCS(1) /*!< system clock source select HXTAL */\r\n#define RCU_CKSYSSRC_PLL   CFG0_SCS(2) /*!< system clock source select PLL */\r\n\r\n/* system clock source select status */\r\n#define CFG0_SCSS(regval) (BITS(2, 3) & ((uint32_t)(regval) << 2))\r\n#define RCU_SCSS_IRC8M    CFG0_SCSS(0) /*!< system clock source select IRC8M */\r\n#define RCU_SCSS_HXTAL    CFG0_SCSS(1) /*!< system clock source select HXTAL */\r\n#define RCU_SCSS_PLL      CFG0_SCSS(2) /*!< system clock source select PLLP */\r\n\r\n/* AHB prescaler selection */\r\n#define CFG0_AHBPSC(regval)  (BITS(4, 7) & ((uint32_t)(regval) << 4))\r\n#define RCU_AHB_CKSYS_DIV1   CFG0_AHBPSC(0)  /*!< AHB prescaler select CK_SYS */\r\n#define RCU_AHB_CKSYS_DIV2   CFG0_AHBPSC(8)  /*!< AHB prescaler select CK_SYS/2 */\r\n#define RCU_AHB_CKSYS_DIV4   CFG0_AHBPSC(9)  /*!< AHB prescaler select CK_SYS/4 */\r\n#define RCU_AHB_CKSYS_DIV8   CFG0_AHBPSC(10) /*!< AHB prescaler select CK_SYS/8 */\r\n#define RCU_AHB_CKSYS_DIV16  CFG0_AHBPSC(11) /*!< AHB prescaler select CK_SYS/16 */\r\n#define RCU_AHB_CKSYS_DIV64  CFG0_AHBPSC(12) /*!< AHB prescaler select CK_SYS/64 */\r\n#define RCU_AHB_CKSYS_DIV128 CFG0_AHBPSC(13) /*!< AHB prescaler select CK_SYS/128 */\r\n#define RCU_AHB_CKSYS_DIV256 CFG0_AHBPSC(14) /*!< AHB prescaler select CK_SYS/256 */\r\n#define RCU_AHB_CKSYS_DIV512 CFG0_AHBPSC(15) /*!< AHB prescaler select CK_SYS/512 */\r\n\r\n/* APB1 prescaler selection */\r\n#define CFG0_APB1PSC(regval) (BITS(8, 10) & ((uint32_t)(regval) << 8))\r\n#define RCU_APB1_CKAHB_DIV1  CFG0_APB1PSC(0) /*!< APB1 prescaler select CK_AHB */\r\n#define RCU_APB1_CKAHB_DIV2  CFG0_APB1PSC(4) /*!< APB1 prescaler select CK_AHB/2 */\r\n#define RCU_APB1_CKAHB_DIV4  CFG0_APB1PSC(5) /*!< APB1 prescaler select CK_AHB/4 */\r\n#define RCU_APB1_CKAHB_DIV8  CFG0_APB1PSC(6) /*!< APB1 prescaler select CK_AHB/8 */\r\n#define RCU_APB1_CKAHB_DIV16 CFG0_APB1PSC(7) /*!< APB1 prescaler select CK_AHB/16 */\r\n\r\n/* APB2 prescaler selection */\r\n#define CFG0_APB2PSC(regval) (BITS(11, 13) & ((uint32_t)(regval) << 11))\r\n#define RCU_APB2_CKAHB_DIV1  CFG0_APB2PSC(0) /*!< APB2 prescaler select CK_AHB */\r\n#define RCU_APB2_CKAHB_DIV2  CFG0_APB2PSC(4) /*!< APB2 prescaler select CK_AHB/2 */\r\n#define RCU_APB2_CKAHB_DIV4  CFG0_APB2PSC(5) /*!< APB2 prescaler select CK_AHB/4 */\r\n#define RCU_APB2_CKAHB_DIV8  CFG0_APB2PSC(6) /*!< APB2 prescaler select CK_AHB/8 */\r\n#define RCU_APB2_CKAHB_DIV16 CFG0_APB2PSC(7) /*!< APB2 prescaler select CK_AHB/16 */\r\n\r\n/* ADC prescaler select */\r\n#define RCU_CKADC_CKAPB2_DIV2  ((uint32_t)0x00000000U) /*!< ADC prescaler select CK_APB2/2 */\r\n#define RCU_CKADC_CKAPB2_DIV4  ((uint32_t)0x00000001U) /*!< ADC prescaler select CK_APB2/4 */\r\n#define RCU_CKADC_CKAPB2_DIV6  ((uint32_t)0x00000002U) /*!< ADC prescaler select CK_APB2/6 */\r\n#define RCU_CKADC_CKAPB2_DIV8  ((uint32_t)0x00000003U) /*!< ADC prescaler select CK_APB2/8 */\r\n#define RCU_CKADC_CKAPB2_DIV12 ((uint32_t)0x00000005U) /*!< ADC prescaler select CK_APB2/12 */\r\n#define RCU_CKADC_CKAPB2_DIV16 ((uint32_t)0x00000007U) /*!< ADC prescaler select CK_APB2/16 */\r\n\r\n/* PLL clock source selection */\r\n#define RCU_PLLSRC_IRC8M_DIV2 ((uint32_t)0x00000000U) /*!< IRC8M/2 clock selected as source clock of PLL */\r\n#define RCU_PLLSRC_HXTAL      RCU_CFG0_PLLSEL         /*!< HXTAL clock selected as source clock of PLL */\r\n\r\n/* PLL clock multiplication factor */\r\n#define PLLMF_4 RCU_CFG0_PLLMF_4 /* bit 4 of PLLMF */\r\n\r\n#define CFG0_PLLMF(regval) (BITS(18, 21) & ((uint32_t)(regval) << 18))\r\n#define RCU_PLL_MUL2       CFG0_PLLMF(0)              /*!< PLL source clock multiply by 2 */\r\n#define RCU_PLL_MUL3       CFG0_PLLMF(1)              /*!< PLL source clock multiply by 3 */\r\n#define RCU_PLL_MUL4       CFG0_PLLMF(2)              /*!< PLL source clock multiply by 4 */\r\n#define RCU_PLL_MUL5       CFG0_PLLMF(3)              /*!< PLL source clock multiply by 5 */\r\n#define RCU_PLL_MUL6       CFG0_PLLMF(4)              /*!< PLL source clock multiply by 6 */\r\n#define RCU_PLL_MUL7       CFG0_PLLMF(5)              /*!< PLL source clock multiply by 7 */\r\n#define RCU_PLL_MUL8       CFG0_PLLMF(6)              /*!< PLL source clock multiply by 8 */\r\n#define RCU_PLL_MUL9       CFG0_PLLMF(7)              /*!< PLL source clock multiply by 9 */\r\n#define RCU_PLL_MUL10      CFG0_PLLMF(8)              /*!< PLL source clock multiply by 10 */\r\n#define RCU_PLL_MUL11      CFG0_PLLMF(9)              /*!< PLL source clock multiply by 11 */\r\n#define RCU_PLL_MUL12      CFG0_PLLMF(10)             /*!< PLL source clock multiply by 12 */\r\n#define RCU_PLL_MUL13      CFG0_PLLMF(11)             /*!< PLL source clock multiply by 13 */\r\n#define RCU_PLL_MUL14      CFG0_PLLMF(12)             /*!< PLL source clock multiply by 14 */\r\n#define RCU_PLL_MUL6_5     CFG0_PLLMF(13)             /*!< PLL source clock multiply by 6.5 */\r\n#define RCU_PLL_MUL16      CFG0_PLLMF(14)             /*!< PLL source clock multiply by 16 */\r\n#define RCU_PLL_MUL17      (PLLMF_4 | CFG0_PLLMF(0))  /*!< PLL source clock multiply by 17 */\r\n#define RCU_PLL_MUL18      (PLLMF_4 | CFG0_PLLMF(1))  /*!< PLL source clock multiply by 18 */\r\n#define RCU_PLL_MUL19      (PLLMF_4 | CFG0_PLLMF(2))  /*!< PLL source clock multiply by 19 */\r\n#define RCU_PLL_MUL20      (PLLMF_4 | CFG0_PLLMF(3))  /*!< PLL source clock multiply by 20 */\r\n#define RCU_PLL_MUL21      (PLLMF_4 | CFG0_PLLMF(4))  /*!< PLL source clock multiply by 21 */\r\n#define RCU_PLL_MUL22      (PLLMF_4 | CFG0_PLLMF(5))  /*!< PLL source clock multiply by 22 */\r\n#define RCU_PLL_MUL23      (PLLMF_4 | CFG0_PLLMF(6))  /*!< PLL source clock multiply by 23 */\r\n#define RCU_PLL_MUL24      (PLLMF_4 | CFG0_PLLMF(7))  /*!< PLL source clock multiply by 24 */\r\n#define RCU_PLL_MUL25      (PLLMF_4 | CFG0_PLLMF(8))  /*!< PLL source clock multiply by 25 */\r\n#define RCU_PLL_MUL26      (PLLMF_4 | CFG0_PLLMF(9))  /*!< PLL source clock multiply by 26 */\r\n#define RCU_PLL_MUL27      (PLLMF_4 | CFG0_PLLMF(10)) /*!< PLL source clock multiply by 27 */\r\n#define RCU_PLL_MUL28      (PLLMF_4 | CFG0_PLLMF(11)) /*!< PLL source clock multiply by 28 */\r\n#define RCU_PLL_MUL29      (PLLMF_4 | CFG0_PLLMF(12)) /*!< PLL source clock multiply by 29 */\r\n#define RCU_PLL_MUL30      (PLLMF_4 | CFG0_PLLMF(13)) /*!< PLL source clock multiply by 30 */\r\n#define RCU_PLL_MUL31      (PLLMF_4 | CFG0_PLLMF(14)) /*!< PLL source clock multiply by 31 */\r\n#define RCU_PLL_MUL32      (PLLMF_4 | CFG0_PLLMF(15)) /*!< PLL source clock multiply by 32 */\r\n\r\n/* USBFS prescaler select */\r\n#define CFG0_USBPSC(regval)    (BITS(22, 23) & ((uint32_t)(regval) << 22))\r\n#define RCU_CKUSB_CKPLL_DIV1_5 CFG0_USBPSC(0) /*!< USBFS prescaler select CK_PLL/1.5 */\r\n#define RCU_CKUSB_CKPLL_DIV1   CFG0_USBPSC(1) /*!< USBFS prescaler select CK_PLL/1 */\r\n#define RCU_CKUSB_CKPLL_DIV2_5 CFG0_USBPSC(2) /*!< USBFS prescaler select CK_PLL/2.5 */\r\n#define RCU_CKUSB_CKPLL_DIV2   CFG0_USBPSC(3) /*!< USBFS prescaler select CK_PLL/2 */\r\n\r\n/* CKOUT0 clock source selection */\r\n#define CFG0_CKOUT0SEL(regval)    (BITS(24, 27) & ((uint32_t)(regval) << 24))\r\n#define RCU_CKOUT0SRC_NONE        CFG0_CKOUT0SEL(0)  /*!< no clock selected */\r\n#define RCU_CKOUT0SRC_CKSYS       CFG0_CKOUT0SEL(4)  /*!< system clock selected */\r\n#define RCU_CKOUT0SRC_IRC8M       CFG0_CKOUT0SEL(5)  /*!< internal 8M RC oscillator clock selected */\r\n#define RCU_CKOUT0SRC_HXTAL       CFG0_CKOUT0SEL(6)  /*!< high speed crystal oscillator clock (HXTAL) selected */\r\n#define RCU_CKOUT0SRC_CKPLL_DIV2  CFG0_CKOUT0SEL(7)  /*!< CK_PLL/2 clock selected */\r\n#define RCU_CKOUT0SRC_CKPLL1      CFG0_CKOUT0SEL(8)  /*!< CK_PLL1 clock selected */\r\n#define RCU_CKOUT0SRC_CKPLL2_DIV2 CFG0_CKOUT0SEL(9)  /*!< CK_PLL2/2 clock selected */\r\n#define RCU_CKOUT0SRC_EXT1        CFG0_CKOUT0SEL(10) /*!< EXT1 selected */\r\n#define RCU_CKOUT0SRC_CKPLL2      CFG0_CKOUT0SEL(11) /*!< CK_PLL2 clock selected */\r\n\r\n/* RTC clock entry selection */\r\n#define BDCTL_RTCSRC(regval)     (BITS(8, 9) & ((uint32_t)(regval) << 8))\r\n#define RCU_RTCSRC_NONE          BDCTL_RTCSRC(0) /*!< no clock selected */\r\n#define RCU_RTCSRC_LXTAL         BDCTL_RTCSRC(1) /*!< RTC source clock select LXTAL  */\r\n#define RCU_RTCSRC_IRC40K        BDCTL_RTCSRC(2) /*!< RTC source clock select IRC40K */\r\n#define RCU_RTCSRC_HXTAL_DIV_128 BDCTL_RTCSRC(3) /*!< RTC source clock select HXTAL/128 */\r\n\r\n/* PREDV0 division factor */\r\n#define CFG1_PREDV0(regval) (BITS(0, 3) & ((uint32_t)(regval) << 0))\r\n#define RCU_PREDV0_DIV1     CFG1_PREDV0(0)  /*!< PREDV0 input source clock not divided */\r\n#define RCU_PREDV0_DIV2     CFG1_PREDV0(1)  /*!< PREDV0 input source clock divided by 2 */\r\n#define RCU_PREDV0_DIV3     CFG1_PREDV0(2)  /*!< PREDV0 input source clock divided by 3 */\r\n#define RCU_PREDV0_DIV4     CFG1_PREDV0(3)  /*!< PREDV0 input source clock divided by 4 */\r\n#define RCU_PREDV0_DIV5     CFG1_PREDV0(4)  /*!< PREDV0 input source clock divided by 5 */\r\n#define RCU_PREDV0_DIV6     CFG1_PREDV0(5)  /*!< PREDV0 input source clock divided by 6 */\r\n#define RCU_PREDV0_DIV7     CFG1_PREDV0(6)  /*!< PREDV0 input source clock divided by 7 */\r\n#define RCU_PREDV0_DIV8     CFG1_PREDV0(7)  /*!< PREDV0 input source clock divided by 8 */\r\n#define RCU_PREDV0_DIV9     CFG1_PREDV0(8)  /*!< PREDV0 input source clock divided by 9 */\r\n#define RCU_PREDV0_DIV10    CFG1_PREDV0(9)  /*!< PREDV0 input source clock divided by 10 */\r\n#define RCU_PREDV0_DIV11    CFG1_PREDV0(10) /*!< PREDV0 input source clock divided by 11 */\r\n#define RCU_PREDV0_DIV12    CFG1_PREDV0(11) /*!< PREDV0 input source clock divided by 12 */\r\n#define RCU_PREDV0_DIV13    CFG1_PREDV0(12) /*!< PREDV0 input source clock divided by 13 */\r\n#define RCU_PREDV0_DIV14    CFG1_PREDV0(13) /*!< PREDV0 input source clock divided by 14 */\r\n#define RCU_PREDV0_DIV15    CFG1_PREDV0(14) /*!< PREDV0 input source clock divided by 15 */\r\n#define RCU_PREDV0_DIV16    CFG1_PREDV0(15) /*!< PREDV0 input source clock divided by 16 */\r\n\r\n/* PREDV1 division factor */\r\n#define CFG1_PREDV1(regval) (BITS(4, 7) & ((uint32_t)(regval) << 4))\r\n#define RCU_PREDV1_DIV1     CFG1_PREDV1(0)  /*!< PREDV1 input source clock not divided */\r\n#define RCU_PREDV1_DIV2     CFG1_PREDV1(1)  /*!< PREDV1 input source clock divided by 2 */\r\n#define RCU_PREDV1_DIV3     CFG1_PREDV1(2)  /*!< PREDV1 input source clock divided by 3 */\r\n#define RCU_PREDV1_DIV4     CFG1_PREDV1(3)  /*!< PREDV1 input source clock divided by 4 */\r\n#define RCU_PREDV1_DIV5     CFG1_PREDV1(4)  /*!< PREDV1 input source clock divided by 5 */\r\n#define RCU_PREDV1_DIV6     CFG1_PREDV1(5)  /*!< PREDV1 input source clock divided by 6 */\r\n#define RCU_PREDV1_DIV7     CFG1_PREDV1(6)  /*!< PREDV1 input source clock divided by 7 */\r\n#define RCU_PREDV1_DIV8     CFG1_PREDV1(7)  /*!< PREDV1 input source clock divided by 8 */\r\n#define RCU_PREDV1_DIV9     CFG1_PREDV1(8)  /*!< PREDV1 input source clock divided by 9 */\r\n#define RCU_PREDV1_DIV10    CFG1_PREDV1(9)  /*!< PREDV1 input source clock divided by 10 */\r\n#define RCU_PREDV1_DIV11    CFG1_PREDV1(10) /*!< PREDV1 input source clock divided by 11 */\r\n#define RCU_PREDV1_DIV12    CFG1_PREDV1(11) /*!< PREDV1 input source clock divided by 12 */\r\n#define RCU_PREDV1_DIV13    CFG1_PREDV1(12) /*!< PREDV1 input source clock divided by 13 */\r\n#define RCU_PREDV1_DIV14    CFG1_PREDV1(13) /*!< PREDV1 input source clock divided by 14 */\r\n#define RCU_PREDV1_DIV15    CFG1_PREDV1(14) /*!< PREDV1 input source clock divided by 15 */\r\n#define RCU_PREDV1_DIV16    CFG1_PREDV1(15) /*!< PREDV1 input source clock divided by 16 */\r\n\r\n/* PLL1 clock multiplication factor */\r\n#define CFG1_PLL1MF(regval) (BITS(8, 11) & ((uint32_t)(regval) << 8))\r\n#define RCU_PLL1_MUL8       CFG1_PLL1MF(6)  /*!< PLL1 source clock multiply by 8 */\r\n#define RCU_PLL1_MUL9       CFG1_PLL1MF(7)  /*!< PLL1 source clock multiply by 9 */\r\n#define RCU_PLL1_MUL10      CFG1_PLL1MF(8)  /*!< PLL1 source clock multiply by 10 */\r\n#define RCU_PLL1_MUL11      CFG1_PLL1MF(9)  /*!< PLL1 source clock multiply by 11 */\r\n#define RCU_PLL1_MUL12      CFG1_PLL1MF(10) /*!< PLL1 source clock multiply by 12 */\r\n#define RCU_PLL1_MUL13      CFG1_PLL1MF(11) /*!< PLL1 source clock multiply by 13 */\r\n#define RCU_PLL1_MUL14      CFG1_PLL1MF(12) /*!< PLL1 source clock multiply by 14 */\r\n#define RCU_PLL1_MUL15      CFG1_PLL1MF(13) /*!< PLL1 source clock multiply by 15 */\r\n#define RCU_PLL1_MUL16      CFG1_PLL1MF(14) /*!< PLL1 source clock multiply by 16 */\r\n#define RCU_PLL1_MUL20      CFG1_PLL1MF(15) /*!< PLL1 source clock multiply by 20 */\r\n\r\n/* PLL2 clock multiplication factor */\r\n#define CFG1_PLL2MF(regval) (BITS(12, 15) & ((uint32_t)(regval) << 12))\r\n#define RCU_PLL2_MUL8       CFG1_PLL2MF(6)  /*!< PLL2 source clock multiply by 8 */\r\n#define RCU_PLL2_MUL9       CFG1_PLL2MF(7)  /*!< PLL2 source clock multiply by 9 */\r\n#define RCU_PLL2_MUL10      CFG1_PLL2MF(8)  /*!< PLL2 source clock multiply by 10 */\r\n#define RCU_PLL2_MUL11      CFG1_PLL2MF(9)  /*!< PLL2 source clock multiply by 11 */\r\n#define RCU_PLL2_MUL12      CFG1_PLL2MF(10) /*!< PLL2 source clock multiply by 12 */\r\n#define RCU_PLL2_MUL13      CFG1_PLL2MF(11) /*!< PLL2 source clock multiply by 13 */\r\n#define RCU_PLL2_MUL14      CFG1_PLL2MF(12) /*!< PLL2 source clock multiply by 14 */\r\n#define RCU_PLL2_MUL15      CFG1_PLL2MF(13) /*!< PLL2 source clock multiply by 15 */\r\n#define RCU_PLL2_MUL16      CFG1_PLL2MF(14) /*!< PLL2 source clock multiply by 16 */\r\n#define RCU_PLL2_MUL20      CFG1_PLL2MF(15) /*!< PLL2 source clock multiply by 20 */\r\n\r\n/* PREDV0 input clock source selection */\r\n#define RCU_PREDV0SRC_HXTAL  ((uint32_t)0x00000000U) /*!< HXTAL selected as PREDV0 input source clock */\r\n#define RCU_PREDV0SRC_CKPLL1 RCU_CFG1_PREDV0SEL      /*!< CK_PLL1 selected as PREDV0 input source clock */\r\n\r\n/* I2S1 clock source selection */\r\n#define RCU_I2S1SRC_CKSYS       ((uint32_t)0x00000000U) /*!< system clock selected as I2S1 source clock */\r\n#define RCU_I2S1SRC_CKPLL2_MUL2 RCU_CFG1_I2S1SEL        /*!< (CK_PLL2 x 2) selected as I2S1 source clock */\r\n\r\n/* I2S2 clock source selection */\r\n#define RCU_I2S2SRC_CKSYS       ((uint32_t)0x00000000U) /*!< system clock selected as I2S2 source clock */\r\n#define RCU_I2S2SRC_CKPLL2_MUL2 RCU_CFG1_I2S2SEL        /*!< (CK_PLL2 x 2) selected as I2S2 source clock */\r\n\r\n/* deep-sleep mode voltage */\r\n#define DSV_DSLPVS(regval)  (BITS(0, 1) & ((uint32_t)(regval) << 0))\r\n#define RCU_DEEPSLEEP_V_1_2 DSV_DSLPVS(0) /*!< core voltage is 1.2V in deep-sleep mode */\r\n#define RCU_DEEPSLEEP_V_1_1 DSV_DSLPVS(1) /*!< core voltage is 1.1V in deep-sleep mode */\r\n#define RCU_DEEPSLEEP_V_1_0 DSV_DSLPVS(2) /*!< core voltage is 1.0V in deep-sleep mode */\r\n#define RCU_DEEPSLEEP_V_0_9 DSV_DSLPVS(3) /*!< core voltage is 0.9V in deep-sleep mode */\r\n\r\n/* function declarations */\r\n/* initialization, peripheral clock enable/disable functions */\r\n/* deinitialize the RCU */\r\nvoid rcu_deinit(void);\r\n/* enable the peripherals clock */\r\nvoid rcu_periph_clock_enable(rcu_periph_enum periph);\r\n/* disable the peripherals clock */\r\nvoid rcu_periph_clock_disable(rcu_periph_enum periph);\r\n/* enable the peripherals clock when sleep mode */\r\nvoid rcu_periph_clock_sleep_enable(rcu_periph_sleep_enum periph);\r\n/* disable the peripherals clock when sleep mode */\r\nvoid rcu_periph_clock_sleep_disable(rcu_periph_sleep_enum periph);\r\n/* reset the peripherals */\r\nvoid rcu_periph_reset_enable(rcu_periph_reset_enum periph_reset);\r\n/* disable reset the peripheral */\r\nvoid rcu_periph_reset_disable(rcu_periph_reset_enum periph_reset);\r\n/* reset the BKP domain */\r\nvoid rcu_bkp_reset_enable(void);\r\n/* disable the BKP domain reset */\r\nvoid rcu_bkp_reset_disable(void);\r\n\r\n/* clock configuration functions */\r\n/* configure the system clock source */\r\nvoid rcu_system_clock_source_config(uint32_t ck_sys);\r\n/* get the system clock source */\r\nuint32_t rcu_system_clock_source_get(void);\r\n/* configure the AHB prescaler selection */\r\nvoid rcu_ahb_clock_config(uint32_t ck_ahb);\r\n/* configure the APB1 prescaler selection */\r\nvoid rcu_apb1_clock_config(uint32_t ck_apb1);\r\n/* configure the APB2 prescaler selection */\r\nvoid rcu_apb2_clock_config(uint32_t ck_apb2);\r\n/* configure the CK_OUT0 clock source and divider */\r\nvoid rcu_ckout0_config(uint32_t ckout0_src);\r\n/* configure the PLL clock source selection and PLL multiply factor */\r\nvoid rcu_pll_config(uint32_t pll_src, uint32_t pll_mul);\r\n\r\n/* configure the PREDV0 division factor and clock source */\r\nvoid rcu_predv0_config(uint32_t predv0_source, uint32_t predv0_div);\r\n/* configure the PREDV1 division factor */\r\nvoid rcu_predv1_config(uint32_t predv1_div);\r\n/* configure the PLL1 clock */\r\nvoid rcu_pll1_config(uint32_t pll_mul);\r\n/* configure the PLL2 clock */\r\nvoid rcu_pll2_config(uint32_t pll_mul);\r\n\r\n/* peripheral clock configuration functions */\r\n/* configure the ADC division factor */\r\nvoid rcu_adc_clock_config(uint32_t adc_psc);\r\n/* configure the USBD/USBFS prescaler factor */\r\nvoid rcu_usb_clock_config(uint32_t usb_psc);\r\n/* configure the RTC clock source selection */\r\nvoid rcu_rtc_clock_config(uint32_t rtc_clock_source);\r\n\r\n/* configure the I2S1 clock source selection */\r\nvoid rcu_i2s1_clock_config(uint32_t i2s_clock_source);\r\n/* configure the I2S2 clock source selection */\r\nvoid rcu_i2s2_clock_config(uint32_t i2s_clock_source);\r\n\r\n/* interrupt & flag functions */\r\n/* get the clock stabilization and periphral reset flags */\r\nFlagStatus rcu_flag_get(rcu_flag_enum flag);\r\n/* clear the reset flag */\r\nvoid rcu_all_reset_flag_clear(void);\r\n/* get the clock stabilization interrupt and ckm flags */\r\nFlagStatus rcu_interrupt_flag_get(rcu_int_flag_enum int_flag);\r\n/* clear the interrupt flags */\r\nvoid rcu_interrupt_flag_clear(rcu_int_flag_clear_enum int_flag_clear);\r\n/* enable the stabilization interrupt */\r\nvoid rcu_interrupt_enable(rcu_int_enum stab_int);\r\n/* disable the stabilization interrupt */\r\nvoid rcu_interrupt_disable(rcu_int_enum stab_int);\r\n\r\n/* oscillator configuration functions */\r\n/* wait for oscillator stabilization flags is SET or oscillator startup is timeout */\r\nErrStatus rcu_osci_stab_wait(rcu_osci_type_enum osci);\r\n/* turn on the oscillator */\r\nvoid rcu_osci_on(rcu_osci_type_enum osci);\r\n/* turn off the oscillator */\r\nvoid rcu_osci_off(rcu_osci_type_enum osci);\r\n/* enable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it */\r\nvoid rcu_osci_bypass_mode_enable(rcu_osci_type_enum osci);\r\n/* disable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it */\r\nvoid rcu_osci_bypass_mode_disable(rcu_osci_type_enum osci);\r\n/* enable the HXTAL clock monitor */\r\nvoid rcu_hxtal_clock_monitor_enable(void);\r\n/* disable the HXTAL clock monitor */\r\nvoid rcu_hxtal_clock_monitor_disable(void);\r\n\r\n/* set the IRC8M adjust value */\r\nvoid rcu_irc8m_adjust_value_set(uint32_t irc8m_adjval);\r\n/* set the deep sleep mode voltage */\r\nvoid rcu_deepsleep_voltage_set(uint32_t dsvol);\r\n\r\n/* get the system clock, bus and peripheral clock frequency */\r\nuint32_t rcu_clock_freq_get(rcu_clock_freq_enum clock);\r\n\r\n#endif /* GD32VF103_RCU_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_rtc.h",
    "content": "/*!\r\n    \\file    gd32vf103_rtc.h\r\n    \\brief   definitions for the RTC\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_RTC_H\r\n#define GD32VF103_RTC_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* RTC definitions */\r\n#define RTC RTC_BASE\r\n\r\n/* registers definitions */\r\n#define RTC_INTEN REG32(RTC + 0x00U) /*!< interrupt enable register */\r\n#define RTC_CTL   REG32(RTC + 0x04U) /*!< control register */\r\n#define RTC_PSCH  REG32(RTC + 0x08U) /*!< prescaler high register */\r\n#define RTC_PSCL  REG32(RTC + 0x0CU) /*!< prescaler low register */\r\n#define RTC_DIVH  REG32(RTC + 0x10U) /*!< divider high register */\r\n#define RTC_DIVL  REG32(RTC + 0x14U) /*!< divider low register */\r\n#define RTC_CNTH  REG32(RTC + 0x18U) /*!< counter high register */\r\n#define RTC_CNTL  REG32(RTC + 0x1CU) /*!< counter low register */\r\n#define RTC_ALRMH REG32(RTC + 0x20U) /*!< alarm high register */\r\n#define RTC_ALRML REG32(RTC + 0x24U) /*!< alarm low register */\r\n\r\n/* bits definitions */\r\n/* RTC_INTEN */\r\n#define RTC_INTEN_SCIE   BIT(0) /*!< second interrupt enable */\r\n#define RTC_INTEN_ALRMIE BIT(1) /*!< alarm interrupt enable */\r\n#define RTC_INTEN_OVIE   BIT(2) /*!< overflow interrupt enable */\r\n\r\n/* RTC_CTL */\r\n#define RTC_CTL_SCIF   BIT(0) /*!< second interrupt flag */\r\n#define RTC_CTL_ALRMIF BIT(1) /*!< alarm interrupt flag */\r\n#define RTC_CTL_OVIF   BIT(2) /*!< overflow interrupt flag */\r\n#define RTC_CTL_RSYNF  BIT(3) /*!< registers synchronized flag */\r\n#define RTC_CTL_CMF    BIT(4) /*!< configuration mode flag */\r\n#define RTC_CTL_LWOFF  BIT(5) /*!< last write operation finished flag */\r\n\r\n/* RTC_PSCH */\r\n#define RTC_PSCH_PSC BITS(0, 3) /*!< prescaler high value */\r\n\r\n/* RTC_PSCL */\r\n#define RTC_PSCL_PSC BITS(0, 15) /*!< prescaler low value */\r\n\r\n/* RTC_DIVH */\r\n#define RTC_DIVH_DIV BITS(0, 3) /*!< divider high value */\r\n\r\n/* RTC_DIVL */\r\n#define RTC_DIVL_DIV BITS(0, 15) /*!< divider low value */\r\n\r\n/* RTC_CNTH */\r\n#define RTC_CNTH_CNT BITS(0, 15) /*!< counter high value */\r\n\r\n/* RTC_CNTL */\r\n#define RTC_CNTL_CNT BITS(0, 15) /*!< counter low value */\r\n\r\n/* RTC_ALRMH */\r\n#define RTC_ALRMH_ALRM BITS(0, 15) /*!< alarm high value */\r\n\r\n/* RTC_ALRML */\r\n#define RTC_ALRML_ALRM BITS(0, 15) /*!< alarm low value */\r\n\r\n/* constants definitions */\r\n/* RTC interrupt enable or disable definitions */\r\n#define RTC_INT_SECOND   RTC_INTEN_SCIE   /*!< second interrupt enable */\r\n#define RTC_INT_ALARM    RTC_INTEN_ALRMIE /*!< alarm interrupt enable */\r\n#define RTC_INT_OVERFLOW RTC_INTEN_OVIE   /*!< overflow interrupt enable */\r\n\r\n/* RTC interrupt flag definitions */\r\n#define RTC_INT_FLAG_SECOND   RTC_CTL_SCIF   /*!< second interrupt flag */\r\n#define RTC_INT_FLAG_ALARM    RTC_CTL_ALRMIF /*!< alarm interrupt flag */\r\n#define RTC_INT_FLAG_OVERFLOW RTC_CTL_OVIF   /*!< overflow interrupt flag */\r\n\r\n/* RTC flag definitions */\r\n#define RTC_FLAG_SECOND   RTC_CTL_SCIF   /*!< second interrupt flag */\r\n#define RTC_FLAG_ALARM    RTC_CTL_ALRMIF /*!< alarm interrupt flag */\r\n#define RTC_FLAG_OVERFLOW RTC_CTL_OVIF   /*!< overflow interrupt flag */\r\n#define RTC_FLAG_RSYN     RTC_CTL_RSYNF  /*!< registers synchronized flag */\r\n#define RTC_FLAG_LWOF     RTC_CTL_LWOFF  /*!< last write operation finished flag */\r\n\r\n/* function declarations */\r\n/* initialization functions */\r\n/* enter RTC configuration mode */\r\nvoid rtc_configuration_mode_enter(void);\r\n/* exit RTC configuration mode */\r\nvoid rtc_configuration_mode_exit(void);\r\n/* set RTC counter value */\r\nvoid rtc_counter_set(uint32_t cnt);\r\n/* set RTC prescaler value */\r\nvoid rtc_prescaler_set(uint32_t psc);\r\n\r\n/* operation functions */\r\n/* wait RTC last write operation finished flag set */\r\nvoid rtc_lwoff_wait(void);\r\n/* wait RTC registers synchronized flag set */\r\nvoid rtc_register_sync_wait(void);\r\n/* set RTC alarm value */\r\nvoid rtc_alarm_config(uint32_t alarm);\r\n/* get RTC counter value */\r\nuint32_t rtc_counter_get(void);\r\n/* get RTC divider value */\r\nuint32_t rtc_divider_get(void);\r\n\r\n/* flag & interrupt functions */\r\n/* get RTC flag status */\r\nFlagStatus rtc_flag_get(uint32_t flag);\r\n/* clear RTC flag status */\r\nvoid rtc_flag_clear(uint32_t flag);\r\n/* get RTC interrupt flag status */\r\nFlagStatus rtc_interrupt_flag_get(uint32_t flag);\r\n/* clear RTC interrupt flag status */\r\nvoid rtc_interrupt_flag_clear(uint32_t flag);\r\n/* enable RTC interrupt */\r\nvoid rtc_interrupt_enable(uint32_t interrupt);\r\n/* disable RTC interrupt */\r\nvoid rtc_interrupt_disable(uint32_t interrupt);\r\n\r\n#endif /* GD32VF103_RTC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_spi.h",
    "content": "/*!\r\n    \\file    gd32vf103_spi.h\r\n    \\brief   definitions for the SPI\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_SPI_H\r\n#define GD32VF103_SPI_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* SPIx(x=0,1,2) definitions */\r\n#define SPI0 (SPI_BASE + 0x0000F800U)\r\n#define SPI1 SPI_BASE\r\n#define SPI2 (SPI_BASE + 0x00000400U)\r\n\r\n/* SPI registers definitions */\r\n#define SPI_CTL0(spix)    REG32((spix) + 0x00U) /*!< SPI control register 0 */\r\n#define SPI_CTL1(spix)    REG32((spix) + 0x04U) /*!< SPI control register 1*/\r\n#define SPI_STAT(spix)    REG32((spix) + 0x08U) /*!< SPI status register */\r\n#define SPI_DATA(spix)    REG32((spix) + 0x0CU) /*!< SPI data register */\r\n#define SPI_CRCPOLY(spix) REG32((spix) + 0x10U) /*!< SPI CRC polynomial register */\r\n#define SPI_RCRC(spix)    REG32((spix) + 0x14U) /*!< SPI receive CRC register */\r\n#define SPI_TCRC(spix)    REG32((spix) + 0x18U) /*!< SPI transmit CRC register */\r\n#define SPI_I2SCTL(spix)  REG32((spix) + 0x1CU) /*!< SPI I2S control register */\r\n#define SPI_I2SPSC(spix)  REG32((spix) + 0x20U) /*!< SPI I2S clock prescaler register */\r\n\r\n/* bits definitions */\r\n/* SPI_CTL0 */\r\n#define SPI_CTL0_CKPH    BIT(0)     /*!< clock phase selection*/\r\n#define SPI_CTL0_CKPL    BIT(1)     /*!< clock polarity selection */\r\n#define SPI_CTL0_MSTMOD  BIT(2)     /*!< master mode enable */\r\n#define SPI_CTL0_PSC     BITS(3, 5) /*!< master clock prescaler selection */\r\n#define SPI_CTL0_SPIEN   BIT(6)     /*!< SPI enable*/\r\n#define SPI_CTL0_LF      BIT(7)     /*!< LSB first mode */\r\n#define SPI_CTL0_SWNSS   BIT(8)     /*!< NSS pin selection in NSS software mode */\r\n#define SPI_CTL0_SWNSSEN BIT(9)     /*!< NSS software mode selection */\r\n#define SPI_CTL0_RO      BIT(10)    /*!< receive only */\r\n#define SPI_CTL0_FF16    BIT(11)    /*!< data frame size */\r\n#define SPI_CTL0_CRCNT   BIT(12)    /*!< CRC next transfer */\r\n#define SPI_CTL0_CRCEN   BIT(13)    /*!< CRC calculation enable */\r\n#define SPI_CTL0_BDOEN   BIT(14)    /*!< bidirectional transmit output enable*/\r\n#define SPI_CTL0_BDEN    BIT(15)    /*!< bidirectional enable */\r\n\r\n/* SPI_CTL1 */\r\n#define SPI_CTL1_DMAREN BIT(0) /*!< receive buffer dma enable */\r\n#define SPI_CTL1_DMATEN BIT(1) /*!< transmit buffer dma enable */\r\n#define SPI_CTL1_NSSDRV BIT(2) /*!< drive NSS output */\r\n#define SPI_CTL1_NSSP   BIT(3) /*!< SPI NSS pulse mode enable */\r\n#define SPI_CTL1_TMOD   BIT(4) /*!< SPI TI mode enable */\r\n#define SPI_CTL1_ERRIE  BIT(5) /*!< errors interrupt enable */\r\n#define SPI_CTL1_RBNEIE BIT(6) /*!< receive buffer not empty interrupt enable */\r\n#define SPI_CTL1_TBEIE  BIT(7) /*!< transmit buffer empty interrupt enable */\r\n\r\n/* SPI_STAT */\r\n#define SPI_STAT_RBNE    BIT(0) /*!< receive buffer not empty */\r\n#define SPI_STAT_TBE     BIT(1) /*!< transmit buffer empty */\r\n#define SPI_STAT_I2SCH   BIT(2) /*!< I2S channel side */\r\n#define SPI_STAT_TXURERR BIT(3) /*!< I2S transmission underrun error bit */\r\n#define SPI_STAT_CRCERR  BIT(4) /*!< SPI CRC error bit */\r\n#define SPI_STAT_CONFERR BIT(5) /*!< SPI configuration error bit */\r\n#define SPI_STAT_RXORERR BIT(6) /*!< SPI reception overrun error bit */\r\n#define SPI_STAT_TRANS   BIT(7) /*!< transmitting on-going bit */\r\n#define SPI_STAT_FERR    BIT(8) /*!< format error bit */\r\n\r\n/* SPI_DATA */\r\n#define SPI_DATA_DATA BITS(0, 15) /*!< data transfer register */\r\n\r\n/* SPI_CRCPOLY */\r\n#define SPI_CRCPOLY_CRCPOLY BITS(0, 15) /*!< CRC polynomial value */\r\n\r\n/* SPI_RCRC */\r\n#define SPI_RCRC_RCRC BITS(0, 15) /*!< RX CRC value */\r\n\r\n/* SPI_TCRC */\r\n#define SPI_TCRC_TCRC BITS(0, 15) /*!< TX CRC value */\r\n\r\n/* SPI_I2SCTL */\r\n#define SPI_I2SCTL_CHLEN    BIT(0)     /*!< channel length */\r\n#define SPI_I2SCTL_DTLEN    BITS(1, 2) /*!< data length */\r\n#define SPI_I2SCTL_CKPL     BIT(3)     /*!< idle state clock polarity */\r\n#define SPI_I2SCTL_I2SSTD   BITS(4, 5) /*!< I2S standard selection */\r\n#define SPI_I2SCTL_PCMSMOD  BIT(7)     /*!< PCM frame synchronization mode */\r\n#define SPI_I2SCTL_I2SOPMOD BITS(8, 9) /*!< I2S operation mode */\r\n#define SPI_I2SCTL_I2SEN    BIT(10)    /*!< I2S enable */\r\n#define SPI_I2SCTL_I2SSEL   BIT(11)    /*!< I2S mode selection */\r\n\r\n/* SPI_I2SPSC */\r\n#define SPI_I2SPSC_DIV    BITS(0, 7) /*!< dividing factor for the prescaler */\r\n#define SPI_I2SPSC_OF     BIT(8)     /*!< odd factor for the prescaler */\r\n#define SPI_I2SPSC_MCKOEN BIT(9)     /*!< I2S MCK output enable */\r\n\r\n/* constants definitions */\r\n/* SPI and I2S parameter struct definitions */\r\ntypedef struct {\r\n  uint32_t device_mode;          /*!< SPI master or slave */\r\n  uint32_t trans_mode;           /*!< SPI transtype */\r\n  uint32_t frame_size;           /*!< SPI frame size */\r\n  uint32_t nss;                  /*!< SPI NSS control by handware or software */\r\n  uint32_t endian;               /*!< SPI big endian or little endian */\r\n  uint32_t clock_polarity_phase; /*!< SPI clock phase and polarity */\r\n  uint32_t prescale;             /*!< SPI prescale factor */\r\n} spi_parameter_struct;\r\n\r\n/* SPI mode definitions */\r\n#define SPI_MASTER (SPI_CTL0_MSTMOD | SPI_CTL0_SWNSS) /*!< SPI as master */\r\n#define SPI_SLAVE  ((uint32_t)0x00000000U)            /*!< SPI as slave */\r\n\r\n/* SPI bidirectional transfer direction */\r\n#define SPI_BIDIRECTIONAL_TRANSMIT SPI_CTL0_BDOEN    /*!< SPI work in transmit-only mode */\r\n#define SPI_BIDIRECTIONAL_RECEIVE  (~SPI_CTL0_BDOEN) /*!< SPI work in receive-only mode */\r\n\r\n/* SPI transmit type */\r\n#define SPI_TRANSMODE_FULLDUPLEX  ((uint32_t)0x00000000U)          /*!< SPI receive and send data at fullduplex communication */\r\n#define SPI_TRANSMODE_RECEIVEONLY SPI_CTL0_RO                      /*!< SPI only receive data */\r\n#define SPI_TRANSMODE_BDRECEIVE   SPI_CTL0_BDEN                    /*!< bidirectional receive data */\r\n#define SPI_TRANSMODE_BDTRANSMIT  (SPI_CTL0_BDEN | SPI_CTL0_BDOEN) /*!< bidirectional transmit data*/\r\n\r\n/* SPI frame size */\r\n#define SPI_FRAMESIZE_16BIT SPI_CTL0_FF16           /*!< SPI frame size is 16 bits */\r\n#define SPI_FRAMESIZE_8BIT  ((uint32_t)0x00000000U) /*!< SPI frame size is 8 bits */\r\n\r\n/* SPI NSS control mode */\r\n#define SPI_NSS_SOFT SPI_CTL0_SWNSSEN        /*!< SPI NSS control by software */\r\n#define SPI_NSS_HARD ((uint32_t)0x00000000U) /*!< SPI NSS control by hardware */\r\n\r\n/* SPI transmit way */\r\n#define SPI_ENDIAN_MSB ((uint32_t)0x00000000U) /*!< SPI transmit way is big endian: transmit MSB first */\r\n#define SPI_ENDIAN_LSB SPI_CTL0_LF             /*!< SPI transmit way is little endian: transmit LSB first */\r\n\r\n/* SPI clock phase and polarity */\r\n#define SPI_CK_PL_LOW_PH_1EDGE  ((uint32_t)0x00000000U)         /*!< SPI clock polarity is low level and phase is first edge */\r\n#define SPI_CK_PL_HIGH_PH_1EDGE SPI_CTL0_CKPL                   /*!< SPI clock polarity is high level and phase is first edge */\r\n#define SPI_CK_PL_LOW_PH_2EDGE  SPI_CTL0_CKPH                   /*!< SPI clock polarity is low level and phase is second edge */\r\n#define SPI_CK_PL_HIGH_PH_2EDGE (SPI_CTL0_CKPL | SPI_CTL0_CKPH) /*!< SPI clock polarity is high level and phase is second edge */\r\n\r\n/* SPI clock prescale factor */\r\n#define CTL0_PSC(regval) (BITS(3, 5) & ((uint32_t)(regval) << 3))\r\n#define SPI_PSC_2        CTL0_PSC(0) /*!< SPI clock prescale factor is 2 */\r\n#define SPI_PSC_4        CTL0_PSC(1) /*!< SPI clock prescale factor is 4 */\r\n#define SPI_PSC_8        CTL0_PSC(2) /*!< SPI clock prescale factor is 8 */\r\n#define SPI_PSC_16       CTL0_PSC(3) /*!< SPI clock prescale factor is 16 */\r\n#define SPI_PSC_32       CTL0_PSC(4) /*!< SPI clock prescale factor is 32 */\r\n#define SPI_PSC_64       CTL0_PSC(5) /*!< SPI clock prescale factor is 64 */\r\n#define SPI_PSC_128      CTL0_PSC(6) /*!< SPI clock prescale factor is 128 */\r\n#define SPI_PSC_256      CTL0_PSC(7) /*!< SPI clock prescale factor is 256 */\r\n\r\n/* I2S audio sample rate */\r\n#define I2S_AUDIOSAMPLE_8K   ((uint32_t)8000U)   /*!< I2S audio sample rate is 8KHz */\r\n#define I2S_AUDIOSAMPLE_11K  ((uint32_t)11025U)  /*!< I2S audio sample rate is 11KHz */\r\n#define I2S_AUDIOSAMPLE_16K  ((uint32_t)16000U)  /*!< I2S audio sample rate is 16KHz */\r\n#define I2S_AUDIOSAMPLE_22K  ((uint32_t)22050U)  /*!< I2S audio sample rate is 22KHz */\r\n#define I2S_AUDIOSAMPLE_32K  ((uint32_t)32000U)  /*!< I2S audio sample rate is 32KHz */\r\n#define I2S_AUDIOSAMPLE_44K  ((uint32_t)44100U)  /*!< I2S audio sample rate is 44KHz */\r\n#define I2S_AUDIOSAMPLE_48K  ((uint32_t)48000U)  /*!< I2S audio sample rate is 48KHz */\r\n#define I2S_AUDIOSAMPLE_96K  ((uint32_t)96000U)  /*!< I2S audio sample rate is 96KHz */\r\n#define I2S_AUDIOSAMPLE_192K ((uint32_t)192000U) /*!< I2S audio sample rate is 192KHz */\r\n\r\n/* I2S frame format */\r\n#define I2SCTL_DTLEN(regval)        (BITS(1, 2) & ((uint32_t)(regval) << 1))\r\n#define I2S_FRAMEFORMAT_DT16B_CH16B I2SCTL_DTLEN(0)                      /*!< I2S data length is 16 bit and channel length is 16 bit */\r\n#define I2S_FRAMEFORMAT_DT16B_CH32B (I2SCTL_DTLEN(0) | SPI_I2SCTL_CHLEN) /*!< I2S data length is 16 bit and channel length is 32 bit */\r\n#define I2S_FRAMEFORMAT_DT24B_CH32B (I2SCTL_DTLEN(1) | SPI_I2SCTL_CHLEN) /*!< I2S data length is 24 bit and channel length is 32 bit */\r\n#define I2S_FRAMEFORMAT_DT32B_CH32B (I2SCTL_DTLEN(2) | SPI_I2SCTL_CHLEN) /*!< I2S data length is 32 bit and channel length is 32 bit */\r\n\r\n/* I2S master clock output */\r\n#define I2S_MCKOUT_DISABLE ((uint32_t)0x00000000U) /*!< I2S master clock output disable */\r\n#define I2S_MCKOUT_ENABLE  SPI_I2SPSC_MCKOEN       /*!< I2S master clock output enable */\r\n\r\n/* I2S operation mode */\r\n#define I2SCTL_I2SOPMOD(regval) (BITS(8, 9) & ((uint32_t)(regval) << 8))\r\n#define I2S_MODE_SLAVETX        I2SCTL_I2SOPMOD(0) /*!< I2S slave transmit mode */\r\n#define I2S_MODE_SLAVERX        I2SCTL_I2SOPMOD(1) /*!< I2S slave receive mode */\r\n#define I2S_MODE_MASTERTX       I2SCTL_I2SOPMOD(2) /*!< I2S master transmit mode */\r\n#define I2S_MODE_MASTERRX       I2SCTL_I2SOPMOD(3) /*!< I2S master receive mode */\r\n\r\n/* I2S standard */\r\n#define I2SCTL_I2SSTD(regval) (BITS(4, 5) & ((uint32_t)(regval) << 4))\r\n#define I2S_STD_PHILLIPS      I2SCTL_I2SSTD(0)                        /*!< I2S phillips standard */\r\n#define I2S_STD_MSB           I2SCTL_I2SSTD(1)                        /*!< I2S MSB standard */\r\n#define I2S_STD_LSB           I2SCTL_I2SSTD(2)                        /*!< I2S LSB standard */\r\n#define I2S_STD_PCMSHORT      I2SCTL_I2SSTD(3)                        /*!< I2S PCM short standard */\r\n#define I2S_STD_PCMLONG       (I2SCTL_I2SSTD(3) | SPI_I2SCTL_PCMSMOD) /*!< I2S PCM long standard */\r\n\r\n/* I2S clock polarity */\r\n#define I2S_CKPL_LOW  ((uint32_t)0x00000000U) /*!< I2S clock polarity low level */\r\n#define I2S_CKPL_HIGH SPI_I2SCTL_CKPL         /*!< I2S clock polarity high level */\r\n\r\n/* SPI DMA constants definitions */\r\n#define SPI_DMA_TRANSMIT ((uint8_t)0x00U) /*!< SPI transmit data use DMA */\r\n#define SPI_DMA_RECEIVE  ((uint8_t)0x01U) /*!< SPI receive data use DMA */\r\n\r\n/* SPI CRC constants definitions */\r\n#define SPI_CRC_TX ((uint8_t)0x00U) /*!< SPI transmit CRC value */\r\n#define SPI_CRC_RX ((uint8_t)0x01U) /*!< SPI receive CRC value */\r\n\r\n/* SPI/I2S interrupt enable/disable constants definitions */\r\n#define SPI_I2S_INT_TBE  ((uint8_t)0x00U) /*!< transmit buffer empty interrupt */\r\n#define SPI_I2S_INT_RBNE ((uint8_t)0x01U) /*!< receive buffer not empty interrupt */\r\n#define SPI_I2S_INT_ERR  ((uint8_t)0x02U) /*!< error interrupt */\r\n\r\n/* SPI/I2S interrupt flag constants definitions */\r\n#define SPI_I2S_INT_FLAG_TBE     ((uint8_t)0x00U) /*!< transmit buffer empty interrupt flag */\r\n#define SPI_I2S_INT_FLAG_RBNE    ((uint8_t)0x01U) /*!< receive buffer not empty interrupt flag */\r\n#define SPI_I2S_INT_FLAG_RXORERR ((uint8_t)0x02U) /*!< overrun interrupt flag */\r\n#define SPI_INT_FLAG_CONFERR     ((uint8_t)0x03U) /*!< config error interrupt flag */\r\n#define SPI_INT_FLAG_CRCERR      ((uint8_t)0x04U) /*!< CRC error interrupt flag */\r\n#define I2S_INT_FLAG_TXURERR     ((uint8_t)0x05U) /*!< underrun error interrupt flag */\r\n#define SPI_I2S_INT_FLAG_FERR    ((uint8_t)0x06U) /*!< format error interrupt flag */\r\n\r\n/* SPI/I2S flag definitions */\r\n#define SPI_FLAG_RBNE    SPI_STAT_RBNE    /*!< receive buffer not empty flag */\r\n#define SPI_FLAG_TBE     SPI_STAT_TBE     /*!< transmit buffer empty flag */\r\n#define SPI_FLAG_CRCERR  SPI_STAT_CRCERR  /*!< CRC error flag */\r\n#define SPI_FLAG_CONFERR SPI_STAT_CONFERR /*!< mode config error flag */\r\n#define SPI_FLAG_RXORERR SPI_STAT_RXORERR /*!< receive overrun error flag */\r\n#define SPI_FLAG_TRANS   SPI_STAT_TRANS   /*!< transmit on-going flag */\r\n#define SPI_FLAG_FERR    SPI_STAT_FERR    /*!< format error interrupt flag */\r\n#define I2S_FLAG_RBNE    SPI_STAT_RBNE    /*!< receive buffer not empty flag */\r\n#define I2S_FLAG_TBE     SPI_STAT_TBE     /*!< transmit buffer empty flag */\r\n#define I2S_FLAG_CH      SPI_STAT_I2SCH   /*!< channel side flag */\r\n#define I2S_FLAG_TXURERR SPI_STAT_TXURERR /*!< underrun error flag */\r\n#define I2S_FLAG_RXORERR SPI_STAT_RXORERR /*!< overrun error flag */\r\n#define I2S_FLAG_TRANS   SPI_STAT_TRANS   /*!< transmit on-going flag */\r\n#define I2S_FLAG_FERR    SPI_STAT_FERR    /*!< format error interrupt flag */\r\n\r\n/* function declarations */\r\n/* SPI/I2S deinitialization and initialization functions */\r\n/* reset SPI and I2S */\r\nvoid spi_i2s_deinit(uint32_t spi_periph);\r\n/* initialize the parameters of SPI struct with the default values */\r\nvoid spi_struct_para_init(spi_parameter_struct *spi_struct);\r\n/* initialize SPI parameter */\r\nvoid spi_init(uint32_t spi_periph, spi_parameter_struct *spi_struct);\r\n/* enable SPI */\r\nvoid spi_enable(uint32_t spi_periph);\r\n/* disable SPI */\r\nvoid spi_disable(uint32_t spi_periph);\r\n\r\n/* initialize I2S parameter */\r\nvoid i2s_init(uint32_t spi_periph, uint32_t mode, uint32_t standard, uint32_t ckpl);\r\n/* configure I2S prescaler */\r\nvoid i2s_psc_config(uint32_t spi_periph, uint32_t audiosample, uint32_t frameformat, uint32_t mckout);\r\n/* enable I2S */\r\nvoid i2s_enable(uint32_t spi_periph);\r\n/* disable I2S */\r\nvoid i2s_disable(uint32_t spi_periph);\r\n\r\n/* NSS functions */\r\n/* enable SPI NSS output */\r\nvoid spi_nss_output_enable(uint32_t spi_periph);\r\n/* disable SPI NSS output */\r\nvoid spi_nss_output_disable(uint32_t spi_periph);\r\n/* SPI NSS pin high level in software mode */\r\nvoid spi_nss_internal_high(uint32_t spi_periph);\r\n/* SPI NSS pin low level in software mode */\r\nvoid spi_nss_internal_low(uint32_t spi_periph);\r\n\r\n/* DMA communication */\r\n/* enable SPI DMA */\r\nvoid spi_dma_enable(uint32_t spi_periph, uint8_t dma);\r\n/* disable SPI DMA */\r\nvoid spi_dma_disable(uint32_t spi_periph, uint8_t dma);\r\n\r\n/* normal mode communication */\r\n/* configure SPI/I2S data frame format */\r\nvoid spi_i2s_data_frame_format_config(uint32_t spi_periph, uint16_t frame_format);\r\n/* SPI transmit data */\r\nvoid spi_i2s_data_transmit(uint32_t spi_periph, uint16_t data);\r\n/* SPI receive data */\r\nuint16_t spi_i2s_data_receive(uint32_t spi_periph);\r\n/* configure SPI bidirectional transfer direction */\r\nvoid spi_bidirectional_transfer_config(uint32_t spi_periph, uint32_t transfer_direction);\r\n\r\n/* SPI CRC functions */\r\n/* set SPI CRC polynomial */\r\nvoid spi_crc_polynomial_set(uint32_t spi_periph, uint16_t crc_poly);\r\n/* get SPI CRC polynomial */\r\nuint16_t spi_crc_polynomial_get(uint32_t spi_periph);\r\n/* turn on SPI CRC function */\r\nvoid spi_crc_on(uint32_t spi_periph);\r\n/* turn off SPI CRC function */\r\nvoid spi_crc_off(uint32_t spi_periph);\r\n/* SPI next data is CRC value */\r\nvoid spi_crc_next(uint32_t spi_periph);\r\n/* get SPI CRC send value or receive value */\r\nuint16_t spi_crc_get(uint32_t spi_periph, uint8_t crc);\r\n\r\n/* SPI TI mode functions */\r\n/* enable SPI TI mode */\r\nvoid spi_ti_mode_enable(uint32_t spi_periph);\r\n/* disable SPI TI mode */\r\nvoid spi_ti_mode_disable(uint32_t spi_periph);\r\n\r\n/* SPI NSS pulse mode functions */\r\n/* enable SPI NSS pulse mode */\r\nvoid spi_nssp_mode_enable(uint32_t spi_periph);\r\n/* disable SPI NSS pulse mode */\r\nvoid spi_nssp_mode_disable(uint32_t spi_periph);\r\n/* flag and interrupt functions */\r\n/* enable SPI and I2S interrupt */\r\nvoid spi_i2s_interrupt_enable(uint32_t spi_periph, uint8_t interrupt);\r\n/* disable SPI and I2S interrupt */\r\nvoid spi_i2s_interrupt_disable(uint32_t spi_periph, uint8_t interrupt);\r\n/* get SPI and I2S interrupt status */\r\nFlagStatus spi_i2s_interrupt_flag_get(uint32_t spi_periph, uint8_t interrupt);\r\n/* get SPI and I2S flag status */\r\nFlagStatus spi_i2s_flag_get(uint32_t spi_periph, uint32_t flag);\r\n/* clear SPI CRC error flag status */\r\nvoid spi_crc_error_clear(uint32_t spi_periph);\r\n\r\n#endif /* GD32VF103_SPI_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_timer.h",
    "content": "/*!\r\n    \\file    gd32vf103_timer.h\r\n    \\brief   definitions for the TIMER\r\n\r\n    \\version 2019-06-05, V1.0.1, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_TIMER_H\r\n#define GD32VF103_TIMER_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* TIMERx(x=0..13) definitions */\r\n#define TIMER0 (TIMER_BASE + 0x00012C00U)\r\n#define TIMER1 (TIMER_BASE + 0x00000000U)\r\n#define TIMER2 (TIMER_BASE + 0x00000400U)\r\n#define TIMER3 (TIMER_BASE + 0x00000800U)\r\n#define TIMER4 (TIMER_BASE + 0x00000C00U)\r\n#define TIMER5 (TIMER_BASE + 0x00001000U)\r\n#define TIMER6 (TIMER_BASE + 0x00001400U)\r\n\r\n/* registers definitions */\r\n#define TIMER_CTL0(timerx)     REG32((timerx) + 0x00U) /*!< TIMER control register 0 */\r\n#define TIMER_CTL1(timerx)     REG32((timerx) + 0x04U) /*!< TIMER control register 1 */\r\n#define TIMER_SMCFG(timerx)    REG32((timerx) + 0x08U) /*!< TIMER slave mode configuration register */\r\n#define TIMER_DMAINTEN(timerx) REG32((timerx) + 0x0CU) /*!< TIMER DMA and interrupt enable register */\r\n#define TIMER_INTF(timerx)     REG32((timerx) + 0x10U) /*!< TIMER interrupt flag register */\r\n#define TIMER_SWEVG(timerx)    REG32((timerx) + 0x14U) /*!< TIMER software event generation register */\r\n#define TIMER_CHCTL0(timerx)   REG32((timerx) + 0x18U) /*!< TIMER channel control register 0 */\r\n#define TIMER_CHCTL1(timerx)   REG32((timerx) + 0x1CU) /*!< TIMER channel control register 1 */\r\n#define TIMER_CHCTL2(timerx)   REG32((timerx) + 0x20U) /*!< TIMER channel control register 2 */\r\n#define TIMER_CNT(timerx)      REG32((timerx) + 0x24U) /*!< TIMER counter register */\r\n#define TIMER_PSC(timerx)      REG32((timerx) + 0x28U) /*!< TIMER prescaler register */\r\n#define TIMER_CAR(timerx)      REG32((timerx) + 0x2CU) /*!< TIMER counter auto reload register */\r\n#define TIMER_CREP(timerx)     REG32((timerx) + 0x30U) /*!< TIMER counter repetition register */\r\n#define TIMER_CH0CV(timerx)    REG32((timerx) + 0x34U) /*!< TIMER channel 0 capture/compare value register */\r\n#define TIMER_CH1CV(timerx)    REG32((timerx) + 0x38U) /*!< TIMER channel 1 capture/compare value register */\r\n#define TIMER_CH2CV(timerx)    REG32((timerx) + 0x3CU) /*!< TIMER channel 2 capture/compare value register */\r\n#define TIMER_CH3CV(timerx)    REG32((timerx) + 0x40U) /*!< TIMER channel 3 capture/compare value register */\r\n#define TIMER_CCHP(timerx)     REG32((timerx) + 0x44U) /*!< TIMER channel complementary protection register */\r\n#define TIMER_DMACFG(timerx)   REG32((timerx) + 0x48U) /*!< TIMER DMA configuration register */\r\n#define TIMER_DMATB(timerx)    REG32((timerx) + 0x4CU) /*!< TIMER DMA transfer buffer register */\r\n\r\n/* bits definitions */\r\n/* TIMER_CTL0 */\r\n#define TIMER_CTL0_CEN   BIT(0)     /*!< TIMER counter enable */\r\n#define TIMER_CTL0_UPDIS BIT(1)     /*!< update disable */\r\n#define TIMER_CTL0_UPS   BIT(2)     /*!< update source */\r\n#define TIMER_CTL0_SPM   BIT(3)     /*!< single pulse mode */\r\n#define TIMER_CTL0_DIR   BIT(4)     /*!< timer counter direction */\r\n#define TIMER_CTL0_CAM   BITS(5, 6) /*!< center-aligned mode selection */\r\n#define TIMER_CTL0_ARSE  BIT(7)     /*!< auto-reload shadow enable */\r\n#define TIMER_CTL0_CKDIV BITS(8, 9) /*!< clock division */\r\n\r\n/* TIMER_CTL1 */\r\n#define TIMER_CTL1_CCSE  BIT(0)     /*!< commutation control shadow enable */\r\n#define TIMER_CTL1_CCUC  BIT(2)     /*!< commutation control shadow register update control */\r\n#define TIMER_CTL1_DMAS  BIT(3)     /*!< DMA request source selection */\r\n#define TIMER_CTL1_MMC   BITS(4, 6) /*!< master mode control */\r\n#define TIMER_CTL1_TI0S  BIT(7)     /*!< channel 0 trigger input selection(hall mode selection) */\r\n#define TIMER_CTL1_ISO0  BIT(8)     /*!< idle state of channel 0 output */\r\n#define TIMER_CTL1_ISO0N BIT(9)     /*!< idle state of channel 0 complementary output */\r\n#define TIMER_CTL1_ISO1  BIT(10)    /*!< idle state of channel 1 output */\r\n#define TIMER_CTL1_ISO1N BIT(11)    /*!< idle state of channel 1 complementary output */\r\n#define TIMER_CTL1_ISO2  BIT(12)    /*!< idle state of channel 2 output */\r\n#define TIMER_CTL1_ISO2N BIT(13)    /*!< idle state of channel 2 complementary output */\r\n#define TIMER_CTL1_ISO3  BIT(14)    /*!< idle state of channel 3 output */\r\n\r\n/* TIMER_SMCFG */\r\n#define TIMER_SMCFG_SMC   BITS(0, 2)   /*!< slave mode control */\r\n#define TIMER_SMCFG_TRGS  BITS(4, 6)   /*!< trigger selection */\r\n#define TIMER_SMCFG_MSM   BIT(7)       /*!< master-slave mode */\r\n#define TIMER_SMCFG_ETFC  BITS(8, 11)  /*!< external trigger filter control */\r\n#define TIMER_SMCFG_ETPSC BITS(12, 13) /*!< external trigger prescaler */\r\n#define TIMER_SMCFG_SMC1  BIT(14)      /*!< part of SMC for enable external clock mode 1 */\r\n#define TIMER_SMCFG_ETP   BIT(15)      /*!< external trigger polarity */\r\n\r\n/* TIMER_DMAINTEN */\r\n#define TIMER_DMAINTEN_UPIE   BIT(0)  /*!< update interrupt enable */\r\n#define TIMER_DMAINTEN_CH0IE  BIT(1)  /*!< channel 0 capture/compare interrupt enable */\r\n#define TIMER_DMAINTEN_CH1IE  BIT(2)  /*!< channel 1 capture/compare interrupt enable */\r\n#define TIMER_DMAINTEN_CH2IE  BIT(3)  /*!< channel 2 capture/compare interrupt enable */\r\n#define TIMER_DMAINTEN_CH3IE  BIT(4)  /*!< channel 3 capture/compare interrupt enable */\r\n#define TIMER_DMAINTEN_CMTIE  BIT(5)  /*!< commutation interrupt request enable */\r\n#define TIMER_DMAINTEN_TRGIE  BIT(6)  /*!< trigger interrupt enable */\r\n#define TIMER_DMAINTEN_BRKIE  BIT(7)  /*!< break interrupt enable */\r\n#define TIMER_DMAINTEN_UPDEN  BIT(8)  /*!< update DMA request enable */\r\n#define TIMER_DMAINTEN_CH0DEN BIT(9)  /*!< channel 0 capture/compare DMA request enable */\r\n#define TIMER_DMAINTEN_CH1DEN BIT(10) /*!< channel 1 capture/compare DMA request enable */\r\n#define TIMER_DMAINTEN_CH2DEN BIT(11) /*!< channel 2 capture/compare DMA request enable */\r\n#define TIMER_DMAINTEN_CH3DEN BIT(12) /*!< channel 3 capture/compare DMA request enable */\r\n#define TIMER_DMAINTEN_CMTDEN BIT(13) /*!< commutation DMA request enable */\r\n#define TIMER_DMAINTEN_TRGDEN BIT(14) /*!< trigger DMA request enable */\r\n\r\n/* TIMER_INTF */\r\n#define TIMER_INTF_UPIF  BIT(0)  /*!< update interrupt flag */\r\n#define TIMER_INTF_CH0IF BIT(1)  /*!< channel 0 capture/compare interrupt flag */\r\n#define TIMER_INTF_CH1IF BIT(2)  /*!< channel 1 capture/compare interrupt flag */\r\n#define TIMER_INTF_CH2IF BIT(3)  /*!< channel 2 capture/compare interrupt flag */\r\n#define TIMER_INTF_CH3IF BIT(4)  /*!< channel 3 capture/compare interrupt flag */\r\n#define TIMER_INTF_CMTIF BIT(5)  /*!< channel commutation interrupt flag */\r\n#define TIMER_INTF_TRGIF BIT(6)  /*!< trigger interrupt flag */\r\n#define TIMER_INTF_BRKIF BIT(7)  /*!< break interrupt flag */\r\n#define TIMER_INTF_CH0OF BIT(9)  /*!< channel 0 over capture flag */\r\n#define TIMER_INTF_CH1OF BIT(10) /*!< channel 1 over capture flag */\r\n#define TIMER_INTF_CH2OF BIT(11) /*!< channel 2 over capture flag */\r\n#define TIMER_INTF_CH3OF BIT(12) /*!< channel 3 over capture flag */\r\n\r\n/* TIMER_SWEVG */\r\n#define TIMER_SWEVG_UPG  BIT(0) /*!< update event generate */\r\n#define TIMER_SWEVG_CH0G BIT(1) /*!< channel 0 capture or compare event generation */\r\n#define TIMER_SWEVG_CH1G BIT(2) /*!< channel 1 capture or compare event generation */\r\n#define TIMER_SWEVG_CH2G BIT(3) /*!< channel 2 capture or compare event generation */\r\n#define TIMER_SWEVG_CH3G BIT(4) /*!< channel 3 capture or compare event generation */\r\n#define TIMER_SWEVG_CMTG BIT(5) /*!< channel commutation event generation */\r\n#define TIMER_SWEVG_TRGG BIT(6) /*!< trigger event generation */\r\n#define TIMER_SWEVG_BRKG BIT(7) /*!< break event generation */\r\n\r\n/* TIMER_CHCTL0 */\r\n/* output compare mode */\r\n#define TIMER_CHCTL0_CH0MS     BITS(0, 1)   /*!< channel 0 mode selection */\r\n#define TIMER_CHCTL0_CH0COMFEN BIT(2)       /*!< channel 0 output compare fast enable */\r\n#define TIMER_CHCTL0_CH0COMSEN BIT(3)       /*!< channel 0 output compare shadow enable */\r\n#define TIMER_CHCTL0_CH0COMCTL BITS(4, 6)   /*!< channel 0 output compare control  */\r\n#define TIMER_CHCTL0_CH0COMCEN BIT(7)       /*!< channel 0 output compare clear enable */\r\n#define TIMER_CHCTL0_CH1MS     BITS(8, 9)   /*!< channel 1 mode selection */\r\n#define TIMER_CHCTL0_CH1COMFEN BIT(10)      /*!< channel 1 output compare fast enable */\r\n#define TIMER_CHCTL0_CH1COMSEN BIT(11)      /*!< channel 1 output compare shadow enable */\r\n#define TIMER_CHCTL0_CH1COMCTL BITS(12, 14) /*!< channel 1 output compare control  */\r\n#define TIMER_CHCTL0_CH1COMCEN BIT(15)      /*!< channel 1 output compare clear enable */\r\n/* input capture mode */\r\n#define TIMER_CHCTL0_CH0CAPPSC BITS(2, 3)   /*!< channel 0 input capture prescaler */\r\n#define TIMER_CHCTL0_CH0CAPFLT BITS(4, 7)   /*!< channel 0 input capture filter control */\r\n#define TIMER_CHCTL0_CH1CAPPSC BITS(10, 11) /*!< channel 1 input capture prescaler */\r\n#define TIMER_CHCTL0_CH1CAPFLT BITS(12, 15) /*!< channel 1 input capture filter control */\r\n\r\n/* TIMER_CHCTL1 */\r\n/* output compare mode */\r\n#define TIMER_CHCTL1_CH2MS     BITS(0, 1)   /*!< channel 2 mode selection */\r\n#define TIMER_CHCTL1_CH2COMFEN BIT(2)       /*!< channel 2 output compare fast enable */\r\n#define TIMER_CHCTL1_CH2COMSEN BIT(3)       /*!< channel 2 output compare shadow enable */\r\n#define TIMER_CHCTL1_CH2COMCTL BITS(4, 6)   /*!< channel 2 output compare control */\r\n#define TIMER_CHCTL1_CH2COMCEN BIT(7)       /*!< channel 2 output compare clear enable */\r\n#define TIMER_CHCTL1_CH3MS     BITS(8, 9)   /*!< channel 3 mode selection */\r\n#define TIMER_CHCTL1_CH3COMFEN BIT(10)      /*!< channel 3 output compare fast enable */\r\n#define TIMER_CHCTL1_CH3COMSEN BIT(11)      /*!< channel 3 output compare shadow enable */\r\n#define TIMER_CHCTL1_CH3COMCTL BITS(12, 14) /*!< channel 3 output compare control */\r\n#define TIMER_CHCTL1_CH3COMCEN BIT(15)      /*!< channel 3 output compare clear enable */\r\n/* input capture mode */\r\n#define TIMER_CHCTL1_CH2CAPPSC BITS(2, 3)   /*!< channel 2 input capture prescaler */\r\n#define TIMER_CHCTL1_CH2CAPFLT BITS(4, 7)   /*!< channel 2 input capture filter control */\r\n#define TIMER_CHCTL1_CH3CAPPSC BITS(10, 11) /*!< channel 3 input capture prescaler */\r\n#define TIMER_CHCTL1_CH3CAPFLT BITS(12, 15) /*!< channel 3 input capture filter control */\r\n\r\n/* TIMER_CHCTL2 */\r\n#define TIMER_CHCTL2_CH0EN  BIT(0)  /*!< channel 0 capture/compare function enable */\r\n#define TIMER_CHCTL2_CH0P   BIT(1)  /*!< channel 0 capture/compare function polarity */\r\n#define TIMER_CHCTL2_CH0NEN BIT(2)  /*!< channel 0 complementary output enable */\r\n#define TIMER_CHCTL2_CH0NP  BIT(3)  /*!< channel 0 complementary output polarity */\r\n#define TIMER_CHCTL2_CH1EN  BIT(4)  /*!< channel 1 capture/compare function enable  */\r\n#define TIMER_CHCTL2_CH1P   BIT(5)  /*!< channel 1 capture/compare function polarity */\r\n#define TIMER_CHCTL2_CH1NEN BIT(6)  /*!< channel 1 complementary output enable */\r\n#define TIMER_CHCTL2_CH1NP  BIT(7)  /*!< channel 1 complementary output polarity */\r\n#define TIMER_CHCTL2_CH2EN  BIT(8)  /*!< channel 2 capture/compare function enable  */\r\n#define TIMER_CHCTL2_CH2P   BIT(9)  /*!< channel 2 capture/compare function polarity */\r\n#define TIMER_CHCTL2_CH2NEN BIT(10) /*!< channel 2 complementary output enable */\r\n#define TIMER_CHCTL2_CH2NP  BIT(11) /*!< channel 2 complementary output polarity */\r\n#define TIMER_CHCTL2_CH3EN  BIT(12) /*!< channel 3 capture/compare function enable  */\r\n#define TIMER_CHCTL2_CH3P   BIT(13) /*!< channel 3 capture/compare function polarity */\r\n\r\n/* TIMER_CNT */\r\n#define TIMER_CNT_CNT BITS(0, 15) /*!< 16 bit timer counter */\r\n\r\n/* TIMER_PSC */\r\n#define TIMER_PSC_PSC BITS(0, 15) /*!< prescaler value of the counter clock */\r\n\r\n/* TIMER_CAR */\r\n#define TIMER_CAR_CARL BITS(0, 15) /*!< 16 bit counter auto reload value */\r\n\r\n/* TIMER_CREP */\r\n#define TIMER_CREP_CREP BITS(0, 7) /*!< counter repetition value */\r\n\r\n/* TIMER_CH0CV */\r\n#define TIMER_CH0CV_CH0VAL BITS(0, 15) /*!< 16 bit capture/compare value of channel 0 */\r\n\r\n/* TIMER_CH1CV */\r\n#define TIMER_CH1CV_CH1VAL BITS(0, 15) /*!< 16 bit capture/compare value of channel 1 */\r\n\r\n/* TIMER_CH2CV */\r\n#define TIMER_CH2CV_CH2VAL BITS(0, 15) /*!< 16 bit capture/compare value of channel 2 */\r\n\r\n/* TIMER_CH3CV */\r\n#define TIMER_CH3CV_CH3VAL BITS(0, 15) /*!< 16 bit capture/compare value of channel 3 */\r\n\r\n/* TIMER_CCHP */\r\n#define TIMER_CCHP_DTCFG BITS(0, 7) /*!< dead time configure */\r\n#define TIMER_CCHP_PROT  BITS(8, 9) /*!< complementary register protect control */\r\n#define TIMER_CCHP_IOS   BIT(10)    /*!< idle mode off-state configure */\r\n#define TIMER_CCHP_ROS   BIT(11)    /*!< run mode off-state configure */\r\n#define TIMER_CCHP_BRKEN BIT(12)    /*!< break enable */\r\n#define TIMER_CCHP_BRKP  BIT(13)    /*!< break polarity */\r\n#define TIMER_CCHP_OAEN  BIT(14)    /*!< output automatic enable */\r\n#define TIMER_CCHP_POEN  BIT(15)    /*!< primary output enable */\r\n\r\n/* TIMER_DMACFG */\r\n#define TIMER_DMACFG_DMATA BITS(0, 4)  /*!< DMA transfer access start address */\r\n#define TIMER_DMACFG_DMATC BITS(8, 12) /*!< DMA transfer count */\r\n\r\n/* TIMER_DMATB */\r\n#define TIMER_DMATB_DMATB BITS(0, 15) /*!< DMA transfer buffer address */\r\n\r\n/* constants definitions */\r\n/* TIMER init parameter struct definitions */\r\ntypedef struct {\r\n  uint16_t prescaler;         /*!< prescaler value */\r\n  uint16_t alignedmode;       /*!< aligned mode */\r\n  uint16_t counterdirection;  /*!< counter direction */\r\n  uint32_t period;            /*!< period value */\r\n  uint16_t clockdivision;     /*!< clock division value */\r\n  uint8_t  repetitioncounter; /*!< the counter repetition value */\r\n} timer_parameter_struct;\r\n\r\n/* break parameter struct definitions */\r\ntypedef struct {\r\n  uint16_t runoffstate;     /*!< run mode off-state */\r\n  uint16_t ideloffstate;    /*!< idle mode off-state */\r\n  uint16_t deadtime;        /*!< dead time */\r\n  uint16_t breakpolarity;   /*!< break polarity */\r\n  uint16_t outputautostate; /*!< output automatic enable */\r\n  uint16_t protectmode;     /*!< complementary register protect control */\r\n  uint16_t breakstate;      /*!< break enable */\r\n} timer_break_parameter_struct;\r\n\r\n/* channel output parameter struct definitions */\r\ntypedef struct {\r\n  uint16_t outputstate;  /*!< channel output state */\r\n  uint16_t outputnstate; /*!< channel complementary output state */\r\n  uint16_t ocpolarity;   /*!< channel output polarity */\r\n  uint16_t ocnpolarity;  /*!< channel complementary output polarity */\r\n  uint16_t ocidlestate;  /*!< idle state of channel output */\r\n  uint16_t ocnidlestate; /*!< idle state of channel complementary output */\r\n} timer_oc_parameter_struct;\r\n\r\n/* channel input parameter struct definitions */\r\ntypedef struct {\r\n  uint16_t icpolarity;  /*!< channel input polarity */\r\n  uint16_t icselection; /*!< channel input mode selection */\r\n  uint16_t icprescaler; /*!< channel input capture prescaler */\r\n  uint16_t icfilter;    /*!< channel input capture filter control */\r\n} timer_ic_parameter_struct;\r\n\r\n/* TIMER interrupt enable or disable */\r\n#define TIMER_INT_UP  TIMER_DMAINTEN_UPIE  /*!< update interrupt */\r\n#define TIMER_INT_CH0 TIMER_DMAINTEN_CH0IE /*!< channel 0 interrupt */\r\n#define TIMER_INT_CH1 TIMER_DMAINTEN_CH1IE /*!< channel 1 interrupt */\r\n#define TIMER_INT_CH2 TIMER_DMAINTEN_CH2IE /*!< channel 2 interrupt */\r\n#define TIMER_INT_CH3 TIMER_DMAINTEN_CH3IE /*!< channel 3 interrupt */\r\n#define TIMER_INT_CMT TIMER_DMAINTEN_CMTIE /*!< channel commutation interrupt flag */\r\n#define TIMER_INT_TRG TIMER_DMAINTEN_TRGIE /*!< trigger interrupt */\r\n#define TIMER_INT_BRK TIMER_DMAINTEN_BRKIE /*!< break interrupt */\r\n\r\n/* TIMER interrupt flag */\r\n#define TIMER_INT_FLAG_UP  TIMER_INT_UP  /*!< update interrupt */\r\n#define TIMER_INT_FLAG_CH0 TIMER_INT_CH0 /*!< channel 0 interrupt */\r\n#define TIMER_INT_FLAG_CH1 TIMER_INT_CH1 /*!< channel 1 interrupt */\r\n#define TIMER_INT_FLAG_CH2 TIMER_INT_CH2 /*!< channel 2 interrupt */\r\n#define TIMER_INT_FLAG_CH3 TIMER_INT_CH3 /*!< channel 3 interrupt */\r\n#define TIMER_INT_FLAG_CMT TIMER_INT_CMT /*!< channel commutation interrupt flag */\r\n#define TIMER_INT_FLAG_TRG TIMER_INT_TRG /*!< trigger interrupt */\r\n#define TIMER_INT_FLAG_BRK TIMER_INT_BRK\r\n\r\n/* TIMER flag */\r\n#define TIMER_FLAG_UP   TIMER_INTF_UPIF  /*!< update flag */\r\n#define TIMER_FLAG_CH0  TIMER_INTF_CH0IF /*!< channel 0 flag */\r\n#define TIMER_FLAG_CH1  TIMER_INTF_CH1IF /*!< channel 1 flag */\r\n#define TIMER_FLAG_CH2  TIMER_INTF_CH2IF /*!< channel 2 flag */\r\n#define TIMER_FLAG_CH3  TIMER_INTF_CH3IF /*!< channel 3 flag */\r\n#define TIMER_FLAG_CMT  TIMER_INTF_CMTIF /*!< channel control update flag */\r\n#define TIMER_FLAG_TRG  TIMER_INTF_TRGIF /*!< trigger flag */\r\n#define TIMER_FLAG_BRK  TIMER_INTF_BRKIF /*!< break flag */\r\n#define TIMER_FLAG_CH0O TIMER_INTF_CH0OF /*!< channel 0 overcapture flag */\r\n#define TIMER_FLAG_CH1O TIMER_INTF_CH1OF /*!< channel 1 overcapture flag */\r\n#define TIMER_FLAG_CH2O TIMER_INTF_CH2OF /*!< channel 2 overcapture flag */\r\n#define TIMER_FLAG_CH3O TIMER_INTF_CH3OF /*!< channel 3 overcapture flag */\r\n\r\n/* TIMER DMA source enable */\r\n#define TIMER_DMA_UPD  ((uint16_t)TIMER_DMAINTEN_UPDEN)  /*!< update DMA enable */\r\n#define TIMER_DMA_CH0D ((uint16_t)TIMER_DMAINTEN_CH0DEN) /*!< channel 0 DMA enable */\r\n#define TIMER_DMA_CH1D ((uint16_t)TIMER_DMAINTEN_CH1DEN) /*!< channel 1 DMA enable */\r\n#define TIMER_DMA_CH2D ((uint16_t)TIMER_DMAINTEN_CH2DEN) /*!< channel 2 DMA enable */\r\n#define TIMER_DMA_CH3D ((uint16_t)TIMER_DMAINTEN_CH3DEN) /*!< channel 3 DMA enable */\r\n#define TIMER_DMA_CMTD ((uint16_t)TIMER_DMAINTEN_CMTDEN) /*!< commutation DMA request enable */\r\n#define TIMER_DMA_TRGD ((uint16_t)TIMER_DMAINTEN_TRGDEN) /*!< trigger DMA enable */\r\n\r\n/* channel DMA request source selection */\r\n#define TIMER_DMAREQUEST_UPDATEEVENT  TIMER_CTL1_DMAS         /*!< DMA request of channel n is sent when update event occurs */\r\n#define TIMER_DMAREQUEST_CHANNELEVENT ((uint32_t)0x00000000U) /*!< DMA request of channel n is sent when channel n event occurs */\r\n\r\n/* DMA access base address */\r\n#define DMACFG_DMATA(regval)        (BITS(0, 4) & ((uint32_t)(regval) << 0U))\r\n#define TIMER_DMACFG_DMATA_CTL0     DMACFG_DMATA(0)  /*!< DMA transfer address is TIMER_CTL0 */\r\n#define TIMER_DMACFG_DMATA_CTL1     DMACFG_DMATA(1)  /*!< DMA transfer address is TIMER_CTL1 */\r\n#define TIMER_DMACFG_DMATA_SMCFG    DMACFG_DMATA(2)  /*!< DMA transfer address is TIMER_SMCFG */\r\n#define TIMER_DMACFG_DMATA_DMAINTEN DMACFG_DMATA(3)  /*!< DMA transfer address is TIMER_DMAINTEN */\r\n#define TIMER_DMACFG_DMATA_INTF     DMACFG_DMATA(4)  /*!< DMA transfer address is TIMER_INTF */\r\n#define TIMER_DMACFG_DMATA_SWEVG    DMACFG_DMATA(5)  /*!< DMA transfer address is TIMER_SWEVG */\r\n#define TIMER_DMACFG_DMATA_CHCTL0   DMACFG_DMATA(6)  /*!< DMA transfer address is TIMER_CHCTL0 */\r\n#define TIMER_DMACFG_DMATA_CHCTL1   DMACFG_DMATA(7)  /*!< DMA transfer address is TIMER_CHCTL1 */\r\n#define TIMER_DMACFG_DMATA_CHCTL2   DMACFG_DMATA(8)  /*!< DMA transfer address is TIMER_CHCTL2 */\r\n#define TIMER_DMACFG_DMATA_CNT      DMACFG_DMATA(9)  /*!< DMA transfer address is TIMER_CNT */\r\n#define TIMER_DMACFG_DMATA_PSC      DMACFG_DMATA(10) /*!< DMA transfer address is TIMER_PSC */\r\n#define TIMER_DMACFG_DMATA_CAR      DMACFG_DMATA(11) /*!< DMA transfer address is TIMER_CAR */\r\n#define TIMER_DMACFG_DMATA_CREP     DMACFG_DMATA(12) /*!< DMA transfer address is TIMER_CREP */\r\n#define TIMER_DMACFG_DMATA_CH0CV    DMACFG_DMATA(13) /*!< DMA transfer address is TIMER_CH0CV */\r\n#define TIMER_DMACFG_DMATA_CH1CV    DMACFG_DMATA(14) /*!< DMA transfer address is TIMER_CH1CV */\r\n#define TIMER_DMACFG_DMATA_CH2CV    DMACFG_DMATA(15) /*!< DMA transfer address is TIMER_CH2CV */\r\n#define TIMER_DMACFG_DMATA_CH3CV    DMACFG_DMATA(16) /*!< DMA transfer address is TIMER_CH3CV */\r\n#define TIMER_DMACFG_DMATA_CCHP     DMACFG_DMATA(17) /*!< DMA transfer address is TIMER_CCHP */\r\n#define TIMER_DMACFG_DMATA_DMACFG   DMACFG_DMATA(18) /*!< DMA transfer address is TIMER_DMACFG */\r\n\r\n/* DMA access burst length */\r\n#define DMACFG_DMATC(regval)          (BITS(8, 12) & ((uint32_t)(regval) << 8U))\r\n#define TIMER_DMACFG_DMATC_1TRANSFER  DMACFG_DMATC(0)  /*!< DMA transfer 1 time */\r\n#define TIMER_DMACFG_DMATC_2TRANSFER  DMACFG_DMATC(1)  /*!< DMA transfer 2 times */\r\n#define TIMER_DMACFG_DMATC_3TRANSFER  DMACFG_DMATC(2)  /*!< DMA transfer 3 times */\r\n#define TIMER_DMACFG_DMATC_4TRANSFER  DMACFG_DMATC(3)  /*!< DMA transfer 4 times */\r\n#define TIMER_DMACFG_DMATC_5TRANSFER  DMACFG_DMATC(4)  /*!< DMA transfer 5 times */\r\n#define TIMER_DMACFG_DMATC_6TRANSFER  DMACFG_DMATC(5)  /*!< DMA transfer 6 times */\r\n#define TIMER_DMACFG_DMATC_7TRANSFER  DMACFG_DMATC(6)  /*!< DMA transfer 7 times */\r\n#define TIMER_DMACFG_DMATC_8TRANSFER  DMACFG_DMATC(7)  /*!< DMA transfer 8 times */\r\n#define TIMER_DMACFG_DMATC_9TRANSFER  DMACFG_DMATC(8)  /*!< DMA transfer 9 times */\r\n#define TIMER_DMACFG_DMATC_10TRANSFER DMACFG_DMATC(9)  /*!< DMA transfer 10 times */\r\n#define TIMER_DMACFG_DMATC_11TRANSFER DMACFG_DMATC(10) /*!< DMA transfer 11 times */\r\n#define TIMER_DMACFG_DMATC_12TRANSFER DMACFG_DMATC(11) /*!< DMA transfer 12 times */\r\n#define TIMER_DMACFG_DMATC_13TRANSFER DMACFG_DMATC(12) /*!< DMA transfer 13 times */\r\n#define TIMER_DMACFG_DMATC_14TRANSFER DMACFG_DMATC(13) /*!< DMA transfer 14 times */\r\n#define TIMER_DMACFG_DMATC_15TRANSFER DMACFG_DMATC(14) /*!< DMA transfer 15 times */\r\n#define TIMER_DMACFG_DMATC_16TRANSFER DMACFG_DMATC(15) /*!< DMA transfer 16 times */\r\n#define TIMER_DMACFG_DMATC_17TRANSFER DMACFG_DMATC(16) /*!< DMA transfer 17 times */\r\n#define TIMER_DMACFG_DMATC_18TRANSFER DMACFG_DMATC(17) /*!< DMA transfer 18 times */\r\n\r\n/* TIMER software event generation source */\r\n#define TIMER_EVENT_SRC_UPG  ((uint16_t)0x0001U) /*!< update event generation */\r\n#define TIMER_EVENT_SRC_CH0G ((uint16_t)0x0002U) /*!< channel 0 capture or compare event generation */\r\n#define TIMER_EVENT_SRC_CH1G ((uint16_t)0x0004U) /*!< channel 1 capture or compare event generation */\r\n#define TIMER_EVENT_SRC_CH2G ((uint16_t)0x0008U) /*!< channel 2 capture or compare event generation */\r\n#define TIMER_EVENT_SRC_CH3G ((uint16_t)0x0010U) /*!< channel 3 capture or compare event generation */\r\n#define TIMER_EVENT_SRC_CMTG ((uint16_t)0x0020U) /*!< channel commutation event generation */\r\n#define TIMER_EVENT_SRC_TRGG ((uint16_t)0x0040U) /*!< trigger event generation */\r\n#define TIMER_EVENT_SRC_BRKG ((uint16_t)0x0080U) /*!< break event generation */\r\n\r\n/* center-aligned mode selection */\r\n#define CTL0_CAM(regval)          ((uint16_t)(BITS(5, 6) & ((uint32_t)(regval) << 5U)))\r\n#define TIMER_COUNTER_EDGE        CTL0_CAM(0) /*!< edge-aligned mode */\r\n#define TIMER_COUNTER_CENTER_DOWN CTL0_CAM(1) /*!< center-aligned and counting down assert mode */\r\n#define TIMER_COUNTER_CENTER_UP   CTL0_CAM(2) /*!< center-aligned and counting up assert mode */\r\n#define TIMER_COUNTER_CENTER_BOTH CTL0_CAM(3) /*!< center-aligned and counting up/down assert mode */\r\n\r\n/* TIMER prescaler reload mode */\r\n#define TIMER_PSC_RELOAD_NOW    TIMER_SWEVG_UPG         /*!< the prescaler is loaded right now */\r\n#define TIMER_PSC_RELOAD_UPDATE ((uint32_t)0x00000000U) /*!< the prescaler is loaded at the next update event */\r\n\r\n/* count direction */\r\n#define TIMER_COUNTER_UP   ((uint16_t)0x0000U)        /*!< counter up direction */\r\n#define TIMER_COUNTER_DOWN ((uint16_t)TIMER_CTL0_DIR) /*!< counter down direction */\r\n\r\n/* specify division ratio between TIMER clock and dead-time and sampling clock */\r\n#define CTL0_CKDIV(regval) ((uint16_t)(BITS(8, 9) & ((uint32_t)(regval) << 8U)))\r\n#define TIMER_CKDIV_DIV1   CTL0_CKDIV(0) /*!< clock division value is 1,fDTS=fTIMER_CK */\r\n#define TIMER_CKDIV_DIV2   CTL0_CKDIV(1) /*!< clock division value is 2,fDTS= fTIMER_CK/2 */\r\n#define TIMER_CKDIV_DIV4   CTL0_CKDIV(2) /*!< clock division value is 4, fDTS= fTIMER_CK/4 */\r\n\r\n/* single pulse mode */\r\n#define TIMER_SP_MODE_SINGLE     TIMER_CTL0_SPM          /*!< single pulse mode */\r\n#define TIMER_SP_MODE_REPETITIVE ((uint32_t)0x00000000U) /*!< repetitive pulse mode */\r\n\r\n/* update source */\r\n#define TIMER_UPDATE_SRC_REGULAR TIMER_CTL0_UPS          /*!< update generate only by counter overflow/underflow */\r\n#define TIMER_UPDATE_SRC_GLOBAL  ((uint32_t)0x00000000U) /*!< update generate by setting of UPG bit or the counter overflow/underflow,or the slave mode controller trigger */\r\n\r\n/* run mode off-state configure */\r\n#define TIMER_ROS_STATE_ENABLE  ((uint16_t)TIMER_CCHP_ROS) /*!< when POEN bit is set, the channel output signals(CHx_O/CHx_ON) are enabled, with relationship to CHxEN/CHxNEN bits */\r\n#define TIMER_ROS_STATE_DISABLE ((uint16_t)0x0000U)        /*!< when POEN bit is set, the channel output signals(CHx_O/CHx_ON) are disabled */\r\n\r\n/* idle mode off-state configure */\r\n#define TIMER_IOS_STATE_ENABLE  ((uint16_t)TIMER_CCHP_IOS) /*!< when POEN bit is reset, he channel output signals(CHx_O/CHx_ON) are enabled, with relationship to CHxEN/CHxNEN bits */\r\n#define TIMER_IOS_STATE_DISABLE ((uint16_t)0x0000U)        /*!< when POEN bit is reset, the channel output signals(CHx_O/CHx_ON) are disabled */\r\n\r\n/* break input polarity */\r\n#define TIMER_BREAK_POLARITY_LOW  ((uint16_t)0x0000U)         /*!< break input polarity is low */\r\n#define TIMER_BREAK_POLARITY_HIGH ((uint16_t)TIMER_CCHP_BRKP) /*!< break input polarity is high */\r\n\r\n/* output automatic enable */\r\n#define TIMER_OUTAUTO_ENABLE  ((uint16_t)TIMER_CCHP_OAEN) /*!< output automatic enable */\r\n#define TIMER_OUTAUTO_DISABLE ((uint16_t)0x0000U)         /*!< output automatic disable */\r\n\r\n/* complementary register protect control */\r\n#define CCHP_PROT(regval)   ((uint16_t)(BITS(8, 9) & ((uint32_t)(regval) << 8U)))\r\n#define TIMER_CCHP_PROT_OFF CCHP_PROT(0) /*!< protect disable */\r\n#define TIMER_CCHP_PROT_0   CCHP_PROT(1) /*!< PROT mode 0 */\r\n#define TIMER_CCHP_PROT_1   CCHP_PROT(2) /*!< PROT mode 1 */\r\n#define TIMER_CCHP_PROT_2   CCHP_PROT(3) /*!< PROT mode 2 */\r\n\r\n/* break input enable */\r\n#define TIMER_BREAK_ENABLE  ((uint16_t)TIMER_CCHP_BRKEN) /*!< break input enable */\r\n#define TIMER_BREAK_DISABLE ((uint16_t)0x0000U)          /*!< break input disable */\r\n\r\n/* TIMER channel n(n=0,1,2,3) */\r\n#define TIMER_CH_0 ((uint16_t)0x0000U) /*!< TIMER channel 0(TIMERx(x=0..4)) */\r\n#define TIMER_CH_1 ((uint16_t)0x0001U) /*!< TIMER channel 1(TIMERx(x=0..4)) */\r\n#define TIMER_CH_2 ((uint16_t)0x0002U) /*!< TIMER channel 2(TIMERx(x=0..4)) */\r\n#define TIMER_CH_3 ((uint16_t)0x0003U) /*!< TIMER channel 3(TIMERx(x=0..4)) */\r\n\r\n/* channel enable state */\r\n#define TIMER_CCX_ENABLE  ((uint16_t)0x0001U) /*!< channel enable */\r\n#define TIMER_CCX_DISABLE ((uint16_t)0x0000U) /*!< channel disable */\r\n\r\n/* channel complementary output enable state */\r\n#define TIMER_CCXN_ENABLE  ((uint16_t)0x0004U) /*!< channel complementary enable */\r\n#define TIMER_CCXN_DISABLE ((uint16_t)0x0000U) /*!< channel complementary disable */\r\n\r\n/* channel output polarity */\r\n#define TIMER_OC_POLARITY_HIGH ((uint16_t)0x0000U) /*!< channel output polarity is high */\r\n#define TIMER_OC_POLARITY_LOW  ((uint16_t)0x0002U) /*!< channel output polarity is low */\r\n\r\n/* channel complementary output polarity */\r\n#define TIMER_OCN_POLARITY_HIGH ((uint16_t)0x0000U) /*!< channel complementary output polarity is high */\r\n#define TIMER_OCN_POLARITY_LOW  ((uint16_t)0x0008U) /*!< channel complementary output polarity is low */\r\n\r\n/* idle state of channel output */\r\n#define TIMER_OC_IDLE_STATE_HIGH ((uint16_t)0x0100) /*!< idle state of channel output is high */\r\n#define TIMER_OC_IDLE_STATE_LOW  ((uint16_t)0x0000) /*!< idle state of channel output is low */\r\n\r\n/* idle state of channel complementary output */\r\n#define TIMER_OCN_IDLE_STATE_HIGH ((uint16_t)0x0200U) /*!< idle state of channel complementary output is high */\r\n#define TIMER_OCN_IDLE_STATE_LOW  ((uint16_t)0x0000U) /*!< idle state of channel complementary output is low */\r\n\r\n/* channel output compare mode */\r\n#define TIMER_OC_MODE_TIMING   ((uint16_t)0x0000U) /*!< timing mode */\r\n#define TIMER_OC_MODE_ACTIVE   ((uint16_t)0x0010U) /*!< active mode */\r\n#define TIMER_OC_MODE_INACTIVE ((uint16_t)0x0020U) /*!< inactive mode */\r\n#define TIMER_OC_MODE_TOGGLE   ((uint16_t)0x0030U) /*!< toggle mode */\r\n#define TIMER_OC_MODE_LOW      ((uint16_t)0x0040U) /*!< force low mode */\r\n#define TIMER_OC_MODE_HIGH     ((uint16_t)0x0050U) /*!< force high mode */\r\n#define TIMER_OC_MODE_PWM0     ((uint16_t)0x0060U) /*!< PWM0 mode */\r\n#define TIMER_OC_MODE_PWM1     ((uint16_t)0x0070U) /*!< PWM1 mode */\r\n\r\n/* channel output compare shadow enable */\r\n#define TIMER_OC_SHADOW_ENABLE  ((uint16_t)0x0008U) /*!< channel output shadow state enable */\r\n#define TIMER_OC_SHADOW_DISABLE ((uint16_t)0x0000U) /*!< channel output shadow state disable */\r\n\r\n/* channel output compare fast enable */\r\n#define TIMER_OC_FAST_ENABLE  ((uint16_t)0x0004) /*!< channel output fast function enable */\r\n#define TIMER_OC_FAST_DISABLE ((uint16_t)0x0000) /*!< channel output fast function disable */\r\n\r\n/* channel output compare clear enable */\r\n#define TIMER_OC_CLEAR_ENABLE  ((uint16_t)0x0080U) /*!< channel output clear function enable */\r\n#define TIMER_OC_CLEAR_DISABLE ((uint16_t)0x0000U) /*!< channel output clear function disable */\r\n\r\n/* channel control shadow register update control */\r\n#define TIMER_UPDATECTL_CCU    ((uint32_t)0x00000000U) /*!< the shadow registers update by when CMTG bit is set */\r\n#define TIMER_UPDATECTL_CCUTRI TIMER_CTL1_CCUC         /*!< the shadow registers update by when CMTG bit is set or an rising edge of TRGI occurs */\r\n\r\n/* channel input capture polarity */\r\n#define TIMER_IC_POLARITY_RISING    ((uint16_t)0x0000U) /*!< input capture rising edge */\r\n#define TIMER_IC_POLARITY_FALLING   ((uint16_t)0x0002U) /*!< input capture falling edge */\r\n#define TIMER_IC_POLARITY_BOTH_EDGE ((uint16_t)0x000AU) /*!< input capture both edge */\r\n\r\n/* TIMER input capture selection */\r\n#define TIMER_IC_SELECTION_DIRECTTI   ((uint16_t)0x0001U) /*!< channel n is configured as input and icy is mapped on CIy */\r\n#define TIMER_IC_SELECTION_INDIRECTTI ((uint16_t)0x0002U) /*!< channel n is configured as input and icy is mapped on opposite input */\r\n#define TIMER_IC_SELECTION_ITS        ((uint16_t)0x0003U) /*!< channel n is configured as input and icy is mapped on ITS */\r\n\r\n/* channel input capture prescaler */\r\n#define TIMER_IC_PSC_DIV1 ((uint16_t)0x0000U) /*!< no prescaler */\r\n#define TIMER_IC_PSC_DIV2 ((uint16_t)0x0004U) /*!< divided by 2 */\r\n#define TIMER_IC_PSC_DIV4 ((uint16_t)0x0008U) /*!< divided by 4 */\r\n#define TIMER_IC_PSC_DIV8 ((uint16_t)0x000CU) /*!< divided by 8 */\r\n\r\n/* trigger selection */\r\n#define SMCFG_TRGSEL(regval)       (BITS(4, 6) & ((uint32_t)(regval) << 4U))\r\n#define TIMER_SMCFG_TRGSEL_ITI0    SMCFG_TRGSEL(0) /*!< internal trigger 0 */\r\n#define TIMER_SMCFG_TRGSEL_ITI1    SMCFG_TRGSEL(1) /*!< internal trigger 1 */\r\n#define TIMER_SMCFG_TRGSEL_ITI2    SMCFG_TRGSEL(2) /*!< internal trigger 2 */\r\n#define TIMER_SMCFG_TRGSEL_ITI3    SMCFG_TRGSEL(3) /*!< internal trigger 3 */\r\n#define TIMER_SMCFG_TRGSEL_CI0F_ED SMCFG_TRGSEL(4) /*!< TI0 Edge Detector */\r\n#define TIMER_SMCFG_TRGSEL_CI0FE0  SMCFG_TRGSEL(5) /*!< filtered TIMER input 0 */\r\n#define TIMER_SMCFG_TRGSEL_CI1FE1  SMCFG_TRGSEL(6) /*!< filtered TIMER input 1 */\r\n#define TIMER_SMCFG_TRGSEL_ETIFP   SMCFG_TRGSEL(7) /*!< filtered external trigger input */\r\n\r\n/* master mode control */\r\n#define CTL1_MMC(regval)         (BITS(4, 6) & ((uint32_t)(regval) << 4U))\r\n#define TIMER_TRI_OUT_SRC_RESET  CTL1_MMC(0) /*!< the UPG bit as trigger output */\r\n#define TIMER_TRI_OUT_SRC_ENABLE CTL1_MMC(1) /*!< the counter enable signal TIMER_CTL0_CEN as trigger output */\r\n#define TIMER_TRI_OUT_SRC_UPDATE CTL1_MMC(2) /*!< update event as trigger output */\r\n#define TIMER_TRI_OUT_SRC_CH0    CTL1_MMC(3) /*!< a capture or a compare match occurred in channel 0 as trigger output TRGO */\r\n#define TIMER_TRI_OUT_SRC_O0CPRE CTL1_MMC(4) /*!< O0CPRE as trigger output */\r\n#define TIMER_TRI_OUT_SRC_O1CPRE CTL1_MMC(5) /*!< O1CPRE as trigger output */\r\n#define TIMER_TRI_OUT_SRC_O2CPRE CTL1_MMC(6) /*!< O2CPRE as trigger output */\r\n#define TIMER_TRI_OUT_SRC_O3CPRE CTL1_MMC(7) /*!< O3CPRE as trigger output */\r\n\r\n/* slave mode control */\r\n#define SMCFG_SMC(regval)          (BITS(0, 2) & ((uint32_t)(regval) << 0U))\r\n#define TIMER_SLAVE_MODE_DISABLE   SMCFG_SMC(0) /*!< slave mode disable */\r\n#define TIMER_ENCODER_MODE0        SMCFG_SMC(1) /*!< encoder mode 0 */\r\n#define TIMER_ENCODER_MODE1        SMCFG_SMC(2) /*!< encoder mode 1 */\r\n#define TIMER_ENCODER_MODE2        SMCFG_SMC(3) /*!< encoder mode 2 */\r\n#define TIMER_SLAVE_MODE_RESTART   SMCFG_SMC(4) /*!< restart mode */\r\n#define TIMER_SLAVE_MODE_PAUSE     SMCFG_SMC(5) /*!< pause mode */\r\n#define TIMER_SLAVE_MODE_EVENT     SMCFG_SMC(6) /*!< event mode */\r\n#define TIMER_SLAVE_MODE_EXTERNAL0 SMCFG_SMC(7) /*!< external clock mode 0 */\r\n\r\n/* master slave mode selection */\r\n#define TIMER_MASTER_SLAVE_MODE_ENABLE  TIMER_SMCFG_MSM         /*!< master slave mode enable */\r\n#define TIMER_MASTER_SLAVE_MODE_DISABLE ((uint32_t)0x00000000U) /*!< master slave mode disable */\r\n\r\n/* external trigger prescaler */\r\n#define SMCFG_ETPSC(regval)    (BITS(12, 13) & ((uint32_t)(regval) << 12U))\r\n#define TIMER_EXT_TRI_PSC_OFF  SMCFG_ETPSC(0) /*!< no divided */\r\n#define TIMER_EXT_TRI_PSC_DIV2 SMCFG_ETPSC(1) /*!< divided by 2 */\r\n#define TIMER_EXT_TRI_PSC_DIV4 SMCFG_ETPSC(2) /*!< divided by 4 */\r\n#define TIMER_EXT_TRI_PSC_DIV8 SMCFG_ETPSC(3) /*!< divided by 8 */\r\n\r\n/* external trigger polarity */\r\n#define TIMER_ETP_FALLING TIMER_SMCFG_ETP         /*!< active low or falling edge active */\r\n#define TIMER_ETP_RISING  ((uint32_t)0x00000000U) /*!< active high or rising edge active */\r\n\r\n/* channel 0 trigger input selection */\r\n#define TIMER_HALLINTERFACE_ENABLE  TIMER_CTL1_TI0S         /*!< TIMER hall sensor mode enable */\r\n#define TIMER_HALLINTERFACE_DISABLE ((uint32_t)0x00000000U) /*!< TIMER hall sensor mode disable */\r\n\r\n/* TIMERx(x=0..4) write CHxVAL register selection */\r\n#define TIMER_CHVSEL_ENABLE  ((uint16_t)TIMER_CFG_OUTSEL) /*!< write CHxVAL register selection enable */\r\n#define TIMER_CHVSEL_DISABLE ((uint16_t)0x0000U)          /*!< write CHxVAL register selection disable */\r\n\r\n/* function declarations */\r\n/* TIMER timebase */\r\n/* deinit a timer */\r\nvoid timer_deinit(uint32_t timer_periph);\r\n/* initialize TIMER init parameter struct */\r\nvoid timer_struct_para_init(timer_parameter_struct *initpara);\r\n/* initialize TIMER counter */\r\nvoid timer_init(uint32_t timer_periph, timer_parameter_struct *initpara);\r\n/* enable a timer */\r\nvoid timer_enable(uint32_t timer_periph);\r\n/* disable a timer */\r\nvoid timer_disable(uint32_t timer_periph);\r\n/* enable the auto reload shadow function */\r\nvoid timer_auto_reload_shadow_enable(uint32_t timer_periph);\r\n/* disable the auto reload shadow function */\r\nvoid timer_auto_reload_shadow_disable(uint32_t timer_periph);\r\n/* enable the update event */\r\nvoid timer_update_event_enable(uint32_t timer_periph);\r\n/* disable the update event */\r\nvoid timer_update_event_disable(uint32_t timer_periph);\r\n/* set TIMER counter alignment mode */\r\nvoid timer_counter_alignment(uint32_t timer_periph, uint16_t aligned);\r\n/* set TIMER counter up direction */\r\nvoid timer_counter_up_direction(uint32_t timer_periph);\r\n/* set TIMER counter down direction */\r\nvoid timer_counter_down_direction(uint32_t timer_periph);\r\n\r\n/* configure TIMER prescaler */\r\nvoid timer_prescaler_config(uint32_t timer_periph, uint16_t prescaler, uint32_t pscreload);\r\n/* configure TIMER repetition register value */\r\nvoid timer_repetition_value_config(uint32_t timer_periph, uint16_t repetition);\r\n/* configure TIMER autoreload register value */\r\nvoid timer_autoreload_value_config(uint32_t timer_periph, uint16_t autoreload);\r\n/* configure TIMER counter register value */\r\nvoid timer_counter_value_config(uint32_t timer_periph, uint16_t counter);\r\n/* read TIMER counter value */\r\nuint32_t timer_counter_read(uint32_t timer_periph);\r\n/* read TIMER prescaler value */\r\nuint16_t timer_prescaler_read(uint32_t timer_periph);\r\n/* configure TIMER single pulse mode */\r\nvoid timer_single_pulse_mode_config(uint32_t timer_periph, uint32_t spmode);\r\n/* configure TIMER update source */\r\nvoid timer_update_source_config(uint32_t timer_periph, uint32_t update);\r\n\r\n/* TIMER DMA and event */\r\n/* enable the TIMER DMA */\r\nvoid timer_dma_enable(uint32_t timer_periph, uint16_t dma);\r\n/* disable the TIMER DMA */\r\nvoid timer_dma_disable(uint32_t timer_periph, uint16_t dma);\r\n/* channel DMA request source selection */\r\nvoid timer_channel_dma_request_source_select(uint32_t timer_periph, uint32_t dma_request);\r\n/* configure the TIMER DMA transfer */\r\nvoid timer_dma_transfer_config(uint32_t timer_periph, uint32_t dma_baseaddr, uint32_t dma_lenth);\r\n/* software generate events */\r\nvoid timer_event_software_generate(uint32_t timer_periph, uint16_t event);\r\n\r\n/* TIMER channel complementary protection */\r\n/* initialize TIMER break parameter struct */\r\nvoid timer_break_struct_para_init(timer_break_parameter_struct *breakpara);\r\n/* configure TIMER break function */\r\nvoid timer_break_config(uint32_t timer_periph, timer_break_parameter_struct *breakpara);\r\n/* enable TIMER break function */\r\nvoid timer_break_enable(uint32_t timer_periph);\r\n/* disable TIMER break function */\r\nvoid timer_break_disable(uint32_t timer_periph);\r\n/* enable TIMER output automatic function */\r\nvoid timer_automatic_output_enable(uint32_t timer_periph);\r\n/* disable TIMER output automatic function */\r\nvoid timer_automatic_output_disable(uint32_t timer_periph);\r\n/* enable or disable TIMER primary output function */\r\nvoid timer_primary_output_config(uint32_t timer_periph, ControlStatus newvalue);\r\n/* enable or disable channel capture/compare control shadow register */\r\nvoid timer_channel_control_shadow_config(uint32_t timer_periph, ControlStatus newvalue);\r\n/* configure TIMER channel control shadow register update control */\r\nvoid timer_channel_control_shadow_update_config(uint32_t timer_periph, uint32_t ccuctl);\r\n\r\n/* TIMER channel output */\r\n/* initialize TIMER channel output parameter struct */\r\nvoid timer_channel_output_struct_para_init(timer_oc_parameter_struct *ocpara);\r\n/* configure TIMER channel output function */\r\nvoid timer_channel_output_config(uint32_t timer_periph, uint16_t channel, timer_oc_parameter_struct *ocpara);\r\n/* configure TIMER channel output compare mode */\r\nvoid timer_channel_output_mode_config(uint32_t timer_periph, uint16_t channel, uint16_t ocmode);\r\n/* configure TIMER channel output pulse value */\r\nvoid timer_channel_output_pulse_value_config(uint32_t timer_periph, uint16_t channel, uint32_t pulse);\r\n/* configure TIMER channel output shadow function */\r\nvoid timer_channel_output_shadow_config(uint32_t timer_periph, uint16_t channel, uint16_t ocshadow);\r\n/* configure TIMER channel output fast function */\r\nvoid timer_channel_output_fast_config(uint32_t timer_periph, uint16_t channel, uint16_t ocfast);\r\n/* configure TIMER channel output clear function */\r\nvoid timer_channel_output_clear_config(uint32_t timer_periph, uint16_t channel, uint16_t occlear);\r\n/* configure TIMER channel output polarity */\r\nvoid timer_channel_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocpolarity);\r\n/* configure TIMER channel complementary output polarity */\r\nvoid timer_channel_complementary_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnpolarity);\r\n/* configure TIMER channel enable state */\r\nvoid timer_channel_output_state_config(uint32_t timer_periph, uint16_t channel, uint32_t state);\r\n/* configure TIMER channel complementary output enable state */\r\nvoid timer_channel_complementary_output_state_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnstate);\r\n\r\n/* TIMER channel input */\r\n/* initialize TIMER channel input parameter struct */\r\nvoid timer_channel_input_struct_para_init(timer_ic_parameter_struct *icpara);\r\n/* configure TIMER input capture parameter */\r\nvoid timer_input_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct *icpara);\r\n/* configure TIMER channel input capture prescaler value */\r\nvoid timer_channel_input_capture_prescaler_config(uint32_t timer_periph, uint16_t channel, uint16_t prescaler);\r\n/* read TIMER channel capture compare register value */\r\nuint32_t timer_channel_capture_value_register_read(uint32_t timer_periph, uint16_t channel);\r\n/* configure TIMER input pwm capture function */\r\nvoid timer_input_pwm_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct *icpwm);\r\n/* configure TIMER hall sensor mode */\r\nvoid timer_hall_mode_config(uint32_t timer_periph, uint32_t hallmode);\r\n\r\n/* TIMER master and slave mode */\r\n/* select TIMER input trigger source */\r\nvoid timer_input_trigger_source_select(uint32_t timer_periph, uint32_t intrigger);\r\n/* select TIMER master mode output trigger source */\r\nvoid timer_master_output_trigger_source_select(uint32_t timer_periph, uint32_t outrigger);\r\n/* select TIMER slave mode */\r\nvoid timer_slave_mode_select(uint32_t timer_periph, uint32_t slavemode);\r\n/* configure TIMER master slave mode */\r\nvoid timer_master_slave_mode_config(uint32_t timer_periph, uint32_t masterslave);\r\n/* configure TIMER external trigger input */\r\nvoid timer_external_trigger_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter);\r\n/* configure TIMER quadrature decoder mode */\r\nvoid timer_quadrature_decoder_mode_config(uint32_t timer_periph, uint32_t decomode, uint16_t ic0polarity, uint16_t ic1polarity);\r\n/* configure TIMER internal clock mode */\r\nvoid timer_internal_clock_config(uint32_t timer_periph);\r\n/* configure TIMER the internal trigger as external clock input */\r\nvoid timer_internal_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t intrigger);\r\n/* configure TIMER the external trigger as external clock input */\r\nvoid timer_external_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t extrigger, uint16_t extpolarity, uint32_t extfilter);\r\n/* configure TIMER the external clock mode 0 */\r\nvoid timer_external_clock_mode0_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter);\r\n/* configure TIMER the external clock mode 1 */\r\nvoid timer_external_clock_mode1_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter);\r\n/* disable TIMER the external clock mode 1 */\r\nvoid timer_external_clock_mode1_disable(uint32_t timer_periph);\r\n\r\n/* TIMER interrupt and flag */\r\n/* enable the TIMER interrupt */\r\nvoid timer_interrupt_enable(uint32_t timer_periph, uint32_t interrupt);\r\n/* disable the TIMER interrupt */\r\nvoid timer_interrupt_disable(uint32_t timer_periph, uint32_t interrupt);\r\n/* get TIMER interrupt flag */\r\nFlagStatus timer_interrupt_flag_get(uint32_t timer_periph, uint32_t interrupt);\r\n/* clear TIMER interrupt flag */\r\nvoid timer_interrupt_flag_clear(uint32_t timer_periph, uint32_t interrupt);\r\n/* get TIMER flag */\r\nFlagStatus timer_flag_get(uint32_t timer_periph, uint32_t flag);\r\n/* clear TIMER flag */\r\nvoid timer_flag_clear(uint32_t timer_periph, uint32_t flag);\r\n\r\n#endif /* GD32VF103_TIMER_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_usart.h",
    "content": "/*!\r\n    \\file    gd32vf103_usart.h\r\n    \\brief   definitions for the USART\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2019-09-18, V1.0.1, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_USART_H\r\n#define GD32VF103_USART_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* USARTx(x=0,1,2)/UARTx(x=3,4) definitions */\r\n#define USART1 USART_BASE                   /*!< USART1 base address */\r\n#define USART2 (USART_BASE + (0x00000400U)) /*!< USART2 base address */\r\n#define UART3  (USART_BASE + (0x00000800U)) /*!< UART3 base address */\r\n#define UART4  (USART_BASE + (0x00000C00U)) /*!< UART4 base address */\r\n#define USART0 (USART_BASE + (0x0000F400U)) /*!< USART0 base address */\r\n\r\n/* registers definitions */\r\n#define USART_STAT(usartx) REG32((usartx) + (0x00000000U)) /*!< USART status register */\r\n#define USART_DATA(usartx) REG32((usartx) + (0x00000004U)) /*!< USART data register */\r\n#define USART_BAUD(usartx) REG32((usartx) + (0x00000008U)) /*!< USART baud rate register */\r\n#define USART_CTL0(usartx) REG32((usartx) + (0x0000000CU)) /*!< USART control register 0 */\r\n#define USART_CTL1(usartx) REG32((usartx) + (0x00000010U)) /*!< USART control register 1 */\r\n#define USART_CTL2(usartx) REG32((usartx) + (0x00000014U)) /*!< USART control register 2 */\r\n#define USART_GP(usartx)   REG32((usartx) + (0x00000018U)) /*!< USART guard time and prescaler register */\r\n\r\n/* bits definitions */\r\n/* USARTx_STAT */\r\n#define USART_STAT_PERR  BIT(0) /*!< parity error flag */\r\n#define USART_STAT_FERR  BIT(1) /*!< frame error flag */\r\n#define USART_STAT_NERR  BIT(2) /*!< noise error flag */\r\n#define USART_STAT_ORERR BIT(3) /*!< overrun error */\r\n#define USART_STAT_IDLEF BIT(4) /*!< IDLE frame detected flag */\r\n#define USART_STAT_RBNE  BIT(5) /*!< read data buffer not empty */\r\n#define USART_STAT_TC    BIT(6) /*!< transmission complete */\r\n#define USART_STAT_TBE   BIT(7) /*!< transmit data buffer empty */\r\n#define USART_STAT_LBDF  BIT(8) /*!< LIN break detected flag */\r\n#define USART_STAT_CTSF  BIT(9) /*!< CTS change flag */\r\n\r\n/* USARTx_DATA */\r\n#define USART_DATA_DATA BITS(0, 8) /*!< transmit or read data value */\r\n\r\n/* USARTx_BAUD */\r\n#define USART_BAUD_FRADIV BITS(0, 3)  /*!< fraction part of baud-rate divider */\r\n#define USART_BAUD_INTDIV BITS(4, 15) /*!< integer part of baud-rate divider */\r\n\r\n/* USARTx_CTL0 */\r\n#define USART_CTL0_SBKCMD BIT(0)  /*!< send break command */\r\n#define USART_CTL0_RWU    BIT(1)  /*!< receiver wakeup from mute mode */\r\n#define USART_CTL0_REN    BIT(2)  /*!< receiver enable */\r\n#define USART_CTL0_TEN    BIT(3)  /*!< transmitter enable */\r\n#define USART_CTL0_IDLEIE BIT(4)  /*!< idle line detected interrupt enable */\r\n#define USART_CTL0_RBNEIE BIT(5)  /*!< read data buffer not empty interrupt and overrun error interrupt enable */\r\n#define USART_CTL0_TCIE   BIT(6)  /*!< transmission complete interrupt enable */\r\n#define USART_CTL0_TBEIE  BIT(7)  /*!< transmitter buffer empty interrupt enable */\r\n#define USART_CTL0_PERRIE BIT(8)  /*!< parity error interrupt enable */\r\n#define USART_CTL0_PM     BIT(9)  /*!< parity mode */\r\n#define USART_CTL0_PCEN   BIT(10) /*!< parity check function enable */\r\n#define USART_CTL0_WM     BIT(11) /*!< wakeup method in mute mode */\r\n#define USART_CTL0_WL     BIT(12) /*!< word length */\r\n#define USART_CTL0_UEN    BIT(13) /*!< USART enable */\r\n\r\n/* USARTx_CTL1 */\r\n#define USART_CTL1_ADDR  BITS(0, 3)   /*!< address of USART */\r\n#define USART_CTL1_LBLEN BIT(5)       /*!< LIN break frame length */\r\n#define USART_CTL1_LBDIE BIT(6)       /*!< LIN break detected interrupt eanble */\r\n#define USART_CTL1_CLEN  BIT(8)       /*!< CK length */\r\n#define USART_CTL1_CPH   BIT(9)       /*!< CK phase */\r\n#define USART_CTL1_CPL   BIT(10)      /*!< CK polarity */\r\n#define USART_CTL1_CKEN  BIT(11)      /*!< CK pin enable */\r\n#define USART_CTL1_STB   BITS(12, 13) /*!< STOP bits length */\r\n#define USART_CTL1_LMEN  BIT(14)      /*!< LIN mode enable */\r\n\r\n/* USARTx_CTL2 */\r\n#define USART_CTL2_ERRIE BIT(0)  /*!< error interrupt enable */\r\n#define USART_CTL2_IREN  BIT(1)  /*!< IrDA mode enable */\r\n#define USART_CTL2_IRLP  BIT(2)  /*!< IrDA low-power */\r\n#define USART_CTL2_HDEN  BIT(3)  /*!< half-duplex enable */\r\n#define USART_CTL2_NKEN  BIT(4)  /*!< NACK enable in smartcard mode */\r\n#define USART_CTL2_SCEN  BIT(5)  /*!< smartcard mode enable */\r\n#define USART_CTL2_DENR  BIT(6)  /*!< DMA request enable for reception */\r\n#define USART_CTL2_DENT  BIT(7)  /*!< DMA request enable for transmission */\r\n#define USART_CTL2_RTSEN BIT(8)  /*!< RTS enable */\r\n#define USART_CTL2_CTSEN BIT(9)  /*!< CTS enable */\r\n#define USART_CTL2_CTSIE BIT(10) /*!< CTS interrupt enable */\r\n\r\n/* USARTx_GP */\r\n#define USART_GP_PSC  BITS(0, 7)  /*!< prescaler value for dividing the system clock */\r\n#define USART_GP_GUAT BITS(8, 15) /*!< guard time value in smartcard mode */\r\n\r\n/* constants definitions */\r\n/* define the USART bit position and its register index offset */\r\n#define USART_REGIDX_BIT(regidx, bitpos)                    (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos))\r\n#define USART_REG_VAL(usartx, offset)                       (REG32((usartx) + (((uint32_t)(offset) & (0x0000FFFFU)) >> 6)))\r\n#define USART_BIT_POS(val)                                  ((uint32_t)(val) & (0x0000001FU))\r\n#define USART_REGIDX_BIT2(regidx, bitpos, regidx2, bitpos2) (((uint32_t)(regidx2) << 22) | (uint32_t)((bitpos2) << 16) | (((uint32_t)(regidx) << 6) | (uint32_t)(bitpos)))\r\n#define USART_REG_VAL2(usartx, offset)                      (REG32((usartx) + ((uint32_t)(offset) >> 22)))\r\n#define USART_BIT_POS2(val)                                 (((uint32_t)(val) & (0x001F0000U)) >> 16)\r\n\r\n/* register offset */\r\n#define USART_STAT_REG_OFFSET (0x00000000U) /*!< STAT register offset */\r\n#define USART_CTL0_REG_OFFSET (0x0000000CU) /*!< CTL0 register offset */\r\n#define USART_CTL1_REG_OFFSET (0x00000010U) /*!< CTL1 register offset */\r\n#define USART_CTL2_REG_OFFSET (0x00000014U) /*!< CTL2 register offset */\r\n\r\n/* USART flags */\r\ntypedef enum {\r\n  /* flags in STAT register */\r\n  USART_FLAG_CTS   = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 9U), /*!< CTS change flag */\r\n  USART_FLAG_LBD   = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 8U), /*!< LIN break detected flag */\r\n  USART_FLAG_TBE   = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 7U), /*!< transmit data buffer empty */\r\n  USART_FLAG_TC    = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 6U), /*!< transmission complete */\r\n  USART_FLAG_RBNE  = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 5U), /*!< read data buffer not empty */\r\n  USART_FLAG_IDLE  = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 4U), /*!< IDLE frame detected flag */\r\n  USART_FLAG_ORERR = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 3U), /*!< overrun error */\r\n  USART_FLAG_NERR  = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 2U), /*!< noise error flag */\r\n  USART_FLAG_FERR  = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 1U), /*!< frame error flag */\r\n  USART_FLAG_PERR  = USART_REGIDX_BIT(USART_STAT_REG_OFFSET, 0U), /*!< parity error flag */\r\n} usart_flag_enum;\r\n\r\n/* USART interrupt flags */\r\ntypedef enum {\r\n  /* interrupt flags in CTL0 register */\r\n  USART_INT_FLAG_PERR       = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 8U, USART_STAT_REG_OFFSET, 0U), /*!< parity error interrupt and flag */\r\n  USART_INT_FLAG_TBE        = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 7U, USART_STAT_REG_OFFSET, 7U), /*!< transmitter buffer empty interrupt and flag */\r\n  USART_INT_FLAG_TC         = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 6U, USART_STAT_REG_OFFSET, 6U), /*!< transmission complete interrupt and flag */\r\n  USART_INT_FLAG_RBNE       = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 5U, USART_STAT_REG_OFFSET, 5U), /*!< read data buffer not empty interrupt and flag */\r\n  USART_INT_FLAG_RBNE_ORERR = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 5U, USART_STAT_REG_OFFSET, 3U), /*!< read data buffer not empty interrupt and overrun error flag */\r\n  USART_INT_FLAG_IDLE       = USART_REGIDX_BIT2(USART_CTL0_REG_OFFSET, 4U, USART_STAT_REG_OFFSET, 4U), /*!< IDLE line detected interrupt and flag */\r\n  /* interrupt flags in CTL1 register */\r\n  USART_INT_FLAG_LBD = USART_REGIDX_BIT2(USART_CTL1_REG_OFFSET, 6U, USART_STAT_REG_OFFSET, 8U), /*!< LIN break detected interrupt and flag */\r\n  /* interrupt flags in CTL2 register */\r\n  USART_INT_FLAG_CTS       = USART_REGIDX_BIT2(USART_CTL2_REG_OFFSET, 10U, USART_STAT_REG_OFFSET, 9U), /*!< CTS interrupt and flag */\r\n  USART_INT_FLAG_ERR_ORERR = USART_REGIDX_BIT2(USART_CTL2_REG_OFFSET, 0U, USART_STAT_REG_OFFSET, 3U),  /*!< error interrupt and overrun error */\r\n  USART_INT_FLAG_ERR_NERR  = USART_REGIDX_BIT2(USART_CTL2_REG_OFFSET, 0U, USART_STAT_REG_OFFSET, 2U),  /*!< error interrupt and noise error flag */\r\n  USART_INT_FLAG_ERR_FERR  = USART_REGIDX_BIT2(USART_CTL2_REG_OFFSET, 0U, USART_STAT_REG_OFFSET, 1U),  /*!< error interrupt and frame error flag */\r\n} usart_interrupt_flag_enum;\r\n\r\n/* USART interrupt enable or disable */\r\ntypedef enum {\r\n  /* interrupt in CTL0 register */\r\n  USART_INT_PERR = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 8U), /*!< parity error interrupt */\r\n  USART_INT_TBE  = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 7U), /*!< transmitter buffer empty interrupt */\r\n  USART_INT_TC   = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 6U), /*!< transmission complete interrupt */\r\n  USART_INT_RBNE = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 5U), /*!< read data buffer not empty interrupt and overrun error interrupt */\r\n  USART_INT_IDLE = USART_REGIDX_BIT(USART_CTL0_REG_OFFSET, 4U), /*!< IDLE line detected interrupt */\r\n  /* interrupt in CTL1 register */\r\n  USART_INT_LBD = USART_REGIDX_BIT(USART_CTL1_REG_OFFSET, 6U), /*!< LIN break detected interrupt */\r\n  /* interrupt in CTL2 register */\r\n  USART_INT_CTS = USART_REGIDX_BIT(USART_CTL2_REG_OFFSET, 10U), /*!< CTS interrupt */\r\n  USART_INT_ERR = USART_REGIDX_BIT(USART_CTL2_REG_OFFSET, 0U),  /*!< error interrupt */\r\n} usart_interrupt_enum;\r\n\r\n/* USART receiver configure */\r\n#define CTL0_REN(regval)      (BIT(2) & ((uint32_t)(regval) << 2))\r\n#define USART_RECEIVE_ENABLE  CTL0_REN(1) /*!< enable receiver */\r\n#define USART_RECEIVE_DISABLE CTL0_REN(0) /*!< disable receiver */\r\n\r\n/* USART transmitter configure */\r\n#define CTL0_TEN(regval)       (BIT(3) & ((uint32_t)(regval) << 3))\r\n#define USART_TRANSMIT_ENABLE  CTL0_TEN(1) /*!< enable transmitter */\r\n#define USART_TRANSMIT_DISABLE CTL0_TEN(0) /*!< disable transmitter */\r\n\r\n/* USART parity bits definitions */\r\n#define CTL0_PM(regval) (BITS(9, 10) & ((uint32_t)(regval) << 9))\r\n#define USART_PM_NONE   CTL0_PM(0) /*!< no parity */\r\n#define USART_PM_EVEN   CTL0_PM(2) /*!< even parity */\r\n#define USART_PM_ODD    CTL0_PM(3) /*!< odd parity */\r\n\r\n/* USART wakeup method in mute mode */\r\n#define CTL0_WM(regval) (BIT(11) & ((uint32_t)(regval) << 11))\r\n#define USART_WM_IDLE   CTL0_WM(0) /*!< idle line */\r\n#define USART_WM_ADDR   CTL0_WM(1) /*!< address match */\r\n\r\n/* USART word length definitions */\r\n#define CTL0_WL(regval) (BIT(12) & ((uint32_t)(regval) << 12))\r\n#define USART_WL_8BIT   CTL0_WL(0) /*!< 8 bits */\r\n#define USART_WL_9BIT   CTL0_WL(1) /*!< 9 bits */\r\n\r\n/* USART stop bits definitions */\r\n#define CTL1_STB(regval) (BITS(12, 13) & ((uint32_t)(regval) << 12))\r\n#define USART_STB_1BIT   CTL1_STB(0) /*!< 1 bit */\r\n#define USART_STB_0_5BIT CTL1_STB(1) /*!< 0.5 bit */\r\n#define USART_STB_2BIT   CTL1_STB(2) /*!< 2 bits */\r\n#define USART_STB_1_5BIT CTL1_STB(3) /*!< 1.5 bits */\r\n\r\n/* USART LIN break frame length */\r\n#define CTL1_LBLEN(regval) (BIT(5) & ((uint32_t)(regval) << 5))\r\n#define USART_LBLEN_10B    CTL1_LBLEN(0) /*!< 10 bits */\r\n#define USART_LBLEN_11B    CTL1_LBLEN(1) /*!< 11 bits */\r\n\r\n/* USART CK length */\r\n#define CTL1_CLEN(regval) (BIT(8) & ((uint32_t)(regval) << 8))\r\n#define USART_CLEN_NONE   CTL1_CLEN(0) /*!< there are 7 CK pulses for an 8 bit frame and 8 CK pulses for a 9 bit frame */\r\n#define USART_CLEN_EN     CTL1_CLEN(1) /*!< there are 8 CK pulses for an 8 bit frame and 9 CK pulses for a 9 bit frame */\r\n\r\n/* USART clock phase */\r\n#define CTL1_CPH(regval) (BIT(9) & ((uint32_t)(regval) << 9))\r\n#define USART_CPH_1CK    CTL1_CPH(0) /*!< first clock transition is the first data capture edge */\r\n#define USART_CPH_2CK    CTL1_CPH(1) /*!< second clock transition is the first data capture edge */\r\n\r\n/* USART clock polarity */\r\n#define CTL1_CPL(regval) (BIT(10) & ((uint32_t)(regval) << 10))\r\n#define USART_CPL_LOW    CTL1_CPL(0) /*!< steady low value on CK pin */\r\n#define USART_CPL_HIGH   CTL1_CPL(1) /*!< steady high value on CK pin */\r\n\r\n/* USART DMA request for receive configure */\r\n#define CLT2_DENR(regval)  (BIT(6) & ((uint32_t)(regval) << 6))\r\n#define USART_DENR_ENABLE  CLT2_DENR(1) /*!< DMA request enable for reception */\r\n#define USART_DENR_DISABLE CLT2_DENR(0) /*!< DMA request disable for reception */\r\n\r\n/* USART DMA request for transmission configure */\r\n#define CLT2_DENT(regval)  (BIT(7) & ((uint32_t)(regval) << 7))\r\n#define USART_DENT_ENABLE  CLT2_DENT(1) /*!< DMA request enable for transmission */\r\n#define USART_DENT_DISABLE CLT2_DENT(0) /*!< DMA request disable for transmission */\r\n\r\n/* USART RTS configure */\r\n#define CLT2_RTSEN(regval) (BIT(8) & ((uint32_t)(regval) << 8))\r\n#define USART_RTS_ENABLE   CLT2_RTSEN(1) /*!< RTS enable */\r\n#define USART_RTS_DISABLE  CLT2_RTSEN(0) /*!< RTS disable */\r\n\r\n/* USART CTS configure */\r\n#define CLT2_CTSEN(regval) (BIT(9) & ((uint32_t)(regval) << 9))\r\n#define USART_CTS_ENABLE   CLT2_CTSEN(1) /*!< CTS enable */\r\n#define USART_CTS_DISABLE  CLT2_CTSEN(0) /*!< CTS disable */\r\n\r\n/* USART IrDA low-power enable */\r\n#define CTL2_IRLP(regval) (BIT(2) & ((uint32_t)(regval) << 2))\r\n#define USART_IRLP_LOW    CTL2_IRLP(1) /*!< low-power */\r\n#define USART_IRLP_NORMAL CTL2_IRLP(0) /*!< normal */\r\n\r\n/* function declarations */\r\n/* initialization functions */\r\n/* reset USART */\r\nvoid usart_deinit(uint32_t usart_periph);\r\n/* configure USART baud rate value */\r\nvoid usart_baudrate_set(uint32_t usart_periph, uint32_t baudval);\r\n/* configure USART parity function */\r\nvoid usart_parity_config(uint32_t usart_periph, uint32_t paritycfg);\r\n/* configure USART word length */\r\nvoid usart_word_length_set(uint32_t usart_periph, uint32_t wlen);\r\n/* configure USART stop bit length */\r\nvoid usart_stop_bit_set(uint32_t usart_periph, uint32_t stblen);\r\n\r\n/* USART normal mode communication */\r\n/* enable USART */\r\nvoid usart_enable(uint32_t usart_periph);\r\n/* disable USART */\r\nvoid usart_disable(uint32_t usart_periph);\r\n/* configure USART transmitter */\r\nvoid usart_transmit_config(uint32_t usart_periph, uint32_t txconfig);\r\n/* configure USART receiver */\r\nvoid usart_receive_config(uint32_t usart_periph, uint32_t rxconfig);\r\n/* USART transmit data function */\r\nvoid usart_data_transmit(uint32_t usart_periph, uint32_t data);\r\n/* USART receive data function */\r\nuint16_t usart_data_receive(uint32_t usart_periph);\r\n\r\n/* multi-processor communication */\r\n/* configure address of the USART */\r\nvoid usart_address_config(uint32_t usart_periph, uint8_t addr);\r\n/* enable mute mode */\r\nvoid usart_mute_mode_enable(uint32_t usart_periph);\r\n/* disable mute mode */\r\nvoid usart_mute_mode_disable(uint32_t usart_periph);\r\n/* configure wakeup method in mute mode */\r\nvoid usart_mute_mode_wakeup_config(uint32_t usart_periph, uint32_t wmethod);\r\n\r\n/* LIN mode communication */\r\n/* LIN mode enable */\r\nvoid usart_lin_mode_enable(uint32_t usart_periph);\r\n/* LIN mode disable */\r\nvoid usart_lin_mode_disable(uint32_t usart_periph);\r\n/* LIN break detection length */\r\nvoid usart_lin_break_detection_length_config(uint32_t usart_periph, uint32_t lblen);\r\n/* send break frame */\r\nvoid usart_send_break(uint32_t usart_periph);\r\n\r\n/* half-duplex communication */\r\n/* half-duplex enable */\r\nvoid usart_halfduplex_enable(uint32_t usart_periph);\r\n/* half-duplex disable */\r\nvoid usart_halfduplex_disable(uint32_t usart_periph);\r\n\r\n/* synchronous communication */\r\n/* clock enable */\r\nvoid usart_synchronous_clock_enable(uint32_t usart_periph);\r\n/* clock disable */\r\nvoid usart_synchronous_clock_disable(uint32_t usart_periph);\r\n/* configure usart synchronous mode parameters */\r\nvoid usart_synchronous_clock_config(uint32_t usart_periph, uint32_t clen, uint32_t cph, uint32_t cpl);\r\n\r\n/* smartcard communication */\r\n/* guard time value configure in smartcard mode */\r\nvoid usart_guard_time_config(uint32_t usart_periph, uint32_t gaut);\r\n/* smartcard mode enable */\r\nvoid usart_smartcard_mode_enable(uint32_t usart_periph);\r\n/* smartcard mode disable */\r\nvoid usart_smartcard_mode_disable(uint32_t usart_periph);\r\n/* NACK enable in smartcard mode */\r\nvoid usart_smartcard_mode_nack_enable(uint32_t usart_periph);\r\n/* NACK disable in smartcard mode */\r\nvoid usart_smartcard_mode_nack_disable(uint32_t usart_periph);\r\n\r\n/* IrDA communication */\r\n/* enable IrDA mode */\r\nvoid usart_irda_mode_enable(uint32_t usart_periph);\r\n/* disable IrDA mode */\r\nvoid usart_irda_mode_disable(uint32_t usart_periph);\r\n/* configure the peripheral clock prescaler */\r\nvoid usart_prescaler_config(uint32_t usart_periph, uint8_t psc);\r\n/* configure IrDA low-power */\r\nvoid usart_irda_lowpower_config(uint32_t usart_periph, uint32_t irlp);\r\n\r\n/* hardware flow communication */\r\n/* configure hardware flow control RTS */\r\nvoid usart_hardware_flow_rts_config(uint32_t usart_periph, uint32_t rtsconfig);\r\n/* configure hardware flow control CTS */\r\nvoid usart_hardware_flow_cts_config(uint32_t usart_periph, uint32_t ctsconfig);\r\n\r\n/* configure USART DMA for reception */\r\nvoid usart_dma_receive_config(uint32_t usart_periph, uint32_t dmacmd);\r\n/* configure USART DMA for transmission */\r\nvoid usart_dma_transmit_config(uint32_t usart_periph, uint32_t dmacmd);\r\n\r\n/* flag functions */\r\n/* get flag in STAT register */\r\nFlagStatus usart_flag_get(uint32_t usart_periph, usart_flag_enum flag);\r\n/* clear flag in STAT register */\r\nvoid usart_flag_clear(uint32_t usart_periph, usart_flag_enum flag);\r\n\r\n/* interrupt functions */\r\n/* enable USART interrupt */\r\nvoid usart_interrupt_enable(uint32_t usart_periph, uint32_t interrupt);\r\n/* disable USART interrupt */\r\nvoid usart_interrupt_disable(uint32_t usart_periph, uint32_t interrupt);\r\n/* get USART interrupt and flag status */\r\nFlagStatus usart_interrupt_flag_get(uint32_t usart_periph, uint32_t int_flag);\r\n/* clear interrupt flag in STAT register */\r\nvoid usart_interrupt_flag_clear(uint32_t usart_periph, uint32_t int_flag);\r\n#endif /* GD32VF103_USART_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/gd32vf103_wwdgt.h",
    "content": "/*!\r\n    \\file    gd32vf103_wwdgt.h\r\n    \\brief   definitions for the WWDGT\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#ifndef GD32VF103_WWDGT_H\r\n#define GD32VF103_WWDGT_H\r\n\r\n#include \"gd32vf103.h\"\r\n\r\n/* WWDGT definitions */\r\n#define WWDGT WWDGT_BASE /*!< WWDGT base address */\r\n\r\n/* registers definitions */\r\n#define WWDGT_CTL  REG32((WWDGT) + 0x00000000U) /*!< WWDGT control register */\r\n#define WWDGT_CFG  REG32((WWDGT) + 0x00000004U) /*!< WWDGT configuration register */\r\n#define WWDGT_STAT REG32((WWDGT) + 0x00000008U) /*!< WWDGT status register */\r\n\r\n/* bits definitions */\r\n/* WWDGT_CTL */\r\n#define WWDGT_CTL_CNT    BITS(0, 6) /*!< WWDGT counter value */\r\n#define WWDGT_CTL_WDGTEN BIT(7)     /*!< WWDGT counter enable */\r\n\r\n/* WWDGT_CFG */\r\n#define WWDGT_CFG_WIN  BITS(0, 6) /*!< WWDGT counter window value */\r\n#define WWDGT_CFG_PSC  BITS(7, 8) /*!< WWDGT prescaler divider value */\r\n#define WWDGT_CFG_EWIE BIT(9)     /*!< early wakeup interrupt enable */\r\n\r\n/* WWDGT_STAT */\r\n#define WWDGT_STAT_EWIF BIT(0) /*!< early wakeup interrupt flag */\r\n\r\n/* constants definitions */\r\n#define CFG_PSC(regval)    (BITS(7, 8) & ((uint32_t)(regval) << 7)) /*!< write value to WWDGT_CFG_PSC bit field */\r\n#define WWDGT_CFG_PSC_DIV1 CFG_PSC(0)                               /*!< the time base of WWDGT = (PCLK1/4096)/1 */\r\n#define WWDGT_CFG_PSC_DIV2 CFG_PSC(1)                               /*!< the time base of WWDGT = (PCLK1/4096)/2 */\r\n#define WWDGT_CFG_PSC_DIV4 CFG_PSC(2)                               /*!< the time base of WWDGT = (PCLK1/4096)/4 */\r\n#define WWDGT_CFG_PSC_DIV8 CFG_PSC(3)                               /*!< the time base of WWDGT = (PCLK1/4096)/8 */\r\n\r\n/* function declarations */\r\n/* reset the window watchdog timer configuration */\r\nvoid wwdgt_deinit(void);\r\n/* start the window watchdog timer counter */\r\nvoid wwdgt_enable(void);\r\n\r\n/* configure the window watchdog timer counter value */\r\nvoid wwdgt_counter_update(uint16_t counter_value);\r\n/* configure counter value, window value, and prescaler divider value */\r\nvoid wwdgt_config(uint16_t counter, uint16_t window, uint32_t prescaler);\r\n\r\n/* enable early wakeup interrupt of WWDGT */\r\nvoid wwdgt_interrupt_enable(void);\r\n/* check early wakeup interrupt state of WWDGT */\r\nFlagStatus wwdgt_flag_get(void);\r\n/* clear early wakeup interrupt state of WWDGT */\r\nvoid wwdgt_flag_clear(void);\r\n\r\n#endif /* GD32VF103_WWDGT_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/n200_func.h",
    "content": "/* See LICENSE file for licence details */\r\n\r\n#ifndef N200_FUNC_H\r\n#define N200_FUNC_H\r\n\r\n#include <stddef.h>\r\n\r\n#define ECLIC_GROUP_LEVEL0_PRIO4 0\r\n#define ECLIC_GROUP_LEVEL1_PRIO3 1\r\n#define ECLIC_GROUP_LEVEL2_PRIO2 2\r\n#define ECLIC_GROUP_LEVEL3_PRIO1 3\r\n#define ECLIC_GROUP_LEVEL4_PRIO0 4\r\n\r\nvoid pmp_open_all_space(void);\r\n\r\nvoid switch_m2u_mode(void);\r\n\r\nuint32_t get_mtime_freq(void);\r\n\r\nuint32_t mtime_lo(void);\r\n\r\nuint32_t mtime_hi(void);\r\n\r\nuint64_t get_mtime_value(void);\r\n\r\nuint64_t get_instret_value(void);\r\n\r\nuint64_t get_cycle_value(void);\r\n\r\nuint32_t __attribute__((noinline)) measure_cpu_freq(size_t n);\r\n\r\n/* ECLIC relevant functions */\r\nvoid     eclic_init(uint32_t num_irq);\r\nuint64_t get_timer_value(void);\r\nvoid     eclic_enable_interrupt(uint32_t source);\r\nvoid     eclic_disable_interrupt(uint32_t source);\r\n\r\nvoid eclic_set_pending(uint32_t source);\r\nvoid eclic_clear_pending(uint32_t source);\r\n\r\nvoid    eclic_set_intctrl(uint32_t source, uint8_t intctrl);\r\nuint8_t eclic_get_intctrl(uint32_t source);\r\n\r\nvoid    eclic_set_intattr(uint32_t source, uint8_t intattr);\r\nuint8_t eclic_get_intattr(uint32_t source);\r\n\r\nvoid    eclic_set_cliccfg(uint8_t cliccfg);\r\nuint8_t eclic_get_cliccfg(void);\r\n\r\nvoid    eclic_set_mth(uint8_t mth);\r\nuint8_t eclic_get_mth(void);\r\n\r\n/* sets nlbits */\r\nvoid eclic_set_nlbits(uint8_t nlbits);\r\n\r\n/* get nlbits */\r\nuint8_t eclic_get_nlbits(void);\r\n\r\nvoid    eclic_set_irq_lvl(uint32_t source, uint8_t lvl);\r\nuint8_t eclic_get_irq_lvl(uint32_t source);\r\n\r\nvoid    eclic_set_irq_lvl_abs(uint32_t source, uint8_t lvl_abs);\r\nuint8_t eclic_get_irq_lvl_abs(uint32_t source);\r\n\r\nuint8_t eclic_set_irq_priority(uint32_t source, uint8_t priority);\r\nuint8_t eclic_get_irq_priority(uint32_t source);\r\n\r\nvoid eclic_mode_enable(void);\r\n\r\nvoid eclic_set_vmode(uint32_t source);\r\nvoid eclic_set_nonvmode(uint32_t source);\r\n\r\nvoid eclic_set_level_trig(uint32_t source);\r\nvoid eclic_set_posedge_trig(uint32_t source);\r\nvoid eclic_set_negedge_trig(uint32_t source);\r\n\r\n#endif\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/nuclei_sdk_soc.h",
    "content": "// See LICENSE for license details.\n#ifndef _NUCLEI_SDK_SOC_H\n#define _NUCLEI_SDK_SOC_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"gd32vf103.h\"\n#include \"gd32vf103_libopt.h\"\n\n#ifdef __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/system_gd32vf103.h",
    "content": "/*\n * Copyright (c) 2009-2018 Arm Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/*******************************************************************************\n * @file     system_gd32vf103.h\n * @brief    NMSIS Nuclei N/NX Device Peripheral Access Layer Header File for\n *           Device gd32vf103\n * @version  V1.00\n * @date     7. Jan 2020\n ******************************************************************************/\n\n#ifndef __SYSTEM_GD32VF103_H__\n#define __SYSTEM_GD32VF103_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <stdint.h>\n\nextern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock)  */\n\n/**\n  \\brief Setup the microcontroller system.\n\n   Initialize the System and update the SystemCoreClock variable.\n */\nextern void SystemInit(void);\n\n/**\n  \\brief  Update SystemCoreClock variable.\n\n   Updates the SystemCoreClock with current core Clock retrieved from cpu registers.\n */\nextern void SystemCoreClockUpdate(void);\n\n/**\n * \\brief Register an exception handler for exception code EXCn\n */\nextern void Exception_Register_EXC(uint32_t EXCn, unsigned long exc_handler);\n\n/**\n * \\brief Get current exception handler for exception code EXCn\n */\nextern unsigned long Exception_Get_EXC(uint32_t EXCn);\n\n/**\n * \\brief Initialize eclic config\n */\nextern void ECLIC_Init(void);\n\n/**\n * \\brief  Initialize a specific IRQ and register the handler\n * \\details\n * This function set vector mode, trigger mode and polarity, interrupt level and priority,\n * assign handler for specific IRQn.\n */\nextern int32_t ECLIC_Register_IRQ(IRQn_Type IRQn, uint8_t shv, ECLIC_TRIGGER_Type trig_mode, uint8_t lvl, uint8_t priority, void *handler);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __SYSTEM_GD32VF103_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/Usb/drv_usb_core.c",
    "content": "/*!\r\n    \\file  drv_usb_core.c\r\n    \\brief USB core driver which can operate in host and device mode\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"drv_usb_core.h\"\r\n#include \"drv_usb_hw.h\"\r\n\r\n/*!\r\n    \\brief      config USB core to soft reset\r\n    \\param[in]  usb_regs: USB core registers\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nstatic void usb_core_reset(usb_core_regs *usb_regs) {\r\n  /* enable core soft reset */\r\n  usb_regs->gr->GRSTCTL |= GRSTCTL_CSRST;\r\n\r\n  /* wait for the core to be soft reset */\r\n  while (usb_regs->gr->GRSTCTL & GRSTCTL_CSRST)\r\n    ;\r\n\r\n  /* wait for addtional 3 PHY clocks */\r\n  usb_udelay(3);\r\n}\r\n\r\n/*!\r\n    \\brief      config USB core basic\r\n    \\param[in]  usb_basic: pointer to usb capabilities\r\n    \\param[in]  usb_regs: USB core registers\r\n    \\param[in]  usb_core: USB core\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusb_status usb_basic_init(usb_core_basic *usb_basic, usb_core_regs *usb_regs, usb_core_enum usb_core) {\r\n  uint32_t i = 0, reg_base = 0;\r\n\r\n  /* config USB default transfer mode as FIFO mode */\r\n  usb_basic->transfer_mode = USB_USE_FIFO;\r\n\r\n  /* USB default speed is full-speed */\r\n  usb_basic->core_speed = USB_SPEED_FULL;\r\n\r\n  usb_basic->core_enum = usb_core;\r\n\r\n  switch (usb_core) {\r\n  case USB_CORE_ENUM_HS:\r\n    reg_base = USBHS_REG_BASE;\r\n\r\n    /* set the host channel numbers */\r\n    usb_basic->num_pipe = USBHS_MAX_CHANNEL_COUNT;\r\n\r\n    /* set the device endpoint numbers */\r\n    usb_basic->num_ep = USBHS_MAX_EP_COUNT;\r\n\r\n#ifdef USB_ULPI_PHY_ENABLED\r\n    usb_basic->phy_itf = USB_ULPI_PHY;\r\n#else\r\n    usb_basic->phy_itf = USB_EMBEDDED_PHY;\r\n#endif /* USB_ULPI_PHY_ENABLED */\r\n\r\n#ifdef USB_HS_INTERNAL_DMA_ENABLED\r\n    bp->transfer_mode = USB_USE_DMA;\r\n#endif /* USB_HS_INTERNAL_DMA_ENABLED */\r\n    break;\r\n\r\n  case USB_CORE_ENUM_FS:\r\n    reg_base = USBFS_REG_BASE;\r\n\r\n    /* set the host channel numbers */\r\n    usb_basic->num_pipe = USBFS_MAX_CHANNEL_COUNT;\r\n\r\n    /* set the device endpoint numbers */\r\n    usb_basic->num_ep = USBFS_MAX_EP_COUNT;\r\n\r\n    /* USBFS core use embedded physical layer */\r\n    usb_basic->phy_itf = USB_EMBEDDED_PHY;\r\n    break;\r\n\r\n  default:\r\n    return USB_FAIL;\r\n  }\r\n\r\n  usb_basic->sof_enable = USB_SOF_OUTPUT;\r\n  usb_basic->low_power  = USB_LOW_POWER;\r\n\r\n  /* assign main registers address */\r\n  *usb_regs = (usb_core_regs){.gr = (usb_gr *)(reg_base + USB_REG_OFFSET_CORE),\r\n                              .hr = (usb_hr *)(reg_base + USB_REG_OFFSET_HOST),\r\n                              .dr = (usb_dr *)(reg_base + USB_REG_OFFSET_DEV),\r\n\r\n                              .HPCS      = (uint32_t *)(reg_base + USB_REG_OFFSET_PORT),\r\n                              .PWRCLKCTL = (uint32_t *)(reg_base + USB_REG_OFFSET_PWRCLKCTL)};\r\n\r\n  /* assign device endpoint registers address */\r\n  for (i = 0; i < usb_basic->num_ep; i++) {\r\n    usb_regs->er_in[i] = (usb_erin *)(reg_base + USB_REG_OFFSET_EP_IN + (i * USB_REG_OFFSET_EP));\r\n\r\n    usb_regs->er_out[i] = (usb_erout *)(reg_base + USB_REG_OFFSET_EP_OUT + (i * USB_REG_OFFSET_EP));\r\n  }\r\n\r\n  /* assign host pipe registers address */\r\n  for (i = 0; i < usb_basic->num_pipe; i++) {\r\n    usb_regs->pr[i] = (usb_pr *)(reg_base + USB_REG_OFFSET_CH_INOUT + (i * USB_REG_OFFSET_CH));\r\n\r\n    usb_regs->DFIFO[i] = (uint32_t *)(reg_base + USB_DATA_FIFO_OFFSET + (i * USB_DATA_FIFO_SIZE));\r\n  }\r\n\r\n  return USB_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      initializes the USB controller registers and\r\n                prepares the core device mode or host mode operation\r\n    \\param[in]  bp: usb capabilities\r\n    \\param[in]  core_regs: usb core registers\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusb_status usb_core_init(usb_core_basic usb_basic, usb_core_regs *usb_regs) {\r\n  uint32_t reg_value = usb_regs->gr->GCCFG;\r\n\r\n  /* disable USB global interrupt */\r\n  usb_regs->gr->GAHBCS &= ~GAHBCS_GINTEN;\r\n\r\n  if (USB_ULPI_PHY == usb_basic.phy_itf) {\r\n    reg_value &= ~GCCFG_PWRON;\r\n\r\n    if (usb_basic.sof_enable) {\r\n      reg_value |= GCCFG_SOFOEN;\r\n    }\r\n\r\n    usb_regs->gr->GCCFG = GCCFG_SOFOEN;\r\n\r\n    /* init the ULPI interface */\r\n    usb_regs->gr->GUSBCS &= ~(GUSBCS_EMBPHY | GUSBCS_ULPIEOI);\r\n\r\n#ifdef USBHS_EXTERNAL_VBUS_ENABLED\r\n    /* use external VBUS driver */\r\n    usb_regs->gr->GUSBCS |= GUSBCS_ULPIEVD;\r\n#else\r\n    /* use internal VBUS driver */\r\n    usb_regs->gr->GUSBCS &= ~GUSBCS_ULPIEVD;\r\n#endif\r\n\r\n    /* soft reset the core */\r\n    usb_core_reset(usb_regs);\r\n  } else {\r\n    usb_regs->gr->GUSBCS |= GUSBCS_EMBPHY;\r\n\r\n    /* soft reset the core */\r\n    usb_core_reset(usb_regs);\r\n\r\n    /* active the transceiver and enable vbus sensing */\r\n    reg_value = GCCFG_PWRON | GCCFG_VBUSACEN | GCCFG_VBUSBCEN;\r\n\r\n#ifndef VBUS_SENSING_ENABLED\r\n    reg_value |= GCCFG_VBUSIG;\r\n#endif /* VBUS_SENSING_ENABLED */\r\n\r\n    /* enable SOF output */\r\n    if (usb_basic.sof_enable) {\r\n      reg_value |= GCCFG_SOFOEN;\r\n    }\r\n\r\n    usb_regs->gr->GCCFG = reg_value;\r\n\r\n    usb_mdelay(20);\r\n  }\r\n\r\n  if (USB_USE_DMA == usb_basic.transfer_mode) {\r\n    usb_regs->gr->GAHBCS |= GAHBCS_DMAEN;\r\n    usb_regs->gr->GAHBCS &= ~GAHBCS_BURST;\r\n    usb_regs->gr->GAHBCS |= DMA_INCR8;\r\n  }\r\n\r\n#ifdef USE_OTG_MODE\r\n\r\n  /* enable USB OTG features */\r\n  usb_regs->gr->GUSBCS |= GUSBCS_HNPCAP | GUSBCS_SRPCAP;\r\n\r\n  /* enable the USB wakeup and suspend interrupts */\r\n  usb_regs->gr->GINTF = 0xBFFFFFFFU;\r\n\r\n  usb_regs->gr->GINTEN = GINTEN_WKUPIE | GINTEN_SPIE | GINTEN_OTGIE | GINTEN_SESIE | GINTEN_CIDPSCIE;\r\n\r\n#endif /* USE_OTG_MODE */\r\n\r\n  return USB_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      write a packet into the Tx FIFO associated with the endpoint\r\n    \\param[in]  core_regs: usb core registers\r\n    \\param[in]  src_buf: pointer to source buffer\r\n    \\param[in]  fifo_num: FIFO number which is in (0..3)\r\n    \\param[in]  byte_count: packet byte count\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusb_status usb_txfifo_write(usb_core_regs *usb_regs, uint8_t *src_buf, uint8_t fifo_num, uint16_t byte_count) {\r\n  uint32_t word_count = (byte_count + 3U) / 4U;\r\n\r\n  __IO uint32_t *fifo = usb_regs->DFIFO[fifo_num];\r\n\r\n  while (word_count-- > 0) {\r\n    *fifo = *((uint32_t *)src_buf);\r\n\r\n    src_buf += 4U;\r\n  }\r\n\r\n  return USB_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      read a packet from the Rx FIFO associated with the endpoint\r\n    \\param[in]  core_regs: usb core registers\r\n    \\param[in]  dest_buf: pointer to destination buffer\r\n    \\param[in]  byte_count: packet byte count\r\n    \\param[out] none\r\n    \\retval     void type pointer\r\n*/\r\nvoid *usb_rxfifo_read(usb_core_regs *usb_regs, uint8_t *dest_buf, uint16_t byte_count) {\r\n  uint32_t word_count = (byte_count + 3U) / 4U;\r\n\r\n  __IO uint32_t *fifo = usb_regs->DFIFO[0];\r\n\r\n  while (word_count-- > 0) {\r\n    *(uint32_t *)dest_buf = *fifo;\r\n\r\n    dest_buf += 4U;\r\n  }\r\n\r\n  return ((void *)dest_buf);\r\n}\r\n\r\n/*!\r\n    \\brief      flush a Tx FIFO or all Tx FIFOs\r\n    \\param[in]  core_regs: pointer to usb core registers\r\n    \\param[in]  fifo_num: FIFO number which is in (0..3)\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusb_status usb_txfifo_flush(usb_core_regs *usb_regs, uint8_t fifo_num) {\r\n  usb_regs->gr->GRSTCTL = ((uint32_t)fifo_num << 6U) | GRSTCTL_TXFF;\r\n\r\n  /* wait for Tx FIFO flush bit is set */\r\n  while (usb_regs->gr->GRSTCTL & GRSTCTL_TXFF)\r\n    ;\r\n\r\n  /* wait for 3 PHY clocks*/\r\n  usb_udelay(3);\r\n\r\n  return USB_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      flush the entire Rx FIFO\r\n    \\param[in]  core_regs: pointer to usb core registers\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusb_status usb_rxfifo_flush(usb_core_regs *usb_regs) {\r\n  usb_regs->gr->GRSTCTL = GRSTCTL_RXFF;\r\n\r\n  /* wait for Rx FIFO flush bit is set */\r\n  while (usb_regs->gr->GRSTCTL & GRSTCTL_RXFF)\r\n    ;\r\n\r\n  /* wait for 3 PHY clocks */\r\n  usb_udelay(3);\r\n\r\n  return USB_OK;\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/Usb/drv_usb_dev.c",
    "content": "/*!\r\n    \\file  drv_usb_dev.c\r\n    \\brief USB device mode low level driver\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n#include \"drv_usb_dev.h\"\r\n#include \"drv_usb_core.h\"\r\n#include \"drv_usb_hw.h\"\r\n#include \"gd32vf103_libopt.h\"\r\n\r\n/* endpoint 0 max packet length */\r\nstatic const uint8_t EP0_MAXLEN[4] = {[DSTAT_EM_HS_PHY_30MHZ_60MHZ] = EP0MPL_64, [DSTAT_EM_FS_PHY_30MHZ_60MHZ] = EP0MPL_64, [DSTAT_EM_FS_PHY_48MHZ] = EP0MPL_64, [DSTAT_EM_LS_PHY_6MHZ] = EP0MPL_8};\r\n\r\n#ifdef USB_FS_CORE\r\n\r\n/* USB endpoint Tx FIFO size */\r\nstatic uint16_t USBFS_TX_FIFO_SIZE[USBFS_MAX_EP_COUNT] = {(uint16_t)TX0_FIFO_FS_SIZE, (uint16_t)TX1_FIFO_FS_SIZE, (uint16_t)TX2_FIFO_FS_SIZE, (uint16_t)TX3_FIFO_FS_SIZE};\r\n\r\n#elif defined(USB_HS_CORE)\r\n\r\nuint16_t USBHS_TX_FIFO_SIZE[USBHS_MAX_EP_COUNT] = {(uint16_t)TX0_FIFO_HS_SIZE, (uint16_t)TX1_FIFO_HS_SIZE, (uint16_t)TX2_FIFO_HS_SIZE,\r\n                                                   (uint16_t)TX3_FIFO_HS_SIZE, (uint16_t)TX4_FIFO_HS_SIZE, (uint16_t)TX5_FIFO_HS_SIZE};\r\n\r\n#endif /* USBFS_CORE */\r\n\r\n/*!\r\n    \\brief      initialize USB core registers for device mode\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusb_status usb_devcore_init(usb_core_driver *udev) {\r\n  uint32_t i, ram_addr = 0;\r\n\r\n  /* force to peripheral mode */\r\n  udev->regs.gr->GUSBCS &= ~(GUSBCS_FDM | GUSBCS_FHM);\r\n  udev->regs.gr->GUSBCS |= GUSBCS_FDM;\r\n  // udev->regs.gr->GUSBCS &= ~(GUSBCS_FHM);\r\n\r\n  /* restart the Phy Clock (maybe don't need to...) */\r\n  *udev->regs.PWRCLKCTL = 0U;\r\n\r\n  /* config periodic frame interval to default value */\r\n  udev->regs.dr->DCFG &= ~DCFG_EOPFT;\r\n  udev->regs.dr->DCFG |= FRAME_INTERVAL_80;\r\n\r\n  udev->regs.dr->DCFG &= ~DCFG_DS;\r\n\r\n#ifdef USB_FS_CORE\r\n  if (udev->bp.core_enum == USB_CORE_ENUM_FS) {\r\n    /* set full-speed PHY */\r\n    udev->regs.dr->DCFG |= USB_SPEED_INP_FULL;\r\n\r\n    /* set Rx FIFO size */\r\n    udev->regs.gr->GRFLEN = RX_FIFO_FS_SIZE;\r\n\r\n    /* set endpoint 0 Tx FIFO length and RAM address */\r\n    udev->regs.gr->DIEP0TFLEN_HNPTFLEN = ((uint32_t)TX0_FIFO_FS_SIZE << 16) | ((uint32_t)RX_FIFO_FS_SIZE);\r\n\r\n    ram_addr = RX_FIFO_FS_SIZE;\r\n\r\n    /* set endpoint 1 to 3's Tx FIFO length and RAM address */\r\n    for (i = 1; i < USBFS_MAX_EP_COUNT; i++) {\r\n      ram_addr += USBFS_TX_FIFO_SIZE[i - 1];\r\n\r\n      udev->regs.gr->DIEPTFLEN[i - 1] = ((uint32_t)USBFS_TX_FIFO_SIZE[i] << 16U) | ram_addr;\r\n    }\r\n  }\r\n#endif\r\n\r\n#ifdef USB_HS_CORE\r\n  if (udev->bp.core == USB_CORE_HS) {\r\n    if (udev->bp.core_phy == USB_ULPI_PHY) {\r\n      udev->regs.dr->DCFG |= USB_SPEED_EXP_HIGH;\r\n    } else { /* set High speed phy in Full speed mode */\r\n      udev->regs.dr->DCFG |= USB_SPEED_EXP_FULL;\r\n    }\r\n\r\n    /* Set Rx FIFO size */\r\n    udev->regs.gr->GRFLEN &= ~GRFLEN_RXFD;\r\n    udev->regs.gr->GRFLEN |= RX_FIFO_HS_SIZE;\r\n\r\n    /* Set endpoint 0 Tx FIFO length and RAM address */\r\n    udev->regs.gr->DIEP0TFLEN_HNPTFLEN = ((uint32_t)TX0_FIFO_HS_SIZE << 16) | RX_FIFO_HS_SIZE;\r\n\r\n    ram_addr = RX_FIFO_HS_SIZE;\r\n\r\n    /* Set endpoint 1 to 3's Tx FIFO length and RAM address */\r\n    for (i = 1; i < USBHS_MAX_EP_COUNT; i++) {\r\n      ram_addr += USBHS_TX_FIFO_SIZE[i - 1];\r\n\r\n      udev->regs.gr->DIEPTFLEN[i - 1] = ((uint32_t)USBHS_TX_FIFO_SIZE[i] << 16) | ram_addr;\r\n    }\r\n  }\r\n#endif\r\n\r\n  /* make sure all FIFOs are flushed */\r\n\r\n  /* flush all Tx FIFOs */\r\n  usb_txfifo_flush(&udev->regs, 0x10);\r\n\r\n  /* flush entire Rx FIFO */\r\n  usb_rxfifo_flush(&udev->regs);\r\n\r\n  /* clear all pending device interrupts */\r\n  udev->regs.dr->DIEPINTEN = 0U;\r\n  udev->regs.dr->DOEPINTEN = 0U;\r\n  udev->regs.dr->DAEPINT   = 0xFFFFFFFFU;\r\n  udev->regs.dr->DAEPINTEN = 0U;\r\n\r\n  /* configure all IN/OUT endpoints */\r\n  for (i = 0; i < udev->bp.num_ep; i++) {\r\n    if (udev->regs.er_in[i]->DIEPCTL & DEPCTL_EPEN) {\r\n      udev->regs.er_in[i]->DIEPCTL |= DEPCTL_EPD | DEPCTL_SNAK;\r\n    } else {\r\n      udev->regs.er_in[i]->DIEPCTL = 0U;\r\n    }\r\n\r\n    /* set IN endpoint transfer length to 0 */\r\n    udev->regs.er_in[i]->DIEPLEN = 0U;\r\n\r\n    /* clear all pending IN endpoint interrupts */\r\n    udev->regs.er_in[i]->DIEPINTF = 0xFFU;\r\n\r\n    if (udev->regs.er_out[i]->DOEPCTL & DEPCTL_EPEN) {\r\n      udev->regs.er_out[i]->DOEPCTL |= DEPCTL_EPD | DEPCTL_SNAK;\r\n    } else {\r\n      udev->regs.er_out[i]->DOEPCTL = 0U;\r\n    }\r\n\r\n    /* set OUT endpoint transfer length to 0 */\r\n    udev->regs.er_out[i]->DOEPLEN = 0U;\r\n\r\n    /* clear all pending OUT endpoint interrupts */\r\n    udev->regs.er_out[i]->DOEPINTF = 0xFFU;\r\n  }\r\n\r\n  usb_devint_enable(udev);\r\n\r\n  return USB_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      enable the USB device mode interrupts\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusb_status usb_devint_enable(usb_core_driver *udev) {\r\n  /* clear any pending USB OTG interrupts */\r\n  udev->regs.gr->GOTGINTF = 0xFFFFFFFFU;\r\n\r\n  /* clear any pending interrupts */\r\n  udev->regs.gr->GINTF = 0xBFFFFFFFU;\r\n\r\n  /* enable the USB wakeup and suspend interrupts */\r\n  udev->regs.gr->GINTEN = GINTEN_WKUPIE | GINTEN_SPIE;\r\n\r\n  /* enable device_mode-related interrupts */\r\n  if (USB_USE_FIFO == udev->bp.transfer_mode) {\r\n    udev->regs.gr->GINTEN |= GINTEN_RXFNEIE;\r\n  }\r\n  udev->regs.gr->GINTEN |= GINTEN_RSTIE | GINTEN_ENUMFIE | GINTEN_IEPIE | GINTEN_OEPIE | GINTEN_SOFIE | GINTEN_MFIE;\r\n\r\n#ifdef VBUS_SENSING_ENABLED\r\n  udev->regs.gr->GINTEN |= GINTEN_SESIE | GINTEN_OTGIE;\r\n#endif /* VBUS_SENSING_ENABLED */\r\n\r\n  /* enable USB global interrupt */\r\n  udev->regs.gr->GAHBCS |= GAHBCS_GINTEN;\r\n\r\n  return USB_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      config the USB device to be disconnected\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nvoid usb_dev_disconnect(usb_core_driver *udev) { udev->regs.dr->DCTL |= DCTL_SD; }\r\n\r\n/*!\r\n    \\brief      config the USB device to be connected\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nvoid usb_dev_connect(usb_core_driver *udev) { udev->regs.dr->DCTL &= ~DCTL_SD; }\r\n\r\n/*!\r\n    \\brief      set the USB device address\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[in]  dev_addr: device address for setting\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nvoid usb_devaddr_set(usb_core_driver *udev, uint8_t dev_addr) {\r\n  udev->regs.dr->DCFG &= ~DCFG_DAR;\r\n  udev->regs.dr->DCFG |= dev_addr << 4;\r\n}\r\n\r\n/*!\r\n    \\brief      active the usb transaction\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[in]  transc: the usb transaction\r\n    \\param[out] none\r\n    \\retval     status\r\n*/\r\nusb_status usb_transc_active(usb_core_driver *udev, usb_transc *transc) {\r\n  __IO uint32_t *reg_addr = NULL;\r\n\r\n  __IO uint32_t epinten = 0U;\r\n\r\n  /* get the endpoint number */\r\n  uint8_t ep_num = transc->ep_addr.num;\r\n\r\n  /* enable endpoint interrupt number */\r\n  if (transc->ep_addr.dir) {\r\n    reg_addr = &udev->regs.er_in[ep_num]->DIEPCTL;\r\n\r\n    epinten = 1 << ep_num;\r\n  } else {\r\n    reg_addr = &udev->regs.er_out[ep_num]->DOEPCTL;\r\n\r\n    epinten = 1 << (16 + ep_num);\r\n  }\r\n\r\n  /* if the endpoint is not active, need change the endpoint control register */\r\n  if (!(*reg_addr & DEPCTL_EPACT)) {\r\n    *reg_addr &= ~(DEPCTL_MPL | DEPCTL_EPTYPE | DIEPCTL_TXFNUM);\r\n\r\n    /* set endpoint maximum packet length */\r\n    if (0U == ep_num) {\r\n      *reg_addr |= EP0_MAXLEN[udev->regs.dr->DSTAT & DSTAT_ES];\r\n    } else {\r\n      *reg_addr |= transc->max_len;\r\n    }\r\n\r\n    /* activate endpoint */\r\n    *reg_addr |= (transc->ep_type << 18) | (ep_num << 22) | DEPCTL_SD0PID | DEPCTL_EPACT;\r\n  }\r\n\r\n#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED\r\n  if ((ep_num == 1) && (udev->bp.core == USB_HS_CORE_ID)) {\r\n    udev->regs.dr->DEP1INTEN |= epinten;\r\n  } else\r\n#endif\r\n  {\r\n    /* enable the interrupts for this endpoint */\r\n    udev->regs.dr->DAEPINTEN |= epinten;\r\n  }\r\n\r\n  return USB_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      deactive the usb transaction\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[in]  transc: the usb transaction\r\n    \\param[out] none\r\n    \\retval     status\r\n*/\r\nusb_status usb_transc_deactivate(usb_core_driver *udev, usb_transc *transc) {\r\n  uint32_t epinten = 0U;\r\n\r\n  uint8_t ep_num = transc->ep_addr.num;\r\n\r\n  /* disable endpoint interrupt number */\r\n  if (transc->ep_addr.dir) {\r\n    epinten = 1 << ep_num;\r\n\r\n    udev->regs.er_in[ep_num]->DIEPCTL &= ~DEPCTL_EPACT;\r\n  } else {\r\n    epinten = 1 << (ep_num + 16);\r\n\r\n    udev->regs.er_out[ep_num]->DOEPCTL &= ~DEPCTL_EPACT;\r\n  }\r\n\r\n#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED\r\n  if ((ep_num == 1) && (udev->bp.core == USB_CORE_HS)) {\r\n    udev->regs.dr->DEP1INTEN &= ~epinten;\r\n  } else\r\n#endif\r\n  {\r\n    /* disable the interrupts for this endpoint */\r\n    udev->regs.dr->DAEPINTEN &= ~epinten;\r\n  }\r\n\r\n  return USB_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      configure usb transaction to start IN transfer\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[in]  transc: the usb IN transaction\r\n    \\param[out] none\r\n    \\retval     status\r\n*/\r\nusb_status usb_transc_inxfer(usb_core_driver *udev, usb_transc *transc) {\r\n  usb_status status = USB_OK;\r\n\r\n  uint8_t ep_num = transc->ep_addr.num;\r\n\r\n  __IO uint32_t epctl = udev->regs.er_in[ep_num]->DIEPCTL;\r\n  __IO uint32_t eplen = udev->regs.er_in[ep_num]->DIEPLEN;\r\n\r\n  eplen &= ~(DEPLEN_TLEN | DEPLEN_PCNT);\r\n\r\n  /* zero length packet or endpoint 0 */\r\n  if (0U == transc->xfer_len) {\r\n    /* set transfer packet count to 1 */\r\n    eplen |= 1 << 19;\r\n  } else {\r\n    /* set transfer packet count */\r\n    if (0U == ep_num) {\r\n      transc->xfer_len = USB_MIN(transc->xfer_len, transc->max_len);\r\n\r\n      eplen |= 1 << 19;\r\n    } else {\r\n      eplen |= ((transc->xfer_len - 1 + transc->max_len) / transc->max_len) << 19;\r\n    }\r\n\r\n    /* set endpoint transfer length */\r\n    eplen |= transc->xfer_len;\r\n\r\n    if (transc->ep_type == USB_EPTYPE_ISOC) {\r\n      eplen |= DIEPLEN_MCNT;\r\n    }\r\n  }\r\n\r\n  udev->regs.er_in[ep_num]->DIEPLEN = eplen;\r\n\r\n  if (USB_USE_DMA == udev->bp.transfer_mode) {\r\n    udev->regs.er_in[ep_num]->DIEPDMAADDR = transc->dma_addr;\r\n  }\r\n\r\n  if (transc->ep_type == USB_EPTYPE_ISOC) {\r\n    if (((udev->regs.dr->DSTAT & DSTAT_FNRSOF) >> 8) & 0x1) {\r\n      epctl |= DEPCTL_SD1PID;\r\n    } else {\r\n      epctl |= DEPCTL_SD0PID;\r\n    }\r\n  }\r\n\r\n  /* enable the endpoint and clear the NAK */\r\n  epctl |= DEPCTL_CNAK | DEPCTL_EPEN;\r\n\r\n  udev->regs.er_in[ep_num]->DIEPCTL = epctl;\r\n\r\n  if (transc->ep_type != USB_EPTYPE_ISOC) {\r\n    /* enable the Tx FIFO empty interrupt for this endpoint */\r\n    if (transc->xfer_len > 0) {\r\n      udev->regs.dr->DIEPFEINTEN |= 1 << ep_num;\r\n    }\r\n  } else {\r\n    usb_txfifo_write(&udev->regs, transc->xfer_buf, ep_num, transc->xfer_len);\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/*!\r\n    \\brief      configure usb transaction to start OUT transfer\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[in]  transc: the usb OUT transaction\r\n    \\param[out] none\r\n    \\retval     status\r\n*/\r\nusb_status usb_transc_outxfer(usb_core_driver *udev, usb_transc *transc) {\r\n  usb_status status = USB_OK;\r\n\r\n  uint8_t ep_num = transc->ep_addr.num;\r\n\r\n  uint32_t epctl = udev->regs.er_out[ep_num]->DOEPCTL;\r\n  uint32_t eplen = udev->regs.er_out[ep_num]->DOEPLEN;\r\n\r\n  eplen &= ~(DEPLEN_TLEN | DEPLEN_PCNT);\r\n\r\n  /* zero length packet or endpoint 0 */\r\n  if ((0U == transc->xfer_len) || (0U == ep_num)) {\r\n    /* set the transfer length to max packet size */\r\n    eplen |= transc->max_len;\r\n\r\n    /* set the transfer packet count to 1 */\r\n    eplen |= 1U << 19;\r\n  } else {\r\n    /* configure the transfer size and packet count as follows:\r\n     * pktcnt = N\r\n     * xfersize = N * maxpacket\r\n     */\r\n    uint32_t packet_count = (transc->xfer_len + transc->max_len - 1) / transc->max_len;\r\n\r\n    eplen |= packet_count << 19;\r\n    eplen |= packet_count * transc->max_len;\r\n  }\r\n\r\n  udev->regs.er_out[ep_num]->DOEPLEN = eplen;\r\n\r\n  if (USB_USE_DMA == udev->bp.transfer_mode) {\r\n    udev->regs.er_out[ep_num]->DOEPDMAADDR = transc->dma_addr;\r\n  }\r\n\r\n  if (transc->ep_type == USB_EPTYPE_ISOC) {\r\n    if (transc->frame_num) {\r\n      epctl |= DEPCTL_SD1PID;\r\n    } else {\r\n      epctl |= DEPCTL_SD0PID;\r\n    }\r\n  }\r\n\r\n  /* enable the endpoint and clear the NAK */\r\n  epctl |= DEPCTL_EPEN | DEPCTL_CNAK;\r\n\r\n  udev->regs.er_out[ep_num]->DOEPCTL = epctl;\r\n\r\n  return status;\r\n}\r\n\r\n/*!\r\n    \\brief      set the usb transaction STALL status\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[in]  transc: the usb transaction\r\n    \\param[out] none\r\n    \\retval     status\r\n*/\r\nusb_status usb_transc_stall(usb_core_driver *udev, usb_transc *transc) {\r\n  __IO uint32_t *reg_addr = NULL;\r\n\r\n  uint8_t ep_num = transc->ep_addr.num;\r\n\r\n  if (transc->ep_addr.dir) {\r\n    reg_addr = &(udev->regs.er_in[ep_num]->DIEPCTL);\r\n\r\n    /* set the endpoint disable bit */\r\n    if (*reg_addr & DEPCTL_EPEN) {\r\n      *reg_addr |= DEPCTL_EPD;\r\n    }\r\n  } else {\r\n    /* set the endpoint stall bit */\r\n    reg_addr = &(udev->regs.er_out[ep_num]->DOEPCTL);\r\n  }\r\n\r\n  /* set the endpoint stall bit */\r\n  *reg_addr |= DEPCTL_STALL;\r\n\r\n  return USB_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      clear the usb transaction STALL status\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[in]  transc: the usb transaction\r\n    \\param[out] none\r\n    \\retval     status\r\n*/\r\nusb_status usb_transc_clrstall(usb_core_driver *udev, usb_transc *transc) {\r\n  __IO uint32_t *reg_addr = NULL;\r\n\r\n  uint8_t ep_num = transc->ep_addr.num;\r\n\r\n  if (transc->ep_addr.dir) {\r\n    reg_addr = &(udev->regs.er_in[ep_num]->DIEPCTL);\r\n  } else {\r\n    reg_addr = &(udev->regs.er_out[ep_num]->DOEPCTL);\r\n  }\r\n\r\n  /* clear the endpoint stall bits */\r\n  *reg_addr &= ~DEPCTL_STALL;\r\n\r\n  /* reset data PID of the periodic endpoints */\r\n  if ((transc->ep_type == USB_EPTYPE_INTR) || (transc->ep_type == USB_EPTYPE_BULK)) {\r\n    *reg_addr |= DEPCTL_SD0PID;\r\n  }\r\n\r\n  return USB_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      read device all OUT endpoint interrupt register\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nuint32_t usb_oepintnum_read(usb_core_driver *udev) {\r\n  uint32_t value = udev->regs.dr->DAEPINT;\r\n\r\n  value &= udev->regs.dr->DAEPINTEN;\r\n\r\n  return (value & DAEPINT_OEPITB) >> 16;\r\n}\r\n\r\n/*!\r\n    \\brief      read device OUT endpoint interrupt flag register\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[in]  ep_num: endpoint number\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nuint32_t usb_oepintr_read(usb_core_driver *udev, uint8_t ep_num) {\r\n  uint32_t value = udev->regs.er_out[ep_num]->DOEPINTF;\r\n\r\n  value &= udev->regs.dr->DOEPINTEN;\r\n\r\n  return value;\r\n}\r\n\r\n/*!\r\n    \\brief      read device all IN endpoint interrupt register\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nuint32_t usb_iepintnum_read(usb_core_driver *udev) {\r\n  uint32_t value = udev->regs.dr->DAEPINT;\r\n\r\n  value &= udev->regs.dr->DAEPINTEN;\r\n\r\n  return value & DAEPINT_IEPITB;\r\n}\r\n\r\n/*!\r\n    \\brief      read device IN endpoint interrupt flag register\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[in]  ep_num: endpoint number\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nuint32_t usb_iepintr_read(usb_core_driver *udev, uint8_t ep_num) {\r\n  uint32_t value = 0U, fifoemptymask = 0U, commonintmask = 0U;\r\n\r\n  commonintmask = udev->regs.dr->DIEPINTEN;\r\n  fifoemptymask = udev->regs.dr->DIEPFEINTEN;\r\n\r\n  /* check FIFO empty interrupt enable bit */\r\n  commonintmask |= ((fifoemptymask >> ep_num) & 0x1U) << 7;\r\n\r\n  value = udev->regs.er_in[ep_num]->DIEPINTF & commonintmask;\r\n\r\n  return value;\r\n}\r\n\r\n/*!\r\n    \\brief      configures OUT endpoint 0 to receive SETUP packets\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_ctlep_startout(usb_core_driver *udev) {\r\n  /* set OUT endpoint 0 receive length to 24 bytes, 1 packet and 3 setup packets */\r\n  udev->regs.er_out[0]->DOEPLEN = DOEP0_TLEN(8U * 3U) | DOEP0_PCNT(1U) | DOEP0_STPCNT(3U);\r\n\r\n  if (USB_USE_DMA == udev->bp.transfer_mode) {\r\n    udev->regs.er_out[0]->DOEPDMAADDR = (uint32_t)&udev->dev.control.req;\r\n\r\n    /* endpoint enable */\r\n    udev->regs.er_out[0]->DOEPCTL |= DEPCTL_EPACT | DEPCTL_EPEN;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      set remote wakeup signalling\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_rwkup_set(usb_core_driver *udev) {\r\n  if (udev->dev.pm.dev_remote_wakeup) {\r\n    /* enable remote wakeup signaling */\r\n    udev->regs.dr->DCTL |= DCTL_RWKUP;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      reset remote wakeup signalling\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_rwkup_reset(usb_core_driver *udev) {\r\n  if (udev->dev.pm.dev_remote_wakeup) {\r\n    /* disable remote wakeup signaling */\r\n    udev->regs.dr->DCTL &= ~DCTL_RWKUP;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      active remote wakeup signalling\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_rwkup_active(usb_core_driver *udev) {\r\n  if (udev->dev.pm.dev_remote_wakeup) {\r\n    if (udev->regs.dr->DSTAT & DSTAT_SPST) {\r\n      if (udev->bp.low_power) {\r\n        /* ungate USB core clock */\r\n        *udev->regs.PWRCLKCTL &= ~(PWRCLKCTL_SHCLK | PWRCLKCTL_SUCLK);\r\n      }\r\n\r\n      /* active remote wakeup signaling */\r\n      udev->regs.dr->DCTL |= DCTL_RWKUP;\r\n\r\n      usb_mdelay(5);\r\n\r\n      udev->regs.dr->DCTL &= ~DCTL_RWKUP;\r\n    }\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      active USB core clock\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_clock_active(usb_core_driver *udev) {\r\n  if (udev->bp.low_power) {\r\n    if (udev->regs.dr->DSTAT & DSTAT_SPST) {\r\n      /* un-gate USB Core clock */\r\n      *udev->regs.PWRCLKCTL &= ~(PWRCLKCTL_SHCLK | PWRCLKCTL_SUCLK);\r\n    }\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      usb device suspend\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_dev_suspend(usb_core_driver *udev) {\r\n  __IO uint32_t devstat = udev->regs.dr->DSTAT;\r\n\r\n  if ((udev->bp.low_power) && (devstat & DSTAT_SPST)) {\r\n    /* switch-off the USB clocks */\r\n    *udev->regs.PWRCLKCTL |= PWRCLKCTL_SHCLK;\r\n\r\n    /* enter DEEP_SLEEP mode with LDO in low power mode */\r\n    pmu_to_deepsleepmode(PMU_LDO_LOWPOWER, WFI_CMD);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      stop the device and clean up fifos\r\n    \\param[in]  udev: pointer to usb device\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_dev_stop(usb_core_driver *udev) {\r\n  uint32_t i;\r\n\r\n  udev->dev.cur_status = 1;\r\n\r\n  /* clear all interrupt flag and enable bits */\r\n  for (i = 0; i < udev->bp.num_ep; i++) {\r\n    udev->regs.er_in[i]->DIEPINTF  = 0xFFU;\r\n    udev->regs.er_out[i]->DOEPINTF = 0xFFU;\r\n  }\r\n\r\n  udev->regs.dr->DIEPINTEN = 0U;\r\n  udev->regs.dr->DOEPINTEN = 0U;\r\n  udev->regs.dr->DAEPINTEN = 0U;\r\n  udev->regs.dr->DAEPINT   = 0xFFFFFFFFU;\r\n\r\n  /* flush the FIFO */\r\n  usb_rxfifo_flush(&udev->regs);\r\n  usb_txfifo_flush(&udev->regs, 0x10);\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/Usb/drv_usb_host.c",
    "content": "/*!\r\n    \\file  drv_usb_host.c\r\n    \\brief USB host mode low level driver\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"drv_usb_host.h\"\r\n#include \"drv_usb_core.h\"\r\n#include \"drv_usb_hw.h\"\r\n\r\nconst uint32_t PIPE_DPID[] = {PIPE_DPID_DATA0, PIPE_DPID_DATA1};\r\n\r\n//__STATIC_INLINE uint8_t usb_frame_even (usb_core_driver *pudev)\r\nuint32_t usb_frame_even(usb_core_driver *pudev) { return !(pudev->regs.hr->HFINFR & 0x01U); }\r\n\r\n//__STATIC_INLINE void usb_phyclock_config (usb_core_driver *pudev, uint8_t clock)\r\nvoid usb_phyclock_config(usb_core_driver *pudev, uint8_t clock) {\r\n  pudev->regs.hr->HCTL &= ~HCTL_CLKSEL;\r\n  pudev->regs.hr->HCTL |= clock;\r\n}\r\n\r\n//__STATIC_INLINE uint32_t usb_port_read (usb_core_driver *pudev)\r\nuint32_t usb_port_read(usb_core_driver *pudev) { return *pudev->regs.HPCS & ~(HPCS_PE | HPCS_PCD | HPCS_PEDC); }\r\n\r\n//__STATIC_INLINE uint32_t usb_curspeed_get (usb_core_driver *pudev)\r\n\r\nuint32_t usb_curspeed_get(usb_core_driver *pudev) { return *pudev->regs.HPCS & HPCS_PS; }\r\n\r\nuint32_t usb_curframe_get(usb_core_driver *pudev) { return (pudev->regs.hr->HFINFR & 0xFFFFU); }\r\n\r\n/*!\r\n    \\brief      initializes USB core for host mode\r\n    \\param[in]  pudev: pointer to selected usb host\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusb_status usb_host_init(usb_core_driver *pudev) {\r\n  uint32_t i = 0, inten = 0U;\r\n\r\n  uint32_t nptxfifolen = 0U;\r\n  uint32_t ptxfifolen  = 0U;\r\n\r\n  pudev->regs.gr->GUSBCS &= ~GUSBCS_FDM;\r\n  pudev->regs.gr->GUSBCS |= GUSBCS_FHM;\r\n\r\n  /* restart the PHY Clock */\r\n  *pudev->regs.PWRCLKCTL = 0U;\r\n\r\n  /* initialize host configuration register */\r\n  if (USB_ULPI_PHY == pudev->bp.phy_itf) {\r\n    usb_phyclock_config(pudev, HCTL_30_60MHZ);\r\n  } else {\r\n    usb_phyclock_config(pudev, HCTL_48MHZ);\r\n  }\r\n\r\n  usb_port_reset(pudev);\r\n\r\n  /* support FS/LS only */\r\n  pudev->regs.hr->HCTL &= ~HCTL_SPDFSLS;\r\n\r\n  /* configure data FIFOs size */\r\n#ifdef USB_FS_CORE\r\n  if (USB_CORE_ENUM_FS == pudev->bp.core_enum) {\r\n    /* set Rx FIFO size */\r\n    pudev->regs.gr->GRFLEN = USB_RX_FIFO_FS_SIZE;\r\n\r\n    /* set non-periodic Tx FIFO size and address */\r\n    nptxfifolen |= USB_RX_FIFO_FS_SIZE;\r\n    nptxfifolen |= USB_HTX_NPFIFO_FS_SIZE << 16U;\r\n    pudev->regs.gr->DIEP0TFLEN_HNPTFLEN = nptxfifolen;\r\n\r\n    /* set periodic Tx FIFO size and address */\r\n    ptxfifolen |= USB_RX_FIFO_FS_SIZE + USB_HTX_PFIFO_FS_SIZE;\r\n    ptxfifolen |= USB_HTX_PFIFO_FS_SIZE << 16U;\r\n    pudev->regs.gr->HPTFLEN = ptxfifolen;\r\n  }\r\n#endif /* USB_FS_CORE */\r\n\r\n#ifdef USB_HS_CORE\r\n  if (USB_CORE_HS == pudev->cfg.core) {\r\n    /* set Rx FIFO size */\r\n    pudev->regs.gr->GRFLEN = USBHS_RX_FIFO_SIZE;\r\n\r\n    /* set non-periodic Tx FIFO size and address */\r\n    nptxfifolen |= USBHS_RX_FIFO_SIZE;\r\n    nptxfifolen |= USBHS_HTX_NPFIFO_SIZE;\r\n    pudev->regs.gr->DIEP0TFLEN_HNPTFLEN = nptxfifolen;\r\n\r\n    /* set periodic Tx FIFO size and address */\r\n    ptxfifolen |= USBHS_RX_FIFO_SIZE + USBHS_HTX_PFIFO_SIZE;\r\n    ptxfifolen |= USBHS_HTX_PFIFO_SIZE;\r\n    pudev->regs.gr->HPTFLEN = ptxfifolen;\r\n  }\r\n#endif\r\n\r\n#ifdef USE_OTG_MODE\r\n\r\n  /* clear host set hnp enable in the usb_otg control register */\r\n  pudev->regs.gr->GOTGCS &= ~GOTGCS_HHNPEN;\r\n\r\n#endif\r\n\r\n  /* disable all interrupts */\r\n  pudev->regs.gr->GINTEN = 0U;\r\n\r\n  /* clear any pending USB OTG interrupts */\r\n  pudev->regs.gr->GOTGINTF = 0xFFFFFFFFU;\r\n\r\n  /* enable the USB wakeup and suspend interrupts */\r\n  pudev->regs.gr->GINTF = 0xBFFFFFFFU;\r\n\r\n  /* make sure the FIFOs are flushed */\r\n\r\n  /* flush all Tx FIFOs in device or host mode */\r\n  usb_txfifo_flush(&pudev->regs, 0x10U);\r\n\r\n  /* flush the entire Rx FIFO */\r\n  usb_rxfifo_flush(&pudev->regs);\r\n\r\n  /* clear all pending host channel interrupts */\r\n  for (i = 0U; i < pudev->bp.num_pipe; i++) {\r\n    pudev->regs.pr[i]->HCHINTF  = 0xFFFFFFFFU;\r\n    pudev->regs.pr[i]->HCHINTEN = 0U;\r\n  }\r\n\r\n#ifndef USE_OTG_MODE\r\n  usb_portvbus_switch(pudev, 1U);\r\n#endif /* USE_OTG_MODE */\r\n\r\n  pudev->regs.gr->GINTEN = GINTEN_WKUPIE | GINTEN_SPIE;\r\n\r\n  /* enable host_mode-related interrupts */\r\n  if (USB_USE_FIFO == pudev->bp.transfer_mode) {\r\n    inten = GINTEN_RXFNEIE;\r\n  }\r\n\r\n  inten |= GINTEN_HPIE | GINTEN_HCIE | GINTEN_ISOINCIE;\r\n\r\n  pudev->regs.gr->GINTEN |= inten;\r\n\r\n  inten = GINTEN_DISCIE | GINTEN_SOFIE;\r\n\r\n  pudev->regs.gr->GINTEN &= ~inten;\r\n\r\n  pudev->regs.gr->GAHBCS |= GAHBCS_GINTEN;\r\n\r\n  return USB_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      control the VBUS to power\r\n    \\param[in]  pudev: pointer to selected usb host\r\n    \\param[in]  state: VBUS state\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_portvbus_switch(usb_core_driver *pudev, uint8_t state) {\r\n  uint32_t port = 0U;\r\n\r\n  /* enable or disable the external charge pump */\r\n  usb_vbus_drive(state);\r\n\r\n  /* turn on the host port power. */\r\n  port = usb_port_read(pudev);\r\n\r\n  if (!(port & HPCS_PP) && (1U == state)) {\r\n    port |= HPCS_PP;\r\n  }\r\n\r\n  if ((port & HPCS_PP) && (0U == state)) {\r\n    port &= ~HPCS_PP;\r\n  }\r\n\r\n  *pudev->regs.HPCS = port;\r\n\r\n  usb_mdelay(200U);\r\n}\r\n\r\n/*!\r\n    \\brief      reset host port\r\n    \\param[in]  pudev: pointer to usb device\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nuint32_t usb_port_reset(usb_core_driver *pudev) {\r\n  __IO uint32_t port = usb_port_read(pudev);\r\n\r\n  *pudev->regs.HPCS = port | HPCS_PRST;\r\n\r\n  usb_mdelay(100U); /* see note */\r\n\r\n  *pudev->regs.HPCS = port & ~HPCS_PRST;\r\n\r\n  usb_mdelay(20U);\r\n\r\n  return 1;\r\n}\r\n\r\n/*!\r\n    \\brief      initialize host pipe\r\n    \\param[in]  pudev: pointer to usb device\r\n    \\param[in]  pipe_num: host pipe number which is in (0..7)\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusb_status usb_pipe_init(usb_core_driver *pudev, uint8_t pipe_num) {\r\n  usb_status status = USB_OK;\r\n\r\n  __IO uint32_t pp_ctl   = 0U;\r\n  __IO uint32_t pp_inten = HCHINTEN_TFIE;\r\n\r\n  usb_pipe *pp = &pudev->host.pipe[pipe_num];\r\n\r\n  /* clear old interrupt conditions for this host channel */\r\n  pudev->regs.pr[pipe_num]->HCHINTF = 0xFFFFFFFFU;\r\n\r\n  if (USB_USE_DMA == pudev->bp.transfer_mode) {\r\n    pp_inten |= HCHINTEN_DMAERIE;\r\n  }\r\n\r\n  if (pp->ep.dir) {\r\n    pp_inten |= HCHINTEN_BBERIE;\r\n  }\r\n\r\n  /* enable channel interrupts required for this transfer */\r\n  switch (pp->ep.type) {\r\n  case USB_EPTYPE_CTRL:\r\n  case USB_EPTYPE_BULK:\r\n    pp_inten |= HCHINTEN_STALLIE | HCHINTEN_USBERIE | HCHINTEN_DTERIE | HCHINTEN_NAKIE;\r\n\r\n    if (!pp->ep.dir) {\r\n      pp_inten |= HCHINTEN_NYETIE;\r\n\r\n      if (pp->ping) {\r\n        pp_inten |= HCHINTEN_ACKIE;\r\n      }\r\n    }\r\n    break;\r\n\r\n  case USB_EPTYPE_INTR:\r\n    pp_inten |= HCHINTEN_STALLIE | HCHINTEN_USBERIE | HCHINTEN_DTERIE | HCHINTEN_NAKIE | HCHINTEN_REQOVRIE;\r\n    break;\r\n\r\n  case USB_EPTYPE_ISOC:\r\n    pp_inten |= HCHINTEN_REQOVRIE | HCHINTEN_ACKIE;\r\n\r\n    if (pp->ep.dir) {\r\n      pp_inten |= HCHINTEN_USBERIE;\r\n    }\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  pudev->regs.pr[pipe_num]->HCHINTEN = pp_inten;\r\n\r\n  /* enable the top level host channel interrupt */\r\n  pudev->regs.hr->HACHINTEN |= 1U << pipe_num;\r\n\r\n  /* make sure host channel interrupts are enabled */\r\n  pudev->regs.gr->GINTEN |= GINTEN_HCIE;\r\n\r\n  /* program the host channel control register */\r\n  pp_ctl |= PIPE_CTL_DAR(pp->dev_addr);\r\n  pp_ctl |= PIPE_CTL_EPNUM(pp->ep.num);\r\n  pp_ctl |= PIPE_CTL_EPDIR(pp->ep.dir);\r\n  pp_ctl |= PIPE_CTL_EPTYPE(pp->ep.type);\r\n  pp_ctl |= PIPE_CTL_LSD(pp->dev_speed == PORT_SPEED_LOW);\r\n\r\n  pp_ctl |= pp->ep.mps;\r\n  pp_ctl |= ((uint32_t)(pp->ep.type == USB_EPTYPE_INTR) << 29U) & HCHCTL_ODDFRM;\r\n\r\n  pudev->regs.pr[pipe_num]->HCHCTL = pp_ctl;\r\n\r\n  return status;\r\n}\r\n\r\n/*!\r\n    \\brief      prepare host channel for transferring packets\r\n    \\param[in]  pudev: pointer to usb device\r\n    \\param[in]  pipe_num: host pipe number which is in (0..7)\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusb_status usb_pipe_xfer(usb_core_driver *pudev, uint8_t pipe_num) {\r\n  usb_status status = USB_OK;\r\n\r\n  uint16_t dword_len    = 0U;\r\n  uint16_t packet_count = 0U;\r\n\r\n  __IO uint32_t pp_ctl = 0U;\r\n\r\n  usb_pipe *pp = &pudev->host.pipe[pipe_num];\r\n\r\n  uint16_t max_packet_len = pp->ep.mps;\r\n\r\n  /* compute the expected number of packets associated to the transfer */\r\n  if (pp->xfer_len > 0U) {\r\n    packet_count = (pp->xfer_len + max_packet_len - 1U) / max_packet_len;\r\n\r\n    if (packet_count > HC_MAX_PACKET_COUNT) {\r\n      packet_count = HC_MAX_PACKET_COUNT;\r\n      pp->xfer_len = packet_count * max_packet_len;\r\n    }\r\n  } else {\r\n    packet_count = 1U;\r\n  }\r\n\r\n  if (pp->ep.dir) {\r\n    pp->xfer_len = packet_count * max_packet_len;\r\n  }\r\n\r\n  /* initialize the host channel transfer information */\r\n  pudev->regs.pr[pipe_num]->HCHLEN = pp->xfer_len | pp->DPID | PIPE_XFER_PCNT(packet_count);\r\n\r\n  if (USB_USE_DMA == pudev->bp.transfer_mode) {\r\n    pudev->regs.pr[pipe_num]->HCHDMAADDR = (unsigned int)pp->xfer_buf;\r\n  }\r\n\r\n  pp_ctl = pudev->regs.pr[pipe_num]->HCHCTL;\r\n\r\n  if (usb_frame_even(pudev)) {\r\n    pp_ctl |= HCHCTL_ODDFRM;\r\n  } else {\r\n    pp_ctl &= ~HCHCTL_ODDFRM;\r\n  }\r\n\r\n  /* set host channel enabled */\r\n  pp_ctl |= HCHCTL_CEN;\r\n  pp_ctl &= ~HCHCTL_CDIS;\r\n\r\n  pudev->regs.pr[pipe_num]->HCHCTL = pp_ctl;\r\n\r\n  if (USB_USE_FIFO == pudev->bp.transfer_mode) {\r\n    if ((0U == pp->ep.dir) && (pp->xfer_len > 0U)) {\r\n      switch (pp->ep.type) {\r\n      /* non-periodic transfer */\r\n      case USB_EPTYPE_CTRL:\r\n      case USB_EPTYPE_BULK:\r\n        dword_len = (pp->xfer_len + 3U) / 4U;\r\n\r\n        /* check if there is enough space in fifo space */\r\n        if (dword_len > (pudev->regs.gr->HNPTFQSTAT & HNPTFQSTAT_NPTXFS)) {\r\n          /* need to process data in nptxfempty interrupt */\r\n          pudev->regs.gr->GINTEN |= GINTEN_NPTXFEIE;\r\n        }\r\n        break;\r\n\r\n      /* periodic transfer */\r\n      case USB_EPTYPE_INTR:\r\n      case USB_EPTYPE_ISOC:\r\n        dword_len = (pp->xfer_len + 3U) / 4U;\r\n\r\n        /* check if there is enough space in fifo space */\r\n        if (dword_len > (pudev->regs.hr->HPTFQSTAT & HPTFQSTAT_PTXFS)) {\r\n          /* need to process data in ptxfempty interrupt */\r\n          pudev->regs.gr->GINTEN |= GINTEN_PTXFEIE;\r\n        }\r\n        break;\r\n\r\n      default:\r\n        break;\r\n      }\r\n\r\n      /* write packet into the tx fifo. */\r\n      usb_txfifo_write(&pudev->regs, pp->xfer_buf, pipe_num, pp->xfer_len);\r\n    }\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/*!\r\n    \\brief      halt pipe\r\n    \\param[in]  pudev: pointer to usb device\r\n    \\param[in]  pipe_num: host pipe number which is in (0..7)\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusb_status usb_pipe_halt(usb_core_driver *pudev, uint8_t pipe_num) {\r\n  __IO uint32_t pp_ctl = pudev->regs.pr[pipe_num]->HCHCTL;\r\n\r\n  uint8_t ep_type = (pp_ctl & HCHCTL_EPTYPE) >> 18U;\r\n\r\n  pp_ctl |= HCHCTL_CEN | HCHCTL_CDIS;\r\n\r\n  switch (ep_type) {\r\n  case USB_EPTYPE_CTRL:\r\n  case USB_EPTYPE_BULK:\r\n    if (0U == (pudev->regs.gr->HNPTFQSTAT & HNPTFQSTAT_NPTXFS)) {\r\n      pp_ctl &= ~HCHCTL_CEN;\r\n    }\r\n    break;\r\n\r\n  case USB_EPTYPE_INTR:\r\n  case USB_EPTYPE_ISOC:\r\n    if (0U == (pudev->regs.hr->HPTFQSTAT & HPTFQSTAT_PTXFS)) {\r\n      pp_ctl &= ~HCHCTL_CEN;\r\n    }\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  pudev->regs.pr[pipe_num]->HCHCTL = pp_ctl;\r\n\r\n  return USB_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      configure host pipe to do ping operation\r\n    \\param[in]  pudev: pointer to usb device\r\n    \\param[in]  pipe_num: host pipe number which is in (0..7)\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusb_status usb_pipe_ping(usb_core_driver *pudev, uint8_t pipe_num) {\r\n  uint32_t pp_ctl = 0U;\r\n\r\n  pudev->regs.pr[pipe_num]->HCHLEN = HCHLEN_PING | (HCHLEN_PCNT & (1U << 19U));\r\n\r\n  pp_ctl = pudev->regs.pr[pipe_num]->HCHCTL;\r\n\r\n  pp_ctl |= HCHCTL_CEN;\r\n  pp_ctl &= ~HCHCTL_CDIS;\r\n\r\n  pudev->regs.pr[pipe_num]->HCHCTL = pp_ctl;\r\n\r\n  return USB_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      stop the USB host and clean up FIFO\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_host_stop(usb_core_driver *pudev) {\r\n  uint32_t      i;\r\n  __IO uint32_t pp_ctl = 0U;\r\n\r\n  pudev->regs.hr->HACHINTEN = 0x0U;\r\n  pudev->regs.hr->HACHINT   = 0xFFFFFFFFU;\r\n\r\n  /* flush out any leftover queued requests. */\r\n  for (i = 0U; i < pudev->bp.num_pipe; i++) {\r\n    pp_ctl = pudev->regs.pr[i]->HCHCTL;\r\n\r\n    pp_ctl &= ~(HCHCTL_CEN | HCHCTL_EPDIR);\r\n    pp_ctl |= HCHCTL_CDIS;\r\n\r\n    pudev->regs.pr[i]->HCHCTL = pp_ctl;\r\n  }\r\n\r\n  /* flush the FIFO */\r\n  usb_rxfifo_flush(&pudev->regs);\r\n  usb_txfifo_flush(&pudev->regs, 0x10U);\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/Usb/drv_usbd_int.c",
    "content": "/*!\r\n    \\file  drv_usbd_int.c\r\n    \\brief USB device mode interrupt routines\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n#include \"gd32vf103_libopt.h\"\r\n// #include \"usbd_conf.h\"\r\n#include \"drv_usbd_int.h\"\r\n#include \"usbd_transc.h\"\r\n\r\nstatic uint32_t usbd_int_epout(usb_core_driver *udev);\r\nstatic uint32_t usbd_int_epin(usb_core_driver *udev);\r\nstatic uint32_t usbd_int_rxfifo(usb_core_driver *udev);\r\nstatic uint32_t usbd_int_reset(usb_core_driver *udev);\r\nstatic uint32_t usbd_int_enumfinish(usb_core_driver *udev);\r\nstatic uint32_t usbd_int_suspend(usb_core_driver *udev);\r\n\r\nstatic uint32_t usbd_emptytxfifo_write(usb_core_driver *udev, uint32_t ep_num);\r\n\r\nstatic const uint8_t USB_SPEED[4] = {\r\n    [DSTAT_EM_HS_PHY_30MHZ_60MHZ] = USB_SPEED_HIGH, [DSTAT_EM_FS_PHY_30MHZ_60MHZ] = USB_SPEED_FULL, [DSTAT_EM_FS_PHY_48MHZ] = USB_SPEED_FULL, [DSTAT_EM_LS_PHY_6MHZ] = USB_SPEED_LOW};\r\n\r\n__IO uint8_t setupc_flag = 0U;\r\n\r\n#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED\r\n\r\n/*!\r\n    \\brief      USB dedicated OUT endpoint 1 interrupt service routine handler\r\n    \\param[in]  udev: pointer to usb device instance\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nuint32_t USBD_OTG_EP1OUT_ISR_Handler(usb_core_driver *udev) {\r\n  uint32_t oepintr = 0U;\r\n  uint32_t oeplen  = 0U;\r\n\r\n  oepintr = udev->regs.er_out[1]->DOEPINTF;\r\n  oepintr &= udev->regs.dr->DOEP1INTEN;\r\n\r\n  /* Transfer complete */\r\n  if (oepintr & DOEPINTF_TF) {\r\n    /* Clear the bit in DOEPINTn for this interrupt */\r\n    udev->regs.er_out[1]->DOEPINTF = DOEPINTF_TF;\r\n\r\n    if (USB_USE_DMA == udev->bp.transfer_mode) {\r\n      oeplen = udev->regs.er_out[1]->DOEPLEN;\r\n\r\n      /* ToDo : handle more than one single MPS size packet */\r\n      udev->dev.transc_out[1].xfer_count = udev->dev.transc_out[1].usb_transc - oeplen & DEPLEN_TLEN;\r\n    }\r\n\r\n    /* RX COMPLETE */\r\n    USBD_DCD_INT_fops->DataOutStage(udev, 1);\r\n  }\r\n\r\n  return 1;\r\n}\r\n\r\n/*!\r\n    \\brief      USB dedicated IN endpoint 1 interrupt service routine handler\r\n    \\param[in]  udev: pointer to usb device instance\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nuint32_t USBD_OTG_EP1IN_ISR_Handler(usb_core_driver *udev) {\r\n  uint32_t inten, intr, emptyen;\r\n\r\n  inten   = udev->regs.dr->DIEP1INTEN;\r\n  emptyen = udev->regs.dr->DIEPFEINTEN;\r\n\r\n  inten |= ((emptyen >> 1) & 0x1) << 7;\r\n\r\n  intr = udev->regs.er_in[1]->DIEPINTF & inten;\r\n\r\n  if (intr & DIEPINTF_TF) {\r\n    udev->regs.dr->DIEPFEINTEN &= ~(0x1 << 1);\r\n\r\n    udev->regs.er_in[1]->DIEPINTF = DIEPINTF_TF;\r\n\r\n    /* TX COMPLETE */\r\n    USBD_DCD_INT_fops->DataInStage(udev, 1);\r\n  }\r\n\r\n  if (intr & DIEPINTF_TXFE) {\r\n    DCD_WriteEmptyTxFifo(udev, 1);\r\n\r\n    udev->regs.er_in[1]->DIEPINTF = DIEPINTF_TXFE;\r\n  }\r\n\r\n  return 1;\r\n}\r\n\r\n#endif\r\n\r\n/*!\r\n    \\brief      USB device-mode interrupts global service routine handler\r\n    \\param[in]  udev: pointer to usb device instance\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usbd_isr(usb_core_driver *udev) {\r\n  if (HOST_MODE != (udev->regs.gr->GINTF & GINTF_COPM)) {\r\n    uint32_t intr = udev->regs.gr->GINTF & udev->regs.gr->GINTEN;\r\n\r\n    /* there are no interrupts, avoid spurious interrupt */\r\n    if (!intr) {\r\n      return;\r\n    }\r\n\r\n    /* OUT endpoints interrupts */\r\n    if (intr & GINTF_OEPIF) {\r\n      usbd_int_epout(udev);\r\n    }\r\n\r\n    /* IN endpoints interrupts */\r\n    if (intr & GINTF_IEPIF) {\r\n      usbd_int_epin(udev);\r\n    }\r\n\r\n    /* suspend interrupt */\r\n    if (intr & GINTF_SP) {\r\n      usbd_int_suspend(udev);\r\n    }\r\n\r\n    /* wakeup interrupt */\r\n    if (intr & GINTF_WKUPIF) {\r\n      /* inform upper layer by the resume event */\r\n      udev->dev.cur_status = udev->dev.backup_status;\r\n\r\n      /* clear interrupt */\r\n      udev->regs.gr->GINTF = GINTF_WKUPIF;\r\n    }\r\n\r\n    /* wakeup interrupt */\r\n    if (intr & GINTF_MFIF) {\r\n\r\n      /* clear interrupt */\r\n      udev->regs.gr->GINTF = GINTF_MFIF;\r\n    }\r\n\r\n    /* start of frame interrupt */\r\n    if (intr & GINTF_SOF) {\r\n      if (udev->dev.class_core->SOF) {\r\n        udev->dev.class_core->SOF(udev);\r\n      }\r\n\r\n      if (0U != setupc_flag) {\r\n        setupc_flag++;\r\n\r\n        if (setupc_flag >= 3U) {\r\n          usbd_setup_transc(udev);\r\n\r\n          setupc_flag = 0U;\r\n        }\r\n      }\r\n\r\n      /* clear interrupt */\r\n      udev->regs.gr->GINTF = GINTF_SOF;\r\n    }\r\n\r\n    /* receive FIFO not empty interrupt */\r\n    if (intr & GINTF_RXFNEIF) {\r\n      usbd_int_rxfifo(udev);\r\n    }\r\n\r\n    /* USB reset interrupt */\r\n    if (intr & GINTF_RST) {\r\n      usbd_int_reset(udev);\r\n    }\r\n\r\n    /* enumeration has been done interrupt */\r\n    if (intr & GINTF_ENUMFIF) {\r\n      usbd_int_enumfinish(udev);\r\n    }\r\n\r\n    /* incomplete synchronization IN transfer interrupt*/\r\n    if (intr & GINTF_ISOINCIF) {\r\n      if (NULL != udev->dev.class_core->incomplete_isoc_in) {\r\n        udev->dev.class_core->incomplete_isoc_in(udev);\r\n      }\r\n\r\n      /* Clear interrupt */\r\n      udev->regs.gr->GINTF = GINTF_ISOINCIF;\r\n    }\r\n\r\n    /* incomplete synchronization OUT transfer interrupt*/\r\n    if (intr & GINTF_ISOONCIF) {\r\n      if (NULL != udev->dev.class_core->incomplete_isoc_out) {\r\n        udev->dev.class_core->incomplete_isoc_out(udev);\r\n      }\r\n\r\n      /* clear interrupt */\r\n      udev->regs.gr->GINTF = GINTF_ISOONCIF;\r\n    }\r\n\r\n#ifdef VBUS_SENSING_ENABLED\r\n\r\n    /* Session request interrupt */\r\n    if (intr & GINTF_SESIF) {\r\n      udev->regs.gr->GINTF = GINTF_SESIF;\r\n    }\r\n\r\n    /* OTG mode interrupt */\r\n    if (intr & GINTF_OTGIF) {\r\n      if (udev->regs.gr->GOTGINTF & GOTGINTF_SESEND) {\r\n      }\r\n\r\n      /* Clear OTG interrupt */\r\n      udev->regs.gr->GINTF = GINTF_OTGIF;\r\n    }\r\n#endif\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      indicates that an OUT endpoint has a pending interrupt\r\n    \\param[in]  udev: pointer to usb device instance\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nstatic uint32_t usbd_int_epout(usb_core_driver *udev) {\r\n  uint32_t epintnum = 0U;\r\n  uint32_t ep_num   = 0U;\r\n\r\n  for (epintnum = usb_oepintnum_read(udev); epintnum; epintnum >>= 1, ep_num++) {\r\n    if (epintnum & 0x1) {\r\n      __IO uint32_t oepintr = usb_oepintr_read(udev, ep_num);\r\n\r\n      /* transfer complete interrupt */\r\n      if (oepintr & DOEPINTF_TF) {\r\n        /* clear the bit in DOEPINTF for this interrupt */\r\n        udev->regs.er_out[ep_num]->DOEPINTF = DOEPINTF_TF;\r\n\r\n        if (USB_USE_DMA == udev->bp.transfer_mode) {\r\n          __IO uint32_t eplen = udev->regs.er_out[ep_num]->DOEPLEN;\r\n\r\n          udev->dev.transc_out[ep_num].xfer_count = udev->dev.transc_out[ep_num].max_len - (eplen & DEPLEN_TLEN);\r\n        }\r\n\r\n        /* inform upper layer: data ready */\r\n        usbd_out_transc(udev, ep_num);\r\n\r\n        if (USB_USE_DMA == udev->bp.transfer_mode) {\r\n          if ((0U == ep_num) && (USB_CTL_STATUS_OUT == udev->dev.control.ctl_state)) {\r\n            usb_ctlep_startout(udev);\r\n          }\r\n        }\r\n      }\r\n\r\n      /* setup phase finished interrupt (control endpoints) */\r\n      if (oepintr & DOEPINTF_STPF) {\r\n        /* inform the upper layer that a setup packet is available */\r\n        if ((0U == ep_num) && (0U != setupc_flag)) {\r\n          usbd_setup_transc(udev);\r\n\r\n          setupc_flag = 0U;\r\n\r\n          udev->regs.er_out[ep_num]->DOEPINTF = DOEPINTF_STPF;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  return 1;\r\n}\r\n\r\n/*!\r\n    \\brief      indicates that an IN endpoint has a pending interrupt\r\n    \\param[in]  udev: pointer to usb device instance\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nstatic uint32_t usbd_int_epin(usb_core_driver *udev) {\r\n  uint32_t epintnum = 0U;\r\n  uint32_t ep_num   = 0U;\r\n\r\n  for (epintnum = usb_iepintnum_read(udev); epintnum; epintnum >>= 1, ep_num++) {\r\n    if (epintnum & 0x1U) {\r\n      __IO uint32_t iepintr = usb_iepintr_read(udev, ep_num);\r\n\r\n      if (iepintr & DIEPINTF_TF) {\r\n        udev->regs.er_in[ep_num]->DIEPINTF = DIEPINTF_TF;\r\n\r\n        /* data transmittion is completed */\r\n        usbd_in_transc(udev, ep_num);\r\n\r\n        if (USB_USE_DMA == udev->bp.transfer_mode) {\r\n          if ((0U == ep_num) && (USB_CTL_STATUS_IN == udev->dev.control.ctl_state)) {\r\n            usb_ctlep_startout(udev);\r\n          }\r\n        }\r\n      }\r\n\r\n      if (iepintr & DIEPINTF_TXFE) {\r\n        usbd_emptytxfifo_write(udev, ep_num);\r\n\r\n        udev->regs.er_in[ep_num]->DIEPINTF = DIEPINTF_TXFE;\r\n      }\r\n    }\r\n  }\r\n\r\n  return 1;\r\n}\r\n\r\n/*!\r\n    \\brief      handle the RX status queue level interrupt\r\n    \\param[in]  udev: pointer to usb device instance\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nstatic uint32_t usbd_int_rxfifo(usb_core_driver *udev) {\r\n  usb_transc *transc = NULL;\r\n\r\n  uint8_t  data_PID = 0;\r\n  uint32_t bcount   = 0;\r\n\r\n  __IO uint32_t devrxstat = 0;\r\n\r\n  /* disable the Rx status queue non-empty interrupt */\r\n  udev->regs.gr->GINTEN &= ~GINTEN_RXFNEIE;\r\n\r\n  /* get the status from the top of the FIFO */\r\n  devrxstat = udev->regs.gr->GRSTATP;\r\n\r\n  transc = &udev->dev.transc_out[devrxstat & GRSTATRP_EPNUM];\r\n\r\n  bcount   = (devrxstat & GRSTATRP_BCOUNT) >> 4;\r\n  data_PID = (devrxstat & GRSTATRP_DPID) >> 15;\r\n\r\n  switch ((devrxstat & GRSTATRP_RPCKST) >> 17) {\r\n  case RSTAT_GOUT_NAK:\r\n    break;\r\n\r\n  case RSTAT_DATA_UPDT:\r\n    if (bcount > 0) {\r\n      usb_rxfifo_read(&udev->regs, transc->xfer_buf, bcount);\r\n\r\n      transc->xfer_buf += bcount;\r\n      transc->xfer_count += bcount;\r\n    }\r\n    break;\r\n\r\n  case RSTAT_XFER_COMP:\r\n    /* trigger the OUT enpoint interrupt */\r\n    break;\r\n\r\n  case RSTAT_SETUP_COMP:\r\n    /* trigger the OUT enpoint interrupt */\r\n    break;\r\n\r\n  case RSTAT_SETUP_UPDT:\r\n    if ((transc->ep_addr.num == 0) && (bcount == 8) && (data_PID == DPID_DATA0)) {\r\n      /* copy the setup packet received in FIFO into the setup buffer in RAM */\r\n      usb_rxfifo_read(&udev->regs, (uint8_t *)&udev->dev.control.req, bcount);\r\n\r\n      transc->xfer_count += bcount;\r\n\r\n      setupc_flag = 1;\r\n    }\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* enable the Rx status queue level interrupt */\r\n  udev->regs.gr->GINTEN |= GINTEN_RXFNEIE;\r\n\r\n  return 1;\r\n}\r\n\r\n/*!\r\n    \\brief      handle USB reset interrupt\r\n    \\param[in]  udev: pointer to usb device instance\r\n    \\param[out] none\r\n    \\retval     status\r\n*/\r\nstatic uint32_t usbd_int_reset(usb_core_driver *udev) {\r\n  uint32_t i;\r\n\r\n  /* clear the remote wakeup signaling */\r\n  udev->regs.dr->DCTL &= ~DCTL_RWKUP;\r\n\r\n  /* flush the Tx FIFO */\r\n  usb_txfifo_flush(&udev->regs, 0);\r\n\r\n  for (i = 0; i < udev->bp.num_ep; i++) {\r\n    udev->regs.er_in[i]->DIEPINTF  = 0xFFU;\r\n    udev->regs.er_out[i]->DOEPINTF = 0xFFU;\r\n  }\r\n\r\n  /* clear all pending device endpoint interrupts */\r\n  udev->regs.dr->DAEPINT = 0xFFFFFFFFU;\r\n\r\n  /* enable endpoint 0 interrupts */\r\n  udev->regs.dr->DAEPINTEN = 1U | (1U << 16);\r\n\r\n  /* enable OUT endpoint interrupts */\r\n  udev->regs.dr->DOEPINTEN = DOEPINTEN_STPFEN | DOEPINTEN_TFEN;\r\n\r\n  /* enable IN endpoint interrupts */\r\n  udev->regs.dr->DIEPINTEN = DIEPINTEN_TFEN;\r\n\r\n  /* reset device address */\r\n  udev->regs.dr->DCFG &= ~DCFG_DAR;\r\n  udev->dev.dev_addr = 0U;\r\n\r\n  /* configure endpoint 0 to receive SETUP packets */\r\n  usb_ctlep_startout(udev);\r\n\r\n  /* clear USB reset interrupt */\r\n  udev->regs.gr->GINTF = GINTF_RST;\r\n\r\n  udev->dev.transc_out[0] = (usb_transc){.ep_type = USB_EPTYPE_CTRL, .max_len = USB_FS_EP0_MAX_LEN};\r\n\r\n  usb_transc_active(udev, &udev->dev.transc_out[0]);\r\n\r\n  udev->dev.transc_in[0] = (usb_transc){.ep_addr = {.dir = 1},\r\n\r\n                                        .ep_type = USB_EPTYPE_CTRL,\r\n                                        .max_len = USB_FS_EP0_MAX_LEN};\r\n\r\n  usb_transc_active(udev, &udev->dev.transc_in[0]);\r\n\r\n  /* upon reset call usr call back */\r\n  udev->dev.cur_status = USBD_DEFAULT;\r\n\r\n  return 1;\r\n}\r\n\r\n/*!\r\n    \\brief      handle USB speed enumeration finish interrupt\r\n    \\param[in]  udev: pointer to usb device instance\r\n    \\param[out] none\r\n    \\retval     status\r\n*/\r\nstatic uint32_t usbd_int_enumfinish(usb_core_driver *udev) {\r\n  uint8_t enum_speed = (uint8_t)((udev->regs.dr->DSTAT & DSTAT_ES) >> 1U);\r\n\r\n  udev->regs.dr->DCTL &= ~DCTL_CGINAK;\r\n  udev->regs.dr->DCTL |= DCTL_CGINAK;\r\n\r\n  udev->regs.gr->GUSBCS &= ~GUSBCS_UTT;\r\n\r\n  /* set USB turn-around time based on device speed and PHY interface */\r\n  if (USB_SPEED[enum_speed] == USB_SPEED_HIGH) {\r\n    udev->bp.core_speed = USB_SPEED_HIGH;\r\n\r\n    udev->regs.gr->GUSBCS |= 0x09 << 10;\r\n  } else {\r\n    udev->bp.core_speed = USB_SPEED_FULL;\r\n\r\n    udev->regs.gr->GUSBCS |= 0x05 << 10;\r\n  }\r\n\r\n  /* clear interrupt */\r\n  udev->regs.gr->GINTF = GINTF_ENUMFIF;\r\n\r\n  return 1;\r\n}\r\n\r\n/*!\r\n    \\brief      USB suspend interrupt handler\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nstatic uint32_t usbd_int_suspend(usb_core_driver *udev) {\r\n  __IO uint8_t low_power     = udev->bp.low_power;\r\n  __IO uint8_t suspend       = (uint8_t)(udev->regs.dr->DSTAT & DSTAT_SPST);\r\n  __IO uint8_t is_configured = (udev->dev.cur_status == USBD_CONFIGURED) ? 1U : 0U;\r\n\r\n  udev->dev.backup_status = udev->dev.cur_status;\r\n  udev->dev.cur_status    = USBD_SUSPENDED;\r\n\r\n  if (low_power && suspend && is_configured) {\r\n    /* switch-off the otg clocks */\r\n    *udev->regs.PWRCLKCTL |= PWRCLKCTL_SUCLK | PWRCLKCTL_SHCLK;\r\n\r\n    /* enter DEEP_SLEEP mode with LDO in low power mode */\r\n    pmu_to_deepsleepmode(PMU_LDO_LOWPOWER, WFI_CMD);\r\n  }\r\n\r\n  /* clear interrupt */\r\n  udev->regs.gr->GINTF = GINTF_SP;\r\n\r\n  return 1U;\r\n}\r\n\r\n/*!\r\n    \\brief      check FIFO for the next packet to be loaded\r\n    \\param[in]  udev: pointer to usb device instance\r\n    \\param[in]  ep_num: endpoint identifier which is in (0..3)\r\n    \\param[out] none\r\n    \\retval     status\r\n*/\r\nstatic uint32_t usbd_emptytxfifo_write(usb_core_driver *udev, uint32_t ep_num) {\r\n  usb_transc *transc = NULL;\r\n\r\n  uint32_t len        = 0;\r\n  uint32_t word_count = 0;\r\n\r\n  transc = &udev->dev.transc_in[ep_num];\r\n\r\n  len = transc->xfer_len - transc->xfer_count;\r\n\r\n  /* get the data length to write */\r\n  if (len > transc->max_len) {\r\n    len = transc->max_len;\r\n  }\r\n\r\n  word_count = (len + 3) / 4;\r\n\r\n  while (((udev->regs.er_in[ep_num]->DIEPTFSTAT & DIEPTFSTAT_IEPTFS) > word_count) && (transc->xfer_count < transc->xfer_len)) {\r\n    len = transc->xfer_len - transc->xfer_count;\r\n\r\n    if (len > transc->max_len) {\r\n      len = transc->max_len;\r\n    }\r\n\r\n    /* write FIFO in word(4bytes) */\r\n    word_count = (len + 3) / 4;\r\n\r\n    /* write the FIFO */\r\n    usb_txfifo_write(&udev->regs, transc->xfer_buf, ep_num, len);\r\n\r\n    transc->xfer_buf += len;\r\n    transc->xfer_count += len;\r\n\r\n    if (transc->xfer_count == transc->xfer_len) {\r\n      /* disable the device endpoint FIFO empty interrupt */\r\n      udev->regs.dr->DIEPFEINTEN &= ~(0x01 << ep_num);\r\n    }\r\n  }\r\n\r\n  return 1;\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/Usb/drv_usbh_int.c",
    "content": "/*!\r\n    \\file  drv_usbh_int.c\r\n    \\brief USB host mode interrupt handler file\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"drv_usbh_int.h\"\r\n#include \"drv_usb_core.h\"\r\n#include \"drv_usb_host.h\"\r\n\r\n#if defined(__GNUC__) /*!< GNU compiler */\r\n#pragma GCC optimize(\"O0\")\r\n#endif /* __GNUC__ */\r\n\r\nstatic uint32_t usbh_int_port(usb_core_driver *pudev);\r\nstatic uint32_t usbh_int_pipe(usb_core_driver *pudev);\r\nstatic uint32_t usbh_int_pipe_in(usb_core_driver *pudev, uint32_t pp_num);\r\nstatic uint32_t usbh_int_pipe_out(usb_core_driver *pudev, uint32_t pp_num);\r\nstatic uint32_t usbh_int_rxfifonoempty(usb_core_driver *pudev);\r\nstatic uint32_t usbh_int_txfifoempty(usb_core_driver *pudev, usb_pipe_mode pp_mode);\r\n\r\nstatic inline void usb_pp_halt(usb_core_driver *pudev, uint8_t pp_num, uint32_t pp_int, usb_pipe_staus pp_status) {\r\n  pudev->regs.pr[pp_num]->HCHINTEN |= HCHINTEN_CHIE;\r\n\r\n  usb_pipe_halt(pudev, pp_num);\r\n\r\n  pudev->regs.pr[pp_num]->HCHINTF = pp_int;\r\n\r\n  pudev->host.pipe[pp_num].pp_status = pp_status;\r\n}\r\n\r\n/*!\r\n    \\brief      handle global host interrupt\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nuint32_t usbh_isr(usb_core_driver *pudev) {\r\n  uint32_t Retval = 0U;\r\n\r\n  __IO uint32_t intr = 0U;\r\n\r\n  /* check if host mode */\r\n  if (HOST_MODE == (pudev->regs.gr->GINTF & GINTF_COPM)) {\r\n    intr = usb_coreintr_get(&pudev->regs);\r\n\r\n    if (!intr) {\r\n      return 0;\r\n    }\r\n\r\n    if (intr & GINTF_SOF) {\r\n      usbh_int_fop->SOF(pudev);\r\n\r\n      /* clear interrupt */\r\n      pudev->regs.gr->GINTF = GINTF_SOF;\r\n    }\r\n\r\n    if (intr & GINTF_RXFNEIF) {\r\n      Retval |= usbh_int_rxfifonoempty(pudev);\r\n    }\r\n\r\n    if (intr & GINTF_NPTXFEIF) {\r\n      Retval |= usbh_int_txfifoempty(pudev, PIPE_NON_PERIOD);\r\n    }\r\n\r\n    if (intr & GINTF_PTXFEIF) {\r\n      Retval |= usbh_int_txfifoempty(pudev, PIPE_PERIOD);\r\n    }\r\n\r\n    if (intr & GINTF_HCIF) {\r\n      Retval |= usbh_int_pipe(pudev);\r\n    }\r\n\r\n    if (intr & GINTF_HPIF) {\r\n      Retval |= usbh_int_port(pudev);\r\n    }\r\n\r\n    if (intr & GINTF_DISCIF) {\r\n      pudev->host.connect_status = 0U;\r\n\r\n      /* clear interrupt */\r\n      pudev->regs.gr->GINTF = GINTF_DISCIF;\r\n    }\r\n\r\n    if (intr & GINTF_ISOONCIF) {\r\n      pudev->regs.pr[0]->HCHCTL |= HCHCTL_CEN | HCHCTL_CDIS;\r\n\r\n      /* clear interrupt */\r\n      pudev->regs.gr->GINTF = GINTF_ISOONCIF;\r\n    }\r\n  }\r\n\r\n  return Retval;\r\n}\r\n\r\n/*!\r\n    \\brief      handle all host channels interrupt\r\n    \\param[in]  pudev: pointer to usb device instance\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nstatic uint32_t usbh_int_pipe(usb_core_driver *pudev) {\r\n  uint32_t pp_num = 0U;\r\n  uint32_t retval = 0U;\r\n\r\n  for (pp_num = 0U; pp_num < pudev->bp.num_pipe; pp_num++) {\r\n    if ((pudev->regs.hr->HACHINT & HACHINT_HACHINT) & (1U << pp_num)) {\r\n      if (pudev->regs.pr[pp_num]->HCHCTL & HCHCTL_EPDIR) {\r\n        retval |= usbh_int_pipe_in(pudev, pp_num);\r\n      } else {\r\n        retval |= usbh_int_pipe_out(pudev, pp_num);\r\n      }\r\n    }\r\n  }\r\n\r\n  return retval;\r\n}\r\n\r\n/*!\r\n    \\brief      handle the TX FIFO empty interrupt\r\n    \\param[in]  pudev: pointer to usb device instance\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nstatic uint32_t usbh_int_txfifoempty(usb_core_driver *pudev, usb_pipe_mode pp_mode) {\r\n  uint8_t        pp_num     = 0U;\r\n  uint16_t       word_count = 0U, len = 0U;\r\n  __IO uint32_t *txfiforeg = 0U, txfifostate = 0U;\r\n\r\n  if (PIPE_NON_PERIOD == pp_mode) {\r\n    txfiforeg = &pudev->regs.gr->HNPTFQSTAT;\r\n  } else if (PIPE_PERIOD == pp_mode) {\r\n    txfiforeg = &pudev->regs.hr->HPTFQSTAT;\r\n  } else {\r\n    return 0U;\r\n  }\r\n\r\n  txfifostate = *txfiforeg;\r\n\r\n  pp_num = (txfifostate & TFQSTAT_CNUM) >> 27U;\r\n\r\n  word_count = (pudev->host.pipe[pp_num].xfer_len + 3U) / 4U;\r\n\r\n  while (((txfifostate & TFQSTAT_TXFS) > word_count) && (0U != pudev->host.pipe[pp_num].xfer_len)) {\r\n    len = (txfifostate & TFQSTAT_TXFS) * 4U;\r\n\r\n    if (len > pudev->host.pipe[pp_num].xfer_len) {\r\n      /* last packet */\r\n      len = pudev->host.pipe[pp_num].xfer_len;\r\n\r\n      if (PIPE_NON_PERIOD == pp_mode) {\r\n        pudev->regs.gr->GINTEN &= ~GINTEN_NPTXFEIE;\r\n      } else {\r\n        pudev->regs.gr->GINTEN &= ~GINTEN_PTXFEIE;\r\n      }\r\n    }\r\n\r\n    word_count = (pudev->host.pipe[pp_num].xfer_len + 3U) / 4U;\r\n    usb_txfifo_write(&pudev->regs, pudev->host.pipe[pp_num].xfer_buf, pp_num, len);\r\n\r\n    pudev->host.pipe[pp_num].xfer_buf += len;\r\n    pudev->host.pipe[pp_num].xfer_len -= len;\r\n    pudev->host.pipe[pp_num].xfer_count += len;\r\n\r\n    txfifostate = *txfiforeg;\r\n  }\r\n\r\n  return 1;\r\n}\r\n\r\n/*!\r\n    \\brief      handle the host port interrupt\r\n    \\param[in]  pudev: pointer to usb device instance\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nstatic uint32_t usbh_int_port(usb_core_driver *pudev) {\r\n  uint32_t retval = 0U;\r\n\r\n  __IO uint32_t port_state = *pudev->regs.HPCS;\r\n\r\n  /* clear the interrupt bits in GINTSTS */\r\n  port_state &= ~(HPCS_PE | HPCS_PCD | HPCS_PEDC);\r\n\r\n  /* port connect detected */\r\n  if (*pudev->regs.HPCS & HPCS_PCD) {\r\n    port_state |= HPCS_PCD;\r\n\r\n    pudev->host.connect_status = 1U;\r\n\r\n    retval |= 1U;\r\n  }\r\n\r\n  /* port enable changed */\r\n  if (*pudev->regs.HPCS & HPCS_PEDC) {\r\n    port_state |= HPCS_PEDC;\r\n\r\n    if (*pudev->regs.HPCS & HPCS_PE) {\r\n      uint32_t port_speed = usb_curspeed_get(pudev);\r\n      uint32_t clock_type = pudev->regs.hr->HCTL & HCTL_CLKSEL;\r\n\r\n      pudev->host.connect_status = 1U;\r\n\r\n      if (PORT_SPEED_LOW == port_speed) {\r\n        pudev->regs.hr->HFT = 6000U;\r\n\r\n        if (HCTL_6MHZ != clock_type) {\r\n          if (USB_EMBEDDED_PHY == pudev->bp.phy_itf) {\r\n            usb_phyclock_config(pudev, HCTL_6MHZ);\r\n          }\r\n        }\r\n      } else if (PORT_SPEED_FULL == port_speed) {\r\n        pudev->regs.hr->HFT = 48000U;\r\n\r\n        if (HCTL_48MHZ != clock_type) {\r\n          usb_phyclock_config(pudev, HCTL_48MHZ);\r\n        }\r\n      } else {\r\n        /* for high speed device and others */\r\n      }\r\n\r\n      pudev->host.port_enabled = 1U;\r\n\r\n      pudev->regs.gr->GINTEN |= GINTEN_DISCIE;\r\n    } else {\r\n      pudev->host.port_enabled = 0U;\r\n    }\r\n  }\r\n\r\n  /* clear port interrupts */\r\n  *pudev->regs.HPCS = port_state;\r\n\r\n  return retval;\r\n}\r\n\r\n/*!\r\n    \\brief      handle the OUT channel interrupt\r\n    \\param[in]  pudev: pointer to usb device instance\r\n    \\param[in]  pp_num: host channel number which is in (0..7)\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nuint32_t usbh_int_pipe_out(usb_core_driver *pudev, uint32_t pp_num) {\r\n  usb_pr *pp_reg = pudev->regs.pr[pp_num];\r\n\r\n  usb_pipe *pp = &pudev->host.pipe[pp_num];\r\n\r\n  uint32_t intr_pp = pp_reg->HCHINTF & pp_reg->HCHINTEN;\r\n\r\n  if (intr_pp & HCHINTF_ACK) {\r\n    pp_reg->HCHINTF = HCHINTF_ACK;\r\n  } else if (intr_pp & HCHINTF_STALL) {\r\n    usb_pp_halt(pudev, pp_num, HCHINTF_STALL, PIPE_STALL);\r\n  } else if (intr_pp & HCHINTF_DTER) {\r\n    usb_pp_halt(pudev, pp_num, HCHINTF_DTER, PIPE_DTGERR);\r\n    pp_reg->HCHINTF = HCHINTF_NAK;\r\n  } else if (intr_pp & HCHINTF_REQOVR) {\r\n    usb_pp_halt(pudev, pp_num, HCHINTF_REQOVR, PIPE_REQOVR);\r\n  } else if (intr_pp & HCHINTF_TF) {\r\n    pp->err_count = 0U;\r\n    usb_pp_halt(pudev, pp_num, HCHINTF_TF, PIPE_XF);\r\n  } else if (intr_pp & HCHINTF_NAK) {\r\n    pp->err_count = 0U;\r\n    usb_pp_halt(pudev, pp_num, HCHINTF_NAK, PIPE_NAK);\r\n  } else if (intr_pp & HCHINTF_USBER) {\r\n    pp->err_count++;\r\n    usb_pp_halt(pudev, pp_num, HCHINTF_USBER, PIPE_TRACERR);\r\n  } else if (intr_pp & HCHINTF_NYET) {\r\n    pp->err_count = 0U;\r\n    usb_pp_halt(pudev, pp_num, HCHINTF_NYET, PIPE_NYET);\r\n  } else if (intr_pp & HCHINTF_CH) {\r\n    pudev->regs.pr[pp_num]->HCHINTEN &= ~HCHINTEN_CHIE;\r\n\r\n    switch (pp->pp_status) {\r\n    case PIPE_XF:\r\n      pp->urb_state = URB_DONE;\r\n\r\n      if (USB_EPTYPE_BULK == ((pp_reg->HCHCTL & HCHCTL_EPTYPE) >> 18U)) {\r\n        pp->data_toggle_out ^= 1U;\r\n      }\r\n      break;\r\n\r\n    case PIPE_NAK:\r\n      pp->urb_state = URB_NOTREADY;\r\n      break;\r\n\r\n    case PIPE_NYET:\r\n      if (1U == pudev->host.pipe[pp_num].ping) {\r\n        usb_pipe_ping(pudev, pp_num);\r\n      }\r\n\r\n      pp->urb_state = URB_NOTREADY;\r\n      break;\r\n\r\n    case PIPE_STALL:\r\n      pp->urb_state = URB_STALL;\r\n      break;\r\n\r\n    case PIPE_TRACERR:\r\n      if (3U == pp->err_count) {\r\n        pp->urb_state = URB_ERROR;\r\n        pp->err_count = 0U;\r\n      }\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n\r\n    pp_reg->HCHINTF = HCHINTF_CH;\r\n  }\r\n\r\n  return 1;\r\n}\r\n\r\n/*!\r\n    \\brief      handle the IN channel interrupt\r\n    \\param[in]  pudev: pointer to usb device instance\r\n    \\param[in]  pp_num: host channel number which is in (0..7)\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nuint32_t usbh_int_pipe_in(usb_core_driver *pudev, uint32_t pp_num) {\r\n  usb_pr *pp_reg = pudev->regs.pr[pp_num];\r\n\r\n  usb_pipe *pp = &pudev->host.pipe[pp_num];\r\n\r\n  __IO uint32_t intr_pp = pp_reg->HCHINTF & pp_reg->HCHINTEN;\r\n\r\n  uint8_t ep_type = (pp_reg->HCHCTL & HCHCTL_EPTYPE) >> 18U;\r\n\r\n  if (intr_pp & HCHINTF_ACK) {\r\n    pp_reg->HCHINTF = HCHINTF_ACK;\r\n  } else if (intr_pp & HCHINTF_STALL) {\r\n    usb_pp_halt(pudev, pp_num, HCHINTF_STALL, PIPE_STALL);\r\n    pp_reg->HCHINTF = HCHINTF_NAK;\r\n\r\n    /* note: When there is a 'STALL', reset also nak,\r\n       else, the pudev->host.pp_status = HC_STALL\r\n       will be overwritten by 'NAK' in code below */\r\n    intr_pp &= ~HCHINTF_NAK;\r\n  } else if (intr_pp & HCHINTF_DTER) {\r\n    usb_pp_halt(pudev, pp_num, HCHINTF_DTER, PIPE_DTGERR);\r\n    pp_reg->HCHINTF = HCHINTF_NAK;\r\n  }\r\n\r\n  if (intr_pp & HCHINTF_REQOVR) {\r\n    usb_pp_halt(pudev, pp_num, HCHINTF_REQOVR, PIPE_REQOVR);\r\n  } else if (intr_pp & HCHINTF_TF) {\r\n    if (USB_USE_DMA == pudev->bp.transfer_mode) {\r\n      pudev->host.backup_xfercount[pp_num] = pp->xfer_len - (pp_reg->HCHLEN & HCHLEN_TLEN);\r\n    }\r\n\r\n    pp->pp_status = PIPE_XF;\r\n    pp->err_count = 0U;\r\n\r\n    pp_reg->HCHINTF = HCHINTF_TF;\r\n\r\n    switch (ep_type) {\r\n    case USB_EPTYPE_CTRL:\r\n    case USB_EPTYPE_BULK:\r\n      usb_pp_halt(pudev, pp_num, HCHINTF_NAK, PIPE_XF);\r\n\r\n      pp->data_toggle_in ^= 1U;\r\n      break;\r\n\r\n    case USB_EPTYPE_INTR:\r\n      pp_reg->HCHCTL |= HCHCTL_ODDFRM;\r\n      pp->urb_state = URB_DONE;\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  } else if (intr_pp & HCHINTF_CH) {\r\n    pp_reg->HCHINTEN &= ~HCHINTEN_CHIE;\r\n\r\n    switch (pp->pp_status) {\r\n    case PIPE_XF:\r\n      pp->urb_state = URB_DONE;\r\n      break;\r\n\r\n    case PIPE_STALL:\r\n      pp->urb_state = URB_STALL;\r\n      break;\r\n\r\n    case PIPE_TRACERR:\r\n    case PIPE_DTGERR:\r\n      pp->err_count = 0U;\r\n      pp->urb_state = URB_ERROR;\r\n      break;\r\n\r\n    default:\r\n      if (USB_EPTYPE_INTR == ep_type) {\r\n        pp->data_toggle_in ^= 1U;\r\n      }\r\n      break;\r\n    }\r\n\r\n    pp_reg->HCHINTF = HCHINTF_CH;\r\n  } else if (intr_pp & HCHINTF_BBER) {\r\n    pp->err_count++;\r\n    usb_pp_halt(pudev, pp_num, HCHINTF_BBER, PIPE_TRACERR);\r\n  } else if (intr_pp & HCHINTF_NAK) {\r\n    switch (ep_type) {\r\n    case USB_EPTYPE_CTRL:\r\n    case USB_EPTYPE_BULK:\r\n      /* re-activate the channel */\r\n      pp_reg->HCHCTL = (pp_reg->HCHCTL | HCHCTL_CEN) & ~HCHCTL_CDIS;\r\n      break;\r\n\r\n    case USB_EPTYPE_INTR:\r\n      pp_reg->HCHINTEN |= HCHINTEN_CHIE;\r\n\r\n      usb_pipe_halt(pudev, pp_num);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n\r\n    pp->pp_status = PIPE_NAK;\r\n\r\n    pp_reg->HCHINTF = HCHINTF_NAK;\r\n  }\r\n\r\n  return 1;\r\n}\r\n\r\n/*!\r\n    \\brief      handle the rx fifo non-empty interrupt\r\n    \\param[in]  pudev: pointer to usb device instance\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nstatic uint32_t usbh_int_rxfifonoempty(usb_core_driver *pudev) {\r\n  uint32_t count = 0U;\r\n\r\n  __IO uint8_t  pp_num  = 0U;\r\n  __IO uint32_t rx_stat = 0U;\r\n\r\n  /* disable the rx status queue level interrupt */\r\n  pudev->regs.gr->GINTEN &= ~GINTEN_RXFNEIE;\r\n\r\n  rx_stat = pudev->regs.gr->GRSTATP;\r\n  pp_num  = rx_stat & GRSTATRP_CNUM;\r\n\r\n  switch ((rx_stat & GRSTATRP_RPCKST) >> 17U) {\r\n  case GRXSTS_PKTSTS_IN:\r\n    count = (rx_stat & GRSTATRP_BCOUNT) >> 4U;\r\n\r\n    /* read the data into the host buffer. */\r\n    if ((count > 0U) && (NULL != pudev->host.pipe[pp_num].xfer_buf)) {\r\n      usb_rxfifo_read(&pudev->regs, pudev->host.pipe[pp_num].xfer_buf, count);\r\n\r\n      /* manage multiple transfer packet */\r\n      pudev->host.pipe[pp_num].xfer_buf += count;\r\n      pudev->host.pipe[pp_num].xfer_count += count;\r\n\r\n      pudev->host.backup_xfercount[pp_num] = pudev->host.pipe[pp_num].xfer_count;\r\n\r\n      if (pudev->regs.pr[pp_num]->HCHLEN & HCHLEN_PCNT) {\r\n        /* re-activate the channel when more packets are expected */\r\n        __IO uint32_t pp_ctl = pudev->regs.pr[pp_num]->HCHCTL;\r\n\r\n        pp_ctl |= HCHCTL_CEN;\r\n        pp_ctl &= ~HCHCTL_CDIS;\r\n\r\n        pudev->regs.pr[pp_num]->HCHCTL = pp_ctl;\r\n      }\r\n    }\r\n    break;\r\n\r\n  case GRXSTS_PKTSTS_IN_XFER_COMP:\r\n    break;\r\n\r\n  case GRXSTS_PKTSTS_DATA_TOGGLE_ERR:\r\n    count = (rx_stat & GRSTATRP_BCOUNT) >> 4U;\r\n\r\n    while (count > 0U) {\r\n      rx_stat = pudev->regs.gr->GRSTATP;\r\n      count--;\r\n    }\r\n    break;\r\n\r\n  case GRXSTS_PKTSTS_CH_HALTED:\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* enable the rx status queue level interrupt */\r\n  pudev->regs.gr->GINTEN |= GINTEN_RXFNEIE;\r\n\r\n  return 1;\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/Usb/gd32vf103_usb_hw.c",
    "content": "/*!\r\n    \\file  gd32vf103_usb_hw.c\r\n    \\brief this file implements the board support package for the USB host library\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n#include \"drv_usb_hw.h\"\r\n#include \"gd32vf103_libopt.h\"\r\n#include <stdio.h>\r\n#include <stdlib.h>\r\n#include <string.h>\r\n\r\n#define TIM_MSEC_DELAY 0x01\r\n#define TIM_USEC_DELAY 0x02\r\n\r\n#define HOST_POWERSW_PORT_RCC RCU_GPIOD\r\n#define HOST_POWERSW_PORT     GPIOD\r\n#define HOST_POWERSW_VBUS     GPIO_PIN_13\r\n\r\n__IO uint32_t delay_time      = 0;\r\n__IO uint32_t usbfs_prescaler = 0;\r\n__IO uint32_t timer_prescaler = 5;\r\n\r\nstatic void hwp_time_set(uint8_t unit);\r\nstatic void hwp_delay(uint32_t ntime, uint8_t unit);\r\n\r\n/*!\r\n    \\brief      configure USB clock\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_rcu_config(void) {\r\n  uint32_t system_clock = rcu_clock_freq_get(CK_SYS);\r\n\r\n  if (system_clock == 48000000) {\r\n    usbfs_prescaler = RCU_CKUSB_CKPLL_DIV1;\r\n    timer_prescaler = 3;\r\n  } else if (system_clock == 72000000) {\r\n    usbfs_prescaler = RCU_CKUSB_CKPLL_DIV1_5;\r\n    timer_prescaler = 5;\r\n  } else if (system_clock == 96000000) {\r\n    usbfs_prescaler = RCU_CKUSB_CKPLL_DIV2;\r\n    timer_prescaler = 7;\r\n  } else {\r\n    /*  reserved  */\r\n  }\r\n\r\n  rcu_usb_clock_config(usbfs_prescaler);\r\n  rcu_periph_clock_enable(RCU_USBFS);\r\n}\r\n\r\n/*!\r\n    \\brief      configure USB global interrupt\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_intr_config(void) {\r\n  ECLIC_SetLevelIRQ(USBFS_IRQn, 1);\r\n  ECLIC_SetPriorityIRQ(USBFS_IRQn, 0);\r\n  ECLIC_EnableIRQ(USBFS_IRQn);\r\n#ifdef USB_OTG_FS_LOW_PWR_MGMT_SUPPORT\r\n\r\n  /* enable the power module clock */\r\n  rcu_periph_clock_enable(RCU_PMU);\r\n\r\n  /* USB wakeup EXTI line configuration */\r\n  exti_interrupt_flag_clear(EXTI_18);\r\n  exti_init(EXTI_18, EXTI_INTERRUPT, EXTI_TRIG_RISING);\r\n  exti_interrupt_enable(EXTI_18);\r\n\r\n  ECLIC_SetLevelIRQ(USBFS_WKUP_IRQn, 3);\r\n  ECLIC_SetPriorityIRQ(USBFS_WKUP_IRQn, 0);\r\n  ECLIC_EnableIRQ(USBFS_WKUP_IRQn);\r\n\r\n#endif /* USBHS_LOW_PWR_MGMT_SUPPORT */\r\n}\r\n\r\n/*!\r\n    \\brief      drives the VBUS signal through gpio\r\n    \\param[in]  state: VBUS states\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_vbus_drive(uint8_t state) {\r\n  if (0 == state) {\r\n    /* DISABLE is needed on output of the Power Switch */\r\n    gpio_bit_reset(HOST_POWERSW_PORT, HOST_POWERSW_VBUS);\r\n  } else {\r\n    /*ENABLE the Power Switch by driving the Enable LOW */\r\n    gpio_bit_set(HOST_POWERSW_PORT, HOST_POWERSW_VBUS);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configures the GPIO for the VBUS\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_vbus_config(void) {\r\n  rcu_periph_clock_enable(HOST_POWERSW_PORT_RCC);\r\n\r\n  gpio_init(HOST_POWERSW_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, HOST_POWERSW_VBUS);\r\n\r\n  /* by default, disable is needed on output of the power switch */\r\n  gpio_bit_set(HOST_POWERSW_PORT, HOST_POWERSW_VBUS);\r\n\r\n  /* Delay is need for stabilising the Vbus Low in Reset Condition,\r\n   * when Vbus=1 and Reset-button is pressed by user\r\n   */\r\n  // usb_mdelay (1);\r\n  usb_mdelay(2);\r\n}\r\n\r\n/*!\r\n    \\brief      initializes delay unit using Timer2\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_timer_init(void) {\r\n  rcu_periph_clock_enable(RCU_TIMER2);\r\n\r\n  // eclic_irq_enable(TIMER2_IRQn, 2, 0);\r\n  /*ECLIC_Register_IRQn(TIMER2_IRQn, ECLIC_VECTOR_INTERRUPT,\r\n                                  ECLIC_LEVEL_TRIGGER, 2, 0,\r\n                                  TIMER2_IRQHandler);*/\r\n}\r\n\r\n/*!\r\n    \\brief      delay in micro seconds\r\n    \\param[in]  usec: value of delay required in micro seconds\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_udelay(const uint32_t usec) { hwp_delay(usec, TIM_USEC_DELAY); }\r\n\r\n/*!\r\n    \\brief      delay in milli seconds\r\n    \\param[in]  msec: value of delay required in milli seconds\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_mdelay(const uint32_t msec) { hwp_delay(msec, TIM_MSEC_DELAY); }\r\n\r\n/*!\r\n    \\brief      timer base IRQ\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usb_timer_irq(void) {\r\n  if (timer_interrupt_flag_get(TIMER2, TIMER_INT_UP) != RESET) {\r\n    timer_interrupt_flag_clear(TIMER2, TIMER_INT_UP);\r\n\r\n    if (delay_time > 0x00U) {\r\n      delay_time--;\r\n    } else {\r\n      timer_disable(TIMER2);\r\n    }\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      delay routine based on TIM2\r\n    \\param[in]  ntime: delay Time\r\n    \\param[in]  unit: delay Time unit = mili sec / micro sec\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nstatic void hwp_delay(uint32_t ntime, uint8_t unit) {\r\n  delay_time = ntime;\r\n  hwp_time_set(unit);\r\n\r\n  while (delay_time != 0)\r\n    ;\r\n\r\n  timer_disable(TIMER2);\r\n}\r\n\r\n/*!\r\n    \\brief      configures TIM2 for delay routine based on TIM2\r\n    \\param[in]  unit: msec /usec\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nstatic void hwp_time_set(uint8_t unit) {\r\n  timer_parameter_struct timer_basestructure;\r\n\r\n  timer_disable(TIMER2);\r\n  timer_interrupt_disable(TIMER2, TIMER_INT_UP);\r\n\r\n  if (unit == TIM_USEC_DELAY) {\r\n    timer_basestructure.period = 11;\r\n  } else if (unit == TIM_MSEC_DELAY) {\r\n    timer_basestructure.period = 11999;\r\n  } else {\r\n    /* no operation */\r\n  }\r\n\r\n  timer_basestructure.prescaler         = timer_prescaler;\r\n  timer_basestructure.alignedmode       = TIMER_COUNTER_EDGE;\r\n  timer_basestructure.counterdirection  = TIMER_COUNTER_UP;\r\n  timer_basestructure.clockdivision     = TIMER_CKDIV_DIV1;\r\n  timer_basestructure.repetitioncounter = 0;\r\n\r\n  timer_init(TIMER2, &timer_basestructure);\r\n\r\n  timer_interrupt_flag_clear(TIMER2, TIMER_INT_UP);\r\n\r\n  timer_auto_reload_shadow_enable(TIMER2);\r\n\r\n  /* timer2 interrupt enable */\r\n  timer_interrupt_enable(TIMER2, TIMER_INT_UP);\r\n\r\n  /* timer2 enable counter */\r\n  timer_enable(TIMER2);\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/Usb/usbd_core.c",
    "content": "/*!\r\n    \\file  usbd_core.c\r\n    \\brief USB device mode core functions\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"usbd_core.h\"\r\n#include \"drv_usb_hw.h\"\r\n\r\n/* endpoint type */\r\nconst uint32_t ep_type[] = {[USB_EP_ATTR_CTL] = USB_EPTYPE_CTRL, [USB_EP_ATTR_BULK] = USB_EPTYPE_BULK, [USB_EP_ATTR_INT] = USB_EPTYPE_INTR, [USB_EP_ATTR_ISO] = USB_EPTYPE_ISOC};\r\n\r\n/*!\r\n    \\brief      initailizes the USB device-mode stack and load the class driver\r\n    \\param[in]  udev: pointer to USB core instance\r\n    \\param[in]  core: usb core type\r\n    \\param[in]  class_core: class driver\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usbd_init(usb_core_driver *udev, usb_core_enum core, usb_class_core *class_core) {\r\n  /* device descriptor, class and user callbacks */\r\n  udev->dev.class_core = class_core;\r\n\r\n  /* configure USB capabilites */\r\n  usb_basic_init(&udev->bp, &udev->regs, core);\r\n\r\n  /* initailizes the USB core*/\r\n  usb_core_init(udev->bp, &udev->regs);\r\n\r\n  /* set device disconnect */\r\n  usbd_disconnect(udev);\r\n\r\n  /* initailizes device mode */\r\n  usb_devcore_init(udev);\r\n\r\n  /* set device connect */\r\n  usbd_connect(udev);\r\n\r\n  udev->dev.cur_status = USBD_DEFAULT;\r\n}\r\n\r\n/*!\r\n    \\brief      endpoint initialization\r\n    \\param[in]  udev: pointer to USB core instance\r\n    \\param[in]  ep_desc: pointer to endpoint descriptor\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nuint32_t usbd_ep_setup(usb_core_driver *udev, const usb_desc_ep *ep_desc) {\r\n  usb_transc *transc;\r\n\r\n  uint8_t ep_addr = ep_desc->bEndpointAddress;\r\n  uint8_t max_len = ep_desc->wMaxPacketSize;\r\n\r\n  /* set endpoint direction */\r\n  if (EP_DIR(ep_addr)) {\r\n    transc = &udev->dev.transc_in[EP_ID(ep_addr)];\r\n\r\n    transc->ep_addr.dir = 1U;\r\n  } else {\r\n    transc = &udev->dev.transc_out[ep_addr];\r\n\r\n    transc->ep_addr.dir = 0U;\r\n  }\r\n\r\n  transc->ep_addr.num = EP_ID(ep_addr);\r\n  transc->max_len     = max_len;\r\n  transc->ep_type     = ep_type[ep_desc->bmAttributes & USB_EPTYPE_MASK];\r\n\r\n  /* active USB endpoint function */\r\n  usb_transc_active(udev, transc);\r\n\r\n  return 0;\r\n}\r\n\r\n/*!\r\n    \\brief      configure the endpoint when it is disabled\r\n    \\param[in]  udev: pointer to USB core instance\r\n    \\param[in]  ep_addr: endpoint address\r\n                  in this parameter:\r\n                    bit0..bit6: endpoint number (0..7)\r\n                    bit7: endpoint direction which can be IN(1) or OUT(0)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nuint32_t usbd_ep_clear(usb_core_driver *udev, uint8_t ep_addr) {\r\n  usb_transc *transc;\r\n\r\n  if (EP_DIR(ep_addr)) {\r\n    transc = &udev->dev.transc_in[EP_ID(ep_addr)];\r\n  } else {\r\n    transc = &udev->dev.transc_out[ep_addr];\r\n  }\r\n\r\n  /* deactive USB endpoint function */\r\n  usb_transc_deactivate(udev, transc);\r\n\r\n  return 0;\r\n}\r\n\r\n/*!\r\n    \\brief      endpoint prepare to receive data\r\n    \\param[in]  udev: pointer to usb core instance\r\n    \\param[in]  ep_addr: endpoint address\r\n                  in this parameter:\r\n                    bit0..bit6: endpoint number (0..7)\r\n                    bit7: endpoint direction which can be IN(1) or OUT(0)\r\n    \\param[in]  pbuf: user buffer address pointer\r\n    \\param[in]  len: buffer length\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nuint32_t usbd_ep_recev(usb_core_driver *udev, uint8_t ep_addr, uint8_t *pbuf, uint16_t len) {\r\n  usb_transc *transc = &udev->dev.transc_out[EP_ID(ep_addr)];\r\n\r\n  /* setup the transfer */\r\n  transc->xfer_buf   = pbuf;\r\n  transc->xfer_len   = len;\r\n  transc->xfer_count = 0;\r\n\r\n  if (USB_USE_DMA == udev->bp.transfer_mode) {\r\n    transc->dma_addr = (uint32_t)pbuf;\r\n  }\r\n\r\n  /* start the transfer */\r\n  usb_transc_outxfer(udev, transc);\r\n\r\n  return 0;\r\n}\r\n\r\n/*!\r\n    \\brief      endpoint prepare to transmit data\r\n    \\param[in]  udev: pointer to USB core instance\r\n    \\param[in]  ep_addr: endpoint address\r\n                  in this parameter:\r\n                    bit0..bit6: endpoint number (0..7)\r\n                    bit7: endpoint direction which can be IN(1) or OUT(0)\r\n    \\param[in]  pbuf: transmit buffer address pointer\r\n    \\param[in]  len: buffer length\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nuint32_t usbd_ep_send(usb_core_driver *udev, uint8_t ep_addr, uint8_t *pbuf, uint16_t len) {\r\n  usb_transc *transc = &udev->dev.transc_in[EP_ID(ep_addr)];\r\n\r\n  /* setup the transfer */\r\n  transc->xfer_buf   = pbuf;\r\n  transc->xfer_len   = len;\r\n  transc->xfer_count = 0;\r\n\r\n  if (USB_USE_DMA == udev->bp.transfer_mode) {\r\n    transc->dma_addr = (uint32_t)pbuf;\r\n  }\r\n\r\n  /* start the transfer */\r\n  usb_transc_inxfer(udev, transc);\r\n\r\n  return 0;\r\n}\r\n\r\n/*!\r\n    \\brief      set an endpoint to STALL status\r\n    \\param[in]  udev: pointer to USB core instance\r\n    \\param[in]  ep_addr: endpoint address\r\n                  in this parameter:\r\n                    bit0..bit6: endpoint number (0..7)\r\n                    bit7: endpoint direction which can be IN(1) or OUT(0)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nuint32_t usbd_ep_stall(usb_core_driver *udev, uint8_t ep_addr) {\r\n  usb_transc *transc = NULL;\r\n\r\n  if (EP_DIR(ep_addr)) {\r\n    transc = &udev->dev.transc_in[EP_ID(ep_addr)];\r\n  } else {\r\n    transc = &udev->dev.transc_out[ep_addr];\r\n  }\r\n\r\n  transc->ep_stall = 1;\r\n\r\n  usb_transc_stall(udev, transc);\r\n\r\n  return (0);\r\n}\r\n\r\n/*!\r\n    \\brief      clear endpoint STALLed status\r\n    \\param[in]  udev: pointer to usb core instance\r\n    \\param[in]  ep_addr: endpoint address\r\n                  in this parameter:\r\n                    bit0..bit6: endpoint number (0..7)\r\n                    bit7: endpoint direction which can be IN(1) or OUT(0)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nuint32_t usbd_ep_stall_clear(usb_core_driver *udev, uint8_t ep_addr) {\r\n  usb_transc *transc = NULL;\r\n\r\n  if (EP_DIR(ep_addr)) {\r\n    transc = &udev->dev.transc_in[EP_ID(ep_addr)];\r\n  } else {\r\n    transc = &udev->dev.transc_out[ep_addr];\r\n  }\r\n\r\n  transc->ep_stall = 0;\r\n\r\n  usb_transc_clrstall(udev, transc);\r\n\r\n  return (0);\r\n}\r\n\r\n/*!\r\n    \\brief      flush the endpoint FIFOs\r\n    \\param[in]  udev: pointer to usb core instance\r\n    \\param[in]  ep_addr: endpoint address\r\n                  in this parameter:\r\n                    bit0..bit6: endpoint number (0..7)\r\n                    bit7: endpoint direction which can be IN(1) or OUT(0)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nuint32_t usbd_fifo_flush(usb_core_driver *udev, uint8_t ep_addr) {\r\n  if (EP_DIR(ep_addr)) {\r\n    usb_txfifo_flush(&udev->regs, EP_ID(ep_addr));\r\n  } else {\r\n    usb_rxfifo_flush(&udev->regs);\r\n  }\r\n\r\n  return (0);\r\n}\r\n\r\n/*!\r\n    \\brief      set USB device address\r\n    \\param[in]  udev: pointer to USB core instance\r\n    \\param[in]  addr: device address to set\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usbd_addr_set(usb_core_driver *udev, uint8_t addr) { usb_devaddr_set(udev, addr); }\r\n\r\n/*!\r\n    \\brief      get the received data length\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  ep_num: endpoint number\r\n    \\param[out] none\r\n    \\retval     USB device operation cur_status\r\n*/\r\nuint16_t usbd_rxcount_get(usb_core_driver *udev, uint8_t ep_num) { return udev->dev.transc_out[ep_num].xfer_count; }\r\n\r\n/*!\r\n    \\brief      device connect\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usbd_connect(usb_core_driver *udev) {\r\n#ifndef USE_OTG_MODE\r\n  /* connect device */\r\n  usb_dev_connect(udev);\r\n  usb_mdelay(3);\r\n\r\n#endif /* USE_OTG_MODE */\r\n}\r\n\r\n/*!\r\n    \\brief      device disconnect\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usbd_disconnect(usb_core_driver *udev) {\r\n#ifndef USE_OTG_MODE\r\n  /* disconnect device for 3ms */\r\n  usb_dev_disconnect(udev);\r\n  usb_mdelay(3);\r\n#endif /* USE_OTG_MODE */\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/Usb/usbd_enum.c",
    "content": "/*!\r\n    \\file  usbd_enum.c\r\n    \\brief USB enumeration function\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"usbd_enum.h\"\r\n#include \"usb_ch9_std.h\"\r\n\r\nstatic usb_reqsta _usb_std_getstatus(usb_core_driver *udev, usb_req *req);\r\nstatic usb_reqsta _usb_std_setaddress(usb_core_driver *udev, usb_req *req);\r\nstatic usb_reqsta _usb_std_setconfiguration(usb_core_driver *udev, usb_req *req);\r\nstatic usb_reqsta _usb_std_getconfiguration(usb_core_driver *udev, usb_req *req);\r\nstatic usb_reqsta _usb_std_getdescriptor(usb_core_driver *udev, usb_req *req);\r\nstatic usb_reqsta _usb_std_setfeature(usb_core_driver *udev, usb_req *req);\r\nstatic usb_reqsta _usb_std_clearfeature(usb_core_driver *udev, usb_req *req);\r\nstatic usb_reqsta _usb_std_reserved(usb_core_driver *udev, usb_req *req);\r\nstatic usb_reqsta _usb_std_setdescriptor(usb_core_driver *udev, usb_req *req);\r\nstatic usb_reqsta _usb_std_getinterface(usb_core_driver *udev, usb_req *req);\r\nstatic usb_reqsta _usb_std_setinterface(usb_core_driver *udev, usb_req *req);\r\nstatic usb_reqsta _usb_std_synchframe(usb_core_driver *udev, usb_req *req);\r\n\r\nstatic uint8_t *_usb_dev_desc_get(usb_core_driver *udev, uint8_t index, uint16_t *len);\r\nstatic uint8_t *_usb_config_desc_get(usb_core_driver *udev, uint8_t index, uint16_t *len);\r\nstatic uint8_t *_usb_str_desc_get(usb_core_driver *udev, uint8_t index, uint16_t *len);\r\nstatic uint8_t *_usb_bos_desc_get(usb_core_driver *udev, uint8_t index, uint16_t *len);\r\n\r\nstatic usb_reqsta (*_std_dev_req[])(usb_core_driver *udev, usb_req *req) = {\r\n    [USB_GET_STATUS]        = _usb_std_getstatus,\r\n    [USB_CLEAR_FEATURE]     = _usb_std_clearfeature,\r\n    [USB_RESERVED2]         = _usb_std_reserved,\r\n    [USB_SET_FEATURE]       = _usb_std_setfeature,\r\n    [USB_RESERVED4]         = _usb_std_reserved,\r\n    [USB_SET_ADDRESS]       = _usb_std_setaddress,\r\n    [USB_GET_DESCRIPTOR]    = _usb_std_getdescriptor,\r\n    [USB_SET_DESCRIPTOR]    = _usb_std_setdescriptor,\r\n    [USB_GET_CONFIGURATION] = _usb_std_getconfiguration,\r\n    [USB_SET_CONFIGURATION] = _usb_std_setconfiguration,\r\n    [USB_GET_INTERFACE]     = _usb_std_getinterface,\r\n    [USB_SET_INTERFACE]     = _usb_std_setinterface,\r\n    [USB_SYNCH_FRAME]       = _usb_std_synchframe,\r\n};\r\n\r\n/* get standard descriptor handler */\r\nstatic uint8_t *(*std_desc_get[])(usb_core_driver *udev, uint8_t index,\r\n                                  uint16_t *len) = {[USB_DESCTYPE_DEV - 1] = _usb_dev_desc_get, [USB_DESCTYPE_CONFIG - 1] = _usb_config_desc_get, [USB_DESCTYPE_STR - 1] = _usb_str_desc_get};\r\n\r\n/*!\r\n    \\brief      handle USB standard device request\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  req: pointer to USB device request\r\n    \\param[out] none\r\n    \\retval     USB device request status\r\n*/\r\nusb_reqsta usbd_standard_request(usb_core_driver *udev, usb_req *req) { return (*_std_dev_req[req->bRequest])(udev, req); }\r\n\r\n/*!\r\n    \\brief      handle USB device class request\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  req: pointer to USB device class request\r\n    \\param[out] none\r\n    \\retval     USB device request status\r\n*/\r\nusb_reqsta usbd_class_request(usb_core_driver *udev, usb_req *req) {\r\n  if (USBD_CONFIGURED == udev->dev.cur_status) {\r\n    if (BYTE_LOW(req->wIndex) <= USBD_ITF_MAX_NUM) {\r\n      /* call device class handle function */\r\n      uint8_t res = udev->dev.class_core->req_proc(udev, req);\r\n      return (usb_reqsta)res;\r\n    }\r\n  }\r\n\r\n  return REQ_NOTSUPP;\r\n}\r\n\r\n/*!\r\n    \\brief      handle USB vendor request\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  req: pointer to USB vendor request\r\n    \\param[out] none\r\n    \\retval     USB device request status\r\n*/\r\nusb_reqsta usbd_vendor_request(usb_core_driver *udev, usb_req *req) {\r\n  /* added by user... */\r\n\r\n  return REQ_SUPP;\r\n}\r\n\r\n/*!\r\n    \\brief      no operation, just for reserved\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  req: pointer to USB vendor request\r\n    \\param[out] none\r\n    \\retval     USB device request status\r\n*/\r\nstatic usb_reqsta _usb_std_reserved(usb_core_driver *udev, usb_req *req) {\r\n  /* no operation... */\r\n\r\n  return REQ_NOTSUPP;\r\n}\r\n\r\n/*!\r\n    \\brief      get the device descriptor\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  index: no use\r\n    \\param[out] len: data length pointer\r\n    \\retval     descriptor buffer pointer\r\n*/\r\nstatic uint8_t *_usb_dev_desc_get(usb_core_driver *udev, uint8_t index, uint16_t *len) {\r\n  *len = udev->dev.desc.dev_desc[0];\r\n\r\n  return udev->dev.desc.dev_desc;\r\n}\r\n\r\n/*!\r\n    \\brief      get the configuration descriptor\r\n    \\brief[in]  udev: pointer to USB device instance\r\n    \\brief[in]  index: no use\r\n    \\param[out] len: data length pointer\r\n    \\retval     descriptor buffer pointer\r\n*/\r\nstatic uint8_t *_usb_config_desc_get(usb_core_driver *udev, uint8_t index, uint16_t *len) {\r\n  *len = udev->dev.desc.config_desc[2];\r\n\r\n  return udev->dev.desc.config_desc;\r\n}\r\n\r\n/*!\r\n    \\brief      get the BOS descriptor\r\n    \\brief[in]  udev: pointer to USB device instance\r\n    \\brief[in]  index: no use\r\n    \\param[out] len: data length pointer\r\n    \\retval     descriptor buffer pointer\r\n*/\r\nstatic uint8_t *_usb_bos_desc_get(usb_core_driver *udev, uint8_t index, uint16_t *len) {\r\n  *len = udev->dev.desc.bos_desc[2];\r\n\r\n  return udev->dev.desc.bos_desc;\r\n}\r\n\r\n/*!\r\n    \\brief      get string descriptor\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  index: string descriptor index\r\n    \\param[out] len: pointer to string length\r\n    \\retval     descriptor buffer pointer\r\n*/\r\nstatic uint8_t *_usb_str_desc_get(usb_core_driver *udev, uint8_t index, uint16_t *len) {\r\n  uint8_t *desc = udev->dev.desc.strings[index];\r\n\r\n  *len = desc[0];\r\n\r\n  return desc;\r\n}\r\n\r\n/*!\r\n    \\brief      handle Get_Status request\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  req: pointer to USB device request\r\n    \\param[out] none\r\n    \\retval     USB device request status\r\n*/\r\nstatic usb_reqsta _usb_std_getstatus(usb_core_driver *udev, usb_req *req) {\r\n  uint8_t recp = BYTE_LOW(req->wIndex);\r\n\r\n  usb_transc *transc = &udev->dev.transc_in[0];\r\n\r\n  static uint8_t status[2] = {0};\r\n\r\n  switch (req->bmRequestType & USB_RECPTYPE_MASK) {\r\n  case USB_RECPTYPE_DEV:\r\n    if ((USBD_ADDRESSED == udev->dev.cur_status) || (USBD_CONFIGURED == udev->dev.cur_status)) {\r\n\r\n      if (udev->dev.pm.power_mode) {\r\n        status[0] = USB_STATUS_SELF_POWERED;\r\n      } else {\r\n        status[0] = 0U;\r\n      }\r\n\r\n      if (udev->dev.pm.dev_remote_wakeup) {\r\n        status[0] |= USB_STATUS_REMOTE_WAKEUP;\r\n      } else {\r\n        status[0] = 0U;\r\n      }\r\n\r\n      transc->xfer_buf   = status;\r\n      transc->remain_len = 2U;\r\n\r\n      return REQ_SUPP;\r\n    }\r\n    break;\r\n\r\n  case USB_RECPTYPE_ITF:\r\n    if ((USBD_CONFIGURED == udev->dev.cur_status) && (recp <= USBD_ITF_MAX_NUM)) {\r\n      transc->xfer_buf   = status;\r\n      transc->remain_len = 2U;\r\n\r\n      return REQ_SUPP;\r\n    }\r\n    break;\r\n\r\n  case USB_RECPTYPE_EP:\r\n    if (USBD_CONFIGURED == udev->dev.cur_status) {\r\n      if (0x80U == (recp & 0x80U)) {\r\n        status[0] = udev->dev.transc_in[EP_ID(recp)].ep_stall;\r\n      } else {\r\n        status[0] = udev->dev.transc_out[recp].ep_stall;\r\n      }\r\n\r\n      transc->xfer_buf   = status;\r\n      transc->remain_len = 2U;\r\n\r\n      return REQ_SUPP;\r\n    }\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return REQ_NOTSUPP;\r\n}\r\n\r\n/*!\r\n    \\brief      handle USB Clear_Feature request\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  req: USB device request\r\n    \\param[out] none\r\n    \\retval     USB device request status\r\n*/\r\nstatic usb_reqsta _usb_std_clearfeature(usb_core_driver *udev, usb_req *req) {\r\n  uint8_t ep = 0;\r\n\r\n  switch (req->bmRequestType & USB_RECPTYPE_MASK) {\r\n  case USB_RECPTYPE_DEV:\r\n    if ((USBD_ADDRESSED == udev->dev.cur_status) || (USBD_CONFIGURED == udev->dev.cur_status)) {\r\n\r\n      /* clear device remote wakeup feature */\r\n      if (USB_FEATURE_REMOTE_WAKEUP == req->wValue) {\r\n        udev->dev.pm.dev_remote_wakeup = 0U;\r\n\r\n        return REQ_SUPP;\r\n      }\r\n    }\r\n    break;\r\n\r\n  case USB_RECPTYPE_ITF:\r\n    break;\r\n\r\n  case USB_RECPTYPE_EP:\r\n    /* get endpoint address */\r\n    ep = BYTE_LOW(req->wIndex);\r\n\r\n    if (USBD_CONFIGURED == udev->dev.cur_status) {\r\n      /* clear endpoint halt feature */\r\n      if ((USB_FEATURE_EP_HALT == req->wValue) && (!CTL_EP(ep))) {\r\n        usbd_ep_stall_clear(udev, ep);\r\n\r\n        udev->dev.class_core->req_proc(udev, req);\r\n      }\r\n\r\n      return REQ_SUPP;\r\n    }\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return REQ_NOTSUPP;\r\n}\r\n\r\n/*!\r\n    \\brief      handle USB Set_Feature request\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  req: pointer to USB device request\r\n    \\param[out] none\r\n    \\retval     USB device request status\r\n*/\r\nstatic usb_reqsta _usb_std_setfeature(usb_core_driver *udev, usb_req *req) {\r\n  uint8_t ep = 0;\r\n\r\n  switch (req->bmRequestType & USB_RECPTYPE_MASK) {\r\n  case USB_RECPTYPE_DEV:\r\n    if ((USBD_ADDRESSED == udev->dev.cur_status) || (USBD_CONFIGURED == udev->dev.cur_status)) {\r\n      /* set device remote wakeup feature */\r\n      if (USB_FEATURE_REMOTE_WAKEUP == req->wValue) {\r\n        udev->dev.pm.dev_remote_wakeup = 1U;\r\n      }\r\n\r\n      return REQ_SUPP;\r\n    }\r\n    break;\r\n\r\n  case USB_RECPTYPE_ITF:\r\n    break;\r\n\r\n  case USB_RECPTYPE_EP:\r\n    /* get endpoint address */\r\n    ep = BYTE_LOW(req->wIndex);\r\n\r\n    if (USBD_CONFIGURED == udev->dev.cur_status) {\r\n      /* set endpoint halt feature */\r\n      if ((USB_FEATURE_EP_HALT == req->wValue) && (!CTL_EP(ep))) {\r\n        usbd_ep_stall(udev, ep);\r\n      }\r\n\r\n      return REQ_SUPP;\r\n    }\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return REQ_NOTSUPP;\r\n}\r\n\r\n/*!\r\n    \\brief      handle USB Set_Address request\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  req: pointer to USB device request\r\n    \\param[out] none\r\n    \\retval     USB device request status\r\n*/\r\nstatic usb_reqsta _usb_std_setaddress(usb_core_driver *udev, usb_req *req) {\r\n  if ((0U == req->wIndex) && (0U == req->wLength)) {\r\n    udev->dev.dev_addr = (uint8_t)(req->wValue) & 0x7FU;\r\n\r\n    if (udev->dev.cur_status != USBD_CONFIGURED) {\r\n      usbd_addr_set(udev, udev->dev.dev_addr);\r\n\r\n      if (udev->dev.dev_addr) {\r\n        udev->dev.cur_status = USBD_ADDRESSED;\r\n      } else {\r\n        udev->dev.cur_status = USBD_DEFAULT;\r\n      }\r\n\r\n      return REQ_SUPP;\r\n    }\r\n  }\r\n\r\n  return REQ_NOTSUPP;\r\n}\r\n\r\n/*!\r\n    \\brief      handle USB Get_Descriptor request\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  req: pointer to USB device request\r\n    \\param[out] none\r\n    \\retval     USB device request status\r\n*/\r\nstatic usb_reqsta _usb_std_getdescriptor(usb_core_driver *udev, usb_req *req) {\r\n  uint8_t desc_type  = 0;\r\n  uint8_t desc_index = 0;\r\n\r\n  usb_transc *transc = &udev->dev.transc_in[0];\r\n\r\n  /* get device standard descriptor */\r\n  switch (req->bmRequestType & USB_RECPTYPE_MASK) {\r\n  case USB_RECPTYPE_DEV:\r\n    desc_type  = BYTE_HIGH(req->wValue);\r\n    desc_index = BYTE_LOW(req->wValue);\r\n\r\n    switch (desc_type) {\r\n    case USB_DESCTYPE_DEV:\r\n      transc->xfer_buf = std_desc_get[desc_type - 1U](udev, desc_index, (uint16_t *)&(transc->remain_len));\r\n\r\n      if (64U == req->wLength) {\r\n        transc->remain_len = 8U;\r\n      }\r\n      break;\r\n\r\n    case USB_DESCTYPE_CONFIG:\r\n      transc->xfer_buf = std_desc_get[desc_type - 1U](udev, desc_index, (uint16_t *)&(transc->remain_len));\r\n      break;\r\n\r\n    case USB_DESCTYPE_STR:\r\n      if (desc_index < STR_IDX_MAX) {\r\n        transc->xfer_buf = std_desc_get[desc_type - 1U](udev, desc_index, (uint16_t *)&(transc->remain_len));\r\n      }\r\n      break;\r\n\r\n    case USB_DESCTYPE_ITF:\r\n    case USB_DESCTYPE_EP:\r\n    case USB_DESCTYPE_DEV_QUALIFIER:\r\n    case USB_DESCTYPE_OTHER_SPD_CONFIG:\r\n    case USB_DESCTYPE_ITF_POWER:\r\n      break;\r\n\r\n    case USB_DESCTYPE_BOS:\r\n      transc->xfer_buf = _usb_bos_desc_get(udev, desc_index, (uint16_t *)&(transc->remain_len));\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n    break;\r\n\r\n  case USB_RECPTYPE_ITF:\r\n    /* get device class special descriptor */\r\n    {\r\n      uint8_t res = udev->dev.class_core->req_proc(udev, req);\r\n      return (usb_reqsta)res;\r\n    }\r\n\r\n  case USB_RECPTYPE_EP:\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  if ((0U != transc->remain_len) && (0U != req->wLength)) {\r\n    if (transc->remain_len < req->wLength) {\r\n      if ((transc->remain_len >= transc->max_len) && (0U == (transc->remain_len % transc->max_len))) {\r\n        udev->dev.control.ctl_zlp = 1;\r\n      }\r\n    } else {\r\n      transc->remain_len = req->wLength;\r\n    }\r\n\r\n    return REQ_SUPP;\r\n  }\r\n\r\n  return REQ_NOTSUPP;\r\n}\r\n\r\n/*!\r\n    \\brief      handle USB Set_Descriptor request\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  req: pointer to USB device request\r\n    \\param[out] none\r\n    \\retval     USB device request status\r\n*/\r\nstatic usb_reqsta _usb_std_setdescriptor(usb_core_driver *udev, usb_req *req) {\r\n  /* no handle... */\r\n  return REQ_SUPP;\r\n}\r\n\r\n/*!\r\n    \\brief      handle USB Get_Configuration request\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  req: pointer to USB device request\r\n    \\param[out] none\r\n    \\retval     USB device request status\r\n*/\r\nstatic usb_reqsta _usb_std_getconfiguration(usb_core_driver *udev, usb_req *req) {\r\n  usb_transc *transc = &udev->dev.transc_in[0];\r\n\r\n  switch (udev->dev.cur_status) {\r\n  case USBD_ADDRESSED:\r\n    if (USB_DEFAULT_CONFIG == udev->dev.config) {\r\n      transc->xfer_buf   = &(udev->dev.config);\r\n      transc->remain_len = 1U;\r\n\r\n      return REQ_SUPP;\r\n    }\r\n    break;\r\n\r\n  case USBD_CONFIGURED:\r\n    if (udev->dev.config != USB_DEFAULT_CONFIG) {\r\n      transc->xfer_buf   = &(udev->dev.config);\r\n      transc->remain_len = 1U;\r\n\r\n      return REQ_SUPP;\r\n    }\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return REQ_NOTSUPP;\r\n}\r\n\r\n/*!\r\n    \\brief      handle USB Set_Configuration request\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  req: pointer to USB device request\r\n    \\param[out] none\r\n    \\retval     USB device request status\r\n*/\r\nstatic usb_reqsta _usb_std_setconfiguration(usb_core_driver *udev, usb_req *req) {\r\n  static uint8_t config;\r\n\r\n  config = (uint8_t)(req->wValue);\r\n\r\n  if (config <= USBD_CFG_MAX_NUM) {\r\n    switch (udev->dev.cur_status) {\r\n    case USBD_ADDRESSED:\r\n      if (config) {\r\n        udev->dev.class_core->init(udev, config);\r\n\r\n        udev->dev.config     = config;\r\n        udev->dev.cur_status = USBD_CONFIGURED;\r\n      }\r\n\r\n      return REQ_SUPP;\r\n\r\n    case USBD_CONFIGURED:\r\n      if (USB_DEFAULT_CONFIG == config) {\r\n        udev->dev.class_core->deinit(udev, config);\r\n\r\n        udev->dev.config     = config;\r\n        udev->dev.cur_status = USBD_ADDRESSED;\r\n      } else if (config != udev->dev.config) {\r\n        /* clear old configuration */\r\n        udev->dev.class_core->deinit(udev, config);\r\n\r\n        /* set new configuration */\r\n        udev->dev.config = config;\r\n        udev->dev.class_core->init(udev, config);\r\n      }\r\n\r\n      return REQ_SUPP;\r\n\r\n    case USBD_DEFAULT:\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n\r\n  return REQ_NOTSUPP;\r\n}\r\n\r\n/*!\r\n    \\brief      handle USB Get_Interface request\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  req: pointer to USB device request\r\n    \\param[out] none\r\n    \\retval     USB device request status\r\n*/\r\nstatic usb_reqsta _usb_std_getinterface(usb_core_driver *udev, usb_req *req) {\r\n  switch (udev->dev.cur_status) {\r\n  case USBD_DEFAULT:\r\n    break;\r\n\r\n  case USBD_ADDRESSED:\r\n    break;\r\n\r\n  case USBD_CONFIGURED:\r\n    if (BYTE_LOW(req->wIndex) <= USBD_ITF_MAX_NUM) {\r\n      usb_transc *transc = &udev->dev.transc_in[0];\r\n\r\n      transc->xfer_buf   = &(udev->dev.class_core->alter_set);\r\n      transc->remain_len = 1U;\r\n\r\n      return REQ_SUPP;\r\n    }\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return REQ_NOTSUPP;\r\n}\r\n\r\n/*!\r\n    \\brief      handle USB Set_Interface request\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  req: pointer to USB device request\r\n    \\param[out] none\r\n    \\retval     USB device request status\r\n*/\r\nstatic usb_reqsta _usb_std_setinterface(usb_core_driver *udev, usb_req *req) {\r\n  switch (udev->dev.cur_status) {\r\n  case USBD_DEFAULT:\r\n    break;\r\n\r\n  case USBD_ADDRESSED:\r\n    break;\r\n\r\n  case USBD_CONFIGURED:\r\n    if (BYTE_LOW(req->wIndex) <= USBD_ITF_MAX_NUM) {\r\n      udev->dev.class_core->alter_set = req->wValue;\r\n\r\n      return REQ_SUPP;\r\n    }\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return REQ_NOTSUPP;\r\n}\r\n\r\n/*!\r\n    \\brief      handle USB SynchFrame request\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  req: pointer to USB device request\r\n    \\param[out] none\r\n    \\retval     USB device request status\r\n*/\r\nstatic usb_reqsta _usb_std_synchframe(usb_core_driver *udev, usb_req *req) {\r\n  /* no handle... */\r\n  return REQ_SUPP;\r\n}\r\n\r\n/*!\r\n    \\brief      handle USB enumeration error\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  req: pointer to USB device request\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usbd_enum_error(usb_core_driver *udev, usb_req *req) {\r\n  usbd_ep_stall(udev, 0x80);\r\n  usbd_ep_stall(udev, 0x00);\r\n\r\n  usb_ctlep_startout(udev);\r\n}\r\n\r\n/*!\r\n    \\brief      convert hex 32bits value into unicode char\r\n    \\param[in]  value: hex 32bits value\r\n    \\param[in]  pbuf: buffer pointer to store unicode char\r\n    \\param[in]  len: value length\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid int_to_unicode(uint32_t value, uint8_t *pbuf, uint8_t len) {\r\n  uint8_t index = 0;\r\n\r\n  for (index = 0; index < len; index++) {\r\n    if ((value >> 28) < 0x0A) {\r\n      pbuf[2 * index] = (value >> 28) + '0';\r\n    } else {\r\n      pbuf[2 * index] = (value >> 28) + 'A' - 10;\r\n    }\r\n\r\n    value = value << 4;\r\n\r\n    pbuf[2 * index + 1] = 0;\r\n  }\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/Usb/usbd_transc.c",
    "content": "/*!\r\n    \\file  usbd_transc.c\r\n    \\brief USB transaction core functions\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"usbd_transc.h\"\r\n#include \"usbd_enum.h\"\r\n\r\n/*!\r\n    \\brief      USB send data in the control transaction\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[out] none\r\n    \\retval     USB device operation cur_status\r\n*/\r\nusbd_status usbd_ctl_send(usb_core_driver *udev) {\r\n  usb_transc *transc = &udev->dev.transc_in[0];\r\n\r\n  usbd_ep_send(udev, 0U, transc->xfer_buf, transc->remain_len);\r\n\r\n  if (transc->remain_len > transc->max_len) {\r\n    udev->dev.control.ctl_state = USB_CTL_DATA_IN;\r\n  } else {\r\n    udev->dev.control.ctl_state = USB_CTL_LAST_DATA_IN;\r\n  }\r\n\r\n  return USBD_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      USB receive data in control transaction\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[out] none\r\n    \\retval     USB device operation cur_status\r\n*/\r\nusbd_status usbd_ctl_recev(usb_core_driver *udev) {\r\n  usb_transc *transc = &udev->dev.transc_out[0];\r\n\r\n  usbd_ep_recev(udev, 0U, transc->xfer_buf, transc->remain_len);\r\n\r\n  if (transc->remain_len > transc->max_len) {\r\n    udev->dev.control.ctl_state = USB_CTL_DATA_OUT;\r\n  } else {\r\n    udev->dev.control.ctl_state = USB_CTL_LAST_DATA_OUT;\r\n  }\r\n\r\n  return USBD_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      USB send control transaction status\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[out] none\r\n    \\retval     USB device operation cur_status\r\n*/\r\nusbd_status usbd_ctl_status_send(usb_core_driver *udev) {\r\n  udev->dev.control.ctl_state = USB_CTL_STATUS_IN;\r\n\r\n  usbd_ep_send(udev, 0U, NULL, 0U);\r\n\r\n  usb_ctlep_startout(udev);\r\n\r\n  return USBD_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      USB control receive status\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[out] none\r\n    \\retval     USB device operation cur_status\r\n*/\r\nusbd_status usbd_ctl_status_recev(usb_core_driver *udev) {\r\n  udev->dev.control.ctl_state = USB_CTL_STATUS_OUT;\r\n\r\n  usbd_ep_recev(udev, 0, NULL, 0);\r\n\r\n  usb_ctlep_startout(udev);\r\n\r\n  return USBD_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      USB setup stage processing\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[out] none\r\n    \\retval     USB device operation cur_status\r\n*/\r\nuint8_t usbd_setup_transc(usb_core_driver *udev) {\r\n  usb_reqsta reqstat = REQ_NOTSUPP;\r\n\r\n  usb_req req = udev->dev.control.req;\r\n\r\n  switch (req.bmRequestType & USB_REQTYPE_MASK) {\r\n  /* standard device request */\r\n  case USB_REQTYPE_STRD:\r\n    reqstat = usbd_standard_request(udev, &req);\r\n    break;\r\n\r\n  /* device class request */\r\n  case USB_REQTYPE_CLASS:\r\n    reqstat = usbd_class_request(udev, &req);\r\n    break;\r\n\r\n  /* vendor defined request */\r\n  case USB_REQTYPE_VENDOR:\r\n    reqstat = usbd_vendor_request(udev, &req);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  if (REQ_SUPP == reqstat) {\r\n    if (req.wLength == 0) {\r\n      usbd_ctl_status_send(udev);\r\n    } else {\r\n      if (req.bmRequestType & 0x80) {\r\n        usbd_ctl_send(udev);\r\n      } else {\r\n        usbd_ctl_recev(udev);\r\n      }\r\n    }\r\n  } else {\r\n    usbd_enum_error(udev, &req);\r\n  }\r\n\r\n  return USBD_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      data out stage processing\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  ep_num: endpoint identifier(0..7)\r\n    \\param[out] none\r\n    \\retval     USB device operation cur_status\r\n*/\r\nuint8_t usbd_out_transc(usb_core_driver *udev, uint8_t ep_num) {\r\n  if (ep_num == 0) {\r\n    usb_transc *transc = &udev->dev.transc_out[0];\r\n\r\n    switch (udev->dev.control.ctl_state) {\r\n    case USB_CTL_DATA_OUT:\r\n      /* update transfer length */\r\n      transc->remain_len -= transc->max_len;\r\n\r\n      usbd_ctl_recev(udev);\r\n      break;\r\n\r\n    case USB_CTL_LAST_DATA_OUT:\r\n      if (udev->dev.cur_status == USBD_CONFIGURED) {\r\n        if (udev->dev.class_core->data_out != NULL) {\r\n          udev->dev.class_core->data_out(udev, 0U);\r\n        }\r\n      }\r\n\r\n      transc->remain_len = 0U;\r\n\r\n      usbd_ctl_status_send(udev);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  } else if ((udev->dev.class_core->data_out != NULL) && (udev->dev.cur_status == USBD_CONFIGURED)) {\r\n    udev->dev.class_core->data_out(udev, ep_num);\r\n  }\r\n\r\n  return USBD_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      data in stage processing\r\n    \\param[in]  udev: pointer to USB device instance\r\n    \\param[in]  ep_num: endpoint identifier(0..7)\r\n    \\param[out] none\r\n    \\retval     USB device operation cur_status\r\n*/\r\nuint8_t usbd_in_transc(usb_core_driver *udev, uint8_t ep_num) {\r\n  if (0U == ep_num) {\r\n    usb_transc *transc = &udev->dev.transc_in[0];\r\n\r\n    switch (udev->dev.control.ctl_state) {\r\n    case USB_CTL_DATA_IN:\r\n      /* update transfer length */\r\n      transc->remain_len -= transc->max_len;\r\n\r\n      usbd_ctl_send(udev);\r\n      break;\r\n\r\n    case USB_CTL_LAST_DATA_IN:\r\n      /* last packet is MPS multiple, so send ZLP packet */\r\n      if (udev->dev.control.ctl_zlp) {\r\n        usbd_ep_send(udev, 0U, NULL, 0U);\r\n\r\n        udev->dev.control.ctl_zlp = 0U;\r\n      } else {\r\n        if (udev->dev.cur_status == USBD_CONFIGURED) {\r\n          if (udev->dev.class_core->data_in != NULL) {\r\n            udev->dev.class_core->data_in(udev, 0U);\r\n          }\r\n        }\r\n\r\n        transc->remain_len = 0U;\r\n\r\n        usbd_ctl_status_recev(udev);\r\n      }\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  } else {\r\n    if ((udev->dev.cur_status == USBD_CONFIGURED) && (udev->dev.class_core->data_in != NULL)) {\r\n      udev->dev.class_core->data_in(udev, ep_num);\r\n    }\r\n  }\r\n\r\n  return USBD_OK;\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/Usb/usbh_core.c",
    "content": "/*!\r\n    \\file  usbh_core.c\r\n    \\brief USB host core state machine driver\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"usbh_core.h\"\r\n#include \"drv_usb_hw.h\"\r\n#include \"drv_usbh_int.h\"\r\n#include \"usbh_enum.h\"\r\n#include \"usbh_pipe.h\"\r\n\r\nuint8_t usbh_sof(usb_core_driver *pudev);\r\n\r\nusbh_int_cb usbh_int_op = {usbh_sof};\r\n\r\nusbh_int_cb *usbh_int_fop = &usbh_int_op;\r\n\r\nstatic usbh_status usbh_enum_task(usb_core_driver *pudev, usbh_host *puhost);\r\n\r\n/*!\r\n    \\brief      USB SOF callback function from the interrupt\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nuint8_t usbh_sof(usb_core_driver *pudev) {\r\n  /* this callback could be used to implement a scheduler process */\r\n  return 0U;\r\n}\r\n\r\n/*!\r\n    \\brief      USB host stack initializations\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  core: USBFS core or USBHS core\r\n    \\param[in]  puhost: pointer to USB host\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nvoid usbh_init(usb_core_driver *pudev, usb_core_enum core, usbh_host *puhost) {\r\n  uint8_t i = 0U;\r\n\r\n  /* host de-initializations */\r\n  usbh_deinit(pudev, puhost);\r\n\r\n  pudev->host.connect_status = 0U;\r\n\r\n  for (i = 0U; i < USBFS_MAX_TX_FIFOS; i++) {\r\n    pudev->host.pipe[i].err_count   = 0U;\r\n    pudev->host.pipe[i].pp_status   = PIPE_IDLE;\r\n    pudev->host.backup_xfercount[i] = 0U;\r\n  }\r\n\r\n  pudev->host.pipe[0].ep.mps = 8U;\r\n\r\n  usb_basic_init(&pudev->bp, &pudev->regs, core);\r\n\r\n#ifndef DUAL_ROLE_MODE_ENABLED\r\n\r\n  usb_core_init(pudev->bp, &pudev->regs);\r\n\r\n  usb_host_init(pudev);\r\n\r\n#endif /* DUAL_ROLE_MODE_ENABLED */\r\n\r\n  /* upon init call usr call back */\r\n  puhost->usr_cb->dev_init();\r\n}\r\n\r\n/*!\r\n    \\brief      de-initialize USB host\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  puhost: pointer to USB host\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusbh_status usbh_deinit(usb_core_driver *pudev, usbh_host *puhost) {\r\n  /* software init */\r\n  puhost->cur_state    = HOST_DEFAULT;\r\n  puhost->backup_state = HOST_DEFAULT;\r\n  puhost->enum_state   = ENUM_DEFAULT;\r\n\r\n  puhost->control.ctl_state = CTL_IDLE;\r\n  puhost->control.max_len   = USB_FS_EP0_MAX_LEN;\r\n\r\n  puhost->dev_prop.addr  = USBH_DEV_ADDR_DEFAULT;\r\n  puhost->dev_prop.speed = PORT_SPEED_FULL;\r\n\r\n  usbh_pipe_free(pudev, puhost->control.pipe_in_num);\r\n  usbh_pipe_free(pudev, puhost->control.pipe_out_num);\r\n\r\n  return USBH_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      USB host core main state machine process\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  puhost: pointer to USB host\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usbh_core_task(usb_core_driver *pudev, usbh_host *puhost) {\r\n  volatile usbh_status status = USBH_FAIL;\r\n\r\n  /* check for host port events */\r\n  if (((0U == pudev->host.connect_status) || (0U == pudev->host.port_enabled)) && (HOST_DEFAULT != puhost->cur_state)) {\r\n    if (puhost->cur_state != HOST_DEV_DETACHED) {\r\n      puhost->cur_state = HOST_DEV_DETACHED;\r\n    }\r\n  }\r\n\r\n  switch (puhost->cur_state) {\r\n  case HOST_DEFAULT:\r\n    if (pudev->host.connect_status) {\r\n      puhost->cur_state = HOST_DETECT_DEV_SPEED;\r\n\r\n      usb_mdelay(100U);\r\n      // usb_mdelay (2U);\r\n      usb_port_reset(pudev);\r\n\r\n      puhost->usr_cb->dev_reset();\r\n    }\r\n    break;\r\n\r\n  case HOST_DETECT_DEV_SPEED:\r\n    if (pudev->host.port_enabled) {\r\n      puhost->cur_state      = HOST_DEV_ATTACHED;\r\n      puhost->dev_prop.speed = usb_curspeed_get(pudev);\r\n      puhost->usr_cb->dev_speed_detected(puhost->dev_prop.speed);\r\n\r\n      usb_mdelay(50U);\r\n    }\r\n    break;\r\n\r\n  case HOST_DEV_ATTACHED:\r\n    puhost->usr_cb->dev_attach();\r\n    puhost->control.pipe_out_num = usbh_pipe_allocate(pudev, 0x00U);\r\n    puhost->control.pipe_in_num  = usbh_pipe_allocate(pudev, 0x80U);\r\n\r\n    /* reset USB device */\r\n    usb_port_reset(pudev);\r\n\r\n    /* open IN control pipe */\r\n    usbh_pipe_create(pudev, &puhost->dev_prop, puhost->control.pipe_in_num, USB_EPTYPE_CTRL, puhost->control.max_len);\r\n\r\n    /* open OUT control pipe */\r\n    usbh_pipe_create(pudev, &puhost->dev_prop, puhost->control.pipe_out_num, USB_EPTYPE_CTRL, puhost->control.max_len);\r\n\r\n    puhost->cur_state = HOST_ENUM;\r\n    break;\r\n\r\n  case HOST_ENUM:\r\n\r\n    /* check for enumeration status */\r\n    if (USBH_OK == usbh_enum_task(pudev, puhost)) {\r\n      /* the function shall return USBH_OK when full enumeration is complete */\r\n\r\n      /* user callback for end of device basic enumeration */\r\n      puhost->usr_cb->dev_enumerated();\r\n      puhost->cur_state = HOST_USER_INPUT;\r\n    }\r\n    break;\r\n\r\n  case HOST_USER_INPUT:\r\n    /* the function should return user response true to move to class state */\r\n    if (USBH_USER_RESP_OK == puhost->usr_cb->dev_user_input()) {\r\n      if ((USBH_OK == puhost->class_cb->class_init(pudev, puhost))) {\r\n        puhost->cur_state = HOST_CLASS_ENUM;\r\n      }\r\n    }\r\n    break;\r\n\r\n  case HOST_CLASS_ENUM:\r\n    /* process class standard contol requests state machine */\r\n    status = puhost->class_cb->class_requests(pudev, puhost);\r\n\r\n    if (USBH_OK == status) {\r\n      puhost->cur_state = HOST_CLASS_HANDLER;\r\n    } else {\r\n      usbh_error_handler(puhost, status);\r\n    }\r\n    break;\r\n\r\n  case HOST_CLASS_HANDLER:\r\n    /* process class state machine */\r\n    status = puhost->class_cb->class_machine(pudev, puhost);\r\n\r\n    usbh_error_handler(puhost, status);\r\n    break;\r\n\r\n  case HOST_SUSPENDED:\r\n    break;\r\n\r\n  case HOST_ERROR:\r\n    /* re-initilaize host for new enumeration */\r\n    usbh_deinit(pudev, puhost);\r\n    puhost->usr_cb->dev_deinit();\r\n    puhost->class_cb->class_deinit(pudev, puhost);\r\n    break;\r\n\r\n  case HOST_DEV_DETACHED:\r\n    /* manage user disconnect operations*/\r\n    puhost->usr_cb->dev_detach();\r\n\r\n    /* re-initilaize host for new enumeration */\r\n    usbh_deinit(pudev, puhost);\r\n    puhost->usr_cb->dev_deinit();\r\n    puhost->class_cb->class_deinit(pudev, puhost);\r\n    usbh_pipe_delete(pudev);\r\n    puhost->cur_state = HOST_DEFAULT;\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      handle the error on USB host side\r\n    \\param[in]  puhost: pointer to USB host\r\n    \\param[in]  err_type: type of error or busy/OK state\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usbh_error_handler(usbh_host *puhost, usbh_status err_type) {\r\n  /* error unrecovered or not supported device speed */\r\n  if ((USBH_SPEED_UNKNOWN_ERROR == err_type) || (USBH_UNRECOVERED_ERROR == err_type)) {\r\n    puhost->usr_cb->dev_error();\r\n\r\n    puhost->cur_state = HOST_ERROR;\r\n  } else if (USBH_APPLY_DEINIT == err_type) {\r\n    puhost->cur_state = HOST_ERROR;\r\n\r\n    /* user callback for initalization */\r\n    puhost->usr_cb->dev_init();\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      handle the USB enumeration task\r\n    \\param[in]  pudev: pointer to selected USB device\r\n    \\param[in]  puhost: pointer to host\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nstatic usbh_status usbh_enum_task(usb_core_driver *pudev, usbh_host *puhost) {\r\n  uint8_t str_buf[64];\r\n\r\n  usbh_status status = USBH_BUSY;\r\n\r\n  static uint8_t index_mfc_str = 0U, index_prod_str = 0U, index_serial_str = 0U;\r\n\r\n  switch (puhost->enum_state) {\r\n  case ENUM_DEFAULT:\r\n    /* get device descriptor for only 1st 8 bytes : to get ep0 maxpacketsize */\r\n    if (USBH_OK == usbh_devdesc_get(pudev, puhost, 8U)) {\r\n\r\n      puhost->control.max_len = puhost->dev_prop.dev_desc.bMaxPacketSize0;\r\n\r\n      /* issue reset */\r\n      usb_port_reset(pudev);\r\n\r\n      /* modify control channels configuration for maximum packet size */\r\n      usbh_pipe_update(pudev, puhost->control.pipe_out_num, 0U, 0U, puhost->control.max_len);\r\n\r\n      usbh_pipe_update(pudev, puhost->control.pipe_in_num, 0U, 0U, puhost->control.max_len);\r\n\r\n      puhost->enum_state = ENUM_GET_DEV_DESC;\r\n    }\r\n    break;\r\n\r\n  case ENUM_GET_DEV_DESC:\r\n    /* get full device descriptor */\r\n    if (USBH_OK == usbh_devdesc_get(pudev, puhost, USB_DEV_DESC_LEN)) {\r\n      puhost->usr_cb->dev_devdesc_assigned(&puhost->dev_prop.dev_desc);\r\n\r\n      index_mfc_str    = puhost->dev_prop.dev_desc.iManufacturer;\r\n      index_prod_str   = puhost->dev_prop.dev_desc.iProduct;\r\n      index_serial_str = puhost->dev_prop.dev_desc.iSerialNumber;\r\n\r\n      puhost->enum_state = ENUM_SET_ADDR;\r\n    }\r\n    break;\r\n\r\n  case ENUM_SET_ADDR:\r\n    /* set address */\r\n    if (USBH_OK == usbh_setaddress(pudev, puhost, USBH_DEV_ADDR)) {\r\n      usb_mdelay(2);\r\n\r\n      puhost->dev_prop.addr = USBH_DEV_ADDR;\r\n\r\n      /* user callback for device address assigned */\r\n      puhost->usr_cb->dev_address_set();\r\n\r\n      /* modify control channels to update device address */\r\n      usbh_pipe_update(pudev, puhost->control.pipe_in_num, puhost->dev_prop.addr, 0U, 0U);\r\n\r\n      usbh_pipe_update(pudev, puhost->control.pipe_out_num, puhost->dev_prop.addr, 0U, 0U);\r\n\r\n      puhost->enum_state = ENUM_GET_CFG_DESC;\r\n    }\r\n    break;\r\n\r\n  case ENUM_GET_CFG_DESC:\r\n    /* get standard configuration descriptor */\r\n    if (USBH_OK == usbh_cfgdesc_get(pudev, puhost, USB_CFG_DESC_LEN)) {\r\n      puhost->enum_state = ENUM_GET_CFG_DESC_SET;\r\n    }\r\n    break;\r\n\r\n  case ENUM_GET_CFG_DESC_SET:\r\n    /* get full config descriptor (config, interface, endpoints) */\r\n    if (USBH_OK == usbh_cfgdesc_get(pudev, puhost, puhost->dev_prop.cfg_desc.wTotalLength)) {\r\n      /* user callback for configuration descriptors available */\r\n      puhost->usr_cb->dev_cfgdesc_assigned(&puhost->dev_prop.cfg_desc, puhost->dev_prop.itf_desc, puhost->dev_prop.ep_desc[0]);\r\n\r\n      puhost->enum_state = ENUM_GET_STR_DESC;\r\n    }\r\n    break;\r\n\r\n  case ENUM_GET_STR_DESC:\r\n    if (index_mfc_str) {\r\n      if (USBH_OK == usbh_strdesc_get(pudev, puhost, puhost->dev_prop.dev_desc.iManufacturer, str_buf, 0xFFU)) {\r\n        /* user callback for manufacturing string */\r\n        puhost->usr_cb->dev_mfc_str(str_buf);\r\n\r\n        index_mfc_str = 0U;\r\n      }\r\n    } else {\r\n      if (index_prod_str) {\r\n        /* check that product string is available */\r\n        if (USBH_OK == usbh_strdesc_get(pudev, puhost, puhost->dev_prop.dev_desc.iProduct, str_buf, 0xFFU)) {\r\n          puhost->usr_cb->dev_prod_str(str_buf);\r\n\r\n          index_prod_str = 0U;\r\n        }\r\n      } else {\r\n        if (index_serial_str) {\r\n          if (USBH_OK == usbh_strdesc_get(pudev, puhost, puhost->dev_prop.dev_desc.iSerialNumber, str_buf, 0xFFU)) {\r\n            puhost->usr_cb->dev_seral_str(str_buf);\r\n            puhost->enum_state = ENUM_SET_CONFIGURATION;\r\n\r\n            index_serial_str = 0U;\r\n          }\r\n        } else {\r\n          puhost->enum_state = ENUM_SET_CONFIGURATION;\r\n        }\r\n      }\r\n    }\r\n    break;\r\n\r\n  case ENUM_SET_CONFIGURATION:\r\n    if (USBH_OK == usbh_setcfg(pudev, puhost, puhost->dev_prop.cfg_desc.bConfigurationValue)) {\r\n      puhost->enum_state = ENUM_DEV_CONFIGURED;\r\n    }\r\n    break;\r\n\r\n  case ENUM_DEV_CONFIGURED:\r\n    status = USBH_OK;\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return status;\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/Usb/usbh_enum.c",
    "content": "/*!\r\n    \\file  usbh_enum.c\r\n    \\brief USB host mode enumberation driver\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"usbh_enum.h\"\r\n#include \"usbh_transc.h\"\r\n\r\nstatic void usbh_devdesc_parse(usb_desc_dev *cfg_desc, uint8_t *buf, uint16_t len);\r\nstatic void usbh_cfgset_parse(usb_dev_prop *udev, uint8_t *buf);\r\nstatic void usbh_cfgdesc_parse(usb_desc_config *cfg_desc, uint8_t *buf);\r\nstatic void usbh_itfdesc_parse(usb_desc_itf *itf_desc, uint8_t *buf);\r\nstatic void usbh_epdesc_parse(usb_desc_ep *ep_desc, uint8_t *buf);\r\nstatic void usbh_strdesc_parse(uint8_t *psrc, uint8_t *pdest, uint16_t len);\r\n\r\n/*!\r\n    \\brief      configure USB control status parameters\r\n    \\param[in]  puhost: pointer to usb host\r\n    \\param[in]  buf: control transfer data buffer pointer\r\n    \\param[in]  len: length of the data buffer\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usbh_ctlstate_config(usbh_host *puhost, uint8_t *buf, uint16_t len) {\r\n  /* prepare the transactions */\r\n  puhost->control.buf     = buf;\r\n  puhost->control.ctl_len = len;\r\n\r\n  puhost->control.ctl_state = CTL_SETUP;\r\n}\r\n\r\n/*!\r\n    \\brief      get device descriptor from the USB device\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  puhost: pointer to usb host\r\n    \\param[in]  len: length of the descriptor\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusbh_status usbh_devdesc_get(usb_core_driver *pudev, usbh_host *puhost, uint8_t len) {\r\n  usbh_status status = USBH_BUSY;\r\n\r\n  usbh_control *usb_ctl = &puhost->control;\r\n\r\n  if (CTL_IDLE == usb_ctl->ctl_state) {\r\n    usb_ctl->setup.req =\r\n        (usb_req){.bmRequestType = USB_TRX_IN | USB_RECPTYPE_DEV | USB_REQTYPE_STRD, .bRequest = USB_GET_DESCRIPTOR, .wValue = USBH_DESC(USB_DESCTYPE_DEV), .wIndex = 0U, .wLength = len};\r\n\r\n    usbh_ctlstate_config(puhost, pudev->host.rx_buf, len);\r\n  }\r\n\r\n  status = usbh_ctl_handler(pudev, puhost);\r\n\r\n  if (USBH_OK == status) {\r\n    /* commands successfully sent and response received */\r\n    usbh_devdesc_parse(&puhost->dev_prop.dev_desc, pudev->host.rx_buf, len);\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/*!\r\n    \\brief      get configuration descriptor from the USB device\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  puhost: pointer to usb host\r\n    \\param[in]  len: length of the descriptor\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusbh_status usbh_cfgdesc_get(usb_core_driver *pudev, usbh_host *puhost, uint16_t len) {\r\n  usbh_status status = USBH_BUSY;\r\n\r\n  usbh_control *usb_ctl = &puhost->control;\r\n\r\n  if (CTL_IDLE == usb_ctl->ctl_state) {\r\n    usb_ctl->setup.req =\r\n        (usb_req){.bmRequestType = USB_TRX_IN | USB_RECPTYPE_DEV | USB_REQTYPE_STRD, .bRequest = USB_GET_DESCRIPTOR, .wValue = USBH_DESC(USB_DESCTYPE_CONFIG), .wIndex = 0U, .wLength = len};\r\n\r\n    usbh_ctlstate_config(puhost, pudev->host.rx_buf, len);\r\n  }\r\n\r\n  status = usbh_ctl_handler(pudev, puhost);\r\n\r\n  if (USBH_OK == status) {\r\n    if (len <= USB_CFG_DESC_LEN) {\r\n      usbh_cfgdesc_parse(&puhost->dev_prop.cfg_desc, pudev->host.rx_buf);\r\n    } else {\r\n      usbh_cfgset_parse(&puhost->dev_prop, pudev->host.rx_buf);\r\n    }\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/*!\r\n    \\brief      get string descriptor from the USB device\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  puhost: pointer to usb host\r\n    \\param[in]  str_index: index for the string descriptor\r\n    \\param[in]  buf: buffer pointer to the string descriptor\r\n    \\param[in]  len: length of the descriptor\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusbh_status usbh_strdesc_get(usb_core_driver *pudev, usbh_host *puhost, uint8_t str_index, uint8_t *buf, uint16_t len) {\r\n  usbh_status status = USBH_BUSY;\r\n\r\n  usbh_control *usb_ctl = &puhost->control;\r\n\r\n  if (CTL_IDLE == usb_ctl->ctl_state) {\r\n    usb_ctl->setup.req = (usb_req){\r\n        .bmRequestType = USB_TRX_IN | USB_RECPTYPE_DEV | USB_REQTYPE_STRD, .bRequest = USB_GET_DESCRIPTOR, .wValue = USBH_DESC(USB_DESCTYPE_STR) | str_index, .wIndex = 0x0409U, .wLength = len};\r\n\r\n    usbh_ctlstate_config(puhost, pudev->host.rx_buf, len);\r\n  }\r\n\r\n  status = usbh_ctl_handler(pudev, puhost);\r\n\r\n  if (USBH_OK == status) {\r\n    /* commands successfully sent and response received */\r\n    usbh_strdesc_parse(pudev->host.rx_buf, buf, len);\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/*!\r\n    \\brief      set the address to the connected device\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  puhost: pointer to usb host\r\n    \\param[in]  dev_addr: device address to assign\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusbh_status usbh_setaddress(usb_core_driver *pudev, usbh_host *puhost, uint8_t dev_addr) {\r\n  usbh_status status = USBH_BUSY;\r\n\r\n  usbh_control *usb_ctl = &puhost->control;\r\n\r\n  if (CTL_IDLE == usb_ctl->ctl_state) {\r\n    usb_ctl->setup.req = (usb_req){.bmRequestType = USB_TRX_OUT | USB_RECPTYPE_DEV | USB_REQTYPE_STRD, .bRequest = USB_SET_ADDRESS, .wValue = (uint16_t)dev_addr, .wIndex = 0U, .wLength = 0U};\r\n\r\n    usbh_ctlstate_config(puhost, NULL, 0U);\r\n  }\r\n\r\n  status = usbh_ctl_handler(pudev, puhost);\r\n\r\n  return status;\r\n}\r\n\r\n/*!\r\n    \\brief      set the configuration value to the connected device\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  puhost: pointer to usb host\r\n    \\param[in]  config_index: configuration value\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusbh_status usbh_setcfg(usb_core_driver *pudev, usbh_host *puhost, uint16_t config_index) {\r\n  usbh_status status = USBH_BUSY;\r\n\r\n  usbh_control *usb_ctl = &puhost->control;\r\n\r\n  if (CTL_IDLE == usb_ctl->ctl_state) {\r\n    usb_ctl->setup.req = (usb_req){.bmRequestType = USB_TRX_OUT | USB_RECPTYPE_DEV | USB_REQTYPE_STRD, .bRequest = USB_SET_CONFIGURATION, .wValue = config_index, .wIndex = 0U, .wLength = 0U};\r\n\r\n    usbh_ctlstate_config(puhost, NULL, 0U);\r\n  }\r\n\r\n  status = usbh_ctl_handler(pudev, puhost);\r\n\r\n  return status;\r\n}\r\n\r\n/*!\r\n    \\brief      set the interface value to the connected device\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  puhost: pointer to usb host\r\n    \\param[in]  ep_num: endpoint number\r\n    \\param[in]  alter_setting: altnated setting value\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusbh_status usbh_setinterface(usb_core_driver *pudev, usbh_host *puhost, uint8_t ep_num, uint8_t set) {\r\n  usbh_status status = USBH_BUSY;\r\n\r\n  usbh_control *usb_ctl = &puhost->control;\r\n\r\n  if (CTL_IDLE == usb_ctl->ctl_state) {\r\n    usb_ctl->setup.req = (usb_req){.bmRequestType = USB_TRX_OUT | USB_RECPTYPE_ITF | USB_REQTYPE_STRD, .bRequest = USB_SET_INTERFACE, .wValue = set, .wIndex = ep_num, .wLength = 0U};\r\n\r\n    usbh_ctlstate_config(puhost, NULL, 0U);\r\n  }\r\n\r\n  status = usbh_ctl_handler(pudev, puhost);\r\n\r\n  return status;\r\n}\r\n\r\n/*!\r\n    \\brief      clear or disable a specific feature\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  puhost: pointer to usb host\r\n    \\param[in]  ep_addr: endpoint address\r\n    \\param[in]  pp_num: pipe number\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusbh_status usbh_clrfeature(usb_core_driver *pudev, usbh_host *puhost, uint8_t ep_addr, uint8_t pp_num) {\r\n  usbh_status status = USBH_BUSY;\r\n\r\n  usbh_control *usb_ctl = &puhost->control;\r\n\r\n  if (CTL_IDLE == usb_ctl->ctl_state) {\r\n    usb_ctl->setup.req = (usb_req){.bmRequestType = USB_TRX_OUT | USB_RECPTYPE_EP | USB_REQTYPE_STRD, .bRequest = USB_CLEAR_FEATURE, .wValue = FEATURE_SELECTOR_EP, .wIndex = ep_addr, .wLength = 0};\r\n\r\n    if (EP_DIR(ep_addr)) {\r\n      pudev->host.pipe[pp_num].data_toggle_in = 0U;\r\n    } else {\r\n      pudev->host.pipe[pp_num].data_toggle_out = 0U;\r\n    }\r\n\r\n    usbh_ctlstate_config(puhost, NULL, 0U);\r\n  }\r\n\r\n  status = usbh_ctl_handler(pudev, puhost);\r\n\r\n  return status;\r\n}\r\n\r\n/*!\r\n    \\brief      parse the device descriptor\r\n    \\param[in]  dev_desc: pointer to usb device descriptor buffer\r\n    \\param[in]  buf: pointer to the source descriptor buffer\r\n    \\param[in]  len: length of the descriptor\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nstatic void usbh_devdesc_parse(usb_desc_dev *dev_desc, uint8_t *buf, uint16_t len) {\r\n  *dev_desc = (usb_desc_dev){\r\n      .header = {.bLength = *(uint8_t *)(buf + 0U), .bDescriptorType = *(uint8_t *)(buf + 1U)},\r\n\r\n      .bcdUSB          = BYTE_SWAP(buf + 2U),\r\n      .bDeviceClass    = *(uint8_t *)(buf + 4U),\r\n      .bDeviceSubClass = *(uint8_t *)(buf + 5U),\r\n      .bDeviceProtocol = *(uint8_t *)(buf + 6U),\r\n      .bMaxPacketSize0 = *(uint8_t *)(buf + 7U)\r\n  };\r\n\r\n  if (len > 8U) {\r\n    /* for 1st time after device connection, host may issue only 8 bytes for device descriptor length  */\r\n    dev_desc->idVendor              = BYTE_SWAP(buf + 8U);\r\n    dev_desc->idProduct             = BYTE_SWAP(buf + 10U);\r\n    dev_desc->bcdDevice             = BYTE_SWAP(buf + 12U);\r\n    dev_desc->iManufacturer         = *(uint8_t *)(buf + 14U);\r\n    dev_desc->iProduct              = *(uint8_t *)(buf + 15U);\r\n    dev_desc->iSerialNumber         = *(uint8_t *)(buf + 16U);\r\n    dev_desc->bNumberConfigurations = *(uint8_t *)(buf + 17U);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      parse the configuration descriptor\r\n    \\param[in]  cfg_desc: pointer to usb configuration descriptor buffer\r\n    \\param[in]  buf: pointer to the source descriptor buffer\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nstatic void usbh_cfgdesc_parse(usb_desc_config *cfg_desc, uint8_t *buf) {\r\n  /* parse configuration descriptor */\r\n  *cfg_desc = (usb_desc_config){\r\n      .header =\r\n          {\r\n                   .bLength         = *(uint8_t *)(buf + 0U),\r\n                   .bDescriptorType = *(uint8_t *)(buf + 1U),\r\n                   },\r\n\r\n      .wTotalLength        = BYTE_SWAP(buf + 2U),\r\n      .bNumInterfaces      = *(uint8_t *)(buf + 4U),\r\n      .bConfigurationValue = *(uint8_t *)(buf + 5U),\r\n      .iConfiguration      = *(uint8_t *)(buf + 6U),\r\n      .bmAttributes        = *(uint8_t *)(buf + 7U),\r\n      .bMaxPower           = *(uint8_t *)(buf + 8U)\r\n  };\r\n}\r\n\r\n/*!\r\n    \\brief      parse the configuration descriptor set\r\n    \\param[in]  udev: pointer to USB core instance\r\n    \\param[in]  buf: pointer to the source descriptor buffer\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nstatic void usbh_cfgset_parse(usb_dev_prop *udev, uint8_t *buf) {\r\n  usb_desc_ep  *ep  = NULL;\r\n  usb_desc_itf *itf = NULL, itf_value;\r\n\r\n  usb_desc_header *pdesc = (usb_desc_header *)buf;\r\n\r\n  int8_t   itf_index = 0U, ep_index = 0U;\r\n  uint16_t ptr;\r\n\r\n  uint8_t  prev_itf    = 0U;\r\n  uint16_t prev_ep_len = 0U;\r\n\r\n  /* parse configuration descriptor */\r\n  usbh_cfgdesc_parse(&udev->cfg_desc, buf);\r\n\r\n  ptr = USB_CFG_DESC_LEN;\r\n\r\n  if (udev->cfg_desc.bNumInterfaces > USBH_MAX_INTERFACES_NUM) {\r\n    return;\r\n  }\r\n\r\n  while (ptr < udev->cfg_desc.wTotalLength) {\r\n    pdesc = usbh_nextdesc_get((uint8_t *)pdesc, &ptr);\r\n\r\n    if (pdesc->bDescriptorType == USB_DESCTYPE_ITF) {\r\n      itf_index = *(((uint8_t *)pdesc) + 2U);\r\n      itf       = &udev->itf_desc[itf_index];\r\n\r\n      if ((*((uint8_t *)pdesc + 3U)) < 3U) {\r\n        usbh_itfdesc_parse(&itf_value, (uint8_t *)pdesc);\r\n\r\n        /* parse endpoint descriptors relative to the current interface */\r\n        if (itf_value.bNumEndpoints > USBH_MAX_EP_NUM) {\r\n          return;\r\n        }\r\n\r\n        for (ep_index = 0; ep_index < itf_value.bNumEndpoints;) {\r\n          pdesc = usbh_nextdesc_get((void *)pdesc, &ptr);\r\n\r\n          if (pdesc->bDescriptorType == USB_DESCTYPE_EP) {\r\n            ep = &udev->ep_desc[itf_index][ep_index];\r\n\r\n            if (prev_itf != itf_index) {\r\n              prev_itf = itf_index;\r\n              usbh_itfdesc_parse(itf, (uint8_t *)&itf_value);\r\n            } else {\r\n              if (prev_ep_len > BYTE_SWAP((uint8_t *)pdesc + 4U)) {\r\n                break;\r\n              } else {\r\n                usbh_itfdesc_parse(itf, (uint8_t *)&itf_value);\r\n              }\r\n            }\r\n\r\n            usbh_epdesc_parse(ep, (uint8_t *)pdesc);\r\n            prev_ep_len = BYTE_SWAP((uint8_t *)pdesc + 4U);\r\n            ep_index++;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      parse the interface descriptor\r\n    \\param[in]  itf_desc: pointer to usb interface descriptor buffer\r\n    \\param[in]  buf: pointer to the source descriptor buffer\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nstatic void usbh_itfdesc_parse(usb_desc_itf *itf_desc, uint8_t *buf) {\r\n  *itf_desc = (usb_desc_itf){\r\n      .header =\r\n          {\r\n                   .bLength         = *(uint8_t *)(buf + 0U),\r\n                   .bDescriptorType = *(uint8_t *)(buf + 1U),\r\n                   },\r\n\r\n      .bInterfaceNumber   = *(uint8_t *)(buf + 2U),\r\n      .bAlternateSetting  = *(uint8_t *)(buf + 3U),\r\n      .bNumEndpoints      = *(uint8_t *)(buf + 4U),\r\n      .bInterfaceClass    = *(uint8_t *)(buf + 5U),\r\n      .bInterfaceSubClass = *(uint8_t *)(buf + 6U),\r\n      .bInterfaceProtocol = *(uint8_t *)(buf + 7U),\r\n      .iInterface         = *(uint8_t *)(buf + 8U)\r\n  };\r\n}\r\n\r\n/*!\r\n    \\brief      parse the endpoint descriptor\r\n    \\param[in]  ep_desc: pointer to usb endpoint descriptor buffer\r\n    \\param[in]  buf: pointer to the source descriptor buffer\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nstatic void usbh_epdesc_parse(usb_desc_ep *ep_desc, uint8_t *buf) {\r\n  *ep_desc = (usb_desc_ep){\r\n      .header = {.bLength = *(uint8_t *)(buf + 0U), .bDescriptorType = *(uint8_t *)(buf + 1U)},\r\n\r\n      .bEndpointAddress = *(uint8_t *)(buf + 2U),\r\n      .bmAttributes     = *(uint8_t *)(buf + 3U),\r\n      .wMaxPacketSize   = BYTE_SWAP(buf + 4U),\r\n      .bInterval        = *(uint8_t *)(buf + 6U)\r\n  };\r\n}\r\n\r\n/*!\r\n    \\brief      parse the string descriptor\r\n    \\param[in]  psrc: source pointer containing the descriptor data\r\n    \\param[in]  pdest: destination address pointer\r\n    \\param[in]  len: length of the descriptor\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nstatic void usbh_strdesc_parse(uint8_t *psrc, uint8_t *pdest, uint16_t len) {\r\n  uint16_t str_len = 0U, index = 0U;\r\n\r\n  /* the unicode string descriptor is not NULL-terminated. The string length is\r\n   * computed by substracting two from the value of the first byte of the descriptor.\r\n   */\r\n\r\n  /* check which is lower size, the size of string or the length of bytes read from the device */\r\n  if (USB_DESCTYPE_STR == psrc[1]) {\r\n    /* make sure the descriptor is string type */\r\n\r\n    /* psrc[0] contains Size of Descriptor, subtract 2 to get the length of string */\r\n    str_len = USB_MIN(psrc[0] - 2U, len);\r\n\r\n    psrc += 2U; /* adjust the offset ignoring the string len and descriptor type */\r\n\r\n    for (index = 0U; index < str_len; index += 2U) {\r\n      /* copy only the string and ignore the unicode id, hence add the src */\r\n      *pdest = psrc[index];\r\n\r\n      pdest++;\r\n    }\r\n\r\n    *pdest = 0U; /* mark end of string */\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      get the next descriptor header\r\n    \\param[in]  pbuf: pointer to buffer where the configuration descriptor set is available\r\n    \\param[in]  ptr: data popinter inside the configuration descriptor set\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusb_desc_header *usbh_nextdesc_get(uint8_t *pbuf, uint16_t *ptr) {\r\n  usb_desc_header *pnext;\r\n\r\n  *ptr += ((usb_desc_header *)pbuf)->bLength;\r\n\r\n  pnext = (usb_desc_header *)((uint8_t *)pbuf + ((usb_desc_header *)pbuf)->bLength);\r\n\r\n  return (pnext);\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/Usb/usbh_pipe.c",
    "content": "/*!\r\n    \\file  usbh_pipe.c\r\n    \\brief USB host mode pipe operation driver\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"usbh_pipe.h\"\r\n\r\nstatic uint16_t usbh_freepipe_get(usb_core_driver *pudev);\r\n\r\n/*!\r\n    \\brief      create a pipe\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  pp_num: pipe number\r\n    \\param[in]  udev: USB device\r\n    \\param[in]  ep_type: endpoint type\r\n    \\param[in]  ep_mpl: endpoint max packet length\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nuint8_t usbh_pipe_create(usb_core_driver *pudev, usb_dev_prop *udev, uint8_t pp_num, uint8_t ep_type, uint16_t ep_mpl) {\r\n  usb_pipe *pp = &pudev->host.pipe[pp_num];\r\n\r\n  pp->dev_addr  = udev->addr;\r\n  pp->dev_speed = udev->speed;\r\n  pp->ep.type   = ep_type;\r\n  pp->ep.mps    = ep_mpl;\r\n  pp->ping      = udev->speed == PORT_SPEED_HIGH;\r\n\r\n  usb_pipe_init(pudev, pp_num);\r\n\r\n  return HC_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      modify a pipe\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  pp_num: pipe number\r\n    \\param[in]  dev_addr: device address\r\n    \\param[in]  dev_speed: device speed\r\n    \\param[in]  ep_type: endpoint type\r\n    \\param[in]  ep_mpl: endpoint max packet length\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nuint8_t usbh_pipe_update(usb_core_driver *pudev, uint8_t pp_num, uint8_t dev_addr, uint32_t dev_speed, uint16_t ep_mpl) {\r\n  usb_pipe *pp = &pudev->host.pipe[pp_num];\r\n\r\n  if ((pp->dev_addr != dev_addr) && (dev_addr)) {\r\n    pp->dev_addr = dev_addr;\r\n  }\r\n\r\n  if ((pp->dev_speed != dev_speed) && (dev_speed)) {\r\n    pp->dev_speed = dev_speed;\r\n  }\r\n\r\n  if ((pp->ep.mps != ep_mpl) && (ep_mpl)) {\r\n    pp->ep.mps = ep_mpl;\r\n  }\r\n\r\n  usb_pipe_init(pudev, pp_num);\r\n\r\n  return HC_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      allocate a new pipe\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  ep_addr: endpoint address\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nuint8_t usbh_pipe_allocate(usb_core_driver *pudev, uint8_t ep_addr) {\r\n  uint16_t pp_num = usbh_freepipe_get(pudev);\r\n\r\n  if (HC_ERROR != pp_num) {\r\n    pudev->host.pipe[pp_num].in_used = 1U;\r\n    pudev->host.pipe[pp_num].ep.dir  = EP_DIR(ep_addr);\r\n    pudev->host.pipe[pp_num].ep.num  = EP_ID(ep_addr);\r\n  }\r\n\r\n  return pp_num;\r\n}\r\n\r\n/*!\r\n    \\brief      free a pipe\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  pp_num: pipe number\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nuint8_t usbh_pipe_free(usb_core_driver *pudev, uint8_t pp_num) {\r\n  if (pp_num < HC_MAX) {\r\n    pudev->host.pipe[pp_num].in_used = 0U;\r\n  }\r\n\r\n  return USBH_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      delete all USB host pipe\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nuint8_t usbh_pipe_delete(usb_core_driver *pudev) {\r\n  uint8_t pp_num = 0U;\r\n\r\n  for (pp_num = 2U; pp_num < HC_MAX; pp_num++) {\r\n    pudev->host.pipe[pp_num] = (usb_pipe){0};\r\n  }\r\n\r\n  return USBH_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      get a free pipe number for allocation\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nstatic uint16_t usbh_freepipe_get(usb_core_driver *pudev) {\r\n  uint8_t pp_num = 0U;\r\n\r\n  for (pp_num = 0U; pp_num < HC_MAX; pp_num++) {\r\n    if (pudev->host.pipe[pp_num].in_used == 0U) {\r\n      return pp_num;\r\n    }\r\n  }\r\n\r\n  return HC_ERROR;\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/Usb/usbh_transc.c",
    "content": "/*!\r\n    \\file  usbh_transc.c\r\n    \\brief USB host mode transactions driver\r\n\r\n    \\version 2019-6-5, V1.0.0, firmware for GD32 USBFS&USBHS\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2019, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"usbh_transc.h\"\r\n#include \"drv_usb_hw.h\"\r\n\r\n/*!\r\n    \\brief      prepare a pipe and start a transfer\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  pp_num: pipe number\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nstatic uint32_t usbh_request_submit(usb_core_driver *pudev, uint8_t pp_num) {\r\n  pudev->host.pipe[pp_num].urb_state  = URB_IDLE;\r\n  pudev->host.pipe[pp_num].xfer_count = 0U;\r\n  return usb_pipe_xfer(pudev, pp_num);\r\n}\r\n\r\n/*!\r\n    \\brief      send the setup packet to the USB device\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  buf: data buffer which will be sent to USB device\r\n    \\param[in]  pp_num: pipe number\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusbh_status usbh_ctlsetup_send(usb_core_driver *pudev, uint8_t *buf, uint8_t pp_num) {\r\n  usb_pipe *pp = &pudev->host.pipe[pp_num];\r\n\r\n  pp->DPID     = PIPE_DPID_SETUP;\r\n  pp->xfer_buf = buf;\r\n  pp->xfer_len = USB_SETUP_PACKET_LEN;\r\n  uint32_t res = usbh_request_submit(pudev, pp_num);\r\n  return (usbh_status)res;\r\n}\r\n\r\n/*!\r\n    \\brief      send a data packet to the USB device\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  buf: data buffer which will be sent to USB device\r\n    \\param[in]  pp_num: pipe number\r\n    \\param[in]  len: length of the data to be sent\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusbh_status usbh_data_send(usb_core_driver *pudev, uint8_t *buf, uint8_t pp_num, uint16_t len) {\r\n  usb_pipe *pp = &pudev->host.pipe[pp_num];\r\n\r\n  pp->xfer_buf = buf;\r\n  pp->xfer_len = len;\r\n\r\n  switch (pp->ep.type) {\r\n  case USB_EPTYPE_CTRL:\r\n    if (0U == len) {\r\n      pp->data_toggle_out = 1U;\r\n    }\r\n\r\n    pp->DPID = PIPE_DPID[pp->data_toggle_out];\r\n    break;\r\n\r\n  case USB_EPTYPE_INTR:\r\n    pp->DPID = PIPE_DPID[pp->data_toggle_out];\r\n\r\n    pp->data_toggle_out ^= 1U;\r\n    break;\r\n\r\n  case USB_EPTYPE_BULK:\r\n    pp->DPID = PIPE_DPID[pp->data_toggle_out];\r\n    break;\r\n\r\n  case USB_EPTYPE_ISOC:\r\n    pp->DPID = PIPE_DPID[0];\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  usbh_request_submit(pudev, pp_num);\r\n\r\n  return USBH_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      receive a data packet from the USB device\r\n    \\param[in]  pudev: pointer to usb core instance\r\n    \\param[in]  buf: data buffer which will be received from USB device\r\n    \\param[in]  pp_num: pipe number\r\n    \\param[in]  len: length of the data to be received\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusbh_status usbh_data_recev(usb_core_driver *pudev, uint8_t *buf, uint8_t pp_num, uint16_t len) {\r\n  usb_pipe *pp = &pudev->host.pipe[pp_num];\r\n\r\n  pp->xfer_buf = buf;\r\n  pp->xfer_len = len;\r\n\r\n  switch (pp->ep.type) {\r\n  case USB_EPTYPE_CTRL:\r\n    pp->DPID = PIPE_DPID[1];\r\n    break;\r\n\r\n  case USB_EPTYPE_INTR:\r\n    pp->DPID = PIPE_DPID[pp->data_toggle_in];\r\n\r\n    /* Toggle DATA PID */\r\n    pp->data_toggle_in ^= 1U;\r\n    break;\r\n\r\n  case USB_EPTYPE_BULK:\r\n    pp->DPID = PIPE_DPID[pp->data_toggle_in];\r\n    break;\r\n\r\n  case USB_EPTYPE_ISOC:\r\n    pp->DPID = PIPE_DPID[0];\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  usbh_request_submit(pudev, pp_num);\r\n\r\n  return USBH_OK;\r\n}\r\n\r\n/*!\r\n    \\brief      wait for USB URB(USB request block) state\r\n    \\param[in]  pudev: pointer to USB core instance\r\n    \\param[in]  puhost: pointer to USB host\r\n    \\param[in]  pp_num: pipe number\r\n    \\param[in]  wait_time: wait time\r\n    \\param[out] none\r\n    \\retval     USB URB state\r\n*/\r\nstatic usb_urb_state usbh_urb_wait(usb_core_driver *pudev, usbh_host *puhost, uint8_t pp_num, uint32_t wait_time) {\r\n  usb_urb_state urb_status = URB_IDLE;\r\n\r\n  while (URB_DONE != (urb_status = usbh_urbstate_get(pudev, pp_num))) {\r\n    if (URB_NOTREADY == urb_status) {\r\n      break;\r\n    } else if (URB_STALL == urb_status) {\r\n      puhost->control.ctl_state = CTL_SETUP;\r\n      break;\r\n    } else if (URB_ERROR == urb_status) {\r\n      puhost->control.ctl_state = CTL_ERROR;\r\n      break;\r\n    } else if ((wait_time > 0U) && ((usb_curframe_get(pudev) - puhost->control.timer) > wait_time)) {\r\n      /* timeout for in transfer */\r\n      puhost->control.ctl_state = CTL_ERROR;\r\n      break;\r\n    } else {\r\n      /* no operation, just wait */\r\n    }\r\n  }\r\n\r\n  return urb_status;\r\n}\r\n\r\n/*!\r\n    \\brief      USB setup transaction\r\n    \\param[in]  pudev: pointer to USB core instance\r\n    \\param[in]  puhost: pointer to USB host\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nstatic void usbh_setup_transc(usb_core_driver *pudev, usbh_host *puhost) {\r\n  usb_urb_state urb_status = URB_IDLE;\r\n\r\n  /* send a SETUP packet */\r\n  usbh_ctlsetup_send(pudev, puhost->control.setup.data, puhost->control.pipe_out_num);\r\n\r\n  urb_status = usbh_urb_wait(pudev, puhost, puhost->control.pipe_out_num, 0U);\r\n\r\n  if (URB_DONE == urb_status) {\r\n    uint8_t dir = (puhost->control.setup.req.bmRequestType & USB_TRX_MASK);\r\n\r\n    if (puhost->control.setup.req.wLength) {\r\n      if (USB_TRX_IN == dir) {\r\n        puhost->control.ctl_state = CTL_DATA_IN;\r\n      } else {\r\n        puhost->control.ctl_state = CTL_DATA_OUT;\r\n      }\r\n    } else {\r\n      if (USB_TRX_IN == dir) {\r\n        puhost->control.ctl_state = CTL_STATUS_OUT;\r\n      } else {\r\n        puhost->control.ctl_state = CTL_STATUS_IN;\r\n      }\r\n    }\r\n\r\n    /* set the delay timer to enable timeout for data stage completion */\r\n    puhost->control.timer = usb_curframe_get(pudev);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      USB data IN transaction\r\n    \\param[in]  pudev: pointer to USB core instance\r\n    \\param[in]  puhost: pointer to USB host\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nstatic void usbh_data_in_transc(usb_core_driver *pudev, usbh_host *puhost) {\r\n  usb_urb_state urb_status = URB_IDLE;\r\n\r\n  usbh_data_recev(pudev, puhost->control.buf, puhost->control.pipe_in_num, puhost->control.ctl_len);\r\n\r\n  urb_status = usbh_urb_wait(pudev, puhost, puhost->control.pipe_in_num, DATA_STAGE_TIMEOUT);\r\n\r\n  if (URB_DONE == urb_status) {\r\n    puhost->control.ctl_state = CTL_STATUS_OUT;\r\n\r\n    puhost->control.timer = usb_curframe_get(pudev);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      USB data OUT transaction\r\n    \\param[in]  pudev: pointer to USB core instance\r\n    \\param[in]  puhost: pointer to USB host\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nstatic void usbh_data_out_transc(usb_core_driver *pudev, usbh_host *puhost) {\r\n  usb_urb_state urb_status = URB_IDLE;\r\n\r\n  pudev->host.pipe[puhost->control.pipe_out_num].data_toggle_out = 1U;\r\n\r\n  usbh_data_send(pudev, puhost->control.buf, puhost->control.pipe_out_num, puhost->control.ctl_len);\r\n\r\n  urb_status = usbh_urb_wait(pudev, puhost, puhost->control.pipe_out_num, DATA_STAGE_TIMEOUT);\r\n\r\n  if (URB_DONE == urb_status) {\r\n    puhost->control.ctl_state = CTL_STATUS_IN;\r\n\r\n    puhost->control.timer = usb_curframe_get(pudev);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      USB status IN transaction\r\n    \\param[in]  pudev: pointer to USB core instance\r\n    \\param[in]  puhost: pointer to USB host\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nstatic void usbh_status_in_transc(usb_core_driver *pudev, usbh_host *puhost) {\r\n  uint8_t pp_num = puhost->control.pipe_in_num;\r\n\r\n  usb_urb_state urb_status = URB_IDLE;\r\n\r\n  usbh_data_recev(pudev, NULL, pp_num, 0U);\r\n\r\n  urb_status = usbh_urb_wait(pudev, puhost, pp_num, NODATA_STAGE_TIMEOUT);\r\n\r\n  if (URB_DONE == urb_status) {\r\n    puhost->control.ctl_state = CTL_FINISH;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      USB status OUT transaction\r\n    \\param[in]  pudev: pointer to USB core instance\r\n    \\param[in]  puhost: pointer to USB host\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nstatic void usbh_status_out_transc(usb_core_driver *pudev, usbh_host *puhost) {\r\n  uint8_t pp_num = puhost->control.pipe_out_num;\r\n\r\n  usb_urb_state urb_status = URB_IDLE;\r\n\r\n  pudev->host.pipe[pp_num].data_toggle_out ^= 1U;\r\n\r\n  usbh_data_send(pudev, NULL, pp_num, 0U);\r\n\r\n  urb_status = usbh_urb_wait(pudev, puhost, pp_num, NODATA_STAGE_TIMEOUT);\r\n\r\n  if (URB_DONE == urb_status) {\r\n    puhost->control.ctl_state = CTL_FINISH;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      USB control transfer handler\r\n    \\param[in]  pudev: pointer to USB core instance\r\n    \\param[in]  puhost: pointer to USB host\r\n    \\param[out] none\r\n    \\retval     operation status\r\n*/\r\nusbh_status usbh_ctl_handler(usb_core_driver *pudev, usbh_host *puhost) {\r\n  usbh_status status = USBH_BUSY;\r\n\r\n  switch (puhost->control.ctl_state) {\r\n  case CTL_SETUP:\r\n    usbh_setup_transc(pudev, puhost);\r\n    break;\r\n\r\n  case CTL_DATA_IN:\r\n    usbh_data_in_transc(pudev, puhost);\r\n    break;\r\n\r\n  case CTL_DATA_OUT:\r\n    usbh_data_out_transc(pudev, puhost);\r\n    break;\r\n\r\n  case CTL_STATUS_IN:\r\n    usbh_status_in_transc(pudev, puhost);\r\n    break;\r\n\r\n  case CTL_STATUS_OUT:\r\n    usbh_status_out_transc(pudev, puhost);\r\n    break;\r\n\r\n  case CTL_FINISH:\r\n    puhost->control.ctl_state = CTL_IDLE;\r\n\r\n    status = USBH_OK;\r\n    break;\r\n\r\n  case CTL_ERROR:\r\n    if (++puhost->control.error_count <= USBH_MAX_ERROR_COUNT) {\r\n      /* do the transmission again, starting from SETUP packet */\r\n      puhost->control.ctl_state = CTL_SETUP;\r\n    } else {\r\n      status = USBH_FAIL;\r\n    }\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return status;\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_adc.c",
    "content": "/*!\r\n    \\file    gd32vf103_adc.c\r\n    \\brief   ADC driver\r\n\r\n    \\version 2020-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_adc.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n/* discontinuous mode macro*/\r\n#define ADC_CHANNEL_LENGTH_SUBTRACT_ONE ((uint8_t)1U)\r\n\r\n/* ADC regular channel macro */\r\n#define ADC_REGULAR_CHANNEL_RANK_SIX     ((uint8_t)6U)\r\n#define ADC_REGULAR_CHANNEL_RANK_TWELVE  ((uint8_t)12U)\r\n#define ADC_REGULAR_CHANNEL_RANK_SIXTEEN ((uint8_t)16U)\r\n#define ADC_REGULAR_CHANNEL_RANK_LENGTH  ((uint8_t)5U)\r\n\r\n/* ADC sampling time macro */\r\n#define ADC_CHANNEL_SAMPLE_TEN      ((uint8_t)10U)\r\n#define ADC_CHANNEL_SAMPLE_EIGHTEEN ((uint8_t)18U)\r\n#define ADC_CHANNEL_SAMPLE_LENGTH   ((uint8_t)3U)\r\n\r\n/* ADC inserted channel macro */\r\n#define ADC_INSERTED_CHANNEL_RANK_LENGTH  ((uint8_t)5U)\r\n#define ADC_INSERTED_CHANNEL_SHIFT_LENGTH ((uint8_t)15U)\r\n\r\n/* ADC inserted channel offset macro */\r\n#define ADC_OFFSET_LENGTH       ((uint8_t)3U)\r\n#define ADC_OFFSET_SHIFT_LENGTH ((uint8_t)4U)\r\n\r\n/*!\r\n    \\brief      reset ADC\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_deinit(uint32_t adc_periph) {\r\n  switch (adc_periph) {\r\n  case ADC0:\r\n    /* reset ADC0 */\r\n    rcu_periph_reset_enable(RCU_ADC0RST);\r\n    rcu_periph_reset_disable(RCU_ADC0RST);\r\n    break;\r\n  case ADC1:\r\n    /* reset ADC1 */\r\n    rcu_periph_reset_enable(RCU_ADC1RST);\r\n    rcu_periph_reset_disable(RCU_ADC1RST);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure the ADC sync mode\r\n    \\param[in]  mode: ADC mode\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_MODE_FREE: all the ADCs work independently\r\n      \\arg        ADC_DAUL_REGULAL_PARALLEL_INSERTED_PARALLEL: ADC0 and ADC1 work in combined regular parallel + inserted parallel mode\r\n      \\arg        ADC_DAUL_REGULAL_PARALLEL_INSERTED_ROTATION: ADC0 and ADC1 work in combined regular parallel + trigger rotation mode\r\n      \\arg        ADC_DAUL_INSERTED_PARALLEL_REGULAL_FOLLOWUP_FAST: ADC0 and ADC1 work in combined inserted parallel + follow-up fast mode\r\n      \\arg        ADC_DAUL_INSERTED_PARALLEL_REGULAL_FOLLOWUP_SLOW: ADC0 and ADC1 work in combined inserted parallel + follow-up slow mode\r\n      \\arg        ADC_DAUL_INSERTED_PARALLEL: ADC0 and ADC1 work in inserted parallel mode only\r\n      \\arg        ADC_DAUL_REGULAL_PARALLEL: ADC0 and ADC1 work in regular parallel mode only\r\n      \\arg        ADC_DAUL_REGULAL_FOLLOWUP_FAST: ADC0 and ADC1 work in follow-up fast mode only\r\n      \\arg        ADC_DAUL_REGULAL_FOLLOWUP_SLOW: ADC0 and ADC1 work in follow-up slow mode only\r\n      \\arg        ADC_DAUL_INSERTED_TRIGGER_ROTATION: ADC0 and ADC1 work in trigger rotation mode only\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_mode_config(uint32_t mode) {\r\n  ADC_CTL0(ADC0) &= ~(ADC_CTL0_SYNCM);\r\n  ADC_CTL0(ADC0) |= mode;\r\n}\r\n\r\n/*!\r\n    \\brief      enable or disable ADC special function\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  function: the function to config\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_SCAN_MODE: scan mode select\r\n      \\arg        ADC_INSERTED_CHANNEL_AUTO: inserted channel group convert automatically\r\n      \\arg        ADC_CONTINUOUS_MODE: continuous mode select\r\n    \\param[in]  newvalue: ENABLE or DISABLE\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_special_function_config(uint32_t adc_periph, uint32_t function, ControlStatus newvalue) {\r\n  if (newvalue) {\r\n    if (0U != (function & ADC_SCAN_MODE)) {\r\n      /* enable scan mode */\r\n      ADC_CTL0(adc_periph) |= ADC_SCAN_MODE;\r\n    }\r\n    if (0U != (function & ADC_INSERTED_CHANNEL_AUTO)) {\r\n      /* enable inserted channel group convert automatically */\r\n      ADC_CTL0(adc_periph) |= ADC_INSERTED_CHANNEL_AUTO;\r\n    }\r\n    if (0U != (function & ADC_CONTINUOUS_MODE)) {\r\n      /* enable continuous mode */\r\n      ADC_CTL1(adc_periph) |= ADC_CONTINUOUS_MODE;\r\n    }\r\n  } else {\r\n    if (0U != (function & ADC_SCAN_MODE)) {\r\n      /* disable scan mode */\r\n      ADC_CTL0(adc_periph) &= ~ADC_SCAN_MODE;\r\n    }\r\n    if (0U != (function & ADC_INSERTED_CHANNEL_AUTO)) {\r\n      /* disable inserted channel group convert automatically */\r\n      ADC_CTL0(adc_periph) &= ~ADC_INSERTED_CHANNEL_AUTO;\r\n    }\r\n    if (0U != (function & ADC_CONTINUOUS_MODE)) {\r\n      /* disable continuous mode */\r\n      ADC_CTL1(adc_periph) &= ~ADC_CONTINUOUS_MODE;\r\n    }\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure ADC data alignment\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  data_alignment: data alignment select\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_DATAALIGN_RIGHT: LSB alignment\r\n      \\arg        ADC_DATAALIGN_LEFT: MSB alignment\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_data_alignment_config(uint32_t adc_periph, uint32_t data_alignment) {\r\n  if (ADC_DATAALIGN_RIGHT != data_alignment) {\r\n    /* MSB alignment */\r\n    ADC_CTL1(adc_periph) |= ADC_CTL1_DAL;\r\n  } else {\r\n    /* LSB alignment */\r\n    ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_DAL);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      enable ADC interface\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_enable(uint32_t adc_periph) {\r\n  if ((uint32_t)RESET == (ADC_CTL1(adc_periph) & ADC_CTL1_ADCON)) {\r\n    /* enable ADC */\r\n    ADC_CTL1(adc_periph) |= (uint32_t)ADC_CTL1_ADCON;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      disable ADC interface\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_disable(uint32_t adc_periph) {\r\n  /* disable ADC */\r\n  ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_ADCON);\r\n}\r\n\r\n/*!\r\n    \\brief      ADC calibration and reset calibration\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_calibration_enable(uint32_t adc_periph) {\r\n  /* reset the selected ADC1 calibration registers */\r\n  ADC_CTL1(adc_periph) |= (uint32_t)ADC_CTL1_RSTCLB;\r\n  /* check the RSTCLB bit state */\r\n  while ((uint32_t)RESET != (ADC_CTL1(adc_periph) & ADC_CTL1_RSTCLB)) {\r\n  }\r\n  /* enable ADC calibration process */\r\n  ADC_CTL1(adc_periph) |= ADC_CTL1_CLB;\r\n  /* check the CLB bit state */\r\n  while ((uint32_t)RESET != (ADC_CTL1(adc_periph) & ADC_CTL1_CLB)) {\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      enable the temperature sensor and Vrefint channel\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_tempsensor_vrefint_enable(void) {\r\n  /* enable the temperature sensor and Vrefint channel */\r\n  ADC_CTL1(ADC0) |= ADC_CTL1_TSVREN;\r\n}\r\n\r\n/*!\r\n    \\brief      disable the temperature sensor and Vrefint channel\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_tempsensor_vrefint_disable(void) {\r\n  /* disable the temperature sensor and Vrefint channel */\r\n  ADC_CTL1(ADC0) &= ~ADC_CTL1_TSVREN;\r\n}\r\n\r\n/*!\r\n    \\brief      enable DMA request\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_dma_mode_enable(uint32_t adc_periph) {\r\n  /* enable DMA request */\r\n  ADC_CTL1(adc_periph) |= (uint32_t)(ADC_CTL1_DMA);\r\n}\r\n\r\n/*!\r\n    \\brief      disable DMA request\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_dma_mode_disable(uint32_t adc_periph) {\r\n  /* disable DMA request */\r\n  ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_DMA);\r\n}\r\n\r\n/*!\r\n    \\brief      configure ADC discontinuous mode\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  adc_channel_group: select the channel group\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_REGULAR_CHANNEL: regular channel group\r\n      \\arg        ADC_INSERTED_CHANNEL: inserted channel group\r\n      \\arg        ADC_CHANNEL_DISCON_DISABLE: disable discontinuous mode of regular & inserted channel\r\n    \\param[in]  length: number of conversions in discontinuous mode,the number can be 1..8\r\n                        for regular channel, the number has no effect for inserted channel\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_discontinuous_mode_config(uint32_t adc_periph, uint8_t adc_channel_group, uint8_t length) {\r\n  /* disable discontinuous mode of regular & inserted channel */\r\n  ADC_CTL0(adc_periph) &= ~((uint32_t)(ADC_CTL0_DISRC | ADC_CTL0_DISIC));\r\n  switch (adc_channel_group) {\r\n  case ADC_REGULAR_CHANNEL:\r\n    /* config the number of conversions in discontinuous mode */\r\n    ADC_CTL0(adc_periph) &= ~((uint32_t)ADC_CTL0_DISNUM);\r\n    ADC_CTL0(adc_periph) |= CTL0_DISNUM(((uint32_t)length - ADC_CHANNEL_LENGTH_SUBTRACT_ONE));\r\n    /* enable regular channel group discontinuous mode */\r\n    ADC_CTL0(adc_periph) |= (uint32_t)ADC_CTL0_DISRC;\r\n    break;\r\n  case ADC_INSERTED_CHANNEL:\r\n    /* enable inserted channel group discontinuous mode */\r\n    ADC_CTL0(adc_periph) |= (uint32_t)ADC_CTL0_DISIC;\r\n    break;\r\n  case ADC_CHANNEL_DISCON_DISABLE:\r\n    /* disable discontinuous mode of regular & inserted channel */\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure the length of regular channel group or inserted channel group\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  adc_channel_group: select the channel group\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_REGULAR_CHANNEL: regular channel group\r\n      \\arg        ADC_INSERTED_CHANNEL: inserted channel group\r\n    \\param[in]  length: the length of the channel\r\n                        regular channel 1-16\r\n                        inserted channel 1-4\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_channel_length_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t length) {\r\n  switch (adc_channel_group) {\r\n  case ADC_REGULAR_CHANNEL:\r\n    /* configure the length of regular channel group */\r\n    ADC_RSQ0(adc_periph) &= ~((uint32_t)ADC_RSQ0_RL);\r\n    ADC_RSQ0(adc_periph) |= RSQ0_RL((uint32_t)(length - ADC_CHANNEL_LENGTH_SUBTRACT_ONE));\r\n    break;\r\n  case ADC_INSERTED_CHANNEL:\r\n    /* configure the length of inserted channel group */\r\n    ADC_ISQ(adc_periph) &= ~((uint32_t)ADC_ISQ_IL);\r\n    ADC_ISQ(adc_periph) |= ISQ_IL((uint32_t)(length - ADC_CHANNEL_LENGTH_SUBTRACT_ONE));\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure ADC regular channel\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  rank: the regular group sequence rank,this parameter must be between 0 to 15\r\n    \\param[in]  adc_channel: the selected ADC channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_CHANNEL_x(x=0..17)(x=16 and x=17 are only for ADC0): ADC Channelx\r\n    \\param[in]  sample_time: the sample time value\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_SAMPLETIME_1POINT5: 1.5 cycles\r\n      \\arg        ADC_SAMPLETIME_7POINT5: 7.5 cycles\r\n      \\arg        ADC_SAMPLETIME_13POINT5: 13.5 cycles\r\n      \\arg        ADC_SAMPLETIME_28POINT5: 28.5 cycles\r\n      \\arg        ADC_SAMPLETIME_41POINT5: 41.5 cycles\r\n      \\arg        ADC_SAMPLETIME_55POINT5: 55.5 cycles\r\n      \\arg        ADC_SAMPLETIME_71POINT5: 71.5 cycles\r\n      \\arg        ADC_SAMPLETIME_239POINT5: 239.5 cycles\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_regular_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t adc_channel, uint32_t sample_time) {\r\n  uint32_t rsq, sampt;\r\n\r\n  /* ADC regular sequence config */\r\n  if (rank < ADC_REGULAR_CHANNEL_RANK_SIX) {\r\n    /* the regular group sequence rank is smaller than six */\r\n    rsq = ADC_RSQ2(adc_periph);\r\n    rsq &= ~((uint32_t)(ADC_RSQX_RSQN << (ADC_REGULAR_CHANNEL_RANK_LENGTH * rank)));\r\n    /* the channel number is written to these bits to select a channel as the nth conversion in the regular channel group */\r\n    rsq |= ((uint32_t)adc_channel << (ADC_REGULAR_CHANNEL_RANK_LENGTH * rank));\r\n    ADC_RSQ2(adc_periph) = rsq;\r\n  } else if (rank < ADC_REGULAR_CHANNEL_RANK_TWELVE) {\r\n    /* the regular group sequence rank is smaller than twelve */\r\n    rsq = ADC_RSQ1(adc_periph);\r\n    rsq &= ~((uint32_t)(ADC_RSQX_RSQN << (ADC_REGULAR_CHANNEL_RANK_LENGTH * (rank - ADC_REGULAR_CHANNEL_RANK_SIX))));\r\n    /* the channel number is written to these bits to select a channel as the nth conversion in the regular channel group */\r\n    rsq |= ((uint32_t)adc_channel << (ADC_REGULAR_CHANNEL_RANK_LENGTH * (rank - ADC_REGULAR_CHANNEL_RANK_SIX)));\r\n    ADC_RSQ1(adc_periph) = rsq;\r\n  } else if (rank < ADC_REGULAR_CHANNEL_RANK_SIXTEEN) {\r\n    /* the regular group sequence rank is smaller than sixteen */\r\n    rsq = ADC_RSQ0(adc_periph);\r\n    rsq &= ~((uint32_t)(ADC_RSQX_RSQN << (ADC_REGULAR_CHANNEL_RANK_LENGTH * (rank - ADC_REGULAR_CHANNEL_RANK_TWELVE))));\r\n    /* the channel number is written to these bits to select a channel as the nth conversion in the regular channel group */\r\n    rsq |= ((uint32_t)adc_channel << (ADC_REGULAR_CHANNEL_RANK_LENGTH * (rank - ADC_REGULAR_CHANNEL_RANK_TWELVE)));\r\n    ADC_RSQ0(adc_periph) = rsq;\r\n  } else {\r\n  }\r\n\r\n  /* ADC sampling time config */\r\n  if (adc_channel < ADC_CHANNEL_SAMPLE_TEN) {\r\n    /* the regular group sequence rank is smaller than ten */\r\n    sampt = ADC_SAMPT1(adc_periph);\r\n    sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (ADC_CHANNEL_SAMPLE_LENGTH * adc_channel)));\r\n    /* channel sample time set*/\r\n    sampt |= (uint32_t)(sample_time << (ADC_CHANNEL_SAMPLE_LENGTH * adc_channel));\r\n    ADC_SAMPT1(adc_periph) = sampt;\r\n  } else if (adc_channel < ADC_CHANNEL_SAMPLE_EIGHTEEN) {\r\n    /* the regular group sequence rank is smaller than eighteen */\r\n    sampt = ADC_SAMPT0(adc_periph);\r\n    sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (ADC_CHANNEL_SAMPLE_LENGTH * (adc_channel - ADC_CHANNEL_SAMPLE_TEN))));\r\n    /* channel sample time set*/\r\n    sampt |= (uint32_t)(sample_time << (ADC_CHANNEL_SAMPLE_LENGTH * (adc_channel - ADC_CHANNEL_SAMPLE_TEN)));\r\n    ADC_SAMPT0(adc_periph) = sampt;\r\n  } else {\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure ADC inserted channel\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  rank: the inserted group sequencer rank,this parameter must be between 0 to 3\r\n    \\param[in]  adc_channel: the selected ADC channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_CHANNEL_x(x=0..17)(x=16 and x=17 are only for ADC0): ADC Channelx\r\n    \\param[in]  sample_time: The sample time value\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_SAMPLETIME_1POINT5: 1.5 cycles\r\n      \\arg        ADC_SAMPLETIME_7POINT5: 7.5 cycles\r\n      \\arg        ADC_SAMPLETIME_13POINT5: 13.5 cycles\r\n      \\arg        ADC_SAMPLETIME_28POINT5: 28.5 cycles\r\n      \\arg        ADC_SAMPLETIME_41POINT5: 41.5 cycles\r\n      \\arg        ADC_SAMPLETIME_55POINT5: 55.5 cycles\r\n      \\arg        ADC_SAMPLETIME_71POINT5: 71.5 cycles\r\n      \\arg        ADC_SAMPLETIME_239POINT5: 239.5 cycles\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_inserted_channel_config(uint32_t adc_periph, uint8_t rank, uint8_t adc_channel, uint32_t sample_time) {\r\n  uint8_t  inserted_length;\r\n  uint32_t isq, sampt;\r\n  /* get inserted channel group length */\r\n  inserted_length = (uint8_t)GET_BITS(ADC_ISQ(adc_periph), 20U, 21U);\r\n  /* the channel number is written to these bits to select a channel as the nth conversion in the inserted channel group */\r\n  isq = ADC_ISQ(adc_periph);\r\n  isq &= ~((uint32_t)(ADC_ISQ_ISQN << (ADC_INSERTED_CHANNEL_SHIFT_LENGTH - (inserted_length - rank) * ADC_INSERTED_CHANNEL_RANK_LENGTH)));\r\n  isq |= ((uint32_t)adc_channel << (ADC_INSERTED_CHANNEL_SHIFT_LENGTH - (inserted_length - rank) * ADC_INSERTED_CHANNEL_RANK_LENGTH));\r\n  ADC_ISQ(adc_periph) = isq;\r\n\r\n  /* ADC sampling time config */\r\n  if (adc_channel < ADC_CHANNEL_SAMPLE_TEN) {\r\n    /* the inserted group sequence rank is smaller than ten */\r\n    sampt = ADC_SAMPT1(adc_periph);\r\n    sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (ADC_CHANNEL_SAMPLE_LENGTH * adc_channel)));\r\n    /* channel sample time set*/\r\n    sampt |= (uint32_t)sample_time << (ADC_CHANNEL_SAMPLE_LENGTH * adc_channel);\r\n    ADC_SAMPT1(adc_periph) = sampt;\r\n  } else if (adc_channel < ADC_CHANNEL_SAMPLE_EIGHTEEN) {\r\n    /* the inserted group sequence rank is smaller than eighteen */\r\n    sampt = ADC_SAMPT0(adc_periph);\r\n    sampt &= ~((uint32_t)(ADC_SAMPTX_SPTN << (ADC_CHANNEL_SAMPLE_LENGTH * (adc_channel - ADC_CHANNEL_SAMPLE_TEN))));\r\n    /* channel sample time set*/\r\n    sampt |= ((uint32_t)sample_time << (ADC_CHANNEL_SAMPLE_LENGTH * (adc_channel - ADC_CHANNEL_SAMPLE_TEN)));\r\n    ADC_SAMPT0(adc_periph) = sampt;\r\n  } else {\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure ADC inserted channel offset\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  inserted_channel: insert channel select\r\n                only one parameter can be selected\r\n      \\arg        ADC_INSERTED_CHANNEL_0: inserted channel0\r\n      \\arg        ADC_INSERTED_CHANNEL_1: inserted channel1\r\n      \\arg        ADC_INSERTED_CHANNEL_2: inserted channel2\r\n      \\arg        ADC_INSERTED_CHANNEL_3: inserted channel3\r\n    \\param[in]  offset: the offset data\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_inserted_channel_offset_config(uint32_t adc_periph, uint8_t inserted_channel, uint16_t offset) {\r\n  uint8_t  inserted_length;\r\n  uint32_t num = 0U;\r\n\r\n  inserted_length = (uint8_t)GET_BITS(ADC_ISQ(adc_periph), 20U, 21U);\r\n  num             = ((uint32_t)ADC_OFFSET_LENGTH - ((uint32_t)inserted_length - (uint32_t)inserted_channel));\r\n\r\n  if (num <= ADC_OFFSET_LENGTH) {\r\n    /* calculate the offset of the register */\r\n    num = num * ADC_OFFSET_SHIFT_LENGTH;\r\n    /* config the offset of the selected channels */\r\n    REG32((adc_periph) + 0x14U + num) = IOFFX_IOFF((uint32_t)offset);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure ADC external trigger source\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  adc_channel_group: select the channel group\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_REGULAR_CHANNEL: regular channel group\r\n      \\arg        ADC_INSERTED_CHANNEL: inserted channel group\r\n    \\param[in]  external_trigger_source: regular or inserted group trigger source\r\n                only one parameter can be selected\r\n                for regular channel:\r\n      \\arg        ADC0_1_EXTTRIG_REGULAR_T0_CH0: TIMER0 CH0 event select\r\n      \\arg        ADC0_1_EXTTRIG_REGULAR_T0_CH1: TIMER0 CH1 event select\r\n      \\arg        ADC0_1_EXTTRIG_REGULAR_T0_CH2: TIMER0 CH2 event select\r\n      \\arg        ADC0_1_EXTTRIG_REGULAR_T1_CH1: TIMER1 CH1 event select\r\n      \\arg        ADC0_1_EXTTRIG_REGULAR_T2_TRGO: TIMER2 TRGO event select\r\n      \\arg        ADC0_1_EXTTRIG_REGULAR_T3_CH3: TIMER3 CH3 event select\r\n      \\arg        ADC0_1_EXTTRIG_REGULAR_EXTI_11: external interrupt line 11\r\n      \\arg        ADC0_1_EXTTRIG_REGULAR_NONE: software trigger\r\n                for inserted channel:\r\n      \\arg        ADC0_1_EXTTRIG_INSERTED_T0_TRGO: TIMER0 TRGO event select\r\n      \\arg        ADC0_1_EXTTRIG_INSERTED_T0_CH3: TIMER0 CH3 event select\r\n      \\arg        ADC0_1_EXTTRIG_INSERTED_T1_TRGO: TIMER1 TRGO event select\r\n      \\arg        ADC0_1_EXTTRIG_INSERTED_T1_CH0: TIMER1 CH0 event select\r\n      \\arg        ADC0_1_EXTTRIG_INSERTED_T2_CH3: TIMER2 CH3 event select\r\n      \\arg        ADC0_1_EXTTRIG_INSERTED_T3_TRGO: TIMER3 TRGO event select\r\n      \\arg        ADC0_1_EXTTRIG_INSERTED_EXTI_15: external interrupt line 15\r\n      \\arg        ADC0_1_EXTTRIG_INSERTED_NONE: software trigger\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_external_trigger_source_config(uint32_t adc_periph, uint8_t adc_channel_group, uint32_t external_trigger_source) {\r\n  switch (adc_channel_group) {\r\n  case ADC_REGULAR_CHANNEL:\r\n    /* configure ADC regular group external trigger source */\r\n    ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_ETSRC);\r\n    ADC_CTL1(adc_periph) |= (uint32_t)external_trigger_source;\r\n    break;\r\n  case ADC_INSERTED_CHANNEL:\r\n    /* configure ADC inserted group external trigger source */\r\n    ADC_CTL1(adc_periph) &= ~((uint32_t)ADC_CTL1_ETSIC);\r\n    ADC_CTL1(adc_periph) |= (uint32_t)external_trigger_source;\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure ADC external trigger\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  adc_channel_group: select the channel group\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        ADC_REGULAR_CHANNEL: regular channel group\r\n      \\arg        ADC_INSERTED_CHANNEL: inserted channel group\r\n    \\param[in]  newvalue: ENABLE or DISABLE\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_external_trigger_config(uint32_t adc_periph, uint8_t adc_channel_group, ControlStatus newvalue) {\r\n  if (newvalue) {\r\n    if (0U != (adc_channel_group & ADC_REGULAR_CHANNEL)) {\r\n      /* enable ADC regular channel group external trigger */\r\n      ADC_CTL1(adc_periph) |= ADC_CTL1_ETERC;\r\n    }\r\n    if (0U != (adc_channel_group & ADC_INSERTED_CHANNEL)) {\r\n      /* enable ADC inserted channel group external trigger */\r\n      ADC_CTL1(adc_periph) |= ADC_CTL1_ETEIC;\r\n    }\r\n  } else {\r\n    if (0U != (adc_channel_group & ADC_REGULAR_CHANNEL)) {\r\n      /* disable ADC regular channel group external trigger */\r\n      ADC_CTL1(adc_periph) &= ~ADC_CTL1_ETERC;\r\n    }\r\n    if (0U != (adc_channel_group & ADC_INSERTED_CHANNEL)) {\r\n      /* disable ADC regular channel group external trigger */\r\n      ADC_CTL1(adc_periph) &= ~ADC_CTL1_ETEIC;\r\n    }\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      enable ADC software trigger\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  adc_channel_group: select the channel group\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        ADC_REGULAR_CHANNEL: regular channel group\r\n      \\arg        ADC_INSERTED_CHANNEL: inserted channel group\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_software_trigger_enable(uint32_t adc_periph, uint8_t adc_channel_group) {\r\n  if (0U != (adc_channel_group & ADC_REGULAR_CHANNEL)) {\r\n    /* enable ADC regular channel group software trigger */\r\n    ADC_CTL1(adc_periph) |= ADC_CTL1_SWRCST;\r\n  }\r\n  if (0U != (adc_channel_group & ADC_INSERTED_CHANNEL)) {\r\n    /* enable ADC inserted channel group software trigger */\r\n    ADC_CTL1(adc_periph) |= ADC_CTL1_SWICST;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      read ADC regular group data register\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     the conversion value\r\n*/\r\nuint16_t adc_regular_data_read(uint32_t adc_periph) { return (uint16_t)(ADC_RDATA(adc_periph)); }\r\n\r\n/*!\r\n    \\brief      read ADC inserted group data register\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  inserted_channel: insert channel select\r\n                only one parameter can be selected\r\n      \\arg        ADC_INSERTED_CHANNEL_0: inserted Channel0\r\n      \\arg        ADC_INSERTED_CHANNEL_1: inserted channel1\r\n      \\arg        ADC_INSERTED_CHANNEL_2: inserted Channel2\r\n      \\arg        ADC_INSERTED_CHANNEL_3: inserted Channel3\r\n    \\param[out] none\r\n    \\retval     the conversion value\r\n*/\r\nuint16_t adc_inserted_data_read(uint32_t adc_periph, uint8_t inserted_channel) {\r\n  uint32_t idata;\r\n  /* read the data of the selected channel */\r\n  switch (inserted_channel) {\r\n  case ADC_INSERTED_CHANNEL_0:\r\n    /* read the data of channel 0 */\r\n    idata = ADC_IDATA0(adc_periph);\r\n    break;\r\n  case ADC_INSERTED_CHANNEL_1:\r\n    /* read the data of channel 1 */\r\n    idata = ADC_IDATA1(adc_periph);\r\n    break;\r\n  case ADC_INSERTED_CHANNEL_2:\r\n    /* read the data of channel 2 */\r\n    idata = ADC_IDATA2(adc_periph);\r\n    break;\r\n  case ADC_INSERTED_CHANNEL_3:\r\n    /* read the data of channel 3 */\r\n    idata = ADC_IDATA3(adc_periph);\r\n    break;\r\n  default:\r\n    idata = 0U;\r\n    break;\r\n  }\r\n  return (uint16_t)idata;\r\n}\r\n\r\n/*!\r\n    \\brief      read the last ADC0 and ADC1 conversion result data in sync mode\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     the conversion value\r\n*/\r\nuint32_t adc_sync_mode_convert_value_read(void) {\r\n  /* return conversion value */\r\n  return ADC_RDATA(ADC0);\r\n}\r\n\r\n/*!\r\n    \\brief      configure ADC analog watchdog single channel\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  adc_channel: the selected ADC channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_CHANNEL_x: ADC Channelx(x=0..17)(x=16 and x=17 are only for ADC0)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_watchdog_single_channel_enable(uint32_t adc_periph, uint8_t adc_channel) {\r\n  ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC | ADC_CTL0_WDCHSEL);\r\n  /* analog watchdog channel select */\r\n  ADC_CTL0(adc_periph) |= (uint32_t)adc_channel;\r\n  ADC_CTL0(adc_periph) |= (uint32_t)(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC);\r\n}\r\n\r\n/*!\r\n    \\brief      configure ADC analog watchdog group channel\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  adc_channel_group: the channel group use analog watchdog\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_REGULAR_CHANNEL: regular channel group\r\n      \\arg        ADC_INSERTED_CHANNEL: inserted channel group\r\n      \\arg        ADC_REGULAR_INSERTED_CHANNEL: both regular and inserted group\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_watchdog_group_channel_enable(uint32_t adc_periph, uint8_t adc_channel_group) {\r\n  ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC);\r\n  /* select the group */\r\n  switch (adc_channel_group) {\r\n  case ADC_REGULAR_CHANNEL:\r\n    /* regular channel analog watchdog enable */\r\n    ADC_CTL0(adc_periph) |= (uint32_t)ADC_CTL0_RWDEN;\r\n    break;\r\n  case ADC_INSERTED_CHANNEL:\r\n    /* inserted channel analog watchdog enable */\r\n    ADC_CTL0(adc_periph) |= (uint32_t)ADC_CTL0_IWDEN;\r\n    break;\r\n  case ADC_REGULAR_INSERTED_CHANNEL:\r\n    /* regular and inserted channel analog watchdog enable */\r\n    ADC_CTL0(adc_periph) |= (uint32_t)(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      disable ADC analog watchdog\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_watchdog_disable(uint32_t adc_periph) { ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC | ADC_CTL0_WDCHSEL); }\r\n\r\n/*!\r\n    \\brief      configure ADC analog watchdog threshold\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  low_threshold: analog watchdog low threshold, 0..4095\r\n    \\param[in]  high_threshold: analog watchdog high threshold, 0..4095\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_watchdog_threshold_config(uint32_t adc_periph, uint16_t low_threshold, uint16_t high_threshold) {\r\n  ADC_WDLT(adc_periph) = (uint32_t)WDLT_WDLT(low_threshold);\r\n  ADC_WDHT(adc_periph) = (uint32_t)WDHT_WDHT(high_threshold);\r\n}\r\n\r\n/*!\r\n    \\brief      get the ADC flag bits\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  adc_flag: the adc flag bits\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_FLAG_WDE: analog watchdog event flag\r\n      \\arg        ADC_FLAG_EOC: end of group conversion flag\r\n      \\arg        ADC_FLAG_EOIC: end of inserted group conversion flag\r\n      \\arg        ADC_FLAG_STIC: start flag of inserted channel group\r\n      \\arg        ADC_FLAG_STRC: start flag of regular channel group\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus adc_flag_get(uint32_t adc_periph, uint32_t adc_flag) {\r\n  FlagStatus reval = RESET;\r\n  if (ADC_STAT(adc_periph) & adc_flag) {\r\n    reval = SET;\r\n  }\r\n  return reval;\r\n}\r\n\r\n/*!\r\n    \\brief      clear the ADC flag bits\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  adc_flag: the adc flag bits\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        ADC_FLAG_WDE: analog watchdog event flag\r\n      \\arg        ADC_FLAG_EOC: end of group conversion flag\r\n      \\arg        ADC_FLAG_EOIC: end of inserted group conversion flag\r\n      \\arg        ADC_FLAG_STIC: start flag of inserted channel group\r\n      \\arg        ADC_FLAG_STRC: start flag of regular channel group\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_flag_clear(uint32_t adc_periph, uint32_t adc_flag) { ADC_STAT(adc_periph) &= ~((uint32_t)adc_flag); }\r\n\r\n/*!\r\n    \\brief      get the bit state of ADCx software start conversion\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus adc_regular_software_startconv_flag_get(uint32_t adc_periph) {\r\n  FlagStatus reval = RESET;\r\n  if ((uint32_t)RESET != (ADC_CTL1(adc_periph) & ADC_CTL1_SWRCST)) {\r\n    reval = SET;\r\n  }\r\n  return reval;\r\n}\r\n\r\n/*!\r\n    \\brief      get the bit state of ADCx software inserted channel start conversion\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus adc_inserted_software_startconv_flag_get(uint32_t adc_periph) {\r\n  FlagStatus reval = RESET;\r\n  if ((uint32_t)RESET != (ADC_CTL1(adc_periph) & ADC_CTL1_SWICST)) {\r\n    reval = SET;\r\n  }\r\n  return reval;\r\n}\r\n\r\n/*!\r\n    \\brief      get the ADC interrupt bits\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  adc_interrupt: the adc interrupt bits\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_INT_FLAG_WDE: analog watchdog interrupt\r\n      \\arg        ADC_INT_FLAG_EOC: end of group conversion interrupt\r\n      \\arg        ADC_INT_FLAG_EOIC: end of inserted group conversion interrupt\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus adc_interrupt_flag_get(uint32_t adc_periph, uint32_t adc_interrupt) {\r\n  FlagStatus interrupt_flag = RESET;\r\n  uint32_t   state;\r\n  /* check the interrupt bits */\r\n  switch (adc_interrupt) {\r\n  case ADC_INT_FLAG_WDE:\r\n    /* get the ADC analog watchdog interrupt bits */\r\n    state = ADC_STAT(adc_periph) & ADC_STAT_WDE;\r\n    if ((ADC_CTL0(adc_periph) & ADC_CTL0_WDEIE) && state) {\r\n      interrupt_flag = SET;\r\n    }\r\n    break;\r\n  case ADC_INT_FLAG_EOC:\r\n    /* get the ADC end of group conversion interrupt bits */\r\n    state = ADC_STAT(adc_periph) & ADC_STAT_EOC;\r\n    if ((ADC_CTL0(adc_periph) & ADC_CTL0_EOCIE) && state) {\r\n      interrupt_flag = SET;\r\n    }\r\n    break;\r\n  case ADC_INT_FLAG_EOIC:\r\n    /* get the ADC end of inserted group conversion interrupt bits */\r\n    state = ADC_STAT(adc_periph) & ADC_STAT_EOIC;\r\n    if ((ADC_CTL0(adc_periph) & ADC_CTL0_EOICIE) && state) {\r\n      interrupt_flag = SET;\r\n    }\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n  return interrupt_flag;\r\n}\r\n\r\n/*!\r\n    \\brief      clear the ADC flag\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  adc_interrupt: the adc status flag\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        ADC_INT_FLAG_WDE: analog watchdog interrupt\r\n      \\arg        ADC_INT_FLAG_EOC: end of group conversion interrupt\r\n      \\arg        ADC_INT_FLAG_EOIC: end of inserted group conversion interrupt\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_interrupt_flag_clear(uint32_t adc_periph, uint32_t adc_interrupt) { ADC_STAT(adc_periph) &= ~((uint32_t)adc_interrupt); }\r\n\r\n/*!\r\n    \\brief      enable ADC interrupt\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  adc_interrupt: the adc interrupt\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        ADC_INT_WDE: analog watchdog interrupt flag\r\n      \\arg        ADC_INT_EOC: end of group conversion interrupt flag\r\n      \\arg        ADC_INT_EOIC: end of inserted group conversion interrupt flag\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_interrupt_enable(uint32_t adc_periph, uint32_t adc_interrupt) {\r\n  /* enable ADC analog watchdog interrupt */\r\n  if (0U != (adc_interrupt & ADC_INT_WDE)) {\r\n    ADC_CTL0(adc_periph) |= (uint32_t)ADC_CTL0_WDEIE;\r\n  }\r\n  /* enable ADC end of group conversion interrupt */\r\n  if (0U != (adc_interrupt & ADC_INT_EOC)) {\r\n    ADC_CTL0(adc_periph) |= (uint32_t)ADC_CTL0_EOCIE;\r\n  }\r\n  /* enable ADC end of inserted group conversion interrupt */\r\n  if (0U != (adc_interrupt & ADC_INT_EOIC)) {\r\n    ADC_CTL0(adc_periph) |= (uint32_t)ADC_CTL0_EOICIE;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      disable ADC interrupt\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  adc_interrupt: the adc interrupt flag\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        ADC_INT_WDE: analog watchdog interrupt flag\r\n      \\arg        ADC_INT_EOC: end of group conversion interrupt flag\r\n      \\arg        ADC_INT_EOIC: end of inserted group conversion interrupt flag\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_interrupt_disable(uint32_t adc_periph, uint32_t adc_interrupt) {\r\n  /* disable ADC analog watchdog interrupt */\r\n  if (0U != (adc_interrupt & ADC_INT_WDE)) {\r\n    ADC_CTL0(adc_periph) &= ~(uint32_t)ADC_CTL0_WDEIE;\r\n  }\r\n  /* disable ADC end of group conversion interrupt */\r\n  if (0U != (adc_interrupt & ADC_INT_EOC)) {\r\n    ADC_CTL0(adc_periph) &= ~(uint32_t)ADC_CTL0_EOCIE;\r\n  }\r\n  /* disable ADC end of inserted group conversion interrupt */\r\n  if (0U != (adc_interrupt & ADC_INT_EOIC)) {\r\n    ADC_CTL0(adc_periph) &= ~(uint32_t)ADC_CTL0_EOICIE;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      adc resolution config\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  resolution: ADC resolution\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_RESOLUTION_12B: 12-bit ADC resolution\r\n      \\arg        ADC_RESOLUTION_10B: 10-bit ADC resolution\r\n      \\arg        ADC_RESOLUTION_8B: 8-bit ADC resolution\r\n      \\arg        ADC_RESOLUTION_6B: 6-bit ADC resolution\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_resolution_config(uint32_t adc_periph, uint32_t resolution) {\r\n  ADC_OVSCR(adc_periph) &= ~((uint32_t)ADC_OVSCR_DRES);\r\n  ADC_OVSCR(adc_periph) |= (uint32_t)resolution;\r\n}\r\n\r\n/*!\r\n    \\brief      adc oversample mode config\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[in]  mode: ADC oversampling mode\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_OVERSAMPLING_ALL_CONVERT: all oversampled conversions for a channel\r\n                are done consecutively after a trigger\r\n      \\arg        ADC_OVERSAMPLING_ONE_CONVERT: each oversampled conversion for a channel\r\n                needs a trigger\r\n    \\param[in]  shift: ADC oversampling shift\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_OVERSAMPLING_SHIFT_NONE: no oversampling shift\r\n      \\arg        ADC_OVERSAMPLING_SHIFT_1B: 1-bit oversampling shift\r\n      \\arg        ADC_OVERSAMPLING_SHIFT_2B: 2-bit oversampling shift\r\n      \\arg        ADC_OVERSAMPLING_SHIFT_3B: 3-bit oversampling shift\r\n      \\arg        ADC_OVERSAMPLING_SHIFT_4B: 3-bit oversampling shift\r\n      \\arg        ADC_OVERSAMPLING_SHIFT_5B: 5-bit oversampling shift\r\n      \\arg        ADC_OVERSAMPLING_SHIFT_6B: 6-bit oversampling shift\r\n      \\arg        ADC_OVERSAMPLING_SHIFT_7B: 7-bit oversampling shift\r\n      \\arg        ADC_OVERSAMPLING_SHIFT_8B: 8-bit oversampling shift\r\n    \\param[in]  ratio: ADC oversampling ratio\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        ADC_OVERSAMPLING_RATIO_MUL2: oversampling ratio X2\r\n      \\arg        ADC_OVERSAMPLING_RATIO_MUL4: oversampling ratio X4\r\n      \\arg        ADC_OVERSAMPLING_RATIO_MUL8: oversampling ratio X8\r\n      \\arg        ADC_OVERSAMPLING_RATIO_MUL16: oversampling ratio X16\r\n      \\arg        ADC_OVERSAMPLING_RATIO_MUL32: oversampling ratio X32\r\n      \\arg        ADC_OVERSAMPLING_RATIO_MUL64: oversampling ratio X64\r\n      \\arg        ADC_OVERSAMPLING_RATIO_MUL128: oversampling ratio X128\r\n      \\arg        ADC_OVERSAMPLING_RATIO_MUL256: oversampling ratio X256\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_oversample_mode_config(uint32_t adc_periph, uint8_t mode, uint16_t shift, uint8_t ratio) {\r\n  if (mode) {\r\n    ADC_OVSCR(adc_periph) |= (uint32_t)ADC_OVSCR_TOVS;\r\n  } else {\r\n    ADC_OVSCR(adc_periph) &= ~((uint32_t)ADC_OVSCR_TOVS);\r\n  }\r\n  /* config the shift and ratio */\r\n  ADC_OVSCR(adc_periph) &= ~((uint32_t)(ADC_OVSCR_OVSR | ADC_OVSCR_OVSS));\r\n  ADC_OVSCR(adc_periph) |= ((uint32_t)shift | (uint32_t)ratio);\r\n}\r\n\r\n/*!\r\n    \\brief      enable ADC oversample mode\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_oversample_mode_enable(uint32_t adc_periph) { ADC_OVSCR(adc_periph) |= ADC_OVSCR_OVSEN; }\r\n\r\n/*!\r\n    \\brief      disable ADC oversample mode\r\n    \\param[in]  adc_periph: ADCx, x=0,1\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid adc_oversample_mode_disable(uint32_t adc_periph) { ADC_OVSCR(adc_periph) &= ~((uint32_t)ADC_OVSCR_OVSEN); }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_bkp.c",
    "content": "/*!\r\n    \\file    gd32vf103_bkp.c\r\n    \\brief   BKP driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_bkp.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n/* BKP register bits offset */\r\n#define BKP_TAMPER_BITS_OFFSET ((uint32_t)8U)\r\n\r\n/*!\r\n    \\brief      reset BKP registers\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid bkp_deinit(void) { /* reset BKP domain register*/ }\r\n\r\n/*!\r\n    \\brief      write BKP data register\r\n    \\param[in]  register_number: refer to bkp_data_register_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        BKP_DATA_x(x = 0..41): bkp data register number x\r\n    \\param[in]  data: the data to be write in BKP data register\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid bkp_data_write(bkp_data_register_enum register_number, uint16_t data) {\r\n  if ((register_number >= BKP_DATA_10) && (register_number <= BKP_DATA_41)) {\r\n    BKP_DATA10_41((uint32_t)register_number - 1U) = data;\r\n  } else if ((register_number >= BKP_DATA_0) && (register_number <= BKP_DATA_9)) {\r\n    BKP_DATA0_9((uint32_t)register_number - 1U) = data;\r\n  } else {\r\n    /* illegal parameters */\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      read BKP data register\r\n    \\param[in]  register_number: refer to bkp_data_register_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        BKP_DATA_x(x = 0..41): bkp data register number x\r\n    \\param[out] none\r\n    \\retval     data of BKP data register\r\n*/\r\nuint16_t bkp_data_read(bkp_data_register_enum register_number) {\r\n  uint16_t data = 0U;\r\n\r\n  /* get the data from the BKP data register */\r\n  if ((register_number >= BKP_DATA_10) && (register_number <= BKP_DATA_41)) {\r\n    data = BKP_DATA10_41((uint32_t)register_number - 1U);\r\n  } else if ((register_number >= BKP_DATA_0) && (register_number <= BKP_DATA_9)) {\r\n    data = BKP_DATA0_9((uint32_t)register_number - 1U);\r\n  } else {\r\n    /* illegal parameters */\r\n  }\r\n  return data;\r\n}\r\n\r\n/*!\r\n    \\brief      enable RTC clock calibration output\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid bkp_rtc_calibration_output_enable(void) { BKP_OCTL |= (uint16_t)BKP_OCTL_COEN; }\r\n\r\n/*!\r\n    \\brief      disable RTC clock calibration output\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid bkp_rtc_calibration_output_disable(void) { BKP_OCTL &= (uint16_t)~BKP_OCTL_COEN; }\r\n\r\n/*!\r\n    \\brief      enable RTC alarm or second signal output\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid bkp_rtc_signal_output_enable(void) { BKP_OCTL |= (uint16_t)BKP_OCTL_ASOEN; }\r\n\r\n/*!\r\n    \\brief      disable RTC alarm or second signal output\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid bkp_rtc_signal_output_disable(void) { BKP_OCTL &= (uint16_t)~BKP_OCTL_ASOEN; }\r\n\r\n/*!\r\n    \\brief      select RTC output\r\n    \\param[in]  outputsel: RTC output selection\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RTC_OUTPUT_ALARM_PULSE: RTC alarm pulse is selected as the RTC output\r\n      \\arg        RTC_OUTPUT_SECOND_PULSE: RTC second pulse is selected as the RTC output\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid bkp_rtc_output_select(uint16_t outputsel) {\r\n  uint16_t ctl = 0U;\r\n\r\n  /* configure BKP_OCTL_ROSEL with outputsel */\r\n  ctl = BKP_OCTL;\r\n  ctl &= (uint16_t)~BKP_OCTL_ROSEL;\r\n  ctl |= outputsel;\r\n  BKP_OCTL = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      set RTC clock calibration value\r\n    \\param[in]  value: RTC clock calibration value\r\n      \\arg        0x00 - 0x7F\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid bkp_rtc_calibration_value_set(uint8_t value) {\r\n  uint16_t ctl;\r\n\r\n  /* configure BKP_OCTL_RCCV with value */\r\n  ctl = BKP_OCTL;\r\n  ctl &= (uint16_t)~BKP_OCTL_RCCV;\r\n  ctl |= (uint16_t)OCTL_RCCV(value);\r\n  BKP_OCTL = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      enable tamper detection\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid bkp_tamper_detection_enable(void) { BKP_TPCTL |= (uint16_t)BKP_TPCTL_TPEN; }\r\n\r\n/*!\r\n    \\brief      disable tamper detection\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid bkp_tamper_detection_disable(void) { BKP_TPCTL &= (uint16_t)~BKP_TPCTL_TPEN; }\r\n\r\n/*!\r\n    \\brief      set tamper pin active level\r\n    \\param[in]  level: tamper active level\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TAMPER_PIN_ACTIVE_HIGH: the tamper pin is active high\r\n      \\arg        TAMPER_PIN_ACTIVE_LOW: the tamper pin is active low\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid bkp_tamper_active_level_set(uint16_t level) {\r\n  uint16_t ctl = 0U;\r\n\r\n  /* configure BKP_TPCTL_TPAL with level */\r\n  ctl = BKP_TPCTL;\r\n  ctl &= (uint16_t)~BKP_TPCTL_TPAL;\r\n  ctl |= level;\r\n  BKP_TPCTL = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      enable tamper interrupt\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid bkp_interrupt_enable(void) { BKP_TPCS |= (uint16_t)BKP_TPCS_TPIE; }\r\n\r\n/*!\r\n    \\brief      disable tamper interrupt\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid bkp_interrupt_disable(void) { BKP_TPCS &= (uint16_t)~BKP_TPCS_TPIE; }\r\n\r\n/*!\r\n    \\brief      get tamper flag state\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus bkp_flag_get(void) {\r\n  if (BKP_TPCS & BKP_FLAG_TAMPER) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear tamper flag state\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid bkp_flag_clear(void) { BKP_TPCS |= (uint16_t)(BKP_FLAG_TAMPER >> BKP_TAMPER_BITS_OFFSET); }\r\n\r\n/*!\r\n    \\brief      get tamper interrupt flag state\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus bkp_interrupt_flag_get(void) {\r\n  if (BKP_TPCS & BKP_INT_FLAG_TAMPER) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear tamper interrupt flag state\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid bkp_interrupt_flag_clear(void) { BKP_TPCS |= (uint16_t)(BKP_INT_FLAG_TAMPER >> BKP_TAMPER_BITS_OFFSET); }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_crc.c",
    "content": "/*!\r\n    \\file    gd32vf103_crc.c\r\n    \\brief   CRC driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_crc.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n#define CRC_DATA_RESET_VALUE  ((uint32_t)0xFFFFFFFFU)\r\n#define CRC_FDATA_RESET_VALUE ((uint32_t)0x00000000U)\r\n\r\n/*!\r\n    \\brief      deinit CRC calculation unit\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid crc_deinit(void) {\r\n  CRC_DATA  = CRC_DATA_RESET_VALUE;\r\n  CRC_FDATA = CRC_FDATA_RESET_VALUE;\r\n  CRC_CTL   = (uint32_t)CRC_CTL_RST;\r\n}\r\n\r\n/*!\r\n    \\brief      reset data register(CRC_DATA) to the value of 0xFFFFFFFF\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid crc_data_register_reset(void) { CRC_CTL |= (uint32_t)CRC_CTL_RST; }\r\n\r\n/*!\r\n    \\brief      read the value of the data register\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     32-bit value of the data register\r\n*/\r\nuint32_t crc_data_register_read(void) {\r\n  uint32_t data;\r\n  data = CRC_DATA;\r\n  return (data);\r\n}\r\n\r\n/*!\r\n    \\brief      read the value of the free data register\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     8-bit value of the free data register\r\n*/\r\nuint8_t crc_free_data_register_read(void) {\r\n  uint8_t fdata;\r\n  fdata = (uint8_t)CRC_FDATA;\r\n  return (fdata);\r\n}\r\n\r\n/*!\r\n    \\brief      write data to the free data register\r\n    \\param[in]  free_data: specified 8-bit data\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid crc_free_data_register_write(uint8_t free_data) { CRC_FDATA = (uint32_t)free_data; }\r\n\r\n/*!\r\n    \\brief      calculate the CRC value of a 32-bit data\r\n    \\param[in]  sdata: specified 32-bit data\r\n    \\param[out] none\r\n    \\retval     32-bit value calculated by CRC\r\n*/\r\nuint32_t crc_single_data_calculate(uint32_t sdata) {\r\n  CRC_DATA = sdata;\r\n  return (CRC_DATA);\r\n}\r\n\r\n/*!\r\n    \\brief      calculate the CRC value of an array of 32-bit values\r\n    \\param[in]  array: pointer to an array of 32-bit values\r\n    \\param[in]  size: size of the array\r\n    \\param[out] none\r\n    \\retval     32-bit value calculated by CRC\r\n*/\r\nuint32_t crc_block_data_calculate(uint32_t array[], uint32_t size) {\r\n  uint32_t index;\r\n  for (index = 0U; index < size; index++) {\r\n    CRC_DATA = array[index];\r\n  }\r\n  return (CRC_DATA);\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_dac.c",
    "content": "/*!\r\n    \\file    gd32vf103_dac.c\r\n    \\brief   DAC driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_dac.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n/* DAC register bit offset */\r\n#define DAC1_REG_OFFSET ((uint32_t)16U)\r\n#define DH_12BIT_OFFSET ((uint32_t)16U)\r\n#define DH_8BIT_OFFSET  ((uint32_t)8U)\r\n\r\n/*!\r\n    \\brief      deinitialize DAC\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_deinit(void) {\r\n  rcu_periph_reset_enable(RCU_DACRST);\r\n  rcu_periph_reset_disable(RCU_DACRST);\r\n}\r\n\r\n/*!\r\n    \\brief      enable DAC\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_enable(uint32_t dac_periph) {\r\n  if (DAC0 == dac_periph) {\r\n    DAC_CTL |= DAC_CTL_DEN0;\r\n  } else {\r\n    DAC_CTL |= DAC_CTL_DEN1;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      disable DAC\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_disable(uint32_t dac_periph) {\r\n  if (DAC0 == dac_periph) {\r\n    DAC_CTL &= ~DAC_CTL_DEN0;\r\n  } else {\r\n    DAC_CTL &= ~DAC_CTL_DEN1;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      enable DAC DMA function\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_dma_enable(uint32_t dac_periph) {\r\n  if (DAC0 == dac_periph) {\r\n    DAC_CTL |= DAC_CTL_DDMAEN0;\r\n  } else {\r\n    DAC_CTL |= DAC_CTL_DDMAEN1;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      disable DAC DMA function\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_dma_disable(uint32_t dac_periph) {\r\n  if (DAC0 == dac_periph) {\r\n    DAC_CTL &= ~DAC_CTL_DDMAEN0;\r\n  } else {\r\n    DAC_CTL &= ~DAC_CTL_DDMAEN1;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      enable DAC output buffer\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_output_buffer_enable(uint32_t dac_periph) {\r\n  if (DAC0 == dac_periph) {\r\n    DAC_CTL &= ~DAC_CTL_DBOFF0;\r\n  } else {\r\n    DAC_CTL &= ~DAC_CTL_DBOFF1;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      disable DAC output buffer\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_output_buffer_disable(uint32_t dac_periph) {\r\n  if (DAC0 == dac_periph) {\r\n    DAC_CTL |= DAC_CTL_DBOFF0;\r\n  } else {\r\n    DAC_CTL |= DAC_CTL_DBOFF1;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      get DAC output value\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\param[out] none\r\n    \\retval     DAC output data\r\n*/\r\nuint16_t dac_output_value_get(uint32_t dac_periph) {\r\n  uint16_t data = 0U;\r\n  if (DAC0 == dac_periph) {\r\n    /* store the DAC0 output value */\r\n    data = (uint16_t)DAC0_DO;\r\n  } else {\r\n    /* store the DAC1 output value */\r\n    data = (uint16_t)DAC1_DO;\r\n  }\r\n  return data;\r\n}\r\n\r\n/*!\r\n    \\brief      set the DAC specified data holding register value\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\param[in]  dac_align: data alignment\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DAC_ALIGN_8B_R: data right 8 bit alignment\r\n      \\arg        DAC_ALIGN_12B_R: data right 12 bit alignment\r\n      \\arg        DAC_ALIGN_12B_L: data left 12 bit alignment\r\n    \\param[in]  data: data to be loaded\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_data_set(uint32_t dac_periph, uint32_t dac_align, uint16_t data) {\r\n  if (DAC0 == dac_periph) {\r\n    switch (dac_align) {\r\n    /* data right 12 bit alignment */\r\n    case DAC_ALIGN_12B_R:\r\n      DAC0_R12DH = data;\r\n      break;\r\n    /* data left 12 bit alignment */\r\n    case DAC_ALIGN_12B_L:\r\n      DAC0_L12DH = data;\r\n      break;\r\n    /* data right 8 bit alignment */\r\n    case DAC_ALIGN_8B_R:\r\n      DAC0_R8DH = data;\r\n      break;\r\n    default:\r\n      break;\r\n    }\r\n  } else {\r\n    switch (dac_align) {\r\n    /* data right 12 bit alignment */\r\n    case DAC_ALIGN_12B_R:\r\n      DAC1_R12DH = data;\r\n      break;\r\n    /* data left 12 bit alignment */\r\n    case DAC_ALIGN_12B_L:\r\n      DAC1_L12DH = data;\r\n      break;\r\n    /* data right 8 bit alignment */\r\n    case DAC_ALIGN_8B_R:\r\n      DAC1_R8DH = data;\r\n      break;\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      enable DAC trigger\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_trigger_enable(uint32_t dac_periph) {\r\n  if (DAC0 == dac_periph) {\r\n    DAC_CTL |= DAC_CTL_DTEN0;\r\n  } else {\r\n    DAC_CTL |= DAC_CTL_DTEN1;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      disable DAC trigger\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_trigger_disable(uint32_t dac_periph) {\r\n  if (DAC0 == dac_periph) {\r\n    DAC_CTL &= ~DAC_CTL_DTEN0;\r\n  } else {\r\n    DAC_CTL &= ~DAC_CTL_DTEN1;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      set DAC trigger source\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\param[in]  triggersource: external triggers of DAC\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DAC_TRIGGER_T1_TRGO: TIMER1 TRGO\r\n      \\arg        DAC_TRIGGER_T2_TRGO: TIMER2 TRGO\r\n      \\arg        DAC_TRIGGER_T3_TRGO: TIMER3 TRGO\r\n      \\arg        DAC_TRIGGER_T4_TRGO: TIMER4 TRGO\r\n      \\arg        DAC_TRIGGER_T5_TRGO: TIMER5 TRGO\r\n      \\arg        DAC_TRIGGER_T6_TRGO: TIMER6 TRGO\r\n      \\arg        DAC_TRIGGER_EXTI_9: EXTI interrupt line9 event\r\n      \\arg        DAC_TRIGGER_SOFTWARE: software trigger\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_trigger_source_config(uint32_t dac_periph, uint32_t triggersource) {\r\n  if (DAC0 == dac_periph) {\r\n    /* configure DAC0 trigger source */\r\n    DAC_CTL &= ~DAC_CTL_DTSEL0;\r\n    DAC_CTL |= triggersource;\r\n  } else {\r\n    /* configure DAC1 trigger source */\r\n    DAC_CTL &= ~DAC_CTL_DTSEL1;\r\n    DAC_CTL |= (triggersource << DAC1_REG_OFFSET);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      enable DAC software trigger\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\retval     none\r\n*/\r\nvoid dac_software_trigger_enable(uint32_t dac_periph) {\r\n  if (DAC0 == dac_periph) {\r\n    DAC_SWT |= DAC_SWT_SWTR0;\r\n  } else {\r\n    DAC_SWT |= DAC_SWT_SWTR1;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      disable DAC software trigger\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_software_trigger_disable(uint32_t dac_periph) {\r\n  if (DAC0 == dac_periph) {\r\n    DAC_SWT &= ~DAC_SWT_SWTR0;\r\n  } else {\r\n    DAC_SWT &= ~DAC_SWT_SWTR1;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure DAC wave mode\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\param[in]  wave_mode: noise wave mode\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DAC_WAVE_DISABLE: wave disable\r\n      \\arg        DAC_WAVE_MODE_LFSR: LFSR noise mode\r\n      \\arg        DAC_WAVE_MODE_TRIANGLE: triangle noise mode\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_wave_mode_config(uint32_t dac_periph, uint32_t wave_mode) {\r\n  if (DAC0 == dac_periph) {\r\n    /* configure DAC0 wave mode */\r\n    DAC_CTL &= ~DAC_CTL_DWM0;\r\n    DAC_CTL |= wave_mode;\r\n  } else {\r\n    /* configure DAC1 wave mode */\r\n    DAC_CTL &= ~DAC_CTL_DWM1;\r\n    DAC_CTL |= (wave_mode << DAC1_REG_OFFSET);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure DAC wave bit width\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\param[in]  bit_width: noise wave bit width\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DAC_WAVE_BIT_WIDTH_1: bit width of the wave signal is 1\r\n      \\arg        DAC_WAVE_BIT_WIDTH_2: bit width of the wave signal is 2\r\n      \\arg        DAC_WAVE_BIT_WIDTH_3: bit width of the wave signal is 3\r\n      \\arg        DAC_WAVE_BIT_WIDTH_4: bit width of the wave signal is 4\r\n      \\arg        DAC_WAVE_BIT_WIDTH_5: bit width of the wave signal is 5\r\n      \\arg        DAC_WAVE_BIT_WIDTH_6: bit width of the wave signal is 6\r\n      \\arg        DAC_WAVE_BIT_WIDTH_7: bit width of the wave signal is 7\r\n      \\arg        DAC_WAVE_BIT_WIDTH_8: bit width of the wave signal is 8\r\n      \\arg        DAC_WAVE_BIT_WIDTH_9: bit width of the wave signal is 9\r\n      \\arg        DAC_WAVE_BIT_WIDTH_10: bit width of the wave signal is 10\r\n      \\arg        DAC_WAVE_BIT_WIDTH_11: bit width of the wave signal is 11\r\n      \\arg        DAC_WAVE_BIT_WIDTH_12: bit width of the wave signal is 12\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_wave_bit_width_config(uint32_t dac_periph, uint32_t bit_width) {\r\n  if (DAC0 == dac_periph) {\r\n    /* configure DAC0 wave bit width */\r\n    DAC_CTL &= ~DAC_CTL_DWBW0;\r\n    DAC_CTL |= bit_width;\r\n  } else {\r\n    /* configure DAC1 wave bit width */\r\n    DAC_CTL &= ~DAC_CTL_DWBW1;\r\n    DAC_CTL |= (bit_width << DAC1_REG_OFFSET);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure DAC LFSR noise mode\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\param[in]  unmask_bits: unmask LFSR bits in DAC LFSR noise mode\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DAC_LFSR_BIT0: unmask the LFSR bit0\r\n      \\arg        DAC_LFSR_BITS1_0: unmask the LFSR bits[1:0]\r\n      \\arg        DAC_LFSR_BITS2_0: unmask the LFSR bits[2:0]\r\n      \\arg        DAC_LFSR_BITS3_0: unmask the LFSR bits[3:0]\r\n      \\arg        DAC_LFSR_BITS4_0: unmask the LFSR bits[4:0]\r\n      \\arg        DAC_LFSR_BITS5_0: unmask the LFSR bits[5:0]\r\n      \\arg        DAC_LFSR_BITS6_0: unmask the LFSR bits[6:0]\r\n      \\arg        DAC_LFSR_BITS7_0: unmask the LFSR bits[7:0]\r\n      \\arg        DAC_LFSR_BITS8_0: unmask the LFSR bits[8:0]\r\n      \\arg        DAC_LFSR_BITS9_0: unmask the LFSR bits[9:0]\r\n      \\arg        DAC_LFSR_BITS10_0: unmask the LFSR bits[10:0]\r\n      \\arg        DAC_LFSR_BITS11_0: unmask the LFSR bits[11:0]\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_lfsr_noise_config(uint32_t dac_periph, uint32_t unmask_bits) {\r\n  if (DAC0 == dac_periph) {\r\n    /* configure DAC0 LFSR noise mode */\r\n    DAC_CTL &= ~DAC_CTL_DWBW0;\r\n    DAC_CTL |= unmask_bits;\r\n  } else {\r\n    /* configure DAC1 LFSR noise mode */\r\n    DAC_CTL &= ~DAC_CTL_DWBW1;\r\n    DAC_CTL |= (unmask_bits << DAC1_REG_OFFSET);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure DAC triangle noise mode\r\n    \\param[in]  dac_periph: DACx(x = 0,1)\r\n    \\param[in]  amplitude: triangle amplitude in DAC triangle noise mode\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DAC_TRIANGLE_AMPLITUDE_1: triangle amplitude is 1\r\n      \\arg        DAC_TRIANGLE_AMPLITUDE_3: triangle amplitude is 3\r\n      \\arg        DAC_TRIANGLE_AMPLITUDE_7: triangle amplitude is 7\r\n      \\arg        DAC_TRIANGLE_AMPLITUDE_15: triangle amplitude is 15\r\n      \\arg        DAC_TRIANGLE_AMPLITUDE_31: triangle amplitude is 31\r\n      \\arg        DAC_TRIANGLE_AMPLITUDE_63: triangle amplitude is 63\r\n      \\arg        DAC_TRIANGLE_AMPLITUDE_127: triangle amplitude is 127\r\n      \\arg        DAC_TRIANGLE_AMPLITUDE_255: triangle amplitude is 255\r\n      \\arg        DAC_TRIANGLE_AMPLITUDE_511: triangle amplitude is 511\r\n      \\arg        DAC_TRIANGLE_AMPLITUDE_1023: triangle amplitude is 1023\r\n      \\arg        DAC_TRIANGLE_AMPLITUDE_2047: triangle amplitude is 2047\r\n      \\arg        DAC_TRIANGLE_AMPLITUDE_4095: triangle amplitude is 4095\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_triangle_noise_config(uint32_t dac_periph, uint32_t amplitude) {\r\n  if (DAC0 == dac_periph) {\r\n    /* configure DAC0 triangle noise mode */\r\n    DAC_CTL &= ~DAC_CTL_DWBW0;\r\n    DAC_CTL |= amplitude;\r\n  } else {\r\n    /* configure DAC1 triangle noise mode */\r\n    DAC_CTL &= ~DAC_CTL_DWBW1;\r\n    DAC_CTL |= (amplitude << DAC1_REG_OFFSET);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      enable DAC concurrent mode\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_concurrent_enable(void) {\r\n  uint32_t ctl = 0U;\r\n  ctl          = DAC_CTL_DEN0 | DAC_CTL_DEN1;\r\n  DAC_CTL |= (ctl);\r\n}\r\n\r\n/*!\r\n    \\brief      disable DAC concurrent mode\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_concurrent_disable(void) {\r\n  uint32_t ctl = 0U;\r\n  ctl          = DAC_CTL_DEN0 | DAC_CTL_DEN1;\r\n  DAC_CTL &= (~ctl);\r\n}\r\n\r\n/*!\r\n    \\brief      enable DAC concurrent software trigger function\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_concurrent_software_trigger_enable(void) {\r\n  uint32_t swt = 0U;\r\n  swt          = DAC_SWT_SWTR0 | DAC_SWT_SWTR1;\r\n  DAC_SWT |= (swt);\r\n}\r\n\r\n/*!\r\n    \\brief      disable DAC concurrent software trigger function\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_concurrent_software_trigger_disable(void) {\r\n  uint32_t swt = 0U;\r\n  swt          = DAC_SWT_SWTR0 | DAC_SWT_SWTR1;\r\n  DAC_SWT &= (~swt);\r\n}\r\n\r\n/*!\r\n    \\brief      enable DAC concurrent buffer function\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_concurrent_output_buffer_enable(void) {\r\n  uint32_t ctl = 0U;\r\n  ctl          = DAC_CTL_DBOFF0 | DAC_CTL_DBOFF1;\r\n  DAC_CTL &= (~ctl);\r\n}\r\n\r\n/*!\r\n    \\brief      disable DAC concurrent buffer function\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_concurrent_output_buffer_disable(void) {\r\n  uint32_t ctl = 0U;\r\n  ctl          = DAC_CTL_DBOFF0 | DAC_CTL_DBOFF1;\r\n  DAC_CTL |= (ctl);\r\n}\r\n\r\n/*!\r\n    \\brief      set DAC concurrent mode data holding register value\r\n    \\param[in]  dac_align: data alignment\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DAC_ALIGN_8B_R: data right 8b alignment\r\n      \\arg        DAC_ALIGN_12B_R: data right 12b alignment\r\n      \\arg        DAC_ALIGN_12B_L: data left 12b alignment\r\n    \\param[in]  data0: data to be loaded\r\n    \\param[in]  data1: data to be loaded\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dac_concurrent_data_set(uint32_t dac_align, uint16_t data0, uint16_t data1) {\r\n  uint32_t data = 0U;\r\n  switch (dac_align) {\r\n  /* data right 12b alignment */\r\n  case DAC_ALIGN_12B_R:\r\n    data       = ((uint32_t)data1 << DH_12BIT_OFFSET) | data0;\r\n    DACC_R12DH = data;\r\n    break;\r\n  /* data left 12b alignment */\r\n  case DAC_ALIGN_12B_L:\r\n    data       = ((uint32_t)data1 << DH_12BIT_OFFSET) | data0;\r\n    DACC_L12DH = data;\r\n    break;\r\n  /* data right 8b alignment */\r\n  case DAC_ALIGN_8B_R:\r\n    data      = ((uint32_t)data1 << DH_8BIT_OFFSET) | data0;\r\n    DACC_R8DH = data;\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_dbg.c",
    "content": "/*!\r\n    \\file    gd32vf103_dbg.c\r\n    \\brief   DBG driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_dbg.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n/*!\r\n    \\brief      read DBG_ID code register\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     DBG_ID code\r\n*/\r\nuint32_t dbg_id_get(void) { return DBG_ID; }\r\n\r\n/*!\r\n    \\brief      enable low power behavior when the mcu is in debug mode\r\n    \\param[in]  dbg_low_power:\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        DBG_LOW_POWER_SLEEP: keep debugger connection during sleep mode\r\n      \\arg        DBG_LOW_POWER_DEEPSLEEP: keep debugger connection during deepsleep mode\r\n      \\arg        DBG_LOW_POWER_STANDBY: keep debugger connection during standby mode\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dbg_low_power_enable(uint32_t dbg_low_power) { DBG_CTL |= dbg_low_power; }\r\n\r\n/*!\r\n    \\brief      disable low power behavior when the mcu is in debug mode\r\n    \\param[in]  dbg_low_power:\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        DBG_LOW_POWER_SLEEP: donot keep debugger connection during sleep mode\r\n      \\arg        DBG_LOW_POWER_DEEPSLEEP: donot keep debugger connection during deepsleep mode\r\n      \\arg        DBG_LOW_POWER_STANDBY: donot keep debugger connection during standby mode\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dbg_low_power_disable(uint32_t dbg_low_power) { DBG_CTL &= ~dbg_low_power; }\r\n\r\n/*!\r\n    \\brief      enable peripheral behavior when the mcu is in debug mode\r\n    \\param[in]  dbg_periph: refer to dbg_periph_enum\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        DBG_FWDGT_HOLD : debug FWDGT kept when core is halted\r\n      \\arg        DBG_WWDGT_HOLD : debug WWDGT kept when core is halted\r\n      \\arg        DBG_CANx_HOLD (x=0,1): hold CANx counter when core is halted\r\n      \\arg        DBG_I2Cx_HOLD (x=0,1): hold I2Cx smbus when core is halted\r\n      \\arg        DBG_TIMERx_HOLD (x=0,1,2,3,4,5,6): hold TIMERx counter when core is halted\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dbg_periph_enable(dbg_periph_enum dbg_periph) { DBG_CTL |= (uint32_t)dbg_periph; }\r\n\r\n/*!\r\n    \\brief      disable peripheral behavior when the mcu is in debug mode\r\n    \\param[in]  dbg_periph: refer to dbg_periph_enum\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        DBG_FWDGT_HOLD : debug FWDGT kept when core is halted\r\n      \\arg        DBG_WWDGT_HOLD : debug WWDGT kept when core is halted\r\n      \\arg        DBG_CANx_HOLD (x=0,1): hold CAN0 counter when core is halted\r\n      \\arg        DBG_I2Cx_HOLD (x=0,1): hold I2Cx smbus when core is halted\r\n      \\arg        DBG_TIMERx_HOLD (x=0,1,2,3,4,5,6): hold TIMERx counter when core is halted\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dbg_periph_disable(dbg_periph_enum dbg_periph) { DBG_CTL &= ~(uint32_t)dbg_periph; }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_dma.c",
    "content": "/*!\r\n    \\file    gd32vf103_dma.c\r\n    \\brief   DMA driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2019-10-30, V1.0.1, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_dma.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n#define DMA_WRONG_HANDLE                                                                                                                                                                               \\\r\n  while (1) {                                                                                                                                                                                          \\\r\n  }\r\n\r\n/* check whether peripheral matches channels or not */\r\nstatic ErrStatus dma_periph_and_channel_check(uint32_t dma_periph, dma_channel_enum channelx);\r\n\r\n/*!\r\n    \\brief      deinitialize DMA a channel registers\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel is deinitialized\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_deinit(uint32_t dma_periph, dma_channel_enum channelx) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  /* disable DMA a channel */\r\n  DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_CHEN;\r\n  /* reset DMA channel registers */\r\n  DMA_CHCTL(dma_periph, channelx)   = DMA_CHCTL_RESET_VALUE;\r\n  DMA_CHCNT(dma_periph, channelx)   = DMA_CHCNT_RESET_VALUE;\r\n  DMA_CHPADDR(dma_periph, channelx) = DMA_CHPADDR_RESET_VALUE;\r\n  DMA_CHMADDR(dma_periph, channelx) = DMA_CHMADDR_RESET_VALUE;\r\n  DMA_INTC(dma_periph) |= DMA_FLAG_ADD(DMA_CHINTF_RESET_VALUE, (uint32_t)channelx);\r\n}\r\n\r\n/*!\r\n    \\brief      initialize the parameters of DMA struct with the default values\r\n    \\param[in]  init_struct: the initialization data needed to initialize DMA channel\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_struct_para_init(dma_parameter_struct *init_struct) {\r\n  /* set the DMA struct with the default values */\r\n  init_struct->periph_addr  = 0U;\r\n  init_struct->periph_width = 0U;\r\n  init_struct->periph_inc   = DMA_PERIPH_INCREASE_DISABLE;\r\n  init_struct->memory_addr  = 0U;\r\n  init_struct->memory_width = 0U;\r\n  init_struct->memory_inc   = DMA_MEMORY_INCREASE_DISABLE;\r\n  init_struct->number       = 0U;\r\n  init_struct->direction    = DMA_PERIPHERAL_TO_MEMORY;\r\n  init_struct->priority     = DMA_PRIORITY_LOW;\r\n}\r\n\r\n/*!\r\n    \\brief      initialize DMA channel\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel is initialized\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[in]  init_struct: the data needed to initialize DMA channel\r\n                  periph_addr: peripheral base address\r\n                  periph_width: DMA_PERIPHERAL_WIDTH_8BIT, DMA_PERIPHERAL_WIDTH_16BIT, DMA_PERIPHERAL_WIDTH_32BIT\r\n                  periph_inc: DMA_PERIPH_INCREASE_ENABLE, DMA_PERIPH_INCREASE_DISABLE\r\n                  memory_addr: memory base address\r\n                  memory_width: DMA_MEMORY_WIDTH_8BIT, DMA_MEMORY_WIDTH_16BIT, DMA_MEMORY_WIDTH_32BIT\r\n                  memory_inc: DMA_MEMORY_INCREASE_ENABLE, DMA_MEMORY_INCREASE_DISABLE\r\n                  direction: DMA_PERIPHERAL_TO_MEMORY, DMA_MEMORY_TO_PERIPHERAL\r\n                  number: the number of remaining data to be transferred by the DMA\r\n                  priority: DMA_PRIORITY_LOW, DMA_PRIORITY_MEDIUM, DMA_PRIORITY_HIGH, DMA_PRIORITY_ULTRA_HIGH\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_init(uint32_t dma_periph, dma_channel_enum channelx, dma_parameter_struct *init_struct) {\r\n  uint32_t ctl;\r\n\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  /* configure peripheral base address */\r\n  DMA_CHPADDR(dma_periph, channelx) = init_struct->periph_addr;\r\n\r\n  /* configure memory base address */\r\n  DMA_CHMADDR(dma_periph, channelx) = init_struct->memory_addr;\r\n\r\n  /* configure the number of remaining data to be transferred */\r\n  DMA_CHCNT(dma_periph, channelx) = (init_struct->number & DMA_CHANNEL_CNT_MASK);\r\n\r\n  /* configure peripheral transfer width,memory transfer width and priority */\r\n  ctl = DMA_CHCTL(dma_periph, channelx);\r\n  ctl &= ~(DMA_CHXCTL_PWIDTH | DMA_CHXCTL_MWIDTH | DMA_CHXCTL_PRIO);\r\n  ctl |= (init_struct->periph_width | init_struct->memory_width | init_struct->priority);\r\n  DMA_CHCTL(dma_periph, channelx) = ctl;\r\n\r\n  /* configure peripheral increasing mode */\r\n  if (DMA_PERIPH_INCREASE_ENABLE == init_struct->periph_inc) {\r\n    DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_PNAGA;\r\n  } else {\r\n    DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_PNAGA;\r\n  }\r\n\r\n  /* configure memory increasing mode */\r\n  if (DMA_MEMORY_INCREASE_ENABLE == init_struct->memory_inc) {\r\n    DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_MNAGA;\r\n  } else {\r\n    DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_MNAGA;\r\n  }\r\n\r\n  /* configure the direction of data transfer */\r\n  if (DMA_PERIPHERAL_TO_MEMORY == init_struct->direction) {\r\n    DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_DIR;\r\n  } else {\r\n    DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_DIR;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      enable DMA circulation mode\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_circulation_enable(uint32_t dma_periph, dma_channel_enum channelx) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_CMEN;\r\n}\r\n\r\n/*!\r\n    \\brief      disable DMA circulation mode\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_circulation_disable(uint32_t dma_periph, dma_channel_enum channelx) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_CMEN;\r\n}\r\n\r\n/*!\r\n    \\brief      enable memory to memory mode\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_memory_to_memory_enable(uint32_t dma_periph, dma_channel_enum channelx) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_M2M;\r\n}\r\n\r\n/*!\r\n    \\brief      disable memory to memory mode\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_memory_to_memory_disable(uint32_t dma_periph, dma_channel_enum channelx) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_M2M;\r\n}\r\n\r\n/*!\r\n    \\brief      enable DMA channel\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_channel_enable(uint32_t dma_periph, dma_channel_enum channelx) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_CHEN;\r\n}\r\n\r\n/*!\r\n    \\brief      disable DMA channel\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_channel_disable(uint32_t dma_periph, dma_channel_enum channelx) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_CHEN;\r\n}\r\n\r\n/*!\r\n    \\brief      set DMA peripheral base address\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel to set peripheral base address\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[in]  address: peripheral base address\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_periph_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  DMA_CHPADDR(dma_periph, channelx) = address;\r\n}\r\n\r\n/*!\r\n    \\brief      set DMA memory base address\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel to set memory base address\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[in]  address: memory base address\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_memory_address_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t address) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  DMA_CHMADDR(dma_periph, channelx) = address;\r\n}\r\n\r\n/*!\r\n    \\brief      set the number of remaining data to be transferred by the DMA\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel to set number\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[in]  number: the number of remaining data to be transferred by the DMA\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_transfer_number_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t number) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  DMA_CHCNT(dma_periph, channelx) = (number & DMA_CHANNEL_CNT_MASK);\r\n}\r\n\r\n/*!\r\n    \\brief      get the number of remaining data to be transferred by the DMA\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel to set number\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     uint32_t: the number of remaining data to be transferred by the DMA\r\n*/\r\nuint32_t dma_transfer_number_get(uint32_t dma_periph, dma_channel_enum channelx) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  return (uint32_t)DMA_CHCNT(dma_periph, channelx);\r\n}\r\n\r\n/*!\r\n    \\brief      configure priority level of DMA channel\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[in]  priority: priority Level of this channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA_PRIORITY_LOW: low priority\r\n      \\arg        DMA_PRIORITY_MEDIUM: medium priority\r\n      \\arg        DMA_PRIORITY_HIGH: high priority\r\n      \\arg        DMA_PRIORITY_ULTRA_HIGH: ultra high priority\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_priority_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t priority) {\r\n  uint32_t ctl;\r\n\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  /* acquire DMA_CHxCTL register */\r\n  ctl = DMA_CHCTL(dma_periph, channelx);\r\n  /* assign regiser */\r\n  ctl &= ~DMA_CHXCTL_PRIO;\r\n  ctl |= priority;\r\n  DMA_CHCTL(dma_periph, channelx) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      configure transfer data size of memory\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[in]  mwidth: transfer data width of memory\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA_MEMORY_WIDTH_8BIT: transfer data width of memory is 8-bit\r\n      \\arg        DMA_MEMORY_WIDTH_16BIT: transfer data width of memory is 16-bit\r\n      \\arg        DMA_MEMORY_WIDTH_32BIT: transfer data width of memory is 32-bit\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_memory_width_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t mwidth) {\r\n  uint32_t ctl;\r\n\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  /* acquire DMA_CHxCTL register */\r\n  ctl = DMA_CHCTL(dma_periph, channelx);\r\n  /* assign regiser */\r\n  ctl &= ~DMA_CHXCTL_MWIDTH;\r\n  ctl |= mwidth;\r\n  DMA_CHCTL(dma_periph, channelx) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      configure transfer data size of peripheral\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[in]  pwidth: transfer data width of peripheral\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA_PERIPHERAL_WIDTH_8BIT: transfer data width of peripheral is 8-bit\r\n      \\arg        DMA_PERIPHERAL_WIDTH_16BIT: transfer data width of peripheral is 16-bit\r\n      \\arg        DMA_PERIPHERAL_WIDTH_32BIT: transfer data width of peripheral is 32-bit\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_periph_width_config(uint32_t dma_periph, dma_channel_enum channelx, uint32_t pwidth) {\r\n  uint32_t ctl;\r\n\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  /* acquire DMA_CHxCTL register */\r\n  ctl = DMA_CHCTL(dma_periph, channelx);\r\n  /* assign regiser */\r\n  ctl &= ~DMA_CHXCTL_PWIDTH;\r\n  ctl |= pwidth;\r\n  DMA_CHCTL(dma_periph, channelx) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      enable next address increasement algorithm of memory\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_memory_increase_enable(uint32_t dma_periph, dma_channel_enum channelx) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_MNAGA;\r\n}\r\n\r\n/*!\r\n    \\brief      disable next address increasement algorithm of memory\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_memory_increase_disable(uint32_t dma_periph, dma_channel_enum channelx) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_MNAGA;\r\n}\r\n\r\n/*!\r\n    \\brief      enable next address increasement algorithm of peripheral\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_periph_increase_enable(uint32_t dma_periph, dma_channel_enum channelx) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_PNAGA;\r\n}\r\n\r\n/*!\r\n    \\brief      disable next address increasement algorithm of peripheral\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_periph_increase_disable(uint32_t dma_periph, dma_channel_enum channelx) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_PNAGA;\r\n}\r\n\r\n/*!\r\n    \\brief      configure the direction of data transfer on the channel\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[in]  direction: specify the direction of data transfer\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA_PERIPHERAL_TO_MEMORY: read from peripheral and write to memory\r\n      \\arg        DMA_MEMORY_TO_PERIPHERAL: read from memory and write to peripheral\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_transfer_direction_config(uint32_t dma_periph, dma_channel_enum channelx, uint8_t direction) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  if (DMA_PERIPHERAL_TO_MEMORY == direction) {\r\n    DMA_CHCTL(dma_periph, channelx) &= ~DMA_CHXCTL_DIR;\r\n  } else {\r\n    DMA_CHCTL(dma_periph, channelx) |= DMA_CHXCTL_DIR;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      check DMA flag is set or not\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel to get flag\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[in]  flag: specify get which flag\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA_FLAG_G: global interrupt flag of channel\r\n      \\arg        DMA_FLAG_FTF: full transfer finish flag of channel\r\n      \\arg        DMA_FLAG_HTF: half transfer finish flag of channel\r\n      \\arg        DMA_FLAG_ERR: error flag of channel\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus dma_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) {\r\n  FlagStatus reval;\r\n\r\n  if (DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, (uint32_t)channelx)) {\r\n    reval = SET;\r\n  } else {\r\n    reval = RESET;\r\n  }\r\n\r\n  return reval;\r\n}\r\n\r\n/*!\r\n    \\brief      clear DMA a channel flag\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel to clear flag\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[in]  flag: specify get which flag\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA_FLAG_G: global interrupt flag of channel\r\n      \\arg        DMA_FLAG_FTF: full transfer finish flag of channel\r\n      \\arg        DMA_FLAG_HTF: half transfer finish flag of channel\r\n      \\arg        DMA_FLAG_ERR: error flag of channel\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) { DMA_INTC(dma_periph) |= DMA_FLAG_ADD(flag, (uint32_t)channelx); }\r\n\r\n/*!\r\n    \\brief      check DMA flag and interrupt enable bit is set or not\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel to get flag\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[in]  flag: specify get which flag\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA_INT_FLAG_FTF: full transfer finish interrupt flag of channel\r\n      \\arg        DMA_INT_FLAG_HTF: half transfer finish interrupt flag of channel\r\n      \\arg        DMA_INT_FLAG_ERR: error interrupt flag of channel\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus dma_interrupt_flag_get(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) {\r\n  uint32_t interrupt_enable = 0U, interrupt_flag = 0U;\r\n\r\n  switch (flag) {\r\n  case DMA_INT_FLAG_FTF:\r\n    /* check whether the full transfer finish interrupt flag is set and enabled */\r\n    interrupt_flag   = DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, (uint32_t)channelx);\r\n    interrupt_enable = DMA_CHCTL(dma_periph, (uint32_t)channelx) & DMA_CHXCTL_FTFIE;\r\n    break;\r\n  case DMA_INT_FLAG_HTF:\r\n    /* check whether the half transfer finish interrupt flag is set and enabled */\r\n    interrupt_flag   = DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, (uint32_t)channelx);\r\n    interrupt_enable = DMA_CHCTL(dma_periph, (uint32_t)channelx) & DMA_CHXCTL_HTFIE;\r\n    break;\r\n  case DMA_INT_FLAG_ERR:\r\n    /* check whether the error interrupt flag is set and enabled */\r\n    interrupt_flag   = DMA_INTF(dma_periph) & DMA_FLAG_ADD(flag, (uint32_t)channelx);\r\n    interrupt_enable = DMA_CHCTL(dma_periph, (uint32_t)channelx) & DMA_CHXCTL_ERRIE;\r\n    break;\r\n  default:\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  /* when the interrupt flag is set and enabled, return SET */\r\n  if (interrupt_flag && interrupt_enable) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear DMA a channel flag\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel to clear flag\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[in]  flag: specify get which flag\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA_INT_FLAG_G: global interrupt flag of channel\r\n      \\arg        DMA_INT_FLAG_FTF: full transfer finish interrupt flag of channel\r\n      \\arg        DMA_INT_FLAG_HTF: half transfer finish interrupt flag of channel\r\n      \\arg        DMA_INT_FLAG_ERR: error interrupt flag of channel\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_interrupt_flag_clear(uint32_t dma_periph, dma_channel_enum channelx, uint32_t flag) { DMA_INTC(dma_periph) |= DMA_FLAG_ADD(flag, (uint32_t)channelx); }\r\n\r\n/*!\r\n    \\brief      enable DMA interrupt\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[in]  source: specify which interrupt to enbale\r\n                one or more parameters can be selected which are shown as below\r\n      \\arg        DMA_INT_FTF: channel full transfer finish interrupt\r\n      \\arg        DMA_INT_HTF: channel half transfer finish interrupt\r\n      \\arg        DMA_INT_ERR: channel error interrupt\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_interrupt_enable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  DMA_CHCTL(dma_periph, channelx) |= source;\r\n}\r\n\r\n/*!\r\n    \\brief      disable DMA interrupt\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA0: DMA_CHx(x=0..6), DMA1: DMA_CHx(x=0..4)\r\n    \\param[in]  source: specify which interrupt to disbale\r\n                one or more parameters can be selected which are shown as below\r\n      \\arg        DMA_INT_FTF: channel full transfer finish interrupt\r\n      \\arg        DMA_INT_HTF: channel half transfer finish interrupt\r\n      \\arg        DMA_INT_ERR: channel error interrupt\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid dma_interrupt_disable(uint32_t dma_periph, dma_channel_enum channelx, uint32_t source) {\r\n  if (ERROR == dma_periph_and_channel_check(dma_periph, channelx)) {\r\n    DMA_WRONG_HANDLE\r\n  }\r\n\r\n  DMA_CHCTL(dma_periph, channelx) &= ~source;\r\n}\r\n\r\n/*!\r\n    \\brief      check whether peripheral and channels match\r\n    \\param[in]  dma_periph: DMAx(x=0,1)\r\n      \\arg        DMAx(x=0,1)\r\n    \\param[in]  channelx: specify which DMA channel\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        DMA_CHx(x=0..6)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nstatic ErrStatus dma_periph_and_channel_check(uint32_t dma_periph, dma_channel_enum channelx) {\r\n  ErrStatus val = SUCCESS;\r\n\r\n  if (DMA1 == dma_periph) {\r\n    /* for DMA1, the channel is from DMA_CH0 to DMA_CH4 */\r\n    if (channelx > DMA_CH4) {\r\n      val = ERROR;\r\n    }\r\n  }\r\n\r\n  return val;\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_eclic.c",
    "content": "/*!\r\n    \\file    gd32vf103_eclic.c\r\n    \\brief   ECLIC(Enhancement Core-Local Interrupt Controller) driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_eclic.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n#include \"n200_func.h\"\r\n#include \"riscv_encoding.h\"\r\n\r\n#define REG_DBGMCU2   ((uint32_t)0xE0042008U)\r\n#define REG_DBGMCU2EN ((uint32_t)0xE004200CU)\r\n\r\n/*!\r\n    \\brief      enable the global interrupt\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid eclic_global_interrupt_enable(void) {\r\n  /* set machine interrupt enable bit */\r\n  set_csr(mstatus, MSTATUS_MIE);\r\n}\r\n\r\n/*!\r\n    \\brief      disable the global interrupt\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid eclic_global_interrupt_disable(void) {\r\n  /* clear machine interrupt enable bit */\r\n  clear_csr(mstatus, MSTATUS_MIE);\r\n}\r\n\r\n/*!\r\n    \\brief      set the priority group\r\n    \\param[in]  prigroup: specify the priority group\r\n      \\arg        ECLIC_PRIGROUP_LEVEL0_PRIO4\r\n      \\arg        ECLIC_PRIGROUP_LEVEL1_PRIO3\r\n      \\arg        ECLIC_PRIGROUP_LEVEL2_PRIO2\r\n      \\arg        ECLIC_PRIGROUP_LEVEL3_PRIO1\r\n      \\arg        ECLIC_PRIGROUP_LEVEL4_PRIO0\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid eclic_priority_group_set(uint8_t prigroup) { eclic_set_nlbits(prigroup); }\r\n\r\n/*!\r\n    \\brief      enable the interrupt request\r\n    \\param[in]  source: interrupt request, detailed in IRQn_Type\r\n    \\param[in]  level: the level needed to set (maximum is 15, refer to the priority group)\r\n    \\param[in]  priority: the priority needed to set (maximum is 15, refer to the priority group)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid eclic_irq_enable(uint32_t source, uint8_t level, uint8_t priority) {\r\n  eclic_enable_interrupt(source);\r\n  eclic_set_irq_lvl_abs(source, level);\r\n  eclic_set_irq_priority(source, priority);\r\n}\r\n\r\n/*!\r\n    \\brief      disable the interrupt request\r\n    \\param[in]  source: interrupt request, detailed in IRQn_Type\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid eclic_irq_disable(uint32_t source) { eclic_disable_interrupt(source); }\r\n\r\n/*!\r\n    \\brief      reset system\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid eclic_system_reset(void) {\r\n  REG32(REG_DBGMCU2EN) = (uint32_t)0x4b5a6978U;\r\n  REG32(REG_DBGMCU2)   = (uint32_t)0x1U;\r\n}\r\n\r\n/*!\r\n    \\brief      send event(SEV)\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid eclic_send_event(void) { set_csr(0x812U, 0x1U); }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_exmc.c",
    "content": "/*!\r\n    \\file    gd32vf103_exmc.c\r\n    \\brief   EXMC driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_exmc.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n/* EXMC bank0 register reset value */\r\n#define BANK0_SNCTL0_REGION_RESET ((uint32_t)0x000030DAU)\r\n#define BANK0_SNTCFG_RESET        ((uint32_t)0x0FFFFFFFU)\r\n\r\n/* EXMC register bit offset */\r\n#define SNCTL_NRMUX_OFFSET     ((uint32_t)1U)\r\n#define SNCTL_WREN_OFFSET      ((uint32_t)12U)\r\n#define SNCTL_NRWTEN_OFFSET    ((uint32_t)13U)\r\n#define SNCTL_ASYNCWAIT_OFFSET ((uint32_t)15U)\r\n\r\n#define SNTCFG_AHLD_OFFSET   ((uint32_t)4U)\r\n#define SNTCFG_DSET_OFFSET   ((uint32_t)8U)\r\n#define SNTCFG_BUSLAT_OFFSET ((uint32_t)16U)\r\n\r\n/*!\r\n    \\brief      deinitialize EXMC NOR/SRAM region\r\n    \\param[in]  norsram_region: select the region of bank0\r\n      \\arg        EXMC_BANK0_NORSRAM_REGIONx(x=0)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid exmc_norsram_deinit(uint32_t norsram_region) {\r\n  /* reset the registers */\r\n  if (EXMC_BANK0_NORSRAM_REGION0 == norsram_region) {\r\n    EXMC_SNCTL(norsram_region) = BANK0_SNCTL0_REGION_RESET;\r\n  }\r\n\r\n  EXMC_SNTCFG(norsram_region) = BANK0_SNTCFG_RESET;\r\n}\r\n\r\n/*!\r\n    \\brief      initialize the structure exmc_norsram_parameter_struct\r\n    \\param[in]  none\r\n    \\param[out] exmc_norsram_init_struct: the initialized structure exmc_norsram_parameter_struct pointer\r\n    \\retval     none\r\n*/\r\nvoid exmc_norsram_struct_para_init(exmc_norsram_parameter_struct *exmc_norsram_init_struct) {\r\n  /* configure the structure with default value */\r\n  exmc_norsram_init_struct->norsram_region   = EXMC_BANK0_NORSRAM_REGION0;\r\n  exmc_norsram_init_struct->address_data_mux = ENABLE;\r\n  exmc_norsram_init_struct->memory_type      = EXMC_MEMORY_TYPE_SRAM;\r\n  exmc_norsram_init_struct->databus_width    = EXMC_NOR_DATABUS_WIDTH_16B;\r\n  exmc_norsram_init_struct->nwait_polarity   = EXMC_NWAIT_POLARITY_LOW;\r\n  exmc_norsram_init_struct->memory_write     = ENABLE;\r\n  exmc_norsram_init_struct->nwait_signal     = ENABLE;\r\n  exmc_norsram_init_struct->asyn_wait        = DISABLE;\r\n\r\n  /* read/write timing configure */\r\n  exmc_norsram_init_struct->read_write_timing->asyn_address_setuptime = 0xFU;\r\n  exmc_norsram_init_struct->read_write_timing->asyn_address_holdtime  = 0xFU;\r\n  exmc_norsram_init_struct->read_write_timing->asyn_data_setuptime    = 0xFFU;\r\n  exmc_norsram_init_struct->read_write_timing->bus_latency            = 0xFU;\r\n}\r\n\r\n/*!\r\n    \\brief      initialize EXMC NOR/SRAM region\r\n    \\param[in]  exmc_norsram_parameter_struct: configure the EXMC NOR/SRAM parameter\r\n                  norsram_region: EXMC_BANK0_NORSRAM_REGIONx,x=0\r\n                  asyn_wait: ENABLE or DISABLE\r\n                  nwait_signal: ENABLE or DISABLE\r\n                  memory_write: ENABLE or DISABLE\r\n                  nwait_polarity: EXMC_NWAIT_POLARITY_LOW,EXMC_NWAIT_POLARITY_HIGH\r\n                  databus_width: EXMC_NOR_DATABUS_WIDTH_8B,EXMC_NOR_DATABUS_WIDTH_16B\r\n                  memory_type: EXMC_MEMORY_TYPE_SRAM,EXMC_MEMORY_TYPE_PSRAM,EXMC_MEMORY_TYPE_NOR\r\n                  address_data_mux: ENABLE\r\n                  read_write_timing: structure exmc_norsram_timing_parameter_struct set the time\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid exmc_norsram_init(exmc_norsram_parameter_struct *exmc_norsram_init_struct) {\r\n  uint32_t snctl = 0x00000000U, sntcfg = 0x00000000U;\r\n\r\n  /* get the register value */\r\n  snctl = EXMC_SNCTL(exmc_norsram_init_struct->norsram_region);\r\n\r\n  /* clear relative bits */\r\n  snctl &= ((uint32_t)~(EXMC_SNCTL_NREN | EXMC_SNCTL_NRTP | EXMC_SNCTL_NRW | EXMC_SNCTL_NRWTPOL | EXMC_SNCTL_WREN | EXMC_SNCTL_NRWTEN | EXMC_SNCTL_ASYNCWAIT | EXMC_SNCTL_NRMUX));\r\n\r\n  snctl |= (uint32_t)((uint32_t)exmc_norsram_init_struct->address_data_mux << SNCTL_NRMUX_OFFSET) | exmc_norsram_init_struct->memory_type | exmc_norsram_init_struct->databus_width |\r\n           exmc_norsram_init_struct->nwait_polarity | ((uint32_t)exmc_norsram_init_struct->memory_write << SNCTL_WREN_OFFSET) |\r\n           ((uint32_t)exmc_norsram_init_struct->nwait_signal << SNCTL_NRWTEN_OFFSET) | ((uint32_t)exmc_norsram_init_struct->asyn_wait << SNCTL_ASYNCWAIT_OFFSET);\r\n\r\n  sntcfg = (uint32_t)((exmc_norsram_init_struct->read_write_timing->asyn_address_setuptime - 1U) & EXMC_SNTCFG_ASET) |\r\n           (((exmc_norsram_init_struct->read_write_timing->asyn_address_holdtime - 1U) << SNTCFG_AHLD_OFFSET) & EXMC_SNTCFG_AHLD) |\r\n           (((exmc_norsram_init_struct->read_write_timing->asyn_data_setuptime - 1U) << SNTCFG_DSET_OFFSET) & EXMC_SNTCFG_DSET) |\r\n           (((exmc_norsram_init_struct->read_write_timing->bus_latency - 1U) << SNTCFG_BUSLAT_OFFSET) & EXMC_SNTCFG_BUSLAT);\r\n\r\n  /* nor flash access enable */\r\n  if (EXMC_MEMORY_TYPE_NOR == exmc_norsram_init_struct->memory_type) {\r\n    snctl |= (uint32_t)EXMC_SNCTL_NREN;\r\n  }\r\n\r\n  /* configure the registers */\r\n  EXMC_SNCTL(exmc_norsram_init_struct->norsram_region)  = snctl;\r\n  EXMC_SNTCFG(exmc_norsram_init_struct->norsram_region) = sntcfg;\r\n}\r\n\r\n/*!\r\n    \\brief      enable EXMC NOR/PSRAM bank region\r\n    \\param[in]  norsram_region: specify the region of NOR/PSRAM bank\r\n      \\arg        EXMC_BANK0_NORSRAM_REGIONx(x=0)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid exmc_norsram_enable(uint32_t norsram_region) { EXMC_SNCTL(norsram_region) |= (uint32_t)EXMC_SNCTL_NRBKEN; }\r\n\r\n/*!\r\n    \\brief      disable EXMC NOR/PSRAM bank region\r\n    \\param[in]  norsram_region: specify the region of NOR/PSRAM bank\r\n      \\arg        EXMC_BANK0_NORSRAM_REGIONx(x=0)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid exmc_norsram_disable(uint32_t norsram_region) { EXMC_SNCTL(norsram_region) &= ~(uint32_t)EXMC_SNCTL_NRBKEN; }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_exti.c",
    "content": "/*!\r\n    \\file    gd32vf103_exti.c\r\n    \\brief   EXTI driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_exti.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n#define EXTI_REG_RESET_VALUE ((uint32_t)0x00000000U)\r\n\r\n/*!\r\n \\brief      deinitialize the EXTI\r\n \\param[in]  none\r\n \\param[out] none\r\n \\retval     none\r\n */\r\nvoid exti_deinit(void) {\r\n  /* reset the value of all the EXTI registers */\r\n  EXTI_INTEN = EXTI_REG_RESET_VALUE;\r\n  EXTI_EVEN  = EXTI_REG_RESET_VALUE;\r\n  EXTI_RTEN  = EXTI_REG_RESET_VALUE;\r\n  EXTI_FTEN  = EXTI_REG_RESET_VALUE;\r\n  EXTI_SWIEV = EXTI_REG_RESET_VALUE;\r\n}\r\n\r\n/*!\r\n    \\brief      initialize the EXTI\r\n    \\param[in]  linex: EXTI line number, refer to exti_line_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        EXTI_x (x=0..18): EXTI line x\r\n    \\param[in]  mode: interrupt or event mode, refer to exti_mode_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        EXTI_INTERRUPT: interrupt mode\r\n      \\arg        EXTI_EVENT: event mode\r\n    \\param[in]  trig_type: trigger type, refer to exti_trig_type_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        EXTI_TRIG_RISING: rising edge trigger\r\n      \\arg        EXTI_TRIG_FALLING: falling edge trigger\r\n      \\arg        EXTI_TRIG_BOTH: rising edge and falling edge trigger\r\n      \\arg        EXTI_TRIG_NONE: without rising edge or falling edge trigger\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid exti_init(exti_line_enum linex, exti_mode_enum mode, exti_trig_type_enum trig_type) {\r\n  /* reset the EXTI line x */\r\n  EXTI_INTEN &= ~(uint32_t)linex;\r\n  EXTI_EVEN &= ~(uint32_t)linex;\r\n  EXTI_RTEN &= ~(uint32_t)linex;\r\n  EXTI_FTEN &= ~(uint32_t)linex;\r\n\r\n  /* set the EXTI mode and enable the interrupts or events from EXTI line x */\r\n  switch (mode) {\r\n  case EXTI_INTERRUPT:\r\n    EXTI_INTEN |= (uint32_t)linex;\r\n    break;\r\n  case EXTI_EVENT:\r\n    EXTI_EVEN |= (uint32_t)linex;\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* set the EXTI trigger type */\r\n  switch (trig_type) {\r\n  case EXTI_TRIG_RISING:\r\n    EXTI_RTEN |= (uint32_t)linex;\r\n    EXTI_FTEN &= ~(uint32_t)linex;\r\n    break;\r\n  case EXTI_TRIG_FALLING:\r\n    EXTI_RTEN &= ~(uint32_t)linex;\r\n    EXTI_FTEN |= (uint32_t)linex;\r\n    break;\r\n  case EXTI_TRIG_BOTH:\r\n    EXTI_RTEN |= (uint32_t)linex;\r\n    EXTI_FTEN |= (uint32_t)linex;\r\n    break;\r\n  case EXTI_TRIG_NONE:\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      enable the interrupts from EXTI line x\r\n    \\param[in]  linex: EXTI line number, refer to exti_line_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        EXTI_x (x=0..18): EXTI line x\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid exti_interrupt_enable(exti_line_enum linex) { EXTI_INTEN |= (uint32_t)linex; }\r\n\r\n/*!\r\n    \\brief      enable the events from EXTI line x\r\n    \\param[in]  linex: EXTI line number, refer to exti_line_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        EXTI_x (x=0..18): EXTI line x\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid exti_event_enable(exti_line_enum linex) { EXTI_EVEN |= (uint32_t)linex; }\r\n\r\n/*!\r\n    \\brief      disable the interrupt from EXTI line x\r\n    \\param[in]  linex: EXTI line number, refer to exti_line_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        EXTI_x (x=0..18): EXTI line x\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid exti_interrupt_disable(exti_line_enum linex) { EXTI_INTEN &= ~(uint32_t)linex; }\r\n\r\n/*!\r\n    \\brief      disable the events from EXTI line x\r\n    \\param[in]  linex: EXTI line number, refer to exti_line_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        EXTI_x (x=0..18): EXTI line x\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid exti_event_disable(exti_line_enum linex) { EXTI_EVEN &= ~(uint32_t)linex; }\r\n\r\n/*!\r\n    \\brief      get EXTI lines flag\r\n    \\param[in]  linex: EXTI line number, refer to exti_line_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        EXTI_x (x=0..18): EXTI line x\r\n    \\param[out] none\r\n    \\retval     FlagStatus: status of flag (RESET or SET)\r\n*/\r\nFlagStatus exti_flag_get(exti_line_enum linex) {\r\n  if (RESET != (EXTI_PD & (uint32_t)linex)) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear EXTI lines pending flag\r\n    \\param[in]  linex: EXTI line number, refer to exti_line_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        EXTI_x (x=0..18): EXTI line x\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid exti_flag_clear(exti_line_enum linex) { EXTI_PD = (uint32_t)linex; }\r\n\r\n/*!\r\n    \\brief      get EXTI lines flag when the interrupt flag is set\r\n    \\param[in]  linex: EXTI line number, refer to exti_line_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        EXTI_x (x=0..18): EXTI line x\r\n    \\param[out] none\r\n    \\retval     FlagStatus: status of flag (RESET or SET)\r\n*/\r\nFlagStatus exti_interrupt_flag_get(exti_line_enum linex) {\r\n  uint32_t flag_left, flag_right;\r\n\r\n  flag_left  = EXTI_PD & (uint32_t)linex;\r\n  flag_right = EXTI_INTEN & (uint32_t)linex;\r\n\r\n  if ((RESET != flag_left) && (RESET != flag_right)) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear EXTI lines pending flag\r\n    \\param[in]  linex: EXTI line number, refer to exti_line_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        EXTI_x (x=0..18): EXTI line x\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid exti_interrupt_flag_clear(exti_line_enum linex) { EXTI_PD = (uint32_t)linex; }\r\n\r\n/*!\r\n    \\brief      enable EXTI software interrupt event\r\n    \\param[in]  linex: EXTI line number, refer to exti_line_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        EXTI_x (x=0..18): EXTI line x\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid exti_software_interrupt_enable(exti_line_enum linex) { EXTI_SWIEV |= (uint32_t)linex; }\r\n\r\n/*!\r\n    \\brief      disable EXTI software interrupt event\r\n    \\param[in]  linex: EXTI line number, refer to exti_line_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        EXTI_x (x=0..18): EXTI line x\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid exti_software_interrupt_disable(exti_line_enum linex) { EXTI_SWIEV &= ~(uint32_t)linex; }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_fmc.c",
    "content": "/*!\r\n    \\file    gd32vf103_fmc.c\r\n    \\brief   FMC driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2019-09-18, V1.0.1, firmware for GD32VF103\r\n    \\version 2020-02-20, V1.0.2, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_fmc.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n/*!\r\n    \\brief      set the FMC wait state counter\r\n    \\param[in]  wscnt��wait state counter value\r\n      \\arg        WS_WSCNT_0: FMC 0 wait state\r\n      \\arg        WS_WSCNT_1: FMC 1 wait state\r\n      \\arg        WS_WSCNT_2: FMC 2 wait state\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid fmc_wscnt_set(uint32_t wscnt) {\r\n  uint32_t reg;\r\n\r\n  reg = FMC_WS;\r\n  /* set the wait state counter value */\r\n  reg &= ~FMC_WS_WSCNT;\r\n  FMC_WS = (reg | wscnt);\r\n}\r\n\r\n/*!\r\n    \\brief      unlock the main FMC operation\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid fmc_unlock(void) {\r\n  if ((RESET != (FMC_CTL & FMC_CTL_LK))) {\r\n    /* write the FMC unlock key */\r\n    FMC_KEY = UNLOCK_KEY0;\r\n    FMC_KEY = UNLOCK_KEY1;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      lock the main FMC operation\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid fmc_lock(void) {\r\n  /* set the LK bit */\r\n  FMC_CTL |= FMC_CTL_LK;\r\n}\r\n\r\n/*!\r\n    \\brief      FMC erase page\r\n    \\param[in]  page_address: the page address to be erased.\r\n    \\param[out] none\r\n    \\retval     state of FMC, refer to fmc_state_enum\r\n */\r\nfmc_state_enum fmc_page_erase(uint32_t page_address) {\r\n  fmc_state_enum fmc_state;\r\n  fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n  /* if the last operation is completed, start page erase */\r\n  if (FMC_READY == fmc_state) {\r\n    FMC_CTL |= FMC_CTL_PER;\r\n    FMC_ADDR = page_address;\r\n    FMC_CTL |= FMC_CTL_START;\r\n    /* wait for the FMC ready */\r\n    fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n    /* reset the PER bit */\r\n    FMC_CTL &= ~FMC_CTL_PER;\r\n  }\r\n  /* return the FMC state */\r\n  return fmc_state;\r\n}\r\n\r\n/*!\r\n    \\brief      FMC erase whole chip\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     state of FMC, refer to fmc_state_enum\r\n */\r\nfmc_state_enum fmc_mass_erase(void) {\r\n  fmc_state_enum fmc_state;\r\n  fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n\r\n  if (FMC_READY == fmc_state) {\r\n    /* start whole chip erase */\r\n    FMC_CTL |= FMC_CTL_MER;\r\n    FMC_CTL |= FMC_CTL_START;\r\n    /* wait for the FMC ready */\r\n    fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n    /* reset the MER bit */\r\n    FMC_CTL &= ~FMC_CTL_MER;\r\n  }\r\n  /* return the FMC state  */\r\n  return fmc_state;\r\n}\r\n\r\n/*!\r\n    \\brief      FMC program a word at the corresponding address\r\n    \\param[in]  address: address to program\r\n    \\param[in]  data: word to program\r\n    \\param[out] none\r\n    \\retval     state of FMC, refer to fmc_state_enum\r\n */\r\nfmc_state_enum fmc_word_program(uint32_t address, uint32_t data) {\r\n  fmc_state_enum fmc_state = FMC_READY;\r\n  fmc_state                = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n\r\n  if (FMC_READY == fmc_state) {\r\n    /* set the PG bit to start program */\r\n    FMC_CTL |= FMC_CTL_PG;\r\n    REG32(address) = data;\r\n    /* wait for the FMC ready */\r\n    fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n    /* reset the PG bit */\r\n    FMC_CTL &= ~FMC_CTL_PG;\r\n  }\r\n  /* return the FMC state */\r\n  return fmc_state;\r\n}\r\n/*\r\n    \\brief      FMC program a half word at the corresponding address\r\n    \\param[in]  address: address to program\r\n    \\param[in]  data: halfword to program\r\n    \\param[out] none\r\n    \\retval     state of FMC, refer to fmc_state_enum\r\n*/\r\nfmc_state_enum fmc_halfword_program(uint32_t address, uint16_t data) {\r\n  fmc_state_enum fmc_state = FMC_READY;\r\n  fmc_state                = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n\r\n  if (FMC_READY == fmc_state) {\r\n    /* set the PG bit to start program */\r\n    FMC_CTL |= FMC_CTL_PG;\r\n    REG16(address) = data;\r\n    /* wait for the FMC ready */\r\n    fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n    /* reset the PG bit */\r\n    FMC_CTL &= ~FMC_CTL_PG;\r\n  }\r\n  /* return the FMC state */\r\n  return fmc_state;\r\n}\r\n\r\n/*!\r\n    \\brief      unlock the option byte operation\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid ob_unlock(void) {\r\n  if (RESET == (FMC_CTL & FMC_CTL_OBWEN)) {\r\n    /* write the FMC key */\r\n    FMC_OBKEY = UNLOCK_KEY0;\r\n    FMC_OBKEY = UNLOCK_KEY1;\r\n  }\r\n\r\n  /* wait until OBWEN bit is set by hardware */\r\n  while (RESET == (FMC_CTL & FMC_CTL_OBWEN)) {\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      lock the option byte operation\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid ob_lock(void) {\r\n  /* reset the OBWEN bit */\r\n  FMC_CTL &= ~FMC_CTL_OBWEN;\r\n}\r\n\r\n/*!\r\n    \\brief      erase the FMC option byte\r\n    unlock the FMC_CTL and option byte before calling this function\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     state of FMC, refer to fmc_state_enum\r\n */\r\nfmc_state_enum ob_erase(void) {\r\n  uint16_t temp_spc = FMC_NSPC;\r\n\r\n  fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n\r\n  /* check the option byte security protection value */\r\n  if (RESET != ob_spc_get()) {\r\n    temp_spc = FMC_USPC;\r\n  }\r\n\r\n  if (FMC_READY == fmc_state) {\r\n\r\n    /* start erase the option byte */\r\n    FMC_CTL |= FMC_CTL_OBER;\r\n    FMC_CTL |= FMC_CTL_START;\r\n\r\n    /* wait for the FMC ready */\r\n    fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n\r\n    if (FMC_READY == fmc_state) {\r\n      /* reset the OBER bit */\r\n      FMC_CTL &= ~FMC_CTL_OBER;\r\n      /* set the OBPG bit */\r\n      FMC_CTL |= FMC_CTL_OBPG;\r\n      /* no security protection */\r\n      OB_SPC = (uint16_t)temp_spc;\r\n      /* wait for the FMC ready */\r\n      fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n      if (FMC_TOERR != fmc_state) {\r\n        /* reset the OBPG bit */\r\n        FMC_CTL &= ~FMC_CTL_OBPG;\r\n      }\r\n    } else {\r\n      if (FMC_TOERR != fmc_state) {\r\n        /* reset the OBPG bit */\r\n        FMC_CTL &= ~FMC_CTL_OBPG;\r\n      }\r\n    }\r\n  }\r\n  /* return the FMC state */\r\n  return fmc_state;\r\n}\r\n\r\n/*!\r\n    \\brief      enable write protection\r\n    \\param[in]  ob_wp: specify sector to be write protected, set the bit to 1 if\r\n    you want to protect the corresponding pages. meanwhile, sector\r\n    macro could used to set specific sector write protected.\r\n    one or more parameters can be selected which are shown as below:\r\n      \\arg        OB_WP_x(x = 0..31): write protect specify sector\r\n      \\arg        OB_WP_ALL: write protect all sector\r\n    \\param[out] none\r\n    \\retval     state of FMC, refer to fmc_state_enum\r\n */\r\nfmc_state_enum ob_write_protection_enable(uint32_t ob_wp) {\r\n  uint16_t temp_wp0, temp_wp1, temp_wp2, temp_wp3;\r\n\r\n  fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n\r\n  ob_wp    = (uint32_t)(~ob_wp);\r\n  temp_wp0 = (uint16_t)(ob_wp & OB_WP0_WP0);\r\n  temp_wp1 = (uint16_t)((ob_wp & OB_WP1_WP1) >> 8U);\r\n  temp_wp2 = (uint16_t)((ob_wp & OB_WP2_WP2) >> 16U);\r\n  temp_wp3 = (uint16_t)((ob_wp & OB_WP3_WP3) >> 24U);\r\n\r\n  if (FMC_READY == fmc_state) {\r\n\r\n    /* set the OBPG bit*/\r\n    FMC_CTL |= FMC_CTL_OBPG;\r\n\r\n    if (0xFFU != temp_wp0) {\r\n      OB_WP0 = temp_wp0;\r\n\r\n      /* wait for the FMC ready */\r\n      fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n    }\r\n    if ((FMC_READY == fmc_state) && (0xFFU != temp_wp1)) {\r\n      OB_WP1 = temp_wp1;\r\n\r\n      /* wait for the FMC ready */\r\n      fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n    }\r\n    if ((FMC_READY == fmc_state) && (0xFFU != temp_wp2)) {\r\n      OB_WP2 = temp_wp2;\r\n\r\n      /* wait for the FMC ready */\r\n      fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n    }\r\n    if ((FMC_READY == fmc_state) && (0xFFU != temp_wp3)) {\r\n      OB_WP3 = temp_wp3;\r\n\r\n      /* wait for the FMC ready */\r\n      fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n    }\r\n    if (FMC_TOERR != fmc_state) {\r\n      /* reset the OBPG bit */\r\n      FMC_CTL &= ~FMC_CTL_OBPG;\r\n    }\r\n  }\r\n  /* return the FMC state */\r\n  return fmc_state;\r\n}\r\n\r\n/*!\r\n    \\brief      configure security protection\r\n    \\param[in]  ob_spc: specify security protection\r\n    only one parameter can be selected which is shown as below:\r\n      \\arg        FMC_NSPC: no security protection\r\n      \\arg        FMC_USPC: under security protection\r\n    \\param[out] none\r\n    \\retval     state of FMC, refer to fmc_state_enum\r\n */\r\nfmc_state_enum ob_security_protection_config(uint8_t ob_spc) {\r\n  fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n\r\n  if (FMC_READY == fmc_state) {\r\n    FMC_CTL |= FMC_CTL_OBER;\r\n    FMC_CTL |= FMC_CTL_START;\r\n\r\n    /* wait for the FMC ready */\r\n    fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n\r\n    if (FMC_READY == fmc_state) {\r\n      /* reset the OBER bit */\r\n      FMC_CTL &= ~FMC_CTL_OBER;\r\n\r\n      /* start the option byte program */\r\n      FMC_CTL |= FMC_CTL_OBPG;\r\n\r\n      OB_SPC = (uint16_t)ob_spc;\r\n\r\n      /* wait for the FMC ready */\r\n      fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n\r\n      if (FMC_TOERR != fmc_state) {\r\n        /* reset the OBPG bit */\r\n        FMC_CTL &= ~FMC_CTL_OBPG;\r\n      }\r\n    } else {\r\n      if (FMC_TOERR != fmc_state) {\r\n        /* reset the OBER bit */\r\n        FMC_CTL &= ~FMC_CTL_OBER;\r\n      }\r\n    }\r\n  }\r\n  /* return the FMC state */\r\n  return fmc_state;\r\n}\r\n\r\n/*!\r\n    \\brief      program the FMC user option byte\r\n    \\param[in]  ob_fwdgt: option byte watchdog value\r\n      \\arg        OB_FWDGT_SW: software free watchdog\r\n      \\arg        OB_FWDGT_HW: hardware free watchdog\r\n    \\param[in]  ob_deepsleep: option byte deepsleep reset value\r\n      \\arg        OB_DEEPSLEEP_NRST: no reset when entering deepsleep mode\r\n      \\arg        OB_DEEPSLEEP_RST: generate a reset instead of entering deepsleep mode\r\n    \\param[in]  ob_stdby:option byte standby reset value\r\n      \\arg        OB_STDBY_NRST: no reset when entering standby mode\r\n      \\arg        OB_STDBY_RST: generate a reset instead of entering standby mode\r\n    \\param[in]  ob_boot: specifies the option byte boot bank value\r\n      \\arg        OB_BOOT_B0: boot from bank0\r\n    \\param[out] none\r\n    \\retval     state of FMC, refer to fmc_state_enum\r\n */\r\nfmc_state_enum ob_user_write(uint8_t ob_fwdgt, uint8_t ob_deepsleep, uint8_t ob_stdby, uint8_t ob_boot) {\r\n  fmc_state_enum fmc_state = FMC_READY;\r\n  uint8_t        temp;\r\n\r\n  /* wait for the FMC ready */\r\n  fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n\r\n  if (FMC_READY == fmc_state) {\r\n    /* set the OBPG bit*/\r\n    FMC_CTL |= FMC_CTL_OBPG;\r\n\r\n    temp    = ((uint8_t)((uint8_t)((uint8_t)(ob_boot | ob_fwdgt) | ob_deepsleep) | ob_stdby) | OB_USER_MASK);\r\n    OB_USER = (uint16_t)temp;\r\n\r\n    /* wait for the FMC ready */\r\n    fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n\r\n    if (FMC_TOERR != fmc_state) {\r\n      /* reset the OBPG bit */\r\n      FMC_CTL &= ~FMC_CTL_OBPG;\r\n    }\r\n  }\r\n  /* return the FMC state */\r\n  return fmc_state;\r\n}\r\n\r\n/*!\r\n    \\brief      program the FMC data option byte\r\n    \\param[in]  address: the option bytes address to be programmed\r\n    \\param[in]  data: the byte to be programmed\r\n    \\param[out] none\r\n    \\retval     state of FMC, refer to fmc_state_enum\r\n */\r\nfmc_state_enum ob_data_program(uint32_t address, uint8_t data) {\r\n  fmc_state_enum fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n\r\n  if (FMC_READY == fmc_state) {\r\n    /* set the OBPG bit */\r\n    FMC_CTL |= FMC_CTL_OBPG;\r\n    REG16(address) = data;\r\n\r\n    /* wait for the FMC ready */\r\n    fmc_state = fmc_ready_wait(FMC_TIMEOUT_COUNT);\r\n\r\n    if (FMC_TOERR != fmc_state) {\r\n      /* reset the OBPG bit */\r\n      FMC_CTL &= ~FMC_CTL_OBPG;\r\n    }\r\n  }\r\n  /* return the FMC state */\r\n  return fmc_state;\r\n}\r\n\r\n/*!\r\n    \\brief      get OB_USER in register FMC_OBSTAT\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     the FMC user option byte values\r\n */\r\nuint8_t ob_user_get(void) {\r\n  /* return the FMC user option byte value */\r\n  return (uint8_t)(FMC_OBSTAT >> 2U);\r\n}\r\n\r\n/*!\r\n    \\brief      get OB_DATA in register FMC_OBSTAT\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     ob_data\r\n */\r\nuint16_t ob_data_get(void) { return (uint16_t)(FMC_OBSTAT >> 10U); }\r\n\r\n/*!\r\n    \\brief      get the FMC option byte write protection\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     the FMC write protection option byte value\r\n */\r\nuint32_t ob_write_protection_get(void) {\r\n  /* return the FMC write protection option byte value */\r\n  return FMC_WP;\r\n}\r\n\r\n/*!\r\n    \\brief      get FMC option byte security protection state\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n */\r\nFlagStatus ob_spc_get(void) {\r\n  FlagStatus spc_state = RESET;\r\n\r\n  if (RESET != (FMC_OBSTAT & FMC_OBSTAT_SPC)) {\r\n    spc_state = SET;\r\n  } else {\r\n    spc_state = RESET;\r\n  }\r\n  return spc_state;\r\n}\r\n\r\n/*!\r\n    \\brief      enable FMC interrupt\r\n    \\param[in]  interrupt: the FMC interrupt source\r\n    only one parameter can be selected which is shown as below:\r\n      \\arg        FMC_INT_END: enable FMC end of program interrupt\r\n      \\arg        FMC_INT_ERR: enable FMC error interrupt\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid fmc_interrupt_enable(fmc_int_enum interrupt) { FMC_CTL |= (uint32_t)interrupt; }\r\n\r\n/*!\r\n    \\brief      disable FMC interrupt\r\n    \\param[in]  interrupt: the FMC interrupt source\r\n    only one parameter can be selected which is shown as below:\r\n      \\arg        FMC_INT_END: enable FMC end of program interrupt\r\n      \\arg        FMC_INT_ERR: enable FMC error interrupt\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid fmc_interrupt_disable(fmc_int_enum interrupt) { FMC_CTL &= ~(uint32_t)interrupt; }\r\n\r\n/*!\r\n    \\brief      check flag is set or not\r\n    \\param[in]  flag: check FMC flag\r\n    only one parameter can be selected which is shown as below:\r\n      \\arg        FMC_FLAG_BUSY: FMC busy flag\r\n      \\arg        FMC_FLAG_PGERR: FMC operation error flag\r\n      \\arg        FMC_FLAG_WPERR: FMC erase/program protection error flag\r\n      \\arg        FMC_FLAG_END: FMC end of operation flag\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n */\r\nFlagStatus fmc_flag_get(fmc_flag_enum flag) {\r\n  FlagStatus status = RESET;\r\n\r\n  if (FMC_STAT & flag) {\r\n    status = SET;\r\n  }\r\n  /* return the state of corresponding FMC flag */\r\n  return status;\r\n}\r\n\r\n/*!\r\n \\brief      clear the FMC flag\r\n \\param[in]  flag: clear FMC flag\r\n only one parameter can be selected which is shown as below:\r\n \\arg        FMC_FLAG_PGERR: FMC operation error flag\r\n \\arg        FMC_FLAG_WPERR: FMC erase/program protection error flag\r\n \\arg        FMC_FLAG_END: FMC end of operation flag\r\n \\param[out] none\r\n \\retval     none\r\n */\r\nvoid fmc_flag_clear(fmc_flag_enum flag) {\r\n  /* clear the flags */\r\n  FMC_STAT = flag;\r\n}\r\n\r\n/*!\r\n    \\brief      get FMC interrupt flag state\r\n    \\param[in]  flag: FMC interrupt flags, refer to fmc_interrupt_flag_enum\r\n    only one parameter can be selected which is shown as below:\r\n      \\arg        FMC_INT_FLAG_PGERR: FMC operation error interrupt flag\r\n      \\arg        FMC_INT_FLAG_WPERR: FMC erase/program protection error interrupt flag\r\n      \\arg        FMC_INT_FLAG_END: FMC end of operation interrupt flag\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n */\r\nFlagStatus fmc_interrupt_flag_get(fmc_interrupt_flag_enum flag) {\r\n  FlagStatus status = RESET;\r\n\r\n  if (FMC_STAT & flag) {\r\n    status = SET;\r\n  }\r\n  /* return the state of corresponding FMC flag */\r\n  return status;\r\n}\r\n\r\n/*!\r\n    \\brief      clear FMC interrupt flag state\r\n    \\param[in]  flag: FMC interrupt flags, refer to can_interrupt_flag_enum\r\n    only one parameter can be selected which is shown as below:\r\n      \\arg        FMC_INT_FLAG_PGERR: FMC operation error interrupt flag\r\n      \\arg        FMC_INT_FLAG_WPERR: FMC erase/program protection error interrupt flag\r\n      \\arg        FMC_INT_FLAG_END: FMC end of operation interrupt flag\r\n     \\param[out] none\r\n     \\retval     none\r\n */\r\nvoid fmc_interrupt_flag_clear(fmc_interrupt_flag_enum flag) {\r\n  /* clear the flags */\r\n  FMC_STAT = flag;\r\n}\r\n\r\n/*!\r\n    \\brief      get the FMC state\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     state of FMC, refer to fmc_state_enum\r\n */\r\nfmc_state_enum fmc_state_get(void) {\r\n  fmc_state_enum fmc_state = FMC_READY;\r\n\r\n  if ((uint32_t)0x00U != (FMC_STAT & FMC_STAT_BUSY)) {\r\n    fmc_state = FMC_BUSY;\r\n  } else {\r\n    if ((uint32_t)0x00U != (FMC_STAT & FMC_STAT_WPERR)) {\r\n      fmc_state = FMC_WPERR;\r\n    } else {\r\n      if ((uint32_t)0x00U != (FMC_STAT & (FMC_STAT_PGERR))) {\r\n        fmc_state = FMC_PGERR;\r\n      }\r\n    }\r\n  }\r\n  /* return the FMC state */\r\n  return fmc_state;\r\n}\r\n\r\n/*!\r\n    \\brief      check whether FMC is ready or not\r\n    \\param[in]  timeout: count of loop\r\n    \\param[out] none\r\n    \\retval     state of FMC, refer to fmc_state_enum\r\n */\r\nfmc_state_enum fmc_ready_wait(uint32_t timeout) {\r\n  fmc_state_enum fmc_state = FMC_BUSY;\r\n\r\n  /* wait for FMC ready */\r\n  do {\r\n    /* get FMC state */\r\n    fmc_state = fmc_state_get();\r\n    timeout--;\r\n  } while ((FMC_BUSY == fmc_state) && (0x00U != timeout));\r\n\r\n  if (FMC_BUSY == fmc_state) {\r\n    fmc_state = FMC_TOERR;\r\n  }\r\n  /* return the FMC state */\r\n  return fmc_state;\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_fwdgt.c",
    "content": "/*!\r\n    \\file    gd32vf103_fwdgt.c\r\n    \\brief   FWDGT driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_fwdgt.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n/* write value to FWDGT_CTL_CMD bit field */\r\n#define CTL_CMD(regval) (BITS(0, 15) & ((uint32_t)(regval) << 0))\r\n/* write value to FWDGT_RLD_RLD bit field */\r\n#define RLD_RLD(regval) (BITS(0, 11) & ((uint32_t)(regval) << 0))\r\n\r\n/*!\r\n    \\brief      enable write access to FWDGT_PSC and FWDGT_RLD\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid fwdgt_write_enable(void) { FWDGT_CTL = FWDGT_WRITEACCESS_ENABLE; }\r\n\r\n/*!\r\n    \\brief      disable write access to FWDGT_PSC and FWDGT_RLD\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid fwdgt_write_disable(void) { FWDGT_CTL = FWDGT_WRITEACCESS_DISABLE; }\r\n\r\n/*!\r\n    \\brief      start the free watchdog timer counter\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid fwdgt_enable(void) { FWDGT_CTL = FWDGT_KEY_ENABLE; }\r\n\r\n/*!\r\n    \\brief      reload the counter of FWDGT\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid fwdgt_counter_reload(void) { FWDGT_CTL = FWDGT_KEY_RELOAD; }\r\n\r\n/*!\r\n    \\brief      configure counter reload value, and prescaler divider value\r\n    \\param[in]  reload_value: specify reload value(0x0000 - 0x0FFF)\r\n    \\param[in]  prescaler_div: FWDGT prescaler value\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        FWDGT_PSC_DIV4: FWDGT prescaler set to 4\r\n      \\arg        FWDGT_PSC_DIV8: FWDGT prescaler set to 8\r\n      \\arg        FWDGT_PSC_DIV16: FWDGT prescaler set to 16\r\n      \\arg        FWDGT_PSC_DIV32: FWDGT prescaler set to 32\r\n      \\arg        FWDGT_PSC_DIV64: FWDGT prescaler set to 64\r\n      \\arg        FWDGT_PSC_DIV128: FWDGT prescaler set to 128\r\n      \\arg        FWDGT_PSC_DIV256: FWDGT prescaler set to 256\r\n    \\param[out] none\r\n    \\retval     ErrStatus: ERROR or SUCCESS\r\n*/\r\nErrStatus fwdgt_config(uint16_t reload_value, uint8_t prescaler_div) {\r\n  uint32_t timeout     = FWDGT_PSC_TIMEOUT;\r\n  uint32_t flag_status = RESET;\r\n\r\n  /* enable write access to FWDGT_PSC,and FWDGT_RLD */\r\n  FWDGT_CTL = FWDGT_WRITEACCESS_ENABLE;\r\n  /* wait until the PUD flag to be reset */\r\n  do {\r\n    flag_status = FWDGT_STAT & FWDGT_STAT_PUD;\r\n  } while ((--timeout > 0U) && ((uint32_t)RESET != flag_status));\r\n\r\n  if ((uint32_t)RESET != flag_status) {\r\n    return ERROR;\r\n  }\r\n  /* configure FWDGT */\r\n  FWDGT_PSC = (uint32_t)prescaler_div;\r\n\r\n  timeout = FWDGT_RLD_TIMEOUT;\r\n  /* wait until the RUD flag to be reset */\r\n  do {\r\n    flag_status = FWDGT_STAT & FWDGT_STAT_RUD;\r\n  } while ((--timeout > 0U) && ((uint32_t)RESET != flag_status));\r\n\r\n  if ((uint32_t)RESET != flag_status) {\r\n    return ERROR;\r\n  }\r\n  FWDGT_RLD = RLD_RLD(reload_value);\r\n  /* reload the counter */\r\n  FWDGT_CTL = FWDGT_KEY_RELOAD;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/*!\r\n    \\brief      get flag state of FWDGT\r\n    \\param[in]  flag: flag to get\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        FWDGT_FLAG_PUD: a write operation to FWDGT_PSC register is on going\r\n      \\arg        FWDGT_FLAG_RUD: a write operation to FWDGT_RLD register is on going\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus fwdgt_flag_get(uint16_t flag) {\r\n  if (FWDGT_STAT & flag) {\r\n    return SET;\r\n  }\r\n\r\n  return RESET;\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_gpio.c",
    "content": "/*!\r\n    \\file    gd32vf103_gpio.c\r\n    \\brief   GPIO driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_gpio.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n#define AFIO_EXTI_SOURCE_MASK   ((uint8_t)0x03U)        /*!< AFIO exti source selection mask*/\r\n#define AFIO_EXTI_SOURCE_FIELDS ((uint8_t)0x04U)        /*!< select AFIO exti source registers */\r\n#define LSB_16BIT_MASK          ((uint16_t)0xFFFFU)     /*!< LSB 16-bit mask */\r\n#define PCF_POSITION_MASK       ((uint32_t)0x000F0000U) /*!< AFIO_PCF register position mask */\r\n#define PCF_SWJCFG_MASK         ((uint32_t)0xF0FFFFFFU) /*!< AFIO_PCF register SWJCFG mask */\r\n#define PCF_LOCATION1_MASK      ((uint32_t)0x00200000U) /*!< AFIO_PCF register location1 mask */\r\n#define PCF_LOCATION2_MASK      ((uint32_t)0x00100000U) /*!< AFIO_PCF register location2 mask */\r\n#define AFIO_PCF1_FIELDS        ((uint32_t)0x80000000U) /*!< select AFIO_PCF1 register */\r\n#define GPIO_OUTPUT_PORT_OFFSET ((uint32_t)4U)          /*!< GPIO event output port offset*/\r\n\r\n/*!\r\n    \\brief      reset GPIO port\r\n    \\param[in]  gpio_periph: GPIOx(x = A,B,C,D,E)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid gpio_deinit(uint32_t gpio_periph) {\r\n  switch (gpio_periph) {\r\n  case GPIOA:\r\n    /* reset GPIOA */\r\n    rcu_periph_reset_enable(RCU_GPIOARST);\r\n    rcu_periph_reset_disable(RCU_GPIOARST);\r\n    break;\r\n  case GPIOB:\r\n    /* reset GPIOB */\r\n    rcu_periph_reset_enable(RCU_GPIOBRST);\r\n    rcu_periph_reset_disable(RCU_GPIOBRST);\r\n    break;\r\n  case GPIOC:\r\n    /* reset GPIOC */\r\n    rcu_periph_reset_enable(RCU_GPIOCRST);\r\n    rcu_periph_reset_disable(RCU_GPIOCRST);\r\n    break;\r\n  case GPIOD:\r\n    /* reset GPIOD */\r\n    rcu_periph_reset_enable(RCU_GPIODRST);\r\n    rcu_periph_reset_disable(RCU_GPIODRST);\r\n    break;\r\n  case GPIOE:\r\n    /* reset GPIOE */\r\n    rcu_periph_reset_enable(RCU_GPIOERST);\r\n    rcu_periph_reset_disable(RCU_GPIOERST);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      reset alternate function I/O(AFIO)\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid gpio_afio_deinit(void) {\r\n  rcu_periph_reset_enable(RCU_AFRST);\r\n  rcu_periph_reset_disable(RCU_AFRST);\r\n}\r\n\r\n/*!\r\n    \\brief      GPIO parameter initialization\r\n    \\param[in]  gpio_periph: GPIOx(x = A,B,C,D,E)\r\n    \\param[in]  mode: gpio pin mode\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        GPIO_MODE_AIN: analog input mode\r\n      \\arg        GPIO_MODE_IN_FLOATING: floating input mode\r\n      \\arg        GPIO_MODE_IPD: pull-down input mode\r\n      \\arg        GPIO_MODE_IPU: pull-up input mode\r\n      \\arg        GPIO_MODE_OUT_OD: GPIO output with open-drain\r\n      \\arg        GPIO_MODE_OUT_PP: GPIO output with push-pull\r\n      \\arg        GPIO_MODE_AF_OD: AFIO output with open-drain\r\n      \\arg        GPIO_MODE_AF_PP: AFIO output with push-pull\r\n    \\param[in]  speed: gpio output max speed value\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        GPIO_OSPEED_10MHZ: output max speed 10MHz\r\n      \\arg        GPIO_OSPEED_2MHZ: output max speed 2MHz\r\n      \\arg        GPIO_OSPEED_50MHZ: output max speed 50MHz\r\n    \\param[in]  pin: GPIO pin\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        GPIO_PIN_x(x=0..15), GPIO_PIN_ALL\r\n\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid gpio_init(uint32_t gpio_periph, uint32_t mode, uint32_t speed, uint32_t pin) {\r\n  uint16_t i;\r\n  uint32_t temp_mode = 0U;\r\n  uint32_t reg       = 0U;\r\n\r\n  /* GPIO mode configuration */\r\n  temp_mode = (uint32_t)(mode & ((uint32_t)0x0FU));\r\n\r\n  /* GPIO speed configuration */\r\n  if (((uint32_t)0x00U) != ((uint32_t)mode & ((uint32_t)0x10U))) {\r\n    /* output mode max speed:10MHz,2MHz,50MHz */\r\n    temp_mode |= (uint32_t)speed;\r\n  }\r\n\r\n  /* configure the eight low port pins with GPIO_CTL0 */\r\n  for (i = 0U; i < 8U; i++) {\r\n    if ((1U << i) & pin) {\r\n      reg = GPIO_CTL0(gpio_periph);\r\n\r\n      /* clear the specified pin mode bits */\r\n      reg &= ~GPIO_MODE_MASK(i);\r\n      /* set the specified pin mode bits */\r\n      reg |= GPIO_MODE_SET(i, temp_mode);\r\n\r\n      /* set IPD or IPU */\r\n      if (GPIO_MODE_IPD == mode) {\r\n        /* reset the corresponding OCTL bit */\r\n        GPIO_BC(gpio_periph) = (uint32_t)((1U << i) & pin);\r\n      } else {\r\n        /* set the corresponding OCTL bit */\r\n        if (GPIO_MODE_IPU == mode) {\r\n          GPIO_BOP(gpio_periph) = (uint32_t)((1U << i) & pin);\r\n        }\r\n      }\r\n      /* set GPIO_CTL0 register */\r\n      GPIO_CTL0(gpio_periph) = reg;\r\n    }\r\n  }\r\n  /* configure the eight high port pins with GPIO_CTL1 */\r\n  for (i = 8U; i < 16U; i++) {\r\n    if ((1U << i) & pin) {\r\n      reg = GPIO_CTL1(gpio_periph);\r\n\r\n      /* clear the specified pin mode bits */\r\n      reg &= ~GPIO_MODE_MASK(i - 8U);\r\n      /* set the specified pin mode bits */\r\n      reg |= GPIO_MODE_SET(i - 8U, temp_mode);\r\n\r\n      /* set IPD or IPU */\r\n      if (GPIO_MODE_IPD == mode) {\r\n        /* reset the corresponding OCTL bit */\r\n        GPIO_BC(gpio_periph) = (uint32_t)((1U << i) & pin);\r\n      } else {\r\n        /* set the corresponding OCTL bit */\r\n        if (GPIO_MODE_IPU == mode) {\r\n          GPIO_BOP(gpio_periph) = (uint32_t)((1U << i) & pin);\r\n        }\r\n      }\r\n      /* set GPIO_CTL1 register */\r\n      GPIO_CTL1(gpio_periph) = reg;\r\n    }\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      set GPIO pin\r\n    \\param[in]  gpio_periph: GPIOx(x = A,B,C,D,E)\r\n    \\param[in]  pin: GPIO pin\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        GPIO_PIN_x(x=0..15), GPIO_PIN_ALL\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid gpio_bit_set(uint32_t gpio_periph, uint32_t pin) { GPIO_BOP(gpio_periph) = (uint32_t)pin; }\r\n\r\n/*!\r\n    \\brief      reset GPIO pin\r\n    \\param[in]  gpio_periph: GPIOx(x = A,B,C,D,E)\r\n    \\param[in]  pin: GPIO pin\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        GPIO_PIN_x(x=0..15), GPIO_PIN_ALL\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid gpio_bit_reset(uint32_t gpio_periph, uint32_t pin) { GPIO_BC(gpio_periph) = (uint32_t)pin; }\r\n\r\n/*!\r\n    \\brief      write data to the specified GPIO pin\r\n    \\param[in]  gpio_periph: GPIOx(x = A,B,C,D,E)\r\n    \\param[in]  pin: GPIO pin\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        GPIO_PIN_x(x=0..15), GPIO_PIN_ALL\r\n    \\param[in]  bit_value: SET or RESET\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RESET: clear the port pin\r\n      \\arg        SET: set the port pin\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid gpio_bit_write(uint32_t gpio_periph, uint32_t pin, bit_status bit_value) {\r\n  if (RESET != bit_value) {\r\n    GPIO_BOP(gpio_periph) = (uint32_t)pin;\r\n  } else {\r\n    GPIO_BC(gpio_periph) = (uint32_t)pin;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      write data to the specified GPIO port\r\n    \\param[in]  gpio_periph: GPIOx(x = A,B,C,D,E)\r\n    \\param[in]  data: specify the value to be written to the port output data register\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid gpio_port_write(uint32_t gpio_periph, uint16_t data) { GPIO_OCTL(gpio_periph) = (uint32_t)data; }\r\n\r\n/*!\r\n    \\brief      get GPIO pin input status\r\n    \\param[in]  gpio_periph: GPIOx(x = A,B,C,D,E)\r\n    \\param[in]  pin: GPIO pin\r\n                only one parameter can be selected which are shown as below:\r\n      \\arg        GPIO_PIN_x(x=0..15), GPIO_PIN_ALL\r\n    \\param[out] none\r\n    \\retval     input status of gpio pin: SET or RESET\r\n*/\r\nFlagStatus gpio_input_bit_get(uint32_t gpio_periph, uint32_t pin) {\r\n  if ((uint32_t)RESET != (GPIO_ISTAT(gpio_periph) & (pin))) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      get GPIO port input status\r\n    \\param[in]  gpio_periph: GPIOx(x = A,B,C,D,E)\r\n    \\param[out] none\r\n    \\retval     input status of gpio all pins\r\n*/\r\nuint16_t gpio_input_port_get(uint32_t gpio_periph) { return (uint16_t)(GPIO_ISTAT(gpio_periph)); }\r\n\r\n/*!\r\n    \\brief      get GPIO pin output status\r\n    \\param[in]  gpio_periph: GPIOx(x = A,B,C,D,E)\r\n    \\param[in]  pin: GPIO pin\r\n                only one parameter can be selected which are shown as below:\r\n      \\arg        GPIO_PIN_x(x=0..15), GPIO_PIN_ALL\r\n    \\param[out] none\r\n    \\retval     output status of gpio pin: SET or RESET\r\n*/\r\nFlagStatus gpio_output_bit_get(uint32_t gpio_periph, uint32_t pin) {\r\n  if ((uint32_t)RESET != (GPIO_OCTL(gpio_periph) & (pin))) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      get GPIO port output status\r\n    \\param[in]  gpio_periph: GPIOx(x = A,B,C,D,E)\r\n    \\param[out] none\r\n    \\retval     output status of gpio all pins\r\n*/\r\nuint16_t gpio_output_port_get(uint32_t gpio_periph) { return ((uint16_t)GPIO_OCTL(gpio_periph)); }\r\n\r\n/*!\r\n    \\brief      configure GPIO pin remap\r\n    \\param[in]  gpio_remap: select the pin to remap\r\n                only one parameter can be selected which are shown as below:\r\n      \\arg        GPIO_SPI0_REMAP: SPI0 remapping\r\n      \\arg        GPIO_I2C0_REMAP: I2C0 remapping\r\n      \\arg        GPIO_USART0_REMAP: USART0 remapping\r\n      \\arg        GPIO_USART1_REMAP: USART1 remapping\r\n      \\arg        GPIO_USART2_PARTIAL_REMAP: USART2 partial remapping\r\n      \\arg        GPIO_USART2_FULL_REMAP: USART2 full remapping\r\n      \\arg        GPIO_TIMER0_PARTIAL_REMAP: TIMER0 partial remapping\r\n      \\arg        GPIO_TIMER0_FULL_REMAP: TIMER0 full remapping\r\n      \\arg        GPIO_TIMER1_PARTIAL_REMAP0: TIMER1 partial remapping\r\n      \\arg        GPIO_TIMER1_PARTIAL_REMAP1: TIMER1 partial remapping\r\n      \\arg        GPIO_TIMER1_FULL_REMAP: TIMER1 full remapping\r\n      \\arg        GPIO_TIMER2_PARTIAL_REMAP: TIMER2 partial remapping\r\n      \\arg        GPIO_TIMER2_FULL_REMAP: TIMER2 full remapping\r\n      \\arg        GPIO_TIMER3_REMAP: TIMER3 remapping\r\n      \\arg        GPIO_CAN0_PARTIAL_REMAP: CAN0 partial remapping\r\n      \\arg        GPIO_CAN0_FULL_REMAP: CAN0 full remapping\r\n      \\arg        GPIO_PD01_REMAP: PD01 remapping\r\n      \\arg        GPIO_TIMER4CH3_IREMAP: TIMER4 channel3 internal remapping\r\n      \\arg        GPIO_CAN1_REMAP: CAN1 remapping\r\n      \\arg        GPIO_SWJ_NONJTRST_REMAP: JTAG-DP,but without NJTRST\r\n      \\arg        GPIO_SWJ_DISABLE_REMAP: JTAG-DP disabled\r\n      \\arg        GPIO_SPI2_REMAP: SPI2 remapping\r\n      \\arg        GPIO_TIMER1ITI1_REMAP: TIMER1 internal trigger 1 remapping\r\n      \\arg        GPIO_EXMC_NADV_REMAP: EXMC_NADV connect/disconnect\r\n    \\param[in]  newvalue: ENABLE or DISABLE\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid gpio_pin_remap_config(uint32_t remap, ControlStatus newvalue) {\r\n  uint32_t remap1 = 0U, remap2 = 0U, temp_reg = 0U, temp_mask = 0U;\r\n\r\n  if (AFIO_PCF1_FIELDS == (remap & AFIO_PCF1_FIELDS)) {\r\n    /* get AFIO_PCF1 regiter value */\r\n    temp_reg = AFIO_PCF1;\r\n  } else {\r\n    /* get AFIO_PCF0 regiter value */\r\n    temp_reg = AFIO_PCF0;\r\n  }\r\n\r\n  temp_mask = (remap & PCF_POSITION_MASK) >> 0x10U;\r\n  remap1    = remap & LSB_16BIT_MASK;\r\n\r\n  /* judge pin remap type */\r\n  if ((PCF_LOCATION1_MASK | PCF_LOCATION2_MASK) == (remap & (PCF_LOCATION1_MASK | PCF_LOCATION2_MASK))) {\r\n    temp_reg &= PCF_SWJCFG_MASK;\r\n    AFIO_PCF0 &= PCF_SWJCFG_MASK;\r\n  } else if (PCF_LOCATION2_MASK == (remap & PCF_LOCATION2_MASK)) {\r\n    remap2 = ((uint32_t)0x03U) << temp_mask;\r\n    temp_reg &= ~remap2;\r\n    temp_reg |= ~PCF_SWJCFG_MASK;\r\n  } else {\r\n    temp_reg &= ~(remap1 << ((remap >> 0x15U) * 0x10U));\r\n    temp_reg |= ~PCF_SWJCFG_MASK;\r\n  }\r\n\r\n  /* set pin remap value */\r\n  if (DISABLE != newvalue) {\r\n    temp_reg |= (remap1 << ((remap >> 0x15U) * 0x10U));\r\n  }\r\n\r\n  if (AFIO_PCF1_FIELDS == (remap & AFIO_PCF1_FIELDS)) {\r\n    /* set AFIO_PCF1 regiter value */\r\n    AFIO_PCF1 = temp_reg;\r\n  } else {\r\n    /* set AFIO_PCF0 regiter value */\r\n    AFIO_PCF0 = temp_reg;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      select GPIO pin exti sources\r\n    \\param[in]  gpio_outputport: gpio event output port\r\n                only one parameter can be selected which are shown as below:\r\n      \\arg        GPIO_PORT_SOURCE_GPIOA: output port source A\r\n      \\arg        GPIO_PORT_SOURCE_GPIOB: output port source B\r\n      \\arg        GPIO_PORT_SOURCE_GPIOC: output port source C\r\n      \\arg        GPIO_PORT_SOURCE_GPIOD: output port source D\r\n      \\arg        GPIO_PORT_SOURCE_GPIOE: output port source E\r\n    \\param[in]  gpio_outputpin: GPIO_PIN_SOURCE_x(x=0..15)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid gpio_exti_source_select(uint8_t output_port, uint8_t output_pin) {\r\n  uint32_t source = 0U;\r\n  source          = ((uint32_t)0x0FU) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK));\r\n\r\n  /* select EXTI sources */\r\n  if (GPIO_PIN_SOURCE_4 > output_pin) {\r\n    /* select EXTI0/EXTI1/EXTI2/EXTI3 */\r\n    AFIO_EXTISS0 &= ~source;\r\n    AFIO_EXTISS0 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK)));\r\n  } else if (GPIO_PIN_SOURCE_8 > output_pin) {\r\n    /* select EXTI4/EXTI5/EXTI6/EXTI7 */\r\n    AFIO_EXTISS1 &= ~source;\r\n    AFIO_EXTISS1 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK)));\r\n  } else if (GPIO_PIN_SOURCE_12 > output_pin) {\r\n    /* select EXTI8/EXTI9/EXTI10/EXTI11 */\r\n    AFIO_EXTISS2 &= ~source;\r\n    AFIO_EXTISS2 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK)));\r\n  } else {\r\n    /* select EXTI12/EXTI13/EXTI14/EXTI15 */\r\n    AFIO_EXTISS3 &= ~source;\r\n    AFIO_EXTISS3 |= (((uint32_t)output_port) << (AFIO_EXTI_SOURCE_FIELDS * (output_pin & AFIO_EXTI_SOURCE_MASK)));\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure GPIO pin event output\r\n    \\param[in]  output_port: gpio event output port\r\n                only one parameter can be selected which are shown as below:\r\n      \\arg        GPIO_EVENT_PORT_GPIOA: event output port A\r\n      \\arg        GPIO_EVENT_PORT_GPIOB: event output port B\r\n      \\arg        GPIO_EVENT_PORT_GPIOC: event output port C\r\n      \\arg        GPIO_EVENT_PORT_GPIOD: event output port D\r\n      \\arg        GPIO_EVENT_PORT_GPIOE: event output port E\r\n    \\param[in]  output_pin:\r\n                only one parameter can be selected which are shown as below:\r\n      \\arg        GPIO_EVENT_PIN_x(x=0..15)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid gpio_event_output_config(uint8_t output_port, uint8_t output_pin) {\r\n  uint32_t reg = 0U;\r\n  reg          = AFIO_EC;\r\n\r\n  /* clear AFIO_EC_PORT and AFIO_EC_PIN bits */\r\n  reg &= (uint32_t)(~(AFIO_EC_PORT | AFIO_EC_PIN));\r\n\r\n  reg |= (uint32_t)((uint32_t)output_port << GPIO_OUTPUT_PORT_OFFSET);\r\n  reg |= (uint32_t)output_pin;\r\n\r\n  AFIO_EC = reg;\r\n}\r\n\r\n/*!\r\n    \\brief      enable GPIO pin event output\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid gpio_event_output_enable(void) { AFIO_EC |= AFIO_EC_EOE; }\r\n\r\n/*!\r\n    \\brief      disable GPIO pin event output\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid gpio_event_output_disable(void) { AFIO_EC &= (uint32_t)(~AFIO_EC_EOE); }\r\n\r\n/*!\r\n    \\brief      lock GPIO pin\r\n    \\param[in]  gpio_periph: GPIOx(x = A,B,C,D,E)\r\n    \\param[in]  pin: GPIO pin\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        GPIO_PIN_x(x=0..15), GPIO_PIN_ALL\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid gpio_pin_lock(uint32_t gpio_periph, uint32_t pin) {\r\n  uint32_t lock = 0x00010000U;\r\n  lock |= pin;\r\n\r\n  /* lock key writing sequence: write 1 -> write 0 -> write 1 -> read 0 -> read 1 */\r\n  GPIO_LOCK(gpio_periph) = (uint32_t)lock;\r\n  GPIO_LOCK(gpio_periph) = (uint32_t)pin;\r\n  GPIO_LOCK(gpio_periph) = (uint32_t)lock;\r\n  lock                   = GPIO_LOCK(gpio_periph);\r\n  lock                   = GPIO_LOCK(gpio_periph);\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_i2c.c",
    "content": "/*!\r\n    \\file    gd32vf103_i2c.c\r\n    \\brief   I2C driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_i2c.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n/* I2C register bit mask */\r\n#define I2CCLK_MAX        ((uint32_t)0x00000036U) /*!< i2cclk maximum value */\r\n#define I2CCLK_MIN        ((uint32_t)0x00000002U) /*!< i2cclk minimum value */\r\n#define I2C_FLAG_MASK     ((uint32_t)0x0000FFFFU) /*!< i2c flag mask */\r\n#define I2C_ADDRESS_MASK  ((uint32_t)0x000003FFU) /*!< i2c address mask */\r\n#define I2C_ADDRESS2_MASK ((uint32_t)0x000000FEU) /*!< the second i2c address mask */\r\n\r\n/* I2C register bit offset */\r\n#define STAT1_PECV_OFFSET ((uint32_t)8U) /* bit offset of PECV in I2C_STAT1 */\r\n\r\n/*!\r\n    \\brief      reset I2C\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_deinit(uint32_t i2c_periph) {\r\n  switch (i2c_periph) {\r\n  case I2C0:\r\n    /* reset I2C0 */\r\n    rcu_periph_reset_enable(RCU_I2C0RST);\r\n    rcu_periph_reset_disable(RCU_I2C0RST);\r\n    break;\r\n  case I2C1:\r\n    /* reset I2C1 */\r\n    rcu_periph_reset_enable(RCU_I2C1RST);\r\n    rcu_periph_reset_disable(RCU_I2C1RST);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure I2C clock\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  clkspeed: I2C clock speed, supports standard mode (up to 100 kHz), fast mode (up to 400 kHz)\r\n                          and fast mode plus (up to 1MHz)\r\n    \\param[in]  dutycyc: duty cycle in fast mode or fast mode plus\r\n                only one parameter can be selected which is shown as below:\r\n     \\arg        I2C_DTCY_2: T_low/T_high=2\r\n     \\arg        I2C_DTCY_16_9: T_low/T_high=16/9\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_clock_config(uint32_t i2c_periph, uint32_t clkspeed, uint32_t dutycyc) {\r\n  uint32_t pclk1, clkc, freq, risetime;\r\n  uint32_t temp;\r\n\r\n  pclk1 = rcu_clock_freq_get(CK_APB1);\r\n  /* I2C peripheral clock frequency */\r\n  freq = (uint32_t)(pclk1 / 1000000U);\r\n  if (freq >= I2CCLK_MAX) {\r\n    freq = I2CCLK_MAX;\r\n  }\r\n  temp = I2C_CTL1(i2c_periph);\r\n  temp &= ~I2C_CTL1_I2CCLK;\r\n  temp |= freq;\r\n\r\n  I2C_CTL1(i2c_periph) = temp;\r\n  if (100000U >= clkspeed) {\r\n    /* the maximum SCL rise time is 1000ns in standard mode */\r\n    risetime = (uint32_t)((pclk1 / 1000000U) + 1U);\r\n    if (risetime >= I2CCLK_MAX) {\r\n      I2C_RT(i2c_periph) = I2CCLK_MAX;\r\n    } else if (risetime <= I2CCLK_MIN) {\r\n      I2C_RT(i2c_periph) = I2CCLK_MIN;\r\n    } else {\r\n      I2C_RT(i2c_periph) = risetime;\r\n    }\r\n    clkc = (uint32_t)(pclk1 / (clkspeed * 2U));\r\n    if (clkc < 0x04U) {\r\n      /* the CLKC in standard mode minmum value is 4 */\r\n      clkc = 0x04U;\r\n    }\r\n    I2C_CKCFG(i2c_periph) |= (I2C_CKCFG_CLKC & clkc);\r\n\r\n  } else if (400000U >= clkspeed) {\r\n    /* the maximum SCL rise time is 300ns in fast mode */\r\n    I2C_RT(i2c_periph) = (uint32_t)(((freq * (uint32_t)300U) / (uint32_t)1000U) + (uint32_t)1U);\r\n    if (I2C_DTCY_2 == dutycyc) {\r\n      /* I2C duty cycle is 2 */\r\n      clkc = (uint32_t)(pclk1 / (clkspeed * 3U));\r\n      I2C_CKCFG(i2c_periph) &= ~I2C_CKCFG_DTCY;\r\n    } else {\r\n      /* I2C duty cycle is 16/9 */\r\n      clkc = (uint32_t)(pclk1 / (clkspeed * 25U));\r\n      I2C_CKCFG(i2c_periph) |= I2C_CKCFG_DTCY;\r\n    }\r\n    if (0U == (clkc & I2C_CKCFG_CLKC)) {\r\n      /* the CLKC in fast mode minmum value is 1 */\r\n      clkc |= 0x0001U;\r\n    }\r\n    I2C_CKCFG(i2c_periph) |= I2C_CKCFG_FAST;\r\n    I2C_CKCFG(i2c_periph) |= clkc;\r\n  } else {\r\n    /* fast mode plus, the maximum SCL rise time is 120ns */\r\n    I2C_RT(i2c_periph) = (uint32_t)(((freq * (uint32_t)120U) / (uint32_t)1000U) + (uint32_t)1U);\r\n    if (I2C_DTCY_2 == dutycyc) {\r\n      /* I2C duty cycle is 2 */\r\n      clkc = (uint32_t)(pclk1 / (clkspeed * 3U));\r\n      I2C_CKCFG(i2c_periph) &= ~I2C_CKCFG_DTCY;\r\n    } else {\r\n      /* I2C duty cycle is 16/9 */\r\n      clkc = (uint32_t)(pclk1 / (clkspeed * 25U));\r\n      I2C_CKCFG(i2c_periph) |= I2C_CKCFG_DTCY;\r\n    }\r\n    /* enable fast mode */\r\n    I2C_CKCFG(i2c_periph) |= I2C_CKCFG_FAST;\r\n    I2C_CKCFG(i2c_periph) |= clkc;\r\n    /* enable I2C fast mode plus */\r\n    I2C_FMPCFG(i2c_periph) |= I2C_FMPCFG_FMPEN;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure I2C address\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  mode:\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_I2CMODE_ENABLE: I2C mode\r\n    \\arg        I2C_SMBUSMODE_ENABLE: SMBus mode\r\n    \\param[in]  addformat: 7bits or 10bits\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_ADDFORMAT_7BITS: 7bits\r\n    \\arg        I2C_ADDFORMAT_10BITS: 10bits\r\n    \\param[in]  addr: I2C address\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_mode_addr_config(uint32_t i2c_periph, uint32_t mode, uint32_t addformat, uint32_t addr) {\r\n  /* SMBus/I2C mode selected */\r\n  uint32_t ctl = 0U;\r\n\r\n  ctl = I2C_CTL0(i2c_periph);\r\n  ctl &= ~(I2C_CTL0_SMBEN);\r\n  ctl |= mode;\r\n  I2C_CTL0(i2c_periph) = ctl;\r\n  /* configure address */\r\n  addr                   = addr & I2C_ADDRESS_MASK;\r\n  I2C_SADDR0(i2c_periph) = (addformat | addr);\r\n}\r\n\r\n/*!\r\n    \\brief      SMBus type selection\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  type:\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_SMBUS_DEVICE: device\r\n    \\arg        I2C_SMBUS_HOST: host\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_smbus_type_config(uint32_t i2c_periph, uint32_t type) {\r\n  if (I2C_SMBUS_HOST == type) {\r\n    I2C_CTL0(i2c_periph) |= I2C_CTL0_SMBSEL;\r\n  } else {\r\n    I2C_CTL0(i2c_periph) &= ~(I2C_CTL0_SMBSEL);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      whether or not to send an ACK\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  ack:\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_ACK_ENABLE: ACK will be sent\r\n    \\arg        I2C_ACK_DISABLE: ACK will not be sent\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_ack_config(uint32_t i2c_periph, uint32_t ack) {\r\n  if (I2C_ACK_ENABLE == ack) {\r\n    I2C_CTL0(i2c_periph) |= I2C_CTL0_ACKEN;\r\n  } else {\r\n    I2C_CTL0(i2c_periph) &= ~(I2C_CTL0_ACKEN);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure I2C POAP position\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  pos:\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_ACKPOS_CURRENT: whether to send ACK or not for the current\r\n    \\arg        I2C_ACKPOS_NEXT: whether to send ACK or not for the next byte\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_ackpos_config(uint32_t i2c_periph, uint32_t pos) {\r\n  /* configure I2C POAP position */\r\n  if (I2C_ACKPOS_NEXT == pos) {\r\n    I2C_CTL0(i2c_periph) |= I2C_CTL0_POAP;\r\n  } else {\r\n    I2C_CTL0(i2c_periph) &= ~(I2C_CTL0_POAP);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      master sends slave address\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  addr: slave address\r\n    \\param[in]  trandirection: transmitter or receiver\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_TRANSMITTER: transmitter\r\n    \\arg        I2C_RECEIVER:    receiver\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_master_addressing(uint32_t i2c_periph, uint32_t addr, uint32_t trandirection) {\r\n  /* master is a transmitter or a receiver */\r\n  if (I2C_TRANSMITTER == trandirection) {\r\n    addr = addr & I2C_TRANSMITTER;\r\n  } else {\r\n    addr = addr | I2C_RECEIVER;\r\n  }\r\n  /* send slave address */\r\n  I2C_DATA(i2c_periph) = addr;\r\n}\r\n\r\n/*!\r\n    \\brief      enable dual-address mode\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  dualaddr: the second address in dual-address mode\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid i2c_dualaddr_enable(uint32_t i2c_periph, uint32_t dualaddr) {\r\n  /* configure address */\r\n  dualaddr               = dualaddr & I2C_ADDRESS2_MASK;\r\n  I2C_SADDR1(i2c_periph) = (I2C_SADDR1_DUADEN | dualaddr);\r\n}\r\n\r\n/*!\r\n    \\brief      disable dual-address mode\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid i2c_dualaddr_disable(uint32_t i2c_periph) { I2C_SADDR1(i2c_periph) &= ~(I2C_SADDR1_DUADEN); }\r\n\r\n/*!\r\n    \\brief      enable I2C\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_enable(uint32_t i2c_periph) { I2C_CTL0(i2c_periph) |= I2C_CTL0_I2CEN; }\r\n\r\n/*!\r\n    \\brief      disable I2C\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_disable(uint32_t i2c_periph) { I2C_CTL0(i2c_periph) &= ~(I2C_CTL0_I2CEN); }\r\n\r\n/*!\r\n    \\brief      generate a START condition on I2C bus\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_start_on_bus(uint32_t i2c_periph) { I2C_CTL0(i2c_periph) |= I2C_CTL0_START; }\r\n\r\n/*!\r\n    \\brief      generate a STOP condition on I2C bus\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_stop_on_bus(uint32_t i2c_periph) { I2C_CTL0(i2c_periph) |= I2C_CTL0_STOP; }\r\n\r\n/*!\r\n    \\brief      I2C transmit data function\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  data: data of transmission\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_data_transmit(uint32_t i2c_periph, uint8_t data) { I2C_DATA(i2c_periph) = DATA_TRANS(data); }\r\n\r\n/*!\r\n    \\brief      I2C receive data function\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[out] none\r\n    \\retval     data of received\r\n */\r\nuint8_t i2c_data_receive(uint32_t i2c_periph) { return (uint8_t)DATA_RECV(I2C_DATA(i2c_periph)); }\r\n\r\n/*!\r\n    \\brief      enable I2C DMA mode\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  dmastate:\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_DMA_ON: DMA mode enable\r\n    \\arg        I2C_DMA_OFF: DMA mode disable\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_dma_enable(uint32_t i2c_periph, uint32_t dmastate) {\r\n  /* configure I2C DMA function */\r\n  uint32_t ctl = 0U;\r\n\r\n  ctl = I2C_CTL1(i2c_periph);\r\n  ctl &= ~(I2C_CTL1_DMAON);\r\n  ctl |= dmastate;\r\n  I2C_CTL1(i2c_periph) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      configure whether next DMA EOT is DMA last transfer or not\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  dmalast:\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_DMALST_ON: next DMA EOT is the last transfer\r\n    \\arg        I2C_DMALST_OFF: next DMA EOT is not the last transfer\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_dma_last_transfer_config(uint32_t i2c_periph, uint32_t dmalast) {\r\n  /* configure DMA last transfer */\r\n  uint32_t ctl = 0U;\r\n\r\n  ctl = I2C_CTL1(i2c_periph);\r\n  ctl &= ~(I2C_CTL1_DMALST);\r\n  ctl |= dmalast;\r\n  I2C_CTL1(i2c_periph) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      whether to stretch SCL low when data is not ready in slave mode\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  stretchpara:\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_SCLSTRETCH_ENABLE: SCL stretching is enabled\r\n    \\arg        I2C_SCLSTRETCH_DISABLE: SCL stretching is disabled\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_stretch_scl_low_config(uint32_t i2c_periph, uint32_t stretchpara) {\r\n  /* configure I2C SCL strerching enable or disable */\r\n  uint32_t ctl = 0U;\r\n\r\n  ctl = I2C_CTL0(i2c_periph);\r\n  ctl &= ~(I2C_CTL0_SS);\r\n  ctl |= stretchpara;\r\n  I2C_CTL0(i2c_periph) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      whether or not to response to a general call\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  gcallpara:\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_GCEN_ENABLE: slave will response to a general call\r\n    \\arg        I2C_GCEN_DISABLE: slave will not response to a general call\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_slave_response_to_gcall_config(uint32_t i2c_periph, uint32_t gcallpara) {\r\n  /* configure slave response to a general call enable or disable */\r\n  uint32_t ctl = 0U;\r\n\r\n  ctl = I2C_CTL0(i2c_periph);\r\n  ctl &= ~(I2C_CTL0_GCEN);\r\n  ctl |= gcallpara;\r\n  I2C_CTL0(i2c_periph) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      software reset I2C\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  sreset:\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_SRESET_SET: I2C is under reset\r\n    \\arg        I2C_SRESET_RESET: I2C is not under reset\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_software_reset_config(uint32_t i2c_periph, uint32_t sreset) {\r\n  /* modify CTL0 and configure software reset I2C state */\r\n  uint32_t ctl = 0U;\r\n\r\n  ctl = I2C_CTL0(i2c_periph);\r\n  ctl &= ~(I2C_CTL0_SRESET);\r\n  ctl |= sreset;\r\n  I2C_CTL0(i2c_periph) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      I2C PEC calculation on or off\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  pecpara:\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_PEC_ENABLE: PEC calculation on\r\n    \\arg        I2C_PEC_DISABLE: PEC calculation off\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_pec_enable(uint32_t i2c_periph, uint32_t pecstate) {\r\n  /* on/off PEC calculation */\r\n  uint32_t ctl = 0U;\r\n\r\n  ctl = I2C_CTL0(i2c_periph);\r\n  ctl &= ~(I2C_CTL0_PECEN);\r\n  ctl |= pecstate;\r\n  I2C_CTL0(i2c_periph) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      I2C whether to transfer PEC value\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  pecpara:\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_PECTRANS_ENABLE: transfer PEC\r\n    \\arg        I2C_PECTRANS_DISABLE: not transfer PEC\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_pec_transfer_enable(uint32_t i2c_periph, uint32_t pecpara) {\r\n  /* whether to transfer PEC */\r\n  uint32_t ctl = 0U;\r\n\r\n  ctl = I2C_CTL0(i2c_periph);\r\n  ctl &= ~(I2C_CTL0_PECTRANS);\r\n  ctl |= pecpara;\r\n  I2C_CTL0(i2c_periph) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      get packet error checking value\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[out] none\r\n    \\retval     PEC value\r\n */\r\nuint8_t i2c_pec_value_get(uint32_t i2c_periph) { return (uint8_t)((I2C_STAT1(i2c_periph) & I2C_STAT1_PECV) >> STAT1_PECV_OFFSET); }\r\n\r\n/*!\r\n    \\brief      I2C issue alert through SMBA pin\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  smbuspara:\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_SALTSEND_ENABLE: issue alert through SMBA pin\r\n    \\arg        I2C_SALTSEND_DISABLE: not issue alert through SMBA pin\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_smbus_issue_alert(uint32_t i2c_periph, uint32_t smbuspara) {\r\n  /* issue alert through SMBA pin configure*/\r\n  uint32_t ctl = 0U;\r\n\r\n  ctl = I2C_CTL0(i2c_periph);\r\n  ctl &= ~(I2C_CTL0_SALT);\r\n  ctl |= smbuspara;\r\n  I2C_CTL0(i2c_periph) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      enable or disable I2C ARP protocol in SMBus switch\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  arpstate:\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_ARP_ENABLE: enable ARP\r\n    \\arg        I2C_ARP_DISABLE: disable ARP\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_smbus_arp_enable(uint32_t i2c_periph, uint32_t arpstate) {\r\n  /* enable or disable I2C ARP protocol*/\r\n  uint32_t ctl = 0U;\r\n\r\n  ctl = I2C_CTL0(i2c_periph);\r\n  ctl &= ~(I2C_CTL0_ARPEN);\r\n  ctl |= arpstate;\r\n  I2C_CTL0(i2c_periph) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      check I2C flag is set or not\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  flag: I2C flags, refer to i2c_flag_enum\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_FLAG_SBSEND: start condition send out\r\n    \\arg        I2C_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode\r\n    \\arg        I2C_FLAG_BTC: byte transmission finishes\r\n    \\arg        I2C_FLAG_ADD10SEND: header of 10-bit address is sent in master mode\r\n    \\arg        I2C_FLAG_STPDET: stop condition detected in slave mode\r\n    \\arg        I2C_FLAG_RBNE: I2C_DATA is not Empty during receiving\r\n    \\arg        I2C_FLAG_TBE: I2C_DATA is empty during transmitting\r\n    \\arg        I2C_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus\r\n    \\arg        I2C_FLAG_LOSTARB: arbitration lost in master mode\r\n    \\arg        I2C_FLAG_AERR: acknowledge error\r\n    \\arg        I2C_FLAG_OUERR: overrun or underrun situation occurs in slave mode\r\n    \\arg        I2C_FLAG_PECERR: PEC error when receiving data\r\n    \\arg        I2C_FLAG_SMBTO: timeout signal in SMBus mode\r\n    \\arg        I2C_FLAG_SMBALT: SMBus alert status\r\n    \\arg        I2C_FLAG_MASTER: a flag indicating whether I2C block is in master or slave mode\r\n    \\arg        I2C_FLAG_I2CBSY: busy flag\r\n    \\arg        I2C_FLAG_TR: whether the I2C is a transmitter or a receiver\r\n    \\arg        I2C_FLAG_RXGC: general call address (00h) received\r\n    \\arg        I2C_FLAG_DEFSMB: default address of SMBus device\r\n    \\arg        I2C_FLAG_HSTSMB: SMBus host header detected in slave mode\r\n    \\arg        I2C_FLAG_DUMODF: dual flag in slave mode indicating which address is matched in dual-address mode\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n */\r\nFlagStatus i2c_flag_get(uint32_t i2c_periph, i2c_flag_enum flag) {\r\n  if (RESET != (I2C_REG_VAL(i2c_periph, flag) & BIT(I2C_BIT_POS(flag)))) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear I2C flag\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  flag: I2C flags, refer to i2c_flag_enum\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_FLAG_SMBALT: SMBus Alert status\r\n    \\arg        I2C_FLAG_SMBTO: timeout signal in SMBus mode\r\n    \\arg        I2C_FLAG_PECERR: PEC error when receiving data\r\n    \\arg        I2C_FLAG_OUERR: over-run or under-run situation occurs in slave mode\r\n    \\arg        I2C_FLAG_AERR: acknowledge error\r\n    \\arg        I2C_FLAG_LOSTARB: arbitration lost in master mode\r\n    \\arg        I2C_FLAG_BERR: a bus error\r\n    \\arg        I2C_FLAG_ADDSEND: cleared by reading I2C_STAT0 and reading I2C_STAT1\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_flag_clear(uint32_t i2c_periph, i2c_flag_enum flag) {\r\n  if (I2C_FLAG_ADDSEND == flag) {\r\n    /* read I2C_STAT0 and then read I2C_STAT1 to clear ADDSEND */\r\n    I2C_STAT0(i2c_periph);\r\n    I2C_STAT1(i2c_periph);\r\n  } else {\r\n    I2C_REG_VAL(i2c_periph, flag) &= ~BIT(I2C_BIT_POS(flag));\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      enable I2C interrupt\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  interrupt: I2C interrupts, refer to i2c_interrupt_enum\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_INT_ERR: error interrupt enable\r\n    \\arg        I2C_INT_EV: event interrupt enable\r\n    \\arg        I2C_INT_BUF: buffer interrupt enable\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_interrupt_enable(uint32_t i2c_periph, i2c_interrupt_enum interrupt) { I2C_REG_VAL(i2c_periph, interrupt) |= BIT(I2C_BIT_POS(interrupt)); }\r\n\r\n/*!\r\n    \\brief      disable I2C interrupt\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  interrupt: I2C interrupts, refer to i2c_flag_enum\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_INT_ERR: error interrupt enable\r\n    \\arg        I2C_INT_EV: event interrupt enable\r\n    \\arg        I2C_INT_BUF: buffer interrupt enable\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_interrupt_disable(uint32_t i2c_periph, i2c_interrupt_enum interrupt) { I2C_REG_VAL(i2c_periph, interrupt) &= ~BIT(I2C_BIT_POS(interrupt)); }\r\n\r\n/*!\r\n    \\brief      check I2C interrupt flag\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  int_flag: I2C interrupt flags, refer to i2c_interrupt_flag_enum\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_INT_FLAG_SBSEND: start condition sent out in master mode interrupt flag\r\n    \\arg        I2C_INT_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode interrupt flag\r\n    \\arg        I2C_INT_FLAG_BTC: byte transmission finishes\r\n    \\arg        I2C_INT_FLAG_ADD10SEND: header of 10-bit address is sent in master mode interrupt flag\r\n    \\arg        I2C_INT_FLAG_STPDET: stop condition detected in slave mode interrupt flag\r\n    \\arg        I2C_INT_FLAG_RBNE: I2C_DATA is not Empty during receiving interrupt flag\r\n    \\arg        I2C_INT_FLAG_TBE: I2C_DATA is empty during transmitting interrupt flag\r\n    \\arg        I2C_INT_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus interrupt flag\r\n    \\arg        I2C_INT_FLAG_LOSTARB: arbitration lost in master mode interrupt flag\r\n    \\arg        I2C_INT_FLAG_AERR: acknowledge error interrupt flag\r\n    \\arg        I2C_INT_FLAG_OUERR: over-run or under-run situation occurs in slave mode interrupt flag\r\n    \\arg        I2C_INT_FLAG_PECERR: PEC error when receiving data interrupt flag\r\n    \\arg        I2C_INT_FLAG_SMBTO: timeout signal in SMBus mode interrupt flag\r\n    \\arg        I2C_INT_FLAG_SMBALT: SMBus Alert status interrupt flag\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n */\r\nFlagStatus i2c_interrupt_flag_get(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag) {\r\n  uint32_t intenable = 0U, flagstatus = 0U, bufie;\r\n\r\n  /* check BUFIE */\r\n  bufie = I2C_CTL1(i2c_periph) & I2C_CTL1_BUFIE;\r\n\r\n  /* get the interrupt enable bit status */\r\n  intenable = (I2C_REG_VAL(i2c_periph, int_flag) & BIT(I2C_BIT_POS(int_flag)));\r\n  /* get the corresponding flag bit status */\r\n  flagstatus = (I2C_REG_VAL2(i2c_periph, int_flag) & BIT(I2C_BIT_POS2(int_flag)));\r\n\r\n  if ((I2C_INT_FLAG_RBNE == int_flag) || (I2C_INT_FLAG_TBE == int_flag)) {\r\n    if (intenable && bufie) {\r\n      intenable = 1U;\r\n    } else {\r\n      intenable = 0U;\r\n    }\r\n  }\r\n  if ((0U != flagstatus) && (0U != intenable)) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear I2C interrupt flag\r\n    \\param[in]  i2c_periph: I2Cx(x=0,1)\r\n    \\param[in]  int_flag: I2C interrupt flags, refer to i2c_interrupt_flag_enum\r\n                only one parameter can be selected which is shown as below:\r\n    \\arg        I2C_INT_FLAG_ADDSEND: address is sent in master mode or received and matches in slave mode interrupt flag\r\n    \\arg        I2C_INT_FLAG_BERR: a bus error occurs indication a unexpected start or stop condition on I2C bus interrupt flag\r\n    \\arg        I2C_INT_FLAG_LOSTARB: arbitration lost in master mode interrupt flag\r\n    \\arg        I2C_INT_FLAG_AERR: acknowledge error interrupt flag\r\n    \\arg        I2C_INT_FLAG_OUERR: over-run or under-run situation occurs in slave mode interrupt flag\r\n    \\arg        I2C_INT_FLAG_PECERR: PEC error when receiving data interrupt flag\r\n    \\arg        I2C_INT_FLAG_SMBTO: timeout signal in SMBus mode interrupt flag\r\n    \\arg        I2C_INT_FLAG_SMBALT: SMBus Alert status interrupt flag\r\n    \\param[out] none\r\n    \\retval     none\r\n */\r\nvoid i2c_interrupt_flag_clear(uint32_t i2c_periph, i2c_interrupt_flag_enum int_flag) {\r\n  if (I2C_INT_FLAG_ADDSEND == int_flag) {\r\n    /* read I2C_STAT0 and then read I2C_STAT1 to clear ADDSEND */\r\n    I2C_STAT0(i2c_periph);\r\n    I2C_STAT1(i2c_periph);\r\n  } else {\r\n    I2C_REG_VAL2(i2c_periph, int_flag) &= ~BIT(I2C_BIT_POS2(int_flag));\r\n  }\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_pmu.c",
    "content": "/*!\r\n    \\file    gd32vf103_pmu.c\r\n    \\brief   PMU driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_pmu.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n#include \"riscv_encoding.h\"\r\n/*!\r\n    \\brief      reset PMU register\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid pmu_deinit(void) {\r\n  /* reset PMU */\r\n  rcu_periph_reset_enable(RCU_PMURST);\r\n  rcu_periph_reset_disable(RCU_PMURST);\r\n}\r\n\r\n/*!\r\n    \\brief      select low voltage detector threshold\r\n    \\param[in]  lvdt_n:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        PMU_LVDT_0: voltage threshold is 2.2V\r\n      \\arg        PMU_LVDT_1: voltage threshold is 2.3V\r\n      \\arg        PMU_LVDT_2: voltage threshold is 2.4V\r\n      \\arg        PMU_LVDT_3: voltage threshold is 2.5V\r\n      \\arg        PMU_LVDT_4: voltage threshold is 2.6V\r\n      \\arg        PMU_LVDT_5: voltage threshold is 2.7V\r\n      \\arg        PMU_LVDT_6: voltage threshold is 2.8V\r\n      \\arg        PMU_LVDT_7: voltage threshold is 2.9V\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid pmu_lvd_select(uint32_t lvdt_n) {\r\n  /* disable LVD */\r\n  PMU_CTL &= ~PMU_CTL_LVDEN;\r\n  /* clear LVDT bits */\r\n  PMU_CTL &= ~PMU_CTL_LVDT;\r\n  /* set LVDT bits according to lvdt_n */\r\n  PMU_CTL |= lvdt_n;\r\n  /* enable LVD */\r\n  PMU_CTL |= PMU_CTL_LVDEN;\r\n}\r\n\r\n/*!\r\n    \\brief      disable PMU lvd\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid pmu_lvd_disable(void) {\r\n  /* disable LVD */\r\n  PMU_CTL &= ~PMU_CTL_LVDEN;\r\n}\r\n\r\n/*!\r\n    \\brief      PMU work at sleep mode\r\n    \\param[in]  sleepmodecmd:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        WFI_CMD: use WFI command\r\n      \\arg        WFE_CMD: use WFE command\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid pmu_to_sleepmode(uint8_t sleepmodecmd) {\r\n  /* clear sleepdeep bit of RISC-V system control register */\r\n  clear_csr(0x811U, 0x1U);\r\n\r\n  /* select WFI or WFE command to enter sleep mode */\r\n  if (WFI_CMD == sleepmodecmd) {\r\n    __WFI();\r\n  } else {\r\n    clear_csr(mstatus, MSTATUS_MIE);\r\n    set_csr(0x810U, 0x1U);\r\n    __WFI();\r\n    clear_csr(0x810U, 0x1U);\r\n    set_csr(mstatus, MSTATUS_MIE);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      PMU work at deepsleep mode\r\n    \\param[in]  ldo:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        PMU_LDO_NORMAL: LDO work at normal power mode when pmu enter deepsleep mode\r\n      \\arg        PMU_LDO_LOWPOWER: LDO work at low power mode when pmu enter deepsleep mode\r\n    \\param[in]  deepsleepmodecmd:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        WFI_CMD: use WFI command\r\n      \\arg        WFE_CMD: use WFE command\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid pmu_to_deepsleepmode(uint32_t ldo, uint8_t deepsleepmodecmd) {\r\n  /* clear stbmod and ldolp bits */\r\n  PMU_CTL &= ~((uint32_t)(PMU_CTL_STBMOD | PMU_CTL_LDOLP));\r\n  /* set ldolp bit according to pmu_ldo */\r\n  PMU_CTL |= ldo;\r\n  /* set CSR_SLEEPVALUE bit of RISC-V system control register */\r\n  set_csr(0x811U, 0x1U);\r\n  /* select WFI or WFE command to enter deepsleep mode */\r\n  if (WFI_CMD == deepsleepmodecmd) {\r\n    __WFI();\r\n  } else {\r\n    clear_csr(mstatus, MSTATUS_MIE);\r\n    set_csr(0x810U, 0x1U);\r\n    __WFI();\r\n    clear_csr(0x810U, 0x1U);\r\n    set_csr(mstatus, MSTATUS_MIE);\r\n  }\r\n  /* reset sleepdeep bit of RISC-V system control register */\r\n  clear_csr(0x811U, 0x1U);\r\n}\r\n\r\n/*!\r\n    \\brief      pmu work at standby mode\r\n    \\param[in]  standbymodecmd:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        WFI_CMD: use WFI command\r\n      \\arg        WFE_CMD: use WFE command\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid pmu_to_standbymode(uint8_t standbymodecmd) {\r\n  /* set CSR_SLEEPVALUE bit of RISC-V system control register */\r\n  set_csr(0x811U, 0x1U);\r\n\r\n  /* set stbmod bit */\r\n  PMU_CTL |= PMU_CTL_STBMOD;\r\n\r\n  /* reset wakeup flag */\r\n  PMU_CTL |= PMU_CTL_WURST;\r\n\r\n  /* select WFI or WFE command to enter standby mode */\r\n  if (WFI_CMD == standbymodecmd) {\r\n    __WFI();\r\n  } else {\r\n    clear_csr(mstatus, MSTATUS_MIE);\r\n    set_csr(0x810U, 0x1U);\r\n    __WFI();\r\n    clear_csr(0x810U, 0x1U);\r\n    set_csr(mstatus, MSTATUS_MIE);\r\n  }\r\n  clear_csr(0x811U, 0x1U);\r\n}\r\n\r\n/*!\r\n    \\brief      enable wakeup pin\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid pmu_wakeup_pin_enable(void) { PMU_CS |= PMU_CS_WUPEN; }\r\n\r\n/*!\r\n    \\brief      disable wakeup pin\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid pmu_wakeup_pin_disable(void) { PMU_CS &= ~PMU_CS_WUPEN; }\r\n\r\n/*!\r\n    \\brief      enable write access to the registers in backup domain\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid pmu_backup_write_enable(void) { PMU_CTL |= PMU_CTL_BKPWEN; }\r\n\r\n/*!\r\n    \\brief      disable write access to the registers in backup domain\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid pmu_backup_write_disable(void) { PMU_CTL &= ~PMU_CTL_BKPWEN; }\r\n\r\n/*!\r\n    \\brief      get flag state\r\n    \\param[in]  flag:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        PMU_FLAG_WAKEUP: wakeup flag\r\n      \\arg        PMU_FLAG_STANDBY: standby flag\r\n      \\arg        PMU_FLAG_LVD: lvd flag\r\n    \\param[out] none\r\n    \\retval     FlagStatus SET or RESET\r\n*/\r\nFlagStatus pmu_flag_get(uint32_t flag) {\r\n  if (PMU_CS & flag) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear flag bit\r\n    \\param[in]  flag_reset:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        PMU_FLAG_RESET_WAKEUP: reset wakeup flag\r\n      \\arg        PMU_FLAG_RESET_STANDBY: reset standby flag\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid pmu_flag_clear(uint32_t flag_reset) {\r\n  switch (flag_reset) {\r\n  case PMU_FLAG_RESET_WAKEUP:\r\n    /* reset wakeup flag */\r\n    PMU_CTL |= PMU_CTL_WURST;\r\n    break;\r\n  case PMU_FLAG_RESET_STANDBY:\r\n    /* reset standby flag */\r\n    PMU_CTL |= PMU_CTL_STBRST;\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_rcu.c",
    "content": "/*!\r\n    \\file    gd32vf103_rcu.c\r\n    \\brief   RCU driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n/* define startup timeout count */\r\n#define OSC_STARTUP_TIMEOUT   ((uint32_t)0xFFFFFU)\r\n#define LXTAL_STARTUP_TIMEOUT ((uint32_t)0x3FFFFFFU)\r\n\r\n/*!\r\n    \\brief      deinitialize the RCU\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_deinit(void) {\r\n  /* enable IRC8M */\r\n  RCU_CTL |= RCU_CTL_IRC8MEN;\r\n  rcu_osci_stab_wait(RCU_IRC8M);\r\n  /* reset CTL register */\r\n  RCU_CTL &= ~(RCU_CTL_HXTALEN | RCU_CTL_CKMEN | RCU_CTL_PLLEN);\r\n  RCU_CTL &= ~RCU_CTL_HXTALBPS;\r\n  RCU_CTL &= ~(RCU_CTL_PLL1EN | RCU_CTL_PLL2EN);\r\n  /* reset CFG0 register */\r\n  RCU_CFG0 &= ~(RCU_CFG0_SCS | RCU_CFG0_AHBPSC | RCU_CFG0_APB1PSC | RCU_CFG0_APB2PSC | RCU_CFG0_ADCPSC | RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0_LSB | RCU_CFG0_PLLMF | RCU_CFG0_USBFSPSC |\r\n                RCU_CFG0_CKOUT0SEL | RCU_CFG0_ADCPSC_2 | RCU_CFG0_PLLMF_4);\r\n  /* reset INT and CFG1 register */\r\n  RCU_INT = 0x00ff0000U;\r\n  RCU_CFG1 &= ~(RCU_CFG1_PREDV0 | RCU_CFG1_PREDV1 | RCU_CFG1_PLL1MF | RCU_CFG1_PLL2MF | RCU_CFG1_PREDV0SEL | RCU_CFG1_I2S1SEL | RCU_CFG1_I2S2SEL);\r\n}\r\n\r\n/*!\r\n    \\brief      enable the peripherals clock\r\n    \\param[in]  periph: RCU peripherals, refer to rcu_periph_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_GPIOx (x=A,B,C,D,E): GPIO ports clock\r\n      \\arg        RCU_AF : alternate function clock\r\n      \\arg        RCU_CRC: CRC clock\r\n      \\arg        RCU_DMAx (x=0,1): DMA clock\r\n      \\arg        RCU_USBFS: USBFS clock\r\n      \\arg        RCU_EXMC: EXMC clock\r\n      \\arg        RCU_TIMERx (x=0,1,2,3,4,5,6): TIMER clock\r\n      \\arg        RCU_WWDGT: WWDGT clock\r\n      \\arg        RCU_SPIx (x=0,1,2): SPI clock\r\n      \\arg        RCU_USARTx (x=0,1,2): USART clock\r\n      \\arg        RCU_UARTx (x=3,4): UART clock\r\n      \\arg        RCU_I2Cx (x=0,1): I2C clock\r\n      \\arg        RCU_CANx (x=0,1): CAN clock\r\n      \\arg        RCU_PMU: PMU clock\r\n      \\arg        RCU_DAC: DAC clock\r\n      \\arg        RCU_RTC: RTC clock\r\n      \\arg        RCU_ADCx (x=0,1): ADC clock\r\n      \\arg        RCU_BKPI: BKP interface clock\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_periph_clock_enable(rcu_periph_enum periph) { RCU_REG_VAL(periph) |= BIT(RCU_BIT_POS(periph)); }\r\n\r\n/*!\r\n    \\brief      disable the peripherals clock\r\n    \\param[in]  periph: RCU peripherals, refer to rcu_periph_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_GPIOx (x=A,B,C,D,E): GPIO ports clock\r\n      \\arg        RCU_AF: alternate function clock\r\n      \\arg        RCU_CRC: CRC clock\r\n      \\arg        RCU_DMAx (x=0,1): DMA clock\r\n      \\arg        RCU_USBFS: USBFS clock\r\n      \\arg        RCU_EXMC: EXMC clock\r\n      \\arg        RCU_TIMERx (x=0,1,2,3,4,5,6): TIMER clock\r\n      \\arg        RCU_WWDGT: WWDGT clock\r\n      \\arg        RCU_SPIx (x=0,1,2): SPI clock\r\n      \\arg        RCU_USARTx (x=0,1,2): USART clock\r\n      \\arg        RCU_UARTx (x=3,4): UART clock\r\n      \\arg        RCU_I2Cx (x=0,1): I2C clock\r\n      \\arg        RCU_CANx (x=0,1): CAN clock\r\n      \\arg        RCU_PMU: PMU clock\r\n      \\arg        RCU_DAC: DAC clock\r\n      \\arg        RCU_RTC: RTC clock\r\n      \\arg        RCU_ADCx (x=0,1): ADC clock\r\n      \\arg        RCU_BKPI: BKP interface clock\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_periph_clock_disable(rcu_periph_enum periph) { RCU_REG_VAL(periph) &= ~BIT(RCU_BIT_POS(periph)); }\r\n\r\n/*!\r\n    \\brief      enable the peripherals clock when sleep mode\r\n    \\param[in]  periph: RCU peripherals, refer to rcu_periph_sleep_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_FMC_SLP: FMC clock\r\n      \\arg        RCU_SRAM_SLP: SRAM clock\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_periph_clock_sleep_enable(rcu_periph_sleep_enum periph) { RCU_REG_VAL(periph) |= BIT(RCU_BIT_POS(periph)); }\r\n\r\n/*!\r\n    \\brief      disable the peripherals clock when sleep mode\r\n    \\param[in]  periph: RCU peripherals, refer to rcu_periph_sleep_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_FMC_SLP: FMC clock\r\n      \\arg        RCU_SRAM_SLP: SRAM clock\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_periph_clock_sleep_disable(rcu_periph_sleep_enum periph) { RCU_REG_VAL(periph) &= ~BIT(RCU_BIT_POS(periph)); }\r\n\r\n/*!\r\n    \\brief      reset the peripherals\r\n    \\param[in]  periph_reset: RCU peripherals reset, refer to rcu_periph_reset_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_GPIOxRST (x=A,B,C,D,E): reset GPIO ports\r\n      \\arg        RCU_AFRST : reset alternate function clock\r\n      \\arg        RCU_USBFSRST: reset USBFS\r\n      \\arg        RCU_TIMERxRST (x=0,1,2,3,4,5,6): reset TIMER\r\n      \\arg        RCU_WWDGTRST: reset WWDGT\r\n      \\arg        RCU_SPIxRST (x=0,1,2): reset SPI\r\n      \\arg        RCU_USARTxRST (x=0,1,2): reset USART\r\n      \\arg        RCU_UARTxRST (x=3,4): reset UART\r\n      \\arg        RCU_I2CxRST (x=0,1): reset I2C\r\n      \\arg        RCU_CANxRST (x=0,1): reset CAN\r\n      \\arg        RCU_PMURST: reset PMU\r\n      \\arg        RCU_DACRST: reset DAC\r\n      \\arg        RCU_ADCxRST (x=0,1): reset ADC\r\n      \\arg        RCU_BKPIRST: reset BKPI\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_periph_reset_enable(rcu_periph_reset_enum periph_reset) { RCU_REG_VAL(periph_reset) |= BIT(RCU_BIT_POS(periph_reset)); }\r\n\r\n/*!\r\n    \\brief      disable reset the peripheral\r\n    \\param[in]  periph_reset: RCU peripherals reset, refer to rcu_periph_reset_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_GPIOxRST (x=A,B,C,D,E): reset GPIO ports\r\n      \\arg        RCU_AFRST : reset alternate function clock\r\n      \\arg        RCU_USBFSRST: reset USBFS\r\n      \\arg        RCU_TIMERxRST (x=0,1,2,3,4,5,6): reset TIMER\r\n      \\arg        RCU_WWDGTRST: reset WWDGT\r\n      \\arg        RCU_SPIxRST (x=0,1,2): reset SPI\r\n      \\arg        RCU_USARTxRST (x=0,1,2): reset USART\r\n      \\arg        RCU_UARTxRST (x=3,4): reset UART\r\n      \\arg        RCU_I2CxRST (x=0,1): reset I2C\r\n      \\arg        RCU_CANxRST (x=0,1): reset CAN\r\n      \\arg        RCU_PMURST: reset PMU\r\n      \\arg        RCU_DACRST: reset DAC\r\n      \\arg        RCU_ADCxRST (x=0,1): reset ADC\r\n      \\arg        RCU_BKPIRST: reset BKPI\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_periph_reset_disable(rcu_periph_reset_enum periph_reset) { RCU_REG_VAL(periph_reset) &= ~BIT(RCU_BIT_POS(periph_reset)); }\r\n\r\n/*!\r\n    \\brief      reset the BKP domain\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_bkp_reset_enable(void) { RCU_BDCTL |= RCU_BDCTL_BKPRST; }\r\n\r\n/*!\r\n    \\brief      disable the BKP domain reset\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_bkp_reset_disable(void) { RCU_BDCTL &= ~RCU_BDCTL_BKPRST; }\r\n\r\n/*!\r\n    \\brief      configure the system clock source\r\n    \\param[in]  ck_sys: system clock source select\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_CKSYSSRC_IRC8M: select CK_IRC8M as the CK_SYS source\r\n      \\arg        RCU_CKSYSSRC_HXTAL: select CK_HXTAL as the CK_SYS source\r\n      \\arg        RCU_CKSYSSRC_PLL: select CK_PLL as the CK_SYS source\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_system_clock_source_config(uint32_t ck_sys) {\r\n  uint32_t reg;\r\n\r\n  reg = RCU_CFG0;\r\n  /* reset the SCS bits and set according to ck_sys */\r\n  reg &= ~RCU_CFG0_SCS;\r\n  RCU_CFG0 = (reg | ck_sys);\r\n}\r\n\r\n/*!\r\n    \\brief      get the system clock source\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     which clock is selected as CK_SYS source\r\n      \\arg        RCU_SCSS_IRC8M: CK_IRC8M is selected as the CK_SYS source\r\n      \\arg        RCU_SCSS_HXTAL: CK_HXTAL is selected as the CK_SYS source\r\n      \\arg        RCU_SCSS_PLL: CK_PLL is selected as the CK_SYS source\r\n*/\r\nuint32_t rcu_system_clock_source_get(void) { return (RCU_CFG0 & RCU_CFG0_SCSS); }\r\n\r\n/*!\r\n    \\brief      configure the AHB clock prescaler selection\r\n    \\param[in]  ck_ahb: AHB clock prescaler selection\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_AHB_CKSYS_DIVx, x=1, 2, 4, 8, 16, 64, 128, 256, 512\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_ahb_clock_config(uint32_t ck_ahb) {\r\n  uint32_t reg;\r\n\r\n  reg = RCU_CFG0;\r\n\r\n  /* reset the AHBPSC bits and set according to ck_ahb */\r\n  reg &= ~RCU_CFG0_AHBPSC;\r\n  RCU_CFG0 = (reg | ck_ahb);\r\n}\r\n\r\n/*!\r\n    \\brief      configure the APB1 clock prescaler selection\r\n    \\param[in]  ck_apb1: APB1 clock prescaler selection\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_APB1_CKAHB_DIV1: select CK_AHB as CK_APB1\r\n      \\arg        RCU_APB1_CKAHB_DIV2: select CK_AHB/2 as CK_APB1\r\n      \\arg        RCU_APB1_CKAHB_DIV4: select CK_AHB/4 as CK_APB1\r\n      \\arg        RCU_APB1_CKAHB_DIV8: select CK_AHB/8 as CK_APB1\r\n      \\arg        RCU_APB1_CKAHB_DIV16: select CK_AHB/16 as CK_APB1\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_apb1_clock_config(uint32_t ck_apb1) {\r\n  uint32_t reg;\r\n\r\n  reg = RCU_CFG0;\r\n\r\n  /* reset the APB1PSC and set according to ck_apb1 */\r\n  reg &= ~RCU_CFG0_APB1PSC;\r\n  RCU_CFG0 = (reg | ck_apb1);\r\n}\r\n\r\n/*!\r\n    \\brief      configure the APB2 clock prescaler selection\r\n    \\param[in]  ck_apb2: APB2 clock prescaler selection\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_APB2_CKAHB_DIV1: select CK_AHB as CK_APB2\r\n      \\arg        RCU_APB2_CKAHB_DIV2: select CK_AHB/2 as CK_APB2\r\n      \\arg        RCU_APB2_CKAHB_DIV4: select CK_AHB/4 as CK_APB2\r\n      \\arg        RCU_APB2_CKAHB_DIV8: select CK_AHB/8 as CK_APB2\r\n      \\arg        RCU_APB2_CKAHB_DIV16: select CK_AHB/16 as CK_APB2\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_apb2_clock_config(uint32_t ck_apb2) {\r\n  uint32_t reg;\r\n\r\n  reg = RCU_CFG0;\r\n\r\n  /* reset the APB2PSC and set according to ck_apb2 */\r\n  reg &= ~RCU_CFG0_APB2PSC;\r\n  RCU_CFG0 = (reg | ck_apb2);\r\n}\r\n\r\n/*!\r\n    \\brief      configure the CK_OUT0 clock source\r\n    \\param[in]  ckout0_src: CK_OUT0 clock source selection\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_CKOUT0SRC_NONE: no clock selected\r\n      \\arg        RCU_CKOUT0SRC_CKSYS: system clock selected\r\n      \\arg        RCU_CKOUT0SRC_IRC8M: high speed 8M internal oscillator clock selected\r\n      \\arg        RCU_CKOUT0SRC_HXTAL: HXTAL selected\r\n      \\arg        RCU_CKOUT0SRC_CKPLL_DIV2: CK_PLL/2 selected\r\n      \\arg        RCU_CKOUT0SRC_CKPLL1: CK_PLL1 selected\r\n      \\arg        RCU_CKOUT0SRC_CKPLL2_DIV2: CK_PLL2/2 selected\r\n      \\arg        RCU_CKOUT0SRC_EXT1: EXT1 selected\r\n      \\arg        RCU_CKOUT0SRC_CKPLL2: PLL2 selected\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_ckout0_config(uint32_t ckout0_src) {\r\n  uint32_t reg;\r\n\r\n  reg = RCU_CFG0;\r\n\r\n  /* reset the CKOUT0SRC, set according to ckout0_src */\r\n  reg &= ~RCU_CFG0_CKOUT0SEL;\r\n  RCU_CFG0 = (reg | ckout0_src);\r\n}\r\n\r\n/*!\r\n    \\brief      configure the main PLL clock\r\n    \\param[in]  pll_src: PLL clock source selection\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_PLLSRC_IRC8M_DIV2: IRC8M/2 clock selected as source clock of PLL\r\n      \\arg        RCU_PLLSRC_HXTAL: HXTAL selected as source clock of PLL\r\n    \\param[in]  pll_mul: PLL clock multiplication factor\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_PLL_MULx (x = 2..14, 6.5, 16..32)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_pll_config(uint32_t pll_src, uint32_t pll_mul) {\r\n  uint32_t reg = 0U;\r\n\r\n  reg = RCU_CFG0;\r\n\r\n  /* PLL clock source and multiplication factor configuration */\r\n  reg &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4);\r\n  reg |= (pll_src | pll_mul);\r\n\r\n  RCU_CFG0 = reg;\r\n}\r\n\r\n/*!\r\n    \\brief      configure the PREDV0 division factor and clock source\r\n    \\param[in]  predv0_source: PREDV0 input clock source selection\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_PREDV0SRC_HXTAL: HXTAL selected as PREDV0 input source clock\r\n      \\arg        RCU_PREDV0SRC_CKPLL1: CK_PLL1 selected as PREDV0 input source clock\r\n    \\param[in]  predv0_div: PREDV0 division factor\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_PREDV0_DIVx, x = 1..16\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_predv0_config(uint32_t predv0_source, uint32_t predv0_div) {\r\n  uint32_t reg = 0U;\r\n\r\n  reg = RCU_CFG1;\r\n  /* reset PREDV0SEL and PREDV0 bits */\r\n  reg &= ~(RCU_CFG1_PREDV0SEL | RCU_CFG1_PREDV0);\r\n  /* set the PREDV0SEL and PREDV0 division factor */\r\n  reg |= (predv0_source | predv0_div);\r\n\r\n  RCU_CFG1 = reg;\r\n}\r\n\r\n/*!\r\n    \\brief      configure the PREDV1 division factor\r\n    \\param[in]  predv1_div: PREDV1 division factor\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_PREDV1_DIVx, x = 1..16\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_predv1_config(uint32_t predv1_div) {\r\n  uint32_t reg = 0U;\r\n\r\n  reg = RCU_CFG1;\r\n  /* reset the PREDV1 bits */\r\n  reg &= ~RCU_CFG1_PREDV1;\r\n  /* set the PREDV1 division factor */\r\n  reg |= predv1_div;\r\n\r\n  RCU_CFG1 = reg;\r\n}\r\n\r\n/*!\r\n    \\brief      configure the PLL1 clock\r\n    \\param[in]  pll_mul: PLL clock multiplication factor\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_PLL1_MULx (x = 8..16, 20)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_pll1_config(uint32_t pll_mul) {\r\n  RCU_CFG1 &= ~RCU_CFG1_PLL1MF;\r\n  RCU_CFG1 |= pll_mul;\r\n}\r\n\r\n/*!\r\n    \\brief      configure the PLL2 clock\r\n    \\param[in]  pll_mul: PLL clock multiplication factor\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_PLL2_MULx (x = 8..16, 20)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_pll2_config(uint32_t pll_mul) {\r\n  RCU_CFG1 &= ~RCU_CFG1_PLL2MF;\r\n  RCU_CFG1 |= pll_mul;\r\n}\r\n\r\n/*!\r\n    \\brief      configure the ADC prescaler factor\r\n    \\param[in]  adc_psc: ADC prescaler factor\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_CKADC_CKAPB2_DIV2: ADC prescaler select CK_APB2/2\r\n      \\arg        RCU_CKADC_CKAPB2_DIV4: ADC prescaler select CK_APB2/4\r\n      \\arg        RCU_CKADC_CKAPB2_DIV6: ADC prescaler select CK_APB2/6\r\n      \\arg        RCU_CKADC_CKAPB2_DIV8: ADC prescaler select CK_APB2/8\r\n      \\arg        RCU_CKADC_CKAPB2_DIV12: ADC prescaler select CK_APB2/12\r\n      \\arg        RCU_CKADC_CKAPB2_DIV16: ADC prescaler select CK_APB2/16\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_adc_clock_config(uint32_t adc_psc) {\r\n  uint32_t reg0;\r\n\r\n  /* reset the ADCPSC bits */\r\n  reg0 = RCU_CFG0;\r\n  reg0 &= ~(RCU_CFG0_ADCPSC_2 | RCU_CFG0_ADCPSC);\r\n\r\n  /* set the ADC prescaler factor */\r\n  switch (adc_psc) {\r\n  case RCU_CKADC_CKAPB2_DIV2:\r\n  case RCU_CKADC_CKAPB2_DIV4:\r\n  case RCU_CKADC_CKAPB2_DIV6:\r\n  case RCU_CKADC_CKAPB2_DIV8:\r\n    reg0 |= (adc_psc << 14);\r\n    break;\r\n\r\n  case RCU_CKADC_CKAPB2_DIV12:\r\n  case RCU_CKADC_CKAPB2_DIV16:\r\n    adc_psc &= ~BIT(2);\r\n    reg0 |= (adc_psc << 14 | RCU_CFG0_ADCPSC_2);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* set the register */\r\n  RCU_CFG0 = reg0;\r\n}\r\n\r\n/*!\r\n    \\brief      configure the USBFS prescaler factor\r\n    \\param[in]  usb_psc: USB prescaler factor\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_CKUSB_CKPLL_DIV1_5: USBFS prescaler select CK_PLL/1.5\r\n      \\arg        RCU_CKUSB_CKPLL_DIV1: USBFS prescaler select CK_PLL/1\r\n      \\arg        RCU_CKUSB_CKPLL_DIV2_5: USBFS prescaler select CK_PLL/2.5\r\n      \\arg        RCU_CKUSB_CKPLL_DIV2: USBFS prescaler select CK_PLL/2\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_usb_clock_config(uint32_t usb_psc) {\r\n  uint32_t reg;\r\n\r\n  reg = RCU_CFG0;\r\n\r\n  /* configure the USBFS prescaler factor */\r\n  reg &= ~RCU_CFG0_USBFSPSC;\r\n  RCU_CFG0 = (reg | usb_psc);\r\n}\r\n\r\n/*!\r\n    \\brief      configure the RTC clock source selection\r\n    \\param[in]  rtc_clock_source: RTC clock source selection\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_RTCSRC_NONE: no clock selected\r\n      \\arg        RCU_RTCSRC_LXTAL: CK_LXTAL selected as RTC source clock\r\n      \\arg        RCU_RTCSRC_IRC40K: CK_IRC40K selected as RTC source clock\r\n      \\arg        RCU_RTCSRC_HXTAL_DIV_128: CK_HXTAL/128 selected as RTC source clock\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_rtc_clock_config(uint32_t rtc_clock_source) {\r\n  uint32_t reg;\r\n\r\n  reg = RCU_BDCTL;\r\n  /* reset the RTCSRC bits and set according to rtc_clock_source */\r\n  reg &= ~RCU_BDCTL_RTCSRC;\r\n  RCU_BDCTL = (reg | rtc_clock_source);\r\n}\r\n\r\n/*!\r\n    \\brief      configure the I2S1 clock source selection\r\n    \\param[in]  i2s_clock_source: I2S1 clock source selection\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_I2S1SRC_CKSYS: System clock selected as I2S1 source clock\r\n      \\arg        RCU_I2S1SRC_CKPLL2_MUL2: CK_PLL2x2 selected as I2S1 source clock\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_i2s1_clock_config(uint32_t i2s_clock_source) {\r\n  uint32_t reg;\r\n\r\n  reg = RCU_CFG1;\r\n  /* reset the I2S1SEL bit and set according to i2s_clock_source */\r\n  reg &= ~RCU_CFG1_I2S1SEL;\r\n  RCU_CFG1 = (reg | i2s_clock_source);\r\n}\r\n\r\n/*!\r\n    \\brief      configure the I2S2 clock source selection\r\n    \\param[in]  i2s_clock_source: I2S2 clock source selection\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_I2S2SRC_CKSYS: system clock selected as I2S2 source clock\r\n      \\arg        RCU_I2S2SRC_CKPLL2_MUL2: CK_PLL2x2 selected as I2S2 source clock\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_i2s2_clock_config(uint32_t i2s_clock_source) {\r\n  uint32_t reg;\r\n\r\n  reg = RCU_CFG1;\r\n  /* reset the I2S2SEL bit and set according to i2s_clock_source */\r\n  reg &= ~RCU_CFG1_I2S2SEL;\r\n  RCU_CFG1 = (reg | i2s_clock_source);\r\n}\r\n\r\n/*!\r\n    \\brief      get the clock stabilization and periphral reset flags\r\n    \\param[in]  flag: the clock stabilization and periphral reset flags, refer to rcu_flag_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_FLAG_IRC8MSTB: IRC8M stabilization flag\r\n      \\arg        RCU_FLAG_HXTALSTB: HXTAL stabilization flag\r\n      \\arg        RCU_FLAG_PLLSTB: PLL stabilization flag\r\n      \\arg        RCU_FLAG_PLL1STB: PLL1 stabilization flag\r\n      \\arg        RCU_FLAG_PLL2STB: PLL2 stabilization flag\r\n      \\arg        RCU_FLAG_LXTALSTB: LXTAL stabilization flag\r\n      \\arg        RCU_FLAG_IRC40KSTB: IRC40K stabilization flag\r\n      \\arg        RCU_FLAG_EPRST: external PIN reset flag\r\n      \\arg        RCU_FLAG_PORRST: power reset flag\r\n      \\arg        RCU_FLAG_SWRST: software reset flag\r\n      \\arg        RCU_FLAG_FWDGTRST: free watchdog timer reset flag\r\n      \\arg        RCU_FLAG_WWDGTRST: window watchdog timer reset flag\r\n      \\arg        RCU_FLAG_LPRST: low-power reset flag\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus rcu_flag_get(rcu_flag_enum flag) {\r\n  /* get the rcu flag */\r\n  if (RESET != (RCU_REG_VAL(flag) & BIT(RCU_BIT_POS(flag)))) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear all the reset flag\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_all_reset_flag_clear(void) { RCU_RSTSCK |= RCU_RSTSCK_RSTFC; }\r\n\r\n/*!\r\n    \\brief      get the clock stabilization interrupt and ckm flags\r\n    \\param[in]  int_flag: interrupt and ckm flags, refer to rcu_int_flag_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_INT_FLAG_IRC40KSTB: IRC40K stabilization interrupt flag\r\n      \\arg        RCU_INT_FLAG_LXTALSTB: LXTAL stabilization interrupt flag\r\n      \\arg        RCU_INT_FLAG_IRC8MSTB: IRC8M stabilization interrupt flag\r\n      \\arg        RCU_INT_FLAG_HXTALSTB: HXTAL stabilization interrupt flag\r\n      \\arg        RCU_INT_FLAG_PLLSTB: PLL stabilization interrupt flag\r\n      \\arg        RCU_INT_FLAG_PLL1STB: PLL1 stabilization interrupt flag\r\n      \\arg        RCU_INT_FLAG_PLL2STB: PLL2 stabilization interrupt flag\r\n      \\arg        RCU_INT_FLAG_CKM: HXTAL clock stuck interrupt flag\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus rcu_interrupt_flag_get(rcu_int_flag_enum int_flag) {\r\n  /* get the rcu interrupt flag */\r\n  if (RESET != (RCU_REG_VAL(int_flag) & BIT(RCU_BIT_POS(int_flag)))) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear the interrupt flags\r\n    \\param[in]  int_flag_clear: clock stabilization and stuck interrupt flags clear, refer to rcu_int_flag_clear_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_INT_FLAG_IRC40KSTB_CLR: IRC40K stabilization interrupt flag clear\r\n      \\arg        RCU_INT_FLAG_LXTALSTB_CLR: LXTAL stabilization interrupt flag clear\r\n      \\arg        RCU_INT_FLAG_IRC8MSTB_CLR: IRC8M stabilization interrupt flag clear\r\n      \\arg        RCU_INT_FLAG_HXTALSTB_CLR: HXTAL stabilization interrupt flag clear\r\n      \\arg        RCU_INT_FLAG_PLLSTB_CLR: PLL stabilization interrupt flag clear\r\n      \\arg        RCU_INT_FLAG_PLL1STB_CLR: PLL1 stabilization interrupt flag clear\r\n      \\arg        RCU_INT_FLAG_PLL2STB_CLR: PLL2 stabilization interrupt flag clear\r\n      \\arg        RCU_INT_FLAG_CKM_CLR: clock stuck interrupt flag clear\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_interrupt_flag_clear(rcu_int_flag_clear_enum int_flag_clear) { RCU_REG_VAL(int_flag_clear) |= BIT(RCU_BIT_POS(int_flag_clear)); }\r\n\r\n/*!\r\n    \\brief      enable the stabilization interrupt\r\n    \\param[in]  stab_int: clock stabilization interrupt, refer to rcu_int_enum\r\n                Only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_INT_IRC40KSTB: IRC40K stabilization interrupt enable\r\n      \\arg        RCU_INT_LXTALSTB: LXTAL stabilization interrupt enable\r\n      \\arg        RCU_INT_IRC8MSTB: IRC8M stabilization interrupt enable\r\n      \\arg        RCU_INT_HXTALSTB: HXTAL stabilization interrupt enable\r\n      \\arg        RCU_INT_PLLSTB: PLL stabilization interrupt enable\r\n      \\arg        RCU_INT_PLL1STB: PLL1 stabilization interrupt enable\r\n      \\arg        RCU_INT_PLL2STB: PLL2 stabilization interrupt enable\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_interrupt_enable(rcu_int_enum stab_int) { RCU_REG_VAL(stab_int) |= BIT(RCU_BIT_POS(stab_int)); }\r\n\r\n/*!\r\n    \\brief      disable the stabilization interrupt\r\n    \\param[in]  stab_int: clock stabilization interrupt, refer to rcu_int_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_INT_IRC40KSTB: IRC40K stabilization interrupt enable\r\n      \\arg        RCU_INT_LXTALSTB: LXTAL stabilization interrupt enable\r\n      \\arg        RCU_INT_IRC8MSTB: IRC8M stabilization interrupt enable\r\n      \\arg        RCU_INT_HXTALSTB: HXTAL stabilization interrupt enable\r\n      \\arg        RCU_INT_PLLSTB: PLL stabilization interrupt enable\r\n      \\arg        RCU_INT_PLL1STB: PLL1 stabilization interrupt enable\r\n      \\arg        RCU_INT_PLL2STB: PLL2 stabilization interrupt enable\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_interrupt_disable(rcu_int_enum stab_int) { RCU_REG_VAL(stab_int) &= ~BIT(RCU_BIT_POS(stab_int)); }\r\n\r\n/*!\r\n    \\brief      wait for oscillator stabilization flags is SET or oscillator startup is timeout\r\n    \\param[in]  osci: oscillator types, refer to rcu_osci_type_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_HXTAL: high speed crystal oscillator(HXTAL)\r\n      \\arg        RCU_LXTAL: low speed crystal oscillator(LXTAL)\r\n      \\arg        RCU_IRC8M: internal 8M RC oscillators(IRC8M)\r\n      \\arg        RCU_IRC40K: internal 40K RC oscillator(IRC40K)\r\n      \\arg        RCU_PLL_CK: phase locked loop(PLL)\r\n      \\arg        RCU_PLL1_CK: phase locked loop 1\r\n      \\arg        RCU_PLL2_CK: phase locked loop 2\r\n    \\param[out] none\r\n    \\retval     ErrStatus: SUCCESS or ERROR\r\n*/\r\nErrStatus rcu_osci_stab_wait(rcu_osci_type_enum osci) {\r\n  uint32_t   stb_cnt   = 0U;\r\n  ErrStatus  reval     = ERROR;\r\n  FlagStatus osci_stat = RESET;\r\n\r\n  switch (osci) {\r\n  /* wait HXTAL stable */\r\n  case RCU_HXTAL:\r\n    while ((RESET == osci_stat) && (HXTAL_STARTUP_TIMEOUT != stb_cnt)) {\r\n      osci_stat = rcu_flag_get(RCU_FLAG_HXTALSTB);\r\n      stb_cnt++;\r\n    }\r\n\r\n    /* check whether flag is set or not */\r\n    if (RESET != rcu_flag_get(RCU_FLAG_HXTALSTB)) {\r\n      reval = SUCCESS;\r\n    }\r\n    break;\r\n\r\n  /* wait LXTAL stable */\r\n  case RCU_LXTAL:\r\n    while ((RESET == osci_stat) && (LXTAL_STARTUP_TIMEOUT != stb_cnt)) {\r\n      osci_stat = rcu_flag_get(RCU_FLAG_LXTALSTB);\r\n      stb_cnt++;\r\n    }\r\n\r\n    /* check whether flag is set or not */\r\n    if (RESET != rcu_flag_get(RCU_FLAG_LXTALSTB)) {\r\n      reval = SUCCESS;\r\n    }\r\n    break;\r\n\r\n  /* wait IRC8M stable */\r\n  case RCU_IRC8M:\r\n    while ((RESET == osci_stat) && (IRC8M_STARTUP_TIMEOUT != stb_cnt)) {\r\n      osci_stat = rcu_flag_get(RCU_FLAG_IRC8MSTB);\r\n      stb_cnt++;\r\n    }\r\n\r\n    /* check whether flag is set or not */\r\n    if (RESET != rcu_flag_get(RCU_FLAG_IRC8MSTB)) {\r\n      reval = SUCCESS;\r\n    }\r\n    break;\r\n\r\n  /* wait IRC40K stable */\r\n  case RCU_IRC40K:\r\n    while ((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)) {\r\n      osci_stat = rcu_flag_get(RCU_FLAG_IRC40KSTB);\r\n      stb_cnt++;\r\n    }\r\n\r\n    /* check whether flag is set or not */\r\n    if (RESET != rcu_flag_get(RCU_FLAG_IRC40KSTB)) {\r\n      reval = SUCCESS;\r\n    }\r\n    break;\r\n\r\n  /* wait PLL stable */\r\n  case RCU_PLL_CK:\r\n    while ((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)) {\r\n      osci_stat = rcu_flag_get(RCU_FLAG_PLLSTB);\r\n      stb_cnt++;\r\n    }\r\n\r\n    /* check whether flag is set or not */\r\n    if (RESET != rcu_flag_get(RCU_FLAG_PLLSTB)) {\r\n      reval = SUCCESS;\r\n    }\r\n    break;\r\n  /* wait PLL1 stable */\r\n  case RCU_PLL1_CK:\r\n    while ((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)) {\r\n      osci_stat = rcu_flag_get(RCU_FLAG_PLL1STB);\r\n      stb_cnt++;\r\n    }\r\n\r\n    /* check whether flag is set or not */\r\n    if (RESET != rcu_flag_get(RCU_FLAG_PLL1STB)) {\r\n      reval = SUCCESS;\r\n    }\r\n    break;\r\n  /* wait PLL2 stable */\r\n  case RCU_PLL2_CK:\r\n    while ((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)) {\r\n      osci_stat = rcu_flag_get(RCU_FLAG_PLL2STB);\r\n      stb_cnt++;\r\n    }\r\n\r\n    /* check whether flag is set or not */\r\n    if (RESET != rcu_flag_get(RCU_FLAG_PLL2STB)) {\r\n      reval = SUCCESS;\r\n    }\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* return value */\r\n  return reval;\r\n}\r\n\r\n/*!\r\n    \\brief      turn on the oscillator\r\n    \\param[in]  osci: oscillator types, refer to rcu_osci_type_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_HXTAL: high speed crystal oscillator(HXTAL)\r\n      \\arg        RCU_LXTAL: low speed crystal oscillator(LXTAL)\r\n      \\arg        RCU_IRC8M: internal 8M RC oscillators(IRC8M)\r\n      \\arg        RCU_IRC40K: internal 40K RC oscillator(IRC40K)\r\n      \\arg        RCU_PLL_CK: phase locked loop(PLL)\r\n      \\arg        RCU_PLL1_CK: phase locked loop 1\r\n      \\arg        RCU_PLL2_CK: phase locked loop 2\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_osci_on(rcu_osci_type_enum osci) { RCU_REG_VAL(osci) |= BIT(RCU_BIT_POS(osci)); }\r\n\r\n/*!\r\n    \\brief      turn off the oscillator\r\n    \\param[in]  osci: oscillator types, refer to rcu_osci_type_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_HXTAL: high speed crystal oscillator(HXTAL)\r\n      \\arg        RCU_LXTAL: low speed crystal oscillator(LXTAL)\r\n      \\arg        RCU_IRC8M: internal 8M RC oscillators(IRC8M)\r\n      \\arg        RCU_IRC40K: internal 40K RC oscillator(IRC40K)\r\n      \\arg        RCU_PLL_CK: phase locked loop(PLL)\r\n      \\arg        RCU_PLL1_CK: phase locked loop 1\r\n      \\arg        RCU_PLL2_CK: phase locked loop 2\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_osci_off(rcu_osci_type_enum osci) { RCU_REG_VAL(osci) &= ~BIT(RCU_BIT_POS(osci)); }\r\n\r\n/*!\r\n    \\brief      enable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it\r\n    \\param[in]  osci: oscillator types, refer to rcu_osci_type_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_HXTAL: high speed crystal oscillator(HXTAL)\r\n      \\arg        RCU_LXTAL: low speed crystal oscillator(LXTAL)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_osci_bypass_mode_enable(rcu_osci_type_enum osci) {\r\n  uint32_t reg;\r\n\r\n  switch (osci) {\r\n  /* enable HXTAL to bypass mode */\r\n  case RCU_HXTAL:\r\n    reg = RCU_CTL;\r\n    RCU_CTL &= ~RCU_CTL_HXTALEN;\r\n    RCU_CTL = (reg | RCU_CTL_HXTALBPS);\r\n    break;\r\n  /* enable LXTAL to bypass mode */\r\n  case RCU_LXTAL:\r\n    reg = RCU_BDCTL;\r\n    RCU_BDCTL &= ~RCU_BDCTL_LXTALEN;\r\n    RCU_BDCTL = (reg | RCU_BDCTL_LXTALBPS);\r\n    break;\r\n  case RCU_IRC8M:\r\n  case RCU_IRC40K:\r\n  case RCU_PLL_CK:\r\n  case RCU_PLL1_CK:\r\n  case RCU_PLL2_CK:\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      disable the oscillator bypass mode, HXTALEN or LXTALEN must be reset before it\r\n    \\param[in]  osci: oscillator types, refer to rcu_osci_type_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_HXTAL: high speed crystal oscillator(HXTAL)\r\n      \\arg        RCU_LXTAL: low speed crystal oscillator(LXTAL)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_osci_bypass_mode_disable(rcu_osci_type_enum osci) {\r\n  uint32_t reg;\r\n\r\n  switch (osci) {\r\n  /* disable HXTAL to bypass mode */\r\n  case RCU_HXTAL:\r\n    reg = RCU_CTL;\r\n    RCU_CTL &= ~RCU_CTL_HXTALEN;\r\n    RCU_CTL = (reg & ~RCU_CTL_HXTALBPS);\r\n    break;\r\n  /* disable LXTAL to bypass mode */\r\n  case RCU_LXTAL:\r\n    reg = RCU_BDCTL;\r\n    RCU_BDCTL &= ~RCU_BDCTL_LXTALEN;\r\n    RCU_BDCTL = (reg & ~RCU_BDCTL_LXTALBPS);\r\n    break;\r\n  case RCU_IRC8M:\r\n  case RCU_IRC40K:\r\n  case RCU_PLL_CK:\r\n  case RCU_PLL1_CK:\r\n  case RCU_PLL2_CK:\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      enable the HXTAL clock monitor\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\n\r\nvoid rcu_hxtal_clock_monitor_enable(void) { RCU_CTL |= RCU_CTL_CKMEN; }\r\n\r\n/*!\r\n    \\brief      disable the HXTAL clock monitor\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_hxtal_clock_monitor_disable(void) { RCU_CTL &= ~RCU_CTL_CKMEN; }\r\n\r\n/*!\r\n    \\brief      set the IRC8M adjust value\r\n    \\param[in]  irc8m_adjval: IRC8M adjust value, must be between 0 and 0x1F\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_irc8m_adjust_value_set(uint32_t irc8m_adjval) {\r\n  uint32_t reg;\r\n\r\n  reg = RCU_CTL;\r\n  /* reset the IRC8MADJ bits and set according to irc8m_adjval */\r\n  reg &= ~RCU_CTL_IRC8MADJ;\r\n  RCU_CTL = (reg | ((irc8m_adjval & 0x1FU) << 3));\r\n}\r\n\r\n/*!\r\n    \\brief      deep-sleep mode voltage select\r\n    \\param[in]  dsvol: deep sleep mode voltage\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RCU_DEEPSLEEP_V_1_2: the core voltage is 1.2V\r\n      \\arg        RCU_DEEPSLEEP_V_1_1: the core voltage is 1.1V\r\n      \\arg        RCU_DEEPSLEEP_V_1_0: the core voltage is 1.0V\r\n      \\arg        RCU_DEEPSLEEP_V_0_9: the core voltage is 0.9V\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rcu_deepsleep_voltage_set(uint32_t dsvol) {\r\n  dsvol &= RCU_DSV_DSLPVS;\r\n  RCU_DSV = dsvol;\r\n}\r\n\r\n/*!\r\n    \\brief      get the system clock, bus and peripheral clock frequency\r\n    \\param[in]  clock: the clock frequency which to get\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        CK_SYS: system clock frequency\r\n      \\arg        CK_AHB: AHB clock frequency\r\n      \\arg        CK_APB1: APB1 clock frequency\r\n      \\arg        CK_APB2: APB2 clock frequency\r\n    \\param[out] none\r\n    \\retval     clock frequency of system, AHB, APB1, APB2\r\n*/\r\nuint32_t rcu_clock_freq_get(rcu_clock_freq_enum clock) {\r\n  uint32_t sws, ck_freq = 0U;\r\n  uint32_t cksys_freq, ahb_freq, apb1_freq, apb2_freq;\r\n  uint32_t pllsel, predv0sel, pllmf, ck_src, idx, clk_exp;\r\n  uint32_t predv0, predv1, pll1mf;\r\n\r\n  /* exponent of AHB, APB1 and APB2 clock divider */\r\n  uint8_t ahb_exp[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};\r\n  uint8_t apb1_exp[8] = {0, 0, 0, 0, 1, 2, 3, 4};\r\n  uint8_t apb2_exp[8] = {0, 0, 0, 0, 1, 2, 3, 4};\r\n\r\n  sws = GET_BITS(RCU_CFG0, 2, 3);\r\n  switch (sws) {\r\n  /* IRC8M is selected as CK_SYS */\r\n  case SEL_IRC8M:\r\n    cksys_freq = IRC8M_VALUE;\r\n    break;\r\n  /* HXTAL is selected as CK_SYS */\r\n  case SEL_HXTAL:\r\n    cksys_freq = HXTAL_VALUE;\r\n    break;\r\n  /* PLL is selected as CK_SYS */\r\n  case SEL_PLL:\r\n    /* PLL clock source selection, HXTAL or IRC8M/2 */\r\n    pllsel = (RCU_CFG0 & RCU_CFG0_PLLSEL);\r\n\r\n    if (RCU_PLLSRC_HXTAL == pllsel) {\r\n      /* PLL clock source is HXTAL */\r\n      ck_src = HXTAL_VALUE;\r\n\r\n      predv0sel = (RCU_CFG1 & RCU_CFG1_PREDV0SEL);\r\n      /* source clock use PLL1 */\r\n      if (RCU_PREDV0SRC_CKPLL1 == predv0sel) {\r\n        predv1 = (uint32_t)((RCU_CFG1 & RCU_CFG1_PREDV1) >> 4) + 1U;\r\n        pll1mf = (uint32_t)((RCU_CFG1 & RCU_CFG1_PLL1MF) >> 8) + 2U;\r\n        if (17U == pll1mf) {\r\n          pll1mf = 20U;\r\n        }\r\n        ck_src = (ck_src / predv1) * pll1mf;\r\n      }\r\n      predv0 = (RCU_CFG1 & RCU_CFG1_PREDV0) + 1U;\r\n      ck_src /= predv0;\r\n    } else {\r\n      /* PLL clock source is IRC8M/2 */\r\n      ck_src = IRC8M_VALUE / 2U;\r\n    }\r\n\r\n    /* PLL multiplication factor */\r\n    pllmf = GET_BITS(RCU_CFG0, 18, 21);\r\n    if ((RCU_CFG0 & RCU_CFG0_PLLMF_4)) {\r\n      pllmf |= 0x10U;\r\n    }\r\n    if (pllmf < 15U) {\r\n      pllmf += 2U;\r\n    } else {\r\n      pllmf += 1U;\r\n    }\r\n\r\n    cksys_freq = ck_src * pllmf;\r\n\r\n    if (15U == pllmf) {\r\n      /* PLL source clock multiply by 6.5 */\r\n      cksys_freq = ck_src * 6U + ck_src / 2U;\r\n    }\r\n\r\n    break;\r\n  /* IRC8M is selected as CK_SYS */\r\n  default:\r\n    cksys_freq = IRC8M_VALUE;\r\n    break;\r\n  }\r\n\r\n  /* calculate AHB clock frequency */\r\n  idx      = GET_BITS(RCU_CFG0, 4, 7);\r\n  clk_exp  = ahb_exp[idx];\r\n  ahb_freq = cksys_freq >> clk_exp;\r\n\r\n  /* calculate APB1 clock frequency */\r\n  idx       = GET_BITS(RCU_CFG0, 8, 10);\r\n  clk_exp   = apb1_exp[idx];\r\n  apb1_freq = ahb_freq >> clk_exp;\r\n\r\n  /* calculate APB2 clock frequency */\r\n  idx       = GET_BITS(RCU_CFG0, 11, 13);\r\n  clk_exp   = apb2_exp[idx];\r\n  apb2_freq = ahb_freq >> clk_exp;\r\n\r\n  /* return the clocks frequency */\r\n  switch (clock) {\r\n  case CK_SYS:\r\n    ck_freq = cksys_freq;\r\n    break;\r\n  case CK_AHB:\r\n    ck_freq = ahb_freq;\r\n    break;\r\n  case CK_APB1:\r\n    ck_freq = apb1_freq;\r\n    break;\r\n  case CK_APB2:\r\n    ck_freq = apb2_freq;\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n  return ck_freq;\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_rtc.c",
    "content": "/*!\r\n    \\file    gd32vf103_rtc.c\r\n    \\brief   RTC driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_rtc.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n/* RTC register high / low bits mask */\r\n#define RTC_HIGH_BITS_MASK ((uint32_t)0x000F0000U) /* RTC high bits mask */\r\n#define RTC_LOW_BITS_MASK  ((uint32_t)0x0000FFFFU) /* RTC low bits mask */\r\n\r\n/* RTC register high bits offset */\r\n#define RTC_HIGH_BITS_OFFSET ((uint32_t)16U)\r\n\r\n/*!\r\n    \\brief      enter RTC configuration mode\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rtc_configuration_mode_enter(void) { RTC_CTL |= RTC_CTL_CMF; }\r\n\r\n/*!\r\n    \\brief      exit RTC configuration mode\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rtc_configuration_mode_exit(void) { RTC_CTL &= ~RTC_CTL_CMF; }\r\n\r\n/*!\r\n    \\brief      set RTC counter value\r\n    \\param[in]  cnt: RTC counter value\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rtc_counter_set(uint32_t cnt) {\r\n  rtc_configuration_mode_enter();\r\n  /* set the RTC counter high bits */\r\n  RTC_CNTH = (cnt >> RTC_HIGH_BITS_OFFSET);\r\n  /* set the RTC counter low bits */\r\n  RTC_CNTL = (cnt & RTC_LOW_BITS_MASK);\r\n  rtc_configuration_mode_exit();\r\n}\r\n\r\n/*!\r\n    \\brief      set RTC prescaler value\r\n    \\param[in]  psc: RTC prescaler value\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rtc_prescaler_set(uint32_t psc) {\r\n  rtc_configuration_mode_enter();\r\n  /* set the RTC prescaler high bits */\r\n  RTC_PSCH = ((psc & RTC_HIGH_BITS_MASK) >> RTC_HIGH_BITS_OFFSET);\r\n  /* set the RTC prescaler low bits */\r\n  RTC_PSCL = (psc & RTC_LOW_BITS_MASK);\r\n  rtc_configuration_mode_exit();\r\n}\r\n\r\n/*!\r\n    \\brief      wait RTC last write operation finished flag set\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rtc_lwoff_wait(void) {\r\n  /* loop until LWOFF flag is set */\r\n  while (RESET == (RTC_CTL & RTC_CTL_LWOFF)) {\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      wait RTC registers synchronized flag set\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rtc_register_sync_wait(void) {\r\n  /* clear RSYNF flag */\r\n  RTC_CTL &= ~RTC_CTL_RSYNF;\r\n  /* loop until RSYNF flag is set */\r\n  while (RESET == (RTC_CTL & RTC_CTL_RSYNF)) {\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      set RTC alarm value\r\n    \\param[in]  alarm: RTC alarm value\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rtc_alarm_config(uint32_t alarm) {\r\n  rtc_configuration_mode_enter();\r\n  /* set the alarm high bits */\r\n  RTC_ALRMH = (alarm >> RTC_HIGH_BITS_OFFSET);\r\n  /* set the alarm low bits */\r\n  RTC_ALRML = (alarm & RTC_LOW_BITS_MASK);\r\n  rtc_configuration_mode_exit();\r\n}\r\n\r\n/*!\r\n    \\brief      get RTC counter value\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     RTC counter value\r\n*/\r\nuint32_t rtc_counter_get(void) {\r\n  uint32_t temp = 0x0U;\r\n\r\n  temp = RTC_CNTL;\r\n  temp |= (RTC_CNTH << RTC_HIGH_BITS_OFFSET);\r\n  return temp;\r\n}\r\n\r\n/*!\r\n    \\brief      get RTC divider value\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     RTC divider value\r\n*/\r\nuint32_t rtc_divider_get(void) {\r\n  uint32_t temp = 0x00U;\r\n\r\n  temp = ((RTC_DIVH & RTC_DIVH_DIV) << RTC_HIGH_BITS_OFFSET);\r\n  temp |= RTC_DIVL;\r\n  return temp;\r\n}\r\n\r\n/*!\r\n    \\brief      get RTC flag status\r\n    \\param[in]  flag: specify which flag status to get\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RTC_FLAG_SECOND: second interrupt flag\r\n      \\arg        RTC_FLAG_ALARM: alarm interrupt flag\r\n      \\arg        RTC_FLAG_OVERFLOW: overflow interrupt flag\r\n      \\arg        RTC_FLAG_RSYN: registers synchronized flag\r\n      \\arg        RTC_FLAG_LWOF: last write operation finished flag\r\n    \\param[out] none\r\n    \\retval     SET or RESET\r\n*/\r\nFlagStatus rtc_flag_get(uint32_t flag) {\r\n  if (RESET != (RTC_CTL & flag)) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear RTC flag status\r\n    \\param[in]  flag: specify which flag status to clear\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        RTC_FLAG_SECOND: second interrupt flag\r\n      \\arg        RTC_FLAG_ALARM: alarm interrupt flag\r\n      \\arg        RTC_FLAG_OVERFLOW: overflow interrupt flag\r\n      \\arg        RTC_FLAG_RSYN: registers synchronized flag\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rtc_flag_clear(uint32_t flag) {\r\n  /* clear RTC flag */\r\n  RTC_CTL &= ~flag;\r\n}\r\n\r\n/*!\r\n    \\brief      get RTC interrupt flag status\r\n    \\param[in]  flag: specify which flag status to get\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        RTC_INT_FLAG_SECOND: second interrupt flag\r\n      \\arg        RTC_INT_FLAG_ALARM: alarm interrupt flag\r\n      \\arg        RTC_INT_FLAG_OVERFLOW: overflow interrupt flag\r\n    \\param[out] none\r\n    \\retval     SET or RESET\r\n*/\r\nFlagStatus rtc_interrupt_flag_get(uint32_t flag) {\r\n  if (RESET != (RTC_CTL & flag)) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear RTC interrupt flag status\r\n    \\param[in]  flag: specify which flag status to clear\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        RTC_INT_FLAG_SECOND: second interrupt flag\r\n      \\arg        RTC_INT_FLAG_ALARM: alarm interrupt flag\r\n      \\arg        RTC_INT_FLAG_OVERFLOW: overflow interrupt flag\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rtc_interrupt_flag_clear(uint32_t flag) {\r\n  /* clear RTC interrupt flag */\r\n  RTC_CTL &= ~flag;\r\n}\r\n\r\n/*!\r\n    \\brief      enable RTC interrupt\r\n    \\param[in]  interrupt: specify which interrupt to enbale\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        RTC_INT_SECOND: second interrupt\r\n      \\arg        RTC_INT_ALARM: alarm interrupt\r\n      \\arg        RTC_INT_OVERFLOW: overflow interrupt\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rtc_interrupt_enable(uint32_t interrupt) { RTC_INTEN |= interrupt; }\r\n\r\n/*!\r\n    \\brief      disable RTC interrupt\r\n    \\param[in]  interrupt: specify which interrupt to disbale\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        RTC_INT_SECOND: second interrupt\r\n      \\arg        RTC_INT_ALARM: alarm interrupt\r\n      \\arg        RTC_INT_OVERFLOW: overflow interrupt\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid rtc_interrupt_disable(uint32_t interrupt) { RTC_INTEN &= ~interrupt; }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_spi.c",
    "content": "/*!\r\n    \\file    gd32vf103_spi.c\r\n    \\brief   SPI driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_spi.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n/* SPI/I2S parameter initialization mask */\r\n#define SPI_INIT_MASK ((uint32_t)0x00003040U) /*!< SPI parameter initialization mask */\r\n#define I2S_INIT_MASK ((uint32_t)0x0000F047U) /*!< I2S parameter initialization mask */\r\n\r\n/* I2S clock source selection, multiplication and division mask */\r\n#define I2S1_CLOCK_SEL     ((uint32_t)0x00020000U) /* I2S1 clock source selection */\r\n#define I2S2_CLOCK_SEL     ((uint32_t)0x00040000U) /* I2S2 clock source selection */\r\n#define I2S_CLOCK_MUL_MASK ((uint32_t)0x0000F000U) /* I2S clock multiplication mask */\r\n#define I2S_CLOCK_DIV_MASK ((uint32_t)0x000000F0U) /* I2S clock division mask */\r\n\r\n/* default value and offset */\r\n#define SPI_I2SPSC_DEFAULT_VALUE ((uint32_t)0x00000002U) /* default value of SPI_I2SPSC register */\r\n#define RCU_CFG1_PREDV1_OFFSET   4U                      /* PREDV1 offset in RCU_CFG1 */\r\n#define RCU_CFG1_PLL2MF_OFFSET   12U                     /* PLL2MF offset in RCU_CFG1 */\r\n\r\n/*!\r\n    \\brief      reset SPI and I2S\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_i2s_deinit(uint32_t spi_periph) {\r\n  switch (spi_periph) {\r\n  case SPI0:\r\n    /* reset SPI0 */\r\n    rcu_periph_reset_enable(RCU_SPI0RST);\r\n    rcu_periph_reset_disable(RCU_SPI0RST);\r\n    break;\r\n  case SPI1:\r\n    /* reset SPI1 and I2S1 */\r\n    rcu_periph_reset_enable(RCU_SPI1RST);\r\n    rcu_periph_reset_disable(RCU_SPI1RST);\r\n    break;\r\n  case SPI2:\r\n    /* reset SPI2 and I2S2 */\r\n    rcu_periph_reset_enable(RCU_SPI2RST);\r\n    rcu_periph_reset_disable(RCU_SPI2RST);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      initialize the parameters of SPI struct with the default values\r\n    \\param[in]  spi_struct: SPI parameter stuct\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_struct_para_init(spi_parameter_struct *spi_struct) {\r\n  /* set the SPI struct with the default values */\r\n  spi_struct->device_mode          = SPI_SLAVE;\r\n  spi_struct->trans_mode           = SPI_TRANSMODE_FULLDUPLEX;\r\n  spi_struct->frame_size           = SPI_FRAMESIZE_8BIT;\r\n  spi_struct->nss                  = SPI_NSS_HARD;\r\n  spi_struct->clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;\r\n  spi_struct->prescale             = SPI_PSC_2;\r\n}\r\n\r\n/*!\r\n    \\brief      initialize SPI parameter\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[in]  spi_struct: SPI parameter initialization stuct members of the structure\r\n                            and the member values are shown as below:\r\n                  device_mode: SPI_MASTER, SPI_SLAVE\r\n                  trans_mode: SPI_TRANSMODE_FULLDUPLEX, SPI_TRANSMODE_RECEIVEONLY,\r\n                              SPI_TRANSMODE_BDRECEIVE, SPI_TRANSMODE_BDTRANSMIT\r\n                  frame_size: SPI_FRAMESIZE_16BIT, SPI_FRAMESIZE_8BIT\r\n                  nss: SPI_NSS_SOFT, SPI_NSS_HARD\r\n                  endian: SPI_ENDIAN_MSB, SPI_ENDIAN_LSB\r\n                  clock_polarity_phase: SPI_CK_PL_LOW_PH_1EDGE, SPI_CK_PL_HIGH_PH_1EDGE\r\n                                        SPI_CK_PL_LOW_PH_2EDGE, SPI_CK_PL_HIGH_PH_2EDGE\r\n                  prescale: SPI_PSC_n (n=2,4,8,16,32,64,128,256)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_init(uint32_t spi_periph, spi_parameter_struct *spi_struct) {\r\n  uint32_t reg = 0U;\r\n  reg          = SPI_CTL0(spi_periph);\r\n  reg &= SPI_INIT_MASK;\r\n\r\n  /* select SPI as master or slave */\r\n  reg |= spi_struct->device_mode;\r\n  /* select SPI transfer mode */\r\n  reg |= spi_struct->trans_mode;\r\n  /* select SPI frame size */\r\n  reg |= spi_struct->frame_size;\r\n  /* select SPI NSS use hardware or software */\r\n  reg |= spi_struct->nss;\r\n  /* select SPI LSB or MSB */\r\n  reg |= spi_struct->endian;\r\n  /* select SPI polarity and phase */\r\n  reg |= spi_struct->clock_polarity_phase;\r\n  /* select SPI prescale to adjust transmit speed */\r\n  reg |= spi_struct->prescale;\r\n\r\n  /* write to SPI_CTL0 register */\r\n  SPI_CTL0(spi_periph) = (uint32_t)reg;\r\n\r\n  SPI_I2SCTL(spi_periph) &= (uint32_t)(~SPI_I2SCTL_I2SSEL);\r\n}\r\n\r\n/*!\r\n    \\brief      enable SPI\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_enable(uint32_t spi_periph) { SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_SPIEN; }\r\n\r\n/*!\r\n    \\brief      disable SPI\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_disable(uint32_t spi_periph) { SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_SPIEN); }\r\n\r\n/*!\r\n    \\brief      initialize I2S parameter\r\n    \\param[in]  spi_periph: SPIx(x=1,2)\r\n    \\param[in]  mode: I2S operation mode\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        I2S_MODE_SLAVETX: I2S slave transmit mode\r\n      \\arg        I2S_MODE_SLAVERX: I2S slave receive mode\r\n      \\arg        I2S_MODE_MASTERTX: I2S master transmit mode\r\n      \\arg        I2S_MODE_MASTERRX: I2S master receive mode\r\n    \\param[in]  standard: I2S standard\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        I2S_STD_PHILLIPS: I2S phillips standard\r\n      \\arg        I2S_STD_MSB: I2S MSB standard\r\n      \\arg        I2S_STD_LSB: I2S LSB standard\r\n      \\arg        I2S_STD_PCMSHORT: I2S PCM short standard\r\n      \\arg        I2S_STD_PCMLONG: I2S PCM long standard\r\n    \\param[in]  ckpl: I2S idle state clock polarity\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        I2S_CKPL_LOW: I2S clock polarity low level\r\n      \\arg        I2S_CKPL_HIGH: I2S clock polarity high level\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid i2s_init(uint32_t spi_periph, uint32_t mode, uint32_t standard, uint32_t ckpl) {\r\n  uint32_t reg = 0U;\r\n  reg          = SPI_I2SCTL(spi_periph);\r\n  reg &= I2S_INIT_MASK;\r\n\r\n  /* enable I2S mode */\r\n  reg |= (uint32_t)SPI_I2SCTL_I2SSEL;\r\n  /* select I2S mode */\r\n  reg |= (uint32_t)mode;\r\n  /* select I2S standard */\r\n  reg |= (uint32_t)standard;\r\n  /* select I2S polarity */\r\n  reg |= (uint32_t)ckpl;\r\n\r\n  /* write to SPI_I2SCTL register */\r\n  SPI_I2SCTL(spi_periph) = (uint32_t)reg;\r\n}\r\n\r\n/*!\r\n    \\brief      configure I2S prescaler\r\n    \\param[in]  spi_periph: SPIx(x=1,2)\r\n    \\param[in]  audiosample: I2S audio sample rate\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        I2S_AUDIOSAMPLE_8K: audio sample rate is 8KHz\r\n      \\arg        I2S_AUDIOSAMPLE_11K: audio sample rate is 11KHz\r\n      \\arg        I2S_AUDIOSAMPLE_16K: audio sample rate is 16KHz\r\n      \\arg        I2S_AUDIOSAMPLE_22K: audio sample rate is 22KHz\r\n      \\arg        I2S_AUDIOSAMPLE_32K: audio sample rate is 32KHz\r\n      \\arg        I2S_AUDIOSAMPLE_44K: audio sample rate is 44KHz\r\n      \\arg        I2S_AUDIOSAMPLE_48K: audio sample rate is 48KHz\r\n      \\arg        I2S_AUDIOSAMPLE_96K: audio sample rate is 96KHz\r\n      \\arg        I2S_AUDIOSAMPLE_192K: audio sample rate is 192KHz\r\n    \\param[in]  frameformat: I2S data length and channel length\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        I2S_FRAMEFORMAT_DT16B_CH16B: I2S data length is 16 bit and channel length is 16 bit\r\n      \\arg        I2S_FRAMEFORMAT_DT16B_CH32B: I2S data length is 16 bit and channel length is 32 bit\r\n      \\arg        I2S_FRAMEFORMAT_DT24B_CH32B: I2S data length is 24 bit and channel length is 32 bit\r\n      \\arg        I2S_FRAMEFORMAT_DT32B_CH32B: I2S data length is 32 bit and channel length is 32 bit\r\n    \\param[in]  mckout: I2S master clock output\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        I2S_MCKOUT_ENABLE: I2S master clock output enable\r\n      \\arg        I2S_MCKOUT_DISABLE: I2S master clock output disable\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid i2s_psc_config(uint32_t spi_periph, uint32_t audiosample, uint32_t frameformat, uint32_t mckout) {\r\n  uint32_t i2sdiv = 2U, i2sof = 0U;\r\n  uint32_t clks     = 0U;\r\n  uint32_t i2sclock = 0U;\r\n\r\n  /* deinit SPI_I2SPSC register */\r\n  SPI_I2SPSC(spi_periph) = SPI_I2SPSC_DEFAULT_VALUE;\r\n\r\n  /* get the I2S clock source */\r\n  if (SPI1 == ((uint32_t)spi_periph)) {\r\n    /* I2S1 clock source selection */\r\n    clks = I2S1_CLOCK_SEL;\r\n  } else {\r\n    /* I2S2 clock source selection */\r\n    clks = I2S2_CLOCK_SEL;\r\n  }\r\n\r\n  if (0U != (RCU_CFG1 & clks)) {\r\n    /* get RCU PLL2 clock multiplication factor */\r\n    clks = (uint32_t)((RCU_CFG1 & I2S_CLOCK_MUL_MASK) >> RCU_CFG1_PLL2MF_OFFSET);\r\n\r\n    if ((clks > 5U) && (clks < 15U)) {\r\n      /* multiplier is between 8 and 16 */\r\n      clks += 2U;\r\n    } else {\r\n      if (15U == clks) {\r\n        /* multiplier is 20 */\r\n        clks = 20U;\r\n      }\r\n    }\r\n\r\n    /* get the PREDV1 value */\r\n    i2sclock = (uint32_t)(((RCU_CFG1 & I2S_CLOCK_DIV_MASK) >> RCU_CFG1_PREDV1_OFFSET) + 1U);\r\n    /* calculate I2S clock based on PLL2 and PREDV1 */\r\n    i2sclock = (uint32_t)((HXTAL_VALUE / i2sclock) * clks * 2U);\r\n  } else {\r\n    /* get system clock */\r\n    i2sclock = rcu_clock_freq_get(CK_SYS);\r\n  }\r\n\r\n  /* config the prescaler depending on the mclk output state, the frame format and audio sample rate */\r\n  if (I2S_MCKOUT_ENABLE == mckout) {\r\n    clks = (uint32_t)(((i2sclock / 256U) * 10U) / audiosample);\r\n  } else {\r\n    if (I2S_FRAMEFORMAT_DT16B_CH16B == frameformat) {\r\n      clks = (uint32_t)(((i2sclock / 32U) * 10U) / audiosample);\r\n    } else {\r\n      clks = (uint32_t)(((i2sclock / 64U) * 10U) / audiosample);\r\n    }\r\n  }\r\n\r\n  /* remove the floating point */\r\n  clks   = (clks + 5U) / 10U;\r\n  i2sof  = (clks & 0x00000001U);\r\n  i2sdiv = ((clks - i2sof) / 2U);\r\n  i2sof  = (i2sof << 8U);\r\n\r\n  /* set the default values */\r\n  if ((i2sdiv < 2U) || (i2sdiv > 255U)) {\r\n    i2sdiv = 2U;\r\n    i2sof  = 0U;\r\n  }\r\n  /* configure SPI_I2SPSC */\r\n  SPI_I2SPSC(spi_periph) = (uint32_t)(i2sdiv | i2sof | mckout);\r\n\r\n  /* clear SPI_I2SCTL_DTLEN and SPI_I2SCTL_CHLEN bits */\r\n  SPI_I2SCTL(spi_periph) &= (uint32_t)(~(SPI_I2SCTL_DTLEN | SPI_I2SCTL_CHLEN));\r\n  /* configure data frame format */\r\n  SPI_I2SCTL(spi_periph) |= (uint32_t)frameformat;\r\n}\r\n\r\n/*!\r\n    \\brief      enable I2S\r\n    \\param[in]  spi_periph: SPIx(x=1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid i2s_enable(uint32_t spi_periph) { SPI_I2SCTL(spi_periph) |= (uint32_t)SPI_I2SCTL_I2SEN; }\r\n\r\n/*!\r\n    \\brief      disable I2S\r\n    \\param[in]  spi_periph: SPIx(x=1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid i2s_disable(uint32_t spi_periph) { SPI_I2SCTL(spi_periph) &= (uint32_t)(~SPI_I2SCTL_I2SEN); }\r\n\r\n/*!\r\n    \\brief      enable SPI NSS output\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_nss_output_enable(uint32_t spi_periph) { SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_NSSDRV; }\r\n\r\n/*!\r\n    \\brief      disable SPI NSS output\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_nss_output_disable(uint32_t spi_periph) { SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_NSSDRV); }\r\n\r\n/*!\r\n    \\brief      SPI NSS pin high level in software mode\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_nss_internal_high(uint32_t spi_periph) { SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_SWNSS; }\r\n\r\n/*!\r\n    \\brief      SPI NSS pin low level in software mode\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_nss_internal_low(uint32_t spi_periph) { SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_SWNSS); }\r\n\r\n/*!\r\n    \\brief      enable SPI DMA send or receive\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[in]  dma: SPI DMA mode\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        SPI_DMA_TRANSMIT: SPI transmit data using DMA\r\n      \\arg        SPI_DMA_RECEIVE: SPI receive data using DMA\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_dma_enable(uint32_t spi_periph, uint8_t dma) {\r\n  if (SPI_DMA_TRANSMIT == dma) {\r\n    SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_DMATEN;\r\n  } else {\r\n    SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_DMAREN;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      disable SPI DMA send or receive\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[in]  dma: SPI DMA mode\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        SPI_DMA_TRANSMIT: SPI transmit data using DMA\r\n      \\arg        SPI_DMA_RECEIVE: SPI receive data using DMA\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_dma_disable(uint32_t spi_periph, uint8_t dma) {\r\n  if (SPI_DMA_TRANSMIT == dma) {\r\n    SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_DMATEN);\r\n  } else {\r\n    SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_DMAREN);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure SPI/I2S data frame format\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[in]  frame_format: SPI frame size\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        SPI_FRAMESIZE_16BIT: SPI frame size is 16 bits\r\n      \\arg        SPI_FRAMESIZE_8BIT: SPI frame size is 8 bits\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_i2s_data_frame_format_config(uint32_t spi_periph, uint16_t frame_format) {\r\n  /* clear SPI_CTL0_FF16 bit */\r\n  SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_FF16);\r\n  /* configure SPI_CTL0_FF16 bit */\r\n  SPI_CTL0(spi_periph) |= (uint32_t)frame_format;\r\n}\r\n\r\n/*!\r\n    \\brief      SPI transmit data\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[in]  data: 16-bit data\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_i2s_data_transmit(uint32_t spi_periph, uint16_t data) { SPI_DATA(spi_periph) = (uint32_t)data; }\r\n\r\n/*!\r\n    \\brief      SPI receive data\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     16-bit data\r\n*/\r\nuint16_t spi_i2s_data_receive(uint32_t spi_periph) { return ((uint16_t)SPI_DATA(spi_periph)); }\r\n\r\n/*!\r\n    \\brief      configure SPI bidirectional transfer direction\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[in]  transfer_direction: SPI transfer direction\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        SPI_BIDIRECTIONAL_TRANSMIT: SPI work in transmit-only mode\r\n      \\arg        SPI_BIDIRECTIONAL_RECEIVE: SPI work in receive-only mode\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_bidirectional_transfer_config(uint32_t spi_periph, uint32_t transfer_direction) {\r\n  if (SPI_BIDIRECTIONAL_TRANSMIT == transfer_direction) {\r\n    /* set the transmit-only mode */\r\n    SPI_CTL0(spi_periph) |= (uint32_t)SPI_BIDIRECTIONAL_TRANSMIT;\r\n  } else {\r\n    /* set the receive-only mode */\r\n    SPI_CTL0(spi_periph) &= SPI_BIDIRECTIONAL_RECEIVE;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      set SPI CRC polynomial\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[in]  crc_poly: CRC polynomial value\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_crc_polynomial_set(uint32_t spi_periph, uint16_t crc_poly) {\r\n  /* enable SPI CRC */\r\n  SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_CRCEN;\r\n\r\n  /* set SPI CRC polynomial */\r\n  SPI_CRCPOLY(spi_periph) = (uint32_t)crc_poly;\r\n}\r\n\r\n/*!\r\n    \\brief      get SPI CRC polynomial\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     16-bit CRC polynomial\r\n*/\r\nuint16_t spi_crc_polynomial_get(uint32_t spi_periph) { return ((uint16_t)SPI_CRCPOLY(spi_periph)); }\r\n\r\n/*!\r\n    \\brief      turn on CRC function\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_crc_on(uint32_t spi_periph) { SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_CRCEN; }\r\n\r\n/*!\r\n    \\brief      turn off CRC function\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_crc_off(uint32_t spi_periph) { SPI_CTL0(spi_periph) &= (uint32_t)(~SPI_CTL0_CRCEN); }\r\n\r\n/*!\r\n    \\brief      SPI next data is CRC value\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_crc_next(uint32_t spi_periph) { SPI_CTL0(spi_periph) |= (uint32_t)SPI_CTL0_CRCNT; }\r\n\r\n/*!\r\n    \\brief      get SPI CRC send value or receive value\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[in]  crc: SPI crc value\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        SPI_CRC_TX: get transmit crc value\r\n      \\arg        SPI_CRC_RX: get receive crc value\r\n    \\param[out] none\r\n    \\retval     16-bit CRC value\r\n*/\r\nuint16_t spi_crc_get(uint32_t spi_periph, uint8_t crc) {\r\n  if (SPI_CRC_TX == crc) {\r\n    return ((uint16_t)(SPI_TCRC(spi_periph)));\r\n  } else {\r\n    return ((uint16_t)(SPI_RCRC(spi_periph)));\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      enable SPI TI mode\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_ti_mode_enable(uint32_t spi_periph) { SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_TMOD; }\r\n\r\n/*!\r\n    \\brief      disable SPI TI mode\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_ti_mode_disable(uint32_t spi_periph) { SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_TMOD); }\r\n\r\n/*!\r\n    \\brief      enable SPI NSS pulse mode\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_nssp_mode_enable(uint32_t spi_periph) { SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_NSSP; }\r\n\r\n/*!\r\n    \\brief      disable SPI NSS pulse mode\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_nssp_mode_disable(uint32_t spi_periph) { SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_NSSP); }\r\n\r\n/*!\r\n    \\brief      enable SPI and I2S interrupt\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[in]  interrupt: SPI/I2S interrupt\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        SPI_I2S_INT_TBE: transmit buffer empty interrupt\r\n      \\arg        SPI_I2S_INT_RBNE: receive buffer not empty interrupt\r\n      \\arg        SPI_I2S_INT_ERR: CRC error,configuration error,reception overrun error,\r\n                                   transmission underrun error and format error interrupt\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_i2s_interrupt_enable(uint32_t spi_periph, uint8_t interrupt) {\r\n  switch (interrupt) {\r\n  /* SPI/I2S transmit buffer empty interrupt */\r\n  case SPI_I2S_INT_TBE:\r\n    SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_TBEIE;\r\n    break;\r\n  /* SPI/I2S receive buffer not empty interrupt */\r\n  case SPI_I2S_INT_RBNE:\r\n    SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_RBNEIE;\r\n    break;\r\n  /* SPI/I2S error */\r\n  case SPI_I2S_INT_ERR:\r\n    SPI_CTL1(spi_periph) |= (uint32_t)SPI_CTL1_ERRIE;\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      disable SPI and I2S interrupt\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[in]  interrupt: SPI/I2S interrupt\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        SPI_I2S_INT_TBE: transmit buffer empty interrupt\r\n      \\arg        SPI_I2S_INT_RBNE: receive buffer not empty interrupt\r\n      \\arg        SPI_I2S_INT_ERR: CRC error,configuration error,reception overrun error,\r\n                                   transmission underrun error and format error interrupt\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_i2s_interrupt_disable(uint32_t spi_periph, uint8_t interrupt) {\r\n  switch (interrupt) {\r\n  /* SPI/I2S transmit buffer empty interrupt */\r\n  case SPI_I2S_INT_TBE:\r\n    SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_TBEIE);\r\n    break;\r\n  /* SPI/I2S receive buffer not empty interrupt */\r\n  case SPI_I2S_INT_RBNE:\r\n    SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_RBNEIE);\r\n    break;\r\n  /* SPI/I2S error */\r\n  case SPI_I2S_INT_ERR:\r\n    SPI_CTL1(spi_periph) &= (uint32_t)(~SPI_CTL1_ERRIE);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      get SPI and I2S interrupt flag status\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[in]  interrupt: SPI/I2S interrupt flag status\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        SPI_I2S_INT_FLAG_TBE: transmit buffer empty interrupt flag\r\n      \\arg        SPI_I2S_INT_FLAG_RBNE: receive buffer not empty interrupt flag\r\n      \\arg        SPI_I2S_INT_FLAG_RXORERR: overrun interrupt flag\r\n      \\arg        SPI_INT_FLAG_CONFERR: config error interrupt flag\r\n      \\arg        SPI_INT_FLAG_CRCERR: CRC error interrupt flag\r\n      \\arg        I2S_INT_FLAG_TXURERR: underrun error interrupt flag\r\n      \\arg        SPI_I2S_INT_FLAG_FERR: format error interrupt flag\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus spi_i2s_interrupt_flag_get(uint32_t spi_periph, uint8_t interrupt) {\r\n  uint32_t reg1 = SPI_STAT(spi_periph);\r\n  uint32_t reg2 = SPI_CTL1(spi_periph);\r\n\r\n  switch (interrupt) {\r\n  /* SPI/I2S transmit buffer empty interrupt */\r\n  case SPI_I2S_INT_FLAG_TBE:\r\n    reg1 = reg1 & SPI_STAT_TBE;\r\n    reg2 = reg2 & SPI_CTL1_TBEIE;\r\n    break;\r\n  /* SPI/I2S receive buffer not empty interrupt */\r\n  case SPI_I2S_INT_FLAG_RBNE:\r\n    reg1 = reg1 & SPI_STAT_RBNE;\r\n    reg2 = reg2 & SPI_CTL1_RBNEIE;\r\n    break;\r\n  /* SPI/I2S overrun interrupt */\r\n  case SPI_I2S_INT_FLAG_RXORERR:\r\n    reg1 = reg1 & SPI_STAT_RXORERR;\r\n    reg2 = reg2 & SPI_CTL1_ERRIE;\r\n    break;\r\n  /* SPI config error interrupt */\r\n  case SPI_INT_FLAG_CONFERR:\r\n    reg1 = reg1 & SPI_STAT_CONFERR;\r\n    reg2 = reg2 & SPI_CTL1_ERRIE;\r\n    break;\r\n  /* SPI CRC error interrupt */\r\n  case SPI_INT_FLAG_CRCERR:\r\n    reg1 = reg1 & SPI_STAT_CRCERR;\r\n    reg2 = reg2 & SPI_CTL1_ERRIE;\r\n    break;\r\n  /* I2S underrun error interrupt */\r\n  case I2S_INT_FLAG_TXURERR:\r\n    reg1 = reg1 & SPI_STAT_TXURERR;\r\n    reg2 = reg2 & SPI_CTL1_ERRIE;\r\n    break;\r\n  /* SPI/I2S format error interrupt */\r\n  case SPI_I2S_INT_FLAG_FERR:\r\n    reg1 = reg1 & SPI_STAT_FERR;\r\n    reg2 = reg2 & SPI_CTL1_ERRIE;\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n  /* get SPI/I2S interrupt flag status */\r\n  if ((0U != reg1) && (0U != reg2)) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      get SPI and I2S flag status\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[in]  flag: SPI/I2S flag status\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        SPI_FLAG_TBE: transmit buffer empty flag\r\n      \\arg        SPI_FLAG_RBNE: receive buffer not empty flag\r\n      \\arg        SPI_FLAG_TRANS: transmit on-going flag\r\n      \\arg        SPI_FLAG_RXORERR: receive overrun error flag\r\n      \\arg        SPI_FLAG_CONFERR: mode config error flag\r\n      \\arg        SPI_FLAG_CRCERR: CRC error flag\r\n      \\arg        SPI_FLAG_FERR: format error interrupt flag\r\n      \\arg        I2S_FLAG_TBE: transmit buffer empty flag\r\n      \\arg        I2S_FLAG_RBNE: receive buffer not empty flag\r\n      \\arg        I2S_FLAG_TRANS: transmit on-going flag\r\n      \\arg        I2S_FLAG_RXORERR: overrun error flag\r\n      \\arg        I2S_FLAG_TXURERR: underrun error flag\r\n      \\arg        I2S_FLAG_CH: channel side flag\r\n      \\arg        I2S_FLAG_FERR: format error interrupt flag\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus spi_i2s_flag_get(uint32_t spi_periph, uint32_t flag) {\r\n  if (RESET != (SPI_STAT(spi_periph) & flag)) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear SPI CRC error flag status\r\n    \\param[in]  spi_periph: SPIx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid spi_crc_error_clear(uint32_t spi_periph) { SPI_STAT(spi_periph) &= (uint32_t)(~SPI_FLAG_CRCERR); }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_timer.c",
    "content": "/*!\r\n    \\file    gd32vf103_timer.c\r\n    \\brief   TIMER driver\r\n\r\n    \\version 2019-06-05, V1.0.1, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n#include \"gd32vf103_timer.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n/* TIMER init parameter mask */\r\n#define ALIGNEDMODE_MASK      ((uint32_t)0x00000060U) /*!< TIMER init parameter aligne dmode mask */\r\n#define COUNTERDIRECTION_MASK ((uint32_t)0x00000010U) /*!< TIMER init parameter counter direction mask */\r\n#define CLOCKDIVISION_MASK    ((uint32_t)0x00000300U) /*!< TIMER init parameter clock division value mask */\r\n\r\n/*!\r\n    \\brief      deinit a timer\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_deinit(uint32_t timer_periph) {\r\n  switch (timer_periph) {\r\n  case TIMER0:\r\n    /* reset TIMER0 */\r\n    rcu_periph_reset_enable(RCU_TIMER0RST);\r\n    rcu_periph_reset_disable(RCU_TIMER0RST);\r\n    break;\r\n  case TIMER1:\r\n    /* reset TIMER1 */\r\n    rcu_periph_reset_enable(RCU_TIMER1RST);\r\n    rcu_periph_reset_disable(RCU_TIMER1RST);\r\n    break;\r\n  case TIMER2:\r\n    /* reset TIMER2 */\r\n    rcu_periph_reset_enable(RCU_TIMER2RST);\r\n    rcu_periph_reset_disable(RCU_TIMER2RST);\r\n    break;\r\n  case TIMER3:\r\n    /* reset TIMER3 */\r\n    rcu_periph_reset_enable(RCU_TIMER3RST);\r\n    rcu_periph_reset_disable(RCU_TIMER3RST);\r\n    break;\r\n  case TIMER4:\r\n    /* reset TIMER4 */\r\n    rcu_periph_reset_enable(RCU_TIMER4RST);\r\n    rcu_periph_reset_disable(RCU_TIMER4RST);\r\n    break;\r\n  case TIMER5:\r\n    /* reset TIMER5 */\r\n    rcu_periph_reset_enable(RCU_TIMER5RST);\r\n    rcu_periph_reset_disable(RCU_TIMER5RST);\r\n    break;\r\n  case TIMER6:\r\n    /* reset TIMER6 */\r\n    rcu_periph_reset_enable(RCU_TIMER6RST);\r\n    rcu_periph_reset_disable(RCU_TIMER6RST);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      initialize TIMER init parameter struct with a default value\r\n    \\param[in]  initpara: init parameter struct\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_struct_para_init(timer_parameter_struct *initpara) {\r\n  /* initialize the init parameter struct member with the default value */\r\n  initpara->prescaler         = 0U;\r\n  initpara->alignedmode       = TIMER_COUNTER_EDGE;\r\n  initpara->counterdirection  = TIMER_COUNTER_UP;\r\n  initpara->period            = 65535U;\r\n  initpara->clockdivision     = TIMER_CKDIV_DIV1;\r\n  initpara->repetitioncounter = 0U;\r\n}\r\n\r\n/*!\r\n    \\brief      initialize TIMER counter\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[in]  initpara: init parameter struct\r\n                  prescaler: prescaler value of the counter clock, 0~65535\r\n                  alignedmode: TIMER_COUNTER_EDGE, TIMER_COUNTER_CENTER_DOWN, TIMER_COUNTER_CENTER_UP,\r\n                               TIMER_COUNTER_CENTER_BOTH\r\n                  counterdirection: TIMER_COUNTER_UP, TIMER_COUNTER_DOWN\r\n                  period: counter auto reload value, 0~65535\r\n                  clockdivision: TIMER_CKDIV_DIV1, TIMER_CKDIV_DIV2, TIMER_CKDIV_DIV4\r\n                  repetitioncounter: counter repetition value, 0~255\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_init(uint32_t timer_periph, timer_parameter_struct *initpara) {\r\n  /* configure the counter prescaler value */\r\n  TIMER_PSC(timer_periph) = (uint16_t)initpara->prescaler;\r\n\r\n  /* configure the counter direction and aligned mode */\r\n  if ((TIMER0 == timer_periph) || (TIMER1 == timer_periph) || (TIMER2 == timer_periph) || (TIMER3 == timer_periph) || (TIMER4 == timer_periph)) {\r\n    TIMER_CTL0(timer_periph) &= (~(uint32_t)(TIMER_CTL0_DIR | TIMER_CTL0_CAM));\r\n    TIMER_CTL0(timer_periph) |= (uint32_t)(initpara->alignedmode & ALIGNEDMODE_MASK);\r\n    TIMER_CTL0(timer_periph) |= (uint32_t)(initpara->counterdirection & COUNTERDIRECTION_MASK);\r\n  } else {\r\n    TIMER_CTL0(timer_periph) &= (uint32_t)(~TIMER_CTL0_DIR);\r\n    TIMER_CTL0(timer_periph) |= (uint32_t)(initpara->counterdirection & COUNTERDIRECTION_MASK);\r\n  }\r\n\r\n  /* configure the autoreload value */\r\n  TIMER_CAR(timer_periph) = (uint32_t)initpara->period;\r\n\r\n  if ((TIMER5 != timer_periph) && (TIMER6 != timer_periph)) {\r\n    /* reset the CKDIV bit */\r\n    TIMER_CTL0(timer_periph) &= (~(uint32_t)TIMER_CTL0_CKDIV);\r\n    TIMER_CTL0(timer_periph) |= (uint32_t)(initpara->clockdivision & CLOCKDIVISION_MASK);\r\n  }\r\n\r\n  if (TIMER0 == timer_periph) {\r\n    /* configure the repetition counter value */\r\n    TIMER_CREP(timer_periph) = (uint32_t)initpara->repetitioncounter;\r\n  }\r\n\r\n  /* generate an update event */\r\n  TIMER_SWEVG(timer_periph) |= (uint32_t)TIMER_SWEVG_UPG;\r\n}\r\n\r\n/*!\r\n    \\brief      enable a timer\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_enable(uint32_t timer_periph) { TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_CEN; }\r\n\r\n/*!\r\n    \\brief      disable a timer\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_disable(uint32_t timer_periph) { TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_CEN; }\r\n\r\n/*!\r\n    \\brief      enable the auto reload shadow function\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_auto_reload_shadow_enable(uint32_t timer_periph) { TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_ARSE; }\r\n\r\n/*!\r\n    \\brief      disable the auto reload shadow function\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_auto_reload_shadow_disable(uint32_t timer_periph) { TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_ARSE; }\r\n\r\n/*!\r\n    \\brief      enable the update event\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_update_event_enable(uint32_t timer_periph) { TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_UPDIS; }\r\n\r\n/*!\r\n    \\brief      disable the update event\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_update_event_disable(uint32_t timer_periph) { TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_UPDIS; }\r\n\r\n/*!\r\n    \\brief      set TIMER counter alignment mode\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  aligned:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_COUNTER_EDGE: edge-aligned mode\r\n      \\arg        TIMER_COUNTER_CENTER_DOWN: center-aligned and counting down assert mode\r\n      \\arg        TIMER_COUNTER_CENTER_UP: center-aligned and counting up assert mode\r\n      \\arg        TIMER_COUNTER_CENTER_BOTH: center-aligned and counting up/down assert mode\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_counter_alignment(uint32_t timer_periph, uint16_t aligned) {\r\n  TIMER_CTL0(timer_periph) &= (uint32_t)(~TIMER_CTL0_CAM);\r\n  TIMER_CTL0(timer_periph) |= (uint32_t)aligned;\r\n}\r\n\r\n/*!\r\n    \\brief      set TIMER counter up direction\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_counter_up_direction(uint32_t timer_periph) { TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_DIR; }\r\n\r\n/*!\r\n    \\brief      set TIMER counter down direction\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_counter_down_direction(uint32_t timer_periph) { TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_DIR; }\r\n\r\n/*!\r\n    \\brief      configure TIMER prescaler\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[in]  prescaler: prescaler value\r\n    \\param[in]  pscreload: prescaler reload mode\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_PSC_RELOAD_NOW: the prescaler is loaded right now\r\n      \\arg        TIMER_PSC_RELOAD_UPDATE: the prescaler is loaded at the next update event\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_prescaler_config(uint32_t timer_periph, uint16_t prescaler, uint32_t pscreload) {\r\n  TIMER_PSC(timer_periph) = (uint32_t)prescaler;\r\n\r\n  if (TIMER_PSC_RELOAD_NOW == pscreload) {\r\n    TIMER_SWEVG(timer_periph) |= (uint32_t)TIMER_SWEVG_UPG;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER repetition register value\r\n    \\param[in]  timer_periph: TIMERx(x=0)\r\n    \\param[in]  repetition: the counter repetition value, 0~255\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_repetition_value_config(uint32_t timer_periph, uint16_t repetition) { TIMER_CREP(timer_periph) = (uint32_t)repetition; }\r\n\r\n/*!\r\n    \\brief      configure TIMER autoreload register value\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[in]  autoreload: the counter auto-reload value\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_autoreload_value_config(uint32_t timer_periph, uint16_t autoreload) { TIMER_CAR(timer_periph) = (uint32_t)autoreload; }\r\n\r\n/*!\r\n    \\brief      configure TIMER counter register value\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[in]  counter: the counter value\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_counter_value_config(uint32_t timer_periph, uint16_t counter) { TIMER_CNT(timer_periph) = (uint32_t)counter; }\r\n\r\n/*!\r\n    \\brief      read TIMER counter value\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[out] none\r\n    \\retval     counter value\r\n*/\r\nuint32_t timer_counter_read(uint32_t timer_periph) {\r\n  uint32_t count_value = 0U;\r\n  count_value          = TIMER_CNT(timer_periph);\r\n  return (count_value);\r\n}\r\n\r\n/*!\r\n    \\brief      read TIMER prescaler value\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[out] none\r\n    \\retval     prescaler register value\r\n*/\r\nuint16_t timer_prescaler_read(uint32_t timer_periph) {\r\n  uint16_t prescaler_value = 0U;\r\n  prescaler_value          = (uint16_t)(TIMER_PSC(timer_periph));\r\n  return (prescaler_value);\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER single pulse mode\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[in]  spmode:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_SP_MODE_SINGLE: single pulse mode\r\n      \\arg        TIMER_SP_MODE_REPETITIVE: repetitive pulse mode\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_single_pulse_mode_config(uint32_t timer_periph, uint32_t spmode) {\r\n  if (TIMER_SP_MODE_SINGLE == spmode) {\r\n    TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_SPM;\r\n  } else if (TIMER_SP_MODE_REPETITIVE == spmode) {\r\n    TIMER_CTL0(timer_periph) &= ~((uint32_t)TIMER_CTL0_SPM);\r\n  } else {\r\n    /* illegal parameters */\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER update source\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[in]  update:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_UPDATE_SRC_GLOBAL: update generate by setting of UPG bit or the counter overflow/underflow,\r\n                                           or the slave mode controller trigger\r\n      \\arg        TIMER_UPDATE_SRC_REGULAR: update generate only by counter overflow/underflow\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_update_source_config(uint32_t timer_periph, uint32_t update) {\r\n  if (TIMER_UPDATE_SRC_REGULAR == update) {\r\n    TIMER_CTL0(timer_periph) |= (uint32_t)TIMER_CTL0_UPS;\r\n  } else if (TIMER_UPDATE_SRC_GLOBAL == update) {\r\n    TIMER_CTL0(timer_periph) &= ~(uint32_t)TIMER_CTL0_UPS;\r\n  } else {\r\n    /* illegal parameters */\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      enable the TIMER DMA\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[in]  dma: specify which DMA to enable\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        TIMER_DMA_UPD:  update DMA enable, TIMERx(x=0..6)\r\n      \\arg        TIMER_DMA_CH0D: channel 0 DMA enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_DMA_CH1D: channel 1 DMA enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_DMA_CH2D: channel 2 DMA enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_DMA_CH3D: channel 3 DMA enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_DMA_CMTD: channel commutation DMA request enable, TIMERx(x=0)\r\n      \\arg        TIMER_DMA_TRGD: trigger DMA enable, TIMERx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_dma_enable(uint32_t timer_periph, uint16_t dma) { TIMER_DMAINTEN(timer_periph) |= (uint32_t)dma; }\r\n\r\n/*!\r\n    \\brief      disable the TIMER DMA\r\n    \\param[in]  timer_periph: TIMERxTIMERx(x=0..6)\r\n    \\param[in]  dma: specify which DMA to disbale\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        TIMER_DMA_UPD:  update DMA enable, TIMERx(x=0..6)\r\n      \\arg        TIMER_DMA_CH0D: channel 0 DMA enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_DMA_CH1D: channel 1 DMA enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_DMA_CH2D: channel 2 DMA enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_DMA_CH3D: channel 3 DMA enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_DMA_CMTD: channel commutation DMA request enable, TIMERx(x=0)\r\n      \\arg        TIMER_DMA_TRGD: trigger DMA enable, TIMERx(x=0..4,7)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_dma_disable(uint32_t timer_periph, uint16_t dma) { TIMER_DMAINTEN(timer_periph) &= (~(uint32_t)(dma)); }\r\n\r\n/*!\r\n    \\brief      channel DMA request source selection\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  dma_request: channel DMA request source selection\r\n                only one parameter can be selected which is shown as below:\r\n       \\arg        TIMER_DMAREQUEST_CHANNELEVENT: DMA request of channel n is sent when channel n event occurs\r\n       \\arg        TIMER_DMAREQUEST_UPDATEEVENT: DMA request of channel n is sent when update event occurs\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_channel_dma_request_source_select(uint32_t timer_periph, uint32_t dma_request) {\r\n  if (TIMER_DMAREQUEST_UPDATEEVENT == dma_request) {\r\n    TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_DMAS;\r\n  } else if (TIMER_DMAREQUEST_CHANNELEVENT == dma_request) {\r\n    TIMER_CTL1(timer_periph) &= ~(uint32_t)TIMER_CTL1_DMAS;\r\n  } else {\r\n    /* illegal parameters */\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure the TIMER DMA transfer\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  dma_baseaddr:\r\n                only one parameter can be selected which is shown as below:\r\n       \\arg        TIMER_DMACFG_DMATA_CTL0: DMA transfer address is TIMER_CTL0, TIMERx(x=0..4)\r\n       \\arg        TIMER_DMACFG_DMATA_CTL1: DMA transfer address is TIMER_CTL1, TIMERx(x=0..4)\r\n       \\arg        TIMER_DMACFG_DMATA_SMCFG: DMA transfer address is TIMER_SMCFG, TIMERx(x=0..4)\r\n       \\arg        TIMER_DMACFG_DMATA_DMAINTEN: DMA transfer address is TIMER_DMAINTEN, TIMERx(x=0..4)\r\n       \\arg        TIMER_DMACFG_DMATA_INTF: DMA transfer address is TIMER_INTF, TIMERx(x=0..4)\r\n       \\arg        TIMER_DMACFG_DMATA_SWEVG: DMA transfer address is TIMER_SWEVG, TIMERx(x=0..4)\r\n       \\arg        TIMER_DMACFG_DMATA_CHCTL0: DMA transfer address is TIMER_CHCTL0, TIMERx(x=0..4)\r\n       \\arg        TIMER_DMACFG_DMATA_CHCTL1: DMA transfer address is TIMER_CHCTL1, TIMERx(x=0..4)\r\n       \\arg        TIMER_DMACFG_DMATA_CHCTL2: DMA transfer address is TIMER_CHCTL2, TIMERx(x=0..4)\r\n       \\arg        TIMER_DMACFG_DMATA_CNT: DMA transfer address is TIMER_CNT, TIMERx(x=0..4)\r\n       \\arg        TIMER_DMACFG_DMATA_PSC: DMA transfer address is TIMER_PSC, TIMERx(x=0..4)\r\n       \\arg        TIMER_DMACFG_DMATA_CAR: DMA transfer address is TIMER_CAR, TIMERx(x=0..4)\r\n       \\arg        TIMER_DMACFG_DMATA_CREP: DMA transfer address is TIMER_CREP, TIMERx(x=0)\r\n       \\arg        TIMER_DMACFG_DMATA_CH0CV: DMA transfer address is TIMER_CH0CV, TIMERx(x=0..4)\r\n       \\arg        TIMER_DMACFG_DMATA_CH1CV: DMA transfer address is TIMER_CH1CV, TIMERx(x=0..4)\r\n       \\arg        TIMER_DMACFG_DMATA_CH2CV: DMA transfer address is TIMER_CH2CV, TIMERx(x=0..4)\r\n       \\arg        TIMER_DMACFG_DMATA_CH3CV: DMA transfer address is TIMER_CH3CV, TIMERx(x=0..4)\r\n       \\arg        TIMER_DMACFG_DMATA_CCHP: DMA transfer address is TIMER_CCHP, TIMERx(x=0)\r\n       \\arg        TIMER_DMACFG_DMATA_DMACFG: DMA transfer address is TIMER_DMACFG, TIMERx(x=0..4)\r\n    \\param[in]  dma_lenth:\r\n                only one parameter can be selected which is shown as below:\r\n       \\arg        TIMER_DMACFG_DMATC_xTRANSFER(x=1..6): DMA transfer x time\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_dma_transfer_config(uint32_t timer_periph, uint32_t dma_baseaddr, uint32_t dma_lenth) {\r\n  TIMER_DMACFG(timer_periph) &= (~(uint32_t)(TIMER_DMACFG_DMATA | TIMER_DMACFG_DMATC));\r\n  TIMER_DMACFG(timer_periph) |= (uint32_t)(dma_baseaddr | dma_lenth);\r\n}\r\n\r\n/*!\r\n    \\brief      software generate events\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  event: the timer software event generation sources\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        TIMER_EVENT_SRC_UPG: update event generation, TIMERx(x=0..6)\r\n      \\arg        TIMER_EVENT_SRC_CH0G: channel 0 capture or compare event generation, TIMERx(x=0..4)\r\n      \\arg        TIMER_EVENT_SRC_CH1G: channel 1 capture or compare event generation, TIMERx(x=0..4)\r\n      \\arg        TIMER_EVENT_SRC_CH2G: channel 2 capture or compare event generation, TIMERx(x=0..4)\r\n      \\arg        TIMER_EVENT_SRC_CH3G: channel 3 capture or compare event generation, TIMERx(x=0..4)\r\n      \\arg        TIMER_EVENT_SRC_CMTG: channel commutation event generation, TIMERx(x=0)\r\n      \\arg        TIMER_EVENT_SRC_TRGG: trigger event generation, TIMERx(x=0..4)\r\n      \\arg        TIMER_EVENT_SRC_BRKG:  break event generation, TIMERx(x=0)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_event_software_generate(uint32_t timer_periph, uint16_t event) { TIMER_SWEVG(timer_periph) |= (uint32_t)event; }\r\n\r\n/*!\r\n    \\brief      initialize TIMER break parameter struct with a default value\r\n    \\param[in]  breakpara: TIMER break parameter struct\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_break_struct_para_init(timer_break_parameter_struct *breakpara) {\r\n  /* initialize the break parameter struct member with the default value */\r\n  breakpara->runoffstate     = TIMER_ROS_STATE_DISABLE;\r\n  breakpara->ideloffstate    = TIMER_IOS_STATE_DISABLE;\r\n  breakpara->deadtime        = 0U;\r\n  breakpara->breakpolarity   = TIMER_BREAK_POLARITY_LOW;\r\n  breakpara->outputautostate = TIMER_OUTAUTO_DISABLE;\r\n  breakpara->protectmode     = TIMER_CCHP_PROT_OFF;\r\n  breakpara->breakstate      = TIMER_BREAK_DISABLE;\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER break function\r\n    \\param[in]  timer_periph: TIMERx(x=0)\r\n    \\param[in]  breakpara: TIMER break parameter struct\r\n                  runoffstate: TIMER_ROS_STATE_ENABLE, TIMER_ROS_STATE_DISABLE\r\n                  ideloffstate: TIMER_IOS_STATE_ENABLE, TIMER_IOS_STATE_DISABLE\r\n                  deadtime: 0~255\r\n                  breakpolarity: TIMER_BREAK_POLARITY_LOW, TIMER_BREAK_POLARITY_HIGH\r\n                  outputautostate: TIMER_OUTAUTO_ENABLE, TIMER_OUTAUTO_DISABLE\r\n                  protectmode: TIMER_CCHP_PROT_OFF, TIMER_CCHP_PROT_0, TIMER_CCHP_PROT_1, TIMER_CCHP_PROT_2\r\n                  breakstate: TIMER_BREAK_ENABLE, TIMER_BREAK_DISABLE\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_break_config(uint32_t timer_periph, timer_break_parameter_struct *breakpara) {\r\n  TIMER_CCHP(timer_periph) = (uint32_t)(((uint32_t)(breakpara->runoffstate)) | ((uint32_t)(breakpara->ideloffstate)) | ((uint32_t)(breakpara->deadtime)) | ((uint32_t)(breakpara->breakpolarity)) |\r\n                                        ((uint32_t)(breakpara->outputautostate)) | ((uint32_t)(breakpara->protectmode)) | ((uint32_t)(breakpara->breakstate)));\r\n}\r\n\r\n/*!\r\n    \\brief      enable TIMER break function\r\n    \\param[in]  timer_periph: TIMERx(x=0)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_break_enable(uint32_t timer_periph) { TIMER_CCHP(timer_periph) |= (uint32_t)TIMER_CCHP_BRKEN; }\r\n\r\n/*!\r\n    \\brief      disable TIMER break function\r\n    \\param[in]  timer_periph: TIMERx(x=0)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_break_disable(uint32_t timer_periph) { TIMER_CCHP(timer_periph) &= ~(uint32_t)TIMER_CCHP_BRKEN; }\r\n\r\n/*!\r\n    \\brief      enable TIMER output automatic function\r\n    \\param[in]  timer_periph: TIMERx(x=0)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_automatic_output_enable(uint32_t timer_periph) { TIMER_CCHP(timer_periph) |= (uint32_t)TIMER_CCHP_OAEN; }\r\n\r\n/*!\r\n    \\brief      disable TIMER output automatic function\r\n    \\param[in]  timer_periph: TIMERx(x=0)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_automatic_output_disable(uint32_t timer_periph) { TIMER_CCHP(timer_periph) &= ~(uint32_t)TIMER_CCHP_OAEN; }\r\n\r\n/*!\r\n    \\brief      enable or disable TIMER primary output function\r\n    \\param[in]  timer_periph: TIMERx(x=0)\r\n    \\param[in]  newvalue: ENABLE or DISABLE\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_primary_output_config(uint32_t timer_periph, ControlStatus newvalue) {\r\n  if (ENABLE == newvalue) {\r\n    TIMER_CCHP(timer_periph) |= (uint32_t)TIMER_CCHP_POEN;\r\n  } else {\r\n    TIMER_CCHP(timer_periph) &= (~(uint32_t)TIMER_CCHP_POEN);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      enable or disable channel capture/compare control shadow register\r\n    \\param[in]  timer_periph: TIMERx(x=0)\r\n    \\param[in]  newvalue: ENABLE or DISABLE\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_channel_control_shadow_config(uint32_t timer_periph, ControlStatus newvalue) {\r\n  if (ENABLE == newvalue) {\r\n    TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_CCSE;\r\n  } else {\r\n    TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_CCSE);\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER channel control shadow register update control\r\n    \\param[in]  timer_periph: TIMERx(x=0)\r\n    \\param[in]  ccuctl: channel control shadow register update control\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_UPDATECTL_CCU: the shadow registers update by when CMTG bit is set\r\n      \\arg        TIMER_UPDATECTL_CCUTRI: the shadow registers update by when CMTG bit is set or an rising edge of TRGI occurs\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_channel_control_shadow_update_config(uint32_t timer_periph, uint32_t ccuctl) {\r\n  if (TIMER_UPDATECTL_CCU == ccuctl) {\r\n    TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_CCUC);\r\n  } else if (TIMER_UPDATECTL_CCUTRI == ccuctl) {\r\n    TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_CCUC;\r\n  } else {\r\n    /* illegal parameters */\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      initialize TIMER channel output parameter struct with a default value\r\n    \\param[in]  ocpara: TIMER channel n output parameter struct\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_channel_output_struct_para_init(timer_oc_parameter_struct *ocpara) {\r\n  /* initialize the channel output parameter struct member with the default value */\r\n  ocpara->outputstate  = TIMER_CCX_DISABLE;\r\n  ocpara->outputnstate = TIMER_CCXN_DISABLE;\r\n  ocpara->ocpolarity   = TIMER_OC_POLARITY_HIGH;\r\n  ocpara->ocnpolarity  = TIMER_OCN_POLARITY_HIGH;\r\n  ocpara->ocidlestate  = TIMER_OC_IDLE_STATE_LOW;\r\n  ocpara->ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER channel output function\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  channel:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4))\r\n    \\param[in]  ocpara: TIMER channeln output parameter struct\r\n                  outputstate: TIMER_CCX_ENABLE, TIMER_CCX_DISABLE\r\n                  outputnstate: TIMER_CCXN_ENABLE, TIMER_CCXN_DISABLE\r\n                  ocpolarity: TIMER_OC_POLARITY_HIGH, TIMER_OC_POLARITY_LOW\r\n                  ocnpolarity: TIMER_OCN_POLARITY_HIGH, TIMER_OCN_POLARITY_LOW\r\n                  ocidlestate: TIMER_OC_IDLE_STATE_LOW, TIMER_OC_IDLE_STATE_HIGH\r\n                  ocnidlestate: TIMER_OCN_IDLE_STATE_LOW, TIMER_OCN_IDLE_STATE_HIGH\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_channel_output_config(uint32_t timer_periph, uint16_t channel, timer_oc_parameter_struct *ocpara) {\r\n  switch (channel) {\r\n  /* configure TIMER_CH_0 */\r\n  case TIMER_CH_0:\r\n    /* reset the CH0EN bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN);\r\n    /* set the CH0EN bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->outputstate;\r\n    /* reset the CH0P bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0P);\r\n    /* set the CH0P bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->ocpolarity;\r\n\r\n    if (TIMER0 == timer_periph) {\r\n      /* reset the CH0NEN bit */\r\n      TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NEN);\r\n      /* set the CH0NEN bit */\r\n      TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->outputnstate;\r\n      /* reset the CH0NP bit */\r\n      TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NP);\r\n      /* set the CH0NP bit */\r\n      TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpara->ocnpolarity;\r\n      /* reset the ISO0 bit */\r\n      TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO0);\r\n      /* set the ISO0 bit */\r\n      TIMER_CTL1(timer_periph) |= (uint32_t)ocpara->ocidlestate;\r\n      /* reset the ISO0N bit */\r\n      TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO0N);\r\n      /* set the ISO0N bit */\r\n      TIMER_CTL1(timer_periph) |= (uint32_t)ocpara->ocnidlestate;\r\n    }\r\n    TIMER_CHCTL0(timer_periph) &= ~(uint32_t)TIMER_CHCTL0_CH0MS;\r\n    break;\r\n  /* configure TIMER_CH_1 */\r\n  case TIMER_CH_1:\r\n    /* reset the CH1EN bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN);\r\n    /* set the CH1EN bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputstate) << 4U);\r\n    /* reset the CH1P bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1P);\r\n    /* set the CH1P bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocpolarity) << 4U);\r\n\r\n    if (TIMER0 == timer_periph) {\r\n      /* reset the CH1NEN bit */\r\n      TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NEN);\r\n      /* set the CH1NEN bit */\r\n      TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputnstate) << 4U);\r\n      /* reset the CH1NP bit */\r\n      TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NP);\r\n      /* set the CH1NP bit */\r\n      TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnpolarity) << 4U);\r\n      /* reset the ISO1 bit */\r\n      TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO1);\r\n      /* set the ISO1 bit */\r\n      TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocidlestate) << 2U);\r\n      /* reset the ISO1N bit */\r\n      TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO1N);\r\n      /* set the ISO1N bit */\r\n      TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnidlestate) << 2U);\r\n    }\r\n    TIMER_CHCTL0(timer_periph) &= ~(uint32_t)TIMER_CHCTL0_CH1MS;\r\n    break;\r\n  /* configure TIMER_CH_2 */\r\n  case TIMER_CH_2:\r\n    /* reset the CH2EN bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2EN);\r\n    /* set the CH2EN bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputstate) << 8U);\r\n    /* reset the CH2P bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2P);\r\n    /* set the CH2P bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocpolarity) << 8U);\r\n\r\n    if (TIMER0 == timer_periph) {\r\n      /* reset the CH2NEN bit */\r\n      TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NEN);\r\n      /* set the CH2NEN bit */\r\n      TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputnstate) << 8U);\r\n      /* reset the CH2NP bit */\r\n      TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NP);\r\n      /* set the CH2NP bit */\r\n      TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnpolarity) << 8U);\r\n      /* reset the ISO2 bit */\r\n      TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO2);\r\n      /* set the ISO2 bit */\r\n      TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocidlestate) << 4U);\r\n      /* reset the ISO2N bit */\r\n      TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO2N);\r\n      /* set the ISO2N bit */\r\n      TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocnidlestate) << 4U);\r\n    }\r\n    TIMER_CHCTL1(timer_periph) &= ~(uint32_t)TIMER_CHCTL1_CH2MS;\r\n    break;\r\n  /* configure TIMER_CH_3 */\r\n  case TIMER_CH_3:\r\n    /* reset the CH3EN bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3EN);\r\n    /* set the CH3EN bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->outputstate) << 12U);\r\n    /* reset the CH3P bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3P);\r\n    /* set the CH3P bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocpolarity) << 12U);\r\n\r\n    if (TIMER0 == timer_periph) {\r\n      /* reset the ISO3 bit */\r\n      TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_ISO3);\r\n      /* set the ISO3 bit */\r\n      TIMER_CTL1(timer_periph) |= (uint32_t)((uint32_t)(ocpara->ocidlestate) << 6U);\r\n    }\r\n    TIMER_CHCTL1(timer_periph) &= ~(uint32_t)TIMER_CHCTL1_CH3MS;\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER channel output compare mode\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  channel:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4))\r\n    \\param[in]  ocmode: channel output compare mode\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_OC_MODE_TIMING: timing mode\r\n      \\arg        TIMER_OC_MODE_ACTIVE: active mode\r\n      \\arg        TIMER_OC_MODE_INACTIVE: inactive mode\r\n      \\arg        TIMER_OC_MODE_TOGGLE: toggle mode\r\n      \\arg        TIMER_OC_MODE_LOW: force low mode\r\n      \\arg        TIMER_OC_MODE_HIGH: force high mode\r\n      \\arg        TIMER_OC_MODE_PWM0: PWM mode 0\r\n      \\arg        TIMER_OC_MODE_PWM1: PWM mode 1\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_channel_output_mode_config(uint32_t timer_periph, uint16_t channel, uint16_t ocmode) {\r\n  switch (channel) {\r\n  /* configure TIMER_CH_0 */\r\n  case TIMER_CH_0:\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMCTL);\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)ocmode;\r\n    break;\r\n  /* configure TIMER_CH_1 */\r\n  case TIMER_CH_1:\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMCTL);\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(ocmode) << 8U);\r\n    break;\r\n  /* configure TIMER_CH_2 */\r\n  case TIMER_CH_2:\r\n    TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMCTL);\r\n    TIMER_CHCTL1(timer_periph) |= (uint32_t)ocmode;\r\n    break;\r\n  /* configure TIMER_CH_3 */\r\n  case TIMER_CH_3:\r\n    TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMCTL);\r\n    TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(ocmode) << 8U);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER channel output pulse value\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  channel:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4))\r\n    \\param[in]  pulse: channel output pulse value\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_channel_output_pulse_value_config(uint32_t timer_periph, uint16_t channel, uint32_t pulse) {\r\n  switch (channel) {\r\n  /* configure TIMER_CH_0 */\r\n  case TIMER_CH_0:\r\n    TIMER_CH0CV(timer_periph) = (uint32_t)pulse;\r\n    break;\r\n  /* configure TIMER_CH_1 */\r\n  case TIMER_CH_1:\r\n    TIMER_CH1CV(timer_periph) = (uint32_t)pulse;\r\n    break;\r\n  /* configure TIMER_CH_2 */\r\n  case TIMER_CH_2:\r\n    TIMER_CH2CV(timer_periph) = (uint32_t)pulse;\r\n    break;\r\n  /* configure TIMER_CH_3 */\r\n  case TIMER_CH_3:\r\n    TIMER_CH3CV(timer_periph) = (uint32_t)pulse;\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER channel output shadow function\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  channel:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4))\r\n    \\param[in]  ocshadow: channel output shadow state\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_OC_SHADOW_ENABLE: channel output shadow state enable\r\n      \\arg        TIMER_OC_SHADOW_DISABLE: channel output shadow state disable\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_channel_output_shadow_config(uint32_t timer_periph, uint16_t channel, uint16_t ocshadow) {\r\n  switch (channel) {\r\n  /* configure TIMER_CH_0 */\r\n  case TIMER_CH_0:\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMSEN);\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)ocshadow;\r\n    break;\r\n  /* configure TIMER_CH_1 */\r\n  case TIMER_CH_1:\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMSEN);\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(ocshadow) << 8U);\r\n    break;\r\n  /* configure TIMER_CH_2 */\r\n  case TIMER_CH_2:\r\n    TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMSEN);\r\n    TIMER_CHCTL1(timer_periph) |= (uint32_t)ocshadow;\r\n    break;\r\n  /* configure TIMER_CH_3 */\r\n  case TIMER_CH_3:\r\n    TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMSEN);\r\n    TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(ocshadow) << 8U);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER channel output fast function\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  channel:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4))\r\n    \\param[in]  ocfast: channel output fast function\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_OC_FAST_ENABLE: channel output fast function enable\r\n      \\arg        TIMER_OC_FAST_DISABLE: channel output fast function disable\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_channel_output_fast_config(uint32_t timer_periph, uint16_t channel, uint16_t ocfast) {\r\n  switch (channel) {\r\n  /* configure TIMER_CH_0 */\r\n  case TIMER_CH_0:\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMFEN);\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)ocfast;\r\n    break;\r\n  /* configure TIMER_CH_1 */\r\n  case TIMER_CH_1:\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMFEN);\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)ocfast << 8U);\r\n    break;\r\n  /* configure TIMER_CH_2 */\r\n  case TIMER_CH_2:\r\n    TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMFEN);\r\n    TIMER_CHCTL1(timer_periph) |= (uint32_t)ocfast;\r\n    break;\r\n  /* configure TIMER_CH_3 */\r\n  case TIMER_CH_3:\r\n    TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMFEN);\r\n    TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)ocfast << 8U);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER channel output clear function\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  channel:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4))\r\n    \\param[in]  occlear: channel output clear function\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_OC_CLEAR_ENABLE: channel output clear function enable\r\n      \\arg        TIMER_OC_CLEAR_DISABLE: channel output clear function disable\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_channel_output_clear_config(uint32_t timer_periph, uint16_t channel, uint16_t occlear) {\r\n  switch (channel) {\r\n  /* configure TIMER_CH_0 */\r\n  case TIMER_CH_0:\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0COMCEN);\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)occlear;\r\n    break;\r\n  /* configure TIMER_CH_1 */\r\n  case TIMER_CH_1:\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1COMCEN);\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)occlear << 8U);\r\n    break;\r\n  /* configure TIMER_CH_2 */\r\n  case TIMER_CH_2:\r\n    TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2COMCEN);\r\n    TIMER_CHCTL1(timer_periph) |= (uint32_t)occlear;\r\n    break;\r\n  /* configure TIMER_CH_3 */\r\n  case TIMER_CH_3:\r\n    TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3COMCEN);\r\n    TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)occlear << 8U);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER channel output polarity\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  channel:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4))\r\n    \\param[in]  ocpolarity: channel output polarity\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_OC_POLARITY_HIGH: channel output polarity is high\r\n      \\arg        TIMER_OC_POLARITY_LOW: channel output polarity is low\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_channel_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocpolarity) {\r\n  switch (channel) {\r\n  /* configure TIMER_CH_0 */\r\n  case TIMER_CH_0:\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0P);\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)ocpolarity;\r\n    break;\r\n  /* configure TIMER_CH_1 */\r\n  case TIMER_CH_1:\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1P);\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpolarity << 4U);\r\n    break;\r\n  /* configure TIMER_CH_2 */\r\n  case TIMER_CH_2:\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2P);\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpolarity << 8U);\r\n    break;\r\n  /* configure TIMER_CH_3 */\r\n  case TIMER_CH_3:\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3P);\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocpolarity << 12U);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER channel complementary output polarity\r\n    \\param[in]  timer_periph: TIMERx(x=0)\r\n    \\param[in]  channel:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_CH_0: TIMER channel 0(TIMERx(x=0))\r\n      \\arg        TIMER_CH_1: TIMER channel 1(TIMERx(x=0))\r\n      \\arg        TIMER_CH_2: TIMER channel 2(TIMERx(x=0))\r\n    \\param[in]  ocnpolarity: channel complementary output polarity\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_OCN_POLARITY_HIGH: channel complementary output polarity is high\r\n      \\arg        TIMER_OCN_POLARITY_LOW: channel complementary output polarity is low\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_channel_complementary_output_polarity_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnpolarity) {\r\n  switch (channel) {\r\n  /* configure TIMER_CH_0 */\r\n  case TIMER_CH_0:\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NP);\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)ocnpolarity;\r\n    break;\r\n  /* configure TIMER_CH_1 */\r\n  case TIMER_CH_1:\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NP);\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnpolarity << 4U);\r\n    break;\r\n  /* configure TIMER_CH_2 */\r\n  case TIMER_CH_2:\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NP);\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnpolarity << 8U);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER channel enable state\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  channel:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4))\r\n    \\param[in]  state: TIMER channel enable state\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_CCX_ENABLE: channel enable\r\n      \\arg        TIMER_CCX_DISABLE: channel disable\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_channel_output_state_config(uint32_t timer_periph, uint16_t channel, uint32_t state) {\r\n  switch (channel) {\r\n  /* configure TIMER_CH_0 */\r\n  case TIMER_CH_0:\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN);\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)state;\r\n    break;\r\n  /* configure TIMER_CH_1 */\r\n  case TIMER_CH_1:\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN);\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)state << 4U);\r\n    break;\r\n  /* configure TIMER_CH_2 */\r\n  case TIMER_CH_2:\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2EN);\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)state << 8U);\r\n    break;\r\n  /* configure TIMER_CH_3 */\r\n  case TIMER_CH_3:\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3EN);\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)state << 12U);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER channel complementary output enable state\r\n    \\param[in]  timer_periph: TIMERx(x=0)\r\n    \\param[in]  channel:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_CH_0: TIMER channel 0\r\n      \\arg        TIMER_CH_1: TIMER channel 1\r\n      \\arg        TIMER_CH_2: TIMER channel 2\r\n    \\param[in]  ocnstate: TIMER channel complementary output enable state\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_CCXN_ENABLE: channel complementary enable\r\n      \\arg        TIMER_CCXN_DISABLE: channel complementary disable\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_channel_complementary_output_state_config(uint32_t timer_periph, uint16_t channel, uint16_t ocnstate) {\r\n  switch (channel) {\r\n  /* configure TIMER_CH_0 */\r\n  case TIMER_CH_0:\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0NEN);\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)ocnstate;\r\n    break;\r\n  /* configure TIMER_CH_1 */\r\n  case TIMER_CH_1:\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1NEN);\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnstate << 4U);\r\n    break;\r\n  /* configure TIMER_CH_2 */\r\n  case TIMER_CH_2:\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2NEN);\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)ocnstate << 8U);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      initialize TIMER channel input parameter struct with a default value\r\n    \\param[in]  icpara: TIMER channel intput parameter struct\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_channel_input_struct_para_init(timer_ic_parameter_struct *icpara) {\r\n  /* initialize the channel input parameter struct member with the default value */\r\n  icpara->icpolarity  = TIMER_IC_POLARITY_RISING;\r\n  icpara->icselection = TIMER_IC_SELECTION_DIRECTTI;\r\n  icpara->icprescaler = TIMER_IC_PSC_DIV1;\r\n  icpara->icfilter    = 0U;\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER input capture parameter\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  channel:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4))\r\n    \\param[in]  icpara: TIMER channel intput parameter struct\r\n                  icpolarity: TIMER_IC_POLARITY_RISING, TIMER_IC_POLARITY_FALLING,\r\n                              TIMER_IC_POLARITY_BOTH_EDGE(only for TIMER1~TIMER8)\r\n                  icselection: TIMER_IC_SELECTION_DIRECTTI, TIMER_IC_SELECTION_INDIRECTTI,\r\n                               TIMER_IC_SELECTION_ITS\r\n                  icprescaler: TIMER_IC_PSC_DIV1, TIMER_IC_PSC_DIV2, TIMER_IC_PSC_DIV4,\r\n                               TIMER_IC_PSC_DIV8\r\n                  icfilter: 0~15\r\n    \\param[out]  none\r\n    \\retval      none\r\n*/\r\nvoid timer_input_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct *icpara) {\r\n  switch (channel) {\r\n  /* configure TIMER_CH_0 */\r\n  case TIMER_CH_0:\r\n    /* reset the CH0EN bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN);\r\n\r\n    /* reset the CH0P and CH0NP bits */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP));\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)(icpara->icpolarity);\r\n    /* reset the CH0MS bit */\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS);\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)(icpara->icselection);\r\n    /* reset the CH0CAPFLT bit */\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT);\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 4U);\r\n\r\n    /* set the CH0EN bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN;\r\n    break;\r\n\r\n  /* configure TIMER_CH_1 */\r\n  case TIMER_CH_1:\r\n    /* reset the CH1EN bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN);\r\n\r\n    /* reset the CH1P and CH1NP bits */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP));\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpara->icpolarity) << 4U);\r\n    /* reset the CH1MS bit */\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS);\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpara->icselection) << 8U);\r\n    /* reset the CH1CAPFLT bit */\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT);\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 12U);\r\n\r\n    /* set the CH1EN bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN;\r\n    break;\r\n  /* configure TIMER_CH_2 */\r\n  case TIMER_CH_2:\r\n    /* reset the CH2EN bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH2EN);\r\n\r\n    /* reset the CH2P and CH2NP bits */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH2P | TIMER_CHCTL2_CH2NP));\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpara->icpolarity) << 8U);\r\n\r\n    /* reset the CH2MS bit */\r\n    TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2MS);\r\n    TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icselection));\r\n\r\n    /* reset the CH2CAPFLT bit */\r\n    TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2CAPFLT);\r\n    TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 4U);\r\n\r\n    /* set the CH2EN bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH2EN;\r\n    break;\r\n  /* configure TIMER_CH_3 */\r\n  case TIMER_CH_3:\r\n    /* reset the CH3EN bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH3EN);\r\n\r\n    /* reset the CH3P bits */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH3P));\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpara->icpolarity) << 12U);\r\n\r\n    /* reset the CH3MS bit */\r\n    TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3MS);\r\n    TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icselection) << 8U);\r\n\r\n    /* reset the CH3CAPFLT bit */\r\n    TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3CAPFLT);\r\n    TIMER_CHCTL1(timer_periph) |= (uint32_t)((uint32_t)(icpara->icfilter) << 12U);\r\n\r\n    /* set the CH3EN bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH3EN;\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n  /* configure TIMER channel input capture prescaler value */\r\n  timer_channel_input_capture_prescaler_config(timer_periph, channel, (uint16_t)(icpara->icprescaler));\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER channel input capture prescaler value\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  channel:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4))\r\n    \\param[in]  prescaler: channel input capture prescaler value\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_IC_PSC_DIV1: no prescaler\r\n      \\arg        TIMER_IC_PSC_DIV2: divided by 2\r\n      \\arg        TIMER_IC_PSC_DIV4: divided by 4\r\n      \\arg        TIMER_IC_PSC_DIV8: divided by 8\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_channel_input_capture_prescaler_config(uint32_t timer_periph, uint16_t channel, uint16_t prescaler) {\r\n  switch (channel) {\r\n  /* configure TIMER_CH_0 */\r\n  case TIMER_CH_0:\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPPSC);\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)prescaler;\r\n    break;\r\n  /* configure TIMER_CH_1 */\r\n  case TIMER_CH_1:\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPPSC);\r\n    TIMER_CHCTL0(timer_periph) |= ((uint32_t)prescaler << 8U);\r\n    break;\r\n  /* configure TIMER_CH_2 */\r\n  case TIMER_CH_2:\r\n    TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH2CAPPSC);\r\n    TIMER_CHCTL1(timer_periph) |= (uint32_t)prescaler;\r\n    break;\r\n  /* configure TIMER_CH_3 */\r\n  case TIMER_CH_3:\r\n    TIMER_CHCTL1(timer_periph) &= (~(uint32_t)TIMER_CHCTL1_CH3CAPPSC);\r\n    TIMER_CHCTL1(timer_periph) |= ((uint32_t)prescaler << 8U);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      read TIMER channel capture compare register value\r\n    \\param[in]  timer_periph: please refer to the following parameters\r\n    \\param[in]  channel:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_CH_0: TIMER channel 0(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_1: TIMER channel 1(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_2: TIMER channel 2(TIMERx(x=0..4))\r\n      \\arg        TIMER_CH_3: TIMER channel 3(TIMERx(x=0..4))\r\n    \\param[out] none\r\n    \\retval     channel capture compare register value\r\n*/\r\nuint32_t timer_channel_capture_value_register_read(uint32_t timer_periph, uint16_t channel) {\r\n  uint32_t count_value = 0U;\r\n\r\n  switch (channel) {\r\n  case TIMER_CH_0:\r\n    /* read TIMER channel 0 capture compare register value */\r\n    count_value = TIMER_CH0CV(timer_periph);\r\n    break;\r\n  case TIMER_CH_1:\r\n    /* read TIMER channel 1 capture compare register value */\r\n    count_value = TIMER_CH1CV(timer_periph);\r\n    break;\r\n  case TIMER_CH_2:\r\n    /* read TIMER channel 2 capture compare register value */\r\n    count_value = TIMER_CH2CV(timer_periph);\r\n    break;\r\n  case TIMER_CH_3:\r\n    /* read TIMER channel 3 capture compare register value */\r\n    count_value = TIMER_CH3CV(timer_periph);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n  return (count_value);\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER input pwm capture function\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  channel:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_CH_0: TIMER channel 0\r\n      \\arg        TIMER_CH_1: TIMER channel 1\r\n     \\param[in] icpwm: TIMER channel intput pwm parameter struct\r\n                  icpolarity: TIMER_IC_POLARITY_RISING, TIMER_IC_POLARITY_FALLING\r\n                  icselection: TIMER_IC_SELECTION_DIRECTTI, TIMER_IC_SELECTION_INDIRECTTI\r\n                  icprescaler: TIMER_IC_PSC_DIV1, TIMER_IC_PSC_DIV2, TIMER_IC_PSC_DIV4,\r\n                               TIMER_IC_PSC_DIV8\r\n                  icfilter: 0~15\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_input_pwm_capture_config(uint32_t timer_periph, uint16_t channel, timer_ic_parameter_struct *icpwm) {\r\n  uint16_t icpolarity  = 0x0U;\r\n  uint16_t icselection = 0x0U;\r\n\r\n  /* Set channel input polarity */\r\n  if (TIMER_IC_POLARITY_RISING == icpwm->icpolarity) {\r\n    icpolarity = TIMER_IC_POLARITY_FALLING;\r\n  } else {\r\n    icpolarity = TIMER_IC_POLARITY_RISING;\r\n  }\r\n  /* Set channel input mode selection */\r\n  if (TIMER_IC_SELECTION_DIRECTTI == icpwm->icselection) {\r\n    icselection = TIMER_IC_SELECTION_INDIRECTTI;\r\n  } else {\r\n    icselection = TIMER_IC_SELECTION_DIRECTTI;\r\n  }\r\n\r\n  if (TIMER_CH_0 == channel) {\r\n    /* reset the CH0EN bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN);\r\n    /* reset the CH0P and CH0NP bits */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP));\r\n    /* set the CH0P and CH0NP bits */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)(icpwm->icpolarity);\r\n    /* reset the CH0MS bit */\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS);\r\n    /* set the CH0MS bit */\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)(icpwm->icselection);\r\n    /* reset the CH0CAPFLT bit */\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT);\r\n    /* set the CH0CAPFLT bit */\r\n    TIMER_CHCTL0(timer_periph) |= ((uint32_t)(icpwm->icfilter) << 4U);\r\n    /* set the CH0EN bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN;\r\n    /* configure TIMER channel input capture prescaler value */\r\n    timer_channel_input_capture_prescaler_config(timer_periph, TIMER_CH_0, (uint16_t)(icpwm->icprescaler));\r\n\r\n    /* reset the CH1EN bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN);\r\n    /* reset the CH1P and CH1NP bits */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP));\r\n    /* set the CH1P and CH1NP bits */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)icpolarity << 4U);\r\n    /* reset the CH1MS bit */\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS);\r\n    /* set the CH1MS bit */\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)icselection << 8U);\r\n    /* reset the CH1CAPFLT bit */\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT);\r\n    /* set the CH1CAPFLT bit */\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icfilter) << 12U);\r\n    /* set the CH1EN bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN;\r\n    /* configure TIMER channel input capture prescaler value */\r\n    timer_channel_input_capture_prescaler_config(timer_periph, TIMER_CH_1, (uint16_t)(icpwm->icprescaler));\r\n  } else {\r\n    /* reset the CH1EN bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN);\r\n    /* reset the CH1P and CH1NP bits */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP));\r\n    /* set the CH1P and CH1NP bits */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icpolarity) << 4U);\r\n    /* reset the CH1MS bit */\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS);\r\n    /* set the CH1MS bit */\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icselection) << 8U);\r\n    /* reset the CH1CAPFLT bit */\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT);\r\n    /* set the CH1CAPFLT bit */\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)(icpwm->icfilter) << 12U);\r\n    /* set the CH1EN bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN;\r\n    /* configure TIMER channel input capture prescaler value */\r\n    timer_channel_input_capture_prescaler_config(timer_periph, TIMER_CH_1, (uint16_t)(icpwm->icprescaler));\r\n\r\n    /* reset the CH0EN bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN);\r\n    /* reset the CH0P and CH0NP bits */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP));\r\n    /* set the CH0P and CH0NP bits */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)icpolarity;\r\n    /* reset the CH0MS bit */\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS);\r\n    /* set the CH0MS bit */\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)icselection;\r\n    /* reset the CH0CAPFLT bit */\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT);\r\n    /* set the CH0CAPFLT bit */\r\n    TIMER_CHCTL0(timer_periph) |= ((uint32_t)(icpwm->icfilter) << 4U);\r\n    /* set the CH0EN bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN;\r\n    /* configure TIMER channel input capture prescaler value */\r\n    timer_channel_input_capture_prescaler_config(timer_periph, TIMER_CH_0, (uint16_t)(icpwm->icprescaler));\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER hall sensor mode\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  hallmode:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_HALLINTERFACE_ENABLE: TIMER hall sensor mode enable\r\n      \\arg        TIMER_HALLINTERFACE_DISABLE: TIMER hall sensor mode disable\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_hall_mode_config(uint32_t timer_periph, uint32_t hallmode) {\r\n  if (TIMER_HALLINTERFACE_ENABLE == hallmode) {\r\n    TIMER_CTL1(timer_periph) |= (uint32_t)TIMER_CTL1_TI0S;\r\n  } else if (TIMER_HALLINTERFACE_DISABLE == hallmode) {\r\n    TIMER_CTL1(timer_periph) &= ~(uint32_t)TIMER_CTL1_TI0S;\r\n  } else {\r\n    /* illegal parameters */\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      select TIMER input trigger source\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  intrigger:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_SMCFG_TRGSEL_ITI0: internal trigger 0(TIMERx(x=0..4))\r\n      \\arg        TIMER_SMCFG_TRGSEL_ITI1: internal trigger 1(TIMERx(x=0..4))\r\n      \\arg        TIMER_SMCFG_TRGSEL_ITI2: internal trigger 2(TIMERx(x=0..4))\r\n      \\arg        TIMER_SMCFG_TRGSEL_ITI3: internal trigger 3(TIMERx(x=0..4))\r\n      \\arg        TIMER_SMCFG_TRGSEL_CI0F_ED: TI0 edge detector(TIMERx(x=0..4))\r\n      \\arg        TIMER_SMCFG_TRGSEL_CI0FE0: filtered TIMER input 0(TIMERx(x=0..4))\r\n      \\arg        TIMER_SMCFG_TRGSEL_CI1FE1: filtered TIMER input 1(TIMERx(x=0..4))\r\n      \\arg        TIMER_SMCFG_TRGSEL_ETIFP: filtered external trigger input(TIMERx(x=0..4))\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_input_trigger_source_select(uint32_t timer_periph, uint32_t intrigger) {\r\n  TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_TRGS);\r\n  TIMER_SMCFG(timer_periph) |= (uint32_t)intrigger;\r\n}\r\n\r\n/*!\r\n    \\brief      select TIMER master mode output trigger source\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[in]  outrigger:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_TRI_OUT_SRC_RESET: the UPG bit as trigger output(TIMERx(x=0..6))\r\n      \\arg        TIMER_TRI_OUT_SRC_ENABLE: the counter enable signal TIMER_CTL0_CEN as trigger output(TIMERx(x=0..6))\r\n      \\arg        TIMER_TRI_OUT_SRC_UPDATE: update event as trigger output(TIMERx(x=0..6))\r\n      \\arg        TIMER_TRI_OUT_SRC_CH0: a capture or a compare match occurred in channel 0 as trigger output TRGO(TIMERx(x=0..4))\r\n      \\arg        TIMER_TRI_OUT_SRC_O0CPRE: O0CPRE as trigger output(TIMERx(x=0..4))\r\n      \\arg        TIMER_TRI_OUT_SRC_O1CPRE: O1CPRE as trigger output(TIMERx(x=0..4))\r\n      \\arg        TIMER_TRI_OUT_SRC_O2CPRE: O2CPRE as trigger output(TIMERx(x=0..4))\r\n      \\arg        TIMER_TRI_OUT_SRC_O3CPRE: O3CPRE as trigger output(TIMERx(x=0..4))\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_master_output_trigger_source_select(uint32_t timer_periph, uint32_t outrigger) {\r\n  TIMER_CTL1(timer_periph) &= (~(uint32_t)TIMER_CTL1_MMC);\r\n  TIMER_CTL1(timer_periph) |= (uint32_t)outrigger;\r\n}\r\n\r\n/*!\r\n    \\brief      select TIMER slave mode\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  slavemode:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_SLAVE_MODE_DISABLE: slave mode disable\r\n      \\arg        TIMER_ENCODER_MODE0: encoder mode 0\r\n      \\arg        TIMER_ENCODER_MODE1: encoder mode 1\r\n      \\arg        TIMER_ENCODER_MODE2: encoder mode 2\r\n      \\arg        TIMER_SLAVE_MODE_RESTART: restart mode\r\n      \\arg        TIMER_SLAVE_MODE_PAUSE: pause mode\r\n      \\arg        TIMER_SLAVE_MODE_EVENT: event mode\r\n      \\arg        TIMER_SLAVE_MODE_EXTERNAL0: external clock mode 0\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\n\r\nvoid timer_slave_mode_select(uint32_t timer_periph, uint32_t slavemode) {\r\n  TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_SMC);\r\n  TIMER_SMCFG(timer_periph) |= (uint32_t)slavemode;\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER master slave mode\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  masterslave:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_MASTER_SLAVE_MODE_ENABLE: master slave mode enable\r\n      \\arg        TIMER_MASTER_SLAVE_MODE_DISABLE: master slave mode disable\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_master_slave_mode_config(uint32_t timer_periph, uint32_t masterslave) {\r\n  if (TIMER_MASTER_SLAVE_MODE_ENABLE == masterslave) {\r\n    TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SMCFG_MSM;\r\n  } else if (TIMER_MASTER_SLAVE_MODE_DISABLE == masterslave) {\r\n    TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_MSM;\r\n  } else {\r\n    /* illegal parameters */\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER external trigger input\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  extprescaler:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_EXT_TRI_PSC_OFF: no divided\r\n      \\arg        TIMER_EXT_TRI_PSC_DIV2: divided by 2\r\n      \\arg        TIMER_EXT_TRI_PSC_DIV4: divided by 4\r\n      \\arg        TIMER_EXT_TRI_PSC_DIV8: divided by 8\r\n    \\param[in]  extpolarity:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_ETP_FALLING: active low or falling edge active\r\n      \\arg        TIMER_ETP_RISING: active high or rising edge active\r\n    \\param[in]  extfilter: a value between 0 and 15\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_external_trigger_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter) {\r\n  TIMER_SMCFG(timer_periph) &= (~(uint32_t)(TIMER_SMCFG_ETP | TIMER_SMCFG_ETPSC | TIMER_SMCFG_ETFC));\r\n  TIMER_SMCFG(timer_periph) |= (uint32_t)(extprescaler | extpolarity);\r\n  TIMER_SMCFG(timer_periph) |= (uint32_t)(extfilter << 8U);\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER quadrature decoder mode\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  decomode:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_ENCODER_MODE0: counter counts on CI0FE0 edge depending on CI1FE1 level\r\n      \\arg        TIMER_ENCODER_MODE1: counter counts on CI1FE1 edge depending on CI0FE0 level\r\n      \\arg        TIMER_ENCODER_MODE2: counter counts on both CI0FE0 and CI1FE1 edges depending on the level of the other input\r\n    \\param[in]  ic0polarity:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_IC_POLARITY_RISING: capture rising edge\r\n      \\arg        TIMER_IC_POLARITY_FALLING: capture falling edge\r\n    \\param[in]  ic1polarity:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_IC_POLARITY_RISING: capture rising edge\r\n      \\arg        TIMER_IC_POLARITY_FALLING: capture falling edge\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_quadrature_decoder_mode_config(uint32_t timer_periph, uint32_t decomode, uint16_t ic0polarity, uint16_t ic1polarity) {\r\n  /* configure the quadrature decoder mode */\r\n  TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_SMC);\r\n  TIMER_SMCFG(timer_periph) |= (uint32_t)decomode;\r\n  /* configure input capture selection */\r\n  TIMER_CHCTL0(timer_periph) &= (uint32_t)(((~(uint32_t)TIMER_CHCTL0_CH0MS)) & ((~(uint32_t)TIMER_CHCTL0_CH1MS)));\r\n  TIMER_CHCTL0(timer_periph) |= (uint32_t)(TIMER_IC_SELECTION_DIRECTTI | ((uint32_t)TIMER_IC_SELECTION_DIRECTTI << 8U));\r\n  /* configure channel input capture polarity */\r\n  TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP));\r\n  TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP));\r\n  TIMER_CHCTL2(timer_periph) |= ((uint32_t)ic0polarity | ((uint32_t)ic1polarity << 4U));\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER internal clock mode\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_internal_clock_config(uint32_t timer_periph) { TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_SMC; }\r\n\r\n/*!\r\n    \\brief      configure TIMER the internal trigger as external clock input\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  intrigger:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_SMCFG_TRGSEL_ITI0: internal trigger 0\r\n      \\arg        TIMER_SMCFG_TRGSEL_ITI1: internal trigger 1\r\n      \\arg        TIMER_SMCFG_TRGSEL_ITI2: internal trigger 2\r\n      \\arg        TIMER_SMCFG_TRGSEL_ITI3: internal trigger 3\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_internal_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t intrigger) {\r\n  timer_input_trigger_source_select(timer_periph, intrigger);\r\n  TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_SMC;\r\n  TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SLAVE_MODE_EXTERNAL0;\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER the external trigger as external clock input\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  extrigger:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_SMCFG_TRGSEL_CI0F_ED: TI0 edge detector\r\n      \\arg        TIMER_SMCFG_TRGSEL_CI0FE0: filtered TIMER input 0\r\n      \\arg        TIMER_SMCFG_TRGSEL_CI1FE1: filtered TIMER input 1\r\n    \\param[in]  extpolarity:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_IC_POLARITY_RISING: active low or falling edge active\r\n      \\arg        TIMER_IC_POLARITY_FALLING: active high or rising edge active\r\n    \\param[in]  extfilter: a value between 0 and 15\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_external_trigger_as_external_clock_config(uint32_t timer_periph, uint32_t extrigger, uint16_t extpolarity, uint32_t extfilter) {\r\n  if (TIMER_SMCFG_TRGSEL_CI1FE1 == extrigger) {\r\n    /* reset the CH1EN bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH1EN);\r\n    /* reset the CH1NP bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH1P | TIMER_CHCTL2_CH1NP));\r\n    /* set the CH1NP bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)((uint32_t)extpolarity << 4U);\r\n    /* reset the CH1MS bit */\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1MS);\r\n    /* set the CH1MS bit */\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)((uint32_t)TIMER_IC_SELECTION_DIRECTTI << 8U);\r\n    /* reset the CH1CAPFLT bit */\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH1CAPFLT);\r\n    /* set the CH1CAPFLT bit */\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)(extfilter << 12U);\r\n    /* set the CH1EN bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH1EN;\r\n  } else {\r\n    /* reset the CH0EN bit */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)TIMER_CHCTL2_CH0EN);\r\n    /* reset the CH0P and CH0NP bits */\r\n    TIMER_CHCTL2(timer_periph) &= (~(uint32_t)(TIMER_CHCTL2_CH0P | TIMER_CHCTL2_CH0NP));\r\n    /* set the CH0P and CH0NP bits */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)extpolarity;\r\n    /* reset the CH0MS bit */\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0MS);\r\n    /* set the CH0MS bit */\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)TIMER_IC_SELECTION_DIRECTTI;\r\n    /* reset the CH0CAPFLT bit */\r\n    TIMER_CHCTL0(timer_periph) &= (~(uint32_t)TIMER_CHCTL0_CH0CAPFLT);\r\n    /* reset the CH0CAPFLT bit */\r\n    TIMER_CHCTL0(timer_periph) |= (uint32_t)(extfilter << 4U);\r\n    /* set the CH0EN bit */\r\n    TIMER_CHCTL2(timer_periph) |= (uint32_t)TIMER_CHCTL2_CH0EN;\r\n  }\r\n  /* select TIMER input trigger source */\r\n  timer_input_trigger_source_select(timer_periph, extrigger);\r\n  /* reset the SMC bit */\r\n  TIMER_SMCFG(timer_periph) &= (~(uint32_t)TIMER_SMCFG_SMC);\r\n  /* set the SMC bit */\r\n  TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SLAVE_MODE_EXTERNAL0;\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER the external clock mode0\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  extprescaler:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_EXT_TRI_PSC_OFF: no divided\r\n      \\arg        TIMER_EXT_TRI_PSC_DIV2: divided by 2\r\n      \\arg        TIMER_EXT_TRI_PSC_DIV4: divided by 4\r\n      \\arg        TIMER_EXT_TRI_PSC_DIV8: divided by 8\r\n    \\param[in]  extpolarity:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_ETP_FALLING: active low or falling edge active\r\n      \\arg        TIMER_ETP_RISING: active high or rising edge active\r\n    \\param[in]  extfilter: a value between 0 and 15\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_external_clock_mode0_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter) {\r\n  /* configure TIMER external trigger input */\r\n  timer_external_trigger_config(timer_periph, extprescaler, extpolarity, extfilter);\r\n  /* reset the SMC bit,TRGS bit */\r\n  TIMER_SMCFG(timer_periph) &= (~(uint32_t)(TIMER_SMCFG_SMC | TIMER_SMCFG_TRGS));\r\n  /* set the SMC bit,TRGS bit */\r\n  TIMER_SMCFG(timer_periph) |= (uint32_t)(TIMER_SLAVE_MODE_EXTERNAL0 | TIMER_SMCFG_TRGSEL_ETIFP);\r\n}\r\n\r\n/*!\r\n    \\brief      configure TIMER the external clock mode1\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[in]  extprescaler:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_EXT_TRI_PSC_OFF: no divided\r\n      \\arg        TIMER_EXT_TRI_PSC_DIV2: divided by 2\r\n      \\arg        TIMER_EXT_TRI_PSC_DIV4: divided by 4\r\n      \\arg        TIMER_EXT_TRI_PSC_DIV8: divided by 8\r\n    \\param[in]  extpolarity:\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_ETP_FALLING: active low or falling edge active\r\n      \\arg        TIMER_ETP_RISING: active high or rising edge active\r\n    \\param[in]  extfilter: a value between 0 and 15\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_external_clock_mode1_config(uint32_t timer_periph, uint32_t extprescaler, uint32_t extpolarity, uint32_t extfilter) {\r\n  /* configure TIMER external trigger input */\r\n  timer_external_trigger_config(timer_periph, extprescaler, extpolarity, extfilter);\r\n  TIMER_SMCFG(timer_periph) |= (uint32_t)TIMER_SMCFG_SMC1;\r\n}\r\n\r\n/*!\r\n    \\brief      disable TIMER the external clock mode1\r\n    \\param[in]  timer_periph: TIMERx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_external_clock_mode1_disable(uint32_t timer_periph) { TIMER_SMCFG(timer_periph) &= ~(uint32_t)TIMER_SMCFG_SMC1; }\r\n\r\n/*!\r\n    \\brief      enable the TIMER interrupt\r\n    \\param[in]  timer_periph: please refer to the following parameters\r\n    \\param[in]  interrupt: specify which interrupt to enable\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        TIMER_INT_UP: update interrupt enable, TIMERx(x=0..6)\r\n      \\arg        TIMER_INT_CH0: channel 0 interrupt enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_CH1: channel 1 interrupt enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_CH2: channel 2 interrupt enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_CH3: channel 3 interrupt enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_CMT: commutation interrupt enable, TIMERx(x=0)\r\n      \\arg        TIMER_INT_TRG: trigger interrupt enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_BRK: break interrupt enable, TIMERx(x=0)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_interrupt_enable(uint32_t timer_periph, uint32_t interrupt) { TIMER_DMAINTEN(timer_periph) |= (uint32_t)interrupt; }\r\n\r\n/*!\r\n    \\brief      disable the TIMER interrupt\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[in]  interrupt: specify which interrupt to disbale\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        TIMER_INT_UP: update interrupt enable, TIMERx(x=0..6)\r\n      \\arg        TIMER_INT_CH0: channel 0 interrupt enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_CH1: channel 1 interrupt enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_CH2: channel 2 interrupt enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_CH3: channel 3 interrupt enable , TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_CMT: commutation interrupt enable, TIMERx(x=0)\r\n      \\arg        TIMER_INT_TRG: trigger interrupt enable, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_BRK: break interrupt enable, TIMERx(x=0)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_interrupt_disable(uint32_t timer_periph, uint32_t interrupt) { TIMER_DMAINTEN(timer_periph) &= (~(uint32_t)interrupt); }\r\n\r\n/*!\r\n    \\brief      get timer interrupt flag\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[in]  interrupt: the timer interrupt bits\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_INT_FLAG_UP: update interrupt flag, TIMERx(x=0..6)\r\n      \\arg        TIMER_INT_FLAG_CH0: channel 0 interrupt flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_FLAG_CH1: channel 1 interrupt flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_FLAG_CH2: channel 2 interrupt flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_FLAG_CH3: channel 3 interrupt flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_FLAG_CMT: channel commutation interrupt flag, TIMERx(x=0)\r\n      \\arg        TIMER_INT_FLAG_TRG: trigger interrupt flag, TIMERx(x=0)\r\n      \\arg        TIMER_INT_FLAG_BRK: break interrupt flag, TIMERx(x=0)\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus timer_interrupt_flag_get(uint32_t timer_periph, uint32_t interrupt) {\r\n  uint32_t val;\r\n  val = (TIMER_DMAINTEN(timer_periph) & interrupt);\r\n  if ((RESET != (TIMER_INTF(timer_periph) & interrupt)) && (RESET != val)) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear TIMER interrupt flag\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[in]  interrupt: the timer interrupt bits\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        TIMER_INT_FLAG_UP: update interrupt flag, TIMERx(x=0..6)\r\n      \\arg        TIMER_INT_FLAG_CH0: channel 0 interrupt flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_FLAG_CH1: channel 1 interrupt flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_FLAG_CH2: channel 2 interrupt flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_FLAG_CH3: channel 3 interrupt flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_FLAG_CMT: channel commutation interrupt flag, TIMERx(x=0)\r\n      \\arg        TIMER_INT_FLAG_TRG: trigger interrupt flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_INT_FLAG_BRK: break interrupt flag, TIMERx(x=0)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_interrupt_flag_clear(uint32_t timer_periph, uint32_t interrupt) { TIMER_INTF(timer_periph) = (~(uint32_t)interrupt); }\r\n\r\n/*!\r\n    \\brief      get TIMER flags\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[in]  flag: the timer interrupt flags\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        TIMER_FLAG_UP: update flag, TIMERx(x=0..6)\r\n      \\arg        TIMER_FLAG_CH0: channel 0 flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_FLAG_CH1: channel 1 flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_FLAG_CH2: channel 2 flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_FLAG_CH3: channel 3 flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_FLAG_CMT: channel commutation flag, TIMERx(x=0)\r\n      \\arg        TIMER_FLAG_TRG: trigger flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_FLAG_BRK: break flag, TIMERx(x=0)\r\n      \\arg        TIMER_FLAG_CH0O: channel 0 overcapture flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_FLAG_CH1O: channel 1 overcapture flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_FLAG_CH2O: channel 2 overcapture flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_FLAG_CH3O: channel 3 overcapture flag, TIMERx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus timer_flag_get(uint32_t timer_periph, uint32_t flag) {\r\n  if (RESET != (TIMER_INTF(timer_periph) & flag)) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear TIMER flags\r\n    \\param[in]  timer_periph: TIMERx(x=0..6)\r\n    \\param[in]  flag: the timer interrupt flags\r\n                one or more parameters can be selected which are shown as below:\r\n      \\arg        TIMER_FLAG_UP: update flag, TIMERx(x=0..6)\r\n      \\arg        TIMER_FLAG_CH0: channel 0 flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_FLAG_CH1: channel 1 flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_FLAG_CH2: channel 2 flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_FLAG_CH3: channel 3 flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_FLAG_CMT: channel commutation flag, TIMERx(x=0)\r\n      \\arg        TIMER_FLAG_TRG: trigger flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_FLAG_BRK: break flag, TIMERx(x=0)\r\n      \\arg        TIMER_FLAG_CH0O: channel 0 overcapture flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_FLAG_CH1O: channel 1 overcapture flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_FLAG_CH2O: channel 2 overcapture flag, TIMERx(x=0..4)\r\n      \\arg        TIMER_FLAG_CH3O: channel 3 overcapture flag, TIMERx(x=0..4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid timer_flag_clear(uint32_t timer_periph, uint32_t flag) { TIMER_INTF(timer_periph) = (~(uint32_t)flag); }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_usart.c",
    "content": "/*!\r\n    \\file    gd32vf103_usart.c\r\n    \\brief   USART driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2019-09-18, V1.0.1, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_usart.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n/*!\r\n    \\brief      reset USART/UART\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_deinit(uint32_t usart_periph) {\r\n  switch (usart_periph) {\r\n  case USART0:\r\n    /* reset USART0 */\r\n    rcu_periph_reset_enable(RCU_USART0RST);\r\n    rcu_periph_reset_disable(RCU_USART0RST);\r\n    break;\r\n  case USART1:\r\n    /* reset USART1 */\r\n    rcu_periph_reset_enable(RCU_USART1RST);\r\n    rcu_periph_reset_disable(RCU_USART1RST);\r\n    break;\r\n  case USART2:\r\n    /* reset USART2 */\r\n    rcu_periph_reset_enable(RCU_USART2RST);\r\n    rcu_periph_reset_disable(RCU_USART2RST);\r\n    break;\r\n  case UART3:\r\n    /* reset UART3 */\r\n    rcu_periph_reset_enable(RCU_UART3RST);\r\n    rcu_periph_reset_disable(RCU_UART3RST);\r\n    break;\r\n  case UART4:\r\n    /* reset UART4 */\r\n    rcu_periph_reset_enable(RCU_UART4RST);\r\n    rcu_periph_reset_disable(RCU_UART4RST);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      configure USART baud rate value\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in]  baudval: baud rate value\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_baudrate_set(uint32_t usart_periph, uint32_t baudval) {\r\n  uint32_t uclk = 0U, intdiv = 0U, fradiv = 0U, udiv = 0U;\r\n  switch (usart_periph) {\r\n    /* get clock frequency */\r\n  case USART0:\r\n    /* get USART0 clock */\r\n    uclk = rcu_clock_freq_get(CK_APB2);\r\n    break;\r\n  case USART1:\r\n    /* get USART1 clock */\r\n    uclk = rcu_clock_freq_get(CK_APB1);\r\n    break;\r\n  case USART2:\r\n    /* get USART2 clock */\r\n    uclk = rcu_clock_freq_get(CK_APB1);\r\n    break;\r\n  case UART3:\r\n    /* get UART3 clock */\r\n    uclk = rcu_clock_freq_get(CK_APB1);\r\n    break;\r\n  case UART4:\r\n    /* get UART4 clock */\r\n    uclk = rcu_clock_freq_get(CK_APB1);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n  /* oversampling by 16, configure the value of USART_BAUD */\r\n  udiv                     = (uclk + baudval / 2U) / baudval;\r\n  intdiv                   = udiv & (0x0000fff0U);\r\n  fradiv                   = udiv & (0x0000000fU);\r\n  USART_BAUD(usart_periph) = ((USART_BAUD_FRADIV | USART_BAUD_INTDIV) & (intdiv | fradiv));\r\n}\r\n\r\n/*!\r\n    \\brief     configure USART parity\r\n    \\param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in] paritycfg: configure USART parity\r\n               only one parameter can be selected which is shown as below:\r\n      \\arg       USART_PM_NONE: no parity\r\n      \\arg       USART_PM_ODD:  odd parity\r\n      \\arg       USART_PM_EVEN: even parity\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_parity_config(uint32_t usart_periph, uint32_t paritycfg) {\r\n  /* clear USART_CTL0 PM,PCEN bits */\r\n  USART_CTL0(usart_periph) &= ~(USART_CTL0_PM | USART_CTL0_PCEN);\r\n  /* configure USART parity mode */\r\n  USART_CTL0(usart_periph) |= paritycfg;\r\n}\r\n\r\n/*!\r\n    \\brief     configure USART word length\r\n    \\param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in] wlen: USART word length configure\r\n               only one parameter can be selected which is shown as below:\r\n      \\arg       USART_WL_8BIT: 8 bits\r\n      \\arg       USART_WL_9BIT: 9 bits\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_word_length_set(uint32_t usart_periph, uint32_t wlen) {\r\n  /* clear USART_CTL0 WL bit */\r\n  USART_CTL0(usart_periph) &= ~USART_CTL0_WL;\r\n  /* configure USART word length */\r\n  USART_CTL0(usart_periph) |= wlen;\r\n}\r\n\r\n/*!\r\n    \\brief     configure USART stop bit length\r\n    \\param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in] stblen: USART stop bit configure\r\n               only one parameter can be selected which is shown as below:\r\n      \\arg       USART_STB_1BIT:   1 bit\r\n      \\arg       USART_STB_0_5BIT: 0.5 bit, not available for UARTx(x=3,4)\r\n      \\arg       USART_STB_2BIT:   2 bits\r\n      \\arg       USART_STB_1_5BIT: 1.5 bits, not available for UARTx(x=3,4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_stop_bit_set(uint32_t usart_periph, uint32_t stblen) {\r\n  /* clear USART_CTL1 STB bits */\r\n  USART_CTL1(usart_periph) &= ~USART_CTL1_STB;\r\n  /* configure USART stop bits */\r\n  USART_CTL1(usart_periph) |= stblen;\r\n}\r\n\r\n/*!\r\n    \\brief      enable USART\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_enable(uint32_t usart_periph) { USART_CTL0(usart_periph) |= USART_CTL0_UEN; }\r\n\r\n/*!\r\n    \\brief     disable USART\r\n    \\param[in] usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_disable(uint32_t usart_periph) { USART_CTL0(usart_periph) &= ~(USART_CTL0_UEN); }\r\n\r\n/*!\r\n    \\brief      configure USART transmitter\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in]  txconfig: enable or disable USART transmitter\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_TRANSMIT_ENABLE: enable USART transmission\r\n      \\arg        USART_TRANSMIT_DISABLE: disable USART transmission\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_transmit_config(uint32_t usart_periph, uint32_t txconfig) {\r\n  uint32_t ctl = 0U;\r\n\r\n  ctl = USART_CTL0(usart_periph);\r\n  ctl &= ~USART_CTL0_TEN;\r\n  ctl |= txconfig;\r\n  /* configure transfer mode */\r\n  USART_CTL0(usart_periph) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      configure USART receiver\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in]  rxconfig: enable or disable USART receiver\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_RECEIVE_ENABLE: enable USART reception\r\n      \\arg        USART_RECEIVE_DISABLE: disable USART reception\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_receive_config(uint32_t usart_periph, uint32_t rxconfig) {\r\n  uint32_t ctl = 0U;\r\n\r\n  ctl = USART_CTL0(usart_periph);\r\n  ctl &= ~USART_CTL0_REN;\r\n  ctl |= rxconfig;\r\n  /* configure receiver mode */\r\n  USART_CTL0(usart_periph) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      USART transmit data function\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in]  data: data of transmission\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_data_transmit(uint32_t usart_periph, uint32_t data) { USART_DATA(usart_periph) = USART_DATA_DATA & data; }\r\n\r\n/*!\r\n    \\brief      USART receive data function\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[out] none\r\n    \\retval     data of received\r\n*/\r\nuint16_t usart_data_receive(uint32_t usart_periph) { return (uint16_t)(GET_BITS(USART_DATA(usart_periph), 0U, 8U)); }\r\n\r\n/*!\r\n    \\brief      configure the address of the USART in wake up by address match mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in]  addr: address of USART/UART\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_address_config(uint32_t usart_periph, uint8_t addr) {\r\n  USART_CTL1(usart_periph) &= ~(USART_CTL1_ADDR);\r\n  USART_CTL1(usart_periph) |= (USART_CTL1_ADDR & addr);\r\n}\r\n\r\n/*!\r\n    \\brief      receiver in mute mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_mute_mode_enable(uint32_t usart_periph) { USART_CTL0(usart_periph) |= USART_CTL0_RWU; }\r\n\r\n/*!\r\n    \\brief      receiver in active mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_mute_mode_disable(uint32_t usart_periph) { USART_CTL0(usart_periph) &= ~(USART_CTL0_RWU); }\r\n\r\n/*!\r\n    \\brief      configure wakeup method in mute mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in]  wmethod: two methods be used to enter or exit the mute mode\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_WM_IDLE: idle line\r\n      \\arg        USART_WM_ADDR: address mask\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_mute_mode_wakeup_config(uint32_t usart_periph, uint32_t wmethod) {\r\n  USART_CTL0(usart_periph) &= ~(USART_CTL0_WM);\r\n  USART_CTL0(usart_periph) |= wmethod;\r\n}\r\n\r\n/*!\r\n    \\brief      enable LIN mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_lin_mode_enable(uint32_t usart_periph) { USART_CTL1(usart_periph) |= USART_CTL1_LMEN; }\r\n\r\n/*!\r\n    \\brief      disable LIN mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_lin_mode_disable(uint32_t usart_periph) { USART_CTL1(usart_periph) &= ~(USART_CTL1_LMEN); }\r\n\r\n/*!\r\n    \\brief      configure lin break frame length\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in]  lblen: lin break frame length\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_LBLEN_10B: 10 bits\r\n      \\arg        USART_LBLEN_11B: 11 bits\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_lin_break_detection_length_config(uint32_t usart_periph, uint32_t lblen) {\r\n  USART_CTL1(usart_periph) &= ~(USART_CTL1_LBLEN);\r\n  USART_CTL1(usart_periph) |= (USART_CTL1_LBLEN & lblen);\r\n}\r\n\r\n/*!\r\n    \\brief      send break frame\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_send_break(uint32_t usart_periph) { USART_CTL0(usart_periph) |= USART_CTL0_SBKCMD; }\r\n\r\n/*!\r\n    \\brief      enable half duplex mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_halfduplex_enable(uint32_t usart_periph) { USART_CTL2(usart_periph) |= USART_CTL2_HDEN; }\r\n\r\n/*!\r\n    \\brief      disable half duplex mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_halfduplex_disable(uint32_t usart_periph) { USART_CTL2(usart_periph) &= ~(USART_CTL2_HDEN); }\r\n\r\n/*!\r\n    \\brief      enable CK pin in synchronous mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_synchronous_clock_enable(uint32_t usart_periph) { USART_CTL1(usart_periph) |= USART_CTL1_CKEN; }\r\n\r\n/*!\r\n    \\brief      disable CK pin in synchronous mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_synchronous_clock_disable(uint32_t usart_periph) { USART_CTL1(usart_periph) &= ~(USART_CTL1_CKEN); }\r\n\r\n/*!\r\n    \\brief      configure USART synchronous mode parameters\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)\r\n    \\param[in]  clen: CK length\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_CLEN_NONE: there are 7 CK pulses for an 8 bit frame and 8 CK pulses for a 9 bit frame\r\n      \\arg        USART_CLEN_EN:   there are 8 CK pulses for an 8 bit frame and 9 CK pulses for a 9 bit frame\r\n    \\param[in]  cph: clock phase\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_CPH_1CK: first clock transition is the first data capture edge\r\n      \\arg        USART_CPH_2CK: second clock transition is the first data capture edge\r\n    \\param[in]  cpl: clock polarity\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_CPL_LOW:  steady low value on CK pin\r\n      \\arg        USART_CPL_HIGH: steady high value on CK pin\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_synchronous_clock_config(uint32_t usart_periph, uint32_t clen, uint32_t cph, uint32_t cpl) {\r\n  uint32_t ctl = 0U;\r\n\r\n  /* read USART_CTL1 register */\r\n  ctl = USART_CTL1(usart_periph);\r\n  ctl &= ~(USART_CTL1_CLEN | USART_CTL1_CPH | USART_CTL1_CPL);\r\n  /* set CK length, CK phase, CK polarity */\r\n  ctl |= (USART_CTL1_CLEN & clen) | (USART_CTL1_CPH & cph) | (USART_CTL1_CPL & cpl);\r\n\r\n  USART_CTL1(usart_periph) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      configure guard time value in smartcard mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)\r\n    \\param[in]  gaut: guard time value\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_guard_time_config(uint32_t usart_periph, uint32_t gaut) {\r\n  USART_GP(usart_periph) &= ~(USART_GP_GUAT);\r\n  USART_GP(usart_periph) |= (USART_GP_GUAT & ((gaut) << 8));\r\n}\r\n\r\n/*!\r\n    \\brief      enable smartcard mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_smartcard_mode_enable(uint32_t usart_periph) { USART_CTL2(usart_periph) |= USART_CTL2_SCEN; }\r\n\r\n/*!\r\n    \\brief      disable smartcard mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_smartcard_mode_disable(uint32_t usart_periph) { USART_CTL2(usart_periph) &= ~(USART_CTL2_SCEN); }\r\n\r\n/*!\r\n    \\brief      enable NACK in smartcard mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_smartcard_mode_nack_enable(uint32_t usart_periph) { USART_CTL2(usart_periph) |= USART_CTL2_NKEN; }\r\n\r\n/*!\r\n    \\brief      disable NACK in smartcard mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_smartcard_mode_nack_disable(uint32_t usart_periph) { USART_CTL2(usart_periph) &= ~(USART_CTL2_NKEN); }\r\n\r\n/*!\r\n    \\brief      enable IrDA mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_irda_mode_enable(uint32_t usart_periph) { USART_CTL2(usart_periph) |= USART_CTL2_IREN; }\r\n\r\n/*!\r\n    \\brief      disable IrDA mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_irda_mode_disable(uint32_t usart_periph) { USART_CTL2(usart_periph) &= ~(USART_CTL2_IREN); }\r\n\r\n/*!\r\n    \\brief      configure the peripheral clock prescaler in USART IrDA low-power mode\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in]  psc: 0x00-0xFF\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_prescaler_config(uint32_t usart_periph, uint8_t psc) {\r\n  USART_GP(usart_periph) &= ~(USART_GP_PSC);\r\n  USART_GP(usart_periph) |= psc;\r\n}\r\n\r\n/*!\r\n    \\brief      configure IrDA low-power\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in]  irlp: IrDA low-power or normal\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_IRLP_LOW: low-power\r\n      \\arg        USART_IRLP_NORMAL: normal\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_irda_lowpower_config(uint32_t usart_periph, uint32_t irlp) {\r\n  USART_CTL2(usart_periph) &= ~(USART_CTL2_IRLP);\r\n  USART_CTL2(usart_periph) |= (USART_CTL2_IRLP & irlp);\r\n}\r\n\r\n/*!\r\n    \\brief      configure hardware flow control RTS\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)\r\n    \\param[in]  rtsconfig: enable or disable RTS\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_RTS_ENABLE:  enable RTS\r\n      \\arg        USART_RTS_DISABLE: disable RTS\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_hardware_flow_rts_config(uint32_t usart_periph, uint32_t rtsconfig) {\r\n  uint32_t ctl = 0U;\r\n\r\n  ctl = USART_CTL2(usart_periph);\r\n  ctl &= ~USART_CTL2_RTSEN;\r\n  ctl |= rtsconfig;\r\n  /* configure RTS */\r\n  USART_CTL2(usart_periph) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      configure hardware flow control CTS\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)\r\n    \\param[in]  ctsconfig: enable or disable CTS\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_CTS_ENABLE:  enable CTS\r\n      \\arg        USART_CTS_DISABLE: disable CTS\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_hardware_flow_cts_config(uint32_t usart_periph, uint32_t ctsconfig) {\r\n  uint32_t ctl = 0U;\r\n\r\n  ctl = USART_CTL2(usart_periph);\r\n  ctl &= ~USART_CTL2_CTSEN;\r\n  ctl |= ctsconfig;\r\n  /* configure CTS */\r\n  USART_CTL2(usart_periph) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      configure USART DMA reception\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3)\r\n    \\param[in]  dmacmd: enable or disable DMA for reception\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_DENR_ENABLE:  DMA enable for reception\r\n      \\arg        USART_DENR_DISABLE: DMA disable for reception\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_dma_receive_config(uint32_t usart_periph, uint32_t dmacmd) {\r\n  uint32_t ctl = 0U;\r\n\r\n  ctl = USART_CTL2(usart_periph);\r\n  ctl &= ~USART_CTL2_DENR;\r\n  ctl |= dmacmd;\r\n  /* configure DMA reception */\r\n  USART_CTL2(usart_periph) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      configure USART DMA transmission\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3)\r\n    \\param[in]  dmacmd: enable or disable DMA for transmission\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_DENT_ENABLE:  DMA enable for transmission\r\n      \\arg        USART_DENT_DISABLE: DMA disable for transmission\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_dma_transmit_config(uint32_t usart_periph, uint32_t dmacmd) {\r\n  uint32_t ctl = 0U;\r\n\r\n  ctl = USART_CTL2(usart_periph);\r\n  ctl &= ~USART_CTL2_DENT;\r\n  ctl |= dmacmd;\r\n  /* configure DMA transmission */\r\n  USART_CTL2(usart_periph) = ctl;\r\n}\r\n\r\n/*!\r\n    \\brief      get flag in STAT register\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in]  flag: USART flags, refer to usart_flag_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_FLAG_CTS: CTS change flag\r\n      \\arg        USART_FLAG_LBD: LIN break detected flag\r\n      \\arg        USART_FLAG_TBE: transmit data buffer empty\r\n      \\arg        USART_FLAG_TC: transmission complete\r\n      \\arg        USART_FLAG_RBNE: read data buffer not empty\r\n      \\arg        USART_FLAG_IDLE: IDLE frame detected flag\r\n      \\arg        USART_FLAG_ORERR: overrun error\r\n      \\arg        USART_FLAG_NERR: noise error flag\r\n      \\arg        USART_FLAG_FERR: frame error flag\r\n      \\arg        USART_FLAG_PERR: parity error flag\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus usart_flag_get(uint32_t usart_periph, usart_flag_enum flag) {\r\n  if (RESET != (USART_REG_VAL(usart_periph, flag) & BIT(USART_BIT_POS(flag)))) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear flag in STAT register\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in]  flag: USART flags, refer to usart_flag_enum\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_FLAG_CTS: CTS change flag\r\n      \\arg        USART_FLAG_LBD: LIN break detected flag\r\n      \\arg        USART_FLAG_TC: transmission complete\r\n      \\arg        USART_FLAG_RBNE: read data buffer not empty\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_flag_clear(uint32_t usart_periph, usart_flag_enum flag) { USART_REG_VAL(usart_periph, flag) &= ~BIT(USART_BIT_POS(flag)); }\r\n\r\n/*!\r\n    \\brief      enable USART interrupt\r\n     \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in]  interrupt\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_INT_PERR: parity error interrupt\r\n      \\arg        USART_INT_TBE: transmitter buffer empty interrupt\r\n      \\arg        USART_INT_TC: transmission complete interrupt\r\n      \\arg        USART_INT_RBNE: read data buffer not empty interrupt and overrun error interrupt\r\n      \\arg        USART_INT_IDLE: IDLE line detected interrupt\r\n      \\arg        USART_INT_LBD: LIN break detected interrupt\r\n      \\arg        USART_INT_ERR: error interrupt\r\n      \\arg        USART_INT_CTS: CTS interrupt\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_interrupt_enable(uint32_t usart_periph, uint32_t interrupt) { USART_REG_VAL(usart_periph, interrupt) |= BIT(USART_BIT_POS(interrupt)); }\r\n\r\n/*!\r\n    \\brief      disable USART interrupt\r\n     \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in]  interrupt\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_INT_PERR: parity error interrupt\r\n      \\arg        USART_INT_TBE: transmitter buffer empty interrupt\r\n      \\arg        USART_INT_TC: transmission complete interrupt\r\n      \\arg        USART_INT_RBNE: read data buffer not empty interrupt and overrun error interrupt\r\n      \\arg        USART_INT_IDLE: IDLE line detected interrupt\r\n      \\arg        USART_INT_LBD: LIN break detected interrupt\r\n      \\arg        USART_INT_ERR: error interrupt\r\n      \\arg        USART_INT_CTS: CTS interrupt\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_interrupt_disable(uint32_t usart_periph, uint32_t interrupt) { USART_REG_VAL(usart_periph, interrupt) &= ~BIT(USART_BIT_POS(interrupt)); }\r\n\r\n/*!\r\n    \\brief      get USART interrupt and flag status\r\n     \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in]  int_flag\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_INT_FLAG_PERR: parity error interrupt and flag\r\n      \\arg        USART_INT_FLAG_TBE: transmitter buffer empty interrupt and flag\r\n      \\arg        USART_INT_FLAG_TC: transmission complete interrupt and flag\r\n      \\arg        USART_INT_FLAG_RBNE: read data buffer not empty interrupt and flag\r\n      \\arg        USART_INT_FLAG_RBNE_ORERR: read data buffer not empty interrupt and overrun error flag\r\n      \\arg        USART_INT_FLAG_IDLE: IDLE line detected interrupt and flag\r\n      \\arg        USART_INT_FLAG_LBD: LIN break detected interrupt and flag\r\n      \\arg        USART_INT_FLAG_CTS: CTS interrupt and flag\r\n      \\arg        USART_INT_FLAG_ERR_ORERR: error interrupt and overrun error\r\n      \\arg        USART_INT_FLAG_ERR_NERR: error interrupt and noise error flag\r\n      \\arg        USART_INT_FLAG_ERR_FERR: error interrupt and frame error flag\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus usart_interrupt_flag_get(uint32_t usart_periph, uint32_t int_flag) {\r\n  uint32_t intenable = 0U, flagstatus = 0U;\r\n  /* get the interrupt enable bit status */\r\n  intenable = (USART_REG_VAL(usart_periph, int_flag) & BIT(USART_BIT_POS(int_flag)));\r\n  /* get the corresponding flag bit status */\r\n  flagstatus = (USART_REG_VAL2(usart_periph, int_flag) & BIT(USART_BIT_POS2(int_flag)));\r\n\r\n  if (flagstatus && intenable) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/*!\r\n    \\brief      clear USART interrupt flag in STAT register\r\n    \\param[in]  usart_periph: USARTx(x=0,1,2)/UARTx(x=3,4)\r\n    \\param[in]  int_flag: USART interrupt flag\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        USART_INT_FLAG_CTS: CTS change flag\r\n      \\arg        USART_INT_FLAG_LBD: LIN break detected flag\r\n      \\arg        USART_INT_FLAG_TC: transmission complete\r\n      \\arg        USART_INT_FLAG_RBNE: read data buffer not empty\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid usart_interrupt_flag_clear(uint32_t usart_periph, uint32_t int_flag) { USART_REG_VAL2(usart_periph, int_flag) &= ~BIT(USART_BIT_POS2(int_flag)); }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/gd32vf103_wwdgt.c",
    "content": "/*!\r\n    \\file    gd32vf103_wwdgt.c\r\n    \\brief   WWDGT driver\r\n\r\n    \\version 2019-06-05, V1.0.0, firmware for GD32VF103\r\n    \\version 2020-08-04, V1.1.0, firmware for GD32VF103\r\n*/\r\n\r\n/*\r\n    Copyright (c) 2020, GigaDevice Semiconductor Inc.\r\n\r\n    Redistribution and use in source and binary forms, with or without modification,\r\nare permitted provided that the following conditions are met:\r\n\r\n    1. Redistributions of source code must retain the above copyright notice, this\r\n       list of conditions and the following disclaimer.\r\n    2. Redistributions in binary form must reproduce the above copyright notice,\r\n       this list of conditions and the following disclaimer in the documentation\r\n       and/or other materials provided with the distribution.\r\n    3. Neither the name of the copyright holder nor the names of its contributors\r\n       may be used to endorse or promote products derived from this software without\r\n       specific prior written permission.\r\n\r\n    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r\nIN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\r\nINDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\r\nNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\r\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\nWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\r\nOF SUCH DAMAGE.\r\n*/\r\n\r\n#include \"gd32vf103_wwdgt.h\"\r\n#include \"gd32vf103_rcu.h\"\r\n\r\n/* write value to WWDGT_CTL_CNT bit field */\r\n#define CTL_CNT(regval) (BITS(0, 6) & ((uint32_t)(regval) << 0))\r\n/* write value to WWDGT_CFG_WIN bit field */\r\n#define CFG_WIN(regval) (BITS(0, 6) & ((uint32_t)(regval) << 0))\r\n\r\n/*!\r\n    \\brief      reset the window watchdog timer configuration\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid wwdgt_deinit(void) {\r\n  rcu_periph_reset_enable(RCU_WWDGTRST);\r\n  rcu_periph_reset_disable(RCU_WWDGTRST);\r\n}\r\n\r\n/*!\r\n    \\brief      start the window watchdog timer counter\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid wwdgt_enable(void) { WWDGT_CTL |= WWDGT_CTL_WDGTEN; }\r\n\r\n/*!\r\n    \\brief      configure the window watchdog timer counter value\r\n    \\param[in]  counter_value: 0x00 - 0x7F\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid wwdgt_counter_update(uint16_t counter_value) {\r\n  uint32_t reg = 0U;\r\n\r\n  reg = (WWDGT_CTL & (~WWDGT_CTL_CNT));\r\n  reg |= CTL_CNT(counter_value);\r\n\r\n  WWDGT_CTL = reg;\r\n}\r\n\r\n/*!\r\n    \\brief      configure counter value, window value, and prescaler divider value\r\n    \\param[in]  counter: 0x00 - 0x7F\r\n    \\param[in]  window: 0x00 - 0x7F\r\n    \\param[in]  prescaler: wwdgt prescaler value\r\n                only one parameter can be selected which is shown as below:\r\n      \\arg        WWDGT_CFG_PSC_DIV1: the time base of window watchdog counter = (PCLK1/4096)/1\r\n      \\arg        WWDGT_CFG_PSC_DIV2: the time base of window watchdog counter = (PCLK1/4096)/2\r\n      \\arg        WWDGT_CFG_PSC_DIV4: the time base of window watchdog counter = (PCLK1/4096)/4\r\n      \\arg        WWDGT_CFG_PSC_DIV8: the time base of window watchdog counter = (PCLK1/4096)/8\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid wwdgt_config(uint16_t counter, uint16_t window, uint32_t prescaler) {\r\n  uint32_t reg_cfg = 0U, reg_ctl = 0U;\r\n\r\n  /* clear WIN and PSC bits, clear CNT bit */\r\n  reg_cfg = (WWDGT_CFG & (~(WWDGT_CFG_WIN | WWDGT_CFG_PSC)));\r\n  reg_ctl = (WWDGT_CTL & (~WWDGT_CTL_CNT));\r\n\r\n  /* configure WIN and PSC bits, configure CNT bit */\r\n  reg_cfg |= CFG_WIN(window);\r\n  reg_cfg |= prescaler;\r\n  reg_ctl |= CTL_CNT(counter);\r\n\r\n  WWDGT_CTL = reg_ctl;\r\n  WWDGT_CFG = reg_cfg;\r\n}\r\n\r\n/*!\r\n    \\brief      enable early wakeup interrupt of WWDGT\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid wwdgt_interrupt_enable(void) { WWDGT_CFG |= WWDGT_CFG_EWIE; }\r\n\r\n/*!\r\n    \\brief      check early wakeup interrupt state of WWDGT\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     FlagStatus: SET or RESET\r\n*/\r\nFlagStatus wwdgt_flag_get(void) {\r\n  if (WWDGT_STAT & WWDGT_STAT_EWIF) {\r\n    return SET;\r\n  }\r\n\r\n  return RESET;\r\n}\r\n\r\n/*!\r\n    \\brief      clear early wakeup interrupt state of WWDGT\r\n    \\param[in]  none\r\n    \\param[out] none\r\n    \\retval     none\r\n*/\r\nvoid wwdgt_flag_clear(void) { WWDGT_STAT &= (~WWDGT_STAT_EWIF); }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Drivers/n200_func.c",
    "content": "/* See LICENSE for license details. */\r\n#include <gd32vf103.h>\r\n#include <stdio.h>\r\n#include <stdlib.h>\r\n#include <string.h>\r\n\r\n#if defined(__ICCRISCV__)\r\n#include \"compiler.h\"\r\n#elif defined(__GNUC__)\r\n#include <unistd.h>\r\n#endif\r\n\r\n#include \"gd32vf103_rcu.h\"\r\n#include \"n200_func.h\"\r\n#include \"riscv_encoding.h\"\r\n\r\n/* Configure PMP to make all the address space accesable and executable */\r\nvoid pmp_open_all_space(void) {\r\n  /* Config entry0 addr to all 1s to make the range cover all space */\r\n  asm volatile(\"li x6, 0xffffffff\" ::: \"x6\");\r\n  asm volatile(\"csrw pmpaddr0, x6\" :::);\r\n  /* Config entry0 cfg to make it NAPOT address mode, and R/W/X okay */\r\n  asm volatile(\"li x6, 0x7f\" ::: \"x6\");\r\n  asm volatile(\"csrw pmpcfg0, x6\" :::);\r\n}\r\n\r\nvoid switch_m2u_mode(void) {\r\n  clear_csr(mstatus, MSTATUS_MPP);\r\n  /* printf(\"\\nIn the m2u function, the mstatus is 0x%x\\n\", read_csr(mstatus)); */\r\n  /* printf(\"\\nIn the m2u function, the mepc is 0x%x\\n\", read_csr(mepc)); */\r\n#if defined(__GNUC__)\r\n  asm volatile(\"la x6, 1f    \" ::: \"x6\");\r\n#endif\r\n  asm volatile(\"csrw mepc, x6\" :::);\r\n  asm volatile(\"mret\" :::);\r\n  asm volatile(\"1:\" :::);\r\n}\r\n\r\nuint32_t mtime_lo(void) { return *(volatile uint32_t *)(TIMER_CTRL_ADDR + TIMER_MTIME); }\r\n\r\nuint32_t mtime_hi(void) { return *(volatile uint32_t *)(TIMER_CTRL_ADDR + TIMER_MTIME + 4); }\r\n\r\nuint64_t get_timer_value(void) {\r\n  while (1) {\r\n    uint32_t hi = mtime_hi();\r\n    uint32_t lo = mtime_lo();\r\n    if (hi == mtime_hi()) {\r\n      return ((uint64_t)hi << 32) | lo;\r\n    }\r\n  }\r\n}\r\n\r\nuint32_t get_timer_freq(void) { return TIMER_FREQ; }\r\n\r\nuint64_t get_instret_value(void) {\r\n  while (1) {\r\n#if defined(__ICCRISCV__)\r\n    uint32_t hi = read_csr(CSR_MINSTRETH);\r\n    uint32_t lo = read_csr(CSR_MINSTRETH);\r\n    if (hi == read_csr(CSR_MINSTRETH))\r\n#elif defined(__GNUC__)\r\n    uint32_t hi = read_csr(minstreth);\r\n    uint32_t lo = read_csr(minstret);\r\n    if (hi == read_csr(minstreth))\r\n#endif\r\n\r\n      return ((uint64_t)hi << 32) | lo;\r\n  }\r\n}\r\n\r\nuint64_t get_cycle_value(void) {\r\n  while (1) {\r\n#if defined(__ICCRISCV__)\r\n    uint32_t hi = read_csr(CSR_MCYCLEH);\r\n    uint32_t lo = read_csr(CSR_MCYCLE);\r\n    if (hi == read_csr(CSR_MCYCLEH))\r\n#elif defined(__GNUC__)\r\n    uint32_t hi = read_csr(mcycleh);\r\n    uint32_t lo = read_csr(mcycle);\r\n    if (hi == read_csr(mcycleh))\r\n#endif\r\n\r\n      return ((uint64_t)hi << 32) | lo;\r\n  }\r\n}\r\n\r\n/* Note that there are no assertions or bounds checking on these */\r\n/* parameter values. */\r\nvoid eclic_init(uint32_t num_irq) {\r\n\r\n  typedef volatile uint32_t vuint32_t;\r\n\r\n  /* clear cfg register */\r\n  *(volatile uint8_t *)(ECLIC_ADDR_BASE + ECLIC_CFG_OFFSET) = 0;\r\n\r\n  /* clear minthresh register */\r\n  *(volatile uint8_t *)(ECLIC_ADDR_BASE + ECLIC_MTH_OFFSET) = 0;\r\n\r\n  /* clear all IP/IE/ATTR/CTRL bits for all interrupt sources */\r\n  vuint32_t *ptr;\r\n\r\n  vuint32_t *base  = (vuint32_t *)(ECLIC_ADDR_BASE + ECLIC_INT_IP_OFFSET);\r\n  vuint32_t *upper = (vuint32_t *)(base + num_irq * 4);\r\n\r\n  for (ptr = base; ptr < upper; ptr = ptr + 4) {\r\n    *ptr = 0;\r\n  }\r\n}\r\n\r\nvoid eclic_enable_interrupt(uint32_t source) { *(volatile uint8_t *)(ECLIC_ADDR_BASE + ECLIC_INT_IE_OFFSET + source * 4) = 1; }\r\n\r\nvoid eclic_disable_interrupt(uint32_t source) { *(volatile uint8_t *)(ECLIC_ADDR_BASE + ECLIC_INT_IE_OFFSET + source * 4) = 0; }\r\n\r\nvoid eclic_set_pending(uint32_t source) { *(volatile uint8_t *)(ECLIC_ADDR_BASE + ECLIC_INT_IP_OFFSET + source * 4) = 1; }\r\n\r\nvoid eclic_clear_pending(uint32_t source) { *(volatile uint8_t *)(ECLIC_ADDR_BASE + ECLIC_INT_IP_OFFSET + source * 4) = 0; }\r\n\r\nvoid eclic_set_intctrl(uint32_t source, uint8_t intctrl) { *(volatile uint8_t *)(ECLIC_ADDR_BASE + ECLIC_INT_CTRL_OFFSET + source * 4) = intctrl; }\r\n\r\nuint8_t eclic_get_intctrl(uint32_t source) { return *(volatile uint8_t *)(ECLIC_ADDR_BASE + ECLIC_INT_CTRL_OFFSET + source * 4); }\r\n\r\nvoid eclic_set_intattr(uint32_t source, uint8_t intattr) { *(volatile uint8_t *)(ECLIC_ADDR_BASE + ECLIC_INT_ATTR_OFFSET + source * 4) = intattr; }\r\n\r\nuint8_t eclic_get_intattr(uint32_t source) { return *(volatile uint8_t *)(ECLIC_ADDR_BASE + ECLIC_INT_ATTR_OFFSET + source * 4); }\r\n\r\nvoid eclic_set_cliccfg(uint8_t cliccfg) { *(volatile uint8_t *)(ECLIC_ADDR_BASE + ECLIC_CFG_OFFSET) = cliccfg; }\r\n\r\nuint8_t eclic_get_cliccfg(void) { return *(volatile uint8_t *)(ECLIC_ADDR_BASE + ECLIC_CFG_OFFSET); }\r\n\r\nvoid eclic_set_mth(uint8_t mth) { *(volatile uint8_t *)(ECLIC_ADDR_BASE + ECLIC_MTH_OFFSET) = mth; }\r\n\r\nuint8_t eclic_get_mth(void) { return *(volatile uint8_t *)(ECLIC_ADDR_BASE + ECLIC_MTH_OFFSET); }\r\n\r\n/* sets nlbits */\r\nvoid eclic_set_nlbits(uint8_t nlbits) {\r\n  /* shift nlbits to correct position */\r\n  uint8_t nlbits_shifted = nlbits << ECLIC_CFG_NLBITS_LSB;\r\n\r\n  /* read the current cliccfg */\r\n  uint8_t old_cliccfg = eclic_get_cliccfg();\r\n  uint8_t new_cliccfg = (old_cliccfg & (~ECLIC_CFG_NLBITS_MASK)) | (ECLIC_CFG_NLBITS_MASK & nlbits_shifted);\r\n\r\n  eclic_set_cliccfg(new_cliccfg);\r\n}\r\n\r\n/* get nlbits */\r\nuint8_t eclic_get_nlbits(void) {\r\n  /* extract nlbits */\r\n  uint8_t nlbits = eclic_get_cliccfg();\r\n  nlbits         = (nlbits & ECLIC_CFG_NLBITS_MASK) >> ECLIC_CFG_NLBITS_LSB;\r\n  return nlbits;\r\n}\r\n\r\n/* sets an interrupt level based encoding of nlbits and ECLICINTCTLBITS */\r\nvoid eclic_set_irq_lvl(uint32_t source, uint8_t lvl) {\r\n  /* extract nlbits */\r\n  uint8_t nlbits = eclic_get_nlbits();\r\n  if (nlbits > ECLICINTCTLBITS) {\r\n    nlbits = ECLICINTCTLBITS;\r\n  }\r\n\r\n  /* shift lvl right to mask off unused bits */\r\n  lvl = lvl >> (8 - nlbits);\r\n  /* shift lvl into correct bit position */\r\n  lvl = lvl << (8 - nlbits);\r\n\r\n  /* write to clicintctrl */\r\n  uint8_t current_intctrl = eclic_get_intctrl(source);\r\n  /* shift intctrl left to mask off unused bits */\r\n  current_intctrl = current_intctrl << nlbits;\r\n  /* shift intctrl into correct bit position */\r\n  current_intctrl = current_intctrl >> nlbits;\r\n\r\n  eclic_set_intctrl(source, (current_intctrl | lvl));\r\n}\r\n\r\n/* gets an interrupt level based encoding of nlbits */\r\nuint8_t eclic_get_irq_lvl(uint32_t source) {\r\n  /* extract nlbits */\r\n  uint8_t nlbits = eclic_get_nlbits();\r\n  if (nlbits > ECLICINTCTLBITS) {\r\n    nlbits = ECLICINTCTLBITS;\r\n  }\r\n\r\n  uint8_t intctrl = eclic_get_intctrl(source);\r\n\r\n  /* shift intctrl */\r\n  intctrl = intctrl >> (8 - nlbits);\r\n  /* shift intctrl */\r\n  uint8_t lvl = intctrl << (8 - nlbits);\r\n\r\n  return lvl;\r\n}\r\n\r\nvoid eclic_set_irq_lvl_abs(uint32_t source, uint8_t lvl_abs) {\r\n  /* extract nlbits */\r\n  uint8_t nlbits = eclic_get_nlbits();\r\n  if (nlbits > ECLICINTCTLBITS) {\r\n    nlbits = ECLICINTCTLBITS;\r\n  }\r\n\r\n  /* shift lvl_abs into correct bit position */\r\n  uint8_t lvl = lvl_abs << (8 - nlbits);\r\n\r\n  /* write to clicintctrl */\r\n  uint8_t current_intctrl = eclic_get_intctrl(source);\r\n  /* shift intctrl left to mask off unused bits */\r\n  current_intctrl = current_intctrl << nlbits;\r\n  /* shift intctrl into correct bit position */\r\n  current_intctrl = current_intctrl >> nlbits;\r\n\r\n  eclic_set_intctrl(source, (current_intctrl | lvl));\r\n}\r\n\r\nuint8_t eclic_get_irq_lvl_abs(uint32_t source) {\r\n  /* extract nlbits */\r\n  uint8_t nlbits = eclic_get_nlbits();\r\n  if (nlbits > ECLICINTCTLBITS) {\r\n    nlbits = ECLICINTCTLBITS;\r\n  }\r\n\r\n  uint8_t intctrl = eclic_get_intctrl(source);\r\n\r\n  /* shift intctrl */\r\n  intctrl = intctrl >> (8 - nlbits);\r\n  /* shift intctrl */\r\n  uint8_t lvl_abs = intctrl;\r\n\r\n  return lvl_abs;\r\n}\r\n\r\n/* sets an interrupt priority based encoding of nlbits and ECLICINTCTLBITS */\r\nuint8_t eclic_set_irq_priority(uint32_t source, uint8_t priority) {\r\n  /* extract nlbits */\r\n  uint8_t nlbits = eclic_get_nlbits();\r\n  if (nlbits >= ECLICINTCTLBITS) {\r\n    nlbits = ECLICINTCTLBITS;\r\n    return 0;\r\n  }\r\n\r\n  /* shift priority into correct bit position */\r\n  priority = priority << (8 - ECLICINTCTLBITS);\r\n\r\n  /* write to eclicintctrl */\r\n  uint8_t current_intctrl = eclic_get_intctrl(source);\r\n  /* shift intctrl right to mask off unused bits */\r\n  current_intctrl = current_intctrl >> (8 - nlbits);\r\n  /* shift intctrl into correct bit position */\r\n  current_intctrl = current_intctrl << (8 - nlbits);\r\n\r\n  eclic_set_intctrl(source, (current_intctrl | priority));\r\n\r\n  return priority;\r\n}\r\n\r\n/* gets an interrupt priority based encoding of nlbits */\r\nuint8_t eclic_get_irq_priority(uint32_t source) {\r\n  /* extract nlbits */\r\n  uint8_t nlbits = eclic_get_nlbits();\r\n  if (nlbits > ECLICINTCTLBITS) {\r\n    nlbits = ECLICINTCTLBITS;\r\n  }\r\n\r\n  uint8_t intctrl = eclic_get_intctrl(source);\r\n\r\n  /* shift intctrl */\r\n  intctrl = intctrl << nlbits;\r\n  /* shift intctrl */\r\n  uint8_t priority = intctrl >> (nlbits + (8 - ECLICINTCTLBITS));\r\n\r\n  return priority;\r\n}\r\n\r\nvoid eclic_mode_enable() {\r\n#if defined(__ICCRISCV__)\r\n  uint32_t mtvec_value = read_csr(CSR_MTVEC);\r\n  mtvec_value          = mtvec_value & 0xFFFFFFC0;\r\n  mtvec_value          = mtvec_value | 0x00000003;\r\n  write_csr(CSR_MTVEC, mtvec_value);\r\n#elif defined(__GNUC__)\r\n  uint32_t mtvec_value = read_csr(mtvec);\r\n  mtvec_value          = mtvec_value & 0xFFFFFFC0;\r\n  mtvec_value          = mtvec_value | 0x00000003;\r\n  write_csr(mtvec, mtvec_value);\r\n#endif\r\n}\r\n\r\n/* sets vector-mode or non-vector mode */\r\nvoid eclic_set_vmode(uint32_t source) {\r\n  /* read the current attr */\r\n  uint8_t old_intattr = eclic_get_intattr(source);\r\n  /*  Keep other bits unchanged and only set the LSB bit */\r\n  uint8_t new_intattr = (old_intattr | 0x1);\r\n\r\n  eclic_set_intattr(source, new_intattr);\r\n}\r\n\r\nvoid eclic_set_nonvmode(uint32_t source) {\r\n  /* read the current attr */\r\n  uint8_t old_intattr = eclic_get_intattr(source);\r\n  /* Keep other bits unchanged and only clear the LSB bit*/\r\n  uint8_t new_intattr = (old_intattr & (~0x1));\r\n\r\n  eclic_set_intattr(source, new_intattr);\r\n}\r\n\r\n/* sets interrupt as level sensitive\r\nBit 1, trig[0], is defined as \"edge-triggered\" (0: level-triggered, 1: edge-triggered);\r\nBit 2, trig[1], is defined as \"negative-edge\" (0: positive-edge, 1: negative-edge).*/\r\n\r\nvoid eclic_set_level_trig(uint32_t source) {\r\n  /* read the current attr */\r\n  uint8_t old_intattr = eclic_get_intattr(source);\r\n  /* Keep other bits unchanged and only clear the bit 1 */\r\n  uint8_t new_intattr = (old_intattr & (~0x2));\r\n\r\n  eclic_set_intattr(source, new_intattr);\r\n}\r\n\r\nvoid eclic_set_posedge_trig(uint32_t source) {\r\n  /* read the current attr */\r\n  uint8_t old_intattr = eclic_get_intattr(source);\r\n  /* Keep other bits unchanged and only set the bit 1 */\r\n  uint8_t new_intattr = (old_intattr | 0x2);\r\n  /* Keep other bits unchanged and only clear the bit 2 */\r\n  new_intattr = (old_intattr & (~0x4));\r\n\r\n  eclic_set_intattr(source, new_intattr);\r\n}\r\n\r\nvoid eclic_set_negedge_trig(uint32_t source) {\r\n  /*read the current attr */\r\n  uint8_t old_intattr = eclic_get_intattr(source);\r\n  /* Keep other bits unchanged and only set the bit 1*/\r\n  uint8_t new_intattr = (old_intattr | 0x2);\r\n  /* Keep other bits unchanged and only set the bit 2*/\r\n  new_intattr = (old_intattr | 0x4);\r\n\r\n  eclic_set_intattr(source, new_intattr);\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/GCC/intexc_gd32vf103.S",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/******************************************************************************\n * \\file     intexc_gd32vf103.S\n * \\brief    NMSIS Interrupt and Exception Handling Template File\n *           for Device gd32vf103\n * \\version  V1.00\n * \\date     7 Jan 2020\n *\n ******************************************************************************/\n\n#include \"riscv_encoding.h\"\n\n/**\n * \\brief  Global interrupt disabled\n * \\details\n *  This function disable global interrupt.\n * \\remarks\n *  - All the interrupt requests will be ignored by CPU.\n */\n.macro DISABLE_MIE\n    csrc CSR_MSTATUS, MSTATUS_MIE\n.endm\n\n/**\n * \\brief  Macro for context save\n * \\details\n * This macro save ABI defined caller saved registers in the stack.\n * \\remarks\n * - This Macro could use to save context when you enter to interrupt\n * or exception\n*/\n/* Save caller registers */\n.macro SAVE_CONTEXT\n    /* Allocate stack space for context saving */\n#ifndef __riscv_32e\n    addi sp, sp, -20*REGBYTES\n#else\n    addi sp, sp, -14*REGBYTES\n#endif /* __riscv_32e */\n\n    STORE x1, 0*REGBYTES(sp)\n    STORE x4, 1*REGBYTES(sp)\n    STORE x5, 2*REGBYTES(sp)\n    STORE x6, 3*REGBYTES(sp)\n    STORE x7, 4*REGBYTES(sp)\n    STORE x10, 5*REGBYTES(sp)\n    STORE x11, 6*REGBYTES(sp)\n    STORE x12, 7*REGBYTES(sp)\n    STORE x13, 8*REGBYTES(sp)\n    STORE x14, 9*REGBYTES(sp)\n    STORE x15, 10*REGBYTES(sp)\n#ifndef __riscv_32e\n    STORE x16, 14*REGBYTES(sp)\n    STORE x17, 15*REGBYTES(sp)\n    STORE x28, 16*REGBYTES(sp)\n    STORE x29, 17*REGBYTES(sp)\n    STORE x30, 18*REGBYTES(sp)\n    STORE x31, 19*REGBYTES(sp)\n#endif /* __riscv_32e */\n.endm\n\n/**\n * \\brief  Macro for restore caller registers\n * \\details\n * This macro restore ABI defined caller saved registers from stack.\n * \\remarks\n * - You could use this macro to restore context before you want return\n * from interrupt or exeception\n */\n/* Restore caller registers */\n.macro RESTORE_CONTEXT\n    LOAD x1, 0*REGBYTES(sp)\n    LOAD x4, 1*REGBYTES(sp)\n    LOAD x5, 2*REGBYTES(sp)\n    LOAD x6, 3*REGBYTES(sp)\n    LOAD x7, 4*REGBYTES(sp)\n    LOAD x10, 5*REGBYTES(sp)\n    LOAD x11, 6*REGBYTES(sp)\n    LOAD x12, 7*REGBYTES(sp)\n    LOAD x13, 8*REGBYTES(sp)\n    LOAD x14, 9*REGBYTES(sp)\n    LOAD x15, 10*REGBYTES(sp)\n#ifndef __riscv_32e\n    LOAD x16, 14*REGBYTES(sp)\n    LOAD x17, 15*REGBYTES(sp)\n    LOAD x28, 16*REGBYTES(sp)\n    LOAD x29, 17*REGBYTES(sp)\n    LOAD x30, 18*REGBYTES(sp)\n    LOAD x31, 19*REGBYTES(sp)\n\n    /* De-allocate the stack space */\n    addi sp, sp, 20*REGBYTES\n#else\n    /* De-allocate the stack space */\n    addi sp, sp, 14*REGBYTES\n#endif /* __riscv_32e */\n\n.endm\n\n/**\n * \\brief  Macro for save necessary CSRs to stack\n * \\details\n * This macro store MCAUSE, MEPC, MSUBM to stack.\n */\n.macro SAVE_CSR_CONTEXT\n    /* Store CSR mcause to stack using pushmcause */\n    csrrwi  x0, CSR_PUSHMCAUSE, 11\n    /* Store CSR mepc to stack using pushmepc */\n    csrrwi  x0, CSR_PUSHMEPC, 12\n    /* Store CSR msub to stack using pushmsub */\n    csrrwi  x0, CSR_PUSHMSUBM, 13\n.endm\n\n/**\n * \\brief  Macro for restore necessary CSRs from stack\n * \\details\n * This macro restore MSUBM, MEPC, MCAUSE from stack.\n */\n.macro RESTORE_CSR_CONTEXT\n    LOAD x5,  13*REGBYTES(sp)\n    csrw CSR_MSUBM, x5\n    LOAD x5,  12*REGBYTES(sp)\n    csrw CSR_MEPC, x5\n    LOAD x5,  11*REGBYTES(sp)\n    csrw CSR_MCAUSE, x5\n.endm\n\n/**\n * \\brief  Exception/NMI Entry\n * \\details\n * This function provide common entry functions for exception/nmi.\n * \\remarks\n * This function provide a default exception/nmi entry.\n * ABI defined caller save register and some CSR registers\n * to be saved before enter interrupt handler and be restored before return.\n */\n.section .text.trap\n/* In CLIC mode, the exeception entry must be 64bytes aligned */\n.align 6\n.global exc_entry\n.weak exc_entry\nexc_entry:\n    /* Save the caller saving registers (context) */\n    SAVE_CONTEXT\n    /* Save the necessary CSR registers */\n    SAVE_CSR_CONTEXT\n\n    /*\n     * Set the exception handler function arguments\n     * argument 1: mcause value\n     * argument 2: current stack point(SP) value\n     */\n    csrr a0, mcause\n    mv a1, sp\n    /*\n     * TODO: Call the exception handler function\n     * By default, the function template is provided in\n     * system_Device.c, you can adjust it as you want\n     */\n    call core_exception_handler\n\n    /* Restore the necessary CSR registers */\n    RESTORE_CSR_CONTEXT\n    /* Restore the caller saving registers (context) */\n    RESTORE_CONTEXT\n\n    /* Return to regular code */\n    mret\n\n/**\n * \\brief  Non-Vector Interrupt Entry\n * \\details\n * This function provide common entry functions for handling\n * non-vector interrupts\n * \\remarks\n * This function provide a default non-vector interrupt entry.\n * ABI defined caller save register and some CSR registers need\n * to be saved before enter interrupt handler and be restored before return.\n */\n.section      .text.irq\n/* In CLIC mode, the interrupt entry must be 4bytes aligned */\n.align 2\n.global irq_entry\n.weak irq_entry\n/* This label will be set to MTVT2 register */\nirq_entry:\n    /* Save the caller saving registers (context) */\n    SAVE_CONTEXT\n    /* Save the necessary CSR registers */\n    SAVE_CSR_CONTEXT\n\n    /* This special CSR read/write operation, which is actually\n     * claim the CLIC to find its pending highest ID, if the ID\n     * is not 0, then automatically enable the mstatus.MIE, and\n     * jump to its vector-entry-label, and update the link register\n     */\n    csrrw ra, CSR_JALMNXTI, ra\n\n    /* Critical section with interrupts disabled */\n    DISABLE_MIE\n\n    /* Restore the necessary CSR registers */\n    RESTORE_CSR_CONTEXT\n    /* Restore the caller saving registers (context) */\n    RESTORE_CONTEXT\n\n    /* Return to regular code */\n    mret\n\n/* Default Handler for Exceptions / Interrupts */\n.global default_intexc_handler\n.weak default_intexc_handler\nUndef_Handler:\ndefault_intexc_handler:\n1:\n    j 1b\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/GCC/startup_gd32vf103.S",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/******************************************************************************\n * \\file     startup_gd32vf103.S\n * \\brief    NMSIS Nuclei N/NX Class Core based Core Device Startup File for\n *  Device gd32vf103\n * \\version  V1.00\n * \\date     21 Nov 2019\n *\n *\n ******************************************************************************/\n\n#include \"riscv_encoding.h\"\n\n.macro DECLARE_INT_HANDLER  INT_HDL_NAME\n#if defined(__riscv_xlen) && (__riscv_xlen == 32)\n    .word \\INT_HDL_NAME\n#else\n    .dword \\INT_HDL_NAME\n#endif\n.endm\n\n    /*\n     * Put the interrupt vectors in this section according to the run mode:\n     * FlashXIP: .vtable\n     * ILM: .vtable\n     * Flash: .vtable_ilm\n     */\n#if defined(DOWNLOAD_MODE) && (DOWNLOAD_MODE == DOWNLOAD_MODE_FLASH)\n    .section .vtable_ilm\n#else\n    .section .vtable\n#endif\n\n    .weak  eclic_msip_handler\n    .weak  eclic_mtip_handler\n    .weak  eclic_bwei_handler\n    .weak  eclic_pmovi_handler\n    .weak  WWDGT_IRQHandler\n    .weak  LVD_IRQHandler\n    .weak  TAMPER_IRQHandler\n    .weak  RTC_IRQHandler\n    .weak  FMC_IRQHandler\n    .weak  RCU_IRQHandler\n    .weak  EXTI0_IRQHandler\n    .weak  EXTI1_IRQHandler\n    .weak  EXTI2_IRQHandler\n    .weak  EXTI3_IRQHandler\n    .weak  EXTI4_IRQHandler\n    .weak  DMA0_Channel0_IRQHandler\n    .weak  DMA0_Channel1_IRQHandler\n    .weak  DMA0_Channel2_IRQHandler\n    .weak  DMA0_Channel3_IRQHandler\n    .weak  DMA0_Channel4_IRQHandler\n    .weak  DMA0_Channel5_IRQHandler\n    .weak  DMA0_Channel6_IRQHandler\n    .weak  ADC0_1_IRQHandler\n    .weak  CAN0_TX_IRQHandler\n    .weak  CAN0_RX0_IRQHandler\n    .weak  CAN0_RX1_IRQHandler\n    .weak  CAN0_EWMC_IRQHandler\n    .weak  EXTI5_9_IRQHandler\n    .weak  TIMER0_BRK_IRQHandler\n    .weak  TIMER0_UP_IRQHandler\n    .weak  TIMER0_TRG_CMT_IRQHandler\n    .weak  TIMER0_Channel_IRQHandler\n    .weak  TIMER1_IRQHandler\n    .weak  TIMER2_IRQHandler\n    .weak  TIMER3_IRQHandler\n    .weak  I2C0_EV_IRQHandler\n    .weak  I2C0_ER_IRQHandler\n    .weak  I2C1_EV_IRQHandler\n    .weak  I2C1_ER_IRQHandler\n    .weak  SPI0_IRQHandler\n    .weak  SPI1_IRQHandler\n    .weak  USART0_IRQHandler\n    .weak  USART1_IRQHandler\n    .weak  USART2_IRQHandler\n    .weak  EXTI10_15_IRQHandler\n    .weak  RTC_Alarm_IRQHandler\n    .weak  USBFS_WKUP_IRQHandler\n    .weak  EXMC_IRQHandler\n    .weak  TIMER4_IRQHandler\n    .weak  SPI2_IRQHandler\n    .weak  UART3_IRQHandler\n    .weak  UART4_IRQHandler\n    .weak  TIMER5_IRQHandler\n    .weak  TIMER6_IRQHandler\n    .weak  DMA1_Channel0_IRQHandler\n    .weak  DMA1_Channel1_IRQHandler\n    .weak  DMA1_Channel2_IRQHandler\n    .weak  DMA1_Channel3_IRQHandler\n    .weak  DMA1_Channel4_IRQHandler\n    .weak  CAN1_TX_IRQHandler\n    .weak  CAN1_RX0_IRQHandler\n    .weak  CAN1_RX1_IRQHandler\n    .weak  CAN1_EWMC_IRQHandler\n    .weak  USBFS_IRQHandler\n\n\n    .globl vector_base\nvector_base:\n#if defined(DOWNLOAD_MODE) && (DOWNLOAD_MODE != DOWNLOAD_MODE_FLASH)\n    j _start                                                /* 0: Reserved, Jump to _start when reset for ILM/FlashXIP mode.*/\n    .align LOG_REGBYTES                                     /*    Need to align 4 byte for RV32, 8 Byte for RV64 */\n#else\n    DECLARE_INT_HANDLER     default_intexc_handler          /* 0: Reserved, default handler for Flash download mode */\n#endif\n    DECLARE_INT_HANDLER     default_intexc_handler          /* 1: Reserved */\n    DECLARE_INT_HANDLER     default_intexc_handler          /* 2: Reserved */\n    DECLARE_INT_HANDLER     eclic_msip_handler              /* 3: Machine software interrupt */\n\n    DECLARE_INT_HANDLER     default_intexc_handler          /* 4: Reserved */\n    DECLARE_INT_HANDLER     default_intexc_handler          /* 5: Reserved */\n    DECLARE_INT_HANDLER     default_intexc_handler          /* 6: Reserved */\n    DECLARE_INT_HANDLER     eclic_mtip_handler              /* 7: Machine timer interrupt */\n\n    DECLARE_INT_HANDLER     default_intexc_handler          /* 8: Reserved */\n    DECLARE_INT_HANDLER     default_intexc_handler          /* 9: Reserved */\n    DECLARE_INT_HANDLER     default_intexc_handler          /* 10: Reserved */\n    DECLARE_INT_HANDLER     default_intexc_handler          /* 11: Reserved */\n\n    DECLARE_INT_HANDLER     default_intexc_handler          /* 12: Reserved */\n    DECLARE_INT_HANDLER     default_intexc_handler          /* 13: Reserved */\n    DECLARE_INT_HANDLER     default_intexc_handler          /* 14: Reserved */\n    DECLARE_INT_HANDLER     default_intexc_handler          /* 15: Reserved */\n\n    DECLARE_INT_HANDLER     default_intexc_handler          /* 16: Reserved */\n    DECLARE_INT_HANDLER     eclic_bwei_handler              /* 17: Bus Error interrupt */\n    DECLARE_INT_HANDLER     eclic_pmovi_handler             /* 18: Performance Monitor */\n\n    DECLARE_INT_HANDLER     WWDGT_IRQHandler\n    DECLARE_INT_HANDLER     LVD_IRQHandler\n    DECLARE_INT_HANDLER     TAMPER_IRQHandler\n    DECLARE_INT_HANDLER     RTC_IRQHandler\n    DECLARE_INT_HANDLER     FMC_IRQHandler\n    DECLARE_INT_HANDLER     RCU_IRQHandler\n    DECLARE_INT_HANDLER     EXTI0_IRQHandler\n    DECLARE_INT_HANDLER     EXTI1_IRQHandler\n    DECLARE_INT_HANDLER     EXTI2_IRQHandler\n    DECLARE_INT_HANDLER     EXTI3_IRQHandler\n    DECLARE_INT_HANDLER     EXTI4_IRQHandler\n    DECLARE_INT_HANDLER     DMA0_Channel0_IRQHandler\n    DECLARE_INT_HANDLER     DMA0_Channel1_IRQHandler\n    DECLARE_INT_HANDLER     DMA0_Channel2_IRQHandler\n    DECLARE_INT_HANDLER     DMA0_Channel3_IRQHandler\n    DECLARE_INT_HANDLER     DMA0_Channel4_IRQHandler\n    DECLARE_INT_HANDLER     DMA0_Channel5_IRQHandler\n    DECLARE_INT_HANDLER     DMA0_Channel6_IRQHandler\n    DECLARE_INT_HANDLER     ADC0_1_IRQHandler\n    DECLARE_INT_HANDLER     CAN0_TX_IRQHandler\n    DECLARE_INT_HANDLER     CAN0_RX0_IRQHandler\n    DECLARE_INT_HANDLER     CAN0_RX1_IRQHandler\n    DECLARE_INT_HANDLER     CAN0_EWMC_IRQHandler\n    DECLARE_INT_HANDLER     EXTI5_9_IRQHandler\n    DECLARE_INT_HANDLER     TIMER0_BRK_IRQHandler\n    DECLARE_INT_HANDLER     TIMER0_UP_IRQHandler\n    DECLARE_INT_HANDLER     TIMER0_TRG_CMT_IRQHandler\n    DECLARE_INT_HANDLER     TIMER0_Channel_IRQHandler\n    DECLARE_INT_HANDLER     TIMER1_IRQHandler\n    DECLARE_INT_HANDLER     TIMER2_IRQHandler\n    DECLARE_INT_HANDLER     TIMER3_IRQHandler\n    DECLARE_INT_HANDLER     I2C0_EV_IRQHandler\n    DECLARE_INT_HANDLER     I2C0_ER_IRQHandler\n    DECLARE_INT_HANDLER     I2C1_EV_IRQHandler\n    DECLARE_INT_HANDLER     I2C1_ER_IRQHandler\n    DECLARE_INT_HANDLER     SPI0_IRQHandler\n    DECLARE_INT_HANDLER     SPI1_IRQHandler\n    DECLARE_INT_HANDLER     USART0_IRQHandler\n    DECLARE_INT_HANDLER     USART1_IRQHandler\n    DECLARE_INT_HANDLER     USART2_IRQHandler\n    DECLARE_INT_HANDLER     EXTI10_15_IRQHandler\n    DECLARE_INT_HANDLER     RTC_Alarm_IRQHandler\n    DECLARE_INT_HANDLER     USBFS_WKUP_IRQHandler\n    DECLARE_INT_HANDLER     default_intexc_handler\n    DECLARE_INT_HANDLER     default_intexc_handler\n    DECLARE_INT_HANDLER     default_intexc_handler\n    DECLARE_INT_HANDLER     default_intexc_handler\n    DECLARE_INT_HANDLER     default_intexc_handler\n    DECLARE_INT_HANDLER     EXMC_IRQHandler\n    DECLARE_INT_HANDLER     default_intexc_handler\n    DECLARE_INT_HANDLER     TIMER4_IRQHandler\n    DECLARE_INT_HANDLER     SPI2_IRQHandler\n    DECLARE_INT_HANDLER     UART3_IRQHandler\n    DECLARE_INT_HANDLER     UART4_IRQHandler\n    DECLARE_INT_HANDLER     TIMER5_IRQHandler\n    DECLARE_INT_HANDLER     TIMER6_IRQHandler\n    DECLARE_INT_HANDLER     DMA1_Channel0_IRQHandler\n    DECLARE_INT_HANDLER     DMA1_Channel1_IRQHandler\n    DECLARE_INT_HANDLER     DMA1_Channel2_IRQHandler\n    DECLARE_INT_HANDLER     DMA1_Channel3_IRQHandler\n    DECLARE_INT_HANDLER     DMA1_Channel4_IRQHandler\n    DECLARE_INT_HANDLER     default_intexc_handler\n    DECLARE_INT_HANDLER     default_intexc_handler\n    DECLARE_INT_HANDLER     CAN1_TX_IRQHandler\n    DECLARE_INT_HANDLER     CAN1_RX0_IRQHandler\n    DECLARE_INT_HANDLER     CAN1_RX1_IRQHandler\n    DECLARE_INT_HANDLER     CAN1_EWMC_IRQHandler\n    DECLARE_INT_HANDLER     USBFS_IRQHandler\n\n    .section .init\n\n    .globl _start\n    .type _start,@function\n\n/**\n * Reset Handler called on controller reset\n */\n_start:\n    /* ===== Startup Stage 1 ===== */\n    /* Disable Global Interrupt */\n    csrc CSR_MSTATUS, MSTATUS_MIE\n    /* Jump to logical address first to ensure correct operation of RAM region  */\n    la      a0, _start\n    li      a1, 1\n    slli    a1, a1, 29\n    bleu    a1, a0, _start0800\n    srli    a1, a1, 2\n    bleu    a1, a0, _start0800\n    la      a0, _start0800\n    add     a0, a0, a1\n    jr      a0\n\n_start0800:\n    /* Initialize GP and Stack Pointer SP */\n    .option push\n    .option norelax\n    la gp, __global_pointer$\n\n    .option pop\n    la sp, _sp\n\n    /*\n     * Set the the NMI base mnvec to share\n     * with mtvec by setting CSR_MMISC_CTL\n     * bit 9 NMI_CAUSE_FFF to 1\n     */\n    li t0, MMISC_CTL_NMI_CAUSE_FFF\n    csrs CSR_MMISC_CTL, t0\n\n    /*\n     * Intialize ECLIC vector interrupt\n     * base address mtvt to vector_base\n     */\n    la t0, vector_base\n    csrw CSR_MTVT, t0\n\n    /*\n     * Set ECLIC non-vector entry to be controlled\n     * by mtvt2 CSR register.\n     * Intialize ECLIC non-vector interrupt\n     * base address mtvt2 to irq_entry.\n     */\n    la t0, irq_entry\n    csrw CSR_MTVT2, t0\n    csrs CSR_MTVT2, 0x1\n\n    /*\n     * Set Exception Entry MTVEC to exc_entry\n     * Due to settings above, Exception and NMI\n     * will share common entry.\n     */\n    la t0, exc_entry\n    csrw CSR_MTVEC, t0\n\n    /* Set the interrupt processing mode to ECLIC mode */\n    li t0, 0x3f\n    csrc CSR_MTVEC, t0\n    csrs CSR_MTVEC, 0x3\n\n    /* ===== Startup Stage 2 ===== */\n\n\n    /* Enable mcycle and minstret counter */\n    csrci CSR_MCOUNTINHIBIT, 0x5\n\n    /* ===== Startup Stage 3 ===== */\n    /*\n     * Load code section from FLASH to ILM\n     * when code LMA is different with VMA\n     */\n    la a0, _ilm_lma\n    la a1, _ilm\n    /* If the ILM phy-address same as the logic-address, then quit */\n    beq a0, a1, 2f\n    la a2, _eilm\n    bgeu a1, a2, 2f\n\n1:\n    /* Load code section if necessary */\n    lw t0, (a0)\n    sw t0, (a1)\n    addi a0, a0, 4\n    addi a1, a1, 4\n    bltu a1, a2, 1b\n2:\n    /* Load data section */\n    la a0, _data_lma\n    la a1, _data\n    la a2, _edata\n    bgeu a1, a2, 2f\n1:\n    lw t0, (a0)\n    sw t0, (a1)\n    addi a0, a0, 4\n    addi a1, a1, 4\n    bltu a1, a2, 1b\n2:\n    /* Clear bss section */\n    la a0, __bss_start\n    la a1, _end\n    bgeu a0, a1, 2f\n1:\n    sw zero, (a0)\n    addi a0, a0, 4\n    bltu a0, a1, 1b\n2:\n\n    /*\n     * Call vendor defined SystemInit to\n     * initialize the micro-controller system\n     */\n    call SystemInit\n\n    /* Call global constructors */\n    la a0, __libc_fini_array\n    call atexit\n    /* Call C/C++ constructor start up code */\n    call __libc_init_array\n\n    /* do pre-init steps before main */\n    call _premain_init\n    /* ===== Call Main Function  ===== */\n    /* argc = argv = 0 */\n    li a0, 0\n    li a1, 0\n\n    call main\n\n    /* do post-main steps after main */\n    call _postmain_fini\n\n1:\n    j 1b\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Stubs/close.c",
    "content": "#include \"stub.h\"\n#include <errno.h>\n\nint _close(int fd) { return _stub(EBADF); }\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Stubs/fstat.c",
    "content": "#include \"stub.h\"\n#include <errno.h>\n#include <sys/stat.h>\n#include <unistd.h>\n\nint _fstat(int fd, struct stat *st) { return _stub(EBADF); }\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Stubs/gettimeofday.c",
    "content": "#include \"nuclei_sdk_soc.h\"\n#include <errno.h>\n#include <sys/time.h>\n\nint _gettimeofday(struct timeval *tp, void *tzp) {\n  uint64_t cycles;\n\n  cycles = __get_rv_cycle();\n\n  tp->tv_sec  = cycles / SystemCoreClock;\n  tp->tv_usec = (cycles % SystemCoreClock) * 1000000 / SystemCoreClock;\n  return 0;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Stubs/isatty.c",
    "content": "/* See LICENSE of license details. */\n\n#include <unistd.h>\n\nint _isatty(int fd) {\n  if (fd == STDOUT_FILENO || fd == STDERR_FILENO) {\n    return 1;\n  }\n\n  return 0;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Stubs/lseek.c",
    "content": "#include \"stub.h\"\n#include <errno.h>\n#include <sys/types.h>\n#include <unistd.h>\n\noff_t _lseek(int fd, off_t ptr, int dir) { return _stub(EBADF); }\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Stubs/read.c",
    "content": "#include \"gd32vf103_usart.h\"\n#include <errno.h>\n#include <stdint.h>\n#include <sys/types.h>\n#include <unistd.h>\n\n// #define UART_AUTO_ECHO\n\nssize_t _read(int fd, void *ptr, size_t len) { return -1; }\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Stubs/sbrk.c",
    "content": "/* See LICENSE of license details. */\n\n#include <stddef.h>\n#include <stdint.h>\n#include <unistd.h>\n\nvoid *_sbrk(ptrdiff_t incr) {\n  extern char  _end[];\n  extern char  _heap_end[];\n  static char *curbrk = _end;\n\n  if ((curbrk + incr < _end) || (curbrk + incr > _heap_end)) {\n    return NULL - 1;\n  }\n\n  curbrk += incr;\n  return curbrk - incr;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/Stubs/stub.h",
    "content": "\nstatic inline int _stub(int err) { return -1; }\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/gd32vf103_soc.c",
    "content": "#include \"nuclei_sdk_soc.h\"\n\nstatic uint32_t get_timer_freq() { return SOC_TIMER_FREQ; }\n\nuint32_t measure_cpu_freq(uint32_t n) {\n  uint32_t start_mcycle, delta_mcycle;\n  uint32_t start_mtime, delta_mtime;\n  uint32_t mtime_freq = get_timer_freq();\n\n  // Don't start measuruing until we see an mtime tick\n  uint32_t tmp = (uint32_t)SysTimer_GetLoadValue();\n  do {\n    start_mtime  = (uint32_t)SysTimer_GetLoadValue();\n    start_mcycle = __RV_CSR_READ(CSR_MCYCLE);\n  } while (start_mtime == tmp);\n\n  do {\n    delta_mtime  = (uint32_t)SysTimer_GetLoadValue() - start_mtime;\n    delta_mcycle = __RV_CSR_READ(CSR_MCYCLE) - start_mcycle;\n  } while (delta_mtime < n);\n\n  return (delta_mcycle / delta_mtime) * mtime_freq + ((delta_mcycle % delta_mtime) * mtime_freq) / delta_mtime;\n}\n\nuint32_t get_cpu_freq() {\n  uint32_t cpu_freq;\n\n  // warm up\n  measure_cpu_freq(1);\n  // measure for real\n  cpu_freq = measure_cpu_freq(100);\n\n  return cpu_freq;\n}\n\n/**\n * \\brief      delay a time in milliseconds\n * \\details\n *             provide API for delay\n * \\param[in]  count: count in milliseconds\n * \\remarks\n */\nvoid delay_1ms(uint32_t count) {\n  uint64_t end_mtime;\n  uint64_t delay_ticks = ((SOC_TIMER_FREQ / 4) * (uint64_t)count) / 1000;\n\n  end_mtime = SysTimer_GetLoadValue() + delay_ticks;\n\n  do {\n    asm(\"nop\");\n  } while (SysTimer_GetLoadValue() < end_mtime);\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source/system_gd32vf103.c",
    "content": "/******************************************************************************\n * @file     system_gd32vf103.c\n * @brief    NMSIS Nuclei Core Device Peripheral Access Layer Source File for\n *           Device gd32vf103\n * @version  V1.00\n * @date     22. Nov 2019\n ******************************************************************************/\n/*\n * Copyright (c) 2009-2018 Arm Limited. All rights reserved.\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#include \"gd32vf103.h\"\n#include \"gd32vf103_rcu.h\"\n#include <stdint.h>\n#include <stdio.h>\n\n/*----------------------------------------------------------------------------\n Define clocks\n *----------------------------------------------------------------------------*/\n/* ToDo: add here your necessary defines for device initialization\n following is an example for different system frequencies */\n#ifndef SYSTEM_CLOCK\n#define SYSTEM_CLOCK __SYSTEM_CLOCK_108M_PLL_HXTAL\n#endif\n\n/**\n * \\defgroup  NMSIS_Core_SystemAndClock   System and Clock Configuration\n * \\brief Functions for system and clock setup available in system_<device>.c.\n * \\details\n * Nuclei provides a template file **system_Device.c** that must be adapted by\n * the silicon vendor to match their actual device. As a <b>minimum requirement</b>,\n * this file must provide:\n *  -  A device-specific system configuration function, \\ref SystemInit().\n *  -  A global variable that contains the system frequency, \\ref SystemCoreClock.\n *\n * The file configures the device and, typically, initializes the oscillator (PLL) that is part\n * of the microcontroller device. This file might export other functions or variables that provide\n * a more flexible configuration of the microcontroller system.\n *\n * \\note Please pay special attention to the static variable \\c SystemCoreClock. This variable might be\n * used throughout the whole system initialization and runtime to calculate frequency/time related values.\n * Thus one must assure that the variable always reflects the actual system clock speed.\n *\n * \\attention\n * Be aware that a value stored to \\c SystemCoreClock during low level initialization (i.e. \\c SystemInit()) might get\n * overwritten by C libray startup code and/or .bss section initialization.\n * Thus its highly recommended to call \\ref SystemCoreClockUpdate at the beginning of the user \\c main() routine.\n *\n * @{\n */\n\n/*----------------------------------------------------------------------------\n System Core Clock Variable\n *----------------------------------------------------------------------------*/\n/* ToDo: initialize SystemCoreClock with the system core clock frequency value\n achieved after system intitialization.\n This means system core clock frequency after call to SystemInit() */\n/**\n * \\brief      Variable to hold the system core clock value\n * \\details\n * Holds the system core clock, which is the system clock frequency supplied to the SysTick\n * timer and the processor core clock. This variable can be used by debuggers to query the\n * frequency of the debug timer or to configure the trace clock speed.\n *\n * \\attention\n * Compilers must be configured to avoid removing this variable in case the application\n * program is not using it. Debugging systems require the variable to be physically\n * present in memory so that it can be examined to configure the debugger.\n */\nuint32_t SystemCoreClock = __SYSTEM_CLOCK_108M_PLL_HXTAL; /* System Clock Frequency (Core Clock) */\n\n/*----------------------------------------------------------------------------\n Clock functions\n *----------------------------------------------------------------------------*/\n\n/*!\n \\brief      configure the system clock to 108M by PLL which selects HXTAL(MD/HD/XD:8M; CL:25M) as its clock source\n \\param[in]  none\n \\param[out] none\n \\retval     none\n */\n\nstatic void system_clock_108m_hxtal(void) {\n  uint32_t timeout   = 0U;\n  uint32_t stab_flag = 0U;\n\n  /* enable HXTAL */\n  RCU_CTL |= RCU_CTL_HXTALEN;\n\n  /* wait until HXTAL is stable or the startup time is longer than\n   * HXTAL_STARTUP_TIMEOUT */\n  do {\n    timeout++;\n    stab_flag = (RCU_CTL & RCU_CTL_HXTALSTB);\n  } while ((0U == stab_flag) && (HXTAL_STARTUP_TIMEOUT != timeout));\n\n  /* if fail */\n  if (0U == (RCU_CTL & RCU_CTL_HXTALSTB)) {\n    while (1) {\n    }\n  }\n\n  /* HXTAL is stable */\n  /* AHB = SYSCLK */\n  RCU_CFG0 |= RCU_AHB_CKSYS_DIV1;\n  /* APB2 = AHB/1 */\n  RCU_CFG0 |= RCU_APB2_CKAHB_DIV1;\n  /* APB1 = AHB/2 */\n  RCU_CFG0 |= RCU_APB1_CKAHB_DIV4;\n\n  /* CK_PLL = (CK_PREDIV0) * 27 = 108 MHz */\n  RCU_CFG0 &= ~(RCU_CFG0_PLLMF | RCU_CFG0_PLLMF_4);\n  RCU_CFG0 |= (RCU_PLLSRC_HXTAL | RCU_PLL_MUL27);\n\n  if (HXTAL_VALUE == 25000000) {\n    /* CK_PREDIV0 = (CK_HXTAL)/5 *8 /10 = 4 MHz */\n    RCU_CFG1 &= ~(RCU_CFG1_PREDV0SEL | RCU_CFG1_PREDV1 | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV0);\n    RCU_CFG1 |= (RCU_PREDV0SRC_CKPLL1 | RCU_PREDV1_DIV5 | RCU_PLL1_MUL8 | RCU_PREDV0_DIV10);\n\n    /* enable PLL1 */\n    RCU_CTL |= RCU_CTL_PLL1EN;\n    /* wait till PLL1 is ready */\n    while (0U == (RCU_CTL & RCU_CTL_PLL1STB)) {\n    }\n\n    /* enable PLL1 */\n    RCU_CTL |= RCU_CTL_PLL2EN;\n    /* wait till PLL1 is ready */\n    while (0U == (RCU_CTL & RCU_CTL_PLL2STB)) {\n    }\n  } else if (HXTAL_VALUE == 8000000) {\n    RCU_CFG1 &= ~(RCU_CFG1_PREDV0SEL | RCU_CFG1_PREDV1 | RCU_CFG1_PLL1MF | RCU_CFG1_PREDV0);\n    RCU_CFG1 |= (RCU_PREDV0SRC_HXTAL | RCU_PREDV0_DIV2 | RCU_PREDV1_DIV2 | RCU_PLL1_MUL20 | RCU_PLL2_MUL20);\n\n    /* enable PLL1 */\n    RCU_CTL |= RCU_CTL_PLL1EN;\n    /* wait till PLL1 is ready */\n    while (0U == (RCU_CTL & RCU_CTL_PLL1STB)) {\n    }\n\n    /* enable PLL2 */\n    RCU_CTL |= RCU_CTL_PLL2EN;\n    /* wait till PLL1 is ready */\n    while (0U == (RCU_CTL & RCU_CTL_PLL2STB)) {\n    }\n  }\n  /* enable PLL */\n  RCU_CTL |= RCU_CTL_PLLEN;\n\n  /* wait until PLL is stable */\n  while (0U == (RCU_CTL & RCU_CTL_PLLSTB)) {\n  }\n\n  /* select PLL as system clock */\n  RCU_CFG0 &= ~RCU_CFG0_SCS;\n  RCU_CFG0 |= RCU_CKSYSSRC_PLL;\n\n  /* wait until PLL is selected as system clock */\n  while (0U == (RCU_CFG0 & RCU_SCSS_PLL)) {\n  }\n}\n\n/*!\n \\brief      configure the system clock\n \\param[in]  none\n \\param[out] none\n \\retval     none\n */\nstatic void system_clock_config(void) { system_clock_108m_hxtal(); }\n\n/**\n * \\brief      Function to update the variable \\ref SystemCoreClock\n * \\details\n * Updates the variable \\ref SystemCoreClock and must be called whenever the core clock is changed\n * during program execution. The function evaluates the clock register settings and calculates\n * the current core clock.\n */\nvoid SystemCoreClockUpdate(void) /* Get Core Clock Frequency */\n{\n  /* ToDo: add code to calculate the system frequency based upon the current\n   *    register settings.\n   * Note: This function can be used to retrieve the system core clock\n   * frequeny after user changed register settings.\n   */\n  uint32_t scss;\n  uint32_t pllsel, predv0sel, pllmf, ck_src;\n  uint32_t predv0, predv1, pll1mf;\n\n  scss = GET_BITS(RCU_CFG0, 2, 3);\n\n  switch (scss) {\n  /* IRC8M is selected as CK_SYS */\n  case SEL_IRC8M:\n    SystemCoreClock = IRC8M_VALUE;\n    break;\n\n    /* HXTAL is selected as CK_SYS */\n  case SEL_HXTAL:\n    SystemCoreClock = HXTAL_VALUE;\n    break;\n\n    /* PLL is selected as CK_SYS */\n  case SEL_PLL:\n    /* PLL clock source selection, HXTAL or IRC8M/2 */\n    pllsel = (RCU_CFG0 & RCU_CFG0_PLLSEL);\n\n    if (RCU_PLLSRC_IRC8M_DIV2 == pllsel) {\n      /* PLL clock source is IRC8M/2 */\n      ck_src = IRC8M_VALUE / 2U;\n    } else {\n      /* PLL clock source is HXTAL */\n      ck_src = HXTAL_VALUE;\n\n      predv0sel = (RCU_CFG1 & RCU_CFG1_PREDV0SEL);\n\n      /* source clock use PLL1 */\n      if (RCU_PREDV0SRC_CKPLL1 == predv0sel) {\n        predv1 = ((RCU_CFG1 & RCU_CFG1_PREDV1) >> 4) + 1U;\n        pll1mf = ((RCU_CFG1 & RCU_CFG1_PLL1MF) >> 8) + 2U;\n        if (17U == pll1mf) {\n          pll1mf = 20U;\n        }\n        ck_src = (ck_src / predv1) * pll1mf;\n      }\n      predv0 = (RCU_CFG1 & RCU_CFG1_PREDV0) + 1U;\n      ck_src /= predv0;\n    }\n\n    /* PLL multiplication factor */\n    pllmf = GET_BITS(RCU_CFG0, 18, 21);\n\n    if ((RCU_CFG0 & RCU_CFG0_PLLMF_4)) {\n      pllmf |= 0x10U;\n    }\n\n    if (pllmf >= 15U) {\n      pllmf += 1U;\n    } else {\n      pllmf += 2U;\n    }\n\n    SystemCoreClock = ck_src * pllmf;\n\n    if (15U == pllmf) {\n      /* PLL source clock multiply by 6.5 */\n      SystemCoreClock = ck_src * 6U + ck_src / 2U;\n    }\n\n    break;\n\n    /* IRC8M is selected as CK_SYS */\n  default:\n    SystemCoreClock = IRC8M_VALUE;\n    break;\n  }\n}\n\n/**\n * \\brief      Function to Initialize the system.\n * \\details\n * Initializes the microcontroller system. Typically, this function configures the\n * oscillator (PLL) that is part of the microcontroller device. For systems\n * with a variable clock speed, it updates the variable \\ref SystemCoreClock.\n * SystemInit is called from the file <b>startup<i>_device</i></b>.\n */\nvoid SystemInit(void) {\n  /* ToDo: add code to initialize the system\n   * Warn: do not use global variables because this function is called before\n   * reaching pre-main. RW section maybe overwritten afterwards.\n   */\n  /* reset the RCC clock configuration to the default reset state */\n  /* enable IRC8M */\n  RCU_CTL |= RCU_CTL_IRC8MEN;\n\n  /* reset SCS, AHBPSC, APB1PSC, APB2PSC, ADCPSC, CKOUT0SEL bits */\n  RCU_CFG0 &= ~(RCU_CFG0_SCS | RCU_CFG0_AHBPSC | RCU_CFG0_APB1PSC | RCU_CFG0_APB2PSC | RCU_CFG0_ADCPSC | RCU_CFG0_ADCPSC_2 | RCU_CFG0_CKOUT0SEL);\n\n  /* reset HXTALEN, CKMEN, PLLEN bits */\n  RCU_CTL &= ~(RCU_CTL_HXTALEN | RCU_CTL_CKMEN | RCU_CTL_PLLEN);\n\n  /* Reset HXTALBPS bit */\n  RCU_CTL &= ~(RCU_CTL_HXTALBPS);\n\n  /* reset PLLSEL, PREDV0_LSB, PLLMF, USBFSPSC bits */\n\n  RCU_CFG0 &= ~(RCU_CFG0_PLLSEL | RCU_CFG0_PREDV0_LSB | RCU_CFG0_PLLMF | RCU_CFG0_USBFSPSC | RCU_CFG0_PLLMF_4);\n  RCU_CFG1 = 0x00000000U;\n\n  /* Reset HXTALEN, CKMEN, PLLEN, PLL1EN and PLL2EN bits */\n  RCU_CTL &= ~(RCU_CTL_PLLEN | RCU_CTL_PLL1EN | RCU_CTL_PLL2EN | RCU_CTL_CKMEN | RCU_CTL_HXTALEN);\n  /* disable all interrupts */\n  RCU_INT = 0x00FF0000U;\n\n  /* Configure the System clock source, PLL Multiplier, AHB/APBx prescalers and Flash settings */\n  system_clock_config();\n}\n\n/**\n * \\defgroup  NMSIS_Core_IntExcNMI_Handling   Interrupt and Exception and NMI Handling\n * \\brief Functions for interrupt, exception and nmi handle available in system_<device>.c.\n * \\details\n * Nuclei provide a template for interrupt, exception and NMI handling. Silicon Vendor could adapat according\n * to their requirement. Silicon vendor could implement interface for different exception code and\n * replace current implementation.\n *\n * @{\n */\n/** \\brief Max exception handler number, don't include the NMI(0xFFF) one */\n#define MAX_SYSTEM_EXCEPTION_NUM 12\n/**\n * \\brief      Store the exception handlers for each exception ID\n * \\note\n * - This SystemExceptionHandlers are used to store all the handlers for all\n * the exception codes Nuclei N/NX core provided.\n * - Exception code 0 - 11, totally 12 exceptions are mapped to SystemExceptionHandlers[0:11]\n * - Exception for NMI is also re-routed to exception handling(exception code 0xFFF) in startup code configuration, the handler itself is mapped to SystemExceptionHandlers[MAX_SYSTEM_EXCEPTION_NUM]\n */\nstatic unsigned long SystemExceptionHandlers[MAX_SYSTEM_EXCEPTION_NUM + 1];\n\n/**\n * \\brief      Exception Handler Function Typedef\n * \\note\n * This typedef is only used internal in this system_gd32vf103.c file.\n * It is used to do type conversion for registered exception handler before calling it.\n */\ntypedef void (*EXC_HANDLER)(unsigned long mcause, unsigned long sp);\n\n/**\n * \\brief      System Default Exception Handler\n * \\details\n * This function provided a default exception and NMI handling code for all exception ids.\n * By default, It will just print some information for debug, Vendor can customize it according to its requirements.\n */\nstatic void system_default_exception_handler(unsigned long mcause, unsigned long sp) {\n  /* TODO: Uncomment this if you have implement printf function */\n  printf(\"MCAUSE: 0x%lx\\r\\n\", mcause);\n  printf(\"MEPC  : 0x%lx\\r\\n\", __RV_CSR_READ(CSR_MEPC));\n  printf(\"MTVAL : 0x%lx\\r\\n\", __RV_CSR_READ(CSR_MBADADDR));\n  while (1) {\n  }\n}\n\n/**\n * \\brief      Initialize all the default core exception handlers\n * \\details\n * The core exception handler for each exception id will be initialized to \\ref system_default_exception_handler.\n * \\note\n * Called in \\ref _init function, used to initialize default exception handlers for all exception IDs\n */\nstatic void Exception_Init(void) {\n  for (int i = 0; i < MAX_SYSTEM_EXCEPTION_NUM + 1; i++) {\n    SystemExceptionHandlers[i] = (unsigned long)system_default_exception_handler;\n  }\n}\n\n/**\n * \\brief       Register an exception handler for exception code EXCn\n * \\details\n * * For EXCn < \\ref MAX_SYSTEM_EXCEPTION_NUM, it will be registered into SystemExceptionHandlers[EXCn-1].\n * * For EXCn == NMI_EXCn, it will be registered into SystemExceptionHandlers[MAX_SYSTEM_EXCEPTION_NUM].\n * \\param   EXCn    See \\ref EXCn_Type\n * \\param   exc_handler     The exception handler for this exception code EXCn\n */\nvoid Exception_Register_EXC(uint32_t EXCn, unsigned long exc_handler) {\n  if ((EXCn < MAX_SYSTEM_EXCEPTION_NUM)) {\n    SystemExceptionHandlers[EXCn] = exc_handler;\n  } else if (EXCn == NMI_EXCn) {\n    SystemExceptionHandlers[MAX_SYSTEM_EXCEPTION_NUM] = exc_handler;\n  }\n}\n\n/**\n * \\brief       Get current exception handler for exception code EXCn\n * \\details\n * * For EXCn < \\ref MAX_SYSTEM_EXCEPTION_NUM, it will return SystemExceptionHandlers[EXCn-1].\n * * For EXCn == NMI_EXCn, it will return SystemExceptionHandlers[MAX_SYSTEM_EXCEPTION_NUM].\n * \\param   EXCn    See \\ref EXCn_Type\n * \\return  Current exception handler for exception code EXCn, if not found, return 0.\n */\nunsigned long Exception_Get_EXC(uint32_t EXCn) {\n  if ((EXCn < MAX_SYSTEM_EXCEPTION_NUM)) {\n    return SystemExceptionHandlers[EXCn];\n  } else if (EXCn == NMI_EXCn) {\n    return SystemExceptionHandlers[MAX_SYSTEM_EXCEPTION_NUM];\n  } else {\n    return 0;\n  }\n}\n\n/**\n * \\brief      Common NMI and Exception handler entry\n * \\details\n * This function provided a command entry for NMI and exception. Silicon Vendor could modify\n * this template implementation according to requirement.\n * \\remarks\n * - RISCV provided common entry for all types of exception. This is proposed code template\n *   for exception entry function, Silicon Vendor could modify the implementation.\n * - For the core_exception_handler template, we provided exception register function \\ref Exception_Register_EXC\n *   which can help developer to register your exception handler for specific exception number.\n */\nuint32_t core_exception_handler(unsigned long mcause, unsigned long sp) {\n  uint32_t    EXCn = (uint32_t)(mcause & 0X00000fff);\n  EXC_HANDLER exc_handler;\n\n  if ((EXCn < MAX_SYSTEM_EXCEPTION_NUM)) {\n    exc_handler = (EXC_HANDLER)SystemExceptionHandlers[EXCn];\n  } else if (EXCn == NMI_EXCn) {\n    exc_handler = (EXC_HANDLER)SystemExceptionHandlers[MAX_SYSTEM_EXCEPTION_NUM];\n  } else {\n    exc_handler = (EXC_HANDLER)system_default_exception_handler;\n  }\n  if (exc_handler != NULL) {\n    exc_handler(mcause, sp);\n  }\n  return 0;\n}\n/** @} */ /* End of Doxygen Group NMSIS_Core_ExceptionAndNMI */\n\nvoid SystemBannerPrint(void) {\n#if defined(NUCLEI_BANNER) && (NUCLEI_BANNER == 1)\n#ifndef DOWNLOAD_MODE\n#error DOWNLOAD_MODE is not defined via build system, please check!\n#endif\n  const char *download_modes[] = {\"FLASHXIP\", \"FLASH\", \"ILM\", \"DDR\"};\n  printf(\"Nuclei SDK Build Time: %s, %s\\r\\n\", __DATE__, __TIME__);\n  printf(\"Download Mode: %s\\r\\n\", download_modes[DOWNLOAD_MODE]);\n  printf(\"CPU Frequency %d Hz\\r\\n\", SystemCoreClock);\n#endif\n}\n\n/**\n * \\brief initialize eclic config\n * \\details\n * Eclic need initialize after boot up, Vendor could also change the initialization\n * configuration.\n */\nvoid ECLIC_Init(void) {\n  /* TODO: Add your own initialization code here. This function will be called by main */\n  ECLIC_SetMth(0);\n  ECLIC_SetCfgNlbits(__ECLIC_INTCTLBITS);\n}\n\n/**\n * \\brief  Initialize a specific IRQ and register the handler\n * \\details\n * This function set vector mode, trigger mode and polarity, interrupt level and priority,\n * assign handler for specific IRQn.\n * \\param [in]  IRQn        NMI interrupt handler address\n * \\param [in]  shv         \\ref ECLIC_NON_VECTOR_INTERRUPT means non-vector mode, and \\ref ECLIC_VECTOR_INTERRUPT is vector mode\n * \\param [in]  trig_mode   see \\ref ECLIC_TRIGGER_Type\n * \\param [in]  lvl         interupt level\n * \\param [in]  priority    interrupt priority\n * \\param [in]  handler     interrupt handler, if NULL, handler will not be installed\n * \\return       -1 means invalid input parameter. 0 means successful.\n * \\remarks\n * - This function use to configure specific eclic interrupt and register its interrupt handler and enable its interrupt.\n * - If the vector table is placed in read-only section(FLASHXIP mode), handler could not be installed\n */\nint32_t ECLIC_Register_IRQ(IRQn_Type IRQn, uint8_t shv, ECLIC_TRIGGER_Type trig_mode, uint8_t lvl, uint8_t priority, void *handler) {\n  if ((IRQn > SOC_INT_MAX) || (shv > ECLIC_VECTOR_INTERRUPT) || (trig_mode > ECLIC_NEGTIVE_EDGE_TRIGGER)) {\n    return -1;\n  }\n\n  /* set interrupt vector mode */\n  ECLIC_SetShvIRQ(IRQn, shv);\n  /* set interrupt trigger mode and polarity */\n  ECLIC_SetTrigIRQ(IRQn, trig_mode);\n  /* set interrupt level */\n  ECLIC_SetLevelIRQ(IRQn, lvl);\n  /* set interrupt priority */\n  ECLIC_SetPriorityIRQ(IRQn, priority);\n  if (handler != NULL) {\n    /* set interrupt handler entry to vector table */\n    ECLIC_SetVector(IRQn, (rv_csr_t)handler);\n  }\n  /* enable interrupt */\n  ECLIC_EnableIRQ(IRQn);\n  return 0;\n}\n/** @} */ /* End of Doxygen Group NMSIS_Core_ExceptionAndNMI */\n\n/**\n * \\brief early init function before main\n * \\details\n * This function is executed right before main function.\n * For RISC-V gnu toolchain, _init function might not be called\n * by __libc_init_array function, so we defined a new function\n * to do initialization\n */\nvoid _premain_init(void) {\n  /* TODO: Add your own initialization code here, called before main */\n  SystemCoreClock = get_cpu_freq();\n  /* Initialize exception default handlers */\n  Exception_Init();\n  /* ECLIC initialization, mainly MTH and NLBIT */\n  ECLIC_Init();\n}\n\n/**\n * \\brief finish function after main\n * \\param [in]  status     status code return from main\n * \\details\n * This function is executed right after main function.\n * For RISC-V gnu toolchain, _fini function might not be called\n * by __libc_fini_array function, so we defined a new function\n * to do initialization\n */\nvoid _postmain_fini(int status) { /* TODO: Add your own finishing code here, called after main */ }\n\n/**\n * \\brief _init function called in __libc_init_array()\n * \\details\n * This `__libc_init_array()` function is called during startup code,\n * user need to implement this function, otherwise when link it will\n * error init.c:(.text.__libc_init_array+0x26): undefined reference to `_init'\n * \\note\n * Please use \\ref _premain_init function now\n */\nvoid _init(void) { /* Don't put any code here, please use _premain_init now */ }\n\n/**\n * \\brief _fini function called in __libc_fini_array()\n * \\details\n * This `__libc_fini_array()` function is called when exit main.\n * user need to implement this function, otherwise when link it will\n * error fini.c:(.text.__libc_fini_array+0x28): undefined reference to `_fini'\n * \\note\n * Please use \\ref _postmain_fini function now\n */\nvoid _fini(void) { /* Don't put any code here, please use _postmain_fini now */ }\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_SystemAndClock */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/configuration.h",
    "content": "#ifndef CONFIGURATION_H_\n#define CONFIGURATION_H_\n#include <stdint.h>\n/**\n * Configuration.h\n * Define here your default pre settings for Pinecil\n *\n */\n\n//===========================================================================\n//============================= Default Settings ============================\n//===========================================================================\n/**\n * Default soldering temp is 320.0 C\n * Temperature the iron sleeps at - default 150.0 C\n */\n\n#define SLEEP_TEMP         150 // Default sleep temperature\n#define BOOST_TEMP         420 // Default boost temp.\n#define BOOST_MODE_ENABLED 1   // 0: Disable 1: Enable\n\n/**\n * Blink the temperature on the cooling screen when its > 50C\n */\n#define COOLING_TEMP_BLINK 0 // 0: Disable 1: Enable\n\n/**\n * How many seconds/minutes we wait until going to sleep/shutdown.\n * Values -> SLEEP_TIME * 10; i.e. 5*10 = 50 Seconds!\n */\n#define SLEEP_TIME    5  // x10 Seconds\n#define SHUTDOWN_TIME 10 // Minutes\n\n/**\n * Auto start off for safety.\n * Pissible values are:\n *  0 - none\n *  1 - Soldering Temperature\n *  2 - Sleep Temperature\n *  3 - Sleep Off Temperature\n */\n#define AUTO_START_MODE 0 // Default to none\n\n/**\n * Locking Mode\n * When in soldering mode a long press on both keys toggle the lock of the buttons\n * Possible values are:\n *  0 - Desactivated\n *  1 - Lock except boost\n *  2 - Full lock\n */\n#define LOCKING_MODE 0 // Default to desactivated for safety\n\n/**\n * OLED Orientation\n *\n */\n#define ORIENTATION_MODE           2 // 0: Right 1:Left 2:Automatic - Default Automatic\n#define MAX_ORIENTATION_MODE       2 // Up to auto\n#define REVERSE_BUTTON_TEMP_CHANGE 0 // 0:Default 1:Reverse - Reverse the plus and minus button assigment for temperature change\n\n/**\n * OLED Brightness\n *\n */\n#define MIN_BRIGHTNESS     0   // Min OLED brightness selectable\n#define MAX_BRIGHTNESS     100 // Max OLED brightness selectable\n#define BRIGHTNESS_STEP    25  // OLED brightness increment\n#define DEFAULT_BRIGHTNESS 25  // default OLED brightness\n\n/**\n * Temp change settings\n */\n#define TEMP_CHANGE_SHORT_STEP     1  // Default temp change short step +1\n#define TEMP_CHANGE_LONG_STEP      10 // Default temp change long step +10\n#define TEMP_CHANGE_SHORT_STEP_MAX 50 // Temp change short step MAX value\n#define TEMP_CHANGE_LONG_STEP_MAX  90 // Temp change long step MAX value\n\n/* Power pulse for keeping power banks awake*/\n#define POWER_PULSE_INCREMENT    1\n#define POWER_PULSE_MAX          100 // x10 max watts\n#define POWER_PULSE_WAIT_MAX     9   // 9*2.5s = 22.5 seconds\n#define POWER_PULSE_DURATION_MAX 9   // 9*250ms = 2.25 seconds\n\n#ifdef MODEL_Pinecil\n#define POWER_PULSE_DEFAULT 0\n#else\n#define POWER_PULSE_DEFAULT 5\n#endif                                 /* Pinecil */\n#define POWER_PULSE_WAIT_DEFAULT     4 // Default rate of the power pulse: 4*2500 = 10000 ms = 10 s\n#define POWER_PULSE_DURATION_DEFAULT 1 // Default duration of the power pulse: 1*250 = 250 ms\n\n/**\n * OLED Orientation Sensitivity on Automatic mode!\n * Motion Sensitivity <0=Off 1=Least Sensitive 9=Most Sensitive>\n */\n#define SENSITIVITY 7 // Default 7\n\n/**\n * Detailed soldering screen\n * Detailed idle screen (off for first time users)\n */\n#define DETAILED_SOLDERING 0 // 0: Disable 1: Enable - Default 0\n#define DETAILED_IDLE      0 // 0: Disable 1: Enable - Default 0\n\n#define THERMAL_RUNAWAY_TIME_SEC 20\n#define THERMAL_RUNAWAY_TEMP_C   3\n\n#define CUT_OUT_SETTING          0  // default to no cut-off voltage\n#define RECOM_VOL_CELL           33 // Minimum voltage per cell (Recommended 3.3V (33))\n#define TEMPERATURE_INF          0  // default to 0\n#define DESCRIPTION_SCROLL_SPEED 0  // 0: Slow 1: Fast - default to slow\n#define ANIMATION_LOOP           1  // 0: off 1: on\n#define ANIMATION_SPEED          settingOffSpeed_t::MEDIUM\n\n#define OP_AMP_Rf_Pinecil  750 * 1000 // 750  Kilo-ohms -> From schematic, R1\n#define OP_AMP_Rin_Pinecil 2370       // 2.37 Kilo-ohms -> From schematic, R2\n\n#define OP_AMP_GAIN_STAGE_PINECIL (1 + (OP_AMP_Rf_Pinecil / OP_AMP_Rin_Pinecil))\n\n#define ADC_MAX_READING (4096 * 8) // Maximum reading of the adc\n#define ADC_VDD_MV      3300       // ADC max reading millivolts\n\n#if defined(MODEL_Pinecil) == 0\n#error \"No model defined!\"\n#endif\n\n#ifdef MODEL_Pinecil\n#define SOLDERING_TEMP         320                       // Default soldering temp is 320.0 °C\n#define VOLTAGE_DIV            467                       // 467 - Default divider from schematic\n#define CALIBRATION_OFFSET     900                       // 900 - Default adc offset in uV\n#define MIN_CALIBRATION_OFFSET 100                       // Min value for calibration\n#define PID_POWER_LIMIT        70                        // Sets the max pwm power limit\n#define POWER_LIMIT            0                         // 0 watts default limit\n#define MAX_POWER_LIMIT        70                        //\n#define POWER_LIMIT_STEPS      5                         //\n#define OP_AMP_GAIN_STAGE      OP_AMP_GAIN_STAGE_PINECIL // Uses TS100 resistors\n#define TEMP_uV_LOOKUP_HAKKO                             // Use Hakko lookup table\n#define USB_PD_VMAX            20                        // Maximum voltage for PD to negotiate\n#define PID_TIM_HZ             (8)                       // Tick rate of the PID loop\n#define MAX_TEMP_C             450                       // Max soldering temp selectable °C\n#define MAX_TEMP_F             850                       // Max soldering temp selectable °F\n#define MIN_TEMP_C             10                        // Min soldering temp selectable °C\n#define MIN_TEMP_F             50                        // Min soldering temp selectable °F\n#define MIN_BOOST_TEMP_C       250                       // The min settable temp for boost mode °C\n#define MIN_BOOST_TEMP_F       480                       // The min settable temp for boost mode °F\n\n#define OLED_96x16         1\n#define POW_PD             1\n#define USB_PD_EPR_WATTAGE 0 /*No EPR (Yet?) */\n#define POW_PD_EXT         0\n#define POW_QC             1\n#define POW_DC             1\n#define POW_QC_20V         1\n#define ENABLE_QC2         1\n#define MAG_SLEEP_SUPPORT  1\n#define TIP_TYPE_SUPPORT           1 // Support for tips of different types, i.e. resistance\n#define TIPTYPE_T12        1 // Can manually pick a T12 tip\n#define TEMP_TMP36\n#define ACCEL_BMA\n#define ACCEL_SC7\n#define HALL_SENSOR\n#define VBUS_MOD_TEST\n#define HALL_SI7210\n#define DEBUG_UART_OUTPUT\n#define NEEDS_VBUS_PROBE 1\n\n#define HARDWARE_MAX_WATTAGE_X10 750\n#define TIP_THERMAL_MASS         65 // X10 watts to raise 1 deg C in 1 second\n#define TIP_RESISTANCE           75 // x10 ohms, 7.5 typical for Pinecil tips\n#define CANT_DIRECT_READ_SETTINGS\n#endif /* Pinecil */\n\n#define FLASH_LOGOADDR      (0x08000000 + (126 * 1024))\n#define SETTINGS_START_PAGE (0x08000000 + (127 * 1024))\n\n#define HAS_POWER_DEBUG_MENU\n\n#endif /* CONFIGURATION_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/flash.c",
    "content": "/*\r\n * flash.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"BSP.h\"\r\n#include \"BSP_Flash.h\"\r\n#include \"gd32vf103_libopt.h\"\r\n#include \"string.h\"\r\n#define FMC_PAGE_SIZE ((uint16_t)0x400U)\r\n\r\nvoid flash_save_buffer(const uint8_t *buffer, const uint16_t length) {\r\n\r\n  /* unlock the flash program/erase controller */\r\n  fmc_unlock();\r\n\r\n  /* clear all pending flags */\r\n  fmc_flag_clear(FMC_FLAG_END);\r\n  fmc_flag_clear(FMC_FLAG_WPERR);\r\n  fmc_flag_clear(FMC_FLAG_PGERR);\r\n  resetWatchdog();\r\n  fmc_page_erase((uint32_t)SETTINGS_START_PAGE);\r\n  resetWatchdog();\r\n  uint16_t *data = (uint16_t *)buffer;\r\n  for (uint16_t i = 0; i < (length / 2); i++) {\r\n    fmc_halfword_program((uint32_t)SETTINGS_START_PAGE + (i * 2), data[i]);\r\n    fmc_flag_clear(FMC_FLAG_END);\r\n    fmc_flag_clear(FMC_FLAG_WPERR);\r\n    fmc_flag_clear(FMC_FLAG_PGERR);\r\n    resetWatchdog();\r\n  }\r\n  fmc_lock();\r\n}\r\n\r\nvoid flash_read_buffer(uint8_t *buffer, const uint16_t length) {\r\n  uint32_t *b  = (uint32_t *)buffer;\r\n  uint32_t *b2 = (uint32_t *)SETTINGS_START_PAGE;\r\n  for (int i = 0; i < length / 4; i++) {\r\n    b[i] = b2[i];\r\n  }\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/fusb_user.cpp",
    "content": "#include \"configuration.h\"\n#ifdef POW_PD\n#include \"BSP.h\"\n#include \"I2C_Wrapper.hpp\"\n#include \"Setup.h\"\n\n/*\n * Read multiple bytes from the FUSB302B\n *\n * cfg: The FUSB302B to communicate with\n * addr: The memory address from which to read\n * size: The number of bytes to read\n * buf: The buffer into which data will be read\n */\nbool fusb_read_buf(const uint8_t deviceAddr, const uint8_t registerAdd, const uint8_t size, uint8_t *buf) { return FRToSI2C::Mem_Read(deviceAddr, registerAdd, buf, size); }\n\n/*\n * Write multiple bytes to the FUSB302B\n *\n * cfg: The FUSB302B to communicate with\n * addr: The memory address to which we will write\n * size: The number of bytes to write\n * buf: The buffer to write\n */\nbool fusb_write_buf(const uint8_t deviceAddr, const uint8_t registerAdd, const uint8_t size, uint8_t *buf) { return FRToSI2C::Mem_Write(deviceAddr, registerAdd, (uint8_t *)buf, size); }\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/postRTOS.cpp",
    "content": "#include \"BSP.h\"\n#include \"FreeRTOS.h\"\n#include \"I2C_Wrapper.hpp\"\n#include \"QC3.h\"\n#include \"Settings.h\"\n#include \"Si7210.h\"\n#include \"cmsis_os.h\"\n#include \"main.hpp\"\n#include \"power.hpp\"\n#include \"stdlib.h\"\n#include \"task.h\"\n\nbool hall_effect_present = false;\nvoid postRToSInit() {\n  // Any after RTos setup\n#ifdef HALL_SI7210\n  if (Si7210::detect()) {\n    hall_effect_present = Si7210::init();\n  }\n#endif\n}\nint16_t getRawHallEffect() {\n  if (hall_effect_present) {\n    return Si7210::read();\n  }\n  return 0;\n}\n\nbool getHallSensorFitted() { return hall_effect_present; }\n"
  },
  {
    "path": "source/Core/BSP/Pinecil/preRTOS.cpp",
    "content": "/*\r\n * preRTOS.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"BSP.h\"\r\n#include \"Pins.h\"\r\n#include \"Setup.h\"\r\n#include \"gd32vf103_libopt.h\"\r\n#include <I2C_Wrapper.hpp>\r\nvoid preRToSInit() {\r\n  // Normal system bringup -- GPIO etc\r\n\r\n  hardware_init();\r\n  gpio_bit_reset(OLED_RESET_GPIO_Port, OLED_RESET_Pin);\r\n  delay_ms(5);\r\n  gpio_bit_set(OLED_RESET_GPIO_Port, OLED_RESET_Pin);\r\n  FRToSI2C::FRToSInit();\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/BSP.cpp",
    "content": "// BSP mapping functions\r\n\r\n#include \"BSP.h\"\r\n#include \"BootLogo.h\"\r\n#include \"I2C_Wrapper.hpp\"\r\n#include \"IRQ.h\"\r\n#include \"Pins.h\"\r\n#include \"Settings.h\"\r\n#include \"Setup.h\"\r\n#if defined(WS2812B_ENABLE)\r\n#include \"WS2812B.h\"\r\n#endif\r\n#include \"TipThermoModel.h\"\r\n#include \"USBPD.h\"\r\n#include \"Utils.hpp\"\r\n#include \"bflb_platform.h\"\r\n#include \"bl702_adc.h\"\r\n#include \"configuration.h\"\r\n#include \"crc32.h\"\r\n#include \"hal_flash.h\"\r\n#include \"history.hpp\"\r\n#include \"main.hpp\"\r\n\r\nextern ADC_Gain_Coeff_Type adcGainCoeffCal;\r\n\r\n// These control the period's of time used for the PWM\r\nconst uint16_t powerPWM         = 255;\r\nuint8_t        holdoffTicks     = 25; // This is the tick delay before temp measure starts (i.e. time for op-amp recovery)\r\nuint8_t        tempMeasureTicks = 25;\r\n\r\nuint16_t totalPWM = 255; // Total length of the cycle's ticks\r\n\r\n#if defined(WS2812B_ENABLE)\r\nWS2812B<WS2812B_Pin, 1> ws2812b;\r\n#endif\r\n\r\nvoid resetWatchdog() {\r\n  // #TODO\r\n}\r\n\r\n#ifdef TEMP_NTC\r\n// Lookup table for the NTC\r\n// Stored as ADCReading,Temp in degC\r\nstatic const int32_t NTCHandleLookup[] = {\r\n    // ADC Reading , Temp in C x10\r\n    // Based on NTCG163JF103FTDS thermocouple datasheet values,\r\n    // arranged in a voltage divider configuration, with the NTC\r\n    // pulling up towards 3.3V, and with a 10k 1% pull-down resistor.\r\n    // ADC Reading = 3.3V * 10 / (10 + TypkOhm) / 3.2V * (2 ^ 16)\r\n    3405,  -400, //\r\n    4380,  -350, //\r\n    5572,  -300, //\r\n    6999,  -250, //\r\n    8688,  -200, //\r\n    10650, -150, //\r\n    12885, -100, //\r\n    15384, -50,  //\r\n    18129, 0,    //\r\n    21074, 50,   //\r\n    24172, 100,  //\r\n    27362, 150,  //\r\n    30595, 200,  //\r\n    33792, 250,  //\r\n    36907, 300,  //\r\n    39891, 350,  //\r\n    42704, 400,  //\r\n    45325, 450,  //\r\n    47736, 500,  //\r\n    49929, 550,  //\r\n    51912, 600,  //\r\n    53689, 650,  //\r\n    55274, 700,  //\r\n    56679, 750,  //\r\n    57923, 800,  //\r\n    59020, 850,  //\r\n    59984, 900,  //\r\n    60832, 950,  //\r\n    61580, 1000, //\r\n    62232, 1050, //\r\n    62810, 1100, //\r\n    63316, 1150, //\r\n    63765, 1200, //\r\n    64158, 1250, //\r\n\r\n};\r\n#endif\r\nuint16_t getHandleTemperature(uint8_t sample) {\r\n  int32_t result = getADCHandleTemp(sample);\r\n  // Tip is wired up with an NTC thermistor\r\n  // 10K NTC balanced with a 10K pulldown\r\n  // NTCG163JF103FTDS\r\n  return Utils::InterpolateLookupTable(NTCHandleLookup, sizeof(NTCHandleLookup) / (2 * sizeof(int32_t)), result);\r\n}\r\n\r\nuint16_t getInputVoltageX10(uint16_t divisor, uint8_t sample) {\r\n  uint32_t res = getADCVin(sample);\r\n  res *= 4;\r\n  res /= divisor;\r\n  return res;\r\n}\r\n\r\nvoid unstick_I2C() {\r\n  /* configure SDA/SCL for GPIO */\r\n  // GPIO_BC(GPIOB) |= SDA_Pin | SCL_Pin;\r\n  // gpio_init(SDA_GPIO_Port, GPIO_MODE_OUT_OD, GPIO_OSPEED_50MHZ, SDA_Pin | SCL_Pin);\r\n  // for (int i = 0; i < 8; i++) {\r\n  //   asm(\"nop\");\r\n  //   asm(\"nop\");\r\n  //   asm(\"nop\");\r\n  //   asm(\"nop\");\r\n  //   asm(\"nop\");\r\n  //   GPIO_BOP(GPIOB) |= SCL_Pin;\r\n  //   asm(\"nop\");\r\n  //   asm(\"nop\");\r\n  //   asm(\"nop\");\r\n  //   asm(\"nop\");\r\n  //   asm(\"nop\");\r\n  //   GPIO_BOP(GPIOB) &= SCL_Pin;\r\n  // }\r\n  // /* connect PB6 to I2C0_SCL */\r\n  // /* connect PB7 to I2C0_SDA */\r\n  // gpio_init(SDA_GPIO_Port, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, SDA_Pin | SCL_Pin);\r\n}\r\n\r\nuint8_t getButtonA() {\r\n  uint8_t val = gpio_read(KEY_A_Pin);\r\n  return val;\r\n}\r\nuint8_t getButtonB() {\r\n  uint8_t val = gpio_read(KEY_B_Pin);\r\n  return val;\r\n}\r\n\r\nvoid BSPInit(void) {\r\n#if defined(WS2812B_ENABLE)\r\n  ws2812b.init();\r\n#endif\r\n}\r\n\r\nvoid reboot() { hal_system_reset(); }\r\n\r\nvoid delay_ms(uint16_t count) {\r\n  // delay_1ms(count);\r\n  BL702_Delay_MS(count);\r\n}\r\n\r\nuint32_t __get_IPSR(void) {\r\n  return 0; // To shut-up CMSIS\r\n}\r\n\r\nbool isTipDisconnected() {\r\n\r\n  uint16_t tipDisconnectedThres = TipThermoModel::getTipMaxInC() - 5;\r\n  uint32_t tipTemp              = TipThermoModel::getTipInC();\r\n  return tipTemp > tipDisconnectedThres;\r\n}\r\n\r\nvoid setStatusLED(const enum StatusLED state) {\r\n#if defined(WS2812B_ENABLE)\r\n  static enum StatusLED lastState = LED_UNKNOWN;\r\n\r\n  if (lastState != state || state == LED_HEATING) {\r\n    switch (state) {\r\n    default:\r\n    case LED_UNKNOWN:\r\n    case LED_OFF:\r\n      ws2812b.led_set_color(0, 0, 0, 0);\r\n      break;\r\n    case LED_STANDBY:\r\n      ws2812b.led_set_color(0, 0, 0xFF, 0); // green\r\n      break;\r\n    case LED_HEATING: {\r\n      ws2812b.led_set_color(0, ((xTaskGetTickCount() / 4) % 192) + 64, 0, 0); // Red fade\r\n    } break;\r\n    case LED_HOT:\r\n      ws2812b.led_set_color(0, 0xFF, 0, 0); // red\r\n      break;\r\n    case LED_COOLING_STILL_HOT:\r\n      ws2812b.led_set_color(0, 0xFF, 0x20, 0x00); // Orange\r\n      break;\r\n    }\r\n    ws2812b.led_update();\r\n    lastState = state;\r\n  }\r\n#endif\r\n}\r\nvoid setBuzzer(bool on) {}\r\n\r\nuint8_t       lastTipResistance        = 0; // default to unknown\r\nconst uint8_t numTipResistanceReadings = 3;\r\nuint32_t      tipResistanceReadings[3] = {0, 0, 0};\r\nuint8_t       tipResistanceReadingSlot = 0;\r\nuint8_t       getTipResistanceX10() {\r\n  // Return tip resistance in x10 ohms\r\n  // We can measure this using the op-amp\r\n  uint8_t user_selected_tip = getUserSelectedTipResistance();\r\n  if (user_selected_tip == 0) {\r\n    return lastTipResistance; // Auto mode\r\n  }\r\n  return user_selected_tip;\r\n}\r\n\r\nuint16_t getTipThermalMass() { return 120; }\r\nuint16_t getTipInertia() { return 750; }\r\n// We want to calculate lastTipResistance\r\n// If tip is connected, and the tip is cold and the tip is not being heated\r\n// We can use the GPIO to inject a small current into the tip and measure this\r\n// The gpio is 5.1k -> diode -> tip -> gnd\r\n// Source is 3.3V-0.5V\r\n// Which is around 0.54mA this will induce:\r\n// 6 ohm tip -> 3.24mV (Real world ~= 3320)\r\n// 8 ohm tip -> 4.32mV (Real world ~= 4500)\r\n// Which is definitely measurable\r\n// Taking shortcuts here as we know we only really have to pick apart 6 and 8 ohm tips\r\n// These are reported as 60 and 75 respectively\r\nvoid performTipResistanceSampleReading() {\r\n  // 0 = read then turn on pullup, 1 = read then turn off pullup, 2 = read then turn on pullup, 3 = final read + turn off pullup\r\n  tipResistanceReadings[tipResistanceReadingSlot] = TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0));\r\n  gpio_write(TIP_RESISTANCE_SENSE, tipResistanceReadingSlot == 0);\r\n  tipResistanceReadingSlot++;\r\n}\r\nbool tipShorted = false;\r\nvoid FinishMeasureTipResistance() {\r\n\r\n  // Otherwise we now have the 4 samples;\r\n  //  _^_ order, 2 delta's, combine these\r\n\r\n  int32_t calculatedSkew = tipResistanceReadings[0] - tipResistanceReadings[2]; // If positive tip is cooling\r\n  calculatedSkew /= 2;                                                          // divide by two to get offset per time constant\r\n\r\n  int32_t reading = (((tipResistanceReadings[1] - tipResistanceReadings[0]) + calculatedSkew) // jump 1 - skew\r\n                     +                                                                        // +\r\n                     ((tipResistanceReadings[1] - tipResistanceReadings[2]) + calculatedSkew) // jump 2 - skew\r\n                     )                                                                        //\r\n                    / 2;                                                                      // Take average\r\n  // As we are only detecting three resistances; we just bin to nearest\r\n  uint8_t newRes = 0;\r\n  if (reading > 8000) {\r\n    // Let resistance be cleared to 0\r\n  } else if (reading < 500) {\r\n    tipShorted = true;\r\n  } else if (reading < 2600) {\r\n    newRes = 40;\r\n  } else if (reading < 4000) {\r\n    newRes = 62;\r\n  } else {\r\n    newRes = 80;\r\n  }\r\n  lastTipResistance = newRes;\r\n}\r\nvolatile bool       tipMeasurementOccuring = true;\r\nvolatile TickType_t nextTipMeasurement     = 100;\r\nbool                isTipShorted() { return tipShorted; }\r\nvoid                performTipMeasurementStep() {\r\n\r\n  // Wait 100ms for settle time\r\n  if (xTaskGetTickCount() < (nextTipMeasurement)) {\r\n    return;\r\n  }\r\n  nextTipMeasurement = xTaskGetTickCount() + TICKS_100MS;\r\n  if (tipResistanceReadingSlot < numTipResistanceReadings) {\r\n    performTipResistanceSampleReading();\r\n    return;\r\n  }\r\n\r\n  // We are sensing the resistance\r\n  FinishMeasureTipResistance();\r\n\r\n  tipMeasurementOccuring = false;\r\n}\r\n\r\nuint8_t preStartChecks() {\r\n  performTipMeasurementStep();\r\n  return preStartChecksDone();\r\n}\r\n// If we are still measuring the tip; or tip is shorted; prevent heating\r\nuint8_t preStartChecksDone() { return (lastTipResistance == 0 || tipResistanceReadingSlot < numTipResistanceReadings || tipMeasurementOccuring || tipShorted) ? 0 : 1; }\r\n\r\n// Return hardware unique ID if possible\r\nuint64_t getDeviceID() {\r\n  // uint32_t tmp  = 0;\r\n  // uint32_t tmp2 = 0;\r\n  // EF_Ctrl_Read_Sw_Usage(0, &tmp);\r\n  // EF_Ctrl_Read_Sw_Usage(1, &tmp2);\r\n\r\n  // return tmp | (((uint64_t)tmp2) << 32);\r\n  uint64_t tmp = 0;\r\n  EF_Ctrl_Read_Chip_ID((uint8_t *)&tmp);\r\n\r\n  return __builtin_bswap64(tmp);\r\n}\r\nauto crc32Table = CRC32Table<>();\r\n\r\nuint32_t gethash() {\r\n  static uint32_t computedHash = 0;\r\n  if (computedHash != 0) {\r\n    return computedHash;\r\n  }\r\n\r\n  uint32_t       deviceKey        = EF_Ctrl_Get_Key_Slot_w0();\r\n  const uint32_t crcInitialVector = 0xCAFEF00D;\r\n  uint8_t        crcPayload[]     = {(uint8_t)(deviceKey), (uint8_t)(deviceKey >> 8), (uint8_t)(deviceKey >> 16), (uint8_t)(deviceKey >> 24), 0, 0, 0, 0, 0, 0, 0, 0};\r\n  EF_Ctrl_Read_Chip_ID(crcPayload + sizeof(deviceKey)); // Load device key into second half\r\n\r\n  computedHash = crc32Table.computeCRC32(crcInitialVector, crcPayload, sizeof(crcPayload));\r\n  return computedHash;\r\n}\r\nuint32_t getDeviceValidation() {\r\n  // 4 byte user data burned in at factory\r\n  return EF_Ctrl_Get_Key_Slot_w1();\r\n}\r\n\r\nuint8_t getDeviceValidationStatus() {\r\n  uint32_t programmedHash = EF_Ctrl_Get_Key_Slot_w1();\r\n  uint32_t computedHash   = gethash();\r\n  return programmedHash == computedHash ? 0 : 1;\r\n}\r\n\r\nvoid showBootLogo(void) {\r\n  alignas(uint32_t) uint8_t scratch[1024];\r\n  flash_read(FLASH_LOGOADDR - 0x23000000, scratch, 1024);\r\n\r\n  BootLogo::handleShowingLogo(scratch);\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/Debug.cpp",
    "content": "/*\r\n * Debug.cpp\r\n *\r\n *  Created on: 26 Jan. 2021\r\n *      Author: Ralim\r\n */\r\n#include \"Debug.h\"\r\n#include \"FreeRTOS.h\"\r\n#include \"Pins.h\"\r\n\r\nchar                    uartOutputBuffer[uartOutputBufferLength];\r\nvolatile uint32_t       currentOutputPos = 0xFF;\r\nvolatile uint32_t       outputLength     = 0;\r\nextern volatile uint8_t pendingPWM;\r\nvoid                    log_system_state(int32_t PWMWattsx10) {\r\n  if (currentOutputPos == 0xFF) {\r\n\r\n    // Want to print a CSV log out the uart\r\n    // Tip_Temp_C,Handle_Temp_C,Output_Power_Wattx10,PWM,Tip_Raw\\r\\n\r\n    // 3+1+3+1+3+1+3+1+5+2 = 23, so sizing at 32 for now\r\n\r\n    outputLength = snprintf(uartOutputBuffer, uartOutputBufferLength, \"%lu,%u,%li,%u,%lu\\r\\n\", //\r\n                                               TipThermoModel::getTipInC(false),                                  // Tip temp in C\r\n                                               getHandleTemperature(0),                                           // Handle temp in C X10\r\n                                               PWMWattsx10,                                                       // Output Wattage\r\n                                               pendingPWM,                                                        // PWM\r\n                                               TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0), true)       // Tip temp in uV\r\n                       );\r\n\r\n    // Now print this out the uart via IRQ (DMA cant be used as oled has it)\r\n    currentOutputPos = 0;\r\n    /* enable USART1 Transmit Buffer Empty interrupt */\r\n    // usart_interrupt_enable(UART_PERIF, USART_INT_TBE);\r\n  }\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/Debug.h",
    "content": "/*\r\n * Debug.h\r\n *\r\n *  Created on: 26 Jan. 2021\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef CORE_BSP_PINE64_DEBUG_H_\r\n#define CORE_BSP_PINE64_DEBUG_H_\r\n\r\n#include \"BSP.h\"\r\n#include \"TipThermoModel.h\"\r\n#include <stdio.h>\r\n#include <string.h>\r\n\r\nconst unsigned int uartOutputBufferLength = 32;\r\nextern char        uartOutputBuffer[uartOutputBufferLength];\r\nextern \"C\" {\r\nssize_t _write(int fd, const void *ptr, size_t len);\r\nvoid    USART1_IRQHandler(void);\r\n}\r\n#endif /* CORE_BSP_PINE64_DEBUG_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/FreeRTOSConfig.h",
    "content": "#ifndef FREERTOS_CONFIG_H\n#define FREERTOS_CONFIG_H\n#include <stdint.h>\n\n#define portCHAR                                char\n#define configSUPPORT_STATIC_ALLOCATION         1\n#define configSUPPORT_DYNAMIC_ALLOCATION        1\n#define CLINT_CTRL_ADDR                         (0x02000000UL)\n#define configCLINT_BASE_ADDRESS                CLINT_CTRL_ADDR\n#define configUSE_PREEMPTION                    1\n#define configUSE_IDLE_HOOK                     0\n#define configUSE_TICK_HOOK                     0\n#define configCPU_CLOCK_HZ                      (1000000UL)\n#define configTICK_RATE_HZ                      ((TickType_t)1000)\n#define configMAX_PRIORITIES                    (7)\n#define configMINIMAL_STACK_SIZE                ((unsigned short)160) /* Only needs to be this high as some demo tasks also use this constant.  In production only the idle task would use this. */\n#define configTOTAL_HEAP_SIZE                   ((size_t)1024 * 8)\n#define configMAX_TASK_NAME_LEN                 (24)\n#define configUSE_TRACE_FACILITY                0\n#define configIDLE_SHOULD_YIELD                 0\n#define configUSE_MUTEXES                       1\n#define configQUEUE_REGISTRY_SIZE               8\n#define configCHECK_FOR_STACK_OVERFLOW          2\n#define configUSE_RECURSIVE_MUTEXES             1\n#define configUSE_MALLOC_FAILED_HOOK            1\n#define configUSE_APPLICATION_TASK_TAG          0\n#define configUSE_COUNTING_SEMAPHORES           1\n#define configGENERATE_RUN_TIME_STATS           0\n#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1\n#define configUSE_STATS_FORMATTING_FUNCTIONS    0\n#define configUSE_TICKLESS_IDLE                 0\n#define configTASK_NOTIFICATION_ARRAY_ENTRIES   2\n#define configUSE_TASK_NOTIFICATIONS            1\n#define configTICK_TYPE_WIDTH_IN_BITS           TICK_TYPE_WIDTH_32_BITS\n\n/* Co-routine definitions. */\n#define configUSE_CO_ROUTINES 0\n\n/* Software timer definitions. */\n#define configUSE_TIMERS             1\n#define configTIMER_TASK_PRIORITY    (configMAX_PRIORITIES - 1)\n#define configTIMER_QUEUE_LENGTH     8\n#define configTIMER_TASK_STACK_DEPTH (160)\n\n/* Task priorities.  Allow these to be overridden. */\n#ifndef uartPRIMARY_PRIORITY\n#define uartPRIMARY_PRIORITY (configMAX_PRIORITIES - 3)\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n/* Normal assert() semantics without relying on the provision of an assert.h\nheader file. */\nvoid vAssertCalled(void);\n\n#define configASSERT(x)                                                                                                                                                                                \\\n  if ((x) == 0)                                                                                                                                                                                        \\\n  vAssertCalled()\n\n#ifdef __cplusplus\n}\n#endif\n#if (configUSE_TICKLESS_IDLE != 0)\nvoid vApplicationSleep(uint32_t xExpectedIdleTime);\n#define portSUPPRESS_TICKS_AND_SLEEP(xExpectedIdleTime) vApplicationSleep(xExpectedIdleTime)\n#endif\n\n#define INCLUDE_vTaskPrioritySet            0\n#define INCLUDE_uxTaskPriorityGet           0\n#define INCLUDE_vTaskDelete                 1\n#define INCLUDE_vTaskSuspend                1\n#define INCLUDE_xResumeFromISR              1\n#define INCLUDE_vTaskDelayUntil             1\n#define INCLUDE_vTaskDelay                  1\n#define INCLUDE_xTaskGetSchedulerState      1\n#define INCLUDE_xTaskGetCurrentTaskHandle   1\n#define INCLUDE_uxTaskGetStackHighWaterMark 1\n#define INCLUDE_xTaskGetIdleTaskHandle      1\n#define INCLUDE_eTaskGetState               1\n#define INCLUDE_xEventGroupSetBitFromISR    1\n#define INCLUDE_xTimerPendFunctionCall      0\n#define INCLUDE_xTaskAbortDelay             0\n#define INCLUDE_xTaskGetHandle              1\n#define INCLUDE_xTaskResumeFromISR          1\n/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n\n#endif /* FREERTOS_CONFIG_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/I2C_Wrapper.cpp",
    "content": "/*\r\n * FRToSI2C.cpp\r\n *\r\n *  Created on: 14Apr.,2018\r\n *      Author: Ralim\r\n */\r\n#include \"BSP.h\"\r\n#include \"IRQ.h\"\r\n#include \"Setup.h\"\r\n#include \"bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_dma.h\"\r\nextern \"C\" {\r\n#include \"bflb_platform.h\"\r\n#include \"bl702_dma.h\"\r\n#include \"bl702_glb.h\"\r\n#include \"bl702_i2c.h\"\r\n}\r\n#include <I2C_Wrapper.hpp>\r\n\r\n// Semaphore for locking users of I2C\r\nSemaphoreHandle_t FRToSI2C::I2CSemaphore = nullptr;\r\nStaticSemaphore_t FRToSI2C::xSemaphoreBuffer;\r\n#define I2C_TIME_OUT     (uint16_t)(12000)\r\n#define I2C_NOTIFY_INDEX 1\r\n#define I2C_TX_FIFO_ADDR (0x4000A300 + 0x88)\r\n#define I2C_RX_FIFO_ADDR (0x4000A300 + 0x8C)\r\n\r\n// Used by the irq handler\r\n\r\nvolatile uint8_t     *IRQDataPointer;\r\nvolatile uint8_t      IRQDataSizeLeft;\r\nvolatile bool         IRQFailureMarker;\r\nvolatile TaskHandle_t IRQTaskWaitingHandle = NULL;\r\n/****** IRQ Handlers ******/\r\nvoid i2c_irq_tx_fifo_low() {\r\n  // Filling tx fifo\r\n  // Fifo is 32 bit, LSB sent first\r\n  // FiFo can store up to 2, 32-bit words\r\n  // So we fill it until it has no free room (or we run out of data)\r\n\r\n  while (IRQDataSizeLeft > 0 && I2C_GetTXFIFOAvailable() > 0) {\r\n    // Can put in at least 1 byte\r\n\r\n    // Build a 32-bit word from bytes\r\n    uint32_t value   = 0;\r\n    int      packing = IRQDataSizeLeft >= 4 ? 0 : 4 - IRQDataSizeLeft;\r\n    for (int i = 0; i < 4 && IRQDataSizeLeft > 0; i++) {\r\n      value >>= 8;\r\n      value |= (*IRQDataPointer) << 24; // Shift to the left, adding new data to the higher byte\r\n      IRQDataPointer++;                 // Shift to next byte\r\n      IRQDataSizeLeft--;\r\n    }\r\n    // Handle shunting remaining bytes if not a full 4 to send\r\n    for (int i = 0; i < packing; i++) {\r\n      value >>= 8;\r\n    }\r\n    // Push the new value to the fifo\r\n    *((volatile uint32_t *)I2C_TX_FIFO_ADDR) = value;\r\n  }\r\n  if (IRQDataSizeLeft == 0) {\r\n    // Disable IRQ, were done\r\n    I2C_IntMask(I2C0_ID, I2C_TX_FIFO_READY_INT, MASK);\r\n  }\r\n}\r\n\r\nvoid i2c_rx_pop_fifo() {\r\n  // Pop one word from the fifo and store it\r\n  uint32_t value = *((uint32_t *)I2C_RX_FIFO_ADDR);\r\n\r\n  for (int i = 0; i < 4 && IRQDataSizeLeft > 0; i++) {\r\n    *IRQDataPointer = value & 0xFF;\r\n    IRQDataPointer++;\r\n    IRQDataSizeLeft--;\r\n    value >>= 8;\r\n  }\r\n}\r\n\r\nvoid i2c_irq_rx_fifo_ready() {\r\n  // Draining the Rx FiFo\r\n  while (I2C_GetRXFIFOAvailable() > 0) {\r\n    i2c_rx_pop_fifo();\r\n  }\r\n\r\n  if (IRQDataSizeLeft == 0) {\r\n    // Disable IRQ, were done\r\n    I2C_IntMask(I2C0_ID, I2C_RX_FIFO_READY_INT, MASK);\r\n  }\r\n}\r\n\r\nvoid i2c_irq_done_read() {\r\n  IRQFailureMarker = false;\r\n  // If there was a non multiple of 4 bytes to be read, they are pushed to the fifo now (end of transfer interrupt)\r\n  // So we catch them here\r\n  while (I2C_GetRXFIFOAvailable() > 0) {\r\n    i2c_rx_pop_fifo();\r\n  }\r\n\r\n  // Mask IRQ's back off\r\n  FRToSI2C::CpltCallback(); // Causes the lock to be released\r\n}\r\nvoid i2c_irq_done() {\r\n  IRQFailureMarker = false;\r\n  // Mask IRQ's back off\r\n  FRToSI2C::CpltCallback(); // Causes the lock to be released\r\n}\r\nvoid i2c_irq_nack() {\r\n  IRQFailureMarker = true;\r\n  // Mask IRQ's back off\r\n  FRToSI2C::CpltCallback(); // Causes the lock to be released\r\n}\r\n\r\n/****** END IRQ Handlers ******/\r\nvoid FRToSI2C::CpltCallback() {\r\n  // This is only triggered from IRQ context\r\n  I2C_IntMask(I2C0_ID, I2C_TX_FIFO_READY_INT, MASK);\r\n  I2C_IntMask(I2C0_ID, I2C_RX_FIFO_READY_INT, MASK);\r\n  I2C_IntMask(I2C0_ID, I2C_TRANS_END_INT, MASK);\r\n  I2C_IntMask(I2C0_ID, I2C_NACK_RECV_INT, MASK);\r\n\r\n  CPU_Interrupt_Disable(I2C_IRQn); // Disable IRQ's\r\n\r\n  I2C_Disable(I2C0_ID); // Disable I2C to tidy up\r\n\r\n  // Unlock the semaphore && allow task switch if desired by RTOS\r\n  BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r\n\r\n  xSemaphoreGiveFromISR(I2CSemaphore, &xHigherPriorityTaskWoken);\r\n  xTaskNotifyIndexedFromISR(IRQTaskWaitingHandle, I2C_NOTIFY_INDEX, IRQFailureMarker ? 2 : 1, eSetValueWithOverwrite, &xHigherPriorityTaskWoken);\r\n  portYIELD_FROM_ISR(xHigherPriorityTaskWoken);\r\n}\r\n\r\nbool FRToSI2C::I2C_RegisterWrite(uint8_t address, uint8_t reg, uint8_t data) { return Mem_Write(address, reg, &data, 1); }\r\n\r\nuint8_t FRToSI2C::I2C_RegisterRead(uint8_t add, uint8_t reg) {\r\n  uint8_t temp = 0;\r\n  Mem_Read(add, reg, &temp, 1);\r\n  return temp;\r\n}\r\n\r\nbool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t read_address, uint8_t *p_buffer, uint16_t number_of_byte) {\r\n  if (!lock()) {\r\n    return false;\r\n  }\r\n  I2C_Transfer_Cfg i2cCfg = {0, DISABLE, 0, 0, 0, 0};\r\n  BL_Err_Type      err    = ERROR;\r\n  i2cCfg.slaveAddr        = DevAddress >> 1;\r\n  i2cCfg.stopEveryByte    = DISABLE;\r\n  i2cCfg.subAddr          = read_address;\r\n  i2cCfg.dataSize         = number_of_byte;\r\n  i2cCfg.data             = p_buffer;\r\n  i2cCfg.subAddrSize      = 1; // one byte address\r\n\r\n  // Store handles for IRQ\r\n  IRQDataPointer       = p_buffer;\r\n  IRQDataSizeLeft      = number_of_byte;\r\n  IRQTaskWaitingHandle = xTaskGetCurrentTaskHandle();\r\n  IRQFailureMarker     = false;\r\n\r\n  I2C_Disable(I2C0_ID);\r\n  // Setup and run\r\n  I2C_Init(I2C0_ID, I2C_READ, &i2cCfg); // Setup hardware for the I2C init header with the device address\r\n  I2C_IntMask(I2C0_ID, I2C_TRANS_END_INT, UNMASK);\r\n  I2C_IntMask(I2C0_ID, I2C_NACK_RECV_INT, UNMASK);\r\n  I2C_IntMask(I2C0_ID, I2C_RX_FIFO_READY_INT, UNMASK);\r\n  I2C_Int_Callback_Install(I2C0_ID, I2C_TRANS_END_INT, i2c_irq_done_read);\r\n  I2C_Int_Callback_Install(I2C0_ID, I2C_NACK_RECV_INT, i2c_irq_nack);\r\n  I2C_Int_Callback_Install(I2C0_ID, I2C_RX_FIFO_READY_INT, i2c_irq_rx_fifo_ready);\r\n  CPU_Interrupt_Enable(I2C_IRQn);\r\n\r\n  CPU_Interrupt_Disable(BLE_IRQn);\r\n  // Start\r\n  I2C_Enable(I2C0_ID);\r\n\r\n  // Wait for transfer in background\r\n  uint32_t result = 0;\r\n  xTaskNotifyWaitIndexed(I2C_NOTIFY_INDEX, 0xFFFFFFFF, 0xFFFFFFFF, &result, 0xFFFFFFFF);\r\n  CPU_Interrupt_Enable(BLE_IRQn);\r\n\r\n  return result == 1;\r\n}\r\n\r\nbool FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, uint8_t *p_buffer, uint16_t number_of_byte) {\r\n\r\n  if (!lock()) {\r\n    return false;\r\n  }\r\n\r\n  I2C_Transfer_Cfg i2cCfg = {0, DISABLE, 0, 0, 0, 0};\r\n  BL_Err_Type      err    = ERROR;\r\n  i2cCfg.slaveAddr        = DevAddress >> 1;\r\n  i2cCfg.stopEveryByte    = DISABLE;\r\n  i2cCfg.subAddr          = MemAddress;\r\n  i2cCfg.dataSize         = number_of_byte;\r\n  i2cCfg.data             = p_buffer;\r\n  i2cCfg.subAddrSize      = 1; // one byte address\r\n\r\n  // Store handles for IRQ\r\n  IRQDataPointer       = p_buffer;\r\n  IRQDataSizeLeft      = number_of_byte;\r\n  IRQTaskWaitingHandle = xTaskGetCurrentTaskHandle();\r\n  IRQFailureMarker     = false;\r\n\r\n  // Setup and run\r\n  I2C_Init(I2C0_ID, I2C_WRITE, &i2cCfg); // Setup hardware for the I2C init header with the device address\r\n  I2C_IntMask(I2C0_ID, I2C_TRANS_END_INT, UNMASK);\r\n  I2C_IntMask(I2C0_ID, I2C_NACK_RECV_INT, UNMASK);\r\n  I2C_IntMask(I2C0_ID, I2C_TX_FIFO_READY_INT, UNMASK);\r\n  I2C_Int_Callback_Install(I2C0_ID, I2C_TRANS_END_INT, i2c_irq_done);\r\n  I2C_Int_Callback_Install(I2C0_ID, I2C_NACK_RECV_INT, i2c_irq_nack);\r\n  I2C_Int_Callback_Install(I2C0_ID, I2C_TX_FIFO_READY_INT, i2c_irq_tx_fifo_low);\r\n  CPU_Interrupt_Enable(I2C_IRQn);\r\n\r\n  i2c_irq_tx_fifo_low();\r\n\r\n  CPU_Interrupt_Disable(BLE_IRQn); // Shut up BLE while we do the transfer\r\n  // Start\r\n  I2C_Enable(I2C0_ID);\r\n\r\n  // Wait for transfer in background\r\n  uint32_t result = 0;\r\n  xTaskNotifyWaitIndexed(I2C_NOTIFY_INDEX, 0xFFFFFFFF, 0xFFFFFFFF, &result, 0xFFFFFFFF);\r\n  CPU_Interrupt_Enable(BLE_IRQn); // Now BLE can run\r\n\r\n  return result == 1;\r\n}\r\n\r\nbool FRToSI2C::Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size) { return Mem_Write(DevAddress, pData[0], pData + 1, Size - 1); }\r\n\r\nbool FRToSI2C::probe(uint16_t DevAddress) {\r\n  uint8_t temp[1];\r\n  return Mem_Read(DevAddress, 0x00, temp, sizeof(temp));\r\n}\r\n\r\nvoid FRToSI2C::I2C_Unstick() { unstick_I2C(); }\r\n\r\nbool FRToSI2C::lock() {\r\n  if (I2CSemaphore == nullptr) {\r\n    return false;\r\n  }\r\n  return xSemaphoreTake(I2CSemaphore, TICKS_SECOND) == pdTRUE;\r\n}\r\n\r\nvoid FRToSI2C::unlock() { xSemaphoreGive(I2CSemaphore); }\r\n\r\nbool FRToSI2C::writeRegistersBulk(const uint8_t address, const I2C_REG *registers, const uint8_t registersLength) {\r\n  for (int index = 0; index < registersLength; index++) {\r\n    if (!I2C_RegisterWrite(address, registers[index].reg, registers[index].val)) {\r\n      return false;\r\n    }\r\n    if (registers[index].pause_ms) {\r\n      delay_ms(registers[index].pause_ms);\r\n    }\r\n  }\r\n  return true;\r\n}\r\n\r\nbool FRToSI2C::wakePart(uint16_t DevAddress) {\r\n  // wakepart is a special case  where only the device address is sent\r\n\r\n  if (!lock()) {\r\n    return false;\r\n  }\r\n  uint8_t          temp[1] = {0};\r\n  I2C_Transfer_Cfg i2cCfg  = {0, DISABLE, 0, 0, 0, 0};\r\n  BL_Err_Type      err     = ERROR;\r\n  i2cCfg.slaveAddr         = DevAddress >> 1;\r\n  i2cCfg.stopEveryByte     = DISABLE;\r\n  i2cCfg.subAddr           = 0;\r\n  i2cCfg.dataSize          = 1;\r\n  i2cCfg.data              = temp;\r\n  i2cCfg.subAddrSize       = 0;\r\n\r\n  err      = I2C_MasterReceiveBlocking(I2C0_ID, &i2cCfg);\r\n  bool res = err == SUCCESS;\r\n  if (!res) {\r\n    I2C_Unstick();\r\n  }\r\n  unlock();\r\n  return res;\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/IRQ.cpp",
    "content": "/*\r\n * IRQ.c\r\n *\r\n *  Created on: 30 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"IRQ.h\"\r\n#include \"Pins.h\"\r\n#include \"configuration.h\"\r\n#include \"history.hpp\"\r\n\r\nextern \"C\" {\r\n#include \"bflb_platform.h\"\r\n#include \"bl702_adc.h\"\r\n#include \"bl702_glb.h\"\r\n#include \"bl702_pwm.h\"\r\n#include \"bl702_timer.h\"\r\n}\r\nvoid start_PWM_output(void);\r\n\r\n#define ADC_Filter_Smooth 4 /* This basically smooths over one PWM cycle / set of readings */\r\nhistory<uint16_t, ADC_Filter_Smooth> ADC_Vin;\r\nhistory<uint16_t, ADC_Filter_Smooth> ADC_Temp;\r\nhistory<uint16_t, ADC_Filter_Smooth> ADC_Tip;\r\n\r\nvoid read_adc_fifo(void) {\r\n  // Read out all entries in the fifo\r\n  uint8_t pending_readings = ADC_Get_FIFO_Count();\r\n\r\n  // There _should_ always be 8 readings here. If there are not, it means that the adc didnt start when we wanted and timing slipped\r\n  // So if there isn't 8 readings, we throw them out\r\n  if (pending_readings != 8) {\r\n    MSG((char *)\"Discarding out of sync adc %d\\r\\n\", pending_readings);\r\n  } else {\r\n    while (pending_readings) {\r\n      pending_readings--;\r\n      uint32_t        raw_reading = ADC_Read_FIFO();\r\n      ADC_Result_Type parsed      = {0, 0, 0};\r\n      ADC_Parse_Result(&raw_reading, 1, &parsed);\r\n      // Rollover prevention\r\n      if (parsed.value > ((1 << 14) - 1)) {\r\n        parsed.value = ((1 << 14) - 1);\r\n      }\r\n\r\n      switch (parsed.posChan) {\r\n      case TMP36_ADC_CHANNEL:\r\n        ADC_Temp.update(parsed.value << 2);\r\n        break;\r\n      case TIP_TEMP_ADC_CHANNEL: {\r\n        ADC_Tip.update(parsed.value << 2);\r\n      } break;\r\n      case VIN_ADC_CHANNEL:\r\n        ADC_Vin.update(parsed.value << 2);\r\n        break;\r\n      default:\r\n        break;\r\n      }\r\n    }\r\n  }\r\n  // unblock the PID controller thread\r\n  if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {\r\n    BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r\n    if (pidTaskNotification) {\r\n      vTaskNotifyGiveFromISR(pidTaskNotification, &xHigherPriorityTaskWoken);\r\n      portYIELD_FROM_ISR(xHigherPriorityTaskWoken);\r\n    }\r\n  }\r\n}\r\n\r\nvolatile bool inFastPWMMode = false;\r\n\r\nstatic void switchToFastPWM(void);\r\nstatic void switchToSlowPWM(void);\r\n\r\nvolatile uint16_t PWMSafetyTimer          = 0;\r\nvolatile uint8_t  pendingPWM              = 0;\r\nvolatile bool     pendingNextPeriodIsFast = false;\r\n\r\nvoid timer0_comp0_callback(void) {\r\n  // Trigged at end of output cycle; turn off the tip PWM\r\n  PWM_Channel_Disable(PWM_Channel);\r\n  TIMER_ClearIntStatus(TIMER_CH0, TIMER_COMP_ID_0);\r\n}\r\n\r\n// Timer 0 is used to co-ordinate the ADC and the output PWM\r\nvoid timer0_comp1_callback(void) {\r\n  ADC_FIFO_Clear();\r\n  ADC_Start();\r\n  TIMER_ClearIntStatus(TIMER_CH0, TIMER_COMP_ID_1);\r\n}\r\nvoid timer0_comp2_callback(void) {\r\n  // Triggered at end of timer cycle; re-start the tip driver\r\n  ADC_Stop();\r\n  TIMER_Disable(TIMER_CH0);\r\n  // Read the ADC data _now_. So that if things have gone out of sync, we know about it\r\n  read_adc_fifo();\r\n\r\n  if (PWMSafetyTimer) {\r\n    PWMSafetyTimer--;\r\n    if (pendingNextPeriodIsFast != inFastPWMMode) {\r\n      if (pendingNextPeriodIsFast) {\r\n        switchToFastPWM();\r\n      } else {\r\n        switchToSlowPWM();\r\n      }\r\n    }\r\n    // Update trigger for the end point of the PWM cycle\r\n    if (pendingPWM > 0) {\r\n      TIMER_SetCompValue(TIMER_CH0, TIMER_COMP_ID_0, pendingPWM - 1);\r\n      // Turn on output\r\n      PWM_Channel_Enable(PWM_Channel);\r\n    } else {\r\n      PWM_Channel_Disable(PWM_Channel);\r\n    }\r\n  } else {\r\n    PWM_Channel_Disable(PWM_Channel);\r\n  }\r\n  TIMER_Enable(TIMER_CH0);\r\n  TIMER_ClearIntStatus(TIMER_CH0, TIMER_COMP_ID_2);\r\n}\r\n\r\nvoid switchToFastPWM(void) {\r\n  inFastPWMMode    = true;\r\n  holdoffTicks     = 20;\r\n  tempMeasureTicks = 10;\r\n  totalPWM         = powerPWM + tempMeasureTicks + holdoffTicks;\r\n\r\n  TIMER_SetCompValue(TIMER_CH0, TIMER_COMP_ID_1, powerPWM + holdoffTicks);\r\n\r\n  TIMER_SetCompValue(TIMER_CH0, TIMER_COMP_ID_2, totalPWM);\r\n  // Set divider to 10 ~= 10.5Hz\r\n  uint32_t tmpVal = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, TIMER_TCDR2, 10);\r\n\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCDR, tmpVal);\r\n}\r\n\r\nvoid switchToSlowPWM(void) {\r\n  // 5Hz\r\n  inFastPWMMode    = false;\r\n  holdoffTicks     = 10;\r\n  tempMeasureTicks = 5;\r\n  totalPWM         = powerPWM + tempMeasureTicks + holdoffTicks;\r\n\r\n  // Adjust ADC\r\n  TIMER_SetCompValue(TIMER_CH0, TIMER_COMP_ID_1, powerPWM + holdoffTicks);\r\n\r\n  TIMER_SetCompValue(TIMER_CH0, TIMER_COMP_ID_2, totalPWM);\r\n  // Set divider for ~ 5Hz\r\n\r\n  uint32_t tmpVal = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, TIMER_TCDR2, 20);\r\n\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCDR, tmpVal);\r\n}\r\n\r\nvoid setTipPWM(const uint8_t pulse, const bool shouldUseFastModePWM) {\r\n  PWMSafetyTimer = 10;\r\n  // This is decremented in the handler for PWM so that the tip pwm is\r\n  // disabled if the PID task is not scheduled often enough.\r\n  pendingPWM              = pulse;\r\n  pendingNextPeriodIsFast = shouldUseFastModePWM;\r\n}\r\nextern osThreadId POWTaskHandle;\r\n\r\nvoid GPIO_IRQHandler(void) {\r\n  if (SET == GLB_Get_GPIO_IntStatus(FUSB302_IRQ_GLB_Pin)) {\r\n    GLB_GPIO_IntClear(FUSB302_IRQ_GLB_Pin, SET);\r\n#ifdef POW_PD\r\n    if (POWTaskHandle != nullptr) {\r\n      BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r\n      xTaskNotifyFromISR(POWTaskHandle, 1, eSetBits, &xHigherPriorityTaskWoken);\r\n      /* Force a context switch if xHigherPriorityTaskWoken is now set to pdTRUE.\r\n      The macro used to do this is dependent on the port and may be called\r\n      portEND_SWITCHING_ISR. */\r\n      portYIELD_FROM_ISR(xHigherPriorityTaskWoken);\r\n    }\r\n#endif\r\n\r\n    /* timeout check */\r\n    uint32_t timeOut = 32;\r\n\r\n    do {\r\n      timeOut--;\r\n    } while ((SET == GLB_Get_GPIO_IntStatus(FUSB302_IRQ_GLB_Pin)) && timeOut);\r\n\r\n    if (!timeOut) {\r\n      // MSG(\"WARNING: Clear GPIO interrupt status fail.\\r\\n\");\r\n    }\r\n\r\n    GLB_GPIO_IntClear(FUSB302_IRQ_GLB_Pin, RESET);\r\n  }\r\n}\r\n\r\nbool getFUS302IRQLow() {\r\n  // Return true if the IRQ line is still held low\r\n  return !gpio_read(FUSB302_IRQ_Pin);\r\n}\r\n\r\nuint16_t getADCHandleTemp(uint8_t sample) { return ADC_Temp.average(); }\r\n\r\nuint16_t getADCVin(uint8_t sample) { return ADC_Vin.average(); }\r\n\r\n// Returns the current raw tip reading after any cleanup filtering\r\n// For Pinecil V2 we dont do any rolling filtering other than just averaging all 4 readings in the adc snapshot\r\nuint16_t getTipRawTemp(uint8_t sample) { return ADC_Tip.average() >> 1; }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/IRQ.h",
    "content": "/*\r\n * Irqs.h\r\n *\r\n *  Created on: 30 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_PINE64_IRQ_H_\r\n#define BSP_PINE64_IRQ_H_\r\n\r\n#include \"BSP.h\"\r\n#include \"I2C_Wrapper.hpp\"\r\n#include \"Setup.h\"\r\n#include \"main.hpp\"\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\nvoid timer0_comp0_callback(void);\r\nvoid timer0_comp1_callback(void);\r\nvoid timer0_comp2_callback(void);\r\nvoid GPIO_IRQHandler(void);\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n#endif /* BSP_PINE64_IRQ_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/MemMang/heap_5.c",
    "content": "/*\r\n * FreeRTOS Kernel V10.4.1\r\n * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n * this software and associated documentation files (the \"Software\"), to deal in\r\n * the Software without restriction, including without limitation the rights to\r\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n * the Software, and to permit persons to whom the Software is furnished to do so,\r\n * subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n * https://www.FreeRTOS.org\r\n * https://github.com/FreeRTOS\r\n *\r\n * 1 tab == 4 spaces!\r\n */\r\n\r\n/*\r\n * A sample implementation of pvPortMalloc() that allows the heap to be defined\r\n * across multiple non-contigous blocks and combines (coalescences) adjacent\r\n * memory blocks as they are freed.\r\n *\r\n * See heap_1.c, heap_2.c, heap_3.c and heap_4.c for alternative\r\n * implementations, and the memory management pages of https://www.FreeRTOS.org\r\n * for more information.\r\n *\r\n * Usage notes:\r\n *\r\n * vPortDefineHeapRegions() ***must*** be called before pvPortMalloc().\r\n * pvPortMalloc() will be called if any task objects (tasks, queues, event\r\n * groups, etc.) are created, therefore vPortDefineHeapRegions() ***must*** be\r\n * called before any other objects are defined.\r\n *\r\n * vPortDefineHeapRegions() takes a single parameter.  The parameter is an array\r\n * of HeapRegion_t structures.  HeapRegion_t is defined in portable.h as\r\n *\r\n * typedef struct HeapRegion\r\n * {\r\n *\tuint8_t *pucStartAddress; << Start address of a block of memory that will be part of the heap.\r\n *\tsize_t xSizeInBytes;\t  << Size of the block of memory.\r\n * } HeapRegion_t;\r\n *\r\n * The array is terminated using a NULL zero sized region definition, and the\r\n * memory regions defined in the array ***must*** appear in address order from\r\n * low address to high address.  So the following is a valid example of how\r\n * to use the function.\r\n *\r\n * HeapRegion_t xHeapRegions[] =\r\n * {\r\n *  { ( uint8_t * ) 0x80000000UL, 0x10000 }, << Defines a block of 0x10000 bytes starting at address 0x80000000\r\n *  { ( uint8_t * ) 0x90000000UL, 0xa0000 }, << Defines a block of 0xa0000 bytes starting at address of 0x90000000\r\n *  { NULL, 0 }                << Terminates the array.\r\n * };\r\n *\r\n * vPortDefineHeapRegions( xHeapRegions ); << Pass the array into vPortDefineHeapRegions().\r\n *\r\n * Note 0x80000000 is the lower address so appears in the array first.\r\n *\r\n */\r\n#include <stdlib.h>\r\n\r\n/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining\r\n * all the API functions to use the MPU wrappers.  That should only be done when\r\n * task.h is included from an application file. */\r\n#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE\r\n\r\n#include \"FreeRTOS.h\"\r\n#include \"task.h\"\r\n\r\n#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE\r\n\r\n#if (configSUPPORT_DYNAMIC_ALLOCATION == 0)\r\n#error This file must not be used if configSUPPORT_DYNAMIC_ALLOCATION is 0\r\n#endif\r\n\r\n/* Block sizes must not get too small. */\r\n#define heapMINIMUM_BLOCK_SIZE ((size_t)(xHeapStructSize << 1))\r\n\r\n/* Assumes 8bit bytes! */\r\n#define heapBITS_PER_BYTE ((size_t)8)\r\n\r\n/* Define the linked list structure.  This is used to link free blocks in order\r\n * of their memory address. */\r\ntypedef struct A_BLOCK_LINK {\r\n  struct A_BLOCK_LINK *pxNextFreeBlock; /*<< The next free block in the list. */\r\n  size_t               xBlockSize;      /*<< The size of the free block. */\r\n} BlockLink_t;\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n/*\r\n * Inserts a block of memory that is being freed into the correct position in\r\n * the list of free memory blocks.  The block being freed will be merged with\r\n * the block in front it and/or the block behind it if the memory blocks are\r\n * adjacent to each other.\r\n */\r\nstatic void prvInsertBlockIntoFreeList(BlockLink_t *pxBlockToInsert);\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n/* The size of the structure placed at the beginning of each allocated memory\r\n * block must by correctly byte aligned. */\r\nstatic const size_t xHeapStructSize = (sizeof(BlockLink_t) + ((size_t)(portBYTE_ALIGNMENT - 1))) & ~((size_t)portBYTE_ALIGNMENT_MASK);\r\n\r\n/* Create a couple of list links to mark the start and end of the list. */\r\nstatic BlockLink_t xStart, *pxEnd = NULL;\r\n\r\n/* Keeps track of the number of calls to allocate and free memory as well as the\r\n * number of free bytes remaining, but says nothing about fragmentation. */\r\nstatic size_t xFreeBytesRemaining            = 0U;\r\nstatic size_t xMinimumEverFreeBytesRemaining = 0U;\r\nstatic size_t xNumberOfSuccessfulAllocations = 0;\r\nstatic size_t xNumberOfSuccessfulFrees       = 0;\r\n\r\n/* Gets set to the top bit of an size_t type.  When this bit in the xBlockSize\r\n * member of an BlockLink_t structure is set then the block belongs to the\r\n * application.  When the bit is free the block is still part of the free heap\r\n * space. */\r\nstatic size_t xBlockAllocatedBit = 0;\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid *pvPortMalloc(size_t xWantedSize) {\r\n  BlockLink_t *pxBlock, *pxPreviousBlock, *pxNewBlockLink;\r\n  void        *pvReturn = NULL;\r\n\r\n  /* The heap must be initialised before the first call to\r\n   * prvPortMalloc(). */\r\n  configASSERT(pxEnd);\r\n\r\n  vTaskSuspendAll();\r\n  {\r\n    /* Check the requested block size is not so large that the top bit is\r\n     * set.  The top bit of the block size member of the BlockLink_t structure\r\n     * is used to determine who owns the block - the application or the\r\n     * kernel, so it must be free. */\r\n    if ((xWantedSize & xBlockAllocatedBit) == 0) {\r\n      /* The wanted size is increased so it can contain a BlockLink_t\r\n       * structure in addition to the requested amount of bytes. */\r\n      if (xWantedSize > 0) {\r\n        xWantedSize += xHeapStructSize;\r\n\r\n        /* Ensure that blocks are always aligned to the required number\r\n         * of bytes. */\r\n        if ((xWantedSize & portBYTE_ALIGNMENT_MASK) != 0x00) {\r\n          /* Byte alignment required. */\r\n          xWantedSize += (portBYTE_ALIGNMENT - (xWantedSize & portBYTE_ALIGNMENT_MASK));\r\n        } else {\r\n          mtCOVERAGE_TEST_MARKER();\r\n        }\r\n      } else {\r\n        mtCOVERAGE_TEST_MARKER();\r\n      }\r\n\r\n      if ((xWantedSize > 0) && (xWantedSize <= xFreeBytesRemaining)) {\r\n        /* Traverse the list from the start\t(lowest address) block until\r\n         * one\tof adequate size is found. */\r\n        pxPreviousBlock = &xStart;\r\n        pxBlock         = xStart.pxNextFreeBlock;\r\n\r\n        while ((pxBlock->xBlockSize < xWantedSize) && (pxBlock->pxNextFreeBlock != NULL)) {\r\n          pxPreviousBlock = pxBlock;\r\n          pxBlock         = pxBlock->pxNextFreeBlock;\r\n        }\r\n\r\n        /* If the end marker was reached then a block of adequate size\r\n         * was\tnot found. */\r\n        if (pxBlock != pxEnd) {\r\n          /* Return the memory space pointed to - jumping over the\r\n           * BlockLink_t structure at its start. */\r\n          pvReturn = (void *)(((uint8_t *)pxPreviousBlock->pxNextFreeBlock) + xHeapStructSize);\r\n\r\n          /* This block is being returned for use so must be taken out\r\n           * of the list of free blocks. */\r\n          pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock;\r\n\r\n          /* If the block is larger than required it can be split into\r\n           * two. */\r\n          if ((pxBlock->xBlockSize - xWantedSize) > heapMINIMUM_BLOCK_SIZE) {\r\n            /* This block is to be split into two.  Create a new\r\n             * block following the number of bytes requested. The void\r\n             * cast is used to prevent byte alignment warnings from the\r\n             * compiler. */\r\n            pxNewBlockLink = (void *)(((uint8_t *)pxBlock) + xWantedSize);\r\n\r\n            /* Calculate the sizes of two blocks split from the\r\n             * single block. */\r\n            pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - xWantedSize;\r\n            pxBlock->xBlockSize        = xWantedSize;\r\n\r\n            /* Insert the new block into the list of free blocks. */\r\n            prvInsertBlockIntoFreeList((pxNewBlockLink));\r\n          } else {\r\n            mtCOVERAGE_TEST_MARKER();\r\n          }\r\n\r\n          xFreeBytesRemaining -= pxBlock->xBlockSize;\r\n\r\n          if (xFreeBytesRemaining < xMinimumEverFreeBytesRemaining) {\r\n            xMinimumEverFreeBytesRemaining = xFreeBytesRemaining;\r\n          } else {\r\n            mtCOVERAGE_TEST_MARKER();\r\n          }\r\n\r\n          /* The block is being returned - it is allocated and owned\r\n           * by the application and has no \"next\" block. */\r\n          pxBlock->xBlockSize |= xBlockAllocatedBit;\r\n          pxBlock->pxNextFreeBlock = NULL;\r\n          xNumberOfSuccessfulAllocations++;\r\n        } else {\r\n          mtCOVERAGE_TEST_MARKER();\r\n        }\r\n      } else {\r\n        mtCOVERAGE_TEST_MARKER();\r\n      }\r\n    } else {\r\n      mtCOVERAGE_TEST_MARKER();\r\n    }\r\n\r\n    traceMALLOC(pvReturn, xWantedSize);\r\n  }\r\n  (void)xTaskResumeAll();\r\n\r\n#if (configUSE_MALLOC_FAILED_HOOK == 1)\r\n  {\r\n    if (pvReturn == NULL) {\r\n      extern void vApplicationMallocFailedHook(void);\r\n      vApplicationMallocFailedHook();\r\n    } else {\r\n      mtCOVERAGE_TEST_MARKER();\r\n    }\r\n  }\r\n#endif /* if ( configUSE_MALLOC_FAILED_HOOK == 1 ) */\r\n\r\n  return pvReturn;\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid vPortFree(void *pv) {\r\n  uint8_t     *puc = (uint8_t *)pv;\r\n  BlockLink_t *pxLink;\r\n\r\n  if (pv != NULL) {\r\n    /* The memory being freed will have an BlockLink_t structure immediately\r\n     * before it. */\r\n    puc -= xHeapStructSize;\r\n\r\n    /* This casting is to keep the compiler from issuing warnings. */\r\n    pxLink = (void *)puc;\r\n\r\n    /* Check the block is actually allocated. */\r\n    configASSERT((pxLink->xBlockSize & xBlockAllocatedBit) != 0);\r\n    configASSERT(pxLink->pxNextFreeBlock == NULL);\r\n\r\n    if ((pxLink->xBlockSize & xBlockAllocatedBit) != 0) {\r\n      if (pxLink->pxNextFreeBlock == NULL) {\r\n        /* The block is being returned to the heap - it is no longer\r\n         * allocated. */\r\n        pxLink->xBlockSize &= ~xBlockAllocatedBit;\r\n\r\n        vTaskSuspendAll();\r\n        {\r\n          /* Add this block to the list of free blocks. */\r\n          xFreeBytesRemaining += pxLink->xBlockSize;\r\n          traceFREE(pv, pxLink->xBlockSize);\r\n          prvInsertBlockIntoFreeList(((BlockLink_t *)pxLink));\r\n          xNumberOfSuccessfulFrees++;\r\n        }\r\n        (void)xTaskResumeAll();\r\n      } else {\r\n        mtCOVERAGE_TEST_MARKER();\r\n      }\r\n    } else {\r\n      mtCOVERAGE_TEST_MARKER();\r\n    }\r\n  }\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nsize_t xPortGetFreeHeapSize(void) { return xFreeBytesRemaining; }\r\n/*-----------------------------------------------------------*/\r\n\r\nsize_t xPortGetMinimumEverFreeHeapSize(void) { return xMinimumEverFreeBytesRemaining; }\r\n/*-----------------------------------------------------------*/\r\n\r\nstatic void prvInsertBlockIntoFreeList(BlockLink_t *pxBlockToInsert) {\r\n  BlockLink_t *pxIterator;\r\n  uint8_t     *puc;\r\n\r\n  /* Iterate through the list until a block is found that has a higher address\r\n   * than the block being inserted. */\r\n  for (pxIterator = &xStart; pxIterator->pxNextFreeBlock < pxBlockToInsert; pxIterator = pxIterator->pxNextFreeBlock) {\r\n    /* Nothing to do here, just iterate to the right position. */\r\n  }\r\n\r\n  /* Do the block being inserted, and the block it is being inserted after\r\n   * make a contiguous block of memory? */\r\n  puc = (uint8_t *)pxIterator;\r\n\r\n  if ((puc + pxIterator->xBlockSize) == (uint8_t *)pxBlockToInsert) {\r\n    pxIterator->xBlockSize += pxBlockToInsert->xBlockSize;\r\n    pxBlockToInsert = pxIterator;\r\n  } else {\r\n    mtCOVERAGE_TEST_MARKER();\r\n  }\r\n\r\n  /* Do the block being inserted, and the block it is being inserted before\r\n   * make a contiguous block of memory? */\r\n  puc = (uint8_t *)pxBlockToInsert;\r\n\r\n  if ((puc + pxBlockToInsert->xBlockSize) == (uint8_t *)pxIterator->pxNextFreeBlock) {\r\n    if (pxIterator->pxNextFreeBlock != pxEnd) {\r\n      /* Form one big block from the two blocks. */\r\n      pxBlockToInsert->xBlockSize += pxIterator->pxNextFreeBlock->xBlockSize;\r\n      pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock->pxNextFreeBlock;\r\n    } else {\r\n      pxBlockToInsert->pxNextFreeBlock = pxEnd;\r\n    }\r\n  } else {\r\n    pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock;\r\n  }\r\n\r\n  /* If the block being inserted plugged a gab, so was merged with the block\r\n   * before and the block after, then it's pxNextFreeBlock pointer will have\r\n   * already been set, and should not be set here as that would make it point\r\n   * to itself. */\r\n  if (pxIterator != pxBlockToInsert) {\r\n    pxIterator->pxNextFreeBlock = pxBlockToInsert;\r\n  } else {\r\n    mtCOVERAGE_TEST_MARKER();\r\n  }\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid vPortDefineHeapRegions(const HeapRegion_t *const pxHeapRegions) {\r\n  BlockLink_t        *pxFirstFreeBlockInRegion = NULL, *pxPreviousFreeBlock;\r\n  size_t              xAlignedHeap;\r\n  size_t              xTotalRegionSize, xTotalHeapSize = 0;\r\n  BaseType_t          xDefinedRegions = 0;\r\n  size_t              xAddress;\r\n  const HeapRegion_t *pxHeapRegion;\r\n\r\n  /* Can only call once! */\r\n  configASSERT(pxEnd == NULL);\r\n\r\n  pxHeapRegion = &(pxHeapRegions[xDefinedRegions]);\r\n\r\n  while (pxHeapRegion->xSizeInBytes > 0) {\r\n    xTotalRegionSize = pxHeapRegion->xSizeInBytes;\r\n\r\n    /* Ensure the heap region starts on a correctly aligned boundary. */\r\n    xAddress = (size_t)pxHeapRegion->pucStartAddress;\r\n\r\n    if ((xAddress & portBYTE_ALIGNMENT_MASK) != 0) {\r\n      xAddress += (portBYTE_ALIGNMENT - 1);\r\n      xAddress &= ~portBYTE_ALIGNMENT_MASK;\r\n\r\n      /* Adjust the size for the bytes lost to alignment. */\r\n      xTotalRegionSize -= xAddress - (size_t)pxHeapRegion->pucStartAddress;\r\n    }\r\n\r\n    xAlignedHeap = xAddress;\r\n\r\n    /* Set xStart if it has not already been set. */\r\n    if (xDefinedRegions == 0) {\r\n      /* xStart is used to hold a pointer to the first item in the list of\r\n       *  free blocks.  The void cast is used to prevent compiler warnings. */\r\n      xStart.pxNextFreeBlock = (BlockLink_t *)xAlignedHeap;\r\n      xStart.xBlockSize      = (size_t)0;\r\n    } else {\r\n      /* Should only get here if one region has already been added to the\r\n       * heap. */\r\n      configASSERT(pxEnd != NULL);\r\n\r\n      /* Check blocks are passed in with increasing start addresses. */\r\n      configASSERT(xAddress > (size_t)pxEnd);\r\n    }\r\n\r\n    /* Remember the location of the end marker in the previous region, if\r\n     * any. */\r\n    pxPreviousFreeBlock = pxEnd;\r\n\r\n    /* pxEnd is used to mark the end of the list of free blocks and is\r\n     * inserted at the end of the region space. */\r\n    xAddress = xAlignedHeap + xTotalRegionSize;\r\n    xAddress -= xHeapStructSize;\r\n    xAddress &= ~portBYTE_ALIGNMENT_MASK;\r\n\r\n    pxEnd                  = (BlockLink_t *)xAddress;\r\n    pxEnd->xBlockSize      = 0;\r\n    pxEnd->pxNextFreeBlock = NULL;\r\n\r\n    /* To start with there is a single free block in this region that is\r\n     * sized to take up the entire heap region minus the space taken by the\r\n     * free block structure. */\r\n    pxFirstFreeBlockInRegion                  = (BlockLink_t *)xAlignedHeap;\r\n    pxFirstFreeBlockInRegion->xBlockSize      = xAddress - (size_t)pxFirstFreeBlockInRegion;\r\n    pxFirstFreeBlockInRegion->pxNextFreeBlock = pxEnd;\r\n\r\n    /* If this is not the first region that makes up the entire heap space\r\n     * then link the previous region to this region. */\r\n    if (pxPreviousFreeBlock != NULL) {\r\n      pxPreviousFreeBlock->pxNextFreeBlock = pxFirstFreeBlockInRegion;\r\n    }\r\n\r\n    xTotalHeapSize += pxFirstFreeBlockInRegion->xBlockSize;\r\n\r\n    /* Move onto the next HeapRegion_t structure. */\r\n    xDefinedRegions++;\r\n    pxHeapRegion = &(pxHeapRegions[xDefinedRegions]);\r\n  }\r\n\r\n  xMinimumEverFreeBytesRemaining = xTotalHeapSize;\r\n  xFreeBytesRemaining            = xTotalHeapSize;\r\n\r\n  /* Check something was actually defined before it is accessed. */\r\n  configASSERT(xTotalHeapSize);\r\n\r\n  /* Work out the position of the top bit in a size_t variable. */\r\n  xBlockAllocatedBit = ((size_t)1) << ((sizeof(size_t) * heapBITS_PER_BYTE) - 1);\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid vPortGetHeapStats(HeapStats_t *pxHeapStats) {\r\n  BlockLink_t *pxBlock;\r\n  size_t       xBlocks = 0, xMaxSize = 0, xMinSize = portMAX_DELAY; /* portMAX_DELAY used as a portable way of getting the maximum value. */\r\n\r\n  vTaskSuspendAll();\r\n  {\r\n    pxBlock = xStart.pxNextFreeBlock;\r\n\r\n    /* pxBlock will be NULL if the heap has not been initialised.  The heap\r\n     * is initialised automatically when the first allocation is made. */\r\n    if (pxBlock != NULL) {\r\n      do {\r\n        /* Increment the number of blocks and record the largest block seen\r\n         * so far. */\r\n        xBlocks++;\r\n\r\n        if (pxBlock->xBlockSize > xMaxSize) {\r\n          xMaxSize = pxBlock->xBlockSize;\r\n        }\r\n\r\n        /* Heap five will have a zero sized block at the end of each\r\n         * each region - the block is only used to link to the next\r\n         * heap region so it not a real block. */\r\n        if (pxBlock->xBlockSize != 0) {\r\n          if (pxBlock->xBlockSize < xMinSize) {\r\n            xMinSize = pxBlock->xBlockSize;\r\n          }\r\n        }\r\n\r\n        /* Move to the next block in the chain until the last block is\r\n         * reached. */\r\n        pxBlock = pxBlock->pxNextFreeBlock;\r\n      } while (pxBlock != pxEnd);\r\n    }\r\n  }\r\n  (void)xTaskResumeAll();\r\n\r\n  pxHeapStats->xSizeOfLargestFreeBlockInBytes  = xMaxSize;\r\n  pxHeapStats->xSizeOfSmallestFreeBlockInBytes = xMinSize;\r\n  pxHeapStats->xNumberOfFreeBlocks             = xBlocks;\r\n\r\n  taskENTER_CRITICAL();\r\n  {\r\n    pxHeapStats->xAvailableHeapSpaceInBytes     = xFreeBytesRemaining;\r\n    pxHeapStats->xNumberOfSuccessfulAllocations = xNumberOfSuccessfulAllocations;\r\n    pxHeapStats->xNumberOfSuccessfulFrees       = xNumberOfSuccessfulFrees;\r\n    pxHeapStats->xMinimumEverFreeBytesRemaining = xMinimumEverFreeBytesRemaining;\r\n  }\r\n  taskEXIT_CRITICAL();\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/NOTES.md",
    "content": "# Notes on RISC-V\n\n## Pinmap\n\n| Pin Number | Name | Function         | Notes       |\n| ---------- | ---- | ---------------- | ----------- |\n| 17         | PB2  | BOOT2            | Pulldown    |\n| 32         |      | IMU INT 1        | N/A         |\n| 30         |      | IMU INT 2        | N/A         |\n|            | PA4  | Handle Temp      | ADC Input ? |\n|            | PA1  | Tip Temp         | ADC Input ? |\n|            | PB1  | B Button         | Active High |\n|            | PB0  | A Button         | Active High |\n|            | PA11 | USB D-           | -           |\n|            | PA12 | USB D+           | -           |\n|            | PA6  | Tip PWM Out      | -  |\n|            | PA0  | Input DC V Sense | ADC Input ? |\n|            | PA9  | OLED Reset       |             |\n|            | PB7  | SDA              | I2C0_SDA    |\n|            | PB6  | SCL              | I2C0_SCL    |\n\n## ADC Configuration\n\nFor now running in matching mode for TS100\n\n- X channels DMA in background\n- Sample tip using \"Intereted\" channels using TIMER 0,1,3 TRGO or timer0,1,2 channels\n- Using just 12 bit mode for now and move to hardware oversampling later\n- use DMA for normal samples and 4x16 bit regs for tip temp\n- It has dual ADC's so run them in pair mode\n\n## Timers\n\n### Timer 2\n\nTimer 2 CH0 is tip drive PWM out.\nThis is fixed at 50% duty cycle and used via the cap to turn on the heater tip.\nThis should toggle relatively quickly.\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/Pins.h",
    "content": "/*\r\n * Pins.h\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_PINE64_PINS_H_\r\n#define BSP_PINE64_PINS_H_\r\n#include \"bl702_adc.h\"\r\n#include \"bl702_pwm.h\"\r\n#include \"hal_gpio.h\"\r\n\r\n#define KEY_B_Pin            GPIO_PIN_28\r\n#define TMP36_INPUT_Pin      GPIO_PIN_20\r\n#define TMP36_ADC_CHANNEL    ADC_CHAN10\r\n#define TIP_TEMP_Pin         GPIO_PIN_19\r\n#define TIP_TEMP_ADC_CHANNEL ADC_CHAN9\r\n\r\n#define TIP_RESISTANCE_SENSE GPIO_PIN_24\r\n#define VIN_Pin              GPIO_PIN_18\r\n#define VIN_ADC_CHANNEL      ADC_CHAN8\r\n#define OLED_RESET_Pin       GPIO_PIN_3\r\n#define KEY_A_Pin            GPIO_PIN_25\r\n#define PWM_Out_Pin          GPIO_PIN_21\r\n#define PWM_Channel          PWM_CH1\r\n#define SCL_Pin              GPIO_PIN_11\r\n#define SDA_Pin              GPIO_PIN_10\r\n\r\n#define USB_DM_Pin    GPIO_PIN_8\r\n#define QC_DP_LOW_Pin GPIO_PIN_5\r\n\r\n// LOW = low resistance, HIGH = high resistance\r\n#define QC_DM_LOW_Pin  GPIO_PIN_4\r\n#define QC_DM_HIGH_Pin GPIO_PIN_6\r\n\r\n#define FUSB302_IRQ_Pin     GPIO_PIN_16\r\n#define FUSB302_IRQ_GLB_Pin GLB_GPIO_PIN_16\r\n\r\n// uart\r\n#define UART_TX_Pin GPIO_PIN_22\r\n#define UART_RX_Pin GPIO_PIN_23\r\n\r\n#if defined(WS2812B_ENABLE)\r\n// WS2812B mod using TP10\r\n#define WS2812B_Pin GPIO_PIN_12\r\n// WS2812B mod using TP9 is doable too, but harder to reach. Thanks @t3chguy\r\n//#define WS2812B_Pin GPIO_PIN_14\r\n#endif\r\n\r\n#endif /* BSP_PINE64_PINS_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/Power.cpp",
    "content": "#include \"BSP.h\"\n#include \"BSP_Power.h\"\n#include \"Pins.h\"\n#include \"QC3.h\"\n#include \"Settings.h\"\n#include \"USBPD.h\"\n#include \"configuration.h\"\n\nvoid power_check() {\n#ifdef POW_PD\n  // Cant start QC until either PD works or fails\n  if (!USBPowerDelivery::negotiationComplete()) {\n    return;\n  }\n  if (USBPowerDelivery::negotiationHasWorked()) {\n    return; // We are using PD\n  }\n#endif\n#ifdef POW_QC\n  QC_resync();\n#endif\n}\n\nbool getIsPoweredByDCIN() {\n#ifdef POW_PD\n  if (!USBPowerDelivery::negotiationComplete()) {\n    return false; // We are assuming not dc while negotiating\n  }\n  if (USBPowerDelivery::negotiationHasWorked()) {\n    return false; // We are using PD\n  }\n#endif\n\n#ifdef POW_QC\n  if (hasQCNegotiated()) {\n    return false; // We are using QC\n  }\n#endif\n  return true;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/QC_GPIO.cpp",
    "content": "/*\r\n * QC.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n#include \"BSP.h\"\r\n#include \"Pins.h\"\r\n#include \"QC3.h\"\r\n#include \"Settings.h\"\r\n\r\n#ifdef POW_QC\r\nvoid QC_DPlusZero_Six() {\r\n  // pull down D+\r\n  gpio_write(QC_DP_LOW_Pin, 0);\r\n}\r\nvoid QC_DNegZero_Six() {\r\n  gpio_write(QC_DM_HIGH_Pin, 0);\r\n  gpio_write(QC_DM_LOW_Pin, 1);\r\n}\r\nvoid QC_DPlusThree_Three() {\r\n  // pull up D+\r\n  gpio_write(QC_DP_LOW_Pin, 1);\r\n}\r\nvoid QC_DNegThree_Three() {\r\n  gpio_write(QC_DM_LOW_Pin, 1);\r\n  gpio_write(QC_DM_HIGH_Pin, 1);\r\n}\r\nvoid QC_DM_PullDown() {\r\n  // Turn on pulldown on D-\r\n  gpio_set_mode(USB_DM_Pin, GPIO_INPUT_PD_MODE);\r\n  gpio_set_mode(QC_DM_LOW_Pin, GPIO_INPUT_PD_MODE);\r\n  gpio_set_mode(QC_DM_HIGH_Pin, GPIO_INPUT_PD_MODE);\r\n}\r\nvoid QC_DM_No_PullDown() {\r\n  // Turn off pulldown on d-\r\n  gpio_set_mode(USB_DM_Pin, GPIO_INPUT_MODE);\r\n}\r\nvoid QC_Init_GPIO() {\r\n  // Setup any GPIO into the right states for QC\r\n  // D+ pulldown as output\r\n  gpio_set_mode(QC_DP_LOW_Pin, GPIO_OUTPUT_MODE);\r\n  gpio_write(QC_DP_LOW_Pin, 0);\r\n  // Make two D- pins floating\r\n  gpio_set_mode(USB_DM_Pin, GPIO_INPUT_MODE);\r\n  gpio_set_mode(QC_DM_LOW_Pin, GPIO_INPUT_MODE);\r\n  gpio_set_mode(QC_DM_HIGH_Pin, GPIO_INPUT_MODE);\r\n}\r\nvoid QC_Post_Probe_En() {\r\n  // Make two D- pins outputs\r\n  gpio_set_mode(QC_DM_LOW_Pin, GPIO_OUTPUT_MODE);\r\n  gpio_set_mode(QC_DM_HIGH_Pin, GPIO_OUTPUT_MODE);\r\n}\r\n\r\nuint8_t QC_DM_PulledDown() { return gpio_read(USB_DM_Pin) == 0; }\r\n#endif\r\nvoid QC_resync() {\r\n#ifdef POW_QC\r\n  seekQC(getSettingValue(SettingsOptions::QCIdealVoltage), getSettingValue(SettingsOptions::VoltageDiv)); // Run the QC seek again if we have drifted too much\r\n#endif\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/README.md",
    "content": "# BSP section for Pinecil v2\r\n\r\nThis folder contains the hardware abstractions required for the Pinecil V2. A RISC-V based soldering iron.\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/Setup.cpp",
    "content": "/*\n * Setup.c\n *\n *  Created on: 29Aug.,2017\n *      Author: Ben V. Brown\n */\n#include \"Setup.h\"\n#include \"BSP.h\"\n#include \"Debug.h\"\n#include \"FreeRTOSConfig.h\"\n#include \"IRQ.h\"\n#include \"Pins.h\"\n#include \"bl702_dma.h\"\n#include \"bl702_sec_eng.h\"\n#include \"history.hpp\"\n#include <string.h>\n#define ADC_NORM_SAMPLES 16\n#define ADC_FILTER_LEN   4\nuint16_t ADCReadings[ADC_NORM_SAMPLES]; // room for 32 lots of the pair of readings\n\n// Heap\n\nextern uint8_t      _heap_start;\nextern uint8_t      _heap_size; // @suppress(\"Type cannot be resolved\")\nstatic HeapRegion_t xHeapRegions[] = {\n    {&_heap_start, (unsigned int)&_heap_size},\n    {        NULL,                         0}, /* Terminates the array. */\n    {        NULL,                         0}  /* Terminates the array. */\n};\n// Functions\n\nvoid setup_timer_scheduler(void);\nvoid setup_pwm(void);\nvoid setup_adc(void);\nvoid hardware_init() {\n\n  vPortDefineHeapRegions(xHeapRegions);\n  HBN_Set_XCLK_CLK_Sel(HBN_XCLK_CLK_XTAL);\n\n  // Set capcode\n  {\n    uint32_t tmpVal = 0;\n    tmpVal          = BL_RD_REG(AON_BASE, AON_XTAL_CFG);\n    tmpVal          = BL_SET_REG_BITS_VAL(tmpVal, AON_XTAL_CAPCODE_IN_AON, 33);\n    tmpVal          = BL_SET_REG_BITS_VAL(tmpVal, AON_XTAL_CAPCODE_OUT_AON, 33);\n    BL_WR_REG(AON_BASE, AON_XTAL_CFG, tmpVal);\n  }\n\n  Sec_Eng_Trng_Enable();\n\n  gpio_set_mode(OLED_RESET_Pin, GPIO_OUTPUT_MODE);\n  gpio_set_mode(KEY_A_Pin, GPIO_INPUT_PD_MODE);\n  gpio_set_mode(KEY_B_Pin, GPIO_INPUT_PD_MODE);\n\n  gpio_set_mode(TMP36_INPUT_Pin, GPIO_HZ_MODE);\n  gpio_set_mode(TIP_TEMP_Pin, GPIO_HZ_MODE);\n  gpio_set_mode(VIN_Pin, GPIO_HZ_MODE);\n\n  gpio_set_mode(TIP_RESISTANCE_SENSE, GPIO_OUTPUT_MODE);\n  gpio_write(TIP_RESISTANCE_SENSE, 0);\n\n  MSG((char *)\"Pine64 Pinecilv2 Starting\\r\\n\");\n  setup_timer_scheduler();\n  setup_adc();\n  setup_pwm();\n  I2C_SetSclSync(I2C0_ID, 1);\n  I2C_SetDeglitchCount(I2C0_ID, 1); // Turn on de-glitch\n  // Note on I2C clock rate @ 100Khz the screen update == 20ms which is too long for USB-PD to work\n  // 200kHz and above works\n\n  I2C_ClockSet(I2C0_ID, 300000); // Sets clock to around 25 kHz less than set here\n\n  TIMER_SetCompValue(TIMER_CH0, TIMER_COMP_ID_0, 0);\n}\nvoid setup_pwm(void) {\n  // Setup PWM we use for driving the tip\n  PWM_CH_CFG_Type cfg = {\n      PWM_Channel,     // channel\n      PWM_CLK_XCLK,    // Clock\n      PWM_STOP_ABRUPT, // Stop mode\n      PWM_POL_NORMAL,  // Normal Polarity\n      60,              // Clock Div\n      100,             // Period\n      0,               // Thres 1 - start at beginning\n      50,              // Thres 2 - turn off at 50%\n      0,               // Interrupt pulse count\n  };\n\n  PWM_Channel_Init(&cfg);\n  PWM_Channel_Disable(PWM_Channel);\n}\n\nconst ADC_Chan_Type adc_tip_pos_chans[] = {TMP36_ADC_CHANNEL, TIP_TEMP_ADC_CHANNEL, VIN_ADC_CHANNEL, TIP_TEMP_ADC_CHANNEL,\n                                           TMP36_ADC_CHANNEL, TIP_TEMP_ADC_CHANNEL, VIN_ADC_CHANNEL, TIP_TEMP_ADC_CHANNEL};\nconst ADC_Chan_Type adc_tip_neg_chans[] = {ADC_CHAN_GND, ADC_CHAN_GND, ADC_CHAN_GND, ADC_CHAN_GND, ADC_CHAN_GND, ADC_CHAN_GND, ADC_CHAN_GND, ADC_CHAN_GND};\nstatic_assert(sizeof(adc_tip_pos_chans) == sizeof(adc_tip_neg_chans));\n\nvoid setup_adc(void) {\n  //\n  ADC_CFG_Type      adc_cfg      = {};\n  ADC_FIFO_Cfg_Type adc_fifo_cfg = {};\n\n  // Please also see PR #1529 for even more context\n\n  /*\n      A note on ADC settings\n\n      The bl70x ADC seems to be very sensitive to various analog settings.\n      It has been a challenge to determine what is the most correct way to\n      configure it in order to get accurate readings that can be transformed\n      into millivolts, for accurate measurements.\n\n      This latest set of ADC parameters, matches the latest configuration from\n      the upstream bl_mcu_sdk repository from commit hash:\n      9e189b69cbc0a75ffa170f600a28820848d56432\n      except for one difference.\n      (Note: bl_mcu_sdk has been heavily refactored since it has been imported into IronOS.)\n\n      You can make it match exactly by defining ENABLE_MIC2_DIFF, see the code\n      #ifdef ENABLE_MIC2_DIFF below.\n      I have decided to not apply this change because it appeared to make the\n      lower end of the input less precise.\n\n      Note that this configuration uses an ADC trimming value that is stored in the Efuse\n      of the bl70x chip. The actual reading is divided by this \"coe\" value.\n      We have found the following coe values on 3 different chips:\n      0.9629, 0.9438, 0.9876\n\n      Additional note for posterity:\n      PGA = programmable gain amplifier.\n      We would have expected to achieve the highest accuracy by disabling this amplifier,\n      however we found that not to be the case, and in almost all cases we have found\n      that there is a scaling error compared to the ideal Vref.\n      The only other configuration we have found to be accurate was if we had:\n      PGA disabled + Vref=2V + biasSel=AON + without trimming from the efuse.\n      But we can't use it because a Vref=2V limits the higher end of temperature and voltage readings.\n      Also we don't know if this other configuration is really accurate on all chips, or only\n      happened to be accurate on the one chip on which it has been found.\n  */\n\n  adc_cfg.clkDiv         = ADC_CLK_DIV_4;\n  adc_cfg.vref           = ADC_VREF_3P2V;\n  adc_cfg.resWidth       = ADC_DATA_WIDTH_14_WITH_16_AVERAGE;\n  adc_cfg.inputMode      = ADC_INPUT_SINGLE_END;\n  adc_cfg.v18Sel         = ADC_V18_SEL_1P82V;\n  adc_cfg.v11Sel         = ADC_V11_SEL_1P1V;\n  adc_cfg.gain1          = ADC_PGA_GAIN_1;\n  adc_cfg.gain2          = ADC_PGA_GAIN_1;\n  adc_cfg.chopMode       = ADC_CHOP_MOD_AZ_PGA_ON;\n  adc_cfg.biasSel        = ADC_BIAS_SEL_MAIN_BANDGAP;\n  adc_cfg.vcm            = ADC_PGA_VCM_1P2V;\n  adc_cfg.offsetCalibEn  = DISABLE;\n  adc_cfg.offsetCalibVal = 0;\n\n  ADC_Disable();\n  ADC_Enable();\n  ADC_Reset();\n\n  ADC_Init(&adc_cfg);\n#ifdef ENABLE_MIC2_DIFF\n  // This is the change that enables MIC2_DIFF, for now deciding not to enable it, since it seems to make results slightly worse\n  {\n    uint32_t tmpVal;\n    tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CMD);\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_GPADC_MIC2_DIFF, 1);\n    BL_WR_REG(AON_BASE, AON_GPADC_REG_CMD, tmpVal);\n  }\n#endif\n\n#if 1\n  // this sets the CVSP field (ADC conversion speed)\n  {\n    uint32_t regCfg2;\n    regCfg2 = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG2);\n    regCfg2 = BL_SET_REG_BITS_VAL(regCfg2, AON_GPADC_DLY_SEL, 0x02);\n    BL_WR_REG(AON_BASE, AON_GPADC_REG_CONFIG2, regCfg2);\n  }\n#endif\n\n  adc_fifo_cfg.dmaEn         = DISABLE;\n  adc_fifo_cfg.fifoThreshold = ADC_FIFO_THRESHOLD_1;\n  ADC_FIFO_Cfg(&adc_fifo_cfg);\n  ADC_MIC_Bias_Disable();\n  ADC_Tsen_Disable();\n  ADC_Gain_Trim();\n  ADC_Stop();\n  ADC_FIFO_Clear();\n  ADC_Scan_Channel_Config(adc_tip_pos_chans, adc_tip_neg_chans, sizeof(adc_tip_pos_chans) / sizeof(ADC_Chan_Type), DISABLE);\n}\n\nvoid setup_timer_scheduler() {\n  TIMER_Disable(TIMER_CH0);\n\n  TIMER_CFG_Type cfg = {\n      TIMER_CH0,                                              // Channel\n      TIMER_CLKSRC_32K,                                       // Clock source\n      TIMER_PRELOAD_TRIG_COMP2,                               // Trigger; reset after trigger 0\n      TIMER_COUNT_PRELOAD,                                    // Counter mode\n      22,                                                     // Clock div\n      (uint16_t)(powerPWM),                                   // CH0 compare (pwm out)\n      (uint16_t)(powerPWM + holdoffTicks),                    // CH1 compare (adc)\n      (uint16_t)(powerPWM + holdoffTicks + tempMeasureTicks), // CH2 compare end of cycle\n      0,                                                      // Preload, copied to counter on trigger of comp2\n  };\n  TIMER_Init(&cfg);\n\n  Timer_Int_Callback_Install(TIMER_CH0, TIMER_INT_COMP_0, timer0_comp0_callback);\n  Timer_Int_Callback_Install(TIMER_CH0, TIMER_INT_COMP_1, timer0_comp1_callback);\n  Timer_Int_Callback_Install(TIMER_CH0, TIMER_INT_COMP_2, timer0_comp2_callback);\n\n  TIMER_ClearIntStatus(TIMER_CH0, TIMER_COMP_ID_0);\n  TIMER_ClearIntStatus(TIMER_CH0, TIMER_COMP_ID_1);\n  TIMER_ClearIntStatus(TIMER_CH0, TIMER_COMP_ID_2);\n\n  TIMER_IntMask(TIMER_CH0, TIMER_INT_COMP_0, UNMASK);\n  TIMER_IntMask(TIMER_CH0, TIMER_INT_COMP_1, UNMASK);\n  TIMER_IntMask(TIMER_CH0, TIMER_INT_COMP_2, UNMASK);\n  CPU_Interrupt_Enable(TIMER_CH0_IRQn);\n  TIMER_Enable(TIMER_CH0);\n}\n\nvoid setupFUSBIRQ() {\n\n  gpio_set_mode(FUSB302_IRQ_Pin, GPIO_SYNC_FALLING_TRIGER_INT_MODE);\n  CPU_Interrupt_Disable(GPIO_INT0_IRQn);\n  Interrupt_Handler_Register(GPIO_INT0_IRQn, GPIO_IRQHandler);\n  CPU_Interrupt_Enable(GPIO_INT0_IRQn);\n  gpio_irq_enable(FUSB302_IRQ_Pin, ENABLE);\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/Setup.h",
    "content": "/*\r\n * Setup.h\r\n *\r\n *  Created on: 29Aug.,2017\r\n *      Author: Ben V. Brown\r\n */\r\n\r\n#ifndef PINE_SETUP_H_\r\n#define PINE_SETUP_H_\r\n#include <stdint.h>\r\nextern \"C\" {\r\n#include \"bflb_platform.h\"\r\n#include \"bl702_adc.h\"\r\n#include \"bl702_common.h\"\r\n#include \"bl702_glb.h\"\r\n#include \"bl702_i2c.h\"\r\n#include \"bl702_pwm.h\"\r\n#include \"bl702_timer.h\"\r\n#include \"hal_adc.h\"\r\n}\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\nuint16_t getADC(uint8_t channel);\r\nvoid     hardware_init();\r\nuint16_t getADCHandleTemp(uint8_t sample);\r\nuint16_t getADCVin(uint8_t sample);\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\nvoid           setupFUSBIRQ();\r\nextern uint8_t holdoffTicks;\r\nextern uint8_t tempMeasureTicks;\r\n#endif /* PINE_SETUP_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/ThermoModel.cpp",
    "content": "/*\r\n * ThermoModel.cpp\r\n *\r\n *  Created on: 1 May 2021\r\n *      Author: Ralim\r\n */\r\n#include \"TipThermoModel.h\"\r\n#include \"Utils.hpp\"\r\n#include \"configuration.h\"\r\n\r\n#ifdef TEMP_uV_LOOKUP_HAKKO\r\nconst int32_t uVtoDegC[] = {\r\n    //\r\n    // uv -> temp in C\r\n    0,     0,   //\r\n    266,   10,  //\r\n    522,   20,  //\r\n    770,   30,  //\r\n    1010,  40,  //\r\n    1244,  50,  //\r\n    1473,  60,  //\r\n    1697,  70,  //\r\n    1917,  80,  //\r\n    2135,  90,  //\r\n    2351,  100, //\r\n    2566,  110, //\r\n    2780,  120, //\r\n    2994,  130, //\r\n    3209,  140, //\r\n    3426,  150, //\r\n    3644,  160, //\r\n    3865,  170, //\r\n    4088,  180, //\r\n    4314,  190, //\r\n    4544,  200, //\r\n    4777,  210, //\r\n    5014,  220, //\r\n    5255,  230, //\r\n    5500,  240, //\r\n    5750,  250, //\r\n    6003,  260, //\r\n    6261,  270, //\r\n    6523,  280, //\r\n    6789,  290, //\r\n    7059,  300, //\r\n    7332,  310, //\r\n    7609,  320, //\r\n    7889,  330, //\r\n    8171,  340, //\r\n    8456,  350, //\r\n    8742,  360, //\r\n    9030,  370, //\r\n    9319,  380, //\r\n    9607,  390, //\r\n    9896,  400, //\r\n    10183, 410, //\r\n    10468, 420, //\r\n    10750, 430, //\r\n    11029, 440, //\r\n    11304, 450, //\r\n    11573, 460, //\r\n    11835, 470, //\r\n    12091, 480, //\r\n    12337, 490, //\r\n    12575, 500, //\r\n\r\n};\r\n#endif\r\n\r\nconst int uVtoDegCItems = sizeof(uVtoDegC) / (2 * sizeof(int32_t));\r\n\r\nTemperatureType_t TipThermoModel::convertuVToDegC(uint32_t tipuVDelta) { return Utils::InterpolateLookupTable(uVtoDegC, uVtoDegCItems, tipuVDelta); }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/UnitSettings.h",
    "content": "/*\r\n * UnitSettings.h\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_MAGIC_UNITSETTINGS_H_\r\n#define BSP_MAGIC_UNITSETTINGS_H_\r\n\r\n#endif /* BSP_MAGIC_UNITSETTINGS_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl702_config.h",
    "content": "/**\n * @file bl602_config.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n\n#ifndef __BL702_CONFIG_H__\n#define __BL702_CONFIG_H__\n\n#include \"clock_config.h\"\n#include \"peripheral_config.h\"\n#include \"pinmux_config.h\"\n\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_irq.c",
    "content": "#include \"bl_irq.h\"\n\nextern pFunc __Interrupt_Handlers[IRQn_LAST];\n\nvoid bl_irq_enable(unsigned int source) { *(volatile uint8_t *)(CLIC_HART0_ADDR + CLIC_INTIE + source) = 1; }\n\nvoid bl_irq_disable(unsigned int source) { *(volatile uint8_t *)(CLIC_HART0_ADDR + CLIC_INTIE + source) = 0; }\n\nvoid bl_irq_pending_set(unsigned int source) { *(volatile uint8_t *)(CLIC_HART0_ADDR + CLIC_INTIP + source) = 1; }\n\nvoid bl_irq_pending_clear(unsigned int source) { *(volatile uint8_t *)(CLIC_HART0_ADDR + CLIC_INTIP + source) = 0; }\n\nvoid bl_irq_register(int irqnum, void *handler) {\n  if (irqnum < IRQn_LAST) {\n    __Interrupt_Handlers[irqnum] = handler;\n  }\n}\n\nvoid bl_irq_unregister(int irqnum, void *handler) {\n  if (irqnum < IRQn_LAST) {\n    __Interrupt_Handlers[irqnum] = NULL;\n  }\n}\n\nvoid bl_irq_handler_get(int irqnum, void **handler) {\n  if (irqnum < IRQn_LAST) {\n    *handler = __Interrupt_Handlers[irqnum];\n  }\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_irq.h",
    "content": "#ifndef __BL_IRQ_H__\n#define __BL_IRQ_H__\n\n\n#include \"bl702_glb.h\"\n#include \"risc-v/Core/Include/clic.h\"\n#include \"risc-v/Core/Include/riscv_encoding.h\"\n\n\nvoid bl_irq_enable(unsigned int source);\nvoid bl_irq_disable(unsigned int source);\nvoid bl_irq_pending_set(unsigned int source);\nvoid bl_irq_pending_clear(unsigned int source);\nvoid bl_irq_register(int irqnum, void *handler);\nvoid bl_irq_unregister(int irqnum, void *handler);\nvoid bl_irq_handler_get(int irqnum, void **handler);\n\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [2020] [BOUFFALO LAB (NANJING) CO., LTD.]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License."
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/ReleaseNotes",
    "content": "bl mcu sdk Release Notes\n----------------------------\n此文件包含 bl mcu sdk 软件开发包的发行说明。\n每个版本的文字说明与发布时的说明保持一致（可能会有错别字的勘误）。\n\nbl mcu sdk Release V1.4.4\n----------------------------\n\n新增功能说明：\n    1. 增加 adc dma, uart dma p2p, at client, tensorflow vww demo\n    2. boot2 更新\n    3. 删除 timer basic 和 dac_from_flash demo\n    4. 更新 bflb flash tool 到 1.7.1\n    5. ble lib 更新，使用 t-head 10.2 工具链构建（小于此工具链版本编译将报错）\n\n修复问题说明：\n    1. 修正 dma 相关命令宏，重命名 DMA_BURST_xBYTE 防止误导\n    2. 修正 readme 中相关编译命令\n\nbl mcu sdk Release V1.4.3\n----------------------------\n\n新增功能说明：\n    1. 增加 pikascript 和 mac154 组件\n    2. 增加 ble pds 的 demo\n    3. doc 缓存文件移出\n    4. 增加 cklink 和 jlink 在 eclipse 中的调试\n\n修复问题说明：\n    1. driver 更新\n    2. Os to O2\n    3. uart sig 选定功能后，对与其他 sig 使用相同功能进行调整\n\nbl mcu sdk Release V1.4.2\n----------------------------\n\n新增功能说明：\n    1. 重构 dac、dma 驱动，更新 dac、dma doc\n    2. 新增 arch_ffsll、arch_ctzll、arch_clzll 等函数\n    3. 优化 usb 协议栈 log 信息，msc 新增 sense code for requestSense command\n\n修复问题说明：\n    1. 补充完整 xxx_close 函数，复位相关寄存器\n    2. 删除 drivers 下头文件部分依赖\n    3. 优化 usb 驱动中 端点0 设置 ack 的位置（放置中断中），防止重复设置。\n\nbl mcu sdk Release V1.4.1\n----------------------------\n\n新增功能说明：\n    1. 新增 aes、ble pds31、freertos tickless、audio cube demo\n    2. 新增 usb 同步传输中断方式\n    3. 新增 lwip 组件以及对应 emac demo\n    4. 新增 pds31 快速唤醒功能\n    5. 文档更新，包含：flash、usb、fatfs、pm、emac、ble\n\n修复问题说明：\n    1. pwm demo 文档中分频值修正\n    2. 修正 mtimer 获取 div 函数\n    3. 修正 dma 链表配置，当传输长度为 4095 时会配置错误，优化 if 判断\n    4. switch 禁用跳表选项 ，C flag 中添加 -fno-jump-tables\n    5. 部分 cdk 工程增加 syscall.c，对系统函数重定向，否则会进 M mode 异常\n    6. 修正 gpio func macro value，该值对配置 gpio 为 uart 时会有问题，出现覆盖问题\n    7. 补全 calloc 函数，浮点打印会使用\n    8. 从驱动库文件移除 bflb_platform.h 文件，减少只使用 std drv 时的依赖项\n\nbl mcu sdk Release V1.4.0\n----------------------------\n\n新增功能说明：\n    1. 新增 mbedtls、rt-thread、nmsis 组件,新增 rt-thread msh、mfcc、nn、dsp demo\n    2. 新增 flash 模拟u盘升级、 c++、adc 中断读取、boot2 usb iap、prng demo\n    3. 修改 makefile 调用 cmake 执行命令\n    4. usb 协议栈新增 usb hs 功能\n    5. freertos 新增 tickless 功能\n    6. 重构芯片驱动的公用头文件包含、删除 flash 的相关 api\n    7. cdk 工程源文件更新\n    8. fatfs port接口新增 flash 读写（usb msc中可以使用）\n    9. 使能所有外设的 BSP_USING_XXX 宏\n    10. ble 新增 oad 功能，带加密功能\n    11. mmheap 组件更新，链表式的内存管理减少了 ram 的使用，但是会增加 malloc 和 free 时间\n\n修复问题说明：\n    1. 修复 ble 在 pc上连接失败的问题，修改 capcode 可以解决\n    2. fatfs 中 FS_MAX_SS 参数需要适配其他种类的扇区，修复多个驱动注册到 fatfs 时，参数覆盖的 bug\n    3. bl706_avb 文件删除其他 demo 的 pinmux，只留 camera + lcd 的配置，同理 bl706_iot 文件只留 i2s + usb + adc + pwm 配置\n    4. 修正 adc_read 函数，只读取了一个 fifo 数值，影响 adc 采样效率\n    5. 修正 usb_dc_ep_set_stall 在 端点 stall 时没有开启下一次的端点接收的问题\n\n\nbl mcu sdk Release V1.3.0\n----------------------------\n\n新增功能说明：\n    1. 新增 acomp、rtc、boot2、wdt、pm hal driver 和 demo\n    2. 新增 romfs demo、usb 麦克风和扬声器双声道 demo、带 tinyjpeg 组件的 spi lcd 显示 demo\n    3. 重构 boot2_iap demo，统一接口\n    4. 使能 romapi，减少 codesize\n    5. 新增 flash 自动识别和配置功能，适配不同的 flash 芯片\n    6. 重构 mcu lcd 驱动层，适配多种 mcu lcd 驱动\n    7. 新增 ssd1306 spi 和 i2c 驱动，新增 ws2812 、wm8978 驱动\n    8. shell 新增颜色显示和自定义打印接口（使用各种终端工具可以查看）\n    9. bl602 和 bl702 驱动库相关更新\n    10. 新增外部 cmake 工程编译方式，从而让 sdk 作为 submodule 使用\n    11. ld 文件的更新\n    12. ble lib 文件更新（需要使用最新的 toolchain（sifive）才能编译 ble demo）\n\n修复问题说明：\n    1. 修复 eclipse openocd 调试时，openocd 版本太低导致无法调试\n    2. case 运行异常时，需要添加死循环\n    3. 驱动库的一些 bug fix\n    4. 开关外设中断的重名名\n    5. fix 重复定义的宏带来的 warning\n\nbl mcu sdk Release V1.2.6\n----------------------------\n\n新增功能说明：\n    1. 重构 board 系统目录结构\n    2. 删除 SUPPORT_XXX 功能，改成 cmake 自动识别组件库并参与编译，识别参数为 TARGET_REQUIRED_LIBS\n    3. 删除 device_register 中 flag 选项\n    4. 重构 timer hal 层, clock tree 和 demo\n    5. 添加 自动识别内外部 flash 并切换引脚功能\n    6. 添加 2线 flash 下载支持\n    7. 默认使能 cpu 浮点支持（非打印浮点支持）\n    8. 添加 bl702 qfn32 的 board 文件\n    9. 添加 boot2 hal 封装层\n    10. 添加 pid 算法\n    11. 添加 qdec hal 和 demo\n\n修复问题说明：\n    1. 修复 开关全局中断嵌套带来的问题\n    2. 修复 使用 shell 功能时编译报错\n    3. memcpy 改用 romapi\n    4. 修复 cdk 中编译 ble demo 编译报错，未添加 board 支持\n    5. 修复 pwm demo 相关宏书写错误\n    6. 修复 std 和 hal 中 switch case 返回的一些 bug\n    7. cdk 相关 demo 改用 bl706_iot board\n    8. 修改 keyscan 默认时钟和分频\n\nbl mcu sdk Release V1.2.5\n----------------------------\n\n新增功能说明：\n    1. 添加 tensorflow lite 支持\n    2. gpio_set_mode 添加高阻模式\n    3. 添加 keyscan hal 驱动\n    4. 新增 shell 文件系统\n    5. 更新 clock tree 宏定义、更新 board.c 中 pinmux 初始化配置\n    6. es8388 驱动增加双通道支持\n    7. il9341 增加字库，支持大字号显示\n\n修复问题说明：\n    1. 修复 usb msc 中 interface num 为 0\n    2. 修复 uart 和 spi 开关 dma 时未设置 oflag 状态\n    3. 修改 CPU_ID 默认值，当不使用多核时默认为 none\n    4. 修复 adc 浮点输出问题\n    5. 修复 hal pwm 相关宏书写错误\n\n\nbl mcu sdk Release V1.2.4\n----------------------------\n\n新增功能说明：\n    1. 增加部分 math 库函数对 arm dsp api 的兼容，以及优化 math 库效率\n    2. 增加 bl702 adc、camera 中断，重定义 clock tree 的相关宏，\n    3. 删除 GPIO32-GPIO37，更新 GPIO 初始化和读写函数，更新 sf flash 引脚初始化\n    4. 增加 i2s 双通道支持\n    5. 增加 adc、pwm、camera 相关 api\n    6. 增加 camera pingpong buffer case\n    7. cdk 工程更新\n    8. 更新 openocd cfg 文件，适配 openocd 0.11 版本\n\n修复问题说明：\n    1. 对 pwm readme 说明修改\n    2. 修复 hal_usb 中对端点 0 状态的判断逻辑\n    3. 修复 flash 擦除扇区时多擦除扇区的问题\n    4. ble、lvgl、usb、boot2iap、adc 相关 demo 的修改\n\nbl mcu sdk Release V1.2.3\n----------------------------\n\n新增功能说明：\n    1. 增加 case 输出成功和失败的 log 提示\n    2. 更新 cdk 工程，使用 minilibc 替代本地 libc\n    3. 更新 usb api 及其他文档说明\n\n修复问题说明：\n    1. 修改 bl702_flash.ld 文件中 ram 的实际大小\n    2. 修复 main 函数返回时一直重入的问题\n    3. 删除 hal driver 中不需要的内容\n    4. 修复 cdk 工程中编译 camera case 存在的问题\n\nbl mcu sdk Release V1.2.2\n----------------------------\n\n新增功能说明：\n    1. 新增 pwm 驱动 dc motor 和 step motor、dht11、custom hid 、shell demo\n    2. 为所有的 examples 添加 cdk 工程\n    3. 为 cdk 工程添加 openocd 支持\n    4. 更新文档\n    5. 使用 clang-format 格式化代码\n\n修复问题说明：\n    1. 修复 __riscv_float_abi_single 未定义带来的 warning\n    2. 修改 bl702_flash.ld 中 heap 的 分配方式\n    3. 更新 shell 组件，添加使用时删除中间字符的功能\n\nbl mcu sdk Release V1.2.1\n----------------------------\n\n新增功能说明：\n    1. 新增 readme for demo command line build\n    2. 更新 cmake 运行顺序\n    3. 更新 cdk flashloader 和 openocd cfg\n    4. 更新文档\n\n修复问题说明：\n    1. 修复 board.c 中 ADC 的引脚初始化\n    2. 修复 ble 静态库依赖问题\n\nbl mcu sdk Release V1.2.0\n----------------------------\n\n新增功能说明：\n    1. 新增 xz、ble 组件\n    2. usb_stack 中新增 usb video、hid、audio 驱动\n    3. 新增 bl602 driver 和 bl602_iot board\n    4. 为 examples 补全 cdk 工程\n    5. 新增 ble、psram、camera、boot2_iap、emac、usb_video、usb_audio、usb_hid、gpio_int、pwm_it、flash读写、lowpower、pka、systick、timer demo\n    6. 更新 flash Tools\n    7. 更新 cmake 文件\n    8. 更新 mtimer 时钟频率为1M，便于计算\n    9. 文档更新\n\n修复问题说明：\n    1. 修复若干已知问题\n\n\nbl mcu sdk Release V1.1.0\n----------------------------\n\n新增功能说明：\n    1. 新增 lvgl 组件以及基本 demo；\n    2. 新增 freertos 702 port 以及基本 demo；\n    3. 新增 usb 转串口标准驱动 demo，支持博流自定义 DTR、RTS 流控协议；\n    4. 文件系统添加命令行功能；\n    5. hal 层添加强转宏，从而用户可以在程序内修改；\n\n修复问题说明：\n    1. 修正 usb 设备描述符初始化宏，添加协议类代码初始化；\n    2. 修复 hal 层驱动。\n\n\n\nbl mcu sdk Release V1.0.0\n----------------------------\n\n初始化项目。该项目基于 cmake 构建，包含 bl702/bl704/bl706 系列 mcu 底层驱动、基本外设例程、common 驱动以及第三方组件。\n支持 bl706_avb、bl706_iot 开发板的开发工作；\n该项目也支持使用 CDK、eclipse 编译、烧写、调试代码；\n该项目中还包含烧录工具、调试脚本、flash 算法文件以及构建 cmake 需要的一些工具。\n\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/bsp/bsp_common/platform/bflb_platform.c",
    "content": "/**\r\n * @file bflb_platform.c\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n#include \"bflb_platform.h\"\r\n#include \"drv_mmheap.h\"\r\n#include \"hal_common.h\"\r\n#include \"hal_flash.h\"\r\n#include \"hal_mtimer.h\"\r\n#include \"hal_uart.h\"\r\n#include \"ring_buffer.h\"\r\n\r\nextern uint32_t __HeapBase;\r\nextern uint32_t __HeapLimit;\r\n\r\nstatic uint8_t uart_dbg_disable = 0;\r\n\r\nstruct heap_info mmheap_root;\r\n\r\nstatic struct heap_region system_mmheap[] = {\r\n    {NULL, 0},\r\n    {NULL, 0}, /* Terminates the array. */\r\n};\r\n__WEAK__ void board_init(void) {}\r\n\r\n__WEAK__ enum uart_index_type board_get_debug_uart_index(void) { return 0; }\r\n\r\nvoid bl_show_flashinfo(void) {\r\n  SPI_Flash_Cfg_Type flashCfg;\r\n  uint8_t           *pFlashCfg    = NULL;\r\n  uint32_t           flashCfgLen  = 0;\r\n  uint32_t           flashJedecId = 0;\r\n\r\n  flashJedecId = flash_get_jedecid();\r\n  flash_get_cfg(&pFlashCfg, &flashCfgLen);\r\n  arch_memcpy((void *)&flashCfg, pFlashCfg, flashCfgLen);\r\n  MSG(\"show flash cfg:\\r\\n\");\r\n  MSG(\"jedec id   0x%06X\\r\\n\", flashJedecId);\r\n  MSG(\"mid            0x%02X\\r\\n\", flashCfg.mid);\r\n  MSG(\"iomode         0x%02X\\r\\n\", flashCfg.ioMode);\r\n  MSG(\"clk delay      0x%02X\\r\\n\", flashCfg.clkDelay);\r\n  MSG(\"clk invert     0x%02X\\r\\n\", flashCfg.clkInvert);\r\n  MSG(\"read reg cmd0  0x%02X\\r\\n\", flashCfg.readRegCmd[0]);\r\n  MSG(\"read reg cmd1  0x%02X\\r\\n\", flashCfg.readRegCmd[1]);\r\n  MSG(\"write reg cmd0 0x%02X\\r\\n\", flashCfg.writeRegCmd[0]);\r\n  MSG(\"write reg cmd1 0x%02X\\r\\n\", flashCfg.writeRegCmd[1]);\r\n  MSG(\"qe write len   0x%02X\\r\\n\", flashCfg.qeWriteRegLen);\r\n  MSG(\"cread support  0x%02X\\r\\n\", flashCfg.cReadSupport);\r\n  MSG(\"cread code     0x%02X\\r\\n\", flashCfg.cReadMode);\r\n  MSG(\"burst wrap cmd 0x%02X\\r\\n\", flashCfg.burstWrapCmd);\r\n  MSG(\"-------------------\\r\\n\");\r\n}\r\n\r\nvoid bflb_platform_init(uint32_t baudrate) {\r\n  //   static uint8_t initialized = 0;\r\n  BL_Err_Type ret = ERROR;\r\n\r\n  cpu_global_irq_disable();\r\n\r\n  ret = flash_init();\r\n  if (ret != SUCCESS) {\r\n    MSG(\"flash init fail!!!\\r\\n\");\r\n  }\r\n  board_init();\r\n\r\n  if (!uart_dbg_disable) {\r\n    uart_register(board_get_debug_uart_index(), \"debug_log\");\r\n    struct device *uart = device_find(\"debug_log\");\r\n\r\n    if (uart) {\r\n      device_open(uart, DEVICE_OFLAG_STREAM_TX | DEVICE_OFLAG_INT_RX);\r\n      device_set_callback(uart, NULL);\r\n      device_control(uart, DEVICE_CTRL_CLR_INT, (void *)(UART_RX_FIFO_IT));\r\n    }\r\n  }\r\n  static bool initialized = false;\r\n  if (!initialized) {\r\n    system_mmheap[0].addr     = (uint8_t *)&__HeapBase;\r\n    system_mmheap[0].mem_size = ((size_t)&__HeapLimit - (size_t)&__HeapBase);\r\n\r\n    if (system_mmheap[0].mem_size > 0) {\r\n      mmheap_init(&mmheap_root, system_mmheap);\r\n    }\r\n\r\n    MSG(\"dynamic memory init success,heap size = %d Kbyte \\r\\n\", system_mmheap[0].mem_size / 1024);\r\n    initialized = 1;\r\n    if (ret != SUCCESS) {\r\n      MSG(\"flash init fail!!!\\r\\n\");\r\n    }\r\n    bl_show_flashinfo();\r\n  }\r\n  MSG(\"Enable IRQ's\\r\\n\");\r\n  cpu_global_irq_enable();\r\n}\r\n\r\n#if ((defined BOOTROM) || (defined BFLB_EFLASH_LOADER))\r\nstatic uint8_t  eflash_loader_logbuf[1024] __attribute__((section(\".system_ram_noinit\")));\r\nstatic uint32_t log_len = 0;\r\nuint32_t        bflb_platform_get_log(uint8_t *data, uint32_t maxlen) {\r\n  uint32_t len = log_len;\r\n  if (len > maxlen) {\r\n    len = maxlen;\r\n  }\r\n  memcpy(data, eflash_loader_logbuf, len);\r\n  return len;\r\n}\r\n#endif\r\n\r\nvoid bflb_platform_printf(char *fmt, ...) {\r\n  struct device *uart;\r\n  char           print_buf[128];\r\n  va_list        ap;\r\n\r\n  if (!uart_dbg_disable) {\r\n    va_start(ap, fmt);\r\n    vsnprintf(print_buf, sizeof(print_buf) - 1, fmt, ap);\r\n    va_end(ap);\r\n#if ((defined BOOTROM) || (defined BFLB_EFLASH_LOADER))\r\n    uint32_t len = strlen(print_buf);\r\n    if (log_len + len < sizeof(eflash_loader_logbuf)) {\r\n      memcpy(eflash_loader_logbuf + log_len, print_buf, len);\r\n      log_len += len;\r\n    }\r\n#endif\r\n    uart = device_find(\"debug_log\");\r\n    device_write(uart, 0, (uint8_t *)print_buf, strlen(print_buf));\r\n  }\r\n}\r\n\r\nvoid bflb_platform_print_set(uint8_t disable) { uart_dbg_disable = disable; }\r\n\r\nuint8_t bflb_platform_print_get(void) { return uart_dbg_disable; }\r\n\r\nvoid bflb_platform_deinit(void) {\r\n  if (!uart_dbg_disable) {\r\n    struct device *uart = device_find(\"debug_log\");\r\n    if (uart) {\r\n      device_close(uart);\r\n      device_unregister(\"debug_log\");\r\n    }\r\n  }\r\n}\r\n\r\nvoid bflb_platform_dump(uint8_t *data, uint32_t len) {\r\n  uint32_t i = 0;\r\n\r\n  if (!uart_dbg_disable) {\r\n    for (i = 0; i < len; i++) {\r\n      if (i % 16 == 0) {\r\n        bflb_platform_printf(\"\\r\\n\");\r\n      }\r\n\r\n      bflb_platform_printf(\"%02x \", data[i]);\r\n    }\r\n\r\n    bflb_platform_printf(\"\\r\\n\");\r\n  }\r\n}\r\n\r\nvoid bflb_platform_reg_dump(uint32_t addr) { bflb_platform_printf(\"%08x[31:0]=%08x\\r\\n\", addr, *(volatile uint32_t *)(addr)); }\r\n\r\nvoid bflb_platform_init_time() {}\r\n\r\nvoid bflb_platform_deinit_time() {}\r\n\r\nvoid bflb_platform_set_alarm_time(uint64_t time, void (*interruptFun)(void)) { mtimer_set_alarm_time(time, interruptFun); }\r\n\r\nvoid bflb_platform_clear_time() {}\r\n\r\nvoid bflb_platform_start_time() {}\r\n\r\nvoid bflb_platform_stop_time() {}\r\n\r\nuint64_t bflb_platform_get_time_ms() { return mtimer_get_time_ms(); }\r\n\r\nuint64_t bflb_platform_get_time_us() { return mtimer_get_time_us(); }\r\n\r\nvoid bflb_platform_delay_ms(uint32_t ms) { mtimer_delay_ms(ms); }\r\nvoid bflb_platform_delay_us(uint32_t us) { mtimer_delay_us(us); }\r\n\r\nvoid bflb_print_device_list(void) {\r\n  struct device *dev;\r\n  dlist_t       *node;\r\n  uint8_t        device_index = 0;\r\n\r\n  MSG(\"Device List Print\\r\\n\");\r\n\r\n  dlist_for_each(node, device_get_list_header()) {\r\n    dev = dlist_entry(node, struct device, list);\r\n\r\n    MSG(\"Index %d\\r\\nDevice Name = %s \\r\\n\", device_index, dev->name);\r\n\r\n    switch (dev->type) {\r\n    case DEVICE_CLASS_GPIO:\r\n      MSG(\"Device Type = %s \\r\\n\", \"GPIO\");\r\n      break;\r\n\r\n    case DEVICE_CLASS_UART:\r\n      MSG(\"Device Type = %s \\r\\n\", \"UART\");\r\n      break;\r\n\r\n    case DEVICE_CLASS_SPI:\r\n      MSG(\"Device Type = %s \\r\\n\", \"SPI\");\r\n      break;\r\n\r\n    case DEVICE_CLASS_I2C:\r\n      MSG(\"Device Type = %s \\r\\n\", \"I2C\");\r\n      break;\r\n\r\n    case DEVICE_CLASS_ADC:\r\n      MSG(\"Device Type = %s \\r\\n\", \"ADC\");\r\n      break;\r\n\r\n    case DEVICE_CLASS_DMA:\r\n      MSG(\"Device Type = %s \\r\\n\", \"DMA\");\r\n      break;\r\n\r\n    case DEVICE_CLASS_TIMER:\r\n      MSG(\"Device Type = %s \\r\\n\", \"TIMER\");\r\n      break;\r\n\r\n    case DEVICE_CLASS_PWM:\r\n      MSG(\"Device Type = %s \\r\\n\", \"PWM\");\r\n      break;\r\n\r\n    case DEVICE_CLASS_SDIO:\r\n      MSG(\"Device Type = %s \\r\\n\", \"SDIO\");\r\n      break;\r\n\r\n    case DEVICE_CLASS_USB:\r\n      MSG(\"Device Type = %s \\r\\n\", \"USB\");\r\n      break;\r\n\r\n    case DEVICE_CLASS_I2S:\r\n      MSG(\"Device Type = %s \\r\\n\", \"I2S\");\r\n      break;\r\n\r\n    case DEVICE_CLASS_CAMERA:\r\n      MSG(\"Device Type = %s \\r\\n\", \"CAMERA\");\r\n      break;\r\n\r\n    case DEVICE_CLASS_NONE:\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n\r\n    MSG(\"Device Handle = 0x%x \\r\\n\", dev);\r\n    MSG(\"---------------------\\r\\n\", dev);\r\n\r\n    device_index++;\r\n  }\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/bsp/bsp_common/platform/bflb_platform.h",
    "content": "/**\r\n * @file bflb_platform.h\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n\r\n#ifndef _BFLB_PLATFORM_H\r\n#define _BFLB_PLATFORM_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n#include <stdio.h>\r\n#include <string.h>\r\n#include <stdint.h>\r\n#include <stdarg.h>\r\n#include <stdbool.h>\r\n#include <stdlib.h>\r\n\r\n#define MSG(a, ...)     bflb_platform_printf(a, ##__VA_ARGS__)\r\n#define MSG_DBG(a, ...) bflb_platform_printf(a, ##__VA_ARGS__)\r\n#define MSG_ERR(a, ...) bflb_platform_printf(a, ##__VA_ARGS__)\r\n#define BL_CASE_FAIL          \\\r\n    {                         \\\r\n        MSG(\"case fail\\r\\n\"); \\\r\n    }\r\n#define BL_CASE_SUCCESS          \\\r\n    {                            \\\r\n        MSG(\"case success\\r\\n\"); \\\r\n    }\r\n\r\n/* compatible with old version */\r\n#ifndef DBG_TAG\r\n#define DBG_TAG \"DEBUG\"\r\n#endif\r\n\r\n/*\r\n * The color for terminal (foreground)\r\n * BLACK    30\r\n * RED      31\r\n * GREEN    32\r\n * YELLOW   33\r\n * BLUE     34\r\n * PURPLE   35\r\n * CYAN     36\r\n * WHITE    37\r\n */\r\n#define _DBG_COLOR(n) bflb_platform_printf(\"\\033[\" #n \"m\")\r\n#define _DBG_LOG_HDR(lvl_name, color_n) \\\r\n    bflb_platform_printf(\"\\033[\" #color_n \"m[\" lvl_name \"/\" DBG_TAG \"] \")\r\n#define _DBG_LOG_X_END \\\r\n    bflb_platform_printf(\"\\033[0m\\n\")\r\n\r\n#define dbg_log_line(lvl, color_n, fmt, ...)      \\\r\n    do {                                          \\\r\n        _DBG_LOG_HDR(lvl, color_n);               \\\r\n        bflb_platform_printf(fmt, ##__VA_ARGS__); \\\r\n        _DBG_LOG_X_END;                           \\\r\n    } while (0)\r\n\r\n#define LOG_D(fmt, ...) dbg_log_line(\"D\", 0, fmt, ##__VA_ARGS__)\r\n#define LOG_I(fmt, ...) dbg_log_line(\"I\", 35, fmt, ##__VA_ARGS__)\r\n#define LOG_W(fmt, ...) dbg_log_line(\"W\", 33, fmt, ##__VA_ARGS__)\r\n#define LOG_E(fmt, ...) dbg_log_line(\"E\", 31, fmt, ##__VA_ARGS__)\r\n#define LOG_RAW(...)    bflb_platform_printf(__VA_ARGS__)\r\n\r\nvoid bflb_platform_init(uint32_t baudrate);\r\nvoid bflb_platform_printf(char *fmt, ...);\r\nvoid bflb_platform_print_set(uint8_t disable);\r\nuint8_t bflb_platform_print_get(void);\r\nvoid bflb_platform_dump(uint8_t *data, uint32_t len);\r\nvoid bflb_platform_reg_dump(uint32_t addr);\r\nuint32_t bflb_platform_get_log(uint8_t *data, uint32_t maxlen);\r\nvoid bflb_platform_deinit(void);\r\n\r\nvoid bflb_platform_init_time(void);\r\nvoid bflb_platform_clear_time(void);\r\nuint64_t bflb_platform_get_time_ms(void);\r\nuint64_t bflb_platform_get_time_us(void);\r\nvoid bflb_platform_start_time(void);\r\nvoid bflb_platform_stop_time(void);\r\nvoid bflb_platform_set_alarm_time(uint64_t time, void (*interruptFun)(void));\r\nvoid bflb_platform_deinit_time(void);\r\nvoid bflb_platform_delay_ms(uint32_t ms);\r\nvoid bflb_platform_delay_us(uint32_t us);\r\n\r\nvoid bflb_print_device_list(void);\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/bsp/bsp_common/platform/cpp_new.cpp",
    "content": "#include <stdint.h>\r\n#include <stdlib.h>\r\n\r\nvoid *operator new(size_t size) { return malloc(size); }\r\n\r\nvoid *operator new[](size_t size) { return malloc(size); }\r\n\r\nvoid operator delete(void *ptr) { free(ptr); }\r\n\r\nvoid operator delete[](void *ptr) { free(ptr); }"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/bsp/bsp_common/platform/syscalls.c",
    "content": "#include <errno.h>\n#include <reent.h>\n#include <unistd.h>\n// #include \"drv_mmheap.h\"\n#include \"drv_device.h\"\n\nextern struct heap_info mmheap_root;\n\n#ifdef CONF_VFS_ENABLE\n#include <vfs.h>\n#endif\n\n/* Reentrant versions of system calls.  */\n\n/* global errno in RT-Thread */\nstatic volatile int _sys_errno = 0;\n\n#ifndef _REENT_ONLY\nint *__errno() {\n  // #if (configUSE_POSIX_ERRNO == 1)\n  //     {\n  //         extern int FreeRTOS_errno;\n\n  //         return &FreeRTOS_errno;\n  //     }\n  // #endif\n  return (int *)&_sys_errno;\n}\n#endif\n\nint _getpid_r(struct _reent *ptr) { return 0; }\n\nint _execve_r(struct _reent *ptr, const char *name, char *const *argv, char *const *env) {\n  /* return \"not supported\" */\n  ptr->_errno = -ENOSYS;\n  return -1;\n}\n\nint _fcntl_r(struct _reent *ptr, int fd, int cmd, int arg) {\n  /* return \"not supported\" */\n  ptr->_errno = -ENOSYS;\n  return -1;\n}\n\nint _fork_r(struct _reent *ptr) {\n  /* return \"not supported\" */\n  ptr->_errno = -ENOSYS;\n  return -1;\n}\n\nint _fstat_r(struct _reent *ptr, int fd, struct stat *pstat) {\n  /* return \"not supported\" */\n  ptr->_errno = -ENOSYS;\n  return -1;\n}\n\nint _isatty_r(struct _reent *ptr, int fd) {\n  /* return \"not supported\" */\n  ptr->_errno = -ENOSYS;\n  return -1;\n}\n\nint _kill_r(struct _reent *ptr, int pid, int sig) {\n  /* return \"not supported\" */\n  ptr->_errno = -ENOSYS;\n  return -1;\n}\n\nint _link_r(struct _reent *ptr, const char *old, const char *new) {\n  /* return \"not supported\" */\n  ptr->_errno = -ENOSYS;\n  return -1;\n}\n\n_off_t _lseek_r(struct _reent *ptr, int fd, _off_t pos, int whence) {\n#ifndef CONF_VFS_ENABLE\n  /* return \"not supported\" */\n  ptr->_errno = -ENOSYS;\n  return -1;\n#else\n  _off_t rc;\n\n  rc = aos_lseek(fd, pos, whence);\n  return rc;\n#endif\n}\n\nint _mkdir_r(struct _reent *ptr, const char *name, int mode) {\n#ifndef CONF_VFS_ENABLE\n  /* return \"not supported\" */\n  ptr->_errno = -ENOSYS;\n  return -1;\n#else\n  int rc;\n\n  rc = aos_mkdir(name);\n  return rc;\n#endif\n}\n\nint _open_r(struct _reent *ptr, const char *file, int flags, int mode) {\n#ifndef CONF_VFS_ENABLE\n  /* return \"not supported\" */\n  ptr->_errno = -ENOSYS;\n  return -1;\n#else\n  int rc;\n\n  rc = aos_open(file, flags);\n  return rc;\n#endif\n}\n\nint _close_r(struct _reent *ptr, int fd) {\n#ifndef CONF_VFS_ENABLE\n  /* return \"not supported\" */\n  ptr->_errno = -ENOSYS;\n  return -1;\n#else\n  return aos_close(fd);\n#endif\n}\n\n_ssize_t _read_r(struct _reent *ptr, int fd, void *buf, size_t nbytes) {\n#ifndef CONF_VFS_ENABLE\n  /* return \"not supported\" */\n  ptr->_errno = -ENOSYS;\n  return -1;\n#else\n  _ssize_t rc;\n\n  rc = aos_read(fd, buf, nbytes);\n  return rc;\n#endif\n}\n\nint _rename_r(struct _reent *ptr, const char *old, const char *new) {\n#ifndef CONF_VFS_ENABLE\n  /* return \"not supported\" */\n  ptr->_errno = -ENOSYS;\n  return -1;\n#else\n  int rc;\n\n  rc = aos_rename(old, new);\n  return rc;\n#endif\n}\n\nint _stat_r(struct _reent *ptr, const char *file, struct stat *pstat) {\n#ifndef CONF_VFS_ENABLE\n  /* return \"not supported\" */\n  ptr->_errno = -ENOSYS;\n  return -1;\n#else\n  int rc;\n\n  rc = aos_stat(file, pstat);\n  return rc;\n#endif\n}\n\nint _unlink_r(struct _reent *ptr, const char *file) {\n#ifndef CONF_VFS_ENABLE\n  /* return \"not supported\" */\n  ptr->_errno = -ENOSYS;\n  return -1;\n#else\n  return aos_unlink(file);\n#endif\n}\n\nint _wait_r(struct _reent *ptr, int *status) {\n  /* return \"not supported\" */\n  ptr->_errno = -ENOSYS;\n  return -1;\n}\n\n_ssize_t _write_r(struct _reent *ptr, int fd, const void *buf, size_t nbytes) {\n#ifndef CONF_VFS_ENABLE\n  struct device *uart = device_find(\"debug_log\");\n  if ((STDOUT_FILENO == fd) || (STDERR_FILENO == fd)) {\n    device_write(uart, 0, (uint8_t *)buf, nbytes);\n  }\n  return 0;\n#else\n  _ssize_t rc;\n\n  rc = aos_write(fd, buf, nbytes);\n  return rc;\n#endif\n}\n\n// void *_malloc_r(struct _reent *ptr, size_t size) { return NULL; }\n\n// void *_realloc_r(struct _reent *ptr, void *old, size_t newlen) { return NULL; }\n\n// void *_calloc_r(struct _reent *ptr, size_t size, size_t len) { return NULL; }\n\n// void _free_r(struct _reent *ptr, void *addr) {}\n\nvoid *_sbrk_r(struct _reent *ptr, ptrdiff_t incr) { return NULL; }\n\n/* for exit() and abort() */\nvoid __attribute__((noreturn)) _exit(int status) {\n  while (1) {\n  }\n}\n\nvoid _system(const char *s) {}\n\nmode_t umask(mode_t mask) { return 022; }\n\nint flock(int fd, int operation) { return 0; }\n\n/*\nThese functions are implemented and replaced by the 'common/time.c' file\nint _gettimeofday_r(struct _reent *ptr, struct timeval *__tp, void *__tzp);\n_CLOCK_T_  _times_r(struct _reent *ptr, struct tms *ptms);\n*/\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/CMakeLists.txt",
    "content": "﻿################# Add global include #################\nlist(APPEND ADD_INCLUDE\n\"${CMAKE_CURRENT_SOURCE_DIR}/ring_buffer\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/soft_crc\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/memheap\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/misc\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/list\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/device\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/partition\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/bl_math\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/pid\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/timestamp\"\n)\n#######################################################\n\n################# Add private include #################\n# list(APPEND ADD_PRIVATE_INCLUDE\n# )\n#######################################################\n\n############## Add current dir source files ###########\nfile(GLOB_RECURSE sources\n\"${CMAKE_CURRENT_SOURCE_DIR}/ring_buffer/*.c\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/soft_crc/*.c\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/memheap/*.c\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/misc/*.c\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/device/*.c\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/partition/*.c\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/bl_math/*.c\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/pid/*.c\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/timestamp/*.c\"\n)\n\n#aux_source_directory(. sources)\nlist(APPEND ADD_SRCS  ${sources})\n#######################################################\n\n########### Add required/dependent components #########\n#list(APPEND ADD_REQUIREMENTS xxx)\n#######################################################\n\n############ Add static libs ##########################\n#list(APPEND ADD_STATIC_LIB \"libxxx.a\")\n#######################################################\n\n############ Add dynamic libs #########################\n# list(APPEND ADD_DYNAMIC_LIB \"libxxx.so\"\n# )\n#######################################################\n\n############ Add global compile option ################\n#add components denpend on this component\nstring(TOUPPER ${CHIP} CHIPNAME)\nlist(APPEND ADD_DEFINITIONS -D${CHIPNAME})\n#######################################################\n\n############ Add private compile option ################\n#add compile option for this component that won't affect other modules\n# list(APPEND ADD_PRIVATE_DEFINITIONS -Dxxx)\n#######################################################\n\ngenerate_library()\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/bl_math/arm_dsp_wrapper.c",
    "content": "/**\n * @file arm_dsp_wrapper.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n\n#include \"arm_dsp_wrapper.h\"\n\nvoid arm_fill_f32(float32_t value, float32_t *pDst, uint32_t blockSize) {\n  uint32_t blkCnt = blockSize >> 2u;\n\n  float32_t in1 = value;\n  float32_t in2 = value;\n  float32_t in3 = value;\n  float32_t in4 = value;\n\n  while (blkCnt > 0u) {\n    *pDst++ = in1;\n    *pDst++ = in2;\n    *pDst++ = in3;\n    *pDst++ = in4;\n\n    blkCnt--;\n  }\n\n  blkCnt = blockSize % 0x4u;\n\n  while (blkCnt > 0u) {\n    *pDst++ = value;\n    blkCnt--;\n  }\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/bl_math/arm_dsp_wrapper.h",
    "content": "/**\n * @file arm_dsp_wrapper.c\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n\n#ifndef __MY_MATH_F_H__\n#define __MY_MATH_F_H__\n\n#include \"misc.h\"\n#include \"math.h\"\n\ntypedef float float32_t;\n\n__INLINE__ float32_t arm_sqrt_f32(float32_t x)\n{\n    return sqrtf(x);\n}\n\n__INLINE__ float32_t arm_cos_f32(float32_t x)\n{\n    return cosf(x);\n}\n\nvoid arm_fill_f32(float32_t value, float32_t *pDst, uint32_t blockSize);\n\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/device/drv_device.c",
    "content": "/**\r\n * @file drv_device.c\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n#include \"drv_device.h\"\r\n\r\n#define DEVICE_CHECK_PARAM\r\n\r\n#define dev_open    (dev->open)\r\n#define dev_close   (dev->close)\r\n#define dev_read    (dev->read)\r\n#define dev_write   (dev->write)\r\n#define dev_control (dev->control)\r\n\r\ndlist_t device_head = DLIST_OBJECT_INIT(device_head);\r\n\r\n/**\r\n * This function get device list header\r\n *\r\n * @param None\r\n *\r\n * @return device header\r\n */\r\ndlist_t *device_get_list_header(void) { return &device_head; }\r\n\r\n/**\r\n * This function registers a device driver with specified name.\r\n *\r\n * @param dev the pointer of device driver structure\r\n * @param name the device driver's name\r\n * @param flags the capabilities flag of device\r\n *\r\n * @return the error code, DEVICE_EOK on initialization successfully.\r\n */\r\nint device_register(struct device *dev, const char *name) {\r\n  dlist_t *node;\r\n\r\n  dlist_for_each(node, &device_head) {\r\n    struct device *dev_obj;\r\n    dev_obj = dlist_entry(node, struct device, list);\r\n\r\n    if (dev_obj == dev) {\r\n      return -DEVICE_EEXIST;\r\n    }\r\n  }\r\n\r\n  strcpy(dev->name, name);\r\n\r\n  dlist_insert_after(&device_head, &(dev->list));\r\n  dev->status = DEVICE_REGISTERED;\r\n  return DEVICE_EOK;\r\n}\r\n\r\n/**\r\n * This function unregisters a device driver with specified name.\r\n *\r\n * @param dev the pointer of device driver structure\r\n * @param name the device driver's name\r\n * @param flags the capabilities flag of device\r\n *\r\n * @return the error code, DEVICE_EOK on initialization successfully.\r\n */\r\nint device_unregister(const char *name) {\r\n  struct device *dev = device_find(name);\r\n\r\n  if (!dev) {\r\n    return -DEVICE_ENODEV;\r\n  }\r\n  dev->status = DEVICE_UNREGISTER;\r\n  /* remove from old list */\r\n  dlist_remove(&(dev->list));\r\n  return DEVICE_EOK;\r\n}\r\n\r\n/**\r\n * This function finds a device driver by specified name.\r\n *\r\n * @param name the device driver's name\r\n *\r\n * @return the registered device driver on successful, or NULL on failure.\r\n */\r\nstruct device *device_find(const char *name) {\r\n  struct device *dev;\r\n  dlist_t       *node;\r\n\r\n  dlist_for_each(node, &device_head) {\r\n    dev = dlist_entry(node, struct device, list);\r\n\r\n    if (strncmp(dev->name, name, DEVICE_NAME_MAX) == 0) {\r\n      return dev;\r\n    }\r\n  }\r\n  return NULL;\r\n}\r\n\r\n/**\r\n * This function will open a device\r\n *\r\n * @param dev the pointer of device driver structure\r\n * @param oflag the flags for device open\r\n *\r\n * @return the result\r\n */\r\nint device_open(struct device *dev, uint16_t oflag) {\r\n#ifdef DEVICE_CHECK_PARAM\r\n  int retval = DEVICE_EOK;\r\n\r\n  if ((dev->status == DEVICE_REGISTERED) || (dev->status == DEVICE_CLOSED)) {\r\n    if (dev_open != NULL) {\r\n      retval      = dev_open(dev, oflag);\r\n      dev->status = DEVICE_OPENED;\r\n      dev->oflag |= oflag;\r\n    } else {\r\n      retval = -DEVICE_EFAULT;\r\n    }\r\n  } else {\r\n    retval = -DEVICE_EINVAL;\r\n  }\r\n\r\n  return retval;\r\n#else\r\n  return dev_open(dev, oflag);\r\n#endif\r\n}\r\n/**\r\n * This function will close a device\r\n *\r\n * @param dev the pointer of device driver structure\r\n *\r\n * @return the result\r\n */\r\nint device_close(struct device *dev) {\r\n#ifdef DEVICE_CHECK_PARAM\r\n  int retval = DEVICE_EOK;\r\n\r\n  if (dev->status == DEVICE_OPENED) {\r\n    if (dev_close != NULL) {\r\n      retval      = dev_close(dev);\r\n      dev->status = DEVICE_CLOSED;\r\n      dev->oflag  = 0;\r\n    } else {\r\n      retval = -DEVICE_EFAULT;\r\n    }\r\n  } else {\r\n    retval = -DEVICE_EINVAL;\r\n  }\r\n\r\n  return retval;\r\n#else\r\n  return dev_close(dev);\r\n#endif\r\n}\r\n/**\r\n * This function will perform a variety of control functions on devices.\r\n *\r\n * @param dev the pointer of device driver structure\r\n * @param cmd the command sent to device\r\n * @param arg the argument of command\r\n *\r\n * @return the result\r\n */\r\nint device_control(struct device *dev, int cmd, void *args) {\r\n#ifdef DEVICE_CHECK_PARAM\r\n  int retval = DEVICE_EOK;\r\n\r\n  if (dev->status > DEVICE_UNREGISTER) {\r\n    if (dev_control != NULL) {\r\n      retval = dev_control(dev, cmd, args);\r\n    } else {\r\n      retval = -DEVICE_EFAULT;\r\n    }\r\n  } else {\r\n    retval = -DEVICE_EINVAL;\r\n  }\r\n\r\n  return retval;\r\n#else\r\n  return dev_control(dev, cmd, args);\r\n#endif\r\n}\r\n/**\r\n * This function will write some data to a device.\r\n *\r\n * @param dev the pointer of device driver structure\r\n * @param pos the position of written\r\n * @param buffer the data buffer to be written to device\r\n * @param size the size of buffer\r\n *\r\n * @return the actually written size on successful, otherwise negative returned.\r\n */\r\nint device_write(struct device *dev, uint32_t pos, const void *buffer, uint32_t size) {\r\n#ifdef DEVICE_CHECK_PARAM\r\n  int retval = DEVICE_EOK;\r\n\r\n  if (dev->status == DEVICE_OPENED) {\r\n    if (dev_write != NULL) {\r\n      retval = dev_write(dev, pos, buffer, size);\r\n    } else {\r\n      retval = -DEVICE_EFAULT;\r\n    }\r\n  } else {\r\n    retval = -DEVICE_EINVAL;\r\n  }\r\n\r\n  return retval;\r\n#else\r\n  return dev_write(dev, pos, buffer, size);\r\n#endif\r\n}\r\n/**\r\n * This function will read some data from a device.\r\n *\r\n * @param dev the pointer of device driver structure\r\n * @param pos the position of reading\r\n * @param buffer the data buffer to save read data\r\n * @param size the size of buffer\r\n *\r\n * @return the actually read size on successful, otherwise negative returned.\r\n */\r\nint device_read(struct device *dev, uint32_t pos, void *buffer, uint32_t size) {\r\n#ifdef DEVICE_CHECK_PARAM\r\n  int retval = DEVICE_EOK;\r\n\r\n  if (dev->status == DEVICE_OPENED) {\r\n    if (dev_read != NULL) {\r\n      retval = dev_read(dev, pos, buffer, size);\r\n    } else {\r\n      retval = -DEVICE_EFAULT;\r\n    }\r\n  } else {\r\n    retval = -DEVICE_EINVAL;\r\n  }\r\n\r\n  return retval;\r\n#else\r\n  return dev_read(dev, pos, buffer, size);\r\n#endif\r\n}\r\n/**\r\n * This function will read some data from a device.\r\n *\r\n * @param dev the pointer of device driver structure\r\n * @param pos the position of reading\r\n * @param buffer the data buffer to save read data\r\n * @param size the size of buffer\r\n *\r\n * @return the actually read size on successful, otherwise negative returned.\r\n */\r\nint device_set_callback(struct device *dev, void (*callback)(struct device *dev, void *args, uint32_t size, uint32_t event)) {\r\n  int retval = DEVICE_EOK;\r\n\r\n  if (dev->status > DEVICE_UNREGISTER) {\r\n    if (callback != NULL) {\r\n      dev->callback = callback;\r\n    } else {\r\n      retval = -DEVICE_EFAULT;\r\n    }\r\n  } else {\r\n    retval = -DEVICE_EINVAL;\r\n  }\r\n\r\n  return retval;\r\n}"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/device/drv_device.h",
    "content": "/**\n * @file drv_device.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef __DRV_DEVICE_H__\n#define __DRV_DEVICE_H__\n\n#include \"drv_list.h\"\n#include \"stdio.h\"\n\n#define DEVICE_NAME_MAX 20 /* max device name*/\n\n#define DEVICE_OFLAG_DEFAULT   0x000 /* open with default  */\n#define DEVICE_OFLAG_STREAM_TX 0x001 /* open with poll tx */\n#define DEVICE_OFLAG_STREAM_RX 0x002 /* open with poll rx */\n#define DEVICE_OFLAG_INT_TX    0x004 /* open with interrupt tx */\n#define DEVICE_OFLAG_INT_RX    0x008 /* open with interrupt rx */\n#define DEVICE_OFLAG_DMA_TX    0x010 /* open with dma tx */\n#define DEVICE_OFLAG_DMA_RX    0x020 /* open with dma rx */\n\n#define DEVICE_CTRL_SET_INT        0x01 /* set interrupt */\n#define DEVICE_CTRL_CLR_INT        0x02 /* clear interrupt */\n#define DEVICE_CTRL_GET_INT        0x03 /* get interrupt status*/\n#define DEVICE_CTRL_RESUME         0x04 /* resume device */\n#define DEVICE_CTRL_SUSPEND        0x05 /* suspend device */\n#define DEVICE_CTRL_CONFIG         0x06 /* config device */\n#define DEVICE_CTRL_GET_CONFIG     0x07 /* get device configuration */\n#define DEVICE_CTRL_ATTACH_TX_DMA  0x08 /* deivce link tx dma */\n#define DEVICE_CTRL_ATTACH_RX_DMA  0x09 /* deivce link rx dma */\n#define DEVICE_CTRL_TX_DMA_SUSPEND 0x0a /* deivce suspend tx dma */\n#define DEVICE_CTRL_RX_DMA_SUSPEND 0x0b /* deivce suspend rx dma */\n#define DEVICE_CTRL_TX_DMA_RESUME  0x0c /* deivce resume tx dma */\n#define DEVICE_CTRL_RX_DMA_RESUME  0x0d /* deivce resume rx dma */\n#define DEVICE_CTRL_RESVD1         0x0E\n#define DEVICE_CTRL_RESVD2         0x0F\n\n/*\n * POSIX Error codes\n */\n\n#define DEVICE_EOK      0\n#define DEVICE_EFAULT   14 /* Bad address */\n#define DEVICE_EEXIST   17 /* device exists */\n#define DEVICE_ENODEV   19 /* No such device */\n#define DEVICE_EINVAL   22 /* Invalid argument */\n#define DEVICE_ENOSPACE 23 /* No more Device for Allocate */\n\n#define __ASSERT_PRINT(fmt, ...) printf(fmt, ##__VA_ARGS__)\n\n#define __ASSERT_LOC(test)                          \\\n    __ASSERT_PRINT(\"ASSERTION FAIL [%s] @ %s:%d\\n\", \\\n                   #test,                           \\\n                   __FILE__, __LINE__)\n\n#define DEVICE_ASSERT(test, fmt, ...)           \\\n    do {                                        \\\n        if (!(test)) {                          \\\n            __ASSERT_LOC(test);                 \\\n            __ASSERT_PRINT(fmt, ##__VA_ARGS__); \\\n        }                                       \\\n    } while (0)\n\nenum device_class_type {\n    DEVICE_CLASS_NONE = 0,\n    DEVICE_CLASS_GPIO,\n    DEVICE_CLASS_UART,\n    DEVICE_CLASS_SPI,\n    DEVICE_CLASS_I2C,\n    DEVICE_CLASS_ADC,\n    DEVICE_CLASS_DAC,\n    DEVICE_CLASS_DMA,\n    DEVICE_CLASS_TIMER,\n    DEVICE_CLASS_PWM,\n    DEVICE_CLASS_QDEC,\n    DEVICE_CLASS_SDIO,\n    DEVICE_CLASS_USB,\n    DEVICE_CLASS_RMII,\n    DEVICE_CLASS_I2S,\n    DEVICE_CLASS_CAMERA,\n    DEVICE_CLASS_SEC_HASH,\n    DEVICE_CLASS_KEYSCAN,\n};\n\nenum device_status_type {\n    DEVICE_UNREGISTER = 0,\n    DEVICE_REGISTERED,\n    DEVICE_OPENED,\n    DEVICE_CLOSED\n};\n\nstruct device {\n    char name[DEVICE_NAME_MAX];     /*name of device */\n    dlist_t list;                   /*list node of device */\n    enum device_status_type status; /*status of device */\n    enum device_class_type type;    /*type of device */\n    uint16_t oflag;                 /*oflag of device */\n\n    int (*open)(struct device *dev, uint16_t oflag);\n    int (*close)(struct device *dev);\n    int (*control)(struct device *dev, int cmd, void *args);\n    int (*write)(struct device *dev, uint32_t pos, const void *buffer, uint32_t size);\n    int (*read)(struct device *dev, uint32_t pos, void *buffer, uint32_t size);\n    void (*callback)(struct device *dev, void *args, uint32_t size, uint32_t event);\n    void *handle;\n};\n\nint device_register(struct device *dev, const char *name);\nint device_unregister(const char *name);\nstruct device *device_find(const char *name);\nint device_open(struct device *dev, uint16_t oflag);\nint device_close(struct device *dev);\nint device_control(struct device *dev, int cmd, void *args);\nint device_write(struct device *dev, uint32_t pos, const void *buffer, uint32_t size);\nint device_read(struct device *dev, uint32_t pos, void *buffer, uint32_t size);\nint device_set_callback(struct device *dev, void (*callback)(struct device *dev, void *args, uint32_t size, uint32_t event));\ndlist_t *device_get_list_header(void);\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/list/drv_list.h",
    "content": "/**\r\n * @file drv_list.h\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n#ifndef __DRV_LIST_H__\r\n#define __DRV_LIST_H__\r\n\r\n#include \"string.h\"\r\n#include \"stdint.h\"\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n * container_of - return the member address of ptr, if the type of ptr is the\r\n * struct type.\r\n */\r\n#define container_of(ptr, type, member) \\\r\n    ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member)))\r\n\r\n/**\r\n * Double List structure\r\n */\r\nstruct dlist_node {\r\n    struct dlist_node *next; /**< point to next node. */\r\n    struct dlist_node *prev; /**< point to prev node. */\r\n};\r\ntypedef struct dlist_node dlist_t; /**< Type for lists. */\r\n\r\n/**\r\n * @brief initialize a list\r\n *\r\n * @param l list to be initialized\r\n */\r\nstatic inline void dlist_init(dlist_t *l)\r\n{\r\n    l->next = l->prev = l;\r\n}\r\n\r\n/**\r\n * @brief insert a node after a list\r\n *\r\n * @param l list to insert it\r\n * @param n new node to be inserted\r\n */\r\nstatic inline void dlist_insert_after(dlist_t *l, dlist_t *n)\r\n{\r\n    l->next->prev = n;\r\n    n->next = l->next;\r\n\r\n    l->next = n;\r\n    n->prev = l;\r\n}\r\n\r\n/**\r\n * @brief insert a node before a list\r\n *\r\n * @param n new node to be inserted\r\n * @param l list to insert it\r\n */\r\nstatic inline void dlist_insert_before(dlist_t *l, dlist_t *n)\r\n{\r\n    l->prev->next = n;\r\n    n->prev = l->prev;\r\n\r\n    l->prev = n;\r\n    n->next = l;\r\n}\r\n\r\n/**\r\n * @brief remove node from list.\r\n * @param n the node to remove from the list.\r\n */\r\nstatic inline void dlist_remove(dlist_t *n)\r\n{\r\n    n->next->prev = n->prev;\r\n    n->prev->next = n->next;\r\n\r\n    n->next = n->prev = n;\r\n}\r\n\r\n/**\r\n * @brief move node from list.\r\n * @param n the node to remove from the list.\r\n */\r\nstatic inline void dlist_move_head(dlist_t *l, dlist_t *n)\r\n{\r\n    dlist_remove(n);\r\n    dlist_insert_after(l, n);\r\n}\r\n\r\n/**\r\n * @brief move node from list.\r\n * @param n the node to remove from the list.\r\n */\r\nstatic inline void dlist_move_tail(dlist_t *l, dlist_t *n)\r\n{\r\n    dlist_remove(n);\r\n    dlist_insert_before(l, n);\r\n}\r\n\r\n/**\r\n * @brief tests whether a list is empty\r\n * @param l the list to test.\r\n */\r\nstatic inline int dlist_isempty(const dlist_t *l)\r\n{\r\n    return l->next == l;\r\n}\r\n\r\n/**\r\n * @brief get the list length\r\n * @param l the list to get.\r\n */\r\nstatic inline unsigned int dlist_len(const dlist_t *l)\r\n{\r\n    unsigned int len = 0;\r\n    const dlist_t *p = l;\r\n\r\n    while (p->next != l) {\r\n        p = p->next;\r\n        len++;\r\n    }\r\n\r\n    return len;\r\n}\r\n\r\n/**\r\n * @brief initialize a dlist object\r\n */\r\n#define DLIST_OBJECT_INIT(object) \\\r\n    {                             \\\r\n        &(object), &(object)      \\\r\n    }\r\n/**\r\n * @brief initialize a dlist object\r\n */\r\n#define DLIST_DEFINE(list) \\\r\n    dlist_t list = { &(list), &(list) }\r\n\r\n/**\r\n * @brief get the struct for this entry\r\n * @param node the entry point\r\n * @param type the type of structure\r\n * @param member the name of list in structure\r\n */\r\n#define dlist_entry(node, type, member) \\\r\n    container_of(node, type, member)\r\n\r\n/**\r\n * dlist_first_entry - get the first element from a list\r\n * @ptr:    the list head to take the element from.\r\n * @type:   the type of the struct this is embedded in.\r\n * @member: the name of the list_struct within the struct.\r\n *\r\n * Note, that list is expected to be not empty.\r\n */\r\n#define dlist_first_entry(ptr, type, member) \\\r\n    dlist_entry((ptr)->next, type, member)\r\n/**\r\n * dlist_first_entry_or_null - get the first element from a list\r\n * @ptr:    the list head to take the element from.\r\n * @type:   the type of the struct this is embedded in.\r\n * @member: the name of the list_struct within the struct.\r\n *\r\n * Note, that list is expected to be not empty.\r\n */\r\n#define dlist_first_entry_or_null(ptr, type, member) \\\r\n    (dlist_isempty(ptr) ? NULL : dlist_first_entry(ptr, type, member))\r\n\r\n/**\r\n * dlist_for_each - iterate over a list\r\n * @pos:    the dlist_t * to use as a loop cursor.\r\n * @head:   the head for your list.\r\n */\r\n#define dlist_for_each(pos, head) \\\r\n    for (pos = (head)->next; pos != (head); pos = pos->next)\r\n\r\n/**\r\n * dlist_for_each_prev - iterate over a list\r\n * @pos:    the dlist_t * to use as a loop cursor.\r\n * @head:   the head for your list.\r\n */\r\n#define dlist_for_each_prev(pos, head) \\\r\n    for (pos = (head)->prev; pos != (head); pos = pos->prev)\r\n\r\n/**\r\n * dlist_for_each_safe - iterate over a list safe against removal of list entry\r\n * @pos:    the dlist_t * to use as a loop cursor.\r\n * @n:      another dlist_t * to use as temporary storage\r\n * @head:   the head for your list.\r\n */\r\n#define dlist_for_each_safe(pos, n, head)                  \\\r\n    for (pos = (head)->next, n = pos->next; pos != (head); \\\r\n         pos = n, n = pos->next)\r\n\r\n#define dlist_for_each_prev_safe(pos, n, head)             \\\r\n    for (pos = (head)->prev, n = pos->prev; pos != (head); \\\r\n         pos = n, n = pos->prev)\r\n/**\r\n * dlist_for_each_entry  -   iterate over list of given type\r\n * @pos:    the type * to use as a loop cursor.\r\n * @head:   the head for your list.\r\n * @member: the name of the list_struct within the struct.\r\n */\r\n#define dlist_for_each_entry(pos, head, member)                 \\\r\n    for (pos = dlist_entry((head)->next, typeof(*pos), member); \\\r\n         &pos->member != (head);                                \\\r\n         pos = dlist_entry(pos->member.next, typeof(*pos), member))\r\n\r\n/**\r\n * dlist_for_each_entry_reverse  -   iterate over list of given type\r\n * @pos:    the type * to use as a loop cursor.\r\n * @head:   the head for your list.\r\n * @member: the name of the list_struct within the struct.\r\n */\r\n#define dlist_for_each_entry_reverse(pos, head, member)         \\\r\n    for (pos = dlist_entry((head)->prev, typeof(*pos), member); \\\r\n         &pos->member != (head);                                \\\r\n         pos = dlist_entry(pos->member.prev, typeof(*pos), member))\r\n\r\n/**\r\n * dlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry\r\n * @pos:    the type * to use as a loop cursor.\r\n * @n:      another type * to use as temporary storage\r\n * @head:   the head for your list.\r\n * @member: the name of the list_struct within the struct.\r\n */\r\n#define dlist_for_each_entry_safe(pos, n, head, member)          \\\r\n    for (pos = dlist_entry((head)->next, typeof(*pos), member),  \\\r\n        n = dlist_entry(pos->member.next, typeof(*pos), member); \\\r\n         &pos->member != (head);                                 \\\r\n         pos = n, n = dlist_entry(n->member.next, typeof(*n), member))\r\n\r\n/**\r\n * dlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry\r\n * @pos:    the type * to use as a loop cursor.\r\n * @n:      another type * to use as temporary storage\r\n * @head:   the head for your list.\r\n * @member: the name of the list_struct within the struct.\r\n */\r\n#define dlist_for_each_entry_safe_reverse(pos, n, head, member)  \\\r\n    for (pos = dlist_entry((head)->prev, typeof(*pos), field),   \\\r\n        n = dlist_entry(pos->member.prev, typeof(*pos), member); \\\r\n         &pos->member != (head);                                 \\\r\n         pos = n, n = dlist_entry(pos->member.prev, typeof(*pos), member))\r\n\r\n/**\r\n * Single List structure\r\n */\r\nstruct slist_node {\r\n    struct slist_node *next; /**< point to next node. */\r\n};\r\ntypedef struct slist_node slist_t; /**< Type for single list. */\r\n\r\n/**\r\n * @brief initialize a single list\r\n *\r\n * @param l the single list to be initialized\r\n */\r\nstatic inline void slist_init(slist_t *l)\r\n{\r\n    l->next = NULL;\r\n}\r\n\r\nstatic inline void slist_add_head(slist_t *l, slist_t *n)\r\n{\r\n    n->next = l->next;\r\n    l->next = n;\r\n}\r\n\r\nstatic inline void slist_add_tail(slist_t *l, slist_t *n)\r\n{\r\n    while (l->next) {\r\n        l = l->next;\r\n    }\r\n\r\n    /* append the node to the tail */\r\n    l->next = n;\r\n    n->next = NULL;\r\n}\r\n\r\nstatic inline void slist_insert(slist_t *l, slist_t *next, slist_t *n)\r\n{\r\n    if (!next) {\r\n        slist_add_tail(next, l);\r\n        return;\r\n    }\r\n\r\n    while (l->next) {\r\n        if (l->next == next) {\r\n            l->next = n;\r\n            n->next = next;\r\n        }\r\n\r\n        l = l->next;\r\n    }\r\n}\r\n\r\nstatic inline slist_t *slist_remove(slist_t *l, slist_t *n)\r\n{\r\n    /* remove slist head */\r\n    while (l->next && l->next != n) {\r\n        l = l->next;\r\n    }\r\n\r\n    /* remove node */\r\n    if (l->next != (slist_t *)0) {\r\n        l->next = l->next->next;\r\n    }\r\n\r\n    return l;\r\n}\r\n\r\nstatic inline unsigned int slist_len(const slist_t *l)\r\n{\r\n    unsigned int len = 0;\r\n    const slist_t *list = l->next;\r\n\r\n    while (list != NULL) {\r\n        list = list->next;\r\n        len++;\r\n    }\r\n\r\n    return len;\r\n}\r\n\r\nstatic inline unsigned int slist_contains(slist_t *l, slist_t *n)\r\n{\r\n    while (l->next) {\r\n        if (l->next == n) {\r\n            return 0;\r\n        }\r\n\r\n        l = l->next;\r\n    }\r\n\r\n    return 1;\r\n}\r\n\r\nstatic inline slist_t *slist_head(slist_t *l)\r\n{\r\n    return l->next;\r\n}\r\n\r\nstatic inline slist_t *slist_tail(slist_t *l)\r\n{\r\n    while (l->next) {\r\n        l = l->next;\r\n    }\r\n\r\n    return l;\r\n}\r\n\r\nstatic inline slist_t *slist_next(slist_t *n)\r\n{\r\n    return n->next;\r\n}\r\n\r\nstatic inline int slist_isempty(slist_t *l)\r\n{\r\n    return l->next == NULL;\r\n}\r\n\r\n/**\r\n * @brief initialize a slist object\r\n */\r\n#define SLIST_OBJECT_INIT(object) \\\r\n    {                             \\\r\n        NULL                      \\\r\n    }\r\n\r\n/**\r\n * @brief initialize a slist object\r\n */\r\n#define SLIST_DEFINE(slist) \\\r\n    slist_t slist = { NULL }\r\n\r\n/**\r\n * @brief get the struct for this single list node\r\n * @param node the entry point\r\n * @param type the type of structure\r\n * @param member the name of list in structure\r\n */\r\n#define slist_entry(node, type, member) \\\r\n    container_of(node, type, member)\r\n\r\n/**\r\n * slist_first_entry - get the first element from a slist\r\n * @ptr:    the slist head to take the element from.\r\n * @type:   the type of the struct this is embedded in.\r\n * @member: the name of the slist_struct within the struct.\r\n *\r\n * Note, that slist is expected to be not empty.\r\n */\r\n#define slist_first_entry(ptr, type, member) \\\r\n    slist_entry((ptr)->next, type, member)\r\n\r\n/**\r\n * slist_tail_entry - get the tail element from a slist\r\n * @ptr:    the slist head to take the element from.\r\n * @type:   the type of the struct this is embedded in.\r\n * @member: the name of the slist_struct within the struct.\r\n *\r\n * Note, that slist is expected to be not empty.\r\n */\r\n#define slist_tail_entry(ptr, type, member) \\\r\n    slist_entry(slist_tail(ptr), type, member)\r\n\r\n/**\r\n * slist_first_entry_or_null - get the first element from a slist\r\n * @ptr:    the slist head to take the element from.\r\n * @type:   the type of the struct this is embedded in.\r\n * @member: the name of the slist_struct within the struct.\r\n *\r\n * Note, that slist is expected to be not empty.\r\n */\r\n#define slist_first_entry_or_null(ptr, type, member) \\\r\n    (slist_isempty(ptr) ? NULL : slist_first_entry(ptr, type, member))\r\n\r\n/**\r\n * slist_for_each - iterate over a single list\r\n * @pos:    the slist_t * to use as a loop cursor.\r\n * @head:   the head for your single list.\r\n */\r\n#define slist_for_each(pos, head) \\\r\n    for (pos = (head)->next; pos != NULL; pos = pos->next)\r\n\r\n#define slist_for_each_safe(pos, next, head)        \\\r\n    for (pos = (head)->next, next = pos->next; pos; \\\r\n         pos = next, next = pos->next)\r\n\r\n/**\r\n * slist_for_each_entry  -   iterate over single list of given type\r\n * @pos:    the type * to use as a loop cursor.\r\n * @head:   the head for your single list.\r\n * @member: the name of the list_struct within the struct.\r\n */\r\n#define slist_for_each_entry(pos, head, member)                 \\\r\n    for (pos = slist_entry((head)->next, typeof(*pos), member); \\\r\n         &pos->member != (NULL);                                \\\r\n         pos = slist_entry(pos->member.next, typeof(*pos), member))\r\n\r\n#define slist_for_each_entry_safe(pos, n, head, member)          \\\r\n    for (pos = slist_entry((head)->next, typeof(*pos), member),  \\\r\n        n = slist_entry(pos->member.next, typeof(*pos), member); \\\r\n         &pos->member != (NULL);                                 \\\r\n         pos = n, n = slist_entry(pos->member.next, typeof(*pos), member))\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/misc/compiler/common.h",
    "content": "#ifndef __COMMON_H\n#define __COMMON_H\n\n/**\n * @brief Memory access macro\n */\n#define BL_RD_WORD(addr)       (*((volatile uint32_t *)(uintptr_t)(addr)))\n#define BL_WR_WORD(addr, val)  ((*(volatile uint32_t *)(uintptr_t)(addr)) = (val))\n#define BL_RD_SHORT(addr)      (*((volatile uint16_t *)(uintptr_t)(addr)))\n#define BL_WR_SHORT(addr, val) ((*(volatile uint16_t *)(uintptr_t)(addr)) = (val))\n#define BL_RD_BYTE(addr)       (*((volatile uint8_t *)(uintptr_t)(addr)))\n#define BL_WR_BYTE(addr, val)  ((*(volatile uint8_t *)(uintptr_t)(addr)) = (val))\n#define BL_RDWD_FRM_BYTEP(p)   ((p[3] << 24) | (p[2] << 16) | (p[1] << 8) | (p[0]))\n\n#define BL_WRWD_TO_BYTEP(p, val)                                                                                                                                                                       \\\n  {                                                                                                                                                                                                    \\\n    p[0] = val & 0xff;                                                                                                                                                                                 \\\n    p[1] = (val >> 8) & 0xff;                                                                                                                                                                          \\\n    p[2] = (val >> 16) & 0xff;                                                                                                                                                                         \\\n    p[3] = (val >> 24) & 0xff;                                                                                                                                                                         \\\n  }\n/**\n * @brief Register access macro\n */\n#define BL_RD_REG16(addr, regname)                BL_RD_SHORT(addr + regname##_OFFSET)\n#define BL_WR_REG16(addr, regname, val)           BL_WR_SHORT(addr + regname##_OFFSET, val)\n#define BL_RD_REG(addr, regname)                  BL_RD_WORD(addr + regname##_OFFSET)\n#define BL_WR_REG(addr, regname, val)             BL_WR_WORD(addr + regname##_OFFSET, val)\n#define BL_SET_REG_BIT(val, bitname)              ((val) | (1U << bitname##_POS))\n#define BL_CLR_REG_BIT(val, bitname)              ((val) & bitname##_UMSK)\n#define BL_GET_REG_BITS_VAL(val, bitname)         (((val) & bitname##_MSK) >> bitname##_POS)\n#define BL_SET_REG_BITS_VAL(val, bitname, bitval) (((val) & bitname##_UMSK) | ((uint32_t)(bitval) << bitname##_POS))\n#define BL_IS_REG_BIT_SET(val, bitname)           (((val) & (1U << (bitname##_POS))) != 0)\n#define BL_DRV_DUMMY                                                                                                                                                                                   \\\n  {                                                                                                                                                                                                    \\\n    __ASM volatile(\"nop\");                                                                                                                                                                             \\\n    __ASM volatile(\"nop\");                                                                                                                                                                             \\\n    __ASM volatile(\"nop\");                                                                                                                                                                             \\\n    __ASM volatile(\"nop\");                                                                                                                                                                             \\\n  }\n\n/* Std driver attribute macro*/\n#ifndef BFLB_USE_CUSTOM_LD_SECTIONS\n// #define ATTR_UNI_SYMBOL\n#define ATTR_STRINGIFY(x)               #x\n#define ATTR_TOSTRING(x)                ATTR_STRINGIFY(x)\n#define ATTR_UNI_SYMBOL                 __FILE__ ATTR_TOSTRING(__LINE__)\n#define ATTR_CLOCK_SECTION              __attribute__((section(\".sclock_rlt_code.\" ATTR_UNI_SYMBOL)))\n#define ATTR_CLOCK_CONST_SECTION        __attribute__((section(\".sclock_rlt_const.\" ATTR_UNI_SYMBOL)))\n#define ATTR_TCM_SECTION                __attribute__((section(\".tcm_code.\" ATTR_UNI_SYMBOL)))\n#define ATTR_TCM_CONST_SECTION          __attribute__((section(\".tcm_const.\" ATTR_UNI_SYMBOL)))\n#define ATTR_DTCM_SECTION               __attribute__((section(\".tcm_data\")))\n#define ATTR_HSRAM_SECTION              __attribute__((section(\".hsram_code\")))\n#define ATTR_DMA_RAM_SECTION            __attribute__((section(\".system_ram\")))\n#define ATTR_NOCACHE_RAM_SECTION        __attribute__((section(\".nocache_ram\")))\n#define ATTR_NOCACHE_NOINIT_RAM_SECTION __attribute__((section(\".nocache_noinit_ram\")))\n#define ATTR_HBN_RAM_SECTION            __attribute__((section(\".hbn_ram_code\")))\n#define ATTR_HBN_RAM_CONST_SECTION      __attribute__((section(\".hbn_ram_data\")))\n#define ATTR_EALIGN(x)                  __attribute__((aligned(x)))\n#define ATTR_FALLTHROUGH()              __attribute__((fallthrough))\n#define ATTR_USED                       __attribute__((__used__))\n#else\n#include \"bl_ld_sections.h\"\n#endif /* BFLB_USE_CUSTOM_LD_SECTIONS */\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/misc/compiler/gcc.h",
    "content": "#ifndef __GCC_H\r\n#define __GCC_H\r\n\r\n#ifndef __ORDER_BIG_ENDIAN__\r\n#define __ORDER_BIG_ENDIAN__ (1)\r\n#endif\r\n\r\n#ifndef __ORDER_LITTLE_ENDIAN__\r\n#define __ORDER_LITTLE_ENDIAN__ (2)\r\n#endif\r\n\r\n#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__\r\n\r\n/* CPP header guards */\r\n#ifdef __cplusplus\r\n#define EXTERN_C_BEGIN extern \"C\" {\r\n#define EXTERN_C_END   }\r\n#else\r\n#define EXTERN_C_BEGIN\r\n#define EXTERN_C_END\r\n#endif\r\n\r\n#define __MACRO_BEGIN do {\r\n#define __MACRO_END \\\r\n    }               \\\r\n    while (0)\r\n\r\n#if defined(__GNUC__)\r\n#ifndef __ASM\r\n#define __ASM __asm\r\n#endif\r\n#ifndef __INLINE\r\n#define __INLINE inline\r\n#endif\r\n#ifndef __INLINE__\r\n#define __INLINE__ inline\r\n#endif\r\n#ifndef __ALWAYS_INLINE\r\n#define __ALWAYS_INLINE inline __attribute__((always_inline))\r\n#endif\r\n#ifndef __ALWAYS_STATIC_INLINE\r\n#define __ALWAYS_STATIC_INLINE __attribute__((always_inline)) static inline\r\n#endif\r\n#ifndef __STATIC_INLINE\r\n#define __STATIC_INLINE static inline\r\n#endif\r\n#ifndef __NO_RETURN\r\n#define __NO_RETURN __attribute__((noreturn))\r\n#endif\r\n#ifndef __USED\r\n#define __USED __attribute__((used))\r\n#endif\r\n#ifndef __UNUSED__\r\n#define __UNUSED__ __attribute__((__unused__))\r\n#endif\r\n#ifndef __WEAK\r\n#define __WEAK __attribute__((weak))\r\n#endif\r\n#ifndef __WEAK__\r\n#define __WEAK__ __attribute__((weak))\r\n#endif\r\n#ifndef __PACKED\r\n#define __PACKED __attribute__((packed, aligned(1)))\r\n#endif\r\n#ifndef __PACKED__\r\n#define __PACKED__ __attribute__((packed))\r\n#endif\r\n#ifndef __PACKED_STRUCT\r\n#define __PACKED_STRUCT struct __attribute__((packed, aligned(1)))\r\n#endif\r\n#ifndef __PACKED_UNION\r\n#define __PACKED_UNION union __attribute__((packed, aligned(1)))\r\n#endif\r\n#ifndef __IRQ\r\n#define __IRQ __attribute__((interrupt))\r\n#endif\r\n#ifndef __IRQ_ALIGN64\r\n#define __IRQ_ALIGN64 __attribute__((interrupt, aligned(64)))\r\n#endif\r\n#ifndef ALIGN4\r\n#define ALIGN4 __attribute((aligned(4)))\r\n#endif\r\n#ifndef PACK_START\r\n#define PACK_START\r\n#endif\r\n#ifndef PACK_END\r\n#define PACK_END __attribute__((packed))\r\n#endif\r\n#ifndef likely\r\n#define likely(x) __builtin_expect(!!(x), 1)\r\n#endif\r\n#ifndef unlikely\r\n#define unlikely(x) __builtin_expect(!!(x), 0)\r\n#endif\r\n#ifndef __ALIGNED__\r\n#define __ALIGNED__(x) __attribute__((aligned(x)))\r\n#endif\r\n#ifndef SECTION\r\n#define SECTION(x) __attribute__((section(x)))\r\n#endif\r\n#ifndef __CONST__\r\n#define __CONST__ __attribute__((__const__))\r\n#endif\r\n#ifndef __NAKED__\r\n#define __NAKED__ __attribute__((naked))\r\n#endif\r\n#ifndef __deprecated\r\n#define __deprecated __attribute__((deprecated))\r\n#endif\r\n#endif\r\n\r\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/misc/misc.c",
    "content": "/**\n * @file misc.c\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#include \"misc.h\"\n\n#ifndef BFLB_USE_ROM_DRIVER\n/****************************************************************************/ /**\n                                                                                * @brief  Char memcpy\n                                                                                *\n                                                                                * @param  dst: Destination\n                                                                                * @param  src: Source\n                                                                                * @param  n:  Count of char\n                                                                                *\n                                                                                * @return Destination pointer\n                                                                                *\n                                                                                *******************************************************************************/\n__WEAK__ void *ATTR_TCM_SECTION arch_memcpy(void *dst, const void *src, uint32_t n) {\n  const uint8_t *p = src;\n  uint8_t       *q = dst;\n\n  while (n--) {\n    *q++ = *p++;\n  }\n\n  return dst;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Word memcpy\n                                                                                *\n                                                                                * @param  dst: Destination\n                                                                                * @param  src: Source\n                                                                                * @param  n:  Count of words\n                                                                                *\n                                                                                * @return Destination pointer\n                                                                                *\n                                                                                *******************************************************************************/\n__WEAK__ uint32_t *ATTR_TCM_SECTION arch_memcpy4(uint32_t *dst, const uint32_t *src, uint32_t n) {\n  const uint32_t *p = src;\n  uint32_t       *q = dst;\n\n  while (n--) {\n    *q++ = *p++;\n  }\n\n  return dst;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Fast memcpy\n                                                                                *\n                                                                                * @param  dst: Destination\n                                                                                * @param  src: Source\n                                                                                * @param  n:  Count of bytes\n                                                                                *\n                                                                                * @return Destination pointer\n                                                                                *\n                                                                                *******************************************************************************/\n__WEAK__ void *ATTR_TCM_SECTION arch_memcpy_fast(void *pdst, const void *psrc, uint32_t n) {\n  uint32_t left, done, i = 0;\n  uint8_t *dst = (uint8_t *)pdst;\n  uint8_t *src = (uint8_t *)psrc;\n\n  if (((uint32_t)(uintptr_t)dst & 0x3) == 0 && ((uint32_t)(uintptr_t)src & 0x3) == 0) {\n    arch_memcpy4((uint32_t *)dst, (const uint32_t *)src, n >> 2);\n    left = n % 4;\n    done = n - left;\n\n    while (i < left) {\n      dst[done + i] = src[done + i];\n      i++;\n    }\n  } else {\n    arch_memcpy(dst, src, n);\n  }\n\n  return dst;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  char memset\n                                                                                *\n                                                                                * @param  dst: Destination\n                                                                                * @param  val: Value to set\n                                                                                * @param  n: Count of char\n                                                                                *\n                                                                                * @return Destination pointer\n                                                                                *\n                                                                                *******************************************************************************/\n__WEAK__ void *ATTR_TCM_SECTION arch_memset(void *s, uint8_t c, uint32_t n) {\n  uint8_t *p = (uint8_t *)s;\n\n  while (n > 0) {\n    *p++ = (uint8_t)c;\n    --n;\n  }\n\n  return s;\n}\n/****************************************************************************/ /**\n                                                                                * @brief  Word memset\n                                                                                *\n                                                                                * @param  dst: Destination\n                                                                                * @param  val: Value to set\n                                                                                * @param  n: Count of words\n                                                                                *\n                                                                                * @return Destination pointer\n                                                                                *\n                                                                                *******************************************************************************/\n__WEAK__ uint32_t *ATTR_TCM_SECTION arch_memset4(uint32_t *dst, const uint32_t val, uint32_t n) {\n  uint32_t *q = dst;\n\n  while (n--) {\n    *q++ = val;\n  }\n\n  return dst;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  string compare\n                                                                                *\n                                                                                * @param  s1: string 1\n                                                                                * @param  s2: string 2\n                                                                                * @param  n: Count of chars\n                                                                                *\n                                                                                * @return compare result\n                                                                                *\n                                                                                *******************************************************************************/\n__WEAK__ int ATTR_TCM_SECTION arch_memcmp(const void *s1, const void *s2, uint32_t n) {\n  const unsigned char *c1 = s1, *c2 = s2;\n  int                  d = 0;\n\n  while (n--) {\n    d = (int)*c1++ - (int)*c2++;\n\n    if (d) {\n      break;\n    }\n  }\n\n  return d;\n}\n#endif\n\nvoid memcopy_to_fifo(void *fifo_addr, uint8_t *data, uint32_t length) {\n  uint8_t *p = (uint8_t *)fifo_addr;\n  uint8_t *q = data;\n\n  while (length--) {\n    *p = *q++;\n  }\n}\n\nvoid fifocopy_to_mem(void *fifo_addr, uint8_t *data, uint32_t length) {\n  uint8_t *p = (uint8_t *)fifo_addr;\n  uint8_t *q = data;\n\n  while (length--) {\n    *q++ = *p;\n  }\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  get u64 first number 1 from right to left\n                                                                                *\n                                                                                * @param  val: target value\n                                                                                * @param  bit: first 1 in bit\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\nint arch_ffsll(uint64_t *val, uint32_t *bit) {\n  if (!*val) {\n    return ERROR;\n  }\n\n  *bit = __builtin_ffsll(*val) - 1;\n  *val &= ~((1ULL) << (*bit));\n  return 0;\n}\n\nint arch_ctzll(uint64_t *val, uint32_t *bit) {\n  if (!*val) {\n    return -1;\n  }\n\n  *bit = __builtin_ctzll(*val);\n  *val &= ~((1ULL) << (*bit));\n  return 0;\n}\n\nint arch_clzll(uint64_t *val, uint32_t *bit) {\n  if (!*val) {\n    return -1;\n  }\n\n  *bit = __builtin_clzll(*val);\n  *val &= ~((1ULL) << (*bit));\n  return 0;\n}\n\n#ifdef DEBUG\n/*******************************************************************************\n* @brief  Reports the name of the source file and the source line number\n*         where the CHECK_PARAM error has occurred.\n\n* @param  file: Pointer to the source file name\n* @param  line: assert_param error line source number\n\n* @return None\n*******************************************************************************/\nvoid check_failed(uint8_t *file, uint32_t line) {\n  /* Infinite loop */\n  while (1) {\n  }\n}\n#endif /* DEBUG */\n\n/*@} end of group DRIVER_Public_Functions */\n\n/*@} end of group DRIVER_COMMON */\n\n/*@} end of group BL602_Periph_Driver */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/misc/misc.h",
    "content": "/**\n * @file misc.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef _MISC_H\n#define _MISC_H\n\n#include <stdio.h>\n#include <string.h>\n#include <stdint.h>\n#include <stdarg.h>\n#include <stdbool.h>\n#include <stdlib.h>\n#include \"compiler/gcc.h\"\n#include \"compiler/common.h\"\n\n#ifdef BIT\n#undef BIT\n#define BIT(n) (1UL << (n))\n#else\n#define BIT(n) (1UL << (n))\n#endif\n\n/**\n * @brief Null Type definition\n */\n#ifndef NULL\n#define NULL 0\n#endif\n\n/**\n * @brief Error type definition\n */\ntypedef enum {\n    SUCCESS = 0,\n    ERROR = 1,\n    TIMEOUT = 2,\n    INVALID = 3, /* invalid arguments */\n    NORESC = 4   /* no resource or resource temperary unavailable */\n} BL_Err_Type;\n\n/**\n * @brief Functional type definition\n */\ntypedef enum {\n    DISABLE = 0,\n    ENABLE = 1,\n} BL_Fun_Type;\n\n/**\n * @brief Status type definition\n */\ntypedef enum {\n    RESET = 0,\n    SET = 1,\n} BL_Sts_Type;\n\n/**\n * @brief Mask type definition\n */\ntypedef enum {\n    UNMASK = 0,\n    MASK = 1\n} BL_Mask_Type;\n\n/**\n * @brief Logical status Type definition\n */\ntypedef enum {\n    LOGIC_LO = 0,\n    LOGIC_HI = !LOGIC_LO\n} LogicalStatus;\n\n/**\n * @brief Active status Type definition\n */\ntypedef enum {\n    DEACTIVE = 0,\n    ACTIVE = !DEACTIVE\n} ActiveStatus;\n\n/**\n *  @brief Interrupt callback function type\n */\ntypedef void(intCallback_Type)(void);\ntypedef void (*pFunc)(void);\n\n#define ARCH_MemCpy      arch_memcpy\n#define ARCH_MemSet      arch_memset\n#define ARCH_MemCmp      arch_memcmp\n#define ARCH_MemCpy4     arch_memcpy4\n#define ARCH_MemCpy_Fast arch_memcpy_fast\n#define ARCH_MemSet4     arch_memset4\n\n#ifdef DEBUG\nvoid check_failed(uint8_t *file, uint32_t line);\n#define CHECK_PARAM(expr) ((expr) ? (void)0 : check_failed((uint8_t *)__FILE__, __LINE__))\n#else\n#define CHECK_PARAM(expr) ((void)0)\n#endif /* DEBUG */\n\nvoid *arch_memcpy(void *dst, const void *src, uint32_t n);\nvoid *arch_memset(void *s, uint8_t c, uint32_t n);\nint arch_memcmp(const void *s1, const void *s2, uint32_t n);\nuint32_t *arch_memcpy4(uint32_t *dst, const uint32_t *src, uint32_t n);\nvoid *arch_memcpy_fast(void *pdst, const void *psrc, uint32_t n);\nuint32_t *arch_memset4(uint32_t *dst, const uint32_t val, uint32_t n);\nvoid memcopy_to_fifo(void *fifo_addr, uint8_t *data, uint32_t length);\nvoid fifocopy_to_mem(void *fifo_addr, uint8_t *data, uint32_t length);\nint arch_ctzll(uint64_t *val, uint32_t *bit);\nint arch_clzll(uint64_t *val, uint32_t *bit);\nint arch_ffsll(uint64_t *val, uint32_t *bit);\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/partition/partition.c",
    "content": "/**\n ******************************************************************************\n * @file    partition.c\n * @version V1.0\n * @date\n * @brief   This file is the standard driver c file\n ******************************************************************************\n * @attention\n *\n * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n *   1. Redistributions of source code must retain the above copyright notice,\n *      this list of conditions and the following disclaimer.\n *   2. Redistributions in binary form must reproduce the above copyright notice,\n *      this list of conditions and the following disclaimer in the documentation\n *      and/or other materials provided with the distribution.\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n *      may be used to endorse or promote products derived from this software\n *      without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n ******************************************************************************\n */\n\n#include \"partition.h\"\n#include \"bflb_platform.h\"\n#include \"softcrc.h\"\n\n/** @addtogroup  BFLB_Common_Driver\n *  @{\n */\n\n/** @addtogroup  PARTITION\n *  @{\n */\n\n/** @defgroup  PARTITION_Private_Macros\n *  @{\n */\n\n/*@} end of group PARTITION_Private_Macros */\n\n/** @defgroup  PARTITION_Private_Types\n *  @{\n */\n\n/*@} end of group PARTITION_Private_Types */\n\n/** @defgroup  PARTITION_Private_Variables\n *  @{\n */\np_pt_table_flash_erase  gp_pt_table_flash_erase = NULL;\np_pt_table_flash_write  gp_pt_table_flash_write = NULL;\np_pt_table_flash_read   gp_pt_table_flash_read  = NULL;\npt_table_iap_param_type p_iap_param;\n\n/*@} end of group PARTITION_Private_Variables */\n\n/** @defgroup  PARTITION_Global_Variables\n *  @{\n */\nextern int main(void);\n\n/*@} end of group PARTITION_Global_Variables */\n\n/** @defgroup  PARTITION_Private_Fun_Declaration\n *  @{\n */\n\n/*@} end of group PARTITION_Private_Fun_Declaration */\n\n/** @defgroup  PARTITION_Private_Functions\n *  @{\n */\n\n/****************************************************************************/ /**\n                                                                                * @brief  Judge partition table valid\n                                                                                *\n                                                                                * @param  ptStuff: Partition table stuff pointer\n                                                                                *\n                                                                                * @return 0 for invalid and 1 for valid\n                                                                                *\n                                                                                *******************************************************************************/\nstatic uint8_t pt_table_valid(pt_table_stuff_config *pt_stuff) {\n  pt_table_config       *pt_table   = &pt_stuff->pt_table;\n  pt_table_entry_config *pt_entries = pt_stuff->pt_entries;\n  uint32_t              *p_crc32;\n  uint32_t               entriesLen = sizeof(pt_table_entry_config) * pt_table->entryCnt;\n\n  if (pt_table->magicCode == BFLB_PT_MAGIC_CODE) {\n    if (pt_table->entryCnt > PT_ENTRY_MAX) {\n      MSG(\"PT Entry Count Error\\r\\n\");\n      return 0;\n    }\n\n    if (pt_table->crc32 != BFLB_Soft_CRC32((uint8_t *)pt_table, sizeof(pt_table_config) - 4)) {\n      MSG(\"PT CRC Error\\r\\n\");\n      return 0;\n    }\n\n    /* ToDo it is a trap here, when entryCnt > 8, crc32 will overflow, comment by zhangcheng */\n    p_crc32 = (uint32_t *)((uintptr_t)pt_entries + entriesLen);\n\n    if (*p_crc32 != BFLB_Soft_CRC32((uint8_t *)pt_entries, entriesLen)) {\n      MSG(\"PT Entry CRC Error\\r\\n\");\n      return 0;\n    }\n\n    return 1;\n  }\n\n  return 0;\n}\n\n/*@} end of group PARTITION_Private_Functions */\n\n/** @defgroup  PARTITION_Public_Functions\n *  @{\n */\n\n/****************************************************************************/ /**\n                                                                                * @brief  Register partition flash read write erase fucntion\n                                                                                *\n                                                                                * @param  erase: Flash erase function\n                                                                                * @param  write: Flash write function\n                                                                                * @param  read: Flash read function\n                                                                                *\n                                                                                * @return None\n                                                                                *\n                                                                                *******************************************************************************/\nvoid pt_table_set_flash_operation(p_pt_table_flash_erase erase, p_pt_table_flash_write write, p_pt_table_flash_read read) {\n  gp_pt_table_flash_erase = erase;\n  gp_pt_table_flash_write = write;\n  gp_pt_table_flash_read  = read;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Get active partition table whole stuff\n                                                                                *\n                                                                                * @param  ptStuff[2]: Partition table stuff pointer\n                                                                                *\n                                                                                * @return Active partition table ID\n                                                                                *\n                                                                                *******************************************************************************/\npt_table_id_type pt_table_get_active_partition_need_lock(pt_table_stuff_config ptStuff[2]) {\n  uint32_t         pt_valid[2] = {0, 0};\n  pt_table_id_type activePtID;\n\n  if (ptStuff == NULL) {\n    return PT_TABLE_ID_INVALID;\n  }\n\n  activePtID = PT_TABLE_ID_INVALID;\n\n  gp_pt_table_flash_read(BFLB_PT_TABLE0_ADDRESS, (uint8_t *)&ptStuff[0], sizeof(pt_table_stuff_config));\n  pt_valid[0] = pt_table_valid(&ptStuff[0]);\n\n  gp_pt_table_flash_read(BFLB_PT_TABLE1_ADDRESS, (uint8_t *)&ptStuff[1], sizeof(pt_table_stuff_config));\n  pt_valid[1] = pt_table_valid(&ptStuff[1]);\n\n  if (pt_valid[0] == 1 && pt_valid[1] == 1) {\n    if (ptStuff[0].pt_table.age >= ptStuff[1].pt_table.age) {\n      activePtID = PT_TABLE_ID_0;\n    } else {\n      activePtID = PT_TABLE_ID_1;\n    }\n  } else if (pt_valid[0] == 1) {\n    activePtID = PT_TABLE_ID_0;\n  } else if (pt_valid[1] == 1) {\n    activePtID = PT_TABLE_ID_1;\n  }\n\n  return activePtID;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Get partition entry according to entry ID\n                                                                                *\n                                                                                * @param  ptStuff: Partition table stuff pointer\n                                                                                * @param  type: Type of partition entry\n                                                                                * @param  ptEntry: Partition entry pointer to store read data\n                                                                                *\n                                                                                * @return PT_ERROR_SUCCESS or PT_ERROR_ENTRY_NOT_FOUND or PT_ERROR_PARAMETER\n                                                                                *\n                                                                                *******************************************************************************/\npt_table_error_type pt_table_get_active_entries_by_id(pt_table_stuff_config *pt_stuff, pt_table_entry_type type, pt_table_entry_config *pt_entry) {\n  uint32_t i = 0;\n\n  if (pt_stuff == NULL || pt_entry == NULL) {\n    return PT_ERROR_PARAMETER;\n  }\n\n  for (i = 0; i < pt_stuff->pt_table.entryCnt; i++) {\n    if (pt_stuff->pt_entries[i].type == type) {\n      ARCH_MemCpy_Fast(pt_entry, &pt_stuff->pt_entries[i], sizeof(pt_table_entry_config));\n      return PT_ERROR_SUCCESS;\n    }\n  }\n\n  return PT_ERROR_ENTRY_NOT_FOUND;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Get partition entry according to entry name\n                                                                                *\n                                                                                * @param  ptStuff: Partition table stuff pointer\n                                                                                * @param  name: Name of partition entry\n                                                                                * @param  ptEntry: Partition entry pointer to store read data\n                                                                                *\n                                                                                * @return PT_ERROR_SUCCESS or PT_ERROR_ENTRY_NOT_FOUND or PT_ERROR_PARAMETER\n                                                                                *\n                                                                                *******************************************************************************/\npt_table_error_type pt_table_get_active_entries_by_name(pt_table_stuff_config *pt_stuff, uint8_t *name, pt_table_entry_config *pt_entry) {\n  uint32_t i   = 0;\n  uint32_t len = strlen((char *)name);\n\n  if (pt_stuff == NULL || pt_entry == NULL) {\n    return PT_ERROR_PARAMETER;\n  }\n\n  for (i = 0; i < pt_stuff->pt_table.entryCnt; i++) {\n    if (strlen((char *)pt_stuff->pt_entries[i].name) == len && memcmp((char *)pt_stuff->pt_entries[i].name, (char *)name, len) == 0) {\n      ARCH_MemCpy_Fast(pt_entry, &pt_stuff->pt_entries[i], sizeof(pt_table_entry_config));\n      return PT_ERROR_SUCCESS;\n    }\n  }\n\n  return PT_ERROR_ENTRY_NOT_FOUND;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Update partition entry\n                                                                                *\n                                                                                * @param  targetTableID: Target partition table to update\n                                                                                * @param  ptStuff: Partition table stuff pointer\n                                                                                * @param  ptEntry: Partition entry pointer to update\n                                                                                *\n                                                                                * @return Partition update result\n                                                                                *\n                                                                                *******************************************************************************/\npt_table_error_type pt_table_update_entry(pt_table_id_type target_table_id, pt_table_stuff_config *pt_stuff, pt_table_entry_config *pt_entry) {\n  uint32_t               i = 0;\n  BL_Err_Type            ret;\n  uint32_t               write_addr;\n  uint32_t               entries_len;\n  pt_table_config       *pt_table;\n  pt_table_entry_config *pt_entries;\n  uint32_t              *crc32;\n\n  if (pt_entry == NULL || pt_stuff == NULL) {\n    return PT_ERROR_PARAMETER;\n  }\n\n  pt_table   = &pt_stuff->pt_table;\n  pt_entries = pt_stuff->pt_entries;\n\n  if (target_table_id == PT_TABLE_ID_INVALID) {\n    return PT_ERROR_TABLE_NOT_VALID;\n  }\n\n  if (target_table_id == PT_TABLE_ID_0) {\n    write_addr = BFLB_PT_TABLE0_ADDRESS;\n  } else {\n    write_addr = BFLB_PT_TABLE1_ADDRESS;\n  }\n\n  for (i = 0; i < pt_table->entryCnt; i++) {\n    if (pt_entries[i].type == pt_entry->type) {\n      ARCH_MemCpy_Fast(&pt_entries[i], pt_entry, sizeof(pt_table_entry_config));\n      break;\n    }\n  }\n\n  if (i == pt_table->entryCnt) {\n    /* Not found this entry ,add new one */\n    if (pt_table->entryCnt < PT_ENTRY_MAX) {\n      ARCH_MemCpy_Fast(&pt_entries[pt_table->entryCnt], pt_entry, sizeof(pt_table_entry_config));\n      pt_table->entryCnt++;\n    } else {\n      return PT_ERROR_ENTRY_UPDATE_FAIL;\n    }\n  }\n\n  /* Prepare write back to flash */\n  /* Update age */\n  pt_table->age++;\n  pt_table->crc32 = BFLB_Soft_CRC32((uint8_t *)pt_table, sizeof(pt_table_config) - 4);\n\n  /* Update entries CRC */\n  entries_len = pt_table->entryCnt * sizeof(pt_table_entry_config);\n  crc32       = (uint32_t *)((uintptr_t)pt_entries + entries_len);\n  *crc32      = BFLB_Soft_CRC32((uint8_t *)&pt_entries[0], entries_len);\n\n  /* Write back to flash */\n  /* Erase flash first */\n  // ret = gp_pt_table_flash_erase(write_addr, write_addr + sizeof(pt_table_config) + entries_len + 4 - 1);\n  ret = gp_pt_table_flash_erase(write_addr, sizeof(pt_table_config) + entries_len + 4);\n\n  if (ret != SUCCESS) {\n    MSG_ERR(\"Flash Erase error\\r\\n\");\n    return PT_ERROR_FALSH_WRITE;\n  }\n\n  /* Write flash */\n  ret = gp_pt_table_flash_write(write_addr, (uint8_t *)pt_stuff, sizeof(pt_table_stuff_config));\n\n  if (ret != SUCCESS) {\n    MSG_ERR(\"Flash Write error\\r\\n\");\n    return PT_ERROR_FALSH_WRITE;\n  }\n\n  return PT_ERROR_SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Create partition entry\n                                                                                *\n                                                                                * @param  ptID: Partition table ID\n                                                                                *\n                                                                                * @return Partition create result\n                                                                                *\n                                                                                *******************************************************************************/\npt_table_error_type pt_table_create(pt_table_id_type pt_id) {\n  uint32_t        write_addr;\n  BL_Err_Type     ret;\n  pt_table_config pt_table;\n\n  if (pt_id == PT_TABLE_ID_INVALID) {\n    return PT_ERROR_TABLE_NOT_VALID;\n  }\n\n  if (pt_id == PT_TABLE_ID_0) {\n    write_addr = BFLB_PT_TABLE0_ADDRESS;\n  } else {\n    write_addr = BFLB_PT_TABLE1_ADDRESS;\n  }\n\n  /* Prepare write back to flash */\n  pt_table.magicCode = BFLB_PT_MAGIC_CODE;\n  pt_table.version   = 0;\n  pt_table.entryCnt  = 0;\n  pt_table.age       = 0;\n  pt_table.crc32     = BFLB_Soft_CRC32((uint8_t *)&pt_table, sizeof(pt_table_config) - 4);\n  /* Write back to flash */\n  // ret = gp_pt_table_flash_erase(write_addr, write_addr + sizeof(pt_table_config) - 1);\n  ret = gp_pt_table_flash_erase(write_addr, sizeof(pt_table_config));\n\n  if (ret != SUCCESS) {\n    MSG_ERR(\"Flash Erase error\\r\\n\");\n    return PT_ERROR_FALSH_ERASE;\n  }\n\n  ret = gp_pt_table_flash_write(write_addr, (uint8_t *)&pt_table, sizeof(pt_table_config));\n\n  if (ret != SUCCESS) {\n    MSG_ERR(\"Flash Write error\\r\\n\");\n    return PT_ERROR_FALSH_WRITE;\n  }\n\n  return PT_ERROR_SUCCESS;\n}\n\npt_table_error_type pt_table_dump(void) {\n  uint32_t              pt_valid[2] = {0, 0};\n  pt_table_stuff_config pt_stuff[2];\n\n  gp_pt_table_flash_read(BFLB_PT_TABLE0_ADDRESS, (uint8_t *)&pt_stuff[0], sizeof(pt_table_stuff_config));\n  pt_valid[0] = pt_table_valid(&pt_stuff[0]);\n\n  gp_pt_table_flash_read(BFLB_PT_TABLE1_ADDRESS, (uint8_t *)&pt_stuff[1], sizeof(pt_table_stuff_config));\n  pt_valid[1] = pt_table_valid(&pt_stuff[1]);\n\n  if (pt_valid[0]) {\n    MSG(\"PT TABLE0 valid\\r\\n\");\n  } else {\n    MSG(\"PT TABLE0 invalid\\r\\n\");\n  }\n\n  if (pt_valid[1]) {\n    MSG(\"PT TABLE1 valid\\r\\n\");\n  } else {\n    MSG(\"PT TABLE1 invalid\\r\\n\");\n  }\n\n  for (int i = 0; i < 2; i++) {\n    if (pt_valid[i] == 1) {\n      MSG(\"ptStuff[%d].pt_table.magicCode 0x%08x\\r\\n\", i, pt_stuff[i].pt_table.magicCode);\n      MSG(\"ptStuff[%d].pt_table.version 0x%08x\\r\\n\", i, pt_stuff[i].pt_table.version);\n      MSG(\"ptStuff[%d].pt_table.entryCnt 0x%08x\\r\\n\", i, pt_stuff[i].pt_table.entryCnt);\n      MSG(\"ptStuff[%d].pt_table.age 0x%08x\\r\\n\", i, pt_stuff[i].pt_table.age);\n      MSG(\"ptStuff[%d].pt_table.crc32 0x%08x\\r\\n\", i, pt_stuff[i].pt_table.crc32);\n\n      for (int j = 0; j < pt_stuff[i].pt_table.entryCnt; j++) {\n        MSG(\"ptStuff[%d].pt_entries[%d].type 0x%08x\\r\\n\", i, j, pt_stuff[i].pt_entries[j].type);\n        MSG(\"ptStuff[%d].pt_entries[%d].device 0x%08x\\r\\n\", i, j, pt_stuff[i].pt_entries[j].device);\n        MSG(\"ptStuff[%d].pt_entries[%d].active_index 0x%08x\\r\\n\", i, j, pt_stuff[i].pt_entries[j].active_index);\n        MSG(\"ptStuff[%d].pt_entries[%d].Address[0] 0x%08x\\r\\n\", i, j, pt_stuff[i].pt_entries[j].start_address[0]);\n        MSG(\"ptStuff[%d].pt_entries[%d].Address[1] 0x%08x\\r\\n\", i, j, pt_stuff[i].pt_entries[j].start_address[1]);\n        MSG(\"ptStuff[%d].pt_entries[%d].maxLen[0] 0x%08x\\r\\n\", i, j, pt_stuff[i].pt_entries[j].max_len[0]);\n        MSG(\"ptStuff[%d].pt_entries[%d].maxLen[1] 0x%08x\\r\\n\", i, j, pt_stuff[i].pt_entries[j].max_len[1]);\n        MSG(\"ptStuff[%d].pt_entries[%d].len 0x%08x\\r\\n\", i, j, pt_stuff[i].pt_entries[j].len);\n        MSG(\"ptStuff[%d].pt_entries[%d].age 0x%08x\\r\\n\", i, j, pt_stuff[i].pt_entries[j].age);\n      }\n    }\n  }\n\n  return PT_ERROR_SUCCESS;\n}\n\npt_table_error_type pt_table_get_iap_para(pt_table_iap_param_type *para) {\n  uint32_t              pt_valid[2] = {0, 0};\n  pt_table_stuff_config pt_stuff[2];\n  uint8_t               active_index;\n\n  gp_pt_table_flash_read(BFLB_PT_TABLE0_ADDRESS, (uint8_t *)&pt_stuff[0], sizeof(pt_table_stuff_config));\n  pt_valid[0] = pt_table_valid(&pt_stuff[0]);\n\n  gp_pt_table_flash_read(BFLB_PT_TABLE1_ADDRESS, (uint8_t *)&pt_stuff[1], sizeof(pt_table_stuff_config));\n  pt_valid[1] = pt_table_valid(&pt_stuff[1]);\n\n  if ((pt_valid[0] == 1) && (pt_valid[1] == 1)) {\n    if (pt_stuff[0].pt_table.age >= pt_stuff[1].pt_table.age) {\n      active_index         = pt_stuff[0].pt_entries[0].active_index;\n      para->iap_write_addr = para->iap_start_addr = pt_stuff[0].pt_entries[0].start_address[!(active_index & 0x01)];\n      para->inactive_index                        = !(active_index & 0x01);\n      para->inactive_table_index                  = 1;\n\n    } else {\n      active_index         = pt_stuff[1].pt_entries[0].active_index;\n      para->iap_write_addr = para->iap_start_addr = pt_stuff[1].pt_entries[0].start_address[!(active_index & 0x01)];\n      para->inactive_index                        = !(active_index & 0x01);\n      para->inactive_table_index                  = 0;\n    }\n\n  } else if (pt_valid[1] == 1) {\n    active_index         = pt_stuff[1].pt_entries[0].active_index;\n    para->iap_write_addr = para->iap_start_addr = pt_stuff[1].pt_entries[0].start_address[!(active_index & 0x01)];\n    para->inactive_index                        = !(active_index & 0x01);\n    para->inactive_table_index                  = 0;\n  } else if (pt_valid[0] == 1) {\n    active_index         = pt_stuff[0].pt_entries[0].active_index;\n    para->iap_write_addr = para->iap_start_addr = pt_stuff[0].pt_entries[0].start_address[!(active_index & 0x01)];\n    para->inactive_index                        = !(active_index & 0x01);\n    para->inactive_table_index                  = 1;\n  } else {\n    return PT_ERROR_TABLE_NOT_VALID;\n  }\n\n  MSG(\"inactive_table_index %d, inactive index %d , IAP start addr %08x \\r\\n\", para->inactive_table_index, para->inactive_index, para->iap_start_addr);\n  return PT_ERROR_SUCCESS;\n}\n\npt_table_error_type pt_table_set_iap_para(pt_table_iap_param_type *para) {\n  pt_table_stuff_config pt_stuff, pt_stuff_write;\n  int32_t               ret;\n  uint32_t             *p_crc32;\n  uint32_t              entries_len;\n\n  if (para->inactive_table_index == 1) {\n    gp_pt_table_flash_read(BFLB_PT_TABLE0_ADDRESS, (uint8_t *)&pt_stuff, sizeof(pt_table_stuff_config));\n  } else if (para->inactive_table_index == 0) {\n    gp_pt_table_flash_read(BFLB_PT_TABLE1_ADDRESS, (uint8_t *)&pt_stuff, sizeof(pt_table_stuff_config));\n  }\n\n  ARCH_MemCpy_Fast((void *)&pt_stuff_write, (void *)&pt_stuff, sizeof(pt_table_stuff_config));\n  pt_stuff_write.pt_table.age += 1;\n  pt_stuff_write.pt_entries[0].active_index = !(pt_stuff_write.pt_entries[0].active_index & 0x01);\n  pt_stuff_write.pt_table.crc32             = BFLB_Soft_CRC32((uint8_t *)&pt_stuff_write, sizeof(pt_table_config) - 4);\n  entries_len                               = sizeof(pt_table_entry_config) * pt_stuff_write.pt_table.entryCnt;\n  // pt_stuff_write.crc32 = BFLB_Soft_CRC32((uint8_t*)pt_stuff_write.pt_entries,entries_len);\n  p_crc32  = (uint32_t *)((uintptr_t)pt_stuff_write.pt_entries + entries_len);\n  *p_crc32 = BFLB_Soft_CRC32((uint8_t *)pt_stuff_write.pt_entries, entries_len);\n\n  if (para->inactive_table_index == 1) {\n    // ret = gp_pt_table_flash_erase(BFLB_PT_TABLE1_ADDRESS, BFLB_PT_TABLE1_ADDRESS + sizeof(pt_table_stuff_config) - 1);\n    ret = gp_pt_table_flash_erase(BFLB_PT_TABLE1_ADDRESS, sizeof(pt_table_stuff_config));\n\n    if (ret != SUCCESS) {\n      MSG_ERR(\"Flash Erase error\\r\\n\");\n      return PT_ERROR_FALSH_ERASE;\n    }\n\n    ret = gp_pt_table_flash_write(BFLB_PT_TABLE1_ADDRESS, (uint8_t *)&pt_stuff_write, sizeof(pt_table_stuff_config));\n\n    if (ret != SUCCESS) {\n      MSG_ERR(\"Flash Write error\\r\\n\");\n      return PT_ERROR_FALSH_WRITE;\n    }\n  } else if (para->inactive_table_index == 0) {\n    // ret = gp_pt_table_flash_erase(BFLB_PT_TABLE0_ADDRESS, BFLB_PT_TABLE0_ADDRESS + sizeof(pt_table_stuff_config) - 1);\n    ret = gp_pt_table_flash_erase(BFLB_PT_TABLE0_ADDRESS, sizeof(pt_table_stuff_config));\n\n    if (ret != SUCCESS) {\n      MSG_ERR(\"Flash Erase error\\r\\n\");\n      return PT_ERROR_FALSH_ERASE;\n    }\n\n    ret = gp_pt_table_flash_write(BFLB_PT_TABLE0_ADDRESS, (uint8_t *)&pt_stuff_write, sizeof(pt_table_stuff_config));\n\n    if (ret != SUCCESS) {\n      MSG_ERR(\"Flash Write error\\r\\n\");\n      return PT_ERROR_FALSH_WRITE;\n    }\n  }\n\n  MSG(\"Update pt_table suss\\r\\n\");\n  return PT_ERROR_SUCCESS;\n}\n\n/*@} end of group PARTITION_Public_Functions */\n\n/*@} end of group PARTITION */\n\n/*@} end of group BFLB_Common_Driver */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/partition/partition.h",
    "content": "/**\n  ******************************************************************************\n  * @file    partition.h\n  * @version V1.0\n  * @date\n  * @brief   This file is the standard driver header file\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __PARTITION_H__\n#define __PARTITION_H__\n\n#include \"misc.h\"\n\n/** @addtogroup  BFLB_Common_Driver\n *  @{\n */\n\n/** @addtogroup  PARTITION\n *  @{\n */\n\n/** @defgroup  PARTITION_Public_Types\n *  @{\n */\n\n/**\n *  @brief Partition table error type definition\n */\ntypedef enum {\n    PT_ERROR_SUCCESS,           /*!< Partition table error type:success */\n    PT_ERROR_TABLE_NOT_VALID,   /*!< Partition table error type:table not found */\n    PT_ERROR_ENTRY_NOT_FOUND,   /*!< Partition table error type:entry not found */\n    PT_ERROR_ENTRY_UPDATE_FAIL, /*!< Partition table error type:entry update fail */\n    PT_ERROR_CRC32,             /*!< Partition table error type:crc32 error */\n    PT_ERROR_PARAMETER,         /*!< Partition table error type:input parameter error */\n    PT_ERROR_FALSH_READ,        /*!< Partition table error type:flash read error */\n    PT_ERROR_FALSH_WRITE,       /*!< Partition table error type:flash write error */\n    PT_ERROR_FALSH_ERASE,       /*!< Partition table error type:flash erase error */\n} pt_table_error_type;\n\n/**\n *  @brief Partition id type definition\n */\ntypedef enum {\n    PT_TABLE_ID_0,       /*!< Partition table ID 0 */\n    PT_TABLE_ID_1,       /*!< Partition table ID 1 */\n    PT_TABLE_ID_INVALID, /*!< Partition table ID invalid */\n} pt_table_id_type;\n\n/**\n *  @brief Partition id type definition\n */\ntypedef enum {\n    PT_ENTRY_FW_CPU0,  /*!< Partition entry type:CPU0 firmware */\n    PT_ENTRY_FW_CPU1,  /*!< Partition entry type:CPU1 firmware */\n    PT_ENTRY_MAX = 16, /*!< Partition entry type:Max */\n} pt_table_entry_type;\n\n/**\n *  @brief Partition table config definition\n */\ntypedef struct\n{\n    uint32_t magicCode; /*!< Partition table magic code */\n    uint16_t version;   /*!< Partition table verdion */\n    uint16_t entryCnt;  /*!< Partition table entry count */\n    uint32_t age;       /*!< Partition table age */\n    uint32_t crc32;     /*!< Partition table CRC32 value */\n} pt_table_config;\n\n/**\n *  @brief Partition table entry config definition\n */\ntypedef struct\n{\n    uint8_t type;              /*!< Partition entry type */\n    uint8_t device;            /*!< Partition entry device */\n    uint8_t active_index;      /*!< Partition entry active index */\n    uint8_t name[9];           /*!< Partition entry name */\n    uint32_t start_address[2]; /*!< Partition entry start address */\n    uint32_t max_len[2];       /*!< Partition entry max length */\n    uint32_t len;              /*!< Partition entry length */\n    uint32_t age;              /*!< Partition entry age */\n} pt_table_entry_config;\n\n/**\n *  @brief Partition table stuff config definition\n */\ntypedef struct\n{\n    pt_table_config pt_table;                       /*!< Partition table */\n    pt_table_entry_config pt_entries[PT_ENTRY_MAX]; /*!< Partition entries */\n    uint32_t crc32;                                 /*!< Partition entries crc32 */\n} pt_table_stuff_config;\n\n/**\n *  @brief Partition table iap param definition\n */\ntypedef struct\n{\n    uint32_t iap_start_addr;\n    uint32_t iap_write_addr;\n    uint32_t iap_img_len;\n    uint8_t inactive_index;\n    uint8_t inactive_table_index;\n} pt_table_iap_param_type;\n\n/*@} end of group PARTITION_Public_Types */\n\n/** @defgroup  PARTITION_Public_Constants\n *  @{\n */\n\n/** @defgroup  pt_table_error_type\n *  @{\n */\n#define IS_PTTABLE_ERROR_TYPE(type) (((type) == PT_ERROR_SUCCESS) ||           \\\n                                     ((type) == PT_ERROR_TABLE_NOT_VALID) ||   \\\n                                     ((type) == PT_ERROR_ENTRY_NOT_FOUND) ||   \\\n                                     ((type) == PT_ERROR_ENTRY_UPDATE_FAIL) || \\\n                                     ((type) == PT_ERROR_CRC32) ||             \\\n                                     ((type) == PT_ERROR_PARAMETER) ||         \\\n                                     ((type) == PT_ERROR_FALSH_READ) ||        \\\n                                     ((type) == PT_ERROR_FALSH_WRITE) ||       \\\n                                     ((type) == PT_ERROR_FALSH_ERASE))\n\n/** @defgroup  pt_table_id_type\n *  @{\n */\n#define IS_PTTABLE_ID_TYPE(type) (((type) == PT_TABLE_ID_0) || \\\n                                  ((type) == PT_TABLE_ID_1) || \\\n                                  ((type) == PT_TABLE_ID_INVALID))\n\n/** @defgroup  pt_table_entry_type\n *  @{\n */\n#define IS_PTTABLE_ENTRY_TYPE(type) (((type) == PT_ENTRY_FW_CPU0) || \\\n                                     ((type) == PT_ENTRY_FW_CPU1) || \\\n                                     ((type) == PT_ENTRY_MAX))\n\n/*@} end of group PARTITION_Public_Constants */\n\n/** @defgroup  PARTITION_Public_Macros\n *  @{\n */\n#define BFLB_PT_TABLE0_ADDRESS 0xE000\n#define BFLB_PT_TABLE1_ADDRESS 0xF000\n#define BFLB_PT_MAGIC_CODE     0x54504642\ntypedef BL_Err_Type (*p_pt_table_flash_erase)(uint32_t startaddr, uint32_t endaddr);\ntypedef BL_Err_Type (*p_pt_table_flash_write)(uint32_t addr, uint8_t *data, uint32_t len);\ntypedef BL_Err_Type (*p_pt_table_flash_read)(uint32_t addr, uint8_t *data, uint32_t len);\n\n/*@} end of group PARTITION_Public_Macros */\n\n/** @defgroup  PARTITION_Public_Functions\n *  @{\n */\nvoid pt_table_set_flash_operation(p_pt_table_flash_erase erase, p_pt_table_flash_write write, p_pt_table_flash_read read);\npt_table_id_type pt_table_get_active_partition_need_lock(pt_table_stuff_config ptStuff[2]);\npt_table_error_type pt_table_get_active_entries_by_id(pt_table_stuff_config *pt_stuff,\n                                                      pt_table_entry_type type,\n                                                      pt_table_entry_config *pt_entry);\npt_table_error_type pt_table_get_active_entries_by_name(pt_table_stuff_config *pt_stuff,\n                                                        uint8_t *name,\n                                                        pt_table_entry_config *pt_entry);\npt_table_error_type pt_table_update_entry(pt_table_id_type target_table_id,\n                                          pt_table_stuff_config *pt_stuff,\n                                          pt_table_entry_config *pt_entry);\npt_table_error_type pt_table_create(pt_table_id_type pt_id);\npt_table_error_type pt_table_dump(void);\npt_table_error_type pt_table_get_iap_para(pt_table_iap_param_type *para);\npt_table_error_type pt_table_set_iap_para(pt_table_iap_param_type *para);\n\n/*@} end of group PARTITION_Public_Functions */\n\n/*@} end of group PARTITION */\n\n/*@} end of group BFLB_Common_Driver */\n\nextern pt_table_iap_param_type p_iap_param;\n\n#endif /* __PARTITION_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/pid/pid.c",
    "content": "/**\r\n * @file pid.c\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n\r\n#include \"pid.h\"\r\n\r\nvoid pid_init(pid_alg_t *pid) {\r\n  pid->set_val = 0.0f;\r\n  pid->out_val = 0.0f;\r\n\r\n  pid->last_error = 0.0f;\r\n  pid->prev_error = 0.0f;\r\n\r\n  pid->kp = 3.0f;\r\n  pid->ki = 0.0f;\r\n  pid->kd = 0.0f;\r\n\r\n  pid->i_error   = 0.0f;\r\n  pid->sum_error = 0.0f;\r\n\r\n  pid->max_val = 32;\r\n  pid->min_val = -32;\r\n}\r\n\r\n// standard pid\r\nfloat standard_pid_cal(pid_alg_t *pid, float next_val) {\r\n  pid->set_val = next_val;\r\n  pid->i_error = pid->set_val - pid->out_val;\r\n  pid->sum_error += pid->i_error;\r\n  pid->out_val    = pid->kp * pid->i_error + pid->ki * pid->sum_error + pid->kd * (pid->i_error - pid->last_error);\r\n  pid->last_error = pid->i_error;\r\n\r\n  return pid->out_val;\r\n}\r\n\r\n// increment pid\r\nfloat increment_pid_cal(pid_alg_t *pid, float next_val) {\r\n  pid->set_val    = next_val;\r\n  pid->i_error    = pid->set_val - pid->out_val;\r\n  float increment = pid->kp * (pid->i_error - pid->prev_error) + pid->ki * pid->i_error + pid->kd * (pid->i_error - 2 * pid->prev_error + pid->last_error);\r\n  pid->out_val += increment;\r\n  pid->last_error = pid->prev_error;\r\n  pid->prev_error = pid->i_error;\r\n\r\n  return pid->out_val;\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/pid/pid.h",
    "content": "/**\r\n * @file pid.h\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n\r\n#ifndef __PID_H__\r\n#define __PID_H__\r\n\r\n#include \"stdint.h\"\r\n\r\ntypedef struct pid_alg {\r\n    float set_val;\r\n    float out_val;\r\n\r\n    float kp;\r\n    float ki;\r\n    float kd;\r\n\r\n    float i_error;\r\n    float last_error;\r\n    float prev_error;\r\n    float sum_error;\r\n\r\n    int max_val;\r\n    int min_val;\r\n} pid_alg_t;\r\n\r\nvoid pid_init(pid_alg_t *pid);\r\nfloat standard_pid_cal(pid_alg_t *pid, float next_val);\r\nfloat increment_pid_cal(pid_alg_t *pid, float next_val);\r\n\r\n#endif\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/ring_buffer/ring_buffer.c",
    "content": "/**\n * @file ring_buffer.c\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#include \"ring_buffer.h\"\n\n/** @addtogroup  BL_Common_Component\n *  @{\n */\n\n/** @addtogroup  RING_BUFFER\n *  @{\n */\n\n/** @defgroup  RING_BUFFER_Private_Macros\n *  @{\n */\n\n/*@} end of group RING_BUFFER_Private_Macros */\n\n/** @defgroup  RING_BUFFER_Private_Types\n *  @{\n */\n\n/*@} end of group RING_BUFFER_Private_Types */\n\n/** @defgroup  RING_BUFFER_Private_Fun_Declaration\n *  @{\n */\n\n/*@} end of group RING_BUFFER_Private_Fun_Declaration */\n\n/** @defgroup  RING_BUFFER_Private_Variables\n *  @{\n */\n\n/*@} end of group RING_BUFFER_Private_Variables */\n\n/** @defgroup  RING_BUFFER_Global_Variables\n *  @{\n */\n\n/*@} end of group RING_BUFFER_Global_Variables */\n\n/** @defgroup  RING_BUFFER_Private_Functions\n *  @{\n */\n\n/*@} end of group RING_BUFFER_Private_Functions */\n\n/** @defgroup  RING_BUFFER_Public_Functions\n *  @{\n */\n\n/****************************************************************************/ /**\n                                                                                * @brief  Ring buffer init function\n                                                                                *\n                                                                                * @param  rbType: Ring buffer type structure pointer\n                                                                                * @param  buffer: Pointer of ring buffer\n                                                                                * @param  size: Size of ring buffer\n                                                                                * @param  lockCb: Ring buffer lock callback function pointer\n                                                                                * @param  unlockCb: Ring buffer unlock callback function pointer\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type Ring_Buffer_Init(Ring_Buffer_Type *rbType, uint8_t *buffer, uint32_t size, ringBuffer_Lock_Callback *lockCb, ringBuffer_Lock_Callback *unlockCb) {\n  /* Init ring buffer pointer */\n  rbType->pointer = buffer;\n\n  /* Init read/write mirror and index */\n  rbType->readMirror  = 0;\n  rbType->readIndex   = 0;\n  rbType->writeMirror = 0;\n  rbType->writeIndex  = 0;\n\n  /* Set ring buffer size */\n  rbType->size = size;\n\n  /* Set lock and unlock callback function */\n  rbType->lock   = lockCb;\n  rbType->unlock = unlockCb;\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Ring buffer reset function\n                                                                                *\n                                                                                * @param  rbType: Ring buffer type structure pointer\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type Ring_Buffer_Reset(Ring_Buffer_Type *rbType) {\n  if (rbType->lock != NULL) {\n    rbType->lock();\n  }\n\n  /* Clear read/write mirror and index */\n  rbType->readMirror  = 0;\n  rbType->readIndex   = 0;\n  rbType->writeMirror = 0;\n  rbType->writeIndex  = 0;\n\n  if (rbType->unlock != NULL) {\n    rbType->unlock();\n  }\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Use callback function to write ring buffer function\n                                                                                *\n                                                                                * @param  rbType: Ring buffer type structure pointer\n                                                                                * @param  length: Length of data want to write\n                                                                                * @param  writeCb: Callback function pointer\n                                                                                * @param  parameter: Parameter that callback function may use\n                                                                                *\n                                                                                * @return Length of data actually write\n                                                                                *\n                                                                                *******************************************************************************/\nuint32_t Ring_Buffer_Write_Callback(Ring_Buffer_Type *rbType, uint32_t length, ringBuffer_Write_Callback *writeCb, void *parameter) {\n  uint32_t sizeRemained = Ring_Buffer_Get_Empty_Length(rbType);\n\n  if (writeCb == NULL) {\n    return 0;\n  }\n\n  if (rbType->lock != NULL) {\n    rbType->lock();\n  }\n\n  /* Ring buffer has no space for new data */\n  if (sizeRemained == 0) {\n    if (rbType->unlock != NULL) {\n      rbType->unlock();\n    }\n\n    return 0;\n  }\n\n  /* Drop part of data when length out of space remained */\n  if (length > sizeRemained) {\n    length = sizeRemained;\n  }\n\n  /* Get size of space remained in current mirror */\n  sizeRemained = rbType->size - rbType->writeIndex;\n\n  if (sizeRemained > length) {\n    /* Space remained is enough for data in current mirror */\n    writeCb(parameter, &rbType->pointer[rbType->writeIndex], length);\n    rbType->writeIndex += length;\n  } else {\n    /* Data is divided to two parts with different mirror */\n    writeCb(parameter, &rbType->pointer[rbType->writeIndex], sizeRemained);\n    writeCb(parameter, &rbType->pointer[0], length - sizeRemained);\n    rbType->writeIndex  = length - sizeRemained;\n    rbType->writeMirror = ~rbType->writeMirror;\n  }\n\n  if (rbType->unlock != NULL) {\n    rbType->unlock();\n  }\n\n  return length;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Copy data from data buffer to ring buffer function\n                                                                                *\n                                                                                * @param  parameter: Pointer to source pointer\n                                                                                * @param  dest: Ring buffer to write\n                                                                                * @param  length: Length of data to write\n                                                                                *\n                                                                                * @return None\n                                                                                *\n                                                                                *******************************************************************************/\nstatic void Ring_Buffer_Write_Copy(void *parameter, uint8_t *dest, uint32_t length) {\n  uint8_t **src = (uint8_t **)parameter;\n\n  ARCH_MemCpy_Fast(dest, *src, length);\n  *src += length;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Write ring buffer function\n                                                                                *\n                                                                                * @param  rbType: Ring buffer type structure pointer\n                                                                                * @param  data: Data to write\n                                                                                * @param  length: Length of data\n                                                                                *\n                                                                                * @return Length of data writted actually\n                                                                                *\n                                                                                *******************************************************************************/\nuint32_t Ring_Buffer_Write(Ring_Buffer_Type *rbType, const uint8_t *data, uint32_t length) { return Ring_Buffer_Write_Callback(rbType, length, Ring_Buffer_Write_Copy, &data); }\n\n/****************************************************************************/ /**\n                                                                                * @brief  Write 1 byte to ring buffer function\n                                                                                *\n                                                                                * @param  rbType: Ring buffer type structure pointer\n                                                                                * @param  data: Data to write\n                                                                                *\n                                                                                * @return Length of data writted actually\n                                                                                *\n                                                                                *******************************************************************************/\nuint32_t Ring_Buffer_Write_Byte(Ring_Buffer_Type *rbType, const uint8_t data) {\n  if (rbType->lock != NULL) {\n    rbType->lock();\n  }\n\n  /* Ring buffer has no space for new data */\n  if (!Ring_Buffer_Get_Empty_Length(rbType)) {\n    if (rbType->unlock != NULL) {\n      rbType->unlock();\n    }\n\n    return 0;\n  }\n\n  rbType->pointer[rbType->writeIndex] = data;\n\n  /* Judge to change index and mirror */\n  if (rbType->writeIndex != (rbType->size - 1)) {\n    rbType->writeIndex++;\n  } else {\n    rbType->writeIndex  = 0;\n    rbType->writeMirror = ~rbType->writeMirror;\n  }\n\n  if (rbType->unlock != NULL) {\n    rbType->unlock();\n  }\n\n  return 1;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Write ring buffer function, old data will be covered by new data when ring buffer is\n                                                                                *         full\n                                                                                *\n                                                                                * @param  rbType: Ring buffer type structure pointer\n                                                                                * @param  data: Data to write\n                                                                                * @param  length: Length of data\n                                                                                *\n                                                                                * @return Length of data writted actually\n                                                                                *\n                                                                                *******************************************************************************/\nuint32_t Ring_Buffer_Write_Force(Ring_Buffer_Type *rbType, const uint8_t *data, uint32_t length) {\n  uint32_t sizeRemained  = Ring_Buffer_Get_Empty_Length(rbType);\n  uint32_t indexRemained = rbType->size - rbType->writeIndex;\n\n  if (rbType->lock != NULL) {\n    rbType->lock();\n  }\n\n  /* Drop extra data when data length is large than size of ring buffer */\n  if (length > rbType->size) {\n    data   = &data[length - rbType->size];\n    length = rbType->size;\n  }\n\n  if (indexRemained > length) {\n    /* Space remained is enough for data in current mirror */\n    ARCH_MemCpy_Fast(&rbType->pointer[rbType->writeIndex], data, length);\n    rbType->writeIndex += length;\n\n    /* Update read index */\n    if (length > sizeRemained) {\n      rbType->readIndex = rbType->writeIndex;\n    }\n  } else {\n    /* Data is divided to two parts with different mirror */\n    ARCH_MemCpy_Fast(&rbType->pointer[rbType->writeIndex], data, indexRemained);\n    ARCH_MemCpy_Fast(&rbType->pointer[0], &data[indexRemained], length - indexRemained);\n    rbType->writeIndex  = length - indexRemained;\n    rbType->writeMirror = ~rbType->writeMirror;\n\n    /* Update read index and mirror */\n    if (length > sizeRemained) {\n      rbType->readIndex  = rbType->writeIndex;\n      rbType->readMirror = ~rbType->readMirror;\n    }\n  }\n\n  if (rbType->unlock != NULL) {\n    rbType->unlock();\n  }\n\n  return length;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Write 1 byte to ring buffer function, old data will be covered by new data when ring\n                                                                                *         buffer is full\n                                                                                *\n                                                                                * @param  rbType: Ring buffer type structure pointer\n                                                                                * @param  data: Data to write\n                                                                                *\n                                                                                * @return Length of data writted actually\n                                                                                *\n                                                                                *******************************************************************************/\nuint32_t Ring_Buffer_Write_Byte_Force(Ring_Buffer_Type *rbType, const uint8_t data) {\n  Ring_Buffer_Status_Type status = Ring_Buffer_Get_Status(rbType);\n\n  if (rbType->lock != NULL) {\n    rbType->lock();\n  }\n\n  rbType->pointer[rbType->writeIndex] = data;\n\n  /* Judge to change index and mirror */\n  if (rbType->writeIndex == rbType->size - 1) {\n    rbType->writeIndex  = 0;\n    rbType->writeMirror = ~rbType->writeMirror;\n\n    /* Update read index and mirror */\n    if (status == RING_BUFFER_FULL) {\n      rbType->readIndex  = rbType->writeIndex;\n      rbType->readMirror = ~rbType->readMirror;\n    }\n  } else {\n    rbType->writeIndex++;\n\n    /* Update read index */\n    if (status == RING_BUFFER_FULL) {\n      rbType->readIndex = rbType->writeIndex;\n    }\n  }\n\n  if (rbType->unlock != NULL) {\n    rbType->unlock();\n  }\n\n  return 1;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Use callback function to read ring buffer function\n                                                                                *\n                                                                                * @param  rbType: Ring buffer type structure pointer\n                                                                                * @param  length: Length of data want to read\n                                                                                * @param  readCb: Callback function pointer\n                                                                                * @param  parameter: Parameter that callback function may use\n                                                                                *\n                                                                                * @return Length of data actually read\n                                                                                *\n                                                                                *******************************************************************************/\nuint32_t Ring_Buffer_Read_Callback(Ring_Buffer_Type *rbType, uint32_t length, ringBuffer_Read_Callback *readCb, void *parameter) {\n  uint32_t size = Ring_Buffer_Get_Length(rbType);\n\n  if (readCb == NULL) {\n    return 0;\n  }\n\n  if (rbType->lock != NULL) {\n    rbType->lock();\n  }\n\n  /* Ring buffer has no data */\n  if (!size) {\n    if (rbType->unlock != NULL) {\n      rbType->unlock();\n    }\n\n    return 0;\n  }\n\n  /* Ring buffer do not have enough data */\n  if (size < length) {\n    length = size;\n  }\n\n  /* Get size of space remained in current mirror */\n  size = rbType->size - rbType->readIndex;\n\n  if (size > length) {\n    /* Read all data needed */\n    readCb(parameter, &rbType->pointer[rbType->readIndex], length);\n    rbType->readIndex += length;\n  } else {\n    /* Read two part of data in different mirror */\n    readCb(parameter, &rbType->pointer[rbType->readIndex], size);\n    readCb(parameter, &rbType->pointer[0], length - size);\n    rbType->readIndex  = length - size;\n    rbType->readMirror = ~rbType->readMirror;\n  }\n\n  if (rbType->unlock != NULL) {\n    rbType->unlock();\n  }\n\n  return length;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Copy data from ring buffer to data buffer function\n                                                                                *\n                                                                                * @param  parameter: Pointer to destination pointer\n                                                                                * @param  data: Data buffer to copy\n                                                                                * @param  length: Length of data to copy\n                                                                                *\n                                                                                * @return None\n                                                                                *\n                                                                                *******************************************************************************/\nstatic void Ring_Buffer_Read_Copy(void *parameter, uint8_t *data, uint32_t length) {\n  uint8_t **dest = (uint8_t **)parameter;\n\n  ARCH_MemCpy_Fast(*dest, data, length);\n  *dest += length;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Read ring buffer function\n                                                                                *\n                                                                                * @param  rbType: Ring buffer type structure pointer\n                                                                                * @param  data: Buffer for data read\n                                                                                * @param  length: Length of data to read\n                                                                                *\n                                                                                * @return Length of data read actually\n                                                                                *\n                                                                                *******************************************************************************/\nuint32_t Ring_Buffer_Read(Ring_Buffer_Type *rbType, uint8_t *data, uint32_t length) { return Ring_Buffer_Read_Callback(rbType, length, Ring_Buffer_Read_Copy, &data); }\n\n/****************************************************************************/ /**\n                                                                                * @brief  Read 1 byte from ring buffer function\n                                                                                *\n                                                                                * @param  rbType: Ring buffer type structure pointer\n                                                                                * @param  data: Data read\n                                                                                *\n                                                                                * @return Length of data actually read\n                                                                                *\n                                                                                *******************************************************************************/\nuint32_t Ring_Buffer_Read_Byte(Ring_Buffer_Type *rbType, uint8_t *data) {\n  if (rbType->lock != NULL) {\n    rbType->lock();\n  }\n\n  /* Ring buffer has no data */\n  if (!Ring_Buffer_Get_Length(rbType)) {\n    if (rbType->unlock != NULL) {\n      rbType->unlock();\n    }\n\n    return 0;\n  }\n\n  /* Read data */\n  *data = rbType->pointer[rbType->readIndex];\n\n  /* Update read index and mirror */\n  if (rbType->readIndex == rbType->size - 1) {\n    rbType->readIndex  = 0;\n    rbType->readMirror = ~rbType->readMirror;\n  } else {\n    rbType->readIndex++;\n  }\n\n  if (rbType->unlock != NULL) {\n    rbType->unlock();\n  }\n\n  return 1;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Read ring buffer function, do not remove from buffer actually\n                                                                                *\n                                                                                * @param  rbType: Ring buffer type structure pointer\n                                                                                * @param  data: Buffer for data read\n                                                                                * @param  length: Length of data to read\n                                                                                *\n                                                                                * @return Length of data read actually\n                                                                                *\n                                                                                *******************************************************************************/\nuint32_t Ring_Buffer_Peek(Ring_Buffer_Type *rbType, uint8_t *data, uint32_t length) {\n  uint32_t size = Ring_Buffer_Get_Length(rbType);\n\n  if (rbType->lock != NULL) {\n    rbType->lock();\n  }\n\n  /* Ring buffer has no data */\n  if (!size) {\n    if (rbType->unlock != NULL) {\n      rbType->unlock();\n    }\n\n    return 0;\n  }\n\n  /* Ring buffer do not have enough data */\n  if (size < length) {\n    length = size;\n  }\n\n  /* Get size of space remained in current mirror */\n  size = rbType->size - rbType->readIndex;\n\n  if (size > length) {\n    /* Read all data needed */\n    ARCH_MemCpy_Fast(data, &rbType->pointer[rbType->readIndex], length);\n  } else {\n    /* Read two part of data in different mirror */\n    ARCH_MemCpy_Fast(data, &rbType->pointer[rbType->readIndex], size);\n    ARCH_MemCpy_Fast(&data[size], &rbType->pointer[0], length - size);\n  }\n\n  if (rbType->unlock != NULL) {\n    rbType->unlock();\n  }\n\n  return length;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Read 1 byte from ring buffer function, do not remove from buffer actually\n                                                                                *\n                                                                                * @param  rbType: Ring buffer type structure pointer\n                                                                                * @param  data: Data read\n                                                                                *\n                                                                                * @return Length of data actually read\n                                                                                *\n                                                                                *******************************************************************************/\nuint32_t Ring_Buffer_Peek_Byte(Ring_Buffer_Type *rbType, uint8_t *data) {\n  if (rbType->lock != NULL) {\n    rbType->lock();\n  }\n\n  /* Ring buffer has no data */\n  if (!Ring_Buffer_Get_Length(rbType)) {\n    if (rbType->unlock != NULL) {\n      rbType->unlock();\n    }\n\n    return 0;\n  }\n\n  /* Read data */\n  *data = rbType->pointer[rbType->readIndex];\n\n  if (rbType->unlock != NULL) {\n    rbType->unlock();\n  }\n\n  return 1;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Get length of data in ring buffer function\n                                                                                *\n                                                                                * @param  rbType: Ring buffer type structure pointer\n                                                                                *\n                                                                                * @return Length of data\n                                                                                *\n                                                                                *******************************************************************************/\nuint32_t Ring_Buffer_Get_Length(Ring_Buffer_Type *rbType) {\n  uint32_t readMirror  = 0;\n  uint32_t writeMirror = 0;\n  uint32_t readIndex   = 0;\n  uint32_t writeIndex  = 0;\n  uint32_t size        = 0;\n\n  if (rbType->lock != NULL) {\n    rbType->lock();\n  }\n\n  readMirror  = rbType->readMirror;\n  writeMirror = rbType->writeMirror;\n  readIndex   = rbType->readIndex;\n  writeIndex  = rbType->writeIndex;\n  size        = rbType->size;\n\n  if (rbType->unlock != NULL) {\n    rbType->unlock();\n  }\n\n  if (readMirror == writeMirror) {\n    return writeIndex - readIndex;\n  } else {\n    return size - (readIndex - writeIndex);\n  }\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Get space remained in ring buffer function\n                                                                                *\n                                                                                * @param  rbType: Ring buffer type structure pointer\n                                                                                *\n                                                                                * @return Length of space remained\n                                                                                *\n                                                                                *******************************************************************************/\nuint32_t Ring_Buffer_Get_Empty_Length(Ring_Buffer_Type *rbType) { return (rbType->size - Ring_Buffer_Get_Length(rbType)); }\n\n/****************************************************************************/ /**\n                                                                                * @brief  Get ring buffer status function\n                                                                                *\n                                                                                * @param  rbType: Ring buffer type structure pointer\n                                                                                *\n                                                                                * @return Status of ring buffer\n                                                                                *\n                                                                                *******************************************************************************/\nRing_Buffer_Status_Type Ring_Buffer_Get_Status(Ring_Buffer_Type *rbType) {\n  if (rbType->lock != NULL) {\n    rbType->lock();\n  }\n\n  /* Judge empty or full */\n  if (rbType->readIndex == rbType->writeIndex) {\n    if (rbType->readMirror == rbType->writeMirror) {\n      if (rbType->unlock != NULL) {\n        rbType->unlock();\n      }\n\n      return RING_BUFFER_EMPTY;\n    } else {\n      if (rbType->unlock != NULL) {\n        rbType->unlock();\n      }\n\n      return RING_BUFFER_FULL;\n    }\n  }\n\n  if (rbType->unlock != NULL) {\n    rbType->unlock();\n  }\n\n  return RING_BUFFER_PARTIAL;\n}\n\n/*@} end of group RING_BUFFER_Public_Functions */\n\n/*@} end of group RING_BUFFER */\n\n/*@} end of group BL_Common_Component */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/ring_buffer/ring_buffer.h",
    "content": "/**\n * @file ring_buffer.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef __RING_BUFFER_H__\n#define __RING_BUFFER_H__\n\n#include \"misc.h\"\n\n/** @addtogroup  BL_Common_Component\n *  @{\n */\n\n/** @addtogroup  RING_BUFFER\n *  @{\n */\n\n/** @defgroup  RING_BUFFER_Public_Types\n *  @{\n */\n\n/**\n *  @brief Ring buffer status type definition\n */\ntypedef enum {\n    RING_BUFFER_EMPTY,   /*!< Ring buffer is empty */\n    RING_BUFFER_PARTIAL, /*!< Ring buffer has partial data */\n    RING_BUFFER_FULL,    /*!< Ring buffer is full */\n} Ring_Buffer_Status_Type;\n\n/**\n *  @brief Ring buffer structure definition\n */\ntypedef struct\n{\n    uint8_t *pointer;     /*!< Pointer of ring buffer */\n    uint8_t readMirror;   /*!< Read mirror,used to judge empty or full */\n    uint32_t readIndex;   /*!< Index of read address */\n    uint8_t writeMirror;  /*!< Write mirror,used to judge empty or full */\n    uint32_t writeIndex;  /*!< Index of write address */\n    uint32_t size;        /*!< Size of ring buffer */\n    void (*lock)(void);   /*!< Lock ring buffer */\n    void (*unlock)(void); /*!< Unlock ring buffer */\n} Ring_Buffer_Type;\n\n/*@} end of group RING_BUFFER_Public_Types */\n\n/** @defgroup  RING_BUFFER_Public_Constants\n *  @{\n */\n\n/** @defgroup  RING_BUFFER_STATUS_TYPE\n *  @{\n */\n#define IS_RING_BUFFER_STATUS_TYPE(type) (((type) == RING_BUFFER_EMPTY) ||   \\\n                                          ((type) == RING_BUFFER_PARTIAL) || \\\n                                          ((type) == RING_BUFFER_FULL))\n\n/*@} end of group RING_BUFFER_Public_Constants */\n\n/** @defgroup  RING_BUFFER_Public_Macros\n *  @{\n */\ntypedef void(ringBuffer_Lock_Callback)(void);\ntypedef void(ringBuffer_Read_Callback)(void *, uint8_t *, uint32_t);\ntypedef void(ringBuffer_Write_Callback)(void *, uint8_t *, uint32_t);\n\n/*@} end of group RING_BUFFER_Public_Macros */\n\n/** @defgroup  RING_BUFFER_Public_Functions\n *  @{\n */\nBL_Err_Type Ring_Buffer_Init(Ring_Buffer_Type *rbType, uint8_t *buffer, uint32_t size, ringBuffer_Lock_Callback *lockCb,\n                             ringBuffer_Lock_Callback *unlockCb);\nBL_Err_Type Ring_Buffer_Reset(Ring_Buffer_Type *rbType);\nuint32_t Ring_Buffer_Write_Callback(Ring_Buffer_Type *rbType, uint32_t length, ringBuffer_Write_Callback *writeCb,\n                                    void *parameter);\nuint32_t Ring_Buffer_Write(Ring_Buffer_Type *rbType, const uint8_t *data, uint32_t length);\nuint32_t Ring_Buffer_Write_Byte(Ring_Buffer_Type *rbType, const uint8_t data);\nuint32_t Ring_Buffer_Write_Force(Ring_Buffer_Type *rbType, const uint8_t *data, uint32_t length);\nuint32_t Ring_Buffer_Write_Byte_Force(Ring_Buffer_Type *rbType, const uint8_t data);\nuint32_t Ring_Buffer_Read_Callback(Ring_Buffer_Type *rbType, uint32_t length, ringBuffer_Read_Callback *readCb,\n                                   void *parameter);\nuint32_t Ring_Buffer_Read(Ring_Buffer_Type *rbType, uint8_t *data, uint32_t length);\nuint32_t Ring_Buffer_Read_Byte(Ring_Buffer_Type *rbType, uint8_t *data);\nuint32_t Ring_Buffer_Peek(Ring_Buffer_Type *rbType, uint8_t *data, uint32_t length);\nuint32_t Ring_Buffer_Peek_Byte(Ring_Buffer_Type *rbType, uint8_t *data);\nuint32_t Ring_Buffer_Get_Length(Ring_Buffer_Type *rbType);\nuint32_t Ring_Buffer_Get_Empty_Length(Ring_Buffer_Type *rbType);\nRing_Buffer_Status_Type Ring_Buffer_Get_Status(Ring_Buffer_Type *rbType);\n\n/*@} end of group RING_BUFFER_Public_Functions */\n\n/*@} end of group RING_BUFFER */\n\n/*@} end of group BL_Common_Component */\n\n#endif /* __RING_BUFFER_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/soft_crc/softcrc.c",
    "content": "/**\n * @file softcrc.c\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#include \"softcrc.h\"\n#include \"misc.h\"\n// ---------------- POPULAR POLYNOMIALS ----------------\n// CCITT:      x^16 + x^12 + x^5 + x^0                 (0x1021,init 0x0000)\n// CRC-16:     x^16 + x^15 + x^2 + x^0                 (0x8005,init 0xFFFF)\n// we use 0x8005 here and\n\nconst uint8_t chCRCHTalbe[] = {\n    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,\n    0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,\n    0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,\n    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,\n    0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,\n    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,\n    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,\n    0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40};\n\nconst uint8_t chCRCLTalbe[] = {\n    0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8,\n    0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10,\n    0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38,\n    0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0,\n    0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,\n    0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0,\n    0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98,\n    0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40};\n\nuint16_t BFLB_Soft_CRC16(void *dataIn, uint32_t len) {\n  uint8_t  chCRCHi = 0xFF;\n  uint8_t  chCRCLo = 0xFF;\n  uint16_t wIndex;\n  uint8_t *data = (uint8_t *)dataIn;\n\n  while (len--) {\n    wIndex  = chCRCLo ^ *data++;\n    chCRCLo = chCRCHi ^ chCRCHTalbe[wIndex];\n    chCRCHi = chCRCLTalbe[wIndex];\n  }\n\n  return ((chCRCHi << 8) | chCRCLo);\n}\n\n/*\nx^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1\n*/\nconst uint32_t crc32Tab[256] = {\n    0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,\n    0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,\n    0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,\n    0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,\n    0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,\n    0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,\n    0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,\n    0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,\n    0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,\n    0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,\n    0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,\n    0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,\n    0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,\n    0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,\n    0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,\n    0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d};\n\nuint32_t BFLB_Soft_CRC32_Table(void *dataIn, uint32_t len) {\n  uint32_t crc  = 0;\n  uint8_t *data = (uint8_t *)dataIn;\n\n  crc = crc ^ 0xffffffff;\n\n  while (len--) {\n    crc = crc32Tab[(crc ^ *data++) & 0xFF] ^ (crc >> 8);\n  }\n\n  return crc ^ 0xffffffff;\n}\n\n/******************************************************************************\n * Name:    CRC-32  x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1\n * Poly:    0x4C11DB7\n * Init:    0xFFFFFFF\n * Refin:   True\n * Refout:  True\n * Xorout:  0xFFFFFFF\n * Alias:   CRC_32/ADCCP\n * Use:     WinRAR,ect.\n *****************************************************************************/\nuint32_t ATTR_TCM_SECTION BFLB_Soft_CRC32_Ex(uint32_t initial, void *dataIn, uint32_t len) {\n  uint8_t  i;\n  uint32_t crc  = ~initial; // Initial value\n  uint8_t *data = (uint8_t *)dataIn;\n\n  while (len--) {\n    crc ^= *data++; // crc ^= *data; data++;\n    for (i = 0; i < 8; ++i) {\n      if (crc & 1) {\n        crc = (crc >> 1) ^ 0xEDB88320; // 0xEDB88320= reverse 0x04C11DB7\n      } else {\n        crc = (crc >> 1);\n      }\n    }\n  }\n  return ~crc;\n}\n\n#ifndef BFLB_USE_ROM_DRIVER\n__WEAK__\nuint32_t ATTR_TCM_SECTION BFLB_Soft_CRC32(void *dataIn, uint32_t len) { return BFLB_Soft_CRC32_Ex(0, dataIn, len); }\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/soft_crc/softcrc.h",
    "content": "/**\n * @file softcrc.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef __SOFTCRC_H__\n#define __SOFTCRC_H__\n\n#include \"stdint.h\"\n\nuint16_t BFLB_Soft_CRC16(void *dataIn, uint32_t len);\nuint32_t BFLB_Soft_CRC32_Ex(uint32_t initial, void *dataIn, uint32_t len);\nuint32_t BFLB_Soft_CRC32(void *dataIn, uint32_t len);\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/timestamp/timestamp.c",
    "content": "/**\n * @file timestamp.c\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n\n#include \"timestamp.h\"\n\n#define FOUR_YEAR_DAY ((365 << 2) + 1) // The total number of days in a 4-year cycle\n#define TIMEZONE      (8)              // Beijing time Zone adjustment\n\n#define SEC_NUM_PER_DAY    (24 * 60 * 60)\n#define SEC_NUM_PER_HOUR   (60 * 60)\n#define SEC_NUM_PER_MINUTE (60)\n\nstatic uint8_t month_day[12]      = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 平年\nstatic uint8_t Leap_month_day[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 闰年\n\n/**\n * @bref judge if it is a leap year\n * @para year to be judge\n * @return 1：leap year  0： nonleap year\n */\nbool check_leap_year(uint16_t year) {\n  if (year % 4) {\n    return false;\n  } else {\n    if ((year % 100 == 0) && (year % 400 != 0)) {\n      return false;\n    } else {\n      return true;\n    }\n  }\n}\n\nvoid cal_weekday(rtc_time *beijing_time) {\n  uint32_t y, m, d, w;\n\n  y = beijing_time->year;\n  m = beijing_time->month;\n  d = beijing_time->day;\n\n  if ((m == 1) || (m == 2)) {\n    m += 12;\n    y--;\n  }\n  /*\n  把一月和二月看成是上一年的十三月和十四月，例：如果是2004-1-10则换算成：2003-13-10来代入公式计算。\n  以公元元年为参考，公元元年1月1日为星期一</PRE><PRE>程序如下：\n  利用基姆拉尔森计算日期公式  w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)\n  */\n  w = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400 + 1) % 7;\n\n  beijing_time->week = (uint8_t)w;\n}\n\nvoid unixtime2bejingtime(uint32_t unixtime, rtc_time *beijing_time) {\n  uint32_t totle_day_num;\n  uint32_t current_sec_num;\n\n  uint16_t remain_day;\n\n  uint16_t temp_year;\n\n  uint8_t *p = NULL;\n\n  totle_day_num   = unixtime / SEC_NUM_PER_DAY; // The total number of days\n  current_sec_num = unixtime % SEC_NUM_PER_DAY; // The number of seconds this day\n\n  /* use the number of seconds this day, To calculate hour\\minute\\second */\n  beijing_time->hour   = current_sec_num / SEC_NUM_PER_HOUR;\n  beijing_time->minute = (current_sec_num % SEC_NUM_PER_HOUR) / SEC_NUM_PER_MINUTE;\n  beijing_time->second = (current_sec_num % SEC_NUM_PER_HOUR) % SEC_NUM_PER_MINUTE;\n\n  /* Adjust the time zone and check whether the date is +1 */\n  beijing_time->hour += 8;\n  if (beijing_time->hour > 23) {\n    beijing_time->hour -= 24;\n    totle_day_num++;\n  }\n\n  /* calculate year */\n  beijing_time->year = 1970 + (totle_day_num / FOUR_YEAR_DAY) * 4; // 4-year as a cycle\n  remain_day         = totle_day_num % FOUR_YEAR_DAY;              // remaining day nym( < 4 year )\n\n  /* calculate year & day */\n  temp_year = check_leap_year(beijing_time->year) ? 366 : 365;\n  while (remain_day >= temp_year) {\n    beijing_time->year++;\n    remain_day -= temp_year;\n    temp_year = check_leap_year(beijing_time->year) ? 366 : 365;\n  }\n\n  /* Calculate specific dates(month\\day)*/\n  p = check_leap_year(beijing_time->year) ? Leap_month_day : month_day;\n  remain_day++; // The actual day starts at 1\n  beijing_time->month = 0;\n  while (remain_day > *(p + beijing_time->month)) {\n    remain_day -= *(p + beijing_time->month);\n    beijing_time->month++;\n  }\n\n  beijing_time->month++; // The actual month starts at 1\n  beijing_time->day = remain_day;\n\n  /*利用基姆拉尔森计算日期公式  w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)*/\n\n  beijing_time->week =\n      beijing_time->day + 2 * beijing_time->month + 3 * (beijing_time->month + 1) / 5 + beijing_time->year + beijing_time->year / 4 - beijing_time->year / 100 + beijing_time->year / 400;\n\n  cal_weekday(beijing_time);\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/common/timestamp/timestamp.h",
    "content": "/**\n * @file timestamp.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef _TIMESTAMP_\n#define _TIMESTAMP_\n\n#include \"stdint.h\"\n#include \"stddef.h\"\n#include \"stdbool.h\"\n\ntypedef struct _rtc_time_t\n{\n\tuint16_t year;\n\tuint8_t month;\n\tuint8_t day;\n\tuint8_t week;\n\tuint8_t hour;\n\tuint8_t minute;\n\tuint8_t second;\n}rtc_time;\n\nvoid unixtime2bejingtime(uint32_t unixtime,rtc_time* beijing_time);\n\n#endif\n\n\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/bl_hci_wrapper/bl_hci_wrapper.c",
    "content": "/*****************************************************************************************\n *\n * @file bl_hci_wrapper.c\n *\n * @brief Bouffalo Lab hci wrapper functions\n *\n * Copyright (C) Bouffalo Lab 2018\n *\n * History: 2018-08 crealted by llgong @ Shanghai\n *\n *****************************************************************************************/\n\n#include \"bl_hci_wrapper.h\"\n#include \"byteorder.h\"\n#include \"errno.h\"\n#include \"hci_driver.h\"\n#include \"hci_host.h\"\n#include \"hci_onchip.h\"\n#include <log.h>\n#include <string.h>\n\n#define DATA_MSG_CNT 10\n\nstruct rx_msg_struct data_msg[DATA_MSG_CNT];\nstruct k_queue       msg_queue;\n#if defined(BFLB_BLE_NOTIFY_ADV_DISCARDED)\nextern void ble_controller_notify_adv_discarded(uint8_t *adv_bd_addr, uint8_t adv_type);\n#endif\n\nstruct rx_msg_struct *bl_find_valid_data_msg() {\n  struct rx_msg_struct empty_msg;\n  memset(&empty_msg, 0, sizeof(struct rx_msg_struct));\n\n  for (int i = 0; i < DATA_MSG_CNT; i++) {\n    if (!memcmp(&data_msg[i], &empty_msg, sizeof(struct rx_msg_struct))) {\n      return (data_msg + i);\n    }\n  }\n\n  return NULL;\n}\n\nint bl_onchiphci_send_2_controller(struct net_buf *buf) {\n  uint16_t       opcode;\n  uint16_t       dest_id = 0x00;\n  uint8_t        buf_type;\n  uint8_t        pkt_type;\n  hci_pkt_struct pkt;\n\n  buf_type = bt_buf_get_type(buf);\n  switch (buf_type) {\n  case BT_BUF_CMD: {\n    struct bt_hci_cmd_hdr *chdr;\n\n    if (buf->len < sizeof(struct bt_hci_cmd_hdr)) {\n      return -EINVAL;\n    }\n\n    chdr = (void *)buf->data;\n\n    if (buf->len < chdr->param_len) {\n      return -EINVAL;\n    }\n\n    pkt_type = BT_HCI_CMD;\n    opcode   = sys_le16_to_cpu(chdr->opcode);\n    // move buf to the payload\n    net_buf_pull(buf, sizeof(struct bt_hci_cmd_hdr));\n    switch (opcode) {\n    // ble refer to hci_cmd_desc_tab_le, for the ones of which dest_ll is BLE_CTRL\n    case BT_HCI_OP_LE_CONN_UPDATE:\n    case BT_HCI_OP_LE_READ_CHAN_MAP:\n    case BT_HCI_OP_LE_READ_REMOTE_FEATURES:\n    case BT_HCI_OP_LE_START_ENCRYPTION:\n    case BT_HCI_OP_LE_LTK_REQ_REPLY:\n    case BT_HCI_OP_LE_LTK_REQ_NEG_REPLY:\n    case BT_HCI_OP_LE_CONN_PARAM_REQ_REPLY:\n    case BT_HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY:\n    case BT_HCI_OP_LE_SET_DATA_LEN:\n    case BT_HCI_OP_LE_READ_PHY:\n    case BT_HCI_OP_LE_SET_PHY:\n    // bredr identify link id, according to dest_id\n    case BT_HCI_OP_READ_REMOTE_FEATURES:\n    case BT_HCI_OP_READ_REMOTE_EXT_FEATURES:\n    case BT_HCI_OP_READ_ENCRYPTION_KEY_SIZE: {\n      // dest_id is connectin handle\n      dest_id = buf->data[0];\n    }\n    default:\n      break;\n    }\n    pkt.p.hci_cmd.opcode    = opcode;\n    pkt.p.hci_cmd.param_len = chdr->param_len;\n    pkt.p.hci_cmd.params    = buf->data;\n\n    break;\n  }\n\n  case BT_BUF_ACL_OUT: {\n    struct bt_hci_acl_hdr *acl;\n    // connhandle +l2cap field\n    uint16_t connhdl_l2cf, tlt_len;\n\n    if (buf->len < sizeof(struct bt_hci_acl_hdr)) {\n      return -EINVAL;\n    }\n\n    pkt_type     = BT_HCI_ACL_DATA;\n    acl          = (void *)buf->data;\n    tlt_len      = sys_le16_to_cpu(acl->len);\n    connhdl_l2cf = sys_le16_to_cpu(acl->handle);\n    // move buf to the payload\n    net_buf_pull(buf, sizeof(struct bt_hci_acl_hdr));\n\n    if (buf->len < tlt_len) {\n      return -EINVAL;\n    }\n\n    // get connection_handle\n    dest_id                   = bt_acl_handle(connhdl_l2cf);\n    pkt.p.acl_data.conhdl     = dest_id;\n    pkt.p.acl_data.pb_bc_flag = bt_acl_flags(connhdl_l2cf);\n    pkt.p.acl_data.len        = tlt_len;\n    pkt.p.acl_data.buffer     = (uint8_t *)buf->data;\n\n    break;\n  }\n\n  default:\n    return -EINVAL;\n  }\n\n  return bt_onchiphci_send(pkt_type, dest_id, &pkt);\n}\n\nvoid bl_packet_to_host(uint8_t pkt_type, uint16_t src_id, uint8_t *param, uint8_t param_len, struct net_buf *buf) {\n  uint16_t tlt_len;\n  bool     prio            = true;\n  uint8_t  nb_h2c_cmd_pkts = 0x01;\n\n  uint8_t *buf_data = net_buf_tail(buf);\n  bt_buf_set_rx_adv(buf, false);\n\n  switch (pkt_type) {\n  case BT_HCI_CMD_CMP_EVT: {\n    tlt_len     = BT_HCI_EVT_CC_PARAM_OFFSET + param_len;\n    *buf_data++ = BT_HCI_EVT_CMD_COMPLETE;\n    *buf_data++ = BT_HCI_CCEVT_HDR_PARLEN + param_len;\n    *buf_data++ = nb_h2c_cmd_pkts;\n    sys_put_le16(src_id, buf_data);\n    buf_data += 2;\n    memcpy(buf_data, param, param_len);\n    break;\n  }\n  case BT_HCI_CMD_STAT_EVT: {\n    tlt_len     = BT_HCI_CSEVT_LEN;\n    *buf_data++ = BT_HCI_EVT_CMD_STATUS;\n    *buf_data++ = BT_HCI_CSVT_PARLEN;\n    *buf_data++ = *(uint8_t *)param;\n    *buf_data++ = nb_h2c_cmd_pkts;\n    sys_put_le16(src_id, buf_data);\n    break;\n  }\n  case BT_HCI_LE_EVT: {\n    prio = false;\n    bt_buf_set_type(buf, BT_BUF_EVT);\n    if (param[0] == BT_HCI_EVT_LE_ADVERTISING_REPORT) {\n      bt_buf_set_rx_adv(buf, true);\n    }\n    tlt_len     = BT_HCI_EVT_LE_PARAM_OFFSET + param_len;\n    *buf_data++ = BT_HCI_EVT_LE_META_EVENT;\n    *buf_data++ = param_len;\n    memcpy(buf_data, param, param_len);\n    break;\n  }\n  case BT_HCI_EVT: {\n    if (src_id != BT_HCI_EVT_NUM_COMPLETED_PACKETS) {\n      prio = false;\n    }\n    bt_buf_set_type(buf, BT_BUF_EVT);\n    tlt_len     = BT_HCI_EVT_LE_PARAM_OFFSET + param_len;\n    *buf_data++ = src_id;\n    *buf_data++ = param_len;\n    memcpy(buf_data, param, param_len);\n    break;\n  }\n#if defined(CONFIG_BT_CONN)\n  case BT_HCI_ACL_DATA: {\n    prio = false;\n    bt_buf_set_type(buf, BT_BUF_ACL_IN);\n    tlt_len = bt_onchiphci_hanlde_rx_acl(param, buf_data);\n    break;\n  }\n#endif\n  default: {\n    net_buf_unref(buf);\n    return;\n  }\n  }\n\n  net_buf_add(buf, tlt_len);\n\n  if (prio) {\n    bt_recv_prio(buf);\n  } else {\n    hci_driver_enque_recvq(buf);\n  }\n}\n\nvoid bl_trigger_queued_msg() {\n  struct net_buf       *buf = NULL;\n  struct rx_msg_struct *msg = NULL;\n\n  do {\n    unsigned int lock = irq_lock();\n\n    if (k_queue_is_empty(&msg_queue)) {\n      irq_unlock(lock);\n      break;\n    }\n\n    if (bt_buf_get_rx_avail_cnt() <= CONFIG_BT_RX_BUF_RSV_COUNT) {\n      irq_unlock(lock);\n      break;\n    }\n\n    buf = bt_buf_get_rx(BT_BUF_ACL_IN, K_NO_WAIT);\n    if (!buf) {\n      irq_unlock(lock);\n      break;\n    }\n\n    msg = k_fifo_get(&msg_queue, K_NO_WAIT);\n\n    BT_ASSERT(msg);\n\n    bl_packet_to_host(msg->pkt_type, msg->src_id, msg->param, msg->param_len, buf);\n\n    irq_unlock(lock);\n\n    if (msg->param) {\n      k_free(msg->param);\n    }\n    memset(msg, 0, sizeof(struct rx_msg_struct));\n\n  } while (buf);\n}\n\nstatic void bl_onchiphci_rx_packet_handler(uint8_t pkt_type, uint16_t src_id, uint8_t *param, uint8_t param_len) {\n  struct net_buf       *buf    = NULL;\n  struct rx_msg_struct *rx_msg = NULL;\n\n  if (pkt_type == BT_HCI_CMD_CMP_EVT || pkt_type == BT_HCI_CMD_STAT_EVT) {\n    buf = bt_buf_get_cmd_complete(K_FOREVER);\n    bl_packet_to_host(pkt_type, src_id, param, param_len, buf);\n    return;\n  }\n#if defined(CONFIG_BT_OBSERVER) || defined(CONFIG_BT_CENTRAL) || defined(CONFIG_BT_ALLROLES)\n  else if (pkt_type == BT_HCI_LE_EVT && param[0] == BT_HCI_EVT_LE_ADVERTISING_REPORT) {\n    if (bt_buf_get_rx_avail_cnt() <= CONFIG_BT_RX_BUF_RSV_COUNT) {\n      BT_INFO(\"Discard adv report.\");\n#if defined(BFLB_BLE_NOTIFY_ADV_DISCARDED)\n      ble_controller_notify_adv_discarded(&param[4], param[2]);\n#endif\n      return;\n    }\n    buf = bt_buf_get_rx(BT_BUF_ACL_IN, K_NO_WAIT);\n    if (buf)\n      bl_packet_to_host(pkt_type, src_id, param, param_len, buf);\n    return;\n  }\n#endif /*(CONFIG_BT_OBSERVER || CONFIG_BT_CENTRAL || CONFIG_BT_ALLROLES)*/\n  else {\n    if (pkt_type != BT_HCI_ACL_DATA) {\n      /* Using the reserved buf (CONFIG_BT_RX_BUF_RSV_COUNT) firstly. */\n      buf = bt_buf_get_rx(BT_BUF_ACL_IN, K_NO_WAIT);\n      if (buf) {\n        bl_packet_to_host(pkt_type, src_id, param, param_len, buf);\n        return;\n      }\n    }\n\n    rx_msg = bl_find_valid_data_msg();\n  }\n\n  BT_ASSERT(rx_msg);\n\n  rx_msg->pkt_type  = pkt_type;\n  rx_msg->src_id    = src_id;\n  rx_msg->param_len = param_len;\n  if (param_len) {\n    rx_msg->param = k_malloc(param_len);\n    memcpy(rx_msg->param, param, param_len);\n  }\n\n  k_fifo_put(&msg_queue, rx_msg);\n\n  bl_trigger_queued_msg();\n}\n\nuint8_t bl_onchiphci_interface_init(void) {\n  for (int i = 0; i < DATA_MSG_CNT; i++) {\n    memset(data_msg + i, 0, sizeof(struct rx_msg_struct));\n  }\n\n  k_queue_init(&msg_queue, DATA_MSG_CNT);\n\n  return bt_onchiphci_interface_init(bl_onchiphci_rx_packet_handler);\n}\n\nvoid bl_onchiphci_interface_deinit(void) {\n  struct rx_msg_struct *msg;\n\n  do {\n    msg = k_fifo_get(&msg_queue, K_NO_WAIT);\n    if (msg) {\n      if (msg->param) {\n        k_free(msg->param);\n      }\n    } else {\n      break;\n    }\n  } while (1);\n\n  k_queue_free(&msg_queue);\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/bl_hci_wrapper/bl_hci_wrapper.h",
    "content": "#ifndef __BL_HCI_WRAPPER_H__\n#define __BL_HCI_WRAPPER_H__\n\n#include \"bluetooth.h\"\n#include \"net/buf.h\"\n\nstruct rx_msg_struct {\n  uint8_t  pkt_type;\n  uint16_t src_id;\n  uint8_t *param;\n  uint8_t  param_len;\n} __packed;\n\ntypedef enum { DATA_TYPE_COMMAND = 1, DATA_TYPE_ACL = 2, DATA_TYPE_SCO = 3, DATA_TYPE_EVENT = 4 } serial_data_type_t;\n\nuint8_t bl_onchiphci_interface_init(void);\nvoid    bl_onchiphci_interface_deinit(void);\nvoid    bl_trigger_queued_msg(void);\nint     bl_onchiphci_send_2_controller(struct net_buf *buf);\n\n#endif //__BL_CONTROLLER_H__"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/atomic_c.c",
    "content": "/*\n * Copyright (c) 2016 Intel Corporation\n * Copyright (c) 2011-2014 Wind River Systems, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file Atomic ops in pure C\n *\n * This module provides the atomic operators for processors\n * which do not support native atomic operations.\n *\n * The atomic operations are guaranteed to be atomic with respect\n * to interrupt service routines, and to operations performed by peer\n * processors.\n *\n * (originally from x86's atomic.c)\n */\n\n#include \"bl_port.h\"\n#include <atomic.h>\n// #include <toolchain.h>\n// #include <arch/cpu.h>\n\n/**\n *\n * @brief Atomic compare-and-set primitive\n *\n * This routine provides the compare-and-set operator. If the original value at\n * <target> equals <oldValue>, then <newValue> is stored at <target> and the\n * function returns 1.\n *\n * If the original value at <target> does not equal <oldValue>, then the store\n * is not done and the function returns 0.\n *\n * The reading of the original value at <target>, the comparison,\n * and the write of the new value (if it occurs) all happen atomically with\n * respect to both interrupts and accesses of other processors to <target>.\n *\n * @param target address to be tested\n * @param old_value value to compare against\n * @param new_value value to compare against\n * @return Returns 1 if <new_value> is written, 0 otherwise.\n */\nint atomic_cas(atomic_t *target, atomic_val_t old_value, atomic_val_t new_value) {\n  unsigned int key;\n  int          ret = 0;\n\n  key = irq_lock();\n\n  if (*target == old_value) {\n    *target = new_value;\n    ret     = 1;\n  }\n\n  irq_unlock(key);\n\n  return ret;\n}\n\n/**\n *\n * @brief Atomic addition primitive\n *\n * This routine provides the atomic addition operator. The <value> is\n * atomically added to the value at <target>, placing the result at <target>,\n * and the old value from <target> is returned.\n *\n * @param target memory location to add to\n * @param value the value to add\n *\n * @return The previous value from <target>\n */\natomic_val_t atomic_add(atomic_t *target, atomic_val_t value) {\n  unsigned int key;\n  atomic_val_t ret;\n\n  key = irq_lock();\n\n  ret = *target;\n  *target += value;\n\n  irq_unlock(key);\n\n  return ret;\n}\n\n/**\n *\n * @brief Atomic subtraction primitive\n *\n * This routine provides the atomic subtraction operator. The <value> is\n * atomically subtracted from the value at <target>, placing the result at\n * <target>, and the old value from <target> is returned.\n *\n * @param target the memory location to subtract from\n * @param value the value to subtract\n *\n * @return The previous value from <target>\n */\natomic_val_t atomic_sub(atomic_t *target, atomic_val_t value) {\n  unsigned int key;\n  atomic_val_t ret;\n\n  key = irq_lock();\n\n  ret = *target;\n  *target -= value;\n\n  irq_unlock(key);\n\n  return ret;\n}\n\n/**\n *\n * @brief Atomic increment primitive\n *\n * @param target memory location to increment\n *\n * This routine provides the atomic increment operator. The value at <target>\n * is atomically incremented by 1, and the old value from <target> is returned.\n *\n * @return The value from <target> before the increment\n */\natomic_val_t atomic_inc(atomic_t *target) {\n  unsigned int key;\n  atomic_val_t ret;\n\n  key = irq_lock();\n\n  ret = *target;\n  (*target)++;\n\n  irq_unlock(key);\n\n  return ret;\n}\n\n/**\n *\n * @brief Atomic decrement primitive\n *\n * @param target memory location to decrement\n *\n * This routine provides the atomic decrement operator. The value at <target>\n * is atomically decremented by 1, and the old value from <target> is returned.\n *\n * @return The value from <target> prior to the decrement\n */\natomic_val_t atomic_dec(atomic_t *target) {\n  unsigned int key;\n  atomic_val_t ret;\n\n  key = irq_lock();\n\n  ret = *target;\n  (*target)--;\n\n  irq_unlock(key);\n\n  return ret;\n}\n\n/**\n *\n * @brief Atomic get primitive\n *\n * @param target memory location to read from\n *\n * This routine provides the atomic get primitive to atomically read\n * a value from <target>. It simply does an ordinary load.  Note that <target>\n * is expected to be aligned to a 4-byte boundary.\n *\n * @return The value read from <target>\n */\natomic_val_t atomic_get(const atomic_t *target) { return *target; }\n\n/**\n *\n * @brief Atomic get-and-set primitive\n *\n * This routine provides the atomic set operator. The <value> is atomically\n * written at <target> and the previous value at <target> is returned.\n *\n * @param target the memory location to write to\n * @param value the value to write\n *\n * @return The previous value from <target>\n */\natomic_val_t atomic_set(atomic_t *target, atomic_val_t value) {\n  unsigned int key;\n  atomic_val_t ret;\n\n  key = irq_lock();\n\n  ret     = *target;\n  *target = value;\n\n  irq_unlock(key);\n\n  return ret;\n}\n\n/**\n *\n * @brief Atomic clear primitive\n *\n * This routine provides the atomic clear operator. The value of 0 is atomically\n * written at <target> and the previous value at <target> is returned. (Hence,\n * atomic_clear(pAtomicVar) is equivalent to atomic_set(pAtomicVar, 0).)\n *\n * @param target the memory location to write\n *\n * @return The previous value from <target>\n */\natomic_val_t atomic_clear(atomic_t *target) {\n  unsigned int key;\n  atomic_val_t ret;\n\n  key = irq_lock();\n\n  ret     = *target;\n  *target = 0;\n\n  irq_unlock(key);\n\n  return ret;\n}\n\n/**\n *\n * @brief Atomic bitwise inclusive OR primitive\n *\n * This routine provides the atomic bitwise inclusive OR operator. The <value>\n * is atomically bitwise OR'ed with the value at <target>, placing the result\n * at <target>, and the previous value at <target> is returned.\n *\n * @param target the memory location to be modified\n * @param value the value to OR\n *\n * @return The previous value from <target>\n */\natomic_val_t atomic_or(atomic_t *target, atomic_val_t value) {\n  unsigned int key;\n  atomic_val_t ret;\n\n  key = irq_lock();\n\n  ret = *target;\n  *target |= value;\n\n  irq_unlock(key);\n\n  return ret;\n}\n\n/**\n *\n * @brief Atomic bitwise exclusive OR (XOR) primitive\n *\n * This routine provides the atomic bitwise exclusive OR operator. The <value>\n * is atomically bitwise XOR'ed with the value at <target>, placing the result\n * at <target>, and the previous value at <target> is returned.\n *\n * @param target the memory location to be modified\n * @param value the value to XOR\n *\n * @return The previous value from <target>\n */\natomic_val_t atomic_xor(atomic_t *target, atomic_val_t value) {\n  unsigned int key;\n  atomic_val_t ret;\n\n  key = irq_lock();\n\n  ret = *target;\n  *target ^= value;\n\n  irq_unlock(key);\n\n  return ret;\n}\n\n/**\n *\n * @brief Atomic bitwise AND primitive\n *\n * This routine provides the atomic bitwise AND operator. The <value> is\n * atomically bitwise AND'ed with the value at <target>, placing the result\n * at <target>, and the previous value at <target> is returned.\n *\n * @param target the memory location to be modified\n * @param value the value to AND\n *\n * @return The previous value from <target>\n */\natomic_val_t atomic_and(atomic_t *target, atomic_val_t value) {\n  unsigned int key;\n  atomic_val_t ret;\n\n  key = irq_lock();\n\n  ret = *target;\n  *target &= value;\n\n  irq_unlock(key);\n\n  return ret;\n}\n\n/**\n *\n * @brief Atomic bitwise NAND primitive\n *\n * This routine provides the atomic bitwise NAND operator. The <value> is\n * atomically bitwise NAND'ed with the value at <target>, placing the result\n * at <target>, and the previous value at <target> is returned.\n *\n * @param target the memory location to be modified\n * @param value the value to NAND\n *\n * @return The previous value from <target>\n */\natomic_val_t atomic_nand(atomic_t *target, atomic_val_t value) {\n  unsigned int key;\n  atomic_val_t ret;\n\n  key = irq_lock();\n\n  ret     = *target;\n  *target = ~(*target & value);\n\n  irq_unlock(key);\n\n  return ret;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/buf.c",
    "content": "/* buf.c - Buffer management */\n\n/*\n * Copyright (c) 2015 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#define LOG_MODULE_NAME net_buf\n\n#if !defined(BFLB_BLE)\n#define LOG_LEVEL CONFIG_NET_BUF_LOG_LEVEL\n#endif\n\n#include <log.h>\n// LOG_MODULE_REGISTER(LOG_MODULE_NAME);\n\n#include <errno.h>\n#include <misc/byteorder.h>\n#include <net/buf.h>\n#include <stddef.h>\n#include <stdio.h>\n#include <string.h>\n#if defined(BFLB_BLE)\n#if defined(BFLB_DYNAMIC_ALLOC_MEM)\n#include \"bl_port.h\"\n#endif\n#include \"bl_hci_wrapper.h\"\n#endif\n\n#if (BFLB_STATIC_ALLOC_MEM)\n#include \"l2cap.h\"\n#endif\n\n#if defined(CONFIG_NET_BUF_LOG)\n#define NET_BUF_DBG(fmt, ...)  LOG_DBG(\"(%p) \" fmt, k_current_get(), ##__VA_ARGS__)\n#define NET_BUF_ERR(fmt, ...)  LOG_ERR(fmt, ##__VA_ARGS__)\n#define NET_BUF_WARN(fmt, ...) LOG_WRN(fmt, ##__VA_ARGS__)\n#define NET_BUF_INFO(fmt, ...) LOG_INF(fmt, ##__VA_ARGS__)\n#define NET_BUF_ASSERT(cond)                                                                                                                                                                           \\\n  do {                                                                                                                                                                                                 \\\n    if (!(cond)) {                                                                                                                                                                                     \\\n      NET_BUF_ERR(\"assert: '\" #cond \"' failed\");                                                                                                                                                       \\\n    }                                                                                                                                                                                                  \\\n  } while (0)\n#else\n\n#define NET_BUF_DBG(fmt, ...)\n#define NET_BUF_ERR(fmt, ...)\n#define NET_BUF_WARN(fmt, ...)\n#define NET_BUF_INFO(fmt, ...)\n#define NET_BUF_ASSERT(cond)\n#endif /* CONFIG_NET_BUF_LOG */\n\n#if defined(CONFIG_NET_BUF_WARN_ALLOC_INTERVAL) && (CONFIG_NET_BUF_WARN_ALLOC_INTERVAL > 0)\n// #if CONFIG_NET_BUF_WARN_ALLOC_INTERVAL > 0\n#define WARN_ALLOC_INTERVAL K_SECONDS(CONFIG_NET_BUF_WARN_ALLOC_INTERVAL)\n#else\n#define WARN_ALLOC_INTERVAL K_FOREVER\n#endif\n\n#if defined(BFLB_DYNAMIC_ALLOC_MEM)\nextern struct net_buf_pool hci_cmd_pool;\nextern struct net_buf_pool hci_rx_pool;\n#if (BFLB_STATIC_ALLOC_MEM)\n__attribute__((section(\".tcm_data\"))) u8_t hci_cmd_data_pool[CONFIG_BT_HCI_CMD_COUNT * BT_BUF_RX_SIZE];\n__attribute__((section(\".tcm_data\"))) u8_t hci_rx_data_pool[CONFIG_BT_RX_BUF_COUNT * BT_BUF_RX_SIZE];\n#endif\n#if defined(CONFIG_BT_CONN)\nextern struct net_buf_pool acl_tx_pool;\nextern struct net_buf_pool num_complete_pool;\n#if (BFLB_STATIC_ALLOC_MEM)\n__attribute__((section(\".tcm_data\"))) u8_t acl_tx_data_pool[CONFIG_BT_L2CAP_TX_BUF_COUNT * BT_L2CAP_BUF_SIZE(CONFIG_BT_L2CAP_TX_MTU)];\n__attribute__((section(\".tcm_data\"))) u8_t num_complete_data_pool[1 * BT_BUF_RX_SIZE];\n#endif\n#if CONFIG_BT_ATT_PREPARE_COUNT > 0\nextern struct net_buf_pool prep_pool;\n#if (BFLB_STATIC_ALLOC_MEM)\n__attribute__((section(\".tcm_data\"))) u8_t prep_data_pool[CONFIG_BT_ATT_PREPARE_COUNT * BT_ATT_MTU];\n#endif\n#endif\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\nextern struct net_buf_pool acl_in_pool;\n#if (BFLB_STATIC_ALLOC_MEM)\n__attribute__((section(\".tcm_data\"))) u8_t acl_in_data_pool[CONFIG_BT_ACL_RX_COUNT * ACL_IN_SIZE];\n#endif\n#endif\n#if CONFIG_BT_ATT_PREPARE_COUNT > 0\nextern struct net_buf_pool frag_pool;\n#if (BFLB_STATIC_ALLOC_MEM)\n__attribute__((section(\".tcm_data\"))) u8_t frag_data_pool[CONFIG_BT_L2CAP_TX_FRAG_COUNT * FRAG_SIZE];\n#endif\n#endif\n#endif // CONFIG_BT_CONN\n#if defined(CONFIG_BT_DISCARDABLE_BUF_COUNT)\nextern struct net_buf_pool discardable_pool;\n#if (BFLB_STATIC_ALLOC_MEM)\n__attribute__((section(\".tcm_data\"))) u8_t discardable_data_pool[CONFIG_BT_DISCARDABLE_BUF_COUNT * BT_BUF_RX_SIZE];\n#endif\n#endif\n#ifdef CONFIG_BT_MESH\nextern struct net_buf_pool adv_buf_pool;\nextern struct net_buf_pool loopback_buf_pool;\n#if defined(CONFIG_BT_MESH_FRIEND)\nextern struct net_buf_pool friend_buf_pool;\n#endif // CONFIG_BT_MESH_FRIEND\n#endif\n#if defined(CONFIG_BT_BREDR)\nextern struct net_buf_pool br_sig_pool;\nextern struct net_buf_pool sdp_pool;\nextern struct net_buf_pool hf_pool;\nextern struct net_buf_pool dummy_pool;\n#endif\n\n#if defined(CONFIG_AUTO_PTS)\nextern struct net_buf_pool server_pool;\nextern struct net_buf_pool data_pool;\n#endif\n\nstruct net_buf_pool *_net_buf_pool_list[] = {\n    &hci_cmd_pool,    &hci_rx_pool,\n\n#if defined(CONFIG_BT_CONN)\n    &acl_tx_pool,     &num_complete_pool,\n#if CONFIG_BT_ATT_PREPARE_COUNT > 0\n    &prep_pool,\n#endif\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\n    &acl_in_pool,\n#endif\n#if CONFIG_BT_L2CAP_TX_FRAG_COUNT > 0\n    &frag_pool,\n#endif\n#endif // defined(CONFIG_BT_CONN)\n#if defined(CONFIG_BT_DISCARDABLE_BUF_COUNT)\n    discardable_pool,\n#endif\n#ifdef CONFIG_BT_MESH\n    &adv_buf_pool,    &loopback_buf_pool,\n#if defined(CONFIG_BT_MESH_FRIEND)\n    &friend_buf_pool,\n#endif\n#endif\n#if defined(CONFIG_BT_BREDR)\n    &sdp_pool,        &br_sig_pool,       &hf_pool, &dummy_pool,\n#endif\n#if defined(CONFIG_AUTO_PTS)\n    &server_pool,     &data_pool,\n#endif\n};\n\n#else\nextern struct net_buf_pool _net_buf_pool_list[];\n#endif // BFLB_DYNAMIC_ALLOC_MEM\n\n#if defined(BFLB_DYNAMIC_ALLOC_MEM)\n#if (BFLB_STATIC_ALLOC_MEM)\nvoid net_buf_init(u8_t buf_type, struct net_buf_pool *buf_pool, u16_t buf_count, size_t data_size, destroy_cb_t destroy)\n#else\nvoid net_buf_init(struct net_buf_pool *buf_pool, u16_t buf_count, size_t data_size, destroy_cb_t destroy)\n#endif\n{\n  struct net_buf_pool_fixed *buf_fixed;\n  buf_pool->alloc             = (struct net_buf_data_alloc *)k_malloc(sizeof(struct net_buf_data_alloc));\n  buf_pool->alloc->alloc_data = (struct net_buf_pool_fixed *)k_malloc(sizeof(struct net_buf_pool_fixed));\n\n  buf_fixed = (struct net_buf_pool_fixed *)buf_pool->alloc->alloc_data;\n\n  buf_pool->alloc->cb  = &net_buf_fixed_cb;\n  buf_fixed->data_size = data_size;\n#if (BFLB_STATIC_ALLOC_MEM)\n  switch (buf_type) {\n  case HCI_CMD:\n    buf_fixed->data_pool = hci_cmd_data_pool;\n    break;\n  case HCI_RX:\n    buf_fixed->data_pool = hci_rx_data_pool;\n    break;\n#if defined(CONFIG_BT_CONN)\n  case ACL_TX:\n    buf_fixed->data_pool = acl_tx_data_pool;\n    break;\n  case NUM_COMPLETE:\n    buf_fixed->data_pool = num_complete_data_pool;\n    break;\n#if CONFIG_BT_ATT_PREPARE_COUNT > 0\n  case PREP:\n    buf_fixed->data_pool = prep_data_pool;\n    break;\n#endif\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\n  case ACL_IN:\n    buf_fixed->data_pool = acl_in_data_pool;\n    break;\n#endif\n#if CONFIG_BT_L2CAP_TX_FRAG_COUNT > 0\n  case FRAG:\n    buf_fixed->data_pool = frag_data_pool;\n    break;\n#endif\n#endif\n#if defined(CONFIG_BT_DISCARDABLE_BUF_COUNT)\n  case DISCARDABLE:\n    buf_fixed->data_pool = discardable_data_pool;\n    break;\n#endif\n  default:\n    break;\n  }\n#else\n  buf_fixed->data_pool = (u8_t *)k_malloc(buf_count * data_size);\n#endif\n  buf_pool->__bufs       = (struct net_buf *)k_malloc(buf_count * sizeof(struct net_buf));\n  buf_pool->buf_count    = buf_count;\n  buf_pool->uninit_count = buf_count;\n#if defined(CONFIG_NET_BUF_POOL_USAGE)\n  buf_pool->avail_count = buf_count;\n#endif\n  buf_pool->destroy = destroy;\n\n  k_lifo_init(&(buf_pool->free), buf_count);\n}\n\nvoid net_buf_deinit(struct net_buf_pool *buf_pool) {\n  extern void bt_delete_queue(struct k_fifo * queue_to_del);\n  bt_delete_queue((struct k_fifo *)(&(buf_pool->free)));\n\n  struct net_buf_pool_fixed *buf_fixed = (struct net_buf_pool_fixed *)buf_pool->alloc->alloc_data;\n#if !(BFLB_STATIC_ALLOC_MEM)\n  k_free(buf_fixed->data_pool);\n#endif\n  k_free(buf_pool->__bufs);\n  k_free(buf_pool->alloc->alloc_data);\n  k_free(buf_pool->alloc);\n}\n#endif\n\nstruct net_buf_pool *net_buf_pool_get(int id) {\n#if defined(BFLB_DYNAMIC_ALLOC_MEM)\n  return _net_buf_pool_list[id];\n#else\n  return &_net_buf_pool_list[id];\n#endif\n}\n\nstatic int pool_id(struct net_buf_pool *pool) {\n#if defined(BFLB_DYNAMIC_ALLOC_MEM)\n  int index;\n\n  for (index = 0; index < (sizeof(_net_buf_pool_list) / 4); index++) {\n    if (_net_buf_pool_list[index] == pool) {\n      break;\n    }\n  }\n  NET_BUF_ASSERT(index < (sizeof(_net_buf_pool_list) / 4));\n  return index;\n#else\n  return pool - _net_buf_pool_list;\n#endif\n}\n\nint net_buf_id(struct net_buf *buf) {\n  struct net_buf_pool *pool = net_buf_pool_get(buf->pool_id);\n\n  return buf - pool->__bufs;\n}\n\nstatic inline struct net_buf *pool_get_uninit(struct net_buf_pool *pool, u16_t uninit_count) {\n  struct net_buf *buf;\n\n  buf = &pool->__bufs[pool->buf_count - uninit_count];\n\n  buf->pool_id = pool_id(pool);\n\n  return buf;\n}\n\nvoid net_buf_reset(struct net_buf *buf) {\n  NET_BUF_ASSERT(buf->flags == 0U);\n  NET_BUF_ASSERT(buf->frags == NULL);\n\n  net_buf_simple_reset(&buf->b);\n}\n\n#if !defined(BFLB_BLE)\nstatic u8_t *generic_data_ref(struct net_buf *buf, u8_t *data) {\n  u8_t *ref_count;\n\n  ref_count = data - 1;\n  (*ref_count)++;\n\n  return data;\n}\n\nstatic u8_t *mem_pool_data_alloc(struct net_buf *buf, size_t *size, s32_t timeout) {\n  struct net_buf_pool *buf_pool = net_buf_pool_get(buf->pool_id);\n  struct k_mem_pool   *pool     = buf_pool->alloc->alloc_data;\n  struct k_mem_block   block;\n  u8_t                *ref_count;\n\n  /* Reserve extra space for k_mem_block_id and ref-count (u8_t) */\n  if (k_mem_pool_alloc(pool, &block, sizeof(struct k_mem_block_id) + 1 + *size, timeout)) {\n    return NULL;\n  }\n\n  /* save the block descriptor info at the start of the actual block */\n  memcpy(block.data, &block.id, sizeof(block.id));\n\n  ref_count  = (u8_t *)block.data + sizeof(block.id);\n  *ref_count = 1U;\n\n  /* Return pointer to the byte following the ref count */\n  return ref_count + 1;\n}\n\nstatic void mem_pool_data_unref(struct net_buf *buf, u8_t *data) {\n  struct k_mem_block_id id;\n  u8_t                 *ref_count;\n\n  ref_count = data - 1;\n  if (--(*ref_count)) {\n    return;\n  }\n\n  /* Need to copy to local variable due to alignment */\n  memcpy(&id, ref_count - sizeof(id), sizeof(id));\n  k_mem_pool_free_id(&id);\n}\n\nconst struct net_buf_data_cb net_buf_var_cb = {\n    .alloc = mem_pool_data_alloc,\n    .ref   = generic_data_ref,\n    .unref = mem_pool_data_unref,\n};\n#endif\n\nstatic u8_t *fixed_data_alloc(struct net_buf *buf, size_t *size, s32_t timeout) {\n  struct net_buf_pool             *pool  = net_buf_pool_get(buf->pool_id);\n  const struct net_buf_pool_fixed *fixed = pool->alloc->alloc_data;\n\n  *size = MIN(fixed->data_size, *size);\n\n  return fixed->data_pool + fixed->data_size * net_buf_id(buf);\n}\n\nstatic void fixed_data_unref(struct net_buf *buf, u8_t *data) { /* Nothing needed for fixed-size data pools */ }\n\nconst struct net_buf_data_cb net_buf_fixed_cb = {\n    .alloc = fixed_data_alloc,\n    .unref = fixed_data_unref,\n};\n\n#if defined(CONFIG_HEAP_MEM_POOL_SIZE) && (CONFIG_HEAP_MEM_POOL_SIZE > 0)\n\nstatic u8_t *heap_data_alloc(struct net_buf *buf, size_t *size, s32_t timeout) {\n  u8_t *ref_count;\n\n  ref_count = k_malloc(1 + *size);\n  if (!ref_count) {\n    return NULL;\n  }\n\n  *ref_count = 1U;\n\n  return ref_count + 1;\n}\n\nstatic void heap_data_unref(struct net_buf *buf, u8_t *data) {\n  u8_t *ref_count;\n\n  ref_count = data - 1;\n  if (--(*ref_count)) {\n    return;\n  }\n\n  k_free(ref_count);\n}\n\nstatic const struct net_buf_data_cb net_buf_heap_cb = {\n    .alloc = heap_data_alloc,\n    .ref   = generic_data_ref,\n    .unref = heap_data_unref,\n};\n\nconst struct net_buf_data_alloc net_buf_heap_alloc = {\n    .cb = &net_buf_heap_cb,\n};\n\n#endif /* CONFIG_HEAP_MEM_POOL_SIZE > 0 */\n\nstatic u8_t *data_alloc(struct net_buf *buf, size_t *size, s32_t timeout) {\n  struct net_buf_pool *pool = net_buf_pool_get(buf->pool_id);\n\n  return pool->alloc->cb->alloc(buf, size, timeout);\n}\n\nstatic u8_t *data_ref(struct net_buf *buf, u8_t *data) {\n  struct net_buf_pool *pool = net_buf_pool_get(buf->pool_id);\n\n  return pool->alloc->cb->ref(buf, data);\n}\n\nstatic void data_unref(struct net_buf *buf, u8_t *data) {\n  struct net_buf_pool *pool = net_buf_pool_get(buf->pool_id);\n\n  if (buf->flags & NET_BUF_EXTERNAL_DATA) {\n    return;\n  }\n\n  pool->alloc->cb->unref(buf, data);\n}\n\n#if defined(CONFIG_NET_BUF_LOG)\nstruct net_buf *net_buf_alloc_len_debug(struct net_buf_pool *pool, size_t size, s32_t timeout, const char *func, int line)\n#else\nstruct net_buf *net_buf_alloc_len(struct net_buf_pool *pool, size_t size, s32_t timeout)\n#endif\n{\n  u32_t           alloc_start = k_uptime_get_32();\n  struct net_buf *buf;\n  unsigned int    key;\n\n  NET_BUF_ASSERT(pool);\n\n  NET_BUF_DBG(\"%s():%d: pool %p size %zu timeout %d\", func, line, pool, size, timeout);\n\n#if (BFLB_BT_CO_THREAD)\n  extern struct k_thread co_thread_data;\n  if (k_is_current_thread(&co_thread_data))\n    timeout = K_NO_WAIT;\n#endif\n\n  /* We need to lock interrupts temporarily to prevent race conditions\n   * when accessing pool->uninit_count.\n   */\n  key = irq_lock();\n\n  /* If there are uninitialized buffers we're guaranteed to succeed\n   * with the allocation one way or another.\n   */\n  if (pool->uninit_count) {\n    u16_t uninit_count;\n\n    /* If this is not the first access to the pool, we can\n     * be opportunistic and try to fetch a previously used\n     * buffer from the LIFO with K_NO_WAIT.\n     */\n    if (pool->uninit_count < pool->buf_count) {\n      buf = k_lifo_get(&pool->free, K_NO_WAIT);\n      if (buf) {\n        irq_unlock(key);\n        goto success;\n      }\n    }\n\n    uninit_count = pool->uninit_count--;\n    irq_unlock(key);\n\n    buf = pool_get_uninit(pool, uninit_count);\n    goto success;\n  }\n\n  irq_unlock(key);\n\n#if defined(CONFIG_NET_BUF_LOG) && (CONFIG_NET_BUF_LOG_LEVEL >= LOG_LEVEL_WRN)\n  if (timeout == K_FOREVER) {\n    u32_t ref = k_uptime_get_32();\n    buf       = k_lifo_get(&pool->free, K_NO_WAIT);\n    while (!buf) {\n#if defined(CONFIG_NET_BUF_POOL_USAGE)\n      NET_BUF_WARN(\"%s():%d: Pool %s low on buffers.\", func, line, pool->name);\n#else\n      NET_BUF_WARN(\"%s():%d: Pool %p low on buffers.\", func, line, pool);\n#endif\n      buf = k_lifo_get(&pool->free, WARN_ALLOC_INTERVAL);\n#if defined(CONFIG_NET_BUF_POOL_USAGE)\n      NET_BUF_WARN(\"%s():%d: Pool %s blocked for %u secs\", func, line, pool->name, (k_uptime_get_32() - ref) / MSEC_PER_SEC);\n#else\n      NET_BUF_WARN(\"%s():%d: Pool %p blocked for %u secs\", func, line, pool, (k_uptime_get_32() - ref) / MSEC_PER_SEC);\n#endif\n    }\n  } else {\n    buf = k_lifo_get(&pool->free, timeout);\n  }\n#else\n  buf = k_lifo_get(&pool->free, timeout);\n#endif\n  if (!buf) {\n    NET_BUF_ERR(\"%s():%d: Failed to get free buffer\", func, line);\n    return NULL;\n  }\n\nsuccess:\n  NET_BUF_DBG(\"allocated buf %p\", buf);\n\n  if (size) {\n    if (timeout != K_NO_WAIT && timeout != K_FOREVER) {\n      u32_t diff = k_uptime_get_32() - alloc_start;\n\n      timeout -= MIN(timeout, diff);\n    }\n\n    buf->__buf = data_alloc(buf, &size, timeout);\n    if (!buf->__buf) {\n      NET_BUF_ERR(\"%s():%d: Failed to allocate data\", func, line);\n      net_buf_destroy(buf);\n      return NULL;\n    }\n  } else {\n    buf->__buf = NULL;\n  }\n\n  buf->ref   = 1U;\n  buf->flags = 0U;\n  buf->frags = NULL;\n  buf->size  = size;\n  net_buf_reset(buf);\n\n#if defined(CONFIG_NET_BUF_POOL_USAGE)\n  pool->avail_count--;\n  NET_BUF_ASSERT(pool->avail_count >= 0);\n#endif\n\n  return buf;\n}\n\n#if defined(CONFIG_NET_BUF_LOG)\nstruct net_buf *net_buf_alloc_fixed_debug(struct net_buf_pool *pool, s32_t timeout, const char *func, int line) {\n  const struct net_buf_pool_fixed *fixed = pool->alloc->alloc_data;\n\n  return net_buf_alloc_len_debug(pool, fixed->data_size, timeout, func, line);\n}\n#else\nstruct net_buf *net_buf_alloc_fixed(struct net_buf_pool *pool, s32_t timeout) {\n  const struct net_buf_pool_fixed *fixed = pool->alloc->alloc_data;\n\n  return net_buf_alloc_len(pool, fixed->data_size, timeout);\n}\n#endif\n\n#if defined(CONFIG_NET_BUF_LOG)\nstruct net_buf *net_buf_alloc_with_data_debug(struct net_buf_pool *pool, void *data, size_t size, s32_t timeout, const char *func, int line)\n#else\nstruct net_buf *net_buf_alloc_with_data(struct net_buf_pool *pool, void *data, size_t size, s32_t timeout)\n#endif\n{\n  struct net_buf *buf;\n\n#if defined(CONFIG_NET_BUF_LOG)\n  buf = net_buf_alloc_len_debug(pool, 0, timeout, func, line);\n#else\n  buf = net_buf_alloc_len(pool, 0, timeout);\n#endif\n  if (!buf) {\n    return NULL;\n  }\n\n  buf->__buf = data;\n  buf->data  = data;\n  buf->size  = size;\n  buf->len   = size;\n  buf->flags = NET_BUF_EXTERNAL_DATA;\n\n  return buf;\n}\n\n#if defined(CONFIG_NET_BUF_LOG)\nstruct net_buf *net_buf_get_debug(struct k_fifo *fifo, s32_t timeout, const char *func, int line)\n#else\nstruct net_buf *net_buf_get(struct k_fifo *fifo, s32_t timeout)\n#endif\n{\n  struct net_buf *buf, *frag;\n\n  NET_BUF_DBG(\"%s():%d: fifo %p timeout %d\", func, line, fifo, timeout);\n\n  buf = k_fifo_get(fifo, timeout);\n  if (!buf) {\n    return NULL;\n  }\n\n  NET_BUF_DBG(\"%s():%d: buf %p fifo %p\", func, line, buf, fifo);\n\n  /* Get any fragments belonging to this buffer */\n  for (frag = buf; (frag->flags & NET_BUF_FRAGS); frag = frag->frags) {\n    frag->frags = k_fifo_get(fifo, K_NO_WAIT);\n    NET_BUF_ASSERT(frag->frags);\n\n    /* The fragments flag is only for FIFO-internal usage */\n    frag->flags &= ~NET_BUF_FRAGS;\n  }\n\n  /* Mark the end of the fragment list */\n  frag->frags = NULL;\n\n  return buf;\n}\n\nvoid net_buf_simple_init_with_data(struct net_buf_simple *buf, void *data, size_t size) {\n  buf->__buf = data;\n  buf->data  = data;\n  buf->size  = size;\n  buf->len   = size;\n}\n\nvoid net_buf_simple_reserve(struct net_buf_simple *buf, size_t reserve) {\n  NET_BUF_ASSERT(buf);\n  NET_BUF_ASSERT(buf->len == 0U);\n  NET_BUF_DBG(\"buf %p reserve %zu\", buf, reserve);\n\n  buf->data = buf->__buf + reserve;\n}\n\nvoid net_buf_slist_put(sys_slist_t *list, struct net_buf *buf) {\n  struct net_buf *tail;\n  unsigned int    key;\n\n  NET_BUF_ASSERT(list);\n  NET_BUF_ASSERT(buf);\n\n  for (tail = buf; tail->frags; tail = tail->frags) {\n    tail->flags |= NET_BUF_FRAGS;\n  }\n\n  key = irq_lock();\n  sys_slist_append_list(list, &buf->node, &tail->node);\n  irq_unlock(key);\n}\n\nstruct net_buf *net_buf_slist_get(sys_slist_t *list) {\n  struct net_buf *buf, *frag;\n  unsigned int    key;\n\n  NET_BUF_ASSERT(list);\n\n  key = irq_lock();\n  buf = (void *)sys_slist_get(list);\n  irq_unlock(key);\n\n  if (!buf) {\n    return NULL;\n  }\n\n  /* Get any fragments belonging to this buffer */\n  for (frag = buf; (frag->flags & NET_BUF_FRAGS); frag = frag->frags) {\n    key         = irq_lock();\n    frag->frags = (void *)sys_slist_get(list);\n    irq_unlock(key);\n\n    NET_BUF_ASSERT(frag->frags);\n\n    /* The fragments flag is only for list-internal usage */\n    frag->flags &= ~NET_BUF_FRAGS;\n  }\n\n  /* Mark the end of the fragment list */\n  frag->frags = NULL;\n\n  return buf;\n}\n\nvoid net_buf_put(struct k_fifo *fifo, struct net_buf *buf) {\n  struct net_buf *tail;\n\n  NET_BUF_ASSERT(fifo);\n  NET_BUF_ASSERT(buf);\n\n  for (tail = buf; tail->frags; tail = tail->frags) {\n    tail->flags |= NET_BUF_FRAGS;\n  }\n\n  k_fifo_put_list(fifo, buf, tail);\n}\n\n#if defined(CONFIG_NET_BUF_LOG)\nvoid net_buf_unref_debug(struct net_buf *buf, const char *func, int line)\n#else\nvoid net_buf_unref(struct net_buf *buf)\n#endif\n{\n  NET_BUF_ASSERT(buf);\n\n  while (buf) {\n    struct net_buf      *frags = buf->frags;\n    struct net_buf_pool *pool;\n\n#if defined(CONFIG_NET_BUF_LOG)\n    if (!buf->ref) {\n      NET_BUF_ERR(\"%s():%d: buf %p double free\", func, line, buf);\n      return;\n    }\n#endif\n    NET_BUF_DBG(\"buf %p ref %u pool_id %u frags %p\", buf, buf->ref, buf->pool_id, buf->frags);\n\n    unsigned int key = irq_lock(); /* Added by bouffalo lab, to protect ref decrease */\n    if (--buf->ref > 0) {\n      irq_unlock(key); /* Added by bouffalo lab */\n      return;\n    }\n    irq_unlock(key); /* Added by bouffalo lab */\n\n    if (buf->__buf) {\n      data_unref(buf, buf->__buf);\n      buf->__buf = NULL;\n    }\n\n    buf->data  = NULL;\n    buf->frags = NULL;\n\n    pool = net_buf_pool_get(buf->pool_id);\n\n#if defined(CONFIG_NET_BUF_POOL_USAGE)\n    pool->avail_count++;\n    NET_BUF_ASSERT(pool->avail_count <= pool->buf_count);\n#endif\n\n    if (pool->destroy) {\n      pool->destroy(buf);\n    } else {\n      net_buf_destroy(buf);\n    }\n\n    buf = frags;\n\n#if defined(BFLB_BLE)\n    if (pool == &hci_rx_pool) {\n      bl_trigger_queued_msg();\n      return;\n    }\n#endif\n  }\n}\n\nstruct net_buf *net_buf_ref(struct net_buf *buf) {\n  NET_BUF_ASSERT(buf);\n\n  NET_BUF_DBG(\"buf %p (old) ref %u pool_id %u\", buf, buf->ref, buf->pool_id);\n\n  unsigned int key = irq_lock(); /* Added by bouffalo lab,  to protect ref increase */\n  buf->ref++;\n  irq_unlock(key); /* Added by bouffalo lab */\n  return buf;\n}\n\nstruct net_buf *net_buf_clone(struct net_buf *buf, s32_t timeout) {\n  u32_t                alloc_start = k_uptime_get_32();\n  struct net_buf_pool *pool;\n  struct net_buf      *clone;\n\n  NET_BUF_ASSERT(buf);\n\n  pool = net_buf_pool_get(buf->pool_id);\n\n  clone = net_buf_alloc_len(pool, 0, timeout);\n  if (!clone) {\n    return NULL;\n  }\n\n  /* If the pool supports data referencing use that. Otherwise\n   * we need to allocate new data and make a copy.\n   */\n  if (pool->alloc->cb->ref && !(buf->flags & NET_BUF_EXTERNAL_DATA)) {\n    clone->__buf = data_ref(buf, buf->__buf);\n    clone->data  = buf->data;\n    clone->len   = buf->len;\n    clone->size  = buf->size;\n  } else {\n    size_t size = buf->size;\n\n    if (timeout != K_NO_WAIT && timeout != K_FOREVER) {\n      u32_t diff = k_uptime_get_32() - alloc_start;\n\n      timeout -= MIN(timeout, diff);\n    }\n\n    clone->__buf = data_alloc(clone, &size, timeout);\n    if (!clone->__buf || size < buf->size) {\n      net_buf_destroy(clone);\n      return NULL;\n    }\n\n    clone->size = size;\n    clone->data = clone->__buf + net_buf_headroom(buf);\n    net_buf_add_mem(clone, buf->data, buf->len);\n  }\n\n  return clone;\n}\n\nstruct net_buf *net_buf_frag_last(struct net_buf *buf) {\n  NET_BUF_ASSERT(buf);\n\n  while (buf->frags) {\n    buf = buf->frags;\n  }\n\n  return buf;\n}\n\nvoid net_buf_frag_insert(struct net_buf *parent, struct net_buf *frag) {\n  NET_BUF_ASSERT(parent);\n  NET_BUF_ASSERT(frag);\n\n  if (parent->frags) {\n    net_buf_frag_last(frag)->frags = parent->frags;\n  }\n  /* Take ownership of the fragment reference */\n  parent->frags = frag;\n}\n\nstruct net_buf *net_buf_frag_add(struct net_buf *head, struct net_buf *frag) {\n  NET_BUF_ASSERT(frag);\n\n  if (!head) {\n    return net_buf_ref(frag);\n  }\n\n  net_buf_frag_insert(net_buf_frag_last(head), frag);\n\n  return head;\n}\n\n#if defined(CONFIG_NET_BUF_LOG)\nstruct net_buf *net_buf_frag_del_debug(struct net_buf *parent, struct net_buf *frag, const char *func, int line)\n#else\nstruct net_buf *net_buf_frag_del(struct net_buf *parent, struct net_buf *frag)\n#endif\n{\n  struct net_buf *next_frag;\n\n  NET_BUF_ASSERT(frag);\n\n  if (parent) {\n    NET_BUF_ASSERT(parent->frags);\n    NET_BUF_ASSERT(parent->frags == frag);\n    parent->frags = frag->frags;\n  }\n\n  next_frag = frag->frags;\n\n  frag->frags = NULL;\n\n#if defined(CONFIG_NET_BUF_LOG)\n  net_buf_unref_debug(frag, func, line);\n#else\n  net_buf_unref(frag);\n#endif\n\n  return next_frag;\n}\n\nsize_t net_buf_linearize(void *dst, size_t dst_len, struct net_buf *src, size_t offset, size_t len) {\n  struct net_buf *frag;\n  size_t          to_copy;\n  size_t          copied;\n\n  len = MIN(len, dst_len);\n\n  frag = src;\n\n  /* find the right fragment to start copying from */\n  while (frag && offset >= frag->len) {\n    offset -= frag->len;\n    frag = frag->frags;\n  }\n\n  /* traverse the fragment chain until len bytes are copied */\n  copied = 0;\n  while (frag && len > 0) {\n    to_copy = MIN(len, frag->len - offset);\n    memcpy((u8_t *)dst + copied, frag->data + offset, to_copy);\n\n    copied += to_copy;\n\n    /* to_copy is always <= len */\n    len -= to_copy;\n    frag = frag->frags;\n\n    /* after the first iteration, this value will be 0 */\n    offset = 0;\n  }\n\n  return copied;\n}\n\n/* This helper routine will append multiple bytes, if there is no place for\n * the data in current fragment then create new fragment and add it to\n * the buffer. It assumes that the buffer has at least one fragment.\n */\nsize_t net_buf_append_bytes(struct net_buf *buf, size_t len, const void *value, s32_t timeout, net_buf_allocator_cb allocate_cb, void *user_data) {\n  struct net_buf *frag      = net_buf_frag_last(buf);\n  size_t          added_len = 0;\n  const u8_t     *value8    = value;\n\n  do {\n    u16_t count = MIN(len, net_buf_tailroom(frag));\n\n    net_buf_add_mem(frag, value8, count);\n    len -= count;\n    added_len += count;\n    value8 += count;\n\n    if (len == 0) {\n      return added_len;\n    }\n\n    frag = allocate_cb(timeout, user_data);\n    if (!frag) {\n      return added_len;\n    }\n\n    net_buf_frag_add(buf, frag);\n  } while (1);\n\n  /* Unreachable */\n  return 0;\n}\n\n#if defined(CONFIG_NET_BUF_SIMPLE_LOG)\n#define NET_BUF_SIMPLE_DBG(fmt, ...)  NET_BUF_DBG(fmt, ##__VA_ARGS__)\n#define NET_BUF_SIMPLE_ERR(fmt, ...)  NET_BUF_ERR(fmt, ##__VA_ARGS__)\n#define NET_BUF_SIMPLE_WARN(fmt, ...) NET_BUF_WARN(fmt, ##__VA_ARGS__)\n#define NET_BUF_SIMPLE_INFO(fmt, ...) NET_BUF_INFO(fmt, ##__VA_ARGS__)\n#define NET_BUF_SIMPLE_ASSERT(cond)   NET_BUF_ASSERT(cond)\n#else\n#define NET_BUF_SIMPLE_DBG(fmt, ...)\n#define NET_BUF_SIMPLE_ERR(fmt, ...)\n#define NET_BUF_SIMPLE_WARN(fmt, ...)\n#define NET_BUF_SIMPLE_INFO(fmt, ...)\n#define NET_BUF_SIMPLE_ASSERT(cond)\n#endif /* CONFIG_NET_BUF_SIMPLE_LOG */\n\nvoid net_buf_simple_clone(const struct net_buf_simple *original, struct net_buf_simple *clone) { memcpy(clone, original, sizeof(struct net_buf_simple)); }\n\nvoid *net_buf_simple_add(struct net_buf_simple *buf, size_t len) {\n  u8_t *tail = net_buf_simple_tail(buf);\n\n  NET_BUF_SIMPLE_DBG(\"buf %p len %zu\", buf, len);\n\n  NET_BUF_SIMPLE_ASSERT(net_buf_simple_tailroom(buf) >= len);\n\n  buf->len += len;\n  return tail;\n}\n\nvoid *net_buf_simple_add_mem(struct net_buf_simple *buf, const void *mem, size_t len) {\n  NET_BUF_SIMPLE_DBG(\"buf %p len %zu\", buf, len);\n\n  return memcpy(net_buf_simple_add(buf, len), mem, len);\n}\n\nu8_t *net_buf_simple_add_u8(struct net_buf_simple *buf, u8_t val) {\n  u8_t *u8;\n\n  NET_BUF_SIMPLE_DBG(\"buf %p val 0x%02x\", buf, val);\n\n  u8  = net_buf_simple_add(buf, 1);\n  *u8 = val;\n\n  return u8;\n}\n\nvoid net_buf_simple_add_le16(struct net_buf_simple *buf, u16_t val) {\n  NET_BUF_SIMPLE_DBG(\"buf %p val %u\", buf, val);\n\n  sys_put_le16(val, net_buf_simple_add(buf, sizeof(val)));\n}\n\nvoid net_buf_simple_add_be16(struct net_buf_simple *buf, u16_t val) {\n  NET_BUF_SIMPLE_DBG(\"buf %p val %u\", buf, val);\n\n  sys_put_be16(val, net_buf_simple_add(buf, sizeof(val)));\n}\n\nvoid net_buf_simple_add_le24(struct net_buf_simple *buf, uint32_t val) {\n  NET_BUF_SIMPLE_DBG(\"buf %p val %u\", buf, val);\n\n  sys_put_le24(val, net_buf_simple_add(buf, 3));\n}\n\nvoid net_buf_simple_add_be24(struct net_buf_simple *buf, uint32_t val) {\n  NET_BUF_SIMPLE_DBG(\"buf %p val %u\", buf, val);\n\n  sys_put_be24(val, net_buf_simple_add(buf, 3));\n}\n\nvoid net_buf_simple_add_le32(struct net_buf_simple *buf, u32_t val) {\n  NET_BUF_SIMPLE_DBG(\"buf %p val %u\", buf, val);\n\n  sys_put_le32(val, net_buf_simple_add(buf, sizeof(val)));\n}\n\nvoid net_buf_simple_add_be32(struct net_buf_simple *buf, u32_t val) {\n  NET_BUF_SIMPLE_DBG(\"buf %p val %u\", buf, val);\n\n  sys_put_be32(val, net_buf_simple_add(buf, sizeof(val)));\n}\n\nvoid *net_buf_simple_push(struct net_buf_simple *buf, size_t len) {\n  NET_BUF_SIMPLE_DBG(\"buf %p len %zu\", buf, len);\n\n  NET_BUF_SIMPLE_ASSERT(net_buf_simple_headroom(buf) >= len);\n\n  buf->data -= len;\n  buf->len += len;\n  return buf->data;\n}\n\nvoid net_buf_simple_push_le16(struct net_buf_simple *buf, u16_t val) {\n  NET_BUF_SIMPLE_DBG(\"buf %p val %u\", buf, val);\n\n  sys_put_le16(val, net_buf_simple_push(buf, sizeof(val)));\n}\n\nvoid net_buf_simple_push_be16(struct net_buf_simple *buf, u16_t val) {\n  NET_BUF_SIMPLE_DBG(\"buf %p val %u\", buf, val);\n\n  sys_put_be16(val, net_buf_simple_push(buf, sizeof(val)));\n}\n\nvoid net_buf_simple_push_u8(struct net_buf_simple *buf, u8_t val) {\n  u8_t *data = net_buf_simple_push(buf, 1);\n\n  *data = val;\n}\n\nvoid net_buf_simple_push_le24(struct net_buf_simple *buf, uint32_t val) {\n  NET_BUF_SIMPLE_DBG(\"buf %p val %u\", buf, val);\n\n  sys_put_le24(val, net_buf_simple_push(buf, 3));\n}\n\nvoid net_buf_simple_push_be24(struct net_buf_simple *buf, uint32_t val) {\n  NET_BUF_SIMPLE_DBG(\"buf %p val %u\", buf, val);\n\n  sys_put_be24(val, net_buf_simple_push(buf, 3));\n}\n\nvoid *net_buf_simple_pull(struct net_buf_simple *buf, size_t len) {\n  NET_BUF_SIMPLE_DBG(\"buf %p len %zu\", buf, len);\n\n  NET_BUF_SIMPLE_ASSERT(buf->len >= len);\n\n  buf->len -= len;\n  return buf->data += len;\n}\n\nvoid *net_buf_simple_pull_mem(struct net_buf_simple *buf, size_t len) {\n  void *data = buf->data;\n\n  NET_BUF_SIMPLE_DBG(\"buf %p len %zu\", buf, len);\n\n  NET_BUF_SIMPLE_ASSERT(buf->len >= len);\n\n  buf->len -= len;\n  buf->data += len;\n\n  return data;\n}\n\nu8_t net_buf_simple_pull_u8(struct net_buf_simple *buf) {\n  u8_t val;\n\n  val = buf->data[0];\n  net_buf_simple_pull(buf, 1);\n\n  return val;\n}\n\nu16_t net_buf_simple_pull_le16(struct net_buf_simple *buf) {\n  u16_t val;\n\n  val = UNALIGNED_GET((u16_t *)buf->data);\n  net_buf_simple_pull(buf, sizeof(val));\n\n  return sys_le16_to_cpu(val);\n}\n\nu16_t net_buf_simple_pull_be16(struct net_buf_simple *buf) {\n  u16_t val;\n\n  val = UNALIGNED_GET((u16_t *)buf->data);\n  net_buf_simple_pull(buf, sizeof(val));\n\n  return sys_be16_to_cpu(val);\n}\n\nu32_t net_buf_simple_pull_le32(struct net_buf_simple *buf) {\n  u32_t val;\n\n  val = UNALIGNED_GET((u32_t *)buf->data);\n  net_buf_simple_pull(buf, sizeof(val));\n\n  return sys_le32_to_cpu(val);\n}\n\nu32_t net_buf_simple_pull_be32(struct net_buf_simple *buf) {\n  u32_t val;\n\n  val = UNALIGNED_GET((u32_t *)buf->data);\n  net_buf_simple_pull(buf, sizeof(val));\n\n  return sys_be32_to_cpu(val);\n}\n\nsize_t net_buf_simple_headroom(struct net_buf_simple *buf) { return buf->data - buf->__buf; }\n\nsize_t net_buf_simple_tailroom(struct net_buf_simple *buf) { return buf->size - net_buf_simple_headroom(buf) - buf->len; }\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/dec.c",
    "content": "/*\n * Copyright (c) 2019 Oticon A/S\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <util.h>\n\nu8_t u8_to_dec(char *buf, u8_t buflen, u8_t value) {\n  u8_t divisor    = 100;\n  u8_t num_digits = 0;\n  u8_t digit;\n\n  while (buflen > 0 && divisor > 0) {\n    digit = value / divisor;\n    if (digit != 0 || divisor == 1 || num_digits != 0) {\n      *buf = (char)digit + '0';\n      buf++;\n      buflen--;\n      num_digits++;\n    }\n\n    value -= digit * divisor;\n    divisor /= 10;\n  }\n\n  if (buflen) {\n    *buf = '\\0';\n  }\n\n  return num_digits;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/dummy.c",
    "content": "/**\n * @file dummy.c\n * Static compilation checks.\n */\n\n/*\n * Copyright (c) 2017 Nordic Semiconductor ASA\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <zephyr.h>\n\n#if defined(CONFIG_BT_HCI_HOST)\n/* The Bluetooth subsystem requires the Tx thread to execute at higher priority\n * than the Rx thread as the Tx thread needs to process the acknowledgements\n * before new Rx data is processed. This is a necessity to correctly detect\n * transaction violations in ATT and SMP protocols.\n */\nBUILD_ASSERT(CONFIG_BT_HCI_TX_PRIO < CONFIG_BT_RX_PRIO);\n#endif\n\n#if defined(CONFIG_BT_CTLR)\n/* The Bluetooth Controller's priority receive thread priority shall be higher\n * than the Bluetooth Host's Tx and the Controller's receive thread priority.\n * This is required in order to dispatch Number of Completed Packets event\n * before any new data arrives on a connection to the Host threads.\n */\nBUILD_ASSERT(CONFIG_BT_CTLR_RX_PRIO < CONFIG_BT_HCI_TX_PRIO);\n#endif /* CONFIG_BT_CTLR */\n\n/* Immediate logging is not supported with the software-based Link Layer\n * since it introduces ISR latency due to outputting log messages with\n * interrupts disabled.\n */\n#if !defined(CONFIG_TEST) && !defined(CONFIG_ARCH_POSIX) && (defined(CONFIG_BT_LL_SW_SPLIT) || defined(CONFIG_BT_LL_SW_LEGACY))\nBUILD_ASSERT_MSG(!IS_ENABLED(CONFIG_LOG_IMMEDIATE), \"Immediate logging not \"\n                                                    \"supported with the software Link Layer\");\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/hex.c",
    "content": "/*\n * Copyright (c) 2019 Nordic Semiconductor ASA\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <errno.h>\n#include <stddef.h>\n#include <zephyr/types.h>\n// #include <sys/util.h>\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/atomic.h",
    "content": "/* atomic operations */\n\n/*\n * Copyright (c) 1997-2015, Wind River Systems, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#ifndef __ATOMIC_H__\n#define __ATOMIC_H__\n\n#include <stdbool.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef int atomic_t;\ntypedef atomic_t atomic_val_t;\n\n/**\n * @defgroup atomic_apis Atomic Services APIs\n * @ingroup kernel_apis\n * @{\n */\n\n/**\n * @brief Atomic compare-and-set.\n *\n * This routine performs an atomic compare-and-set on @a target. If the current\n * value of @a target equals @a old_value, @a target is set to @a new_value.\n * If the current value of @a target does not equal @a old_value, @a target\n * is left unchanged.\n *\n * @param target Address of atomic variable.\n * @param old_value Original value to compare against.\n * @param new_value New value to store.\n * @return 1 if @a new_value is written, 0 otherwise.\n */\n#ifdef CONFIG_ATOMIC_OPERATIONS_BUILTIN\nstatic inline int atomic_cas(atomic_t *target, atomic_val_t old_value,\n                             atomic_val_t new_value)\n{\n    return __atomic_compare_exchange_n(target, &old_value, new_value,\n                                       0, __ATOMIC_SEQ_CST,\n                                       __ATOMIC_SEQ_CST);\n}\n#else\nextern int atomic_cas(atomic_t *target, atomic_val_t old_value,\n                      atomic_val_t new_value);\n#endif\n\n/**\n *\n * @brief Atomic addition.\n *\n * This routine performs an atomic addition on @a target.\n *\n * @param target Address of atomic variable.\n * @param value Value to add.\n *\n * @return Previous value of @a target.\n */\n#ifdef CONFIG_ATOMIC_OPERATIONS_BUILTIN\nstatic inline atomic_val_t atomic_add(atomic_t *target, atomic_val_t value)\n{\n    return __atomic_fetch_add(target, value, __ATOMIC_SEQ_CST);\n}\n#else\nextern atomic_val_t atomic_add(atomic_t *target, atomic_val_t value);\n#endif\n\n/**\n *\n * @brief Atomic subtraction.\n *\n * This routine performs an atomic subtraction on @a target.\n *\n * @param target Address of atomic variable.\n * @param value Value to subtract.\n *\n * @return Previous value of @a target.\n */\n#ifdef CONFIG_ATOMIC_OPERATIONS_BUILTIN\nstatic inline atomic_val_t atomic_sub(atomic_t *target, atomic_val_t value)\n{\n    return __atomic_fetch_sub(target, value, __ATOMIC_SEQ_CST);\n}\n#else\nextern atomic_val_t atomic_sub(atomic_t *target, atomic_val_t value);\n#endif\n\n/**\n *\n * @brief Atomic increment.\n *\n * This routine performs an atomic increment by 1 on @a target.\n *\n * @param target Address of atomic variable.\n *\n * @return Previous value of @a target.\n */\n#ifdef CONFIG_ATOMIC_OPERATIONS_BUILTIN\nstatic inline atomic_val_t atomic_inc(atomic_t *target)\n{\n    return atomic_add(target, 1);\n}\n#else\nextern atomic_val_t atomic_inc(atomic_t *target);\n#endif\n\n/**\n *\n * @brief Atomic decrement.\n *\n * This routine performs an atomic decrement by 1 on @a target.\n *\n * @param target Address of atomic variable.\n *\n * @return Previous value of @a target.\n */\n#ifdef CONFIG_ATOMIC_OPERATIONS_BUILTIN\nstatic inline atomic_val_t atomic_dec(atomic_t *target)\n{\n    return atomic_sub(target, 1);\n}\n#else\nextern atomic_val_t atomic_dec(atomic_t *target);\n#endif\n\n/**\n *\n * @brief Atomic get.\n *\n * This routine performs an atomic read on @a target.\n *\n * @param target Address of atomic variable.\n *\n * @return Value of @a target.\n */\n#ifdef CONFIG_ATOMIC_OPERATIONS_BUILTIN\nstatic inline atomic_val_t atomic_get(const atomic_t *target)\n{\n    return __atomic_load_n(target, __ATOMIC_SEQ_CST);\n}\n#else\nextern atomic_val_t atomic_get(const atomic_t *target);\n#endif\n\n/**\n *\n * @brief Atomic get-and-set.\n *\n * This routine atomically sets @a target to @a value and returns\n * the previous value of @a target.\n *\n * @param target Address of atomic variable.\n * @param value Value to write to @a target.\n *\n * @return Previous value of @a target.\n */\n#ifdef CONFIG_ATOMIC_OPERATIONS_BUILTIN\nstatic inline atomic_val_t atomic_set(atomic_t *target, atomic_val_t value)\n{\n    /* This builtin, as described by Intel, is not a traditional\n\t * test-and-set operation, but rather an atomic exchange operation. It\n\t * writes value into *ptr, and returns the previous contents of *ptr.\n\t */\n    return __atomic_exchange_n(target, value, __ATOMIC_SEQ_CST);\n}\n#else\nextern atomic_val_t atomic_set(atomic_t *target, atomic_val_t value);\n#endif\n\n/**\n *\n * @brief Atomic clear.\n *\n * This routine atomically sets @a target to zero and returns its previous\n * value. (Hence, it is equivalent to atomic_set(target, 0).)\n *\n * @param target Address of atomic variable.\n *\n * @return Previous value of @a target.\n */\n#ifdef CONFIG_ATOMIC_OPERATIONS_BUILTIN\nstatic inline atomic_val_t atomic_clear(atomic_t *target)\n{\n    return atomic_set(target, 0);\n}\n#else\nextern atomic_val_t atomic_clear(atomic_t *target);\n#endif\n\n/**\n *\n * @brief Atomic bitwise inclusive OR.\n *\n * This routine atomically sets @a target to the bitwise inclusive OR of\n * @a target and @a value.\n *\n * @param target Address of atomic variable.\n * @param value Value to OR.\n *\n * @return Previous value of @a target.\n */\n#ifdef CONFIG_ATOMIC_OPERATIONS_BUILTIN\nstatic inline atomic_val_t atomic_or(atomic_t *target, atomic_val_t value)\n{\n    return __atomic_fetch_or(target, value, __ATOMIC_SEQ_CST);\n}\n#else\nextern atomic_val_t atomic_or(atomic_t *target, atomic_val_t value);\n#endif\n\n/**\n *\n * @brief Atomic bitwise exclusive OR (XOR).\n *\n * This routine atomically sets @a target to the bitwise exclusive OR (XOR) of\n * @a target and @a value.\n *\n * @param target Address of atomic variable.\n * @param value Value to XOR\n *\n * @return Previous value of @a target.\n */\n#ifdef CONFIG_ATOMIC_OPERATIONS_BUILTIN\nstatic inline atomic_val_t atomic_xor(atomic_t *target, atomic_val_t value)\n{\n    return __atomic_fetch_xor(target, value, __ATOMIC_SEQ_CST);\n}\n#else\nextern atomic_val_t atomic_xor(atomic_t *target, atomic_val_t value);\n#endif\n\n/**\n *\n * @brief Atomic bitwise AND.\n *\n * This routine atomically sets @a target to the bitwise AND of @a target\n * and @a value.\n *\n * @param target Address of atomic variable.\n * @param value Value to AND.\n *\n * @return Previous value of @a target.\n */\n#ifdef CONFIG_ATOMIC_OPERATIONS_BUILTIN\nstatic inline atomic_val_t atomic_and(atomic_t *target, atomic_val_t value)\n{\n    return __atomic_fetch_and(target, value, __ATOMIC_SEQ_CST);\n}\n#else\nextern atomic_val_t atomic_and(atomic_t *target, atomic_val_t value);\n#endif\n\n/**\n *\n * @brief Atomic bitwise NAND.\n *\n * This routine atomically sets @a target to the bitwise NAND of @a target\n * and @a value. (This operation is equivalent to target = ~(target & value).)\n *\n * @param target Address of atomic variable.\n * @param value Value to NAND.\n *\n * @return Previous value of @a target.\n */\n#ifdef CONFIG_ATOMIC_OPERATIONS_BUILTIN\nstatic inline atomic_val_t atomic_nand(atomic_t *target, atomic_val_t value)\n{\n    return __atomic_fetch_nand(target, value, __ATOMIC_SEQ_CST);\n}\n#else\nextern atomic_val_t atomic_nand(atomic_t *target, atomic_val_t value);\n#endif\n\n/**\n * @brief Initialize an atomic variable.\n *\n * This macro can be used to initialize an atomic variable. For example,\n * @code atomic_t my_var = ATOMIC_INIT(75); @endcode\n *\n * @param i Value to assign to atomic variable.\n */\n#define ATOMIC_INIT(i) (i)\n\n/**\n * @cond INTERNAL_HIDDEN\n */\n\n#define ATOMIC_BITS            (sizeof(atomic_val_t) * 8)\n#define ATOMIC_MASK(bit)       (1 << ((bit) & (ATOMIC_BITS - 1)))\n#define ATOMIC_ELEM(addr, bit) ((addr) + ((bit) / ATOMIC_BITS))\n\n/**\n * INTERNAL_HIDDEN @endcond\n */\n\n/**\n * @brief Define an array of atomic variables.\n *\n * This macro defines an array of atomic variables containing at least\n * @a num_bits bits.\n *\n * @note\n * If used from file scope, the bits of the array are initialized to zero;\n * if used from within a function, the bits are left uninitialized.\n *\n * @param name Name of array of atomic variables.\n * @param num_bits Number of bits needed.\n */\n#define ATOMIC_DEFINE(name, num_bits) \\\n    atomic_t name[1 + ((num_bits)-1) / ATOMIC_BITS]\n\n/**\n * @brief Atomically test a bit.\n *\n * This routine tests whether bit number @a bit of @a target is set or not.\n * The target may be a single atomic variable or an array of them.\n *\n * @param target Address of atomic variable or array.\n * @param bit Bit number (starting from 0).\n *\n * @return 1 if the bit was set, 0 if it wasn't.\n */\nstatic inline int atomic_test_bit(const atomic_t *target, int bit)\n{\n    atomic_val_t val = atomic_get(ATOMIC_ELEM(target, bit));\n\n    return (1 & (val >> (bit & (ATOMIC_BITS - 1))));\n}\n\n/**\n * @brief Atomically test and clear a bit.\n *\n * Atomically clear bit number @a bit of @a target and return its old value.\n * The target may be a single atomic variable or an array of them.\n *\n * @param target Address of atomic variable or array.\n * @param bit Bit number (starting from 0).\n *\n * @return 1 if the bit was set, 0 if it wasn't.\n */\nstatic inline int atomic_test_and_clear_bit(atomic_t *target, int bit)\n{\n    atomic_val_t mask = ATOMIC_MASK(bit);\n    atomic_val_t old;\n\n    old = atomic_and(ATOMIC_ELEM(target, bit), ~mask);\n\n    return (old & mask) != 0;\n}\n\n/**\n * @brief Atomically set a bit.\n *\n * Atomically set bit number @a bit of @a target and return its old value.\n * The target may be a single atomic variable or an array of them.\n *\n * @param target Address of atomic variable or array.\n * @param bit Bit number (starting from 0).\n *\n * @return 1 if the bit was set, 0 if it wasn't.\n */\nstatic inline int atomic_test_and_set_bit(atomic_t *target, int bit)\n{\n    atomic_val_t mask = ATOMIC_MASK(bit);\n    atomic_val_t old;\n\n    old = atomic_or(ATOMIC_ELEM(target, bit), mask);\n\n    return (old & mask) != 0;\n}\n\n/**\n * @brief Atomically clear a bit.\n *\n * Atomically clear bit number @a bit of @a target.\n * The target may be a single atomic variable or an array of them.\n *\n * @param target Address of atomic variable or array.\n * @param bit Bit number (starting from 0).\n *\n * @return N/A\n */\nstatic inline void atomic_clear_bit(atomic_t *target, int bit)\n{\n    atomic_val_t mask = ATOMIC_MASK(bit);\n\n    atomic_and(ATOMIC_ELEM(target, bit), ~mask);\n}\n\n/**\n * @brief Atomically set a bit.\n *\n * Atomically set bit number @a bit of @a target.\n * The target may be a single atomic variable or an array of them.\n *\n * @param target Address of atomic variable or array.\n * @param bit Bit number (starting from 0).\n *\n * @return N/A\n */\nstatic inline void atomic_set_bit(atomic_t *target, int bit)\n{\n    atomic_val_t mask = ATOMIC_MASK(bit);\n\n    atomic_or(ATOMIC_ELEM(target, bit), mask);\n}\n\n/**\n * @brief Atomically set a bit to a given value.\n *\n * Atomically set bit number @a bit of @a target to value @a val.\n * The target may be a single atomic variable or an array of them.\n *\n * @param target Address of atomic variable or array.\n * @param bit Bit number (starting from 0).\n * @param val true for 1, false for 0.\n *\n * @return N/A\n */\nstatic inline void atomic_set_bit_to(atomic_t *target, int bit, bool val)\n{\n    atomic_val_t mask = ATOMIC_MASK(bit);\n\n    if (val) {\n        (void)atomic_or(ATOMIC_ELEM(target, bit), mask);\n    } else {\n        (void)atomic_and(ATOMIC_ELEM(target, bit), ~mask);\n    }\n}\n\n/**\n * @}\n */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __ATOMIC_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/errno.h",
    "content": "/* errno.h - errno numbers */\n\n/*\n * Copyright (c) 1984-1999, 2012 Wind River Systems, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*\n * Copyright (c) 1982, 1986 Regents of the University of California.\n * All rights reserved.  The Berkeley software License Agreement\n * specifies the terms and conditions for redistribution.\n *\n *\t@(#)errno.h\t7.1 (Berkeley) 6/4/86\n */\n\n#ifndef __INCerrnoh\n#define __INCerrnoh\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nextern int *__errno(void);\n#define errno (*__errno())\n\n/*\n * POSIX Error codes\n */\n\n#define EPERM        1  /* Not owner */\n#define ENOENT       2  /* No such file or directory */\n#define ESRCH        3  /* No such context */\n#define EINTR        4  /* Interrupted system call */\n#define EIO          5  /* I/O error */\n#define ENXIO        6  /* No such device or address */\n#define E2BIG        7  /* Arg list too long */\n#define ENOEXEC      8  /* Exec format error */\n#define EBADF        9  /* Bad file number */\n#define ECHILD       10 /* No children */\n#define EAGAIN       11 /* No more contexts */\n#define ENOMEM       12 /* Not enough core */\n#define EACCES       13 /* Permission denied */\n#define EFAULT       14 /* Bad address */\n#define ENOTEMPTY    15 /* Directory not empty */\n#define EBUSY        16 /* Mount device busy */\n#define EEXIST       17 /* File exists */\n#define EXDEV        18 /* Cross-device link */\n#define ENODEV       19 /* No such device */\n#define ENOTDIR      20 /* Not a directory */\n#define EISDIR       21 /* Is a directory */\n#define EINVAL       22 /* Invalid argument */\n#define ENFILE       23 /* File table overflow */\n#define EMFILE       24 /* Too many open files */\n#define ENOTTY       25 /* Not a typewriter */\n#define ENAMETOOLONG 26 /* File name too long */\n#define EFBIG        27 /* File too large */\n#define ENOSPC       28 /* No space left on device */\n#define ESPIPE       29 /* Illegal seek */\n#define EROFS        30 /* Read-only file system */\n#define EMLINK       31 /* Too many links */\n#define EPIPE        32 /* Broken pipe */\n#define EDEADLK      33 /* Resource deadlock avoided */\n#define ENOLCK       34 /* No locks available */\n#define ENOTSUP      35 /* Unsupported value */\n#define EMSGSIZE     36 /* Message size */\n\n/* ANSI math software */\n#define EDOM   37 /* Argument too large */\n#define ERANGE 38 /* Result too large */\n\n/* ipc/network software */\n\n/* argument errors */\n#define EDESTADDRREQ    40 /* Destination address required */\n#define EPROTOTYPE      41 /* Protocol wrong type for socket */\n#define ENOPROTOOPT     42 /* Protocol not available */\n#define EPROTONOSUPPORT 43 /* Protocol not supported */\n#define ESOCKTNOSUPPORT 44 /* Socket type not supported */\n#define EOPNOTSUPP      45 /* Operation not supported on socket */\n#define EPFNOSUPPORT    46 /* Protocol family not supported */\n#define EAFNOSUPPORT    47 /* Addr family not supported */\n#define EADDRINUSE      48 /* Address already in use */\n#define EADDRNOTAVAIL   49 /* Can't assign requested address */\n#define ENOTSOCK        50 /* Socket operation on non-socket */\n\n/* operational errors */\n#define ENETUNREACH  51 /* Network is unreachable */\n#define ENETRESET    52 /* Network dropped connection on reset */\n#define ECONNABORTED 53 /* Software caused connection abort */\n#define ECONNRESET   54 /* Connection reset by peer */\n#define ENOBUFS      55 /* No buffer space available */\n#define EISCONN      56 /* Socket is already connected */\n#define ENOTCONN     57 /* Socket is not connected */\n#define ESHUTDOWN    58 /* Can't send after socket shutdown */\n#define ETOOMANYREFS 59 /* Too many references: can't splice */\n#define ETIMEDOUT    60 /* Connection timed out */\n#define ECONNREFUSED 61 /* Connection refused */\n#define ENETDOWN     62 /* Network is down */\n#define ETXTBSY      63 /* Text file busy */\n#define ELOOP        64 /* Too many levels of symbolic links */\n#define EHOSTUNREACH 65 /* No route to host */\n#define ENOTBLK      66 /* Block device required */\n#define EHOSTDOWN    67 /* Host is down */\n\n/* non-blocking and interrupt i/o */\n#define EINPROGRESS 68     /* Operation now in progress */\n#define EALREADY    69     /* Operation already in progress */\n#define EWOULDBLOCK EAGAIN /* Operation would block */\n\n#define ENOSYS 71 /* Function not implemented */\n\n/* aio errors (should be under posix) */\n#define ECANCELED 72 /* Operation canceled */\n\n#define ERRMAX 81\n\n/* specific STREAMS errno values */\n\n#define ENOSR   74 /* Insufficient memory */\n#define ENOSTR  75 /* STREAMS device required */\n#define EPROTO  76 /* Generic STREAMS error */\n#define EBADMSG 77 /* Invalid STREAMS message */\n#define ENODATA 78 /* Missing expected message data */\n#define ETIME   79 /* STREAMS timeout occurred */\n#define ENOMSG  80 /* Unexpected message type */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __INCerrnoh */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/misc/__assert.h",
    "content": "/*\n * Copyright (c) 2011-2014 Wind River Systems, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file\n * @brief Debug aid\n *\n *\n * The __ASSERT() macro can be used inside kernel code.\n *\n * Assertions are enabled by setting the __ASSERT_ON symbol to a non-zero value.\n * There are two ways to do this:\n *   a) Use the ASSERT and ASSERT_LEVEL kconfig options\n *   b) Add \"CFLAGS += -D__ASSERT_ON=<level>\" at the end of a project's Makefile\n * The Makefile method takes precedence over the kconfig option if both are\n * used.\n *\n * Specifying an assertion level of 1 causes the compiler to issue warnings that\n * the kernel contains debug-type __ASSERT() statements; this reminder is issued\n * since assertion code is not normally present in a final product. Specifying\n * assertion level 2 suppresses these warnings.\n *\n * The __ASSERT_EVAL() macro can also be used inside kernel code.\n *\n * It makes use of the __ASSERT() macro, but has some extra flexibility.  It\n * allows the developer to specify different actions depending whether the\n * __ASSERT() macro is enabled or not.  This can be particularly useful to\n * prevent the compiler from generating comments (errors, warnings or remarks)\n * about variables that are only used with __ASSERT() being assigned a value,\n * but otherwise unused when the __ASSERT() macro is disabled.\n *\n * Consider the following example:\n *\n * int  x;\n *\n * x = foo ();\n * __ASSERT (x != 0, \"foo() returned zero!\");\n *\n * If __ASSERT() is disabled, then 'x' is assigned a value, but never used.\n * This type of situation can be resolved using the __ASSERT_EVAL() macro.\n *\n * __ASSERT_EVAL ((void) foo(),\n *\t\t  int x = foo(),\n *                x != 0,\n *                \"foo() returned zero!\");\n *\n * The first parameter tells __ASSERT_EVAL() what to do if __ASSERT() is\n * disabled.  The second parameter tells __ASSERT_EVAL() what to do if\n * __ASSERT() is enabled.  The third and fourth parameters are the parameters\n * it passes to __ASSERT().\n *\n * The __ASSERT_NO_MSG() macro can be used to perform an assertion that reports\n * the failed test and its location, but lacks additional debugging information\n * provided to assist the user in diagnosing the problem; its use is\n * discouraged.\n */\n\n#ifndef ___ASSERT__H_\n#define ___ASSERT__H_\n\n#ifdef CONFIG_ASSERT\n#ifndef __ASSERT_ON\n#define __ASSERT_ON CONFIG_ASSERT_LEVEL\n#endif\n#endif\n\n#ifdef __ASSERT_ON\n#if (__ASSERT_ON < 0) || (__ASSERT_ON > 2)\n#error \"Invalid __ASSERT() level: must be between 0 and 2\"\n#endif\n\n#if __ASSERT_ON\n#include <misc/printk.h>\n#define __ASSERT(test, fmt, ...)                       \\\n    do {                                               \\\n        if (!(test)) {                                 \\\n            printk(\"ASSERTION FAIL [%s] @ %s:%d:\\n\\t\", \\\n                   _STRINGIFY(test),                   \\\n                   __FILE__,                           \\\n                   __LINE__);                          \\\n            printk(fmt, ##__VA_ARGS__);                \\\n            for (;;)                                   \\\n                ; /* spin thread */                    \\\n        }                                              \\\n    } while ((0))\n\n#define __ASSERT_EVAL(expr1, expr2, test, fmt, ...) \\\n    do {                                            \\\n        expr2;                                      \\\n        __ASSERT(test, fmt, ##__VA_ARGS__);         \\\n    } while (0)\n\n#if (__ASSERT_ON == 1)\n#warning \"__ASSERT() statements are ENABLED\"\n#endif\n#else\n#define __ASSERT(test, fmt, ...) \\\n    do { /* nothing */           \\\n    } while ((0))\n#define __ASSERT_EVAL(expr1, expr2, test, fmt, ...) expr1\n#endif\n#else\n#define __ASSERT(test, fmt, ...) \\\n    do { /* nothing */           \\\n    } while ((0))\n#define __ASSERT_EVAL(expr1, expr2, test, fmt, ...) expr1\n#endif\n\n#define __ASSERT_NO_MSG(test) __ASSERT(test, \"\")\n\n#endif /* ___ASSERT__H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/misc/byteorder.h",
    "content": "/** @file\n *  @brief Byte order helpers.\n */\n\n/*\n * Copyright (c) 2015-2016, Intel Corporation.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#ifndef __BYTEORDER_H__\n#define __BYTEORDER_H__\n\n#include <zephyr/types.h>\n#include <stddef.h>\n#include <misc/__assert.h>\n\n#ifndef __BYTE_ORDER__\n#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__\n#endif\n\n/* Internal helpers only used by the sys_* APIs further below */\n#define __bswap_16(x) ((u16_t)((((x) >> 8) & 0xff) | (((x)&0xff) << 8)))\n#define __bswap_32(x) ((u32_t)((((x) >> 24) & 0xff) |  \\\n                               (((x) >> 8) & 0xff00) | \\\n                               (((x)&0xff00) << 8) |   \\\n                               (((x)&0xff) << 24)))\n#define __bswap_64(x) ((u64_t)((((x) >> 56) & 0xff) |      \\\n                               (((x) >> 40) & 0xff00) |    \\\n                               (((x) >> 24) & 0xff0000) |  \\\n                               (((x) >> 8) & 0xff000000) | \\\n                               (((x)&0xff000000) << 8) |   \\\n                               (((x)&0xff0000) << 24) |    \\\n                               (((x)&0xff00) << 40) |      \\\n                               (((x)&0xff) << 56)))\n\n/** @def sys_le16_to_cpu\n *  @brief Convert 16-bit integer from little-endian to host endianness.\n *\n *  @param val 16-bit integer in little-endian format.\n *\n *  @return 16-bit integer in host endianness.\n */\n\n/** @def sys_cpu_to_le16\n *  @brief Convert 16-bit integer from host endianness to little-endian.\n *\n *  @param val 16-bit integer in host endianness.\n *\n *  @return 16-bit integer in little-endian format.\n */\n\n/** @def sys_be16_to_cpu\n *  @brief Convert 16-bit integer from big-endian to host endianness.\n *\n *  @param val 16-bit integer in big-endian format.\n *\n *  @return 16-bit integer in host endianness.\n */\n\n/** @def sys_cpu_to_be16\n *  @brief Convert 16-bit integer from host endianness to big-endian.\n *\n *  @param val 16-bit integer in host endianness.\n *\n *  @return 16-bit integer in big-endian format.\n */\n\n/** @def sys_le32_to_cpu\n *  @brief Convert 32-bit integer from little-endian to host endianness.\n *\n *  @param val 32-bit integer in little-endian format.\n *\n *  @return 32-bit integer in host endianness.\n */\n\n/** @def sys_cpu_to_le32\n *  @brief Convert 32-bit integer from host endianness to little-endian.\n *\n *  @param val 32-bit integer in host endianness.\n *\n *  @return 32-bit integer in little-endian format.\n */\n\n/** @def sys_be32_to_cpu\n *  @brief Convert 32-bit integer from big-endian to host endianness.\n *\n *  @param val 32-bit integer in big-endian format.\n *\n *  @return 32-bit integer in host endianness.\n */\n\n/** @def sys_cpu_to_be32\n *  @brief Convert 32-bit integer from host endianness to big-endian.\n *\n *  @param val 32-bit integer in host endianness.\n *\n *  @return 32-bit integer in big-endian format.\n */\n\n#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__\n#define sys_le16_to_cpu(val) (val)\n#define sys_cpu_to_le16(val) (val)\n#define sys_be16_to_cpu(val) __bswap_16(val)\n#define sys_cpu_to_be16(val) __bswap_16(val)\n#define sys_le32_to_cpu(val) (val)\n#define sys_cpu_to_le32(val) (val)\n#define sys_le64_to_cpu(val) (val)\n#define sys_cpu_to_le64(val) (val)\n#define sys_be32_to_cpu(val) __bswap_32(val)\n#define sys_cpu_to_be32(val) __bswap_32(val)\n#define sys_be64_to_cpu(val) __bswap_64(val)\n#define sys_cpu_to_be64(val) __bswap_64(val)\n/********************************************************************************\n** Macros to get and put bytes to a stream (Little Endian format).\n*/\n#define UINT32_TO_STREAM(p, u32)      \\\n    {                                 \\\n        *(p)++ = (u8_t)(u32);         \\\n        *(p)++ = (u8_t)((u32) >> 8);  \\\n        *(p)++ = (u8_t)((u32) >> 16); \\\n        *(p)++ = (u8_t)((u32) >> 24); \\\n    }\n#define UINT24_TO_STREAM(p, u24)      \\\n    {                                 \\\n        *(p)++ = (u8_t)(u24);         \\\n        *(p)++ = (u8_t)((u24) >> 8);  \\\n        *(p)++ = (u8_t)((u24) >> 16); \\\n    }\n#define UINT16_TO_STREAM(p, u16)     \\\n    {                                \\\n        *(p)++ = (u8_t)(u16);        \\\n        *(p)++ = (u8_t)((u16) >> 8); \\\n    }\n#define UINT8_TO_STREAM(p, u8) \\\n    {                          \\\n        *(p)++ = (u8_t)(u8);   \\\n    }\n\n#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__\n#define sys_le16_to_cpu(val) __bswap_16(val)\n#define sys_cpu_to_le16(val) __bswap_16(val)\n#define sys_be16_to_cpu(val) (val)\n#define sys_cpu_to_be16(val) (val)\n#define sys_le32_to_cpu(val) __bswap_32(val)\n#define sys_cpu_to_le32(val) __bswap_32(val)\n#define sys_le64_to_cpu(val) __bswap_64(val)\n#define sys_cpu_to_le64(val) __bswap_64(val)\n#define sys_be32_to_cpu(val) (val)\n#define sys_cpu_to_be32(val) (val)\n#define sys_be64_to_cpu(val) (val)\n#define sys_cpu_to_be64(val) (val)\n/********************************************************************************\n** Macros to get and put bytes to a stream (Big Endian format)\n*/\n#define UINT32_TO_STREAM(p, u32)      \\\n    {                                 \\\n        *(p)++ = (u8_t)((u32) >> 24); \\\n        *(p)++ = (u8_t)((u32) >> 16); \\\n        *(p)++ = (u8_t)((u32) >> 8);  \\\n        *(p)++ = (u8_t)(u32);         \\\n    }\n#define UINT24_TO_STREAM(p, u24)      \\\n    {                                 \\\n        *(p)++ = (u8_t)((u24) >> 16); \\\n        *(p)++ = (u8_t)((u24) >> 8);  \\\n        *(p)++ = (u8_t)(u24);         \\\n    }\n#define UINT16_TO_STREAM(p, u16)     \\\n    {                                \\\n        *(p)++ = (u8_t)((u16) >> 8); \\\n        *(p)++ = (u8_t)(u16);        \\\n    }\n#define UINT8_TO_STREAM(p, u8) \\\n    {                          \\\n        *(p)++ = (u8_t)(u8);   \\\n    }\n\n#else\n#error \"Unknown byte order\"\n#endif\n\n/**\n *  @brief Put a 16-bit integer as big-endian to arbitrary location.\n *\n *  Put a 16-bit integer, originally in host endianness, to a\n *  potentially unaligned memory location in big-endian format.\n *\n *  @param val 16-bit integer in host endianness.\n *  @param dst Destination memory address to store the result.\n */\nstatic inline void sys_put_be16(u16_t val, u8_t dst[2])\n{\n    dst[0] = val >> 8;\n    dst[1] = val;\n}\n\n/**\n *  @brief Put a 24-bit integer as big-endian to arbitrary location.\n *\n *  Put a 24-bit integer, originally in host endianness, to a\n *  potentially unaligned memory location in big-endian format.\n *\n *  @param val 24-bit integer in host endianness.\n *  @param dst Destination memory address to store the result.\n */\nstatic inline void sys_put_be24(uint32_t val, uint8_t dst[3])\n{\n    dst[0] = val >> 16;\n    sys_put_be16(val, &dst[1]);\n}\n\n/**\n *  @brief Put a 32-bit integer as big-endian to arbitrary location.\n *\n *  Put a 32-bit integer, originally in host endianness, to a\n *  potentially unaligned memory location in big-endian format.\n *\n *  @param val 32-bit integer in host endianness.\n *  @param dst Destination memory address to store the result.\n */\nstatic inline void sys_put_be32(u32_t val, u8_t dst[4])\n{\n    sys_put_be16(val >> 16, dst);\n    sys_put_be16(val, &dst[2]);\n}\n\n/**\n *  @brief Put a 16-bit integer as little-endian to arbitrary location.\n *\n *  Put a 16-bit integer, originally in host endianness, to a\n *  potentially unaligned memory location in little-endian format.\n *\n *  @param val 16-bit integer in host endianness.\n *  @param dst Destination memory address to store the result.\n */\nstatic inline void sys_put_le16(u16_t val, u8_t dst[2])\n{\n    dst[0] = val;\n    dst[1] = val >> 8;\n}\n\n/**\n *  @brief Put a 24-bit integer as little-endian to arbitrary location.\n *\n *  Put a 24-bit integer, originally in host endianness, to a\n *  potentially unaligned memory location in littel-endian format.\n *\n *  @param val 24-bit integer in host endianness.\n *  @param dst Destination memory address to store the result.\n */\nstatic inline void sys_put_le24(uint32_t val, uint8_t dst[3])\n{\n    sys_put_le16(val, dst);\n    dst[2] = val >> 16;\n}\n\n/**\n *  @brief Put a 32-bit integer as little-endian to arbitrary location.\n *\n *  Put a 32-bit integer, originally in host endianness, to a\n *  potentially unaligned memory location in little-endian format.\n *\n *  @param val 32-bit integer in host endianness.\n *  @param dst Destination memory address to store the result.\n */\nstatic inline void sys_put_le32(u32_t val, u8_t dst[4])\n{\n    sys_put_le16(val, dst);\n    sys_put_le16(val >> 16, &dst[2]);\n}\n\n/**\n *  @brief Put a 64-bit integer as little-endian to arbitrary location.\n *\n *  Put a 64-bit integer, originally in host endianness, to a\n *  potentially unaligned memory location in little-endian format.\n *\n *  @param val 64-bit integer in host endianness.\n *  @param dst Destination memory address to store the result.\n */\nstatic inline void sys_put_le64(u64_t val, u8_t dst[8])\n{\n    sys_put_le32(val, dst);\n    sys_put_le32(val >> 32, &dst[4]);\n}\n\n/**\n *  @brief Get a 16-bit integer stored in big-endian format.\n *\n *  Get a 16-bit integer, stored in big-endian format in a potentially\n *  unaligned memory location, and convert it to the host endianness.\n *\n *  @param src Location of the big-endian 16-bit integer to get.\n *\n *  @return 16-bit integer in host endianness.\n */\nstatic inline u16_t sys_get_be16(const u8_t src[2])\n{\n    return ((u16_t)src[0] << 8) | src[1];\n}\n\n/**\n *  @brief Get a 24-bit integer stored in big-endian format.\n *\n *  Get a 24-bit integer, stored in big-endian format in a potentially\n *  unaligned memory location, and convert it to the host endianness.\n *\n *  @param src Location of the big-endian 24-bit integer to get.\n *\n *  @return 24-bit integer in host endianness.\n */\nstatic inline uint32_t sys_get_be24(const uint8_t src[3])\n{\n    return ((uint32_t)src[0] << 16) | sys_get_be16(&src[1]);\n}\n\n/**\n *  @brief Get a 32-bit integer stored in big-endian format.\n *\n *  Get a 32-bit integer, stored in big-endian format in a potentially\n *  unaligned memory location, and convert it to the host endianness.\n *\n *  @param src Location of the big-endian 32-bit integer to get.\n *\n *  @return 32-bit integer in host endianness.\n */\nstatic inline u32_t sys_get_be32(const u8_t src[4])\n{\n    return ((u32_t)sys_get_be16(&src[0]) << 16) | sys_get_be16(&src[2]);\n}\n\n/**\n *  @brief Get a 16-bit integer stored in little-endian format.\n *\n *  Get a 16-bit integer, stored in little-endian format in a potentially\n *  unaligned memory location, and convert it to the host endianness.\n *\n *  @param src Location of the little-endian 16-bit integer to get.\n *\n *  @return 16-bit integer in host endianness.\n */\nstatic inline u16_t sys_get_le16(const u8_t src[2])\n{\n    return ((u16_t)src[1] << 8) | src[0];\n}\n\n/**\n *  @brief Get a 24-bit integer stored in big-endian format.\n *\n *  Get a 24-bit integer, stored in big-endian format in a potentially\n *  unaligned memory location, and convert it to the host endianness.\n *\n *  @param src Location of the big-endian 24-bit integer to get.\n *\n *  @return 24-bit integer in host endianness.\n */\nstatic inline uint32_t sys_get_le24(const uint8_t src[3])\n{\n    return ((uint32_t)src[2] << 16) | sys_get_le16(&src[0]);\n}\n\n/**\n *  @brief Get a 32-bit integer stored in little-endian format.\n *\n *  Get a 32-bit integer, stored in little-endian format in a potentially\n *  unaligned memory location, and convert it to the host endianness.\n *\n *  @param src Location of the little-endian 32-bit integer to get.\n *\n *  @return 32-bit integer in host endianness.\n */\nstatic inline u32_t sys_get_le32(const u8_t src[4])\n{\n    return ((u32_t)sys_get_le16(&src[2]) << 16) | sys_get_le16(&src[0]);\n}\n\n/**\n *  @brief Get a 64-bit integer stored in little-endian format.\n *\n *  Get a 64-bit integer, stored in little-endian format in a potentially\n *  unaligned memory location, and convert it to the host endianness.\n *\n *  @param src Location of the little-endian 64-bit integer to get.\n *\n *  @return 64-bit integer in host endianness.\n */\nstatic inline u64_t sys_get_le64(const u8_t src[8])\n{\n    return ((u64_t)sys_get_le32(&src[4]) << 32) | sys_get_le32(&src[0]);\n}\n\n/**\n * @brief Swap one buffer content into another\n *\n * Copy the content of src buffer into dst buffer in reversed order,\n * i.e.: src[n] will be put in dst[end-n]\n * Where n is an index and 'end' the last index in both arrays.\n * The 2 memory pointers must be pointing to different areas, and have\n * a minimum size of given length.\n *\n * @param dst A valid pointer on a memory area where to copy the data in\n * @param src A valid pointer on a memory area where to copy the data from\n * @param length Size of both dst and src memory areas\n */\nstatic inline void sys_memcpy_swap(void *dst, const void *src, size_t length)\n{\n    __ASSERT(((src < dst && (src + length) <= dst) ||\n              (src > dst && (dst + length) <= src)),\n             \"Source and destination buffers must not overlap\");\n\n    src += length - 1;\n\n    for (; length > 0; length--) {\n        *((u8_t *)dst++) = *((u8_t *)src--);\n    }\n}\n\n/**\n * @brief Swap buffer content\n *\n * In-place memory swap, where final content will be reversed.\n * I.e.: buf[n] will be put in buf[end-n]\n * Where n is an index and 'end' the last index of buf.\n *\n * @param buf A valid pointer on a memory area to swap\n * @param length Size of buf memory area\n */\nstatic inline void sys_mem_swap(void *buf, size_t length)\n{\n    size_t i;\n\n    for (i = 0; i < (length / 2); i++) {\n        u8_t tmp = ((u8_t *)buf)[i];\n\n        ((u8_t *)buf)[i] = ((u8_t *)buf)[length - 1 - i];\n        ((u8_t *)buf)[length - 1 - i] = tmp;\n    }\n}\n\n#endif /* __BYTEORDER_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/misc/dlist.h",
    "content": "/*\n * Copyright (c) 2013-2015 Wind River Systems, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file\n * @brief Doubly-linked list implementation\n *\n * Doubly-linked list implementation using inline macros/functions.\n * This API is not thread safe, and thus if a list is used across threads,\n * calls to functions must be protected with synchronization primitives.\n *\n * The lists are expected to be initialized such that both the head and tail\n * pointers point to the list itself.  Initializing the lists in such a fashion\n * simplifies the adding and removing of nodes to/from the list.\n */\n\n#ifndef _misc_dlist__h_\n#define _misc_dlist__h_\n\n#include <stddef.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstruct _dnode {\n    union {\n        struct _dnode *head; /* ptr to head of list (sys_dlist_t) */\n        struct _dnode *next; /* ptr to next node    (sys_dnode_t) */\n    };\n    union {\n        struct _dnode *tail; /* ptr to tail of list (sys_dlist_t) */\n        struct _dnode *prev; /* ptr to previous node (sys_dnode_t) */\n    };\n};\n\ntypedef struct _dnode sys_dlist_t;\ntypedef struct _dnode sys_dnode_t;\n\n/**\n * @brief Provide the primitive to iterate on a list\n * Note: the loop is unsafe and thus __dn should not be removed\n *\n * User _MUST_ add the loop statement curly braces enclosing its own code:\n *\n *     SYS_DLIST_FOR_EACH_NODE(l, n) {\n *         <user code>\n *     }\n *\n * This and other SYS_DLIST_*() macros are not thread safe.\n *\n * @param __dl A pointer on a sys_dlist_t to iterate on\n * @param __dn A sys_dnode_t pointer to peek each node of the list\n */\n#define SYS_DLIST_FOR_EACH_NODE(__dl, __dn)      \\\n    for (__dn = sys_dlist_peek_head(__dl); __dn; \\\n         __dn = sys_dlist_peek_next(__dl, __dn))\n\n/**\n * @brief Provide the primitive to iterate on a list, from a node in the list\n * Note: the loop is unsafe and thus __dn should not be removed\n *\n * User _MUST_ add the loop statement curly braces enclosing its own code:\n *\n *     SYS_DLIST_ITERATE_FROM_NODE(l, n) {\n *         <user code>\n *     }\n *\n * Like SYS_DLIST_FOR_EACH_NODE(), but __dn already contains a node in the list\n * where to start searching for the next entry from. If NULL, it starts from\n * the head.\n *\n * This and other SYS_DLIST_*() macros are not thread safe.\n *\n * @param __dl A pointer on a sys_dlist_t to iterate on\n * @param __dn A sys_dnode_t pointer to peek each node of the list;\n *             it contains the starting node, or NULL to start from the head\n */\n#define SYS_DLIST_ITERATE_FROM_NODE(__dl, __dn)                                              \\\n    for (__dn = __dn ? sys_dlist_peek_next_no_check(__dl, __dn) : sys_dlist_peek_head(__dl); \\\n         __dn;                                                                               \\\n         __dn = sys_dlist_peek_next(__dl, __dn))\n\n/**\n * @brief Provide the primitive to safely iterate on a list\n * Note: __dn can be removed, it will not break the loop.\n *\n * User _MUST_ add the loop statement curly braces enclosing its own code:\n *\n *     SYS_DLIST_FOR_EACH_NODE_SAFE(l, n, s) {\n *         <user code>\n *     }\n *\n * This and other SYS_DLIST_*() macros are not thread safe.\n *\n * @param __dl A pointer on a sys_dlist_t to iterate on\n * @param __dn A sys_dnode_t pointer to peek each node of the list\n * @param __dns A sys_dnode_t pointer for the loop to run safely\n */\n#define SYS_DLIST_FOR_EACH_NODE_SAFE(__dl, __dn, __dns) \\\n    for (__dn = sys_dlist_peek_head(__dl),              \\\n        __dns = sys_dlist_peek_next(__dl, __dn);        \\\n         __dn; __dn = __dns,                            \\\n        __dns = sys_dlist_peek_next(__dl, __dn))\n\n/*\n * @brief Provide the primitive to resolve the container of a list node\n * Note: it is safe to use with NULL pointer nodes\n *\n * @param __dn A pointer on a sys_dnode_t to get its container\n * @param __cn Container struct type pointer\n * @param __n The field name of sys_dnode_t within the container struct\n */\n#define SYS_DLIST_CONTAINER(__dn, __cn, __n) \\\n    (__dn ? CONTAINER_OF(__dn, __typeof__(*__cn), __n) : NULL)\n/*\n * @brief Provide the primitive to peek container of the list head\n *\n * @param __dl A pointer on a sys_dlist_t to peek\n * @param __cn Container struct type pointer\n * @param __n The field name of sys_dnode_t within the container struct\n */\n#define SYS_DLIST_PEEK_HEAD_CONTAINER(__dl, __cn, __n) \\\n    SYS_DLIST_CONTAINER(sys_dlist_peek_head(__dl), __cn, __n)\n\n/*\n * @brief Provide the primitive to peek the next container\n *\n * @param __dl A pointer on a sys_dlist_t to peek\n * @param __cn Container struct type pointer\n * @param __n The field name of sys_dnode_t within the container struct\n */\n#define SYS_DLIST_PEEK_NEXT_CONTAINER(__dl, __cn, __n)                     \\\n    ((__cn) ? SYS_DLIST_CONTAINER(sys_dlist_peek_next(__dl, &(__cn->__n)), \\\n                                  __cn, __n) :                             \\\n              NULL)\n\n/**\n * @brief Provide the primitive to iterate on a list under a container\n * Note: the loop is unsafe and thus __cn should not be detached\n *\n * User _MUST_ add the loop statement curly braces enclosing its own code:\n *\n *     SYS_DLIST_FOR_EACH_CONTAINER(l, c, n) {\n *         <user code>\n *     }\n *\n * @param __dl A pointer on a sys_dlist_t to iterate on\n * @param __cn A pointer to peek each entry of the list\n * @param __n The field name of sys_dnode_t within the container struct\n */\n#define SYS_DLIST_FOR_EACH_CONTAINER(__dl, __cn, __n)                 \\\n    for (__cn = SYS_DLIST_PEEK_HEAD_CONTAINER(__dl, __cn, __n); __cn; \\\n         __cn = SYS_DLIST_PEEK_NEXT_CONTAINER(__dl, __cn, __n))\n\n/**\n * @brief Provide the primitive to safely iterate on a list under a container\n * Note: __cn can be detached, it will not break the loop.\n *\n * User _MUST_ add the loop statement curly braces enclosing its own code:\n *\n *     SYS_DLIST_FOR_EACH_CONTAINER_SAFE(l, c, cn, n) {\n *         <user code>\n *     }\n *\n * @param __dl A pointer on a sys_dlist_t to iterate on\n * @param __cn A pointer to peek each entry of the list\n * @param __cns A pointer for the loop to run safely\n * @param __n The field name of sys_dnode_t within the container struct\n */\n#define SYS_DLIST_FOR_EACH_CONTAINER_SAFE(__dl, __cn, __cns, __n) \\\n    for (__cn = SYS_DLIST_PEEK_HEAD_CONTAINER(__dl, __cn, __n),   \\\n        __cns = SYS_DLIST_PEEK_NEXT_CONTAINER(__dl, __cn, __n);   \\\n         __cn;                                                    \\\n         __cn = __cns,                                            \\\n        __cns = SYS_DLIST_PEEK_NEXT_CONTAINER(__dl, __cn, __n))\n\n/**\n * @brief initialize list\n *\n * @param list the doubly-linked list\n *\n * @return N/A\n */\n\nstatic inline void sys_dlist_init(sys_dlist_t *list)\n{\n    list->head = (sys_dnode_t *)list;\n    list->tail = (sys_dnode_t *)list;\n}\n\n#define SYS_DLIST_STATIC_INIT(ptr_to_list) \\\n    {                                      \\\n        { (ptr_to_list) },                 \\\n        {                                  \\\n            (ptr_to_list)                  \\\n        }                                  \\\n    }\n\n/**\n * @brief check if a node is the list's head\n *\n * @param list the doubly-linked list to operate on\n * @param node the node to check\n *\n * @return 1 if node is the head, 0 otherwise\n */\n\nstatic inline int sys_dlist_is_head(sys_dlist_t *list, sys_dnode_t *node)\n{\n    return list->head == node;\n}\n\n/**\n * @brief check if a node is the list's tail\n *\n * @param list the doubly-linked list to operate on\n * @param node the node to check\n *\n * @return 1 if node is the tail, 0 otherwise\n */\n\nstatic inline int sys_dlist_is_tail(sys_dlist_t *list, sys_dnode_t *node)\n{\n    return list->tail == node;\n}\n\n/**\n * @brief check if the list is empty\n *\n * @param list the doubly-linked list to operate on\n *\n * @return 1 if empty, 0 otherwise\n */\n\nstatic inline int sys_dlist_is_empty(sys_dlist_t *list)\n{\n    return list->head == list;\n}\n\n/**\n * @brief check if more than one node present\n *\n * This and other sys_dlist_*() functions are not thread safe.\n *\n * @param list the doubly-linked list to operate on\n *\n * @return 1 if multiple nodes, 0 otherwise\n */\n\nstatic inline int sys_dlist_has_multiple_nodes(sys_dlist_t *list)\n{\n    return list->head != list->tail;\n}\n\n/**\n * @brief get a reference to the head item in the list\n *\n * @param list the doubly-linked list to operate on\n *\n * @return a pointer to the head element, NULL if list is empty\n */\n\nstatic inline sys_dnode_t *sys_dlist_peek_head(sys_dlist_t *list)\n{\n    return sys_dlist_is_empty(list) ? NULL : list->head;\n}\n\n/**\n * @brief get a reference to the head item in the list\n *\n * The list must be known to be non-empty.\n *\n * @param list the doubly-linked list to operate on\n *\n * @return a pointer to the head element\n */\n\nstatic inline sys_dnode_t *sys_dlist_peek_head_not_empty(sys_dlist_t *list)\n{\n    return list->head;\n}\n\n/**\n * @brief get a reference to the next item in the list, node is not NULL\n *\n * Faster than sys_dlist_peek_next() if node is known not to be NULL.\n *\n * @param list the doubly-linked list to operate on\n * @param node the node from which to get the next element in the list\n *\n * @return a pointer to the next element from a node, NULL if node is the tail\n */\n\nstatic inline sys_dnode_t *sys_dlist_peek_next_no_check(sys_dlist_t *list,\n                                                        sys_dnode_t *node)\n{\n    return (node == list->tail) ? NULL : node->next;\n}\n\n/**\n * @brief get a reference to the next item in the list\n *\n * @param list the doubly-linked list to operate on\n * @param node the node from which to get the next element in the list\n *\n * @return a pointer to the next element from a node, NULL if node is the tail\n * or NULL (when node comes from reading the head of an empty list).\n */\n\nstatic inline sys_dnode_t *sys_dlist_peek_next(sys_dlist_t *list,\n                                               sys_dnode_t *node)\n{\n    return node ? sys_dlist_peek_next_no_check(list, node) : NULL;\n}\n\n/**\n * @brief get a reference to the tail item in the list\n *\n * @param list the doubly-linked list to operate on\n *\n * @return a pointer to the tail element, NULL if list is empty\n */\n\nstatic inline sys_dnode_t *sys_dlist_peek_tail(sys_dlist_t *list)\n{\n    return sys_dlist_is_empty(list) ? NULL : list->tail;\n}\n\n/**\n * @brief add node to tail of list\n *\n * This and other sys_dlist_*() functions are not thread safe.\n *\n * @param list the doubly-linked list to operate on\n * @param node the element to append\n *\n * @return N/A\n */\n\nstatic inline void sys_dlist_append(sys_dlist_t *list, sys_dnode_t *node)\n{\n    node->next = list;\n    node->prev = list->tail;\n\n    list->tail->next = node;\n    list->tail = node;\n}\n\n/**\n * @brief add node to head of list\n *\n * This and other sys_dlist_*() functions are not thread safe.\n *\n * @param list the doubly-linked list to operate on\n * @param node the element to append\n *\n * @return N/A\n */\n\nstatic inline void sys_dlist_prepend(sys_dlist_t *list, sys_dnode_t *node)\n{\n    node->next = list->head;\n    node->prev = list;\n\n    list->head->prev = node;\n    list->head = node;\n}\n\n/**\n * @brief insert node after a node\n *\n * Insert a node after a specified node in a list.\n * This and other sys_dlist_*() functions are not thread safe.\n *\n * @param list the doubly-linked list to operate on\n * @param insert_point the insert point in the list: if NULL, insert at head\n * @param node the element to append\n *\n * @return N/A\n */\n\nstatic inline void sys_dlist_insert_after(sys_dlist_t *list,\n                                          sys_dnode_t *insert_point, sys_dnode_t *node)\n{\n    if (!insert_point) {\n        sys_dlist_prepend(list, node);\n    } else {\n        node->next = insert_point->next;\n        node->prev = insert_point;\n        insert_point->next->prev = node;\n        insert_point->next = node;\n    }\n}\n\n/**\n * @brief insert node before a node\n *\n * Insert a node before a specified node in a list.\n * This and other sys_dlist_*() functions are not thread safe.\n *\n * @param list the doubly-linked list to operate on\n * @param insert_point the insert point in the list: if NULL, insert at tail\n * @param node the element to insert\n *\n * @return N/A\n */\n\nstatic inline void sys_dlist_insert_before(sys_dlist_t *list,\n                                           sys_dnode_t *insert_point, sys_dnode_t *node)\n{\n    if (!insert_point) {\n        sys_dlist_append(list, node);\n    } else {\n        node->prev = insert_point->prev;\n        node->next = insert_point;\n        insert_point->prev->next = node;\n        insert_point->prev = node;\n    }\n}\n\n/**\n * @brief insert node at position\n *\n * Insert a node in a location depending on a external condition. The cond()\n * function checks if the node is to be inserted _before_ the current node\n * against which it is checked.\n * This and other sys_dlist_*() functions are not thread safe.\n *\n * @param list the doubly-linked list to operate on\n * @param node the element to insert\n * @param cond a function that determines if the current node is the correct\n *             insert point\n * @param data parameter to cond()\n *\n * @return N/A\n */\n\nstatic inline void sys_dlist_insert_at(sys_dlist_t *list, sys_dnode_t *node,\n                                       int (*cond)(sys_dnode_t *, void *), void *data)\n{\n    if (sys_dlist_is_empty(list)) {\n        sys_dlist_append(list, node);\n    } else {\n        sys_dnode_t *pos = sys_dlist_peek_head(list);\n\n        while (pos && !cond(pos, data)) {\n            pos = sys_dlist_peek_next(list, pos);\n        }\n        sys_dlist_insert_before(list, pos, node);\n    }\n}\n\n/**\n * @brief remove a specific node from a list\n *\n * The list is implicit from the node. The node must be part of a list.\n * This and other sys_dlist_*() functions are not thread safe.\n *\n * @param node the node to remove\n *\n * @return N/A\n */\n\nstatic inline void sys_dlist_remove(sys_dnode_t *node)\n{\n    node->prev->next = node->next;\n    node->next->prev = node->prev;\n}\n\n/**\n * @brief get the first node in a list\n *\n * This and other sys_dlist_*() functions are not thread safe.\n *\n * @param list the doubly-linked list to operate on\n *\n * @return the first node in the list, NULL if list is empty\n */\n\nstatic inline sys_dnode_t *sys_dlist_get(sys_dlist_t *list)\n{\n    sys_dnode_t *node;\n\n    if (sys_dlist_is_empty(list)) {\n        return NULL;\n    }\n\n    node = list->head;\n    sys_dlist_remove(node);\n    return node;\n}\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _misc_dlist__h_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/misc/printk.h",
    "content": "/* printk.h - low-level debug output */\n\n/*\n * Copyright (c) 2010-2012, 2014 Wind River Systems, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef _PRINTK_H_\n#define _PRINTK_H_\n\n#include <stddef.h>\n#include <stdarg.h>\n#include <stdio.h>\n\n#include <zephyr.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define snprintk snprintf\n#define printk   printf\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/misc/slist.h",
    "content": "/*\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file\n *\n * @brief Single-linked list implementation\n *\n * Single-linked list implementation using inline macros/functions.\n * This API is not thread safe, and thus if a list is used across threads,\n * calls to functions must be protected with synchronization primitives.\n */\n\n#ifndef __SLIST_H__\n#define __SLIST_H__\n\n#include <stddef.h>\n#include <stdbool.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstruct _snode {\n    struct _snode *next;\n};\n\ntypedef struct _snode sys_snode_t;\n\nstruct _slist {\n    sys_snode_t *head;\n    sys_snode_t *tail;\n};\n\ntypedef struct _slist sys_slist_t;\n\n/**\n * @brief Provide the primitive to iterate on a list\n * Note: the loop is unsafe and thus __sn should not be removed\n *\n * User _MUST_ add the loop statement curly braces enclosing its own code:\n *\n *     SYS_SLIST_FOR_EACH_NODE(l, n) {\n *         <user code>\n *     }\n *\n * This and other SYS_SLIST_*() macros are not thread safe.\n *\n * @param __sl A pointer on a sys_slist_t to iterate on\n * @param __sn A sys_snode_t pointer to peek each node of the list\n */\n#define SYS_SLIST_FOR_EACH_NODE(__sl, __sn)      \\\n    for (__sn = sys_slist_peek_head(__sl); __sn; \\\n         __sn = sys_slist_peek_next(__sn))\n\n/**\n * @brief Provide the primitive to iterate on a list, from a node in the list\n * Note: the loop is unsafe and thus __sn should not be removed\n *\n * User _MUST_ add the loop statement curly braces enclosing its own code:\n *\n *     SYS_SLIST_ITERATE_FROM_NODE(l, n) {\n *         <user code>\n *     }\n *\n * Like SYS_SLIST_FOR_EACH_NODE(), but __dn already contains a node in the list\n * where to start searching for the next entry from. If NULL, it starts from\n * the head.\n *\n * This and other SYS_SLIST_*() macros are not thread safe.\n *\n * @param __sl A pointer on a sys_slist_t to iterate on\n * @param __sn A sys_snode_t pointer to peek each node of the list\n *             it contains the starting node, or NULL to start from the head\n */\n#define SYS_SLIST_ITERATE_FROM_NODE(__sl, __sn)                                        \\\n    for (__sn = __sn ? sys_slist_peek_next_no_check(__sn) : sys_slist_peek_head(__sl); \\\n         __sn;                                                                         \\\n         __sn = sys_slist_peek_next(__sn))\n\n/**\n * @brief Provide the primitive to safely iterate on a list\n * Note: __sn can be removed, it will not break the loop.\n *\n * User _MUST_ add the loop statement curly braces enclosing its own code:\n *\n *     SYS_SLIST_FOR_EACH_NODE_SAFE(l, n, s) {\n *         <user code>\n *     }\n *\n * This and other SYS_SLIST_*() macros are not thread safe.\n *\n * @param __sl A pointer on a sys_slist_t to iterate on\n * @param __sn A sys_snode_t pointer to peek each node of the list\n * @param __sns A sys_snode_t pointer for the loop to run safely\n */\n#define SYS_SLIST_FOR_EACH_NODE_SAFE(__sl, __sn, __sns) \\\n    for (__sn = sys_slist_peek_head(__sl),              \\\n        __sns = sys_slist_peek_next(__sn);              \\\n         __sn; __sn = __sns,                            \\\n        __sns = sys_slist_peek_next(__sn))\n\n/*\n * @brief Provide the primitive to resolve the container of a list node\n * Note: it is safe to use with NULL pointer nodes\n *\n * @param __ln A pointer on a sys_node_t to get its container\n * @param __cn Container struct type pointer\n * @param __n The field name of sys_node_t within the container struct\n */\n#define SYS_SLIST_CONTAINER(__ln, __cn, __n) \\\n    ((__ln) ? CONTAINER_OF((__ln), __typeof__(*(__cn)), __n) : NULL)\n/*\n * @brief Provide the primitive to peek container of the list head\n *\n * @param __sl A pointer on a sys_slist_t to peek\n * @param __cn Container struct type pointer\n * @param __n The field name of sys_node_t within the container struct\n */\n#define SYS_SLIST_PEEK_HEAD_CONTAINER(__sl, __cn, __n) \\\n    SYS_SLIST_CONTAINER(sys_slist_peek_head(__sl), __cn, __n)\n\n/*\n * @brief Provide the primitive to peek container of the list tail\n *\n * @param __sl A pointer on a sys_slist_t to peek\n * @param __cn Container struct type pointer\n * @param __n The field name of sys_node_t within the container struct\n */\n#define SYS_SLIST_PEEK_TAIL_CONTAINER(__sl, __cn, __n) \\\n    SYS_SLIST_CONTAINER(sys_slist_peek_tail(__sl), __cn, __n)\n\n/*\n * @brief Provide the primitive to peek the next container\n *\n * @param __cn Container struct type pointer\n * @param __n The field name of sys_node_t within the container struct\n */\n\n#define SYS_SLIST_PEEK_NEXT_CONTAINER(__cn, __n)                       \\\n    ((__cn) ? SYS_SLIST_CONTAINER(sys_slist_peek_next(&((__cn)->__n)), \\\n                                  __cn, __n) :                         \\\n              NULL)\n\n/**\n * @brief Provide the primitive to iterate on a list under a container\n * Note: the loop is unsafe and thus __cn should not be detached\n *\n * User _MUST_ add the loop statement curly braces enclosing its own code:\n *\n *     SYS_SLIST_FOR_EACH_CONTAINER(l, c, n) {\n *         <user code>\n *     }\n *\n * @param __sl A pointer on a sys_slist_t to iterate on\n * @param __cn A pointer to peek each entry of the list\n * @param __n The field name of sys_node_t within the container struct\n */\n#define SYS_SLIST_FOR_EACH_CONTAINER(__sl, __cn, __n)                 \\\n    for (__cn = SYS_SLIST_PEEK_HEAD_CONTAINER(__sl, __cn, __n); __cn; \\\n         __cn = SYS_SLIST_PEEK_NEXT_CONTAINER(__cn, __n))\n\n/**\n * @brief Provide the primitive to safely iterate on a list under a container\n * Note: __cn can be detached, it will not break the loop.\n *\n * User _MUST_ add the loop statement curly braces enclosing its own code:\n *\n *     SYS_SLIST_FOR_EACH_NODE_SAFE(l, c, cn, n) {\n *         <user code>\n *     }\n *\n * @param __sl A pointer on a sys_slist_t to iterate on\n * @param __cn A pointer to peek each entry of the list\n * @param __cns A pointer for the loop to run safely\n * @param __n The field name of sys_node_t within the container struct\n */\n#define SYS_SLIST_FOR_EACH_CONTAINER_SAFE(__sl, __cn, __cns, __n) \\\n    for (__cn = SYS_SLIST_PEEK_HEAD_CONTAINER(__sl, __cn, __n),   \\\n        __cns = SYS_SLIST_PEEK_NEXT_CONTAINER(__cn, __n);         \\\n         __cn;                                                    \\\n         __cn = __cns, __cns = SYS_SLIST_PEEK_NEXT_CONTAINER(__cn, __n))\n\n/**\n * @brief Initialize a list\n *\n * @param list A pointer on the list to initialize\n */\nstatic inline void sys_slist_init(sys_slist_t *list)\n{\n    list->head = NULL;\n    list->tail = NULL;\n}\n\n#define SYS_SLIST_STATIC_INIT(ptr_to_list) \\\n    {                                      \\\n        NULL, NULL                         \\\n    }\n\n/**\n * @brief Test if the given list is empty\n *\n * @param list A pointer on the list to test\n *\n * @return a boolean, true if it's empty, false otherwise\n */\nstatic inline bool sys_slist_is_empty(sys_slist_t *list)\n{\n    return (!list->head);\n}\n\n/**\n * @brief Peek the first node from the list\n *\n * @param list A point on the list to peek the first node from\n *\n * @return A pointer on the first node of the list (or NULL if none)\n */\nstatic inline sys_snode_t *sys_slist_peek_head(sys_slist_t *list)\n{\n    return list->head;\n}\n\n/**\n * @brief Peek the last node from the list\n *\n * @param list A point on the list to peek the last node from\n *\n * @return A pointer on the last node of the list (or NULL if none)\n */\nstatic inline sys_snode_t *sys_slist_peek_tail(sys_slist_t *list)\n{\n    return list->tail;\n}\n\n/**\n * @brief Peek the next node from current node, node is not NULL\n *\n * Faster then sys_slist_peek_next() if node is known not to be NULL.\n *\n * @param node A pointer on the node where to peek the next node\n *\n * @return a pointer on the next node (or NULL if none)\n */\nstatic inline sys_snode_t *sys_slist_peek_next_no_check(sys_snode_t *node)\n{\n    return node->next;\n}\n\n/**\n * @brief Peek the next node from current node\n *\n * @param node A pointer on the node where to peek the next node\n *\n * @return a pointer on the next node (or NULL if none)\n */\nstatic inline sys_snode_t *sys_slist_peek_next(sys_snode_t *node)\n{\n    return node ? sys_slist_peek_next_no_check(node) : NULL;\n}\n\n/**\n * @brief Prepend a node to the given list\n *\n * This and other sys_slist_*() functions are not thread safe.\n *\n * @param list A pointer on the list to affect\n * @param node A pointer on the node to prepend\n */\nstatic inline void sys_slist_prepend(sys_slist_t *list,\n                                     sys_snode_t *node)\n{\n    node->next = list->head;\n    list->head = node;\n\n    if (!list->tail) {\n        list->tail = list->head;\n    }\n}\n\n/**\n * @brief Append a node to the given list\n *\n * This and other sys_slist_*() functions are not thread safe.\n *\n * @param list A pointer on the list to affect\n * @param node A pointer on the node to append\n */\nstatic inline void sys_slist_append(sys_slist_t *list,\n                                    sys_snode_t *node)\n{\n    node->next = NULL;\n\n    if (!list->tail) {\n        list->tail = node;\n        list->head = node;\n    } else {\n        list->tail->next = node;\n        list->tail = node;\n    }\n}\n\n/**\n * @brief Append a list to the given list\n *\n * Append a singly-linked, NULL-terminated list consisting of nodes containing\n * the pointer to the next node as the first element of a node, to @a list.\n * This and other sys_slist_*() functions are not thread safe.\n *\n * @param list A pointer on the list to affect\n * @param head A pointer to the first element of the list to append\n * @param tail A pointer to the last element of the list to append\n */\nstatic inline void sys_slist_append_list(sys_slist_t *list,\n                                         void *head, void *tail)\n{\n    if (!list->tail) {\n        list->head = (sys_snode_t *)head;\n        list->tail = (sys_snode_t *)tail;\n    } else {\n        list->tail->next = (sys_snode_t *)head;\n        list->tail = (sys_snode_t *)tail;\n    }\n}\n\n/**\n * @brief merge two slists, appending the second one to the first\n *\n * When the operation is completed, the appending list is empty.\n * This and other sys_slist_*() functions are not thread safe.\n *\n * @param list A pointer on the list to affect\n * @param list_to_append A pointer to the list to append.\n */\nstatic inline void sys_slist_merge_slist(sys_slist_t *list,\n                                         sys_slist_t *list_to_append)\n{\n    sys_slist_append_list(list, list_to_append->head,\n                          list_to_append->tail);\n    sys_slist_init(list_to_append);\n}\n\n/**\n * @brief Insert a node to the given list\n *\n * This and other sys_slist_*() functions are not thread safe.\n *\n * @param list A pointer on the list to affect\n * @param prev A pointer on the previous node\n * @param node A pointer on the node to insert\n */\nstatic inline void sys_slist_insert(sys_slist_t *list,\n                                    sys_snode_t *prev,\n                                    sys_snode_t *node)\n{\n    if (!prev) {\n        sys_slist_prepend(list, node);\n    } else if (!prev->next) {\n        sys_slist_append(list, node);\n    } else {\n        node->next = prev->next;\n        prev->next = node;\n    }\n}\n\n/**\n * @brief Fetch and remove the first node of the given list\n *\n * List must be known to be non-empty.\n * This and other sys_slist_*() functions are not thread safe.\n *\n * @param list A pointer on the list to affect\n *\n * @return A pointer to the first node of the list\n */\nstatic inline sys_snode_t *sys_slist_get_not_empty(sys_slist_t *list)\n{\n    sys_snode_t *node = list->head;\n\n    list->head = node->next;\n    if (list->tail == node) {\n        list->tail = list->head;\n    }\n\n    return node;\n}\n\n/**\n * @brief Fetch and remove the first node of the given list\n *\n * This and other sys_slist_*() functions are not thread safe.\n *\n * @param list A pointer on the list to affect\n *\n * @return A pointer to the first node of the list (or NULL if empty)\n */\nstatic inline sys_snode_t *sys_slist_get(sys_slist_t *list)\n{\n    return sys_slist_is_empty(list) ? NULL : sys_slist_get_not_empty(list);\n}\n\n/**\n * @brief Remove a node\n *\n * This and other sys_slist_*() functions are not thread safe.\n *\n * @param list A pointer on the list to affect\n * @param prev_node A pointer on the previous node\n *        (can be NULL, which means the node is the list's head)\n * @param node A pointer on the node to remove\n */\nstatic inline void sys_slist_remove(sys_slist_t *list,\n                                    sys_snode_t *prev_node,\n                                    sys_snode_t *node)\n{\n    if (!prev_node) {\n        list->head = node->next;\n\n        /* Was node also the tail? */\n        if (list->tail == node) {\n            list->tail = list->head;\n        }\n    } else {\n        prev_node->next = node->next;\n\n        /* Was node the tail? */\n        if (list->tail == node) {\n            list->tail = prev_node;\n        }\n    }\n\n    node->next = NULL;\n}\n\n/**\n * @brief Find and remove a node from a list\n *\n * This and other sys_slist_*() functions are not thread safe.\n *\n * @param list A pointer on the list to affect\n * @param node A pointer on the node to remove from the list\n *\n * @return true if node was removed\n */\nstatic inline bool sys_slist_find_and_remove(sys_slist_t *list,\n                                             sys_snode_t *node)\n{\n    sys_snode_t *prev = NULL;\n    sys_snode_t *test;\n\n    SYS_SLIST_FOR_EACH_NODE(list, test)\n    {\n        if (test == node) {\n            sys_slist_remove(list, prev, node);\n            return true;\n        }\n\n        prev = test;\n    }\n\n    return false;\n}\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __SLIST_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/misc/stack.h",
    "content": "/**\n * @file stack.h\n * Stack usage analysis helpers\n */\n\n/*\n * Copyright (c) 2015 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#ifndef _MISC_STACK_H_\n#define _MISC_STACK_H_\n\n#include <misc/printk.h>\n\n#if defined(CONFIG_INIT_STACKS)\nstatic inline size_t stack_unused_space_get(const char *stack, size_t size)\n{\n    size_t unused = 0;\n    int i;\n\n#ifdef CONFIG_STACK_SENTINEL\n    /* First 4 bytes of the stack buffer reserved for the sentinel\n\t * value, it won't be 0xAAAAAAAA for thread stacks.\n\t */\n    stack += 4;\n#endif\n\n    /* TODO Currently all supported platforms have stack growth down and\n\t * there is no Kconfig option to configure it so this always build\n\t * \"else\" branch.  When support for platform with stack direction up\n\t * (or configurable direction) is added this check should be confirmed\n\t * that correct Kconfig option is used.\n\t */\n#if defined(STACK_GROWS_UP)\n    for (i = size - 1; i >= 0; i--) {\n        if ((unsigned char)stack[i] == 0xaa) {\n            unused++;\n        } else {\n            break;\n        }\n    }\n#else\n    for (i = 0; i < size; i++) {\n        if ((unsigned char)stack[i] == 0xaa) {\n            unused++;\n        } else {\n            break;\n        }\n    }\n#endif\n    return unused;\n}\n#else\nstatic inline size_t stack_unused_space_get(const char *stack, size_t size)\n{\n    return 0;\n}\n#endif\n\n#if defined(CONFIG_INIT_STACKS) && defined(CONFIG_PRINTK)\nstatic inline void stack_analyze(const char *name, const char *stack,\n                                 unsigned int size)\n{\n    unsigned int pcnt, unused = 0;\n\n    unused = stack_unused_space_get(stack, size);\n\n    /* Calculate the real size reserved for the stack */\n    pcnt = ((size - unused) * 100) / size;\n\n    printk(\"%s (real size %u):\\tunused %u\\tusage %u / %u (%u %%)\\n\", name,\n           size, unused, size - unused, size, pcnt);\n}\n#else\nstatic inline void stack_analyze(const char *name, const char *stack,\n                                 unsigned int size)\n{\n}\n#endif\n\n#define STACK_ANALYZE(name, sym)                    \\\n    stack_analyze(name, K_THREAD_STACK_BUFFER(sym), \\\n                  K_THREAD_STACK_SIZEOF(sym))\n\n#endif /* _MISC_STACK_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/misc/util.h",
    "content": "/*\n * Copyright (c) 2011-2014, Wind River Systems, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file\n * @brief Misc utilities\n *\n * Misc utilities usable by the kernel and application code.\n */\n\n#ifndef _UTIL__H_\n#define _UTIL__H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef _ASMLANGUAGE\n\n#include <zephyr/types.h>\n#if defined(BFLB_BLE)\n#include <stddef.h>\n#include \"utils_string.h\"\n#endif\n\n/* Helper to pass a int as a pointer or vice-versa.\n * Those are available for 32 bits architectures:\n */\n#define POINTER_TO_UINT(x) ((u32_t)(x))\n#define UINT_TO_POINTER(x) ((void *)(x))\n#define POINTER_TO_INT(x)  ((s32_t)(x))\n#define INT_TO_POINTER(x)  ((void *)(x))\n\n/* Evaluates to 0 if cond is true-ish; compile error otherwise */\n#define ZERO_OR_COMPILE_ERROR(cond) ((int)sizeof(char[1 - 2 * !(cond)]) - 1)\n\n/* Evaluates to 0 if array is an array; compile error if not array (e.g.\n * pointer)\n */\n#define IS_ARRAY(array)                                  \\\n    ZERO_OR_COMPILE_ERROR(                               \\\n        !__builtin_types_compatible_p(__typeof__(array), \\\n                                      __typeof__(&(array)[0])))\n\n/* Evaluates to number of elements in an array; compile error if not\n * an array (e.g. pointer)\n */\n#define ARRAY_SIZE(array)              \\\n    ((unsigned long)(IS_ARRAY(array) + \\\n                     (sizeof(array) / sizeof((array)[0]))))\n\n/* Evaluates to 1 if ptr is part of array, 0 otherwise; compile error if\n * \"array\" argument is not an array (e.g. \"ptr\" and \"array\" mixed up)\n */\n#define PART_OF_ARRAY(array, ptr) \\\n    ((ptr) && ((ptr) >= &array[0] && (ptr) < &array[ARRAY_SIZE(array)]))\n\n#define CONTAINER_OF(ptr, type, field) \\\n    ((type *)(((char *)(ptr)) - offsetof(type, field)))\n\n/* round \"x\" up/down to next multiple of \"align\" (which must be a power of 2) */\n#define ROUND_UP(x, align)                               \\\n    (((unsigned long)(x) + ((unsigned long)align - 1)) & \\\n     ~((unsigned long)align - 1))\n#define ROUND_DOWN(x, align) ((unsigned long)(x) & ~((unsigned long)align - 1))\n\n#define ceiling_fraction(numerator, divider) \\\n    (((numerator) + ((divider)-1)) / (divider))\n\n#ifdef INLINED\n#define INLINE inline\n#else\n#define INLINE\n#endif\n\n#ifndef MAX\n#define MAX(a, b) (((a) > (b)) ? (a) : (b))\n#endif\n\n#ifndef MIN\n#define MIN(a, b) (((a) < (b)) ? (a) : (b))\n#endif\n\nvoid get_bytearray_from_string(char **params, uint8_t *result, int array_size);\nvoid get_uint8_from_string(char **params, uint8_t *result);\nvoid get_uint16_from_string(char **params, uint16_t *result);\nvoid get_uint32_from_string(char **params, uint32_t *result);\nvoid reverse_bytearray(uint8_t *src, uint8_t *result, int array_size);\nvoid reverse_bytearray(uint8_t *src, uint8_t *result, int array_size);\nunsigned int find_lsb_set(uint32_t data);\n\nstatic inline int is_power_of_two(unsigned int x)\n{\n    return (x != 0) && !(x & (x - 1));\n}\n\nstatic inline s64_t arithmetic_shift_right(s64_t value, u8_t shift)\n{\n    s64_t sign_ext;\n\n    if (shift == 0) {\n        return value;\n    }\n\n    /* extract sign bit */\n    sign_ext = (value >> 63) & 1;\n\n    /* make all bits of sign_ext be the same as the value's sign bit */\n    sign_ext = -sign_ext;\n\n    /* shift value and fill opened bit positions with sign bit */\n    return (value >> shift) | (sign_ext << (64 - shift));\n}\n\n#endif /* !_ASMLANGUAGE */\n\n/* KB, MB, GB */\n#define KB(x) ((x) << 10)\n#define MB(x) (KB(x) << 10)\n#define GB(x) (MB(x) << 10)\n\n/* KHZ, MHZ */\n#define KHZ(x) ((x)*1000)\n#define MHZ(x) (KHZ(x) * 1000)\n\n#define BIT_MASK(n) (BIT(n) - 1)\n\n/**\n * @brief Check for macro definition in compiler-visible expressions\n *\n * This trick was pioneered in Linux as the config_enabled() macro.\n * The madness has the effect of taking a macro value that may be\n * defined to \"1\" (e.g. CONFIG_MYFEATURE), or may not be defined at\n * all and turning it into a literal expression that can be used at\n * \"runtime\".  That is, it works similarly to\n * \"defined(CONFIG_MYFEATURE)\" does except that it is an expansion\n * that can exist in a standard expression and be seen by the compiler\n * and optimizer.  Thus much ifdef usage can be replaced with cleaner\n * expressions like:\n *\n *     if (IS_ENABLED(CONFIG_MYFEATURE))\n *             myfeature_enable();\n *\n * INTERNAL\n * First pass just to expand any existing macros, we need the macro\n * value to be e.g. a literal \"1\" at expansion time in the next macro,\n * not \"(1)\", etc...  Standard recursive expansion does not work.\n */\n#define IS_ENABLED(config_macro) _IS_ENABLED1(config_macro)\n\n/* Now stick on a \"_XXXX\" prefix, it will now be \"_XXXX1\" if config_macro\n * is \"1\", or just \"_XXXX\" if it's undefined.\n *   ENABLED:   _IS_ENABLED2(_XXXX1)\n *   DISABLED   _IS_ENABLED2(_XXXX)\n */\n#define _IS_ENABLED1(config_macro) _IS_ENABLED2(_XXXX##config_macro)\n\n/* Here's the core trick, we map \"_XXXX1\" to \"_YYYY,\" (i.e. a string\n * with a trailing comma), so it has the effect of making this a\n * two-argument tuple to the preprocessor only in the case where the\n * value is defined to \"1\"\n *   ENABLED:    _YYYY,    <--- note comma!\n *   DISABLED:   _XXXX\n */\n#define _XXXX1 _YYYY,\n\n/* Then we append an extra argument to fool the gcc preprocessor into\n * accepting it as a varargs macro.\n *                         arg1   arg2  arg3\n *   ENABLED:   _IS_ENABLED3(_YYYY,    1,    0)\n *   DISABLED   _IS_ENABLED3(_XXXX 1,  0)\n */\n#define _IS_ENABLED2(one_or_two_args) _IS_ENABLED3(one_or_two_args 1, 0)\n\n/* And our second argument is thus now cooked to be 1 in the case\n * where the value is defined to 1, and 0 if not:\n */\n#define _IS_ENABLED3(ignore_this, val, ...) val\n\n/**\n * Macros for doing code-generation with the preprocessor.\n *\n * Generally it is better to generate code with the preprocessor than\n * to copy-paste code or to generate code with the build system /\n * python script's etc.\n *\n * http://stackoverflow.com/a/12540675\n */\n#define UTIL_EMPTY(...)\n#define UTIL_DEFER(...)    __VA_ARGS__ UTIL_EMPTY()\n#define UTIL_OBSTRUCT(...) __VA_ARGS__ UTIL_DEFER(UTIL_EMPTY)()\n#define UTIL_EXPAND(...)   __VA_ARGS__\n\n#define UTIL_EVAL(...)  UTIL_EVAL1(UTIL_EVAL1(UTIL_EVAL1(__VA_ARGS__)))\n#define UTIL_EVAL1(...) UTIL_EVAL2(UTIL_EVAL2(UTIL_EVAL2(__VA_ARGS__)))\n#define UTIL_EVAL2(...) UTIL_EVAL3(UTIL_EVAL3(UTIL_EVAL3(__VA_ARGS__)))\n#define UTIL_EVAL3(...) UTIL_EVAL4(UTIL_EVAL4(UTIL_EVAL4(__VA_ARGS__)))\n#define UTIL_EVAL4(...) UTIL_EVAL5(UTIL_EVAL5(UTIL_EVAL5(__VA_ARGS__)))\n#define UTIL_EVAL5(...) __VA_ARGS__\n\n#define UTIL_CAT(a, ...)           UTIL_PRIMITIVE_CAT(a, __VA_ARGS__)\n#define UTIL_PRIMITIVE_CAT(a, ...) a##__VA_ARGS__\n\n#define UTIL_INC(x) UTIL_PRIMITIVE_CAT(UTIL_INC_, x)\n#define UTIL_INC_0  1\n#define UTIL_INC_1  2\n#define UTIL_INC_2  3\n#define UTIL_INC_3  4\n#define UTIL_INC_4  5\n#define UTIL_INC_5  6\n#define UTIL_INC_6  7\n#define UTIL_INC_7  8\n#define UTIL_INC_8  9\n#define UTIL_INC_9  10\n#define UTIL_INC_10 11\n#define UTIL_INC_11 12\n#define UTIL_INC_12 13\n#define UTIL_INC_13 14\n#define UTIL_INC_14 15\n#define UTIL_INC_15 16\n#define UTIL_INC_16 17\n#define UTIL_INC_17 18\n#define UTIL_INC_18 19\n#define UTIL_INC_19 19\n\n#define UTIL_DEC(x) UTIL_PRIMITIVE_CAT(UTIL_DEC_, x)\n#define UTIL_DEC_0  0\n#define UTIL_DEC_1  0\n#define UTIL_DEC_2  1\n#define UTIL_DEC_3  2\n#define UTIL_DEC_4  3\n#define UTIL_DEC_5  4\n#define UTIL_DEC_6  5\n#define UTIL_DEC_7  6\n#define UTIL_DEC_8  7\n#define UTIL_DEC_9  8\n#define UTIL_DEC_10 9\n#define UTIL_DEC_11 10\n#define UTIL_DEC_12 11\n#define UTIL_DEC_13 12\n#define UTIL_DEC_14 13\n#define UTIL_DEC_15 14\n#define UTIL_DEC_16 15\n#define UTIL_DEC_17 16\n#define UTIL_DEC_18 17\n#define UTIL_DEC_19 18\n\n#define UTIL_CHECK_N(x, n, ...) n\n#define UTIL_CHECK(...)         UTIL_CHECK_N(__VA_ARGS__, 0, )\n\n#define UTIL_NOT(x) UTIL_CHECK(UTIL_PRIMITIVE_CAT(UTIL_NOT_, x))\n#define UTIL_NOT_0  ~, 1,\n\n#define UTIL_COMPL(b) UTIL_PRIMITIVE_CAT(UTIL_COMPL_, b)\n#define UTIL_COMPL_0  1\n#define UTIL_COMPL_1  0\n\n#define UTIL_BOOL(x) UTIL_COMPL(UTIL_NOT(x))\n\n#define UTIL_IIF(c)        UTIL_PRIMITIVE_CAT(UTIL_IIF_, c)\n#define UTIL_IIF_0(t, ...) __VA_ARGS__\n#define UTIL_IIF_1(t, ...) t\n\n#define UTIL_IF(c) UTIL_IIF(UTIL_BOOL(c))\n\n#define UTIL_EAT(...)\n#define UTIL_EXPAND(...) __VA_ARGS__\n#define UTIL_WHEN(c)     UTIL_IF(c) \\\n(UTIL_EXPAND, UTIL_EAT)\n\n#define UTIL_REPEAT(count, macro, ...)           \\\n    UTIL_WHEN(count)                             \\\n    (                                            \\\n        UTIL_OBSTRUCT(UTIL_REPEAT_INDIRECT)()(   \\\n            UTIL_DEC(count), macro, __VA_ARGS__) \\\n            UTIL_OBSTRUCT(macro)(                \\\n                UTIL_DEC(count), __VA_ARGS__))\n#define UTIL_REPEAT_INDIRECT() UTIL_REPEAT\n\n/**\n * Generates a sequence of code.\n * Useful for generating code like;\n *\n * NRF_PWM0, NRF_PWM1, NRF_PWM2,\n *\n * @arg LEN: The length of the sequence. Must be defined and less than\n * 20.\n *\n * @arg F(i, F_ARG): A macro function that accepts two arguments.\n *  F is called repeatedly, the first argument\n *  is the index in the sequence, and the second argument is the third\n *  argument given to UTIL_LISTIFY.\n *\n * Example:\n *\n *    \\#define FOO(i, _) NRF_PWM ## i ,\n *    { UTIL_LISTIFY(PWM_COUNT, FOO) }\n *    // The above two lines will generate the below:\n *    { NRF_PWM0 , NRF_PWM1 , }\n *\n * @note Calling UTIL_LISTIFY with undefined arguments has undefined\n * behaviour.\n */\n#define UTIL_LISTIFY(LEN, F, F_ARG) UTIL_EVAL(UTIL_REPEAT(LEN, F, F_ARG))\n\n#if defined(BFLB_BLE)\n/**\n * @brief      Convert a single character into a hexadecimal nibble.\n *\n * @param[in]  c     The character to convert\n * @param      x     The address of storage for the converted number.\n *\n *  @return Zero on success or (negative) error code otherwise.\n */\nint char2hex(char c, u8_t *x);\n\n/**\n * @brief      Convert a single hexadecimal nibble into a character.\n *\n * @param[in]  c     The number to convert\n * @param      x     The address of storage for the converted character.\n *\n *  @return Zero on success or (negative) error code otherwise.\n */\nint hex2char(u8_t x, char *c);\n\n/**\n * @brief      Convert a binary array into string representation.\n *\n * @param[in]  buf     The binary array to convert\n * @param[in]  buflen  The length of the binary array to convert\n * @param[out] hex     Address of where to store the string representation.\n * @param[in]  hexlen  Size of the storage area for string representation.\n *\n * @return     The length of the converted string, or 0 if an error occurred.\n */\nsize_t bin2hex(const u8_t *buf, size_t buflen, char *hex, size_t hexlen);\n\n/*\n * Convert hex string to byte string\n * Return number of bytes written to buf, or 0 on error\n * @return     The length of the converted array, or 0 if an error occurred.\n */\n\n/**\n * @brief      Convert a hexadecimal string into a binary array.\n *\n * @param[in]  hex     The hexadecimal string to convert\n * @param[in]  hexlen  The length of the hexadecimal string to convert.\n * @param[out] buf     Address of where to store the binary data\n * @param[in]  buflen  Size of the storage area for binary data\n *\n * @return     The length of the binary array , or 0 if an error occurred.\n */\nsize_t hex2bin(const char *hex, size_t hexlen, u8_t *buf, size_t buflen);\n\n/**\n * @brief      Convert a u8_t into decimal string representation.\n *\n * Convert a u8_t value into ASCII decimal string representation.\n * The string is terminated if there is enough space in buf.\n *\n * @param[out] buf     Address of where to store the string representation.\n * @param[in]  buflen  Size of the storage area for string representation.\n * @param[in]  value   The value to convert to decimal string\n *\n * @return     The length of the converted string (excluding terminator if\n *             any), or 0 if an error occurred.\n */\nu8_t u8_to_dec(char *buf, u8_t buflen, u8_t value);\n#endif //#if defined(BFLB_BLE)\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _UTIL__H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/misc/utils_string.h",
    "content": "#ifndef __UTILS_STRING_H__\n#define __UTILS_STRING_H__\nvoid get_bytearray_from_string(char **params, uint8_t *result, int array_size);\nvoid get_uint8_from_string(char **params, uint8_t *result);\nvoid get_uint16_from_string(char **params, uint16_t *result);\nvoid get_uint32_from_string(char **params, uint32_t *result);\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/net/buf.h",
    "content": "/** @file\n *  @brief Buffer management.\n */\n\n/*\n * Copyright (c) 2015 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef __NET_BUF_H\n#define __NET_BUF_H\n\n#include <stddef.h>\n#include <zephyr/types.h>\n#include <misc/util.h>\n#include <zephyr.h>\n#include \"../../port/include/ble_config.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**\n * @brief Network buffer library\n * @defgroup net_buf Network Buffer Library\n * @ingroup networking\n * @{\n */\n\n/* Alignment needed for various parts of the buffer definition */\n#define __net_buf_align __aligned(sizeof(int))\n\n/** @def NET_BUF_SIMPLE_DEFINE\n *  @brief Define a net_buf_simple stack variable.\n *\n *  This is a helper macro which is used to define a net_buf_simple object\n *  on the stack.\n *\n *  @param _name Name of the net_buf_simple object.\n *  @param _size Maximum data storage for the buffer.\n */\n#define NET_BUF_SIMPLE_DEFINE(_name, _size) \\\n    u8_t net_buf_data_##_name[_size];       \\\n    struct net_buf_simple _name = {         \\\n        .data = net_buf_data_##_name,       \\\n        .len = 0,                           \\\n        .size = _size,                      \\\n        .__buf = net_buf_data_##_name,      \\\n    }\n\n/** @def NET_BUF_SIMPLE_DEFINE_STATIC\n *  @brief Define a static net_buf_simple variable.\n *\n *  This is a helper macro which is used to define a static net_buf_simple\n *  object.\n *\n *  @param _name Name of the net_buf_simple object.\n *  @param _size Maximum data storage for the buffer.\n */\n#define NET_BUF_SIMPLE_DEFINE_STATIC(_name, _size)        \\\n    static /*__noinit*/ u8_t net_buf_data_##_name[_size]; \\\n    static struct net_buf_simple _name = {                \\\n        .data = net_buf_data_##_name,                     \\\n        .len = 0,                                         \\\n        .size = _size,                                    \\\n        .__buf = net_buf_data_##_name,                    \\\n    }\n\n#if (BFLB_STATIC_ALLOC_MEM)\nenum {\n    HCI_CMD = 0,\n    HCI_RX,\n    NUM_COMPLETE,\n    ACL_IN,\n    DISCARDABLE,\n    ACL_TX,\n    FRAG,\n    PREP,\n\n};\n#endif\n/** @brief Simple network buffer representation.\n *\n *  This is a simpler variant of the net_buf object (in fact net_buf uses\n *  net_buf_simple internally). It doesn't provide any kind of reference\n *  counting, user data, dynamic allocation, or in general the ability to\n *  pass through kernel objects such as FIFOs.\n *\n *  The main use of this is for scenarios where the meta-data of the normal\n *  net_buf isn't needed and causes too much overhead. This could be e.g.\n *  when the buffer only needs to be allocated on the stack or when the\n *  access to and lifetime of the buffer is well controlled and constrained.\n *\n */\nstruct net_buf_simple {\n    /** Pointer to the start of data in the buffer. */\n    u8_t *data;\n\n    /** Length of the data behind the data pointer. */\n    u16_t len;\n\n    /** Amount of data that this buffer can store. */\n    u16_t size;\n\n    /** Start of the data storage. Not to be accessed directly\n\t *  (the data pointer should be used instead).\n\t */\n    u8_t *__buf;\n};\n\n/** @def NET_BUF_SIMPLE\n *  @brief Define a net_buf_simple stack variable and get a pointer to it.\n *\n *  This is a helper macro which is used to define a net_buf_simple object on\n *  the stack and the get a pointer to it as follows:\n *\n *  struct net_buf_simple *my_buf = NET_BUF_SIMPLE(10);\n *\n *  After creating the object it needs to be initialized by calling\n *  net_buf_simple_init().\n *\n *  @param _size Maximum data storage for the buffer.\n *\n *  @return Pointer to stack-allocated net_buf_simple object.\n */\n#define NET_BUF_SIMPLE(_size)             \\\n    ((struct net_buf_simple *)(&(struct { \\\n        struct net_buf_simple buf;        \\\n        u8_t data[_size] __net_buf_align; \\\n    }){                                   \\\n        .buf.size = _size,                \\\n    }))\n\n/** @brief Initialize a net_buf_simple object.\n *\n *  This needs to be called after creating a net_buf_simple object using\n *  the NET_BUF_SIMPLE macro.\n *\n *  @param buf Buffer to initialize.\n *  @param reserve_head Headroom to reserve.\n */\nstatic inline void net_buf_simple_init(struct net_buf_simple *buf,\n                                       size_t reserve_head)\n{\n    if (!buf->__buf) {\n        buf->__buf = (u8_t *)buf + sizeof(*buf);\n    }\n\n    buf->data = buf->__buf + reserve_head;\n    buf->len = 0;\n}\n\n/**\n * @brief Initialize a net_buf_simple object with data.\n *\n * Initialized buffer object with external data.\n *\n * @param buf Buffer to initialize.\n * @param data External data pointer\n * @param size Amount of data the pointed data buffer if able to fit.\n */\nvoid net_buf_simple_init_with_data(struct net_buf_simple *buf,\n                                   void *data, size_t size);\n\n/**\n\n *  @brief Reset buffer\n *\n *  Reset buffer data so it can be reused for other purposes.\n *\n *  @param buf Buffer to reset.\n */\nstatic inline void net_buf_simple_reset(struct net_buf_simple *buf)\n{\n    buf->len = 0;\n    buf->data = buf->__buf;\n}\n\n/**\n * Clone buffer state, using the same data buffer.\n *\n * Initializes a buffer to point to the same data as an existing buffer.\n * Allows operations on the same data without altering the length and\n * offset of the original.\n *\n * @param original Buffer to clone.\n * @param clone The new clone.\n */\nvoid net_buf_simple_clone(const struct net_buf_simple *original,\n                          struct net_buf_simple *clone);\n\n/**\n *  @brief Prepare data to be added at the end of the buffer\n *\n *  Increments the data length of a buffer to account for more data\n *  at the end.\n *\n *  @param buf Buffer to update.\n *  @param len Number of bytes to increment the length with.\n *\n *  @return The original tail of the buffer.\n */\nvoid *net_buf_simple_add(struct net_buf_simple *buf, size_t len);\n\n/**\n *  @brief Copy bytes from memory to the end of the buffer\n *\n *  Copies the given number of bytes to the end of the buffer. Increments the\n *  data length of the  buffer to account for more data at the end.\n *\n *  @param buf Buffer to update.\n *  @param mem Location of data to be added.\n *  @param len Length of data to be added\n *\n *  @return The original tail of the buffer.\n */\nvoid *net_buf_simple_add_mem(struct net_buf_simple *buf, const void *mem,\n                             size_t len);\n\n/**\n *  @brief Add (8-bit) byte at the end of the buffer\n *\n *  Adds a byte at the end of the buffer. Increments the data length of\n *  the  buffer to account for more data at the end.\n *\n *  @param buf Buffer to update.\n *  @param val byte value to be added.\n *\n *  @return Pointer to the value added\n */\nu8_t *net_buf_simple_add_u8(struct net_buf_simple *buf, u8_t val);\n\n/**\n *  @brief Add 16-bit value at the end of the buffer\n *\n *  Adds 16-bit value in little endian format at the end of buffer.\n *  Increments the data length of a buffer to account for more data\n *  at the end.\n *\n *  @param buf Buffer to update.\n *  @param val 16-bit value to be added.\n */\nvoid net_buf_simple_add_le16(struct net_buf_simple *buf, u16_t val);\n\n/**\n *  @brief Add 16-bit value at the end of the buffer\n *\n *  Adds 16-bit value in big endian format at the end of buffer.\n *  Increments the data length of a buffer to account for more data\n *  at the end.\n *\n *  @param buf Buffer to update.\n *  @param val 16-bit value to be added.\n */\nvoid net_buf_simple_add_be16(struct net_buf_simple *buf, u16_t val);\n\n/**\n * @brief Add 24-bit value at the end of the buffer\n *\n * Adds 24-bit value in little endian format at the end of buffer.\n * Increments the data length of a buffer to account for more data\n * at the end.\n *\n * @param buf Buffer to update.\n * @param val 24-bit value to be added.\n */\nvoid net_buf_simple_add_le24(struct net_buf_simple *buf, uint32_t val);\n\n/**\n * @brief Add 24-bit value at the end of the buffer\n *\n * Adds 24-bit value in big endian format at the end of buffer.\n * Increments the data length of a buffer to account for more data\n * at the end.\n *\n * @param buf Buffer to update.\n * @param val 24-bit value to be added.\n */\nvoid net_buf_simple_add_be24(struct net_buf_simple *buf, uint32_t val);\n\n/**\n *  @brief Add 32-bit value at the end of the buffer\n *\n *  Adds 32-bit value in little endian format at the end of buffer.\n *  Increments the data length of a buffer to account for more data\n *  at the end.\n *\n *  @param buf Buffer to update.\n *  @param val 32-bit value to be added.\n */\nvoid net_buf_simple_add_le32(struct net_buf_simple *buf, u32_t val);\n\n/**\n *  @brief Add 32-bit value at the end of the buffer\n *\n *  Adds 32-bit value in big endian format at the end of buffer.\n *  Increments the data length of a buffer to account for more data\n *  at the end.\n *\n *  @param buf Buffer to update.\n *  @param val 32-bit value to be added.\n */\nvoid net_buf_simple_add_be32(struct net_buf_simple *buf, u32_t val);\n\n/**\n *  @brief Push data to the beginning of the buffer.\n *\n *  Modifies the data pointer and buffer length to account for more data\n *  in the beginning of the buffer.\n *\n *  @param buf Buffer to update.\n *  @param len Number of bytes to add to the beginning.\n *\n *  @return The new beginning of the buffer data.\n */\nvoid *net_buf_simple_push(struct net_buf_simple *buf, size_t len);\n\n/**\n *  @brief Push 16-bit value to the beginning of the buffer\n *\n *  Adds 16-bit value in little endian format to the beginning of the\n *  buffer.\n *\n *  @param buf Buffer to update.\n *  @param val 16-bit value to be pushed to the buffer.\n */\nvoid net_buf_simple_push_le16(struct net_buf_simple *buf, u16_t val);\n\n/**\n *  @brief Push 16-bit value to the beginning of the buffer\n *\n *  Adds 16-bit value in big endian format to the beginning of the\n *  buffer.\n *\n *  @param buf Buffer to update.\n *  @param val 16-bit value to be pushed to the buffer.\n */\nvoid net_buf_simple_push_be16(struct net_buf_simple *buf, u16_t val);\n\n/**\n *  @brief Push 8-bit value to the beginning of the buffer\n *\n *  Adds 8-bit value the beginning of the buffer.\n *\n *  @param buf Buffer to update.\n *  @param val 8-bit value to be pushed to the buffer.\n */\nvoid net_buf_simple_push_u8(struct net_buf_simple *buf, u8_t val);\n\n/**\n * @brief Push 24-bit value to the beginning of the buffer\n *\n * Adds 24-bit value in little endian format to the beginning of the\n * buffer.\n *\n * @param buf Buffer to update.\n * @param val 24-bit value to be pushed to the buffer.\n */\nvoid net_buf_simple_push_le24(struct net_buf_simple *buf, uint32_t val);\n\n/**\n * @brief Push 24-bit value to the beginning of the buffer\n *\n * Adds 24-bit value in big endian format to the beginning of the\n * buffer.\n *\n * @param buf Buffer to update.\n * @param val 24-bit value to be pushed to the buffer.\n */\nvoid net_buf_simple_push_be24(struct net_buf_simple *buf, uint32_t val);\n\n/**\n *  @brief Remove data from the beginning of the buffer.\n *\n *  Removes data from the beginning of the buffer by modifying the data\n *  pointer and buffer length.\n *\n *  @param buf Buffer to update.\n *  @param len Number of bytes to remove.\n *\n *  @return New beginning of the buffer data.\n */\nvoid *net_buf_simple_pull(struct net_buf_simple *buf, size_t len);\n\n/**\n * @brief Remove data from the beginning of the buffer.\n *\n * Removes data from the beginning of the buffer by modifying the data\n * pointer and buffer length.\n *\n * @param buf Buffer to update.\n * @param len Number of bytes to remove.\n *\n * @return Pointer to the old location of the buffer data.\n */\nvoid *net_buf_simple_pull_mem(struct net_buf_simple *buf, size_t len);\n\n/**\n *  @brief Remove a 8-bit value from the beginning of the buffer\n *\n *  Same idea as with net_buf_simple_pull(), but a helper for operating\n *  on 8-bit values.\n *\n *  @param buf A valid pointer on a buffer.\n *\n *  @return The 8-bit removed value\n */\nu8_t net_buf_simple_pull_u8(struct net_buf_simple *buf);\n\n/**\n *  @brief Remove and convert 16 bits from the beginning of the buffer.\n *\n *  Same idea as with net_buf_simple_pull(), but a helper for operating\n *  on 16-bit little endian data.\n *\n *  @param buf A valid pointer on a buffer.\n *\n *  @return 16-bit value converted from little endian to host endian.\n */\nu16_t net_buf_simple_pull_le16(struct net_buf_simple *buf);\n\n/**\n *  @brief Remove and convert 16 bits from the beginning of the buffer.\n *\n *  Same idea as with net_buf_simple_pull(), but a helper for operating\n *  on 16-bit big endian data.\n *\n *  @param buf A valid pointer on a buffer.\n *\n *  @return 16-bit value converted from big endian to host endian.\n */\nu16_t net_buf_simple_pull_be16(struct net_buf_simple *buf);\n\n/**\n *  @brief Remove and convert 32 bits from the beginning of the buffer.\n *\n *  Same idea as with net_buf_simple_pull(), but a helper for operating\n *  on 32-bit little endian data.\n *\n *  @param buf A valid pointer on a buffer.\n *\n *  @return 32-bit value converted from little endian to host endian.\n */\nu32_t net_buf_simple_pull_le32(struct net_buf_simple *buf);\n\n/**\n *  @brief Remove and convert 32 bits from the beginning of the buffer.\n *\n *  Same idea as with net_buf_simple_pull(), but a helper for operating\n *  on 32-bit big endian data.\n *\n *  @param buf A valid pointer on a buffer.\n *\n *  @return 32-bit value converted from big endian to host endian.\n */\nu32_t net_buf_simple_pull_be32(struct net_buf_simple *buf);\n\n/**\n *  @brief Get the tail pointer for a buffer.\n *\n *  Get a pointer to the end of the data in a buffer.\n *\n *  @param buf Buffer.\n *\n *  @return Tail pointer for the buffer.\n */\nstatic inline u8_t *net_buf_simple_tail(struct net_buf_simple *buf)\n{\n    return buf->data + buf->len;\n}\n\n/**\n *  @brief Check buffer headroom.\n *\n *  Check how much free space there is in the beginning of the buffer.\n *\n *  buf A valid pointer on a buffer\n *\n *  @return Number of bytes available in the beginning of the buffer.\n */\nsize_t net_buf_simple_headroom(struct net_buf_simple *buf);\n\n/**\n *  @brief Check buffer tailroom.\n *\n *  Check how much free space there is at the end of the buffer.\n *\n *  @param buf A valid pointer on a buffer\n *\n *  @return Number of bytes available at the end of the buffer.\n */\nsize_t net_buf_simple_tailroom(struct net_buf_simple *buf);\n\n/**\n *  @brief Parsing state of a buffer.\n *\n *  This is used for temporarily storing the parsing state of a buffer\n *  while giving control of the parsing to a routine which we don't\n *  control.\n */\nstruct net_buf_simple_state {\n    /** Offset of the data pointer from the beginning of the storage */\n    u16_t offset;\n    /** Length of data */\n    u16_t len;\n};\n\n/**\n *  @brief Save the parsing state of a buffer.\n *\n *  Saves the parsing state of a buffer so it can be restored later.\n *\n *  @param buf Buffer from which the state should be saved.\n *  @param state Storage for the state.\n */\nstatic inline void net_buf_simple_save(struct net_buf_simple *buf,\n                                       struct net_buf_simple_state *state)\n{\n    state->offset = net_buf_simple_headroom(buf);\n    state->len = buf->len;\n}\n\n/**\n *  @brief Restore the parsing state of a buffer.\n *\n *  Restores the parsing state of a buffer from a state previously stored\n *  by net_buf_simple_save().\n *\n *  @param buf Buffer to which the state should be restored.\n *  @param state Stored state.\n */\nstatic inline void net_buf_simple_restore(struct net_buf_simple *buf,\n                                          struct net_buf_simple_state *state)\n{\n    buf->data = buf->__buf + state->offset;\n    buf->len = state->len;\n}\n\n/** Flag indicating that the buffer has associated fragments. Only used\n  * internally by the buffer handling code while the buffer is inside a\n  * FIFO, meaning this never needs to be explicitly set or unset by the\n  * net_buf API user. As long as the buffer is outside of a FIFO, i.e.\n  * in practice always for the user for this API, the buf->frags pointer\n  * should be used instead.\n  */\n#define NET_BUF_FRAGS BIT(0)\n/** Flag indicating that the buffer's associated data pointer, points to\n * externally allocated memory. Therefore once ref goes down to zero, the\n * pointed data will not need to be deallocated. This never needs to be\n * explicitly set or unet by the net_buf API user. Such net_buf is\n * exclusively instantiated via net_buf_alloc_with_data() function.\n * Reference count mechanism however will behave the same way, and ref\n * count going to 0 will free the net_buf but no the data pointer in it.\n */\n#define NET_BUF_EXTERNAL_DATA BIT(1)\n\n/** @brief Network buffer representation.\n  *\n  * This struct is used to represent network buffers. Such buffers are\n  * normally defined through the NET_BUF_POOL_*_DEFINE() APIs and allocated\n  * using the net_buf_alloc() API.\n  */\nstruct net_buf {\n    union {\n        /** Allow placing the buffer into sys_slist_t */\n        sys_snode_t node;\n\n        /** Fragments associated with this buffer. */\n        struct net_buf *frags;\n    };\n\n    /** Reference count. */\n    u8_t ref;\n\n    /** Bit-field of buffer flags. */\n    u8_t flags;\n\n    /** Where the buffer should go when freed up. */\n    u8_t pool_id;\n\n    /* Union for convenience access to the net_buf_simple members, also\n\t * preserving the old API.\n\t */\n    union {\n        /* The ABI of this struct must match net_buf_simple */\n        struct {\n            /** Pointer to the start of data in the buffer. */\n            u8_t *data;\n\n            /** Length of the data behind the data pointer. */\n            u16_t len;\n\n            /** Amount of data that this buffer can store. */\n            u16_t size;\n\n            /** Start of the data storage. Not to be accessed\n\t\t\t *  directly (the data pointer should be used\n\t\t\t *  instead).\n\t\t\t */\n            u8_t *__buf;\n        };\n\n        struct net_buf_simple b;\n    };\n\n    /** System metadata for this buffer. */\n    u8_t user_data[CONFIG_NET_BUF_USER_DATA_SIZE] __net_buf_align;\n};\n\n#if defined(BFLB_DYNAMIC_ALLOC_MEM)\ntypedef void (*destroy_cb_t)(struct net_buf *buf);\n#endif\n\nstruct net_buf_data_cb {\n    u8_t *(*alloc)(struct net_buf *buf, size_t *size, s32_t timeout);\n    u8_t *(*ref)(struct net_buf *buf, u8_t *data);\n    void (*unref)(struct net_buf *buf, u8_t *data);\n};\n\nstruct net_buf_data_alloc {\n    const struct net_buf_data_cb *cb;\n    void *alloc_data;\n};\n\nstruct net_buf_pool {\n    /** LIFO to place the buffer into when free */\n    struct k_lifo free;\n\n/** Number of buffers in pool */\n#if defined(BFLB_DYNAMIC_ALLOC_MEM)\n    u16_t buf_count;\n#else\n    const u16_t buf_count;\n#endif\n    /** Number of uninitialized buffers */\n    u16_t uninit_count;\n\n#if defined(CONFIG_NET_BUF_POOL_USAGE)\n    /** Amount of available buffers in the pool. */\n    s16_t avail_count;\n\n    /** Total size of the pool. */\n    const u16_t pool_size;\n\n    /** Name of the pool. Used when printing pool information. */\n    const char *name;\n#endif /* CONFIG_NET_BUF_POOL_USAGE */\n#if defined(BFLB_DYNAMIC_ALLOC_MEM)\n    /** Optional destroy callback when buffer is freed. */\n    void (*destroy)(struct net_buf *buf);\n\n    /** Data allocation handlers. */\n    struct net_buf_data_alloc *alloc;\n\n    /** Start of buffer storage array */\n    struct net_buf *__bufs;\n#else\n    /** Optional destroy callback when buffer is freed. */\n    void (*const destroy)(struct net_buf *buf);\n\n    /** Data allocation handlers. */\n    const struct net_buf_data_alloc *alloc;\n\n    /** Start of buffer storage array */\n    struct net_buf *const __bufs;\n#endif\n};\n\n#if defined(CONFIG_NET_BUF_POOL_USAGE)\n#define NET_BUF_POOL_INITIALIZER(_pool, _alloc, _bufs, _count, _destroy) \\\n    {                                                                    \\\n        .alloc = _alloc,                                                 \\\n        .free = _K_LIFO_INITIALIZER(_pool.free),                         \\\n        .__bufs = _bufs,                                                 \\\n        .buf_count = _count,                                             \\\n        .uninit_count = _count,                                          \\\n        .avail_count = _count,                                           \\\n        .destroy = _destroy,                                             \\\n        .name = STRINGIFY(_pool),                                        \\\n    }\n#else\n#define NET_BUF_POOL_INITIALIZER(_pool, _alloc, _bufs, _count, _destroy) \\\n    {                                                                    \\\n        .alloc = _alloc,                                                 \\\n        .free = _K_LIFO_INITIALIZER(_pool.free),                         \\\n        .__bufs = _bufs,                                                 \\\n        .buf_count = _count,                                             \\\n        .uninit_count = _count,                                          \\\n        .destroy = _destroy,                                             \\\n    }\n#endif /* CONFIG_NET_BUF_POOL_USAGE */\n\nextern const struct net_buf_data_alloc net_buf_heap_alloc;\n\n/** @def NET_BUF_POOL_HEAP_DEFINE\n *  @brief Define a new pool for buffers using the heap for the data.\n *\n *  Defines a net_buf_pool struct and the necessary memory storage (array of\n *  structs) for the needed amount of buffers. After this, the buffers can be\n *  accessed from the pool through net_buf_alloc. The pool is defined as a\n *  static variable, so if it needs to be exported outside the current module\n *  this needs to happen with the help of a separate pointer rather than an\n *  extern declaration.\n *\n *  The data payload of the buffers will be allocated from the heap using\n *  k_malloc, so CONFIG_HEAP_MEM_POOL_SIZE must be set to a positive value.\n *  This kind of pool does not support blocking on the data allocation, so\n *  the timeout passed to net_buf_alloc will be always treated as K_NO_WAIT\n *  when trying to allocate the data. This means that allocation failures,\n *  i.e. NULL returns, must always be handled cleanly.\n *\n *  If provided with a custom destroy callback, this callback is\n *  responsible for eventually calling net_buf_destroy() to complete the\n *  process of returning the buffer to the pool.\n *\n *  @param _name      Name of the pool variable.\n *  @param _count     Number of buffers in the pool.\n *  @param _destroy   Optional destroy callback when buffer is freed.\n */\n#define NET_BUF_POOL_HEAP_DEFINE(_name, _count, _destroy)        \\\n    static struct net_buf net_buf_##_name[_count] __noinit;      \\\n    struct net_buf_pool _name __net_buf_align                    \\\n        __in_section(_net_buf_pool, static, _name) =             \\\n            NET_BUF_POOL_INITIALIZER(_name, &net_buf_heap_alloc, \\\n                                     net_buf_##_name, _count, _destroy)\n\nstruct net_buf_pool_fixed {\n    size_t data_size;\n    u8_t *data_pool;\n};\n\nextern const struct net_buf_data_cb net_buf_fixed_cb;\n\n/** @def NET_BUF_POOL_FIXED_DEFINE\n *  @brief Define a new pool for buffers based on fixed-size data\n *\n *  Defines a net_buf_pool struct and the necessary memory storage (array of\n *  structs) for the needed amount of buffers. After this, the buffers can be\n *  accessed from the pool through net_buf_alloc. The pool is defined as a\n *  static variable, so if it needs to be exported outside the current module\n *  this needs to happen with the help of a separate pointer rather than an\n *  extern declaration.\n *\n *  The data payload of the buffers will be allocated from a byte array\n *  of fixed sized chunks. This kind of pool does not support blocking on\n *  the data allocation, so the timeout passed to net_buf_alloc will be\n *  always treated as K_NO_WAIT when trying to allocate the data. This means\n *  that allocation failures, i.e. NULL returns, must always be handled\n *  cleanly.\n *\n *  If provided with a custom destroy callback, this callback is\n *  responsible for eventually calling net_buf_destroy() to complete the\n *  process of returning the buffer to the pool.\n *\n *  @param _name      Name of the pool variable.\n *  @param _count     Number of buffers in the pool.\n *  @param _data_size Maximum data payload per buffer.\n *  @param _destroy   Optional destroy callback when buffer is freed.\n */\n#if !defined(BFLB_DYNAMIC_ALLOC_MEM)\n#define NET_BUF_POOL_FIXED_DEFINE(_name, _count, _data_size, _destroy)     \\\n    static struct net_buf net_buf_##_name[_count];                         \\\n    static u8_t net_buf_data_##_name[_count][_data_size];                  \\\n    static const struct net_buf_pool_fixed net_buf_fixed_##_name = {       \\\n        .data_size = _data_size,                                           \\\n        .data_pool = (u8_t *)net_buf_data_##_name,                         \\\n    };                                                                     \\\n    static const struct net_buf_data_alloc net_buf_fixed_alloc_##_name = { \\\n        .cb = &net_buf_fixed_cb,                                           \\\n        .alloc_data = (void *)&net_buf_fixed_##_name,                      \\\n    };                                                                     \\\n    struct net_buf_pool _name __net_buf_align                              \\\n        __in_section(_net_buf_pool, static, _name) =                       \\\n            NET_BUF_POOL_INITIALIZER(_name, &net_buf_fixed_alloc_##_name,  \\\n                                     net_buf_##_name, _count, _destroy)\n#endif\n\n#if (!BFLB_BLE)\nextern const struct net_buf_data_cb net_buf_var_cb;\n\n/** @def NET_BUF_POOL_VAR_DEFINE\n *  @brief Define a new pool for buffers with variable size payloads\n *\n *  Defines a net_buf_pool struct and the necessary memory storage (array of\n *  structs) for the needed amount of buffers. After this, the buffers can be\n *  accessed from the pool through net_buf_alloc. The pool is defined as a\n *  static variable, so if it needs to be exported outside the current module\n *  this needs to happen with the help of a separate pointer rather than an\n *  extern declaration.\n *\n *  The data payload of the buffers will be based on a memory pool from which\n *  variable size payloads may be allocated.\n *\n *  If provided with a custom destroy callback, this callback is\n *  responsible for eventually calling net_buf_destroy() to complete the\n *  process of returning the buffer to the pool.\n *\n *  @param _name      Name of the pool variable.\n *  @param _count     Number of buffers in the pool.\n *  @param _data_size Total amount of memory available for data payloads.\n *  @param _destroy   Optional destroy callback when buffer is freed.\n */\n#define NET_BUF_POOL_VAR_DEFINE(_name, _count, _data_size, _destroy)      \\\n    static struct net_buf _net_buf_##_name[_count] __noinit;              \\\n    K_MEM_POOL_DEFINE(net_buf_mem_pool_##_name, 16, _data_size, 1, 4);    \\\n    static const struct net_buf_data_alloc net_buf_data_alloc_##_name = { \\\n        .cb = &net_buf_var_cb,                                            \\\n        .alloc_data = &net_buf_mem_pool_##_name,                          \\\n    };                                                                    \\\n    struct net_buf_pool _name __net_buf_align                             \\\n        __in_section(_net_buf_pool, static, _name) =                      \\\n            NET_BUF_POOL_INITIALIZER(_name, &net_buf_data_alloc_##_name,  \\\n                                     _net_buf_##_name, _count, _destroy)\n#endif\n\n#if !defined(BFLB_DYNAMIC_ALLOC_MEM)\n/** @def NET_BUF_POOL_DEFINE\n *  @brief Define a new pool for buffers\n *\n *  Defines a net_buf_pool struct and the necessary memory storage (array of\n *  structs) for the needed amount of buffers. After this,the buffers can be\n *  accessed from the pool through net_buf_alloc. The pool is defined as a\n *  static variable, so if it needs to be exported outside the current module\n *  this needs to happen with the help of a separate pointer rather than an\n *  extern declaration.\n *\n *  If provided with a custom destroy callback this callback is\n *  responsible for eventually calling net_buf_destroy() to complete the\n *  process of returning the buffer to the pool.\n *\n *  @param _name     Name of the pool variable.\n *  @param _count    Number of buffers in the pool.\n *  @param _size     Maximum data size for each buffer.\n *  @param _ud_size  Amount of user data space to reserve.\n *  @param _destroy  Optional destroy callback when buffer is freed.\n */\n#define NET_BUF_POOL_DEFINE(_name, _count, _size, _ud_size, _destroy) \\\n    BUILD_ASSERT(_ud_size <= CONFIG_NET_BUF_USER_DATA_SIZE);          \\\n    NET_BUF_POOL_FIXED_DEFINE(_name, _count, _size, _destroy)\n#endif\n\n#if defined(BFLB_DYNAMIC_ALLOC_MEM)\n#if (BFLB_STATIC_ALLOC_MEM)\nvoid net_buf_init(u8_t buf_type, struct net_buf_pool *buf_pool, u16_t buf_count, size_t data_size, destroy_cb_t destroy);\n#else\nvoid net_buf_init(struct net_buf_pool *buf_pool, u16_t buf_count, size_t data_size, destroy_cb_t destroy);\n#endif\nvoid net_buf_deinit(struct net_buf_pool *buf_pool);\n#endif\n/**\n *  @brief Looks up a pool based on its ID.\n *\n *  @param id Pool ID (e.g. from buf->pool_id).\n *\n *  @return Pointer to pool.\n */\nstruct net_buf_pool *net_buf_pool_get(int id);\n\n/**\n *  @brief Get a zero-based index for a buffer.\n *\n *  This function will translate a buffer into a zero-based index,\n *  based on its placement in its buffer pool. This can be useful if you\n *  want to associate an external array of meta-data contexts with the\n *  buffers of a pool.\n *\n *  @param buf  Network buffer.\n *\n *  @return Zero-based index for the buffer.\n */\nint net_buf_id(struct net_buf *buf);\n\n/**\n *  @brief Allocate a new buffer from a pool.\n *\n *  Allocate a new buffer from a pool.\n *\n *  @param pool Which pool to allocate the buffer from.\n *  @param timeout Affects the action taken should the pool be empty.\n *         If K_NO_WAIT, then return immediately. If K_FOREVER, then\n *         wait as long as necessary. Otherwise, wait up to the specified\n *         number of milliseconds before timing out. Note that some types\n *         of data allocators do not support blocking (such as the HEAP\n *         type). In this case it's still possible for net_buf_alloc() to\n *         fail (return NULL) even if it was given K_FOREVER.\n *\n *  @return New buffer or NULL if out of buffers.\n */\n#if defined(CONFIG_NET_BUF_LOG)\nstruct net_buf *net_buf_alloc_fixed_debug(struct net_buf_pool *pool,\n                                          s32_t timeout, const char *func,\n                                          int line);\n#define net_buf_alloc_fixed(_pool, _timeout) \\\n    net_buf_alloc_fixed_debug(_pool, _timeout, __func__, __LINE__)\n#else\nstruct net_buf *net_buf_alloc_fixed(struct net_buf_pool *pool, s32_t timeout);\n#endif\n\n#define net_buf_alloc(_pool, _timeout) net_buf_alloc_fixed(_pool, _timeout)\n\n/**\n *  @brief Allocate a new buffer from a pool.\n *\n *  Allocate a new buffer from a pool.\n *\n *  @param pool Which pool to allocate the buffer from.\n *  @param size Amount of data the buffer must be able to fit.\n *  @param timeout Affects the action taken should the pool be empty.\n *         If K_NO_WAIT, then return immediately. If K_FOREVER, then\n *         wait as long as necessary. Otherwise, wait up to the specified\n *         number of milliseconds before timing out. Note that some types\n *         of data allocators do not support blocking (such as the HEAP\n *         type). In this case it's still possible for net_buf_alloc() to\n *         fail (return NULL) even if it was given K_FOREVER.\n *\n *  @return New buffer or NULL if out of buffers.\n */\n#if defined(CONFIG_NET_BUF_LOG)\nstruct net_buf *net_buf_alloc_len_debug(struct net_buf_pool *pool, size_t size,\n                                        s32_t timeout, const char *func,\n                                        int line);\n#define net_buf_alloc_len(_pool, _size, _timeout) \\\n    net_buf_alloc_len_debug(_pool, _size, _timeout, __func__, __LINE__)\n#else\nstruct net_buf *net_buf_alloc_len(struct net_buf_pool *pool, size_t size,\n                                  s32_t timeout);\n#endif\n\n/**\n *  @brief Allocate a new buffer from a pool but with external data pointer.\n *\n *  Allocate a new buffer from a pool, where the data pointer comes from the\n *  user and not from the pool.\n *\n *  @param pool Which pool to allocate the buffer from.\n *  @param data External data pointer\n *  @param size Amount of data the pointed data buffer if able to fit.\n *  @param timeout Affects the action taken should the pool be empty.\n *         If K_NO_WAIT, then return immediately. If K_FOREVER, then\n *         wait as long as necessary. Otherwise, wait up to the specified\n *         number of milliseconds before timing out. Note that some types\n *         of data allocators do not support blocking (such as the HEAP\n *         type). In this case it's still possible for net_buf_alloc() to\n *         fail (return NULL) even if it was given K_FOREVER.\n *\n *  @return New buffer or NULL if out of buffers.\n */\n#if defined(CONFIG_NET_BUF_LOG)\nstruct net_buf *net_buf_alloc_with_data_debug(struct net_buf_pool *pool,\n                                              void *data, size_t size,\n                                              s32_t timeout, const char *func,\n                                              int line);\n#define net_buf_alloc_with_data(_pool, _data_, _size, _timeout)   \\\n    net_buf_alloc_with_data_debug(_pool, _data_, _size, _timeout, \\\n                                  __func__, __LINE__)\n#else\nstruct net_buf *net_buf_alloc_with_data(struct net_buf_pool *pool,\n                                        void *data, size_t size,\n                                        s32_t timeout);\n#endif\n\n/**\n *  @brief Get a buffer from a FIFO.\n *\n *  Get buffer from a FIFO.\n *\n *  @param fifo Which FIFO to take the buffer from.\n *  @param timeout Affects the action taken should the FIFO be empty.\n *         If K_NO_WAIT, then return immediately. If K_FOREVER, then wait as\n *         long as necessary. Otherwise, wait up to the specified number of\n *         milliseconds before timing out.\n *\n *  @return New buffer or NULL if the FIFO is empty.\n */\n#if defined(CONFIG_NET_BUF_LOG)\nstruct net_buf *net_buf_get_debug(struct k_fifo *fifo, s32_t timeout,\n                                  const char *func, int line);\n#define net_buf_get(_fifo, _timeout) \\\n    net_buf_get_debug(_fifo, _timeout, __func__, __LINE__)\n#else\nstruct net_buf *net_buf_get(struct k_fifo *fifo, s32_t timeout);\n#endif\n\n/**\n *  @brief Destroy buffer from custom destroy callback\n *\n *  This helper is only intended to be used from custom destroy callbacks.\n *  If no custom destroy callback is given to NET_BUF_POOL_*_DEFINE() then\n *  there is no need to use this API.\n *\n *  @param buf Buffer to destroy.\n */\nstatic inline void net_buf_destroy(struct net_buf *buf)\n{\n    struct net_buf_pool *pool = net_buf_pool_get(buf->pool_id);\n\n    k_lifo_put(&pool->free, buf);\n}\n\n/**\n *  @brief Reset buffer\n *\n *  Reset buffer data and flags so it can be reused for other purposes.\n *\n *  @param buf Buffer to reset.\n */\nvoid net_buf_reset(struct net_buf *buf);\n\n/**\n *  @brief Initialize buffer with the given headroom.\n *\n *  Initializes a buffer with a given headroom. The buffer is not expected to\n *  contain any data when this API is called.\n *\n *  @param buf Buffer to initialize.\n *  @param reserve How much headroom to reserve.\n */\nvoid net_buf_simple_reserve(struct net_buf_simple *buf, size_t reserve);\n\n/**\n *  @brief Put a buffer into a list\n *\n *  Put a buffer to the end of a list. If the buffer contains follow-up\n *  fragments this function will take care of inserting them as well\n *  into the list.\n *\n *  @param list Which list to append the buffer to.\n *  @param buf Buffer.\n */\nvoid net_buf_slist_put(sys_slist_t *list, struct net_buf *buf);\n\n/**\n *  @brief Get a buffer from a list.\n *\n *  Get buffer from a list. If the buffer had any fragments, these will\n *  automatically be recovered from the list as well and be placed to\n *  the buffer's fragment list.\n *\n *  @param list Which list to take the buffer from.\n *\n *  @return New buffer or NULL if the FIFO is empty.\n */\nstruct net_buf *net_buf_slist_get(sys_slist_t *list);\n\n/**\n *  @brief Put a buffer into a FIFO\n *\n *  Put a buffer to the end of a FIFO. If the buffer contains follow-up\n *  fragments this function will take care of inserting them as well\n *  into the FIFO.\n *\n *  @param fifo Which FIFO to put the buffer to.\n *  @param buf Buffer.\n */\nvoid net_buf_put(struct k_fifo *fifo, struct net_buf *buf);\n\n/**\n *  @brief Decrements the reference count of a buffer.\n *\n *  Decrements the reference count of a buffer and puts it back into the\n *  pool if the count reaches zero.\n *\n *  @param buf A valid pointer on a buffer\n */\n#if defined(CONFIG_NET_BUF_LOG)\nvoid net_buf_unref_debug(struct net_buf *buf, const char *func, int line);\n#define net_buf_unref(_buf) \\\n    net_buf_unref_debug(_buf, __func__, __LINE__)\n#else\nvoid net_buf_unref(struct net_buf *buf);\n#endif\n\n/**\n *  @brief Increment the reference count of a buffer.\n *\n *  @param buf A valid pointer on a buffer\n *\n *  @return the buffer newly referenced\n */\nstruct net_buf *net_buf_ref(struct net_buf *buf);\n\n/**\n *  @brief Duplicate buffer\n *\n *  Duplicate given buffer including any data and headers currently stored.\n *\n *  @param buf A valid pointer on a buffer\n *  @param timeout Affects the action taken should the pool be empty.\n *         If K_NO_WAIT, then return immediately. If K_FOREVER, then\n *         wait as long as necessary. Otherwise, wait up to the specified\n *         number of milliseconds before timing out.\n *\n *  @return Duplicated buffer or NULL if out of buffers.\n */\nstruct net_buf *net_buf_clone(struct net_buf *buf, s32_t timeout);\n\n/**\n *  @brief Get a pointer to the user data of a buffer.\n *\n *  @param buf A valid pointer on a buffer\n *\n *  @return Pointer to the user data of the buffer.\n */\nstatic inline void *net_buf_user_data(const struct net_buf *buf)\n{\n    return (void *)buf->user_data;\n}\n\n/** @def net_buf_reserve\n *  @brief Initialize buffer with the given headroom.\n *\n *  Initializes a buffer with a given headroom. The buffer is not expected to\n *  contain any data when this API is called.\n *\n *  @param buf Buffer to initialize.\n *  @param reserve How much headroom to reserve.\n */\n#define net_buf_reserve(buf, reserve) net_buf_simple_reserve(&(buf)->b, \\\n                                                             reserve)\n\n/**\n *  @def net_buf_add\n *  @brief Prepare data to be added at the end of the buffer\n *\n *  Increments the data length of a buffer to account for more data\n *  at the end.\n *\n *  @param buf Buffer to update.\n *  @param len Number of bytes to increment the length with.\n *\n *  @return The original tail of the buffer.\n */\n#define net_buf_add(buf, len) net_buf_simple_add(&(buf)->b, len)\n\n/**\n *  @def net_buf_add_mem\n *  @brief Copy bytes from memory to the end of the buffer\n *\n *  Copies the given number of bytes to the end of the buffer. Increments the\n *  data length of the  buffer to account for more data at the end.\n *\n *  @param buf Buffer to update.\n *  @param mem Location of data to be added.\n *  @param len Length of data to be added\n *\n *  @return The original tail of the buffer.\n */\n#define net_buf_add_mem(buf, mem, len) net_buf_simple_add_mem(&(buf)->b, \\\n                                                              mem, len)\n\n/**\n *  @def net_buf_add_u8\n *  @brief Add (8-bit) byte at the end of the buffer\n *\n *  Adds a byte at the end of the buffer. Increments the data length of\n *  the  buffer to account for more data at the end.\n *\n *  @param buf Buffer to update.\n *  @param val byte value to be added.\n *\n *  @return Pointer to the value added\n */\n#define net_buf_add_u8(buf, val) net_buf_simple_add_u8(&(buf)->b, val)\n\n/**\n *  @def net_buf_add_le16\n *  @brief Add 16-bit value at the end of the buffer\n *\n *  Adds 16-bit value in little endian format at the end of buffer.\n *  Increments the data length of a buffer to account for more data\n *  at the end.\n *\n *  @param buf Buffer to update.\n *  @param val 16-bit value to be added.\n */\n#define net_buf_add_le16(buf, val) net_buf_simple_add_le16(&(buf)->b, val)\n\n/**\n *  @def net_buf_add_be16\n *  @brief Add 16-bit value at the end of the buffer\n *\n *  Adds 16-bit value in big endian format at the end of buffer.\n *  Increments the data length of a buffer to account for more data\n *  at the end.\n *\n *  @param buf Buffer to update.\n *  @param val 16-bit value to be added.\n */\n#define net_buf_add_be16(buf, val) net_buf_simple_add_be16(&(buf)->b, val)\n\n/**\n *  @def net_buf_add_le32\n *  @brief Add 32-bit value at the end of the buffer\n *\n *  Adds 32-bit value in little endian format at the end of buffer.\n *  Increments the data length of a buffer to account for more data\n *  at the end.\n *\n *  @param buf Buffer to update.\n *  @param val 32-bit value to be added.\n */\n#define net_buf_add_le32(buf, val) net_buf_simple_add_le32(&(buf)->b, val)\n\n/**\n *  @def net_buf_add_be32\n *  @brief Add 32-bit value at the end of the buffer\n *\n *  Adds 32-bit value in big endian format at the end of buffer.\n *  Increments the data length of a buffer to account for more data\n *  at the end.\n *\n *  @param buf Buffer to update.\n *  @param val 32-bit value to be added.\n */\n#define net_buf_add_be32(buf, val) net_buf_simple_add_be32(&(buf)->b, val)\n\n/**\n *  @def net_buf_push\n *  @brief Push data to the beginning of the buffer.\n *\n *  Modifies the data pointer and buffer length to account for more data\n *  in the beginning of the buffer.\n *\n *  @param buf Buffer to update.\n *  @param len Number of bytes to add to the beginning.\n *\n *  @return The new beginning of the buffer data.\n */\n#define net_buf_push(buf, len) net_buf_simple_push(&(buf)->b, len)\n\n/**\n *  @def net_buf_push_le16\n *  @brief Push 16-bit value to the beginning of the buffer\n *\n *  Adds 16-bit value in little endian format to the beginning of the\n *  buffer.\n *\n *  @param buf Buffer to update.\n *  @param val 16-bit value to be pushed to the buffer.\n */\n#define net_buf_push_le16(buf, val) net_buf_simple_push_le16(&(buf)->b, val)\n\n/**\n *  @def net_buf_push_be16\n *  @brief Push 16-bit value to the beginning of the buffer\n *\n *  Adds 16-bit value in little endian format to the beginning of the\n *  buffer.\n *\n *  @param buf Buffer to update.\n *  @param val 16-bit value to be pushed to the buffer.\n */\n#define net_buf_push_be16(buf, val) net_buf_simple_push_be16(&(buf)->b, val)\n\n/**\n *  @def net_buf_push_u8\n *  @brief Push 8-bit value to the beginning of the buffer\n *\n *  Adds 8-bit value the beginning of the buffer.\n *\n *  @param buf Buffer to update.\n *  @param val 8-bit value to be pushed to the buffer.\n */\n#define net_buf_push_u8(buf, val) net_buf_simple_push_u8(&(buf)->b, val)\n\n/**\n *  @def net_buf_pull\n *  @brief Remove data from the beginning of the buffer.\n *\n *  Removes data from the beginning of the buffer by modifying the data\n *  pointer and buffer length.\n *\n *  @param buf Buffer to update.\n *  @param len Number of bytes to remove.\n *\n *  @return New beginning of the buffer data.\n */\n#define net_buf_pull(buf, len) net_buf_simple_pull(&(buf)->b, len)\n\n/**\n * @def net_buf_pull_mem\n * @brief Remove data from the beginning of the buffer.\n *\n * Removes data from the beginning of the buffer by modifying the data\n * pointer and buffer length.\n *\n * @param buf Buffer to update.\n * @param len Number of bytes to remove.\n *\n * @return Pointer to the old beginning of the buffer data.\n */\n#define net_buf_pull_mem(buf, len) net_buf_simple_pull_mem(&(buf)->b, len)\n\n/**\n *  @def net_buf_pull_u8\n *  @brief Remove a 8-bit value from the beginning of the buffer\n *\n *  Same idea as with net_buf_pull(), but a helper for operating on\n *  8-bit values.\n *\n *  @param buf A valid pointer on a buffer.\n *\n *  @return The 8-bit removed value\n */\n#define net_buf_pull_u8(buf) net_buf_simple_pull_u8(&(buf)->b)\n\n/**\n *  @def net_buf_pull_le16\n *  @brief Remove and convert 16 bits from the beginning of the buffer.\n *\n *  Same idea as with net_buf_pull(), but a helper for operating on\n *  16-bit little endian data.\n *\n *  @param buf A valid pointer on a buffer.\n *\n *  @return 16-bit value converted from little endian to host endian.\n */\n#define net_buf_pull_le16(buf) net_buf_simple_pull_le16(&(buf)->b)\n\n/**\n *  @def net_buf_pull_be16\n *  @brief Remove and convert 16 bits from the beginning of the buffer.\n *\n *  Same idea as with net_buf_pull(), but a helper for operating on\n *  16-bit big endian data.\n *\n *  @param buf A valid pointer on a buffer.\n *\n *  @return 16-bit value converted from big endian to host endian.\n */\n#define net_buf_pull_be16(buf) net_buf_simple_pull_be16(&(buf)->b)\n\n/**\n *  @def net_buf_pull_le32\n *  @brief Remove and convert 32 bits from the beginning of the buffer.\n *\n *  Same idea as with net_buf_pull(), but a helper for operating on\n *  32-bit little endian data.\n *\n *  @param buf A valid pointer on a buffer.\n *\n *  @return 32-bit value converted from little endian to host endian.\n */\n#define net_buf_pull_le32(buf) net_buf_simple_pull_le32(&(buf)->b)\n\n/**\n *  @def net_buf_pull_be32\n *  @brief Remove and convert 32 bits from the beginning of the buffer.\n *\n *  Same idea as with net_buf_pull(), but a helper for operating on\n *  32-bit big endian data.\n *\n *  @param buf A valid pointer on a buffer\n *\n *  @return 32-bit value converted from big endian to host endian.\n */\n#define net_buf_pull_be32(buf) net_buf_simple_pull_be32(&(buf)->b)\n\n/**\n *  @def net_buf_tailroom\n *  @brief Check buffer tailroom.\n *\n *  Check how much free space there is at the end of the buffer.\n *\n *  @param buf A valid pointer on a buffer\n *\n *  @return Number of bytes available at the end of the buffer.\n */\n#define net_buf_tailroom(buf) net_buf_simple_tailroom(&(buf)->b)\n\n/**\n *  @def net_buf_headroom\n *  @brief Check buffer headroom.\n *\n *  Check how much free space there is in the beginning of the buffer.\n *\n *  buf A valid pointer on a buffer\n *\n *  @return Number of bytes available in the beginning of the buffer.\n */\n#define net_buf_headroom(buf) net_buf_simple_headroom(&(buf)->b)\n\n/**\n *  @def net_buf_tail\n *  @brief Get the tail pointer for a buffer.\n *\n *  Get a pointer to the end of the data in a buffer.\n *\n *  @param buf Buffer.\n *\n *  @return Tail pointer for the buffer.\n */\n#define net_buf_tail(buf) net_buf_simple_tail(&(buf)->b)\n\n/** @brief Find the last fragment in the fragment list.\n *\n * @return Pointer to last fragment in the list.\n */\nstruct net_buf *net_buf_frag_last(struct net_buf *frags);\n\n/** @brief Insert a new fragment to a chain of bufs.\n *\n *  Insert a new fragment into the buffer fragments list after the parent.\n *\n *  Note: This function takes ownership of the fragment reference so the\n *  caller is not required to unref.\n *\n *  @param parent Parent buffer/fragment.\n *  @param frag Fragment to insert.\n */\nvoid net_buf_frag_insert(struct net_buf *parent, struct net_buf *frag);\n\n/** @brief Add a new fragment to the end of a chain of bufs.\n *\n *  Append a new fragment into the buffer fragments list.\n *\n *  Note: This function takes ownership of the fragment reference so the\n *  caller is not required to unref.\n *\n *  @param head Head of the fragment chain.\n *  @param frag Fragment to add.\n *\n *  @return New head of the fragment chain. Either head (if head\n *          was non-NULL) or frag (if head was NULL).\n */\nstruct net_buf *net_buf_frag_add(struct net_buf *head, struct net_buf *frag);\n\n/** @brief Delete existing fragment from a chain of bufs.\n *\n *  @param parent Parent buffer/fragment, or NULL if there is no parent.\n *  @param frag Fragment to delete.\n *\n *  @return Pointer to the buffer following the fragment, or NULL if it\n *          had no further fragments.\n */\n#if defined(CONFIG_NET_BUF_LOG)\nstruct net_buf *net_buf_frag_del_debug(struct net_buf *parent,\n                                       struct net_buf *frag,\n                                       const char *func, int line);\n#define net_buf_frag_del(_parent, _frag) \\\n    net_buf_frag_del_debug(_parent, _frag, __func__, __LINE__)\n#else\nstruct net_buf *net_buf_frag_del(struct net_buf *parent, struct net_buf *frag);\n#endif\n\n/**\n * @brief Copy len bytes from src starting from offset to dst buffer\n *\n * This routine assumes that dst is large enough to store @a len bytes\n * starting from offset at src.\n *\n * @param dst Destination buffer\n * @param dst_len Destination buffer max length\n * @param src Source buffer that may be fragmented\n * @param offset Starting point to copy from\n * @param len Number of bytes to copy\n * @return number of bytes copied if everything is ok\n * @return -ENOMEM on error\n */\nsize_t net_buf_linearize(void *dst, size_t dst_len, struct net_buf *src,\n                         size_t offset, size_t len);\n\n/**\n * @typedef net_buf_allocator_cb\n * @brief Network buffer allocator callback.\n *\n * @details The allocator callback is called when net_buf_append_bytes\n * needs to allocate a new net_buf.\n *\n * @param timeout Affects the action taken should the net buf pool be empty.\n *        If K_NO_WAIT, then return immediately. If K_FOREVER, then\n *        wait as long as necessary. Otherwise, wait up to the specified\n *        number of milliseconds before timing out.\n * @param user_data The user data given in net_buf_append_bytes call.\n * @return pointer to allocated net_buf or NULL on error.\n */\ntypedef struct net_buf *(*net_buf_allocator_cb)(s32_t timeout, void *user_data);\n\n/**\n * @brief Append data to a list of net_buf\n *\n * @details Append data to a net_buf. If there is not enough space in the\n * net_buf then more net_buf will be added, unless there are no free net_buf\n * and timeout occurs.\n *\n * @param buf Network buffer.\n * @param len Total length of input data\n * @param value Data to be added\n * @param timeout Timeout is passed to the net_buf allocator callback.\n * @param allocate_cb When a new net_buf is required, use this callback.\n * @param user_data A user data pointer to be supplied to the allocate_cb.\n *        This pointer is can be anything from a mem_pool or a net_pkt, the\n *        logic is left up to the allocate_cb function.\n *\n * @return Length of data actually added. This may be less than input\n *         length if other timeout than K_FOREVER was used, and there\n *         were no free fragments in a pool to accommodate all data.\n */\nsize_t net_buf_append_bytes(struct net_buf *buf, size_t len,\n                            const void *value, s32_t timeout,\n                            net_buf_allocator_cb allocate_cb, void *user_data);\n\n/**\n * @brief Skip N number of bytes in a net_buf\n *\n * @details Skip N number of bytes starting from fragment's offset. If the total\n * length of data is placed in multiple fragments, this function will skip from\n * all fragments until it reaches N number of bytes.  Any fully skipped buffers\n * are removed from the net_buf list.\n *\n * @param buf Network buffer.\n * @param len Total length of data to be skipped.\n *\n * @return Pointer to the fragment or\n *         NULL and pos is 0 after successful skip,\n *         NULL and pos is 0xffff otherwise.\n */\nstatic inline struct net_buf *net_buf_skip(struct net_buf *buf, u16_t len)\n{\n    while (buf && len--) {\n        net_buf_pull_u8(buf);\n        if (!buf->len) {\n            buf = net_buf_frag_del(NULL, buf);\n        }\n    }\n\n    return buf;\n}\n\n/** @brief Calculate amount of bytes stored in fragments.\n *\n *  Calculates the total amount of data stored in the given buffer and the\n *  fragments linked to it.\n *\n *  @param buf Buffer to start off with.\n *\n *  @return Number of bytes in the buffer and its fragments.\n */\nstatic inline size_t net_buf_frags_len(struct net_buf *buf)\n{\n    size_t bytes = 0;\n\n    while (buf) {\n        bytes += buf->len;\n        buf = buf->frags;\n    }\n\n    return bytes;\n}\n\n/**\n * @}\n */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __NET_BUF_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/toolchain/common.h",
    "content": "/*\n * Copyright (c) 2010-2014 Wind River Systems, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#ifndef ZEPHYR_INCLUDE_TOOLCHAIN_COMMON_H_\n#define ZEPHYR_INCLUDE_TOOLCHAIN_COMMON_H_\n/**\n * @file\n * @brief Common toolchain abstraction\n *\n * Macros to abstract compiler capabilities (common to all toolchains).\n */\n\n/* Abstract use of extern keyword for compatibility between C and C++ */\n#ifdef __cplusplus\n#define EXTERN_C extern \"C\"\n#else\n#define EXTERN_C extern\n#endif\n\n/* Use TASK_ENTRY_CPP to tag task entry points defined in C++ files. */\n\n#ifdef __cplusplus\n#define TASK_ENTRY_CPP extern \"C\"\n#endif\n\n/*\n * Generate a reference to an external symbol.\n * The reference indicates to the linker that the symbol is required\n * by the module containing the reference and should be included\n * in the image if the module is in the image.\n *\n * The assembler directive \".set\" is used to define a local symbol.\n * No memory is allocated, and the local symbol does not appear in\n * the symbol table.\n */\n\n#ifdef _ASMLANGUAGE\n#define REQUIRES(sym) .set sym##_Requires, sym\n#else\n#define REQUIRES(sym) __asm__(\".set \" #sym \"_Requires, \" #sym \"\\n\\t\");\n#endif\n\n#ifdef _ASMLANGUAGE\n#define SECTION .section\n#endif\n\n#define CONFIG_RISCV 1\n/*\n * If the project is being built for speed (i.e. not for minimum size) then\n * align functions and branches in executable sections to improve performance.\n */\n\n#ifdef _ASMLANGUAGE\n\n#if defined(CONFIG_X86)\n\n#ifdef PERF_OPT\n#define PERFOPT_ALIGN .balign 16\n#else\n#define PERFOPT_ALIGN .balign 1\n#endif\n\n#elif defined(CONFIG_ARM)\n\n#define PERFOPT_ALIGN .balign 4\n\n#elif defined(CONFIG_ARC)\n\n#define PERFOPT_ALIGN .balign 4\n\n#elif defined(CONFIG_NIOS2) || defined(CONFIG_RISCV) || \\\n    defined(CONFIG_XTENSA)\n#define PERFOPT_ALIGN .balign 4\n\n#elif defined(CONFIG_ARCH_POSIX)\n\n#else\n\n#error Architecture unsupported\n\n#endif\n\n#define GC_SECTION(sym) SECTION.text.##sym, \"ax\"\n\n#endif /* _ASMLANGUAGE */\n\n/* force inlining a function */\n\n#if !defined(_ASMLANGUAGE)\n#ifdef CONFIG_COVERAGE\n/*\n     * The always_inline attribute forces a function to be inlined,\n     * even ignoring -fno-inline. So for code coverage, do not\n     * force inlining of these functions to keep their bodies around\n     * so their number of executions can be counted.\n     *\n     * Note that \"inline\" is kept here for kobject_hash.c and\n     * priv_stacks_hash.c. These are built without compiler flags\n     * used for coverage. ALWAYS_INLINE cannot be empty as compiler\n     * would complain about unused functions. Attaching unused\n     * attribute would result in their text sections ballon more than\n     * 10 times in size, as those functions are kept in text section.\n     * So just keep \"inline\" here.\n     */\n#define ALWAYS_INLINE inline\n#else\n#define ALWAYS_INLINE inline __attribute__((always_inline))\n#endif\n#endif\n\n#define Z_STRINGIFY(x) #x\n#define STRINGIFY(s)   Z_STRINGIFY(s)\n\n/* concatenate the values of the arguments into one */\n#define _DO_CONCAT(x, y) x##y\n#define _CONCAT(x, y)    _DO_CONCAT(x, y)\n\n/* Additionally used as a sentinel by gen_syscalls.py to identify what\n * functions are system calls\n *\n * Note POSIX unit tests don't still generate the system call stubs, so\n * until https://github.com/zephyrproject-rtos/zephyr/issues/5006 is\n * fixed via possibly #4174, we introduce this hack -- which will\n * disallow us to test system calls in POSIX unit testing (currently\n * not used).\n */\n#ifndef ZTEST_UNITTEST\n#define __syscall static inline\n#else\n#define __syscall\n#endif /* #ifndef ZTEST_UNITTEST */\n\n#ifndef BUILD_ASSERT\n/* compile-time assertion that makes the build fail */\n#define BUILD_ASSERT(EXPR)                                  \\\n    enum _CONCAT(__build_assert_enum, __COUNTER__) {        \\\n        _CONCAT(__build_assert, __COUNTER__) = 1 / !!(EXPR) \\\n    }\n#endif\n#ifndef BUILD_ASSERT_MSG\n/* build assertion with message -- common implementation swallows message. */\n#define BUILD_ASSERT_MSG(EXPR, MSG) BUILD_ASSERT(EXPR)\n#endif\n\n/*\n * This is meant to be used in conjunction with __in_section() and similar\n * where scattered structure instances are concatened together by the linker\n * and walked by the code at run time just like a contiguous array of such\n * structures.\n *\n * Assemblers and linkers may insert alignment padding by default whose\n * size is larger than the natural alignment for those structures when\n * gathering various section segments together, messing up the array walk.\n * To prevent this, we need to provide an explicit alignment not to rely\n * on the default that might just work by luck.\n *\n * Alignment statements in  linker scripts are not sufficient as\n * the assembler may add padding by itself to each segment when switching\n * between sections within the same file even if it merges many such segments\n * into a single section in the end.\n */\n#define Z_DECL_ALIGN(type) __aligned(__alignof(type)) type\n\n/*\n * Convenience helper combining __in_section() and Z_DECL_ALIGN().\n * The section name is the struct type prepended with an underscore.\n * The subsection is \"static\" and the subsubsection is the variable name.\n */\n#define Z_STRUCT_SECTION_ITERABLE(struct_type, name) \\\n    Z_DECL_ALIGN(struct struct_type)                 \\\n    name                                             \\\n        __in_section(_##struct_type, static, name) __used\n\n/*\n * Itterator for structure instances gathered by Z_STRUCT_SECTION_ITERABLE().\n * The linker must provide a _<struct_type>_list_start symbol and a\n * _<struct_type>_list_end symbol to mark the start and the end of the\n * list of struct objects to iterate over.\n */\n#define Z_STRUCT_SECTION_FOREACH(struct_type, iterator)               \\\n    extern struct struct_type _CONCAT(_##struct_type, _list_start)[]; \\\n    extern struct struct_type _CONCAT(_##struct_type, _list_end)[];   \\\n    for (struct struct_type *iterator =                               \\\n             _CONCAT(_##struct_type, _list_start);                    \\\n         ({ __ASSERT(iterator <= _CONCAT(_##struct_type, _list_end), \\\n\t\t\t \"unexpected list end location\"); \\\n\t\titerator < _CONCAT(_##struct_type, _list_end); });                                                       \\\n         iterator++)\n\n#endif /* ZEPHYR_INCLUDE_TOOLCHAIN_COMMON_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/toolchain/gcc.h",
    "content": "/*\n * Copyright (c) 2010-2014,2017 Wind River Systems, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#ifndef ZEPHYR_INCLUDE_TOOLCHAIN_GCC_H_\n#define ZEPHYR_INCLUDE_TOOLCHAIN_GCC_H_\n\n/**\n * @file\n * @brief GCC toolchain abstraction\n *\n * Macros to abstract compiler capabilities for GCC toolchain.\n */\n\n/*\n * Older versions of GCC do not define __BYTE_ORDER__, so it must be manually\n * detected and defined using arch-specific definitions.\n */\n\n#ifndef _LINKER\n\n#ifndef __ORDER_BIG_ENDIAN__\n#define __ORDER_BIG_ENDIAN__ (1)\n#endif\n\n#ifndef __ORDER_LITTLE_ENDIAN__\n#define __ORDER_LITTLE_ENDIAN__ (2)\n#endif\n\n#ifndef __BYTE_ORDER__\n#if defined(__BIG_ENDIAN__) || defined(__ARMEB__) ||  \\\n    defined(__THUMBEB__) || defined(__AARCH64EB__) || \\\n    defined(__MIPSEB__) || defined(__TC32EB__)\n\n#define __BYTE_ORDER__ __ORDER_BIG_ENDIAN__\n\n#elif defined(__LITTLE_ENDIAN__) || defined(__ARMEL__) || \\\n    defined(__THUMBEL__) || defined(__AARCH64EL__) ||     \\\n    defined(__MIPSEL__) || defined(__TC32EL__)\n\n#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__\n\n#else\n#error \"__BYTE_ORDER__ is not defined and cannot be automatically resolved\"\n#endif\n#endif\n\n/* C++11 has static_assert built in */\n#ifdef __cplusplus\n#define BUILD_ASSERT(EXPR)          static_assert(EXPR, \"\")\n#define BUILD_ASSERT_MSG(EXPR, MSG) static_assert(EXPR, MSG)\n/*\n * GCC 4.6 and higher have the C11 _Static_assert built in, and its\n * output is easier to understand than the common BUILD_ASSERT macros.\n */\n#elif (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) || \\\n    (__STDC_VERSION__) >= 201100\n#define BUILD_ASSERT(EXPR)          _Static_assert(EXPR, \"\")\n#define BUILD_ASSERT_MSG(EXPR, MSG) _Static_assert(EXPR, MSG)\n#endif\n\n#include <toolchain/common.h>\n#include <stdbool.h>\n\n#define ALIAS_OF(of) __attribute__((alias(#of)))\n\n#define FUNC_ALIAS(real_func, new_alias, return_type) \\\n    return_type new_alias() ALIAS_OF(real_func)\n\n#if defined(CONFIG_ARCH_POSIX)\n#include <arch/posix/posix_trace.h>\n\n/*let's not segfault if this were to happen for some reason*/\n#define CODE_UNREACHABLE                                                    \\\n    {                                                                       \\\n        posix_print_error_and_exit(\"CODE_UNREACHABLE reached from %s:%d\\n\", \\\n                                   __FILE__, __LINE__);                     \\\n        __builtin_unreachable();                                            \\\n    }\n#else\n#define CODE_UNREACHABLE __builtin_unreachable()\n#endif\n#define FUNC_NORETURN __attribute__((__noreturn__))\n\n/* The GNU assembler for Cortex-M3 uses # for immediate values, not\n * comments, so the @nobits# trick does not work.\n */\n#if defined(CONFIG_ARM)\n#define _NODATA_SECTION(segment) __attribute__((section(#segment)))\n#else\n#define _NODATA_SECTION(segment) \\\n    __attribute__((section(#segment \",\\\"wa\\\",@nobits#\")))\n#endif\n\n/* Unaligned access */\n#define UNALIGNED_GET(p)                     \\\n    __extension__({                          \\\n        struct __attribute__((__packed__)) { \\\n            __typeof__(*(p)) __v;            \\\n        } *__p = (__typeof__(__p))(p);       \\\n        __p->__v;                            \\\n    })\n\n#if __GNUC__ >= 7 && defined(CONFIG_ARM)\n\n/* Version of UNALIGNED_PUT() which issues a compiler_barrier() after\n * the store. It is required to workaround an apparent optimization\n * bug in GCC for ARM Cortex-M3 and higher targets, when multiple\n * byte, half-word and word stores (strb, strh, str instructions),\n * which support unaligned access, can be coalesced into store double\n * (strd) instruction, which doesn't support unaligned access (the\n * compilers in question do this optimization ignoring __packed__\n * attribute).\n */\n#define UNALIGNED_PUT(v, p)                  \\\n    do {                                     \\\n        struct __attribute__((__packed__)) { \\\n            __typeof__(*p) __v;              \\\n        } *__p = (__typeof__(__p))(p);       \\\n        __p->__v = (v);                      \\\n        compiler_barrier();                  \\\n    } while (false)\n\n#else\n\n#define UNALIGNED_PUT(v, p)                  \\\n    do {                                     \\\n        struct __attribute__((__packed__)) { \\\n            __typeof__(*p) __v;              \\\n        } *__p = (__typeof__(__p))(p);       \\\n        __p->__v = (v);                      \\\n    } while (false)\n\n#endif\n\n/* Double indirection to ensure section names are expanded before\n * stringification\n */\n#define __GENERIC_SECTION(segment) __attribute__((section(STRINGIFY(segment))))\n#define Z_GENERIC_SECTION(segment) __GENERIC_SECTION(segment)\n\n#define ___in_section(a, b, c) \\\n    __attribute__((section(\".\" Z_STRINGIFY(a) \".\" Z_STRINGIFY(b) \".\" Z_STRINGIFY(c))))\n#define __in_section(a, b, c) ___in_section(a, b, c)\n\n#define __in_section_unique(seg) ___in_section(seg, __FILE__, __COUNTER__)\n\n/* When using XIP, using '__ramfunc' places a function into RAM instead\n * of FLASH. Make sure '__ramfunc' is defined only when\n * CONFIG_ARCH_HAS_RAMFUNC_SUPPORT is defined, so that the compiler can\n * report an error if '__ramfunc' is used but the architecture does not\n * support it.\n */\n#if !defined(CONFIG_XIP)\n#define __ramfunc\n#elif defined(CONFIG_ARCH_HAS_RAMFUNC_SUPPORT)\n#define __ramfunc __attribute__((noinline)) \\\n__attribute__((long_call, section(\".ramfunc\")))\n#endif /* !CONFIG_XIP */\n\n#ifndef __packed\n#define __packed __attribute__((__packed__))\n#endif\n#ifndef __aligned\n#define __aligned(x) __attribute__((__aligned__(x)))\n#endif\n#define __may_alias __attribute__((__may_alias__))\n#ifndef __printf_like\n#define __printf_like(f, a) __attribute__((format(printf, f, a)))\n#endif\n#define __used __attribute__((__used__))\n#ifndef __deprecated\n#define __deprecated __attribute__((deprecated))\n#endif\n#define ARG_UNUSED(x) (void)(x)\n\n#ifndef likely\n#define likely(x) __builtin_expect((bool)!!(x), true)\n#endif\n#ifndef unlikely\n#define unlikely(x) __builtin_expect((bool)!!(x), false)\n#endif\n\n#define popcount(x) __builtin_popcount(x)\n\n#ifndef __weak\n#define __weak __attribute__((__weak__))\n#endif\n#define __unused __attribute__((__unused__))\n\n/* Builtins with availability that depend on the compiler version. */\n#if __GNUC__ >= 5\n#define HAS_BUILTIN___builtin_add_overflow 1\n#define HAS_BUILTIN___builtin_sub_overflow 1\n#define HAS_BUILTIN___builtin_mul_overflow 1\n#define HAS_BUILTIN___builtin_div_overflow 1\n#endif\n#if __GNUC__ >= 4\n#define HAS_BUILTIN___builtin_clz   1\n#define HAS_BUILTIN___builtin_clzl  1\n#define HAS_BUILTIN___builtin_clzll 1\n#define HAS_BUILTIN___builtin_ctz   1\n#define HAS_BUILTIN___builtin_ctzl  1\n#define HAS_BUILTIN___builtin_ctzll 1\n#endif\n\n/* Be *very* careful with this, you cannot filter out with -wno-deprecated,\n * which has implications for -Werror\n */\n#define __DEPRECATED_MACRO _Pragma(\"GCC warning \\\"Macro is deprecated\\\"\")\n\n/* These macros allow having ARM asm functions callable from thumb */\n\n#if defined(_ASMLANGUAGE)\n\n#ifdef CONFIG_ARM\n\n#if defined(CONFIG_ISA_THUMB2)\n\n#define FUNC_CODE() .thumb;\n#define FUNC_INSTR(a)\n\n#elif defined(CONFIG_ISA_ARM)\n\n#define FUNC_CODE() .code 32\n#define FUNC_INSTR(a)\n\n#else\n\n#error unknown instruction set\n\n#endif /* ISA */\n\n#else\n\n#define FUNC_CODE()\n#define FUNC_INSTR(a)\n\n#endif /* !CONFIG_ARM */\n\n#endif /* _ASMLANGUAGE */\n\n/*\n * These macros are used to declare assembly language symbols that need\n * to be typed properly(func or data) to be visible to the OMF tool.\n * So that the build tool could mark them as an entry point to be linked\n * correctly.  This is an elfism. Use #if 0 for a.out.\n */\n\n#if defined(_ASMLANGUAGE)\n\n#if defined(CONFIG_ARM) || defined(CONFIG_NIOS2) || defined(CONFIG_RISCV) || defined(CONFIG_XTENSA)\n#define GTEXT(sym) \\\n    .global sym;   \\\n    .type sym, % function\n#define GDATA(sym) \\\n    .global sym;   \\\n    .type sym, % object\n#define WTEXT(sym) \\\n    .weak sym;     \\\n    .type sym, % function\n#define WDATA(sym) \\\n    .weak sym;     \\\n    .type sym, % object\n#elif defined(CONFIG_ARC)\n/*\n * Need to use assembly macros because ';' is interpreted as the start of\n * a single line comment in the ARC assembler.\n */\n\n.macro glbl_text symbol\n    .globl \\symbol\n    .type \\symbol,\n    % function\n            .endm\n\n            .macro glbl_data symbol\n            .globl \\symbol\n            .type \\symbol,\n    % object\n            .endm\n\n            .macro weak_data symbol\n            .weak \\symbol\n            .type \\symbol,\n    % object\n            .endm\n\n#define GTEXT(sym) glbl_text sym\n#define GDATA(sym) glbl_data sym\n#define WDATA(sym) weak_data sym\n\n#else /* !CONFIG_ARM && !CONFIG_ARC */\n#define GTEXT(sym) \\\n    .globl sym;    \\\n    .type sym, @function\n#define GDATA(sym) \\\n    .globl sym;    \\\n    .type sym, @object\n#endif\n\n/*\n * These macros specify the section in which a given function or variable\n * resides.\n *\n * - SECTION_FUNC\tallows only one function to reside in a sub-section\n * - SECTION_SUBSEC_FUNC allows multiple functions to reside in a sub-section\n *   This ensures that garbage collection only discards the section\n *   if all functions in the sub-section are not referenced.\n */\n\n#if defined(CONFIG_ARC)\n/*\n * Need to use assembly macros because ';' is interpreted as the start of\n * a single line comment in the ARC assembler.\n *\n * Also, '\\()' is needed in the .section directive of these macros for\n * correct substitution of the 'section' variable.\n */\n\n.macro section_var section, symbol.section.\\section\\().\\symbol\n\t\\symbol :.endm\n\n               .macro section_func section,\n    symbol\n        .section.\\section\\()\n        .\\symbol,\n    \"ax\" FUNC_CODE()\n        PERFOPT_ALIGN\n\t\\symbol : FUNC_INSTR(\\symbol)\n                .endm\n\n                .macro section_subsec_func section,\n    subsection, symbol.section.\\section\\().\\subsection, \"ax\" PERFOPT_ALIGN\n\t\\symbol :.endm\n\n#define SECTION_VAR(sect, sym)  section_var sect, sym\n#define SECTION_FUNC(sect, sym) section_func sect, sym\n#define SECTION_SUBSEC_FUNC(sect, subsec, sym) \\\n    section_subsec_func sect, subsec, sym\n#else /* !CONFIG_ARC */\n\n#define SECTION_VAR(sect, sym) \\\n    .section.sect.##sym;       \\\n    sym:\n#define SECTION_FUNC(sect, sym) \\\n    .section.sect.sym, \"ax\";    \\\n    FUNC_CODE()                 \\\n    PERFOPT_ALIGN;              \\\n    sym:                        \\\n    FUNC_INSTR(sym)\n#define SECTION_SUBSEC_FUNC(sect, subsec, sym) \\\n    .section.sect.subsec, \"ax\";                \\\n    PERFOPT_ALIGN;                             \\\n    sym:\n\n#endif /* CONFIG_ARC */\n\n#endif /* _ASMLANGUAGE */\n\n#if defined(CONFIG_ARM) && defined(_ASMLANGUAGE)\n#if defined(CONFIG_ISA_THUMB2)\n/* '.syntax unified' is a gcc-ism used in thumb-2 asm files */\n#define _ASM_FILE_PROLOGUE \\\n    .text;                 \\\n    .syntax unified;       \\\n    .thumb\n#else\n#define _ASM_FILE_PROLOGUE \\\n    .text;                 \\\n    .code 32\n#endif\n#endif\n\n/*\n * These macros generate absolute symbols for GCC\n */\n\n/* create an extern reference to the absolute symbol */\n\n#define GEN_OFFSET_EXTERN(name) extern const char name[]\n\n#define GEN_ABS_SYM_BEGIN(name) \\\n    EXTERN_C void name(void);   \\\n    void name(void)             \\\n    {\n#define GEN_ABS_SYM_END }\n\n#if defined(CONFIG_ARM)\n\n/*\n * GNU/ARM backend does not have a proper operand modifier which does not\n * produces prefix # followed by value, such as %0 for PowerPC, Intel, and\n * MIPS. The workaround performed here is using %B0 which converts\n * the value to ~(value). Thus \"n\"(~(value)) is set in operand constraint\n * to output (value) in the ARM specific GEN_OFFSET macro.\n */\n\n#define GEN_ABSOLUTE_SYM(name, value)           \\\n    __asm__(\".globl\\t\" #name \"\\n\\t.equ\\t\" #name \\\n            \",%B0\"                              \\\n            \"\\n\\t.type\\t\" #name \",%%object\"     \\\n            :                                   \\\n            : \"n\"(~(value)))\n\n#elif defined(CONFIG_X86) || defined(CONFIG_ARC)\n\n#define GEN_ABSOLUTE_SYM(name, value)           \\\n    __asm__(\".globl\\t\" #name \"\\n\\t.equ\\t\" #name \\\n            \",%c0\"                              \\\n            \"\\n\\t.type\\t\" #name \",@object\"      \\\n            :                                   \\\n            : \"n\"(value))\n\n#elif defined(CONFIG_NIOS2) || defined(CONFIG_RISCV) || defined(CONFIG_XTENSA)\n\n/* No special prefixes necessary for constants in this arch AFAICT */\n#define GEN_ABSOLUTE_SYM(name, value)           \\\n    __asm__(\".globl\\t\" #name \"\\n\\t.equ\\t\" #name \\\n            \",%0\"                               \\\n            \"\\n\\t.type\\t\" #name \",%%object\"     \\\n            :                                   \\\n            : \"n\"(value))\n\n#elif defined(CONFIG_ARCH_POSIX)\n#define GEN_ABSOLUTE_SYM(name, value)           \\\n    __asm__(\".globl\\t\" #name \"\\n\\t.equ\\t\" #name \\\n            \",%c0\"                              \\\n            \"\\n\\t.type\\t\" #name \",@object\"      \\\n            :                                   \\\n            : \"n\"(value))\n#else\n#error processor architecture not supported\n#endif\n\n#define compiler_barrier()                    \\\n    do {                                      \\\n        __asm__ __volatile__(\"\" ::            \\\n                                 : \"memory\"); \\\n    } while (false)\n\n/** @brief Return larger value of two provided expressions.\n *\n * Macro ensures that expressions are evaluated only once.\n *\n * @note Macro has limited usage compared to the standard macro as it cannot be\n *\t used:\n *\t - to generate constant integer, e.g. __aligned(Z_MAX(4,5))\n *\t - static variable, e.g. array like static u8_t array[Z_MAX(...)];\n */\n#define Z_MAX(a, b) ({                             \\\n    /* random suffix to avoid naming conflict */   \\\n    __typeof__(a) _value_a_ = (a);                 \\\n    __typeof__(b) _value_b_ = (b);                 \\\n    _value_a_ > _value_b_ ? _value_a_ : _value_b_; \\\n})\n\n/** @brief Return smaller value of two provided expressions.\n *\n * Macro ensures that expressions are evaluated only once. See @ref Z_MAX for\n * macro limitations.\n */\n#define Z_MIN(a, b) ({                             \\\n    /* random suffix to avoid naming conflict */   \\\n    __typeof__(a) _value_a_ = (a);                 \\\n    __typeof__(b) _value_b_ = (b);                 \\\n    _value_a_ < _value_b_ ? _value_a_ : _value_b_; \\\n})\n\n#endif /* !_LINKER */\n#endif /* ZEPHYR_INCLUDE_TOOLCHAIN_GCC_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/toolchain/xcc.h",
    "content": "/*\n * Copyright (c) 2017 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#ifndef ZEPHYR_INCLUDE_TOOLCHAIN_XCC_H_\n#define ZEPHYR_INCLUDE_TOOLCHAIN_XCC_H_\n\n/* toolchain/gcc.h errors out if __BYTE_ORDER__ cannot be determined\n * there. However, __BYTE_ORDER__ is actually being defined later in\n * this file. So define __BYTE_ORDER__ to skip the check in gcc.h\n * and undefine after including gcc.h.\n */\n#define __BYTE_ORDER__\n#include <toolchain/gcc.h>\n#undef __BYTE_ORDER__\n\n#include <stdbool.h>\n\n/* XCC doesn't support __COUNTER__ but this should be good enough */\n#define __COUNTER__ __LINE__\n\n#undef __in_section_unique\n#define __in_section_unique(seg) \\\n    __attribute__((section(\".\" STRINGIFY(seg) \".\" STRINGIFY(__COUNTER__))))\n\n#ifndef __GCC_LINKER_CMD__\n#include <xtensa/config/core.h>\n\n/*\n * XCC does not define the following macros with the expected names, but the\n * HAL defines similar ones. Thus we include it and define the missing macros\n * ourselves.\n */\n#if XCHAL_MEMORY_ORDER == XTHAL_BIGENDIAN\n#define __BYTE_ORDER__ __ORDER_BIG_ENDIAN__\n#elif XCHAL_MEMORY_ORDER == XTHAL_LITTLEENDIAN\n#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__\n#else\n#error \"Cannot determine __BYTE_ORDER__\"\n#endif\n\n#endif /* __GCC_LINKER_CMD__ */\n\n#define __builtin_unreachable()              \\\n    do {                                     \\\n        __ASSERT(false, \"Unreachable code\"); \\\n    } while (true)\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/toolchain.h",
    "content": "/*\n * Copyright (c) 2010-2014, Wind River Systems, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file\n * @brief Macros to abstract toolchain specific capabilities\n *\n * This file contains various macros to abstract compiler capabilities that\n * utilize toolchain specific attributes and/or pragmas.\n */\n\n#ifndef _TOOLCHAIN_H\n#define _TOOLCHAIN_H\n\n#if defined(__XCC__)\n#include <toolchain/xcc.h>\n#elif defined(__GNUC__) || (defined(_LINKER) && defined(__GCC_LINKER_CMD__))\n#include <toolchain/gcc.h>\n#else\n#include <toolchain/other.h>\n#endif\n\n#endif /* _TOOLCHAIN_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/work_q.h",
    "content": "#ifndef WORK_Q_H\n#define WORK_Q_H\n#include \"atomic.h\"\n#include \"zephyr.h\"\n\n#if defined(BFLB_BLE)\nstruct k_work_q {\n    struct k_fifo fifo;\n};\n\ntypedef struct {\n    bl_timer_t timer;\n    struct k_delayed_work *delay_work;\n} timer_rec_d;\n\nint k_work_q_start();\n\nenum {\n    K_WORK_STATE_PENDING,\n    K_WORK_STATE_PERIODIC,\n};\nstruct k_work;\n/* work define*/\ntypedef void (*k_work_handler_t)(struct k_work *work);\nstruct k_work {\n    void *_reserved;\n    k_work_handler_t handler;\n    atomic_t flags[1];\n};\n\n#define _K_WORK_INITIALIZER(work_handler) \\\n    {                                     \\\n        ._reserved = NULL,                \\\n        .handler = work_handler,          \\\n        .flags = { 0 }                    \\\n    }\n\n#define K_WORK_INITIALIZER __DEPRECATED_MACRO _K_WORK_INITIALIZER\n\nint k_work_init(struct k_work *work, k_work_handler_t handler);\nvoid k_work_submit(struct k_work *work);\n\n/*delay work define*/\nstruct k_delayed_work {\n    struct k_work work;\n    struct k_work_q *work_q;\n    k_timer_t timer;\n};\n\nvoid k_delayed_work_init(struct k_delayed_work *work, k_work_handler_t handler);\nint k_delayed_work_submit(struct k_delayed_work *work, uint32_t delay);\n/* Added by bouffalolab */\nint k_delayed_work_submit_periodic(struct k_delayed_work *work, s32_t period);\nint k_delayed_work_cancel(struct k_delayed_work *work);\ns32_t k_delayed_work_remaining_get(struct k_delayed_work *work);\nvoid k_delayed_work_del_timer(struct k_delayed_work *work);\n/* Added by bouffalolab */\nint k_delayed_work_free(struct k_delayed_work *work);\n#endif\n#endif /* WORK_Q_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/include/zephyr/types.h",
    "content": "/*\n * Copyright (c) 2017 Linaro Limited\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#ifndef __Z_TYPES_H__\n#define __Z_TYPES_H__\n\n#include <stdint.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef signed char s8_t;\ntypedef signed short s16_t;\ntypedef int32_t s32_t;\ntypedef signed long long s64_t;\n\ntypedef unsigned char u8_t;\ntypedef unsigned short u16_t;\ntypedef uint32_t u32_t;\ntypedef unsigned long long u64_t;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __Z_TYPES_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/log.c",
    "content": "/* log.c - logging helpers */\n\n/*\n * Copyright (c) 2017 Nordic Semiconductor ASA\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/* Helper for printk parameters to convert from binary to hex.\n * We declare multiple buffers so the helper can be used multiple times\n * in a single printk call.\n */\n\n#include <bluetooth.h>\n#include <hci_host.h>\n#include <misc/util.h>\n#include <stddef.h>\n#include <zephyr.h>\n#include <zephyr/types.h>\n\nconst char *bt_hex_real(const void *buf, size_t len) {\n  static const char hex[] = \"0123456789abcdef\";\n#if defined(CONFIG_BT_DEBUG_MONITOR)\n  static char str[512];\n#else\n  static char str[128];\n#endif\n  const u8_t *b = buf;\n  int         i;\n\n  len = MIN(len, (sizeof(str) - 1) / 2);\n\n  for (i = 0; i < len; i++) {\n    str[i * 2]     = hex[b[i] >> 4];\n    str[i * 2 + 1] = hex[b[i] & 0xf];\n  }\n\n  str[i * 2] = '\\0';\n\n  return str;\n}\n\nconst char *bt_addr_str_real(const bt_addr_t *addr) {\n  static char str[BT_ADDR_STR_LEN];\n\n  bt_addr_to_str(addr, str, sizeof(str));\n\n  return str;\n}\n\nconst char *bt_addr_le_str_real(const bt_addr_le_t *addr) {\n  static char str[BT_ADDR_LE_STR_LEN];\n\n  bt_addr_le_to_str(addr, str, sizeof(str));\n\n  return str;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/log.h",
    "content": "/** @file\n *  @brief Bluetooth subsystem logging helpers.\n */\n\n/*\n * Copyright (c) 2017 Nordic Semiconductor ASA\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef __BT_LOG_H\n#define __BT_LOG_H\n\n#if defined(BL_MCU_SDK)\n#include \"bflb_platform.h\"\n#endif\n\n#include <zephyr.h>\n\n#include <bluetooth.h>\n#include <hci_host.h>\n\n#include \"FreeRTOS.h\"\n#include \"FreeRTOSConfig.h\"\n#include \"task.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if !defined(BT_DBG_ENABLED)\n#define BT_DBG_ENABLED 1\n#endif\n\n#if BT_DBG_ENABLED\n#define LOG_LEVEL LOG_LEVEL_DBG\n#else\n#define LOG_LEVEL CONFIG_BT_LOG_LEVEL\n#endif\n\n// LOG_MODULE_REGISTER(LOG_MODULE_NAME, LOG_LEVEL);\n\n#if defined(BFLB_BLE)\n\n#if defined(BL_MCU_SDK)\n#define BT_DBG(fmt, ...)  // bflb_platform_printf(fmt\", %s\\r\\n\", ##__VA_ARGS__, __func__)\n#define BT_ERR(fmt, ...)  bflb_platform_printf(fmt \", %s\\r\\n\", ##__VA_ARGS__, __func__)\n#define BT_WARN(fmt, ...) bflb_platform_printf(fmt \", %s\\r\\n\", ##__VA_ARGS__, __func__)\n#define BT_INFO(fmt, ...) // bflb_platform_printf(fmt\", %s\\r\\n\", ##__VA_ARGS__, __func__)\n#else\n#define BT_DBG(fmt, ...)  // printf(fmt\", %s\\r\\n\", ##__VA_ARGS__, __func__)\n#define BT_ERR(fmt, ...)  printf(fmt \", %s\\r\\n\", ##__VA_ARGS__, __func__)\n#define BT_WARN(fmt, ...) printf(fmt \", %s\\r\\n\", ##__VA_ARGS__, __func__)\n#define BT_INFO(fmt, ...) // printf(fmt\", %s\\r\\n\", ##__VA_ARGS__, __func__)\n#endif\n\n#if defined(CONFIG_BT_STACK_PTS) || defined(CONFIG_BT_MESH_PTS)\n#if defined(BL_MCU_SDK)\n#define BT_PTS(fmt, ...) bflb_platform_printf(fmt \"\\r\\n\", ##__VA_ARGS__)\n#else\n#define BT_PTS(fmt, ...) printf(fmt \"\\r\\n\", ##__VA_ARGS__)\n#endif\n#endif\n\n#else /*BFLB_BLE*/\n\n#define BT_DBG(fmt, ...)  LOG_DBG(fmt, ##__VA_ARGS__)\n#define BT_ERR(fmt, ...)  LOG_ERR(fmt, ##__VA_ARGS__)\n#define BT_WARN(fmt, ...) LOG_WRN(fmt, ##__VA_ARGS__)\n#define BT_INFO(fmt, ...) LOG_INF(fmt, ##__VA_ARGS__)\n\n#if defined(CONFIG_BT_ASSERT_VERBOSE)\n#define BT_ASSERT_PRINT(fmt, ...) printk(fmt, ##__VA_ARGS__)\n#else\n#define BT_ASSERT_PRINT(fmt, ...)\n#endif /* CONFIG_BT_ASSERT_VERBOSE */\n\n#if defined(CONFIG_BT_ASSERT_PANIC)\n#define BT_ASSERT_DIE k_panic\n#else\n#define BT_ASSERT_DIE k_oops\n#endif /* CONFIG_BT_ASSERT_PANIC */\n\n#endif /*BFLB_BLE*/\n\n#if defined(CONFIG_BT_ASSERT)\n#if defined(BFLB_BLE)\nextern void user_vAssertCalled(void);\n#define BT_ASSERT(cond)                                                                                                                                                                                \\\n  if ((cond) == 0)                                                                                                                                                                                     \\\n  user_vAssertCalled()\n#else\n#define BT_ASSERT(cond)                                                                                                                                                                                \\\n  if (!(cond)) {                                                                                                                                                                                       \\\n    BT_ASSERT_PRINT(\"assert: '\" #cond \"' failed\\n\");                                                                                                                                                   \\\n    BT_ASSERT_DIE();                                                                                                                                                                                   \\\n  }\n#endif /*BFLB_BLE*/\n#else\n#if defined(BFLB_BLE)\n#define BT_ASSERT(cond)\n#else\n#define BT_ASSERT(cond) __ASSERT_NO_MSG(cond)\n#endif /*BFLB_BLE*/\n#endif /* CONFIG_BT_ASSERT*/\n\n#define BT_HEXDUMP_DBG(_data, _length, _str) LOG_HEXDUMP_DBG((const u8_t *)_data, _length, _str)\n\n#if defined(BFLB_BLE)\nstatic inline char *log_strdup(const char *str) { return (char *)str; }\n#endif\n\n/* NOTE: These helper functions always encodes into the same buffer storage.\n * It is the responsibility of the user of this function to copy the information\n * in this string if needed.\n */\nconst char *bt_hex_real(const void *buf, size_t len);\nconst char *bt_addr_str_real(const bt_addr_t *addr);\nconst char *bt_addr_le_str_real(const bt_addr_le_t *addr);\n\n/* NOTE: log_strdup does not guarantee a duplication of the string.\n * It is therefore still the responsibility of the user to handle the\n * restrictions in the underlying function call.\n */\n#define bt_hex(buf, len)     log_strdup(bt_hex_real(buf, len))\n#define bt_addr_str(addr)    log_strdup(bt_addr_str_real(addr))\n#define bt_addr_le_str(addr) log_strdup(bt_addr_le_str_real(addr))\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __BT_LOG_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/poll.c",
    "content": "/*\n * Copyright (c) 2017 Wind River Systems, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file\n *\n * @brief Kernel asynchronous event polling interface.\n *\n * This polling mechanism allows waiting on multiple events concurrently,\n * either events triggered directly, or from kernel objects or other kernel\n * constructs.\n */\n\n#include <stdio.h>\n\n#include <misc/__assert.h>\n#include <misc/dlist.h>\n#include <misc/slist.h>\n#include <zephyr.h>\n#include <zephyr/types.h>\n\nstruct k_sem g_poll_sem;\n\nvoid k_poll_event_init(struct k_poll_event *event, u32_t type, int mode, void *obj) {\n  __ASSERT(mode == K_POLL_MODE_NOTIFY_ONLY, \"only NOTIFY_ONLY mode is supported\\n\");\n  __ASSERT(type < (1 << _POLL_NUM_TYPES), \"invalid type\\n\");\n  __ASSERT(obj, \"must provide an object\\n\");\n\n  event->poller = NULL;\n  /* event->tag is left uninitialized: the user will set it if needed */\n  event->type   = type;\n  event->state  = K_POLL_STATE_NOT_READY;\n  event->mode   = mode;\n  event->unused = 0;\n  event->obj    = obj;\n}\n\n/* must be called with interrupts locked */\nstatic inline int is_condition_met(struct k_poll_event *event, u32_t *state) {\n  switch (event->type) {\n  case K_POLL_TYPE_SEM_AVAILABLE:\n    if (k_sem_count_get(event->sem) > 0) {\n      *state = K_POLL_STATE_SEM_AVAILABLE;\n      return 1;\n    }\n    break;\n  case K_POLL_TYPE_DATA_AVAILABLE:\n    if (!k_queue_is_empty(event->queue)) {\n      *state = K_POLL_STATE_FIFO_DATA_AVAILABLE;\n      return 1;\n    }\n    break;\n  case K_POLL_TYPE_SIGNAL:\n    if (event->signal->signaled) {\n      *state = K_POLL_STATE_SIGNALED;\n      return 1;\n    }\n    break;\n  case K_POLL_TYPE_IGNORE:\n    return 0;\n  default:\n    __ASSERT(0, \"invalid event type (0x%x)\\n\", event->type);\n    break;\n  }\n\n  return 0;\n}\n\nstatic inline void add_event(sys_dlist_t *events, struct k_poll_event *event, struct _poller *poller) { sys_dlist_append(events, &event->_node); }\n\n/* must be called with interrupts locked */\nstatic inline int register_event(struct k_poll_event *event, struct _poller *poller) {\n  switch (event->type) {\n  case K_POLL_TYPE_SEM_AVAILABLE:\n    __ASSERT(event->sem, \"invalid semaphore\\n\");\n    add_event(&event->sem->poll_events, event, poller);\n    break;\n  case K_POLL_TYPE_DATA_AVAILABLE:\n    __ASSERT(event->queue, \"invalid queue\\n\");\n    add_event(&event->queue->poll_events, event, poller);\n    break;\n  case K_POLL_TYPE_SIGNAL:\n    __ASSERT(event->signal, \"invalid poll signal\\n\");\n    add_event(&event->signal->poll_events, event, poller);\n    break;\n  case K_POLL_TYPE_IGNORE:\n    /* nothing to do */\n    break;\n  default:\n    __ASSERT(0, \"invalid event type\\n\");\n    break;\n  }\n\n  event->poller = poller;\n\n  return 0;\n}\n\n/* must be called with interrupts locked */\nstatic inline void clear_event_registration(struct k_poll_event *event) {\n  event->poller = NULL;\n\n  switch (event->type) {\n  case K_POLL_TYPE_SEM_AVAILABLE:\n    __ASSERT(event->sem, \"invalid semaphore\\n\");\n    sys_dlist_remove(&event->_node);\n    break;\n  case K_POLL_TYPE_DATA_AVAILABLE:\n    __ASSERT(event->queue, \"invalid queue\\n\");\n    sys_dlist_remove(&event->_node);\n    break;\n  case K_POLL_TYPE_SIGNAL:\n    __ASSERT(event->signal, \"invalid poll signal\\n\");\n    sys_dlist_remove(&event->_node);\n    break;\n  case K_POLL_TYPE_IGNORE:\n    /* nothing to do */\n    break;\n  default:\n    __ASSERT(0, \"invalid event type\\n\");\n    break;\n  }\n}\n\n/* must be called with interrupts locked */\nstatic inline void clear_event_registrations(struct k_poll_event *events, int last_registered, unsigned int key) {\n  for (; last_registered >= 0; last_registered--) {\n    clear_event_registration(&events[last_registered]);\n    irq_unlock(key);\n    key = irq_lock();\n  }\n}\n\nstatic inline void set_event_ready(struct k_poll_event *event, u32_t state) {\n  event->poller = NULL;\n  event->state |= state;\n}\n\n#if (BFLB_BT_CO_THREAD)\nstatic bool polling_events(struct k_poll_event *events, int num_events, int total_evt_array_cnt, s32_t timeout, int *last_registered)\n#else\nstatic bool polling_events(struct k_poll_event *events, int num_events, s32_t timeout, int *last_registered)\n#endif\n{\n  int          rc;\n  bool         polling = true;\n  unsigned int key;\n\n#if (BFLB_BT_CO_THREAD)\n  for (int ii = 0; ii < total_evt_array_cnt; ii++) {\n    if (ii >= num_events && ii != total_evt_array_cnt - 1)\n      continue;\n#else\n  for (int ii = 0; ii < num_events; ii++) {\n#endif\n    u32_t state;\n    key = irq_lock();\n    if (is_condition_met(&events[ii], &state)) {\n      set_event_ready(&events[ii], state);\n      polling = false;\n    } else if (timeout != K_NO_WAIT && polling) {\n      rc = register_event(&events[ii], NULL);\n      if (rc == 0) {\n        ++(*last_registered);\n      } else {\n        __ASSERT(0, \"unexpected return code\\n\");\n      }\n    }\n    irq_unlock(key);\n  }\n  return polling;\n}\n\n#if (BFLB_BT_CO_THREAD)\nint k_poll(struct k_poll_event *events, int num_events, int total_evt_array_cnt, s32_t timeout, u8_t *to_process)\n#else\nint k_poll(struct k_poll_event *events, int num_events, s32_t timeout)\n#endif\n{\n  __ASSERT(events, \"NULL events\\n\");\n  __ASSERT(num_events > 0, \"zero events\\n\");\n\n  int          last_registered = -1;\n  unsigned int key;\n  bool         polling = true;\n\n  /* find events whose condition is already fulfilled */\n#if (BFLB_BT_CO_THREAD)\n  polling = polling_events(events, num_events, total_evt_array_cnt, timeout, &last_registered);\n#else\n  polling = polling_events(events, num_events, timeout, &last_registered);\n#endif\n\n  if (polling == false) {\n    goto exit;\n  }\n#if (BFLB_BT_CO_THREAD)\n  if (timeout != K_NO_WAIT)\n#endif\n  {\n    k_sem_take(&g_poll_sem, timeout);\n    last_registered = -1;\n#if (BFLB_BT_CO_THREAD)\n    polling = polling_events(events, num_events, total_evt_array_cnt, timeout, &last_registered);\n#else\n    polling_events(events, num_events, timeout, &last_registered);\n#endif\n  }\n\n#if (BFLB_BT_CO_THREAD)\n  if (to_process)\n    *to_process = polling ? 0 : 1;\n#endif\nexit:\n  key = irq_lock();\n  clear_event_registrations(events, last_registered, key);\n  irq_unlock(key);\n  return 0;\n}\n\n/* must be called with interrupts locked */\nstatic int _signal_poll_event(struct k_poll_event *event, u32_t state, int *must_reschedule) {\n  *must_reschedule = 0;\n  set_event_ready(event, state);\n  return 0;\n}\n\nint k_poll_signal_raise(struct k_poll_signal *signal, int result) {\n  unsigned int         key = irq_lock();\n  struct k_poll_event *poll_event;\n  int                  must_reschedule;\n\n  signal->result   = result;\n  signal->signaled = 1;\n\n  poll_event = (struct k_poll_event *)sys_dlist_get(&signal->poll_events);\n  if (!poll_event) {\n    irq_unlock(key);\n    return 0;\n  }\n\n  int rc = _signal_poll_event(poll_event, K_POLL_STATE_SIGNALED, &must_reschedule);\n\n  k_sem_give(&g_poll_sem);\n  irq_unlock(key);\n  return rc;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/rpa.c",
    "content": "/**\n * @file rpa.c\n * Resolvable Private Address Generation and Resolution\n */\n\n/*\n * Copyright (c) 2017 Nordic Semiconductor ASA\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <atomic.h>\n#include <errno.h>\n#include <misc/byteorder.h>\n#include <misc/stack.h>\n#include <misc/util.h>\n#include <stddef.h>\n#include <string.h>\n#include <zephyr.h>\n\n#include <../include/bluetooth/crypto.h>\n#include <aes.h>\n#include <cmac_mode.h>\n#include <constants.h>\n#include <utils.h>\n\n#define BT_DBG_ENABLED  IS_ENABLED(CONFIG_BT_DEBUG_RPA)\n#define LOG_MODULE_NAME bt_rpa\n#include \"log.h\"\n\n#if defined(CONFIG_BT_CTLR_PRIVACY) || defined(CONFIG_BT_PRIVACY) || defined(CONFIG_BT_SMP)\nstatic int ah(const u8_t irk[16], const u8_t r[3], u8_t out[3]) {\n  u8_t res[16];\n  int  err;\n\n  BT_DBG(\"irk %s\", bt_hex(irk, 16));\n  BT_DBG(\"r %s\", bt_hex(r, 3));\n\n  /* r' = padding || r */\n  memcpy(res, r, 3);\n  (void)memset(res + 3, 0, 13);\n\n  err = bt_encrypt_le(irk, res, res);\n  if (err) {\n    return err;\n  }\n\n  /* The output of the random address function ah is:\n   *      ah(h, r) = e(k, r') mod 2^24\n   * The output of the security function e is then truncated to 24 bits\n   * by taking the least significant 24 bits of the output of e as the\n   * result of ah.\n   */\n  memcpy(out, res, 3);\n\n  return 0;\n}\n#endif\n\n#if defined(CONFIG_BT_SMP) || defined(CONFIG_BT_CTLR_PRIVACY)\nbool bt_rpa_irk_matches(const u8_t irk[16], const bt_addr_t *addr) {\n  u8_t hash[3];\n  int  err;\n\n  BT_DBG(\"IRK %s bdaddr %s\", bt_hex(irk, 16), bt_addr_str(addr));\n\n  err = ah(irk, addr->val + 3, hash);\n  if (err) {\n    return false;\n  }\n\n  return !memcmp(addr->val, hash, 3);\n}\n#endif\n\n#if defined(CONFIG_BT_PRIVACY) || defined(CONFIG_BT_CTLR_PRIVACY)\nint bt_rpa_create(const u8_t irk[16], bt_addr_t *rpa) {\n  int err;\n\n  err = bt_rand(rpa->val + 3, 3);\n  if (err) {\n    return err;\n  }\n\n  BT_ADDR_SET_RPA(rpa);\n\n  err = ah(irk, rpa->val + 3, rpa->val);\n  if (err) {\n    return err;\n  }\n\n  BT_DBG(\"Created RPA %s\", bt_addr_str((bt_addr_t *)rpa->val));\n\n  return 0;\n}\n#else\nint bt_rpa_create(const u8_t irk[16], bt_addr_t *rpa) { return -ENOTSUP; }\n#endif /* CONFIG_BT_PRIVACY */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/rpa.h",
    "content": "/* rpa.h - Bluetooth Resolvable Private Addresses (RPA) generation and\n * resolution\n */\n\n/*\n * Copyright (c) 2017 Nordic Semiconductor ASA\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include \"bluetooth.h\"\n#include \"hci_host.h\"\n\nbool bt_rpa_irk_matches(const u8_t irk[16], const bt_addr_t *addr);\nint  bt_rpa_create(const u8_t irk[16], bt_addr_t *rpa);\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/Kconfig",
    "content": "# Kconfig - Cryptography primitive options for TinyCrypt version 2.0\n\n#\n# Copyright (c) 2015 Intel Corporation\n#\n# SPDX-License-Identifier: Apache-2.0\n#\n\nconfig TINYCRYPT\n\tbool\n\tprompt \"TinyCrypt Support\"\n\tdefault n\n\thelp\n\tThis option enables the TinyCrypt cryptography library.\n\nconfig TINYCRYPT_CTR_PRNG\n\tbool\n\tprompt \"PRNG in counter mode\"\n\tdepends on TINYCRYPT\n\tdefault n\n\thelp\n\tThis option enables support for the pseudo-random number\n\tgenerator in counter mode.\n\nconfig TINYCRYPT_SHA256\n\tbool\n\tprompt \"SHA-256 Hash function support\"\n\tdepends on TINYCRYPT\n\tdefault n\n\thelp\n\tThis option enables support for SHA-256\n\thash function primitive.\n\nconfig TINYCRYPT_SHA256_HMAC\n\tbool\n\tprompt \"HMAC (via SHA256) message auth support\"\n\tdepends on TINYCRYPT_SHA256\n\tdefault n\n\thelp\n\tThis option enables support for HMAC using SHA-256\n\tmessage authentication code.\n\nconfig TINYCRYPT_SHA256_HMAC_PRNG\n\tbool\n\tprompt \"PRNG (via HMAC-SHA256) support\"\n\tdepends on TINYCRYPT_SHA256_HMAC\n\tdefault n\n\thelp\n\tThis option enables support for pseudo-random number\n\tgenerator.\n\nconfig TINYCRYPT_ECC_DH\n\tbool\n\tprompt \"ECC_DH anonymous key agreement protocol\"\n\tdepends on TINYCRYPT\n\tselect ENTROPY_GENERATOR\n\tdefault n\n\thelp\n\tThis option enables support for the Elliptic curve\n\tDiffie-Hellman anonymous key agreement protocol.\n\n\tEnabling ECC requires a cryptographically secure random number\n\tgenerator.\n\nconfig TINYCRYPT_ECC_DSA\n\tbool\n\tprompt \"ECC_DSA digital signature algorithm\"\n\tdepends on TINYCRYPT\n\tselect ENTROPY_GENERATOR\n\tdefault n\n\thelp\n\tThis option enables support for the Elliptic Curve Digital\n\tSignature Algorithm (ECDSA).\n\n\tEnabling ECC requires a cryptographically secure random number\n\tgenerator.\n\nconfig TINYCRYPT_AES\n\tbool\n\tprompt \"AES-128 decrypt/encrypt\"\n\tdepends on TINYCRYPT\n\tdefault n\n\thelp\n\tThis option enables support for AES-128 decrypt and encrypt.\n\nconfig TINYCRYPT_AES_CBC\n\tbool\n\tprompt \"AES-128 block cipher\"\n\tdepends on TINYCRYPT_AES\n\tdefault n\n\thelp\n\tThis option enables support for AES-128 block cipher mode.\n\nconfig TINYCRYPT_AES_CTR\n\tbool\n\tprompt \"AES-128 counter mode\"\n\tdepends on TINYCRYPT_AES\n\tdefault n\n\thelp\n\tThis option enables support for AES-128 counter mode.\n\nconfig TINYCRYPT_AES_CCM\n\tbool\n\tprompt \"AES-128 CCM mode\"\n\tdepends on TINYCRYPT_AES\n\tdefault n\n\thelp\n\tThis option enables support for AES-128 CCM mode.\n\nconfig TINYCRYPT_AES_CMAC\n\tbool\n\tprompt \"AES-128 CMAC mode\"\n\tdepends on TINYCRYPT_AES\n\tdefault n\n\thelp\n\tThis option enables support for AES-128 CMAC mode.\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/README",
    "content": "The TinyCrypt library in Zephyr is a downstream of an externally maintained\nopen source project.  The original upstream code can be found at:\n\nhttps://github.com/01org/tinycrypt\n\nAt revision c214460d7f760e2a75908cb41000afcc0bfca282, version 0.2.7\n\nAny changes to the local version should include Zephyr's TinyCrypt\nmaintainer in the review.  That can be found via the git history.\n\nThe following is the license information for this code:\n\n================================================================================\n\n                     TinyCrypt Cryptographic Library\n\n================================================================================\n\n          Copyright (c) 2017, Intel Corporation. All rights reserved.         \n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n  - Redistributions of source code must retain the above copyright notice, this \n      list of conditions and the following disclaimer.\n      \n  - Redistributions in binary form must reproduce the above copyright notice, \n      this list of conditions and the following disclaimer in the documentation \n      and/or other materials provided with the distribution.\n      \n  - Neither the name of the Intel Corporation nor the names of its contributors \n      may be used to endorse or promote products derived from this software \n      without specific prior written permission. \n\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND \nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR \nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES \n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; \nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON \nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS \nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n================================================================================\n\nCopyright (c) 2013, Kenneth MacKay\nAll rights reserved.\n\nhttps://github.com/kmackay/micro-ecc\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n * Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/include/tinycrypt/aes.h",
    "content": "/* aes.h - TinyCrypt interface to an AES-128 implementation */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @file\n * @brief -- Interface to an AES-128 implementation.\n *\n *  Overview:   AES-128 is a NIST approved block cipher specified in\n *              FIPS 197. Block ciphers are deterministic algorithms that\n *              perform a transformation specified by a symmetric key in fixed-\n *              length data sets, also called blocks.\n *\n *  Security:   AES-128 provides approximately 128 bits of security.\n *\n *  Usage:      1) call tc_aes128_set_encrypt/decrypt_key to set the key.\n *\n *              2) call tc_aes_encrypt/decrypt to process the data.\n */\n\n#ifndef __TC_AES_H__\n#define __TC_AES_H__\n\n#include <stdint.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define Nb                (4)  /* number of columns (32-bit words) comprising the state */\n#define Nk                (4)  /* number of 32-bit words comprising the key */\n#define Nr                (10) /* number of rounds */\n#define TC_AES_BLOCK_SIZE (Nb * Nk)\n#define TC_AES_KEY_SIZE   (Nb * Nk)\n\ntypedef struct tc_aes_key_sched_struct {\n    unsigned int words[Nb * (Nr + 1)];\n} * TCAesKeySched_t;\n\n/**\n *  @brief Set AES-128 encryption key\n *  Uses key k to initialize s\n *  @return  returns TC_CRYPTO_SUCCESS (1)\n *           returns TC_CRYPTO_FAIL (0) if: s == NULL or k == NULL\n *  @note       This implementation skips the additional steps required for keys\n *              larger than 128 bits, and must not be used for AES-192 or\n *              AES-256 key schedule -- see FIPS 197 for details\n *  @param      s IN/OUT -- initialized struct tc_aes_key_sched_struct\n *  @param      k IN -- points to the AES key\n */\nint tc_aes128_set_encrypt_key(TCAesKeySched_t s, const uint8_t *k);\n\n/**\n *  @brief AES-128 Encryption procedure\n *  Encrypts contents of in buffer into out buffer under key;\n *              schedule s\n *  @note Assumes s was initialized by aes_set_encrypt_key;\n *              out and in point to 16 byte buffers\n *  @return  returns TC_CRYPTO_SUCCESS (1)\n *           returns TC_CRYPTO_FAIL (0) if: out == NULL or in == NULL or s == NULL\n *  @param out IN/OUT -- buffer to receive ciphertext block\n *  @param in IN -- a plaintext block to encrypt\n *  @param s IN -- initialized AES key schedule\n */\nint tc_aes_encrypt(uint8_t *out, const uint8_t *in,\n                   const TCAesKeySched_t s);\n\n/**\n *  @brief Set the AES-128 decryption key\n *  Uses key k to initialize s\n *  @return returns TC_CRYPTO_SUCCESS (1)\n *          returns TC_CRYPTO_FAIL (0) if: s == NULL or k == NULL\n *  @note       This is the implementation of the straightforward inverse cipher\n *              using the cipher documented in FIPS-197 figure 12, not the\n *              equivalent inverse cipher presented in Figure 15\n *  @warning    This routine skips the additional steps required for keys larger\n *              than 128, and must not be used for AES-192 or AES-256 key\n *              schedule -- see FIPS 197 for details\n *  @param s  IN/OUT -- initialized struct tc_aes_key_sched_struct\n *  @param k  IN -- points to the AES key\n */\nint tc_aes128_set_decrypt_key(TCAesKeySched_t s, const uint8_t *k);\n\n/**\n *  @brief AES-128 Encryption procedure\n *  Decrypts in buffer into out buffer under key schedule s\n *  @return returns TC_CRYPTO_SUCCESS (1)\n *          returns TC_CRYPTO_FAIL (0) if: out is NULL or in is NULL or s is NULL\n *  @note   Assumes s was initialized by aes_set_encrypt_key\n *          out and in point to 16 byte buffers\n *  @param out IN/OUT -- buffer to receive ciphertext block\n *  @param in IN -- a plaintext block to encrypt\n *  @param s IN -- initialized AES key schedule\n */\nint tc_aes_decrypt(uint8_t *out, const uint8_t *in,\n                   const TCAesKeySched_t s);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __TC_AES_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/include/tinycrypt/cbc_mode.h",
    "content": "/* cbc_mode.h - TinyCrypt interface to a CBC mode implementation */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @file\n * @brief Interface to a CBC mode implementation.\n *\n *  Overview: CBC (for \"cipher block chaining\") mode is a NIST approved mode of\n *            operation defined in SP 800-38a. It can be used with any block\n *            cipher to provide confidentiality of strings whose lengths are\n *            multiples of the block_size of the underlying block cipher.\n *            TinyCrypt hard codes AES as the block cipher.\n *\n *  Security: CBC mode provides data confidentiality given that the maximum\n *            number q of blocks encrypted under a single key satisfies\n *            q < 2^63, which is not a practical constraint (it is considered a\n *            good practice to replace the encryption when q == 2^56). CBC mode\n *            provides NO data integrity.\n *\n *            CBC mode assumes that the IV value input into the\n *            tc_cbc_mode_encrypt is randomly generated. The TinyCrypt library\n *            provides HMAC-PRNG module, which generates suitable IVs. Other\n *            methods for generating IVs are acceptable, provided that the\n *            values of the IVs generated appear random to any adversary,\n *            including someone with complete knowledge of the system design.\n *\n *            The randomness property on which CBC mode's security depends is\n *            the unpredictability of the IV. Since it is unpredictable, this\n *            means in practice that CBC mode requires that the IV is stored\n *            somehow with the ciphertext in order to recover the plaintext.\n *\n *            TinyCrypt CBC encryption prepends the IV to the ciphertext,\n *            because this affords a more efficient (few buffers) decryption.\n *            Hence tc_cbc_mode_encrypt assumes the ciphertext buffer is always\n *            16 bytes larger than the plaintext buffer.\n *\n *  Requires: AES-128\n *\n *  Usage:    1) call tc_cbc_mode_encrypt to encrypt data.\n *\n *            2) call tc_cbc_mode_decrypt to decrypt data.\n *\n */\n\n#ifndef __TC_CBC_MODE_H__\n#define __TC_CBC_MODE_H__\n\n#include \"aes.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**\n *  @brief CBC encryption procedure\n *  CBC encrypts inlen bytes of the in buffer into the out buffer\n *  using the encryption key schedule provided, prepends iv to out\n *  @return returns TC_CRYPTO_SUCCESS (1)\n *          returns TC_CRYPTO_FAIL (0) if:\n *                out == NULL or\n *                in == NULL or\n *                ctr == NULL or\n *                sched == NULL or\n *                inlen == 0 or\n *                (inlen % TC_AES_BLOCK_SIZE) != 0 or\n *                (outlen % TC_AES_BLOCK_SIZE) != 0 or\n *                outlen != inlen + TC_AES_BLOCK_SIZE\n *  @note Assumes: - sched has been configured by aes_set_encrypt_key\n *              - iv contains a 16 byte random string\n *              - out buffer is large enough to hold the ciphertext + iv\n *              - out buffer is a contiguous buffer\n *              - in holds the plaintext and is a contiguous buffer\n *              - inlen gives the number of bytes in the in buffer\n *  @param out IN/OUT -- buffer to receive the ciphertext\n *  @param outlen IN -- length of ciphertext buffer in bytes\n *  @param in IN -- plaintext to encrypt\n *  @param inlen IN -- length of plaintext buffer in bytes\n *  @param iv IN -- the IV for the this encrypt/decrypt\n *  @param sched IN --  AES key schedule for this encrypt\n */\nint tc_cbc_mode_encrypt(uint8_t *out, unsigned int outlen, const uint8_t *in,\n                        unsigned int inlen, const uint8_t *iv,\n                        const TCAesKeySched_t sched);\n\n/**\n * @brief CBC decryption procedure\n * CBC decrypts inlen bytes of the in buffer into the out buffer\n * using the provided encryption key schedule\n * @return returns TC_CRYPTO_SUCCESS (1)\n *         returns TC_CRYPTO_FAIL (0) if:\n *                out == NULL or\n *                in == NULL or\n *                sched == NULL or\n *                inlen == 0 or\n *                outlen == 0 or\n *                (inlen % TC_AES_BLOCK_SIZE) != 0 or\n *                (outlen % TC_AES_BLOCK_SIZE) != 0 or\n *                outlen != inlen + TC_AES_BLOCK_SIZE\n * @note Assumes:- in == iv + ciphertext, i.e. the iv and the ciphertext are\n *                contiguous. This allows for a very efficient decryption\n *                algorithm that would not otherwise be possible\n *              - sched was configured by aes_set_decrypt_key\n *              - out buffer is large enough to hold the decrypted plaintext\n *              and is a contiguous buffer\n *              - inlen gives the number of bytes in the in buffer\n * @param out IN/OUT -- buffer to receive decrypted data\n * @param outlen IN -- length of plaintext buffer in bytes\n * @param in IN -- ciphertext to decrypt, including IV\n * @param inlen IN -- length of ciphertext buffer in bytes\n * @param iv IN -- the IV for the this encrypt/decrypt\n * @param sched IN --  AES key schedule for this decrypt\n *\n */\nint tc_cbc_mode_decrypt(uint8_t *out, unsigned int outlen, const uint8_t *in,\n                        unsigned int inlen, const uint8_t *iv,\n                        const TCAesKeySched_t sched);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __TC_CBC_MODE_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/include/tinycrypt/ccm_mode.h",
    "content": "/* ccm_mode.h - TinyCrypt interface to a CCM mode implementation */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @file\n * @brief Interface to a CCM mode implementation.\n *\n *  Overview: CCM (for \"Counter with CBC-MAC\") mode is a NIST approved mode of\n *            operation defined in SP 800-38C.\n *\n *            TinyCrypt CCM implementation accepts:\n *\n *            1) Both non-empty payload and associated data (it encrypts and\n *            authenticates the payload and also authenticates the associated\n *            data);\n *            2) Non-empty payload and empty associated data (it encrypts and\n *            authenticates the payload);\n *            3) Non-empty associated data and empty payload (it degenerates to\n *            an authentication mode on the associated data).\n *\n *            TinyCrypt CCM implementation accepts associated data of any length\n *            between 0 and (2^16 - 2^8) bytes.\n *\n *  Security: The mac length parameter is an important parameter to estimate the\n *            security against collision attacks (that aim at finding different\n *            messages that produce the same authentication tag). TinyCrypt CCM\n *            implementation accepts any even integer between 4 and 16, as\n *            suggested in SP 800-38C.\n *\n *            RFC-3610, which also specifies CCM, presents a few relevant\n *            security suggestions, such as: it is recommended for most\n *            applications to use a mac length greater than 8. Besides, the\n *            usage of the same nonce for two different messages which are\n *            encrypted with the same key destroys the security of CCM mode.\n *\n *  Requires: AES-128\n *\n *  Usage:    1) call tc_ccm_config to configure.\n *\n *            2) call tc_ccm_mode_encrypt to encrypt data and generate tag.\n *\n *            3) call tc_ccm_mode_decrypt to decrypt data and verify tag.\n */\n\n#ifndef __TC_CCM_MODE_H__\n#define __TC_CCM_MODE_H__\n\n#include \"aes.h\"\n#include <stddef.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* max additional authenticated size in bytes: 2^16 - 2^8 = 65280 */\n#define TC_CCM_AAD_MAX_BYTES 0xff00\n\n/* max message size in bytes: 2^(8L) = 2^16 = 65536 */\n#define TC_CCM_PAYLOAD_MAX_BYTES 0x10000\n\n/* struct tc_ccm_mode_struct represents the state of a CCM computation */\ntypedef struct tc_ccm_mode_struct {\n    TCAesKeySched_t sched; /* AES key schedule */\n    uint8_t *nonce;        /* nonce required by CCM */\n    unsigned int mlen;     /* mac length in bytes (parameter t in SP-800 38C) */\n} * TCCcmMode_t;\n\n/**\n * @brief CCM configuration procedure\n * @return returns TC_CRYPTO_SUCCESS (1)\n *          returns TC_CRYPTO_FAIL (0) if:\n *                c == NULL or\n *                sched == NULL or\n *                nonce == NULL or\n *                mlen != {4, 6, 8, 10, 12, 16}\n * @param c -- CCM state\n * @param sched IN -- AES key schedule\n * @param nonce IN - nonce\n * @param nlen -- nonce length in bytes\n * @param mlen -- mac length in bytes (parameter t in SP-800 38C)\n */\nint tc_ccm_config(TCCcmMode_t c, TCAesKeySched_t sched, uint8_t *nonce,\n                  unsigned int nlen, unsigned int mlen);\n\n/**\n * @brief CCM tag generation and encryption procedure\n * @return returns TC_CRYPTO_SUCCESS (1)\n *         returns TC_CRYPTO_FAIL (0) if:\n *                out == NULL or\n *                c == NULL or\n *                ((plen > 0) and (payload == NULL)) or\n *                ((alen > 0) and (associated_data == NULL)) or\n *                (alen >= TC_CCM_AAD_MAX_BYTES) or\n *                (plen >= TC_CCM_PAYLOAD_MAX_BYTES) or\n *                (olen < plen + maclength)\n *\n * @param out OUT -- encrypted data\n * @param olen IN -- output length in bytes\n * @param associated_data IN -- associated data\n * @param alen IN -- associated data length in bytes\n * @param payload IN -- payload\n * @param plen IN -- payload length in bytes\n * @param c IN -- CCM state\n *\n * @note: out buffer should be at least (plen + c->mlen) bytes long.\n *\n * @note: The sequence b for encryption is formatted as follows:\n *        b = [FLAGS | nonce | counter ], where:\n *          FLAGS is 1 byte long\n *          nonce is 13 bytes long\n *          counter is 2 bytes long\n *        The byte FLAGS is composed by the following 8 bits:\n *          0-2 bits: used to represent the value of q-1\n *          3-7 btis: always 0's\n *\n * @note: The sequence b for authentication is formatted as follows:\n *        b = [FLAGS | nonce | length(mac length)], where:\n *          FLAGS is 1 byte long\n *          nonce is 13 bytes long\n *          length(mac length) is 2 bytes long\n *        The byte FLAGS is composed by the following 8 bits:\n *          0-2 bits: used to represent the value of q-1\n *          3-5 bits: mac length (encoded as: (mlen-2)/2)\n *          6: Adata (0 if alen == 0, and 1 otherwise)\n *          7: always 0\n */\nint tc_ccm_generation_encryption(uint8_t *out, unsigned int olen,\n                                 const uint8_t *associated_data,\n                                 unsigned int alen, const uint8_t *payload,\n                                 unsigned int plen, TCCcmMode_t c);\n\n/**\n * @brief CCM decryption and tag verification procedure\n * @return returns TC_CRYPTO_SUCCESS (1)\n *         returns TC_CRYPTO_FAIL (0) if:\n *                out == NULL or\n *                c == NULL or\n *                ((plen > 0) and (payload == NULL)) or\n *                ((alen > 0) and (associated_data == NULL)) or\n *                (alen >= TC_CCM_AAD_MAX_BYTES) or\n *                (plen >= TC_CCM_PAYLOAD_MAX_BYTES) or\n *                (olen < plen - c->mlen)\n *\n * @param out OUT -- decrypted data\n * @param associated_data IN -- associated data\n * @param alen IN -- associated data length in bytes\n * @param payload IN -- payload\n * @param plen IN -- payload length in bytes\n * @param c IN -- CCM state\n *\n * @note: out buffer should be at least (plen - c->mlen) bytes long.\n *\n * @note: The sequence b for encryption is formatted as follows:\n *        b = [FLAGS | nonce | counter ], where:\n *          FLAGS is 1 byte long\n *          nonce is 13 bytes long\n *          counter is 2 bytes long\n *        The byte FLAGS is composed by the following 8 bits:\n *          0-2 bits: used to represent the value of q-1\n *          3-7 btis: always 0's\n *\n * @note: The sequence b for authentication is formatted as follows:\n *        b = [FLAGS | nonce | length(mac length)], where:\n *          FLAGS is 1 byte long\n *          nonce is 13 bytes long\n *          length(mac length) is 2 bytes long\n *        The byte FLAGS is composed by the following 8 bits:\n *          0-2 bits: used to represent the value of q-1\n *          3-5 bits: mac length (encoded as: (mlen-2)/2)\n *          6: Adata (0 if alen == 0, and 1 otherwise)\n *          7: always 0\n */\nint tc_ccm_decryption_verification(uint8_t *out, unsigned int olen,\n                                   const uint8_t *associated_data,\n                                   unsigned int alen, const uint8_t *payload, unsigned int plen,\n                                   TCCcmMode_t c);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __TC_CCM_MODE_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/include/tinycrypt/cmac_mode.h",
    "content": "/*  cmac_mode.h -- interface to a CMAC implementation */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @file\n * @brief Interface to a CMAC implementation.\n *\n *  Overview: CMAC is defined NIST in SP 800-38B, and is the standard algorithm\n *            for computing a MAC using a block cipher. It can compute the MAC\n *            for a byte string of any length. It is distinguished from CBC-MAC\n *            in the processing of the final message block; CMAC uses a\n *            different technique to compute the final message block is full\n *            size or only partial, while CBC-MAC uses the same technique for\n *            both. This difference permits CMAC to be applied to variable\n *            length messages, while all messages authenticated by CBC-MAC must\n *            be the same length.\n *\n *  Security: AES128-CMAC mode of operation offers 64 bits of security against\n *            collision attacks. Note however that an external attacker cannot\n *            generate the tags him/herself without knowing the MAC key. In this\n *            sense, to attack the collision property of AES128-CMAC, an\n *            external attacker would need the cooperation of the legal user to\n *            produce an exponentially high number of tags (e.g. 2^64) to\n *            finally be able to look for collisions and benefit from them. As\n *            an extra precaution, the current implementation allows to at most\n *            2^48 calls to the tc_cmac_update function before re-calling\n *            tc_cmac_setup (allowing a new key to be set), as suggested in\n *            Appendix B of SP 800-38B.\n *\n *  Requires: AES-128\n *\n *  Usage:   This implementation provides a \"scatter-gather\" interface, so that\n *           the CMAC value can be computed incrementally over a message\n *           scattered in different segments throughout memory. Experience shows\n *           this style of interface tends to minimize the burden of programming\n *           correctly. Like all symmetric key operations, it is session\n *           oriented.\n *\n *           To begin a CMAC session, use tc_cmac_setup to initialize a struct\n *           tc_cmac_struct with encryption key and buffer. Our implementation\n *           always assume that the AES key to be the same size as the block\n *           cipher block size. Once setup, this data structure can be used for\n *           many CMAC computations.\n *\n *           Once the state has been setup with a key, computing the CMAC of\n *           some data requires three steps:\n *\n *           (1) first use tc_cmac_init to initialize a new CMAC computation.\n *           (2) next mix all of the data into the CMAC computation state using\n *               tc_cmac_update. If all of the data resides in a single data\n *               segment then only one tc_cmac_update call is needed; if data\n *               is scattered throughout memory in n data segments, then n calls\n *               will be needed. CMAC IS ORDER SENSITIVE, to be able to detect\n *               attacks that swap bytes, so the order in which data is mixed\n *               into the state is critical!\n *           (3) Once all of the data for a message has been mixed, use\n *               tc_cmac_final to compute the CMAC tag value.\n *\n *           Steps (1)-(3) can be repeated as many times as you want to CMAC\n *           multiple messages. A practical limit is 2^48 1K messages before you\n *           have to change the key.\n *\n *           Once you are done computing CMAC with a key, it is a good idea to\n *           destroy the state so an attacker cannot recover the key; use\n *           tc_cmac_erase to accomplish this.\n */\n\n#ifndef __TC_CMAC_MODE_H__\n#define __TC_CMAC_MODE_H__\n\n#include <aes.h>\n\n#include <stddef.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* padding for last message block */\n#define TC_CMAC_PADDING 0x80\n\n/* struct tc_cmac_struct represents the state of a CMAC computation */\ntypedef struct tc_cmac_struct {\n    /* initialization vector */\n    uint8_t iv[TC_AES_BLOCK_SIZE];\n    /* used if message length is a multiple of block_size bytes */\n    uint8_t K1[TC_AES_BLOCK_SIZE];\n    /* used if message length isn't a multiple block_size bytes */\n    uint8_t K2[TC_AES_BLOCK_SIZE];\n    /* where to put bytes that didn't fill a block */\n    uint8_t leftover[TC_AES_BLOCK_SIZE];\n    /* identifies the encryption key */\n    unsigned int keyid;\n    /* next available leftover location */\n    unsigned int leftover_offset;\n    /* AES key schedule */\n    TCAesKeySched_t sched;\n    /* calls to tc_cmac_update left before re-key */\n    uint64_t countdown;\n} * TCCmacState_t;\n\n/**\n * @brief Configures the CMAC state to use the given AES key\n * @return returns TC_CRYPTO_SUCCESS (1) after having configured the CMAC state\n *         returns TC_CRYPTO_FAIL (0) if:\n *              s == NULL or\n *              key == NULL\n *\n * @param s IN/OUT -- the state to set up\n * @param key IN -- the key to use\n * @param sched IN -- AES key schedule\n */\nint tc_cmac_setup(TCCmacState_t s, const uint8_t *key,\n                  TCAesKeySched_t sched);\n\n/**\n * @brief Erases the CMAC state\n * @return returns TC_CRYPTO_SUCCESS (1) after having configured the CMAC state\n *         returns TC_CRYPTO_FAIL (0) if:\n *              s == NULL\n *\n * @param s IN/OUT -- the state to erase\n */\nint tc_cmac_erase(TCCmacState_t s);\n\n/**\n * @brief Initializes a new CMAC computation\n * @return returns TC_CRYPTO_SUCCESS (1) after having initialized the CMAC state\n *         returns TC_CRYPTO_FAIL (0) if:\n *              s == NULL\n *\n * @param s IN/OUT -- the state to initialize\n */\nint tc_cmac_init(TCCmacState_t s);\n\n/**\n * @brief Incrementally computes CMAC over the next data segment\n * @return returns TC_CRYPTO_SUCCESS (1) after successfully updating the CMAC state\n *         returns TC_CRYPTO_FAIL (0) if:\n *              s == NULL or\n *              if data == NULL when dlen > 0\n *\n * @param s IN/OUT -- the CMAC state\n * @param data IN -- the next data segment to MAC\n * @param dlen IN -- the length of data in bytes\n */\nint tc_cmac_update(TCCmacState_t s, const uint8_t *data, size_t dlen);\n\n/**\n * @brief Generates the tag from the CMAC state\n * @return returns TC_CRYPTO_SUCCESS (1) after successfully generating the tag\n *         returns TC_CRYPTO_FAIL (0) if:\n *              tag == NULL or\n *              s == NULL\n *\n * @param tag OUT -- the CMAC tag\n * @param s IN -- CMAC state\n */\nint tc_cmac_final(uint8_t *tag, TCCmacState_t s);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __TC_CMAC_MODE_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/include/tinycrypt/constants.h",
    "content": "/* constants.h - TinyCrypt interface to constants */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @file\n * @brief -- Interface to constants.\n *\n */\n\n#ifndef __TC_CONSTANTS_H__\n#define __TC_CONSTANTS_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <stdbool.h>\n\n#ifndef NULL\n#define NULL ((void *)0)\n#endif\n\n#define TC_CRYPTO_SUCCESS 1\n#define TC_CRYPTO_FAIL    0\n\n#define TC_ZERO_BYTE 0x00\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __TC_CONSTANTS_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/include/tinycrypt/ctr_mode.h",
    "content": "/* ctr_mode.h - TinyCrypt interface to CTR mode */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @file\n * @brief Interface to CTR mode.\n *\n *  Overview:  CTR (pronounced \"counter\") mode is a NIST approved mode of\n *             operation defined in SP 800-38a. It can be used with any\n *             block cipher to provide confidentiality of strings of any\n *             length. TinyCrypt hard codes AES128 as the block cipher.\n *\n *  Security:  CTR mode achieves confidentiality only if the counter value is\n *             never reused with a same encryption key. If the counter is\n *             repeated, than an adversary might be able to defeat the scheme.\n *\n *             A usual method to ensure different counter values refers to\n *             initialize the counter in a given value (0, for example) and\n *             increases it every time a new block is enciphered. This naturally\n *             leaves to a limitation on the number q of blocks that can be\n *             enciphered using a same key: q < 2^(counter size).\n *\n *             TinyCrypt uses a counter of 32 bits. This means that after 2^32\n *             block encryptions, the counter will be reused (thus losing CBC\n *             security). 2^32 block encryptions should be enough for most of\n *             applications targeting constrained devices. Applications intended\n *             to encrypt a larger number of blocks must replace the key after\n *             2^32 block encryptions.\n *\n *             CTR mode provides NO data integrity.\n *\n *  Requires: AES-128\n *\n *  Usage:     1) call tc_ctr_mode to process the data to encrypt/decrypt.\n *\n */\n\n#ifndef __TC_CTR_MODE_H__\n#define __TC_CTR_MODE_H__\n\n#include \"aes.h\"\n#include \"constants.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**\n *  @brief CTR mode encryption/decryption procedure.\n *  CTR mode encrypts (or decrypts) inlen bytes from in buffer into out buffer\n *  @return returns TC_CRYPTO_SUCCESS (1)\n *          returns TC_CRYPTO_FAIL (0) if:\n *                out == NULL or\n *                in == NULL or\n *                ctr == NULL or\n *                sched == NULL or\n *                inlen == 0 or\n *                outlen == 0 or\n *                inlen != outlen\n *  @note Assumes:- The current value in ctr has NOT been used with sched\n *              - out points to inlen bytes\n *              - in points to inlen bytes\n *              - ctr is an integer counter in littleEndian format\n *              - sched was initialized by aes_set_encrypt_key\n * @param out OUT -- produced ciphertext (plaintext)\n * @param outlen IN -- length of ciphertext buffer in bytes\n * @param in IN -- data to encrypt (or decrypt)\n * @param inlen IN -- length of input data in bytes\n * @param ctr IN/OUT -- the current counter value\n * @param sched IN -- an initialized AES key schedule\n */\nint tc_ctr_mode(uint8_t *out, unsigned int outlen, const uint8_t *in,\n                unsigned int inlen, uint8_t *ctr, const TCAesKeySched_t sched);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __TC_CTR_MODE_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/include/tinycrypt/ctr_prng.h",
    "content": "/* ctr_prng.h - TinyCrypt interface to a CTR-PRNG implementation */\n\n/*\n * Copyright (c) 2016, Chris Morrison\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n *   list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n *   this list of conditions and the following disclaimer in the documentation\n *   and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @file\n * @brief Interface to a CTR-PRNG implementation.\n *\n *  Overview:   A pseudo-random number generator (PRNG) generates a sequence\n *              of numbers that have a distribution close to the one expected\n *              for a sequence of truly random numbers. The NIST Special\n *              Publication 800-90A specifies several mechanisms to generate\n *              sequences of pseudo random numbers, including the CTR-PRNG one\n *              which is based on AES. TinyCrypt implements CTR-PRNG with\n *              AES-128.\n *\n *  Security:   A cryptographically secure PRNG depends on the existence of an\n *              entropy source to provide a truly random seed as well as the\n *              security of the primitives used as the building blocks (AES-128\n *              in this instance).\n *\n *  Requires:   - AES-128\n *\n *  Usage:      1) call tc_ctr_prng_init to seed the prng context\n *\n *              2) call tc_ctr_prng_reseed to mix in additional entropy into\n *              the prng context\n *\n *              3) call tc_ctr_prng_generate to output the pseudo-random data\n *\n *              4) call tc_ctr_prng_uninstantiate to zero out the prng context\n */\n\n#ifndef __TC_CTR_PRNG_H__\n#define __TC_CTR_PRNG_H__\n\n#include \"aes.h\"\n\n#define TC_CTR_PRNG_RESEED_REQ -1\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct {\n    /* updated each time another BLOCKLEN_BYTES bytes are produced */\n    uint8_t V[TC_AES_BLOCK_SIZE];\n\n    /* updated whenever the PRNG is reseeded */\n    struct tc_aes_key_sched_struct key;\n\n    /* number of requests since initialization/reseeding */\n    uint64_t reseedCount;\n} TCCtrPrng_t;\n\n/**\n *  @brief CTR-PRNG initialization procedure\n *  Initializes prng context with entropy and personalization string (if any)\n *  @return returns TC_CRYPTO_SUCCESS (1)\n *          returns TC_CRYPTO_FAIL (0) if:\n *                ctx == NULL,\n *                entropy == NULL,\n *                entropyLen < (TC_AES_KEY_SIZE + TC_AES_BLOCK_SIZE)\n *  @note       Only the first (TC_AES_KEY_SIZE + TC_AES_BLOCK_SIZE) bytes of\n *              both the entropy and personalization inputs are used -\n *              supplying additional bytes has no effect.\n *  @param ctx IN/OUT -- the PRNG context to initialize\n *  @param entropy IN -- entropy used to seed the PRNG\n *  @param entropyLen IN -- entropy length in bytes\n *  @param personalization IN -- personalization string used to seed the PRNG\n *  (may be null)\n *  @param plen IN -- personalization length in bytes\n *\n */\nint tc_ctr_prng_init(TCCtrPrng_t *const ctx,\n                     uint8_t const *const entropy,\n                     unsigned int entropyLen,\n                     uint8_t const *const personalization,\n                     unsigned int pLen);\n\n/**\n *  @brief CTR-PRNG reseed procedure\n *  Mixes entropy and additional_input into the prng context\n *  @return returns  TC_CRYPTO_SUCCESS (1)\n *  returns TC_CRYPTO_FAIL (0) if:\n *          ctx == NULL,\n *          entropy == NULL,\n *          entropylen < (TC_AES_KEY_SIZE + TC_AES_BLOCK_SIZE)\n *  @note It is better to reseed an existing prng context rather than\n *        re-initialise, so that any existing entropy in the context is\n *        presereved.  This offers some protection against undetected failures\n *        of the entropy source.\n *  @note Assumes tc_ctr_prng_init has been called for ctx\n *  @param ctx IN/OUT -- the PRNG state\n *  @param entropy IN -- entropy to mix into the prng\n *  @param entropylen IN -- length of entropy in bytes\n *  @param additional_input IN -- additional input to the prng (may be null)\n *  @param additionallen IN -- additional input length in bytes\n */\nint tc_ctr_prng_reseed(TCCtrPrng_t *const ctx,\n                       uint8_t const *const entropy,\n                       unsigned int entropyLen,\n                       uint8_t const *const additional_input,\n                       unsigned int additionallen);\n\n/**\n *  @brief CTR-PRNG generate procedure\n *  Generates outlen pseudo-random bytes into out buffer, updates prng\n *  @return returns TC_CRYPTO_SUCCESS (1)\n *          returns TC_CTR_PRNG_RESEED_REQ (-1) if a reseed is needed\n *             returns TC_CRYPTO_FAIL (0) if:\n *                ctx == NULL,\n *                out == NULL,\n *                outlen >= 2^16\n *  @note Assumes tc_ctr_prng_init has been called for ctx\n *  @param ctx IN/OUT -- the PRNG context\n *  @param additional_input IN -- additional input to the prng (may be null)\n *  @param additionallen IN -- additional input length in bytes\n *  @param out IN/OUT -- buffer to receive output\n *  @param outlen IN -- size of out buffer in bytes\n */\nint tc_ctr_prng_generate(TCCtrPrng_t *const ctx,\n                         uint8_t const *const additional_input,\n                         unsigned int additionallen,\n                         uint8_t *const out,\n                         unsigned int outlen);\n\n/**\n *  @brief CTR-PRNG uninstantiate procedure\n *  Zeroes the internal state of the supplied prng context\n *  @return none\n *  @param ctx IN/OUT -- the PRNG context\n */\nvoid tc_ctr_prng_uninstantiate(TCCtrPrng_t *const ctx);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __TC_CTR_PRNG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/include/tinycrypt/ecc.h",
    "content": "/* ecc.h - TinyCrypt interface to common ECC functions */\n\n/* Copyright (c) 2014, Kenneth MacKay\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n *   list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n *   this list of conditions and the following disclaimer in the documentation\n *   and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @file\n * @brief -- Interface to common ECC functions.\n *\n *  Overview: This software is an implementation of common functions\n *            necessary to elliptic curve cryptography. This implementation uses\n *            curve NIST p-256.\n *\n *  Security: The curve NIST p-256 provides approximately 128 bits of security.\n *\n */\n\n#ifndef __TC_UECC_H__\n#define __TC_UECC_H__\n\n#include <stdint.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Word size (4 bytes considering 32-bits architectures) */\n#define uECC_WORD_SIZE 4\n\n/* setting max number of calls to prng: */\n#ifndef uECC_RNG_MAX_TRIES\n#define uECC_RNG_MAX_TRIES 64\n#endif\n\n/* defining data types to store word and bit counts: */\ntypedef int8_t wordcount_t;\ntypedef int16_t bitcount_t;\n/* defining data type for comparison result: */\ntypedef int8_t cmpresult_t;\n/* defining data type to store ECC coordinate/point in 32bits words: */\ntypedef unsigned int uECC_word_t;\n/* defining data type to store an ECC coordinate/point in 64bits words: */\ntypedef uint64_t uECC_dword_t;\n\n/* defining masks useful for ecc computations: */\n#define HIGH_BIT_SET         0x80000000\n#define uECC_WORD_BITS       32\n#define uECC_WORD_BITS_SHIFT 5\n#define uECC_WORD_BITS_MASK  0x01F\n\n/* Number of words of 32 bits to represent an element of the the curve p-256: */\n#define NUM_ECC_WORDS 8\n/* Number of bytes to represent an element of the the curve p-256: */\n#define NUM_ECC_BYTES (uECC_WORD_SIZE * NUM_ECC_WORDS)\n\n/* structure that represents an elliptic curve (e.g. p256):*/\nstruct uECC_Curve_t;\ntypedef const struct uECC_Curve_t *uECC_Curve;\nstruct uECC_Curve_t {\n    wordcount_t num_words;\n    wordcount_t num_bytes;\n    bitcount_t num_n_bits;\n    uECC_word_t p[NUM_ECC_WORDS];\n    uECC_word_t n[NUM_ECC_WORDS];\n    uECC_word_t G[NUM_ECC_WORDS * 2];\n    uECC_word_t b[NUM_ECC_WORDS];\n    void (*double_jacobian)(uECC_word_t *X1, uECC_word_t *Y1, uECC_word_t *Z1,\n                            uECC_Curve curve);\n    void (*x_side)(uECC_word_t *result, const uECC_word_t *x, uECC_Curve curve);\n    void (*mmod_fast)(uECC_word_t *result, uECC_word_t *product);\n};\n\n/*\n * @brief computes doubling of point ion jacobian coordinates, in place.\n * @param X1 IN/OUT -- x coordinate\n * @param Y1 IN/OUT -- y coordinate\n * @param Z1 IN/OUT -- z coordinate\n * @param curve IN -- elliptic curve\n */\nvoid double_jacobian_default(uECC_word_t *X1, uECC_word_t *Y1,\n                             uECC_word_t *Z1, uECC_Curve curve);\n\n/*\n * @brief Computes x^3 + ax + b. result must not overlap x.\n * @param result OUT -- x^3 + ax + b\n * @param x IN -- value of x\n * @param curve IN -- elliptic curve\n */\nvoid x_side_default(uECC_word_t *result, const uECC_word_t *x,\n                    uECC_Curve curve);\n\n/*\n * @brief Computes result = product % curve_p\n * from http://www.nsa.gov/ia/_files/nist-routines.pdf\n * @param result OUT -- product % curve_p\n * @param product IN -- value to be reduced mod curve_p\n */\nvoid vli_mmod_fast_secp256r1(unsigned int *result, unsigned int *product);\n\n/* Bytes to words ordering: */\n#define BYTES_TO_WORDS_8(a, b, c, d, e, f, g, h) 0x##d##c##b##a, 0x##h##g##f##e\n#define BYTES_TO_WORDS_4(a, b, c, d)             0x##d##c##b##a\n#define BITS_TO_WORDS(num_bits) \\\n    ((num_bits + ((uECC_WORD_SIZE * 8) - 1)) / (uECC_WORD_SIZE * 8))\n#define BITS_TO_BYTES(num_bits) ((num_bits + 7) / 8)\n\n/* definition of curve NIST p-256: */\nstatic const struct uECC_Curve_t curve_secp256r1 = {\n    NUM_ECC_WORDS,\n    NUM_ECC_BYTES,\n    256,\n    /* num_n_bits */ { BYTES_TO_WORDS_8(FF, FF, FF, FF, FF, FF, FF, FF), BYTES_TO_WORDS_8(FF, FF, FF, FF, 00, 00, 00, 00), BYTES_TO_WORDS_8(00, 00, 00, 00, 00, 00, 00, 00), BYTES_TO_WORDS_8(01, 00, 00, 00, FF, FF, FF, FF) },\n    { BYTES_TO_WORDS_8(51, 25, 63, FC, C2, CA, B9, F3),\n      BYTES_TO_WORDS_8(84, 9E, 17, A7, AD, FA, E6, BC),\n      BYTES_TO_WORDS_8(FF, FF, FF, FF, FF, FF, FF, FF),\n      BYTES_TO_WORDS_8(00, 00, 00, 00, FF, FF, FF, FF) },\n    { BYTES_TO_WORDS_8(96, C2, 98, D8, 45, 39, A1, F4),\n      BYTES_TO_WORDS_8(A0, 33, EB, 2D, 81, 7D, 03, 77),\n      BYTES_TO_WORDS_8(F2, 40, A4, 63, E5, E6, BC, F8),\n      BYTES_TO_WORDS_8(47, 42, 2C, E1, F2, D1, 17, 6B),\n\n      BYTES_TO_WORDS_8(F5, 51, BF, 37, 68, 40, B6, CB),\n      BYTES_TO_WORDS_8(CE, 5E, 31, 6B, 57, 33, CE, 2B),\n      BYTES_TO_WORDS_8(16, 9E, 0F, 7C, 4A, EB, E7, 8E),\n      BYTES_TO_WORDS_8(9B, 7F, 1A, FE, E2, 42, E3, 4F) },\n    { BYTES_TO_WORDS_8(4B, 60, D2, 27, 3E, 3C, CE, 3B),\n      BYTES_TO_WORDS_8(F6, B0, 53, CC, B0, 06, 1D, 65),\n      BYTES_TO_WORDS_8(BC, 86, 98, 76, 55, BD, EB, B3),\n      BYTES_TO_WORDS_8(E7, 93, 3A, AA, D8, 35, C6, 5A) },\n    &double_jacobian_default,\n    &x_side_default,\n    &vli_mmod_fast_secp256r1\n};\n\nuECC_Curve uECC_secp256r1(void);\n\n/*\n * @brief Generates a random integer in the range 0 < random < top.\n * Both random and top have num_words words.\n * @param random OUT -- random integer in the range 0 < random < top\n * @param top IN -- upper limit\n * @param num_words IN -- number of words\n * @return a random integer in the range 0 < random < top\n */\nint uECC_generate_random_int(uECC_word_t *random, const uECC_word_t *top,\n                             wordcount_t num_words);\n\n/* uECC_RNG_Function type\n * The RNG function should fill 'size' random bytes into 'dest'. It should\n * return 1 if 'dest' was filled with random data, or 0 if the random data could\n * not be generated. The filled-in values should be either truly random, or from\n * a cryptographically-secure PRNG.\n *\n * A correctly functioning RNG function must be set (using uECC_set_rng())\n * before calling uECC_make_key() or uECC_sign().\n *\n * Setting a correctly functioning RNG function improves the resistance to\n * side-channel attacks for uECC_shared_secret().\n *\n * A correct RNG function is set by default. If you are building on another\n * POSIX-compliant system that supports /dev/random or /dev/urandom, you can\n * define uECC_POSIX to use the predefined RNG.\n */\ntypedef int (*uECC_RNG_Function)(uint8_t *dest, unsigned int size);\n\n/*\n * @brief Set the function that will be used to generate random bytes. The RNG\n * function should return 1 if the random data was generated, or 0 if the random\n * data could not be generated.\n *\n * @note On platforms where there is no predefined RNG function, this must be\n * called before uECC_make_key() or uECC_sign() are used.\n *\n * @param rng_function IN -- function that will be used to generate random bytes\n */\nvoid uECC_set_rng(uECC_RNG_Function rng_function);\n\n/*\n * @brief provides current uECC_RNG_Function.\n * @return Returns the function that will be used to generate random bytes.\n */\nuECC_RNG_Function uECC_get_rng(void);\n\n/*\n * @brief computes the size of a private key for the curve in bytes.\n * @param curve IN -- elliptic curve\n * @return size of a private key for the curve in bytes.\n */\nint uECC_curve_private_key_size(uECC_Curve curve);\n\n/*\n * @brief computes the size of a public key for the curve in bytes.\n * @param curve IN -- elliptic curve\n * @return the size of a public key for the curve in bytes.\n */\nint uECC_curve_public_key_size(uECC_Curve curve);\n\n/*\n * @brief Compute the corresponding public key for a private key.\n * @param private_key IN -- The private key to compute the public key for\n * @param public_key OUT -- Will be filled in with the corresponding public key\n * @param curve\n * @return Returns 1 if key was computed successfully, 0 if an error occurred.\n */\nint uECC_compute_public_key(const uint8_t *private_key,\n                            uint8_t *public_key, uECC_Curve curve);\n\n/*\n * @brief Compute public-key.\n * @return corresponding public-key.\n * @param result OUT -- public-key\n * @param private_key IN -- private-key\n * @param curve IN -- elliptic curve\n */\nuECC_word_t EccPoint_compute_public_key(uECC_word_t *result,\n                                        uECC_word_t *private_key, uECC_Curve curve);\n\n/*\n * @brief Regularize the bitcount for the private key so that attackers cannot\n * use a side channel attack to learn the number of leading zeros.\n * @return Regularized k\n * @param k IN -- private-key\n * @param k0 IN/OUT -- regularized k\n * @param k1 IN/OUT -- regularized k\n * @param curve IN -- elliptic curve\n */\nuECC_word_t regularize_k(const uECC_word_t *const k, uECC_word_t *k0,\n                         uECC_word_t *k1, uECC_Curve curve);\n\n/*\n * @brief Point multiplication algorithm using Montgomery's ladder with co-Z\n * coordinates. See http://eprint.iacr.org/2011/338.pdf.\n * @note Result may overlap point.\n * @param result OUT -- returns scalar*point\n * @param point IN -- elliptic curve point\n * @param scalar IN -- scalar\n * @param initial_Z IN -- initial value for z\n * @param num_bits IN -- number of bits in scalar\n * @param curve IN -- elliptic curve\n */\nvoid EccPoint_mult(uECC_word_t *result, const uECC_word_t *point,\n                   const uECC_word_t *scalar, const uECC_word_t *initial_Z,\n                   bitcount_t num_bits, uECC_Curve curve);\n\n/*\n * @brief Constant-time comparison to zero - secure way to compare long integers\n * @param vli IN -- very long integer\n * @param num_words IN -- number of words in the vli\n * @return 1 if vli == 0, 0 otherwise.\n */\nuECC_word_t uECC_vli_isZero(const uECC_word_t *vli, wordcount_t num_words);\n\n/*\n * @brief Check if 'point' is the point at infinity\n * @param point IN -- elliptic curve point\n * @param curve IN -- elliptic curve\n * @return if 'point' is the point at infinity, 0 otherwise.\n */\nuECC_word_t EccPoint_isZero(const uECC_word_t *point, uECC_Curve curve);\n\n/*\n * @brief computes the sign of left - right, in constant time.\n * @param left IN -- left term to be compared\n * @param right IN -- right term to be compared\n * @param num_words IN -- number of words\n * @return the sign of left - right\n */\ncmpresult_t uECC_vli_cmp(const uECC_word_t *left, const uECC_word_t *right,\n                         wordcount_t num_words);\n\n/*\n * @brief computes sign of left - right, not in constant time.\n * @note should not be used if inputs are part of a secret\n * @param left IN -- left term to be compared\n * @param right IN -- right term to be compared\n * @param num_words IN -- number of words\n * @return the sign of left - right\n */\ncmpresult_t uECC_vli_cmp_unsafe(const uECC_word_t *left, const uECC_word_t *right,\n                                wordcount_t num_words);\n\n/*\n * @brief Computes result = (left - right) % mod.\n * @note Assumes that (left < mod) and (right < mod), and that result does not\n * overlap mod.\n * @param result OUT -- (left - right) % mod\n * @param left IN -- leftright term in modular subtraction\n * @param right IN -- right term in modular subtraction\n * @param mod IN -- mod\n * @param num_words IN -- number of words\n */\nvoid uECC_vli_modSub(uECC_word_t *result, const uECC_word_t *left,\n                     const uECC_word_t *right, const uECC_word_t *mod,\n                     wordcount_t num_words);\n\n/*\n * @brief Computes P' = (x1', y1', Z3), P + Q = (x3, y3, Z3) or\n * P => P', Q => P + Q\n * @note assumes Input P = (x1, y1, Z), Q = (x2, y2, Z)\n * @param X1 IN -- x coordinate of P\n * @param Y1 IN -- y coordinate of P\n * @param X2 IN -- x coordinate of Q\n * @param Y2 IN -- y coordinate of Q\n * @param curve IN -- elliptic curve\n */\nvoid XYcZ_add(uECC_word_t *X1, uECC_word_t *Y1, uECC_word_t *X2,\n              uECC_word_t *Y2, uECC_Curve curve);\n\n/*\n * @brief Computes (x1 * z^2, y1 * z^3)\n * @param X1 IN -- previous x1 coordinate\n * @param Y1 IN -- previous y1 coordinate\n * @param Z IN -- z value\n * @param curve IN -- elliptic curve\n */\nvoid apply_z(uECC_word_t *X1, uECC_word_t *Y1, const uECC_word_t *const Z,\n             uECC_Curve curve);\n\n/*\n * @brief Check if bit is set.\n * @return Returns nonzero if bit 'bit' of vli is set.\n * @warning It is assumed that the value provided in 'bit' is within the\n * boundaries of the word-array 'vli'.\n * @note The bit ordering layout assumed for vli is: {31, 30, ..., 0},\n * {63, 62, ..., 32}, {95, 94, ..., 64}, {127, 126,..., 96} for a vli consisting\n * of 4 uECC_word_t elements.\n */\nuECC_word_t uECC_vli_testBit(const uECC_word_t *vli, bitcount_t bit);\n\n/*\n * @brief Computes result = product % mod, where product is 2N words long.\n * @param result OUT -- product % mod\n * @param mod IN -- module\n * @param num_words IN -- number of words\n * @warning Currently only designed to work for curve_p or curve_n.\n */\nvoid uECC_vli_mmod(uECC_word_t *result, uECC_word_t *product,\n                   const uECC_word_t *mod, wordcount_t num_words);\n\n/*\n * @brief Computes modular product (using curve->mmod_fast)\n * @param result OUT -- (left * right) mod % curve_p\n * @param left IN -- left term in product\n * @param right IN -- right term in product\n * @param curve IN -- elliptic curve\n */\nvoid uECC_vli_modMult_fast(uECC_word_t *result, const uECC_word_t *left,\n                           const uECC_word_t *right, uECC_Curve curve);\n\n/*\n * @brief Computes result = left - right.\n * @note Can modify in place.\n * @param result OUT -- left - right\n * @param left IN -- left term in subtraction\n * @param right IN -- right term in subtraction\n * @param num_words IN -- number of words\n * @return borrow\n */\nuECC_word_t uECC_vli_sub(uECC_word_t *result, const uECC_word_t *left,\n                         const uECC_word_t *right, wordcount_t num_words);\n\n/*\n * @brief Constant-time comparison function(secure way to compare long ints)\n * @param left IN -- left term in comparison\n * @param right IN -- right term in comparison\n * @param num_words IN -- number of words\n * @return Returns 0 if left == right, 1 otherwise.\n */\nuECC_word_t uECC_vli_equal(const uECC_word_t *left, const uECC_word_t *right,\n                           wordcount_t num_words);\n\n/*\n * @brief Computes (left * right) % mod\n * @param result OUT -- (left * right) % mod\n * @param left IN -- left term in product\n * @param right IN -- right term in product\n * @param mod IN -- mod\n * @param num_words IN -- number of words\n */\nvoid uECC_vli_modMult(uECC_word_t *result, const uECC_word_t *left,\n                      const uECC_word_t *right, const uECC_word_t *mod,\n                      wordcount_t num_words);\n\n/*\n * @brief Computes (1 / input) % mod\n * @note All VLIs are the same size.\n * @note See \"Euclid's GCD to Montgomery Multiplication to the Great Divide\"\n * @param result OUT -- (1 / input) % mod\n * @param input IN -- value to be modular inverted\n * @param mod IN -- mod\n * @param num_words -- number of words\n */\nvoid uECC_vli_modInv(uECC_word_t *result, const uECC_word_t *input,\n                     const uECC_word_t *mod, wordcount_t num_words);\n\n/*\n * @brief Sets dest = src.\n * @param dest OUT -- destination buffer\n * @param src IN --  origin buffer\n * @param num_words IN -- number of words\n */\nvoid uECC_vli_set(uECC_word_t *dest, const uECC_word_t *src,\n                  wordcount_t num_words);\n\n/*\n * @brief Computes (left + right) % mod.\n * @note Assumes that (left < mod) and right < mod), and that result does not\n * overlap mod.\n * @param result OUT -- (left + right) % mod.\n * @param left IN -- left term in addition\n * @param right IN -- right term in addition\n * @param mod IN -- mod\n * @param num_words IN -- number of words\n */\nvoid uECC_vli_modAdd(uECC_word_t *result, const uECC_word_t *left,\n                     const uECC_word_t *right, const uECC_word_t *mod,\n                     wordcount_t num_words);\n\n/*\n * @brief Counts the number of bits required to represent vli.\n * @param vli IN -- very long integer\n * @param max_words IN -- number of words\n * @return number of bits in given vli\n */\nbitcount_t uECC_vli_numBits(const uECC_word_t *vli,\n                            const wordcount_t max_words);\n\n/*\n * @brief Erases (set to 0) vli\n * @param vli IN -- very long integer\n * @param num_words IN -- number of words\n */\nvoid uECC_vli_clear(uECC_word_t *vli, wordcount_t num_words);\n\n/*\n * @brief check if it is a valid point in the curve\n * @param point IN -- point to be checked\n * @param curve IN -- elliptic curve\n * @return 0 if point is valid\n * @exception returns -1 if it is a point at infinity\n * @exception returns -2 if x or y is smaller than p,\n * @exception returns -3 if y^2 != x^3 + ax + b.\n */\nint uECC_valid_point(const uECC_word_t *point, uECC_Curve curve);\n\n/*\n * @brief Check if a public key is valid.\n * @param public_key IN -- The public key to be checked.\n * @return returns 0 if the public key is valid\n * @exception returns -1 if it is a point at infinity\n * @exception returns -2 if x or y is smaller than p,\n * @exception returns -3 if y^2 != x^3 + ax + b.\n * @exception returns -4 if public key is the group generator.\n *\n * @note Note that you are not required to check for a valid public key before\n * using any other uECC functions. However, you may wish to avoid spending CPU\n * time computing a shared secret or verifying a signature using an invalid\n * public key.\n */\nint uECC_valid_public_key(const uint8_t *public_key, uECC_Curve curve);\n\n/*\n  * @brief Converts an integer in uECC native format to big-endian bytes.\n  * @param bytes OUT -- bytes representation\n  * @param num_bytes IN -- number of bytes\n  * @param native IN -- uECC native representation\n  */\nvoid uECC_vli_nativeToBytes(uint8_t *bytes, int num_bytes,\n                            const unsigned int *native);\n\n/*\n * @brief Converts big-endian bytes to an integer in uECC native format.\n * @param native OUT -- uECC native representation\n * @param bytes IN -- bytes representation\n * @param num_bytes IN -- number of bytes\n */\nvoid uECC_vli_bytesToNative(unsigned int *native, const uint8_t *bytes,\n                            int num_bytes);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __TC_UECC_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/include/tinycrypt/ecc_dh.h",
    "content": "/* ecc_dh.h - TinyCrypt interface to EC-DH implementation */\n\n/*\n * Copyright (c) 2014, Kenneth MacKay\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n *   list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n *   this list of conditions and the following disclaimer in the documentation\n *   and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @file\n * @brief -- Interface to EC-DH implementation.\n *\n *  Overview: This software is an implementation of EC-DH. This implementation\n *            uses curve NIST p-256.\n *\n *  Security: The curve NIST p-256 provides approximately 128 bits of security.\n */\n\n#ifndef __TC_ECC_DH_H__\n#define __TC_ECC_DH_H__\n\n#include \"ecc.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**\n * @brief Create a public/private key pair.\n * @return returns TC_CRYPTO_SUCCESS (1) if the key pair was generated successfully\n *         returns TC_CRYPTO_FAIL (0) if error while generating key pair\n *\n * @param p_public_key OUT -- Will be filled in with the public key. Must be at\n * least 2 * the curve size (in bytes) long. For curve secp256r1, p_public_key\n * must be 64 bytes long.\n * @param p_private_key OUT -- Will be filled in with the private key. Must be as\n * long as the curve order (for secp256r1, p_private_key must be 32 bytes long).\n *\n * @note side-channel countermeasure: algorithm strengthened against timing\n * attack.\n * @warning A cryptographically-secure PRNG function must be set (using\n * uECC_set_rng()) before calling uECC_make_key().\n */\nint uECC_make_key(uint8_t *p_public_key, uint8_t *p_private_key, uECC_Curve curve);\n\n#ifdef ENABLE_TESTS\n\n/**\n * @brief Create a public/private key pair given a specific d.\n *\n * @note THIS FUNCTION SHOULD BE CALLED ONLY FOR TEST PURPOSES. Refer to\n * uECC_make_key() function for real applications.\n */\nint uECC_make_key_with_d(uint8_t *p_public_key, uint8_t *p_private_key,\n                         unsigned int *d, uECC_Curve curve);\n#endif\n\n/**\n * @brief Compute a shared secret given your secret key and someone else's\n * public key.\n * @return returns TC_CRYPTO_SUCCESS (1) if the shared secret was computed successfully\n *         returns TC_CRYPTO_FAIL (0) otherwise\n *\n * @param p_secret OUT -- Will be filled in with the shared secret value. Must be\n * the same size as the curve size (for curve secp256r1, secret must be 32 bytes\n * long.\n * @param p_public_key IN -- The public key of the remote party.\n * @param p_private_key IN -- Your private key.\n *\n * @warning It is recommended to use the output of uECC_shared_secret() as the\n * input of a recommended Key Derivation Function (see NIST SP 800-108) in\n * order to produce a cryptographically secure symmetric key.\n */\nint uECC_shared_secret(const uint8_t *p_public_key, const uint8_t *p_private_key,\n                       uint8_t *p_secret, uECC_Curve curve);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __TC_ECC_DH_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/include/tinycrypt/ecc_dsa.h",
    "content": "/* ecc_dh.h - TinyCrypt interface to EC-DSA implementation */\n\n/*\n * Copyright (c) 2014, Kenneth MacKay\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n *   list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n *   this list of conditions and the following disclaimer in the documentation\n *   and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n * Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @file\n * @brief -- Interface to EC-DSA implementation.\n *\n *  Overview: This software is an implementation of EC-DSA. This implementation\n *            uses curve NIST p-256.\n *\n *  Security: The curve NIST p-256 provides approximately 128 bits of security.\n *\n *  Usage:  - To sign: Compute a hash of the data you wish to sign (SHA-2 is\n *          recommended) and pass it in to ecdsa_sign function along with your\n *          private key and a random number. You must use a new non-predictable\n *          random number to generate each new signature.\n *          - To verify a signature: Compute the hash of the signed data using\n *          the same hash as the signer and pass it to this function along with\n *          the signer's public key and the signature values (r and s).\n */\n\n#ifndef __TC_ECC_DSA_H__\n#define __TC_ECC_DSA_H__\n\n#include \"ecc.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**\n * @brief Generate an ECDSA signature for a given hash value.\n * @return returns TC_CRYPTO_SUCCESS (1) if the signature generated successfully\n *         returns TC_CRYPTO_FAIL (0) if an error occurred.\n *\n * @param p_private_key IN -- Your private key.\n * @param p_message_hash IN -- The hash of the message to sign.\n * @param p_hash_size IN -- The size of p_message_hash in bytes.\n * @param p_signature OUT -- Will be filled in with the signature value. Must be\n * at least 2 * curve size long (for secp256r1, signature must be 64 bytes long).\n *\n * @warning A cryptographically-secure PRNG function must be set (using\n * uECC_set_rng()) before calling uECC_sign().\n * @note Usage: Compute a hash of the data you wish to sign (SHA-2 is\n * recommended) and pass it in to this function along with your private key.\n * @note side-channel countermeasure: algorithm strengthened against timing\n * attack.\n */\nint uECC_sign(const uint8_t *p_private_key, const uint8_t *p_message_hash,\n              unsigned p_hash_size, uint8_t *p_signature, uECC_Curve curve);\n\n#ifdef ENABLE_TESTS\n/*\n * THIS FUNCTION SHOULD BE CALLED FOR TEST PURPOSES ONLY.\n * Refer to uECC_sign() function for real applications.\n */\nint uECC_sign_with_k(const uint8_t *private_key, const uint8_t *message_hash,\n                     unsigned int hash_size, uECC_word_t *k, uint8_t *signature,\n                     uECC_Curve curve);\n#endif\n\n/**\n * @brief Verify an ECDSA signature.\n * @return returns TC_SUCCESS (1) if the signature is valid\n * \t   returns TC_FAIL (0) if the signature is invalid.\n *\n * @param p_public_key IN -- The signer's public key.\n * @param p_message_hash IN -- The hash of the signed data.\n * @param p_hash_size IN -- The size of p_message_hash in bytes.\n * @param p_signature IN -- The signature values.\n *\n * @note Usage: Compute the hash of the signed data using the same hash as the\n * signer and pass it to this function along with the signer's public key and\n * the signature values (hash_size and signature).\n */\nint uECC_verify(const uint8_t *p_public_key, const uint8_t *p_message_hash,\n                unsigned int p_hash_size, const uint8_t *p_signature, uECC_Curve curve);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __TC_ECC_DSA_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/include/tinycrypt/ecc_platform_specific.h",
    "content": "/*  uECC_platform_specific.h - Interface to platform specific functions*/\n\n/* Copyright (c) 2014, Kenneth MacKay\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *  * Redistributions of source code must retain the above copyright notice,\n *    this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.*/\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n *\n *  uECC_platform_specific.h -- Interface to platform specific functions\n */\n\n#ifndef __UECC_PLATFORM_SPECIFIC_H_\n#define __UECC_PLATFORM_SPECIFIC_H_\n\n/*\n * The RNG function should fill 'size' random bytes into 'dest'. It should\n * return 1 if 'dest' was filled with random data, or 0 if the random data could\n * not be generated. The filled-in values should be either truly random, or from\n * a cryptographically-secure PRNG.\n *\n * A cryptographically-secure PRNG function must be set (using uECC_set_rng())\n * before calling uECC_make_key() or uECC_sign().\n *\n * Setting a cryptographically-secure PRNG function improves the resistance to\n * side-channel attacks for uECC_shared_secret().\n *\n * A correct PRNG function is set by default (default_RNG_defined = 1) and works\n * for some platforms, such as Unix and Linux. For other platforms, you may need\n * to provide another PRNG function.\n*/\n#define default_RNG_defined 1\n\nint default_CSPRNG(uint8_t *dest, unsigned int size);\n\n#endif /* __UECC_PLATFORM_SPECIFIC_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/include/tinycrypt/hmac.h",
    "content": "/* hmac.h - TinyCrypt interface to an HMAC implementation */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @file\n * @brief Interface to an HMAC implementation.\n *\n *  Overview:   HMAC is a message authentication code based on hash functions.\n *              TinyCrypt hard codes SHA-256 as the hash function. A message\n *              authentication code based on hash functions is also called a\n *              keyed cryptographic hash function since it performs a\n *              transformation specified by a key in an arbitrary length data\n *              set into a fixed length data set (also called tag).\n *\n *  Security:   The security of the HMAC depends on the length of the key and\n *              on the security of the hash function. Note that HMAC primitives\n *              are much less affected by collision attacks than their\n *              corresponding hash functions.\n *\n *  Requires:   SHA-256\n *\n *  Usage:      1) call tc_hmac_set_key to set the HMAC key.\n *\n *              2) call tc_hmac_init to initialize a struct hash_state before\n *              processing the data.\n *\n *              3) call tc_hmac_update to process the next input segment;\n *              tc_hmac_update can be called as many times as needed to process\n *              all of the segments of the input; the order is important.\n *\n *              4) call tc_hmac_final to out put the tag.\n */\n\n#ifndef __TC_HMAC_H__\n#define __TC_HMAC_H__\n\n#include \"sha256.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstruct tc_hmac_state_struct {\n    /* the internal state required by h */\n    struct tc_sha256_state_struct hash_state;\n    /* HMAC key schedule */\n    uint8_t key[2 * TC_SHA256_BLOCK_SIZE];\n};\ntypedef struct tc_hmac_state_struct *TCHmacState_t;\n\n/**\n *  @brief HMAC set key procedure\n *  Configures ctx to use key\n *  @return returns TC_CRYPTO_SUCCESS (1)\n *          returns TC_CRYPTO_FAIL (0) if\n *                ctx == NULL or\n *                key == NULL or\n *                key_size == 0\n * @param ctx IN/OUT -- the struct tc_hmac_state_struct to initial\n * @param key IN -- the HMAC key to configure\n * @param key_size IN -- the HMAC key size\n */\nint tc_hmac_set_key(TCHmacState_t ctx, const uint8_t *key,\n                    unsigned int key_size);\n\n/**\n * @brief HMAC init procedure\n * Initializes ctx to begin the next HMAC operation\n * @return returns TC_CRYPTO_SUCCESS (1)\n *         returns TC_CRYPTO_FAIL (0) if: ctx == NULL or key == NULL\n * @param ctx IN/OUT -- struct tc_hmac_state_struct buffer to init\n */\nint tc_hmac_init(TCHmacState_t ctx);\n\n/**\n *  @brief HMAC update procedure\n *  Mixes data_length bytes addressed by data into state\n *  @return returns TC_CRYPTO_SUCCCESS (1)\n *          returns TC_CRYPTO_FAIL (0) if: ctx == NULL or key == NULL\n *  @note Assumes state has been initialized by tc_hmac_init\n *  @param ctx IN/OUT -- state of HMAC computation so far\n *  @param data IN -- data to incorporate into state\n *  @param data_length IN -- size of data in bytes\n */\nint tc_hmac_update(TCHmacState_t ctx, const void *data,\n                   unsigned int data_length);\n\n/**\n *  @brief HMAC final procedure\n *  Writes the HMAC tag into the tag buffer\n *  @return returns TC_CRYPTO_SUCCESS (1)\n *          returns TC_CRYPTO_FAIL (0) if:\n *                tag == NULL or\n *                ctx == NULL or\n *                key == NULL or\n *                taglen != TC_SHA256_DIGEST_SIZE\n *  @note ctx is erased before exiting. This should never be changed/removed.\n *  @note Assumes the tag bufer is at least sizeof(hmac_tag_size(state)) bytes\n *  state has been initialized by tc_hmac_init\n *  @param tag IN/OUT -- buffer to receive computed HMAC tag\n *  @param taglen IN -- size of tag in bytes\n *  @param ctx IN/OUT -- the HMAC state for computing tag\n */\nint tc_hmac_final(uint8_t *tag, unsigned int taglen, TCHmacState_t ctx);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /*__TC_HMAC_H__*/\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/include/tinycrypt/hmac_prng.h",
    "content": "/* hmac_prng.h - TinyCrypt interface to an HMAC-PRNG implementation */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @file\n * @brief Interface to an HMAC-PRNG implementation.\n *\n *  Overview:   A pseudo-random number generator (PRNG) generates a sequence\n *              of numbers that have a distribution close to the one expected\n *              for a sequence of truly random numbers. The NIST Special\n *              Publication 800-90A specifies several mechanisms to generate\n *              sequences of pseudo random numbers, including the HMAC-PRNG one\n *              which is based on HMAC. TinyCrypt implements HMAC-PRNG with\n *              certain modifications from the NIST SP 800-90A spec.\n *\n *  Security:   A cryptographically secure PRNG depends on the existence of an\n *              entropy source to provide a truly random seed as well as the\n *              security of the primitives used as the building blocks (HMAC and\n *              SHA256, for TinyCrypt).\n *\n *              The NIST SP 800-90A standard tolerates a null personalization,\n *              while TinyCrypt requires a non-null personalization. This is\n *              because a personalization string (the host name concatenated\n *              with a time stamp, for example) is easily computed and might be\n *              the last line of defense against failure of the entropy source.\n *\n *  Requires:   - SHA-256\n *              - HMAC\n *\n *  Usage:      1) call tc_hmac_prng_init to set the HMAC key and process the\n *              personalization data.\n *\n *              2) call tc_hmac_prng_reseed to process the seed and additional\n *              input.\n *\n *              3) call tc_hmac_prng_generate to out put the pseudo-random data.\n */\n\n#ifndef __TC_HMAC_PRNG_H__\n#define __TC_HMAC_PRNG_H__\n\n#include \"sha256.h\"\n#include \"hmac.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define TC_HMAC_PRNG_RESEED_REQ -1\n\nstruct tc_hmac_prng_struct {\n    /* the HMAC instance for this PRNG */\n    struct tc_hmac_state_struct h;\n    /* the PRNG key */\n    uint8_t key[TC_SHA256_DIGEST_SIZE];\n    /* PRNG state */\n    uint8_t v[TC_SHA256_DIGEST_SIZE];\n    /* calls to tc_hmac_prng_generate left before re-seed */\n    unsigned int countdown;\n};\n\ntypedef struct tc_hmac_prng_struct *TCHmacPrng_t;\n\n/**\n *  @brief HMAC-PRNG initialization procedure\n *  Initializes prng with personalization, disables tc_hmac_prng_generate\n *  @return returns TC_CRYPTO_SUCCESS (1)\n *          returns TC_CRYPTO_FAIL (0) if:\n *                prng == NULL,\n *                personalization == NULL,\n *                plen > MAX_PLEN\n *  @note Assumes: - personalization != NULL.\n *              The personalization is a platform unique string (e.g., the host\n *              name) and is the last line of defense against failure of the\n *              entropy source\n *  @warning    NIST SP 800-90A specifies 3 items as seed material during\n *              initialization: entropy seed, personalization, and an optional\n *              nonce. TinyCrypts requires instead a non-null personalization\n *              (which is easily computed) and indirectly requires an entropy\n *              seed (since the reseed function is mandatorily called after\n *              init)\n *  @param prng IN/OUT -- the PRNG state to initialize\n *  @param personalization IN -- personalization string\n *  @param plen IN -- personalization length in bytes\n */\nint tc_hmac_prng_init(TCHmacPrng_t prng,\n                      const uint8_t *personalization,\n                      unsigned int plen);\n\n/**\n *  @brief HMAC-PRNG reseed procedure\n *  Mixes seed into prng, enables tc_hmac_prng_generate\n *  @return returns  TC_CRYPTO_SUCCESS (1)\n *  \t    returns TC_CRYPTO_FAIL (0) if:\n *          prng == NULL,\n *          seed == NULL,\n *          seedlen < MIN_SLEN,\n *          seendlen > MAX_SLEN,\n *          additional_input != (const uint8_t *) 0 && additionallen == 0,\n *          additional_input != (const uint8_t *) 0 && additionallen > MAX_ALEN\n *  @note Assumes:- tc_hmac_prng_init has been called for prng\n *              - seed has sufficient entropy.\n *\n *  @param prng IN/OUT -- the PRNG state\n *  @param seed IN -- entropy to mix into the prng\n *  @param seedlen IN -- length of seed in bytes\n *  @param additional_input IN -- additional input to the prng\n *  @param additionallen IN -- additional input length in bytes\n */\nint tc_hmac_prng_reseed(TCHmacPrng_t prng, const uint8_t *seed,\n                        unsigned int seedlen, const uint8_t *additional_input,\n                        unsigned int additionallen);\n\n/**\n *  @brief HMAC-PRNG generate procedure\n *  Generates outlen pseudo-random bytes into out buffer, updates prng\n *  @return returns TC_CRYPTO_SUCCESS (1)\n *          returns TC_HMAC_PRNG_RESEED_REQ (-1) if a reseed is needed\n *          returns TC_CRYPTO_FAIL (0) if:\n *                out == NULL,\n *                prng == NULL,\n *                outlen == 0,\n *                outlen >= MAX_OUT\n *  @note Assumes tc_hmac_prng_init has been called for prng\n *  @param out IN/OUT -- buffer to receive output\n *  @param outlen IN -- size of out buffer in bytes\n *  @param prng IN/OUT -- the PRNG state\n */\nint tc_hmac_prng_generate(uint8_t *out, unsigned int outlen, TCHmacPrng_t prng);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __TC_HMAC_PRNG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/include/tinycrypt/sha256.h",
    "content": "/* sha256.h - TinyCrypt interface to a SHA-256 implementation */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @file\n * @brief Interface to a SHA-256 implementation.\n *\n *  Overview:   SHA-256 is a NIST approved cryptographic hashing algorithm\n *              specified in FIPS 180. A hash algorithm maps data of arbitrary\n *              size to data of fixed length.\n *\n *  Security:   SHA-256 provides 128 bits of security against collision attacks\n *              and 256 bits of security against pre-image attacks. SHA-256 does\n *              NOT behave like a random oracle, but it can be used as one if\n *              the string being hashed is prefix-free encoded before hashing.\n *\n *  Usage:      1) call tc_sha256_init to initialize a struct\n *              tc_sha256_state_struct before hashing a new string.\n *\n *              2) call tc_sha256_update to hash the next string segment;\n *              tc_sha256_update can be called as many times as needed to hash\n *              all of the segments of a string; the order is important.\n *\n *              3) call tc_sha256_final to out put the digest from a hashing\n *              operation.\n */\n\n#ifndef __TC_SHA256_H__\n#define __TC_SHA256_H__\n\n#include <stddef.h>\n#include <stdint.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define TC_SHA256_BLOCK_SIZE   (64)\n#define TC_SHA256_DIGEST_SIZE  (32)\n#define TC_SHA256_STATE_BLOCKS (TC_SHA256_DIGEST_SIZE / 4)\n\nstruct tc_sha256_state_struct {\n    unsigned int iv[TC_SHA256_STATE_BLOCKS];\n    uint64_t bits_hashed;\n    uint8_t leftover[TC_SHA256_BLOCK_SIZE];\n    size_t leftover_offset;\n};\n\ntypedef struct tc_sha256_state_struct *TCSha256State_t;\n\n/**\n *  @brief SHA256 initialization procedure\n *  Initializes s\n *  @return returns TC_CRYPTO_SUCCESS (1)\n *          returns TC_CRYPTO_FAIL (0) if s == NULL\n *  @param s Sha256 state struct\n */\nint tc_sha256_init(TCSha256State_t s);\n\n/**\n *  @brief SHA256 update procedure\n *  Hashes data_length bytes addressed by data into state s\n *  @return returns TC_CRYPTO_SUCCESS (1)\n *          returns TC_CRYPTO_FAIL (0) if:\n *                s == NULL,\n *                s->iv == NULL,\n *                data == NULL\n *  @note Assumes s has been initialized by tc_sha256_init\n *  @warning The state buffer 'leftover' is left in memory after processing\n *           If your application intends to have sensitive data in this\n *           buffer, remind to erase it after the data has been processed\n *  @param s Sha256 state struct\n *  @param data message to hash\n *  @param datalen length of message to hash\n */\nint tc_sha256_update(TCSha256State_t s, const uint8_t *data, size_t datalen);\n\n/**\n *  @brief SHA256 final procedure\n *  Inserts the completed hash computation into digest\n *  @return returns TC_CRYPTO_SUCCESS (1)\n *          returns TC_CRYPTO_FAIL (0) if:\n *                s == NULL,\n *                s->iv == NULL,\n *                digest == NULL\n *  @note Assumes: s has been initialized by tc_sha256_init\n *        digest points to at least TC_SHA256_DIGEST_SIZE bytes\n *  @warning The state buffer 'leftover' is left in memory after processing\n *           If your application intends to have sensitive data in this\n *           buffer, remind to erase it after the data has been processed\n *  @param digest unsigned eight bit integer\n *  @param Sha256 state struct\n */\nint tc_sha256_final(uint8_t *digest, TCSha256State_t s);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __TC_SHA256_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/include/tinycrypt/utils.h",
    "content": "/* utils.h - TinyCrypt interface to platform-dependent run-time operations */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @file\n * @brief Interface to platform-dependent run-time operations.\n *\n */\n\n#ifndef __TC_UTILS_H__\n#define __TC_UTILS_H__\n\n#include <stdint.h>\n#include <stddef.h>\n#include <string.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**\n * @brief Copy the the buffer 'from' to the buffer 'to'.\n * @return returns TC_CRYPTO_SUCCESS (1)\n *         returns TC_CRYPTO_FAIL (0) if:\n *                from_len > to_len.\n *\n * @param to OUT -- destination buffer\n * @param to_len IN -- length of destination buffer\n * @param from IN -- origin buffer\n * @param from_len IN -- length of origin buffer\n */\nunsigned int _copy(uint8_t *to, unsigned int to_len,\n                   const uint8_t *from, unsigned int from_len);\n\n/**\n * @brief Set the value 'val' into the buffer 'to', 'len' times.\n *\n * @param to OUT -- destination buffer\n * @param val IN -- value to be set in 'to'\n * @param len IN -- number of times the value will be copied\n */\nvoid _set(void *to, uint8_t val, unsigned int len);\n\n/**\n * @brief Set the value 'val' into the buffer 'to', 'len' times, in a way\n *         which does not risk getting optimized out by the compiler\n *        In cases where the compiler does not set __GNUC__ and where the\n *         optimization level removes the memset, it may be necessary to\n *         implement a _set_secure function and define the\n *         TINYCRYPT_ARCH_HAS_SET_SECURE, which then can ensure that the\n *         memset does not get optimized out.\n *\n * @param to OUT -- destination buffer\n * @param val IN -- value to be set in 'to'\n * @param len IN -- number of times the value will be copied\n */\n#ifdef TINYCRYPT_ARCH_HAS_SET_SECURE\nextern void _set_secure(void *to, uint8_t val, unsigned int len);\n#else /* ! TINYCRYPT_ARCH_HAS_SET_SECURE */\nstatic inline void _set_secure(void *to, uint8_t val, unsigned int len)\n{\n    (void)memset(to, val, len);\n#ifdef __GNUC__\n    __asm__ __volatile__(\"\" ::\"g\"(to)\n                         : \"memory\");\n#endif /* __GNUC__ */\n}\n#endif /* TINYCRYPT_ARCH_HAS_SET_SECURE */\n\n/*\n * @brief AES specific doubling function, which utilizes\n * the finite field used by AES.\n * @return Returns a^2\n *\n * @param a IN/OUT -- value to be doubled\n */\nuint8_t _double_byte(uint8_t a);\n\n/*\n * @brief Constant-time algorithm to compare if two sequences of bytes are equal\n * @return Returns 0 if equal, and non-zero otherwise\n *\n * @param a IN -- sequence of bytes a\n * @param b IN -- sequence of bytes b\n * @param size IN -- size of sequences a and b\n */\nint _compare(const uint8_t *a, const uint8_t *b, size_t size);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __TC_UTILS_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/source/aes_decrypt.c",
    "content": "/* aes_decrypt.c - TinyCrypt implementation of AES decryption procedure */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <aes.h>\n#include <constants.h>\n#include <utils.h>\n\nstatic const uint8_t inv_sbox[256] = {\n    0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,\n    0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,\n    0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,\n    0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,\n    0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,\n    0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,\n    0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,\n    0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d};\n\nint tc_aes128_set_decrypt_key(TCAesKeySched_t s, const uint8_t *k) { return tc_aes128_set_encrypt_key(s, k); }\n\n#define mult8(a) (_double_byte(_double_byte(_double_byte(a))))\n#define mult9(a) (mult8(a) ^ (a))\n#define multb(a) (mult8(a) ^ _double_byte(a) ^ (a))\n#define multd(a) (mult8(a) ^ _double_byte(_double_byte(a)) ^ (a))\n#define multe(a) (mult8(a) ^ _double_byte(_double_byte(a)) ^ _double_byte(a))\n\nstatic inline void mult_row_column(uint8_t *out, const uint8_t *in) {\n  out[0] = multe(in[0]) ^ multb(in[1]) ^ multd(in[2]) ^ mult9(in[3]);\n  out[1] = mult9(in[0]) ^ multe(in[1]) ^ multb(in[2]) ^ multd(in[3]);\n  out[2] = multd(in[0]) ^ mult9(in[1]) ^ multe(in[2]) ^ multb(in[3]);\n  out[3] = multb(in[0]) ^ multd(in[1]) ^ mult9(in[2]) ^ multe(in[3]);\n}\n\nstatic inline void inv_mix_columns(uint8_t *s) {\n  uint8_t t[Nb * Nk];\n\n  mult_row_column(t, s);\n  mult_row_column(&t[Nb], s + Nb);\n  mult_row_column(&t[2 * Nb], s + (2 * Nb));\n  mult_row_column(&t[3 * Nb], s + (3 * Nb));\n  (void)_copy(s, sizeof(t), t, sizeof(t));\n}\n\nstatic inline void add_round_key(uint8_t *s, const unsigned int *k) {\n  s[0] ^= (uint8_t)(k[0] >> 24);\n  s[1] ^= (uint8_t)(k[0] >> 16);\n  s[2] ^= (uint8_t)(k[0] >> 8);\n  s[3] ^= (uint8_t)(k[0]);\n  s[4] ^= (uint8_t)(k[1] >> 24);\n  s[5] ^= (uint8_t)(k[1] >> 16);\n  s[6] ^= (uint8_t)(k[1] >> 8);\n  s[7] ^= (uint8_t)(k[1]);\n  s[8] ^= (uint8_t)(k[2] >> 24);\n  s[9] ^= (uint8_t)(k[2] >> 16);\n  s[10] ^= (uint8_t)(k[2] >> 8);\n  s[11] ^= (uint8_t)(k[2]);\n  s[12] ^= (uint8_t)(k[3] >> 24);\n  s[13] ^= (uint8_t)(k[3] >> 16);\n  s[14] ^= (uint8_t)(k[3] >> 8);\n  s[15] ^= (uint8_t)(k[3]);\n}\n\nstatic inline void inv_sub_bytes(uint8_t *s) {\n  unsigned int i;\n\n  for (i = 0; i < (Nb * Nk); ++i) {\n    s[i] = inv_sbox[s[i]];\n  }\n}\n\n/*\n * This inv_shift_rows also implements the matrix flip required for\n * inv_mix_columns, but performs it here to reduce the number of memory\n * operations.\n */\nstatic inline void inv_shift_rows(uint8_t *s) {\n  uint8_t t[Nb * Nk];\n\n  t[0]  = s[0];\n  t[1]  = s[13];\n  t[2]  = s[10];\n  t[3]  = s[7];\n  t[4]  = s[4];\n  t[5]  = s[1];\n  t[6]  = s[14];\n  t[7]  = s[11];\n  t[8]  = s[8];\n  t[9]  = s[5];\n  t[10] = s[2];\n  t[11] = s[15];\n  t[12] = s[12];\n  t[13] = s[9];\n  t[14] = s[6];\n  t[15] = s[3];\n  (void)_copy(s, sizeof(t), t, sizeof(t));\n}\n\nint tc_aes_decrypt(uint8_t *out, const uint8_t *in, const TCAesKeySched_t s) {\n  uint8_t      state[Nk * Nb];\n  unsigned int i;\n\n  if (out == (uint8_t *)0) {\n    return TC_CRYPTO_FAIL;\n  } else if (in == (const uint8_t *)0) {\n    return TC_CRYPTO_FAIL;\n  } else if (s == (TCAesKeySched_t)0) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  (void)_copy(state, sizeof(state), in, sizeof(state));\n\n  add_round_key(state, s->words + Nb * Nr);\n\n  for (i = Nr - 1; i > 0; --i) {\n    inv_shift_rows(state);\n    inv_sub_bytes(state);\n    add_round_key(state, s->words + Nb * i);\n    inv_mix_columns(state);\n  }\n\n  inv_shift_rows(state);\n  inv_sub_bytes(state);\n  add_round_key(state, s->words);\n\n  (void)_copy(out, sizeof(state), state, sizeof(state));\n\n  /*zeroing out the state buffer */\n  _set(state, TC_ZERO_BYTE, sizeof(state));\n\n  return TC_CRYPTO_SUCCESS;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/source/aes_encrypt.c",
    "content": "/* aes_encrypt.c - TinyCrypt implementation of AES encryption procedure */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"aes.h\"\n#include \"constants.h\"\n#include \"utils.h\"\n\nstatic const uint8_t sbox[256] = {\n    0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,\n    0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,\n    0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,\n    0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,\n    0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,\n    0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,\n    0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,\n    0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16};\n\nstatic inline unsigned int rotword(unsigned int a) { return (((a) >> 24) | ((a) << 8)); }\n\n#define subbyte(a, o) (sbox[((a) >> (o)) & 0xff] << (o))\n#define subword(a)    (subbyte(a, 24) | subbyte(a, 16) | subbyte(a, 8) | subbyte(a, 0))\n\nint tc_aes128_set_encrypt_key(TCAesKeySched_t s, const uint8_t *k) {\n  const unsigned int rconst[11] = {0x00000000, 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, 0x20000000, 0x40000000, 0x80000000, 0x1b000000, 0x36000000};\n  unsigned int       i;\n  unsigned int       t;\n\n  if (s == (TCAesKeySched_t)0) {\n    return TC_CRYPTO_FAIL;\n  } else if (k == (const uint8_t *)0) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  for (i = 0; i < Nk; ++i) {\n    s->words[i] = (k[Nb * i] << 24) | (k[Nb * i + 1] << 16) | (k[Nb * i + 2] << 8) | (k[Nb * i + 3]);\n  }\n\n  for (; i < (Nb * (Nr + 1)); ++i) {\n    t = s->words[i - 1];\n    if ((i % Nk) == 0) {\n      t = subword(rotword(t)) ^ rconst[i / Nk];\n    }\n    s->words[i] = s->words[i - Nk] ^ t;\n  }\n\n  return TC_CRYPTO_SUCCESS;\n}\n\nstatic inline void add_round_key(uint8_t *s, const unsigned int *k) {\n  s[0] ^= (uint8_t)(k[0] >> 24);\n  s[1] ^= (uint8_t)(k[0] >> 16);\n  s[2] ^= (uint8_t)(k[0] >> 8);\n  s[3] ^= (uint8_t)(k[0]);\n  s[4] ^= (uint8_t)(k[1] >> 24);\n  s[5] ^= (uint8_t)(k[1] >> 16);\n  s[6] ^= (uint8_t)(k[1] >> 8);\n  s[7] ^= (uint8_t)(k[1]);\n  s[8] ^= (uint8_t)(k[2] >> 24);\n  s[9] ^= (uint8_t)(k[2] >> 16);\n  s[10] ^= (uint8_t)(k[2] >> 8);\n  s[11] ^= (uint8_t)(k[2]);\n  s[12] ^= (uint8_t)(k[3] >> 24);\n  s[13] ^= (uint8_t)(k[3] >> 16);\n  s[14] ^= (uint8_t)(k[3] >> 8);\n  s[15] ^= (uint8_t)(k[3]);\n}\n\nstatic inline void sub_bytes(uint8_t *s) {\n  unsigned int i;\n\n  for (i = 0; i < (Nb * Nk); ++i) {\n    s[i] = sbox[s[i]];\n  }\n}\n\n#define triple(a) (_double_byte(a) ^ (a))\n\nstatic inline void mult_row_column(uint8_t *out, const uint8_t *in) {\n  out[0] = _double_byte(in[0]) ^ triple(in[1]) ^ in[2] ^ in[3];\n  out[1] = in[0] ^ _double_byte(in[1]) ^ triple(in[2]) ^ in[3];\n  out[2] = in[0] ^ in[1] ^ _double_byte(in[2]) ^ triple(in[3]);\n  out[3] = triple(in[0]) ^ in[1] ^ in[2] ^ _double_byte(in[3]);\n}\n\nstatic inline void mix_columns(uint8_t *s) {\n  uint8_t t[Nb * Nk];\n\n  mult_row_column(t, s);\n  mult_row_column(&t[Nb], s + Nb);\n  mult_row_column(&t[2 * Nb], s + (2 * Nb));\n  mult_row_column(&t[3 * Nb], s + (3 * Nb));\n  (void)_copy(s, sizeof(t), t, sizeof(t));\n}\n\n/*\n * This shift_rows also implements the matrix flip required for mix_columns, but\n * performs it here to reduce the number of memory operations.\n */\nstatic inline void shift_rows(uint8_t *s) {\n  uint8_t t[Nb * Nk];\n\n  t[0]  = s[0];\n  t[1]  = s[5];\n  t[2]  = s[10];\n  t[3]  = s[15];\n  t[4]  = s[4];\n  t[5]  = s[9];\n  t[6]  = s[14];\n  t[7]  = s[3];\n  t[8]  = s[8];\n  t[9]  = s[13];\n  t[10] = s[2];\n  t[11] = s[7];\n  t[12] = s[12];\n  t[13] = s[1];\n  t[14] = s[6];\n  t[15] = s[11];\n  (void)_copy(s, sizeof(t), t, sizeof(t));\n}\n\nint tc_aes_encrypt(uint8_t *out, const uint8_t *in, const TCAesKeySched_t s) {\n  uint8_t      state[Nk * Nb];\n  unsigned int i;\n\n  if (out == (uint8_t *)0) {\n    return TC_CRYPTO_FAIL;\n  } else if (in == (const uint8_t *)0) {\n    return TC_CRYPTO_FAIL;\n  } else if (s == (TCAesKeySched_t)0) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  (void)_copy(state, sizeof(state), in, sizeof(state));\n  add_round_key(state, s->words);\n\n  for (i = 0; i < (Nr - 1); ++i) {\n    sub_bytes(state);\n    shift_rows(state);\n    mix_columns(state);\n    add_round_key(state, s->words + Nb * (i + 1));\n  }\n\n  sub_bytes(state);\n  shift_rows(state);\n  add_round_key(state, s->words + Nb * (i + 1));\n\n  (void)_copy(out, sizeof(state), state, sizeof(state));\n\n  /* zeroing out the state buffer */\n  _set(state, TC_ZERO_BYTE, sizeof(state));\n\n  return TC_CRYPTO_SUCCESS;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/source/cbc_mode.c",
    "content": "/* cbc_mode.c - TinyCrypt implementation of CBC mode encryption & decryption */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"cbc_mode.h\"\n#include \"constants.h\"\n#include \"utils.h\"\n\nint tc_cbc_mode_encrypt(uint8_t *out, unsigned int outlen, const uint8_t *in, unsigned int inlen, const uint8_t *iv, const TCAesKeySched_t sched) {\n  uint8_t      buffer[TC_AES_BLOCK_SIZE];\n  unsigned int n, m;\n\n  /* input sanity check: */\n  if (out == (uint8_t *)0 || in == (const uint8_t *)0 || sched == (TCAesKeySched_t)0 || inlen == 0 || outlen == 0 || (inlen % TC_AES_BLOCK_SIZE) != 0 || (outlen % TC_AES_BLOCK_SIZE) != 0 ||\n      outlen != inlen + TC_AES_BLOCK_SIZE) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  /* copy iv to the buffer */\n  (void)_copy(buffer, TC_AES_BLOCK_SIZE, iv, TC_AES_BLOCK_SIZE);\n  /* copy iv to the output buffer */\n  (void)_copy(out, TC_AES_BLOCK_SIZE, iv, TC_AES_BLOCK_SIZE);\n  out += TC_AES_BLOCK_SIZE;\n\n  for (n = m = 0; n < inlen; ++n) {\n    buffer[m++] ^= *in++;\n    if (m == TC_AES_BLOCK_SIZE) {\n      (void)tc_aes_encrypt(buffer, buffer, sched);\n      (void)_copy(out, TC_AES_BLOCK_SIZE, buffer, TC_AES_BLOCK_SIZE);\n      out += TC_AES_BLOCK_SIZE;\n      m = 0;\n    }\n  }\n\n  return TC_CRYPTO_SUCCESS;\n}\n\nint tc_cbc_mode_decrypt(uint8_t *out, unsigned int outlen, const uint8_t *in, unsigned int inlen, const uint8_t *iv, const TCAesKeySched_t sched) {\n  uint8_t        buffer[TC_AES_BLOCK_SIZE];\n  const uint8_t *p;\n  unsigned int   n, m;\n\n  /* sanity check the inputs */\n  if (out == (uint8_t *)0 || in == (const uint8_t *)0 || sched == (TCAesKeySched_t)0 || inlen == 0 || outlen == 0 || (inlen % TC_AES_BLOCK_SIZE) != 0 || (outlen % TC_AES_BLOCK_SIZE) != 0 ||\n      outlen != inlen) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  /*\n   * Note that in == iv + ciphertext, i.e. the iv and the ciphertext are\n   * contiguous. This allows for a very efficient decryption algorithm\n   * that would not otherwise be possible.\n   */\n  p = iv;\n  for (n = m = 0; n < outlen; ++n) {\n    if ((n % TC_AES_BLOCK_SIZE) == 0) {\n      (void)tc_aes_decrypt(buffer, in, sched);\n      in += TC_AES_BLOCK_SIZE;\n      m = 0;\n    }\n    *out++ = buffer[m++] ^ *p++;\n  }\n\n  return TC_CRYPTO_SUCCESS;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/source/ccm_mode.c",
    "content": "/* ccm_mode.c - TinyCrypt implementation of CCM mode */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"ccm_mode.h\"\n#include \"constants.h\"\n#include \"utils.h\"\n\n#include <stdio.h>\n\nint tc_ccm_config(TCCcmMode_t c, TCAesKeySched_t sched, uint8_t *nonce, unsigned int nlen, unsigned int mlen) {\n  /* input sanity check: */\n  if (c == (TCCcmMode_t)0 || sched == (TCAesKeySched_t)0 || nonce == (uint8_t *)0) {\n    return TC_CRYPTO_FAIL;\n  } else if (nlen != 13) {\n    return TC_CRYPTO_FAIL; /* The allowed nonce size is: 13. See documentation.*/\n  } else if ((mlen < 4) || (mlen > 16) || (mlen & 1)) {\n    return TC_CRYPTO_FAIL; /* The allowed mac sizes are: 4, 6, 8, 10, 12, 14, 16.*/\n  }\n\n  c->mlen  = mlen;\n  c->sched = sched;\n  c->nonce = nonce;\n\n  return TC_CRYPTO_SUCCESS;\n}\n\n/**\n * Variation of CBC-MAC mode used in CCM.\n */\nstatic void ccm_cbc_mac(uint8_t *T, const uint8_t *data, unsigned int dlen, unsigned int flag, TCAesKeySched_t sched) {\n  unsigned int i;\n\n  if (flag > 0) {\n    T[0] ^= (uint8_t)(dlen >> 8);\n    T[1] ^= (uint8_t)(dlen);\n    dlen += 2;\n    i = 2;\n  } else {\n    i = 0;\n  }\n\n  while (i < dlen) {\n    T[i++ % (Nb * Nk)] ^= *data++;\n    if (((i % (Nb * Nk)) == 0) || dlen == i) {\n      (void)tc_aes_encrypt(T, T, sched);\n    }\n  }\n}\n\n/**\n * Variation of CTR mode used in CCM.\n * The CTR mode used by CCM is slightly different than the conventional CTR\n * mode (the counter is increased before encryption, instead of after\n * encryption). Besides, it is assumed that the counter is stored in the last\n * 2 bytes of the nonce.\n */\nstatic int ccm_ctr_mode(uint8_t *out, unsigned int outlen, const uint8_t *in, unsigned int inlen, uint8_t *ctr, const TCAesKeySched_t sched) {\n  uint8_t      buffer[TC_AES_BLOCK_SIZE];\n  uint8_t      nonce[TC_AES_BLOCK_SIZE];\n  uint16_t     block_num;\n  unsigned int i;\n\n  /* input sanity check: */\n  if (out == (uint8_t *)0 || in == (uint8_t *)0 || ctr == (uint8_t *)0 || sched == (TCAesKeySched_t)0 || inlen == 0 || outlen == 0 || outlen != inlen) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  /* copy the counter to the nonce */\n  (void)_copy(nonce, sizeof(nonce), ctr, sizeof(nonce));\n\n  /* select the last 2 bytes of the nonce to be incremented */\n  block_num = (uint16_t)((nonce[14] << 8) | (nonce[15]));\n  for (i = 0; i < inlen; ++i) {\n    if ((i % (TC_AES_BLOCK_SIZE)) == 0) {\n      block_num++;\n      nonce[14] = (uint8_t)(block_num >> 8);\n      nonce[15] = (uint8_t)(block_num);\n      if (!tc_aes_encrypt(buffer, nonce, sched)) {\n        return TC_CRYPTO_FAIL;\n      }\n    }\n    /* update the output */\n    *out++ = buffer[i % (TC_AES_BLOCK_SIZE)] ^ *in++;\n  }\n\n  /* update the counter */\n  ctr[14] = nonce[14];\n  ctr[15] = nonce[15];\n\n  return TC_CRYPTO_SUCCESS;\n}\n\nint tc_ccm_generation_encryption(uint8_t *out, unsigned int olen, const uint8_t *associated_data, unsigned int alen, const uint8_t *payload, unsigned int plen, TCCcmMode_t c) {\n  /* input sanity check: */\n  if ((out == (uint8_t *)0) || (c == (TCCcmMode_t)0) || ((plen > 0) && (payload == (uint8_t *)0)) || ((alen > 0) && (associated_data == (uint8_t *)0)) ||\n      (alen >= TC_CCM_AAD_MAX_BYTES) ||     /* associated data size unsupported */\n      (plen >= TC_CCM_PAYLOAD_MAX_BYTES) || /* payload size unsupported */\n      (olen < (plen + c->mlen))) {          /* invalid output buffer size */\n    return TC_CRYPTO_FAIL;\n  }\n\n  uint8_t      b[Nb * Nk];\n  uint8_t      tag[Nb * Nk];\n  unsigned int i;\n\n  /* GENERATING THE AUTHENTICATION TAG: */\n\n  /* formatting the sequence b for authentication: */\n  b[0] = ((alen > 0) ? 0x40 : 0) | (((c->mlen - 2) / 2 << 3)) | (1);\n  for (i = 1; i <= 13; ++i) {\n    b[i] = c->nonce[i - 1];\n  }\n  b[14] = (uint8_t)(plen >> 8);\n  b[15] = (uint8_t)(plen);\n\n  /* computing the authentication tag using cbc-mac: */\n  (void)tc_aes_encrypt(tag, b, c->sched);\n  if (alen > 0) {\n    ccm_cbc_mac(tag, associated_data, alen, 1, c->sched);\n  }\n  if (plen > 0) {\n    ccm_cbc_mac(tag, payload, plen, 0, c->sched);\n  }\n\n  /* ENCRYPTION: */\n\n  /* formatting the sequence b for encryption: */\n  b[0]  = 1; /* q - 1 = 2 - 1 = 1 */\n  b[14] = b[15] = TC_ZERO_BYTE;\n\n  /* encrypting payload using ctr mode: */\n  ccm_ctr_mode(out, plen, payload, plen, b, c->sched);\n\n  b[14] = b[15] = TC_ZERO_BYTE; /* restoring initial counter for ctr_mode (0):*/\n\n  /* encrypting b and adding the tag to the output: */\n  (void)tc_aes_encrypt(b, b, c->sched);\n  out += plen;\n  for (i = 0; i < c->mlen; ++i) {\n    *out++ = tag[i] ^ b[i];\n  }\n\n  return TC_CRYPTO_SUCCESS;\n}\n\nint tc_ccm_decryption_verification(uint8_t *out, unsigned int olen, const uint8_t *associated_data, unsigned int alen, const uint8_t *payload, unsigned int plen, TCCcmMode_t c) {\n  /* input sanity check: */\n  if ((out == (uint8_t *)0) || (c == (TCCcmMode_t)0) || ((plen > 0) && (payload == (uint8_t *)0)) || ((alen > 0) && (associated_data == (uint8_t *)0)) ||\n      (alen >= TC_CCM_AAD_MAX_BYTES) ||     /* associated data size unsupported */\n      (plen >= TC_CCM_PAYLOAD_MAX_BYTES) || /* payload size unsupported */\n      (olen < plen - c->mlen)) {            /* invalid output buffer size */\n    return TC_CRYPTO_FAIL;\n  }\n\n  uint8_t      b[Nb * Nk];\n  uint8_t      tag[Nb * Nk];\n  unsigned int i;\n\n  /* DECRYPTION: */\n\n  /* formatting the sequence b for decryption: */\n  b[0] = 1; /* q - 1 = 2 - 1 = 1 */\n  for (i = 1; i < 14; ++i) {\n    b[i] = c->nonce[i - 1];\n  }\n  b[14] = b[15] = TC_ZERO_BYTE; /* initial counter value is 0 */\n\n  /* decrypting payload using ctr mode: */\n  ccm_ctr_mode(out, plen - c->mlen, payload, plen - c->mlen, b, c->sched);\n\n  b[14] = b[15] = TC_ZERO_BYTE; /* restoring initial counter value (0) */\n\n  /* encrypting b and restoring the tag from input: */\n  (void)tc_aes_encrypt(b, b, c->sched);\n  for (i = 0; i < c->mlen; ++i) {\n    tag[i] = *(payload + plen - c->mlen + i) ^ b[i];\n  }\n\n  /* VERIFYING THE AUTHENTICATION TAG: */\n\n  /* formatting the sequence b for authentication: */\n  b[0] = ((alen > 0) ? 0x40 : 0) | (((c->mlen - 2) / 2 << 3)) | (1);\n  for (i = 1; i < 14; ++i) {\n    b[i] = c->nonce[i - 1];\n  }\n  b[14] = (uint8_t)((plen - c->mlen) >> 8);\n  b[15] = (uint8_t)(plen - c->mlen);\n\n  /* computing the authentication tag using cbc-mac: */\n  (void)tc_aes_encrypt(b, b, c->sched);\n  if (alen > 0) {\n    ccm_cbc_mac(b, associated_data, alen, 1, c->sched);\n  }\n  if (plen > 0) {\n    ccm_cbc_mac(b, out, plen - c->mlen, 0, c->sched);\n  }\n\n  /* comparing the received tag and the computed one: */\n  if (_compare(b, tag, c->mlen) == 0) {\n    return TC_CRYPTO_SUCCESS;\n  } else {\n    /* erase the decrypted buffer in case of mac validation failure: */\n    _set(out, 0, plen - c->mlen);\n    return TC_CRYPTO_FAIL;\n  }\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/source/cmac_mode.c",
    "content": "/* cmac_mode.c - TinyCrypt CMAC mode implementation */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"cmac_mode.h\"\n#include \"aes.h\"\n#include \"constants.h\"\n#include \"utils.h\"\n\n/* max number of calls until change the key (2^48).*/\nstatic const uint64_t MAX_CALLS = ((uint64_t)1 << 48);\n\n/*\n *  gf_wrap -- In our implementation, GF(2^128) is represented as a 16 byte\n *  array with byte 0 the most significant and byte 15 the least significant.\n *  High bit carry reduction is based on the primitive polynomial\n *\n *                     X^128 + X^7 + X^2 + X + 1,\n *\n *  which leads to the reduction formula X^128 = X^7 + X^2 + X + 1. Indeed,\n *  since 0 = (X^128 + X^7 + X^2 + 1) mod (X^128 + X^7 + X^2 + X + 1) and since\n *  addition of polynomials with coefficients in Z/Z(2) is just XOR, we can\n *  add X^128 to both sides to get\n *\n *       X^128 = (X^7 + X^2 + X + 1) mod (X^128 + X^7 + X^2 + X + 1)\n *\n *  and the coefficients of the polynomial on the right hand side form the\n *  string 1000 0111 = 0x87, which is the value of gf_wrap.\n *\n *  This gets used in the following way. Doubling in GF(2^128) is just a left\n *  shift by 1 bit, except when the most significant bit is 1. In the latter\n *  case, the relation X^128 = X^7 + X^2 + X + 1 says that the high order bit\n *  that overflows beyond 128 bits can be replaced by addition of\n *  X^7 + X^2 + X + 1 <--> 0x87 to the low order 128 bits. Since addition\n *  in GF(2^128) is represented by XOR, we therefore only have to XOR 0x87\n *  into the low order byte after a left shift when the starting high order\n *  bit is 1.\n */\nconst unsigned char gf_wrap = 0x87;\n\n/*\n *  assumes: out != NULL and points to a GF(2^n) value to receive the\n *            doubled value;\n *           in != NULL and points to a 16 byte GF(2^n) value\n *            to double;\n *           the in and out buffers do not overlap.\n *  effects: doubles the GF(2^n) value pointed to by \"in\" and places\n *           the result in the GF(2^n) value pointed to by \"out.\"\n */\nvoid gf_double(uint8_t *out, uint8_t *in) {\n  /* start with low order byte */\n  uint8_t *x = in + (TC_AES_BLOCK_SIZE - 1);\n\n  /* if msb == 1, we need to add the gf_wrap value, otherwise add 0 */\n  uint8_t carry = (in[0] >> 7) ? gf_wrap : 0;\n\n  out += (TC_AES_BLOCK_SIZE - 1);\n  for (;;) {\n    *out-- = (*x << 1) ^ carry;\n    if (x == in) {\n      break;\n    }\n    carry = *x-- >> 7;\n  }\n}\n\nint tc_cmac_setup(TCCmacState_t s, const uint8_t *key, TCAesKeySched_t sched) {\n  /* input sanity check: */\n  if (s == (TCCmacState_t)0 || key == (const uint8_t *)0) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  /* put s into a known state */\n  _set(s, 0, sizeof(*s));\n  s->sched = sched;\n\n  /* configure the encryption key used by the underlying block cipher */\n  tc_aes128_set_encrypt_key(s->sched, key);\n\n  /* compute s->K1 and s->K2 from s->iv using s->keyid */\n  _set(s->iv, 0, TC_AES_BLOCK_SIZE);\n  tc_aes_encrypt(s->iv, s->iv, s->sched);\n  gf_double(s->K1, s->iv);\n  gf_double(s->K2, s->K1);\n\n  /* reset s->iv to 0 in case someone wants to compute now */\n  tc_cmac_init(s);\n\n  return TC_CRYPTO_SUCCESS;\n}\n\nint tc_cmac_erase(TCCmacState_t s) {\n  if (s == (TCCmacState_t)0) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  /* destroy the current state */\n  _set(s, 0, sizeof(*s));\n\n  return TC_CRYPTO_SUCCESS;\n}\n\nint tc_cmac_init(TCCmacState_t s) {\n  /* input sanity check: */\n  if (s == (TCCmacState_t)0) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  /* CMAC starts with an all zero initialization vector */\n  _set(s->iv, 0, TC_AES_BLOCK_SIZE);\n\n  /* and the leftover buffer is empty */\n  _set(s->leftover, 0, TC_AES_BLOCK_SIZE);\n  s->leftover_offset = 0;\n\n  /* Set countdown to max number of calls allowed before re-keying: */\n  s->countdown = MAX_CALLS;\n\n  return TC_CRYPTO_SUCCESS;\n}\n\nint tc_cmac_update(TCCmacState_t s, const uint8_t *data, size_t data_length) {\n  unsigned int i;\n\n  /* input sanity check: */\n  if (s == (TCCmacState_t)0) {\n    return TC_CRYPTO_FAIL;\n  }\n  if (data_length == 0) {\n    return TC_CRYPTO_SUCCESS;\n  }\n  if (data == (const uint8_t *)0) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  if (s->countdown == 0) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  s->countdown--;\n\n  if (s->leftover_offset > 0) {\n    /* last data added to s didn't end on a TC_AES_BLOCK_SIZE byte boundary */\n    size_t remaining_space = TC_AES_BLOCK_SIZE - s->leftover_offset;\n\n    if (data_length < remaining_space) {\n      /* still not enough data to encrypt this time either */\n      _copy(&s->leftover[s->leftover_offset], data_length, data, data_length);\n      s->leftover_offset += data_length;\n      return TC_CRYPTO_SUCCESS;\n    }\n    /* leftover block is now full; encrypt it first */\n    _copy(&s->leftover[s->leftover_offset], remaining_space, data, remaining_space);\n    data_length -= remaining_space;\n    data += remaining_space;\n    s->leftover_offset = 0;\n\n    for (i = 0; i < TC_AES_BLOCK_SIZE; ++i) {\n      s->iv[i] ^= s->leftover[i];\n    }\n    tc_aes_encrypt(s->iv, s->iv, s->sched);\n  }\n\n  /* CBC encrypt each (except the last) of the data blocks */\n  while (data_length > TC_AES_BLOCK_SIZE) {\n    for (i = 0; i < TC_AES_BLOCK_SIZE; ++i) {\n      s->iv[i] ^= data[i];\n    }\n    tc_aes_encrypt(s->iv, s->iv, s->sched);\n    data += TC_AES_BLOCK_SIZE;\n    data_length -= TC_AES_BLOCK_SIZE;\n  }\n\n  if (data_length > 0) {\n    /* save leftover data for next time */\n    _copy(s->leftover, data_length, data, data_length);\n    s->leftover_offset = data_length;\n  }\n\n  return TC_CRYPTO_SUCCESS;\n}\n\nint tc_cmac_final(uint8_t *tag, TCCmacState_t s) {\n  uint8_t     *k;\n  unsigned int i;\n\n  /* input sanity check: */\n  if (tag == (uint8_t *)0 || s == (TCCmacState_t)0) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  if (s->leftover_offset == TC_AES_BLOCK_SIZE) {\n    /* the last message block is a full-sized block */\n    k = (uint8_t *)s->K1;\n  } else {\n    /* the final message block is not a full-sized  block */\n    size_t remaining = TC_AES_BLOCK_SIZE - s->leftover_offset;\n\n    _set(&s->leftover[s->leftover_offset], 0, remaining);\n    s->leftover[s->leftover_offset] = TC_CMAC_PADDING;\n    k                               = (uint8_t *)s->K2;\n  }\n  for (i = 0; i < TC_AES_BLOCK_SIZE; ++i) {\n    s->iv[i] ^= s->leftover[i] ^ k[i];\n  }\n\n  tc_aes_encrypt(tag, s->iv, s->sched);\n\n  /* erasing state: */\n  tc_cmac_erase(s);\n\n  return TC_CRYPTO_SUCCESS;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/source/ctr_mode.c",
    "content": "/* ctr_mode.c - TinyCrypt CTR mode implementation */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"ctr_mode.h\"\n#include \"constants.h\"\n#include \"utils.h\"\n\nint tc_ctr_mode(uint8_t *out, unsigned int outlen, const uint8_t *in, unsigned int inlen, uint8_t *ctr, const TCAesKeySched_t sched) {\n  uint8_t      buffer[TC_AES_BLOCK_SIZE];\n  uint8_t      nonce[TC_AES_BLOCK_SIZE];\n  unsigned int block_num;\n  unsigned int i;\n\n  /* input sanity check: */\n  if (out == (uint8_t *)0 || in == (uint8_t *)0 || ctr == (uint8_t *)0 || sched == (TCAesKeySched_t)0 || inlen == 0 || outlen == 0 || outlen != inlen) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  /* copy the ctr to the nonce */\n  (void)_copy(nonce, sizeof(nonce), ctr, sizeof(nonce));\n\n  /* select the last 4 bytes of the nonce to be incremented */\n  block_num = (nonce[12] << 24) | (nonce[13] << 16) | (nonce[14] << 8) | (nonce[15]);\n  for (i = 0; i < inlen; ++i) {\n    if ((i % (TC_AES_BLOCK_SIZE)) == 0) {\n      /* encrypt data using the current nonce */\n      if (tc_aes_encrypt(buffer, nonce, sched)) {\n        block_num++;\n        nonce[12] = (uint8_t)(block_num >> 24);\n        nonce[13] = (uint8_t)(block_num >> 16);\n        nonce[14] = (uint8_t)(block_num >> 8);\n        nonce[15] = (uint8_t)(block_num);\n      } else {\n        return TC_CRYPTO_FAIL;\n      }\n    }\n    /* update the output */\n    *out++ = buffer[i % (TC_AES_BLOCK_SIZE)] ^ *in++;\n  }\n\n  /* update the counter */\n  ctr[12] = nonce[12];\n  ctr[13] = nonce[13];\n  ctr[14] = nonce[14];\n  ctr[15] = nonce[15];\n\n  return TC_CRYPTO_SUCCESS;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/source/ctr_prng.c",
    "content": "/* ctr_prng.c - TinyCrypt implementation of CTR-PRNG */\n\n/*\n * Copyright (c) 2016, Chris Morrison\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n *   list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n *   this list of conditions and the following disclaimer in the documentation\n *   and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"ctr_prng.h\"\n#include \"constants.h\"\n#include \"utils.h\"\n#include <string.h>\n\n/*\n * This PRNG is based on the CTR_DRBG described in Recommendation for Random\n * Number Generation Using Deterministic Random Bit Generators,\n * NIST SP 800-90A Rev. 1.\n *\n * Annotations to particular steps (e.g. 10.2.1.2 Step 1) refer to the steps\n * described in that document.\n *\n */\n\n/**\n *  @brief Array incrementer\n *  Treats the supplied array as one contiguous number (MSB in arr[0]), and\n *  increments it by one\n *  @return none\n *  @param arr IN/OUT -- array to be incremented\n *  @param len IN -- size of arr in bytes\n */\nstatic void arrInc(uint8_t arr[], unsigned int len) {\n  unsigned int i;\n  if (0 != arr) {\n    for (i = len; i > 0U; i--) {\n      if (++arr[i - 1] != 0U) {\n        break;\n      }\n    }\n  }\n}\n\n/**\n *  @brief CTR PRNG update\n *  Updates the internal state of supplied the CTR PRNG context\n *  increments it by one\n *  @return none\n *  @note Assumes: providedData is (TC_AES_KEY_SIZE + TC_AES_BLOCK_SIZE) bytes long\n *  @param ctx IN/OUT -- CTR PRNG state\n *  @param providedData IN -- data used when updating the internal state\n */\nstatic void tc_ctr_prng_update(TCCtrPrng_t *const ctx, uint8_t const *const providedData) {\n  if (0 != ctx) {\n    /* 10.2.1.2 step 1 */\n    uint8_t      temp[TC_AES_KEY_SIZE + TC_AES_BLOCK_SIZE];\n    unsigned int len = 0U;\n\n    /* 10.2.1.2 step 2 */\n    while (len < sizeof temp) {\n      unsigned int blocklen = sizeof(temp) - len;\n      uint8_t      output_block[TC_AES_BLOCK_SIZE];\n\n      /* 10.2.1.2 step 2.1 */\n      arrInc(ctx->V, sizeof ctx->V);\n\n      /* 10.2.1.2 step 2.2 */\n      if (blocklen > TC_AES_BLOCK_SIZE) {\n        blocklen = TC_AES_BLOCK_SIZE;\n      }\n      (void)tc_aes_encrypt(output_block, ctx->V, &ctx->key);\n\n      /* 10.2.1.2 step 2.3/step 3 */\n      memcpy(&(temp[len]), output_block, blocklen);\n\n      len += blocklen;\n    }\n\n    /* 10.2.1.2 step 4 */\n    if (0 != providedData) {\n      unsigned int i;\n      for (i = 0U; i < sizeof temp; i++) {\n        temp[i] ^= providedData[i];\n      }\n    }\n\n    /* 10.2.1.2 step 5 */\n    (void)tc_aes128_set_encrypt_key(&ctx->key, temp);\n\n    /* 10.2.1.2 step 6 */\n    memcpy(ctx->V, &(temp[TC_AES_KEY_SIZE]), TC_AES_BLOCK_SIZE);\n  }\n}\n\nint tc_ctr_prng_init(TCCtrPrng_t *const ctx, uint8_t const *const entropy, unsigned int entropyLen, uint8_t const *const personalization, unsigned int pLen) {\n  int          result = TC_CRYPTO_FAIL;\n  unsigned int i;\n  uint8_t      personalization_buf[TC_AES_KEY_SIZE + TC_AES_BLOCK_SIZE] = {0U};\n  uint8_t      seed_material[TC_AES_KEY_SIZE + TC_AES_BLOCK_SIZE];\n  uint8_t      zeroArr[TC_AES_BLOCK_SIZE] = {0U};\n\n  if (0 != personalization) {\n    /* 10.2.1.3.1 step 1 */\n    unsigned int len = pLen;\n    if (len > sizeof personalization_buf) {\n      len = sizeof personalization_buf;\n    }\n\n    /* 10.2.1.3.1 step 2 */\n    memcpy(personalization_buf, personalization, len);\n  }\n\n  if ((0 != ctx) && (0 != entropy) && (entropyLen >= sizeof seed_material)) {\n    /* 10.2.1.3.1 step 3 */\n    memcpy(seed_material, entropy, sizeof seed_material);\n    for (i = 0U; i < sizeof seed_material; i++) {\n      seed_material[i] ^= personalization_buf[i];\n    }\n\n    /* 10.2.1.3.1 step 4 */\n    (void)tc_aes128_set_encrypt_key(&ctx->key, zeroArr);\n\n    /* 10.2.1.3.1 step 5 */\n    memset(ctx->V, 0x00, sizeof ctx->V);\n\n    /* 10.2.1.3.1 step 6 */\n    tc_ctr_prng_update(ctx, seed_material);\n\n    /* 10.2.1.3.1 step 7 */\n    ctx->reseedCount = 1U;\n\n    result = TC_CRYPTO_SUCCESS;\n  }\n  return result;\n}\n\nint tc_ctr_prng_reseed(TCCtrPrng_t *const ctx, uint8_t const *const entropy, unsigned int entropyLen, uint8_t const *const additional_input, unsigned int additionallen) {\n  unsigned int i;\n  int          result                                                    = TC_CRYPTO_FAIL;\n  uint8_t      additional_input_buf[TC_AES_KEY_SIZE + TC_AES_BLOCK_SIZE] = {0U};\n  uint8_t      seed_material[TC_AES_KEY_SIZE + TC_AES_BLOCK_SIZE];\n\n  if (0 != additional_input) {\n    /* 10.2.1.4.1 step 1 */\n    unsigned int len = additionallen;\n    if (len > sizeof additional_input_buf) {\n      len = sizeof additional_input_buf;\n    }\n\n    /* 10.2.1.4.1 step 2 */\n    memcpy(additional_input_buf, additional_input, len);\n  }\n\n  unsigned int seedlen = (unsigned int)TC_AES_KEY_SIZE + (unsigned int)TC_AES_BLOCK_SIZE;\n  if ((0 != ctx) && (entropyLen >= seedlen)) {\n    /* 10.2.1.4.1 step 3 */\n    memcpy(seed_material, entropy, sizeof seed_material);\n    for (i = 0U; i < sizeof seed_material; i++) {\n      seed_material[i] ^= additional_input_buf[i];\n    }\n\n    /* 10.2.1.4.1 step 4 */\n    tc_ctr_prng_update(ctx, seed_material);\n\n    /* 10.2.1.4.1 step 5 */\n    ctx->reseedCount = 1U;\n\n    result = TC_CRYPTO_SUCCESS;\n  }\n  return result;\n}\n\nint tc_ctr_prng_generate(TCCtrPrng_t *const ctx, uint8_t const *const additional_input, unsigned int additionallen, uint8_t *const out, unsigned int outlen) {\n  /* 2^48 - see section 10.2.1 */\n  static const uint64_t MAX_REQS_BEFORE_RESEED = 0x1000000000000ULL;\n\n  /* 2^19 bits - see section 10.2.1 */\n  static const unsigned int MAX_BYTES_PER_REQ = 65536U;\n\n  unsigned int result = TC_CRYPTO_FAIL;\n\n  if ((0 != ctx) && (0 != out) && (outlen < MAX_BYTES_PER_REQ)) {\n    /* 10.2.1.5.1 step 1 */\n    if (ctx->reseedCount > MAX_REQS_BEFORE_RESEED) {\n      result = TC_CTR_PRNG_RESEED_REQ;\n    } else {\n      uint8_t additional_input_buf[TC_AES_KEY_SIZE + TC_AES_BLOCK_SIZE] = {0U};\n      if (0 != additional_input) {\n        /* 10.2.1.5.1 step 2  */\n        unsigned int len = additionallen;\n        if (len > sizeof additional_input_buf) {\n          len = sizeof additional_input_buf;\n        }\n        memcpy(additional_input_buf, additional_input, len);\n        tc_ctr_prng_update(ctx, additional_input_buf);\n      }\n\n      /* 10.2.1.5.1 step 3 - implicit */\n\n      /* 10.2.1.5.1 step 4 */\n      unsigned int len = 0U;\n      while (len < outlen) {\n        unsigned int blocklen = outlen - len;\n        uint8_t      output_block[TC_AES_BLOCK_SIZE];\n\n        /* 10.2.1.5.1 step 4.1 */\n        arrInc(ctx->V, sizeof ctx->V);\n\n        /* 10.2.1.5.1 step 4.2 */\n        (void)tc_aes_encrypt(output_block, ctx->V, &ctx->key);\n\n        /* 10.2.1.5.1 step 4.3/step 5 */\n        if (blocklen > TC_AES_BLOCK_SIZE) {\n          blocklen = TC_AES_BLOCK_SIZE;\n        }\n        memcpy(&(out[len]), output_block, blocklen);\n\n        len += blocklen;\n      }\n\n      /* 10.2.1.5.1 step 6 */\n      tc_ctr_prng_update(ctx, additional_input_buf);\n\n      /* 10.2.1.5.1 step 7 */\n      ctx->reseedCount++;\n\n      /* 10.2.1.5.1 step 8 */\n      result = TC_CRYPTO_SUCCESS;\n    }\n  }\n\n  return result;\n}\n\nvoid tc_ctr_prng_uninstantiate(TCCtrPrng_t *const ctx) {\n  if (0 != ctx) {\n    memset(ctx->key.words, 0x00, sizeof ctx->key.words);\n    memset(ctx->V, 0x00, sizeof ctx->V);\n    ctx->reseedCount = 0U;\n  }\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/source/ecc.c",
    "content": "/* ecc.c - TinyCrypt implementation of common ECC functions */\n\n/*\n * Copyright (c) 2014, Kenneth MacKay\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"ecc.h\"\n#include \"../include/tinycrypt/ecc.h\"\n#include \"ecc_platform_specific.h\"\n#include <string.h>\n\n/* IMPORTANT: Make sure a cryptographically-secure PRNG is set and the platform\n * has access to enough entropy in order to feed the PRNG regularly. */\n#if default_RNG_defined\nstatic uECC_RNG_Function g_rng_function = &default_CSPRNG;\n#else\nstatic uECC_RNG_Function g_rng_function = 0;\n#endif\n\nvoid uECC_set_rng(uECC_RNG_Function rng_function) { g_rng_function = rng_function; }\n\nuECC_RNG_Function uECC_get_rng(void) { return g_rng_function; }\n\nint uECC_curve_private_key_size(uECC_Curve curve) { return BITS_TO_BYTES(curve->num_n_bits); }\n\nint uECC_curve_public_key_size(uECC_Curve curve) { return 2 * curve->num_bytes; }\n\nvoid uECC_vli_clear(uECC_word_t *vli, wordcount_t num_words) {\n  wordcount_t i;\n  for (i = 0; i < num_words; ++i) {\n    vli[i] = 0;\n  }\n}\n\nuECC_word_t uECC_vli_isZero(const uECC_word_t *vli, wordcount_t num_words) {\n  uECC_word_t bits = 0;\n  wordcount_t i;\n  for (i = 0; i < num_words; ++i) {\n    bits |= vli[i];\n  }\n  return (bits == 0);\n}\n\nuECC_word_t uECC_vli_testBit(const uECC_word_t *vli, bitcount_t bit) { return (vli[bit >> uECC_WORD_BITS_SHIFT] & ((uECC_word_t)1 << (bit & uECC_WORD_BITS_MASK))); }\n\n/* Counts the number of words in vli. */\nstatic wordcount_t vli_numDigits(const uECC_word_t *vli, const wordcount_t max_words) {\n  wordcount_t i;\n  /* Search from the end until we find a non-zero digit. We do it in reverse\n   * because we expect that most digits will be nonzero. */\n  for (i = max_words - 1; i >= 0 && vli[i] == 0; --i) {\n  }\n\n  return (i + 1);\n}\n\nbitcount_t uECC_vli_numBits(const uECC_word_t *vli, const wordcount_t max_words) {\n  uECC_word_t i;\n  uECC_word_t digit;\n\n  wordcount_t num_digits = vli_numDigits(vli, max_words);\n  if (num_digits == 0) {\n    return 0;\n  }\n\n  digit = vli[num_digits - 1];\n  for (i = 0; digit; ++i) {\n    digit >>= 1;\n  }\n\n  return (((bitcount_t)(num_digits - 1) << uECC_WORD_BITS_SHIFT) + i);\n}\n\nvoid uECC_vli_set(uECC_word_t *dest, const uECC_word_t *src, wordcount_t num_words) {\n  wordcount_t i;\n\n  for (i = 0; i < num_words; ++i) {\n    dest[i] = src[i];\n  }\n}\n\ncmpresult_t uECC_vli_cmp_unsafe(const uECC_word_t *left, const uECC_word_t *right, wordcount_t num_words) {\n  wordcount_t i;\n\n  for (i = num_words - 1; i >= 0; --i) {\n    if (left[i] > right[i]) {\n      return 1;\n    } else if (left[i] < right[i]) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\nuECC_word_t uECC_vli_equal(const uECC_word_t *left, const uECC_word_t *right, wordcount_t num_words) {\n  uECC_word_t diff = 0;\n  wordcount_t i;\n\n  for (i = num_words - 1; i >= 0; --i) {\n    diff |= (left[i] ^ right[i]);\n  }\n  return !(diff == 0);\n}\n\nuECC_word_t cond_set(uECC_word_t p_true, uECC_word_t p_false, unsigned int cond) { return (p_true * (cond)) | (p_false * (!cond)); }\n\n/* Computes result = left - right, returning borrow, in constant time.\n * Can modify in place. */\nuECC_word_t uECC_vli_sub(uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, wordcount_t num_words) {\n  uECC_word_t borrow = 0;\n  wordcount_t i;\n  for (i = 0; i < num_words; ++i) {\n    uECC_word_t diff = left[i] - right[i] - borrow;\n    uECC_word_t val  = (diff > left[i]);\n    borrow           = cond_set(val, borrow, (diff != left[i]));\n\n    result[i] = diff;\n  }\n  return borrow;\n}\n\n/* Computes result = left + right, returning carry, in constant time.\n * Can modify in place. */\nstatic uECC_word_t uECC_vli_add(uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, wordcount_t num_words) {\n  uECC_word_t carry = 0;\n  wordcount_t i;\n  for (i = 0; i < num_words; ++i) {\n    uECC_word_t sum = left[i] + right[i] + carry;\n    uECC_word_t val = (sum < left[i]);\n    carry           = cond_set(val, carry, (sum != left[i]));\n    result[i]       = sum;\n  }\n  return carry;\n}\n\ncmpresult_t uECC_vli_cmp(const uECC_word_t *left, const uECC_word_t *right, wordcount_t num_words) {\n  uECC_word_t tmp[NUM_ECC_WORDS];\n  uECC_word_t neg   = !!uECC_vli_sub(tmp, left, right, num_words);\n  uECC_word_t equal = uECC_vli_isZero(tmp, num_words);\n  return (!equal - 2 * neg);\n}\n\n/* Computes vli = vli >> 1. */\nstatic void uECC_vli_rshift1(uECC_word_t *vli, wordcount_t num_words) {\n  uECC_word_t *end   = vli;\n  uECC_word_t  carry = 0;\n\n  vli += num_words;\n  while (vli-- > end) {\n    uECC_word_t temp = *vli;\n    *vli             = (temp >> 1) | carry;\n    carry            = temp << (uECC_WORD_BITS - 1);\n  }\n}\n\nstatic void muladd(uECC_word_t a, uECC_word_t b, uECC_word_t *r0, uECC_word_t *r1, uECC_word_t *r2) {\n  uECC_dword_t p   = (uECC_dword_t)a * b;\n  uECC_dword_t r01 = ((uECC_dword_t)(*r1) << uECC_WORD_BITS) | *r0;\n  r01 += p;\n  *r2 += (r01 < p);\n  *r1 = r01 >> uECC_WORD_BITS;\n  *r0 = (uECC_word_t)r01;\n}\n\n/* Computes result = left * right. Result must be 2 * num_words long. */\nstatic void uECC_vli_mult(uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, wordcount_t num_words) {\n  uECC_word_t r0 = 0;\n  uECC_word_t r1 = 0;\n  uECC_word_t r2 = 0;\n  wordcount_t i, k;\n\n  /* Compute each digit of result in sequence, maintaining the carries. */\n  for (k = 0; k < num_words; ++k) {\n    for (i = 0; i <= k; ++i) {\n      muladd(left[i], right[k - i], &r0, &r1, &r2);\n    }\n\n    result[k] = r0;\n    r0        = r1;\n    r1        = r2;\n    r2        = 0;\n  }\n\n  for (k = num_words; k < num_words * 2 - 1; ++k) {\n    for (i = (k + 1) - num_words; i < num_words; ++i) {\n      muladd(left[i], right[k - i], &r0, &r1, &r2);\n    }\n    result[k] = r0;\n    r0        = r1;\n    r1        = r2;\n    r2        = 0;\n  }\n  result[num_words * 2 - 1] = r0;\n}\n\nvoid uECC_vli_modAdd(uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, const uECC_word_t *mod, wordcount_t num_words) {\n  uECC_word_t carry = uECC_vli_add(result, left, right, num_words);\n  if (carry || uECC_vli_cmp_unsafe(mod, result, num_words) != 1) {\n    /* result > mod (result = mod + remainder), so subtract mod to get\n     * remainder. */\n    uECC_vli_sub(result, result, mod, num_words);\n  }\n}\n\nvoid uECC_vli_modSub(uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, const uECC_word_t *mod, wordcount_t num_words) {\n  uECC_word_t l_borrow = uECC_vli_sub(result, left, right, num_words);\n  if (l_borrow) {\n    /* In this case, result == -diff == (max int) - diff. Since -x % d == d - x,\n     * we can get the correct result from result + mod (with overflow). */\n    uECC_vli_add(result, result, mod, num_words);\n  }\n}\n\n/* Computes result = product % mod, where product is 2N words long. */\n/* Currently only designed to work for curve_p or curve_n. */\nvoid uECC_vli_mmod(uECC_word_t *result, uECC_word_t *product, const uECC_word_t *mod, wordcount_t num_words) {\n  uECC_word_t  mod_multiple[2 * NUM_ECC_WORDS];\n  uECC_word_t  tmp[2 * NUM_ECC_WORDS];\n  uECC_word_t *v[2] = {tmp, product};\n  uECC_word_t  index;\n\n  /* Shift mod so its highest set bit is at the maximum position. */\n  bitcount_t  shift      = (num_words * 2 * uECC_WORD_BITS) - uECC_vli_numBits(mod, num_words);\n  wordcount_t word_shift = shift / uECC_WORD_BITS;\n  wordcount_t bit_shift  = shift % uECC_WORD_BITS;\n  uECC_word_t carry      = 0;\n  uECC_vli_clear(mod_multiple, word_shift);\n  if (bit_shift > 0) {\n    for (index = 0; index < (uECC_word_t)num_words; ++index) {\n      mod_multiple[word_shift + index] = (mod[index] << bit_shift) | carry;\n      carry                            = mod[index] >> (uECC_WORD_BITS - bit_shift);\n    }\n  } else {\n    uECC_vli_set(mod_multiple + word_shift, mod, num_words);\n  }\n\n  for (index = 1; shift >= 0; --shift) {\n    uECC_word_t borrow = 0;\n    wordcount_t i;\n    for (i = 0; i < num_words * 2; ++i) {\n      uECC_word_t diff = v[index][i] - mod_multiple[i] - borrow;\n      if (diff != v[index][i]) {\n        borrow = (diff > v[index][i]);\n      }\n      v[1 - index][i] = diff;\n    }\n    /* Swap the index if there was no borrow */\n    index = !(index ^ borrow);\n    uECC_vli_rshift1(mod_multiple, num_words);\n    mod_multiple[num_words - 1] |= mod_multiple[num_words] << (uECC_WORD_BITS - 1);\n    uECC_vli_rshift1(mod_multiple + num_words, num_words);\n  }\n  uECC_vli_set(result, v[index], num_words);\n}\n\nvoid uECC_vli_modMult(uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, const uECC_word_t *mod, wordcount_t num_words) {\n  uECC_word_t product[2 * NUM_ECC_WORDS];\n  uECC_vli_mult(product, left, right, num_words);\n  uECC_vli_mmod(result, product, mod, num_words);\n}\n\nvoid uECC_vli_modMult_fast(uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, uECC_Curve curve) {\n  uECC_word_t product[2 * NUM_ECC_WORDS];\n  uECC_vli_mult(product, left, right, curve->num_words);\n\n  curve->mmod_fast(result, product);\n}\n\nstatic void uECC_vli_modSquare_fast(uECC_word_t *result, const uECC_word_t *left, uECC_Curve curve) { uECC_vli_modMult_fast(result, left, left, curve); }\n\n#define EVEN(vli) (!(vli[0] & 1))\n\nstatic void vli_modInv_update(uECC_word_t *uv, const uECC_word_t *mod, wordcount_t num_words) {\n  uECC_word_t carry = 0;\n\n  if (!EVEN(uv)) {\n    carry = uECC_vli_add(uv, uv, mod, num_words);\n  }\n  uECC_vli_rshift1(uv, num_words);\n  if (carry) {\n    uv[num_words - 1] |= HIGH_BIT_SET;\n  }\n}\n\nvoid uECC_vli_modInv(uECC_word_t *result, const uECC_word_t *input, const uECC_word_t *mod, wordcount_t num_words) {\n  uECC_word_t a[NUM_ECC_WORDS], b[NUM_ECC_WORDS];\n  uECC_word_t u[NUM_ECC_WORDS], v[NUM_ECC_WORDS];\n  cmpresult_t cmpResult;\n\n  if (uECC_vli_isZero(input, num_words)) {\n    uECC_vli_clear(result, num_words);\n    return;\n  }\n\n  uECC_vli_set(a, input, num_words);\n  uECC_vli_set(b, mod, num_words);\n  uECC_vli_clear(u, num_words);\n  u[0] = 1;\n  uECC_vli_clear(v, num_words);\n  while ((cmpResult = uECC_vli_cmp_unsafe(a, b, num_words)) != 0) {\n    if (EVEN(a)) {\n      uECC_vli_rshift1(a, num_words);\n      vli_modInv_update(u, mod, num_words);\n    } else if (EVEN(b)) {\n      uECC_vli_rshift1(b, num_words);\n      vli_modInv_update(v, mod, num_words);\n    } else if (cmpResult > 0) {\n      uECC_vli_sub(a, a, b, num_words);\n      uECC_vli_rshift1(a, num_words);\n      if (uECC_vli_cmp_unsafe(u, v, num_words) < 0) {\n        uECC_vli_add(u, u, mod, num_words);\n      }\n      uECC_vli_sub(u, u, v, num_words);\n      vli_modInv_update(u, mod, num_words);\n    } else {\n      uECC_vli_sub(b, b, a, num_words);\n      uECC_vli_rshift1(b, num_words);\n      if (uECC_vli_cmp_unsafe(v, u, num_words) < 0) {\n        uECC_vli_add(v, v, mod, num_words);\n      }\n      uECC_vli_sub(v, v, u, num_words);\n      vli_modInv_update(v, mod, num_words);\n    }\n  }\n  uECC_vli_set(result, u, num_words);\n}\n\n/* ------ Point operations ------ */\n\nvoid double_jacobian_default(uECC_word_t *X1, uECC_word_t *Y1, uECC_word_t *Z1, uECC_Curve curve) {\n  /* t1 = X, t2 = Y, t3 = Z */\n  uECC_word_t t4[NUM_ECC_WORDS];\n  uECC_word_t t5[NUM_ECC_WORDS];\n  wordcount_t num_words = curve->num_words;\n\n  if (uECC_vli_isZero(Z1, num_words)) {\n    return;\n  }\n\n  uECC_vli_modSquare_fast(t4, Y1, curve);   /* t4 = y1^2 */\n  uECC_vli_modMult_fast(t5, X1, t4, curve); /* t5 = x1*y1^2 = A */\n  uECC_vli_modSquare_fast(t4, t4, curve);   /* t4 = y1^4 */\n  uECC_vli_modMult_fast(Y1, Y1, Z1, curve); /* t2 = y1*z1 = z3 */\n  uECC_vli_modSquare_fast(Z1, Z1, curve);   /* t3 = z1^2 */\n\n  uECC_vli_modAdd(X1, X1, Z1, curve->p, num_words); /* t1 = x1 + z1^2 */\n  uECC_vli_modAdd(Z1, Z1, Z1, curve->p, num_words); /* t3 = 2*z1^2 */\n  uECC_vli_modSub(Z1, X1, Z1, curve->p, num_words); /* t3 = x1 - z1^2 */\n  uECC_vli_modMult_fast(X1, X1, Z1, curve);         /* t1 = x1^2 - z1^4 */\n\n  uECC_vli_modAdd(Z1, X1, X1, curve->p, num_words); /* t3 = 2*(x1^2 - z1^4) */\n  uECC_vli_modAdd(X1, X1, Z1, curve->p, num_words); /* t1 = 3*(x1^2 - z1^4) */\n  if (uECC_vli_testBit(X1, 0)) {\n    uECC_word_t l_carry = uECC_vli_add(X1, X1, curve->p, num_words);\n    uECC_vli_rshift1(X1, num_words);\n    X1[num_words - 1] |= l_carry << (uECC_WORD_BITS - 1);\n  } else {\n    uECC_vli_rshift1(X1, num_words);\n  }\n\n  /* t1 = 3/2*(x1^2 - z1^4) = B */\n  uECC_vli_modSquare_fast(Z1, X1, curve);           /* t3 = B^2 */\n  uECC_vli_modSub(Z1, Z1, t5, curve->p, num_words); /* t3 = B^2 - A */\n  uECC_vli_modSub(Z1, Z1, t5, curve->p, num_words); /* t3 = B^2 - 2A = x3 */\n  uECC_vli_modSub(t5, t5, Z1, curve->p, num_words); /* t5 = A - x3 */\n  uECC_vli_modMult_fast(X1, X1, t5, curve);         /* t1 = B * (A - x3) */\n  /* t4 = B * (A - x3) - y1^4 = y3: */\n  uECC_vli_modSub(t4, X1, t4, curve->p, num_words);\n\n  uECC_vli_set(X1, Z1, num_words);\n  uECC_vli_set(Z1, Y1, num_words);\n  uECC_vli_set(Y1, t4, num_words);\n}\n\nvoid x_side_default(uECC_word_t *result, const uECC_word_t *x, uECC_Curve curve) {\n  uECC_word_t _3[NUM_ECC_WORDS] = {3}; /* -a = 3 */\n  wordcount_t num_words         = curve->num_words;\n\n  uECC_vli_modSquare_fast(result, x, curve);                /* r = x^2 */\n  uECC_vli_modSub(result, result, _3, curve->p, num_words); /* r = x^2 - 3 */\n  uECC_vli_modMult_fast(result, result, x, curve);          /* r = x^3 - 3x */\n  /* r = x^3 - 3x + b: */\n  uECC_vli_modAdd(result, result, curve->b, curve->p, num_words);\n}\n\nuECC_Curve uECC_secp256r1(void) { return &curve_secp256r1; }\n\nvoid vli_mmod_fast_secp256r1(unsigned int *result, unsigned int *product) {\n  unsigned int tmp[NUM_ECC_WORDS];\n  int          carry;\n\n  /* t */\n  uECC_vli_set(result, product, NUM_ECC_WORDS);\n\n  /* s1 */\n  tmp[0] = tmp[1] = tmp[2] = 0;\n  tmp[3]                   = product[11];\n  tmp[4]                   = product[12];\n  tmp[5]                   = product[13];\n  tmp[6]                   = product[14];\n  tmp[7]                   = product[15];\n  carry                    = uECC_vli_add(tmp, tmp, tmp, NUM_ECC_WORDS);\n  carry += uECC_vli_add(result, result, tmp, NUM_ECC_WORDS);\n\n  /* s2 */\n  tmp[3] = product[12];\n  tmp[4] = product[13];\n  tmp[5] = product[14];\n  tmp[6] = product[15];\n  tmp[7] = 0;\n  carry += uECC_vli_add(tmp, tmp, tmp, NUM_ECC_WORDS);\n  carry += uECC_vli_add(result, result, tmp, NUM_ECC_WORDS);\n\n  /* s3 */\n  tmp[0] = product[8];\n  tmp[1] = product[9];\n  tmp[2] = product[10];\n  tmp[3] = tmp[4] = tmp[5] = 0;\n  tmp[6]                   = product[14];\n  tmp[7]                   = product[15];\n  carry += uECC_vli_add(result, result, tmp, NUM_ECC_WORDS);\n\n  /* s4 */\n  tmp[0] = product[9];\n  tmp[1] = product[10];\n  tmp[2] = product[11];\n  tmp[3] = product[13];\n  tmp[4] = product[14];\n  tmp[5] = product[15];\n  tmp[6] = product[13];\n  tmp[7] = product[8];\n  carry += uECC_vli_add(result, result, tmp, NUM_ECC_WORDS);\n\n  /* d1 */\n  tmp[0] = product[11];\n  tmp[1] = product[12];\n  tmp[2] = product[13];\n  tmp[3] = tmp[4] = tmp[5] = 0;\n  tmp[6]                   = product[8];\n  tmp[7]                   = product[10];\n  carry -= uECC_vli_sub(result, result, tmp, NUM_ECC_WORDS);\n\n  /* d2 */\n  tmp[0] = product[12];\n  tmp[1] = product[13];\n  tmp[2] = product[14];\n  tmp[3] = product[15];\n  tmp[4] = tmp[5] = 0;\n  tmp[6]          = product[9];\n  tmp[7]          = product[11];\n  carry -= uECC_vli_sub(result, result, tmp, NUM_ECC_WORDS);\n\n  /* d3 */\n  tmp[0] = product[13];\n  tmp[1] = product[14];\n  tmp[2] = product[15];\n  tmp[3] = product[8];\n  tmp[4] = product[9];\n  tmp[5] = product[10];\n  tmp[6] = 0;\n  tmp[7] = product[12];\n  carry -= uECC_vli_sub(result, result, tmp, NUM_ECC_WORDS);\n\n  /* d4 */\n  tmp[0] = product[14];\n  tmp[1] = product[15];\n  tmp[2] = 0;\n  tmp[3] = product[9];\n  tmp[4] = product[10];\n  tmp[5] = product[11];\n  tmp[6] = 0;\n  tmp[7] = product[13];\n  carry -= uECC_vli_sub(result, result, tmp, NUM_ECC_WORDS);\n\n  if (carry < 0) {\n    do {\n      carry += uECC_vli_add(result, result, curve_secp256r1.p, NUM_ECC_WORDS);\n    } while (carry < 0);\n  } else {\n    while (carry || uECC_vli_cmp_unsafe(curve_secp256r1.p, result, NUM_ECC_WORDS) != 1) {\n      carry -= uECC_vli_sub(result, result, curve_secp256r1.p, NUM_ECC_WORDS);\n    }\n  }\n}\n\nuECC_word_t EccPoint_isZero(const uECC_word_t *point, uECC_Curve curve) { return uECC_vli_isZero(point, curve->num_words * 2); }\n\nvoid apply_z(uECC_word_t *X1, uECC_word_t *Y1, const uECC_word_t *const Z, uECC_Curve curve) {\n  uECC_word_t t1[NUM_ECC_WORDS];\n\n  uECC_vli_modSquare_fast(t1, Z, curve);    /* z^2 */\n  uECC_vli_modMult_fast(X1, X1, t1, curve); /* x1 * z^2 */\n  uECC_vli_modMult_fast(t1, t1, Z, curve);  /* z^3 */\n  uECC_vli_modMult_fast(Y1, Y1, t1, curve); /* y1 * z^3 */\n}\n\n/* P = (x1, y1) => 2P, (x2, y2) => P' */\nstatic void XYcZ_initial_double(uECC_word_t *X1, uECC_word_t *Y1, uECC_word_t *X2, uECC_word_t *Y2, const uECC_word_t *const initial_Z, uECC_Curve curve) {\n  uECC_word_t z[NUM_ECC_WORDS];\n  wordcount_t num_words = curve->num_words;\n  if (initial_Z) {\n    uECC_vli_set(z, initial_Z, num_words);\n  } else {\n    uECC_vli_clear(z, num_words);\n    z[0] = 1;\n  }\n\n  uECC_vli_set(X2, X1, num_words);\n  uECC_vli_set(Y2, Y1, num_words);\n\n  apply_z(X1, Y1, z, curve);\n  curve->double_jacobian(X1, Y1, z, curve);\n  apply_z(X2, Y2, z, curve);\n}\n\nvoid XYcZ_add(uECC_word_t *X1, uECC_word_t *Y1, uECC_word_t *X2, uECC_word_t *Y2, uECC_Curve curve) {\n  /* t1 = X1, t2 = Y1, t3 = X2, t4 = Y2 */\n  uECC_word_t t5[NUM_ECC_WORDS];\n  wordcount_t num_words = curve->num_words;\n\n  uECC_vli_modSub(t5, X2, X1, curve->p, num_words); /* t5 = x2 - x1 */\n  uECC_vli_modSquare_fast(t5, t5, curve);           /* t5 = (x2 - x1)^2 = A */\n  uECC_vli_modMult_fast(X1, X1, t5, curve);         /* t1 = x1*A = B */\n  uECC_vli_modMult_fast(X2, X2, t5, curve);         /* t3 = x2*A = C */\n  uECC_vli_modSub(Y2, Y2, Y1, curve->p, num_words); /* t4 = y2 - y1 */\n  uECC_vli_modSquare_fast(t5, Y2, curve);           /* t5 = (y2 - y1)^2 = D */\n\n  uECC_vli_modSub(t5, t5, X1, curve->p, num_words); /* t5 = D - B */\n  uECC_vli_modSub(t5, t5, X2, curve->p, num_words); /* t5 = D - B - C = x3 */\n  uECC_vli_modSub(X2, X2, X1, curve->p, num_words); /* t3 = C - B */\n  uECC_vli_modMult_fast(Y1, Y1, X2, curve);         /* t2 = y1*(C - B) */\n  uECC_vli_modSub(X2, X1, t5, curve->p, num_words); /* t3 = B - x3 */\n  uECC_vli_modMult_fast(Y2, Y2, X2, curve);         /* t4 = (y2 - y1)*(B - x3) */\n  uECC_vli_modSub(Y2, Y2, Y1, curve->p, num_words); /* t4 = y3 */\n\n  uECC_vli_set(X2, t5, num_words);\n}\n\n/* Input P = (x1, y1, Z), Q = (x2, y2, Z)\n   Output P + Q = (x3, y3, Z3), P - Q = (x3', y3', Z3)\n   or P => P - Q, Q => P + Q\n */\nstatic void XYcZ_addC(uECC_word_t *X1, uECC_word_t *Y1, uECC_word_t *X2, uECC_word_t *Y2, uECC_Curve curve) {\n  /* t1 = X1, t2 = Y1, t3 = X2, t4 = Y2 */\n  uECC_word_t t5[NUM_ECC_WORDS];\n  uECC_word_t t6[NUM_ECC_WORDS];\n  uECC_word_t t7[NUM_ECC_WORDS];\n  wordcount_t num_words = curve->num_words;\n\n  uECC_vli_modSub(t5, X2, X1, curve->p, num_words); /* t5 = x2 - x1 */\n  uECC_vli_modSquare_fast(t5, t5, curve);           /* t5 = (x2 - x1)^2 = A */\n  uECC_vli_modMult_fast(X1, X1, t5, curve);         /* t1 = x1*A = B */\n  uECC_vli_modMult_fast(X2, X2, t5, curve);         /* t3 = x2*A = C */\n  uECC_vli_modAdd(t5, Y2, Y1, curve->p, num_words); /* t5 = y2 + y1 */\n  uECC_vli_modSub(Y2, Y2, Y1, curve->p, num_words); /* t4 = y2 - y1 */\n\n  uECC_vli_modSub(t6, X2, X1, curve->p, num_words); /* t6 = C - B */\n  uECC_vli_modMult_fast(Y1, Y1, t6, curve);         /* t2 = y1 * (C - B) = E */\n  uECC_vli_modAdd(t6, X1, X2, curve->p, num_words); /* t6 = B + C */\n  uECC_vli_modSquare_fast(X2, Y2, curve);           /* t3 = (y2 - y1)^2 = D */\n  uECC_vli_modSub(X2, X2, t6, curve->p, num_words); /* t3 = D - (B + C) = x3 */\n\n  uECC_vli_modSub(t7, X1, X2, curve->p, num_words); /* t7 = B - x3 */\n  uECC_vli_modMult_fast(Y2, Y2, t7, curve);         /* t4 = (y2 - y1)*(B - x3) */\n  /* t4 = (y2 - y1)*(B - x3) - E = y3: */\n  uECC_vli_modSub(Y2, Y2, Y1, curve->p, num_words);\n\n  uECC_vli_modSquare_fast(t7, t5, curve);           /* t7 = (y2 + y1)^2 = F */\n  uECC_vli_modSub(t7, t7, t6, curve->p, num_words); /* t7 = F - (B + C) = x3' */\n  uECC_vli_modSub(t6, t7, X1, curve->p, num_words); /* t6 = x3' - B */\n  uECC_vli_modMult_fast(t6, t6, t5, curve);         /* t6 = (y2+y1)*(x3' - B) */\n  /* t2 = (y2+y1)*(x3' - B) - E = y3': */\n  uECC_vli_modSub(Y1, t6, Y1, curve->p, num_words);\n\n  uECC_vli_set(X1, t7, num_words);\n}\n\nvoid EccPoint_mult(uECC_word_t *result, const uECC_word_t *point, const uECC_word_t *scalar, const uECC_word_t *initial_Z, bitcount_t num_bits, uECC_Curve curve) {\n  /* R0 and R1 */\n  uECC_word_t Rx[2][NUM_ECC_WORDS];\n  uECC_word_t Ry[2][NUM_ECC_WORDS];\n  uECC_word_t z[NUM_ECC_WORDS];\n  bitcount_t  i;\n  uECC_word_t nb;\n  wordcount_t num_words = curve->num_words;\n\n  uECC_vli_set(Rx[1], point, num_words);\n  uECC_vli_set(Ry[1], point + num_words, num_words);\n\n  XYcZ_initial_double(Rx[1], Ry[1], Rx[0], Ry[0], initial_Z, curve);\n\n  for (i = num_bits - 2; i > 0; --i) {\n    nb = !uECC_vli_testBit(scalar, i);\n    XYcZ_addC(Rx[1 - nb], Ry[1 - nb], Rx[nb], Ry[nb], curve);\n    XYcZ_add(Rx[nb], Ry[nb], Rx[1 - nb], Ry[1 - nb], curve);\n  }\n\n  nb = !uECC_vli_testBit(scalar, 0);\n  XYcZ_addC(Rx[1 - nb], Ry[1 - nb], Rx[nb], Ry[nb], curve);\n\n  /* Find final 1/Z value. */\n  uECC_vli_modSub(z, Rx[1], Rx[0], curve->p, num_words); /* X1 - X0 */\n  uECC_vli_modMult_fast(z, z, Ry[1 - nb], curve);        /* Yb * (X1 - X0) */\n  uECC_vli_modMult_fast(z, z, point, curve);             /* xP * Yb * (X1 - X0) */\n  uECC_vli_modInv(z, z, curve->p, num_words);            /* 1 / (xP * Yb * (X1 - X0))*/\n  /* yP / (xP * Yb * (X1 - X0)) */\n  uECC_vli_modMult_fast(z, z, point + num_words, curve);\n  /* Xb * yP / (xP * Yb * (X1 - X0)) */\n  uECC_vli_modMult_fast(z, z, Rx[1 - nb], curve);\n  /* End 1/Z calculation */\n\n  XYcZ_add(Rx[nb], Ry[nb], Rx[1 - nb], Ry[1 - nb], curve);\n  apply_z(Rx[0], Ry[0], z, curve);\n\n  uECC_vli_set(result, Rx[0], num_words);\n  uECC_vli_set(result + num_words, Ry[0], num_words);\n}\n\nuECC_word_t regularize_k(const uECC_word_t *const k, uECC_word_t *k0, uECC_word_t *k1, uECC_Curve curve) {\n  wordcount_t num_n_words = BITS_TO_WORDS(curve->num_n_bits);\n\n  bitcount_t num_n_bits = curve->num_n_bits;\n\n  uECC_word_t carry = uECC_vli_add(k0, k, curve->n, num_n_words) || (num_n_bits < ((bitcount_t)num_n_words * uECC_WORD_SIZE * 8) && uECC_vli_testBit(k0, num_n_bits));\n\n  uECC_vli_add(k1, k0, curve->n, num_n_words);\n\n  return carry;\n}\n\nuECC_word_t EccPoint_compute_public_key(uECC_word_t *result, uECC_word_t *private_key, uECC_Curve curve) {\n  uECC_word_t  tmp1[NUM_ECC_WORDS];\n  uECC_word_t  tmp2[NUM_ECC_WORDS];\n  uECC_word_t *p2[2] = {tmp1, tmp2};\n  uECC_word_t  carry;\n\n  /* Regularize the bitcount for the private key so that attackers cannot\n   * use a side channel attack to learn the number of leading zeros. */\n  carry = regularize_k(private_key, tmp1, tmp2, curve);\n\n  EccPoint_mult(result, curve->G, p2[!carry], 0, curve->num_n_bits + 1, curve);\n\n  if (EccPoint_isZero(result, curve)) {\n    return 0;\n  }\n  return 1;\n}\n\n/* Converts an integer in uECC native format to big-endian bytes. */\nvoid uECC_vli_nativeToBytes(uint8_t *bytes, int num_bytes, const unsigned int *native) {\n  wordcount_t i;\n  for (i = 0; i < num_bytes; ++i) {\n    unsigned b = num_bytes - 1 - i;\n    bytes[i]   = native[b / uECC_WORD_SIZE] >> (8 * (b % uECC_WORD_SIZE));\n  }\n}\n\n/* Converts big-endian bytes to an integer in uECC native format. */\nvoid uECC_vli_bytesToNative(unsigned int *native, const uint8_t *bytes, int num_bytes) {\n  wordcount_t i;\n  uECC_vli_clear(native, (num_bytes + (uECC_WORD_SIZE - 1)) / uECC_WORD_SIZE);\n  for (i = 0; i < num_bytes; ++i) {\n    unsigned b = num_bytes - 1 - i;\n    native[b / uECC_WORD_SIZE] |= (uECC_word_t)bytes[i] << (8 * (b % uECC_WORD_SIZE));\n  }\n}\n\nint uECC_generate_random_int(uECC_word_t *random, const uECC_word_t *top, wordcount_t num_words) {\n  uECC_word_t mask = (uECC_word_t)-1;\n  uECC_word_t tries;\n  bitcount_t  num_bits = uECC_vli_numBits(top, num_words);\n\n  if (!g_rng_function) {\n    return 0;\n  }\n\n  for (tries = 0; tries < uECC_RNG_MAX_TRIES; ++tries) {\n    if (!g_rng_function((uint8_t *)random, num_words * uECC_WORD_SIZE)) {\n      return 0;\n    }\n    random[num_words - 1] &= mask >> ((bitcount_t)(num_words * uECC_WORD_SIZE * 8 - num_bits));\n    if (!uECC_vli_isZero(random, num_words) && uECC_vli_cmp(top, random, num_words) == 1) {\n      return 1;\n    }\n  }\n  return 0;\n}\n\nint uECC_valid_point(const uECC_word_t *point, uECC_Curve curve) {\n  uECC_word_t tmp1[NUM_ECC_WORDS];\n  uECC_word_t tmp2[NUM_ECC_WORDS];\n  wordcount_t num_words = curve->num_words;\n\n  /* The point at infinity is invalid. */\n  if (EccPoint_isZero(point, curve)) {\n    return -1;\n  }\n\n  /* x and y must be smaller than p. */\n  if (uECC_vli_cmp_unsafe(curve->p, point, num_words) != 1 || uECC_vli_cmp_unsafe(curve->p, point + num_words, num_words) != 1) {\n    return -2;\n  }\n\n  uECC_vli_modSquare_fast(tmp1, point + num_words, curve);\n  curve->x_side(tmp2, point, curve); /* tmp2 = x^3 + ax + b */\n\n  /* Make sure that y^2 == x^3 + ax + b */\n  if (uECC_vli_equal(tmp1, tmp2, num_words) != 0)\n    return -3;\n\n  return 0;\n}\n\nint uECC_valid_public_key(const uint8_t *public_key, uECC_Curve curve) {\n  uECC_word_t _public[NUM_ECC_WORDS * 2];\n\n  uECC_vli_bytesToNative(_public, public_key, curve->num_bytes);\n  uECC_vli_bytesToNative(_public + curve->num_words, public_key + curve->num_bytes, curve->num_bytes);\n\n  if (uECC_vli_cmp_unsafe(_public, curve->G, NUM_ECC_WORDS * 2) == 0) {\n    return -4;\n  }\n\n  return uECC_valid_point(_public, curve);\n}\n\nint uECC_compute_public_key(const uint8_t *private_key, uint8_t *public_key, uECC_Curve curve) {\n  uECC_word_t _private[NUM_ECC_WORDS];\n  uECC_word_t _public[NUM_ECC_WORDS * 2];\n\n  uECC_vli_bytesToNative(_private, private_key, BITS_TO_BYTES(curve->num_n_bits));\n\n  /* Make sure the private key is in the range [1, n-1]. */\n  if (uECC_vli_isZero(_private, BITS_TO_WORDS(curve->num_n_bits))) {\n    return 0;\n  }\n\n  if (uECC_vli_cmp(curve->n, _private, BITS_TO_WORDS(curve->num_n_bits)) != 1) {\n    return 0;\n  }\n\n  /* Compute public key. */\n  if (!EccPoint_compute_public_key(_public, _private, curve)) {\n    return 0;\n  }\n\n  uECC_vli_nativeToBytes(public_key, curve->num_bytes, _public);\n  uECC_vli_nativeToBytes(public_key + curve->num_bytes, curve->num_bytes, _public + curve->num_words);\n  return 1;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/source/ecc_dh.c",
    "content": "/* ec_dh.c - TinyCrypt implementation of EC-DH */\n\n/*\n * Copyright (c) 2014, Kenneth MacKay\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *  * Redistributions of source code must retain the above copyright notice,\n *    this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n#include \"ecc_dh.h\"\n#include \"constants.h\"\n#include \"ecc.h\"\n#if defined(BFLB_BLE)\n#include \"utils.h\"\n#endif\n#include <string.h>\n#if defined(BL_MCU_SDK)\n#include \"ecc_platform_specific.h\"\n#endif\n\n#if default_RNG_defined\nstatic uECC_RNG_Function g_rng_function = &default_CSPRNG;\n#else\nstatic uECC_RNG_Function g_rng_function = 0;\n#endif\n\nint uECC_make_key_with_d(uint8_t *public_key, uint8_t *private_key, unsigned int *d, uECC_Curve curve) {\n  uECC_word_t _private[NUM_ECC_WORDS];\n  uECC_word_t _public[NUM_ECC_WORDS * 2];\n\n  /* This function is designed for test purposes-only (such as validating NIST\n   * test vectors) as it uses a provided value for d instead of generating\n   * it uniformly at random. */\n  memcpy(_private, d, NUM_ECC_BYTES);\n\n  /* Computing public-key from private: */\n  if (EccPoint_compute_public_key(_public, _private, curve)) {\n    /* Converting buffers to correct bit order: */\n    uECC_vli_nativeToBytes(private_key, BITS_TO_BYTES(curve->num_n_bits), _private);\n    uECC_vli_nativeToBytes(public_key, curve->num_bytes, _public);\n    uECC_vli_nativeToBytes(public_key + curve->num_bytes, curve->num_bytes, _public + curve->num_words);\n\n    /* erasing temporary buffer used to store secret: */\n    _set_secure(_private, 0, NUM_ECC_BYTES);\n\n    return 1;\n  }\n  return 0;\n}\n\nint uECC_make_key(uint8_t *public_key, uint8_t *private_key, uECC_Curve curve) {\n  uECC_word_t _random[NUM_ECC_WORDS * 2];\n  uECC_word_t _private[NUM_ECC_WORDS];\n  uECC_word_t _public[NUM_ECC_WORDS * 2];\n  uECC_word_t tries;\n\n  for (tries = 0; tries < uECC_RNG_MAX_TRIES; ++tries) {\n    /* Generating _private uniformly at random: */\n    uECC_RNG_Function rng_function = uECC_get_rng();\n    if (!rng_function || !rng_function((uint8_t *)_random, 2 * NUM_ECC_WORDS * uECC_WORD_SIZE)) {\n      return 0;\n    }\n\n    /* computing modular reduction of _random (see FIPS 186.4 B.4.1): */\n    uECC_vli_mmod(_private, _random, curve->n, BITS_TO_WORDS(curve->num_n_bits));\n\n    /* Computing public-key from private: */\n    if (EccPoint_compute_public_key(_public, _private, curve)) {\n      /* Converting buffers to correct bit order: */\n      uECC_vli_nativeToBytes(private_key, BITS_TO_BYTES(curve->num_n_bits), _private);\n      uECC_vli_nativeToBytes(public_key, curve->num_bytes, _public);\n      uECC_vli_nativeToBytes(public_key + curve->num_bytes, curve->num_bytes, _public + curve->num_words);\n\n      /* erasing temporary buffer that stored secret: */\n      _set_secure(_private, 0, NUM_ECC_BYTES);\n\n      return 1;\n    }\n  }\n  return 0;\n}\n\nint uECC_shared_secret(const uint8_t *public_key, const uint8_t *private_key, uint8_t *secret, uECC_Curve curve) {\n  uECC_word_t _public[NUM_ECC_WORDS * 2];\n  uECC_word_t _private[NUM_ECC_WORDS];\n\n  uECC_word_t  tmp[NUM_ECC_WORDS];\n  uECC_word_t *p2[2]     = {_private, tmp};\n  uECC_word_t *initial_Z = 0;\n  uECC_word_t  carry;\n  wordcount_t  num_words = curve->num_words;\n  wordcount_t  num_bytes = curve->num_bytes;\n  int          r;\n\n  /* Converting buffers to correct bit order: */\n  uECC_vli_bytesToNative(_private, private_key, BITS_TO_BYTES(curve->num_n_bits));\n  uECC_vli_bytesToNative(_public, public_key, num_bytes);\n  uECC_vli_bytesToNative(_public + num_words, public_key + num_bytes, num_bytes);\n\n  /* Regularize the bitcount for the private key so that attackers cannot use a\n   * side channel attack to learn the number of leading zeros. */\n  carry = regularize_k(_private, _private, tmp, curve);\n\n  /* If an RNG function was specified, try to get a random initial Z value to\n   * improve protection against side-channel attacks. */\n  if (g_rng_function) {\n    if (!uECC_generate_random_int(p2[carry], curve->p, num_words)) {\n      r = 0;\n      goto clear_and_out;\n    }\n    initial_Z = p2[carry];\n  }\n\n  EccPoint_mult(_public, _public, p2[!carry], initial_Z, curve->num_n_bits + 1, curve);\n\n  uECC_vli_nativeToBytes(secret, num_bytes, _public);\n  r = !EccPoint_isZero(_public, curve);\n\nclear_and_out:\n  /* erasing temporary buffer used to store secret: */\n  _set_secure(p2, 0, sizeof(p2));\n  _set_secure(tmp, 0, sizeof(tmp));\n  _set_secure(_private, 0, sizeof(_private));\n\n  return r;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/source/ecc_dsa.c",
    "content": "/* ec_dsa.c - TinyCrypt implementation of EC-DSA */\n\n/* Copyright (c) 2014, Kenneth MacKay\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *  * Redistributions of source code must retain the above copyright notice,\n *    this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.*/\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"ecc_dsa.h\"\n#include \"constants.h\"\n#include \"ecc.h\"\n#if defined(BL_MCU_SDK)\n#include \"ecc_platform_specific.h\"\n#endif\n\n#if default_RNG_defined\nstatic uECC_RNG_Function g_rng_function = &default_CSPRNG;\n#else\nstatic uECC_RNG_Function g_rng_function = 0;\n#endif\n\nstatic void bits2int(uECC_word_t *native, const uint8_t *bits, unsigned bits_size, uECC_Curve curve) {\n  unsigned     num_n_bytes = BITS_TO_BYTES(curve->num_n_bits);\n  unsigned     num_n_words = BITS_TO_WORDS(curve->num_n_bits);\n  int          shift;\n  uECC_word_t  carry;\n  uECC_word_t *ptr;\n\n  if (bits_size > num_n_bytes) {\n    bits_size = num_n_bytes;\n  }\n\n  uECC_vli_clear(native, num_n_words);\n  uECC_vli_bytesToNative(native, bits, bits_size);\n  if (bits_size * 8 <= (unsigned)curve->num_n_bits) {\n    return;\n  }\n  shift = bits_size * 8 - curve->num_n_bits;\n  carry = 0;\n  ptr   = native + num_n_words;\n  while (ptr-- > native) {\n    uECC_word_t temp = *ptr;\n    *ptr             = (temp >> shift) | carry;\n    carry            = temp << (uECC_WORD_BITS - shift);\n  }\n\n  /* Reduce mod curve_n */\n  if (uECC_vli_cmp_unsafe(curve->n, native, num_n_words) != 1) {\n    uECC_vli_sub(native, native, curve->n, num_n_words);\n  }\n}\n\nint uECC_sign_with_k(const uint8_t *private_key, const uint8_t *message_hash, unsigned hash_size, uECC_word_t *k, uint8_t *signature, uECC_Curve curve) {\n  uECC_word_t  tmp[NUM_ECC_WORDS];\n  uECC_word_t  s[NUM_ECC_WORDS];\n  uECC_word_t *k2[2]     = {tmp, s};\n  uECC_word_t *initial_Z = 0;\n  uECC_word_t  p[NUM_ECC_WORDS * 2];\n  uECC_word_t  carry;\n  wordcount_t  num_words   = curve->num_words;\n  wordcount_t  num_n_words = BITS_TO_WORDS(curve->num_n_bits);\n  bitcount_t   num_n_bits  = curve->num_n_bits;\n\n  /* Make sure 0 < k < curve_n */\n  if (uECC_vli_isZero(k, num_words) || uECC_vli_cmp(curve->n, k, num_n_words) != 1) {\n    return 0;\n  }\n\n  carry = regularize_k(k, tmp, s, curve);\n  /* If an RNG function was specified, try to get a random initial Z value to improve\n     protection against side-channel attacks. */\n  if (g_rng_function) {\n    if (!uECC_generate_random_int(k2[carry], curve->p, num_words)) {\n      return 0;\n    }\n    initial_Z = k2[carry];\n  }\n  EccPoint_mult(p, curve->G, k2[!carry], initial_Z, num_n_bits + 1, curve);\n  if (uECC_vli_isZero(p, num_words)) {\n    return 0;\n  }\n\n  /* If an RNG function was specified, get a random number\n      to prevent side channel analysis of k. */\n  if (!g_rng_function) {\n    uECC_vli_clear(tmp, num_n_words);\n    tmp[0] = 1;\n  } else if (!uECC_generate_random_int(tmp, curve->n, num_n_words)) {\n    return 0;\n  }\n\n  /* Prevent side channel analysis of uECC_vli_modInv() to determine\n      bits of k / the private key by premultiplying by a random number */\n  uECC_vli_modMult(k, k, tmp, curve->n, num_n_words); /* k' = rand * k */\n  uECC_vli_modInv(k, k, curve->n, num_n_words);       /* k = 1 / k' */\n  uECC_vli_modMult(k, k, tmp, curve->n, num_n_words); /* k = 1 / k */\n\n  uECC_vli_nativeToBytes(signature, curve->num_bytes, p); /* store r */\n\n  /* tmp = d: */\n  uECC_vli_bytesToNative(tmp, private_key, BITS_TO_BYTES(curve->num_n_bits));\n\n  s[num_n_words - 1] = 0;\n  uECC_vli_set(s, p, num_words);\n  uECC_vli_modMult(s, tmp, s, curve->n, num_n_words); /* s = r*d */\n\n  bits2int(tmp, message_hash, hash_size, curve);\n  uECC_vli_modAdd(s, tmp, s, curve->n, num_n_words); /* s = e + r*d */\n  uECC_vli_modMult(s, s, k, curve->n, num_n_words);  /* s = (e + r*d) / k */\n  if (uECC_vli_numBits(s, num_n_words) > (bitcount_t)curve->num_bytes * 8) {\n    return 0;\n  }\n\n  uECC_vli_nativeToBytes(signature + curve->num_bytes, curve->num_bytes, s);\n  return 1;\n}\n\nint uECC_sign(const uint8_t *private_key, const uint8_t *message_hash, unsigned hash_size, uint8_t *signature, uECC_Curve curve) {\n  uECC_word_t _random[2 * NUM_ECC_WORDS];\n  uECC_word_t k[NUM_ECC_WORDS];\n  uECC_word_t tries;\n\n  for (tries = 0; tries < uECC_RNG_MAX_TRIES; ++tries) {\n    /* Generating _random uniformly at random: */\n    uECC_RNG_Function rng_function = uECC_get_rng();\n    if (!rng_function || !rng_function((uint8_t *)_random, 2 * NUM_ECC_WORDS * uECC_WORD_SIZE)) {\n      return 0;\n    }\n\n    // computing k as modular reduction of _random (see FIPS 186.4 B.5.1):\n    uECC_vli_mmod(k, _random, curve->n, BITS_TO_WORDS(curve->num_n_bits));\n\n    if (uECC_sign_with_k(private_key, message_hash, hash_size, k, signature, curve)) {\n      return 1;\n    }\n  }\n  return 0;\n}\n\nstatic bitcount_t smax(bitcount_t a, bitcount_t b) { return (a > b ? a : b); }\n\nint uECC_verify(const uint8_t *public_key, const uint8_t *message_hash, unsigned hash_size, const uint8_t *signature, uECC_Curve curve) {\n  uECC_word_t        u1[NUM_ECC_WORDS], u2[NUM_ECC_WORDS];\n  uECC_word_t        z[NUM_ECC_WORDS];\n  uECC_word_t        sum[NUM_ECC_WORDS * 2];\n  uECC_word_t        rx[NUM_ECC_WORDS];\n  uECC_word_t        ry[NUM_ECC_WORDS];\n  uECC_word_t        tx[NUM_ECC_WORDS];\n  uECC_word_t        ty[NUM_ECC_WORDS];\n  uECC_word_t        tz[NUM_ECC_WORDS];\n  const uECC_word_t *points[4];\n  const uECC_word_t *point;\n  bitcount_t         num_bits;\n  bitcount_t         i;\n\n  uECC_word_t _public[NUM_ECC_WORDS * 2];\n  uECC_word_t r[NUM_ECC_WORDS], s[NUM_ECC_WORDS];\n  wordcount_t num_words   = curve->num_words;\n  wordcount_t num_n_words = BITS_TO_WORDS(curve->num_n_bits);\n\n  rx[num_n_words - 1] = 0;\n  r[num_n_words - 1]  = 0;\n  s[num_n_words - 1]  = 0;\n\n  uECC_vli_bytesToNative(_public, public_key, curve->num_bytes);\n  uECC_vli_bytesToNative(_public + num_words, public_key + curve->num_bytes, curve->num_bytes);\n  uECC_vli_bytesToNative(r, signature, curve->num_bytes);\n  uECC_vli_bytesToNative(s, signature + curve->num_bytes, curve->num_bytes);\n\n  /* r, s must not be 0. */\n  if (uECC_vli_isZero(r, num_words) || uECC_vli_isZero(s, num_words)) {\n    return 0;\n  }\n\n  /* r, s must be < n. */\n  if (uECC_vli_cmp_unsafe(curve->n, r, num_n_words) != 1 || uECC_vli_cmp_unsafe(curve->n, s, num_n_words) != 1) {\n    return 0;\n  }\n\n  /* Calculate u1 and u2. */\n  uECC_vli_modInv(z, s, curve->n, num_n_words); /* z = 1/s */\n  u1[num_n_words - 1] = 0;\n  bits2int(u1, message_hash, hash_size, curve);\n  uECC_vli_modMult(u1, u1, z, curve->n, num_n_words); /* u1 = e/s */\n  uECC_vli_modMult(u2, r, z, curve->n, num_n_words);  /* u2 = r/s */\n\n  /* Calculate sum = G + Q. */\n  uECC_vli_set(sum, _public, num_words);\n  uECC_vli_set(sum + num_words, _public + num_words, num_words);\n  uECC_vli_set(tx, curve->G, num_words);\n  uECC_vli_set(ty, curve->G + num_words, num_words);\n  uECC_vli_modSub(z, sum, tx, curve->p, num_words); /* z = x2 - x1 */\n  XYcZ_add(tx, ty, sum, sum + num_words, curve);\n  uECC_vli_modInv(z, z, curve->p, num_words); /* z = 1/z */\n  apply_z(sum, sum + num_words, z, curve);\n\n  /* Use Shamir's trick to calculate u1*G + u2*Q */\n  points[0] = 0;\n  points[1] = curve->G;\n  points[2] = _public;\n  points[3] = sum;\n  num_bits  = smax(uECC_vli_numBits(u1, num_n_words), uECC_vli_numBits(u2, num_n_words));\n\n  point = points[(!!uECC_vli_testBit(u1, num_bits - 1)) | ((!!uECC_vli_testBit(u2, num_bits - 1)) << 1)];\n  uECC_vli_set(rx, point, num_words);\n  uECC_vli_set(ry, point + num_words, num_words);\n  uECC_vli_clear(z, num_words);\n  z[0] = 1;\n\n  for (i = num_bits - 2; i >= 0; --i) {\n    uECC_word_t index;\n    curve->double_jacobian(rx, ry, z, curve);\n\n    index = (!!uECC_vli_testBit(u1, i)) | ((!!uECC_vli_testBit(u2, i)) << 1);\n    point = points[index];\n    if (point) {\n      uECC_vli_set(tx, point, num_words);\n      uECC_vli_set(ty, point + num_words, num_words);\n      apply_z(tx, ty, z, curve);\n      uECC_vli_modSub(tz, rx, tx, curve->p, num_words); /* Z = x2 - x1 */\n      XYcZ_add(tx, ty, rx, ry, curve);\n      uECC_vli_modMult_fast(z, z, tz, curve);\n    }\n  }\n\n  uECC_vli_modInv(z, z, curve->p, num_words); /* Z = 1/Z */\n  apply_z(rx, ry, z, curve);\n\n  /* v = x1 (mod n) */\n  if (uECC_vli_cmp_unsafe(curve->n, rx, num_n_words) != 1) {\n    uECC_vli_sub(rx, rx, curve->n, num_n_words);\n  }\n\n  /* Accept only if v == r. */\n  return (int)(uECC_vli_equal(rx, r, num_words) == 0);\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/source/ecc_platform_specific.c",
    "content": "/*  uECC_platform_specific.c - Implementation of platform specific functions*/\n\n/* Copyright (c) 2014, Kenneth MacKay\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *  * Redistributions of source code must retain the above copyright notice,\n *    this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the documentation\n *    and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.*/\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n *\n *  uECC_platform_specific.c -- Implementation of platform specific functions\n */\n\n#if defined(unix) || defined(__linux__) || defined(__unix__) || defined(__unix) | (defined(__APPLE__) && defined(__MACH__)) || defined(uECC_POSIX)\n\n/* Some POSIX-like system with /dev/urandom or /dev/random. */\n#include <fcntl.h>\n#include <sys/types.h>\n#include <unistd.h>\n\n#include <stdint.h>\n\n#ifndef O_CLOEXEC\n#define O_CLOEXEC 0\n#endif\n\nint default_CSPRNG(uint8_t *dest, unsigned int size) {\n  /* input sanity check: */\n  if (dest == (uint8_t *)0 || (size <= 0))\n    return 0;\n\n  int fd = open(\"/dev/urandom\", O_RDONLY | O_CLOEXEC);\n  if (fd == -1) {\n    fd = open(\"/dev/random\", O_RDONLY | O_CLOEXEC);\n    if (fd == -1) {\n      return 0;\n    }\n  }\n\n  char  *ptr  = (char *)dest;\n  size_t left = (size_t)size;\n  while (left > 0) {\n    ssize_t bytes_read = read(fd, ptr, left);\n    if (bytes_read <= 0) { // read failed\n      close(fd);\n      return 0;\n    }\n    left -= bytes_read;\n    ptr += bytes_read;\n  }\n\n  close(fd);\n  return 1;\n}\n\n#endif /* platform */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/source/hmac.c",
    "content": "/* hmac.c - TinyCrypt implementation of the HMAC algorithm */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"hmac.h\"\n#include \"constants.h\"\n#include \"utils.h\"\n\nstatic void rekey(uint8_t *key, const uint8_t *new_key, unsigned int key_size) {\n  const uint8_t inner_pad = (uint8_t)0x36;\n  const uint8_t outer_pad = (uint8_t)0x5c;\n  unsigned int  i;\n\n  for (i = 0; i < key_size; ++i) {\n    key[i]                        = inner_pad ^ new_key[i];\n    key[i + TC_SHA256_BLOCK_SIZE] = outer_pad ^ new_key[i];\n  }\n  for (; i < TC_SHA256_BLOCK_SIZE; ++i) {\n    key[i]                        = inner_pad;\n    key[i + TC_SHA256_BLOCK_SIZE] = outer_pad;\n  }\n}\n\nint tc_hmac_set_key(TCHmacState_t ctx, const uint8_t *key, unsigned int key_size) {\n  /* Input sanity check */\n  if (ctx == (TCHmacState_t)0 || key == (const uint8_t *)0 || key_size == 0) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  const uint8_t               dummy_key[TC_SHA256_BLOCK_SIZE];\n  struct tc_hmac_state_struct dummy_state;\n\n  if (key_size <= TC_SHA256_BLOCK_SIZE) {\n    /*\n     * The next three calls are dummy calls just to avoid\n     * certain timing attacks. Without these dummy calls,\n     * adversaries would be able to learn whether the key_size is\n     * greater than TC_SHA256_BLOCK_SIZE by measuring the time\n     * consumed in this process.\n     */\n    (void)tc_sha256_init(&dummy_state.hash_state);\n    (void)tc_sha256_update(&dummy_state.hash_state, dummy_key, key_size);\n    (void)tc_sha256_final(&dummy_state.key[TC_SHA256_DIGEST_SIZE], &dummy_state.hash_state);\n\n    /* Actual code for when key_size <= TC_SHA256_BLOCK_SIZE: */\n    rekey(ctx->key, key, key_size);\n  } else {\n    (void)tc_sha256_init(&ctx->hash_state);\n    (void)tc_sha256_update(&ctx->hash_state, key, key_size);\n    (void)tc_sha256_final(&ctx->key[TC_SHA256_DIGEST_SIZE], &ctx->hash_state);\n    rekey(ctx->key, &ctx->key[TC_SHA256_DIGEST_SIZE], TC_SHA256_DIGEST_SIZE);\n  }\n\n  return TC_CRYPTO_SUCCESS;\n}\n\nint tc_hmac_init(TCHmacState_t ctx) {\n  /* input sanity check: */\n  if (ctx == (TCHmacState_t)0) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  (void)tc_sha256_init(&ctx->hash_state);\n  (void)tc_sha256_update(&ctx->hash_state, ctx->key, TC_SHA256_BLOCK_SIZE);\n\n  return TC_CRYPTO_SUCCESS;\n}\n\nint tc_hmac_update(TCHmacState_t ctx, const void *data, unsigned int data_length) {\n  /* input sanity check: */\n  if (ctx == (TCHmacState_t)0) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  (void)tc_sha256_update(&ctx->hash_state, data, data_length);\n\n  return TC_CRYPTO_SUCCESS;\n}\n\nint tc_hmac_final(uint8_t *tag, unsigned int taglen, TCHmacState_t ctx) {\n  /* input sanity check: */\n  if (tag == (uint8_t *)0 || taglen != TC_SHA256_DIGEST_SIZE || ctx == (TCHmacState_t)0) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  (void)tc_sha256_final(tag, &ctx->hash_state);\n\n  (void)tc_sha256_init(&ctx->hash_state);\n  (void)tc_sha256_update(&ctx->hash_state, &ctx->key[TC_SHA256_BLOCK_SIZE], TC_SHA256_BLOCK_SIZE);\n  (void)tc_sha256_update(&ctx->hash_state, tag, TC_SHA256_DIGEST_SIZE);\n  (void)tc_sha256_final(tag, &ctx->hash_state);\n\n  /* destroy the current state */\n  _set(ctx, 0, sizeof(*ctx));\n\n  return TC_CRYPTO_SUCCESS;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/source/hmac_prng.c",
    "content": "/* hmac_prng.c - TinyCrypt implementation of HMAC-PRNG */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"hmac_prng.h\"\n#include \"constants.h\"\n#include \"hmac.h\"\n#include \"utils.h\"\n\n/*\n * min bytes in the seed string.\n * MIN_SLEN*8 must be at least the expected security level.\n */\nstatic const unsigned int MIN_SLEN = 32;\n\n/*\n * max bytes in the seed string;\n * SP800-90A specifies a maximum of 2^35 bits (i.e., 2^32 bytes).\n */\nstatic const unsigned int MAX_SLEN = UINT32_MAX;\n\n/*\n * max bytes in the personalization string;\n * SP800-90A specifies a maximum of 2^35 bits (i.e., 2^32 bytes).\n */\nstatic const unsigned int MAX_PLEN = UINT32_MAX;\n\n/*\n * max bytes in the additional_info string;\n * SP800-90A specifies a maximum of 2^35 bits (i.e., 2^32 bytes).\n */\nstatic const unsigned int MAX_ALEN = UINT32_MAX;\n\n/*\n * max number of generates between re-seeds;\n * TinyCrypt accepts up to (2^32 - 1) which is the maximal value of\n * a 32-bit unsigned int variable, while SP800-90A specifies a maximum of 2^48.\n */\nstatic const unsigned int MAX_GENS = UINT32_MAX;\n\n/*\n * maximum bytes per generate call;\n * SP800-90A specifies a maximum up to 2^19.\n */\nstatic const unsigned int MAX_OUT = (1 << 19);\n\n/*\n * Assumes: prng != NULL\n */\nstatic void update(TCHmacPrng_t prng, const uint8_t *data, unsigned int datalen, const uint8_t *additional_data, unsigned int additional_datalen) {\n  const uint8_t separator0 = 0x00;\n  const uint8_t separator1 = 0x01;\n\n  /* configure the new prng key into the prng's instance of hmac */\n  tc_hmac_set_key(&prng->h, prng->key, sizeof(prng->key));\n\n  /* use current state, e and separator 0 to compute a new prng key: */\n  (void)tc_hmac_init(&prng->h);\n  (void)tc_hmac_update(&prng->h, prng->v, sizeof(prng->v));\n  (void)tc_hmac_update(&prng->h, &separator0, sizeof(separator0));\n\n  if (data && datalen)\n    (void)tc_hmac_update(&prng->h, data, datalen);\n  if (additional_data && additional_datalen)\n    (void)tc_hmac_update(&prng->h, additional_data, additional_datalen);\n\n  (void)tc_hmac_final(prng->key, sizeof(prng->key), &prng->h);\n\n  /* configure the new prng key into the prng's instance of hmac */\n  (void)tc_hmac_set_key(&prng->h, prng->key, sizeof(prng->key));\n\n  /* use the new key to compute a new state variable v */\n  (void)tc_hmac_init(&prng->h);\n  (void)tc_hmac_update(&prng->h, prng->v, sizeof(prng->v));\n  (void)tc_hmac_final(prng->v, sizeof(prng->v), &prng->h);\n\n  if (data == 0 || datalen == 0)\n    return;\n\n  /* configure the new prng key into the prng's instance of hmac */\n  tc_hmac_set_key(&prng->h, prng->key, sizeof(prng->key));\n\n  /* use current state, e and separator 1 to compute a new prng key: */\n  (void)tc_hmac_init(&prng->h);\n  (void)tc_hmac_update(&prng->h, prng->v, sizeof(prng->v));\n  (void)tc_hmac_update(&prng->h, &separator1, sizeof(separator1));\n  (void)tc_hmac_update(&prng->h, data, datalen);\n  if (additional_data && additional_datalen)\n    (void)tc_hmac_update(&prng->h, additional_data, additional_datalen);\n  (void)tc_hmac_final(prng->key, sizeof(prng->key), &prng->h);\n\n  /* configure the new prng key into the prng's instance of hmac */\n  (void)tc_hmac_set_key(&prng->h, prng->key, sizeof(prng->key));\n\n  /* use the new key to compute a new state variable v */\n  (void)tc_hmac_init(&prng->h);\n  (void)tc_hmac_update(&prng->h, prng->v, sizeof(prng->v));\n  (void)tc_hmac_final(prng->v, sizeof(prng->v), &prng->h);\n}\n\nint tc_hmac_prng_init(TCHmacPrng_t prng, const uint8_t *personalization, unsigned int plen) {\n  /* input sanity check: */\n  if (prng == (TCHmacPrng_t)0 || personalization == (uint8_t *)0 || plen > MAX_PLEN) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  /* put the generator into a known state: */\n  _set(prng->key, 0x00, sizeof(prng->key));\n  _set(prng->v, 0x01, sizeof(prng->v));\n\n  update(prng, personalization, plen, 0, 0);\n\n  /* force a reseed before allowing tc_hmac_prng_generate to succeed: */\n  prng->countdown = 0;\n\n  return TC_CRYPTO_SUCCESS;\n}\n\nint tc_hmac_prng_reseed(TCHmacPrng_t prng, const uint8_t *seed, unsigned int seedlen, const uint8_t *additional_input, unsigned int additionallen) {\n  /* input sanity check: */\n  if (prng == (TCHmacPrng_t)0 || seed == (const uint8_t *)0 || seedlen < MIN_SLEN || seedlen > MAX_SLEN) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  if (additional_input != (const uint8_t *)0) {\n    /*\n     * Abort if additional_input is provided but has inappropriate\n     * length\n     */\n    if (additionallen == 0 || additionallen > MAX_ALEN) {\n      return TC_CRYPTO_FAIL;\n    } else {\n      /* call update for the seed and additional_input */\n      update(prng, seed, seedlen, additional_input, additionallen);\n    }\n  } else {\n    /* call update only for the seed */\n    update(prng, seed, seedlen, 0, 0);\n  }\n\n  /* ... and enable hmac_prng_generate */\n  prng->countdown = MAX_GENS;\n\n  return TC_CRYPTO_SUCCESS;\n}\n\nint tc_hmac_prng_generate(uint8_t *out, unsigned int outlen, TCHmacPrng_t prng) {\n  unsigned int bufferlen;\n\n  /* input sanity check: */\n  if (out == (uint8_t *)0 || prng == (TCHmacPrng_t)0 || outlen == 0 || outlen > MAX_OUT) {\n    return TC_CRYPTO_FAIL;\n  } else if (prng->countdown == 0) {\n    return TC_HMAC_PRNG_RESEED_REQ;\n  }\n\n  prng->countdown--;\n\n  while (outlen != 0) {\n    /* configure the new prng key into the prng's instance of hmac */\n    tc_hmac_set_key(&prng->h, prng->key, sizeof(prng->key));\n\n    /* operate HMAC in OFB mode to create \"random\" outputs */\n    (void)tc_hmac_init(&prng->h);\n    (void)tc_hmac_update(&prng->h, prng->v, sizeof(prng->v));\n    (void)tc_hmac_final(prng->v, sizeof(prng->v), &prng->h);\n\n    bufferlen = (TC_SHA256_DIGEST_SIZE > outlen) ? outlen : TC_SHA256_DIGEST_SIZE;\n    (void)_copy(out, bufferlen, prng->v, bufferlen);\n\n    out += bufferlen;\n    outlen = (outlen > TC_SHA256_DIGEST_SIZE) ? (outlen - TC_SHA256_DIGEST_SIZE) : 0;\n  }\n\n  /* block future PRNG compromises from revealing past state */\n  update(prng, 0, 0, 0, 0);\n\n  return TC_CRYPTO_SUCCESS;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/source/sha256.c",
    "content": "/* sha256.c - TinyCrypt SHA-256 crypto hash algorithm implementation */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"sha256.h\"\n#include \"constants.h\"\n#include \"utils.h\"\n\nstatic void compress(unsigned int *iv, const uint8_t *data);\n\nint tc_sha256_init(TCSha256State_t s) {\n  /* input sanity check: */\n  if (s == (TCSha256State_t)0) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  /*\n   * Setting the initial state values.\n   * These values correspond to the first 32 bits of the fractional parts\n   * of the square roots of the first 8 primes: 2, 3, 5, 7, 11, 13, 17\n   * and 19.\n   */\n  _set((uint8_t *)s, 0x00, sizeof(*s));\n  s->iv[0] = 0x6a09e667;\n  s->iv[1] = 0xbb67ae85;\n  s->iv[2] = 0x3c6ef372;\n  s->iv[3] = 0xa54ff53a;\n  s->iv[4] = 0x510e527f;\n  s->iv[5] = 0x9b05688c;\n  s->iv[6] = 0x1f83d9ab;\n  s->iv[7] = 0x5be0cd19;\n\n  return TC_CRYPTO_SUCCESS;\n}\n\nint tc_sha256_update(TCSha256State_t s, const uint8_t *data, size_t datalen) {\n  /* input sanity check: */\n  if (s == (TCSha256State_t)0 || data == (void *)0) {\n    return TC_CRYPTO_FAIL;\n  } else if (datalen == 0) {\n    return TC_CRYPTO_SUCCESS;\n  }\n\n  while (datalen-- > 0) {\n    s->leftover[s->leftover_offset++] = *(data++);\n    if (s->leftover_offset >= TC_SHA256_BLOCK_SIZE) {\n      compress(s->iv, s->leftover);\n      s->leftover_offset = 0;\n      s->bits_hashed += (TC_SHA256_BLOCK_SIZE << 3);\n    }\n  }\n\n  return TC_CRYPTO_SUCCESS;\n}\n\nint tc_sha256_final(uint8_t *digest, TCSha256State_t s) {\n  unsigned int i;\n\n  /* input sanity check: */\n  if (digest == (uint8_t *)0 || s == (TCSha256State_t)0) {\n    return TC_CRYPTO_FAIL;\n  }\n\n  s->bits_hashed += (s->leftover_offset << 3);\n\n  s->leftover[s->leftover_offset++] = 0x80; /* always room for one byte */\n  if (s->leftover_offset > (sizeof(s->leftover) - 8)) {\n    /* there is not room for all the padding in this block */\n    _set(s->leftover + s->leftover_offset, 0x00, sizeof(s->leftover) - s->leftover_offset);\n    compress(s->iv, s->leftover);\n    s->leftover_offset = 0;\n  }\n\n  /* add the padding and the length in big-Endian format */\n  _set(s->leftover + s->leftover_offset, 0x00, sizeof(s->leftover) - 8 - s->leftover_offset);\n  s->leftover[sizeof(s->leftover) - 1] = (uint8_t)(s->bits_hashed);\n  s->leftover[sizeof(s->leftover) - 2] = (uint8_t)(s->bits_hashed >> 8);\n  s->leftover[sizeof(s->leftover) - 3] = (uint8_t)(s->bits_hashed >> 16);\n  s->leftover[sizeof(s->leftover) - 4] = (uint8_t)(s->bits_hashed >> 24);\n  s->leftover[sizeof(s->leftover) - 5] = (uint8_t)(s->bits_hashed >> 32);\n  s->leftover[sizeof(s->leftover) - 6] = (uint8_t)(s->bits_hashed >> 40);\n  s->leftover[sizeof(s->leftover) - 7] = (uint8_t)(s->bits_hashed >> 48);\n  s->leftover[sizeof(s->leftover) - 8] = (uint8_t)(s->bits_hashed >> 56);\n\n  /* hash the padding and length */\n  compress(s->iv, s->leftover);\n\n  /* copy the iv out to digest */\n  for (i = 0; i < TC_SHA256_STATE_BLOCKS; ++i) {\n    unsigned int t = *((unsigned int *)&s->iv[i]);\n    *digest++      = (uint8_t)(t >> 24);\n    *digest++      = (uint8_t)(t >> 16);\n    *digest++      = (uint8_t)(t >> 8);\n    *digest++      = (uint8_t)(t);\n  }\n\n  /* destroy the current state */\n  _set(s, 0, sizeof(*s));\n\n  return TC_CRYPTO_SUCCESS;\n}\n\n/*\n * Initializing SHA-256 Hash constant words K.\n * These values correspond to the first 32 bits of the fractional parts of the\n * cube roots of the first 64 primes between 2 and 311.\n */\nstatic const unsigned int k256[64] = {0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74,\n                                      0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d,\n                                      0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e,\n                                      0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n                                      0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2};\n\nstatic inline unsigned int ROTR(unsigned int a, unsigned int n) { return (((a) >> n) | ((a) << (32 - n))); }\n\n#define Sigma0(a) (ROTR((a), 2) ^ ROTR((a), 13) ^ ROTR((a), 22))\n#define Sigma1(a) (ROTR((a), 6) ^ ROTR((a), 11) ^ ROTR((a), 25))\n#define sigma0(a) (ROTR((a), 7) ^ ROTR((a), 18) ^ ((a) >> 3))\n#define sigma1(a) (ROTR((a), 17) ^ ROTR((a), 19) ^ ((a) >> 10))\n\n#define Ch(a, b, c)  (((a) & (b)) ^ ((~(a)) & (c)))\n#define Maj(a, b, c) (((a) & (b)) ^ ((a) & (c)) ^ ((b) & (c)))\n\nstatic inline unsigned int BigEndian(const uint8_t **c) {\n  unsigned int n = 0;\n\n  n = (((unsigned int)(*((*c)++))) << 24);\n  n |= ((unsigned int)(*((*c)++)) << 16);\n  n |= ((unsigned int)(*((*c)++)) << 8);\n  n |= ((unsigned int)(*((*c)++)));\n  return n;\n}\n\nstatic void compress(unsigned int *iv, const uint8_t *data) {\n  unsigned int a, b, c, d, e, f, g, h;\n  unsigned int s0, s1;\n  unsigned int t1, t2;\n  unsigned int work_space[16];\n  unsigned int n;\n  unsigned int i;\n\n  a = iv[0];\n  b = iv[1];\n  c = iv[2];\n  d = iv[3];\n  e = iv[4];\n  f = iv[5];\n  g = iv[6];\n  h = iv[7];\n\n  for (i = 0; i < 16; ++i) {\n    n  = BigEndian(&data);\n    t1 = work_space[i] = n;\n    t1 += h + Sigma1(e) + Ch(e, f, g) + k256[i];\n    t2 = Sigma0(a) + Maj(a, b, c);\n    h  = g;\n    g  = f;\n    f  = e;\n    e  = d + t1;\n    d  = c;\n    c  = b;\n    b  = a;\n    a  = t1 + t2;\n  }\n\n  for (; i < 64; ++i) {\n    s0 = work_space[(i + 1) & 0x0f];\n    s0 = sigma0(s0);\n    s1 = work_space[(i + 14) & 0x0f];\n    s1 = sigma1(s1);\n\n    t1 = work_space[i & 0xf] += s0 + s1 + work_space[(i + 9) & 0xf];\n    t1 += h + Sigma1(e) + Ch(e, f, g) + k256[i];\n    t2 = Sigma0(a) + Maj(a, b, c);\n    h  = g;\n    g  = f;\n    f  = e;\n    e  = d + t1;\n    d  = c;\n    c  = b;\n    b  = a;\n    a  = t1 + t2;\n  }\n\n  iv[0] += a;\n  iv[1] += b;\n  iv[2] += c;\n  iv[3] += d;\n  iv[4] += e;\n  iv[5] += f;\n  iv[6] += g;\n  iv[7] += h;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/tinycrypt/source/utils.c",
    "content": "/* utils.c - TinyCrypt platform-dependent run-time operations */\n\n/*\n *  Copyright (C) 2017 by Intel Corporation, All Rights Reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions are met:\n *\n *    - Redistributions of source code must retain the above copyright notice,\n *     this list of conditions and the following disclaimer.\n *\n *    - Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n *\n *    - Neither the name of Intel Corporation nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n *  POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"utils.h\"\n#include \"constants.h\"\n\n#include <string.h>\n\n#define MASK_TWENTY_SEVEN 0x1b\n\nunsigned int _copy(uint8_t *to, unsigned int to_len, const uint8_t *from, unsigned int from_len) {\n  if (from_len <= to_len) {\n    (void)memcpy(to, from, from_len);\n    return from_len;\n  } else {\n    return TC_CRYPTO_FAIL;\n  }\n}\n\nvoid _set(void *to, uint8_t val, unsigned int len) { (void)memset(to, val, len); }\n\n/*\n * Doubles the value of a byte for values up to 127.\n */\nuint8_t _double_byte(uint8_t a) { return ((a << 1) ^ ((a >> 7) * MASK_TWENTY_SEVEN)); }\n\nint _compare(const uint8_t *a, const uint8_t *b, size_t size) {\n  const uint8_t *tempa  = a;\n  const uint8_t *tempb  = b;\n  uint8_t        result = 0;\n\n  for (unsigned int i = 0; i < size; i++) {\n    result |= tempa[i] ^ tempb[i];\n  }\n  return result;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/utils.c",
    "content": "/*****************************************************************************************\n *\n * @file utils.c\n *\n * @brief entry\n *\n * Copyright (C) Bouffalo Lab 2019\n *\n * History: 2019-11 crealted by Lanlan Gong @ Shanghai\n *\n *****************************************************************************************/\n#include <stddef.h>\n#include <stdint.h>\n#include <stdlib.h>\n\nvoid reverse_bytearray(uint8_t *src, uint8_t *result, int array_size) {\n  for (int i = 0; i < array_size; i++) {\n    result[array_size - i - 1] = src[i];\n  }\n}\n\nunsigned int find_msb_set(uint32_t data) {\n  uint32_t count = 0;\n  uint32_t mask  = 0x80000000;\n\n  if (!data) {\n    return 0;\n  }\n  while ((data & mask) == 0) {\n    count += 1u;\n    mask = mask >> 1u;\n  }\n  return (32 - count);\n}\n\nunsigned int find_lsb_set(uint32_t data) {\n  uint32_t count = 0;\n  uint32_t mask  = 0x00000001;\n\n  if (!data) {\n    return 0;\n  }\n  while ((data & mask) == 0) {\n    count += 1u;\n    mask = mask << 1u;\n  }\n  return (1 + count);\n}\n\nint char2hex(char c, uint8_t *x) {\n  if (c >= '0' && c <= '9') {\n    *x = c - '0';\n  } else if (c >= 'a' && c <= 'f') {\n    *x = c - 'a' + 10;\n  } else if (c >= 'A' && c <= 'F') {\n    *x = c - 'A' + 10;\n  } else {\n    return -1;\n  }\n\n  return 0;\n}\n\nint hex2char(uint8_t x, char *c) {\n  if (x <= 9) {\n    *c = x + '0';\n  } else if (x <= 15) {\n    *c = x - 10 + 'a';\n  } else {\n    return -1;\n  }\n\n  return 0;\n}\n\nsize_t bin2hex(const uint8_t *buf, size_t buflen, char *hex, size_t hexlen) {\n  if ((hexlen + 1) < buflen * 2) {\n    return 0;\n  }\n\n  for (size_t i = 0; i < buflen; i++) {\n    if (hex2char(buf[i] >> 4, &hex[2 * i]) < 0) {\n      return 0;\n    }\n    if (hex2char(buf[i] & 0xf, &hex[2 * i + 1]) < 0) {\n      return 0;\n    }\n  }\n\n  hex[2 * buflen] = '\\0';\n  return 2 * buflen;\n}\n\nsize_t hex2bin(const char *hex, size_t hexlen, uint8_t *buf, size_t buflen) {\n  uint8_t dec;\n\n  if (buflen < hexlen / 2 + hexlen % 2) {\n    return 0;\n  }\n\n  /* if hexlen is uneven, insert leading zero nibble */\n  if (hexlen % 2) {\n    if (char2hex(hex[0], &dec) < 0) {\n      return 0;\n    }\n    buf[0] = dec;\n    hex++;\n    buf++;\n  }\n\n  /* regular hex conversion */\n  for (size_t i = 0; i < hexlen / 2; i++) {\n    if (char2hex(hex[2 * i], &dec) < 0) {\n      return 0;\n    }\n    buf[i] = dec << 4;\n\n    if (char2hex(hex[2 * i + 1], &dec) < 0) {\n      return 0;\n    }\n    buf[i] += dec;\n  }\n\n  return hexlen / 2 + hexlen % 2;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/common/work_q.c",
    "content": "/*\n * Copyright (c) 2016 Intel Corporation\n * Copyright (c) 2016 Wind River Systems, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @file\n *\n * Workqueue support functions\n */\n\n#include \"errno.h\"\n#include <log.h>\n#include <zephyr.h>\n\nstruct k_thread work_q_thread;\n#if !defined(BFLB_BLE)\nstatic BT_STACK_NOINIT(work_q_stack, CONFIG_BT_WORK_QUEUE_STACK_SIZE);\n#endif\nstruct k_work_q g_work_queue_main;\n\nstatic void k_work_submit_to_queue(struct k_work_q *work_q, struct k_work *work) {\n  if (!atomic_test_and_set_bit(work->flags, K_WORK_STATE_PENDING)) {\n    k_fifo_put(&work_q->fifo, work);\n#if (BFLB_BT_CO_THREAD)\n    extern struct k_sem g_poll_sem;\n    k_sem_give(&g_poll_sem);\n#endif\n  }\n}\n\n#if defined(BFLB_BLE)\n#if (BFLB_BT_CO_THREAD)\nvoid handle_work_queue(void) {\n  struct k_work *work;\n  work = k_fifo_get(&g_work_queue_main.fifo, K_NO_WAIT);\n\n  if (atomic_test_and_clear_bit(work->flags, K_WORK_STATE_PENDING)) {\n    work->handler(work);\n  }\n}\n#else\nstatic void work_queue_main(void *p1) {\n  struct k_work *work;\n  UNUSED(p1);\n\n  while (1) {\n    work = k_fifo_get(&g_work_queue_main.fifo, K_FOREVER);\n\n    if (atomic_test_and_clear_bit(work->flags, K_WORK_STATE_PENDING)) {\n      work->handler(work);\n    }\n\n    k_yield();\n  }\n}\n\nint k_work_q_start(void) {\n  k_fifo_init(&g_work_queue_main.fifo, 20);\n  return k_thread_create(&work_q_thread, \"work_q_thread\", CONFIG_BT_WORK_QUEUE_STACK_SIZE, work_queue_main, CONFIG_BT_WORK_QUEUE_PRIO);\n}\n#endif\n\nint k_work_init(struct k_work *work, k_work_handler_t handler) {\n  ASSERT(work, \"work is NULL\");\n\n  atomic_clear(work->flags);\n  work->handler = handler;\n  return 0;\n}\n\nvoid k_work_submit(struct k_work *work) { k_work_submit_to_queue(&g_work_queue_main, work); }\n\nstatic void work_timeout(void *timer) {\n  /* Parameter timer type is */\n  struct k_delayed_work *w = (struct k_delayed_work *)k_timer_get_id(timer);\n  if (w->work_q == NULL) {\n    return;\n  }\n\n  /* submit work to workqueue */\n  if (!atomic_test_bit(w->work.flags, K_WORK_STATE_PERIODIC)) {\n    k_work_submit_to_queue(w->work_q, &w->work);\n    /* detach from workqueue, for cancel to return appropriate status */\n    w->work_q = NULL;\n  } else {\n    /* For periodic timer, restart it.*/\n    k_timer_reset(&w->timer);\n    k_work_submit_to_queue(w->work_q, &w->work);\n  }\n}\n\nvoid k_delayed_work_init(struct k_delayed_work *work, k_work_handler_t handler) {\n  ASSERT(work, \"delay work is NULL\");\n  /* Added by bouffalolab */\n  k_work_init(&work->work, handler);\n  k_timer_init(&work->timer, work_timeout, work);\n  work->work_q = NULL;\n}\n\nstatic int k_delayed_work_submit_to_queue(struct k_work_q *work_q, struct k_delayed_work *work, uint32_t delay) {\n  int err;\n\n  /* Work cannot be active in multiple queues */\n  if (work->work_q && work->work_q != work_q) {\n    err = -EADDRINUSE;\n    goto done;\n  }\n\n  /* Cancel if work has been submitted */\n  if (work->work_q == work_q) {\n    err = k_delayed_work_cancel(work);\n\n    if (err < 0) {\n      goto done;\n    }\n  }\n\n  if (!delay) {\n    /* Submit work if no ticks is 0 */\n    k_work_submit_to_queue(work_q, &work->work);\n    work->work_q = NULL;\n  } else {\n    /* Add timeout */\n    /* Attach workqueue so the timeout callback can submit it */\n    k_timer_start(&work->timer, delay);\n    work->work_q = work_q;\n  }\n\n  err = 0;\n\ndone:\n  return err;\n}\n\nint k_delayed_work_submit(struct k_delayed_work *work, uint32_t delay) {\n  atomic_clear_bit(work->work.flags, K_WORK_STATE_PERIODIC);\n  return k_delayed_work_submit_to_queue(&g_work_queue_main, work, delay);\n}\n\n/* Added by bouffalolab */\nint k_delayed_work_submit_periodic(struct k_delayed_work *work, s32_t period) {\n  atomic_set_bit(work->work.flags, K_WORK_STATE_PERIODIC);\n  return k_delayed_work_submit_to_queue(&g_work_queue_main, work, period);\n}\n\nint k_delayed_work_cancel(struct k_delayed_work *work) {\n  int err = 0;\n\n  if (atomic_test_bit(work->work.flags, K_WORK_STATE_PENDING)) {\n    err = -EINPROGRESS;\n    goto exit;\n  }\n\n  if (!work->work_q) {\n    err = -EINVAL;\n    goto exit;\n  }\n\n  k_timer_stop(&work->timer);\n  work->work_q         = NULL;\n  work->timer.timeout  = 0;\n  work->timer.start_ms = 0;\n\nexit:\n  return err;\n}\n\ns32_t k_delayed_work_remaining_get(struct k_delayed_work *work) {\n  int32_t    remain;\n  k_timer_t *timer;\n\n  if (work == NULL) {\n    return 0;\n  }\n\n  timer  = &work->timer;\n  remain = timer->timeout - (k_now_ms() - timer->start_ms);\n  if (remain < 0) {\n    remain = 0;\n  }\n  return remain;\n}\n\nvoid k_delayed_work_del_timer(struct k_delayed_work *work) {\n  if (NULL == work || NULL == work->timer.timer.hdl)\n    return;\n\n  k_timer_delete(&work->timer);\n  work->timer.timer.hdl = NULL;\n}\n\n/* Added by bouffalolab */\nint k_delayed_work_free(struct k_delayed_work *work) {\n  int err = 0;\n\n  if (atomic_test_bit(work->work.flags, K_WORK_STATE_PENDING)) {\n    err = -EINPROGRESS;\n    goto exit;\n  }\n\n  k_delayed_work_del_timer(work);\n  work->work_q         = NULL;\n  work->timer.timeout  = 0;\n  work->timer.start_ms = 0;\n\nexit:\n  return err;\n}\n\n#else\nstatic void work_q_main(void *work_q_ptr, void *p2, void *p3) {\n  struct k_work_q *work_q = work_q_ptr;\n\n  ARG_UNUSED(p2);\n  ARG_UNUSED(p3);\n\n  while (1) {\n    struct k_work   *work;\n    k_work_handler_t handler;\n\n    work = k_queue_get(&work_q->queue, K_FOREVER);\n    if (!work) {\n      continue;\n    }\n\n    handler = work->handler;\n\n    /* Reset pending state so it can be resubmitted by handler */\n    if (atomic_test_and_clear_bit(work->flags, K_WORK_STATE_PENDING)) {\n      handler(work);\n    }\n\n    /* Make sure we don't hog up the CPU if the FIFO never (or\n     * very rarely) gets empty.\n     */\n    k_yield();\n  }\n}\n\nvoid k_work_q_start(struct k_work_q *work_q, k_thread_stack_t *stack, size_t stack_size, int prio) {\n  k_queue_init(&work_q->queue, 20);\n  k_thread_create(&work_q->thread, stack, stack_size, work_q_main, work_q, 0, 0, prio, 0, 0);\n  _k_object_init(work_q);\n}\n\n#ifdef CONFIG_SYS_CLOCK_EXISTS\nstatic void work_timeout(struct _timeout *t) {\n  struct k_delayed_work *w = CONTAINER_OF(t, struct k_delayed_work, timeout);\n\n  /* submit work to workqueue */\n  k_work_submit_to_queue(w->work_q, &w->work);\n}\n\nvoid k_delayed_work_init(struct k_delayed_work *work, k_work_handler_t handler) {\n  k_work_init(&work->work, handler);\n  _init_timeout(&work->timeout, work_timeout);\n  work->work_q = NULL;\n\n  _k_object_init(work);\n}\n\nint k_delayed_work_submit_to_queue(struct k_work_q *work_q, struct k_delayed_work *work, s32_t delay) {\n  unsigned int key = irq_lock();\n  int          err;\n\n  /* Work cannot be active in multiple queues */\n  if (work->work_q && work->work_q != work_q) {\n    err = -EADDRINUSE;\n    goto done;\n  }\n\n  /* Cancel if work has been submitted */\n  if (work->work_q == work_q) {\n    err = k_delayed_work_cancel(work);\n    if (err < 0) {\n      goto done;\n    }\n  }\n\n  /* Attach workqueue so the timeout callback can submit it */\n  work->work_q = work_q;\n\n  if (!delay) {\n    /* Submit work if no ticks is 0 */\n    k_work_submit_to_queue(work_q, &work->work);\n  } else {\n    /* Add timeout */\n    _add_timeout(NULL, &work->timeout, NULL, _TICK_ALIGN + _ms_to_ticks(delay));\n  }\n\n  err = 0;\n\ndone:\n  irq_unlock(key);\n\n  return err;\n}\n\nint k_delayed_work_cancel(struct k_delayed_work *work) {\n  unsigned int key = irq_lock();\n\n  if (!work->work_q) {\n    irq_unlock(key);\n    return -EINVAL;\n  }\n\n  if (k_work_pending(&work->work)) {\n    /* Remove from the queue if already submitted */\n    if (!k_queue_remove(&work->work_q->queue, &work->work)) {\n      irq_unlock(key);\n      return -EINVAL;\n    }\n  } else {\n    _abort_timeout(&work->timeout);\n  }\n\n  /* Detach from workqueue */\n  work->work_q = NULL;\n\n  atomic_clear_bit(work->work.flags, K_WORK_STATE_PENDING);\n  irq_unlock(key);\n\n  return 0;\n}\n#endif /* CONFIG_SYS_CLOCK_EXISTS */\n#endif /* BFLB_BLE */"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/hci_onchip/hci_driver.c",
    "content": "/*\n * Copyright (c) 2016 Nordic Semiconductor ASA\n * Copyright (c) 2016 Vinayak Kariappa Chettimada\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <errno.h>\n#include <stddef.h>\n#include <string.h>\n\n#include <zephyr.h>\n// #include <soc.h>\n// #include <init.h>\n// #include <device.h>\n// #include <clock_control.h>\n#include <atomic.h>\n\n#include <misc/byteorder.h>\n#include <misc/stack.h>\n#include <misc/util.h>\n\n#include <bluetooth.h>\n#include <hci_driver.h>\n#include <hci_host.h>\n\n#ifdef CONFIG_CLOCK_CONTROL_NRF5\n#include <drivers/clock_control/nrf5_clock_control.h>\n#endif\n\n#define BT_DBG_ENABLED IS_ENABLED(CONFIG_BT_DEBUG_HCI_DRIVER)\n#include \"log.h\"\n\n// #include \"util/util.h\"\n// #include \"hal/ccm.h\"\n// #include \"hal/radio.h\"\n// #include \"ll_sw/pdu.h\"\n// #include \"ll_sw/ctrl.h\"\n#include \"hci_internal.h\"\n// #include \"init.h\"\n// #include \"hal/debug.h\"\n#if defined(BFLB_BLE)\n#include \"bl_hci_wrapper.h\"\n#endif\n\n#define NODE_RX(_node) CONTAINER_OF(_node, struct radio_pdu_node_rx, hdr.onion.node)\n\n#if !defined(BFLB_BLE)\nstatic K_SEM_DEFINE(sem_prio_recv, 0, BT_UINT_MAX);\n#endif\n\nK_FIFO_DEFINE(recv_fifo);\n#if !defined(BFLB_BLE)\nstruct k_thread prio_recv_thread_data;\nstatic BT_STACK_NOINIT(prio_recv_thread_stack, CONFIG_BT_CTLR_RX_PRIO_STACK_SIZE);\n#endif\n\nstruct k_thread recv_thread_data;\n#if !defined(BFLB_BLE)\nstatic BT_STACK_NOINIT(recv_thread_stack, CONFIG_BT_RX_STACK_SIZE);\n#endif\n\n#if defined(CONFIG_INIT_STACKS)\nstatic u32_t prio_ts;\nstatic u32_t rx_ts;\n#endif\n\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\nstatic struct k_poll_signal hbuf_signal = K_POLL_SIGNAL_INITIALIZER(hbuf_signal);\nstatic sys_slist_t          hbuf_pend;\nstatic s32_t                hbuf_count;\n#endif\n\n#if !defined(BFLB_BLE)\nstatic void prio_recv_thread(void *p1, void *p2, void *p3) {\n  while (1) {\n    struct radio_pdu_node_rx *node_rx;\n    u8_t                      num_cmplt;\n    u16_t                     handle;\n\n    while ((num_cmplt = radio_rx_get(&node_rx, &handle))) {\n#if defined(CONFIG_BT_CONN)\n      struct net_buf *buf;\n\n      buf = bt_buf_get_rx(BT_BUF_EVT, K_FOREVER);\n      hci_num_cmplt_encode(buf, handle, num_cmplt);\n      BT_DBG(\"Num Complete: 0x%04x:%u\", handle, num_cmplt);\n      bt_recv_prio(buf);\n      k_yield();\n#endif\n    }\n\n    if (node_rx) {\n      radio_rx_dequeue();\n\n      BT_DBG(\"RX node enqueue\");\n      k_fifo_put(&recv_fifo, node_rx);\n\n      continue;\n    }\n\n    BT_DBG(\"sem take...\");\n    k_sem_take(&sem_prio_recv, K_FOREVER);\n    BT_DBG(\"sem taken\");\n\n#if defined(CONFIG_INIT_STACKS)\n    if (k_uptime_get_32() - prio_ts > K_SECONDS(5)) {\n      STACK_ANALYZE(\"prio recv thread stack\", prio_recv_thread_stack);\n      prio_ts = k_uptime_get_32();\n    }\n#endif\n  }\n}\n\nstatic inline struct net_buf *encode_node(struct radio_pdu_node_rx *node_rx, s8_t class) {\n  struct net_buf *buf = NULL;\n\n  /* Check if we need to generate an HCI event or ACL data */\n  switch (class) {\n  case HCI_CLASS_EVT_DISCARDABLE:\n  case HCI_CLASS_EVT_REQUIRED:\n  case HCI_CLASS_EVT_CONNECTION:\n    if (class == HCI_CLASS_EVT_DISCARDABLE) {\n      buf = bt_buf_get_rx(BT_BUF_EVT, K_NO_WAIT);\n    } else {\n      buf = bt_buf_get_rx(BT_BUF_EVT, K_FOREVER);\n    }\n    if (buf) {\n      hci_evt_encode(node_rx, buf);\n    }\n    break;\n#if defined(CONFIG_BT_CONN)\n  case HCI_CLASS_ACL_DATA:\n    /* generate ACL data */\n    buf = bt_buf_get_rx(BT_BUF_ACL_IN, K_FOREVER);\n    hci_acl_encode(node_rx, buf);\n    break;\n#endif\n  default:\n    LL_ASSERT(0);\n    break;\n  }\n\n  radio_rx_fc_set(node_rx->hdr.handle, 0);\n  node_rx->hdr.onion.next = 0;\n  radio_rx_mem_release(&node_rx);\n\n  return buf;\n}\n\nstatic inline struct net_buf *process_node(struct radio_pdu_node_rx *node_rx) {\n  s8_t class          = hci_get_class(node_rx);\n  struct net_buf *buf = NULL;\n\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\n  if (hbuf_count != -1) {\n    bool pend = !sys_slist_is_empty(&hbuf_pend);\n\n    /* controller to host flow control enabled */\n    switch (class) {\n    case HCI_CLASS_EVT_DISCARDABLE:\n    case HCI_CLASS_EVT_REQUIRED:\n      break;\n    case HCI_CLASS_EVT_CONNECTION:\n      /* for conn-related events, only pend is relevant */\n      hbuf_count = 1;\n      /* fallthrough */\n    case HCI_CLASS_ACL_DATA:\n      if (pend || !hbuf_count) {\n        sys_slist_append(&hbuf_pend, &node_rx->hdr.onion.node);\n        BT_DBG(\"FC: Queuing item: %d\", class);\n        return NULL;\n      }\n      break;\n    default:\n      LL_ASSERT(0);\n      break;\n    }\n  }\n#endif\n\n  /* process regular node from radio */\n  buf = encode_node(node_rx, class);\n\n  return buf;\n}\n\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\nstatic inline struct net_buf *process_hbuf(struct radio_pdu_node_rx *n) {\n  /* shadow total count in case of preemption */\n  struct radio_pdu_node_rx *node_rx    = NULL;\n  s32_t                     hbuf_total = hci_hbuf_total;\n  struct net_buf           *buf        = NULL;\n  sys_snode_t              *node       = NULL;\n  s8_t class;\n  int reset;\n\n  reset = atomic_test_and_clear_bit(&hci_state_mask, HCI_STATE_BIT_RESET);\n  if (reset) {\n    /* flush queue, no need to free, the LL has already done it */\n    sys_slist_init(&hbuf_pend);\n  }\n\n  if (hbuf_total <= 0) {\n    hbuf_count = -1;\n    return NULL;\n  }\n\n  /* available host buffers */\n  hbuf_count = hbuf_total - (hci_hbuf_sent - hci_hbuf_acked);\n\n  /* host acked ACL packets, try to dequeue from hbuf */\n  node = sys_slist_peek_head(&hbuf_pend);\n  if (!node) {\n    return NULL;\n  }\n\n  /* Return early if this iteration already has a node to process */\n  node_rx = NODE_RX(node);\n  class   = hci_get_class(node_rx);\n  if (n) {\n    if (class == HCI_CLASS_EVT_CONNECTION || (class == HCI_CLASS_ACL_DATA && hbuf_count)) {\n      /* node to process later, schedule an iteration */\n      BT_DBG(\"FC: signalling\");\n      k_poll_signal_raise(&hbuf_signal, 0x0);\n    }\n    return NULL;\n  }\n\n  switch (class) {\n  case HCI_CLASS_EVT_CONNECTION:\n    BT_DBG(\"FC: dequeueing event\");\n    (void)sys_slist_get(&hbuf_pend);\n    break;\n  case HCI_CLASS_ACL_DATA:\n    if (hbuf_count) {\n      BT_DBG(\"FC: dequeueing ACL data\");\n      (void)sys_slist_get(&hbuf_pend);\n    } else {\n      /* no buffers, HCI will signal */\n      node = NULL;\n    }\n    break;\n  case HCI_CLASS_EVT_DISCARDABLE:\n  case HCI_CLASS_EVT_REQUIRED:\n  default:\n    LL_ASSERT(0);\n    break;\n  }\n\n  if (node) {\n    buf = encode_node(node_rx, class);\n    /* Update host buffers after encoding */\n    hbuf_count = hbuf_total - (hci_hbuf_sent - hci_hbuf_acked);\n    /* next node */\n    node = sys_slist_peek_head(&hbuf_pend);\n    if (node) {\n      node_rx = NODE_RX(node);\n      class   = hci_get_class(node_rx);\n\n      if (class == HCI_CLASS_EVT_CONNECTION || (class == HCI_CLASS_ACL_DATA && hbuf_count)) {\n        /* more to process, schedule an\n         * iteration\n         */\n        BT_DBG(\"FC: signalling\");\n        k_poll_signal_raise(&hbuf_signal, 0x0);\n      }\n    }\n  }\n\n  return buf;\n}\n#endif\n#endif\n\n#if defined(BFLB_BLE)\nstatic void recv_thread(void *p1) {\n  UNUSED(p1);\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\n  /* @todo: check if the events structure really needs to be static */\n  static struct k_poll_event events[2] = {\n      K_POLL_EVENT_STATIC_INITIALIZER(K_POLL_TYPE_SIGNAL, K_POLL_MODE_NOTIFY_ONLY, &hbuf_signal, 0),\n      K_POLL_EVENT_STATIC_INITIALIZER(K_POLL_TYPE_FIFO_DATA_AVAILABLE, K_POLL_MODE_NOTIFY_ONLY, &recv_fifo, 0),\n  };\n#endif\n\n  while (1) {\n#if defined(BFLB_BLE)\n    struct net_buf *buf = NULL;\n    buf                 = net_buf_get(&recv_fifo, K_FOREVER);\n    if (buf) {\n      BT_DBG(\"Calling bt_recv(%p)\", buf);\n      bt_recv(buf);\n    }\n#else\n    struct radio_pdu_node_rx *node_rx = NULL;\n    struct net_buf           *buf     = NULL;\n\n    BT_DBG(\"blocking\");\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\n    int err;\n\n    err = k_poll(events, 2, K_FOREVER);\n    LL_ASSERT(err == 0);\n    if (events[0].state == K_POLL_STATE_SIGNALED) {\n      events[0].signal->signaled = 0;\n    } else if (events[1].state == K_POLL_STATE_FIFO_DATA_AVAILABLE) {\n      node_rx = k_fifo_get(events[1].fifo, 0);\n    }\n\n    events[0].state = K_POLL_STATE_NOT_READY;\n    events[1].state = K_POLL_STATE_NOT_READY;\n\n    /* process host buffers first if any */\n    buf = process_hbuf(node_rx);\n\n#else\n    node_rx = k_fifo_get(&recv_fifo, K_FOREVER);\n#endif\n    BT_DBG(\"unblocked\");\n\n    if (node_rx && !buf) {\n      /* process regular node from radio */\n      buf = process_node(node_rx);\n    }\n\n    if (buf) {\n      if (buf->len) {\n        BT_DBG(\"Packet in: type:%u len:%u\", bt_buf_get_type(buf), buf->len);\n        bt_recv(buf);\n      } else {\n        net_buf_unref(buf);\n      }\n    }\n#endif\n    k_yield();\n\n#if defined(CONFIG_INIT_STACKS)\n    if (k_uptime_get_32() - rx_ts > K_SECONDS(5)) {\n      STACK_ANALYZE(\"recv thread stack\", recv_thread_stack);\n      rx_ts = k_uptime_get_32();\n    }\n#endif\n  }\n}\n#endif\n\n#if !defined(BFLB_BLE)\nstatic int cmd_handle(struct net_buf *buf) {\n  struct net_buf *evt;\n\n  evt = hci_cmd_handle(buf);\n  if (evt) {\n    BT_DBG(\"Replying with event of %u bytes\", evt->len);\n    bt_recv_prio(evt);\n  }\n}\n\n#if defined(CONFIG_BT_CONN)\nstatic int acl_handle(struct net_buf *buf) {\n  struct net_buf *evt;\n  int             err;\n\n  err = hci_acl_handle(buf, &evt);\n  if (evt) {\n    BT_DBG(\"Replying with event of %u bytes\", evt->len);\n    bt_recv_prio(evt);\n  }\n\n  return err;\n}\n#endif /* CONFIG_BT_CONN */\n#endif\n\nstatic int hci_driver_send(struct net_buf *buf) {\n#if !defined(BFLB_BLE)\n  u8_t type;\n#endif\n  int err;\n\n  BT_DBG(\"enter\");\n\n  if (!buf->len) {\n    BT_ERR(\"Empty HCI packet\");\n    return -EINVAL;\n  }\n\n#if defined(BFLB_BLE)\n  err = bl_onchiphci_send_2_controller(buf);\n  net_buf_unref(buf);\n  return err;\n#else\n  type = bt_buf_get_type(buf);\n  switch (type) {\n#if defined(CONFIG_BT_CONN)\n  case BT_BUF_ACL_OUT:\n    err = acl_handle(buf);\n    break;\n#endif /* CONFIG_BT_CONN */\n  case BT_BUF_CMD:\n    err = cmd_handle(buf);\n\n    break;\n  default:\n    BT_ERR(\"Unknown HCI type %u\", type);\n    return -EINVAL;\n  }\n\n  if (!err) {\n    net_buf_unref(buf);\n  } else {\n  }\n\n  BT_DBG(\"exit: %d\", err);\n#endif\n  return err;\n}\n\nstatic int hci_driver_open(void) {\n#if !defined(BFLB_BLE)\n  u32_t err;\n\n  DEBUG_INIT();\n  k_sem_init(&sem_prio_recv, 0, BT_UINT_MAX);\n\n  err = ll_init(&sem_prio_recv);\n\n  if (err) {\n    BT_ERR(\"LL initialization failed: %u\", err);\n    return err;\n  }\n#endif\n\n#if !defined(BFLB_BLE)\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\n  hci_init(&hbuf_signal);\n#else\n  hci_init(NULL);\n#endif\n#endif\n#if (!BFLB_BT_CO_THREAD)\n  k_fifo_init(&recv_fifo, 20);\n#endif\n#if defined(BFLB_BLE)\n#if (!BFLB_BT_CO_THREAD)\n  k_thread_create(&recv_thread_data, \"recv_thread\", CONFIG_BT_RX_STACK_SIZE /*K_THREAD_STACK_SIZEOF(recv_thread_stack)*/, recv_thread, K_PRIO_COOP(CONFIG_BT_RX_PRIO));\n#endif\n#else\n  k_thread_create(&prio_recv_thread_data, prio_recv_thread_stack, K_THREAD_STACK_SIZEOF(prio_recv_thread_stack), prio_recv_thread, NULL, NULL, NULL, K_PRIO_COOP(CONFIG_BT_CTLR_RX_PRIO), 0, K_NO_WAIT);\n#endif\n\n  BT_DBG(\"Success.\");\n\n  return 0;\n}\n\nvoid hci_driver_enque_recvq(struct net_buf *buf) {\n  net_buf_put(&recv_fifo, buf);\n#if (BFLB_BT_CO_THREAD)\n  extern struct k_sem g_poll_sem;\n  k_sem_give(&g_poll_sem);\n#endif\n}\n\nstatic const struct bt_hci_driver drv = {\n    .name = \"Controller\",\n    .bus  = BT_HCI_DRIVER_BUS_VIRTUAL,\n    .open = hci_driver_open,\n    .send = hci_driver_send,\n};\n\n#if defined(BFLB_BLE)\nint hci_driver_init(void) {\n  bt_hci_driver_register(&drv);\n\n  return 0;\n}\n#else\nstatic int _hci_driver_init(struct device *unused) {\n  ARG_UNUSED(unused);\n\n  bt_hci_driver_register(&drv);\n\n  return 0;\n}\n// SYS_INIT(_hci_driver_init, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE);\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/hci_onchip/hci_internal.h",
    "content": "/*\n * Copyright (c) 2016 Nordic Semiconductor ASA\n * Copyright (c) 2016 Vinayak Kariappa Chettimada\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#ifndef _HCI_CONTROLLER_H_\n#define _HCI_CONTROLLER_H_\n\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\nextern s32_t hci_hbuf_total;\nextern u32_t hci_hbuf_sent;\nextern u32_t hci_hbuf_acked;\nextern atomic_t hci_state_mask;\n\n#define HCI_STATE_BIT_RESET 0\n#endif\n\n#define HCI_CLASS_EVT_REQUIRED    0\n#define HCI_CLASS_EVT_DISCARDABLE 1\n#define HCI_CLASS_EVT_CONNECTION  2\n#define HCI_CLASS_ACL_DATA        3\n\n#if defined(CONFIG_SOC_FAMILY_NRF5)\n#define BT_HCI_VS_HW_PLAT BT_HCI_VS_HW_PLAT_NORDIC\n#if defined(CONFIG_SOC_SERIES_NRF51X)\n#define BT_HCI_VS_HW_VAR BT_HCI_VS_HW_VAR_NORDIC_NRF51X;\n#elif defined(CONFIG_SOC_SERIES_NRF52X)\n#define BT_HCI_VS_HW_VAR BT_HCI_VS_HW_VAR_NORDIC_NRF52X;\n#endif\n#else\n#define BT_HCI_VS_HW_PLAT 0\n#define BT_HCI_VS_HW_VAR  0\n#endif /* CONFIG_SOC_FAMILY_NRF5 */\n\nvoid hci_init(struct k_poll_signal *signal_host_buf);\nstruct net_buf *hci_cmd_handle(struct net_buf *cmd);\n#if !defined(BFLB_BLE)\nvoid hci_evt_encode(struct radio_pdu_node_rx *node_rx, struct net_buf *buf);\ns8_t hci_get_class(struct radio_pdu_node_rx *node_rx);\n#if defined(CONFIG_BT_CONN)\nint hci_acl_handle(struct net_buf *acl, struct net_buf **evt);\nvoid hci_acl_encode(struct radio_pdu_node_rx *node_rx, struct net_buf *buf);\nvoid hci_num_cmplt_encode(struct net_buf *buf, u16_t handle, u8_t num);\n#endif\n#endif //!defined(BFLB_BLE)\n#endif /* _HCI_CONTROLLER_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/at.c",
    "content": "/**\n * @file at.c\n * Generic AT command handling library implementation\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <ctype.h>\n#include <errno.h>\n#include <net/buf.h>\n#include <stdarg.h>\n#include <string.h>\n\n#include \"at.h\"\n\nstatic void next_list(struct at_client *at) {\n  if (at->buf[at->pos] == ',') {\n    at->pos++;\n  }\n}\n\nint at_check_byte(struct net_buf *buf, char check_byte) {\n  const unsigned char *str = buf->data;\n\n  if (*str != check_byte) {\n    return -EINVAL;\n  }\n  net_buf_pull(buf, 1);\n\n  return 0;\n}\n\nstatic void skip_space(struct at_client *at) {\n  while (at->buf[at->pos] == ' ') {\n    at->pos++;\n  }\n}\n\nint at_get_number(struct at_client *at, uint32_t *val) {\n  uint32_t i;\n\n  skip_space(at);\n\n  for (i = 0U, *val = 0U; isdigit((unsigned char)at->buf[at->pos]); at->pos++, i++) {\n    *val = *val * 10U + at->buf[at->pos] - '0';\n  }\n\n  if (i == 0U) {\n    return -ENODATA;\n  }\n\n  next_list(at);\n  return 0;\n}\n\nstatic bool str_has_prefix(const char *str, const char *prefix) {\n  if (strncmp(str, prefix, strlen(prefix)) != 0) {\n    return false;\n  }\n\n  return true;\n}\n\nstatic int at_parse_result(const char *str, struct net_buf *buf, enum at_result *result) {\n  /* Map the result and check for end lf */\n  if ((!strncmp(str, \"OK\", 2)) && (at_check_byte(buf, '\\n') == 0)) {\n    *result = AT_RESULT_OK;\n    return 0;\n  }\n\n  if ((!strncmp(str, \"ERROR\", 5)) && (at_check_byte(buf, '\\n')) == 0) {\n    *result = AT_RESULT_ERROR;\n    return 0;\n  }\n\n  return -ENOMSG;\n}\n\nstatic int get_cmd_value(struct at_client *at, struct net_buf *buf, char stop_byte, enum at_cmd_state cmd_state) {\n  int         cmd_len = 0;\n  uint8_t     pos     = at->pos;\n  const char *str     = (char *)buf->data;\n\n  while (cmd_len < buf->len && at->pos != at->buf_max_len) {\n    if (*str != stop_byte) {\n      at->buf[at->pos++] = *str;\n      cmd_len++;\n      str++;\n      pos = at->pos;\n    } else {\n      cmd_len++;\n      at->buf[at->pos] = '\\0';\n      at->pos          = 0U;\n      at->cmd_state    = cmd_state;\n      break;\n    }\n  }\n  net_buf_pull(buf, cmd_len);\n\n  if (pos == at->buf_max_len) {\n    return -ENOBUFS;\n  }\n\n  return 0;\n}\n\nstatic int get_response_string(struct at_client *at, struct net_buf *buf, char stop_byte, enum at_state state) {\n  int         cmd_len = 0;\n  uint8_t     pos     = at->pos;\n  const char *str     = (char *)buf->data;\n\n  while (cmd_len < buf->len && at->pos != at->buf_max_len) {\n    if (*str != stop_byte) {\n      at->buf[at->pos++] = *str;\n      cmd_len++;\n      str++;\n      pos = at->pos;\n    } else {\n      cmd_len++;\n      at->buf[at->pos] = '\\0';\n      at->pos          = 0U;\n      at->state        = state;\n      break;\n    }\n  }\n  net_buf_pull(buf, cmd_len);\n\n  if (pos == at->buf_max_len) {\n    return -ENOBUFS;\n  }\n\n  return 0;\n}\n\nstatic void reset_buffer(struct at_client *at) {\n  (void)memset(at->buf, 0, at->buf_max_len);\n  at->pos = 0U;\n}\n\nstatic int at_state_start(struct at_client *at, struct net_buf *buf) {\n  int err;\n\n  err = at_check_byte(buf, '\\r');\n  if (err < 0) {\n    return err;\n  }\n  at->state = AT_STATE_START_CR;\n\n  return 0;\n}\n\nstatic int at_state_start_cr(struct at_client *at, struct net_buf *buf) {\n  int err;\n\n  err = at_check_byte(buf, '\\n');\n  if (err < 0) {\n    return err;\n  }\n  at->state = AT_STATE_START_LF;\n\n  return 0;\n}\n\nstatic int at_state_start_lf(struct at_client *at, struct net_buf *buf) {\n  reset_buffer(at);\n  if (at_check_byte(buf, '+') == 0) {\n    at->state = AT_STATE_GET_CMD_STRING;\n    return 0;\n  } else if (isalpha(*buf->data)) {\n    at->state = AT_STATE_GET_RESULT_STRING;\n    return 0;\n  }\n\n  return -ENODATA;\n}\n\nstatic int at_state_get_cmd_string(struct at_client *at, struct net_buf *buf) { return get_response_string(at, buf, ':', AT_STATE_PROCESS_CMD); }\n\nstatic bool is_cmer(struct at_client *at) {\n  if (strncmp(at->buf, \"CME ERROR\", 9) == 0) {\n    return true;\n  }\n\n  return false;\n}\n\nstatic int at_state_process_cmd(struct at_client *at, struct net_buf *buf) {\n  if (is_cmer(at)) {\n    at->state = AT_STATE_PROCESS_AG_NW_ERR;\n    return 0;\n  }\n\n  if (at->resp) {\n    at->resp(at, buf);\n    at->resp = NULL;\n    return 0;\n  }\n  at->state = AT_STATE_UNSOLICITED_CMD;\n  return 0;\n}\n\nstatic int at_state_get_result_string(struct at_client *at, struct net_buf *buf) { return get_response_string(at, buf, '\\r', AT_STATE_PROCESS_RESULT); }\n\nstatic bool is_ring(struct at_client *at) {\n  if (strncmp(at->buf, \"RING\", 4) == 0) {\n    return true;\n  }\n\n  return false;\n}\n\nstatic int at_state_process_result(struct at_client *at, struct net_buf *buf) {\n  enum at_cme    cme_err;\n  enum at_result result;\n\n  if (is_ring(at)) {\n    at->state = AT_STATE_UNSOLICITED_CMD;\n    return 0;\n  }\n\n  if (at_parse_result(at->buf, buf, &result) == 0) {\n    if (at->finish) {\n      /* cme_err is 0 - Is invalid until result is\n       * AT_RESULT_CME_ERROR\n       */\n      cme_err = 0;\n      at->finish(at, result, cme_err);\n    }\n  }\n\n  /* Reset the state to process unsolicited response */\n  at->cmd_state = AT_CMD_START;\n  at->state     = AT_STATE_START;\n\n  return 0;\n}\n\nint cme_handle(struct at_client *at) {\n  enum at_cme cme_err;\n  uint32_t    val;\n\n  if (!at_get_number(at, &val) && val <= CME_ERROR_NETWORK_NOT_ALLOWED) {\n    cme_err = val;\n  } else {\n    cme_err = CME_ERROR_UNKNOWN;\n  }\n\n  if (at->finish) {\n    at->finish(at, AT_RESULT_CME_ERROR, cme_err);\n  }\n\n  return 0;\n}\n\nstatic int at_state_process_ag_nw_err(struct at_client *at, struct net_buf *buf) {\n  at->cmd_state = AT_CMD_GET_VALUE;\n  return at_parse_cmd_input(at, buf, NULL, cme_handle, AT_CMD_TYPE_NORMAL);\n}\n\nstatic int at_state_unsolicited_cmd(struct at_client *at, struct net_buf *buf) {\n  if (at->unsolicited) {\n    return at->unsolicited(at, buf);\n  }\n\n  return -ENODATA;\n}\n\n/* The order of handler function should match the enum at_state */\nstatic handle_parse_input_t parser_cb[] = {\n    at_state_start,             /* AT_STATE_START */\n    at_state_start_cr,          /* AT_STATE_START_CR */\n    at_state_start_lf,          /* AT_STATE_START_LF */\n    at_state_get_cmd_string,    /* AT_STATE_GET_CMD_STRING */\n    at_state_process_cmd,       /* AT_STATE_PROCESS_CMD */\n    at_state_get_result_string, /* AT_STATE_GET_RESULT_STRING */\n    at_state_process_result,    /* AT_STATE_PROCESS_RESULT */\n    at_state_process_ag_nw_err, /* AT_STATE_PROCESS_AG_NW_ERR */\n    at_state_unsolicited_cmd    /* AT_STATE_UNSOLICITED_CMD */\n};\n\nint at_parse_input(struct at_client *at, struct net_buf *buf) {\n  int ret;\n\n  while (buf->len) {\n    if (at->state < AT_STATE_START || at->state >= AT_STATE_END) {\n      return -EINVAL;\n    }\n    ret = parser_cb[at->state](at, buf);\n    if (ret < 0) {\n      /* Reset the state in case of error */\n      at->cmd_state = AT_CMD_START;\n      at->state     = AT_STATE_START;\n      return ret;\n    }\n  }\n\n  return 0;\n}\n\nstatic int at_cmd_start(struct at_client *at, struct net_buf *buf, const char *prefix, parse_val_t func, enum at_cmd_type type) {\n  if (!str_has_prefix(at->buf, prefix)) {\n    if (type == AT_CMD_TYPE_NORMAL) {\n      at->state = AT_STATE_UNSOLICITED_CMD;\n    }\n    return -ENODATA;\n  }\n\n  if (type == AT_CMD_TYPE_OTHER) {\n    /* Skip for Other type such as ..RING.. which does not have\n     * values to get processed.\n     */\n    at->cmd_state = AT_CMD_PROCESS_VALUE;\n  } else {\n    at->cmd_state = AT_CMD_GET_VALUE;\n  }\n\n  return 0;\n}\n\nstatic int at_cmd_get_value(struct at_client *at, struct net_buf *buf, const char *prefix, parse_val_t func, enum at_cmd_type type) {\n  /* Reset buffer before getting the values */\n  reset_buffer(at);\n  return get_cmd_value(at, buf, '\\r', AT_CMD_PROCESS_VALUE);\n}\n\nstatic int at_cmd_process_value(struct at_client *at, struct net_buf *buf, const char *prefix, parse_val_t func, enum at_cmd_type type) {\n  int ret;\n\n  ret           = func(at);\n  at->cmd_state = AT_CMD_STATE_END_LF;\n\n  return ret;\n}\n\nstatic int at_cmd_state_end_lf(struct at_client *at, struct net_buf *buf, const char *prefix, parse_val_t func, enum at_cmd_type type) {\n  int err;\n\n  err = at_check_byte(buf, '\\n');\n  if (err < 0) {\n    return err;\n  }\n\n  at->cmd_state = AT_CMD_START;\n  at->state     = AT_STATE_START;\n  return 0;\n}\n\n/* The order of handler function should match the enum at_cmd_state */\nstatic handle_cmd_input_t cmd_parser_cb[] = {\n    at_cmd_start,         /* AT_CMD_START */\n    at_cmd_get_value,     /* AT_CMD_GET_VALUE */\n    at_cmd_process_value, /* AT_CMD_PROCESS_VALUE */\n    at_cmd_state_end_lf   /* AT_CMD_STATE_END_LF */\n};\n\nint at_parse_cmd_input(struct at_client *at, struct net_buf *buf, const char *prefix, parse_val_t func, enum at_cmd_type type) {\n  int ret;\n\n  while (buf->len) {\n    if (at->cmd_state < AT_CMD_START || at->cmd_state >= AT_CMD_STATE_END) {\n      return -EINVAL;\n    }\n    ret = cmd_parser_cb[at->cmd_state](at, buf, prefix, func, type);\n    if (ret < 0) {\n      return ret;\n    }\n    /* Check for main state, the end of cmd parsing and return. */\n    if (at->state == AT_STATE_START) {\n      return 0;\n    }\n  }\n\n  return 0;\n}\n\nint at_has_next_list(struct at_client *at) { return at->buf[at->pos] != '\\0'; }\n\nint at_open_list(struct at_client *at) {\n  skip_space(at);\n\n  /* The list shall start with '(' open parenthesis */\n  if (at->buf[at->pos] != '(') {\n    return -ENODATA;\n  }\n  at->pos++;\n\n  return 0;\n}\n\nint at_close_list(struct at_client *at) {\n  skip_space(at);\n\n  if (at->buf[at->pos] != ')') {\n    return -ENODATA;\n  }\n  at->pos++;\n\n  next_list(at);\n\n  return 0;\n}\n\nint at_list_get_string(struct at_client *at, char *name, uint8_t len) {\n  int i = 0;\n\n  skip_space(at);\n\n  if (at->buf[at->pos] != '\"') {\n    return -ENODATA;\n  }\n  at->pos++;\n\n  while (at->buf[at->pos] != '\\0' && at->buf[at->pos] != '\"') {\n    if (i == len) {\n      return -ENODATA;\n    }\n    name[i++] = at->buf[at->pos++];\n  }\n\n  if (i == len) {\n    return -ENODATA;\n  }\n\n  name[i] = '\\0';\n\n  if (at->buf[at->pos] != '\"') {\n    return -ENODATA;\n  }\n  at->pos++;\n\n  skip_space(at);\n  next_list(at);\n\n  return 0;\n}\n\nint at_list_get_range(struct at_client *at, uint32_t *min, uint32_t *max) {\n  uint32_t low, high;\n  int      ret;\n\n  ret = at_get_number(at, &low);\n  if (ret < 0) {\n    return ret;\n  }\n\n  if (at->buf[at->pos] == '-') {\n    at->pos++;\n    goto out;\n  }\n\n  if (!isdigit((unsigned char)at->buf[at->pos])) {\n    return -ENODATA;\n  }\nout:\n  ret = at_get_number(at, &high);\n  if (ret < 0) {\n    return ret;\n  }\n\n  *min = low;\n  *max = high;\n\n  next_list(at);\n\n  return 0;\n}\n\nvoid at_register_unsolicited(struct at_client *at, at_resp_cb_t unsolicited) { at->unsolicited = unsolicited; }\n\nvoid at_register(struct at_client *at, at_resp_cb_t resp, at_finish_cb_t finish) {\n  at->resp   = resp;\n  at->finish = finish;\n  at->state  = AT_STATE_START;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/at.h",
    "content": "/** @file at.h\n *  @brief Internal APIs for AT command handling.\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nenum at_result {\n    AT_RESULT_OK,\n    AT_RESULT_ERROR,\n    AT_RESULT_CME_ERROR\n};\n\nenum at_cme {\n    CME_ERROR_AG_FAILURE = 0,\n    CME_ERROR_NO_CONNECTION_TO_PHONE = 1,\n    CME_ERROR_OPERATION_NOT_ALLOWED = 3,\n    CME_ERROR_OPERATION_NOT_SUPPORTED = 4,\n    CME_ERROR_PH_SIM_PIN_REQUIRED = 5,\n    CME_ERROR_SIM_NOT_INSERTED = 10,\n    CME_ERROR_SIM_PIN_REQUIRED = 11,\n    CME_ERROR_SIM_PUK_REQUIRED = 12,\n    CME_ERROR_SIM_FAILURE = 13,\n    CME_ERROR_SIM_BUSY = 14,\n    CME_ERROR_INCORRECT_PASSWORD = 16,\n    CME_ERROR_SIM_PIN2_REQUIRED = 17,\n    CME_ERROR_SIM_PUK2_REQUIRED = 18,\n    CME_ERROR_MEMORY_FULL = 20,\n    CME_ERROR_INVALID_INDEX = 21,\n    CME_ERROR_MEMORY_FAILURE = 23,\n    CME_ERROR_TEXT_STRING_TOO_LONG = 24,\n    CME_ERROR_INVALID_CHARS_IN_TEXT_STRING = 25,\n    CME_ERROR_DIAL_STRING_TO_LONG = 26,\n    CME_ERROR_INVALID_CHARS_IN_DIAL_STRING = 27,\n    CME_ERROR_NO_NETWORK_SERVICE = 30,\n    CME_ERROR_NETWORK_TIMEOUT = 31,\n    CME_ERROR_NETWORK_NOT_ALLOWED = 32,\n    CME_ERROR_UNKNOWN = 33,\n};\n\nenum at_state {\n    AT_STATE_START,\n    AT_STATE_START_CR,\n    AT_STATE_START_LF,\n    AT_STATE_GET_CMD_STRING,\n    AT_STATE_PROCESS_CMD,\n    AT_STATE_GET_RESULT_STRING,\n    AT_STATE_PROCESS_RESULT,\n    AT_STATE_PROCESS_AG_NW_ERR,\n    AT_STATE_UNSOLICITED_CMD,\n    AT_STATE_END\n};\n\nenum at_cmd_state {\n    AT_CMD_START,\n    AT_CMD_GET_VALUE,\n    AT_CMD_PROCESS_VALUE,\n    AT_CMD_STATE_END_LF,\n    AT_CMD_STATE_END\n};\n\nenum at_cmd_type {\n    AT_CMD_TYPE_NORMAL,\n    AT_CMD_TYPE_UNSOLICITED,\n    AT_CMD_TYPE_OTHER\n};\n\nstruct at_client;\n\n/* Callback at_resp_cb_t used to parse response value received for the\n * particular AT command. Eg: +CIND=<value>\n */\ntypedef int (*at_resp_cb_t)(struct at_client *at, struct net_buf *buf);\n\n/* Callback at_finish_cb used to monitor the success or failure of the AT\n * command received from server.\n * Argument 'cme_err' is valid only when argument 'result' is equal to\n * AT_RESULT_CME_ERROR\n */\ntypedef int (*at_finish_cb_t)(struct at_client *at, enum at_result result,\n                              enum at_cme cme_err);\ntypedef int (*parse_val_t)(struct at_client *at);\ntypedef int (*handle_parse_input_t)(struct at_client *at, struct net_buf *buf);\ntypedef int (*handle_cmd_input_t)(struct at_client *at, struct net_buf *buf,\n                                  const char *prefix, parse_val_t func,\n                                  enum at_cmd_type type);\n\nstruct at_client {\n    char *buf;\n    uint8_t pos;\n    uint8_t buf_max_len;\n    uint8_t state;\n    uint8_t cmd_state;\n    at_resp_cb_t resp;\n    at_resp_cb_t unsolicited;\n    at_finish_cb_t finish;\n};\n\n/* Register the callback functions */\nvoid at_register(struct at_client *at, at_resp_cb_t resp,\n                 at_finish_cb_t finish);\nvoid at_register_unsolicited(struct at_client *at, at_resp_cb_t unsolicited);\nint at_get_number(struct at_client *at, uint32_t *val);\n/* This parsing will only works for non-fragmented net_buf */\nint at_parse_input(struct at_client *at, struct net_buf *buf);\n/* This command parsing will only works for non-fragmented net_buf */\nint at_parse_cmd_input(struct at_client *at, struct net_buf *buf,\n                       const char *prefix, parse_val_t func,\n                       enum at_cmd_type type);\nint at_check_byte(struct net_buf *buf, char check_byte);\nint at_list_get_range(struct at_client *at, uint32_t *min, uint32_t *max);\nint at_list_get_string(struct at_client *at, char *name, uint8_t len);\nint at_close_list(struct at_client *at);\nint at_open_list(struct at_client *at);\nint at_has_next_list(struct at_client *at);\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/att.c",
    "content": "/* att.c - Attribute protocol handling */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <atomic.h>\n#include <errno.h>\n#include <stdbool.h>\n#include <string.h>\n#include <zephyr.h>\n\n#include <misc/byteorder.h>\n#include <misc/util.h>\n\n#include <bluetooth.h>\n#include <gatt.h>\n#include <hci_driver.h>\n#include <hci_host.h>\n#include <uuid.h>\n\n#define BT_DBG_ENABLED IS_ENABLED(CONFIG_BT_DEBUG_ATT)\n#include \"log.h\"\n\n#include \"hci_core.h\"\n\n#include \"conn_internal.h\"\n#include \"l2cap_internal.h\"\n#include \"smp.h\"\n\n#include \"att_internal.h\"\n#include \"gatt_internal.h\"\n\n#define ATT_CHAN(_ch)  CONTAINER_OF(_ch, struct bt_att, chan.chan)\n#define ATT_REQ(_node) CONTAINER_OF(_node, struct bt_att_req, node)\n\n#define ATT_CMD_MASK 0x40\n\n#define ATT_TIMEOUT K_SECONDS(30)\n\ntypedef enum __packed {\n  ATT_COMMAND,\n  ATT_REQUEST,\n  ATT_RESPONSE,\n  ATT_NOTIFICATION,\n  ATT_CONFIRMATION,\n  ATT_INDICATION,\n  ATT_UNKNOWN,\n} att_type_t;\n\nstatic att_type_t att_op_get_type(u8_t op);\n\n#if CONFIG_BT_ATT_PREPARE_COUNT > 0\nstruct bt_attr_data {\n  u16_t handle;\n  u16_t offset;\n};\n\n#if !defined(BFLB_DYNAMIC_ALLOC_MEM)\n/* Pool for incoming ATT packets */\nNET_BUF_POOL_DEFINE(prep_pool, CONFIG_BT_ATT_PREPARE_COUNT, BT_ATT_MTU, sizeof(struct bt_attr_data), NULL);\n#else\nstruct net_buf_pool prep_pool;\n#endif\n#endif /* CONFIG_BT_ATT_PREPARE_COUNT */\n\nenum {\n  ATT_PENDING_RSP,\n  ATT_PENDING_CFM,\n  ATT_DISCONNECTED,\n\n  /* Total number of flags - must be at the end of the enum */\n  ATT_NUM_FLAGS,\n};\n\n/* ATT channel specific context */\nstruct bt_att {\n  /* The channel this context is associated with */\n  struct bt_l2cap_le_chan chan;\n  ATOMIC_DEFINE(flags, ATT_NUM_FLAGS);\n  struct bt_att_req    *req;\n  sys_slist_t           reqs;\n  struct k_delayed_work timeout_work;\n  struct k_sem          tx_sem;\n  struct k_fifo         tx_queue;\n#if CONFIG_BT_ATT_PREPARE_COUNT > 0\n  struct k_fifo prep_queue;\n#endif\n};\n\n#if defined(CONFIG_BT_STACK_PTS)\nextern volatile u8_t event_flag;\n#endif\n\nstatic struct bt_att     bt_req_pool[CONFIG_BT_MAX_CONN];\nstatic struct bt_att_req cancel;\n\n#if defined(CONFIG_BLE_AT_CMD)\nstatic u16_t mtu_size = BT_ATT_MTU;\nvoid         set_mtu_size(u16_t size) { mtu_size = size; }\n#endif\n\nstatic void att_req_destroy(struct bt_att_req *req) {\n  BT_DBG(\"req %p\", req);\n\n  if (req->buf) {\n    net_buf_unref(req->buf);\n  }\n\n  if (req->destroy) {\n    req->destroy(req);\n  }\n\n  (void)memset(req, 0, sizeof(*req));\n}\n\nstatic struct bt_att *att_get(struct bt_conn *conn) {\n  struct bt_l2cap_chan *chan;\n\n  chan = bt_l2cap_le_lookup_tx_cid(conn, BT_L2CAP_CID_ATT);\n  __ASSERT(chan, \"No ATT channel found\");\n\n  return CONTAINER_OF(chan, struct bt_att, chan);\n}\n\nstatic bt_conn_tx_cb_t att_cb(struct net_buf *buf);\n\nstatic int att_send(struct bt_conn *conn, struct net_buf *buf, bt_conn_tx_cb_t cb, void *user_data) {\n  struct bt_att_hdr *hdr;\n\n  hdr = (void *)buf->data;\n\n  BT_DBG(\"code 0x%02x\", hdr->code);\n\n#if defined(CONFIG_BT_SMP) && defined(CONFIG_BT_SIGNING)\n  if (hdr->code == BT_ATT_OP_SIGNED_WRITE_CMD) {\n    int err;\n\n    err = bt_smp_sign(conn, buf);\n    if (err) {\n      BT_ERR(\"Error signing data\");\n      net_buf_unref(buf);\n      return err;\n    }\n  }\n#endif\n  return bt_l2cap_send_cb(conn, BT_L2CAP_CID_ATT, buf, cb ? cb : att_cb(buf), user_data);\n}\n\nvoid att_pdu_sent(struct bt_conn *conn, void *user_data) {\n  struct bt_att  *att = att_get(conn);\n  struct net_buf *buf;\n\n  BT_DBG(\"conn %p att %p\", conn, att);\n\n  while ((buf = net_buf_get(&att->tx_queue, K_NO_WAIT))) {\n    /* Check if the queued buf is a request */\n    if (att->req && att->req->buf == buf) {\n      /* Save request state so it can be resent */\n      net_buf_simple_save(&att->req->buf->b, &att->req->state);\n    }\n\n    if (!att_send(conn, buf, NULL, NULL)) {\n      return;\n    }\n  }\n\n  k_sem_give(&att->tx_sem);\n}\n\nvoid att_cfm_sent(struct bt_conn *conn, void *user_data) {\n  struct bt_att *att = att_get(conn);\n\n  BT_DBG(\"conn %p att %p\", conn, att);\n\n  if (IS_ENABLED(CONFIG_BT_ATT_ENFORCE_FLOW)) {\n    atomic_clear_bit(att->flags, ATT_PENDING_CFM);\n  }\n\n  att_pdu_sent(conn, user_data);\n}\n\nvoid att_rsp_sent(struct bt_conn *conn, void *user_data) {\n  struct bt_att *att = att_get(conn);\n\n  BT_DBG(\"conn %p att %p\", conn, att);\n\n  if (IS_ENABLED(CONFIG_BT_ATT_ENFORCE_FLOW)) {\n    atomic_clear_bit(att->flags, ATT_PENDING_RSP);\n  }\n\n  att_pdu_sent(conn, user_data);\n}\n\nvoid att_req_sent(struct bt_conn *conn, void *user_data) {\n  struct bt_att *att = att_get(conn);\n\n  BT_DBG(\"conn %p att %p att->req %p\", conn, att, att->req);\n\n  /* Start timeout work */\n  if (att->req) {\n    k_delayed_work_submit(&att->timeout_work, ATT_TIMEOUT);\n  }\n\n  att_pdu_sent(conn, user_data);\n}\n\nstatic bt_conn_tx_cb_t att_cb(struct net_buf *buf) {\n  switch (att_op_get_type(buf->data[0])) {\n  case ATT_RESPONSE:\n    return att_rsp_sent;\n  case ATT_CONFIRMATION:\n    return att_cfm_sent;\n  case ATT_REQUEST:\n  case ATT_INDICATION:\n    return att_req_sent;\n  default:\n    return att_pdu_sent;\n  }\n}\n\nstatic void send_err_rsp(struct bt_conn *conn, u8_t req, u16_t handle, u8_t err) {\n  struct bt_att_error_rsp *rsp;\n  struct net_buf          *buf;\n\n  /* Ignore opcode 0x00 */\n  if (!req) {\n    return;\n  }\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_ERROR_RSP, sizeof(*rsp));\n  if (!buf) {\n    return;\n  }\n\n  rsp          = net_buf_add(buf, sizeof(*rsp));\n  rsp->request = req;\n  rsp->handle  = sys_cpu_to_le16(handle);\n  rsp->error   = err;\n\n  (void)bt_l2cap_send_cb(conn, BT_L2CAP_CID_ATT, buf, att_rsp_sent, NULL);\n}\n\nstatic u8_t att_mtu_req(struct bt_att *att, struct net_buf *buf) {\n  struct bt_conn                 *conn = att->chan.chan.conn;\n  struct bt_att_exchange_mtu_req *req;\n  struct bt_att_exchange_mtu_rsp *rsp;\n  struct net_buf                 *pdu;\n  u16_t                           mtu_client, mtu_server;\n\n  req = (void *)buf->data;\n\n  mtu_client = sys_le16_to_cpu(req->mtu);\n\n  BT_DBG(\"Client MTU %u\", mtu_client);\n\n  /* Check if MTU is valid */\n  if (mtu_client < BT_ATT_DEFAULT_LE_MTU) {\n    return BT_ATT_ERR_INVALID_PDU;\n  }\n\n  pdu = bt_att_create_pdu(conn, BT_ATT_OP_MTU_RSP, sizeof(*rsp));\n  if (!pdu) {\n    return BT_ATT_ERR_UNLIKELY;\n  }\n\n  mtu_server = BT_ATT_MTU;\n\n  BT_DBG(\"Server MTU %u\", mtu_server);\n\n  rsp      = net_buf_add(pdu, sizeof(*rsp));\n  rsp->mtu = sys_cpu_to_le16(mtu_server);\n\n  (void)bt_l2cap_send_cb(conn, BT_L2CAP_CID_ATT, pdu, att_rsp_sent, NULL);\n\n  /* BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part F] page 484:\n   *\n   * A device's Exchange MTU Request shall contain the same MTU as the\n   * device's Exchange MTU Response (i.e. the MTU shall be symmetric).\n   */\n  att->chan.rx.mtu = MIN(mtu_client, mtu_server);\n  att->chan.tx.mtu = att->chan.rx.mtu;\n\n  BT_DBG(\"Negotiated MTU %u\", att->chan.rx.mtu);\n\n#if defined(BFLB_BLE_MTU_CHANGE_CB)\n  if (att->chan.chan.ops->mtu_changed)\n    att->chan.chan.ops->mtu_changed(&(att->chan.chan), att->chan.rx.mtu);\n#endif\n\n  return 0;\n}\n\nstatic inline bool att_is_connected(struct bt_att *att) { return (att->chan.chan.conn->state != BT_CONN_CONNECTED || !atomic_test_bit(att->flags, ATT_DISCONNECTED)); }\n\nstatic int att_send_req(struct bt_att *att, struct bt_att_req *req) {\n  int err;\n\n  __ASSERT_NO_MSG(req);\n  __ASSERT_NO_MSG(req->func);\n  __ASSERT_NO_MSG(!att->req);\n\n  BT_DBG(\"req %p\", req);\n\n  att->req = req;\n\n  if (k_sem_take(&att->tx_sem, K_NO_WAIT) < 0) {\n    k_fifo_put(&att->tx_queue, req->buf);\n    return 0;\n  }\n\n  /* Save request state so it can be resent */\n  net_buf_simple_save(&req->buf->b, &req->state);\n\n  /* Keep a reference for resending in case of an error */\n  err = bt_l2cap_send_cb(att->chan.chan.conn, BT_L2CAP_CID_ATT, net_buf_ref(req->buf), att_cb(req->buf), NULL);\n  if (err) {\n    net_buf_unref(req->buf);\n    req->buf = NULL;\n    return err;\n  }\n\n  return 0;\n}\n\nstatic void att_process(struct bt_att *att) {\n  sys_snode_t *node;\n\n  BT_DBG(\"\");\n\n  /* Pull next request from the list */\n  node = sys_slist_get(&att->reqs);\n  if (!node) {\n    return;\n  }\n\n  att_send_req(att, ATT_REQ(node));\n}\n\nstatic u8_t att_handle_rsp(struct bt_att *att, void *pdu, u16_t len, u8_t err) {\n  bt_att_func_t func;\n\n  BT_DBG(\"err 0x%02x len %u: %s\", err, len, bt_hex(pdu, len));\n\n  /* Cancel timeout if ongoing */\n  k_delayed_work_cancel(&att->timeout_work);\n\n  if (!att->req) {\n    BT_WARN(\"No pending ATT request\");\n    goto process;\n  }\n\n  /* Check if request has been cancelled */\n  if (att->req == &cancel) {\n    att->req = NULL;\n    goto process;\n  }\n\n  /* Release original buffer */\n  if (att->req->buf) {\n    net_buf_unref(att->req->buf);\n    att->req->buf = NULL;\n  }\n\n  /* Reset func so it can be reused by the callback */\n  func           = att->req->func;\n  att->req->func = NULL;\n\n  if (func) {\n    func(att->chan.chan.conn, err, pdu, len, att->req);\n  }\n\n  /* Don't destroy if callback had reused the request */\n  if (!att->req->func) {\n    att_req_destroy(att->req);\n  }\n\n  att->req = NULL;\n\nprocess:\n  /* Process pending requests */\n  att_process(att);\n\n  return 0;\n}\n\n#if defined(CONFIG_BT_GATT_CLIENT)\nstatic u8_t att_mtu_rsp(struct bt_att *att, struct net_buf *buf) {\n  struct bt_att_exchange_mtu_rsp *rsp;\n  u16_t                           mtu;\n\n  if (!att) {\n    return 0;\n  }\n\n  rsp = (void *)buf->data;\n\n  mtu = sys_le16_to_cpu(rsp->mtu);\n\n  BT_DBG(\"Server MTU %u\", mtu);\n\n  /* Check if MTU is valid */\n  if (mtu < BT_ATT_DEFAULT_LE_MTU) {\n    return att_handle_rsp(att, NULL, 0, BT_ATT_ERR_INVALID_PDU);\n  }\n\n  att->chan.rx.mtu = MIN(mtu, BT_ATT_MTU);\n\n  /* BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part F] page 484:\n   *\n   * A device's Exchange MTU Request shall contain the same MTU as the\n   * device's Exchange MTU Response (i.e. the MTU shall be symmetric).\n   */\n  att->chan.tx.mtu = att->chan.rx.mtu;\n\n  BT_DBG(\"Negotiated MTU %u\", att->chan.rx.mtu);\n\n  return att_handle_rsp(att, rsp, buf->len, 0);\n}\n#endif /* CONFIG_BT_GATT_CLIENT */\n\nstatic bool range_is_valid(u16_t start, u16_t end, u16_t *err) {\n  /* Handle 0 is invalid */\n  if (!start || !end) {\n    if (err) {\n      *err = 0U;\n    }\n    return false;\n  }\n\n  /* Check if range is valid */\n  if (start > end) {\n    if (err) {\n      *err = start;\n    }\n    return false;\n  }\n\n  return true;\n}\n\nstruct find_info_data {\n  struct bt_att               *att;\n  struct net_buf              *buf;\n  struct bt_att_find_info_rsp *rsp;\n  union {\n    struct bt_att_info_16  *info16;\n    struct bt_att_info_128 *info128;\n  };\n};\n\nstatic u8_t find_info_cb(const struct bt_gatt_attr *attr, void *user_data) {\n  struct find_info_data *data = user_data;\n  struct bt_att         *att  = data->att;\n\n  BT_DBG(\"handle 0x%04x\", attr->handle);\n\n  /* Initialize rsp at first entry */\n  if (!data->rsp) {\n    data->rsp         = net_buf_add(data->buf, sizeof(*data->rsp));\n    data->rsp->format = (attr->uuid->type == BT_UUID_TYPE_16) ? BT_ATT_INFO_16 : BT_ATT_INFO_128;\n  }\n\n  switch (data->rsp->format) {\n  case BT_ATT_INFO_16:\n    if (attr->uuid->type != BT_UUID_TYPE_16) {\n      return BT_GATT_ITER_STOP;\n    }\n\n    /* Fast forward to next item position */\n    data->info16         = net_buf_add(data->buf, sizeof(*data->info16));\n    data->info16->handle = sys_cpu_to_le16(attr->handle);\n    data->info16->uuid   = sys_cpu_to_le16(BT_UUID_16(attr->uuid)->val);\n\n    if (att->chan.tx.mtu - data->buf->len > sizeof(*data->info16)) {\n      return BT_GATT_ITER_CONTINUE;\n    }\n\n    break;\n  case BT_ATT_INFO_128:\n    if (attr->uuid->type != BT_UUID_TYPE_128) {\n      return BT_GATT_ITER_STOP;\n    }\n\n    /* Fast forward to next item position */\n    data->info128         = net_buf_add(data->buf, sizeof(*data->info128));\n    data->info128->handle = sys_cpu_to_le16(attr->handle);\n    memcpy(data->info128->uuid, BT_UUID_128(attr->uuid)->val, sizeof(data->info128->uuid));\n\n    if (att->chan.tx.mtu - data->buf->len > sizeof(*data->info128)) {\n      return BT_GATT_ITER_CONTINUE;\n    }\n  }\n\n  return BT_GATT_ITER_STOP;\n}\n\nstatic u8_t att_find_info_rsp(struct bt_att *att, u16_t start_handle, u16_t end_handle) {\n  struct bt_conn       *conn = att->chan.chan.conn;\n  struct find_info_data data;\n\n  (void)memset(&data, 0, sizeof(data));\n\n  data.buf = bt_att_create_pdu(conn, BT_ATT_OP_FIND_INFO_RSP, 0);\n  if (!data.buf) {\n    return BT_ATT_ERR_UNLIKELY;\n  }\n\n  data.att = att;\n  bt_gatt_foreach_attr(start_handle, end_handle, find_info_cb, &data);\n\n  if (!data.rsp) {\n    net_buf_unref(data.buf);\n    /* Respond since handle is set */\n    send_err_rsp(conn, BT_ATT_OP_FIND_INFO_REQ, start_handle, BT_ATT_ERR_ATTRIBUTE_NOT_FOUND);\n    return 0;\n  }\n\n  (void)bt_l2cap_send_cb(conn, BT_L2CAP_CID_ATT, data.buf, att_rsp_sent, NULL);\n\n  return 0;\n}\n\nstatic u8_t att_find_info_req(struct bt_att *att, struct net_buf *buf) {\n  struct bt_conn              *conn = att->chan.chan.conn;\n  struct bt_att_find_info_req *req;\n  u16_t                        start_handle, end_handle, err_handle;\n\n  req = (void *)buf->data;\n\n  start_handle = sys_le16_to_cpu(req->start_handle);\n  end_handle   = sys_le16_to_cpu(req->end_handle);\n\n  BT_DBG(\"start_handle 0x%04x end_handle 0x%04x\", start_handle, end_handle);\n\n  if (!range_is_valid(start_handle, end_handle, &err_handle)) {\n    send_err_rsp(conn, BT_ATT_OP_FIND_INFO_REQ, err_handle, BT_ATT_ERR_INVALID_HANDLE);\n    return 0;\n  }\n\n  return att_find_info_rsp(att, start_handle, end_handle);\n}\n\nstruct find_type_data {\n  struct bt_att              *att;\n  struct net_buf             *buf;\n  struct bt_att_handle_group *group;\n  const void                 *value;\n  u8_t                        value_len;\n  u8_t                        err;\n};\n\nstatic u8_t find_type_cb(const struct bt_gatt_attr *attr, void *user_data) {\n  struct find_type_data *data = user_data;\n  struct bt_att         *att  = data->att;\n  struct bt_conn        *conn = att->chan.chan.conn;\n  int                    read;\n  u8_t                   uuid[16];\n\n  /* Skip secondary services */\n  if (!bt_uuid_cmp(attr->uuid, BT_UUID_GATT_SECONDARY)) {\n    goto skip;\n  }\n\n  /* Update group end_handle if not a primary service */\n  if (bt_uuid_cmp(attr->uuid, BT_UUID_GATT_PRIMARY)) {\n    if (data->group && attr->handle > sys_le16_to_cpu(data->group->end_handle)) {\n      data->group->end_handle = sys_cpu_to_le16(attr->handle);\n    }\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  BT_DBG(\"handle 0x%04x\", attr->handle);\n\n  /* stop if there is no space left */\n  if (att->chan.tx.mtu - data->buf->len < sizeof(*data->group)) {\n    return BT_GATT_ITER_STOP;\n  }\n\n  /* Read attribute value and store in the buffer */\n  read = attr->read(conn, attr, uuid, sizeof(uuid), 0);\n  if (read < 0) {\n    /*\n     * Since we don't know if it is the service with requested UUID,\n     * we cannot respond with an error to this request.\n     */\n    goto skip;\n  }\n\n  /* Check if data matches */\n  if (read != data->value_len) {\n    /* Use bt_uuid_cmp() to compare UUIDs of different form. */\n    struct bt_uuid_128 ref_uuid;\n    struct bt_uuid_128 recvd_uuid;\n\n    if (!bt_uuid_create(&recvd_uuid.uuid, data->value, data->value_len)) {\n      BT_WARN(\"Unable to create UUID: size %u\", data->value_len);\n      goto skip;\n    }\n    if (!bt_uuid_create(&ref_uuid.uuid, uuid, read)) {\n      BT_WARN(\"Unable to create UUID: size %d\", read);\n      goto skip;\n    }\n    if (bt_uuid_cmp(&recvd_uuid.uuid, &ref_uuid.uuid)) {\n      goto skip;\n    }\n  } else if (memcmp(data->value, uuid, read)) {\n    goto skip;\n  }\n\n  /* If service has been found, error should be cleared */\n  data->err = 0x00;\n\n  /* Fast forward to next item position */\n  data->group               = net_buf_add(data->buf, sizeof(*data->group));\n  data->group->start_handle = sys_cpu_to_le16(attr->handle);\n  data->group->end_handle   = sys_cpu_to_le16(attr->handle);\n\n  /* continue to find the end_handle */\n  return BT_GATT_ITER_CONTINUE;\n\nskip:\n  data->group = NULL;\n  return BT_GATT_ITER_CONTINUE;\n}\n\nstatic u8_t att_find_type_rsp(struct bt_att *att, u16_t start_handle, u16_t end_handle, const void *value, u8_t value_len) {\n  struct bt_conn       *conn = att->chan.chan.conn;\n  struct find_type_data data;\n\n  (void)memset(&data, 0, sizeof(data));\n\n  data.buf = bt_att_create_pdu(conn, BT_ATT_OP_FIND_TYPE_RSP, 0);\n  if (!data.buf) {\n    return BT_ATT_ERR_UNLIKELY;\n  }\n\n  data.att       = att;\n  data.group     = NULL;\n  data.value     = value;\n  data.value_len = value_len;\n\n  /* Pre-set error in case no service will be found */\n  data.err = BT_ATT_ERR_ATTRIBUTE_NOT_FOUND;\n\n  bt_gatt_foreach_attr(start_handle, end_handle, find_type_cb, &data);\n\n  /* If error has not been cleared, no service has been found */\n  if (data.err) {\n    net_buf_unref(data.buf);\n    /* Respond since handle is set */\n    send_err_rsp(conn, BT_ATT_OP_FIND_TYPE_REQ, start_handle, data.err);\n\n#if defined(CONFIG_BT_STACK_PTS)\n    /*PTS sends a request to the iut discover all primary services it contains */\n    if (event_flag == att_find_by_type_value_ind) {\n      BT_PTS(\"rsp err : [%d] start_handle = [0x%04x]\\r\\n\", data.err, start_handle);\n    }\n#endif\n    return 0;\n  }\n\n#if defined(CONFIG_BT_STACK_PTS)\n  /*when PTS sends a request to the iut discover all primary services it contains, set event flag\n   * to @att_find_by_type_value_ind make it easy for the user to check whether the messages is correct in the console.\n   */\n  if (event_flag == att_find_by_type_value_ind) {\n    u8_t  i       = 0;\n    u8_t *req_val = (u8_t *)data.value;\n    u8_t  src[20];\n\n    (void)memcpy(src, req_val, data.value_len);\n\n    BT_PTS(\"uuid = [\");\n    for (i = 0; i < value_len; i++) {\n      BT_PTS(\"%02x\", src[value_len - 1 - i]);\n    }\n    BT_PTS(\"]\\r\\n\");\n\n    BT_PTS(\"start_handle = [0x%04x] end_handle = [0x%04x]\\r\\n\", data.buf->data[1] | data.buf->data[2] << 8, data.buf->data[3] | data.buf->data[4] << 8);\n  }\n#endif\n\n  (void)bt_l2cap_send_cb(conn, BT_L2CAP_CID_ATT, data.buf, att_rsp_sent, NULL);\n\n  return 0;\n}\n\nstatic u8_t att_find_type_req(struct bt_att *att, struct net_buf *buf) {\n  struct bt_conn              *conn = att->chan.chan.conn;\n  struct bt_att_find_type_req *req;\n  u16_t                        start_handle, end_handle, err_handle, type;\n  u8_t                        *value;\n\n  req = net_buf_pull_mem(buf, sizeof(*req));\n\n  start_handle = sys_le16_to_cpu(req->start_handle);\n  end_handle   = sys_le16_to_cpu(req->end_handle);\n  type         = sys_le16_to_cpu(req->type);\n  value        = buf->data;\n\n  BT_DBG(\"start_handle 0x%04x end_handle 0x%04x type %u\", start_handle, end_handle, type);\n\n  if (!range_is_valid(start_handle, end_handle, &err_handle)) {\n    send_err_rsp(conn, BT_ATT_OP_FIND_TYPE_REQ, err_handle, BT_ATT_ERR_INVALID_HANDLE);\n    return 0;\n  }\n\n  /* The Attribute Protocol Find By Type Value Request shall be used with\n   * the Attribute Type parameter set to the UUID for \"Primary Service\"\n   * and the Attribute Value set to the 16-bit Bluetooth UUID or 128-bit\n   * UUID for the specific primary service.\n   */\n  if (bt_uuid_cmp(BT_UUID_DECLARE_16(type), BT_UUID_GATT_PRIMARY)) {\n    send_err_rsp(conn, BT_ATT_OP_FIND_TYPE_REQ, start_handle, BT_ATT_ERR_ATTRIBUTE_NOT_FOUND);\n    return 0;\n  }\n\n  return att_find_type_rsp(att, start_handle, end_handle, value, buf->len);\n}\n\nstatic u8_t err_to_att(int err) {\n  BT_DBG(\"%d\", err);\n\n  if (err < 0 && err >= -0xff) {\n    return -err;\n  }\n\n  return BT_ATT_ERR_UNLIKELY;\n}\n\nstruct read_type_data {\n  struct bt_att               *att;\n  struct bt_uuid              *uuid;\n  struct net_buf              *buf;\n  struct bt_att_read_type_rsp *rsp;\n  struct bt_att_data          *item;\n  u8_t                         err;\n};\n\nstatic u8_t read_type_cb(const struct bt_gatt_attr *attr, void *user_data) {\n  struct read_type_data *data = user_data;\n  struct bt_att         *att  = data->att;\n  struct bt_conn        *conn = att->chan.chan.conn;\n  int                    read;\n\n  /* Skip if doesn't match */\n  if (bt_uuid_cmp(attr->uuid, data->uuid)) {\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  BT_DBG(\"handle 0x%04x\", attr->handle);\n\n  /*\n   * If an attribute in the set of requested attributes would cause an\n   * Error Response then this attribute cannot be included in a\n   * Read By Type Response and the attributes before this attribute\n   * shall be returned\n   *\n   * If the first attribute in the set of requested attributes would\n   * cause an Error Response then no other attributes in the requested\n   * attributes can be considered.\n   */\n  data->err = bt_gatt_check_perm(conn, attr, BT_GATT_PERM_READ_MASK);\n  if (data->err) {\n    if (data->rsp->len) {\n      data->err = 0x00;\n    }\n    return BT_GATT_ITER_STOP;\n  }\n\n  /*\n   * If any attribute is founded in handle range it means that error\n   * should be changed from pre-set: attr not found error to no error.\n   */\n  data->err = 0x00;\n\n  /* Fast forward to next item position */\n  data->item         = net_buf_add(data->buf, sizeof(*data->item));\n  data->item->handle = sys_cpu_to_le16(attr->handle);\n\n  /* Read attribute value and store in the buffer */\n  read = attr->read(conn, attr, data->buf->data + data->buf->len, att->chan.tx.mtu - data->buf->len, 0);\n  if (read < 0) {\n    data->err = err_to_att(read);\n    return BT_GATT_ITER_STOP;\n  }\n\n  if (!data->rsp->len) {\n    /* Set len to be the first item found */\n    data->rsp->len = read + sizeof(*data->item);\n  } else if (data->rsp->len != read + sizeof(*data->item)) {\n    /* All items should have the same size */\n    data->buf->len -= sizeof(*data->item);\n    return BT_GATT_ITER_STOP;\n  }\n\n  net_buf_add(data->buf, read);\n\n  /* return true only if there are still space for more items */\n  return att->chan.tx.mtu - data->buf->len > data->rsp->len ? BT_GATT_ITER_CONTINUE : BT_GATT_ITER_STOP;\n}\n\nstatic u8_t att_read_type_rsp(struct bt_att *att, struct bt_uuid *uuid, u16_t start_handle, u16_t end_handle) {\n  struct bt_conn       *conn = att->chan.chan.conn;\n  struct read_type_data data;\n\n  (void)memset(&data, 0, sizeof(data));\n\n  data.buf = bt_att_create_pdu(conn, BT_ATT_OP_READ_TYPE_RSP, sizeof(*data.rsp));\n  if (!data.buf) {\n    return BT_ATT_ERR_UNLIKELY;\n  }\n\n  data.att      = att;\n  data.uuid     = uuid;\n  data.rsp      = net_buf_add(data.buf, sizeof(*data.rsp));\n  data.rsp->len = 0U;\n\n  /* Pre-set error if no attr will be found in handle */\n  data.err = BT_ATT_ERR_ATTRIBUTE_NOT_FOUND;\n\n  bt_gatt_foreach_attr(start_handle, end_handle, read_type_cb, &data);\n\n  if (data.err) {\n    net_buf_unref(data.buf);\n    /* Response here since handle is set */\n    send_err_rsp(conn, BT_ATT_OP_READ_TYPE_REQ, start_handle, data.err);\n    return 0;\n  }\n\n#if defined(CONFIG_BT_STACK_PTS)\n  if (event_flag == att_read_by_type_ind)\n    BT_PTS(\"handle : [0x%04x]\\r\\n\", data.rsp->data->handle);\n#endif\n\n  (void)bt_l2cap_send_cb(conn, BT_L2CAP_CID_ATT, data.buf, att_rsp_sent, NULL);\n\n  return 0;\n}\n\nstatic u8_t att_read_type_req(struct bt_att *att, struct net_buf *buf) {\n  struct bt_conn              *conn = att->chan.chan.conn;\n  struct bt_att_read_type_req *req;\n  u16_t                        start_handle, end_handle, err_handle;\n  union {\n    struct bt_uuid     uuid;\n    struct bt_uuid_16  u16;\n    struct bt_uuid_128 u128;\n  } u;\n  u8_t uuid_len = buf->len - sizeof(*req);\n\n  /* Type can only be UUID16 or UUID128 */\n  if (uuid_len != 2 && uuid_len != 16) {\n    return BT_ATT_ERR_INVALID_PDU;\n  }\n\n  req = net_buf_pull_mem(buf, sizeof(*req));\n\n  start_handle = sys_le16_to_cpu(req->start_handle);\n  end_handle   = sys_le16_to_cpu(req->end_handle);\n  if (!bt_uuid_create(&u.uuid, req->uuid, uuid_len)) {\n    return BT_ATT_ERR_UNLIKELY;\n  }\n\n  BT_DBG(\"start_handle 0x%04x end_handle 0x%04x type %s\", start_handle, end_handle, bt_uuid_str(&u.uuid));\n\n  if (!range_is_valid(start_handle, end_handle, &err_handle)) {\n    send_err_rsp(conn, BT_ATT_OP_READ_TYPE_REQ, err_handle, BT_ATT_ERR_INVALID_HANDLE);\n    return 0;\n  }\n\n  return att_read_type_rsp(att, &u.uuid, start_handle, end_handle);\n}\n\nstruct read_data {\n  struct bt_att          *att;\n  u16_t                   offset;\n  struct net_buf         *buf;\n  struct bt_att_read_rsp *rsp;\n  u8_t                    err;\n};\n\nstatic u8_t read_cb(const struct bt_gatt_attr *attr, void *user_data) {\n  struct read_data *data = user_data;\n  struct bt_att    *att  = data->att;\n  struct bt_conn   *conn = att->chan.chan.conn;\n  int               read;\n\n  BT_DBG(\"handle 0x%04x\", attr->handle);\n\n  data->rsp = net_buf_add(data->buf, sizeof(*data->rsp));\n\n  /*\n   * If any attribute is founded in handle range it means that error\n   * should be changed from pre-set: invalid handle error to no error.\n   */\n  data->err = 0x00;\n\n  /* Check attribute permissions */\n  data->err = bt_gatt_check_perm(conn, attr, BT_GATT_PERM_READ_MASK);\n  if (data->err) {\n    return BT_GATT_ITER_STOP;\n  }\n\n  /* Read attribute value and store in the buffer */\n  read = attr->read(conn, attr, data->buf->data + data->buf->len, att->chan.tx.mtu - data->buf->len, data->offset);\n  if (read < 0) {\n    data->err = err_to_att(read);\n    return BT_GATT_ITER_STOP;\n  }\n\n  net_buf_add(data->buf, read);\n\n  return BT_GATT_ITER_CONTINUE;\n}\n\nstatic u8_t att_read_rsp(struct bt_att *att, u8_t op, u8_t rsp, u16_t handle, u16_t offset) {\n  struct bt_conn  *conn = att->chan.chan.conn;\n  struct read_data data;\n\n  if (!bt_gatt_change_aware(conn, true)) {\n    return BT_ATT_ERR_DB_OUT_OF_SYNC;\n  }\n\n  if (!handle) {\n    return BT_ATT_ERR_INVALID_HANDLE;\n  }\n\n  (void)memset(&data, 0, sizeof(data));\n\n  data.buf = bt_att_create_pdu(conn, rsp, 0);\n  if (!data.buf) {\n    return BT_ATT_ERR_UNLIKELY;\n  }\n\n  data.att    = att;\n  data.offset = offset;\n\n  /* Pre-set error if no attr will be found in handle */\n  data.err = BT_ATT_ERR_INVALID_HANDLE;\n\n  bt_gatt_foreach_attr(handle, handle, read_cb, &data);\n\n  /* In case of error discard data and respond with an error */\n  if (data.err) {\n    net_buf_unref(data.buf);\n    /* Respond here since handle is set */\n    send_err_rsp(conn, op, handle, data.err);\n    return 0;\n  }\n\n  (void)bt_l2cap_send_cb(conn, BT_L2CAP_CID_ATT, data.buf, att_rsp_sent, NULL);\n\n  return 0;\n}\n\nstatic u8_t att_read_req(struct bt_att *att, struct net_buf *buf) {\n  struct bt_att_read_req *req;\n  u16_t                   handle;\n\n  req = (void *)buf->data;\n\n  handle = sys_le16_to_cpu(req->handle);\n\n  BT_DBG(\"handle 0x%04x\", handle);\n\n  return att_read_rsp(att, BT_ATT_OP_READ_REQ, BT_ATT_OP_READ_RSP, handle, 0);\n}\n\nstatic u8_t att_read_blob_req(struct bt_att *att, struct net_buf *buf) {\n  struct bt_att_read_blob_req *req;\n  u16_t                        handle, offset;\n\n  req = (void *)buf->data;\n\n  handle = sys_le16_to_cpu(req->handle);\n  offset = sys_le16_to_cpu(req->offset);\n\n  BT_DBG(\"handle 0x%04x offset %u\", handle, offset);\n\n  return att_read_rsp(att, BT_ATT_OP_READ_BLOB_REQ, BT_ATT_OP_READ_BLOB_RSP, handle, offset);\n}\n\n#if defined(CONFIG_BT_GATT_READ_MULTIPLE)\nstatic u8_t att_read_mult_req(struct bt_att *att, struct net_buf *buf) {\n  struct bt_conn  *conn = att->chan.chan.conn;\n  struct read_data data;\n  u16_t            handle;\n\n  (void)memset(&data, 0, sizeof(data));\n\n  data.buf = bt_att_create_pdu(conn, BT_ATT_OP_READ_MULT_RSP, 0);\n  if (!data.buf) {\n    return BT_ATT_ERR_UNLIKELY;\n  }\n\n  data.att = att;\n\n  while (buf->len >= sizeof(u16_t)) {\n    handle = net_buf_pull_le16(buf);\n\n    BT_DBG(\"handle 0x%04x \", handle);\n\n    /* An Error Response shall be sent by the server in response to\n     * the Read Multiple Request [....] if a read operation is not\n     * permitted on any of the Characteristic Values.\n     *\n     * If handle is not valid then return invalid handle error.\n     * If handle is found error will be cleared by read_cb.\n     */\n    data.err = BT_ATT_ERR_INVALID_HANDLE;\n\n    bt_gatt_foreach_attr(handle, handle, read_cb, &data);\n\n    /* Stop reading in case of error */\n    if (data.err) {\n      net_buf_unref(data.buf);\n      /* Respond here since handle is set */\n      send_err_rsp(conn, BT_ATT_OP_READ_MULT_REQ, handle, data.err);\n      return 0;\n    }\n  }\n\n  (void)bt_l2cap_send_cb(conn, BT_L2CAP_CID_ATT, data.buf, att_rsp_sent, NULL);\n\n  return 0;\n}\n#endif /* CONFIG_BT_GATT_READ_MULTIPLE */\n\nstruct read_group_data {\n  struct bt_att                *att;\n  struct bt_uuid               *uuid;\n  struct net_buf               *buf;\n  struct bt_att_read_group_rsp *rsp;\n  struct bt_att_group_data     *group;\n};\n\nstatic u8_t read_group_cb(const struct bt_gatt_attr *attr, void *user_data) {\n  struct read_group_data *data = user_data;\n  struct bt_att          *att  = data->att;\n  struct bt_conn         *conn = att->chan.chan.conn;\n  int                     read;\n\n  /* Update group end_handle if attribute is not a service */\n  if (bt_uuid_cmp(attr->uuid, BT_UUID_GATT_PRIMARY) && bt_uuid_cmp(attr->uuid, BT_UUID_GATT_SECONDARY)) {\n    if (data->group && attr->handle > sys_le16_to_cpu(data->group->end_handle)) {\n      data->group->end_handle = sys_cpu_to_le16(attr->handle);\n    }\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  /* If Group Type don't match skip */\n  if (bt_uuid_cmp(attr->uuid, data->uuid)) {\n    data->group = NULL;\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  BT_DBG(\"handle 0x%04x\", attr->handle);\n\n  /* Stop if there is no space left */\n  if (data->rsp->len && att->chan.tx.mtu - data->buf->len < data->rsp->len) {\n    return BT_GATT_ITER_STOP;\n  }\n\n  /* Fast forward to next group position */\n  data->group = net_buf_add(data->buf, sizeof(*data->group));\n\n  /* Initialize group handle range */\n  data->group->start_handle = sys_cpu_to_le16(attr->handle);\n  data->group->end_handle   = sys_cpu_to_le16(attr->handle);\n\n  /* Read attribute value and store in the buffer */\n  read = attr->read(conn, attr, data->buf->data + data->buf->len, att->chan.tx.mtu - data->buf->len, 0);\n  if (read < 0) {\n    /* TODO: Handle read errors */\n    return BT_GATT_ITER_STOP;\n  }\n\n  if (!data->rsp->len) {\n    /* Set len to be the first group found */\n    data->rsp->len = read + sizeof(*data->group);\n  } else if (data->rsp->len != read + sizeof(*data->group)) {\n    /* All groups entries should have the same size */\n    data->buf->len -= sizeof(*data->group);\n    return false;\n  }\n\n  net_buf_add(data->buf, read);\n\n  /* Continue to find the end handle */\n  return BT_GATT_ITER_CONTINUE;\n}\n\nstatic u8_t att_read_group_rsp(struct bt_att *att, struct bt_uuid *uuid, u16_t start_handle, u16_t end_handle) {\n  struct bt_conn        *conn = att->chan.chan.conn;\n  struct read_group_data data;\n\n  (void)memset(&data, 0, sizeof(data));\n\n  data.buf = bt_att_create_pdu(conn, BT_ATT_OP_READ_GROUP_RSP, sizeof(*data.rsp));\n  if (!data.buf) {\n    return BT_ATT_ERR_UNLIKELY;\n  }\n\n  data.att      = att;\n  data.uuid     = uuid;\n  data.rsp      = net_buf_add(data.buf, sizeof(*data.rsp));\n  data.rsp->len = 0U;\n  data.group    = NULL;\n\n  bt_gatt_foreach_attr(start_handle, end_handle, read_group_cb, &data);\n\n  if (!data.rsp->len) {\n    net_buf_unref(data.buf);\n    /* Respond here since handle is set */\n    send_err_rsp(conn, BT_ATT_OP_READ_GROUP_REQ, start_handle, BT_ATT_ERR_ATTRIBUTE_NOT_FOUND);\n    return 0;\n  }\n\n  (void)bt_l2cap_send_cb(conn, BT_L2CAP_CID_ATT, data.buf, att_rsp_sent, NULL);\n\n  return 0;\n}\n\nstatic u8_t att_read_group_req(struct bt_att *att, struct net_buf *buf) {\n  struct bt_conn               *conn = att->chan.chan.conn;\n  struct bt_att_read_group_req *req;\n  u16_t                         start_handle, end_handle, err_handle;\n  union {\n    struct bt_uuid     uuid;\n    struct bt_uuid_16  u16;\n    struct bt_uuid_128 u128;\n  } u;\n  u8_t uuid_len = buf->len - sizeof(*req);\n\n  /* Type can only be UUID16 or UUID128 */\n  if (uuid_len != 2 && uuid_len != 16) {\n    return BT_ATT_ERR_INVALID_PDU;\n  }\n\n  req = net_buf_pull_mem(buf, sizeof(*req));\n\n  start_handle = sys_le16_to_cpu(req->start_handle);\n  end_handle   = sys_le16_to_cpu(req->end_handle);\n\n  if (!bt_uuid_create(&u.uuid, req->uuid, uuid_len)) {\n    return BT_ATT_ERR_UNLIKELY;\n  }\n\n  BT_DBG(\"start_handle 0x%04x end_handle 0x%04x type %s\", start_handle, end_handle, bt_uuid_str(&u.uuid));\n\n  if (!range_is_valid(start_handle, end_handle, &err_handle)) {\n    send_err_rsp(conn, BT_ATT_OP_READ_GROUP_REQ, err_handle, BT_ATT_ERR_INVALID_HANDLE);\n    return 0;\n  }\n\n  /* Core v4.2, Vol 3, sec 2.5.3 Attribute Grouping:\n   * Not all of the grouping attributes can be used in the ATT\n   * Read By Group Type Request. The \"Primary Service\" and \"Secondary\n   * Service\" grouping types may be used in the Read By Group Type\n   * Request. The \"Characteristic\" grouping type shall not be used in\n   * the ATT Read By Group Type Request.\n   */\n  if (bt_uuid_cmp(&u.uuid, BT_UUID_GATT_PRIMARY) && bt_uuid_cmp(&u.uuid, BT_UUID_GATT_SECONDARY)) {\n    send_err_rsp(conn, BT_ATT_OP_READ_GROUP_REQ, start_handle, BT_ATT_ERR_UNSUPPORTED_GROUP_TYPE);\n    return 0;\n  }\n\n  return att_read_group_rsp(att, &u.uuid, start_handle, end_handle);\n}\n\nstruct write_data {\n  struct bt_conn *conn;\n  struct net_buf *buf;\n  u8_t            req;\n  const void     *value;\n  u16_t           len;\n  u16_t           offset;\n  u8_t            err;\n};\n\nstatic u8_t write_cb(const struct bt_gatt_attr *attr, void *user_data) {\n  struct write_data *data = user_data;\n  int                write;\n  u8_t               flags = 0U;\n\n  BT_DBG(\"handle 0x%04x offset %u\", attr->handle, data->offset);\n\n  /* Check attribute permissions */\n  data->err = bt_gatt_check_perm(data->conn, attr, BT_GATT_PERM_WRITE_MASK);\n  if (data->err) {\n    return BT_GATT_ITER_STOP;\n  }\n\n  /* Set command flag if not a request */\n  if (!data->req) {\n    flags |= BT_GATT_WRITE_FLAG_CMD;\n  }\n\n  /* Write attribute value */\n  write = attr->write(data->conn, attr, data->value, data->len, data->offset, flags);\n  if (write < 0 || write != data->len) {\n    data->err = err_to_att(write);\n    return BT_GATT_ITER_STOP;\n  }\n\n  data->err = 0U;\n\n  return BT_GATT_ITER_CONTINUE;\n}\n\nstatic u8_t att_write_rsp(struct bt_conn *conn, u8_t req, u8_t rsp, u16_t handle, u16_t offset, const void *value, u16_t len) {\n  struct write_data data;\n\n  if (!bt_gatt_change_aware(conn, req ? true : false)) {\n    return BT_ATT_ERR_DB_OUT_OF_SYNC;\n  }\n\n  if (!handle) {\n    return BT_ATT_ERR_INVALID_HANDLE;\n  }\n\n  (void)memset(&data, 0, sizeof(data));\n\n  /* Only allocate buf if required to respond */\n  if (rsp) {\n    data.buf = bt_att_create_pdu(conn, rsp, 0);\n    if (!data.buf) {\n      return BT_ATT_ERR_UNLIKELY;\n    }\n  }\n\n  data.conn   = conn;\n  data.req    = req;\n  data.offset = offset;\n  data.value  = value;\n  data.len    = len;\n  data.err    = BT_ATT_ERR_INVALID_HANDLE;\n\n  bt_gatt_foreach_attr(handle, handle, write_cb, &data);\n\n  if (data.err) {\n    /* In case of error discard data and respond with an error */\n    if (rsp) {\n      net_buf_unref(data.buf);\n      /* Respond here since handle is set */\n      send_err_rsp(conn, req, handle, data.err);\n    }\n    return req == BT_ATT_OP_EXEC_WRITE_REQ ? data.err : 0;\n  }\n\n  if (data.buf) {\n    (void)bt_l2cap_send_cb(conn, BT_L2CAP_CID_ATT, data.buf, att_rsp_sent, NULL);\n  }\n\n  return 0;\n}\n\nstatic u8_t att_write_req(struct bt_att *att, struct net_buf *buf) {\n  struct bt_conn *conn = att->chan.chan.conn;\n  u16_t           handle;\n\n  handle = net_buf_pull_le16(buf);\n\n  BT_DBG(\"handle 0x%04x\", handle);\n\n  return att_write_rsp(conn, BT_ATT_OP_WRITE_REQ, BT_ATT_OP_WRITE_RSP, handle, 0, buf->data, buf->len);\n}\n\n#if CONFIG_BT_ATT_PREPARE_COUNT > 0\nstruct prep_data {\n  struct bt_conn *conn;\n  struct net_buf *buf;\n  const void     *value;\n  u16_t           len;\n  u16_t           offset;\n  u8_t            err;\n};\n\nstatic u8_t prep_write_cb(const struct bt_gatt_attr *attr, void *user_data) {\n  struct prep_data    *data = user_data;\n  struct bt_attr_data *attr_data;\n  int                  write;\n\n  BT_DBG(\"handle 0x%04x offset %u\", attr->handle, data->offset);\n\n  /* Check attribute permissions */\n  data->err = bt_gatt_check_perm(data->conn, attr, BT_GATT_PERM_WRITE_MASK);\n  if (data->err) {\n    return BT_GATT_ITER_STOP;\n  }\n\n  /* Check if attribute requires handler to accept the data */\n  if (!(attr->perm & BT_GATT_PERM_PREPARE_WRITE)) {\n    goto append;\n  }\n\n  /* Write attribute value to check if device is authorized */\n  write = attr->write(data->conn, attr, data->value, data->len, data->offset, BT_GATT_WRITE_FLAG_PREPARE);\n  if (write != 0) {\n    data->err = err_to_att(write);\n    return BT_GATT_ITER_STOP;\n  }\n\nappend:\n  /* Copy data into the outstanding queue */\n  data->buf = net_buf_alloc(&prep_pool, K_NO_WAIT);\n  if (!data->buf) {\n    data->err = BT_ATT_ERR_PREPARE_QUEUE_FULL;\n    return BT_GATT_ITER_STOP;\n  }\n\n  attr_data         = net_buf_user_data(data->buf);\n  attr_data->handle = attr->handle;\n  attr_data->offset = data->offset;\n\n  net_buf_add_mem(data->buf, data->value, data->len);\n\n  data->err = 0U;\n\n  return BT_GATT_ITER_CONTINUE;\n}\n\nstatic u8_t att_prep_write_rsp(struct bt_att *att, u16_t handle, u16_t offset, const void *value, u16_t len) {\n  struct bt_conn                  *conn = att->chan.chan.conn;\n  struct prep_data                 data;\n  struct bt_att_prepare_write_rsp *rsp;\n\n  if (!bt_gatt_change_aware(conn, true)) {\n    return BT_ATT_ERR_DB_OUT_OF_SYNC;\n  }\n\n  if (!handle) {\n    return BT_ATT_ERR_INVALID_HANDLE;\n  }\n\n  (void)memset(&data, 0, sizeof(data));\n\n  data.conn   = conn;\n  data.offset = offset;\n  data.value  = value;\n  data.len    = len;\n  data.err    = BT_ATT_ERR_INVALID_HANDLE;\n\n  bt_gatt_foreach_attr(handle, handle, prep_write_cb, &data);\n\n  if (data.err) {\n    /* Respond here since handle is set */\n    send_err_rsp(conn, BT_ATT_OP_PREPARE_WRITE_REQ, handle, data.err);\n    return 0;\n  }\n\n  BT_DBG(\"buf %p handle 0x%04x offset %u\", data.buf, handle, offset);\n\n  /* Store buffer in the outstanding queue */\n  net_buf_put(&att->prep_queue, data.buf);\n\n  /* Generate response */\n  data.buf = bt_att_create_pdu(conn, BT_ATT_OP_PREPARE_WRITE_RSP, 0);\n  if (!data.buf) {\n    return BT_ATT_ERR_UNLIKELY;\n  }\n\n  rsp         = net_buf_add(data.buf, sizeof(*rsp));\n  rsp->handle = sys_cpu_to_le16(handle);\n  rsp->offset = sys_cpu_to_le16(offset);\n  net_buf_add(data.buf, len);\n  memcpy(rsp->value, value, len);\n\n  (void)bt_l2cap_send_cb(conn, BT_L2CAP_CID_ATT, data.buf, att_rsp_sent, NULL);\n\n  return 0;\n}\n#endif /* CONFIG_BT_ATT_PREPARE_COUNT */\n\nstatic u8_t att_prepare_write_req(struct bt_att *att, struct net_buf *buf) {\n#if CONFIG_BT_ATT_PREPARE_COUNT == 0\n  return BT_ATT_ERR_NOT_SUPPORTED;\n#else\n  struct bt_att_prepare_write_req *req;\n  u16_t                            handle, offset;\n\n  req = net_buf_pull_mem(buf, sizeof(*req));\n\n  handle = sys_le16_to_cpu(req->handle);\n  offset = sys_le16_to_cpu(req->offset);\n\n  BT_DBG(\"handle 0x%04x offset %u\", handle, offset);\n\n  return att_prep_write_rsp(att, handle, offset, buf->data, buf->len);\n#endif /* CONFIG_BT_ATT_PREPARE_COUNT */\n}\n\n#if CONFIG_BT_ATT_PREPARE_COUNT > 0\nstatic u8_t att_exec_write_rsp(struct bt_att *att, u8_t flags) {\n  struct bt_conn *conn = att->chan.chan.conn;\n  struct net_buf *buf;\n  u8_t            err = 0U;\n\n  while ((buf = net_buf_get(&att->prep_queue, K_NO_WAIT))) {\n    struct bt_attr_data *data = net_buf_user_data(buf);\n\n    BT_DBG(\"buf %p handle 0x%04x offset %u\", buf, data->handle, data->offset);\n\n    /* Just discard the data if an error was set */\n    if (!err && flags == BT_ATT_FLAG_EXEC) {\n      err = att_write_rsp(conn, BT_ATT_OP_EXEC_WRITE_REQ, 0, data->handle, data->offset, buf->data, buf->len);\n      if (err) {\n        /* Respond here since handle is set */\n        send_err_rsp(conn, BT_ATT_OP_EXEC_WRITE_REQ, data->handle, err);\n      }\n    }\n\n    net_buf_unref(buf);\n  }\n\n  if (err) {\n    return 0;\n  }\n\n  /* Generate response */\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_EXEC_WRITE_RSP, 0);\n  if (!buf) {\n    return BT_ATT_ERR_UNLIKELY;\n  }\n\n  (void)bt_l2cap_send_cb(conn, BT_L2CAP_CID_ATT, buf, att_rsp_sent, NULL);\n\n  return 0;\n}\n#endif /* CONFIG_BT_ATT_PREPARE_COUNT */\n\nstatic u8_t att_exec_write_req(struct bt_att *att, struct net_buf *buf) {\n#if CONFIG_BT_ATT_PREPARE_COUNT == 0\n  return BT_ATT_ERR_NOT_SUPPORTED;\n#else\n  struct bt_att_exec_write_req *req;\n\n  req = (void *)buf->data;\n\n  BT_DBG(\"flags 0x%02x\", req->flags);\n\n  return att_exec_write_rsp(att, req->flags);\n#endif /* CONFIG_BT_ATT_PREPARE_COUNT */\n}\n\nstatic u8_t att_write_cmd(struct bt_att *att, struct net_buf *buf) {\n  struct bt_conn *conn = att->chan.chan.conn;\n  u16_t           handle;\n\n  handle = net_buf_pull_le16(buf);\n\n  BT_DBG(\"handle 0x%04x\", handle);\n\n  return att_write_rsp(conn, 0, 0, handle, 0, buf->data, buf->len);\n}\n\n#if defined(CONFIG_BT_SIGNING)\nstatic u8_t att_signed_write_cmd(struct bt_att *att, struct net_buf *buf) {\n  struct bt_conn                 *conn = att->chan.chan.conn;\n  struct bt_att_signed_write_cmd *req;\n  u16_t                           handle;\n  int                             err;\n\n  req = (void *)buf->data;\n\n  handle = sys_le16_to_cpu(req->handle);\n\n  BT_DBG(\"handle 0x%04x\", handle);\n\n  /* Verifying data requires full buffer including attribute header */\n  net_buf_push(buf, sizeof(struct bt_att_hdr));\n  err = bt_smp_sign_verify(conn, buf);\n  if (err) {\n    BT_ERR(\"Error verifying data\");\n    /* No response for this command */\n    return 0;\n  }\n\n  net_buf_pull(buf, sizeof(struct bt_att_hdr));\n  net_buf_pull(buf, sizeof(*req));\n\n  return att_write_rsp(conn, 0, 0, handle, 0, buf->data, buf->len - sizeof(struct bt_att_signature));\n}\n#endif /* CONFIG_BT_SIGNING */\n\n#if defined(CONFIG_BT_GATT_CLIENT)\n#if defined(CONFIG_BT_SMP)\nstatic int att_change_security(struct bt_conn *conn, u8_t err) {\n  bt_security_t sec;\n\n  switch (err) {\n  case BT_ATT_ERR_INSUFFICIENT_ENCRYPTION:\n    if (conn->sec_level >= BT_SECURITY_L2)\n      return -EALREADY;\n    sec = BT_SECURITY_L2;\n    break;\n  case BT_ATT_ERR_AUTHENTICATION:\n    if (conn->sec_level < BT_SECURITY_L2) {\n      /* BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part C]\n       * page 375:\n       *\n       * If an LTK is not available, the service request\n       * shall be rejected with the error code 'Insufficient\n       * Authentication'.\n       * Note: When the link is not encrypted, the error code\n       * \"Insufficient Authentication\" does not indicate that\n       * MITM protection is required.\n       */\n      sec = BT_SECURITY_L2;\n    } else if (conn->sec_level < BT_SECURITY_L3) {\n      /* BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part C]\n       * page 375:\n       *\n       * If an authenticated pairing is required but only an\n       * unauthenticated pairing has occurred and the link is\n       * currently encrypted, the service request shall be\n       * rejected with the error code 'Insufficient\n       * Authentication'.\n       * Note: When unauthenticated pairing has occurred and\n       * the link is currently encrypted, the error code\n       * 'Insufficient Authentication' indicates that MITM\n       * protection is required.\n       */\n      sec = BT_SECURITY_L3;\n    } else if (conn->sec_level < BT_SECURITY_L4) {\n      /* BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part C]\n       * page 375:\n       *\n       * If LE Secure Connections authenticated pairing is\n       * required but LE legacy pairing has occurred and the\n       * link is currently encrypted, the service request\n       * shall be rejected with the error code ''Insufficient\n       * Authentication'.\n       */\n      sec = BT_SECURITY_L4;\n    } else {\n      return -EALREADY;\n    }\n    break;\n  default:\n    return -EINVAL;\n  }\n\n  return bt_conn_set_security(conn, sec);\n}\n#endif /* CONFIG_BT_SMP */\n\nstatic u8_t att_error_rsp(struct bt_att *att, struct net_buf *buf) {\n  struct bt_att_error_rsp *rsp;\n  u8_t                     err;\n\n  rsp = (void *)buf->data;\n\n  BT_DBG(\"request 0x%02x handle 0x%04x error 0x%02x\", rsp->request, sys_le16_to_cpu(rsp->handle), rsp->error);\n\n  /* Don't retry if there is no req pending or it has been cancelled */\n  if (!att->req || att->req == &cancel) {\n    err = BT_ATT_ERR_UNLIKELY;\n    goto done;\n  }\n\n  if (att->req->buf) {\n    /* Restore state to be resent */\n    net_buf_simple_restore(&att->req->buf->b, &att->req->state);\n  }\n\n  err = rsp->error;\n#if defined(CONFIG_BT_SMP)\n  if (att->req->retrying) {\n    goto done;\n  }\n\n  /* Check if security needs to be changed */\n  if (!att_change_security(att->chan.chan.conn, err)) {\n    att->req->retrying = true;\n    /* Wait security_changed: TODO: Handle fail case */\n    return 0;\n  }\n#endif /* CONFIG_BT_SMP */\n\ndone:\n  return att_handle_rsp(att, NULL, 0, err);\n}\n\nstatic u8_t att_handle_find_info_rsp(struct bt_att *att, struct net_buf *buf) {\n  BT_DBG(\"\");\n\n  return att_handle_rsp(att, buf->data, buf->len, 0);\n}\n\nstatic u8_t att_handle_find_type_rsp(struct bt_att *att, struct net_buf *buf) {\n  BT_DBG(\"\");\n\n  return att_handle_rsp(att, buf->data, buf->len, 0);\n}\n\nstatic u8_t att_handle_read_type_rsp(struct bt_att *att, struct net_buf *buf) {\n  BT_DBG(\"\");\n\n  return att_handle_rsp(att, buf->data, buf->len, 0);\n}\n\nstatic u8_t att_handle_read_rsp(struct bt_att *att, struct net_buf *buf) {\n  BT_DBG(\"\");\n\n  return att_handle_rsp(att, buf->data, buf->len, 0);\n}\n\nstatic u8_t att_handle_read_blob_rsp(struct bt_att *att, struct net_buf *buf) {\n  BT_DBG(\"\");\n\n  return att_handle_rsp(att, buf->data, buf->len, 0);\n}\n\n#if defined(CONFIG_BT_GATT_READ_MULTIPLE)\nstatic u8_t att_handle_read_mult_rsp(struct bt_att *att, struct net_buf *buf) {\n  BT_DBG(\"\");\n\n  return att_handle_rsp(att, buf->data, buf->len, 0);\n}\n#endif /* CONFIG_BT_GATT_READ_MULTIPLE */\n\nstatic u8_t att_handle_read_group_rsp(struct bt_att *att, struct net_buf *buf) {\n  BT_DBG(\"\");\n\n  return att_handle_rsp(att, buf->data, buf->len, 0);\n}\n\nstatic u8_t att_handle_write_rsp(struct bt_att *att, struct net_buf *buf) {\n  BT_DBG(\"\");\n\n  return att_handle_rsp(att, buf->data, buf->len, 0);\n}\n\nstatic u8_t att_handle_prepare_write_rsp(struct bt_att *att, struct net_buf *buf) {\n  BT_DBG(\"\");\n\n  return att_handle_rsp(att, buf->data, buf->len, 0);\n}\n\nstatic u8_t att_handle_exec_write_rsp(struct bt_att *att, struct net_buf *buf) {\n  BT_DBG(\"\");\n\n  return att_handle_rsp(att, buf->data, buf->len, 0);\n}\n\nstatic u8_t att_notify(struct bt_att *att, struct net_buf *buf) {\n  struct bt_conn *conn = att->chan.chan.conn;\n  u16_t           handle;\n\n  handle = net_buf_pull_le16(buf);\n  BT_DBG(\"handle 0x%04x\", handle);\n\n  bt_gatt_notification(conn, handle, buf->data, buf->len);\n  return 0;\n}\n\nstatic u8_t att_indicate(struct bt_att *att, struct net_buf *buf) {\n  struct bt_conn *conn = att->chan.chan.conn;\n  u16_t           handle;\n\n  handle = net_buf_pull_le16(buf);\n\n  BT_DBG(\"handle 0x%04x\", handle);\n\n  bt_gatt_notification(conn, handle, buf->data, buf->len);\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_CONFIRM, 0);\n  if (!buf) {\n    return 0;\n  }\n\n  (void)bt_l2cap_send_cb(conn, BT_L2CAP_CID_ATT, buf, att_cfm_sent, NULL);\n\n  return 0;\n}\n#endif /* CONFIG_BT_GATT_CLIENT */\n\nstatic u8_t att_confirm(struct bt_att *att, struct net_buf *buf) {\n  BT_DBG(\"\");\n\n  return att_handle_rsp(att, buf->data, buf->len, 0);\n}\n\nstatic const struct att_handler {\n  u8_t       op;\n  u8_t       expect_len;\n  att_type_t type;\n  u8_t (*func)(struct bt_att *att, struct net_buf *buf);\n} handlers[] = {\n    {          BT_ATT_OP_MTU_REQ,                              sizeof(struct bt_att_exchange_mtu_req),      ATT_REQUEST,                  att_mtu_req},\n    {    BT_ATT_OP_FIND_INFO_REQ,                                 sizeof(struct bt_att_find_info_req),      ATT_REQUEST,            att_find_info_req},\n    {    BT_ATT_OP_FIND_TYPE_REQ,                                 sizeof(struct bt_att_find_type_req),      ATT_REQUEST,            att_find_type_req},\n    {    BT_ATT_OP_READ_TYPE_REQ,                                 sizeof(struct bt_att_read_type_req),      ATT_REQUEST,            att_read_type_req},\n    {         BT_ATT_OP_READ_REQ,                                      sizeof(struct bt_att_read_req),      ATT_REQUEST,                 att_read_req},\n    {    BT_ATT_OP_READ_BLOB_REQ,                                 sizeof(struct bt_att_read_blob_req),      ATT_REQUEST,            att_read_blob_req},\n#if defined(CONFIG_BT_GATT_READ_MULTIPLE)\n    {    BT_ATT_OP_READ_MULT_REQ,                                        BT_ATT_READ_MULT_MIN_LEN_REQ,      ATT_REQUEST,            att_read_mult_req},\n#endif  /* CONFIG_BT_GATT_READ_MULTIPLE */\n    {   BT_ATT_OP_READ_GROUP_REQ,                                sizeof(struct bt_att_read_group_req),      ATT_REQUEST,           att_read_group_req},\n    {        BT_ATT_OP_WRITE_REQ,                                     sizeof(struct bt_att_write_req),      ATT_REQUEST,                att_write_req},\n    {BT_ATT_OP_PREPARE_WRITE_REQ,                             sizeof(struct bt_att_prepare_write_req),      ATT_REQUEST,        att_prepare_write_req},\n    {   BT_ATT_OP_EXEC_WRITE_REQ,                                sizeof(struct bt_att_exec_write_req),      ATT_REQUEST,           att_exec_write_req},\n    {          BT_ATT_OP_CONFIRM,                                                                   0, ATT_CONFIRMATION,                  att_confirm},\n    {        BT_ATT_OP_WRITE_CMD,                                     sizeof(struct bt_att_write_cmd),      ATT_COMMAND,                att_write_cmd},\n#if defined(CONFIG_BT_SIGNING)\n    { BT_ATT_OP_SIGNED_WRITE_CMD, (sizeof(struct bt_att_write_cmd) + sizeof(struct bt_att_signature)),      ATT_COMMAND,         att_signed_write_cmd},\n#endif  /* CONFIG_BT_SIGNING */\n#if defined(CONFIG_BT_GATT_CLIENT)\n    {        BT_ATT_OP_ERROR_RSP,                                     sizeof(struct bt_att_error_rsp),     ATT_RESPONSE,                att_error_rsp},\n    {          BT_ATT_OP_MTU_RSP,                              sizeof(struct bt_att_exchange_mtu_rsp),     ATT_RESPONSE,                  att_mtu_rsp},\n    {    BT_ATT_OP_FIND_INFO_RSP,                                 sizeof(struct bt_att_find_info_rsp),     ATT_RESPONSE,     att_handle_find_info_rsp},\n    {    BT_ATT_OP_FIND_TYPE_RSP,                                 sizeof(struct bt_att_find_type_rsp),     ATT_RESPONSE,     att_handle_find_type_rsp},\n    {    BT_ATT_OP_READ_TYPE_RSP,                                 sizeof(struct bt_att_read_type_rsp),     ATT_RESPONSE,     att_handle_read_type_rsp},\n    {         BT_ATT_OP_READ_RSP,                                      sizeof(struct bt_att_read_rsp),     ATT_RESPONSE,          att_handle_read_rsp},\n    {    BT_ATT_OP_READ_BLOB_RSP,                                 sizeof(struct bt_att_read_blob_rsp),     ATT_RESPONSE,     att_handle_read_blob_rsp},\n#if defined(CONFIG_BT_GATT_READ_MULTIPLE)\n    {    BT_ATT_OP_READ_MULT_RSP,                                 sizeof(struct bt_att_read_mult_rsp),     ATT_RESPONSE,     att_handle_read_mult_rsp},\n#endif  /* CONFIG_BT_GATT_READ_MULTIPLE */\n    {   BT_ATT_OP_READ_GROUP_RSP,                                sizeof(struct bt_att_read_group_rsp),     ATT_RESPONSE,    att_handle_read_group_rsp},\n    {        BT_ATT_OP_WRITE_RSP,                                                                   0,     ATT_RESPONSE,         att_handle_write_rsp},\n    {BT_ATT_OP_PREPARE_WRITE_RSP,                             sizeof(struct bt_att_prepare_write_rsp),     ATT_RESPONSE, att_handle_prepare_write_rsp},\n    {   BT_ATT_OP_EXEC_WRITE_RSP,                                                                   0,     ATT_RESPONSE,    att_handle_exec_write_rsp},\n    {           BT_ATT_OP_NOTIFY,                                        sizeof(struct bt_att_notify), ATT_NOTIFICATION,                   att_notify},\n    {         BT_ATT_OP_INDICATE,                                      sizeof(struct bt_att_indicate),   ATT_INDICATION,                 att_indicate},\n#endif  /* CONFIG_BT_GATT_CLIENT */\n};\n\nstatic att_type_t att_op_get_type(u8_t op) {\n  switch (op) {\n  case BT_ATT_OP_MTU_REQ:\n  case BT_ATT_OP_FIND_INFO_REQ:\n  case BT_ATT_OP_FIND_TYPE_REQ:\n  case BT_ATT_OP_READ_TYPE_REQ:\n  case BT_ATT_OP_READ_REQ:\n  case BT_ATT_OP_READ_BLOB_REQ:\n  case BT_ATT_OP_READ_MULT_REQ:\n  case BT_ATT_OP_READ_GROUP_REQ:\n  case BT_ATT_OP_WRITE_REQ:\n  case BT_ATT_OP_PREPARE_WRITE_REQ:\n  case BT_ATT_OP_EXEC_WRITE_REQ:\n    return ATT_REQUEST;\n  case BT_ATT_OP_CONFIRM:\n    return ATT_CONFIRMATION;\n  case BT_ATT_OP_WRITE_CMD:\n  case BT_ATT_OP_SIGNED_WRITE_CMD:\n    return ATT_COMMAND;\n  case BT_ATT_OP_ERROR_RSP:\n  case BT_ATT_OP_MTU_RSP:\n  case BT_ATT_OP_FIND_INFO_RSP:\n  case BT_ATT_OP_FIND_TYPE_RSP:\n  case BT_ATT_OP_READ_TYPE_RSP:\n  case BT_ATT_OP_READ_RSP:\n  case BT_ATT_OP_READ_BLOB_RSP:\n  case BT_ATT_OP_READ_MULT_RSP:\n  case BT_ATT_OP_READ_GROUP_RSP:\n  case BT_ATT_OP_WRITE_RSP:\n  case BT_ATT_OP_PREPARE_WRITE_RSP:\n  case BT_ATT_OP_EXEC_WRITE_RSP:\n    return ATT_RESPONSE;\n  case BT_ATT_OP_NOTIFY:\n    return ATT_NOTIFICATION;\n  case BT_ATT_OP_INDICATE:\n    return ATT_INDICATION;\n  }\n\n  if (op & ATT_CMD_MASK) {\n    return ATT_COMMAND;\n  }\n\n  return ATT_UNKNOWN;\n}\n\nstatic int bt_att_recv(struct bt_l2cap_chan *chan, struct net_buf *buf) {\n  struct bt_att            *att = ATT_CHAN(chan);\n  struct bt_att_hdr        *hdr;\n  const struct att_handler *handler;\n  u8_t                      err;\n  size_t                    i;\n\n  if (buf->len < sizeof(*hdr)) {\n    BT_ERR(\"Too small ATT PDU received\");\n    return 0;\n  }\n\n  hdr = net_buf_pull_mem(buf, sizeof(*hdr));\n  BT_DBG(\"Received ATT code 0x%02x len %u\", hdr->code, buf->len);\n\n  for (i = 0, handler = NULL; i < ARRAY_SIZE(handlers); i++) {\n    if (hdr->code == handlers[i].op) {\n      handler = &handlers[i];\n      break;\n    }\n  }\n\n  if (!handler) {\n    BT_WARN(\"Unhandled ATT code 0x%02x\", hdr->code);\n    if (att_op_get_type(hdr->code) != ATT_COMMAND) {\n      send_err_rsp(chan->conn, hdr->code, 0, BT_ATT_ERR_NOT_SUPPORTED);\n    }\n    return 0;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_ATT_ENFORCE_FLOW)) {\n    if (handler->type == ATT_REQUEST && atomic_test_and_set_bit(att->flags, ATT_PENDING_RSP)) {\n      BT_WARN(\"Ignoring unexpected request\");\n      return 0;\n    } else if (handler->type == ATT_INDICATION && atomic_test_and_set_bit(att->flags, ATT_PENDING_CFM)) {\n      BT_WARN(\"Ignoring unexpected indication\");\n      return 0;\n    }\n  }\n\n  if (buf->len < handler->expect_len) {\n    BT_ERR(\"Invalid len %u for code 0x%02x\", buf->len, hdr->code);\n    err = BT_ATT_ERR_INVALID_PDU;\n  } else {\n    err = handler->func(att, buf);\n  }\n\n  if (handler->type == ATT_REQUEST && err) {\n    BT_DBG(\"ATT error 0x%02x\", err);\n    send_err_rsp(chan->conn, hdr->code, 0, err);\n  }\n\n  return 0;\n}\n\nstatic struct bt_att *att_chan_get(struct bt_conn *conn) {\n  struct bt_l2cap_chan *chan;\n  struct bt_att        *att;\n\n  if (conn->state != BT_CONN_CONNECTED) {\n    BT_WARN(\"Not connected\");\n    return NULL;\n  }\n\n  chan = bt_l2cap_le_lookup_rx_cid(conn, BT_L2CAP_CID_ATT);\n  if (!chan) {\n    BT_ERR(\"Unable to find ATT channel\");\n    return NULL;\n  }\n\n  att = ATT_CHAN(chan);\n  if (atomic_test_bit(att->flags, ATT_DISCONNECTED)) {\n    BT_WARN(\"ATT context flagged as disconnected\");\n    return NULL;\n  }\n\n  return att;\n}\n\nstruct net_buf *bt_att_create_pdu(struct bt_conn *conn, u8_t op, size_t len) {\n  struct bt_att_hdr *hdr;\n  struct net_buf    *buf;\n  struct bt_att     *att;\n\n  att = att_chan_get(conn);\n  if (!att) {\n    return NULL;\n  }\n\n  if (len + sizeof(op) > att->chan.tx.mtu) {\n    BT_WARN(\"ATT MTU exceeded, max %u, wanted %zu\", att->chan.tx.mtu, len + sizeof(op));\n    return NULL;\n  }\n\n  switch (att_op_get_type(op)) {\n  case ATT_RESPONSE:\n  case ATT_CONFIRMATION:\n    /* Use a timeout only when responding/confirming */\n    buf = bt_l2cap_create_pdu_timeout(NULL, 0, ATT_TIMEOUT);\n    break;\n  default:\n    buf = bt_l2cap_create_pdu(NULL, 0);\n  }\n\n  if (!buf) {\n    BT_ERR(\"Unable to allocate buffer for op 0x%02x\", op);\n    return NULL;\n  }\n\n  hdr       = net_buf_add(buf, sizeof(*hdr));\n  hdr->code = op;\n\n  return buf;\n}\n\nstatic void att_reset(struct bt_att *att) {\n  struct bt_att_req *req, *tmp;\n  int                i;\n  struct net_buf    *buf;\n\n#if CONFIG_BT_ATT_PREPARE_COUNT > 0\n  /* Discard queued buffers */\n  while ((buf = k_fifo_get(&att->prep_queue, K_NO_WAIT))) {\n    net_buf_unref(buf);\n  }\n#endif /* CONFIG_BT_ATT_PREPARE_COUNT > 0 */\n\n  while ((buf = k_fifo_get(&att->tx_queue, K_NO_WAIT))) {\n    net_buf_unref(buf);\n  }\n\n  atomic_set_bit(att->flags, ATT_DISCONNECTED);\n\n  /* Ensure that any waiters are woken up */\n  for (i = 0; i < CONFIG_BT_ATT_TX_MAX; i++) {\n    k_sem_give(&att->tx_sem);\n  }\n\n  /* Notify pending requests */\n  SYS_SLIST_FOR_EACH_CONTAINER_SAFE(&att->reqs, req, tmp, node) {\n    if (req->func) {\n      req->func(NULL, BT_ATT_ERR_UNLIKELY, NULL, 0, req);\n    }\n\n    att_req_destroy(req);\n  }\n\n  /* Reset list */\n  sys_slist_init(&att->reqs);\n\n  if (!att->req) {\n    return;\n  }\n\n  /* Notify outstanding request */\n  att_handle_rsp(att, NULL, 0, BT_ATT_ERR_UNLIKELY);\n}\n\nstatic void att_timeout(struct k_work *work) {\n  struct bt_att           *att = CONTAINER_OF(work, struct bt_att, timeout_work);\n  struct bt_l2cap_le_chan *ch  = &att->chan;\n\n  BT_ERR(\"ATT Timeout\");\n\n  /* BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part F] page 480:\n   *\n   * A transaction not completed within 30 seconds shall time out. Such a\n   * transaction shall be considered to have failed and the local higher\n   * layers shall be informed of this failure. No more attribute protocol\n   * requests, commands, indications or notifications shall be sent to the\n   * target device on this ATT Bearer.\n   */\n  att_reset(att);\n\n  /* Consider the channel disconnected */\n  bt_gatt_disconnected(ch->chan.conn);\n  ch->chan.conn = NULL;\n}\n\nstatic void bt_att_connected(struct bt_l2cap_chan *chan) {\n  struct bt_att           *att = ATT_CHAN(chan);\n  struct bt_l2cap_le_chan *ch  = BT_L2CAP_LE_CHAN(chan);\n\n  BT_DBG(\"chan %p cid 0x%04x\", ch, ch->tx.cid);\n\n  k_fifo_init(&att->tx_queue, 20);\n#if CONFIG_BT_ATT_PREPARE_COUNT > 0\n  k_fifo_init(&att->prep_queue, 20);\n#endif\n\n  ch->tx.mtu = BT_ATT_DEFAULT_LE_MTU;\n  ch->rx.mtu = BT_ATT_DEFAULT_LE_MTU;\n\n  k_delayed_work_init(&att->timeout_work, att_timeout);\n  sys_slist_init(&att->reqs);\n}\n\nstatic void bt_att_disconnected(struct bt_l2cap_chan *chan) {\n  struct bt_att           *att = ATT_CHAN(chan);\n  struct bt_l2cap_le_chan *ch  = BT_L2CAP_LE_CHAN(chan);\n\n  BT_DBG(\"chan %p cid 0x%04x\", ch, ch->tx.cid);\n\n  att_reset(att);\n\n  bt_gatt_disconnected(ch->chan.conn);\n\n#ifdef BFLB_BLE_PATCH_FREE_ALLOCATED_BUFFER_IN_OS\n  if (att->timeout_work.timer.timer.hdl)\n    k_delayed_work_del_timer(&att->timeout_work);\n\n  if (att->tx_queue._queue.hdl) {\n    k_queue_free(&att->tx_queue._queue);\n    att->tx_queue._queue.hdl = NULL;\n  }\n\n#if CONFIG_BT_ATT_PREPARE_COUNT > 0\n  if (att->prep_queue._queue.hdl) {\n    k_queue_free(&att->prep_queue._queue);\n    att->prep_queue._queue.hdl = NULL;\n  }\n#endif\n\n  if (att->tx_sem.sem.hdl)\n    k_sem_delete(&att->tx_sem);\n#endif\n}\n\n#if defined(CONFIG_BT_SMP)\nstatic void bt_att_encrypt_change(struct bt_l2cap_chan *chan, u8_t hci_status) {\n  struct bt_att           *att  = ATT_CHAN(chan);\n  struct bt_l2cap_le_chan *ch   = BT_L2CAP_LE_CHAN(chan);\n  struct bt_conn          *conn = ch->chan.conn;\n\n  BT_DBG(\"chan %p conn %p handle %u sec_level 0x%02x status 0x%02x\", ch, conn, conn->handle, conn->sec_level, hci_status);\n\n  /*\n   * If status (HCI status of security procedure) is non-zero, notify\n   * outstanding request about security failure.\n   */\n  if (hci_status) {\n    att_handle_rsp(att, NULL, 0, BT_ATT_ERR_AUTHENTICATION);\n    return;\n  }\n\n  bt_gatt_encrypt_change(conn);\n\n  if (conn->sec_level == BT_SECURITY_L1) {\n    return;\n  }\n\n  if (!att->req || !att->req->retrying) {\n    return;\n  }\n\n#if (BFLB_BT_CO_THREAD)\n  if (k_sem_take(&att->tx_sem, K_NO_WAIT) < 0) {\n    k_fifo_put(&att->tx_queue, att->req->buf);\n    return;\n  }\n#else\n  k_sem_take(&att->tx_sem, K_FOREVER);\n#endif\n  if (!att_is_connected(att)) {\n    BT_WARN(\"Disconnected\");\n    k_sem_give(&att->tx_sem);\n    return;\n  }\n\n  BT_DBG(\"Retrying\");\n\n  /* Resend buffer */\n  (void)bt_l2cap_send_cb(conn, BT_L2CAP_CID_ATT, att->req->buf, att_cb(att->req->buf), NULL);\n  att->req->buf = NULL;\n}\n#endif /* CONFIG_BT_SMP */\n\n#if defined(BFLB_BLE_MTU_CHANGE_CB)\nvoid bt_att_mtu_changed(struct bt_l2cap_chan *chan, u16_t mtu) { bt_gatt_mtu_changed(chan->conn, mtu); }\n#endif\n\nstatic int bt_att_accept(struct bt_conn *conn, struct bt_l2cap_chan **chan) {\n  int                             i;\n  static struct bt_l2cap_chan_ops ops = {\n      .connected    = bt_att_connected,\n      .disconnected = bt_att_disconnected,\n      .recv         = bt_att_recv,\n#if defined(CONFIG_BT_SMP)\n      .encrypt_change = bt_att_encrypt_change,\n#endif /* CONFIG_BT_SMP */\n#if defined(BFLB_BLE_MTU_CHANGE_CB)\n      .mtu_changed = bt_att_mtu_changed,\n#endif\n  };\n\n  BT_DBG(\"conn %p handle %u\", conn, conn->handle);\n\n  for (i = 0; i < ARRAY_SIZE(bt_req_pool); i++) {\n    struct bt_att *att = &bt_req_pool[i];\n\n    if (att->chan.chan.conn) {\n      continue;\n    }\n\n    (void)memset(att, 0, sizeof(*att));\n    att->chan.chan.ops = &ops;\n    k_sem_init(&att->tx_sem, CONFIG_BT_ATT_TX_MAX, CONFIG_BT_ATT_TX_MAX);\n\n    *chan = &att->chan.chan;\n\n    return 0;\n  }\n\n  BT_ERR(\"No available ATT context for conn %p\", conn);\n\n  return -ENOMEM;\n}\n\nBT_L2CAP_CHANNEL_DEFINE(att_fixed_chan, BT_L2CAP_CID_ATT, bt_att_accept);\n\nvoid bt_att_init(void) {\n#if defined(BFLB_BLE_DISABLE_STATIC_CHANNEL)\n  static struct bt_l2cap_fixed_chan chan = {\n      .cid    = BT_L2CAP_CID_ATT,\n      .accept = bt_att_accept,\n  };\n\n  bt_l2cap_le_fixed_chan_register(&chan);\n#endif\n\n#if CONFIG_BT_ATT_PREPARE_COUNT > 0\n#if defined(BFLB_DYNAMIC_ALLOC_MEM)\n#if (BFLB_STATIC_ALLOC_MEM)\n  net_buf_init(PREP, &prep_pool, CONFIG_BT_ATT_PREPARE_COUNT, BT_ATT_MTU, NULL);\n#else\n  net_buf_init(&prep_pool, CONFIG_BT_ATT_PREPARE_COUNT, BT_ATT_MTU, NULL);\n#endif\n#endif\n#endif\n\n  bt_gatt_init();\n}\n\nu16_t bt_att_get_mtu(struct bt_conn *conn) {\n  struct bt_att *att;\n\n  att = att_chan_get(conn);\n  if (!att) {\n    return 0;\n  }\n\n  /* tx and rx MTU shall be symmetric */\n  return att->chan.tx.mtu;\n}\n\nint bt_att_send(struct bt_conn *conn, struct net_buf *buf, bt_conn_tx_cb_t cb, void *user_data) {\n  struct bt_att *att;\n  int            err;\n\n  __ASSERT_NO_MSG(conn);\n  __ASSERT_NO_MSG(buf);\n\n  att = att_chan_get(conn);\n  if (!att) {\n    net_buf_unref(buf);\n    return -ENOTCONN;\n  }\n\n  /* Don't use tx_sem if caller has set it own callback */\n  if (!cb) {\n    /* Queue buffer to be send later */\n    if (k_sem_take(&att->tx_sem, K_NO_WAIT) < 0) {\n      k_fifo_put(&att->tx_queue, buf);\n      return 0;\n    }\n  }\n\n  err = att_send(conn, buf, cb, user_data);\n  if (err) {\n    if (!cb) {\n      k_sem_give(&att->tx_sem);\n    }\n    return err;\n  }\n\n  return 0;\n}\n\nint bt_att_req_send(struct bt_conn *conn, struct bt_att_req *req) {\n  struct bt_att *att;\n\n  BT_DBG(\"conn %p req %p\", conn, req);\n\n  __ASSERT_NO_MSG(conn);\n  __ASSERT_NO_MSG(req);\n\n  att = att_chan_get(conn);\n  if (!att) {\n    net_buf_unref(req->buf);\n    req->buf = NULL;\n    return -ENOTCONN;\n  }\n\n  /* Check if there is a request outstanding */\n  if (att->req) {\n    /* Queue the request to be send later */\n    sys_slist_append(&att->reqs, &req->node);\n    return 0;\n  }\n\n  return att_send_req(att, req);\n}\n\nvoid bt_att_req_cancel(struct bt_conn *conn, struct bt_att_req *req) {\n  struct bt_att *att;\n\n  BT_DBG(\"req %p\", req);\n\n  if (!conn || !req) {\n    return;\n  }\n\n  att = att_chan_get(conn);\n  if (!att) {\n    return;\n  }\n\n  /* Check if request is outstanding */\n  if (att->req == req) {\n    att->req = &cancel;\n  } else {\n    /* Remove request from the list */\n    sys_slist_find_and_remove(&att->reqs, &req->node);\n  }\n\n  att_req_destroy(req);\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/att_internal.h",
    "content": "/* att_internal.h - Attribute protocol handling */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#define BT_ATT_DEFAULT_LE_MTU 23\n\n#if BT_L2CAP_RX_MTU < CONFIG_BT_L2CAP_TX_MTU\n#define BT_ATT_MTU BT_L2CAP_RX_MTU\n#else\n#define BT_ATT_MTU CONFIG_BT_L2CAP_TX_MTU\n#endif\n\nstruct bt_att_hdr {\n    u8_t code;\n} __packed;\n\n#define BT_ATT_OP_ERROR_RSP 0x01\nstruct bt_att_error_rsp {\n    u8_t request;\n    u16_t handle;\n    u8_t error;\n} __packed;\n\n#define BT_ATT_OP_MTU_REQ 0x02\nstruct bt_att_exchange_mtu_req {\n    u16_t mtu;\n} __packed;\n\n#define BT_ATT_OP_MTU_RSP 0x03\nstruct bt_att_exchange_mtu_rsp {\n    u16_t mtu;\n} __packed;\n\n/* Find Information Request */\n#define BT_ATT_OP_FIND_INFO_REQ 0x04\nstruct bt_att_find_info_req {\n    u16_t start_handle;\n    u16_t end_handle;\n} __packed;\n\n/* Format field values for BT_ATT_OP_FIND_INFO_RSP */\n#define BT_ATT_INFO_16  0x01\n#define BT_ATT_INFO_128 0x02\n\nstruct bt_att_info_16 {\n    u16_t handle;\n    u16_t uuid;\n} __packed;\n\nstruct bt_att_info_128 {\n    u16_t handle;\n    u8_t uuid[16];\n} __packed;\n\n/* Find Information Response */\n#define BT_ATT_OP_FIND_INFO_RSP 0x05\nstruct bt_att_find_info_rsp {\n    u8_t format;\n    u8_t info[0];\n} __packed;\n\n/* Find By Type Value Request */\n#define BT_ATT_OP_FIND_TYPE_REQ 0x06\nstruct bt_att_find_type_req {\n    u16_t start_handle;\n    u16_t end_handle;\n    u16_t type;\n    u8_t value[0];\n} __packed;\n\nstruct bt_att_handle_group {\n    u16_t start_handle;\n    u16_t end_handle;\n} __packed;\n\n/* Find By Type Value Response */\n#define BT_ATT_OP_FIND_TYPE_RSP 0x07\nstruct bt_att_find_type_rsp {\n    struct bt_att_handle_group list[0];\n} __packed;\n\n/* Read By Type Request */\n#define BT_ATT_OP_READ_TYPE_REQ 0x08\nstruct bt_att_read_type_req {\n    u16_t start_handle;\n    u16_t end_handle;\n    u8_t uuid[0];\n} __packed;\n\nstruct bt_att_data {\n    u16_t handle;\n    u8_t value[0];\n} __packed;\n\n/* Read By Type Response */\n#define BT_ATT_OP_READ_TYPE_RSP 0x09\nstruct bt_att_read_type_rsp {\n    u8_t len;\n    struct bt_att_data data[0];\n} __packed;\n\n/* Read Request */\n#define BT_ATT_OP_READ_REQ 0x0a\nstruct bt_att_read_req {\n    u16_t handle;\n} __packed;\n\n/* Read Response */\n#define BT_ATT_OP_READ_RSP 0x0b\nstruct bt_att_read_rsp {\n    u8_t value[0];\n} __packed;\n\n/* Read Blob Request */\n#define BT_ATT_OP_READ_BLOB_REQ 0x0c\nstruct bt_att_read_blob_req {\n    u16_t handle;\n    u16_t offset;\n} __packed;\n\n/* Read Blob Response */\n#define BT_ATT_OP_READ_BLOB_RSP 0x0d\nstruct bt_att_read_blob_rsp {\n    u8_t value[0];\n} __packed;\n\n/* Read Multiple Request */\n#define BT_ATT_READ_MULT_MIN_LEN_REQ 0x04\n\n#define BT_ATT_OP_READ_MULT_REQ 0x0e\nstruct bt_att_read_mult_req {\n    u16_t handles[0];\n} __packed;\n\n/* Read Multiple Respose */\n#define BT_ATT_OP_READ_MULT_RSP 0x0f\nstruct bt_att_read_mult_rsp {\n    u8_t value[0];\n} __packed;\n\n/* Read by Group Type Request */\n#define BT_ATT_OP_READ_GROUP_REQ 0x10\nstruct bt_att_read_group_req {\n    u16_t start_handle;\n    u16_t end_handle;\n    u8_t uuid[0];\n} __packed;\n\nstruct bt_att_group_data {\n    u16_t start_handle;\n    u16_t end_handle;\n    u8_t value[0];\n} __packed;\n\n/* Read by Group Type Response */\n#define BT_ATT_OP_READ_GROUP_RSP 0x11\nstruct bt_att_read_group_rsp {\n    u8_t len;\n    struct bt_att_group_data data[0];\n} __packed;\n\n/* Write Request */\n#define BT_ATT_OP_WRITE_REQ 0x12\nstruct bt_att_write_req {\n    u16_t handle;\n    u8_t value[0];\n} __packed;\n\n/* Write Response */\n#define BT_ATT_OP_WRITE_RSP 0x13\n\n/* Prepare Write Request */\n#define BT_ATT_OP_PREPARE_WRITE_REQ 0x16\nstruct bt_att_prepare_write_req {\n    u16_t handle;\n    u16_t offset;\n    u8_t value[0];\n} __packed;\n\n/* Prepare Write Respond */\n#define BT_ATT_OP_PREPARE_WRITE_RSP 0x17\nstruct bt_att_prepare_write_rsp {\n    u16_t handle;\n    u16_t offset;\n    u8_t value[0];\n} __packed;\n\n/* Execute Write Request */\n#define BT_ATT_FLAG_CANCEL 0x00\n#define BT_ATT_FLAG_EXEC   0x01\n\n#define BT_ATT_OP_EXEC_WRITE_REQ 0x18\nstruct bt_att_exec_write_req {\n    u8_t flags;\n} __packed;\n\n/* Execute Write Response */\n#define BT_ATT_OP_EXEC_WRITE_RSP 0x19\n\n/* Handle Value Notification */\n#define BT_ATT_OP_NOTIFY 0x1b\nstruct bt_att_notify {\n    u16_t handle;\n    u8_t value[0];\n} __packed;\n\n/* Handle Value Indication */\n#define BT_ATT_OP_INDICATE 0x1d\nstruct bt_att_indicate {\n    u16_t handle;\n    u8_t value[0];\n} __packed;\n\n/* Handle Value Confirm */\n#define BT_ATT_OP_CONFIRM 0x1e\n\nstruct bt_att_signature {\n    u8_t value[12];\n} __packed;\n\n/* Write Command */\n#define BT_ATT_OP_WRITE_CMD 0x52\nstruct bt_att_write_cmd {\n    u16_t handle;\n    u8_t value[0];\n} __packed;\n\n/* Signed Write Command */\n#define BT_ATT_OP_SIGNED_WRITE_CMD 0xd2\nstruct bt_att_signed_write_cmd {\n    u16_t handle;\n    u8_t value[0];\n} __packed;\n\nvoid att_pdu_sent(struct bt_conn *conn, void *user_data);\n\nvoid att_cfm_sent(struct bt_conn *conn, void *user_data);\n\nvoid att_rsp_sent(struct bt_conn *conn, void *user_data);\n\nvoid att_req_sent(struct bt_conn *conn, void *user_data);\n\nvoid bt_att_init(void);\nu16_t bt_att_get_mtu(struct bt_conn *conn);\n\n#if defined(CONFIG_BLE_AT_CMD)\nvoid set_mtu_size(u16_t size);\n#endif\n\nstruct net_buf *bt_att_create_pdu(struct bt_conn *conn, u8_t op,\n                                  size_t len);\n\n/* Send ATT PDU over a connection */\nint bt_att_send(struct bt_conn *conn, struct net_buf *buf, bt_conn_tx_cb_t cb,\n                void *user_data);\n\n/* Send ATT Request over a connection */\nint bt_att_req_send(struct bt_conn *conn, struct bt_att_req *req);\n\n/* Cancel ATT request */\nvoid bt_att_req_cancel(struct bt_conn *conn, struct bt_att_req *req);\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/avdtp_internal.h",
    "content": "/*\n * avdtp_internal.h - avdtp handling\n\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <avdtp.h>\n\n/* @brief A2DP ROLE's */\n#define A2DP_SRC_ROLE 0x00\n#define A2DP_SNK_ROLE 0x01\n\n/* @brief AVDTP Role */\n#define BT_AVDTP_INT 0x00\n#define BT_AVDTP_ACP 0x01\n\n#define BT_L2CAP_PSM_AVDTP 0x0019\n\n/* AVDTP SIGNAL HEADER - Packet Type*/\n#define BT_AVDTP_PACKET_TYPE_SINGLE   0x00\n#define BT_AVDTP_PACKET_TYPE_START    0x01\n#define BT_AVDTP_PACKET_TYPE_CONTINUE 0x02\n#define BT_AVDTP_PACKET_TYPE_END      0x03\n\n/* AVDTP SIGNAL HEADER - MESSAGE TYPE */\n#define BT_AVDTP_CMD        0x00\n#define BT_AVDTP_GEN_REJECT 0x01\n#define BT_AVDTP_ACCEPT     0x02\n#define BT_AVDTP_REJECT     0x03\n\n/* @brief AVDTP SIGNAL HEADER - Signal Identifier */\n#define BT_AVDTP_DISCOVER             0x01\n#define BT_AVDTP_GET_CAPABILITIES     0x02\n#define BT_AVDTP_SET_CONFIGURATION    0x03\n#define BT_AVDTP_GET_CONFIGURATION    0x04\n#define BT_AVDTP_RECONFIGURE          0x05\n#define BT_AVDTP_OPEN                 0x06\n#define BT_AVDTP_START                0x07\n#define BT_AVDTP_CLOSE                0x08\n#define BT_AVDTP_SUSPEND              0x09\n#define BT_AVDTP_ABORT                0x0a\n#define BT_AVDTP_SECURITY_CONTROL     0x0b\n#define BT_AVDTP_GET_ALL_CAPABILITIES 0x0c\n#define BT_AVDTP_DELAYREPORT          0x0d\n\n/* @brief AVDTP STREAM STATE */\n#define BT_AVDTP_STREAM_STATE_IDLE       0x01\n#define BT_AVDTP_STREAM_STATE_CONFIGURED 0x02\n#define BT_AVDTP_STREAM_STATE_OPEN       0x03\n#define BT_AVDTP_STREAM_STATE_STREAMING  0x04\n#define BT_AVDTP_STREAM_STATE_CLOSING    0x05\n\n/* @brief AVDTP Media TYPE */\n#define BT_AVDTP_SERVICE_CAT_MEDIA_TRANSPORT    0x01\n#define BT_AVDTP_SERVICE_CAT_REPORTING          0x02\n#define BT_AVDTP_SERVICE_CAT_RECOVERY           0x03\n#define BT_AVDTP_SERVICE_CAT_CONTENT_PROTECTION 0x04\n#define BT_AVDTP_SERVICE_CAT_HDR_COMPRESSION    0x05\n#define BT_AVDTP_SERVICE_CAT_MULTIPLEXING       0x06\n#define BT_AVDTP_SERVICE_CAT_MEDIA_CODEC        0x07\n#define BT_AVDTP_SERVICE_CAT_DELAYREPORTING     0x08\n\n/* @brief AVDTP Content Protection Capabilities */\n#define BT_AVDTP_CONTENT_PROTECTION_MSB        0x00\n#define BT_AVDTP_CONTENT_PROTECTION_LSB_DTCP   0x01\n#define BT_AVDTP_CONTENT_PROTECTION_LSB_SCMS_T 0x02\n\n/* AVDTP Error Codes */\n#define BT_AVDTP_SUCCESS                        0x00\n#define BT_AVDTP_ERR_BAD_HDR_FORMAT             0x01\n#define BT_AVDTP_ERR_BAD_LENGTH                 0x11\n#define BT_AVDTP_ERR_BAD_ACP_SEID               0x12\n#define BT_AVDTP_ERR_SEP_IN_USE                 0x13\n#define BT_AVDTP_ERR_SEP_NOT_IN_USE             0x14\n#define BT_AVDTP_ERR_BAD_SERV_CATEGORY          0x17\n#define BT_AVDTP_ERR_BAD_PAYLOAD_FORMAT         0x18\n#define BT_AVDTP_ERR_NOT_SUPPORTED_COMMAND      0x19\n#define BT_AVDTP_ERR_INVALID_CAPABILITIES       0x1a\n#define BT_AVDTP_ERR_BAD_RECOVERY_TYPE          0x22\n#define BT_AVDTP_ERR_BAD_MEDIA_TRANSPORT_FORMAT 0x23\n#define BT_AVDTP_ERR_BAD_RECOVERY_FORMAT        0x25\n#define BT_AVDTP_ERR_BAD_ROHC_FORMAT            0x26\n#define BT_AVDTP_ERR_BAD_CP_FORMAT              0x27\n#define BT_AVDTP_ERR_BAD_MULTIPLEXING_FORMAT    0x28\n#define BT_AVDTP_ERR_UNSUPPORTED_CONFIGURAION   0x29\n#define BT_AVDTP_ERR_BAD_STATE                  0x31\n\n#define BT_AVDTP_MAX_MTU CONFIG_BT_L2CAP_RX_MTU\n\n#define BT_AVDTP_MIN_SEID 0x01\n#define BT_AVDTP_MAX_SEID 0x3E\n\nstruct bt_avdtp;\nstruct bt_avdtp_req;\n\ntypedef int (*bt_avdtp_func_t)(struct bt_avdtp *session,\n                               struct bt_avdtp_req *req);\n\nstruct bt_avdtp_req {\n    uint8_t sig;\n    uint8_t tid;\n    bt_avdtp_func_t func;\n    struct k_delayed_work timeout_work;\n};\n\nstruct bt_avdtp_single_sig_hdr {\n    uint8_t hdr;\n    uint8_t signal_id;\n} __packed;\n\n#define BT_AVDTP_SIG_HDR_LEN sizeof(struct bt_avdtp_single_sig_hdr)\n\nstruct bt_avdtp_ind_cb {\n    /*\n\t * discovery_ind;\n\t * get_capabilities_ind;\n\t * set_configuration_ind;\n\t * open_ind;\n\t * start_ind;\n\t * suspend_ind;\n\t * close_ind;\n\t */\n};\n\nstruct bt_avdtp_cap {\n    uint8_t cat;\n    uint8_t len;\n    uint8_t data[0];\n};\n\nstruct bt_avdtp_sep {\n    uint8_t seid;\n    uint8_t len;\n    struct bt_avdtp_cap caps[0];\n};\n\nstruct bt_avdtp_discover_params {\n    struct bt_avdtp_req req;\n    uint8_t status;\n    struct bt_avdtp_sep *caps;\n};\n\n/** @brief Global AVDTP session structure. */\nstruct bt_avdtp {\n    struct bt_l2cap_br_chan br_chan;\n    struct bt_avdtp_stream *streams; /* List of AV streams */\n    struct bt_avdtp_req *req;\n};\n\nstruct bt_avdtp_event_cb {\n    struct bt_avdtp_ind_cb *ind;\n    int (*accept)(struct bt_conn *conn, struct bt_avdtp **session);\n};\n\n/* Initialize AVDTP layer*/\nint bt_avdtp_init(void);\n\n/* Application register with AVDTP layer */\nint bt_avdtp_register(struct bt_avdtp_event_cb *cb);\n\n/* AVDTP connect */\nint bt_avdtp_connect(struct bt_conn *conn, struct bt_avdtp *session);\n\n/* AVDTP disconnect */\nint bt_avdtp_disconnect(struct bt_avdtp *session);\n\n/* AVDTP SEP register function */\nint bt_avdtp_register_sep(uint8_t media_type, uint8_t role,\n                          struct bt_avdtp_seid_lsep *sep);\n\n/* AVDTP Discover Request */\nint bt_avdtp_discover(struct bt_avdtp *session,\n                      struct bt_avdtp_discover_params *param);\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/conn.c",
    "content": "/* conn.c - Bluetooth connection handling */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <atomic.h>\n#include <errno.h>\n#include <misc/__assert.h>\n#include <misc/byteorder.h>\n#include <misc/slist.h>\n#include <misc/stack.h>\n#include <misc/util.h>\n#include <stdbool.h>\n#include <string.h>\n#include <zephyr.h>\n\n#include <hci_host.h>\n\n#include <bluetooth.h>\n#include <conn.h>\n#include <hci_driver.h>\n\n#include <att.h>\n\n#define BT_DBG_ENABLED  IS_ENABLED(CONFIG_BT_DEBUG_CONN)\n#define LOG_MODULE_NAME bt_conn\n#include \"log.h\"\n\n#include \"hci_core.h\"\n\n#include \"conn_internal.h\"\n#include \"keys.h\"\n#include \"l2cap_internal.h\"\n#include \"smp.h\"\n\n#include \"att_internal.h\"\n#include \"gatt_internal.h\"\n#if defined(BFLB_BLE)\n#include \"ble_config.h\"\n\nextern struct k_sem g_poll_sem;\n#endif\nstruct tx_meta {\n  struct bt_conn_tx *tx;\n};\n\n#define tx_data(buf) ((struct tx_meta *)net_buf_user_data(buf))\n\n#if !defined(BFLB_DYNAMIC_ALLOC_MEM)\nNET_BUF_POOL_DEFINE(acl_tx_pool, CONFIG_BT_L2CAP_TX_BUF_COUNT, BT_L2CAP_BUF_SIZE(CONFIG_BT_L2CAP_TX_MTU), sizeof(struct tx_meta), NULL);\n#else\nstruct net_buf_pool acl_tx_pool;\n#endif\n\n#if CONFIG_BT_L2CAP_TX_FRAG_COUNT > 0\n\n#if defined(BT_CTLR_TX_BUFFER_SIZE)\n#define FRAG_SIZE BT_L2CAP_BUF_SIZE(BT_CTLR_TX_BUFFER_SIZE - 4)\n#else\n#define FRAG_SIZE BT_L2CAP_BUF_SIZE(CONFIG_BT_L2CAP_TX_MTU)\n#endif\n\n#if !defined(BFLB_DYNAMIC_ALLOC_MEM)\n/* Dedicated pool for fragment buffers in case queued up TX buffers don't\n * fit the controllers buffer size. We can't use the acl_tx_pool for the\n * fragmentation, since it's possible that pool is empty and all buffers\n * are queued up in the TX queue. In such a situation, trying to allocate\n * another buffer from the acl_tx_pool would result in a deadlock.\n */\nNET_BUF_POOL_FIXED_DEFINE(frag_pool, CONFIG_BT_L2CAP_TX_FRAG_COUNT, FRAG_SIZE, NULL);\n#else\nstruct net_buf_pool frag_pool;\n#endif\n#endif /* CONFIG_BT_L2CAP_TX_FRAG_COUNT > 0 */\n\n/* How long until we cancel HCI_LE_Create_Connection */\n#define CONN_TIMEOUT K_SECONDS(CONFIG_BT_CREATE_CONN_TIMEOUT)\n\n#if defined(CONFIG_BT_SMP) || defined(CONFIG_BT_BREDR)\nconst struct bt_conn_auth_cb *bt_auth;\n#endif /* CONFIG_BT_SMP || CONFIG_BT_BREDR */\n\nstatic struct bt_conn     conns[CONFIG_BT_MAX_CONN];\nstatic struct bt_conn_cb *callback_list;\n\nstatic struct bt_conn_tx conn_tx[CONFIG_BT_CONN_TX_MAX];\nK_FIFO_DEFINE(free_tx);\n\n#if defined(CONFIG_BT_BREDR)\nstatic struct bt_conn sco_conns[CONFIG_BT_MAX_SCO_CONN];\n\nenum pairing_method {\n  LEGACY,          /* Legacy (pre-SSP) pairing */\n  JUST_WORKS,      /* JustWorks pairing */\n  PASSKEY_INPUT,   /* Passkey Entry input */\n  PASSKEY_DISPLAY, /* Passkey Entry display */\n  PASSKEY_CONFIRM, /* Passkey confirm */\n};\n\n/* based on table 5.7, Core Spec 4.2, Vol.3 Part C, 5.2.2.6 */\nstatic const u8_t ssp_method[4 /* remote */][4 /* local */] = {\n    {     JUST_WORKS,      JUST_WORKS, PASSKEY_INPUT, JUST_WORKS},\n    {     JUST_WORKS, PASSKEY_CONFIRM, PASSKEY_INPUT, JUST_WORKS},\n    {PASSKEY_DISPLAY, PASSKEY_DISPLAY, PASSKEY_INPUT, JUST_WORKS},\n    {     JUST_WORKS,      JUST_WORKS,    JUST_WORKS, JUST_WORKS},\n};\n#endif /* CONFIG_BT_BREDR */\n\nstruct k_sem *bt_conn_get_pkts(struct bt_conn *conn) {\n#if defined(CONFIG_BT_BREDR)\n  if (conn->type == BT_CONN_TYPE_BR || !bt_dev.le.mtu) {\n    return &bt_dev.br.pkts;\n  }\n#endif /* CONFIG_BT_BREDR */\n\n  return &bt_dev.le.pkts;\n}\n\nstatic inline const char *state2str(bt_conn_state_t state) {\n  switch (state) {\n  case BT_CONN_DISCONNECTED:\n    return \"disconnected\";\n  case BT_CONN_CONNECT_SCAN:\n    return \"connect-scan\";\n  case BT_CONN_CONNECT_DIR_ADV:\n    return \"connect-dir-adv\";\n  case BT_CONN_CONNECT:\n    return \"connect\";\n  case BT_CONN_CONNECTED:\n    return \"connected\";\n  case BT_CONN_DISCONNECT:\n    return \"disconnect\";\n  default:\n    return \"(unknown)\";\n  }\n}\n\nstatic void notify_connected(struct bt_conn *conn) {\n  struct bt_conn_cb *cb;\n\n#if defined(CONFIG_BT_BREDR)\n  if (conn->type == BT_CONN_TYPE_BR && conn->err) {\n    if (atomic_test_bit(bt_dev.flags, BT_DEV_ISCAN)) {\n      atomic_clear_bit(bt_dev.flags, BT_DEV_ISCAN);\n    }\n    if (atomic_test_bit(bt_dev.flags, BT_DEV_PSCAN)) {\n      atomic_clear_bit(bt_dev.flags, BT_DEV_PSCAN);\n    }\n  }\n#endif\n\n  for (cb = callback_list; cb; cb = cb->_next) {\n    if (cb->connected) {\n      cb->connected(conn, conn->err);\n    }\n  }\n\n  if (conn->type == BT_CONN_TYPE_LE && !conn->err) {\n    bt_gatt_connected(conn);\n  }\n}\n\nvoid notify_disconnected(struct bt_conn *conn) {\n  struct bt_conn_cb *cb;\n\n#if defined(CONFIG_BT_BREDR)\n  if (conn->type == BT_CONN_TYPE_BR) {\n    if (atomic_test_bit(bt_dev.flags, BT_DEV_ISCAN)) {\n      atomic_clear_bit(bt_dev.flags, BT_DEV_ISCAN);\n    }\n    if (atomic_test_bit(bt_dev.flags, BT_DEV_PSCAN)) {\n      atomic_clear_bit(bt_dev.flags, BT_DEV_PSCAN);\n    }\n  }\n#endif\n\n  for (cb = callback_list; cb; cb = cb->_next) {\n    if (cb->disconnected) {\n      cb->disconnected(conn, conn->err);\n    }\n  }\n}\n\nvoid notify_le_param_updated(struct bt_conn *conn) {\n  struct bt_conn_cb *cb;\n\n  /* If new connection parameters meet requirement of pending\n   * parameters don't send slave conn param request anymore on timeout\n   */\n  if (atomic_test_bit(conn->flags, BT_CONN_SLAVE_PARAM_SET) && conn->le.interval >= conn->le.interval_min && conn->le.interval <= conn->le.interval_max &&\n      conn->le.latency == conn->le.pending_latency && conn->le.timeout == conn->le.pending_timeout) {\n    atomic_clear_bit(conn->flags, BT_CONN_SLAVE_PARAM_SET);\n  }\n\n  for (cb = callback_list; cb; cb = cb->_next) {\n    if (cb->le_param_updated) {\n      cb->le_param_updated(conn, conn->le.interval, conn->le.latency, conn->le.timeout);\n    }\n  }\n}\n\nvoid notify_le_phy_updated(struct bt_conn *conn, u8_t tx_phy, u8_t rx_phy) {\n  struct bt_conn_cb *cb;\n\n  for (cb = callback_list; cb; cb = cb->_next) {\n    if (cb->le_phy_updated) {\n      cb->le_phy_updated(conn, tx_phy, rx_phy);\n    }\n  }\n}\n\nbool le_param_req(struct bt_conn *conn, struct bt_le_conn_param *param) {\n  struct bt_conn_cb *cb;\n\n  if (!bt_le_conn_params_valid(param)) {\n    return false;\n  }\n\n  for (cb = callback_list; cb; cb = cb->_next) {\n    if (!cb->le_param_req) {\n      continue;\n    }\n\n    if (!cb->le_param_req(conn, param)) {\n      return false;\n    }\n\n    /* The callback may modify the parameters so we need to\n     * double-check that it returned valid parameters.\n     */\n    if (!bt_le_conn_params_valid(param)) {\n      return false;\n    }\n  }\n\n  /* Default to accepting if there's no app callback */\n  return true;\n}\n\nstatic int send_conn_le_param_update(struct bt_conn *conn, const struct bt_le_conn_param *param) {\n  BT_DBG(\"conn %p features 0x%02x params (%d-%d %d %d)\", conn, conn->le.features[0], param->interval_min, param->interval_max, param->latency, param->timeout);\n\n  /* Use LE connection parameter request if both local and remote support\n   * it; or if local role is master then use LE connection update.\n   */\n  if ((BT_FEAT_LE_CONN_PARAM_REQ_PROC(bt_dev.le.features) && BT_FEAT_LE_CONN_PARAM_REQ_PROC(conn->le.features) && !atomic_test_bit(conn->flags, BT_CONN_SLAVE_PARAM_L2CAP)) ||\n      (conn->role == BT_HCI_ROLE_MASTER)) {\n    int rc;\n\n    rc = bt_conn_le_conn_update(conn, param);\n\n    /* store those in case of fallback to L2CAP */\n    if (rc == 0) {\n      conn->le.pending_latency = param->latency;\n      conn->le.pending_timeout = param->timeout;\n    }\n\n    return rc;\n  }\n\n  /* If remote master does not support LL Connection Parameters Request\n   * Procedure\n   */\n  return bt_l2cap_update_conn_param(conn, param);\n}\n\nstatic void tx_free(struct bt_conn_tx *tx) {\n  tx->cb            = NULL;\n  tx->user_data     = NULL;\n  tx->pending_no_cb = 0U;\n  k_fifo_put(&free_tx, tx);\n}\n\nstatic void tx_notify(struct bt_conn *conn) {\n  BT_DBG(\"conn %p\", conn);\n\n  while (1) {\n    struct bt_conn_tx *tx;\n    unsigned int       key;\n    bt_conn_tx_cb_t    cb;\n    void              *user_data;\n\n    key = irq_lock();\n    if (sys_slist_is_empty(&conn->tx_complete)) {\n      irq_unlock(key);\n      break;\n    }\n\n    tx = (void *)sys_slist_get_not_empty(&conn->tx_complete);\n    irq_unlock(key);\n\n    BT_DBG(\"tx %p cb %p user_data %p\", tx, tx->cb, tx->user_data);\n\n    /* Copy over the params */\n    cb        = tx->cb;\n    user_data = tx->user_data;\n\n    /* Free up TX notify since there may be user waiting */\n    tx_free(tx);\n\n    /* Run the callback, at this point it should be safe to\n     * allocate new buffers since the TX should have been\n     * unblocked by tx_free.\n     */\n    cb(conn, user_data);\n  }\n}\n\nstatic void tx_complete_work(struct k_work *work) {\n  struct bt_conn *conn = CONTAINER_OF(work, struct bt_conn, tx_complete_work);\n\n  BT_DBG(\"conn %p\", conn);\n\n  tx_notify(conn);\n}\n\nstatic void conn_update_timeout(struct k_work *work) {\n  struct bt_conn                *conn = CONTAINER_OF(work, struct bt_conn, update_work);\n  const struct bt_le_conn_param *param;\n\n  BT_DBG(\"conn %p\", conn);\n\n  if (conn->state == BT_CONN_DISCONNECTED) {\n    bt_l2cap_disconnected(conn);\n#if !defined(BFLB_BLE)\n    notify_disconnected(conn);\n#endif\n\n    /* Release the reference we took for the very first\n     * state transition.\n     */\n    bt_conn_unref(conn);\n    return;\n  }\n\n  if (conn->type != BT_CONN_TYPE_LE) {\n    return;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_CENTRAL) && conn->role == BT_CONN_ROLE_MASTER) {\n    /* we don't call bt_conn_disconnect as it would also clear\n     * auto connect flag if it was set, instead just cancel\n     * connection directly\n     */\n    bt_hci_cmd_send_sync(BT_HCI_OP_LE_CREATE_CONN_CANCEL, NULL, NULL);\n    return;\n  }\n\n#if defined(CONFIG_BT_GAP_PERIPHERAL_PREF_PARAMS)\n  /* if application set own params use those, otherwise use defaults */\n  if (atomic_test_and_clear_bit(conn->flags, BT_CONN_SLAVE_PARAM_SET)) {\n    param = BT_LE_CONN_PARAM(conn->le.interval_min, conn->le.interval_max, conn->le.pending_latency, conn->le.pending_timeout);\n\n    send_conn_le_param_update(conn, param);\n  } else {\n    param = BT_LE_CONN_PARAM(CONFIG_BT_PERIPHERAL_PREF_MIN_INT, CONFIG_BT_PERIPHERAL_PREF_MAX_INT, CONFIG_BT_PERIPHERAL_PREF_SLAVE_LATENCY, CONFIG_BT_PERIPHERAL_PREF_TIMEOUT);\n\n    send_conn_le_param_update(conn, param);\n  }\n#else\n  /* update only if application set own params */\n  if (atomic_test_and_clear_bit(conn->flags, BT_CONN_SLAVE_PARAM_SET)) {\n    param = BT_LE_CONN_PARAM(conn->le.interval_min, conn->le.interval_max, conn->le.latency, conn->le.timeout);\n\n    send_conn_le_param_update(conn, param);\n  }\n#endif\n\n  atomic_set_bit(conn->flags, BT_CONN_SLAVE_PARAM_UPDATE);\n}\n\n#if defined(CONFIG_BT_AUDIO)\nstruct bt_conn *iso_conn_new(struct bt_conn *conns, size_t size) {\n  struct bt_conn *conn = NULL;\n  int             i;\n\n  for (i = 0; i < size; i++) {\n    if (atomic_cas(&conns[i].ref, 0, 1)) {\n      conn = &conns[i];\n      break;\n    }\n  }\n\n  if (!conn) {\n    return NULL;\n  }\n\n  (void)memset(conn, 0, offsetof(struct bt_conn, ref));\n\n  return conn;\n}\n#endif\n\nstatic struct bt_conn *conn_new(void) {\n  struct bt_conn *conn = NULL;\n  int             i;\n\n  for (i = 0; i < ARRAY_SIZE(conns); i++) {\n    if (!atomic_get(&conns[i].ref)) {\n      conn = &conns[i];\n      break;\n    }\n  }\n\n  if (!conn) {\n    return NULL;\n  }\n\n  (void)memset(conn, 0, sizeof(*conn));\n  k_delayed_work_init(&conn->update_work, conn_update_timeout);\n\n  k_work_init(&conn->tx_complete_work, tx_complete_work);\n\n  atomic_set(&conn->ref, 1);\n\n  return conn;\n}\n\n#if defined(BFLB_BLE)\nbool le_check_valid_conn(void) {\n  int i;\n\n  for (i = 0; i < ARRAY_SIZE(conns); i++) {\n    if (atomic_get(&conns[i].ref)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n#if defined(BFLB_HOST_ASSISTANT)\nvoid bt_notify_disconnected(void) {\n  int i;\n\n  for (i = 0; i < ARRAY_SIZE(conns); i++) {\n    if (atomic_get(&conns[i].ref)) {\n      conns[i].err = BT_HCI_ERR_UNSPECIFIED;\n      notify_disconnected(&conns[i]);\n    }\n  }\n}\n#endif // #if defined(BFLB_HOST_ASSISTANT)\n#endif\n\n#if defined(CONFIG_BT_BREDR)\nvoid bt_sco_cleanup(struct bt_conn *sco_conn) {\n  bt_conn_unref(sco_conn->sco.acl);\n  sco_conn->sco.acl = NULL;\n  bt_conn_unref(sco_conn);\n}\n\nstatic struct bt_conn *sco_conn_new(void) {\n  struct bt_conn *sco_conn = NULL;\n  int             i;\n\n  for (i = 0; i < ARRAY_SIZE(sco_conns); i++) {\n    if (!atomic_get(&sco_conns[i].ref)) {\n      sco_conn = &sco_conns[i];\n      break;\n    }\n  }\n\n  if (!sco_conn) {\n    return NULL;\n  }\n\n  (void)memset(sco_conn, 0, sizeof(*sco_conn));\n\n  atomic_set(&sco_conn->ref, 1);\n\n  return sco_conn;\n}\n\nstruct bt_conn *bt_conn_create_br(const bt_addr_t *peer, const struct bt_br_conn_param *param) {\n  struct bt_hci_cp_connect *cp;\n  struct bt_conn           *conn;\n  struct net_buf           *buf;\n\n  conn = bt_conn_lookup_addr_br(peer);\n  if (conn) {\n    switch (conn->state) {\n    case BT_CONN_CONNECT:\n    case BT_CONN_CONNECTED:\n      return conn;\n    default:\n      bt_conn_unref(conn);\n      return NULL;\n    }\n  }\n\n  conn = bt_conn_add_br(peer);\n  if (!conn) {\n    return NULL;\n  }\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_CONNECT, sizeof(*cp));\n  if (!buf) {\n    bt_conn_unref(conn);\n    return NULL;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n\n  (void)memset(cp, 0, sizeof(*cp));\n\n  memcpy(&cp->bdaddr, peer, sizeof(cp->bdaddr));\n  cp->packet_type       = sys_cpu_to_le16(0xcc18); /* DM1 DH1 DM3 DH5 DM5 DH5 */\n  cp->pscan_rep_mode    = 0x02;                    /* R2 */\n  cp->allow_role_switch = param->allow_role_switch ? 0x01 : 0x00;\n  cp->clock_offset      = 0x0000; /* TODO used cached clock offset */\n\n  if (bt_hci_cmd_send_sync(BT_HCI_OP_CONNECT, buf, NULL) < 0) {\n    bt_conn_unref(conn);\n    return NULL;\n  }\n\n  bt_conn_set_state(conn, BT_CONN_CONNECT);\n  conn->role = BT_CONN_ROLE_MASTER;\n\n  bt_conn_unref(conn);\n  return conn;\n}\n\nstruct bt_conn *bt_conn_create_sco(const bt_addr_t *peer) {\n  struct bt_hci_cp_setup_sync_conn *cp;\n  struct bt_conn                   *sco_conn;\n  struct net_buf                   *buf;\n  int                               link_type;\n\n  sco_conn = bt_conn_lookup_addr_sco(peer);\n  if (sco_conn) {\n    switch (sco_conn->state) {\n    case BT_CONN_CONNECT:\n    case BT_CONN_CONNECTED:\n      return sco_conn;\n    default:\n      bt_conn_unref(sco_conn);\n      return NULL;\n    }\n  }\n\n  if (BT_FEAT_LMP_ESCO_CAPABLE(bt_dev.features)) {\n    link_type = BT_HCI_ESCO;\n  } else {\n    link_type = BT_HCI_SCO;\n  }\n\n  sco_conn = bt_conn_add_sco(peer, link_type);\n  if (!sco_conn) {\n    return NULL;\n  }\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_SETUP_SYNC_CONN, sizeof(*cp));\n  if (!buf) {\n    bt_sco_cleanup(sco_conn);\n    return NULL;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n\n  (void)memset(cp, 0, sizeof(*cp));\n\n  BT_ERR(\"handle : %x\", sco_conn->sco.acl->handle);\n\n  cp->handle         = sco_conn->sco.acl->handle;\n  cp->pkt_type       = sco_conn->sco.pkt_type;\n  cp->tx_bandwidth   = 0x00001f40;\n  cp->rx_bandwidth   = 0x00001f40;\n  cp->max_latency    = 0x0007;\n  cp->retrans_effort = 0x01;\n  cp->content_format = BT_VOICE_CVSD_16BIT;\n\n  if (bt_hci_cmd_send_sync(BT_HCI_OP_SETUP_SYNC_CONN, buf, NULL) < 0) {\n    bt_sco_cleanup(sco_conn);\n    return NULL;\n  }\n\n  bt_conn_set_state(sco_conn, BT_CONN_CONNECT);\n\n  return sco_conn;\n}\n\nstruct bt_conn *bt_conn_lookup_addr_sco(const bt_addr_t *peer) {\n  int i;\n\n  for (i = 0; i < ARRAY_SIZE(sco_conns); i++) {\n    if (!atomic_get(&sco_conns[i].ref)) {\n      continue;\n    }\n\n    if (sco_conns[i].type != BT_CONN_TYPE_SCO) {\n      continue;\n    }\n\n    if (!bt_addr_cmp(peer, &sco_conns[i].sco.acl->br.dst)) {\n      return bt_conn_ref(&sco_conns[i]);\n    }\n  }\n\n  return NULL;\n}\n\nstruct bt_conn *bt_conn_lookup_addr_br(const bt_addr_t *peer) {\n  int i;\n\n  for (i = 0; i < ARRAY_SIZE(conns); i++) {\n    if (!atomic_get(&conns[i].ref)) {\n      continue;\n    }\n\n    if (conns[i].type != BT_CONN_TYPE_BR) {\n      continue;\n    }\n\n    if (!bt_addr_cmp(peer, &conns[i].br.dst)) {\n      return bt_conn_ref(&conns[i]);\n    }\n  }\n\n  return NULL;\n}\n\nstruct bt_conn *bt_conn_add_sco(const bt_addr_t *peer, int link_type) {\n  struct bt_conn *sco_conn = sco_conn_new();\n\n  if (!sco_conn) {\n    return NULL;\n  }\n\n  sco_conn->sco.acl = bt_conn_lookup_addr_br(peer);\n  sco_conn->type    = BT_CONN_TYPE_SCO;\n\n  if (link_type == BT_HCI_SCO) {\n    if (BT_FEAT_LMP_ESCO_CAPABLE(bt_dev.features)) {\n      sco_conn->sco.pkt_type = (bt_dev.br.esco_pkt_type & ESCO_PKT_MASK);\n    } else {\n      sco_conn->sco.pkt_type = (bt_dev.br.esco_pkt_type & SCO_PKT_MASK);\n    }\n  } else if (link_type == BT_HCI_ESCO) {\n    sco_conn->sco.pkt_type = (bt_dev.br.esco_pkt_type & ~EDR_ESCO_PKT_MASK);\n  }\n\n  return sco_conn;\n}\n\nstruct bt_conn *bt_conn_add_br(const bt_addr_t *peer) {\n  struct bt_conn *conn = conn_new();\n\n  if (!conn) {\n    return NULL;\n  }\n\n  bt_addr_copy(&conn->br.dst, peer);\n  conn->type = BT_CONN_TYPE_BR;\n\n  return conn;\n}\n\nstatic int pin_code_neg_reply(const bt_addr_t *bdaddr) {\n  struct bt_hci_cp_pin_code_neg_reply *cp;\n  struct net_buf                      *buf;\n\n  BT_DBG(\"\");\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_PIN_CODE_NEG_REPLY, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  bt_addr_copy(&cp->bdaddr, bdaddr);\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_PIN_CODE_NEG_REPLY, buf, NULL);\n}\n\nstatic int pin_code_reply(struct bt_conn *conn, const char *pin, u8_t len) {\n  struct bt_hci_cp_pin_code_reply *cp;\n  struct net_buf                  *buf;\n\n  BT_DBG(\"\");\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_PIN_CODE_REPLY, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n\n  bt_addr_copy(&cp->bdaddr, &conn->br.dst);\n  cp->pin_len = len;\n  strncpy((char *)cp->pin_code, pin, sizeof(cp->pin_code));\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_PIN_CODE_REPLY, buf, NULL);\n}\n\nint bt_conn_auth_pincode_entry(struct bt_conn *conn, const char *pin) {\n  size_t len;\n\n  if (!bt_auth) {\n    return -EINVAL;\n  }\n\n  if (conn->type != BT_CONN_TYPE_BR) {\n    return -EINVAL;\n  }\n\n  len = strlen(pin);\n  if (len > 16) {\n    return -EINVAL;\n  }\n\n  if (conn->required_sec_level == BT_SECURITY_L3 && len < 16) {\n    BT_WARN(\"PIN code for %s is not 16 bytes wide\", bt_addr_str(&conn->br.dst));\n    return -EPERM;\n  }\n\n  /* Allow user send entered PIN to remote, then reset user state. */\n  if (!atomic_test_and_clear_bit(conn->flags, BT_CONN_USER)) {\n    return -EPERM;\n  }\n\n  if (len == 16) {\n    atomic_set_bit(conn->flags, BT_CONN_BR_LEGACY_SECURE);\n  }\n\n  return pin_code_reply(conn, pin, len);\n}\n\nvoid bt_conn_pin_code_req(struct bt_conn *conn) {\n  if (bt_auth && bt_auth->pincode_entry) {\n    bool secure = false;\n\n    if (conn->required_sec_level == BT_SECURITY_L3) {\n      secure = true;\n    }\n\n    atomic_set_bit(conn->flags, BT_CONN_USER);\n    atomic_set_bit(conn->flags, BT_CONN_BR_PAIRING);\n    bt_auth->pincode_entry(conn, secure);\n  } else {\n    pin_code_neg_reply(&conn->br.dst);\n  }\n}\n\nu8_t bt_conn_get_io_capa(void) {\n  if (!bt_auth) {\n    return BT_IO_NO_INPUT_OUTPUT;\n  }\n\n  if (bt_auth->passkey_confirm && bt_auth->passkey_display) {\n    return BT_IO_DISPLAY_YESNO;\n  }\n\n  if (bt_auth->passkey_entry) {\n    return BT_IO_KEYBOARD_ONLY;\n  }\n\n  if (bt_auth->passkey_display) {\n    return BT_IO_DISPLAY_ONLY;\n  }\n\n  return BT_IO_NO_INPUT_OUTPUT;\n}\n\nstatic u8_t ssp_pair_method(const struct bt_conn *conn) { return ssp_method[conn->br.remote_io_capa][bt_conn_get_io_capa()]; }\n\nu8_t bt_conn_ssp_get_auth(const struct bt_conn *conn) {\n  /* Validate no bond auth request, and if valid use it. */\n  if ((conn->br.remote_auth == BT_HCI_NO_BONDING) || ((conn->br.remote_auth == BT_HCI_NO_BONDING_MITM) && (ssp_pair_method(conn) > JUST_WORKS))) {\n    return conn->br.remote_auth;\n  }\n\n  /* Local & remote have enough IO capabilities to get MITM protection. */\n  if (ssp_pair_method(conn) > JUST_WORKS) {\n    return conn->br.remote_auth | BT_MITM;\n  }\n\n  /* No MITM protection possible so ignore remote MITM requirement. */\n  return (conn->br.remote_auth & ~BT_MITM);\n}\n\nstatic int ssp_confirm_reply(struct bt_conn *conn) {\n  struct bt_hci_cp_user_confirm_reply *cp;\n  struct net_buf                      *buf;\n\n  BT_DBG(\"\");\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_USER_CONFIRM_REPLY, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  bt_addr_copy(&cp->bdaddr, &conn->br.dst);\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_USER_CONFIRM_REPLY, buf, NULL);\n}\n\nstatic int ssp_confirm_neg_reply(struct bt_conn *conn) {\n  struct bt_hci_cp_user_confirm_reply *cp;\n  struct net_buf                      *buf;\n\n  BT_DBG(\"\");\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_USER_CONFIRM_NEG_REPLY, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  bt_addr_copy(&cp->bdaddr, &conn->br.dst);\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_USER_CONFIRM_NEG_REPLY, buf, NULL);\n}\n\nvoid bt_conn_ssp_auth_complete(struct bt_conn *conn, u8_t status) {\n  if (!status) {\n    bool bond = !atomic_test_bit(conn->flags, BT_CONN_BR_NOBOND);\n\n    if (bt_auth && bt_auth->pairing_complete) {\n      bt_auth->pairing_complete(conn, bond);\n    }\n  } else {\n    if (bt_auth && bt_auth->pairing_failed) {\n      bt_auth->pairing_failed(conn, status);\n    }\n  }\n}\n\nvoid bt_conn_ssp_auth(struct bt_conn *conn, u32_t passkey) {\n  conn->br.pairing_method = ssp_pair_method(conn);\n\n  /*\n   * If local required security is HIGH then MITM is mandatory.\n   * MITM protection is no achievable when SSP 'justworks' is applied.\n   */\n  if (conn->required_sec_level > BT_SECURITY_L2 && conn->br.pairing_method == JUST_WORKS) {\n    BT_DBG(\"MITM protection infeasible for required security\");\n    ssp_confirm_neg_reply(conn);\n    return;\n  }\n\n  switch (conn->br.pairing_method) {\n  case PASSKEY_CONFIRM:\n    atomic_set_bit(conn->flags, BT_CONN_USER);\n    bt_auth->passkey_confirm(conn, passkey);\n    break;\n  case PASSKEY_DISPLAY:\n    atomic_set_bit(conn->flags, BT_CONN_USER);\n    bt_auth->passkey_display(conn, passkey);\n    break;\n  case PASSKEY_INPUT:\n    atomic_set_bit(conn->flags, BT_CONN_USER);\n    bt_auth->passkey_entry(conn);\n    break;\n  case JUST_WORKS:\n    /*\n     * When local host works as pairing acceptor and 'justworks'\n     * model is applied then notify user about such pairing request.\n     * [BT Core 4.2 table 5.7, Vol 3, Part C, 5.2.2.6]\n     */\n    if (bt_auth && bt_auth->pairing_confirm && !atomic_test_bit(conn->flags, BT_CONN_BR_PAIRING_INITIATOR)) {\n      atomic_set_bit(conn->flags, BT_CONN_USER);\n      bt_auth->pairing_confirm(conn);\n      break;\n    }\n    ssp_confirm_reply(conn);\n    break;\n  default:\n    break;\n  }\n}\n\nstatic int ssp_passkey_reply(struct bt_conn *conn, unsigned int passkey) {\n  struct bt_hci_cp_user_passkey_reply *cp;\n  struct net_buf                      *buf;\n\n  BT_DBG(\"\");\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_USER_PASSKEY_REPLY, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  bt_addr_copy(&cp->bdaddr, &conn->br.dst);\n  cp->passkey = sys_cpu_to_le32(passkey);\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_USER_PASSKEY_REPLY, buf, NULL);\n}\n\nstatic int ssp_passkey_neg_reply(struct bt_conn *conn) {\n  struct bt_hci_cp_user_passkey_neg_reply *cp;\n  struct net_buf                          *buf;\n\n  BT_DBG(\"\");\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_USER_PASSKEY_NEG_REPLY, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  bt_addr_copy(&cp->bdaddr, &conn->br.dst);\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_USER_PASSKEY_NEG_REPLY, buf, NULL);\n}\n\nstatic int bt_hci_connect_br_cancel(struct bt_conn *conn) {\n  struct bt_hci_cp_connect_cancel *cp;\n  struct bt_hci_rp_connect_cancel *rp;\n  struct net_buf                  *buf, *rsp;\n  int                              err;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_CONNECT_CANCEL, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  memcpy(&cp->bdaddr, &conn->br.dst, sizeof(cp->bdaddr));\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_CONNECT_CANCEL, buf, &rsp);\n  if (err) {\n    return err;\n  }\n\n  rp = (void *)rsp->data;\n\n  err = rp->status ? -EIO : 0;\n\n  net_buf_unref(rsp);\n\n  return err;\n}\n\nstatic int conn_auth(struct bt_conn *conn) {\n  struct bt_hci_cp_auth_requested *auth;\n  struct net_buf                  *buf;\n\n  BT_DBG(\"\");\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_AUTH_REQUESTED, sizeof(*auth));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  auth         = net_buf_add(buf, sizeof(*auth));\n  auth->handle = sys_cpu_to_le16(conn->handle);\n\n  atomic_set_bit(conn->flags, BT_CONN_BR_PAIRING_INITIATOR);\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_AUTH_REQUESTED, buf, NULL);\n}\n#endif /* CONFIG_BT_BREDR */\n\n#if defined(CONFIG_BT_SMP)\nvoid bt_conn_identity_resolved(struct bt_conn *conn) {\n  const bt_addr_le_t *rpa;\n  struct bt_conn_cb  *cb;\n\n  if (conn->role == BT_HCI_ROLE_MASTER) {\n    rpa = &conn->le.resp_addr;\n  } else {\n    rpa = &conn->le.init_addr;\n  }\n\n  for (cb = callback_list; cb; cb = cb->_next) {\n    if (cb->identity_resolved) {\n      cb->identity_resolved(conn, rpa, &conn->le.dst);\n    }\n  }\n}\n\nint bt_conn_le_start_encryption(struct bt_conn *conn, u8_t rand[8], u8_t ediv[2], const u8_t *ltk, size_t len) {\n  struct bt_hci_cp_le_start_encryption *cp;\n  struct net_buf                       *buf;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_START_ENCRYPTION, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp         = net_buf_add(buf, sizeof(*cp));\n  cp->handle = sys_cpu_to_le16(conn->handle);\n  memcpy(&cp->rand, rand, sizeof(cp->rand));\n  memcpy(&cp->ediv, ediv, sizeof(cp->ediv));\n\n  memcpy(cp->ltk, ltk, len);\n  if (len < sizeof(cp->ltk)) {\n    (void)memset(cp->ltk + len, 0, sizeof(cp->ltk) - len);\n  }\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_LE_START_ENCRYPTION, buf, NULL);\n}\n#endif /* CONFIG_BT_SMP */\n\n#if defined(CONFIG_BT_SMP) || defined(CONFIG_BT_BREDR)\nu8_t bt_conn_enc_key_size(struct bt_conn *conn) {\n  // GATT/SR/GAR/BV-04-C\n  //  if the connection instance is valid\n  if (!conn) {\n    return 0;\n  }\n\n  if (!conn->encrypt) {\n    return 0;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_BREDR) && conn->type == BT_CONN_TYPE_BR) {\n    struct bt_hci_cp_read_encryption_key_size *cp;\n    struct bt_hci_rp_read_encryption_key_size *rp;\n    struct net_buf                            *buf;\n    struct net_buf                            *rsp;\n    u8_t                                       key_size;\n\n    buf = bt_hci_cmd_create(BT_HCI_OP_READ_ENCRYPTION_KEY_SIZE, sizeof(*cp));\n    if (!buf) {\n      return 0;\n    }\n\n    cp         = net_buf_add(buf, sizeof(*cp));\n    cp->handle = sys_cpu_to_le16(conn->handle);\n\n    if (bt_hci_cmd_send_sync(BT_HCI_OP_READ_ENCRYPTION_KEY_SIZE, buf, &rsp)) {\n      return 0;\n    }\n\n    rp = (void *)rsp->data;\n\n    key_size = rp->status ? 0 : rp->key_size;\n\n    net_buf_unref(rsp);\n\n    return key_size;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_SMP)) {\n    return conn->le.keys ? conn->le.keys->enc_size : 0;\n  }\n\n  return 0;\n}\n\nvoid bt_conn_security_changed(struct bt_conn *conn, enum bt_security_err err) {\n  struct bt_conn_cb *cb;\n\n  for (cb = callback_list; cb; cb = cb->_next) {\n    if (cb->security_changed) {\n      cb->security_changed(conn, conn->sec_level, err);\n    }\n  }\n#if IS_ENABLED(CONFIG_BT_KEYS_OVERWRITE_OLDEST)\n  if (!err && conn->sec_level >= BT_SECURITY_L2) {\n    bt_keys_update_usage(conn->id, bt_conn_get_dst(conn));\n  }\n#endif\n}\n\nstatic int start_security(struct bt_conn *conn) {\n#if defined(CONFIG_BT_BREDR)\n  if (conn->type == BT_CONN_TYPE_BR) {\n    if (atomic_test_bit(conn->flags, BT_CONN_BR_PAIRING)) {\n      return -EBUSY;\n    }\n\n    if (conn->required_sec_level > BT_SECURITY_L3) {\n      return -ENOTSUP;\n    }\n\n    if (bt_conn_get_io_capa() == BT_IO_NO_INPUT_OUTPUT && conn->required_sec_level > BT_SECURITY_L2) {\n      return -EINVAL;\n    }\n\n    return conn_auth(conn);\n  }\n#endif /* CONFIG_BT_BREDR */\n\n  if (IS_ENABLED(CONFIG_BT_SMP)) {\n    return bt_smp_start_security(conn);\n  }\n\n  return -EINVAL;\n}\n\nint bt_conn_set_security(struct bt_conn *conn, bt_security_t sec) {\n  int err;\n\n  if (conn->state != BT_CONN_CONNECTED) {\n    return -ENOTCONN;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_SMP_SC_ONLY) && sec < BT_SECURITY_L4) {\n    return -EOPNOTSUPP;\n  }\n\n  /* nothing to do */\n  if (conn->sec_level >= sec || conn->required_sec_level >= sec) {\n    return 0;\n  }\n\n  atomic_set_bit_to(conn->flags, BT_CONN_FORCE_PAIR, sec & BT_SECURITY_FORCE_PAIR);\n  conn->required_sec_level = sec & ~BT_SECURITY_FORCE_PAIR;\n\n  err = start_security(conn);\n\n  /* reset required security level in case of error */\n  if (err) {\n    conn->required_sec_level = conn->sec_level;\n  }\n\n  return err;\n}\n\nbt_security_t bt_conn_get_security(struct bt_conn *conn) { return conn->sec_level; }\n#else\nbt_security_t bt_conn_get_security(struct bt_conn *conn) { return BT_SECURITY_L1; }\n#endif /* CONFIG_BT_SMP */\n\nvoid bt_conn_cb_register(struct bt_conn_cb *cb) {\n  cb->_next     = callback_list;\n  callback_list = cb;\n}\n\nvoid bt_conn_reset_rx_state(struct bt_conn *conn) {\n  if (!conn->rx_len) {\n    return;\n  }\n\n  net_buf_unref(conn->rx);\n  conn->rx     = NULL;\n  conn->rx_len = 0U;\n}\n\nvoid bt_conn_recv(struct bt_conn *conn, struct net_buf *buf, u8_t flags) {\n  struct bt_l2cap_hdr *hdr;\n  u16_t                len;\n\n  /* Make sure we notify any pending TX callbacks before processing\n   * new data for this connection.\n   */\n  tx_notify(conn);\n\n  BT_DBG(\"handle %u len %u flags %02x\", conn->handle, buf->len, flags);\n\n  /* Check packet boundary flags */\n  switch (flags) {\n  case BT_ACL_START:\n    hdr = (void *)buf->data;\n    len = sys_le16_to_cpu(hdr->len);\n\n    BT_DBG(\"First, len %u final %u\", buf->len, len);\n\n    if (conn->rx_len) {\n      BT_ERR(\"Unexpected first L2CAP frame\");\n      bt_conn_reset_rx_state(conn);\n    }\n\n    conn->rx_len = (sizeof(*hdr) + len) - buf->len;\n    BT_DBG(\"rx_len %u\", conn->rx_len);\n    if (conn->rx_len) {\n      conn->rx = buf;\n      return;\n    }\n\n    break;\n  case BT_ACL_CONT:\n    if (!conn->rx_len) {\n      BT_ERR(\"Unexpected L2CAP continuation\");\n      bt_conn_reset_rx_state(conn);\n      net_buf_unref(buf);\n      return;\n    }\n\n    if (buf->len > conn->rx_len) {\n      BT_ERR(\"L2CAP data overflow\");\n      bt_conn_reset_rx_state(conn);\n      net_buf_unref(buf);\n      return;\n    }\n\n    BT_DBG(\"Cont, len %u rx_len %u\", buf->len, conn->rx_len);\n\n    if (buf->len > net_buf_tailroom(conn->rx)) {\n      BT_ERR(\"Not enough buffer space for L2CAP data\");\n      bt_conn_reset_rx_state(conn);\n      net_buf_unref(buf);\n      return;\n    }\n\n    net_buf_add_mem(conn->rx, buf->data, buf->len);\n    conn->rx_len -= buf->len;\n    net_buf_unref(buf);\n\n    if (conn->rx_len) {\n      return;\n    }\n\n    buf          = conn->rx;\n    conn->rx     = NULL;\n    conn->rx_len = 0U;\n\n    break;\n  default:\n    BT_ERR(\"Unexpected ACL flags (0x%02x)\", flags);\n    bt_conn_reset_rx_state(conn);\n    net_buf_unref(buf);\n    return;\n  }\n\n  hdr = (void *)buf->data;\n  len = sys_le16_to_cpu(hdr->len);\n\n  if (sizeof(*hdr) + len != buf->len) {\n    BT_ERR(\"ACL len mismatch (%u != %u)\", len, buf->len);\n    net_buf_unref(buf);\n    return;\n  }\n\n  BT_DBG(\"Successfully parsed %u byte L2CAP packet\", buf->len);\n\n  bt_l2cap_recv(conn, buf);\n}\n\nstatic struct bt_conn_tx *conn_tx_alloc(void) {\n  /* The TX context always get freed in the system workqueue,\n   * so if we're in the same workqueue but there are no immediate\n   * contexts available, there's no chance we'll get one by waiting.\n   */\n#if !defined(BFLB_BLE)\n  if (k_current_get() == &k_sys_work_q.thread) {\n    return k_fifo_get(&free_tx, K_NO_WAIT);\n  }\n#endif\n  if (IS_ENABLED(CONFIG_BT_DEBUG_CONN)) {\n    struct bt_conn_tx *tx = k_fifo_get(&free_tx, K_NO_WAIT);\n\n    if (tx) {\n      return tx;\n    }\n\n    BT_WARN(\"Unable to get an immediate free conn_tx\");\n  }\n\n  return k_fifo_get(&free_tx, K_FOREVER);\n}\n\nint bt_conn_send_cb(struct bt_conn *conn, struct net_buf *buf, bt_conn_tx_cb_t cb, void *user_data) {\n  struct bt_conn_tx *tx;\n\n  BT_DBG(\"conn handle %u buf len %u cb %p user_data %p\", conn->handle, buf->len, cb, user_data);\n\n  if (conn->state != BT_CONN_CONNECTED) {\n    BT_ERR(\"not connected!\");\n    net_buf_unref(buf);\n    return -ENOTCONN;\n  }\n\n  if (cb) {\n    tx = conn_tx_alloc();\n    if (!tx) {\n      BT_ERR(\"Unable to allocate TX context\");\n      net_buf_unref(buf);\n      return -ENOBUFS;\n    }\n\n    /* Verify that we're still connected after blocking */\n    if (conn->state != BT_CONN_CONNECTED) {\n      BT_WARN(\"Disconnected while allocating context\");\n      net_buf_unref(buf);\n      tx_free(tx);\n      return -ENOTCONN;\n    }\n\n    tx->cb            = cb;\n    tx->user_data     = user_data;\n    tx->pending_no_cb = 0U;\n\n    tx_data(buf)->tx = tx;\n  } else {\n    tx_data(buf)->tx = NULL;\n  }\n\n#if (BFLB_BT_CO_THREAD)\n  if (k_is_current_thread(bt_get_co_thread()))\n    bt_conn_process_tx(conn, buf);\n  else\n    net_buf_put(&conn->tx_queue, buf);\n#if defined(BFLB_BLE)\n  k_sem_give(&g_poll_sem);\n#endif\n#else // BFLB_BT_CO_THREAD\n\n  net_buf_put(&conn->tx_queue, buf);\n#if defined(BFLB_BLE)\n  k_sem_give(&g_poll_sem);\n#endif\n#endif // BFLB_BT_CO_THREAD\n  return 0;\n}\n\nstatic bool send_frag(struct bt_conn *conn, struct net_buf *buf, u8_t flags, bool always_consume) {\n  struct bt_conn_tx     *tx = tx_data(buf)->tx;\n  struct bt_hci_acl_hdr *hdr;\n  u32_t                 *pending_no_cb;\n  unsigned int           key;\n  int                    err;\n\n  BT_DBG(\"conn %p buf %p len %u flags 0x%02x\", conn, buf, buf->len, flags);\n\n  /* Wait until the controller can accept ACL packets */\n  k_sem_take(bt_conn_get_pkts(conn), K_FOREVER);\n\n  /* Check for disconnection while waiting for pkts_sem */\n  if (conn->state != BT_CONN_CONNECTED) {\n    goto fail;\n  }\n\n  hdr         = net_buf_push(buf, sizeof(*hdr));\n  hdr->handle = sys_cpu_to_le16(bt_acl_handle_pack(conn->handle, flags));\n  hdr->len    = sys_cpu_to_le16(buf->len - sizeof(*hdr));\n\n  /* Add to pending, it must be done before bt_buf_set_type */\n  key = irq_lock();\n  if (tx) {\n    sys_slist_append(&conn->tx_pending, &tx->node);\n  } else {\n    struct bt_conn_tx *tail_tx;\n\n    tail_tx = (void *)sys_slist_peek_tail(&conn->tx_pending);\n    if (tail_tx) {\n      pending_no_cb = &tail_tx->pending_no_cb;\n    } else {\n      pending_no_cb = &conn->pending_no_cb;\n    }\n\n    (*pending_no_cb)++;\n  }\n  irq_unlock(key);\n\n  bt_buf_set_type(buf, BT_BUF_ACL_OUT);\n\n  err = bt_send(buf);\n  if (err) {\n    BT_ERR(\"Unable to send to driver (err %d)\", err);\n    key = irq_lock();\n    /* Roll back the pending TX info */\n    if (tx) {\n      sys_slist_find_and_remove(&conn->tx_pending, &tx->node);\n    } else {\n      __ASSERT_NO_MSG(*pending_no_cb > 0);\n      (*pending_no_cb)--;\n    }\n    irq_unlock(key);\n    goto fail;\n  }\n\n  return true;\n\nfail:\n  k_sem_give(bt_conn_get_pkts(conn));\n  if (tx) {\n    tx_free(tx);\n  }\n\n  if (always_consume) {\n    net_buf_unref(buf);\n  }\n  return false;\n}\n\nstatic inline u16_t conn_mtu(struct bt_conn *conn) {\n#if defined(CONFIG_BT_BREDR)\n  if (conn->type == BT_CONN_TYPE_BR || !bt_dev.le.mtu) {\n    return bt_dev.br.mtu;\n  }\n#endif /* CONFIG_BT_BREDR */\n\n  return bt_dev.le.mtu;\n}\n\nstatic struct net_buf *create_frag(struct bt_conn *conn, struct net_buf *buf) {\n  struct net_buf *frag;\n  u16_t           frag_len;\n\n#if CONFIG_BT_L2CAP_TX_FRAG_COUNT > 0\n  frag = bt_conn_create_pdu(&frag_pool, 0);\n#else\n  frag = bt_conn_create_pdu(NULL, 0);\n#endif\n\n  if (conn->state != BT_CONN_CONNECTED) {\n    net_buf_unref(frag);\n    return NULL;\n  }\n\n  /* Fragments never have a TX completion callback */\n  tx_data(frag)->tx = NULL;\n\n  frag_len = MIN(conn_mtu(conn), net_buf_tailroom(frag));\n\n  net_buf_add_mem(frag, buf->data, frag_len);\n  net_buf_pull(buf, frag_len);\n\n  return frag;\n}\n\nstatic bool send_buf(struct bt_conn *conn, struct net_buf *buf) {\n  struct net_buf *frag;\n\n  BT_DBG(\"conn %p buf %p len %u\", conn, buf, buf->len);\n\n  /* Send directly if the packet fits the ACL MTU */\n  if (buf->len <= conn_mtu(conn)) {\n    return send_frag(conn, buf, BT_ACL_START_NO_FLUSH, false);\n  }\n\n  /* Create & enqueue first fragment */\n  frag = create_frag(conn, buf);\n  if (!frag) {\n    return false;\n  }\n\n  if (!send_frag(conn, frag, BT_ACL_START_NO_FLUSH, true)) {\n    return false;\n  }\n\n  /*\n   * Send the fragments. For the last one simply use the original\n   * buffer (which works since we've used net_buf_pull on it.\n   */\n  while (buf->len > conn_mtu(conn)) {\n    frag = create_frag(conn, buf);\n    if (!frag) {\n      return false;\n    }\n\n    if (!send_frag(conn, frag, BT_ACL_CONT, true)) {\n      return false;\n    }\n  }\n\n  return send_frag(conn, buf, BT_ACL_CONT, false);\n}\n\nstatic struct k_poll_signal conn_change = K_POLL_SIGNAL_INITIALIZER(conn_change);\n\nstatic void conn_cleanup(struct bt_conn *conn) {\n  struct net_buf *buf;\n\n  /* Give back any allocated buffers */\n  while ((buf = net_buf_get(&conn->tx_queue, K_NO_WAIT))) {\n    if (tx_data(buf)->tx) {\n      tx_free(tx_data(buf)->tx);\n    }\n\n    net_buf_unref(buf);\n  }\n\n  __ASSERT(sys_slist_is_empty(&conn->tx_pending), \"Pending TX packets\");\n  __ASSERT_NO_MSG(conn->pending_no_cb == 0);\n\n  bt_conn_reset_rx_state(conn);\n\n  k_delayed_work_submit(&conn->update_work, K_NO_WAIT);\n\n#ifdef BFLB_BLE_PATCH_FREE_ALLOCATED_BUFFER_IN_OS\n  k_queue_free(&conn->tx_queue._queue);\n  // k_queue_free(&conn->tx_notify._queue);\n  conn->tx_queue._queue.hdl = NULL;\n  // conn->tx_notify._queue.hdl = NULL;\n  if (conn->update_work.timer.timer.hdl)\n    k_delayed_work_del_timer(&conn->update_work);\n#endif\n}\n\nint bt_conn_prepare_events(struct k_poll_event events[]) {\n  int i, ev_count = 0;\n\n  BT_DBG(\"\");\n\n  conn_change.signaled = 0U;\n  k_poll_event_init(&events[ev_count++], K_POLL_TYPE_SIGNAL, K_POLL_MODE_NOTIFY_ONLY, &conn_change);\n\n  for (i = 0; i < ARRAY_SIZE(conns); i++) {\n    struct bt_conn *conn = &conns[i];\n\n    if (!atomic_get(&conn->ref)) {\n      continue;\n    }\n\n    if (conn->state == BT_CONN_DISCONNECTED && atomic_test_and_clear_bit(conn->flags, BT_CONN_CLEANUP)) {\n      conn_cleanup(conn);\n      continue;\n    }\n\n    if (conn->state != BT_CONN_CONNECTED) {\n      continue;\n    }\n\n    BT_DBG(\"Adding conn %p to poll list\", conn);\n\n    k_poll_event_init(&events[ev_count], K_POLL_TYPE_FIFO_DATA_AVAILABLE, K_POLL_MODE_NOTIFY_ONLY, &conn->tx_queue);\n    events[ev_count++].tag = BT_EVENT_CONN_TX_QUEUE;\n  }\n\n  return ev_count;\n}\n\n#if (BFLB_BT_CO_THREAD)\nvoid bt_conn_process_tx(struct bt_conn *conn, struct net_buf *tx_buf)\n#else\nvoid bt_conn_process_tx(struct bt_conn *conn)\n#endif\n{\n  struct net_buf *buf;\n\n  BT_DBG(\"conn %p\", conn);\n\n  if (conn->state == BT_CONN_DISCONNECTED && atomic_test_and_clear_bit(conn->flags, BT_CONN_CLEANUP)) {\n    BT_DBG(\"handle %u disconnected - cleaning up\", conn->handle);\n    conn_cleanup(conn);\n    return;\n  }\n#if (BFLB_BT_CO_THREAD)\n  if (tx_buf)\n    buf = tx_buf;\n  else\n    buf = net_buf_get(&conn->tx_queue, K_NO_WAIT);\n#else\n  /* Get next ACL packet for connection */\n  buf = net_buf_get(&conn->tx_queue, K_NO_WAIT);\n#endif\n  BT_ASSERT(buf);\n  if (!send_buf(conn, buf)) {\n    net_buf_unref(buf);\n  }\n}\n\nstruct bt_conn *bt_conn_add_le(u8_t id, const bt_addr_le_t *peer) {\n  struct bt_conn *conn = conn_new();\n\n  if (!conn) {\n    return NULL;\n  }\n\n  conn->id = id;\n  bt_addr_le_copy(&conn->le.dst, peer);\n#if defined(CONFIG_BT_SMP)\n  conn->sec_level          = BT_SECURITY_L1;\n  conn->required_sec_level = BT_SECURITY_L1;\n#endif /* CONFIG_BT_SMP */\n  conn->type            = BT_CONN_TYPE_LE;\n  conn->le.interval_min = BT_GAP_INIT_CONN_INT_MIN;\n  conn->le.interval_max = BT_GAP_INIT_CONN_INT_MAX;\n\n  return conn;\n}\n\nstatic void process_unack_tx(struct bt_conn *conn) {\n  /* Return any unacknowledged packets */\n  while (1) {\n    struct bt_conn_tx *tx;\n    sys_snode_t       *node;\n    unsigned int       key;\n\n    key = irq_lock();\n\n    if (conn->pending_no_cb) {\n      conn->pending_no_cb--;\n      irq_unlock(key);\n      k_sem_give(bt_conn_get_pkts(conn));\n      continue;\n    }\n\n    node = sys_slist_get(&conn->tx_pending);\n    irq_unlock(key);\n\n    if (!node) {\n      break;\n    }\n\n    tx = CONTAINER_OF(node, struct bt_conn_tx, node);\n\n    key                 = irq_lock();\n    conn->pending_no_cb = tx->pending_no_cb;\n    tx->pending_no_cb   = 0U;\n    irq_unlock(key);\n\n    tx_free(tx);\n\n    k_sem_give(bt_conn_get_pkts(conn));\n  }\n}\n\nvoid bt_conn_set_state(struct bt_conn *conn, bt_conn_state_t state) {\n  bt_conn_state_t old_state;\n\n  BT_DBG(\"%s -> %s\", state2str(conn->state), state2str(state));\n\n  if (conn->state == state) {\n    BT_WARN(\"no transition\");\n    return;\n  }\n\n  old_state   = conn->state;\n  conn->state = state;\n\n  /* Actions needed for exiting the old state */\n  switch (old_state) {\n  case BT_CONN_DISCONNECTED:\n    /* Take a reference for the first state transition after\n     * bt_conn_add_le() and keep it until reaching DISCONNECTED\n     * again.\n     */\n    bt_conn_ref(conn);\n    break;\n  case BT_CONN_CONNECT:\n    if (IS_ENABLED(CONFIG_BT_CENTRAL) && conn->type == BT_CONN_TYPE_LE) {\n      k_delayed_work_cancel(&conn->update_work);\n    }\n    break;\n  default:\n    break;\n  }\n\n  /* Actions needed for entering the new state */\n  switch (conn->state) {\n  case BT_CONN_CONNECTED:\n    if (conn->type == BT_CONN_TYPE_SCO) {\n      /* TODO: Notify sco connected */\n      break;\n    }\n    k_fifo_init(&conn->tx_queue, 20);\n    k_poll_signal_raise(&conn_change, 0);\n\n    sys_slist_init(&conn->channels);\n\n    bt_l2cap_connected(conn);\n    notify_connected(conn);\n    break;\n  case BT_CONN_DISCONNECTED:\n    if (conn->type == BT_CONN_TYPE_SCO) {\n      /* TODO: Notify sco disconnected */\n      bt_conn_unref(conn);\n      break;\n    }\n    /* Notify disconnection and queue a dummy buffer to wake\n     * up and stop the tx thread for states where it was\n     * running.\n     */\n    if (old_state == BT_CONN_CONNECTED || old_state == BT_CONN_DISCONNECT) {\n      process_unack_tx(conn);\n      tx_notify(conn);\n\n      /* Cancel Connection Update if it is pending */\n      if (conn->type == BT_CONN_TYPE_LE) {\n        k_delayed_work_cancel(&conn->update_work);\n      }\n\n      atomic_set_bit(conn->flags, BT_CONN_CLEANUP);\n      k_poll_signal_raise(&conn_change, 0);\n      /* The last ref will be dropped during cleanup */\n    } else if (old_state == BT_CONN_CONNECT) {\n      /* conn->err will be set in this case */\n      notify_connected(conn);\n      bt_conn_unref(conn);\n    } else if (old_state == BT_CONN_CONNECT_SCAN) {\n      /* this indicate LE Create Connection failed */\n      if (conn->err) {\n        notify_connected(conn);\n      }\n\n      bt_conn_unref(conn);\n    } else if (old_state == BT_CONN_CONNECT_DIR_ADV) {\n      /* this indicate Directed advertising stopped */\n      if (conn->err) {\n        notify_connected(conn);\n      }\n\n      bt_conn_unref(conn);\n    }\n\n    break;\n  case BT_CONN_CONNECT_SCAN:\n    break;\n  case BT_CONN_CONNECT_DIR_ADV:\n    break;\n  case BT_CONN_CONNECT:\n    if (conn->type == BT_CONN_TYPE_SCO) {\n      break;\n    }\n    /*\n     * Timer is needed only for LE. For other link types controller\n     * will handle connection timeout.\n     */\n    if (IS_ENABLED(CONFIG_BT_CENTRAL) && conn->type == BT_CONN_TYPE_LE) {\n      k_delayed_work_submit(&conn->update_work, CONN_TIMEOUT);\n    }\n\n    break;\n  case BT_CONN_DISCONNECT:\n    break;\n  default:\n    BT_WARN(\"no valid (%u) state was set\", state);\n\n    break;\n  }\n}\n\nstruct bt_conn *bt_conn_lookup_handle(u16_t handle) {\n  int i;\n\n  for (i = 0; i < ARRAY_SIZE(conns); i++) {\n    if (!atomic_get(&conns[i].ref)) {\n      continue;\n    }\n\n    /* We only care about connections with a valid handle */\n    if (conns[i].state != BT_CONN_CONNECTED && conns[i].state != BT_CONN_DISCONNECT) {\n      continue;\n    }\n\n    if (conns[i].handle == handle) {\n      return bt_conn_ref(&conns[i]);\n    }\n  }\n\n#if defined(CONFIG_BT_BREDR)\n  for (i = 0; i < ARRAY_SIZE(sco_conns); i++) {\n    if (!atomic_get(&sco_conns[i].ref)) {\n      continue;\n    }\n\n    /* We only care about connections with a valid handle */\n    if (sco_conns[i].state != BT_CONN_CONNECTED && sco_conns[i].state != BT_CONN_DISCONNECT) {\n      continue;\n    }\n\n    if (sco_conns[i].handle == handle) {\n      return bt_conn_ref(&sco_conns[i]);\n    }\n  }\n#endif\n\n  return NULL;\n}\n\nint bt_conn_addr_le_cmp(const struct bt_conn *conn, const bt_addr_le_t *peer) {\n  /* Check against conn dst address as it may be the identity address */\n  if (!bt_addr_le_cmp(peer, &conn->le.dst)) {\n    return 0;\n  }\n\n  /* Check against initial connection address */\n  if (conn->role == BT_HCI_ROLE_MASTER) {\n    return bt_addr_le_cmp(peer, &conn->le.resp_addr);\n  }\n\n  return bt_addr_le_cmp(peer, &conn->le.init_addr);\n}\n\nstruct bt_conn *bt_conn_lookup_addr_le(u8_t id, const bt_addr_le_t *peer) {\n  int i;\n\n  for (i = 0; i < ARRAY_SIZE(conns); i++) {\n    if (!atomic_get(&conns[i].ref)) {\n      continue;\n    }\n\n    if (conns[i].type != BT_CONN_TYPE_LE) {\n      continue;\n    }\n\n    if (conns[i].id == id && !bt_conn_addr_le_cmp(&conns[i], peer)) {\n      return bt_conn_ref(&conns[i]);\n    }\n  }\n\n  return NULL;\n}\n\nstruct bt_conn *bt_conn_lookup_state_le(const bt_addr_le_t *peer, const bt_conn_state_t state) {\n  int i;\n\n  for (i = 0; i < ARRAY_SIZE(conns); i++) {\n    if (!atomic_get(&conns[i].ref)) {\n      continue;\n    }\n\n    if (conns[i].type != BT_CONN_TYPE_LE) {\n      continue;\n    }\n\n    if (peer && bt_conn_addr_le_cmp(&conns[i], peer)) {\n      continue;\n    }\n\n    if (conns[i].state == state) {\n      return bt_conn_ref(&conns[i]);\n    }\n  }\n\n  return NULL;\n}\n\nvoid bt_conn_foreach(int type, void (*func)(struct bt_conn *conn, void *data), void *data) {\n  int i;\n\n  for (i = 0; i < ARRAY_SIZE(conns); i++) {\n    if (!atomic_get(&conns[i].ref)) {\n      continue;\n    }\n\n    if (!(conns[i].type & type)) {\n      continue;\n    }\n\n    func(&conns[i], data);\n  }\n#if defined(CONFIG_BT_BREDR)\n  if (type & BT_CONN_TYPE_SCO) {\n    for (i = 0; i < ARRAY_SIZE(sco_conns); i++) {\n      if (!atomic_get(&sco_conns[i].ref)) {\n        continue;\n      }\n\n      func(&sco_conns[i], data);\n    }\n  }\n#endif /* defined(CONFIG_BT_BREDR) */\n}\n\nstatic void disconnect_all(struct bt_conn *conn, void *data) {\n  u8_t *id = (u8_t *)data;\n\n  if (conn->id == *id && conn->state == BT_CONN_CONNECTED) {\n    bt_conn_disconnect(conn, BT_HCI_ERR_REMOTE_USER_TERM_CONN);\n  }\n}\n\nvoid bt_conn_disconnect_all(u8_t id) { bt_conn_foreach(BT_CONN_TYPE_ALL, disconnect_all, &id); }\n\nstruct bt_conn *bt_conn_ref(struct bt_conn *conn) {\n  atomic_inc(&conn->ref);\n\n  BT_DBG(\"handle %u ref %u\", conn->handle, atomic_get(&conn->ref));\n\n  return conn;\n}\n\nvoid bt_conn_unref(struct bt_conn *conn) {\n  atomic_dec(&conn->ref);\n\n  BT_DBG(\"handle %u ref %u\", conn->handle, atomic_get(&conn->ref));\n}\n\nconst bt_addr_le_t *bt_conn_get_dst(const struct bt_conn *conn) { return &conn->le.dst; }\n\nint bt_conn_get_info(const struct bt_conn *conn, struct bt_conn_info *info) {\n  info->type = conn->type;\n  info->role = conn->role;\n  info->id   = conn->id;\n\n  switch (conn->type) {\n  case BT_CONN_TYPE_LE:\n    info->le.dst = &conn->le.dst;\n    info->le.src = &bt_dev.id_addr[conn->id];\n    if (conn->role == BT_HCI_ROLE_MASTER) {\n      info->le.local  = &conn->le.init_addr;\n      info->le.remote = &conn->le.resp_addr;\n    } else {\n      info->le.local  = &conn->le.resp_addr;\n      info->le.remote = &conn->le.init_addr;\n    }\n    info->le.interval = conn->le.interval;\n    info->le.latency  = conn->le.latency;\n    info->le.timeout  = conn->le.timeout;\n    return 0;\n#if defined(CONFIG_BT_BREDR)\n  case BT_CONN_TYPE_BR:\n    info->br.dst = &conn->br.dst;\n    return 0;\n#endif\n  }\n\n  return -EINVAL;\n}\n\nint bt_conn_get_remote_dev_info(struct bt_conn_info *info) {\n  int link_num = 0;\n\n  for (int i = 0; i < ARRAY_SIZE(conns); i++) {\n    if (!atomic_get(&conns[i].ref)) {\n      continue;\n    }\n    bt_conn_get_info(&conns[i], &info[link_num]);\n    link_num++;\n  }\n\n  return link_num;\n}\n\nstatic int bt_hci_disconnect(struct bt_conn *conn, u8_t reason) {\n  struct net_buf              *buf;\n  struct bt_hci_cp_disconnect *disconn;\n  int                          err;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_DISCONNECT, sizeof(*disconn));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  disconn         = net_buf_add(buf, sizeof(*disconn));\n  disconn->handle = sys_cpu_to_le16(conn->handle);\n  disconn->reason = reason;\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_DISCONNECT, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  bt_conn_set_state(conn, BT_CONN_DISCONNECT);\n\n  return 0;\n}\n\n#if defined(CONFIG_BT_STACK_PTS)\nint pts_bt_conn_le_param_update(struct bt_conn *conn, const struct bt_le_conn_param *param) {\n  BT_DBG(\"conn %p features 0x%02x params (%d-%d %d %d)\", conn, conn->le.features[0], param->interval_min, param->interval_max, param->latency, param->timeout);\n\n  /* Check if there's a need to update conn params */\n  if (conn->le.interval >= param->interval_min && conn->le.interval <= param->interval_max && conn->le.latency == param->latency && conn->le.timeout == param->timeout) {\n    return -EALREADY;\n  }\n\n  /* Cancel any pending update */\n  k_delayed_work_cancel(&conn->update_work);\n\n  return bt_l2cap_update_conn_param(conn, param);\n}\n#endif\nint bt_conn_le_param_update(struct bt_conn *conn, const struct bt_le_conn_param *param) {\n  BT_DBG(\"conn %p features 0x%02x params (%d-%d %d %d)\", conn, conn->le.features[0], param->interval_min, param->interval_max, param->latency, param->timeout);\n\n  /* Check if there's a need to update conn params */\n  if (conn->le.interval >= param->interval_min && conn->le.interval <= param->interval_max && conn->le.latency == param->latency && conn->le.timeout == param->timeout) {\n    atomic_clear_bit(conn->flags, BT_CONN_SLAVE_PARAM_SET);\n    return -EALREADY;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_CENTRAL) && conn->role == BT_CONN_ROLE_MASTER) {\n    return send_conn_le_param_update(conn, param);\n  }\n\n  if (IS_ENABLED(CONFIG_BT_PERIPHERAL)) {\n    /* if slave conn param update timer expired just send request */\n    if (atomic_test_bit(conn->flags, BT_CONN_SLAVE_PARAM_UPDATE)) {\n      return send_conn_le_param_update(conn, param);\n    }\n\n    /* store new conn params to be used by update timer */\n    conn->le.interval_min    = param->interval_min;\n    conn->le.interval_max    = param->interval_max;\n    conn->le.pending_latency = param->latency;\n    conn->le.pending_timeout = param->timeout;\n    atomic_set_bit(conn->flags, BT_CONN_SLAVE_PARAM_SET);\n  }\n\n  return 0;\n}\n\nint bt_conn_disconnect(struct bt_conn *conn, u8_t reason) {\n  /* Disconnection is initiated by us, so auto connection shall\n   * be disabled. Otherwise the passive scan would be enabled\n   * and we could send LE Create Connection as soon as the remote\n   * starts advertising.\n   */\n#if !defined(CONFIG_BT_WHITELIST)\n  if (IS_ENABLED(CONFIG_BT_CENTRAL) && conn->type == BT_CONN_TYPE_LE) {\n    bt_le_set_auto_conn(&conn->le.dst, NULL);\n  }\n#endif /* !defined(CONFIG_BT_WHITELIST) */\n\n  switch (conn->state) {\n  case BT_CONN_CONNECT_SCAN:\n    conn->err = reason;\n    bt_conn_set_state(conn, BT_CONN_DISCONNECTED);\n    if (IS_ENABLED(CONFIG_BT_CENTRAL)) {\n      bt_le_scan_update(false);\n    }\n    return 0;\n  case BT_CONN_CONNECT_DIR_ADV:\n    conn->err = reason;\n    bt_conn_set_state(conn, BT_CONN_DISCONNECTED);\n    if (IS_ENABLED(CONFIG_BT_PERIPHERAL)) {\n      /* User should unref connection object when receiving\n       * error in connection callback.\n       */\n      return bt_le_adv_stop();\n    }\n    return 0;\n  case BT_CONN_CONNECT:\n#if defined(CONFIG_BT_BREDR)\n    if (conn->type == BT_CONN_TYPE_BR) {\n      return bt_hci_connect_br_cancel(conn);\n    }\n#endif /* CONFIG_BT_BREDR */\n\n    if (IS_ENABLED(CONFIG_BT_CENTRAL)) {\n      k_delayed_work_cancel(&conn->update_work);\n      return bt_hci_cmd_send_sync(BT_HCI_OP_LE_CREATE_CONN_CANCEL, NULL, NULL);\n    }\n\n    return 0;\n  case BT_CONN_CONNECTED:\n    return bt_hci_disconnect(conn, reason);\n  case BT_CONN_DISCONNECT:\n    return 0;\n  case BT_CONN_DISCONNECTED:\n  default:\n    return -ENOTCONN;\n  }\n}\n\n#if defined(CONFIG_BT_CENTRAL)\nstatic void bt_conn_set_param_le(struct bt_conn *conn, const struct bt_le_conn_param *param) {\n  conn->le.interval_min = param->interval_min;\n  conn->le.interval_max = param->interval_max;\n  conn->le.latency      = param->latency;\n  conn->le.timeout      = param->timeout;\n\n#if defined(CONFIG_BT_STACK_PTS)\n  conn->le.own_adder_type = param->own_address_type;\n#endif\n}\n\n#if defined(CONFIG_BT_WHITELIST)\nint bt_conn_create_auto_le(const struct bt_le_conn_param *param) {\n  struct bt_conn *conn;\n  int             err;\n\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_READY)) {\n    return -EINVAL;\n  }\n\n  if (!bt_le_conn_params_valid(param)) {\n    return -EINVAL;\n  }\n\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_EXPLICIT_SCAN)) {\n    return -EINVAL;\n  }\n\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_AUTO_CONN)) {\n    return -EALREADY;\n  }\n\n  if (!bt_dev.le.wl_entries) {\n    return -EINVAL;\n  }\n\n  /* Don't start initiator if we have general discovery procedure. */\n  conn = bt_conn_lookup_state_le(NULL, BT_CONN_CONNECT_SCAN);\n  if (conn) {\n    bt_conn_unref(conn);\n    return -EINVAL;\n  }\n\n  /* Don't start initiator if we have direct discovery procedure. */\n  conn = bt_conn_lookup_state_le(NULL, BT_CONN_CONNECT);\n  if (conn) {\n    bt_conn_unref(conn);\n    return -EINVAL;\n  }\n\n  err = bt_le_auto_conn(param);\n  if (err) {\n    BT_ERR(\"Failed to start whitelist scan\");\n    return err;\n  }\n\n  return 0;\n}\n\nint bt_conn_create_auto_stop(void) {\n  int err;\n\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_READY)) {\n    return -EINVAL;\n  }\n\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_AUTO_CONN)) {\n    return -EINVAL;\n  }\n\n  err = bt_le_auto_conn_cancel();\n  if (err) {\n    BT_ERR(\"Failed to stop initiator\");\n    return err;\n  }\n\n  return 0;\n}\n#endif /* defined(CONFIG_BT_WHITELIST) */\n\nstruct bt_conn *bt_conn_create_le(const bt_addr_le_t *peer, const struct bt_le_conn_param *param) {\n  struct bt_conn *conn;\n  bt_addr_le_t    dst;\n\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_READY)) {\n    return NULL;\n  }\n\n  if (!bt_le_conn_params_valid(param)) {\n    return NULL;\n  }\n\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_EXPLICIT_SCAN)) {\n    return NULL;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_WHITELIST) && atomic_test_bit(bt_dev.flags, BT_DEV_AUTO_CONN)) {\n    return NULL;\n  }\n\n  conn = bt_conn_lookup_addr_le(BT_ID_DEFAULT, peer);\n  if (conn) {\n    switch (conn->state) {\n    case BT_CONN_CONNECT_SCAN:\n      bt_conn_set_param_le(conn, param);\n      return conn;\n    case BT_CONN_CONNECT:\n    case BT_CONN_CONNECTED:\n      return conn;\n    case BT_CONN_DISCONNECTED:\n      BT_WARN(\"Found valid but disconnected conn object\");\n      goto start_scan;\n    default:\n      bt_conn_unref(conn);\n      return NULL;\n    }\n  }\n\n  if (peer->type == BT_ADDR_LE_PUBLIC_ID || peer->type == BT_ADDR_LE_RANDOM_ID) {\n    bt_addr_le_copy(&dst, peer);\n    dst.type -= BT_ADDR_LE_PUBLIC_ID;\n  } else {\n    bt_addr_le_copy(&dst, bt_lookup_id_addr(BT_ID_DEFAULT, peer));\n  }\n\n  /* Only default identity supported for now */\n  conn = bt_conn_add_le(BT_ID_DEFAULT, &dst);\n  if (!conn) {\n    return NULL;\n  }\n\nstart_scan:\n  bt_conn_set_param_le(conn, param);\n\n  bt_conn_set_state(conn, BT_CONN_CONNECT_SCAN);\n\n  bt_le_scan_update(true);\n\n  return conn;\n}\n\n#if !defined(CONFIG_BT_WHITELIST)\nint bt_le_set_auto_conn(const bt_addr_le_t *addr, const struct bt_le_conn_param *param) {\n  struct bt_conn *conn;\n\n  if (param && !bt_le_conn_params_valid(param)) {\n    return -EINVAL;\n  }\n\n  /* Only default identity is supported */\n  conn = bt_conn_lookup_addr_le(BT_ID_DEFAULT, addr);\n  if (!conn) {\n    conn = bt_conn_add_le(BT_ID_DEFAULT, addr);\n    if (!conn) {\n      return -ENOMEM;\n    }\n  }\n\n  if (param) {\n    bt_conn_set_param_le(conn, param);\n\n    if (!atomic_test_and_set_bit(conn->flags, BT_CONN_AUTO_CONNECT)) {\n      bt_conn_ref(conn);\n    }\n  } else {\n    if (atomic_test_and_clear_bit(conn->flags, BT_CONN_AUTO_CONNECT)) {\n      bt_conn_unref(conn);\n      if (conn->state == BT_CONN_CONNECT_SCAN) {\n        bt_conn_set_state(conn, BT_CONN_DISCONNECTED);\n      }\n    }\n  }\n\n  if (conn->state == BT_CONN_DISCONNECTED && atomic_test_bit(bt_dev.flags, BT_DEV_READY)) {\n    if (param) {\n      bt_conn_set_state(conn, BT_CONN_CONNECT_SCAN);\n    }\n    bt_le_scan_update(false);\n  }\n\n  bt_conn_unref(conn);\n\n  return 0;\n}\n#endif /* !defined(CONFIG_BT_WHITELIST) */\n#endif /* CONFIG_BT_CENTRAL */\n\n#if defined(CONFIG_BT_PERIPHERAL)\nstruct bt_conn *bt_conn_create_slave_le(const bt_addr_le_t *peer, const struct bt_le_adv_param *param) {\n  int                    err;\n  struct bt_conn        *conn;\n  struct bt_le_adv_param param_int;\n\n  memcpy(&param_int, param, sizeof(param_int));\n  param_int.options |= (BT_LE_ADV_OPT_CONNECTABLE | BT_LE_ADV_OPT_ONE_TIME);\n\n  conn = bt_conn_lookup_addr_le(param->id, peer);\n  if (conn) {\n    switch (conn->state) {\n    case BT_CONN_CONNECT_DIR_ADV:\n      /* Handle the case when advertising is stopped with\n       * bt_le_adv_stop function\n       */\n      err = bt_le_adv_start_internal(&param_int, NULL, 0, NULL, 0, peer);\n      if (err && (err != -EALREADY)) {\n        BT_WARN(\"Directed advertising could not be\"\n                \" started: %d\",\n                err);\n        bt_conn_unref(conn);\n        return NULL;\n      }\n      __attribute__((fallthrough));\n    case BT_CONN_CONNECT:\n    case BT_CONN_CONNECTED:\n      return conn;\n    case BT_CONN_DISCONNECTED:\n      BT_WARN(\"Found valid but disconnected conn object\");\n      goto start_adv;\n    default:\n      bt_conn_unref(conn);\n      return NULL;\n    }\n  }\n\n  conn = bt_conn_add_le(param->id, peer);\n  if (!conn) {\n    return NULL;\n  }\n\nstart_adv:\n  bt_conn_set_state(conn, BT_CONN_CONNECT_DIR_ADV);\n\n  err = bt_le_adv_start_internal(&param_int, NULL, 0, NULL, 0, peer);\n  if (err) {\n    BT_WARN(\"Directed advertising could not be started: %d\", err);\n\n    bt_conn_unref(conn);\n    return NULL;\n  }\n\n  return conn;\n}\n#endif /* CONFIG_BT_PERIPHERAL */\n\nint bt_conn_le_conn_update(struct bt_conn *conn, const struct bt_le_conn_param *param) {\n  struct hci_cp_le_conn_update *conn_update;\n  struct net_buf               *buf;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_CONN_UPDATE, sizeof(*conn_update));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  conn_update = net_buf_add(buf, sizeof(*conn_update));\n  (void)memset(conn_update, 0, sizeof(*conn_update));\n  conn_update->handle              = sys_cpu_to_le16(conn->handle);\n  conn_update->conn_interval_min   = sys_cpu_to_le16(param->interval_min);\n  conn_update->conn_interval_max   = sys_cpu_to_le16(param->interval_max);\n  conn_update->conn_latency        = sys_cpu_to_le16(param->latency);\n  conn_update->supervision_timeout = sys_cpu_to_le16(param->timeout);\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_LE_CONN_UPDATE, buf, NULL);\n}\n\nstruct net_buf *bt_conn_create_pdu_timeout(struct net_buf_pool *pool, size_t reserve, s32_t timeout) {\n  struct net_buf *buf;\n\n  /*\n   * PDU must not be allocated from ISR as we block with 'K_FOREVER'\n   * during the allocation\n   */\n  __ASSERT_NO_MSG(!k_is_in_isr());\n\n  if (!pool) {\n    pool = &acl_tx_pool;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_DEBUG_CONN)) {\n    buf = net_buf_alloc(pool, K_NO_WAIT);\n    if (!buf) {\n      BT_WARN(\"Unable to allocate buffer with K_NO_WAIT\");\n      buf = net_buf_alloc(pool, timeout);\n    }\n  } else {\n    buf = net_buf_alloc(pool, timeout);\n  }\n\n  if (!buf) {\n    BT_WARN(\"Unable to allocate buffer: timeout %d\", timeout);\n    return NULL;\n  }\n\n  reserve += sizeof(struct bt_hci_acl_hdr) + BT_BUF_RESERVE;\n  net_buf_reserve(buf, reserve);\n\n  return buf;\n}\n\n#if defined(CONFIG_BT_SMP) || defined(CONFIG_BT_BREDR)\nint bt_conn_auth_cb_register(const struct bt_conn_auth_cb *cb) {\n  if (!cb) {\n    bt_auth = NULL;\n    return 0;\n  }\n\n  if (bt_auth) {\n    return -EALREADY;\n  }\n\n  /* The cancel callback must always be provided if the app provides\n   * interactive callbacks.\n   */\n  if (!cb->cancel && (cb->passkey_display || cb->passkey_entry || cb->passkey_confirm ||\n#if defined(CONFIG_BT_BREDR)\n                      cb->pincode_entry ||\n#endif\n                      cb->pairing_confirm)) {\n    return -EINVAL;\n  }\n\n  bt_auth = cb;\n  return 0;\n}\n\nint bt_conn_auth_passkey_entry(struct bt_conn *conn, unsigned int passkey) {\n  if (!bt_auth) {\n    return -EINVAL;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_SMP) && conn->type == BT_CONN_TYPE_LE) {\n    bt_smp_auth_passkey_entry(conn, passkey);\n    return 0;\n  }\n\n#if defined(CONFIG_BT_BREDR)\n  if (conn->type == BT_CONN_TYPE_BR) {\n    /* User entered passkey, reset user state. */\n    if (!atomic_test_and_clear_bit(conn->flags, BT_CONN_USER)) {\n      return -EPERM;\n    }\n\n    if (conn->br.pairing_method == PASSKEY_INPUT) {\n      return ssp_passkey_reply(conn, passkey);\n    }\n  }\n#endif /* CONFIG_BT_BREDR */\n\n  return -EINVAL;\n}\n\nint bt_conn_auth_passkey_confirm(struct bt_conn *conn) {\n  if (!bt_auth) {\n    return -EINVAL;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_SMP) && conn->type == BT_CONN_TYPE_LE) {\n    return bt_smp_auth_passkey_confirm(conn);\n  }\n\n#if defined(CONFIG_BT_BREDR)\n  if (conn->type == BT_CONN_TYPE_BR) {\n    /* Allow user confirm passkey value, then reset user state. */\n    if (!atomic_test_and_clear_bit(conn->flags, BT_CONN_USER)) {\n      return -EPERM;\n    }\n\n    return ssp_confirm_reply(conn);\n  }\n#endif /* CONFIG_BT_BREDR */\n\n  return -EINVAL;\n}\n\nint bt_conn_auth_cancel(struct bt_conn *conn) {\n  if (!bt_auth) {\n    return -EINVAL;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_SMP) && conn->type == BT_CONN_TYPE_LE) {\n    return bt_smp_auth_cancel(conn);\n  }\n\n#if defined(CONFIG_BT_BREDR)\n  if (conn->type == BT_CONN_TYPE_BR) {\n    /* Allow user cancel authentication, then reset user state. */\n    if (!atomic_test_and_clear_bit(conn->flags, BT_CONN_USER)) {\n      return -EPERM;\n    }\n\n    switch (conn->br.pairing_method) {\n    case JUST_WORKS:\n    case PASSKEY_CONFIRM:\n      return ssp_confirm_neg_reply(conn);\n    case PASSKEY_INPUT:\n      return ssp_passkey_neg_reply(conn);\n    case PASSKEY_DISPLAY:\n      return bt_conn_disconnect(conn, BT_HCI_ERR_AUTH_FAIL);\n    case LEGACY:\n      return pin_code_neg_reply(&conn->br.dst);\n    default:\n      break;\n    }\n  }\n#endif /* CONFIG_BT_BREDR */\n\n  return -EINVAL;\n}\n\nint bt_conn_auth_pairing_confirm(struct bt_conn *conn) {\n  if (!bt_auth) {\n    return -EINVAL;\n  }\n\n  switch (conn->type) {\n#if defined(CONFIG_BT_SMP)\n  case BT_CONN_TYPE_LE:\n    return bt_smp_auth_pairing_confirm(conn);\n#endif /* CONFIG_BT_SMP */\n#if defined(CONFIG_BT_BREDR)\n  case BT_CONN_TYPE_BR:\n    return ssp_confirm_reply(conn);\n#endif /* CONFIG_BT_BREDR */\n  default:\n    return -EINVAL;\n  }\n}\n#endif /* CONFIG_BT_SMP || CONFIG_BT_BREDR */\n\nu8_t bt_conn_index(struct bt_conn *conn) {\n  u8_t index = conn - conns;\n\n  __ASSERT(index < CONFIG_BT_MAX_CONN, \"Invalid bt_conn pointer\");\n  return index;\n}\n\nstruct bt_conn *bt_conn_lookup_id(u8_t id) {\n  struct bt_conn *conn;\n\n  if (id >= ARRAY_SIZE(conns)) {\n    return NULL;\n  }\n\n  conn = &conns[id];\n\n  if (!atomic_get(&conn->ref)) {\n    return NULL;\n  }\n\n  return bt_conn_ref(conn);\n}\n\nint bt_conn_init(void) {\n#if defined(CONFIG_BT_SMP)\n  int err;\n#endif\n  int i;\n\n#if defined(BFLB_BLE)\n#if defined(BFLB_DYNAMIC_ALLOC_MEM)\n#if (BFLB_STATIC_ALLOC_MEM)\n  net_buf_init(ACL_TX, &acl_tx_pool, CONFIG_BT_L2CAP_TX_BUF_COUNT, BT_L2CAP_BUF_SIZE(CONFIG_BT_L2CAP_TX_MTU), NULL);\n#else\n  net_buf_init(&acl_tx_pool, CONFIG_BT_L2CAP_TX_BUF_COUNT, BT_L2CAP_BUF_SIZE(CONFIG_BT_L2CAP_TX_MTU), NULL);\n#endif\n#if CONFIG_BT_L2CAP_TX_FRAG_COUNT > 0\n#if (BFLB_STATIC_ALLOC_MEM)\n  net_buf_init(FRAG, &frag_pool, CONFIG_BT_L2CAP_TX_FRAG_COUNT, FRAG_SIZE, NULL);\n#else\n  net_buf_init(&frag_pool, CONFIG_BT_L2CAP_TX_FRAG_COUNT, FRAG_SIZE, NULL);\n#endif\n#endif\n#else // BFLB_DYNAMIC_ALLOC_MEM\n  struct net_buf_pool num_complete_pool;\n  struct net_buf_pool acl_tx_pool;\n#if CONFIG_BT_L2CAP_TX_FRAG_COUNT > 0\n  struct net_buf_pool frag_pool;\n#endif\n#endif // BFLB_DYNAMIC_ALLOC_MEM\n  k_fifo_init(&free_tx, 20);\n#endif\n  for (i = 0; i < ARRAY_SIZE(conn_tx); i++) {\n    k_fifo_put(&free_tx, &conn_tx[i]);\n  }\n\n  bt_att_init();\n\n#if defined(CONFIG_BT_SMP)\n  err = bt_smp_init();\n  if (err) {\n    return err;\n  }\n#endif\n\n  bt_l2cap_init();\n\n  /* Initialize background scan */\n  if (IS_ENABLED(CONFIG_BT_CENTRAL)) {\n    for (i = 0; i < ARRAY_SIZE(conns); i++) {\n      struct bt_conn *conn = &conns[i];\n\n      if (!atomic_get(&conn->ref)) {\n        continue;\n      }\n\n      if (atomic_test_bit(conn->flags, BT_CONN_AUTO_CONNECT)) {\n        /* Only the default identity is supported */\n        conn->id = BT_ID_DEFAULT;\n        bt_conn_set_state(conn, BT_CONN_CONNECT_SCAN);\n      }\n    }\n  }\n\n  return 0;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/conn_internal.h",
    "content": "/** @file\n *  @brief Internal APIs for Bluetooth connection handling.\n */\n\n/*\n * Copyright (c) 2015 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\ntypedef enum __packed {\n    BT_CONN_DISCONNECTED,\n    BT_CONN_CONNECT_SCAN,\n    BT_CONN_CONNECT_DIR_ADV,\n    BT_CONN_CONNECT,\n    BT_CONN_CONNECTED,\n    BT_CONN_DISCONNECT,\n} bt_conn_state_t;\n\n/* bt_conn flags: the flags defined here represent connection parameters */\nenum {\n    BT_CONN_AUTO_CONNECT,\n    BT_CONN_BR_LEGACY_SECURE,     /* 16 digits legacy PIN tracker */\n    BT_CONN_USER,                 /* user I/O when pairing */\n    BT_CONN_BR_PAIRING,           /* BR connection in pairing context */\n    BT_CONN_BR_NOBOND,            /* SSP no bond pairing tracker */\n    BT_CONN_BR_PAIRING_INITIATOR, /* local host starts authentication */\n    BT_CONN_CLEANUP,              /* Disconnected, pending cleanup */\n    BT_CONN_AUTO_PHY_UPDATE,      /* Auto-update PHY */\n    BT_CONN_SLAVE_PARAM_UPDATE,   /* If slave param update timer fired */\n    BT_CONN_SLAVE_PARAM_SET,      /* If slave param were set from app */\n    BT_CONN_SLAVE_PARAM_L2CAP,    /* If should force L2CAP for CPUP */\n    BT_CONN_FORCE_PAIR,           /* Pairing even with existing keys. */\n\n    BT_CONN_AUTO_PHY_COMPLETE, /* Auto-initiated PHY procedure done */\n    BT_CONN_AUTO_FEATURE_EXCH, /* Auto-initiated LE Feat done */\n    BT_CONN_AUTO_VERSION_INFO, /* Auto-initiated LE version done */\n\n    /* Total number of flags - must be at the end of the enum */\n    BT_CONN_NUM_FLAGS,\n};\n\nstruct bt_conn_le {\n    bt_addr_le_t dst;\n\n    bt_addr_le_t init_addr;\n    bt_addr_le_t resp_addr;\n\n    u16_t interval;\n    u16_t interval_min;\n    u16_t interval_max;\n\n    u16_t latency;\n    u16_t timeout;\n    u16_t pending_latency;\n    u16_t pending_timeout;\n\n    u8_t features[8];\n\n    struct bt_keys *keys;\n\n#if defined(CONFIG_BT_STACK_PTS)\n    u8_t own_adder_type;\n#endif\n};\n\n#if defined(CONFIG_BT_BREDR)\n/* For now reserve space for 2 pages of LMP remote features */\n#define LMP_MAX_PAGES 2\n\nstruct bt_conn_br {\n    bt_addr_t dst;\n    u8_t remote_io_capa;\n    u8_t remote_auth;\n    u8_t pairing_method;\n    /* remote LMP features pages per 8 bytes each */\n    u8_t features[LMP_MAX_PAGES][8];\n\n    struct bt_keys_link_key *link_key;\n};\n\nstruct bt_conn_sco {\n    /* Reference to ACL Connection */\n    struct bt_conn *acl;\n    u16_t pkt_type;\n};\n#endif\n\nstruct bt_conn_iso {\n    /* Reference to ACL Connection */\n    struct bt_conn *acl;\n    /* CIG ID */\n    uint8_t cig_id;\n    /* CIS ID */\n    uint8_t cis_id;\n};\n\ntypedef void (*bt_conn_tx_cb_t)(struct bt_conn *conn, void *user_data);\n\nstruct bt_conn_tx {\n    sys_snode_t node;\n\n    bt_conn_tx_cb_t cb;\n    void *user_data;\n\n    /* Number of pending packets without a callback after this one */\n    u32_t pending_no_cb;\n};\n\nstruct bt_conn {\n    u16_t handle;\n    u8_t type;\n    u8_t role;\n\n    ATOMIC_DEFINE(flags, BT_CONN_NUM_FLAGS);\n\n    /* Which local identity address this connection uses */\n    u8_t id;\n\n#if defined(CONFIG_BT_SMP) || defined(CONFIG_BT_BREDR)\n    bt_security_t sec_level;\n    bt_security_t required_sec_level;\n    u8_t encrypt;\n#endif /* CONFIG_BT_SMP || CONFIG_BT_BREDR */\n\n    /* Connection error or reason for disconnect */\n    u8_t err;\n\n    bt_conn_state_t state;\n\n    u16_t rx_len;\n    struct net_buf *rx;\n\n    /* Sent but not acknowledged TX packets with a callback */\n    sys_slist_t tx_pending;\n    /* Sent but not acknowledged TX packets without a callback before\n\t * the next packet (if any) in tx_pending.\n\t */\n    u32_t pending_no_cb;\n\n    /* Completed TX for which we need to call the callback */\n    sys_slist_t tx_complete;\n    struct k_work tx_complete_work;\n\n    /* Queue for outgoing ACL data */\n    struct k_fifo tx_queue;\n\n    /* Active L2CAP channels */\n    sys_slist_t channels;\n\n    atomic_t ref;\n\n    /* Delayed work for connection update and other deferred tasks */\n    struct k_delayed_work update_work;\n\n    union {\n        struct bt_conn_le le;\n#if defined(CONFIG_BT_BREDR)\n        struct bt_conn_br br;\n        struct bt_conn_sco sco;\n#endif\n#if defined(CONFIG_BT_AUDIO)\n        struct bt_conn_iso iso;\n#endif\n    };\n\n#if defined(CONFIG_BT_REMOTE_VERSION)\n    struct bt_conn_rv {\n        u8_t version;\n        u16_t manufacturer;\n        u16_t subversion;\n    } rv;\n#endif\n};\n\nvoid bt_conn_reset_rx_state(struct bt_conn *conn);\n\n/* Process incoming data for a connection */\nvoid bt_conn_recv(struct bt_conn *conn, struct net_buf *buf, u8_t flags);\n\n/* Send data over a connection */\nint bt_conn_send_cb(struct bt_conn *conn, struct net_buf *buf,\n                    bt_conn_tx_cb_t cb, void *user_data);\n\nstatic inline int bt_conn_send(struct bt_conn *conn, struct net_buf *buf)\n{\n    return bt_conn_send_cb(conn, buf, NULL, NULL);\n}\n\n/* Add a new LE connection */\nstruct bt_conn *bt_conn_add_le(u8_t id, const bt_addr_le_t *peer);\n\n/** Connection parameters for ISO connections */\nstruct bt_iso_create_param {\n    uint8_t id;\n    uint8_t num_conns;\n    struct bt_conn **conns;\n    struct bt_iso_chan **chans;\n};\n\n/* Bind ISO connections parameters */\nint bt_conn_bind_iso(struct bt_iso_create_param *param);\n\n/* Connect ISO connections */\nint bt_conn_connect_iso(struct bt_conn **conns, uint8_t num_conns);\n\n/* Add a new ISO connection */\nstruct bt_conn *bt_conn_add_iso(struct bt_conn *acl);\n\n/* Cleanup ISO references */\nvoid bt_iso_cleanup(struct bt_conn *iso_conn);\n\n/* Allocate new ISO connection */\nstruct bt_conn *iso_conn_new(struct bt_conn *conns, size_t size);\n\n/* Add a new BR/EDR connection */\nstruct bt_conn *bt_conn_add_br(const bt_addr_t *peer);\n\n/* Add a new SCO connection */\nstruct bt_conn *bt_conn_add_sco(const bt_addr_t *peer, int link_type);\n\n/* Cleanup SCO references */\nvoid bt_sco_cleanup(struct bt_conn *sco_conn);\n\n/* Look up an existing sco connection by BT address */\nstruct bt_conn *bt_conn_lookup_addr_sco(const bt_addr_t *peer);\n\n/* Look up an existing connection by BT address */\nstruct bt_conn *bt_conn_lookup_addr_br(const bt_addr_t *peer);\n\nvoid bt_conn_pin_code_req(struct bt_conn *conn);\nu8_t bt_conn_get_io_capa(void);\nu8_t bt_conn_ssp_get_auth(const struct bt_conn *conn);\nvoid bt_conn_ssp_auth(struct bt_conn *conn, u32_t passkey);\nvoid bt_conn_ssp_auth_complete(struct bt_conn *conn, u8_t status);\n\nvoid bt_conn_disconnect_all(u8_t id);\n\n/* Look up an existing connection */\nstruct bt_conn *bt_conn_lookup_handle(u16_t handle);\n\n/* Compare an address with bt_conn destination address */\nint bt_conn_addr_le_cmp(const struct bt_conn *conn, const bt_addr_le_t *peer);\n\n/* Helpers for identifying & looking up connections based on the the index to\n * the connection list. This is useful for O(1) lookups, but can't be used\n * e.g. as the handle since that's assigned to us by the controller.\n */\n#define BT_CONN_ID_INVALID 0xff\nstruct bt_conn *bt_conn_lookup_id(u8_t id);\n\n/* Look up a connection state. For BT_ADDR_LE_ANY, returns the first connection\n * with the specific state\n */\nstruct bt_conn *bt_conn_lookup_state_le(const bt_addr_le_t *peer,\n                                        const bt_conn_state_t state);\n\n/* Set connection object in certain state and perform action related to state */\nvoid bt_conn_set_state(struct bt_conn *conn, bt_conn_state_t state);\n\nint bt_conn_le_conn_update(struct bt_conn *conn,\n                           const struct bt_le_conn_param *param);\n\nvoid notify_remote_info(struct bt_conn *conn);\n\nvoid notify_le_param_updated(struct bt_conn *conn);\n\nvoid notify_le_phy_updated(struct bt_conn *conn, u8_t tx_phy, u8_t rx_phy);\n\nbool le_param_req(struct bt_conn *conn, struct bt_le_conn_param *param);\n\n#if defined(CONFIG_BT_SMP)\n/* rand and ediv should be in BT order */\nint bt_conn_le_start_encryption(struct bt_conn *conn, u8_t rand[8],\n                                u8_t ediv[2], const u8_t *ltk, size_t len);\n\n/* Notify higher layers that RPA was resolved */\nvoid bt_conn_identity_resolved(struct bt_conn *conn);\n#endif /* CONFIG_BT_SMP */\n\n#if defined(CONFIG_BT_SMP) || defined(CONFIG_BT_BREDR)\n/* Notify higher layers that connection security changed */\nvoid bt_conn_security_changed(struct bt_conn *conn, enum bt_security_err err);\n#endif /* CONFIG_BT_SMP || CONFIG_BT_BREDR */\n\n/* Prepare a PDU to be sent over a connection */\n#if defined(CONFIG_NET_BUF_LOG)\nstruct net_buf *bt_conn_create_pdu_timeout_debug(struct net_buf_pool *pool,\n                                                 size_t reserve, s32_t timeout,\n                                                 const char *func, int line);\n#define bt_conn_create_pdu_timeout(_pool, _reserve, _timeout)   \\\n    bt_conn_create_pdu_timeout_debug(_pool, _reserve, _timeout, \\\n                                     __func__, __LINE__)\n\n#define bt_conn_create_pdu(_pool, _reserve)                      \\\n    bt_conn_create_pdu_timeout_debug(_pool, _reserve, K_FOREVER, \\\n                                     __func__, __line__)\n#else\nstruct net_buf *bt_conn_create_pdu_timeout(struct net_buf_pool *pool,\n                                           size_t reserve, s32_t timeout);\n\n#define bt_conn_create_pdu(_pool, _reserve) \\\n    bt_conn_create_pdu_timeout(_pool, _reserve, K_FOREVER)\n#endif\n\n/* Prepare a PDU to be sent over a connection */\n#if defined(CONFIG_NET_BUF_LOG)\nstruct net_buf *bt_conn_create_frag_timeout_debug(size_t reserve, s32_t timeout,\n                                                  const char *func, int line);\n\n#define bt_conn_create_frag_timeout(_reserve, _timeout)   \\\n    bt_conn_create_frag_timeout_debug(_reserve, _timeout, \\\n                                      __func__, __LINE__)\n\n#define bt_conn_create_frag(_reserve)                      \\\n    bt_conn_create_frag_timeout_debug(_reserve, K_FOREVER, \\\n                                      __func__, __LINE__)\n#else\nstruct net_buf *bt_conn_create_frag_timeout(size_t reserve, s32_t timeout);\n\n#define bt_conn_create_frag(_reserve) \\\n    bt_conn_create_frag_timeout(_reserve, K_FOREVER)\n#endif\n\n/* Initialize connection management */\nint bt_conn_init(void);\n\n/* Selects based on connecton type right semaphore for ACL packets */\nstruct k_sem *bt_conn_get_pkts(struct bt_conn *conn);\n\n/* k_poll related helpers for the TX thread */\nint bt_conn_prepare_events(struct k_poll_event events[]);\n\n#if (BFLB_BT_CO_THREAD)\nvoid bt_conn_process_tx(struct bt_conn *conn, struct net_buf *tx_buf);\n#else\nvoid bt_conn_process_tx(struct bt_conn *conn);\n#endif\n\n#if defined(BFLB_BLE)\n/** @brief Get connection handle for a connection.\n *\n * @param conn Connection object.\n * @param conn_handle Place to store the Connection handle.\n *\n * @return 0 on success or negative error value on failure.\n */\nint bt_hci_get_conn_handle(const struct bt_conn *conn, u16_t *conn_handle);\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/crypto.c",
    "content": "/*\n * Copyright (c) 2017 Nordic Semiconductor ASA\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <errno.h>\n#include <string.h>\n\n#include <misc/byteorder.h>\n#include <zephyr.h>\n\n#include <bluetooth.h>\n#include <conn.h>\n#include <hci_host.h>\n\n#include <aes.h>\n#include <constants.h>\n#include <hmac_prng.h>\n#include <utils.h>\n\n#define BT_DBG_ENABLED  IS_ENABLED(CONFIG_BT_DEBUG_HCI_CORE)\n#define LOG_MODULE_NAME bt_crypto\n#include \"log.h\"\n\n#include \"hci_core.h\"\n\nstatic struct tc_hmac_prng_struct prng;\n\nstatic int prng_reseed(struct tc_hmac_prng_struct *h) {\n  u8_t  seed[32];\n  s64_t extra;\n  int   ret, i;\n\n  for (i = 0; i < (sizeof(seed) / 8); i++) {\n    struct bt_hci_rp_le_rand *rp;\n    struct net_buf           *rsp;\n\n    ret = bt_hci_cmd_send_sync(BT_HCI_OP_LE_RAND, NULL, &rsp);\n    if (ret) {\n      return ret;\n    }\n\n    rp = (void *)rsp->data;\n    memcpy(&seed[i * 8], rp->rand, 8);\n\n    net_buf_unref(rsp);\n  }\n\n  extra = k_uptime_get();\n\n  ret = tc_hmac_prng_reseed(h, seed, sizeof(seed), (u8_t *)&extra, sizeof(extra));\n  if (ret == TC_CRYPTO_FAIL) {\n    BT_ERR(\"Failed to re-seed PRNG\");\n    return -EIO;\n  }\n\n  return 0;\n}\n\nint prng_init(void) {\n  struct bt_hci_rp_le_rand *rp;\n  struct net_buf           *rsp;\n  int                       ret;\n\n  /* Check first that HCI_LE_Rand is supported */\n  if (!BT_CMD_TEST(bt_dev.supported_commands, 27, 7)) {\n    return -ENOTSUP;\n  }\n\n  ret = bt_hci_cmd_send_sync(BT_HCI_OP_LE_RAND, NULL, &rsp);\n  if (ret) {\n    return ret;\n  }\n\n  rp = (void *)rsp->data;\n\n  ret = tc_hmac_prng_init(&prng, rp->rand, sizeof(rp->rand));\n\n  net_buf_unref(rsp);\n\n  if (ret == TC_CRYPTO_FAIL) {\n    BT_ERR(\"Failed to initialize PRNG\");\n    return -EIO;\n  }\n\n  /* re-seed is needed after init */\n  return prng_reseed(&prng);\n}\n\nint bt_rand(void *buf, size_t len) {\n#if !defined(CONFIG_BT_GEN_RANDOM_BY_SW)\n  k_get_random_byte_array(buf, len);\n  return 0;\n#else\n  int ret;\n  ret = tc_hmac_prng_generate(buf, len, &prng);\n  if (ret == TC_HMAC_PRNG_RESEED_REQ) {\n    ret = prng_reseed(&prng);\n    if (ret) {\n      return ret;\n    }\n\n    ret = tc_hmac_prng_generate(buf, len, &prng);\n  }\n\n  if (ret == TC_CRYPTO_SUCCESS) {\n    return 0;\n  }\n\n  return -EIO;\n#endif\n}\n\nint bt_encrypt_le(const u8_t key[16], const u8_t plaintext[16], u8_t enc_data[16]) {\n  struct tc_aes_key_sched_struct s;\n  u8_t                           tmp[16];\n\n  BT_DBG(\"key %s\", bt_hex(key, 16));\n  BT_DBG(\"plaintext %s\", bt_hex(plaintext, 16));\n\n  sys_memcpy_swap(tmp, key, 16);\n\n  if (tc_aes128_set_encrypt_key(&s, tmp) == TC_CRYPTO_FAIL) {\n    return -EINVAL;\n  }\n\n  sys_memcpy_swap(tmp, plaintext, 16);\n\n  if (tc_aes_encrypt(enc_data, tmp, &s) == TC_CRYPTO_FAIL) {\n    return -EINVAL;\n  }\n\n  sys_mem_swap(enc_data, 16);\n\n  BT_DBG(\"enc_data %s\", bt_hex(enc_data, 16));\n\n  return 0;\n}\n\nint bt_encrypt_be(const u8_t key[16], const u8_t plaintext[16], u8_t enc_data[16]) {\n  struct tc_aes_key_sched_struct s;\n\n  BT_DBG(\"key %s\", bt_hex(key, 16));\n  BT_DBG(\"plaintext %s\", bt_hex(plaintext, 16));\n\n  if (tc_aes128_set_encrypt_key(&s, key) == TC_CRYPTO_FAIL) {\n    return -EINVAL;\n  }\n\n  if (tc_aes_encrypt(enc_data, plaintext, &s) == TC_CRYPTO_FAIL) {\n    return -EINVAL;\n  }\n\n  BT_DBG(\"enc_data %s\", bt_hex(enc_data, 16));\n\n  return 0;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/crypto.h",
    "content": "/*\n * Copyright (c) 2016-2017 Nordic Semiconductor ASA\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nint prng_init(void);\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/ecc.h",
    "content": "/* ecc.h - ECDH helpers */\n#include \"types.h\"\n/*\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*  @brief Container for public key callback */\nstruct bt_pub_key_cb {\n  /** @brief Callback type for Public Key generation.\n   *\n   *  Used to notify of the local public key or that the local key is not\n   *  available (either because of a failure to read it or because it is\n   *  being regenerated).\n   *\n   *  @param key The local public key, or NULL in case of no key.\n   */\n  void (*func)(const uint8_t key[64]);\n\n  struct bt_pub_key_cb *_next;\n};\n\n/*  @brief Generate a new Public Key.\n *\n *  Generate a new ECC Public Key. The callback will persist even after the\n *  key has been generated, and will be used to notify of new generation\n *  processes (NULL as key).\n *\n *  @param cb Callback to notify the new key, or NULL to request an update\n *            without registering any new callback.\n *\n *  @return Zero on success or negative error code otherwise\n */\nint bt_pub_key_gen(struct bt_pub_key_cb *cb);\n\n/*  @brief Get the current Public Key.\n *\n *  Get the current ECC Public Key.\n *\n *  @return Current key, or NULL if not available.\n */\nconst uint8_t *bt_pub_key_get(void);\n\n/*  @typedef bt_dh_key_cb_t\n *  @brief Callback type for DH Key calculation.\n *\n *  Used to notify of the calculated DH Key.\n *\n *  @param key The DH Key, or NULL in case of failure.\n */\ntypedef void (*bt_dh_key_cb_t)(const uint8_t key[32]);\n\n/*  @brief Calculate a DH Key from a remote Public Key.\n *\n *  Calculate a DH Key from the remote Public Key.\n *\n *  @param remote_pk Remote Public Key.\n *  @param cb Callback to notify the calculated key.\n *\n *  @return Zero on success or negative error code otherwise\n */\nint bt_dh_key_gen(const uint8_t remote_pk[64], bt_dh_key_cb_t cb);\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/gatt.c",
    "content": "/* gatt.c - Generic Attribute Profile handling */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <atomic.h>\n#include <errno.h>\n#include <misc/byteorder.h>\n#include <misc/util.h>\n#include <stdbool.h>\n#include <stdlib.h>\n#include <string.h>\n#include <zephyr.h>\n\n#include <settings.h>\n\n#if defined(CONFIG_BT_GATT_CACHING)\n#include <constants.h>\n#include <utils.h>\n\n#include <cmac_mode.h>\n\n#include <aes.h>\n#include <ccm_mode.h>\n#endif /* CONFIG_BT_GATT_CACHING */\n#include <bluetooth.h>\n#include <gatt.h>\n#include <hci_driver.h>\n#include <hci_host.h>\n#include <uuid.h>\n#if defined(BFLB_BLE)\n#include \"ble_config.h\"\n#include <util.h>\n#endif\n\n#if defined(CONFIG_BT_STACK_PTS)\nextern u8_t event_flag;\n#endif\n\n#ifdef BT_DBG_ENABLED\n#undef BT_DBG_ENABLED\n#define BT_DBG_ENABLED IS_ENABLED(CONFIG_BT_DEBUG_GATT)\n#else\n#define BT_DBG_ENABLED IS_ENABLED(CONFIG_BT_DEBUG_GATT)\n#endif\n\n#define LOG_MODULE_NAME bt_gatt\n#include \"log.h\"\n\n#include \"hci_core.h\"\n\n#include \"conn_internal.h\"\n#include \"keys.h\"\n#include \"l2cap_internal.h\"\n#include \"settings.h\"\n#include \"smp.h\"\n\n#include \"att_internal.h\"\n\n#include \"gatt_internal.h\"\n\n#define SC_TIMEOUT      K_MSEC(10)\n#define CCC_STORE_DELAY K_SECONDS(1)\n\n#define DB_HASH_TIMEOUT K_MSEC(10)\n\nstatic u16_t last_static_handle;\n\n/* Persistent storage format for GATT CCC */\nstruct ccc_store {\n  u16_t handle;\n  u16_t value;\n};\n\n#if defined(CONFIG_BT_GATT_CLIENT)\nstatic sys_slist_t subscriptions;\n#if defined(BFLB_BLE_NOTIFY_ALL)\nbt_notification_all_cb_t gatt_notify_all_cb;\n#endif\n#if defined(BFLB_BLE_DISCOVER_ONGOING)\nuint8_t    discover_ongoing = BT_GATT_ITER_STOP;\nextern int bt_gatt_discover_continue(struct bt_conn *conn, struct bt_gatt_discover_params *params);\n#endif\n#endif /* CONFIG_BT_GATT_CLIENT */\n\nstatic const u16_t gap_appearance = CONFIG_BT_DEVICE_APPEARANCE;\n\n#if defined(CONFIG_BT_GATT_DYNAMIC_DB)\nstatic sys_slist_t db;\n#endif /* CONFIG_BT_GATT_DYNAMIC_DB */\n\nstatic atomic_t init;\n\n#if defined(BFLB_BLE_MTU_CHANGE_CB)\nbt_gatt_mtu_changed_cb_t gatt_mtu_changed_cb;\n#endif\n\nstatic ssize_t read_name(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  const char *name = bt_get_name();\n\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, name, strlen(name));\n}\n\n#if defined(CONFIG_BT_DEVICE_NAME_GATT_WRITABLE)\n\nstatic ssize_t write_name(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, u16_t len, u16_t offset, u8_t flags) {\n  char value[CONFIG_BT_DEVICE_NAME_MAX] = {};\n\n  if (offset) {\n    return BT_GATT_ERR(BT_ATT_ERR_INVALID_OFFSET);\n  }\n\n  if (len >= sizeof(value)) {\n    return BT_GATT_ERR(BT_ATT_ERR_INVALID_ATTRIBUTE_LEN);\n  }\n\n  memcpy(value, buf, len);\n\n  bt_set_name(value);\n\n  return len;\n}\n\n#endif /* CONFIG_BT_DEVICE_NAME_GATT_WRITABLE */\n\nstatic ssize_t read_appearance(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  u16_t appearance = sys_cpu_to_le16(gap_appearance);\n\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, &appearance, sizeof(appearance));\n}\n\n#if defined(CONFIG_BT_GAP_PERIPHERAL_PREF_PARAMS)\n/* This checks if the range entered is valid */\nBUILD_ASSERT(!(CONFIG_BT_PERIPHERAL_PREF_MIN_INT > 3200 && CONFIG_BT_PERIPHERAL_PREF_MIN_INT < 0xffff));\nBUILD_ASSERT(!(CONFIG_BT_PERIPHERAL_PREF_MAX_INT > 3200 && CONFIG_BT_PERIPHERAL_PREF_MAX_INT < 0xffff));\nBUILD_ASSERT(!(CONFIG_BT_PERIPHERAL_PREF_TIMEOUT > 3200 && CONFIG_BT_PERIPHERAL_PREF_TIMEOUT < 0xffff));\nBUILD_ASSERT((CONFIG_BT_PERIPHERAL_PREF_MIN_INT == 0xffff) || (CONFIG_BT_PERIPHERAL_PREF_MIN_INT <= CONFIG_BT_PERIPHERAL_PREF_MAX_INT));\n\nstatic ssize_t read_ppcp(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  struct __packed {\n    u16_t min_int;\n    u16_t max_int;\n    u16_t latency;\n    u16_t timeout;\n  } ppcp;\n\n  ppcp.min_int = sys_cpu_to_le16(CONFIG_BT_PERIPHERAL_PREF_MIN_INT);\n  ppcp.max_int = sys_cpu_to_le16(CONFIG_BT_PERIPHERAL_PREF_MAX_INT);\n  ppcp.latency = sys_cpu_to_le16(CONFIG_BT_PERIPHERAL_PREF_SLAVE_LATENCY);\n  ppcp.timeout = sys_cpu_to_le16(CONFIG_BT_PERIPHERAL_PREF_TIMEOUT);\n\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, &ppcp, sizeof(ppcp));\n}\n#endif\n\n#if defined(CONFIG_BT_CENTRAL) && defined(CONFIG_BT_PRIVACY)\nstatic ssize_t read_central_addr_res(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  u8_t central_addr_res = BT_GATT_CENTRAL_ADDR_RES_SUPP;\n\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, &central_addr_res, sizeof(central_addr_res));\n}\n#endif /* CONFIG_BT_CENTRAL && CONFIG_BT_PRIVACY */\n\n#if defined(BFLB_BLE_DISABLE_STATIC_ATTR)\nstatic struct bt_gatt_attr gap_attrs[] = {\n#else\nBT_GATT_SERVICE_DEFINE(_2_gap_svc,\n#endif\n    BT_GATT_PRIMARY_SERVICE(BT_UUID_GAP),\n\n#if defined(CONFIG_BT_DEVICE_NAME_GATT_WRITABLE)\n    /* Require pairing for writes to device name */\n    BT_GATT_CHARACTERISTIC(BT_UUID_GAP_DEVICE_NAME, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE, read_name, write_name, bt_dev.name),\n#else\n                       BT_GATT_CHARACTERISTIC(BT_UUID_GAP_DEVICE_NAME, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_name, NULL, NULL),\n#endif /* CONFIG_BT_DEVICE_NAME_GATT_WRITABLE */\n    BT_GATT_CHARACTERISTIC(BT_UUID_GAP_APPEARANCE, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_appearance, NULL, NULL),\n#if defined(CONFIG_BT_CENTRAL) && defined(CONFIG_BT_PRIVACY)\n    BT_GATT_CHARACTERISTIC(BT_UUID_CENTRAL_ADDR_RES, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_central_addr_res, NULL, NULL),\n#endif /* CONFIG_BT_CENTRAL && CONFIG_BT_PRIVACY */\n#if defined(CONFIG_BT_GAP_PERIPHERAL_PREF_PARAMS)\n    BT_GATT_CHARACTERISTIC(BT_UUID_GAP_PPCP, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_ppcp, NULL, NULL),\n#endif\n#if defined(BFLB_BLE_DISABLE_STATIC_ATTR)\n};\n#else\n);\n#endif\n\n#if defined(BFLB_BLE_DISABLE_STATIC_ATTR)\nstatic struct bt_gatt_service gap_svc = BT_GATT_SERVICE(gap_attrs);\n#endif\n\nstruct sc_data {\n  u16_t start;\n  u16_t end;\n} __packed;\n\nstruct gatt_sc_cfg {\n  u8_t         id;\n  bt_addr_le_t peer;\n  struct {\n    u16_t start;\n    u16_t end;\n  } data;\n};\n\n#define SC_CFG_MAX (CONFIG_BT_MAX_PAIRED + CONFIG_BT_MAX_CONN)\nstatic struct gatt_sc_cfg sc_cfg[SC_CFG_MAX];\nBUILD_ASSERT(sizeof(struct sc_data) == sizeof(sc_cfg[0].data));\n\nstatic struct gatt_sc_cfg *find_sc_cfg(u8_t id, bt_addr_le_t *addr) {\n  BT_DBG(\"id: %u, addr: %s\", id, bt_addr_le_str(addr));\n\n  for (size_t i = 0; i < ARRAY_SIZE(sc_cfg); i++) {\n    if (id == sc_cfg[i].id && !bt_addr_le_cmp(&sc_cfg[i].peer, addr)) {\n      return &sc_cfg[i];\n    }\n  }\n\n  return NULL;\n}\n\nstatic void sc_store(struct gatt_sc_cfg *cfg) {\n  char key[BT_SETTINGS_KEY_MAX];\n  int  err;\n\n  if (cfg->id) {\n    char id_str[4];\n\n    u8_to_dec(id_str, sizeof(id_str), cfg->id);\n    bt_settings_encode_key(key, sizeof(key), \"sc\", &cfg->peer, id_str);\n  } else {\n    bt_settings_encode_key(key, sizeof(key), \"sc\", &cfg->peer, NULL);\n  }\n\n  err = settings_save_one(key, (u8_t *)&cfg->data, sizeof(cfg->data));\n  if (err) {\n    BT_ERR(\"failed to store SC (err %d)\", err);\n    return;\n  }\n\n  BT_DBG(\"stored SC for %s (%s, 0x%04x-0x%04x)\", bt_addr_le_str(&cfg->peer), log_strdup(key), cfg->data.start, cfg->data.end);\n}\n\nstatic void sc_clear(struct gatt_sc_cfg *cfg) {\n  BT_DBG(\"peer %s\", bt_addr_le_str(&cfg->peer));\n\n  if (IS_ENABLED(CONFIG_BT_SETTINGS)) {\n    bool modified = false;\n\n    if (cfg->data.start || cfg->data.end) {\n      modified = true;\n    }\n\n    if (modified && bt_addr_le_is_bonded(cfg->id, &cfg->peer)) {\n      char key[BT_SETTINGS_KEY_MAX];\n      int  err;\n\n      if (cfg->id) {\n        char id_str[4];\n\n        u8_to_dec(id_str, sizeof(id_str), cfg->id);\n        bt_settings_encode_key(key, sizeof(key), \"sc\", &cfg->peer, id_str);\n      } else {\n        bt_settings_encode_key(key, sizeof(key), \"sc\", &cfg->peer, NULL);\n      }\n\n      err = settings_delete(key);\n      if (err) {\n        BT_ERR(\"failed to delete SC (err %d)\", err);\n      } else {\n        BT_DBG(\"deleted SC for %s (%s)\", bt_addr_le_str(&cfg->peer), log_strdup(key));\n      }\n    }\n  }\n\n  memset(cfg, 0, sizeof(*cfg));\n}\n\nstatic void sc_reset(struct gatt_sc_cfg *cfg) {\n  BT_DBG(\"peer %s\", bt_addr_le_str(&cfg->peer));\n\n  memset(&cfg->data, 0, sizeof(cfg->data));\n\n  if (IS_ENABLED(CONFIG_BT_SETTINGS)) {\n    sc_store(cfg);\n  }\n}\n\nstatic bool update_range(u16_t *start, u16_t *end, u16_t new_start, u16_t new_end) {\n  BT_DBG(\"start 0x%04x end 0x%04x new_start 0x%04x new_end 0x%04x\", *start, *end, new_start, new_end);\n\n  /* Check if inside existing range */\n  if (new_start >= *start && new_end <= *end) {\n    return false;\n  }\n\n  /* Update range */\n  if (*start > new_start) {\n    *start = new_start;\n  }\n\n  if (*end < new_end) {\n    *end = new_end;\n  }\n\n  return true;\n}\n\nstatic void sc_save(u8_t id, bt_addr_le_t *peer, u16_t start, u16_t end) {\n  struct gatt_sc_cfg *cfg;\n  bool                modified = false;\n\n  BT_DBG(\"peer %s start 0x%04x end 0x%04x\", bt_addr_le_str(peer), start, end);\n\n  cfg = find_sc_cfg(id, peer);\n  if (!cfg) {\n    /* Find and initialize a free sc_cfg entry */\n    cfg = find_sc_cfg(BT_ID_DEFAULT, BT_ADDR_LE_ANY);\n    if (!cfg) {\n      BT_ERR(\"unable to save SC: no cfg left\");\n      return;\n    }\n\n    cfg->id = id;\n    bt_addr_le_copy(&cfg->peer, peer);\n  }\n\n  /* Check if there is any change stored */\n  if (!(cfg->data.start || cfg->data.end)) {\n    cfg->data.start = start;\n    cfg->data.end   = end;\n    modified        = true;\n    goto done;\n  }\n\n  modified = update_range(&cfg->data.start, &cfg->data.end, start, end);\n\ndone:\n  if (IS_ENABLED(CONFIG_BT_SETTINGS) && modified && bt_addr_le_is_bonded(cfg->id, &cfg->peer)) {\n    sc_store(cfg);\n  }\n}\n\nstatic bool sc_ccc_cfg_write(struct bt_conn *conn, const struct bt_gatt_attr *attr, u16_t value) {\n  BT_DBG(\"value 0x%04x\", value);\n\n  if (value == BT_GATT_CCC_INDICATE) {\n    /* Create a new SC configuration entry if subscribed */\n    sc_save(conn->id, &conn->le.dst, 0, 0);\n  } else {\n    struct gatt_sc_cfg *cfg;\n\n    /* Clear SC configuration if unsubscribed */\n    cfg = find_sc_cfg(conn->id, &conn->le.dst);\n    if (cfg) {\n      sc_clear(cfg);\n    }\n  }\n\n  return true;\n}\n\nstatic struct _bt_gatt_ccc sc_ccc = BT_GATT_CCC_INITIALIZER(NULL, sc_ccc_cfg_write, NULL);\n\n#if defined(CONFIG_BT_GATT_CACHING)\nenum {\n  CF_CHANGE_AWARE, /* Client is changed aware */\n  CF_OUT_OF_SYNC,  /* Client is out of sync */\n\n  /* Total number of flags - must be at the end of the enum */\n  CF_NUM_FLAGS,\n};\n\n#define CF_ROBUST_CACHING(_cfg) (_cfg->data[0] & BIT(0))\n\nstruct gatt_cf_cfg {\n  u8_t         id;\n  bt_addr_le_t peer;\n  u8_t         data[1];\n  ATOMIC_DEFINE(flags, CF_NUM_FLAGS);\n};\n\n#define CF_CFG_MAX (CONFIG_BT_MAX_PAIRED + CONFIG_BT_MAX_CONN)\nstatic struct gatt_cf_cfg cf_cfg[CF_CFG_MAX] = {};\n\nstatic struct gatt_cf_cfg *find_cf_cfg(struct bt_conn *conn) {\n  int i;\n\n  for (i = 0; i < ARRAY_SIZE(cf_cfg); i++) {\n    if (!conn) {\n      if (!bt_addr_le_cmp(&cf_cfg[i].peer, BT_ADDR_LE_ANY)) {\n        return &cf_cfg[i];\n      }\n    } else if (!bt_conn_addr_le_cmp(conn, &cf_cfg[i].peer)) {\n      return &cf_cfg[i];\n    }\n  }\n\n  return NULL;\n}\n\nstatic ssize_t cf_read(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  struct gatt_cf_cfg *cfg;\n  u8_t                data[1] = {};\n\n  cfg = find_cf_cfg(conn);\n  if (cfg) {\n    memcpy(data, cfg->data, sizeof(data));\n  }\n\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, data, sizeof(data));\n}\n\nstatic bool cf_set_value(struct gatt_cf_cfg *cfg, const u8_t *value, u16_t len) {\n  u16_t i;\n  u8_t  last_byte = 1U;\n  u8_t  last_bit  = 1U;\n\n  /* Validate the bits */\n  for (i = 0U; i < len && i < last_byte; i++) {\n    u8_t chg_bits = value[i] ^ cfg->data[i];\n    u8_t bit;\n\n    for (bit = 0U; bit < last_bit; bit++) {\n      /* A client shall never clear a bit it has set */\n      if ((BIT(bit) & chg_bits) && (BIT(bit) & cfg->data[i])) {\n        return false;\n      }\n    }\n  }\n\n  /* Set the bits for each octect */\n  for (i = 0U; i < len && i < last_byte; i++) {\n    cfg->data[i] |= value[i] & ((1 << last_bit) - 1);\n    BT_DBG(\"byte %u: data 0x%02x value 0x%02x\", i, cfg->data[i], value[i]);\n  }\n\n  return true;\n}\n\nstatic ssize_t cf_write(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, u16_t len, u16_t offset, u8_t flags) {\n  struct gatt_cf_cfg *cfg;\n  const u8_t         *value = buf;\n\n  if (offset > sizeof(cfg->data)) {\n    return BT_GATT_ERR(BT_ATT_ERR_INVALID_OFFSET);\n  }\n\n  if (offset + len > sizeof(cfg->data)) {\n    return BT_GATT_ERR(BT_ATT_ERR_INVALID_ATTRIBUTE_LEN);\n  }\n\n  cfg = find_cf_cfg(conn);\n  if (!cfg) {\n    cfg = find_cf_cfg(NULL);\n  }\n\n  if (!cfg) {\n    BT_WARN(\"No space to store Client Supported Features\");\n    return BT_GATT_ERR(BT_ATT_ERR_INSUFFICIENT_RESOURCES);\n  }\n\n  BT_DBG(\"handle 0x%04x len %u\", attr->handle, len);\n\n  if (!cf_set_value(cfg, value, len)) {\n    return BT_GATT_ERR(BT_ATT_ERR_VALUE_NOT_ALLOWED);\n  }\n\n  bt_addr_le_copy(&cfg->peer, &conn->le.dst);\n  atomic_set_bit(cfg->flags, CF_CHANGE_AWARE);\n\n  return len;\n}\n\nstatic u8_t           db_hash[16];\nstruct k_delayed_work db_hash_work;\n\nstruct gen_hash_state {\n  struct tc_cmac_struct state;\n  int                   err;\n};\n\nstatic u8_t gen_hash_m(const struct bt_gatt_attr *attr, void *user_data) {\n  struct gen_hash_state *state = user_data;\n  struct bt_uuid_16     *u16;\n  u8_t                   data[16];\n  ssize_t                len;\n  u16_t                  value;\n\n  if (attr->uuid->type != BT_UUID_TYPE_16)\n    return BT_GATT_ITER_CONTINUE;\n\n  u16 = (struct bt_uuid_16 *)attr->uuid;\n\n  switch (u16->val) {\n  /* Attributes to hash: handle + UUID + value */\n  case 0x2800: /* GATT Primary Service */\n  case 0x2801: /* GATT Secondary Service */\n  case 0x2802: /* GATT Include Service */\n  case 0x2803: /* GATT Characteristic */\n  case 0x2900: /* GATT Characteristic Extended Properties */\n    value = sys_cpu_to_le16(attr->handle);\n    if (tc_cmac_update(&state->state, (uint8_t *)&value, sizeof(attr->handle)) == TC_CRYPTO_FAIL) {\n      state->err = -EINVAL;\n      return BT_GATT_ITER_STOP;\n    }\n\n    value = sys_cpu_to_le16(u16->val);\n    if (tc_cmac_update(&state->state, (uint8_t *)&value, sizeof(u16->val)) == TC_CRYPTO_FAIL) {\n      state->err = -EINVAL;\n      return BT_GATT_ITER_STOP;\n    }\n\n    len = attr->read(NULL, attr, data, sizeof(data), 0);\n    if (len < 0) {\n      state->err = len;\n      return BT_GATT_ITER_STOP;\n    }\n\n    if (tc_cmac_update(&state->state, data, len) == TC_CRYPTO_FAIL) {\n      state->err = -EINVAL;\n      return BT_GATT_ITER_STOP;\n    }\n\n    break;\n  /* Attributes to hash: handle + UUID */\n  case 0x2901: /* GATT Characteristic User Descriptor */\n  case 0x2902: /* GATT Client Characteristic Configuration */\n  case 0x2903: /* GATT Server Characteristic Configuration */\n  case 0x2904: /* GATT Characteristic Presentation Format */\n  case 0x2905: /* GATT Characteristic Aggregated Format */\n    value = sys_cpu_to_le16(attr->handle);\n    if (tc_cmac_update(&state->state, (uint8_t *)&value, sizeof(attr->handle)) == TC_CRYPTO_FAIL) {\n      state->err = -EINVAL;\n      return BT_GATT_ITER_STOP;\n    }\n\n    value = sys_cpu_to_le16(u16->val);\n    if (tc_cmac_update(&state->state, (uint8_t *)&value, sizeof(u16->val)) == TC_CRYPTO_FAIL) {\n      state->err = -EINVAL;\n      return BT_GATT_ITER_STOP;\n    }\n    break;\n  default:\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  return BT_GATT_ITER_CONTINUE;\n}\n\nstatic void db_hash_store(void) {\n  int err;\n\n  err = settings_save_one(\"bt/hash\", &db_hash, sizeof(db_hash));\n  if (err) {\n    BT_ERR(\"Failed to save Database Hash (err %d)\", err);\n  }\n\n  BT_DBG(\"Database Hash stored\");\n}\n\nstatic void db_hash_gen(bool store) {\n  u8_t                           key[16] = {};\n  struct tc_aes_key_sched_struct sched;\n  struct gen_hash_state          state;\n\n  if (tc_cmac_setup(&state.state, key, &sched) == TC_CRYPTO_FAIL) {\n    BT_ERR(\"Unable to setup AES CMAC\");\n    return;\n  }\n\n  bt_gatt_foreach_attr(0x0001, 0xffff, gen_hash_m, &state);\n\n  if (tc_cmac_final(db_hash, &state.state) == TC_CRYPTO_FAIL) {\n    BT_ERR(\"Unable to calculate hash\");\n    return;\n  }\n\n  /**\n   * Core 5.1 does not state the endianess of the hash.\n   * However Vol 3, Part F, 3.3.1 says that multi-octet Characteristic\n   * Values shall be LE unless otherwise defined. PTS expects hash to be\n   * in little endianess as well. bt_smp_aes_cmac calculates the hash in\n   * big endianess so we have to swap.\n   */\n  sys_mem_swap(db_hash, sizeof(db_hash));\n\n#if !defined(BFLB_BLE)\n  BT_HEXDUMP_DBG(db_hash, sizeof(db_hash), \"Hash: \");\n#endif\n\n  if (IS_ENABLED(CONFIG_BT_SETTINGS) && store) {\n    db_hash_store();\n  }\n}\n\nstatic void db_hash_process(struct k_work *work) { db_hash_gen(true); }\n\nstatic ssize_t db_hash_read(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  /* Check if db_hash is already pending in which case it shall be\n   * generated immediately instead of waiting the work to complete.\n   */\n  if (k_delayed_work_remaining_get(&db_hash_work)) {\n    k_delayed_work_cancel(&db_hash_work);\n    db_hash_gen(true);\n  }\n\n  /* BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part G page 2347:\n   * 2.5.2.1 Robust Caching\n   * A connected client becomes change-aware when...\n   * The client reads the Database Hash characteristic and then the server\n   * receives another ATT request from the client.\n   */\n  bt_gatt_change_aware(conn, true);\n\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, db_hash, sizeof(db_hash));\n}\n\nstatic void clear_cf_cfg(struct gatt_cf_cfg *cfg) {\n  bt_addr_le_copy(&cfg->peer, BT_ADDR_LE_ANY);\n  memset(cfg->data, 0, sizeof(cfg->data));\n  atomic_set(cfg->flags, 0);\n}\n\nstatic void remove_cf_cfg(struct bt_conn *conn) {\n  struct gatt_cf_cfg *cfg;\n\n  cfg = find_cf_cfg(conn);\n  if (!cfg) {\n    return;\n  }\n\n  /* BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part G page 2405:\n   * For clients with a trusted relationship, the characteristic value\n   * shall be persistent across connections. For clients without a\n   * trusted relationship the characteristic value shall be set to the\n   * default value at each connection.\n   */\n  if (!bt_addr_le_is_bonded(conn->id, &conn->le.dst)) {\n    clear_cf_cfg(cfg);\n  } else {\n    /* Update address in case it has changed */\n    bt_addr_le_copy(&cfg->peer, &conn->le.dst);\n  }\n}\n#endif /* CONFIG_BT_GATT_CACHING */\n\n#if defined(BFLB_BLE_DISABLE_STATIC_ATTR)\nstatic struct bt_gatt_attr gatt_attrs[] = {\n#else\nBT_GATT_SERVICE_DEFINE(_1_gatt_svc,\n#endif\n    BT_GATT_PRIMARY_SERVICE(BT_UUID_GATT),\n\n#if defined(CONFIG_BT_GATT_SERVICE_CHANGED)\n    /* Bluetooth 5.0, Vol3 Part G:\n     * The Service Changed characteristic Attribute Handle on the server\n     * shall not change if the server has a trusted relationship with any\n     * client.\n     */\n    BT_GATT_CHARACTERISTIC(BT_UUID_GATT_SC, BT_GATT_CHRC_INDICATE, BT_GATT_PERM_NONE, NULL, NULL, NULL),\n\n    BT_GATT_CCC_MANAGED(&sc_ccc, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE),\n\n#if defined(CONFIG_BT_GATT_CACHING)\n    BT_GATT_CHARACTERISTIC(BT_UUID_GATT_CLIENT_FEATURES, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE, cf_read, cf_write, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_GATT_DB_HASH, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, db_hash_read, NULL, NULL),\n#endif /* CONFIG_BT_GATT_CACHING */\n#endif /* CONFIG_BT_GATT_SERVICE_CHANGED */\n#if defined(BFLB_BLE_DISABLE_STATIC_ATTR)\n};\n#else\n);\n#endif\n\n#if defined(BFLB_BLE_DISABLE_STATIC_ATTR)\nstatic struct bt_gatt_service gatt_svc = BT_GATT_SERVICE(gatt_attrs);\n#endif\n\n#if defined(CONFIG_BT_GATT_DYNAMIC_DB)\nstatic u8_t found_attr(const struct bt_gatt_attr *attr, void *user_data) {\n  const struct bt_gatt_attr **found = user_data;\n\n  *found = attr;\n\n  return BT_GATT_ITER_STOP;\n}\n\nstatic const struct bt_gatt_attr *find_attr(uint16_t handle) {\n  const struct bt_gatt_attr *attr = NULL;\n\n  bt_gatt_foreach_attr(handle, handle, found_attr, &attr);\n\n  return attr;\n}\n\nstatic void gatt_insert(struct bt_gatt_service *svc, u16_t last_handle) {\n  struct bt_gatt_service *tmp, *prev = NULL;\n\n  if (last_handle == 0 || svc->attrs[0].handle > last_handle) {\n    sys_slist_append(&db, &svc->node);\n    return;\n  }\n\n  /* DB shall always have its service in ascending order */\n  SYS_SLIST_FOR_EACH_CONTAINER(&db, tmp, node) {\n    if (tmp->attrs[0].handle > svc->attrs[0].handle) {\n      if (prev) {\n        sys_slist_insert(&db, &prev->node, &svc->node);\n      } else {\n        sys_slist_prepend(&db, &svc->node);\n      }\n      return;\n    }\n\n    prev = tmp;\n  }\n}\n\nstatic int gatt_register(struct bt_gatt_service *svc) {\n  struct bt_gatt_service *last;\n  u16_t                   handle, last_handle;\n  struct bt_gatt_attr    *attrs = svc->attrs;\n  u16_t                   count = svc->attr_count;\n\n  if (sys_slist_is_empty(&db)) {\n    handle      = last_static_handle;\n    last_handle = 0;\n    goto populate;\n  }\n\n  last        = SYS_SLIST_PEEK_TAIL_CONTAINER(&db, last, node);\n  handle      = last->attrs[last->attr_count - 1].handle;\n  last_handle = handle;\n\npopulate:\n  /* Populate the handles and append them to the list */\n  for (; attrs && count; attrs++, count--) {\n    if (!attrs->handle) {\n      /* Allocate handle if not set already */\n      attrs->handle = ++handle;\n    } else if (attrs->handle > handle) {\n      /* Use existing handle if valid */\n      handle = attrs->handle;\n    } else if (find_attr(attrs->handle)) {\n      /* Service has conflicting handles */\n      BT_ERR(\"Unable to register handle 0x%04x\", attrs->handle);\n      return -EINVAL;\n    }\n\n    BT_DBG(\"attr %p handle 0x%04x uuid %s perm 0x%02x\", attrs, attrs->handle, bt_uuid_str(attrs->uuid), attrs->perm);\n  }\n\n  gatt_insert(svc, last_handle);\n\n  return 0;\n}\n#endif /* CONFIG_BT_GATT_DYNAMIC_DB */\n\nenum {\n  SC_RANGE_CHANGED,    /* SC range changed */\n  SC_INDICATE_PENDING, /* SC indicate pending */\n\n  /* Total number of flags - must be at the end of the enum */\n  SC_NUM_FLAGS,\n};\n\nstatic struct gatt_sc {\n  struct bt_gatt_indicate_params params;\n  u16_t                          start;\n  u16_t                          end;\n  struct k_delayed_work          work;\n  ATOMIC_DEFINE(flags, SC_NUM_FLAGS);\n} gatt_sc;\n\nstatic void sc_indicate_rsp(struct bt_conn *conn, const struct bt_gatt_attr *attr, u8_t err) {\n#if defined(CONFIG_BT_GATT_CACHING)\n  struct gatt_cf_cfg *cfg;\n#endif\n\n  BT_DBG(\"err 0x%02x\", err);\n\n  atomic_clear_bit(gatt_sc.flags, SC_INDICATE_PENDING);\n\n  /* Check if there is new change in the meantime */\n  if (atomic_test_bit(gatt_sc.flags, SC_RANGE_CHANGED)) {\n    /* Reschedule without any delay since it is waiting already */\n    k_delayed_work_submit(&gatt_sc.work, K_NO_WAIT);\n  }\n\n#if defined(CONFIG_BT_GATT_CACHING)\n  /* BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part G page 2347:\n   * 2.5.2.1 Robust Caching\n   * A connected client becomes change-aware when...\n   * The client receives and confirms a Service Changed indication.\n   */\n  cfg = find_cf_cfg(conn);\n  if (cfg && CF_ROBUST_CACHING(cfg)) {\n    atomic_set_bit(cfg->flags, CF_CHANGE_AWARE);\n    BT_DBG(\"%s change-aware\", bt_addr_le_str(&cfg->peer));\n  }\n#endif\n}\n\nstatic void sc_process(struct k_work *work) {\n  struct gatt_sc *sc = CONTAINER_OF(work, struct gatt_sc, work);\n  u16_t           sc_range[2];\n\n  __ASSERT(!atomic_test_bit(sc->flags, SC_INDICATE_PENDING), \"Indicate already pending\");\n\n  BT_DBG(\"start 0x%04x end 0x%04x\", sc->start, sc->end);\n\n  sc_range[0] = sys_cpu_to_le16(sc->start);\n  sc_range[1] = sys_cpu_to_le16(sc->end);\n\n  atomic_clear_bit(sc->flags, SC_RANGE_CHANGED);\n  sc->start = 0U;\n  sc->end   = 0U;\n#if defined(BFLB_BLE_DISABLE_STATIC_ATTR)\n  sc->params.attr = &gatt_attrs[2];\n#else\n  sc->params.attr = &_1_gatt_svc.attrs[2];\n#endif\n  sc->params.func = sc_indicate_rsp;\n  sc->params.data = &sc_range[0];\n  sc->params.len  = sizeof(sc_range);\n\n  if (bt_gatt_indicate(NULL, &sc->params)) {\n    /* No connections to indicate */\n    return;\n  }\n\n  atomic_set_bit(sc->flags, SC_INDICATE_PENDING);\n}\n\n#if defined(CONFIG_BT_STACK_PTS)\nint service_change_test(struct bt_gatt_indicate_params *params, const struct bt_conn *con) {\n  u16_t sc_range[2];\n\n  if (!params->attr) {\n#if defined(BFLB_BLE_DISABLE_STATIC_ATTR)\n    params->attr = &gatt_attrs[2];\n#else\n    params->attr = &_1_gatt_svc.attrs[2];\n#endif\n  }\n  sc_range[0] = 0x000e;\n  sc_range[1] = 0x001e;\n\n  params->data = &sc_range[0];\n  params->len  = sizeof(sc_range);\n\n  return bt_gatt_indicate(con, params);\n}\n\n#endif\n\n#if defined(CONFIG_BT_SETTINGS_CCC_STORE_ON_WRITE)\nstatic struct gatt_ccc_store {\n  struct bt_conn       *conn_list[CONFIG_BT_MAX_CONN];\n  struct k_delayed_work work;\n} gatt_ccc_store;\n\nstatic bool gatt_ccc_conn_is_queued(struct bt_conn *conn) { return (conn == gatt_ccc_store.conn_list[bt_conn_index(conn)]); }\n\nstatic void gatt_ccc_conn_unqueue(struct bt_conn *conn) {\n  u8_t index = bt_conn_index(conn);\n\n  if (gatt_ccc_store.conn_list[index] != NULL) {\n    bt_conn_unref(gatt_ccc_store.conn_list[index]);\n    gatt_ccc_store.conn_list[index] = NULL;\n  }\n}\n\nstatic bool gatt_ccc_conn_queue_is_empty(void) {\n  for (size_t i = 0; i < CONFIG_BT_MAX_CONN; i++) {\n    if (gatt_ccc_store.conn_list[i]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nstatic void ccc_delayed_store(struct k_work *work) {\n  struct gatt_ccc_store *ccc_store = CONTAINER_OF(work, struct gatt_ccc_store, work);\n\n  for (size_t i = 0; i < CONFIG_BT_MAX_CONN; i++) {\n    struct bt_conn *conn = ccc_store->conn_list[i];\n\n    if (!conn) {\n      continue;\n    }\n\n    if (bt_addr_le_is_bonded(conn->id, &conn->le.dst)) {\n      bt_gatt_store_ccc(conn->id, &conn->le.dst);\n      bt_conn_unref(conn);\n      ccc_store->conn_list[i] = NULL;\n    }\n  }\n}\n#endif\n\nvoid bt_gatt_init(void) {\n  if (!atomic_cas(&init, 0, 1)) {\n    return;\n  }\n\n#if defined(BFLB_BLE_DISABLE_STATIC_ATTR)\n  /* Register mandatory services */\n  gatt_register(&gap_svc);\n  gatt_register(&gatt_svc);\n\n#else\n  Z_STRUCT_SECTION_FOREACH(bt_gatt_service_static, svc) { last_static_handle += svc->attr_count; }\n#endif\n\n#if defined(CONFIG_BT_GATT_CACHING)\n  k_delayed_work_init(&db_hash_work, db_hash_process);\n\n  /* Submit work to Generate initial hash as there could be static\n   * services already in the database.\n   */\n  k_delayed_work_submit(&db_hash_work, DB_HASH_TIMEOUT);\n#endif /* CONFIG_BT_GATT_CACHING */\n\n  if (IS_ENABLED(CONFIG_BT_GATT_SERVICE_CHANGED)) {\n    k_delayed_work_init(&gatt_sc.work, sc_process);\n    if (IS_ENABLED(CONFIG_BT_SETTINGS)) {\n      /* Make sure to not send SC indications until SC\n       * settings are loaded\n       */\n      atomic_set_bit(gatt_sc.flags, SC_INDICATE_PENDING);\n    }\n  }\n\n#if defined(CONFIG_BT_SETTINGS_CCC_STORE_ON_WRITE)\n  k_delayed_work_init(&gatt_ccc_store.work, ccc_delayed_store);\n#endif\n}\n\n#if defined(BFLB_BLE)\nvoid bt_gatt_deinit(void) {\n#if defined(CONFIG_BT_GATT_CACHING)\n  k_delayed_work_del_timer(&db_hash_work);\n#endif\n\n  if (IS_ENABLED(CONFIG_BT_GATT_SERVICE_CHANGED)) {\n    k_delayed_work_del_timer(&gatt_sc.work);\n  }\n\n#if defined(CONFIG_BT_SETTINGS_CCC_STORE_ON_WRITE)\n  k_delayed_work_del_timer(&gatt_ccc_store.work);\n#endif\n}\n#endif\n\n#if defined(CONFIG_BT_GATT_DYNAMIC_DB) || (defined(CONFIG_BT_GATT_CACHING) && defined(CONFIG_BT_SETTINGS))\nstatic void sc_indicate(u16_t start, u16_t end) {\n  BT_DBG(\"start 0x%04x end 0x%04x\", start, end);\n\n#if defined(BFLB_BLE_PATCH_SET_SCRANGE_CHAGD_ONLY_IN_CONNECTED_STATE)\n  struct bt_conn *conn = bt_conn_lookup_state_le(NULL, BT_CONN_CONNECTED);\n  if (conn) {\n#endif\n    if (!atomic_test_and_set_bit(gatt_sc.flags, SC_RANGE_CHANGED)) {\n      gatt_sc.start = start;\n      gatt_sc.end   = end;\n      goto submit;\n    }\n#if defined(BFLB_BLE_PATCH_SET_SCRANGE_CHAGD_ONLY_IN_CONNECTED_STATE)\n  }\n#endif\n\n  if (!update_range(&gatt_sc.start, &gatt_sc.end, start, end)) {\n    return;\n  }\n\nsubmit:\n  if (atomic_test_bit(gatt_sc.flags, SC_INDICATE_PENDING)) {\n    BT_DBG(\"indicate pending, waiting until complete...\");\n    return;\n  }\n\n#if defined(BFLB_BLE_PATCH_SET_SCRANGE_CHAGD_ONLY_IN_CONNECTED_STATE)\n  if (conn) {\n#endif\n    /* Reschedule since the range has changed */\n    k_delayed_work_submit(&gatt_sc.work, SC_TIMEOUT);\n#if defined(BFLB_BLE_PATCH_SET_SCRANGE_CHAGD_ONLY_IN_CONNECTED_STATE)\n    bt_conn_unref(conn);\n  }\n#endif\n}\n#endif /* BT_GATT_DYNAMIC_DB || (BT_GATT_CACHING && BT_SETTINGS) */\n\n#if defined(CONFIG_BT_GATT_DYNAMIC_DB)\nstatic void db_changed(void) {\n#if defined(CONFIG_BT_GATT_CACHING)\n  int i;\n\n  k_delayed_work_submit(&db_hash_work, DB_HASH_TIMEOUT);\n\n  for (i = 0; i < ARRAY_SIZE(cf_cfg); i++) {\n    struct gatt_cf_cfg *cfg = &cf_cfg[i];\n\n    if (!bt_addr_le_cmp(&cfg->peer, BT_ADDR_LE_ANY)) {\n      continue;\n    }\n\n    if (CF_ROBUST_CACHING(cfg)) {\n      /* Core Spec 5.1 | Vol 3, Part G, 2.5.2.1 Robust Caching\n       *... the database changes again before the client\n       * becomes change-aware in which case the error response\n       * shall be sent again.\n       */\n      atomic_clear_bit(cfg->flags, CF_OUT_OF_SYNC);\n      if (atomic_test_and_clear_bit(cfg->flags, CF_CHANGE_AWARE)) {\n        BT_DBG(\"%s change-unaware\", bt_addr_le_str(&cfg->peer));\n      }\n    }\n  }\n#endif\n}\n\nint bt_gatt_service_register(struct bt_gatt_service *svc) {\n  int err;\n\n  __ASSERT(svc, \"invalid parameters\\n\");\n  __ASSERT(svc->attrs, \"invalid parameters\\n\");\n  __ASSERT(svc->attr_count, \"invalid parameters\\n\");\n\n  /* Init GATT core services */\n  bt_gatt_init();\n\n  /* Do no allow to register mandatory services twice */\n  if (!bt_uuid_cmp(svc->attrs[0].uuid, BT_UUID_GAP) || !bt_uuid_cmp(svc->attrs[0].uuid, BT_UUID_GATT)) {\n    return -EALREADY;\n  }\n\n  err = gatt_register(svc);\n  if (err < 0) {\n    return err;\n  }\n\n  sc_indicate(svc->attrs[0].handle, svc->attrs[svc->attr_count - 1].handle);\n\n  db_changed();\n\n  return 0;\n}\n\nint bt_gatt_service_unregister(struct bt_gatt_service *svc) {\n  __ASSERT(svc, \"invalid parameters\\n\");\n\n  if (!sys_slist_find_and_remove(&db, &svc->node)) {\n    return -ENOENT;\n  }\n\n  sc_indicate(svc->attrs[0].handle, svc->attrs[svc->attr_count - 1].handle);\n\n  db_changed();\n\n  return 0;\n}\n#endif /* CONFIG_BT_GATT_DYNAMIC_DB */\n\nssize_t bt_gatt_attr_read(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t buf_len, u16_t offset, const void *value, u16_t value_len) {\n  u16_t len;\n#if defined(CONFIG_BT_STACK_PTS)\n  u8_t *data = NULL;\n  u8_t  i    = 0;\n#endif\n\n  if (offset > value_len) {\n    return BT_GATT_ERR(BT_ATT_ERR_INVALID_OFFSET);\n  }\n\n  len = MIN(buf_len, value_len - offset);\n\n  BT_DBG(\"handle 0x%04x offset %u length %u\", attr->handle, offset, len);\n\n  memcpy(buf, (u8_t *)value + offset, len);\n\n#if defined(CONFIG_BT_STACK_PTS)\n  /* PTS sends a request to iut read all primary services it contains.\n   * Set event flags to avoid comflicts when other test cases need to add reference codes.\n   */\n  if (event_flag == att_read_by_group_type_ind) {\n    data = (u8_t *)buf;\n    for (i = 0; i < len; i++) {\n      BT_PTS(\"%s:handle = [0x%04x], data[%d] = [0x%x]\\r\\n\", __func__, attr->handle, i, data[i]);\n    }\n  }\n#endif\n\n  return len;\n}\n\nssize_t bt_gatt_attr_read_service(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  struct bt_uuid *uuid = attr->user_data;\n\n  if (uuid->type == BT_UUID_TYPE_16) {\n    u16_t uuid16 = sys_cpu_to_le16(BT_UUID_16(uuid)->val);\n\n    return bt_gatt_attr_read(conn, attr, buf, len, offset, &uuid16, 2);\n  }\n\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, BT_UUID_128(uuid)->val, 16);\n}\n\nstruct gatt_incl {\n  u16_t start_handle;\n  u16_t end_handle;\n  u16_t uuid16;\n} __packed;\n\nstatic u8_t get_service_handles(const struct bt_gatt_attr *attr, void *user_data) {\n  struct gatt_incl *include = user_data;\n\n  /* Stop if attribute is a service */\n  if (!bt_uuid_cmp(attr->uuid, BT_UUID_GATT_PRIMARY) || !bt_uuid_cmp(attr->uuid, BT_UUID_GATT_SECONDARY)) {\n    return BT_GATT_ITER_STOP;\n  }\n\n  include->end_handle = attr->handle;\n\n  return BT_GATT_ITER_CONTINUE;\n}\n\n#if !defined(BFLB_BLE_DISABLE_STATIC_ATTR)\nstatic u16_t find_static_attr(const struct bt_gatt_attr *attr) {\n  u16_t handle = 1;\n\n  Z_STRUCT_SECTION_FOREACH(bt_gatt_service_static, static_svc) {\n    for (int i = 0; i < static_svc->attr_count; i++, handle++) {\n      if (attr == &static_svc->attrs[i]) {\n        return handle;\n      }\n    }\n  }\n\n  return 0;\n}\n#endif\n\nssize_t bt_gatt_attr_read_included(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  struct bt_gatt_attr *incl = attr->user_data;\n#if defined(BFLB_BLE_DISABLE_STATIC_ATTR)\n  u16_t handle = incl->handle;\n#else\n  u16_t handle = incl->handle ?: find_static_attr(incl);\n#endif\n  struct bt_uuid  *uuid = incl->user_data;\n  struct gatt_incl pdu;\n  u8_t             value_len;\n\n  /* first attr points to the start handle */\n  pdu.start_handle = sys_cpu_to_le16(handle);\n  value_len        = sizeof(pdu.start_handle) + sizeof(pdu.end_handle);\n\n  /*\n   * Core 4.2, Vol 3, Part G, 3.2,\n   * The Service UUID shall only be present when the UUID is a\n   * 16-bit Bluetooth UUID.\n   */\n  if (uuid->type == BT_UUID_TYPE_16) {\n    pdu.uuid16 = sys_cpu_to_le16(BT_UUID_16(uuid)->val);\n    value_len += sizeof(pdu.uuid16);\n  }\n\n  /* Lookup for service end handle */\n  bt_gatt_foreach_attr(handle + 1, 0xffff, get_service_handles, &pdu);\n\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, &pdu, value_len);\n}\n\nstruct gatt_chrc {\n  u8_t  properties;\n  u16_t value_handle;\n  union {\n    u16_t uuid16;\n    u8_t  uuid[16];\n  };\n} __packed;\n\nuint16_t bt_gatt_attr_value_handle(const struct bt_gatt_attr *attr) {\n  u16_t handle = 0;\n\n  if ((attr != NULL) && (attr->read == bt_gatt_attr_read_chrc)) {\n    struct bt_gatt_chrc *chrc = attr->user_data;\n\n    handle = chrc->value_handle;\n#if !defined(BFLB_BLE_DISABLE_STATIC_ATTR)\n    if (handle == 0) {\n      /* Fall back to Zephyr value handle policy */\n      handle = (attr->handle ?: find_static_attr(attr)) + 1U;\n    }\n#endif\n  }\n\n  return handle;\n}\n\nssize_t bt_gatt_attr_read_chrc(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  struct bt_gatt_chrc *chrc = attr->user_data;\n  struct gatt_chrc     pdu;\n  u8_t                 value_len;\n\n  pdu.properties = chrc->properties;\n  /* BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part G] page 534:\n   * 3.3.2 Characteristic Value Declaration\n   * The Characteristic Value declaration contains the value of the\n   * characteristic. It is the first Attribute after the characteristic\n   * declaration. All characteristic definitions shall have a\n   * Characteristic Value declaration.\n   */\n  pdu.value_handle = sys_cpu_to_le16(bt_gatt_attr_value_handle(attr));\n\n  value_len = sizeof(pdu.properties) + sizeof(pdu.value_handle);\n\n  if (chrc->uuid->type == BT_UUID_TYPE_16) {\n    pdu.uuid16 = sys_cpu_to_le16(BT_UUID_16(chrc->uuid)->val);\n    value_len += 2U;\n  } else {\n    memcpy(pdu.uuid, BT_UUID_128(chrc->uuid)->val, 16);\n    value_len += 16U;\n  }\n\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, &pdu, value_len);\n}\n\nstatic u8_t gatt_foreach_iter(const struct bt_gatt_attr *attr, u16_t start_handle, u16_t end_handle, const struct bt_uuid *uuid, const void *attr_data, uint16_t *num_matches, bt_gatt_attr_func_t func,\n                              void *user_data) {\n  u8_t result;\n\n  /* Stop if over the requested range */\n  if (attr->handle > end_handle) {\n    return BT_GATT_ITER_STOP;\n  }\n\n  /* Check if attribute handle is within range */\n  if (attr->handle < start_handle) {\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  /* Match attribute UUID if set */\n  if (uuid && bt_uuid_cmp(uuid, attr->uuid)) {\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  /* Match attribute user_data if set */\n  if (attr_data && attr_data != attr->user_data) {\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  *num_matches -= 1;\n\n  result = func(attr, user_data);\n\n  if (!*num_matches) {\n    return BT_GATT_ITER_STOP;\n  }\n\n  return result;\n}\n\nstatic void foreach_attr_type_dyndb(u16_t start_handle, u16_t end_handle, const struct bt_uuid *uuid, const void *attr_data, uint16_t num_matches, bt_gatt_attr_func_t func, void *user_data) {\n#if defined(CONFIG_BT_GATT_DYNAMIC_DB)\n  int i;\n\n  struct bt_gatt_service *svc;\n\n  SYS_SLIST_FOR_EACH_CONTAINER(&db, svc, node) {\n    struct bt_gatt_service *next;\n\n    next = SYS_SLIST_PEEK_NEXT_CONTAINER(svc, node);\n    if (next) {\n      /* Skip ahead if start is not within service handles */\n      if (next->attrs[0].handle <= start_handle) {\n        continue;\n      }\n    }\n\n    for (i = 0; i < svc->attr_count; i++) {\n      struct bt_gatt_attr *attr = &svc->attrs[i];\n\n      if (gatt_foreach_iter(attr, start_handle, end_handle, uuid, attr_data, &num_matches, func, user_data) == BT_GATT_ITER_STOP) {\n        return;\n      }\n    }\n  }\n#endif /* CONFIG_BT_GATT_DYNAMIC_DB */\n}\n\nvoid bt_gatt_foreach_attr_type(u16_t start_handle, u16_t end_handle, const struct bt_uuid *uuid, const void *attr_data, uint16_t num_matches, bt_gatt_attr_func_t func, void *user_data) {\n  int i;\n\n  if (!num_matches) {\n    num_matches = UINT16_MAX;\n  }\n#if !defined(BFLB_BLE_DISABLE_STATIC_ATTR)\n  if (start_handle <= last_static_handle) {\n    u16_t handle = 1;\n\n    Z_STRUCT_SECTION_FOREACH(bt_gatt_service_static, static_svc) {\n      /* Skip ahead if start is not within service handles */\n      if (handle + static_svc->attr_count < start_handle) {\n        handle += static_svc->attr_count;\n        continue;\n      }\n\n      for (i = 0; i < static_svc->attr_count; i++, handle++) {\n        struct bt_gatt_attr attr;\n\n        memcpy(&attr, &static_svc->attrs[i], sizeof(attr));\n\n        attr.handle = handle;\n\n        if (gatt_foreach_iter(&attr, start_handle, end_handle, uuid, attr_data, &num_matches, func, user_data) == BT_GATT_ITER_STOP) {\n          return;\n        }\n      }\n    }\n  }\n#endif\n  /* Iterate over dynamic db */\n  foreach_attr_type_dyndb(start_handle, end_handle, uuid, attr_data, num_matches, func, user_data);\n}\n\nstatic u8_t find_next(const struct bt_gatt_attr *attr, void *user_data) {\n  struct bt_gatt_attr **next = user_data;\n\n  *next = (struct bt_gatt_attr *)attr;\n\n  return BT_GATT_ITER_STOP;\n}\n\nstruct bt_gatt_attr *bt_gatt_attr_next(const struct bt_gatt_attr *attr) {\n  struct bt_gatt_attr *next = NULL;\n#if defined(BFLB_BLE_DISABLE_STATIC_ATTR)\n  u16_t handle = attr->handle;\n#else\n  u16_t handle = attr->handle ?: find_static_attr(attr);\n#endif\n  bt_gatt_foreach_attr(handle + 1, handle + 1, find_next, &next);\n\n  return next;\n}\n\nstatic void clear_ccc_cfg(struct bt_gatt_ccc_cfg *cfg) {\n  bt_addr_le_copy(&cfg->peer, BT_ADDR_LE_ANY);\n  cfg->id    = 0U;\n  cfg->value = 0U;\n}\n\nstatic struct bt_gatt_ccc_cfg *find_ccc_cfg(const struct bt_conn *conn, struct _bt_gatt_ccc *ccc) {\n  for (size_t i = 0; i < ARRAY_SIZE(ccc->cfg); i++) {\n    if (conn) {\n      if (conn->id == ccc->cfg[i].id && !bt_conn_addr_le_cmp(conn, &ccc->cfg[i].peer)) {\n        return &ccc->cfg[i];\n      }\n    } else if (!bt_addr_le_cmp(&ccc->cfg[i].peer, BT_ADDR_LE_ANY)) {\n      return &ccc->cfg[i];\n    }\n  }\n\n  return NULL;\n}\n\nssize_t bt_gatt_attr_read_ccc(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  struct _bt_gatt_ccc          *ccc = attr->user_data;\n  const struct bt_gatt_ccc_cfg *cfg;\n  u16_t                         value;\n\n  cfg = find_ccc_cfg(conn, ccc);\n  if (cfg) {\n    value = sys_cpu_to_le16(cfg->value);\n  } else {\n    /* Default to disable if there is no cfg for the peer */\n    value = 0x0000;\n  }\n\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, &value, sizeof(value));\n}\n\nstatic void gatt_ccc_changed(const struct bt_gatt_attr *attr, struct _bt_gatt_ccc *ccc) {\n  int   i;\n  u16_t value = 0x0000;\n\n  for (i = 0; i < ARRAY_SIZE(ccc->cfg); i++) {\n    if (ccc->cfg[i].value > value) {\n      value = ccc->cfg[i].value;\n    }\n  }\n\n  BT_DBG(\"ccc %p value 0x%04x\", ccc, value);\n\n  if (value != ccc->value) {\n    ccc->value = value;\n    if (ccc->cfg_changed) {\n      ccc->cfg_changed(attr, value);\n    }\n  }\n}\n\nssize_t bt_gatt_attr_write_ccc(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, u16_t len, u16_t offset, u8_t flags) {\n  struct _bt_gatt_ccc    *ccc = attr->user_data;\n  struct bt_gatt_ccc_cfg *cfg;\n  u16_t                   value;\n\n  if (offset) {\n    return BT_GATT_ERR(BT_ATT_ERR_INVALID_OFFSET);\n  }\n\n  if (!len || len > sizeof(u16_t)) {\n    return BT_GATT_ERR(BT_ATT_ERR_INVALID_ATTRIBUTE_LEN);\n  }\n\n  if (len < sizeof(u16_t)) {\n    value = *(u8_t *)buf;\n  } else {\n    value = sys_get_le16(buf);\n  }\n\n  cfg = find_ccc_cfg(conn, ccc);\n  if (!cfg) {\n    /* If there's no existing entry, but the new value is zero,\n     * we don't need to do anything, since a disabled CCC is\n     * behavioraly the same as no written CCC.\n     */\n    if (!value) {\n      return len;\n    }\n\n    cfg = find_ccc_cfg(NULL, ccc);\n    if (!cfg) {\n      BT_WARN(\"No space to store CCC cfg\");\n      return BT_GATT_ERR(BT_ATT_ERR_INSUFFICIENT_RESOURCES);\n    }\n\n    bt_addr_le_copy(&cfg->peer, &conn->le.dst);\n    cfg->id = conn->id;\n  }\n\n  /* Confirm write if cfg is managed by application */\n  if (ccc->cfg_write && !ccc->cfg_write(conn, attr, value)) {\n    return BT_GATT_ERR(BT_ATT_ERR_WRITE_NOT_PERMITTED);\n  }\n\n  cfg->value = value;\n\n  BT_DBG(\"handle 0x%04x value %u\", attr->handle, cfg->value);\n\n  /* Update cfg if don't match */\n  if (cfg->value != ccc->value) {\n    gatt_ccc_changed(attr, ccc);\n\n#if defined(CONFIG_BT_SETTINGS_CCC_STORE_ON_WRITE)\n    if ((!gatt_ccc_conn_is_queued(conn)) && bt_addr_le_is_bonded(conn->id, &conn->le.dst)) {\n      /* Store the connection with the same index it has in\n       * the conns array\n       */\n      gatt_ccc_store.conn_list[bt_conn_index(conn)] = bt_conn_ref(conn);\n      k_delayed_work_submit(&gatt_ccc_store.work, CCC_STORE_DELAY);\n    }\n#endif\n  }\n\n  /* Disabled CCC is the same as no configured CCC, so clear the entry */\n  if (!value) {\n    clear_ccc_cfg(cfg);\n  }\n\n  return len;\n}\n\nssize_t bt_gatt_attr_read_cep(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  const struct bt_gatt_cep *value = attr->user_data;\n  u16_t                     props = sys_cpu_to_le16(value->properties);\n\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, &props, sizeof(props));\n}\n\nssize_t bt_gatt_attr_read_cud(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  const char *value = attr->user_data;\n\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, value, strlen(value));\n}\n\nssize_t bt_gatt_attr_read_cpf(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  const struct bt_gatt_cpf *value = attr->user_data;\n\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, value, sizeof(*value));\n}\n\nstruct notify_data {\n  int   err;\n  u16_t type;\n  union {\n    struct bt_gatt_notify_params   *nfy_params;\n    struct bt_gatt_indicate_params *ind_params;\n  };\n};\n\nstatic int gatt_notify(struct bt_conn *conn, u16_t handle, struct bt_gatt_notify_params *params) {\n  struct net_buf       *buf;\n  struct bt_att_notify *nfy;\n\n#if defined(CONFIG_BT_GATT_ENFORCE_CHANGE_UNAWARE)\n  /* BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part G page 2350:\n   * Except for the Handle Value indication, the  server shall not send\n   * notifications and indications to such a client until it becomes\n   * change-aware.\n   */\n  if (!bt_gatt_change_aware(conn, false)) {\n    return -EAGAIN;\n  }\n#endif\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_NOTIFY, sizeof(*nfy) + params->len);\n  if (!buf) {\n    BT_WARN(\"No buffer available to send notification\");\n    return -ENOMEM;\n  }\n\n  BT_DBG(\"conn %p handle 0x%04x\", conn, handle);\n\n  nfy         = net_buf_add(buf, sizeof(*nfy));\n  nfy->handle = sys_cpu_to_le16(handle);\n\n  net_buf_add(buf, params->len);\n  memcpy(nfy->value, params->data, params->len);\n\n  return bt_att_send(conn, buf, params->func, params->user_data);\n}\n\nstatic void gatt_indicate_rsp(struct bt_conn *conn, u8_t err, const void *pdu, u16_t length, void *user_data) {\n  struct bt_gatt_indicate_params *params = user_data;\n\n  params->func(conn, params->attr, err);\n}\n\nstatic int gatt_send(struct bt_conn *conn, struct net_buf *buf, bt_att_func_t func, void *params, bt_att_destroy_t destroy) {\n  int err;\n\n  if (params) {\n    struct bt_att_req *req = params;\n    req->buf               = buf;\n    req->func              = func;\n    req->destroy           = destroy;\n\n    err = bt_att_req_send(conn, req);\n  } else {\n    err = bt_att_send(conn, buf, NULL, NULL);\n  }\n\n  if (err) {\n    BT_ERR(\"Error sending ATT PDU: %d\", err);\n  }\n\n  return err;\n}\n\nstatic int gatt_indicate(struct bt_conn *conn, u16_t handle, struct bt_gatt_indicate_params *params) {\n  struct net_buf         *buf;\n  struct bt_att_indicate *ind;\n\n#if defined(CONFIG_BT_GATT_ENFORCE_CHANGE_UNAWARE)\n  /* BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part G page 2350:\n   * Except for the Handle Value indication, the  server shall not send\n   * notifications and indications to such a client until it becomes\n   * change-aware.\n   */\n  if (!(params->func && (params->func == sc_indicate_rsp || params->func == sc_restore_rsp)) && !bt_gatt_change_aware(conn, false)) {\n    return -EAGAIN;\n  }\n#endif\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_INDICATE, sizeof(*ind) + params->len);\n  if (!buf) {\n    BT_WARN(\"No buffer available to send indication\");\n    return -ENOMEM;\n  }\n\n  BT_DBG(\"conn %p handle 0x%04x\", conn, handle);\n\n  ind         = net_buf_add(buf, sizeof(*ind));\n  ind->handle = sys_cpu_to_le16(handle);\n\n  net_buf_add(buf, params->len);\n  memcpy(ind->value, params->data, params->len);\n\n  if (!params->func) {\n    return gatt_send(conn, buf, NULL, NULL, NULL);\n  }\n\n  return gatt_send(conn, buf, gatt_indicate_rsp, params, NULL);\n}\n\nstatic u8_t notify_cb(const struct bt_gatt_attr *attr, void *user_data) {\n  struct notify_data  *data = user_data;\n  struct _bt_gatt_ccc *ccc;\n  size_t               i;\n\n  /* Check attribute user_data must be of type struct _bt_gatt_ccc */\n  if (attr->write != bt_gatt_attr_write_ccc) {\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  ccc = attr->user_data;\n\n  /* Save Service Changed data if peer is not connected */\n  if (IS_ENABLED(CONFIG_BT_GATT_SERVICE_CHANGED) && ccc == &sc_ccc) {\n    for (i = 0; i < ARRAY_SIZE(sc_cfg); i++) {\n      struct gatt_sc_cfg *cfg = &sc_cfg[i];\n      struct bt_conn     *conn;\n\n      if (!bt_addr_le_cmp(&cfg->peer, BT_ADDR_LE_ANY)) {\n        continue;\n      }\n\n      conn = bt_conn_lookup_state_le(&cfg->peer, BT_CONN_CONNECTED);\n      if (!conn) {\n        struct sc_data *sc;\n\n        sc = (struct sc_data *)data->ind_params->data;\n        sc_save(cfg->id, &cfg->peer, sys_le16_to_cpu(sc->start), sys_le16_to_cpu(sc->end));\n        continue;\n      }\n      bt_conn_unref(conn);\n    }\n  }\n\n  /* Notify all peers configured */\n  for (i = 0; i < ARRAY_SIZE(ccc->cfg); i++) {\n    struct bt_gatt_ccc_cfg *cfg = &ccc->cfg[i];\n    struct bt_conn         *conn;\n    int                     err;\n\n    /* Check if config value matches data type since consolidated\n     * value may be for a different peer.\n     */\n    if (cfg->value != data->type) {\n      continue;\n    }\n\n    conn = bt_conn_lookup_addr_le(cfg->id, &cfg->peer);\n    if (!conn) {\n      continue;\n    }\n\n    if (conn->state != BT_CONN_CONNECTED) {\n      bt_conn_unref(conn);\n      continue;\n    }\n\n    /* Confirm match if cfg is managed by application */\n    if (ccc->cfg_match && !ccc->cfg_match(conn, attr)) {\n      bt_conn_unref(conn);\n      continue;\n    }\n\n    if (data->type == BT_GATT_CCC_INDICATE) {\n      err = gatt_indicate(conn, attr->handle - 1, data->ind_params);\n    } else {\n      err = gatt_notify(conn, attr->handle - 1, data->nfy_params);\n    }\n\n    bt_conn_unref(conn);\n\n    if (err < 0) {\n      return BT_GATT_ITER_STOP;\n    }\n\n    data->err = 0;\n  }\n\n  return BT_GATT_ITER_CONTINUE;\n}\n\nstatic u8_t match_uuid(const struct bt_gatt_attr *attr, void *user_data) {\n  const struct bt_gatt_attr **found = user_data;\n\n  *found = attr;\n\n  return BT_GATT_ITER_STOP;\n}\n\nint bt_gatt_notify_cb(struct bt_conn *conn, struct bt_gatt_notify_params *params) {\n  struct notify_data         data;\n  const struct bt_gatt_attr *attr;\n  u16_t                      handle;\n\n  __ASSERT(params, \"invalid parameters\\n\");\n  __ASSERT(params->attr, \"invalid parameters\\n\");\n\n  attr = params->attr;\n\n  if (conn && conn->state != BT_CONN_CONNECTED) {\n    return -ENOTCONN;\n  }\n#if !defined(BFLB_BLE_DISABLE_STATIC_ATTR)\n  handle = attr->handle ?: find_static_attr(attr);\n#endif\n  if (!handle) {\n    return -ENOENT;\n  }\n\n  /* Lookup UUID if it was given */\n  if (params->uuid) {\n    attr = NULL;\n\n    bt_gatt_foreach_attr_type(handle, 0xffff, params->uuid, NULL, 1, match_uuid, &attr);\n    if (!attr) {\n      return -ENOENT;\n    }\n#if !defined(BFLB_BLE_DISABLE_STATIC_ATTR)\n    handle = attr->handle ?: find_static_attr(attr);\n#endif\n    if (!handle) {\n      return -ENOENT;\n    }\n  }\n\n  /* Check if attribute is a characteristic then adjust the handle */\n  if (!bt_uuid_cmp(attr->uuid, BT_UUID_GATT_CHRC)) {\n    struct bt_gatt_chrc *chrc = attr->user_data;\n\n    if (!(chrc->properties & BT_GATT_CHRC_NOTIFY)) {\n      return -EINVAL;\n    }\n\n    handle = bt_gatt_attr_value_handle(attr);\n  }\n\n  if (conn) {\n    return gatt_notify(conn, handle, params);\n  }\n\n  data.err        = -ENOTCONN;\n  data.type       = BT_GATT_CCC_NOTIFY;\n  data.nfy_params = params;\n\n  bt_gatt_foreach_attr_type(handle, 0xffff, BT_UUID_GATT_CCC, NULL, 1, notify_cb, &data);\n\n  return data.err;\n}\n\nint bt_gatt_indicate(struct bt_conn *conn, struct bt_gatt_indicate_params *params) {\n  struct notify_data         data;\n  const struct bt_gatt_attr *attr;\n  u16_t                      handle;\n\n  __ASSERT(params, \"invalid parameters\\n\");\n  __ASSERT(params->attr, \"invalid parameters\\n\");\n\n  attr = params->attr;\n\n  if (conn && conn->state != BT_CONN_CONNECTED) {\n    return -ENOTCONN;\n  }\n#if !defined(BFLB_BLE_DISABLE_STATIC_ATTR)\n  handle = attr->handle ?: find_static_attr(attr);\n#endif\n  if (!handle) {\n    return -ENOENT;\n  }\n\n  /* Lookup UUID if it was given */\n  if (params->uuid) {\n    attr = NULL;\n\n    bt_gatt_foreach_attr_type(handle, 0xffff, params->uuid, NULL, 1, match_uuid, &attr);\n    if (!attr) {\n      return -ENOENT;\n    }\n#if !defined(BFLB_BLE_DISABLE_STATIC_ATTR)\n    handle = attr->handle ?: find_static_attr(attr);\n#endif\n    if (!handle) {\n      return -ENOENT;\n    }\n  }\n\n  /* Check if attribute is a characteristic then adjust the handle */\n  if (!bt_uuid_cmp(attr->uuid, BT_UUID_GATT_CHRC)) {\n    struct bt_gatt_chrc *chrc = params->attr->user_data;\n\n    if (!(chrc->properties & BT_GATT_CHRC_INDICATE)) {\n      return -EINVAL;\n    }\n\n    handle = bt_gatt_attr_value_handle(params->attr);\n  }\n\n  if (conn) {\n    return gatt_indicate(conn, handle, params);\n  }\n\n  data.err        = -ENOTCONN;\n  data.type       = BT_GATT_CCC_INDICATE;\n  data.ind_params = params;\n\n  bt_gatt_foreach_attr_type(handle, 0xffff, BT_UUID_GATT_CCC, NULL, 1, notify_cb, &data);\n\n  return data.err;\n}\n\nu16_t bt_gatt_get_mtu(struct bt_conn *conn) { return bt_att_get_mtu(conn); }\n\nu8_t bt_gatt_check_perm(struct bt_conn *conn, const struct bt_gatt_attr *attr, u8_t mask) {\n  if ((mask & BT_GATT_PERM_READ) && (!(attr->perm & BT_GATT_PERM_READ_MASK) || !attr->read)) {\n    return BT_ATT_ERR_READ_NOT_PERMITTED;\n  }\n\n  if ((mask & BT_GATT_PERM_WRITE) && (!(attr->perm & BT_GATT_PERM_WRITE_MASK) || !attr->write)) {\n    return BT_ATT_ERR_WRITE_NOT_PERMITTED;\n  }\n\n  mask &= attr->perm;\n  if (mask & BT_GATT_PERM_AUTHEN_MASK) {\n    if (bt_conn_get_security(conn) < BT_SECURITY_L3) {\n      return BT_ATT_ERR_AUTHENTICATION;\n    }\n  }\n\n  if ((mask & BT_GATT_PERM_ENCRYPT_MASK)) {\n#if defined(CONFIG_BT_SMP)\n    if (!conn->encrypt) {\n      return BT_ATT_ERR_INSUFFICIENT_ENCRYPTION;\n    }\n#else\n    return BT_ATT_ERR_INSUFFICIENT_ENCRYPTION;\n#endif /* CONFIG_BT_SMP */\n  }\n\n  return 0;\n}\n\nstatic void sc_restore_rsp(struct bt_conn *conn, const struct bt_gatt_attr *attr, u8_t err) {\n#if defined(CONFIG_BT_GATT_CACHING)\n  struct gatt_cf_cfg *cfg;\n#endif\n\n  BT_DBG(\"err 0x%02x\", err);\n\n#if defined(CONFIG_BT_GATT_CACHING)\n  /* BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part G page 2347:\n   * 2.5.2.1 Robust Caching\n   * A connected client becomes change-aware when...\n   * The client receives and confirms a Service Changed indication.\n   */\n  cfg = find_cf_cfg(conn);\n  if (cfg && CF_ROBUST_CACHING(cfg)) {\n    atomic_set_bit(cfg->flags, CF_CHANGE_AWARE);\n    BT_DBG(\"%s change-aware\", bt_addr_le_str(&cfg->peer));\n  }\n#endif\n}\n\nstatic struct bt_gatt_indicate_params sc_restore_params[CONFIG_BT_MAX_CONN];\n\nstatic void sc_restore(struct bt_conn *conn) {\n  struct gatt_sc_cfg *cfg;\n  u16_t               sc_range[2];\n  u8_t                index;\n\n  cfg = find_sc_cfg(conn->id, &conn->le.dst);\n  if (!cfg) {\n    BT_DBG(\"no SC data found\");\n    return;\n  }\n\n  if (!(cfg->data.start || cfg->data.end)) {\n    return;\n  }\n\n  BT_DBG(\"peer %s start 0x%04x end 0x%04x\", bt_addr_le_str(&cfg->peer), cfg->data.start, cfg->data.end);\n\n  sc_range[0] = sys_cpu_to_le16(cfg->data.start);\n  sc_range[1] = sys_cpu_to_le16(cfg->data.end);\n\n  index = bt_conn_index(conn);\n#if defined(BFLB_BLE_DISABLE_STATIC_ATTR)\n  sc_restore_params[index].attr = &gatt_attrs[2];\n#else\n  sc_restore_params[index].attr = &_1_gatt_svc.attrs[2];\n#endif\n  sc_restore_params[index].func = sc_restore_rsp;\n  sc_restore_params[index].data = &sc_range[0];\n  sc_restore_params[index].len  = sizeof(sc_range);\n\n  if (bt_gatt_indicate(conn, &sc_restore_params[index])) {\n    BT_ERR(\"SC restore indication failed\");\n  }\n\n  /* Reset config data */\n  sc_reset(cfg);\n}\n\nstruct conn_data {\n  struct bt_conn *conn;\n  bt_security_t   sec;\n};\n\nstatic u8_t update_ccc(const struct bt_gatt_attr *attr, void *user_data) {\n  struct conn_data    *data = user_data;\n  struct bt_conn      *conn = data->conn;\n  struct _bt_gatt_ccc *ccc;\n  size_t               i;\n  u8_t                 err;\n\n  /* Check attribute user_data must be of type struct _bt_gatt_ccc */\n  if (attr->write != bt_gatt_attr_write_ccc) {\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  ccc = attr->user_data;\n\n  for (i = 0; i < ARRAY_SIZE(ccc->cfg); i++) {\n    /* Ignore configuration for different peer */\n    if (bt_conn_addr_le_cmp(conn, &ccc->cfg[i].peer)) {\n      continue;\n    }\n\n    /* Check if attribute requires encryption/authentication */\n    err = bt_gatt_check_perm(conn, attr, BT_GATT_PERM_WRITE_MASK);\n    if (err) {\n      bt_security_t sec;\n\n      if (err == BT_ATT_ERR_WRITE_NOT_PERMITTED) {\n        BT_WARN(\"CCC %p not writable\", attr);\n        continue;\n      }\n\n      sec = BT_SECURITY_L2;\n\n      if (err == BT_ATT_ERR_AUTHENTICATION) {\n        sec = BT_SECURITY_L3;\n      }\n\n      /* Check if current security is enough */\n      if (IS_ENABLED(CONFIG_BT_SMP) && bt_conn_get_security(conn) < sec) {\n        if (data->sec < sec) {\n          data->sec = sec;\n        }\n        continue;\n      }\n    }\n\n    if (ccc->cfg[i].value) {\n      gatt_ccc_changed(attr, ccc);\n      if (IS_ENABLED(CONFIG_BT_GATT_SERVICE_CHANGED) && ccc == &sc_ccc) {\n        sc_restore(conn);\n      }\n      return BT_GATT_ITER_CONTINUE;\n    }\n  }\n\n  return BT_GATT_ITER_CONTINUE;\n}\n\nstatic u8_t disconnected_cb(const struct bt_gatt_attr *attr, void *user_data) {\n  struct bt_conn      *conn = user_data;\n  struct _bt_gatt_ccc *ccc;\n  bool                 value_used;\n  size_t               i;\n\n  /* Check attribute user_data must be of type struct _bt_gatt_ccc */\n  if (attr->write != bt_gatt_attr_write_ccc) {\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  ccc = attr->user_data;\n\n  /* If already disabled skip */\n  if (!ccc->value) {\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  /* Checking if all values are disabled */\n  value_used = false;\n\n  for (i = 0; i < ARRAY_SIZE(ccc->cfg); i++) {\n    struct bt_gatt_ccc_cfg *cfg = &ccc->cfg[i];\n\n    /* Ignore configurations with disabled value */\n    if (!cfg->value) {\n      continue;\n    }\n\n    if (conn->id != cfg->id || bt_conn_addr_le_cmp(conn, &cfg->peer)) {\n      struct bt_conn *tmp;\n\n      /* Skip if there is another peer connected */\n      tmp = bt_conn_lookup_addr_le(cfg->id, &cfg->peer);\n      if (tmp) {\n        if (tmp->state == BT_CONN_CONNECTED) {\n          value_used = true;\n        }\n\n        bt_conn_unref(tmp);\n      }\n    } else {\n      /* Clear value if not paired */\n      if (!bt_addr_le_is_bonded(conn->id, &conn->le.dst)) {\n        clear_ccc_cfg(cfg);\n      } else {\n        /* Update address in case it has changed */\n        bt_addr_le_copy(&cfg->peer, &conn->le.dst);\n      }\n    }\n  }\n\n  /* If all values are now disabled, reset value while disconnected */\n  if (!value_used) {\n    ccc->value = 0U;\n    if (ccc->cfg_changed) {\n      ccc->cfg_changed(attr, ccc->value);\n    }\n\n    BT_DBG(\"ccc %p reseted\", ccc);\n  }\n\n  return BT_GATT_ITER_CONTINUE;\n}\n\nbool bt_gatt_is_subscribed(struct bt_conn *conn, const struct bt_gatt_attr *attr, u16_t ccc_value) {\n  const struct _bt_gatt_ccc *ccc;\n\n  __ASSERT(conn, \"invalid parameter\\n\");\n  __ASSERT(attr, \"invalid parameter\\n\");\n\n  if (conn->state != BT_CONN_CONNECTED) {\n    return false;\n  }\n\n  /* Check if attribute is a characteristic declaration */\n  if (!bt_uuid_cmp(attr->uuid, BT_UUID_GATT_CHRC)) {\n    struct bt_gatt_chrc *chrc = attr->user_data;\n\n    if (!(chrc->properties & (BT_GATT_CHRC_NOTIFY | BT_GATT_CHRC_INDICATE))) {\n      /* Characteristic doesn't support subscription */\n      return false;\n    }\n\n    attr = bt_gatt_attr_next(attr);\n  }\n\n  /* Check if attribute is a characteristic value */\n  if (bt_uuid_cmp(attr->uuid, BT_UUID_GATT_CCC) != 0) {\n    attr = bt_gatt_attr_next(attr);\n  }\n\n  /* Check if the attribute is the CCC Descriptor */\n  if (bt_uuid_cmp(attr->uuid, BT_UUID_GATT_CCC) != 0) {\n    return false;\n  }\n\n  ccc = attr->user_data;\n\n  /* Check if the connection is subscribed */\n  for (size_t i = 0; i < BT_GATT_CCC_MAX; i++) {\n    if (conn->id == ccc->cfg[i].id && !bt_conn_addr_le_cmp(conn, &ccc->cfg[i].peer) && (ccc_value & ccc->cfg[i].value)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n#if defined(CONFIG_BT_GATT_CLIENT)\n#if defined(BFLB_BLE_NOTIFY_ALL)\nvoid bt_gatt_register_notification_callback(bt_notification_all_cb_t cb) { gatt_notify_all_cb = cb; }\n#endif\nvoid bt_gatt_notification(struct bt_conn *conn, u16_t handle, const void *data, u16_t length) {\n  struct bt_gatt_subscribe_params *params, *tmp;\n\n  BT_DBG(\"handle 0x%04x length %u\", handle, length);\n#if defined(BFLB_BLE_NOTIFY_ALL)\n  if (gatt_notify_all_cb) {\n    gatt_notify_all_cb(conn, handle, data, length);\n  }\n#endif\n  SYS_SLIST_FOR_EACH_CONTAINER_SAFE(&subscriptions, params, tmp, node) {\n    if (bt_conn_addr_le_cmp(conn, &params->_peer) || handle != params->value_handle) {\n      continue;\n    }\n\n    if (params->notify(conn, params, data, length) == BT_GATT_ITER_STOP) {\n      bt_gatt_unsubscribe(conn, params);\n    }\n  }\n}\n\nstatic void update_subscription(struct bt_conn *conn, struct bt_gatt_subscribe_params *params) {\n  if (params->_peer.type == BT_ADDR_LE_PUBLIC) {\n    return;\n  }\n\n  /* Update address */\n  bt_addr_le_copy(&params->_peer, &conn->le.dst);\n}\n\nstatic void gatt_subscription_remove(struct bt_conn *conn, sys_snode_t *prev, struct bt_gatt_subscribe_params *params) {\n  /* Remove subscription from the list*/\n  sys_slist_remove(&subscriptions, prev, &params->node);\n\n  params->notify(conn, params, NULL, 0);\n}\n\nstatic void remove_subscriptions(struct bt_conn *conn) {\n  struct bt_gatt_subscribe_params *params, *tmp;\n  sys_snode_t                     *prev = NULL;\n\n  /* Lookup existing subscriptions */\n  SYS_SLIST_FOR_EACH_CONTAINER_SAFE(&subscriptions, params, tmp, node) {\n    if (bt_conn_addr_le_cmp(conn, &params->_peer)) {\n      prev = &params->node;\n      continue;\n    }\n\n    if (!bt_addr_le_is_bonded(conn->id, &conn->le.dst) || (atomic_test_bit(params->flags, BT_GATT_SUBSCRIBE_FLAG_VOLATILE))) {\n      /* Remove subscription */\n      params->value = 0U;\n      gatt_subscription_remove(conn, prev, params);\n    } else {\n      update_subscription(conn, params);\n      prev = &params->node;\n    }\n  }\n}\n\nstatic void gatt_mtu_rsp(struct bt_conn *conn, u8_t err, const void *pdu, u16_t length, void *user_data) {\n  struct bt_gatt_exchange_params *params = user_data;\n\n  params->func(conn, err, params);\n}\n#if defined(CONFIG_BLE_AT_CMD)\nint bt_at_gatt_exchange_mtu(struct bt_conn *conn, struct bt_gatt_exchange_params *params, u16_t mtu_size) {\n  struct bt_att_exchange_mtu_req *req;\n  struct net_buf                 *buf;\n  u16_t                           mtu;\n\n  __ASSERT(conn, \"invalid parameter\\n\");\n  __ASSERT(params && params->func, \"invalid parameters\\n\");\n\n  if (conn->state != BT_CONN_CONNECTED) {\n    return -ENOTCONN;\n  }\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_MTU_REQ, sizeof(*req));\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  mtu = mtu_size;\n\n#if defined(CONFIG_BLE_AT_CMD)\n  set_mtu_size(mtu);\n#endif\n\n  BT_DBG(\"Client MTU %u\", mtu);\n\n  req      = net_buf_add(buf, sizeof(*req));\n  req->mtu = sys_cpu_to_le16(mtu);\n\n  return gatt_send(conn, buf, gatt_mtu_rsp, params, NULL);\n}\n#endif\n\nint bt_gatt_exchange_mtu(struct bt_conn *conn, struct bt_gatt_exchange_params *params) {\n  struct bt_att_exchange_mtu_req *req;\n  struct net_buf                 *buf;\n  u16_t                           mtu;\n\n  __ASSERT(conn, \"invalid parameter\\n\");\n  __ASSERT(params && params->func, \"invalid parameters\\n\");\n\n  if (conn->state != BT_CONN_CONNECTED) {\n    return -ENOTCONN;\n  }\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_MTU_REQ, sizeof(*req));\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  mtu = BT_ATT_MTU;\n\n  BT_DBG(\"Client MTU %u\", mtu);\n\n  req      = net_buf_add(buf, sizeof(*req));\n  req->mtu = sys_cpu_to_le16(mtu);\n\n  return gatt_send(conn, buf, gatt_mtu_rsp, params, NULL);\n}\n\nstatic void gatt_discover_next(struct bt_conn *conn, u16_t last_handle, struct bt_gatt_discover_params *params) {\n  /* Skip if last_handle is not set */\n  if (!last_handle)\n    goto discover;\n\n  /* Continue from the last found handle */\n  params->start_handle = last_handle;\n  if (params->start_handle < UINT16_MAX) {\n    params->start_handle++;\n  } else {\n    goto done;\n  }\n\n  /* Stop if over the range or the requests */\n  if (params->start_handle > params->end_handle) {\n    goto done;\n  }\n\ndiscover:\n  /* Discover next range */\n#if defined(BFLB_BLE_DISCOVER_ONGOING)\n  if (!bt_gatt_discover_continue(conn, params)) {\n#else\n  if (!bt_gatt_discover(conn, params)) {\n#endif\n    return;\n  }\n\ndone:\n  params->func(conn, NULL, params);\n#if defined(BFLB_BLE_DISCOVER_ONGOING)\n  discover_ongoing = BT_GATT_ITER_STOP;\n#endif\n}\n\nstatic void gatt_find_type_rsp(struct bt_conn *conn, u8_t err, const void *pdu, u16_t length, void *user_data) {\n  const struct bt_att_find_type_rsp *rsp    = pdu;\n  struct bt_gatt_discover_params    *params = user_data;\n  u8_t                               i;\n  u16_t                              end_handle = 0U, start_handle;\n\n  BT_DBG(\"err 0x%02x\", err);\n\n  if (err) {\n    goto done;\n  }\n\n  /* Parse attributes found */\n  for (i = 0U; length >= sizeof(rsp->list[i]); i++, length -= sizeof(rsp->list[i])) {\n    struct bt_gatt_attr        attr = {};\n    struct bt_gatt_service_val value;\n\n    start_handle = sys_le16_to_cpu(rsp->list[i].start_handle);\n    end_handle   = sys_le16_to_cpu(rsp->list[i].end_handle);\n\n    BT_DBG(\"start_handle 0x%04x end_handle 0x%04x\", start_handle, end_handle);\n\n    if (params->type == BT_GATT_DISCOVER_PRIMARY) {\n      attr.uuid = BT_UUID_GATT_PRIMARY;\n    } else {\n      attr.uuid = BT_UUID_GATT_SECONDARY;\n    }\n\n    value.end_handle = end_handle;\n    value.uuid       = params->uuid;\n\n    attr.handle    = start_handle;\n    attr.user_data = &value;\n\n    if (params->func(conn, &attr, params) == BT_GATT_ITER_STOP) {\n#if defined(BFLB_BLE_DISCOVER_ONGOING)\n      discover_ongoing = BT_GATT_ITER_STOP;\n#endif\n      return;\n    }\n  }\n\n  /* Stop if could not parse the whole PDU */\n  if (length > 0) {\n    goto done;\n  }\n\n  gatt_discover_next(conn, end_handle, params);\n\n  return;\ndone:\n  params->func(conn, NULL, params);\n#if defined(BFLB_BLE_DISCOVER_ONGOING)\n  discover_ongoing = BT_GATT_ITER_STOP;\n#endif\n}\n\nstatic int gatt_find_type(struct bt_conn *conn, struct bt_gatt_discover_params *params) {\n  struct net_buf              *buf;\n  struct bt_att_find_type_req *req;\n  struct bt_uuid              *uuid;\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_FIND_TYPE_REQ, sizeof(*req));\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  req               = net_buf_add(buf, sizeof(*req));\n  req->start_handle = sys_cpu_to_le16(params->start_handle);\n  req->end_handle   = sys_cpu_to_le16(params->end_handle);\n\n  if (params->type == BT_GATT_DISCOVER_PRIMARY) {\n    uuid = BT_UUID_GATT_PRIMARY;\n  } else {\n    uuid = BT_UUID_GATT_SECONDARY;\n  }\n\n  req->type = sys_cpu_to_le16(BT_UUID_16(uuid)->val);\n\n  BT_DBG(\"uuid %s start_handle 0x%04x end_handle 0x%04x\", bt_uuid_str(params->uuid), params->start_handle, params->end_handle);\n\n  switch (params->uuid->type) {\n  case BT_UUID_TYPE_16:\n    net_buf_add_le16(buf, BT_UUID_16(params->uuid)->val);\n    break;\n  case BT_UUID_TYPE_128:\n    net_buf_add_mem(buf, BT_UUID_128(params->uuid)->val, 16);\n    break;\n  default:\n    BT_ERR(\"Unknown UUID type %u\", params->uuid->type);\n    net_buf_unref(buf);\n    return -EINVAL;\n  }\n\n  return gatt_send(conn, buf, gatt_find_type_rsp, params, NULL);\n}\n\nstatic void read_included_uuid_cb(struct bt_conn *conn, u8_t err, const void *pdu, u16_t length, void *user_data) {\n  struct bt_gatt_discover_params *params = user_data;\n  struct bt_gatt_include          value;\n  struct bt_gatt_attr            *attr;\n  union {\n    struct bt_uuid     uuid;\n    struct bt_uuid_128 u128;\n  } u;\n\n  if (length != 16U) {\n    BT_ERR(\"Invalid data len %u\", length);\n    params->func(conn, NULL, params);\n    return;\n  }\n\n  value.start_handle = params->_included.start_handle;\n  value.end_handle   = params->_included.end_handle;\n  value.uuid         = &u.uuid;\n  u.uuid.type        = BT_UUID_TYPE_128;\n  memcpy(u.u128.val, pdu, length);\n\n  BT_DBG(\"handle 0x%04x uuid %s start_handle 0x%04x \"\n         \"end_handle 0x%04x\\n\",\n         params->_included.attr_handle, bt_uuid_str(&u.uuid), value.start_handle, value.end_handle);\n\n  /* Skip if UUID is set but doesn't match */\n  if (params->uuid && bt_uuid_cmp(&u.uuid, params->uuid)) {\n    goto next;\n  }\n\n  attr         = (&(struct bt_gatt_attr){\n              .uuid      = BT_UUID_GATT_INCLUDE,\n              .user_data = &value,\n  });\n  attr->handle = params->_included.attr_handle;\n\n  if (params->func(conn, attr, params) == BT_GATT_ITER_STOP) {\n    return;\n  }\nnext:\n  gatt_discover_next(conn, params->start_handle, params);\n\n  return;\n}\n\nstatic int read_included_uuid(struct bt_conn *conn, struct bt_gatt_discover_params *params) {\n  struct net_buf         *buf;\n  struct bt_att_read_req *req;\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_READ_REQ, sizeof(*req));\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  req         = net_buf_add(buf, sizeof(*req));\n  req->handle = sys_cpu_to_le16(params->_included.start_handle);\n\n  BT_DBG(\"handle 0x%04x\", params->_included.start_handle);\n\n  return gatt_send(conn, buf, read_included_uuid_cb, params, NULL);\n}\n\nstatic u16_t parse_include(struct bt_conn *conn, const void *pdu, struct bt_gatt_discover_params *params, u16_t length) {\n  const struct bt_att_read_type_rsp *rsp    = pdu;\n  u16_t                              handle = 0U;\n  struct bt_gatt_include             value;\n  union {\n    struct bt_uuid     uuid;\n    struct bt_uuid_16  u16;\n    struct bt_uuid_128 u128;\n  } u;\n\n  /* Data can be either in UUID16 or UUID128 */\n  switch (rsp->len) {\n  case 8: /* UUID16 */\n    u.uuid.type = BT_UUID_TYPE_16;\n    break;\n  case 6: /* UUID128 */\n    /* BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part G] page 550\n     * To get the included service UUID when the included service\n     * uses a 128-bit UUID, the Read Request is used.\n     */\n    u.uuid.type = BT_UUID_TYPE_128;\n    break;\n  default:\n    BT_ERR(\"Invalid data len %u\", rsp->len);\n    goto done;\n  }\n\n  /* Parse include found */\n  for (length--, pdu = rsp->data; length >= rsp->len; length -= rsp->len, pdu = (const u8_t *)pdu + rsp->len) {\n    struct bt_gatt_attr      *attr;\n    const struct bt_att_data *data = pdu;\n    struct gatt_incl         *incl = (void *)data->value;\n\n    handle = sys_le16_to_cpu(data->handle);\n    /* Handle 0 is invalid */\n    if (!handle) {\n      goto done;\n    }\n\n    /* Convert include data, bt_gatt_incl and gatt_incl\n     * have different formats so the conversion have to be done\n     * field by field.\n     */\n    value.start_handle = sys_le16_to_cpu(incl->start_handle);\n    value.end_handle   = sys_le16_to_cpu(incl->end_handle);\n\n    switch (u.uuid.type) {\n    case BT_UUID_TYPE_16:\n      value.uuid = &u.uuid;\n      u.u16.val  = sys_le16_to_cpu(incl->uuid16);\n      break;\n    case BT_UUID_TYPE_128:\n      params->_included.attr_handle  = handle;\n      params->_included.start_handle = value.start_handle;\n      params->_included.end_handle   = value.end_handle;\n\n      return read_included_uuid(conn, params);\n    }\n\n    BT_DBG(\"handle 0x%04x uuid %s start_handle 0x%04x \"\n           \"end_handle 0x%04x\\n\",\n           handle, bt_uuid_str(&u.uuid), value.start_handle, value.end_handle);\n\n    /* Skip if UUID is set but doesn't match */\n    if (params->uuid && bt_uuid_cmp(&u.uuid, params->uuid)) {\n      continue;\n    }\n\n    attr         = (&(struct bt_gatt_attr){\n                .uuid      = BT_UUID_GATT_INCLUDE,\n                .user_data = &value,\n    });\n    attr->handle = handle;\n\n    if (params->func(conn, attr, params) == BT_GATT_ITER_STOP) {\n      return 0;\n    }\n  }\n\n  /* Whole PDU read without error */\n  if (length == 0U && handle) {\n    return handle;\n  }\n\ndone:\n  params->func(conn, NULL, params);\n  return 0;\n}\n\n#define BT_GATT_CHRC(_uuid, _handle, _props)                                                                                                                                                           \\\n  BT_GATT_ATTRIBUTE(BT_UUID_GATT_CHRC, BT_GATT_PERM_READ, bt_gatt_attr_read_chrc, NULL,                                                                                                                \\\n                    (&(struct bt_gatt_chrc){                                                                                                                                                           \\\n                        .uuid         = _uuid,                                                                                                                                                         \\\n                        .value_handle = _handle,                                                                                                                                                       \\\n                        .properties   = _props,                                                                                                                                                        \\\n                    }))\n\nstatic u16_t parse_characteristic(struct bt_conn *conn, const void *pdu, struct bt_gatt_discover_params *params, u16_t length) {\n  const struct bt_att_read_type_rsp *rsp    = pdu;\n  u16_t                              handle = 0U;\n  union {\n    struct bt_uuid     uuid;\n    struct bt_uuid_16  u16;\n    struct bt_uuid_128 u128;\n  } u;\n\n  /* Data can be either in UUID16 or UUID128 */\n  switch (rsp->len) {\n  case 7: /* UUID16 */\n    u.uuid.type = BT_UUID_TYPE_16;\n    break;\n  case 21: /* UUID128 */\n    u.uuid.type = BT_UUID_TYPE_128;\n    break;\n  default:\n    BT_ERR(\"Invalid data len %u\", rsp->len);\n    goto done;\n  }\n\n  /* Parse characteristics found */\n  for (length--, pdu = rsp->data; length >= rsp->len; length -= rsp->len, pdu = (const u8_t *)pdu + rsp->len) {\n    struct bt_gatt_attr      *attr;\n    const struct bt_att_data *data = pdu;\n    struct gatt_chrc         *chrc = (void *)data->value;\n\n    handle = sys_le16_to_cpu(data->handle);\n    /* Handle 0 is invalid */\n    if (!handle) {\n      goto done;\n    }\n\n    switch (u.uuid.type) {\n    case BT_UUID_TYPE_16:\n      u.u16.val = sys_le16_to_cpu(chrc->uuid16);\n      break;\n    case BT_UUID_TYPE_128:\n      memcpy(u.u128.val, chrc->uuid, sizeof(chrc->uuid));\n      break;\n    }\n\n    BT_DBG(\"handle 0x%04x uuid %s properties 0x%02x\", handle, bt_uuid_str(&u.uuid), chrc->properties);\n\n#if defined(CONFIG_BT_STACK_PTS)\n    if (event_flag != gatt_discover_chara) {\n      /* Skip if UUID is set but doesn't match */\n      if (params->uuid && bt_uuid_cmp(&u.uuid, params->uuid))\n        continue;\n    }\n#else\n    /* Skip if UUID is set but doesn't match */\n    if (params->uuid && bt_uuid_cmp(&u.uuid, params->uuid)) {\n      continue;\n    }\n#endif\n\n    attr         = (&(struct bt_gatt_attr)BT_GATT_CHRC(&u.uuid, chrc->value_handle, chrc->properties));\n    attr->handle = handle;\n\n    if (params->func(conn, attr, params) == BT_GATT_ITER_STOP) {\n      return 0;\n    }\n  }\n\n  /* Whole PDU read without error */\n  if (length == 0U && handle) {\n    return handle;\n  }\n\ndone:\n  params->func(conn, NULL, params);\n  return 0;\n}\n\nstatic void gatt_read_type_rsp(struct bt_conn *conn, u8_t err, const void *pdu, u16_t length, void *user_data) {\n  struct bt_gatt_discover_params *params = user_data;\n  u16_t                           handle;\n\n  BT_DBG(\"err 0x%02x\", err);\n\n  if (err) {\n    params->func(conn, NULL, params);\n#if defined(BFLB_BLE_DISCOVER_ONGOING)\n    discover_ongoing = BT_GATT_ITER_STOP;\n#endif\n    return;\n  }\n\n  if (params->type == BT_GATT_DISCOVER_INCLUDE) {\n    handle = parse_include(conn, pdu, params, length);\n  } else {\n    handle = parse_characteristic(conn, pdu, params, length);\n  }\n\n  if (!handle) {\n#if defined(BFLB_BLE_DISCOVER_ONGOING)\n    discover_ongoing = BT_GATT_ITER_STOP;\n#endif\n    return;\n  }\n\n  gatt_discover_next(conn, handle, params);\n}\n\nstatic int gatt_read_type(struct bt_conn *conn, struct bt_gatt_discover_params *params) {\n  struct net_buf              *buf;\n  struct bt_att_read_type_req *req;\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_READ_TYPE_REQ, sizeof(*req));\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  req               = net_buf_add(buf, sizeof(*req));\n  req->start_handle = sys_cpu_to_le16(params->start_handle);\n  req->end_handle   = sys_cpu_to_le16(params->end_handle);\n\n  if (params->type == BT_GATT_DISCOVER_INCLUDE) {\n    net_buf_add_le16(buf, BT_UUID_16(BT_UUID_GATT_INCLUDE)->val);\n  } else {\n    net_buf_add_le16(buf, BT_UUID_16(BT_UUID_GATT_CHRC)->val);\n  }\n\n  BT_DBG(\"start_handle 0x%04x end_handle 0x%04x\", params->start_handle, params->end_handle);\n\n  return gatt_send(conn, buf, gatt_read_type_rsp, params, NULL);\n}\n\nstatic u16_t parse_service(struct bt_conn *conn, const void *pdu, struct bt_gatt_discover_params *params, u16_t length) {\n  const struct bt_att_read_group_rsp *rsp = pdu;\n  u16_t                               start_handle, end_handle = 0U;\n  union {\n    struct bt_uuid     uuid;\n    struct bt_uuid_16  u16;\n    struct bt_uuid_128 u128;\n  } u;\n\n  /* Data can be either in UUID16 or UUID128 */\n  switch (rsp->len) {\n  case 6: /* UUID16 */\n    u.uuid.type = BT_UUID_TYPE_16;\n    break;\n  case 20: /* UUID128 */\n    u.uuid.type = BT_UUID_TYPE_128;\n    break;\n  default:\n    BT_ERR(\"Invalid data len %u\", rsp->len);\n    goto done;\n  }\n\n  /* Parse services found */\n  for (length--, pdu = rsp->data; length >= rsp->len; length -= rsp->len, pdu = (const u8_t *)pdu + rsp->len) {\n    struct bt_gatt_attr             attr = {};\n    struct bt_gatt_service_val      value;\n    const struct bt_att_group_data *data = pdu;\n\n    start_handle = sys_le16_to_cpu(data->start_handle);\n    if (!start_handle) {\n      goto done;\n    }\n\n    end_handle = sys_le16_to_cpu(data->end_handle);\n    if (!end_handle || end_handle < start_handle) {\n      goto done;\n    }\n\n    switch (u.uuid.type) {\n    case BT_UUID_TYPE_16:\n      memcpy(&u.u16.val, data->value, sizeof(u.u16.val));\n      u.u16.val = sys_le16_to_cpu(u.u16.val);\n      break;\n    case BT_UUID_TYPE_128:\n      memcpy(u.u128.val, data->value, sizeof(u.u128.val));\n      break;\n    }\n\n    BT_DBG(\"start_handle 0x%04x end_handle 0x%04x uuid %s\", start_handle, end_handle, bt_uuid_str(&u.uuid));\n\n    if (params->type == BT_GATT_DISCOVER_PRIMARY) {\n      attr.uuid = BT_UUID_GATT_PRIMARY;\n    } else {\n      attr.uuid = BT_UUID_GATT_SECONDARY;\n    }\n\n    value.end_handle = end_handle;\n    value.uuid       = &u.uuid;\n\n    attr.handle    = start_handle;\n    attr.user_data = &value;\n\n    if (params->func(conn, &attr, params) == BT_GATT_ITER_STOP) {\n      return 0;\n    }\n  }\n\n  /* Whole PDU read without error */\n  if (length == 0U && end_handle) {\n    return end_handle;\n  }\n\ndone:\n  params->func(conn, NULL, params);\n  return 0;\n}\n\nstatic void gatt_read_group_rsp(struct bt_conn *conn, u8_t err, const void *pdu, u16_t length, void *user_data) {\n  struct bt_gatt_discover_params *params = user_data;\n  u16_t                           handle;\n\n  BT_DBG(\"err 0x%02x\", err);\n\n  if (err) {\n    params->func(conn, NULL, params);\n#if defined(BFLB_BLE_DISCOVER_ONGOING)\n    discover_ongoing = BT_GATT_ITER_STOP;\n#endif\n    return;\n  }\n\n  handle = parse_service(conn, pdu, params, length);\n  if (!handle) {\n#if defined(BFLB_BLE_DISCOVER_ONGOING)\n    discover_ongoing = BT_GATT_ITER_STOP;\n#endif\n    return;\n  }\n\n  gatt_discover_next(conn, handle, params);\n}\n\nstatic int gatt_read_group(struct bt_conn *conn, struct bt_gatt_discover_params *params) {\n  struct net_buf               *buf;\n  struct bt_att_read_group_req *req;\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_READ_GROUP_REQ, sizeof(*req));\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  req               = net_buf_add(buf, sizeof(*req));\n  req->start_handle = sys_cpu_to_le16(params->start_handle);\n  req->end_handle   = sys_cpu_to_le16(params->end_handle);\n\n  if (params->type == BT_GATT_DISCOVER_PRIMARY) {\n    net_buf_add_le16(buf, BT_UUID_16(BT_UUID_GATT_PRIMARY)->val);\n  } else {\n    net_buf_add_le16(buf, BT_UUID_16(BT_UUID_GATT_SECONDARY)->val);\n  }\n\n  BT_DBG(\"start_handle 0x%04x end_handle 0x%04x\", params->start_handle, params->end_handle);\n\n  return gatt_send(conn, buf, gatt_read_group_rsp, params, NULL);\n}\n\nstatic void gatt_find_info_rsp(struct bt_conn *conn, u8_t err, const void *pdu, u16_t length, void *user_data) {\n  const struct bt_att_find_info_rsp *rsp    = pdu;\n  struct bt_gatt_discover_params    *params = user_data;\n  u16_t                              handle = 0U;\n  u16_t                              len;\n  union {\n    const struct bt_att_info_16  *i16;\n    const struct bt_att_info_128 *i128;\n  } info;\n  union {\n    struct bt_uuid     uuid;\n    struct bt_uuid_16  u16;\n    struct bt_uuid_128 u128;\n  } u;\n  int  i;\n  bool skip = false;\n\n  BT_DBG(\"err 0x%02x\", err);\n\n  if (err) {\n    goto done;\n  }\n\n  /* Data can be either in UUID16 or UUID128 */\n  switch (rsp->format) {\n  case BT_ATT_INFO_16:\n    u.uuid.type = BT_UUID_TYPE_16;\n    len         = sizeof(*info.i16);\n    break;\n  case BT_ATT_INFO_128:\n    u.uuid.type = BT_UUID_TYPE_128;\n    len         = sizeof(*info.i128);\n    break;\n  default:\n    BT_ERR(\"Invalid format %u\", rsp->format);\n    goto done;\n  }\n\n  length--;\n\n  /* Check if there is a least one descriptor in the response */\n  if (length < len) {\n    goto done;\n  }\n\n  /* Parse descriptors found */\n  for (i = length / len, pdu = rsp->info; i != 0; i--, pdu = (const u8_t *)pdu + len) {\n    struct bt_gatt_attr *attr;\n\n    info.i16 = pdu;\n    handle   = sys_le16_to_cpu(info.i16->handle);\n\n    if (skip) {\n      skip = false;\n      continue;\n    }\n\n    switch (u.uuid.type) {\n    case BT_UUID_TYPE_16:\n      u.u16.val = sys_le16_to_cpu(info.i16->uuid);\n      break;\n    case BT_UUID_TYPE_128:\n      memcpy(u.u128.val, info.i128->uuid, 16);\n      break;\n    }\n\n    BT_DBG(\"handle 0x%04x uuid %s\", handle, bt_uuid_str(&u.uuid));\n\n    /* Skip if UUID is set but doesn't match */\n    if (params->uuid && bt_uuid_cmp(&u.uuid, params->uuid)) {\n      continue;\n    }\n\n    if (params->type == BT_GATT_DISCOVER_DESCRIPTOR) {\n      /* Skip attributes that are not considered\n       * descriptors.\n       */\n      if (!bt_uuid_cmp(&u.uuid, BT_UUID_GATT_PRIMARY) || !bt_uuid_cmp(&u.uuid, BT_UUID_GATT_SECONDARY) || !bt_uuid_cmp(&u.uuid, BT_UUID_GATT_INCLUDE)) {\n        continue;\n      }\n\n      /* If Characteristic Declaration skip ahead as the next\n       * entry must be its value.\n       */\n      if (!bt_uuid_cmp(&u.uuid, BT_UUID_GATT_CHRC)) {\n        skip = true;\n        continue;\n      }\n    }\n\n    attr         = (&(struct bt_gatt_attr)BT_GATT_DESCRIPTOR(&u.uuid, 0, NULL, NULL, NULL));\n    attr->handle = handle;\n\n    if (params->func(conn, attr, params) == BT_GATT_ITER_STOP) {\n#if defined(BFLB_BLE_DISCOVER_ONGOING)\n      discover_ongoing = BT_GATT_ITER_STOP;\n#endif\n      return;\n    }\n  }\n\n  gatt_discover_next(conn, handle, params);\n\n  return;\n\ndone:\n  params->func(conn, NULL, params);\n#if defined(BFLB_BLE_DISCOVER_ONGOING)\n  discover_ongoing = BT_GATT_ITER_STOP;\n#endif\n}\n\nstatic int gatt_find_info(struct bt_conn *conn, struct bt_gatt_discover_params *params) {\n  struct net_buf              *buf;\n  struct bt_att_find_info_req *req;\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_FIND_INFO_REQ, sizeof(*req));\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  req               = net_buf_add(buf, sizeof(*req));\n  req->start_handle = sys_cpu_to_le16(params->start_handle);\n  req->end_handle   = sys_cpu_to_le16(params->end_handle);\n\n  BT_DBG(\"start_handle 0x%04x end_handle 0x%04x\", params->start_handle, params->end_handle);\n\n  return gatt_send(conn, buf, gatt_find_info_rsp, params, NULL);\n}\n\nint bt_gatt_discover(struct bt_conn *conn, struct bt_gatt_discover_params *params) {\n  __ASSERT(conn, \"invalid parameters\\n\");\n  __ASSERT(params && params->func, \"invalid parameters\\n\");\n  __ASSERT((params->start_handle && params->end_handle), \"invalid parameters\\n\");\n  __ASSERT((params->start_handle <= params->end_handle), \"invalid parameters\\n\");\n\n  if (conn->state != BT_CONN_CONNECTED) {\n    return -ENOTCONN;\n  }\n\n#if defined(BFLB_BLE_DISCOVER_ONGOING)\n  if (discover_ongoing != BT_GATT_ITER_STOP) {\n    return -EINPROGRESS;\n  }\n  discover_ongoing = BT_GATT_ITER_CONTINUE;\n\n  return bt_gatt_discover_continue(conn, params);\n}\nint bt_gatt_discover_continue(struct bt_conn *conn, struct bt_gatt_discover_params *params) {\n#endif\n  switch (params->type) {\n  case BT_GATT_DISCOVER_PRIMARY:\n  case BT_GATT_DISCOVER_SECONDARY:\n    if (params->uuid) {\n      return gatt_find_type(conn, params);\n    }\n    return gatt_read_group(conn, params);\n  case BT_GATT_DISCOVER_INCLUDE:\n  case BT_GATT_DISCOVER_CHARACTERISTIC:\n    return gatt_read_type(conn, params);\n  case BT_GATT_DISCOVER_DESCRIPTOR:\n    /* Only descriptors can be filtered */\n    if (params->uuid && (!bt_uuid_cmp(params->uuid, BT_UUID_GATT_PRIMARY) || !bt_uuid_cmp(params->uuid, BT_UUID_GATT_SECONDARY) || !bt_uuid_cmp(params->uuid, BT_UUID_GATT_INCLUDE) ||\n                         !bt_uuid_cmp(params->uuid, BT_UUID_GATT_CHRC))) {\n      return -EINVAL;\n    }\n\n#if defined(BFLB_BLE)\n    __attribute__((fallthrough));\n#endif\n\n    /* Fallthrough. */\n  case BT_GATT_DISCOVER_ATTRIBUTE:\n    return gatt_find_info(conn, params);\n  default:\n    BT_ERR(\"Invalid discovery type: %u\", params->type);\n  }\n\n  return -EINVAL;\n}\n\nstatic void parse_read_by_uuid(struct bt_conn *conn, struct bt_gatt_read_params *params, const void *pdu, u16_t length) {\n  const struct bt_att_read_type_rsp *rsp = pdu;\n\n  /* Parse values found */\n  for (length--, pdu = rsp->data; length; length -= rsp->len, pdu = (const u8_t *)pdu + rsp->len) {\n    const struct bt_att_data *data = pdu;\n    u16_t                     handle;\n    u16_t                     len;\n\n    handle = sys_le16_to_cpu(data->handle);\n\n    /* Handle 0 is invalid */\n    if (!handle) {\n      BT_ERR(\"Invalid handle\");\n      return;\n    }\n\n    len = rsp->len > length ? length - 2 : rsp->len - 2;\n\n    BT_DBG(\"handle 0x%04x len %u value %u\", handle, rsp->len, len);\n\n    /* Update start_handle */\n    params->by_uuid.start_handle = handle;\n\n    if (params->func(conn, 0, params, data->value, len) == BT_GATT_ITER_STOP) {\n      return;\n    }\n\n    /* Check if long attribute */\n    if (rsp->len > length) {\n      break;\n    }\n\n    /* Stop if it's the last handle to be read */\n    if (params->by_uuid.start_handle == params->by_uuid.end_handle) {\n      params->func(conn, 0, params, NULL, 0);\n      return;\n    }\n\n    params->by_uuid.start_handle++;\n  }\n\n  /* Continue reading the attributes */\n  if (bt_gatt_read(conn, params) < 0) {\n    params->func(conn, BT_ATT_ERR_UNLIKELY, params, NULL, 0);\n  }\n}\n\nstatic void gatt_read_rsp(struct bt_conn *conn, u8_t err, const void *pdu, u16_t length, void *user_data) {\n  struct bt_gatt_read_params *params = user_data;\n\n  BT_DBG(\"err 0x%02x\", err);\n\n  if (err || !length) {\n    params->func(conn, err, params, NULL, 0);\n    return;\n  }\n\n  if (!params->handle_count) {\n    parse_read_by_uuid(conn, params, pdu, length);\n    return;\n  }\n\n  if (params->func(conn, 0, params, pdu, length) == BT_GATT_ITER_STOP) {\n    return;\n  }\n\n  /*\n   * Core Spec 4.2, Vol. 3, Part G, 4.8.1\n   * If the Characteristic Value is greater than (ATT_MTU - 1) octets\n   * in length, the Read Long Characteristic Value procedure may be used\n   * if the rest of the Characteristic Value is required.\n   */\n  if (length < (bt_att_get_mtu(conn) - 1)) {\n    params->func(conn, 0, params, NULL, 0);\n    return;\n  }\n\n  params->single.offset += length;\n\n  /* Continue reading the attribute */\n  if (bt_gatt_read(conn, params) < 0) {\n    params->func(conn, BT_ATT_ERR_UNLIKELY, params, NULL, 0);\n  }\n}\n\nstatic int gatt_read_blob(struct bt_conn *conn, struct bt_gatt_read_params *params) {\n  struct net_buf              *buf;\n  struct bt_att_read_blob_req *req;\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_READ_BLOB_REQ, sizeof(*req));\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  req         = net_buf_add(buf, sizeof(*req));\n  req->handle = sys_cpu_to_le16(params->single.handle);\n  req->offset = sys_cpu_to_le16(params->single.offset);\n\n  BT_DBG(\"handle 0x%04x offset 0x%04x\", params->single.handle, params->single.offset);\n\n  return gatt_send(conn, buf, gatt_read_rsp, params, NULL);\n}\n\nstatic int gatt_read_uuid(struct bt_conn *conn, struct bt_gatt_read_params *params) {\n  struct net_buf              *buf;\n  struct bt_att_read_type_req *req;\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_READ_TYPE_REQ, sizeof(*req));\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  req               = net_buf_add(buf, sizeof(*req));\n  req->start_handle = sys_cpu_to_le16(params->by_uuid.start_handle);\n  req->end_handle   = sys_cpu_to_le16(params->by_uuid.end_handle);\n\n  if (params->by_uuid.uuid->type == BT_UUID_TYPE_16) {\n    net_buf_add_le16(buf, BT_UUID_16(params->by_uuid.uuid)->val);\n  } else {\n    net_buf_add_mem(buf, BT_UUID_128(params->by_uuid.uuid)->val, 16);\n  }\n\n  BT_DBG(\"start_handle 0x%04x end_handle 0x%04x uuid %s\", params->by_uuid.start_handle, params->by_uuid.end_handle, bt_uuid_str(params->by_uuid.uuid));\n\n  return gatt_send(conn, buf, gatt_read_rsp, params, NULL);\n}\n\n#if defined(CONFIG_BT_GATT_READ_MULTIPLE)\nstatic void gatt_read_multiple_rsp(struct bt_conn *conn, u8_t err, const void *pdu, u16_t length, void *user_data) {\n  struct bt_gatt_read_params *params = user_data;\n\n  BT_DBG(\"err 0x%02x\", err);\n\n  if (err || !length) {\n    params->func(conn, err, params, NULL, 0);\n    return;\n  }\n\n  params->func(conn, 0, params, pdu, length);\n\n  /* mark read as complete since read multiple is single response */\n  params->func(conn, 0, params, NULL, 0);\n}\n\nstatic int gatt_read_multiple(struct bt_conn *conn, struct bt_gatt_read_params *params) {\n  struct net_buf *buf;\n  u8_t            i;\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_READ_MULT_REQ, params->handle_count * sizeof(u16_t));\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  for (i = 0U; i < params->handle_count; i++) {\n    net_buf_add_le16(buf, params->handles[i]);\n  }\n\n  return gatt_send(conn, buf, gatt_read_multiple_rsp, params, NULL);\n}\n#else\nstatic int gatt_read_multiple(struct bt_conn *conn, struct bt_gatt_read_params *params) { return -ENOTSUP; }\n#endif /* CONFIG_BT_GATT_READ_MULTIPLE */\n\nint bt_gatt_read(struct bt_conn *conn, struct bt_gatt_read_params *params) {\n  struct net_buf         *buf;\n  struct bt_att_read_req *req;\n\n  __ASSERT(conn, \"invalid parameters\\n\");\n  __ASSERT(params && params->func, \"invalid parameters\\n\");\n\n  if (conn->state != BT_CONN_CONNECTED) {\n    return -ENOTCONN;\n  }\n\n  if (params->handle_count == 0) {\n    return gatt_read_uuid(conn, params);\n  }\n\n  if (params->handle_count > 1) {\n    return gatt_read_multiple(conn, params);\n  }\n\n  if (params->single.offset) {\n    return gatt_read_blob(conn, params);\n  }\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_READ_REQ, sizeof(*req));\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  req         = net_buf_add(buf, sizeof(*req));\n  req->handle = sys_cpu_to_le16(params->single.handle);\n\n  BT_DBG(\"handle 0x%04x\", params->single.handle);\n\n  return gatt_send(conn, buf, gatt_read_rsp, params, NULL);\n}\n\nstatic void gatt_write_rsp(struct bt_conn *conn, u8_t err, const void *pdu, u16_t length, void *user_data) {\n  struct bt_gatt_write_params *params = user_data;\n\n  BT_DBG(\"err 0x%02x\", err);\n\n  params->func(conn, err, params);\n}\n\nint bt_gatt_write_without_response_cb(struct bt_conn *conn, u16_t handle, const void *data, u16_t length, bool sign, bt_gatt_complete_func_t func, void *user_data) {\n  struct net_buf          *buf;\n  struct bt_att_write_cmd *cmd;\n\n  __ASSERT(conn, \"invalid parameters\\n\");\n  __ASSERT(handle, \"invalid parameters\\n\");\n\n  if (conn->state != BT_CONN_CONNECTED) {\n    return -ENOTCONN;\n  }\n\n#if defined(CONFIG_BT_SMP)\n  if (conn->encrypt) {\n    /* Don't need to sign if already encrypted */\n    sign = false;\n  }\n#endif\n\n  if (sign) {\n    buf = bt_att_create_pdu(conn, BT_ATT_OP_SIGNED_WRITE_CMD, sizeof(*cmd) + length + 12);\n  } else {\n    buf = bt_att_create_pdu(conn, BT_ATT_OP_WRITE_CMD, sizeof(*cmd) + length);\n  }\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  cmd         = net_buf_add(buf, sizeof(*cmd));\n  cmd->handle = sys_cpu_to_le16(handle);\n  memcpy(cmd->value, data, length);\n  net_buf_add(buf, length);\n\n  BT_DBG(\"handle 0x%04x length %u\", handle, length);\n\n  return bt_att_send(conn, buf, func, user_data);\n}\n\nstatic int gatt_exec_write(struct bt_conn *conn, struct bt_gatt_write_params *params) {\n  struct net_buf               *buf;\n  struct bt_att_exec_write_req *req;\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_EXEC_WRITE_REQ, sizeof(*req));\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  req = net_buf_add(buf, sizeof(*req));\n#if defined(CONFIG_BT_STACK_PTS)\n  if (event_flag == gatt_cancel_write_req)\n    req->flags = BT_ATT_FLAG_CANCEL;\n  else\n    req->flags = BT_ATT_FLAG_EXEC;\n#else\n  req->flags = BT_ATT_FLAG_EXEC;\n#endif\n\n  BT_DBG(\"\");\n\n  return gatt_send(conn, buf, gatt_write_rsp, params, NULL);\n}\n\nstatic void gatt_prepare_write_rsp(struct bt_conn *conn, u8_t err, const void *pdu, u16_t length, void *user_data) {\n  struct bt_gatt_write_params *params = user_data;\n\n  BT_DBG(\"err 0x%02x\", err);\n\n  /* Don't continue in case of error */\n  if (err) {\n    params->func(conn, err, params);\n    return;\n  }\n  /* If there is no more data execute */\n  if (!params->length) {\n    gatt_exec_write(conn, params);\n    return;\n  }\n\n  /* Write next chunk */\n  bt_gatt_write(conn, params);\n}\n\nstatic int gatt_prepare_write(struct bt_conn *conn, struct bt_gatt_write_params *params)\n\n{\n  struct net_buf                  *buf;\n  struct bt_att_prepare_write_req *req;\n  u16_t                            len;\n\n  len = MIN(params->length, bt_att_get_mtu(conn) - sizeof(*req) - 1);\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_PREPARE_WRITE_REQ, sizeof(*req) + len);\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  req         = net_buf_add(buf, sizeof(*req));\n  req->handle = sys_cpu_to_le16(params->handle);\n  req->offset = sys_cpu_to_le16(params->offset);\n  memcpy(req->value, params->data, len);\n  net_buf_add(buf, len);\n\n  /* Update params */\n  params->offset += len;\n  params->data = (const u8_t *)params->data + len;\n  params->length -= len;\n\n  BT_DBG(\"handle 0x%04x offset %u len %u\", params->handle, params->offset, params->length);\n\n  return gatt_send(conn, buf, gatt_prepare_write_rsp, params, NULL);\n}\n\n#if defined(CONFIG_BT_STACK_PTS)\nint bt_gatt_prepare_write(struct bt_conn *conn, struct bt_gatt_write_params *params) { return gatt_prepare_write(conn, params); }\n#endif\n\nint bt_gatt_write(struct bt_conn *conn, struct bt_gatt_write_params *params) {\n  struct net_buf          *buf;\n  struct bt_att_write_req *req;\n\n  __ASSERT(conn, \"invalid parameters\\n\");\n  __ASSERT(params && params->func, \"invalid parameters\\n\");\n  __ASSERT(params->handle, \"invalid parameters\\n\");\n\n  if (conn->state != BT_CONN_CONNECTED) {\n    return -ENOTCONN;\n  }\n\n  /* Use Prepare Write if offset is set or Long Write is required */\n  if (params->offset || params->length > (bt_att_get_mtu(conn) - sizeof(*req) - 1)) {\n    return gatt_prepare_write(conn, params);\n  }\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_WRITE_REQ, sizeof(*req) + params->length);\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  req         = net_buf_add(buf, sizeof(*req));\n  req->handle = sys_cpu_to_le16(params->handle);\n  memcpy(req->value, params->data, params->length);\n  net_buf_add(buf, params->length);\n\n  BT_DBG(\"handle 0x%04x length %u\", params->handle, params->length);\n\n  return gatt_send(conn, buf, gatt_write_rsp, params, NULL);\n}\n\nstatic void gatt_subscription_add(struct bt_conn *conn, struct bt_gatt_subscribe_params *params) {\n  bt_addr_le_copy(&params->_peer, &conn->le.dst);\n\n  /* Prepend subscription */\n  sys_slist_prepend(&subscriptions, &params->node);\n}\n\nstatic void gatt_write_ccc_rsp(struct bt_conn *conn, u8_t err, const void *pdu, u16_t length, void *user_data) {\n  struct bt_gatt_subscribe_params *params = user_data;\n\n  BT_DBG(\"err 0x%02x\", err);\n\n  atomic_clear_bit(params->flags, BT_GATT_SUBSCRIBE_FLAG_WRITE_PENDING);\n\n  /* if write to CCC failed we remove subscription and notify app */\n  if (err) {\n    sys_snode_t *node, *tmp, *prev = NULL;\n    UNUSED(prev);\n\n    SYS_SLIST_FOR_EACH_NODE_SAFE(&subscriptions, node, tmp) {\n      if (node == &params->node) {\n        gatt_subscription_remove(conn, tmp, params);\n        break;\n      }\n\n      prev = node;\n    }\n  } else if (!params->value) {\n    /* Notify with NULL data to complete unsubscribe */\n    params->notify(conn, params, NULL, 0);\n  }\n#if defined(BFLB_BLE_PATCH_NOTIFY_WRITE_CCC_RSP)\n  else {\n    params->notify(conn, params, NULL, 0);\n  }\n#endif\n}\n\nstatic int gatt_write_ccc(struct bt_conn *conn, u16_t handle, u16_t value, bt_att_func_t func, struct bt_gatt_subscribe_params *params) {\n  struct net_buf          *buf;\n  struct bt_att_write_req *req;\n\n  buf = bt_att_create_pdu(conn, BT_ATT_OP_WRITE_REQ, sizeof(*req) + sizeof(u16_t));\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  req         = net_buf_add(buf, sizeof(*req));\n  req->handle = sys_cpu_to_le16(handle);\n  net_buf_add_le16(buf, value);\n\n  BT_DBG(\"handle 0x%04x value 0x%04x\", handle, value);\n\n  atomic_set_bit(params->flags, BT_GATT_SUBSCRIBE_FLAG_WRITE_PENDING);\n\n  return gatt_send(conn, buf, func, params, NULL);\n}\n\nint bt_gatt_subscribe(struct bt_conn *conn, struct bt_gatt_subscribe_params *params) {\n  struct bt_gatt_subscribe_params *tmp;\n  bool                             has_subscription = false;\n\n  __ASSERT(conn, \"invalid parameters\\n\");\n  __ASSERT(params && params->notify, \"invalid parameters\\n\");\n  __ASSERT(params->value, \"invalid parameters\\n\");\n  __ASSERT(params->ccc_handle, \"invalid parameters\\n\");\n\n  if (conn->state != BT_CONN_CONNECTED) {\n    return -ENOTCONN;\n  }\n\n  /* Lookup existing subscriptions */\n  SYS_SLIST_FOR_EACH_CONTAINER(&subscriptions, tmp, node) {\n    /* Fail if entry already exists */\n    if (tmp == params) {\n      return -EALREADY;\n    }\n\n    /* Check if another subscription exists */\n    if (!bt_conn_addr_le_cmp(conn, &tmp->_peer) && tmp->value_handle == params->value_handle && tmp->value >= params->value) {\n      has_subscription = true;\n    }\n  }\n\n  /* Skip write if already subscribed */\n  if (!has_subscription) {\n    int err;\n\n    err = gatt_write_ccc(conn, params->ccc_handle, params->value, gatt_write_ccc_rsp, params);\n    if (err) {\n      return err;\n    }\n  }\n\n  /*\n   * Add subscription before write complete as some implementation were\n   * reported to send notification before reply to CCC write.\n   */\n  gatt_subscription_add(conn, params);\n\n  return 0;\n}\n\nint bt_gatt_unsubscribe(struct bt_conn *conn, struct bt_gatt_subscribe_params *params) {\n  struct bt_gatt_subscribe_params *tmp, *next;\n  bool                             has_subscription = false, found = false;\n  sys_snode_t                     *prev = NULL;\n\n  __ASSERT(conn, \"invalid parameters\\n\");\n  __ASSERT(params, \"invalid parameters\\n\");\n\n  if (conn->state != BT_CONN_CONNECTED) {\n    return -ENOTCONN;\n  }\n\n  /* Lookup existing subscriptions */\n  SYS_SLIST_FOR_EACH_CONTAINER_SAFE(&subscriptions, tmp, next, node) {\n    /* Remove subscription */\n    if (params == tmp) {\n      found = true;\n      sys_slist_remove(&subscriptions, prev, &tmp->node);\n      /* Attempt to cancel if write is pending */\n      if (atomic_test_bit(params->flags, BT_GATT_SUBSCRIBE_FLAG_WRITE_PENDING)) {\n        bt_gatt_cancel(conn, params);\n      }\n      continue;\n    } else {\n      prev = &tmp->node;\n    }\n\n    /* Check if there still remains any other subscription */\n    if (!bt_conn_addr_le_cmp(conn, &tmp->_peer) && tmp->value_handle == params->value_handle) {\n      has_subscription = true;\n    }\n  }\n\n  if (!found) {\n    return -EINVAL;\n  }\n\n  if (has_subscription) {\n    /* Notify with NULL data to complete unsubscribe */\n    params->notify(conn, params, NULL, 0);\n    return 0;\n  }\n\n  params->value = 0x0000;\n\n  return gatt_write_ccc(conn, params->ccc_handle, params->value, gatt_write_ccc_rsp, params);\n}\n\nvoid bt_gatt_cancel(struct bt_conn *conn, void *params) { bt_att_req_cancel(conn, params); }\n\nstatic void add_subscriptions(struct bt_conn *conn) {\n  struct bt_gatt_subscribe_params *params;\n\n  /* Lookup existing subscriptions */\n  SYS_SLIST_FOR_EACH_CONTAINER(&subscriptions, params, node) {\n    if (bt_conn_addr_le_cmp(conn, &params->_peer)) {\n      continue;\n    }\n\n    /* Force write to CCC to workaround devices that don't track\n     * it properly.\n     */\n    gatt_write_ccc(conn, params->ccc_handle, params->value, gatt_write_ccc_rsp, params);\n  }\n}\n\n#endif /* CONFIG_BT_GATT_CLIENT */\n\n#define CCC_STORE_MAX 48\n\nstatic struct bt_gatt_ccc_cfg *ccc_find_cfg(struct _bt_gatt_ccc *ccc, const bt_addr_le_t *addr, u8_t id) {\n  for (size_t i = 0; i < ARRAY_SIZE(ccc->cfg); i++) {\n    if (id == ccc->cfg[i].id && !bt_addr_le_cmp(&ccc->cfg[i].peer, addr)) {\n      return &ccc->cfg[i];\n    }\n  }\n\n  return NULL;\n}\n\nstruct addr_with_id {\n  const bt_addr_le_t *addr;\n  u8_t                id;\n};\n\nstruct ccc_load {\n  struct addr_with_id addr_with_id;\n  struct ccc_store   *entry;\n  size_t              count;\n};\n\nstatic void ccc_clear(struct _bt_gatt_ccc *ccc, const bt_addr_le_t *addr, u8_t id) {\n  struct bt_gatt_ccc_cfg *cfg;\n\n  cfg = ccc_find_cfg(ccc, addr, id);\n  if (!cfg) {\n    BT_DBG(\"Unable to clear CCC: cfg not found\");\n    return;\n  }\n\n  clear_ccc_cfg(cfg);\n}\n\nstatic u8_t ccc_load(const struct bt_gatt_attr *attr, void *user_data) {\n  struct ccc_load        *load = user_data;\n  struct _bt_gatt_ccc    *ccc;\n  struct bt_gatt_ccc_cfg *cfg;\n\n  /* Check if attribute is a CCC */\n  if (attr->write != bt_gatt_attr_write_ccc) {\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  ccc = attr->user_data;\n\n  /* Clear if value was invalidated */\n  if (!load->entry) {\n    ccc_clear(ccc, load->addr_with_id.addr, load->addr_with_id.id);\n    return BT_GATT_ITER_CONTINUE;\n  } else if (!load->count) {\n    return BT_GATT_ITER_STOP;\n  }\n\n  /* Skip if value is not for the given attribute */\n  if (load->entry->handle != attr->handle) {\n    /* If attribute handle is bigger then it means\n     * the attribute no longer exists and cannot\n     * be restored.\n     */\n    if (load->entry->handle < attr->handle) {\n      BT_DBG(\"Unable to restore CCC: handle 0x%04x cannot be\"\n             \" found\",\n             load->entry->handle);\n      goto next;\n    }\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  BT_DBG(\"Restoring CCC: handle 0x%04x value 0x%04x\", load->entry->handle, load->entry->value);\n\n  cfg = ccc_find_cfg(ccc, load->addr_with_id.addr, load->addr_with_id.id);\n  if (!cfg) {\n    cfg = ccc_find_cfg(ccc, BT_ADDR_LE_ANY, 0);\n    if (!cfg) {\n      BT_DBG(\"Unable to restore CCC: no cfg left\");\n      goto next;\n    }\n    bt_addr_le_copy(&cfg->peer, load->addr_with_id.addr);\n    cfg->id = load->addr_with_id.id;\n  }\n\n  cfg->value = load->entry->value;\n\nnext:\n  load->entry++;\n  load->count--;\n\n  return load->count ? BT_GATT_ITER_CONTINUE : BT_GATT_ITER_STOP;\n}\n\n#if defined(BFLB_BLE)\nstatic int ccc_set(const char *key, u8_t id, bt_addr_le_t *addr)\n#else\nstatic int ccc_set(const char *name, size_t len_rd, settings_read_cb read_cb, void *cb_arg)\n#endif\n{\n  if (IS_ENABLED(CONFIG_BT_SETTINGS)) {\n    struct ccc_store ccc_store[CCC_STORE_MAX];\n    struct ccc_load  load;\n#if defined(BFLB_BLE)\n    size_t len;\n    int    err;\n#else\n    bt_addr_le_t addr;\n    const char  *next;\n    int          len, err;\n#endif\n\n#if defined(BFLB_BLE)\n    err = bt_settings_get_bin(key, (u8_t *)ccc_store, CCC_STORE_MAX, &len);\n    if (err)\n      return err;\n\n    load.addr_with_id.id   = id;\n    load.addr_with_id.addr = addr;\n    load.entry             = ccc_store;\n    load.count             = len / sizeof(*ccc_store);\n#else\n    settings_name_next(name, &next);\n\n    if (!name) {\n      BT_ERR(\"Insufficient number of arguments\");\n      return -EINVAL;\n    } else if (!next) {\n      load.addr_with_id.id = BT_ID_DEFAULT;\n    } else {\n      load.addr_with_id.id = strtol(next, NULL, 10);\n    }\n\n    err = bt_settings_decode_key(name, &addr);\n    if (err) {\n      BT_ERR(\"Unable to decode address %s\", log_strdup(name));\n      return -EINVAL;\n    }\n\n    load.addr_with_id.addr = &addr;\n\n    if (len_rd) {\n      len = read_cb(cb_arg, ccc_store, sizeof(ccc_store));\n\n      if (len < 0) {\n        BT_ERR(\"Failed to decode value (err %d)\", len);\n        return len;\n      }\n\n      load.entry = ccc_store;\n      load.count = len / sizeof(*ccc_store);\n\n      for (int i = 0; i < load.count; i++) {\n        BT_DBG(\"Read CCC: handle 0x%04x value 0x%04x\", ccc_store[i].handle, ccc_store[i].value);\n      }\n    } else {\n      load.entry = NULL;\n      load.count = 0;\n    }\n#endif\n\n    bt_gatt_foreach_attr(0x0001, 0xffff, ccc_load, &load);\n\n    BT_DBG(\"Restored CCC for id:%x\"\n           \"PRIu8\"\n           \" addr:%s\",\n           load.addr_with_id.id, bt_addr_le_str(load.addr_with_id.addr));\n  }\n\n  return 0;\n}\n\n#if !defined(BFLB_BLE)\n#if !IS_ENABLED(CONFIG_BT_SETTINGS_CCC_LAZY_LOADING)\n/* Only register the ccc_set settings handler when not loading on-demand */\nSETTINGS_STATIC_HANDLER_DEFINE(bt_ccc, \"bt/ccc\", NULL, ccc_set, NULL, NULL);\n#endif /* CONFIG_BT_SETTINGS_CCC_LAZY_LOADING */\n#endif\n\n#if !defined(BFLB_BLE)\nstatic int ccc_set_direct(const char *key, size_t len, settings_read_cb read_cb, void *cb_arg, void *param) {\n  if (IS_ENABLED(CONFIG_BT_SETTINGS)) {\n    const char *name;\n\n    BT_DBG(\"key: %s\", log_strdup((const char *)param));\n\n    /* Only \"bt/ccc\" settings should ever come here */\n    if (!settings_name_steq((const char *)param, \"bt/ccc\", &name)) {\n      BT_ERR(\"Invalid key\");\n      return -EINVAL;\n    }\n\n    return ccc_set(name, len, read_cb, cb_arg);\n  }\n  return 0;\n}\n#endif\n\n#if defined(BFLB_BLE)\n#if defined(CONFIG_BT_GATT_SERVICE_CHANGED)\n#if defined(CONFIG_BT_SETTINGS)\nstatic int sc_set(u8_t id, bt_addr_le_t *addr);\nstatic int sc_commit(void);\n#endif\n#endif\n#endif\nvoid bt_gatt_connected(struct bt_conn *conn) {\n  struct conn_data data;\n\n  BT_DBG(\"conn %p\", conn);\n\n  data.conn = conn;\n  data.sec  = BT_SECURITY_L1;\n\n  /* Load CCC settings from backend if bonded */\n  if (IS_ENABLED(CONFIG_BT_SETTINGS_CCC_LAZY_LOADING) && bt_addr_le_is_bonded(conn->id, &conn->le.dst)) {\n    char key[BT_SETTINGS_KEY_MAX];\n\n    if (conn->id) {\n      char id_str[4];\n\n      u8_to_dec(id_str, sizeof(id_str), conn->id);\n      bt_settings_encode_key(key, sizeof(key), \"ccc\", &conn->le.dst, id_str);\n    } else {\n      bt_settings_encode_key(key, sizeof(key), \"ccc\", &conn->le.dst, NULL);\n    }\n#if defined(BFLB_BLE)\n    ccc_set(key, conn->id, &conn->le.dst);\n#else\n    settings_load_subtree_direct(key, ccc_set_direct, (void *)key);\n#endif\n  }\n\n  bt_gatt_foreach_attr(0x0001, 0xffff, update_ccc, &data);\n\n  /* BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part C page 2192:\n   *\n   * 10.3.1.1 Handling of GATT indications and notifications\n   *\n   * A client requests a server to send indications and notifications\n   * by appropriately configuring the server via a Client Characteristic\n   * Configuration Descriptor. Since the configuration is persistent\n   * across a disconnection and reconnection, security requirements must\n   * be checked against the configuration upon a reconnection before\n   * sending indications or notifications. When a server reconnects to a\n   * client to send an indication or notification for which security is\n   * required, the server shall initiate or request encryption with the\n   * client prior to sending an indication or notification. If the client\n   * does not have an LTK indicating that the client has lost the bond,\n   * enabling encryption will fail.\n   */\n  if (IS_ENABLED(CONFIG_BT_SMP) && bt_conn_get_security(conn) < data.sec) {\n    bt_conn_set_security(conn, data.sec);\n  }\n\n#if defined(CONFIG_BT_GATT_CLIENT)\n  add_subscriptions(conn);\n#endif /* CONFIG_BT_GATT_CLIENT */\n\n#if defined(BFLB_BLE)\n#if defined(CONFIG_BT_GATT_SERVICE_CHANGED)\n#if defined(CONFIG_BT_SETTINGS)\n  sc_set(conn->id, &conn->le.dst);\n  sc_commit();\n#endif\n#endif\n#endif\n}\n\nvoid bt_gatt_encrypt_change(struct bt_conn *conn) {\n  struct conn_data data;\n\n  BT_DBG(\"conn %p\", conn);\n\n  data.conn = conn;\n  data.sec  = BT_SECURITY_L1;\n\n  bt_gatt_foreach_attr(0x0001, 0xffff, update_ccc, &data);\n}\n\nbool bt_gatt_change_aware(struct bt_conn *conn, bool req) {\n#if defined(CONFIG_BT_GATT_CACHING)\n  struct gatt_cf_cfg *cfg;\n\n  cfg = find_cf_cfg(conn);\n  if (!cfg || !CF_ROBUST_CACHING(cfg)) {\n    return true;\n  }\n\n  if (atomic_test_bit(cfg->flags, CF_CHANGE_AWARE)) {\n    return true;\n  }\n\n  /* BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part G page 2350:\n   * If a change-unaware client sends an ATT command, the server shall\n   * ignore it.\n   */\n  if (!req) {\n    return false;\n  }\n\n  /* BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part G page 2347:\n   * 2.5.2.1 Robust Caching\n   * A connected client becomes change-aware when...\n   * The server sends the client a response with the error code set to\n   * Database Out Of Sync and then the server receives another ATT\n   * request from the client.\n   */\n  if (atomic_test_bit(cfg->flags, CF_OUT_OF_SYNC)) {\n    atomic_clear_bit(cfg->flags, CF_OUT_OF_SYNC);\n    atomic_set_bit(cfg->flags, CF_CHANGE_AWARE);\n    BT_DBG(\"%s change-aware\", bt_addr_le_str(&cfg->peer));\n    return true;\n  }\n\n  atomic_set_bit(cfg->flags, CF_OUT_OF_SYNC);\n\n  return false;\n#else\n  return true;\n#endif\n}\n\nstatic int bt_gatt_store_cf(struct bt_conn *conn) {\n#if defined(CONFIG_BT_GATT_CACHING)\n  struct gatt_cf_cfg *cfg;\n  char                key[BT_SETTINGS_KEY_MAX];\n  char               *str;\n  size_t              len;\n  int                 err;\n\n  cfg = find_cf_cfg(conn);\n  if (!cfg) {\n    /* No cfg found, just clear it */\n    BT_DBG(\"No config for CF\");\n    str = NULL;\n    len = 0;\n  } else {\n    str = (char *)cfg->data;\n    len = sizeof(cfg->data);\n\n    if (conn->id) {\n      char id_str[4];\n\n      u8_to_dec(id_str, sizeof(id_str), conn->id);\n      bt_settings_encode_key(key, sizeof(key), \"cf\", &conn->le.dst, id_str);\n    }\n  }\n\n  if (!cfg || !conn->id) {\n    bt_settings_encode_key(key, sizeof(key), \"cf\", &conn->le.dst, NULL);\n  }\n\n#if defined(BFLB_BLE)\n  err = settings_save_one(key, (u8_t *)str, len);\n#else\n  err = settings_save_one(key, str, len);\n#endif\n  if (err) {\n    BT_ERR(\"Failed to store Client Features (err %d)\", err);\n    return err;\n  }\n\n  BT_DBG(\"Stored CF for %s (%s)\", bt_addr_le_str(&conn->le.dst), log_strdup(key));\n#endif /* CONFIG_BT_GATT_CACHING */\n  return 0;\n}\n\nvoid bt_gatt_disconnected(struct bt_conn *conn) {\n  BT_DBG(\"conn %p\", conn);\n  bt_gatt_foreach_attr(0x0001, 0xffff, disconnected_cb, conn);\n\n#if defined(CONFIG_BT_SETTINGS_CCC_STORE_ON_WRITE)\n  gatt_ccc_conn_unqueue(conn);\n\n  if (gatt_ccc_conn_queue_is_empty()) {\n    k_delayed_work_cancel(&gatt_ccc_store.work);\n  }\n#endif\n\n  if (IS_ENABLED(CONFIG_BT_SETTINGS) && bt_addr_le_is_bonded(conn->id, &conn->le.dst)) {\n    bt_gatt_store_ccc(conn->id, &conn->le.dst);\n    bt_gatt_store_cf(conn);\n  }\n\n#if defined(CONFIG_BT_GATT_CLIENT)\n  remove_subscriptions(conn);\n#endif /* CONFIG_BT_GATT_CLIENT */\n\n#if defined(CONFIG_BT_GATT_CACHING)\n  remove_cf_cfg(conn);\n#endif\n}\n\n#if defined(BFLB_BLE_MTU_CHANGE_CB)\nvoid bt_gatt_mtu_changed(struct bt_conn *conn, u16_t mtu) {\n  if (gatt_mtu_changed_cb)\n    gatt_mtu_changed_cb(conn, (int)mtu);\n}\n\nvoid bt_gatt_register_mtu_callback(bt_gatt_mtu_changed_cb_t cb) { gatt_mtu_changed_cb = cb; }\n#endif\n\n#if defined(CONFIG_BT_SETTINGS)\n\nstruct ccc_save {\n  struct addr_with_id addr_with_id;\n  struct ccc_store    store[CCC_STORE_MAX];\n  size_t              count;\n};\n\nstatic u8_t ccc_save(const struct bt_gatt_attr *attr, void *user_data) {\n  struct ccc_save        *save = user_data;\n  struct _bt_gatt_ccc    *ccc;\n  struct bt_gatt_ccc_cfg *cfg;\n\n  /* Check if attribute is a CCC */\n  if (attr->write != bt_gatt_attr_write_ccc) {\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  ccc = attr->user_data;\n\n  /* Check if there is a cfg for the peer */\n  cfg = ccc_find_cfg(ccc, save->addr_with_id.addr, save->addr_with_id.id);\n  if (!cfg) {\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  BT_DBG(\"Storing CCCs handle 0x%04x value 0x%04x\", attr->handle, cfg->value);\n\n  save->store[save->count].handle = attr->handle;\n  save->store[save->count].value  = cfg->value;\n  save->count++;\n\n  return BT_GATT_ITER_CONTINUE;\n}\n\nint bt_gatt_store_ccc(u8_t id, const bt_addr_le_t *addr) {\n  struct ccc_save save;\n  char            key[BT_SETTINGS_KEY_MAX];\n  size_t          len;\n  char           *str;\n  int             err;\n\n  save.addr_with_id.addr = addr;\n  save.addr_with_id.id   = id;\n  save.count             = 0;\n\n  bt_gatt_foreach_attr(0x0001, 0xffff, ccc_save, &save);\n\n  if (id) {\n    char id_str[4];\n\n    u8_to_dec(id_str, sizeof(id_str), id);\n    bt_settings_encode_key(key, sizeof(key), \"ccc\", (bt_addr_le_t *)addr, id_str);\n  } else {\n    bt_settings_encode_key(key, sizeof(key), \"ccc\", (bt_addr_le_t *)addr, NULL);\n  }\n\n  if (save.count) {\n    str = (char *)save.store;\n    len = save.count * sizeof(*save.store);\n  } else {\n    /* No entries to encode, just clear */\n    str = NULL;\n    len = 0;\n  }\n\n  err = settings_save_one(key, (const u8_t *)str, len);\n  if (err) {\n    BT_ERR(\"Failed to store CCCs (err %d)\", err);\n    return err;\n  }\n\n  BT_DBG(\"Stored CCCs for %s (%s)\", bt_addr_le_str(addr), log_strdup(key));\n  if (len) {\n    for (int i = 0; i < save.count; i++) {\n      BT_DBG(\"  CCC: handle 0x%04x value 0x%04x\", save.store[i].handle, save.store[i].value);\n    }\n  } else {\n    BT_DBG(\"  CCC: NULL\");\n  }\n\n  return 0;\n}\n\nstatic u8_t remove_peer_from_attr(const struct bt_gatt_attr *attr, void *user_data) {\n  const struct addr_with_id *addr_with_id = user_data;\n  struct _bt_gatt_ccc       *ccc;\n  struct bt_gatt_ccc_cfg    *cfg;\n\n  /* Check if attribute is a CCC */\n  if (attr->write != bt_gatt_attr_write_ccc) {\n    return BT_GATT_ITER_CONTINUE;\n  }\n\n  ccc = attr->user_data;\n\n  /* Check if there is a cfg for the peer */\n  cfg = ccc_find_cfg(ccc, addr_with_id->addr, addr_with_id->id);\n  if (cfg) {\n    memset(cfg, 0, sizeof(*cfg));\n  }\n\n  return BT_GATT_ITER_CONTINUE;\n}\n\nstatic int bt_gatt_clear_ccc(u8_t id, const bt_addr_le_t *addr) {\n  char                key[BT_SETTINGS_KEY_MAX];\n  struct addr_with_id addr_with_id = {\n      .addr = addr,\n      .id   = id,\n  };\n\n  if (id) {\n    char id_str[4];\n\n    u8_to_dec(id_str, sizeof(id_str), id);\n    bt_settings_encode_key(key, sizeof(key), \"ccc\", (bt_addr_le_t *)addr, id_str);\n  } else {\n    bt_settings_encode_key(key, sizeof(key), \"ccc\", (bt_addr_le_t *)addr, NULL);\n  }\n\n  bt_gatt_foreach_attr(0x0001, 0xffff, remove_peer_from_attr, &addr_with_id);\n\n  return settings_delete(key);\n}\n\n#if defined(CONFIG_BT_GATT_CACHING)\nstatic struct gatt_cf_cfg *find_cf_cfg_by_addr(const bt_addr_le_t *addr) {\n  int i;\n\n  for (i = 0; i < ARRAY_SIZE(cf_cfg); i++) {\n    if (!bt_addr_le_cmp(addr, &cf_cfg[i].peer)) {\n      return &cf_cfg[i];\n    }\n  }\n\n  return NULL;\n}\n#endif /* CONFIG_BT_GATT_CACHING */\n\nstatic int bt_gatt_clear_cf(u8_t id, const bt_addr_le_t *addr) {\n#if defined(CONFIG_BT_GATT_CACHING)\n  char                key[BT_SETTINGS_KEY_MAX];\n  struct gatt_cf_cfg *cfg;\n\n  if (id) {\n    char id_str[4];\n\n    u8_to_dec(id_str, sizeof(id_str), id);\n    bt_settings_encode_key(key, sizeof(key), \"cf\", (bt_addr_le_t *)addr, id_str);\n  } else {\n    bt_settings_encode_key(key, sizeof(key), \"cf\", (bt_addr_le_t *)addr, NULL);\n  }\n\n  cfg = find_cf_cfg_by_addr(addr);\n  if (cfg) {\n    clear_cf_cfg(cfg);\n  }\n\n  return settings_delete(key);\n#endif /* CONFIG_BT_GATT_CACHING */\n  return 0;\n}\n\nstatic int sc_clear_by_addr(u8_t id, const bt_addr_le_t *addr) {\n  if (IS_ENABLED(CONFIG_BT_GATT_SERVICE_CHANGED)) {\n    struct gatt_sc_cfg *cfg;\n\n    cfg = find_sc_cfg(id, (bt_addr_le_t *)addr);\n    if (cfg) {\n      sc_clear(cfg);\n    }\n  }\n  return 0;\n}\n\nstatic void bt_gatt_clear_subscriptions(const bt_addr_le_t *addr) {\n#if defined(CONFIG_BT_GATT_CLIENT)\n  struct bt_gatt_subscribe_params *params, *tmp;\n  sys_snode_t                     *prev = NULL;\n\n  SYS_SLIST_FOR_EACH_CONTAINER_SAFE(&subscriptions, params, tmp, node) {\n    if (bt_addr_le_cmp(addr, &params->_peer)) {\n      prev = &params->node;\n      continue;\n    }\n    params->value = 0U;\n    gatt_subscription_remove(NULL, prev, params);\n  }\n#endif /* CONFIG_BT_GATT_CLIENT */\n}\n\nint bt_gatt_clear(u8_t id, const bt_addr_le_t *addr) {\n  int err;\n\n  err = bt_gatt_clear_ccc(id, addr);\n  if (err < 0) {\n    return err;\n  }\n\n  err = sc_clear_by_addr(id, addr);\n  if (err < 0) {\n    return err;\n  }\n\n  err = bt_gatt_clear_cf(id, addr);\n  if (err < 0) {\n    return err;\n  }\n\n  bt_gatt_clear_subscriptions(addr);\n\n  return 0;\n}\n\n#if defined(CONFIG_BT_GATT_SERVICE_CHANGED)\n#if defined(BFLB_BLE)\nstatic int sc_set(u8_t id, bt_addr_le_t *addr)\n#else\nstatic int sc_set(const char *name, size_t len_rd, settings_read_cb read_cb, void *cb_arg)\n#endif\n{\n  struct gatt_sc_cfg *cfg;\n#if !defined(BFLB_BLE)\n  u8_t         id;\n  bt_addr_le_t addr;\n  int          len, err;\n  const char  *next;\n#endif\n\n#if defined(BFLB_BLE)\n  int  err;\n  char key[BT_SETTINGS_KEY_MAX];\n\n  cfg = find_sc_cfg(id, addr);\n  if (!cfg) {\n    /* Find and initialize a free sc_cfg entry */\n    cfg = find_sc_cfg(BT_ID_DEFAULT, BT_ADDR_LE_ANY);\n    if (!cfg) {\n      BT_ERR(\"Unable to restore SC: no cfg left\");\n      return -ENOMEM;\n    }\n\n    cfg->id = id;\n    bt_addr_le_copy(&cfg->peer, addr);\n  }\n\n  if (id) {\n    char id_str[4];\n\n    u8_to_dec(id_str, sizeof(id_str), id);\n    bt_settings_encode_key(key, sizeof(key), \"sc\", addr, id_str);\n  } else {\n    bt_settings_encode_key(key, sizeof(key), \"sc\", addr, NULL);\n  }\n\n  err = bt_settings_get_bin(key, (u8_t *)cfg, sizeof(*cfg), NULL);\n  if (err)\n    memset(cfg, 0, sizeof(*cfg));\n  return err;\n#else\n  if (!name) {\n    BT_ERR(\"Insufficient number of arguments\");\n    return -EINVAL;\n  }\n\n  err = bt_settings_decode_key(name, &addr);\n  if (err) {\n    BT_ERR(\"Unable to decode address %s\", log_strdup(name));\n    return -EINVAL;\n  }\n\n  settings_name_next(name, &next);\n\n  if (!next) {\n    id = BT_ID_DEFAULT;\n  } else {\n    id = strtol(next, NULL, 10);\n  }\n\n  cfg = find_sc_cfg(id, &addr);\n  if (!cfg && len_rd) {\n    /* Find and initialize a free sc_cfg entry */\n    cfg = find_sc_cfg(BT_ID_DEFAULT, BT_ADDR_LE_ANY);\n    if (!cfg) {\n      BT_ERR(\"Unable to restore SC: no cfg left\");\n      return -ENOMEM;\n    }\n\n    cfg->id = id;\n    bt_addr_le_copy(&cfg->peer, &addr);\n  }\n\n  if (len_rd) {\n    len = read_cb(cb_arg, &cfg->data, sizeof(cfg->data));\n    if (len < 0) {\n      BT_ERR(\"Failed to decode value (err %d)\", len);\n      return len;\n    }\n    BT_DBG(\"Read SC: len %d\", len);\n\n    BT_DBG(\"Restored SC for %s\", bt_addr_le_str(&addr));\n  } else if (cfg) {\n    /* Clear configuration */\n    memset(cfg, 0, sizeof(*cfg));\n\n    BT_DBG(\"Removed SC for %s\", bt_addr_le_str(&addr));\n  }\n\n  return 0;\n#endif\n}\n\nstatic int sc_commit(void) {\n  atomic_clear_bit(gatt_sc.flags, SC_INDICATE_PENDING);\n\n  if (atomic_test_bit(gatt_sc.flags, SC_RANGE_CHANGED)) {\n    /* Schedule SC indication since the range has changed */\n    k_delayed_work_submit(&gatt_sc.work, SC_TIMEOUT);\n  }\n\n  return 0;\n}\n\n#if !defined(BFLB_BLE)\nSETTINGS_STATIC_HANDLER_DEFINE(bt_sc, \"bt/sc\", NULL, sc_set, sc_commit, NULL);\n#endif\n#endif /* CONFIG_BT_GATT_SERVICE_CHANGED */\n\n#if defined(CONFIG_BT_GATT_CACHING)\nstatic int cf_set(const char *name, size_t len_rd, settings_read_cb read_cb, void *cb_arg) {\n  struct gatt_cf_cfg *cfg;\n  bt_addr_le_t        addr;\n  int                 len, err;\n\n  if (!name) {\n    BT_ERR(\"Insufficient number of arguments\");\n    return -EINVAL;\n  }\n\n  err = bt_settings_decode_key(name, &addr);\n  if (err) {\n    BT_ERR(\"Unable to decode address %s\", log_strdup(name));\n    return -EINVAL;\n  }\n\n  cfg = find_cf_cfg_by_addr(&addr);\n  if (!cfg) {\n    cfg = find_cf_cfg(NULL);\n    if (!cfg) {\n      BT_ERR(\"Unable to restore CF: no cfg left\");\n      return 0;\n    }\n  }\n\n  if (len_rd) {\n    len = read_cb(cb_arg, cfg->data, sizeof(cfg->data));\n    if (len < 0) {\n      BT_ERR(\"Failed to decode value (err %d)\", len);\n      return len;\n    }\n\n    BT_DBG(\"Read CF: len %d\", len);\n  } else {\n    clear_cf_cfg(cfg);\n  }\n\n  BT_DBG(\"Restored CF for %s\", bt_addr_le_str(&addr));\n\n  return 0;\n}\n\nSETTINGS_STATIC_HANDLER_DEFINE(bt_cf, \"bt/cf\", NULL, cf_set, NULL, NULL);\n\nstatic u8_t stored_hash[16];\n\nstatic int db_hash_set(const char *name, size_t len_rd, settings_read_cb read_cb, void *cb_arg) {\n  int len;\n\n  len = read_cb(cb_arg, stored_hash, sizeof(stored_hash));\n  if (len < 0) {\n    BT_ERR(\"Failed to decode value (err %d)\", len);\n    return len;\n  }\n\n  BT_HEXDUMP_DBG(stored_hash, sizeof(stored_hash), \"Stored Hash: \");\n\n  return 0;\n}\n\nstatic int db_hash_commit(void) {\n  /* Stop work and generate the hash */\n  if (k_delayed_work_remaining_get(&db_hash_work)) {\n    k_delayed_work_cancel(&db_hash_work);\n    db_hash_gen(false);\n  }\n\n  /* Check if hash matches then skip SC update */\n  if (!memcmp(stored_hash, db_hash, sizeof(stored_hash))) {\n    BT_DBG(\"Database Hash matches\");\n    k_delayed_work_cancel(&gatt_sc.work);\n    return 0;\n  }\n\n  BT_HEXDUMP_DBG(db_hash, sizeof(db_hash), \"New Hash: \");\n\n  /**\n   * GATT database has been modified since last boot, likely due to\n   * a firmware update or a dynamic service that was not re-registered on\n   * boot. Indicate Service Changed to all bonded devices for the full\n   * database range to invalidate client-side cache and force discovery on\n   * reconnect.\n   */\n  sc_indicate(0x0001, 0xffff);\n\n  /* Hash did not match overwrite with current hash */\n  db_hash_store();\n\n  return 0;\n}\n\nSETTINGS_STATIC_HANDLER_DEFINE(bt_hash, \"bt/hash\", NULL, db_hash_set, db_hash_commit, NULL);\n#endif /*CONFIG_BT_GATT_CACHING */\n#endif /* CONFIG_BT_SETTINGS */\n\n#if defined(CONFIG_BT_GATT_DYNAMIC_DB)\nuint16_t bt_gatt_get_last_handle(void) {\n  struct bt_gatt_service *last;\n  u16_t                   handle, last_handle;\n\n  if (sys_slist_is_empty(&db)) {\n    handle      = last_static_handle;\n    last_handle = handle;\n    goto last;\n  }\n\n  last        = SYS_SLIST_PEEK_TAIL_CONTAINER(&db, last, node);\n  handle      = last->attrs[last->attr_count - 1].handle;\n  last_handle = handle;\nlast:\n  return last_handle;\n}\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/gatt_internal.h",
    "content": "/** @file\n *  @brief Internal API for Generic Attribute Profile handling.\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#define BT_GATT_CENTRAL_ADDR_RES_NOT_SUPP 0\n#define BT_GATT_CENTRAL_ADDR_RES_SUPP     1\n\n#include <gatt.h>\n\n#define BT_GATT_PERM_READ_MASK (BT_GATT_PERM_READ |         \\\n                                BT_GATT_PERM_READ_ENCRYPT | \\\n                                BT_GATT_PERM_READ_AUTHEN)\n#define BT_GATT_PERM_WRITE_MASK (BT_GATT_PERM_WRITE |         \\\n                                 BT_GATT_PERM_WRITE_ENCRYPT | \\\n                                 BT_GATT_PERM_WRITE_AUTHEN)\n#define BT_GATT_PERM_ENCRYPT_MASK (BT_GATT_PERM_READ_ENCRYPT | \\\n                                   BT_GATT_PERM_WRITE_ENCRYPT)\n#define BT_GATT_PERM_AUTHEN_MASK (BT_GATT_PERM_READ_AUTHEN | \\\n                                  BT_GATT_PERM_WRITE_AUTHEN)\n\nvoid bt_gatt_init(void);\n#if defined(BFLB_BLE)\nvoid bt_gatt_deinit(void);\n#endif\nvoid bt_gatt_connected(struct bt_conn *conn);\nvoid bt_gatt_encrypt_change(struct bt_conn *conn);\nvoid bt_gatt_disconnected(struct bt_conn *conn);\n\nbool bt_gatt_change_aware(struct bt_conn *conn, bool req);\n\nint bt_gatt_store_ccc(u8_t id, const bt_addr_le_t *addr);\n\nint bt_gatt_clear(u8_t id, const bt_addr_le_t *addr);\n\n#if defined(BFLB_BLE_MTU_CHANGE_CB)\nvoid bt_gatt_mtu_changed(struct bt_conn *conn, u16_t mtu);\n#endif\n\n#if defined(CONFIG_BT_GATT_CLIENT)\nvoid bt_gatt_notification(struct bt_conn *conn, u16_t handle,\n                          const void *data, u16_t length);\n#else\nstatic inline void bt_gatt_notification(struct bt_conn *conn, u16_t handle,\n                                        const void *data, u16_t length)\n{\n}\n#endif /* CONFIG_BT_GATT_CLIENT */\n\nstruct bt_gatt_attr;\n\n/* Check attribute permission */\nu8_t bt_gatt_check_perm(struct bt_conn *conn, const struct bt_gatt_attr *attr,\n                        u8_t mask);\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/hci_core.c",
    "content": "/* hci_core.c - HCI core Bluetooth handling */\n\n/*\n * Copyright (c) 2017 Nordic Semiconductor ASA\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <atomic.h>\n#include <errno.h>\n#include <misc/__assert.h>\n#include <misc/byteorder.h>\n#include <misc/slist.h>\n#include <misc/stack.h>\n#include <misc/util.h>\n#include <stdio.h>\n#include <string.h>\n#include <zephyr.h>\n// #include <soc.h>\n\n#include <bluetooth.h>\n#include <conn.h>\n#include <hci_driver.h>\n#include <hci_host.h>\n#include <hci_vs.h>\n#include <l2cap.h>\n\n#define BT_DBG_ENABLED IS_ENABLED(CONFIG_BT_DEBUG_HCI_CORE)\n#include \"log.h\"\n\n#include \"ecc.h\"\n#include \"hci_core.h\"\n#include \"hci_ecc.h\"\n#include \"keys.h\"\n#include \"monitor.h\"\n#include \"rpa.h\"\n\n#include \"../include/bluetooth/crypto.h\"\n#include \"conn_internal.h\"\n#include \"crypto.h\"\n#include \"gatt_internal.h\"\n#include \"l2cap_internal.h\"\n#include \"settings.h\"\n#include \"smp.h\"\n#if defined(BFLB_BLE)\n#include \"bl_hci_wrapper.h\"\n#include \"ble_lib_api.h\"\n#if defined(BL602)\n#include \"bl602_hbn.h\"\n#elif defined(BL702)\n#include \"bl702_hbn.h\"\n#elif defined(BL606P) || defined(BL616)\n#include \"bl606p_hbn.h\"\n#elif defined(BL808) // no bl808_hbn.h currently, comment it out temporarily\n#include \"bl808_hbn.h\"\n#endif\n#include \"work_q.h\"\n#endif\n#if defined(CONFIG_BLE_MULTI_ADV)\n#include \"multi_adv.h\"\n#endif /* CONFIG_BLE_MULTI_ADV */\n\n/* Peripheral timeout to initialize Connection Parameter Update procedure */\n#define CONN_UPDATE_TIMEOUT K_SECONDS(CONFIG_BT_CONN_PARAM_UPDATE_TIMEOUT)\n#define RPA_TIMEOUT         K_SECONDS(CONFIG_BT_RPA_TIMEOUT)\n\n#define HCI_CMD_TIMEOUT K_SECONDS(10)\n\nextern struct k_fifo   recv_fifo;\nextern struct k_work_q g_work_queue_main;\n/* Stacks for the threads */\n#if !defined(CONFIG_BT_RECV_IS_RX_THREAD)\nstatic struct k_thread rx_thread_data;\nstatic K_THREAD_STACK_DEFINE(rx_thread_stack, CONFIG_BT_RX_STACK_SIZE);\n#endif\n#if (BFLB_BT_CO_THREAD)\nstruct k_thread co_thread_data;\nstatic void     process_events(struct k_poll_event *ev, int count, int total_evt_array_cnt);\nstatic void     send_cmd(struct net_buf *tx_buf);\n#else\nstatic struct k_thread tx_thread_data;\n#endif\n#if !defined(BFLB_BLE)\nstatic K_THREAD_STACK_DEFINE(tx_thread_stack, CONFIG_BT_HCI_TX_STACK_SIZE);\n#endif\n\nstatic void init_work(struct k_work *work);\n\nstruct bt_dev bt_dev = {\n    .init = _K_WORK_INITIALIZER(init_work),\n/* Give cmd_sem allowing to send first HCI_Reset cmd, the only\n * exception is if the controller requests to wait for an\n * initial Command Complete for NOP.\n */\n#if defined(BFLB_BLE)\n#if !defined(CONFIG_BT_WAIT_NOP)\n    .ncmd_sem = _K_SEM_INITIALIZER(bt_dev.ncmd_sem, 1, 1),\n#else\n    .ncmd_sem = _K_SEM_INITIALIZER(bt_dev.ncmd_sem, 0, 1),\n#endif\n    .cmd_tx_queue = _K_FIFO_INITIALIZER(bt_dev.cmd_tx_queue),\n#if !defined(CONFIG_BT_RECV_IS_RX_THREAD)\n    .rx_queue = Z_FIFO_INITIALIZER(bt_dev.rx_queue),\n#endif\n#else // BFLB_BLE\n#if !defined(CONFIG_BT_WAIT_NOP)\n    .ncmd_sem = Z_SEM_INITIALIZER(bt_dev.ncmd_sem, 1, 1),\n#else\n    .ncmd_sem = Z_SEM_INITIALIZER(bt_dev.ncmd_sem, 0, 1),\n#endif\n    .cmd_tx_queue = Z_FIFO_INITIALIZER(bt_dev.cmd_tx_queue),\n#if !defined(CONFIG_BT_RECV_IS_RX_THREAD)\n    .rx_queue = Z_FIFO_INITIALIZER(bt_dev.rx_queue),\n#endif\n#endif\n};\n\nstatic bt_ready_cb_t ready_cb;\n\nstatic bt_le_scan_cb_t *scan_dev_found_cb;\n\nu8_t adv_ch_map = 0x7;\n\n#if defined(CONFIG_BT_HCI_VS_EVT_USER)\nstatic bt_hci_vnd_evt_cb_t *hci_vnd_evt_cb;\n#endif /* CONFIG_BT_HCI_VS_EVT_USER */\n\n#if defined(CONFIG_BT_ECC)\nstatic u8_t                  pub_key[64];\nstatic struct bt_pub_key_cb *pub_key_cb;\nstatic bt_dh_key_cb_t        dh_key_cb;\n#endif /* CONFIG_BT_ECC */\n\n#if defined(CONFIG_BT_BREDR)\nstatic bt_br_discovery_cb_t   *discovery_cb;\nstruct bt_br_discovery_result *discovery_results;\nstatic size_t                  discovery_results_size;\nstatic size_t                  discovery_results_count;\n#endif /* CONFIG_BT_BREDR */\n\n#if defined(CONFIG_BT_STACK_PTS)\nbt_addr_le_t  pts_addr;\nvolatile u8_t event_flag = 0;\n#endif\n\n#if defined(BFLB_HOST_ASSISTANT)\nstruct blhast_cb *host_assist_cb;\n#endif\n\n#if (BFLB_BT_CO_THREAD)\n#if defined(CONFIG_BT_CONN)\n/* command FIFO + conn_change signal +tx queue + rxqueue + workQueue + MAX_CONN */\n#define EV_COUNT (4 + CONFIG_BT_MAX_CONN)\n#else\n/* command FIFO */\n#define EV_COUNT 2\n#endif\n#else\n#if defined(CONFIG_BT_CONN)\n/* command FIFO + conn_change signal + MAX_CONN */\n#define EV_COUNT (2 + CONFIG_BT_MAX_CONN)\n#else\n/* command FIFO */\n#define EV_COUNT 1\n#endif\n#endif // BFLB_BT_CO_THREAD\n\nstruct cmd_state_set {\n  atomic_t *target;\n  int       bit;\n  bool      val;\n};\n\n#if defined(BFLB_RELEASE_CMD_SEM_IF_CONN_DISC)\nvoid hci_release_conn_related_cmd(void);\n#endif\n\nvoid cmd_state_set_init(struct cmd_state_set *state, atomic_t *target, int bit, bool val) {\n  state->target = target;\n  state->bit    = bit;\n  state->val    = val;\n}\n\nstruct cmd_data {\n  /** HCI status of the command completion */\n  u8_t status;\n\n  /** The command OpCode that the buffer contains */\n  u16_t opcode;\n\n  /** The state to update when command completes with success. */\n  struct cmd_state_set *state;\n#if (BFLB_BT_CO_THREAD)\n  uint8_t sync_state;\n#endif\n  /** Used by bt_hci_cmd_send_sync. */\n  struct k_sem *sync;\n};\n\nstruct acl_data {\n  /** BT_BUF_ACL_IN */\n  u8_t type;\n\n  /* Index into the bt_conn storage array */\n  u8_t id;\n\n  /** ACL connection handle */\n  u16_t handle;\n};\n\n#if defined(BFLB_BLE)\nextern struct k_sem g_poll_sem;\n#endif\n\n__attribute__((section(\".tcm_data\"))) static struct cmd_data cmd_data[CONFIG_BT_HCI_CMD_COUNT];\n\n#define cmd(buf) (&cmd_data[net_buf_id(buf)])\n#define acl(buf) ((struct acl_data *)net_buf_user_data(buf))\n\n/* HCI command buffers. Derive the needed size from BT_BUF_RX_SIZE since\n * the same buffer is also used for the response.\n */\n#define CMD_BUF_SIZE BT_BUF_RX_SIZE\n#if !defined(BFLB_DYNAMIC_ALLOC_MEM)\nNET_BUF_POOL_FIXED_DEFINE(hci_cmd_pool, CONFIG_BT_HCI_CMD_COUNT, CMD_BUF_SIZE, NULL);\n\nNET_BUF_POOL_FIXED_DEFINE(hci_rx_pool, CONFIG_BT_RX_BUF_COUNT, BT_BUF_RX_SIZE, NULL);\n#if defined(CONFIG_BT_CONN)\n/* Dedicated pool for HCI_Number_of_Completed_Packets. This event is always\n * consumed synchronously by bt_recv_prio() so a single buffer is enough.\n * Having a dedicated pool for it ensures that exhaustion of the RX pool\n * cannot block the delivery of this priority event.\n */\nNET_BUF_POOL_FIXED_DEFINE(num_complete_pool, 1, BT_BUF_RX_SIZE, NULL);\n#endif /* CONFIG_BT_CONN */\n\n#if defined(CONFIG_BT_DISCARDABLE_BUF_COUNT)\nNET_BUF_POOL_FIXED_DEFINE(discardable_pool, CONFIG_BT_DISCARDABLE_BUF_COUNT, BT_BUF_RX_SIZE, NULL);\n#endif /* CONFIG_BT_DISCARDABLE_BUF_COUNT */\n#else\nstruct net_buf_pool hci_cmd_pool;\nstruct net_buf_pool hci_rx_pool;\n#if defined(CONFIG_BT_CONN)\nstruct net_buf_pool num_complete_pool;\n#endif\n#if defined(CONFIG_BT_DISCARDABLE_BUF_COUNT)\nstruct net_buf_pool discardable_pool;\n#endif\n#endif /*!defined(BFLB_DYNAMIC_ALLOC_MEM)*/\n\n#if defined CONFIG_BT_HFP\nextern bool hfp_codec_msbc;\n#endif\n\nstruct event_handler {\n  u8_t event;\n  u8_t min_len;\n  void (*handler)(struct net_buf *buf);\n};\n\n#define EVENT_HANDLER(_evt, _handler, _min_len)                                                                                                                                                        \\\n  {                                                                                                                                                                                                    \\\n      .event   = _evt,                                                                                                                                                                                 \\\n      .handler = _handler,                                                                                                                                                                             \\\n      .min_len = _min_len,                                                                                                                                                                             \\\n  }\n\nstatic inline void handle_event(u8_t event, struct net_buf *buf, const struct event_handler *handlers, size_t num_handlers) {\n  size_t i;\n\n  for (i = 0; i < num_handlers; i++) {\n    const struct event_handler *handler = &handlers[i];\n\n    if (handler->event != event) {\n      continue;\n    }\n\n    if (buf->len < handler->min_len) {\n      BT_ERR(\"Too small (%u bytes) event 0x%02x\", buf->len, event);\n      return;\n    }\n\n    handler->handler(buf);\n    return;\n  }\n\n  BT_WARN(\"Unhandled event 0x%02x len %u: %s\", event, buf->len, bt_hex(buf->data, buf->len));\n}\n\nstatic inline bool is_wl_empty(void) {\n#if defined(CONFIG_BT_WHITELIST)\n  return !bt_dev.le.wl_entries;\n#else\n  return true;\n#endif /* defined(CONFIG_BT_WHITELIST) */\n}\n\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\nstatic void report_completed_packet(struct net_buf *buf) {\n  struct bt_hci_cp_host_num_completed_packets *cp;\n  u16_t                                        handle = acl(buf)->handle;\n  struct bt_hci_handle_count                  *hc;\n  struct bt_conn                              *conn;\n\n  net_buf_destroy(buf);\n\n  /* Do nothing if controller to host flow control is not supported */\n  if (!BT_CMD_TEST(bt_dev.supported_commands, 10, 5)) {\n    return;\n  }\n\n  conn = bt_conn_lookup_id(acl(buf)->id);\n  if (!conn) {\n    BT_WARN(\"Unable to look up conn with id 0x%02x\", acl(buf)->id);\n    return;\n  }\n\n  if (conn->state != BT_CONN_CONNECTED && conn->state != BT_CONN_DISCONNECT) {\n    BT_WARN(\"Not reporting packet for non-connected conn\");\n    bt_conn_unref(conn);\n    return;\n  }\n\n  bt_conn_unref(conn);\n\n  BT_DBG(\"Reporting completed packet for handle %u\", handle);\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_HOST_NUM_COMPLETED_PACKETS, sizeof(*cp) + sizeof(*hc));\n  if (!buf) {\n    BT_ERR(\"Unable to allocate new HCI command\");\n    return;\n  }\n\n  cp              = net_buf_add(buf, sizeof(*cp));\n  cp->num_handles = sys_cpu_to_le16(1);\n\n  hc         = net_buf_add(buf, sizeof(*hc));\n  hc->handle = sys_cpu_to_le16(handle);\n  hc->count  = sys_cpu_to_le16(1);\n\n  bt_hci_cmd_send(BT_HCI_OP_HOST_NUM_COMPLETED_PACKETS, buf);\n}\n\n#define ACL_IN_SIZE BT_L2CAP_BUF_SIZE(CONFIG_BT_L2CAP_RX_MTU)\n#if !defined(BFLB_DYNAMIC_ALLOC_MEM)\nNET_BUF_POOL_DEFINE(acl_in_pool, CONFIG_BT_ACL_RX_COUNT, ACL_IN_SIZE, sizeof(struct acl_data), report_completed_packet);\n#else\nstruct net_buf_pool acl_in_pool;\n#endif\n#endif /* CONFIG_BT_HCI_ACL_FLOW_CONTROL */\n\nstruct net_buf *bt_hci_cmd_create(u16_t opcode, u8_t param_len) {\n  struct bt_hci_cmd_hdr *hdr;\n  struct net_buf        *buf;\n\n  BT_DBG(\"opcode 0x%04x param_len %u\", opcode, param_len);\n\n  buf = net_buf_alloc(&hci_cmd_pool, K_FOREVER);\n  __ASSERT_NO_MSG(buf);\n\n  BT_DBG(\"buf %p\", buf);\n\n  net_buf_reserve(buf, BT_BUF_RESERVE);\n\n  bt_buf_set_type(buf, BT_BUF_CMD);\n\n  cmd(buf)->opcode = opcode;\n  cmd(buf)->sync   = NULL;\n  cmd(buf)->state  = NULL;\n\n  hdr            = net_buf_add(buf, sizeof(*hdr));\n  hdr->opcode    = sys_cpu_to_le16(opcode);\n  hdr->param_len = param_len;\n\n  return buf;\n}\n\nint bt_hci_cmd_send(u16_t opcode, struct net_buf *buf) {\n  if (!buf) {\n    buf = bt_hci_cmd_create(opcode, 0);\n    if (!buf) {\n      return -ENOBUFS;\n    }\n  }\n\n  BT_DBG(\"opcode 0x%04x len %u\", opcode, buf->len);\n\n  /* Host Number of Completed Packets can ignore the ncmd value\n   * and does not generate any cmd complete/status events.\n   */\n  if (opcode == BT_HCI_OP_HOST_NUM_COMPLETED_PACKETS) {\n    int err;\n\n    err = bt_send(buf);\n    if (err) {\n      BT_ERR(\"Unable to send to driver (err %d)\", err);\n      net_buf_unref(buf);\n    }\n\n    return err;\n  }\n\n  net_buf_put(&bt_dev.cmd_tx_queue, buf);\n#if defined(BFLB_BLE)\n  k_sem_give(&g_poll_sem);\n#endif\n  return 0;\n}\n\n#if (BFLB_BT_CO_THREAD)\nstruct k_thread *bt_get_co_thread(void) { return &co_thread_data; }\n\nstatic void bt_hci_sync_check(struct net_buf *buf) {\n  static struct k_poll_event events[EV_COUNT] = {\n      [0]            = K_POLL_EVENT_STATIC_INITIALIZER(K_POLL_TYPE_FIFO_DATA_AVAILABLE, K_POLL_MODE_NOTIFY_ONLY, &g_work_queue_main.fifo, BT_EVENT_WORK_QUEUE),\n      [1]            = K_POLL_EVENT_STATIC_INITIALIZER(K_POLL_TYPE_FIFO_DATA_AVAILABLE, K_POLL_MODE_NOTIFY_ONLY, &bt_dev.cmd_tx_queue, BT_EVENT_CMD_TX),\n      [EV_COUNT - 1] = K_POLL_EVENT_STATIC_INITIALIZER(K_POLL_TYPE_FIFO_DATA_AVAILABLE, K_POLL_MODE_NOTIFY_ONLY, &recv_fifo, BT_EVENT_RX_QUEUE),\n  };\n\n  uint32_t time_start = k_uptime_get_32();\n  send_cmd(buf);\n\n  while (1) {\n    int  ev_count, err;\n    u8_t to_process = 0;\n\n    events[0].state            = K_POLL_STATE_NOT_READY;\n    events[1].state            = K_POLL_STATE_NOT_READY;\n    events[EV_COUNT - 1].state = K_POLL_STATE_NOT_READY;\n    ev_count                   = 2;\n\n    if (IS_ENABLED(CONFIG_BT_CONN)) {\n      ev_count += bt_conn_prepare_events(&events[2]);\n    }\n    err = k_poll(events, ev_count, EV_COUNT, K_NO_WAIT, &to_process);\n    BT_ASSERT(err == 0);\n    if (to_process)\n      process_events(events, ev_count, EV_COUNT);\n\n    if ((cmd(buf)->sync_state == BT_CMD_SYNC_TX_DONE) || (k_uptime_get_32() - time_start) >= HCI_CMD_TIMEOUT) {\n      break;\n    }\n  }\n}\n#endif\n\n#if defined(BFLB_HOST_ASSISTANT)\nextern void blhast_bt_reset(void);\nuint16_t    hci_cmd_to_cnt = 0;\n#endif\nint bt_hci_cmd_send_sync(u16_t opcode, struct net_buf *buf, struct net_buf **rsp) {\n  struct k_sem sync_sem;\n  int          err;\n#if (BFLB_BT_CO_THREAD)\n  bool is_bt_co_thread = k_is_current_thread(&co_thread_data);\n#endif\n\n  if (!buf) {\n    buf = bt_hci_cmd_create(opcode, 0);\n    if (!buf) {\n      return -ENOBUFS;\n    }\n  }\n\n  BT_DBG(\"buf %p opcode 0x%04x len %u\", buf, opcode, buf->len);\n\n#if (BFLB_BT_CO_THREAD)\n  if (is_bt_co_thread) {\n    cmd(buf)->sync_state = BT_CMD_SYNC_TX;\n    cmd(buf)->sync       = NULL;\n  } else {\n    k_sem_init(&sync_sem, 0, 1);\n    cmd(buf)->sync       = &sync_sem;\n    cmd(buf)->sync_state = BT_CMD_SYNC_NONE;\n  }\n#else\n  k_sem_init(&sync_sem, 0, 1);\n  cmd(buf)->sync = &sync_sem;\n#endif\n\n#if defined(BFLB_BLE)\n  /*Assign a initial value to status in order to check if hci cmd timeout*/\n  cmd(buf)->status = 0xff;\n#endif\n\n  /* Make sure the buffer stays around until the command completes */\n  net_buf_ref(buf);\n\n#if (BFLB_BT_CO_THREAD)\n  if (is_bt_co_thread)\n    bt_hci_sync_check(buf);\n  else {\n    net_buf_put(&bt_dev.cmd_tx_queue, buf);\n#if defined(BFLB_BLE)\n    k_sem_give(&g_poll_sem);\n#endif\n    err = k_sem_take(&sync_sem, HCI_CMD_TIMEOUT);\n#ifdef BFLB_BLE_PATCH_FREE_ALLOCATED_BUFFER_IN_OS\n    k_sem_delete(&sync_sem);\n#endif\n    __ASSERT(err == 0, \"k_sem_take failed with err %d\", err);\n  }\n#else\n  net_buf_put(&bt_dev.cmd_tx_queue, buf);\n#if defined(BFLB_BLE)\n  k_sem_give(&g_poll_sem);\n#endif\n  err = k_sem_take(&sync_sem, HCI_CMD_TIMEOUT);\n#ifdef BFLB_BLE_PATCH_FREE_ALLOCATED_BUFFER_IN_OS\n  k_sem_delete(&sync_sem);\n#endif\n  __ASSERT(err == 0, \"k_sem_take failed with err %d\", err);\n#endif // #if (BFLB_BT_CO_THREAD)\n\n  BT_DBG(\"opcode 0x%04x status 0x%02x\", opcode, cmd(buf)->status);\n\n  if (cmd(buf)->status) {\n    switch (cmd(buf)->status) {\n    case BT_HCI_ERR_CONN_LIMIT_EXCEEDED:\n      err = -ECONNREFUSED;\n      break;\n#if defined(BFLB_BLE)\n    case 0xff:\n      err = -ETIME;\n      BT_ERR(\"k_sem_take timeout with opcode 0x%04x\", opcode);\n#if (defined(BL602) || defined(BL702)) && defined(BFLB_HOST_ASSISTANT)\n      BT_ERR(\"Restart and restore bt\");\n      hci_cmd_to_cnt++;\n      if (cmd(buf)->state) {\n        struct cmd_state_set *update = cmd(buf)->state;\n        atomic_set_bit_to(update->target, update->bit, update->val);\n      }\n      blhast_bt_reset();\n#else\n      BT_ASSERT(err == 0);\n#endif\n      break;\n#endif\n    default:\n      err = -EIO;\n      break;\n    }\n\n    net_buf_unref(buf);\n  } else {\n    err = 0;\n    if (rsp) {\n      *rsp = buf;\n    } else {\n      net_buf_unref(buf);\n    }\n  }\n\n  return err;\n}\n\n#if defined(CONFIG_BT_OBSERVER) || defined(CONFIG_BT_CONN)\nconst bt_addr_le_t *bt_lookup_id_addr(u8_t id, const bt_addr_le_t *addr) {\n  if (IS_ENABLED(CONFIG_BT_SMP)) {\n    struct bt_keys *keys;\n\n    keys = bt_keys_find_irk(id, addr);\n    if (keys) {\n      BT_DBG(\"Identity %s matched RPA %s\", bt_addr_le_str(&keys->addr), bt_addr_le_str(addr));\n      return &keys->addr;\n    }\n  }\n\n  return addr;\n}\n#endif /* CONFIG_BT_OBSERVER || CONFIG_BT_CONN */\n\nstatic int set_advertise_enable(bool enable) {\n  struct net_buf      *buf;\n  struct cmd_state_set state;\n  int                  err;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_ADV_ENABLE, 1);\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  if (enable) {\n    net_buf_add_u8(buf, BT_HCI_LE_ADV_ENABLE);\n  } else {\n    net_buf_add_u8(buf, BT_HCI_LE_ADV_DISABLE);\n  }\n\n  cmd_state_set_init(&state, bt_dev.flags, BT_DEV_ADVERTISING, enable);\n  cmd(buf)->state = &state;\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_SET_ADV_ENABLE, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  return 0;\n}\n\nstatic int set_random_address(const bt_addr_t *addr) {\n  struct net_buf *buf;\n  int             err;\n\n#if defined(CONFIG_BT_STACK_PTS)\n  BT_PTS(\"set random address %s\", bt_addr_str(addr));\n#else\n  BT_DBG(\"%s\", bt_addr_str(addr));\n#endif\n\n  /* Do nothing if we already have the right address */\n  if (!bt_addr_cmp(addr, &bt_dev.random_addr.a)) {\n    return 0;\n  }\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_RANDOM_ADDRESS, sizeof(*addr));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  net_buf_add_mem(buf, addr, sizeof(*addr));\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_SET_RANDOM_ADDRESS, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  bt_addr_copy(&bt_dev.random_addr.a, addr);\n  bt_dev.random_addr.type = BT_ADDR_LE_RANDOM;\n\n  return 0;\n}\n\nint bt_addr_from_str(const char *str, bt_addr_t *addr) {\n  int  i, j;\n  u8_t tmp;\n\n  if (strlen(str) != 17U) {\n    return -EINVAL;\n  }\n\n  for (i = 5, j = 1; *str != '\\0'; str++, j++) {\n    if (!(j % 3) && (*str != ':')) {\n      return -EINVAL;\n    } else if (*str == ':') {\n      i--;\n      continue;\n    }\n\n    addr->val[i] = addr->val[i] << 4;\n\n    if (char2hex(*str, &tmp) < 0) {\n      return -EINVAL;\n    }\n\n    addr->val[i] |= tmp;\n  }\n\n  return 0;\n}\n\nint bt_addr_le_from_str(const char *str, const char *type, bt_addr_le_t *addr) {\n  int err;\n\n  err = bt_addr_from_str(str, &addr->a);\n  if (err < 0) {\n    return err;\n  }\n\n  if (!strcmp(type, \"public\") || !strcmp(type, \"(public)\")) {\n    addr->type = BT_ADDR_LE_PUBLIC;\n  } else if (!strcmp(type, \"random\") || !strcmp(type, \"(random)\")) {\n    addr->type = BT_ADDR_LE_RANDOM;\n  } else if (!strcmp(type, \"public-id\") || !strcmp(type, \"(public-id)\")) {\n    addr->type = BT_ADDR_LE_PUBLIC_ID;\n  } else if (!strcmp(type, \"random-id\") || !strcmp(type, \"(random-id)\")) {\n    addr->type = BT_ADDR_LE_RANDOM_ID;\n  } else {\n    return -EINVAL;\n  }\n\n  return 0;\n}\n\n#if defined(CONFIG_BT_PRIVACY)\n/* this function sets new RPA only if current one is no longer valid */\nstatic int le_set_private_addr(u8_t id) {\n  bt_addr_t rpa;\n  int       err;\n\n  /* check if RPA is valid */\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_RPA_VALID)) {\n    return 0;\n  }\n\n  err = bt_rpa_create(bt_dev.irk[id], &rpa);\n  if (!err) {\n    err = set_random_address(&rpa);\n    if (!err) {\n      atomic_set_bit(bt_dev.flags, BT_DEV_RPA_VALID);\n    }\n  }\n\n  /* restart timer even if failed to set new RPA */\n  k_delayed_work_submit(&bt_dev.rpa_update, RPA_TIMEOUT);\n\n  return err;\n}\n\nstatic void rpa_timeout(struct k_work *work) {\n  int err_adv = 0, err_scan = 0;\n\n  BT_DBG(\"\");\n\n  /* Invalidate RPA */\n  atomic_clear_bit(bt_dev.flags, BT_DEV_RPA_VALID);\n\n  /*\n   * we need to update rpa only if advertising is ongoing, with\n   * BT_DEV_KEEP_ADVERTISING flag is handled in disconnected event\n   */\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING)) {\n    /* make sure new address is used */\n    set_advertise_enable(false);\n    err_adv = le_set_private_addr(bt_dev.adv_id);\n    set_advertise_enable(true);\n  }\n\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_ACTIVE_SCAN)) {\n    /* TODO do we need to toggle scan? */\n    err_scan = le_set_private_addr(BT_ID_DEFAULT);\n  }\n\n  /* If both advertising and scanning is active, le_set_private_addr\n   * will fail. In this case, set back RPA_VALID so that if either of\n   * advertising or scanning was restarted by application then\n   * le_set_private_addr in the public API call path will not retry\n   * set_random_address. This is needed so as to be able to stop and\n   * restart either of the role by the application after rpa_timeout.\n   */\n  if (err_adv || err_scan) {\n    atomic_set_bit(bt_dev.flags, BT_DEV_RPA_VALID);\n  }\n}\n\n#if defined(CONFIG_BT_STACK_PTS) || defined(CONFIG_AUTO_PTS)\nstatic int le_set_non_resolv_private_addr(u8_t id) {\n  bt_addr_t nrpa;\n  int       err;\n\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_SETTED_NON_RESOLV_ADDR)) {\n    return 0;\n  }\n\n  err = bt_rand(nrpa.val, sizeof(nrpa.val));\n  if (err) {\n    return err;\n  }\n\n  nrpa.val[5] &= 0x3f;\n  atomic_clear_bit(bt_dev.flags, BT_DEV_RPA_VALID);\n  return set_random_address(&nrpa);\n}\n\nint le_set_non_resolv_private_addr_ext(u8_t id, bt_addr_t *addr) {\n  bt_addr_t *nrpa = addr;\n  int        err;\n\n  err = bt_rand(nrpa->val, sizeof(nrpa->val));\n  if (err) {\n    return err;\n  }\n\n  nrpa->val[5] &= 0x3f;\n  atomic_clear_bit(bt_dev.flags, BT_DEV_RPA_VALID);\n  return set_random_address(nrpa);\n}\n#endif\n\n#else\nstatic int le_set_private_addr(u8_t id) {\n  bt_addr_t nrpa;\n  int       err;\n\n  err = bt_rand(nrpa.val, sizeof(nrpa.val));\n  if (err) {\n    return err;\n  }\n\n  nrpa.val[5] &= 0x3f;\n\n  return set_random_address(&nrpa);\n}\n#endif\n\n#if defined(CONFIG_BT_OBSERVER)\nstatic int set_le_scan_enable(u8_t enable) {\n  struct bt_hci_cp_le_set_scan_enable *cp;\n  struct net_buf                      *buf;\n  struct cmd_state_set                 state;\n  int                                  err;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_SCAN_ENABLE, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n\n  if (enable == BT_HCI_LE_SCAN_ENABLE) {\n    cp->filter_dup = atomic_test_bit(bt_dev.flags, BT_DEV_SCAN_FILTER_DUP);\n  } else {\n    cp->filter_dup = BT_HCI_LE_SCAN_FILTER_DUP_DISABLE;\n  }\n\n  cp->enable = enable;\n\n  cmd_state_set_init(&state, bt_dev.flags, BT_DEV_SCANNING, enable == BT_HCI_LE_SCAN_ENABLE);\n  cmd(buf)->state = &state;\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_SET_SCAN_ENABLE, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  return 0;\n}\n#endif /* CONFIG_BT_OBSERVER */\n\n#if defined(CONFIG_BT_CONN)\nstatic void hci_acl(struct net_buf *buf) {\n  struct bt_hci_acl_hdr *hdr;\n  u16_t                  handle, len;\n  struct bt_conn        *conn;\n  u8_t                   flags;\n\n  BT_DBG(\"buf %p\", buf);\n\n  BT_ASSERT(buf->len >= sizeof(*hdr));\n\n  hdr    = net_buf_pull_mem(buf, sizeof(*hdr));\n  len    = sys_le16_to_cpu(hdr->len);\n  handle = sys_le16_to_cpu(hdr->handle);\n  flags  = bt_acl_flags(handle);\n\n  acl(buf)->handle = bt_acl_handle(handle);\n  acl(buf)->id     = BT_CONN_ID_INVALID;\n\n  BT_DBG(\"handle %u len %u flags %u\", acl(buf)->handle, len, flags);\n\n  if (buf->len != len) {\n    BT_ERR(\"ACL data length mismatch (%u != %u)\", buf->len, len);\n    net_buf_unref(buf);\n    return;\n  }\n\n  conn = bt_conn_lookup_handle(acl(buf)->handle);\n  if (!conn) {\n    BT_ERR(\"Unable to find conn for handle %u\", acl(buf)->handle);\n    net_buf_unref(buf);\n    return;\n  }\n\n  acl(buf)->id = bt_conn_index(conn);\n\n  bt_conn_recv(conn, buf, flags);\n  bt_conn_unref(conn);\n}\n\nstatic void hci_data_buf_overflow(struct net_buf *buf) {\n  struct bt_hci_evt_data_buf_overflow *evt = (void *)buf->data;\n\n  BT_WARN(\"Data buffer overflow (link type 0x%02x)\", evt->link_type);\n  // avoid compiler warning if BT_WARN is empty\n  (void)evt;\n}\n\nstatic void hci_num_completed_packets(struct net_buf *buf) {\n  struct bt_hci_evt_num_completed_packets *evt = (void *)buf->data;\n  int                                      i;\n\n  BT_DBG(\"num_handles %u\", evt->num_handles);\n\n  for (i = 0; i < evt->num_handles; i++) {\n    u16_t           handle, count;\n    struct bt_conn *conn;\n    unsigned int    key;\n\n    handle = sys_le16_to_cpu(evt->h[i].handle);\n    count  = sys_le16_to_cpu(evt->h[i].count);\n\n    BT_DBG(\"handle %u count %u\", handle, count);\n\n    key = irq_lock();\n\n    conn = bt_conn_lookup_handle(handle);\n    if (!conn) {\n      irq_unlock(key);\n      BT_ERR(\"No connection for handle %u\", handle);\n      continue;\n    }\n\n    irq_unlock(key);\n\n    while (count--) {\n      struct bt_conn_tx *tx;\n      sys_snode_t       *node;\n\n      key = irq_lock();\n\n      if (conn->pending_no_cb) {\n        conn->pending_no_cb--;\n        irq_unlock(key);\n        k_sem_give(bt_conn_get_pkts(conn));\n        continue;\n      }\n\n      node = sys_slist_get(&conn->tx_pending);\n      irq_unlock(key);\n\n      if (!node) {\n        BT_ERR(\"packets count mismatch\");\n        break;\n      }\n\n      tx = CONTAINER_OF(node, struct bt_conn_tx, node);\n\n      key                 = irq_lock();\n      conn->pending_no_cb = tx->pending_no_cb;\n      tx->pending_no_cb   = 0U;\n      sys_slist_append(&conn->tx_complete, &tx->node);\n      irq_unlock(key);\n\n      k_work_submit(&conn->tx_complete_work);\n      k_sem_give(bt_conn_get_pkts(conn));\n#if defined(BFLB_BLE)\n      k_sem_give(&g_poll_sem);\n#endif\n    }\n\n    bt_conn_unref(conn);\n  }\n}\n\n#if defined(CONFIG_BT_CENTRAL)\n#if defined(CONFIG_BT_WHITELIST)\nint bt_le_auto_conn(const struct bt_le_conn_param *conn_param) {\n  struct net_buf                  *buf;\n  struct cmd_state_set             state;\n  struct bt_hci_cp_le_create_conn *cp;\n  u8_t                             own_addr_type;\n  int                              err;\n\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_SCANNING)) {\n    err = set_le_scan_enable(BT_HCI_LE_SCAN_DISABLE);\n    if (err) {\n      return err;\n    }\n  }\n\n#if defined(CONFIG_BT_STACK_PTS)\n  if (conn_param->own_address_type != BT_ADDR_LE_PUBLIC) {\n#endif\n\n    if (IS_ENABLED(CONFIG_BT_PRIVACY)) {\n      err = le_set_private_addr(BT_ID_DEFAULT);\n      if (err) {\n        return err;\n      }\n      if (BT_FEAT_LE_PRIVACY(bt_dev.le.features)) {\n        own_addr_type = BT_HCI_OWN_ADDR_RPA_OR_RANDOM;\n      } else {\n        own_addr_type = BT_ADDR_LE_RANDOM;\n      }\n    } else {\n      const bt_addr_le_t *addr = &bt_dev.id_addr[BT_ID_DEFAULT];\n\n      /* If Static Random address is used as Identity address we\n       * need to restore it before creating connection. Otherwise\n       * NRPA used for active scan could be used for connection.\n       */\n      if (addr->type == BT_ADDR_LE_RANDOM) {\n        err = set_random_address(&addr->a);\n        if (err) {\n          return err;\n        }\n      }\n\n      own_addr_type = addr->type;\n    }\n\n#if defined(CONFIG_BT_STACK_PTS)\n  } else {\n    own_addr_type = conn_param->own_address_type;\n  }\n#endif\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_CREATE_CONN, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  (void)memset(cp, 0, sizeof(*cp));\n\n  cp->filter_policy = BT_HCI_LE_CREATE_CONN_FP_WHITELIST;\n  cp->own_addr_type = own_addr_type;\n\n  /* User Initiated procedure use fast scan parameters. */\n  cp->scan_interval = sys_cpu_to_le16(BT_GAP_SCAN_FAST_INTERVAL);\n  cp->scan_window   = sys_cpu_to_le16(BT_GAP_SCAN_FAST_WINDOW);\n\n  cp->conn_interval_min   = sys_cpu_to_le16(conn_param->interval_min);\n  cp->conn_interval_max   = sys_cpu_to_le16(conn_param->interval_max);\n  cp->conn_latency        = sys_cpu_to_le16(conn_param->latency);\n  cp->supervision_timeout = sys_cpu_to_le16(conn_param->timeout);\n\n  cmd_state_set_init(&state, bt_dev.flags, BT_DEV_AUTO_CONN, true);\n  cmd(buf)->state = &state;\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_LE_CREATE_CONN, buf, NULL);\n}\n\nint bt_le_auto_conn_cancel(void) {\n  struct net_buf      *buf;\n  struct cmd_state_set state;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_CREATE_CONN_CANCEL, 0);\n\n  cmd_state_set_init(&state, bt_dev.flags, BT_DEV_AUTO_CONN, false);\n  cmd(buf)->state = &state;\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_LE_CREATE_CONN_CANCEL, buf, NULL);\n}\n#endif /* defined(CONFIG_BT_WHITELIST) */\n\nstatic int hci_le_create_conn(const struct bt_conn *conn) {\n  struct net_buf                  *buf;\n  struct bt_hci_cp_le_create_conn *cp;\n  u8_t                             own_addr_type;\n  const bt_addr_le_t              *peer_addr;\n  int                              err;\n\n#if defined(CONFIG_BT_STACK_PTS)\n  if (conn->le.own_adder_type == BT_ADDR_LE_PUBLIC || conn->le.own_adder_type == BT_ADDR_LE_PUBLIC_ID) {\n    own_addr_type = conn->le.own_adder_type;\n    goto start_connect;\n  }\n\n#endif\n\n  if (IS_ENABLED(CONFIG_BT_PRIVACY)) {\n    err = le_set_private_addr(conn->id);\n    if (err) {\n      return err;\n    }\n#if defined(BFLB_BLE)\n    /*Use random type at the first time*/\n    own_addr_type = BT_ADDR_LE_RANDOM;\n#if defined(CONFIG_BT_STACK_PTS)\n    if (conn->le.own_adder_type == BT_ADDR_LE_RANDOM_ID) {\n      own_addr_type = BT_HCI_OWN_ADDR_RPA_OR_RANDOM;\n    }\n#endif\n#else\n    if (BT_FEAT_LE_PRIVACY(bt_dev.le.features)) {\n      own_addr_type = BT_HCI_OWN_ADDR_RPA_OR_RANDOM;\n    } else {\n      own_addr_type = BT_ADDR_LE_RANDOM;\n    }\n#endif\n  } else {\n    /* If Static Random address is used as Identity address we\n     * need to restore it before creating connection. Otherwise\n     * NRPA used for active scan could be used for connection.\n     */\n    const bt_addr_le_t *own_addr = &bt_dev.id_addr[conn->id];\n\n    if (own_addr->type == BT_ADDR_LE_RANDOM) {\n      err = set_random_address(&own_addr->a);\n      if (err) {\n        return err;\n      }\n    }\n\n    own_addr_type = own_addr->type;\n  }\n\n#if defined(CONFIG_BT_STACK_PTS)\nstart_connect:\n#endif\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_CREATE_CONN, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  (void)memset(cp, 0, sizeof(*cp));\n\n  /* Interval == window for continuous scanning */\n  cp->scan_interval = sys_cpu_to_le16(BT_GAP_SCAN_FAST_INTERVAL);\n  cp->scan_window   = cp->scan_interval;\n\n  peer_addr = &conn->le.dst;\n\n#if defined(CONFIG_BT_SMP)\n  if (!bt_dev.le.rl_size || bt_dev.le.rl_entries > bt_dev.le.rl_size) {\n    /* Host resolving is used, use the RPA directly. */\n    peer_addr = &conn->le.resp_addr;\n  }\n#endif\n\n  bt_addr_le_copy(&cp->peer_addr, peer_addr);\n  cp->own_addr_type       = own_addr_type;\n  cp->conn_interval_min   = sys_cpu_to_le16(conn->le.interval_min);\n  cp->conn_interval_max   = sys_cpu_to_le16(conn->le.interval_max);\n  cp->conn_latency        = sys_cpu_to_le16(conn->le.latency);\n  cp->supervision_timeout = sys_cpu_to_le16(conn->le.timeout);\n\n#if defined(CONFIG_BT_STACK_PTS)\n  if (event_flag == dir_connect_req) {\n    bt_addr_le_copy(&cp->peer_addr, &pts_addr);\n\n    cp->filter_policy = 0;\n    cp->own_addr_type = BT_ADDR_LE_PUBLIC;\n\n    /* User Initiated procedure use fast scan parameters. */\n    cp->scan_interval = sys_cpu_to_le16(BT_GAP_SCAN_FAST_INTERVAL);\n    cp->scan_window   = sys_cpu_to_le16(BT_GAP_SCAN_FAST_WINDOW);\n  }\n#endif\n  return bt_hci_cmd_send_sync(BT_HCI_OP_LE_CREATE_CONN, buf, NULL);\n}\n#endif /* CONFIG_BT_CENTRAL */\n\nstatic void hci_disconn_complete(struct net_buf *buf) {\n  struct bt_hci_evt_disconn_complete *evt    = (void *)buf->data;\n  u16_t                               handle = sys_le16_to_cpu(evt->handle);\n  struct bt_conn                     *conn;\n\n  BT_DBG(\"status 0x%02x handle %u reason 0x%02x\", evt->status, handle, evt->reason);\n\n  if (evt->status) {\n    return;\n  }\n\n  conn = bt_conn_lookup_handle(handle);\n  if (!conn) {\n    BT_ERR(\"Unable to look up conn with handle %u\", handle);\n    goto advertise;\n  }\n\n  conn->err = evt->reason;\n\n  /* Check stacks usage */\n#if !defined(CONFIG_BT_RECV_IS_RX_THREAD)\n  STACK_ANALYZE(\"rx stack\", rx_thread_stack);\n#endif\n#if !defined(BFLB_BLE)\n  STACK_ANALYZE(\"tx stack\", tx_thread_stack);\n#endif\n\n  bt_conn_set_state(conn, BT_CONN_DISCONNECTED);\n  conn->handle = 0U;\n\n  if (conn->type != BT_CONN_TYPE_LE) {\n#if defined(CONFIG_BT_BREDR)\n    if (conn->type == BT_CONN_TYPE_SCO) {\n      bt_sco_cleanup(conn);\n      return;\n    }\n    /*\n     * If only for one connection session bond was set, clear keys\n     * database row for this connection.\n     */\n    if (conn->type == BT_CONN_TYPE_BR && atomic_test_and_clear_bit(conn->flags, BT_CONN_BR_NOBOND)) {\n      bt_keys_link_key_clear(conn->br.link_key);\n    }\n#endif\n    bt_conn_unref(conn);\n#if defined(CONFIG_BT_BREDR)\n    notify_disconnected(conn);\n#endif\n    return;\n  }\n\n#if defined(CONFIG_BT_CENTRAL) && !defined(CONFIG_BT_WHITELIST)\n  if (atomic_test_bit(conn->flags, BT_CONN_AUTO_CONNECT)) {\n    bt_conn_set_state(conn, BT_CONN_CONNECT_SCAN);\n    bt_le_scan_update(false);\n  }\n#endif /* defined(CONFIG_BT_CENTRAL) && !defined(CONFIG_BT_WHITELIST) */\n\n  bt_conn_unref(conn);\n\n#if defined(BFLB_BLE_PATCH_CLEAN_UP_CONNECT_REF)\n  atomic_clear(&conn->ref);\n#endif\n\n#if defined(BFLB_RELEASE_CMD_SEM_IF_CONN_DISC)\n  hci_release_conn_related_cmd();\n#endif\n\n#if defined(BFLB_BLE)\n  notify_disconnected(conn);\n#endif\n\n#if defined(CONFIG_BLE_RECONNECT_TEST)\n  if (conn->role == BT_CONN_ROLE_MASTER) {\n    struct bt_le_conn_param param = {\n        .interval_min = BT_GAP_INIT_CONN_INT_MIN,\n        .interval_max = BT_GAP_INIT_CONN_INT_MAX,\n        .latency      = 0,\n        .timeout      = 400,\n    };\n\n    if (bt_conn_create_le(&conn->le.dst, &param)) {\n      BT_DBG(\"Reconnecting. \\n\");\n    } else {\n      BT_DBG(\"Reconnect fail. \\n\");\n    }\n  }\n#endif\n\nadvertise:\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_KEEP_ADVERTISING) && !atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING)) {\n    if (IS_ENABLED(CONFIG_BT_PRIVACY)) {\n      le_set_private_addr(bt_dev.adv_id);\n    }\n\n    set_advertise_enable(true);\n  }\n}\n\nstatic int hci_le_read_remote_features(struct bt_conn *conn) {\n  struct bt_hci_cp_le_read_remote_features *cp;\n  struct net_buf                           *buf;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_READ_REMOTE_FEATURES, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp         = net_buf_add(buf, sizeof(*cp));\n  cp->handle = sys_cpu_to_le16(conn->handle);\n  bt_hci_cmd_send(BT_HCI_OP_LE_READ_REMOTE_FEATURES, buf);\n\n  return 0;\n}\n\n/* LE Data Length Change Event is optional so this function just ignore\n * error and stack will continue to use default values.\n */\nstatic void hci_le_set_data_len(struct bt_conn *conn) {\n  struct bt_hci_rp_le_read_max_data_len *rp;\n  struct bt_hci_cp_le_set_data_len      *cp;\n  struct net_buf                        *buf, *rsp;\n  u16_t                                  tx_octets, tx_time;\n  int                                    err;\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_READ_MAX_DATA_LEN, NULL, &rsp);\n  if (err) {\n    BT_ERR(\"Failed to read DLE max data len\");\n    return;\n  }\n\n  rp        = (void *)rsp->data;\n  tx_octets = sys_le16_to_cpu(rp->max_tx_octets);\n  tx_time   = sys_le16_to_cpu(rp->max_tx_time);\n  net_buf_unref(rsp);\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_DATA_LEN, sizeof(*cp));\n  if (!buf) {\n    BT_ERR(\"Failed to create LE Set Data Length Command\");\n    return;\n  }\n\n  cp            = net_buf_add(buf, sizeof(*cp));\n  cp->handle    = sys_cpu_to_le16(conn->handle);\n  cp->tx_octets = sys_cpu_to_le16(tx_octets);\n  cp->tx_time   = sys_cpu_to_le16(tx_time);\n  err           = bt_hci_cmd_send(BT_HCI_OP_LE_SET_DATA_LEN, buf);\n  if (err) {\n    BT_ERR(\"Failed to send LE Set Data Length Command\");\n  }\n}\n\nint bt_le_set_data_len(struct bt_conn *conn, u16_t tx_octets, u16_t tx_time) {\n  struct bt_hci_cp_le_set_data_len *cp;\n  struct net_buf                   *buf;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_DATA_LEN, sizeof(*cp));\n  if (!buf) {\n    BT_ERR(\"bt_le_set_data_len, Failed to create LE Set Data Length Command\");\n    return -ENOBUFS;\n  }\n\n  cp            = net_buf_add(buf, sizeof(*cp));\n  cp->handle    = sys_cpu_to_le16(conn->handle);\n  cp->tx_octets = sys_cpu_to_le16(tx_octets);\n  cp->tx_time   = sys_cpu_to_le16(tx_time);\n\n  return bt_hci_cmd_send(BT_HCI_OP_LE_SET_DATA_LEN, buf);\n}\n\nint hci_le_set_phy(struct bt_conn *conn, uint8_t all_phys, uint8_t pref_tx_phy, uint8_t pref_rx_phy, uint8_t phy_opts) {\n  struct bt_hci_cp_le_set_phy *cp;\n  struct net_buf              *buf;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_PHY, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp           = net_buf_add(buf, sizeof(*cp));\n  cp->handle   = sys_cpu_to_le16(conn->handle);\n  cp->all_phys = all_phys;\n  cp->tx_phys  = pref_tx_phy;\n  cp->rx_phys  = pref_rx_phy;\n  cp->phy_opts = phy_opts;\n\n  return bt_hci_cmd_send(BT_HCI_OP_LE_SET_PHY, buf);\n}\n\nint hci_le_set_default_phy(u8_t default_phy) {\n  struct bt_hci_cp_le_set_default_phy *cp;\n  struct net_buf                      *buf;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_DEFAULT_PHY, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp           = net_buf_add(buf, sizeof(*cp));\n  cp->all_phys = 0U;\n  cp->tx_phys  = default_phy;\n  cp->rx_phys  = default_phy;\n  bt_hci_cmd_send(BT_HCI_OP_LE_SET_DEFAULT_PHY, buf);\n\n  return 0;\n}\n\nstatic void slave_update_conn_param(struct bt_conn *conn) {\n  if (!IS_ENABLED(CONFIG_BT_PERIPHERAL)) {\n    return;\n  }\n\n  /* don't start timer again on PHY update etc */\n  if (atomic_test_bit(conn->flags, BT_CONN_SLAVE_PARAM_UPDATE)) {\n    return;\n  }\n\n  /*\n   * Core 4.2 Vol 3, Part C, 9.3.12.2\n   * The Peripheral device should not perform a Connection Parameter\n   * Update procedure within 5 s after establishing a connection.\n   */\n  k_delayed_work_submit(&conn->update_work, CONN_UPDATE_TIMEOUT);\n}\n\n#if defined(CONFIG_BT_SMP)\nstatic void update_pending_id(struct bt_keys *keys, void *data) {\n  if (keys->flags & BT_KEYS_ID_PENDING_ADD) {\n    keys->flags &= ~BT_KEYS_ID_PENDING_ADD;\n    bt_id_add(keys);\n    return;\n  }\n\n  if (keys->flags & BT_KEYS_ID_PENDING_DEL) {\n    keys->flags &= ~BT_KEYS_ID_PENDING_DEL;\n    bt_id_del(keys);\n    return;\n  }\n}\n#endif\n\nstatic struct bt_conn *find_pending_connect(bt_addr_le_t *peer_addr) {\n  struct bt_conn *conn;\n\n  /*\n   * Make lookup to check if there's a connection object in\n   * CONNECT or DIR_ADV state associated with passed peer LE address.\n   */\n  conn = bt_conn_lookup_state_le(peer_addr, BT_CONN_CONNECT);\n  if (conn) {\n    return conn;\n  }\n\n  return bt_conn_lookup_state_le(peer_addr, BT_CONN_CONNECT_DIR_ADV);\n}\n\nstatic void enh_conn_complete(struct bt_hci_evt_le_enh_conn_complete *evt) {\n  u16_t           handle = sys_le16_to_cpu(evt->handle);\n  bt_addr_le_t    peer_addr, id_addr;\n  struct bt_conn *conn;\n  int             err;\n\n  BT_DBG(\"status 0x%02x handle %u role %u %s\", evt->status, handle, evt->role, bt_addr_le_str(&evt->peer_addr));\n\n#if defined(CONFIG_BT_SMP)\n  if (atomic_test_and_clear_bit(bt_dev.flags, BT_DEV_ID_PENDING)) {\n    bt_keys_foreach(BT_KEYS_IRK, update_pending_id, NULL);\n  }\n#endif\n\n  if (evt->status) {\n    /*\n     * If there was an error we are only interested in pending\n     * connection. There is no need to check ID address as\n     * only one connection can be in that state.\n     *\n     * Depending on error code address might not be valid anyway.\n     */\n    conn = find_pending_connect(NULL);\n    if (!conn) {\n      return;\n    }\n\n    conn->err = evt->status;\n\n    if (IS_ENABLED(CONFIG_BT_PERIPHERAL)) {\n      /*\n       * Handle advertising timeout after high duty directed\n       * advertising.\n       */\n      if (conn->err == BT_HCI_ERR_ADV_TIMEOUT) {\n        atomic_clear_bit(bt_dev.flags, BT_DEV_ADVERTISING);\n        bt_conn_set_state(conn, BT_CONN_DISCONNECTED);\n\n        goto done;\n      }\n    }\n\n    if (IS_ENABLED(CONFIG_BT_CENTRAL)) {\n      /*\n       * Handle cancellation of outgoing connection attempt.\n       */\n      if (conn->err == BT_HCI_ERR_UNKNOWN_CONN_ID) {\n        /* We notify before checking autoconnect flag\n         * as application may choose to change it from\n         * callback.\n         */\n        bt_conn_set_state(conn, BT_CONN_DISCONNECTED);\n\n#if !defined(CONFIG_BT_WHITELIST)\n        /* Check if device is marked for autoconnect. */\n        if (atomic_test_bit(conn->flags, BT_CONN_AUTO_CONNECT)) {\n          bt_conn_set_state(conn, BT_CONN_CONNECT_SCAN);\n        }\n#endif /* !defined(CONFIG_BT_WHITELIST) */\n        goto done;\n      }\n    }\n\n    BT_WARN(\"Unexpected status 0x%02x\", evt->status);\n\n    bt_conn_unref(conn);\n\n    return;\n  }\n\n  bt_addr_le_copy(&id_addr, &evt->peer_addr);\n\n  /* Translate \"enhanced\" identity address type to normal one */\n  if (id_addr.type == BT_ADDR_LE_PUBLIC_ID || id_addr.type == BT_ADDR_LE_RANDOM_ID) {\n    id_addr.type -= BT_ADDR_LE_PUBLIC_ID;\n    bt_addr_copy(&peer_addr.a, &evt->peer_rpa);\n    peer_addr.type = BT_ADDR_LE_RANDOM;\n  } else {\n    bt_addr_le_copy(&peer_addr, &evt->peer_addr);\n  }\n\n  conn = find_pending_connect(&id_addr);\n\n  if (IS_ENABLED(CONFIG_BT_PERIPHERAL) && evt->role == BT_HCI_ROLE_SLAVE) {\n    /*\n     * clear advertising even if we are not able to add connection\n     * object to keep host in sync with controller state\n     */\n    atomic_clear_bit(bt_dev.flags, BT_DEV_ADVERTISING);\n\n    /* for slave we may need to add new connection */\n    if (!conn) {\n      conn = bt_conn_add_le(bt_dev.adv_id, &id_addr);\n    }\n  }\n\n  if (IS_ENABLED(CONFIG_BT_CENTRAL) && IS_ENABLED(CONFIG_BT_WHITELIST) && evt->role == BT_HCI_ROLE_MASTER) {\n    /* for whitelist initiator me may need to add new connection. */\n    if (!conn) {\n      conn = bt_conn_add_le(BT_ID_DEFAULT, &id_addr);\n    }\n  }\n\n  if (!conn) {\n    BT_ERR(\"Unable to add new conn for handle %u\", handle);\n    return;\n  }\n\n  conn->handle = handle;\n  bt_addr_le_copy(&conn->le.dst, &id_addr);\n  conn->le.interval = sys_le16_to_cpu(evt->interval);\n  conn->le.latency  = sys_le16_to_cpu(evt->latency);\n  conn->le.timeout  = sys_le16_to_cpu(evt->supv_timeout);\n  conn->role        = evt->role;\n  conn->err         = 0U;\n\n  /*\n   * Use connection address (instead of identity address) as initiator\n   * or responder address. Only slave needs to be updated. For master all\n   * was set during outgoing connection creation.\n   */\n  if (IS_ENABLED(CONFIG_BT_PERIPHERAL) && conn->role == BT_HCI_ROLE_SLAVE) {\n    bt_addr_le_copy(&conn->le.init_addr, &peer_addr);\n\n    if (IS_ENABLED(CONFIG_BT_PRIVACY)) {\n#if defined(BFLB_BLE_PATCH_DHKEY_CHECK_FAILED)\n      if (memcmp(&evt->local_rpa, BT_ADDR_ANY, sizeof(bt_addr_t)))\n        bt_addr_copy(&conn->le.resp_addr.a, &evt->local_rpa);\n      else\n        bt_addr_copy(&conn->le.resp_addr.a, &bt_dev.random_addr.a);\n#else\n      bt_addr_copy(&conn->le.resp_addr.a, &evt->local_rpa);\n#endif\n      conn->le.resp_addr.type = BT_ADDR_LE_RANDOM;\n    } else {\n      bt_addr_le_copy(&conn->le.resp_addr, &bt_dev.id_addr[conn->id]);\n    }\n\n#if defined(CONFIG_BT_STACK_PTS)\n    if (atomic_test_and_clear_bit(bt_dev.flags, BT_DEV_ADV_ADDRESS_IS_PUBLIC)) {\n      bt_addr_le_copy(&conn->le.resp_addr, &bt_dev.id_addr[conn->id]);\n    }\n#endif\n\n    /* if the controller supports, lets advertise for another\n     * slave connection.\n     * check for connectable advertising state is sufficient as\n     * this is how this le connection complete for slave occurred.\n     */\n    if (atomic_test_bit(bt_dev.flags, BT_DEV_KEEP_ADVERTISING) && BT_LE_STATES_SLAVE_CONN_ADV(bt_dev.le.states)) {\n      if (IS_ENABLED(CONFIG_BT_PRIVACY)) {\n        le_set_private_addr(bt_dev.adv_id);\n      }\n\n      set_advertise_enable(true);\n    }\n  }\n\n  if (IS_ENABLED(CONFIG_BT_CENTRAL) && conn->role == BT_HCI_ROLE_MASTER) {\n    if (IS_ENABLED(CONFIG_BT_WHITELIST) && atomic_test_bit(bt_dev.flags, BT_DEV_AUTO_CONN)) {\n      conn->id = BT_ID_DEFAULT;\n      atomic_clear_bit(bt_dev.flags, BT_DEV_AUTO_CONN);\n    }\n\n    bt_addr_le_copy(&conn->le.resp_addr, &peer_addr);\n\n    if (IS_ENABLED(CONFIG_BT_PRIVACY)) {\n#if defined(BFLB_BLE_PATCH_DHKEY_CHECK_FAILED)\n      if (memcmp(&evt->local_rpa, BT_ADDR_ANY, sizeof(bt_addr_t)))\n        bt_addr_copy(&conn->le.init_addr.a, &evt->local_rpa);\n      else\n        bt_addr_copy(&conn->le.init_addr.a, &bt_dev.random_addr.a);\n#else\n      bt_addr_copy(&conn->le.init_addr.a, &evt->local_rpa);\n#endif\n      conn->le.init_addr.type = BT_ADDR_LE_RANDOM;\n    } else {\n      bt_addr_le_copy(&conn->le.init_addr, &bt_dev.id_addr[conn->id]);\n    }\n\n#if defined(CONFIG_BT_STACK_PTS)\n    if (conn->le.own_adder_type == BT_ADDR_LE_PUBLIC_ID) {\n      bt_addr_le_copy(&conn->le.init_addr, &bt_dev.id_addr[conn->id]);\n    }\n#endif\n  }\n\n  bt_conn_set_state(conn, BT_CONN_CONNECTED);\n\n  /*\n   * it is possible that connection was disconnected directly from\n   * connected callback so we must check state before doing connection\n   * parameters update\n   */\n  if (conn->state != BT_CONN_CONNECTED) {\n    goto done;\n  }\n\n  if ((evt->role == BT_HCI_ROLE_MASTER) || BT_FEAT_LE_SLAVE_FEATURE_XCHG(bt_dev.le.features)) {\n    err = hci_le_read_remote_features(conn);\n    if (!err) {\n      goto done;\n    }\n  }\n\n  if (IS_ENABLED(CONFIG_BT_AUTO_PHY_UPDATE) && BT_FEAT_LE_PHY_2M(bt_dev.le.features)) {\n    err = hci_le_set_phy(conn, 0U, BT_HCI_LE_PHY_PREFER_2M, BT_HCI_LE_PHY_PREFER_2M, BT_HCI_LE_PHY_CODED_ANY);\n    if (!err) {\n      atomic_set_bit(conn->flags, BT_CONN_AUTO_PHY_UPDATE);\n      goto done;\n    }\n  }\n\n  if (IS_ENABLED(CONFIG_BT_DATA_LEN_UPDATE) && BT_FEAT_LE_DLE(bt_dev.le.features)) {\n    hci_le_set_data_len(conn);\n  }\n\n  if (IS_ENABLED(CONFIG_BT_PERIPHERAL) && conn->role == BT_CONN_ROLE_SLAVE) {\n    slave_update_conn_param(conn);\n  }\n\ndone:\n  bt_conn_unref(conn);\n  if (IS_ENABLED(CONFIG_BT_CENTRAL)) {\n    bt_le_scan_update(false);\n  }\n}\n\nstatic void le_enh_conn_complete(struct net_buf *buf) { enh_conn_complete((void *)buf->data); }\n\nstatic void le_legacy_conn_complete(struct net_buf *buf) {\n  struct bt_hci_evt_le_conn_complete    *evt = (void *)buf->data;\n  struct bt_hci_evt_le_enh_conn_complete enh;\n  const bt_addr_le_t                    *id_addr;\n\n  BT_DBG(\"status 0x%02x role %u %s\", evt->status, evt->role, bt_addr_le_str(&evt->peer_addr));\n\n  enh.status         = evt->status;\n  enh.handle         = evt->handle;\n  enh.role           = evt->role;\n  enh.interval       = evt->interval;\n  enh.latency        = evt->latency;\n  enh.supv_timeout   = evt->supv_timeout;\n  enh.clock_accuracy = evt->clock_accuracy;\n\n  bt_addr_le_copy(&enh.peer_addr, &evt->peer_addr);\n\n  if (IS_ENABLED(CONFIG_BT_PRIVACY)) {\n    bt_addr_copy(&enh.local_rpa, &bt_dev.random_addr.a);\n  } else {\n    bt_addr_copy(&enh.local_rpa, BT_ADDR_ANY);\n  }\n\n  if (evt->role == BT_HCI_ROLE_SLAVE) {\n    id_addr = bt_lookup_id_addr(bt_dev.adv_id, &enh.peer_addr);\n  } else {\n    id_addr = bt_lookup_id_addr(BT_ID_DEFAULT, &enh.peer_addr);\n  }\n\n  if (id_addr != &enh.peer_addr) {\n    bt_addr_copy(&enh.peer_rpa, &enh.peer_addr.a);\n    bt_addr_le_copy(&enh.peer_addr, id_addr);\n    enh.peer_addr.type += BT_ADDR_LE_PUBLIC_ID;\n  } else {\n    bt_addr_copy(&enh.peer_rpa, BT_ADDR_ANY);\n  }\n\n  enh_conn_complete(&enh);\n}\n\nstatic void le_remote_feat_complete(struct net_buf *buf) {\n  struct bt_hci_evt_le_remote_feat_complete *evt    = (void *)buf->data;\n  u16_t                                      handle = sys_le16_to_cpu(evt->handle);\n  struct bt_conn                            *conn;\n\n  conn = bt_conn_lookup_handle(handle);\n  if (!conn) {\n    BT_ERR(\"Unable to lookup conn for handle %u\", handle);\n    return;\n  }\n\n  if (!evt->status) {\n    memcpy(conn->le.features, evt->features, sizeof(conn->le.features));\n  }\n\n  if (IS_ENABLED(CONFIG_BT_AUTO_PHY_UPDATE) && BT_FEAT_LE_PHY_2M(bt_dev.le.features) && BT_FEAT_LE_PHY_2M(conn->le.features)) {\n    int err;\n\n    err = hci_le_set_phy(conn, 0U, BT_HCI_LE_PHY_PREFER_2M, BT_HCI_LE_PHY_PREFER_2M, BT_HCI_LE_PHY_CODED_ANY);\n    if (!err) {\n      atomic_set_bit(conn->flags, BT_CONN_AUTO_PHY_UPDATE);\n      goto done;\n    }\n  }\n\n  if (IS_ENABLED(CONFIG_BT_DATA_LEN_UPDATE) && BT_FEAT_LE_DLE(bt_dev.le.features) && BT_FEAT_LE_DLE(conn->le.features)) {\n    hci_le_set_data_len(conn);\n  }\n\n#if !defined(CONFIG_BT_STACK_PTS)\n  if (IS_ENABLED(CONFIG_BT_PERIPHERAL) && conn->role == BT_CONN_ROLE_SLAVE) {\n    slave_update_conn_param(conn);\n  }\n#endif\ndone:\n  bt_conn_unref(conn);\n}\n\n#if defined(CONFIG_BT_DATA_LEN_UPDATE)\nstatic void le_data_len_change(struct net_buf *buf) {\n  struct bt_hci_evt_le_data_len_change *evt           = (void *)buf->data;\n  u16_t                                 max_tx_octets = sys_le16_to_cpu(evt->max_tx_octets);\n  u16_t                                 max_rx_octets = sys_le16_to_cpu(evt->max_rx_octets);\n  u16_t                                 max_tx_time   = sys_le16_to_cpu(evt->max_tx_time);\n  u16_t                                 max_rx_time   = sys_le16_to_cpu(evt->max_rx_time);\n  u16_t                                 handle        = sys_le16_to_cpu(evt->handle);\n  struct bt_conn                       *conn;\n\n  UNUSED(max_tx_octets);\n  UNUSED(max_rx_octets);\n  UNUSED(max_tx_time);\n  UNUSED(max_rx_time);\n\n  conn = bt_conn_lookup_handle(handle);\n  if (!conn) {\n    BT_ERR(\"Unable to lookup conn for handle %u\", handle);\n    return;\n  }\n\n  BT_DBG(\"max. tx: %u (%uus), max. rx: %u (%uus)\", max_tx_octets, max_tx_time, max_rx_octets, max_rx_time);\n\n  /* TODO use those */\n\n  bt_conn_unref(conn);\n}\n#endif /* CONFIG_BT_DATA_LEN_UPDATE */\n\n#if defined(CONFIG_BT_PHY_UPDATE)\nstatic void le_phy_update_complete(struct net_buf *buf) {\n  struct bt_hci_evt_le_phy_update_complete *evt    = (void *)buf->data;\n  u16_t                                     handle = sys_le16_to_cpu(evt->handle);\n  struct bt_conn                           *conn;\n\n  conn = bt_conn_lookup_handle(handle);\n  if (!conn) {\n    BT_ERR(\"Unable to lookup conn for handle %u\", handle);\n    return;\n  }\n\n  BT_DBG(\"PHY updated: status: 0x%02x, tx: %u, rx: %u\", evt->status, evt->tx_phy, evt->rx_phy);\n\n  notify_le_phy_updated(conn, evt->tx_phy, evt->rx_phy);\n\n  if (!IS_ENABLED(CONFIG_BT_AUTO_PHY_UPDATE) || !atomic_test_and_clear_bit(conn->flags, BT_CONN_AUTO_PHY_UPDATE)) {\n    goto done;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_DATA_LEN_UPDATE) && BT_FEAT_LE_DLE(bt_dev.le.features) && BT_FEAT_LE_DLE(conn->le.features)) {\n    hci_le_set_data_len(conn);\n  }\n\n  if (IS_ENABLED(CONFIG_BT_PERIPHERAL) && conn->role == BT_CONN_ROLE_SLAVE) {\n    slave_update_conn_param(conn);\n  }\n\ndone:\n  bt_conn_unref(conn);\n}\n#endif /* CONFIG_BT_PHY_UPDATE */\n\nbool bt_le_conn_params_valid(const struct bt_le_conn_param *param) {\n  /* All limits according to BT Core spec 5.0 [Vol 2, Part E, 7.8.12] */\n\n  if (param->interval_min > param->interval_max || param->interval_min < 6 || param->interval_max > 3200) {\n    return false;\n  }\n\n  if (param->latency > 499) {\n    return false;\n  }\n\n  if (param->timeout < 10 || param->timeout > 3200 || ((param->timeout * 4U) <= ((1 + param->latency) * param->interval_max))) {\n    return false;\n  }\n\n  return true;\n}\n\nstatic void le_conn_param_neg_reply(u16_t handle, u8_t reason) {\n  struct bt_hci_cp_le_conn_param_req_neg_reply *cp;\n  struct net_buf                               *buf;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY, sizeof(*cp));\n  if (!buf) {\n    BT_ERR(\"Unable to allocate buffer\");\n    return;\n  }\n\n  cp         = net_buf_add(buf, sizeof(*cp));\n  cp->handle = sys_cpu_to_le16(handle);\n  cp->reason = sys_cpu_to_le16(reason);\n\n  bt_hci_cmd_send(BT_HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY, buf);\n}\n\nstatic int le_conn_param_req_reply(u16_t handle, const struct bt_le_conn_param *param) {\n  struct bt_hci_cp_le_conn_param_req_reply *cp;\n  struct net_buf                           *buf;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_CONN_PARAM_REQ_REPLY, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  (void)memset(cp, 0, sizeof(*cp));\n\n  cp->handle       = sys_cpu_to_le16(handle);\n  cp->interval_min = sys_cpu_to_le16(param->interval_min);\n  cp->interval_max = sys_cpu_to_le16(param->interval_max);\n  cp->latency      = sys_cpu_to_le16(param->latency);\n  cp->timeout      = sys_cpu_to_le16(param->timeout);\n\n  return bt_hci_cmd_send(BT_HCI_OP_LE_CONN_PARAM_REQ_REPLY, buf);\n}\n\nstatic void le_conn_param_req(struct net_buf *buf) {\n  struct bt_hci_evt_le_conn_param_req *evt = (void *)buf->data;\n  struct bt_le_conn_param              param;\n  struct bt_conn                      *conn;\n  u16_t                                handle;\n\n  handle             = sys_le16_to_cpu(evt->handle);\n  param.interval_min = sys_le16_to_cpu(evt->interval_min);\n  param.interval_max = sys_le16_to_cpu(evt->interval_max);\n  param.latency      = sys_le16_to_cpu(evt->latency);\n  param.timeout      = sys_le16_to_cpu(evt->timeout);\n\n  conn = bt_conn_lookup_handle(handle);\n  if (!conn) {\n    BT_ERR(\"Unable to lookup conn for handle %u\", handle);\n    le_conn_param_neg_reply(handle, BT_HCI_ERR_UNKNOWN_CONN_ID);\n    return;\n  }\n\n  if (!le_param_req(conn, &param)) {\n    le_conn_param_neg_reply(handle, BT_HCI_ERR_INVALID_LL_PARAM);\n  } else {\n    le_conn_param_req_reply(handle, &param);\n  }\n\n  bt_conn_unref(conn);\n}\n\nstatic void le_conn_update_complete(struct net_buf *buf) {\n  struct bt_hci_evt_le_conn_update_complete *evt = (void *)buf->data;\n  struct bt_conn                            *conn;\n  u16_t                                      handle;\n\n  handle = sys_le16_to_cpu(evt->handle);\n\n  BT_DBG(\"status 0x%02x, handle %u\", evt->status, handle);\n\n  conn = bt_conn_lookup_handle(handle);\n  if (!conn) {\n    BT_ERR(\"Unable to lookup conn for handle %u\", handle);\n    return;\n  }\n\n  if (!evt->status) {\n    conn->le.interval = sys_le16_to_cpu(evt->interval);\n    conn->le.latency  = sys_le16_to_cpu(evt->latency);\n    conn->le.timeout  = sys_le16_to_cpu(evt->supv_timeout);\n    notify_le_param_updated(conn);\n  } else if (evt->status == BT_HCI_ERR_UNSUPP_REMOTE_FEATURE && conn->role == BT_HCI_ROLE_SLAVE && !atomic_test_and_set_bit(conn->flags, BT_CONN_SLAVE_PARAM_L2CAP)) {\n    /* CPR not supported, let's try L2CAP CPUP instead */\n    struct bt_le_conn_param param;\n\n    param.interval_min = conn->le.interval_min;\n    param.interval_max = conn->le.interval_max;\n    param.latency      = conn->le.pending_latency;\n    param.timeout      = conn->le.pending_timeout;\n\n    bt_l2cap_update_conn_param(conn, &param);\n  }\n\n  bt_conn_unref(conn);\n}\n\n#if defined(CONFIG_BT_CENTRAL)\nstatic void check_pending_conn(const bt_addr_le_t *id_addr, const bt_addr_le_t *addr, u8_t evtype) {\n  struct bt_conn *conn;\n\n  /* No connections are allowed during explicit scanning */\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_EXPLICIT_SCAN)) {\n    return;\n  }\n\n  /* Return if event is not connectable */\n  if (evtype != BT_LE_ADV_IND && evtype != BT_LE_ADV_DIRECT_IND) {\n    return;\n  }\n\n  conn = bt_conn_lookup_state_le(id_addr, BT_CONN_CONNECT_SCAN);\n  if (!conn) {\n    return;\n  }\n\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_SCANNING) && set_le_scan_enable(BT_HCI_LE_SCAN_DISABLE)) {\n    goto failed;\n  }\n\n  bt_addr_le_copy(&conn->le.resp_addr, addr);\n  if (hci_le_create_conn(conn)) {\n    goto failed;\n  }\n\n  bt_conn_set_state(conn, BT_CONN_CONNECT);\n  bt_conn_unref(conn);\n  return;\n\nfailed:\n  conn->err = BT_HCI_ERR_UNSPECIFIED;\n  bt_conn_set_state(conn, BT_CONN_DISCONNECTED);\n  bt_conn_unref(conn);\n  bt_le_scan_update(false);\n}\n#endif /* CONFIG_BT_CENTRAL */\n\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\nstatic int set_flow_control(void) {\n  struct bt_hci_cp_host_buffer_size *hbs;\n  struct net_buf                    *buf;\n  int                                err;\n\n  /* Check if host flow control is actually supported */\n  if (!BT_CMD_TEST(bt_dev.supported_commands, 10, 5)) {\n    BT_WARN(\"Controller to host flow control not supported\");\n    return 0;\n  }\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_HOST_BUFFER_SIZE, sizeof(*hbs));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  hbs = net_buf_add(buf, sizeof(*hbs));\n  (void)memset(hbs, 0, sizeof(*hbs));\n  hbs->acl_mtu  = sys_cpu_to_le16(CONFIG_BT_L2CAP_RX_MTU + sizeof(struct bt_l2cap_hdr));\n  hbs->acl_pkts = sys_cpu_to_le16(CONFIG_BT_ACL_RX_COUNT);\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_HOST_BUFFER_SIZE, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_SET_CTL_TO_HOST_FLOW, 1);\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  net_buf_add_u8(buf, BT_HCI_CTL_TO_HOST_FLOW_ENABLE);\n  return bt_hci_cmd_send_sync(BT_HCI_OP_SET_CTL_TO_HOST_FLOW, buf, NULL);\n}\n#endif /* CONFIG_BT_HCI_ACL_FLOW_CONTROL */\n\nstatic int bt_clear_all_pairings(u8_t id) {\n  bt_conn_disconnect_all(id);\n\n  if (IS_ENABLED(CONFIG_BT_SMP)) {\n    bt_keys_clear_all(id);\n  }\n\n  if (IS_ENABLED(CONFIG_BT_BREDR)) {\n    bt_keys_link_key_clear_addr(NULL);\n  }\n\n  return 0;\n}\n\nint bt_unpair(u8_t id, const bt_addr_le_t *addr) {\n  struct bt_keys *keys = NULL;\n  struct bt_conn *conn;\n\n  if (id >= CONFIG_BT_ID_MAX) {\n    return -EINVAL;\n  }\n\n  if (!addr || !bt_addr_le_cmp(addr, BT_ADDR_LE_ANY)) {\n    return bt_clear_all_pairings(id);\n  }\n\n  conn = bt_conn_lookup_addr_le(id, addr);\n  if (conn) {\n    /* Clear the conn->le.keys pointer since we'll invalidate it,\n     * and don't want any subsequent code (like disconnected\n     * callbacks) accessing it.\n     */\n    if (conn->type == BT_CONN_TYPE_LE) {\n      keys          = conn->le.keys;\n      conn->le.keys = NULL;\n    }\n\n    bt_conn_disconnect(conn, BT_HCI_ERR_REMOTE_USER_TERM_CONN);\n    bt_conn_unref(conn);\n  }\n\n  if (IS_ENABLED(CONFIG_BT_BREDR)) {\n    /* LE Public may indicate BR/EDR as well */\n    if (addr->type == BT_ADDR_LE_PUBLIC) {\n      bt_keys_link_key_clear_addr(&addr->a);\n    }\n  }\n\n  if (IS_ENABLED(CONFIG_BT_SMP)) {\n    if (!keys) {\n      keys = bt_keys_find_addr(id, addr);\n    }\n\n    if (keys) {\n      bt_keys_clear(keys);\n    }\n  }\n\n  if (IS_ENABLED(CONFIG_BT_SETTINGS)) {\n    bt_gatt_clear(id, addr);\n  }\n\n  return 0;\n}\n\n#endif /* CONFIG_BT_CONN */\n\n#if defined(CONFIG_BT_SMP) || defined(CONFIG_BT_BREDR)\nstatic enum bt_security_err security_err_get(u8_t hci_err) {\n  switch (hci_err) {\n  case BT_HCI_ERR_SUCCESS:\n    return BT_SECURITY_ERR_SUCCESS;\n  case BT_HCI_ERR_AUTH_FAIL:\n    return BT_SECURITY_ERR_AUTH_FAIL;\n  case BT_HCI_ERR_PIN_OR_KEY_MISSING:\n    return BT_SECURITY_ERR_PIN_OR_KEY_MISSING;\n  case BT_HCI_ERR_PAIRING_NOT_SUPPORTED:\n    return BT_SECURITY_ERR_PAIR_NOT_SUPPORTED;\n  case BT_HCI_ERR_PAIRING_NOT_ALLOWED:\n    return BT_SECURITY_ERR_PAIR_NOT_ALLOWED;\n  case BT_HCI_ERR_INVALID_PARAM:\n    return BT_SECURITY_ERR_INVALID_PARAM;\n  default:\n    return BT_SECURITY_ERR_UNSPECIFIED;\n  }\n}\n\nstatic void reset_pairing(struct bt_conn *conn) {\n#if defined(CONFIG_BT_BREDR)\n  if (conn->type == BT_CONN_TYPE_BR) {\n    atomic_clear_bit(conn->flags, BT_CONN_BR_PAIRING);\n    atomic_clear_bit(conn->flags, BT_CONN_BR_PAIRING_INITIATOR);\n    atomic_clear_bit(conn->flags, BT_CONN_BR_LEGACY_SECURE);\n  }\n#endif /* CONFIG_BT_BREDR */\n\n  /* Reset required security level to current operational */\n  conn->required_sec_level = conn->sec_level;\n}\n#endif /* defined(CONFIG_BT_SMP) || defined(CONFIG_BT_BREDR) */\n\n#if defined(CONFIG_BT_BREDR)\nstatic int reject_conn(const bt_addr_t *bdaddr, u8_t reason) {\n  struct bt_hci_cp_reject_conn_req *cp;\n  struct net_buf                   *buf;\n  int                               err;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_REJECT_CONN_REQ, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  bt_addr_copy(&cp->bdaddr, bdaddr);\n  cp->reason = reason;\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_REJECT_CONN_REQ, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  return 0;\n}\n\nstatic int accept_sco_conn(const bt_addr_t *bdaddr, struct bt_conn *sco_conn) {\n  struct bt_hci_cp_accept_sync_conn_req *cp;\n  struct net_buf                        *buf;\n  int                                    err;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_ACCEPT_SYNC_CONN_REQ, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  bt_addr_copy(&cp->bdaddr, bdaddr);\n  cp->pkt_type = sco_conn->sco.pkt_type;\n\n  cp->tx_bandwidth   = 0x00001f40;\n  cp->rx_bandwidth   = 0x00001f40;\n  cp->max_latency    = 0x0007;\n  cp->retrans_effort = 0x01;\n  cp->content_format = BT_VOICE_CVSD_16BIT;\n#if defined CONFIG_BT_HFP\n  if (!hfp_codec_msbc) {\n    cp->max_latency    = 0x000d;\n    cp->retrans_effort = 0x02;\n    cp->content_format = BT_VOICE_MSBC_16BIT;\n    BT_DBG(\"eSCO air coding mSBC!\");\n  }\n#endif\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_ACCEPT_SYNC_CONN_REQ, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  return 0;\n}\n\nstatic int accept_conn(const bt_addr_t *bdaddr) {\n  struct bt_hci_cp_accept_conn_req *cp;\n  struct net_buf                   *buf;\n  int                               err;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_ACCEPT_CONN_REQ, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  bt_addr_copy(&cp->bdaddr, bdaddr);\n  cp->role = BT_HCI_ROLE_SLAVE;\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_ACCEPT_CONN_REQ, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  return 0;\n}\n\nstatic void bt_esco_conn_req(struct bt_hci_evt_conn_request *evt) {\n  struct bt_conn *sco_conn;\n\n  sco_conn = bt_conn_add_sco(&evt->bdaddr, evt->link_type);\n  if (!sco_conn) {\n    reject_conn(&evt->bdaddr, BT_HCI_ERR_INSUFFICIENT_RESOURCES);\n    return;\n  }\n\n  if (accept_sco_conn(&evt->bdaddr, sco_conn)) {\n    BT_ERR(\"Error accepting connection from %s\", bt_addr_str(&evt->bdaddr));\n    reject_conn(&evt->bdaddr, BT_HCI_ERR_UNSPECIFIED);\n    bt_sco_cleanup(sco_conn);\n    return;\n  }\n\n  sco_conn->role = BT_HCI_ROLE_SLAVE;\n  bt_conn_set_state(sco_conn, BT_CONN_CONNECT);\n  bt_conn_unref(sco_conn);\n}\n\nstatic void conn_req(struct net_buf *buf) {\n  struct bt_hci_evt_conn_request *evt = (void *)buf->data;\n  struct bt_conn                 *conn;\n\n  BT_DBG(\"conn req from %s, type 0x%02x\", bt_addr_str(&evt->bdaddr), evt->link_type);\n\n  if (evt->link_type != BT_HCI_ACL) {\n    bt_esco_conn_req(evt);\n    return;\n  }\n\n  conn = bt_conn_add_br(&evt->bdaddr);\n  if (!conn) {\n    reject_conn(&evt->bdaddr, BT_HCI_ERR_INSUFFICIENT_RESOURCES);\n    return;\n  }\n\n  accept_conn(&evt->bdaddr);\n  conn->role = BT_HCI_ROLE_SLAVE;\n  bt_conn_set_state(conn, BT_CONN_CONNECT);\n  bt_conn_unref(conn);\n}\n\nstatic bool br_sufficient_key_size(struct bt_conn *conn) {\n  struct bt_hci_cp_read_encryption_key_size *cp;\n  struct bt_hci_rp_read_encryption_key_size *rp;\n  struct net_buf                            *buf, *rsp;\n  u8_t                                       key_size;\n  int                                        err;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_READ_ENCRYPTION_KEY_SIZE, sizeof(*cp));\n  if (!buf) {\n    BT_ERR(\"Failed to allocate command buffer\");\n    return false;\n  }\n\n  cp         = net_buf_add(buf, sizeof(*cp));\n  cp->handle = sys_cpu_to_le16(conn->handle);\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_READ_ENCRYPTION_KEY_SIZE, buf, &rsp);\n  if (err) {\n    BT_ERR(\"Failed to read encryption key size (err %d)\", err);\n    return false;\n  }\n\n  if (rsp->len < sizeof(*rp)) {\n    BT_ERR(\"Too small command complete for encryption key size\");\n    net_buf_unref(rsp);\n    return false;\n  }\n\n  rp       = (void *)rsp->data;\n  key_size = rp->key_size;\n  net_buf_unref(rsp);\n\n  BT_DBG(\"Encryption key size is %u\", key_size);\n\n  if (conn->sec_level == BT_SECURITY_L4) {\n    return key_size == BT_HCI_ENCRYPTION_KEY_SIZE_MAX;\n  }\n\n  return key_size >= BT_HCI_ENCRYPTION_KEY_SIZE_MIN;\n}\n\nstatic bool update_sec_level_br(struct bt_conn *conn) {\n  if (!conn->encrypt) {\n    conn->sec_level = BT_SECURITY_L1;\n    return true;\n  }\n\n  if (conn->br.link_key) {\n    if (conn->br.link_key->flags & BT_LINK_KEY_AUTHENTICATED) {\n      if (conn->encrypt == 0x02) {\n        conn->sec_level = BT_SECURITY_L4;\n      } else {\n        conn->sec_level = BT_SECURITY_L3;\n      }\n    } else {\n      conn->sec_level = BT_SECURITY_L2;\n    }\n  } else {\n    BT_WARN(\"No BR/EDR link key found\");\n    conn->sec_level = BT_SECURITY_L2;\n  }\n\n  if (!br_sufficient_key_size(conn)) {\n    BT_ERR(\"Encryption key size is not sufficient\");\n    bt_conn_disconnect(conn, BT_HCI_ERR_AUTH_FAIL);\n    return false;\n  }\n\n  if (conn->required_sec_level > conn->sec_level) {\n    BT_ERR(\"Failed to set required security level\");\n    bt_conn_disconnect(conn, BT_HCI_ERR_AUTH_FAIL);\n    return false;\n  }\n\n  return true;\n}\n\nstatic void synchronous_conn_complete(struct net_buf *buf) {\n  struct bt_hci_evt_sync_conn_complete *evt = (void *)buf->data;\n  struct bt_conn                       *sco_conn;\n  u16_t                                 handle = sys_le16_to_cpu(evt->handle);\n\n  BT_DBG(\"status 0x%02x, handle %u, type 0x%02x\", evt->status, handle, evt->link_type);\n\n  sco_conn = bt_conn_lookup_addr_sco(&evt->bdaddr);\n  if (!sco_conn) {\n    BT_ERR(\"Unable to find conn for %s\", bt_addr_str(&evt->bdaddr));\n    return;\n  }\n\n  if (evt->status) {\n    sco_conn->err = evt->status;\n    bt_conn_set_state(sco_conn, BT_CONN_DISCONNECTED);\n    bt_conn_unref(sco_conn);\n    return;\n  }\n\n  sco_conn->handle = handle;\n  bt_conn_set_state(sco_conn, BT_CONN_CONNECTED);\n  bt_conn_unref(sco_conn);\n}\n\nstatic void conn_complete(struct net_buf *buf) {\n  struct bt_hci_evt_conn_complete       *evt = (void *)buf->data;\n  struct bt_conn                        *conn;\n  struct bt_hci_cp_read_remote_features *cp;\n  u16_t                                  handle = sys_le16_to_cpu(evt->handle);\n\n  BT_DBG(\"status 0x%02x, handle %u, type 0x%02x\", evt->status, handle, evt->link_type);\n\n  conn = bt_conn_lookup_addr_br(&evt->bdaddr);\n  if (!conn) {\n    BT_ERR(\"Unable to find conn for %s\", bt_addr_str(&evt->bdaddr));\n    return;\n  }\n\n  if (evt->status) {\n    conn->err = evt->status;\n    bt_conn_set_state(conn, BT_CONN_DISCONNECTED);\n    bt_conn_unref(conn);\n    return;\n  }\n\n  conn->handle  = handle;\n  conn->err     = 0U;\n  conn->encrypt = evt->encr_enabled;\n\n  if (!update_sec_level_br(conn)) {\n    bt_conn_unref(conn);\n    return;\n  }\n\n  bt_conn_set_state(conn, BT_CONN_CONNECTED);\n  bt_conn_unref(conn);\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_READ_REMOTE_FEATURES, sizeof(*cp));\n  if (!buf) {\n    return;\n  }\n\n  cp         = net_buf_add(buf, sizeof(*cp));\n  cp->handle = evt->handle;\n\n  bt_hci_cmd_send_sync(BT_HCI_OP_READ_REMOTE_FEATURES, buf, NULL);\n}\n\nstatic void pin_code_req(struct net_buf *buf) {\n  struct bt_hci_evt_pin_code_req *evt = (void *)buf->data;\n  struct bt_conn                 *conn;\n\n  BT_DBG(\"\");\n\n  conn = bt_conn_lookup_addr_br(&evt->bdaddr);\n  if (!conn) {\n    BT_ERR(\"Can't find conn for %s\", bt_addr_str(&evt->bdaddr));\n    return;\n  }\n\n  bt_conn_pin_code_req(conn);\n  bt_conn_unref(conn);\n}\n\nstatic void link_key_notify(struct net_buf *buf) {\n  struct bt_hci_evt_link_key_notify *evt = (void *)buf->data;\n  struct bt_conn                    *conn;\n\n  printf(\"bredr link key: \");\n  for (int i = 0; i < 16; i++) {\n    printf(\"0x%02x \", evt->link_key[i]);\n  }\n  printf(\"\\n\");\n\n  conn = bt_conn_lookup_addr_br(&evt->bdaddr);\n  if (!conn) {\n    BT_ERR(\"Can't find conn for %s\", bt_addr_str(&evt->bdaddr));\n    return;\n  }\n\n  BT_DBG(\"%s, link type 0x%02x\", bt_addr_str(&evt->bdaddr), evt->key_type);\n\n  if (!conn->br.link_key) {\n    conn->br.link_key = bt_keys_get_link_key(&evt->bdaddr);\n  }\n  if (!conn->br.link_key) {\n    BT_ERR(\"Can't update keys for %s\", bt_addr_str(&evt->bdaddr));\n    bt_conn_unref(conn);\n    return;\n  }\n\n  /* clear any old Link Key flags */\n  conn->br.link_key->flags = 0U;\n\n  switch (evt->key_type) {\n  case BT_LK_COMBINATION:\n    /*\n     * Setting Combination Link Key as AUTHENTICATED means it was\n     * successfully generated by 16 digits wide PIN code.\n     */\n    if (atomic_test_and_clear_bit(conn->flags, BT_CONN_BR_LEGACY_SECURE)) {\n      conn->br.link_key->flags |= BT_LINK_KEY_AUTHENTICATED;\n    }\n    memcpy(conn->br.link_key->val, evt->link_key, 16);\n    break;\n  case BT_LK_AUTH_COMBINATION_P192:\n    conn->br.link_key->flags |= BT_LINK_KEY_AUTHENTICATED;\n    /* fall through */\n    __attribute__((fallthrough));\n  case BT_LK_UNAUTH_COMBINATION_P192:\n    /* Mark no-bond so that link-key is removed on disconnection */\n    if (bt_conn_ssp_get_auth(conn) < BT_HCI_DEDICATED_BONDING) {\n      atomic_set_bit(conn->flags, BT_CONN_BR_NOBOND);\n    }\n\n    memcpy(conn->br.link_key->val, evt->link_key, 16);\n    break;\n  case BT_LK_AUTH_COMBINATION_P256:\n    conn->br.link_key->flags |= BT_LINK_KEY_AUTHENTICATED;\n    /* fall through */\n    __attribute__((fallthrough));\n  case BT_LK_UNAUTH_COMBINATION_P256:\n    conn->br.link_key->flags |= BT_LINK_KEY_SC;\n\n    /* Mark no-bond so that link-key is removed on disconnection */\n    if (bt_conn_ssp_get_auth(conn) < BT_HCI_DEDICATED_BONDING) {\n      atomic_set_bit(conn->flags, BT_CONN_BR_NOBOND);\n    }\n\n    memcpy(conn->br.link_key->val, evt->link_key, 16);\n    break;\n  default:\n    BT_WARN(\"Unsupported Link Key type %u\", evt->key_type);\n    (void)memset(conn->br.link_key->val, 0, sizeof(conn->br.link_key->val));\n    break;\n  }\n\n  bt_conn_unref(conn);\n}\n\nstatic void link_key_neg_reply(const bt_addr_t *bdaddr) {\n  struct bt_hci_cp_link_key_neg_reply *cp;\n  struct net_buf                      *buf;\n\n  BT_DBG(\"\");\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LINK_KEY_NEG_REPLY, sizeof(*cp));\n  if (!buf) {\n    BT_ERR(\"Out of command buffers\");\n    return;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  bt_addr_copy(&cp->bdaddr, bdaddr);\n  bt_hci_cmd_send_sync(BT_HCI_OP_LINK_KEY_NEG_REPLY, buf, NULL);\n}\n\nstatic void link_key_reply(const bt_addr_t *bdaddr, const u8_t *lk) {\n  struct bt_hci_cp_link_key_reply *cp;\n  struct net_buf                  *buf;\n\n  BT_DBG(\"\");\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LINK_KEY_REPLY, sizeof(*cp));\n  if (!buf) {\n    BT_ERR(\"Out of command buffers\");\n    return;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  bt_addr_copy(&cp->bdaddr, bdaddr);\n  memcpy(cp->link_key, lk, 16);\n  bt_hci_cmd_send_sync(BT_HCI_OP_LINK_KEY_REPLY, buf, NULL);\n}\n\nstatic void link_key_req(struct net_buf *buf) {\n  struct bt_hci_evt_link_key_req *evt = (void *)buf->data;\n  struct bt_conn                 *conn;\n\n  BT_DBG(\"%s\", bt_addr_str(&evt->bdaddr));\n\n  conn = bt_conn_lookup_addr_br(&evt->bdaddr);\n  if (!conn) {\n    BT_ERR(\"Can't find conn for %s\", bt_addr_str(&evt->bdaddr));\n    link_key_neg_reply(&evt->bdaddr);\n    return;\n  }\n\n  if (!conn->br.link_key) {\n    conn->br.link_key = bt_keys_find_link_key(&evt->bdaddr);\n  }\n\n  if (!conn->br.link_key) {\n    link_key_neg_reply(&evt->bdaddr);\n    bt_conn_unref(conn);\n    return;\n  }\n\n  /*\n   * Enforce regenerate by controller stronger link key since found one\n   * in database not covers requested security level.\n   */\n  if (!(conn->br.link_key->flags & BT_LINK_KEY_AUTHENTICATED) && conn->required_sec_level > BT_SECURITY_L2) {\n    link_key_neg_reply(&evt->bdaddr);\n    bt_conn_unref(conn);\n    return;\n  }\n\n  link_key_reply(&evt->bdaddr, conn->br.link_key->val);\n  bt_conn_unref(conn);\n}\n\nstatic void io_capa_neg_reply(const bt_addr_t *bdaddr, const u8_t reason) {\n  struct bt_hci_cp_io_capability_neg_reply *cp;\n  struct net_buf                           *resp_buf;\n\n  resp_buf = bt_hci_cmd_create(BT_HCI_OP_IO_CAPABILITY_NEG_REPLY, sizeof(*cp));\n  if (!resp_buf) {\n    BT_ERR(\"Out of command buffers\");\n    return;\n  }\n\n  cp = net_buf_add(resp_buf, sizeof(*cp));\n  bt_addr_copy(&cp->bdaddr, bdaddr);\n  cp->reason = reason;\n  bt_hci_cmd_send_sync(BT_HCI_OP_IO_CAPABILITY_NEG_REPLY, resp_buf, NULL);\n}\n\nstatic void io_capa_resp(struct net_buf *buf) {\n  struct bt_hci_evt_io_capa_resp *evt = (void *)buf->data;\n  struct bt_conn                 *conn;\n\n  BT_DBG(\"remote %s, IOcapa 0x%02x, auth 0x%02x\", bt_addr_str(&evt->bdaddr), evt->capability, evt->authentication);\n\n  if (evt->authentication > BT_HCI_GENERAL_BONDING_MITM) {\n    BT_ERR(\"Invalid remote authentication requirements\");\n    io_capa_neg_reply(&evt->bdaddr, BT_HCI_ERR_UNSUPP_FEATURE_PARAM_VAL);\n    return;\n  }\n\n  if (evt->capability > BT_IO_NO_INPUT_OUTPUT) {\n    BT_ERR(\"Invalid remote io capability requirements\");\n    io_capa_neg_reply(&evt->bdaddr, BT_HCI_ERR_UNSUPP_FEATURE_PARAM_VAL);\n    return;\n  }\n\n  conn = bt_conn_lookup_addr_br(&evt->bdaddr);\n  if (!conn) {\n    BT_ERR(\"Unable to find conn for %s\", bt_addr_str(&evt->bdaddr));\n    return;\n  }\n\n  conn->br.remote_io_capa = evt->capability;\n  conn->br.remote_auth    = evt->authentication;\n  atomic_set_bit(conn->flags, BT_CONN_BR_PAIRING);\n  bt_conn_unref(conn);\n}\n\nstatic void io_capa_req(struct net_buf *buf) {\n  struct bt_hci_evt_io_capa_req        *evt = (void *)buf->data;\n  struct net_buf                       *resp_buf;\n  struct bt_conn                       *conn;\n  struct bt_hci_cp_io_capability_reply *cp;\n  u8_t                                  auth;\n\n  BT_DBG(\"\");\n\n  conn = bt_conn_lookup_addr_br(&evt->bdaddr);\n  if (!conn) {\n    BT_ERR(\"Can't find conn for %s\", bt_addr_str(&evt->bdaddr));\n    return;\n  }\n\n  resp_buf = bt_hci_cmd_create(BT_HCI_OP_IO_CAPABILITY_REPLY, sizeof(*cp));\n  if (!resp_buf) {\n    BT_ERR(\"Out of command buffers\");\n    bt_conn_unref(conn);\n    return;\n  }\n\n  /*\n   * Set authentication requirements when acting as pairing initiator to\n   * 'dedicated bond' with MITM protection set if local IO capa\n   * potentially allows it, and for acceptor, based on local IO capa and\n   * remote's authentication set.\n   */\n  if (atomic_test_bit(conn->flags, BT_CONN_BR_PAIRING_INITIATOR)) {\n    if (bt_conn_get_io_capa() != BT_IO_NO_INPUT_OUTPUT) {\n      auth = BT_HCI_DEDICATED_BONDING_MITM;\n    } else {\n      auth = BT_HCI_DEDICATED_BONDING;\n    }\n  } else {\n    auth = bt_conn_ssp_get_auth(conn);\n  }\n\n  cp = net_buf_add(resp_buf, sizeof(*cp));\n  bt_addr_copy(&cp->bdaddr, &evt->bdaddr);\n  cp->capability     = bt_conn_get_io_capa();\n  cp->authentication = auth;\n  cp->oob_data       = 0U;\n  bt_hci_cmd_send_sync(BT_HCI_OP_IO_CAPABILITY_REPLY, resp_buf, NULL);\n  bt_conn_unref(conn);\n}\n\nstatic void ssp_complete(struct net_buf *buf) {\n  struct bt_hci_evt_ssp_complete *evt = (void *)buf->data;\n  struct bt_conn                 *conn;\n\n  BT_DBG(\"status 0x%02x\", evt->status);\n\n  conn = bt_conn_lookup_addr_br(&evt->bdaddr);\n  if (!conn) {\n    BT_ERR(\"Can't find conn for %s\", bt_addr_str(&evt->bdaddr));\n    return;\n  }\n\n  bt_conn_ssp_auth_complete(conn, security_err_get(evt->status));\n  if (evt->status) {\n    bt_conn_disconnect(conn, BT_HCI_ERR_AUTH_FAIL);\n  }\n\n  bt_conn_unref(conn);\n}\n\nstatic void user_confirm_req(struct net_buf *buf) {\n  struct bt_hci_evt_user_confirm_req *evt = (void *)buf->data;\n  struct bt_conn                     *conn;\n\n  conn = bt_conn_lookup_addr_br(&evt->bdaddr);\n  if (!conn) {\n    BT_ERR(\"Can't find conn for %s\", bt_addr_str(&evt->bdaddr));\n    return;\n  }\n\n  bt_conn_ssp_auth(conn, sys_le32_to_cpu(evt->passkey));\n  bt_conn_unref(conn);\n}\n\nstatic void user_passkey_notify(struct net_buf *buf) {\n  struct bt_hci_evt_user_passkey_notify *evt = (void *)buf->data;\n  struct bt_conn                        *conn;\n\n  BT_DBG(\"\");\n\n  conn = bt_conn_lookup_addr_br(&evt->bdaddr);\n  if (!conn) {\n    BT_ERR(\"Can't find conn for %s\", bt_addr_str(&evt->bdaddr));\n    return;\n  }\n\n  bt_conn_ssp_auth(conn, sys_le32_to_cpu(evt->passkey));\n  bt_conn_unref(conn);\n}\n\nstatic void user_passkey_req(struct net_buf *buf) {\n  struct bt_hci_evt_user_passkey_req *evt = (void *)buf->data;\n  struct bt_conn                     *conn;\n\n  conn = bt_conn_lookup_addr_br(&evt->bdaddr);\n  if (!conn) {\n    BT_ERR(\"Can't find conn for %s\", bt_addr_str(&evt->bdaddr));\n    return;\n  }\n\n  bt_conn_ssp_auth(conn, 0);\n  bt_conn_unref(conn);\n}\n\nstruct discovery_priv {\n  u16_t clock_offset;\n  u8_t  pscan_rep_mode;\n  u8_t  resolving;\n} __packed;\n\nstatic int request_name(const bt_addr_t *addr, u8_t pscan, u16_t offset) {\n  struct bt_hci_cp_remote_name_request *cp;\n  struct net_buf                       *buf;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_REMOTE_NAME_REQUEST, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n\n  bt_addr_copy(&cp->bdaddr, addr);\n  cp->pscan_rep_mode = pscan;\n  cp->reserved       = 0x00; /* reserver, should be set to 0x00 */\n  cp->clock_offset   = offset;\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_REMOTE_NAME_REQUEST, buf, NULL);\n}\n\nbredr_name_callback name_callback = NULL;\nint                 remote_name_req(const bt_addr_t *addr, bredr_name_callback cb) {\n  u8_t  pscan        = 0x01;\n  u16_t clock_offset = 0x00;\n\n  name_callback = cb;\n\n  return request_name(addr, pscan, clock_offset);\n}\n\nvoid remote_name_complete(u8_t *name) {\n  if (name_callback) {\n    name_callback((const char *)name);\n  }\n}\n\n#define EIR_SHORT_NAME    0x08\n#define EIR_COMPLETE_NAME 0x09\n\nstatic bool eir_has_name(const u8_t *eir) {\n  int len = 240;\n\n  while (len) {\n    if (len < 2) {\n      break;\n    };\n\n    /* Look for early termination */\n    if (!eir[0]) {\n      break;\n    }\n\n    /* Check if field length is correct */\n    if (eir[0] > len - 1) {\n      break;\n    }\n\n    switch (eir[1]) {\n    case EIR_SHORT_NAME:\n    case EIR_COMPLETE_NAME:\n      if (eir[0] > 1) {\n        return true;\n      }\n      break;\n    default:\n      break;\n    }\n\n    /* Parse next AD Structure */\n    len -= eir[0] + 1;\n    eir += eir[0] + 1;\n  }\n\n  return false;\n}\n\nstatic void report_discovery_results(void) {\n  bool resolving_names = false;\n  int  i;\n\n  for (i = 0; i < discovery_results_count; i++) {\n    struct discovery_priv *priv;\n\n    priv = (struct discovery_priv *)&discovery_results[i]._priv;\n\n    if (eir_has_name(discovery_results[i].eir)) {\n      continue;\n    }\n\n    if (request_name(&discovery_results[i].addr, priv->pscan_rep_mode, priv->clock_offset)) {\n      continue;\n    }\n\n    priv->resolving = 1U;\n    resolving_names = true;\n  }\n\n  if (resolving_names) {\n    return;\n  }\n\n  atomic_clear_bit(bt_dev.flags, BT_DEV_INQUIRY);\n\n  discovery_cb(discovery_results, discovery_results_count);\n\n  discovery_cb            = NULL;\n  discovery_results       = NULL;\n  discovery_results_size  = 0;\n  discovery_results_count = 0;\n}\n\nstatic void inquiry_complete(struct net_buf *buf) {\n  struct bt_hci_evt_inquiry_complete *evt = (void *)buf->data;\n\n  if (evt->status) {\n    BT_ERR(\"Failed to complete inquiry\");\n  }\n\n  report_discovery_results();\n}\n\nstatic struct bt_br_discovery_result *get_result_slot(const bt_addr_t *addr, s8_t rssi) {\n  struct bt_br_discovery_result *result = NULL;\n  size_t                         i;\n\n  /* check if already present in results */\n  for (i = 0; i < discovery_results_count; i++) {\n    if (!bt_addr_cmp(addr, &discovery_results[i].addr)) {\n      return &discovery_results[i];\n    }\n  }\n\n  /* Pick a new slot (if available) */\n  if (discovery_results_count < discovery_results_size) {\n    bt_addr_copy(&discovery_results[discovery_results_count].addr, addr);\n    return &discovery_results[discovery_results_count++];\n  }\n\n  /* ignore if invalid RSSI */\n  if (rssi == 0xff) {\n    return NULL;\n  }\n\n  /*\n   * Pick slot with smallest RSSI that is smaller then passed RSSI\n   * TODO handle TX if present\n   */\n  for (i = 0; i < discovery_results_size; i++) {\n    if (discovery_results[i].rssi > rssi) {\n      continue;\n    }\n\n    if (!result || result->rssi > discovery_results[i].rssi) {\n      result = &discovery_results[i];\n    }\n  }\n\n  if (result) {\n    BT_DBG(\"Reusing slot (old %s rssi %d dBm)\", bt_addr_str(&result->addr), result->rssi);\n\n    bt_addr_copy(&result->addr, addr);\n  }\n\n  return result;\n}\n\nstatic void inquiry_result_with_rssi(struct net_buf *buf) {\n  u8_t num_reports = net_buf_pull_u8(buf);\n\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_INQUIRY)) {\n    return;\n  }\n\n  BT_DBG(\"number of results: %u\", num_reports);\n\n  while (num_reports--) {\n    struct bt_hci_evt_inquiry_result_with_rssi *evt;\n    struct bt_br_discovery_result              *result;\n    struct discovery_priv                      *priv;\n\n    if (buf->len < sizeof(*evt)) {\n      BT_ERR(\"Unexpected end to buffer\");\n      return;\n    }\n\n    evt = net_buf_pull_mem(buf, sizeof(*evt));\n    BT_DBG(\"%s rssi %d dBm\", bt_addr_str(&evt->addr), evt->rssi);\n\n    result = get_result_slot(&evt->addr, evt->rssi);\n    if (!result) {\n      return;\n    }\n\n    priv                 = (struct discovery_priv *)&result->_priv;\n    priv->pscan_rep_mode = evt->pscan_rep_mode;\n    priv->clock_offset   = evt->clock_offset;\n\n    memcpy(result->cod, evt->cod, 3);\n    result->rssi = evt->rssi;\n\n    /* we could reuse slot so make sure EIR is cleared */\n    (void)memset(result->eir, 0, sizeof(result->eir));\n  }\n}\n\nstatic void extended_inquiry_result(struct net_buf *buf) {\n  struct bt_hci_evt_extended_inquiry_result *evt = (void *)buf->data;\n  struct bt_br_discovery_result             *result;\n  struct discovery_priv                     *priv;\n\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_INQUIRY)) {\n    return;\n  }\n\n  BT_DBG(\"%s rssi %d dBm\", bt_addr_str(&evt->addr), evt->rssi);\n\n  result = get_result_slot(&evt->addr, evt->rssi);\n  if (!result) {\n    return;\n  }\n\n  priv                 = (struct discovery_priv *)&result->_priv;\n  priv->pscan_rep_mode = evt->pscan_rep_mode;\n  priv->clock_offset   = evt->clock_offset;\n\n  result->rssi = evt->rssi;\n  memcpy(result->cod, evt->cod, 3);\n  memcpy(result->eir, evt->eir, sizeof(result->eir));\n}\n\nstatic void remote_name_request_complete(struct net_buf *buf) {\n  struct bt_hci_evt_remote_name_req_complete *evt = (void *)buf->data;\n  struct bt_br_discovery_result              *result;\n  struct discovery_priv                      *priv;\n  int                                         eir_len = 240;\n  u8_t                                       *eir;\n  int                                         i;\n  BT_DBG(\"remote name:%s\", evt->name);\n\n  if (evt->name) {\n    remote_name_complete(evt->name);\n  }\n\n  result = get_result_slot(&evt->bdaddr, 0xff);\n  if (!result) {\n    return;\n  }\n\n  priv            = (struct discovery_priv *)&result->_priv;\n  priv->resolving = 0U;\n\n  if (evt->status) {\n    goto check_names;\n  }\n\n  eir = result->eir;\n\n  while (eir_len) {\n    if (eir_len < 2) {\n      break;\n    };\n\n    /* Look for early termination */\n    if (!eir[0]) {\n      size_t name_len;\n\n      eir_len -= 2;\n\n      /* name is null terminated */\n      name_len = strlen((const char *)evt->name);\n\n      if (name_len > eir_len) {\n        eir[0] = eir_len + 1;\n        eir[1] = EIR_SHORT_NAME;\n      } else {\n        eir[0] = name_len + 1;\n        eir[1] = EIR_SHORT_NAME;\n      }\n\n      memcpy(&eir[2], evt->name, eir[0] - 1);\n\n      break;\n    }\n\n    /* Check if field length is correct */\n    if (eir[0] > eir_len - 1) {\n      break;\n    }\n\n    /* next EIR Structure */\n    eir_len -= eir[0] + 1;\n    eir += eir[0] + 1;\n  }\n\ncheck_names:\n  /* if still waiting for names */\n  for (i = 0; i < discovery_results_count; i++) {\n    struct discovery_priv *priv;\n\n    priv = (struct discovery_priv *)&discovery_results[i]._priv;\n\n    if (priv->resolving) {\n      return;\n    }\n  }\n\n  /* all names resolved, report discovery results */\n  atomic_clear_bit(bt_dev.flags, BT_DEV_INQUIRY);\n\n  discovery_cb(discovery_results, discovery_results_count);\n\n  discovery_cb            = NULL;\n  discovery_results       = NULL;\n  discovery_results_size  = 0;\n  discovery_results_count = 0;\n}\n\nstatic void link_encr(const u16_t handle) {\n  struct bt_hci_cp_set_conn_encrypt *encr;\n  struct net_buf                    *buf;\n\n  BT_DBG(\"\");\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_SET_CONN_ENCRYPT, sizeof(*encr));\n  if (!buf) {\n    BT_ERR(\"Out of command buffers\");\n    return;\n  }\n\n  encr          = net_buf_add(buf, sizeof(*encr));\n  encr->handle  = sys_cpu_to_le16(handle);\n  encr->encrypt = 0x01;\n\n  bt_hci_cmd_send_sync(BT_HCI_OP_SET_CONN_ENCRYPT, buf, NULL);\n}\n\nstatic void auth_complete(struct net_buf *buf) {\n  struct bt_hci_evt_auth_complete *evt = (void *)buf->data;\n  struct bt_conn                  *conn;\n  u16_t                            handle = sys_le16_to_cpu(evt->handle);\n\n  BT_DBG(\"status 0x%02x, handle %u\", evt->status, handle);\n\n  conn = bt_conn_lookup_handle(handle);\n  if (!conn) {\n    BT_ERR(\"Can't find conn for handle %u\", handle);\n    return;\n  }\n\n  if (evt->status) {\n    if (conn->state == BT_CONN_CONNECTED) {\n      /*\n       * Inform layers above HCI about non-zero authentication\n       * status to make them able cleanup pending jobs.\n       */\n      bt_l2cap_encrypt_change(conn, evt->status);\n    }\n    reset_pairing(conn);\n  } else {\n    link_encr(handle);\n  }\n\n  bt_conn_unref(conn);\n}\n\nstatic void read_remote_features_complete(struct net_buf *buf) {\n  struct bt_hci_evt_remote_features         *evt    = (void *)buf->data;\n  u16_t                                      handle = sys_le16_to_cpu(evt->handle);\n  struct bt_hci_cp_read_remote_ext_features *cp;\n  struct bt_conn                            *conn;\n\n  BT_DBG(\"status 0x%02x handle %u\", evt->status, handle);\n\n  conn = bt_conn_lookup_handle(handle);\n  if (!conn) {\n    BT_ERR(\"Can't find conn for handle %u\", handle);\n    return;\n  }\n\n  if (evt->status) {\n    goto done;\n  }\n\n  memcpy(conn->br.features[0], evt->features, sizeof(evt->features));\n\n  if (!BT_FEAT_EXT_FEATURES(conn->br.features)) {\n    goto done;\n  }\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_READ_REMOTE_EXT_FEATURES, sizeof(*cp));\n  if (!buf) {\n    goto done;\n  }\n\n  /* Read remote host features (page 1) */\n  cp         = net_buf_add(buf, sizeof(*cp));\n  cp->handle = evt->handle;\n  cp->page   = 0x01;\n\n  bt_hci_cmd_send_sync(BT_HCI_OP_READ_REMOTE_EXT_FEATURES, buf, NULL);\n\ndone:\n  bt_conn_unref(conn);\n}\n\nstatic void read_remote_ext_features_complete(struct net_buf *buf) {\n  struct bt_hci_evt_remote_ext_features *evt    = (void *)buf->data;\n  u16_t                                  handle = sys_le16_to_cpu(evt->handle);\n  struct bt_conn                        *conn;\n\n  BT_DBG(\"status 0x%02x handle %u\", evt->status, handle);\n\n  conn = bt_conn_lookup_handle(handle);\n  if (!conn) {\n    BT_ERR(\"Can't find conn for handle %u\", handle);\n    return;\n  }\n\n  if (!evt->status && evt->page == 0x01) {\n    memcpy(conn->br.features[1], evt->features, sizeof(conn->br.features[1]));\n  }\n\n  bt_conn_unref(conn);\n}\n\nstatic void role_change(struct net_buf *buf) {\n  struct bt_hci_evt_role_change *evt = (void *)buf->data;\n  struct bt_conn                *conn;\n\n  BT_DBG(\"status 0x%02x role %u addr %s\", evt->status, evt->role, bt_addr_str(&evt->bdaddr));\n\n  if (evt->status) {\n    return;\n  }\n\n  conn = bt_conn_lookup_addr_br(&evt->bdaddr);\n  if (!conn) {\n    BT_ERR(\"Can't find conn for %s\", bt_addr_str(&evt->bdaddr));\n    return;\n  }\n\n  if (evt->role) {\n    conn->role = BT_CONN_ROLE_SLAVE;\n  } else {\n    conn->role = BT_CONN_ROLE_MASTER;\n  }\n\n  bt_conn_unref(conn);\n}\n#endif /* CONFIG_BT_BREDR */\n\n#if defined(CONFIG_BT_SMP)\nstatic int le_set_privacy_mode(const bt_addr_le_t *addr, u8_t mode) {\n  struct bt_hci_cp_le_set_privacy_mode cp;\n  struct net_buf                      *buf;\n  int                                  err;\n\n  /* Check if set privacy mode command is supported */\n  if (!BT_CMD_TEST(bt_dev.supported_commands, 39, 2)) {\n    BT_WARN(\"Set privacy mode command is not supported\");\n    return 0;\n  }\n\n  BT_DBG(\"addr %s mode 0x%02x\", bt_addr_le_str(addr), mode);\n\n  bt_addr_le_copy(&cp.id_addr, addr);\n  cp.mode = mode;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_PRIVACY_MODE, sizeof(cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  net_buf_add_mem(buf, &cp, sizeof(cp));\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_SET_PRIVACY_MODE, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  return 0;\n}\n#if defined(CONFIG_BT_STACK_PTS)\nint addr_res_enable(u8_t enable)\n#else\nstatic int addr_res_enable(u8_t enable)\n#endif\n{\n  struct net_buf *buf;\n\n  BT_DBG(\"%s\", enable ? \"enabled\" : \"disabled\");\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_ADDR_RES_ENABLE, 1);\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  net_buf_add_u8(buf, enable);\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_LE_SET_ADDR_RES_ENABLE, buf, NULL);\n}\n\n#if defined(CONFIG_BT_STACK_PTS)\nint hci_id_add(const bt_addr_le_t *addr, u8_t val[16])\n#else\nstatic int hci_id_add(const bt_addr_le_t *addr, u8_t val[16])\n#endif\n{\n  struct bt_hci_cp_le_add_dev_to_rl *cp;\n  struct net_buf                    *buf;\n\n  BT_DBG(\"addr %s\", bt_addr_le_str(addr));\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_ADD_DEV_TO_RL, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  bt_addr_le_copy(&cp->peer_id_addr, addr);\n  memcpy(cp->peer_irk, val, 16);\n\n#if defined(CONFIG_BT_PRIVACY)\n  memcpy(cp->local_irk, bt_dev.irk, 16);\n#else\n  (void)memset(cp->local_irk, 0, 16);\n#endif\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_LE_ADD_DEV_TO_RL, buf, NULL);\n}\n\nvoid bt_id_add(struct bt_keys *keys) {\n  bool adv_enabled;\n#if defined(CONFIG_BT_OBSERVER)\n  bool scan_enabled;\n#endif /* CONFIG_BT_OBSERVER */\n  struct bt_conn *conn;\n  int             err;\n\n  BT_DBG(\"addr %s\", bt_addr_le_str(&keys->addr));\n\n  /* Nothing to be done if host-side resolving is used */\n  if (!bt_dev.le.rl_size || bt_dev.le.rl_entries > bt_dev.le.rl_size) {\n    bt_dev.le.rl_entries++;\n    return;\n  }\n\n  conn = bt_conn_lookup_state_le(NULL, BT_CONN_CONNECT);\n  if (conn) {\n    atomic_set_bit(bt_dev.flags, BT_DEV_ID_PENDING);\n    keys->flags |= BT_KEYS_ID_PENDING_ADD;\n    bt_conn_unref(conn);\n    return;\n  }\n\n  adv_enabled = atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING);\n  if (adv_enabled) {\n    set_advertise_enable(false);\n  }\n\n#if defined(CONFIG_BT_OBSERVER)\n  scan_enabled = atomic_test_bit(bt_dev.flags, BT_DEV_SCANNING);\n  if (scan_enabled) {\n    set_le_scan_enable(BT_HCI_LE_SCAN_DISABLE);\n  }\n#endif /* CONFIG_BT_OBSERVER */\n\n  /* If there are any existing entries address resolution will be on */\n  if (bt_dev.le.rl_entries) {\n    err = addr_res_enable(BT_HCI_ADDR_RES_DISABLE);\n    if (err) {\n      BT_WARN(\"Failed to disable address resolution\");\n      goto done;\n    }\n  }\n\n  if (bt_dev.le.rl_entries == bt_dev.le.rl_size) {\n    BT_WARN(\"Resolving list size exceeded. Switching to host.\");\n\n    err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_CLEAR_RL, NULL, NULL);\n    if (err) {\n      BT_ERR(\"Failed to clear resolution list\");\n      goto done;\n    }\n\n    bt_dev.le.rl_entries++;\n\n    goto done;\n  }\n\n  err = hci_id_add(&keys->addr, keys->irk.val);\n  if (err) {\n    BT_ERR(\"Failed to add IRK to controller\");\n    goto done;\n  }\n\n  bt_dev.le.rl_entries++;\n\n  /*\n   * According to Core Spec. 5.0 Vol 1, Part A 5.4.5 Privacy Feature\n   *\n   * By default, network privacy mode is used when private addresses are\n   * resolved and generated by the Controller, so advertising packets from\n   * peer devices that contain private addresses will only be accepted.\n   * By changing to the device privacy mode device is only concerned about\n   * its privacy and will accept advertising packets from peer devices\n   * that contain their identity address as well as ones that contain\n   * a private address, even if the peer device has distributed its IRK in\n   * the past.\n   */\n  err = le_set_privacy_mode(&keys->addr, BT_HCI_LE_PRIVACY_MODE_DEVICE);\n  if (err) {\n    BT_ERR(\"Failed to set privacy mode\");\n    goto done;\n  }\n\ndone:\n  addr_res_enable(BT_HCI_ADDR_RES_ENABLE);\n\n#if defined(CONFIG_BT_OBSERVER)\n  if (scan_enabled) {\n    set_le_scan_enable(BT_HCI_LE_SCAN_ENABLE);\n  }\n#endif /* CONFIG_BT_OBSERVER */\n\n  if (adv_enabled) {\n    set_advertise_enable(true);\n  }\n}\n\nstatic void keys_add_id(struct bt_keys *keys, void *data) { hci_id_add(&keys->addr, keys->irk.val); }\n\nvoid bt_id_del(struct bt_keys *keys) {\n  struct bt_hci_cp_le_rem_dev_from_rl *cp;\n  bool                                 adv_enabled;\n#if defined(CONFIG_BT_OBSERVER)\n  bool scan_enabled;\n#endif /* CONFIG_BT_OBSERVER */\n  struct bt_conn *conn;\n  struct net_buf *buf;\n  int             err;\n\n  BT_DBG(\"addr %s\", bt_addr_le_str(&keys->addr));\n\n  if (!bt_dev.le.rl_size || bt_dev.le.rl_entries > bt_dev.le.rl_size + 1) {\n    bt_dev.le.rl_entries--;\n    return;\n  }\n\n  conn = bt_conn_lookup_state_le(NULL, BT_CONN_CONNECT);\n  if (conn) {\n    atomic_set_bit(bt_dev.flags, BT_DEV_ID_PENDING);\n    keys->flags |= BT_KEYS_ID_PENDING_DEL;\n    bt_conn_unref(conn);\n    return;\n  }\n\n  adv_enabled = atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING);\n  if (adv_enabled) {\n    set_advertise_enable(false);\n  }\n\n#if defined(CONFIG_BT_OBSERVER)\n  scan_enabled = atomic_test_bit(bt_dev.flags, BT_DEV_SCANNING);\n  if (scan_enabled) {\n    set_le_scan_enable(BT_HCI_LE_SCAN_DISABLE);\n  }\n#endif /* CONFIG_BT_OBSERVER */\n\n  err = addr_res_enable(BT_HCI_ADDR_RES_DISABLE);\n  if (err) {\n    BT_ERR(\"Disabling address resolution failed (err %d)\", err);\n    goto done;\n  }\n\n  /* We checked size + 1 earlier, so here we know we can fit again */\n  if (bt_dev.le.rl_entries > bt_dev.le.rl_size) {\n    bt_dev.le.rl_entries--;\n    keys->keys &= ~BT_KEYS_IRK;\n    bt_keys_foreach(BT_KEYS_IRK, keys_add_id, NULL);\n    goto done;\n  }\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_REM_DEV_FROM_RL, sizeof(*cp));\n  if (!buf) {\n    goto done;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  bt_addr_le_copy(&cp->peer_id_addr, &keys->addr);\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_REM_DEV_FROM_RL, buf, NULL);\n  if (err) {\n    BT_ERR(\"Failed to remove IRK from controller\");\n    goto done;\n  }\n\n  bt_dev.le.rl_entries--;\n\ndone:\n  /* Only re-enable if there are entries to do resolving with */\n  if (bt_dev.le.rl_entries) {\n    addr_res_enable(BT_HCI_ADDR_RES_ENABLE);\n  }\n\n#if defined(CONFIG_BT_OBSERVER)\n  if (scan_enabled) {\n    set_le_scan_enable(BT_HCI_LE_SCAN_ENABLE);\n  }\n#endif /* CONFIG_BT_OBSERVER */\n\n  if (adv_enabled) {\n    set_advertise_enable(true);\n  }\n}\n\nstatic void update_sec_level(struct bt_conn *conn) {\n  if (!conn->encrypt) {\n    conn->sec_level = BT_SECURITY_L1;\n    return;\n  }\n\n  if (conn->le.keys && (conn->le.keys->flags & BT_KEYS_AUTHENTICATED)) {\n    if (conn->le.keys->flags & BT_KEYS_SC && conn->le.keys->enc_size == BT_SMP_MAX_ENC_KEY_SIZE) {\n      conn->sec_level = BT_SECURITY_L4;\n    } else {\n      conn->sec_level = BT_SECURITY_L3;\n    }\n  } else {\n    conn->sec_level = BT_SECURITY_L2;\n  }\n\n  if (conn->required_sec_level > conn->sec_level) {\n    BT_ERR(\"Failed to set required security level\");\n    bt_conn_disconnect(conn, BT_HCI_ERR_AUTH_FAIL);\n  }\n}\n#endif /* CONFIG_BT_SMP */\n\n#if defined(CONFIG_BT_SMP) || defined(CONFIG_BT_BREDR)\nstatic void hci_encrypt_change(struct net_buf *buf) {\n  struct bt_hci_evt_encrypt_change *evt    = (void *)buf->data;\n  u16_t                             handle = sys_le16_to_cpu(evt->handle);\n  struct bt_conn                   *conn;\n\n  BT_DBG(\"status 0x%02x handle %u encrypt 0x%02x\", evt->status, handle, evt->encrypt);\n\n  conn = bt_conn_lookup_handle(handle);\n  if (!conn) {\n    BT_ERR(\"Unable to look up conn with handle %u\", handle);\n    return;\n  }\n\n  if (evt->status) {\n    reset_pairing(conn);\n    bt_l2cap_encrypt_change(conn, evt->status);\n    bt_conn_security_changed(conn, security_err_get(evt->status));\n    bt_conn_unref(conn);\n    return;\n  }\n\n  conn->encrypt = evt->encrypt;\n\n#if defined(CONFIG_BT_SMP)\n  if (conn->type == BT_CONN_TYPE_LE) {\n    /*\n     * we update keys properties only on successful encryption to\n     * avoid losing valid keys if encryption was not successful.\n     *\n     * Update keys with last pairing info for proper sec level\n     * update. This is done only for LE transport, for BR/EDR keys\n     * are updated on HCI 'Link Key Notification Event'\n     */\n    if (conn->encrypt) {\n      bt_smp_update_keys(conn);\n    }\n    update_sec_level(conn);\n  }\n#endif /* CONFIG_BT_SMP */\n#if defined(CONFIG_BT_BREDR)\n  if (conn->type == BT_CONN_TYPE_BR) {\n    if (!update_sec_level_br(conn)) {\n      bt_conn_unref(conn);\n      return;\n    }\n\n    if (IS_ENABLED(CONFIG_BT_SMP)) {\n      /*\n       * Start SMP over BR/EDR if we are pairing and are\n       * master on the link\n       */\n      if (atomic_test_bit(conn->flags, BT_CONN_BR_PAIRING) && conn->role == BT_CONN_ROLE_MASTER) {\n        bt_smp_br_send_pairing_req(conn);\n      }\n    }\n  }\n#endif /* CONFIG_BT_BREDR */\n  reset_pairing(conn);\n\n  bt_l2cap_encrypt_change(conn, evt->status);\n  bt_conn_security_changed(conn, BT_SECURITY_ERR_SUCCESS);\n\n  bt_conn_unref(conn);\n}\n\nstatic void hci_encrypt_key_refresh_complete(struct net_buf *buf) {\n  struct bt_hci_evt_encrypt_key_refresh_complete *evt = (void *)buf->data;\n  struct bt_conn                                 *conn;\n  u16_t                                           handle;\n\n  handle = sys_le16_to_cpu(evt->handle);\n\n  BT_DBG(\"status 0x%02x handle %u\", evt->status, handle);\n\n  conn = bt_conn_lookup_handle(handle);\n  if (!conn) {\n    BT_ERR(\"Unable to look up conn with handle %u\", handle);\n    return;\n  }\n\n  if (evt->status) {\n    reset_pairing(conn);\n    bt_l2cap_encrypt_change(conn, evt->status);\n    bt_conn_security_changed(conn, security_err_get(evt->status));\n    bt_conn_unref(conn);\n    return;\n  }\n\n  /*\n   * Update keys with last pairing info for proper sec level update.\n   * This is done only for LE transport. For BR/EDR transport keys are\n   * updated on HCI 'Link Key Notification Event', therefore update here\n   * only security level based on available keys and encryption state.\n   */\n#if defined(CONFIG_BT_SMP)\n  if (conn->type == BT_CONN_TYPE_LE) {\n    bt_smp_update_keys(conn);\n    update_sec_level(conn);\n  }\n#endif /* CONFIG_BT_SMP */\n#if defined(CONFIG_BT_BREDR)\n  if (conn->type == BT_CONN_TYPE_BR) {\n    if (!update_sec_level_br(conn)) {\n      bt_conn_unref(conn);\n      return;\n    }\n  }\n#endif /* CONFIG_BT_BREDR */\n\n  reset_pairing(conn);\n  bt_l2cap_encrypt_change(conn, evt->status);\n  bt_conn_security_changed(conn, BT_SECURITY_ERR_SUCCESS);\n  bt_conn_unref(conn);\n}\n#endif /* CONFIG_BT_SMP || CONFIG_BT_BREDR */\n\n#if defined(CONFIG_BT_SMP)\nstatic void le_ltk_neg_reply(u16_t handle) {\n  struct bt_hci_cp_le_ltk_req_neg_reply *cp;\n  struct net_buf                        *buf;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_LTK_REQ_NEG_REPLY, sizeof(*cp));\n  if (!buf) {\n    BT_ERR(\"Out of command buffers\");\n\n    return;\n  }\n\n  cp         = net_buf_add(buf, sizeof(*cp));\n  cp->handle = sys_cpu_to_le16(handle);\n\n  bt_hci_cmd_send(BT_HCI_OP_LE_LTK_REQ_NEG_REPLY, buf);\n}\n\nstatic void le_ltk_reply(u16_t handle, u8_t *ltk) {\n  struct bt_hci_cp_le_ltk_req_reply *cp;\n  struct net_buf                    *buf;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_LTK_REQ_REPLY, sizeof(*cp));\n  if (!buf) {\n    BT_ERR(\"Out of command buffers\");\n    return;\n  }\n\n  cp         = net_buf_add(buf, sizeof(*cp));\n  cp->handle = sys_cpu_to_le16(handle);\n  memcpy(cp->ltk, ltk, sizeof(cp->ltk));\n\n  bt_hci_cmd_send(BT_HCI_OP_LE_LTK_REQ_REPLY, buf);\n}\n\nstatic void le_ltk_request(struct net_buf *buf) {\n  struct bt_hci_evt_le_ltk_request *evt = (void *)buf->data;\n  struct bt_conn                   *conn;\n  u16_t                             handle;\n  u8_t                              ltk[16];\n\n  handle = sys_le16_to_cpu(evt->handle);\n\n  BT_DBG(\"handle %u\", handle);\n\n  conn = bt_conn_lookup_handle(handle);\n  if (!conn) {\n    BT_ERR(\"Unable to lookup conn for handle %u\", handle);\n    return;\n  }\n\n  if (bt_smp_request_ltk(conn, evt->rand, evt->ediv, ltk)) {\n    le_ltk_reply(handle, ltk);\n  } else {\n    le_ltk_neg_reply(handle);\n  }\n\n  bt_conn_unref(conn);\n}\n#endif /* CONFIG_BT_SMP */\n\n#if defined(CONFIG_BT_ECC)\nstatic void le_pkey_complete(struct net_buf *buf) {\n  struct bt_hci_evt_le_p256_public_key_complete *evt = (void *)buf->data;\n  struct bt_pub_key_cb                          *cb;\n\n  BT_DBG(\"status: 0x%02x\", evt->status);\n\n  atomic_clear_bit(bt_dev.flags, BT_DEV_PUB_KEY_BUSY);\n\n  if (!evt->status) {\n    memcpy(pub_key, evt->key, 64);\n    atomic_set_bit(bt_dev.flags, BT_DEV_HAS_PUB_KEY);\n  }\n\n  for (cb = pub_key_cb; cb; cb = cb->_next) {\n    cb->func(evt->status ? NULL : pub_key);\n  }\n\n  pub_key_cb = NULL;\n}\n\nstatic void le_dhkey_complete(struct net_buf *buf) {\n  struct bt_hci_evt_le_generate_dhkey_complete *evt = (void *)buf->data;\n\n  BT_DBG(\"status: 0x%02x\", evt->status);\n\n  if (dh_key_cb) {\n    dh_key_cb(evt->status ? NULL : evt->dhkey);\n    dh_key_cb = NULL;\n  }\n}\n#endif /* CONFIG_BT_ECC */\n\nstatic void hci_reset_complete(struct net_buf *buf) {\n  u8_t     status = buf->data[0];\n  atomic_t flags;\n\n  BT_DBG(\"status 0x%02x\", status);\n\n  if (status) {\n    return;\n  }\n\n  scan_dev_found_cb = NULL;\n#if defined(CONFIG_BT_BREDR)\n  discovery_cb            = NULL;\n  discovery_results       = NULL;\n  discovery_results_size  = 0;\n  discovery_results_count = 0;\n#endif /* CONFIG_BT_BREDR */\n\n  flags = (atomic_get(bt_dev.flags) & BT_DEV_PERSISTENT_FLAGS);\n  atomic_set(bt_dev.flags, flags);\n}\n\nstatic void hci_cmd_done(u16_t opcode, u8_t status, struct net_buf *buf) {\n  BT_DBG(\"opcode 0x%04x status 0x%02x buf %p\", opcode, status, buf);\n\n  if (net_buf_pool_get(buf->pool_id) != &hci_cmd_pool) {\n    BT_WARN(\"opcode 0x%04x pool id %u pool %p != &hci_cmd_pool %p\", opcode, buf->pool_id, net_buf_pool_get(buf->pool_id), &hci_cmd_pool);\n    return;\n  }\n\n  if (cmd(buf)->opcode != opcode) {\n    BT_WARN(\"OpCode 0x%04x completed instead of expected 0x%04x\", opcode, cmd(buf)->opcode);\n  }\n\n  if (cmd(buf)->state && !status) {\n    struct cmd_state_set *update = cmd(buf)->state;\n\n    atomic_set_bit_to(update->target, update->bit, update->val);\n  }\n\n#if (BFLB_BT_CO_THREAD)\n  /* If the command was synchronous wake up bt_hci_cmd_send_sync() */\n  if (cmd(buf)->sync || cmd(buf)->sync_state) {\n    cmd(buf)->status = status;\n    if (cmd(buf)->sync_state)\n      cmd(buf)->sync_state = BT_CMD_SYNC_TX_DONE;\n    else\n      k_sem_give(cmd(buf)->sync);\n  }\n#else\n  if (cmd(buf)->sync) {\n    cmd(buf)->status = status;\n    k_sem_give(cmd(buf)->sync);\n  }\n#endif // BFLB_BT_CO_THREAD\n}\n\nstatic void hci_cmd_complete(struct net_buf *buf) {\n  struct bt_hci_evt_cmd_complete *evt;\n  u8_t                            status, ncmd;\n  u16_t                           opcode;\n\n  evt    = net_buf_pull_mem(buf, sizeof(*evt));\n  ncmd   = evt->ncmd;\n  opcode = sys_le16_to_cpu(evt->opcode);\n\n  BT_DBG(\"opcode 0x%04x\", opcode);\n\n  /* All command return parameters have a 1-byte status in the\n   * beginning, so we can safely make this generalization.\n   */\n  status = buf->data[0];\n\n  hci_cmd_done(opcode, status, buf);\n\n  /* Allow next command to be sent */\n  if (ncmd) {\n    k_sem_give(&bt_dev.ncmd_sem);\n  }\n}\n\nstatic void hci_cmd_status(struct net_buf *buf) {\n  struct bt_hci_evt_cmd_status *evt;\n  u16_t                         opcode;\n  u8_t                          ncmd;\n\n  evt    = net_buf_pull_mem(buf, sizeof(*evt));\n  opcode = sys_le16_to_cpu(evt->opcode);\n  ncmd   = evt->ncmd;\n\n  BT_DBG(\"opcode 0x%04x\", opcode);\n\n  hci_cmd_done(opcode, evt->status, buf);\n\n  /* Allow next command to be sent */\n  if (ncmd) {\n    k_sem_give(&bt_dev.ncmd_sem);\n  }\n}\n\n#if defined(CONFIG_BT_OBSERVER)\nstatic int start_le_scan(u8_t scan_type, u16_t interval, u16_t window) {\n  struct bt_hci_cp_le_set_scan_param set_param;\n  struct net_buf                    *buf;\n  int                                err;\n\n  (void)memset(&set_param, 0, sizeof(set_param));\n\n  set_param.scan_type = scan_type;\n\n  /* for the rest parameters apply default values according to\n   *  spec 4.2, vol2, part E, 7.8.10\n   */\n  set_param.interval = sys_cpu_to_le16(interval);\n  set_param.window   = sys_cpu_to_le16(window);\n\n  if (IS_ENABLED(CONFIG_BT_WHITELIST) && atomic_test_bit(bt_dev.flags, BT_DEV_SCAN_WL)) {\n    set_param.filter_policy = BT_HCI_LE_SCAN_FP_USE_WHITELIST;\n  } else {\n    set_param.filter_policy = BT_HCI_LE_SCAN_FP_NO_WHITELIST;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_PRIVACY)) {\n    err = le_set_private_addr(BT_ID_DEFAULT);\n    if (err) {\n      return err;\n    }\n\n    if (BT_FEAT_LE_PRIVACY(bt_dev.le.features)) {\n      set_param.addr_type = BT_HCI_OWN_ADDR_RPA_OR_RANDOM;\n    } else {\n      set_param.addr_type = BT_ADDR_LE_RANDOM;\n    }\n  } else {\n    set_param.addr_type = bt_dev.id_addr[0].type;\n\n    /* Use NRPA unless identity has been explicitly requested\n     * (through Kconfig), or if there is no advertising ongoing.\n     */\n    if (!IS_ENABLED(CONFIG_BT_SCAN_WITH_IDENTITY) && scan_type == BT_HCI_LE_SCAN_ACTIVE && !atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING)) {\n      err = le_set_private_addr(BT_ID_DEFAULT);\n      if (err) {\n        return err;\n      }\n\n      set_param.addr_type = BT_ADDR_LE_RANDOM;\n    } else if (set_param.addr_type == BT_ADDR_LE_RANDOM) {\n      err = set_random_address(&bt_dev.id_addr[0].a);\n      if (err) {\n        return err;\n      }\n    }\n  }\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_SCAN_PARAM, sizeof(set_param));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  net_buf_add_mem(buf, &set_param, sizeof(set_param));\n\n  bt_hci_cmd_send_sync(BT_HCI_OP_LE_SET_SCAN_PARAM, buf, NULL);\n\n  err = set_le_scan_enable(BT_HCI_LE_SCAN_ENABLE);\n  if (err) {\n    return err;\n  }\n\n  atomic_set_bit_to(bt_dev.flags, BT_DEV_ACTIVE_SCAN, scan_type == BT_HCI_LE_SCAN_ACTIVE);\n\n  return 0;\n}\n\n#if defined(CONFIG_BT_STACK_PTS)\nstatic int start_le_scan_with_isrpa(u8_t scan_type, u16_t interval, u16_t window, u8_t addre_type) {\n  struct bt_hci_cp_le_set_scan_param set_param;\n  struct net_buf                    *buf;\n  int                                err = 0;\n\n  memset(&set_param, 0, sizeof(set_param));\n\n  set_param.scan_type = scan_type;\n\n  /* for the rest parameters apply default values according to\n   *  spec 4.2, vol2, part E, 7.8.10\n   */\n  set_param.interval      = sys_cpu_to_le16(interval);\n  set_param.window        = sys_cpu_to_le16(window);\n  set_param.filter_policy = 0x00;\n\n  if (IS_ENABLED(CONFIG_BT_PRIVACY)) {\n    if (addre_type == 1)\n      err = le_set_private_addr(BT_ID_DEFAULT);\n    else if (addre_type == 0)\n      err = le_set_non_resolv_private_addr(BT_ID_DEFAULT);\n    if (err) {\n      return err;\n    }\n\n    if (BT_FEAT_LE_PRIVACY(bt_dev.le.features)) {\n      if (addre_type == 2)\n        set_param.addr_type = BT_ADDR_LE_PUBLIC;\n      if (addre_type == 1)\n        set_param.addr_type = BT_HCI_OWN_ADDR_RPA_OR_RANDOM;\n      else if (addre_type == 0)\n        set_param.addr_type = BT_ADDR_LE_RANDOM;\n    } else {\n      set_param.addr_type = BT_ADDR_LE_RANDOM;\n    }\n  } else {\n    set_param.addr_type = bt_dev.id_addr[0].type;\n\n    /* Use NRPA unless identity has been explicitly requested\n     * (through Kconfig), or if there is no advertising ongoing.\n     */\n    if (!IS_ENABLED(CONFIG_BT_SCAN_WITH_IDENTITY) && scan_type == BT_HCI_LE_SCAN_ACTIVE && !atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING)) {\n      err = le_set_private_addr(BT_ID_DEFAULT);\n      if (err) {\n        return err;\n      }\n\n      set_param.addr_type = BT_ADDR_LE_RANDOM;\n    }\n  }\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_SCAN_PARAM, sizeof(set_param));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  net_buf_add_mem(buf, &set_param, sizeof(set_param));\n\n  bt_hci_cmd_send_sync(BT_HCI_OP_LE_SET_SCAN_PARAM, buf, NULL);\n\n  err = set_le_scan_enable(BT_HCI_LE_SCAN_ENABLE);\n  if (err) {\n    return err;\n  }\n\n  atomic_set_bit_to(bt_dev.flags, BT_DEV_ACTIVE_SCAN, scan_type == BT_HCI_LE_SCAN_ACTIVE);\n\n  return 0;\n}\n\n#endif\n\nint bt_le_scan_update(bool fast_scan) {\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_EXPLICIT_SCAN)) {\n    return 0;\n  }\n\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_SCANNING)) {\n    int err;\n\n    err = set_le_scan_enable(BT_HCI_LE_SCAN_DISABLE);\n    if (err) {\n      return err;\n    }\n  }\n\n  if (IS_ENABLED(CONFIG_BT_CENTRAL)) {\n    u16_t           interval, window;\n    struct bt_conn *conn;\n\n    /* don't restart scan if we have pending connection */\n    conn = bt_conn_lookup_state_le(NULL, BT_CONN_CONNECT);\n    if (conn) {\n      bt_conn_unref(conn);\n      return 0;\n    }\n\n    conn = bt_conn_lookup_state_le(NULL, BT_CONN_CONNECT_SCAN);\n    if (!conn) {\n      return 0;\n    }\n\n    // atomic_set_bit(bt_dev.flags, BT_DEV_SCAN_FILTER_DUP);\n    atomic_clear_bit(bt_dev.flags, BT_DEV_SCAN_FILTER_DUP);\n\n    bt_conn_unref(conn);\n\n    if (fast_scan) {\n      interval = BT_GAP_SCAN_FAST_INTERVAL;\n      window   = BT_GAP_SCAN_FAST_WINDOW;\n    } else {\n      interval = CONFIG_BT_BACKGROUND_SCAN_INTERVAL;\n      window   = CONFIG_BT_BACKGROUND_SCAN_WINDOW;\n    }\n\n    return start_le_scan(BT_HCI_LE_SCAN_PASSIVE, interval, window);\n  }\n\n  return 0;\n}\n\nvoid bt_data_parse(struct net_buf_simple *ad, bool (*func)(struct bt_data *data, void *user_data), void *user_data) {\n  while (ad->len > 1) {\n    struct bt_data data;\n    u8_t           len;\n\n    len = net_buf_simple_pull_u8(ad);\n    if (len == 0U) {\n      /* Early termination */\n      return;\n    }\n\n    if (len > ad->len) {\n      BT_WARN(\"Malformed data\");\n      return;\n    }\n\n    data.type     = net_buf_simple_pull_u8(ad);\n    data.data_len = len - 1;\n    data.data     = ad->data;\n\n    if (!func(&data, user_data)) {\n      return;\n    }\n\n    net_buf_simple_pull(ad, len - 1);\n  }\n}\n\nstatic void le_adv_report(struct net_buf *buf) {\n  u8_t                                   num_reports = net_buf_pull_u8(buf);\n  struct bt_hci_evt_le_advertising_info *info;\n\n  BT_DBG(\"Adv number of reports %u\", num_reports);\n\n  while (num_reports--) {\n    bt_addr_le_t id_addr;\n    s8_t         rssi;\n\n    if (buf->len < sizeof(*info)) {\n      BT_ERR(\"Unexpected end of buffer\");\n      break;\n    }\n\n    info = net_buf_pull_mem(buf, sizeof(*info));\n    rssi = info->data[info->length];\n\n    BT_DBG(\"%s event %u, len %u, rssi %d dBm\", bt_addr_le_str(&info->addr), info->evt_type, info->length, rssi);\n\n    if (info->addr.type == BT_ADDR_LE_PUBLIC_ID || info->addr.type == BT_ADDR_LE_RANDOM_ID) {\n      bt_addr_le_copy(&id_addr, &info->addr);\n      id_addr.type -= BT_ADDR_LE_PUBLIC_ID;\n    } else {\n      bt_addr_le_copy(&id_addr, bt_lookup_id_addr(bt_dev.adv_id, &info->addr));\n    }\n\n    if (scan_dev_found_cb) {\n      struct net_buf_simple_state state;\n\n      net_buf_simple_save(&buf->b, &state);\n\n      buf->len = info->length;\n      scan_dev_found_cb(&id_addr, rssi, info->evt_type, &buf->b);\n\n      net_buf_simple_restore(&buf->b, &state);\n    }\n\n#if defined(CONFIG_BT_CENTRAL)\n    check_pending_conn(&id_addr, &info->addr, info->evt_type);\n#endif /* CONFIG_BT_CENTRAL */\n\n    net_buf_pull(buf, info->length + sizeof(rssi));\n  }\n}\n#endif /* CONFIG_BT_OBSERVER */\n\nint bt_hci_get_conn_handle(const struct bt_conn *conn, u16_t *conn_handle) {\n  if (conn->state != BT_CONN_CONNECTED) {\n    return -ENOTCONN;\n  }\n\n  *conn_handle = conn->handle;\n  return 0;\n}\n\n#if defined(CONFIG_BT_HCI_VS_EVT_USER)\nint bt_hci_register_vnd_evt_cb(bt_hci_vnd_evt_cb_t cb) {\n  hci_vnd_evt_cb = cb;\n  return 0;\n}\n#endif /* CONFIG_BT_HCI_VS_EVT_USER */\n\nstatic void hci_vendor_event(struct net_buf *buf) {\n  bool handled = false;\n\n#if defined(CONFIG_BT_HCI_VS_EVT_USER)\n  if (hci_vnd_evt_cb) {\n    struct net_buf_simple_state state;\n\n    net_buf_simple_save(&buf->b, &state);\n\n    handled = (hci_vnd_evt_cb)(&buf->b);\n\n    net_buf_simple_restore(&buf->b, &state);\n  }\n#endif /* CONFIG_BT_HCI_VS_EVT_USER */\n\n  if (IS_ENABLED(CONFIG_BT_HCI_VS_EXT) && !handled) {\n    /* do nothing at present time */\n    BT_WARN(\"Unhandled vendor-specific event: %s\", bt_hex(buf->data, buf->len));\n  }\n}\n\nstatic const struct event_handler meta_events[] = {\n#if defined(CONFIG_BT_OBSERVER)\n    EVENT_HANDLER(BT_HCI_EVT_LE_ADVERTISING_REPORT, le_adv_report, sizeof(struct bt_hci_evt_le_advertising_report)),\n#endif /* CONFIG_BT_OBSERVER */\n#if defined(CONFIG_BT_CONN)\n    EVENT_HANDLER(BT_HCI_EVT_LE_CONN_COMPLETE, le_legacy_conn_complete, sizeof(struct bt_hci_evt_le_conn_complete)),\n    EVENT_HANDLER(BT_HCI_EVT_LE_ENH_CONN_COMPLETE, le_enh_conn_complete, sizeof(struct bt_hci_evt_le_enh_conn_complete)),\n    EVENT_HANDLER(BT_HCI_EVT_LE_CONN_UPDATE_COMPLETE, le_conn_update_complete, sizeof(struct bt_hci_evt_le_conn_update_complete)),\n    EVENT_HANDLER(BT_HCI_EV_LE_REMOTE_FEAT_COMPLETE, le_remote_feat_complete, sizeof(struct bt_hci_evt_le_remote_feat_complete)),\n    EVENT_HANDLER(BT_HCI_EVT_LE_CONN_PARAM_REQ, le_conn_param_req, sizeof(struct bt_hci_evt_le_conn_param_req)),\n#if defined(CONFIG_BT_DATA_LEN_UPDATE)\n    EVENT_HANDLER(BT_HCI_EVT_LE_DATA_LEN_CHANGE, le_data_len_change, sizeof(struct bt_hci_evt_le_data_len_change)),\n#endif /* CONFIG_BT_DATA_LEN_UPDATE */\n#if defined(CONFIG_BT_PHY_UPDATE)\n    EVENT_HANDLER(BT_HCI_EVT_LE_PHY_UPDATE_COMPLETE, le_phy_update_complete, sizeof(struct bt_hci_evt_le_phy_update_complete)),\n#endif /* CONFIG_BT_PHY_UPDATE */\n#endif /* CONFIG_BT_CONN */\n#if defined(CONFIG_BT_SMP)\n    EVENT_HANDLER(BT_HCI_EVT_LE_LTK_REQUEST, le_ltk_request, sizeof(struct bt_hci_evt_le_ltk_request)),\n#endif /* CONFIG_BT_SMP */\n#if defined(CONFIG_BT_ECC)\n    EVENT_HANDLER(BT_HCI_EVT_LE_P256_PUBLIC_KEY_COMPLETE, le_pkey_complete, sizeof(struct bt_hci_evt_le_p256_public_key_complete)),\n    EVENT_HANDLER(BT_HCI_EVT_LE_GENERATE_DHKEY_COMPLETE, le_dhkey_complete, sizeof(struct bt_hci_evt_le_generate_dhkey_complete)),\n#endif /* CONFIG_BT_SMP */\n};\n\nstatic void hci_le_meta_event(struct net_buf *buf) {\n  struct bt_hci_evt_le_meta_event *evt;\n\n  evt = net_buf_pull_mem(buf, sizeof(*evt));\n\n  BT_DBG(\"subevent 0x%02x\", evt->subevent);\n\n  handle_event(evt->subevent, buf, meta_events, ARRAY_SIZE(meta_events));\n}\n\nstatic const struct event_handler normal_events[] = {\n    EVENT_HANDLER(BT_HCI_EVT_VENDOR, hci_vendor_event, sizeof(struct bt_hci_evt_vs)),\n    EVENT_HANDLER(BT_HCI_EVT_LE_META_EVENT, hci_le_meta_event, sizeof(struct bt_hci_evt_le_meta_event)),\n#if defined(CONFIG_BT_BREDR)\n    EVENT_HANDLER(BT_HCI_EVT_CONN_REQUEST, conn_req, sizeof(struct bt_hci_evt_conn_request)),\n    EVENT_HANDLER(BT_HCI_EVT_CONN_COMPLETE, conn_complete, sizeof(struct bt_hci_evt_conn_complete)),\n    EVENT_HANDLER(BT_HCI_EVT_PIN_CODE_REQ, pin_code_req, sizeof(struct bt_hci_evt_pin_code_req)),\n    EVENT_HANDLER(BT_HCI_EVT_LINK_KEY_NOTIFY, link_key_notify, sizeof(struct bt_hci_evt_link_key_notify)),\n    EVENT_HANDLER(BT_HCI_EVT_LINK_KEY_REQ, link_key_req, sizeof(struct bt_hci_evt_link_key_req)),\n    EVENT_HANDLER(BT_HCI_EVT_IO_CAPA_RESP, io_capa_resp, sizeof(struct bt_hci_evt_io_capa_resp)),\n    EVENT_HANDLER(BT_HCI_EVT_IO_CAPA_REQ, io_capa_req, sizeof(struct bt_hci_evt_io_capa_req)),\n    EVENT_HANDLER(BT_HCI_EVT_SSP_COMPLETE, ssp_complete, sizeof(struct bt_hci_evt_ssp_complete)),\n    EVENT_HANDLER(BT_HCI_EVT_USER_CONFIRM_REQ, user_confirm_req, sizeof(struct bt_hci_evt_user_confirm_req)),\n    EVENT_HANDLER(BT_HCI_EVT_USER_PASSKEY_NOTIFY, user_passkey_notify, sizeof(struct bt_hci_evt_user_passkey_notify)),\n    EVENT_HANDLER(BT_HCI_EVT_USER_PASSKEY_REQ, user_passkey_req, sizeof(struct bt_hci_evt_user_passkey_req)),\n    EVENT_HANDLER(BT_HCI_EVT_INQUIRY_COMPLETE, inquiry_complete, sizeof(struct bt_hci_evt_inquiry_complete)),\n    EVENT_HANDLER(BT_HCI_EVT_INQUIRY_RESULT_WITH_RSSI, inquiry_result_with_rssi, sizeof(struct bt_hci_evt_inquiry_result_with_rssi)),\n    EVENT_HANDLER(BT_HCI_EVT_EXTENDED_INQUIRY_RESULT, extended_inquiry_result, sizeof(struct bt_hci_evt_extended_inquiry_result)),\n    EVENT_HANDLER(BT_HCI_EVT_REMOTE_NAME_REQ_COMPLETE, remote_name_request_complete, sizeof(struct bt_hci_evt_remote_name_req_complete)),\n    EVENT_HANDLER(BT_HCI_EVT_AUTH_COMPLETE, auth_complete, sizeof(struct bt_hci_evt_auth_complete)),\n    EVENT_HANDLER(BT_HCI_EVT_REMOTE_FEATURES, read_remote_features_complete, sizeof(struct bt_hci_evt_remote_features)),\n    EVENT_HANDLER(BT_HCI_EVT_REMOTE_EXT_FEATURES, read_remote_ext_features_complete, sizeof(struct bt_hci_evt_remote_ext_features)),\n    EVENT_HANDLER(BT_HCI_EVT_ROLE_CHANGE, role_change, sizeof(struct bt_hci_evt_role_change)),\n    EVENT_HANDLER(BT_HCI_EVT_SYNC_CONN_COMPLETE, synchronous_conn_complete, sizeof(struct bt_hci_evt_sync_conn_complete)),\n#endif /* CONFIG_BT_BREDR */\n#if defined(CONFIG_BT_CONN)\n    EVENT_HANDLER(BT_HCI_EVT_DISCONN_COMPLETE, hci_disconn_complete, sizeof(struct bt_hci_evt_disconn_complete)),\n#endif /* CONFIG_BT_CONN */\n#if defined(CONFIG_BT_SMP) || defined(CONFIG_BT_BREDR)\n    EVENT_HANDLER(BT_HCI_EVT_ENCRYPT_CHANGE, hci_encrypt_change, sizeof(struct bt_hci_evt_encrypt_change)),\n    EVENT_HANDLER(BT_HCI_EVT_ENCRYPT_KEY_REFRESH_COMPLETE, hci_encrypt_key_refresh_complete, sizeof(struct bt_hci_evt_encrypt_key_refresh_complete)),\n#endif /* CONFIG_BT_SMP || CONFIG_BT_BREDR */\n};\n\nstatic void hci_event(struct net_buf *buf) {\n  struct bt_hci_evt_hdr *hdr;\n\n  BT_ASSERT(buf->len >= sizeof(*hdr));\n\n  hdr = net_buf_pull_mem(buf, sizeof(*hdr));\n  BT_DBG(\"event 0x%02x\", hdr->evt);\n  BT_ASSERT(!bt_hci_evt_is_prio(hdr->evt));\n\n  handle_event(hdr->evt, buf, normal_events, ARRAY_SIZE(normal_events));\n\n  net_buf_unref(buf);\n}\n\n#if (BFLB_BT_CO_THREAD)\nstatic void send_cmd(struct net_buf *tx_buf)\n#else\nstatic void send_cmd(void)\n#endif\n{\n  struct net_buf *buf;\n  int             err;\n\n#if (BFLB_BT_CO_THREAD)\n  if (tx_buf) {\n    buf = tx_buf;\n  } else {\n    buf = net_buf_get(&bt_dev.cmd_tx_queue, K_NO_WAIT);\n  }\n#else\n  /* Get next command */\n  BT_DBG(\"calling net_buf_get\");\n  buf = net_buf_get(&bt_dev.cmd_tx_queue, K_NO_WAIT);\n#endif\n  BT_ASSERT(buf);\n\n  /* Wait until ncmd > 0 */\n  BT_DBG(\"calling sem_take_wait\");\n  k_sem_take(&bt_dev.ncmd_sem, K_FOREVER);\n\n  /* Clear out any existing sent command */\n  if (bt_dev.sent_cmd) {\n    BT_ERR(\"Uncleared pending sent_cmd\");\n    net_buf_unref(bt_dev.sent_cmd);\n    bt_dev.sent_cmd = NULL;\n  }\n\n  bt_dev.sent_cmd = net_buf_ref(buf);\n\n  BT_DBG(\"Sending command 0x%04x (buf %p) to driver\", cmd(buf)->opcode, buf);\n\n  err = bt_send(buf);\n  if (err) {\n    BT_ERR(\"Unable to send to driver (err %d)\", err);\n    k_sem_give(&bt_dev.ncmd_sem);\n    hci_cmd_done(cmd(buf)->opcode, BT_HCI_ERR_UNSPECIFIED, buf);\n    net_buf_unref(bt_dev.sent_cmd);\n    bt_dev.sent_cmd = NULL;\n    net_buf_unref(buf);\n  }\n}\n\n#if (BFLB_BT_CO_THREAD)\nstatic void handle_rx_queue(void) {\n  struct net_buf *buf = NULL;\n  buf                 = net_buf_get(&recv_fifo, K_NO_WAIT);\n  if (buf) {\n    BT_DBG(\"Calling bt_recv(%p)\", buf);\n    bt_recv(buf);\n  }\n}\n#endif\n\n#if (BFLB_BT_CO_THREAD)\nstatic void process_events(struct k_poll_event *ev, int count, int total_evt_array_cnt)\n#else\nstatic void process_events(struct k_poll_event *ev, int count)\n#endif\n{\n  BT_DBG(\"count %d\", count);\n#if (BFLB_BT_CO_THREAD)\n  for (int ii = 0; ii < total_evt_array_cnt; ev++, ii++) {\n    if (ii >= count && ii != total_evt_array_cnt - 1)\n      continue;\n#else\n  for (; count; ev++, count--) {\n#endif\n    BT_DBG(\"ev->state %u\", ev->state);\n    switch (ev->state) {\n    case K_POLL_STATE_SIGNALED:\n      break;\n    case K_POLL_STATE_FIFO_DATA_AVAILABLE:\n      if (ev->tag == BT_EVENT_CMD_TX) {\n#if (BFLB_BT_CO_THREAD)\n        send_cmd(NULL);\n#else\n        send_cmd();\n#endif\n      }\n#if (BFLB_BT_CO_THREAD)\n      else if (ev->tag == BT_EVENT_RX_QUEUE) {\n        handle_rx_queue();\n      } else if (ev->tag == BT_EVENT_WORK_QUEUE) {\n        extern void handle_work_queue(void);\n        handle_work_queue();\n      }\n#endif\n      else if (IS_ENABLED(CONFIG_BT_CONN)) {\n        struct bt_conn *conn;\n\n        if (ev->tag == BT_EVENT_CONN_TX_QUEUE) {\n          conn = CONTAINER_OF(ev->fifo, struct bt_conn, tx_queue);\n#if (BFLB_BT_CO_THREAD)\n          bt_conn_process_tx(conn, NULL);\n#else\n          bt_conn_process_tx(conn);\n#endif\n        }\n      }\n      break;\n    case K_POLL_STATE_NOT_READY:\n      break;\n    default:\n      BT_WARN(\"Unexpected k_poll event state %u\", ev->state);\n      break;\n    }\n  }\n}\n\n#if (BFLB_BT_CO_THREAD)\nstatic void bt_co_thread(void *p1, void *p2, void *p3) {\n  static struct k_poll_event events[EV_COUNT] = {\n\n      [0]            = K_POLL_EVENT_STATIC_INITIALIZER(K_POLL_TYPE_FIFO_DATA_AVAILABLE, K_POLL_MODE_NOTIFY_ONLY, &g_work_queue_main.fifo, BT_EVENT_WORK_QUEUE),\n      [1]            = K_POLL_EVENT_STATIC_INITIALIZER(K_POLL_TYPE_FIFO_DATA_AVAILABLE, K_POLL_MODE_NOTIFY_ONLY, &bt_dev.cmd_tx_queue, BT_EVENT_CMD_TX),\n      [EV_COUNT - 1] = K_POLL_EVENT_STATIC_INITIALIZER(K_POLL_TYPE_FIFO_DATA_AVAILABLE, K_POLL_MODE_NOTIFY_ONLY, &recv_fifo, BT_EVENT_RX_QUEUE),\n  };\n\n  BT_DBG(\"Started\");\n\n  while (1) {\n    int ev_count, err;\n\n    events[0].state            = K_POLL_STATE_NOT_READY;\n    events[1].state            = K_POLL_STATE_NOT_READY;\n    events[EV_COUNT - 1].state = K_POLL_STATE_NOT_READY;\n    ev_count                   = 2;\n\n    if (IS_ENABLED(CONFIG_BT_CONN)) {\n      ev_count += bt_conn_prepare_events(&events[2]);\n    }\n\n    BT_DBG(\"Calling k_poll with %d events\", ev_count);\n\n    err = k_poll(events, ev_count, EV_COUNT, K_FOREVER, NULL);\n\n    BT_ASSERT(err == 0);\n\n    process_events(events, ev_count, EV_COUNT);\n\n    /* Make sure we don't hog the CPU if there's all the time\n     * some ready events.\n     */\n    k_yield();\n  }\n}\n#else\n\n#if defined(BFLB_BLE)\nstatic void hci_tx_thread(void *p1)\n#else\nstatic void hci_tx_thread(void *p1, void *p2, void *p3)\n#endif\n{\n  static struct k_poll_event events[EV_COUNT] = {\n      K_POLL_EVENT_STATIC_INITIALIZER(K_POLL_TYPE_FIFO_DATA_AVAILABLE, K_POLL_MODE_NOTIFY_ONLY, &bt_dev.cmd_tx_queue, BT_EVENT_CMD_TX),\n  };\n\n  BT_DBG(\"Started\");\n\n  while (1) {\n    int ev_count, err;\n\n    events[0].state = K_POLL_STATE_NOT_READY;\n    ev_count        = 1;\n\n    if (IS_ENABLED(CONFIG_BT_CONN)) {\n      ev_count += bt_conn_prepare_events(&events[1]);\n    }\n\n    BT_DBG(\"Calling k_poll with %d events\", ev_count);\n\n    err = k_poll(events, ev_count, K_FOREVER);\n    BT_ASSERT(err == 0);\n\n    process_events(events, ev_count);\n\n    /* Make sure we don't hog the CPU if there's all the time\n     * some ready events.\n     */\n    k_yield();\n  }\n}\n#endif // BFLB_BT_CO_THREAD\n\nstatic void read_local_ver_complete(struct net_buf *buf) {\n  struct bt_hci_rp_read_local_version_info *rp = (void *)buf->data;\n\n  BT_DBG(\"status 0x%02x\", rp->status);\n\n  bt_dev.hci_version    = rp->hci_version;\n  bt_dev.hci_revision   = sys_le16_to_cpu(rp->hci_revision);\n  bt_dev.lmp_version    = rp->lmp_version;\n  bt_dev.lmp_subversion = sys_le16_to_cpu(rp->lmp_subversion);\n  bt_dev.manufacturer   = sys_le16_to_cpu(rp->manufacturer);\n}\n\nstatic void read_bdaddr_complete(struct net_buf *buf) {\n  struct bt_hci_rp_read_bd_addr *rp = (void *)buf->data;\n\n  BT_DBG(\"status 0x%02x\", rp->status);\n\n  if (!bt_addr_cmp(&rp->bdaddr, BT_ADDR_ANY) || !bt_addr_cmp(&rp->bdaddr, BT_ADDR_NONE)) {\n    BT_DBG(\"Controller has no public address\");\n    return;\n  }\n\n  bt_addr_copy(&bt_dev.id_addr[0].a, &rp->bdaddr);\n  bt_dev.id_addr[0].type = BT_ADDR_LE_PUBLIC;\n  bt_dev.id_count        = 1U;\n}\n\nstatic void read_le_features_complete(struct net_buf *buf) {\n  struct bt_hci_rp_le_read_local_features *rp = (void *)buf->data;\n\n  BT_DBG(\"status 0x%02x\", rp->status);\n\n  memcpy(bt_dev.le.features, rp->features, sizeof(bt_dev.le.features));\n}\n\n#if defined(CONFIG_BT_BREDR)\nstatic void read_buffer_size_complete(struct net_buf *buf) {\n  struct bt_hci_rp_read_buffer_size *rp = (void *)buf->data;\n  u16_t                              pkts;\n\n  BT_DBG(\"status 0x%02x\", rp->status);\n\n  bt_dev.br.mtu = sys_le16_to_cpu(rp->acl_max_len);\n  pkts          = sys_le16_to_cpu(rp->acl_max_num);\n\n  BT_DBG(\"ACL BR/EDR buffers: pkts %u mtu %u\", pkts, bt_dev.br.mtu);\n\n  k_sem_init(&bt_dev.br.pkts, pkts, pkts);\n}\n#elif defined(CONFIG_BT_CONN)\nstatic void read_buffer_size_complete(struct net_buf *buf) {\n  struct bt_hci_rp_read_buffer_size *rp = (void *)buf->data;\n  u16_t                              pkts;\n\n  BT_DBG(\"status 0x%02x\", rp->status);\n\n  /* If LE-side has buffers we can ignore the BR/EDR values */\n  if (bt_dev.le.mtu) {\n    return;\n  }\n\n  bt_dev.le.mtu = sys_le16_to_cpu(rp->acl_max_len);\n  pkts          = sys_le16_to_cpu(rp->acl_max_num);\n\n  BT_DBG(\"ACL BR/EDR buffers: pkts %u mtu %u\", pkts, bt_dev.le.mtu);\n\n  k_sem_init(&bt_dev.le.pkts, pkts, pkts);\n}\n#endif\n\n#if defined(CONFIG_BT_CONN)\nstatic void le_read_buffer_size_complete(struct net_buf *buf) {\n  struct bt_hci_rp_le_read_buffer_size *rp = (void *)buf->data;\n\n  BT_DBG(\"status 0x%02x\", rp->status);\n\n  bt_dev.le.mtu = sys_le16_to_cpu(rp->le_max_len);\n  if (!bt_dev.le.mtu) {\n    return;\n  }\n\n  BT_DBG(\"ACL LE buffers: pkts %u mtu %u\", rp->le_max_num, bt_dev.le.mtu);\n\n  k_sem_init(&bt_dev.le.pkts, rp->le_max_num, rp->le_max_num);\n}\n#endif\n\nstatic void read_supported_commands_complete(struct net_buf *buf) {\n  struct bt_hci_rp_read_supported_commands *rp = (void *)buf->data;\n\n  BT_DBG(\"status 0x%02x\", rp->status);\n\n  memcpy(bt_dev.supported_commands, rp->commands, sizeof(bt_dev.supported_commands));\n\n  /*\n   * Report \"LE Read Local P-256 Public Key\" and \"LE Generate DH Key\" as\n   * supported if TinyCrypt ECC is used for emulation.\n   */\n  if (IS_ENABLED(CONFIG_BT_TINYCRYPT_ECC)) {\n    bt_dev.supported_commands[34] |= 0x02;\n    bt_dev.supported_commands[34] |= 0x04;\n  }\n}\n\nstatic void read_local_features_complete(struct net_buf *buf) {\n  struct bt_hci_rp_read_local_features *rp = (void *)buf->data;\n\n  BT_DBG(\"status 0x%02x\", rp->status);\n\n  memcpy(bt_dev.features[0], rp->features, sizeof(bt_dev.features[0]));\n}\n\nstatic void le_read_supp_states_complete(struct net_buf *buf) {\n  struct bt_hci_rp_le_read_supp_states *rp = (void *)buf->data;\n\n  BT_DBG(\"status 0x%02x\", rp->status);\n\n  bt_dev.le.states = sys_get_le64(rp->le_states);\n}\n\n#if defined(CONFIG_BT_SMP)\nstatic void le_read_resolving_list_size_complete(struct net_buf *buf) {\n  struct bt_hci_rp_le_read_rl_size *rp = (void *)buf->data;\n\n  BT_DBG(\"Resolving List size %u\", rp->rl_size);\n\n  bt_dev.le.rl_size = rp->rl_size;\n}\n#endif /* defined(CONFIG_BT_SMP) */\n\n#if defined(CONFIG_BT_WHITELIST)\nstatic void le_read_wl_size_complete(struct net_buf *buf) {\n  struct bt_hci_rp_le_read_wl_size *rp = (struct bt_hci_rp_le_read_wl_size *)buf->data;\n\n  BT_DBG(\"Whitelist size %u\", rp->wl_size);\n\n  bt_dev.le.wl_size = rp->wl_size;\n}\n#endif\n\nstatic int common_init(void) {\n  struct net_buf *rsp;\n  int             err;\n\n  if (!(bt_dev.drv->quirks & BT_QUIRK_NO_RESET)) {\n    /* Send HCI_RESET */\n    err = bt_hci_cmd_send_sync(BT_HCI_OP_RESET, NULL, &rsp);\n    if (err) {\n      return err;\n    }\n    hci_reset_complete(rsp);\n    net_buf_unref(rsp);\n  }\n\n  /* Read Local Supported Features */\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_READ_LOCAL_FEATURES, NULL, &rsp);\n  if (err) {\n    return err;\n  }\n  read_local_features_complete(rsp);\n  net_buf_unref(rsp);\n\n  /* Read Local Version Information */\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_READ_LOCAL_VERSION_INFO, NULL, &rsp);\n  if (err) {\n    return err;\n  }\n  read_local_ver_complete(rsp);\n  net_buf_unref(rsp);\n\n  /* Read Bluetooth Address */\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_USER_ID_ADDR)) {\n    err = bt_hci_cmd_send_sync(BT_HCI_OP_READ_BD_ADDR, NULL, &rsp);\n    if (err) {\n      return err;\n    }\n    read_bdaddr_complete(rsp);\n    net_buf_unref(rsp);\n  }\n\n  /* Read Local Supported Commands */\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_READ_SUPPORTED_COMMANDS, NULL, &rsp);\n  if (err) {\n    return err;\n  }\n  read_supported_commands_complete(rsp);\n  net_buf_unref(rsp);\n\n  if (IS_ENABLED(CONFIG_BT_HOST_CRYPTO)) {\n    /* Initialize the PRNG so that it is safe to use it later\n     * on in the initialization process.\n     */\n    err = prng_init();\n    if (err) {\n      return err;\n    }\n  }\n\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\n  err = set_flow_control();\n  if (err) {\n    return err;\n  }\n#endif /* CONFIG_BT_HCI_ACL_FLOW_CONTROL */\n\n  return 0;\n}\n\nstatic int le_set_event_mask(void) {\n  struct bt_hci_cp_le_set_event_mask *cp_mask;\n  struct net_buf                     *buf;\n  u64_t                               mask = 0U;\n\n  /* Set LE event mask */\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_EVENT_MASK, sizeof(*cp_mask));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp_mask = net_buf_add(buf, sizeof(*cp_mask));\n\n  mask |= BT_EVT_MASK_LE_ADVERTISING_REPORT;\n\n  if (IS_ENABLED(CONFIG_BT_CONN)) {\n    if (IS_ENABLED(CONFIG_BT_SMP) && BT_FEAT_LE_PRIVACY(bt_dev.le.features)) {\n      mask |= BT_EVT_MASK_LE_ENH_CONN_COMPLETE;\n    } else {\n      mask |= BT_EVT_MASK_LE_CONN_COMPLETE;\n    }\n\n    mask |= BT_EVT_MASK_LE_CONN_UPDATE_COMPLETE;\n    mask |= BT_EVT_MASK_LE_REMOTE_FEAT_COMPLETE;\n\n    if (BT_FEAT_LE_CONN_PARAM_REQ_PROC(bt_dev.le.features)) {\n      mask |= BT_EVT_MASK_LE_CONN_PARAM_REQ;\n    }\n\n    if (IS_ENABLED(CONFIG_BT_DATA_LEN_UPDATE) && BT_FEAT_LE_DLE(bt_dev.le.features)) {\n      mask |= BT_EVT_MASK_LE_DATA_LEN_CHANGE;\n    }\n\n    if (IS_ENABLED(CONFIG_BT_PHY_UPDATE) && (BT_FEAT_LE_PHY_2M(bt_dev.le.features) || BT_FEAT_LE_PHY_CODED(bt_dev.le.features))) {\n      mask |= BT_EVT_MASK_LE_PHY_UPDATE_COMPLETE;\n    }\n  }\n\n  if (IS_ENABLED(CONFIG_BT_SMP) && BT_FEAT_LE_ENCR(bt_dev.le.features)) {\n    mask |= BT_EVT_MASK_LE_LTK_REQUEST;\n  }\n\n  /*\n   * If \"LE Read Local P-256 Public Key\" and \"LE Generate DH Key\" are\n   * supported we need to enable events generated by those commands.\n   */\n  if (IS_ENABLED(CONFIG_BT_ECC) && (BT_CMD_TEST(bt_dev.supported_commands, 34, 1)) && (BT_CMD_TEST(bt_dev.supported_commands, 34, 2))) {\n    mask |= BT_EVT_MASK_LE_P256_PUBLIC_KEY_COMPLETE;\n    mask |= BT_EVT_MASK_LE_GENERATE_DHKEY_COMPLETE;\n  }\n\n  sys_put_le64(mask, cp_mask->events);\n  return bt_hci_cmd_send_sync(BT_HCI_OP_LE_SET_EVENT_MASK, buf, NULL);\n}\n\nstatic int le_init(void) {\n  struct bt_hci_cp_write_le_host_supp *cp_le;\n  struct net_buf                      *buf, *rsp;\n  int                                  err;\n\n  /* For now we only support LE capable controllers */\n  if (!BT_FEAT_LE(bt_dev.features)) {\n    BT_ERR(\"Non-LE capable controller detected!\");\n    return -ENODEV;\n  }\n\n  /* Read Low Energy Supported Features */\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_READ_LOCAL_FEATURES, NULL, &rsp);\n  if (err) {\n    return err;\n  }\n  read_le_features_complete(rsp);\n  net_buf_unref(rsp);\n\n#if defined(CONFIG_BT_CONN)\n  /* Read LE Buffer Size */\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_READ_BUFFER_SIZE, NULL, &rsp);\n  if (err) {\n    return err;\n  }\n  le_read_buffer_size_complete(rsp);\n  net_buf_unref(rsp);\n#endif\n\n  if (BT_FEAT_BREDR(bt_dev.features)) {\n    buf = bt_hci_cmd_create(BT_HCI_OP_LE_WRITE_LE_HOST_SUPP, sizeof(*cp_le));\n    if (!buf) {\n      return -ENOBUFS;\n    }\n\n    cp_le = net_buf_add(buf, sizeof(*cp_le));\n\n    /* Explicitly enable LE for dual-mode controllers */\n    cp_le->le    = 0x01;\n    cp_le->simul = 0x00;\n    err          = bt_hci_cmd_send_sync(BT_HCI_OP_LE_WRITE_LE_HOST_SUPP, buf, NULL);\n    if (err) {\n      return err;\n    }\n  }\n\n  /* Read LE Supported States */\n  if (BT_CMD_LE_STATES(bt_dev.supported_commands)) {\n    err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_READ_SUPP_STATES, NULL, &rsp);\n    if (err) {\n      return err;\n    }\n    le_read_supp_states_complete(rsp);\n    net_buf_unref(rsp);\n  }\n\n  if (IS_ENABLED(CONFIG_BT_CONN) && IS_ENABLED(CONFIG_BT_DATA_LEN_UPDATE) && BT_FEAT_LE_DLE(bt_dev.le.features)) {\n    struct bt_hci_cp_le_write_default_data_len *cp;\n    struct bt_hci_rp_le_read_max_data_len      *rp;\n    u16_t                                       tx_octets, tx_time;\n\n    err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_READ_MAX_DATA_LEN, NULL, &rsp);\n    if (err) {\n      return err;\n    }\n\n    rp        = (void *)rsp->data;\n    tx_octets = sys_le16_to_cpu(rp->max_tx_octets);\n    tx_time   = sys_le16_to_cpu(rp->max_tx_time);\n    net_buf_unref(rsp);\n\n    buf = bt_hci_cmd_create(BT_HCI_OP_LE_WRITE_DEFAULT_DATA_LEN, sizeof(*cp));\n    if (!buf) {\n      return -ENOBUFS;\n    }\n\n    cp                = net_buf_add(buf, sizeof(*cp));\n    cp->max_tx_octets = sys_cpu_to_le16(tx_octets);\n    cp->max_tx_time   = sys_cpu_to_le16(tx_time);\n\n    err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_WRITE_DEFAULT_DATA_LEN, buf, NULL);\n    if (err) {\n      return err;\n    }\n  }\n\n#if defined(CONFIG_BT_SMP)\n  if (BT_FEAT_LE_PRIVACY(bt_dev.le.features)) {\n#if defined(CONFIG_BT_PRIVACY)\n    struct bt_hci_cp_le_set_rpa_timeout *cp;\n\n    buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_RPA_TIMEOUT, sizeof(*cp));\n    if (!buf) {\n      return -ENOBUFS;\n    }\n\n    cp              = net_buf_add(buf, sizeof(*cp));\n    cp->rpa_timeout = sys_cpu_to_le16(CONFIG_BT_RPA_TIMEOUT);\n    err             = bt_hci_cmd_send_sync(BT_HCI_OP_LE_SET_RPA_TIMEOUT, buf, NULL);\n    if (err) {\n      return err;\n    }\n#endif /* defined(CONFIG_BT_PRIVACY) */\n\n    err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_READ_RL_SIZE, NULL, &rsp);\n    if (err) {\n      return err;\n    }\n    le_read_resolving_list_size_complete(rsp);\n    net_buf_unref(rsp);\n  }\n#endif\n\n#if defined(CONFIG_BT_WHITELIST)\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_READ_WL_SIZE, NULL, &rsp);\n  if (err) {\n    return err;\n  }\n\n  le_read_wl_size_complete(rsp);\n  net_buf_unref(rsp);\n#endif /* defined(CONFIG_BT_WHITELIST) */\n\n  return le_set_event_mask();\n}\n\n#if defined(CONFIG_BT_BREDR)\nstatic int read_ext_features(void) {\n  int i;\n\n  /* Read Local Supported Extended Features */\n  for (i = 1; i < LMP_FEAT_PAGES_COUNT; i++) {\n    struct bt_hci_cp_read_local_ext_features *cp;\n    struct bt_hci_rp_read_local_ext_features *rp;\n    struct net_buf                           *buf, *rsp;\n    int                                       err;\n\n    buf = bt_hci_cmd_create(BT_HCI_OP_READ_LOCAL_EXT_FEATURES, sizeof(*cp));\n    if (!buf) {\n      return -ENOBUFS;\n    }\n\n    cp       = net_buf_add(buf, sizeof(*cp));\n    cp->page = i;\n\n    err = bt_hci_cmd_send_sync(BT_HCI_OP_READ_LOCAL_EXT_FEATURES, buf, &rsp);\n    if (err) {\n      return err;\n    }\n\n    rp = (void *)rsp->data;\n\n    memcpy(&bt_dev.features[i], rp->ext_features, sizeof(bt_dev.features[i]));\n\n    if (rp->max_page <= i) {\n      net_buf_unref(rsp);\n      break;\n    }\n\n    net_buf_unref(rsp);\n  }\n\n  return 0;\n}\n\nvoid device_supported_pkt_type(void) {\n  /* Device supported features and sco packet types */\n  if (BT_FEAT_HV2_PKT(bt_dev.features)) {\n    bt_dev.br.esco_pkt_type |= (HCI_PKT_TYPE_ESCO_HV2);\n  }\n\n  if (BT_FEAT_HV3_PKT(bt_dev.features)) {\n    bt_dev.br.esco_pkt_type |= (HCI_PKT_TYPE_ESCO_HV3);\n  }\n\n  if (BT_FEAT_LMP_ESCO_CAPABLE(bt_dev.features)) {\n    bt_dev.br.esco_pkt_type |= (HCI_PKT_TYPE_ESCO_EV3);\n  }\n\n  if (BT_FEAT_EV4_PKT(bt_dev.features)) {\n    bt_dev.br.esco_pkt_type |= (HCI_PKT_TYPE_ESCO_EV4);\n  }\n\n  if (BT_FEAT_EV5_PKT(bt_dev.features)) {\n    bt_dev.br.esco_pkt_type |= (HCI_PKT_TYPE_ESCO_EV5);\n  }\n\n  if (BT_FEAT_2EV3_PKT(bt_dev.features)) {\n    bt_dev.br.esco_pkt_type |= (HCI_PKT_TYPE_ESCO_2EV3);\n  }\n\n  if (BT_FEAT_3EV3_PKT(bt_dev.features)) {\n    bt_dev.br.esco_pkt_type |= (HCI_PKT_TYPE_ESCO_3EV3);\n  }\n\n  if (BT_FEAT_3SLOT_PKT(bt_dev.features)) {\n    bt_dev.br.esco_pkt_type |= (HCI_PKT_TYPE_ESCO_2EV5 | HCI_PKT_TYPE_ESCO_3EV5);\n  }\n}\n\nstatic int br_init(void) {\n  struct net_buf                               *buf;\n  struct bt_hci_cp_write_ssp_mode              *ssp_cp;\n  struct bt_hci_cp_write_class_of_device       *cod_cp;\n  struct bt_hci_cp_write_inquiry_scan_activity *inq_scan_act_cp;\n  struct bt_hci_cp_write_inquiry_scan_type     *inq_scan_cp;\n  struct bt_hci_cp_write_page_scan_type        *page_scan_cp;\n  struct bt_hci_cp_write_inquiry_mode          *inq_cp;\n  struct bt_hci_write_local_name               *name_cp;\n  int                                           err;\n\n  /* Read extended local features */\n  if (BT_FEAT_EXT_FEATURES(bt_dev.features)) {\n    err = read_ext_features();\n    if (err) {\n      return err;\n    }\n  }\n\n  /* Add local supported packet types to bt_dev */\n  device_supported_pkt_type();\n\n  /* Get BR/EDR buffer size */\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_READ_BUFFER_SIZE, NULL, &buf);\n  if (err) {\n    return err;\n  }\n\n  read_buffer_size_complete(buf);\n  net_buf_unref(buf);\n\n  /* Set SSP mode */\n  buf = bt_hci_cmd_create(BT_HCI_OP_WRITE_SSP_MODE, sizeof(*ssp_cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  ssp_cp       = net_buf_add(buf, sizeof(*ssp_cp));\n  ssp_cp->mode = 0x01;\n  err          = bt_hci_cmd_send_sync(BT_HCI_OP_WRITE_SSP_MODE, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  /* Write Class of Device */\n  buf = bt_hci_cmd_create(BT_HCI_OP_WRITE_CLASS_OF_DEVICE, sizeof(*cod_cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cod_cp     = net_buf_add(buf, sizeof(*cod_cp));\n  u8_t cd[3] = {0x14, 0x04, 0x24};\n  memcpy(cod_cp->cod, cd, 3);\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_WRITE_CLASS_OF_DEVICE, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  /* Write Inquiry Scan Activity */\n  buf = bt_hci_cmd_create(BT_HCI_OP_WRITE_INQUIRY_SCAN_ACTIVITY, sizeof(*inq_scan_act_cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  inq_scan_act_cp           = net_buf_add(buf, sizeof(*inq_scan_act_cp));\n  inq_scan_act_cp->interval = 0x0400;\n  inq_scan_act_cp->window   = 0x0012;\n  err                       = bt_hci_cmd_send_sync(BT_HCI_OP_WRITE_INQUIRY_SCAN_ACTIVITY, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  /* Write Inquiry Scan type with Interlaced */\n  buf = bt_hci_cmd_create(BT_HCI_OP_WRITE_INQUIRY_SCAN_TYPE, sizeof(*inq_scan_cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  inq_scan_cp       = net_buf_add(buf, sizeof(*inq_scan_cp));\n  inq_scan_cp->type = 0x01;\n  err               = bt_hci_cmd_send_sync(BT_HCI_OP_WRITE_INQUIRY_SCAN_TYPE, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  /* Write Page Scan type with Interlaced */\n  buf = bt_hci_cmd_create(BT_HCI_OP_WRITE_PAGE_SCAN_TYPE, sizeof(*page_scan_cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  page_scan_cp       = net_buf_add(buf, sizeof(*page_scan_cp));\n  page_scan_cp->type = 0x01;\n  err                = bt_hci_cmd_send_sync(BT_HCI_OP_WRITE_PAGE_SCAN_TYPE, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  /* Enable Inquiry results with RSSI or extended Inquiry */\n  buf = bt_hci_cmd_create(BT_HCI_OP_WRITE_INQUIRY_MODE, sizeof(*inq_cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  inq_cp       = net_buf_add(buf, sizeof(*inq_cp));\n  inq_cp->mode = 0x02;\n  err          = bt_hci_cmd_send_sync(BT_HCI_OP_WRITE_INQUIRY_MODE, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  /* Set local name */\n  buf = bt_hci_cmd_create(BT_HCI_OP_WRITE_LOCAL_NAME, sizeof(*name_cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  name_cp = net_buf_add(buf, sizeof(*name_cp));\n  strncpy((char *)name_cp->local_name, CONFIG_BT_DEVICE_NAME, sizeof(name_cp->local_name));\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_WRITE_LOCAL_NAME, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  /* Set page timeout*/\n  buf = bt_hci_cmd_create(BT_HCI_OP_WRITE_PAGE_TIMEOUT, sizeof(u16_t));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  net_buf_add_le16(buf, CONFIG_BT_PAGE_TIMEOUT);\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_WRITE_PAGE_TIMEOUT, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  /* Enable BR/EDR SC if supported */\n  if (BT_FEAT_SC(bt_dev.features)) {\n    struct bt_hci_cp_write_sc_host_supp *sc_cp;\n\n    buf = bt_hci_cmd_create(BT_HCI_OP_WRITE_SC_HOST_SUPP, sizeof(*sc_cp));\n    if (!buf) {\n      return -ENOBUFS;\n    }\n\n    sc_cp             = net_buf_add(buf, sizeof(*sc_cp));\n    sc_cp->sc_support = 0x01;\n\n    err = bt_hci_cmd_send_sync(BT_HCI_OP_WRITE_SC_HOST_SUPP, buf, NULL);\n    if (err) {\n      return err;\n    }\n  }\n\n  return 0;\n}\n#else\nstatic int br_init(void) {\n#if defined(CONFIG_BT_CONN)\n  struct net_buf *rsp;\n  int             err;\n\n  if (bt_dev.le.mtu) {\n    return 0;\n  }\n\n  /* Use BR/EDR buffer size if LE reports zero buffers */\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_READ_BUFFER_SIZE, NULL, &rsp);\n  if (err) {\n    return err;\n  }\n\n  read_buffer_size_complete(rsp);\n  net_buf_unref(rsp);\n#endif /* CONFIG_BT_CONN */\n\n  return 0;\n}\n#endif\n\nstatic int set_event_mask(void) {\n  struct bt_hci_cp_set_event_mask *ev;\n  struct net_buf                  *buf;\n  u64_t                            mask = 0U;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_SET_EVENT_MASK, sizeof(*ev));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  ev = net_buf_add(buf, sizeof(*ev));\n\n  if (IS_ENABLED(CONFIG_BT_BREDR)) {\n    /* Since we require LE support, we can count on a\n     * Bluetooth 4.0 feature set\n     */\n    mask |= BT_EVT_MASK_INQUIRY_COMPLETE;\n    mask |= BT_EVT_MASK_CONN_COMPLETE;\n    mask |= BT_EVT_MASK_CONN_REQUEST;\n    mask |= BT_EVT_MASK_AUTH_COMPLETE;\n    mask |= BT_EVT_MASK_REMOTE_NAME_REQ_COMPLETE;\n    mask |= BT_EVT_MASK_REMOTE_FEATURES;\n    mask |= BT_EVT_MASK_ROLE_CHANGE;\n    mask |= BT_EVT_MASK_PIN_CODE_REQ;\n    mask |= BT_EVT_MASK_LINK_KEY_REQ;\n    mask |= BT_EVT_MASK_LINK_KEY_NOTIFY;\n    mask |= BT_EVT_MASK_INQUIRY_RESULT_WITH_RSSI;\n    mask |= BT_EVT_MASK_REMOTE_EXT_FEATURES;\n    mask |= BT_EVT_MASK_SYNC_CONN_COMPLETE;\n    mask |= BT_EVT_MASK_EXTENDED_INQUIRY_RESULT;\n    mask |= BT_EVT_MASK_IO_CAPA_REQ;\n    mask |= BT_EVT_MASK_IO_CAPA_RESP;\n    mask |= BT_EVT_MASK_USER_CONFIRM_REQ;\n    mask |= BT_EVT_MASK_USER_PASSKEY_REQ;\n    mask |= BT_EVT_MASK_SSP_COMPLETE;\n    mask |= BT_EVT_MASK_USER_PASSKEY_NOTIFY;\n  }\n\n  mask |= BT_EVT_MASK_HARDWARE_ERROR;\n  mask |= BT_EVT_MASK_DATA_BUFFER_OVERFLOW;\n  mask |= BT_EVT_MASK_LE_META_EVENT;\n\n  if (IS_ENABLED(CONFIG_BT_CONN)) {\n    mask |= BT_EVT_MASK_DISCONN_COMPLETE;\n    mask |= BT_EVT_MASK_REMOTE_VERSION_INFO;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_SMP) && BT_FEAT_LE_ENCR(bt_dev.le.features)) {\n    mask |= BT_EVT_MASK_ENCRYPT_CHANGE;\n    mask |= BT_EVT_MASK_ENCRYPT_KEY_REFRESH_COMPLETE;\n  }\n\n  sys_put_le64(mask, ev->events);\n  return bt_hci_cmd_send_sync(BT_HCI_OP_SET_EVENT_MASK, buf, NULL);\n}\n\nstatic inline int create_random_addr(bt_addr_le_t *addr) {\n  addr->type = BT_ADDR_LE_RANDOM;\n\n  return bt_rand(addr->a.val, 6);\n}\n\nint bt_addr_le_create_nrpa(bt_addr_le_t *addr) {\n  int err;\n\n  err = create_random_addr(addr);\n  if (err) {\n    return err;\n  }\n\n  BT_ADDR_SET_NRPA(&addr->a);\n\n  return 0;\n}\n\nint bt_addr_le_create_static(bt_addr_le_t *addr) {\n  int err;\n\n  err = create_random_addr(addr);\n  if (err) {\n    return err;\n  }\n\n  BT_ADDR_SET_STATIC(&addr->a);\n\n  return 0;\n}\n\n#if defined(CONFIG_BT_DEBUG)\n#if 0\nstatic const char *ver_str(u8_t ver)\n{\n\tconst char * const str[] = {\n\t\t\"1.0b\", \"1.1\", \"1.2\", \"2.0\", \"2.1\", \"3.0\", \"4.0\", \"4.1\", \"4.2\",\n\t\t\"5.0\", \"5.1\",\n\t};\n\n\tif (ver < ARRAY_SIZE(str)) {\n\t\treturn str[ver];\n\t}\n\n\treturn \"unknown\";\n}\n#endif\n\nstatic void bt_dev_show_info(void) {\n#if 0\n\tint i;\n\n\tBT_INFO(\"Identity%s: %s\", bt_dev.id_count > 1 ? \"[0]\" : \"\",\n\t\tbt_addr_le_str(&bt_dev.id_addr[0]));\n\n\tfor (i = 1; i < bt_dev.id_count; i++) {\n\t\tBT_INFO(\"Identity[%d]: %s\",\n\t\t\ti, bt_addr_le_str(&bt_dev.id_addr[i]));\n\t}\n\n\tBT_INFO(\"HCI: version %s (0x%02x) revision 0x%04x, manufacturer 0x%04x\",\n\t\tver_str(bt_dev.hci_version), bt_dev.hci_version,\n\t\tbt_dev.hci_revision, bt_dev.manufacturer);\n\tBT_INFO(\"LMP: version %s (0x%02x) subver 0x%04x\",\n\t\tver_str(bt_dev.lmp_version), bt_dev.lmp_version,\n\t\tbt_dev.lmp_subversion);\n#endif\n}\n#else\nstatic inline void bt_dev_show_info(void) {}\n#endif /* CONFIG_BT_DEBUG */\n\n#if defined(CONFIG_BT_HCI_VS_EXT)\n#if defined(CONFIG_BT_DEBUG)\nstatic const char *vs_hw_platform(u16_t platform) {\n  static const char *const plat_str[] = {\"reserved\", \"Intel Corporation\", \"Nordic Semiconductor\", \"NXP Semiconductors\"};\n\n  if (platform < ARRAY_SIZE(plat_str)) {\n    return plat_str[platform];\n  }\n\n  return \"unknown\";\n}\n\nstatic const char *vs_hw_variant(u16_t platform, u16_t variant) {\n  static const char *const nordic_str[] = {\"reserved\", \"nRF51x\", \"nRF52x\", \"nRF53x\"};\n\n  if (platform != BT_HCI_VS_HW_PLAT_NORDIC) {\n    return \"unknown\";\n  }\n\n  if (variant < ARRAY_SIZE(nordic_str)) {\n    return nordic_str[variant];\n  }\n\n  return \"unknown\";\n}\n\nstatic const char *vs_fw_variant(u8_t variant) {\n  static const char *const var_str[] = {\n      \"Standard Bluetooth controller\",\n      \"Vendor specific controller\",\n      \"Firmware loader\",\n      \"Rescue image\",\n  };\n\n  if (variant < ARRAY_SIZE(var_str)) {\n    return var_str[variant];\n  }\n\n  return \"unknown\";\n}\n#endif /* CONFIG_BT_DEBUG */\n\nstatic void hci_vs_init(void) {\n  union {\n    struct bt_hci_rp_vs_read_version_info       *info;\n    struct bt_hci_rp_vs_read_supported_commands *cmds;\n    struct bt_hci_rp_vs_read_supported_features *feat;\n  } rp;\n  struct net_buf *rsp;\n  int             err;\n\n  /* If heuristics is enabled, try to guess HCI VS support by looking\n   * at the HCI version and identity address. We haven't tried to set\n   * a static random address yet at this point, so the identity will\n   * either be zeroes or a valid public address.\n   */\n  if (IS_ENABLED(CONFIG_BT_HCI_VS_EXT_DETECT) &&\n      (bt_dev.hci_version < BT_HCI_VERSION_5_0 || (!atomic_test_bit(bt_dev.flags, BT_DEV_USER_ID_ADDR) && bt_addr_le_cmp(&bt_dev.id_addr[0], BT_ADDR_LE_ANY)))) {\n    BT_WARN(\"Controller doesn't seem to support Zephyr vendor HCI\");\n    return;\n  }\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_VS_READ_VERSION_INFO, NULL, &rsp);\n  if (err) {\n    BT_WARN(\"Vendor HCI extensions not available\");\n    return;\n  }\n\n#if defined(CONFIG_BT_DEBUG)\n  rp.info = (void *)rsp->data;\n  BT_INFO(\"HW Platform: %s (0x%04x)\", vs_hw_platform(sys_le16_to_cpu(rp.info->hw_platform)), sys_le16_to_cpu(rp.info->hw_platform));\n  BT_INFO(\"HW Variant: %s (0x%04x)\", vs_hw_variant(sys_le16_to_cpu(rp.info->hw_platform), sys_le16_to_cpu(rp.info->hw_variant)), sys_le16_to_cpu(rp.info->hw_variant));\n  BT_INFO(\"Firmware: %s (0x%02x) Version %u.%u Build %u\", vs_fw_variant(rp.info->fw_variant), rp.info->fw_variant, rp.info->fw_version, sys_le16_to_cpu(rp.info->fw_revision),\n          sys_le32_to_cpu(rp.info->fw_build));\n#endif /* CONFIG_BT_DEBUG */\n\n  net_buf_unref(rsp);\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_VS_READ_SUPPORTED_COMMANDS, NULL, &rsp);\n  if (err) {\n    BT_WARN(\"Failed to read supported vendor features\");\n    return;\n  }\n\n  rp.cmds = (void *)rsp->data;\n  memcpy(bt_dev.vs_commands, rp.cmds->commands, BT_DEV_VS_CMDS_MAX);\n  net_buf_unref(rsp);\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_VS_READ_SUPPORTED_FEATURES, NULL, &rsp);\n  if (err) {\n    BT_WARN(\"Failed to read supported vendor commands\");\n    return;\n  }\n\n  rp.feat = (void *)rsp->data;\n  memcpy(bt_dev.vs_features, rp.feat->features, BT_DEV_VS_FEAT_MAX);\n  net_buf_unref(rsp);\n}\n#endif /* CONFIG_BT_HCI_VS_EXT */\n\nstatic int host_hci_init(void) {\n  int err;\n\n  err = common_init();\n  if (err) {\n    return err;\n  }\n\n  err = le_init();\n  if (err) {\n    return err;\n  }\n\n  if (BT_FEAT_BREDR(bt_dev.features)) {\n    err = br_init();\n    if (err) {\n      return err;\n    }\n  } else if (IS_ENABLED(CONFIG_BT_BREDR)) {\n    BT_ERR(\"Non-BR/EDR controller detected\");\n    return -EIO;\n  }\n\n  err = set_event_mask();\n  if (err) {\n    return err;\n  }\n\n#if defined(CONFIG_BT_HCI_VS_EXT)\n  hci_vs_init();\n#endif\n\n  if (!IS_ENABLED(CONFIG_BT_SETTINGS) && !bt_dev.id_count) {\n    BT_DBG(\"No public address. Trying to set static random.\");\n    err = bt_setup_id_addr();\n    if (err) {\n      BT_ERR(\"Unable to set identity address\");\n      return err;\n    }\n  }\n\n  return 0;\n}\n\nint bt_send(struct net_buf *buf) {\n  BT_DBG(\"buf %p len %u type %u\", buf, buf->len, bt_buf_get_type(buf));\n\n  bt_monitor_send(bt_monitor_opcode(buf), buf->data, buf->len);\n\n  if (IS_ENABLED(CONFIG_BT_TINYCRYPT_ECC)) {\n    return bt_hci_ecc_send(buf);\n  }\n\n  return bt_dev.drv->send(buf);\n}\n\nint bt_recv(struct net_buf *buf) {\n  bt_monitor_send(bt_monitor_opcode(buf), buf->data, buf->len);\n\n  BT_DBG(\"buf %p len %u\", buf, buf->len);\n\n  switch (bt_buf_get_type(buf)) {\n#if defined(CONFIG_BT_CONN)\n  case BT_BUF_ACL_IN:\n#if defined(CONFIG_BT_RECV_IS_RX_THREAD)\n    hci_acl(buf);\n#else\n    net_buf_put(&bt_dev.rx_queue, buf);\n#endif\n    return 0;\n#endif /* BT_CONN */\n  case BT_BUF_EVT:\n#if defined(CONFIG_BT_RECV_IS_RX_THREAD)\n    hci_event(buf);\n#else\n    net_buf_put(&bt_dev.rx_queue, buf);\n#endif\n    return 0;\n  default:\n    BT_ERR(\"Invalid buf type %u\", bt_buf_get_type(buf));\n    net_buf_unref(buf);\n    return -EINVAL;\n  }\n}\n\nstatic const struct event_handler prio_events[] = {\n    EVENT_HANDLER(BT_HCI_EVT_CMD_COMPLETE, hci_cmd_complete, sizeof(struct bt_hci_evt_cmd_complete)),\n    EVENT_HANDLER(BT_HCI_EVT_CMD_STATUS, hci_cmd_status, sizeof(struct bt_hci_evt_cmd_status)),\n#if defined(CONFIG_BT_CONN)\n    EVENT_HANDLER(BT_HCI_EVT_DATA_BUF_OVERFLOW, hci_data_buf_overflow, sizeof(struct bt_hci_evt_data_buf_overflow)),\n    EVENT_HANDLER(BT_HCI_EVT_NUM_COMPLETED_PACKETS, hci_num_completed_packets, sizeof(struct bt_hci_evt_num_completed_packets)),\n#endif /* CONFIG_BT_CONN */\n};\n\nint bt_recv_prio(struct net_buf *buf) {\n  struct bt_hci_evt_hdr *hdr;\n\n  bt_monitor_send(bt_monitor_opcode(buf), buf->data, buf->len);\n\n  BT_ASSERT(bt_buf_get_type(buf) == BT_BUF_EVT);\n  BT_ASSERT(buf->len >= sizeof(*hdr));\n\n  hdr = net_buf_pull_mem(buf, sizeof(*hdr));\n  BT_ASSERT(bt_hci_evt_is_prio(hdr->evt));\n\n  handle_event(hdr->evt, buf, prio_events, ARRAY_SIZE(prio_events));\n\n  net_buf_unref(buf);\n\n  return 0;\n}\n\nint bt_hci_driver_register(const struct bt_hci_driver *drv) {\n  if (bt_dev.drv) {\n    return -EALREADY;\n  }\n\n  if (!drv->open || !drv->send) {\n    return -EINVAL;\n  }\n\n  bt_dev.drv = drv;\n\n  BT_DBG(\"Registered %s\", drv->name ? drv->name : \"\");\n\n  bt_monitor_new_index(BT_MONITOR_TYPE_PRIMARY, drv->bus, BT_ADDR_ANY, drv->name ? drv->name : \"bt0\");\n\n  return 0;\n}\n\n#if defined(CONFIG_BT_PRIVACY)\nstatic int irk_init(void) {\n#if (BFLB_FIXED_IRK)\n  // use fixed irk\n  memset(&bt_dev.irk[0], 0x11, 16);\n  return 0;\n#endif\n#if defined(BFLB_BLE_PATCH_SETTINGS_LOAD)\n  u8_t empty_irk[16];\n  int  err;\n  /*local irk has been loaded from flash in bt_enable, check if irk is null*/\n  memset(empty_irk, 0, 16);\n  if (memcmp(bt_dev.irk[0], empty_irk, 16) != 0)\n    return 0;\n\n  err = bt_rand(&bt_dev.irk[0], 16);\n\n  return err;\n#else\n  if (IS_ENABLED(CONFIG_BT_SETTINGS)) {\n    BT_DBG(\"Expecting settings to handle local IRK\");\n  } else {\n    int err;\n\n    err = bt_rand(&bt_dev.irk[0], 16);\n    if (err) {\n      return err;\n    }\n\n    BT_WARN(\"Using temporary IRK\");\n  }\n\n  return 0;\n#endif\n}\n#endif /* CONFIG_BT_PRIVACY */\nvoid bt_finalize_init(void) {\n  atomic_set_bit(bt_dev.flags, BT_DEV_READY);\n\n  if (IS_ENABLED(CONFIG_BT_OBSERVER)) {\n    bt_le_scan_update(false);\n  }\n\n  bt_dev_show_info();\n}\n\n#if defined(BFLB_HOST_ASSISTANT)\nextern void blhast_init(struct blhast_cb *cb);\n#endif\nstatic int bt_init(void) {\n  int err;\n#if defined(CONFIG_BT_STACK_PTS)\n  u8_t dbg_irk[16];\n#endif\n/*Make sure that freertos is running when set info into flash, because Semaphore is used in ef_set_env*/\n#if defined(BFLB_BLE_PATCH_SETTINGS_LOAD)\n  char empty_name[CONFIG_BT_DEVICE_NAME_MAX];\n  memset(empty_name, 0, CONFIG_BT_DEVICE_NAME_MAX);\n\n  if (!memcmp(bt_dev.name, empty_name, CONFIG_BT_DEVICE_NAME_MAX))\n    bt_set_name(CONFIG_BT_DEVICE_NAME);\n#endif\n\n#if defined(BFLB_BLE)\n  err = bl_onchiphci_interface_init();\n  if (err) {\n    return err;\n  }\n#if defined(BFLB_HOST_ASSISTANT)\n  blhast_init(host_assist_cb);\n#endif\n#endif\n\n  err = host_hci_init();\n  if (err) {\n    return err;\n  }\n  if (IS_ENABLED(CONFIG_BT_CONN)) {\n    err = bt_conn_init();\n    if (err) {\n      return err;\n    }\n  }\n\n#if defined(CONFIG_BT_PRIVACY)\n  err = irk_init();\n  if (err) {\n    return err;\n  }\n#if defined(CONFIG_BT_STACK_PTS)\n  reverse_bytearray(bt_dev.irk[0], dbg_irk, sizeof(dbg_irk));\n  BT_PTS(\"Local IRK %s public identity bdaddr %s\", bt_hex(dbg_irk, 16), bt_addr_str(&(bt_dev.id_addr[0].a)));\n#endif\n\n  k_delayed_work_init(&bt_dev.rpa_update, rpa_timeout);\n#endif\n\n#if defined(CONFIG_BT_SMP)\n#if defined(BFLB_BLE_PATCH_SETTINGS_LOAD)\n#if defined(CFG_SLEEP)\n  if (HBN_Get_Status_Flag() == 0)\n#endif\n  {\n    if (!bt_keys_load())\n      keys_commit();\n  }\n#endif\n#endif // CONFIG_BT_SMP\n  if (IS_ENABLED(CONFIG_BT_SETTINGS)) {\n    if (!bt_dev.id_count) {\n      BT_INFO(\"No ID address. App must call settings_load()\");\n      return 0;\n    }\n\n    atomic_set_bit(bt_dev.flags, BT_DEV_PRESET_ID);\n  }\n\n  bt_finalize_init();\n  return 0;\n}\n\nstatic void init_work(struct k_work *work) {\n  int err;\n\n  err = bt_init();\n  if (ready_cb) {\n    ready_cb(err);\n  }\n}\n\n#if !defined(CONFIG_BT_RECV_IS_RX_THREAD)\nstatic void hci_rx_thread(void) {\n  struct net_buf *buf;\n\n  BT_DBG(\"started\");\n\n  while (1) {\n    BT_DBG(\"calling fifo_get_wait\");\n    buf = net_buf_get(&bt_dev.rx_queue, K_FOREVER);\n\n    BT_DBG(\"buf %p type %u len %u\", buf, bt_buf_get_type(buf), buf->len);\n\n    switch (bt_buf_get_type(buf)) {\n#if defined(CONFIG_BT_CONN)\n    case BT_BUF_ACL_IN:\n      hci_acl(buf);\n      break;\n#endif /* CONFIG_BT_CONN */\n    case BT_BUF_EVT:\n      hci_event(buf);\n      break;\n    default:\n      BT_ERR(\"Unknown buf type %u\", bt_buf_get_type(buf));\n      net_buf_unref(buf);\n      break;\n    }\n\n    /* Make sure we don't hog the CPU if the rx_queue never\n     * gets empty.\n     */\n    k_yield();\n  }\n}\n#endif /* !CONFIG_BT_RECV_IS_RX_THREAD */\n\nint bt_enable(bt_ready_cb_t cb) {\n  int err;\n\n  if (!bt_dev.drv) {\n    BT_ERR(\"No HCI driver registered\");\n    return -ENODEV;\n  }\n\n  if (atomic_test_and_set_bit(bt_dev.flags, BT_DEV_ENABLE)) {\n    return -EALREADY;\n  }\n\n#if defined(BFLB_BLE)\n#if defined(BFLB_DYNAMIC_ALLOC_MEM)\n#if (BFLB_STATIC_ALLOC_MEM)\n  net_buf_init(HCI_CMD, &hci_cmd_pool, CONFIG_BT_HCI_CMD_COUNT, CMD_BUF_SIZE, NULL);\n  net_buf_init(HCI_RX, &hci_rx_pool, CONFIG_BT_RX_BUF_COUNT, BT_BUF_RX_SIZE, NULL);\n#else\n  net_buf_init(&hci_cmd_pool, CONFIG_BT_HCI_CMD_COUNT, CMD_BUF_SIZE, NULL);\n  net_buf_init(&hci_rx_pool, CONFIG_BT_RX_BUF_COUNT, BT_BUF_RX_SIZE, NULL);\n#endif\n#if defined(CONFIG_BT_CONN)\n#if (BFLB_STATIC_ALLOC_MEM)\n  net_buf_init(NUM_COMPLETE, &num_complete_pool, 1, BT_BUF_RX_SIZE, NULL);\n#else\n  net_buf_init(&num_complete_pool, 1, BT_BUF_RX_SIZE, NULL);\n#endif\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\n#if (BFLB_STATIC_ALLOC_MEM)\n  net_buf_init(ACL_IN, &acl_in_pool, CONFIG_BT_ACL_RX_COUNT, ACL_IN_SIZE, report_completed_packet);\n#else\n  net_buf_init(&acl_in_pool, CONFIG_BT_ACL_RX_COUNT, ACL_IN_SIZE, report_completed_packet);\n#endif\n#endif // CONFIG_BT_HCI_ACL_FLOW_CONTROL\n#endif // CONFIG_BT_CONN\n#if defined(CONFIG_BT_DISCARDABLE_BUF_COUNT)\n#if (BFLB_STATIC_ALLOC_MEM)\n  net_buf_init(DISCARDABLE, &discardable_pool, CONFIG_BT_DISCARDABLE_BUF_COUNT, BT_BUF_RX_SIZE, NULL);\n#else\n  net_buf_init(&discardable_pool, CONFIG_BT_DISCARDABLE_BUF_COUNT, BT_BUF_RX_SIZE, NULL);\n#endif\n#endif\n#endif\n\n  k_work_init(&bt_dev.init, init_work);\n#if (BFLB_BT_CO_THREAD)\n  k_fifo_init(&g_work_queue_main.fifo, 20);\n#else\n  k_work_q_start();\n#endif\n#if !defined(CONFIG_BT_WAIT_NOP)\n  k_sem_init(&bt_dev.ncmd_sem, 1, 1);\n#else\n  k_sem_init(&bt_dev.ncmd_sem, 0, 1);\n#endif\n  k_fifo_init(&bt_dev.cmd_tx_queue, 20);\n#if !defined(CONFIG_BT_RECV_IS_RX_THREAD)\n  k_fifo_init(&bt_dev.rx_queue, 20);\n#endif\n\n  k_sem_init(&g_poll_sem, 0, 1);\n#if (BFLB_BT_CO_THREAD)\n  // need to initialize recv_fifo before create bt_co_thread\n  k_fifo_init(&recv_fifo, 20);\n#endif\n#endif\n\n#if defined(BFLB_BLE_PATCH_SETTINGS_LOAD)\n  if (IS_ENABLED(CONFIG_BT_SETTINGS)) {\n#if defined(CFG_SLEEP)\n/* When using eflash_loader upprade firmware and softreset,\n * HBN_Get_Status_Flag() is 0x594c440b. so comment this line. */\n// if( HBN_Get_Status_Flag() == 0)\n#endif\n    bt_local_info_load();\n  }\n#else\n  if (IS_ENABLED(CONFIG_BT_SETTINGS)) {\n    err = bt_settings_init();\n    if (err) {\n      return err;\n    }\n  } else {\n    bt_set_name(CONFIG_BT_DEVICE_NAME);\n  }\n#endif\n\n  ready_cb = cb;\n\n  /* TX thread */\n#if defined(BFLB_BLE)\n#if (BFLB_BT_CO_THREAD)\n  k_thread_create(&co_thread_data, \"bt_co_thread\", CONFIG_BT_CO_STACK_SIZE, bt_co_thread, CONFIG_BT_CO_TASK_PRIO);\n#else\n  k_thread_create(&tx_thread_data, \"hci_tx_thread\", CONFIG_BT_HCI_TX_STACK_SIZE, hci_tx_thread, CONFIG_BT_HCI_TX_PRIO);\n#endif\n#else\n  k_thread_create(&tx_thread_data, tx_thread_stack, K_THREAD_STACK_SIZEOF(tx_thread_stack), hci_tx_thread, NULL, NULL, NULL, K_PRIO_COOP(CONFIG_BT_HCI_TX_PRIO), 0, K_NO_WAIT);\n  k_thread_name_set(&tx_thread_data, \"BT TX\");\n#endif\n\n#if !defined(CONFIG_BT_RECV_IS_RX_THREAD)\n  /* RX thread */\n#if defined(BFLB_BLE)\n  k_thread_create(&rx_thread_data, \"hci_rx_thread\", CONFIG_BT_HCI_RX_STACK_SIZE /*K_THREAD_STACK_SIZEOF(rx_thread_stack)*/, (k_thread_entry_t)hci_rx_thread, CONFIG_BT_RX_PRIO);\n#else\n  k_thread_create(&rx_thread_data, rx_thread_stack, K_THREAD_STACK_SIZEOF(rx_thread_stack), (k_thread_entry_t)hci_rx_thread, NULL, NULL, NULL, K_PRIO_COOP(CONFIG_BT_RX_PRIO), 0, K_NO_WAIT);\n  k_thread_name_set(&rx_thread_data, \"BT RX\");\n#endif // BFLB_BLE\n#endif\n\n  if (IS_ENABLED(CONFIG_BT_TINYCRYPT_ECC)) {\n    bt_hci_ecc_init();\n  }\n\n  err = bt_dev.drv->open();\n  if (err) {\n    BT_ERR(\"HCI driver open failed (%d)\", err);\n    return err;\n  }\n\n#if !defined(BFLB_BLE)\n  if (!cb) {\n    return bt_init();\n  }\n#endif\n\n#if defined(CONFIG_BLE_MULTI_ADV)\n  bt_le_multi_adv_thread_init();\n#endif\n\n  k_work_submit(&bt_dev.init);\n  return 0;\n}\n\nstruct bt_ad {\n  const struct bt_data *data;\n  size_t                len;\n};\n\n#if defined(BFLB_BLE)\nbool le_check_valid_scan(void) { return atomic_test_bit(bt_dev.flags, BT_DEV_EXPLICIT_SCAN); }\n#endif\n\n#if defined(BFLB_DISABLE_BT)\nextern struct k_thread recv_thread_data;\nextern struct k_thread work_q_thread;\nextern struct k_fifo   free_tx;\n#if defined(CONFIG_BT_SMP)\nextern struct k_sem sc_local_pkey_ready;\n#endif\n\nvoid bt_delete_queue(struct k_fifo *queue_to_del) {\n  struct net_buf *buf = NULL;\n  buf                 = net_buf_get(queue_to_del, K_NO_WAIT);\n  while (buf) {\n    net_buf_unref(buf);\n    buf = net_buf_get(queue_to_del, K_NO_WAIT);\n  }\n\n  k_queue_free(&(queue_to_del->_queue));\n}\n\n#if defined(BFLB_DYNAMIC_ALLOC_MEM) && (CONFIG_BT_CONN)\nextern struct net_buf_pool acl_tx_pool;\nextern struct net_buf_pool prep_pool;\n#if defined(CONFIG_BT_BREDR)\nextern struct net_buf_pool br_sig_pool;\nextern struct net_buf_pool sdp_pool;\n#if defined CONFIG_BT_HFP\nextern struct net_buf_pool hf_pool;\nextern struct net_buf_pool dummy_pool;\n#endif\n#endif\n#endif\n\nint bt_disable_action(void) {\n#if defined(CONFIG_BT_PRIVACY)\n  k_delayed_work_del_timer(&bt_dev.rpa_update);\n#endif\n#if defined(CONFIG_BT_CONN)\n  bt_gatt_deinit();\n#endif\n  // delete queue, not delete hci_cmd_pool.free/hci_rx_pool.free/acl_tx_pool.free which store released buffers.\n  bt_delete_queue(&recv_fifo);\n  bt_delete_queue(&g_work_queue_main.fifo);\n  bt_delete_queue(&bt_dev.cmd_tx_queue);\n#if defined(CONFIG_BT_CONN)\n  k_queue_free((struct k_queue *)&free_tx);\n#endif\n  // delete sem\n  k_sem_delete(&bt_dev.ncmd_sem);\n  k_sem_delete(&g_poll_sem);\n#if defined(CONFIG_BT_SMP)\n  k_sem_delete(&sc_local_pkey_ready);\n#endif\n#if defined(CONFIG_BT_CONN)\n  k_sem_delete(&bt_dev.le.pkts);\n#endif\n\n  atomic_clear_bit(bt_dev.flags, BT_DEV_ENABLE);\n\n#if defined(BFLB_DYNAMIC_ALLOC_MEM)\n  net_buf_deinit(&hci_cmd_pool);\n  net_buf_deinit(&hci_rx_pool);\n#if defined(CONFIG_BT_CONN)\n  net_buf_deinit(&acl_tx_pool);\n  net_buf_deinit(&num_complete_pool);\n#if CONFIG_BT_ATT_PREPARE_COUNT > 0\n  net_buf_deinit(&prep_pool);\n#endif\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\n  net_buf_deinit(&acl_in_pool);\n#endif\n#if (CONFIG_BT_L2CAP_TX_FRAG_COUNT > 0)\n  net_buf_deinit(&frag_pool);\n#endif\n#if defined(CONFIG_BT_BREDR)\n  net_buf_deinit(&br_sig_pool);\n  net_buf_deinit(&sdp_pool);\n#if defined CONFIG_BT_HFP\n  net_buf_deinit(&hf_pool);\n  net_buf_deinit(&dummy_pool);\n#endif\n#endif\n#endif // defined(CONFIG_BT_CONN)\n#if defined(CONFIG_BT_DISCARDABLE_BUF_COUNT)\n  net_buf_deinit(&discardable_pool);\n#endif\n#endif // defined(BFLB_DYNAMIC_ALLOC_MEM)\n\n  bl_onchiphci_interface_deinit();\n\n  // delete task\n  ble_controller_deinit();\n#if (BFLB_BT_CO_THREAD)\n  k_thread_delete(&co_thread_data);\n#else\n  k_thread_delete(&tx_thread_data);\n  k_thread_delete(&work_q_thread);\n  k_thread_delete(&recv_thread_data);\n#endif\n\n  return 0;\n}\n\nint bt_disable(void) {\n  if (\n#if defined(CONFIG_BT_CONN)\n      le_check_valid_conn() ||\n#endif\n      atomic_test_bit(bt_dev.flags, BT_DEV_EXPLICIT_SCAN) || atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING)) {\n    return -1;\n  } else\n    return bt_disable_action();\n}\n#endif\n\nstatic int set_ad(u16_t hci_op, const struct bt_ad *ad, size_t ad_len) {\n  struct bt_hci_cp_le_set_adv_data *set_data;\n  struct net_buf                   *buf;\n  int                               c, i;\n\n  buf = bt_hci_cmd_create(hci_op, sizeof(*set_data));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  set_data = net_buf_add(buf, sizeof(*set_data));\n\n  (void)memset(set_data, 0, sizeof(*set_data));\n\n  for (c = 0; c < ad_len; c++) {\n    const struct bt_data *data = ad[c].data;\n\n    for (i = 0; i < ad[c].len; i++) {\n      int  len  = data[i].data_len;\n      u8_t type = data[i].type;\n\n      /* Check if ad fit in the remaining buffer */\n      if (set_data->len + len + 2 > 31) {\n        len = 31 - (set_data->len + 2);\n        if (type != BT_DATA_NAME_COMPLETE || !len) {\n          net_buf_unref(buf);\n          BT_ERR(\"Too big advertising data\");\n          return -EINVAL;\n        }\n        type = BT_DATA_NAME_SHORTENED;\n      }\n\n      set_data->data[set_data->len++] = len + 1;\n      set_data->data[set_data->len++] = type;\n\n      memcpy(&set_data->data[set_data->len], data[i].data, len);\n      set_data->len += len;\n    }\n  }\n\n  return bt_hci_cmd_send_sync(hci_op, buf, NULL);\n}\n\nint bt_set_name(const char *name) {\n#if defined(CONFIG_BT_DEVICE_NAME_DYNAMIC)\n  size_t len = strlen(name);\n#if !defined(BFLB_BLE)\n  int err;\n#endif\n  if (len >= sizeof(bt_dev.name)) {\n    return -ENOMEM;\n  }\n\n  if (!strcmp(bt_dev.name, name)) {\n    return 0;\n  }\n\n  strncpy(bt_dev.name, name, sizeof(bt_dev.name));\n\n  /* Update advertising name if in use */\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING_NAME)) {\n    struct bt_data data[] = {BT_DATA(BT_DATA_NAME_COMPLETE, name, strlen(name))};\n    struct bt_ad   sd     = {data, ARRAY_SIZE(data)};\n\n    set_ad(BT_HCI_OP_LE_SET_SCAN_RSP_DATA, &sd, 1);\n\n    /* Make sure the new name is set */\n    if (atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING)) {\n      set_advertise_enable(false);\n      set_advertise_enable(true);\n    }\n  }\n\n  if (IS_ENABLED(CONFIG_BT_SETTINGS)) {\n#if defined(BFLB_BLE)\n#if defined(CFG_SLEEP)\n    if (HBN_Get_Status_Flag() == 0)\n#endif\n      bt_settings_save_name();\n#else\n    err = settings_save_one(\"bt/name\", bt_dev.name, len);\n    if (err) {\n      BT_WARN(\"Unable to store name\");\n    }\n#endif\n  }\n\n  return 0;\n#else\n  return -ENOMEM;\n#endif\n}\n\nconst char *bt_get_name(void) {\n#if defined(CONFIG_BT_DEVICE_NAME_DYNAMIC)\n  return bt_dev.name;\n#else\n  return CONFIG_BT_DEVICE_NAME;\n#endif\n}\n\nint bt_set_id_addr(const bt_addr_le_t *addr) {\n  bt_addr_le_t non_const_addr;\n\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_READY)) {\n    BT_ERR(\"Setting identity not allowed after bt_enable()\");\n    return -EBUSY;\n  }\n\n  bt_addr_le_copy(&non_const_addr, addr);\n\n  return bt_id_create(&non_const_addr, NULL);\n}\n\nvoid bt_id_get(bt_addr_le_t *addrs, size_t *count) {\n  size_t to_copy = MIN(*count, bt_dev.id_count);\n\n  memcpy(addrs, bt_dev.id_addr, to_copy * sizeof(bt_addr_le_t));\n  *count = to_copy;\n}\n\nstatic int id_find(const bt_addr_le_t *addr) {\n  u8_t id;\n\n  for (id = 0U; id < bt_dev.id_count; id++) {\n    if (!bt_addr_le_cmp(addr, &bt_dev.id_addr[id])) {\n      return id;\n    }\n  }\n\n  return -ENOENT;\n}\n\nstatic void id_create(u8_t id, bt_addr_le_t *addr, u8_t *irk) {\n  if (addr && bt_addr_le_cmp(addr, BT_ADDR_LE_ANY)) {\n    bt_addr_le_copy(&bt_dev.id_addr[id], addr);\n  } else {\n    bt_addr_le_t new_addr;\n\n    do {\n      bt_addr_le_create_static(&new_addr);\n      /* Make sure we didn't generate a duplicate */\n    } while (id_find(&new_addr) >= 0);\n\n    bt_addr_le_copy(&bt_dev.id_addr[id], &new_addr);\n\n    if (addr) {\n      bt_addr_le_copy(addr, &bt_dev.id_addr[id]);\n    }\n  }\n\n#if defined(CONFIG_BT_PRIVACY)\n  {\n    u8_t zero_irk[16] = {0};\n\n    if (irk && memcmp(irk, zero_irk, 16)) {\n      memcpy(&bt_dev.irk[id], irk, 16);\n    } else {\n      bt_rand(&bt_dev.irk[id], 16);\n      if (irk) {\n        memcpy(irk, &bt_dev.irk[id], 16);\n      }\n    }\n  }\n#endif\n  /* Only store if stack was already initialized. Before initialization\n   * we don't know the flash content, so it's potentially harmful to\n   * try to write anything there.\n   */\n  if (IS_ENABLED(CONFIG_BT_SETTINGS) && atomic_test_bit(bt_dev.flags, BT_DEV_READY)) {\n    bt_settings_save_id();\n  }\n}\n\nint bt_id_create(bt_addr_le_t *addr, u8_t *irk) {\n  int new_id;\n\n  if (addr && bt_addr_le_cmp(addr, BT_ADDR_LE_ANY)) {\n    if (addr->type != BT_ADDR_LE_RANDOM || !BT_ADDR_IS_STATIC(&addr->a)) {\n      BT_ERR(\"Only static random identity address supported\");\n      return -EINVAL;\n    }\n\n    if (id_find(addr) >= 0) {\n      return -EALREADY;\n    }\n  }\n\n  if (!IS_ENABLED(CONFIG_BT_PRIVACY) && irk) {\n    return -EINVAL;\n  }\n\n  if (bt_dev.id_count == ARRAY_SIZE(bt_dev.id_addr)) {\n    return -ENOMEM;\n  }\n\n  new_id = bt_dev.id_count++;\n  if (new_id == BT_ID_DEFAULT && !atomic_test_bit(bt_dev.flags, BT_DEV_READY)) {\n    atomic_set_bit(bt_dev.flags, BT_DEV_USER_ID_ADDR);\n  }\n\n  id_create(new_id, addr, irk);\n\n  return new_id;\n}\n\nint bt_id_reset(u8_t id, bt_addr_le_t *addr, u8_t *irk) {\n  if (addr && bt_addr_le_cmp(addr, BT_ADDR_LE_ANY)) {\n    if (addr->type != BT_ADDR_LE_RANDOM || !BT_ADDR_IS_STATIC(&addr->a)) {\n      BT_ERR(\"Only static random identity address supported\");\n      return -EINVAL;\n    }\n\n    if (id_find(addr) >= 0) {\n      return -EALREADY;\n    }\n  }\n\n  if (!IS_ENABLED(CONFIG_BT_PRIVACY) && irk) {\n    return -EINVAL;\n  }\n\n  if (id == BT_ID_DEFAULT || id >= bt_dev.id_count) {\n    return -EINVAL;\n  }\n\n  if (id == bt_dev.adv_id && atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING)) {\n    return -EBUSY;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_CONN) && bt_addr_le_cmp(&bt_dev.id_addr[id], BT_ADDR_LE_ANY)) {\n    int err;\n\n    err = bt_unpair(id, NULL);\n    if (err) {\n      return err;\n    }\n  }\n\n  id_create(id, addr, irk);\n\n  return id;\n}\n\nint bt_id_delete(u8_t id) {\n  if (id == BT_ID_DEFAULT || id >= bt_dev.id_count) {\n    return -EINVAL;\n  }\n\n  if (!bt_addr_le_cmp(&bt_dev.id_addr[id], BT_ADDR_LE_ANY)) {\n    return -EALREADY;\n  }\n\n  if (id == bt_dev.adv_id && atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING)) {\n    return -EBUSY;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_CONN)) {\n    int err;\n\n    err = bt_unpair(id, NULL);\n    if (err) {\n      return err;\n    }\n  }\n\n#if defined(CONFIG_BT_PRIVACY)\n  (void)memset(bt_dev.irk[id], 0, 16);\n#endif\n  bt_addr_le_copy(&bt_dev.id_addr[id], BT_ADDR_LE_ANY);\n\n  if (id == bt_dev.id_count - 1) {\n    bt_dev.id_count--;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_SETTINGS) && atomic_test_bit(bt_dev.flags, BT_DEV_READY)) {\n    bt_settings_save_id();\n  }\n\n  return 0;\n}\n\n#if defined(CONFIG_BT_HCI_VS_EXT)\nstatic uint8_t bt_read_static_addr(bt_addr_le_t *addr) {\n  struct bt_hci_rp_vs_read_static_addrs *rp;\n  struct net_buf                        *rsp;\n  int                                    err, i;\n  u8_t                                   cnt;\n  if (!(bt_dev.vs_commands[1] & BIT(0))) {\n    BT_WARN(\"Read Static Addresses command not available\");\n    return 0;\n  }\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_VS_READ_STATIC_ADDRS, NULL, &rsp);\n  if (err) {\n    BT_WARN(\"Failed to read static addresses\");\n    return 0;\n  }\n  rp  = (void *)rsp->data;\n  cnt = MIN(rp->num_addrs, CONFIG_BT_ID_MAX);\n\n  for (i = 0; i < cnt; i++) {\n    addr[i].type = BT_ADDR_LE_RANDOM;\n    bt_addr_copy(&addr[i].a, &rp->a[i].bdaddr);\n  }\n  net_buf_unref(rsp);\n  if (!cnt) {\n    BT_WARN(\"No static addresses stored in controller\");\n  }\n  return cnt;\n}\n#elif defined(CONFIG_BT_CTLR)\nuint8_t bt_read_static_addr(bt_addr_le_t *addr);\n#endif /* CONFIG_BT_HCI_VS_EXT */\n\nint bt_setup_id_addr(void) {\n#if defined(CONFIG_BT_HCI_VS_EXT) || defined(CONFIG_BT_CTLR)\n  /* Only read the addresses if the user has not already configured one or\n   * more identities (!bt_dev.id_count).\n   */\n  if (!bt_dev.id_count) {\n    bt_addr_le_t addrs[CONFIG_BT_ID_MAX];\n\n    bt_dev.id_count = bt_read_static_addr(addrs);\n    if (bt_dev.id_count) {\n      int i;\n\n      for (i = 0; i < bt_dev.id_count; i++) {\n        id_create(i, &addrs[i], NULL);\n      }\n\n      return set_random_address(&bt_dev.id_addr[0].a);\n    }\n  }\n#endif\n  return bt_id_create(NULL, NULL);\n}\n\nbool bt_addr_le_is_bonded(u8_t id, const bt_addr_le_t *addr) {\n  if (IS_ENABLED(CONFIG_BT_SMP)) {\n    struct bt_keys *keys = bt_keys_find_addr(id, addr);\n\n    /* if there are any keys stored then device is bonded */\n    return keys && keys->keys;\n  } else {\n    return false;\n  }\n}\n\nstatic bool valid_adv_param(const struct bt_le_adv_param *param, bool dir_adv) {\n  if (param->id >= bt_dev.id_count || !bt_addr_le_cmp(&bt_dev.id_addr[param->id], BT_ADDR_LE_ANY)) {\n    return false;\n  }\n\n#if !defined(BFLB_BLE)\n  if (!(param->options & BT_LE_ADV_OPT_CONNECTABLE)) {\n    /*\n     * BT Core 4.2 [Vol 2, Part E, 7.8.5]\n     * The Advertising_Interval_Min and Advertising_Interval_Max\n     * shall not be set to less than 0x00A0 (100 ms) if the\n     * Advertising_Type is set to ADV_SCAN_IND or ADV_NONCONN_IND.\n     */\n    if (bt_dev.hci_version < BT_HCI_VERSION_5_0 && param->interval_min < 0x00a0) {\n      return false;\n    }\n  }\n#endif\n\n  if (is_wl_empty() && ((param->options & BT_LE_ADV_OPT_FILTER_SCAN_REQ) || (param->options & BT_LE_ADV_OPT_FILTER_CONN))) {\n    return false;\n  }\n\n  if ((param->options & BT_LE_ADV_OPT_DIR_MODE_LOW_DUTY) || !dir_adv) {\n    if (param->interval_min > param->interval_max ||\n#if !defined(BFLB_BLE)\n        param->interval_min < 0x0020 ||\n#endif\n        param->interval_max > 0x4000) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nstatic inline bool ad_has_name(const struct bt_data *ad, size_t ad_len) {\n  int i;\n\n  for (i = 0; i < ad_len; i++) {\n    if (ad[i].type == BT_DATA_NAME_COMPLETE || ad[i].type == BT_DATA_NAME_SHORTENED) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nstatic int le_adv_update(const struct bt_data *ad, size_t ad_len, const struct bt_data *sd, size_t sd_len, bool connectable, bool use_name) {\n  struct bt_ad   d[2] = {};\n  struct bt_data data;\n  int            err;\n\n  d[0].data = ad;\n  d[0].len  = ad_len;\n\n  err = set_ad(BT_HCI_OP_LE_SET_ADV_DATA, d, 1);\n  if (err) {\n    return err;\n  }\n\n  d[0].data = sd;\n  d[0].len  = sd_len;\n\n  if (use_name) {\n    const char *name;\n\n    if (sd) {\n      /* Cannot use name if name is already set */\n      if (ad_has_name(sd, sd_len)) {\n        return -EINVAL;\n      }\n    }\n\n    name = bt_get_name();\n    data = (struct bt_data)BT_DATA(BT_DATA_NAME_COMPLETE, name, strlen(name));\n\n    d[1].data = &data;\n    d[1].len  = 1;\n  }\n\n  /*\n   * We need to set SCAN_RSP when enabling advertising type that\n   * allows for Scan Requests.\n   *\n   * If any data was not provided but we enable connectable\n   * undirected advertising sd needs to be cleared from values set\n   * by previous calls.\n   * Clearing sd is done by calling set_ad() with NULL data and\n   * zero len.\n   * So following condition check is unusual but correct.\n   */\n  if (d[0].data || d[1].data || connectable) {\n    err = set_ad(BT_HCI_OP_LE_SET_SCAN_RSP_DATA, d, 2);\n    if (err) {\n      return err;\n    }\n  }\n\n  return 0;\n}\n\nint bt_le_adv_update_data(const struct bt_data *ad, size_t ad_len, const struct bt_data *sd, size_t sd_len) {\n  bool connectable, use_name;\n\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING)) {\n    return -EAGAIN;\n  }\n\n  connectable = atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING_CONNECTABLE);\n  use_name    = atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING_NAME);\n\n  return le_adv_update(ad, ad_len, sd, sd_len, connectable, use_name);\n}\n\nint bt_le_adv_start_internal(const struct bt_le_adv_param *param, const struct bt_data *ad, size_t ad_len, const struct bt_data *sd, size_t sd_len, const bt_addr_le_t *peer) {\n  struct bt_hci_cp_le_set_adv_param set_param;\n  const bt_addr_le_t               *id_addr;\n  struct net_buf                   *buf;\n  bool                              dir_adv = (peer != NULL);\n  int                               err     = 0;\n\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_READY)) {\n    return -EAGAIN;\n  }\n\n  if (!valid_adv_param(param, dir_adv)) {\n    return -EINVAL;\n  }\n\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING)) {\n    return -EALREADY;\n  }\n\n  (void)memset(&set_param, 0, sizeof(set_param));\n\n  set_param.min_interval = sys_cpu_to_le16(param->interval_min);\n  set_param.max_interval = sys_cpu_to_le16(param->interval_max);\n  set_param.channel_map  = adv_ch_map;\n\n  if (bt_dev.adv_id != param->id) {\n    atomic_clear_bit(bt_dev.flags, BT_DEV_RPA_VALID);\n  }\n\n#if defined(CONFIG_BT_WHITELIST)\n  if ((param->options & BT_LE_ADV_OPT_FILTER_SCAN_REQ) && (param->options & BT_LE_ADV_OPT_FILTER_CONN)) {\n    set_param.filter_policy = BT_LE_ADV_FP_WHITELIST_BOTH;\n  } else if (param->options & BT_LE_ADV_OPT_FILTER_SCAN_REQ) {\n    set_param.filter_policy = BT_LE_ADV_FP_WHITELIST_SCAN_REQ;\n  } else if (param->options & BT_LE_ADV_OPT_FILTER_CONN) {\n    set_param.filter_policy = BT_LE_ADV_FP_WHITELIST_CONN_IND;\n  } else {\n#else\n  {\n#endif /* defined(CONFIG_BT_WHITELIST) */\n    set_param.filter_policy = BT_LE_ADV_FP_NO_WHITELIST;\n  }\n\n  /* Set which local identity address we're advertising with */\n  bt_dev.adv_id = param->id;\n  id_addr       = &bt_dev.id_addr[param->id];\n\n  if (param->options & BT_LE_ADV_OPT_CONNECTABLE) {\n    if (IS_ENABLED(CONFIG_BT_PRIVACY) && !(param->options & BT_LE_ADV_OPT_USE_IDENTITY)) {\n#if defined(CONFIG_BT_STACK_PTS) || defined(CONFIG_AUTO_PTS)\n      if (param->addr_type == BT_ADDR_LE_RANDOM_ID)\n        err = le_set_private_addr(param->id);\n      else if (param->addr_type == BT_ADDR_LE_RANDOM)\n        err = le_set_non_resolv_private_addr(param->id);\n#else\n      err = le_set_private_addr(param->id);\n#endif\n      if (err) {\n        return err;\n      }\n\n      if (BT_FEAT_LE_PRIVACY(bt_dev.le.features)) {\n#if defined(CONFIG_BT_STACK_PTS) || defined(CONFIG_AUTO_PTS)\n        set_param.own_addr_type = param->addr_type;\n#else\n        set_param.own_addr_type = BT_HCI_OWN_ADDR_RPA_OR_RANDOM;\n#endif\n      } else {\n        set_param.own_addr_type = BT_ADDR_LE_RANDOM;\n      }\n    } else {\n      /*\n       * If Static Random address is used as Identity\n       * address we need to restore it before advertising\n       * is enabled. Otherwise NRPA used for active scan\n       * could be used for advertising.\n       */\n      if (id_addr->type == BT_ADDR_LE_RANDOM) {\n        err = set_random_address(&id_addr->a);\n        if (err) {\n          return err;\n        }\n      }\n\n      set_param.own_addr_type = id_addr->type;\n    }\n\n    if (dir_adv) {\n      if (param->options & BT_LE_ADV_OPT_DIR_MODE_LOW_DUTY) {\n        set_param.type = BT_LE_ADV_DIRECT_IND_LOW_DUTY;\n      } else {\n        set_param.type = BT_LE_ADV_DIRECT_IND;\n      }\n\n      bt_addr_le_copy(&set_param.direct_addr, peer);\n\n      if (IS_ENABLED(CONFIG_BT_SMP) && !IS_ENABLED(CONFIG_BT_PRIVACY) && BT_FEAT_LE_PRIVACY(bt_dev.le.features) && (param->options & BT_LE_ADV_OPT_DIR_ADDR_RPA)) {\n        /* This will not use RPA for our own address\n         * since we have set zeroed out the local IRK.\n         */\n        set_param.own_addr_type |= BT_HCI_OWN_ADDR_RPA_MASK;\n      }\n    } else {\n      set_param.type = BT_LE_ADV_IND;\n    }\n  } else {\n    if (param->options & BT_LE_ADV_OPT_USE_IDENTITY) {\n      if (id_addr->type == BT_ADDR_LE_RANDOM) {\n        err = set_random_address(&id_addr->a);\n      }\n\n      set_param.own_addr_type = id_addr->type;\n    } else {\n#if defined(BFLB_BLE) && !defined(CONFIG_BT_MESH)\n#if defined(CONFIG_BT_STACK_PTS) || defined(CONFIG_AUTO_PTS)\n      if (param->addr_type == BT_ADDR_LE_RANDOM_ID)\n        err = le_set_private_addr(param->id);\n      else if (param->addr_type == BT_ADDR_LE_RANDOM)\n        err = le_set_non_resolv_private_addr(param->id);\n#else\n// #if !defined(CONFIG_BT_ADV_WITH_PUBLIC_ADDR)\n// err = le_set_private_addr(param->id);\n// #endif\n#endif // CONFIG_BT_STACK_PTS\n#if defined(CONFIG_BT_STACK_PTS) || defined(CONFIG_AUTO_PTS)\n      set_param.own_addr_type = param->addr_type;\n#else\n      // set_param.own_addr_type = BT_ADDR_LE_RANDOM;\n      // #if defined(CONFIG_BT_ADV_WITH_PUBLIC_ADDR)\n      set_param.own_addr_type = BT_ADDR_LE_PUBLIC;\n// #endif\n#endif\n#endif\n    }\n\n    if (err) {\n      return err;\n    }\n\n    if (sd) {\n      set_param.type = BT_LE_ADV_SCAN_IND;\n    } else {\n      set_param.type = BT_LE_ADV_NONCONN_IND;\n    }\n  }\n\n#if defined(CONFIG_BT_STACK_PTS)\n  if (set_param.own_addr_type == BT_ADDR_LE_PUBLIC) {\n    atomic_set_bit(bt_dev.flags, BT_DEV_ADV_ADDRESS_IS_PUBLIC);\n  }\n#endif\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_ADV_PARAM, sizeof(set_param));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  net_buf_add_mem(buf, &set_param, sizeof(set_param));\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_SET_ADV_PARAM, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  if (!dir_adv) {\n    err = le_adv_update(ad, ad_len, sd, sd_len, param->options & BT_LE_ADV_OPT_CONNECTABLE, param->options & BT_LE_ADV_OPT_USE_NAME);\n    if (err) {\n      return err;\n    }\n  }\n\n  err = set_advertise_enable(true);\n  if (err) {\n    return err;\n  }\n\n  atomic_set_bit_to(bt_dev.flags, BT_DEV_KEEP_ADVERTISING, !(param->options & BT_LE_ADV_OPT_ONE_TIME));\n\n  atomic_set_bit_to(bt_dev.flags, BT_DEV_ADVERTISING_NAME, param->options & BT_LE_ADV_OPT_USE_NAME);\n\n  atomic_set_bit_to(bt_dev.flags, BT_DEV_ADVERTISING_CONNECTABLE, param->options & BT_LE_ADV_OPT_CONNECTABLE);\n\n#if defined(BFLB_HOST_ASSISTANT)\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_ASSIST_RUN) && host_assist_cb && host_assist_cb->le_adv_cb)\n    host_assist_cb->le_adv_cb(param, ad, ad_len, sd, sd_len);\n#endif\n\n  return 0;\n}\n#if defined(BFLB_BLE)\nint bt_le_read_rssi(u16_t handle, int8_t *rssi) {\n  struct bt_hci_cp_read_rssi *le_rssi;\n  struct bt_hci_rp_read_rssi *rsp_rssi;\n  struct net_buf             *buf;\n  struct net_buf             *rsp;\n  int                         ret;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_READ_RSSI, sizeof(*le_rssi));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  le_rssi = net_buf_add(buf, sizeof(*le_rssi));\n  memset(le_rssi, 0, sizeof(*le_rssi));\n\n  le_rssi->handle = handle;\n\n  ret = bt_hci_cmd_send_sync(BT_HCI_OP_READ_RSSI, buf, &rsp);\n\n  if (ret) {\n    return ret;\n  }\n\n  rsp_rssi = (struct bt_hci_rp_read_rssi *)rsp->data;\n  *rssi    = rsp_rssi->rssi;\n\n  net_buf_unref(rsp);\n\n  return ret;\n}\n\nint set_adv_enable(bool enable) {\n  int err;\n  err = set_advertise_enable(enable);\n  if (err) {\n    return err;\n  }\n\n  return 0;\n}\n\nint set_adv_param(const struct bt_le_adv_param *param) {\n  struct bt_hci_cp_le_set_adv_param set_param;\n  const bt_addr_le_t               *id_addr;\n  struct net_buf                   *buf;\n  int                               err = 0;\n\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_READY)) {\n    return -EAGAIN;\n  }\n\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING)) {\n    return -EALREADY;\n  }\n\n  (void)memset(&set_param, 0, sizeof(set_param));\n\n  set_param.min_interval = sys_cpu_to_le16(param->interval_min);\n  set_param.max_interval = sys_cpu_to_le16(param->interval_max);\n  set_param.channel_map  = 0x07;\n\n  if (bt_dev.adv_id != param->id) {\n    atomic_clear_bit(bt_dev.flags, BT_DEV_RPA_VALID);\n  }\n\n#if defined(CONFIG_BT_WHITELIST)\n  if ((param->options & BT_LE_ADV_OPT_FILTER_SCAN_REQ) && (param->options & BT_LE_ADV_OPT_FILTER_CONN)) {\n    set_param.filter_policy = BT_LE_ADV_FP_WHITELIST_BOTH;\n  } else if (param->options & BT_LE_ADV_OPT_FILTER_SCAN_REQ) {\n    set_param.filter_policy = BT_LE_ADV_FP_WHITELIST_SCAN_REQ;\n  } else if (param->options & BT_LE_ADV_OPT_FILTER_CONN) {\n    set_param.filter_policy = BT_LE_ADV_FP_WHITELIST_CONN_IND;\n  } else {\n#else\n  {\n#endif /* defined(CONFIG_BT_WHITELIST) */\n    set_param.filter_policy = BT_LE_ADV_FP_NO_WHITELIST;\n  }\n\n  /* Set which local identity address we're advertising with */\n  bt_dev.adv_id = param->id;\n  id_addr       = &bt_dev.id_addr[param->id];\n\n  if (param->options & BT_LE_ADV_OPT_CONNECTABLE) {\n    if (IS_ENABLED(CONFIG_BT_PRIVACY) && !(param->options & BT_LE_ADV_OPT_USE_IDENTITY)) {\n#if defined(CONFIG_BT_STACK_PTS)\n      if (param->addr_type == BT_ADDR_TYPE_RPA)\n        err = le_set_private_addr(param->id);\n      else if (param->addr_type == BT_ADDR_TYPE_NON_RPA)\n        err = le_set_non_resolv_private_addr(param->id);\n#else\n      err = le_set_private_addr(param->id);\n#endif\n      if (err) {\n        return err;\n      }\n\n      if (BT_FEAT_LE_PRIVACY(bt_dev.le.features)) {\n#if defined(CONFIG_BT_STACK_PTS)\n        if (param->addr_type == BT_ADDR_LE_PUBLIC)\n          set_param.own_addr_type = BT_ADDR_LE_PUBLIC;\n        if (param->addr_type == BT_ADDR_TYPE_RPA)\n          set_param.own_addr_type = BT_HCI_OWN_ADDR_RPA_OR_RANDOM;\n        else if (param->addr_type == BT_ADDR_TYPE_NON_RPA)\n          set_param.own_addr_type = BT_ADDR_LE_RANDOM;\n#else\n        set_param.own_addr_type = BT_HCI_OWN_ADDR_RPA_OR_RANDOM;\n#endif\n      } else {\n        set_param.own_addr_type = BT_ADDR_LE_RANDOM;\n      }\n    } else {\n      /*\n       * If Static Random address is used as Identity\n       * address we need to restore it before advertising\n       * is enabled. Otherwise NRPA used for active scan\n       * could be used for advertising.\n       */\n      if (id_addr->type == BT_ADDR_LE_RANDOM) {\n        err = set_random_address(&id_addr->a);\n        if (err) {\n          return err;\n        }\n      }\n\n      set_param.own_addr_type = id_addr->type;\n    }\n\n    set_param.type = BT_LE_ADV_IND;\n\n  } else {\n    if (param->options & BT_LE_ADV_OPT_USE_IDENTITY) {\n      if (id_addr->type == BT_ADDR_LE_RANDOM) {\n        err = set_random_address(&id_addr->a);\n      }\n\n      set_param.own_addr_type = id_addr->type;\n    } else {\n#if defined(BFLB_BLE) && !defined(CONFIG_BT_MESH)\n#if defined(CONFIG_BT_STACK_PTS)\n      if (param->addr_type == BT_ADDR_TYPE_RPA)\n        err = le_set_private_addr(param->id);\n      else if (param->addr_type == BT_ADDR_TYPE_NON_RPA)\n        err = le_set_non_resolv_private_addr(param->id);\n#else\n      err = le_set_private_addr(param->id);\n#endif // CONFIG_BT_STACK_PTS\n#if defined(CONFIG_BT_STACK_PTS)\n      if (param->addr_type == BT_ADDR_LE_PUBLIC)\n        set_param.own_addr_type = BT_ADDR_LE_PUBLIC;\n      else\n#endif\n        set_param.own_addr_type = BT_ADDR_LE_RANDOM;\n#endif\n    }\n\n    if (err) {\n      return err;\n    }\n\n    set_param.type = BT_LE_ADV_NONCONN_IND;\n  }\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_ADV_PARAM, sizeof(set_param));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  net_buf_add_mem(buf, &set_param, sizeof(set_param));\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_SET_ADV_PARAM, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  atomic_set_bit_to(bt_dev.flags, BT_DEV_KEEP_ADVERTISING, !(param->options & BT_LE_ADV_OPT_ONE_TIME));\n\n  atomic_set_bit_to(bt_dev.flags, BT_DEV_ADVERTISING_NAME, param->options & BT_LE_ADV_OPT_USE_NAME);\n\n  atomic_set_bit_to(bt_dev.flags, BT_DEV_ADVERTISING_CONNECTABLE, param->options & BT_LE_ADV_OPT_CONNECTABLE);\n\n  return 0;\n}\n\nint set_ad_and_rsp_d(u16_t hci_op, u8_t *data, u32_t ad_len) {\n  struct net_buf *buf;\n  u32_t           len;\n  u8_t            size;\n\n  if (BT_HCI_OP_LE_SET_ADV_DATA == hci_op) {\n    size = sizeof(struct bt_hci_cp_le_set_adv_data);\n\n  } else if (BT_HCI_OP_LE_SET_SCAN_RSP_DATA == hci_op) {\n    size = sizeof(struct bt_hci_cp_le_set_scan_rsp_data);\n\n  } else\n    return -ENOTSUP;\n\n  buf = bt_hci_cmd_create(hci_op, size);\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  if (BT_HCI_OP_LE_SET_ADV_DATA == hci_op) {\n    struct bt_hci_cp_le_set_adv_data *set_data = net_buf_add(buf, size);\n    memset(set_data, 0, size);\n    set_data->len = ad_len;\n\n    if (set_data->len > 30) {\n      len = 30 - (set_data->len);\n      if (!len) {\n        net_buf_unref(buf);\n        return -ENOBUFS;\n      }\n    }\n\n    memcpy(set_data->data, data, set_data->len);\n\n  } else if (BT_HCI_OP_LE_SET_SCAN_RSP_DATA == hci_op) {\n    struct bt_hci_cp_le_set_scan_rsp_data *set_data = net_buf_add(buf, size);\n    memset(set_data, 0, size);\n\n    set_data->len = ad_len;\n\n    if (set_data->len > 30) {\n      len = 30 - (set_data->len);\n      if (!len) {\n        net_buf_unref(buf);\n        return -ENOBUFS;\n      }\n    }\n\n    memcpy(set_data->data, data, set_data->len);\n\n  } else\n    return -ENOBUFS;\n\n  return bt_hci_cmd_send_sync(hci_op, buf, NULL);\n}\n\nint set_adv_channel_map(u8_t channel) {\n  int err = 0;\n\n  if (channel >= 1 && channel <= 7) {\n    adv_ch_map = channel;\n  } else {\n    err = -1;\n  }\n\n  return err;\n}\n\nint bt_get_local_public_address(bt_addr_le_t *adv_addr) {\n  int err = 0;\n\n  bt_addr_le_copy(adv_addr, bt_dev.id_addr);\n  return err;\n}\n\nint bt_get_local_ramdon_address(bt_addr_le_t *adv_addr) {\n  int err = 0;\n\n  bt_addr_le_copy(adv_addr, &bt_dev.random_addr);\n  return err;\n}\n#endif\n\nint bt_le_adv_start(const struct bt_le_adv_param *param, const struct bt_data *ad, size_t ad_len, const struct bt_data *sd, size_t sd_len) {\n  if (param->options & BT_LE_ADV_OPT_DIR_MODE_LOW_DUTY) {\n    return -EINVAL;\n  }\n\n  return bt_le_adv_start_internal(param, ad, ad_len, sd, sd_len, NULL);\n}\n\nint bt_le_adv_stop(void) {\n  int err;\n\n  /* Make sure advertising is not re-enabled later even if it's not\n   * currently enabled (i.e. BT_DEV_ADVERTISING is not set).\n   */\n  atomic_clear_bit(bt_dev.flags, BT_DEV_KEEP_ADVERTISING);\n\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING)) {\n    return 0;\n  }\n\n  err = set_advertise_enable(false);\n  if (err) {\n    return err;\n  }\n\n  if (!IS_ENABLED(CONFIG_BT_PRIVACY)) {\n    /* If active scan is ongoing set NRPA */\n    if (atomic_test_bit(bt_dev.flags, BT_DEV_SCANNING) && atomic_test_bit(bt_dev.flags, BT_DEV_ACTIVE_SCAN)) {\n      le_set_private_addr(bt_dev.adv_id);\n    }\n  }\n\n  return 0;\n}\n\n#if defined(CONFIG_BLE_MULTI_ADV)\nstatic int set_ad_data(u16_t hci_op, const uint8_t *ad_data, int ad_len) {\n  struct bt_hci_cp_le_set_adv_data *set_data;\n  struct net_buf                   *buf;\n\n  buf = bt_hci_cmd_create(hci_op, sizeof(*set_data));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  if (ad_len > 31)\n    return -EINVAL;\n\n  set_data = net_buf_add(buf, sizeof(*set_data));\n\n  memset(set_data, 0, sizeof(*set_data));\n  memcpy(set_data->data, ad_data, ad_len);\n  set_data->len = ad_len;\n\n  return bt_hci_cmd_send_sync(hci_op, buf, NULL);\n}\n\nint bt_le_adv_start_instant(const struct bt_le_adv_param *param, const uint8_t *ad_data, size_t ad_len, const uint8_t *sd_data, size_t sd_len) {\n  struct bt_hci_cp_le_set_adv_param set_param;\n  struct net_buf                   *buf;\n  const bt_addr_le_t               *id_addr;\n  int                               err;\n\n  bt_le_adv_stop();\n\n  if (!valid_adv_param(param, false)) {\n    return -EINVAL;\n  }\n\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_ADVERTISING)) {\n    return -EALREADY;\n  }\n\n  err = set_ad_data(BT_HCI_OP_LE_SET_ADV_DATA, ad_data, ad_len);\n  if (err) {\n    return err;\n  }\n\n  /*\n   * We need to set SCAN_RSP when enabling advertising type that allows\n   * for Scan Requests.\n   *\n   * If sd was not provided but we enable connectable undirected\n   * advertising sd needs to be cleared from values set by previous calls.\n   * Clearing sd is done by calling set_ad() with NULL data and zero len.\n   * So following condition check is unusual but correct.\n   */\n  if (sd_len || (param->options & BT_LE_ADV_OPT_CONNECTABLE)) {\n    err = set_ad_data(BT_HCI_OP_LE_SET_SCAN_RSP_DATA, sd_data, sd_len);\n    if (err) {\n      return err;\n    }\n  }\n\n  memset(&set_param, 0, sizeof(set_param));\n\n  set_param.min_interval = sys_cpu_to_le16(param->interval_min);\n  set_param.max_interval = sys_cpu_to_le16(param->interval_max);\n  set_param.channel_map  = 0x07;\n\n  bt_dev.adv_id = param->id;\n  id_addr       = &bt_dev.id_addr[param->id];\n\n  if (param->options & BT_LE_ADV_OPT_CONNECTABLE) {\n    if (IS_ENABLED(CONFIG_BT_PRIVACY)) {\n      err = le_set_private_addr(bt_dev.adv_id);\n      if (err) {\n        return err;\n      }\n\n      if (BT_FEAT_LE_PRIVACY(bt_dev.le.features)) {\n        set_param.own_addr_type = BT_HCI_OWN_ADDR_RPA_OR_RANDOM;\n      } else {\n        set_param.own_addr_type = BT_ADDR_LE_RANDOM;\n      }\n    } else {\n      /*\n       * If Static Random address is used as Identity\n       * address we need to restore it before advertising\n       * is enabled. Otherwise NRPA used for active scan\n       * could be used for advertising.\n       */\n      if (id_addr->type == BT_ADDR_LE_RANDOM) {\n        err = set_random_address(&id_addr->a);\n        if (err) {\n          return err;\n        }\n      }\n      set_param.own_addr_type = id_addr->type;\n    }\n\n    set_param.type = BT_LE_ADV_IND;\n  } else {\n    if (sd_len) {\n      set_param.type = BT_LE_ADV_SCAN_IND;\n    } else {\n      set_param.type = BT_LE_ADV_NONCONN_IND;\n    }\n  }\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_ADV_PARAM, sizeof(set_param));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  net_buf_add_mem(buf, &set_param, sizeof(set_param));\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_SET_ADV_PARAM, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  err = set_advertise_enable(true);\n  if (err) {\n    return err;\n  }\n\n  if (!(param->options & BT_LE_ADV_OPT_ONE_TIME)) {\n    atomic_set_bit(bt_dev.flags, BT_DEV_KEEP_ADVERTISING);\n  }\n\n  return 0;\n}\n#endif // CONFIG_BLE_MULTI_ADV\n\n#if defined(CONFIG_BT_OBSERVER)\nstatic bool valid_le_scan_param(const struct bt_le_scan_param *param) {\n  if (param->type != BT_HCI_LE_SCAN_PASSIVE && param->type != BT_HCI_LE_SCAN_ACTIVE) {\n    return false;\n  }\n\n  if (param->filter_dup & ~(BT_LE_SCAN_FILTER_DUPLICATE | BT_LE_SCAN_FILTER_WHITELIST)) {\n    return false;\n  }\n\n  if (is_wl_empty() && param->filter_dup & BT_LE_SCAN_FILTER_WHITELIST) {\n    return false;\n  }\n\n  if (param->interval < 0x0004 || param->interval > 0x4000) {\n    return false;\n  }\n\n  if (param->window < 0x0004 || param->window > 0x4000) {\n    return false;\n  }\n\n  if (param->window > param->interval) {\n    return false;\n  }\n\n  return true;\n}\n\n#if defined(CONFIG_BT_STACK_PTS)\nint bt_le_pts_scan_start(const struct bt_le_scan_param *param, bt_le_scan_cb_t cb, u8_t addre_type) {\n  int err;\n\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_READY)) {\n    return -EAGAIN;\n  }\n\n  /* Check that the parameters have valid values */\n  if (!valid_le_scan_param(param)) {\n    return -EINVAL;\n  }\n\n  /* Return if active scan is already enabled */\n  if (atomic_test_and_set_bit(bt_dev.flags, BT_DEV_EXPLICIT_SCAN)) {\n    return -EALREADY;\n  }\n\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_SCANNING)) {\n    err = set_le_scan_enable(BT_HCI_LE_SCAN_DISABLE);\n    if (err) {\n      atomic_clear_bit(bt_dev.flags, BT_DEV_EXPLICIT_SCAN);\n      return err;\n    }\n  }\n\n  atomic_set_bit_to(bt_dev.flags, BT_DEV_SCAN_FILTER_DUP, param->filter_dup & BT_LE_SCAN_FILTER_DUPLICATE);\n\n#if defined(CONFIG_BT_WHITELIST)\n  atomic_set_bit_to(bt_dev.flags, BT_DEV_SCAN_WL, param->filter_dup & BT_LE_SCAN_FILTER_WHITELIST);\n#endif /* defined(CONFIG_BT_WHITELIST) */\n\n  err = start_le_scan_with_isrpa(param->type, param->interval, param->window, addre_type);\n\n  if (err) {\n    atomic_clear_bit(bt_dev.flags, BT_DEV_EXPLICIT_SCAN);\n    return err;\n  }\n\n  scan_dev_found_cb = cb;\n\n  return 0;\n}\n#endif\nint bt_le_scan_start(const struct bt_le_scan_param *param, bt_le_scan_cb_t cb)\n\n{\n  int err;\n\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_READY)) {\n    return -EAGAIN;\n  }\n\n  /* Check that the parameters have valid values */\n  if (!valid_le_scan_param(param)) {\n    return -EINVAL;\n  }\n\n  /* Return if active scan is already enabled */\n  if (atomic_test_and_set_bit(bt_dev.flags, BT_DEV_EXPLICIT_SCAN)) {\n    return -EALREADY;\n  }\n\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_SCANNING)) {\n    err = set_le_scan_enable(BT_HCI_LE_SCAN_DISABLE);\n    if (err) {\n      atomic_clear_bit(bt_dev.flags, BT_DEV_EXPLICIT_SCAN);\n      return err;\n    }\n  }\n\n  atomic_set_bit_to(bt_dev.flags, BT_DEV_SCAN_FILTER_DUP, param->filter_dup & BT_LE_SCAN_FILTER_DUPLICATE);\n\n#if defined(CONFIG_BT_WHITELIST)\n  atomic_set_bit_to(bt_dev.flags, BT_DEV_SCAN_WL, param->filter_dup & BT_LE_SCAN_FILTER_WHITELIST);\n#endif /* defined(CONFIG_BT_WHITELIST) */\n\n  err = start_le_scan(param->type, param->interval, param->window);\n  if (err) {\n    atomic_clear_bit(bt_dev.flags, BT_DEV_EXPLICIT_SCAN);\n    return err;\n  }\n\n  scan_dev_found_cb = cb;\n\n#if defined(BFLB_HOST_ASSISTANT)\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_ASSIST_RUN) && host_assist_cb && host_assist_cb->le_scan_cb)\n    host_assist_cb->le_scan_cb(param, cb);\n#endif\n\n  return 0;\n}\n\nint bt_le_scan_stop(void) {\n  /* Return if active scanning is already disabled */\n  if (!atomic_test_and_clear_bit(bt_dev.flags, BT_DEV_EXPLICIT_SCAN)) {\n    return -EALREADY;\n  }\n\n  scan_dev_found_cb = NULL;\n\n  return bt_le_scan_update(false);\n}\n#endif /* CONFIG_BT_OBSERVER */\n\n#if defined(CONFIG_BT_WHITELIST)\nint bt_le_whitelist_add(const bt_addr_le_t *addr) {\n  struct bt_hci_cp_le_add_dev_to_wl *cp;\n  struct net_buf                    *buf;\n  int                                err;\n\n  if (!(bt_dev.le.wl_entries < bt_dev.le.wl_size)) {\n    return -ENOMEM;\n  }\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_ADD_DEV_TO_WL, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  bt_addr_le_copy(&cp->addr, addr);\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_ADD_DEV_TO_WL, buf, NULL);\n  if (err) {\n    BT_ERR(\"Failed to add device to whitelist\");\n\n    return err;\n  }\n\n  bt_dev.le.wl_entries++;\n\n  return 0;\n}\n\nint bt_le_whitelist_rem(const bt_addr_le_t *addr) {\n  struct bt_hci_cp_le_rem_dev_from_wl *cp;\n  struct net_buf                      *buf;\n  int                                  err;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_REM_DEV_FROM_WL, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  bt_addr_le_copy(&cp->addr, addr);\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_REM_DEV_FROM_WL, buf, NULL);\n  if (err) {\n    BT_ERR(\"Failed to remove device from whitelist\");\n    return err;\n  }\n\n  bt_dev.le.wl_entries--;\n  return 0;\n}\n\nint bt_le_whitelist_clear(void) {\n  int err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_CLEAR_WL, NULL, NULL);\n\n  if (err) {\n    BT_ERR(\"Failed to clear whitelist\");\n    return err;\n  }\n\n  bt_dev.le.wl_entries = 0;\n  return 0;\n}\n#endif /* defined(CONFIG_BT_WHITELIST) */\n\nint bt_le_set_chan_map(u8_t chan_map[5]) {\n  struct bt_hci_cp_le_set_host_chan_classif *cp;\n  struct net_buf                            *buf;\n\n  if (!IS_ENABLED(CONFIG_BT_CENTRAL)) {\n    return -ENOTSUP;\n  }\n\n  if (!BT_CMD_TEST(bt_dev.supported_commands, 27, 3)) {\n    BT_WARN(\"Set Host Channel Classification command is \"\n            \"not supported\");\n    return -ENOTSUP;\n  }\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_SET_HOST_CHAN_CLASSIF, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n\n  memcpy(&cp->ch_map[0], &chan_map[0], 4);\n  cp->ch_map[4] = chan_map[4] & BIT_MASK(5);\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_LE_SET_HOST_CHAN_CLASSIF, buf, NULL);\n}\n#if defined(CONFIG_SET_TX_PWR)\nint bt_set_tx_pwr(int8_t power) {\n  struct bt_hci_cp_vs_set_tx_pwr set_param;\n  struct net_buf                *buf;\n  int                            err;\n\n  if (power < 0 || power > 20)\n    return BT_HCI_ERR_INVALID_PARAM;\n\n  memset(&set_param, 0, sizeof(set_param));\n\n  set_param.power = power;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_VS_SET_TX_PWR, sizeof(set_param));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  net_buf_add_mem(buf, &set_param, sizeof(set_param));\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_VS_SET_TX_PWR, buf, NULL);\n\n  if (err) {\n    return err;\n  }\n\n  return 0;\n}\n#endif\n\nint bt_buf_get_rx_avail_cnt(void) { return (k_queue_get_cnt(&hci_rx_pool.free._queue) + hci_rx_pool.uninit_count); }\n\nstruct net_buf *bt_buf_get_rx(enum bt_buf_type type, s32_t timeout) {\n  struct net_buf *buf;\n\n  __ASSERT(type == BT_BUF_EVT || type == BT_BUF_ACL_IN, \"Invalid buffer type requested\");\n\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\n  if (type == BT_BUF_EVT) {\n    buf = net_buf_alloc(&hci_rx_pool, timeout);\n  } else {\n    buf = net_buf_alloc(&acl_in_pool, timeout);\n  }\n#else\n  buf = net_buf_alloc(&hci_rx_pool, timeout);\n#endif\n\n  if (buf) {\n    net_buf_reserve(buf, BT_BUF_RESERVE);\n    bt_buf_set_type(buf, type);\n  }\n\n  return buf;\n}\n\nstruct net_buf *bt_buf_get_cmd_complete(s32_t timeout) {\n  struct net_buf *buf;\n  unsigned int    key;\n\n  key             = irq_lock();\n  buf             = bt_dev.sent_cmd;\n  bt_dev.sent_cmd = NULL;\n  irq_unlock(key);\n\n  BT_DBG(\"sent_cmd %p\", buf);\n\n  if (buf) {\n    bt_buf_set_type(buf, BT_BUF_EVT);\n    buf->len = 0U;\n    net_buf_reserve(buf, BT_BUF_RESERVE);\n\n    return buf;\n  }\n\n  return bt_buf_get_rx(BT_BUF_EVT, timeout);\n}\n\nstruct net_buf *bt_buf_get_evt(u8_t evt, bool discardable, s32_t timeout) {\n  switch (evt) {\n#if defined(CONFIG_BT_CONN)\n  case BT_HCI_EVT_NUM_COMPLETED_PACKETS: {\n    struct net_buf *buf;\n\n    buf = net_buf_alloc(&num_complete_pool, timeout);\n    if (buf) {\n      net_buf_reserve(buf, BT_BUF_RESERVE);\n      bt_buf_set_type(buf, BT_BUF_EVT);\n    }\n\n    return buf;\n  }\n#endif /* CONFIG_BT_CONN */\n  case BT_HCI_EVT_CMD_COMPLETE:\n  case BT_HCI_EVT_CMD_STATUS:\n    return bt_buf_get_cmd_complete(timeout);\n  default:\n#if defined(CONFIG_BT_DISCARDABLE_BUF_COUNT)\n    if (discardable) {\n      struct net_buf *buf;\n\n      buf = net_buf_alloc(&discardable_pool, timeout);\n      if (buf) {\n        net_buf_reserve(buf, BT_BUF_RESERVE);\n        bt_buf_set_type(buf, BT_BUF_EVT);\n      }\n\n      return buf;\n    }\n#endif /* CONFIG_BT_DISCARDABLE_BUF_COUNT */\n\n    return bt_buf_get_rx(BT_BUF_EVT, timeout);\n  }\n}\n\n#if defined(CONFIG_BT_BREDR)\nstatic int br_start_inquiry(const struct bt_br_discovery_param *param) {\n  const u8_t                iac[3] = {0x33, 0x8b, 0x9e};\n  struct bt_hci_op_inquiry *cp;\n  struct net_buf           *buf;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_INQUIRY, sizeof(*cp));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n\n  cp->length  = param->length;\n  cp->num_rsp = 0xff; /* we limit discovery only by time */\n\n  memcpy(cp->lap, iac, 3);\n  if (param->limited) {\n    cp->lap[0] = 0x00;\n  }\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_INQUIRY, buf, NULL);\n}\n\nstatic bool valid_br_discov_param(const struct bt_br_discovery_param *param, size_t num_results) {\n  if (!num_results || num_results > 255) {\n    return false;\n  }\n\n  if (!param->length || param->length > 0x30) {\n    return false;\n  }\n\n  return true;\n}\n\nint bt_br_discovery_start(const struct bt_br_discovery_param *param, struct bt_br_discovery_result *results, size_t cnt, bt_br_discovery_cb_t cb) {\n  int err;\n\n  BT_DBG(\"\");\n\n  if (!valid_br_discov_param(param, cnt)) {\n    return -EINVAL;\n  }\n\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_INQUIRY)) {\n    return -EALREADY;\n  }\n\n  err = br_start_inquiry(param);\n  if (err) {\n    return err;\n  }\n\n  atomic_set_bit(bt_dev.flags, BT_DEV_INQUIRY);\n\n  (void)memset(results, 0, sizeof(*results) * cnt);\n\n  discovery_cb            = cb;\n  discovery_results       = results;\n  discovery_results_size  = cnt;\n  discovery_results_count = 0;\n\n  return 0;\n}\n\nint bt_br_discovery_stop(void) {\n  int err;\n  int i;\n\n  BT_DBG(\"\");\n\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_INQUIRY)) {\n    return -EALREADY;\n  }\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_INQUIRY_CANCEL, NULL, NULL);\n  if (err) {\n    return err;\n  }\n\n  for (i = 0; i < discovery_results_count; i++) {\n    struct discovery_priv               *priv;\n    struct bt_hci_cp_remote_name_cancel *cp;\n    struct net_buf                      *buf;\n\n    priv = (struct discovery_priv *)&discovery_results[i]._priv;\n\n    if (!priv->resolving) {\n      continue;\n    }\n\n    buf = bt_hci_cmd_create(BT_HCI_OP_REMOTE_NAME_CANCEL, sizeof(*cp));\n    if (!buf) {\n      continue;\n    }\n\n    cp = net_buf_add(buf, sizeof(*cp));\n    bt_addr_copy(&cp->bdaddr, &discovery_results[i].addr);\n\n    bt_hci_cmd_send_sync(BT_HCI_OP_REMOTE_NAME_CANCEL, buf, NULL);\n  }\n\n  atomic_clear_bit(bt_dev.flags, BT_DEV_INQUIRY);\n\n  discovery_cb            = NULL;\n  discovery_results       = NULL;\n  discovery_results_size  = 0;\n  discovery_results_count = 0;\n\n  return 0;\n}\n\nstatic int write_scan_enable(u8_t scan) {\n  struct net_buf *buf;\n  int             err;\n\n  BT_DBG(\"type %u\", scan);\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_WRITE_SCAN_ENABLE, 1);\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  net_buf_add_u8(buf, scan);\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_WRITE_SCAN_ENABLE, buf, NULL);\n  if (err) {\n    return err;\n  }\n\n  atomic_set_bit_to(bt_dev.flags, BT_DEV_ISCAN, (scan & BT_BREDR_SCAN_INQUIRY));\n  atomic_set_bit_to(bt_dev.flags, BT_DEV_PSCAN, (scan & BT_BREDR_SCAN_PAGE));\n\n  return 0;\n}\n\nint bt_br_set_connectable(bool enable) {\n  if (enable) {\n    if (atomic_test_bit(bt_dev.flags, BT_DEV_PSCAN)) {\n      return -EALREADY;\n    } else {\n      return write_scan_enable(BT_BREDR_SCAN_PAGE);\n    }\n  } else {\n    if (!atomic_test_bit(bt_dev.flags, BT_DEV_PSCAN)) {\n      return -EALREADY;\n    } else {\n      return write_scan_enable(BT_BREDR_SCAN_DISABLED);\n    }\n  }\n}\n\nint bt_br_set_discoverable(bool enable) {\n  if (enable) {\n    if (atomic_test_bit(bt_dev.flags, BT_DEV_ISCAN)) {\n      return -EALREADY;\n    }\n\n    if (!atomic_test_bit(bt_dev.flags, BT_DEV_PSCAN)) {\n      return -EPERM;\n    }\n\n    return write_scan_enable(BT_BREDR_SCAN_INQUIRY | BT_BREDR_SCAN_PAGE);\n  } else {\n    if (!atomic_test_bit(bt_dev.flags, BT_DEV_ISCAN)) {\n      return -EALREADY;\n    }\n\n    return write_scan_enable(BT_BREDR_SCAN_PAGE);\n  }\n}\n\nint bt_br_write_eir(u8_t rec, u8_t *data) {\n  struct bt_hci_cp_write_ext_inquiry_resp *ext_ir;\n  struct net_buf                          *buf;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_WRITE_EXT_INQUIRY_RESP, sizeof(*ext_ir));\n  if (!buf) {\n    return -ENOBUFS;\n  }\n\n  ext_ir = net_buf_add(buf, sizeof(*ext_ir));\n  memset(ext_ir, 0, sizeof(*ext_ir));\n\n  ext_ir->rec = rec;\n  memcpy(ext_ir->eir, data, strlen((char *)data));\n\n  return bt_hci_cmd_send_sync(BT_HCI_OP_WRITE_EXT_INQUIRY_RESP, buf, NULL);\n}\n\n#endif /* CONFIG_BT_BREDR */\n\n#if defined(CONFIG_BT_ECC)\nint bt_pub_key_gen(struct bt_pub_key_cb *new_cb) {\n  int err;\n\n  /*\n   * We check for both \"LE Read Local P-256 Public Key\" and\n   * \"LE Generate DH Key\" support here since both commands are needed for\n   * ECC support. If \"LE Generate DH Key\" is not supported then there\n   * is no point in reading local public key.\n   */\n  if (!BT_CMD_TEST(bt_dev.supported_commands, 34, 1) || !BT_CMD_TEST(bt_dev.supported_commands, 34, 2)) {\n    BT_WARN(\"ECC HCI commands not available\");\n    return -ENOTSUP;\n  }\n\n#if defined(BFLB_BLE_PATCH_AVOID_DUPLI_PUBKEY_CB)\n  struct bt_pub_key_cb *cb;\n  struct bt_pub_key_cb *valid_cb;\n  bool                  existed = false;\n\n  if (pub_key_cb) {\n    cb       = pub_key_cb;\n    valid_cb = cb;\n    while (cb) {\n      if (new_cb->func == cb->func) {\n        existed = true;\n        break;\n      }\n\n      valid_cb = cb;\n      cb       = cb->_next;\n    }\n\n    if (!existed) {\n      valid_cb->_next = new_cb;\n    }\n  } else {\n    pub_key_cb = new_cb;\n  }\n#else\n  new_cb->_next = pub_key_cb;\n  pub_key_cb    = new_cb;\n#endif\n\n  if (atomic_test_and_set_bit(bt_dev.flags, BT_DEV_PUB_KEY_BUSY)) {\n    return 0;\n  }\n\n  atomic_clear_bit(bt_dev.flags, BT_DEV_HAS_PUB_KEY);\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_P256_PUBLIC_KEY, NULL, NULL);\n  if (err) {\n    BT_ERR(\"Sending LE P256 Public Key command failed\");\n    atomic_clear_bit(bt_dev.flags, BT_DEV_PUB_KEY_BUSY);\n    pub_key_cb = NULL;\n    return err;\n  }\n\n  return 0;\n}\n\nconst u8_t *bt_pub_key_get(void) {\n  if (atomic_test_bit(bt_dev.flags, BT_DEV_HAS_PUB_KEY)) {\n    return pub_key;\n  }\n\n  return NULL;\n}\n\nint bt_dh_key_gen(const u8_t remote_pk[64], bt_dh_key_cb_t cb) {\n  struct bt_hci_cp_le_generate_dhkey *cp;\n  struct net_buf                     *buf;\n  int                                 err;\n\n  if (dh_key_cb || atomic_test_bit(bt_dev.flags, BT_DEV_PUB_KEY_BUSY)) {\n    return -EBUSY;\n  }\n\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_HAS_PUB_KEY)) {\n    return -EADDRNOTAVAIL;\n  }\n\n  dh_key_cb = cb;\n\n  buf = bt_hci_cmd_create(BT_HCI_OP_LE_GENERATE_DHKEY, sizeof(*cp));\n  if (!buf) {\n    dh_key_cb = NULL;\n    return -ENOBUFS;\n  }\n\n  cp = net_buf_add(buf, sizeof(*cp));\n  memcpy(cp->key, remote_pk, sizeof(cp->key));\n\n  err = bt_hci_cmd_send_sync(BT_HCI_OP_LE_GENERATE_DHKEY, buf, NULL);\n  if (err) {\n    dh_key_cb = NULL;\n    return err;\n  }\n\n  return 0;\n}\n#endif /* CONFIG_BT_ECC */\n\n#if defined(CONFIG_BT_BREDR)\nint bt_br_oob_get_local(struct bt_br_oob *oob) {\n  bt_addr_copy(&oob->addr, &bt_dev.id_addr[0].a);\n\n  return 0;\n}\n#endif /* CONFIG_BT_BREDR */\n\nint bt_le_oob_get_local(u8_t id, struct bt_le_oob *oob) {\n  int err;\n\n  if (id >= CONFIG_BT_ID_MAX) {\n    return -EINVAL;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_PRIVACY)) {\n    /* Invalidate RPA so a new one is generated */\n    atomic_clear_bit(bt_dev.flags, BT_DEV_RPA_VALID);\n\n    err = le_set_private_addr(id);\n    if (err) {\n      return err;\n    }\n\n    bt_addr_le_copy(&oob->addr, &bt_dev.random_addr);\n  } else {\n    bt_addr_le_copy(&oob->addr, &bt_dev.id_addr[id]);\n  }\n\n  if (IS_ENABLED(CONFIG_BT_SMP)) {\n    err = bt_smp_le_oob_generate_sc_data(&oob->le_sc_data);\n    if (err) {\n      return err;\n    }\n  }\n\n  return 0;\n}\n\n#if defined(CONFIG_BT_SMP)\nint bt_le_oob_set_sc_data(struct bt_conn *conn, const struct bt_le_oob_sc_data *oobd_local, const struct bt_le_oob_sc_data *oobd_remote) {\n  return bt_smp_le_oob_set_sc_data(conn, oobd_local, oobd_remote);\n}\n\nint bt_le_oob_get_sc_data(struct bt_conn *conn, const struct bt_le_oob_sc_data **oobd_local, const struct bt_le_oob_sc_data **oobd_remote) {\n  return bt_smp_le_oob_get_sc_data(conn, oobd_local, oobd_remote);\n}\n#endif\n\n#if defined(BFLB_RELEASE_CMD_SEM_IF_CONN_DISC)\nvoid hci_release_conn_related_cmd(void) {\n  u16_t opcode;\n\n  (void)opcode;\n\n  if (bt_dev.sent_cmd) {\n    opcode = cmd(bt_dev.sent_cmd)->opcode;\n    switch (opcode) {\n    case BT_HCI_OP_LE_SET_DATA_LEN:\n    case BT_HCI_OP_LE_READ_REMOTE_FEATURES:\n    case BT_HCI_OP_LE_SET_DEFAULT_PHY:\n    case BT_HCI_OP_LE_SET_PHY:\n    case BT_HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY:\n    case BT_HCI_OP_LE_CONN_PARAM_REQ_REPLY:\n    case BT_HCI_OP_LE_LTK_REQ_NEG_REPLY:\n    case BT_HCI_OP_LE_LTK_REQ_REPLY: {\n      k_sem_give(&bt_dev.ncmd_sem);\n      hci_cmd_done(opcode, BT_HCI_ERR_UNSPECIFIED, bt_dev.sent_cmd);\n      net_buf_unref(bt_dev.sent_cmd);\n      bt_dev.sent_cmd = NULL;\n    } break;\n    default:\n      break;\n    }\n  }\n}\n#endif\n\n#if defined(BFLB_HOST_ASSISTANT)\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\nint bt_set_flow_control(void) { return set_flow_control(); }\n#endif\nint bt_set_event_mask(void) { return set_event_mask(); }\n\nint bt_le_set_event_mask(void) { return le_set_event_mask(); }\n\nvoid bt_hci_reset_complete(struct net_buf *buf) { hci_reset_complete(buf); }\n\nvoid bt_register_host_assist_cb(struct blhast_cb *cb) { host_assist_cb = cb; }\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/hci_core.h",
    "content": "/* hci_core.h - Bluetooth HCI core access */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/* LL connection parameters */\n#define LE_CONN_LATENCY 0x0000\n#define LE_CONN_TIMEOUT 0x002a\n\n#if defined(CONFIG_BT_BREDR)\n#define LMP_FEAT_PAGES_COUNT 3\n#else\n#define LMP_FEAT_PAGES_COUNT 1\n#endif\n\n/* SCO  settings */\n#define BT_VOICE_CVSD_16BIT 0x0060\n#define BT_VOICE_MSBC_16BIT 0x0063\n\n#if (BFLB_BT_CO_THREAD)\nenum {\n    BT_CMD_SYNC_NONE = 0,\n    BT_CMD_SYNC_TX = 1,\n    BT_CMD_SYNC_TX_DONE = 2\n};\n#endif\n\n/* k_poll event tags */\nenum {\n    BT_EVENT_CMD_TX,\n    BT_EVENT_CONN_TX_QUEUE,\n#if (BFLB_BT_CO_THREAD)\n    BT_EVENT_RX_QUEUE,\n    BT_EVENT_WORK_QUEUE,\n#endif\n};\n\n/* bt_dev flags: the flags defined here represent BT controller state */\nenum {\n    BT_DEV_ENABLE,\n    BT_DEV_READY,\n    BT_DEV_PRESET_ID,\n    BT_DEV_USER_ID_ADDR,\n    BT_DEV_HAS_PUB_KEY,\n    BT_DEV_PUB_KEY_BUSY,\n\n    BT_DEV_ADVERTISING,\n    BT_DEV_ADVERTISING_NAME,\n    BT_DEV_ADVERTISING_CONNECTABLE,\n    BT_DEV_KEEP_ADVERTISING,\n    BT_DEV_SCANNING,\n    BT_DEV_EXPLICIT_SCAN,\n    BT_DEV_ACTIVE_SCAN,\n    BT_DEV_SCAN_FILTER_DUP,\n    BT_DEV_SCAN_WL,\n    BT_DEV_AUTO_CONN,\n\n    BT_DEV_RPA_VALID,\n\n    BT_DEV_ID_PENDING,\n\n#if defined(CONFIG_BT_BREDR)\n    BT_DEV_ISCAN,\n    BT_DEV_PSCAN,\n    BT_DEV_INQUIRY,\n#endif /* CONFIG_BT_BREDR */\n\n#if defined(CONFIG_BT_STACK_PTS)\n    BT_DEV_ADV_ADDRESS_IS_PUBLIC,\n#endif\n\n#if defined(CONFIG_AUTO_PTS)\n    BT_DEV_SETTED_NON_RESOLV_ADDR, //The non-reslovable address have been set.\n#endif\n\n#if defined(BFLB_HOST_ASSISTANT)\n    BT_DEV_ASSIST_RUN,\n#endif\n\n    /* Total number of flags - must be at the end of the enum */\n    BT_DEV_NUM_FLAGS,\n};\n\n/* Flags which should not be cleared upon HCI_Reset */\n#define BT_DEV_PERSISTENT_FLAGS (BIT(BT_DEV_ENABLE) |    \\\n                                 BIT(BT_DEV_PRESET_ID) | \\\n                                 BIT(BT_DEV_USER_ID_ADDR))\n\nstruct bt_dev_le {\n    /* LE features */\n    u8_t features[8];\n    /* LE states */\n    u64_t states;\n\n#if defined(CONFIG_BT_CONN)\n    /* Controller buffer information */\n    u16_t mtu;\n    struct k_sem pkts;\n#endif /* CONFIG_BT_CONN */\n\n#if defined(CONFIG_BT_SMP)\n    /* Size of the the controller resolving list */\n    u8_t rl_size;\n    /* Number of entries in the resolving list. rl_entries > rl_size\n\t * means that host-side resolving is used.\n\t */\n    u8_t rl_entries;\n#endif /* CONFIG_BT_SMP */\n\n#if defined(CONFIG_BT_WHITELIST)\n    /* Size of the controller whitelist. */\n    u8_t wl_size;\n    /* Number of entries in the resolving list. */\n    u8_t wl_entries;\n#endif /* CONFIG_BT_WHITELIST */\n};\n\n#if defined(CONFIG_BT_BREDR)\nstruct bt_dev_br {\n    /* Max controller's acceptable ACL packet length */\n    u16_t mtu;\n    struct k_sem pkts;\n    u16_t esco_pkt_type;\n};\n#endif\n\n/* The theoretical max for these is 8 and 64, but there's no point\n * in allocating the full memory if we only support a small subset.\n * These values must be updated whenever the host implementation is\n * extended beyond the current values.\n */\n#define BT_DEV_VS_FEAT_MAX 1\n#define BT_DEV_VS_CMDS_MAX 2\n\n/* State tracking for the local Bluetooth controller */\nstruct bt_dev {\n    /* Local Identity Address(es) */\n    bt_addr_le_t id_addr[CONFIG_BT_ID_MAX];\n    u8_t id_count;\n\n    /* ID Address used for advertising */\n    u8_t adv_id;\n\n    /* Current local Random Address */\n    bt_addr_le_t random_addr;\n\n    /* Controller version & manufacturer information */\n    u8_t hci_version;\n    u8_t lmp_version;\n    u16_t hci_revision;\n    u16_t lmp_subversion;\n    u16_t manufacturer;\n\n    /* LMP features (pages 0, 1, 2) */\n    u8_t features[LMP_FEAT_PAGES_COUNT][8];\n\n    /* Supported commands */\n    u8_t supported_commands[64];\n\n#if defined(CONFIG_BT_HCI_VS_EXT)\n    /* Vendor HCI support */\n    u8_t vs_features[BT_DEV_VS_FEAT_MAX];\n    u8_t vs_commands[BT_DEV_VS_CMDS_MAX];\n#endif\n\n    struct k_work init;\n\n    ATOMIC_DEFINE(flags, BT_DEV_NUM_FLAGS);\n\n    /* LE controller specific features */\n    struct bt_dev_le le;\n\n#if defined(CONFIG_BT_BREDR)\n    /* BR/EDR controller specific features */\n    struct bt_dev_br br;\n#endif\n\n    /* Number of commands controller can accept */\n    struct k_sem ncmd_sem;\n\n    /* Last sent HCI command */\n    struct net_buf *sent_cmd;\n\n#if !defined(CONFIG_BT_RECV_IS_RX_THREAD)\n    /* Queue for incoming HCI events & ACL data */\n    struct k_fifo rx_queue;\n#endif\n\n    /* Queue for outgoing HCI commands */\n    struct k_fifo cmd_tx_queue;\n\n    /* Registered HCI driver */\n    const struct bt_hci_driver *drv;\n\n#if defined(CONFIG_BT_PRIVACY)\n    /* Local Identity Resolving Key */\n    u8_t irk[CONFIG_BT_ID_MAX][16];\n\n    /* Work used for RPA rotation */\n    struct k_delayed_work rpa_update;\n#endif\n\n    /* Local Name */\n#if defined(CONFIG_BT_DEVICE_NAME_DYNAMIC)\n    char name[CONFIG_BT_DEVICE_NAME_MAX + 1];\n#endif\n};\n\n#if defined(CONFIG_BT_STACK_PTS)\ntypedef enum __packed {\n    dir_connect_req = 0x01, /*Send a direct connection require while the Lower test enters direct mode .*/\n\n    ad_type_service_uuid = 0x02,\n    ad_type_local_name = 0x03,\n    ad_type_flags = 0x04,\n    ad_type_manu_data = 0x05,\n    ad_type_tx_power_level = 0x06,\n    ad_type_service_data = 0x07,\n    ad_type_appearance = 0x08,\n\n    gatt_discover_chara = 0x09,\n    gatt_exec_write_req = 0x0a,\n    gatt_cancel_write_req = 0x0b,\n    att_read_by_group_type_ind = 0x0c, /* CASE : GATT/SR/GAD/BV-01-C. Indicate PTS sends a GATT discover all primary services request to iut */\n    att_find_by_type_value_ind = 0x0d, /* CASE : GATT/SR/GAD/BV-02-C. Indicate PTS sends a request to iut for discover it contains Primary Services by Service UUID */\n    att_read_by_type_ind = 0x0e,       /* CASE : GATT/SR/GAD/BV-04-C. Indicate PTS sends a request to iut for discover all characteristics of a specified service.*/\n\n    own_addr_type_random = 0x0f\n} event_id;\n\n#endif\n\nextern struct bt_dev bt_dev;\n#if defined(CONFIG_BT_SMP) || defined(CONFIG_BT_BREDR)\nextern const struct bt_conn_auth_cb *bt_auth;\n#endif /* CONFIG_BT_SMP || CONFIG_BT_BREDR */\n\nbool bt_le_conn_params_valid(const struct bt_le_conn_param *param);\n\nint bt_le_scan_update(bool fast_scan);\n\nint bt_le_auto_conn(const struct bt_le_conn_param *conn_param);\nint bt_le_auto_conn_cancel(void);\n\nbool bt_addr_le_is_bonded(u8_t id, const bt_addr_le_t *addr);\nconst bt_addr_le_t *bt_lookup_id_addr(u8_t id, const bt_addr_le_t *addr);\n\nint bt_send(struct net_buf *buf);\n\n/* Don't require everyone to include keys.h */\nstruct bt_keys;\nvoid bt_id_add(struct bt_keys *keys);\nvoid bt_id_del(struct bt_keys *keys);\n\nint bt_setup_id_addr(void);\nvoid bt_finalize_init(void);\n\nint bt_le_adv_start_internal(const struct bt_le_adv_param *param,\n                             const struct bt_data *ad, size_t ad_len,\n                             const struct bt_data *sd, size_t sd_len,\n                             const bt_addr_le_t *peer);\n#if defined(CONFIG_BLE_MULTI_ADV)\nint bt_le_adv_start_instant(const struct bt_le_adv_param *param,\n                            const uint8_t *ad_data, size_t ad_len,\n                            const uint8_t *sd_data, size_t sd_len);\n#endif\n\n#if defined(BFLB_BLE)\n\nint bt_le_read_rssi(u16_t handle, int8_t *rssi);\nint set_ad_and_rsp_d(u16_t hci_op, u8_t *data, u32_t ad_len);\nint set_adv_enable(bool enable);\nint set_adv_param(const struct bt_le_adv_param *param);\nint set_adv_channel_map(u8_t channel);\nint bt_get_local_public_address(bt_addr_le_t *adv_addr);\nint bt_get_local_ramdon_address(bt_addr_le_t *adv_addr);\nint bt_le_set_data_len(struct bt_conn *conn, u16_t tx_octets, u16_t tx_time);\nint hci_le_set_phy(struct bt_conn *conn, uint8_t all_phys,\n                   uint8_t pref_tx_phy, uint8_t pref_rx_phy, uint8_t phy_opts);\nint hci_le_set_default_phy(u8_t default_phy);\n\n#if defined(CONFIG_SET_TX_PWR)\nint bt_set_tx_pwr(int8_t power);\n#endif\n\n#if defined(BFLB_HOST_ASSISTANT)\nstruct blhast_cb {\n    void (*le_scan_cb)(const struct bt_le_scan_param *param, bt_le_scan_cb_t cb);\n    void (*le_adv_cb)(const struct bt_le_adv_param *param, const struct bt_data *ad,\n                      size_t ad_len, const struct bt_data *sd, size_t sd_len);\n};\nint bt_set_flow_control(void);\nint bt_set_event_mask(void);\nint bt_le_set_event_mask(void);\nvoid bt_hci_reset_complete(struct net_buf *buf);\nvoid bt_register_host_assist_cb(struct blhast_cb *cb);\n#endif\n\ntypedef void (*bredr_name_callback)(const char *name);\nint remote_name_req(const bt_addr_t *addr, bredr_name_callback cb);\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/hci_ecc.c",
    "content": "/**\n * @file hci_ecc.c\n * HCI ECC emulation\n */\n\n/*\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <atomic.h>\n#include <constants.h>\n#include <ecc.h>\n#include <ecc_dh.h>\n#include <misc/byteorder.h>\n#include <misc/stack.h>\n#include <utils.h>\n#include <zephyr.h>\n\n#include <../include/bluetooth/crypto.h>\n#include <bluetooth.h>\n#include <conn.h>\n#include <hci_driver.h>\n#include <hci_host.h>\n\n#define BT_DBG_ENABLED IS_ENABLED(CONFIG_BT_DEBUG_HCI_CORE)\n#include \"log.h\"\n\n#include \"hci_ecc.h\"\n#ifdef CONFIG_BT_HCI_RAW\n#include \"hci_raw_internal.h\"\n#include <bluetooth/hci_raw.h>\n#else\n#include \"hci_core.h\"\n#endif\n\nstatic struct k_thread ecc_thread_data;\n#if !defined(BFLB_BLE)\nstatic BT_STACK_NOINIT(ecc_thread_stack, 1024);\n#endif\n\n/* based on Core Specification 4.2 Vol 3. Part H 2.3.5.6.1 */\nstatic const u32_t debug_private_key[8] = {0xcd3c1abd, 0x5899b8a6, 0xeb40b799, 0x4aff607b, 0xd2103f50, 0x74c9b3e3, 0xa3c55f38, 0x3f49f6d4};\n\n#if defined(CONFIG_BT_USE_DEBUG_KEYS)\nstatic const u8_t debug_public_key[64] = {0xe6, 0x9d, 0x35, 0x0e, 0x48, 0x01, 0x03, 0xcc, 0xdb, 0xfd, 0xf4, 0xac, 0x11, 0x91, 0xf4, 0xef, 0xb9, 0xa5, 0xf9, 0xe9, 0xa7, 0x83,\n                                          0x2c, 0x5e, 0x2c, 0xbe, 0x97, 0xf2, 0xd2, 0x03, 0xb0, 0x20, 0x8b, 0xd2, 0x89, 0x15, 0xd0, 0x8e, 0x1c, 0x74, 0x24, 0x30, 0xed, 0x8f,\n                                          0xc2, 0x45, 0x63, 0x76, 0x5c, 0x15, 0x52, 0x5a, 0xbf, 0x9a, 0x32, 0x63, 0x6d, 0xeb, 0x2a, 0x65, 0x49, 0x9c, 0x80, 0xdc};\n#endif\n\nenum {\n  PENDING_PUB_KEY,\n  PENDING_DHKEY,\n\n  /* Total number of flags - must be at the end of the enum */\n  NUM_FLAGS,\n};\n\nstatic ATOMIC_DEFINE(flags, NUM_FLAGS);\n\nstatic K_SEM_DEFINE(cmd_sem, 0, 1);\n\nstatic struct {\n  u8_t private_key[32];\n\n  union {\n    u8_t pk[64];\n    u8_t dhkey[32];\n  };\n} ecc;\n\nstatic void send_cmd_status(u16_t opcode, u8_t status) {\n  struct bt_hci_evt_cmd_status *evt;\n  struct bt_hci_evt_hdr        *hdr;\n  struct net_buf               *buf;\n\n  BT_DBG(\"opcode %x status %x\", opcode, status);\n\n  buf = bt_buf_get_evt(BT_HCI_EVT_CMD_STATUS, false, K_FOREVER);\n  bt_buf_set_type(buf, BT_BUF_EVT);\n\n  hdr      = net_buf_add(buf, sizeof(*hdr));\n  hdr->evt = BT_HCI_EVT_CMD_STATUS;\n  hdr->len = sizeof(*evt);\n\n  evt         = net_buf_add(buf, sizeof(*evt));\n  evt->ncmd   = 1U;\n  evt->opcode = sys_cpu_to_le16(opcode);\n  evt->status = status;\n\n  bt_recv_prio(buf);\n}\n\nstatic u8_t generate_keys(void) {\n#if !defined(CONFIG_BT_USE_DEBUG_KEYS)\n  do {\n    int rc;\n\n    rc = uECC_make_key(ecc.pk, ecc.private_key, &curve_secp256r1);\n    if (rc == TC_CRYPTO_FAIL) {\n      BT_ERR(\"Failed to create ECC public/private pair\");\n      return BT_HCI_ERR_UNSPECIFIED;\n    }\n\n    /* make sure generated key isn't debug key */\n  } while (memcmp(ecc.private_key, debug_private_key, 32) == 0);\n#else\n  sys_memcpy_swap(&ecc.pk, debug_public_key, 32);\n  sys_memcpy_swap(&ecc.pk[32], &debug_public_key[32], 32);\n  sys_memcpy_swap(ecc.private_key, debug_private_key, 32);\n#endif\n  return 0;\n}\n\nstatic void emulate_le_p256_public_key_cmd(void) {\n  struct bt_hci_evt_le_p256_public_key_complete *evt;\n  struct bt_hci_evt_le_meta_event               *meta;\n  struct bt_hci_evt_hdr                         *hdr;\n  struct net_buf                                *buf;\n  u8_t                                           status;\n\n  BT_DBG(\"\");\n\n  status = generate_keys();\n\n  buf = bt_buf_get_rx(BT_BUF_EVT, K_FOREVER);\n\n  hdr      = net_buf_add(buf, sizeof(*hdr));\n  hdr->evt = BT_HCI_EVT_LE_META_EVENT;\n  hdr->len = sizeof(*meta) + sizeof(*evt);\n\n  meta           = net_buf_add(buf, sizeof(*meta));\n  meta->subevent = BT_HCI_EVT_LE_P256_PUBLIC_KEY_COMPLETE;\n\n  evt         = net_buf_add(buf, sizeof(*evt));\n  evt->status = status;\n\n  if (status) {\n    (void)memset(evt->key, 0, sizeof(evt->key));\n  } else {\n    /* Convert X and Y coordinates from big-endian (provided\n     * by crypto API) to little endian HCI.\n     */\n    sys_memcpy_swap(evt->key, ecc.pk, 32);\n    sys_memcpy_swap(&evt->key[32], &ecc.pk[32], 32);\n  }\n\n  atomic_clear_bit(flags, PENDING_PUB_KEY);\n\n  bt_recv(buf);\n}\n\nstatic void emulate_le_generate_dhkey(void) {\n  struct bt_hci_evt_le_generate_dhkey_complete *evt;\n  struct bt_hci_evt_le_meta_event              *meta;\n  struct bt_hci_evt_hdr                        *hdr;\n  struct net_buf                               *buf;\n  int                                           ret;\n\n  ret = uECC_valid_public_key(ecc.pk, &curve_secp256r1);\n  if (ret < 0) {\n    BT_ERR(\"public key is not valid (ret %d)\", ret);\n    ret = TC_CRYPTO_FAIL;\n  } else {\n    ret = uECC_shared_secret(ecc.pk, ecc.private_key, ecc.dhkey, &curve_secp256r1);\n  }\n\n  buf = bt_buf_get_rx(BT_BUF_EVT, K_FOREVER);\n\n  hdr      = net_buf_add(buf, sizeof(*hdr));\n  hdr->evt = BT_HCI_EVT_LE_META_EVENT;\n  hdr->len = sizeof(*meta) + sizeof(*evt);\n\n  meta           = net_buf_add(buf, sizeof(*meta));\n  meta->subevent = BT_HCI_EVT_LE_GENERATE_DHKEY_COMPLETE;\n\n  evt = net_buf_add(buf, sizeof(*evt));\n\n  if (ret == TC_CRYPTO_FAIL) {\n    evt->status = BT_HCI_ERR_UNSPECIFIED;\n    (void)memset(evt->dhkey, 0, sizeof(evt->dhkey));\n  } else {\n    evt->status = 0U;\n    /* Convert from big-endian (provided by crypto API) to\n     * little-endian HCI.\n     */\n    sys_memcpy_swap(evt->dhkey, ecc.dhkey, sizeof(ecc.dhkey));\n  }\n\n  atomic_clear_bit(flags, PENDING_DHKEY);\n\n  bt_recv(buf);\n}\n\n#if defined(BFLB_BLE)\nstatic void ecc_thread(void *p1)\n#else\nstatic void ecc_thread(void *p1, void *p2, void *p3)\n#endif\n{\n  while (true) {\n    k_sem_take(&cmd_sem, K_FOREVER);\n\n    if (atomic_test_bit(flags, PENDING_PUB_KEY)) {\n      emulate_le_p256_public_key_cmd();\n    } else if (atomic_test_bit(flags, PENDING_DHKEY)) {\n      emulate_le_generate_dhkey();\n    } else {\n      __ASSERT(0, \"Unhandled ECC command\");\n    }\n#if !defined(BFLB_BLE)\n    STACK_ANALYZE(\"ecc stack\", ecc_thread_stack);\n#endif\n  }\n}\n\nstatic void clear_ecc_events(struct net_buf *buf) {\n  struct bt_hci_cp_le_set_event_mask *cmd;\n\n  cmd = (void *)(buf->data + sizeof(struct bt_hci_cmd_hdr));\n\n  /*\n   * don't enable controller ECC events as those will be generated from\n   * emulation code\n   */\n  cmd->events[0] &= ~0x80; /* LE Read Local P-256 PKey Compl */\n  cmd->events[1] &= ~0x01; /* LE Generate DHKey Compl Event */\n}\n\nstatic void le_gen_dhkey(struct net_buf *buf) {\n  struct bt_hci_cp_le_generate_dhkey *cmd;\n  u8_t                                status;\n\n  if (atomic_test_bit(flags, PENDING_PUB_KEY)) {\n    status = BT_HCI_ERR_CMD_DISALLOWED;\n    goto send_status;\n  }\n\n  if (buf->len < sizeof(struct bt_hci_cp_le_generate_dhkey)) {\n    status = BT_HCI_ERR_INVALID_PARAM;\n    goto send_status;\n  }\n\n  if (atomic_test_and_set_bit(flags, PENDING_DHKEY)) {\n    status = BT_HCI_ERR_CMD_DISALLOWED;\n    goto send_status;\n  }\n\n  cmd = (void *)buf->data;\n  /* Convert X and Y coordinates from little-endian HCI to\n   * big-endian (expected by the crypto API).\n   */\n  sys_memcpy_swap(ecc.pk, cmd->key, 32);\n  sys_memcpy_swap(&ecc.pk[32], &cmd->key[32], 32);\n  k_sem_give(&cmd_sem);\n  status = BT_HCI_ERR_SUCCESS;\n\nsend_status:\n  net_buf_unref(buf);\n  send_cmd_status(BT_HCI_OP_LE_GENERATE_DHKEY, status);\n}\n\nstatic void le_p256_pub_key(struct net_buf *buf) {\n  u8_t status;\n\n  net_buf_unref(buf);\n\n  if (atomic_test_bit(flags, PENDING_DHKEY)) {\n    status = BT_HCI_ERR_CMD_DISALLOWED;\n  } else if (atomic_test_and_set_bit(flags, PENDING_PUB_KEY)) {\n    status = BT_HCI_ERR_CMD_DISALLOWED;\n  } else {\n    k_sem_give(&cmd_sem);\n    status = BT_HCI_ERR_SUCCESS;\n  }\n\n  send_cmd_status(BT_HCI_OP_LE_P256_PUBLIC_KEY, status);\n}\n\nint bt_hci_ecc_send(struct net_buf *buf) {\n  if (bt_buf_get_type(buf) == BT_BUF_CMD) {\n    struct bt_hci_cmd_hdr *chdr = (void *)buf->data;\n\n    switch (sys_le16_to_cpu(chdr->opcode)) {\n    case BT_HCI_OP_LE_P256_PUBLIC_KEY:\n      net_buf_pull(buf, sizeof(*chdr));\n      le_p256_pub_key(buf);\n      return 0;\n    case BT_HCI_OP_LE_GENERATE_DHKEY:\n      net_buf_pull(buf, sizeof(*chdr));\n      le_gen_dhkey(buf);\n      return 0;\n    case BT_HCI_OP_LE_SET_EVENT_MASK:\n      clear_ecc_events(buf);\n      break;\n    default:\n      break;\n    }\n  }\n\n  return bt_dev.drv->send(buf);\n}\n\nint default_CSPRNG(u8_t *dst, unsigned int len) { return !bt_rand(dst, len); }\n\nvoid bt_hci_ecc_init(void) {\n#if defined(BFLB_BLE)\n  k_sem_init(&cmd_sem, 0, 1);\n  k_thread_create(&ecc_thread_data, \"ecc_thread\", CONFIG_BT_HCI_ECC_STACK_SIZE, ecc_thread, CONFIG_BT_WORK_QUEUE_PRIO);\n#else\n  k_thread_create(&ecc_thread_data, ecc_thread_stack, K_THREAD_STACK_SIZEOF(ecc_thread_stack), ecc_thread, NULL, NULL, NULL, K_PRIO_PREEMPT(10), 0, K_NO_WAIT);\n  k_thread_name_set(&ecc_thread_data, \"BT ECC\");\n#endif\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/hci_ecc.h",
    "content": "/* hci_ecc.h - HCI ECC emulation */\n\n/*\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nvoid bt_hci_ecc_init(void);\nint bt_hci_ecc_send(struct net_buf *buf);\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/hfp_hf.c",
    "content": "/* hfp_hf.c - Hands free Profile - Handsfree side handling */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#include <atomic.h>\n#include <byteorder.h>\n#include <errno.h>\n#include <printk.h>\n#include <util.h>\n#include <zephyr.h>\n\n#include <conn.h>\n\n#define BT_DBG_ENABLED  IS_ENABLED(CONFIG_BT_DEBUG_HFP_HF)\n#define LOG_MODULE_NAME bt_hfp_hf\n#include \"log.h\"\n\n#include <hfp_hf.h>\n#include <rfcomm.h>\n#include <sdp.h>\n\n#include \"at.h\"\n#include \"conn_internal.h\"\n#include \"hci_core.h\"\n#include \"hfp_internal.h\"\n#include \"l2cap_internal.h\"\n#include \"rfcomm_internal.h\"\n\n#define MAX_IND_STR_LEN 17\n\nstruct bt_hfp_hf_cb *bt_hf;\nbool                 hfp_codec_msbc = 0;\n\n#if !defined(BFLB_DYNAMIC_ALLOC_MEM)\nNET_BUF_POOL_FIXED_DEFINE(hf_pool, CONFIG_BT_MAX_CONN + 1, BT_RFCOMM_BUF_SIZE(BT_HF_CLIENT_MAX_PDU), NULL);\n#else\nstruct net_buf_pool hf_pool;\n#endif\n\nstatic struct bt_hfp_hf bt_hfp_hf_pool[CONFIG_BT_MAX_CONN];\n\nstatic struct bt_sdp_attribute hfp_attrs[] = {\n    BT_SDP_NEW_SERVICE,\n    BT_SDP_LIST(BT_SDP_ATTR_SVCLASS_ID_LIST, BT_SDP_TYPE_SIZE_VAR(BT_SDP_SEQ8, 10),\n                BT_SDP_DATA_ELEM_LIST({BT_SDP_TYPE_SIZE_VAR(BT_SDP_SEQ8, 3), BT_SDP_DATA_ELEM_LIST({BT_SDP_TYPE_SIZE(BT_SDP_UUID16), BT_SDP_ARRAY_16(BT_SDP_HANDSFREE_SVCLASS)}, )},\n                                      {BT_SDP_TYPE_SIZE_VAR(BT_SDP_SEQ8, 3), BT_SDP_DATA_ELEM_LIST({BT_SDP_TYPE_SIZE(BT_SDP_UUID16), BT_SDP_ARRAY_16(BT_SDP_GENERIC_AUDIO_SVCLASS)}, )}, )),\n    BT_SDP_LIST(BT_SDP_ATTR_PROTO_DESC_LIST, BT_SDP_TYPE_SIZE_VAR(BT_SDP_SEQ8, 12),\n                BT_SDP_DATA_ELEM_LIST({BT_SDP_TYPE_SIZE_VAR(BT_SDP_SEQ8, 3), BT_SDP_DATA_ELEM_LIST({BT_SDP_TYPE_SIZE(BT_SDP_UUID16), BT_SDP_ARRAY_16(BT_SDP_PROTO_L2CAP)}, )},\n                                      {BT_SDP_TYPE_SIZE_VAR(BT_SDP_SEQ8, 5), BT_SDP_DATA_ELEM_LIST({BT_SDP_TYPE_SIZE(BT_SDP_UUID16), BT_SDP_ARRAY_16(BT_SDP_PROTO_RFCOMM)},\n                                                                                                   {BT_SDP_TYPE_SIZE(BT_SDP_UINT8), BT_SDP_ARRAY_16(BT_RFCOMM_CHAN_HFP_HF)})}, )),\n    BT_SDP_LIST(BT_SDP_ATTR_PROFILE_DESC_LIST, BT_SDP_TYPE_SIZE_VAR(BT_SDP_SEQ8, 8),\n                BT_SDP_DATA_ELEM_LIST({BT_SDP_TYPE_SIZE_VAR(BT_SDP_SEQ8, 6), BT_SDP_DATA_ELEM_LIST({BT_SDP_TYPE_SIZE(BT_SDP_UUID16), BT_SDP_ARRAY_16(BT_SDP_HANDSFREE_SVCLASS)},\n                                                                                                   {BT_SDP_TYPE_SIZE(BT_SDP_UINT16), BT_SDP_ARRAY_16(0x0107)}, )}, )),\n    BT_SDP_SERVICE_NAME(\"hands-free\"),\n    /*\n        \"SupportedFeatures\" attribute bit mapping for the HF\n        bit 0: EC and/or NR function\n        bit 1: Call waiting or three-way calling\n        bit 2: CLI presentation capability\n        bit 3: Voice recognition activation\n        bit 4: Remote volume control\n        bit 5: Wide band speech\n        bit 6: Enhanced Voice Recognition Status\n        bit 7: Voice Recognition Text\n        */\n    BT_SDP_SUPPORTED_FEATURES(0x0035),\n};\n\nstatic struct bt_sdp_record hfp_rec = BT_SDP_RECORD(hfp_attrs);\n\n/* The order should follow the enum hfp_hf_ag_indicators */\nstatic const struct {\n  char    *name;\n  uint32_t min;\n  uint32_t max;\n} ag_ind[] = {\n    {  \"service\", 0, 1}, /* HF_SERVICE_IND */\n    {     \"call\", 0, 1}, /* HF_CALL_IND */\n    {\"callsetup\", 0, 3}, /* HF_CALL_SETUP_IND */\n    { \"callheld\", 0, 2}, /* HF_CALL_HELD_IND */\n    {   \"signal\", 0, 5}, /* HF_SINGNAL_IND */\n    {     \"roam\", 0, 1}, /* HF_ROAM_IND */\n    {  \"battchg\", 0, 5}  /* HF_BATTERY_IND */\n};\n\nstatic void connected(struct bt_conn *conn) { BT_DBG(\"HFP HF Connected!\"); }\n\nstatic void disconnected(struct bt_conn *conn) { BT_DBG(\"HFP HF Disconnected!\"); }\n\nstatic void service(struct bt_conn *conn, uint32_t value) { BT_DBG(\"Service indicator value: %u\", value); }\n\nstatic void call(struct bt_conn *conn, uint32_t value) { BT_DBG(\"Call indicator value: %u\", value); }\n\nstatic void call_setup(struct bt_conn *conn, uint32_t value) { BT_DBG(\"Call Setup indicator value: %u\", value); }\n\nstatic void call_held(struct bt_conn *conn, uint32_t value) { BT_DBG(\"Call Held indicator value: %u\", value); }\n\nstatic void signal(struct bt_conn *conn, uint32_t value) { BT_DBG(\"Signal indicator value: %u\", value); }\n\nstatic void roam(struct bt_conn *conn, uint32_t value) { BT_DBG(\"Roaming indicator value: %u\", value); }\n\nstatic void battery(struct bt_conn *conn, uint32_t value) { BT_DBG(\"Battery indicator value: %u\", value); }\n\nstatic void ring_cb(struct bt_conn *conn) { BT_DBG(\"Incoming Call...\"); }\n\nstatic struct bt_hfp_hf_cb hf_cb = {\n    .connected       = connected,\n    .disconnected    = disconnected,\n    .service         = service,\n    .call            = call,\n    .call_setup      = call_setup,\n    .call_held       = call_held,\n    .signal          = signal,\n    .roam            = roam,\n    .battery         = battery,\n    .ring_indication = ring_cb,\n};\n\nvoid hf_slc_error(struct at_client *hf_at) {\n  struct bt_hfp_hf *hf = CONTAINER_OF(hf_at, struct bt_hfp_hf, at);\n  int               err;\n\n  BT_ERR(\"SLC error: disconnecting\");\n  err = bt_rfcomm_dlc_disconnect(&hf->rfcomm_dlc);\n  if (err) {\n    BT_ERR(\"Rfcomm: Unable to disconnect :%d\", -err);\n  }\n}\n\nint hfp_hf_send_cmd(struct bt_hfp_hf *hf, at_resp_cb_t resp, at_finish_cb_t finish, const char *format, ...) {\n  struct net_buf *buf;\n  va_list         vargs;\n  int             ret;\n\n  /* register the callbacks */\n  at_register(&hf->at, resp, finish);\n\n  buf = bt_rfcomm_create_pdu(&hf_pool);\n  if (!buf) {\n    BT_ERR(\"No Buffers!\");\n    return -ENOMEM;\n  }\n\n  va_start(vargs, format);\n  ret = vsnprintf((char *)buf->data, (net_buf_tailroom(buf) - 1), format, vargs);\n  if (ret < 0) {\n    BT_ERR(\"Unable to format variable arguments\");\n    return ret;\n  }\n  va_end(vargs);\n\n  net_buf_add(buf, ret);\n  net_buf_add_u8(buf, '\\r');\n\n  ret = bt_rfcomm_dlc_send(&hf->rfcomm_dlc, buf);\n  if (ret < 0) {\n    BT_ERR(\"Rfcomm send error :(%d)\", ret);\n    return ret;\n  }\n\n  return 0;\n}\n\nint brsf_handle(struct at_client *hf_at) {\n  struct bt_hfp_hf *hf = CONTAINER_OF(hf_at, struct bt_hfp_hf, at);\n  uint32_t          val;\n  int               ret;\n\n  ret = at_get_number(hf_at, &val);\n  if (ret < 0) {\n    BT_ERR(\"Error getting value\");\n    return ret;\n  }\n\n  hf->ag_features = val;\n\n  return 0;\n}\n\nint brsf_resp(struct at_client *hf_at, struct net_buf *buf) {\n  int err;\n\n  BT_DBG(\"\");\n\n  err = at_parse_cmd_input(hf_at, buf, \"BRSF\", brsf_handle, AT_CMD_TYPE_NORMAL);\n  if (err < 0) {\n    /* Returning negative value is avoided before SLC connection\n     * established.\n     */\n    BT_ERR(\"Error parsing CMD input\");\n    hf_slc_error(hf_at);\n  }\n\n  return 0;\n}\n\nstatic void cind_handle_values(struct at_client *hf_at, uint32_t index, char *name, uint32_t min, uint32_t max) {\n  struct bt_hfp_hf *hf = CONTAINER_OF(hf_at, struct bt_hfp_hf, at);\n  int               i;\n\n  BT_DBG(\"index: %u, name: %s, min: %u, max:%u\", index, name, min, max);\n\n  for (i = 0; i < ARRAY_SIZE(ag_ind); i++) {\n    if (strcmp(name, ag_ind[i].name) != 0) {\n      continue;\n    }\n    if (min != ag_ind[i].min || max != ag_ind[i].max) {\n      BT_ERR(\"%s indicator min/max value not matching\", name);\n    }\n\n    hf->ind_table[index] = i;\n    break;\n  }\n}\n\nint cind_handle(struct at_client *hf_at) {\n  uint32_t index = 0U;\n\n  /* Parsing Example: CIND: (\"call\",(0,1)) etc.. */\n  while (at_has_next_list(hf_at)) {\n    char     name[MAX_IND_STR_LEN];\n    uint32_t min, max;\n\n    if (at_open_list(hf_at) < 0) {\n      BT_ERR(\"Could not get open list\");\n      goto error;\n    }\n\n    if (at_list_get_string(hf_at, name, sizeof(name)) < 0) {\n      BT_ERR(\"Could not get string\");\n      goto error;\n    }\n\n    if (at_open_list(hf_at) < 0) {\n      BT_ERR(\"Could not get open list\");\n      goto error;\n    }\n\n    if (at_list_get_range(hf_at, &min, &max) < 0) {\n      BT_ERR(\"Could not get range\");\n      goto error;\n    }\n\n    if (at_close_list(hf_at) < 0) {\n      BT_ERR(\"Could not get close list\");\n      goto error;\n    }\n\n    if (at_close_list(hf_at) < 0) {\n      BT_ERR(\"Could not get close list\");\n      goto error;\n    }\n\n    cind_handle_values(hf_at, index, name, min, max);\n    index++;\n  }\n\n  return 0;\nerror:\n  BT_ERR(\"Error on CIND response\");\n  hf_slc_error(hf_at);\n  return -EINVAL;\n}\n\nint cind_resp(struct at_client *hf_at, struct net_buf *buf) {\n  int err;\n\n  err = at_parse_cmd_input(hf_at, buf, \"CIND\", cind_handle, AT_CMD_TYPE_NORMAL);\n  if (err < 0) {\n    BT_ERR(\"Error parsing CMD input\");\n    hf_slc_error(hf_at);\n  }\n\n  return 0;\n}\n\nvoid ag_indicator_handle_values(struct at_client *hf_at, uint32_t index, uint32_t value) {\n  struct bt_hfp_hf *hf   = CONTAINER_OF(hf_at, struct bt_hfp_hf, at);\n  struct bt_conn   *conn = hf->rfcomm_dlc.session->br_chan.chan.conn;\n\n  BT_DBG(\"Index :%u, Value :%u\", index, value);\n\n  if (index >= ARRAY_SIZE(ag_ind)) {\n    BT_ERR(\"Max only %lu indicators are supported\", ARRAY_SIZE(ag_ind));\n    return;\n  }\n\n  if (value > ag_ind[hf->ind_table[index]].max || value < ag_ind[hf->ind_table[index]].min) {\n    BT_ERR(\"Indicators out of range - value: %u\", value);\n    return;\n  }\n\n  switch (hf->ind_table[index]) {\n  case HF_SERVICE_IND:\n    if (bt_hf->service) {\n      bt_hf->service(conn, value);\n    }\n    break;\n  case HF_CALL_IND:\n    if (bt_hf->call) {\n      bt_hf->call(conn, value);\n    }\n    break;\n  case HF_CALL_SETUP_IND:\n    if (bt_hf->call_setup) {\n      bt_hf->call_setup(conn, value);\n    }\n    break;\n  case HF_CALL_HELD_IND:\n    if (bt_hf->call_held) {\n      bt_hf->call_held(conn, value);\n    }\n    break;\n  case HF_SINGNAL_IND:\n    if (bt_hf->signal) {\n      bt_hf->signal(conn, value);\n    }\n    break;\n  case HF_ROAM_IND:\n    if (bt_hf->roam) {\n      bt_hf->roam(conn, value);\n    }\n    break;\n  case HF_BATTERY_IND:\n    if (bt_hf->battery) {\n      bt_hf->battery(conn, value);\n    }\n    break;\n  default:\n    BT_ERR(\"Unknown AG indicator\");\n    break;\n  }\n}\n\nint cind_status_handle(struct at_client *hf_at) {\n  uint32_t index = 0U;\n\n  while (at_has_next_list(hf_at)) {\n    uint32_t value;\n    int      ret;\n\n    ret = at_get_number(hf_at, &value);\n    if (ret < 0) {\n      BT_ERR(\"could not get the value\");\n      return ret;\n    }\n\n    ag_indicator_handle_values(hf_at, index, value);\n\n    index++;\n  }\n\n  return 0;\n}\n\nint cind_status_resp(struct at_client *hf_at, struct net_buf *buf) {\n  int err;\n\n  err = at_parse_cmd_input(hf_at, buf, \"CIND\", cind_status_handle, AT_CMD_TYPE_NORMAL);\n  if (err < 0) {\n    BT_ERR(\"Error parsing CMD input\");\n    hf_slc_error(hf_at);\n  }\n\n  return 0;\n}\n\nint ciev_handle(struct at_client *hf_at) {\n  uint32_t index, value;\n  int      ret;\n\n  ret = at_get_number(hf_at, &index);\n  if (ret < 0) {\n    BT_ERR(\"could not get the Index\");\n    return ret;\n  }\n  /* The first element of the list shall have 1 */\n  if (!index) {\n    BT_ERR(\"Invalid index value '0'\");\n    return 0;\n  }\n\n  ret = at_get_number(hf_at, &value);\n  if (ret < 0) {\n    BT_ERR(\"could not get the value\");\n    return ret;\n  }\n\n  ag_indicator_handle_values(hf_at, (index - 1), value);\n\n  return 0;\n}\n\nint ring_handle(struct at_client *hf_at) {\n  struct bt_hfp_hf *hf   = CONTAINER_OF(hf_at, struct bt_hfp_hf, at);\n  struct bt_conn   *conn = hf->rfcomm_dlc.session->br_chan.chan.conn;\n\n  if (bt_hf->ring_indication) {\n    bt_hf->ring_indication(conn);\n  }\n\n  return 0;\n}\n\nint bcs_handle(struct at_client *hf_at) {\n  uint32_t value;\n  int      ret;\n\n  struct bt_hfp_hf *hf = CONTAINER_OF(hf_at, struct bt_hfp_hf, at);\n\n  ret = at_get_number(hf_at, &value);\n  if (ret < 0) {\n    BT_ERR(\"could not get the value\");\n    return ret;\n  }\n  if (value == 1) {\n    if (hfp_hf_send_cmd(hf, NULL, NULL, \"AT+BCS=1\") < 0) {\n      BT_ERR(\"Error Sending AT+BCS=1\");\n    }\n  } else if (value == 2) {\n    if (hfp_hf_send_cmd(hf, NULL, NULL, \"AT+BCS=2\") < 0) {\n      BT_ERR(\"Error Sending AT+BCS=2\");\n    } else {\n      hfp_codec_msbc = 1;\n    }\n  } else {\n    BT_WARN(\"Invail BCS value !\");\n  }\n\n  return 0;\n}\n\nstatic const struct unsolicited {\n  const char      *cmd;\n  enum at_cmd_type type;\n  int (*func)(struct at_client *hf_at);\n} handlers[] = {\n    {\"CIEV\", AT_CMD_TYPE_UNSOLICITED, ciev_handle},\n    {\"RING\",       AT_CMD_TYPE_OTHER, ring_handle},\n    { \"BCS\", AT_CMD_TYPE_UNSOLICITED,  bcs_handle}\n};\n\nstatic const struct unsolicited *hfp_hf_unsol_lookup(struct at_client *hf_at) {\n  int i;\n\n  for (i = 0; i < ARRAY_SIZE(handlers); i++) {\n    if (!strncmp(hf_at->buf, handlers[i].cmd, strlen(handlers[i].cmd))) {\n      return &handlers[i];\n    }\n  }\n\n  return NULL;\n}\n\nint unsolicited_cb(struct at_client *hf_at, struct net_buf *buf) {\n  const struct unsolicited *handler;\n\n  handler = hfp_hf_unsol_lookup(hf_at);\n  if (!handler) {\n    BT_ERR(\"Unhandled unsolicited response\");\n    return -ENOMSG;\n  }\n\n  if (!at_parse_cmd_input(hf_at, buf, handler->cmd, handler->func, handler->type)) {\n    return 0;\n  }\n\n  return -ENOMSG;\n}\n\nint cmd_complete(struct at_client *hf_at, enum at_result result, enum at_cme cme_err) {\n  struct bt_hfp_hf             *hf   = CONTAINER_OF(hf_at, struct bt_hfp_hf, at);\n  struct bt_conn               *conn = hf->rfcomm_dlc.session->br_chan.chan.conn;\n  struct bt_hfp_hf_cmd_complete cmd  = {0};\n\n  BT_DBG(\"\");\n\n  switch (result) {\n  case AT_RESULT_OK:\n    cmd.type = HFP_HF_CMD_OK;\n    break;\n  case AT_RESULT_ERROR:\n    cmd.type = HFP_HF_CMD_ERROR;\n    break;\n  case AT_RESULT_CME_ERROR:\n    cmd.type = HFP_HF_CMD_CME_ERROR;\n    cmd.cme  = cme_err;\n    break;\n  default:\n    BT_ERR(\"Unknown error code\");\n    cmd.type = HFP_HF_CMD_UNKNOWN_ERROR;\n    break;\n  }\n\n  if (bt_hf->cmd_complete_cb) {\n    bt_hf->cmd_complete_cb(conn, &cmd);\n  }\n\n  return 0;\n}\n\nint cmee_finish(struct at_client *hf_at, enum at_result result, enum at_cme cme_err) {\n  struct bt_hfp_hf *hf = CONTAINER_OF(hf_at, struct bt_hfp_hf, at);\n\n  if (result != AT_RESULT_OK) {\n    BT_ERR(\"SLC Connection ERROR in response\");\n    return -EINVAL;\n  }\n\n  if (hfp_hf_send_cmd(hf, NULL, NULL, \"AT+NREC=0\") < 0) {\n    BT_ERR(\"Error Sending AT+NREC\");\n  }\n\n  return 0;\n}\n\nstatic void slc_completed(struct at_client *hf_at) {\n  struct bt_hfp_hf *hf   = CONTAINER_OF(hf_at, struct bt_hfp_hf, at);\n  struct bt_conn   *conn = hf->rfcomm_dlc.session->br_chan.chan.conn;\n\n  if (bt_hf->connected) {\n    bt_hf->connected(conn);\n  }\n\n  if (hfp_hf_send_cmd(hf, NULL, cmee_finish, \"AT+CMEE=1\") < 0) {\n    BT_ERR(\"Error Sending AT+CMEE\");\n  }\n}\n\nint cmer_finish(struct at_client *hf_at, enum at_result result, enum at_cme cme_err) {\n  if (result != AT_RESULT_OK) {\n    BT_ERR(\"SLC Connection ERROR in response\");\n    hf_slc_error(hf_at);\n    return -EINVAL;\n  }\n\n  slc_completed(hf_at);\n\n  return 0;\n}\n\nint cind_status_finish(struct at_client *hf_at, enum at_result result, enum at_cme cme_err) {\n  struct bt_hfp_hf *hf = CONTAINER_OF(hf_at, struct bt_hfp_hf, at);\n  int               err;\n\n  if (result != AT_RESULT_OK) {\n    BT_ERR(\"SLC Connection ERROR in response\");\n    hf_slc_error(hf_at);\n    return -EINVAL;\n  }\n\n  at_register_unsolicited(hf_at, unsolicited_cb);\n  err = hfp_hf_send_cmd(hf, NULL, cmer_finish, \"AT+CMER=3,0,0,1\");\n  if (err < 0) {\n    hf_slc_error(hf_at);\n    return err;\n  }\n\n  return 0;\n}\n\nint cind_finish(struct at_client *hf_at, enum at_result result, enum at_cme cme_err) {\n  struct bt_hfp_hf *hf = CONTAINER_OF(hf_at, struct bt_hfp_hf, at);\n  int               err;\n\n  if (result != AT_RESULT_OK) {\n    BT_ERR(\"SLC Connection ERROR in response\");\n    hf_slc_error(hf_at);\n    return -EINVAL;\n  }\n\n  err = hfp_hf_send_cmd(hf, cind_status_resp, cind_status_finish, \"AT+CIND?\");\n  if (err < 0) {\n    hf_slc_error(hf_at);\n    return err;\n  }\n\n  return 0;\n}\n\nint bac_finish(struct at_client *hf_at, enum at_result result, enum at_cme cme_err) {\n  struct bt_hfp_hf *hf = CONTAINER_OF(hf_at, struct bt_hfp_hf, at);\n  int               err;\n\n  if (result != AT_RESULT_OK) {\n    BT_ERR(\"SLC Connection ERROR in response\");\n    hf_slc_error(hf_at);\n    return -EINVAL;\n  }\n\n  err = hfp_hf_send_cmd(hf, cind_resp, cind_finish, \"AT+CIND=?\");\n  if (err < 0) {\n    hf_slc_error(hf_at);\n    return err;\n  }\n\n  return 0;\n}\n\nint brsf_finish(struct at_client *hf_at, enum at_result result, enum at_cme cme_err) {\n  struct bt_hfp_hf *hf = CONTAINER_OF(hf_at, struct bt_hfp_hf, at);\n  int               err;\n\n  if (result != AT_RESULT_OK) {\n    BT_ERR(\"SLC Connection ERROR in response\");\n    hf_slc_error(hf_at);\n    return -EINVAL;\n  }\n\n  err = hfp_hf_send_cmd(hf, NULL, bac_finish, \"AT+BAC=1,2\");\n  if (err < 0) {\n    hf_slc_error(hf_at);\n    return err;\n  }\n\n  return 0;\n}\n\nint hf_slc_establish(struct bt_hfp_hf *hf) {\n  int err;\n\n  BT_DBG(\"\");\n\n  err = hfp_hf_send_cmd(hf, brsf_resp, brsf_finish, \"AT+BRSF=%u\", hf->hf_features);\n  if (err < 0) {\n    hf_slc_error(&hf->at);\n    return err;\n  }\n\n  return 0;\n}\n\nstatic struct bt_hfp_hf *bt_hfp_hf_lookup_bt_conn(struct bt_conn *conn) {\n  int i;\n\n  for (i = 0; i < ARRAY_SIZE(bt_hfp_hf_pool); i++) {\n    struct bt_hfp_hf *hf = &bt_hfp_hf_pool[i];\n\n    if (hf->rfcomm_dlc.session->br_chan.chan.conn == conn) {\n      return hf;\n    }\n  }\n\n  return NULL;\n}\n\nint bt_hfp_hf_send_cmd(struct bt_conn *conn, enum bt_hfp_hf_at_cmd cmd) {\n  struct bt_hfp_hf *hf;\n  int               err;\n\n  BT_DBG(\"\");\n\n  if (!conn) {\n    BT_ERR(\"Invalid connection\");\n    return -ENOTCONN;\n  }\n\n  hf = bt_hfp_hf_lookup_bt_conn(conn);\n  if (!hf) {\n    BT_ERR(\"No HF connection found\");\n    return -ENOTCONN;\n  }\n\n  switch (cmd) {\n  case BT_HFP_HF_ATA:\n    err = hfp_hf_send_cmd(hf, NULL, cmd_complete, \"ATA\");\n    if (err < 0) {\n      BT_ERR(\"Failed ATA\");\n      return err;\n    }\n    break;\n  case BT_HFP_HF_AT_CHUP:\n    err = hfp_hf_send_cmd(hf, NULL, cmd_complete, \"AT+CHUP\");\n    if (err < 0) {\n      BT_ERR(\"Failed AT+CHUP\");\n      return err;\n    }\n    break;\n  default:\n    BT_ERR(\"Invalid AT Command\");\n    return -EINVAL;\n  }\n\n  return 0;\n}\n\nstatic void hfp_hf_connected(struct bt_rfcomm_dlc *dlc) {\n  struct bt_hfp_hf *hf = CONTAINER_OF(dlc, struct bt_hfp_hf, rfcomm_dlc);\n\n  BT_DBG(\"hf connected\");\n\n  BT_ASSERT(hf);\n  hf_slc_establish(hf);\n}\n\nstatic void hfp_hf_disconnected(struct bt_rfcomm_dlc *dlc) {\n  struct bt_conn *conn = dlc->session->br_chan.chan.conn;\n\n  BT_DBG(\"hf disconnected!\");\n  if (bt_hf->disconnected) {\n    bt_hf->disconnected(conn);\n  }\n}\n\nstatic void hfp_hf_recv(struct bt_rfcomm_dlc *dlc, struct net_buf *buf) {\n  struct bt_hfp_hf *hf = CONTAINER_OF(dlc, struct bt_hfp_hf, rfcomm_dlc);\n\n  if (at_parse_input(&hf->at, buf) < 0) {\n    BT_ERR(\"Parsing failed\");\n  }\n}\n\nstatic int bt_hfp_hf_accept(struct bt_conn *conn, struct bt_rfcomm_dlc **dlc) {\n  int                             i;\n  static struct bt_rfcomm_dlc_ops ops = {\n      .connected    = hfp_hf_connected,\n      .disconnected = hfp_hf_disconnected,\n      .recv         = hfp_hf_recv,\n  };\n\n  BT_DBG(\"conn %p\", conn);\n\n  for (i = 0; i < ARRAY_SIZE(bt_hfp_hf_pool); i++) {\n    struct bt_hfp_hf *hf = &bt_hfp_hf_pool[i];\n    int               j;\n\n    if (hf->rfcomm_dlc.session) {\n      continue;\n    }\n\n    hf->at.buf         = hf->hf_buffer;\n    hf->at.buf_max_len = HF_MAX_BUF_LEN;\n\n    hf->rfcomm_dlc.ops = &ops;\n    hf->rfcomm_dlc.mtu = BT_HFP_MAX_MTU;\n\n    *dlc = &hf->rfcomm_dlc;\n\n    /* Set the supported features*/\n    hf->hf_features = BT_HFP_HF_SUPPORTED_FEATURES;\n\n    for (j = 0; j < HF_MAX_AG_INDICATORS; j++) {\n      hf->ind_table[j] = -1;\n    }\n\n    return 0;\n  }\n\n  BT_ERR(\"Unable to establish HF connection (%p)\", conn);\n\n  return -ENOMEM;\n}\n\nint bt_hfp_hf_init(void) {\n  int err;\n\n#if defined(BFLB_DYNAMIC_ALLOC_MEM)\n  net_buf_init(&hf_pool, CONFIG_BT_MAX_CONN + 1, BT_RFCOMM_BUF_SIZE(BT_HF_CLIENT_MAX_PDU), NULL);\n#endif\n\n  bt_hf = &hf_cb;\n\n  static struct bt_rfcomm_server chan = {\n      .channel = BT_RFCOMM_CHAN_HFP_HF,\n      .accept  = bt_hfp_hf_accept,\n  };\n\n  bt_rfcomm_server_register(&chan);\n\n  /* Register SDP record */\n  err = bt_sdp_register_service(&hfp_rec);\n  if (err < 0) {\n    BT_ERR(\"HFP regist sdp record failed\");\n  }\n  BT_DBG(\"HFP initialized successfully.\");\n  return err;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/hfp_internal.h",
    "content": "/** @file\n *  @brief Internal APIs for Bluetooth Handsfree profile handling.\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#define BT_HFP_MAX_MTU       140\n#define BT_HF_CLIENT_MAX_PDU BT_HFP_MAX_MTU\n\n/* HFP AG Features */\n#define BT_HFP_AG_FEATURE_3WAY_CALL   0x00000001 /* Three-way calling */\n#define BT_HFP_AG_FEATURE_ECNR        0x00000002 /* EC and/or NR function */\n#define BT_HFP_AG_FEATURE_VOICE_RECG  0x00000004 /* Voice recognition */\n#define BT_HFP_AG_INBAND_RING_TONE    0x00000008 /* In-band ring capability */\n#define BT_HFP_AG_VOICE_TAG           0x00000010 /* Attach no. to voice tag */\n#define BT_HFP_AG_FEATURE_REJECT_CALL 0x00000020 /* Ability to reject call */\n#define BT_HFP_AG_FEATURE_ECS         0x00000040 /* Enhanced call status */\n#define BT_HFP_AG_FEATURE_ECC         0x00000080 /* Enhanced call control */\n#define BT_HFP_AG_FEATURE_EXT_ERR     0x00000100 /* Extented error codes */\n#define BT_HFP_AG_FEATURE_CODEC_NEG   0x00000200 /* Codec negotiation */\n#define BT_HFP_AG_FEATURE_HF_IND      0x00000400 /* HF Indicators */\n#define BT_HFP_AG_FEARTURE_ESCO_S4    0x00000800 /* eSCO S4 Settings */\n\n/* HFP HF Features */\n#define BT_HFP_HF_FEATURE_ECNR       0x00000001 /* EC and/or NR */\n#define BT_HFP_HF_FEATURE_3WAY_CALL  0x00000002 /* Three-way calling */\n#define BT_HFP_HF_FEATURE_CLI        0x00000004 /* CLI presentation */\n#define BT_HFP_HF_FEATURE_VOICE_RECG 0x00000008 /* Voice recognition */\n#define BT_HFP_HF_FEATURE_VOLUME     0x00000010 /* Remote volume control */\n#define BT_HFP_HF_FEATURE_ECS        0x00000020 /* Enhanced call status */\n#define BT_HFP_HF_FEATURE_ECC        0x00000040 /* Enhanced call control */\n#define BT_HFP_HF_FEATURE_CODEC_NEG  0x00000080 /* CODEC Negotiation */\n#define BT_HFP_HF_FEATURE_HF_IND     0x00000100 /* HF Indicators */\n#define BT_HFP_HF_FEATURE_ESCO_S4    0x00000200 /* eSCO S4 Settings */\n\n/* HFP HF Supported features */\n#define BT_HFP_HF_SUPPORTED_FEATURES (BT_HFP_HF_FEATURE_ECNR |   \\\n                                      BT_HFP_HF_FEATURE_CLI |    \\\n                                      BT_HFP_HF_FEATURE_VOLUME | \\\n                                      BT_HFP_HF_FEATURE_CODEC_NEG)\n\n#define HF_MAX_BUF_LEN       BT_HF_CLIENT_MAX_PDU\n#define HF_MAX_AG_INDICATORS 20\n\nstruct bt_hfp_hf {\n    struct bt_rfcomm_dlc rfcomm_dlc;\n    char hf_buffer[HF_MAX_BUF_LEN];\n    struct at_client at;\n    uint32_t hf_features;\n    uint32_t ag_features;\n    int8_t ind_table[HF_MAX_AG_INDICATORS];\n};\n\nenum hfp_hf_ag_indicators {\n    HF_SERVICE_IND,\n    HF_CALL_IND,\n    HF_CALL_SETUP_IND,\n    HF_CALL_HELD_IND,\n    HF_SINGNAL_IND,\n    HF_ROAM_IND,\n    HF_BATTERY_IND\n};\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/iso_internal.h",
    "content": "/** @file\n *  @brief Internal APIs for Bluetooth ISO handling.\n */\n\n/*\n * Copyright (c) 2020 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <iso.h>\n\n#define BT_ISO_DATA_PATH_DISABLED 0xFF\n\nstruct iso_data {\n    /** BT_BUF_ISO_IN */\n    uint8_t type;\n\n    /* Index into the bt_conn storage array */\n    uint8_t index;\n\n    /** ISO connection handle */\n    uint16_t handle;\n\n    /** ISO timestamp */\n    uint32_t ts;\n};\n\n#define iso(buf) ((struct iso_data *)net_buf_user_data(buf))\n\n#if defined(CONFIG_BT_MAX_ISO_CONN)\nextern struct bt_conn iso_conns[CONFIG_BT_MAX_ISO_CONN];\n#endif\n\n/* Process ISO buffer */\nvoid hci_iso(struct net_buf *buf);\n\n/* Allocates RX buffer */\nstruct net_buf *bt_iso_get_rx(uint32_t timeout);\n\n/* Create new ISO connecting */\nstruct bt_conn *iso_new(void);\n\n/* Process CIS Estabilished event */\nvoid hci_le_cis_estabilished(struct net_buf *buf);\n\n/* Process CIS Request event */\nvoid hci_le_cis_req(struct net_buf *buf);\n\n/* Notify ISO channels of a new connection */\nint bt_iso_accept(struct bt_conn *conn);\n\n/* Notify ISO channels of a new connection */\nvoid bt_iso_connected(struct bt_conn *conn);\n\n/* Notify ISO channels of a disconnect event */\nvoid bt_iso_disconnected(struct bt_conn *conn);\n\n/* Allocate ISO PDU */\n#if defined(CONFIG_NET_BUF_LOG)\nstruct net_buf *bt_iso_create_pdu_timeout_debug(struct net_buf_pool *pool,\n                                                size_t reserve,\n                                                k_timeout_t timeout,\n                                                const char *func, int line);\n#define bt_iso_create_pdu_timeout(_pool, _reserve, _timeout)   \\\n    bt_iso_create_pdu_timeout_debug(_pool, _reserve, _timeout, \\\n                                    __func__, __LINE__)\n\n#define bt_iso_create_pdu(_pool, _reserve)                      \\\n    bt_iso_create_pdu_timeout_debug(_pool, _reserve, K_FOREVER, \\\n                                    __func__, __line__)\n#else\nstruct net_buf *bt_iso_create_pdu_timeout(struct net_buf_pool *pool,\n                                          size_t reserve, uint32_t timeout);\n\n#define bt_iso_create_pdu(_pool, _reserve) \\\n    bt_iso_create_pdu_timeout(_pool, _reserve, K_FOREVER)\n#endif\n\n/* Allocate ISO Fragment */\n#if defined(CONFIG_NET_BUF_LOG)\nstruct net_buf *bt_iso_create_frag_timeout_debug(size_t reserve,\n                                                 k_timeout_t timeout,\n                                                 const char *func, int line);\n\n#define bt_iso_create_frag_timeout(_reserve, _timeout)   \\\n    bt_iso_create_frag_timeout_debug(_reserve, _timeout, \\\n                                     __func__, __LINE__)\n\n#define bt_iso_create_frag(_reserve)                      \\\n    bt_iso_create_frag_timeout_debug(_reserve, K_FOREVER, \\\n                                     __func__, __LINE__)\n#else\nstruct net_buf *bt_iso_create_frag_timeout(size_t reserve, uint32_t timeout);\n\n#define bt_iso_create_frag(_reserve) \\\n    bt_iso_create_frag_timeout(_reserve, K_FOREVER)\n#endif\n\n#if defined(CONFIG_BT_AUDIO_DEBUG_ISO)\nvoid bt_iso_chan_set_state_debug(struct bt_iso_chan *chan, uint8_t state,\n                                 const char *func, int line);\n#define bt_iso_chan_set_state(_chan, _state) \\\n    bt_iso_chan_set_state_debug(_chan, _state, __func__, __LINE__)\n#else\nvoid bt_iso_chan_set_state(struct bt_iso_chan *chan, uint8_t state);\n#endif /* CONFIG_BT_AUDIO_DEBUG_ISO */\n\n/* Process incoming data for a connection */\nvoid bt_iso_recv(struct bt_conn *conn, struct net_buf *buf, uint8_t flags);\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/keys.c",
    "content": "/* keys.c - Bluetooth key handling */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <atomic.h>\n#include <misc/util.h>\n#include <stdlib.h>\n#include <string.h>\n#include <zephyr.h>\n\n#include <bluetooth.h>\n#include <conn.h>\n#include <hci_host.h>\n\n#define BT_DBG_ENABLED IS_ENABLED(CONFIG_BT_DEBUG_KEYS)\n#include \"log.h\"\n\n#include \"gatt_internal.h\"\n#include \"hci_core.h\"\n#include \"keys.h\"\n#include \"rpa.h\"\n#include \"settings.h\"\n#include \"smp.h\"\n#if defined(BFLB_BLE)\n#if defined(CONFIG_BT_SETTINGS)\n#include \"easyflash.h\"\n#endif\n#endif\n\nstatic struct bt_keys key_pool[CONFIG_BT_MAX_PAIRED];\n\n#define BT_KEYS_STORAGE_LEN_COMPAT (BT_KEYS_STORAGE_LEN - sizeof(uint32_t))\n\n#if IS_ENABLED(CONFIG_BT_KEYS_OVERWRITE_OLDEST)\nstatic u32_t           aging_counter_val;\nstatic struct bt_keys *last_keys_updated;\n#endif /* CONFIG_BT_KEYS_OVERWRITE_OLDEST */\n\nstruct bt_keys *bt_keys_get_addr(u8_t id, const bt_addr_le_t *addr) {\n  struct bt_keys *keys;\n  int             i;\n  size_t          first_free_slot = ARRAY_SIZE(key_pool);\n\n  BT_DBG(\"%s\", bt_addr_le_str(addr));\n\n  for (i = 0; i < ARRAY_SIZE(key_pool); i++) {\n    keys = &key_pool[i];\n\n    if (keys->id == id && !bt_addr_le_cmp(&keys->addr, addr)) {\n      return keys;\n    }\n\n    if (first_free_slot == ARRAY_SIZE(key_pool) && (!bt_addr_le_cmp(&keys->addr, BT_ADDR_LE_ANY) || !keys->enc_size)) {\n      first_free_slot = i;\n    }\n  }\n\n#if IS_ENABLED(CONFIG_BT_KEYS_OVERWRITE_OLDEST)\n  if (first_free_slot == ARRAY_SIZE(key_pool)) {\n    struct bt_keys *oldest = &key_pool[0];\n\n    for (i = 1; i < ARRAY_SIZE(key_pool); i++) {\n      struct bt_keys *current = &key_pool[i];\n\n      if (current->aging_counter < oldest->aging_counter) {\n        oldest = current;\n      }\n    }\n\n    bt_unpair(oldest->id, &oldest->addr);\n    if (!bt_addr_le_cmp(&oldest->addr, BT_ADDR_LE_ANY)) {\n      first_free_slot = oldest - &key_pool[0];\n    }\n  }\n\n#endif /* CONFIG_BT_KEYS_OVERWRITE_OLDEST */\n  if (first_free_slot < ARRAY_SIZE(key_pool)) {\n    keys     = &key_pool[first_free_slot];\n    keys->id = id;\n    bt_addr_le_copy(&keys->addr, addr);\n#if IS_ENABLED(CONFIG_BT_KEYS_OVERWRITE_OLDEST)\n    keys->aging_counter = ++aging_counter_val;\n    last_keys_updated   = keys;\n#endif /* CONFIG_BT_KEYS_OVERWRITE_OLDEST */\n    BT_DBG(\"created %p for %s\", keys, bt_addr_le_str(addr));\n    return keys;\n  }\n\n  BT_DBG(\"unable to create keys for %s\", bt_addr_le_str(addr));\n\n  return NULL;\n}\n\nvoid bt_foreach_bond(u8_t id, void (*func)(const struct bt_bond_info *info, void *user_data), void *user_data) {\n  int i;\n\n  for (i = 0; i < ARRAY_SIZE(key_pool); i++) {\n    struct bt_keys *keys = &key_pool[i];\n\n    if (keys->keys && keys->id == id) {\n      struct bt_bond_info info;\n\n      bt_addr_le_copy(&info.addr, &keys->addr);\n      func(&info, user_data);\n    }\n  }\n}\n\nvoid bt_keys_foreach(int type, void (*func)(struct bt_keys *keys, void *data), void *data) {\n  int i;\n\n  for (i = 0; i < ARRAY_SIZE(key_pool); i++) {\n    if ((key_pool[i].keys & type)) {\n      func(&key_pool[i], data);\n    }\n  }\n}\n\nstruct bt_keys *bt_keys_find(int type, u8_t id, const bt_addr_le_t *addr) {\n  int i;\n\n  BT_DBG(\"type %d %s\", type, bt_addr_le_str(addr));\n\n  for (i = 0; i < ARRAY_SIZE(key_pool); i++) {\n    if ((key_pool[i].keys & type) && key_pool[i].id == id && !bt_addr_le_cmp(&key_pool[i].addr, addr)) {\n      return &key_pool[i];\n    }\n  }\n\n  return NULL;\n}\n\nstruct bt_keys *bt_keys_get_type(int type, u8_t id, const bt_addr_le_t *addr) {\n  struct bt_keys *keys;\n\n  BT_DBG(\"type %d %s\", type, bt_addr_le_str(addr));\n\n  keys = bt_keys_find(type, id, addr);\n  if (keys) {\n    return keys;\n  }\n\n  keys = bt_keys_get_addr(id, addr);\n  if (!keys) {\n    return NULL;\n  }\n\n  bt_keys_add_type(keys, type);\n\n  return keys;\n}\n\nstruct bt_keys *bt_keys_find_irk(u8_t id, const bt_addr_le_t *addr) {\n  int i;\n\n  BT_DBG(\"%s\", bt_addr_le_str(addr));\n\n  if (!bt_addr_le_is_rpa(addr)) {\n    return NULL;\n  }\n\n  for (i = 0; i < ARRAY_SIZE(key_pool); i++) {\n    if (!(key_pool[i].keys & BT_KEYS_IRK)) {\n      continue;\n    }\n\n    if (key_pool[i].id == id && !bt_addr_cmp(&addr->a, &key_pool[i].irk.rpa)) {\n      BT_DBG(\"cached RPA %s for %s\", bt_addr_str(&key_pool[i].irk.rpa), bt_addr_le_str(&key_pool[i].addr));\n      return &key_pool[i];\n    }\n  }\n\n  for (i = 0; i < ARRAY_SIZE(key_pool); i++) {\n    if (!(key_pool[i].keys & BT_KEYS_IRK)) {\n      continue;\n    }\n\n    if (key_pool[i].id != id) {\n      continue;\n    }\n\n    if (bt_rpa_irk_matches(key_pool[i].irk.val, &addr->a)) {\n      BT_DBG(\"RPA %s matches %s\", bt_addr_str(&key_pool[i].irk.rpa), bt_addr_le_str(&key_pool[i].addr));\n\n      bt_addr_copy(&key_pool[i].irk.rpa, &addr->a);\n\n      return &key_pool[i];\n    }\n  }\n\n  BT_DBG(\"No IRK for %s\", bt_addr_le_str(addr));\n\n  return NULL;\n}\n\nstruct bt_keys *bt_keys_find_addr(u8_t id, const bt_addr_le_t *addr) {\n  int i;\n\n  BT_DBG(\"%s\", bt_addr_le_str(addr));\n\n  for (i = 0; i < ARRAY_SIZE(key_pool); i++) {\n    if (key_pool[i].id == id && !bt_addr_le_cmp(&key_pool[i].addr, addr)) {\n      return &key_pool[i];\n    }\n  }\n\n  return NULL;\n}\n\n#if defined(CONFIG_BLE_AT_CMD)\nbt_addr_le_t *bt_get_keys_address(u8_t id) {\n  bt_addr_le_t addr;\n\n  memset(&addr, 0, sizeof(bt_addr_le_t));\n  if (id < ARRAY_SIZE(key_pool)) {\n    if (bt_addr_le_cmp(&key_pool[id].addr, &addr)) {\n      return &key_pool[id].addr;\n    }\n  }\n\n  return NULL;\n}\n#endif\n\nvoid bt_keys_add_type(struct bt_keys *keys, int type) { keys->keys |= type; }\n\nvoid bt_keys_clear(struct bt_keys *keys) {\n#if defined(BFLB_BLE)\n  if (keys->keys & BT_KEYS_IRK) {\n    bt_id_del(keys);\n  }\n\n  memset(keys, 0, sizeof(*keys));\n\n#if defined(CONFIG_BT_SETTINGS)\n  ef_del_env(NV_KEY_POOL);\n#endif\n#else\n  BT_DBG(\"%s (keys 0x%04x)\", bt_addr_le_str(&keys->addr), keys->keys);\n\n  if (keys->keys & BT_KEYS_IRK) {\n    bt_id_del(keys);\n  }\n\n  if (IS_ENABLED(CONFIG_BT_SETTINGS)) {\n    char key[BT_SETTINGS_KEY_MAX];\n\n    /* Delete stored keys from flash */\n    if (keys->id) {\n      char id[4];\n\n      u8_to_dec(id, sizeof(id), keys->id);\n      bt_settings_encode_key(key, sizeof(key), \"keys\", &keys->addr, id);\n    } else {\n      bt_settings_encode_key(key, sizeof(key), \"keys\", &keys->addr, NULL);\n    }\n\n    BT_DBG(\"Deleting key %s\", log_strdup(key));\n    settings_delete(key);\n  }\n\n  (void)memset(keys, 0, sizeof(*keys));\n#endif\n}\n\nstatic void keys_clear_id(struct bt_keys *keys, void *data) {\n  u8_t *id = data;\n\n  if (*id == keys->id) {\n    if (IS_ENABLED(CONFIG_BT_SETTINGS)) {\n      bt_gatt_clear(*id, &keys->addr);\n    }\n\n    bt_keys_clear(keys);\n  }\n}\n\nvoid bt_keys_clear_all(u8_t id) { bt_keys_foreach(BT_KEYS_ALL, keys_clear_id, &id); }\n\n#if defined(CONFIG_BT_SETTINGS)\nint bt_keys_store(struct bt_keys *keys) {\n#if defined(BFLB_BLE)\n  int err;\n  err = bt_settings_set_bin(NV_KEY_POOL, (const u8_t *)&key_pool[0], sizeof(key_pool));\n  return err;\n#else\n  char  val[BT_SETTINGS_SIZE(BT_KEYS_STORAGE_LEN)];\n  char  key[BT_SETTINGS_KEY_MAX];\n  char *str;\n  int   err;\n\n  str = settings_str_from_bytes(keys->storage_start, BT_KEYS_STORAGE_LEN, val, sizeof(val));\n  if (!str) {\n    BT_ERR(\"Unable to encode bt_keys as value\");\n    return -EINVAL;\n  }\n\n  if (keys->id) {\n    char id[4];\n\n    u8_to_dec(id, sizeof(id), keys->id);\n    bt_settings_encode_key(key, sizeof(key), \"keys\", &keys->addr, id);\n  } else {\n    bt_settings_encode_key(key, sizeof(key), \"keys\", &keys->addr, NULL);\n  }\n\n  err = settings_save_one(key, keys->storage_start, BT_KEYS_STORAGE_LEN);\n  if (err) {\n    BT_ERR(\"Failed to save keys (err %d)\", err);\n    return err;\n  }\n\n  BT_DBG(\"Stored keys for %s (%s)\", bt_addr_le_str(&keys->addr), log_strdup(key));\n\n  return 0;\n#endif // BFLB_BLE\n}\n\n#if !defined(BFLB_BLE)\nstatic int keys_set(const char *name, size_t len_rd, settings_read_cb read_cb, void *cb_arg) {\n  struct bt_keys *keys;\n  bt_addr_le_t    addr;\n  u8_t            id;\n  size_t          len;\n  int             err;\n  char            val[BT_KEYS_STORAGE_LEN];\n  const char     *next;\n\n  if (!name) {\n    BT_ERR(\"Insufficient number of arguments\");\n    return -EINVAL;\n  }\n\n  len = read_cb(cb_arg, val, sizeof(val));\n  if (len < 0) {\n    BT_ERR(\"Failed to read value (err %zu)\", len);\n    return -EINVAL;\n  }\n\n  BT_DBG(\"name %s val %s\", log_strdup(name), (len) ? bt_hex(val, sizeof(val)) : \"(null)\");\n\n  err = bt_settings_decode_key(name, &addr);\n  if (err) {\n    BT_ERR(\"Unable to decode address %s\", name);\n    return -EINVAL;\n  }\n\n  settings_name_next(name, &next);\n\n  if (!next) {\n    id = BT_ID_DEFAULT;\n  } else {\n    id = strtol(next, NULL, 10);\n  }\n\n  if (!len) {\n    keys = bt_keys_find(BT_KEYS_ALL, id, &addr);\n    if (keys) {\n      (void)memset(keys, 0, sizeof(*keys));\n      BT_DBG(\"Cleared keys for %s\", bt_addr_le_str(&addr));\n    } else {\n      BT_WARN(\"Unable to find deleted keys for %s\", bt_addr_le_str(&addr));\n    }\n\n    return 0;\n  }\n\n  keys = bt_keys_get_addr(id, &addr);\n  if (!keys) {\n    BT_ERR(\"Failed to allocate keys for %s\", bt_addr_le_str(&addr));\n    return -ENOMEM;\n  }\n  if (len != BT_KEYS_STORAGE_LEN) {\n    do {\n      /* Load shorter structure for compatibility with old\n       * records format with no counter.\n       */\n      if (IS_ENABLED(CONFIG_BT_KEYS_OVERWRITE_OLDEST) && len == BT_KEYS_STORAGE_LEN_COMPAT) {\n        BT_WARN(\"Keys for %s have no aging counter\", bt_addr_le_str(&addr));\n        memcpy(keys->storage_start, val, len);\n        continue;\n      }\n\n      BT_ERR(\"Invalid key length %zu != %zu\", len, BT_KEYS_STORAGE_LEN);\n      bt_keys_clear(keys);\n\n      return -EINVAL;\n    } while (0);\n  } else {\n    memcpy(keys->storage_start, val, len);\n  }\n\n  BT_DBG(\"Successfully restored keys for %s\", bt_addr_le_str(&addr));\n#if IS_ENABLED(CONFIG_BT_KEYS_OVERWRITE_OLDEST)\n  if (aging_counter_val < keys->aging_counter) {\n    aging_counter_val = keys->aging_counter;\n  }\n#endif /* CONFIG_BT_KEYS_OVERWRITE_OLDEST */\n  return 0;\n}\n#endif //!(BFLB_BLE)\n\nstatic void id_add(struct bt_keys *keys, void *user_data) { bt_id_add(keys); }\n\n#if defined(BFLB_BLE)\nint keys_commit(void)\n#else\nstatic int keys_commit(void)\n#endif\n{\n  BT_DBG(\"\");\n\n  /* We do this in commit() rather than add() since add() may get\n   * called multiple times for the same address, especially if\n   * the keys were already removed.\n   */\n  bt_keys_foreach(BT_KEYS_IRK, id_add, NULL);\n\n  return 0;\n}\n\n// SETTINGS_STATIC_HANDLER_DEFINE(bt_keys, \"bt/keys\", NULL, keys_set, keys_commit,\n//\t\t\t       NULL);\n\n#if defined(BFLB_BLE)\nint bt_keys_load(void) { return bt_settings_get_bin(NV_KEY_POOL, (u8_t *)&key_pool[0], sizeof(key_pool), NULL); }\n#endif\n\n#endif /* CONFIG_BT_SETTINGS */\n\n#if IS_ENABLED(CONFIG_BT_KEYS_OVERWRITE_OLDEST)\nvoid bt_keys_update_usage(u8_t id, const bt_addr_le_t *addr) {\n  struct bt_keys *keys = bt_keys_find_addr(id, addr);\n\n  if (!keys) {\n    return;\n  }\n\n  if (last_keys_updated == keys) {\n    return;\n  }\n\n  keys->aging_counter = ++aging_counter_val;\n  last_keys_updated   = keys;\n\n  BT_DBG(\"Aging counter for %s is set to %u\", bt_addr_le_str(addr), keys->aging_counter);\n\n  if (IS_ENABLED(CONFIG_BT_KEYS_SAVE_AGING_COUNTER_ON_PAIRING)) {\n    bt_keys_store(keys);\n  }\n}\n\n#endif /* CONFIG_BT_KEYS_OVERWRITE_OLDEST */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/keys.h",
    "content": "/* keys.h - Bluetooth key handling */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nenum {\n    BT_KEYS_SLAVE_LTK = BIT(0),\n    BT_KEYS_IRK = BIT(1),\n    BT_KEYS_LTK = BIT(2),\n    BT_KEYS_LOCAL_CSRK = BIT(3),\n    BT_KEYS_REMOTE_CSRK = BIT(4),\n    BT_KEYS_LTK_P256 = BIT(5),\n\n    BT_KEYS_ALL = (BT_KEYS_SLAVE_LTK | BT_KEYS_IRK |\n                   BT_KEYS_LTK | BT_KEYS_LOCAL_CSRK |\n                   BT_KEYS_REMOTE_CSRK | BT_KEYS_LTK_P256),\n};\n\nenum {\n    BT_KEYS_AUTHENTICATED = BIT(0),\n    BT_KEYS_DEBUG = BIT(1),\n    BT_KEYS_ID_PENDING_ADD = BIT(2),\n    BT_KEYS_ID_PENDING_DEL = BIT(3),\n    BT_KEYS_SC = BIT(4),\n};\n\nstruct bt_ltk {\n    u8_t rand[8];\n    u8_t ediv[2];\n    u8_t val[16];\n};\n\nstruct bt_irk {\n    u8_t val[16];\n    bt_addr_t rpa;\n};\n\nstruct bt_csrk {\n    u8_t val[16];\n    u32_t cnt;\n};\n\nstruct bt_keys {\n    u8_t id;\n    bt_addr_le_t addr;\n#if !defined(BFLB_BLE)\n    u8_t storage_start[0];\n#endif\n    u8_t enc_size;\n    u8_t flags;\n    u16_t keys;\n    struct bt_ltk ltk;\n    struct bt_irk irk;\n#if defined(CONFIG_BT_SIGNING)\n    struct bt_csrk local_csrk;\n    struct bt_csrk remote_csrk;\n#endif /* BT_SIGNING */\n#if !defined(CONFIG_BT_SMP_SC_PAIR_ONLY)\n    struct bt_ltk slave_ltk;\n#endif /* CONFIG_BT_SMP_SC_PAIR_ONLY */\n#if (defined(CONFIG_BT_KEYS_OVERWRITE_OLDEST))\n    u32_t aging_counter;\n#endif /* CONFIG_BT_KEYS_OVERWRITE_OLDEST */\n};\n\n#if !defined(BFLB_BLE)\n#define BT_KEYS_STORAGE_LEN (sizeof(struct bt_keys) - \\\n                             offsetof(struct bt_keys, storage_start))\n#endif\n\nvoid bt_keys_foreach(int type, void (*func)(struct bt_keys *keys, void *data),\n                     void *data);\n\nstruct bt_keys *bt_keys_get_addr(u8_t id, const bt_addr_le_t *addr);\nstruct bt_keys *bt_keys_get_type(int type, u8_t id, const bt_addr_le_t *addr);\nstruct bt_keys *bt_keys_find(int type, u8_t id, const bt_addr_le_t *addr);\nstruct bt_keys *bt_keys_find_irk(u8_t id, const bt_addr_le_t *addr);\nstruct bt_keys *bt_keys_find_addr(u8_t id, const bt_addr_le_t *addr);\n#if defined(CONFIG_BLE_AT_CMD)\nbt_addr_le_t *bt_get_keys_address(u8_t id);\n#endif\n\nvoid bt_keys_add_type(struct bt_keys *keys, int type);\nvoid bt_keys_clear(struct bt_keys *keys);\nvoid bt_keys_clear_all(u8_t id);\n#if defined(BFLB_BLE)\nint keys_commit(void);\nint bt_keys_load(void);\n#endif\n\n#if defined(CONFIG_BT_SETTINGS)\nint bt_keys_store(struct bt_keys *keys);\n#else\nstatic inline int bt_keys_store(struct bt_keys *keys)\n{\n    return 0;\n}\n#endif\n\nenum {\n    BT_LINK_KEY_AUTHENTICATED = BIT(0),\n    BT_LINK_KEY_DEBUG = BIT(1),\n    BT_LINK_KEY_SC = BIT(2),\n};\n\nstruct bt_keys_link_key {\n    bt_addr_t addr;\n    u8_t flags;\n    u8_t val[16];\n};\n\nstruct bt_keys_link_key *bt_keys_get_link_key(const bt_addr_t *addr);\nstruct bt_keys_link_key *bt_keys_find_link_key(const bt_addr_t *addr);\nvoid bt_keys_link_key_clear(struct bt_keys_link_key *link_key);\nvoid bt_keys_link_key_clear_addr(const bt_addr_t *addr);\n\n/* This function is used to signal that the key has been used for paring */\n/* It updates the aging counter and saves it to flash if configuration option */\n/* BT_KEYS_SAVE_AGING_COUNTER_ON_PAIRING is enabled */\nvoid bt_keys_update_usage(u8_t id, const bt_addr_le_t *addr);\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/keys_br.c",
    "content": "/* keys_br.c - Bluetooth BR/EDR key handling */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <atomic.h>\n#include <string.h>\n#include <util.h>\n#include <zephyr.h>\n\n#include <bluetooth.h>\n#include <conn.h>\n#include <hci_host.h>\n#include <settings.h>\n\n#define BT_DBG_ENABLED  IS_ENABLED(CONFIG_BT_DEBUG_KEYS)\n#define LOG_MODULE_NAME bt_keys_br\n#include \"log.h\"\n\n#include \"hci_core.h\"\n#include \"keys.h\"\n#include \"settings.h\"\n\nstatic struct bt_keys_link_key key_pool[CONFIG_BT_MAX_PAIRED];\n\n#if IS_ENABLED(CONFIG_BT_KEYS_OVERWRITE_OLDEST)\nstatic uint32_t                 aging_counter_val;\nstatic struct bt_keys_link_key *last_keys_updated;\n#endif /* CONFIG_BT_KEYS_OVERWRITE_OLDEST */\n\nstruct bt_keys_link_key *bt_keys_find_link_key(const bt_addr_t *addr) {\n  struct bt_keys_link_key *key;\n  int                      i;\n\n  BT_DBG(\"%s\", bt_addr_str(addr));\n\n  for (i = 0; i < ARRAY_SIZE(key_pool); i++) {\n    key = &key_pool[i];\n\n    if (!bt_addr_cmp(&key->addr, addr)) {\n      return key;\n    }\n  }\n\n  return NULL;\n}\n\nstruct bt_keys_link_key *bt_keys_get_link_key(const bt_addr_t *addr) {\n  struct bt_keys_link_key *key;\n\n  key = bt_keys_find_link_key(addr);\n  if (key) {\n    return key;\n  }\n\n  key = bt_keys_find_link_key(BT_ADDR_ANY);\n#if 0 // IS_ENABLED(CONFIG_BT_KEYS_OVERWRITE_OLDEST) //MBHJ\n\tif (!key) {\n\t\tint i;\n\n\t\tkey = &key_pool[0];\n\t\tfor (i = 1; i < ARRAY_SIZE(key_pool); i++) {\n\t\t\tstruct bt_keys_link_key *current = &key_pool[i];\n\n\t\t\tif (current->aging_counter < key->aging_counter) {\n\t\t\t\tkey = current;\n\t\t\t}\n\t\t}\n\n\t\tif (key) {\n\t\t\tbt_keys_link_key_clear(key);\n\t\t}\n\t}\n#endif\n\n  if (key) {\n    bt_addr_copy(&key->addr, addr);\n#if 0 // IS_ENABLED(CONFIG_BT_KEYS_OVERWRITE_OLDEST) //MBHJ\n\t\tkey->aging_counter = ++aging_counter_val;\n\t\tlast_keys_updated = key;\n#endif\n    BT_DBG(\"created %p for %s\", key, bt_addr_str(addr));\n    return key;\n  }\n\n  BT_DBG(\"unable to create keys for %s\", bt_addr_str(addr));\n\n  return NULL;\n}\n\nvoid bt_keys_link_key_clear(struct bt_keys_link_key *link_key) {\n  if (IS_ENABLED(CONFIG_BT_SETTINGS)) {\n    char         key[BT_SETTINGS_KEY_MAX];\n    bt_addr_le_t le_addr;\n\n    le_addr.type = BT_ADDR_LE_PUBLIC;\n    bt_addr_copy(&le_addr.a, &link_key->addr);\n    bt_settings_encode_key(key, sizeof(key), \"link_key\", &le_addr, NULL);\n    settings_delete(key);\n  }\n\n  BT_DBG(\"%s\", bt_addr_str(&link_key->addr));\n  (void)memset(link_key, 0, sizeof(*link_key));\n}\n\nvoid bt_keys_link_key_clear_addr(const bt_addr_t *addr) {\n  int                      i;\n  struct bt_keys_link_key *key;\n\n  if (!addr) {\n    for (i = 0; i < ARRAY_SIZE(key_pool); i++) {\n      key = &key_pool[i];\n      bt_keys_link_key_clear(key);\n    }\n    return;\n  }\n\n  key = bt_keys_find_link_key(addr);\n  if (key) {\n    bt_keys_link_key_clear(key);\n  }\n}\n\nvoid bt_keys_link_key_store(struct bt_keys_link_key *link_key) {\n#if 0 // MBHJ\n\tif (IS_ENABLED(CONFIG_BT_SETTINGS)) {\n\t\tint err;\n\t\tchar key[BT_SETTINGS_KEY_MAX];\n\t\tbt_addr_le_t le_addr;\n\n\t\tle_addr.type = BT_ADDR_LE_PUBLIC;\n\t\tbt_addr_copy(&le_addr.a, &link_key->addr);\n\t\tbt_settings_encode_key(key, sizeof(key), \"link_key\",\n\t\t\t\t       &le_addr, NULL);\n\n\t\terr = settings_save_one(key, link_key->storage_start,\n\t\t\t\t\tBT_KEYS_LINK_KEY_STORAGE_LEN);\n\t\tif (err) {\n\t\t\tBT_ERR(\"Failed to svae link key (err %d)\", err);\n\t\t}\n\t}\n#endif\n}\n\n#if defined(CONFIG_BT_SETTINGS)\n\nstatic int link_key_set(const char *name, size_t len_rd, settings_read_cb read_cb, void *cb_arg) {\n  int                      err;\n  ssize_t                  len;\n  bt_addr_le_t             le_addr;\n  struct bt_keys_link_key *link_key;\n  char                     val[BT_KEYS_LINK_KEY_STORAGE_LEN];\n\n  if (!name) {\n    BT_ERR(\"Insufficient number of arguments\");\n    return -EINVAL;\n  }\n\n  len = read_cb(cb_arg, val, sizeof(val));\n  if (len < 0) {\n    BT_ERR(\"Failed to read value (err %zu)\", len);\n    return -EINVAL;\n  }\n\n  BT_DBG(\"name %s val %s\", log_strdup(name), len ? bt_hex(val, sizeof(val)) : \"(null)\");\n\n  err = bt_settings_decode_key(name, &le_addr);\n  if (err) {\n    BT_ERR(\"Unable to decode address %s\", name);\n    return -EINVAL;\n  }\n\n  link_key = bt_keys_get_link_key(&le_addr.a);\n  if (len != BT_KEYS_LINK_KEY_STORAGE_LEN) {\n    if (link_key) {\n      bt_keys_link_key_clear(link_key);\n      BT_DBG(\"Clear keys for %s\", bt_addr_le_str(&le_addr));\n    } else {\n      BT_WARN(\"Unable to find deleted keys for %s\", bt_addr_le_str(&le_addr));\n    }\n\n    return 0;\n  }\n\n  memcpy(link_key->storage_start, val, len);\n  BT_DBG(\"Successfully restored link key for %s\", bt_addr_le_str(&le_addr));\n#if IS_ENABLED(CONFIG_BT_KEYS_OVERWRITE_OLDEST)\n  if (aging_counter_val < link_key->aging_counter) {\n    aging_counter_val = link_key->aging_counter;\n  }\n#endif /* CONFIG_BT_KEYS_OVERWRITE_OLDEST */\n\n  return 0;\n}\n\nstatic int link_key_commit(void) { return 0; }\n\nSETTINGS_STATIC_HANDLER_DEFINE(bt_link_key, \"bt/link_key\", NULL, link_key_set, link_key_commit, NULL);\n\nvoid bt_keys_link_key_update_usage(const bt_addr_t *addr) {\n  struct bt_keys_link_key *link_key = bt_keys_find_link_key(addr);\n\n  if (!link_key) {\n    return;\n  }\n\n  if (last_keys_updated == link_key) {\n    return;\n  }\n\n  link_key->aging_counter = ++aging_counter_val;\n  last_keys_updated       = link_key;\n\n  BT_DBG(\"Aging counter for %s is set to %u\", bt_addr_str(addr), link_key->aging_counter);\n\n  if (IS_ENABLED(CONFIG_BT_KEYS_SAVE_AGING_COUNTER_ON_PAIRING)) {\n    bt_keys_link_key_store(link_key);\n  }\n}\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/l2cap.c",
    "content": "/* l2cap.c - L2CAP handling */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <atomic.h>\n#include <errno.h>\n#include <misc/byteorder.h>\n#include <misc/util.h>\n#include <string.h>\n#include <zephyr.h>\n\n#include <bluetooth.h>\n#include <conn.h>\n#include <hci_driver.h>\n#include <hci_host.h>\n\n#define BT_DBG_ENABLED  IS_ENABLED(CONFIG_BT_DEBUG_L2CAP)\n#define LOG_MODULE_NAME bt_l2cap\n#include \"log.h\"\n\n#include \"conn_internal.h\"\n#include \"hci_core.h\"\n#include \"l2cap_internal.h\"\n\n#include \"ble_config.h\"\n\n#define LE_CHAN_RTX(_w) CONTAINER_OF(_w, struct bt_l2cap_le_chan, chan.rtx_work)\n#define CHAN_RX(_w)     CONTAINER_OF(_w, struct bt_l2cap_le_chan, rx_work)\n\n#define L2CAP_LE_MIN_MTU 23\n\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\n#define L2CAP_LE_MAX_CREDITS (CONFIG_BT_ACL_RX_COUNT - 1)\n#else\n#define L2CAP_LE_MAX_CREDITS (CONFIG_BT_RX_BUF_COUNT - 1)\n#endif\n\n#define L2CAP_LE_CID_DYN_START    0x0040\n#define L2CAP_LE_CID_DYN_END      0x007f\n#define L2CAP_LE_CID_IS_DYN(_cid) (_cid >= L2CAP_LE_CID_DYN_START && _cid <= L2CAP_LE_CID_DYN_END)\n\n#define L2CAP_LE_PSM_FIXED_START 0x0001\n#define L2CAP_LE_PSM_FIXED_END   0x007f\n#define L2CAP_LE_PSM_DYN_START   0x0080\n#define L2CAP_LE_PSM_DYN_END     0x00ff\n\n#define L2CAP_CONN_TIMEOUT K_SECONDS(40)\n#define L2CAP_DISC_TIMEOUT K_SECONDS(2)\n\n#if defined(BFLB_BLE_DISABLE_STATIC_CHANNEL)\nstatic sys_slist_t le_channels;\n#endif\n\n#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)\n/* Size of MTU is based on the maximum amount of data the buffer can hold\n * excluding ACL and driver headers.\n */\n#define L2CAP_MAX_LE_MPS BT_L2CAP_RX_MTU\n/* For now use MPS - SDU length to disable segmentation */\n#define L2CAP_MAX_LE_MTU (L2CAP_MAX_LE_MPS - 2)\n\n#define l2cap_lookup_ident(conn, ident) __l2cap_lookup_ident(conn, ident, false)\n#define l2cap_remove_ident(conn, ident) __l2cap_lookup_ident(conn, ident, true)\n\nstatic sys_slist_t servers;\n\n#endif /* CONFIG_BT_L2CAP_DYNAMIC_CHANNEL */\n\n/* L2CAP signalling channel specific context */\nstruct bt_l2cap {\n  /* The channel this context is associated with */\n  struct bt_l2cap_le_chan chan;\n};\n\nstatic struct bt_l2cap bt_l2cap_pool[CONFIG_BT_MAX_CONN];\n\nstatic u8_t get_ident(void) {\n  static u8_t ident;\n\n  ident++;\n  /* handle integer overflow (0 is not valid) */\n  if (!ident) {\n    ident++;\n  }\n\n  return ident;\n}\n\n#if defined(BFLB_BLE_DISABLE_STATIC_CHANNEL)\nvoid bt_l2cap_le_fixed_chan_register(struct bt_l2cap_fixed_chan *chan) {\n  BT_DBG(\"CID 0x%04x\", chan->cid);\n\n  sys_slist_append(&le_channels, &chan->node);\n}\n#endif\n\n#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)\nstatic struct bt_l2cap_le_chan *l2cap_chan_alloc_cid(struct bt_conn *conn, struct bt_l2cap_chan *chan) {\n  struct bt_l2cap_le_chan *ch = BT_L2CAP_LE_CHAN(chan);\n  u16_t                    cid;\n\n  /*\n   * No action needed if there's already a CID allocated, e.g. in\n   * the case of a fixed channel.\n   */\n  if (ch && ch->rx.cid > 0) {\n    return ch;\n  }\n\n  for (cid = L2CAP_LE_CID_DYN_START; cid <= L2CAP_LE_CID_DYN_END; cid++) {\n    if (ch && !bt_l2cap_le_lookup_rx_cid(conn, cid)) {\n      ch->rx.cid = cid;\n      return ch;\n    }\n  }\n\n  return NULL;\n}\n\nstatic struct bt_l2cap_le_chan *__l2cap_lookup_ident(struct bt_conn *conn, u16_t ident, bool remove) {\n  struct bt_l2cap_chan *chan;\n  sys_snode_t          *prev = NULL;\n\n  SYS_SLIST_FOR_EACH_CONTAINER(&conn->channels, chan, node) {\n    if (chan->ident == ident) {\n      if (remove) {\n        sys_slist_remove(&conn->channels, prev, &chan->node);\n      }\n      return BT_L2CAP_LE_CHAN(chan);\n    }\n\n    prev = &chan->node;\n  }\n\n  return NULL;\n}\n#endif /* CONFIG_BT_L2CAP_DYNAMIC_CHANNEL */\n\nvoid bt_l2cap_chan_remove(struct bt_conn *conn, struct bt_l2cap_chan *ch) {\n  struct bt_l2cap_chan *chan;\n  sys_snode_t          *prev = NULL;\n\n  SYS_SLIST_FOR_EACH_CONTAINER(&conn->channels, chan, node) {\n    if (chan == ch) {\n      sys_slist_remove(&conn->channels, prev, &chan->node);\n      return;\n    }\n\n    prev = &chan->node;\n  }\n}\n\nconst char *bt_l2cap_chan_state_str(bt_l2cap_chan_state_t state) {\n  switch (state) {\n  case BT_L2CAP_DISCONNECTED:\n    return \"disconnected\";\n  case BT_L2CAP_CONNECT:\n    return \"connect\";\n  case BT_L2CAP_CONFIG:\n    return \"config\";\n  case BT_L2CAP_CONNECTED:\n    return \"connected\";\n  case BT_L2CAP_DISCONNECT:\n    return \"disconnect\";\n  default:\n    return \"unknown\";\n  }\n}\n\n#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)\n#if defined(CONFIG_BT_DEBUG_L2CAP)\nvoid bt_l2cap_chan_set_state_debug(struct bt_l2cap_chan *chan, bt_l2cap_chan_state_t state, const char *func, int line) {\n  BT_DBG(\"chan %p psm 0x%04x %s -> %s\", chan, chan->psm, bt_l2cap_chan_state_str(chan->state), bt_l2cap_chan_state_str(state));\n\n  /* check transitions validness */\n  switch (state) {\n  case BT_L2CAP_DISCONNECTED:\n    /* regardless of old state always allows this state */\n    break;\n  case BT_L2CAP_CONNECT:\n    if (chan->state != BT_L2CAP_DISCONNECTED) {\n      BT_WARN(\"%s()%d: invalid transition\", func, line);\n    }\n    break;\n  case BT_L2CAP_CONFIG:\n    if (chan->state != BT_L2CAP_CONNECT) {\n      BT_WARN(\"%s()%d: invalid transition\", func, line);\n    }\n    break;\n  case BT_L2CAP_CONNECTED:\n    if (chan->state != BT_L2CAP_CONFIG && chan->state != BT_L2CAP_CONNECT) {\n      BT_WARN(\"%s()%d: invalid transition\", func, line);\n    }\n    break;\n  case BT_L2CAP_DISCONNECT:\n    if (chan->state != BT_L2CAP_CONFIG && chan->state != BT_L2CAP_CONNECTED) {\n      BT_WARN(\"%s()%d: invalid transition\", func, line);\n    }\n    break;\n  default:\n    BT_ERR(\"%s()%d: unknown (%u) state was set\", func, line, state);\n    return;\n  }\n\n  chan->state = state;\n}\n#else\nvoid bt_l2cap_chan_set_state(struct bt_l2cap_chan *chan, bt_l2cap_chan_state_t state) { chan->state = state; }\n#endif /* CONFIG_BT_DEBUG_L2CAP */\n#endif /* CONFIG_BT_L2CAP_DYNAMIC_CHANNEL */\n\nvoid bt_l2cap_chan_del(struct bt_l2cap_chan *chan) {\n  BT_DBG(\"conn %p chan %p\", chan->conn, chan);\n\n  if (!chan->conn) {\n    goto destroy;\n  }\n\n  if (chan->ops->disconnected) {\n    chan->ops->disconnected(chan);\n  }\n\n  chan->conn = NULL;\n\ndestroy:\n#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)\n  /* Reset internal members of common channel */\n  bt_l2cap_chan_set_state(chan, BT_L2CAP_DISCONNECTED);\n  chan->psm = 0U;\n#endif\n\n  if (chan->destroy) {\n    chan->destroy(chan);\n  }\n\n#ifdef BFLB_BLE_PATCH_FREE_ALLOCATED_BUFFER_IN_OS\n  if (chan->rtx_work.timer.timer.hdl)\n    k_delayed_work_del_timer(&chan->rtx_work);\n#endif\n}\n\nstatic void l2cap_rtx_timeout(struct k_work *work) {\n  struct bt_l2cap_le_chan *chan = LE_CHAN_RTX(work);\n\n  BT_ERR(\"chan %p timeout\", chan);\n\n  bt_l2cap_chan_remove(chan->chan.conn, &chan->chan);\n  bt_l2cap_chan_del(&chan->chan);\n}\n\n#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)\nstatic void l2cap_chan_le_recv(struct bt_l2cap_le_chan *chan, struct net_buf *buf);\n\nstatic void l2cap_rx_process(struct k_work *work) {\n  struct bt_l2cap_le_chan *ch = CHAN_RX(work);\n  struct net_buf          *buf;\n\n  while ((buf = net_buf_get(&ch->rx_queue, K_NO_WAIT))) {\n    BT_DBG(\"ch %p buf %p\", ch, buf);\n    l2cap_chan_le_recv(ch, buf);\n    net_buf_unref(buf);\n  }\n}\n#endif /* CONFIG_BT_L2CAP_DYNAMIC_CHANNEL */\n\nvoid bt_l2cap_chan_add(struct bt_conn *conn, struct bt_l2cap_chan *chan, bt_l2cap_chan_destroy_t destroy) {\n  /* Attach channel to the connection */\n  sys_slist_append(&conn->channels, &chan->node);\n  chan->conn    = conn;\n  chan->destroy = destroy;\n\n  BT_DBG(\"conn %p chan %p\", conn, chan);\n}\n\nstatic bool l2cap_chan_add(struct bt_conn *conn, struct bt_l2cap_chan *chan, bt_l2cap_chan_destroy_t destroy) {\n  struct bt_l2cap_le_chan *ch;\n\n#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)\n  ch = l2cap_chan_alloc_cid(conn, chan);\n#else\n  ch = BT_L2CAP_LE_CHAN(chan);\n#endif\n\n  if (!ch) {\n    BT_ERR(\"Unable to allocate L2CAP CID\");\n    return false;\n  }\n\n  k_delayed_work_init(&chan->rtx_work, l2cap_rtx_timeout);\n\n  bt_l2cap_chan_add(conn, chan, destroy);\n\n#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)\n  if (L2CAP_LE_CID_IS_DYN(ch->rx.cid)) {\n    k_work_init(&ch->rx_work, l2cap_rx_process);\n    k_fifo_init(&ch->rx_queue, 20);\n    bt_l2cap_chan_set_state(chan, BT_L2CAP_CONNECT);\n  }\n#endif /* CONFIG_BT_L2CAP_DYNAMIC_CHANNEL */\n\n  return true;\n}\n\nvoid bt_l2cap_connected(struct bt_conn *conn) {\n#if defined(BFLB_BLE_DISABLE_STATIC_CHANNEL)\n  struct bt_l2cap_fixed_chan *fchan;\n#endif\n  struct bt_l2cap_chan *chan;\n\n  if (IS_ENABLED(CONFIG_BT_BREDR) && conn->type == BT_CONN_TYPE_BR) {\n    bt_l2cap_br_connected(conn);\n    return;\n  }\n\n#if defined(BFLB_BLE_DISABLE_STATIC_CHANNEL)\n  SYS_SLIST_FOR_EACH_CONTAINER(&le_channels, fchan, node) {\n#else\n  Z_STRUCT_SECTION_FOREACH(bt_l2cap_fixed_chan, fchan) {\n#endif\n    struct bt_l2cap_le_chan *ch;\n\n    if (fchan->accept(conn, &chan) < 0) {\n      continue;\n    }\n\n    ch = BT_L2CAP_LE_CHAN(chan);\n\n    /* Fill up remaining fixed channel context attached in\n     * fchan->accept()\n     */\n    ch->rx.cid = fchan->cid;\n    ch->tx.cid = fchan->cid;\n\n    if (!l2cap_chan_add(conn, chan, NULL)) {\n      return;\n    }\n\n    if (chan->ops->connected) {\n      chan->ops->connected(chan);\n    }\n\n    /* Always set output status to fixed channels */\n    atomic_set_bit(chan->status, BT_L2CAP_STATUS_OUT);\n\n    if (chan->ops->status) {\n      chan->ops->status(chan, chan->status);\n    }\n  }\n}\n\nvoid bt_l2cap_disconnected(struct bt_conn *conn) {\n  struct bt_l2cap_chan *chan, *next;\n\n  SYS_SLIST_FOR_EACH_CONTAINER_SAFE(&conn->channels, chan, next, node) { bt_l2cap_chan_del(chan); }\n}\n\nstatic struct net_buf *l2cap_create_le_sig_pdu(struct net_buf *buf, u8_t code, u8_t ident, u16_t len) {\n  struct bt_l2cap_sig_hdr *hdr;\n\n  /* Don't wait more than the minimum RTX timeout of 2 seconds */\n  buf = bt_l2cap_create_pdu_timeout(NULL, 0, K_SECONDS(2));\n  if (!buf) {\n    /* If it was not possible to allocate a buffer within the\n     * timeout return NULL.\n     */\n    BT_ERR(\"Unable to allocate buffer for op 0x%02x\", code);\n    return NULL;\n  }\n\n  hdr        = net_buf_add(buf, sizeof(*hdr));\n  hdr->code  = code;\n  hdr->ident = ident;\n  hdr->len   = sys_cpu_to_le16(len);\n\n  return buf;\n}\n\n#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)\nstatic void l2cap_chan_send_req(struct bt_l2cap_le_chan *chan, struct net_buf *buf, s32_t timeout) {\n  /* BLUETOOTH SPECIFICATION Version 4.2 [Vol 3, Part A] page 126:\n   *\n   * The value of this timer is implementation-dependent but the minimum\n   * initial value is 1 second and the maximum initial value is 60\n   * seconds. One RTX timer shall exist for each outstanding signaling\n   * request, including each Echo Request. The timer disappears on the\n   * final expiration, when the response is received, or the physical\n   * link is lost.\n   */\n  if (timeout) {\n    k_delayed_work_submit(&chan->chan.rtx_work, timeout);\n  } else {\n    k_delayed_work_cancel(&chan->chan.rtx_work);\n  }\n\n  bt_l2cap_send(chan->chan.conn, BT_L2CAP_CID_LE_SIG, buf);\n}\n\nstatic int l2cap_le_conn_req(struct bt_l2cap_le_chan *ch) {\n  struct net_buf              *buf;\n  struct bt_l2cap_le_conn_req *req;\n\n  ch->chan.ident = get_ident();\n\n  buf = l2cap_create_le_sig_pdu(NULL, BT_L2CAP_LE_CONN_REQ, ch->chan.ident, sizeof(*req));\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  req          = net_buf_add(buf, sizeof(*req));\n  req->psm     = sys_cpu_to_le16(ch->chan.psm);\n  req->scid    = sys_cpu_to_le16(ch->rx.cid);\n  req->mtu     = sys_cpu_to_le16(ch->rx.mtu);\n  req->mps     = sys_cpu_to_le16(ch->rx.mps);\n  req->credits = sys_cpu_to_le16(ch->rx.init_credits);\n\n  l2cap_chan_send_req(ch, buf, L2CAP_CONN_TIMEOUT);\n\n  return 0;\n}\n\nstatic void l2cap_le_encrypt_change(struct bt_l2cap_chan *chan, u8_t status) {\n  /* Skip channels already connected or with a pending request */\n  if (chan->state != BT_L2CAP_CONNECT || chan->ident) {\n    return;\n  }\n\n  if (status) {\n    bt_l2cap_chan_remove(chan->conn, chan);\n    bt_l2cap_chan_del(chan);\n    return;\n  }\n\n  /* Retry to connect */\n  l2cap_le_conn_req(BT_L2CAP_LE_CHAN(chan));\n}\n#endif /* CONFIG_BT_L2CAP_DYNAMIC_CHANNEL */\n\nvoid bt_l2cap_encrypt_change(struct bt_conn *conn, u8_t hci_status) {\n  struct bt_l2cap_chan *chan;\n\n  if (IS_ENABLED(CONFIG_BT_BREDR) && conn->type == BT_CONN_TYPE_BR) {\n    l2cap_br_encrypt_change(conn, hci_status);\n    return;\n  }\n\n  SYS_SLIST_FOR_EACH_CONTAINER(&conn->channels, chan, node) {\n#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)\n    l2cap_le_encrypt_change(chan, hci_status);\n#endif\n\n    if (chan->ops->encrypt_change) {\n      chan->ops->encrypt_change(chan, hci_status);\n    }\n  }\n}\n\nstruct net_buf *bt_l2cap_create_pdu_timeout(struct net_buf_pool *pool, size_t reserve, s32_t timeout) { return bt_conn_create_pdu_timeout(pool, sizeof(struct bt_l2cap_hdr) + reserve, timeout); }\n\nint bt_l2cap_send_cb(struct bt_conn *conn, u16_t cid, struct net_buf *buf, bt_conn_tx_cb_t cb, void *user_data) {\n  struct bt_l2cap_hdr *hdr;\n\n  BT_DBG(\"conn %p cid %u len %zu\", conn, cid, net_buf_frags_len(buf));\n\n  hdr      = net_buf_push(buf, sizeof(*hdr));\n  hdr->len = sys_cpu_to_le16(buf->len - sizeof(*hdr));\n  hdr->cid = sys_cpu_to_le16(cid);\n\n  return bt_conn_send_cb(conn, buf, cb, user_data);\n}\n\nstatic void l2cap_send_reject(struct bt_conn *conn, u8_t ident, u16_t reason, void *data, u8_t data_len) {\n  struct bt_l2cap_cmd_reject *rej;\n  struct net_buf             *buf;\n\n  buf = l2cap_create_le_sig_pdu(NULL, BT_L2CAP_CMD_REJECT, ident, sizeof(*rej) + data_len);\n  if (!buf) {\n    return;\n  }\n\n  rej         = net_buf_add(buf, sizeof(*rej));\n  rej->reason = sys_cpu_to_le16(reason);\n\n  if (data) {\n    net_buf_add_mem(buf, data, data_len);\n  }\n\n  bt_l2cap_send(conn, BT_L2CAP_CID_LE_SIG, buf);\n}\n\nstatic void le_conn_param_rsp(struct bt_l2cap *l2cap, struct net_buf *buf) {\n  struct bt_l2cap_conn_param_rsp *rsp = (void *)buf->data;\n\n  if (buf->len < sizeof(*rsp)) {\n    BT_ERR(\"Too small LE conn param rsp\");\n    return;\n  }\n\n  BT_DBG(\"LE conn param rsp result %u\", sys_le16_to_cpu(rsp->result));\n}\n\nstatic void le_conn_param_update_req(struct bt_l2cap *l2cap, u8_t ident, struct net_buf *buf) {\n  struct bt_conn                 *conn = l2cap->chan.chan.conn;\n  struct bt_le_conn_param         param;\n  struct bt_l2cap_conn_param_rsp *rsp;\n  struct bt_l2cap_conn_param_req *req = (void *)buf->data;\n  bool                            accepted;\n\n  if (buf->len < sizeof(*req)) {\n    BT_ERR(\"Too small LE conn update param req\");\n    return;\n  }\n\n  if (conn->role != BT_HCI_ROLE_MASTER) {\n    l2cap_send_reject(conn, ident, BT_L2CAP_REJ_NOT_UNDERSTOOD, NULL, 0);\n    return;\n  }\n\n  param.interval_min = sys_le16_to_cpu(req->min_interval);\n  param.interval_max = sys_le16_to_cpu(req->max_interval);\n  param.latency      = sys_le16_to_cpu(req->latency);\n  param.timeout      = sys_le16_to_cpu(req->timeout);\n\n  BT_DBG(\"min 0x%04x max 0x%04x latency: 0x%04x timeout: 0x%04x\", param.interval_min, param.interval_max, param.latency, param.timeout);\n\n  buf = l2cap_create_le_sig_pdu(buf, BT_L2CAP_CONN_PARAM_RSP, ident, sizeof(*rsp));\n  if (!buf) {\n    return;\n  }\n\n  accepted = le_param_req(conn, &param);\n\n  rsp = net_buf_add(buf, sizeof(*rsp));\n  if (accepted) {\n    rsp->result = sys_cpu_to_le16(BT_L2CAP_CONN_PARAM_ACCEPTED);\n  } else {\n    rsp->result = sys_cpu_to_le16(BT_L2CAP_CONN_PARAM_REJECTED);\n  }\n\n  bt_l2cap_send(conn, BT_L2CAP_CID_LE_SIG, buf);\n\n  if (accepted) {\n    bt_conn_le_conn_update(conn, &param);\n  }\n}\n\nstruct bt_l2cap_chan *bt_l2cap_le_lookup_tx_cid(struct bt_conn *conn, u16_t cid) {\n  struct bt_l2cap_chan *chan;\n\n  SYS_SLIST_FOR_EACH_CONTAINER(&conn->channels, chan, node) {\n    if (BT_L2CAP_LE_CHAN(chan)->tx.cid == cid) {\n      return chan;\n    }\n  }\n\n  return NULL;\n}\n\nstruct bt_l2cap_chan *bt_l2cap_le_lookup_rx_cid(struct bt_conn *conn, u16_t cid) {\n  struct bt_l2cap_chan *chan;\n\n  SYS_SLIST_FOR_EACH_CONTAINER(&conn->channels, chan, node) {\n    if (BT_L2CAP_LE_CHAN(chan)->rx.cid == cid) {\n      return chan;\n    }\n  }\n\n  return NULL;\n}\n\n#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)\nstatic struct bt_l2cap_server *l2cap_server_lookup_psm(u16_t psm) {\n  struct bt_l2cap_server *server;\n\n  SYS_SLIST_FOR_EACH_CONTAINER(&servers, server, node) {\n    if (server->psm == psm) {\n      return server;\n    }\n  }\n\n  return NULL;\n}\n\nint bt_l2cap_server_register(struct bt_l2cap_server *server) {\n  if (!server->accept) {\n    return -EINVAL;\n  }\n\n  if (server->psm) {\n    if (server->psm < L2CAP_LE_PSM_FIXED_START || server->psm > L2CAP_LE_PSM_DYN_END) {\n      return -EINVAL;\n    }\n\n    /* Check if given PSM is already in use */\n    if (l2cap_server_lookup_psm(server->psm)) {\n      BT_DBG(\"PSM already registered\");\n      return -EADDRINUSE;\n    }\n  } else {\n    u16_t psm;\n\n    for (psm = L2CAP_LE_PSM_DYN_START; psm <= L2CAP_LE_PSM_DYN_END; psm++) {\n      if (!l2cap_server_lookup_psm(psm)) {\n        break;\n      }\n    }\n\n    if (psm > L2CAP_LE_PSM_DYN_END) {\n      BT_WARN(\"No free dynamic PSMs available\");\n      return -EADDRNOTAVAIL;\n    }\n\n    BT_DBG(\"Allocated PSM 0x%04x for new server\", psm);\n    server->psm = psm;\n  }\n\n  if (server->sec_level > BT_SECURITY_L4) {\n    return -EINVAL;\n  } else if (server->sec_level < BT_SECURITY_L1) {\n    /* Level 0 is only applicable for BR/EDR */\n    server->sec_level = BT_SECURITY_L1;\n  }\n\n  BT_DBG(\"PSM 0x%04x\", server->psm);\n\n  sys_slist_append(&servers, &server->node);\n\n  return 0;\n}\n\nstatic void l2cap_chan_rx_init(struct bt_l2cap_le_chan *chan) {\n  BT_DBG(\"chan %p\", chan);\n\n  /* Use existing MTU if defined */\n  if (!chan->rx.mtu) {\n    chan->rx.mtu = L2CAP_MAX_LE_MTU;\n  }\n\n  /* Use existing credits if defined */\n  if (!chan->rx.init_credits) {\n    if (chan->chan.ops->alloc_buf) {\n      /* Auto tune credits to receive a full packet */\n      chan->rx.init_credits = (chan->rx.mtu + (L2CAP_MAX_LE_MPS - 1)) / L2CAP_MAX_LE_MPS;\n    } else {\n      chan->rx.init_credits = L2CAP_LE_MAX_CREDITS;\n    }\n  }\n\n  /* MPS shall not be bigger than MTU + 2 as the remaining bytes cannot\n   * be used.\n   */\n  chan->rx.mps = MIN(chan->rx.mtu + 2, L2CAP_MAX_LE_MPS);\n  k_sem_init(&chan->rx.credits, 0, BT_UINT_MAX);\n\n  if (BT_DBG_ENABLED && chan->rx.init_credits * chan->rx.mps < chan->rx.mtu + 2) {\n    BT_WARN(\"Not enough credits for a full packet\");\n  }\n}\n\nstatic void l2cap_chan_tx_init(struct bt_l2cap_le_chan *chan) {\n  BT_DBG(\"chan %p\", chan);\n\n  (void)memset(&chan->tx, 0, sizeof(chan->tx));\n  k_sem_init(&chan->tx.credits, 0, BT_UINT_MAX);\n  k_fifo_init(&chan->tx_queue, 20);\n}\n\nstatic void l2cap_chan_tx_give_credits(struct bt_l2cap_le_chan *chan, u16_t credits) {\n  BT_DBG(\"chan %p credits %u\", chan, credits);\n\n  while (credits--) {\n    k_sem_give(&chan->tx.credits);\n  }\n\n  if (atomic_test_and_set_bit(chan->chan.status, BT_L2CAP_STATUS_OUT) && chan->chan.ops->status) {\n    chan->chan.ops->status(&chan->chan, chan->chan.status);\n  }\n}\n\nstatic void l2cap_chan_rx_give_credits(struct bt_l2cap_le_chan *chan, u16_t credits) {\n  BT_DBG(\"chan %p credits %u\", chan, credits);\n\n  while (credits--) {\n    k_sem_give(&chan->rx.credits);\n  }\n}\n\nstatic void l2cap_chan_destroy(struct bt_l2cap_chan *chan) {\n  struct bt_l2cap_le_chan *ch = BT_L2CAP_LE_CHAN(chan);\n  struct net_buf          *buf;\n\n  BT_DBG(\"chan %p cid 0x%04x\", ch, ch->rx.cid);\n\n  /* Cancel ongoing work */\n  k_delayed_work_cancel(&chan->rtx_work);\n\n  if (ch->tx_buf) {\n    net_buf_unref(ch->tx_buf);\n    ch->tx_buf = NULL;\n  }\n\n  /* Remove buffers on the TX queue */\n  while ((buf = net_buf_get(&ch->tx_queue, K_NO_WAIT))) {\n    net_buf_unref(buf);\n  }\n\n  /* Remove buffers on the RX queue */\n  while ((buf = net_buf_get(&ch->rx_queue, K_NO_WAIT))) {\n    net_buf_unref(buf);\n  }\n\n  /* Destroy segmented SDU if it exists */\n  if (ch->_sdu) {\n    net_buf_unref(ch->_sdu);\n    ch->_sdu     = NULL;\n    ch->_sdu_len = 0U;\n  }\n}\n\nstatic u16_t le_err_to_result(int err) {\n  switch (err) {\n  case -ENOMEM:\n    return BT_L2CAP_LE_ERR_NO_RESOURCES;\n  case -EACCES:\n    return BT_L2CAP_LE_ERR_AUTHORIZATION;\n  case -EPERM:\n    return BT_L2CAP_LE_ERR_KEY_SIZE;\n  case -ENOTSUP:\n    /* This handle the cases where a fixed channel is registered but\n     * for some reason (e.g. controller not suporting a feature)\n     * cannot be used.\n     */\n    return BT_L2CAP_LE_ERR_PSM_NOT_SUPP;\n  default:\n    return BT_L2CAP_LE_ERR_UNACCEPT_PARAMS;\n  }\n}\n\nstatic void le_conn_req(struct bt_l2cap *l2cap, u8_t ident, struct net_buf *buf) {\n  struct bt_conn              *conn = l2cap->chan.chan.conn;\n  struct bt_l2cap_chan        *chan;\n  struct bt_l2cap_server      *server;\n  struct bt_l2cap_le_conn_req *req = (void *)buf->data;\n  struct bt_l2cap_le_conn_rsp *rsp;\n  u16_t                        psm, scid, mtu, mps, credits;\n  int                          err;\n\n  if (buf->len < sizeof(*req)) {\n    BT_ERR(\"Too small LE conn req packet size\");\n    return;\n  }\n\n  psm     = sys_le16_to_cpu(req->psm);\n  scid    = sys_le16_to_cpu(req->scid);\n  mtu     = sys_le16_to_cpu(req->mtu);\n  mps     = sys_le16_to_cpu(req->mps);\n  credits = sys_le16_to_cpu(req->credits);\n\n  BT_DBG(\"psm 0x%02x scid 0x%04x mtu %u mps %u credits %u\", psm, scid, mtu, mps, credits);\n\n  if (mtu < L2CAP_LE_MIN_MTU || mps < L2CAP_LE_MIN_MTU) {\n    BT_ERR(\"Invalid LE-Conn Req params\");\n    return;\n  }\n\n  buf = l2cap_create_le_sig_pdu(buf, BT_L2CAP_LE_CONN_RSP, ident, sizeof(*rsp));\n  if (!buf) {\n    return;\n  }\n\n  rsp = net_buf_add(buf, sizeof(*rsp));\n  (void)memset(rsp, 0, sizeof(*rsp));\n\n  /* Check if there is a server registered */\n  server = l2cap_server_lookup_psm(psm);\n  if (!server) {\n    rsp->result = sys_cpu_to_le16(BT_L2CAP_LE_ERR_PSM_NOT_SUPP);\n    goto rsp;\n  }\n\n/* Check if connection has minimum required security level */\n#if defined(CONFIG_BT_SMP)\n  if (conn->sec_level < server->sec_level) {\n    rsp->result = sys_cpu_to_le16(BT_L2CAP_LE_ERR_AUTHENTICATION);\n    goto rsp;\n  }\n#endif\n\n  if (!L2CAP_LE_CID_IS_DYN(scid)) {\n    rsp->result = sys_cpu_to_le16(BT_L2CAP_LE_ERR_INVALID_SCID);\n    goto rsp;\n  }\n\n  chan = bt_l2cap_le_lookup_tx_cid(conn, scid);\n  if (chan) {\n    rsp->result = sys_cpu_to_le16(BT_L2CAP_LE_ERR_SCID_IN_USE);\n    goto rsp;\n  }\n\n  /* Request server to accept the new connection and allocate the\n   * channel.\n   */\n  err = server->accept(conn, &chan);\n  if (err < 0) {\n    rsp->result = sys_cpu_to_le16(le_err_to_result(err));\n    goto rsp;\n  }\n\n  chan->required_sec_level = server->sec_level;\n\n  if (l2cap_chan_add(conn, chan, l2cap_chan_destroy)) {\n    struct bt_l2cap_le_chan *ch = BT_L2CAP_LE_CHAN(chan);\n\n    /* Init TX parameters */\n    l2cap_chan_tx_init(ch);\n    ch->tx.cid          = scid;\n    ch->tx.mps          = mps;\n    ch->tx.mtu          = mtu;\n    ch->tx.init_credits = credits;\n    l2cap_chan_tx_give_credits(ch, credits);\n\n    /* Init RX parameters */\n    l2cap_chan_rx_init(ch);\n    l2cap_chan_rx_give_credits(ch, ch->rx.init_credits);\n\n    /* Set channel PSM */\n    chan->psm = server->psm;\n\n    /* Update state */\n    bt_l2cap_chan_set_state(chan, BT_L2CAP_CONNECTED);\n\n    if (chan->ops->connected) {\n      chan->ops->connected(chan);\n    }\n\n    /* Prepare response protocol data */\n    rsp->dcid    = sys_cpu_to_le16(ch->rx.cid);\n    rsp->mps     = sys_cpu_to_le16(ch->rx.mps);\n    rsp->mtu     = sys_cpu_to_le16(ch->rx.mtu);\n    rsp->credits = sys_cpu_to_le16(ch->rx.init_credits);\n    rsp->result  = BT_L2CAP_LE_SUCCESS;\n  } else {\n    rsp->result = sys_cpu_to_le16(BT_L2CAP_LE_ERR_NO_RESOURCES);\n  }\nrsp:\n  bt_l2cap_send(conn, BT_L2CAP_CID_LE_SIG, buf);\n}\n\nstatic struct bt_l2cap_le_chan *l2cap_remove_rx_cid(struct bt_conn *conn, u16_t cid) {\n  struct bt_l2cap_chan *chan;\n  sys_snode_t          *prev = NULL;\n\n  /* Protect fixed channels against accidental removal */\n  if (!L2CAP_LE_CID_IS_DYN(cid)) {\n    return NULL;\n  }\n\n  SYS_SLIST_FOR_EACH_CONTAINER(&conn->channels, chan, node) {\n    if (BT_L2CAP_LE_CHAN(chan)->rx.cid == cid) {\n      sys_slist_remove(&conn->channels, prev, &chan->node);\n      return BT_L2CAP_LE_CHAN(chan);\n    }\n\n    prev = &chan->node;\n  }\n\n  return NULL;\n}\n\nstatic void le_disconn_req(struct bt_l2cap *l2cap, u8_t ident, struct net_buf *buf) {\n  struct bt_conn              *conn = l2cap->chan.chan.conn;\n  struct bt_l2cap_le_chan     *chan;\n  struct bt_l2cap_disconn_req *req = (void *)buf->data;\n  struct bt_l2cap_disconn_rsp *rsp;\n  u16_t                        dcid;\n\n  if (buf->len < sizeof(*req)) {\n    BT_ERR(\"Too small LE conn req packet size\");\n    return;\n  }\n\n  dcid = sys_le16_to_cpu(req->dcid);\n\n  BT_DBG(\"dcid 0x%04x scid 0x%04x\", dcid, sys_le16_to_cpu(req->scid));\n\n  chan = l2cap_remove_rx_cid(conn, dcid);\n  if (!chan) {\n    struct bt_l2cap_cmd_reject_cid_data data;\n\n    data.scid = req->scid;\n    data.dcid = req->dcid;\n\n    l2cap_send_reject(conn, ident, BT_L2CAP_REJ_INVALID_CID, &data, sizeof(data));\n    return;\n  }\n\n  buf = l2cap_create_le_sig_pdu(buf, BT_L2CAP_DISCONN_RSP, ident, sizeof(*rsp));\n  if (!buf) {\n    return;\n  }\n\n  rsp       = net_buf_add(buf, sizeof(*rsp));\n  rsp->dcid = sys_cpu_to_le16(chan->rx.cid);\n  rsp->scid = sys_cpu_to_le16(chan->tx.cid);\n\n  bt_l2cap_chan_del(&chan->chan);\n\n  bt_l2cap_send(conn, BT_L2CAP_CID_LE_SIG, buf);\n}\n\n#if defined(CONFIG_BT_SMP)\nstatic int l2cap_change_security(struct bt_l2cap_le_chan *chan, u16_t err) {\n  switch (err) {\n  case BT_L2CAP_LE_ERR_ENCRYPTION:\n    if (chan->chan.required_sec_level >= BT_SECURITY_L2) {\n      return -EALREADY;\n    }\n    chan->chan.required_sec_level = BT_SECURITY_L2;\n    break;\n  case BT_L2CAP_LE_ERR_AUTHENTICATION:\n    if (chan->chan.required_sec_level < BT_SECURITY_L2) {\n      chan->chan.required_sec_level = BT_SECURITY_L2;\n    } else if (chan->chan.required_sec_level < BT_SECURITY_L3) {\n      chan->chan.required_sec_level = BT_SECURITY_L3;\n    } else if (chan->chan.required_sec_level < BT_SECURITY_L4) {\n      chan->chan.required_sec_level = BT_SECURITY_L4;\n    } else {\n      return -EALREADY;\n    }\n    break;\n  default:\n    return -EINVAL;\n  }\n\n  return bt_conn_set_security(chan->chan.conn, chan->chan.required_sec_level);\n}\n#endif // CONFIG_BT_SMP\n\nstatic void le_conn_rsp(struct bt_l2cap *l2cap, u8_t ident, struct net_buf *buf) {\n  struct bt_conn              *conn = l2cap->chan.chan.conn;\n  struct bt_l2cap_le_chan     *chan;\n  struct bt_l2cap_le_conn_rsp *rsp = (void *)buf->data;\n  u16_t                        dcid, mtu, mps, credits, result;\n\n  if (buf->len < sizeof(*rsp)) {\n    BT_ERR(\"Too small LE conn rsp packet size\");\n    return;\n  }\n\n  dcid    = sys_le16_to_cpu(rsp->dcid);\n  mtu     = sys_le16_to_cpu(rsp->mtu);\n  mps     = sys_le16_to_cpu(rsp->mps);\n  credits = sys_le16_to_cpu(rsp->credits);\n  result  = sys_le16_to_cpu(rsp->result);\n\n  BT_DBG(\"dcid 0x%04x mtu %u mps %u credits %u result 0x%04x\", dcid, mtu, mps, credits, result);\n\n  /* Keep the channel in case of security errors */\n  if (result == BT_L2CAP_LE_SUCCESS || result == BT_L2CAP_LE_ERR_AUTHENTICATION || result == BT_L2CAP_LE_ERR_ENCRYPTION) {\n    chan = l2cap_lookup_ident(conn, ident);\n  } else {\n    chan = l2cap_remove_ident(conn, ident);\n  }\n\n  if (!chan) {\n    BT_ERR(\"Cannot find channel for ident %u\", ident);\n    return;\n  }\n\n  /* Cancel RTX work */\n  k_delayed_work_cancel(&chan->chan.rtx_work);\n\n  /* Reset ident since it got a response */\n  chan->chan.ident = 0U;\n\n  switch (result) {\n  case BT_L2CAP_LE_SUCCESS:\n    chan->tx.cid = dcid;\n    chan->tx.mtu = mtu;\n    chan->tx.mps = mps;\n\n    /* Update state */\n    bt_l2cap_chan_set_state(&chan->chan, BT_L2CAP_CONNECTED);\n\n    if (chan->chan.ops->connected) {\n      chan->chan.ops->connected(&chan->chan);\n    }\n\n    /* Give credits */\n    l2cap_chan_tx_give_credits(chan, credits);\n    l2cap_chan_rx_give_credits(chan, chan->rx.init_credits);\n\n    break;\n  case BT_L2CAP_LE_ERR_AUTHENTICATION:\n  case BT_L2CAP_LE_ERR_ENCRYPTION:\n#if defined(CONFIG_BT_SMP)\n    /* If security needs changing wait it to be completed */\n    if (l2cap_change_security(chan, result) == 0) {\n      return;\n    }\n#endif\n    bt_l2cap_chan_remove(conn, &chan->chan);\n    __attribute__((fallthrough));\n  default:\n    bt_l2cap_chan_del(&chan->chan);\n  }\n}\n\nstatic void le_disconn_rsp(struct bt_l2cap *l2cap, u8_t ident, struct net_buf *buf) {\n  struct bt_conn              *conn = l2cap->chan.chan.conn;\n  struct bt_l2cap_le_chan     *chan;\n  struct bt_l2cap_disconn_rsp *rsp = (void *)buf->data;\n  u16_t                        scid;\n\n  if (buf->len < sizeof(*rsp)) {\n    BT_ERR(\"Too small LE disconn rsp packet size\");\n    return;\n  }\n\n  scid = sys_le16_to_cpu(rsp->scid);\n\n  BT_DBG(\"dcid 0x%04x scid 0x%04x\", sys_le16_to_cpu(rsp->dcid), scid);\n\n  chan = l2cap_remove_rx_cid(conn, scid);\n  if (!chan) {\n    return;\n  }\n\n  bt_l2cap_chan_del(&chan->chan);\n}\n\nstatic inline struct net_buf *l2cap_alloc_seg(struct net_buf *buf) {\n  struct net_buf_pool *pool = net_buf_pool_get(buf->pool_id);\n  struct net_buf      *seg;\n\n  /* Try to use original pool if possible */\n  seg = net_buf_alloc(pool, K_NO_WAIT);\n  if (seg) {\n    net_buf_reserve(seg, BT_L2CAP_CHAN_SEND_RESERVE);\n    return seg;\n  }\n\n  /* Fallback to using global connection tx pool */\n  return bt_l2cap_create_pdu(NULL, 0);\n}\n\nstatic struct net_buf *l2cap_chan_create_seg(struct bt_l2cap_le_chan *ch, struct net_buf *buf, size_t sdu_hdr_len) {\n  struct net_buf *seg;\n  u16_t           headroom;\n  u16_t           len;\n\n  /* Segment if data (+ data headroom) is bigger than MPS */\n  if (buf->len + sdu_hdr_len > ch->tx.mps) {\n    goto segment;\n  }\n\n  headroom = BT_L2CAP_CHAN_SEND_RESERVE + sdu_hdr_len;\n\n  /* Check if original buffer has enough headroom and don't have any\n   * fragments.\n   */\n  if (net_buf_headroom(buf) >= headroom && !buf->frags) {\n    if (sdu_hdr_len) {\n      /* Push SDU length if set */\n      net_buf_push_le16(buf, net_buf_frags_len(buf));\n    }\n    return net_buf_ref(buf);\n  }\n\nsegment:\n  seg = l2cap_alloc_seg(buf);\n  if (!seg) {\n    return NULL;\n  }\n\n  if (sdu_hdr_len) {\n    net_buf_add_le16(seg, net_buf_frags_len(buf));\n  }\n\n  /* Don't send more that TX MPS including SDU length */\n  len = MIN(net_buf_tailroom(seg), ch->tx.mps - sdu_hdr_len);\n  /* Limit if original buffer is smaller than the segment */\n  len = MIN(buf->len, len);\n  net_buf_add_mem(seg, buf->data, len);\n  net_buf_pull(buf, len);\n\n  BT_DBG(\"ch %p seg %p len %u\", ch, seg, seg->len);\n\n  return seg;\n}\n\nvoid l2cap_chan_sdu_sent(struct bt_conn *conn, void *user_data) {\n  struct bt_l2cap_chan *chan = user_data;\n\n  BT_DBG(\"conn %p chan %p\", conn, chan);\n\n  if (chan->ops->sent) {\n    chan->ops->sent(chan);\n  }\n}\n\nstatic int l2cap_chan_le_send(struct bt_l2cap_le_chan *ch, struct net_buf *buf, u16_t sdu_hdr_len) {\n  struct net_buf *seg;\n  int             len;\n\n  /* Wait for credits */\n  if (k_sem_take(&ch->tx.credits, K_NO_WAIT)) {\n    BT_DBG(\"No credits to transmit packet\");\n    return -EAGAIN;\n  }\n\n  seg = l2cap_chan_create_seg(ch, buf, sdu_hdr_len);\n  if (!seg) {\n    return -ENOMEM;\n  }\n\n  /* Channel may have been disconnected while waiting for a buffer */\n  if (!ch->chan.conn) {\n    net_buf_unref(buf);\n    return -ECONNRESET;\n  }\n\n  BT_DBG(\"ch %p cid 0x%04x len %u credits %u\", ch, ch->tx.cid, seg->len, k_sem_count_get(&ch->tx.credits));\n\n  len = seg->len - sdu_hdr_len;\n\n  /* Set a callback if there is no data left in the buffer and sent\n   * callback has been set.\n   */\n  if ((buf == seg || !buf->len) && ch->chan.ops->sent) {\n    bt_l2cap_send_cb(ch->chan.conn, ch->tx.cid, seg, l2cap_chan_sdu_sent, &ch->chan);\n  } else {\n    bt_l2cap_send(ch->chan.conn, ch->tx.cid, seg);\n  }\n\n  /* Check if there is no credits left clear output status and notify its\n   * change.\n   */\n  if (!k_sem_count_get(&ch->tx.credits)) {\n    atomic_clear_bit(ch->chan.status, BT_L2CAP_STATUS_OUT);\n    if (ch->chan.ops->status) {\n      ch->chan.ops->status(&ch->chan, ch->chan.status);\n    }\n  }\n\n  return len;\n}\n\nstatic int l2cap_chan_le_send_sdu(struct bt_l2cap_le_chan *ch, struct net_buf **buf, u16_t sent) {\n  int             ret, total_len;\n  struct net_buf *frag;\n\n  total_len = net_buf_frags_len(*buf) + sent;\n\n  if (total_len > ch->tx.mtu) {\n    return -EMSGSIZE;\n  }\n\n  frag = *buf;\n  if (!frag->len && frag->frags) {\n    frag = frag->frags;\n  }\n\n  if (!sent) {\n    /* Add SDU length for the first segment */\n    ret = l2cap_chan_le_send(ch, frag, BT_L2CAP_SDU_HDR_LEN);\n    if (ret < 0) {\n      if (ret == -EAGAIN) {\n        /* Store sent data into user_data */\n        memcpy(net_buf_user_data(frag), &sent, sizeof(sent));\n      }\n      *buf = frag;\n      return ret;\n    }\n    sent = ret;\n  }\n\n  /* Send remaining segments */\n  for (ret = 0; sent < total_len; sent += ret) {\n    /* Proceed to next fragment */\n    if (!frag->len) {\n      frag = net_buf_frag_del(NULL, frag);\n    }\n\n    ret = l2cap_chan_le_send(ch, frag, 0);\n    if (ret < 0) {\n      if (ret == -EAGAIN) {\n        /* Store sent data into user_data */\n        memcpy(net_buf_user_data(frag), &sent, sizeof(sent));\n      }\n      *buf = frag;\n      return ret;\n    }\n  }\n\n  BT_DBG(\"ch %p cid 0x%04x sent %u total_len %u\", ch, ch->tx.cid, sent, total_len);\n\n  net_buf_unref(frag);\n\n  return ret;\n}\n\nstatic struct net_buf *l2cap_chan_le_get_tx_buf(struct bt_l2cap_le_chan *ch) {\n  struct net_buf *buf;\n\n  /* Return current buffer */\n  if (ch->tx_buf) {\n    buf        = ch->tx_buf;\n    ch->tx_buf = NULL;\n    return buf;\n  }\n\n  return net_buf_get(&ch->tx_queue, K_NO_WAIT);\n}\n\nstatic void l2cap_chan_le_send_resume(struct bt_l2cap_le_chan *ch) {\n  struct net_buf *buf;\n\n  /* Resume tx in case there are buffers in the queue */\n  while ((buf = l2cap_chan_le_get_tx_buf(ch))) {\n#if defined(BFLB_BLE)\n    int sent = *((int *)net_buf_user_data(buf));\n#else\n    u16_t sent = *((u16_t *)net_buf_user_data(buf));\n#endif\n\n    BT_DBG(\"buf %p sent %u\", buf, sent);\n\n    sent = l2cap_chan_le_send_sdu(ch, &buf, sent);\n    if (sent < 0) {\n      if (sent == -EAGAIN) {\n        ch->tx_buf = buf;\n      }\n      break;\n    }\n  }\n}\n\nstatic void le_credits(struct bt_l2cap *l2cap, u8_t ident, struct net_buf *buf) {\n  struct bt_conn             *conn = l2cap->chan.chan.conn;\n  struct bt_l2cap_chan       *chan;\n  struct bt_l2cap_le_credits *ev = (void *)buf->data;\n  struct bt_l2cap_le_chan    *ch;\n  u16_t                       credits, cid;\n\n  if (buf->len < sizeof(*ev)) {\n    BT_ERR(\"Too small LE Credits packet size\");\n    return;\n  }\n\n  cid     = sys_le16_to_cpu(ev->cid);\n  credits = sys_le16_to_cpu(ev->credits);\n\n  BT_DBG(\"cid 0x%04x credits %u\", cid, credits);\n\n  chan = bt_l2cap_le_lookup_tx_cid(conn, cid);\n  if (!chan) {\n    BT_ERR(\"Unable to find channel of LE Credits packet\");\n    return;\n  }\n\n  ch = BT_L2CAP_LE_CHAN(chan);\n\n  if (k_sem_count_get(&ch->tx.credits) + credits > UINT16_MAX) {\n    BT_ERR(\"Credits overflow\");\n    bt_l2cap_chan_disconnect(chan);\n    return;\n  }\n\n  l2cap_chan_tx_give_credits(ch, credits);\n\n  BT_DBG(\"chan %p total credits %u\", ch, k_sem_count_get(&ch->tx.credits));\n\n  l2cap_chan_le_send_resume(ch);\n}\n\nstatic void reject_cmd(struct bt_l2cap *l2cap, u8_t ident, struct net_buf *buf) {\n  struct bt_conn          *conn = l2cap->chan.chan.conn;\n  struct bt_l2cap_le_chan *chan;\n\n  /* Check if there is a outstanding channel */\n  chan = l2cap_remove_ident(conn, ident);\n  if (!chan) {\n    return;\n  }\n\n  bt_l2cap_chan_del(&chan->chan);\n}\n#endif /* CONFIG_BT_L2CAP_DYNAMIC_CHANNEL */\n\nstatic int l2cap_recv(struct bt_l2cap_chan *chan, struct net_buf *buf) {\n  struct bt_l2cap         *l2cap = CONTAINER_OF(chan, struct bt_l2cap, chan);\n  struct bt_l2cap_sig_hdr *hdr;\n  u16_t                    len;\n\n  if (buf->len < sizeof(*hdr)) {\n    BT_ERR(\"Too small L2CAP signaling PDU\");\n    return 0;\n  }\n\n  hdr = net_buf_pull_mem(buf, sizeof(*hdr));\n  len = sys_le16_to_cpu(hdr->len);\n\n  BT_DBG(\"Signaling code 0x%02x ident %u len %u\", hdr->code, hdr->ident, len);\n\n  if (buf->len != len) {\n    BT_ERR(\"L2CAP length mismatch (%u != %u)\", buf->len, len);\n    return 0;\n  }\n\n  if (!hdr->ident) {\n    BT_ERR(\"Invalid ident value in L2CAP PDU\");\n    return 0;\n  }\n\n  switch (hdr->code) {\n  case BT_L2CAP_CONN_PARAM_RSP:\n    le_conn_param_rsp(l2cap, buf);\n    break;\n#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)\n  case BT_L2CAP_LE_CONN_REQ:\n    le_conn_req(l2cap, hdr->ident, buf);\n    break;\n  case BT_L2CAP_LE_CONN_RSP:\n    le_conn_rsp(l2cap, hdr->ident, buf);\n    break;\n  case BT_L2CAP_DISCONN_REQ:\n    le_disconn_req(l2cap, hdr->ident, buf);\n    break;\n  case BT_L2CAP_DISCONN_RSP:\n    le_disconn_rsp(l2cap, hdr->ident, buf);\n    break;\n  case BT_L2CAP_LE_CREDITS:\n    le_credits(l2cap, hdr->ident, buf);\n    break;\n  case BT_L2CAP_CMD_REJECT:\n    reject_cmd(l2cap, hdr->ident, buf);\n    break;\n#else\n  case BT_L2CAP_CMD_REJECT:\n    /* Ignored */\n    break;\n#endif /* CONFIG_BT_L2CAP_DYNAMIC_CHANNEL */\n  case BT_L2CAP_CONN_PARAM_REQ:\n    if (IS_ENABLED(CONFIG_BT_CENTRAL)) {\n      le_conn_param_update_req(l2cap, hdr->ident, buf);\n      break;\n    }\n#if defined(BFLB_BLE)\n    __attribute__((fallthrough));\n#endif\n\n  /* Fall-through */\n  default:\n    BT_WARN(\"Unknown L2CAP PDU code 0x%02x\", hdr->code);\n    l2cap_send_reject(chan->conn, hdr->ident, BT_L2CAP_REJ_NOT_UNDERSTOOD, NULL, 0);\n    break;\n  }\n\n  return 0;\n}\n\n#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)\nstatic void l2cap_chan_send_credits(struct bt_l2cap_le_chan *chan, struct net_buf *buf, u16_t credits) {\n  struct bt_l2cap_le_credits *ev;\n\n  /* Cap the number of credits given */\n  if (credits > chan->rx.init_credits) {\n    credits = chan->rx.init_credits;\n  }\n\n  l2cap_chan_rx_give_credits(chan, credits);\n\n  buf = l2cap_create_le_sig_pdu(buf, BT_L2CAP_LE_CREDITS, get_ident(), sizeof(*ev));\n  if (!buf) {\n    return;\n  }\n\n  ev          = net_buf_add(buf, sizeof(*ev));\n  ev->cid     = sys_cpu_to_le16(chan->rx.cid);\n  ev->credits = sys_cpu_to_le16(credits);\n\n  bt_l2cap_send(chan->chan.conn, BT_L2CAP_CID_LE_SIG, buf);\n\n  BT_DBG(\"chan %p credits %u\", chan, k_sem_count_get(&chan->rx.credits));\n}\n\nstatic void l2cap_chan_update_credits(struct bt_l2cap_le_chan *chan, struct net_buf *buf) {\n  s16_t credits;\n\n  /* Restore enough credits to complete the sdu */\n  credits = ((chan->_sdu_len - net_buf_frags_len(buf)) + (chan->rx.mps - 1)) / chan->rx.mps;\n  credits -= k_sem_count_get(&chan->rx.credits);\n  if (credits <= 0) {\n    return;\n  }\n\n  l2cap_chan_send_credits(chan, buf, credits);\n}\n\nint bt_l2cap_chan_recv_complete(struct bt_l2cap_chan *chan, struct net_buf *buf) {\n  struct bt_l2cap_le_chan *ch   = BT_L2CAP_LE_CHAN(chan);\n  struct bt_conn          *conn = chan->conn;\n  u16_t                    credits;\n\n  __ASSERT_NO_MSG(chan);\n  __ASSERT_NO_MSG(buf);\n\n  if (!conn) {\n    return -ENOTCONN;\n  }\n\n  if (conn->type != BT_CONN_TYPE_LE) {\n    return -ENOTSUP;\n  }\n\n  BT_DBG(\"chan %p buf %p\", chan, buf);\n\n  /* Restore credits used by packet */\n  memcpy(&credits, net_buf_user_data(buf), sizeof(credits));\n\n  l2cap_chan_send_credits(ch, buf, credits);\n\n  net_buf_unref(buf);\n\n  return 0;\n}\n\nstatic struct net_buf *l2cap_alloc_frag(s32_t timeout, void *user_data) {\n  struct bt_l2cap_le_chan *chan = user_data;\n  struct net_buf          *frag = NULL;\n\n  frag = chan->chan.ops->alloc_buf(&chan->chan);\n  if (!frag) {\n    return NULL;\n  }\n\n  BT_DBG(\"frag %p tailroom %zu\", frag, net_buf_tailroom(frag));\n\n  return frag;\n}\n\nstatic void l2cap_chan_le_recv_sdu(struct bt_l2cap_le_chan *chan, struct net_buf *buf, u16_t seg) {\n  int err;\n\n  BT_DBG(\"chan %p len %zu\", chan, net_buf_frags_len(buf));\n\n  /* Receiving complete SDU, notify channel and reset SDU buf */\n  err = chan->chan.ops->recv(&chan->chan, buf);\n  if (err < 0) {\n    if (err != -EINPROGRESS) {\n      BT_ERR(\"err %d\", err);\n      bt_l2cap_chan_disconnect(&chan->chan);\n      net_buf_unref(buf);\n    }\n    return;\n  }\n\n  l2cap_chan_send_credits(chan, buf, seg);\n  net_buf_unref(buf);\n}\n\nstatic void l2cap_chan_le_recv_seg(struct bt_l2cap_le_chan *chan, struct net_buf *buf) {\n  u16_t len;\n  u16_t seg = 0U;\n\n  len = net_buf_frags_len(chan->_sdu);\n  if (len) {\n    memcpy(&seg, net_buf_user_data(chan->_sdu), sizeof(seg));\n  }\n\n  if (len + buf->len > chan->_sdu_len) {\n    BT_ERR(\"SDU length mismatch\");\n    bt_l2cap_chan_disconnect(&chan->chan);\n    return;\n  }\n\n  seg++;\n  /* Store received segments in user_data */\n  memcpy(net_buf_user_data(chan->_sdu), &seg, sizeof(seg));\n\n  BT_DBG(\"chan %p seg %d len %zu\", chan, seg, net_buf_frags_len(buf));\n\n  /* Append received segment to SDU */\n  len = net_buf_append_bytes(chan->_sdu, buf->len, buf->data, K_NO_WAIT, l2cap_alloc_frag, chan);\n  if (len != buf->len) {\n    BT_ERR(\"Unable to store SDU\");\n    bt_l2cap_chan_disconnect(&chan->chan);\n    return;\n  }\n\n  if (net_buf_frags_len(chan->_sdu) < chan->_sdu_len) {\n    /* Give more credits if remote has run out of them, this\n     * should only happen if the remote cannot fully utilize the\n     * MPS for some reason.\n     */\n    if (!k_sem_count_get(&chan->rx.credits) && seg == chan->rx.init_credits) {\n      l2cap_chan_update_credits(chan, buf);\n    }\n    return;\n  }\n\n  buf            = chan->_sdu;\n  chan->_sdu     = NULL;\n  chan->_sdu_len = 0U;\n\n  l2cap_chan_le_recv_sdu(chan, buf, seg);\n}\n\nstatic void l2cap_chan_le_recv(struct bt_l2cap_le_chan *chan, struct net_buf *buf) {\n  u16_t sdu_len;\n  int   err;\n\n  if (k_sem_take(&chan->rx.credits, K_NO_WAIT)) {\n    BT_ERR(\"No credits to receive packet\");\n    bt_l2cap_chan_disconnect(&chan->chan);\n    return;\n  }\n\n  /* Check if segments already exist */\n  if (chan->_sdu) {\n    l2cap_chan_le_recv_seg(chan, buf);\n    return;\n  }\n\n  sdu_len = net_buf_pull_le16(buf);\n\n  BT_DBG(\"chan %p len %u sdu_len %u\", chan, buf->len, sdu_len);\n\n  if (sdu_len > chan->rx.mtu) {\n    BT_ERR(\"Invalid SDU length\");\n    bt_l2cap_chan_disconnect(&chan->chan);\n    return;\n  }\n\n  /* Always allocate buffer from the channel if supported. */\n  if (chan->chan.ops->alloc_buf) {\n    chan->_sdu = chan->chan.ops->alloc_buf(&chan->chan);\n    if (!chan->_sdu) {\n      BT_ERR(\"Unable to allocate buffer for SDU\");\n      bt_l2cap_chan_disconnect(&chan->chan);\n      return;\n    }\n    chan->_sdu_len = sdu_len;\n    l2cap_chan_le_recv_seg(chan, buf);\n    return;\n  }\n\n  err = chan->chan.ops->recv(&chan->chan, buf);\n  if (err) {\n    if (err != -EINPROGRESS) {\n      BT_ERR(\"err %d\", err);\n      bt_l2cap_chan_disconnect(&chan->chan);\n    }\n    return;\n  }\n\n  l2cap_chan_send_credits(chan, buf, 1);\n}\n#endif /* CONFIG_BT_L2CAP_DYNAMIC_CHANNEL */\n\nstatic void l2cap_chan_recv(struct bt_l2cap_chan *chan, struct net_buf *buf) {\n#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)\n  struct bt_l2cap_le_chan *ch = BT_L2CAP_LE_CHAN(chan);\n\n  if (L2CAP_LE_CID_IS_DYN(ch->rx.cid)) {\n    net_buf_put(&ch->rx_queue, net_buf_ref(buf));\n    k_work_submit(&ch->rx_work);\n    return;\n  }\n#endif /* CONFIG_BT_L2CAP_DYNAMIC_CHANNEL */\n\n  BT_DBG(\"chan %p len %u\", chan, buf->len);\n\n  chan->ops->recv(chan, buf);\n  net_buf_unref(buf);\n}\n\nvoid bt_l2cap_recv(struct bt_conn *conn, struct net_buf *buf) {\n  struct bt_l2cap_hdr  *hdr;\n  struct bt_l2cap_chan *chan;\n  u16_t                 cid;\n\n  if (IS_ENABLED(CONFIG_BT_BREDR) && conn->type == BT_CONN_TYPE_BR) {\n    bt_l2cap_br_recv(conn, buf);\n    return;\n  }\n\n  if (buf->len < sizeof(*hdr)) {\n    BT_ERR(\"Too small L2CAP PDU received\");\n    net_buf_unref(buf);\n    return;\n  }\n\n  hdr = net_buf_pull_mem(buf, sizeof(*hdr));\n  cid = sys_le16_to_cpu(hdr->cid);\n\n  BT_DBG(\"Packet for CID %u len %u\", cid, buf->len);\n\n  chan = bt_l2cap_le_lookup_rx_cid(conn, cid);\n  if (!chan) {\n    BT_WARN(\"Ignoring data for unknown CID 0x%04x\", cid);\n    net_buf_unref(buf);\n    return;\n  }\n\n  l2cap_chan_recv(chan, buf);\n}\n\nint bt_l2cap_update_conn_param(struct bt_conn *conn, const struct bt_le_conn_param *param) {\n  struct bt_l2cap_conn_param_req *req;\n  struct net_buf                 *buf;\n\n  buf = l2cap_create_le_sig_pdu(NULL, BT_L2CAP_CONN_PARAM_REQ, get_ident(), sizeof(*req));\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  req               = net_buf_add(buf, sizeof(*req));\n  req->min_interval = sys_cpu_to_le16(param->interval_min);\n  req->max_interval = sys_cpu_to_le16(param->interval_max);\n  req->latency      = sys_cpu_to_le16(param->latency);\n  req->timeout      = sys_cpu_to_le16(param->timeout);\n\n  bt_l2cap_send(conn, BT_L2CAP_CID_LE_SIG, buf);\n\n  return 0;\n}\n\nstatic void l2cap_connected(struct bt_l2cap_chan *chan) { BT_DBG(\"ch %p cid 0x%04x\", BT_L2CAP_LE_CHAN(chan), BT_L2CAP_LE_CHAN(chan)->rx.cid); }\n\nstatic void l2cap_disconnected(struct bt_l2cap_chan *chan) { BT_DBG(\"ch %p cid 0x%04x\", BT_L2CAP_LE_CHAN(chan), BT_L2CAP_LE_CHAN(chan)->rx.cid); }\n\nstatic int l2cap_accept(struct bt_conn *conn, struct bt_l2cap_chan **chan) {\n  int                             i;\n  static struct bt_l2cap_chan_ops ops = {\n      .connected    = l2cap_connected,\n      .disconnected = l2cap_disconnected,\n      .recv         = l2cap_recv,\n  };\n\n  BT_DBG(\"conn %p handle %u\", conn, conn->handle);\n\n  for (i = 0; i < ARRAY_SIZE(bt_l2cap_pool); i++) {\n    struct bt_l2cap *l2cap = &bt_l2cap_pool[i];\n\n    if (l2cap->chan.chan.conn) {\n      continue;\n    }\n\n    l2cap->chan.chan.ops = &ops;\n    *chan                = &l2cap->chan.chan;\n\n    return 0;\n  }\n\n  BT_ERR(\"No available L2CAP context for conn %p\", conn);\n\n  return -ENOMEM;\n}\n\nBT_L2CAP_CHANNEL_DEFINE(le_fixed_chan, BT_L2CAP_CID_LE_SIG, l2cap_accept);\n\nvoid bt_l2cap_init(void) {\n#if defined(BFLB_BLE_DISABLE_STATIC_CHANNEL)\n  static struct bt_l2cap_fixed_chan chan = {\n      .cid    = BT_L2CAP_CID_LE_SIG,\n      .accept = l2cap_accept,\n  };\n\n  bt_l2cap_le_fixed_chan_register(&chan);\n#endif\n  if (IS_ENABLED(CONFIG_BT_BREDR)) {\n    bt_l2cap_br_init();\n  }\n}\n\n#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)\nstatic int l2cap_le_connect(struct bt_conn *conn, struct bt_l2cap_le_chan *ch, u16_t psm) {\n  if (psm < L2CAP_LE_PSM_FIXED_START || psm > L2CAP_LE_PSM_DYN_END) {\n    return -EINVAL;\n  }\n\n  l2cap_chan_tx_init(ch);\n  l2cap_chan_rx_init(ch);\n\n  if (!l2cap_chan_add(conn, &ch->chan, l2cap_chan_destroy)) {\n    return -ENOMEM;\n  }\n\n  ch->chan.psm = psm;\n\n  return l2cap_le_conn_req(ch);\n}\n\nint bt_l2cap_chan_connect(struct bt_conn *conn, struct bt_l2cap_chan *chan, u16_t psm) {\n  BT_DBG(\"conn %p chan %p psm 0x%04x\", conn, chan, psm);\n\n  if (!conn || conn->state != BT_CONN_CONNECTED) {\n    return -ENOTCONN;\n  }\n\n  if (!chan) {\n    return -EINVAL;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_BREDR) && conn->type == BT_CONN_TYPE_BR) {\n    return bt_l2cap_br_chan_connect(conn, chan, psm);\n  }\n\n  if (chan->required_sec_level > BT_SECURITY_L4) {\n    return -EINVAL;\n  } else if (chan->required_sec_level == BT_SECURITY_L0) {\n    chan->required_sec_level = BT_SECURITY_L1;\n  }\n\n  return l2cap_le_connect(conn, BT_L2CAP_LE_CHAN(chan), psm);\n}\n\nint bt_l2cap_chan_disconnect(struct bt_l2cap_chan *chan) {\n  struct bt_conn              *conn = chan->conn;\n  struct net_buf              *buf;\n  struct bt_l2cap_disconn_req *req;\n  struct bt_l2cap_le_chan     *ch;\n\n  if (!conn) {\n    return -ENOTCONN;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_BREDR) && conn->type == BT_CONN_TYPE_BR) {\n    return bt_l2cap_br_chan_disconnect(chan);\n  }\n\n  ch = BT_L2CAP_LE_CHAN(chan);\n\n  BT_DBG(\"chan %p scid 0x%04x dcid 0x%04x\", chan, ch->rx.cid, ch->tx.cid);\n\n  ch->chan.ident = get_ident();\n\n  buf = l2cap_create_le_sig_pdu(NULL, BT_L2CAP_DISCONN_REQ, ch->chan.ident, sizeof(*req));\n  if (!buf) {\n    return -ENOMEM;\n  }\n\n  req       = net_buf_add(buf, sizeof(*req));\n  req->dcid = sys_cpu_to_le16(ch->rx.cid);\n  req->scid = sys_cpu_to_le16(ch->tx.cid);\n\n  l2cap_chan_send_req(ch, buf, L2CAP_DISC_TIMEOUT);\n  bt_l2cap_chan_set_state(chan, BT_L2CAP_DISCONNECT);\n\n  return 0;\n}\n\nint bt_l2cap_chan_send(struct bt_l2cap_chan *chan, struct net_buf *buf) {\n  int err;\n\n  if (!buf) {\n    return -EINVAL;\n  }\n\n  BT_DBG(\"chan %p buf %p len %zu\", chan, buf, net_buf_frags_len(buf));\n\n  if (!chan->conn || chan->conn->state != BT_CONN_CONNECTED) {\n    return -ENOTCONN;\n  }\n\n  if (IS_ENABLED(CONFIG_BT_BREDR) && chan->conn->type == BT_CONN_TYPE_BR) {\n    return bt_l2cap_br_chan_send(chan, buf);\n  }\n\n  err = l2cap_chan_le_send_sdu(BT_L2CAP_LE_CHAN(chan), &buf, 0);\n  if (err < 0) {\n    if (err == -EAGAIN) {\n      /* Queue buffer to be sent later */\n      net_buf_put(&(BT_L2CAP_LE_CHAN(chan))->tx_queue, buf);\n      return *((u16_t *)net_buf_user_data(buf));\n    }\n    BT_ERR(\"failed to send message %d\", err);\n  }\n\n  return err;\n}\n#endif /* CONFIG_BT_L2CAP_DYNAMIC_CHANNEL */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/l2cap_internal.h",
    "content": "/** @file\n *  @brief Internal APIs for Bluetooth L2CAP handling.\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <l2cap.h>\n\nenum l2cap_conn_list_action {\n    BT_L2CAP_CHAN_LOOKUP,\n    BT_L2CAP_CHAN_DETACH,\n};\n\n#define BT_L2CAP_CID_BR_SIG 0x0001\n#define BT_L2CAP_CID_ATT    0x0004\n#define BT_L2CAP_CID_LE_SIG 0x0005\n#define BT_L2CAP_CID_SMP    0x0006\n#define BT_L2CAP_CID_BR_SMP 0x0007\n\n#define BT_L2CAP_PSM_RFCOMM 0x0003\n\nstruct bt_l2cap_hdr {\n    u16_t len;\n    u16_t cid;\n} __packed;\n\nstruct bt_l2cap_sig_hdr {\n    u8_t code;\n    u8_t ident;\n    u16_t len;\n} __packed;\n\n#define BT_L2CAP_REJ_NOT_UNDERSTOOD 0x0000\n#define BT_L2CAP_REJ_MTU_EXCEEDED   0x0001\n#define BT_L2CAP_REJ_INVALID_CID    0x0002\n\n#define BT_L2CAP_CMD_REJECT 0x01\nstruct bt_l2cap_cmd_reject {\n    u16_t reason;\n    u8_t data[0];\n} __packed;\n\nstruct bt_l2cap_cmd_reject_cid_data {\n    u16_t scid;\n    u16_t dcid;\n} __packed;\n\n#define BT_L2CAP_CONN_REQ 0x02\nstruct bt_l2cap_conn_req {\n    u16_t psm;\n    u16_t scid;\n} __packed;\n\n/* command statuses in reposnse */\n#define BT_L2CAP_CS_NO_INFO     0x0000\n#define BT_L2CAP_CS_AUTHEN_PEND 0x0001\n\n/* valid results in conn response on BR/EDR */\n#define BT_L2CAP_BR_SUCCESS          0x0000\n#define BT_L2CAP_BR_PENDING          0x0001\n#define BT_L2CAP_BR_ERR_PSM_NOT_SUPP 0x0002\n#define BT_L2CAP_BR_ERR_SEC_BLOCK    0x0003\n#define BT_L2CAP_BR_ERR_NO_RESOURCES 0x0004\n#define BT_L2CAP_BR_ERR_INVALID_SCID 0x0006\n#define BT_L2CAP_BR_ERR_SCID_IN_USE  0x0007\n\n#define BT_L2CAP_CONN_RSP 0x03\nstruct bt_l2cap_conn_rsp {\n    u16_t dcid;\n    u16_t scid;\n    u16_t result;\n    u16_t status;\n} __packed;\n\n#define BT_L2CAP_CONF_SUCCESS  0x0000\n#define BT_L2CAP_CONF_UNACCEPT 0x0001\n#define BT_L2CAP_CONF_REJECT   0x0002\n\n#define BT_L2CAP_CONF_REQ 0x04\nstruct bt_l2cap_conf_req {\n    u16_t dcid;\n    u16_t flags;\n    u8_t data[0];\n} __packed;\n\n#define BT_L2CAP_CONF_RSP 0x05\nstruct bt_l2cap_conf_rsp {\n    u16_t scid;\n    u16_t flags;\n    u16_t result;\n    u8_t data[0];\n} __packed;\n\n/* Option type used by MTU config request data */\n#define BT_L2CAP_CONF_OPT_MTU 0x01\n/* Options bits selecting most significant bit (hint) in type field */\n#define BT_L2CAP_CONF_HINT 0x80\n#define BT_L2CAP_CONF_MASK 0x7f\n\nstruct bt_l2cap_conf_opt {\n    u8_t type;\n    u8_t len;\n    u8_t data[0];\n} __packed;\n\n#define BT_L2CAP_DISCONN_REQ 0x06\nstruct bt_l2cap_disconn_req {\n    u16_t dcid;\n    u16_t scid;\n} __packed;\n\n#define BT_L2CAP_DISCONN_RSP 0x07\nstruct bt_l2cap_disconn_rsp {\n    u16_t dcid;\n    u16_t scid;\n} __packed;\n\n#define BT_L2CAP_INFO_FEAT_MASK  0x0002\n#define BT_L2CAP_INFO_FIXED_CHAN 0x0003\n\n#define BT_L2CAP_INFO_REQ 0x0a\nstruct bt_l2cap_info_req {\n    u16_t type;\n} __packed;\n\n/* info result */\n#define BT_L2CAP_INFO_SUCCESS 0x0000\n#define BT_L2CAP_INFO_NOTSUPP 0x0001\n\n#define BT_L2CAP_INFO_RSP 0x0b\nstruct bt_l2cap_info_rsp {\n    u16_t type;\n    u16_t result;\n    u8_t data[0];\n} __packed;\n\n#define BT_L2CAP_CONN_PARAM_REQ 0x12\nstruct bt_l2cap_conn_param_req {\n    u16_t min_interval;\n    u16_t max_interval;\n    u16_t latency;\n    u16_t timeout;\n} __packed;\n\n#define BT_L2CAP_CONN_PARAM_ACCEPTED 0x0000\n#define BT_L2CAP_CONN_PARAM_REJECTED 0x0001\n\n#define BT_L2CAP_CONN_PARAM_RSP 0x13\nstruct bt_l2cap_conn_param_rsp {\n    u16_t result;\n} __packed;\n\n#define BT_L2CAP_LE_CONN_REQ 0x14\nstruct bt_l2cap_le_conn_req {\n    u16_t psm;\n    u16_t scid;\n    u16_t mtu;\n    u16_t mps;\n    u16_t credits;\n} __packed;\n\n/* valid results in conn response on LE */\n#define BT_L2CAP_LE_SUCCESS             0x0000\n#define BT_L2CAP_LE_ERR_PSM_NOT_SUPP    0x0002\n#define BT_L2CAP_LE_ERR_NO_RESOURCES    0x0004\n#define BT_L2CAP_LE_ERR_AUTHENTICATION  0x0005\n#define BT_L2CAP_LE_ERR_AUTHORIZATION   0x0006\n#define BT_L2CAP_LE_ERR_KEY_SIZE        0x0007\n#define BT_L2CAP_LE_ERR_ENCRYPTION      0x0008\n#define BT_L2CAP_LE_ERR_INVALID_SCID    0x0009\n#define BT_L2CAP_LE_ERR_SCID_IN_USE     0x000A\n#define BT_L2CAP_LE_ERR_UNACCEPT_PARAMS 0x000B\n\n#define BT_L2CAP_LE_CONN_RSP 0x15\nstruct bt_l2cap_le_conn_rsp {\n    u16_t dcid;\n    u16_t mtu;\n    u16_t mps;\n    u16_t credits;\n    u16_t result;\n};\n\n#define BT_L2CAP_LE_CREDITS 0x16\nstruct bt_l2cap_le_credits {\n    u16_t cid;\n    u16_t credits;\n} __packed;\n\n#define BT_L2CAP_SDU_HDR_LEN 2\n\n#if defined(CONFIG_BT_HCI_ACL_FLOW_CONTROL)\n#define BT_L2CAP_RX_MTU CONFIG_BT_L2CAP_RX_MTU\n#else\n#define BT_L2CAP_RX_MTU (CONFIG_BT_RX_BUF_LEN - \\\n                         BT_HCI_ACL_HDR_SIZE - BT_L2CAP_HDR_SIZE)\n#endif\n\nstruct bt_l2cap_fixed_chan {\n    u16_t cid;\n    int (*accept)(struct bt_conn *conn, struct bt_l2cap_chan **chan);\n    sys_snode_t node;\n};\n\n#define BT_L2CAP_CHANNEL_DEFINE(_name, _cid, _accept)               \\\n    const Z_STRUCT_SECTION_ITERABLE(bt_l2cap_fixed_chan, _name) = { \\\n        .cid = _cid,                                                \\\n        .accept = _accept,                                          \\\n    }\n\n/* Need a name different than bt_l2cap_fixed_chan for a different section */\nstruct bt_l2cap_br_fixed_chan {\n    u16_t cid;\n    int (*accept)(struct bt_conn *conn, struct bt_l2cap_chan **chan);\n};\n\n#define BT_L2CAP_BR_CHANNEL_DEFINE(_name, _cid, _accept)               \\\n    const Z_STRUCT_SECTION_ITERABLE(bt_l2cap_br_fixed_chan, _name) = { \\\n        .cid = _cid,                                                   \\\n        .accept = _accept,                                             \\\n    }\n\nvoid l2cap_chan_sdu_sent(struct bt_conn *conn, void *user_data);\n/* Register a fixed L2CAP channel for L2CAP */\nvoid bt_l2cap_le_fixed_chan_register(struct bt_l2cap_fixed_chan *chan);\n\n/* Notify L2CAP channels of a new connection */\nvoid bt_l2cap_connected(struct bt_conn *conn);\n\n/* Notify L2CAP channels of a disconnect event */\nvoid bt_l2cap_disconnected(struct bt_conn *conn);\n\n/* Add channel to the connection */\nvoid bt_l2cap_chan_add(struct bt_conn *conn, struct bt_l2cap_chan *chan,\n                       bt_l2cap_chan_destroy_t destroy);\n\n/* Remove channel from the connection */\nvoid bt_l2cap_chan_remove(struct bt_conn *conn, struct bt_l2cap_chan *chan);\n\n/* Delete channel */\nvoid bt_l2cap_chan_del(struct bt_l2cap_chan *chan);\n\nconst char *bt_l2cap_chan_state_str(bt_l2cap_chan_state_t state);\n\n#if defined(CONFIG_BT_DEBUG_L2CAP)\nvoid bt_l2cap_chan_set_state_debug(struct bt_l2cap_chan *chan,\n                                   bt_l2cap_chan_state_t state,\n                                   const char *func, int line);\n#define bt_l2cap_chan_set_state(_chan, _state) \\\n    bt_l2cap_chan_set_state_debug(_chan, _state, __func__, __LINE__)\n#else\nvoid bt_l2cap_chan_set_state(struct bt_l2cap_chan *chan,\n                             bt_l2cap_chan_state_t state);\n#endif /* CONFIG_BT_DEBUG_L2CAP */\n\n/*\n * Notify L2CAP channels of a change in encryption state passing additionally\n * HCI status of performed security procedure.\n */\nvoid bt_l2cap_encrypt_change(struct bt_conn *conn, u8_t hci_status);\n\n/* Prepare an L2CAP PDU to be sent over a connection */\nstruct net_buf *bt_l2cap_create_pdu_timeout(struct net_buf_pool *pool,\n                                            size_t reserve, s32_t timeout);\n\n#define bt_l2cap_create_pdu(_pool, _reserve) \\\n    bt_l2cap_create_pdu_timeout(_pool, _reserve, K_FOREVER)\n\n/* Prepare a L2CAP Response PDU to be sent over a connection */\nstruct net_buf *bt_l2cap_create_rsp(struct net_buf *buf, size_t reserve);\n\n/* Send L2CAP PDU over a connection\n *\n * Buffer ownership is transferred to stack so either in case of success\n * or error the buffer will be unref internally.\n *\n * Calling this from RX thread is assumed to never fail so the return can be\n * ignored.\n */\nint bt_l2cap_send_cb(struct bt_conn *conn, u16_t cid, struct net_buf *buf,\n                     bt_conn_tx_cb_t cb, void *user_data);\n\nstatic inline void bt_l2cap_send(struct bt_conn *conn, u16_t cid,\n                                 struct net_buf *buf)\n{\n    bt_l2cap_send_cb(conn, cid, buf, NULL, NULL);\n}\n\n/* Receive a new L2CAP PDU from a connection */\nvoid bt_l2cap_recv(struct bt_conn *conn, struct net_buf *buf);\n\n/* Perform connection parameter update request */\nint bt_l2cap_update_conn_param(struct bt_conn *conn,\n                               const struct bt_le_conn_param *param);\n\n/* Initialize L2CAP and supported channels */\nvoid bt_l2cap_init(void);\n\n/* Lookup channel by Transmission CID */\nstruct bt_l2cap_chan *bt_l2cap_le_lookup_tx_cid(struct bt_conn *conn,\n                                                u16_t cid);\n\n/* Lookup channel by Receiver CID */\nstruct bt_l2cap_chan *bt_l2cap_le_lookup_rx_cid(struct bt_conn *conn,\n                                                u16_t cid);\n\n/* Initialize BR/EDR L2CAP signal layer */\nvoid bt_l2cap_br_init(void);\n\n/* Register fixed channel */\nvoid bt_l2cap_br_fixed_chan_register(struct bt_l2cap_fixed_chan *chan);\n\n/* Notify BR/EDR L2CAP channels about established new ACL connection */\nvoid bt_l2cap_br_connected(struct bt_conn *conn);\n\n/* Lookup BR/EDR L2CAP channel by Receiver CID */\nstruct bt_l2cap_chan *bt_l2cap_br_lookup_rx_cid(struct bt_conn *conn,\n                                                u16_t cid);\n\n/* Disconnects dynamic channel */\nint bt_l2cap_br_chan_disconnect(struct bt_l2cap_chan *chan);\n\n/* Make connection to peer psm server */\nint bt_l2cap_br_chan_connect(struct bt_conn *conn, struct bt_l2cap_chan *chan,\n                             u16_t psm);\n\n/* Send packet data to connected peer */\nint bt_l2cap_br_chan_send(struct bt_l2cap_chan *chan, struct net_buf *buf);\n\n/*\n * Handle security level changed on link passing HCI status of performed\n * security procedure.\n */\nvoid l2cap_br_encrypt_change(struct bt_conn *conn, u8_t hci_status);\n\n/* Handle received data */\nvoid bt_l2cap_br_recv(struct bt_conn *conn, struct net_buf *buf);\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/monitor.c",
    "content": "/** @file\n *  @brief Custom logging over UART\n */\n\n/*\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#if defined(CONFIG_BT_DEBUG_MONITOR)\n\n#include \"monitor.h\"\n#include \"log.h\"\n#include <buf.h>\n#include <zephyr.h>\n\nvoid bt_monitor_send(uint16_t opcode, const void *data, size_t len) {\n  const uint8_t *buf = data;\n  unsigned int   key = irq_lock();\n  BT_WARN(\"[Hci]:pkt_type:[0x%x],pkt_data:[%s]\\r\\n\", opcode, bt_hex(buf, len));\n  irq_unlock(key);\n}\n\nvoid bt_monitor_new_index(uint8_t type, uint8_t bus, bt_addr_t *addr, const char *name) {}\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/monitor.h",
    "content": "/** @file\n *  @brief Custom monitor protocol logging over UART\n */\n\n/*\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#if defined(CONFIG_BT_DEBUG_MONITOR)\n\n#define BT_MONITOR_NEW_INDEX    0\n#define BT_MONITOR_DEL_INDEX    1\n#define BT_MONITOR_COMMAND_PKT  2\n#define BT_MONITOR_EVENT_PKT    3\n#define BT_MONITOR_ACL_TX_PKT   4\n#define BT_MONITOR_ACL_RX_PKT   5\n#define BT_MONITOR_SCO_TX_PKT   6\n#define BT_MONITOR_SCO_RX_PKT   7\n#define BT_MONITOR_OPEN_INDEX   8\n#define BT_MONITOR_CLOSE_INDEX  9\n#define BT_MONITOR_INDEX_INFO   10\n#define BT_MONITOR_VENDOR_DIAG  11\n#define BT_MONITOR_SYSTEM_NOTE  12\n#define BT_MONITOR_USER_LOGGING 13\n#define BT_MONITOR_NOP          255\n\n#define BT_MONITOR_TYPE_PRIMARY 0\n#define BT_MONITOR_TYPE_AMP     1\n\n/* Extended header types */\n#define BT_MONITOR_COMMAND_DROPS 1\n#define BT_MONITOR_EVENT_DROPS   2\n#define BT_MONITOR_ACL_RX_DROPS  3\n#define BT_MONITOR_ACL_TX_DROPS  4\n#define BT_MONITOR_SCO_RX_DROPS  5\n#define BT_MONITOR_SCO_TX_DROPS  6\n#define BT_MONITOR_OTHER_DROPS   7\n#define BT_MONITOR_TS32          8\n\n#define BT_MONITOR_BASE_HDR_LEN 6\n\n#if defined(CONFIG_BT_BREDR)\n#define BT_MONITOR_EXT_HDR_MAX 19\n#else\n#define BT_MONITOR_EXT_HDR_MAX 15\n#endif\n\nstruct bt_monitor_hdr {\n    u16_t data_len;\n    u16_t opcode;\n    u8_t flags;\n    u8_t hdr_len;\n\n    u8_t ext[BT_MONITOR_EXT_HDR_MAX];\n} __packed;\n\nstruct bt_monitor_ts32 {\n    u8_t type;\n    u32_t ts32;\n} __packed;\n\nstruct bt_monitor_new_index {\n    u8_t type;\n    u8_t bus;\n    u8_t bdaddr[6];\n    char name[8];\n} __packed;\n\nstruct bt_monitor_user_logging {\n    u8_t priority;\n    u8_t ident_len;\n} __packed;\n\nstatic inline u8_t bt_monitor_opcode(struct net_buf *buf)\n{\n    switch (bt_buf_get_type(buf)) {\n        case BT_BUF_CMD:\n            return BT_MONITOR_COMMAND_PKT;\n        case BT_BUF_EVT:\n            return BT_MONITOR_EVENT_PKT;\n        case BT_BUF_ACL_OUT:\n            return BT_MONITOR_ACL_TX_PKT;\n        case BT_BUF_ACL_IN:\n            return BT_MONITOR_ACL_RX_PKT;\n        default:\n            return BT_MONITOR_NOP;\n    }\n}\n\nvoid bt_monitor_send(u16_t opcode, const void *data, size_t len);\n\nvoid bt_monitor_new_index(u8_t type, u8_t bus, bt_addr_t *addr,\n                          const char *name);\n\n#else /* !CONFIG_BT_DEBUG_MONITOR */\n\n#define bt_monitor_send(opcode, data, len)\n#define bt_monitor_new_index(type, bus, addr, name)\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/multi_adv.c",
    "content": "/*\n * xx\n */\n\n#include <util.h>\n#include <zephyr.h>\n\n// #include <net/buf.h>\n#include <bluetooth.h>\n#include <hci_core.h>\n\n#include \"log.h\"\n#include \"multi_adv.h\"\n#include \"work_q.h\"\n\nstatic struct multi_adv_instant   g_multi_adv_list[MAX_MULTI_ADV_INSTANT];\nstatic struct multi_adv_scheduler g_multi_adv_scheduler;\nstatic struct k_delayed_work      g_multi_adv_timer;\n\nvoid multi_adv_schedule_timeslot(struct multi_adv_scheduler *adv_scheduler);\nint  multi_adv_schedule_timer_stop(void);\n\nint multi_adv_get_instant_num(void) {\n  int                       i, num = 0;\n  struct multi_adv_instant *inst = &(g_multi_adv_list[0]);\n\n  for (i = 0; i < MAX_MULTI_ADV_INSTANT; i++) {\n    if (inst[i].inuse_flag)\n      num++;\n  }\n  return num;\n}\n\nstruct multi_adv_instant *multi_adv_alloc_unused_instant(void) {\n  int                       i;\n  struct multi_adv_instant *inst = &(g_multi_adv_list[0]);\n\n  for (i = 0; i < MAX_MULTI_ADV_INSTANT; i++) {\n    if (inst[i].inuse_flag == 0) {\n      inst[i].inuse_flag = 1;\n      inst[i].instant_id = i + 1;\n      return &(inst[i]);\n    }\n  }\n  return 0;\n}\n\nint multi_adv_delete_instant_by_id(int instant_id) {\n  int                       i;\n  struct multi_adv_instant *inst = &(g_multi_adv_list[0]);\n\n  for (i = 0; i < MAX_MULTI_ADV_INSTANT; i++) {\n    if ((inst[i].inuse_flag) && (instant_id == (inst[i].instant_id))) {\n      inst[i].inuse_flag = 0;\n      return 0;\n    }\n  }\n  return -1;\n}\n\nstruct multi_adv_instant *multi_adv_find_instant_by_id(int instant_id) {\n  int                       i;\n  struct multi_adv_instant *inst = &(g_multi_adv_list[0]);\n\n  for (i = 0; i < MAX_MULTI_ADV_INSTANT; i++) {\n    if ((inst[i].inuse_flag) && (instant_id == (inst[i].instant_id))) {\n      return &(inst[i]);\n    }\n  }\n  return 0;\n}\n\nstruct multi_adv_instant *multi_adv_find_instant_by_order(int order) {\n  struct multi_adv_instant *inst = &(g_multi_adv_list[0]);\n\n  if (inst[order].inuse_flag) {\n    return &(inst[order]);\n  }\n  return 0;\n}\n\nint multi_adv_set_ad_data(uint8_t *ad_data, const struct bt_data *ad, size_t ad_len) {\n  int i, len;\n\n  memset(ad_data, 0, MAX_AD_DATA_LEN);\n  len = 0;\n  for (i = 0; i < ad_len; i++) {\n    /* Check if ad fit in the remaining buffer */\n    if (len + ad[i].data_len + 2 > MAX_AD_DATA_LEN) {\n      break;\n    }\n\n    ad_data[len++] = ad[i].data_len + 1;\n    ad_data[len++] = ad[i].type;\n\n    memcpy(&ad_data[len], ad[i].data, ad[i].data_len);\n    len += ad[i].data_len;\n  }\n\n  return len;\n}\n\nint change_to_tick(int min_interval, int max_interval) {\n  int tick;\n\n  if (max_interval / SLOT_PER_PERIOD != min_interval / SLOT_PER_PERIOD) {\n    tick = min_interval / SLOT_PER_PERIOD;\n    if (min_interval % SLOT_PER_PERIOD)\n      tick++;\n  } else {\n    tick = min_interval / SLOT_PER_PERIOD;\n  }\n  if (tick <= 1)\n    tick = 1;\n\n  return tick;\n}\n\nint calculate_min_multi(int a, int b) {\n  int x = a, y = b, z;\n\n  while (y != 0) {\n    z = x % y;\n    x = y;\n    y = z;\n  }\n\n  return a * b / x;\n}\n\nvoid multi_adv_reorder(int inst_num, uint16_t inst_interval[], uint8_t inst_order[]) {\n  int i, j;\n\n  for (i = 0; i < inst_num; i++) {\n    int max     = inst_interval[0];\n    int max_idx = 0;\n    int temp;\n\n    for (j = 1; j < inst_num - i; j++) {\n      if (max < inst_interval[j]) {\n        max     = inst_interval[j];\n        max_idx = j;\n      }\n    }\n\n    temp                            = inst_interval[inst_num - i - 1];\n    inst_interval[inst_num - i - 1] = inst_interval[max_idx];\n    inst_interval[max_idx]          = temp;\n\n    temp                         = inst_order[inst_num - i - 1];\n    inst_order[inst_num - i - 1] = inst_order[max_idx];\n    inst_order[max_idx]          = temp;\n  }\n}\n\nint calculate_offset(uint16_t interval[], uint16_t offset[], int num, int duration) {\n  int i, j, k, curr_offset = 0;\n  int curr_max_instants, min_max_instants, instants;\n  int offset_range;\n\n  offset_range = interval[num];\n  if (offset_range > duration)\n    offset_range = duration;\n\n  if (num == 0)\n    return 0;\n\n  min_max_instants = 0x7fffffff;\n  /* using 0-interval-1 as offset */\n  for (i = 0; i < offset_range; i++) {\n    curr_max_instants = 0;\n    /* search slot form 0 - duration to get the max instants number */\n    for (j = 0; j < duration; j++) {\n      /* get instant number in each slot */\n      instants = 0;\n      for (k = 0; k < num; k++) {\n        if (j % interval[k] == offset[k]) {\n          instants++;\n        }\n      }\n      if (j % interval[num] == i)\n        instants++;\n      if (curr_max_instants < instants) {\n        curr_max_instants = instants;\n      }\n    }\n\n    /* check if min max instants */\n    if (min_max_instants > curr_max_instants) {\n      min_max_instants = curr_max_instants;\n      curr_offset      = i;\n    }\n  }\n  return curr_offset;\n}\n\nvoid multi_adv_schedule_table(int inst_num, uint16_t inst_interval[], uint16_t inst_offset[]) {\n  int i, min_multi, last_min_multi;\n  /* calculate min multi */\n  last_min_multi = min_multi = inst_interval[0];\n  for (i = 1; i < inst_num; i++) {\n    min_multi = calculate_min_multi(min_multi, inst_interval[i]);\n    if (min_multi > MAX_MIN_MULTI) {\n      min_multi = last_min_multi;\n      break;\n    }\n    last_min_multi = min_multi;\n  }\n\n  /* offset calcute for schedule just for small interval range */\n  for (i = 0; i < inst_num; i++) {\n    inst_offset[i] = calculate_offset(inst_interval, inst_offset, i, min_multi);\n  }\n}\n\nint multi_adv_start_adv_instant(struct multi_adv_instant *adv_instant) {\n  int ret;\n\n  ret = bt_le_adv_start_instant(&adv_instant->param, adv_instant->ad, adv_instant->ad_len, adv_instant->sd, adv_instant->sd_len);\n  if (ret) {\n    BT_WARN(\"adv start instant failed: inst_id %d, err %d\\r\\n\", adv_instant->instant_id, ret);\n  }\n  return ret;\n}\n\nvoid multi_adv_schedule_timer_handle(void) {\n  struct multi_adv_scheduler *adv_scheduler = &g_multi_adv_scheduler;\n\n  multi_adv_schedule_timer_stop();\n  if (adv_scheduler->schedule_state == SCHEDULE_STOP)\n    return;\n\n  adv_scheduler->slot_clock  = adv_scheduler->next_slot_clock;\n  adv_scheduler->slot_offset = adv_scheduler->next_slot_offset;\n\n  multi_adv_schedule_timeslot(adv_scheduler);\n  return;\n}\n\nvoid multi_adv_schedule_timer_callback(struct k_work *timer) {\n  multi_adv_schedule_timer_handle();\n  return;\n}\n\nint multi_adv_schedule_timer_start(int timeout) {\n  struct multi_adv_scheduler *adv_scheduler = &g_multi_adv_scheduler;\n  multi_adv_schedule_timer_stop();\n\n  k_delayed_work_submit(&g_multi_adv_timer, timeout);\n  adv_scheduler->schedule_timer_active = 1;\n\n  return 1;\n}\n\nint multi_adv_schedule_timer_stop(void) {\n  struct multi_adv_scheduler *adv_scheduler = &g_multi_adv_scheduler;\n\n  if (adv_scheduler->schedule_timer_active) {\n    k_delayed_work_cancel(&g_multi_adv_timer);\n    adv_scheduler->schedule_timer_active = 0;\n  }\n  return 0;\n}\n\nvoid multi_adv_schedule_timeslot(struct multi_adv_scheduler *adv_scheduler) {\n  int                       i, inst_num;\n  int                       inst_clk, inst_off, match, insts = 0, next_slot, min_next_slot;\n  struct multi_adv_instant *adv_instant;\n  uint16_t                  inst_interval[MAX_MULTI_ADV_INSTANT];\n  uint16_t                  inst_offset[MAX_MULTI_ADV_INSTANT];\n  uint8_t                   inst_order[MAX_MULTI_ADV_INSTANT];\n  uint8_t                   match_order[MAX_MULTI_ADV_INSTANT];\n\n  inst_num = 0;\n  for (i = 0; i < MAX_MULTI_ADV_INSTANT; i++) {\n    adv_instant = multi_adv_find_instant_by_order(i);\n    if (adv_instant) {\n      inst_interval[inst_num] = adv_instant->instant_interval;\n      inst_offset[inst_num]   = adv_instant->instant_offset;\n      inst_order[inst_num]    = i;\n      inst_num++;\n    }\n  }\n\n  inst_clk = adv_scheduler->slot_clock;\n  inst_off = adv_scheduler->slot_offset;\n  match    = 0;\n  for (i = 0; i < inst_num; i++) {\n    if ((inst_clk % inst_interval[i]) == inst_offset[i]) {\n      match_order[match] = i;\n      match++;\n    }\n  }\n\n  BT_DBG(\"multi_adv_schedule_timeslot, num = %d, match = %d\", inst_num, match);\n  if (match) {\n    int offset_per_instant, diff;\n    offset_per_instant = TIME_PRIOD_MS / match;\n    diff               = inst_off - (inst_off + offset_per_instant / 2) / offset_per_instant * offset_per_instant; // TODO may be error\n\n    /* means this is the time to start */\n    if (diff <= 2) {\n      insts = (inst_off + offset_per_instant / 2) / offset_per_instant;\n\n      /* start instant */\n      adv_instant = multi_adv_find_instant_by_order(inst_order[match_order[insts]]);\n      if (adv_instant)\n        multi_adv_start_adv_instant(adv_instant);\n    }\n\n    /* next instant in the same slot */\n    if (match - insts > 1) {\n      adv_scheduler->next_slot_offset = adv_scheduler->slot_offset + offset_per_instant;\n      adv_scheduler->next_slot_clock  = adv_scheduler->slot_clock;\n\n      if ((adv_scheduler->next_slot_offset >= (TIME_PRIOD_MS - 2)) && (adv_scheduler->slot_offset <= (TIME_PRIOD_MS + 2))) {\n        adv_scheduler->next_slot_clock++;\n        adv_scheduler->next_slot_offset = 0;\n      }\n      multi_adv_schedule_timer_start(offset_per_instant);\n      return;\n    }\n  }\n\n  /* next instant not in the same slot */\n  min_next_slot = 0x7fffffff;\n  for (i = 0; i < inst_num; i++) {\n    if (inst_clk - inst_offset[i] < 0) {\n      match = 0;\n    } else {\n      match = (inst_clk - inst_offset[i]) / inst_interval[i] + 1;\n    }\n    next_slot = match * inst_interval[i] + inst_offset[i];\n    if (next_slot < min_next_slot) {\n      min_next_slot = next_slot;\n    }\n  }\n  adv_scheduler->next_slot_offset = 0;\n  adv_scheduler->next_slot_clock  = min_next_slot;\n\n  next_slot = (adv_scheduler->next_slot_clock - adv_scheduler->slot_clock) * TIME_PRIOD_MS + (adv_scheduler->next_slot_offset - adv_scheduler->slot_offset);\n  multi_adv_schedule_timer_start(next_slot);\n  return;\n}\n\nvoid multi_adv_schedule_stop(void) {\n  struct multi_adv_scheduler *adv_scheduler = &g_multi_adv_scheduler;\n\n  multi_adv_schedule_timer_stop();\n  adv_scheduler->schedule_state = SCHEDULE_STOP;\n}\n\nvoid multi_adv_schedule_start(void) {\n  struct multi_adv_scheduler *adv_scheduler = &g_multi_adv_scheduler;\n\n  /* get all instant and calculate ticks and */\n  if (adv_scheduler->schedule_state == SCHEDULE_START) {\n    multi_adv_schedule_stop();\n  }\n\n  /* reinit scheduler */\n  adv_scheduler->slot_clock     = 0;\n  adv_scheduler->slot_offset    = 0;\n  adv_scheduler->schedule_state = SCHEDULE_START;\n  multi_adv_schedule_timeslot(adv_scheduler);\n}\n\nvoid multi_adv_new_schedule(void) {\n  int                         i;\n  struct multi_adv_instant   *adv_instant, *high_duty_instant;\n  struct multi_adv_scheduler *adv_scheduler = &g_multi_adv_scheduler;\n  uint16_t                    inst_offset[MAX_MULTI_ADV_INSTANT];\n  uint16_t                    inst_interval[MAX_MULTI_ADV_INSTANT];\n  uint8_t                     inst_order[MAX_MULTI_ADV_INSTANT];\n  int                         inst_num = 0;\n\n  if (adv_scheduler->schedule_state == SCHEDULE_START) {\n    multi_adv_schedule_stop();\n  }\n  /* get all instant and calculate ticks and */\n  high_duty_instant = 0;\n  for (i = 0; i < MAX_MULTI_ADV_INSTANT; i++) {\n    adv_instant = multi_adv_find_instant_by_order(i);\n    if (adv_instant) {\n      /* if high duty cycle adv found */\n      if (adv_instant->param.interval_min < HIGH_DUTY_CYCLE_INTERVAL) {\n        high_duty_instant = adv_instant;\n        break;\n      }\n\n      inst_interval[inst_num] = change_to_tick(adv_instant->param.interval_min, adv_instant->param.interval_max);\n      inst_order[inst_num]    = i;\n      inst_num++;\n    }\n  }\n\n  if (high_duty_instant) {\n    BT_WARN(\"High Duty Cycle Instants, id = %d, interval = %d\\n\", adv_instant->instant_id, adv_instant->param.interval_min);\n    multi_adv_start_adv_instant(adv_instant);\n    return;\n  }\n\n  /* instant number equal 0 and 1 */\n  if (inst_num == 0) {\n    bt_le_adv_stop();\n    return;\n  }\n  if (inst_num == 1) {\n    adv_instant = multi_adv_find_instant_by_order(inst_order[0]);\n    if (!adv_instant)\n      return;\n    multi_adv_start_adv_instant(adv_instant);\n    return;\n  }\n\n  /* reorder by inst_interval */\n  multi_adv_reorder(inst_num, inst_interval, inst_order);\n\n  /* calcuate schedule table */\n  multi_adv_schedule_table(inst_num, inst_interval, inst_offset);\n\n  /* set interval and offset to instant */\n  for (i = 0; i < inst_num; i++) {\n    adv_instant = multi_adv_find_instant_by_order(inst_order[i]);\n    if (!adv_instant) {\n      continue;\n    }\n    adv_instant->instant_interval = inst_interval[i];\n    adv_instant->instant_offset   = inst_offset[i];\n\n    BT_WARN(\"adv_instant id = %d, interval = %d, offset = %d\\n\", adv_instant->instant_id, adv_instant->instant_interval, adv_instant->instant_offset);\n  }\n\n  multi_adv_schedule_start();\n}\n\nint bt_le_multi_adv_thread_init(void) {\n  /* timer and event init */\n  k_delayed_work_init(&g_multi_adv_timer, multi_adv_schedule_timer_callback);\n  return 0;\n}\n\nint bt_le_multi_adv_start(const struct bt_le_adv_param *param, const struct bt_data *ad, size_t ad_len, const struct bt_data *sd, size_t sd_len, int *instant_id) {\n  int                       instant_num;\n  struct multi_adv_instant *adv_instant;\n\n  instant_num = multi_adv_get_instant_num();\n  if (instant_num >= MAX_MULTI_ADV_INSTANT)\n    return -1;\n\n  adv_instant = multi_adv_alloc_unused_instant();\n  if (adv_instant == 0)\n    return -1;\n\n  memcpy(&(adv_instant->param), param, sizeof(struct bt_le_adv_param));\n\n  adv_instant->ad_len = multi_adv_set_ad_data(adv_instant->ad, ad, ad_len);\n  adv_instant->sd_len = multi_adv_set_ad_data(adv_instant->sd, sd, sd_len);\n\n  multi_adv_new_schedule();\n\n  *instant_id = adv_instant->instant_id;\n  return 0;\n}\n\nint bt_le_multi_adv_stop(int instant_id) {\n  if (multi_adv_find_instant_by_id(instant_id) == 0)\n    return -1;\n\n  BT_WARN(\"%s id[%d]\\n\", __func__, instant_id);\n  multi_adv_delete_instant_by_id(instant_id);\n  multi_adv_new_schedule();\n\n  return 0;\n}\n\nbool bt_le_multi_adv_id_is_vaild(int instant_id) {\n  int                       i;\n  struct multi_adv_instant *inst = &(g_multi_adv_list[0]);\n\n  for (i = 0; i < MAX_MULTI_ADV_INSTANT; i++) {\n    if ((inst[i].inuse_flag) && (instant_id == (inst[i].instant_id))) {\n      return true;\n    }\n  }\n  return false;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/multi_adv.h",
    "content": "/*\n * xx\n */\n\n#ifndef _MULTI_ADV_H_\n#define _MULTI_ADV_H_\n\n#define MAX_MULTI_ADV_INSTANT 4\n#define MAX_AD_DATA_LEN       31\n\n#define TIME_PRIOD_MS   (10 * (MAX_MULTI_ADV_INSTANT - 2))\n#define SLOT_PER_PERIOD (TIME_PRIOD_MS * 8 / 5)\n\n#define MAX_MIN_MULTI (30000 / TIME_PRIOD_MS)\n\n#define HIGH_DUTY_CYCLE_INTERVAL (20 * 8 / 5)\n\nstruct multi_adv_instant {\n    uint8_t inuse_flag;\n\n    /* for parameters  */\n    struct bt_le_adv_param param;\n    uint8_t ad[MAX_AD_DATA_LEN];\n    uint8_t ad_len;\n    uint8_t sd[MAX_AD_DATA_LEN];\n    uint8_t sd_len;\n\n    /* own address maybe used */\n    bt_addr_t own_addr;\n    uint8_t own_addr_valid;\n\n    /* for schedule */\n    int instant_id;\n    int instant_interval;\n    int instant_offset;\n    uint32_t clock;\n    uint32_t clock_instant_offset;\n    uint32_t clock_instant_total;\n    uint32_t next_wakeup_time;\n};\n\ntypedef enum {\n    SCHEDULE_IDLE,\n    SCHEDULE_READY,\n    SCHEDULE_START,\n    SCHEDULE_STOP,\n} SCHEDULE_STATE;\n\nstruct multi_adv_scheduler {\n    SCHEDULE_STATE schedule_state;\n    uint8_t schedule_timer_active;\n    uint32_t slot_clock;\n    uint16_t slot_offset;\n    uint16_t next_slot_offset;\n    uint32_t next_slot_clock;\n};\n\nint bt_le_multi_adv_thread_init(void);\nint bt_le_multi_adv_start(const struct bt_le_adv_param *param,\n                          const struct bt_data *ad, size_t ad_len,\n                          const struct bt_data *sd, size_t sd_len, int *instant_id);\nint bt_le_multi_adv_stop(int instant_id);\n\nbool bt_le_multi_adv_id_is_vaild(int instant_id);\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/rfcomm_internal.h",
    "content": "/** @file\n *  @brief Internal APIs for Bluetooth RFCOMM handling.\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <rfcomm.h>\n\ntypedef enum {\n    BT_RFCOMM_CFC_UNKNOWN,\n    BT_RFCOMM_CFC_NOT_SUPPORTED,\n    BT_RFCOMM_CFC_SUPPORTED,\n} __packed bt_rfcomm_cfc_t;\n\n/* RFCOMM signalling connection specific context */\nstruct bt_rfcomm_session {\n    /* L2CAP channel this context is associated with */\n    struct bt_l2cap_br_chan br_chan;\n    /* Response Timeout eXpired (RTX) timer */\n    struct k_delayed_work rtx_work;\n    /* Binary sem for aggregate fc */\n    struct k_sem fc;\n    struct bt_rfcomm_dlc *dlcs;\n    uint16_t mtu;\n    uint8_t state;\n    bt_rfcomm_role_t role;\n    bt_rfcomm_cfc_t cfc;\n};\n\nenum {\n    BT_RFCOMM_STATE_IDLE,\n    BT_RFCOMM_STATE_INIT,\n    BT_RFCOMM_STATE_SECURITY_PENDING,\n    BT_RFCOMM_STATE_CONNECTING,\n    BT_RFCOMM_STATE_CONNECTED,\n    BT_RFCOMM_STATE_CONFIG,\n    BT_RFCOMM_STATE_USER_DISCONNECT,\n    BT_RFCOMM_STATE_DISCONNECTING,\n    BT_RFCOMM_STATE_DISCONNECTED,\n};\n\nstruct bt_rfcomm_hdr {\n    uint8_t address;\n    uint8_t control;\n    uint8_t length;\n} __packed;\n\n#define BT_RFCOMM_SABM 0x2f\n#define BT_RFCOMM_UA   0x63\n#define BT_RFCOMM_UIH  0xef\n\nstruct bt_rfcomm_msg_hdr {\n    uint8_t type;\n    uint8_t len;\n} __packed;\n\n#define BT_RFCOMM_PN 0x20\nstruct bt_rfcomm_pn {\n    uint8_t dlci;\n    uint8_t flow_ctrl;\n    uint8_t priority;\n    uint8_t ack_timer;\n    uint16_t mtu;\n    uint8_t max_retrans;\n    uint8_t credits;\n} __packed;\n\n#define BT_RFCOMM_MSC 0x38\nstruct bt_rfcomm_msc {\n    uint8_t dlci;\n    uint8_t v24_signal;\n} __packed;\n\n#define BT_RFCOMM_DISC 0x43\n#define BT_RFCOMM_DM   0x0f\n\n#define BT_RFCOMM_RLS 0x14\nstruct bt_rfcomm_rls {\n    uint8_t dlci;\n    uint8_t line_status;\n} __packed;\n\n#define BT_RFCOMM_RPN 0x24\nstruct bt_rfcomm_rpn {\n    uint8_t dlci;\n    uint8_t baud_rate;\n    uint8_t line_settings;\n    uint8_t flow_control;\n    uint8_t xon_char;\n    uint8_t xoff_char;\n    uint16_t param_mask;\n} __packed;\n\n#define BT_RFCOMM_TEST 0x08\n#define BT_RFCOMM_NSC  0x04\n\n#define BT_RFCOMM_FCON  0x28\n#define BT_RFCOMM_FCOFF 0x18\n\n/* Default RPN Settings */\n#define BT_RFCOMM_RPN_BAUD_RATE_9600 0x03\n#define BT_RFCOMM_RPN_DATA_BITS_8    0x03\n#define BT_RFCOMM_RPN_STOP_BITS_1    0x00\n#define BT_RFCOMM_RPN_PARITY_NONE    0x00\n#define BT_RFCOMM_RPN_FLOW_NONE      0x00\n#define BT_RFCOMM_RPN_XON_CHAR       0x11\n#define BT_RFCOMM_RPN_XOFF_CHAR      0x13\n\n/* Set 1 to all the param mask except reserved */\n#define BT_RFCOMM_RPN_PARAM_MASK_ALL 0x3f7f\n\n#define BT_RFCOMM_SET_LINE_SETTINGS(data, stop, parity) ((data & 0x3) |        \\\n                                                         ((stop & 0x1) << 2) | \\\n                                                         ((parity & 0x7) << 3))\n\n/* DV = 1 IC = 0 RTR = 1 RTC = 1 FC = 0 EXT = 0 */\n#define BT_RFCOMM_DEFAULT_V24_SIG 0x8d\n\n#define BT_RFCOMM_GET_FC(v24_signal) (((v24_signal)&0x02) >> 1)\n\n#define BT_RFCOMM_SIG_MIN_MTU 23\n#define BT_RFCOMM_SIG_MAX_MTU 32767\n\n#define BT_RFCOMM_CHECK_MTU(mtu) (!!((mtu) >= BT_RFCOMM_SIG_MIN_MTU && \\\n                                     (mtu) <= BT_RFCOMM_SIG_MAX_MTU))\n\n/* Helper to calculate needed outgoing buffer size.\n * Length in rfcomm header can be two bytes depending on user data length.\n * One byte in the tail should be reserved for FCS.\n */\n#define BT_RFCOMM_BUF_SIZE(mtu) (BT_BUF_RESERVE +                           \\\n                                 BT_HCI_ACL_HDR_SIZE + BT_L2CAP_HDR_SIZE +  \\\n                                 sizeof(struct bt_rfcomm_hdr) + 1 + (mtu) + \\\n                                 BT_RFCOMM_FCS_SIZE)\n\n#define BT_RFCOMM_GET_DLCI(addr)       (((addr)&0xfc) >> 2)\n#define BT_RFCOMM_GET_FRAME_TYPE(ctrl) ((ctrl)&0xef)\n#define BT_RFCOMM_GET_MSG_TYPE(type)   (((type)&0xfc) >> 2)\n#define BT_RFCOMM_GET_MSG_CR(type)     (((type)&0x02) >> 1)\n#define BT_RFCOMM_GET_LEN(len)         (((len)&0xfe) >> 1)\n#define BT_RFCOMM_GET_CHANNEL(dlci)    ((dlci) >> 1)\n#define BT_RFCOMM_GET_PF(ctrl)         (((ctrl)&0x10) >> 4)\n\n#define BT_RFCOMM_SET_ADDR(dlci, cr) ((((dlci)&0x3f) << 2) | \\\n                                      ((cr) << 1) | 0x01)\n#define BT_RFCOMM_SET_CTRL(type, pf)     (((type)&0xef) | ((pf) << 4))\n#define BT_RFCOMM_SET_LEN_8(len)         (((len) << 1) | 1)\n#define BT_RFCOMM_SET_LEN_16(len)        ((len) << 1)\n#define BT_RFCOMM_SET_MSG_TYPE(type, cr) (((type) << 2) | (cr << 1) | 0x01)\n\n#define BT_RFCOMM_LEN_EXTENDED(len) (!((len)&0x01))\n\n/* For CR in UIH Packet header\n * Initiating station have the C/R bit set to 1 and those sent by the\n * responding station have the C/R bit set to 0\n */\n#define BT_RFCOMM_UIH_CR(role) ((role) == BT_RFCOMM_ROLE_INITIATOR)\n\n/* For CR in Non UIH Packet header\n * Command\n * Initiator --> Responder 1\n * Responder --> Initiator 0\n * Response\n * Initiator --> Responder 0\n * Responder --> Initiator 1\n */\n#define BT_RFCOMM_CMD_CR(role)  ((role) == BT_RFCOMM_ROLE_INITIATOR)\n#define BT_RFCOMM_RESP_CR(role) ((role) == BT_RFCOMM_ROLE_ACCEPTOR)\n\n/* For CR in MSG header\n * If the C/R bit is set to 1 the message is a command,\n * if it is set to 0 the message is a response.\n */\n#define BT_RFCOMM_MSG_CMD_CR  1\n#define BT_RFCOMM_MSG_RESP_CR 0\n\n#define BT_RFCOMM_DLCI(role, channel) ((((channel)&0x1f) << 1) | \\\n                                       ((role) == BT_RFCOMM_ROLE_ACCEPTOR))\n\n/* Excluding ext bit */\n#define BT_RFCOMM_MAX_LEN_8 127\n\n/* Length can be 2 bytes depending on data size */\n#define BT_RFCOMM_HDR_SIZE (sizeof(struct bt_rfcomm_hdr) + 1)\n#define BT_RFCOMM_FCS_SIZE 1\n\n#define BT_RFCOMM_FCS_LEN_UIH     2\n#define BT_RFCOMM_FCS_LEN_NON_UIH 3\n\n/* For non UIH packets\n * The P bit set to 1 shall be used to solicit a response frame with the\n * F bit set to 1 from the other station.\n */\n#define BT_RFCOMM_PF_NON_UIH 1\n\n/* For UIH packets\n * Both stations set the P-bit to 0\n * If credit based flow control is used, If P/F is 1 then one credit byte\n * will be there after control in the frame else no credit byte.\n */\n#define BT_RFCOMM_PF_UIH           0\n#define BT_RFCOMM_PF_UIH_CREDIT    1\n#define BT_RFCOMM_PF_UIH_NO_CREDIT 0\n\n#define BT_RFCOMM_PN_CFC_CMD  0xf0\n#define BT_RFCOMM_PN_CFC_RESP 0xe0\n\n/* Initialize RFCOMM signal layer */\nvoid bt_rfcomm_init(void);\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/sdp.c",
    "content": "/** @file\n *  @brief Service Discovery Protocol handling.\n */\n\n/*\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <errno.h>\n#include <misc/__assert.h>\n#include <misc/byteorder.h>\n#include <sys/types.h>\n\n#include <../bluetooth/buf.h>\n#include <../bluetooth/sdp.h>\n\n#define BT_DBG_ENABLED  IS_ENABLED(CONFIG_BT_DEBUG_SDP)\n#define LOG_MODULE_NAME bt_sdp\n#include \"log.h\"\n\n#include \"conn_internal.h\"\n#include \"hci_core.h\"\n#include \"l2cap_internal.h\"\n#include \"sdp_internal.h\"\n\n#define SDP_PSM 0x0001\n\n#define SDP_CHAN(_ch) CONTAINER_OF(_ch, struct bt_sdp, chan.chan)\n\n#define IN_RANGE(val, min, max) (val >= min && val <= max)\n\n#define SDP_DATA_MTU 200\n\n#define SDP_MTU (SDP_DATA_MTU + sizeof(struct bt_sdp_hdr))\n\n#define MAX_NUM_ATT_ID_FILTER 10\n\n#define SDP_SERVICE_HANDLE_BASE 0x10000\n\n#define SDP_DATA_ELEM_NEST_LEVEL_MAX 5\n\n/* Size of Cont state length */\n#define SDP_CONT_STATE_LEN_SIZE 1\n\n/* 1 byte for the no. of services searched till this response */\n/* 2 bytes for the total no. of matching records */\n#define SDP_SS_CONT_STATE_SIZE 3\n\n/* 1 byte for the no. of attributes searched till this response */\n#define SDP_SA_CONT_STATE_SIZE 1\n\n/* 1 byte for the no. of services searched till this response */\n/* 1 byte for the no. of attributes searched till this response */\n#define SDP_SSA_CONT_STATE_SIZE 2\n\n#define SDP_INVALID 0xff\n\nstruct bt_sdp {\n  struct bt_l2cap_br_chan chan;\n  struct k_fifo           partial_resp_queue;\n  /* TODO: Allow more than one pending request */\n};\n\nstatic struct bt_sdp_record *db;\nstatic uint8_t               num_services;\n\nstatic struct bt_sdp bt_sdp_pool[CONFIG_BT_MAX_CONN];\n\n/* Pool for outgoing SDP packets */\n#if !defined(BFLB_DYNAMIC_ALLOC_MEM)\nNET_BUF_POOL_FIXED_DEFINE(sdp_pool, CONFIG_BT_MAX_CONN, BT_L2CAP_BUF_SIZE(SDP_MTU), NULL);\n#else\nstruct net_buf_pool sdp_pool;\n#endif\n\n#define SDP_CLIENT_CHAN(_ch) CONTAINER_OF(_ch, struct bt_sdp_client, chan.chan)\n\n#define SDP_CLIENT_MTU 64\n\nstruct bt_sdp_client {\n  struct bt_l2cap_br_chan chan;\n  /* list of waiting to be resolved UUID params */\n  sys_slist_t reqs;\n  /* required SDP transaction ID */\n  uint16_t tid;\n  /* UUID params holder being now resolved */\n  const struct bt_sdp_discover_params *param;\n  /* PDU continuation state object */\n  struct bt_sdp_pdu_cstate cstate;\n  /* buffer for collecting record data */\n  struct net_buf *rec_buf;\n};\n\nstatic struct bt_sdp_client bt_sdp_client_pool[CONFIG_BT_MAX_CONN];\n\nenum {\n  BT_SDP_ITER_STOP,\n  BT_SDP_ITER_CONTINUE,\n};\n\nstruct search_state {\n  uint16_t att_list_size;\n  uint8_t  current_svc;\n  uint8_t  last_att;\n  bool     pkt_full;\n};\n\nstruct select_attrs_data {\n  struct bt_sdp_record        *rec;\n  struct net_buf              *rsp_buf;\n  struct bt_sdp               *sdp;\n  struct bt_sdp_data_elem_seq *seq;\n  struct search_state         *state;\n  uint32_t                    *filter;\n  uint16_t                     max_att_len;\n  uint16_t                     att_list_len;\n  uint8_t                      cont_state_size;\n  uint8_t                      num_filters;\n  bool                         new_service;\n};\n\n/* @typedef bt_sdp_attr_func_t\n *  @brief SDP attribute iterator callback.\n *\n *  @param attr Attribute found.\n *  @param att_idx Index of the found attribute in the attribute database.\n *  @param user_data Data given.\n *\n *  @return BT_SDP_ITER_CONTINUE if should continue to the next attribute\n *  or BT_SDP_ITER_STOP to stop.\n */\ntypedef uint8_t (*bt_sdp_attr_func_t)(struct bt_sdp_attribute *attr, uint8_t att_idx, void *user_data);\n\n/* @typedef bt_sdp_svc_func_t\n * @brief SDP service record iterator callback.\n *\n * @param rec Service record found.\n * @param user_data Data given.\n *\n * @return BT_SDP_ITER_CONTINUE if should continue to the next service record\n *  or BT_SDP_ITER_STOP to stop.\n */\ntypedef uint8_t (*bt_sdp_svc_func_t)(struct bt_sdp_record *rec, void *user_data);\n\n/* @brief Callback for SDP connection\n *\n *  Gets called when an SDP connection is established\n *\n *  @param chan L2CAP channel\n *\n *  @return None\n */\nstatic void bt_sdp_connected(struct bt_l2cap_chan *chan) {\n  struct bt_l2cap_br_chan *ch = CONTAINER_OF(chan, struct bt_l2cap_br_chan, chan);\n\n  struct bt_sdp *sdp = CONTAINER_OF(ch, struct bt_sdp, chan);\n\n  BT_DBG(\"chan %p cid 0x%04x\", ch, ch->tx.cid);\n\n  k_fifo_init(&sdp->partial_resp_queue, 20); // MBHJ\n}\n\n/** @brief Callback for SDP disconnection\n *\n *  Gets called when an SDP connection is terminated\n *\n *  @param chan L2CAP channel\n *\n *  @return None\n */\nstatic void bt_sdp_disconnected(struct bt_l2cap_chan *chan) {\n  struct bt_l2cap_br_chan *ch = CONTAINER_OF(chan, struct bt_l2cap_br_chan, chan);\n\n  struct bt_sdp *sdp = CONTAINER_OF(ch, struct bt_sdp, chan);\n\n  BT_DBG(\"chan %p cid 0x%04x\", ch, ch->tx.cid);\n\n  (void)memset(sdp, 0, sizeof(*sdp));\n}\n\n/* @brief Creates an SDP PDU\n *\n *  Creates an empty SDP PDU and returns the buffer\n *\n *  @param None\n *\n *  @return Pointer to the net_buf buffer\n */\nstatic struct net_buf *bt_sdp_create_pdu(void) { return bt_l2cap_create_pdu(&sdp_pool, sizeof(struct bt_sdp_hdr)); }\n\n/* @brief Sends out an SDP PDU\n *\n *  Sends out an SDP PDU after adding the relevant header\n *\n *  @param chan L2CAP channel\n *  @param buf Buffer to be sent out\n *  @param op Opcode to be used in the packet header\n *  @param tid Transaction ID to be used in the packet header\n *\n *  @return None\n */\nstatic void bt_sdp_send(struct bt_l2cap_chan *chan, struct net_buf *buf, uint8_t op, uint16_t tid) {\n  struct bt_sdp_hdr *hdr;\n  uint16_t           param_len = buf->len;\n\n  hdr            = net_buf_push(buf, sizeof(struct bt_sdp_hdr));\n  hdr->op_code   = op;\n  hdr->tid       = tid;\n  hdr->param_len = sys_cpu_to_be16(param_len);\n\n  bt_l2cap_chan_send(chan, buf);\n}\n\n/* @brief Sends an error response PDU\n *\n *  Creates and sends an error response PDU\n *\n *  @param chan L2CAP channel\n *  @param err Error code to be sent in the packet\n *  @param tid Transaction ID to be used in the packet header\n *\n *  @return None\n */\nstatic void send_err_rsp(struct bt_l2cap_chan *chan, uint16_t err, uint16_t tid) {\n  struct net_buf *buf;\n\n  BT_DBG(\"tid %u, error %u\", tid, err);\n\n  buf = bt_sdp_create_pdu();\n\n  net_buf_add_be16(buf, err);\n\n  bt_sdp_send(chan, buf, BT_SDP_ERROR_RSP, tid);\n}\n\n/* @brief Parses data elements from a net_buf\n *\n * Parses the first data element from a buffer and splits it into type, size,\n * data. Used for parsing incoming requests. Net buf is advanced to the data\n * part of the element.\n *\n * @param buf Buffer to be advanced\n * @param data_elem Pointer to the parsed data element structure\n *\n * @return 0 for success, or relevant error code\n */\nstatic uint16_t parse_data_elem(struct net_buf *buf, struct bt_sdp_data_elem *data_elem) {\n  uint8_t size_field_len = 0U; /* Space used to accommodate the size */\n\n  if (buf->len < 1) {\n    BT_WARN(\"Malformed packet\");\n    return BT_SDP_INVALID_SYNTAX;\n  }\n\n  data_elem->type = net_buf_pull_u8(buf);\n\n  switch (data_elem->type & BT_SDP_TYPE_DESC_MASK) {\n  case BT_SDP_UINT8:\n  case BT_SDP_INT8:\n  case BT_SDP_UUID_UNSPEC:\n  case BT_SDP_BOOL:\n    data_elem->data_size = BIT(data_elem->type & BT_SDP_SIZE_DESC_MASK);\n    break;\n  case BT_SDP_TEXT_STR_UNSPEC:\n  case BT_SDP_SEQ_UNSPEC:\n  case BT_SDP_ALT_UNSPEC:\n  case BT_SDP_URL_STR_UNSPEC:\n    size_field_len = BIT((data_elem->type & BT_SDP_SIZE_DESC_MASK) - BT_SDP_SIZE_INDEX_OFFSET);\n    if (buf->len < size_field_len) {\n      BT_WARN(\"Malformed packet\");\n      return BT_SDP_INVALID_SYNTAX;\n    }\n    switch (size_field_len) {\n    case 1:\n      data_elem->data_size = net_buf_pull_u8(buf);\n      break;\n    case 2:\n      data_elem->data_size = net_buf_pull_be16(buf);\n      break;\n    case 4:\n      data_elem->data_size = net_buf_pull_be32(buf);\n      break;\n    default:\n      BT_WARN(\"Invalid size in remote request\");\n      return BT_SDP_INVALID_SYNTAX;\n    }\n    break;\n  default:\n    BT_WARN(\"Invalid type in remote request\");\n    return BT_SDP_INVALID_SYNTAX;\n  }\n\n  if (buf->len < data_elem->data_size) {\n    BT_WARN(\"Malformed packet\");\n    return BT_SDP_INVALID_SYNTAX;\n  }\n\n  data_elem->total_size = data_elem->data_size + size_field_len + 1;\n  data_elem->data       = buf->data;\n\n  return 0;\n}\n\n/* @brief Searches for an UUID within an attribute\n *\n * Searches for an UUID within an attribute. If the attribute has data element\n * sequences, it recursively searches within them as well. On finding a match\n * with the UUID, it sets the found flag.\n *\n * @param elem Attribute to be used as the search space (haystack)\n * @param uuid UUID to be looked for (needle)\n * @param found Flag set to true if the UUID is found (to be returned)\n * @param nest_level Used to limit the extent of recursion into nested data\n *  elements, to avoid potential stack overflows\n *\n * @return Size of the last data element that has been searched\n *  (used in recursion)\n */\nstatic uint32_t search_uuid(struct bt_sdp_data_elem *elem, struct bt_uuid *uuid, bool *found, uint8_t nest_level) {\n  const uint8_t *cur_elem;\n  uint32_t       seq_size, size;\n  union {\n    struct bt_uuid     uuid;\n    struct bt_uuid_16  u16;\n    struct bt_uuid_32  u32;\n    struct bt_uuid_128 u128;\n  } u;\n\n  if (*found) {\n    return 0;\n  }\n\n  /* Limit recursion depth to avoid stack overflows */\n  if (nest_level == SDP_DATA_ELEM_NEST_LEVEL_MAX) {\n    return 0;\n  }\n\n  seq_size = elem->data_size;\n  cur_elem = elem->data;\n\n  if ((elem->type & BT_SDP_TYPE_DESC_MASK) == BT_SDP_UUID_UNSPEC) {\n    if (seq_size == 2U) {\n      u.uuid.type = BT_UUID_TYPE_16;\n      u.u16.val   = *((uint16_t *)cur_elem);\n      if (!bt_uuid_cmp(&u.uuid, uuid)) {\n        *found = true;\n      }\n    } else if (seq_size == 4U) {\n      u.uuid.type = BT_UUID_TYPE_32;\n      u.u32.val   = *((uint32_t *)cur_elem);\n      if (!bt_uuid_cmp(&u.uuid, uuid)) {\n        *found = true;\n      }\n    } else if (seq_size == 16U) {\n      u.uuid.type = BT_UUID_TYPE_128;\n      memcpy(u.u128.val, cur_elem, seq_size);\n      if (!bt_uuid_cmp(&u.uuid, uuid)) {\n        *found = true;\n      }\n    } else {\n      BT_WARN(\"Invalid UUID size in local database\");\n      BT_ASSERT(0);\n    }\n  }\n\n  if ((elem->type & BT_SDP_TYPE_DESC_MASK) == BT_SDP_SEQ_UNSPEC || (elem->type & BT_SDP_TYPE_DESC_MASK) == BT_SDP_ALT_UNSPEC) {\n    do {\n      /* Recursively parse data elements */\n      size = search_uuid((struct bt_sdp_data_elem *)cur_elem, uuid, found, nest_level + 1);\n      if (*found) {\n        return 0;\n      }\n      cur_elem += sizeof(struct bt_sdp_data_elem);\n      seq_size -= size;\n    } while (seq_size);\n  }\n\n  return elem->total_size;\n}\n\n/* @brief SDP service record iterator.\n *\n * Iterate over service records from a starting point.\n *\n * @param func Callback function.\n * @param user_data Data to pass to the callback.\n *\n * @return Pointer to the record where the iterator stopped, or NULL if all\n *  records are covered\n */\nstatic struct bt_sdp_record *bt_sdp_foreach_svc(bt_sdp_svc_func_t func, void *user_data) {\n  struct bt_sdp_record *rec = db;\n\n  while (rec) {\n    if (func(rec, user_data) == BT_SDP_ITER_STOP) {\n      break;\n    }\n\n    rec = rec->next;\n  }\n  return rec;\n}\n\n/* @brief Inserts a service record into a record pointer list\n *\n * Inserts a service record into a record pointer list\n *\n * @param rec The current service record.\n * @param user_data Pointer to the destination record list.\n *\n * @return BT_SDP_ITER_CONTINUE to move on to the next record.\n */\nstatic uint8_t insert_record(struct bt_sdp_record *rec, void *user_data) {\n  struct bt_sdp_record **rec_list = user_data;\n\n  rec_list[rec->index] = rec;\n\n  return BT_SDP_ITER_CONTINUE;\n}\n\n/* @brief Looks for matching UUIDs in a list of service records\n *\n * Parses out a sequence of UUIDs from an input buffer, and checks if a record\n * in the list contains all the UUIDs. If it doesn't, the record is removed\n * from the list, so the list contains only the records which has all the\n * input UUIDs in them.\n *\n * @param buf Incoming buffer containing all the UUIDs to be matched\n * @param matching_recs List of service records to use for storing matching\n * records\n *\n * @return 0 for success, or relevant error code\n */\nstatic uint16_t find_services(struct net_buf *buf, struct bt_sdp_record **matching_recs) {\n  struct bt_sdp_data_elem data_elem;\n  struct bt_sdp_record   *record;\n  uint32_t                uuid_list_size;\n  uint16_t                res;\n  uint8_t                 att_idx, rec_idx = 0U;\n  bool                    found;\n  union {\n    struct bt_uuid     uuid;\n    struct bt_uuid_16  u16;\n    struct bt_uuid_32  u32;\n    struct bt_uuid_128 u128;\n  } u;\n\n  res = parse_data_elem(buf, &data_elem);\n  if (res) {\n    return res;\n  }\n\n  if (((data_elem.type & BT_SDP_TYPE_DESC_MASK) != BT_SDP_SEQ_UNSPEC) && ((data_elem.type & BT_SDP_TYPE_DESC_MASK) != BT_SDP_ALT_UNSPEC)) {\n    BT_WARN(\"Invalid type %x in service search pattern\", data_elem.type);\n    return BT_SDP_INVALID_SYNTAX;\n  }\n\n  uuid_list_size = data_elem.data_size;\n\n  bt_sdp_foreach_svc(insert_record, matching_recs);\n\n  /* Go over the sequence of UUIDs, and match one UUID at a time */\n  while (uuid_list_size) {\n    res = parse_data_elem(buf, &data_elem);\n    if (res) {\n      return res;\n    }\n\n    if ((data_elem.type & BT_SDP_TYPE_DESC_MASK) != BT_SDP_UUID_UNSPEC) {\n      BT_WARN(\"Invalid type %u in service search pattern\", data_elem.type);\n      return BT_SDP_INVALID_SYNTAX;\n    }\n\n    if (buf->len < data_elem.data_size) {\n      BT_WARN(\"Malformed packet\");\n      return BT_SDP_INVALID_SYNTAX;\n    }\n\n    if (data_elem.data_size == 2U) {\n      u.uuid.type = BT_UUID_TYPE_16;\n      u.u16.val   = net_buf_pull_be16(buf);\n    } else if (data_elem.data_size == 4U) {\n      u.uuid.type = BT_UUID_TYPE_32;\n      u.u32.val   = net_buf_pull_be32(buf);\n    } else if (data_elem.data_size == 16U) {\n      u.uuid.type = BT_UUID_TYPE_128;\n      sys_memcpy_swap(u.u128.val, buf->data, data_elem.data_size);\n      net_buf_pull(buf, data_elem.data_size);\n    } else {\n      BT_WARN(\"Invalid UUID len %u in service search pattern\", data_elem.data_size);\n      net_buf_pull(buf, data_elem.data_size);\n    }\n\n    uuid_list_size -= data_elem.total_size;\n\n    /* Go over the list of services, and look for a service which\n     * doesn't have this UUID\n     */\n    for (rec_idx = 0U; rec_idx < num_services; rec_idx++) {\n      record = matching_recs[rec_idx];\n\n      if (!record) {\n        continue;\n      }\n\n      found = false;\n\n      /* Search for the UUID in all the attrs of the svc */\n      for (att_idx = 0U; att_idx < record->attr_count; att_idx++) {\n        search_uuid(&record->attrs[att_idx].val, &u.uuid, &found, 1);\n        if (found) {\n          break;\n        }\n      }\n\n      /* Remove the record from the list if it doesn't have\n       * the UUID\n       */\n      if (!found) {\n        matching_recs[rec_idx] = NULL;\n      }\n    }\n  }\n\n  return 0;\n}\n\n/* @brief Handler for Service Search Request\n *\n * Parses, processes and responds to a Service Search Request\n *\n * @param sdp Pointer to the SDP structure\n * @param buf Request net buf\n * @param tid Transaction ID\n *\n * @return 0 for success, or relevant error code\n */\nstatic uint16_t sdp_svc_search_req(struct bt_sdp *sdp, struct net_buf *buf, uint16_t tid) {\n  struct bt_sdp_svc_rsp *rsp;\n  struct net_buf        *resp_buf;\n  struct bt_sdp_record  *record;\n  struct bt_sdp_record  *matching_recs[BT_SDP_MAX_SERVICES];\n  uint16_t               max_rec_count, total_recs = 0U, current_recs = 0U, res;\n  uint8_t                cont_state_size, cont_state = 0U, idx = 0U, count = 0U;\n  bool                   pkt_full = false;\n\n  res = find_services(buf, matching_recs);\n  if (res) {\n    /* Error in parsing */\n    return res;\n  }\n\n  if (buf->len < 3) {\n    BT_WARN(\"Malformed packet\");\n    return BT_SDP_INVALID_SYNTAX;\n  }\n\n  max_rec_count   = net_buf_pull_be16(buf);\n  cont_state_size = net_buf_pull_u8(buf);\n\n  /* Zero out the matching services beyond max_rec_count */\n  for (idx = 0U; idx < num_services; idx++) {\n    if (count == max_rec_count) {\n      matching_recs[idx] = NULL;\n      continue;\n    }\n\n    if (matching_recs[idx]) {\n      count++;\n    }\n  }\n\n  /* We send out only SDP_SS_CONT_STATE_SIZE bytes continuation state in\n   * responses, so expect only SDP_SS_CONT_STATE_SIZE bytes in requests\n   */\n  if (cont_state_size) {\n    if (cont_state_size != SDP_SS_CONT_STATE_SIZE) {\n      BT_WARN(\"Invalid cont state size %u\", cont_state_size);\n      return BT_SDP_INVALID_CSTATE;\n    }\n\n    if (buf->len < cont_state_size) {\n      BT_WARN(\"Malformed packet\");\n      return BT_SDP_INVALID_SYNTAX;\n    }\n\n    cont_state = net_buf_pull_u8(buf);\n    /* We include total_recs in the continuation state. We calculate\n     * it once and preserve it across all the partial responses\n     */\n    total_recs = net_buf_pull_be16(buf);\n  }\n\n  BT_DBG(\"max_rec_count %u, cont_state %u\", max_rec_count, cont_state);\n\n  resp_buf = bt_sdp_create_pdu();\n  rsp      = net_buf_add(resp_buf, sizeof(*rsp));\n\n  for (; cont_state < num_services; cont_state++) {\n    record = matching_recs[cont_state];\n\n    if (!record) {\n      continue;\n    }\n\n    /* Calculate total recs only if it is first packet */\n    if (!cont_state_size) {\n      total_recs++;\n    }\n\n    if (pkt_full) {\n      continue;\n    }\n\n    /* 4 bytes per Service Record Handle */\n    /* 4 bytes for ContinuationState */\n    if ((MIN(SDP_MTU, sdp->chan.tx.mtu) - resp_buf->len) < (4 + 4 + sizeof(struct bt_sdp_hdr))) {\n      pkt_full = true;\n    }\n\n    if (pkt_full) {\n      /* Packet exhausted: Add continuation state and break */\n      BT_DBG(\"Packet full, num_services_covered %u\", cont_state);\n      net_buf_add_u8(resp_buf, SDP_SS_CONT_STATE_SIZE);\n      net_buf_add_u8(resp_buf, cont_state);\n\n      /* If it is the first packet of a partial response,\n       * continue dry-running to calculate total_recs.\n       * Else break\n       */\n      if (cont_state_size) {\n        break;\n      }\n\n      continue;\n    }\n\n    /* Add the service record handle to the packet */\n    net_buf_add_be32(resp_buf, record->handle);\n    current_recs++;\n  }\n\n  /* Add 0 continuation state if packet is exhausted */\n  if (!pkt_full) {\n    net_buf_add_u8(resp_buf, 0);\n  } else {\n    net_buf_add_be16(resp_buf, total_recs);\n  }\n\n  rsp->total_recs   = sys_cpu_to_be16(total_recs);\n  rsp->current_recs = sys_cpu_to_be16(current_recs);\n\n  BT_DBG(\"Sending response, len %u\", resp_buf->len);\n  bt_sdp_send(&sdp->chan.chan, resp_buf, BT_SDP_SVC_SEARCH_RSP, tid);\n\n  return 0;\n}\n\n/* @brief Copies an attribute into an outgoing buffer\n *\n *  Copies an attribute into a buffer. Recursively calls itself for complex\n *  attributes.\n *\n *  @param elem Attribute to be copied to the buffer\n *  @param buf Buffer where the attribute is to be copied\n *\n *  @return Size of the last data element that has been searched\n *  (used in recursion)\n */\nstatic uint32_t copy_attribute(struct bt_sdp_data_elem *elem, struct net_buf *buf, uint8_t nest_level) {\n  const uint8_t *cur_elem;\n  uint32_t       size, seq_size, total_size;\n\n  /* Limit recursion depth to avoid stack overflows */\n  if (nest_level == SDP_DATA_ELEM_NEST_LEVEL_MAX) {\n    return 0;\n  }\n\n  seq_size   = elem->data_size;\n  total_size = elem->total_size;\n  cur_elem   = elem->data;\n\n  /* Copy the header */\n  net_buf_add_u8(buf, elem->type);\n\n  switch (total_size - (seq_size + 1U)) {\n  case 1:\n    net_buf_add_u8(buf, elem->data_size);\n    break;\n  case 2:\n    net_buf_add_be16(buf, elem->data_size);\n    break;\n  case 4:\n    net_buf_add_be32(buf, elem->data_size);\n    break;\n  }\n\n  /* Recursively parse (till the last element is not another data element)\n   * and then fill the elements\n   */\n  if ((elem->type & BT_SDP_TYPE_DESC_MASK) == BT_SDP_SEQ_UNSPEC || (elem->type & BT_SDP_TYPE_DESC_MASK) == BT_SDP_ALT_UNSPEC) {\n    do {\n      size = copy_attribute((struct bt_sdp_data_elem *)cur_elem, buf, nest_level + 1);\n      cur_elem += sizeof(struct bt_sdp_data_elem);\n      seq_size -= size;\n    } while (seq_size);\n  } else if ((elem->type & BT_SDP_TYPE_DESC_MASK) == BT_SDP_UINT8 || (elem->type & BT_SDP_TYPE_DESC_MASK) == BT_SDP_INT8 || (elem->type & BT_SDP_TYPE_DESC_MASK) == BT_SDP_UUID_UNSPEC) {\n    if (seq_size == 1U) {\n      net_buf_add_u8(buf, *((uint8_t *)elem->data));\n    } else if (seq_size == 2U) {\n      net_buf_add_be16(buf, *((uint16_t *)elem->data));\n    } else if (seq_size == 4U) {\n      net_buf_add_be32(buf, *((uint32_t *)elem->data));\n    } else {\n      /* TODO: Convert 32bit and 128bit values to big-endian*/\n      net_buf_add_mem(buf, elem->data, seq_size);\n    }\n  } else {\n    net_buf_add_mem(buf, elem->data, seq_size);\n  }\n\n  return total_size;\n}\n\n/* @brief SDP attribute iterator.\n *\n *  Iterate over attributes of a service record from a starting index.\n *\n *  @param record Service record whose attributes are to be iterated over.\n *  @param idx Index in the attribute list from where to start.\n *  @param func Callback function.\n *  @param user_data Data to pass to the callback.\n *\n *  @return Index of the attribute where the iterator stopped\n */\nstatic uint8_t bt_sdp_foreach_attr(struct bt_sdp_record *record, uint8_t idx, bt_sdp_attr_func_t func, void *user_data) {\n  for (; idx < record->attr_count; idx++) {\n    if (func(&record->attrs[idx], idx, user_data) == BT_SDP_ITER_STOP) {\n      break;\n    }\n  }\n\n  return idx;\n}\n\n/* @brief Check if an attribute matches a range, and include it in the response\n *\n *  Checks if an attribute matches a given attribute ID or range, and if so,\n *  includes it in the response packet\n *\n *  @param attr The current attribute\n *  @param att_idx Index of the current attribute in the database\n *  @param user_data Pointer to the structure containing response packet, byte\n *   count, states, etc\n *\n *  @return BT_SDP_ITER_CONTINUE if should continue to the next attribute\n *   or BT_SDP_ITER_STOP to stop.\n */\nstatic uint8_t select_attrs(struct bt_sdp_attribute *attr, uint8_t att_idx, void *user_data) {\n  struct select_attrs_data *sad = user_data;\n  uint16_t                  att_id_lower, att_id_upper, att_id_cur, space;\n  uint32_t                  attr_size, seq_size;\n  uint8_t                   idx_filter;\n\n  for (idx_filter = 0U; idx_filter < sad->num_filters; idx_filter++) {\n    att_id_lower = (sad->filter[idx_filter] >> 16);\n    att_id_upper = (sad->filter[idx_filter]);\n    att_id_cur   = attr->id;\n\n    /* Check for range values */\n    if (att_id_lower != 0xffff && (!IN_RANGE(att_id_cur, att_id_lower, att_id_upper))) {\n      continue;\n    }\n\n    /* Check for match values */\n    if (att_id_lower == 0xffff && att_id_cur != att_id_upper) {\n      continue;\n    }\n\n    /* Attribute ID matches */\n\n    /* 3 bytes for Attribute ID */\n    attr_size = 3 + attr->val.total_size;\n\n    /* If this is the first attribute of the service, then we need\n     * to account for the space required to add the per-service\n     * data element sequence header as well.\n     */\n    if ((sad->state->current_svc != sad->rec->index) && sad->new_service) {\n      /* 3 bytes for Per-Service Data Elem Seq declaration */\n      seq_size = attr_size + 3;\n    } else {\n      seq_size = attr_size;\n    }\n\n    if (sad->rsp_buf) {\n      space = MIN(SDP_MTU, sad->sdp->chan.tx.mtu) - sad->rsp_buf->len - sizeof(struct bt_sdp_hdr);\n\n      if ((!sad->state->pkt_full) && ((seq_size > sad->max_att_len) || (space < seq_size + sad->cont_state_size))) {\n        /* Packet exhausted */\n        sad->state->pkt_full = true;\n      }\n    }\n\n    /* Keep filling data only if packet is not exhausted */\n    if (!sad->state->pkt_full && sad->rsp_buf) {\n      /* Add Per-Service Data Element Seq declaration once\n       * only when we are starting from the first attribute\n       */\n      if (!sad->seq && (sad->state->current_svc != sad->rec->index)) {\n        sad->seq       = net_buf_add(sad->rsp_buf, sizeof(*sad->seq));\n        sad->seq->type = BT_SDP_SEQ16;\n        sad->seq->size = 0U;\n      }\n\n      /* Add attribute ID */\n      net_buf_add_u8(sad->rsp_buf, BT_SDP_UINT16);\n      net_buf_add_be16(sad->rsp_buf, att_id_cur);\n\n      /* Add attribute value */\n      copy_attribute(&attr->val, sad->rsp_buf, 1);\n\n      sad->max_att_len -= seq_size;\n      sad->att_list_len += seq_size;\n      sad->state->last_att    = att_idx;\n      sad->state->current_svc = sad->rec->index;\n    }\n\n    if (sad->seq) {\n      /* Keep adding the sequence size if this packet contains\n       * the Per-Service Data Element Seq declaration header\n       */\n      sad->seq->size += attr_size;\n      sad->state->att_list_size += seq_size;\n    } else {\n      /* Keep adding the total attr lists size if:\n       * It's a dry-run, calculating the total attr lists size\n       */\n      sad->state->att_list_size += seq_size;\n    }\n\n    sad->new_service = false;\n    break;\n  }\n\n  /* End the search if:\n   * 1. We have exhausted the packet\n   * AND\n   * 2. This packet doesn't contain the service element declaration header\n   * AND\n   * 3. This is not a dry-run (then we look for other attrs that match)\n   */\n  if (sad->state->pkt_full && !sad->seq && sad->rsp_buf) {\n    return BT_SDP_ITER_STOP;\n  }\n\n  return BT_SDP_ITER_CONTINUE;\n}\n\n/* @brief Creates attribute list in the given buffer\n *\n *  Populates the attribute list of a service record in the buffer. To be used\n *  for responding to Service Attribute and Service Search Attribute requests\n *\n *  @param sdp Pointer to the SDP structure\n *  @param record Service record whose attributes are to be included in the\n *   response\n *  @param filter Attribute values/ranges to be used as a filter\n *  @param num_filters Number of elements in the attribute filter\n *  @param max_att_len Maximum size of attributes to be included in the response\n *  @param cont_state_size No. of additional continuation state bytes to keep\n *   space for in the packet. This will vary based on the type of the request\n *  @param next_att Starting position of the search in the service's attr list\n *  @param state State of the overall search\n *  @param rsp_buf Response buffer which is filled in\n *\n *  @return len Length of the attribute list created\n */\nstatic uint16_t create_attr_list(struct bt_sdp *sdp, struct bt_sdp_record *record, uint32_t *filter, uint8_t num_filters, uint16_t max_att_len, uint8_t cont_state_size, uint8_t next_att,\n                                 struct search_state *state, struct net_buf *rsp_buf) {\n  struct select_attrs_data sad;\n  uint8_t                  idx_att;\n\n  sad.num_filters     = num_filters;\n  sad.rec             = record;\n  sad.rsp_buf         = rsp_buf;\n  sad.sdp             = sdp;\n  sad.max_att_len     = max_att_len;\n  sad.cont_state_size = cont_state_size;\n  sad.seq             = NULL;\n  sad.filter          = filter;\n  sad.state           = state;\n  sad.att_list_len    = 0U;\n  sad.new_service     = true;\n\n  idx_att = bt_sdp_foreach_attr(sad.rec, next_att, select_attrs, &sad);\n\n  if (sad.seq) {\n    sad.seq->size = sys_cpu_to_be16(sad.seq->size);\n  }\n\n  return sad.att_list_len;\n}\n\n/* @brief Extracts the attribute search list from a buffer\n *\n *  Parses a buffer to extract the attribute search list (list of attribute IDs\n *  and ranges) which are to be used to filter attributes.\n *\n *  @param buf Buffer to be parsed for extracting the attribute search list\n *  @param filter Empty list of 4byte filters that are filled in. For attribute\n *   IDs, the lower 2 bytes contain the ID and the upper 2 bytes are set to\n *   0xFFFF. For attribute ranges, the lower 2bytes indicate the start ID and\n *   the upper 2bytes indicate the end ID\n *  @param num_filters No. of filter elements filled in (to be returned)\n *\n *  @return 0 for success, or relevant error code\n */\nstatic uint16_t get_att_search_list(struct net_buf *buf, uint32_t *filter, uint8_t *num_filters) {\n  struct bt_sdp_data_elem data_elem;\n  uint16_t                res;\n  uint32_t                size;\n\n  *num_filters = 0U;\n  res          = parse_data_elem(buf, &data_elem);\n  if (res) {\n    return res;\n  }\n\n  size = data_elem.data_size;\n\n  while (size) {\n    res = parse_data_elem(buf, &data_elem);\n    if (res) {\n      return res;\n    }\n\n    if ((data_elem.type & BT_SDP_TYPE_DESC_MASK) != BT_SDP_UINT8) {\n      BT_WARN(\"Invalid type %u in attribute ID list\", data_elem.type);\n      return BT_SDP_INVALID_SYNTAX;\n    }\n\n    if (buf->len < data_elem.data_size) {\n      BT_WARN(\"Malformed packet\");\n      return BT_SDP_INVALID_SYNTAX;\n    }\n\n    /* This is an attribute ID */\n    if (data_elem.data_size == 2U) {\n      filter[(*num_filters)++] = 0xffff0000 | net_buf_pull_be16(buf);\n    }\n\n    /* This is an attribute ID range */\n    if (data_elem.data_size == 4U) {\n      filter[(*num_filters)++] = net_buf_pull_be32(buf);\n    }\n\n    size -= data_elem.total_size;\n  }\n\n  return 0;\n}\n\n/* @brief Check if a given handle matches that of the current service\n *\n *  Checks if a given handle matches that of the current service\n *\n *  @param rec The current service record\n *  @param user_data Pointer to the service record handle to be matched\n *\n *  @return BT_SDP_ITER_CONTINUE if should continue to the next record\n *   or BT_SDP_ITER_STOP to stop.\n */\nstatic uint8_t find_handle(struct bt_sdp_record *rec, void *user_data) {\n  uint32_t *svc_rec_hdl = user_data;\n\n  if (rec->handle == *svc_rec_hdl) {\n    return BT_SDP_ITER_STOP;\n  }\n\n  return BT_SDP_ITER_CONTINUE;\n}\n\n/* @brief Handler for Service Attribute Request\n *\n *  Parses, processes and responds to a Service Attribute Request\n *\n *  @param sdp Pointer to the SDP structure\n *  @param buf Request buffer\n *  @param tid Transaction ID\n *\n *  @return 0 for success, or relevant error code\n */\nstatic uint16_t sdp_svc_att_req(struct bt_sdp *sdp, struct net_buf *buf, uint16_t tid) {\n  uint32_t               filter[MAX_NUM_ATT_ID_FILTER];\n  struct search_state    state = {.current_svc = SDP_INVALID, .last_att = SDP_INVALID, .pkt_full = false};\n  struct bt_sdp_record  *record;\n  struct bt_sdp_att_rsp *rsp;\n  struct net_buf        *rsp_buf;\n  uint32_t               svc_rec_hdl;\n  uint16_t               max_att_len, res, att_list_len;\n  uint8_t                num_filters, cont_state_size, next_att = 0U;\n\n  if (buf->len < 6) {\n    BT_WARN(\"Malformed packet\");\n    return BT_SDP_INVALID_SYNTAX;\n  }\n\n  svc_rec_hdl = net_buf_pull_be32(buf);\n  max_att_len = net_buf_pull_be16(buf);\n\n  /* Set up the filters */\n  res = get_att_search_list(buf, filter, &num_filters);\n  if (res) {\n    /* Error in parsing */\n    return res;\n  }\n\n  if (buf->len < 1) {\n    BT_WARN(\"Malformed packet\");\n    return BT_SDP_INVALID_SYNTAX;\n  }\n\n  cont_state_size = net_buf_pull_u8(buf);\n\n  /* We only send out 1 byte continuation state in responses,\n   * so expect only 1 byte in requests\n   */\n  if (cont_state_size) {\n    if (cont_state_size != SDP_SA_CONT_STATE_SIZE) {\n      BT_WARN(\"Invalid cont state size %u\", cont_state_size);\n      return BT_SDP_INVALID_CSTATE;\n    }\n\n    if (buf->len < cont_state_size) {\n      BT_WARN(\"Malformed packet\");\n      return BT_SDP_INVALID_SYNTAX;\n    }\n\n    state.last_att = net_buf_pull_u8(buf) + 1;\n    next_att       = state.last_att;\n  }\n\n  BT_DBG(\"svc_rec_hdl %u, max_att_len 0x%04x, cont_state %u\", svc_rec_hdl, max_att_len, next_att);\n\n  /* Find the service */\n  record = bt_sdp_foreach_svc(find_handle, &svc_rec_hdl);\n\n  if (!record) {\n    BT_WARN(\"Handle %u not found\", svc_rec_hdl);\n    return BT_SDP_INVALID_RECORD_HANDLE;\n  }\n\n  /* For partial responses, restore the search state */\n  if (cont_state_size) {\n    state.current_svc = record->index;\n  }\n\n  rsp_buf = bt_sdp_create_pdu();\n  rsp     = net_buf_add(rsp_buf, sizeof(*rsp));\n\n  /* cont_state_size should include 1 byte header */\n  att_list_len = create_attr_list(sdp, record, filter, num_filters, max_att_len, SDP_SA_CONT_STATE_SIZE + 1, next_att, &state, rsp_buf);\n\n  if (!att_list_len) {\n    /* For empty responses, add an empty data element sequence */\n    net_buf_add_u8(rsp_buf, BT_SDP_SEQ8);\n    net_buf_add_u8(rsp_buf, 0);\n    att_list_len = 2U;\n  }\n\n  /* Add continuation state */\n  if (state.pkt_full) {\n    BT_DBG(\"Packet full, state.last_att %u\", state.last_att);\n    net_buf_add_u8(rsp_buf, 1);\n    net_buf_add_u8(rsp_buf, state.last_att);\n  } else {\n    net_buf_add_u8(rsp_buf, 0);\n  }\n\n  rsp->att_list_len = sys_cpu_to_be16(att_list_len);\n\n  BT_DBG(\"Sending response, len %u\", rsp_buf->len);\n  bt_sdp_send(&sdp->chan.chan, rsp_buf, BT_SDP_SVC_ATTR_RSP, tid);\n\n  return 0;\n}\n\n/* @brief Handler for Service Search Attribute Request\n *\n *  Parses, processes and responds to a Service Search Attribute Request\n *\n *  @param sdp Pointer to the SDP structure\n *  @param buf Request buffer\n *  @param tid Transaction ID\n *\n *  @return 0 for success, or relevant error code\n */\nstatic uint16_t sdp_svc_search_att_req(struct bt_sdp *sdp, struct net_buf *buf, uint16_t tid) {\n  uint32_t                     filter[MAX_NUM_ATT_ID_FILTER];\n  struct bt_sdp_record        *matching_recs[BT_SDP_MAX_SERVICES];\n  struct search_state          state = {.att_list_size = 0, .current_svc = SDP_INVALID, .last_att = SDP_INVALID, .pkt_full = false};\n  struct net_buf              *rsp_buf, *rsp_buf_cpy;\n  struct bt_sdp_record        *record;\n  struct bt_sdp_att_rsp       *rsp;\n  struct bt_sdp_data_elem_seq *seq = NULL;\n  uint16_t                     max_att_len, res, att_list_len         = 0U;\n  uint8_t                      num_filters, cont_state_size, next_svc = 0U, next_att = 0U;\n  bool                         dry_run = false;\n\n  res = find_services(buf, matching_recs);\n  if (res) {\n    return res;\n  }\n\n  if (buf->len < 2) {\n    BT_WARN(\"Malformed packet\");\n    return BT_SDP_INVALID_SYNTAX;\n  }\n\n  max_att_len = net_buf_pull_be16(buf);\n\n  /* Set up the filters */\n  res = get_att_search_list(buf, filter, &num_filters);\n\n  if (res) {\n    /* Error in parsing */\n    return res;\n  }\n\n  if (buf->len < 1) {\n    BT_WARN(\"Malformed packet\");\n    return BT_SDP_INVALID_SYNTAX;\n  }\n\n  cont_state_size = net_buf_pull_u8(buf);\n\n  /* We only send out 2 bytes continuation state in responses,\n   * so expect only 2 bytes in requests\n   */\n  if (cont_state_size) {\n    if (cont_state_size != SDP_SSA_CONT_STATE_SIZE) {\n      BT_WARN(\"Invalid cont state size %u\", cont_state_size);\n      return BT_SDP_INVALID_CSTATE;\n    }\n\n    if (buf->len < cont_state_size) {\n      BT_WARN(\"Malformed packet\");\n      return BT_SDP_INVALID_SYNTAX;\n    }\n\n    state.current_svc = net_buf_pull_u8(buf);\n    state.last_att    = net_buf_pull_u8(buf) + 1;\n    next_svc          = state.current_svc;\n    next_att          = state.last_att;\n  }\n\n  BT_DBG(\"max_att_len 0x%04x, state.current_svc %u, state.last_att %u\", max_att_len, state.current_svc, state.last_att);\n\n  rsp_buf = bt_sdp_create_pdu();\n\n  rsp = net_buf_add(rsp_buf, sizeof(*rsp));\n\n  /* Add headers only if this is not a partial response */\n  if (!cont_state_size) {\n    seq       = net_buf_add(rsp_buf, sizeof(*seq));\n    seq->type = BT_SDP_SEQ16;\n    seq->size = 0U;\n\n    /* 3 bytes for Outer Data Element Sequence declaration */\n    att_list_len = 3U;\n  }\n\n  rsp_buf_cpy = rsp_buf;\n\n  for (; next_svc < num_services; next_svc++) {\n    record = matching_recs[next_svc];\n\n    if (!record) {\n      continue;\n    }\n\n    att_list_len += create_attr_list(sdp, record, filter, num_filters, max_att_len, SDP_SSA_CONT_STATE_SIZE + 1, next_att, &state, rsp_buf_cpy);\n\n    /* Check if packet is full and not dry run */\n    if (state.pkt_full && !dry_run) {\n      BT_DBG(\"Packet full, state.last_att %u\", state.last_att);\n      dry_run = true;\n\n      /* Add continuation state */\n      net_buf_add_u8(rsp_buf, 2);\n      net_buf_add_u8(rsp_buf, state.current_svc);\n      net_buf_add_u8(rsp_buf, state.last_att);\n\n      /* Break if it's not a partial response, else dry-run\n       * Dry run: Look for other services that match\n       */\n      if (cont_state_size) {\n        break;\n      }\n\n      rsp_buf_cpy = NULL;\n    }\n\n    next_att = 0U;\n  }\n\n  if (!dry_run) {\n    if (!att_list_len) {\n      /* For empty responses, add an empty data elem seq */\n      net_buf_add_u8(rsp_buf, BT_SDP_SEQ8);\n      net_buf_add_u8(rsp_buf, 0);\n      att_list_len = 2U;\n    }\n    /* Search exhausted */\n    net_buf_add_u8(rsp_buf, 0);\n  }\n\n  rsp->att_list_len = sys_cpu_to_be16(att_list_len);\n  if (seq) {\n    seq->size = sys_cpu_to_be16(state.att_list_size);\n  }\n\n  BT_DBG(\"Sending response, len %u\", rsp_buf->len);\n  bt_sdp_send(&sdp->chan.chan, rsp_buf, BT_SDP_SVC_SEARCH_ATTR_RSP, tid);\n\n  return 0;\n}\n\nstatic const struct {\n  uint8_t op_code;\n  uint16_t (*func)(struct bt_sdp *sdp, struct net_buf *buf, uint16_t tid);\n} handlers[] = {\n    {     BT_SDP_SVC_SEARCH_REQ,     sdp_svc_search_req},\n    {       BT_SDP_SVC_ATTR_REQ,        sdp_svc_att_req},\n    {BT_SDP_SVC_SEARCH_ATTR_REQ, sdp_svc_search_att_req},\n};\n\n/* @brief Callback for SDP data receive\n *\n *  Gets called when an SDP PDU is received. Calls the corresponding handler\n *  based on the op code of the PDU.\n *\n *  @param chan L2CAP channel\n *  @param buf Received PDU\n *\n *  @return None\n */\nstatic int bt_sdp_recv(struct bt_l2cap_chan *chan, struct net_buf *buf) {\n  struct bt_l2cap_br_chan *ch  = CONTAINER_OF(chan, struct bt_l2cap_br_chan, chan);\n  struct bt_sdp           *sdp = CONTAINER_OF(ch, struct bt_sdp, chan);\n  struct bt_sdp_hdr       *hdr;\n  uint16_t                 err = BT_SDP_INVALID_SYNTAX;\n  size_t                   i;\n\n  BT_DBG(\"chan %p, ch %p, cid 0x%04x\", chan, ch, ch->tx.cid);\n\n  BT_ASSERT(sdp);\n\n  if (buf->len < sizeof(*hdr)) {\n    BT_ERR(\"Too small SDP PDU received\");\n    return 0;\n  }\n\n  hdr = net_buf_pull_mem(buf, sizeof(*hdr));\n  BT_DBG(\"Received SDP code 0x%02x len %u\", hdr->op_code, buf->len);\n\n  if (sys_cpu_to_be16(hdr->param_len) != buf->len) {\n    err = BT_SDP_INVALID_PDU_SIZE;\n  } else {\n    for (i = 0; i < ARRAY_SIZE(handlers); i++) {\n      if (hdr->op_code != handlers[i].op_code) {\n        continue;\n      }\n\n      err = handlers[i].func(sdp, buf, hdr->tid);\n      break;\n    }\n  }\n\n  if (err) {\n    BT_WARN(\"SDP error 0x%02x\", err);\n    send_err_rsp(chan, err, hdr->tid);\n  }\n\n  return 0;\n}\n\n/* @brief Callback for SDP connection accept\n *\n *  Gets called when an incoming SDP connection needs to be authorized.\n *  Registers the L2CAP callbacks and allocates an SDP context to the connection\n *\n *  @param conn BT connection object\n *  @param chan L2CAP channel structure (to be returned)\n *\n *  @return 0 for success, or relevant error code\n */\nstatic int bt_sdp_accept(struct bt_conn *conn, struct bt_l2cap_chan **chan) {\n  static const struct bt_l2cap_chan_ops ops = {\n      .connected    = bt_sdp_connected,\n      .disconnected = bt_sdp_disconnected,\n      .recv         = bt_sdp_recv,\n  };\n  int i;\n\n  BT_DBG(\"conn %p\", conn);\n\n  for (i = 0; i < ARRAY_SIZE(bt_sdp_pool); i++) {\n    struct bt_sdp *sdp = &bt_sdp_pool[i];\n\n    if (sdp->chan.chan.conn) {\n      continue;\n    }\n\n    sdp->chan.chan.ops = &ops;\n    sdp->chan.rx.mtu   = SDP_MTU;\n\n    *chan = &sdp->chan.chan;\n\n    return 0;\n  }\n\n  BT_ERR(\"No available SDP context for conn %p\", conn);\n\n  return -ENOMEM;\n}\n\nvoid bt_sdp_init(void) {\n#if defined(BFLB_DYNAMIC_ALLOC_MEM)\n  net_buf_init(&sdp_pool, CONFIG_BT_MAX_CONN, BT_L2CAP_BUF_SIZE(SDP_MTU), NULL);\n#endif\n  static struct bt_l2cap_server server = {\n      .psm       = SDP_PSM,\n      .accept    = bt_sdp_accept,\n      .sec_level = BT_SECURITY_L0,\n  };\n  int res;\n\n  res = bt_l2cap_br_server_register(&server);\n  if (res) {\n    BT_ERR(\"L2CAP server registration failed with error %d\", res);\n  }\n}\n\nint bt_sdp_register_service(struct bt_sdp_record *service) {\n  uint32_t handle = SDP_SERVICE_HANDLE_BASE;\n\n  if (!service) {\n    BT_ERR(\"No service record specified\");\n    return 0;\n  }\n\n  if (num_services == BT_SDP_MAX_SERVICES) {\n    BT_ERR(\"Reached max allowed registrations\");\n    return -ENOMEM;\n  }\n\n  if (db) {\n    handle = db->handle + 1;\n  }\n\n  service->next                               = db;\n  service->index                              = num_services++;\n  service->handle                             = handle;\n  *((uint32_t *)(service->attrs[0].val.data)) = handle;\n  db                                          = service;\n\n  BT_DBG(\"Service registered at %u\", handle);\n\n  return 0;\n}\n\n#define GET_PARAM(__node) CONTAINER_OF(__node, struct bt_sdp_discover_params, _node)\n\n/* ServiceSearchAttribute PDU, ref to BT Core 4.2, Vol 3, part B, 4.7.1 */\nstatic int sdp_client_ssa_search(struct bt_sdp_client *session) {\n  const struct bt_sdp_discover_params *param;\n  struct bt_sdp_hdr                   *hdr;\n  struct net_buf                      *buf;\n\n  /*\n   * Select proper user params, if session->param is invalid it means\n   * getting new UUID from top of to be resolved params list. Otherwise\n   * the context is in a middle of partial SDP PDU responses and cached\n   * value from context can be used.\n   */\n  if (!session->param) {\n    param = GET_PARAM(sys_slist_peek_head(&session->reqs));\n  } else {\n    param = session->param;\n  }\n\n  if (!param) {\n    BT_WARN(\"No UUIDs to be resolved on remote\");\n    return -EINVAL;\n  }\n\n  buf = bt_l2cap_create_pdu(&sdp_pool, 0);\n\n  hdr = net_buf_add(buf, sizeof(*hdr));\n\n  hdr->op_code = BT_SDP_SVC_SEARCH_ATTR_REQ;\n  /* BT_SDP_SEQ8 means length of sequence is on additional next byte */\n  net_buf_add_u8(buf, BT_SDP_SEQ8);\n\n  switch (param->uuid->type) {\n  case BT_UUID_TYPE_16:\n    /* Seq length */\n    net_buf_add_u8(buf, 0x03);\n    /* Seq type */\n    net_buf_add_u8(buf, BT_SDP_UUID16);\n    /* Seq value */\n    net_buf_add_be16(buf, BT_UUID_16(param->uuid)->val);\n    break;\n  case BT_UUID_TYPE_32:\n    net_buf_add_u8(buf, 0x05);\n    net_buf_add_u8(buf, BT_SDP_UUID32);\n    net_buf_add_be32(buf, BT_UUID_32(param->uuid)->val);\n    break;\n  case BT_UUID_TYPE_128:\n    net_buf_add_u8(buf, 0x11);\n    net_buf_add_u8(buf, BT_SDP_UUID128);\n    net_buf_add_mem(buf, BT_UUID_128(param->uuid)->val, ARRAY_SIZE(BT_UUID_128(param->uuid)->val));\n    break;\n  default:\n    BT_ERR(\"Unknown UUID type %u\", param->uuid->type);\n    return -EINVAL;\n  }\n\n  /* Set attribute max bytes count to be returned from server */\n  net_buf_add_be16(buf, BT_SDP_MAX_ATTR_LEN);\n  /*\n   * Sequence definition where data is sequence of elements and where\n   * additional next byte points the size of elements within\n   */\n  net_buf_add_u8(buf, BT_SDP_SEQ8);\n  net_buf_add_u8(buf, 0x05);\n  /* Data element definition for two following 16bits range elements */\n  net_buf_add_u8(buf, BT_SDP_UINT32);\n  /* Get all attributes. It enables filter out wanted only attributes */\n  net_buf_add_be16(buf, 0x0000);\n  net_buf_add_be16(buf, 0xffff);\n\n  /*\n   * Update and validate PDU ContinuationState. Initial SSA Request has\n   * zero length continuation state since no interaction has place with\n   * server so far, otherwise use the original state taken from remote's\n   * last response PDU that is cached by SDP client context.\n   */\n  if (session->cstate.length == 0U) {\n    net_buf_add_u8(buf, 0x00);\n  } else {\n    net_buf_add_u8(buf, session->cstate.length);\n    net_buf_add_mem(buf, session->cstate.data, session->cstate.length);\n  }\n\n  /* set overall PDU length */\n  hdr->param_len = sys_cpu_to_be16(buf->len - sizeof(*hdr));\n\n  /* Update context param to the one being resolving now */\n  session->param = param;\n  session->tid++;\n  hdr->tid = sys_cpu_to_be16(session->tid);\n\n  return bt_l2cap_chan_send(&session->chan.chan, buf);\n}\n\nstatic void sdp_client_params_iterator(struct bt_sdp_client *session) {\n  struct bt_l2cap_chan          *chan = &session->chan.chan;\n  struct bt_sdp_discover_params *param, *tmp;\n\n  SYS_SLIST_FOR_EACH_CONTAINER_SAFE(&session->reqs, param, tmp, _node) {\n    if (param != session->param) {\n      continue;\n    }\n\n    BT_DBG(\"\");\n\n    /* Remove already checked UUID node */\n    sys_slist_remove(&session->reqs, NULL, &param->_node);\n    /* Invalidate cached param in context */\n    session->param = NULL;\n    /* Reset continuation state in current context */\n    (void)memset(&session->cstate, 0, sizeof(session->cstate));\n\n    /* Check if there's valid next UUID */\n    if (!sys_slist_is_empty(&session->reqs)) {\n      sdp_client_ssa_search(session);\n      return;\n    }\n\n    /* No UUID items, disconnect channel */\n    bt_l2cap_chan_disconnect(chan);\n    break;\n  }\n}\n\nstatic uint16_t sdp_client_get_total(struct bt_sdp_client *session, struct net_buf *buf, uint16_t *total) {\n  uint16_t pulled;\n  uint8_t  seq;\n\n  /*\n   * Pull value of total octets of all attributes available to be\n   * collected when response gets completed for given UUID. Such info can\n   * be get from the very first response frame after initial SSA request\n   * was sent. For subsequent calls related to the same SSA request input\n   * buf and in/out function parameters stays neutral.\n   */\n  if (session->cstate.length == 0U) {\n    seq    = net_buf_pull_u8(buf);\n    pulled = 1U;\n    switch (seq) {\n    case BT_SDP_SEQ8:\n      *total = net_buf_pull_u8(buf);\n      pulled += 1U;\n      break;\n    case BT_SDP_SEQ16:\n      *total = net_buf_pull_be16(buf);\n      pulled += 2U;\n      break;\n    default:\n      BT_WARN(\"Sequence type 0x%02x not handled\", seq);\n      *total = 0U;\n      break;\n    }\n\n    BT_DBG(\"Total %u octets of all attributes\", *total);\n  } else {\n    pulled = 0U;\n    *total = 0U;\n  }\n\n  return pulled;\n}\n\nstatic uint16_t get_record_len(struct net_buf *buf) {\n  uint16_t len;\n  uint8_t  seq;\n\n  seq = net_buf_pull_u8(buf);\n\n  switch (seq) {\n  case BT_SDP_SEQ8:\n    len = net_buf_pull_u8(buf);\n    break;\n  case BT_SDP_SEQ16:\n    len = net_buf_pull_be16(buf);\n    break;\n  default:\n    BT_WARN(\"Sequence type 0x%02x not handled\", seq);\n    len = 0U;\n    break;\n  }\n\n  BT_DBG(\"Record len %u\", len);\n\n  return len;\n}\n\nenum uuid_state {\n  UUID_NOT_RESOLVED,\n  UUID_RESOLVED,\n};\n\nstatic void sdp_client_notify_result(struct bt_sdp_client *session, enum uuid_state state) {\n  struct bt_conn             *conn = session->chan.chan.conn;\n  struct bt_sdp_client_result result;\n  uint16_t                    rec_len;\n  uint8_t                     user_ret;\n\n  result.uuid = session->param->uuid;\n\n  if (state == UUID_NOT_RESOLVED) {\n    result.resp_buf         = NULL;\n    result.next_record_hint = false;\n    session->param->func(conn, &result);\n    return;\n  }\n\n  while (session->rec_buf->len) {\n    struct net_buf_simple_state buf_state;\n\n    rec_len = get_record_len(session->rec_buf);\n    /* tell the user about multi record resolution */\n    if (session->rec_buf->len > rec_len) {\n      result.next_record_hint = true;\n    } else {\n      result.next_record_hint = false;\n    }\n\n    /* save the original session buffer */\n    net_buf_simple_save(&session->rec_buf->b, &buf_state);\n    /* initialize internal result buffer instead of memcpy */\n    result.resp_buf = session->rec_buf;\n    /*\n     * Set user internal result buffer length as same as record\n     * length to fake user. User will see the individual record\n     * length as rec_len insted of whole session rec_buf length.\n     */\n    result.resp_buf->len = rec_len;\n\n    user_ret = session->param->func(conn, &result);\n\n    /* restore original session buffer */\n    net_buf_simple_restore(&session->rec_buf->b, &buf_state);\n    /*\n     * sync session buffer data length with next record chunk not\n     * send to user so far\n     */\n    net_buf_pull(session->rec_buf, rec_len);\n    if (user_ret == BT_SDP_DISCOVER_UUID_STOP) {\n      break;\n    }\n  }\n}\n\nstatic int sdp_client_receive(struct bt_l2cap_chan *chan, struct net_buf *buf) {\n  struct bt_sdp_client     *session = SDP_CLIENT_CHAN(chan);\n  struct bt_sdp_hdr        *hdr;\n  struct bt_sdp_pdu_cstate *cstate;\n  uint16_t                  len, tid, frame_len;\n  uint16_t                  total;\n\n  BT_DBG(\"session %p buf %p\", session, buf);\n\n  if (buf->len < sizeof(*hdr)) {\n    BT_ERR(\"Too small SDP PDU\");\n    return 0;\n  }\n\n  hdr = net_buf_pull_mem(buf, sizeof(*hdr));\n  if (hdr->op_code == BT_SDP_ERROR_RSP) {\n    BT_INFO(\"Error SDP PDU response\");\n    return 0;\n  }\n\n  len = sys_be16_to_cpu(hdr->param_len);\n  tid = sys_be16_to_cpu(hdr->tid);\n\n  BT_DBG(\"SDP PDU tid %u len %u\", tid, len);\n\n  if (buf->len != len) {\n    BT_ERR(\"SDP PDU length mismatch (%u != %u)\", buf->len, len);\n    return 0;\n  }\n\n  if (tid != session->tid) {\n    BT_ERR(\"Mismatch transaction ID value in SDP PDU\");\n    return 0;\n  }\n\n  switch (hdr->op_code) {\n  case BT_SDP_SVC_SEARCH_ATTR_RSP:\n    /* Get number of attributes in this frame. */\n    frame_len = net_buf_pull_be16(buf);\n    /* Check valid buf len for attribute list and cont state */\n    if (buf->len < frame_len + SDP_CONT_STATE_LEN_SIZE) {\n      BT_ERR(\"Invalid frame payload length\");\n      return 0;\n    }\n    /* Check valid range of attributes length */\n    if (frame_len < 2) {\n      BT_ERR(\"Invalid attributes data length\");\n      return 0;\n    }\n\n    /* Get PDU continuation state */\n    cstate = (struct bt_sdp_pdu_cstate *)(buf->data + frame_len);\n\n    if (cstate->length > BT_SDP_MAX_PDU_CSTATE_LEN) {\n      BT_ERR(\"Invalid SDP PDU Continuation State length %u\", cstate->length);\n      return 0;\n    }\n\n    if ((frame_len + SDP_CONT_STATE_LEN_SIZE + cstate->length) > buf->len) {\n      BT_ERR(\"Invalid frame payload length\");\n      return 0;\n    }\n\n    /*\n     * No record found for given UUID. The check catches case when\n     * current response frame has Continuation State shortest and\n     * valid and this is the first response frame as well.\n     */\n    if (frame_len == 2U && cstate->length == 0U && session->cstate.length == 0U) {\n      BT_DBG(\"record for UUID 0x%s not found\", bt_uuid_str(session->param->uuid));\n      /* Call user UUID handler */\n      sdp_client_notify_result(session, UUID_NOT_RESOLVED);\n      net_buf_pull(buf, frame_len + sizeof(cstate->length));\n      goto iterate;\n    }\n\n    /* Get total value of all attributes to be collected */\n    frame_len -= sdp_client_get_total(session, buf, &total);\n\n    if (total > net_buf_tailroom(session->rec_buf)) {\n      BT_WARN(\"Not enough room for getting records data\");\n      goto iterate;\n    }\n\n    net_buf_add_mem(session->rec_buf, buf->data, frame_len);\n    net_buf_pull(buf, frame_len);\n\n    /*\n     * check if current response says there's next portion to be\n     * fetched\n     */\n    if (cstate->length) {\n      /* Cache original Continuation State in context */\n      memcpy(&session->cstate, cstate, sizeof(struct bt_sdp_pdu_cstate));\n\n      net_buf_pull(buf, cstate->length + sizeof(cstate->length));\n\n      /* Request for next portion of attributes data */\n      sdp_client_ssa_search(session);\n      break;\n    }\n\n    net_buf_pull(buf, sizeof(cstate->length));\n\n    BT_DBG(\"UUID 0x%s resolved\", bt_uuid_str(session->param->uuid));\n    sdp_client_notify_result(session, UUID_RESOLVED);\n  iterate:\n    /* Get next UUID and start resolving it */\n    sdp_client_params_iterator(session);\n    break;\n  default:\n    BT_DBG(\"PDU 0x%0x response not handled\", hdr->op_code);\n    break;\n  }\n\n  return 0;\n}\n\nstatic int sdp_client_chan_connect(struct bt_sdp_client *session) { return bt_l2cap_br_chan_connect(session->chan.chan.conn, &session->chan.chan, SDP_PSM); }\n\nstatic struct net_buf *sdp_client_alloc_buf(struct bt_l2cap_chan *chan) {\n  struct bt_sdp_client *session = SDP_CLIENT_CHAN(chan);\n  struct net_buf       *buf;\n\n  BT_DBG(\"session %p chan %p\", session, chan);\n\n  session->param = GET_PARAM(sys_slist_peek_head(&session->reqs));\n\n  buf = net_buf_alloc(session->param->pool, K_FOREVER);\n  __ASSERT_NO_MSG(buf);\n\n  return buf;\n}\n\nstatic void sdp_client_connected(struct bt_l2cap_chan *chan) {\n  struct bt_sdp_client *session = SDP_CLIENT_CHAN(chan);\n\n  BT_DBG(\"session %p chan %p connected\", session, chan);\n\n  session->rec_buf = chan->ops->alloc_buf(chan);\n\n  sdp_client_ssa_search(session);\n}\n\nstatic void sdp_client_disconnected(struct bt_l2cap_chan *chan) {\n  struct bt_sdp_client *session = SDP_CLIENT_CHAN(chan);\n\n  BT_DBG(\"session %p chan %p disconnected\", session, chan);\n\n  net_buf_unref(session->rec_buf);\n\n  /*\n   * Reset session excluding L2CAP channel member. Let's the channel\n   * resets autonomous.\n   */\n  (void)memset(&session->reqs, 0, sizeof(*session) - sizeof(session->chan));\n}\n\nstatic const struct bt_l2cap_chan_ops sdp_client_chan_ops = {\n    .connected    = sdp_client_connected,\n    .disconnected = sdp_client_disconnected,\n    .recv         = sdp_client_receive,\n    .alloc_buf    = sdp_client_alloc_buf,\n};\n\nstatic struct bt_sdp_client *sdp_client_new_session(struct bt_conn *conn) {\n  int i;\n\n  for (i = 0; i < ARRAY_SIZE(bt_sdp_client_pool); i++) {\n    struct bt_sdp_client *session = &bt_sdp_client_pool[i];\n    int                   err;\n\n    if (session->chan.chan.conn) {\n      continue;\n    }\n\n    sys_slist_init(&session->reqs);\n\n    session->chan.chan.ops  = &sdp_client_chan_ops;\n    session->chan.chan.conn = conn;\n    session->chan.rx.mtu    = SDP_CLIENT_MTU;\n\n    err = sdp_client_chan_connect(session);\n    if (err) {\n      (void)memset(session, 0, sizeof(*session));\n      BT_ERR(\"Cannot connect %d\", err);\n      return NULL;\n    }\n\n    return session;\n  }\n\n  BT_ERR(\"No available SDP client context\");\n\n  return NULL;\n}\n\nstatic struct bt_sdp_client *sdp_client_get_session(struct bt_conn *conn) {\n  int i;\n\n  for (i = 0; i < ARRAY_SIZE(bt_sdp_client_pool); i++) {\n    if (bt_sdp_client_pool[i].chan.chan.conn == conn) {\n      return &bt_sdp_client_pool[i];\n    }\n  }\n\n  /*\n   * Try to allocate session context since not found in pool and attempt\n   * connect to remote SDP endpoint.\n   */\n  return sdp_client_new_session(conn);\n}\n\nint bt_sdp_discover(struct bt_conn *conn, const struct bt_sdp_discover_params *params) {\n  struct bt_sdp_client *session;\n\n  if (!params || !params->uuid || !params->func || !params->pool) {\n    BT_WARN(\"Invalid user params\");\n    return -EINVAL;\n  }\n\n  session = sdp_client_get_session(conn);\n  if (!session) {\n    return -ENOMEM;\n  }\n\n  sys_slist_append(&session->reqs, (sys_snode_t *)&params->_node);\n\n  return 0;\n}\n\n/* Helper getting length of data determined by DTD for integers */\nstatic inline ssize_t sdp_get_int_len(const uint8_t *data, size_t len) {\n  BT_ASSERT(data);\n\n  switch (data[0]) {\n  case BT_SDP_DATA_NIL:\n    return 1;\n  case BT_SDP_BOOL:\n  case BT_SDP_INT8:\n  case BT_SDP_UINT8:\n    if (len < 2) {\n      break;\n    }\n\n    return 2;\n  case BT_SDP_INT16:\n  case BT_SDP_UINT16:\n    if (len < 3) {\n      break;\n    }\n\n    return 3;\n  case BT_SDP_INT32:\n  case BT_SDP_UINT32:\n    if (len < 5) {\n      break;\n    }\n\n    return 5;\n  case BT_SDP_INT64:\n  case BT_SDP_UINT64:\n    if (len < 9) {\n      break;\n    }\n\n    return 9;\n  case BT_SDP_INT128:\n  case BT_SDP_UINT128:\n  default:\n    BT_ERR(\"Invalid/unhandled DTD 0x%02x\", data[0]);\n    return -EINVAL;\n  }\n\n  BT_ERR(\"Too short buffer length %zu\", len);\n  return -EMSGSIZE;\n}\n\n/* Helper getting length of data determined by DTD for UUID */\nstatic inline ssize_t sdp_get_uuid_len(const uint8_t *data, size_t len) {\n  BT_ASSERT(data);\n\n  switch (data[0]) {\n  case BT_SDP_UUID16:\n    if (len < 3) {\n      break;\n    }\n\n    return 3;\n  case BT_SDP_UUID32:\n    if (len < 5) {\n      break;\n    }\n\n    return 5;\n  case BT_SDP_UUID128:\n  default:\n    BT_ERR(\"Invalid/unhandled DTD 0x%02x\", data[0]);\n    return -EINVAL;\n  }\n\n  BT_ERR(\"Too short buffer length %zu\", len);\n  return -EMSGSIZE;\n}\n\n/* Helper getting length of data determined by DTD for strings */\nstatic inline ssize_t sdp_get_str_len(const uint8_t *data, size_t len) {\n  const uint8_t *pnext;\n\n  BT_ASSERT(data);\n\n  /* validate len for pnext safe use to read next 8bit value */\n  if (len < 2) {\n    goto err;\n  }\n\n  pnext = data + sizeof(uint8_t);\n\n  switch (data[0]) {\n  case BT_SDP_TEXT_STR8:\n  case BT_SDP_URL_STR8:\n    if (len < (2 + pnext[0])) {\n      break;\n    }\n\n    return 2 + pnext[0];\n  case BT_SDP_TEXT_STR16:\n  case BT_SDP_URL_STR16:\n    /* validate len for pnext safe use to read 16bit value */\n    if (len < 3) {\n      break;\n    }\n\n    if (len < (3 + sys_get_be16(pnext))) {\n      break;\n    }\n\n    return 3 + sys_get_be16(pnext);\n  case BT_SDP_TEXT_STR32:\n  case BT_SDP_URL_STR32:\n  default:\n    BT_ERR(\"Invalid/unhandled DTD 0x%02x\", data[0]);\n    return -EINVAL;\n  }\nerr:\n  BT_ERR(\"Too short buffer length %zu\", len);\n  return -EMSGSIZE;\n}\n\n/* Helper getting length of data determined by DTD for sequences */\nstatic inline ssize_t sdp_get_seq_len(const uint8_t *data, size_t len) {\n  const uint8_t *pnext;\n\n  BT_ASSERT(data);\n\n  /* validate len for pnext safe use to read 8bit bit value */\n  if (len < 2) {\n    goto err;\n  }\n\n  pnext = data + sizeof(uint8_t);\n\n  switch (data[0]) {\n  case BT_SDP_SEQ8:\n  case BT_SDP_ALT8:\n    if (len < (2 + pnext[0])) {\n      break;\n    }\n\n    return 2 + pnext[0];\n  case BT_SDP_SEQ16:\n  case BT_SDP_ALT16:\n    /* validate len for pnext safe use to read 16bit value */\n    if (len < 3) {\n      break;\n    }\n\n    if (len < (3 + sys_get_be16(pnext))) {\n      break;\n    }\n\n    return 3 + sys_get_be16(pnext);\n  case BT_SDP_SEQ32:\n  case BT_SDP_ALT32:\n  default:\n    BT_ERR(\"Invalid/unhandled DTD 0x%02x\", data[0]);\n    return -EINVAL;\n  }\nerr:\n  BT_ERR(\"Too short buffer length %zu\", len);\n  return -EMSGSIZE;\n}\n\n/* Helper getting length of attribute value data */\nstatic ssize_t sdp_get_attr_value_len(const uint8_t *data, size_t len) {\n  BT_ASSERT(data);\n\n  BT_DBG(\"Attr val DTD 0x%02x\", data[0]);\n\n  switch (data[0]) {\n  case BT_SDP_DATA_NIL:\n  case BT_SDP_BOOL:\n  case BT_SDP_UINT8:\n  case BT_SDP_UINT16:\n  case BT_SDP_UINT32:\n  case BT_SDP_UINT64:\n  case BT_SDP_UINT128:\n  case BT_SDP_INT8:\n  case BT_SDP_INT16:\n  case BT_SDP_INT32:\n  case BT_SDP_INT64:\n  case BT_SDP_INT128:\n    return sdp_get_int_len(data, len);\n  case BT_SDP_UUID16:\n  case BT_SDP_UUID32:\n  case BT_SDP_UUID128:\n    return sdp_get_uuid_len(data, len);\n  case BT_SDP_TEXT_STR8:\n  case BT_SDP_TEXT_STR16:\n  case BT_SDP_TEXT_STR32:\n  case BT_SDP_URL_STR8:\n  case BT_SDP_URL_STR16:\n  case BT_SDP_URL_STR32:\n    return sdp_get_str_len(data, len);\n  case BT_SDP_SEQ8:\n  case BT_SDP_SEQ16:\n  case BT_SDP_SEQ32:\n  case BT_SDP_ALT8:\n  case BT_SDP_ALT16:\n  case BT_SDP_ALT32:\n    return sdp_get_seq_len(data, len);\n  default:\n    BT_ERR(\"Unknown DTD 0x%02x\", data[0]);\n    return -EINVAL;\n  }\n}\n\n/* Type holding UUID item and related to it specific information. */\nstruct bt_sdp_uuid_desc {\n  union {\n    struct bt_uuid    uuid;\n    struct bt_uuid_16 uuid16;\n    struct bt_uuid_32 uuid32;\n  };\n  uint16_t attr_id;\n  uint8_t *params;\n  uint16_t params_len;\n};\n\n/* Generic attribute item collector. */\nstruct bt_sdp_attr_item {\n  /*  Attribute identifier. */\n  uint16_t attr_id;\n  /*  Address of beginning attribute value taken from original buffer\n   *  holding response from server.\n   */\n  uint8_t *val;\n  /*  Says about the length of attribute value. */\n  uint16_t len;\n};\n\nstatic int bt_sdp_get_attr(const struct net_buf *buf, struct bt_sdp_attr_item *attr, uint16_t attr_id) {\n  uint8_t *data;\n  uint16_t id;\n\n  data = buf->data;\n  while (data - buf->data < buf->len) {\n    ssize_t dlen;\n\n    /* data need to point to attribute id descriptor field (DTD)*/\n    if (data[0] != BT_SDP_UINT16) {\n      BT_ERR(\"Invalid descriptor 0x%02x\", data[0]);\n      return -EINVAL;\n    }\n\n    data += sizeof(uint8_t);\n    id = sys_get_be16(data);\n    BT_DBG(\"Attribute ID 0x%04x\", id);\n    data += sizeof(uint16_t);\n\n    dlen = sdp_get_attr_value_len(data, buf->len - (data - buf->data));\n    if (dlen < 0) {\n      BT_ERR(\"Invalid attribute value data\");\n      return -EINVAL;\n    }\n\n    if (id == attr_id) {\n      BT_DBG(\"Attribute ID 0x%04x Value found\", id);\n      /*\n       * Initialize attribute value buffer data using selected\n       * data slice from original buffer.\n       */\n      attr->val     = data;\n      attr->len     = dlen;\n      attr->attr_id = id;\n      return 0;\n    }\n\n    data += dlen;\n  }\n\n  return -ENOENT;\n}\n\n/* reads SEQ item length, moves input buffer data reader forward */\nstatic ssize_t sdp_get_seq_len_item(uint8_t **data, size_t len) {\n  const uint8_t *pnext;\n\n  BT_ASSERT(data);\n  BT_ASSERT(*data);\n\n  /* validate len for pnext safe use to read 8bit bit value */\n  if (len < 2) {\n    goto err;\n  }\n\n  pnext = *data + sizeof(uint8_t);\n\n  switch (*data[0]) {\n  case BT_SDP_SEQ8:\n    if (len < (2 + pnext[0])) {\n      break;\n    }\n\n    *data += 2;\n    return pnext[0];\n  case BT_SDP_SEQ16:\n    /* validate len for pnext safe use to read 16bit value */\n    if (len < 3) {\n      break;\n    }\n\n    if (len < (3 + sys_get_be16(pnext))) {\n      break;\n    }\n\n    *data += 3;\n    return sys_get_be16(pnext);\n  case BT_SDP_SEQ32:\n    /* validate len for pnext safe use to read 32bit value */\n    if (len < 5) {\n      break;\n    }\n\n    if (len < (5 + sys_get_be32(pnext))) {\n      break;\n    }\n\n    *data += 5;\n    return sys_get_be32(pnext);\n  default:\n    BT_ERR(\"Invalid/unhandled DTD 0x%02x\", *data[0]);\n    return -EINVAL;\n  }\nerr:\n  BT_ERR(\"Too short buffer length %zu\", len);\n  return -EMSGSIZE;\n}\n\nstatic int sdp_get_uuid_data(const struct bt_sdp_attr_item *attr, struct bt_sdp_uuid_desc *pd, uint16_t proto_profile) {\n  /* get start address of attribute value */\n  uint8_t *p = attr->val;\n  ssize_t  slen;\n\n  BT_ASSERT(p);\n\n  /* Attribute value is a SEQ, get length of parent SEQ frame */\n  slen = sdp_get_seq_len_item(&p, attr->len);\n  if (slen < 0) {\n    return slen;\n  }\n\n  /* start reading stacked UUIDs in analyzed sequences tree */\n  while (p - attr->val < attr->len) {\n    size_t to_end, left = 0;\n\n    /* to_end tells how far to the end of input buffer */\n    to_end = attr->len - (p - attr->val);\n    /* how long is current UUID's item data associated to */\n    slen = sdp_get_seq_len_item(&p, to_end);\n    if (slen < 0) {\n      return slen;\n    }\n\n    /* left tells how far is to the end of current UUID */\n    left = slen;\n\n    /* check if at least DTD + UUID16 can be read safely */\n    if (left < 3) {\n      return -EMSGSIZE;\n    }\n\n    /* check DTD and get stacked UUID value */\n    switch (p[0]) {\n    case BT_SDP_UUID16:\n      memcpy(&pd->uuid16, BT_UUID_DECLARE_16(sys_get_be16(++p)), sizeof(struct bt_uuid_16));\n      p += sizeof(uint16_t);\n      left -= sizeof(uint16_t);\n      break;\n    case BT_SDP_UUID32:\n      /* check if valid UUID32 can be read safely */\n      if (left < 5) {\n        return -EMSGSIZE;\n      }\n\n      memcpy(&pd->uuid32, BT_UUID_DECLARE_32(sys_get_be32(++p)), sizeof(struct bt_uuid_32));\n      p += sizeof(uint32_t);\n      left -= sizeof(uint32_t);\n      break;\n    default:\n      BT_ERR(\"Invalid/unhandled DTD 0x%02x\\n\", p[0]);\n      return -EINVAL;\n    }\n\n    /* include last DTD in p[0] size itself updating left */\n    left -= sizeof(p[0]);\n\n    /*\n     * Check if current UUID value matches input one given by user.\n     * If found save it's location and length and return.\n     */\n    if ((proto_profile == BT_UUID_16(&pd->uuid)->val) || (proto_profile == BT_UUID_32(&pd->uuid)->val)) {\n      pd->params     = p;\n      pd->params_len = left;\n\n      BT_DBG(\"UUID 0x%s found\", bt_uuid_str(&pd->uuid));\n      return 0;\n    }\n\n    /* skip left octets to point beginning of next UUID in tree */\n    p += left;\n  }\n\n  BT_DBG(\"Value 0x%04x not found\", proto_profile);\n  return -ENOENT;\n}\n\n/*\n * Helper extracting specific parameters associated with UUID node given in\n * protocol descriptor list or profile descriptor list.\n */\nstatic int sdp_get_param_item(struct bt_sdp_uuid_desc *pd_item, uint16_t *param) {\n  const uint8_t *p       = pd_item->params;\n  bool           len_err = false;\n\n  BT_ASSERT(p);\n\n  BT_DBG(\"Getting UUID's 0x%s params\", bt_uuid_str(&pd_item->uuid));\n\n  switch (p[0]) {\n  case BT_SDP_UINT8:\n    /* check if 8bits value can be read safely */\n    if (pd_item->params_len < 2) {\n      len_err = true;\n      break;\n    }\n    *param = (++p)[0];\n    p += sizeof(uint8_t);\n    break;\n  case BT_SDP_UINT16:\n    /* check if 16bits value can be read safely */\n    if (pd_item->params_len < 3) {\n      len_err = true;\n      break;\n    }\n    *param = sys_get_be16(++p);\n    p += sizeof(uint16_t);\n    break;\n  case BT_SDP_UINT32:\n    /* check if 32bits value can be read safely */\n    if (pd_item->params_len < 5) {\n      len_err = true;\n      break;\n    }\n    *param = sys_get_be32(++p);\n    p += sizeof(uint32_t);\n    break;\n  default:\n    BT_ERR(\"Invalid/unhandled DTD 0x%02x\\n\", p[0]);\n    return -EINVAL;\n  }\n  /*\n   * Check if no more data than already read is associated with UUID. In\n   * valid case after getting parameter we should reach data buf end.\n   */\n  if (p - pd_item->params != pd_item->params_len || len_err) {\n    BT_DBG(\"Invalid param buffer length\");\n    return -EMSGSIZE;\n  }\n\n  return 0;\n}\n\nint bt_sdp_get_proto_param(const struct net_buf *buf, enum bt_sdp_proto proto, uint16_t *param) {\n  struct bt_sdp_attr_item attr;\n  struct bt_sdp_uuid_desc pd;\n  int                     res;\n\n  if (proto != BT_SDP_PROTO_RFCOMM && proto != BT_SDP_PROTO_L2CAP) {\n    BT_ERR(\"Invalid protocol specifier\");\n    return -EINVAL;\n  }\n\n  res = bt_sdp_get_attr(buf, &attr, BT_SDP_ATTR_PROTO_DESC_LIST);\n  if (res < 0) {\n    BT_WARN(\"Attribute 0x%04x not found, err %d\", BT_SDP_ATTR_PROTO_DESC_LIST, res);\n    return res;\n  }\n\n  res = sdp_get_uuid_data(&attr, &pd, proto);\n  if (res < 0) {\n    BT_WARN(\"Protocol specifier 0x%04x not found, err %d\", proto, res);\n    return res;\n  }\n\n  return sdp_get_param_item(&pd, param);\n}\n\nint bt_sdp_get_profile_version(const struct net_buf *buf, uint16_t profile, uint16_t *version) {\n  struct bt_sdp_attr_item attr;\n  struct bt_sdp_uuid_desc pd;\n  int                     res;\n\n  res = bt_sdp_get_attr(buf, &attr, BT_SDP_ATTR_PROFILE_DESC_LIST);\n  if (res < 0) {\n    BT_WARN(\"Attribute 0x%04x not found, err %d\", BT_SDP_ATTR_PROFILE_DESC_LIST, res);\n    return res;\n  }\n\n  res = sdp_get_uuid_data(&attr, &pd, profile);\n  if (res < 0) {\n    BT_WARN(\"Profile 0x%04x not found, err %d\", profile, res);\n    return res;\n  }\n\n  return sdp_get_param_item(&pd, version);\n}\n\nint bt_sdp_get_features(const struct net_buf *buf, uint16_t *features) {\n  struct bt_sdp_attr_item attr;\n  const uint8_t          *p;\n  int                     res;\n\n  res = bt_sdp_get_attr(buf, &attr, BT_SDP_ATTR_SUPPORTED_FEATURES);\n  if (res < 0) {\n    BT_WARN(\"Attribute 0x%04x not found, err %d\", BT_SDP_ATTR_SUPPORTED_FEATURES, res);\n    return res;\n  }\n\n  p = attr.val;\n  BT_ASSERT(p);\n\n  if (p[0] != BT_SDP_UINT16) {\n    BT_ERR(\"Invalid DTD 0x%02x\", p[0]);\n    return -EINVAL;\n  }\n\n  /* assert 16bit can be read safely */\n  if (attr.len < 3) {\n    BT_ERR(\"Data length too short %u\", attr.len);\n    return -EMSGSIZE;\n  }\n\n  *features = sys_get_be16(++p);\n  p += sizeof(uint16_t);\n\n  if (p - attr.val != attr.len) {\n    BT_ERR(\"Invalid data length %u\", attr.len);\n    return -EMSGSIZE;\n  }\n\n  return 0;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/sdp_internal.h",
    "content": "/* sdp_internal.h - Service Discovery Protocol handling */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*\n * The PDU identifiers of SDP packets between client and server\n */\n#define BT_SDP_ERROR_RSP           0x01\n#define BT_SDP_SVC_SEARCH_REQ      0x02\n#define BT_SDP_SVC_SEARCH_RSP      0x03\n#define BT_SDP_SVC_ATTR_REQ        0x04\n#define BT_SDP_SVC_ATTR_RSP        0x05\n#define BT_SDP_SVC_SEARCH_ATTR_REQ 0x06\n#define BT_SDP_SVC_SEARCH_ATTR_RSP 0x07\n\n/*\n * Some additions to support service registration.\n * These are outside the scope of the Bluetooth specification\n */\n#define BT_SDP_SVC_REGISTER_REQ 0x75\n#define BT_SDP_SVC_REGISTER_RSP 0x76\n#define BT_SDP_SVC_UPDATE_REQ   0x77\n#define BT_SDP_SVC_UPDATE_RSP   0x78\n#define BT_SDP_SVC_REMOVE_REQ   0x79\n#define BT_SDP_SVC_REMOVE_RSP   0x80\n\n/*\n * SDP Error codes\n */\n#define BT_SDP_INVALID_VERSION       0x0001\n#define BT_SDP_INVALID_RECORD_HANDLE 0x0002\n#define BT_SDP_INVALID_SYNTAX        0x0003\n#define BT_SDP_INVALID_PDU_SIZE      0x0004\n#define BT_SDP_INVALID_CSTATE        0x0005\n\n#define BT_SDP_MAX_SERVICES 10\n\nstruct bt_sdp_data_elem_seq {\n    uint8_t type;  /* Type: Will be data element sequence */\n    uint16_t size; /* We only support 2 byte sizes for now */\n} __packed;\n\nstruct bt_sdp_hdr {\n    uint8_t op_code;\n    uint16_t tid;\n    uint16_t param_len;\n} __packed;\n\nstruct bt_sdp_svc_rsp {\n    uint16_t total_recs;\n    uint16_t current_recs;\n} __packed;\n\nstruct bt_sdp_att_rsp {\n    uint16_t att_list_len;\n} __packed;\n\n/* Allowed attributes length in SSA Request PDU to be taken from server */\n#define BT_SDP_MAX_ATTR_LEN 0xffff\n\n/* Max allowed length of PDU Continuation State */\n#define BT_SDP_MAX_PDU_CSTATE_LEN 16\n\n/* Type mapping SDP PDU Continuation State */\nstruct bt_sdp_pdu_cstate {\n    uint8_t length;\n    uint8_t data[BT_SDP_MAX_PDU_CSTATE_LEN];\n} __packed;\n\nvoid bt_sdp_init(void);\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/settings.c",
    "content": "/*\n * Copyright (c) 2018 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <bluetooth.h>\n#include <conn.h>\n#include <errno.h>\n#include <zephyr.h>\n\n#define BT_DBG_ENABLED  IS_ENABLED(CONFIG_BT_DEBUG_SETTINGS)\n#define LOG_MODULE_NAME bt_settings\n#include \"log.h\"\n\n#include \"gatt.h\"\n#include \"hci_core.h\"\n#include \"keys.h\"\n#include \"settings.h\"\n#if defined(BFLB_BLE)\n#include <stdlib.h>\n#if defined(CONFIG_BT_SETTINGS)\n#include \"easyflash.h\"\n#endif\n#include \"portable.h\"\n#include <FreeRTOS.h>\n#endif\n\n#if defined(CONFIG_BT_SETTINGS_USE_PRINTK)\nvoid bt_settings_encode_key(char *path, size_t path_size, const char *subsys, bt_addr_le_t *addr, const char *key) {\n  if (key) {\n    snprintk(path, path_size, \"bt/%s/%02x%02x%02x%02x%02x%02x%u/%s\", subsys, addr->a.val[5], addr->a.val[4], addr->a.val[3], addr->a.val[2], addr->a.val[1], addr->a.val[0], addr->type, key);\n  } else {\n    snprintk(path, path_size, \"bt/%s/%02x%02x%02x%02x%02x%02x%u\", subsys, addr->a.val[5], addr->a.val[4], addr->a.val[3], addr->a.val[2], addr->a.val[1], addr->a.val[0], addr->type);\n  }\n\n  BT_DBG(\"Encoded path %s\", log_strdup(path));\n}\n#else\nvoid bt_settings_encode_key(char *path, size_t path_size, const char *subsys, bt_addr_le_t *addr, const char *key) {\n  size_t len = 3;\n\n  /* Skip if path_size is less than 3; strlen(\"bt/\") */\n  if (len < path_size) {\n    /* Key format:\n     *  \"bt/<subsys>/<addr><type>/<key>\", \"/<key>\" is optional\n     */\n    strcpy(path, \"bt/\");\n    strncpy(&path[len], subsys, path_size - len);\n    len = strlen(path);\n    if (len < path_size) {\n      path[len] = '/';\n      len++;\n    }\n\n    for (s8_t i = 5; i >= 0 && len < path_size; i--) {\n      len += bin2hex(&addr->a.val[i], 1, &path[len], path_size - len);\n    }\n\n    if (len < path_size) {\n      /* Type can be either BT_ADDR_LE_PUBLIC or\n       * BT_ADDR_LE_RANDOM (value 0 or 1)\n       */\n      path[len] = '0' + addr->type;\n      len++;\n    }\n\n    if (key && len < path_size) {\n      path[len] = '/';\n      len++;\n      strncpy(&path[len], key, path_size - len);\n      len += strlen(&path[len]);\n    }\n\n    if (len >= path_size) {\n      /* Truncate string */\n      path[path_size - 1] = '\\0';\n    }\n  } else if (path_size > 0) {\n    *path = '\\0';\n  }\n\n  BT_DBG(\"Encoded path %s\", log_strdup(path));\n}\n#endif\n\n#if !defined(BFLB_BLE)\nint bt_settings_decode_key(const char *key, bt_addr_le_t *addr) {\n  if (settings_name_next(key, NULL) != 13) {\n    return -EINVAL;\n  }\n\n  if (key[12] == '0') {\n    addr->type = BT_ADDR_LE_PUBLIC;\n  } else if (key[12] == '1') {\n    addr->type = BT_ADDR_LE_RANDOM;\n  } else {\n    return -EINVAL;\n  }\n\n  for (u8_t i = 0; i < 6; i++) {\n    hex2bin(&key[i * 2], 2, &addr->a.val[5 - i], 1);\n  }\n\n  BT_DBG(\"Decoded %s as %s\", log_strdup(key), bt_addr_le_str(addr));\n\n  return 0;\n}\n\nstatic int set(const char *name, size_t len_rd, settings_read_cb read_cb, void *cb_arg) {\n  ssize_t     len;\n  const char *next;\n\n  if (!name) {\n    BT_ERR(\"Insufficient number of arguments\");\n    return -ENOENT;\n  }\n\n  len = settings_name_next(name, &next);\n\n  if (!strncmp(name, \"id\", len)) {\n    /* Any previously provided identities supersede flash */\n    if (atomic_test_bit(bt_dev.flags, BT_DEV_PRESET_ID)) {\n      BT_WARN(\"Ignoring identities stored in flash\");\n      return 0;\n    }\n\n    len = read_cb(cb_arg, &bt_dev.id_addr, sizeof(bt_dev.id_addr));\n    if (len < sizeof(bt_dev.id_addr[0])) {\n      if (len < 0) {\n        BT_ERR(\"Failed to read ID address from storage\"\n               \" (err %zu)\",\n               len);\n      } else {\n        BT_ERR(\"Invalid length ID address in storage\");\n        BT_HEXDUMP_DBG(&bt_dev.id_addr, len, \"data read\");\n      }\n      (void)memset(bt_dev.id_addr, 0, sizeof(bt_dev.id_addr));\n      bt_dev.id_count = 0U;\n    } else {\n      int i;\n\n      bt_dev.id_count = len / sizeof(bt_dev.id_addr[0]);\n      for (i = 0; i < bt_dev.id_count; i++) {\n        BT_DBG(\"ID[%d] %s\", i, bt_addr_le_str(&bt_dev.id_addr[i]));\n      }\n    }\n\n    return 0;\n  }\n\n#if defined(CONFIG_BT_DEVICE_NAME_DYNAMIC)\n  if (!strncmp(name, \"name\", len)) {\n    len = read_cb(cb_arg, &bt_dev.name, sizeof(bt_dev.name) - 1);\n    if (len < 0) {\n      BT_ERR(\"Failed to read device name from storage\"\n             \" (err %zu)\",\n             len);\n    } else {\n      bt_dev.name[len] = '\\0';\n\n      BT_DBG(\"Name set to %s\", log_strdup(bt_dev.name));\n    }\n    return 0;\n  }\n#endif\n\n#if defined(CONFIG_BT_PRIVACY)\n  if (!strncmp(name, \"irk\", len)) {\n    len = read_cb(cb_arg, bt_dev.irk, sizeof(bt_dev.irk));\n    if (len < sizeof(bt_dev.irk[0])) {\n      if (len < 0) {\n        BT_ERR(\"Failed to read IRK from storage\"\n               \" (err %zu)\",\n               len);\n      } else {\n        BT_ERR(\"Invalid length IRK in storage\");\n        (void)memset(bt_dev.irk, 0, sizeof(bt_dev.irk));\n      }\n    } else {\n      int i, count;\n\n      count = len / sizeof(bt_dev.irk[0]);\n      for (i = 0; i < count; i++) {\n        BT_DBG(\"IRK[%d] %s\", i, bt_hex(bt_dev.irk[i], 16));\n      }\n    }\n\n    return 0;\n  }\n#endif /* CONFIG_BT_PRIVACY */\n\n  return -ENOENT;\n}\n\n#define ID_DATA_LEN(array) (bt_dev.id_count * sizeof(array[0]))\n\nstatic void save_id(struct k_work *work) {\n  int err;\n  BT_INFO(\"Saving ID\");\n  err = settings_save_one(\"bt/id\", &bt_dev.id_addr, ID_DATA_LEN(bt_dev.id_addr));\n  if (err) {\n    BT_ERR(\"Failed to save ID (err %d)\", err);\n  }\n\n#if defined(CONFIG_BT_PRIVACY)\n  err = settings_save_one(\"bt/irk\", bt_dev.irk, ID_DATA_LEN(bt_dev.irk));\n  if (err) {\n    BT_ERR(\"Failed to save IRK (err %d)\", err);\n  }\n#endif\n}\n\nK_WORK_DEFINE(save_id_work, save_id);\n#endif //! BFLB_BLE\n#if defined(BFLB_BLE)\n#if defined(CONFIG_BT_SETTINGS)\nbool ef_ready_flag = false;\nint  bt_check_if_ef_ready() {\n  int err = 0;\n\n  if (!ef_ready_flag) {\n    err = easyflash_init();\n    if (!err)\n      ef_ready_flag = true;\n  }\n\n  return err;\n}\n\nint bt_settings_set_bin(const char *key, const uint8_t *value, size_t length) {\n  int err;\n\n  err = bt_check_if_ef_ready();\n  if (err)\n    return err;\n\n  err = ef_set_env_blob(key, value, length);\n\n  return err;\n}\n\nint bt_settings_get_bin(const char *key, u8_t *value, size_t exp_len, size_t *real_len) {\n  int    err;\n  size_t rlen;\n\n  err = bt_check_if_ef_ready();\n  if (err)\n    return err;\n\n  rlen = ef_get_env_blob(key, value, exp_len, NULL);\n\n  if (real_len)\n    *real_len = rlen;\n\n  return 0;\n}\n\nint settings_delete(const char *key) { return ef_del_env(key); }\n\nint settings_save_one(const char *key, const u8_t *value, size_t length) { return bt_settings_set_bin(key, value, length); }\n#endif // CONFIG_BT_SETTINGS\n#endif\n\nvoid bt_settings_save_id(void) {\n#if defined(BFLB_BLE)\n#if defined(CONFIG_BT_SETTINGS)\n  if (bt_check_if_ef_ready())\n    return;\n  bt_settings_set_bin(NV_LOCAL_ID_ADDR, (const u8_t *)&bt_dev.id_addr[0], sizeof(bt_addr_le_t) * CONFIG_BT_ID_MAX);\n#if defined(CONFIG_BT_PRIVACY)\n  bt_settings_set_bin(NV_LOCAL_IRK, (const u8_t *)&bt_dev.irk[0], 16 * CONFIG_BT_ID_MAX);\n#endif // CONFIG_BT_PRIVACY\n#endif // CONFIG_BT_SETTINGS\n#else\n  k_work_submit(&save_id_work);\n#endif\n}\n\n#if defined(BFLB_BLE)\n#if defined(CONFIG_BT_SETTINGS)\nvoid bt_settings_save_name(void) { bt_settings_set_bin(NV_LOCAL_NAME, (u8_t *)bt_dev.name, strlen(bt_dev.name) + 1); }\n\nvoid bt_local_info_load(void) {\n  if (bt_check_if_ef_ready())\n    return;\n#if defined(CONFIG_BT_DEVICE_NAME_DYNAMIC)\n  bt_settings_get_bin(NV_LOCAL_NAME, (u8_t *)bt_dev.name, CONFIG_BT_DEVICE_NAME_MAX, NULL);\n#endif\n  bt_settings_get_bin(NV_LOCAL_ID_ADDR, (u8_t *)&bt_dev.id_addr[0], sizeof(bt_addr_le_t) * CONFIG_BT_ID_MAX, NULL);\n#if defined(CONFIG_BT_PRIVACY)\n  bt_settings_get_bin(NV_LOCAL_IRK, (u8_t *)&bt_dev.irk[0][0], 16 * CONFIG_BT_ID_MAX, NULL);\n#endif\n}\n#endif // CONFIG_BT_SETTINGS\n#endif\n\n#if !defined(BFLB_BLE)\nstatic int commit(void) {\n  BT_DBG(\"\");\n\n#if defined(CONFIG_BT_DEVICE_NAME_DYNAMIC)\n  if (bt_dev.name[0] == '\\0') {\n    bt_set_name(CONFIG_BT_DEVICE_NAME);\n  }\n#endif\n  if (!bt_dev.id_count) {\n    int err;\n\n    err = bt_setup_id_addr();\n    if (err) {\n      BT_ERR(\"Unable to setup an identity address\");\n      return err;\n    }\n  }\n\n  /* Make sure that the identities created by bt_id_create after\n   * bt_enable is saved to persistent storage. */\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_PRESET_ID)) {\n    bt_settings_save_id();\n  }\n\n  if (!atomic_test_bit(bt_dev.flags, BT_DEV_READY)) {\n    bt_finalize_init();\n  }\n\n  return 0;\n}\n\nSETTINGS_STATIC_HANDLER_DEFINE(bt, \"bt\", NULL, set, commit, NULL);\n\n#endif //! BFLB_BLE\n\nint bt_settings_init(void) {\n#if defined(BFLB_BLE)\n  return 0;\n#else\n  int err;\n\n  BT_DBG(\"\");\n\n  err = settings_subsys_init();\n  if (err) {\n    BT_ERR(\"settings_subsys_init failed (err %d)\", err);\n    return err;\n  }\n\n  return 0;\n#endif\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/settings.h",
    "content": "/*\n * Copyright (c) 2018 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#if defined(BFLB_BLE)\n#include \"addr.h\"\n#endif\n\n/* Max settings key length (with all components) */\n#define BT_SETTINGS_KEY_MAX 36\n\n/* Base64-encoded string buffer size of in_size bytes */\n#define BT_SETTINGS_SIZE(in_size) ((((((in_size)-1) / 3) * 4) + 4) + 1)\n\n/* Helpers for keys containing a bdaddr */\nvoid bt_settings_encode_key(char *path, size_t path_size, const char *subsys,\n                            bt_addr_le_t *addr, const char *key);\nint bt_settings_decode_key(const char *key, bt_addr_le_t *addr);\n\nvoid bt_settings_save_id(void);\n\nint bt_settings_init(void);\n\n#if defined(BFLB_BLE)\n#define NV_LOCAL_NAME    \"LOCAL_NAME\"\n#define NV_LOCAL_ID_ADDR \"LOCAL_ID_ADDR\"\n#define NV_LOCAL_IRK     \"LOCAL_IRK\"\n#define NV_KEY_POOL      \"KEY_POOL\"\n#define NV_IMG_info      \"IMG_INFO\"\n\nint bt_settings_get_bin(const char *key, u8_t *value, size_t exp_len, size_t *real_len);\nint bt_settings_set_bin(const char *key, const u8_t *value, size_t length);\nint settings_delete(const char *key);\nint settings_save_one(const char *key, const u8_t *value, size_t length);\nvoid bt_settings_save_name(void);\nvoid bt_local_info_load(void);\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/smp.h",
    "content": "/**\n * @file smp.h\n * Security Manager Protocol implementation header\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\nstruct bt_smp_hdr {\n    u8_t code;\n} __packed;\n\n#define BT_SMP_ERR_PASSKEY_ENTRY_FAILED      0x01\n#define BT_SMP_ERR_OOB_NOT_AVAIL             0x02\n#define BT_SMP_ERR_AUTH_REQUIREMENTS         0x03\n#define BT_SMP_ERR_CONFIRM_FAILED            0x04\n#define BT_SMP_ERR_PAIRING_NOTSUPP           0x05\n#define BT_SMP_ERR_ENC_KEY_SIZE              0x06\n#define BT_SMP_ERR_CMD_NOTSUPP               0x07\n#define BT_SMP_ERR_UNSPECIFIED               0x08\n#define BT_SMP_ERR_REPEATED_ATTEMPTS         0x09\n#define BT_SMP_ERR_INVALID_PARAMS            0x0a\n#define BT_SMP_ERR_DHKEY_CHECK_FAILED        0x0b\n#define BT_SMP_ERR_NUMERIC_COMP_FAILED       0x0c\n#define BT_SMP_ERR_BREDR_PAIRING_IN_PROGRESS 0x0d\n#define BT_SMP_ERR_CROSS_TRANSP_NOT_ALLOWED  0x0e\n\n#define BT_SMP_IO_DISPLAY_ONLY     0x00\n#define BT_SMP_IO_DISPLAY_YESNO    0x01\n#define BT_SMP_IO_KEYBOARD_ONLY    0x02\n#define BT_SMP_IO_NO_INPUT_OUTPUT  0x03\n#define BT_SMP_IO_KEYBOARD_DISPLAY 0x04\n\n#define BT_SMP_OOB_DATA_MASK   0x01\n#define BT_SMP_OOB_NOT_PRESENT 0x00\n#define BT_SMP_OOB_PRESENT     0x01\n\n#define BT_SMP_MIN_ENC_KEY_SIZE 7\n#define BT_SMP_MAX_ENC_KEY_SIZE 16\n\n#define BT_SMP_DIST_ENC_KEY  0x01\n#define BT_SMP_DIST_ID_KEY   0x02\n#define BT_SMP_DIST_SIGN     0x04\n#define BT_SMP_DIST_LINK_KEY 0x08\n\n#define BT_SMP_DIST_MASK 0x0f\n\n#define BT_SMP_AUTH_NONE     0x00\n#define BT_SMP_AUTH_BONDING  0x01\n#define BT_SMP_AUTH_MITM     0x04\n#define BT_SMP_AUTH_SC       0x08\n#define BT_SMP_AUTH_KEYPRESS 0x10\n#define BT_SMP_AUTH_CT2      0x20\n\n#define BT_SMP_CMD_PAIRING_REQ 0x01\n#define BT_SMP_CMD_PAIRING_RSP 0x02\nstruct bt_smp_pairing {\n    u8_t io_capability;\n    u8_t oob_flag;\n    u8_t auth_req;\n    u8_t max_key_size;\n    u8_t init_key_dist;\n    u8_t resp_key_dist;\n} __packed;\n\n#define BT_SMP_CMD_PAIRING_CONFIRM 0x03\nstruct bt_smp_pairing_confirm {\n    u8_t val[16];\n} __packed;\n\n#define BT_SMP_CMD_PAIRING_RANDOM 0x04\nstruct bt_smp_pairing_random {\n    u8_t val[16];\n} __packed;\n\n#define BT_SMP_CMD_PAIRING_FAIL 0x05\nstruct bt_smp_pairing_fail {\n    u8_t reason;\n} __packed;\n\n#define BT_SMP_CMD_ENCRYPT_INFO 0x06\nstruct bt_smp_encrypt_info {\n    u8_t ltk[16];\n} __packed;\n\n#define BT_SMP_CMD_MASTER_IDENT 0x07\nstruct bt_smp_master_ident {\n    u8_t ediv[2];\n    u8_t rand[8];\n} __packed;\n\n#define BT_SMP_CMD_IDENT_INFO 0x08\nstruct bt_smp_ident_info {\n    u8_t irk[16];\n} __packed;\n\n#define BT_SMP_CMD_IDENT_ADDR_INFO 0x09\nstruct bt_smp_ident_addr_info {\n    bt_addr_le_t addr;\n} __packed;\n\n#define BT_SMP_CMD_SIGNING_INFO 0x0a\nstruct bt_smp_signing_info {\n    u8_t csrk[16];\n} __packed;\n\n#define BT_SMP_CMD_SECURITY_REQUEST 0x0b\nstruct bt_smp_security_request {\n    u8_t auth_req;\n} __packed;\n\n#define BT_SMP_CMD_PUBLIC_KEY 0x0c\nstruct bt_smp_public_key {\n    u8_t x[32];\n    u8_t y[32];\n} __packed;\n\n#define BT_SMP_DHKEY_CHECK 0x0d\nstruct bt_smp_dhkey_check {\n    u8_t e[16];\n} __packed;\n\nint bt_smp_start_security(struct bt_conn *conn);\nbool bt_smp_request_ltk(struct bt_conn *conn, u64_t rand, u16_t ediv,\n                        u8_t *ltk);\n\nvoid bt_smp_update_keys(struct bt_conn *conn);\n\nint bt_smp_br_send_pairing_req(struct bt_conn *conn);\n\nint bt_smp_init(void);\n\nint bt_smp_auth_passkey_entry(struct bt_conn *conn, unsigned int passkey);\nint bt_smp_auth_passkey_confirm(struct bt_conn *conn);\nint bt_smp_auth_pairing_confirm(struct bt_conn *conn);\nint bt_smp_auth_cancel(struct bt_conn *conn);\n\nint bt_smp_le_oob_generate_sc_data(struct bt_le_oob_sc_data *le_sc_oob);\nint bt_smp_le_oob_set_sc_data(struct bt_conn *conn,\n                              const struct bt_le_oob_sc_data *oobd_local,\n                              const struct bt_le_oob_sc_data *oobd_remote);\nint bt_smp_le_oob_get_sc_data(struct bt_conn *conn,\n                              const struct bt_le_oob_sc_data **oobd_local,\n                              const struct bt_le_oob_sc_data **oobd_remote);\n\n/** brief Verify signed message\n *\n *  @param conn Bluetooth connection\n *  @param buf received packet buffer with message and signature\n *\n *  @return 0 in success, error code otherwise\n */\nint bt_smp_sign_verify(struct bt_conn *conn, struct net_buf *buf);\n\n/** brief Sign message\n *\n *  @param conn Bluetooth connection\n *  @param buf message buffer\n *\n *  @return 0 in success, error code otherwise\n */\nint bt_smp_sign(struct bt_conn *conn, struct net_buf *buf);\n\n#if defined(CONFIG_AUTO_PTS)\nint bt_le_oob_set_legacy_tk(struct bt_conn *conn, const uint8_t *tk);\n#endif\n\n#if defined(CONFIG_BLE_AT_CMD)\nstruct smp_parameters {\n    u8_t auth;\n    u8_t iocap;\n    u16_t key_size;\n    u8_t init_key;\n    u8_t rsp_key;\n    u8_t set;\n};\n\nstruct smp_parameters user_smp_paras;\nint ble_set_smp_paramters(const struct smp_parameters *paras);\nint ble_get_smp_paramters(const struct bt_conn *conn, struct smp_parameters *paras);\n#endif\n#if defined(BFLB_BLE_SMP_LOCAL_AUTH)\nvoid smp_set_auth(u8_t auth);\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/smp_null.c",
    "content": "/**\n * @file smp_null.c\n * Security Manager Protocol stub\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <atomic.h>\n#include <errno.h>\n#include <misc/util.h>\n#include <zephyr.h>\n\n#include <../include/bluetooth/buf.h>\n#include <bluetooth.h>\n#include <conn.h>\n\n#define BT_DBG_ENABLED  IS_ENABLED(CONFIG_BT_DEBUG_HCI_CORE)\n#define LOG_MODULE_NAME bt_smp\n#include \"log.h\"\n\n#include \"conn_internal.h\"\n#include \"hci_core.h\"\n#include \"l2cap_internal.h\"\n#include \"smp.h\"\n\nstatic struct bt_l2cap_le_chan bt_smp_pool[CONFIG_BT_MAX_CONN];\n\nint bt_smp_sign_verify(struct bt_conn *conn, struct net_buf *buf) { return -ENOTSUP; }\n\nint bt_smp_sign(struct bt_conn *conn, struct net_buf *buf) { return -ENOTSUP; }\n\nstatic int bt_smp_recv(struct bt_l2cap_chan *chan, struct net_buf *buf) {\n  struct bt_conn             *conn = chan->conn;\n  struct bt_smp_pairing_fail *rsp;\n  struct bt_smp_hdr          *hdr;\n\n  /* If a device does not support pairing then it shall respond with\n   * a Pairing Failed command with the reason set to \"Pairing Not\n   * Supported\" when any command is received.\n   * Core Specification Vol. 3, Part H, 3.3\n   */\n\n  buf = bt_l2cap_create_pdu(NULL, 0);\n  /* NULL is not a possible return due to K_FOREVER */\n\n  hdr       = net_buf_add(buf, sizeof(*hdr));\n  hdr->code = BT_SMP_CMD_PAIRING_FAIL;\n\n  rsp         = net_buf_add(buf, sizeof(*rsp));\n  rsp->reason = BT_SMP_ERR_PAIRING_NOTSUPP;\n\n  bt_l2cap_send(conn, BT_L2CAP_CID_SMP, buf);\n\n  return 0;\n}\n\nstatic int bt_smp_accept(struct bt_conn *conn, struct bt_l2cap_chan **chan) {\n  int                             i;\n  static struct bt_l2cap_chan_ops ops = {\n      .recv = bt_smp_recv,\n  };\n\n  BT_DBG(\"conn %p handle %u\", conn, conn->handle);\n\n  for (i = 0; i < ARRAY_SIZE(bt_smp_pool); i++) {\n    struct bt_l2cap_le_chan *smp = &bt_smp_pool[i];\n\n    if (smp->chan.conn) {\n      continue;\n    }\n\n    smp->chan.ops = &ops;\n\n    *chan = &smp->chan;\n\n    return 0;\n  }\n\n  BT_ERR(\"No available SMP context for conn %p\", conn);\n\n  return -ENOMEM;\n}\n\nBT_L2CAP_CHANNEL_DEFINE(smp_fixed_chan, BT_L2CAP_CID_SMP, bt_smp_accept);\n\nint bt_smp_init(void) { return 0; }\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/host/uuid.c",
    "content": "/* uuid.c - Bluetooth UUID handling */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <errno.h>\n#include <misc/byteorder.h>\n#include <misc/printk.h>\n#include <string.h>\n\n#include <uuid.h>\n\n#define UUID_16_BASE_OFFSET 12\n\n/* TODO: Decide whether to continue using BLE format or switch to RFC 4122 */\n\n/* Base UUID : 0000[0000]-0000-1000-8000-00805F9B34FB\n * 0x2800    : 0000[2800]-0000-1000-8000-00805F9B34FB\n *  little endian 0x2800 : [00 28] -> no swapping required\n *  big endian 0x2800    : [28 00] -> swapping required\n */\nstatic const struct bt_uuid_128 uuid128_base = {.uuid = {BT_UUID_TYPE_128}, .val = {BT_UUID_128_ENCODE(0x00000000, 0x0000, 0x1000, 0x8000, 0x00805F9B34FB)}};\n\nstatic void uuid_to_uuid128(const struct bt_uuid *src, struct bt_uuid_128 *dst) {\n  switch (src->type) {\n  case BT_UUID_TYPE_16:\n    *dst = uuid128_base;\n    sys_put_le16(BT_UUID_16(src)->val, &dst->val[UUID_16_BASE_OFFSET]);\n    return;\n  case BT_UUID_TYPE_32:\n    *dst = uuid128_base;\n    sys_put_le32(BT_UUID_32(src)->val, &dst->val[UUID_16_BASE_OFFSET]);\n    return;\n  case BT_UUID_TYPE_128:\n    memcpy(dst, src, sizeof(*dst));\n    return;\n  }\n}\n\nstatic int uuid128_cmp(const struct bt_uuid *u1, const struct bt_uuid *u2) {\n  struct bt_uuid_128 uuid1, uuid2;\n\n  uuid_to_uuid128(u1, &uuid1);\n  uuid_to_uuid128(u2, &uuid2);\n\n  return memcmp(uuid1.val, uuid2.val, 16);\n}\n\nint bt_uuid_cmp(const struct bt_uuid *u1, const struct bt_uuid *u2) {\n  /* Convert to 128 bit if types don't match */\n  if (u1->type != u2->type) {\n    return uuid128_cmp(u1, u2);\n  }\n\n  switch (u1->type) {\n  case BT_UUID_TYPE_16:\n    return (int)BT_UUID_16(u1)->val - (int)BT_UUID_16(u2)->val;\n  case BT_UUID_TYPE_32:\n    return (int)BT_UUID_32(u1)->val - (int)BT_UUID_32(u2)->val;\n  case BT_UUID_TYPE_128:\n    return memcmp(BT_UUID_128(u1)->val, BT_UUID_128(u2)->val, 16);\n  }\n\n  return -EINVAL;\n}\n\nbool bt_uuid_create(struct bt_uuid *uuid, const u8_t *data, u8_t data_len) {\n  /* Copy UUID from packet data/internal variable to internal bt_uuid */\n  switch (data_len) {\n  case 2:\n    uuid->type            = BT_UUID_TYPE_16;\n    BT_UUID_16(uuid)->val = sys_get_le16(data);\n    break;\n  case 4:\n    uuid->type            = BT_UUID_TYPE_32;\n    BT_UUID_32(uuid)->val = sys_get_le32(data);\n    break;\n  case 16:\n    uuid->type = BT_UUID_TYPE_128;\n    memcpy(&BT_UUID_128(uuid)->val, data, 16);\n    break;\n  default:\n    return false;\n  }\n  return true;\n}\n\n#if defined(CONFIG_BT_DEBUG)\nvoid bt_uuid_to_str(const struct bt_uuid *uuid, char *str, size_t len) {\n  u32_t tmp1, tmp5;\n  u16_t tmp0, tmp2, tmp3, tmp4;\n\n  switch (uuid->type) {\n  case BT_UUID_TYPE_16:\n    snprintk(str, len, \"%04x\", BT_UUID_16(uuid)->val);\n    break;\n  case BT_UUID_TYPE_32:\n    snprintk(str, len, \"%04x\", BT_UUID_32(uuid)->val);\n    break;\n  case BT_UUID_TYPE_128:\n    memcpy(&tmp0, &BT_UUID_128(uuid)->val[0], sizeof(tmp0));\n    memcpy(&tmp1, &BT_UUID_128(uuid)->val[2], sizeof(tmp1));\n    memcpy(&tmp2, &BT_UUID_128(uuid)->val[6], sizeof(tmp2));\n    memcpy(&tmp3, &BT_UUID_128(uuid)->val[8], sizeof(tmp3));\n    memcpy(&tmp4, &BT_UUID_128(uuid)->val[10], sizeof(tmp4));\n    memcpy(&tmp5, &BT_UUID_128(uuid)->val[12], sizeof(tmp5));\n\n    snprintk(str, len, \"%08x-%04x-%04x-%04x-%08x%04x\", tmp5, tmp4, tmp3, tmp2, tmp1, tmp0);\n    break;\n  default:\n    (void)memset(str, 0, len);\n    return;\n  }\n}\n\nconst char *bt_uuid_str_real(const struct bt_uuid *uuid) {\n  static char str[37];\n\n  bt_uuid_to_str(uuid, str, sizeof(str));\n\n  return str;\n}\n#endif /* CONFIG_BT_DEBUG */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/a2dp-codec.h",
    "content": "/** @file\n * @brief Advance Audio Distribution Profile - SBC Codec header.\n */\n/*\n * SPDX-License-Identifier: Apache-2.0\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_A2DP_CODEC_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_A2DP_CODEC_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Sampling Frequency */\n#define A2DP_SBC_SAMP_FREQ_16000 BIT(7)\n#define A2DP_SBC_SAMP_FREQ_32000 BIT(6)\n#define A2DP_SBC_SAMP_FREQ_44100 BIT(5)\n#define A2DP_SBC_SAMP_FREQ_48000 BIT(4)\n\n/* Channel Mode */\n#define A2DP_SBC_CH_MODE_MONO  BIT(3)\n#define A2DP_SBC_CH_MODE_DUAL  BIT(2)\n#define A2DP_SBC_CH_MODE_STREO BIT(1)\n#define A2DP_SBC_CH_MODE_JOINT BIT(0)\n\n/* Block Length */\n#define A2DP_SBC_BLK_LEN_4  BIT(7)\n#define A2DP_SBC_BLK_LEN_8  BIT(6)\n#define A2DP_SBC_BLK_LEN_12 BIT(5)\n#define A2DP_SBC_BLK_LEN_16 BIT(4)\n\n/* Subbands */\n#define A2DP_SBC_SUBBAND_4 BIT(3)\n#define A2DP_SBC_SUBBAND_8 BIT(2)\n\n/* Allocation Method */\n#define A2DP_SBC_ALLOC_MTHD_SNR      BIT(1)\n#define A2DP_SBC_ALLOC_MTHD_LOUDNESS BIT(0)\n\n#define BT_A2DP_SBC_SAMP_FREQ(preset)  ((preset->config[0] >> 4) & 0x0f)\n#define BT_A2DP_SBC_CHAN_MODE(preset)  ((preset->config[0]) & 0x0f)\n#define BT_A2DP_SBC_BLK_LEN(preset)    ((preset->config[1] >> 4) & 0x0f)\n#define BT_A2DP_SBC_SUB_BAND(preset)   ((preset->config[1] >> 2) & 0x03)\n#define BT_A2DP_SBC_ALLOC_MTHD(preset) ((preset->config[1]) & 0x03)\n\n/** @brief SBC Codec */\nstruct bt_a2dp_codec_sbc_params {\n    /** First two octets of configuration */\n    uint8_t config[2];\n    /** Minimum Bitpool Value */\n    uint8_t min_bitpool;\n    /** Maximum Bitpool Value */\n    uint8_t max_bitpool;\n} __packed;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_A2DP_CODEC_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/a2dp.h",
    "content": "/** @file\n * @brief Advance Audio Distribution Profile header.\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_A2DP_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_A2DP_H_\n\n#include <avdtp.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** @brief Stream Structure */\nstruct bt_a2dp_stream {\n    /* TODO */\n};\n\n/** @brief Codec ID */\nenum bt_a2dp_codec_id {\n    /** Codec SBC */\n    BT_A2DP_SBC = 0x00,\n    /** Codec MPEG-1 */\n    BT_A2DP_MPEG1 = 0x01,\n    /** Codec MPEG-2 */\n    BT_A2DP_MPEG2 = 0x02,\n    /** Codec ATRAC */\n    BT_A2DP_ATRAC = 0x04,\n    /** Codec Non-A2DP */\n    BT_A2DP_VENDOR = 0xff\n};\n\n/** @brief Media Codec Type */\nenum MEDIA_CODEC_TYPE {\n    /** SBC codec type */\n    BT_A2DP_CODEC_TYPE_SBC = 0x00,\n    /** AAC codec type */\n    BT_A2DP_CODEC_TYPE_AAC = 0x02,\n    /** AAC codec type */\n    BT_A2DP_CODEC_TYPE_VENDOR = 0xff,\n};\n\n/** @brief Preset for the endpoint */\nstruct bt_a2dp_preset {\n    /** Length of preset */\n    uint8_t len;\n    /** Preset */\n    uint8_t preset[0];\n};\n\n/** @brief Stream End Point */\nstruct bt_a2dp_endpoint {\n    /** Code ID */\n    uint8_t codec_id;\n    /** Stream End Point Information */\n    struct bt_avdtp_seid_lsep info;\n    /** Pointer to preset codec chosen */\n    struct bt_a2dp_preset *preset;\n    /** Capabilities */\n    struct bt_a2dp_preset *caps;\n};\n\n/** @brief Stream End Point Media Type */\nenum MEDIA_TYPE {\n    /** Audio Media Type */\n    BT_A2DP_AUDIO = 0x00,\n    /** Video Media Type */\n    BT_A2DP_VIDEO = 0x01,\n    /** Multimedia Media Type */\n    BT_A2DP_MULTIMEDIA = 0x02\n};\n\n/** @brief Stream End Point Role */\nenum ROLE_TYPE {\n    /** Source Role */\n    BT_A2DP_SOURCE = 0,\n    /** Sink Role */\n    BT_A2DP_SINK = 1\n};\n\n/** @brief A2DP structure */\nstruct bt_a2dp;\n\n/** @brief A2DP Connect.\n *\n *  This function is to be called after the conn parameter is obtained by\n *  performing a GAP procedure. The API is to be used to establish A2DP\n *  connection between devices.\n *\n *  @param conn Pointer to bt_conn structure.\n *\n *  @return pointer to struct bt_a2dp in case of success or NULL in case\n *  of error.\n */\nstruct bt_a2dp *bt_a2dp_connect(struct bt_conn *conn);\n\n/** @brief Endpoint Registration.\n *\n *  This function is used for registering the stream end points. The user has\n *  to take care of allocating the memory, the preset pointer and then pass the\n *  required arguments. Also, only one sep can be registered at a time.\n *\n *  @param endpoint Pointer to bt_a2dp_endpoint structure.\n *  @param media_type Media type that the Endpoint is.\n *  @param role Role of Endpoint.\n *\n *  @return 0 in case of success and error code in case of error.\n */\nint bt_a2dp_register_endpoint(struct bt_a2dp_endpoint *endpoint,\n                              uint8_t media_type, uint8_t role);\n\n/** @brief SBC decode init.\n *\n *  @return 0 in case of success and error code in case of error.\n */\nint a2dp_sbc_decode_init();\n\n/** @brief SBC decode process.\n *\n *  @return 0 in case of success and error code in case of error.\n */\nint a2dp_sbc_decode_process(uint8_t *media_data, uint16_t data_len);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_A2DP_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/addr.h",
    "content": "/** @file\n *  @brief Bluetooth device address definitions and utilities.\n */\n\n/*\n * Copyright (c) 2019 Nordic Semiconductor ASA\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_ADDR_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_ADDR_H_\n\n#include <zephyr/types.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define BT_ADDR_LE_PUBLIC    0x00\n#define BT_ADDR_LE_RANDOM    0x01\n#define BT_ADDR_LE_PUBLIC_ID 0x02\n#define BT_ADDR_LE_RANDOM_ID 0x03\n\n/** Bluetooth Device Address */\ntypedef struct {\n    u8_t val[6];\n} bt_addr_t;\n\n/** Bluetooth LE Device Address */\ntypedef struct {\n    u8_t type;\n    bt_addr_t a;\n} bt_addr_le_t;\n\n#define BT_ADDR_ANY  (&(bt_addr_t){ { 0, 0, 0, 0, 0, 0 } })\n#define BT_ADDR_NONE (&(bt_addr_t){ \\\n    { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } })\n#define BT_ADDR_LE_ANY  (&(bt_addr_le_t){ 0, { { 0, 0, 0, 0, 0, 0 } } })\n#define BT_ADDR_LE_NONE (&(bt_addr_le_t){ 0, \\\n                                          { { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } } })\n\nstatic inline int bt_addr_cmp(const bt_addr_t *a, const bt_addr_t *b)\n{\n    return memcmp(a, b, sizeof(*a));\n}\n\nstatic inline int bt_addr_le_cmp(const bt_addr_le_t *a, const bt_addr_le_t *b)\n{\n    return memcmp(a, b, sizeof(*a));\n}\n\nstatic inline void bt_addr_copy(bt_addr_t *dst, const bt_addr_t *src)\n{\n    memcpy(dst, src, sizeof(*dst));\n}\n\nstatic inline void bt_addr_le_copy(bt_addr_le_t *dst, const bt_addr_le_t *src)\n{\n    memcpy(dst, src, sizeof(*dst));\n}\n\n#define BT_ADDR_IS_RPA(a)    (((a)->val[5] & 0xc0) == 0x40)\n#define BT_ADDR_IS_NRPA(a)   (((a)->val[5] & 0xc0) == 0x00)\n#define BT_ADDR_IS_STATIC(a) (((a)->val[5] & 0xc0) == 0xc0)\n\n#define BT_ADDR_SET_RPA(a)    ((a)->val[5] = (((a)->val[5] & 0x3f) | 0x40))\n#define BT_ADDR_SET_NRPA(a)   ((a)->val[5] &= 0x3f)\n#define BT_ADDR_SET_STATIC(a) ((a)->val[5] |= 0xc0)\n\nint bt_addr_le_create_nrpa(bt_addr_le_t *addr);\nint bt_addr_le_create_static(bt_addr_le_t *addr);\n\nstatic inline bool bt_addr_le_is_rpa(const bt_addr_le_t *addr)\n{\n    if (addr->type != BT_ADDR_LE_RANDOM) {\n        return false;\n    }\n\n    return BT_ADDR_IS_RPA(&addr->a);\n}\n\nstatic inline bool bt_addr_le_is_identity(const bt_addr_le_t *addr)\n{\n    if (addr->type == BT_ADDR_LE_PUBLIC) {\n        return true;\n    }\n\n    return BT_ADDR_IS_STATIC(&addr->a);\n}\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_ADDR_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/att.h",
    "content": "/** @file\n *  @brief Attribute Protocol handling.\n */\n\n/*\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_ATT_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_ATT_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <misc/slist.h>\n\n/* Error codes for Error response PDU */\n#define BT_ATT_ERR_INVALID_HANDLE          0x01\n#define BT_ATT_ERR_READ_NOT_PERMITTED      0x02\n#define BT_ATT_ERR_WRITE_NOT_PERMITTED     0x03\n#define BT_ATT_ERR_INVALID_PDU             0x04\n#define BT_ATT_ERR_AUTHENTICATION          0x05\n#define BT_ATT_ERR_NOT_SUPPORTED           0x06\n#define BT_ATT_ERR_INVALID_OFFSET          0x07\n#define BT_ATT_ERR_AUTHORIZATION           0x08\n#define BT_ATT_ERR_PREPARE_QUEUE_FULL      0x09\n#define BT_ATT_ERR_ATTRIBUTE_NOT_FOUND     0x0a\n#define BT_ATT_ERR_ATTRIBUTE_NOT_LONG      0x0b\n#define BT_ATT_ERR_ENCRYPTION_KEY_SIZE     0x0c\n#define BT_ATT_ERR_INVALID_ATTRIBUTE_LEN   0x0d\n#define BT_ATT_ERR_UNLIKELY                0x0e\n#define BT_ATT_ERR_INSUFFICIENT_ENCRYPTION 0x0f\n#define BT_ATT_ERR_UNSUPPORTED_GROUP_TYPE  0x10\n#define BT_ATT_ERR_INSUFFICIENT_RESOURCES  0x11\n#define BT_ATT_ERR_DB_OUT_OF_SYNC          0x12\n#define BT_ATT_ERR_VALUE_NOT_ALLOWED       0x13\n\n/* Common Profile Error Codes (from CSS) */\n#define BT_ATT_ERR_WRITE_REQ_REJECTED    0xfc\n#define BT_ATT_ERR_CCC_IMPROPER_CONF     0xfd\n#define BT_ATT_ERR_PROCEDURE_IN_PROGRESS 0xfe\n#define BT_ATT_ERR_OUT_OF_RANGE          0xff\n\ntypedef void (*bt_att_func_t)(struct bt_conn *conn, u8_t err,\n                              const void *pdu, u16_t length,\n                              void *user_data);\ntypedef void (*bt_att_destroy_t)(void *user_data);\n\n/* ATT request context */\nstruct bt_att_req {\n    sys_snode_t node;\n    bt_att_func_t func;\n    bt_att_destroy_t destroy;\n    struct net_buf_simple_state state;\n    struct net_buf *buf;\n#if defined(CONFIG_BT_SMP)\n    bool retrying;\n#endif /* CONFIG_BT_SMP */\n};\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_ATT_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/avdtp.h",
    "content": "/** @file\n * @brief Audio/Video Distribution Transport Protocol header.\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_AVDTP_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_AVDTP_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** @brief AVDTP SEID Information */\nstruct bt_avdtp_seid_info {\n    /** Stream End Point ID */\n    uint8_t id : 6;\n    /** End Point usage status */\n    uint8_t inuse : 1;\n    /** Reserved */\n    uint8_t rfa0 : 1;\n    /** Media-type of the End Point */\n    uint8_t media_type : 4;\n    /** TSEP of the End Point */\n    uint8_t tsep : 1;\n    /** Reserved */\n    uint8_t rfa1 : 3;\n} __packed;\n\n/** @brief AVDTP Local SEP*/\nstruct bt_avdtp_seid_lsep {\n    /** Stream End Point information */\n    struct bt_avdtp_seid_info sep;\n    /** Pointer to next local Stream End Point structure */\n    struct bt_avdtp_seid_lsep *next;\n};\n\n/** @brief AVDTP Stream */\nstruct bt_avdtp_stream {\n    struct bt_l2cap_br_chan chan;   /* Transport Channel*/\n    struct bt_avdtp_seid_info lsep; /* Configured Local SEP */\n    struct bt_avdtp_seid_info rsep; /* Configured Remote SEP*/\n    uint8_t state;                  /* current state of the stream */\n    struct bt_avdtp_stream *next;\n};\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_AVDTP_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/bluetooth.h",
    "content": "/** @file\n *  @brief Bluetooth subsystem core APIs.\n */\n\n/*\n * Copyright (c) 2017 Nordic Semiconductor ASA\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_BLUETOOTH_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_BLUETOOTH_H_\n\n/**\n * @brief Bluetooth APIs\n * @defgroup bluetooth Bluetooth APIs\n * @{\n */\n\n#include <stdbool.h>\n#include <string.h>\n#include <misc/printk.h>\n#include <misc/util.h>\n#include <net/buf.h>\n#include <hci_host.h>\n#include <gap.h>\n#include <addr.h>\n//#include <bluetooth/crypto.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**\n * @brief Generic Access Profile\n * @defgroup bt_gap Generic Access Profile\n * @ingroup bluetooth\n * @{\n */\n\n/** @def BT_ID_DEFAULT\n *\n *  Convenience macro for specifying the default identity. This helps\n *  make the code more readable, especially when only one identity is\n *  supported.\n */\n#define BT_ID_DEFAULT 0\n\n/**\n * @typedef bt_ready_cb_t\n * @brief Callback for notifying that Bluetooth has been enabled.\n *\n *  @param err zero on success or (negative) error code otherwise.\n */\ntypedef void (*bt_ready_cb_t)(int err);\n\n/** @brief Enable Bluetooth\n *\n *  Enable Bluetooth. Must be the called before any calls that\n *  require communication with the local Bluetooth hardware.\n *\n *  @param cb Callback to notify completion or NULL to perform the\n *  enabling synchronously.\n *\n *  @return Zero on success or (negative) error code otherwise.\n */\nint bt_enable(bt_ready_cb_t cb);\n\n/** @brief Set Bluetooth Device Name\n *\n *  Set Bluetooth GAP Device Name.\n *\n *  @param name New name\n *\n *  @return Zero on success or (negative) error code otherwise.\n */\nint bt_set_name(const char *name);\n\n/** @brief Get Bluetooth Device Name\n *\n *  Get Bluetooth GAP Device Name.\n *\n *  @return Bluetooth Device Name\n */\nconst char *bt_get_name(void);\n\n/** @brief Set the local Identity Address\n *\n *  Allows setting the local Identity Address from the application.\n *  This API must be called before calling bt_enable(). Calling it at any\n *  other time will cause it to fail. In most cases the application doesn't\n *  need to use this API, however there are a few valid cases where\n *  it can be useful (such as for testing).\n *\n *  At the moment, the given address must be a static random address. In the\n *  future support for public addresses may be added.\n *\n *  @return Zero on success or (negative) error code otherwise.\n */\nint bt_set_id_addr(const bt_addr_le_t *addr);\n\n/** @brief Get the currently configured identities.\n *\n *  Returns an array of the currently configured identity addresses. To\n *  make sure all available identities can be retrieved, the number of\n *  elements in the @a addrs array should be CONFIG_BT_ID_MAX. The identity\n *  identifier that some APIs expect (such as advertising parameters) is\n *  simply the index of the identity in the @a addrs array.\n *\n *  Note: Deleted identities may show up as BT_LE_ADDR_ANY in the returned\n *  array.\n *\n *  @param addrs Array where to store the configured identities.\n *  @param count Should be initialized to the array size. Once the function\n *               returns it will contain the number of returned identities.\n */\nvoid bt_id_get(bt_addr_le_t *addrs, size_t *count);\n\n/** @brief Create a new identity.\n *\n *  Create a new identity using the given address and IRK. This function\n *  can be called before calling bt_enable(), in which case it can be used\n *  to override the controller's public address (in case it has one). However,\n *  the new identity will only be stored persistently in flash when this API\n *  is used after bt_enable(). The reason is that the persistent settings\n *  are loaded after bt_enable() and would therefore cause potential conflicts\n *  with the stack blindly overwriting what's stored in flash. The identity\n *  will also not be written to flash in case a pre-defined address is\n *  provided, since in such a situation the app clearly has some place it got\n *  the address from and will be able to repeat the procedure on every power\n *  cycle, i.e. it would be redundant to also store the information in flash.\n *\n *  If the application wants to have the stack randomly generate identities\n *  and store them in flash for later recovery, the way to do it would be\n *  to first initialize the stack (using bt_enable), then call settings_load(),\n *  and after that check with bt_id_get() how many identities were recovered.\n *  If an insufficient amount of identities were recovered the app may then\n *  call bt_id_create() to create new ones.\n *\n *  @param addr Address to use for the new identity. If NULL or initialized\n *              to BT_ADDR_LE_ANY the stack will generate a new static\n *              random address for the identity and copy it to the given\n *              parameter upon return from this function (in case the\n *              parameter was non-NULL).\n *  @param irk  Identity Resolving Key (16 bytes) to be used with this\n *              identity. If set to all zeroes or NULL, the stack will\n *              generate a random IRK for the identity and copy it back\n *              to the parameter upon return from this function (in case\n *              the parameter was non-NULL). If privacy support\n *              (CONFIG_BT_PRIVACY) is not enabled this parameter must\n *              be NULL.\n *\n *  @return Identity identifier (>= 0) in case of success, or a negative\n *          error code on failure.\n */\nint bt_id_create(bt_addr_le_t *addr, u8_t *irk);\n\n/** @brief Reset/reclaim an identity for reuse.\n *\n *  The semantics of the @a addr and @a irk parameters of this function\n *  are the same as with bt_id_create(). The difference is the first\n *  @a id parameter that needs to be an existing identity (if it doesn't\n *  exist this function will return an error). When given an existing\n *  identity this function will disconnect any connections created using it,\n *  remove any pairing keys or other data associated with it, and then create\n *  a new identity in the same slot, based on the @a addr and @a irk\n *  parameters.\n *\n *  Note: the default identity (BT_ID_DEFAULT) cannot be reset, i.e. this\n *  API will return an error if asked to do that.\n *\n *  @param id   Existing identity identifier.\n *  @param addr Address to use for the new identity. If NULL or initialized\n *              to BT_ADDR_LE_ANY the stack will generate a new static\n *              random address for the identity and copy it to the given\n *              parameter upon return from this function (in case the\n *              parameter was non-NULL).\n *  @param irk  Identity Resolving Key (16 bytes) to be used with this\n *              identity. If set to all zeroes or NULL, the stack will\n *              generate a random IRK for the identity and copy it back\n *              to the parameter upon return from this function (in case\n *              the parameter was non-NULL). If privacy support\n *              (CONFIG_BT_PRIVACY) is not enabled this parameter must\n *              be NULL.\n *\n *  @return Identity identifier (>= 0) in case of success, or a negative\n *          error code on failure.\n */\nint bt_id_reset(u8_t id, bt_addr_le_t *addr, u8_t *irk);\n\n/** @brief Delete an identity.\n *\n *  When given a valid identity this function will disconnect any connections\n *  created using it, remove any pairing keys or other data associated with\n *  it, and then flag is as deleted, so that it can not be used for any\n *  operations. To take back into use the slot the identity was occupying the\n *  bt_id_reset() API needs to be used.\n *\n *  Note: the default identity (BT_ID_DEFAULT) cannot be deleted, i.e. this\n *  API will return an error if asked to do that.\n *\n *  @param id   Existing identity identifier.\n *\n *  @return 0 in case of success, or a negative error code on failure.\n */\nint bt_id_delete(u8_t id);\n\n/* Advertising API */\n\n/** Description of different data types that can be encoded into\n  * advertising data. Used to form arrays that are passed to the\n  * bt_le_adv_start() function.\n  */\nstruct bt_data {\n    u8_t type;\n    u8_t data_len;\n    const u8_t *data;\n};\n\n/** @brief Helper to declare elements of bt_data arrays\n *\n *  This macro is mainly for creating an array of struct bt_data\n *  elements which is then passed to bt_le_adv_start().\n *\n *  @param _type Type of advertising data field\n *  @param _data Pointer to the data field payload\n *  @param _data_len Number of bytes behind the _data pointer\n */\n#define BT_DATA(_type, _data, _data_len) \\\n    {                                    \\\n        .type = (_type),                 \\\n        .data_len = (_data_len),         \\\n        .data = (const u8_t *)(_data),   \\\n    }\n\n/** @brief Helper to declare elements of bt_data arrays\n *\n *  This macro is mainly for creating an array of struct bt_data\n *  elements which is then passed to bt_le_adv_start().\n *\n *  @param _type Type of advertising data field\n *  @param _bytes Variable number of single-byte parameters\n */\n#define BT_DATA_BYTES(_type, _bytes...)  \\\n    BT_DATA(_type, ((u8_t[]){ _bytes }), \\\n            sizeof((u8_t[]){ _bytes }))\n\n/** Advertising options */\nenum {\n    /** Convenience value when no options are specified. */\n    BT_LE_ADV_OPT_NONE = 0,\n\n    /** Advertise as connectable. Type of advertising is determined by\n\t * providing SCAN_RSP data and/or enabling local privacy support.\n\t */\n    BT_LE_ADV_OPT_CONNECTABLE = BIT(0),\n\n    /** Don't try to resume connectable advertising after a connection.\n\t *  This option is only meaningful when used together with\n\t *  BT_LE_ADV_OPT_CONNECTABLE. If set the advertising will be stopped\n\t *  when bt_le_adv_stop() is called or when an incoming (slave)\n\t *  connection happens. If this option is not set the stack will\n\t *  take care of keeping advertising enabled even as connections\n\t *  occur.\n\t */\n    /* if defined CONFIG_BLE_MULTI_ADV , Only support adv one time.*/\n    BT_LE_ADV_OPT_ONE_TIME = BIT(1),\n\n    /** Advertise using the identity address as the own address.\n\t *  @warning This will compromise the privacy of the device, so care\n\t *           must be taken when using this option.\n\t */\n    BT_LE_ADV_OPT_USE_IDENTITY = BIT(2),\n\n    /** Advertise using GAP device name */\n    BT_LE_ADV_OPT_USE_NAME = BIT(3),\n\n    /** Use low duty directed advertising mode, otherwise high duty mode\n\t *  will be used. This option is only effective when used with\n\t *  bt_conn_create_slave_le().\n\t */\n    BT_LE_ADV_OPT_DIR_MODE_LOW_DUTY = BIT(4),\n\n    /** Enable use of Resolvable Private Address (RPA) as the target address\n\t *  in directed advertisements when CONFIG_BT_PRIVACY is not enabled.\n\t *  This is required if the remote device is privacy-enabled and\n\t *  supports address resolution of the target address in directed\n\t *  advertisement.\n\t *  It is the responsibility of the application to check that the remote\n\t *  device supports address resolution of directed advertisements by\n\t *  reading its Central Address Resolution characteristic.\n\t */\n    BT_LE_ADV_OPT_DIR_ADDR_RPA = BIT(5),\n\n    /** Use whitelist to filter devices that can request scan response\n\t *  data.\n\t */\n    BT_LE_ADV_OPT_FILTER_SCAN_REQ = BIT(6),\n\n    /** Use whitelist to filter devices that can connect. */\n    BT_LE_ADV_OPT_FILTER_CONN = BIT(7),\n};\n\n/** LE Advertising Parameters. */\nstruct bt_le_adv_param {\n    /** Local identity */\n    u8_t id;\n\n    /** Bit-field of advertising options */\n    u8_t options;\n\n    /** Minimum Advertising Interval (N * 0.625) */\n    u16_t interval_min;\n\n    /** Maximum Advertising Interval (N * 0.625) */\n    u16_t interval_max;\n\n#if defined(CONFIG_BT_STACK_PTS) || defined(CONFIG_AUTO_PTS)\n    u8_t addr_type;\n#endif\n};\n\n/** Helper to declare advertising parameters inline\n  *\n  * @param _options   Advertising Options\n  * @param _int_min   Minimum advertising interval\n  * @param _int_max   Maximum advertising interval\n  */\n#define BT_LE_ADV_PARAM(_options, _int_min, _int_max) \\\n    (&(struct bt_le_adv_param){                       \\\n        .options = (_options),                        \\\n        .interval_min = (_int_min),                   \\\n        .interval_max = (_int_max),                   \\\n    })\n\n#define BT_LE_ADV_CONN BT_LE_ADV_PARAM(BT_LE_ADV_OPT_CONNECTABLE, \\\n                                       BT_GAP_ADV_FAST_INT_MIN_2, \\\n                                       BT_GAP_ADV_FAST_INT_MAX_2)\n\n#define BT_LE_ADV_CONN_NAME BT_LE_ADV_PARAM(BT_LE_ADV_OPT_CONNECTABLE | \\\n                                                BT_LE_ADV_OPT_USE_NAME, \\\n                                            BT_GAP_ADV_FAST_INT_MIN_2,  \\\n                                            BT_GAP_ADV_FAST_INT_MAX_2)\n\n#define BT_LE_ADV_CONN_DIR_LOW_DUTY                                      \\\n    BT_LE_ADV_PARAM(BT_LE_ADV_OPT_CONNECTABLE | BT_LE_ADV_OPT_ONE_TIME | \\\n                        BT_LE_ADV_OPT_DIR_MODE_LOW_DUTY,                 \\\n                    BT_GAP_ADV_FAST_INT_MIN_2, BT_GAP_ADV_FAST_INT_MAX_2)\n\n#define BT_LE_ADV_CONN_DIR BT_LE_ADV_PARAM(BT_LE_ADV_OPT_CONNECTABLE | \\\n                                               BT_LE_ADV_OPT_ONE_TIME, \\\n                                           0, 0)\n\n#define BT_LE_ADV_NCONN BT_LE_ADV_PARAM(0, BT_GAP_ADV_FAST_INT_MIN_2, \\\n                                        BT_GAP_ADV_FAST_INT_MAX_2)\n\n#define BT_LE_ADV_NCONN_NAME BT_LE_ADV_PARAM(BT_LE_ADV_OPT_USE_NAME,    \\\n                                             BT_GAP_ADV_FAST_INT_MIN_2, \\\n                                             BT_GAP_ADV_FAST_INT_MAX_2)\n\n/** @brief Start advertising\n *\n *  Set advertisement data, scan response data, advertisement parameters\n *  and start advertising.\n *\n *  @param param Advertising parameters.\n *  @param ad Data to be used in advertisement packets.\n *  @param ad_len Number of elements in ad\n *  @param sd Data to be used in scan response packets.\n *  @param sd_len Number of elements in sd\n *\n *  @return Zero on success or (negative) error code otherwise.\n *  @return -ECONNREFUSED When connectable advertising is requested and there\n *\t\t\t  is already maximum number of connections established.\n *\t\t\t  This error code is only guaranteed when using Zephyr\n *\t\t\t  controller, for other controllers code returned in\n *\t\t\t  this case may be -EIO.\n */\nint bt_le_adv_start(const struct bt_le_adv_param *param,\n                    const struct bt_data *ad, size_t ad_len,\n                    const struct bt_data *sd, size_t sd_len);\n\n/** @brief Update advertising\n *\n *  Update advertisement and scan response data.\n *\n *  @param ad Data to be used in advertisement packets.\n *  @param ad_len Number of elements in ad\n *  @param sd Data to be used in scan response packets.\n *  @param sd_len Number of elements in sd\n *\n *  @return Zero on success or (negative) error code otherwise.\n */\nint bt_le_adv_update_data(const struct bt_data *ad, size_t ad_len,\n                          const struct bt_data *sd, size_t sd_len);\n\n/** @brief Stop advertising\n *\n *  Stops ongoing advertising.\n *\n *  @return Zero on success or (negative) error code otherwise.\n */\nint bt_le_adv_stop(void);\n\n/** @typedef bt_le_scan_cb_t\n *  @brief Callback type for reporting LE scan results.\n *\n *  A function of this type is given to the bt_le_scan_start() function\n *  and will be called for any discovered LE device.\n *\n *  @param addr Advertiser LE address and type.\n *  @param rssi Strength of advertiser signal.\n *  @param adv_type Type of advertising response from advertiser.\n *  @param buf Buffer containing advertiser data.\n */\ntypedef void bt_le_scan_cb_t(const bt_addr_le_t *addr, s8_t rssi,\n                             u8_t adv_type, struct net_buf_simple *buf);\n\nenum {\n    /* Filter duplicates. */\n    BT_LE_SCAN_FILTER_DUPLICATE = BIT(0),\n\n    /* Filter using whitelist. */\n    BT_LE_SCAN_FILTER_WHITELIST = BIT(1),\n\n    /* Filter using extended filter policies. */\n    BT_LE_SCAN_FILTER_EXTENDED = BIT(2),\n};\n\nenum {\n    /* Scan without requesting additional information from advertisers. */\n    BT_LE_SCAN_TYPE_PASSIVE = 0x00,\n\n    /* Scan and request additional information from advertisers. */\n    BT_LE_SCAN_TYPE_ACTIVE = 0x01,\n};\n\n/** LE scan parameters */\nstruct bt_le_scan_param {\n    /** Scan type (BT_LE_SCAN_TYPE_ACTIVE or BT_LE_SCAN_TYPE_PASSIVE) */\n    u8_t type;\n\n    /** Bit-field of scanning filter options. */\n    u8_t filter_dup;\n\n    /** Scan interval (N * 0.625 ms) */\n    u16_t interval;\n\n    /** Scan window (N * 0.625 ms) */\n    u16_t window;\n};\n\n/** Helper to declare scan parameters inline\n  *\n  * @param _type     Scan Type, BT_LE_SCAN_TYPE_ACTIVE or\n  *                  BT_LE_SCAN_TYPE_PASSIVE.\n  * @param _filter   Filter options\n  * @param _interval Scan Interval (N * 0.625 ms)\n  * @param _window   Scan Window (N * 0.625 ms)\n  */\n#define BT_LE_SCAN_PARAM(_type, _filter, _interval, _window) \\\n    (&(struct bt_le_scan_param){                             \\\n        .type = (_type),                                     \\\n        .filter_dup = (_filter),                             \\\n        .interval = (_interval),                             \\\n        .window = (_window),                                 \\\n    })\n\n/** Helper macro to enable active scanning to discover new devices. */\n#define BT_LE_SCAN_ACTIVE BT_LE_SCAN_PARAM(BT_LE_SCAN_TYPE_ACTIVE,      \\\n                                           BT_LE_SCAN_FILTER_DUPLICATE, \\\n                                           BT_GAP_SCAN_FAST_INTERVAL,   \\\n                                           BT_GAP_SCAN_FAST_WINDOW)\n\n/** Helper macro to enable passive scanning to discover new devices.\n *\n * This macro should be used if information required for device identification\n * (e.g., UUID) are known to be placed in Advertising Data.\n */\n#define BT_LE_SCAN_PASSIVE BT_LE_SCAN_PARAM(BT_LE_SCAN_TYPE_PASSIVE,     \\\n                                            BT_LE_SCAN_FILTER_DUPLICATE, \\\n                                            BT_GAP_SCAN_FAST_INTERVAL,   \\\n                                            BT_GAP_SCAN_FAST_WINDOW)\n\n/** @brief Start (LE) scanning\n *\n *  Start LE scanning with given parameters and provide results through\n *  the specified callback.\n *\n *  @param param Scan parameters.\n *  @param cb Callback to notify scan results.\n *\n *  @return Zero on success or error code otherwise, positive in case\n *  of protocol error or negative (POSIX) in case of stack internal error\n */\n#if defined(CONFIG_BT_STACK_PTS)\nint bt_le_pts_scan_start(const struct bt_le_scan_param *param, bt_le_scan_cb_t cb, u8_t addre_type);\n#endif\nint bt_le_scan_start(const struct bt_le_scan_param *param, bt_le_scan_cb_t cb);\n\n/** @brief Stop (LE) scanning.\n *\n *  Stops ongoing LE scanning.\n *\n *  @return Zero on success or error code otherwise, positive in case\n *  of protocol error or negative (POSIX) in case of stack internal error\n */\nint bt_le_scan_stop(void);\n\n/** @brief Add device (LE) to whitelist.\n *\n *  Add peer device LE address to the whitelist.\n *\n *  @note The whitelist cannot be modified when an LE role is using\n *  the whitelist, i.e advertiser or scanner using a whitelist or automatic\n *  connecting to devices using whitelist.\n *\n *  @param addr Bluetooth LE identity address.\n *\n *  @return Zero on success or error code otherwise, positive in case\n *  of protocol error or negative (POSIX) in case of stack internal error.\n */\nint bt_le_whitelist_add(const bt_addr_le_t *addr);\n\n/** @brief Remove device (LE) from whitelist.\n *\n *  Remove peer device LE address from the whitelist.\n *\n *  @note The whitelist cannot be modified when an LE role is using\n *  the whitelist, i.e advertiser or scanner using a whitelist or automatic\n *  connecting to devices using whitelist.\n *\n *  @param addr Bluetooth LE identity address.\n *\n *  @return Zero on success or error code otherwise, positive in case\n *  of protocol error or negative (POSIX) in case of stack internal error.\n */\nint bt_le_whitelist_rem(const bt_addr_le_t *addr);\n\n/** @brief Clear whitelist.\n *\n *  Clear all devices from the whitelist.\n *\n *  @note The whitelist cannot be modified when an LE role is using\n *  the whitelist, i.e advertiser or scanner using a whitelist or automatic\n *  connecting to devices using whitelist.\n *\n *  @return Zero on success or error code otherwise, positive in case\n *  of protocol error or negative (POSIX) in case of stack internal error.\n */\nint bt_le_whitelist_clear(void);\n\n/** @brief Set (LE) channel map.\n *\n * @param chan_map Channel map.\n *\n *  @return Zero on success or error code otherwise, positive in case\n *  of protocol error or negative (POSIX) in case of stack internal error\n */\nint bt_le_set_chan_map(u8_t chan_map[5]);\n\n/** @brief Helper for parsing advertising (or EIR or OOB) data.\n *\n *  A helper for parsing the basic data types used for Extended Inquiry\n *  Response (EIR), Advertising Data (AD), and OOB data blocks. The most\n *  common scenario is to call this helper on the advertising data\n *  received in the callback that was given to bt_le_scan_start().\n *\n *  @param ad        Advertising data as given to the bt_le_scan_cb_t callback.\n *  @param func      Callback function which will be called for each element\n *                   that's found in the data. The callback should return\n *                   true to continue parsing, or false to stop parsing.\n *  @param user_data User data to be passed to the callback.\n */\nvoid bt_data_parse(struct net_buf_simple *ad,\n                   bool (*func)(struct bt_data *data, void *user_data),\n                   void *user_data);\n\n/** OOB data that is specific for LE SC pairing method. */\nstruct bt_le_oob_sc_data {\n    /** Random Number. */\n    u8_t r[16];\n\n    /** Confirm Value. */\n    u8_t c[16];\n};\n\n/** General OOB data. */\nstruct bt_le_oob {\n    /** LE address. If local privacy is enabled this is Resolvable Private\n\t *  Address.\n\t */\n    bt_addr_le_t addr;\n\n    /** OOB data that are relevant for LESC pairing. */\n    struct bt_le_oob_sc_data le_sc_data;\n};\n\n/**\n * @brief Get LE local Out Of Band information\n *\n * This function allows to get local information that are useful for Out Of Band\n * pairing or connection creation process.\n *\n * If privacy is enabled this will result in generating new Resolvable Private\n * Address that is valid for CONFIG_BT_RPA_TIMEOUT seconds. This address\n * will be used for advertising, active scanning and connection creation.\n *\n * @param id  Local identity, in most cases BT_ID_DEFAULT.\n * @param oob LE related information\n *\n *  @return Zero on success or error code otherwise, positive in case\n *  of protocol error or negative (POSIX) in case of stack internal error\n */\nint bt_le_oob_get_local(u8_t id, struct bt_le_oob *oob);\n\n/** @brief BR/EDR discovery result structure */\nstruct bt_br_discovery_result {\n    /** private */\n    u8_t _priv[4];\n\n    /** Remote device address */\n    bt_addr_t addr;\n\n    /** RSSI from inquiry */\n    s8_t rssi;\n\n    /** Class of Device */\n    u8_t cod[3];\n\n    /** Extended Inquiry Response */\n    u8_t eir[240];\n};\n\n/** @typedef bt_br_discovery_cb_t\n *  @brief Callback type for reporting BR/EDR discovery (inquiry)\n *         results.\n *\n *  A callback of this type is given to the bt_br_discovery_start()\n *  function and will be called at the end of the discovery with\n *  information about found devices populated in the results array.\n *\n *  @param results Storage used for discovery results\n *  @param count Number of valid discovery results.\n */\ntypedef void bt_br_discovery_cb_t(struct bt_br_discovery_result *results,\n                                  size_t count);\n\n/** BR/EDR discovery parameters */\nstruct bt_br_discovery_param {\n    /** Maximum length of the discovery in units of 1.28 seconds.\n\t *  Valid range is 0x01 - 0x30.\n\t */\n    u8_t length;\n\n    /** True if limited discovery procedure is to be used. */\n    bool limited;\n};\n\n/** @brief Start BR/EDR discovery\n *\n *  Start BR/EDR discovery (inquiry) and provide results through the specified\n *  callback. When bt_br_discovery_cb_t is called it indicates that discovery\n *  has completed. If more inquiry results were received during session than\n *  fits in provided result storage, only ones with highest RSSI will be\n *  reported.\n *\n *  @param param Discovery parameters.\n *  @param results Storage for discovery results.\n *  @param count Number of results in storage. Valid range: 1-255.\n *  @param cb Callback to notify discovery results.\n *\n *  @return Zero on success or error code otherwise, positive in case\n *  of protocol error or negative (POSIX) in case of stack internal error\n */\nint bt_br_discovery_start(const struct bt_br_discovery_param *param,\n                          struct bt_br_discovery_result *results, size_t count,\n                          bt_br_discovery_cb_t cb);\n\n/** @brief Stop BR/EDR discovery.\n *\n *  Stops ongoing BR/EDR discovery. If discovery was stopped by this call\n *  results won't be reported\n *\n *  @return Zero on success or error code otherwise, positive in case\n *  of protocol error or negative (POSIX) in case of stack internal error\n */\nint bt_br_discovery_stop(void);\n\nint bt_disable(void);\n\nstruct bt_br_oob {\n    /** BR/EDR address. */\n    bt_addr_t addr;\n};\n\n/**\n * @brief Get BR/EDR local Out Of Band information\n *\n * This function allows to get local controller information that are useful\n * for Out Of Band pairing or connection creation process.\n *\n * @param oob Out Of Band information\n */\nint bt_br_oob_get_local(struct bt_br_oob *oob);\n\n/** @def BT_ADDR_STR_LEN\n *\n *  @brief Recommended length of user string buffer for Bluetooth address\n *\n *  @details The recommended length guarantee the output of address\n *  conversion will not lose valuable information about address being\n *  processed.\n */\n#define BT_ADDR_STR_LEN 18\n\n/** @def BT_ADDR_LE_STR_LEN\n *\n *  @brief Recommended length of user string buffer for Bluetooth LE address\n *\n *  @details The recommended length guarantee the output of address\n *  conversion will not lose valuable information about address being\n *  processed.\n */\n#define BT_ADDR_LE_STR_LEN 30\n\n/** @brief Converts binary Bluetooth address to string.\n *\n *  @param addr Address of buffer containing binary Bluetooth address.\n *  @param str Address of user buffer with enough room to store formatted\n *  string containing binary address.\n *  @param len Length of data to be copied to user string buffer. Refer to\n *  BT_ADDR_STR_LEN about recommended value.\n *\n *  @return Number of successfully formatted bytes from binary address.\n */\nstatic inline int bt_addr_to_str(const bt_addr_t *addr, char *str, size_t len)\n{\n    return snprintk(str, len, \"%02X:%02X:%02X:%02X:%02X:%02X\",\n                    addr->val[5], addr->val[4], addr->val[3],\n                    addr->val[2], addr->val[1], addr->val[0]);\n}\n\n/** @brief Converts binary LE Bluetooth address to string.\n *\n *  @param addr Address of buffer containing binary LE Bluetooth address.\n *  @param str Address of user buffer with enough room to store\n *  formatted string containing binary LE address.\n *  @param len Length of data to be copied to user string buffer. Refer to\n *  BT_ADDR_LE_STR_LEN about recommended value.\n *\n *  @return Number of successfully formatted bytes from binary address.\n */\nstatic inline int bt_addr_le_to_str(const bt_addr_le_t *addr, char *str,\n                                    size_t len)\n{\n    char type[10];\n\n    switch (addr->type) {\n        case BT_ADDR_LE_PUBLIC:\n            strcpy(type, \"public\");\n            break;\n        case BT_ADDR_LE_RANDOM:\n            strcpy(type, \"random\");\n            break;\n        case BT_ADDR_LE_PUBLIC_ID:\n            strcpy(type, \"public-id\");\n            break;\n        case BT_ADDR_LE_RANDOM_ID:\n            strcpy(type, \"random-id\");\n            break;\n        default:\n            snprintk(type, sizeof(type), \"0x%02x\", addr->type);\n            break;\n    }\n\n    return snprintk(str, len, \"%02X:%02X:%02X:%02X:%02X:%02X (%s)\",\n                    addr->a.val[5], addr->a.val[4], addr->a.val[3],\n                    addr->a.val[2], addr->a.val[1], addr->a.val[0], type);\n}\n\n/**\n * @brief Convert Bluetooth address from string to binary.\n *\n * @param[in]  str   The string representation of a Bluetooth address.\n * @param[out] addr  Address of buffer to store the Bluetooth address\n *\n *  @return Zero on success or (negative) error code otherwise.\n */\nint bt_addr_from_str(const char *str, bt_addr_t *addr);\n\n/**\n * @brief Convert LE Bluetooth address from string to binary.\n *\n * @param[in]  str   The string representation of an LE Bluetooth address.\n * @param[in]  type  The string representation of the LE Bluetooth address type.\n * @param[out] addr  Address of buffer to store the LE Bluetooth address\n *\n *  @return Zero on success or (negative) error code otherwise.\n */\nint bt_addr_le_from_str(const char *str, const char *type, bt_addr_le_t *addr);\n\n/** @brief Enable/disable set controller in discoverable state.\n *\n *  Allows make local controller to listen on INQUIRY SCAN channel and responds\n *  to devices making general inquiry. To enable this state it's mandatory\n *  to first be in connectable state.\n *\n *  @param enable Value allowing/disallowing controller to become discoverable.\n *\n *  @return Negative if fail set to requested state or requested state has been\n *  already set. Zero if done successfully.\n */\nint bt_br_set_discoverable(bool enable);\n\n/** @brief Enable/disable set controller in connectable state.\n *\n *  Allows make local controller to be connectable. It means the controller\n *  start listen to devices requests on PAGE SCAN channel. If disabled also\n *  resets discoverability if was set.\n *\n *  @param enable Value allowing/disallowing controller to be connectable.\n *\n *  @return Negative if fail set to requested state or requested state has been\n *  already set. Zero if done successfully.\n */\nint bt_br_set_connectable(bool enable);\n\n/** Clear pairing information.\n  *\n  * @param id    Local identity (mostly just BT_ID_DEFAULT).\n  * @param addr  Remote address, NULL or BT_ADDR_LE_ANY to clear all remote\n  *              devices.\n  *\n  * @return 0 on success or negative error value on failure.\n  */\nint bt_unpair(u8_t id, const bt_addr_le_t *addr);\n\n/** Information about a bond with a remote device. */\nstruct bt_bond_info {\n    /** Address of the remote device. */\n    bt_addr_le_t addr;\n};\n\n/** Iterate through all existing bonds.\n  *\n  * @param id         Local identity (mostly just BT_ID_DEFAULT).\n  * @param func       Function to call for each bond.\n  * @param user_data  Data to pass to the callback function.\n  */\nvoid bt_foreach_bond(u8_t id, void (*func)(const struct bt_bond_info *info, void *user_data),\n                     void *user_data);\n\n/**\n  * write extern inquiry response.\n  */\nint bt_br_write_eir(u8_t rec, u8_t *data);\n/**\n * @}\n */\n\n#ifdef __cplusplus\n}\n#endif\n/**\n * @}\n */\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_BLUETOOTH_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/buf.h",
    "content": "/** @file\n *  @brief Bluetooth data buffer API\n */\n\n/*\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_BUF_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_BUF_H_\n\n/**\n * @brief Data buffers\n * @defgroup bt_buf Data buffers\n * @ingroup bluetooth\n * @{\n */\n\n#include <zephyr/types.h>\n#include <net/buf.h>\n#include <hci_host.h>\n\n/** Possible types of buffers passed around the Bluetooth stack */\nenum bt_buf_type {\n    /** HCI command */\n    BT_BUF_CMD,\n    /** HCI event */\n    BT_BUF_EVT,\n    /** Outgoing ACL data */\n    BT_BUF_ACL_OUT,\n    /** Incoming ACL data */\n    BT_BUF_ACL_IN,\n    /** Outgoing ISO data */\n    BT_BUF_ISO_OUT,\n    /** Incoming ISO data */\n    BT_BUF_ISO_IN,\n};\n\n/** Minimum amount of user data size for buffers passed to the stack. */\n#define BT_BUF_USER_DATA_MIN 4\n\n#if defined(CONFIG_BT_HCI_RAW)\n#define BT_BUF_RESERVE MAX(CONFIG_BT_HCI_RESERVE, CONFIG_BT_HCI_RAW_RESERVE)\n#else\n#define BT_BUF_RESERVE CONFIG_BT_HCI_RESERVE\n#endif\n\n/** Data size neeed for HCI RX buffers */\n#define BT_BUF_RX_SIZE (BT_BUF_RESERVE + CONFIG_BT_RX_BUF_LEN)\n\nint bt_buf_get_rx_avail_cnt(void);\n\n/** Allocate a buffer for incoming data\n *\n *  This will set the buffer type so bt_buf_set_type() does not need to\n *  be explicitly called before bt_recv_prio().\n *\n *  @param type    Type of buffer. Only BT_BUF_EVT and BT_BUF_ACL_IN are\n *                 allowed.\n *  @param timeout Timeout in milliseconds, or one of the special values\n *                 K_NO_WAIT and K_FOREVER.\n *  @return A new buffer.\n */\nstruct net_buf *bt_buf_get_rx(enum bt_buf_type type, s32_t timeout);\n\n/** Allocate a buffer for an HCI Command Complete/Status Event\n *\n *  This will set the buffer type so bt_buf_set_type() does not need to\n *  be explicitly called before bt_recv_prio().\n *\n *  @param timeout Timeout in milliseconds, or one of the special values\n *                 K_NO_WAIT and K_FOREVER.\n *  @return A new buffer.\n */\nstruct net_buf *bt_buf_get_cmd_complete(s32_t timeout);\n\n/** Allocate a buffer for an HCI Event\n *\n *  This will set the buffer type so bt_buf_set_type() does not need to\n *  be explicitly called before bt_recv_prio() or bt_recv().\n *\n *  @param evt          HCI event code\n *  @param discardable  Whether the driver considers the event discardable.\n *  @param timeout      Timeout in milliseconds, or one of the special values\n *                      K_NO_WAIT and K_FOREVER.\n *  @return A new buffer.\n */\nstruct net_buf *bt_buf_get_evt(u8_t evt, bool discardable, s32_t timeout);\n\n/** Set the buffer type\n *\n *  @param buf   Bluetooth buffer\n *  @param type  The BT_* type to set the buffer to\n */\nstatic inline void bt_buf_set_type(struct net_buf *buf, enum bt_buf_type type)\n{\n    *(u8_t *)net_buf_user_data(buf) = type;\n}\n\n#if defined(BFLB_BLE)\nstatic inline void bt_buf_set_rx_adv(struct net_buf *buf, bool is_adv)\n{\n    u8_t *usr_data = (u8_t *)net_buf_user_data(buf);\n    usr_data++;\n    *usr_data = is_adv;\n}\n\nstatic inline u8_t bt_buf_check_rx_adv(struct net_buf *buf)\n{\n    u8_t *usr_data = (u8_t *)net_buf_user_data(buf);\n    usr_data++;\n    return (*usr_data);\n}\n#endif\n\n/** Get the buffer type\n *\n *  @param buf   Bluetooth buffer\n *\n *  @return The BT_* type to of the buffer\n */\nstatic inline enum bt_buf_type bt_buf_get_type(struct net_buf *buf)\n{\n    /* De-referencing the pointer from net_buf_user_data(buf) as a\n\t * pointer to an enum causes issues on qemu_x86 because the true\n\t * size is 8-bit, but the enum is 32-bit on qemu_x86. So we put in\n\t * a temporary cast to 8-bit to ensure only 8 bits are read from\n\t * the pointer.\n\t */\n    return (enum bt_buf_type)(*(u8_t *)net_buf_user_data(buf));\n}\n\n/**\n * @}\n */\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_BUF_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/conn.h",
    "content": "/** @file\n *  @brief Bluetooth connection handling\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_CONN_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_CONN_H_\n\n/**\n * @brief Connection management\n * @defgroup bt_conn Connection management\n * @ingroup bluetooth\n * @{\n */\n\n#include <stdbool.h>\n#include <bluetooth.h>\n#include <hci_host.h>\n#include <hci_err.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** Opaque type representing a connection to a remote device */\nstruct bt_conn;\n\n/** Connection parameters for LE connections */\nstruct bt_le_conn_param {\n    u16_t interval_min;\n    u16_t interval_max;\n    u16_t latency;\n    u16_t timeout;\n\n#if defined(CONFIG_BT_STACK_PTS)\n    u8_t own_address_type;\n#endif\n};\n\n/** Helper to declare connection parameters inline\n  *\n  * @param int_min  Minimum Connection Interval (N * 1.25 ms)\n  * @param int_max  Maximum Connection Interval (N * 1.25 ms)\n  * @param lat      Connection Latency\n  * @param to       Supervision Timeout (N * 10 ms)\n  */\n#define BT_LE_CONN_PARAM(int_min, int_max, lat, to) \\\n    (&(struct bt_le_conn_param){                    \\\n        .interval_min = (int_min),                  \\\n        .interval_max = (int_max),                  \\\n        .latency = (lat),                           \\\n        .timeout = (to),                            \\\n    })\n\n/** Default LE connection parameters:\n  *   Connection Interval: 30-50 ms\n  *   Latency: 0\n  *   Timeout: 4 s\n  */\n#define BT_LE_CONN_PARAM_DEFAULT BT_LE_CONN_PARAM(BT_GAP_INIT_CONN_INT_MIN, \\\n                                                  BT_GAP_INIT_CONN_INT_MAX, \\\n                                                  0, 400)\n/** @brief Increment a connection's reference count.\n *\n *  Increment the reference count of a connection object.\n *\n *  @param conn Connection object.\n *\n *  @return Connection object with incremented reference count.\n */\nstruct bt_conn *bt_conn_ref(struct bt_conn *conn);\n\n/** @brief Decrement a connection's reference count.\n *\n *  Decrement the reference count of a connection object.\n *\n *  @param conn Connection object.\n */\nvoid bt_conn_unref(struct bt_conn *conn);\n\n/** @brief Iterate through all existing connections.\n *\n * @param type  Connection Type\n * @param func  Function to call for each connection.\n * @param data  Data to pass to the callback function.\n */\nvoid bt_conn_foreach(int type, void (*func)(struct bt_conn *conn, void *data),\n                     void *data);\n\n/** @brief Look up an existing connection by address.\n *\n *  Look up an existing connection based on the remote address.\n *\n *  @param id   Local identity (in most cases BT_ID_DEFAULT).\n *  @param peer Remote address.\n *\n *  @return Connection object or NULL if not found. The caller gets a\n *  new reference to the connection object which must be released with\n *  bt_conn_unref() once done using the object.\n */\nstruct bt_conn *bt_conn_lookup_addr_le(u8_t id, const bt_addr_le_t *peer);\n\n#if defined(BFLB_BLE)\nbool le_check_valid_conn(void);\nvoid notify_disconnected(struct bt_conn *conn);\n#if defined(BFLB_HOST_ASSISTANT)\nvoid bt_notify_disconnected(void);\n#endif\n#endif\n\n/** @brief Get destination (peer) address of a connection.\n *\n *  @param conn Connection object.\n *\n *  @return Destination address.\n */\nconst bt_addr_le_t *bt_conn_get_dst(const struct bt_conn *conn);\n\n/** @brief Get array index of a connection\n *\n *  This function is used to map bt_conn to index of an array of\n *  connections. The array has CONFIG_BT_MAX_CONN elements.\n *\n *  @param conn Connection object.\n *\n *  @return Index of the connection object.\n *  The range of the returned value is 0..CONFIG_BT_MAX_CONN-1\n */\nu8_t bt_conn_index(struct bt_conn *conn);\n\n/** Connection Type */\nenum {\n    /** LE Connection Type */\n    BT_CONN_TYPE_LE = BIT(0),\n    /** BR/EDR Connection Type */\n    BT_CONN_TYPE_BR = BIT(1),\n    /** SCO Connection Type */\n    BT_CONN_TYPE_SCO = BIT(2),\n    /** ISO Connection Type */\n    BT_CONN_TYPE_ISO = BIT(3),\n    /** All Connection Type */\n    BT_CONN_TYPE_ALL = BT_CONN_TYPE_LE | BT_CONN_TYPE_BR |\n                       BT_CONN_TYPE_SCO | BT_CONN_TYPE_ISO,\n};\n\n/** LE Connection Info Structure */\nstruct bt_conn_le_info {\n    /** Source (Local) Identity Address */\n    const bt_addr_le_t *src;\n    /** Destination (Remote) Identity Address or remote Resolvable Private\n\t *  Address (RPA) before identity has been resolved.\n\t */\n    const bt_addr_le_t *dst;\n    /** Local device address used during connection setup. */\n    const bt_addr_le_t *local;\n    /** Remote device address used during connection setup. */\n    const bt_addr_le_t *remote;\n    u16_t interval; /** Connection interval */\n    u16_t latency;  /** Connection slave latency */\n    u16_t timeout;  /** Connection supervision timeout */\n};\n\n/** BR/EDR Connection Info Structure */\nstruct bt_conn_br_info {\n    const bt_addr_t *dst; /** Destination (Remote) BR/EDR address */\n};\n\n/** Connection role (master or slave) */\nenum {\n    BT_CONN_ROLE_MASTER,\n    BT_CONN_ROLE_SLAVE,\n};\n\n/** @brief Connection Info Structure\n *\n *\n *  @param type Connection Type\n *  @param role Connection Role\n *  @param id Which local identity the connection was created with\n *  @param le LE Connection specific Info\n *  @param br BR/EDR Connection specific Info\n */\nstruct bt_conn_info {\n    u8_t type;\n\n    u8_t role;\n\n    u8_t id;\n\n    union {\n        struct bt_conn_le_info le;\n\n        struct bt_conn_br_info br;\n    };\n};\n\n/** @brief Get connection info\n *\n *  @param conn Connection object.\n *  @param info Connection info object.\n *\n *  @return Zero on success or (negative) error code on failure.\n */\nint bt_conn_get_info(const struct bt_conn *conn, struct bt_conn_info *info);\n\n/** @brief Get connected devices' info\n *\n *  @param info Connection info object.\n *\n *  @return Connected device number.\n */\nint bt_conn_get_remote_dev_info(struct bt_conn_info *info);\n\n/** @brief Update the connection parameters.\n *\n *  @param conn Connection object.\n *  @param param Updated connection parameters.\n *\n *  @return Zero on success or (negative) error code on failure.\n */\n#if defined(CONFIG_BT_STACK_PTS)\nint pts_bt_conn_le_param_update(struct bt_conn *conn,\n                                const struct bt_le_conn_param *param);\n#endif\nint bt_conn_le_param_update(struct bt_conn *conn,\n                            const struct bt_le_conn_param *param);\n/** @brief Disconnect from a remote device or cancel pending connection.\n *\n *  Disconnect an active connection with the specified reason code or cancel\n *  pending outgoing connection.\n *\n *  @param conn Connection to disconnect.\n *  @param reason Reason code for the disconnection.\n *\n *  @return Zero on success or (negative) error code on failure.\n */\nint bt_conn_disconnect(struct bt_conn *conn, u8_t reason);\n\n/** @brief Initiate an LE connection to a remote device.\n *\n *  Allows initiate new LE link to remote peer using its address.\n *  Returns a new reference that the the caller is responsible for managing.\n *\n *  This uses the General Connection Establishment procedure.\n *\n *  @param peer  Remote address.\n *  @param param Initial connection parameters.\n *\n *  @return Valid connection object on success or NULL otherwise.\n */\nstruct bt_conn *bt_conn_create_le(const bt_addr_le_t *peer,\n                                  const struct bt_le_conn_param *param);\n\n/** @brief Automatically connect to remote devices in whitelist.\n *\n *  This uses the Auto Connection Establishment procedure.\n *\n *  @param param Initial connection parameters.\n *\n *  @return Zero on success or (negative) error code on failure.\n */\nint bt_conn_create_auto_le(const struct bt_le_conn_param *param);\n\n/** @brief Stop automatic connect creation.\n *\n *  @return Zero on success or (negative) error code on failure.\n */\nint bt_conn_create_auto_stop(void);\n\n/** @brief Automatically connect to remote device if it's in range.\n *\n *  This function enables/disables automatic connection initiation.\n *  Every time the device loses the connection with peer, this connection\n *  will be re-established if connectable advertisement from peer is received.\n *\n *  Note: Auto connect is disabled during explicit scanning.\n *\n *  @param addr Remote Bluetooth address.\n *  @param param If non-NULL, auto connect is enabled with the given\n *  parameters. If NULL, auto connect is disabled.\n *\n *  @return Zero on success or error code otherwise.\n */\nint bt_le_set_auto_conn(const bt_addr_le_t *addr,\n                        const struct bt_le_conn_param *param);\n\n/** @brief Initiate directed advertising to a remote device\n *\n *  Allows initiating a new LE connection to remote peer with the remote\n *  acting in central role and the local device in peripheral role.\n *\n *  The advertising type will either be BT_LE_ADV_DIRECT_IND, or\n *  BT_LE_ADV_DIRECT_IND_LOW_DUTY if the BT_LE_ADV_OPT_DIR_MODE_LOW_DUTY\n *  option was used as part of the advertising parameters.\n *\n *  In case of high duty cycle this will result in a callback with\n *  connected() with a new connection or with an error.\n *\n *  The advertising may be canceled with bt_conn_disconnect().\n *\n *  Returns a new reference that the the caller is responsible for managing.\n *\n *  @param peer  Remote address.\n *  @param param Directed advertising parameters.\n *\n *  @return Valid connection object on success or NULL otherwise.\n */\nstruct bt_conn *bt_conn_create_slave_le(const bt_addr_le_t *peer,\n                                        const struct bt_le_adv_param *param);\n\n/** Security level. */\ntypedef enum __packed {\n    /** Level 0: Only for BR/EDR special cases, like SDP */\n    BT_SECURITY_L0,\n    /** Level 1: No encryption and no authentication. */\n    BT_SECURITY_L1,\n    /** Level 2: Encryption and no authentication (no MITM). */\n    BT_SECURITY_L2,\n    /** Level 3: Encryption and authentication (MITM). */\n    BT_SECURITY_L3,\n    /** Level 4: Authenticated Secure Connections and 128-bit key. */\n    BT_SECURITY_L4,\n\n    BT_SECURITY_NONE __deprecated = BT_SECURITY_L0,\n    BT_SECURITY_LOW __deprecated = BT_SECURITY_L1,\n    BT_SECURITY_MEDIUM __deprecated = BT_SECURITY_L2,\n    BT_SECURITY_HIGH __deprecated = BT_SECURITY_L3,\n    BT_SECURITY_FIPS __deprecated = BT_SECURITY_L4,\n\n    /** Bit to force new pairing procedure, bit-wise OR with requested\n\t *  security level.\n\t */\n    BT_SECURITY_FORCE_PAIR = BIT(7),\n} bt_security_t;\n\n/** @brief Set security level for a connection.\n *\n *  This function enable security (encryption) for a connection. If device is\n *  already paired with sufficiently strong key encryption will be enabled. If\n *  link is already encrypted with sufficiently strong key this function does\n *  nothing.\n *\n *  If device is not paired pairing will be initiated. If device is paired and\n *  keys are too weak but input output capabilities allow for strong enough keys\n *  pairing will be initiated.\n *\n *  This function may return error if required level of security is not possible\n *  to achieve due to local or remote device limitation (e.g., input output\n *  capabilities), or if the maximum number of paired devices has been reached.\n *\n *  This function may return error if the pairing procedure has already been\n *  initiated by the local device or the peer device.\n *\n *  @param conn Connection object.\n *  @param sec Requested security level.\n *\n *  @return 0 on success or negative error\n */\nint bt_conn_set_security(struct bt_conn *conn, bt_security_t sec);\n\n/** @brief Get security level for a connection.\n *\n *  @return Connection security level\n */\nbt_security_t bt_conn_get_security(struct bt_conn *conn);\n\nstatic inline int __deprecated bt_conn_security(struct bt_conn *conn,\n                                                bt_security_t sec)\n{\n    return bt_conn_set_security(conn, sec);\n}\n\n/** @brief Get encryption key size.\n *\n *  This function gets encryption key size.\n *  If there is no security (encryption) enabled 0 will be returned.\n *\n *  @param conn Existing connection object.\n *\n *  @return Encryption key size.\n */\nu8_t bt_conn_enc_key_size(struct bt_conn *conn);\n\nenum bt_security_err {\n    /** Security procedure successful. */\n    BT_SECURITY_ERR_SUCCESS,\n\n    /** Authentication failed. */\n    BT_SECURITY_ERR_AUTH_FAIL,\n\n    /** PIN or encryption key is missing. */\n    BT_SECURITY_ERR_PIN_OR_KEY_MISSING,\n\n    /** OOB data is not available.  */\n    BT_SECURITY_ERR_OOB_NOT_AVAILABLE,\n\n    /** The requested security level could not be reached. */\n    BT_SECURITY_ERR_AUTH_REQUIREMENT,\n\n    /** Pairing is not supported */\n    BT_SECURITY_ERR_PAIR_NOT_SUPPORTED,\n\n    /** Pairing is not allowed. */\n    BT_SECURITY_ERR_PAIR_NOT_ALLOWED,\n\n    /** Invalid parameters. */\n    BT_SECURITY_ERR_INVALID_PARAM,\n\n    /** Pairing failed but the exact reason could not be specified. */\n    BT_SECURITY_ERR_UNSPECIFIED,\n};\n\n/** @brief Connection callback structure.\n *\n *  This structure is used for tracking the state of a connection.\n *  It is registered with the help of the bt_conn_cb_register() API.\n *  It's permissible to register multiple instances of this @ref bt_conn_cb\n *  type, in case different modules of an application are interested in\n *  tracking the connection state. If a callback is not of interest for\n *  an instance, it may be set to NULL and will as a consequence not be\n *  used for that instance.\n */\nstruct bt_conn_cb {\n    /** @brief A new connection has been established.\n\t *\n\t *  This callback notifies the application of a new connection.\n\t *  In case the err parameter is non-zero it means that the\n\t *  connection establishment failed.\n\t *\n\t *  @param conn New connection object.\n\t *  @param err HCI error. Zero for success, non-zero otherwise.\n\t *\n\t *  @p err can mean either of the following:\n\t *  - @ref BT_HCI_ERR_UNKNOWN_CONN_ID Creating the connection started by\n\t *    @ref bt_conn_create_le was canceled either by the user through\n\t *    @ref bt_conn_disconnect or by the timeout in the host through\n\t *    :option:`CONFIG_BT_CREATE_CONN_TIMEOUT`.\n\t *  - @p BT_HCI_ERR_ADV_TIMEOUT Directed advertiser started by @ref\n\t *    bt_conn_create_slave_le with high duty cycle timed out after 1.28\n\t *    seconds.\n\t */\n    void (*connected)(struct bt_conn *conn, u8_t err);\n\n    /** @brief A connection has been disconnected.\n\t *\n\t *  This callback notifies the application that a connection\n\t *  has been disconnected.\n\t *\n\t *  @param conn Connection object.\n\t *  @param reason HCI reason for the disconnection.\n\t */\n    void (*disconnected)(struct bt_conn *conn, u8_t reason);\n\n    /** @brief LE connection parameter update request.\n\t *\n\t *  This callback notifies the application that a remote device\n\t *  is requesting to update the connection parameters. The\n\t *  application accepts the parameters by returning true, or\n\t *  rejects them by returning false. Before accepting, the\n\t *  application may also adjust the parameters to better suit\n\t *  its needs.\n\t *\n\t *  It is recommended for an application to have just one of these\n\t *  callbacks for simplicity. However, if an application registers\n\t *  multiple it needs to manage the potentially different\n\t *  requirements for each callback. Each callback gets the\n\t *  parameters as returned by previous callbacks, i.e. they are not\n\t *  necessarily the same ones as the remote originally sent.\n\t *\n\t *  @param conn Connection object.\n\t *  @param param Proposed connection parameters.\n\t *\n\t *  @return true to accept the parameters, or false to reject them.\n\t */\n    bool (*le_param_req)(struct bt_conn *conn,\n                         struct bt_le_conn_param *param);\n\n    /** @brief The parameters for an LE connection have been updated.\n\t *\n\t *  This callback notifies the application that the connection\n\t *  parameters for an LE connection have been updated.\n\t *\n\t *  @param conn Connection object.\n\t *  @param interval Connection interval.\n\t *  @param latency Connection latency.\n\t *  @param timeout Connection supervision timeout.\n\t */\n    void (*le_param_updated)(struct bt_conn *conn, u16_t interval,\n                             u16_t latency, u16_t timeout);\n\n    /** @brief The PHY of the connection has changed.\n\t *\n\t *  This callback notifies the application that the PHY of the\n\t *  connection has changed.\n\t *\n\t *  @param conn Connection object.\n\t *  @param tx_phy Transmit phy.\n\t *  @param rx_phy Receive phy.\n\t */\n    void (*le_phy_updated)(struct bt_conn *conn, u8_t tx_phy, u8_t rx_phy);\n#if defined(CONFIG_BT_SMP)\n    /** @brief Remote Identity Address has been resolved.\n\t *\n\t *  This callback notifies the application that a remote\n\t *  Identity Address has been resolved\n\t *\n\t *  @param conn Connection object.\n\t *  @param rpa Resolvable Private Address.\n\t *  @param identity Identity Address.\n\t */\n    void (*identity_resolved)(struct bt_conn *conn,\n                              const bt_addr_le_t *rpa,\n                              const bt_addr_le_t *identity);\n#endif /* CONFIG_BT_SMP */\n#if defined(CONFIG_BT_SMP) || defined(CONFIG_BT_BREDR)\n    /** @brief The security level of a connection has changed.\n\t *\n\t *  This callback notifies the application that the security level\n\t *  of a connection has changed.\n\t *\n\t *  @param conn Connection object.\n\t *  @param level New security level of the connection.\n\t *  @param err Security error. Zero for success, non-zero otherwise.\n\t */\n    void (*security_changed)(struct bt_conn *conn, bt_security_t level,\n                             enum bt_security_err err);\n#endif /* defined(CONFIG_BT_SMP) || defined(CONFIG_BT_BREDR) */\n    struct bt_conn_cb *_next;\n};\n\n#if defined(CONFIG_BT_STACK_PTS)\ntypedef enum {\n    SMP_AUTH_NO_BONDING_MITM = 1,\n    SMP_IO_CAP_DISPLAY_ONLY = 2,\n    SMP_AUTH_NO_MITM = 3,\n    SMP_AUTH_NO_BONDING_MITM_IO_DISPLAY_ONLY = 4,\n    SMP_IO_KEYBOARD_ONLY = 5,\n    SMP_IO_NO_INPUT_OUTPUT = 6,\n    SMP_PARING_INVALID_PUBLIC_KEY = 7,\n} smp_test_id;\n\nvoid bt_set_mitm(bool enable);\nvoid bt_set_smpflag(smp_test_id id);\nvoid bt_clear_smpflag(smp_test_id id);\n#endif\n\n/** @brief Register connection callbacks.\n *\n *  Register callbacks to monitor the state of connections.\n *\n *  @param cb Callback struct.\n */\nvoid bt_conn_cb_register(struct bt_conn_cb *cb);\n\n/** Enable/disable bonding.\n *\n *  Set/clear the Bonding flag in the Authentication Requirements of\n *  SMP Pairing Request/Response data.\n *  The initial value of this flag depends on BT_BONDABLE Kconfig setting.\n *  For the vast majority of applications calling this function shouldn't be\n *  needed.\n *\n *  @param enable Value allowing/disallowing to be bondable.\n */\nvoid bt_set_bondable(bool enable);\n\n/** Allow/disallow remote OOB data to be used for pairing.\n *\n *  Set/clear the OOB data flag for SMP Pairing Request/Response data.\n *  The initial value of this flag depends on BT_OOB_DATA_PRESENT Kconfig\n *  setting.\n *\n *  @param enable Value allowing/disallowing remote OOB data.\n */\nvoid bt_set_oob_data_flag(bool enable);\n\n/**\n * @brief Set OOB data during LE SC pairing procedure\n *\n * This function allows to set OOB data during the LE SC pairing procedure. The\n * function should only be called in response to the oob_data_request() callback\n * provided that LE SC method is used for pairing.\n *\n * The user should submit OOB data according to the information received in the\n * callback. This may yield three different configurations: with only local OOB\n * data present, with only remote OOB data present or with both local and\n * remote OOB data present.\n *\n * @param conn Connection object\n * @param oobd_local Local OOB data or NULL if not present\n * @param oobd_remote Remote OOB data or NULL if not present\n *\n *  @return Zero on success or error code otherwise, positive in case\n *  of protocol error or negative (POSIX) in case of stack internal error\n */\nint bt_le_oob_set_sc_data(struct bt_conn *conn,\n                          const struct bt_le_oob_sc_data *oobd_local,\n                          const struct bt_le_oob_sc_data *oobd_remote);\n\n/**\n * @brief Get OOB data used for LE SC pairing procedure\n *\n * This function allows to get OOB data during the LE SC pairing procedure that\n * were set by the bt_le_oob_set_sc_data() API.\n *\n *  Note: The OOB data will only be available as long as the connection object\n *  associated with it is valid.\n *\n * @param conn Connection object\n * @param oobd_local Local OOB data or NULL if not set\n * @param oobd_remote Remote OOB data or NULL if not set\n *\n *  @return Zero on success or error code otherwise, positive in case\n *  of protocol error or negative (POSIX) in case of stack internal error\n */\nint bt_le_oob_get_sc_data(struct bt_conn *conn,\n                          const struct bt_le_oob_sc_data **oobd_local,\n                          const struct bt_le_oob_sc_data **oobd_remote);\n\n/** @def BT_PASSKEY_INVALID\n *\n *  Special passkey value that can be used to disable a previously\n *  set fixed passkey.\n */\n#define BT_PASSKEY_INVALID 0xffffffff\n\n/** @brief Set a fixed passkey to be used for pairing.\n *\n *  This API is only available when the CONFIG_BT_FIXED_PASSKEY\n *  configuration option has been enabled.\n *\n *  Sets a fixed passkey to be used for pairing. If set, the\n *  pairing_confim() callback will be called for all incoming pairings.\n *\n *  @param passkey A valid passkey (0 - 999999) or BT_PASSKEY_INVALID\n *                 to disable a previously set fixed passkey.\n *\n *  @return 0 on success or a negative error code on failure.\n */\nint bt_passkey_set(unsigned int passkey);\n\n/** Info Structure for OOB pairing */\nstruct bt_conn_oob_info {\n    /** Type of OOB pairing method */\n    enum {\n        /** LE legacy pairing */\n        BT_CONN_OOB_LE_LEGACY,\n\n        /** LE SC pairing */\n        BT_CONN_OOB_LE_SC,\n    } type;\n\n    union {\n        /** LESC OOB pairing parameters */\n        struct {\n            /** OOB data configuration */\n            enum {\n                /** Local OOB data requested */\n                BT_CONN_OOB_LOCAL_ONLY,\n\n                /** Remote OOB data requested */\n                BT_CONN_OOB_REMOTE_ONLY,\n\n                /** Both local and remote OOB data requested */\n                BT_CONN_OOB_BOTH_PEERS,\n\n                /** No OOB data requested */\n                BT_CONN_OOB_NO_DATA,\n            } oob_config;\n        } lesc;\n    };\n};\n\n/** Authenticated pairing callback structure */\nstruct bt_conn_auth_cb {\n    /** @brief Display a passkey to the user.\n\t *\n\t *  When called the application is expected to display the given\n\t *  passkey to the user, with the expectation that the passkey will\n\t *  then be entered on the peer device. The passkey will be in the\n\t *  range of 0 - 999999, and is expected to be padded with zeroes so\n\t *  that six digits are always shown. E.g. the value 37 should be\n\t *  shown as 000037.\n\t *\n\t *  This callback may be set to NULL, which means that the local\n\t *  device lacks the ability do display a passkey. If set\n\t *  to non-NULL the cancel callback must also be provided, since\n\t *  this is the only way the application can find out that it should\n\t *  stop displaying the passkey.\n\t *\n\t *  @param conn Connection where pairing is currently active.\n\t *  @param passkey Passkey to show to the user.\n\t */\n    void (*passkey_display)(struct bt_conn *conn, unsigned int passkey);\n\n    /** @brief Request the user to enter a passkey.\n\t *\n\t *  When called the user is expected to enter a passkey. The passkey\n\t *  must be in the range of 0 - 999999, and should be expected to\n\t *  be zero-padded, as that's how the peer device will typically be\n\t *  showing it (e.g. 37 would be shown as 000037).\n\t *\n\t *  Once the user has entered the passkey its value should be given\n\t *  to the stack using the bt_conn_auth_passkey_entry() API.\n\t *\n\t *  This callback may be set to NULL, which means that the local\n\t *  device lacks the ability to enter a passkey. If set to non-NULL\n\t *  the cancel callback must also be provided, since this is the\n\t *  only way the application can find out that it should stop\n\t *  requesting the user to enter a passkey.\n\t *\n\t *  @param conn Connection where pairing is currently active.\n\t */\n    void (*passkey_entry)(struct bt_conn *conn);\n\n    /** @brief Request the user to confirm a passkey.\n\t *\n\t *  When called the user is expected to confirm that the given\n\t *  passkey is also shown on the peer device.. The passkey will\n\t *  be in the range of 0 - 999999, and should be zero-padded to\n\t *  always be six digits (e.g. 37 would be shown as 000037).\n\t *\n\t *  Once the user has confirmed the passkey to match, the\n\t *  bt_conn_auth_passkey_confirm() API should be called. If the\n\t *  user concluded that the passkey doesn't match the\n\t *  bt_conn_auth_cancel() API should be called.\n\t *\n\t *  This callback may be set to NULL, which means that the local\n\t *  device lacks the ability to confirm a passkey. If set to non-NULL\n\t *  the cancel callback must also be provided, since this is the\n\t *  only way the application can find out that it should stop\n\t *  requesting the user to confirm a passkey.\n\t *\n\t *  @param conn Connection where pairing is currently active.\n\t *  @param passkey Passkey to be confirmed.\n\t */\n    void (*passkey_confirm)(struct bt_conn *conn, unsigned int passkey);\n\n    /** @brief Request the user to provide OOB data.\n\t *\n\t *  When called the user is expected to provide OOB data. The required\n\t *  data are indicated by the information structure.\n\t *\n\t *  For LESC OOB pairing method, the user should provide local OOB data,\n\t *  remote OOB data or both depending on their availability. Their value\n\t *  should be given to the stack using the bt_le_oob_set_sc_data() API.\n\t *\n\t *  This callback must be set to non-NULL in order to support OOB\n\t *  pairing.\n\t *\n\t *  @param conn Connection where pairing is currently active.\n\t *  @param info OOB pairing information.\n\t */\n    void (*oob_data_request)(struct bt_conn *conn,\n                             struct bt_conn_oob_info *info);\n\n    /** @brief Cancel the ongoing user request.\n\t *\n\t *  This callback will be called to notify the application that it\n\t *  should cancel any previous user request (passkey display, entry\n\t *  or confirmation).\n\t *\n\t *  This may be set to NULL, but must always be provided whenever the\n\t *  passkey_display, passkey_entry passkey_confirm or pairing_confirm\n\t *  callback has been provided.\n\t *\n\t *  @param conn Connection where pairing is currently active.\n\t */\n    void (*cancel)(struct bt_conn *conn);\n\n    /** @brief Request confirmation for an incoming pairing.\n\t *\n\t *  This callback will be called to confirm an incoming pairing\n\t *  request where none of the other user callbacks is applicable.\n\t *\n\t *  If the user decides to accept the pairing the\n\t *  bt_conn_auth_pairing_confirm() API should be called. If the\n\t *  user decides to reject the pairing the bt_conn_auth_cancel() API\n\t *  should be called.\n\t *\n\t *  This callback may be set to NULL, which means that the local\n\t *  device lacks the ability to confirm a pairing request. If set\n\t *  to non-NULL the cancel callback must also be provided, since\n\t *  this is the only way the application can find out that it should\n\t *  stop requesting the user to confirm a pairing request.\n\t *\n\t *  @param conn Connection where pairing is currently active.\n\t */\n    void (*pairing_confirm)(struct bt_conn *conn);\n\n#if defined(CONFIG_BT_BREDR)\n    /** @brief Request the user to enter a passkey.\n\t *\n\t *  This callback will be called for a BR/EDR (Bluetooth Classic)\n\t *  connection where pairing is being performed. Once called the\n\t *  user is expected to enter a PIN code with a length between\n\t *  1 and 16 digits. If the @a highsec parameter is set to true\n\t *  the PIN code must be 16 digits long.\n\t *\n\t *  Once entered, the PIN code should be given to the stack using\n\t *  the bt_conn_auth_pincode_entry() API.\n\t *\n\t *  This callback may be set to NULL, however in that case pairing\n\t *  over BR/EDR will not be possible. If provided, the cancel\n\t *  callback must be provided as well.\n\t *\n\t *  @param conn Connection where pairing is currently active.\n\t *  @param highsec true if 16 digit PIN is required.\n\t */\n    void (*pincode_entry)(struct bt_conn *conn, bool highsec);\n#endif\n\n    /** @brief notify that pairing process was complete.\n\t *\n\t * This callback notifies the application that the pairing process\n\t * has been completed.\n\t *\n\t * @param conn Connection object.\n\t * @param bonded pairing is bonded or not.\n\t */\n    void (*pairing_complete)(struct bt_conn *conn, bool bonded);\n\n    /** @brief notify that pairing process has failed.\n\t *\n\t * @param conn Connection object.\n\t * @param reason Pairing failed reason\n\t */\n    void (*pairing_failed)(struct bt_conn *conn,\n                           enum bt_security_err reason);\n};\n\n/** @brief Register authentication callbacks.\n *\n *  Register callbacks to handle authenticated pairing. Passing NULL\n *  unregisters a previous callbacks structure.\n *\n *  @param cb Callback struct.\n *\n *  @return Zero on success or negative error code otherwise\n */\nint bt_conn_auth_cb_register(const struct bt_conn_auth_cb *cb);\n\n/** @brief Reply with entered passkey.\n *\n *  This function should be called only after passkey_entry callback from\n *  bt_conn_auth_cb structure was called.\n *\n *  @param conn Connection object.\n *  @param passkey Entered passkey.\n *\n *  @return Zero on success or negative error code otherwise\n */\nint bt_conn_auth_passkey_entry(struct bt_conn *conn, unsigned int passkey);\n\n/** @brief Cancel ongoing authenticated pairing.\n *\n *  This function allows to cancel ongoing authenticated pairing.\n *\n *  @param conn Connection object.\n *\n *  @return Zero on success or negative error code otherwise\n */\nint bt_conn_auth_cancel(struct bt_conn *conn);\n\n/** @brief Reply if passkey was confirmed to match by user.\n *\n *  This function should be called only after passkey_confirm callback from\n *  bt_conn_auth_cb structure was called.\n *\n *  @param conn Connection object.\n *\n *  @return Zero on success or negative error code otherwise\n */\nint bt_conn_auth_passkey_confirm(struct bt_conn *conn);\n\n/** @brief Reply if incoming pairing was confirmed by user.\n *\n *  This function should be called only after pairing_confirm callback from\n *  bt_conn_auth_cb structure was called if user confirmed incoming pairing.\n *\n *  @param conn Connection object.\n *\n *  @return Zero on success or negative error code otherwise\n */\nint bt_conn_auth_pairing_confirm(struct bt_conn *conn);\n\n/** @brief Reply with entered PIN code.\n *\n *  This function should be called only after PIN code callback from\n *  bt_conn_auth_cb structure was called. It's for legacy 2.0 devices.\n *\n *  @param conn Connection object.\n *  @param pin Entered PIN code.\n *\n *  @return Zero on success or negative error code otherwise\n */\nint bt_conn_auth_pincode_entry(struct bt_conn *conn, const char *pin);\n\n/** Connection parameters for BR/EDR connections */\nstruct bt_br_conn_param {\n    bool allow_role_switch;\n};\n\n/** Helper to declare BR/EDR connection parameters inline\n  *\n  * @param role_switch True if role switch is allowed\n  */\n#define BT_BR_CONN_PARAM(role_switch)       \\\n    (&(struct bt_br_conn_param){            \\\n        .allow_role_switch = (role_switch), \\\n    })\n\n/** Default BR/EDR connection parameters:\n  *   Role switch allowed\n  */\n#define BT_BR_CONN_PARAM_DEFAULT BT_BR_CONN_PARAM(true)\n\n/** @brief Initiate an BR/EDR connection to a remote device.\n *\n *  Allows initiate new BR/EDR link to remote peer using its address.\n *  Returns a new reference that the the caller is responsible for managing.\n *\n *  @param peer  Remote address.\n *  @param param Initial connection parameters.\n *\n *  @return Valid connection object on success or NULL otherwise.\n */\nstruct bt_conn *bt_conn_create_br(const bt_addr_t *peer,\n                                  const struct bt_br_conn_param *param);\n\n/** @brief Initiate an SCO connection to a remote device.\n *\n *  Allows initiate new SCO link to remote peer using its address.\n *  Returns a new reference that the the caller is responsible for managing.\n *\n *  @param peer  Remote address.\n *\n *  @return Valid connection object on success or NULL otherwise.\n */\nstruct bt_conn *bt_conn_create_sco(const bt_addr_t *peer);\n\n#ifdef __cplusplus\n}\n#endif\n\n/**\n * @}\n */\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_CONN_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/crypto.h",
    "content": "/** @file\n *  @brief Bluetooth subsystem crypto APIs.\n */\n\n/*\n * Copyright (c) 2017 Nordic Semiconductor ASA\n * Copyright (c) 2015-2017 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_CRYPTO_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_CRYPTO_H_\n\n/**\n * @brief Cryptography\n * @defgroup bt_crypto Cryptography\n * @ingroup bluetooth\n * @{\n */\n\n#include <stdbool.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** @brief Generate random data.\n *\n *  A random number generation helper which utilizes the Bluetooth\n *  controller's own RNG.\n *\n *  @param buf Buffer to insert the random data\n *  @param len Length of random data to generate\n *\n *  @return Zero on success or error code otherwise, positive in case\n *  of protocol error or negative (POSIX) in case of stack internal error\n */\nint bt_rand(void *buf, size_t len);\n\n/** @brief AES encrypt little-endian data.\n *\n *  An AES encrypt helper is used to request the Bluetooth controller's own\n *  hardware to encrypt the plaintext using the key and returns the encrypted\n *  data.\n *\n *  @param key 128 bit LS byte first key for the encryption of the plaintext\n *  @param plaintext 128 bit LS byte first plaintext data block to be encrypted\n *  @param enc_data 128 bit LS byte first encrypted data block\n *\n *  @return Zero on success or error code otherwise.\n */\nint bt_encrypt_le(const u8_t key[16], const u8_t plaintext[16],\n                  u8_t enc_data[16]);\n\n/** @brief AES encrypt big-endian data.\n *\n *  An AES encrypt helper is used to request the Bluetooth controller's own\n *  hardware to encrypt the plaintext using the key and returns the encrypted\n *  data.\n *\n *  @param key 128 bit MS byte first key for the encryption of the plaintext\n *  @param plaintext 128 bit MS byte first plaintext data block to be encrypted\n *  @param enc_data 128 bit MS byte first encrypted data block\n *\n *  @return Zero on success or error code otherwise.\n */\nint bt_encrypt_be(const u8_t key[16], const u8_t plaintext[16],\n                  u8_t enc_data[16]);\n\n#ifdef __cplusplus\n}\n#endif\n/**\n * @}\n */\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_CRYPTO_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/gap.h",
    "content": "/** @file\n *  @brief Bluetooth Generic Access Profile defines and Assigned Numbers.\n */\n\n/*\n * Copyright (c) 2019 Nordic Semiconductor ASA\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_GAP_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_GAP_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Company Identifiers (see Bluetooth Assigned Numbers) */\n#define BT_COMP_ID_LF 0x05f1 /* The Linux Foundation */\n\n/* EIR/AD data type definitions */\n#define BT_DATA_FLAGS                0x01 /* AD flags */\n#define BT_DATA_UUID16_SOME          0x02 /* 16-bit UUID, more available */\n#define BT_DATA_UUID16_ALL           0x03 /* 16-bit UUID, all listed */\n#define BT_DATA_UUID32_SOME          0x04 /* 32-bit UUID, more available */\n#define BT_DATA_UUID32_ALL           0x05 /* 32-bit UUID, all listed */\n#define BT_DATA_UUID128_SOME         0x06 /* 128-bit UUID, more available */\n#define BT_DATA_UUID128_ALL          0x07 /* 128-bit UUID, all listed */\n#define BT_DATA_NAME_SHORTENED       0x08 /* Shortened name */\n#define BT_DATA_NAME_COMPLETE        0x09 /* Complete name */\n#define BT_DATA_TX_POWER             0x0a /* Tx Power */\n#define BT_DATA_SM_TK_VALUE          0x10 /* Security Manager TK Value */\n#define BT_DATA_SM_OOB_FLAGS         0x11 /* Security Manager OOB Flags */\n#define BT_DATA_SOLICIT16            0x14 /* Solicit UUIDs, 16-bit */\n#define BT_DATA_SOLICIT128           0x15 /* Solicit UUIDs, 128-bit */\n#define BT_DATA_SVC_DATA16           0x16 /* Service data, 16-bit UUID */\n#define BT_DATA_GAP_APPEARANCE       0x19 /* GAP appearance */\n#define BT_DATA_LE_BT_DEVICE_ADDRESS 0x1b /* LE Bluetooth Device Address */\n#define BT_DATA_LE_ROLE              0x1c /* LE Role */\n#define BT_DATA_SOLICIT32            0x1f /* Solicit UUIDs, 32-bit */\n#define BT_DATA_SVC_DATA32           0x20 /* Service data, 32-bit UUID */\n#define BT_DATA_SVC_DATA128          0x21 /* Service data, 128-bit UUID */\n#define BT_DATA_LE_SC_CONFIRM_VALUE  0x22 /* LE SC Confirmation Value */\n#define BT_DATA_LE_SC_RANDOM_VALUE   0x23 /* LE SC Random Value */\n#define BT_DATA_URI                  0x24 /* URI */\n#define BT_DATA_MESH_PROV            0x29 /* Mesh Provisioning PDU */\n#define BT_DATA_MESH_MESSAGE         0x2a /* Mesh Networking PDU */\n#define BT_DATA_MESH_BEACON          0x2b /* Mesh Beacon */\n\n#define BT_DATA_MANUFACTURER_DATA 0xff /* Manufacturer Specific Data */\n\n#define BT_LE_AD_LIMITED  0x01 /* Limited Discoverable */\n#define BT_LE_AD_GENERAL  0x02 /* General Discoverable */\n#define BT_LE_AD_NO_BREDR 0x04 /* BR/EDR not supported */\n\n/* Defined GAP timers */\n#define BT_GAP_SCAN_FAST_INTERVAL   0x0060 /* 60 ms    */\n#define BT_GAP_SCAN_FAST_WINDOW     0x0030 /* 30 ms    */\n#define BT_GAP_SCAN_SLOW_INTERVAL_1 0x0800 /* 1.28 s   */\n#define BT_GAP_SCAN_SLOW_WINDOW_1   0x0012 /* 11.25 ms */\n#define BT_GAP_SCAN_SLOW_INTERVAL_2 0x1000 /* 2.56 s   */\n#define BT_GAP_SCAN_SLOW_WINDOW_2   0x0012 /* 11.25 ms */\n\n#if defined(BFLB_BLE)\n#define CONFIG_BT_BACKGROUND_SCAN_INTERVAL 0x0800\n#define CONFIG_BT_BACKGROUND_SCAN_WINDOW   0x0012\n#define BT_GAP_ADV_FAST_INT_MIN_3          0x0020 /* 20 ms   */\n#define BT_GAP_ADV_FAST_INT_MAX_3          0x0020 /* 20 ms   */\n#endif\n\n#define BT_GAP_ADV_FAST_INT_MIN_1 0x0030 /* 30 ms    */\n#define BT_GAP_ADV_FAST_INT_MAX_1 0x0060 /* 60 ms    */\n#define BT_GAP_ADV_FAST_INT_MIN_2 0x00a0 /* 100 ms   */\n#define BT_GAP_ADV_FAST_INT_MAX_2 0x00f0 /* 150 ms   */\n\n#define BT_GAP_ADV_SLOW_INT_MIN  0x0640 /* 1 s      */\n#define BT_GAP_ADV_SLOW_INT_MAX  0x0780 /* 1.2 s    */\n#define BT_GAP_INIT_CONN_INT_MIN 0x0018 /* 30 ms    */\n#define BT_GAP_INIT_CONN_INT_MAX 0x0028 /* 50 ms    */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_GAP_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/gatt.h",
    "content": "/** @file\n *  @brief Generic Attribute Profile handling.\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_GATT_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_GATT_H_\n\n/**\n * @brief Generic Attribute Profile (GATT)\n * @defgroup bt_gatt Generic Attribute Profile (GATT)\n * @ingroup bluetooth\n * @{\n */\n\n#include <stddef.h>\n#include <sys/types.h>\n#include <misc/util.h>\n#include <conn.h>\n#include <uuid.h>\n#include <att.h>\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* GATT attribute permission bit field values */\nenum {\n    /** No operations supported, e.g. for notify-only */\n    BT_GATT_PERM_NONE = 0,\n\n    /** Attribute read permission. */\n    BT_GATT_PERM_READ = BIT(0),\n\n    /** Attribute write permission. */\n    BT_GATT_PERM_WRITE = BIT(1),\n\n    /** Attribute read permission with encryption.\n\t *\n\t *  If set, requires encryption for read access.\n\t */\n    BT_GATT_PERM_READ_ENCRYPT = BIT(2),\n\n    /** Attribute write permission with encryption.\n\t *\n\t *  If set, requires encryption for write access.\n\t */\n    BT_GATT_PERM_WRITE_ENCRYPT = BIT(3),\n\n    /** Attribute read permission with authentication.\n\t *\n\t *  If set, requires encryption using authenticated link-key for read\n\t *  access.\n\t */\n    BT_GATT_PERM_READ_AUTHEN = BIT(4),\n\n    /** Attribute write permission with authentication.\n\t *\n\t *  If set, requires encryption using authenticated link-key for write\n\t *  access.\n\t */\n    BT_GATT_PERM_WRITE_AUTHEN = BIT(5),\n\n    /** Attribute prepare write permission.\n\t *\n\t *  If set, allows prepare writes with use of BT_GATT_WRITE_FLAG_PREPARE\n\t *  passed to write callback.\n\t */\n    BT_GATT_PERM_PREPARE_WRITE = BIT(6),\n};\n\n/**  @def BT_GATT_ERR\n  *  @brief Construct error return value for attribute read and write callbacks.\n  *\n  *  @param _att_err ATT error code\n  *\n  *  @return Appropriate error code for the attribute callbacks.\n  *\n  */\n#define BT_GATT_ERR(_att_err) (-(_att_err))\n\n/* GATT attribute write flags */\nenum {\n    /** Attribute prepare write flag\n\t *\n\t * If set, write callback should only check if the device is\n\t * authorized but no data shall be written.\n\t */\n    BT_GATT_WRITE_FLAG_PREPARE = BIT(0),\n\n    /** Attribute write command flag\n\t *\n\t * If set, indicates that write operation is a command (Write without\n\t * response) which doesn't generate any response.\n\t */\n    BT_GATT_WRITE_FLAG_CMD = BIT(1),\n};\n\n/** @brief GATT Attribute structure. */\nstruct bt_gatt_attr {\n    /** Attribute UUID */\n    const struct bt_uuid *uuid;\n\n    /** Attribute read callback\n\t *\n\t *  The callback can also be used locally to read the contents of the\n\t *  attribute in which case no connection will be set.\n\t *\n\t *  @param conn   The connection that is requesting to read\n\t *  @param attr   The attribute that's being read\n\t *  @param buf    Buffer to place the read result in\n\t *  @param len    Length of data to read\n\t *  @param offset Offset to start reading from\n\t *\n\t *  @return Number fo bytes read, or in case of an error\n\t *          BT_GATT_ERR() with a specific ATT error code.\n\t */\n    ssize_t (*read)(struct bt_conn *conn,\n                    const struct bt_gatt_attr *attr,\n                    void *buf, u16_t len,\n                    u16_t offset);\n\n    /** Attribute write callback\n\t *\n\t *  The callback can also be used locally to read the contents of the\n\t *  attribute in which case no connection will be set.\n\t *\n\t *  @param conn   The connection that is requesting to write\n\t *  @param attr   The attribute that's being written\n\t *  @param buf    Buffer with the data to write\n\t *  @param len    Number of bytes in the buffer\n\t *  @param offset Offset to start writing from\n\t *  @param flags  Flags (BT_GATT_WRITE_*)\n\t *\n\t *  @return Number of bytes written, or in case of an error\n\t *          BT_GATT_ERR() with a specific ATT error code.\n\t */\n    ssize_t (*write)(struct bt_conn *conn,\n                     const struct bt_gatt_attr *attr,\n                     const void *buf, u16_t len,\n                     u16_t offset, u8_t flags);\n\n    /** Attribute user data */\n    void *user_data;\n    /** Attribute handle */\n    u16_t handle;\n    /** Attribute permissions */\n    u8_t perm;\n};\n\n/** @brief GATT Service structure */\nstruct bt_gatt_service_static {\n    /** Service Attributes */\n    const struct bt_gatt_attr *attrs;\n    /** Service Attribute count */\n    size_t attr_count;\n};\n\n/** @brief GATT Service structure */\nstruct bt_gatt_service {\n    /** Service Attributes */\n    struct bt_gatt_attr *attrs;\n    /** Service Attribute count */\n    size_t attr_count;\n    sys_snode_t node;\n};\n\n/** @brief Service Attribute Value. */\nstruct bt_gatt_service_val {\n    /** Service UUID. */\n    const struct bt_uuid *uuid;\n    /** Service end handle. */\n    u16_t end_handle;\n};\n\n/** @brief Include Attribute Value. */\nstruct bt_gatt_include {\n    /** Service UUID. */\n    const struct bt_uuid *uuid;\n    /** Service start handle. */\n    u16_t start_handle;\n    /** Service end handle. */\n    u16_t end_handle;\n};\n\n/* Characteristic Properties Bit field values */\n\n/** @def BT_GATT_CHRC_BROADCAST\n *  @brief Characteristic broadcast property.\n *\n *  If set, permits broadcasts of the Characteristic Value using Server\n *  Characteristic Configuration Descriptor.\n */\n#define BT_GATT_CHRC_BROADCAST 0x01\n/** @def BT_GATT_CHRC_READ\n *  @brief Characteristic read property.\n *\n *  If set, permits reads of the Characteristic Value.\n */\n#define BT_GATT_CHRC_READ 0x02\n/** @def BT_GATT_CHRC_WRITE_WITHOUT_RESP\n *  @brief Characteristic write without response property.\n *\n *  If set, permits write of the Characteristic Value without response.\n */\n#define BT_GATT_CHRC_WRITE_WITHOUT_RESP 0x04\n/** @def BT_GATT_CHRC_WRITE\n *  @brief Characteristic write with response property.\n *\n *  If set, permits write of the Characteristic Value with response.\n */\n#define BT_GATT_CHRC_WRITE 0x08\n/** @def BT_GATT_CHRC_NOTIFY\n *  @brief Characteristic notify property.\n *\n *  If set, permits notifications of a Characteristic Value without\n *  acknowledgment.\n */\n#define BT_GATT_CHRC_NOTIFY 0x10\n/** @def BT_GATT_CHRC_INDICATE\n *  @brief Characteristic indicate property.\n *\n * If set, permits indications of a Characteristic Value with acknowledgment.\n */\n#define BT_GATT_CHRC_INDICATE 0x20\n/** @def BT_GATT_CHRC_AUTH\n *  @brief Characteristic Authenticated Signed Writes property.\n *\n *  If set, permits signed writes to the Characteristic Value.\n */\n#define BT_GATT_CHRC_AUTH 0x40\n/** @def BT_GATT_CHRC_EXT_PROP\n *  @brief Characteristic Extended Properties property.\n *\n * If set, additional characteristic properties are defined in the\n * Characteristic Extended Properties Descriptor.\n */\n#define BT_GATT_CHRC_EXT_PROP 0x80\n\n/** @brief Characteristic Attribute Value. */\nstruct bt_gatt_chrc {\n    /** Characteristic UUID. */\n    const struct bt_uuid *uuid;\n    /** Characteristic Value handle. */\n    u16_t value_handle;\n    /** Characteristic properties. */\n    u8_t properties;\n};\n\n/* Characteristic Extended Properties Bit field values */\n#define BT_GATT_CEP_RELIABLE_WRITE 0x0001\n#define BT_GATT_CEP_WRITABLE_AUX   0x0002\n\n/** @brief Characteristic Extended Properties Attribute Value. */\nstruct bt_gatt_cep {\n    /** Characteristic Extended properties */\n    u16_t properties;\n};\n\n/* Client Characteristic Configuration Values */\n\n/** @def BT_GATT_CCC_NOTIFY\n *  @brief Client Characteristic Configuration Notification.\n *\n *  If set, changes to Characteristic Value shall be notified.\n */\n#define BT_GATT_CCC_NOTIFY 0x0001\n/** @def BT_GATT_CCC_INDICATE\n *  @brief Client Characteristic Configuration Indication.\n *\n *  If set, changes to Characteristic Value shall be indicated.\n */\n#define BT_GATT_CCC_INDICATE 0x0002\n\n/* Client Characteristic Configuration Attribute Value */\nstruct bt_gatt_ccc {\n    /** Client Characteristic Configuration flags */\n    u16_t flags;\n};\n\n/** @brief GATT Characteristic Presentation Format Attribute Value. */\nstruct bt_gatt_cpf {\n    /** Format of the value of the characteristic */\n    u8_t format;\n    /** Exponent field to determine how the value of this characteristic is\n\t * further formatted\n\t */\n    s8_t exponent;\n    /** Unit of the characteristic */\n    u16_t unit;\n    /** Name space of the description */\n    u8_t name_space;\n    /** Description of the characteristic as defined in a higher layer profile */\n    u16_t description;\n} __packed;\n\n/**\n * @defgroup bt_gatt_server GATT Server APIs\n * @ingroup bt_gatt\n * @{\n */\n\n/** @brief Register GATT service.\n *\n *  Register GATT service. Applications can make use of\n *  macros such as BT_GATT_PRIMARY_SERVICE, BT_GATT_CHARACTERISTIC,\n *  BT_GATT_DESCRIPTOR, etc.\n *\n *  @param svc Service containing the available attributes\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_gatt_service_register(struct bt_gatt_service *svc);\n\n/** @brief Unregister GATT service.\n * *\n *  @param svc Service to be unregistered.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_gatt_service_unregister(struct bt_gatt_service *svc);\n\nenum {\n    BT_GATT_ITER_STOP = 0,\n    BT_GATT_ITER_CONTINUE,\n};\n\n/** @typedef bt_gatt_attr_func_t\n *  @brief Attribute iterator callback.\n *\n *  @param attr Attribute found.\n *  @param user_data Data given.\n *\n *  @return BT_GATT_ITER_CONTINUE if should continue to the next attribute\n *  or BT_GATT_ITER_STOP to stop.\n */\ntypedef u8_t (*bt_gatt_attr_func_t)(const struct bt_gatt_attr *attr,\n                                    void *user_data);\n\n/** @brief Attribute iterator by type.\n *\n *  Iterate attributes in the given range matching given UUID and/or data.\n *\n *  @param start_handle Start handle.\n *  @param end_handle End handle.\n *  @param uuid UUID to match, passing NULL skips UUID matching.\n *  @param attr_data Attribute data to match, passing NULL skips data matching.\n *  @param num_matches Number matches, passing 0 makes it unlimited.\n *  @param func Callback function.\n *  @param user_data Data to pass to the callback.\n */\nvoid bt_gatt_foreach_attr_type(u16_t start_handle, u16_t end_handle,\n                               const struct bt_uuid *uuid,\n                               const void *attr_data, uint16_t num_matches,\n                               bt_gatt_attr_func_t func,\n                               void *user_data);\n\n/** @brief Attribute iterator.\n *\n *  Iterate attributes in the given range.\n *\n *  @param start_handle Start handle.\n *  @param end_handle End handle.\n *  @param func Callback function.\n *  @param user_data Data to pass to the callback.\n */\nstatic inline void bt_gatt_foreach_attr(u16_t start_handle, u16_t end_handle,\n                                        bt_gatt_attr_func_t func,\n                                        void *user_data)\n{\n    bt_gatt_foreach_attr_type(start_handle, end_handle, NULL, NULL, 0, func,\n                              user_data);\n}\n\n/** @brief Iterate to the next attribute\n *\n *  Iterate to the next attribute following a given attribute.\n *\n *  @param attr Current Attribute.\n *\n *  @return The next attribute or NULL if it cannot be found.\n */\nstruct bt_gatt_attr *bt_gatt_attr_next(const struct bt_gatt_attr *attr);\n\n/** @brief Get the handle of the characteristic value descriptor.\n *\n * @param attr A Characteristic Attribute\n *\n * @return the handle of the corresponding Characteristic Value.  The\n * value will be zero (the invalid handle) if @p attr was not a\n * characteristic attribute.\n */\nuint16_t bt_gatt_attr_value_handle(const struct bt_gatt_attr *attr);\n\n/** @brief Generic Read Attribute value helper.\n *\n *  Read attribute value from local database storing the result into buffer.\n *\n *  @param conn Connection object.\n *  @param attr Attribute to read.\n *  @param buf Buffer to store the value.\n *  @param buf_len Buffer length.\n *  @param offset Start offset.\n *  @param value Attribute value.\n *  @param value_len Length of the attribute value.\n *\n *  @return int number of bytes read in case of success or negative values in\n *  case of error.\n */\nssize_t bt_gatt_attr_read(struct bt_conn *conn, const struct bt_gatt_attr *attr,\n                          void *buf, u16_t buf_len, u16_t offset,\n                          const void *value, u16_t value_len);\n\n/** @brief Read Service Attribute helper.\n *\n *  Read service attribute value from local database storing the result into\n *  buffer after encoding it.\n *  NOTE: Only use this with attributes which user_data is a bt_uuid.\n *\n *  @param conn Connection object.\n *  @param attr Attribute to read.\n *  @param buf Buffer to store the value read.\n *  @param len Buffer length.\n *  @param offset Start offset.\n *\n *  @return int number of bytes read in case of success or negative values in\n *  case of error.\n */\nssize_t bt_gatt_attr_read_service(struct bt_conn *conn,\n                                  const struct bt_gatt_attr *attr,\n                                  void *buf, u16_t len, u16_t offset);\n\n/** @def BT_GATT_SERVICE_DEFINE\n *  @brief Statically define and register a service.\n *\n *  Helper macro to statically define and register a service.\n *\n *  @param _name Service name.\n */\n#define BT_GATT_SERVICE_DEFINE(_name, ...)                           \\\n    const struct bt_gatt_attr attr_##_name[] = { __VA_ARGS__ };      \\\n    const Z_STRUCT_SECTION_ITERABLE(bt_gatt_service_static, _name) = \\\n        BT_GATT_SERVICE(attr_##_name)\n\n/** @def BT_GATT_SERVICE\n *  @brief Service Structure Declaration Macro.\n *\n *  Helper macro to declare a service structure.\n *\n *  @param _attrs Service attributes.\n */\n#define BT_GATT_SERVICE(_attrs)           \\\n    {                                     \\\n        .attrs = _attrs,                  \\\n        .attr_count = ARRAY_SIZE(_attrs), \\\n    }\n\n/** @def BT_GATT_PRIMARY_SERVICE\n *  @brief Primary Service Declaration Macro.\n *\n *  Helper macro to declare a primary service attribute.\n *\n *  @param _service Service attribute value.\n */\n#define BT_GATT_PRIMARY_SERVICE(_service)                      \\\n    BT_GATT_ATTRIBUTE(BT_UUID_GATT_PRIMARY, BT_GATT_PERM_READ, \\\n                      bt_gatt_attr_read_service, NULL, _service)\n\n/** @def BT_GATT_SECONDARY_SERVICE\n *  @brief Secondary Service Declaration Macro.\n *\n *  Helper macro to declare a secondary service attribute.\n *\n *  @param _service Service attribute value.\n */\n#define BT_GATT_SECONDARY_SERVICE(_service)                      \\\n    BT_GATT_ATTRIBUTE(BT_UUID_GATT_SECONDARY, BT_GATT_PERM_READ, \\\n                      bt_gatt_attr_read_service, NULL, _service)\n\n/** @brief Read Include Attribute helper.\n *\n *  Read include service attribute value from local database storing the result\n *  into buffer after encoding it.\n *  NOTE: Only use this with attributes which user_data is a bt_gatt_include.\n *\n *  @param conn Connection object.\n *  @param attr Attribute to read.\n *  @param buf Buffer to store the value read.\n *  @param len Buffer length.\n *  @param offset Start offset.\n *\n *  @return int number of bytes read in case of success or negative values in\n *  case of error.\n */\nssize_t bt_gatt_attr_read_included(struct bt_conn *conn,\n                                   const struct bt_gatt_attr *attr,\n                                   void *buf, u16_t len, u16_t offset);\n\n/** @def BT_GATT_INCLUDE_SERVICE\n *  @brief Include Service Declaration Macro.\n *\n *  Helper macro to declare database internal include service attribute.\n *\n *  @param _service_incl the first service attribute of service to include\n */\n#define BT_GATT_INCLUDE_SERVICE(_service_incl)                 \\\n    BT_GATT_ATTRIBUTE(BT_UUID_GATT_INCLUDE, BT_GATT_PERM_READ, \\\n                      bt_gatt_attr_read_included, NULL, _service_incl)\n\n/** @brief Read Characteristic Attribute helper.\n *\n *  Read characteristic attribute value from local database storing the result\n *  into buffer after encoding it.\n *  NOTE: Only use this with attributes which user_data is a bt_gatt_chrc.\n *\n *  @param conn Connection object.\n *  @param attr Attribute to read.\n *  @param buf Buffer to store the value read.\n *  @param len Buffer length.\n *  @param offset Start offset.\n *\n *  @return number of bytes read in case of success or negative values in\n *  case of error.\n */\nssize_t bt_gatt_attr_read_chrc(struct bt_conn *conn,\n                               const struct bt_gatt_attr *attr, void *buf,\n                               u16_t len, u16_t offset);\n\n#define BT_GATT_CHRC_INIT(_uuid, _handle, _props) \\\n    {                                             \\\n        .uuid = _uuid,                            \\\n        .value_handle = _handle,                  \\\n        .properties = _props,                     \\\n    }\n\n/** @def BT_GATT_CHARACTERISTIC\n *  @brief Characteristic and Value Declaration Macro.\n *\n *  Helper macro to declare a characteristic attribute along with its\n *  attribute value.\n *\n *  @param _uuid Characteristic attribute uuid.\n *  @param _props Characteristic attribute properties.\n *  @param _perm Characteristic Attribute access permissions.\n *  @param _read Characteristic Attribute read callback.\n *  @param _write Characteristic Attribute write callback.\n *  @param _value Characteristic Attribute value.\n */\n#define BT_GATT_CHARACTERISTIC(_uuid, _props, _perm, _read, _write, _value) \\\n    BT_GATT_ATTRIBUTE(BT_UUID_GATT_CHRC, BT_GATT_PERM_READ,                 \\\n                      bt_gatt_attr_read_chrc, NULL,                         \\\n                      ((struct bt_gatt_chrc[]){                             \\\n                          BT_GATT_CHRC_INIT(_uuid, 0U, _props),             \\\n                      })),                                                  \\\n        BT_GATT_ATTRIBUTE(_uuid, _perm, _read, _write, _value)\n\n#if IS_ENABLED(CONFIG_BT_SETTINGS_CCC_LAZY_LOADING)\n#define BT_GATT_CCC_MAX (CONFIG_BT_MAX_CONN)\n#else\n#define BT_GATT_CCC_MAX (CONFIG_BT_MAX_PAIRED + CONFIG_BT_MAX_CONN)\n#endif\n\n/** @brief GATT CCC configuration entry.\n *  @param id   Local identity, BT_ID_DEFAULT in most cases.\n *  @param peer Remote peer address\n *  @param value Configuration value.\n *  @param data Configuration pointer data.\n */\nstruct bt_gatt_ccc_cfg {\n    u8_t id;\n    bt_addr_le_t peer;\n    u16_t value;\n};\n\n/* Internal representation of CCC value */\nstruct _bt_gatt_ccc {\n    struct bt_gatt_ccc_cfg cfg[BT_GATT_CCC_MAX];\n    u16_t value;\n    void (*cfg_changed)(const struct bt_gatt_attr *attr,\n                        u16_t value);\n    bool (*cfg_write)(struct bt_conn *conn,\n                      const struct bt_gatt_attr *attr,\n                      u16_t value);\n    bool (*cfg_match)(struct bt_conn *conn,\n                      const struct bt_gatt_attr *attr);\n};\n\n/** @brief Read Client Characteristic Configuration Attribute helper.\n *\n *  Read CCC attribute value from local database storing the result into buffer\n *  after encoding it.\n *  NOTE: Only use this with attributes which user_data is a _bt_gatt_ccc.\n *\n *  @param conn Connection object.\n *  @param attr Attribute to read.\n *  @param buf Buffer to store the value read.\n *  @param len Buffer length.\n *  @param offset Start offset.\n *\n *  @return number of bytes read in case of success or negative values in\n *  case of error.\n */\nssize_t bt_gatt_attr_read_ccc(struct bt_conn *conn,\n                              const struct bt_gatt_attr *attr, void *buf,\n                              u16_t len, u16_t offset);\n\n/** @brief Write Client Characteristic Configuration Attribute helper.\n *\n *  Write value in the buffer into CCC attribute.\n *  NOTE: Only use this with attributes which user_data is a _bt_gatt_ccc.\n *\n *  @param conn Connection object.\n *  @param attr Attribute to read.\n *  @param buf Buffer to store the value read.\n *  @param len Buffer length.\n *  @param offset Start offset.\n *  @param flags Write flags.\n *\n *  @return number of bytes written in case of success or negative values in\n *  case of error.\n */\nssize_t bt_gatt_attr_write_ccc(struct bt_conn *conn,\n                               const struct bt_gatt_attr *attr, const void *buf,\n                               u16_t len, u16_t offset, u8_t flags);\n\n/** @def BT_GATT_CCC_INITIALIZER\n *  @brief Initialize Client Characteristic Configuration Declaration Macro.\n *\n *  Helper macro to initialize a Managed CCC attribute value.\n *\n *  @param _changed Configuration changed callback.\n *  @param _write Configuration write callback.\n *  @param _match Configuration match callback.\n */\n#define BT_GATT_CCC_INITIALIZER(_changed, _write, _match) \\\n    {                                                     \\\n        .cfg = {},                                        \\\n        .cfg_changed = _changed,                          \\\n        .cfg_write = _write,                              \\\n        .cfg_match = _match,                              \\\n    }\n\n/** @def BT_GATT_CCC_MANAGED\n *  @brief Managed Client Characteristic Configuration Declaration Macro.\n *\n *  Helper macro to declare a Managed CCC attribute.\n *\n *  @param _ccc CCC attribute user data, shall point to a _bt_gatt_ccc.\n *  @param _perm CCC access permissions.\n */\n#define BT_GATT_CCC_MANAGED(_ccc, _perm)                             \\\n    BT_GATT_ATTRIBUTE(BT_UUID_GATT_CCC, _perm,                       \\\n                      bt_gatt_attr_read_ccc, bt_gatt_attr_write_ccc, \\\n                      _ccc)\n\n/** @def BT_GATT_CCC\n *  @brief Client Characteristic Configuration Declaration Macro.\n *\n *  Helper macro to declare a CCC attribute.\n *\n *  @param _changed Configuration changed callback.\n *  @param _perm CCC access permissions.\n */\n#define BT_GATT_CCC(_changed, _perm)                                         \\\n    BT_GATT_CCC_MANAGED((&(struct _bt_gatt_ccc)                              \\\n                             BT_GATT_CCC_INITIALIZER(_changed, NULL, NULL)), \\\n                        _perm)\n\n/** @brief Read Characteristic Extended Properties Attribute helper\n *\n *  Read CEP attribute value from local database storing the result into buffer\n *  after encoding it.\n *  NOTE: Only use this with attributes which user_data is a bt_gatt_cep.\n *\n *  @param conn Connection object\n *  @param attr Attribute to read\n *  @param buf Buffer to store the value read\n *  @param len Buffer length\n *  @param offset Start offset\n *\n *  @return number of bytes read in case of success or negative values in\n *  case of error.\n */\nssize_t bt_gatt_attr_read_cep(struct bt_conn *conn,\n                              const struct bt_gatt_attr *attr, void *buf,\n                              u16_t len, u16_t offset);\n\n/** @def BT_GATT_CEP\n *  @brief Characteristic Extended Properties Declaration Macro.\n *\n *  Helper macro to declare a CEP attribute.\n *\n *  @param _value Descriptor attribute value.\n */\n#define BT_GATT_CEP(_value)                                 \\\n    BT_GATT_DESCRIPTOR(BT_UUID_GATT_CEP, BT_GATT_PERM_READ, \\\n                       bt_gatt_attr_read_cep, NULL, (void *)_value)\n\n/** @brief Read Characteristic User Description Descriptor Attribute helper\n *\n *  Read CUD attribute value from local database storing the result into buffer\n *  after encoding it.\n *  NOTE: Only use this with attributes which user_data is a NULL-terminated C\n *  string.\n *\n *  @param conn Connection object\n *  @param attr Attribute to read\n *  @param buf Buffer to store the value read\n *  @param len Buffer length\n *  @param offset Start offset\n *\n *  @return number of bytes read in case of success or negative values in\n *  case of error.\n */\nssize_t bt_gatt_attr_read_cud(struct bt_conn *conn,\n                              const struct bt_gatt_attr *attr, void *buf,\n                              u16_t len, u16_t offset);\n\n/** @def BT_GATT_CUD\n *  @brief Characteristic User Format Descriptor Declaration Macro.\n *\n *  Helper macro to declare a CUD attribute.\n *\n *  @param _value User description NULL-terminated C string.\n *  @param _perm Descriptor attribute access permissions.\n */\n#define BT_GATT_CUD(_value, _perm)                                     \\\n    BT_GATT_DESCRIPTOR(BT_UUID_GATT_CUD, _perm, bt_gatt_attr_read_cud, \\\n                       NULL, (void *)_value)\n\n/** @brief Read Characteristic Presentation format Descriptor Attribute helper\n *\n *  Read CPF attribute value from local database storing the result into buffer\n *  after encoding it.\n *  NOTE: Only use this with attributes which user_data is a bt_gatt_pf.\n *\n *  @param conn Connection object\n *  @param attr Attribute to read\n *  @param buf Buffer to store the value read\n *  @param len Buffer length\n *  @param offset Start offset\n *\n *  @return number of bytes read in case of success or negative values in\n *  case of error.\n */\nssize_t bt_gatt_attr_read_cpf(struct bt_conn *conn,\n                              const struct bt_gatt_attr *attr, void *buf,\n                              u16_t len, u16_t offset);\n\n/** @def BT_GATT_CPF\n *  @brief Characteristic Presentation Format Descriptor Declaration Macro.\n *\n *  Helper macro to declare a CPF attribute.\n *\n *  @param _value Descriptor attribute value.\n */\n#define BT_GATT_CPF(_value)                                 \\\n    BT_GATT_DESCRIPTOR(BT_UUID_GATT_CPF, BT_GATT_PERM_READ, \\\n                       bt_gatt_attr_read_cpf, NULL, (void *)_value)\n\n/** @def BT_GATT_DESCRIPTOR\n *  @brief Descriptor Declaration Macro.\n *\n *  Helper macro to declare a descriptor attribute.\n *\n *  @param _uuid Descriptor attribute uuid.\n *  @param _perm Descriptor attribute access permissions.\n *  @param _read Descriptor attribute read callback.\n *  @param _write Descriptor attribute write callback.\n *  @param _value Descriptor attribute value.\n */\n#define BT_GATT_DESCRIPTOR(_uuid, _perm, _read, _write, _value) \\\n    BT_GATT_ATTRIBUTE(_uuid, _perm, _read, _write, _value)\n\n/** @def BT_GATT_ATTRIBUTE\n *  @brief Attribute Declaration Macro.\n *\n *  Helper macro to declare an attribute.\n *\n *  @param _uuid Attribute uuid.\n *  @param _perm Attribute access permissions.\n *  @param _read Attribute read callback.\n *  @param _write Attribute write callback.\n *  @param _value Attribute value.\n */\n#define BT_GATT_ATTRIBUTE(_uuid, _perm, _read, _write, _value) \\\n    {                                                          \\\n        .uuid = _uuid,                                         \\\n        .read = _read,                                         \\\n        .write = _write,                                       \\\n        .user_data = _value,                                   \\\n        .handle = 0,                                           \\\n        .perm = _perm,                                         \\\n    }\n\n/** @brief Notification complete result callback.\n *\n *  @param conn Connection object.\n */\ntypedef void (*bt_gatt_complete_func_t)(struct bt_conn *conn, void *user_data);\n\nstruct bt_gatt_notify_params {\n    /** Notification Attribute UUID type */\n    const struct bt_uuid *uuid;\n    /** Notification Attribute object*/\n    const struct bt_gatt_attr *attr;\n    /** Notification Value data */\n    const void *data;\n    /** Notification Value length */\n    u16_t len;\n    /** Notification Value callback */\n    bt_gatt_complete_func_t func;\n    /** Notification Value callback user data */\n    void *user_data;\n};\n#if defined(CONFIG_BLE_AT_CMD)\nint bt_gatt_notify_at_cb(struct bt_conn *conn, struct bt_gatt_notify_params *params, u16_t attr_handle);\n#endif\n\n/** @brief Notify attribute value change.\n *\n *  This function works in the same way as @ref bt_gatt_notify.\n *  With the addition that after sending the notification the\n *  callback function will be called.\n *\n *  The callback is run from System Workqueue context.\n *\n *  Alternatively it is possible to notify by UUID by setting it on the\n *  parameters, when using this method the attribute given is used as the\n *  start range when looking up for possible matches.\n *\n *  @param conn Connection object.\n *  @param params Notification parameters.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_gatt_notify_cb(struct bt_conn *conn,\n                      struct bt_gatt_notify_params *params);\n\n/** @brief Notify attribute value change.\n *\n *  Send notification of attribute value change, if connection is NULL notify\n *  all peer that have notification enabled via CCC otherwise do a direct\n *  notification only the given connection.\n *\n *  The attribute object on the parameters can be the so called Characteristic\n *  Declaration, which is usually declared with BT_GATT_CHARACTERISTIC followed\n *  by BT_GATT_CCC, or the Characteristic Value Declaration which is\n *  automatically created after the Characteristic Declaration when using\n *  BT_GATT_CHARACTERISTIC.\n *\n *  @param conn Connection object.\n *  @param attr Characteristic or Characteristic Value attribute.\n *  @param data Pointer to Attribute data.\n *  @param len Attribute value length.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nstatic inline int bt_gatt_notify(struct bt_conn *conn,\n                                 const struct bt_gatt_attr *attr,\n                                 const void *data, u16_t len)\n{\n    struct bt_gatt_notify_params params;\n\n    memset(&params, 0, sizeof(params));\n\n    params.attr = attr;\n    params.data = data;\n    params.len = len;\n\n    return bt_gatt_notify_cb(conn, &params);\n}\n\n/** @typedef bt_gatt_indicate_func_t\n *  @brief Indication complete result callback.\n *\n *  @param conn Connection object.\n *  @param attr Attribute object.\n *  @param err ATT error code\n *\n *  @return 0 in case of success or negative value in case of error.\n */\ntypedef void (*bt_gatt_indicate_func_t)(struct bt_conn *conn,\n                                        const struct bt_gatt_attr *attr,\n                                        u8_t err);\n\n/** @brief GATT Indicate Value parameters */\nstruct bt_gatt_indicate_params {\n    struct bt_att_req _req;\n    /** Notification Attribute UUID type */\n    const struct bt_uuid *uuid;\n    /** Indicate Attribute object*/\n    const struct bt_gatt_attr *attr;\n    /** Indicate Value callback */\n    bt_gatt_indicate_func_t func;\n    /** Indicate Value data*/\n    const void *data;\n    /** Indicate Value length*/\n    u16_t len;\n};\n\n/** @brief Indicate attribute value change.\n *\n *  Send an indication of attribute value change. if connection is NULL\n *  indicate all peer that have notification enabled via CCC otherwise do a\n *  direct indication only the given connection.\n *\n *  The attribute object on the parameters can be the so called Characteristic\n *  Declaration, which is usually declared with BT_GATT_CHARACTERISTIC followed\n *  by BT_GATT_CCC, or the Characteristic Value Declaration which is\n *  automatically created after the Characteristic Declaration when using\n *  BT_GATT_CHARACTERISTIC.\n *\n *  The callback is run from System Workqueue context.\n *\n *  Alternatively it is possible to indicate by UUID by setting it on the\n *  parameters, when using this method the attribute given is used as the\n *  start range when looking up for possible matches.\n *\n *  Note: This procedure is asynchronous therefore the parameters need to\n *  remains valid while it is active.\n *\n *  @param conn Connection object.\n *  @param params Indicate parameters.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_gatt_indicate(struct bt_conn *conn,\n                     struct bt_gatt_indicate_params *params);\n\n#if defined(CONFIG_BT_STACK_PTS)\nint service_change_test(struct bt_gatt_indicate_params *params, const struct bt_conn *con);\n\n#endif\n/** @brief Check if connection have subscribed to attribute\n *\n *  Check if connection has subscribed to attribute value change.\n *\n *  The attribute object can be the so called Characteristic Declaration,\n *  which is usually declared with BT_GATT_CHARACTERISTIC followed\n *  by BT_GATT_CCC, or the Characteristic Value Declaration which is\n *  automatically created after the Characteristic Declaration when using\n *  BT_GATT_CHARACTERISTIC, or the Client Characteristic Configuration\n *  Descriptor (CCCD) which is created by BT_GATT_CCC.\n *\n *  @param conn Connection object.\n *  @param attr Attribute object.\n *  @param ccc_value The subscription type, either notifications or indications.\n *\n *  @return true if the attribute object has been subscribed.\n */\nbool bt_gatt_is_subscribed(struct bt_conn *conn,\n                           const struct bt_gatt_attr *attr, u16_t ccc_value);\n\n/** @brief Get ATT MTU for a connection\n *\n *  Get negotiated ATT connection MTU, note that this does not equal the largest\n *  amount of attribute data that can be transferred within a single packet.\n *\n *  @param conn Connection object.\n *\n *  @return MTU in bytes\n */\nu16_t bt_gatt_get_mtu(struct bt_conn *conn);\n\n/** @} */\n\n/**\n * @defgroup bt_gatt_client GATT Client APIs\n * @ingroup bt_gatt\n * @{\n */\n\n/** @brief GATT Exchange MTU parameters */\nstruct bt_gatt_exchange_params {\n    struct bt_att_req _req;\n    /** Response callback */\n    void (*func)(struct bt_conn *conn, u8_t err,\n                 struct bt_gatt_exchange_params *params);\n};\n\n/** @brief Exchange MTU\n *\n *  This client procedure can be used to set the MTU to the maximum possible\n *  size the buffers can hold.\n *\n *  NOTE: Shall only be used once per connection.\n *\n *  @param conn Connection object.\n *  @param params Exchange MTU parameters.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_gatt_exchange_mtu(struct bt_conn *conn,\n                         struct bt_gatt_exchange_params *params);\n\n#if defined(CONFIG_BLE_AT_CMD)\nint bt_at_gatt_exchange_mtu(struct bt_conn *conn, struct bt_gatt_exchange_params *params, u16_t mtu_size);\n#endif\n\nstruct bt_gatt_discover_params;\n\n/** @typedef bt_gatt_discover_func_t\n *  @brief Discover attribute callback function.\n *\n *  @param conn Connection object.\n *  @param attr Attribute found.\n *  @param params Discovery parameters given.\n *\n *  If discovery procedure has completed this callback will be called with\n *  attr set to NULL. This will not happen if procedure was stopped by returning\n *  BT_GATT_ITER_STOP. The attribute is read-only and cannot be cached without\n *  copying its contents.\n *\n *  @return BT_GATT_ITER_CONTINUE if should continue attribute discovery\n *  or BT_GATT_ITER_STOP to stop discovery procedure.\n */\ntypedef u8_t (*bt_gatt_discover_func_t)(struct bt_conn *conn,\n                                        const struct bt_gatt_attr *attr,\n                                        struct bt_gatt_discover_params *params);\n\n/* GATT Discover types */\nenum {\n    /** Discover Primary Services. */\n    BT_GATT_DISCOVER_PRIMARY,\n    /** Discover Secondary Services. */\n    BT_GATT_DISCOVER_SECONDARY,\n    /** Discover Included Services. */\n    BT_GATT_DISCOVER_INCLUDE,\n    /** Discover Characteristic Values.\n\t *\n\t *  Discover Characteristic Value and its properties.\n\t */\n    BT_GATT_DISCOVER_CHARACTERISTIC,\n    /** Discover Descriptors.\n\t *\n\t *  Discover Attributes which are not services or characteristics.\n\t *\n\t *  Note: The use of this type of discover is not recommended for\n\t *  discovering in ranges across multiple services/characteristics\n\t *  as it may incur in extra round trips.\n\t */\n    BT_GATT_DISCOVER_DESCRIPTOR,\n    /** Discover Attributes.\n\t *\n\t *  Discover Attributes of any type.\n\t *\n\t *  Note: The use of this type of discover is not recommended for\n\t *  discovering in ranges across multiple services/characteristics as\n\t *  it may incur in more round trips.\n\t */\n    BT_GATT_DISCOVER_ATTRIBUTE,\n};\n\n/** @brief GATT Discover Attributes parameters */\nstruct bt_gatt_discover_params {\n    struct bt_att_req _req;\n    /** Discover UUID type */\n    struct bt_uuid *uuid;\n    /** Discover attribute callback */\n    bt_gatt_discover_func_t func;\n    union {\n        struct {\n            /** Include service attribute declaration handle */\n            u16_t attr_handle;\n            /** Included service start handle */\n            u16_t start_handle;\n            /** Included service end handle */\n            u16_t end_handle;\n        } _included;\n        /** Discover start handle */\n        u16_t start_handle;\n    };\n    /** Discover end handle */\n    u16_t end_handle;\n    /** Discover type */\n    u8_t type;\n};\n\n/** @brief GATT Discover function\n *\n *  This procedure is used by a client to discover attributes on a server.\n *\n *  Primary Service Discovery: Procedure allows to discover specific Primary\n *                             Service based on UUID.\n *  Include Service Discovery: Procedure allows to discover all Include Services\n *                             within specified range.\n *  Characteristic Discovery:  Procedure allows to discover all characteristics\n *                             within specified handle range as well as\n *                             discover characteristics with specified UUID.\n *  Descriptors Discovery:     Procedure allows to discover all characteristic\n *                             descriptors within specified range.\n *\n *  For each attribute found the callback is called which can then decide\n *  whether to continue discovering or stop.\n *\n *  Note: This procedure is asynchronous therefore the parameters need to\n *  remains valid while it is active.\n *\n *  @param conn Connection object.\n *  @param params Discover parameters.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_gatt_discover(struct bt_conn *conn,\n                     struct bt_gatt_discover_params *params);\n\nstruct bt_gatt_read_params;\n\n/** @typedef bt_gatt_read_func_t\n *  @brief Read callback function\n *\n *  @param conn Connection object.\n *  @param err ATT error code.\n *  @param params Read parameters used.\n *  @param data Attribute value data. NULL means read has completed.\n *  @param length Attribute value length.\n */\ntypedef u8_t (*bt_gatt_read_func_t)(struct bt_conn *conn, u8_t err,\n                                    struct bt_gatt_read_params *params,\n                                    const void *data, u16_t length);\n\n/** @brief GATT Read parameters\n *  @param func Read attribute callback\n *  @param handle_count If equals to 1 single.handle and single.offset\n *                      are used.  If >1 Read Multiple Characteristic\n *                      Values is performed and handles are used.\n *                      If equals to 0 by_uuid is used for Read Using\n *                      Characteristic UUID.\n *  @param handle Attribute handle\n *  @param offset Attribute data offset\n *  @param handles Handles to read in Read Multiple Characteristic Values\n *  @param start_handle First requested handle number\n *  @param end_handle Last requested handle number\n *  @param uuid 2 or 16 octet UUID\n */\nstruct bt_gatt_read_params {\n    struct bt_att_req _req;\n    bt_gatt_read_func_t func;\n    size_t handle_count;\n    union {\n        struct {\n            u16_t handle;\n            u16_t offset;\n        } single;\n        u16_t *handles;\n        struct {\n            u16_t start_handle;\n            u16_t end_handle;\n            struct bt_uuid *uuid;\n        } by_uuid;\n    };\n};\n\n/** @brief Read Attribute Value by handle\n *\n *  This procedure read the attribute value and return it to the callback.\n *\n *  When reading attributes by UUID the callback can be called multiple times\n *  depending on how many instances of given the UUID exists with the\n *  start_handle being updated for each instance.\n *\n *  If an instance does contain a long value which cannot be read entirely the\n *  caller will need to read the remaining data separately using the handle and\n *  offset.\n *\n *  Note: This procedure is asynchronous therefore the parameters need to\n *  remains valid while it is active.\n *\n *  @param conn Connection object.\n *  @param params Read parameters.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_gatt_read(struct bt_conn *conn, struct bt_gatt_read_params *params);\n\nstruct bt_gatt_write_params;\n\n/** @typedef bt_gatt_write_func_t\n *  @brief Write callback function\n *\n *  @param conn Connection object.\n *  @param err ATT error code.\n *  @param params Write parameters used.\n */\ntypedef void (*bt_gatt_write_func_t)(struct bt_conn *conn, u8_t err,\n                                     struct bt_gatt_write_params *params);\n\n/** @brief GATT Write parameters */\nstruct bt_gatt_write_params {\n    struct bt_att_req _req;\n    /** Response callback */\n    bt_gatt_write_func_t func;\n    /** Attribute handle */\n    u16_t handle;\n    /** Attribute data offset */\n    u16_t offset;\n    /** Data to be written */\n    const void *data;\n    /** Length of the data */\n    u16_t length;\n};\n\n/** @brief Write Attribute Value by handle\n *\n * This procedure write the attribute value and return the result in the\n * callback.\n *\n * Note: This procedure is asynchronous therefore the parameters need to\n *  remains valid while it is active.\n *\n * @param conn Connection object.\n * @param params Write parameters.\n *\n * @return 0 in case of success or negative value in case of error.\n */\nint bt_gatt_write(struct bt_conn *conn, struct bt_gatt_write_params *params);\n\n#if defined(CONFIG_BT_STACK_PTS)\nint bt_gatt_prepare_write(struct bt_conn *conn,\n                          struct bt_gatt_write_params *params);\n\n#endif\n\n/** @brief Write Attribute Value by handle without response with callback.\n *\n * This function works in the same way as @ref bt_gatt_write_without_response.\n * With the addition that after sending the write the callback function will be\n * called.\n *\n * The callback is run from System Workqueue context.\n *\n * Note: By using a callback it also disable the internal flow control\n * which would prevent sending multiple commands without waiting for their\n * transmissions to complete, so if that is required the caller shall not\n * submit more data until the callback is called.\n *\n * @param conn Connection object.\n * @param handle Attribute handle.\n * @param data Data to be written.\n * @param length Data length.\n * @param sign Whether to sign data\n * @param func Transmission complete callback.\n * @param user_data User data to be passed back to callback.\n *\n * @return 0 in case of success or negative value in case of error.\n */\nint bt_gatt_write_without_response_cb(struct bt_conn *conn, u16_t handle,\n                                      const void *data, u16_t length,\n                                      bool sign, bt_gatt_complete_func_t func,\n                                      void *user_data);\n\n/** @brief Write Attribute Value by handle without response\n *\n * This procedure write the attribute value without requiring an\n * acknowledgment that the write was successfully performed\n *\n * @param conn Connection object.\n * @param handle Attribute handle.\n * @param data Data to be written.\n * @param length Data length.\n * @param sign Whether to sign data\n *\n * @return 0 in case of success or negative value in case of error.\n */\nstatic inline int bt_gatt_write_without_response(struct bt_conn *conn,\n                                                 u16_t handle, const void *data,\n                                                 u16_t length, bool sign)\n{\n    return bt_gatt_write_without_response_cb(conn, handle, data, length,\n                                             sign, NULL, NULL);\n}\n\nstruct bt_gatt_subscribe_params;\n\n/** @typedef bt_gatt_notify_func_t\n *  @brief Notification callback function\n *\n *  @param conn Connection object. May be NULL, indicating that the peer is\n *              being unpaired\n *  @param params Subscription parameters.\n *  @param data Attribute value data. If NULL then subscription was removed.\n *  @param length Attribute value length.\n */\ntypedef u8_t (*bt_gatt_notify_func_t)(struct bt_conn *conn,\n                                      struct bt_gatt_subscribe_params *params,\n                                      const void *data, u16_t length);\n\n/* Subscription flags */\nenum {\n    /** Persistence flag\n\t *\n\t * If set, indicates that the subscription is not saved\n\t * on the GATT server side. Therefore, upon disconnection,\n\t * the subscription will be automatically removed\n\t * from the client's subscriptions list and\n\t * when the client reconnects, it will have to\n\t * issue a new subscription.\n\t */\n    BT_GATT_SUBSCRIBE_FLAG_VOLATILE,\n\n    /** Write pending flag\n\t *\n\t * If set, indicates write operation is pending waiting remote end to\n\t * respond.\n\t */\n    BT_GATT_SUBSCRIBE_FLAG_WRITE_PENDING,\n\n    BT_GATT_SUBSCRIBE_NUM_FLAGS\n};\n\n/** @brief GATT Subscribe parameters */\nstruct bt_gatt_subscribe_params {\n    struct bt_att_req _req;\n    bt_addr_le_t _peer;\n    /** Notification value callback */\n    bt_gatt_notify_func_t notify;\n    /** Subscribe value handle */\n    u16_t value_handle;\n    /** Subscribe CCC handle */\n    u16_t ccc_handle;\n    /** Subscribe value */\n    u16_t value;\n    /** Subscription flags */\n    ATOMIC_DEFINE(flags, BT_GATT_SUBSCRIBE_NUM_FLAGS);\n\n    sys_snode_t node;\n};\n\n/** @brief Subscribe Attribute Value Notification\n *\n *  This procedure subscribe to value notification using the Client\n *  Characteristic Configuration handle.\n *  If notification received subscribe value callback is called to return\n *  notified value. One may then decide whether to unsubscribe directly from\n *  this callback. Notification callback with NULL data will not be called if\n *  subscription was removed by this method.\n *\n *  Note: This procedure is asynchronous therefore the parameters need to\n *  remains valid while it is active.\n *\n *  @param conn Connection object.\n *  @param params Subscribe parameters.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_gatt_subscribe(struct bt_conn *conn,\n                      struct bt_gatt_subscribe_params *params);\n\n/** @brief Unsubscribe Attribute Value Notification\n *\n * This procedure unsubscribe to value notification using the Client\n * Characteristic Configuration handle. Notification callback with NULL data\n * will be called if subscription was removed by this call, until then the\n * parameters cannot be reused.\n *\n * @param conn Connection object.\n * @param params Subscribe parameters.\n *\n * @return 0 in case of success or negative value in case of error.\n */\nint bt_gatt_unsubscribe(struct bt_conn *conn,\n                        struct bt_gatt_subscribe_params *params);\n\n/** @brief Cancel GATT pending request\n *\n *  @param conn Connection object.\n *  @param params Requested params address.\n */\nvoid bt_gatt_cancel(struct bt_conn *conn, void *params);\n\n#if defined(BFLB_BLE_MTU_CHANGE_CB)\ntypedef void (*bt_gatt_mtu_changed_cb_t)(struct bt_conn *conn, int mtu);\nvoid bt_gatt_register_mtu_callback(bt_gatt_mtu_changed_cb_t cb);\n#endif\n#if defined(CONFIG_BT_GATT_CLIENT)\n#if defined(BFLB_BLE_NOTIFY_ALL)\ntypedef void (*bt_notification_all_cb_t)(struct bt_conn *conn, u16_t handle, const void *data, u16_t length);\nvoid bt_gatt_register_notification_callback(bt_notification_all_cb_t cb);\n#endif\n#endif\n#if defined(BFLB_BLE)\n/** @brief load gatt ccc from flash\n *\n *  @param void.\n *  @param void.\n */\nvoid bt_gatt_ccc_load(void);\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n/**\n * @}\n */\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_GATT_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/hci_err.h",
    "content": "/** @file\n *  @brief Bluetooth Host Control Interface status codes.\n */\n\n/*\n * Copyright (c) 2019 Nordic Semiconductor ASA\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_HCI_STATUS_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_HCI_STATUS_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* HCI Error Codes, BT Core spec [Vol 2, Part D]. */\n#define BT_HCI_ERR_SUCCESS                  0x00\n#define BT_HCI_ERR_UNKNOWN_CMD              0x01\n#define BT_HCI_ERR_UNKNOWN_CONN_ID          0x02\n#define BT_HCI_ERR_HW_FAILURE               0x03\n#define BT_HCI_ERR_PAGE_TIMEOUT             0x04\n#define BT_HCI_ERR_AUTH_FAIL                0x05\n#define BT_HCI_ERR_PIN_OR_KEY_MISSING       0x06\n#define BT_HCI_ERR_MEM_CAPACITY_EXCEEDED    0x07\n#define BT_HCI_ERR_CONN_TIMEOUT             0x08\n#define BT_HCI_ERR_CONN_LIMIT_EXCEEDED      0x09\n#define BT_HCI_ERR_SYNC_CONN_LIMIT_EXCEEDED 0x0a\n#define BT_HCI_ERR_CONN_ALREADY_EXISTS      0x0b\n#define BT_HCI_ERR_CMD_DISALLOWED           0x0c\n#define BT_HCI_ERR_INSUFFICIENT_RESOURCES   0x0d\n#define BT_HCI_ERR_INSUFFICIENT_SECURITY    0x0e\n#define BT_HCI_ERR_BD_ADDR_UNACCEPTABLE     0x0f\n#define BT_HCI_ERR_CONN_ACCEPT_TIMEOUT      0x10\n#define BT_HCI_ERR_UNSUPP_FEATURE_PARAM_VAL 0x11\n#define BT_HCI_ERR_INVALID_PARAM            0x12\n#define BT_HCI_ERR_REMOTE_USER_TERM_CONN    0x13\n#define BT_HCI_ERR_REMOTE_LOW_RESOURCES     0x14\n#define BT_HCI_ERR_REMOTE_POWER_OFF         0x15\n#define BT_HCI_ERR_LOCALHOST_TERM_CONN      0x16\n#define BT_HCI_ERR_PAIRING_NOT_ALLOWED      0x18\n#define BT_HCI_ERR_UNSUPP_REMOTE_FEATURE    0x1a\n#define BT_HCI_ERR_INVALID_LL_PARAM         0x1e\n#define BT_HCI_ERR_UNSPECIFIED              0x1f\n#define BT_HCI_ERR_UNSUPP_LL_PARAM_VAL      0x20\n#define BT_HCI_ERR_LL_RESP_TIMEOUT          0x22\n#define BT_HCI_ERR_LL_PROC_COLLISION        0x23\n#define BT_HCI_ERR_INSTANT_PASSED           0x28\n#define BT_HCI_ERR_PAIRING_NOT_SUPPORTED    0x29\n#define BT_HCI_ERR_DIFF_TRANS_COLLISION     0x2a\n#define BT_HCI_ERR_UNACCEPT_CONN_PARAM      0x3b\n#define BT_HCI_ERR_ADV_TIMEOUT              0x3c\n#define BT_HCI_ERR_TERM_DUE_TO_MIC_FAIL     0x3d\n#define BT_HCI_ERR_CONN_FAIL_TO_ESTAB       0x3e\n\n#define BT_HCI_ERR_AUTHENTICATION_FAIL __DEPRECATED_MACRO BT_HCI_ERR_AUTH_FAIL\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_HCI_STATUS_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/hci_host.h",
    "content": "/* hci.h - Bluetooth Host Control Interface definitions */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef __BT_HCI_HOST_H\n#define __BT_HCI_HOST_H\n\n#include <toolchain.h>\n#include <zephyr/types.h>\n#include <stdbool.h>\n#include <string.h>\n#include <misc/util.h>\n#include <addr.h>\n#include <hci_err.h>\n\n#if defined(BFLB_BLE)\n#include <buf.h>\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Special own address types for LL privacy (used in adv & scan parameters) */\n#define BT_HCI_OWN_ADDR_RPA_OR_PUBLIC 0x02\n#define BT_HCI_OWN_ADDR_RPA_OR_RANDOM 0x03\n#define BT_HCI_OWN_ADDR_RPA_MASK      0x02\n\n#define BT_ENC_KEY_SIZE_MIN 0x07\n#define BT_ENC_KEY_SIZE_MAX 0x10\n\nstruct bt_hci_evt_hdr {\n    u8_t evt;\n    u8_t len;\n} __packed;\n#define BT_HCI_EVT_HDR_SIZE 2\n\n#define BT_ACL_START_NO_FLUSH 0x00\n#define BT_ACL_CONT           0x01\n#define BT_ACL_START          0x02\n\n#define bt_acl_handle(h)         ((h)&0x0fff)\n#define bt_acl_flags(h)          ((h) >> 12)\n#define bt_acl_handle_pack(h, f) ((h) | ((f) << 12))\n\nstruct bt_hci_acl_hdr {\n    u16_t handle;\n    u16_t len;\n} __packed;\n#define BT_HCI_ACL_HDR_SIZE 4\n\n#define BT_ISO_START  0x00\n#define BT_ISO_CONT   0x01\n#define BT_ISO_SINGLE 0x02\n#define BT_ISO_END    0x03\n\n#define bt_iso_handle(h)   ((h)&0x0fff)\n#define bt_iso_flags(h)    ((h) >> 12)\n#define bt_iso_flags_pb(f) ((f)&0x0003)\n#define bt_iso_flags_ts(f) (((f) >> 2) & 0x0001)\n#define bt_iso_pack_flags(pb, ts) \\\n    (((pb)&0x0003) | (((ts)&0x0001) << 2))\n#define bt_iso_handle_pack(h, pb, ts) \\\n    ((h) | (bt_iso_pack_flags(pb, ts) << 12))\n\n#define BT_ISO_DATA_VALID   0x00\n#define BT_ISO_DATA_INVALID 0x01\n#define BT_ISO_DATA_NOP     0x02\n\n#define bt_iso_pkt_len(h)         ((h)&0x3fff)\n#define bt_iso_pkt_flags(h)       ((h) >> 14)\n#define bt_iso_pkt_len_pack(h, f) ((h) | ((f) << 14))\n\nstruct bt_hci_iso_data_hdr {\n    uint16_t sn;\n    uint16_t slen;\n} __packed;\n#define BT_HCI_ISO_DATA_HDR_SIZE 4\n\nstruct bt_hci_iso_ts_data_hdr {\n    uint32_t ts;\n    struct bt_hci_iso_data_hdr data;\n} __packed;\n#define BT_HCI_ISO_TS_DATA_HDR_SIZE 8\n\nstruct bt_hci_iso_hdr {\n    uint16_t handle;\n    uint16_t len;\n} __packed;\n#define BT_HCI_ISO_HDR_SIZE 4\n\nstruct bt_hci_cmd_hdr {\n    u16_t opcode;\n    u8_t param_len;\n} __packed;\n#define BT_HCI_CMD_HDR_SIZE 3\n\n/* Supported Commands */\n#define BT_CMD_TEST(cmd, octet, bit) (cmd[octet] & BIT(bit))\n#define BT_CMD_LE_STATES(cmd)        BT_CMD_TEST(cmd, 28, 3)\n\n#define BT_FEAT_TEST(feat, page, octet, bit) (feat[page][octet] & BIT(bit))\n\n#define BT_FEAT_BREDR(feat)        !BT_FEAT_TEST(feat, 0, 4, 5)\n#define BT_FEAT_LE(feat)           BT_FEAT_TEST(feat, 0, 4, 6)\n#define BT_FEAT_EXT_FEATURES(feat) BT_FEAT_TEST(feat, 0, 7, 7)\n#define BT_FEAT_HOST_SSP(feat)     BT_FEAT_TEST(feat, 1, 0, 0)\n#define BT_FEAT_SC(feat)           BT_FEAT_TEST(feat, 2, 1, 0)\n\n#define BT_FEAT_LMP_ESCO_CAPABLE(feat) BT_FEAT_TEST(feat, 0, 3, 7)\n#define BT_FEAT_HV2_PKT(feat)          BT_FEAT_TEST(feat, 0, 1, 4)\n#define BT_FEAT_HV3_PKT(feat)          BT_FEAT_TEST(feat, 0, 1, 5)\n#define BT_FEAT_EV4_PKT(feat)          BT_FEAT_TEST(feat, 0, 4, 0)\n#define BT_FEAT_EV5_PKT(feat)          BT_FEAT_TEST(feat, 0, 4, 1)\n#define BT_FEAT_2EV3_PKT(feat)         BT_FEAT_TEST(feat, 0, 5, 5)\n#define BT_FEAT_3EV3_PKT(feat)         BT_FEAT_TEST(feat, 0, 5, 6)\n#define BT_FEAT_3SLOT_PKT(feat)        BT_FEAT_TEST(feat, 0, 5, 7)\n\n/* LE features */\n#define BT_LE_FEAT_BIT_ENC                     0\n#define BT_LE_FEAT_BIT_CONN_PARAM_REQ          1\n#define BT_LE_FEAT_BIT_EXT_REJ_IND             2\n#define BT_LE_FEAT_BIT_SLAVE_FEAT_REQ          3\n#define BT_LE_FEAT_BIT_PING                    4\n#define BT_LE_FEAT_BIT_DLE                     5\n#define BT_LE_FEAT_BIT_PRIVACY                 6\n#define BT_LE_FEAT_BIT_EXT_SCAN                7\n#define BT_LE_FEAT_BIT_PHY_2M                  8\n#define BT_LE_FEAT_BIT_SMI_TX                  9\n#define BT_LE_FEAT_BIT_SMI_RX                  10\n#define BT_LE_FEAT_BIT_PHY_CODED               11\n#define BT_LE_FEAT_BIT_ADV_EXT                 12\n#define BT_LE_FEAT_BIT_ADV_PER                 13\n#define BT_LE_FEAT_BIT_CHAN_SEL_ALGO_2         14\n#define BT_LE_FEAT_BIT_PWR_CLASS_1             15\n#define BT_LE_FEAT_BIT_MIN_USED_CHAN_PROC      16\n#define BT_LE_FEAT_BIT_CONN_CTE_REQ            17\n#define BT_LE_FEAT_BIT_CONN_CTE_RESP           18\n#define BT_LE_FEAT_BIT_CONNECTIONLESS_CTE_TX   19\n#define BT_LE_FEAT_BIT_CONNECTIONLESS_CTE_RX   20\n#define BT_LE_FEAT_BIT_ANT_SWITCH_TX_AOD       21\n#define BT_LE_FEAT_BIT_ANT_SWITCH_RX_AOA       22\n#define BT_LE_FEAT_BIT_RX_CTE                  23\n#define BT_LE_FEAT_BIT_PAST_SEND               24\n#define BT_LE_FEAT_BIT_PAST_RECV               25\n#define BT_LE_FEAT_BIT_SCA_UPDATE              26\n#define BT_LE_FEAT_BIT_REMOTE_PUB_KEY_VALIDATE 27\n#define BT_LE_FEAT_BIT_CIS_MASTER              28\n#define BT_LE_FEAT_BIT_CIS_SLAVE               29\n#define BT_LE_FEAT_BIT_ISO_BROADCASTER         30\n#define BT_LE_FEAT_BIT_SYNC_RECEIVER           31\n#define BT_LE_FEAT_BIT_ISO_CHANNELS            32\n#define BT_LE_FEAT_BIT_PWR_CTRL_REQ            33\n#define BT_LE_FEAT_BIT_PWR_CHG_IND             34\n#define BT_LE_FEAT_BIT_PATH_LOSS_MONITOR       35\n\n#define BT_LE_FEAT_TEST(feat, n) (feat[(n) >> 3] & \\\n                                  BIT((n)&7))\n\n#define BT_FEAT_LE_ENCR(feat) BT_LE_FEAT_TEST(feat, \\\n                                              BT_LE_FEAT_BIT_ENC)\n#define BT_FEAT_LE_CONN_PARAM_REQ_PROC(feat) BT_LE_FEAT_TEST(feat, \\\n                                                             BT_LE_FEAT_BIT_CONN_PARAM_REQ)\n#define BT_FEAT_LE_SLAVE_FEATURE_XCHG(feat) BT_LE_FEAT_TEST(feat, \\\n                                                            BT_LE_FEAT_BIT_SLAVE_FEAT_REQ)\n#define BT_FEAT_LE_DLE(feat) BT_LE_FEAT_TEST(feat, \\\n                                             BT_LE_FEAT_BIT_DLE)\n#define BT_FEAT_LE_PHY_2M(feat) BT_LE_FEAT_TEST(feat, \\\n                                                BT_LE_FEAT_BIT_PHY_2M)\n#define BT_FEAT_LE_PHY_CODED(feat) BT_LE_FEAT_TEST(feat, \\\n                                                   BT_LE_FEAT_BIT_PHY_CODED)\n#define BT_FEAT_LE_PRIVACY(feat) BT_LE_FEAT_TEST(feat, \\\n                                                 BT_LE_FEAT_BIT_PRIVACY)\n#define BT_FEAT_LE_EXT_ADV(feat) BT_LE_FEAT_TEST(feat, \\\n                                                 BT_LE_FEAT_BIT_EXT_ADV)\n#define BT_FEAT_LE_EXT_PER_ADV(feat) BT_LE_FEAT_TEST(feat, \\\n                                                     BT_LE_FEAT_BIT_PER_ADV)\n#define BT_FEAT_LE_CONNECTIONLESS_CTE_TX(feat) BT_LE_FEAT_TEST(feat, \\\n                                                               BT_LE_FEAT_BIT_CONNECTIONLESS_CTE_TX)\n#define BT_FEAT_LE_ANT_SWITCH_TX_AOD(feat) BT_LE_FEAT_TEST(feat, \\\n                                                           BT_LE_FEAT_BIT_ANT_SWITCH_TX_AOD)\n#define BT_FEAT_LE_PAST_SEND(feat) BT_LE_FEAT_TEST(feat, \\\n                                                   BT_LE_FEAT_BIT_PAST_SEND)\n#define BT_FEAT_LE_PAST_RECV(feat) BT_LE_FEAT_TEST(feat, \\\n                                                   BT_LE_FEAT_BIT_PAST_RECV)\n#define BT_FEAT_LE_CIS_MASTER(feat) BT_LE_FEAT_TEST(feat, \\\n                                                    BT_LE_FEAT_BIT_CIS_MASTER)\n#define BT_FEAT_LE_CIS_SLAVE(feat) BT_LE_FEAT_TEST(feat, \\\n                                                   BT_LE_FEAT_BIT_CIS_SLAVE)\n#define BT_FEAT_LE_ISO_BROADCASTER(feat) BT_LE_FEAT_TEST(feat, \\\n                                                         BT_LE_FEAT_BIT_ISO_BROADCASTER)\n#define BT_FEAT_LE_SYNC_RECEIVER(feat) BT_LE_FEAT_TEST(feat, \\\n                                                       BT_LE_FEAT_BIT_SYNC_RECEIVER)\n#define BT_FEAT_LE_ISO_CHANNELS(feat) BT_LE_FEAT_TEST(feat, \\\n                                                      BT_LE_FEAT_BIT_ISO_CHANNELS)\n\n#define BT_FEAT_LE_CIS(feat) (BT_FEAT_LE_CIS_MASTER(feat) | \\\n                              BT_FEAT_LE_CIS_SLAVE(feat))\n#define BT_FEAT_LE_BIS(feat) (BT_FEAT_LE_ISO_BROADCASTER(feat) | \\\n                              BT_FEAT_LE_SYNC_RECEIVER(feat))\n#define BT_FEAT_LE_ISO(feat) (BT_FEAT_LE_CIS(feat) | \\\n                              BT_FEAT_LE_BIS(feat))\n\n/* LE States */\n#define BT_LE_STATES_SLAVE_CONN_ADV(states) (states & 0x0000004000000000)\n\n/* Bonding/authentication types */\n#define BT_HCI_NO_BONDING             0x00\n#define BT_HCI_NO_BONDING_MITM        0x01\n#define BT_HCI_DEDICATED_BONDING      0x02\n#define BT_HCI_DEDICATED_BONDING_MITM 0x03\n#define BT_HCI_GENERAL_BONDING        0x04\n#define BT_HCI_GENERAL_BONDING_MITM   0x05\n\n/*\n * MITM protection is enabled in SSP authentication requirements octet when\n * LSB bit is set.\n */\n#define BT_MITM 0x01\n\n/* I/O capabilities */\n#define BT_IO_DISPLAY_ONLY    0x00\n#define BT_IO_DISPLAY_YESNO   0x01\n#define BT_IO_KEYBOARD_ONLY   0x02\n#define BT_IO_NO_INPUT_OUTPUT 0x03\n\n/* SCO packet types */\n#define HCI_PKT_TYPE_HV1 0x0020\n#define HCI_PKT_TYPE_HV2 0x0040\n#define HCI_PKT_TYPE_HV3 0x0080\n\n/* eSCO packet types */\n#define HCI_PKT_TYPE_ESCO_HV1  0x0001\n#define HCI_PKT_TYPE_ESCO_HV2  0x0002\n#define HCI_PKT_TYPE_ESCO_HV3  0x0004\n#define HCI_PKT_TYPE_ESCO_EV3  0x0008\n#define HCI_PKT_TYPE_ESCO_EV4  0x0010\n#define HCI_PKT_TYPE_ESCO_EV5  0x0020\n#define HCI_PKT_TYPE_ESCO_2EV3 0x0040\n#define HCI_PKT_TYPE_ESCO_3EV3 0x0080\n#define HCI_PKT_TYPE_ESCO_2EV5 0x0100\n#define HCI_PKT_TYPE_ESCO_3EV5 0x0200\n\n#define ESCO_PKT_MASK (HCI_PKT_TYPE_ESCO_HV1 | \\\n                       HCI_PKT_TYPE_ESCO_HV2 | \\\n                       HCI_PKT_TYPE_ESCO_HV3)\n#define SCO_PKT_MASK (HCI_PKT_TYPE_HV1 | \\\n                      HCI_PKT_TYPE_HV2 | \\\n                      HCI_PKT_TYPE_HV3)\n#define EDR_ESCO_PKT_MASK (HCI_PKT_TYPE_ESCO_2EV3 | \\\n                           HCI_PKT_TYPE_ESCO_3EV3 | \\\n                           HCI_PKT_TYPE_ESCO_2EV5 | \\\n                           HCI_PKT_TYPE_ESCO_3EV5)\n\n/* HCI BR/EDR link types */\n#define BT_HCI_SCO  0x00\n#define BT_HCI_ACL  0x01\n#define BT_HCI_ESCO 0x02\n\n/* OpCode Group Fields */\n#define BT_OGF_LINK_CTRL 0x01\n#define BT_OGF_BASEBAND  0x03\n#define BT_OGF_INFO      0x04\n#define BT_OGF_STATUS    0x05\n#define BT_OGF_LE        0x08\n#define BT_OGF_VS        0x3f\n\n/* Construct OpCode from OGF and OCF */\n#define BT_OP(ogf, ocf) ((ocf) | ((ogf) << 10))\n\n/* Invalid opcode */\n#define BT_OP_NOP 0x0000\n\n/* Obtain OGF from OpCode */\n#define BT_OGF(opcode) (((opcode) >> 10) & BIT_MASK(6))\n/* Obtain OCF from OpCode */\n#define BT_OCF(opcode) ((opcode)&BIT_MASK(10))\n\n#define BT_HCI_OP_INQUIRY BT_OP(BT_OGF_LINK_CTRL, 0x0001)\nstruct bt_hci_op_inquiry {\n    u8_t lap[3];\n    u8_t length;\n    u8_t num_rsp;\n} __packed;\n\n#define BT_HCI_OP_INQUIRY_CANCEL BT_OP(BT_OGF_LINK_CTRL, 0x0002)\n\n#define BT_HCI_OP_CONNECT BT_OP(BT_OGF_LINK_CTRL, 0x0005)\nstruct bt_hci_cp_connect {\n    bt_addr_t bdaddr;\n    u16_t packet_type;\n    u8_t pscan_rep_mode;\n    u8_t reserved;\n    u16_t clock_offset;\n    u8_t allow_role_switch;\n} __packed;\n\n#define BT_HCI_OP_DISCONNECT BT_OP(BT_OGF_LINK_CTRL, 0x0006)\nstruct bt_hci_cp_disconnect {\n    u16_t handle;\n    u8_t reason;\n} __packed;\n\n#define BT_HCI_OP_CONNECT_CANCEL BT_OP(BT_OGF_LINK_CTRL, 0x0008)\nstruct bt_hci_cp_connect_cancel {\n    bt_addr_t bdaddr;\n} __packed;\nstruct bt_hci_rp_connect_cancel {\n    u8_t status;\n    bt_addr_t bdaddr;\n} __packed;\n\n#define BT_HCI_OP_ACCEPT_CONN_REQ BT_OP(BT_OGF_LINK_CTRL, 0x0009)\nstruct bt_hci_cp_accept_conn_req {\n    bt_addr_t bdaddr;\n    u8_t role;\n} __packed;\n\n#define BT_HCI_OP_SETUP_SYNC_CONN BT_OP(BT_OGF_LINK_CTRL, 0x0028)\nstruct bt_hci_cp_setup_sync_conn {\n    u16_t handle;\n    u32_t tx_bandwidth;\n    u32_t rx_bandwidth;\n    u16_t max_latency;\n    u16_t content_format;\n    u8_t retrans_effort;\n    u16_t pkt_type;\n} __packed;\n\n#define BT_HCI_OP_ACCEPT_SYNC_CONN_REQ BT_OP(BT_OGF_LINK_CTRL, 0x0029)\nstruct bt_hci_cp_accept_sync_conn_req {\n    bt_addr_t bdaddr;\n    u32_t tx_bandwidth;\n    u32_t rx_bandwidth;\n    u16_t max_latency;\n    u16_t content_format;\n    u8_t retrans_effort;\n    u16_t pkt_type;\n} __packed;\n\n#define BT_HCI_OP_REJECT_CONN_REQ BT_OP(BT_OGF_LINK_CTRL, 0x000a)\nstruct bt_hci_cp_reject_conn_req {\n    bt_addr_t bdaddr;\n    u8_t reason;\n} __packed;\n\n#define BT_HCI_OP_LINK_KEY_REPLY BT_OP(BT_OGF_LINK_CTRL, 0x000b)\nstruct bt_hci_cp_link_key_reply {\n    bt_addr_t bdaddr;\n    u8_t link_key[16];\n} __packed;\n\n#define BT_HCI_OP_LINK_KEY_NEG_REPLY BT_OP(BT_OGF_LINK_CTRL, 0x000c)\nstruct bt_hci_cp_link_key_neg_reply {\n    bt_addr_t bdaddr;\n} __packed;\n\n#define BT_HCI_OP_PIN_CODE_REPLY BT_OP(BT_OGF_LINK_CTRL, 0x000d)\nstruct bt_hci_cp_pin_code_reply {\n    bt_addr_t bdaddr;\n    u8_t pin_len;\n    u8_t pin_code[16];\n} __packed;\nstruct bt_hci_rp_pin_code_reply {\n    u8_t status;\n    bt_addr_t bdaddr;\n} __packed;\n\n#define BT_HCI_OP_PIN_CODE_NEG_REPLY BT_OP(BT_OGF_LINK_CTRL, 0x000e)\nstruct bt_hci_cp_pin_code_neg_reply {\n    bt_addr_t bdaddr;\n} __packed;\nstruct bt_hci_rp_pin_code_neg_reply {\n    u8_t status;\n    bt_addr_t bdaddr;\n} __packed;\n\n#define BT_HCI_OP_AUTH_REQUESTED BT_OP(BT_OGF_LINK_CTRL, 0x0011)\nstruct bt_hci_cp_auth_requested {\n    u16_t handle;\n} __packed;\n\n#define BT_HCI_OP_SET_CONN_ENCRYPT BT_OP(BT_OGF_LINK_CTRL, 0x0013)\nstruct bt_hci_cp_set_conn_encrypt {\n    u16_t handle;\n    u8_t encrypt;\n} __packed;\n\n#define BT_HCI_OP_REMOTE_NAME_REQUEST BT_OP(BT_OGF_LINK_CTRL, 0x0019)\nstruct bt_hci_cp_remote_name_request {\n    bt_addr_t bdaddr;\n    u8_t pscan_rep_mode;\n    u8_t reserved;\n    u16_t clock_offset;\n} __packed;\n\n#define BT_HCI_OP_REMOTE_NAME_CANCEL BT_OP(BT_OGF_LINK_CTRL, 0x001a)\nstruct bt_hci_cp_remote_name_cancel {\n    bt_addr_t bdaddr;\n} __packed;\nstruct bt_hci_rp_remote_name_cancel {\n    u8_t status;\n    bt_addr_t bdaddr;\n} __packed;\n\n#define BT_HCI_OP_READ_REMOTE_FEATURES BT_OP(BT_OGF_LINK_CTRL, 0x001b)\nstruct bt_hci_cp_read_remote_features {\n    u16_t handle;\n} __packed;\n\n#define BT_HCI_OP_READ_REMOTE_EXT_FEATURES BT_OP(BT_OGF_LINK_CTRL, 0x001c)\nstruct bt_hci_cp_read_remote_ext_features {\n    u16_t handle;\n    u8_t page;\n} __packed;\n\n#define BT_HCI_OP_READ_REMOTE_VERSION_INFO BT_OP(BT_OGF_LINK_CTRL, 0x001d)\nstruct bt_hci_cp_read_remote_version_info {\n    u16_t handle;\n} __packed;\n\n#define BT_HCI_OP_IO_CAPABILITY_REPLY BT_OP(BT_OGF_LINK_CTRL, 0x002b)\nstruct bt_hci_cp_io_capability_reply {\n    bt_addr_t bdaddr;\n    u8_t capability;\n    u8_t oob_data;\n    u8_t authentication;\n} __packed;\n\n#define BT_HCI_OP_USER_CONFIRM_REPLY     BT_OP(BT_OGF_LINK_CTRL, 0x002c)\n#define BT_HCI_OP_USER_CONFIRM_NEG_REPLY BT_OP(BT_OGF_LINK_CTRL, 0x002d)\nstruct bt_hci_cp_user_confirm_reply {\n    bt_addr_t bdaddr;\n} __packed;\nstruct bt_hci_rp_user_confirm_reply {\n    u8_t status;\n    bt_addr_t bdaddr;\n} __packed;\n\n#define BT_HCI_OP_USER_PASSKEY_REPLY BT_OP(BT_OGF_LINK_CTRL, 0x002e)\nstruct bt_hci_cp_user_passkey_reply {\n    bt_addr_t bdaddr;\n    u32_t passkey;\n} __packed;\n\n#define BT_HCI_OP_USER_PASSKEY_NEG_REPLY BT_OP(BT_OGF_LINK_CTRL, 0x002f)\nstruct bt_hci_cp_user_passkey_neg_reply {\n    bt_addr_t bdaddr;\n} __packed;\n\n#define BT_HCI_OP_IO_CAPABILITY_NEG_REPLY BT_OP(BT_OGF_LINK_CTRL, 0x0034)\nstruct bt_hci_cp_io_capability_neg_reply {\n    bt_addr_t bdaddr;\n    u8_t reason;\n} __packed;\n\n#define BT_HCI_OP_SET_EVENT_MASK BT_OP(BT_OGF_BASEBAND, 0x0001)\nstruct bt_hci_cp_set_event_mask {\n    u8_t events[8];\n} __packed;\n\n#define BT_HCI_OP_RESET BT_OP(BT_OGF_BASEBAND, 0x0003)\n\n#define BT_HCI_OP_WRITE_LOCAL_NAME BT_OP(BT_OGF_BASEBAND, 0x0013)\nstruct bt_hci_write_local_name {\n    u8_t local_name[248];\n} __packed;\n\n#define BT_HCI_OP_WRITE_PAGE_TIMEOUT BT_OP(BT_OGF_BASEBAND, 0x0018)\n\n#define BT_HCI_OP_WRITE_SCAN_ENABLE BT_OP(BT_OGF_BASEBAND, 0x001a)\n#define BT_BREDR_SCAN_DISABLED      0x00\n#define BT_BREDR_SCAN_INQUIRY       0x01\n#define BT_BREDR_SCAN_PAGE          0x02\n\n#define BT_HCI_OP_WRITE_INQUIRY_SCAN_ACTIVITY BT_OP(BT_OGF_BASEBAND, 0x001e)\nstruct bt_hci_cp_write_inquiry_scan_activity {\n    u16_t interval;\n    u16_t window;\n} __packed;\n\n#define BT_HCI_OP_WRITE_CLASS_OF_DEVICE BT_OP(BT_OGF_BASEBAND, 0x0024)\nstruct bt_hci_cp_write_class_of_device {\n    u8_t cod[3];\n} __packed;\n\n#define BT_TX_POWER_LEVEL_CURRENT     0x00\n#define BT_TX_POWER_LEVEL_MAX         0x01\n#define BT_HCI_OP_READ_TX_POWER_LEVEL BT_OP(BT_OGF_BASEBAND, 0x002d)\nstruct bt_hci_cp_read_tx_power_level {\n    u16_t handle;\n    u8_t type;\n} __packed;\n\nstruct bt_hci_rp_read_tx_power_level {\n    u8_t status;\n    u16_t handle;\n    s8_t tx_power_level;\n} __packed;\n\n#define BT_HCI_CTL_TO_HOST_FLOW_DISABLE 0x00\n#define BT_HCI_CTL_TO_HOST_FLOW_ENABLE  0x01\n#define BT_HCI_OP_SET_CTL_TO_HOST_FLOW  BT_OP(BT_OGF_BASEBAND, 0x0031)\nstruct bt_hci_cp_set_ctl_to_host_flow {\n    u8_t flow_enable;\n} __packed;\n\n#define BT_HCI_OP_HOST_BUFFER_SIZE BT_OP(BT_OGF_BASEBAND, 0x0033)\nstruct bt_hci_cp_host_buffer_size {\n    u16_t acl_mtu;\n    u8_t sco_mtu;\n    u16_t acl_pkts;\n    u16_t sco_pkts;\n} __packed;\n\nstruct bt_hci_handle_count {\n    u16_t handle;\n    u16_t count;\n} __packed;\n\n#define BT_HCI_OP_HOST_NUM_COMPLETED_PACKETS BT_OP(BT_OGF_BASEBAND, 0x0035)\nstruct bt_hci_cp_host_num_completed_packets {\n    u8_t num_handles;\n    struct bt_hci_handle_count h[0];\n} __packed;\n\n#define BT_HCI_OP_WRITE_INQUIRY_SCAN_TYPE BT_OP(BT_OGF_BASEBAND, 0x0043)\nstruct bt_hci_cp_write_inquiry_scan_type {\n    u8_t type;\n} __packed;\n\n#define BT_HCI_OP_WRITE_INQUIRY_MODE BT_OP(BT_OGF_BASEBAND, 0x0045)\nstruct bt_hci_cp_write_inquiry_mode {\n    u8_t mode;\n} __packed;\n\n#define BT_HCI_OP_WRITE_PAGE_SCAN_TYPE BT_OP(BT_OGF_BASEBAND, 0x0047)\nstruct bt_hci_cp_write_page_scan_type {\n    u8_t type;\n} __packed;\n\n#define BT_HCI_OP_WRITE_EXT_INQUIRY_RESP BT_OP(BT_OGF_BASEBAND, 0x0052)\nstruct bt_hci_cp_write_ext_inquiry_resp {\n    u8_t rec;\n    u8_t eir[240];\n} __packed;\n\n#define BT_HCI_OP_WRITE_SSP_MODE BT_OP(BT_OGF_BASEBAND, 0x0056)\nstruct bt_hci_cp_write_ssp_mode {\n    u8_t mode;\n} __packed;\n\n#define BT_HCI_OP_SET_EVENT_MASK_PAGE_2 BT_OP(BT_OGF_BASEBAND, 0x0063)\nstruct bt_hci_cp_set_event_mask_page_2 {\n    u8_t events_page_2[8];\n} __packed;\n\n#define BT_HCI_OP_LE_WRITE_LE_HOST_SUPP BT_OP(BT_OGF_BASEBAND, 0x006d)\nstruct bt_hci_cp_write_le_host_supp {\n    u8_t le;\n    u8_t simul;\n} __packed;\n\n#define BT_HCI_OP_WRITE_SC_HOST_SUPP BT_OP(BT_OGF_BASEBAND, 0x007a)\nstruct bt_hci_cp_write_sc_host_supp {\n    u8_t sc_support;\n} __packed;\n\n#define BT_HCI_OP_READ_AUTH_PAYLOAD_TIMEOUT BT_OP(BT_OGF_BASEBAND, 0x007b)\nstruct bt_hci_cp_read_auth_payload_timeout {\n    u16_t handle;\n} __packed;\n\nstruct bt_hci_rp_read_auth_payload_timeout {\n    u8_t status;\n    u16_t handle;\n    u16_t auth_payload_timeout;\n} __packed;\n\n#define BT_HCI_OP_WRITE_AUTH_PAYLOAD_TIMEOUT BT_OP(BT_OGF_BASEBAND, 0x007c)\nstruct bt_hci_cp_write_auth_payload_timeout {\n    u16_t handle;\n    u16_t auth_payload_timeout;\n} __packed;\n\nstruct bt_hci_rp_write_auth_payload_timeout {\n    u8_t status;\n    u16_t handle;\n} __packed;\n\n#define BT_HCI_OP_CONFIGURE_DATA_PATH BT_OP(BT_OGF_BASEBAND, 0x0083)\nstruct bt_hci_cp_configure_data_path {\n    uint8_t data_path_dir;\n    uint8_t data_path_id;\n    uint8_t vs_config_len;\n    uint8_t vs_config[0];\n} __packed;\n\nstruct bt_hci_rp_configure_data_path {\n    uint8_t status;\n} __packed;\n\n/* HCI version from Assigned Numbers */\n#define BT_HCI_VERSION_1_0B 0\n#define BT_HCI_VERSION_1_1  1\n#define BT_HCI_VERSION_1_2  2\n#define BT_HCI_VERSION_2_0  3\n#define BT_HCI_VERSION_2_1  4\n#define BT_HCI_VERSION_3_0  5\n#define BT_HCI_VERSION_4_0  6\n#define BT_HCI_VERSION_4_1  7\n#define BT_HCI_VERSION_4_2  8\n#define BT_HCI_VERSION_5_0  9\n#define BT_HCI_VERSION_5_1  10\n#define BT_HCI_VERSION_5_2  11\n\n#define BT_HCI_OP_READ_LOCAL_VERSION_INFO BT_OP(BT_OGF_INFO, 0x0001)\nstruct bt_hci_rp_read_local_version_info {\n    u8_t status;\n    u8_t hci_version;\n    u16_t hci_revision;\n    u8_t lmp_version;\n    u16_t manufacturer;\n    u16_t lmp_subversion;\n} __packed;\n\n#define BT_HCI_OP_READ_SUPPORTED_COMMANDS BT_OP(BT_OGF_INFO, 0x0002)\nstruct bt_hci_rp_read_supported_commands {\n    u8_t status;\n    u8_t commands[64];\n} __packed;\n\n#define BT_HCI_OP_READ_LOCAL_EXT_FEATURES BT_OP(BT_OGF_INFO, 0x0004)\nstruct bt_hci_cp_read_local_ext_features {\n    u8_t page;\n};\nstruct bt_hci_rp_read_local_ext_features {\n    u8_t status;\n    u8_t page;\n    u8_t max_page;\n    u8_t ext_features[8];\n} __packed;\n\n#define BT_HCI_OP_READ_LOCAL_FEATURES BT_OP(BT_OGF_INFO, 0x0003)\nstruct bt_hci_rp_read_local_features {\n    u8_t status;\n    u8_t features[8];\n} __packed;\n\n#define BT_HCI_OP_READ_BUFFER_SIZE BT_OP(BT_OGF_INFO, 0x0005)\nstruct bt_hci_rp_read_buffer_size {\n    u8_t status;\n    u16_t acl_max_len;\n    u8_t sco_max_len;\n    u16_t acl_max_num;\n    u16_t sco_max_num;\n} __packed;\n\n#define BT_HCI_OP_READ_BD_ADDR BT_OP(BT_OGF_INFO, 0x0009)\nstruct bt_hci_rp_read_bd_addr {\n    u8_t status;\n    bt_addr_t bdaddr;\n} __packed;\n\n/* logic transport type bits as returned when reading supported codecs */\n#define BT_HCI_CODEC_TRANSPORT_MASK_BREDR_ACL BIT(0)\n#define BT_HCI_CODEC_TRANSPORT_MASK_BREDR_SCO BIT(1)\n#define BT_HCI_CODEC_TRANSPORT_MASK_LE_CIS    BIT(2)\n#define BT_HCI_CODEC_TRANSPORT_MASK_LE_BIS    BIT(3)\n\n/* logic transport types for reading codec capabilities and controller delays */\n#define BT_HCI_LOGICAL_TRANSPORT_TYPE_BREDR_ACL 0x00\n#define BT_HCI_LOGICAL_TRANSPORT_TYPE_BREDR_SCO 0x01\n#define BT_HCI_LOGICAL_TRANSPORT_TYPE_LE_CIS    0x02\n#define BT_HCI_LOGICAL_TRANSPORT_TYPE_LE_BIS    0x03\n\n/* audio datapath directions */\n#define BT_HCI_DATAPATH_DIR_HOST_TO_CTLR 0x00\n#define BT_HCI_DATAPATH_DIR_CTLR_TO_HOST 0x01\n\n/* coding format assigned numbers, used for codec IDs */\n#define BT_HCI_CODING_FORMAT_ULAW_LOG    0x00\n#define BT_HCI_CODING_FORMAT_ALAW_LOG    0x01\n#define BT_HCI_CODING_FORMAT_CVSD        0x02\n#define BT_HCI_CODING_FORMAT_TRANSPARENT 0x03\n#define BT_HCI_CODING_FORMAT_LINEAR_PCM  0x04\n#define BT_HCI_CODING_FORMAT_MSBC        0x05\n#define BT_HCI_CODING_FORMAT_VS          0xFF\n\n#define BT_HCI_OP_READ_CODECS BT_OP(BT_OGF_INFO, 0x000b)\nstruct bt_hci_std_codec_info {\n    uint8_t codec_id;\n} __packed;\nstruct bt_hci_std_codecs {\n    uint8_t num_codecs;\n    struct bt_hci_std_codec_info codec_info[0];\n} __packed;\nstruct bt_hci_vs_codec_info {\n    uint16_t company_id;\n    uint16_t codec_id;\n} __packed;\nstruct bt_hci_vs_codecs {\n    uint8_t num_codecs;\n    struct bt_hci_vs_codec_info codec_info[0];\n} __packed;\nstruct bt_hci_rp_read_codecs {\n    uint8_t status;\n    /* other fields filled in dynamically */\n    uint8_t codecs[0];\n} __packed;\n\n#define BT_HCI_OP_READ_CODECS_V2 BT_OP(BT_OGF_INFO, 0x000d)\nstruct bt_hci_std_codec_info_v2 {\n    uint8_t codec_id;\n    uint8_t transports; /* bitmap */\n} __packed;\nstruct bt_hci_std_codecs_v2 {\n    uint8_t num_codecs;\n    struct bt_hci_std_codec_info_v2 codec_info[0];\n} __packed;\nstruct bt_hci_vs_codec_info_v2 {\n    uint16_t company_id;\n    uint16_t codec_id;\n    uint8_t transports; /* bitmap */\n} __packed;\nstruct bt_hci_vs_codecs_v2 {\n    uint8_t num_codecs;\n    struct bt_hci_vs_codec_info_v2 codec_info[0];\n} __packed;\nstruct bt_hci_rp_read_codecs_v2 {\n    uint8_t status;\n    /* other fields filled in dynamically */\n    uint8_t codecs[0];\n} __packed;\n\nstruct bt_hci_cp_codec_id {\n    uint8_t coding_format;\n    uint16_t company_id;\n    uint16_t vs_codec_id;\n} __packed;\n\n#define BT_HCI_OP_READ_CODEC_CAPABILITIES BT_OP(BT_OGF_INFO, 0x000e)\nstruct bt_hci_cp_read_codec_capabilities {\n    struct bt_hci_cp_codec_id codec_id;\n    uint8_t transport;\n    uint8_t direction;\n} __packed;\nstruct bt_hci_codec_capability_info {\n    uint8_t length;\n    uint8_t data[0];\n} __packed;\nstruct bt_hci_rp_read_codec_capabilities {\n    uint8_t status;\n    uint8_t num_capabilities;\n    /* other fields filled in dynamically */\n    uint8_t capabilities[0];\n} __packed;\n\n#define BT_HCI_OP_READ_CTLR_DELAY BT_OP(BT_OGF_INFO, 0x000f)\nstruct bt_hci_cp_read_ctlr_delay {\n    struct bt_hci_cp_codec_id codec_id;\n    uint8_t transport;\n    uint8_t direction;\n    uint8_t codec_config_len;\n    uint8_t codec_config[0];\n} __packed;\nstruct bt_hci_rp_read_ctlr_delay {\n    uint8_t status;\n    uint8_t min_ctlr_delay[3];\n    uint8_t max_ctlr_delay[3];\n} __packed;\n\n#define BT_HCI_OP_READ_RSSI BT_OP(BT_OGF_STATUS, 0x0005)\nstruct bt_hci_cp_read_rssi {\n    u16_t handle;\n} __packed;\nstruct bt_hci_rp_read_rssi {\n    u8_t status;\n    u16_t handle;\n    s8_t rssi;\n} __packed;\n\n#define BT_HCI_ENCRYPTION_KEY_SIZE_MIN 7\n#define BT_HCI_ENCRYPTION_KEY_SIZE_MAX 16\n\n#define BT_HCI_OP_READ_ENCRYPTION_KEY_SIZE BT_OP(BT_OGF_STATUS, 0x0008)\nstruct bt_hci_cp_read_encryption_key_size {\n    u16_t handle;\n} __packed;\nstruct bt_hci_rp_read_encryption_key_size {\n    u8_t status;\n    u16_t handle;\n    u8_t key_size;\n} __packed;\n\n/* BLE */\n\n#define BT_HCI_OP_LE_SET_EVENT_MASK BT_OP(BT_OGF_LE, 0x0001)\nstruct bt_hci_cp_le_set_event_mask {\n    u8_t events[8];\n} __packed;\n\n#define BT_HCI_OP_LE_READ_BUFFER_SIZE BT_OP(BT_OGF_LE, 0x0002)\nstruct bt_hci_rp_le_read_buffer_size {\n    u8_t status;\n    u16_t le_max_len;\n    u8_t le_max_num;\n} __packed;\n\n#define BT_HCI_OP_LE_READ_LOCAL_FEATURES BT_OP(BT_OGF_LE, 0x0003)\nstruct bt_hci_rp_le_read_local_features {\n    u8_t status;\n    u8_t features[8];\n} __packed;\n\n#define BT_HCI_OP_LE_SET_RANDOM_ADDRESS BT_OP(BT_OGF_LE, 0x0005)\nstruct bt_hci_cp_le_set_random_address {\n    bt_addr_t bdaddr;\n} __packed;\n\n/* Advertising types */\n#define BT_LE_ADV_IND                 0x00\n#define BT_LE_ADV_DIRECT_IND          0x01\n#define BT_LE_ADV_SCAN_IND            0x02\n#define BT_LE_ADV_NONCONN_IND         0x03\n#define BT_LE_ADV_DIRECT_IND_LOW_DUTY 0x04\n/* Needed in advertising reports when getting info about */\n#define BT_LE_ADV_SCAN_RSP 0x04\n\n#define BT_LE_ADV_FP_NO_WHITELIST       0x00\n#define BT_LE_ADV_FP_WHITELIST_SCAN_REQ 0x01\n#define BT_LE_ADV_FP_WHITELIST_CONN_IND 0x02\n#define BT_LE_ADV_FP_WHITELIST_BOTH     0x03\n\n#define BT_HCI_OP_LE_SET_ADV_PARAM BT_OP(BT_OGF_LE, 0x0006)\nstruct bt_hci_cp_le_set_adv_param {\n    u16_t min_interval;\n    u16_t max_interval;\n    u8_t type;\n    u8_t own_addr_type;\n    bt_addr_le_t direct_addr;\n    u8_t channel_map;\n    u8_t filter_policy;\n} __packed;\n\n#define BT_HCI_OP_LE_READ_ADV_CHAN_TX_POWER BT_OP(BT_OGF_LE, 0x0007)\nstruct bt_hci_rp_le_read_chan_tx_power {\n    u8_t status;\n    s8_t tx_power_level;\n} __packed;\n\n#define BT_HCI_OP_LE_SET_ADV_DATA BT_OP(BT_OGF_LE, 0x0008)\nstruct bt_hci_cp_le_set_adv_data {\n    u8_t len;\n    u8_t data[31];\n} __packed;\n\n#define BT_HCI_OP_LE_SET_SCAN_RSP_DATA BT_OP(BT_OGF_LE, 0x0009)\nstruct bt_hci_cp_le_set_scan_rsp_data {\n    u8_t len;\n    u8_t data[31];\n} __packed;\n\n#define BT_HCI_LE_ADV_DISABLE 0x00\n#define BT_HCI_LE_ADV_ENABLE  0x01\n\n#define BT_HCI_OP_LE_SET_ADV_ENABLE BT_OP(BT_OGF_LE, 0x000a)\nstruct bt_hci_cp_le_set_adv_enable {\n    u8_t enable;\n} __packed;\n\n/* Scan types */\n#define BT_HCI_OP_LE_SET_SCAN_PARAM BT_OP(BT_OGF_LE, 0x000b)\n#define BT_HCI_LE_SCAN_PASSIVE      0x00\n#define BT_HCI_LE_SCAN_ACTIVE       0x01\n\n#define BT_HCI_LE_SCAN_FP_NO_WHITELIST  0x00\n#define BT_HCI_LE_SCAN_FP_USE_WHITELIST 0x01\n\nstruct bt_hci_cp_le_set_scan_param {\n    u8_t scan_type;\n    u16_t interval;\n    u16_t window;\n    u8_t addr_type;\n    u8_t filter_policy;\n} __packed;\n\n#define BT_HCI_OP_LE_SET_SCAN_ENABLE BT_OP(BT_OGF_LE, 0x000c)\n\n#define BT_HCI_LE_SCAN_DISABLE 0x00\n#define BT_HCI_LE_SCAN_ENABLE  0x01\n\n#define BT_HCI_LE_SCAN_FILTER_DUP_DISABLE 0x00\n#define BT_HCI_LE_SCAN_FILTER_DUP_ENABLE  0x01\n\nstruct bt_hci_cp_le_set_scan_enable {\n    u8_t enable;\n    u8_t filter_dup;\n} __packed;\n\n#define BT_HCI_OP_LE_CREATE_CONN BT_OP(BT_OGF_LE, 0x000d)\n\n#define BT_HCI_LE_CREATE_CONN_FP_DIRECT    0x00\n#define BT_HCI_LE_CREATE_CONN_FP_WHITELIST 0x01\n\nstruct bt_hci_cp_le_create_conn {\n    u16_t scan_interval;\n    u16_t scan_window;\n    u8_t filter_policy;\n    bt_addr_le_t peer_addr;\n    u8_t own_addr_type;\n    u16_t conn_interval_min;\n    u16_t conn_interval_max;\n    u16_t conn_latency;\n    u16_t supervision_timeout;\n    u16_t min_ce_len;\n    u16_t max_ce_len;\n} __packed;\n\n#define BT_HCI_OP_LE_CREATE_CONN_CANCEL BT_OP(BT_OGF_LE, 0x000e)\n\n#define BT_HCI_OP_LE_READ_WL_SIZE BT_OP(BT_OGF_LE, 0x000f)\nstruct bt_hci_rp_le_read_wl_size {\n    u8_t status;\n    u8_t wl_size;\n} __packed;\n\n#define BT_HCI_OP_LE_CLEAR_WL BT_OP(BT_OGF_LE, 0x0010)\n\n#define BT_HCI_OP_LE_ADD_DEV_TO_WL BT_OP(BT_OGF_LE, 0x0011)\nstruct bt_hci_cp_le_add_dev_to_wl {\n    bt_addr_le_t addr;\n} __packed;\n\n#define BT_HCI_OP_LE_REM_DEV_FROM_WL BT_OP(BT_OGF_LE, 0x0012)\nstruct bt_hci_cp_le_rem_dev_from_wl {\n    bt_addr_le_t addr;\n} __packed;\n\n#define BT_HCI_OP_LE_CONN_UPDATE BT_OP(BT_OGF_LE, 0x0013)\nstruct hci_cp_le_conn_update {\n    u16_t handle;\n    u16_t conn_interval_min;\n    u16_t conn_interval_max;\n    u16_t conn_latency;\n    u16_t supervision_timeout;\n    u16_t min_ce_len;\n    u16_t max_ce_len;\n} __packed;\n\n#define BT_HCI_OP_LE_SET_HOST_CHAN_CLASSIF BT_OP(BT_OGF_LE, 0x0014)\nstruct bt_hci_cp_le_set_host_chan_classif {\n    u8_t ch_map[5];\n} __packed;\n\n#define BT_HCI_OP_LE_READ_CHAN_MAP BT_OP(BT_OGF_LE, 0x0015)\nstruct bt_hci_cp_le_read_chan_map {\n    u16_t handle;\n} __packed;\nstruct bt_hci_rp_le_read_chan_map {\n    u8_t status;\n    u16_t handle;\n    u8_t ch_map[5];\n} __packed;\n\n#define BT_HCI_OP_LE_READ_REMOTE_FEATURES BT_OP(BT_OGF_LE, 0x0016)\nstruct bt_hci_cp_le_read_remote_features {\n    u16_t handle;\n} __packed;\n\n#define BT_HCI_OP_LE_ENCRYPT BT_OP(BT_OGF_LE, 0x0017)\nstruct bt_hci_cp_le_encrypt {\n    u8_t key[16];\n    u8_t plaintext[16];\n} __packed;\nstruct bt_hci_rp_le_encrypt {\n    u8_t status;\n    u8_t enc_data[16];\n} __packed;\n\n#define BT_HCI_OP_LE_RAND BT_OP(BT_OGF_LE, 0x0018)\nstruct bt_hci_rp_le_rand {\n    u8_t status;\n    u8_t rand[8];\n} __packed;\n\n#define BT_HCI_OP_LE_START_ENCRYPTION BT_OP(BT_OGF_LE, 0x0019)\nstruct bt_hci_cp_le_start_encryption {\n    u16_t handle;\n    u64_t rand;\n    u16_t ediv;\n    u8_t ltk[16];\n} __packed;\n\n#define BT_HCI_OP_LE_LTK_REQ_REPLY BT_OP(BT_OGF_LE, 0x001a)\nstruct bt_hci_cp_le_ltk_req_reply {\n    u16_t handle;\n    u8_t ltk[16];\n} __packed;\nstruct bt_hci_rp_le_ltk_req_reply {\n    u8_t status;\n    u16_t handle;\n} __packed;\n\n#define BT_HCI_OP_LE_LTK_REQ_NEG_REPLY BT_OP(BT_OGF_LE, 0x001b)\nstruct bt_hci_cp_le_ltk_req_neg_reply {\n    u16_t handle;\n} __packed;\nstruct bt_hci_rp_le_ltk_req_neg_reply {\n    u8_t status;\n    u16_t handle;\n} __packed;\n\n#define BT_HCI_OP_LE_READ_SUPP_STATES BT_OP(BT_OGF_LE, 0x001c)\nstruct bt_hci_rp_le_read_supp_states {\n    u8_t status;\n    u8_t le_states[8];\n} __packed;\n\n#define BT_HCI_OP_LE_RX_TEST BT_OP(BT_OGF_LE, 0x001d)\nstruct bt_hci_cp_le_rx_test {\n    u8_t rx_ch;\n} __packed;\n\n#define BT_HCI_OP_LE_TX_TEST BT_OP(BT_OGF_LE, 0x001e)\nstruct bt_hci_cp_le_tx_test {\n    u8_t tx_ch;\n    u8_t test_data_len;\n    u8_t pkt_payload;\n} __packed;\n\n#define BT_HCI_OP_LE_TEST_END BT_OP(BT_OGF_LE, 0x001f)\nstruct bt_hci_rp_le_test_end {\n    u8_t status;\n    u16_t rx_pkt_count;\n} __packed;\n\n#define BT_HCI_OP_LE_CONN_PARAM_REQ_REPLY BT_OP(BT_OGF_LE, 0x0020)\nstruct bt_hci_cp_le_conn_param_req_reply {\n    u16_t handle;\n    u16_t interval_min;\n    u16_t interval_max;\n    u16_t latency;\n    u16_t timeout;\n    u16_t min_ce_len;\n    u16_t max_ce_len;\n} __packed;\nstruct bt_hci_rp_le_conn_param_req_reply {\n    u8_t status;\n    u16_t handle;\n} __packed;\n\n#define BT_HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY BT_OP(BT_OGF_LE, 0x0021)\nstruct bt_hci_cp_le_conn_param_req_neg_reply {\n    u16_t handle;\n    u8_t reason;\n} __packed;\nstruct bt_hci_rp_le_conn_param_req_neg_reply {\n    u8_t status;\n    u16_t handle;\n} __packed;\n\n#define BT_HCI_OP_LE_SET_DATA_LEN BT_OP(BT_OGF_LE, 0x0022)\nstruct bt_hci_cp_le_set_data_len {\n    u16_t handle;\n    u16_t tx_octets;\n    u16_t tx_time;\n} __packed;\nstruct bt_hci_rp_le_set_data_len {\n    u8_t status;\n    u16_t handle;\n} __packed;\n\n#define BT_HCI_OP_LE_READ_DEFAULT_DATA_LEN BT_OP(BT_OGF_LE, 0x0023)\nstruct bt_hci_rp_le_read_default_data_len {\n    u8_t status;\n    u16_t max_tx_octets;\n    u16_t max_tx_time;\n} __packed;\n\n#define BT_HCI_OP_LE_WRITE_DEFAULT_DATA_LEN BT_OP(BT_OGF_LE, 0x0024)\nstruct bt_hci_cp_le_write_default_data_len {\n    u16_t max_tx_octets;\n    u16_t max_tx_time;\n} __packed;\n\n#define BT_HCI_OP_LE_P256_PUBLIC_KEY BT_OP(BT_OGF_LE, 0x0025)\n\n#define BT_HCI_OP_LE_GENERATE_DHKEY BT_OP(BT_OGF_LE, 0x0026)\nstruct bt_hci_cp_le_generate_dhkey {\n    u8_t key[64];\n} __packed;\n\n#define BT_HCI_OP_LE_ADD_DEV_TO_RL BT_OP(BT_OGF_LE, 0x0027)\nstruct bt_hci_cp_le_add_dev_to_rl {\n    bt_addr_le_t peer_id_addr;\n    u8_t peer_irk[16];\n    u8_t local_irk[16];\n} __packed;\n\n#define BT_HCI_OP_LE_REM_DEV_FROM_RL BT_OP(BT_OGF_LE, 0x0028)\nstruct bt_hci_cp_le_rem_dev_from_rl {\n    bt_addr_le_t peer_id_addr;\n} __packed;\n\n#define BT_HCI_OP_LE_CLEAR_RL BT_OP(BT_OGF_LE, 0x0029)\n\n#define BT_HCI_OP_LE_READ_RL_SIZE BT_OP(BT_OGF_LE, 0x002a)\nstruct bt_hci_rp_le_read_rl_size {\n    u8_t status;\n    u8_t rl_size;\n} __packed;\n\n#define BT_HCI_OP_LE_READ_PEER_RPA BT_OP(BT_OGF_LE, 0x002b)\nstruct bt_hci_cp_le_read_peer_rpa {\n    bt_addr_le_t peer_id_addr;\n} __packed;\nstruct bt_hci_rp_le_read_peer_rpa {\n    u8_t status;\n    bt_addr_t peer_rpa;\n} __packed;\n\n#define BT_HCI_OP_LE_READ_LOCAL_RPA BT_OP(BT_OGF_LE, 0x002c)\nstruct bt_hci_cp_le_read_local_rpa {\n    bt_addr_le_t peer_id_addr;\n} __packed;\nstruct bt_hci_rp_le_read_local_rpa {\n    u8_t status;\n    bt_addr_t local_rpa;\n} __packed;\n\n#define BT_HCI_ADDR_RES_DISABLE 0x00\n#define BT_HCI_ADDR_RES_ENABLE  0x01\n\n#define BT_HCI_OP_LE_SET_ADDR_RES_ENABLE BT_OP(BT_OGF_LE, 0x002d)\nstruct bt_hci_cp_le_set_addr_res_enable {\n    u8_t enable;\n} __packed;\n\n#define BT_HCI_OP_LE_SET_RPA_TIMEOUT BT_OP(BT_OGF_LE, 0x002e)\nstruct bt_hci_cp_le_set_rpa_timeout {\n    u16_t rpa_timeout;\n} __packed;\n\n#define BT_HCI_OP_LE_READ_MAX_DATA_LEN BT_OP(BT_OGF_LE, 0x002f)\nstruct bt_hci_rp_le_read_max_data_len {\n    u8_t status;\n    u16_t max_tx_octets;\n    u16_t max_tx_time;\n    u16_t max_rx_octets;\n    u16_t max_rx_time;\n} __packed;\n\n#define BT_HCI_LE_PHY_1M    0x01\n#define BT_HCI_LE_PHY_2M    0x02\n#define BT_HCI_LE_PHY_CODED 0x03\n\n#define BT_HCI_OP_LE_READ_PHY BT_OP(BT_OGF_LE, 0x0030)\nstruct bt_hci_cp_le_read_phy {\n    u16_t handle;\n} __packed;\nstruct bt_hci_rp_le_read_phy {\n    u8_t status;\n    u16_t handle;\n    u8_t tx_phy;\n    u8_t rx_phy;\n} __packed;\n\n#define BT_HCI_LE_PHY_TX_ANY BIT(0)\n#define BT_HCI_LE_PHY_RX_ANY BIT(1)\n\n#define BT_HCI_LE_PHY_PREFER_1M    BIT(0)\n#define BT_HCI_LE_PHY_PREFER_2M    BIT(1)\n#define BT_HCI_LE_PHY_PREFER_CODED BIT(2)\n\n#define BT_HCI_OP_LE_SET_DEFAULT_PHY BT_OP(BT_OGF_LE, 0x0031)\nstruct bt_hci_cp_le_set_default_phy {\n    u8_t all_phys;\n    u8_t tx_phys;\n    u8_t rx_phys;\n} __packed;\n\n#define BT_HCI_LE_PHY_CODED_ANY 0x00\n#define BT_HCI_LE_PHY_CODED_S2  0x01\n#define BT_HCI_LE_PHY_CODED_S8  0x02\n\n#define BT_HCI_OP_LE_SET_PHY BT_OP(BT_OGF_LE, 0x0032)\nstruct bt_hci_cp_le_set_phy {\n    u16_t handle;\n    u8_t all_phys;\n    u8_t tx_phys;\n    u8_t rx_phys;\n    u16_t phy_opts;\n} __packed;\n\n#define BT_HCI_LE_MOD_INDEX_STANDARD 0x00\n#define BT_HCI_LE_MOD_INDEX_STABLE   0x01\n\n#define BT_HCI_OP_LE_ENH_RX_TEST BT_OP(BT_OGF_LE, 0x0033)\nstruct bt_hci_cp_le_enh_rx_test {\n    u8_t rx_ch;\n    u8_t phy;\n    u8_t mod_index;\n} __packed;\n\n/* Extends BT_HCI_LE_PHY */\n#define BT_HCI_LE_TX_PHY_CODED_S8 0x03\n#define BT_HCI_LE_TX_PHY_CODED_S2 0x04\n\n#define BT_HCI_OP_LE_ENH_TX_TEST BT_OP(BT_OGF_LE, 0x0034)\nstruct bt_hci_cp_le_enh_tx_test {\n    u8_t tx_ch;\n    u8_t test_data_len;\n    u8_t pkt_payload;\n    u8_t phy;\n} __packed;\n\n#define BT_HCI_OP_LE_SET_ADV_SET_RANDOM_ADDR BT_OP(BT_OGF_LE, 0x0035)\nstruct bt_hci_cp_le_set_adv_set_random_addr {\n    u8_t handle;\n    bt_addr_t bdaddr;\n} __packed;\n\n#define BT_HCI_LE_ADV_PROP_CONN       BIT(0)\n#define BT_HCI_LE_ADV_PROP_SCAN       BIT(1)\n#define BT_HCI_LE_ADV_PROP_DIRECT     BIT(2)\n#define BT_HCI_LE_ADV_PROP_HI_DC_CONN BIT(3)\n#define BT_HCI_LE_ADV_PROP_LEGACY     BIT(4)\n#define BT_HCI_LE_ADV_PROP_ANON       BIT(5)\n#define BT_HCI_LE_ADV_PROP_TX_POWER   BIT(6)\n\n#define BT_HCI_LE_ADV_SCAN_REQ_ENABLE  1\n#define BT_HCI_LE_ADV_SCAN_REQ_DISABLE 0\n\n#define BT_HCI_LE_ADV_TX_POWER_NO_PREF 0x7F\n\n#define BT_HCI_LE_ADV_HANDLE_MAX 0xEF\n\n#define BT_HCI_OP_LE_SET_EXT_ADV_PARAM BT_OP(BT_OGF_LE, 0x0036)\nstruct bt_hci_cp_le_set_ext_adv_param {\n    u8_t handle;\n    u16_t props;\n    u8_t prim_min_interval[3];\n    u8_t prim_max_interval[3];\n    u8_t prim_channel_map;\n    u8_t own_addr_type;\n    bt_addr_le_t peer_addr;\n    u8_t filter_policy;\n    s8_t tx_power;\n    u8_t prim_adv_phy;\n    u8_t sec_adv_max_skip;\n    u8_t sec_adv_phy;\n    u8_t sid;\n    u8_t scan_req_notify_enable;\n} __packed;\nstruct bt_hci_rp_le_set_ext_adv_param {\n    u8_t status;\n    s8_t tx_power;\n} __packed;\n\n#define BT_HCI_LE_EXT_ADV_OP_INTERM_FRAG    0x00\n#define BT_HCI_LE_EXT_ADV_OP_FIRST_FRAG     0x01\n#define BT_HCI_LE_EXT_ADV_OP_LAST_FRAG      0x02\n#define BT_HCI_LE_EXT_ADV_OP_COMPLETE_DATA  0x03\n#define BT_HCI_LE_EXT_ADV_OP_UNCHANGED_DATA 0x04\n\n#define BT_HCI_LE_EXT_ADV_FRAG_ENABLED  0x00\n#define BT_HCI_LE_EXT_ADV_FRAG_DISABLED 0x01\n\n#define BT_HCI_LE_EXT_ADV_FRAG_MAX_LEN 251\n\n#define BT_HCI_OP_LE_SET_EXT_ADV_DATA BT_OP(BT_OGF_LE, 0x0037)\nstruct bt_hci_cp_le_set_ext_adv_data {\n    u8_t handle;\n    u8_t op;\n    u8_t frag_pref;\n    u8_t len;\n    u8_t data[251];\n} __packed;\n\n#define BT_HCI_OP_LE_SET_EXT_SCAN_RSP_DATA BT_OP(BT_OGF_LE, 0x0038)\nstruct bt_hci_cp_le_set_ext_scan_rsp_data {\n    u8_t handle;\n    u8_t op;\n    u8_t frag_pref;\n    u8_t len;\n    u8_t data[251];\n} __packed;\n\n#define BT_HCI_OP_LE_SET_EXT_ADV_ENABLE BT_OP(BT_OGF_LE, 0x0039)\nstruct bt_hci_ext_adv_set {\n    u8_t handle;\n    u16_t duration;\n    u8_t max_ext_adv_evts;\n} __packed;\n\nstruct bt_hci_cp_le_set_ext_adv_enable {\n    u8_t enable;\n    u8_t set_num;\n    struct bt_hci_ext_adv_set s[0];\n} __packed;\n\n#define BT_HCI_OP_LE_READ_MAX_ADV_DATA_LEN BT_OP(BT_OGF_LE, 0x003a)\nstruct bt_hci_rp_le_read_max_adv_data_len {\n    u8_t status;\n    u16_t max_adv_data_len;\n} __packed;\n\n#define BT_HCI_OP_LE_READ_NUM_ADV_SETS BT_OP(BT_OGF_LE, 0x003b)\nstruct bt_hci_rp_le_read_num_adv_sets {\n    u8_t status;\n    u8_t num_sets;\n} __packed;\n\n#define BT_HCI_OP_LE_REMOVE_ADV_SET BT_OP(BT_OGF_LE, 0x003c)\nstruct bt_hci_cp_le_remove_adv_set {\n    u8_t handle;\n} __packed;\n\n#define BT_HCI_OP_CLEAR_ADV_SETS BT_OP(BT_OGF_LE, 0x003d)\n\n#define BT_HCI_OP_LE_SET_PER_ADV_PARAM BT_OP(BT_OGF_LE, 0x003e)\nstruct bt_hci_cp_le_set_per_adv_param {\n    u8_t handle;\n    u16_t min_interval;\n    u16_t max_interval;\n    u16_t props;\n} __packed;\n\n#define BT_HCI_LE_PER_ADV_OP_INTERM_FRAG   0x00\n#define BT_HCI_LE_PER_ADV_OP_FIRST_FRAG    0x01\n#define BT_HCI_LE_PER_ADV_OP_LAST_FRAG     0x02\n#define BT_HCI_LE_PER_ADV_OP_COMPLETE_DATA 0x03\n\n#define BT_HCI_LE_PER_ADV_FRAG_MAX_LEN 252\n\n#define BT_HCI_OP_LE_SET_PER_ADV_DATA BT_OP(BT_OGF_LE, 0x003f)\nstruct bt_hci_cp_le_set_per_adv_data {\n    u8_t handle;\n    u8_t op;\n    u8_t len;\n    u8_t data[251];\n} __packed;\n\n#define BT_HCI_OP_LE_SET_PER_ADV_ENABLE BT_OP(BT_OGF_LE, 0x0040)\nstruct bt_hci_cp_le_set_per_adv_enable {\n    u8_t enable;\n    u8_t handle;\n} __packed;\n\n#define BT_HCI_OP_LE_SET_EXT_SCAN_PARAM BT_OP(BT_OGF_LE, 0x0041)\nstruct bt_hci_ext_scan_phy {\n    u8_t type;\n    u16_t interval;\n    u16_t window;\n} __packed;\n\n#define BT_HCI_LE_EXT_SCAN_PHY_1M    BIT(0)\n#define BT_HCI_LE_EXT_SCAN_PHY_2M    BIT(1)\n#define BT_HCI_LE_EXT_SCAN_PHY_CODED BIT(2)\n\nstruct bt_hci_cp_le_set_ext_scan_param {\n    u8_t own_addr_type;\n    u8_t filter_policy;\n    u8_t phys;\n    struct bt_hci_ext_scan_phy p[0];\n} __packed;\n\n/* Extends BT_HCI_LE_SCAN_FILTER_DUP */\n#define BT_HCI_LE_EXT_SCAN_FILTER_DUP_ENABLE_RESET 0x02\n\n#define BT_HCI_OP_LE_SET_EXT_SCAN_ENABLE BT_OP(BT_OGF_LE, 0x0042)\nstruct bt_hci_cp_le_set_ext_scan_enable {\n    u8_t enable;\n    u8_t filter_dup;\n    u16_t duration;\n    u16_t period;\n} __packed;\n\n#define BT_HCI_OP_LE_EXT_CREATE_CONN BT_OP(BT_OGF_LE, 0x0043)\nstruct bt_hci_ext_conn_phy {\n    u16_t interval;\n    u16_t window;\n    u16_t conn_interval_min;\n    u16_t conn_interval_max;\n    u16_t conn_latency;\n    u16_t supervision_timeout;\n    u16_t min_ce_len;\n    u16_t max_ce_len;\n} __packed;\n\nstruct bt_hci_cp_le_ext_create_conn {\n    u8_t filter_policy;\n    u8_t own_addr_type;\n    bt_addr_le_t peer_addr;\n    u8_t phys;\n    struct bt_hci_ext_conn_phy p[0];\n} __packed;\n\n#define BT_HCI_LE_PER_ADV_CREATE_SYNC_FP_USE_LIST         BIT(0)\n#define BT_HCI_LE_PER_ADV_CREATE_SYNC_FP_REPORTS_DISABLED BIT(1)\n\n#define BT_HCI_LE_PER_ADV_CREATE_SYNC_CTE_TYPE_NO_AOA     BIT(0)\n#define BT_HCI_LE_PER_ADV_CREATE_SYNC_CTE_TYPE_NO_AOD_1US BIT(1)\n#define BT_HCI_LE_PER_ADV_CREATE_SYNC_CTE_TYPE_NO_AOD_2US BIT(2)\n#define BT_HCI_LE_PER_ADV_CREATE_SYNC_CTE_TYPE_NO_CTE     BIT(3)\n#define BT_HCI_LE_PER_ADV_CREATE_SYNC_CTE_TYPE_ONLY_CTE   BIT(4)\n\n#define BT_HCI_OP_LE_PER_ADV_CREATE_SYNC BT_OP(BT_OGF_LE, 0x0044)\nstruct bt_hci_cp_le_per_adv_create_sync {\n    u8_t filter_policy;\n    u8_t sid;\n    bt_addr_le_t addr;\n    u16_t skip;\n    u16_t sync_timeout;\n    u8_t unused;\n} __packed;\n\n#define BT_HCI_OP_LE_PER_ADV_CREATE_SYNC_CANCEL BT_OP(BT_OGF_LE, 0x0045)\n\n#define BT_HCI_OP_LE_PER_ADV_TERMINATE_SYNC BT_OP(BT_OGF_LE, 0x0046)\nstruct bt_hci_cp_le_per_adv_terminate_sync {\n    u16_t handle;\n} __packed;\n\n#define BT_HCI_OP_LE_ADD_DEV_TO_PER_ADV_LIST BT_OP(BT_OGF_LE, 0x0047)\nstruct bt_hci_cp_le_add_dev_to_per_adv_list {\n    bt_addr_le_t addr;\n    u8_t sid;\n} __packed;\n\n#define BT_HCI_OP_LE_REM_DEV_FROM_PER_ADV_LIST BT_OP(BT_OGF_LE, 0x0048)\nstruct bt_hci_cp_le_rem_dev_from_per_adv_list {\n    bt_addr_le_t addr;\n    u8_t sid;\n} __packed;\n\n#define BT_HCI_OP_LE_CLEAR_PER_ADV_LIST BT_OP(BT_OGF_LE, 0x0049)\n\n#define BT_HCI_OP_LE_READ_PER_ADV_LIST_SIZE BT_OP(BT_OGF_LE, 0x004a)\nstruct bt_hci_rp_le_read_per_adv_list_size {\n    u8_t status;\n    u8_t list_size;\n} __packed;\n\n#define BT_HCI_OP_LE_READ_TX_POWER BT_OP(BT_OGF_LE, 0x004b)\nstruct bt_hci_rp_le_read_tx_power {\n    u8_t status;\n    s8_t min_tx_power;\n    s8_t max_tx_power;\n} __packed;\n\n#define BT_HCI_OP_LE_READ_RF_PATH_COMP BT_OP(BT_OGF_LE, 0x004c)\nstruct bt_hci_rp_le_read_rf_path_comp {\n    u8_t status;\n    s16_t tx_path_comp;\n    s16_t rx_path_comp;\n} __packed;\n\n#define BT_HCI_OP_LE_WRITE_RF_PATH_COMP BT_OP(BT_OGF_LE, 0x004d)\nstruct bt_hci_cp_le_write_rf_path_comp {\n    s16_t tx_path_comp;\n    s16_t rx_path_comp;\n} __packed;\n\n#define BT_HCI_LE_PRIVACY_MODE_NETWORK 0x00\n#define BT_HCI_LE_PRIVACY_MODE_DEVICE  0x01\n\n#define BT_HCI_OP_LE_SET_PRIVACY_MODE BT_OP(BT_OGF_LE, 0x004e)\nstruct bt_hci_cp_le_set_privacy_mode {\n    bt_addr_le_t id_addr;\n    u8_t mode;\n} __packed;\n\n#define BT_HCI_OP_LE_SET_CL_CTE_TX_ENABLE BT_OP(BT_OGF_LE, 0x0052)\nstruct bt_hci_cp_le_set_cl_cte_tx_enable {\n    uint8_t handle;\n    uint8_t cte_enable;\n} __packed;\n\n/* Min and max Constant Tone Extension length in 8us units */\n#define BT_HCI_LE_CTE_LEN_MIN 0x2\n#define BT_HCI_LE_CTE_LEN_MAX 0x14\n\n#define BT_HCI_LE_AOA_CTE     0x1\n#define BT_HCI_LE_AOD_CTE_1US 0x2\n#define BT_HCI_LE_AOD_CTE_2US 0x3\n\n#define BT_HCI_LE_CTE_COUNT_MIN 0x1\n#define BT_HCI_LE_CTE_COUNT_MAX 0x10\n\n#define BT_HCI_OP_LE_SET_CL_CTE_TX_PARAMS BT_OP(BT_OGF_LE, 0x0051)\nstruct bt_hci_cp_le_set_cl_cte_tx_params {\n    uint8_t handle;\n    uint8_t cte_len;\n    uint8_t cte_type;\n    uint8_t cte_count;\n    uint8_t switch_pattern_len;\n    uint8_t ant_ids[0];\n} __packed;\n\n#define BT_HCI_LE_AOA_CTE_RSP     BIT(0)\n#define BT_HCI_LE_AOD_CTE_RSP_1US BIT(1)\n#define BT_HCI_LE_AOD_CTE_RSP_2US BIT(2)\n\n#define BT_HCI_LE_SWITCH_PATTERN_LEN_MIN 0x2\n#define BT_HCI_LE_SWITCH_PATTERN_LEN_MAX 0x4B\n\n#define BT_HCI_OP_LE_SET_CONN_CTE_TX_PARAMS BT_OP(BT_OGF_LE, 0x0055)\nstruct bt_hci_cp_le_set_conn_cte_tx_params {\n    uint16_t handle;\n    uint8_t cte_types;\n    uint8_t switch_pattern_len;\n    uint8_t ant_id[0];\n} __packed;\n\nstruct bt_hci_rp_le_set_conn_cte_tx_params {\n    uint8_t status;\n    uint16_t handle;\n} __packed;\n\n#define BT_HCI_LE_1US_AOD_TX BIT(0)\n#define BT_HCI_LE_1US_AOD_RX BIT(1)\n#define BT_HCI_LE_1US_AOA_RX BIT(2)\n\n#define BT_HCI_LE_NUM_ANT_MIN 0x1\n#define BT_HCI_LE_NUM_ANT_MAX 0x4B\n\n#define BT_HCI_LE_MAX_SWITCH_PATTERN_LEN_MIN 0x2\n#define BT_HCI_LE_MAX_SWITCH_PATTERN_LEN_MAX 0x4B\n\n#define BT_HCI_LE_MAX_CTE_LEN_MIN 0x2\n#define BT_HCI_LE_MAX_CTE_LEN_MAX 0x14\n\n#define BT_HCI_OP_LE_READ_ANT_INFO BT_OP(BT_OGF_LE, 0x0058)\nstruct bt_hci_rp_le_read_ant_info {\n    uint8_t status;\n    uint8_t switch_sample_rates;\n    uint8_t num_ant;\n    uint8_t max_switch_pattern_len;\n    uint8_t max_cte_len;\n};\n\n#define BT_HCI_OP_LE_SET_PER_ADV_RECV_ENABLE BT_OP(BT_OGF_LE, 0x0059)\nstruct bt_hci_cp_le_set_per_adv_recv_enable {\n    uint16_t handle;\n    uint8_t enable;\n} __packed;\n\n#define BT_HCI_OP_LE_PER_ADV_SYNC_TRANSFER BT_OP(BT_OGF_LE, 0x005a)\nstruct bt_hci_cp_le_per_adv_sync_transfer {\n    uint16_t conn_handle;\n    uint16_t service_data;\n    uint16_t sync_handle;\n} __packed;\n\nstruct bt_hci_rp_le_per_adv_sync_transfer {\n    uint8_t status;\n    uint16_t conn_handle;\n} __packed;\n\n#define BT_HCI_OP_LE_PER_ADV_SET_INFO_TRANSFER BT_OP(BT_OGF_LE, 0x005b)\nstruct bt_hci_cp_le_per_adv_set_info_transfer {\n    uint16_t conn_handle;\n    uint16_t service_data;\n    uint8_t adv_handle;\n} __packed;\n\nstruct bt_hci_rp_le_per_adv_set_info_transfer {\n    uint8_t status;\n    uint16_t conn_handle;\n} __packed;\n\n#define BT_HCI_LE_PAST_MODE_NO_SYNC    0x00\n#define BT_HCI_LE_PAST_MODE_NO_REPORTS 0x01\n#define BT_HCI_LE_PAST_MODE_SYNC       0x02\n\n#define BT_HCI_LE_PAST_CTE_TYPE_NO_AOA     BIT(0)\n#define BT_HCI_LE_PAST_CTE_TYPE_NO_AOD_1US BIT(1)\n#define BT_HCI_LE_PAST_CTE_TYPE_NO_AOD_2US BIT(2)\n#define BT_HCI_LE_PAST_CTE_TYPE_NO_CTE     BIT(3)\n#define BT_HCI_LE_PAST_CTE_TYPE_ONLY_CTE   BIT(4)\n\n#define BT_HCI_OP_LE_PAST_PARAM BT_OP(BT_OGF_LE, 0x005c)\nstruct bt_hci_cp_le_past_param {\n    uint16_t conn_handle;\n    uint8_t mode;\n    uint16_t skip;\n    uint16_t timeout;\n    uint8_t cte_type;\n} __packed;\n\nstruct bt_hci_rp_le_past_param {\n    uint8_t status;\n    uint16_t conn_handle;\n} __packed;\n\n#define BT_HCI_OP_LE_DEFAULT_PAST_PARAM BT_OP(BT_OGF_LE, 0x005d)\nstruct bt_hci_cp_le_default_past_param {\n    uint8_t mode;\n    uint16_t skip;\n    uint16_t timeout;\n    uint8_t cte_type;\n} __packed;\n\nstruct bt_hci_rp_le_default_past_param {\n    uint8_t status;\n} __packed;\n\n#define BT_HCI_OP_LE_READ_BUFFER_SIZE_V2 BT_OP(BT_OGF_LE, 0x0060)\nstruct bt_hci_rp_le_read_buffer_size_v2 {\n    uint8_t status;\n    uint16_t acl_mtu;\n    uint8_t acl_max_pkt;\n    uint16_t iso_mtu;\n    uint8_t iso_max_pkt;\n} __packed;\n\n#define BT_HCI_OP_LE_READ_ISO_TX_SYNC BT_OP(BT_OGF_LE, 0x0061)\nstruct bt_hci_cp_le_read_iso_tx_sync {\n    uint16_t handle;\n} __packed;\n\nstruct bt_hci_rp_le_read_iso_tx_sync {\n    uint8_t status;\n    uint16_t handle;\n    uint16_t seq;\n    uint32_t timestamp;\n    uint8_t offset[3];\n} __packed;\n\n#define BT_HCI_OP_LE_SET_CIG_PARAMS BT_OP(BT_OGF_LE, 0x0062)\nstruct bt_hci_cis_params {\n    uint8_t cis_id;\n    uint16_t m_sdu;\n    uint16_t s_sdu;\n    uint8_t m_phy;\n    uint8_t s_phy;\n    uint8_t m_rtn;\n    uint8_t s_rtn;\n} __packed;\n\nstruct bt_hci_cp_le_set_cig_params {\n    uint8_t cig_id;\n    uint8_t m_interval[3];\n    uint8_t s_interval[3];\n    uint8_t sca;\n    uint8_t packing;\n    uint8_t framing;\n    uint16_t m_latency;\n    uint16_t s_latency;\n    uint8_t num_cis;\n    struct bt_hci_cis_params cis[0];\n} __packed;\n\nstruct bt_hci_rp_le_set_cig_params {\n    uint8_t status;\n    uint8_t cig_id;\n    uint8_t num_handles;\n    uint16_t handle[0];\n} __packed;\n\n#define BT_HCI_OP_LE_SET_CIG_PARAMS_TEST BT_OP(BT_OGF_LE, 0x0063)\nstruct bt_hci_cis_params_test {\n    uint8_t cis_id;\n    uint8_t nse;\n    uint16_t m_sdu;\n    uint16_t s_sdu;\n    uint16_t m_pdu;\n    uint16_t s_pdu;\n    uint8_t m_phy;\n    uint8_t s_phy;\n    uint8_t m_bn;\n    uint8_t s_bn;\n} __packed;\n\nstruct bt_hci_cp_le_set_cig_params_test {\n    uint8_t cig_id;\n    uint8_t m_interval[3];\n    uint8_t s_interval[3];\n    uint8_t m_ft;\n    uint8_t s_ft;\n    uint16_t iso_interval;\n    uint8_t sca;\n    uint8_t packing;\n    uint8_t framing;\n    uint8_t num_cis;\n    struct bt_hci_cis_params_test cis[0];\n} __packed;\n\nstruct bt_hci_rp_le_set_cig_params_test {\n    uint8_t status;\n    uint8_t cig_id;\n    uint8_t num_handles;\n    uint16_t handle[0];\n} __packed;\n\n#define BT_HCI_OP_LE_CREATE_CIS BT_OP(BT_OGF_LE, 0x0064)\nstruct bt_hci_cis {\n    uint16_t cis_handle;\n    uint16_t acl_handle;\n} __packed;\n\nstruct bt_hci_cp_le_create_cis {\n    uint8_t num_cis;\n    struct bt_hci_cis cis[0];\n} __packed;\n\n#define BT_HCI_OP_LE_REMOVE_CIG BT_OP(BT_OGF_LE, 0x0065)\nstruct bt_hci_cp_le_remove_cig {\n    uint8_t cig_id;\n} __packed;\n\nstruct bt_hci_rp_le_remove_cig {\n    uint8_t status;\n    uint8_t cig_id;\n} __packed;\n\n#define BT_HCI_OP_LE_ACCEPT_CIS BT_OP(BT_OGF_LE, 0x0066)\nstruct bt_hci_cp_le_accept_cis {\n    uint16_t handle;\n} __packed;\n\n#define BT_HCI_OP_LE_REJECT_CIS BT_OP(BT_OGF_LE, 0x0067)\nstruct bt_hci_cp_le_reject_cis {\n    uint16_t handle;\n    uint8_t reason;\n} __packed;\n\nstruct bt_hci_rp_le_reject_cis {\n    uint8_t status;\n    uint16_t handle;\n} __packed;\n\n#define BT_HCI_OP_LE_CREATE_BIG BT_OP(BT_OGF_LE, 0x0068)\nstruct bt_hci_cp_le_create_big {\n    uint8_t big_handle;\n    uint8_t adv_handle;\n    uint8_t num_bis;\n    uint8_t sdu_interval[3];\n    uint16_t max_sdu;\n    uint16_t max_latency;\n    uint8_t rtn;\n    uint8_t phy;\n    uint8_t packing;\n    uint8_t framing;\n    uint8_t encryption;\n    uint8_t bcode[16];\n} __packed;\n\n#define BT_HCI_OP_LE_CREATE_BIG_TEST BT_OP(BT_OGF_LE, 0x0069)\nstruct bt_hci_cp_le_create_big_test {\n    uint8_t big_handle;\n    uint8_t adv_handle;\n    uint8_t num_bis;\n    uint8_t sdu_interval[3];\n    uint16_t iso_interval;\n    uint8_t nse;\n    uint16_t max_sdu;\n    uint16_t max_pdu;\n    uint8_t phy;\n    uint8_t packing;\n    uint8_t framing;\n    uint8_t bn;\n    uint8_t irc;\n    uint8_t pto;\n    uint8_t encryption;\n    uint8_t bcode[16];\n} __packed;\n\n#define BT_HCI_OP_LE_TERMINATE_BIG BT_OP(BT_OGF_LE, 0x006a)\nstruct bt_hci_cp_le_terminate_big {\n    uint8_t big_handle;\n    uint8_t reason;\n} __packed;\n\n#define BT_HCI_OP_LE_BIG_CREATE_SYNC BT_OP(BT_OGF_LE, 0x006b)\nstruct bt_hci_cp_le_big_create_sync {\n    uint8_t big_handle;\n    uint16_t sync_handle;\n    uint8_t encryption;\n    uint8_t bcode[16];\n    uint8_t mse;\n    uint16_t sync_timeout;\n    uint8_t num_bis;\n    uint8_t bis[0];\n} __packed;\n\n#define BT_HCI_OP_LE_BIG_TERMINATE_SYNC BT_OP(BT_OGF_LE, 0x006c)\nstruct bt_hci_cp_le_big_terminate_sync {\n    uint8_t big_handle;\n} __packed;\n\nstruct bt_hci_rp_le_big_terminate_sync {\n    uint8_t status;\n    uint8_t big_handle;\n} __packed;\n\n#define BT_HCI_OP_LE_REQ_PEER_SC BT_OP(BT_OGF_LE, 0x006d)\nstruct bt_hci_cp_le_req_peer_sca {\n    uint16_t handle;\n} __packed;\n\n#define BT_HCI_OP_LE_SETUP_ISO_PATH BT_OP(BT_OGF_LE, 0x006e)\nstruct bt_hci_cp_le_setup_iso_path {\n    uint16_t handle;\n    uint8_t path_dir;\n    uint8_t path_id;\n    struct bt_hci_cp_codec_id codec_id;\n    uint8_t controller_delay[3];\n    uint8_t codec_config_len;\n    uint8_t codec_config[0];\n} __packed;\n\nstruct bt_hci_rp_le_setup_iso_path {\n    uint8_t status;\n    uint16_t handle;\n} __packed;\n\n#define BT_HCI_OP_LE_REMOVE_ISO_PATH BT_OP(BT_OGF_LE, 0x006f)\nstruct bt_hci_cp_le_remove_iso_path {\n    uint16_t handle;\n    uint8_t path_dir;\n} __packed;\n\nstruct bt_hci_rp_le_remove_iso_path {\n    uint8_t status;\n    uint16_t handle;\n} __packed;\n\n#define BT_HCI_OP_LE_ISO_TRANSMIT_TEST BT_OP(BT_OGF_LE, 0x0070)\nstruct bt_hci_cp_le_iso_transmit_test {\n    uint16_t handle;\n    uint8_t payload_type;\n} __packed;\n\nstruct bt_hci_rp_le_iso_transmit_test {\n    uint8_t status;\n    uint16_t handle;\n} __packed;\n\n#define BT_HCI_OP_LE_ISO_RECEIVE_TEST BT_OP(BT_OGF_LE, 0x0071)\nstruct bt_hci_cp_le_iso_receive_test {\n    uint16_t handle;\n    uint8_t payload_type;\n} __packed;\n\nstruct bt_hci_rp_le_iso_receive_test {\n    uint8_t status;\n    uint16_t handle;\n} __packed;\n\n#define BT_HCI_OP_LE_ISO_READ_TEST_COUNTERS BT_OP(BT_OGF_LE, 0x0072)\nstruct bt_hci_cp_le_read_test_counters {\n    uint16_t handle;\n} __packed;\n\nstruct bt_hci_rp_le_read_test_counters {\n    uint8_t status;\n    uint16_t handle;\n    uint32_t received_cnt;\n    uint32_t missed_cnt;\n    uint32_t failed_cnt;\n} __packed;\n\n#define BT_HCI_OP_LE_ISO_TEST_END BT_OP(BT_OGF_LE, 0x0073)\nstruct bt_hci_cp_le_iso_test_end {\n    uint16_t handle;\n} __packed;\n\nstruct bt_hci_rp_le_iso_test_end {\n    uint8_t status;\n    uint16_t handle;\n    uint32_t received_cnt;\n    uint32_t missed_cnt;\n    uint32_t failed_cnt;\n} __packed;\n\n#define BT_HCI_OP_LE_SET_HOST_FEATURE BT_OP(BT_OGF_LE, 0x0074)\nstruct bt_hci_cp_le_set_host_feature {\n    uint8_t bit_number;\n    uint8_t bit_value;\n} __packed;\n\nstruct bt_hci_rp_le_set_host_feature {\n    uint8_t status;\n} __packed;\n\n#define BT_HCI_OP_LE_READ_ISO_LINK_QUALITY BT_OP(BT_OGF_LE, 0x0075)\nstruct bt_hci_cp_le_read_iso_link_quality {\n    uint16_t handle;\n} __packed;\n\nstruct bt_hci_rp_le_read_iso_link_quality {\n    uint8_t status;\n    uint16_t handle;\n    uint32_t tx_unacked_packets;\n    uint32_t tx_flushed_packets;\n    uint32_t tx_last_subevent_packets;\n    uint32_t retransmitted_packets;\n    uint32_t crc_error_packets;\n    uint32_t rx_unreceived_packets;\n    uint32_t duplicate_packets;\n} __packed;\n\n/* Event definitions */\n#if defined(BFLB_BLE)\n#define BT_HCI_EVT_CC_PARAM_OFFSET 0x05\n#define BT_HCI_CCEVT_HDR_PARLEN    0x03\n#define BT_HCI_CSEVT_LEN           0x06\n#define BT_HCI_CSVT_PARLEN         0x04\n#define BT_HCI_EVT_LE_PARAM_OFFSET 0x02\n#endif\n\n#define BT_HCI_EVT_UNKNOWN 0x00\n#define BT_HCI_EVT_VENDOR  0xff\n\n#define BT_HCI_EVT_INQUIRY_COMPLETE 0x01\nstruct bt_hci_evt_inquiry_complete {\n    u8_t status;\n} __packed;\n\n#define BT_HCI_EVT_CONN_COMPLETE 0x03\nstruct bt_hci_evt_conn_complete {\n    u8_t status;\n    u16_t handle;\n    bt_addr_t bdaddr;\n    u8_t link_type;\n    u8_t encr_enabled;\n} __packed;\n\n#define BT_HCI_EVT_CONN_REQUEST 0x04\nstruct bt_hci_evt_conn_request {\n    bt_addr_t bdaddr;\n    u8_t dev_class[3];\n    u8_t link_type;\n} __packed;\n\n#define BT_HCI_EVT_DISCONN_COMPLETE 0x05\nstruct bt_hci_evt_disconn_complete {\n    u8_t status;\n    u16_t handle;\n    u8_t reason;\n} __packed;\n\n#define BT_HCI_EVT_AUTH_COMPLETE 0x06\nstruct bt_hci_evt_auth_complete {\n    u8_t status;\n    u16_t handle;\n} __packed;\n\n#define BT_HCI_EVT_REMOTE_NAME_REQ_COMPLETE 0x07\nstruct bt_hci_evt_remote_name_req_complete {\n    u8_t status;\n    bt_addr_t bdaddr;\n    u8_t name[248];\n} __packed;\n\n#define BT_HCI_EVT_ENCRYPT_CHANGE 0x08\nstruct bt_hci_evt_encrypt_change {\n    u8_t status;\n    u16_t handle;\n    u8_t encrypt;\n} __packed;\n\n#define BT_HCI_EVT_REMOTE_FEATURES 0x0b\nstruct bt_hci_evt_remote_features {\n    u8_t status;\n    u16_t handle;\n    u8_t features[8];\n} __packed;\n\n#define BT_HCI_EVT_REMOTE_VERSION_INFO 0x0c\nstruct bt_hci_evt_remote_version_info {\n    u8_t status;\n    u16_t handle;\n    u8_t version;\n    u16_t manufacturer;\n    u16_t subversion;\n} __packed;\n\n#define BT_HCI_EVT_CMD_COMPLETE 0x0e\nstruct bt_hci_evt_cmd_complete {\n    u8_t ncmd;\n    u16_t opcode;\n} __packed;\n\nstruct bt_hci_evt_cc_status {\n    u8_t status;\n} __packed;\n\n#define BT_HCI_EVT_CMD_STATUS 0x0f\nstruct bt_hci_evt_cmd_status {\n    u8_t status;\n    u8_t ncmd;\n    u16_t opcode;\n} __packed;\n\n#define BT_HCI_EVT_HARDWARE_ERROR 0x10\nstruct bt_hci_evt_hardware_error {\n    uint8_t hardware_code;\n} __packed;\n\n#define BT_HCI_EVT_ROLE_CHANGE 0x12\nstruct bt_hci_evt_role_change {\n    u8_t status;\n    bt_addr_t bdaddr;\n    u8_t role;\n} __packed;\n\n#define BT_HCI_EVT_NUM_COMPLETED_PACKETS 0x13\nstruct bt_hci_evt_num_completed_packets {\n    u8_t num_handles;\n    struct bt_hci_handle_count h[0];\n} __packed;\n\n#define BT_HCI_EVT_PIN_CODE_REQ 0x16\nstruct bt_hci_evt_pin_code_req {\n    bt_addr_t bdaddr;\n} __packed;\n\n#define BT_HCI_EVT_LINK_KEY_REQ 0x17\nstruct bt_hci_evt_link_key_req {\n    bt_addr_t bdaddr;\n} __packed;\n\n/* Link Key types */\n#define BT_LK_COMBINATION             0x00\n#define BT_LK_LOCAL_UNIT              0x01\n#define BT_LK_REMOTE_UNIT             0x02\n#define BT_LK_DEBUG_COMBINATION       0x03\n#define BT_LK_UNAUTH_COMBINATION_P192 0x04\n#define BT_LK_AUTH_COMBINATION_P192   0x05\n#define BT_LK_CHANGED_COMBINATION     0x06\n#define BT_LK_UNAUTH_COMBINATION_P256 0x07\n#define BT_LK_AUTH_COMBINATION_P256   0x08\n\n#define BT_HCI_EVT_LINK_KEY_NOTIFY 0x18\nstruct bt_hci_evt_link_key_notify {\n    bt_addr_t bdaddr;\n    u8_t link_key[16];\n    u8_t key_type;\n} __packed;\n\n/* Overflow link types */\n#define BT_OVERFLOW_LINK_SYNCH 0x00\n#define BT_OVERFLOW_LINK_ACL   0x01\n\n#define BT_HCI_EVT_DATA_BUF_OVERFLOW 0x1a\nstruct bt_hci_evt_data_buf_overflow {\n    u8_t link_type;\n} __packed;\n\n#define BT_HCI_EVT_INQUIRY_RESULT_WITH_RSSI 0x22\nstruct bt_hci_evt_inquiry_result_with_rssi {\n    bt_addr_t addr;\n    u8_t pscan_rep_mode;\n    u8_t reserved;\n    u8_t cod[3];\n    u16_t clock_offset;\n    s8_t rssi;\n} __packed;\n\n#define BT_HCI_EVT_REMOTE_EXT_FEATURES 0x23\nstruct bt_hci_evt_remote_ext_features {\n    u8_t status;\n    u16_t handle;\n    u8_t page;\n    u8_t max_page;\n    u8_t features[8];\n} __packed;\n\n#define BT_HCI_EVT_SYNC_CONN_COMPLETE 0x2c\nstruct bt_hci_evt_sync_conn_complete {\n    u8_t status;\n    u16_t handle;\n    bt_addr_t bdaddr;\n    u8_t link_type;\n    u8_t tx_interval;\n    u8_t retansmission_window;\n    u16_t rx_pkt_length;\n    u16_t tx_pkt_length;\n    u8_t air_mode;\n} __packed;\n\n#define BT_HCI_EVT_EXTENDED_INQUIRY_RESULT 0x2f\nstruct bt_hci_evt_extended_inquiry_result {\n    u8_t num_reports;\n    bt_addr_t addr;\n    u8_t pscan_rep_mode;\n    u8_t reserved;\n    u8_t cod[3];\n    u16_t clock_offset;\n    s8_t rssi;\n    u8_t eir[240];\n} __packed;\n\n#define BT_HCI_EVT_ENCRYPT_KEY_REFRESH_COMPLETE 0x30\nstruct bt_hci_evt_encrypt_key_refresh_complete {\n    u8_t status;\n    u16_t handle;\n} __packed;\n\n#define BT_HCI_EVT_IO_CAPA_REQ 0x31\nstruct bt_hci_evt_io_capa_req {\n    bt_addr_t bdaddr;\n} __packed;\n\n#define BT_HCI_EVT_IO_CAPA_RESP 0x32\nstruct bt_hci_evt_io_capa_resp {\n    bt_addr_t bdaddr;\n    u8_t capability;\n    u8_t oob_data;\n    u8_t authentication;\n} __packed;\n\n#define BT_HCI_EVT_USER_CONFIRM_REQ 0x33\nstruct bt_hci_evt_user_confirm_req {\n    bt_addr_t bdaddr;\n    u32_t passkey;\n} __packed;\n\n#define BT_HCI_EVT_USER_PASSKEY_REQ 0x34\nstruct bt_hci_evt_user_passkey_req {\n    bt_addr_t bdaddr;\n} __packed;\n\n#define BT_HCI_EVT_SSP_COMPLETE 0x36\nstruct bt_hci_evt_ssp_complete {\n    u8_t status;\n    bt_addr_t bdaddr;\n} __packed;\n\n#define BT_HCI_EVT_USER_PASSKEY_NOTIFY 0x3b\nstruct bt_hci_evt_user_passkey_notify {\n    bt_addr_t bdaddr;\n    u32_t passkey;\n} __packed;\n\n#define BT_HCI_EVT_LE_META_EVENT 0x3e\nstruct bt_hci_evt_le_meta_event {\n    u8_t subevent;\n} __packed;\n\n#define BT_HCI_EVT_AUTH_PAYLOAD_TIMEOUT_EXP 0x57\nstruct bt_hci_evt_auth_payload_timeout_exp {\n    u16_t handle;\n} __packed;\n\n#define BT_HCI_ROLE_MASTER 0x00\n#define BT_HCI_ROLE_SLAVE  0x01\n\n#define BT_HCI_EVT_LE_CONN_COMPLETE 0x01\nstruct bt_hci_evt_le_conn_complete {\n    u8_t status;\n    u16_t handle;\n    u8_t role;\n    bt_addr_le_t peer_addr;\n    u16_t interval;\n    u16_t latency;\n    u16_t supv_timeout;\n    u8_t clock_accuracy;\n} __packed;\n\n#define BT_HCI_EVT_LE_ADVERTISING_REPORT 0x02\nstruct bt_hci_evt_le_advertising_info {\n    u8_t evt_type;\n    bt_addr_le_t addr;\n    u8_t length;\n    u8_t data[0];\n} __packed;\nstruct bt_hci_evt_le_advertising_report {\n    u8_t num_reports;\n    struct bt_hci_evt_le_advertising_info adv_info[0];\n} __packed;\n\n#define BT_HCI_EVT_LE_CONN_UPDATE_COMPLETE 0x03\nstruct bt_hci_evt_le_conn_update_complete {\n    u8_t status;\n    u16_t handle;\n    u16_t interval;\n    u16_t latency;\n    u16_t supv_timeout;\n} __packed;\n\n#define BT_HCI_EV_LE_REMOTE_FEAT_COMPLETE 0x04\nstruct bt_hci_evt_le_remote_feat_complete {\n    u8_t status;\n    u16_t handle;\n    u8_t features[8];\n} __packed;\n\n#define BT_HCI_EVT_LE_LTK_REQUEST 0x05\nstruct bt_hci_evt_le_ltk_request {\n    u16_t handle;\n    u64_t rand;\n    u16_t ediv;\n} __packed;\n\n#define BT_HCI_EVT_LE_CONN_PARAM_REQ 0x06\nstruct bt_hci_evt_le_conn_param_req {\n    u16_t handle;\n    u16_t interval_min;\n    u16_t interval_max;\n    u16_t latency;\n    u16_t timeout;\n} __packed;\n\n#define BT_HCI_EVT_LE_DATA_LEN_CHANGE 0x07\nstruct bt_hci_evt_le_data_len_change {\n    u16_t handle;\n    u16_t max_tx_octets;\n    u16_t max_tx_time;\n    u16_t max_rx_octets;\n    u16_t max_rx_time;\n} __packed;\n\n#define BT_HCI_EVT_LE_P256_PUBLIC_KEY_COMPLETE 0x08\nstruct bt_hci_evt_le_p256_public_key_complete {\n    u8_t status;\n    u8_t key[64];\n} __packed;\n\n#define BT_HCI_EVT_LE_GENERATE_DHKEY_COMPLETE 0x09\nstruct bt_hci_evt_le_generate_dhkey_complete {\n    u8_t status;\n    u8_t dhkey[32];\n} __packed;\n\n#define BT_HCI_EVT_LE_ENH_CONN_COMPLETE 0x0a\nstruct bt_hci_evt_le_enh_conn_complete {\n    u8_t status;\n    u16_t handle;\n    u8_t role;\n    bt_addr_le_t peer_addr;\n    bt_addr_t local_rpa;\n    bt_addr_t peer_rpa;\n    u16_t interval;\n    u16_t latency;\n    u16_t supv_timeout;\n    u8_t clock_accuracy;\n} __packed;\n\n#define BT_HCI_EVT_LE_DIRECT_ADV_REPORT 0x0b\nstruct bt_hci_evt_le_direct_adv_info {\n    u8_t evt_type;\n    bt_addr_le_t addr;\n    bt_addr_le_t dir_addr;\n    s8_t rssi;\n} __packed;\nstruct bt_hci_evt_le_direct_adv_report {\n    u8_t num_reports;\n    struct bt_hci_evt_le_direct_adv_info direct_adv_info[0];\n} __packed;\n\n#define BT_HCI_EVT_LE_PHY_UPDATE_COMPLETE 0x0c\nstruct bt_hci_evt_le_phy_update_complete {\n    u8_t status;\n    u16_t handle;\n    u8_t tx_phy;\n    u8_t rx_phy;\n} __packed;\n\n#define BT_HCI_EVT_LE_EXT_ADVERTISING_REPORT 0x0d\n\n#define BT_HCI_LE_ADV_EVT_TYPE_CONN     BIT(0)\n#define BT_HCI_LE_ADV_EVT_TYPE_SCAN     BIT(1)\n#define BT_HCI_LE_ADV_EVT_TYPE_DIRECT   BIT(2)\n#define BT_HCI_LE_ADV_EVT_TYPE_SCAN_RSP BIT(3)\n#define BT_HCI_LE_ADV_EVT_TYPE_LEGACY   BIT(4)\n\n#define BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS(ev_type)   (((ev_type) >> 5) & 0x03)\n#define BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS_COMPLETE   0\n#define BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS_PARTIAL    1\n#define BT_HCI_LE_ADV_EVT_TYPE_DATA_STATUS_INCOMPLETE 2\n\nstruct bt_hci_evt_le_ext_advertising_info {\n    u8_t evt_type;\n    bt_addr_le_t addr;\n    u8_t prim_phy;\n    u8_t sec_phy;\n    u8_t sid;\n    s8_t tx_power;\n    s8_t rssi;\n    u16_t interval;\n    bt_addr_le_t direct_addr;\n    u8_t length;\n    u8_t data[0];\n} __packed;\nstruct bt_hci_evt_le_ext_advertising_report {\n    u8_t num_reports;\n    struct bt_hci_evt_le_ext_advertising_info adv_info[0];\n} __packed;\n\n#define BT_HCI_EVT_LE_PER_ADV_SYNC_ESTABLISHED 0x0e\nstruct bt_hci_evt_le_per_adv_sync_established {\n    u8_t status;\n    u16_t handle;\n    u8_t sid;\n    bt_addr_le_t adv_addr;\n    u8_t phy;\n    u16_t interval;\n    u8_t clock_accuracy;\n} __packed;\n\n#define BT_HCI_EVT_LE_PER_ADVERTISING_REPORT 0x0f\nstruct bt_hci_evt_le_per_advertising_report {\n    u16_t handle;\n    s8_t tx_power;\n    s8_t rssi;\n    u8_t unused;\n    u8_t data_status;\n    u8_t length;\n    u8_t data[0];\n} __packed;\n\n#define BT_HCI_EVT_LE_PER_ADV_SYNC_LOST 0x10\nstruct bt_hci_evt_le_per_adv_sync_lost {\n    u16_t handle;\n} __packed;\n\n#define BT_HCI_EVT_LE_SCAN_TIMEOUT 0x11\n\n#define BT_HCI_EVT_LE_ADV_SET_TERMINATED 0x12\nstruct bt_hci_evt_le_per_adv_set_terminated {\n    u8_t status;\n    u8_t adv_handle;\n    u16_t conn_handle;\n    u8_t num_completed_ext_adv_evts;\n} __packed;\n\n#define BT_HCI_EVT_LE_SCAN_REQ_RECEIVED 0x13\nstruct bt_hci_evt_le_scan_req_received {\n    u8_t handle;\n    bt_addr_le_t addr;\n} __packed;\n\n#define BT_HCI_LE_CHAN_SEL_ALGO_1 0x00\n#define BT_HCI_LE_CHAN_SEL_ALGO_2 0x01\n\n#define BT_HCI_EVT_LE_CHAN_SEL_ALGO 0x14\nstruct bt_hci_evt_le_chan_sel_algo {\n    u16_t handle;\n    u8_t chan_sel_algo;\n} __packed;\n\n#define BT_HCI_EVT_LE_PAST_RECEIVED 0x18\nstruct bt_hci_evt_le_past_received {\n    uint8_t status;\n    uint16_t conn_handle;\n    uint16_t service_data;\n    uint16_t sync_handle;\n    uint8_t adv_sid;\n    bt_addr_le_t addr;\n    uint8_t phy;\n    uint16_t interval;\n    uint8_t clock_accuracy;\n} __packed;\n\n#define BT_HCI_EVT_LE_CIS_ESTABLISHED 0x19\nstruct bt_hci_evt_le_cis_established {\n    uint8_t status;\n    uint16_t conn_handle;\n    uint8_t cig_sync_delay[3];\n    uint8_t cis_sync_delay[3];\n    uint8_t m_latency[3];\n    uint8_t s_latency[3];\n    uint8_t m_phy;\n    uint8_t s_phy;\n    uint8_t nse;\n    uint8_t m_bn;\n    uint8_t s_bn;\n    uint8_t m_ft;\n    uint8_t s_ft;\n    uint16_t m_max_pdu;\n    uint16_t s_max_pdu;\n    uint16_t interval;\n} __packed;\n\n#define BT_HCI_EVT_LE_CIS_REQ 0x1a\nstruct bt_hci_evt_le_cis_req {\n    uint16_t acl_handle;\n    uint16_t cis_handle;\n    uint8_t cig_id;\n    uint8_t cis_id;\n} __packed;\n\n#define BT_HCI_EVT_LE_BIG_COMPLETE 0x1b\nstruct bt_hci_evt_le_big_complete {\n    uint8_t status;\n    uint8_t big_handle;\n    uint8_t sync_delay[3];\n    uint8_t latency[3];\n    uint8_t phy;\n    uint8_t nse;\n    uint8_t bn;\n    uint8_t pto;\n    uint8_t irc;\n    uint16_t max_pdu;\n    uint8_t num_bis;\n    uint16_t handle[0];\n} __packed;\n\n#define BT_HCI_EVT_LE_BIG_TERMINATE 0x1c\nstruct bt_hci_evt_le_big_terminate {\n    uint8_t big_handle;\n    uint8_t reason;\n} __packed;\n\n#define BT_HCI_EVT_LE_BIG_SYNC_ESTABLISHED 0x1d\nstruct bt_hci_evt_le_big_sync_established {\n    uint8_t status;\n    uint8_t big_handle;\n    uint8_t latency[3];\n    uint8_t nse;\n    uint8_t bn;\n    uint8_t pto;\n    uint8_t irc;\n    uint16_t max_pdu;\n    uint8_t num_bis;\n    uint16_t handle[0];\n} __packed;\n\n#define BT_HCI_EVT_LE_BIG_SYNC_LOST 0x1e\nstruct bt_hci_evt_le_big_sync_lost {\n    uint8_t big_handle;\n    uint8_t reason;\n} __packed;\n\n#define BT_HCI_EVT_LE_REQ_PEER_SCA_COMPLETE 0x1f\nstruct bt_hci_evt_le_req_peer_sca_complete {\n    uint8_t status;\n    uint16_t handle;\n    uint8_t sca;\n} __packed;\n\n#define BT_HCI_EVT_LE_BIGINFO_ADV_REPORT 0x22\nstruct bt_hci_evt_le_biginfo_adv_report {\n    uint16_t sync_handle;\n    uint8_t num_bis;\n    uint8_t nse;\n    uint16_t iso_interval;\n    uint8_t bn;\n    uint8_t pto;\n    uint8_t irc;\n    uint16_t max_pdu;\n    uint8_t sdu_interval[3];\n    uint16_t max_sdu;\n    uint8_t phy;\n    uint8_t framing;\n    uint8_t encryption;\n} __packed;\n\n/* Event mask bits */\n\n#define BT_EVT_BIT(n) (1ULL << (n))\n\n#define BT_EVT_MASK_INQUIRY_COMPLETE             BT_EVT_BIT(0)\n#define BT_EVT_MASK_CONN_COMPLETE                BT_EVT_BIT(2)\n#define BT_EVT_MASK_CONN_REQUEST                 BT_EVT_BIT(3)\n#define BT_EVT_MASK_DISCONN_COMPLETE             BT_EVT_BIT(4)\n#define BT_EVT_MASK_AUTH_COMPLETE                BT_EVT_BIT(5)\n#define BT_EVT_MASK_REMOTE_NAME_REQ_COMPLETE     BT_EVT_BIT(6)\n#define BT_EVT_MASK_ENCRYPT_CHANGE               BT_EVT_BIT(7)\n#define BT_EVT_MASK_REMOTE_FEATURES              BT_EVT_BIT(10)\n#define BT_EVT_MASK_REMOTE_VERSION_INFO          BT_EVT_BIT(11)\n#define BT_EVT_MASK_HARDWARE_ERROR               BT_EVT_BIT(15)\n#define BT_EVT_MASK_ROLE_CHANGE                  BT_EVT_BIT(17)\n#define BT_EVT_MASK_PIN_CODE_REQ                 BT_EVT_BIT(21)\n#define BT_EVT_MASK_LINK_KEY_REQ                 BT_EVT_BIT(22)\n#define BT_EVT_MASK_LINK_KEY_NOTIFY              BT_EVT_BIT(23)\n#define BT_EVT_MASK_DATA_BUFFER_OVERFLOW         BT_EVT_BIT(25)\n#define BT_EVT_MASK_INQUIRY_RESULT_WITH_RSSI     BT_EVT_BIT(33)\n#define BT_EVT_MASK_REMOTE_EXT_FEATURES          BT_EVT_BIT(34)\n#define BT_EVT_MASK_SYNC_CONN_COMPLETE           BT_EVT_BIT(43)\n#define BT_EVT_MASK_EXTENDED_INQUIRY_RESULT      BT_EVT_BIT(46)\n#define BT_EVT_MASK_ENCRYPT_KEY_REFRESH_COMPLETE BT_EVT_BIT(47)\n#define BT_EVT_MASK_IO_CAPA_REQ                  BT_EVT_BIT(48)\n#define BT_EVT_MASK_IO_CAPA_RESP                 BT_EVT_BIT(49)\n#define BT_EVT_MASK_USER_CONFIRM_REQ             BT_EVT_BIT(50)\n#define BT_EVT_MASK_USER_PASSKEY_REQ             BT_EVT_BIT(51)\n#define BT_EVT_MASK_SSP_COMPLETE                 BT_EVT_BIT(53)\n#define BT_EVT_MASK_USER_PASSKEY_NOTIFY          BT_EVT_BIT(58)\n#define BT_EVT_MASK_LE_META_EVENT                BT_EVT_BIT(61)\n\n/* Page 2 */\n#define BT_EVT_MASK_PHY_LINK_COMPLETE           BT_EVT_BIT(0)\n#define BT_EVT_MASK_CH_SELECTED_COMPLETE        BT_EVT_BIT(1)\n#define BT_EVT_MASK_DISCONN_PHY_LINK_COMPLETE   BT_EVT_BIT(2)\n#define BT_EVT_MASK_PHY_LINK_LOSS_EARLY_WARN    BT_EVT_BIT(3)\n#define BT_EVT_MASK_PHY_LINK_RECOVERY           BT_EVT_BIT(4)\n#define BT_EVT_MASK_LOG_LINK_COMPLETE           BT_EVT_BIT(5)\n#define BT_EVT_MASK_DISCONN_LOG_LINK_COMPLETE   BT_EVT_BIT(6)\n#define BT_EVT_MASK_FLOW_SPEC_MODIFY_COMPLETE   BT_EVT_BIT(7)\n#define BT_EVT_MASK_NUM_COMPLETE_DATA_BLOCKS    BT_EVT_BIT(8)\n#define BT_EVT_MASK_AMP_START_TEST              BT_EVT_BIT(9)\n#define BT_EVT_MASK_AMP_TEST_END                BT_EVT_BIT(10)\n#define BT_EVT_MASK_AMP_RX_REPORT               BT_EVT_BIT(11)\n#define BT_EVT_MASK_AMP_SR_MODE_CHANGE_COMPLETE BT_EVT_BIT(12)\n#define BT_EVT_MASK_AMP_STATUS_CHANGE           BT_EVT_BIT(13)\n#define BT_EVT_MASK_TRIGG_CLOCK_CAPTURE         BT_EVT_BIT(14)\n#define BT_EVT_MASK_SYNCH_TRAIN_COMPLETE        BT_EVT_BIT(15)\n#define BT_EVT_MASK_SYNCH_TRAIN_RX              BT_EVT_BIT(16)\n#define BT_EVT_MASK_CL_SLAVE_BC_RX              BT_EVT_BIT(17)\n#define BT_EVT_MASK_CL_SLAVE_BC_TIMEOUT         BT_EVT_BIT(18)\n#define BT_EVT_MASK_TRUNC_PAGE_COMPLETE         BT_EVT_BIT(19)\n#define BT_EVT_MASK_SLAVE_PAGE_RSP_TIMEOUT      BT_EVT_BIT(20)\n#define BT_EVT_MASK_CL_SLAVE_BC_CH_MAP_CHANGE   BT_EVT_BIT(21)\n#define BT_EVT_MASK_INQUIRY_RSP_NOT             BT_EVT_BIT(22)\n#define BT_EVT_MASK_AUTH_PAYLOAD_TIMEOUT_EXP    BT_EVT_BIT(23)\n#define BT_EVT_MASK_SAM_STATUS_CHANGE           BT_EVT_BIT(24)\n\n#define BT_EVT_MASK_LE_CONN_COMPLETE            BT_EVT_BIT(0)\n#define BT_EVT_MASK_LE_ADVERTISING_REPORT       BT_EVT_BIT(1)\n#define BT_EVT_MASK_LE_CONN_UPDATE_COMPLETE     BT_EVT_BIT(2)\n#define BT_EVT_MASK_LE_REMOTE_FEAT_COMPLETE     BT_EVT_BIT(3)\n#define BT_EVT_MASK_LE_LTK_REQUEST              BT_EVT_BIT(4)\n#define BT_EVT_MASK_LE_CONN_PARAM_REQ           BT_EVT_BIT(5)\n#define BT_EVT_MASK_LE_DATA_LEN_CHANGE          BT_EVT_BIT(6)\n#define BT_EVT_MASK_LE_P256_PUBLIC_KEY_COMPLETE BT_EVT_BIT(7)\n#define BT_EVT_MASK_LE_GENERATE_DHKEY_COMPLETE  BT_EVT_BIT(8)\n#define BT_EVT_MASK_LE_ENH_CONN_COMPLETE        BT_EVT_BIT(9)\n#define BT_EVT_MASK_LE_DIRECT_ADV_REPORT        BT_EVT_BIT(10)\n#define BT_EVT_MASK_LE_PHY_UPDATE_COMPLETE      BT_EVT_BIT(11)\n#define BT_EVT_MASK_LE_EXT_ADVERTISING_REPORT   BT_EVT_BIT(12)\n#define BT_EVT_MASK_LE_PER_ADV_SYNC_ESTABLISHED BT_EVT_BIT(13)\n#define BT_EVT_MASK_LE_PER_ADVERTISING_REPORT   BT_EVT_BIT(14)\n#define BT_EVT_MASK_LE_PER_ADV_SYNC_LOST        BT_EVT_BIT(15)\n#define BT_EVT_MASK_LE_SCAN_TIMEOUT             BT_EVT_BIT(16)\n#define BT_EVT_MASK_LE_ADV_SET_TERMINATED       BT_EVT_BIT(17)\n#define BT_EVT_MASK_LE_SCAN_REQ_RECEIVED        BT_EVT_BIT(18)\n#define BT_EVT_MASK_LE_CHAN_SEL_ALGO            BT_EVT_BIT(19)\n#define BT_EVT_MASK_LE_PAST_RECEIVED            BT_EVT_BIT(23)\n#define BT_EVT_MASK_LE_CIS_ESTABLISHED          BT_EVT_BIT(24)\n#define BT_EVT_MASK_LE_CIS_REQ                  BT_EVT_BIT(25)\n#define BT_EVT_MASK_LE_BIG_COMPLETE             BT_EVT_BIT(26)\n#define BT_EVT_MASK_LE_BIG_TERMINATED           BT_EVT_BIT(27)\n#define BT_EVT_MASK_LE_BIG_SYNC_ESTABLISHED     BT_EVT_BIT(28)\n#define BT_EVT_MASK_LE_BIG_SYNC_LOST            BT_EVT_BIT(29)\n#define BT_EVT_MASK_LE_REQ_PEER_SCA_COMPLETE    BT_EVT_BIT(30)\n#define BT_EVT_MASK_LE_PATH_LOSS_THRESHOLD      BT_EVT_BIT(31)\n#define BT_EVT_MASK_LE_TRANSMIT_POWER_REPORTING BT_EVT_BIT(32)\n#define BT_EVT_MASK_LE_BIGINFO_ADV_REPORT       BT_EVT_BIT(33)\n\n/** Allocate a HCI command buffer.\n  *\n  * This function allocates a new buffer for a HCI command. It is given\n  * the OpCode (encoded e.g. using the BT_OP macro) and the total length\n  * of the parameters. Upon successful return the buffer is ready to have\n  * the parameters encoded into it.\n  *\n  * @param opcode     Command OpCode.\n  * @param param_len  Length of command parameters.\n  *\n  * @return Newly allocated buffer.\n  */\nstruct net_buf *bt_hci_cmd_create(u16_t opcode, u8_t param_len);\n\n/** Send a HCI command asynchronously.\n  *\n  * This function is used for sending a HCI command asynchronously. It can\n  * either be called for a buffer created using bt_hci_cmd_create(), or\n  * if the command has no parameters a NULL can be passed instead. The\n  * sending of the command will happen asynchronously, i.e. upon successful\n  * return from this function the caller only knows that it was queued\n  * successfully.\n  *\n  * If synchronous behavior, and retrieval of the Command Complete parameters\n  * is desired, the bt_hci_cmd_send_sync() API should be used instead.\n  *\n  * @param opcode Command OpCode.\n  * @param buf    Command buffer or NULL (if no parameters).\n  *\n  * @return 0 on success or negative error value on failure.\n  */\nint bt_hci_cmd_send(u16_t opcode, struct net_buf *buf);\n\n/** Send a HCI command synchronously.\n  *\n  * This function is used for sending a HCI command synchronously. It can\n  * either be called for a buffer created using bt_hci_cmd_create(), or\n  * if the command has no parameters a NULL can be passed instead.\n  *\n  * The function will block until a Command Status or a Command Complete\n  * event is returned. If either of these have a non-zero status the function\n  * will return a negative error code and the response reference will not\n  * be set. If the command completed successfully and a non-NULL rsp parameter\n  * was given, this parameter will be set to point to a buffer containing\n  * the response parameters.\n  *\n  * @param opcode Command OpCode.\n  * @param buf    Command buffer or NULL (if no parameters).\n  * @param rsp    Place to store a reference to the command response. May\n  *               be NULL if the caller is not interested in the response\n  *               parameters. If non-NULL is passed the caller is responsible\n  *               for calling net_buf_unref() on the buffer when done parsing\n  *               it.\n  *\n  * @return 0 on success or negative error value on failure.\n  */\nint bt_hci_cmd_send_sync(u16_t opcode, struct net_buf *buf,\n                         struct net_buf **rsp);\n\n//declare bt_hci_get_conn_handle in conn_internal.h to pass compile\n#if !defined(BFLB_BLE)\n/** @brief Get connection handle for a connection.\n *\n * @param conn Connection object.\n * @param conn_handle Place to store the Connection handle.\n *\n * @return 0 on success or negative error value on failure.\n */\nint bt_hci_get_conn_handle(const struct bt_conn *conn, u16_t *conn_handle);\n#endif\n\n/** @typedef bt_hci_vnd_evt_cb_t\n  * @brief Callback type for vendor handling of HCI Vendor-Specific Events.\n  *\n  * A function of this type is registered with bt_hci_register_vnd_evt_cb()\n  * and will be called for any HCI Vendor-Specific Event.\n  *\n  * @param buf Buffer containing event parameters.\n  *\n  * @return true if the function handles the event or false to defer the\n  *         handling of this event back to the stack.\n  */\ntypedef bool bt_hci_vnd_evt_cb_t(struct net_buf_simple *buf);\n\n/** Register user callback for HCI Vendor-Specific Events\n  *\n  * @param cb Callback to be called when the stack receives a\n  *           HCI Vendor-Specific Event.\n  *\n  * @return 0 on success or negative error value on failure.\n  */\nint bt_hci_register_vnd_evt_cb(bt_hci_vnd_evt_cb_t cb);\n\n#if (BFLB_BT_CO_THREAD)\nstruct k_thread *bt_get_co_thread(void);\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __BT_HCI_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/hci_raw.h",
    "content": "/** @file\n *  @brief Bluetooth HCI RAW channel handling\n */\n\n/*\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_HCI_RAW_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_HCI_RAW_H_\n\n/**\n * @brief HCI RAW channel\n * @defgroup hci_raw HCI RAW channel\n * @ingroup bluetooth\n * @{\n */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** @brief Send packet to the Bluetooth controller\n *\n * Send packet to the Bluetooth controller. Caller needs to\n * implement netbuf pool.\n *\n * @param buf netbuf packet to be send\n *\n * @return Zero on success or (negative) error code otherwise.\n */\nint bt_send(struct net_buf *buf);\n\n/** @brief Enable Bluetooth RAW channel\n *\n *  Enable Bluetooth RAW HCI channel.\n *\n *  @param rx_queue netbuf queue where HCI packets received from the Bluetooth\n *  controller are to be queued. The queue is defined in the caller while\n *  the available buffers pools are handled in the stack.\n *\n *  @return Zero on success or (negative) error code otherwise.\n */\nint bt_enable_raw(struct k_fifo *rx_queue);\n\n#ifdef __cplusplus\n}\n#endif\n/**\n * @}\n */\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_HCI_RAW_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/hci_vs.h",
    "content": "/* hci_vs.h - Bluetooth Host Control Interface Vendor Specific definitions */\n\n/*\n * Copyright (c) 2017-2018 Nordic Semiconductor ASA\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_HCI_VS_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_HCI_VS_H_\n\n#include <hci_host.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define BT_HCI_VS_HW_PLAT_INTEL  0x0001\n#define BT_HCI_VS_HW_PLAT_NORDIC 0x0002\n#define BT_HCI_VS_HW_PLAT_NXP    0x0003\n\n#define BT_HCI_VS_HW_VAR_NORDIC_NRF51X 0x0001\n#define BT_HCI_VS_HW_VAR_NORDIC_NRF52X 0x0002\n#define BT_HCI_VS_HW_VAR_NORDIC_NRF53X 0x0003\n\n#define BT_HCI_VS_FW_VAR_STANDARD_CTLR 0x0001\n#define BT_HCI_VS_FW_VAR_VS_CTLR       0x0002\n#define BT_HCI_VS_FW_VAR_FW_LOADER     0x0003\n#define BT_HCI_VS_FW_VAR_RESCUE_IMG    0x0004\n\n#if !defined(BFLB_BLE)\n#define BT_HCI_OP_VS_READ_VERSION_INFO BT_OP(BT_OGF_VS, 0x0001)\nstruct bt_hci_rp_vs_read_version_info {\n    u8_t status;\n    u16_t hw_platform;\n    u16_t hw_variant;\n    u8_t fw_variant;\n    u8_t fw_version;\n    u16_t fw_revision;\n    u32_t fw_build;\n} __packed;\n\n#define BT_HCI_OP_VS_READ_SUPPORTED_COMMANDS BT_OP(BT_OGF_VS, 0x0002)\nstruct bt_hci_rp_vs_read_supported_commands {\n    u8_t status;\n    u8_t commands[64];\n} __packed;\n\n#define BT_HCI_OP_VS_READ_SUPPORTED_FEATURES BT_OP(BT_OGF_VS, 0x0003)\nstruct bt_hci_rp_vs_read_supported_features {\n    u8_t status;\n    u8_t features[8];\n} __packed;\n\n#define BT_HCI_OP_VS_SET_EVENT_MASK BT_OP(BT_OGF_VS, 0x0004)\nstruct bt_hci_cp_vs_set_event_mask {\n    u8_t event_mask[8];\n} __packed;\n\n#define BT_HCI_VS_RESET_SOFT 0x00\n#define BT_HCI_VS_RESET_HARD 0x01\n#define BT_HCI_OP_VS_RESET   BT_OP(BT_OGF_VS, 0x0005)\nstruct bt_hci_cp_vs_reset {\n    u8_t type;\n} __packed;\n\n#define BT_HCI_OP_VS_WRITE_BD_ADDR BT_OP(BT_OGF_VS, 0x0006)\nstruct bt_hci_cp_vs_write_bd_addr {\n    bt_addr_t bdaddr;\n} __packed;\n\n#define BT_HCI_VS_TRACE_DISABLED 0x00\n#define BT_HCI_VS_TRACE_ENABLED  0x01\n\n#define BT_HCI_VS_TRACE_HCI_EVTS      0x00\n#define BT_HCI_VS_TRACE_VDC           0x01\n#define BT_HCI_OP_VS_SET_TRACE_ENABLE BT_OP(BT_OGF_VS, 0x0007)\nstruct bt_hci_cp_vs_set_trace_enable {\n    u8_t enable;\n    u8_t type;\n} __packed;\n\n#define BT_HCI_OP_VS_READ_BUILD_INFO BT_OP(BT_OGF_VS, 0x0008)\nstruct bt_hci_rp_vs_read_build_info {\n    u8_t status;\n    u8_t info[0];\n} __packed;\n\nstruct bt_hci_vs_static_addr {\n    bt_addr_t bdaddr;\n    u8_t ir[16];\n} __packed;\n\n#define BT_HCI_OP_VS_READ_STATIC_ADDRS BT_OP(BT_OGF_VS, 0x0009)\nstruct bt_hci_rp_vs_read_static_addrs {\n    u8_t status;\n    u8_t num_addrs;\n    struct bt_hci_vs_static_addr a[0];\n} __packed;\n\n#define BT_HCI_OP_VS_READ_KEY_HIERARCHY_ROOTS BT_OP(BT_OGF_VS, 0x000a)\nstruct bt_hci_rp_vs_read_key_hierarchy_roots {\n    u8_t status;\n    u8_t ir[16];\n    u8_t er[16];\n} __packed;\n\n#define BT_HCI_OP_VS_READ_CHIP_TEMP BT_OP(BT_OGF_VS, 0x000b)\nstruct bt_hci_rp_vs_read_chip_temp {\n    u8_t status;\n    s8_t temps;\n} __packed;\n\nstruct bt_hci_vs_cmd {\n    u16_t vendor_id;\n    u16_t opcode_base;\n} __packed;\n\n#define BT_HCI_VS_VID_ANDROID             0x0001\n#define BT_HCI_VS_VID_MICROSOFT           0x0002\n#define BT_HCI_OP_VS_READ_HOST_STACK_CMDS BT_OP(BT_OGF_VS, 0x000c)\nstruct bt_hci_rp_vs_read_host_stack_cmds {\n    u8_t status;\n    u8_t num_cmds;\n    struct bt_hci_vs_cmd c[0];\n} __packed;\n\n#define BT_HCI_VS_SCAN_REQ_REPORTS_DISABLED 0x00\n#define BT_HCI_VS_SCAN_REQ_REPORTS_ENABLED  0x01\n#define BT_HCI_OP_VS_SET_SCAN_REQ_REPORTS   BT_OP(BT_OGF_VS, 0x000d)\nstruct bt_hci_cp_vs_set_scan_req_reports {\n    u8_t enable;\n} __packed;\n#endif //BFLB_BLE\n\n#if defined(CONFIG_SET_TX_PWR)\n#define BT_HCI_OP_VS_SET_TX_PWR BT_OP(BT_OGF_VS, 0x0061)\nstruct bt_hci_cp_vs_set_tx_pwr {\n    int8_t power;\n} __packed;\n#endif\n\n/* Events */\n\nstruct bt_hci_evt_vs {\n    u8_t subevent;\n} __packed;\n\n#define BT_HCI_EVT_VS_FATAL_ERROR 0x02\nstruct bt_hci_evt_vs_fatal_error {\n    u64_t pc;\n    u8_t err_info[0];\n} __packed;\n\n#define BT_HCI_VS_TRACE_LMP_TX      0x01\n#define BT_HCI_VS_TRACE_LMP_RX      0x02\n#define BT_HCI_VS_TRACE_LLCP_TX     0x03\n#define BT_HCI_VS_TRACE_LLCP_RX     0x04\n#define BT_HCI_VS_TRACE_LE_CONN_IND 0x05\n#define BT_HCI_EVT_VS_TRACE_INFO    0x03\nstruct bt_hci_evt_vs_trace_info {\n    u8_t type;\n    u8_t data[0];\n} __packed;\n\n#define BT_HCI_EVT_VS_SCAN_REQ_RX 0x04\nstruct bt_hci_evt_vs_scan_req_rx {\n    bt_addr_le_t addr;\n    s8_t rssi;\n} __packed;\n\n/* Event mask bits */\n\n#define BT_EVT_MASK_VS_FATAL_ERROR BT_EVT_BIT(1)\n#define BT_EVT_MASK_VS_TRACE_INFO  BT_EVT_BIT(2)\n#define BT_EVT_MASK_VS_SCAN_REQ_RX BT_EVT_BIT(3)\n\n/* Mesh HCI commands */\n#define BT_HCI_MESH_REVISION 0x01\n\n#define BT_HCI_OP_VS_MESH      BT_OP(BT_OGF_VS, 0x0042)\n#define BT_HCI_MESH_EVT_PREFIX 0xF0\n\nstruct bt_hci_cp_mesh {\n    u8_t opcode;\n} __packed;\n\n#define BT_HCI_OC_MESH_GET_OPTS 0x00\nstruct bt_hci_rp_mesh_get_opts {\n    u8_t status;\n    u8_t opcode;\n    u8_t revision;\n    u8_t ch_map;\n    s8_t min_tx_power;\n    s8_t max_tx_power;\n    u8_t max_scan_filter;\n    u8_t max_filter_pattern;\n    u8_t max_adv_slot;\n    u8_t max_tx_window;\n    u8_t evt_prefix_len;\n    u8_t evt_prefix;\n} __packed;\n\n#define BT_HCI_MESH_PATTERN_LEN_MAX 0x0f\n\n#define BT_HCI_OC_MESH_SET_SCAN_FILTER 0x01\nstruct bt_hci_mesh_pattern {\n    u8_t pattern_len;\n    u8_t pattern[0];\n} __packed;\n\nstruct bt_hci_cp_mesh_set_scan_filter {\n    u8_t scan_filter;\n    u8_t filter_dup;\n    u8_t num_patterns;\n    struct bt_hci_mesh_pattern patterns[0];\n} __packed;\nstruct bt_hci_rp_mesh_set_scan_filter {\n    u8_t status;\n    u8_t opcode;\n    u8_t scan_filter;\n} __packed;\n\n#define BT_HCI_OC_MESH_ADVERTISE 0x02\nstruct bt_hci_cp_mesh_advertise {\n    u8_t adv_slot;\n    u8_t own_addr_type;\n    bt_addr_t random_addr;\n    u8_t ch_map;\n    s8_t tx_power;\n    u8_t min_tx_delay;\n    u8_t max_tx_delay;\n    u8_t retx_count;\n    u8_t retx_interval;\n    u8_t scan_delay;\n    u16_t scan_duration;\n    u8_t scan_filter;\n    u8_t data_len;\n    u8_t data[31];\n} __packed;\nstruct bt_hci_rp_mesh_advertise {\n    u8_t status;\n    u8_t opcode;\n    u8_t adv_slot;\n} __packed;\n\n#define BT_HCI_OC_MESH_ADVERTISE_TIMED 0x03\nstruct bt_hci_cp_mesh_advertise_timed {\n    u8_t adv_slot;\n    u8_t own_addr_type;\n    bt_addr_t random_addr;\n    u8_t ch_map;\n    s8_t tx_power;\n    u8_t retx_count;\n    u8_t retx_interval;\n    u32_t instant;\n    u16_t tx_delay;\n    u16_t tx_window;\n    u8_t data_len;\n    u8_t data[31];\n} __packed;\nstruct bt_hci_rp_mesh_advertise_timed {\n    u8_t status;\n    u8_t opcode;\n    u8_t adv_slot;\n} __packed;\n\n#define BT_HCI_OC_MESH_ADVERTISE_CANCEL 0x04\nstruct bt_hci_cp_mesh_advertise_cancel {\n    u8_t adv_slot;\n} __packed;\nstruct bt_hci_rp_mesh_advertise_cancel {\n    u8_t status;\n    u8_t opcode;\n    u8_t adv_slot;\n} __packed;\n\n#define BT_HCI_OC_MESH_SET_SCANNING 0x05\nstruct bt_hci_cp_mesh_set_scanning {\n    u8_t enable;\n    u8_t ch_map;\n    u8_t scan_filter;\n} __packed;\nstruct bt_hci_rp_mesh_set_scanning {\n    u8_t status;\n    u8_t opcode;\n} __packed;\n\n/* Events */\nstruct bt_hci_evt_mesh {\n    u8_t prefix;\n    u8_t subevent;\n} __packed;\n\n#define BT_HCI_EVT_MESH_ADV_COMPLETE 0x00\nstruct bt_hci_evt_mesh_adv_complete {\n    u8_t adv_slot;\n} __packed;\n\n#define BT_HCI_EVT_MESH_SCANNING_REPORT 0x01\nstruct bt_hci_evt_mesh_scan_report {\n    bt_addr_le_t addr;\n    u8_t chan;\n    s8_t rssi;\n    u32_t instant;\n    u8_t data_len;\n    u8_t data[0];\n} __packed;\nstruct bt_hci_evt_mesh_scanning_report {\n    u8_t num_reports;\n    struct bt_hci_evt_mesh_scan_report reports[0];\n} __packed;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __BT_HCI_VS_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/hfp_hf.h",
    "content": "/** @file\n *  @brief Handsfree Profile handling.\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_HFP_HF_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_HFP_HF_H_\n\n/**\n * @brief Hands Free Profile (HFP)\n * @defgroup bt_hfp Hands Free Profile (HFP)\n * @ingroup bluetooth\n * @{\n */\n\n#include <bluetooth.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* AT Commands */\nenum bt_hfp_hf_at_cmd {\n    BT_HFP_HF_ATA,\n    BT_HFP_HF_AT_CHUP,\n};\n\n/*\n * Command complete types for the application\n */\n#define HFP_HF_CMD_OK            0\n#define HFP_HF_CMD_ERROR         1\n#define HFP_HF_CMD_CME_ERROR     2\n#define HFP_HF_CMD_UNKNOWN_ERROR 4\n\n/** @brief HFP HF Command completion field */\nstruct bt_hfp_hf_cmd_complete {\n    /* Command complete status */\n    uint8_t type;\n    /* CME error number to be added */\n    uint8_t cme;\n};\n\n/** @brief HFP profile application callback */\nstruct bt_hfp_hf_cb {\n    /** HF connected callback to application\n\t *\n\t *  If this callback is provided it will be called whenever the\n\t *  connection completes.\n\t *\n\t *  @param conn Connection object.\n\t */\n    void (*connected)(struct bt_conn *conn);\n    /** HF disconnected callback to application\n\t *\n\t *  If this callback is provided it will be called whenever the\n\t *  connection gets disconnected, including when a connection gets\n\t *  rejected or cancelled or any error in SLC establisment.\n\t *\n\t *  @param conn Connection object.\n\t */\n    void (*disconnected)(struct bt_conn *conn);\n    /** HF indicator Callback\n\t *\n\t *  This callback provides service indicator value to the application\n\t *\n\t *  @param conn Connection object.\n\t *  @param value service indicator value received from the AG.\n\t */\n    void (*service)(struct bt_conn *conn, uint32_t value);\n    /** HF indicator Callback\n\t *\n\t *  This callback provides call indicator value to the application\n\t *\n\t *  @param conn Connection object.\n\t *  @param value call indicator value received from the AG.\n\t */\n    void (*call)(struct bt_conn *conn, uint32_t value);\n    /** HF indicator Callback\n\t *\n\t *  This callback provides call setup indicator value to the application\n\t *\n\t *  @param conn Connection object.\n\t *  @param value call setup indicator value received from the AG.\n\t */\n    void (*call_setup)(struct bt_conn *conn, uint32_t value);\n    /** HF indicator Callback\n\t *\n\t *  This callback provides call held indicator value to the application\n\t *\n\t *  @param conn Connection object.\n\t *  @param value call held indicator value received from the AG.\n\t */\n    void (*call_held)(struct bt_conn *conn, uint32_t value);\n    /** HF indicator Callback\n\t *\n\t *  This callback provides signal indicator value to the application\n\t *\n\t *  @param conn Connection object.\n\t *  @param value signal indicator value received from the AG.\n\t */\n    void (*signal)(struct bt_conn *conn, uint32_t value);\n    /** HF indicator Callback\n\t *\n\t *  This callback provides roaming indicator value to the application\n\t *\n\t *  @param conn Connection object.\n\t *  @param value roaming indicator value received from the AG.\n\t */\n    void (*roam)(struct bt_conn *conn, uint32_t value);\n    /** HF indicator Callback\n\t *\n\t *  This callback battery service indicator value to the application\n\t *\n\t *  @param conn Connection object.\n\t *  @param value battery indicator value received from the AG.\n\t */\n    void (*battery)(struct bt_conn *conn, uint32_t value);\n    /** HF incoming call Ring indication callback to application\n\t *\n\t *  If this callback is provided it will be called whenever there\n\t *  is an incoming call.\n\t *\n\t *  @param conn Connection object.\n\t */\n    void (*ring_indication)(struct bt_conn *conn);\n    /** HF notify command completed callback to application\n\t *\n\t *  The command sent from the application is notified about its status\n\t *\n\t *  @param conn Connection object.\n\t *  @param cmd structure contains status of the command including cme.\n\t */\n    void (*cmd_complete_cb)(struct bt_conn *conn,\n                            struct bt_hfp_hf_cmd_complete *cmd);\n};\n\n/**\n* @brief Initialize HFP_HF layer\n*/\nint bt_hfp_hf_init(void);\n\n/** @brief Handsfree client Send AT\n *\n *  Send specific AT commands to handsfree client profile.\n *\n *  @param conn Connection object.\n *  @param cmd AT command to be sent.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_hfp_hf_send_cmd(struct bt_conn *conn, enum bt_hfp_hf_at_cmd cmd);\n\n#ifdef __cplusplus\n}\n#endif\n\n/**\n * @}\n */\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_HFP_HF_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/iso.h",
    "content": "/** @file\n *  @brief Bluetooth ISO handling\n */\n\n/*\n * Copyright (c) 2020 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_ISO_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_ISO_H_\n\n/**\n * @brief ISO\n * @defgroup bt_iso ISO\n * @ingroup bluetooth\n * @{\n */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <atomic.h>\n#include <buf.h>\n#include <conn.h>\n#include <hci_host.h>\n\n/** @def BT_ISO_CHAN_SEND_RESERVE\n *  @brief Headroom needed for outgoing buffers\n */\n#define BT_ISO_CHAN_SEND_RESERVE (CONFIG_BT_HCI_RESERVE + \\\n                                  BT_HCI_ISO_HDR_SIZE +   \\\n                                  BT_HCI_ISO_DATA_HDR_SIZE)\n\nstruct bt_iso_chan;\n\n/** @brief Life-span states of ISO channel. Used only by internal APIs\n *  dealing with setting channel to proper state depending on operational\n *  context.\n */\nenum {\n    /** Channel disconnected */\n    BT_ISO_DISCONNECTED,\n    /** Channel bound to a connection */\n    BT_ISO_BOUND,\n    /** Channel in connecting state */\n    BT_ISO_CONNECT,\n    /** Channel ready for upper layer traffic on it */\n    BT_ISO_CONNECTED,\n    /** Channel in disconnecting state */\n    BT_ISO_DISCONNECT,\n};\n\n/** @brief ISO Channel structure. */\nstruct bt_iso_chan {\n    /** Channel connection reference */\n    struct bt_conn *conn;\n    /** Channel operations reference */\n    struct bt_iso_chan_ops *ops;\n    /** Channel QoS reference */\n    struct bt_iso_chan_qos *qos;\n    /** Channel data path reference*/\n    struct bt_iso_chan_path *path;\n    sys_snode_t node;\n    uint8_t state;\n    bt_security_t required_sec_level;\n};\n\n/** @brief Audio QoS direction */\nenum {\n    BT_ISO_CHAN_QOS_IN,\n    BT_ISO_CHAN_QOS_OUT,\n    BT_ISO_CHAN_QOS_INOUT\n};\n\n/** @brief ISO Channel QoS structure. */\nstruct bt_iso_chan_qos {\n    /** @brief Channel direction\n\t *\n\t *  Possible values: BT_ISO_CHAN_QOS_IN, BT_ISO_CHAN_QOS_OUT or\n\t *  BT_ISO_CHAN_QOS_INOUT.\n\t */\n    uint8_t dir;\n    /** Channel interval */\n    uint32_t interval;\n    /** Channel SCA */\n    uint8_t sca;\n    /** Channel packing mode */\n    uint8_t packing;\n    /** Channel framing mode */\n    uint8_t framing;\n    /** Channel Latency */\n    uint16_t latency;\n    /** Channel SDU */\n    uint8_t sdu;\n    /** Channel PHY */\n    uint8_t phy;\n    /** Channel Retransmission Number */\n    uint8_t rtn;\n};\n\n/** @brief ISO Channel Data Path structure. */\nstruct bt_iso_chan_path {\n    /** Default path ID */\n    uint8_t pid;\n    /** Coding Format */\n    uint8_t format;\n    /** Company ID */\n    uint16_t cid;\n    /** Vendor-defined Codec ID */\n    uint16_t vid;\n    /** Controller Delay */\n    uint32_t delay;\n    /** Codec Configuration length*/\n    uint8_t cc_len;\n    /** Codec Configuration */\n    uint8_t cc[0];\n};\n\n/** @brief ISO Channel operations structure. */\nstruct bt_iso_chan_ops {\n    /** @brief Channel connected callback\n\t *\n\t *  If this callback is provided it will be called whenever the\n\t *  connection completes.\n\t *\n\t *  @param chan The channel that has been connected\n\t */\n    void (*connected)(struct bt_iso_chan *chan);\n\n    /** @brief Channel disconnected callback\n\t *\n\t *  If this callback is provided it will be called whenever the\n\t *  channel is disconnected, including when a connection gets\n\t *  rejected.\n\t *\n\t *  @param chan The channel that has been Disconnected\n\t */\n    void (*disconnected)(struct bt_iso_chan *chan);\n\n    /** @brief Channel alloc_buf callback\n\t *\n\t *  If this callback is provided the channel will use it to allocate\n\t *  buffers to store incoming data.\n\t *\n\t *  @param chan The channel requesting a buffer.\n\t *\n\t *  @return Allocated buffer.\n\t */\n    struct net_buf *(*alloc_buf)(struct bt_iso_chan *chan);\n\n    /** @brief Channel recv callback\n\t *\n\t *  @param chan The channel receiving data.\n\t *  @param buf Buffer containing incoming data.\n\t */\n    void (*recv)(struct bt_iso_chan *chan, struct net_buf *buf);\n};\n\n/** @brief ISO Server structure. */\nstruct bt_iso_server {\n    /** Required minimim security level */\n    bt_security_t sec_level;\n\n    /** @brief Server accept callback\n\t *\n\t *  This callback is called whenever a new incoming connection requires\n\t *  authorization.\n\t *\n\t *  @param conn The connection that is requesting authorization\n\t *  @param chan Pointer to receive the allocated channel\n\t *\n\t *  @return 0 in case of success or negative value in case of error.\n\t */\n    int (*accept)(struct bt_conn *conn, struct bt_iso_chan **chan);\n};\n\n/** @brief Register ISO server.\n *\n *  Register ISO server, each new connection is authorized using the accept()\n *  callback which in case of success shall allocate the channel structure\n *  to be used by the new connection.\n *\n *  @param server Server structure.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_iso_server_register(struct bt_iso_server *server);\n\n/** @brief Bind ISO channels\n *\n *  Bind ISO channels with existing ACL connections, Channel objects passed\n *  (over an address of it) shouldn't be instantiated in application as\n *  standalone.\n *\n *  @param conns Array of ACL connection objects\n *  @param num_conns Number of connection objects\n *  @param chans Array of ISO Channel objects to be created\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_iso_chan_bind(struct bt_conn **conns, uint8_t num_conns,\n                     struct bt_iso_chan **chans);\n\n/** @brief Connect ISO channels\n *\n *  Connect ISO channels, once the connection is completed each channel\n *  connected() callback will be called. If the connection is rejected\n *  disconnected() callback is called instead.\n *  Channel object passed (over an address of it) as second parameter shouldn't\n *  be instantiated in application as standalone.\n *\n *  @param chans Array of ISO channel objects\n *  @param num_chans Number of channel objects\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_iso_chan_connect(struct bt_iso_chan **chans, uint8_t num_chans);\n\n/** @brief Disconnect ISO channel\n *\n *  Disconnect ISO channel, if the connection is pending it will be\n *  canceled and as a result the channel disconnected() callback is called.\n *  Regarding to input parameter, to get details see reference description\n *  to bt_iso_chan_connect() API above.\n *\n *  @param chan Channel object.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_iso_chan_disconnect(struct bt_iso_chan *chan);\n\n/** @brief Send data to ISO channel\n *\n *  Send data from buffer to the channel. If credits are not available, buf will\n *  be queued and sent as and when credits are received from peer.\n *  Regarding to first input parameter, to get details see reference description\n *  to bt_iso_chan_connect() API above.\n *\n *  @param chan Channel object.\n *  @param buf Buffer containing data to be sent.\n *\n *  @return Bytes sent in case of success or negative value in case of error.\n */\nint bt_iso_chan_send(struct bt_iso_chan *chan, struct net_buf *buf);\n\n#ifdef __cplusplus\n}\n#endif\n\n/**\n * @}\n */\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_ISO_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/l2cap.h",
    "content": "/** @file\n *  @brief Bluetooth L2CAP handling\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_L2CAP_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_L2CAP_H_\n\n/**\n * @brief L2CAP\n * @defgroup bt_l2cap L2CAP\n * @ingroup bluetooth\n * @{\n */\n\n#include <../bluetooth/buf.h>\n#include <conn.h>\n#include <hci_host.h>\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* L2CAP header size, used for buffer size calculations */\n#define BT_L2CAP_HDR_SIZE 4\n\n/** @def BT_L2CAP_BUF_SIZE\n *\n *   Helper to calculate needed outgoing buffer size, useful e.g. for\n *   creating buffer pools.\n *\n *   @param mtu Needed L2CAP MTU.\n *\n *   @return Needed buffer size to match the requested L2CAP MTU.\n */\n#define BT_L2CAP_BUF_SIZE(mtu) (BT_BUF_RESERVE +                          \\\n                                BT_HCI_ACL_HDR_SIZE + BT_L2CAP_HDR_SIZE + \\\n                                (mtu))\n\nstruct bt_l2cap_chan;\n\n/** @typedef bt_l2cap_chan_destroy_t\n *  @brief Channel destroy callback\n *\n *  @param chan Channel object.\n */\ntypedef void (*bt_l2cap_chan_destroy_t)(struct bt_l2cap_chan *chan);\n\n/** @brief Life-span states of L2CAP CoC channel. Used only by internal APIs\n *  dealing with setting channel to proper state depending on operational\n *  context.\n */\ntypedef enum bt_l2cap_chan_state {\n    /** Channel disconnected */\n    BT_L2CAP_DISCONNECTED,\n    /** Channel in connecting state */\n    BT_L2CAP_CONNECT,\n    /** Channel in config state, BR/EDR specific */\n    BT_L2CAP_CONFIG,\n    /** Channel ready for upper layer traffic on it */\n    BT_L2CAP_CONNECTED,\n    /** Channel in disconnecting state */\n    BT_L2CAP_DISCONNECT,\n\n} __packed bt_l2cap_chan_state_t;\n\n/** @brief Status of L2CAP channel. */\ntypedef enum bt_l2cap_chan_status {\n    /** Channel output status */\n    BT_L2CAP_STATUS_OUT,\n\n    /* Total number of status - must be at the end of the enum */\n    BT_L2CAP_NUM_STATUS,\n} __packed bt_l2cap_chan_status_t;\n\n/** @brief L2CAP Channel structure. */\nstruct bt_l2cap_chan {\n    /** Channel connection reference */\n    struct bt_conn *conn;\n    /** Channel operations reference */\n    struct bt_l2cap_chan_ops *ops;\n    sys_snode_t node;\n    bt_l2cap_chan_destroy_t destroy;\n    /* Response Timeout eXpired (RTX) timer */\n    struct k_delayed_work rtx_work;\n    ATOMIC_DEFINE(status, BT_L2CAP_NUM_STATUS);\n\n#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)\n    bt_l2cap_chan_state_t state;\n    /** Remote PSM to be connected */\n    u16_t psm;\n    /** Helps match request context during CoC */\n    u8_t ident;\n    bt_security_t required_sec_level;\n#endif /* CONFIG_BT_L2CAP_DYNAMIC_CHANNEL */\n};\n\n/** @brief LE L2CAP Endpoint structure. */\nstruct bt_l2cap_le_endpoint {\n    /** Endpoint CID */\n    u16_t cid;\n    /** Endpoint Maximum Transmission Unit */\n    u16_t mtu;\n    /** Endpoint Maximum PDU payload Size */\n    u16_t mps;\n    /** Endpoint initial credits */\n    u16_t init_credits;\n    /** Endpoint credits */\n    struct k_sem credits;\n};\n\n/** @brief LE L2CAP Channel structure. */\nstruct bt_l2cap_le_chan {\n    /** Common L2CAP channel reference object */\n    struct bt_l2cap_chan chan;\n    /** Channel Receiving Endpoint */\n    struct bt_l2cap_le_endpoint rx;\n    /** Channel Transmission Endpoint */\n    struct bt_l2cap_le_endpoint tx;\n    /** Channel Transmission queue */\n    struct k_fifo tx_queue;\n    /** Channel Pending Transmission buffer  */\n    struct net_buf *tx_buf;\n    /** Segment SDU packet from upper layer */\n    struct net_buf *_sdu;\n    u16_t _sdu_len;\n\n    struct k_work rx_work;\n    struct k_fifo rx_queue;\n};\n\n/** @def BT_L2CAP_LE_CHAN(_ch)\n *  @brief Helper macro getting container object of type bt_l2cap_le_chan\n *  address having the same container chan member address as object in question.\n *\n *  @param _ch Address of object of bt_l2cap_chan type\n *\n *  @return Address of in memory bt_l2cap_le_chan object type containing\n *  the address of in question object.\n */\n#define BT_L2CAP_LE_CHAN(_ch) CONTAINER_OF(_ch, struct bt_l2cap_le_chan, chan)\n\n/** @brief BREDR L2CAP Endpoint structure. */\nstruct bt_l2cap_br_endpoint {\n    /** Endpoint CID */\n    u16_t cid;\n    /** Endpoint Maximum Transmission Unit */\n    u16_t mtu;\n};\n\n/** @brief BREDR L2CAP Channel structure. */\nstruct bt_l2cap_br_chan {\n    /** Common L2CAP channel reference object */\n    struct bt_l2cap_chan chan;\n    /** Channel Receiving Endpoint */\n    struct bt_l2cap_br_endpoint rx;\n    /** Channel Transmission Endpoint */\n    struct bt_l2cap_br_endpoint tx;\n    /* For internal use only */\n    atomic_t flags[1];\n};\n\n/** @brief L2CAP Channel operations structure. */\nstruct bt_l2cap_chan_ops {\n    /** Channel connected callback\n\t *\n\t *  If this callback is provided it will be called whenever the\n\t *  connection completes.\n\t *\n\t *  @param chan The channel that has been connected\n\t */\n    void (*connected)(struct bt_l2cap_chan *chan);\n\n    /** Channel disconnected callback\n\t *\n\t *  If this callback is provided it will be called whenever the\n\t *  channel is disconnected, including when a connection gets\n\t *  rejected.\n\t *\n\t *  @param chan The channel that has been Disconnected\n\t */\n    void (*disconnected)(struct bt_l2cap_chan *chan);\n\n    /** Channel encrypt_change callback\n\t *\n\t *  If this callback is provided it will be called whenever the\n\t *  security level changed (indirectly link encryption done) or\n\t *  authentication procedure fails. In both cases security initiator\n\t *  and responder got the final status (HCI status) passed by\n\t *  related to encryption and authentication events from local host's\n\t *  controller.\n\t *\n\t *  @param chan The channel which has made encryption status changed.\n\t *  @param status HCI status of performed security procedure caused\n\t *  by channel security requirements. The value is populated\n\t *  by HCI layer and set to 0 when success and to non-zero (reference to\n\t *  HCI Error Codes) when security/authentication failed.\n\t */\n    void (*encrypt_change)(struct bt_l2cap_chan *chan, u8_t hci_status);\n\n    /** Channel alloc_buf callback\n\t *\n\t *  If this callback is provided the channel will use it to allocate\n\t *  buffers to store incoming data.\n\t *\n\t *  @param chan The channel requesting a buffer.\n\t *\n\t *  @return Allocated buffer.\n\t */\n    struct net_buf *(*alloc_buf)(struct bt_l2cap_chan *chan);\n\n    /** Channel recv callback\n\t *\n\t *  @param chan The channel receiving data.\n\t *  @param buf Buffer containing incoming data.\n\t *\n\t *  @return 0 in case of success or negative value in case of error.\n\t *  If -EINPROGRESS is returned user has to confirm once the data has\n\t *  been processed by calling bt_l2cap_chan_recv_complete passing back\n\t *  the buffer received with its original user_data which contains the\n\t *  number of segments/credits used by the packet.\n\t */\n    int (*recv)(struct bt_l2cap_chan *chan, struct net_buf *buf);\n\n    /*  Channel sent callback\n\t *\n\t *  If this callback is provided it will be called whenever a SDU has\n\t *  been completely sent.\n\t *\n\t *  @param chan The channel which has sent data.\n\t */\n    void (*sent)(struct bt_l2cap_chan *chan);\n\n    /*  Channel status callback\n\t *\n\t *  If this callback is provided it will be called whenever the\n\t *  channel status changes.\n\t *\n\t *  @param chan The channel which status changed\n\t *  @param status The channel status\n\t */\n    void (*status)(struct bt_l2cap_chan *chan, atomic_t *status);\n\n#if defined(BFLB_BLE_MTU_CHANGE_CB)\n    void (*mtu_changed)(struct bt_l2cap_chan *chan, u16_t mtu);\n#endif\n};\n\n/** @def BT_L2CAP_CHAN_SEND_RESERVE\n *  @brief Headroom needed for outgoing buffers\n */\n#define BT_L2CAP_CHAN_SEND_RESERVE (BT_BUF_RESERVE + 4 + 4)\n\n/** @brief L2CAP Server structure. */\nstruct bt_l2cap_server {\n    /** Server PSM. Possible values:\n\t *\n\t *  0               A dynamic value will be auto-allocated when\n\t *                  bt_l2cap_server_register() is called.\n\t *\n\t *  0x0001-0x007f   Standard, Bluetooth SIG-assigned fixed values.\n\t *\n\t *  0x0080-0x00ff   Dynamically allocated. May be pre-set by the\n\t *                  application before server registration (not\n\t *                  recommended however), or auto-allocated by the\n\t *                  stack if the app gave 0 as the value.\n\t */\n    u16_t psm;\n\n    /** Required minimim security level */\n    bt_security_t sec_level;\n\n    /** Server accept callback\n\t *\n\t *  This callback is called whenever a new incoming connection requires\n\t *  authorization.\n\t *\n\t *  @param conn The connection that is requesting authorization\n\t *  @param chan Pointer to received the allocated channel\n\t *\n\t *  @return 0 in case of success or negative value in case of error.\n\t *  Possible return values:\n\t *  -ENOMEM if no available space for new channel.\n\t *  -EACCES if application did not authorize the connection.\n\t *  -EPERM if encryption key size is too short.\n\t */\n    int (*accept)(struct bt_conn *conn, struct bt_l2cap_chan **chan);\n\n    sys_snode_t node;\n};\n\n/** @brief Register L2CAP server.\n *\n *  Register L2CAP server for a PSM, each new connection is authorized using\n *  the accept() callback which in case of success shall allocate the channel\n *  structure to be used by the new connection.\n *\n *  For fixed, SIG-assigned PSMs (in the range 0x0001-0x007f) the PSM should\n *  be assigned to server->psm before calling this API. For dynamic PSMs\n *  (in the range 0x0080-0x00ff) server->psm may be pre-set to a given value\n *  (this is however not recommended) or be left as 0, in which case upon\n *  return a newly allocated value will have been assigned to it. For\n *  dynamically allocated values the expectation is that it's exposed through\n *  a GATT service, and that's how L2CAP clients discover how to connect to\n *  the server.\n *\n *  @param server Server structure.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_l2cap_server_register(struct bt_l2cap_server *server);\n\n/** @brief Register L2CAP server on BR/EDR oriented connection.\n *\n *  Register L2CAP server for a PSM, each new connection is authorized using\n *  the accept() callback which in case of success shall allocate the channel\n *  structure to be used by the new connection.\n *\n *  @param server Server structure.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_l2cap_br_server_register(struct bt_l2cap_server *server);\n\n/** @brief Connect L2CAP channel\n *\n *  Connect L2CAP channel by PSM, once the connection is completed channel\n *  connected() callback will be called. If the connection is rejected\n *  disconnected() callback is called instead.\n *  Channel object passed (over an address of it) as second parameter shouldn't\n *  be instantiated in application as standalone. Instead of, application should\n *  create transport dedicated L2CAP objects, i.e. type of bt_l2cap_le_chan for\n *  LE and/or type of bt_l2cap_br_chan for BR/EDR. Then pass to this API\n *  the location (address) of bt_l2cap_chan type object which is a member\n *  of both transport dedicated objects.\n *\n *  @param conn Connection object.\n *  @param chan Channel object.\n *  @param psm Channel PSM to connect to.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_l2cap_chan_connect(struct bt_conn *conn, struct bt_l2cap_chan *chan,\n                          u16_t psm);\n\n/** @brief Disconnect L2CAP channel\n *\n *  Disconnect L2CAP channel, if the connection is pending it will be\n *  canceled and as a result the channel disconnected() callback is called.\n *  Regarding to input parameter, to get details see reference description\n *  to bt_l2cap_chan_connect() API above.\n *\n *  @param chan Channel object.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_l2cap_chan_disconnect(struct bt_l2cap_chan *chan);\n\n/** @brief Send data to L2CAP channel\n *\n *  Send data from buffer to the channel. If credits are not available, buf will\n *  be queued and sent as and when credits are received from peer.\n *  Regarding to first input parameter, to get details see reference description\n *  to bt_l2cap_chan_connect() API above.\n *\n *  @return Bytes sent in case of success or negative value in case of error.\n */\nint bt_l2cap_chan_send(struct bt_l2cap_chan *chan, struct net_buf *buf);\n\n/** @brief Complete receiving L2CAP channel data\n *\n * Complete the reception of incoming data. This shall only be called if the\n * channel recv callback has returned -EINPROGRESS to process some incoming\n * data. The buffer shall contain the original user_data as that is used for\n * storing the credits/segments used by the packet.\n *\n * @param chan Channel object.\n * @param buf Buffer containing the data.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_l2cap_chan_recv_complete(struct bt_l2cap_chan *chan,\n                                struct net_buf *buf);\n\n#ifdef __cplusplus\n}\n#endif\n\n/**\n * @}\n */\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_L2CAP_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/rfcomm.h",
    "content": "/** @file\n *  @brief Bluetooth RFCOMM handling\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_RFCOMM_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_RFCOMM_H_\n\n/**\n * @brief RFCOMM\n * @defgroup bt_rfcomm RFCOMM\n * @ingroup bluetooth\n * @{\n */\n\n#include <buf.h>\n#include <conn.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* RFCOMM channels (1-30): pre-allocated for profiles to avoid conflicts */\nenum {\n    BT_RFCOMM_CHAN_HFP_HF = 1,\n    BT_RFCOMM_CHAN_HFP_AG,\n    BT_RFCOMM_CHAN_HSP_AG,\n    BT_RFCOMM_CHAN_HSP_HS,\n    BT_RFCOMM_CHAN_SPP,\n};\n\nstruct bt_rfcomm_dlc;\n\n/** @brief RFCOMM DLC operations structure. */\nstruct bt_rfcomm_dlc_ops {\n    /** DLC connected callback\n\t *\n\t *  If this callback is provided it will be called whenever the\n\t *  connection completes.\n\t *\n\t *  @param dlc The dlc that has been connected\n\t */\n    void (*connected)(struct bt_rfcomm_dlc *dlc);\n\n    /** DLC disconnected callback\n\t *\n\t *  If this callback is provided it will be called whenever the\n\t *  dlc is disconnected, including when a connection gets\n\t *  rejected or cancelled (both incoming and outgoing)\n\t *\n\t *  @param dlc The dlc that has been Disconnected\n\t */\n    void (*disconnected)(struct bt_rfcomm_dlc *dlc);\n\n    /** DLC recv callback\n\t *\n\t *  @param dlc The dlc receiving data.\n\t *  @param buf Buffer containing incoming data.\n\t */\n    void (*recv)(struct bt_rfcomm_dlc *dlc, struct net_buf *buf);\n};\n\n/** @brief Role of RFCOMM session and dlc. Used only by internal APIs\n */\ntypedef enum bt_rfcomm_role {\n    BT_RFCOMM_ROLE_ACCEPTOR,\n    BT_RFCOMM_ROLE_INITIATOR\n} __packed bt_rfcomm_role_t;\n\n/** @brief RFCOMM DLC structure. */\nstruct bt_rfcomm_dlc {\n    /* Response Timeout eXpired (RTX) timer */\n    struct k_delayed_work rtx_work;\n\n    /* Queue for outgoing data */\n    struct k_fifo tx_queue;\n\n    /* TX credits, Reuse as a binary sem for MSC FC if CFC is not enabled */\n    struct k_sem tx_credits;\n\n    struct bt_rfcomm_session *session;\n    struct bt_rfcomm_dlc_ops *ops;\n    struct bt_rfcomm_dlc *_next;\n\n    bt_security_t required_sec_level;\n    bt_rfcomm_role_t role;\n\n    uint16_t mtu;\n    uint8_t dlci;\n    uint8_t state;\n    uint8_t rx_credit;\n\n    /* Stack & kernel data for TX thread */\n    struct k_thread tx_thread;\n    //K_KERNEL_STACK_MEMBER(stack, 256); //MBHJ\n};\n\nstruct bt_rfcomm_server {\n    /** Server Channel */\n    uint8_t channel;\n\n    /** Server accept callback\n\t *\n\t *  This callback is called whenever a new incoming connection requires\n\t *  authorization.\n\t *\n\t *  @param conn The connection that is requesting authorization\n\t *  @param dlc Pointer to received the allocated dlc\n\t *\n\t *  @return 0 in case of success or negative value in case of error.\n\t */\n    int (*accept)(struct bt_conn *conn, struct bt_rfcomm_dlc **dlc);\n\n    struct bt_rfcomm_server *_next;\n};\n\n/** @brief Register RFCOMM server\n *\n *  Register RFCOMM server for a channel, each new connection is authorized\n *  using the accept() callback which in case of success shall allocate the dlc\n *  structure to be used by the new connection.\n *\n *  @param server Server structure.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_rfcomm_server_register(struct bt_rfcomm_server *server);\n\n/** @brief Connect RFCOMM channel\n *\n *  Connect RFCOMM dlc by channel, once the connection is completed dlc\n *  connected() callback will be called. If the connection is rejected\n *  disconnected() callback is called instead.\n *\n *  @param conn Connection object.\n *  @param dlc Dlc object.\n *  @param channel Server channel to connect to.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_rfcomm_dlc_connect(struct bt_conn *conn, struct bt_rfcomm_dlc *dlc,\n                          uint8_t channel);\n\n/** @brief Send data to RFCOMM\n *\n *  Send data from buffer to the dlc. Length should be less than or equal to\n *  mtu.\n *\n *  @param dlc Dlc object.\n *  @param buf Data buffer.\n *\n *  @return Bytes sent in case of success or negative value in case of error.\n */\nint bt_rfcomm_dlc_send(struct bt_rfcomm_dlc *dlc, struct net_buf *buf);\n\n/** @brief Disconnect RFCOMM dlc\n *\n *  Disconnect RFCOMM dlc, if the connection is pending it will be\n *  canceled and as a result the dlc disconnected() callback is called.\n *\n *  @param dlc Dlc object.\n *\n *  @return 0 in case of success or negative value in case of error.\n */\nint bt_rfcomm_dlc_disconnect(struct bt_rfcomm_dlc *dlc);\n\n/** @brief Allocate the buffer from pool after reserving head room for RFCOMM,\n *  L2CAP and ACL headers.\n *\n *  @param pool Which pool to take the buffer from.\n *\n *  @return New buffer.\n */\nstruct net_buf *bt_rfcomm_create_pdu(struct net_buf_pool *pool);\n\n#ifdef __cplusplus\n}\n#endif\n\n/**\n * @}\n */\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_RFCOMM_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/sdp.h",
    "content": "/** @file\n *  @brief Service Discovery Protocol handling.\n */\n\n/*\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_SDP_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_SDP_H_\n\n/**\n * @brief Service Discovery Protocol (SDP)\n * @defgroup bt_sdp Service Discovery Protocol (SDP)\n * @ingroup bluetooth\n * @{\n */\n\n#include <../bluetooth/uuid.h>\n#include <../bluetooth/conn.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n * All definitions are based on Bluetooth Assigned Numbers\n * of the Bluetooth Specification\n */\n\n/*\n * Service class identifiers of standard services and service groups\n */\n#define BT_SDP_SDP_SERVER_SVCLASS           0x1000\n#define BT_SDP_BROWSE_GRP_DESC_SVCLASS      0x1001\n#define BT_SDP_PUBLIC_BROWSE_GROUP          0x1002\n#define BT_SDP_SERIAL_PORT_SVCLASS          0x1101\n#define BT_SDP_LAN_ACCESS_SVCLASS           0x1102\n#define BT_SDP_DIALUP_NET_SVCLASS           0x1103\n#define BT_SDP_IRMC_SYNC_SVCLASS            0x1104\n#define BT_SDP_OBEX_OBJPUSH_SVCLASS         0x1105\n#define BT_SDP_OBEX_FILETRANS_SVCLASS       0x1106\n#define BT_SDP_IRMC_SYNC_CMD_SVCLASS        0x1107\n#define BT_SDP_HEADSET_SVCLASS              0x1108\n#define BT_SDP_CORDLESS_TELEPHONY_SVCLASS   0x1109\n#define BT_SDP_AUDIO_SOURCE_SVCLASS         0x110a\n#define BT_SDP_AUDIO_SINK_SVCLASS           0x110b\n#define BT_SDP_AV_REMOTE_TARGET_SVCLASS     0x110c\n#define BT_SDP_ADVANCED_AUDIO_SVCLASS       0x110d\n#define BT_SDP_AV_REMOTE_SVCLASS            0x110e\n#define BT_SDP_AV_REMOTE_CONTROLLER_SVCLASS 0x110f\n#define BT_SDP_INTERCOM_SVCLASS             0x1110\n#define BT_SDP_FAX_SVCLASS                  0x1111\n#define BT_SDP_HEADSET_AGW_SVCLASS          0x1112\n#define BT_SDP_WAP_SVCLASS                  0x1113\n#define BT_SDP_WAP_CLIENT_SVCLASS           0x1114\n#define BT_SDP_PANU_SVCLASS                 0x1115\n#define BT_SDP_NAP_SVCLASS                  0x1116\n#define BT_SDP_GN_SVCLASS                   0x1117\n#define BT_SDP_DIRECT_PRINTING_SVCLASS      0x1118\n#define BT_SDP_REFERENCE_PRINTING_SVCLASS   0x1119\n#define BT_SDP_IMAGING_SVCLASS              0x111a\n#define BT_SDP_IMAGING_RESPONDER_SVCLASS    0x111b\n#define BT_SDP_IMAGING_ARCHIVE_SVCLASS      0x111c\n#define BT_SDP_IMAGING_REFOBJS_SVCLASS      0x111d\n#define BT_SDP_HANDSFREE_SVCLASS            0x111e\n#define BT_SDP_HANDSFREE_AGW_SVCLASS        0x111f\n#define BT_SDP_DIRECT_PRT_REFOBJS_SVCLASS   0x1120\n#define BT_SDP_REFLECTED_UI_SVCLASS         0x1121\n#define BT_SDP_BASIC_PRINTING_SVCLASS       0x1122\n#define BT_SDP_PRINTING_STATUS_SVCLASS      0x1123\n#define BT_SDP_HID_SVCLASS                  0x1124\n#define BT_SDP_HCR_SVCLASS                  0x1125\n#define BT_SDP_HCR_PRINT_SVCLASS            0x1126\n#define BT_SDP_HCR_SCAN_SVCLASS             0x1127\n#define BT_SDP_CIP_SVCLASS                  0x1128\n#define BT_SDP_VIDEO_CONF_GW_SVCLASS        0x1129\n#define BT_SDP_UDI_MT_SVCLASS               0x112a\n#define BT_SDP_UDI_TA_SVCLASS               0x112b\n#define BT_SDP_AV_SVCLASS                   0x112c\n#define BT_SDP_SAP_SVCLASS                  0x112d\n#define BT_SDP_PBAP_PCE_SVCLASS             0x112e\n#define BT_SDP_PBAP_PSE_SVCLASS             0x112f\n#define BT_SDP_PBAP_SVCLASS                 0x1130\n#define BT_SDP_MAP_MSE_SVCLASS              0x1132\n#define BT_SDP_MAP_MCE_SVCLASS              0x1133\n#define BT_SDP_MAP_SVCLASS                  0x1134\n#define BT_SDP_GNSS_SVCLASS                 0x1135\n#define BT_SDP_GNSS_SERVER_SVCLASS          0x1136\n#define BT_SDP_MPS_SC_SVCLASS               0x113a\n#define BT_SDP_MPS_SVCLASS                  0x113b\n#define BT_SDP_PNP_INFO_SVCLASS             0x1200\n#define BT_SDP_GENERIC_NETWORKING_SVCLASS   0x1201\n#define BT_SDP_GENERIC_FILETRANS_SVCLASS    0x1202\n#define BT_SDP_GENERIC_AUDIO_SVCLASS        0x1203\n#define BT_SDP_GENERIC_TELEPHONY_SVCLASS    0x1204\n#define BT_SDP_UPNP_SVCLASS                 0x1205\n#define BT_SDP_UPNP_IP_SVCLASS              0x1206\n#define BT_SDP_UPNP_PAN_SVCLASS             0x1300\n#define BT_SDP_UPNP_LAP_SVCLASS             0x1301\n#define BT_SDP_UPNP_L2CAP_SVCLASS           0x1302\n#define BT_SDP_VIDEO_SOURCE_SVCLASS         0x1303\n#define BT_SDP_VIDEO_SINK_SVCLASS           0x1304\n#define BT_SDP_VIDEO_DISTRIBUTION_SVCLASS   0x1305\n#define BT_SDP_HDP_SVCLASS                  0x1400\n#define BT_SDP_HDP_SOURCE_SVCLASS           0x1401\n#define BT_SDP_HDP_SINK_SVCLASS             0x1402\n#define BT_SDP_GENERIC_ACCESS_SVCLASS       0x1800\n#define BT_SDP_GENERIC_ATTRIB_SVCLASS       0x1801\n#define BT_SDP_APPLE_AGENT_SVCLASS          0x2112\n\n/*\n * Attribute identifier codes\n */\n#define BT_SDP_SERVER_RECORD_HANDLE 0x0000\n\n/*\n * Possible values for attribute-id are listed below.\n * See SDP Spec, section \"Service Attribute Definitions\" for more details.\n */\n#define BT_SDP_ATTR_RECORD_HANDLE          0x0000\n#define BT_SDP_ATTR_SVCLASS_ID_LIST        0x0001\n#define BT_SDP_ATTR_RECORD_STATE           0x0002\n#define BT_SDP_ATTR_SERVICE_ID             0x0003\n#define BT_SDP_ATTR_PROTO_DESC_LIST        0x0004\n#define BT_SDP_ATTR_BROWSE_GRP_LIST        0x0005\n#define BT_SDP_ATTR_LANG_BASE_ATTR_ID_LIST 0x0006\n#define BT_SDP_ATTR_SVCINFO_TTL            0x0007\n#define BT_SDP_ATTR_SERVICE_AVAILABILITY   0x0008\n#define BT_SDP_ATTR_PROFILE_DESC_LIST      0x0009\n#define BT_SDP_ATTR_DOC_URL                0x000a\n#define BT_SDP_ATTR_CLNT_EXEC_URL          0x000b\n#define BT_SDP_ATTR_ICON_URL               0x000c\n#define BT_SDP_ATTR_ADD_PROTO_DESC_LIST    0x000d\n\n#define BT_SDP_ATTR_GROUP_ID                0x0200\n#define BT_SDP_ATTR_IP_SUBNET               0x0200\n#define BT_SDP_ATTR_VERSION_NUM_LIST        0x0200\n#define BT_SDP_ATTR_SUPPORTED_FEATURES_LIST 0x0200\n#define BT_SDP_ATTR_GOEP_L2CAP_PSM          0x0200\n#define BT_SDP_ATTR_SVCDB_STATE             0x0201\n\n#define BT_SDP_ATTR_MPSD_SCENARIOS   0x0200\n#define BT_SDP_ATTR_MPMD_SCENARIOS   0x0201\n#define BT_SDP_ATTR_MPS_DEPENDENCIES 0x0202\n\n#define BT_SDP_ATTR_SERVICE_VERSION             0x0300\n#define BT_SDP_ATTR_EXTERNAL_NETWORK            0x0301\n#define BT_SDP_ATTR_SUPPORTED_DATA_STORES_LIST  0x0301\n#define BT_SDP_ATTR_DATA_EXCHANGE_SPEC          0x0301\n#define BT_SDP_ATTR_NETWORK                     0x0301\n#define BT_SDP_ATTR_FAX_CLASS1_SUPPORT          0x0302\n#define BT_SDP_ATTR_REMOTE_AUDIO_VOLUME_CONTROL 0x0302\n#define BT_SDP_ATTR_MCAP_SUPPORTED_PROCEDURES   0x0302\n#define BT_SDP_ATTR_FAX_CLASS20_SUPPORT         0x0303\n#define BT_SDP_ATTR_SUPPORTED_FORMATS_LIST      0x0303\n#define BT_SDP_ATTR_FAX_CLASS2_SUPPORT          0x0304\n#define BT_SDP_ATTR_AUDIO_FEEDBACK_SUPPORT      0x0305\n#define BT_SDP_ATTR_NETWORK_ADDRESS             0x0306\n#define BT_SDP_ATTR_WAP_GATEWAY                 0x0307\n#define BT_SDP_ATTR_HOMEPAGE_URL                0x0308\n#define BT_SDP_ATTR_WAP_STACK_TYPE              0x0309\n#define BT_SDP_ATTR_SECURITY_DESC               0x030a\n#define BT_SDP_ATTR_NET_ACCESS_TYPE             0x030b\n#define BT_SDP_ATTR_MAX_NET_ACCESSRATE          0x030c\n#define BT_SDP_ATTR_IP4_SUBNET                  0x030d\n#define BT_SDP_ATTR_IP6_SUBNET                  0x030e\n#define BT_SDP_ATTR_SUPPORTED_CAPABILITIES      0x0310\n#define BT_SDP_ATTR_SUPPORTED_FEATURES          0x0311\n#define BT_SDP_ATTR_SUPPORTED_FUNCTIONS         0x0312\n#define BT_SDP_ATTR_TOTAL_IMAGING_DATA_CAPACITY 0x0313\n#define BT_SDP_ATTR_SUPPORTED_REPOSITORIES      0x0314\n#define BT_SDP_ATTR_MAS_INSTANCE_ID             0x0315\n#define BT_SDP_ATTR_SUPPORTED_MESSAGE_TYPES     0x0316\n#define BT_SDP_ATTR_PBAP_SUPPORTED_FEATURES     0x0317\n#define BT_SDP_ATTR_MAP_SUPPORTED_FEATURES      0x0317\n\n#define BT_SDP_ATTR_SPECIFICATION_ID 0x0200\n#define BT_SDP_ATTR_VENDOR_ID        0x0201\n#define BT_SDP_ATTR_PRODUCT_ID       0x0202\n#define BT_SDP_ATTR_VERSION          0x0203\n#define BT_SDP_ATTR_PRIMARY_RECORD   0x0204\n#define BT_SDP_ATTR_VENDOR_ID_SOURCE 0x0205\n\n#define BT_SDP_ATTR_HID_DEVICE_RELEASE_NUMBER 0x0200\n#define BT_SDP_ATTR_HID_PARSER_VERSION        0x0201\n#define BT_SDP_ATTR_HID_DEVICE_SUBCLASS       0x0202\n#define BT_SDP_ATTR_HID_COUNTRY_CODE          0x0203\n#define BT_SDP_ATTR_HID_VIRTUAL_CABLE         0x0204\n#define BT_SDP_ATTR_HID_RECONNECT_INITIATE    0x0205\n#define BT_SDP_ATTR_HID_DESCRIPTOR_LIST       0x0206\n#define BT_SDP_ATTR_HID_LANG_ID_BASE_LIST     0x0207\n#define BT_SDP_ATTR_HID_SDP_DISABLE           0x0208\n#define BT_SDP_ATTR_HID_BATTERY_POWER         0x0209\n#define BT_SDP_ATTR_HID_REMOTE_WAKEUP         0x020a\n#define BT_SDP_ATTR_HID_PROFILE_VERSION       0x020b\n#define BT_SDP_ATTR_HID_SUPERVISION_TIMEOUT   0x020c\n#define BT_SDP_ATTR_HID_NORMALLY_CONNECTABLE  0x020d\n#define BT_SDP_ATTR_HID_BOOT_DEVICE           0x020e\n\n/*\n * These identifiers are based on the SDP spec stating that\n * \"base attribute id of the primary (universal) language must be 0x0100\"\n *\n * Other languages should have their own offset; e.g.:\n * #define XXXLangBase yyyy\n * #define AttrServiceName_XXX 0x0000+XXXLangBase\n */\n#define BT_SDP_PRIMARY_LANG_BASE 0x0100\n\n#define BT_SDP_ATTR_SVCNAME_PRIMARY  (0x0000 + BT_SDP_PRIMARY_LANG_BASE)\n#define BT_SDP_ATTR_SVCDESC_PRIMARY  (0x0001 + BT_SDP_PRIMARY_LANG_BASE)\n#define BT_SDP_ATTR_PROVNAME_PRIMARY (0x0002 + BT_SDP_PRIMARY_LANG_BASE)\n\n/*\n * The Data representation in SDP PDUs (pps 339, 340 of BT SDP Spec)\n * These are the exact data type+size descriptor values\n * that go into the PDU buffer.\n *\n * The datatype (leading 5bits) + size descriptor (last 3 bits)\n * is 8 bits. The size descriptor is critical to extract the\n * right number of bytes for the data value from the PDU.\n *\n * For most basic types, the datatype+size descriptor is\n * straightforward. However for constructed types and strings,\n * the size of the data is in the next \"n\" bytes following the\n * 8 bits (datatype+size) descriptor. Exactly what the \"n\" is\n * specified in the 3 bits of the data size descriptor.\n *\n * TextString and URLString can be of size 2^{8, 16, 32} bytes\n * DataSequence and DataSequenceAlternates can be of size 2^{8, 16, 32}\n * The size are computed post-facto in the API and are not known apriori\n */\n#define BT_SDP_DATA_NIL        0x00\n#define BT_SDP_UINT8           0x08\n#define BT_SDP_UINT16          0x09\n#define BT_SDP_UINT32          0x0a\n#define BT_SDP_UINT64          0x0b\n#define BT_SDP_UINT128         0x0c\n#define BT_SDP_INT8            0x10\n#define BT_SDP_INT16           0x11\n#define BT_SDP_INT32           0x12\n#define BT_SDP_INT64           0x13\n#define BT_SDP_INT128          0x14\n#define BT_SDP_UUID_UNSPEC     0x18\n#define BT_SDP_UUID16          0x19\n#define BT_SDP_UUID32          0x1a\n#define BT_SDP_UUID128         0x1c\n#define BT_SDP_TEXT_STR_UNSPEC 0x20\n#define BT_SDP_TEXT_STR8       0x25\n#define BT_SDP_TEXT_STR16      0x26\n#define BT_SDP_TEXT_STR32      0x27\n#define BT_SDP_BOOL            0x28\n#define BT_SDP_SEQ_UNSPEC      0x30\n#define BT_SDP_SEQ8            0x35\n#define BT_SDP_SEQ16           0x36\n#define BT_SDP_SEQ32           0x37\n#define BT_SDP_ALT_UNSPEC      0x38\n#define BT_SDP_ALT8            0x3d\n#define BT_SDP_ALT16           0x3e\n#define BT_SDP_ALT32           0x3f\n#define BT_SDP_URL_STR_UNSPEC  0x40\n#define BT_SDP_URL_STR8        0x45\n#define BT_SDP_URL_STR16       0x46\n#define BT_SDP_URL_STR32       0x47\n\n#define BT_SDP_TYPE_DESC_MASK    0xf8\n#define BT_SDP_SIZE_DESC_MASK    0x07\n#define BT_SDP_SIZE_INDEX_OFFSET 5\n\n/** @brief SDP Generic Data Element Value. */\nstruct bt_sdp_data_elem {\n    uint8_t type;\n    uint32_t data_size;\n    uint32_t total_size;\n    const void *data;\n};\n\n/** @brief SDP Attribute Value. */\nstruct bt_sdp_attribute {\n    uint16_t id;                 /* Attribute ID */\n    struct bt_sdp_data_elem val; /* Attribute data */\n};\n\n/** @brief SDP Service Record Value. */\nstruct bt_sdp_record {\n    uint32_t handle;                /* Redundant, for quick ref */\n    struct bt_sdp_attribute *attrs; /* Base addr of attr array */\n    size_t attr_count;              /* Number of attributes */\n    uint8_t index;                  /* Index of the record in LL */\n    struct bt_sdp_record *next;\n};\n\n/*\n * ---------------------------------------------------    ------------------\n * | Service Hdl | Attr list ptr | Attr count | Next | -> | Service Hdl | ...\n * ---------------------------------------------------    ------------------\n */\n\n/** @def BT_SDP_ARRAY_8\n *  @brief Declare an array of 8-bit elements in an attribute.\n */\n#define BT_SDP_ARRAY_8(...) ((uint8_t[]){ __VA_ARGS__ })\n\n/** @def BT_SDP_ARRAY_16\n *  @brief Declare an array of 16-bit elements in an attribute.\n */\n#define BT_SDP_ARRAY_16(...) ((uint16_t[]){ __VA_ARGS__ })\n\n/** @def BT_SDP_ARRAY_32\n *  @brief Declare an array of 32-bit elements in an attribute.\n */\n#define BT_SDP_ARRAY_32(...) ((uint32_t[]){ __VA_ARGS__ })\n\n/** @def BT_SDP_TYPE_SIZE\n *  @brief Declare a fixed-size data element header.\n *\n *  @param _type Data element header containing type and size descriptors.\n */\n#define BT_SDP_TYPE_SIZE(_type) .type = _type,                                   \\\n                                .data_size = BIT(_type & BT_SDP_SIZE_DESC_MASK), \\\n                                .total_size = BIT(_type & BT_SDP_SIZE_DESC_MASK) + 1\n\n/** @def BT_SDP_TYPE_SIZE_VAR\n *  @brief Declare a variable-size data element header.\n *\n *  @param _type Data element header containing type and size descriptors.\n *  @param _size The actual size of the data.\n */\n#define BT_SDP_TYPE_SIZE_VAR(_type, _size) .type = _type, .data_size = _size, .total_size = BIT((_type & BT_SDP_SIZE_DESC_MASK) - BT_SDP_SIZE_INDEX_OFFSET) + _size + 1\n\n/** @def BT_SDP_DATA_ELEM_LIST\n *  @brief Declare a list of data elements.\n */\n#define BT_SDP_DATA_ELEM_LIST(...) ((struct bt_sdp_data_elem[]){ __VA_ARGS__ })\n\n/** @def BT_SDP_NEW_SERVICE\n *  @brief SDP New Service Record Declaration Macro.\n *\n *  Helper macro to declare a new service record.\n *  Default attributes: Record Handle, Record State,\n *  Language Base, Root Browse Group\n *\n */\n#define BT_SDP_NEW_SERVICE                                                       \\\n    {                                                                            \\\n        BT_SDP_ATTR_RECORD_HANDLE,                                               \\\n        { BT_SDP_TYPE_SIZE(BT_SDP_UINT32), BT_SDP_ARRAY_32(0) }                  \\\n    },                                                                           \\\n        { BT_SDP_ATTR_RECORD_STATE,                                              \\\n          { BT_SDP_TYPE_SIZE(BT_SDP_UINT32), BT_SDP_ARRAY_32(0) } },             \\\n        { BT_SDP_ATTR_LANG_BASE_ATTR_ID_LIST,                                    \\\n          {                                                                      \\\n              BT_SDP_TYPE_SIZE_VAR(BT_SDP_SEQ8, 9),                              \\\n              BT_SDP_DATA_ELEM_LIST(                                             \\\n                  { BT_SDP_TYPE_SIZE(BT_SDP_UINT16), BT_SDP_ARRAY_8('n', 'e') }, \\\n                  { BT_SDP_TYPE_SIZE(BT_SDP_UINT16), BT_SDP_ARRAY_16(106) },     \\\n                  { BT_SDP_TYPE_SIZE(BT_SDP_UINT16),                             \\\n                    BT_SDP_ARRAY_16(BT_SDP_PRIMARY_LANG_BASE) }),                \\\n          } },                                                                   \\\n    {                                                                            \\\n        BT_SDP_ATTR_BROWSE_GRP_LIST,                                             \\\n        {                                                                        \\\n            BT_SDP_TYPE_SIZE_VAR(BT_SDP_SEQ8, 3),                                \\\n                BT_SDP_DATA_ELEM_LIST(                                           \\\n                    { BT_SDP_TYPE_SIZE(BT_SDP_UUID16),                           \\\n                      BT_SDP_ARRAY_16(BT_SDP_PUBLIC_BROWSE_GROUP) }, ),          \\\n        }                                                                        \\\n    }\n\n/** @def BT_SDP_LIST\n *  @brief Generic SDP List Attribute Declaration Macro.\n *\n *  Helper macro to declare a list attribute.\n *\n *  @param _att_id List Attribute ID.\n *  @param _data_elem_seq Data element sequence for the list.\n *  @param _type_size SDP type and size descriptor.\n */\n#define BT_SDP_LIST(_att_id, _type_size, _data_elem_seq) \\\n    {                                                    \\\n        _att_id,                                         \\\n        {                                                \\\n            _type_size, _data_elem_seq                   \\\n        }                                                \\\n    }\n\n/** @def BT_SDP_SERVICE_ID\n *  @brief SDP Service ID Attribute Declaration Macro.\n *\n *  Helper macro to declare a service ID attribute.\n *\n *  @param _uuid Service ID 16bit UUID.\n */\n#define BT_SDP_SERVICE_ID(_uuid)                                         \\\n    {                                                                    \\\n        BT_SDP_ATTR_SERVICE_ID,                                          \\\n        {                                                                \\\n            BT_SDP_TYPE_SIZE(BT_SDP_UUID16), &((struct bt_uuid_16)_uuid) \\\n        }                                                                \\\n    }\n\n/** @def BT_SDP_SERVICE_NAME\n *  @brief SDP Name Attribute Declaration Macro.\n *\n *  Helper macro to declare a service name attribute.\n *\n *  @param _name Service name as a string (up to 256 chars).\n */\n#define BT_SDP_SERVICE_NAME(_name)                                             \\\n    {                                                                          \\\n        BT_SDP_ATTR_SVCNAME_PRIMARY,                                           \\\n        {                                                                      \\\n            BT_SDP_TYPE_SIZE_VAR(BT_SDP_TEXT_STR8, (sizeof(_name) - 1)), _name \\\n        }                                                                      \\\n    }\n\n/** @def BT_SDP_SUPPORTED_FEATURES\n *  @brief SDP Supported Features Attribute Declaration Macro.\n *\n *  Helper macro to declare supported features of a profile/protocol.\n *\n *  @param _features Feature mask as 16bit unsigned integer.\n */\n#define BT_SDP_SUPPORTED_FEATURES(_features)                            \\\n    {                                                                   \\\n        BT_SDP_ATTR_SUPPORTED_FEATURES,                                 \\\n        {                                                               \\\n            BT_SDP_TYPE_SIZE(BT_SDP_UINT16), BT_SDP_ARRAY_16(_features) \\\n        }                                                               \\\n    }\n\n/** @def BT_SDP_RECORD\n *  @brief SDP Service Declaration Macro.\n *\n *  Helper macro to declare a service.\n *\n *  @param _attrs List of attributes for the service record.\n */\n#define BT_SDP_RECORD(_attrs)               \\\n    {                                       \\\n        .attrs = _attrs,                    \\\n        .attr_count = ARRAY_SIZE((_attrs)), \\\n    }\n\n/* Server API */\n\n/** @brief Register a Service Record.\n *\n *  Register a Service Record. Applications can make use of\n *  macros such as BT_SDP_DECLARE_SERVICE, BT_SDP_LIST,\n *  BT_SDP_SERVICE_ID, BT_SDP_SERVICE_NAME, etc.\n *  A service declaration must start with BT_SDP_NEW_SERVICE.\n *\n *  @param service Service record declared using BT_SDP_DECLARE_SERVICE.\n *\n * @return 0 in case of success or negative value in case of error.\n */\nint bt_sdp_register_service(struct bt_sdp_record *service);\n\n/* Client API */\n\n/** @brief Generic SDP Client Query Result data holder */\nstruct bt_sdp_client_result {\n    /* buffer containing unparsed SDP record result for given UUID */\n    struct net_buf *resp_buf;\n    /* flag pointing that there are more result chunks for given UUID */\n    bool next_record_hint;\n    /* Reference to UUID object on behalf one discovery was started */\n    const struct bt_uuid *uuid;\n};\n\n/** @brief Helper enum to be used as return value of bt_sdp_discover_func_t.\n *  The value informs the caller to perform further pending actions or stop them.\n */\nenum {\n    BT_SDP_DISCOVER_UUID_STOP = 0,\n    BT_SDP_DISCOVER_UUID_CONTINUE,\n};\n\n/** @typedef bt_sdp_discover_func_t\n *\n *  @brief Callback type reporting to user that there is a resolved result\n *  on remote for given UUID and the result record buffer can be used by user\n *  for further inspection.\n *\n *  A function of this type is given by the user to the bt_sdp_discover_params\n *  object. It'll be called on each valid record discovery completion for given\n *  UUID. When UUID resolution gives back no records then NULL is passed\n *  to the user. Otherwise user can get valid record(s) and then the internal\n *  hint 'next record' is set to false saying the UUID resolution is complete or\n *  the hint can be set by caller to true meaning that next record is available\n *  for given UUID.\n *  The returned function value allows the user to control retrieving follow-up\n *  resolved records if any. If the user doesn't want to read more resolved\n *  records for given UUID since current record data fulfills its requirements\n *  then should return BT_SDP_DISCOVER_UUID_STOP. Otherwise returned value means\n *  more subcall iterations are allowable.\n *\n *  @param conn Connection object identifying connection to queried remote.\n *  @param result Object pointing to logical unparsed SDP record collected on\n *  base of response driven by given UUID.\n *\n *  @return BT_SDP_DISCOVER_UUID_STOP in case of no more need to read next\n *  record data and continue discovery for given UUID. By returning\n *  BT_SDP_DISCOVER_UUID_CONTINUE user allows this discovery continuation.\n */\ntypedef uint8_t (*bt_sdp_discover_func_t)(struct bt_conn *conn, struct bt_sdp_client_result *result);\n\n/** @brief Main user structure used in SDP discovery of remote. */\nstruct bt_sdp_discover_params {\n    sys_snode_t _node;\n    /** UUID (service) to be discovered on remote SDP entity */\n    const struct bt_uuid *uuid;\n    /** Discover callback to be called on resolved SDP record */\n    bt_sdp_discover_func_t func;\n    /** Memory buffer enabled by user for SDP query results  */\n    struct net_buf_pool *pool;\n};\n\n/** @brief Allows user to start SDP discovery session.\n *\n *  The function performs SDP service discovery on remote server driven by user\n *  delivered discovery parameters. Discovery session is made as soon as\n *  no SDP transaction is ongoing between peers and if any then this one\n *  is queued to be processed at discovery completion of previous one.\n *  On the service discovery completion the callback function will be\n *  called to get feedback to user about findings.\n *\n * @param conn Object identifying connection to remote.\n * @param params SDP discovery parameters.\n *\n * @return 0 in case of success or negative value in case of error.\n */\n\nint bt_sdp_discover(struct bt_conn *conn,\n                    const struct bt_sdp_discover_params *params);\n\n/** @brief Release waiting SDP discovery request.\n *\n *  It can cancel valid waiting SDP client request identified by SDP discovery\n *  parameters object.\n *\n * @param conn Object identifying connection to remote.\n * @param params SDP discovery parameters.\n *\n * @return 0 in case of success or negative value in case of error.\n */\nint bt_sdp_discover_cancel(struct bt_conn *conn,\n                           const struct bt_sdp_discover_params *params);\n\n/* Helper types & functions for SDP client to get essential data from server */\n\n/** @brief Protocols to be asked about specific parameters */\nenum bt_sdp_proto {\n    BT_SDP_PROTO_RFCOMM = 0x0003,\n    BT_SDP_PROTO_L2CAP = 0x0100,\n};\n\n/** @brief Give to user parameter value related to given stacked protocol UUID.\n *\n *  API extracts specific parameter associated with given protocol UUID\n *  available in Protocol Descriptor List attribute.\n *\n *  @param buf Original buffered raw record data.\n *  @param proto Known protocol to be checked like RFCOMM or L2CAP.\n *  @param param On success populated by found parameter value.\n *\n *  @return 0 on success when specific parameter associated with given protocol\n *  value is found, or negative if error occurred during processing.\n */\nint bt_sdp_get_proto_param(const struct net_buf *buf, enum bt_sdp_proto proto,\n                           uint16_t *param);\n\n/** @brief Get profile version.\n *\n *  Helper API extracting remote profile version number. To get it proper\n *  generic profile parameter needs to be selected usually listed in SDP\n *  Interoperability Requirements section for given profile specification.\n *\n *  @param buf Original buffered raw record data.\n *  @param profile Profile family identifier the profile belongs.\n *  @param version On success populated by found version number.\n *\n *  @return 0 on success, negative value if error occurred during processing.\n */\nint bt_sdp_get_profile_version(const struct net_buf *buf, uint16_t profile,\n                               uint16_t *version);\n\n/** @brief Get SupportedFeatures attribute value\n *\n *  Allows if exposed by remote retrieve SupportedFeature attribute.\n *\n *  @param buf Buffer holding original raw record data from remote.\n *  @param features On success object to be populated with SupportedFeature\n *  mask.\n *\n *  @return 0 on success if feature found and valid, negative in case any error\n */\nint bt_sdp_get_features(const struct net_buf *buf, uint16_t *features);\n\n#ifdef __cplusplus\n}\n#endif\n\n/**\n * @}\n */\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_SDP_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/bluetooth/uuid.h",
    "content": "/** @file\n *  @brief Bluetooth UUID handling\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_UUID_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_UUID_H_\n\n/**\n * @brief UUIDs\n * @defgroup bt_uuid UUIDs\n * @ingroup bluetooth\n * @{\n */\n\n#include <misc/util.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** @brief Bluetooth UUID types */\nenum {\n    BT_UUID_TYPE_16,\n    BT_UUID_TYPE_32,\n    BT_UUID_TYPE_128,\n};\n\n/** @brief This is a 'tentative' type and should be used as a pointer only */\nstruct bt_uuid {\n    u8_t type;\n};\n\nstruct bt_uuid_16 {\n    struct bt_uuid uuid;\n    u16_t val;\n};\n\nstruct bt_uuid_32 {\n    struct bt_uuid uuid;\n    u32_t val;\n};\n\nstruct bt_uuid_128 {\n    struct bt_uuid uuid;\n    u8_t val[16];\n};\n\n#define BT_UUID_INIT_16(value)       \\\n    {                                \\\n        .uuid = { BT_UUID_TYPE_16 }, \\\n        .val = (value),              \\\n    }\n\n#define BT_UUID_INIT_32(value)       \\\n    {                                \\\n        .uuid = { BT_UUID_TYPE_32 }, \\\n        .val = (value),              \\\n    }\n\n#define BT_UUID_INIT_128(value...)    \\\n    {                                 \\\n        .uuid = { BT_UUID_TYPE_128 }, \\\n        .val = { value },             \\\n    }\n\n#define BT_UUID_DECLARE_16(value) \\\n    ((struct bt_uuid *)((struct bt_uuid_16[]){ BT_UUID_INIT_16(value) }))\n#define BT_UUID_DECLARE_32(value) \\\n    ((struct bt_uuid *)((struct bt_uuid_32[]){ BT_UUID_INIT_32(value) }))\n#define BT_UUID_DECLARE_128(value...) \\\n    ((struct bt_uuid *)((struct bt_uuid_128[]){ BT_UUID_INIT_128(value) }))\n\n#define BT_UUID_16(__u)  CONTAINER_OF(__u, struct bt_uuid_16, uuid)\n#define BT_UUID_32(__u)  CONTAINER_OF(__u, struct bt_uuid_32, uuid)\n#define BT_UUID_128(__u) CONTAINER_OF(__u, struct bt_uuid_128, uuid)\n\n/**\n * @brief Encode 128 bit UUID into an array values\n *\n * Helper macro to initialize a 128-bit UUID value from the UUID format.\n * Can be combined with BT_UUID_DECLARE_128 to declare a 128-bit UUID from\n * the readable form of UUIDs.\n *\n * Example for how to declare the UUID `6E400001-B5A3-F393-E0A9-E50E24DCCA9E`\n *\n * @code\n * BT_UUID_DECLARE_128(\n *       BT_UUID_128_ENCODE(0x6E400001, 0xB5A3, 0xF393, 0xE0A9, 0xE50E24DCCA9E))\n * @endcode\n *\n * Just replace the hyphen by the comma and add `0x` prefixes.\n *\n * @param w32 First part of the UUID (32 bits)\n * @param w1  Second part of the UUID (16 bits)\n * @param w2  Third part of the UUID (16 bits)\n * @param w3  Fourth part of the UUID (16 bits)\n * @param w48 Fifth part of the UUID (48 bits)\n *\n * @return The comma separated values for UUID 128 initializer that\n *         may be used directly as an argument for\n *         @ref BT_UUID_INIT_128 or @ref BT_UUID_DECLARE_128\n */\n#define BT_UUID_128_ENCODE(w32, w1, w2, w3, w48) \\\n    (((w48) >> 0) & 0xFF),                       \\\n        (((w48) >> 8) & 0xFF),                   \\\n        (((w48) >> 16) & 0xFF),                  \\\n        (((w48) >> 24) & 0xFF),                  \\\n        (((w48) >> 32) & 0xFF),                  \\\n        (((w48) >> 40) & 0xFF),                  \\\n        (((w3) >> 0) & 0xFF),                    \\\n        (((w3) >> 8) & 0xFF),                    \\\n        (((w2) >> 0) & 0xFF),                    \\\n        (((w2) >> 8) & 0xFF),                    \\\n        (((w1) >> 0) & 0xFF),                    \\\n        (((w1) >> 8) & 0xFF),                    \\\n        (((w32) >> 0) & 0xFF),                   \\\n        (((w32) >> 8) & 0xFF),                   \\\n        (((w32) >> 16) & 0xFF),                  \\\n        (((w32) >> 24) & 0xFF)\n\n#define BT_UUID_SCPS BT_UUID_DECLARE_16(0x1813)\n\n/** @def BT_UUID_GAP\n *  @brief Generic Access\n */\n#define BT_UUID_GAP BT_UUID_DECLARE_16(0x1800)\n/** @def BT_UUID_GATT\n *  @brief Generic Attribute\n */\n#define BT_UUID_GATT BT_UUID_DECLARE_16(0x1801)\n/** @def BT_UUID_CTS\n *  @brief Current Time Service\n */\n#define BT_UUID_CTS BT_UUID_DECLARE_16(0x1805)\n/** @def BT_UUID_HTS\n *  @brief Health Thermometer Service\n */\n#define BT_UUID_HTS BT_UUID_DECLARE_16(0x1809)\n/** @def BT_UUID_DIS\n *  @brief Device Information Service\n */\n#define BT_UUID_DIS BT_UUID_DECLARE_16(0x180a)\n/** @def BT_UUID_HRS\n *  @brief Heart Rate Service\n */\n#define BT_UUID_HRS BT_UUID_DECLARE_16(0x180d)\n/** @def BT_UUID_BAS\n *  @brief Battery Service\n */\n#define BT_UUID_BAS BT_UUID_DECLARE_16(0x180f)\n/** @def BT_UUID_HIDS\n *  @brief HID Service\n */\n#define BT_UUID_HIDS BT_UUID_DECLARE_16(0x1812)\n/** @def BT_UUID_CSC\n *  @brief Cycling Speed and Cadence Service\n */\n#define BT_UUID_CSC BT_UUID_DECLARE_16(0x1816)\n/** @def BT_UUID_ESS\n *  @brief Environmental Sensing Service\n */\n#define BT_UUID_ESS BT_UUID_DECLARE_16(0x181a)\n/** @def BT_UUID_IPSS\n *  @brief IP Support Service\n */\n#define BT_UUID_IPSS BT_UUID_DECLARE_16(0x1820)\n/** @def BT_UUID_MESH_PROV\n *  @brief Mesh Provisioning Service\n */\n#define BT_UUID_MESH_PROV BT_UUID_DECLARE_16(0x1827)\n/** @def BT_UUID_MESH_PROXY\n *  @brief Mesh Proxy Service\n */\n#define BT_UUID_MESH_PROXY BT_UUID_DECLARE_16(0x1828)\n/** @def BT_UUID_GATT_PRIMARY\n *  @brief GATT Primary Service\n */\n#define BT_UUID_GATT_PRIMARY BT_UUID_DECLARE_16(0x2800)\n/** @def BT_UUID_GATT_SECONDARY\n *  @brief GATT Secondary Service\n */\n#define BT_UUID_GATT_SECONDARY BT_UUID_DECLARE_16(0x2801)\n/** @def BT_UUID_GATT_INCLUDE\n *  @brief GATT Include Service\n */\n#define BT_UUID_GATT_INCLUDE BT_UUID_DECLARE_16(0x2802)\n/** @def BT_UUID_GATT_CHRC\n *  @brief GATT Characteristic\n */\n#define BT_UUID_GATT_CHRC BT_UUID_DECLARE_16(0x2803)\n/** @def BT_UUID_GATT_CEP\n *  @brief GATT Characteristic Extended Properties\n */\n#define BT_UUID_GATT_CEP BT_UUID_DECLARE_16(0x2900)\n/** @def BT_UUID_GATT_CUD\n *  @brief GATT Characteristic User Description\n */\n#define BT_UUID_GATT_CUD BT_UUID_DECLARE_16(0x2901)\n/** @def BT_UUID_GATT_CCC\n *  @brief GATT Client Characteristic Configuration\n */\n#define BT_UUID_GATT_CCC BT_UUID_DECLARE_16(0x2902)\n/** @def BT_UUID_GATT_SCC\n *  @brief GATT Server Characteristic Configuration\n */\n#define BT_UUID_GATT_SCC BT_UUID_DECLARE_16(0x2903)\n/** @def BT_UUID_GATT_CPF\n *  @brief GATT Characteristic Presentation Format\n */\n#define BT_UUID_GATT_CPF BT_UUID_DECLARE_16(0x2904)\n/** @def BT_UUID_VALID_RANGE\n *  @brief Valid Range Descriptor\n */\n#define BT_UUID_VALID_RANGE BT_UUID_DECLARE_16(0x2906)\n/** @def BT_UUID_HIDS_EXT_REPORT\n *  @brief HID External Report Descriptor\n */\n#define BT_UUID_HIDS_EXT_REPORT BT_UUID_DECLARE_16(0x2907)\n/** @def BT_UUID_HIDS_REPORT_REF\n *  @brief HID Report Reference Descriptor\n */\n#define BT_UUID_HIDS_REPORT_REF BT_UUID_DECLARE_16(0x2908)\n/** @def BT_UUID_ES_CONFIGURATION\n *  @brief Environmental Sensing Configuration Descriptor\n */\n#define BT_UUID_ES_CONFIGURATION BT_UUID_DECLARE_16(0x290b)\n/** @def BT_UUID_ES_MEASUREMENT\n *  @brief Environmental Sensing Measurement Descriptor\n */\n#define BT_UUID_ES_MEASUREMENT BT_UUID_DECLARE_16(0x290c)\n/** @def BT_UUID_ES_TRIGGER_SETTING\n *  @brief Environmental Sensing Trigger Setting Descriptor\n */\n#define BT_UUID_ES_TRIGGER_SETTING BT_UUID_DECLARE_16(0x290d)\n/** @def BT_UUID_GAP_DEVICE_NAME\n *  @brief GAP Characteristic Device Name\n */\n#define BT_UUID_GAP_DEVICE_NAME BT_UUID_DECLARE_16(0x2a00)\n/** @def BT_UUID_GAP_APPEARANCE\n *  @brief GAP Characteristic Appearance\n */\n#define BT_UUID_GAP_APPEARANCE BT_UUID_DECLARE_16(0x2a01)\n/** @def BT_UUID_GAP_PPCP\n *  @brief GAP Characteristic Peripheral Preferred Connection Parameters\n */\n#define BT_UUID_GAP_PPCP BT_UUID_DECLARE_16(0x2a04)\n/** @def BT_UUID_GATT_SC\n *  @brief GATT Characteristic Service Changed\n */\n#define BT_UUID_GATT_SC BT_UUID_DECLARE_16(0x2a05)\n/** @def BT_UUID_BAS_BATTERY_LEVEL\n *  @brief BAS Characteristic Battery Level\n */\n#define BT_UUID_BAS_BATTERY_LEVEL BT_UUID_DECLARE_16(0x2a19)\n/** @def BT_UUID_HTS_MEASUREMENT\n *  @brief HTS Characteristic Measurement Value\n */\n#define BT_UUID_HTS_MEASUREMENT BT_UUID_DECLARE_16(0x2a1c)\n/** @def BT_UUID_HIDS_BOOT_KB_IN_REPORT\n *  @brief HID Characteristic Boot Keyboard Input Report\n */\n#define BT_UUID_HIDS_BOOT_KB_IN_REPORT BT_UUID_DECLARE_16(0x2a22)\n/** @def BT_UUID_DIS_SYSTEM_ID\n *  @brief DIS Characteristic System ID\n */\n#define BT_UUID_DIS_SYSTEM_ID BT_UUID_DECLARE_16(0x2a23)\n/** @def BT_UUID_DIS_MODEL_NUMBER\n *  @brief DIS Characteristic Model Number String\n */\n#define BT_UUID_DIS_MODEL_NUMBER BT_UUID_DECLARE_16(0x2a24)\n/** @def BT_UUID_DIS_SERIAL_NUMBER\n *  @brief DIS Characteristic Serial Number String\n */\n#define BT_UUID_DIS_SERIAL_NUMBER BT_UUID_DECLARE_16(0x2a25)\n/** @def BT_UUID_DIS_FIRMWARE_REVISION\n *  @brief DIS Characteristic Firmware Revision String\n */\n#define BT_UUID_DIS_FIRMWARE_REVISION BT_UUID_DECLARE_16(0x2a26)\n/** @def BT_UUID_DIS_HARDWARE_REVISION\n *  @brief DIS Characteristic Hardware Revision String\n */\n#define BT_UUID_DIS_HARDWARE_REVISION BT_UUID_DECLARE_16(0x2a27)\n/** @def BT_UUID_DIS_SOFTWARE_REVISION\n *  @brief DIS Characteristic Software Revision String\n */\n#define BT_UUID_DIS_SOFTWARE_REVISION BT_UUID_DECLARE_16(0x2a28)\n/** @def BT_UUID_DIS_MANUFACTURER_NAME\n *  @brief DIS Characteristic Manufacturer Name String\n */\n#define BT_UUID_DIS_MANUFACTURER_NAME BT_UUID_DECLARE_16(0x2a29)\n/** @def BT_UUID_DIS_PNP_ID\n *  @brief DIS Characteristic PnP ID\n */\n\n#define BT_UUID_SCPS_SCAN_INTVL_WIN BT_UUID_DECLARE_16(0x2a4f)\n\n#define BT_UUID_DIS_PNP_ID BT_UUID_DECLARE_16(0x2a50)\n/** @def BT_UUID_CTS_CURRENT_TIME\n *  @brief CTS Characteristic Current Time\n */\n#define BT_UUID_CTS_CURRENT_TIME BT_UUID_DECLARE_16(0x2a2b)\n/** @def BT_UUID_MAGN_DECLINATION\n *  @brief Magnetic Declination Characteristic\n */\n#define BT_UUID_MAGN_DECLINATION BT_UUID_DECLARE_16(0x2a2c)\n/** @def BT_UUID_HIDS_BOOT_KB_OUT_REPORT\n *  @brief HID Boot Keyboard Output Report Characteristic\n */\n#define BT_UUID_HIDS_BOOT_KB_OUT_REPORT BT_UUID_DECLARE_16(0x2a32)\n/** @def BT_UUID_HIDS_BOOT_MOUSE_IN_REPORT\n *  @brief HID Boot Mouse Input Report Characteristic\n */\n#define BT_UUID_HIDS_BOOT_MOUSE_IN_REPORT BT_UUID_DECLARE_16(0x2a33)\n/** @def BT_UUID_HRS_MEASUREMENT\n *  @brief HRS Characteristic Measurement Interval\n */\n#define BT_UUID_HRS_MEASUREMENT BT_UUID_DECLARE_16(0x2a37)\n/** @def BT_UUID_HRS_BODY_SENSOR\n *  @brief HRS Characteristic Body Sensor Location\n */\n#define BT_UUID_HRS_BODY_SENSOR BT_UUID_DECLARE_16(0x2a38)\n/** @def BT_UUID_HRS_CONTROL_POINT\n *  @brief HRS Characteristic Control Point\n */\n#define BT_UUID_HRS_CONTROL_POINT BT_UUID_DECLARE_16(0x2a39)\n/** @def BT_UUID_HIDS_INFO\n *  @brief HID Information Characteristic\n */\n#define BT_UUID_HIDS_INFO BT_UUID_DECLARE_16(0x2a4a)\n/** @def BT_UUID_HIDS_REPORT_MAP\n *  @brief HID Report Map Characteristic\n */\n#define BT_UUID_HIDS_REPORT_MAP BT_UUID_DECLARE_16(0x2a4b)\n/** @def BT_UUID_HIDS_CTRL_POINT\n *  @brief HID Control Point Characteristic\n */\n#define BT_UUID_HIDS_CTRL_POINT BT_UUID_DECLARE_16(0x2a4c)\n/** @def BT_UUID_HIDS_REPORT\n *  @brief HID Report Characteristic\n */\n#define BT_UUID_HIDS_REPORT BT_UUID_DECLARE_16(0x2a4d)\n/** @def BT_UUID_HIDS_PROTOCOL_MODE\n *  @brief HID Protocol Mode Characteristic\n */\n#define BT_UUID_HIDS_PROTOCOL_MODE BT_UUID_DECLARE_16(0x2a4e)\n/** @def BT_UUID_CSC_MEASUREMENT\n *  @brief CSC Measurement Characteristic\n */\n#define BT_UUID_CSC_MEASUREMENT BT_UUID_DECLARE_16(0x2a5b)\n/** @def BT_UUID_CSC_FEATURE\n *  @brief CSC Feature Characteristic\n */\n#define BT_UUID_CSC_FEATURE BT_UUID_DECLARE_16(0x2a5c)\n/** @def BT_UUID_SENSOR_LOCATION\n *  @brief Sensor Location Characteristic\n */\n#define BT_UUID_SENSOR_LOCATION BT_UUID_DECLARE_16(0x2a5d)\n/** @def BT_UUID_SC_CONTROL_POINT\n *  @brief SC Control Point Characteristic\n */\n#define BT_UUID_SC_CONTROL_POINT BT_UUID_DECLARE_16(0x2a55)\n/** @def BT_UUID_ELEVATION\n *  @brief Elevation Characteristic\n */\n#define BT_UUID_ELEVATION BT_UUID_DECLARE_16(0x2a6c)\n/** @def BT_UUID_PRESSURE\n *  @brief Pressure Characteristic\n */\n#define BT_UUID_PRESSURE BT_UUID_DECLARE_16(0x2a6d)\n/** @def BT_UUID_TEMPERATURE\n *  @brief Temperature Characteristic\n */\n#define BT_UUID_TEMPERATURE BT_UUID_DECLARE_16(0x2a6e)\n/** @def BT_UUID_HUMIDITY\n *  @brief Humidity Characteristic\n */\n#define BT_UUID_HUMIDITY BT_UUID_DECLARE_16(0x2a6f)\n/** @def BT_UUID_TRUE_WIND_SPEED\n *  @brief True Wind Speed Characteristic\n */\n#define BT_UUID_TRUE_WIND_SPEED BT_UUID_DECLARE_16(0x2a70)\n/** @def BT_UUID_TRUE_WIND_DIR\n *  @brief True Wind Direction Characteristic\n */\n#define BT_UUID_TRUE_WIND_DIR BT_UUID_DECLARE_16(0x2a71)\n/** @def BT_UUID_APPARENT_WIND_SPEED\n *  @brief Apparent Wind Speed Characteristic\n */\n#define BT_UUID_APPARENT_WIND_SPEED BT_UUID_DECLARE_16(0x2a72)\n/** @def BT_UUID_APPARENT_WIND_DIR\n *  @brief Apparent Wind Direction Characteristic\n */\n#define BT_UUID_APPARENT_WIND_DIR BT_UUID_DECLARE_16(0x2a73)\n/** @def BT_UUID_GUST_FACTOR\n *  @brief Gust Factor Characteristic\n */\n#define BT_UUID_GUST_FACTOR BT_UUID_DECLARE_16(0x2a74)\n/** @def BT_UUID_POLLEN_CONCENTRATION\n *  @brief Pollen Concentration Characteristic\n */\n#define BT_UUID_POLLEN_CONCENTRATION BT_UUID_DECLARE_16(0x2a75)\n/** @def BT_UUID_UV_INDEX\n *  @brief UV Index Characteristic\n */\n#define BT_UUID_UV_INDEX BT_UUID_DECLARE_16(0x2a76)\n/** @def BT_UUID_IRRADIANCE\n *  @brief Irradiance Characteristic\n */\n#define BT_UUID_IRRADIANCE BT_UUID_DECLARE_16(0x2a77)\n/** @def BT_UUID_RAINFALL\n *  @brief Rainfall Characteristic\n */\n#define BT_UUID_RAINFALL BT_UUID_DECLARE_16(0x2a78)\n/** @def BT_UUID_WIND_CHILL\n *  @brief Wind Chill Characteristic\n */\n#define BT_UUID_WIND_CHILL BT_UUID_DECLARE_16(0x2a79)\n/** @def BT_UUID_HEAT_INDEX\n *  @brief Heat Index Characteristic\n */\n#define BT_UUID_HEAT_INDEX BT_UUID_DECLARE_16(0x2a7a)\n/** @def BT_UUID_DEW_POINT\n *  @brief Dew Point Characteristic\n */\n#define BT_UUID_DEW_POINT BT_UUID_DECLARE_16(0x2a7b)\n/** @def BT_UUID_DESC_VALUE_CHANGED\n *  @brief Descriptor Value Changed Characteristic\n */\n#define BT_UUID_DESC_VALUE_CHANGED BT_UUID_DECLARE_16(0x2a7d)\n/** @def BT_UUID_MAGN_FLUX_DENSITY_2D\n *  @brief Magnetic Flux Density - 2D Characteristic\n */\n#define BT_UUID_MAGN_FLUX_DENSITY_2D BT_UUID_DECLARE_16(0x2aa0)\n/** @def BT_UUID_MAGN_FLUX_DENSITY_3D\n *  @brief Magnetic Flux Density - 3D Characteristic\n */\n#define BT_UUID_MAGN_FLUX_DENSITY_3D BT_UUID_DECLARE_16(0x2aa1)\n/** @def BT_UUID_BAR_PRESSURE_TREND\n *  @brief Barometric Pressure Trend Characteristic\n */\n#define BT_UUID_BAR_PRESSURE_TREND BT_UUID_DECLARE_16(0x2aa3)\n/** @def BT_UUID_CENTRAL_ADDR_RES\n *  @brief Central Address Resolution Characteristic\n */\n#define BT_UUID_CENTRAL_ADDR_RES BT_UUID_DECLARE_16(0x2aa6)\n/** @def BT_UUID_MESH_PROV_DATA_IN\n *  @brief Mesh Provisioning Data In\n */\n#define BT_UUID_MESH_PROV_DATA_IN BT_UUID_DECLARE_16(0x2adb)\n/** @def BT_UUID_MESH_PROV_DATA_OUT\n *  @brief Mesh Provisioning Data Out\n */\n#define BT_UUID_MESH_PROV_DATA_OUT BT_UUID_DECLARE_16(0x2adc)\n/** @def BT_UUID_MESH_PROXY_DATA_IN\n *  @brief Mesh Proxy Data In\n */\n#define BT_UUID_MESH_PROXY_DATA_IN BT_UUID_DECLARE_16(0x2add)\n/** @def BT_UUID_MESH_PROXY_DATA_OUT\n *  @brief Mesh Proxy Data Out\n */\n#define BT_UUID_MESH_PROXY_DATA_OUT BT_UUID_DECLARE_16(0x2ade)\n/** @def BT_UUID_GATT_CLIENT_FEATURES\n *  @brief Client Supported Features\n */\n#define BT_UUID_GATT_CLIENT_FEATURES BT_UUID_DECLARE_16(0x2b29)\n/** @def BT_UUID_GATT_DB_HASH\n *  @brief Database Hash\n */\n#define BT_UUID_GATT_DB_HASH BT_UUID_DECLARE_16(0x2b2a)\n\n#if defined(CONFIG_BT_STACK_PTS) && defined(PTS_GAP_SLAVER_CONFIG_READ_CHARC)\n#define BT_UUID_PTS                    BT_UUID_DECLARE_16(0x2b2b)\n#define BT_UUID_PTS_CHAR_READ_AUTHEN   BT_UUID_DECLARE_16(0x2b2c)\n#define BT_UUID_PTS_CHAR_READ_NOPERM   BT_UUID_DECLARE_16(0x2b2d)\n#define BT_UUID_PTS_CHAR_READ_LONGVAL  BT_UUID_DECLARE_16(0x2b2e)\n#define BT_UUID_PTS_CHAR_READ_L_NOPERM BT_UUID_DECLARE_16(0x2b2f)\n#define BT_UUID_PTS_CHAR_READ_LVAL_REF BT_UUID_DECLARE_16(0x2b30)\n#endif\n\n#if defined(CONFIG_BT_STACK_PTS) && defined(PTS_GAP_SLAVER_CONFIG_WRITE_CHARC)\n#define BT_UUID_PTS_CHAR_WRITE_VALUE    BT_UUID_DECLARE_16(0x2b31)\n#define BT_UUID_PTS_CHAR_WRITE_AUTHEN   BT_UUID_DECLARE_16(0x2b32)\n#define BT_UUID_PTS_CHAR_WRITE_LONGVAL  BT_UUID_DECLARE_16(0x2b33)\n#define BT_UUID_PTS_CHAR_WRITE_NORSP    BT_UUID_DECLARE_16(0x2b34)\n#define BT_UUID_PTS_CHAR_WRITE_2LONGVAL BT_UUID_DECLARE_16(0x2b35)\n#define BT_UUID_PTS_CHAR_WRITE_L_DES    BT_UUID_DECLARE_16(0x2b36)\n#endif\n\n#if defined(CONFIG_BT_STACK_PTS) && defined(PTS_GAP_SLAVER_CONFIG_NOTIFY_CHARC)\n#define BT_UUID_PTS_CHAR_NOTIFY_CHAR BT_UUID_DECLARE_16(0x2b37)\n#endif\n\n#if defined(CONFIG_BT_STACK_PTS) && defined(PTS_GAP_SLAVER_CONFIG_INDICATE_CHARC)\n#define BT_UUID_PTS_CHAR_INDICATE_CHAR BT_UUID_DECLARE_16(0x2b38)\n#endif\n\n#if defined(CONFIG_BT_STACK_PTS) && defined(PTS_TEST_CASE_INSUFFICIENT_KEY)\n#define BT_UUID_PTS_ENC_KEY BT_UUID_DECLARE_16(0x2b3a)\n#endif\n#if defined(CONFIG_BT_STACK_PTS) && defined(PTS_CHARC_LEN_EQUAL_MTU_SIZE)\n#define BT_UUID_PTS_READ_MTU_SIZE_CHAR BT_UUID_DECLARE_16(0x2b3b)\n#endif\n\n#if defined(CONFIG_BT_STACK_PTS)\n#define BT_UUID_PTS_AUTH_CHAR BT_UUID_DECLARE_16(0x2b39)\n#endif\n\n/*\n * Protocol UUIDs\n */\n#define BT_UUID_SDP       BT_UUID_DECLARE_16(0x0001)\n#define BT_UUID_UDP       BT_UUID_DECLARE_16(0x0002)\n#define BT_UUID_RFCOMM    BT_UUID_DECLARE_16(0x0003)\n#define BT_UUID_TCP       BT_UUID_DECLARE_16(0x0004)\n#define BT_UUID_TCS_BIN   BT_UUID_DECLARE_16(0x0005)\n#define BT_UUID_TCS_AT    BT_UUID_DECLARE_16(0x0006)\n#define BT_UUID_ATT       BT_UUID_DECLARE_16(0x0007)\n#define BT_UUID_OBEX      BT_UUID_DECLARE_16(0x0008)\n#define BT_UUID_IP        BT_UUID_DECLARE_16(0x0009)\n#define BT_UUID_FTP       BT_UUID_DECLARE_16(0x000a)\n#define BT_UUID_HTTP      BT_UUID_DECLARE_16(0x000c)\n#define BT_UUID_BNEP      BT_UUID_DECLARE_16(0x000f)\n#define BT_UUID_UPNP      BT_UUID_DECLARE_16(0x0010)\n#define BT_UUID_HIDP      BT_UUID_DECLARE_16(0x0011)\n#define BT_UUID_HCRP_CTRL BT_UUID_DECLARE_16(0x0012)\n#define BT_UUID_HCRP_DATA BT_UUID_DECLARE_16(0x0014)\n#define BT_UUID_HCRP_NOTE BT_UUID_DECLARE_16(0x0016)\n#define BT_UUID_AVCTP     BT_UUID_DECLARE_16(0x0017)\n#define BT_UUID_AVDTP     BT_UUID_DECLARE_16(0x0019)\n#define BT_UUID_CMTP      BT_UUID_DECLARE_16(0x001b)\n#define BT_UUID_UDI       BT_UUID_DECLARE_16(0x001d)\n#define BT_UUID_MCAP_CTRL BT_UUID_DECLARE_16(0x001e)\n#define BT_UUID_MCAP_DATA BT_UUID_DECLARE_16(0x001f)\n#define BT_UUID_L2CAP     BT_UUID_DECLARE_16(0x0100)\n\n/** @brief Compare Bluetooth UUIDs.\n *\n *  Compares 2 Bluetooth UUIDs, if the types are different both UUIDs are\n *  first converted to 128 bits format before comparing.\n *\n *  @param u1 First Bluetooth UUID to compare\n *  @param u2 Second Bluetooth UUID to compare\n *\n *  @return negative value if @a u1 < @a u2, 0 if @a u1 == @a u2, else positive\n */\nint bt_uuid_cmp(const struct bt_uuid *u1, const struct bt_uuid *u2);\n\n/** @brief Create a bt_uuid from a little-endian data buffer.\n *\n *  Create a bt_uuid from a little-endian data buffer. The data_len parameter\n *  is used to determine whether the UUID is in 16, 32 or 128 bit format\n *  (length 2, 4 or 16). Note: 32 bit format is not allowed over the air.\n *\n *  @param uuid Pointer to the bt_uuid variable\n *  @param data pointer to UUID stored in little-endian data buffer\n *  @param data_len length of the UUID in the data buffer\n *\n *  @return true if the data was valid and the UUID was successfully created.\n */\nbool bt_uuid_create(struct bt_uuid *uuid, const u8_t *data, u8_t data_len);\n\n#if defined(CONFIG_BT_DEBUG)\n/** @brief Convert Bluetooth UUID to string.\n *\n *  Converts Bluetooth UUID to string. UUID has to be in 16 bits or 128 bits\n *  format.\n *\n *  @param uuid Bluetooth UUID\n *  @param str pointer where to put converted string\n *  @param len length of str\n *\n *  @return N/A\n */\nvoid bt_uuid_to_str(const struct bt_uuid *uuid, char *str, size_t len);\n\nconst char *bt_uuid_str_real(const struct bt_uuid *uuid);\n\n/** @def bt_uuid_str\n *  @brief Convert Bluetooth UUID to string in place.\n *\n *  Converts Bluetooth UUID to string in place. UUID has to be in 16 bits or\n *  128 bits format.\n *\n *  @param uuid Bluetooth UUID\n *\n *  @return String representation of the UUID given\n */\n#define bt_uuid_str(_uuid) log_strdup(bt_uuid_str_real(_uuid))\n#else\nstatic inline void bt_uuid_to_str(const struct bt_uuid *uuid, char *str,\n                                  size_t len)\n{\n    if (len > 0) {\n        str[0] = '\\0';\n    }\n}\n\nstatic inline const char *bt_uuid_str(const struct bt_uuid *uuid)\n{\n    return \"\";\n}\n#endif /* CONFIG_BT_DEBUG */\n\n#ifdef __cplusplus\n}\n#endif\n\n/**\n * @}\n */\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_UUID_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/include/drivers/bluetooth/hci_driver.h",
    "content": "/** @file\n *  @brief Bluetooth HCI driver API.\n */\n\n/*\n * Copyright (c) 2015-2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#ifndef ZEPHYR_INCLUDE_DRIVERS_BLUETOOTH_HCI_DRIVER_H_\n#define ZEPHYR_INCLUDE_DRIVERS_BLUETOOTH_HCI_DRIVER_H_\n\n/**\n * @brief HCI drivers\n * @defgroup bt_hci_driver HCI drivers\n * @ingroup bluetooth\n * @{\n */\n\n#include <stdbool.h>\n#include <net/buf.h>\n#include <../../bluetooth/buf.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nenum {\n    /* The host should never send HCI_Reset */\n    BT_QUIRK_NO_RESET = BIT(0),\n};\n\n/**\n * @brief Check if an HCI event is high priority or not.\n *\n * Helper for the HCI driver to know which events are ok to be passed\n * through the RX thread and which must be given to bt_recv_prio() from\n * another context (e.g. ISR). If this function returns true it's safe\n * to pass the event through the RX thread, however if it returns false\n * then this risks a deadlock.\n *\n * @param evt HCI event code.\n *\n * @return true if the event can be processed in the RX thread, false\n *         if it cannot.\n */\nstatic inline bool bt_hci_evt_is_prio(u8_t evt)\n{\n    switch (evt) {\n        case BT_HCI_EVT_CMD_COMPLETE:\n        case BT_HCI_EVT_CMD_STATUS:\n            /* fallthrough */\n#if defined(CONFIG_BT_CONN)\n        case BT_HCI_EVT_NUM_COMPLETED_PACKETS:\n        case BT_HCI_EVT_DATA_BUF_OVERFLOW:\n#endif\n            return true;\n        default:\n            return false;\n    }\n}\n\n/**\n * @brief Receive data from the controller/HCI driver.\n *\n * This is the main function through which the HCI driver provides the\n * host with data from the controller. The buffer needs to have its type\n * set with the help of bt_buf_set_type() before calling this API. This API\n * should not be used for so-called high priority HCI events, which should\n * instead be delivered to the host stack through bt_recv_prio().\n *\n * @param buf Network buffer containing data from the controller.\n *\n * @return 0 on success or negative error number on failure.\n */\nint bt_recv(struct net_buf *buf);\n\n/**\n * @brief Receive high priority data from the controller/HCI driver.\n *\n * This is the same as bt_recv(), except that it should be used for\n * so-called high priority HCI events. There's a separate\n * bt_hci_evt_is_prio() helper that can be used to identify which events\n * are high priority.\n *\n * As with bt_recv(), the buffer needs to have its type set with the help of\n * bt_buf_set_type() before calling this API. The only exception is so called\n * high priority HCI events which should be delivered to the host stack through\n * bt_recv_prio() instead.\n *\n * @param buf Network buffer containing data from the controller.\n *\n * @return 0 on success or negative error number on failure.\n */\nint bt_recv_prio(struct net_buf *buf);\n\n/** Possible values for the 'bus' member of the bt_hci_driver struct */\nenum bt_hci_driver_bus {\n    BT_HCI_DRIVER_BUS_VIRTUAL = 0,\n    BT_HCI_DRIVER_BUS_USB = 1,\n    BT_HCI_DRIVER_BUS_PCCARD = 2,\n    BT_HCI_DRIVER_BUS_UART = 3,\n    BT_HCI_DRIVER_BUS_RS232 = 4,\n    BT_HCI_DRIVER_BUS_PCI = 5,\n    BT_HCI_DRIVER_BUS_SDIO = 6,\n    BT_HCI_DRIVER_BUS_SPI = 7,\n    BT_HCI_DRIVER_BUS_I2C = 8,\n    BT_HCI_DRIVER_BUS_IPM = 9,\n};\n\n/**\n * @brief Abstraction which represents the HCI transport to the controller.\n *\n * This struct is used to represent the HCI transport to the Bluetooth\n * controller.\n */\nstruct bt_hci_driver {\n    /** Name of the driver */\n    const char *name;\n\n    /** Bus of the transport (BT_HCI_DRIVER_BUS_*) */\n    enum bt_hci_driver_bus bus;\n\n    /** Specific controller quirks. These are set by the HCI driver\n\t *  and acted upon by the host. They can either be statically\n\t *  set at buildtime, or set at runtime before the HCI driver's\n\t *  open() callback returns.\n\t */\n    u32_t quirks;\n\n    /**\n\t * @brief Open the HCI transport.\n\t *\n\t * Opens the HCI transport for operation. This function must not\n\t * return until the transport is ready for operation, meaning it\n\t * is safe to start calling the send() handler.\n\t *\n\t * If the driver uses its own RX thread, i.e.\n\t * CONFIG_BT_RECV_IS_RX_THREAD is set, then this\n\t * function is expected to start that thread.\n\t *\n\t * @return 0 on success or negative error number on failure.\n\t */\n    int (*open)(void);\n\n    /**\n\t * @brief Send HCI buffer to controller.\n\t *\n\t * Send an HCI command or ACL data to the controller. The exact\n\t * type of the data can be checked with the help of bt_buf_get_type().\n\t *\n\t * @note This function must only be called from a cooperative thread.\n\t *\n\t * @param buf Buffer containing data to be sent to the controller.\n\t *\n\t * @return 0 on success or negative error number on failure.\n\t */\n    int (*send)(struct net_buf *buf);\n};\n\n/**\n * @brief Register a new HCI driver to the Bluetooth stack.\n *\n * This needs to be called before any application code runs. The bt_enable()\n * API will fail if there is no driver registered.\n *\n * @param drv A bt_hci_driver struct representing the driver.\n *\n * @return 0 on success or negative error number on failure.\n */\nint bt_hci_driver_register(const struct bt_hci_driver *drv);\n\n#if !defined(BFLB_BLE) /*Don't use*/\n/**\n * @brief Setup the HCI transport, which usually means to reset the\n * Bluetooth IC.\n *\n * @note A weak version of this function is included in the H4 driver, so\n *       defining it is optional per board.\n *\n * @param dev The device structure for the bus connecting to the IC\n *\n * @return 0 on success, negative error value on failure\n */\nint bt_hci_transport_setup(struct device *dev);\n#endif\n\n#if defined(BFLB_BLE)\n/**\n * @brief enqueue buffer to hci received queue.\n * @param buf Buffer containing data received from firmware.\n */\nvoid hci_driver_enque_recvq(struct net_buf *buf);\n\nint hci_driver_init(void);\n\n#endif //#if (BFLB_BLE)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __BT_HCI_DRIVER_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/port/bl_port.c",
    "content": "#include <misc/dlist.h>\n#include <misc/util.h>\n#include <zephyr.h>\n\n#define BT_DBG_ENABLED IS_ENABLED(CONFIG_BLUETOOTH_DEBUG_CORE)\n\n#include \"atomic.h\"\n#include <log.h>\n#include <stddef.h>\n#include <stdint.h>\n#include <string.h>\n\n#include \"errno.h\"\n#include <FreeRTOS.h>\n#include <semphr.h>\n#include <stdlib.h>\n#include <task.h>\n#include <timers.h>\n\n#if defined(BL_MCU_SDK)\n#define TRNG_LOOP_COUNTER (17)\nextern BL_Err_Type Sec_Eng_Trng_Get_Random(uint8_t *data, uint32_t len);\nextern BL_Err_Type Sec_Eng_Trng_Enable(void);\nint                bl_rand();\n#else\nextern int bl_rand();\n#endif\n\nint ble_rand() {\n#if defined(CONFIG_HW_SEC_ENG_DISABLE)\n  return random();\n#else\n  return bl_rand();\n#endif\n}\n\n#if defined(BL_MCU_SDK)\nint bl_rand() {\n  unsigned int val;\n  int          counter = 0;\n  int32_t      ret     = 0;\n  do {\n    ret = Sec_Eng_Trng_Get_Random((uint8_t *)&val, 4);\n    if (ret < -1) {\n      return -1;\n    }\n    if ((counter++) > TRNG_LOOP_COUNTER) {\n      break;\n    }\n  } while (0 == val);\n  val >>= 1; // leave signe bit alone\n  return val;\n}\n#endif\n\nvoid k_queue_init(struct k_queue *queue, int size) {\n  // int size = 20;\n  uint8_t blk_size = sizeof(void *);\n\n  queue->hdl = xQueueCreate(size, blk_size);\n  BT_ASSERT(queue->hdl != NULL);\n\n  sys_dlist_init(&queue->poll_events);\n}\n\nvoid k_queue_insert(struct k_queue *queue, void *prev, void *data) {\n  BaseType_t ret;\n  (void)ret;\n\n  ret = xQueueSend(queue->hdl, &data, portMAX_DELAY);\n  BT_ASSERT(ret == pdPASS);\n}\n\nvoid k_queue_append(struct k_queue *queue, void *data) { k_queue_insert(queue, NULL, data); }\n\nvoid k_queue_insert_from_isr(struct k_queue *queue, void *prev, void *data) {\n  BaseType_t xHigherPriorityTaskWoken;\n\n  xQueueSendFromISR(queue->hdl, &data, &xHigherPriorityTaskWoken);\n  if (xHigherPriorityTaskWoken == pdTRUE) {\n    portYIELD_FROM_ISR(xHigherPriorityTaskWoken);\n  }\n}\n\nvoid k_queue_append_from_isr(struct k_queue *queue, void *data) { k_queue_insert_from_isr(queue, NULL, data); }\n\nvoid k_queue_free(struct k_queue *queue) {\n  if (NULL == queue || NULL == queue->hdl) {\n    BT_ERR(\"Queue is NULL\\n\");\n    return;\n  }\n\n  vQueueDelete(queue->hdl);\n  queue->hdl = NULL;\n  return;\n}\n\nvoid k_queue_prepend(struct k_queue *queue, void *data) { k_queue_insert(queue, NULL, data); }\n\nvoid k_queue_append_list(struct k_queue *queue, void *head, void *tail) {\n  struct net_buf *buf_tail = (struct net_buf *)head;\n\n  for (buf_tail = (struct net_buf *)head; buf_tail; buf_tail = buf_tail->frags) {\n    k_queue_append(queue, buf_tail);\n  }\n}\n\nvoid *k_queue_get(struct k_queue *queue, s32_t timeout) {\n  void        *msg = NULL;\n  unsigned int t   = timeout;\n  BaseType_t   ret;\n\n  (void)ret;\n\n  if (timeout == K_FOREVER) {\n    t = BL_WAIT_FOREVER;\n  } else if (timeout == K_NO_WAIT) {\n    t = BL_NO_WAIT;\n  }\n\n  ret = xQueueReceive(queue->hdl, &msg, t == BL_WAIT_FOREVER ? portMAX_DELAY : ms2tick(t));\n  if (ret == pdPASS) {\n    return msg;\n  } else {\n    return NULL;\n  }\n}\n\nint k_queue_is_empty(struct k_queue *queue) { return uxQueueMessagesWaiting(queue->hdl) ? 0 : 1; }\n\nint k_queue_get_cnt(struct k_queue *queue) { return uxQueueMessagesWaiting(queue->hdl); }\n\nint k_sem_init(struct k_sem *sem, unsigned int initial_count, unsigned int limit) {\n  if (NULL == sem) {\n    BT_ERR(\"sem is NULL\\n\");\n    return -EINVAL;\n  }\n\n  sem->sem.hdl = xSemaphoreCreateCounting(limit, initial_count);\n  sys_dlist_init(&sem->poll_events);\n  return 0;\n}\n\nint k_sem_take(struct k_sem *sem, uint32_t timeout) {\n  BaseType_t   ret;\n  unsigned int t = timeout;\n\n  (void)ret;\n  if (timeout == K_FOREVER) {\n    t = BL_WAIT_FOREVER;\n  } else if (timeout == K_NO_WAIT) {\n    t = BL_NO_WAIT;\n  }\n\n  if (NULL == sem) {\n    return -1;\n  }\n\n  ret = xSemaphoreTake(sem->sem.hdl, t == BL_WAIT_FOREVER ? portMAX_DELAY : ms2tick(t));\n  return ret == pdPASS ? 0 : -1;\n}\n\nint k_sem_give(struct k_sem *sem) {\n  BaseType_t ret;\n  (void)ret;\n\n  if (NULL == sem) {\n    BT_ERR(\"sem is NULL\\n\");\n    return -EINVAL;\n  }\n\n  ret = xSemaphoreGive(sem->sem.hdl);\n  return ret == pdPASS ? 0 : -1;\n}\n\nint k_sem_delete(struct k_sem *sem) {\n  if (NULL == sem || NULL == sem->sem.hdl) {\n    BT_ERR(\"sem is NULL\\n\");\n    return -EINVAL;\n  }\n\n  vSemaphoreDelete(sem->sem.hdl);\n  sem->sem.hdl = NULL;\n  return 0;\n}\n\nunsigned int k_sem_count_get(struct k_sem *sem) { return uxQueueMessagesWaiting(sem->sem.hdl); }\n\nvoid k_mutex_init(struct k_mutex *mutex) {\n  if (NULL == mutex) {\n    BT_ERR(\"mutex is NULL\\n\");\n    return;\n  }\n\n  mutex->mutex.hdl = xSemaphoreCreateMutex();\n  BT_ASSERT(mutex->mutex.hdl != NULL);\n  sys_dlist_init(&mutex->poll_events);\n}\n\nint64_t k_uptime_get() { return k_now_ms(); }\n\nu32_t k_uptime_get_32(void) { return (u32_t)k_now_ms(); }\n\nint k_thread_create(struct k_thread *new_thread, const char *name, size_t stack_size, k_thread_entry_t entry, int prio) {\n  stack_size /= sizeof(StackType_t);\n  xTaskCreate(entry, name, stack_size, NULL, prio, (void *)(&new_thread->task));\n\n  return new_thread->task ? 0 : -1;\n}\n\nvoid k_thread_delete(struct k_thread *thread) {\n  if (NULL == thread || 0 == thread->task) {\n    BT_ERR(\"task is NULL\\n\");\n    return;\n  }\n\n  vTaskDelete((void *)(thread->task));\n  thread->task = 0;\n  return;\n}\n\nbool k_is_current_thread(struct k_thread *thread) {\n  eTaskState thread_state = eTaskGetState((void *)(thread->task));\n  if (thread_state == eRunning)\n    return true;\n  else\n    return false;\n}\n\nint k_yield(void) {\n  taskYIELD();\n  return 0;\n}\n\nvoid k_sleep(s32_t dur_ms) {\n  TickType_t ticks;\n  ticks = pdMS_TO_TICKS(dur_ms);\n  vTaskDelay(ticks);\n}\n\nunsigned int irq_lock(void) {\n  taskENTER_CRITICAL();\n  return 1;\n}\n\nvoid irq_unlock(unsigned int key) { taskEXIT_CRITICAL(); }\n\nint k_is_in_isr(void) {\n#if defined(ARCH_RISCV)\n  return (xPortIsInsideInterrupt());\n#else\n  /* IRQs + PendSV (14) + SYSTICK (15) are interrupts. */\n  return (__get_IPSR() > 13);\n#endif\n\n  return 0;\n}\n\nvoid k_timer_init(k_timer_t *timer, k_timer_handler_t handle, void *args) {\n  BT_ASSERT(timer != NULL);\n  timer->handler = handle;\n  timer->args    = args;\n  /* Set args as timer id */\n  timer->timer.hdl = xTimerCreate(\"Timer\", pdMS_TO_TICKS(1000), 0, args, (TimerCallbackFunction_t)(timer->handler));\n  BT_ASSERT(timer->timer.hdl != NULL);\n}\n\nvoid *k_timer_get_id(void *hdl) { return pvTimerGetTimerID((TimerHandle_t)hdl); }\n\nvoid k_timer_start(k_timer_t *timer, uint32_t timeout) {\n  BaseType_t ret;\n  (void)ret;\n\n  BT_ASSERT(timer != NULL);\n  timer->timeout  = timeout;\n  timer->start_ms = k_now_ms();\n\n  ret = xTimerChangePeriod(timer->timer.hdl, pdMS_TO_TICKS(timeout), 0);\n  BT_ASSERT(ret == pdPASS);\n  ret = xTimerStart(timer->timer.hdl, 0);\n  BT_ASSERT(ret == pdPASS);\n}\n\nvoid k_timer_reset(k_timer_t *timer) {\n  BaseType_t ret;\n\n  (void)ret;\n  BT_ASSERT(timer != NULL);\n\n  ret = xTimerReset(timer->timer.hdl, 0);\n  BT_ASSERT(ret == pdPASS);\n}\n\nvoid k_timer_stop(k_timer_t *timer) {\n  BaseType_t ret;\n\n  (void)ret;\n  BT_ASSERT(timer != NULL);\n\n  ret = xTimerStop(timer->timer.hdl, 0);\n  BT_ASSERT(ret == pdPASS);\n}\n\nvoid k_timer_delete(k_timer_t *timer) {\n  BaseType_t ret;\n  (void)ret;\n\n  BT_ASSERT(timer != NULL);\n\n  ret = xTimerDelete(timer->timer.hdl, 0);\n  BT_ASSERT(ret == pdPASS);\n}\n\nlong long k_now_ms(void) { return (long long)(xTaskGetTickCount() * 1000) / configTICK_RATE_HZ; }\n\nvoid k_get_random_byte_array(uint8_t *buf, size_t len) {\n  // ble_rand() return a word, but *buf may not be word-aligned\n  for (int i = 0; i < len; i++) {\n    *(buf + i) = (uint8_t)(ble_rand() & 0xFF);\n  }\n}\n\nvoid *k_malloc(size_t size) {\n#if defined(CFG_USE_PSRAM)\n  return pvPortMallocPsram(size);\n#else\n  return pvPortMalloc(size);\n#endif /* CFG_USE_PSRAM */\n}\n\nvoid k_free(void *buf) {\n#if defined(CFG_USE_PSRAM)\n  return vPortFreePsram(buf);\n#else\n  return vPortFree(buf);\n#endif\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/port/include/bl_port.h",
    "content": "#ifndef BL_PORT_H\n#define BL_PORT_H\n#if defined(BL_MCU_SDK)\n#include \"misc.h\"\n#endif\n#include \"ble_config.h\"\n#include <misc/dlist.h>\n#include <assert.h>\n#include <stddef.h>\n#include <stdint.h>\n#include <stdbool.h>\n#include <string.h>\n#include <zephyr/types.h>\n#include \"bl_port.h\"\n\n#define BT_UINT_MAX     0xffffffff\n#define BL_WAIT_FOREVER 0xffffffffu\n#define BL_NO_WAIT      0x0\n#define ms2tick         pdMS_TO_TICKS\n\ntypedef struct {\n    void *hdl;\n} bl_hdl_t;\n\ntypedef bl_hdl_t _queue_t;\ntypedef bl_hdl_t _sem_t;\ntypedef uint32_t _stack_element_t;\ntypedef bl_hdl_t _mutex_t;\ntypedef bl_hdl_t bl_timer_t;\ntypedef uint32_t _task_t;\n\n#define _POLL_EVENT_OBJ_INIT(obj) \\\n    .poll_events = SYS_DLIST_STATIC_INIT(&obj.poll_events),\n#define _POLL_EVENT sys_dlist_t poll_events\n\n#define _K_SEM_INITIALIZER(obj, initial_count, count_limit) \\\n    {                                                       \\\n    }\n\n#define K_SEM_INITIALIZER DEPRECATED_MACRO _K_SEM_INITIALIZER\n\n#define K_SEM_DEFINE(name, initial_count, count_limit) \\\n    struct k_sem name                                  \\\n        __in_section(_k_sem, static, name) =           \\\n            _K_SEM_INITIALIZER(name, initial_count, count_limit)\n\n#define K_MUTEX_DEFINE(name)                   \\\n    struct k_mutex name                        \\\n        __in_section(_k_mutex, static, name) = \\\n            _K_MUTEX_INITIALIZER(name)\n\ntypedef sys_dlist_t _wait_q_t;\n\nstruct k_queue {\n    void *hdl;\n    sys_dlist_t poll_events;\n};\n\n/*attention: this is intialied as zero,the queue variable shoule use k_queue_init\\k_lifo_init\\k_fifo_init again*/\n#define _K_QUEUE_INITIALIZER(obj) \\\n    {                             \\\n        0                         \\\n    }\n#define K_QUEUE_INITIALIZER DEPRECATED_MACRO _K_QUEUE_INITIALIZER\n\nvoid k_queue_init(struct k_queue *queue, int size);\nvoid k_queue_free(struct k_queue *queue);\nvoid k_queue_append(struct k_queue *queue, void *data);\nvoid k_queue_prepend(struct k_queue *queue, void *data);\nvoid k_queue_insert(struct k_queue *queue, void *prev, void *data);\nvoid k_queue_append_list(struct k_queue *queue, void *head, void *tail);\nvoid *k_queue_get(struct k_queue *queue, s32_t timeout);\nint k_queue_is_empty(struct k_queue *queue);\nint k_queue_get_cnt(struct k_queue *queue);\n\nstruct k_lifo {\n    struct k_queue _queue;\n};\n\n#define _K_LIFO_INITIALIZER(obj)                   \\\n    {                                              \\\n        ._queue = _K_QUEUE_INITIALIZER(obj._queue) \\\n    }\n\n#define K_LIFO_INITIALIZER DEPRECATED_MACRO _K_LIFO_INITIALIZER\n\n#define k_lifo_init(lifo, size) \\\n    k_queue_init((struct k_queue *)lifo, size)\n\n#define k_lifo_put(lifo, data) \\\n    k_queue_prepend((struct k_queue *)lifo, data)\n\n#define k_lifo_get(lifo, timeout) \\\n    k_queue_get((struct k_queue *)lifo, timeout)\n\n#define K_LIFO_DEFINE(name)                    \\\n    struct k_lifo name                         \\\n        __in_section(_k_queue, static, name) = \\\n            _K_LIFO_INITIALIZER(name)\n\nstruct k_fifo {\n    struct k_queue _queue;\n};\n\n#define _K_FIFO_INITIALIZER(obj)                   \\\n    {                                              \\\n        ._queue = _K_QUEUE_INITIALIZER(obj._queue) \\\n    }\n#define K_FIFO_INITIALIZER DEPRECATED_MACRO _K_FIFO_INITIALIZER\n\n#define k_fifo_init(fifo, size) \\\n    k_queue_init((struct k_queue *)fifo, size)\n\n#define k_fifo_put(fifo, data) \\\n    k_queue_append((struct k_queue *)fifo, data)\n\n#define k_fifo_put_from_isr(fifo, data) \\\n    k_queue_append_from_isr((struct k_queue *)fifo, data)\n\n#define k_fifo_put_list(fifo, head, tail) \\\n    k_queue_append_list((struct k_queue *)fifo, head, tail)\n\n#define k_fifo_get(fifo, timeout) \\\n    k_queue_get((struct k_queue *)fifo, timeout)\n\n#define K_FIFO_DEFINE(name)                    \\\n    struct k_fifo name                         \\\n        __in_section(_k_queue, static, name) = \\\n            _K_FIFO_INITIALIZER(name)\n\n/* sem define*/\nstruct k_sem {\n    _sem_t sem;\n    sys_dlist_t poll_events;\n};\n\n/**\n * @brief Initialize a semaphore.\n */\nint k_sem_init(struct k_sem *sem, unsigned int initial_count, unsigned int limit);\n\n/**\n * @brief Take a semaphore.\n */\nint k_sem_take(struct k_sem *sem, uint32_t timeout);\n\n/**\n * @brief Give a semaphore.\n */\nint k_sem_give(struct k_sem *sem);\n\n/**\n * @brief Delete a semaphore.\n */\nint k_sem_delete(struct k_sem *sem);\n\n/**\n * @brief Get a semaphore's count.\n */\nunsigned int k_sem_count_get(struct k_sem *sem);\n\nstruct k_mutex {\n    _mutex_t mutex;\n    sys_dlist_t poll_events;\n};\n\ntypedef void (*k_timer_handler_t)(void *timer);\n\ntypedef struct k_timer {\n    bl_timer_t timer;\n    k_timer_handler_t handler;\n    void *args;\n    uint32_t timeout;\n    uint32_t start_ms;\n} k_timer_t;\n\n/**\n * @brief Initialize a timer.\n */\nvoid k_timer_init(k_timer_t *timer, k_timer_handler_t handle, void *args);\n\nvoid *k_timer_get_id(void *hdl);\n\n/**\n * @brief Start a timer.\n *\n */\nvoid k_timer_start(k_timer_t *timer, uint32_t timeout);\n\nvoid k_timer_reset(k_timer_t *timer);\n\n/**\n * @brief Stop a timer.\n */\nvoid k_timer_stop(k_timer_t *timer);\n\n/**\n * @brief Delete a timer.\n *\n */\nvoid k_timer_delete(k_timer_t *timer);\n\n/*time define*/\n#define MSEC_PER_SEC 1000\n#define K_MSEC(ms)   (ms)\n#define K_SECONDS(s) K_MSEC((s)*MSEC_PER_SEC)\n#define K_MINUTES(m) K_SECONDS((m)*60)\n#define K_HOURS(h)   K_MINUTES((h)*60)\n\n#define K_PRIO_COOP(x) x\n\n/**\n * @brief Get time now.\n *\n * @return time(in milliseconds)\n */\nint64_t k_uptime_get();\nu32_t k_uptime_get_32(void);\n\nstruct k_thread {\n    _task_t task;\n};\n\ntypedef _stack_element_t k_thread_stack_t;\n\ninline void k_call_stacks_analyze(void)\n{\n}\n\n#define K_THREAD_STACK_DEFINE(sym, size) _stack_element_t sym[size]\n#define K_THREAD_STACK_SIZEOF(sym)       sizeof(sym)\n\nstatic inline char *K_THREAD_STACK_BUFFER(k_thread_stack_t *sym)\n{\n    return (char *)sym;\n}\n\ntypedef void (*k_thread_entry_t)(void *args);\n\nint k_thread_create(struct k_thread *new_thread, const char *name,\n                    size_t stack_size, k_thread_entry_t entry,\n                    int prio);\n\nvoid k_thread_delete(struct k_thread *new_thread);\n\nbool k_is_current_thread(struct k_thread *thread);\n\n/**\n * @brief Yield the current thread.\n */\nint k_yield();\n\n/**\n * @brief suspend the current thread for a certain time\n */\n\nvoid k_sleep(s32_t duration);\n\n/**\n * @brief Lock interrupts.\n */\nunsigned int irq_lock();\n\n/**\n * @brief Unlock interrupts.\n */\nvoid irq_unlock(unsigned int key);\n\nint k_is_in_isr(void);\n\n#ifdef BIT\n#undef BIT\n#define BIT(n) (1UL << (n))\n#else\n#define BIT(n) (1UL << (n))\n#endif\n\nlong long k_now_ms(void);\nvoid k_get_random_byte_array(uint8_t *buf, size_t len);\nvoid *k_malloc(size_t size);\nvoid k_free(void *buf);\n#endif /* BL_PORT_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/port/include/ble_config.h",
    "content": "#ifndef BLE_CONFIG_H\n#define BLE_CONFIG_H\n\n#include \"FreeRTOSConfig.h\"\n\n/**\n * CONFIG_BLUETOOTH: Enable the bluetooh stack\n */\n// #ifndef CONFIG_BLUETOOTH\n// #error \"CONFIG_BLUETOOTH not defined,this header shoudn't include\"\n// #endif\n\n#ifdef CONFIG_BT_BONDABLE\n#undef CONFIG_BT_BONDABLE\n#define CONFIG_BT_BONDABLE 1\n#endif\n\n#define CONFIG_BT_SMP_ALLOW_UNAUTH_OVERWRITE 1\n\n#if defined(CONFIG_BT_STACK_PTS)\n\n#ifndef PTS_CHARC_LEN_EQUAL_MTU_SIZE\n#define PTS_CHARC_LEN_EQUAL_MTU_SIZE\n#endif\n\n// #ifndef  CONFIG_BT_STACK_PTS_SM_SLA_KDU_BI_01\n// #define  CONFIG_BT_STACK_PTS_SM_SLA_KDU_BI_01\n// #endif\n\n// #ifndef  PTS_GAP_SLAVER_CONFIG_READ_CHARC\n// #define  PTS_GAP_SLAVER_CONFIG_READ_CHARC\n// #endif\n\n// #ifndef  PTS_GAP_SLAVER_CONFIG_WRITE_CHARC\n// #define  PTS_GAP_SLAVER_CONFIG_WRITE_CHARC\n// #endif\n\n// #ifndef  PTS_GAP_SLAVER_CONFIG_NOTIFY_CHARC\n// #define  PTS_GAP_SLAVER_CONFIG_NOTIFY_CHARC\n// #endif\n\n// #ifndef  PTS_GAP_SLAVER_CONFIG_INDICATE_CHARC\n// #define  PTS_GAP_SLAVER_CONFIG_INDICATE_CHARC\n// #endif\n#define CONFIG_BT_GATT_READ_MULTIPLE 1\n#endif\n\n/**\n * CONFIG_BT_HCI_RX_STACK_SIZE: rx thread stack size\n */\n#ifndef CONFIG_BT_HCI_RX_STACK_SIZE\n#define CONFIG_BT_HCI_RX_STACK_SIZE 512\n#endif\n\n/**\n * BL_BLE_CO_THREAD: combine tx rx thread\n */\n#define BFLB_BT_CO_THREAD 1\n\n#if (BFLB_BT_CO_THREAD)\n#define CONFIG_BT_CO_TASK_PRIO (configMAX_PRIORITIES - 3)\n#if defined(CONFIG_BT_MESH)\n#define CONFIG_BT_CO_STACK_SIZE 3072 // 2048//1536//1024\n#else\n#define CONFIG_BT_CO_STACK_SIZE 2048 // 2048//1536//1024\n#endif\n#endif\n\n#ifndef CONFIG_BT_RX_STACK_SIZE\n#if defined(CONFIG_BT_MESH)\n#define CONFIG_BT_RX_STACK_SIZE 3072 // 2048//1536//1024\n#else\n#if !defined(CONFIG_BT_CONN)\n#define CONFIG_BT_RX_STACK_SIZE 1024\n#else\n#define CONFIG_BT_RX_STACK_SIZE 2048 // 1536//1024\n#endif\n#endif\n#endif\n\n#ifndef CONFIG_BT_CTLR_RX_PRIO_STACK_SIZE\n#define CONFIG_BT_CTLR_RX_PRIO_STACK_SIZE 156\n#endif\n\n#define CONFIG_BT_HCI_ECC_STACK_SIZE 384\n\n#ifndef CONFIG_BT_RX_PRIO\n#define CONFIG_BT_RX_PRIO (configMAX_PRIORITIES - 4)\n#endif\n/**\n * CONFIG_BT: Tx thread stack size\n */\n\n#ifndef CONFIG_BT_HCI_TX_STACK_SIZE\n#if !defined(CONFIG_BT_CONN)\n#define CONFIG_BT_HCI_TX_STACK_SIZE 1024\n#else\n#define CONFIG_BT_HCI_TX_STACK_SIZE 1536 // 1024//200\n#endif\n#endif\n\n/**\n * CONFIG_BT_HCI_TX_PRIO: tx thread priority\n */\n#ifndef CONFIG_BT_HCI_TX_PRIO\n#define CONFIG_BT_HCI_TX_PRIO (configMAX_PRIORITIES - 3)\n#endif\n\n#ifndef CONFIG_BT_CTLR_RX_PRIO\n#define CONFIG_BT_CTLR_RX_PRIO (configMAX_PRIORITIES - 4)\n#endif\n\n/**\n * CONFIG_BT_HCI_CMD_COUNT: hci cmd buffer count,range 2 to 64\n */\n#ifndef CONFIG_BT_HCI_CMD_COUNT\n#define CONFIG_BT_HCI_CMD_COUNT 2\n#endif\n\n/**\n * CONFIG_BT_RX_BUF_COUNT: number of buffer for incoming ACL packages or HCI\n * events,range 2 to 255\n */\n#ifndef CONFIG_BT_RX_BUF_COUNT\n\n#if defined(CONFIG_BT_MESH)\n#define CONFIG_BT_RX_BUF_COUNT 10\n#else\n#define CONFIG_BT_RX_BUF_COUNT 5\n#endif // CONFIG_BT_MESH\n#endif\n\n/**\n * CONFIG_BT_RX_BUF_RSV_COUNT: number of buffer that HCI_LE_EVENT reserved\n * events,range 1 to CONFIG_BT_RX_BUF_COUNT\n */\n#define CONFIG_BT_RX_BUF_RSV_COUNT (1)\n#if (CONFIG_BT_RX_BUF_RSV_COUNT >= CONFIG_BT_RX_BUF_COUNT)\n#error \"CONFIG_BT_RX_BUF_RSV_COUNT config error\"\n#endif\n\n/**\n * CONFIG_BT_RX_BUF_LEN: the max length for rx buffer\n * range 73 to 2000\n */\n#ifndef CONFIG_BT_RX_BUF_LEN\n#if defined(CONFIG_BT_BREDR)\n#define CONFIG_BT_RX_BUF_LEN 680 // CONFIG_BT_L2CAP_RX_MTU + 4 + 4\n#else\n#define CONFIG_BT_RX_BUF_LEN 255 // 108 //76\n#endif\n#endif\n\n/**\n * CONFIG_BT_CENTRAL: Enable central Role\n */\n#ifdef CONFIG_BT_CENTRAL\n#undef CONFIG_BT_CENTRAL\n#define CONFIG_BT_CENTRAL 1\n#endif\n\n/**\n * CONFIG_BT_WHITELIST : Enable autoconnect whilt list device */\n#ifndef CONFIG_BT_WHITELIST\n#define CONFIG_BT_WHITELIST 1\n#endif\n\n/**\n * CONFIG_BT_PERIPHERAL: Enable peripheral Role\n */\n#ifdef CONFIG_BT_PERIPHERAL\n#undef CONFIG_BT_PERIPHERAL\n#define CONFIG_BT_PERIPHERAL 1\n#endif\n\n#if defined(CONFIG_BT_CENTRAL) || defined(CONFIG_BT_PERIPHERAL)\n#undef CONFIG_BT_CONN\n#define CONFIG_BT_CONN 1\n#endif\n\n#ifdef CONFIG_BT_CONN\n\n#ifndef CONFIG_BT_CREATE_CONN_TIMEOUT\n#define CONFIG_BT_CREATE_CONN_TIMEOUT 3\n#endif\n\n#if defined(BFLB_BLE)\n#ifndef CONFIG_BT_CONN_PARAM_UPDATE_TIMEOUT\n#define CONFIG_BT_CONN_PARAM_UPDATE_TIMEOUT 5\n#endif\n#endif\n/**\n * CONFIG_BLUETOOTH_L2CAP_TX_BUF_COUNT: number of buffer for outgoing L2CAP packages\n * range 2 to 255\n */\n#ifndef CONFIG_BT_L2CAP_TX_BUF_COUNT\n#define CONFIG_BT_L2CAP_TX_BUF_COUNT CFG_BLE_TX_BUFF_DATA\n#endif\n\n/**\n * CONFIG_BT_L2CAP_TX_MTU: Max L2CAP MTU for L2CAP tx buffer\n * range 65 to 2000 if SMP enabled,otherwise range 23 to 2000\n */\n#ifndef CONFIG_BT_L2CAP_TX_MTU\n#ifdef CONFIG_BT_SMP\n#define CONFIG_BT_L2CAP_TX_MTU 247 // 96 //65\n#else\n#define CONFIG_BT_L2CAP_TX_MTU 247 // 23\n#endif\n#endif\n\n/**\n * CONFIG_BT_L2CAP_TX_USER_DATA_SIZE: the max length for L2CAP tx buffer user data size\n * range 4 to 65535\n */\n#ifndef CONFIG_BT_L2CAP_TX_USER_DATA_SIZE\n#define CONFIG_BT_L2CAP_TX_USER_DATA_SIZE 4\n#endif\n\n#if defined(CONFIG_BT_STACK_PTS) && (defined(PTS_GAP_SLAVER_CONFIG_WRITE_CHARC) || defined(PTS_TEST_CASE_INSUFFICIENT_KEY))\n#define CONFIG_BT_ATT_PREPARE_COUNT 64\n#else\n/**\n * CONFIG_BT_ATT_PREPARE_COUNT: Number of buffers available for ATT prepare write, setting\n * this to 0 disables GATT long/reliable writes.\n * range 0 to 64\n */\n#ifndef CONFIG_BT_ATT_PREPARE_COUNT\n#define CONFIG_BT_ATT_PREPARE_COUNT 0\n#endif\n#endif\n\n/**\n *  CONFIG_BLUETOOTH_SMP:Eable the Security Manager Protocol\n *  (SMP), making it possible to pair devices over LE\n */\n#ifdef CONFIG_BT_SMP\n#undef CONFIG_BT_SMP\n#define CONFIG_BT_SMP 1\n\n/**\n *  CONFIG_BT_SIGNING:enables data signing which is used for transferring\n *  authenticated data in an unencrypted connection\n */\n#ifdef CONFIG_BT_SIGNING\n#undef CONFIG_BT_SIGNING\n#define CONFIG_BT_SIGNING 1\n#endif\n\n/**\n *  CONFIG_BT_SMP_SC_ONLY:enables support for Secure Connection Only Mode. In this\n *  mode device shall only use Security Mode 1 Level 4 with exception\n *  for services that only require Security Mode 1 Level 1 (no security).\n *  Security Mode 1 Level 4 stands for authenticated LE Secure Connections\n *  pairing with encryption. Enabling this option disables legacy pairing\n */\n#ifdef CONFIG_BT_SMP_SC_ONLY\n#undef CONFIG_BT_SMP_SC_ONLY\n#define CONFIG_BT_SMP_SC_ONLY 1\n#endif\n\n/**\n *  CONFIG_BT_USE_DEBUG_KEYS:This option places Security Manager in\n *  a Debug Mode. In this mode predefined\n *  Diffie-Hellman private/public key pair is used as described\n *  in Core Specification Vol. 3, Part H, 2.3.5.6.1. This option should\n *  only be enabled for debugging and should never be used in production.\n *  If this option is enabled anyone is able to decipher encrypted air\n *  traffic.\n */\n#ifdef CONFIG_BT_USE_DEBUG_KEYS\n#ifndef CONFIG_BT_TINYCRYPT_ECC\n#error \"CONFIG_BT_USE_DEBUG_KEYS depends on CONFIG_BT_TINYCRYPT_ECC\"\n#endif\n#undef CONFIG_BT_USE_DEBUG_KEYS\n#define CONFIG_BT_USE_DEBUG_KEYS 1\n#endif\n\n/**\n *  CONFIG_BT_L2CAP_DYNAMIC_CHANNEL:enables support for LE Connection\n *  oriented Channels,allowing the creation of dynamic L2CAP Channels\n */\n#ifdef CONFIG_BT_L2CAP_DYNAMIC_CHANNEL\n#undef CONFIG_BT_L2CAP_DYNAMIC_CHANNEL\n#define CONFIG_BT_L2CAP_DYNAMIC_CHANNEL 1\n#endif\n\n#endif\n\n/**\n *   CONFIG_BT_PRIVACY:Enable local Privacy Feature support. This makes it possible\n *   to use Resolvable Private Addresses (RPAs).\n */\n#ifdef CONFIG_BT_PRIVACY\n#ifndef CONFIG_BT_SMP\n#error \"CONFIG_BT_PRIVACY depends on CONFIG_BT_SMP\"\n#endif\n#undef CONFIG_BT_PRIVACY\n#define CONFIG_BT_PRIVACY 1\n\n/**\n * CONFIG_BT_RPA_TIMEOUT:Resolvable Private Address timeout\n * range 1 to 65535,seconds\n */\n#ifndef CONFIG_BT_RPA_TIMEOUT\n#if defined(CONFIG_AUTO_PTS)\n#define CONFIG_BT_RPA_TIMEOUT 60\n#else\n#define CONFIG_BT_RPA_TIMEOUT 900\n#endif\n#endif\n#endif\n\n/**\n *  CONFIG_BT_GATT_DYNAMIC_DB:enables GATT services to be added dynamically to database\n */\n#ifdef CONFIG_BT_GATT_DYNAMIC_DB\n#undef CONFIG_BT_GATT_DYNAMIC_DB\n#define CONFIG_BT_GATT_DYNAMIC_DB 1\n#endif\n\n/**\n *  CONFIG_BT_GATT_CLIENT:GATT client role support\n */\n#ifdef CONFIG_BT_GATT_CLIENT\n#undef CONFIG_BT_GATT_CLIENT\n#define CONFIG_BT_GATT_CLIENT 1\n#endif\n\n/**\n *  CONFIG_BT_MAX_PAIRED:Maximum number of paired devices\n *  range 1 to 128\n */\n#ifndef CONFIG_BT_MAX_PAIRED\n#define CONFIG_BT_MAX_PAIRED CONFIG_BT_MAX_CONN\n#endif\n#endif\n\n/**\n * If this option is set TinyCrypt library is used for emulating the\n * ECDH HCI commands and events needed by e.g. LE Secure Connections.\n * In builds including the BLE Host, if not set the controller crypto is\n * used for ECDH and if the controller doesn't support the required HCI\n * commands the LE Secure Connections support will be disabled.\n * In builds including the HCI Raw interface and the BLE Controller, this\n * option injects support for the 2 HCI commands required for LE Secure\n * Connections so that Hosts can make use of those\n */\n#ifdef CONFIG_BT_TINYCRYPT_ECC\n#undef CONFIG_BT_TINYCRYPT_ECC\n#define CONFIG_BT_TINYCRYPT_ECC 1\n#endif\n/**\n *  CONFIG_BLUETOOTH_MAX_CONN:Maximum number of connections\n *  range 1 to 128\n */\n#ifndef CONFIG_BT_MAX_CONN\n#define CONFIG_BT_MAX_CONN CFG_CON\n#endif\n\n/**\n *  CONFIG_BT_DEVICE_NAME:Bluetooth device name. Name can be up\n *  to 248 bytes long (excluding NULL termination). Can be empty string\n */\n#ifndef CONFIG_BT_DEVICE_NAME\n#if defined(CONFIG_AUTO_PTS)\n#define CONFIG_BT_DEVICE_NAME \"AUTO_PTS_TEST0123456789012345\"\n#else\n#if defined(BL602)\n#define CONFIG_BT_DEVICE_NAME \"BL602-BLE-DEV\"\n#elif defined(BL702)\n#define CONFIG_BT_DEVICE_NAME \"BL702-BLE-DEV\"\n#else\n#define CONFIG_BT_DEVICE_NAME \"BTBLE-DEV\"\n#endif\n#endif\n#endif\n/**\n *  CONFIG_BT_CONTROLLER_NAME:Bluetooth controller name.\n */\n#ifndef CONFIG_BT_CONTROLLER_NAME\n#if defined(BL602)\n#define CONFIG_BT_CONTROLLER_NAME \"BL602-BLE-DEV\"\n#else\n#define CONFIG_BT_CONTROLLER_NAME \"BL702-BLE-DEV\"\n#endif\n#endif\n\n/**\n *  CONFIG_BT_MAX_SCO_CONN:Maximum number of simultaneous SCO connections.\n */\n#ifndef CONFIG_BT_MAX_SCO_CONN\n#define CONFIG_BT_MAX_SCO_CONN CONFIG_MAX_SCO\n#endif\n\n/**\n *  CONFIG_BT_WORK_QUEUE_STACK_SIZE:Work queue stack size.\n */\n#ifndef CONFIG_BT_WORK_QUEUE_STACK_SIZE\n#ifndef CONFIG_BT_MESH\n#define CONFIG_BT_WORK_QUEUE_STACK_SIZE 1536 // 1280//512\n#else\n#if !defined(CONFIG_BT_CONN)\n#define CONFIG_BT_WORK_QUEUE_STACK_SIZE 1024\n#else\n#define CONFIG_BT_WORK_QUEUE_STACK_SIZE 2048\n#endif /* CONFIG_BT_MESH */\n#endif\n#endif\n\n/**\n *  CONFIG_BT_WORK_QUEUE_PRIO:Work queue priority.\n */\n#ifndef CONFIG_BT_WORK_QUEUE_PRIO\n#define CONFIG_BT_WORK_QUEUE_PRIO (configMAX_PRIORITIES - 2)\n#endif\n\n/**\n *  CONFIG_BT_HCI_RESERVE:Headroom that the driver needs for sending and receiving buffers.\n */\n#ifndef CONFIG_BT_HCI_RESERVE\n#ifdef CONFIG_BLUETOOTH_H4\n#define CONFIG_BT_HCI_RESERVE 0\n#elif defined(CONFIG_BLUETOOTH_H5) || defined(CONFIG_BLUETOOTH_SPI)\n#define CONFIG_BT_HCI_RESERVE 1\n#else\n#define CONFIG_BT_HCI_RESERVE 1\n#endif\n#endif\n\n/**\n *  CONFIG_BLUETOOTH_DEBUG_LOG:Enable bluetooth debug log.\n */\n#if defined(BFLB_BLE)\n#if defined(CFG_BLE_STACK_DBG_PRINT)\n#undef CONFIG_BT_DEBUG\n#define CONFIG_BT_DEBUG 1\n#endif\n#else\n#ifdef CONFIG_BT_DEBUG_LOG\n#undef CONFIG_BT_DEBUG_LOG\n#define CONFIG_BT_DEBUG_LOG 1\n#undef CONFIG_BT_DEBUG\n#define CONFIG_BT_DEBUG 1\n#endif\n#endif\n/**\n *  CONFIG_BT_DEBUG_L2CAP:Enable bluetooth l2cap debug log.\n */\n#ifdef CONFIG_BT_DEBUG_L2CAP\n#undef CONFIG_BT_DEBUG_L2CAP\n#define CONFIG_BT_DEBUG_L2CAP 1\n#endif\n\n/**\n *  CONFIG_BT_DEBUG_CONN:Enable bluetooth conn debug log.\n */\n#ifdef CONFIG_BT_DEBUG_CONN\n#undef CONFIG_BT_DEBUG_CONN\n#define CONFIG_BT_DEBUG_CONN 1\n#endif\n\n/**\n *  CONFIG_BT_DEBUG_ATT:Enable bluetooth att debug log.\n */\n#ifdef CONFIG_BT_DEBUG_ATT\n#undef CONFIG_BT_DEBUG_ATT\n#define CONFIG_BT_DEBUG_ATT 1\n#endif\n\n/**\n *  CONFIG_BT_DEBUG_GATT:Enable bluetooth gatt debug log.\n */\n#ifdef CONFIG_BT_DEBUG_GATT\n#undef CONFIG_BT_DEBUG_GATT\n#define CONFIG_BT_DEBUG_GATT 1\n#endif\n\n/**\n *  CONFIG_BT_DEBUG_HCI_CORE:Enable bluetooth hci core debug log.\n */\n#ifdef CONFIG_BT_DEBUG_HCI_CORE\n#undef CONFIG_BT_DEBUG_HCI_CORE\n#define CONFIG_BT_DEBUG_HCI_CORE 1\n#endif\n\n/**\n *  CONFIG_BT_DEBUG_HCI_DRIVER:Enable bluetooth hci driver debug log.\n */\n#ifdef CONFIG_BT_DEBUG_HCI_DRIVER\n#undef CONFIG_BT_DEBUG_HCI_DRIVER\n#define CONFIG_BT_DEBUG_HCI_DRIVER 1\n#endif\n\n/**\n *  CONFIG_BT_TEST:Enable bluetooth test.\n */\n#ifdef CONFIG_BT_TEST\n#undef CONFIG_BT_TEST\n#define CONFIG_BT_TEST 1\n#endif\n\n/**\n *  CONFIG_BT_DEBUG_CORE:Enable bluetooth core debug log.\n */\n#ifdef CONFIG_BT_DEBUG_CORE\n#undef CONFIG_BT_DEBUG_CORE\n#define CONFIG_BT_DEBUG_CORE 1\n#endif\n\n#ifndef CONFIG_BT_ATT_TX_MAX\n/*\n *  Take throuthput test into consideration, set att tx max the same with lowstack tx buffer count.\n *  att semaphore determine the max numble packets can send to lowsatck at once.\n */\n#define CONFIG_BT_ATT_TX_MAX 10\n#endif\n\n#ifndef CONFIG_BT_CONN_TX_MAX\n/*\n *  Take throuthput test into consideration, set upperstack conn tx max the same with lowstack tx buffer count.\n */\n#define CONFIG_BT_CONN_TX_MAX 10\n#endif\n\n#ifndef CONFIG_BT_DEVICE_APPEARANCE\n#define CONFIG_BT_DEVICE_APPEARANCE 833\n#endif\n\n#if defined(BFLB_BLE)\n#ifndef CONFIG_BT_RECV_IS_RX_THREAD\n#define CONFIG_BT_RECV_IS_RX_THREAD\n#endif\n\n#ifndef CONFIG_NET_BUF_USER_DATA_SIZE\n#define CONFIG_NET_BUF_USER_DATA_SIZE 10\n#endif\n\n#ifndef CONFIG_BT_ID_MAX\n#define CONFIG_BT_ID_MAX 1\n#endif\n\n// #define PTS_GAP_SLAVER_CONFIG_NOTIFY_CHARC 1\n\n#ifndef CONFIG_BT_L2CAP_TX_FRAG_COUNT\n#define CONFIG_BT_L2CAP_TX_FRAG_COUNT 0\n#endif\n\n#ifndef CONFIG_BT_DEVICE_NAME_DYNAMIC\n#define CONFIG_BT_DEVICE_NAME_DYNAMIC 1\n#endif\n\n// max lenght of ADV payload is 37 bytes (by BT core spec)\n// AdvA field takes up 6 bytes\n// if only Local Name is appended, then max lenght of Local Name shall be\n// 37-6-2=31 bytes, where UUID of Local Name takes up 2 bytes\n#define CONFIG_BT_DEVICE_NAME_MAX 29\n\n#if defined(CONFIG_BT_GAP_PERIPHERAL_PREF_PARAMS)\n#define CONFIG_BT_PERIPHERAL_PREF_MIN_INT       0x0018\n#define CONFIG_BT_PERIPHERAL_PREF_MAX_INT       0x0028\n#define CONFIG_BT_PERIPHERAL_PREF_SLAVE_LATENCY 0\n#define CONFIG_BT_PERIPHERAL_PREF_TIMEOUT       400\n#endif\n\n#ifndef CONFIG_BT_PHY_UPDATE\n#define CONFIG_BT_PHY_UPDATE 1\n#endif\n\n#if defined(CONFIG_BT_BREDR)\n#define CONFIG_BT_PAGE_TIMEOUT 0x2000 // 5.12s\n#define CONFIG_BT_L2CAP_RX_MTU 672\n\n#ifndef CONFIG_BT_RFCOMM_TX_STACK_SIZE\n#define CONFIG_BT_RFCOMM_TX_STACK_SIZE 1024\n#endif\n#ifndef CONFIG_BT_RFCOMM_TX_PRIO\n#define CONFIG_BT_RFCOMM_TX_PRIO (configMAX_PRIORITIES - 5)\n#endif\n\n#define PCM_PRINTF 0\n#endif\n\n#if defined(CONFIG_BT_AUDIO)\n#define CONFIG_BT_MAX_ISO_CONN 8 // range 1 to 64\n\n#endif\n\n/*******************************Bouffalo Lab Modification******************************/\n\n// #define BFLB_BLE_DISABLE_STATIC_ATTR\n// #define BFLB_BLE_DISABLE_STATIC_CHANNEL\n#define BFLB_DISABLE_BT\n#define BFLB_FIXED_IRK 0\n#define BFLB_DYNAMIC_ALLOC_MEM\n#if defined(CFG_BLE_PDS) && defined(BL702) && defined(BFLB_BLE) && defined(BFLB_DYNAMIC_ALLOC_MEM)\n#define BFLB_STATIC_ALLOC_MEM 1\n#else\n#define BFLB_STATIC_ALLOC_MEM 0\n#endif\n#define CONFIG_BT_SCAN_WITH_IDENTITY 1\n\n#if defined(CONFIG_AUTO_PTS)\n#define CONFIG_BT_L2CAP_DYNAMIC_CHANNEL\n#define CONFIG_BT_DEVICE_NAME_GATT_WRITABLE 1\n#define CONFIG_BT_GATT_SERVICE_CHANGED      1\n#define CONFIG_BT_GATT_CACHING              1\n#define CONFIG_BT_SCAN_WITH_IDENTITY        1\n// #define CONFIG_BT_ADV_WITH_PUBLIC_ADDR 1\n#define CONFIG_BT_ATT_PREPARE_COUNT 64\n#endif\n#endif // BFLB_BLE\n\n/*******************************Bouffalo Lab Patch******************************/\n/*Fix the issue that DHKEY_check_failed error happens in smp procedure if CONFIG_BT_PRIVACY is enabled.*/\n#define BFLB_BLE_PATCH_DHKEY_CHECK_FAILED\n/*To notify upper layer that write_ccc is completed*/\n#define BFLB_BLE_PATCH_NOTIFY_WRITE_CCC_RSP\n/*Timer/Queue/Sem allocated during connection establishment is not released when disconnection\nhappens, which cause memory leak issue.*/\n#define BFLB_BLE_PATCH_FREE_ALLOCATED_BUFFER_IN_OS\n/*To avoid duplicated pubkey callback.*/\n#define BFLB_BLE_PATCH_AVOID_DUPLI_PUBKEY_CB\n/*The flag @conn_ref is not clean up after disconnect*/\n// #define BFLB_BLE_PATCH_CLEAN_UP_CONNECT_REF\n#if !defined(CONFIG_AUTO_PTS)\n/*To avoid sevice changed indication sent at the very beginning, without any new service added.*/\n#define BFLB_BLE_PATCH_SET_SCRANGE_CHAGD_ONLY_IN_CONNECTED_STATE\n#endif\n#ifdef CONFIG_BT_SETTINGS\n/*Semaphore is used during flash operation. Make sure that freertos has already run up when it\n  intends to write information to flash.*/\n#define BFLB_BLE_PATCH_SETTINGS_LOAD\n#endif\n#define BFLB_BLE_SMP_LOCAL_AUTH\n#define BFLB_BLE_MTU_CHANGE_CB\n#if defined(CFG_BT_RESET)\n#define BFLB_HOST_ASSISTANT\n#endif\n\n#define BFLB_RELEASE_CMD_SEM_IF_CONN_DISC\n/*Fix the issue when local auth_req is 0(no boinding),\nBT_SMP_DIST_ENC_KEY bit is not cleared while remote ENC_KEY is received.*/\n#define BFLB_BLE_PATCH_CLEAR_REMOTE_KEY_BIT\n\n#if defined(CONFIG_BT_CENTRAL) || defined(CONFIG_BT_OBSERVER)\n#if defined(BL602) || defined(BL702)\n#define BFLB_BLE_NOTIFY_ADV_DISCARDED\n#endif\n#endif\n\n#if defined(CONFIG_BT_CENTRAL)\n#define BFLB_BLE_NOTIFY_ALL\n#define BFLB_BLE_DISCOVER_ONGOING\n#endif\n\n#endif /* BLE_CONFIG_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/port/include/zephyr.h",
    "content": "#ifndef ZEPHYR_H\n#define ZEPHYR_H\n#include <stdint.h>\n#include <stddef.h>\n\n#include <zephyr/types.h>\n#include <misc/slist.h>\n#include <misc/dlist.h>\n#include \"bl_port.h\"\n#include \"work_q.h\"\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n#define _STRINGIFY(x) #x\n#if 0\n#define ___in_section(a, b, c) \\\n    __attribute__((section(\".\" _STRINGIFY(a) \".\" _STRINGIFY(b) \".\" _STRINGIFY(c))))\n\n#endif\n#define ARG_UNUSED(x) (void)(x)\n\n#ifndef __aligned\n#define __aligned(x) __attribute__((__aligned__(x)))\n#endif\n\n#ifndef __printf_like\n#define __printf_like(f, a) __attribute__((format(printf, f, a)))\n#endif\n#define STACK_ALIGN 4\n\n#define ASSERT(test, fmt, ...)\n\n#define K_FOREVER -1\n#define K_NO_WAIT 0\n\n/* Unaligned access */\n#define UNALIGNED_GET(p)                     \\\n    __extension__({                          \\\n        struct __attribute__((__packed__)) { \\\n            __typeof__(*(p)) __v;            \\\n        } *__p = (__typeof__(__p))(p);       \\\n        __p->__v;                            \\\n    })\n\n#ifndef UNUSED\n#define UNUSED(x) (void)x\n#endif\n\nenum _poll_types_bits {\n    _POLL_TYPE_IGNORE,\n    _POLL_TYPE_SIGNAL,\n    _POLL_TYPE_SEM_AVAILABLE,\n    _POLL_TYPE_DATA_AVAILABLE,\n    _POLL_NUM_TYPES\n};\n\n#define _POLL_TYPE_BIT(type) (1 << ((type)-1))\n\nenum _poll_states_bits {\n    _POLL_STATE_NOT_READY,\n    _POLL_STATE_SIGNALED,\n    _POLL_STATE_SEM_AVAILABLE,\n    _POLL_STATE_DATA_AVAILABLE,\n    _POLL_NUM_STATES\n};\n\n#define _POLL_STATE_BIT(state) (1 << ((state)-1))\n\n#define _POLL_EVENT_NUM_UNUSED_BITS                             \\\n    (32 - (0 + 8                                    /* tag */   \\\n           + _POLL_NUM_TYPES + _POLL_NUM_STATES + 1 /* modes */ \\\n           ))\n\n#define K_POLL_SIGNAL_INITIALIZER(obj)                          \\\n    {                                                           \\\n        .poll_events = SYS_DLIST_STATIC_INIT(&obj.poll_events), \\\n        .signaled = 0,                                          \\\n        .result = 0,                                            \\\n    }\n\nstruct k_poll_event {\n    sys_dnode_t _node;\n    struct _poller *poller;\n    u32_t tag : 8;\n    u32_t type : _POLL_NUM_TYPES;\n    u32_t state : _POLL_NUM_STATES;\n    u32_t mode : 1;\n    u32_t unused : _POLL_EVENT_NUM_UNUSED_BITS;\n    union {\n        void *obj;\n        struct k_poll_signal *signal;\n        struct k_sem *sem;\n        struct k_fifo *fifo;\n        struct k_queue *queue;\n    };\n};\n\nstruct k_poll_signal {\n    sys_dlist_t poll_events;\n    unsigned int signaled;\n    int result;\n};\n\n#define K_POLL_STATE_NOT_READY           0\n#define K_POLL_STATE_EADDRINUSE          1\n#define K_POLL_STATE_SIGNALED            2\n#define K_POLL_STATE_SEM_AVAILABLE       3\n#define K_POLL_STATE_DATA_AVAILABLE      4\n#define K_POLL_STATE_FIFO_DATA_AVAILABLE K_POLL_STATE_DATA_AVAILABLE\n\n#define K_POLL_TYPE_IGNORE              0\n#define K_POLL_TYPE_SIGNAL              1\n#define K_POLL_TYPE_SEM_AVAILABLE       2\n#define K_POLL_TYPE_DATA_AVAILABLE      3\n#define K_POLL_TYPE_FIFO_DATA_AVAILABLE K_POLL_TYPE_DATA_AVAILABLE\n\n#define K_POLL_EVENT_STATIC_INITIALIZER(event_type, event_mode, event_obj, \\\n                                        event_tag)                         \\\n    {                                                                      \\\n        .type = event_type,                                                \\\n        .tag = event_tag,                                                  \\\n        .state = K_POLL_STATE_NOT_READY,                                   \\\n        .mode = event_mode,                                                \\\n        .unused = 0,                                                       \\\n        { .obj = event_obj },                                              \\\n    }\n\nextern int k_poll_signal_raise(struct k_poll_signal *signal, int result);\n#if (BFLB_BT_CO_THREAD)\nextern int k_poll(struct k_poll_event *events, int num_events, int total_evt_array_cnt, s32_t timeout, u8_t *to_process);\n#else\nextern int k_poll(struct k_poll_event *events, int num_events, s32_t timeout);\n#endif\nextern void k_poll_event_init(struct k_poll_event *event, u32_t type, int mode, void *obj);\n\n/* public - polling modes */\nenum k_poll_modes {\n    /* polling thread does not take ownership of objects when available */\n    K_POLL_MODE_NOTIFY_ONLY = 0,\n\n    K_POLL_NUM_MODES\n};\n\n#define k_oops()\n\n//void k_sleep(s32_t duration);\n\n#if defined(__cplusplus)\n}\n#endif\n\n#endif /* ZEPHYR_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/services/bas.c",
    "content": "/** @file\n *  @brief GATT Battery Service\n */\n\n/*\n * Copyright (c) 2018 Nordic Semiconductor ASA\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <errno.h>\n#include <stdbool.h>\n#include <zephyr/types.h>\n\n#include \"bas.h\"\n#include \"bluetooth.h\"\n#include \"conn.h\"\n#include \"gatt.h\"\n#include \"uuid.h\"\n\n#if !defined(BFLB_BLE)\n#define LOG_LEVEL CONFIG_BT_GATT_BAS_LOG_LEVEL\n#include <logging/log.h>\nLOG_MODULE_REGISTER(bas);\n#endif\n\nstatic u8_t battery_level = 100U;\n\nstatic void blvl_ccc_cfg_changed(const struct bt_gatt_attr *attr, u16_t value) {\n  ARG_UNUSED(attr);\n\n  bool notif_enabled = (value == BT_GATT_CCC_NOTIFY);\n\n#if !defined(BFLB_BLE)\n  LOG_INF(\"BAS Notifications %s\", notif_enabled ? \"enabled\" : \"disabled\");\n#endif\n}\n\nstatic ssize_t read_blvl(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  u8_t lvl8 = battery_level;\n\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, &lvl8, sizeof(lvl8));\n}\n\nstatic struct bt_gatt_attr attrs[] = {\n    BT_GATT_PRIMARY_SERVICE(BT_UUID_BAS),\n    BT_GATT_CHARACTERISTIC(BT_UUID_BAS_BATTERY_LEVEL, BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY, BT_GATT_PERM_READ, read_blvl, NULL, &battery_level),\n    BT_GATT_CCC(blvl_ccc_cfg_changed, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE),\n    BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ, NULL, NULL, NULL),\n};\n\nstruct bt_gatt_service bas = BT_GATT_SERVICE(attrs);\n\nvoid bas_init(void) { bt_gatt_service_register(&bas); }\n\nu8_t bt_gatt_bas_get_battery_level(void) { return battery_level; }\n\nint bt_gatt_bas_set_battery_level(u8_t level) {\n  int rc;\n\n  if (level > 100U) {\n    return -EINVAL;\n  }\n\n  battery_level = level;\n\n  rc = bt_gatt_notify(NULL, &bas.attrs[1], &level, sizeof(level));\n\n  return rc == -ENOTCONN ? 0 : rc;\n}\n\n#if !defined(BFLB_BLE)\nSYS_INIT(bas_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY);\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/services/bas.h",
    "content": "/*\n * Copyright (c) 2018 Nordic Semiconductor ASA\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#ifndef ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_BAS_H_\n#define ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_BAS_H_\n\n/**\n * @brief Battery Service (BAS)\n * @defgroup bt_gatt_bas Battery Service (BAS)\n * @ingroup bluetooth\n * @{\n *\n * [Experimental] Users should note that the APIs can change\n * as a part of ongoing development.\n */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <zephyr/types.h>\n\nvoid bas_init(void);\n\n/** @brief Read battery level value.\n *\n * Read the characteristic value of the battery level\n *\n *  @return The battery level in percent.\n */\nu8_t bt_gatt_bas_get_battery_level(void);\n\n/** @brief Update battery level value.\n *\n * Update the characteristic value of the battery level\n * This will send a GATT notification to all current subscribers.\n *\n *  @param level The battery level in percent.\n *\n *  @return Zero in case of success and error code in case of error.\n */\nint bt_gatt_bas_set_battery_level(u8_t level);\n\n#ifdef __cplusplus\n}\n#endif\n\n/**\n * @}\n */\n\n#endif /* ZEPHYR_INCLUDE_BLUETOOTH_SERVICES_BAS_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/services/dis.c",
    "content": "/** @file\n *  @brief GATT Device Information Service\n */\n\n/*\n * Copyright (c) 2019 Demant\n * Copyright (c) 2018 Nordic Semiconductor ASA\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <errno.h>\n#include <stddef.h>\n#include <string.h>\n#include <zephyr.h>\n#include <zephyr/types.h>\n\n#include \"settings.h\"\n\n#include \"bluetooth.h\"\n#include \"conn.h\"\n#include \"dis.h\"\n#include \"gatt.h\"\n#include \"hci_host.h\"\n#include \"uuid.h\"\n\n#if !defined(BFLB_BLE)\n#define BT_DBG_ENABLED  IS_ENABLED(CONFIG_BT_DEBUG_SERVICE)\n#define LOG_MODULE_NAME bt_dis\n#include \"log.h\"\n#endif\n\n#if CONFIG_BT_GATT_DIS_PNP\nstruct dis_pnp {\n  u8_t  pnp_vid_src;\n  u16_t pnp_vid;\n  u16_t pnp_pid;\n  u16_t pnp_ver;\n} __packed;\n\n#if defined(BFLB_BLE)\n#if defined(BL702)\n#define CONFIG_BT_GATT_DIS_MODEL \"BL702_BLE_MODEL\"\n#elif defined(BL602)\n#define CONFIG_BT_GATT_DIS_MODEL \"BL602_BLE_MODEL\"\n#else\n#define CONFIG_BT_GATT_DIS_MODEL\n#endif\n\n#define CONFIG_BT_GATT_DIS_MANUF             \"Bouffalo Lab\"\n#define CONFIG_BT_GATT_DIS_SERIAL_NUMBER_STR \"G0G0U40690230TFC\"\n#define CONFIG_BT_GATT_DIS_FW_REV_STR        \"52512901\"\n#define CONFIG_BT_GATT_DIS_HW_REV_STR        \"0001\"\n#define CONFIG_BT_GATT_DIS_SW_REV_STR        \"123\"\n\n#define CONFIG_BT_GATT_DIS_PNP_VID 0x07AF\n#define CONFIG_BT_GATT_DIS_PNP_PID 0x707\n#define CONFIG_BT_GATT_DIS_PNP_VER 0x0000\n#endif\n\nstatic struct dis_pnp dis_pnp_id = {\n    .pnp_vid_src = DIS_PNP_VID_SRC,\n    .pnp_vid     = CONFIG_BT_GATT_DIS_PNP_VID,\n    .pnp_pid     = CONFIG_BT_GATT_DIS_PNP_PID,\n    .pnp_ver     = CONFIG_BT_GATT_DIS_PNP_VER,\n};\n#endif\n\n#if defined(CONFIG_BT_GATT_DIS_SETTINGS)\nstatic u8_t dis_model[CONFIG_BT_GATT_DIS_STR_MAX] = CONFIG_BT_GATT_DIS_MODEL;\nstatic u8_t dis_manuf[CONFIG_BT_GATT_DIS_STR_MAX] = CONFIG_BT_GATT_DIS_MANUF;\n#if defined(CONFIG_BT_GATT_DIS_SERIAL_NUMBER)\nstatic u8_t dis_serial_number[CONFIG_BT_GATT_DIS_STR_MAX] = CONFIG_BT_GATT_DIS_SERIAL_NUMBER_STR;\n#endif\n#if defined(CONFIG_BT_GATT_DIS_FW_REV)\nstatic u8_t dis_fw_rev[CONFIG_BT_GATT_DIS_STR_MAX] = CONFIG_BT_GATT_DIS_FW_REV_STR;\n#endif\n#if defined(CONFIG_BT_GATT_DIS_HW_REV)\nstatic u8_t dis_hw_rev[CONFIG_BT_GATT_DIS_STR_MAX] = CONFIG_BT_GATT_DIS_HW_REV_STR;\n#endif\n#if defined(CONFIG_BT_GATT_DIS_SW_REV)\nstatic u8_t dis_sw_rev[CONFIG_BT_GATT_DIS_STR_MAX] = CONFIG_BT_GATT_DIS_SW_REV_STR;\n#endif\n\n#define BT_GATT_DIS_MODEL_REF             dis_model\n#define BT_GATT_DIS_MANUF_REF             dis_manuf\n#define BT_GATT_DIS_SERIAL_NUMBER_STR_REF dis_serial_number\n#define BT_GATT_DIS_FW_REV_STR_REF        dis_fw_rev\n#define BT_GATT_DIS_HW_REV_STR_REF        dis_hw_rev\n#define BT_GATT_DIS_SW_REV_STR_REF        dis_sw_rev\n\n#else /* CONFIG_BT_GATT_DIS_SETTINGS */\n\n#define BT_GATT_DIS_MODEL_REF             CONFIG_BT_GATT_DIS_MODEL\n#define BT_GATT_DIS_MANUF_REF             CONFIG_BT_GATT_DIS_MANUF\n#define BT_GATT_DIS_SERIAL_NUMBER_STR_REF CONFIG_BT_GATT_DIS_SERIAL_NUMBER_STR\n#define BT_GATT_DIS_FW_REV_STR_REF        CONFIG_BT_GATT_DIS_FW_REV_STR\n#define BT_GATT_DIS_HW_REV_STR_REF        CONFIG_BT_GATT_DIS_HW_REV_STR\n#define BT_GATT_DIS_SW_REV_STR_REF        CONFIG_BT_GATT_DIS_SW_REV_STR\n\n#endif /* CONFIG_BT_GATT_DIS_SETTINGS */\n\nstatic ssize_t read_str(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, attr->user_data, strlen(attr->user_data));\n}\n\n#if CONFIG_BT_GATT_DIS_PNP\nstatic ssize_t read_pnp_id(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, &dis_pnp_id, sizeof(dis_pnp_id));\n}\n#endif\n\n/* Device Information Service Declaration */\nstatic struct bt_gatt_attr attrs[] = {\n\n    BT_GATT_PRIMARY_SERVICE(BT_UUID_DIS),\n\n    BT_GATT_CHARACTERISTIC(BT_UUID_DIS_MODEL_NUMBER, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_str, NULL, BT_GATT_DIS_MODEL_REF),\n    BT_GATT_CHARACTERISTIC(BT_UUID_DIS_MANUFACTURER_NAME, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_str, NULL, BT_GATT_DIS_MANUF_REF),\n#if CONFIG_BT_GATT_DIS_PNP\n    BT_GATT_CHARACTERISTIC(BT_UUID_DIS_PNP_ID, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_pnp_id, NULL, &dis_pnp_id),\n#endif\n\n#if defined(CONFIG_BT_GATT_DIS_SERIAL_NUMBER)\n    BT_GATT_CHARACTERISTIC(BT_UUID_DIS_SERIAL_NUMBER, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_str, NULL, BT_GATT_DIS_SERIAL_NUMBER_STR_REF),\n#endif\n#if defined(CONFIG_BT_GATT_DIS_FW_REV)\n    BT_GATT_CHARACTERISTIC(BT_UUID_DIS_FIRMWARE_REVISION, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_str, NULL, BT_GATT_DIS_FW_REV_STR_REF),\n#endif\n#if defined(CONFIG_BT_GATT_DIS_HW_REV)\n    BT_GATT_CHARACTERISTIC(BT_UUID_DIS_HARDWARE_REVISION, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_str, NULL, BT_GATT_DIS_HW_REV_STR_REF),\n#endif\n#if defined(CONFIG_BT_GATT_DIS_SW_REV)\n    BT_GATT_CHARACTERISTIC(BT_UUID_DIS_SOFTWARE_REVISION, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_str, NULL, BT_GATT_DIS_SW_REV_STR_REF),\n#endif\n\n};\n\nstatic struct bt_gatt_service dis_svc = BT_GATT_SERVICE(attrs);\n\nvoid dis_init(u8_t vid_src, u16_t vid, u16_t pid, u16_t pid_ver) {\n  dis_pnp_id.pnp_vid_src = vid_src;\n  dis_pnp_id.pnp_vid     = vid;\n  dis_pnp_id.pnp_pid     = pid;\n  dis_pnp_id.pnp_ver     = pid_ver;\n  bt_gatt_service_register(&dis_svc);\n}\n\n#if defined(CONFIG_BT_SETTINGS) && defined(CONFIG_BT_GATT_DIS_SETTINGS)\nstatic int dis_set(const char *name, size_t len_rd, settings_read_cb read_cb, void *store) {\n  int         len, nlen;\n  const char *next;\n\n  nlen = settings_name_next(name, &next);\n  if (!strncmp(name, \"manuf\", nlen)) {\n    len = read_cb(store, &dis_manuf, sizeof(dis_manuf) - 1);\n    if (len < 0) {\n      BT_ERR(\"Failed to read manufacturer from storage\"\n             \" (err %d)\",\n             len);\n    } else {\n      dis_manuf[len] = '\\0';\n\n      BT_DBG(\"Manufacturer set to %s\", dis_manuf);\n    }\n    return 0;\n  }\n  if (!strncmp(name, \"model\", nlen)) {\n    len = read_cb(store, &dis_model, sizeof(dis_model) - 1);\n    if (len < 0) {\n      BT_ERR(\"Failed to read model from storage\"\n             \" (err %d)\",\n             len);\n    } else {\n      dis_model[len] = '\\0';\n\n      BT_DBG(\"Model set to %s\", dis_model);\n    }\n    return 0;\n  }\n#if defined(CONFIG_BT_GATT_DIS_SERIAL_NUMBER)\n  if (!strncmp(name, \"serial\", nlen)) {\n    len = read_cb(store, &dis_serial_number, sizeof(dis_serial_number) - 1);\n    if (len < 0) {\n      BT_ERR(\"Failed to read serial number from storage\"\n             \" (err %d)\",\n             len);\n    } else {\n      dis_serial_number[len] = '\\0';\n\n      BT_DBG(\"Serial number set to %s\", dis_serial_number);\n    }\n    return 0;\n  }\n#endif\n#if defined(CONFIG_BT_GATT_DIS_FW_REV)\n  if (!strncmp(name, \"fw\", nlen)) {\n    len = read_cb(store, &dis_fw_rev, sizeof(dis_fw_rev) - 1);\n    if (len < 0) {\n      BT_ERR(\"Failed to read firmware revision from storage\"\n             \" (err %d)\",\n             len);\n    } else {\n      dis_fw_rev[len] = '\\0';\n\n      BT_DBG(\"Firmware revision set to %s\", dis_fw_rev);\n    }\n    return 0;\n  }\n#endif\n#if defined(CONFIG_BT_GATT_DIS_HW_REV)\n  if (!strncmp(name, \"hw\", nlen)) {\n    len = read_cb(store, &dis_hw_rev, sizeof(dis_hw_rev) - 1);\n    if (len < 0) {\n      BT_ERR(\"Failed to read hardware revision from storage\"\n             \" (err %d)\",\n             len);\n    } else {\n      dis_hw_rev[len] = '\\0';\n\n      BT_DBG(\"Hardware revision set to %s\", dis_hw_rev);\n    }\n    return 0;\n  }\n#endif\n#if defined(CONFIG_BT_GATT_DIS_SW_REV)\n  if (!strncmp(name, \"sw\", nlen)) {\n    len = read_cb(store, &dis_sw_rev, sizeof(dis_sw_rev) - 1);\n    if (len < 0) {\n      BT_ERR(\"Failed to read software revision from storage\"\n             \" (err %d)\",\n             len);\n    } else {\n      dis_sw_rev[len] = '\\0';\n\n      BT_DBG(\"Software revision set to %s\", dis_sw_rev);\n    }\n    return 0;\n  }\n#endif\n  return 0;\n}\n\nSETTINGS_STATIC_HANDLER_DEFINE(bt_dis, \"bt/dis\", NULL, dis_set, NULL, NULL);\n#endif /* CONFIG_BT_GATT_DIS_SETTINGS && CONFIG_BT_SETTINGS*/\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/services/dis.h",
    "content": "/** @file\n *  @brief GATT Device Information Service\n */\n\n/*\n * Copyright (c) 2018 Nordic Semiconductor ASA\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#ifndef _DIS_H_\n#define _DIS_H_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define AR_VENDOR_ID  0x0001\n#define AR_PRODUCT_ID 0x0002\n\nenum {\n    DIS_PNP_VID_SRC = 0x01,\n    USB_IMPL_VID\n};\nvoid dis_init(u8_t vid_src, u16_t vid, u16_t pid, u16_t pnp_ver);\n#ifdef __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/services/hog.c",
    "content": "/** @file\n *  @brief HoG Service sample\n */\n\n/*\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#include <zephyr/types.h>\n\n#include <byteorder.h>\n#include <errno.h>\n#include <stddef.h>\n#include <string.h>\n#include <zephyr.h>\n\n#include \"log.h\"\n#include <bluetooth.h>\n#include <conn.h>\n#include <gatt.h>\n#include <uuid.h>\n\n#include \"hog.h\"\n\nenum {\n  HIDS_REMOTE_WAKE          = BIT(0),\n  HIDS_NORMALLY_CONNECTABLE = BIT(1),\n};\n\nstruct hids_info {\n  uint16_t version; /* version number of base USB HID Specification */\n  uint8_t  code;    /* country HID Device hardware is localized for. */\n  uint8_t  flags;\n} __packed;\n\nstruct hids_report {\n  uint8_t id;   /* report id */\n  uint8_t type; /* report type */\n} __packed;\n\nstatic struct hids_info info = {\n    .version = 0x0000,\n    .code    = 0x00,\n    .flags   = HIDS_NORMALLY_CONNECTABLE,\n};\n\nenum {\n  HIDS_INPUT   = 0x01,\n  HIDS_OUTPUT  = 0x02,\n  HIDS_FEATURE = 0x03,\n};\n\nstatic struct hids_report input = {\n    .id   = 0x01,\n    .type = HIDS_INPUT,\n};\n\nstatic uint8_t simulate_input;\nstatic uint8_t ctrl_point;\nstatic uint8_t report_map[] = {\n    0x05, 0x01, /* Usage Page (Generic Desktop Ctrls) */\n    0x09, 0x02, /* Usage (Mouse) */\n    0xA1, 0x01, /* Collection (Application) */\n    0x09, 0x01, /*   Usage (Pointer) */\n    0xA1, 0x00, /*   Collection (Physical) */\n    0x05, 0x09, /*     Usage Page (Button) */\n    0x19, 0x01, /*     Usage Minimum (0x01) */\n    0x29, 0x03, /*     Usage Maximum (0x03) */\n    0x15, 0x00, /*     Logical Minimum (0) */\n    0x25, 0x01, /*     Logical Maximum (1) */\n    0x95, 0x03, /*     Report Count (3) */\n    0x75, 0x01, /*     Report Size (1) */\n    0x81, 0x02, /*     Input (Data,Var,Abs,No Wrap,Linear,...) */\n    0x95, 0x01, /*     Report Count (1) */\n    0x75, 0x05, /*     Report Size (5) */\n    0x81, 0x03, /*     Input (Const,Var,Abs,No Wrap,Linear,...) */\n    0x05, 0x01, /*     Usage Page (Generic Desktop Ctrls) */\n    0x09, 0x30, /*     Usage (X) */\n    0x09, 0x31, /*     Usage (Y) */\n    0x15, 0x81, /*     Logical Minimum (129) */\n    0x25, 0x7F, /*     Logical Maximum (127) */\n    0x75, 0x08, /*     Report Size (8) */\n    0x95, 0x02, /*     Report Count (2) */\n    0x81, 0x06, /*     Input (Data,Var,Rel,No Wrap,Linear,...) */\n    0xC0,       /*   End Collection */\n    0xC0,       /* End Collection */\n};\n\nstatic ssize_t read_info(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset) {\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, attr->user_data, sizeof(struct hids_info));\n}\n\nstatic ssize_t read_report_map(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset) {\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, report_map, sizeof(report_map));\n}\n\nstatic ssize_t read_report(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset) {\n  return bt_gatt_attr_read(conn, attr, buf, len, offset, attr->user_data, sizeof(struct hids_report));\n}\n\nstatic void input_ccc_changed(const struct bt_gatt_attr *attr, uint16_t value) {\n  simulate_input = (value == BT_GATT_CCC_NOTIFY) ? 1 : 0;\n  BT_WARN(\"simulate_input = [%d]\\r\\n\", simulate_input);\n}\n\nstatic ssize_t read_input_report(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, uint16_t len, uint16_t offset) { return bt_gatt_attr_read(conn, attr, buf, len, offset, NULL, 0); }\n\nstatic ssize_t write_ctrl_point(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, uint16_t len, uint16_t offset, uint8_t flags) {\n  uint8_t *value = attr->user_data;\n\n  if (offset + len > sizeof(ctrl_point)) {\n    return BT_GATT_ERR(BT_ATT_ERR_INVALID_OFFSET);\n  }\n\n  memcpy(value + offset, buf, len);\n\n  return len;\n}\n\n/* HID Service Declaration */\nstatic struct bt_gatt_attr attrs[] = {\n    BT_GATT_PRIMARY_SERVICE(BT_UUID_HIDS),\n    BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_INFO, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_info, NULL, &info),\n    BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT_MAP, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_report_map, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT, BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY, BT_GATT_PERM_READ_AUTHEN, read_input_report, NULL, NULL),\n    BT_GATT_CCC(input_ccc_changed, BT_GATT_PERM_READ_AUTHEN | BT_GATT_PERM_WRITE_AUTHEN),\n    BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ, read_report, NULL, &input),\n    BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_CTRL_POINT, BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_WRITE, NULL, write_ctrl_point, &ctrl_point),\n};\n\nstruct hids_remote_key {\n  u8_t  hid_page;\n  u16_t hid_usage;\n} __packed;\n\nstatic struct hids_remote_key remote_kbd_map_tab[] = {\n    {HID_PAGE_KBD, Key_a_or_A2},\n    {HID_PAGE_KBD,  Key_b_or_B},\n    {HID_PAGE_KBD,  Key_c_or_C},\n};\n\nint hog_notify(struct bt_conn *conn, uint16_t hid_usage, uint8_t press) {\n  struct bt_gatt_attr    *attr;\n  struct hids_remote_key *remote_key = NULL;\n  u8_t                    len        = 4, data[4];\n\n  for (int i = 0; i < (sizeof(remote_kbd_map_tab) / sizeof(remote_kbd_map_tab[0])); i++) {\n    if (remote_kbd_map_tab[i].hid_usage == hid_usage) {\n      remote_key = &remote_kbd_map_tab[i];\n      break;\n    }\n  }\n\n  if (!remote_key)\n    return EINVAL;\n\n  if (remote_key->hid_page == HID_PAGE_KBD) {\n    attr = &attrs[BT_CHAR_BLE_HID_REPORT_ATTR_VAL_INDEX];\n    len  = 3;\n  } else\n    return EINVAL;\n\n  sys_put_le16(hid_usage, data);\n  data[2] = 0;\n  data[3] = 0;\n\n  if (!press) {\n    memset(data, 0, len);\n  }\n\n  return bt_gatt_notify(conn, attr, data, len);\n}\n\nstruct bt_gatt_service hog_srv = BT_GATT_SERVICE(attrs);\n\nvoid hog_init(void) { bt_gatt_service_register(&hog_srv); }\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/services/hog.h",
    "content": "/** @file\n *  @brief HoG Service sample\n */\n\n/*\n * Copyright (c) 2016 Intel Corporation\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#ifndef _HOG_H_\n#define _HOG_H_\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <types.h>\n#define HID_PAGE_KBD  0x07\n#define HID_PAGE_CONS 0x0C\n\n#define BT_CHAR_BLE_HID_INFO_ATTR_VAL_INDEX       (2)\n#define BT_CHAR_BLE_HID_REPORT_MAP_ATTR_VAL_INDEX (4)\n#define BT_CHAR_BLE_HID_REPORT_ATTR_VAL_INDEX     (6)\n#define BT_CHAR_BLE_HID_CTRL_POINT_ATTR_VAL_INDEX (10)\n\nenum hid_usage {\n    Key_a_or_A2 = 0x0004,\n    Key_b_or_B,\n    Key_c_or_C\n};\n\nvoid hog_init(void);\nint hog_notify(struct bt_conn *conn, uint16_t hid_usage, uint8_t press);\n\n#ifdef __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/services/oad/oad.h",
    "content": "#ifndef __OAD_H__\n#define __OAD_H__\n\n#include \"types.h\"\n#include \"hci_host.h\"\n#include \"work_q.h\"\n\n#define LOCAL_MANU_CODE 0x2c00\n#define LOCAL_FILE_VER  00000001\n\n#define OAD_OPCODE_SIZE 1\n//00070000-0745-4650-8d93-df59be2fc10a\n#define BT_UUID_OAD BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x00070000, 0x0745, 0x4650, 0x8d93, 0xdf59be2fc10a))\n//00070001-0745-4650-8d93-df59be2fc10a\n#define BT_UUID_OAD_DATA_IN BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x00070001, 0x0745, 0x4650, 0x8d93, 0xdf59be2fc10a))\n//00070002-0745-4650-8d93-df59be2fc10a\n#define BT_UUID_OAD_DATA_OUT BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x00070002, 0x0745, 0x4650, 0x8d93, 0xdf59be2fc10a))\n\nenum {\n    OAD_SUCC = 0x00,\n    OAD_ABORT,\n    OAD_INVALID_IMAG,\n    OAD_REQ_MORE_DATA,\n    OAD_MALORMED_CMD,\n    OAD_UPGRD_CMPLT,\n    OAD_CHECK_HASH256_FAIL,\n};\n\nenum {\n    OAD_CMD_IMAG_IDENTITY = 0x00,\n    OAD_CMD_IMAG_BLOCK_REQ,\n    OAD_CMD_IMAG_BLOCK_RESP,\n    OAD_CMD_IMAG_UPGRD_END,\n    OAD_CMD_IMAG_INFO,\n};\n\nstruct oad_file_info {\n    u16_t manu_code;\n    u32_t file_ver;\n} __packed;\n\n#if defined(CONFIG_BT_SETTINGS)\nstruct oad_ef_info {\n    struct oad_file_info file_info;\n    u32_t file_offset;\n    u32_t last_wflash_addr;\n    u32_t upgrd_crc32;\n} __packed;\n\n#endif\n\nstruct oad_env_tag {\n    struct oad_file_info file_info;\n    u32_t cur_file_size;\n    u32_t upgrd_file_ver;\n    u32_t upgrd_file_size;\n    u32_t upgrd_offset;\n    u32_t upgrd_crc32;\n\n    struct k_delayed_work upgrd_work;\n    u32_t new_img_addr;\n    u32_t w_img_end_addr;\n\n    u32_t hosal_offset;\n};\n\nstruct oad_image_identity_t {\n    struct oad_file_info file_info;\n    u32_t file_size;\n    u32_t crc32;\n} __packed;\n\nstruct oad_block_req_t {\n    struct oad_file_info file_info;\n    u32_t file_offset;\n} __packed;\n\n#define OAD_BLK_RSP_DATA_OFFSET 12\nstruct oad_block_rsp_t {\n    uint8_t status;\n    struct oad_file_info file_info;\n    u32_t file_offset;\n    u8_t data_size;\n    u8_t *pdata;\n} __packed;\n\nstruct oad_upgrd_end_t {\n    u8_t status;\n    struct oad_file_info file_info;\n} __packed;\n\n#endif //__OAD_H__\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/services/oad/oad_client.h",
    "content": "#ifndef __BLE_OAD_H__\n#define __BLE_OAD_H__\n#include \"gatt.h\"\n#include \"Conn_internal.h\"\n#include \"oad.h\"\n\nenum {\n    OAD_CMDPROC_START = 0x00,\n    OAD_CMDPROC_IMAGE_IDENTITY,\n    OAD_CMDPROC_BLOCK_REQ,\n    OAD_CMDPROC_BLOCK_RESP,\n    OAD_CMDPROC_UPGRD_END,\n};\n\nstruct oad_cmdproc_block_req_t {\n    struct oad_file_info file_info;\n    uint32_t file_offset;\n    uint8_t data_len;\n} __packed;\n\nstruct oad_cmdproc_upgrd_end_t {\n    uint8_t status;\n    struct oad_file_info file_info;\n} __packed;\n\nstruct oad_cmdproc_req_t {\n    uint8_t cmd_id;\n    union {\n        struct oad_file_info file_info;\n        struct oad_cmdproc_block_req_t block_req;\n        struct oad_cmdproc_upgrd_end_t upgrd_end;\n    } q;\n} __packed;\n\nenum {\n    CMDPROC_TYPE_OAD = 0x00,\n    CMDPROC_TYPE_MAX\n};\n\nvoid oad_client_notify_handler(void *buf, u16_t len);\nvoid oad_send_image_identity_to_servicer(struct bt_conn *conn, u8_t *data, u16_t len);\nvoid oad_send_block_resp_to_servicer(struct bt_conn *conn, u8_t *data, u8_t len);\nvoid oad_cli_register(void);\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/services/oad/oad_main.h",
    "content": "#ifndef __OAD_API_H__\n#define __OAD_API_H__\n\n#include <stdint.h>\n\ntypedef bool (*app_check_oad_cb)(u32_t cur_file_ver, u32_t new_file_ver);\nvoid oad_service_enable(app_check_oad_cb cb);\nvoid ota_finish(struct k_work *work);\n#endif //__OAD_API_H__"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/services/oad/oad_service.h",
    "content": "#ifndef __OAD_SERVICE_H__\n#define __OAD_SERVICE_H__\n\n#include \"types.h\"\n#include \"gatt.h\"\n\ntypedef void (*oad_upper_recv_cb)(struct bt_conn *conn, const u8_t *data, u16_t len);\ntypedef void (*oad_disc_cb)(struct bt_conn *conn, u8_t reason);\nvoid bt_oad_register_recv_cb(oad_upper_recv_cb cb);\nvoid bt_oad_register_disc_cb(oad_disc_cb cb);\nvoid bt_oad_service_enable(void);\nvoid bt_oad_servkce_disable(void);\nvoid bt_oad_notify(struct bt_conn *conn, const void *data, u16_t len);\n#endif //__OAD_SERVICE_H__"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/services/scps.c",
    "content": "/**\n ****************************************************************************************\n *\n * @file Scps.c\n *\n * @brief Bouffalo Lab GATT Scan Parameters Service implementation\n *\n * Copyright (C) Bouffalo Lab 2019\n *\n * History: 2019-08 crealted by llgong @ Shanghai\n *\n ****************************************************************************************\n */\n#include \"scps.h\"\n#include \"bluetooth.h\"\n#include \"byteorder.h\"\n#include \"gatt.h\"\n#include \"uuid.h\"\n\nstruct scan_intvl_win {\n  u16_t scan_intvl;\n  u16_t scan_win;\n} __packed;\n\nstatic struct scan_intvl_win intvl_win = {\n    .scan_intvl = BT_GAP_SCAN_FAST_INTERVAL,\n    .scan_win   = BT_GAP_SCAN_FAST_WINDOW,\n};\n\nstatic ssize_t scan_intvl_win_write(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, u16_t len, u16_t offset, u8_t flags) {\n  const u8_t *data     = buf;\n  intvl_win.scan_intvl = sys_get_le16(data);\n  data += 2;\n  intvl_win.scan_win = sys_get_le16(data);\n\n  return len;\n}\n\nstatic struct bt_gatt_attr attrs[] = {BT_GATT_PRIMARY_SERVICE(BT_UUID_SCPS),\n                                      BT_GATT_CHARACTERISTIC(BT_UUID_SCPS_SCAN_INTVL_WIN, BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_NONE, NULL, NULL, &intvl_win)};\n\nstatic struct bt_gatt_service scps = BT_GATT_SERVICE(attrs);\n\nbool scps_init(u16_t scan_intvl, u16_t scan_win) {\n  int err;\n\n  if (scan_intvl < 0x0004 || scan_intvl > 0x4000) {\n    return false;\n  }\n\n  if (scan_win < 0x0004 || scan_win > 0x4000) {\n    return false;\n  }\n\n  if (scan_win > scan_intvl) {\n    return false;\n  }\n\n  intvl_win.scan_intvl = scan_intvl;\n  intvl_win.scan_win   = scan_win;\n\n  err = bt_gatt_service_register(&scps);\n\n  return err ? false : true;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/ble_stack/services/scps.h",
    "content": "#ifndef INCLUDE_BLUETOOTH_SERVICES_SCPS_H_\n#define INCLUDE_BLUETOOTH_SERVICES_SCPS_H_\n\n/**\n * @brief Scan Parameters Service (SCPS)\n * @defgroup bt_gatt_scps Scan Parameters Service (SCPS)\n * @ingroup bluetooth\n * @{\n *\n * [Experimental] Users should note that the APIs can change\n * as a part of ongoing development.\n */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <stdbool.h>\n#include <zephyr/types.h>\nbool scps_init(u16_t scan_itvl, u16_t scan_win);\n\n#ifdef __cplusplus\n}\n#endif\n\n/**\n * @}\n */\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/blecontroller/ble_inc/ble_lib_api.h",
    "content": "#ifndef BLE_LIB_API_H_\n#define BLE_LIB_API_H_\n\n#include <stdbool.h>\n#include <stdint.h>\n\nvoid ble_controller_init(uint8_t task_priority);\nvoid ble_controller_deinit(void);\n#if !defined(CFG_FREERTOS) && !defined(CFG_AOS)\nvoid blecontroller_main(void);\n#endif\n#if defined(CFG_BT_RESET)\nvoid ble_controller_reset(void);\n#endif\nchar *ble_controller_get_lib_ver(void);\n\n// if 0, success.\n// if -1, fail,\nint8_t ble_controller_set_scan_filter_table_size(uint8_t size);\n\n// return sleep duration, in unit of 1/32768s\n// if 0, means not allow sleep\n// if -1, means allow sleep, but there is no end of sleep interrupt (ble core deep sleep is not enabled)\nint32_t ble_controller_sleep(void);\nvoid    ble_controller_sleep_restore(void);\nbool    ble_controller_sleep_is_ongoing(void);\n\nvoid ble_controller_set_tx_pwr(int ble_tx_power);\nvoid ble_rf_set_tx_channel(uint16_t tx_channel);\n\n#if defined(CONFIG_BLE_MFG)\nenum { BLE_TEST_TX = 0x00, BLE_TEST_RX, BLE_TEST_RXTX, BLE_TEST_END };\n\n/// HCI LE Receiver Test Command parameters structure\nstruct le_rx_test_cmd {\n  /// RX frequency for Rx test\n  uint8_t rx_freq;\n};\n\n/// HCI LE Transmitter Test Command parameters structure\nstruct le_tx_test_cmd {\n  /// TX frequency for Tx test\n  uint8_t tx_freq;\n  /// TX test data length\n  uint8_t test_data_len;\n  /// TX test payload type - see enum\n  uint8_t pk_payload_type;\n};\n\nstruct le_enhanced_rx_test_cmd {\n  /// RX frequency for Rx test\n  uint8_t rx_freq;\n  /// RX PHY for Rx test\n  uint8_t rx_phy;\n  /// Modulation index: Assume transmitter will have a standard or stable modulation index\n  uint8_t modulation_index;\n};\n\n/// HCI LE Enhanced Transmitter Test Command parameters structure\nstruct le_enhanced_tx_test_cmd {\n  /// TX frequency for Tx test\n  uint8_t tx_freq;\n  /// TX test data length\n  uint8_t test_data_len;\n  /// TX test payload type - see enum\n  uint8_t pk_payload_type;\n  /// TX PHY for Rx test\n  uint8_t tx_phy;\n};\n\nint     le_rx_test_cmd_handler(uint16_t src_id, void *param, bool from_hci);\nint     le_tx_test_cmd_handler(uint16_t src_id, void *param, bool from_hci);\nint     le_test_end_cmd_handler(bool from_hci);\nuint8_t le_get_direct_test_type(void);\nvoid    le_test_mode_custom_aa(uint32_t access_code);\n\n#if defined(CONFIG_BLE_MFG_HCI_CMD)\nint reset_cmd_handler(void);\n#endif\n#endif\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/blecontroller/ble_inc/hci_onchip.h",
    "content": "#ifndef HCI_ONCHIP_H_\n#define HCI_ONCHIP_H_\n\nenum {\n    BT_HCI_CMD,\n    BT_HCI_ACL_DATA,\n    BT_HCI_CMD_CMP_EVT,\n    BT_HCI_CMD_STAT_EVT,\n    BT_HCI_LE_EVT,\n    BT_HCI_EVT\n};\n\ntypedef struct {\n    uint16_t opcode;\n    uint8_t *params;\n    uint8_t param_len;\n} bl_hci_cmd_struct;\n\ntypedef struct {\n    /// connection handle\n    uint16_t conhdl;\n    /// broadcast and packet boundary flag\n    uint8_t pb_bc_flag;\n    /// length of the data\n    uint16_t len;\n    uint8_t *buffer;\n} bl_hci_acl_data_tx;\n\ntypedef struct {\n    union {\n        bl_hci_cmd_struct hci_cmd;\n        bl_hci_acl_data_tx acl_data;\n    } p;\n} hci_pkt_struct;\n\ntypedef void (*bt_hci_recv_cb)(uint8_t pkt_type, uint16_t src_id, uint8_t *param, uint8_t param_len);\n\nuint8_t bt_onchiphci_interface_init(bt_hci_recv_cb cb);\nint8_t bt_onchiphci_send(uint8_t pkt_type, uint16_t dest_id, hci_pkt_struct *pkt);\nuint8_t bt_onchiphci_hanlde_rx_acl(void *param, uint8_t *host_buf_data);\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/ble/blecontroller/lib/README.md",
    "content": "# blecontroller lib information\n\n## BL702\n\n1. `libblecontroller_702_m0s0sp` BL702 support BLE scan feature and BLE PDS(power down sleep) feature.\n1. `libblecontroller_702_m0s1` 1 BLE connection is supported, BL702 can only be slave in this connection.\n1. `libblecontroller_702_m0s1p` Based on libblecontroller_702_m0s1, add BLE PDS(power down sleep) feature.\n1. `libblecontroller_702_m0s1s` Based on libblecontroller_702_m0s1, add BLE scan feature.\n1. `libblecontroller_702_m1s1` 1 BLE connection is supported, BL702 can be master or slave in this connection.\n1. `libblecontroller_702_m16s1` 16 BLE connections are suppprted, BL702 can be master or slave in each connection.\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/freertos/portable/gcc/risc-v/bl702/freertos_risc_v_chip_specific_extensions.h",
    "content": "/*\r\n * FreeRTOS Kernel V10.2.1\r\n * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n * this software and associated documentation files (the \"Software\"), to deal in\r\n * the Software without restriction, including without limitation the rights to\r\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n * the Software, and to permit persons to whom the Software is furnished to do so,\r\n * subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n * http://www.FreeRTOS.org\r\n * http://aws.amazon.com/freertos\r\n *\r\n * 1 tab == 4 spaces!\r\n */\r\n\r\n/*\r\n * The FreeRTOS kernel's RISC-V port is split between the the code that is\r\n * common across all currently supported RISC-V chips (implementations of the\r\n * RISC-V ISA), and code that tailors the port to a specific RISC-V chip:\r\n *\r\n * + FreeRTOS\\Source\\portable\\GCC\\RISC-V-RV32\\portASM.S contains the code that\r\n *   is common to all currently supported RISC-V chips.  There is only one\r\n *   portASM.S file because the same file is built for all RISC-V target chips.\r\n *\r\n * + Header files called freertos_risc_v_chip_specific_extensions.h contain the\r\n *   code that tailors the FreeRTOS kernel's RISC-V port to a specific RISC-V\r\n *   chip.  There are multiple freertos_risc_v_chip_specific_extensions.h files\r\n *   as there are multiple RISC-V chip implementations.\r\n *\r\n * !!!NOTE!!!\r\n * TAKE CARE TO INCLUDE THE CORRECT freertos_risc_v_chip_specific_extensions.h\r\n * HEADER FILE FOR THE CHIP IN USE.  This is done using the assembler's (not the\r\n * compiler's!) include path.  For example, if the chip in use includes a core\r\n * local interrupter (CLINT) and does not include any chip specific register\r\n * extensions then add the path below to the assembler's include path:\r\n * FreeRTOS\\Source\\portable\\GCC\\RISC-V-RV32\\chip_specific_extensions\\RV32I_CLINT_no_extensions\r\n *\r\n */\r\n\r\n#ifndef __FREERTOS_RISC_V_EXTENSIONS_H__\r\n#define __FREERTOS_RISC_V_EXTENSIONS_H__\r\n\r\n#define portasmHAS_CLINT               1\r\n#define portasmADDITIONAL_CONTEXT_SIZE 0 /* Must be even number on 32-bit cores. */\r\n\r\n.macro portasmSAVE_ADDITIONAL_REGISTERS\r\n    /* No additional registers to save, so this macro does nothing. */\r\n    .endm\r\n\r\n    /* Restore the additional registers found on the Pulpino. */\r\n    .macro portasmRESTORE_ADDITIONAL_REGISTERS\r\n    /* No additional registers to restore, so this macro does nothing. */\r\n    .endm\r\n\r\n#endif /* __FREERTOS_RISC_V_EXTENSIONS_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/freertos/portable/gcc/risc-v/bl702/port.c",
    "content": "/*\r\n * FreeRTOS Kernel V10.2.1\r\n * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n * this software and associated documentation files (the \"Software\"), to deal in\r\n * the Software without restriction, including without limitation the rights to\r\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n * the Software, and to permit persons to whom the Software is furnished to do so,\r\n * subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n * http://www.FreeRTOS.org\r\n * http://aws.amazon.com/freertos\r\n *\r\n * 1 tab == 4 spaces!\r\n */\r\n\r\n/*-----------------------------------------------------------\r\n * Implementation of functions defined in portable.h for the RISC-V RV32 port.\r\n *----------------------------------------------------------*/\r\n\r\n/* Scheduler includes. */\r\n#include \"FreeRTOS.h\"\r\n#include \"portmacro.h\"\r\n#include \"task.h\"\r\n\r\n#ifndef configCLINT_BASE_ADDRESS\r\n#warning configCLINT_BASE_ADDRESS must be defined in FreeRTOSConfig.h.  If the target chip includes a Core Local Interrupter (CLINT) then set configCLINT_BASE_ADDRESS to the CLINT base address.  Otherwise set configCLINT_BASE_ADDRESS to 0.\r\n#endif\r\n\r\n/* Let the user override the pre-loading of the initial LR with the address of\r\nprvTaskExitError() in case it messes up unwinding of the stack in the\r\ndebugger. */\r\n#ifdef configTASK_RETURN_ADDRESS\r\n#define portTASK_RETURN_ADDRESS configTASK_RETURN_ADDRESS\r\n#else\r\n#define portTASK_RETURN_ADDRESS prvTaskExitError\r\n#endif\r\n\r\n/* The stack used by interrupt service routines.  Set configISR_STACK_SIZE_WORDS\r\nto use a statically allocated array as the interrupt stack.  Alternative leave\r\nconfigISR_STACK_SIZE_WORDS undefined and update the linker script so that a\r\nlinker variable names __freertos_irq_stack_top has the same value as the top\r\nof the stack used by main.  Using the linker script method will repurpose the\r\nstack that was used by main before the scheduler was started for use as the\r\ninterrupt stack after the scheduler has started. */\r\n#ifdef configISR_STACK_SIZE_WORDS\r\nstatic __attribute__((aligned(16))) StackType_t xISRStack[configISR_STACK_SIZE_WORDS] = {0};\r\nconst StackType_t                               xISRStackTop                          = (StackType_t) & (xISRStack[configISR_STACK_SIZE_WORDS & ~portBYTE_ALIGNMENT_MASK]);\r\n#else\r\nextern const uint32_t __freertos_irq_stack_top[];\r\nconst StackType_t     xISRStackTop = (StackType_t)__freertos_irq_stack_top;\r\n#endif\r\n\r\n/*\r\n * Setup the timer to generate the tick interrupts.  The implementation in this\r\n * file is weak to allow application writers to change the timer used to\r\n * generate the tick interrupt.\r\n */\r\nvoid vPortSetupTimerInterrupt(void) __attribute__((weak));\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Used to program the machine timer compare register. */\r\nuint64_t                 ullNextTime                         = 0ULL;\r\nconst uint64_t          *pullNextTime                        = &ullNextTime;\r\nconst size_t             uxTimerIncrementsForOneTick         = (size_t)(configCPU_CLOCK_HZ / configTICK_RATE_HZ); /* Assumes increment won't go over 32-bits. */\r\nvolatile uint64_t *const pullMachineTimerCompareRegisterBase = (volatile uint64_t *const)(configCLINT_BASE_ADDRESS + 0x4000);\r\nvolatile uint64_t       *pullMachineTimerCompareRegister     = 0;\r\nBaseType_t               TrapNetCounter                      = 0;\r\nconst BaseType_t        *pTrapNetCounter                     = &TrapNetCounter;\r\n\r\n/* Set configCHECK_FOR_STACK_OVERFLOW to 3 to add ISR stack checking to task\r\nstack checking.  A problem in the ISR stack will trigger an assert, not call the\r\nstack overflow hook function (because the stack overflow hook is specific to a\r\ntask stack, not the ISR stack). */\r\n#if (configCHECK_FOR_STACK_OVERFLOW > 2)\r\n#warning This path not tested, or even compiled yet.\r\n/* Don't use 0xa5 as the stack fill bytes as that is used by the kernerl for\r\nthe task stacks, and so will legitimately appear in many positions within\r\nthe ISR stack. */\r\n#define portISR_STACK_FILL_BYTE 0xee\r\n\r\nstatic const uint8_t ucExpectedStackBytes[] = {portISR_STACK_FILL_BYTE, portISR_STACK_FILL_BYTE, portISR_STACK_FILL_BYTE, portISR_STACK_FILL_BYTE, portISR_STACK_FILL_BYTE,\r\n                                               portISR_STACK_FILL_BYTE, portISR_STACK_FILL_BYTE, portISR_STACK_FILL_BYTE, portISR_STACK_FILL_BYTE, portISR_STACK_FILL_BYTE,\r\n                                               portISR_STACK_FILL_BYTE, portISR_STACK_FILL_BYTE, portISR_STACK_FILL_BYTE, portISR_STACK_FILL_BYTE, portISR_STACK_FILL_BYTE,\r\n                                               portISR_STACK_FILL_BYTE, portISR_STACK_FILL_BYTE, portISR_STACK_FILL_BYTE, portISR_STACK_FILL_BYTE, portISR_STACK_FILL_BYTE};\r\n\r\n#define portCHECK_ISR_STACK() configASSERT((memcmp((void *)xISRStack, (void *)ucExpectedStackBytes, sizeof(ucExpectedStackBytes)) == 0))\r\n#else\r\n/* Define the function away. */\r\n#define portCHECK_ISR_STACK()\r\n#endif /* configCHECK_FOR_STACK_OVERFLOW > 2 */\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n#if (configCLINT_BASE_ADDRESS != 0)\r\n\r\nvoid vPortSetupTimerInterrupt(void) {\r\n  uint32_t                 ulCurrentTimeHigh, ulCurrentTimeLow;\r\n  volatile uint32_t *const pulTimeHigh = (volatile uint32_t *const)(configCLINT_BASE_ADDRESS + 0xBFFC);\r\n  volatile uint32_t *const pulTimeLow  = (volatile uint32_t *const)(configCLINT_BASE_ADDRESS + 0xBFF8);\r\n  volatile uint32_t        ulHartId    = 0;\r\n\r\n  __asm volatile(\"csrr %0, mhartid\" : \"=r\"(ulHartId));\r\n  pullMachineTimerCompareRegister = &(pullMachineTimerCompareRegisterBase[ulHartId]);\r\n\r\n  do {\r\n    ulCurrentTimeHigh = *pulTimeHigh;\r\n    ulCurrentTimeLow  = *pulTimeLow;\r\n  } while (ulCurrentTimeHigh != *pulTimeHigh);\r\n\r\n  ullNextTime = (uint64_t)ulCurrentTimeHigh;\r\n  ullNextTime <<= 32ULL;\r\n  ullNextTime |= (uint64_t)ulCurrentTimeLow;\r\n  ullNextTime += (uint64_t)uxTimerIncrementsForOneTick;\r\n  *pullMachineTimerCompareRegister = ullNextTime;\r\n\r\n  /* Prepare the time to use after the next tick interrupt. */\r\n  ullNextTime += (uint64_t)uxTimerIncrementsForOneTick;\r\n}\r\n\r\n#endif /* ( configCLINT_BASE_ADDRESS != 0 ) */\r\n/*-----------------------------------------------------------*/\r\n\r\nBaseType_t xPortStartScheduler(void) {\r\n  extern void xPortStartFirstTask(void);\r\n\r\n#if (configASSERT_DEFINED == 1)\r\n  {\r\n    volatile uint32_t mtvec = 0;\r\n\r\n    /* Check the least significant two bits of mtvec are 00 - indicating\r\n    single vector mode. */\r\n    __asm volatile(\"csrr %0, mtvec\" : \"=r\"(mtvec));\r\n    // configASSERT( ( mtvec & 0x03UL ) == 0 );\r\n\r\n    /* Check alignment of the interrupt stack - which is the same as the\r\n    stack that was being used by main() prior to the scheduler being\r\n    started. */\r\n    configASSERT((xISRStackTop & portBYTE_ALIGNMENT_MASK) == 0);\r\n  }\r\n#endif /* configASSERT_DEFINED */\r\n\r\n  /* If there is a CLINT then it is ok to use the default implementation\r\n  in this file, otherwise vPortSetupTimerInterrupt() must be implemented to\r\n  configure whichever clock is to be used to generate the tick interrupt. */\r\n  vPortSetupTimerInterrupt();\r\n\r\n#if (configCLINT_BASE_ADDRESS != 0)\r\n  {\r\n    /* Enable mtime and external interrupts.  1<<7 for timer interrupt, 1<<11\r\n    for external interrupt.  _RB_ What happens here when mtime is not present as\r\n    with pulpino? */\r\n    __asm volatile(\"csrs mie, %0\" ::\"r\"(0x880));\r\n  }\r\n#else\r\n  {\r\n    /* Enable external interrupts. */\r\n    __asm volatile(\"csrs mie, %0\" ::\"r\"(0x800));\r\n  }\r\n#endif /* configCLINT_BASE_ADDRESS */\r\n\r\n  *(uint8_t *)(0x02800400 + 7) = 1;\r\n  xPortStartFirstTask();\r\n\r\n  /* Should not get here as after calling xPortStartFirstTask() only tasks\r\n  should be executing. */\r\n  return pdFAIL;\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid vPortEndScheduler(void) {\r\n  /* Not implemented. */\r\n  for (;;)\r\n    ;\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/freertos/portable/gcc/risc-v/bl702/portASM.S",
    "content": "/*\r\n * FreeRTOS Kernel V10.2.1\r\n * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n * this software and associated documentation files (the \"Software\"), to deal in\r\n * the Software without restriction, including without limitation the rights to\r\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n * the Software, and to permit persons to whom the Software is furnished to do so,\r\n * subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n * http://www.FreeRTOS.org\r\n * http://aws.amazon.com/freertos\r\n *\r\n * 1 tab == 4 spaces!\r\n */\r\n\r\n/*\r\n * The FreeRTOS kernel's RISC-V port is split between the the code that is\r\n * common across all currently supported RISC-V chips (implementations of the\r\n * RISC-V ISA), and code which tailors the port to a specific RISC-V chip:\r\n *\r\n * + The code that is common to all RISC-V chips is implemented in\r\n *   FreeRTOS\\Source\\portable\\GCC\\RISC-V-RV32\\portASM.S.  There is only one\r\n *   portASM.S file because the same file is used no matter which RISC-V chip is\r\n *   in use.\r\n *\r\n * + The code that tailors the kernel's RISC-V port to a specific RISC-V\r\n *   chip is implemented in freertos_risc_v_chip_specific_extensions.h.  There\r\n *   is one freertos_risc_v_chip_specific_extensions.h that can be used with any\r\n *   RISC-V chip that both includes a standard CLINT and does not add to the\r\n *   base set of RISC-V registers.  There are additional\r\n *   freertos_risc_v_chip_specific_extensions.h files for RISC-V implementations\r\n *   that do not include a standard CLINT or do add to the base set of RISC-V\r\n *   registers.\r\n *\r\n * CARE MUST BE TAKEN TO INCLDUE THE CORRECT\r\n * freertos_risc_v_chip_specific_extensions.h HEADER FILE FOR THE CHIP\r\n * IN USE.  To include the correct freertos_risc_v_chip_specific_extensions.h\r\n * header file ensure the path to the correct header file is in the assembler's\r\n * include path.\r\n *\r\n * This freertos_risc_v_chip_specific_extensions.h is for use on RISC-V chips\r\n * that include a standard CLINT and do not add to the base set of RISC-V\r\n * registers.\r\n *\r\n */\r\n#if __riscv_xlen == 64\r\n\t#define portWORD_SIZE 8\r\n\t#define store_x sd\r\n\t#define load_x ld\r\n#elif __riscv_xlen == 32\r\n\t#define store_x sw\r\n\t#define load_x lw\r\n\t#define portWORD_SIZE 4\r\n#else\r\n\t#error Assembler did not define __riscv_xlen\r\n#endif\r\n\r\n#include \"freertos_risc_v_chip_specific_extensions.h\"\r\n\r\n/* Check the freertos_risc_v_chip_specific_extensions.h and/or command line\r\ndefinitions. */\r\n#ifndef portasmHAS_CLINT\r\n\t#error freertos_risc_v_chip_specific_extensions.h must define portasmHAS_CLINT to either 1 (CLINT present) or 0 (clint not present).\r\n#endif\r\n\r\n#ifndef portasmHANDLE_INTERRUPT\r\n\t#error portasmHANDLE_INTERRUPT must be defined to the function to be called to handle external/peripheral interrupts.  portasmHANDLE_INTERRUPT can be defined on the assmbler command line or in the appropriate freertos_risc_v_chip_specific_extensions.h header file.\r\n#endif\r\n\r\n/* Only the standard core registers are stored by default.  Any additional\r\nregisters must be saved by the portasmSAVE_ADDITIONAL_REGISTERS and\r\nportasmRESTORE_ADDITIONAL_REGISTERS macros - which can be defined in a chip\r\nspecific version of freertos_risc_v_chip_specific_extensions.h.  See the notes\r\nat the top of this file. */\r\n#define portCONTEXT_SIZE ( 30 * portWORD_SIZE )\r\n\r\n.global xPortStartFirstTask\r\n.global freertos_risc_v_trap_handler\r\n.global pxPortInitialiseStack\r\n.extern pxCurrentTCB\r\n.extern ulPortTrapHandler\r\n.extern vTaskSwitchContext\r\n.extern xTaskIncrementTick\r\n.extern Timer_IRQHandler\r\n.extern pullMachineTimerCompareRegister\r\n.extern pullNextTime\r\n .extern pTrapNetCounter\r\n.extern uxTimerIncrementsForOneTick /* size_t type so 32-bit on 32-bit core and 64-bits on 64-bit core. */\r\n.extern xISRStackTop\r\n.extern portasmHANDLE_INTERRUPT\r\n.extern Trap_Handler\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n.align 8\r\n.func\r\nfreertos_risc_v_trap_handler:\r\n\taddi sp, sp, -portCONTEXT_SIZE\r\n\tstore_x x1, 1 * portWORD_SIZE( sp )\r\n\tstore_x x5, 2 * portWORD_SIZE( sp )\r\n\tstore_x x6, 3 * portWORD_SIZE( sp )\r\n\tstore_x x7, 4 * portWORD_SIZE( sp )\r\n\tstore_x x8, 5 * portWORD_SIZE( sp )\r\n\tstore_x x9, 6 * portWORD_SIZE( sp )\r\n\tstore_x x10, 7 * portWORD_SIZE( sp )\r\n\tstore_x x11, 8 * portWORD_SIZE( sp )\r\n\tstore_x x12, 9 * portWORD_SIZE( sp )\r\n\tstore_x x13, 10 * portWORD_SIZE( sp )\r\n\tstore_x x14, 11 * portWORD_SIZE( sp )\r\n\tstore_x x15, 12 * portWORD_SIZE( sp )\r\n\tstore_x x16, 13 * portWORD_SIZE( sp )\r\n\tstore_x x17, 14 * portWORD_SIZE( sp )\r\n\tstore_x x18, 15 * portWORD_SIZE( sp )\r\n\tstore_x x19, 16 * portWORD_SIZE( sp )\r\n\tstore_x x20, 17 * portWORD_SIZE( sp )\r\n\tstore_x x21, 18 * portWORD_SIZE( sp )\r\n\tstore_x x22, 19 * portWORD_SIZE( sp )\r\n\tstore_x x23, 20 * portWORD_SIZE( sp )\r\n\tstore_x x24, 21 * portWORD_SIZE( sp )\r\n\tstore_x x25, 22 * portWORD_SIZE( sp )\r\n\tstore_x x26, 23 * portWORD_SIZE( sp )\r\n\tstore_x x27, 24 * portWORD_SIZE( sp )\r\n\tstore_x x28, 25 * portWORD_SIZE( sp )\r\n\tstore_x x29, 26 * portWORD_SIZE( sp )\r\n\tstore_x x30, 27 * portWORD_SIZE( sp )\r\n\tstore_x x31, 28 * portWORD_SIZE( sp )\r\n\r\n\tcsrr t0, mstatus\t\t\t\t\t/* Required for MPIE bit. */\r\n\tstore_x t0, 29 * portWORD_SIZE( sp )\r\n\r\n\tportasmSAVE_ADDITIONAL_REGISTERS\t/* Defined in freertos_risc_v_chip_specific_extensions.h to save any registers unique to the RISC-V implementation. */\r\n\r\n         load_x  t0, pTrapNetCounter\r\n         lw   t1, 0( t0 )\r\n         addi   t1, t1, 1\r\n         store_x t1, 0( t0 )\r\n\r\n\tload_x  t0, pxCurrentTCB\t\t\t/* Load pxCurrentTCB. */\r\n\tstore_x  sp, 0( t0 )\t\t\t\t/* Write sp to first TCB member. */\r\n\r\n\tcsrr a0, mcause\r\n\tcsrr a1, mepc\r\n\r\n\tli t0, 0x80000FFF\r\n\tand a0, a0, t0\r\ntest_if_asynchronous:\r\n\tsrli a2, a0, __riscv_xlen - 1\t\t/* MSB of mcause is 1 if handing an asynchronous interrupt - shift to LSB to clear other bits. */\r\n\tbeq a2, x0, handle_synchronous\t\t/* Branch past interrupt handing if not asynchronous. */\r\n\tstore_x a1, 0( sp )\t\t\t\t\t/* Asynch so save unmodified exception return address. */\r\n\r\nhandle_asynchronous:\r\n\r\n#if( portasmHAS_CLINT != 0 )\r\n\r\n\ttest_if_mtimer:\t\t\t\t\t\t/* If there is a CLINT then the mtimer is used to generate the tick interrupt. */\r\n\r\n\t\taddi t0, x0, 1\r\n\r\n\t\tslli t0, t0, __riscv_xlen - 1   /* LSB is already set, shift into MSB.  Shift 31 on 32-bit or 63 on 64-bit cores. */\r\n\t\taddi t1, t0, 7\t\t\t\t\t/* 0x8000[]0007 == machine timer interrupt. */\r\n\t\tbne a0, t1, test_if_external_interrupt\r\n\r\n\t\tload_x t0, pullMachineTimerCompareRegister  /* Load address of compare register into t0. */\r\n\t\tload_x t1, pullNextTime  \t\t/* Load the address of ullNextTime into t1. */\r\n\r\n\t\t#if( __riscv_xlen == 32 )\r\n\r\n\t\t\t/* Update the 64-bit mtimer compare match value in two 32-bit writes. */\r\n\t\t\tli t4, -1\r\n\t\t\tlw t2, 0(t1)\t\t\t\t/* Load the low word of ullNextTime into t2. */\r\n\t\t\tlw t3, 4(t1)\t\t\t\t/* Load the high word of ullNextTime into t3. */\r\n\t\t\tsw t4, 0(t0)\t\t\t\t/* Low word no smaller than old value to start with - will be overwritten below. */\r\n\t\t\tsw t3, 4(t0)\t\t\t\t/* Store high word of ullNextTime into compare register.  No smaller than new value. */\r\n\t\t\tsw t2, 0(t0)\t\t\t\t/* Store low word of ullNextTime into compare register. */\r\n\t\t\tlw t0, uxTimerIncrementsForOneTick\t/* Load the value of ullTimerIncrementForOneTick into t0 (could this be optimized by storing in an array next to pullNextTime?). */\r\n\t\t\tadd t4, t0, t2\t\t\t\t/* Add the low word of ullNextTime to the timer increments for one tick (assumes timer increment for one tick fits in 32-bits). */\r\n\t\t\tsltu t5, t4, t2\t\t\t\t/* See if the sum of low words overflowed (what about the zero case?). */\r\n\t\t\tadd t6, t3, t5\t\t\t\t/* Add overflow to high word of ullNextTime. */\r\n\t\t\tsw t4, 0(t1)\t\t\t\t/* Store new low word of ullNextTime. */\r\n\t\t\tsw t6, 4(t1)\t\t\t\t/* Store new high word of ullNextTime. */\r\n\r\n\t\t#endif /* __riscv_xlen == 32 */\r\n\r\n\t\t#if( __riscv_xlen == 64 )\r\n\r\n\t\t\t/* Update the 64-bit mtimer compare match value. */\r\n\t\t\tld t2, 0(t1)\t\t\t \t/* Load ullNextTime into t2. */\r\n\t\t\tsd t2, 0(t0)\t\t\t\t/* Store ullNextTime into compare register. */\r\n\t\t\tld t0, uxTimerIncrementsForOneTick  /* Load the value of ullTimerIncrementForOneTick into t0 (could this be optimized by storing in an array next to pullNextTime?). */\r\n\t\t\tadd t4, t0, t2\t\t\t\t/* Add ullNextTime to the timer increments for one tick. */\r\n\t\t\tsd t4, 0(t1)\t\t\t\t/* Store ullNextTime. */\r\n\r\n\t\t#endif /* __riscv_xlen == 64 */\r\n\r\n\t\tload_x sp, xISRStackTop\t\t\t/* Switch to ISR stack before function call. */\r\n\t\tjal xTaskIncrementTick\r\n\t\tbeqz a0, processed_source\t\t/* Don't switch context if incrementing tick didn't unblock a task. */\r\n\t\tjal vTaskSwitchContext\r\n\t\tj processed_source\r\n\r\n\ttest_if_external_interrupt:\t\t\t/* If there is a CLINT and the mtimer interrupt is not pending then check to see if an external interrupt is pending. */\r\n\t\t//addi t1, t1, 4\t\t\t\t\t/* 0x80000007 + 4 = 0x8000000b == Machine external interrupt. */\r\n\t\t//bne a0, t1, as_yet_unhandled\t/* Something as yet unhandled. */\r\n\r\n#endif /* portasmHAS_CLINT */\r\n\r\n\tload_x sp, xISRStackTop\t\t\t\t/* Switch to ISR stack before function call. */\r\n\tjal portasmHANDLE_INTERRUPT\t\t\t/* Jump to the interrupt handler if there is no CLINT or if there is a CLINT and it has been determined that an external interrupt is pending. */\r\n\tj processed_source\r\n\r\nhandle_synchronous:\r\n\taddi a1, a1, 4\t\t\t\t\t\t/* Synchronous so updated exception return address to the instruction after the instruction that generated the exeption. */\r\n\tstore_x a1, 0( sp )\t\t\t\t\t/* Save updated exception return address. */\r\n\r\ntest_if_environment_call:\r\n\tli t0, 11 \t\t\t\t\t\t\t/* 11 == environment call. */\r\n\tbne a0, t0, is_exception\t\t\t/* Not an M environment call, so some other exception. */\r\n\tload_x sp, xISRStackTop\t\t\t\t/* Switch to ISR stack before function call. */\r\n\tjal vTaskSwitchContext\r\n\tj processed_source\r\n\r\nis_exception:\r\n\tcsrr t0, mcause\t\t\t\t\t\t/* For viewing in the debugger only. */\r\n\tcsrr t1, mepc\t\t\t\t\t\t/* For viewing in the debugger only */\r\n\tcsrr t2, mstatus\r\n\tload_x sp, xISRStackTop\r\n\tjal Trap_Handler\r\n\tj is_exception\r\n\r\nas_yet_unhandled:\r\n\tcsrr t0, mcause\t\t\t\t\t\t/* For viewing in the debugger only. */\r\n\tj as_yet_unhandled\r\n\r\nprocessed_source:\r\n\r\n         load_x  t0, pTrapNetCounter\r\n         lw   t1, 0 ( t0 )\r\n         addi   t1, t1, -1\r\n         store_x t1, 0( t0 )\r\n         \r\n\tload_x  t1, pxCurrentTCB\t\t\t/* Load pxCurrentTCB. */\r\n\tload_x  sp, 0( t1 )\t\t\t\t \t/* Read sp from first TCB member. */\r\n\r\n\t/* Load mret with the address of the next instruction in the task to run next. */\r\n\tload_x t0, 0( sp )\r\n\tcsrw mepc, t0\r\n\r\n\tportasmRESTORE_ADDITIONAL_REGISTERS\t/* Defined in freertos_risc_v_chip_specific_extensions.h to restore any registers unique to the RISC-V implementation. */\r\n\r\n\t/* Load mstatus with the interrupt enable bits used by the task. */\r\n\tload_x  t0, 29 * portWORD_SIZE( sp )\r\n\tcsrw mstatus, t0\t\t\t\t\t\t/* Required for MPIE bit. */\r\n\r\n\tload_x  x1, 1 * portWORD_SIZE( sp )\r\n\tload_x  x5, 2 * portWORD_SIZE( sp )\t\t/* t0 */\r\n\tload_x  x6, 3 * portWORD_SIZE( sp )\t\t/* t1 */\r\n\tload_x  x7, 4 * portWORD_SIZE( sp )\t\t/* t2 */\r\n\tload_x  x8, 5 * portWORD_SIZE( sp )\t\t/* s0/fp */\r\n\tload_x  x9, 6 * portWORD_SIZE( sp )\t\t/* s1 */\r\n\tload_x  x10, 7 * portWORD_SIZE( sp )\t/* a0 */\r\n\tload_x  x11, 8 * portWORD_SIZE( sp )\t/* a1 */\r\n\tload_x  x12, 9 * portWORD_SIZE( sp )\t/* a2 */\r\n\tload_x  x13, 10 * portWORD_SIZE( sp )\t/* a3 */\r\n\tload_x  x14, 11 * portWORD_SIZE( sp )\t/* a4 */\r\n\tload_x  x15, 12 * portWORD_SIZE( sp )\t/* a5 */\r\n\tload_x  x16, 13 * portWORD_SIZE( sp )\t/* a6 */\r\n\tload_x  x17, 14 * portWORD_SIZE( sp )\t/* a7 */\r\n\tload_x  x18, 15 * portWORD_SIZE( sp )\t/* s2 */\r\n\tload_x  x19, 16 * portWORD_SIZE( sp )\t/* s3 */\r\n\tload_x  x20, 17 * portWORD_SIZE( sp )\t/* s4 */\r\n\tload_x  x21, 18 * portWORD_SIZE( sp )\t/* s5 */\r\n\tload_x  x22, 19 * portWORD_SIZE( sp )\t/* s6 */\r\n\tload_x  x23, 20 * portWORD_SIZE( sp )\t/* s7 */\r\n\tload_x  x24, 21 * portWORD_SIZE( sp )\t/* s8 */\r\n\tload_x  x25, 22 * portWORD_SIZE( sp )\t/* s9 */\r\n\tload_x  x26, 23 * portWORD_SIZE( sp )\t/* s10 */\r\n\tload_x  x27, 24 * portWORD_SIZE( sp )\t/* s11 */\r\n\tload_x  x28, 25 * portWORD_SIZE( sp )\t/* t3 */\r\n\tload_x  x29, 26 * portWORD_SIZE( sp )\t/* t4 */\r\n\tload_x  x30, 27 * portWORD_SIZE( sp )\t/* t5 */\r\n\tload_x  x31, 28 * portWORD_SIZE( sp )\t/* t6 */\r\n\taddi sp, sp, portCONTEXT_SIZE\r\n\r\n\tmret\r\n\t.endfunc\r\n/*-----------------------------------------------------------*/\r\n\r\n.align 8\r\n.func\r\nxPortStartFirstTask:\r\n\r\n#if( portasmHAS_CLINT != 0 )\r\n\t/* If there is a clint then interrupts can branch directly to the FreeRTOS\r\n\ttrap handler.  Otherwise the interrupt controller will need to be configured\r\n\toutside of this file. */\r\n\tla t0, freertos_risc_v_trap_handler\r\n\tori t0, t0, 2\r\n\tcsrw mtvec, t0\r\n#endif /* portasmHAS_CLILNT */\r\n\r\n\tload_x  sp, pxCurrentTCB\t\t\t/* Load pxCurrentTCB. */\r\n\tload_x  sp, 0( sp )\t\t\t\t \t/* Read sp from first TCB member. */\r\n\r\n\tload_x  x1, 0( sp ) /* Note for starting the scheduler the exception return address is used as the function return address. */\r\n\r\n\tportasmRESTORE_ADDITIONAL_REGISTERS\t/* Defined in freertos_risc_v_chip_specific_extensions.h to restore any registers unique to the RISC-V implementation. */\r\n\r\n\tload_x  t0, 29 * portWORD_SIZE( sp )\t/* mstatus */\r\n\taddi t0, t0, 0x08\t\t\t\t\t\t/* Set MIE bit so the first task starts with interrupts enabled - required as returns with ret not eret. */\r\n\tcsrrw  x0, mstatus, t0\t\t\t\t\t/* Interrupts enabled from here! */\r\n\r\n\tload_x  x5, 2 * portWORD_SIZE( sp )\t\t/* t0 */\r\n\tload_x  x6, 3 * portWORD_SIZE( sp )\t\t/* t1 */\r\n\tload_x  x7, 4 * portWORD_SIZE( sp )\t\t/* t2 */\r\n\tload_x  x8, 5 * portWORD_SIZE( sp )\t\t/* s0/fp */\r\n\tload_x  x9, 6 * portWORD_SIZE( sp )\t\t/* s1 */\r\n\tload_x  x10, 7 * portWORD_SIZE( sp )\t/* a0 */\r\n\tload_x  x11, 8 * portWORD_SIZE( sp )\t/* a1 */\r\n\tload_x  x12, 9 * portWORD_SIZE( sp )\t/* a2 */\r\n\tload_x  x13, 10 * portWORD_SIZE( sp )\t/* a3 */\r\n\tload_x  x14, 11 * portWORD_SIZE( sp )\t/* a4 */\r\n\tload_x  x15, 12 * portWORD_SIZE( sp )\t/* a5 */\r\n\tload_x  x16, 13 * portWORD_SIZE( sp )\t/* a6 */\r\n\tload_x  x17, 14 * portWORD_SIZE( sp )\t/* a7 */\r\n\tload_x  x18, 15 * portWORD_SIZE( sp )\t/* s2 */\r\n\tload_x  x19, 16 * portWORD_SIZE( sp )\t/* s3 */\r\n\tload_x  x20, 17 * portWORD_SIZE( sp )\t/* s4 */\r\n\tload_x  x21, 18 * portWORD_SIZE( sp )\t/* s5 */\r\n\tload_x  x22, 19 * portWORD_SIZE( sp )\t/* s6 */\r\n\tload_x  x23, 20 * portWORD_SIZE( sp )\t/* s7 */\r\n\tload_x  x24, 21 * portWORD_SIZE( sp )\t/* s8 */\r\n\tload_x  x25, 22 * portWORD_SIZE( sp )\t/* s9 */\r\n\tload_x  x26, 23 * portWORD_SIZE( sp )\t/* s10 */\r\n\tload_x  x27, 24 * portWORD_SIZE( sp )\t/* s11 */\r\n\tload_x  x28, 25 * portWORD_SIZE( sp )\t/* t3 */\r\n\tload_x  x29, 26 * portWORD_SIZE( sp )\t/* t4 */\r\n\tload_x  x30, 27 * portWORD_SIZE( sp )\t/* t5 */\r\n\tload_x  x31, 28 * portWORD_SIZE( sp )\t/* t6 */\r\n\taddi\tsp, sp, portCONTEXT_SIZE\r\n\tret\r\n\t.endfunc\r\n/*-----------------------------------------------------------*/\r\n\r\n/*\r\n * Unlike other ports pxPortInitialiseStack() is written in assembly code as it\r\n * needs access to the portasmADDITIONAL_CONTEXT_SIZE constant.  The prototype\r\n * for the function is as per the other ports:\r\n * StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters );\r\n *\r\n * As per the standard RISC-V ABI pxTopcOfStack is passed in in a0, pxCode in\r\n * a1, and pvParameters in a2.  The new top of stack is passed out in a0.\r\n *\r\n * RISC-V maps registers to ABI names as follows (X1 to X31 integer registers\r\n * for the 'I' profile, X1 to X15 for the 'E' profile, currently I assumed).\r\n *\r\n * Register\t\tABI Name\tDescription\t\t\t\t\t\tSaver\r\n * x0\t\t\tzero\t\tHard-wired zero\t\t\t\t\t-\r\n * x1\t\t\tra\t\t\tReturn address\t\t\t\t\tCaller\r\n * x2\t\t\tsp\t\t\tStack pointer\t\t\t\t\tCallee\r\n * x3\t\t\tgp\t\t\tGlobal pointer\t\t\t\t\t-\r\n * x4\t\t\ttp\t\t\tThread pointer\t\t\t\t\t-\r\n * x5-7\t\t\tt0-2\t\tTemporaries\t\t\t\t\t\tCaller\r\n * x8\t\t\ts0/fp\t\tSaved register/Frame pointer\tCallee\r\n * x9\t\t\ts1\t\t\tSaved register\t\t\t\t\tCallee\r\n * x10-11\t\ta0-1\t\tFunction Arguments/return values Caller\r\n * x12-17\t\ta2-7\t\tFunction arguments\t\t\t\tCaller\r\n * x18-27\t\ts2-11\t\tSaved registers\t\t\t\t\tCallee\r\n * x28-31\t\tt3-6\t\tTemporaries\t\t\t\t\t\tCaller\r\n *\r\n * The RISC-V context is saved t FreeRTOS tasks in the following stack frame,\r\n * where the global and thread pointers are currently assumed to be constant so\r\n * are not saved:\r\n *\r\n * mstatus\r\n * x31\r\n * x30\r\n * x29\r\n * x28\r\n * x27\r\n * x26\r\n * x25\r\n * x24\r\n * x23\r\n * x22\r\n * x21\r\n * x20\r\n * x19\r\n * x18\r\n * x17\r\n * x16\r\n * x15\r\n * x14\r\n * x13\r\n * x12\r\n * x11\r\n * pvParameters\r\n * x9\r\n * x8\r\n * x7\r\n * x6\r\n * x5\r\n * portTASK_RETURN_ADDRESS\r\n * [chip specific registers go here]\r\n * pxCode\r\n */\r\n.align 8\r\n.func\r\npxPortInitialiseStack:\r\n\r\n\tcsrr t0, mstatus\t\t\t\t\t/* Obtain current mstatus value. */\r\n\r\n#if 1\r\n    li   t1, 0x1880\r\n    or   t0, t0, t1                     /* MPP = 0b11, MPIE = 1 */\r\n    andi t0, t0, 0xFFFFFFF7             /* !!! MIE = 0 !!! */\r\n#else\r\n\taddi t1, x0, 0x188\t\t\t\t\t/* Generate the value 0x1888, which are the MIE, MPIE and privilege bits to set in mstatus. */\r\n\tslli t1, t1, 4\r\n\tor t0, t0, t1\t\t\t\t\t\t/* Set MPIE and MPP bits in mstatus value. */\r\n#endif\r\n\r\n\taddi a0, a0, -portWORD_SIZE\r\n\tstore_x t0, 0(a0)\t\t\t\t\t/* mstatus onto the stack. */\r\n\taddi a0, a0, -(22 * portWORD_SIZE)\t/* Space for registers x11-x31. */\r\n\tstore_x a2, 0(a0)\t\t\t\t\t/* Task parameters (pvParameters parameter) goes into register X10/a0 on the stack. */\r\n\taddi a0, a0, -(6 * portWORD_SIZE)\t/* Space for registers x5-x9. */\r\n\tstore_x x0, 0(a0)\t\t\t\t\t/* Return address onto the stack, could be portTASK_RETURN_ADDRESS */\r\n\taddi t0, x0, portasmADDITIONAL_CONTEXT_SIZE /* The number of chip specific additional registers. */\r\nchip_specific_stack_frame:\t\t\t\t/* First add any chip specific registers to the stack frame being created. */\r\n\tbeq t0, x0, 1f\t\t\t\t\t\t/* No more chip specific registers to save. */\r\n\taddi a0, a0, -portWORD_SIZE\t\t\t/* Make space for chip specific register. */\r\n\tstore_x x0, 0(a0)\t\t\t\t\t/* Give the chip specific register an initial value of zero. */\r\n\taddi t0, t0, -1\t\t\t\t\t\t/* Decrement the count of chip specific registers remaining. */\r\n\tj chip_specific_stack_frame\t\t\t/* Until no more chip specific registers. */\r\n1:\r\n\taddi a0, a0, -portWORD_SIZE\r\n\tstore_x a1, 0(a0)\t\t\t\t\t/* mret value (pxCode parameter) onto the stack. */\r\n\tret\r\n\t.endfunc\r\n/*-----------------------------------------------------------*/\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/freertos/portable/gcc/risc-v/bl702/portmacro.h",
    "content": "/*\r\n * FreeRTOS Kernel V10.2.1\r\n * Copyright (C) 2019 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n * this software and associated documentation files (the \"Software\"), to deal in\r\n * the Software without restriction, including without limitation the rights to\r\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n * the Software, and to permit persons to whom the Software is furnished to do so,\r\n * subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n * http://www.FreeRTOS.org\r\n * http://aws.amazon.com/freertos\r\n *\r\n * 1 tab == 4 spaces!\r\n */\r\n\r\n#ifndef PORTMACRO_H\r\n#define PORTMACRO_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/*-----------------------------------------------------------\r\n * Port specific definitions.\r\n *\r\n * The settings in this file configure FreeRTOS correctly for the\r\n * given hardware and compiler.\r\n *\r\n * These settings should not be altered.\r\n *-----------------------------------------------------------\r\n */\r\n#include \"FreeRTOSConfig.h\"\r\n#include <stddef.h>\r\n#include <stdint.h>\r\n\r\n/* Type definitions. */\r\n#if __riscv_xlen == 64\r\n#define portSTACK_TYPE        uint64_t\r\n#define portBASE_TYPE         int64_t\r\n#define portUBASE_TYPE        uint64_t\r\n#define portMAX_DELAY         (TickType_t)0xffffffffffffffffUL\r\n#define portPOINTER_SIZE_TYPE uint64_t\r\n#elif __riscv_xlen == 32\r\n#define portSTACK_TYPE uint32_t\r\n#define portBASE_TYPE  int /* int32_t */\r\n#define portUBASE_TYPE uint32_t\r\n#define portMAX_DELAY  (TickType_t)0xffffffffUL\r\n#ifdef __riscv_float_abi_single\r\n/* better to use float replace double here,\r\n * so that it will generates floating point instructions\r\n */\r\n#define portDOUBLE float /* double */\r\n#else\r\n#define portDOUBLE double\r\n#endif\r\n#else\r\n#error Assembler did not define __riscv_xlen\r\n#endif\r\n\r\ntypedef portSTACK_TYPE StackType_t;\r\ntypedef portBASE_TYPE  BaseType_t;\r\ntypedef portUBASE_TYPE UBaseType_t;\r\ntypedef portUBASE_TYPE TickType_t;\r\n\r\n/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do\r\nnot need to be guarded with a critical section. */\r\n#define portTICK_TYPE_IS_ATOMIC 1\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Architecture specifics. */\r\n#define portSTACK_GROWTH   (-1)\r\n#define portTICK_PERIOD_MS ((TickType_t)1000 / configTICK_RATE_HZ)\r\n#ifdef __riscv64\r\n#error This is the RV32 port that has not yet been adapted for 64.\r\n#define portBYTE_ALIGNMENT 16\r\n#else\r\n#define portBYTE_ALIGNMENT 16\r\n#endif\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Scheduler utilities. */\r\nextern BaseType_t TrapNetCounter;\r\nextern void       vTaskSwitchContext(void);\r\n#define portYIELD() __asm volatile(\"ecall\");\r\n#define portEND_SWITCHING_ISR(xSwitchRequired) \\\r\n  if (xSwitchRequired)                         \\\r\n  vTaskSwitchContext()\r\n#define portYIELD_FROM_ISR(x) portEND_SWITCHING_ISR(x)\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Critical section management. */\r\n#define portCRITICAL_NESTING_IN_TCB 1\r\nextern void vTaskEnterCritical(void);\r\nextern void vTaskExitCritical(void);\r\n\r\n#define portSET_INTERRUPT_MASK_FROM_ISR()                     0\r\n#define portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedStatusValue) (void)uxSavedStatusValue\r\n#define portDISABLE_INTERRUPTS()                              __asm volatile(\"csrc mstatus, 8\")\r\n#define portENABLE_INTERRUPTS()                               __asm volatile(\"csrs mstatus, 8\")\r\n#define portENTER_CRITICAL()                                  vTaskEnterCritical()\r\n#define portEXIT_CRITICAL()                                   vTaskExitCritical()\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Architecture specific optimisations. */\r\n#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION\r\n#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1\r\n#endif\r\n\r\n#if (configUSE_PORT_OPTIMISED_TASK_SELECTION == 1)\r\n\r\n/* Check the configuration. */\r\n#if (configMAX_PRIORITIES > 32)\r\n#error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32.  It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice.\r\n#endif\r\n\r\n/* Store/clear the ready priorities in a bit map. */\r\n#define portRECORD_READY_PRIORITY(uxPriority, uxReadyPriorities) (uxReadyPriorities) |= (1UL << (uxPriority))\r\n#define portRESET_READY_PRIORITY(uxPriority, uxReadyPriorities)  (uxReadyPriorities) &= ~(1UL << (uxPriority))\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n#define portGET_HIGHEST_PRIORITY(uxTopPriority, uxReadyPriorities) uxTopPriority = (31UL - __builtin_clz(uxReadyPriorities))\r\n\r\n#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Task function macros as described on the FreeRTOS.org WEB site.  These are\r\nnot necessary for to use this port.  They are defined so the common demo files\r\n(which build with all the ports) will build. */\r\n#define portTASK_FUNCTION_PROTO(vFunction, pvParameters) void vFunction(void *pvParameters)\r\n#define portTASK_FUNCTION(vFunction, pvParameters)       void vFunction(void *pvParameters)\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n#define portNOP() __asm volatile(\" nop \")\r\n\r\n#define portINLINE __inline\r\n\r\n#ifndef portFORCE_INLINE\r\n#define portFORCE_INLINE inline __attribute__((always_inline))\r\n#endif\r\n\r\n#define portMEMORY_BARRIER() __asm volatile(\"\" ::: \"memory\")\r\n\r\nportFORCE_INLINE static BaseType_t xPortIsInsideInterrupt(void) { return TrapNetCounter ? 1 : 0; }\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* PORTMACRO_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/freertos/portable/readme.txt",
    "content": "Each real time kernel port consists of three files that contain the core kernel\ncomponents and are common to every port, and one or more files that are\nspecific to a particular microcontroller and/or compiler.\n\n\n+ The FreeRTOS/Source/Portable/MemMang directory contains the five sample\nmemory allocators as described on the http://www.FreeRTOS.org WEB site.\n\n+ The other directories each contain files specific to a particular\nmicrocontroller or compiler, where the directory name denotes the compiler\nspecific files the directory contains.\n\n\n\nFor example, if you are interested in the [compiler] port for the [architecture]\nmicrocontroller, then the port specific files are contained in\nFreeRTOS/Source/Portable/[compiler]/[architecture] directory.  If this is the\nonly port you are interested in then all the other directories can be\nignored.\n\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/nmsis/CMakeLists.txt",
    "content": "################# Add global include #################\nlist(APPEND ADD_INCLUDE\n\"${CMAKE_CURRENT_SOURCE_DIR}/core/inc\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/dsp/inc\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/nn/inc\"\n)\n#######################################################\n\n################# Add private include #################\nlist(APPEND ADD_PRIVATE_INCLUDE\n\"${CMAKE_CURRENT_SOURCE_DIR}/dsp/privateInc\"\n)\n#######################################################\n\n############## Add current dir source files ###########\nfile(GLOB_RECURSE sources \"${CMAKE_CURRENT_SOURCE_DIR}/dsp/*.c\"\n\"${CMAKE_CURRENT_SOURCE_DIR}/nn/*.c\"\n)\nlist(APPEND ADD_SRCS  ${sources})\n# aux_source_directory(src ADD_SRCS)\n# list(REMOVE_ITEM ADD_SRCS \"${CMAKE_CURRENT_SOURCE_DIR}\")\n#######################################################\n\n########### Add required/dependent components #########\n# list(APPEND ADD_REQUIREMENTS common)\n#######################################################\n\n############ Add static libs ##########################\n#list(APPEND ADD_STATIC_LIB \"libxxx.a\")\n#######################################################\n\n############ Add dynamic libs #########################\n# list(APPEND ADD_DYNAMIC_LIB \"libxxx.so\")\n#######################################################\n\n############ Add global compile option ################\n#add components denpend on this component\nlist(APPEND ADD_DEFINITIONS -D__RISCV_FEATURE_MVE=0 -Wno-incompatible-pointer-types -Wno-parentheses)\n#######################################################\n\n############ Add private compile option ################\n#add compile option for this component that won't affect other modules\n# list(APPEND ADD_PRIVATE_DEFINITIONS )\n#######################################################\n\ngenerate_library()\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/nmsis/core/inc/core_compatiable.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __CORE_COMPATIABLE_H__\n#define __CORE_COMPATIABLE_H__\n/*!\n * @file     core_compatiable.h\n * @brief    ARM compatiable function definitions header file\n */\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* ===== ARM Compatiable Functions ===== */\n/**\n * \\defgroup NMSIS_Core_ARMCompatiable_Functions   ARM Compatiable Functions\n * \\ingroup  NMSIS_Core\n * \\brief    A few functions that compatiable with ARM CMSIS-Core.\n * \\details\n *\n * Here we provided a few functions that compatiable with ARM CMSIS-Core,\n * mostly used in the DSP and NN library.\n * @{\n */\n/** \\brief Instruction Synchronization Barrier, compatiable with ARM */\n#define __ISB() __RWMB()\n\n/** \\brief Data Synchronization Barrier, compatiable with ARM */\n#define __DSB() __RWMB()\n\n/** \\brief Data Memory Barrier, compatiable with ARM */\n#define __DMB() __RWMB()\n\n/** \\brief LDRT Unprivileged (8 bit), ARM Compatiable */\n#define __LDRBT(ptr) __LB((ptr))\n/** \\brief LDRT Unprivileged (16 bit), ARM Compatiable */\n#define __LDRHT(ptr) __LH((ptr))\n/** \\brief LDRT Unprivileged (32 bit), ARM Compatiable */\n#define __LDRT(ptr) __LW((ptr))\n\n/** \\brief STRT Unprivileged (8 bit), ARM Compatiable */\n#define __STRBT(val, ptr) __SB((ptr), (val))\n/** \\brief STRT Unprivileged (16 bit), ARM Compatiable */\n#define __STRHT(val, ptr) __SH((ptr), (val))\n/** \\brief STRT Unprivileged (32 bit), ARM Compatiable */\n#define __STRT(val, ptr) __SW((ptr), (val))\n\n/* ===== Saturation Operations ===== */\n/**\n * \\brief   Signed Saturate\n * \\details Saturates a signed value.\n * \\param [in]  value  Value to be saturated\n * \\param [in]    sat  Bit position to saturate to (1..32)\n * \\return             Saturated value\n */\n#if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1)\n#define __SSAT(val, sat) __RV_SCLIP32((val), (sat - 1))\n#else\n__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat)\n{\n    if ((sat >= 1U) && (sat <= 32U)) {\n        const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U);\n        const int32_t min = -1 - max;\n        if (val > max) {\n            return max;\n        } else if (val < min) {\n            return min;\n        }\n    }\n    return val;\n}\n#endif\n\n/**\n * \\brief   Unsigned Saturate\n * \\details Saturates an unsigned value.\n * \\param [in]  value  Value to be saturated\n * \\param [in]    sat  Bit position to saturate to (0..31)\n * \\return             Saturated value\n */\n#if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1)\n#define __USAT(val, sat) __RV_UCLIP32((val), (sat))\n#else\n__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat)\n{\n    if (sat <= 31U) {\n        const uint32_t max = ((1U << sat) - 1U);\n        if (val > (int32_t)max) {\n            return max;\n        } else if (val < 0) {\n            return 0U;\n        }\n    }\n    return (uint32_t)val;\n}\n#endif\n#if 0\n/* ===== Data Processing Operations ===== */\n/**\n * \\brief   Reverse byte order (32 bit)\n * \\details Reverses the byte order in unsigned integer value.\n * For example, 0x12345678 becomes 0x78563412.\n * \\param [in]    value  Value to reverse\n * \\return               Reversed value\n */\n__STATIC_FORCEINLINE uint32_t __REV(uint32_t value)\n{\n    uint32_t result;\n\n    result = ((value & 0xff000000) >> 24) | ((value & 0x00ff0000) >> 8) | ((value & 0x0000ff00) << 8) | ((value & 0x000000ff) << 24);\n    return result;\n}\n\n/**\n * \\brief   Reverse byte order (16 bit)\n * \\details Reverses the byte order within each halfword of a word.\n * For example, 0x12345678 becomes 0x34127856.\n * \\param [in]    value  Value to reverse\n * \\return               Reversed value\n */\n__STATIC_FORCEINLINE uint32_t __REV16(uint32_t value)\n{\n    uint32_t result;\n    result = ((value & 0xff000000) >> 8) | ((value & 0x00ff00000) << 8) | ((value & 0x0000ff00) >> 8) | ((value & 0x000000ff) << 8);\n\n    return result;\n}\n\n/**\n * \\brief   Reverse byte order (16 bit)\n * \\details Reverses the byte order in a 16-bit value\n * and returns the signed 16-bit result.\n * For example, 0x0080 becomes 0x8000.\n * \\param [in]    value  Value to reverse\n * \\return               Reversed value\n */\n__STATIC_FORCEINLINE int16_t __REVSH(int16_t value)\n{\n    int16_t result;\n    result = ((value & 0xff00) >> 8) | ((value & 0x00ff) << 8);\n    return result;\n}\n#endif\n/**\n * \\brief   Rotate Right in unsigned value (32 bit)\n * \\details Rotate Right (immediate) provides the value of\n * the contents of a register rotated by a variable number of bits.\n * \\param [in]    op1  Value to rotate\n * \\param [in]    op2  Number of Bits to rotate(0-31)\n * \\return               Rotated value\n */\n__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2)\n{\n    op2 = op2 & 0x1F;\n    if (op2 == 0U) {\n        return op1;\n    }\n    return (op1 >> op2) | (op1 << (32U - op2));\n}\n\n/**\n * \\brief   Reverse bit order of value\n * \\details Reverses the bit order of the given value.\n * \\param [in]    value  Value to reverse\n * \\return               Reversed value\n */\n#if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1)\n#define __RBIT(value) __RV_BITREVI((value), 31)\n#else\n__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value)\n{\n    uint32_t result;\n    uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */\n\n    result = value; /* r will be reversed bits of v; first get LSB of v */\n    for (value >>= 1U; value != 0U; value >>= 1U) {\n        result <<= 1U;\n        result |= value & 1U;\n        s--;\n    }\n    result <<= s; /* shift when v's highest bits are zero */\n    return result;\n}\n#endif /* defined(__DSP_PRESENT) && (__DSP_PRESENT == 1) */\n\n/**\n * \\brief   Count leading zeros\n * \\details Counts the number of leading zeros of a data value.\n * \\param [in]  data  Value to count the leading zeros\n * \\return             number of leading zeros in value\n */\n#if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1)\n#define __CLZ(data) __RV_CLZ32(data)\n#else\n__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t data)\n{\n    uint8_t ret = 0;\n    uint32_t temp = ~data;\n    while (temp & 0x80000000) {\n        temp <<= 1;\n        ret++;\n    }\n    return ret;\n}\n#endif /* defined(__DSP_PRESENT) && (__DSP_PRESENT == 1) */\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_ARMCompatiable_Functions */\n\n#ifdef __cplusplus\n}\n#endif\n#endif /* __CORE_COMPATIABLE_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/nmsis/core/inc/core_feature_base.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#ifndef __CORE_FEATURE_BASE__\n#define __CORE_FEATURE_BASE__\n/*!\n * @file     core_feature_base.h\n * @brief    Base core feature API for Nuclei N/NX Core\n */\n#include <stdint.h>\n#include \"riscv_encoding.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**\n * \\defgroup NMSIS_Core_Registers     Register Define and Type Definitions\n * \\brief   Type definitions and defines for core registers.\n *\n * @{\n */\n#ifndef __RISCV_XLEN\n/** \\brief Refer to the width of an integer register in bits(either 32 or 64) */\n#ifndef __riscv_xlen\n#define __RISCV_XLEN 32\n#else\n#define __RISCV_XLEN __riscv_xlen\n#endif\n#endif /* __RISCV_XLEN */\n\n/** \\brief Type of Control and Status Register(CSR), depends on the XLEN defined in RISC-V */\n#if __RISCV_XLEN == 32\ntypedef uint32_t rv_csr_t;\n#elif __RISCV_XLEN == 64\ntypedef uint64_t rv_csr_t;\n#else\ntypedef uint32_t rv_csr_t;\n#endif\n/** @} */ /* End of Doxygen Group NMSIS_Core_Registers */\n/**\n * \\defgroup NMSIS_Core_Base_Registers     Base Register Define and Type Definitions\n * \\ingroup NMSIS_Core_Registers\n * \\brief   Type definitions and defines for base core registers.\n *\n * @{\n */\n/**\n * \\brief  Union type to access MISA CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t a          : 1; /*!< bit:     0  Atomic extension */\n        rv_csr_t b          : 1; /*!< bit:     1  Tentatively reserved for Bit-Manipulation extension */\n        rv_csr_t c          : 1; /*!< bit:     2  Compressed extension */\n        rv_csr_t d          : 1; /*!< bit:     3  Double-precision floating-point extension */\n        rv_csr_t e          : 1; /*!< bit:     4  RV32E base ISA */\n        rv_csr_t f          : 1; /*!< bit:     5  Single-precision floating-point extension */\n        rv_csr_t g          : 1; /*!< bit:     6  Additional standard extensions present */\n        rv_csr_t h          : 1; /*!< bit:     7  Hypervisor extension */\n        rv_csr_t i          : 1; /*!< bit:     8  RV32I/64I/128I base ISA */\n        rv_csr_t j          : 1; /*!< bit:     9  Tentatively reserved for Dynamically Translated Languages extension */\n        rv_csr_t _reserved1 : 1; /*!< bit:     10 Reserved  */\n        rv_csr_t l          : 1; /*!< bit:     11 Tentatively reserved for Decimal Floating-Point extension  */\n        rv_csr_t m          : 1; /*!< bit:     12 Integer Multiply/Divide extension */\n        rv_csr_t n          : 1; /*!< bit:     13 User-level interrupts supported  */\n        rv_csr_t _reserved2 : 1; /*!< bit:     14 Reserved  */\n        rv_csr_t p          : 1; /*!< bit:     15 Tentatively reserved for Packed-SIMD extension  */\n        rv_csr_t q          : 1; /*!< bit:     16 Quad-precision floating-point extension  */\n        rv_csr_t _resreved3 : 1; /*!< bit:     17 Reserved  */\n        rv_csr_t s          : 1; /*!< bit:     18 Supervisor mode implemented  */\n        rv_csr_t t          : 1; /*!< bit:     19 Tentatively reserved for Transactional Memory extension  */\n        rv_csr_t u          : 1; /*!< bit:     20 User mode implemented  */\n        rv_csr_t v          : 1; /*!< bit:     21 Tentatively reserved for Vector extension  */\n        rv_csr_t _reserved4 : 1; /*!< bit:     22 Reserved  */\n        rv_csr_t x          : 1; /*!< bit:     23 Non-standard extensions present  */\n#if defined(__RISCV_XLEN) && __RISCV_XLEN == 64\n        rv_csr_t _reserved5 : 38; /*!< bit:     24..61 Reserved  */\n        rv_csr_t mxl        : 2;  /*!< bit:     62..63 Machine XLEN  */\n#else\n        rv_csr_t _reserved5 : 6; /*!< bit:     24..29 Reserved  */\n        rv_csr_t mxl        : 2; /*!< bit:     30..31 Machine XLEN  */\n#endif\n    } b;        /*!< Structure used for bit  access */\n    rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MISA_Type;\n\n/**\n * \\brief  Union type to access MSTATUS CSR register.\n */\ntypedef union {\n    struct {\n#if defined(__RISCV_XLEN) && __RISCV_XLEN == 64\n        rv_csr_t _reserved0 : 3;  /*!< bit:     0..2  Reserved */\n        rv_csr_t mie        : 1;  /*!< bit:     3  Machine mode interrupt enable flag */\n        rv_csr_t _reserved1 : 3;  /*!< bit:     4..6  Reserved */\n        rv_csr_t mpie       : 1;  /*!< bit:     7  mirror of MIE flag */\n        rv_csr_t _reserved2 : 3;  /*!< bit:     8..10  Reserved */\n        rv_csr_t mpp        : 2;  /*!< bit:     11..12 mirror of Privilege Mode */\n        rv_csr_t fs         : 2;  /*!< bit:     13..14 FS status flag */\n        rv_csr_t xs         : 2;  /*!< bit:     15..16 XS status flag */\n        rv_csr_t mprv       : 1;  /*!< bit:     Machine mode PMP */\n        rv_csr_t _reserved3 : 14; /*!< bit:     18..31 Reserved */\n        rv_csr_t uxl        : 2;  /*!< bit:     32..33 user mode xlen */\n        rv_csr_t _reserved6 : 29; /*!< bit:     34..62 Reserved  */\n        rv_csr_t sd         : 1;  /*!< bit:     Dirty status for XS or FS */\n#else\n        rv_csr_t _reserved0 : 1;  /*!< bit:     0  Reserved */\n        rv_csr_t sie        : 1;  /*!< bit:     1  supervisor interrupt enable flag */\n        rv_csr_t _reserved1 : 1;  /*!< bit:     2  Reserved */\n        rv_csr_t mie        : 1;  /*!< bit:     3  Machine mode interrupt enable flag */\n        rv_csr_t _reserved2 : 1;  /*!< bit:     4  Reserved */\n        rv_csr_t spie       : 1;  /*!< bit:     3  Supervisor Privilede mode interrupt enable flag */\n        rv_csr_t _reserved3 : 1;  /*!< bit:     Reserved */\n        rv_csr_t mpie       : 1;  /*!< bit:     mirror of MIE flag */\n        rv_csr_t _reserved4 : 3;  /*!< bit:     Reserved */\n        rv_csr_t mpp        : 2;  /*!< bit:     mirror of Privilege Mode */\n        rv_csr_t fs         : 2;  /*!< bit:     FS status flag */\n        rv_csr_t xs         : 2;  /*!< bit:     XS status flag */\n        rv_csr_t mprv       : 1;  /*!< bit:     Machine mode PMP */\n        rv_csr_t sum        : 1;  /*!< bit:     Supervisor Mode load and store protection */\n        rv_csr_t _reserved6 : 12; /*!< bit:     19..30 Reserved  */\n        rv_csr_t sd         : 1;  /*!< bit:     Dirty status for XS or FS */\n#endif\n    } b;        /*!< Structure used for bit  access */\n    rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MSTATUS_Type;\n\n/**\n * \\brief  Union type to access MTVEC CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t mode : 6; /*!< bit:     0..5   interrupt mode control */\n#if defined(__RISCV_XLEN) && __RISCV_XLEN == 64\n        rv_csr_t addr : 58; /*!< bit:     6..63  mtvec address */\n#else\n        rv_csr_t addr : 26; /*!< bit:     6..31  mtvec address */\n#endif\n    } b;        /*!< Structure used for bit  access */\n    rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MTVEC_Type;\n\n/**\n * \\brief  Union type to access MCAUSE CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t exccode    : 12; /*!< bit:     11..0  exception or interrupt code */\n        rv_csr_t _reserved0 : 4;  /*!< bit:     15..12  Reserved */\n        rv_csr_t mpil       : 8;  /*!< bit:     23..16  Previous interrupt level */\n        rv_csr_t _reserved1 : 3;  /*!< bit:     26..24  Reserved */\n        rv_csr_t mpie       : 1;  /*!< bit:     27  Interrupt enable flag before enter interrupt */\n        rv_csr_t mpp        : 2;  /*!< bit:     29..28  Privilede mode flag before enter interrupt */\n        rv_csr_t minhv      : 1;  /*!< bit:     30  Machine interrupt vector table */\n#if defined(__RISCV_XLEN) && __RISCV_XLEN == 64\n        rv_csr_t _reserved2 : 32; /*!< bit:     31..62  Reserved */\n        rv_csr_t interrupt  : 1;  /*!< bit:     63  trap type. 0 means exception and 1 means interrupt */\n#else\n        rv_csr_t interrupt : 1; /*!< bit:     31  trap type. 0 means exception and 1 means interrupt */\n#endif\n    } b;        /*!< Structure used for bit  access */\n    rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MCAUSE_Type;\n\n/**\n * \\brief  Union type to access MCOUNTINHIBIT CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t cy         : 1; /*!< bit:     0     1 means disable mcycle counter */\n        rv_csr_t _reserved0 : 1; /*!< bit:     1     Reserved */\n        rv_csr_t ir         : 1; /*!< bit:     2     1 means disable minstret counter */\n#if defined(__RISCV_XLEN) && __RISCV_XLEN == 64\n        rv_csr_t _reserved1 : 61; /*!< bit:     3..63 Reserved */\n#else\n        rv_csr_t _reserved1 : 29; /*!< bit:     3..31 Reserved */\n#endif\n    } b;        /*!< Structure used for bit  access */\n    rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MCOUNTINHIBIT_Type;\n\n/**\n * \\brief  Union type to access MSUBM CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t _reserved0 : 6; /*!< bit:     0..5   Reserved */\n        rv_csr_t typ        : 2; /*!< bit:     6..7   current trap type */\n        rv_csr_t ptyp       : 2; /*!< bit:     8..9   previous trap type */\n#if defined(__RISCV_XLEN) && __RISCV_XLEN == 64\n        rv_csr_t _reserved1 : 54; /*!< bit:     10..63 Reserved */\n#else\n        rv_csr_t _reserved1 : 22; /*!< bit:     10..31 Reserved */\n#endif\n    } b;        /*!< Structure used for bit  access */\n    rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MSUBM_Type;\n\n/**\n * \\brief  Union type to access MDCAUSE CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t mdcause : 2;                   /*!< bit:     0..1   More detailed exception information as MCAUSE supplement */\n        rv_csr_t _reserved0 : __RISCV_XLEN - 2; /*!< bit:     2..XLEN-1 Reserved */\n    } b;                                        /*!< Structure used for bit  access */\n    rv_csr_t d;                                 /*!< Type      used for csr data access */\n} CSR_MDCAUSE_Type;\n\n/**\n * \\brief  Union type to access MMISC_CTRL CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t _reserved0 : 3; /*!< bit:     0..2  Reserved */\n        rv_csr_t bpu        : 1; /*!< bit:     3     dynamic prediction enable flag */\n        rv_csr_t _reserved1 : 2; /*!< bit:     4..5  Reserved */\n        rv_csr_t misalign   : 1; /*!< bit:     6     misaligned access support flag */\n        rv_csr_t _reserved2 : 2; /*!< bit:     7..8  Reserved */\n        rv_csr_t nmi_cause  : 1; /*!< bit:     9     mnvec control and nmi mcase exccode */\n#if defined(__RISCV_XLEN) && __RISCV_XLEN == 64\n        rv_csr_t _reserved3 : 54; /*!< bit:     10..63 Reserved */\n#else\n        rv_csr_t _reserved3 : 22; /*!< bit:     10..31 Reserved */\n#endif\n    } b;        /*!< Structure used for bit  access */\n    rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MMISCCTRL_Type;\n\ntypedef CSR_MMISCCTRL_Type CSR_MMISCCTL_Type;\n\n/**\n * \\brief  Union type to access MCACHE_CTL CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t ic_en          : 1; /*!< I-Cache enable */\n        rv_csr_t ic_scpd_mod    : 1; /*!< Scratchpad mode, 0: Scratchpad as ICache Data RAM, 1: Scratchpad as ILM SRAM */\n        rv_csr_t ic_ecc_en      : 1; /*!< I-Cache ECC enable */\n        rv_csr_t ic_ecc_excp_en : 1; /*!< I-Cache 2bit ECC error exception enable */\n        rv_csr_t ic_rwtecc      : 1; /*!< Control I-Cache Tag Ram ECC code injection */\n        rv_csr_t ic_rwdecc      : 1; /*!< Control I-Cache Data Ram ECC code injection */\n        rv_csr_t _reserved0     : 10;\n        rv_csr_t dc_en          : 1; /*!< DCache enable */\n        rv_csr_t dc_ecc_en      : 1; /*!< D-Cache ECC enable */\n        rv_csr_t dc_ecc_excp_en : 1; /*!< D-Cache 2bit ECC error exception enable */\n        rv_csr_t dc_rwtecc      : 1; /*!< Control D-Cache Tag Ram ECC code injection */\n        rv_csr_t dc_rwdecc      : 1; /*!< Control D-Cache Data Ram ECC code injection */\n        rv_csr_t _reserved1 : __RISCV_XLEN - 21;\n    } b;        /*!< Structure used for bit  access */\n    rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MCACHECTL_Type;\n\n/**\n * \\brief  Union type to access MSAVESTATUS CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t mpie1      : 1; /*!< bit:     0     interrupt enable flag of fisrt level NMI/exception nestting */\n        rv_csr_t mpp1       : 2; /*!< bit:     1..2  privilede mode of fisrt level NMI/exception nestting */\n        rv_csr_t _reserved0 : 3; /*!< bit:     3..5  Reserved */\n        rv_csr_t ptyp1      : 2; /*!< bit:     6..7  NMI/exception type of before first nestting */\n        rv_csr_t mpie2      : 1; /*!< bit:     8     interrupt enable flag of second level NMI/exception nestting */\n        rv_csr_t mpp2       : 2; /*!< bit:     9..10 privilede mode of second level NMI/exception nestting */\n        rv_csr_t _reserved1 : 3; /*!< bit:     11..13     Reserved */\n        rv_csr_t ptyp2      : 2; /*!< bit:     14..15     NMI/exception type of before second nestting */\n#if defined(__RISCV_XLEN) && __RISCV_XLEN == 64\n        rv_csr_t _reserved2 : 48; /*!< bit:     16..63 Reserved*/\n#else\n        rv_csr_t _reserved2 : 16; /*!< bit:     16..31 Reserved*/\n#endif\n    } b;        /*!< Structure used for bit  access */\n    rv_csr_t w; /*!< Type      used for csr data access */\n} CSR_MSAVESTATUS_Type;\n\n/**\n * \\brief  Union type to access MILM_CTL CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t ilm_en          : 1;         /*!< ILM enable */\n        rv_csr_t ilm_ecc_en      : 1;         /*!< ILM ECC eanble */\n        rv_csr_t ilm_ecc_excp_en : 1;         /*!< ILM ECC exception enable */\n        rv_csr_t ilm_rwecc       : 1;         /*!< Control mecc_code write to ilm, simulate error injection */\n        rv_csr_t _reserved0      : 6;         /*!< Reserved */\n        rv_csr_t ilm_bpa : __RISCV_XLEN - 10; /*!< ILM base address */\n    } b;                                      /*!< Structure used for bit  access */\n    rv_csr_t d;                               /*!< Type      used for csr data access */\n} CSR_MILMCTL_Type;\n\n/**\n * \\brief  Union type to access MDLM_CTL CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t dlm_en          : 1;         /*!< DLM enable */\n        rv_csr_t dlm_ecc_en      : 1;         /*!< DLM ECC eanble */\n        rv_csr_t dlm_ecc_excp_en : 1;         /*!< DLM ECC exception enable */\n        rv_csr_t dlm_rwecc       : 1;         /*!< Control mecc_code write to dlm, simulate error injection */\n        rv_csr_t _reserved0      : 6;         /*!< Reserved */\n        rv_csr_t dlm_bpa : __RISCV_XLEN - 10; /*!< DLM base address */\n    } b;                                      /*!< Structure used for bit  access */\n    rv_csr_t d;                               /*!< Type      used for csr data access */\n} CSR_MDLMCTL_Type;\n\n/**\n * \\brief  Union type to access MCFG_INFO CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t tee    : 1; /*!< TEE present */\n        rv_csr_t ecc    : 1; /*!< ECC present */\n        rv_csr_t clic   : 1; /*!< CLIC present */\n        rv_csr_t plic   : 1; /*!< PLIC present */\n        rv_csr_t fio    : 1; /*!< FIO present */\n        rv_csr_t ppi    : 1; /*!< PPI present */\n        rv_csr_t nice   : 1; /*!< NICE present */\n        rv_csr_t ilm    : 1; /*!< ILM present */\n        rv_csr_t dlm    : 1; /*!< DLM present */\n        rv_csr_t icache : 1; /*!< ICache present */\n        rv_csr_t dcache : 1; /*!< DCache present */\n        rv_csr_t _reserved0 : __RISCV_XLEN - 11;\n    } b;        /*!< Structure used for bit  access */\n    rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MCFGINFO_Type;\n\n/**\n * \\brief  Union type to access MICFG_INFO CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t set        : 4; /*!< I-Cache sets per way */\n        rv_csr_t way        : 3; /*!< I-Cache way */\n        rv_csr_t lsize      : 3; /*!< I-Cache line size */\n        rv_csr_t cache_ecc  : 1; /*!< I-Cache ECC present */\n        rv_csr_t _reserved0 : 5;\n        rv_csr_t lm_size    : 5; /*!< ILM size, need to be 2^n size */\n        rv_csr_t lm_xonly   : 1; /*!< ILM Execute only permission */\n        rv_csr_t lm_ecc     : 1; /*!< ILM ECC present */\n        rv_csr_t _reserved1 : __RISCV_XLEN - 23;\n    } b;        /*!< Structure used for bit  access */\n    rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MICFGINFO_Type;\n\n/**\n * \\brief  Union type to access MDCFG_INFO CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t set        : 4; /*!< D-Cache sets per way */\n        rv_csr_t way        : 3; /*!< D-Cache way */\n        rv_csr_t lsize      : 3; /*!< D-Cache line size */\n        rv_csr_t cache_ecc  : 1; /*!< D-Cache ECC present */\n        rv_csr_t _reserved0 : 5;\n        rv_csr_t lm_size    : 5; /*!< DLM size, need to be 2^n size */\n        rv_csr_t lm_xonly   : 1; /*!< DLM Execute only permission */\n        rv_csr_t lm_ecc     : 1; /*!< DLM ECC present */\n        rv_csr_t _reserved1 : __RISCV_XLEN - 23;\n    } b;        /*!< Structure used for bit  access */\n    rv_csr_t d; /*!< Type      used for csr data access */\n} CSR_MDCFGINFO_Type;\n\n/**\n * \\brief  Union type to access MPPICFG_INFO CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t _reserved0 : 1;              /*!< Reserved */\n        rv_csr_t ppi_size   : 5;              /*!< PPI size, need to be 2^n size */\n        rv_csr_t _reserved1 : 4;              /*!< Reserved */\n        rv_csr_t ppi_bpa : __RISCV_XLEN - 10; /*!< PPI base address */\n    } b;                                      /*!< Structure used for bit  access */\n    rv_csr_t d;                               /*!< Type      used for csr data access */\n} CSR_MPPICFGINFO_Type;\n\n/**\n * \\brief  Union type to access MFIOCFG_INFO CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t _reserved0 : 1;              /*!< Reserved */\n        rv_csr_t fio_size   : 5;              /*!< FIO size, need to be 2^n size */\n        rv_csr_t _reserved1 : 4;              /*!< Reserved */\n        rv_csr_t fio_bpa : __RISCV_XLEN - 10; /*!< FIO base address */\n    } b;                                      /*!< Structure used for bit  access */\n    rv_csr_t d;                               /*!< Type      used for csr data access */\n} CSR_MFIOCFGINFO_Type;\n\n/**\n * \\brief  Union type to access MECC_LOCK CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t ecc_lock : 1;                  /*!< RW permission, ECC Lock configure */\n        rv_csr_t _reserved0 : __RISCV_XLEN - 1; /*!< Reserved */\n    } b;                                        /*!< Structure used for bit  access */\n    rv_csr_t d;                                 /*!< Type      used for csr data access */\n} CSR_MECCLOCK_Type;\n\n/**\n * \\brief  Union type to access MECC_CODE CSR register.\n */\ntypedef union {\n    struct {\n        rv_csr_t code       : 9;                 /*!< Used to inject ECC check code */\n        rv_csr_t _reserved0 : 7;                 /*!< Reserved */\n        rv_csr_t ramid      : 5;                 /*!< Indicate 2bit ECC error, software can clear these bits */\n        rv_csr_t _reserved1 : 3;                 /*!< Reserved */\n        rv_csr_t sramid     : 5;                 /*!< Indicate 1bit ECC error, software can clear these bits */\n        rv_csr_t _reserved2 : __RISCV_XLEN - 29; /*!< Reserved */\n    } b;                                         /*!< Structure used for bit  access */\n    rv_csr_t d;                                  /*!< Type      used for csr data access */\n} CSR_MECCCODE_Type;\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_Base_Registers */\n\n/* ###########################  Core Function Access  ########################### */\n/**\n * \\defgroup NMSIS_Core_CSR_Register_Access    Core CSR Register Access\n * \\ingroup  NMSIS_Core\n * \\brief    Functions to access the Core CSR Registers\n * \\details\n *\n * The following functions or macros provide access to Core CSR registers.\n * - \\ref NMSIS_Core_CSR_Encoding\n * - \\ref NMSIS_Core_CSR_Registers\n *   @{\n */\n\n#ifndef __ASSEMBLY__\n\n/**\n * \\brief CSR operation Macro for csrrw instruction.\n * \\details\n * Read the content of csr register to __v,\n * then write content of val into csr register, then return __v\n * \\param csr   CSR macro definition defined in\n *              \\ref NMSIS_Core_CSR_Registers, eg. \\ref CSR_MSTATUS\n * \\param val   value to store into the CSR register\n * \\return the CSR register value before written\n */\n#define __RV_CSR_SWAP(csr, val)                           \\\n    ({                                                    \\\n        register rv_csr_t __v = (unsigned long)(val);     \\\n        __ASM volatile(\"csrrw %0, \" STRINGIFY(csr) \", %1\" \\\n                       : \"=r\"(__v)                        \\\n                       : \"rK\"(__v)                        \\\n                       : \"memory\");                       \\\n        __v;                                              \\\n    })\n\n/**\n * \\brief CSR operation Macro for csrr instruction.\n * \\details\n * Read the content of csr register to __v and return it\n * \\param csr   CSR macro definition defined in\n *              \\ref NMSIS_Core_CSR_Registers, eg. \\ref CSR_MSTATUS\n * \\return the CSR register value\n */\n#define __RV_CSR_READ(csr)                        \\\n    ({                                            \\\n        register rv_csr_t __v;                    \\\n        __ASM volatile(\"csrr %0, \" STRINGIFY(csr) \\\n                       : \"=r\"(__v)                \\\n                       :                          \\\n                       : \"memory\");               \\\n        __v;                                      \\\n    })\n\n/**\n * \\brief CSR operation Macro for csrw instruction.\n * \\details\n * Write the content of val to csr register\n * \\param csr   CSR macro definition defined in\n *              \\ref NMSIS_Core_CSR_Registers, eg. \\ref CSR_MSTATUS\n * \\param val   value to store into the CSR register\n */\n#define __RV_CSR_WRITE(csr, val)                     \\\n    ({                                               \\\n        register rv_csr_t __v = (rv_csr_t)(val);     \\\n        __ASM volatile(\"csrw \" STRINGIFY(csr) \", %0\" \\\n                       :                             \\\n                       : \"rK\"(__v)                   \\\n                       : \"memory\");                  \\\n    })\n\n/**\n * \\brief CSR operation Macro for csrrs instruction.\n * \\details\n * Read the content of csr register to __v,\n * then set csr register to be __v | val, then return __v\n * \\param csr   CSR macro definition defined in\n *              \\ref NMSIS_Core_CSR_Registers, eg. \\ref CSR_MSTATUS\n * \\param val   Mask value to be used wih csrrs instruction\n * \\return the CSR register value before written\n */\n#define __RV_CSR_READ_SET(csr, val)                       \\\n    ({                                                    \\\n        register rv_csr_t __v = (rv_csr_t)(val);          \\\n        __ASM volatile(\"csrrs %0, \" STRINGIFY(csr) \", %1\" \\\n                       : \"=r\"(__v)                        \\\n                       : \"rK\"(__v)                        \\\n                       : \"memory\");                       \\\n        __v;                                              \\\n    })\n\n/**\n * \\brief CSR operation Macro for csrs instruction.\n * \\details\n * Set csr register to be csr_content | val\n * \\param csr   CSR macro definition defined in\n *              \\ref NMSIS_Core_CSR_Registers, eg. \\ref CSR_MSTATUS\n * \\param val   Mask value to be used wih csrs instruction\n */\n#define __RV_CSR_SET(csr, val)                       \\\n    ({                                               \\\n        register rv_csr_t __v = (rv_csr_t)(val);     \\\n        __ASM volatile(\"csrs \" STRINGIFY(csr) \", %0\" \\\n                       :                             \\\n                       : \"rK\"(__v)                   \\\n                       : \"memory\");                  \\\n    })\n\n/**\n * \\brief CSR operation Macro for csrrc instruction.\n * \\details\n * Read the content of csr register to __v,\n * then set csr register to be __v & ~val, then return __v\n * \\param csr   CSR macro definition defined in\n *              \\ref NMSIS_Core_CSR_Registers, eg. \\ref CSR_MSTATUS\n * \\param val   Mask value to be used wih csrrc instruction\n * \\return the CSR register value before written\n */\n#define __RV_CSR_READ_CLEAR(csr, val)                     \\\n    ({                                                    \\\n        register rv_csr_t __v = (rv_csr_t)(val);          \\\n        __ASM volatile(\"csrrc %0, \" STRINGIFY(csr) \", %1\" \\\n                       : \"=r\"(__v)                        \\\n                       : \"rK\"(__v)                        \\\n                       : \"memory\");                       \\\n        __v;                                              \\\n    })\n\n/**\n * \\brief CSR operation Macro for csrc instruction.\n * \\details\n * Set csr register to be csr_content & ~val\n * \\param csr   CSR macro definition defined in\n *              \\ref NMSIS_Core_CSR_Registers, eg. \\ref CSR_MSTATUS\n * \\param val   Mask value to be used wih csrc instruction\n */\n#define __RV_CSR_CLEAR(csr, val)                     \\\n    ({                                               \\\n        register rv_csr_t __v = (rv_csr_t)(val);     \\\n        __ASM volatile(\"csrc \" STRINGIFY(csr) \", %0\" \\\n                       :                             \\\n                       : \"rK\"(__v)                   \\\n                       : \"memory\");                  \\\n    })\n#endif /* __ASSEMBLY__ */\n#if 0\n/**\n * \\brief   Enable IRQ Interrupts\n * \\details Enables IRQ interrupts by setting the MIE-bit in the MSTATUS Register.\n * \\remarks\n *          Can only be executed in Privileged modes.\n */\n__STATIC_FORCEINLINE void __enable_irq(void)\n{\n    __RV_CSR_SET(CSR_MSTATUS, MSTATUS_MIE);\n}\n\n/**\n * \\brief   Disable IRQ Interrupts\n * \\details Disables IRQ interrupts by clearing the MIE-bit in the MSTATUS Register.\n * \\remarks\n *          Can only be executed in Privileged modes.\n */\n__STATIC_FORCEINLINE void __disable_irq(void)\n{\n    __RV_CSR_CLEAR(CSR_MSTATUS, MSTATUS_MIE);\n}\n#endif\n/**\n * \\brief   Read whole 64 bits value of mcycle counter\n * \\details This function will read the whole 64 bits of MCYCLE register\n * \\return  The whole 64 bits value of MCYCLE\n * \\remarks It will work for both RV32 and RV64 to get full 64bits value of MCYCLE\n */\n__STATIC_FORCEINLINE uint64_t __get_rv_cycle(void)\n{\n#if __RISCV_XLEN == 32\n    volatile uint32_t high0, low, high;\n    uint64_t full;\n\n    high0 = __RV_CSR_READ(CSR_MCYCLEH);\n    low = __RV_CSR_READ(CSR_MCYCLE);\n    high = __RV_CSR_READ(CSR_MCYCLEH);\n    if (high0 != high) {\n        low = __RV_CSR_READ(CSR_MCYCLE);\n    }\n    full = (((uint64_t)high) << 32) | low;\n    return full;\n#elif __RISCV_XLEN == 64\n    return (uint64_t)__RV_CSR_READ(CSR_MCYCLE);\n#else // TODO Need cover for XLEN=128 case in future\n    return (uint64_t)__RV_CSR_READ(CSR_MCYCLE);\n#endif\n}\n\n/**\n * \\brief   Read whole 64 bits value of machine instruction-retired counter\n * \\details This function will read the whole 64 bits of MINSTRET register\n * \\return  The whole 64 bits value of MINSTRET\n * \\remarks It will work for both RV32 and RV64 to get full 64bits value of MINSTRET\n */\n__STATIC_FORCEINLINE uint64_t __get_rv_instret(void)\n{\n#if __RISCV_XLEN == 32\n    volatile uint32_t high0, low, high;\n    uint64_t full;\n\n    high0 = __RV_CSR_READ(CSR_MINSTRETH);\n    low = __RV_CSR_READ(CSR_MINSTRET);\n    high = __RV_CSR_READ(CSR_MINSTRETH);\n    if (high0 != high) {\n        low = __RV_CSR_READ(CSR_MINSTRET);\n    }\n    full = (((uint64_t)high) << 32) | low;\n    return full;\n#elif __RISCV_XLEN == 64\n    return (uint64_t)__RV_CSR_READ(CSR_MINSTRET);\n#else // TODO Need cover for XLEN=128 case in future\n    return (uint64_t)__RV_CSR_READ(CSR_MINSTRET);\n#endif\n}\n\n/**\n * \\brief   Read whole 64 bits value of real-time clock\n * \\details This function will read the whole 64 bits of TIME register\n * \\return  The whole 64 bits value of TIME CSR\n * \\remarks It will work for both RV32 and RV64 to get full 64bits value of TIME\n * \\attention only available when user mode available\n */\n__STATIC_FORCEINLINE uint64_t __get_rv_time(void)\n{\n#if __RISCV_XLEN == 32\n    volatile uint32_t high0, low, high;\n    uint64_t full;\n\n    high0 = __RV_CSR_READ(CSR_TIMEH);\n    low = __RV_CSR_READ(CSR_TIME);\n    high = __RV_CSR_READ(CSR_TIMEH);\n    if (high0 != high) {\n        low = __RV_CSR_READ(CSR_TIME);\n    }\n    full = (((uint64_t)high) << 32) | low;\n    return full;\n#elif __RISCV_XLEN == 64\n    return (uint64_t)__RV_CSR_READ(CSR_TIME);\n#else // TODO Need cover for XLEN=128 case in future\n    return (uint64_t)__RV_CSR_READ(CSR_TIME);\n#endif\n}\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_CSR_Register_Access */\n\n/* ###########################  CPU Intrinsic Functions ########################### */\n/**\n * \\defgroup NMSIS_Core_CPU_Intrinsic   Intrinsic Functions for CPU Intructions\n * \\ingroup  NMSIS_Core\n * \\brief    Functions that generate RISC-V CPU instructions.\n * \\details\n *\n * The following functions generate specified RISC-V instructions that cannot be directly accessed by compiler.\n *   @{\n */\n#if 0\n/**\n * \\brief   NOP Instruction\n * \\details\n * No Operation does nothing.\n * This instruction can be used for code alignment purposes.\n */\n__STATIC_FORCEINLINE void __NOP(void)\n{\n    __ASM volatile(\"nop\");\n}\n\n/**\n * \\brief   Wait For Interrupt\n * \\details\n * Wait For Interrupt is is executed using CSR_WFE.WFE=0 and WFI instruction.\n * It will suspends execution until interrupt, NMI or Debug happened.\n * When Core is waked up by interrupt, if\n * 1. mstatus.MIE == 1(interrupt enabled), Core will enter ISR code\n * 2. mstatus.MIE == 0(interrupt disabled), Core will resume previous execution\n */\n__STATIC_FORCEINLINE void __WFI(void)\n{\n    __RV_CSR_CLEAR(CSR_WFE, WFE_WFE);\n    __ASM volatile(\"wfi\");\n}\n\n/**\n * \\brief   Wait For Event\n * \\details\n * Wait For Event is executed using CSR_WFE.WFE=1 and WFI instruction.\n * It will suspends execution until event, NMI or Debug happened.\n * When Core is waked up, Core will resume previous execution\n */\n__STATIC_FORCEINLINE void __WFE(void)\n{\n    __RV_CSR_SET(CSR_WFE, WFE_WFE);\n    __ASM volatile(\"wfi\");\n    __RV_CSR_CLEAR(CSR_WFE, WFE_WFE);\n}\n\n/**\n * \\brief   Breakpoint Instruction\n * \\details\n * Causes the processor to enter Debug state.\n * Debug tools can use this to investigate system state\n * when the instruction at a particular address is reached.\n */\n__STATIC_FORCEINLINE void __EBREAK(void)\n{\n    __ASM volatile(\"ebreak\");\n}\n\n/**\n * \\brief   Environment Call Instruction\n * \\details\n * The ECALL instruction is used to make a service request to\n * the execution environment.\n */\n__STATIC_FORCEINLINE void __ECALL(void)\n{\n    __ASM volatile(\"ecall\");\n}\n#endif\n/**\n * \\brief WFI Sleep Mode enumeration\n */\ntypedef enum WFI_SleepMode {\n    WFI_SHALLOW_SLEEP = 0, /*!< Shallow sleep mode, the core_clk will poweroff */\n    WFI_DEEP_SLEEP = 1     /*!< Deep sleep mode, the core_clk and core_ano_clk will poweroff */\n} WFI_SleepMode_Type;\n\n/**\n * \\brief   Set Sleep mode of WFI\n * \\details\n * Set the SLEEPVALUE CSR register to control the\n * WFI Sleep mode.\n * \\param[in] mode      The sleep mode to be set\n */\n__STATIC_FORCEINLINE void __set_wfi_sleepmode(WFI_SleepMode_Type mode)\n{\n    __RV_CSR_WRITE(CSR_SLEEPVALUE, mode);\n}\n\n/**\n * \\brief   Send TX Event\n * \\details\n * Set the CSR TXEVT to control send a TX Event.\n * The Core will output signal tx_evt as output event signal.\n */\n__STATIC_FORCEINLINE void __TXEVT(void)\n{\n    __RV_CSR_SET(CSR_TXEVT, 0x1);\n}\n\n/**\n * \\brief   Enable MCYCLE counter\n * \\details\n * Clear the CY bit of MCOUNTINHIBIT to 0 to enable MCYCLE Counter\n */\n__STATIC_FORCEINLINE void __enable_mcycle_counter(void)\n{\n    __RV_CSR_CLEAR(CSR_MCOUNTINHIBIT, MCOUNTINHIBIT_CY);\n}\n\n/**\n * \\brief   Disable MCYCLE counter\n * \\details\n * Set the CY bit of MCOUNTINHIBIT to 1 to disable MCYCLE Counter\n */\n__STATIC_FORCEINLINE void __disable_mcycle_counter(void)\n{\n    __RV_CSR_SET(CSR_MCOUNTINHIBIT, MCOUNTINHIBIT_CY);\n}\n\n/**\n * \\brief   Enable MINSTRET counter\n * \\details\n * Clear the IR bit of MCOUNTINHIBIT to 0 to enable MINSTRET Counter\n */\n__STATIC_FORCEINLINE void __enable_minstret_counter(void)\n{\n    __RV_CSR_CLEAR(CSR_MCOUNTINHIBIT, MCOUNTINHIBIT_IR);\n}\n\n/**\n * \\brief   Disable MINSTRET counter\n * \\details\n * Set the IR bit of MCOUNTINHIBIT to 1 to disable MINSTRET Counter\n */\n__STATIC_FORCEINLINE void __disable_minstret_counter(void)\n{\n    __RV_CSR_SET(CSR_MCOUNTINHIBIT, MCOUNTINHIBIT_IR);\n}\n\n/**\n * \\brief   Enable MCYCLE & MINSTRET counter\n * \\details\n * Clear the IR and CY bit of MCOUNTINHIBIT to 1 to enable MINSTRET & MCYCLE Counter\n */\n__STATIC_FORCEINLINE void __enable_all_counter(void)\n{\n    __RV_CSR_CLEAR(CSR_MCOUNTINHIBIT, MCOUNTINHIBIT_IR | MCOUNTINHIBIT_CY);\n}\n\n/**\n * \\brief   Disable MCYCLE & MINSTRET counter\n * \\details\n * Set the IR and CY bit of MCOUNTINHIBIT to 1 to disable MINSTRET & MCYCLE Counter\n */\n__STATIC_FORCEINLINE void __disable_all_counter(void)\n{\n    __RV_CSR_SET(CSR_MCOUNTINHIBIT, MCOUNTINHIBIT_IR | MCOUNTINHIBIT_CY);\n}\n\n/**\n * \\brief Execute fence instruction, p -> pred, s -> succ\n * \\details\n * the FENCE instruction ensures that all memory accesses from instructions preceding\n * the fence in program order (the `predecessor set`) appear earlier in the global memory order than\n * memory accesses from instructions appearing after the fence in program order (the `successor set`).\n * For details, please refer to The RISC-V Instruction Set Manual\n * \\param p     predecessor set, such as iorw, rw, r, w\n * \\param s     successor set, such as iorw, rw, r, w\n **/\n#define __FENCE(p, s) __ASM volatile(\"fence \" #p \",\" #s \\\n                                     :                  \\\n                                     :                  \\\n                                     : \"memory\")\n\n/**\n * \\brief   Fence.i Instruction\n * \\details\n * The FENCE.I instruction is used to synchronize the instruction\n * and data streams.\n */\n__STATIC_FORCEINLINE void __FENCE_I(void)\n{\n    __ASM volatile(\"fence.i\");\n}\n\n/** \\brief Read & Write Memory barrier */\n#define __RWMB() __FENCE(iorw, iorw)\n\n/** \\brief Read Memory barrier */\n#define __RMB() __FENCE(ir, ir)\n\n/** \\brief Write Memory barrier */\n#define __WMB() __FENCE(ow, ow)\n\n/** \\brief SMP Read & Write Memory barrier */\n#define __SMP_RWMB() __FENCE(rw, rw)\n\n/** \\brief SMP Read Memory barrier */\n#define __SMP_RMB() __FENCE(r, r)\n\n/** \\brief SMP Write Memory barrier */\n#define __SMP_WMB() __FENCE(w, w)\n\n/** \\brief CPU relax for busy loop */\n#define __CPU_RELAX() __ASM volatile(\"\" \\\n                                     :  \\\n                                     :  \\\n                                     : \"memory\")\n\n/* ===== Load/Store Operations ===== */\n/**\n * \\brief  Load 8bit value from address (8 bit)\n * \\details Load 8 bit value.\n * \\param [in]    addr  Address pointer to data\n * \\return              value of type uint8_t at (*addr)\n */\n__STATIC_FORCEINLINE uint8_t __LB(volatile void *addr)\n{\n    uint8_t result;\n\n    __ASM volatile(\"lb %0, 0(%1)\"\n                   : \"=r\"(result)\n                   : \"r\"(addr));\n    return result;\n}\n\n/**\n * \\brief  Load 16bit value from address (16 bit)\n * \\details Load 16 bit value.\n * \\param [in]    addr  Address pointer to data\n * \\return              value of type uint16_t at (*addr)\n */\n__STATIC_FORCEINLINE uint16_t __LH(volatile void *addr)\n{\n    uint16_t result;\n\n    __ASM volatile(\"lh %0, 0(%1)\"\n                   : \"=r\"(result)\n                   : \"r\"(addr));\n    return result;\n}\n\n/**\n * \\brief  Load 32bit value from address (32 bit)\n * \\details Load 32 bit value.\n * \\param [in]    addr  Address pointer to data\n * \\return              value of type uint32_t at (*addr)\n */\n__STATIC_FORCEINLINE uint32_t __LW(volatile void *addr)\n{\n    uint32_t result;\n\n    __ASM volatile(\"lw %0, 0(%1)\"\n                   : \"=r\"(result)\n                   : \"r\"(addr));\n    return result;\n}\n\n#if __RISCV_XLEN != 32\n/**\n * \\brief  Load 64bit value from address (64 bit)\n * \\details Load 64 bit value.\n * \\param [in]    addr  Address pointer to data\n * \\return              value of type uint64_t at (*addr)\n * \\remarks RV64 only macro\n */\n__STATIC_FORCEINLINE uint64_t __LD(volatile void *addr)\n{\n    uint64_t result;\n    __ASM volatile(\"ld %0, 0(%1)\"\n                   : \"=r\"(result)\n                   : \"r\"(addr));\n    return result;\n}\n#endif\n\n/**\n * \\brief  Write 8bit value to address (8 bit)\n * \\details Write 8 bit value.\n * \\param [in]    addr  Address pointer to data\n * \\param [in]    val   Value to set\n */\n__STATIC_FORCEINLINE void __SB(volatile void *addr, uint8_t val)\n{\n    __ASM volatile(\"sb %0, 0(%1)\"\n                   :\n                   : \"r\"(val), \"r\"(addr));\n}\n\n/**\n * \\brief  Write 16bit value to address (16 bit)\n * \\details Write 16 bit value.\n * \\param [in]    addr  Address pointer to data\n * \\param [in]    val   Value to set\n */\n__STATIC_FORCEINLINE void __SH(volatile void *addr, uint16_t val)\n{\n    __ASM volatile(\"sh %0, 0(%1)\"\n                   :\n                   : \"r\"(val), \"r\"(addr));\n}\n\n/**\n * \\brief  Write 32bit value to address (32 bit)\n * \\details Write 32 bit value.\n * \\param [in]    addr  Address pointer to data\n * \\param [in]    val   Value to set\n */\n__STATIC_FORCEINLINE void __SW(volatile void *addr, uint32_t val)\n{\n    __ASM volatile(\"sw %0, 0(%1)\"\n                   :\n                   : \"r\"(val), \"r\"(addr));\n}\n\n#if __RISCV_XLEN != 32\n/**\n * \\brief  Write 64bit value to address (64 bit)\n * \\details Write 64 bit value.\n * \\param [in]    addr  Address pointer to data\n * \\param [in]    val   Value to set\n */\n__STATIC_FORCEINLINE void __SD(volatile void *addr, uint64_t val)\n{\n    __ASM volatile(\"sd %0, 0(%1)\"\n                   :\n                   : \"r\"(val), \"r\"(addr));\n}\n#endif\n\n/**\n * \\brief  Compare and Swap 32bit value using LR and SC\n * \\details Compare old value with memory, if identical,\n * store new value in memory. Return the initial value in memory.\n * Success is indicated by comparing return value with OLD.\n * memory address, return 0 if successful, otherwise return !0\n * \\param [in]    addr      Address pointer to data, address need to be 4byte aligned\n * \\param [in]    oldval    Old value of the data in address\n * \\param [in]    newval    New value to be stored into the address\n * \\return  return the initial value in memory\n */\n__STATIC_FORCEINLINE uint32_t __CAS_W(volatile uint32_t *addr, uint32_t oldval, uint32_t newval)\n{\n    register uint32_t result;\n    register uint32_t rc;\n\n    __ASM volatile(\n        \"0:     lr.w %0, %2      \\n\"\n        \"       bne  %0, %z3, 1f \\n\"\n        \"       sc.w %1, %z4, %2 \\n\"\n        \"       bnez %1, 0b      \\n\"\n        \"1:\\n\"\n        : \"=&r\"(result), \"=&r\"(rc), \"+A\"(*addr)\n        : \"r\"(oldval), \"r\"(newval)\n        : \"memory\");\n    return result;\n}\n\n/**\n * \\brief  Atomic Swap 32bit value into memory\n * \\details Atomically swap new 32bit value into memory using amoswap.d.\n * \\param [in]    addr      Address pointer to data, address need to be 4byte aligned\n * \\param [in]    newval    New value to be stored into the address\n * \\return  return the original value in memory\n */\n__STATIC_FORCEINLINE uint32_t __AMOSWAP_W(volatile uint32_t *addr, uint32_t newval)\n{\n    register uint32_t result;\n\n    __ASM volatile(\"amoswap.w %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(newval)\n                   : \"memory\");\n    return result;\n}\n\n/**\n * \\brief  Atomic Add with 32bit value\n * \\details Atomically ADD 32bit value with value in memory using amoadd.d.\n * \\param [in]    addr   Address pointer to data, address need to be 4byte aligned\n * \\param [in]    value  value to be ADDed\n * \\return  return memory value + add value\n */\n__STATIC_FORCEINLINE int32_t __AMOADD_W(volatile int32_t *addr, int32_t value)\n{\n    register int32_t result;\n\n    __ASM volatile(\"amoadd.w %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(value)\n                   : \"memory\");\n    return *addr;\n}\n\n/**\n * \\brief  Atomic And with 32bit value\n * \\details Atomically AND 32bit value with value in memory using amoand.d.\n * \\param [in]    addr   Address pointer to data, address need to be 4byte aligned\n * \\param [in]    value  value to be ANDed\n * \\return  return memory value & and value\n */\n__STATIC_FORCEINLINE int32_t __AMOAND_W(volatile int32_t *addr, int32_t value)\n{\n    register int32_t result;\n\n    __ASM volatile(\"amoand.w %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(value)\n                   : \"memory\");\n    return *addr;\n}\n\n/**\n * \\brief  Atomic OR with 32bit value\n * \\details Atomically OR 32bit value with value in memory using amoor.d.\n * \\param [in]    addr   Address pointer to data, address need to be 4byte aligned\n * \\param [in]    value  value to be ORed\n * \\return  return memory value | and value\n */\n__STATIC_FORCEINLINE int32_t __AMOOR_W(volatile int32_t *addr, int32_t value)\n{\n    register int32_t result;\n\n    __ASM volatile(\"amoor.w %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(value)\n                   : \"memory\");\n    return *addr;\n}\n\n/**\n * \\brief  Atomic XOR with 32bit value\n * \\details Atomically XOR 32bit value with value in memory using amoxor.d.\n * \\param [in]    addr   Address pointer to data, address need to be 4byte aligned\n * \\param [in]    value  value to be XORed\n * \\return  return memory value ^ and value\n */\n__STATIC_FORCEINLINE int32_t __AMOXOR_W(volatile int32_t *addr, int32_t value)\n{\n    register int32_t result;\n\n    __ASM volatile(\"amoxor.w %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(value)\n                   : \"memory\");\n    return *addr;\n}\n\n/**\n * \\brief  Atomic unsigned MAX with 32bit value\n * \\details Atomically unsigned max compare 32bit value with value in memory using amomaxu.d.\n * \\param [in]    addr   Address pointer to data, address need to be 4byte aligned\n * \\param [in]    value  value to be compared\n * \\return  return the bigger value\n */\n__STATIC_FORCEINLINE uint32_t __AMOMAXU_W(volatile uint32_t *addr, uint32_t value)\n{\n    register uint32_t result;\n\n    __ASM volatile(\"amomaxu.w %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(value)\n                   : \"memory\");\n    return *addr;\n}\n\n/**\n * \\brief  Atomic signed MAX with 32bit value\n * \\details Atomically signed max compare 32bit value with value in memory using amomax.d.\n * \\param [in]    addr   Address pointer to data, address need to be 4byte aligned\n * \\param [in]    value  value to be compared\n * \\return the bigger value\n */\n__STATIC_FORCEINLINE int32_t __AMOMAX_W(volatile int32_t *addr, int32_t value)\n{\n    register int32_t result;\n\n    __ASM volatile(\"amomax.w %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(value)\n                   : \"memory\");\n    return *addr;\n}\n\n/**\n * \\brief  Atomic unsigned MIN with 32bit value\n * \\details Atomically unsigned min compare 32bit value with value in memory using amominu.d.\n * \\param [in]    addr   Address pointer to data, address need to be 4byte aligned\n * \\param [in]    value  value to be compared\n * \\return the smaller value\n */\n__STATIC_FORCEINLINE uint32_t __AMOMINU_W(volatile uint32_t *addr, uint32_t value)\n{\n    register uint32_t result;\n\n    __ASM volatile(\"amominu.w %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(value)\n                   : \"memory\");\n    return *addr;\n}\n\n/**\n * \\brief  Atomic signed MIN with 32bit value\n * \\details Atomically signed min compare 32bit value with value in memory using amomin.d.\n * \\param [in]    addr   Address pointer to data, address need to be 4byte aligned\n * \\param [in]    value  value to be compared\n * \\return  the smaller value\n */\n__STATIC_FORCEINLINE int32_t __AMOMIN_W(volatile int32_t *addr, int32_t value)\n{\n    register int32_t result;\n\n    __ASM volatile(\"amomin.w %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(value)\n                   : \"memory\");\n    return *addr;\n}\n\n#if __RISCV_XLEN == 64\n/**\n * \\brief  Compare and Swap 64bit value using LR and SC\n * \\details Compare old value with memory, if identical,\n * store new value in memory. Return the initial value in memory.\n * Success is indicated by comparing return value with OLD.\n * memory address, return 0 if successful, otherwise return !0\n * \\param [in]    addr      Address pointer to data, address need to be 8byte aligned\n * \\param [in]    oldval    Old value of the data in address\n * \\param [in]    newval    New value to be stored into the address\n * \\return  return the initial value in memory\n */\n__STATIC_FORCEINLINE uint64_t __CAS_D(volatile uint64_t *addr, uint64_t oldval, uint64_t newval)\n{\n    register uint64_t result;\n    register uint64_t rc;\n\n    __ASM volatile(\n        \"0:     lr.d %0, %2      \\n\"\n        \"       bne  %0, %z3, 1f \\n\"\n        \"       sc.d %1, %z4, %2 \\n\"\n        \"       bnez %1, 0b      \\n\"\n        \"1:\\n\"\n        : \"=&r\"(result), \"=&r\"(rc), \"+A\"(*addr)\n        : \"r\"(oldval), \"r\"(newval)\n        : \"memory\");\n    return result;\n}\n\n/**\n * \\brief  Atomic Swap 64bit value into memory\n * \\details Atomically swap new 64bit value into memory using amoswap.d.\n * \\param [in]    addr      Address pointer to data, address need to be 8byte aligned\n * \\param [in]    newval    New value to be stored into the address\n * \\return  return the original value in memory\n */\n__STATIC_FORCEINLINE uint64_t __AMOSWAP_D(volatile uint64_t *addr, uint64_t newval)\n{\n    register uint64_t result;\n\n    __ASM volatile(\"amoswap.d %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(newval)\n                   : \"memory\");\n    return result;\n}\n\n/**\n * \\brief  Atomic Add with 64bit value\n * \\details Atomically ADD 64bit value with value in memory using amoadd.d.\n * \\param [in]    addr   Address pointer to data, address need to be 8byte aligned\n * \\param [in]    value  value to be ADDed\n * \\return  return memory value + add value\n */\n__STATIC_FORCEINLINE int64_t __AMOADD_D(volatile int64_t *addr, int64_t value)\n{\n    register int64_t result;\n\n    __ASM volatile(\"amoadd.d %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(value)\n                   : \"memory\");\n    return *addr;\n}\n\n/**\n * \\brief  Atomic And with 64bit value\n * \\details Atomically AND 64bit value with value in memory using amoand.d.\n * \\param [in]    addr   Address pointer to data, address need to be 8byte aligned\n * \\param [in]    value  value to be ANDed\n * \\return  return memory value & and value\n */\n__STATIC_FORCEINLINE int64_t __AMOAND_D(volatile int64_t *addr, int64_t value)\n{\n    register int64_t result;\n\n    __ASM volatile(\"amoand.d %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(value)\n                   : \"memory\");\n    return *addr;\n}\n\n/**\n * \\brief  Atomic OR with 64bit value\n * \\details Atomically OR 64bit value with value in memory using amoor.d.\n * \\param [in]    addr   Address pointer to data, address need to be 8byte aligned\n * \\param [in]    value  value to be ORed\n * \\return  return memory value | and value\n */\n__STATIC_FORCEINLINE int64_t __AMOOR_D(volatile int64_t *addr, int64_t value)\n{\n    register int64_t result;\n\n    __ASM volatile(\"amoor.d %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(value)\n                   : \"memory\");\n    return *addr;\n}\n\n/**\n * \\brief  Atomic XOR with 64bit value\n * \\details Atomically XOR 64bit value with value in memory using amoxor.d.\n * \\param [in]    addr   Address pointer to data, address need to be 8byte aligned\n * \\param [in]    value  value to be XORed\n * \\return  return memory value ^ and value\n */\n__STATIC_FORCEINLINE int64_t __AMOXOR_D(volatile int64_t *addr, int64_t value)\n{\n    register int64_t result;\n\n    __ASM volatile(\"amoxor.d %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(value)\n                   : \"memory\");\n    return *addr;\n}\n\n/**\n * \\brief  Atomic unsigned MAX with 64bit value\n * \\details Atomically unsigned max compare 64bit value with value in memory using amomaxu.d.\n * \\param [in]    addr   Address pointer to data, address need to be 8byte aligned\n * \\param [in]    value  value to be compared\n * \\return  return the bigger value\n */\n__STATIC_FORCEINLINE uint64_t __AMOMAXU_D(volatile uint64_t *addr, uint64_t value)\n{\n    register uint64_t result;\n\n    __ASM volatile(\"amomaxu.d %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(value)\n                   : \"memory\");\n    return *addr;\n}\n\n/**\n * \\brief  Atomic signed MAX with 64bit value\n * \\details Atomically signed max compare 64bit value with value in memory using amomax.d.\n * \\param [in]    addr   Address pointer to data, address need to be 8byte aligned\n * \\param [in]    value  value to be compared\n * \\return the bigger value\n */\n__STATIC_FORCEINLINE int64_t __AMOMAX_D(volatile int64_t *addr, int64_t value)\n{\n    register int64_t result;\n\n    __ASM volatile(\"amomax.d %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(value)\n                   : \"memory\");\n    return *addr;\n}\n\n/**\n * \\brief  Atomic unsigned MIN with 64bit value\n * \\details Atomically unsigned min compare 64bit value with value in memory using amominu.d.\n * \\param [in]    addr   Address pointer to data, address need to be 8byte aligned\n * \\param [in]    value  value to be compared\n * \\return the smaller value\n */\n__STATIC_FORCEINLINE uint64_t __AMOMINU_D(volatile uint64_t *addr, uint64_t value)\n{\n    register uint64_t result;\n\n    __ASM volatile(\"amominu.d %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(value)\n                   : \"memory\");\n    return *addr;\n}\n\n/**\n * \\brief  Atomic signed MIN with 64bit value\n * \\details Atomically signed min compare 64bit value with value in memory using amomin.d.\n * \\param [in]    addr   Address pointer to data, address need to be 8byte aligned\n * \\param [in]    value  value to be compared\n * \\return  the smaller value\n */\n__STATIC_FORCEINLINE int64_t __AMOMIN_D(volatile int64_t *addr, int64_t value)\n{\n    register int64_t result;\n\n    __ASM volatile(\"amomin.d %0, %2, %1\"\n                   : \"=r\"(result), \"+A\"(*addr)\n                   : \"r\"(value)\n                   : \"memory\");\n    return *addr;\n}\n#endif /* __RISCV_XLEN == 64  */\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_CPU_Intrinsic */\n\n#ifdef __cplusplus\n}\n#endif\n#endif /* __CORE_FEATURE_BASE__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/nmsis/core/inc/core_feature_cache.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __CORE_FEATURE_CACHE_H__\n#define __CORE_FEATURE_CACHE_H__\n/*!\n * @file     core_feature_cache.h\n * @brief    Cache feature API header file for Nuclei N/NX Core\n */\n/*\n * Cache Feature Configuration Macro:\n * 1. __ICACHE_PRESENT:  Define whether I-Cache Unit is present or not.\n *   * 0: Not present\n *   * 1: Present\n * 1. __DCACHE_PRESENT:  Define whether D-Cache Unit is present or not.\n *   * 0: Not present\n *   * 1: Present\n */\n#ifdef __cplusplus\n extern \"C\" {\n#endif\n\n#if (defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1)) \\\n    || (defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1))\n\n/* ##########################  Cache functions  #################################### */\n/**\n * \\defgroup NMSIS_Core_Cache       Cache Functions\n * \\brief    Functions that configure Instruction and Data Cache.\n * @{\n *\n * Nuclei provide Cache Control and Maintainence(CCM) for software to control and maintain\n * the internal L1 I/D Cache of the RISC-V Core, software can manage the cache flexibly to\n * meet the actual application scenarios.\n *\n * The CCM operations have 3 types: by single address, by all and flush pipeline.\n * The CCM operations are done via CSR registers, M/S/U mode has its own CSR registers to\n * do CCM operations. By default, CCM operations are not allowed in S/U mode, you can execute\n * \\ref EnableSUCCM in M-Mode to enable it.\n *\n * * API names started with M<operations>, such as \\ref MInvalICacheLine must be called in M-Mode only.\n * * API names started with S<operations>, such as \\ref SInvalICacheLine should be called in S-Mode.\n * * API names started with U<operations>, such as \\ref UInvalICacheLine should be called in U-Mode.\n *\n */\n\n\n/**\n * \\brief Cache CCM Operation Fail Info\n */\ntypedef enum CCM_OP_FINFO {\n    CCM_OP_SUCCESS = 0x0,               /*!< Lock Succeed */\n    CCM_OP_EXCEED_ERR = 0x1,            /*!< Exceed the the number of lockable ways(N-Way I/D-Cache, lockable is N-1) */\n    CCM_OP_PERM_CHECK_ERR = 0x2,        /*!< PMP/sPMP/Page-Table X(I-Cache)/R(D-Cache) permission check failed, or belong to Device/Non-Cacheable address range */\n    CCM_OP_REFILL_BUS_ERR = 0x3,        /*!< Refill has Bus Error */\n    CCM_OP_ECC_ERR = 0x4                /*!< ECC Error */\n} CCM_OP_FINFO_Type;\n\n/**\n * \\brief Cache CCM Command Types\n */\ntypedef enum CCM_CMD {\n    CCM_DC_INVAL = 0x0,                 /*!< Unlock and invalidate D-Cache line specified by CSR CCM_XBEGINADDR */\n    CCM_DC_WB = 0x1,                    /*!< Flush the specific D-Cache line specified by CSR CCM_XBEGINADDR */\n    CCM_DC_WBINVAL = 0x2,               /*!< Unlock, flush and invalidate the specific D-Cache line specified by CSR CCM_XBEGINADDR */\n    CCM_DC_LOCK = 0x3,                  /*!< Lock the specific D-Cache line specified by CSR CCM_XBEGINADDR */\n    CCM_DC_UNLOCK = 0x4,                /*!< Unlock the specific D-Cache line specified by CSR CCM_XBEGINADDR */\n    CCM_DC_WBINVAL_ALL = 0x6,           /*!< Unlock and flush and invalidate all the valid and dirty D-Cache lines */\n    CCM_DC_WB_ALL = 0x7,                /*!< Flush all the valid and dirty D-Cache lines */\n    CCM_DC_INVAL_ALL = 0x17,            /*!< Unlock and invalidate all the D-Cache lines */\n    CCM_IC_INVAL = 0x8,                 /*!< Unlock and invalidate I-Cache line specified by CSR CCM_XBEGINADDR */\n    CCM_IC_LOCK = 0xb,                  /*!< Lock the specific I-Cache line specified by CSR CCM_XBEGINADDR */\n    CCM_IC_UNLOCK = 0xc,                /*!< Unlock the specific I-Cache line specified by CSR CCM_XBEGINADDR */\n    CCM_IC_INVAL_ALL = 0xd              /*!< Unlock and invalidate all the I-Cache lines */\n} CCM_CMD_Type;\n\n/**\n * \\brief Cache Information Type\n */\ntypedef struct CacheInfo {\n    uint32_t linesize;                  /*!< Cache Line size in bytes */\n    uint32_t ways;                      /*!< Cache ways */\n    uint32_t setperway;                 /*!< Cache set per way */\n    uint32_t size;                      /*!< Cache total size in bytes */\n} CacheInfo_Type;\n\n#define CCM_SUEN_SUEN_Pos               0U                              /*!< CSR CCM_SUEN: SUEN bit Position */\n#define CCM_SUEN_SUEN_Msk               (1UL << CCM_SUEN_SUEN_Pos)      /*!< CSR CCM_SUEN: SUEN Mask */\n\n/**\n * \\brief  Enable CCM operation in Supervisor/User Mode\n * \\details\n * This function enable CCM operation in Supervisor/User Mode.\n * If enabled, CCM operations in supervisor/user mode will\n * be allowed.\n * \\remarks\n * - This function can be called in M-Mode only.\n * \\sa\n * - \\ref DisableSUCCM\n*/\n__STATIC_FORCEINLINE void EnableSUCCM(void)\n{\n    __RV_CSR_SET(CSR_CCM_SUEN, CCM_SUEN_SUEN_Msk);\n}\n\n/**\n * \\brief  Disable CCM operation in Supervisor/User Mode\n * \\details\n * This function disable CCM operation in Supervisor/User Mode.\n * If not enabled, CCM operations in supervisor/user mode will\n * trigger a *illegal intruction* exception.\n * \\remarks\n * - This function can be called in M-Mode only.\n * \\sa\n * - \\ref EnableSUCCM\n*/\n__STATIC_FORCEINLINE void DisableSUCCM(void)\n{\n    __RV_CSR_CLEAR(CSR_CCM_SUEN, CCM_SUEN_SUEN_Msk);\n}\n\n/**\n * \\brief  Flush pipeline after CCM operation\n * \\details\n * This function is used to flush pipeline after CCM operations\n * on Cache, it will ensure latest instructions or data can be\n * seen by pipeline.\n * \\remarks\n * - This function can be called in M/S/U-Mode only.\n*/\n__STATIC_FORCEINLINE void FlushPipeCCM(void)\n{\n    __RV_CSR_WRITE(CSR_CCM_FPIPE, 0x1);\n}\n/** @} */ /* End of Doxygen Group NMSIS_Core_Cache */\n#endif\n\n#if defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1)\n\n/**\n * \\defgroup NMSIS_Core_ICache      I-Cache Functions\n * \\ingroup  NMSIS_Core_Cache\n * \\brief    Functions that configure Instruction Cache.\n * @{\n */\n\n/**\n * \\brief  Enable ICache\n * \\details\n * This function enable I-Cache\n * \\remarks\n * - This function can be called in M-Mode only.\n * - This \\ref CSR_MCACHE_CTL register control I Cache enable.\n * \\sa\n * - \\ref DisableICache\n*/\n__STATIC_FORCEINLINE void EnableICache(void)\n{\n    __RV_CSR_SET(CSR_MCACHE_CTL, CSR_MCACHE_CTL_IE);\n}\n\n/**\n * \\brief  Disable ICache\n * \\details\n * This function Disable I-Cache\n * \\remarks\n * - This function can be called in M-Mode only.\n * - This \\ref CSR_MCACHE_CTL register control I Cache enable.\n * \\sa\n * - \\ref EnableICache\n */\n__STATIC_FORCEINLINE void DisableICache(void)\n{\n    __RV_CSR_CLEAR(CSR_MCACHE_CTL, CSR_MCACHE_CTL_IE);\n}\n\n/**\n * \\brief  Get I-Cache Information\n * \\details\n * This function get I-Cache Information\n * \\remarks\n * - This function can be called in M-Mode only.\n * - You can use this function in combination with cache lines operations\n * \\sa\n * - \\ref GetDCacheInfo\n */\n__STATIC_FORCEINLINE int32_t GetICacheInfo(CacheInfo_Type *info)\n{\n    if (info == NULL) {\n        return -1;\n    }\n    CSR_MICFGINFO_Type csr_ccfg = (CSR_MICFGINFO_Type)__RV_CSR_READ(CSR_MICFG_INFO);\n    uint32_t info->setperway = (1 << csr_ccfg.b.set) << 3;\n    uint32_t info->ways = (1 + csr_ccfg.b.way);\n    if (csr_ccfg.b.lsize == 0) {\n        info->linesize = 0;\n    } else {\n        info->linesize = (1 << (csr_ccfg.b.lsize - 1)) << 3;\n    }\n    info->size = info->setperway * info->ways * info->linesize;\n    return 0;\n}\n\n/**\n * \\brief  Get D-Cache Information\n * \\details\n * This function get D-Cache Information\n * \\remarks\n * - This function can be called in M-Mode only.\n * - You can use this function in combination with cache lines operations\n * \\sa\n * - \\ref GetICacheInfo\n */\n__STATIC_FORCEINLINE int32_t GetDCacheInfo(CacheInfo_Type *info)\n{\n    if (info == NULL) {\n        return -1;\n    }\n    CSR_MDCFGINFO_Type csr_ccfg = (CSR_MDCFGINFO_Type)__RV_CSR_READ(CSR_MDCFG_INFO);\n    uint32_t info->setperway = (1 << csr_ccfg.b.set) << 3;\n    uint32_t info->ways = (1 + csr_ccfg.b.way);\n    if (csr_ccfg.b.lsize == 0) {\n        info->linesize = 0;\n    } else {\n        info->linesize = (1 << (csr_ccfg.b.lsize - 1)) << 3;\n    }\n    info->size = info->setperway * info->ways * info->linesize;\n    return 0;\n}\n\n/**\n * \\brief  Invalidate one I-Cache line specified by address in M-Mode\n * \\details\n * This function unlock and invalidate one I-Cache line specified\n * by the address.\n * Command \\ref CCM_IC_INVAL is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be invalidated\n */\n__STATIC_FORCEINLINE void MInvalICacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_MBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_IC_INVAL);\n}\n\n/**\n * \\brief  Invalidate several I-Cache lines specified by address in M-Mode\n * \\details\n * This function unlock and invalidate several I-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_IC_INVAL is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be invalidated\n * \\param [in]    cnt     count of cache lines to be invalidated\n */\n__STATIC_FORCEINLINE void MInvalICacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_MBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_IC_INVAL);\n        }\n    }\n}\n\n/**\n * \\brief  Invalidate one I-Cache line specified by address in S-Mode\n * \\details\n * This function unlock and invalidate one I-Cache line specified\n * by the address.\n * Command \\ref CCM_IC_INVAL is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be invalidated\n */\n__STATIC_FORCEINLINE void SInvalICacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_SBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_IC_INVAL);\n}\n\n/**\n * \\brief  Invalidate several I-Cache lines specified by address in S-Mode\n * \\details\n * This function unlock and invalidate several I-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_IC_INVAL is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be invalidated\n * \\param [in]    cnt     count of cache lines to be invalidated\n */\n__STATIC_FORCEINLINE void SInvalICacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_SBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_IC_INVAL);\n        }\n    }\n}\n\n/**\n * \\brief  Invalidate one I-Cache line specified by address in U-Mode\n * \\details\n * This function unlock and invalidate one I-Cache line specified\n * by the address.\n * Command \\ref CCM_IC_INVAL is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be invalidated\n */\n__STATIC_FORCEINLINE void UInvalICacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_UBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_IC_INVAL);\n}\n\n/**\n * \\brief  Invalidate several I-Cache lines specified by address in U-Mode\n * \\details\n * This function unlock and invalidate several I-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_IC_INVAL is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be invalidated\n * \\param [in]    cnt     count of cache lines to be invalidated\n */\n__STATIC_FORCEINLINE void UInvalICacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_UBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_IC_INVAL);\n        }\n    }\n}\n\n/**\n * \\brief  Lock one I-Cache line specified by address in M-Mode\n * \\details\n * This function lock one I-Cache line specified by the address.\n * Command \\ref CCM_IC_LOCK is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be locked\n * \\return result of CCM lock operation, see enum \\ref CCM_OP_FINFO\n */\n__STATIC_FORCEINLINE unsigned long MLockICacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_MBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_IC_LOCK);\n    return __RV_CSR_READ(CSR_CCM_MDATA);\n}\n\n/**\n * \\brief  Lock several I-Cache lines specified by address in M-Mode\n * \\details\n * This function lock several I-Cache lines specified by the address\n * and line count.\n * Command \\ref CCM_IC_LOCK is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be locked\n * \\param [in]    cnt     count of cache lines to be locked\n * \\return result of CCM lock operation, see enum \\ref CCM_OP_FINFO\n */\n__STATIC_FORCEINLINE unsigned long MLockICacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_MBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_IC_LOCK);\n        }\n        return __RV_CSR_READ(CSR_CCM_MDATA);\n    } else {\n        return 0;\n    }\n}\n\n/**\n * \\brief  Lock one I-Cache line specified by address in S-Mode\n * \\details\n * This function lock one I-Cache line specified by the address.\n * Command \\ref CCM_IC_LOCK is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be locked\n * \\return result of CCM lock operation, see enum \\ref CCM_OP_FINFO\n */\n__STATIC_FORCEINLINE unsigned long SLockICacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_SBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_IC_LOCK);\n    return __RV_CSR_READ(CSR_CCM_SDATA);\n}\n\n/**\n * \\brief  Lock several I-Cache lines specified by address in S-Mode\n * \\details\n * This function lock several I-Cache lines specified by the address\n * and line count.\n * Command \\ref CCM_IC_LOCK is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be locked\n * \\param [in]    cnt     count of cache lines to be locked\n * \\return result of CCM lock operation, see enum \\ref CCM_OP_FINFO\n */\n__STATIC_FORCEINLINE unsigned long SLockICacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_SBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_IC_LOCK);\n        }\n        return __RV_CSR_READ(CSR_CCM_SDATA);\n    } else {\n        return 0;\n    }\n}\n\n/**\n * \\brief  Lock one I-Cache line specified by address in U-Mode\n * \\details\n * This function lock one I-Cache line specified by the address.\n * Command \\ref CCM_IC_LOCK is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be locked\n * \\return result of CCM lock operation, see enum \\ref CCM_OP_FINFO\n */\n__STATIC_FORCEINLINE unsigned long ULockICacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_UBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_IC_LOCK);\n    return __RV_CSR_READ(CSR_CCM_UDATA);\n}\n\n/**\n * \\brief  Lock several I-Cache lines specified by address in U-Mode\n * \\details\n * This function lock several I-Cache lines specified by the address\n * and line count.\n * Command \\ref CCM_IC_LOCK is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be locked\n * \\param [in]    cnt     count of cache lines to be locked\n * \\return result of CCM lock operation, see enum \\ref CCM_OP_FINFO\n */\n__STATIC_FORCEINLINE unsigned long ULockICacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_UBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_IC_LOCK);\n        }\n        return __RV_CSR_READ(CSR_CCM_UDATA);\n    } else {\n        return 0;\n    }\n}\n\n/**\n * \\brief  Unlock one I-Cache line specified by address in M-Mode\n * \\details\n * This function unlock one I-Cache line specified by the address.\n * Command \\ref CCM_IC_UNLOCK is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be unlocked\n */\n__STATIC_FORCEINLINE void MUnlockICacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_MBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_IC_UNLOCK);\n}\n\n/**\n * \\brief  Unlock several I-Cache lines specified by address in M-Mode\n * \\details\n * This function unlock several I-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_IC_UNLOCK is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be unlocked\n * \\param [in]    cnt     count of cache lines to be unlocked\n */\n__STATIC_FORCEINLINE void MUnlockICacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_MBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_IC_UNLOCK);\n        }\n    }\n}\n\n/**\n * \\brief  Unlock one I-Cache line specified by address in S-Mode\n * \\details\n * This function unlock one I-Cache line specified by the address.\n * Command \\ref CCM_IC_UNLOCK is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be unlocked\n */\n__STATIC_FORCEINLINE void SUnlockICacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_SBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_IC_UNLOCK);\n}\n\n/**\n * \\brief  Unlock several I-Cache lines specified by address in S-Mode\n * \\details\n * This function unlock several I-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_IC_UNLOCK is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be unlocked\n * \\param [in]    cnt     count of cache lines to be unlocked\n */\n__STATIC_FORCEINLINE void SUnlockICacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_SBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_IC_UNLOCK);\n        }\n    }\n}\n\n/**\n * \\brief  Unlock one I-Cache line specified by address in U-Mode\n * \\details\n * This function unlock one I-Cache line specified by the address.\n * Command \\ref CCM_IC_UNLOCK is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be unlocked\n */\n__STATIC_FORCEINLINE void UUnlockICacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_UBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_IC_UNLOCK);\n}\n\n/**\n * \\brief  Unlock several I-Cache lines specified by address in U-Mode\n * \\details\n * This function unlock several I-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_IC_UNLOCK is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be unlocked\n * \\param [in]    cnt     count of cache lines to be unlocked\n */\n__STATIC_FORCEINLINE void UUnlockICacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_UBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_IC_UNLOCK);\n        }\n    }\n}\n\n/**\n * \\brief  Invalidate all I-Cache lines in M-Mode\n * \\details\n * This function invalidate all I-Cache lines.\n * Command \\ref CCM_IC_INVAL_ALL is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be invalidated\n */\n__STATIC_FORCEINLINE void MInvalICache(void)\n{\n    __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_IC_INVAL_ALL);\n}\n\n/**\n * \\brief  Invalidate all I-Cache lines in S-Mode\n * \\details\n * This function invalidate all I-Cache lines.\n * Command \\ref CCM_IC_INVAL_ALL is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be invalidated\n */\n__STATIC_FORCEINLINE void SInvalICache(void)\n{\n    __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_IC_INVAL_ALL);\n}\n\n/**\n * \\brief  Invalidate all I-Cache lines in U-Mode\n * \\details\n * This function invalidate all I-Cache lines.\n * Command \\ref CCM_IC_INVAL_ALL is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be invalidated\n */\n__STATIC_FORCEINLINE void UInvalICache(void)\n{\n    __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_IC_INVAL_ALL);\n}\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_ICache */\n#endif /* defined(__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1) */\n\n#if defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1)\n/**\n * \\defgroup NMSIS_Core_DCache      D-Cache Functions\n * \\ingroup  NMSIS_Core_Cache\n * \\brief    Functions that configure Data Cache.\n * @{\n */\n/**\n * \\brief  Enable DCache\n * \\details\n * This function enable D-Cache\n * \\remarks\n * - This function can be called in M-Mode only.\n * - This \\ref CSR_MCACHE_CTL register control D Cache enable.\n * \\sa\n * - \\ref DisableDCache\n*/\n__STATIC_FORCEINLINE void EnableDCache(void)\n{\n    __RV_CSR_SET(CSR_MCACHE_CTL, CSR_MCACHE_CTL_DE);\n}\n\n/**\n * \\brief  Disable DCache\n * \\details\n * This function Disable D-Cache\n * \\remarks\n * - This function can be called in M-Mode only.\n * - This \\ref CSR_MCACHE_CTL register control D Cache enable.\n * \\sa\n * - \\ref EnableDCache\n */\n__STATIC_FORCEINLINE void DisableDCache(void)\n{\n    __RV_CSR_CLEAR(CSR_MCACHE_CTL, CSR_MCACHE_CTL_DE);\n}\n\n/**\n * \\brief  Invalidate one D-Cache line specified by address in M-Mode\n * \\details\n * This function unlock and invalidate one D-Cache line specified\n * by the address.\n * Command \\ref CCM_DC_INVAL is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be invalidated\n */\n__STATIC_FORCEINLINE void MInvalDCacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_MBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_DC_INVAL);\n}\n\n/**\n * \\brief  Invalidate several D-Cache lines specified by address in M-Mode\n * \\details\n * This function unlock and invalidate several D-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_DC_INVAL is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be invalidated\n * \\param [in]    cnt     count of cache lines to be invalidated\n */\n__STATIC_FORCEINLINE void MInvalDCacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_MBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_DC_INVAL);\n        }\n    }\n}\n\n/**\n * \\brief  Invalidate one D-Cache line specified by address in S-Mode\n * \\details\n * This function unlock and invalidate one D-Cache line specified\n * by the address.\n * Command \\ref CCM_DC_INVAL is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be invalidated\n */\n__STATIC_FORCEINLINE void SInvalDCacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_SBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_DC_INVAL);\n}\n\n/**\n * \\brief  Invalidate several D-Cache lines specified by address in S-Mode\n * \\details\n * This function unlock and invalidate several D-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_DC_INVAL is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be invalidated\n * \\param [in]    cnt     count of cache lines to be invalidated\n */\n__STATIC_FORCEINLINE void SInvalDCacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_SBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_DC_INVAL);\n        }\n    }\n}\n\n/**\n * \\brief  Invalidate one D-Cache line specified by address in U-Mode\n * \\details\n * This function unlock and invalidate one D-Cache line specified\n * by the address.\n * Command \\ref CCM_DC_INVAL is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be invalidated\n */\n__STATIC_FORCEINLINE void UInvalDCacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_UBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_DC_INVAL);\n}\n\n/**\n * \\brief  Invalidate several D-Cache lines specified by address in U-Mode\n * \\details\n * This function unlock and invalidate several D-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_DC_INVAL is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be invalidated\n * \\param [in]    cnt     count of cache lines to be invalidated\n */\n__STATIC_FORCEINLINE void UInvalDCacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_UBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_DC_INVAL);\n        }\n    }\n}\n\n/**\n * \\brief  Flush one D-Cache line specified by address in M-Mode\n * \\details\n * This function flush one D-Cache line specified by the address.\n * Command \\ref CCM_DC_WB is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be flushed\n */\n__STATIC_FORCEINLINE void MFlushDCacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_MBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_DC_WB);\n}\n\n/**\n * \\brief  Flush several D-Cache lines specified by address in M-Mode\n * \\details\n * This function flush several D-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_DC_WB is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be flushed\n * \\param [in]    cnt     count of cache lines to be flushed\n */\n__STATIC_FORCEINLINE void MFlushDCacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_MBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_DC_WB);\n        }\n    }\n}\n\n/**\n * \\brief  Flush one D-Cache line specified by address in S-Mode\n * \\details\n * This function flush one D-Cache line specified by the address.\n * Command \\ref CCM_DC_WB is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be flushed\n */\n__STATIC_FORCEINLINE void SFlushDCacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_SBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_DC_WB);\n}\n\n/**\n * \\brief  Flush several D-Cache lines specified by address in S-Mode\n * \\details\n * This function flush several D-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_DC_WB is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be flushed\n * \\param [in]    cnt     count of cache lines to be flushed\n */\n__STATIC_FORCEINLINE void SFlushDCacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_SBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_DC_WB);\n        }\n    }\n}\n\n/**\n * \\brief  Flush one D-Cache line specified by address in U-Mode\n * \\details\n * This function flush one D-Cache line specified by the address.\n * Command \\ref CCM_DC_WB is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be flushed\n */\n__STATIC_FORCEINLINE void UFlushDCacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_UBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_DC_WB);\n}\n\n/**\n * \\brief  Flush several D-Cache lines specified by address in U-Mode\n * \\details\n * This function flush several D-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_DC_WB is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be flushed\n * \\param [in]    cnt     count of cache lines to be flushed\n */\n__STATIC_FORCEINLINE void UFlushDCacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_UBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_DC_WB);\n        }\n    }\n}\n\n/**\n * \\brief  Flush and invalidate one D-Cache line specified by address in M-Mode\n * \\details\n * This function flush and invalidate one D-Cache line specified by the address.\n * Command \\ref CCM_DC_WBINVAL is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be flushed and invalidated\n */\n__STATIC_FORCEINLINE void MFlushInvalDCacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_MBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_DC_WBINVAL);\n}\n\n/**\n * \\brief  Flush and invalidate several D-Cache lines specified by address in M-Mode\n * \\details\n * This function flush and invalidate several D-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_DC_WBINVAL is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be flushed and invalidated\n * \\param [in]    cnt     count of cache lines to be flushed and invalidated\n */\n__STATIC_FORCEINLINE void MFlushInvalDCacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_MBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_DC_WBINVAL);\n        }\n    }\n}\n\n/**\n * \\brief  Flush and invalidate one D-Cache line specified by address in S-Mode\n * \\details\n * This function flush and invalidate one D-Cache line specified by the address.\n * Command \\ref CCM_DC_WBINVAL is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be flushed and invalidated\n */\n__STATIC_FORCEINLINE void SFlushInvalDCacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_SBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_DC_WBINVAL);\n}\n\n/**\n * \\brief  Flush and invalidate several D-Cache lines specified by address in S-Mode\n * \\details\n * This function flush and invalidate several D-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_DC_WBINVAL is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be flushed and invalidated\n * \\param [in]    cnt     count of cache lines to be flushed and invalidated\n */\n__STATIC_FORCEINLINE void SFlushInvalDCacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_SBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_DC_WBINVAL);\n        }\n    }\n}\n\n/**\n * \\brief  Flush and invalidate one D-Cache line specified by address in U-Mode\n * \\details\n * This function flush and invalidate one D-Cache line specified by the address.\n * Command \\ref CCM_DC_WBINVAL is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be flushed and invalidated\n */\n__STATIC_FORCEINLINE void UFlushInvalDCacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_UBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_DC_WBINVAL);\n}\n\n/**\n * \\brief  Flush and invalidate several D-Cache lines specified by address in U-Mode\n * \\details\n * This function flush and invalidate several D-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_DC_WBINVAL is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be flushed and invalidated\n * \\param [in]    cnt     count of cache lines to be flushed and invalidated\n */\n__STATIC_FORCEINLINE void UFlushInvalDCacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_UBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_DC_WBINVAL);\n        }\n    }\n}\n\n/**\n * \\brief  Lock one D-Cache line specified by address in M-Mode\n * \\details\n * This function lock one D-Cache line specified by the address.\n * Command \\ref CCM_DC_LOCK is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be locked\n * \\return result of CCM lock operation, see enum \\ref CCM_OP_FINFO\n */\n__STATIC_FORCEINLINE unsigned long MLockDCacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_MBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_DC_LOCK);\n    return __RV_CSR_READ(CSR_CCM_MDATA);\n}\n\n/**\n * \\brief  Lock several D-Cache lines specified by address in M-Mode\n * \\details\n * This function lock several D-Cache lines specified by the address\n * and line count.\n * Command \\ref CCM_DC_LOCK is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be locked\n * \\param [in]    cnt     count of cache lines to be locked\n * \\return result of CCM lock operation, see enum \\ref CCM_OP_FINFO\n */\n__STATIC_FORCEINLINE unsigned long MLockDCacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_MBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_DC_LOCK);\n        }\n        return __RV_CSR_READ(CSR_CCM_MDATA);\n    } else {\n        return 0;\n    }\n}\n\n/**\n * \\brief  Lock one D-Cache line specified by address in S-Mode\n * \\details\n * This function lock one D-Cache line specified by the address.\n * Command \\ref CCM_DC_LOCK is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be locked\n * \\return result of CCM lock operation, see enum \\ref CCM_OP_FINFO\n */\n__STATIC_FORCEINLINE unsigned long SLockDCacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_SBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_DC_LOCK);\n    return __RV_CSR_READ(CSR_CCM_SDATA);\n}\n\n/**\n * \\brief  Lock several D-Cache lines specified by address in S-Mode\n * \\details\n * This function lock several D-Cache lines specified by the address\n * and line count.\n * Command \\ref CCM_DC_LOCK is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be locked\n * \\param [in]    cnt     count of cache lines to be locked\n * \\return result of CCM lock operation, see enum \\ref CCM_OP_FINFO\n */\n__STATIC_FORCEINLINE unsigned long SLockDCacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_SBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_DC_LOCK);\n        }\n        return __RV_CSR_READ(CSR_CCM_SDATA);\n    } else {\n        return 0;\n    }\n}\n\n/**\n * \\brief  Lock one D-Cache line specified by address in U-Mode\n * \\details\n * This function lock one D-Cache line specified by the address.\n * Command \\ref CCM_DC_LOCK is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be locked\n * \\return result of CCM lock operation, see enum \\ref CCM_OP_FINFO\n */\n__STATIC_FORCEINLINE unsigned long ULockDCacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_UBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_DC_LOCK);\n    return __RV_CSR_READ(CSR_CCM_UDATA);\n}\n\n/**\n * \\brief  Lock several D-Cache lines specified by address in U-Mode\n * \\details\n * This function lock several D-Cache lines specified by the address\n * and line count.\n * Command \\ref CCM_DC_LOCK is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be locked\n * \\param [in]    cnt     count of cache lines to be locked\n * \\return result of CCM lock operation, see enum \\ref CCM_OP_FINFO\n */\n__STATIC_FORCEINLINE unsigned long ULockDCacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_UBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_DC_LOCK);\n        }\n        return __RV_CSR_READ(CSR_CCM_UDATA);\n    } else {\n        return 0;\n    }\n}\n\n/**\n * \\brief  Unlock one D-Cache line specified by address in M-Mode\n * \\details\n * This function unlock one D-Cache line specified by the address.\n * Command \\ref CCM_DC_UNLOCK is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be unlocked\n */\n__STATIC_FORCEINLINE void MUnlockDCacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_MBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_DC_UNLOCK);\n}\n\n/**\n * \\brief  Unlock several D-Cache lines specified by address in M-Mode\n * \\details\n * This function unlock several D-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_DC_UNLOCK is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be unlocked\n * \\param [in]    cnt     count of cache lines to be unlocked\n */\n__STATIC_FORCEINLINE void MUnlockDCacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_MBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_DC_UNLOCK);\n        }\n    }\n}\n\n/**\n * \\brief  Unlock one D-Cache line specified by address in S-Mode\n * \\details\n * This function unlock one D-Cache line specified by the address.\n * Command \\ref CCM_DC_UNLOCK is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be unlocked\n */\n__STATIC_FORCEINLINE void SUnlockDCacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_SBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_DC_UNLOCK);\n}\n\n/**\n * \\brief  Unlock several D-Cache lines specified by address in S-Mode\n * \\details\n * This function unlock several D-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_DC_UNLOCK is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be unlocked\n * \\param [in]    cnt     count of cache lines to be unlocked\n */\n__STATIC_FORCEINLINE void SUnlockDCacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_SBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_DC_UNLOCK);\n        }\n    }\n}\n\n/**\n * \\brief  Unlock one D-Cache line specified by address in U-Mode\n * \\details\n * This function unlock one D-Cache line specified by the address.\n * Command \\ref CCM_DC_UNLOCK is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be unlocked\n */\n__STATIC_FORCEINLINE void UUnlockDCacheLine(unsigned long addr)\n{\n    __RV_CSR_WRITE(CSR_CCM_UBEGINADDR, addr);\n    __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_DC_UNLOCK);\n}\n\n/**\n * \\brief  Unlock several D-Cache lines specified by address in U-Mode\n * \\details\n * This function unlock several D-Cache lines specified\n * by the address and line count.\n * Command \\ref CCM_DC_UNLOCK is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be unlocked\n * \\param [in]    cnt     count of cache lines to be unlocked\n */\n__STATIC_FORCEINLINE void UUnlockDCacheLines(unsigned long addr, unsigned long cnt)\n{\n    if (cnt > 0) {\n        unsigned long i;\n        __RV_CSR_WRITE(CSR_CCM_UBEGINADDR, addr);\n        for (i = 0; i < cnt; i++) {\n            __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_DC_UNLOCK);\n        }\n    }\n}\n\n/**\n * \\brief  Invalidate all D-Cache lines in M-Mode\n * \\details\n * This function invalidate all D-Cache lines.\n * Command \\ref CCM_DC_INVAL_ALL is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be invalidated\n */\n__STATIC_FORCEINLINE void MInvalDCache(void)\n{\n    __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_DC_INVAL_ALL);\n}\n\n/**\n * \\brief  Invalidate all D-Cache lines in S-Mode\n * \\details\n * This function invalidate all D-Cache lines.\n * Command \\ref CCM_DC_INVAL_ALL is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be invalidated\n */\n__STATIC_FORCEINLINE void SInvalDCache(void)\n{\n    __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_DC_INVAL_ALL);\n}\n\n/**\n * \\brief  Invalidate all D-Cache lines in U-Mode\n * \\details\n * This function invalidate all D-Cache lines.\n * In U-Mode, this operation will be automatically\n * translated to flush and invalidate operations by hardware.\n * Command \\ref CCM_DC_INVAL_ALL is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be invalidated\n */\n__STATIC_FORCEINLINE void UInvalDCache(void)\n{\n    __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_DC_INVAL_ALL);\n}\n\n/**\n * \\brief  Flush all D-Cache lines in M-Mode\n * \\details\n * This function flush all D-Cache lines.\n * Command \\ref CCM_DC_WB_ALL is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be flushed\n */\n__STATIC_FORCEINLINE void MFlushDCache(void)\n{\n    __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_DC_WB_ALL);\n}\n\n/**\n * \\brief  Flush all D-Cache lines in S-Mode\n * \\details\n * This function flush all D-Cache lines.\n * Command \\ref CCM_DC_WB_ALL is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be flushed\n */\n__STATIC_FORCEINLINE void SFlushDCache(void)\n{\n    __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_DC_WB_ALL);\n}\n\n/**\n * \\brief  Flush all D-Cache lines in U-Mode\n * \\details\n * This function flush all D-Cache lines.\n * Command \\ref CCM_DC_WB_ALL is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be flushed\n */\n__STATIC_FORCEINLINE void UFlushDCache(void)\n{\n    __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_DC_WB_ALL);\n}\n\n/**\n * \\brief  Flush and invalidate all D-Cache lines in M-Mode\n * \\details\n * This function flush and invalidate all D-Cache lines.\n * Command \\ref CCM_DC_WBINVAL_ALL is written to CSR \\ref CSR_CCM_MCOMMAND.\n * \\remarks\n * This function must be executed in M-Mode only.\n * \\param [in]    addr    start address to be flushed and locked\n */\n__STATIC_FORCEINLINE void MFlushInvalDCache(void)\n{\n    __RV_CSR_WRITE(CSR_CCM_MCOMMAND, CCM_DC_WBINVAL_ALL);\n}\n\n/**\n * \\brief  Flush and invalidate all D-Cache lines in S-Mode\n * \\details\n * This function flush and invalidate all D-Cache lines.\n * Command \\ref CCM_DC_WBINVAL_ALL is written to CSR \\ref CSR_CCM_SCOMMAND.\n * \\remarks\n * This function must be executed in M/S-Mode only.\n * \\param [in]    addr    start address to be flushed and locked\n */\n__STATIC_FORCEINLINE void SFlushInvalDCache(void)\n{\n    __RV_CSR_WRITE(CSR_CCM_SCOMMAND, CCM_DC_WBINVAL_ALL);\n}\n\n/**\n * \\brief  Flush and invalidate all D-Cache lines in U-Mode\n * \\details\n * This function flush and invalidate all D-Cache lines.\n * Command \\ref CCM_DC_WBINVAL_ALL is written to CSR \\ref CSR_CCM_UCOMMAND.\n * \\remarks\n * This function must be executed in M/S/U-Mode only.\n * \\param [in]    addr    start address to be flushed and locked\n */\n__STATIC_FORCEINLINE void UFlushInvalDCache(void)\n{\n    __RV_CSR_WRITE(CSR_CCM_UCOMMAND, CCM_DC_WBINVAL_ALL);\n}\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_DCache */\n#endif /* defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1) */\n\n#ifdef __cplusplus\n}\n#endif\n#endif /** __CORE_FEATURE_CACHE_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/nmsis/core/inc/core_feature_dsp.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __CORE_FEATURE_DSP__\n#define __CORE_FEATURE_DSP__\n\n/*!\n * @file     core_feature_dsp.h\n * @brief    DSP feature API header file for Nuclei N/NX Core\n */\n/*\n * DSP Feature Configuration Macro:\n * 1. __DSP_PRESENT:  Define whether Digital Signal Processing Unit(DSP) is present or not\n *   * 0: Not present\n *   * 1: Present\n */\n#ifdef __cplusplus\n extern \"C\" {\n#endif\n\n#if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1)\n\n/* ###########################  CPU SIMD DSP Intrinsic Functions ########################### */\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic   Intrinsic Functions for SIMD Instructions\n * \\ingroup  NMSIS_Core\n * \\brief    Functions that generate RISC-V DSP SIMD instructions.\n * \\details\n *\n * The following functions generate specified RISC-V SIMD instructions that cannot be directly accessed by compiler.\n * * **DSP ISA Extension Instruction Summary**\n *   + **Shorthand Definitions**\n *     - r.H == rH1: r[31:16], r.L == r.H0: r[15:0]\n *     - r.B3: r[31:24], r.B2: r[23:16], r.B1: r[15:8], r.B0: r[7:0]\n *     - r.B[x]: r[(x*8+7):(x*8+0)]\n *     - r.H[x]: r[(x*16+7):(x*16+0)]\n *     - r.W[x]: r[(x*32+31):(x*32+0)]\n *     - r[xU]: the upper 32-bit of a 64-bit number; xU represents the GPR number that contains this upper part 32-bit value.\n *     - r[xL]: the lower 32-bit of a 64-bit number; xL represents the GPR number that contains this lower part 32-bit value.\n *     - r[xU].r[xL]: a 64-bit number that is formed from a pair of GPRs.\n *     - s>>: signed arithmetic right shift:\n *     - u>>: unsigned logical right shift\n *     - SAT.Qn(): Saturate to the range of [-2^n, 2^n-1], if saturation happens, set PSW.OV.\n *     - SAT.Um(): Saturate to the range of [0, 2^m-1], if saturation happens, set PSW.OV.\n *     - RUND(): Indicate `rounding`, i.e., add 1 to the most significant discarded bit for right shift or MSW-type multiplication instructions.\n *     - Sign or Zero Extending functions:\n *       - SEm(data): Sign-Extend data to m-bit.:\n *       - ZEm(data): Zero-Extend data to m-bit.\n *     - ABS(x): Calculate the absolute value of `x`.\n *     - CONCAT(x,y): Concatinate `x` and `y` to form a value.\n *     - u<: Unsinged less than comparison.\n *     - u<=: Unsinged less than & equal comparison.\n *     - u>: Unsinged greater than comparison.\n *     - s*: Signed multiplication.\n *     - u*: Unsigned multiplication.\n *\n *   @{\n */\n/** @} */ /* End of Doxygen Group NMSIS_Core_DSP_Intrinsic */\n\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS      SIMD Data Processing Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic\n * \\brief    SIMD Data Processing Instructions\n * \\details\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB      SIMD 16-bit Add/Subtract Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 16-bit Add/Subtract Instructions\n * \\details\n * Based on the combination of the types of the two 16-bit arithmetic operations, the SIMD 16-bit\n * add/subtract instructions can be classified into 6 main categories: Addition (two 16-bit addition),\n * Subtraction (two 16-bit subtraction), Crossed Add & Sub (one addition and one subtraction), and\n * Crossed Sub & Add (one subtraction and one addition), Straight Add & Sub (one addition and one\n * subtraction), and Straight Sub & Add (one subtraction and one addition).\n * Based on the way of how an overflow condition is handled, the SIMD 16-bit add/subtract\n * instructions can be classified into 5 groups: Wrap-around (dropping overflow), Signed Halving\n * (keeping overflow by dropping 1 LSB bit), Unsigned Halving, Signed Saturation (clipping overflow),\n * and Unsigned Saturation.\n * Together, there are 30 SIMD 16-bit add/subtract instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB      SIMD 8-bit Addition & Subtraction Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 8-bit Addition & Subtraction Instructions\n * \\details\n * Based on the types of the four 8-bit arithmetic operations, the SIMD 8-bit add/subtract instructions\n * can be classified into 2 main categories: Addition (four 8-bit addition), and Subtraction (four 8-bit\n * subtraction).\n * Based on the way of how an overflow condition is handled for singed or unsigned operation, the\n * SIMD 8-bit add/subtract instructions can be classified into 5 groups: Wrap-around (dropping\n * overflow), Signed Halving (keeping overflow by dropping 1 LSB bit), Unsigned Halving, Signed\n * Saturation (clipping overflow), and Unsigned Saturation.\n * Together, there are 10 SIMD 8-bit add/subtract instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT      SIMD 16-bit Shift Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 16-bit Shift Instructions\n * \\details\n * there are 14 SIMD 16-bit shift instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT      SIMD 8-bit Shift Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 8-bit Shift Instructions\n * \\details\n *  there are 14 SIMD 8-bit shift instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_CMP      SIMD 16-bit Compare Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 16-bit Compare Instructions\n * \\details\n *  there are 5 SIMD 16-bit Compare instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_CMP      SIMD 8-bit Compare Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 8-bit Compare Instructions\n * \\details\n *  there are 5  SIMD 8-bit Compare instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MULTIPLY      SIMD 16-bit Multiply Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 16-bit Multiply Instructions\n * \\details\n * there are 6 SIMD 16-bit Multiply instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MULTIPLY      SIMD 8-bit Multiply Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 8-bit Multiply Instructions\n * \\details\n *  there are 6 SIMD 8-bit Multiply instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC      SIMD 16-bit Miscellaneous Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 16-bit Miscellaneous Instructions\n * \\details\n *  there are 10 SIMD 16-bit Misc instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC      SIMD 8-bit Miscellaneous Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 8-bit Miscellaneous Instructions\n * \\details\n *  there are 10 SIMD 8-bit Miscellaneous instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK      SIMD 8-bit Unpacking Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_SIMD_DATA_PROCESS\n * \\brief    SIMD 8-bit Unpacking Instructions\n * \\details\n *  there are 8 SIMD 8-bit Unpacking instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_NON_SIMD      Non-SIMD Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic\n * \\brief    Non-SIMD Instructions\n * \\details\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q15_SAT_ALU      Non-SIMD Q15 saturation ALU Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NON_SIMD\n * \\brief    Non-SIMD Q15 saturation ALU Instructions\n * \\details\n * there are 7 Non-SIMD Q15 saturation ALU Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU      Non-SIMD Q31 saturation ALU Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NON_SIMD\n * \\brief    Non-SIMD Q31 saturation ALU Instructions\n * \\details\n *  there are Non-SIMD Q31 saturation ALU Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION      32-bit Computation Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NON_SIMD\n * \\brief    32-bit Computation Instructions\n * \\details\n * there are 8 32-bit Computation Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_OV_FLAG_SC      OV (Overflow) flag Set/Clear Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NON_SIMD\n * \\brief    OV (Overflow) flag Set/Clear Instructions\n * \\details\n * The following table lists the user instructions related to Overflow (OV) flag manipulation. there are 2 OV (Overflow) flag Set/Clear Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC      Non-SIMD Miscellaneous Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NON_SIMD\n * \\brief    Non-SIMD Miscellaneous Instructions\n * \\details\n * There are 13 Miscellaneous Instructions here.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_DATA_PROCESS      Partial-SIMD Data Processing Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic\n * \\brief    Partial-SIMD Data Processing Instructions\n * \\details\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_PACK      SIMD 16-bit Packing Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_PART_SIMD_DATA_PROCESS\n * \\brief    SIMD 16-bit Packing Instructions\n * \\details\n * there are 4 SIMD16-bit Packing Instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC      Signed MSW 32x32 Multiply and Add Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_PART_SIMD_DATA_PROCESS\n * \\brief    Signed MSW 32x32 Multiply and Add Instructions\n * \\details\n *  there are 8 Signed MSW 32x32 Multiply and Add Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC      Signed MSW 32x16 Multiply and Add Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_PART_SIMD_DATA_PROCESS\n * \\brief    Signed MSW 32x16 Multiply and Add Instructions\n * \\details\n * there are 15 Signed MSW 32x16 Multiply and Add Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB      Signed 16-bit Multiply 32-bit Add/Subtract Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_PART_SIMD_DATA_PROCESS\n * \\brief    Signed 16-bit Multiply 32-bit Add/Subtract Instructions\n * \\details\n *  there are 18 Signed 16-bit Multiply 32-bit Add/Subtract Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB      Signed 16-bit Multiply 64-bit Add/Subtract Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_PART_SIMD_DATA_PROCESS\n * \\brief    Signed 16-bit Multiply 64-bit Add/Subtract Instructions\n * \\details\n *  there is Signed 16-bit Multiply 64-bit Add/Subtract Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_MISC      Partial-SIMD Miscellaneous Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_PART_SIMD_DATA_PROCESS\n * \\brief    Partial-SIMD Miscellaneous Instructions\n * \\details\n *  there are  7 Partial-SIMD Miscellaneous Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_8B_MULT_32B_ADD      8-bit Multiply with 32-bit Add Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_PART_SIMD_DATA_PROCESS\n * \\brief    8-bit Multiply with 32-bit Add Instructions\n * \\details\n * there are  3 8-bit Multiply with 32-bit Add Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_64B_PROFILE      64-bit Profile Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic\n * \\brief    64-bit Profile Instructions\n * \\details\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB      64-bit Addition & Subtraction Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_64B_PROFILE\n * \\brief    64-bit Addition & Subtraction Instructions\n * \\details\n * there are 10 64-bit Addition & Subtraction Instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB      32-bit Multiply with 64-bit Add/Subtract Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_64B_PROFILE\n * \\brief    32-bit Multiply with 64-bit Add/Subtract Instructions\n * \\details\n *  there are 32-bit Multiply 64-bit Add/Subtract Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB      Signed 16-bit Multiply with 64-bit Add/Subtract Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_64B_PROFILE\n * \\brief    Signed 16-bit Multiply with 64-bit Add/Subtract Instructions\n * \\details\n * there are 10 Signed 16-bit Multiply with 64-bit Add/Subtract Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_ONLY      RV64 Only Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic\n * \\brief    RV64 Only Instructions\n * \\details\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB      (RV64 Only) SIMD 32-bit Add/Subtract Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    (RV64 Only) SIMD 32-bit Add/Subtract Instructions\n * \\details\n * The following tables list instructions that are only present in RV64.\n * There are 30 SIMD 32-bit addition or subtraction instructions.there are 4 SIMD16-bit Packing Instructions.\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT      (RV64 Only) SIMD 32-bit Shift Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    (RV64 Only) SIMD 32-bit Shift Instructions\n * \\details\n *  there are 14 (RV64 Only) SIMD 32-bit Shift Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_MISC      (RV64 Only) SIMD 32-bit Miscellaneous Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    (RV64 Only) SIMD 32-bit Miscellaneous Instructions\n * \\details\n * there are 5  (RV64 Only) SIMD 32-bit Miscellaneous Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT      (RV64 Only) SIMD Q15 Saturating Multiply Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    (RV64 Only) SIMD Q15 Saturating Multiply Instructions\n * \\details\n *  there are 9 (RV64 Only) SIMD Q15 saturating Multiply Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_32B_MULT      (RV64 Only) 32-bit Multiply Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    (RV64 Only) 32-bit Multiply Instructions\n * \\details\n *  there is 3 RV64 Only) 32-bit Multiply Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_32B_MULT_ADD      (RV64 Only) 32-bit Multiply & Add Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    (RV64 Only) 32-bit Multiply & Add Instructions\n * \\details\n *  there are  3 (RV64 Only) 32-bit Multiply & Add Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC      (RV64 Only) 32-bit Parallel Multiply & Add Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    (RV64 Only) 32-bit Parallel Multiply & Add Instructions\n * \\details\n * there are 12 (RV64 Only) 32-bit Parallel Multiply & Add Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_NON_SIMD_32B_SHIFT      (RV64 Only) Non-SIMD 32-bit Shift Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    (RV64 Only) Non-SIMD 32-bit Shift Instructions\n * \\details\n *  there are 1  (RV64 Only) Non-SIMD 32-bit Shift Instructions\n */\n\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PACK      32-bit Packing Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_RV64_ONLY\n * \\brief    32-bit Packing Instructions\n * \\details\n *  There are four 32-bit packing instructions here\n */\n\n/* ===== Inline Function Start for 3.1. ADD8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief ADD8 (SIMD 8-bit Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * ADD8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit integer element additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 8-bit integer elements in Rs1 with the 8-bit integer elements\n * in Rs2, and then writes the 8-bit element results to Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned addition.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = Rs1.B[x] + Rs2.B[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_ADD8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"add8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.1. ADD8 ===== */\n\n/* ===== Inline Function Start for 3.2. ADD16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief ADD16 (SIMD 16-bit Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * ADD16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit integer element additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit integer elements in Rs1 with the 16-bit integer\n * elements in Rs2, and then writes the 16-bit element results to Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned addition.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = Rs1.H[x] + Rs2.H[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_ADD16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"add16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.2. ADD16 ===== */\n\n/* ===== Inline Function Start for 3.3. ADD64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief ADD64 (64-bit Addition)\n * \\details\n * **Type**: 64-bit Profile\n *\n * **Syntax**:\\n\n * ~~~\n * ADD64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add two 64-bit signed or unsigned integers.\n *\n * **RV32 Description**:\\n\n * This instruction adds the 64-bit integer of an even/odd pair of registers specified\n * by Rs1(4,1) with the 64-bit integer of an even/odd pair of registers specified by Rs2(4,1), and then\n * writes the 64-bit result to an even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., value d, determines the even/odd pair group of two registers. Specifically, the register\n * pair includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction has the same behavior as the ADD instruction in RV64I.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned addition.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n *  t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n *  a_L = CONCAT(Rs1(4,1),1'b0); a_H = CONCAT(Rs1(4,1),1'b1);\n *  b_L = CONCAT(Rs2(4,1),1'b0); b_H = CONCAT(Rs2(4,1),1'b1);\n *  R[t_H].R[t_L] = R[a_H].R[a_L] + R[b_H].R[b_L];\n * RV64:\n *  Rd = Rs1 + Rs2;\n * ~~~\n *\n * \\param [in]  a    unsigned long long type of value stored in a\n * \\param [in]  b    unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_ADD64(unsigned long long a, unsigned long long b)\n{\n    register unsigned long long result;\n    __ASM volatile(\"add64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.3. ADD64 ===== */\n\n/* ===== Inline Function Start for 3.4. AVE ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief AVE (Average with Rounding)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * AVE Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Calculate the average of the contents of two general registers.\n *\n * **Description**:\\n\n * This instruction calculates the average value of two signed integers stored in Rs1 and\n * Rs2, rounds up a half-integer result to the nearest integer, and writes the result to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Sum = CONCAT(Rs1[MSB],Rs1[MSB:0]) + CONCAT(Rs2[MSB],Rs2[MSB:0]) + 1;\n * Rd = Sum[(MSB+1):1];\n * for RV32: MSB=31,\n * for RV64: MSB=63\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_AVE(long a, long b)\n{\n    register long result;\n    __ASM volatile(\"ave %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.4. AVE ===== */\n\n/* ===== Inline Function Start for 3.5. BITREV ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief BITREV (Bit Reverse)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * BITREV Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Reverse the bit positions of the source operand within a specified width starting from bit\n * 0. The reversed width is a variable from a GPR.\n *\n * **Description**:\\n\n * This instruction reverses the bit positions of the content of Rs1. The reversed bit width\n * is calculated as Rs2[4:0]+1 (RV32) or Rs2[5:0]+1 (RV64). The upper bits beyond the reversed width\n * are filled with zeros. After the bit reverse operation, the result is written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * msb = Rs2[4:0]; (for RV32)\n * msb = Rs2[5:0]; (for RV64)\n * rev[0:msb] = Rs1[msb:0];\n * Rd = ZE(rev[msb:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_BITREV(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"bitrev %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.5. BITREV ===== */\n\n/* ===== Inline Function Start for 3.6. BITREVI ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief BITREVI (Bit Reverse Immediate)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * (RV32) BITREVI Rd, Rs1, imm[4:0]\n * (RV64) BITREVI Rd, Rs1, imm[5:0]\n * ~~~\n *\n * **Purpose**:\\n\n * Reverse the bit positions of the source operand within a specified width starting from bit\n * 0. The reversed width is an immediate value.\n *\n * **Description**:\\n\n * This instruction reverses the bit positions of the content of Rs1. The reversed bit width\n * is calculated as imm[4:0]+1 (RV32) or imm[5:0]+1 (RV64). The upper bits beyond the reversed width\n * are filled with zeros. After the bit reverse operation, the result is written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * msb = imm[4:0]; (RV32)\n * msb = imm[5:0]; (RV64)\n * rev[0:msb] = Rs1[msb:0];\n * Rd = ZE(rev[msb:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_BITREVI(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"bitrevi %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.6. BITREVI ===== */\n\n/* ===== Inline Function Start for 3.7. BPICK ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief BPICK (Bit-wise Pick)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * BPICK Rd, Rs1, Rs2, Rc\n * ~~~\n *\n * **Purpose**:\\n\n * Select from two source operands based on a bit mask in the third operand.\n *\n * **Description**:\\n\n * This instruction selects individual bits from Rs1 or Rs2, based on the bit mask value in\n * Rc. If a bit in Rc is 1, the corresponding bit is from Rs1; otherwise, the corresponding bit is from Rs2.\n * The selection results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd[x] = Rc[x]? Rs1[x] : Rs2[x];\n * for RV32, x=31...0\n * for RV64, x=63...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\param [in]  c    unsigned long type of value stored in c\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_BPICK(unsigned long a, unsigned long b, unsigned long c)\n{\n    register unsigned long result;\n    __ASM volatile(\"bpick %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(a), \"r\"(b), \"r\"(c));\n    return result;\n}\n/* ===== Inline Function End for 3.7. BPICK ===== */\n\n/* ===== Inline Function Start for 3.8. CLROV ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_OV_FLAG_SC\n * \\brief CLROV (Clear OV flag)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * CLROV # pseudo mnemonic\n * ~~~\n *\n * **Purpose**:\\n\n * This pseudo instruction is an alias to `CSRRCI x0, ucode, 1` instruction.\n *\n *\n */\n__STATIC_FORCEINLINE void __RV_CLROV(void)\n{\n    __ASM volatile(\"clrov \");\n}\n/* ===== Inline Function End for 3.8. CLROV ===== */\n\n/* ===== Inline Function Start for 3.9. CLRS8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief CLRS8 (SIMD 8-bit Count Leading Redundant Sign)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLRS8 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of redundant sign bits of the 8-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the bits next to the sign bits of the 8-bit elements of Rs1, this instruction\n * counts the number of redundant sign bits and writes the result to the corresponding 8-bit elements\n * of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.B[x];\n * cnt[x] = 0;\n * for (i = 6 to 0) {\n *   if (snum[x](i) == snum[x](7)) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.B[x] = cnt[x];\n * for RV32: x=3...0\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLRS8(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"clrs8 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.9. CLRS8 ===== */\n\n/* ===== Inline Function Start for 3.10. CLRS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief CLRS16 (SIMD 16-bit Count Leading Redundant Sign)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLRS16 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of redundant sign bits of the 16-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the bits next to the sign bits of the 16-bit elements of Rs1, this\n * instruction counts the number of redundant sign bits and writes the result to the corresponding 16-\n * bit elements of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.H[x];\n * cnt[x] = 0;\n * for (i = 14 to 0) {\n *   if (snum[x](i) == snum[x](15)) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.H[x] = cnt[x];\n * for RV32: x=1...0\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLRS16(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"clrs16 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.10. CLRS16 ===== */\n\n/* ===== Inline Function Start for 3.11. CLRS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_MISC\n * \\brief CLRS32 (SIMD 32-bit Count Leading Redundant Sign)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLRS32 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of redundant sign bits of the 32-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the bits next to the sign bits of the 32-bit elements of Rs1, this\n * instruction counts the number of redundant sign bits and writes the result to the corresponding 32-\n * bit elements of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.W[x];\n * cnt[x] = 0;\n * for (i = 30 to 0) {\n *   if (snum[x](i) == snum[x](31)) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.W[x] = cnt[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLRS32(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"clrs32 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.11. CLRS32 ===== */\n\n/* ===== Inline Function Start for 3.12. CLO8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief CLO8 (SIMD 8-bit Count Leading One)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLO8 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of leading one bits of the 8-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the most significant bits of the 8-bit elements of Rs1, this instruction\n * counts the number of leading one bits and writes the results to the corresponding 8-bit elements of\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.B[x];\n * cnt[x] = 0;\n *   for (i = 7 to 0) {\n *   if (snum[x](i) == 1) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.B[x] = cnt[x];\n * for RV32: x=3...0\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLO8(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"clo8 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.12. CLO8 ===== */\n\n/* ===== Inline Function Start for 3.13. CLO16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief CLO16 (SIMD 16-bit Count Leading One)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLO16 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of leading one bits of the 16-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the most significant bits of the 16-bit elements of Rs1, this instruction\n * counts the number of leading one bits and writes the results to the corresponding 16-bit elements\n * of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.H[x];\n * cnt[x] = 0;\n * for (i = 15 to 0) {\n *   if (snum[x](i) == 1) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.H[x] = cnt[x];\n * for RV32: x=1...0\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLO16(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"clo16 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.13. CLO16 ===== */\n\n/* ===== Inline Function Start for 3.14. CLO32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_MISC\n * \\brief CLO32 (SIMD 32-bit Count Leading One)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLO32 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of leading one bits of the 32-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the most significant bits of the 32-bit elements of Rs1, this instruction\n * counts the number of leading one bits and writes the results to the corresponding 32-bit elements\n * of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.W[x];\n * cnt[x] = 0;\n * for (i = 31 to 0) {\n *   if (snum[x](i) == 1) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.W[x] = cnt[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLO32(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"clo32 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.14. CLO32 ===== */\n\n/* ===== Inline Function Start for 3.15. CLZ8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief CLZ8 (SIMD 8-bit Count Leading Zero)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLZ8 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of leading zero bits of the 8-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the most significant bits of the 8-bit elements of Rs1, this instruction\n * counts the number of leading zero bits and writes the results to the corresponding 8-bit elements of\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.B[x];\n * cnt[x] = 0;\n * for (i = 7 to 0) {\n *   if (snum[x](i) == 0) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.B[x] = cnt[x];\n * for RV32: x=3...0\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLZ8(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"clz8 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.15. CLZ8 ===== */\n\n/* ===== Inline Function Start for 3.16. CLZ16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief CLZ16 (SIMD 16-bit Count Leading Zero)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLZ16 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of leading zero bits of the 16-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the most significant bits of the 16-bit elements of Rs1, this instruction\n * counts the number of leading zero bits and writes the results to the corresponding 16-bit elements\n * of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.H[x];\n * cnt[x] = 0;\n * for (i = 15 to 0) {\n *   if (snum[x](i) == 0) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.H[x] = cnt[x];\n * for RV32: x=1...0\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLZ16(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"clz16 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.16. CLZ16 ===== */\n\n/* ===== Inline Function Start for 3.17. CLZ32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_MISC\n * \\brief CLZ32 (SIMD 32-bit Count Leading Zero)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CLZ32 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Count the number of leading zero bits of the 32-bit elements of a general register.\n *\n * **Description**:\\n\n * Starting from the most significant bits of the 32-bit elements of Rs1, this instruction\n * counts the number of leading zero bits and writes the results to the corresponding 32-bit elements\n * of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * snum[x] = Rs1.W[x];\n * cnt[x] = 0;\n * for (i = 31 to 0) {\n *   if (snum[x](i) == 0) {\n *     cnt[x] = cnt[x] + 1;\n *   } else {\n *     break;\n *   }\n * }\n * Rd.W[x] = cnt[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CLZ32(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"clz32 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.17. CLZ32 ===== */\n\n/* ===== Inline Function Start for 3.18. CMPEQ8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_CMP\n * \\brief CMPEQ8 (SIMD 8-bit Integer Compare Equal)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CMPEQ8 Rs, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit integer elements equal comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit integer elements in Rs1 with the 8-bit integer\n * elements in Rs2 to see if they are equal. If they are equal, the result is 0xFF; otherwise, the result is\n * 0x0. The 8-bit element comparison results are written to Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned numbers.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] == Rs2.B[x])? 0xff : 0x0;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CMPEQ8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"cmpeq8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.18. CMPEQ8 ===== */\n\n/* ===== Inline Function Start for 3.19. CMPEQ16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_CMP\n * \\brief CMPEQ16 (SIMD 16-bit Integer Compare Equal)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CMPEQ16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit integer elements equal comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit integer elements in Rs1 with the 16-bit integer\n * elements in Rs2 to see if they are equal. If they are equal, the result is 0xFFFF; otherwise, the result\n * is 0x0. The 16-bit element comparison results are written to Rt.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned numbers.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] == Rs2.H[x])? 0xffff : 0x0;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CMPEQ16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"cmpeq16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.19. CMPEQ16 ===== */\n\n/* ===== Inline Function Start for 3.20. CRAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief CRAS16 (SIMD 16-bit Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CRAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit integer element addition and 16-bit integer element subtraction in a 32-bit\n * chunk simultaneously. Operands are from crossed positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit integer element in [31:16] of 32-bit chunks in Rs1 with\n * the 16-bit integer element in [15:0] of 32-bit chunks in Rs2, and writes the result to [31:16] of 32-bit\n * chunks in Rd; at the same time, it subtracts the 16-bit integer element in [31:16] of 32-bit chunks in\n * Rs2 from the 16-bit integer element in [15:0] of 32-bit chunks, and writes the result to [15:0] of 32-\n * bit chunks in Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned operations.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = Rs1.W[x][31:16] + Rs2.W[x][15:0];\n * Rd.W[x][15:0] = Rs1.W[x][15:0] - Rs2.W[x][31:16];\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CRAS16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"cras16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.20. CRAS16 ===== */\n\n/* ===== Inline Function Start for 3.21. CRSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief CRSA16 (SIMD 16-bit Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * CRSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit integer element subtraction and 16-bit integer element addition in a 32-bit\n * chunk simultaneously. Operands are from crossed positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit integer element in [15:0] of 32-bit chunks in Rs2\n * from the 16-bit integer element in [31:16] of 32-bit chunks in Rs1, and writes the result to [31:16] of\n * 32-bit chunks in Rd; at the same time, it adds the 16-bit integer element in [31:16] of 32-bit chunks\n * in Rs2 with the 16-bit integer element in [15:0] of 32-bit chunks in Rs1, and writes the result to\n * [15:0] of 32-bit chunks in Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned operations.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = Rs1.W[x][31:16] - Rs2.W[x][15:0];\n * Rd.W[x][15:0] = Rs1.W[x][15:0] + Rs2.W[x][31:16];\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CRSA16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"crsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.21. CRSA16 ===== */\n\n/* ===== Inline Function Start for 3.22. INSB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief INSB (Insert Byte)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * (RV32) INSB Rd, Rs1, imm[1:0]\n * (RV64) INSB Rd, Rs1, imm[2:0]\n * ~~~\n *\n * **Purpose**:\\n\n * Insert byte 0 of a 32-bit or 64-bit register into one of the byte elements of another register.\n *\n * **Description**:\\n\n * This instruction inserts byte 0 of Rs1 into byte `imm[1:0]` (RV32) or `imm[2:0]` (RV64)\n * of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * bpos = imm[1:0]; (RV32)\n * bpos = imm[2:0]; (RV64)\n * Rd.B[bpos] = Rs1.B[0]\n * ~~~\n *\n * \\param [in]  t    unsigned long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_INSB(t, a, b)    \\\n    ({    \\\n        register unsigned long __t = (unsigned long)(t);    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"insb %0, %1, %2\" : \"+r\"(__t) : \"r\"(__a), \"K\"(b));    \\\n        __t;    \\\n    })\n/* ===== Inline Function End for 3.22. INSB ===== */\n\n/* ===== Inline Function Start for 3.23. KABS8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief KABS8 (SIMD 8-bit Saturating Absolute)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KABS8 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Get the absolute value of 8-bit signed integer elements simultaneously.\n *\n * **Description**:\\n\n * This instruction calculates the absolute value of 8-bit signed integer elements stored\n * in Rs1 and writes the element results to Rd. If the input number is 0x80, this instruction generates\n * 0x7f as the output and sets the OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.B[x];\n * if (src == 0x80) {\n *   src = 0x7f;\n *   OV = 1;\n * } else if (src[7] == 1)\n *   src = -src;\n * }\n * Rd.B[x] = src;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KABS8(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"kabs8 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.23. KABS8 ===== */\n\n/* ===== Inline Function Start for 3.24. KABS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief KABS16 (SIMD 16-bit Saturating Absolute)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KABS16 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Get the absolute value of 16-bit signed integer elements simultaneously.\n *\n * **Description**:\\n\n * This instruction calculates the absolute value of 16-bit signed integer elements stored\n * in Rs1 and writes the element results to Rd. If the input number is 0x8000, this instruction\n * generates 0x7fff as the output and sets the OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.H[x];\n * if (src == 0x8000) {\n *   src = 0x7fff;\n *   OV = 1;\n * } else if (src[15] == 1)\n *   src = -src;\n * }\n * Rd.H[x] = src;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KABS16(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"kabs16 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.24. KABS16 ===== */\n\n/* ===== Inline Function Start for 3.25. KABSW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KABSW (Scalar 32-bit Absolute Value with Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KABSW Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Get the absolute value of a signed 32-bit integer in a general register.\n *\n * **Description**:\\n\n * This instruction calculates the absolute value of a signed 32-bit integer stored in Rs1.\n * The result is sign-extended (for RV64) and written to Rd. This instruction with the minimum\n * negative integer input of 0x80000000 will produce a saturated output of maximum positive integer\n * of 0x7fffffff and the OV flag will be set to 1.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs1.W[0] >= 0) {\n *   res = Rs1.W[0];\n * } else {\n *   If (Rs1.W[0] == 0x80000000) {\n *     res = 0x7fffffff;\n *     OV = 1;\n *   } else {\n *     res = -Rs1.W[0];\n *   }\n * }\n * Rd = SE32(res);\n * ~~~\n *\n * \\param [in]  a    signed long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KABSW(signed long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"kabsw %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.25. KABSW ===== */\n\n/* ===== Inline Function Start for 3.26. KADD8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief KADD8 (SIMD 8-bit Signed Saturating Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KADD8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed integer element saturating additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 8-bit signed integer elements in Rs1 with the 8-bit signed\n * integer elements in Rs2. If any of the results are beyond the Q7 number range (-2^7 <= Q7 <= 2^7-1), they\n * are saturated to the range and the OV bit is set to 1. The saturated results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.B[x] + Rs2.B[x];\n * if (res[x] > 127) {\n *   res[x] = 127;\n *   OV = 1;\n * } else if (res[x] < -128) {\n *   res[x] = -128;\n *   OV = 1;\n * }\n * Rd.B[x] = res[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KADD8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.26. KADD8 ===== */\n\n/* ===== Inline Function Start for 3.27. KADD16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief KADD16 (SIMD 16-bit Signed Saturating Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KADD16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element saturating additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit signed integer elements in Rs1 with the 16-bit signed\n * integer elements in Rs2. If any of the results are beyond the Q15 number range (-2^15 <= Q15 <= 2^15-1),\n * they are saturated to the range and the OV bit is set to 1. The saturated results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.H[x] + Rs2.H[x];\n * if (res[x] > 32767) {\n *   res[x] = 32767;\n *   OV = 1;\n * } else if (res[x] < -32768) {\n *   res[x] = -32768;\n *   OV = 1;\n * }\n * Rd.H[x] = res[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KADD16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.27. KADD16 ===== */\n\n/* ===== Inline Function Start for 3.28. KADD64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief KADD64 (64-bit Signed Saturating Addition)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * KADD64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add two 64-bit signed integers. The result is saturated to the Q63 range.\n *\n * **RV32 Description**:\\n\n * This instruction adds the 64-bit signed integer of an even/odd pair of registers\n * specified by Rs1(4,1) with the 64-bit signed integer of an even/odd pair of registers specified by\n * Rs2(4,1). If the 64-bit result is beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the\n * range and the OV bit is set to 1. The saturated result is written to an even/odd pair of registers\n * specified by Rd(4,1).\n * Rx(4,1), i.e., value d, determines the even/odd pair group of two registers. Specifically, the register\n * pair includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction adds the 64-bit signed integer in Rs1 with the 64-bit signed\n * integer in Rs2. If the result is beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the\n * range and the OV bit is set to 1. The saturated result is written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n *  t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n *  a_L = CONCAT(Rs1(4,1),1'b0); a_H = CONCAT(Rs1(4,1),1'b1);\n *  b_L = CONCAT(Rs2(4,1),1'b0); b_H = CONCAT(Rs2(4,1),1'b1);\n *  result = R[a_H].R[a_L] + R[b_H].R[b_L];\n *  if (result > (2^63)-1) {\n *    result = (2^63)-1; OV = 1;\n *  } else if (result < -2^63) {\n *    result = -2^63; OV = 1;\n *  }\n *  R[t_H].R[t_L] = result;\n * RV64:\n *  result = Rs1 + Rs2;\n *  if (result > (2^63)-1) {\n *    result = (2^63)-1; OV = 1;\n *  } else if (result < -2^63) {\n *    result = -2^63; OV = 1;\n *  }\n *  Rd = result;\n * ~~~\n *\n * \\param [in]  a    long long type of value stored in a\n * \\param [in]  b    long long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_KADD64(long long a, long long b)\n{\n    register long long result;\n    __ASM volatile(\"kadd64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.28. KADD64 ===== */\n\n/* ===== Inline Function Start for 3.29. KADDH ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q15_SAT_ALU\n * \\brief KADDH (Signed Addition with Q15 Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KADDH Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add the signed lower 32-bit content of two registers with Q15 saturation.\n *\n * **Description**:\\n\n * The signed lower 32-bit content of Rs1 is added with the signed lower 32-bit content of\n * Rs2. And the result is saturated to the 16-bit signed integer range of [-2^15, 2^15-1] and then sign-\n * extended and written to Rd. If saturation happens, this instruction sets the OV flag.\n *\n * **Operations**:\\n\n * ~~~\n * tmp = Rs1.W[0] + Rs2.W[0];\n * if (tmp > 32767) {\n *   res = 32767;\n *   OV = 1;\n * } else if (tmp < -32768) {\n *   res = -32768;\n *   OV = 1\n * } else {\n *   res = tmp;\n * }\n * Rd = SE(tmp[15:0]);\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KADDH(int a, int b)\n{\n    register long result;\n    __ASM volatile(\"kaddh %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.29. KADDH ===== */\n\n/* ===== Inline Function Start for 3.30. KADDW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KADDW (Signed Addition with Q31 Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KADDW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add the lower 32-bit signed content of two registers with Q31 saturation.\n *\n * **Description**:\\n\n * The lower 32-bit signed content of Rs1 is added with the lower 32-bit signed content of\n * Rs2. And the result is saturated to the 32-bit signed integer range of [-2^31, 2^31-1] and then sign-\n * extended and written to Rd. If saturation happens, this instruction sets the OV flag.\n *\n * **Operations**:\\n\n * ~~~\n * tmp = Rs1.W[0] + Rs2.W[0];\n * if (tmp > (2^31)-1) {\n *   res = (2^31)-1;\n *   OV = 1;\n * } else if (tmp < -2^31) {\n *   res = -2^31;\n *   OV = 1\n * } else {\n *   res = tmp;\n * }\n * Rd = res[31:0]; // RV32\n * Rd = SE(res[31:0]) // RV64\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KADDW(int a, int b)\n{\n    register long result;\n    __ASM volatile(\"kaddw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.30. KADDW ===== */\n\n/* ===== Inline Function Start for 3.31. KCRAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief KCRAS16 (SIMD 16-bit Signed Saturating Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KCRAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element saturating addition and 16-bit signed integer element\n * saturating subtraction in a 32-bit chunk simultaneously. Operands are from crossed positions in 32-\n * bit chunks.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit signed integer element in [31:16] of 32-bit chunks in\n * Rs1 with the 16-bit signed integer element in [15:0] of 32-bit chunks in Rs2; at the same time, it\n * subtracts the 16-bit signed integer element in [31:16] of 32-bit chunks in Rs2 from the 16-bit signed\n * integer element in [15:0] of 32-bit chunks in Rs1. If any of the results are beyond the Q15 number\n * range (-2^15 <= Q15 <= 2^15-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to [31:16] of 32-bit chunks in Rd for addition and [15:0] of 32-bit chunks in Rd for\n * subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[x][31:16] + Rs2.W[x][15:0];\n * res2 = Rs1.W[x][15:0] - Rs2.W[x][31:16];\n * for (res in [res1, res2]) {\n *   if (res > (2^15)-1) {\n *     res = (2^15)-1;\n *     OV = 1;\n *   } else if (res < -2^15) {\n *     res = -2^15;\n *     OV = 1;\n *   }\n * }\n * Rd.W[x][31:16] = res1;\n * Rd.W[x][15:0] = res2;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KCRAS16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kcras16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.31. KCRAS16 ===== */\n\n/* ===== Inline Function Start for 3.32. KCRSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief KCRSA16 (SIMD 16-bit Signed Saturating Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KCRSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element saturating subtraction and 16-bit signed integer element\n * saturating addition in a 32-bit chunk simultaneously. Operands are from crossed positions in 32-bit\n * chunks.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit signed integer element in [15:0] of 32-bit chunks\n * in Rs2 from the 16-bit signed integer element in [31:16] of 32-bit chunks in Rs1; at the same time, it\n * adds the 16-bit signed integer element in [31:16] of 32-bit chunks in Rs2 with the 16-bit signed\n * integer element in [15:0] of 32-bit chunks in Rs1. If any of the results are beyond the Q15 number\n * range (-2^15 <= Q15 <= 2^15-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to [31:16] of 32-bit chunks in Rd for subtraction and [15:0] of 32-bit chunks in Rd\n * for addition.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[x][31:16] - Rs2.W[x][15:0];\n * res2 = Rs1.W[x][15:0] + Rs2.W[x][31:16];\n * for (res in [res1, res2]) {\n *   if (res > (2^15)-1) {\n *     res = (2^15)-1;\n *     OV = 1;\n *   } else if (res < -2^15) {\n *     res = -2^15;\n *     OV = 1;\n *   }\n * }\n * Rd.W[x][31:16] = res1;\n * Rd.W[x][15:0] = res2;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KCRSA16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kcrsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.32. KCRSA16 ===== */\n\n/* ===== Inline Function Start for 3.33.1. KDMBB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KDMBB (Signed Saturating Double Multiply B16 x B16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KDMxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then double and saturate the Q31 result. The result is\n * written into the destination register for RV32 or sign-extended to 64-bits and written into the\n * destination register for RV64. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then\n * doubled and saturated into a Q31 value. The Q31 value is then written into Rd (sign-extended in\n * RV64). When both the two Q15 inputs are 0x8000, saturation will happen. The result will be\n * saturated to 0x7FFFFFFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KDMBB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KDMBT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KDMTT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult = aop * bop;\n *   resQ31 = Mresult << 1;\n *   Rd = resQ31; // RV32\n *   Rd = SE(resQ31); // RV64\n * } else {\n *   resQ31 = 0x7FFFFFFF;\n *   Rd = resQ31; // RV32\n *   Rd = SE(resQ31); // RV64\n *   OV = 1;\n * }\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KDMBB(unsigned int a, unsigned int b)\n{\n    register long result;\n    __ASM volatile(\"kdmbb %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.33.1. KDMBB ===== */\n\n/* ===== Inline Function Start for 3.33.2. KDMBT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KDMBT (Signed Saturating Double Multiply B16 x T16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KDMxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then double and saturate the Q31 result. The result is\n * written into the destination register for RV32 or sign-extended to 64-bits and written into the\n * destination register for RV64. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then\n * doubled and saturated into a Q31 value. The Q31 value is then written into Rd (sign-extended in\n * RV64). When both the two Q15 inputs are 0x8000, saturation will happen. The result will be\n * saturated to 0x7FFFFFFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KDMBB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KDMBT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KDMTT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult = aop * bop;\n *   resQ31 = Mresult << 1;\n *   Rd = resQ31; // RV32\n *   Rd = SE(resQ31); // RV64\n * } else {\n *   resQ31 = 0x7FFFFFFF;\n *   Rd = resQ31; // RV32\n *   Rd = SE(resQ31); // RV64\n *   OV = 1;\n * }\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KDMBT(unsigned int a, unsigned int b)\n{\n    register long result;\n    __ASM volatile(\"kdmbt %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.33.2. KDMBT ===== */\n\n/* ===== Inline Function Start for 3.33.3. KDMTT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KDMTT (Signed Saturating Double Multiply T16 x T16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KDMxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then double and saturate the Q31 result. The result is\n * written into the destination register for RV32 or sign-extended to 64-bits and written into the\n * destination register for RV64. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then\n * doubled and saturated into a Q31 value. The Q31 value is then written into Rd (sign-extended in\n * RV64). When both the two Q15 inputs are 0x8000, saturation will happen. The result will be\n * saturated to 0x7FFFFFFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KDMBB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KDMBT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KDMTT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult = aop * bop;\n *   resQ31 = Mresult << 1;\n *   Rd = resQ31; // RV32\n *   Rd = SE(resQ31); // RV64\n * } else {\n *   resQ31 = 0x7FFFFFFF;\n *   Rd = resQ31; // RV32\n *   Rd = SE(resQ31); // RV64\n *   OV = 1;\n * }\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KDMTT(unsigned int a, unsigned int b)\n{\n    register long result;\n    __ASM volatile(\"kdmtt %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.33.3. KDMTT ===== */\n\n/* ===== Inline Function Start for 3.34.1. KDMABB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KDMABB (Signed Saturating Double Multiply Addition B16 x B16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KDMAxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then double and saturate the Q31 result, add the result\n * with the sign-extended lower 32-bit chunk destination register and write the saturated addition\n * result into the destination register. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then\n * doubled and saturated into a Q31 value. The Q31 value is then added with the content of Rd. If the\n * addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and\n * the OV flag is set to 1. The result after saturation is written to Rd.\n * When both the two Q15 inputs are 0x8000, saturation will happen and the overflow flag OV will be\n * set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KDMABB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KDMABT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KDMATT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult = aop * bop;\n *   resQ31 = Mresult << 1;\n * } else {\n *   resQ31 = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * resadd = Rd + resQ31; // RV32\n * resadd = Rd.W[0] + resQ31; // RV64\n * if (resadd > (2^31)-1) {\n *   resadd = (2^31)-1;\n *   OV = 1;\n * } else if (resadd < -2^31) {\n *   resadd = -2^31;\n *   OV = 1;\n * }\n * Rd = resadd; // RV32\n * Rd = SE(resadd); // RV64\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KDMABB(long t, unsigned int a, unsigned int b)\n{\n    __ASM volatile(\"kdmabb %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.34.1. KDMABB ===== */\n\n/* ===== Inline Function Start for 3.34.2. KDMABT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KDMABT (Signed Saturating Double Multiply Addition B16 x T16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KDMAxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then double and saturate the Q31 result, add the result\n * with the sign-extended lower 32-bit chunk destination register and write the saturated addition\n * result into the destination register. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then\n * doubled and saturated into a Q31 value. The Q31 value is then added with the content of Rd. If the\n * addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and\n * the OV flag is set to 1. The result after saturation is written to Rd.\n * When both the two Q15 inputs are 0x8000, saturation will happen and the overflow flag OV will be\n * set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KDMABB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KDMABT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KDMATT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult = aop * bop;\n *   resQ31 = Mresult << 1;\n * } else {\n *   resQ31 = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * resadd = Rd + resQ31; // RV32\n * resadd = Rd.W[0] + resQ31; // RV64\n * if (resadd > (2^31)-1) {\n *   resadd = (2^31)-1;\n *   OV = 1;\n * } else if (resadd < -2^31) {\n *   resadd = -2^31;\n *   OV = 1;\n * }\n * Rd = resadd; // RV32\n * Rd = SE(resadd); // RV64\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KDMABT(long t, unsigned int a, unsigned int b)\n{\n    __ASM volatile(\"kdmabt %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.34.2. KDMABT ===== */\n\n/* ===== Inline Function Start for 3.34.3. KDMATT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KDMATT (Signed Saturating Double Multiply Addition T16 x T16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KDMAxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then double and saturate the Q31 result, add the result\n * with the sign-extended lower 32-bit chunk destination register and write the saturated addition\n * result into the destination register. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then\n * doubled and saturated into a Q31 value. The Q31 value is then added with the content of Rd. If the\n * addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and\n * the OV flag is set to 1. The result after saturation is written to Rd.\n * When both the two Q15 inputs are 0x8000, saturation will happen and the overflow flag OV will be\n * set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KDMABB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KDMABT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KDMATT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult = aop * bop;\n *   resQ31 = Mresult << 1;\n * } else {\n *   resQ31 = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * resadd = Rd + resQ31; // RV32\n * resadd = Rd.W[0] + resQ31; // RV64\n * if (resadd > (2^31)-1) {\n *   resadd = (2^31)-1;\n *   OV = 1;\n * } else if (resadd < -2^31) {\n *   resadd = -2^31;\n *   OV = 1;\n * }\n * Rd = resadd; // RV32\n * Rd = SE(resadd); // RV64\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KDMATT(long t, unsigned int a, unsigned int b)\n{\n    __ASM volatile(\"kdmatt %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.34.3. KDMATT ===== */\n\n/* ===== Inline Function Start for 3.35.1. KHM8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MULTIPLY\n * \\brief KHM8 (SIMD Signed Saturating Q7 Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KHM8 Rd, Rs1, Rs2\n * KHMX8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do Q7xQ7 element multiplications simultaneously. The Q14 results are then reduced to Q7\n * numbers again.\n *\n * **Description**:\\n\n * For the `KHM8` instruction, multiply the top 8-bit Q7 content of 16-bit chunks in Rs1\n * with the top 8-bit Q7 content of 16-bit chunks in Rs2. At the same time, multiply the bottom 8-bit Q7\n * content of 16-bit chunks in Rs1 with the bottom 8-bit Q7 content of 16-bit chunks in Rs2.\n * For the `KHMX16` instruction, multiply the top 8-bit Q7 content of 16-bit chunks in Rs1 with the\n * bottom 8-bit Q7 content of 16-bit chunks in Rs2. At the same time, multiply the bottom 8-bit Q7\n * content of 16-bit chunks in Rs1 with the top 8-bit Q7 content of 16-bit chunks in Rs2.\n * The Q14 results are then right-shifted 7-bits and saturated into Q7 values. The Q7 results are then\n * written into Rd. When both the two Q7 inputs of a multiplication are 0x80, saturation will happen.\n * The result will be saturated to 0x7F and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * if (is `KHM8`) {\n *   op1t = Rs1.B[x+1]; op2t = Rs2.B[x+1]; // top\n *   op1b = Rs1.B[x]; op2b = Rs2.B[x]; // bottom\n * } else if (is `KHMX8`) {\n *   op1t = Rs1.H[x+1]; op2t = Rs2.H[x]; // Rs1 top\n *   op1b = Rs1.H[x]; op2b = Rs2.H[x+1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   if (0x80 != aop | 0x80 != bop) {\n *     res = (aop s* bop) >> 7;\n *   } else {\n *     res= 0x7F;\n *     OV = 1;\n *   }\n * }\n * Rd.H[x/2] = concat(rest, resb);\n * for RV32, x=0,2\n * for RV64, x=0,2,4,6\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KHM8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"khm8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.35.1. KHM8 ===== */\n\n/* ===== Inline Function Start for 3.35.2. KHMX8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MULTIPLY\n * \\brief KHMX8 (SIMD Signed Saturating Crossed Q7 Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KHM8 Rd, Rs1, Rs2\n * KHMX8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do Q7xQ7 element multiplications simultaneously. The Q14 results are then reduced to Q7\n * numbers again.\n *\n * **Description**:\\n\n * For the `KHM8` instruction, multiply the top 8-bit Q7 content of 16-bit chunks in Rs1\n * with the top 8-bit Q7 content of 16-bit chunks in Rs2. At the same time, multiply the bottom 8-bit Q7\n * content of 16-bit chunks in Rs1 with the bottom 8-bit Q7 content of 16-bit chunks in Rs2.\n * For the `KHMX16` instruction, multiply the top 8-bit Q7 content of 16-bit chunks in Rs1 with the\n * bottom 8-bit Q7 content of 16-bit chunks in Rs2. At the same time, multiply the bottom 8-bit Q7\n * content of 16-bit chunks in Rs1 with the top 8-bit Q7 content of 16-bit chunks in Rs2.\n * The Q14 results are then right-shifted 7-bits and saturated into Q7 values. The Q7 results are then\n * written into Rd. When both the two Q7 inputs of a multiplication are 0x80, saturation will happen.\n * The result will be saturated to 0x7F and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * if (is `KHM8`) {\n *   op1t = Rs1.B[x+1]; op2t = Rs2.B[x+1]; // top\n *   op1b = Rs1.B[x]; op2b = Rs2.B[x]; // bottom\n * } else if (is `KHMX8`) {\n *   op1t = Rs1.H[x+1]; op2t = Rs2.H[x]; // Rs1 top\n *   op1b = Rs1.H[x]; op2b = Rs2.H[x+1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   if (0x80 != aop | 0x80 != bop) {\n *     res = (aop s* bop) >> 7;\n *   } else {\n *     res= 0x7F;\n *     OV = 1;\n *   }\n * }\n * Rd.H[x/2] = concat(rest, resb);\n * for RV32, x=0,2\n * for RV64, x=0,2,4,6\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KHMX8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"khmx8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.35.2. KHMX8 ===== */\n\n/* ===== Inline Function Start for 3.36.1. KHM16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MULTIPLY\n * \\brief KHM16 (SIMD Signed Saturating Q15 Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KHM16 Rd, Rs1, Rs2\n * KHMX16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do Q15xQ15 element multiplications simultaneously. The Q30 results are then reduced to\n * Q15 numbers again.\n *\n * **Description**:\\n\n * For the `KHM16` instruction, multiply the top 16-bit Q15 content of 32-bit chunks in\n * Rs1 with the top 16-bit Q15 content of 32-bit chunks in Rs2. At the same time, multiply the bottom\n * 16-bit Q15 content of 32-bit chunks in Rs1 with the bottom 16-bit Q15 content of 32-bit chunks in\n * Rs2.\n * For the `KHMX16` instruction, multiply the top 16-bit Q15 content of 32-bit chunks in Rs1 with the\n * bottom 16-bit Q15 content of 32-bit chunks in Rs2. At the same time, multiply the bottom 16-bit Q15\n * content of 32-bit chunks in Rs1 with the top 16-bit Q15 content of 32-bit chunks in Rs2.\n * The Q30 results are then right-shifted 15-bits and saturated into Q15 values. The Q15 results are\n * then written into Rd. When both the two Q15 inputs of a multiplication are 0x8000, saturation will\n * happen. The result will be saturated to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * if (is `KHM16`) {\n *   op1t = Rs1.H[x+1]; op2t = Rs2.H[x+1]; // top\n *   op1b = Rs1.H[x]; op2b = Rs2.H[x]; // bottom\n * } else if (is `KHMX16`) {\n *   op1t = Rs1.H[x+1]; op2t = Rs2.H[x]; // Rs1 top\n *   op1b = Rs1.H[x]; op2b = Rs2.H[x+1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   if (0x8000 != aop | 0x8000 != bop) {\n *     res = (aop s* bop) >> 15;\n *   } else {\n *     res= 0x7FFF;\n *     OV = 1;\n *   }\n * }\n * Rd.W[x/2] = concat(rest, resb);\n * for RV32: x=0\n * for RV64: x=0,2\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KHM16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"khm16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.36.1. KHM16 ===== */\n\n/* ===== Inline Function Start for 3.36.2. KHMX16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MULTIPLY\n * \\brief KHMX16 (SIMD Signed Saturating Crossed Q15 Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KHM16 Rd, Rs1, Rs2\n * KHMX16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do Q15xQ15 element multiplications simultaneously. The Q30 results are then reduced to\n * Q15 numbers again.\n *\n * **Description**:\\n\n * For the `KHM16` instruction, multiply the top 16-bit Q15 content of 32-bit chunks in\n * Rs1 with the top 16-bit Q15 content of 32-bit chunks in Rs2. At the same time, multiply the bottom\n * 16-bit Q15 content of 32-bit chunks in Rs1 with the bottom 16-bit Q15 content of 32-bit chunks in\n * Rs2.\n * For the `KHMX16` instruction, multiply the top 16-bit Q15 content of 32-bit chunks in Rs1 with the\n * bottom 16-bit Q15 content of 32-bit chunks in Rs2. At the same time, multiply the bottom 16-bit Q15\n * content of 32-bit chunks in Rs1 with the top 16-bit Q15 content of 32-bit chunks in Rs2.\n * The Q30 results are then right-shifted 15-bits and saturated into Q15 values. The Q15 results are\n * then written into Rd. When both the two Q15 inputs of a multiplication are 0x8000, saturation will\n * happen. The result will be saturated to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * if (is `KHM16`) {\n *   op1t = Rs1.H[x+1]; op2t = Rs2.H[x+1]; // top\n *   op1b = Rs1.H[x]; op2b = Rs2.H[x]; // bottom\n * } else if (is `KHMX16`) {\n *   op1t = Rs1.H[x+1]; op2t = Rs2.H[x]; // Rs1 top\n *   op1b = Rs1.H[x]; op2b = Rs2.H[x+1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   if (0x8000 != aop | 0x8000 != bop) {\n *     res = (aop s* bop) >> 15;\n *   } else {\n *     res= 0x7FFF;\n *     OV = 1;\n *   }\n * }\n * Rd.W[x/2] = concat(rest, resb);\n * for RV32: x=0\n * for RV64: x=0,2\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KHMX16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"khmx16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.36.2. KHMX16 ===== */\n\n/* ===== Inline Function Start for 3.37.1. KHMBB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q15_SAT_ALU\n * \\brief KHMBB (Signed Saturating Half Multiply B16 x B16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KHMxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 number contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then right-shift 15 bits to turn the Q30 result into a Q15\n * number again and saturate the Q15 result into the destination register. If saturation happens, an\n * overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then right-\n * shifted 15-bits and saturated into a Q15 value. The Q15 value is then sing-extended and written into\n * Rd. When both the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated\n * to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KHMBB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KHMBT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KHMTT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult[31:0] = aop * bop;\n *   res[15:0] = Mresult[30:15];\n * } else {\n *   res[15:0] = 0x7FFF;\n *   OV = 1;\n * }\n * Rd = SE32(res[15:0]); // Rv32\n * Rd = SE64(res[15:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KHMBB(unsigned int a, unsigned int b)\n{\n    register long result;\n    __ASM volatile(\"khmbb %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.37.1. KHMBB ===== */\n\n/* ===== Inline Function Start for 3.37.2. KHMBT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q15_SAT_ALU\n * \\brief KHMBT (Signed Saturating Half Multiply B16 x T16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KHMxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 number contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then right-shift 15 bits to turn the Q30 result into a Q15\n * number again and saturate the Q15 result into the destination register. If saturation happens, an\n * overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then right-\n * shifted 15-bits and saturated into a Q15 value. The Q15 value is then sing-extended and written into\n * Rd. When both the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated\n * to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KHMBB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KHMBT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KHMTT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult[31:0] = aop * bop;\n *   res[15:0] = Mresult[30:15];\n * } else {\n *   res[15:0] = 0x7FFF;\n *   OV = 1;\n * }\n * Rd = SE32(res[15:0]); // Rv32\n * Rd = SE64(res[15:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KHMBT(unsigned int a, unsigned int b)\n{\n    register long result;\n    __ASM volatile(\"khmbt %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.37.2. KHMBT ===== */\n\n/* ===== Inline Function Start for 3.37.3. KHMTT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q15_SAT_ALU\n * \\brief KHMTT (Signed Saturating Half Multiply T16 x T16)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KHMxy Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 number contents of two 16-bit data in the corresponding portion\n * of the lower 32-bit chunk in registers and then right-shift 15 bits to turn the Q30 result into a Q15\n * number again and saturate the Q15 result into the destination register. If saturation happens, an\n * overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs1 with\n * the top or bottom 16-bit Q15 content of the lower 32-bit portion in Rs2. The Q30 result is then right-\n * shifted 15-bits and saturated into a Q15 value. The Q15 value is then sing-extended and written into\n * Rd. When both the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated\n * to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * aop = Rs1.H[0]; bop = Rs2.H[0]; // KHMBB\n * aop = Rs1.H[0]; bop = Rs2.H[1]; // KHMBT\n * aop = Rs1.H[1]; bop = Rs2.H[1]; // KHMTT\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult[31:0] = aop * bop;\n *   res[15:0] = Mresult[30:15];\n * } else {\n *   res[15:0] = 0x7FFF;\n *   OV = 1;\n * }\n * Rd = SE32(res[15:0]); // Rv32\n * Rd = SE64(res[15:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KHMTT(unsigned int a, unsigned int b)\n{\n    register long result;\n    __ASM volatile(\"khmtt %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.37.3. KHMTT ===== */\n\n/* ===== Inline Function Start for 3.38.1. KMABB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMABB (SIMD Saturating Signed Multiply Bottom Halfs & Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMABB Rd, Rs1, Rs2\n * KMABT Rd, Rs1, Rs2\n * KMATT Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of 32-bit elements in a register with the 16-bit content\n * of 32-bit elements in another register and add the result to the content of 32-bit elements in the\n * third register. The addition result may be saturated and is written to the third register.\n * * KMABB: rd.W[x] + bottom*bottom (per 32-bit element)\n * * KMABT rd.W[x] + bottom*top (per 32-bit element)\n * * KMATT rd.W[x] + top*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMABB` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the bottom 16-bit content of 32-bit elements in Rs2.\n * For the `KMABT` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the top 16-bit content of 32-bit elements in Rs2.\n * For the `KMATT` instruction, it multiplies the top 16-bit content of 32-bit elements in Rs1 with the\n * top 16-bit content of 32-bit elements in Rs2.\n * The multiplication result is added to the content of 32-bit elements in Rd. If the addition result is\n * beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to\n * 1. The results after saturation are written to Rd. The 16-bit contents of Rs1 and Rs2 are treated as\n * signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[0]); // KMABB\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[1]); // KMABT\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[1]); // KMATT\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMABB(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmabb %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.38.1. KMABB ===== */\n\n/* ===== Inline Function Start for 3.38.2. KMABT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMABT (SIMD Saturating Signed Multiply Bottom & Top Halfs & Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMABB Rd, Rs1, Rs2\n * KMABT Rd, Rs1, Rs2\n * KMATT Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of 32-bit elements in a register with the 16-bit content\n * of 32-bit elements in another register and add the result to the content of 32-bit elements in the\n * third register. The addition result may be saturated and is written to the third register.\n * * KMABB: rd.W[x] + bottom*bottom (per 32-bit element)\n * * KMABT rd.W[x] + bottom*top (per 32-bit element)\n * * KMATT rd.W[x] + top*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMABB` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the bottom 16-bit content of 32-bit elements in Rs2.\n * For the `KMABT` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the top 16-bit content of 32-bit elements in Rs2.\n * For the `KMATT` instruction, it multiplies the top 16-bit content of 32-bit elements in Rs1 with the\n * top 16-bit content of 32-bit elements in Rs2.\n * The multiplication result is added to the content of 32-bit elements in Rd. If the addition result is\n * beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to\n * 1. The results after saturation are written to Rd. The 16-bit contents of Rs1 and Rs2 are treated as\n * signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[0]); // KMABB\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[1]); // KMABT\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[1]); // KMATT\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMABT(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmabt %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.38.2. KMABT ===== */\n\n/* ===== Inline Function Start for 3.38.3. KMATT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMATT (SIMD Saturating Signed Multiply Top Halfs & Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMABB Rd, Rs1, Rs2\n * KMABT Rd, Rs1, Rs2\n * KMATT Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of 32-bit elements in a register with the 16-bit content\n * of 32-bit elements in another register and add the result to the content of 32-bit elements in the\n * third register. The addition result may be saturated and is written to the third register.\n * * KMABB: rd.W[x] + bottom*bottom (per 32-bit element)\n * * KMABT rd.W[x] + bottom*top (per 32-bit element)\n * * KMATT rd.W[x] + top*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMABB` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the bottom 16-bit content of 32-bit elements in Rs2.\n * For the `KMABT` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the top 16-bit content of 32-bit elements in Rs2.\n * For the `KMATT` instruction, it multiplies the top 16-bit content of 32-bit elements in Rs1 with the\n * top 16-bit content of 32-bit elements in Rs2.\n * The multiplication result is added to the content of 32-bit elements in Rd. If the addition result is\n * beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to\n * 1. The results after saturation are written to Rd. The 16-bit contents of Rs1 and Rs2 are treated as\n * signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[0]); // KMABB\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[1]); // KMABT\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[1]); // KMATT\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMATT(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmatt %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.38.3. KMATT ===== */\n\n/* ===== Inline Function Start for 3.39.1. KMADA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMADA (SIMD Saturating Signed Multiply Two Halfs and Two Adds)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMADA Rd, Rs1, Rs2\n * KMAXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from 32-bit elements in two registers; and then adds\n * the two 32-bit results and 32-bit elements in a third register together. The addition result may be\n * saturated.\n * * KMADA: rd.W[x] + top*top + bottom*bottom (per 32-bit element)\n * * KMAXDA: rd.W[x] + top*bottom + bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMADA instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the bottom 16-bit content of 32-bit elements in Rs2 and then adds the result to the result of\n * multiplying the top 16-bit content of 32-bit elements in Rs1 with the top 16-bit content of 32-bit\n * elements in Rs2.\n * For the `KMAXDA` instruction, it multiplies the top 16-bit content of 32-bit elements in Rs1 with the\n * bottom 16-bit content of 32-bit elements in Rs2 and then adds the result to the result of multiplying\n * the bottom 16-bit content of 32-bit elements in Rs1 with the top 16-bit content of 32-bit elements in\n * Rs2.\n * The result is added to the content of 32-bit elements in Rd. If the addition result is beyond the Q31\n * number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to 1. The 32-bit\n * results after saturation are written to Rd. The 16-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * // KMADA\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[1]) + (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * // KMAXDA\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[0]) + (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n * OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMADA(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmada %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.39.1. KMADA ===== */\n\n/* ===== Inline Function Start for 3.39.2. KMAXDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMAXDA (SIMD Saturating Signed Crossed Multiply Two Halfs and Two Adds)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMADA Rd, Rs1, Rs2\n * KMAXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from 32-bit elements in two registers; and then adds\n * the two 32-bit results and 32-bit elements in a third register together. The addition result may be\n * saturated.\n * * KMADA: rd.W[x] + top*top + bottom*bottom (per 32-bit element)\n * * KMAXDA: rd.W[x] + top*bottom + bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMADA instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the bottom 16-bit content of 32-bit elements in Rs2 and then adds the result to the result of\n * multiplying the top 16-bit content of 32-bit elements in Rs1 with the top 16-bit content of 32-bit\n * elements in Rs2.\n * For the `KMAXDA` instruction, it multiplies the top 16-bit content of 32-bit elements in Rs1 with the\n * bottom 16-bit content of 32-bit elements in Rs2 and then adds the result to the result of multiplying\n * the bottom 16-bit content of 32-bit elements in Rs1 with the top 16-bit content of 32-bit elements in\n * Rs2.\n * The result is added to the content of 32-bit elements in Rd. If the addition result is beyond the Q31\n * number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to 1. The 32-bit\n * results after saturation are written to Rd. The 16-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * // KMADA\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[1]) + (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * // KMAXDA\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[0]) + (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n * OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMAXDA(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmaxda %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.39.2. KMAXDA ===== */\n\n/* ===== Inline Function Start for 3.40.1. KMADS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMADS (SIMD Saturating Signed Multiply Two Halfs & Subtract & Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMADS Rd, Rs1, Rs2\n * KMADRS Rd, Rs1, Rs2\n * KMAXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from 32-bit elements in two registers; and then\n * perform a subtraction operation between the two 32-bit results. Then add the subtraction result to\n * the corresponding 32-bit elements in a third register. The addition result may be saturated.\n * * KMADS: rd.W[x] + (top*top - bottom*bottom) (per 32-bit element)\n * * KMADRS: rd.W[x] + (bottom*bottom - top*top) (per 32-bit element)\n * * KMAXDS: rd.W[x] + (top*bottom - bottom*top) (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMADS` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the bottom 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the top 16-bit content of 32-bit elements in Rs1 with the top 16-bit content of 32-bit\n * elements in Rs2.\n * For the `KMADRS` instruction, it multiplies the top 16-bit content of 32-bit elements in Rs1 with the\n * top 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of 32-bit elements in Rs1 with the bottom 16-bit content of 32-\n * bit elements in Rs2.\n * For the `KMAXDS` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the top 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the top 16-bit content of 32-bit elements in Rs1 with the bottom 16-bit content of 32-bit\n * elements in Rs2.\n * The subtraction result is then added to the content of the corresponding 32-bit elements in Rd. If the\n * addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and\n * the OV bit is set to 1. The 32-bit results after saturation are written to Rd. The 16-bit contents of Rs1\n * and Rs2 are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * // KMADS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[1]) - (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * // KMADRS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[0]) - (Rs1.W[x].H[1] * Rs2.W[x].H[1]);\n * // KMAXDS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[0]) - (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMADS(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmads %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.40.1. KMADS ===== */\n\n/* ===== Inline Function Start for 3.40.2. KMADRS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMADRS (SIMD Saturating Signed Multiply Two Halfs & Reverse Subtract & Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMADS Rd, Rs1, Rs2\n * KMADRS Rd, Rs1, Rs2\n * KMAXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from 32-bit elements in two registers; and then\n * perform a subtraction operation between the two 32-bit results. Then add the subtraction result to\n * the corresponding 32-bit elements in a third register. The addition result may be saturated.\n * * KMADS: rd.W[x] + (top*top - bottom*bottom) (per 32-bit element)\n * * KMADRS: rd.W[x] + (bottom*bottom - top*top) (per 32-bit element)\n * * KMAXDS: rd.W[x] + (top*bottom - bottom*top) (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMADS` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the bottom 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the top 16-bit content of 32-bit elements in Rs1 with the top 16-bit content of 32-bit\n * elements in Rs2.\n * For the `KMADRS` instruction, it multiplies the top 16-bit content of 32-bit elements in Rs1 with the\n * top 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of 32-bit elements in Rs1 with the bottom 16-bit content of 32-\n * bit elements in Rs2.\n * For the `KMAXDS` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the top 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the top 16-bit content of 32-bit elements in Rs1 with the bottom 16-bit content of 32-bit\n * elements in Rs2.\n * The subtraction result is then added to the content of the corresponding 32-bit elements in Rd. If the\n * addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and\n * the OV bit is set to 1. The 32-bit results after saturation are written to Rd. The 16-bit contents of Rs1\n * and Rs2 are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * // KMADS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[1]) - (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * // KMADRS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[0]) - (Rs1.W[x].H[1] * Rs2.W[x].H[1]);\n * // KMAXDS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[0]) - (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMADRS(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmadrs %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.40.2. KMADRS ===== */\n\n/* ===== Inline Function Start for 3.40.3. KMAXDS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMAXDS (SIMD Saturating Signed Crossed Multiply Two Halfs & Subtract & Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMADS Rd, Rs1, Rs2\n * KMADRS Rd, Rs1, Rs2\n * KMAXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from 32-bit elements in two registers; and then\n * perform a subtraction operation between the two 32-bit results. Then add the subtraction result to\n * the corresponding 32-bit elements in a third register. The addition result may be saturated.\n * * KMADS: rd.W[x] + (top*top - bottom*bottom) (per 32-bit element)\n * * KMADRS: rd.W[x] + (bottom*bottom - top*top) (per 32-bit element)\n * * KMAXDS: rd.W[x] + (top*bottom - bottom*top) (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMADS` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the bottom 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the top 16-bit content of 32-bit elements in Rs1 with the top 16-bit content of 32-bit\n * elements in Rs2.\n * For the `KMADRS` instruction, it multiplies the top 16-bit content of 32-bit elements in Rs1 with the\n * top 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of 32-bit elements in Rs1 with the bottom 16-bit content of 32-\n * bit elements in Rs2.\n * For the `KMAXDS` instruction, it multiplies the bottom 16-bit content of 32-bit elements in Rs1 with\n * the top 16-bit content of 32-bit elements in Rs2 and then subtracts the result from the result of\n * multiplying the top 16-bit content of 32-bit elements in Rs1 with the bottom 16-bit content of 32-bit\n * elements in Rs2.\n * The subtraction result is then added to the content of the corresponding 32-bit elements in Rd. If the\n * addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and\n * the OV bit is set to 1. The 32-bit results after saturation are written to Rd. The 16-bit contents of Rs1\n * and Rs2 are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * // KMADS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[1]) - (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * // KMADRS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[0] * Rs2.W[x].H[0]) - (Rs1.W[x].H[1] * Rs2.W[x].H[1]);\n * // KMAXDS\n * res[x] = Rd.W[x] + (Rs1.W[x].H[1] * Rs2.W[x].H[0]) - (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMAXDS(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmaxds %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.40.3. KMAXDS ===== */\n\n/* ===== Inline Function Start for 3.41. KMAR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB\n * \\brief KMAR64 (Signed Multiply and Saturating Add to 64-Bit Data)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * KMAR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit signed elements in two registers and add the 64-bit multiplication\n * results to the 64-bit signed data of a pair of registers (RV32) or a register (RV64). The result is\n * saturated to the Q63 range and written back to the pair of registers (RV32) or the register (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit signed data of Rs1 with that of Rs2. It adds\n * the 64-bit multiplication result to the 64-bit signed data of an even/odd pair of registers specified by\n * Rd(4,1) with unlimited precision. If the 64-bit addition result is beyond the Q63 number range (-2^63 <=\n * Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to 1. The saturated result is written back\n * to the even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., value d, determines the even/odd pair group of two registers. Specifically, the register\n * pair includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the 32-bit signed elements of Rs1 with that of Rs2. It\n * adds the 64-bit multiplication results to the 64-bit signed data of Rd with unlimited precision. If the\n * 64-bit addition result is beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range\n * and the OV bit is set to 1. The saturated result is written back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * result = R[t_H].R[t_L] + (Rs1 * Rs2);\n * if (result > (2^63)-1) {\n *   result = (2^63)-1; OV = 1;\n * } else if (result < -2^63) {\n *   result = -2^63; OV = 1;\n * }\n * R[t_H].R[t_L] = result;\n * RV64:\n * // `result` has unlimited precision\n * result = Rd + (Rs1.W[0] * Rs2.W[0]) + (Rs1.W[1] * Rs2.W[1]);\n * if (result > (2^63)-1) {\n *   result = (2^63)-1; OV = 1;\n * } else if (result < -2^63) {\n *   result = -2^63; OV = 1;\n * }\n * Rd = result;\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_KMAR64(long long t, long a, long b)\n{\n    __ASM volatile(\"kmar64 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.41. KMAR64 ===== */\n\n/* ===== Inline Function Start for 3.42.1. KMDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMDA (SIMD Signed Multiply Two Halfs and Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMDA Rd, Rs1, Rs2\n * KMXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * adds the two 32-bit results together. The addition result may be saturated.\n * * KMDA: top*top + bottom*bottom (per 32-bit element)\n * * KMXDA: top*bottom + bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then adds the result to the result of\n * multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the 32-\n * bit elements of Rs2.\n * For the `KMXDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and then adds the result to the result of\n * multiplying the top 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit content of the\n * 32-bit elements of Rs2.\n * The addition result is checked for saturation. If saturation happens, the result is saturated to 2^31-1.\n * The final results are written to Rd. The 16-bit contents are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * if  Rs1.W[x]  !=  0x80008000)  or  (Rs2.W[x]  !=  0x80008000  {  //  KMDA  Rd.W[x]  =  Rs1.W[x].H[1]  *\n * Rs2.W[x].H[1]) + (Rs1.W[x].H[0] * Rs2.W[x].H[0]; // KMXDA Rd.W[x] = Rs1.W[x].H[1] * Rs2.W[x].H[0])\n * +  (Rs1.W[x].H[0]  *  Rs2.W[x].H[1];  }  else  {  Rd.W[x]  =  0x7fffffff;  OV  =  1;  }  for  RV32:  x=0  for  RV64:\n * x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMDA(unsigned long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"kmda %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.42.1. KMDA ===== */\n\n/* ===== Inline Function Start for 3.42.2. KMXDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMXDA (SIMD Signed Crossed Multiply Two Halfs and Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMDA Rd, Rs1, Rs2\n * KMXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * adds the two 32-bit results together. The addition result may be saturated.\n * * KMDA: top*top + bottom*bottom (per 32-bit element)\n * * KMXDA: top*bottom + bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then adds the result to the result of\n * multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the 32-\n * bit elements of Rs2.\n * For the `KMXDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and then adds the result to the result of\n * multiplying the top 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit content of the\n * 32-bit elements of Rs2.\n * The addition result is checked for saturation. If saturation happens, the result is saturated to 2^31-1.\n * The final results are written to Rd. The 16-bit contents are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * if  Rs1.W[x]  !=  0x80008000)  or  (Rs2.W[x]  !=  0x80008000  {  //  KMDA  Rd.W[x]  =  Rs1.W[x].H[1]  *\n * Rs2.W[x].H[1]) + (Rs1.W[x].H[0] * Rs2.W[x].H[0]; // KMXDA Rd.W[x] = Rs1.W[x].H[1] * Rs2.W[x].H[0])\n * +  (Rs1.W[x].H[0]  *  Rs2.W[x].H[1];  }  else  {  Rd.W[x]  =  0x7fffffff;  OV  =  1;  }  for  RV32:  x=0  for  RV64:\n * x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMXDA(unsigned long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"kmxda %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.42.2. KMXDA ===== */\n\n/* ===== Inline Function Start for 3.43.1. KMMAC ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC\n * \\brief KMMAC (SIMD Saturating MSW Signed Multiply Word and Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAC Rd, Rs1, Rs2\n * KMMAC.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of two registers and add the most significant\n * 32-bit results with the signed 32-bit integer elements of a third register. The addition results are\n * saturated first and then written back to the third register. The `.u` form performs an additional\n * rounding up operation on the multiplication results before adding the most significant 32-bit part\n * of the results.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed 32-bit elements of Rs2\n * and adds the most significant 32-bit multiplication results with the signed 32-bit elements of Rd. If\n * the addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range\n * and the OV bit is set to 1. The results after saturation are written to Rd. The `.u` form of the\n * instruction additionally rounds up the most significant 32-bit of the 64-bit multiplication results by\n * adding a 1 to bit 31 of the results.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][63:0] = Rs1.W[x] * Rs2.W[x];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][63:31] + 1;\n *   res[x] = Rd.W[x] + Round[x][32:1];\n * } else {\n *   res[x] = Rd.W[x] + Mres[x][63:32];\n * }\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAC(long t, long a, long b)\n{\n    __ASM volatile(\"kmmac %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.43.1. KMMAC ===== */\n\n/* ===== Inline Function Start for 3.43.2. KMMAC.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC\n * \\brief KMMAC.u (SIMD Saturating MSW Signed Multiply Word and Add with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAC Rd, Rs1, Rs2\n * KMMAC.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of two registers and add the most significant\n * 32-bit results with the signed 32-bit integer elements of a third register. The addition results are\n * saturated first and then written back to the third register. The `.u` form performs an additional\n * rounding up operation on the multiplication results before adding the most significant 32-bit part\n * of the results.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed 32-bit elements of Rs2\n * and adds the most significant 32-bit multiplication results with the signed 32-bit elements of Rd. If\n * the addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range\n * and the OV bit is set to 1. The results after saturation are written to Rd. The `.u` form of the\n * instruction additionally rounds up the most significant 32-bit of the 64-bit multiplication results by\n * adding a 1 to bit 31 of the results.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][63:0] = Rs1.W[x] * Rs2.W[x];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][63:31] + 1;\n *   res[x] = Rd.W[x] + Round[x][32:1];\n * } else {\n *   res[x] = Rd.W[x] + Mres[x][63:32];\n * }\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAC_U(long t, long a, long b)\n{\n    __ASM volatile(\"kmmac.u %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.43.2. KMMAC.u ===== */\n\n/* ===== Inline Function Start for 3.44.1. KMMAWB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMAWB (SIMD Saturating MSW Signed Multiply Word and Bottom Half and Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAWB Rd, Rs1, Rs2\n * KMMAWB.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the bottom 16-bit of the\n * corresponding 32-bit elements of another register and add the most significant 32-bit results with\n * the corresponding signed 32-bit elements of a third register. The addition result is written to the\n * corresponding 32-bit elements of the third register. The `.u` form rounds up the multiplication\n * results from the most significant discarded bit before the addition operations.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed bottom 16-bit content\n * of the corresponding 32-bit elements of Rs2 and adds the most significant 32-bit multiplication\n * results with the corresponding signed 32-bit elements of Rd. If the addition result is beyond the Q31\n * number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to 1. The results\n * after saturation are written to the corresponding 32-bit elements of Rd. The `.u` form of the\n * instruction rounds up the most significant 32-bit of the 48-bit multiplication results by adding a 1 to\n * bit 15 of the result before the addition operations.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][47:0] = Rs1.W[x] * Rs2.W[x].H[0];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][47:15] + 1;\n *   res[x] = Rd.W[x] + Round[x][32:1];\n * } else {\n *   res[x] = Rd.W[x] + Mres[x][47:16];\n * }\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAWB(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmmawb %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.44.1. KMMAWB ===== */\n\n/* ===== Inline Function Start for 3.44.2. KMMAWB.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMAWB.u (SIMD Saturating MSW Signed Multiply Word and Bottom Half and Add with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAWB Rd, Rs1, Rs2\n * KMMAWB.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the bottom 16-bit of the\n * corresponding 32-bit elements of another register and add the most significant 32-bit results with\n * the corresponding signed 32-bit elements of a third register. The addition result is written to the\n * corresponding 32-bit elements of the third register. The `.u` form rounds up the multiplication\n * results from the most significant discarded bit before the addition operations.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed bottom 16-bit content\n * of the corresponding 32-bit elements of Rs2 and adds the most significant 32-bit multiplication\n * results with the corresponding signed 32-bit elements of Rd. If the addition result is beyond the Q31\n * number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to 1. The results\n * after saturation are written to the corresponding 32-bit elements of Rd. The `.u` form of the\n * instruction rounds up the most significant 32-bit of the 48-bit multiplication results by adding a 1 to\n * bit 15 of the result before the addition operations.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][47:0] = Rs1.W[x] * Rs2.W[x].H[0];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][47:15] + 1;\n *   res[x] = Rd.W[x] + Round[x][32:1];\n * } else {\n *   res[x] = Rd.W[x] + Mres[x][47:16];\n * }\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAWB_U(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmmawb.u %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.44.2. KMMAWB.u ===== */\n\n/* ===== Inline Function Start for 3.45.1. KMMAWB2 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMAWB2 (SIMD Saturating MSW Signed Multiply Word and Bottom Half & 2 and Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAWB2 Rd, Rs1, Rs2\n * KMMAWB2.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit elements of one register and the bottom 16-bit of the\n * corresponding 32-bit elements of another register, double the multiplication results and add the\n * saturated most significant 32-bit results with the corresponding signed 32-bit elements of a third\n * register. The saturated addition result is written to the corresponding 32-bit elements of the third\n * register. The `.u` form rounds up the multiplication results from the most significant discarded bit\n * before the addition operations.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit Q31 elements of Rs1 with the signed bottom 16-bit Q15\n * content of the corresponding 32-bit elements of Rs2, doubles the Q46 results to Q47 numbers and\n * adds the saturated most significant 32-bit Q31 multiplication results with the corresponding signed\n * 32-bit elements of Rd. If the addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is\n * saturated to the range and the OV bit is set to 1. The results after saturation are written to the\n * corresponding 32-bit elements of Rd. The `.u` form of the instruction rounds up the most significant\n * 32-bit of the 48-bit Q47 multiplication results by adding a 1 to bit 15 (i.e., bit 14 before doubling) of\n * the result before the addition operations.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1.W[x] == 0x80000000) & (Rs2.W[x].H[0] == 0x8000)) {\n *   addop.W[x] = 0x7fffffff;\n *   OV = 1;\n * } else {\n *   Mres[x][47:0] = Rs1.W[x] s* Rs2.W[x].H[0];\n *   if (`.u` form) {\n *     Mres[x][47:14] = Mres[x][47:14] + 1;\n *   }\n *   addop.W[x] = Mres[x][46:15]; // doubling\n * }\n * res[x] = Rd.W[x] + addop.W[x];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAWB2(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmmawb2 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.45.1. KMMAWB2 ===== */\n\n/* ===== Inline Function Start for 3.45.2. KMMAWB2.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMAWB2.u (SIMD Saturating MSW Signed Multiply Word and Bottom Half & 2 and Add with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAWB2 Rd, Rs1, Rs2\n * KMMAWB2.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit elements of one register and the bottom 16-bit of the\n * corresponding 32-bit elements of another register, double the multiplication results and add the\n * saturated most significant 32-bit results with the corresponding signed 32-bit elements of a third\n * register. The saturated addition result is written to the corresponding 32-bit elements of the third\n * register. The `.u` form rounds up the multiplication results from the most significant discarded bit\n * before the addition operations.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit Q31 elements of Rs1 with the signed bottom 16-bit Q15\n * content of the corresponding 32-bit elements of Rs2, doubles the Q46 results to Q47 numbers and\n * adds the saturated most significant 32-bit Q31 multiplication results with the corresponding signed\n * 32-bit elements of Rd. If the addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is\n * saturated to the range and the OV bit is set to 1. The results after saturation are written to the\n * corresponding 32-bit elements of Rd. The `.u` form of the instruction rounds up the most significant\n * 32-bit of the 48-bit Q47 multiplication results by adding a 1 to bit 15 (i.e., bit 14 before doubling) of\n * the result before the addition operations.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1.W[x] == 0x80000000) & (Rs2.W[x].H[0] == 0x8000)) {\n *   addop.W[x] = 0x7fffffff;\n *   OV = 1;\n * } else {\n *   Mres[x][47:0] = Rs1.W[x] s* Rs2.W[x].H[0];\n *   if (`.u` form) {\n *     Mres[x][47:14] = Mres[x][47:14] + 1;\n *   }\n *   addop.W[x] = Mres[x][46:15]; // doubling\n * }\n * res[x] = Rd.W[x] + addop.W[x];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAWB2_U(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmmawb2.u %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.45.2. KMMAWB2.u ===== */\n\n/* ===== Inline Function Start for 3.46.1. KMMAWT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMAWT (SIMD Saturating MSW Signed Multiply Word and Top Half and Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAWT Rd, Rs1, Rs2\n * KMMAWT.u Rd Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the signed top 16-bit of the\n * corresponding 32-bit elements of another register and add the most significant 32-bit results with\n * the corresponding signed 32-bit elements of a third register. The addition results are written to the\n * corresponding 32-bit elements of the third register. The `.u` form rounds up the multiplication\n * results from the most significant discarded bit before the addition operations.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed top 16-bit of the\n * corresponding 32-bit elements of Rs2 and adds the most significant 32-bit multiplication results\n * with the corresponding signed 32-bit elements of Rd. If the addition result is beyond the Q31\n * number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to 1. The results\n * after saturation are written to the corresponding 32-bit elements of Rd. The `.u` form of the\n * instruction rounds up the most significant 32-bit of the 48-bit multiplication results by adding a 1 to\n * bit 15 of the result before the addition operations.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][47:0] = Rs1.W[x] * Rs2.W[x].H[1];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][47:15] + 1;\n *   res[x] = Rd.W[x] + Round[x][32:1];\n * } else {\n *   res[x] = Rd.W[x] + Mres[x][47:16];\n * }\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAWT(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmmawt %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.46.1. KMMAWT ===== */\n\n/* ===== Inline Function Start for 3.46.2. KMMAWT.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMAWT.u (SIMD Saturating MSW Signed Multiply Word and Top Half and Add with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAWT Rd, Rs1, Rs2\n * KMMAWT.u Rd Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the signed top 16-bit of the\n * corresponding 32-bit elements of another register and add the most significant 32-bit results with\n * the corresponding signed 32-bit elements of a third register. The addition results are written to the\n * corresponding 32-bit elements of the third register. The `.u` form rounds up the multiplication\n * results from the most significant discarded bit before the addition operations.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed top 16-bit of the\n * corresponding 32-bit elements of Rs2 and adds the most significant 32-bit multiplication results\n * with the corresponding signed 32-bit elements of Rd. If the addition result is beyond the Q31\n * number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the range and the OV bit is set to 1. The results\n * after saturation are written to the corresponding 32-bit elements of Rd. The `.u` form of the\n * instruction rounds up the most significant 32-bit of the 48-bit multiplication results by adding a 1 to\n * bit 15 of the result before the addition operations.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][47:0] = Rs1.W[x] * Rs2.W[x].H[1];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][47:15] + 1;\n *   res[x] = Rd.W[x] + Round[x][32:1];\n * } else {\n *   res[x] = Rd.W[x] + Mres[x][47:16];\n * }\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAWT_U(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmmawt.u %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.46.2. KMMAWT.u ===== */\n\n/* ===== Inline Function Start for 3.47.1. KMMAWT2 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMAWT2 (SIMD Saturating MSW Signed Multiply Word and Top Half & 2 and Add)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAWT2 Rd, Rs1, Rs2\n * KMMAWT2.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit elements of one register and the top 16-bit of the\n * corresponding 32-bit elements of another register, double the multiplication results and add the\n * saturated most significant 32-bit results with the corresponding signed 32-bit elements of a third\n * register. The saturated addition result is written to the corresponding 32-bit elements of the third\n * register. The `.u` form rounds up the multiplication results from the most significant discarded bit\n * before the addition operations.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit Q31 elements of Rs1 with the signed top 16-bit Q15\n * content of the corresponding 32-bit elements of Rs2, doubles the Q46 results to Q47 numbers and\n * adds the saturated most significant 32-bit Q31 multiplication results with the corresponding signed\n * 32-bit elements of Rd. If the addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is\n * saturated to the range and the OV bit is set to 1. The results after saturation are written to the\n * corresponding 32-bit elements of Rd. The `.u` form of the instruction rounds up the most significant\n * 32-bit of the 48-bit Q47 multiplication results by adding a 1 to bit 15 (i.e., bit 14 before doubling) of\n * the result before the addition operations.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1.W[x] == 0x80000000) & (Rs2.W[x].H[1] == 0x8000)) {\n *   addop.W[x] = 0x7fffffff;\n *   OV = 1;\n * } else {\n *   Mres[x][47:0] = Rs1.W[x] s* Rs2.W[x].H[1];\n *   if (`.u` form) {\n *     Mres[x][47:14] = Mres[x][47:14] + 1;\n *   }\n *   addop.W[x] = Mres[x][46:15]; // doubling\n * }\n * res[x] = Rd.W[x] + addop.W[x];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAWT2(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmmawt2 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.47.1. KMMAWT2 ===== */\n\n/* ===== Inline Function Start for 3.47.2. KMMAWT2.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMAWT2.u (SIMD Saturating MSW Signed Multiply Word and Top Half & 2 and Add with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMAWT2 Rd, Rs1, Rs2\n * KMMAWT2.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit elements of one register and the top 16-bit of the\n * corresponding 32-bit elements of another register, double the multiplication results and add the\n * saturated most significant 32-bit results with the corresponding signed 32-bit elements of a third\n * register. The saturated addition result is written to the corresponding 32-bit elements of the third\n * register. The `.u` form rounds up the multiplication results from the most significant discarded bit\n * before the addition operations.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit Q31 elements of Rs1 with the signed top 16-bit Q15\n * content of the corresponding 32-bit elements of Rs2, doubles the Q46 results to Q47 numbers and\n * adds the saturated most significant 32-bit Q31 multiplication results with the corresponding signed\n * 32-bit elements of Rd. If the addition result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is\n * saturated to the range and the OV bit is set to 1. The results after saturation are written to the\n * corresponding 32-bit elements of Rd. The `.u` form of the instruction rounds up the most significant\n * 32-bit of the 48-bit Q47 multiplication results by adding a 1 to bit 15 (i.e., bit 14 before doubling) of\n * the result before the addition operations.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1.W[x] == 0x80000000) & (Rs2.W[x].H[1] == 0x8000)) {\n *   addop.W[x] = 0x7fffffff;\n *   OV = 1;\n * } else {\n *   Mres[x][47:0] = Rs1.W[x] s* Rs2.W[x].H[1];\n *   if (`.u` form) {\n *     Mres[x][47:14] = Mres[x][47:14] + 1;\n *   }\n *   addop.W[x] = Mres[x][46:15]; // doubling\n * }\n * res[x] = Rd.W[x] + addop.W[x];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMAWT2_U(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmmawt2.u %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.47.2. KMMAWT2.u ===== */\n\n/* ===== Inline Function Start for 3.48.1. KMMSB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC\n * \\brief KMMSB (SIMD Saturating MSW Signed Multiply Word and Subtract)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMSB Rd, Rs1, Rs2\n * KMMSB.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of two registers and subtract the most\n * significant 32-bit results from the signed 32-bit elements of a third register. The subtraction results\n * are written to the third register. The `.u` form performs an additional rounding up operation on\n * the multiplication results before subtracting the most significant 32-bit part of the results.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed 32-bit elements of Rs2\n * and subtracts the most significant 32-bit multiplication results from the signed 32-bit elements of\n * Rd. If the subtraction result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the\n * range and the OV bit is set to 1. The results after saturation are written to Rd. The `.u` form of the\n * instruction additionally rounds up the most significant 32-bit of the 64-bit multiplication results by\n * adding a 1 to bit 31 of the results.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][63:0] = Rs1.W[x] * Rs2.W[x];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][63:31] + 1;\n *   res[x] = Rd.W[x] - Round[x][32:1];\n * } else {\n *   res[x] = Rd.W[x] - Mres[x][63:32];\n * }\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMSB(long t, long a, long b)\n{\n    __ASM volatile(\"kmmsb %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.48.1. KMMSB ===== */\n\n/* ===== Inline Function Start for 3.48.2. KMMSB.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC\n * \\brief KMMSB.u (SIMD Saturating MSW Signed Multiply Word and Subtraction with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMSB Rd, Rs1, Rs2\n * KMMSB.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of two registers and subtract the most\n * significant 32-bit results from the signed 32-bit elements of a third register. The subtraction results\n * are written to the third register. The `.u` form performs an additional rounding up operation on\n * the multiplication results before subtracting the most significant 32-bit part of the results.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed 32-bit elements of Rs2\n * and subtracts the most significant 32-bit multiplication results from the signed 32-bit elements of\n * Rd. If the subtraction result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is saturated to the\n * range and the OV bit is set to 1. The results after saturation are written to Rd. The `.u` form of the\n * instruction additionally rounds up the most significant 32-bit of the 64-bit multiplication results by\n * adding a 1 to bit 31 of the results.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][63:0] = Rs1.W[x] * Rs2.W[x];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][63:31] + 1;\n *   res[x] = Rd.W[x] - Round[x][32:1];\n * } else {\n *   res[x] = Rd.W[x] - Mres[x][63:32];\n * }\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMSB_U(long t, long a, long b)\n{\n    __ASM volatile(\"kmmsb.u %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.48.2. KMMSB.u ===== */\n\n/* ===== Inline Function Start for 3.49.1. KMMWB2 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMWB2 (SIMD Saturating MSW Signed Multiply Word and Bottom Half & 2)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMWB2 Rd, Rs1, Rs2\n * KMMWB2.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the bottom 16-bit of the\n * corresponding 32-bit elements of another register, double the multiplication results and write the\n * saturated most significant 32-bit results to the corresponding 32-bit elements of a register. The `.u`\n * form rounds up the results from the most significant discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit Q31 elements of Rs1 with the signed bottom 16-bit Q15\n * content of the corresponding 32-bit elements of Rs2, doubles the Q46 results to Q47 numbers and\n * writes the saturated most significant 32-bit Q31 multiplication results to the corresponding 32-bit\n * elements of Rd. The `.u` form of the instruction rounds up the most significant 32-bit of the 48-bit\n * Q47 multiplication results by adding a 1 to bit 15 (i.e., bit 14 before doubling) of the results.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1.W[x] == 0x80000000) & (Rs2.W[x].H[0] == 0x8000)) {\n *   Rd.W[x] = 0x7fffffff;\n *   OV = 1;\n * } else {\n *   Mres[x][47:0] = Rs1.W[x] s* Rs2.W[x].H[0];\n *   if (`.u` form) {\n *     Round[x][32:0] = Mres[x][46:14] + 1;\n *     Rd.W[x] = Round[x][32:1];\n *   } else {\n *     Rd.W[x] = Mres[x][46:15];\n *   }\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMWB2(long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"kmmwb2 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.49.1. KMMWB2 ===== */\n\n/* ===== Inline Function Start for 3.49.2. KMMWB2.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMWB2.u (SIMD Saturating MSW Signed Multiply Word and Bottom Half & 2 with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMWB2 Rd, Rs1, Rs2\n * KMMWB2.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the bottom 16-bit of the\n * corresponding 32-bit elements of another register, double the multiplication results and write the\n * saturated most significant 32-bit results to the corresponding 32-bit elements of a register. The `.u`\n * form rounds up the results from the most significant discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit Q31 elements of Rs1 with the signed bottom 16-bit Q15\n * content of the corresponding 32-bit elements of Rs2, doubles the Q46 results to Q47 numbers and\n * writes the saturated most significant 32-bit Q31 multiplication results to the corresponding 32-bit\n * elements of Rd. The `.u` form of the instruction rounds up the most significant 32-bit of the 48-bit\n * Q47 multiplication results by adding a 1 to bit 15 (i.e., bit 14 before doubling) of the results.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1.W[x] == 0x80000000) & (Rs2.W[x].H[0] == 0x8000)) {\n *   Rd.W[x] = 0x7fffffff;\n *   OV = 1;\n * } else {\n *   Mres[x][47:0] = Rs1.W[x] s* Rs2.W[x].H[0];\n *   if (`.u` form) {\n *     Round[x][32:0] = Mres[x][46:14] + 1;\n *     Rd.W[x] = Round[x][32:1];\n *   } else {\n *     Rd.W[x] = Mres[x][46:15];\n *   }\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMWB2_U(long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"kmmwb2.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.49.2. KMMWB2.u ===== */\n\n/* ===== Inline Function Start for 3.50.1. KMMWT2 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMWT2 (SIMD Saturating MSW Signed Multiply Word and Top Half & 2)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMWT2 Rd, Rs1, Rs2\n * KMMWT2.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the top 16-bit of the\n * corresponding 32-bit elements of another register, double the multiplication results and write the\n * saturated most significant 32-bit results to the corresponding 32-bit elements of a register. The `.u`\n * form rounds up the results from the most significant discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit Q31 elements of Rs1 with the signed top 16-bit Q15\n * content of the corresponding 32-bit elements of Rs2, doubles the Q46 results to Q47 numbers and\n * writes the saturated most significant 32-bit Q31 multiplication results to the corresponding 32-bit\n * elements of Rd. The `.u` form of the instruction rounds up the most significant 32-bit of the 48-bit\n * Q47 multiplication results by adding a 1 to bit 15 (i.e., bit 14 before doubling) of the results.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1.W[x] == 0x80000000) & (Rs2.W[x].H[1] == 0x8000)) {\n *   Rd.W[x] = 0x7fffffff;\n *   OV = 1;\n * } else {\n *   Mres[x][47:0] = Rs1.W[x] s* Rs2.W[x].H[1];\n *   if (`.u` form) {\n *     Round[x][32:0] = Mres[x][46:14] + 1;\n *     Rd.W[x] = Round[x][32:1];\n *   } else {\n *     Rd.W[x] = Mres[x][46:15];\n *   }\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMWT2(long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"kmmwt2 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.50.1. KMMWT2 ===== */\n\n/* ===== Inline Function Start for 3.50.2. KMMWT2.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief KMMWT2.u (SIMD Saturating MSW Signed Multiply Word and Top Half & 2 with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMMWT2 Rd, Rs1, Rs2\n * KMMWT2.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the top 16-bit of the\n * corresponding 32-bit elements of another register, double the multiplication results and write the\n * saturated most significant 32-bit results to the corresponding 32-bit elements of a register. The `.u`\n * form rounds up the results from the most significant discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit Q31 elements of Rs1 with the signed top 16-bit Q15\n * content of the corresponding 32-bit elements of Rs2, doubles the Q46 results to Q47 numbers and\n * writes the saturated most significant 32-bit Q31 multiplication results to the corresponding 32-bit\n * elements of Rd. The `.u` form of the instruction rounds up the most significant 32-bit of the 48-bit\n * Q47 multiplication results by adding a 1 to bit 15 (i.e., bit 14 before doubling) of the results.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1.W[x] == 0x80000000) & (Rs2.W[x].H[1] == 0x8000)) {\n *   Rd.W[x] = 0x7fffffff;\n *   OV = 1;\n * } else {\n *   Mres[x][47:0] = Rs1.W[x] s* Rs2.W[x].H[1];\n *   if (`.u` form) {\n *     Round[x][32:0] = Mres[x][46:14] + 1;\n *     Rd.W[x] = Round[x][32:1];\n *   } else {\n *     Rd.W[x] = Mres[x][46:15];\n *   }\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMMWT2_U(long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"kmmwt2.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.50.2. KMMWT2.u ===== */\n\n/* ===== Inline Function Start for 3.51.1. KMSDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMSDA (SIMD Saturating Signed Multiply Two Halfs & Add & Subtract)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMSDA Rd, Rs1, Rs2\n * KMSXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * subtracts the two 32-bit results from the corresponding 32-bit elements of a third register. The\n * subtraction result may be saturated.\n * * KMSDA: rd.W[x] - top*top - bottom*bottom (per 32-bit element)\n * * KMSXDA: rd.W[x] - top*bottom - bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMSDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and multiplies the top 16-bit content of\n * the 32-bit elements of Rs1 with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `KMSXDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and multiplies the top 16-bit content of the\n * 32-bit elements of Rs1 with the bottom 16-bit content of the 32-bit elements of Rs2.\n * The two 32-bit multiplication results are then subtracted from the content of the corresponding 32-\n * bit elements of Rd. If the subtraction result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is\n * saturated to the range and the OV bit is set to 1. The results after saturation are written to Rd. The\n * 16-bit contents are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * // KMSDA\n * res[x] = Rd.W[x] - (Rs1.W[x].H[1] * Rs2.W[x].H[1]) - (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * // KMSXDA\n * res[x] = Rd.W[x] - (Rs1.W[x].H[1] * Rs2.W[x].H[0]) - (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMSDA(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmsda %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.51.1. KMSDA ===== */\n\n/* ===== Inline Function Start for 3.51.2. KMSXDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief KMSXDA (SIMD Saturating Signed Crossed Multiply Two Halfs & Add & Subtract)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KMSDA Rd, Rs1, Rs2\n * KMSXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * subtracts the two 32-bit results from the corresponding 32-bit elements of a third register. The\n * subtraction result may be saturated.\n * * KMSDA: rd.W[x] - top*top - bottom*bottom (per 32-bit element)\n * * KMSXDA: rd.W[x] - top*bottom - bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `KMSDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and multiplies the top 16-bit content of\n * the 32-bit elements of Rs1 with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `KMSXDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and multiplies the top 16-bit content of the\n * 32-bit elements of Rs1 with the bottom 16-bit content of the 32-bit elements of Rs2.\n * The two 32-bit multiplication results are then subtracted from the content of the corresponding 32-\n * bit elements of Rd. If the subtraction result is beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1), it is\n * saturated to the range and the OV bit is set to 1. The results after saturation are written to Rd. The\n * 16-bit contents are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * // KMSDA\n * res[x] = Rd.W[x] - (Rs1.W[x].H[1] * Rs2.W[x].H[1]) - (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * // KMSXDA\n * res[x] = Rd.W[x] - (Rs1.W[x].H[1] * Rs2.W[x].H[0]) - (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMSXDA(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmsxda %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.51.2. KMSXDA ===== */\n\n/* ===== Inline Function Start for 3.52. KMSR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB\n * \\brief KMSR64 (Signed Multiply and Saturating Subtract from 64-Bit Data)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * KMSR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit signed elements in two registers and subtract the 64-bit multiplication\n * results from the 64-bit signed data of a pair of registers (RV32) or a register (RV64). The result is\n * saturated to the Q63 range and written back to the pair of registers (RV32) or the register (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit signed data of Rs1 with that of Rs2. It\n * subtracts the 64-bit multiplication result from the 64-bit signed data of an even/odd pair of registers\n * specified by Rd(4,1) with unlimited precision. If the 64-bit subtraction result is beyond the Q63\n * number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to 1. The saturated\n * result is written back to the even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the 32-bit signed elements of Rs1 with that of Rs2. It\n * subtracts the 64-bit multiplication results from the 64-bit signed data in Rd with unlimited\n * precision. If the 64-bit subtraction result is beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is\n * saturated to the range and the OV bit is set to 1. The saturated result is written back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * result = R[t_H].R[t_L] - (Rs1 * Rs2);\n * if (result > (2^63)-1) {\n *   result = (2^63)-1; OV = 1;\n * } else if (result < -2^63) {\n *   result = -2^63; OV = 1;\n * }\n * R[t_H].R[t_L] = result;\n * RV64:\n * // `result` has unlimited precision\n * result = Rd - (Rs1.W[0] * Rs2.W[0]) - (Rs1.W[1] * Rs2.W[1]);\n * if (result > (2^63)-1) {\n *   result = (2^63)-1; OV = 1;\n * } else if (result < -2^63) {\n *   result = -2^63; OV = 1;\n * }\n * Rd = result;\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_KMSR64(long long t, long a, long b)\n{\n    __ASM volatile(\"kmsr64 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.52. KMSR64 ===== */\n\n/* ===== Inline Function Start for 3.53. KSLLW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KSLLW (Saturating Shift Left Logical for Word)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KSLLW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do logical left shift operation with saturation on a 32-bit word. The shift amount is a\n * variable from a GPR.\n *\n * **Description**:\\n\n * The first word data in Rs1 is left-shifted logically. The shifted out bits are filled with\n * zero and the shift amount is specified by the low-order 5-bits of the value in the Rs2 register. Any\n * shifted value greater than 2^31-1 is saturated to 2^31-1. Any shifted value smaller than -2^31 is saturated\n * to -2^31. And the saturated result is sign-extended and written to Rd. If any saturation is performed,\n * set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[4:0];\n * res[(31+sa):0] = Rs1.W[0] << sa;\n * if (res > (2^31)-1) {\n *   res = 0x7fffffff; OV = 1;\n * } else if (res < -2^31) {\n *   res = 0x80000000; OV = 1;\n * }\n * Rd[31:0] = res[31:0]; // RV32\n * Rd[63:0] = SE(res[31:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KSLLW(long a, unsigned int b)\n{\n    register long result;\n    __ASM volatile(\"ksllw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.53. KSLLW ===== */\n\n/* ===== Inline Function Start for 3.54. KSLLIW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KSLLIW (Saturating Shift Left Logical Immediate for Word)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KSLLIW Rd, Rs1, imm5u\n * ~~~\n *\n * **Purpose**:\\n\n * Do logical left shift operation with saturation on a 32-bit word. The shift amount is an\n * immediate value.\n *\n * **Description**:\\n\n * The first word data in Rs1 is left-shifted logically. The shifted out bits are filled with\n * zero and the shift amount is specified by the imm5u constant. Any shifted value greater than 2^31-1 is\n * saturated to 2^31-1. Any shifted value smaller than -2^31 is saturated to -2^31. And the saturated result is\n * sign-extended and written to Rd. If any saturation is performed, set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm5u;\n * res[(31+sa):0] = Rs1.W[0] << sa;\n * if (res > (2^31)-1) {\n *   res = 0x7fffffff; OV = 1;\n * } else if (res < -2^31) {\n *   res = 0x80000000; OV = 1;\n * }\n * Rd[31:0] = res[31:0]; // RV32\n * Rd[63:0] = SE(res[31:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n#define __RV_KSLLIW(a, b)    \\\n    ({    \\\n        register long result;    \\\n        register long __a = (long)(a);    \\\n        __ASM volatile(\"kslliw %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.54. KSLLIW ===== */\n\n/* ===== Inline Function Start for 3.55. KSLL8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief KSLL8 (SIMD 8-bit Saturating Shift Left Logical)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSLL8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical left shift operations with saturation simultaneously. The shift\n * amount is a variable from a GPR.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are left-shifted logically. The shifted out bits are filled\n * with zero and the shift amount is specified by the low-order 3-bits of the value in the Rs2 register.\n * Any shifted value greater than 2^7-1 is saturated to 2^7-1. Any shifted value smaller than -2^7 is\n * saturated to -2^7. And the saturated results are written to Rd. If any saturation is performed, set OV\n * bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[2:0];\n * if (sa != 0) {\n *   res[(7+sa):0] = Rs1.B[x] << sa;\n *   if (res > (2^7)-1) {\n *     res = 0x7f; OV = 1;\n *   } else if (res < -2^7) {\n *     res = 0x80; OV = 1;\n *   }\n *   Rd.B[x] = res[7:0];\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLL8(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ksll8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.55. KSLL8 ===== */\n\n/* ===== Inline Function Start for 3.56. KSLLI8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief KSLLI8 (SIMD 8-bit Saturating Shift Left Logical Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSLLI8 Rd, Rs1, imm3u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical left shift operations with saturation simultaneously. The shift\n * amount is an immediate value.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are left-shifted logically. The shifted out bits are filled\n * with zero and the shift amount is specified by the imm3u constant. Any shifted value greater than\n * 2^7-1 is saturated to 2^7-1. Any shifted value smaller than -2^7 is saturated to -2^7. And the saturated\n * results are written to Rd. If any saturation is performed, set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm3u[2:0];\n * if (sa != 0) {\n *   res[(7+sa):0] = Rs1.B[x] << sa;\n *   if (res > (2^7)-1) {\n *     res = 0x7f; OV = 1;\n *   } else if (res < -2^7) {\n *     res = 0x80; OV = 1;\n *   }\n *   Rd.B[x] = res[7:0];\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_KSLLI8(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"kslli8 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.56. KSLLI8 ===== */\n\n/* ===== Inline Function Start for 3.57. KSLL16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief KSLL16 (SIMD 16-bit Saturating Shift Left Logical)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSLL16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical left shift operations with saturation simultaneously. The shift\n * amount is a variable from a GPR.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are left-shifted logically. The shifted out bits are filled\n * with zero and the shift amount is specified by the low-order 4-bits of the value in the Rs2 register.\n * Any shifted value greater than 2^15-1 is saturated to 2^15-1. Any shifted value smaller than -2^15 is\n * saturated to -2^15. And the saturated results are written to Rd. If any saturation is performed, set OV\n * bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[3:0];\n * if (sa != 0) {\n *   res[(15+sa):0] = Rs1.H[x] << sa;\n *   if (res > (2^15)-1) {\n *     res = 0x7fff; OV = 1;\n *   } else if (res < -2^15) {\n *     res = 0x8000; OV = 1;\n *   }\n *   Rd.H[x] = res[15:0];\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLL16(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ksll16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.57. KSLL16 ===== */\n\n/* ===== Inline Function Start for 3.58. KSLLI16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief KSLLI16 (SIMD 16-bit Saturating Shift Left Logical Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSLLI16 Rd, Rs1, imm4u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical left shift operations with saturation simultaneously. The shift\n * amount is an immediate value.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are left-shifted logically. The shifted out bits are filled\n * with zero and the shift amount is specified by the imm4u constant. Any shifted value greater than\n * 2^15-1 is saturated to 2^15-1. Any shifted value smaller than -2^15 is saturated to -2^15. And the saturated\n * results are written to Rd. If any saturation is performed, set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm4u[3:0];\n * if (sa != 0) {\n *   res[(15+sa):0] = Rs1.H[x] << sa;\n *   if (res > (2^15)-1) {\n *     res = 0x7fff; OV = 1;\n *   } else if (res < -2^15) {\n *     res = 0x8000; OV = 1;\n *   }\n *   Rd.H[x] = res[15:0];\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_KSLLI16(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"kslli16 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.58. KSLLI16 ===== */\n\n/* ===== Inline Function Start for 3.59.1. KSLRA8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief KSLRA8 (SIMD 8-bit Shift Left Logical with Saturation or Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSLRA8 Rd, Rs1, Rs2\n * KSLRA8.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical left (positive) or arithmetic right (negative) shift operation with\n * Q7 saturation for the left shift. The `.u` form performs additional rounding up operations for the\n * right shift.\n *\n * **Description**:\\n\n * The 8-bit data elements of Rs1 are left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[3:0]. Rs2[3:0] is in the signed range of [-2^3, 2^3-1]. A positive Rs2[3:0] means\n * logical left shift and a negative Rs2[3:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[3:0]. However, the behavior of `Rs2[3:0]==-2^3 (0x8)` is defined to be\n * equivalent to the behavior of `Rs2[3:0]==-(2^3-1) (0x9)`.\n * The left-shifted results are saturated to the 8-bit signed integer range of [-2^7, 2^7-1]. For the `.u` form\n * of the instruction, the right-shifted results are added a 1 to the most significant discarded bit\n * position for rounding effect. After the shift, saturation, or rounding, the final results are written to\n * Rd. If any saturation happens, this instruction sets the OV flag. The value of Rs2[31:4] will not affect\n * this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[3:0] < 0) {\n *   sa = -Rs2[3:0];\n *   sa = (sa == 8)? 7 : sa;\n *   if (`.u` form) {\n *     res[7:-1] = SE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[7:0];\n *   } else {\n *     Rd.B[x] = SE8(Rs1.B[x][7:sa]);\n *   }\n * } else {\n *   sa = Rs2[2:0];\n *   res[(7+sa):0] = Rs1.B[x] <<(logic) sa;\n *   if (res > (2^7)-1) {\n *     res[7:0] = 0x7f; OV = 1;\n *   } else if (res < -2^7) {\n *     res[7:0] = 0x80; OV = 1;\n *   }\n *   Rd.B[x] = res[7:0];\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLRA8(unsigned long a, int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kslra8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.59.1. KSLRA8 ===== */\n\n/* ===== Inline Function Start for 3.59.2. KSLRA8.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief KSLRA8.u (SIMD 8-bit Shift Left Logical with Saturation or Rounding Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSLRA8 Rd, Rs1, Rs2\n * KSLRA8.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical left (positive) or arithmetic right (negative) shift operation with\n * Q7 saturation for the left shift. The `.u` form performs additional rounding up operations for the\n * right shift.\n *\n * **Description**:\\n\n * The 8-bit data elements of Rs1 are left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[3:0]. Rs2[3:0] is in the signed range of [-2^3, 2^3-1]. A positive Rs2[3:0] means\n * logical left shift and a negative Rs2[3:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[3:0]. However, the behavior of `Rs2[3:0]==-2^3 (0x8)` is defined to be\n * equivalent to the behavior of `Rs2[3:0]==-(2^3-1) (0x9)`.\n * The left-shifted results are saturated to the 8-bit signed integer range of [-2^7, 2^7-1]. For the `.u` form\n * of the instruction, the right-shifted results are added a 1 to the most significant discarded bit\n * position for rounding effect. After the shift, saturation, or rounding, the final results are written to\n * Rd. If any saturation happens, this instruction sets the OV flag. The value of Rs2[31:4] will not affect\n * this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[3:0] < 0) {\n *   sa = -Rs2[3:0];\n *   sa = (sa == 8)? 7 : sa;\n *   if (`.u` form) {\n *     res[7:-1] = SE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[7:0];\n *   } else {\n *     Rd.B[x] = SE8(Rs1.B[x][7:sa]);\n *   }\n * } else {\n *   sa = Rs2[2:0];\n *   res[(7+sa):0] = Rs1.B[x] <<(logic) sa;\n *   if (res > (2^7)-1) {\n *     res[7:0] = 0x7f; OV = 1;\n *   } else if (res < -2^7) {\n *     res[7:0] = 0x80; OV = 1;\n *   }\n *   Rd.B[x] = res[7:0];\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLRA8_U(unsigned long a, int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kslra8.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.59.2. KSLRA8.u ===== */\n\n/* ===== Inline Function Start for 3.60.1. KSLRA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief KSLRA16 (SIMD 16-bit Shift Left Logical with Saturation or Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSLRA16 Rd, Rs1, Rs2\n * KSLRA16.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical left (positive) or arithmetic right (negative) shift operation with\n * Q15 saturation for the left shift. The `.u` form performs additional rounding up operations for the\n * right shift.\n *\n * **Description**:\\n\n * The 16-bit data elements of Rs1 are left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[4:0]. Rs2[4:0] is in the signed range of [-2^4, 2^4-1]. A positive Rs2[4:0] means\n * logical left shift and a negative Rs2[4:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[4:0]. However, the behavior of `Rs2[4:0]==-2^4 (0x10)` is defined to be\n * equivalent to the behavior of `Rs2[4:0]==-(2^4-1) (0x11)`.\n * The left-shifted results are saturated to the 16-bit signed integer range of [-2^15, 2^15-1]. For the `.u`\n * form of the instruction, the right-shifted results are added a 1 to the most significant discarded bit\n * position for rounding effect. After the shift, saturation, or rounding, the final results are written to\n * Rd. If any saturation happens, this instruction sets the OV flag. The value of Rs2[31:5] will not affect\n * this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[4:0] < 0) {\n *   sa = -Rs2[4:0];\n *   sa = (sa == 16)? 15 : sa;\n *   if (`.u` form) {\n *     res[15:-1] = SE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[15:0];\n *   } else {\n *     Rd.H[x] = SE16(Rs1.H[x][15:sa]);\n *   }\n * } else {\n *   sa = Rs2[3:0];\n *   res[(15+sa):0] = Rs1.H[x] <<(logic) sa;\n *   if (res > (2^15)-1) {\n *     res[15:0] = 0x7fff; OV = 1;\n *   } else if (res < -2^15) {\n *     res[15:0] = 0x8000; OV = 1;\n *   }\n *   d.H[x] = res[15:0];\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLRA16(unsigned long a, int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kslra16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.60.1. KSLRA16 ===== */\n\n/* ===== Inline Function Start for 3.60.2. KSLRA16.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief KSLRA16.u (SIMD 16-bit Shift Left Logical with Saturation or Rounding Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSLRA16 Rd, Rs1, Rs2\n * KSLRA16.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical left (positive) or arithmetic right (negative) shift operation with\n * Q15 saturation for the left shift. The `.u` form performs additional rounding up operations for the\n * right shift.\n *\n * **Description**:\\n\n * The 16-bit data elements of Rs1 are left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[4:0]. Rs2[4:0] is in the signed range of [-2^4, 2^4-1]. A positive Rs2[4:0] means\n * logical left shift and a negative Rs2[4:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[4:0]. However, the behavior of `Rs2[4:0]==-2^4 (0x10)` is defined to be\n * equivalent to the behavior of `Rs2[4:0]==-(2^4-1) (0x11)`.\n * The left-shifted results are saturated to the 16-bit signed integer range of [-2^15, 2^15-1]. For the `.u`\n * form of the instruction, the right-shifted results are added a 1 to the most significant discarded bit\n * position for rounding effect. After the shift, saturation, or rounding, the final results are written to\n * Rd. If any saturation happens, this instruction sets the OV flag. The value of Rs2[31:5] will not affect\n * this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[4:0] < 0) {\n *   sa = -Rs2[4:0];\n *   sa = (sa == 16)? 15 : sa;\n *   if (`.u` form) {\n *     res[15:-1] = SE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[15:0];\n *   } else {\n *     Rd.H[x] = SE16(Rs1.H[x][15:sa]);\n *   }\n * } else {\n *   sa = Rs2[3:0];\n *   res[(15+sa):0] = Rs1.H[x] <<(logic) sa;\n *   if (res > (2^15)-1) {\n *     res[15:0] = 0x7fff; OV = 1;\n *   } else if (res < -2^15) {\n *     res[15:0] = 0x8000; OV = 1;\n *   }\n *   d.H[x] = res[15:0];\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLRA16_U(unsigned long a, int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kslra16.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.60.2. KSLRA16.u ===== */\n\n/* ===== Inline Function Start for 3.61. KSLRAW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KSLRAW (Shift Left Logical with Q31 Saturation or Shift Right Arithmetic)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KSLRAW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Perform a logical left (positive) or arithmetic right (negative) shift operation with Q31\n * saturation for the left shift on a 32-bit data.\n *\n * **Description**:\\n\n * The lower 32-bit content of Rs1 is left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[5:0]. Rs2[5:0] is in the signed range of [-25, 25-1]. A positive Rs2[5:0] means\n * logical left shift and a negative Rs2[5:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[5:0] clamped to the actual shift range of [0, 31].\n * The left-shifted result is saturated to the 32-bit signed integer range of [-2^31, 2^31-1]. After the shift\n * operation, the final result is bit-31 sign-extended and written to Rd. If any saturation happens, this\n * instruction sets the OV flag. The value of Rs2[31:6] will not affected the operation of this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[5:0] < 0) {\n *   sa = -Rs2[5:0];\n *   sa = (sa == 32)? 31 : sa;\n *   res[31:0] = Rs1.W[0] >>(arith) sa;\n * } else {\n *   sa = Rs2[5:0];\n *   tmp = Rs1.W[0] <<(logic) sa;\n *   if (tmp > (2^31)-1) {\n *     res[31:0] = (2^31)-1;\n *     OV = 1;\n *   } else if (tmp < -2^31) {\n *     res[31:0] = -2^31;\n *     OV = 1\n *   } else {\n *     res[31:0] = tmp[31:0];\n *   }\n * }\n * Rd = res[31:0]; // RV32\n * Rd = SE64(res[31:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KSLRAW(int a, int b)\n{\n    register long result;\n    __ASM volatile(\"kslraw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.61. KSLRAW ===== */\n\n/* ===== Inline Function Start for 3.62. KSLRAW.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KSLRAW.u (Shift Left Logical with Q31 Saturation or Rounding Shift Right Arithmetic)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KSLRAW.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Perform a logical left (positive) or arithmetic right (negative) shift operation with Q31\n * saturation for the left shift and a rounding up operation for the right shift on a 32-bit data.\n *\n * **Description**:\\n\n * The lower 32-bit content of Rs1 is left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[5:0]. Rs2[5:0] is in the signed range of [-25, 25-1]. A positive Rs2[5:0] means\n * logical left shift and a negative Rs2[5:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[5:0] clamped to the actual shift range of [0, 31].\n * The left-shifted result is saturated to the 32-bit signed integer range of [-2^31, 2^31-1]. The right-shifted\n * result is added a 1 to the most significant discarded bit position for rounding effect. After the shift,\n * saturation, or rounding, the final result is bit-31 sign-extended and written to Rd. If any saturation\n * happens, this instruction sets the OV flag. The value of Rs2[31:6] will not affect the operation of this\n * instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[5:0] < 0) {\n *   sa = -Rs2[5:0];\n *   sa = (sa == 32)? 31 : sa;\n *   res[31:-1] = SE33(Rs1[31:(sa-1)]) + 1;\n *   rst[31:0] = res[31:0];\n * } else {\n *   sa = Rs2[5:0];\n *   tmp = Rs1.W[0] <<(logic) sa;\n *   if (tmp > (2^31)-1) {\n *     rst[31:0] = (2^31)-1;\n *     OV = 1;\n *   } else if (tmp < -2^31) {\n *     rst[31:0] = -2^31;\n *     OV = 1\n *   } else {\n *     rst[31:0] = tmp[31:0];\n *   }\n * }\n * Rd = rst[31:0]; // RV32\n * Rd = SE64(rst[31:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KSLRAW_U(int a, int b)\n{\n    register long result;\n    __ASM volatile(\"kslraw.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.62. KSLRAW.u ===== */\n\n/* ===== Inline Function Start for 3.63. KSTAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief KSTAS16 (SIMD 16-bit Signed Saturating Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSTAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element saturating addition and 16-bit signed integer element\n * saturating subtraction in a 32-bit chunk simultaneously. Operands are from corresponding\n * positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit signed integer element in [31:16] of 32-bit chunks in\n * Rs1 with the 16-bit signed integer element in [31:16] of 32-bit chunks in Rs2; at the same time, it\n * subtracts the 16-bit signed integer element in [15:0] of 32-bit chunks in Rs2 from the 16-bit signed\n * integer element in [15:0] of 32-bit chunks in Rs1. If any of the results are beyond the Q15 number\n * range (-2^15 <= Q15 <= 2^15-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to [31:16] of 32-bit chunks in Rd for addition and [15:0] of 32-bit chunks in Rd for\n * subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[x][31:16] + Rs2.W[x][31:16];\n * res2 = Rs1.W[x][15:0] - Rs2.W[x][15:0];\n * for (res in [res1, res2]) {\n *   if (res > (2^15)-1) {\n *     res = (2^15)-1;\n *     OV = 1;\n *   } else if (res < -2^15) {\n *     res = -2^15;\n *     OV = 1;\n *   }\n * }\n * Rd.W[x][31:16] = res1;\n * Rd.W[x][15:0] = res2;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSTAS16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kstas16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.63. KSTAS16 ===== */\n\n/* ===== Inline Function Start for 3.64. KSTSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief KSTSA16 (SIMD 16-bit Signed Saturating Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSTSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element saturating subtraction and 16-bit signed integer element\n * saturating addition in a 32-bit chunk simultaneously. Operands are from corresponding positions in\n * 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit signed integer element in [31:16] of 32-bit chunks\n * in Rs2 from the 16-bit signed integer element in [31:16] of 32-bit chunks in Rs1; at the same time, it\n * adds the 16-bit signed integer element in [15:0] of 32-bit chunks in Rs2 with the 16-bit signed integer\n * element in [15:0] of 32-bit chunks in Rs1. If any of the results are beyond the Q15 number range (-2^15\n * <= Q15 <= 2^15-1), they are saturated to the range and the OV bit is set to 1. The saturated results are\n * written to [31:16] of 32-bit chunks in Rd for subtraction and [15:0] of 32-bit chunks in Rd for\n * addition.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[x][31:16] - Rs2.W[x][31:16];\n * res2 = Rs1.W[x][15:0] + Rs2.W[x][15:0];\n * for (res in [res1, res2]) {\n *   if (res > (2^15)-1) {\n *     res = (2^15)-1;\n *     OV = 1;\n *   } else if (res < -2^15) {\n *     res = -2^15;\n *     OV = 1;\n *   }\n * }\n * Rd.W[x][31:16] = res1;\n * Rd.W[x][15:0] = res2;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSTSA16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kstsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.64. KSTSA16 ===== */\n\n/* ===== Inline Function Start for 3.65. KSUB8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief KSUB8 (SIMD 8-bit Signed Saturating Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSUB8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed elements saturating subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 8-bit signed integer elements in Rs2 from the 8-bit\n * signed integer elements in Rs1. If any of the results are beyond the Q7 number range (-2^7 <= Q7 <= 27\n * -1), they are saturated to the range and the OV bit is set to 1. The saturated results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.B[x] - Rs2.B[x];\n * if (res[x] > (2^7)-1) {\n *   res[x] = (2^7)-1;\n *   OV = 1;\n * } else if (res[x] < -2^7) {\n *   res[x] = -2^7;\n *   OV = 1;\n * }\n * Rd.B[x] = res[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSUB8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ksub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.65. KSUB8 ===== */\n\n/* ===== Inline Function Start for 3.66. KSUB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief KSUB16 (SIMD 16-bit Signed Saturating Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KSUB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer elements saturating subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit signed integer elements in Rs2 from the 16-bit\n * signed integer elements in Rs1. If any of the results are beyond the Q15 number range (-2^15 <= Q15 <=\n * 2^15-1), they are saturated to the range and the OV bit is set to 1. The saturated results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.H[x] - Rs2.H[x];\n * if (res[x] > (2^15)-1) {\n *   res[x] = (2^15)-1;\n *   OV = 1;\n * } else if (res[x] < -2^15) {\n *   res[x] = -2^15;\n *   OV = 1;\n * }\n * Rd.H[x] = res[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSUB16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ksub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.66. KSUB16 ===== */\n\n/* ===== Inline Function Start for 3.67. KSUB64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief KSUB64 (64-bit Signed Saturating Subtraction)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * KSUB64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Perform a 64-bit signed integer subtraction. The result is saturated to the Q63 range.\n *\n * **RV32 Description**:\\n\n * This instruction subtracts the 64-bit signed integer of an even/odd pair of\n * registers specified by Rs2(4,1) from the 64-bit signed integer of an even/odd pair of registers\n * specified by Rs1(4,1). If the 64-bit result is beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is\n * saturated to the range and the OV bit is set to 1. The saturated result is then written to an even/odd\n * pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * This instruction subtracts the 64-bit signed integer of Rs2 from the 64-bit signed\n * integer of Rs1. If the 64-bit result is beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated\n * to the range and the OV bit is set to 1. The saturated result is then written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * a_L = CONCAT(Rs1(4,1),1'b0); a_H = CONCAT(Rs1(4,1),1'b1);\n * b_L = CONCAT(Rs2(4,1),1'b0); b_H = CONCAT(Rs2(4,1),1'b1);\n * result = R[a_H].R[a_L] - R[b_H].R[b_L];\n * if (result > (2^63)-1) {\n *   result = (2^63)-1; OV = 1;\n * } else if (result < -2^63) {\n *   result = -2^63; OV = 1;\n * }\n * R[t_H].R[t_L] = result;\n * RV64:\n * result = Rs1 - Rs2;\n * if (result > (2^63)-1) {\n *   result = (2^63)-1; OV = 1;\n * } else if (result < -2^63) {\n *   result = -2^63; OV = 1;\n * }\n * Rd = result;\n * ~~~\n *\n * \\param [in]  a    long long type of value stored in a\n * \\param [in]  b    long long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_KSUB64(long long a, long long b)\n{\n    register long long result;\n    __ASM volatile(\"ksub64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.67. KSUB64 ===== */\n\n/* ===== Inline Function Start for 3.68. KSUBH ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q15_SAT_ALU\n * \\brief KSUBH (Signed Subtraction with Q15 Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KSUBH Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Subtract the signed lower 32-bit content of two registers with Q15 saturation.\n *\n * **Description**:\\n\n * The signed lower 32-bit content of Rs2 is subtracted from the signed lower 32-bit\n * content of Rs1. And the result is saturated to the 16-bit signed integer range of [-2^15, 2^15-1] and then\n * sign-extended and written to Rd. If saturation happens, this instruction sets the OV flag.\n *\n * **Operations**:\\n\n * ~~~\n * tmp = Rs1.W[0] - Rs2.W[0];\n * if (tmp > (2^15)-1) {\n *   res = (2^15)-1;\n *   OV = 1;\n * } else if (tmp < -2^15) {\n *   res = -2^15;\n *   OV = 1\n * } else {\n *   res = tmp;\n * }\n * Rd = SE(res[15:0]);\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KSUBH(int a, int b)\n{\n    register long result;\n    __ASM volatile(\"ksubh %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.68. KSUBH ===== */\n\n/* ===== Inline Function Start for 3.69. KSUBW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief KSUBW (Signed Subtraction with Q31 Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * KSUBW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Subtract the signed lower 32-bit content of two registers with Q31 saturation.\n *\n * **Description**:\\n\n * The signed lower 32-bit content of Rs2 is subtracted from the signed lower 32-bit\n * content of Rs1. And the result is saturated to the 32-bit signed integer range of [-2^31, 2^31-1] and then\n * sign-extened and written to Rd. If saturation happens, this instruction sets the OV flag.\n *\n * **Operations**:\\n\n * ~~~\n * tmp = Rs1.W[0] - Rs2.W[0];\n * if (tmp > (2^31)-1) {\n *   res = (2^31)-1;\n *   OV = 1;\n * } else if (tmp < -2^31) {\n * res = -2^31;\n *   OV = 1\n * } else {\n *   res = tmp;\n * }\n * Rd = res[31:0]; // RV32\n * Rd = SE(res[31:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KSUBW(int a, int b)\n{\n    register long result;\n    __ASM volatile(\"ksubw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.69. KSUBW ===== */\n\n/* ===== Inline Function Start for 3.70.1. KWMMUL ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC\n * \\brief KWMMUL (SIMD Saturating MSW Signed Multiply Word & Double)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KWMMUL Rd, Rs1, Rs2\n * KWMMUL.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of two registers, shift the results left 1-bit,\n * saturate, and write the most significant 32-bit results to a register. The `.u` form additionally\n * rounds up the multiplication results from the most signification discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the 32-bit elements of Rs1 with the 32-bit elements of Rs2. It then shifts\n * the multiplication results one bit to the left and takes the most significant 32-bit results. If the\n * shifted result is greater than 2^31-1, it is saturated to 2^31-1 and the OV flag is set to 1. The final element\n * result is written to Rd. The 32-bit elements of Rs1 and Rs2 are treated as signed integers. The `.u`\n * form of the instruction additionally rounds up the 64-bit multiplication results by adding a 1 to bit\n * 30 before the shift and saturation operations.\n *\n * **Operations**:\\n\n * ~~~\n * if ((0x80000000 != Rs1.W[x]) | (0x80000000 != Rs2.W[x])) {\n *   Mres[x][63:0] = Rs1.W[x] * Rs2.W[x];\n *   if (`.u` form) {\n *     Round[x][33:0] = Mres[x][63:30] + 1;\n *     Rd.W[x] = Round[x][32:1];\n *   } else {\n *     Rd.W[x] = Mres[x][62:31];\n *   }\n * } else {\n *   Rd.W[x] = 0x7fffffff;\n *   OV = 1;\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KWMMUL(long a, long b)\n{\n    register long result;\n    __ASM volatile(\"kwmmul %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.70.1. KWMMUL ===== */\n\n/* ===== Inline Function Start for 3.70.2. KWMMUL.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC\n * \\brief KWMMUL.u (SIMD Saturating MSW Signed Multiply Word & Double with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * KWMMUL Rd, Rs1, Rs2\n * KWMMUL.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of two registers, shift the results left 1-bit,\n * saturate, and write the most significant 32-bit results to a register. The `.u` form additionally\n * rounds up the multiplication results from the most signification discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the 32-bit elements of Rs1 with the 32-bit elements of Rs2. It then shifts\n * the multiplication results one bit to the left and takes the most significant 32-bit results. If the\n * shifted result is greater than 2^31-1, it is saturated to 2^31-1 and the OV flag is set to 1. The final element\n * result is written to Rd. The 32-bit elements of Rs1 and Rs2 are treated as signed integers. The `.u`\n * form of the instruction additionally rounds up the 64-bit multiplication results by adding a 1 to bit\n * 30 before the shift and saturation operations.\n *\n * **Operations**:\\n\n * ~~~\n * if ((0x80000000 != Rs1.W[x]) | (0x80000000 != Rs2.W[x])) {\n *   Mres[x][63:0] = Rs1.W[x] * Rs2.W[x];\n *   if (`.u` form) {\n *     Round[x][33:0] = Mres[x][63:30] + 1;\n *     Rd.W[x] = Round[x][32:1];\n *   } else {\n *     Rd.W[x] = Mres[x][62:31];\n *   }\n * } else {\n *   Rd.W[x] = 0x7fffffff;\n *   OV = 1;\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KWMMUL_U(long a, long b)\n{\n    register long result;\n    __ASM volatile(\"kwmmul.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.70.2. KWMMUL.u ===== */\n\n/* ===== Inline Function Start for 3.71. MADDR32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief MADDR32 (Multiply and Add to 32-Bit Word)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * MADDR32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit contents of two registers and add the lower 32-bit multiplication result\n * to the 32-bit content of a destination register. Write the final result back to the destination register.\n *\n * **Description**:\\n\n * This instruction multiplies the lower 32-bit content of Rs1 with that of Rs2. It adds the\n * lower 32-bit multiplication result to the lower 32-bit content of Rd and writes the final result (RV32)\n * or sign-extended result (RV64) back to Rd. The contents of Rs1 and Rs2 can be either signed or\n * unsigned integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Mresult = Rs1 * Rs2;\n * Rd = Rd + Mresult.W[0];\n * RV64:\n * Mresult = Rs1.W[0] * Rs2.W[0];\n * tres[31:0] = Rd.W[0] + Mresult.W[0];\n * Rd = SE64(tres[31:0]);\n * ~~~\n *\n * \\param [in]  t    unsigned long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_MADDR32(unsigned long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"maddr32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.71. MADDR32 ===== */\n\n/* ===== Inline Function Start for 3.72. MAXW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION\n * \\brief MAXW (32-bit Signed Word Maximum)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * MAXW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Get the larger value from the 32-bit contents of two general registers.\n *\n * **Description**:\\n\n * This instruction compares two signed 32-bit integers stored in Rs1 and Rs2, picks the\n * larger value as the result, and writes the result to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs1.W[0] >= Rs2.W[0]) {\n *   Rd = SE(Rs1.W[0]);\n * } else {\n *   Rd = SE(Rs2.W[0]);\n * }\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_MAXW(int a, int b)\n{\n    register long result;\n    __ASM volatile(\"maxw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.72. MAXW ===== */\n\n/* ===== Inline Function Start for 3.73. MINW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION\n * \\brief MINW (32-bit Signed Word Minimum)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * MINW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Get the smaller value from the 32-bit contents of two general registers.\n *\n * **Description**:\\n\n * This instruction compares two signed 32-bit integers stored in Rs1 and Rs2, picks the\n * smaller value as the result, and writes the result to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs1.W[0] >= Rs2.W[0]) { Rd = SE(Rs2.W[0]); } else { Rd = SE(Rs1.W[0]); }\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_MINW(int a, int b)\n{\n    register long result;\n    __ASM volatile(\"minw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.73. MINW ===== */\n\n/* ===== Inline Function Start for 3.74. MSUBR32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief MSUBR32 (Multiply and Subtract from 32-Bit Word)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * MSUBR32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit contents of two registers and subtract the lower 32-bit multiplication\n * result from the 32-bit content of a destination register. Write the final result back to the destination\n * register.\n *\n * **Description**:\\n\n * This instruction multiplies the lower 32-bit content of Rs1 with that of Rs2, subtracts\n * the lower 32-bit multiplication result from the lower 32-bit content of Rd, then writes the final\n * result (RV32) or sign-extended result (RV64) back to Rd. The contents of Rs1 and Rs2 can be either\n * signed or unsigned integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Mresult = Rs1 * Rs2;\n * Rd = Rd - Mresult.W[0];\n * RV64:\n * Mresult = Rs1.W[0] * Rs2.W[0];\n * tres[31:0] = Rd.W[0] - Mresult.W[0];\n * Rd = SE64(tres[31:0]);\n * ~~~\n *\n * \\param [in]  t    unsigned long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_MSUBR32(unsigned long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"msubr32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.74. MSUBR32 ===== */\n\n/* ===== Inline Function Start for 3.75. MULR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION\n * \\brief MULR64 (Multiply Word Unsigned to 64-bit Data)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * MULR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit unsigned integer contents of two registers and write the 64-bit result.\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit content of Rs1 with that of Rs2 and writes the 64-bit\n * multiplication result to an even/odd pair of registers containing Rd. Rd(4,1) index d determines the\n * even/odd pair group of the two registers. Specifically, the register pair includes register 2d and\n * 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n * The lower 32-bit contents of Rs1 and Rs2 are treated as unsigned integers.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the lower 32-bit content of Rs1 with that of Rs2 and writes the 64-bit\n * multiplication result to Rd.\n * The lower 32-bit contents of Rs1 and Rs2 are treated as unsigned integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Mresult = CONCAT(1`b0,Rs1) u* CONCAT(1`b0,Rs2);\n * R[Rd(4,1).1(0)][31:0] = Mresult[63:32];\n * R[Rd(4,1).0(0)][31:0] = Mresult[31:0];\n * RV64:\n * Rd = Mresult[63:0];\n * Mresult = CONCAT(1`b0,Rs1.W[0]) u* CONCAT(1`b0,Rs2.W[0]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_MULR64(unsigned long a, unsigned long b)\n{\n    register unsigned long long result;\n    __ASM volatile(\"mulr64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.75. MULR64 ===== */\n\n/* ===== Inline Function Start for 3.76. MULSR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION\n * \\brief MULSR64 (Multiply Word Signed to 64-bit Data)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * MULSR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit signed integer contents of two registers and write the 64-bit result.\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the lower 32-bit content of Rs1 with the lower 32-bit content of Rs2 and\n * writes the 64-bit multiplication result to an even/odd pair of registers containing Rd. Rd(4,1) index d\n * determines the even/odd pair group of the two registers. Specifically, the register pair includes\n * register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n * The lower 32-bit contents of Rs1 and Rs2 are treated as signed integers.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the lower 32-bit content of Rs1 with the lower 32-bit content of Rs2 and\n * writes the 64-bit multiplication result to Rd.\n * The lower 32-bit contents of Rs1 and Rs2 are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Mresult = Ra s* Rb;\n * R[Rd(4,1).1(0)][31:0] = Mresult[63:32];\n * R[Rd(4,1).0(0)][31:0] = Mresult[31:0];\n * RV64:\n * Mresult = Ra.W[0] s* Rb.W[0];\n * Rd = Mresult[63:0];\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_MULSR64(long a, long b)\n{\n    register long long result;\n    __ASM volatile(\"mulsr64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.76. MULSR64 ===== */\n\n/* ===== Inline Function Start for 3.77. PBSAD ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_MISC\n * \\brief PBSAD (Parallel Byte Sum of Absolute Difference)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * PBSAD Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Calculate the sum of absolute difference of unsigned 8-bit data elements.\n *\n * **Description**:\\n\n * This instruction subtracts the un-signed 8-bit elements of Rs2 from those of Rs1. Then\n * it adds the absolute value of each difference together and writes the result to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * absdiff[x] = ABS(Rs1.B[x] - Rs2.B[x]);\n * Rd = SUM(absdiff[x]);\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PBSAD(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"pbsad %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.77. PBSAD ===== */\n\n/* ===== Inline Function Start for 3.78. PBSADA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_MISC\n * \\brief PBSADA (Parallel Byte Sum of Absolute Difference Accum)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * PBSADA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Calculate the sum of absolute difference of four unsigned 8-bit data elements and\n * accumulate it into a register.\n *\n * **Description**:\\n\n * This instruction subtracts the un-signed 8-bit elements of Rs2 from those of Rs1. It\n * then adds the absolute value of each difference together along with the content of Rd and writes the\n * accumulated result back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * absdiff[x] = ABS(Rs1.B[x] - Rs2.B[x]);\n * Rd = Rd + SUM(absdiff[x]);\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  t    unsigned long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PBSADA(unsigned long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"pbsada %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.78. PBSADA ===== */\n\n/* ===== Inline Function Start for 3.79.1. PKBB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_PACK\n * \\brief PKBB16 (Pack Two 16-bit Data from Both Bottom Half)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * PKBB16 Rd, Rs1, Rs2\n * PKBT16 Rd, Rs1, Rs2\n * PKTT16 Rd, Rs1, Rs2\n * PKTB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Pack 16-bit data from 32-bit chunks in two registers.\n * * PKBB16: bottom.bottom\n * * PKBT16 bottom.top\n * * PKTT16 top.top\n * * PKTB16 top.bottom\n *\n * **Description**:\\n\n * (PKBB16) moves Rs1.W[x][15:0] to Rd.W[x][31:16] and moves Rs2.W[x] [15:0] to\n * Rd.W[x] [15:0].\n * (PKBT16) moves Rs1.W[x] [15:0] to Rd.W[x] [31:16] and moves Rs2.W[x] [31:16] to Rd.W[x] [15:0].\n * (PKTT16) moves Rs1.W[x] [31:16] to Rd.W[x] [31:16] and moves Rs2.W[x] [31:16] to Rd.W[x] [15:0].\n * (PKTB16) moves Rs1.W[x] [31:16] to Rd.W[x] [31:16] and moves Rs2.W[x] [15:0] to Rd.W[x] [15:0].\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][15:0], Rs2.W[x][15:0]); // PKBB16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][15:0], Rs2.W[x][31:16]); // PKBT16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][31:16], Rs2.W[x][15:0]); // PKTB16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][31:16], Rs2.W[x][31:16]); // PKTT16\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PKBB16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"pkbb16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.79.1. PKBB16 ===== */\n\n/* ===== Inline Function Start for 3.79.2. PKBT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_PACK\n * \\brief PKBT16 (Pack Two 16-bit Data from Bottom and Top Half)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * PKBB16 Rd, Rs1, Rs2\n * PKBT16 Rd, Rs1, Rs2\n * PKTT16 Rd, Rs1, Rs2\n * PKTB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Pack 16-bit data from 32-bit chunks in two registers.\n * * PKBB16: bottom.bottom\n * * PKBT16 bottom.top\n * * PKTT16 top.top\n * * PKTB16 top.bottom\n *\n * **Description**:\\n\n * (PKBB16) moves Rs1.W[x][15:0] to Rd.W[x][31:16] and moves Rs2.W[x] [15:0] to\n * Rd.W[x] [15:0].\n * (PKBT16) moves Rs1.W[x] [15:0] to Rd.W[x] [31:16] and moves Rs2.W[x] [31:16] to Rd.W[x] [15:0].\n * (PKTT16) moves Rs1.W[x] [31:16] to Rd.W[x] [31:16] and moves Rs2.W[x] [31:16] to Rd.W[x] [15:0].\n * (PKTB16) moves Rs1.W[x] [31:16] to Rd.W[x] [31:16] and moves Rs2.W[x] [15:0] to Rd.W[x] [15:0].\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][15:0], Rs2.W[x][15:0]); // PKBB16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][15:0], Rs2.W[x][31:16]); // PKBT16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][31:16], Rs2.W[x][15:0]); // PKTB16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][31:16], Rs2.W[x][31:16]); // PKTT16\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PKBT16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"pkbt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.79.2. PKBT16 ===== */\n\n/* ===== Inline Function Start for 3.79.3. PKTT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_PACK\n * \\brief PKTT16 (Pack Two 16-bit Data from Both Top Half)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * PKBB16 Rd, Rs1, Rs2\n * PKBT16 Rd, Rs1, Rs2\n * PKTT16 Rd, Rs1, Rs2\n * PKTB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Pack 16-bit data from 32-bit chunks in two registers.\n * * PKBB16: bottom.bottom\n * * PKBT16 bottom.top\n * * PKTT16 top.top\n * * PKTB16 top.bottom\n *\n * **Description**:\\n\n * (PKBB16) moves Rs1.W[x][15:0] to Rd.W[x][31:16] and moves Rs2.W[x] [15:0] to\n * Rd.W[x] [15:0].\n * (PKBT16) moves Rs1.W[x] [15:0] to Rd.W[x] [31:16] and moves Rs2.W[x] [31:16] to Rd.W[x] [15:0].\n * (PKTT16) moves Rs1.W[x] [31:16] to Rd.W[x] [31:16] and moves Rs2.W[x] [31:16] to Rd.W[x] [15:0].\n * (PKTB16) moves Rs1.W[x] [31:16] to Rd.W[x] [31:16] and moves Rs2.W[x] [15:0] to Rd.W[x] [15:0].\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][15:0], Rs2.W[x][15:0]); // PKBB16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][15:0], Rs2.W[x][31:16]); // PKBT16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][31:16], Rs2.W[x][15:0]); // PKTB16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][31:16], Rs2.W[x][31:16]); // PKTT16\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PKTT16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"pktt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.79.3. PKTT16 ===== */\n\n/* ===== Inline Function Start for 3.79.4. PKTB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_PACK\n * \\brief PKTB16 (Pack Two 16-bit Data from Top and Bottom Half)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * PKBB16 Rd, Rs1, Rs2\n * PKBT16 Rd, Rs1, Rs2\n * PKTT16 Rd, Rs1, Rs2\n * PKTB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Pack 16-bit data from 32-bit chunks in two registers.\n * * PKBB16: bottom.bottom\n * * PKBT16 bottom.top\n * * PKTT16 top.top\n * * PKTB16 top.bottom\n *\n * **Description**:\\n\n * (PKBB16) moves Rs1.W[x][15:0] to Rd.W[x][31:16] and moves Rs2.W[x] [15:0] to\n * Rd.W[x] [15:0].\n * (PKBT16) moves Rs1.W[x] [15:0] to Rd.W[x] [31:16] and moves Rs2.W[x] [31:16] to Rd.W[x] [15:0].\n * (PKTT16) moves Rs1.W[x] [31:16] to Rd.W[x] [31:16] and moves Rs2.W[x] [31:16] to Rd.W[x] [15:0].\n * (PKTB16) moves Rs1.W[x] [31:16] to Rd.W[x] [31:16] and moves Rs2.W[x] [15:0] to Rd.W[x] [15:0].\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][15:0], Rs2.W[x][15:0]); // PKBB16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][15:0], Rs2.W[x][31:16]); // PKBT16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][31:16], Rs2.W[x][15:0]); // PKTB16\n * Rd.W[x][31:0] = CONCAT(Rs1.W[x][31:16], Rs2.W[x][31:16]); // PKTT16\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PKTB16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"pktb16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.79.4. PKTB16 ===== */\n\n/* ===== Inline Function Start for 3.80. RADD8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief RADD8 (SIMD 8-bit Signed Halving Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * RADD8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed integer element additions simultaneously. The element results are halved\n * to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 8-bit signed integer elements in Rs1 with the 8-bit signed\n * integer elements in Rs2. The results are first arithmetically right-shifted by 1 bit and then written to\n * Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Rs1 = 0x7F, Rs2 = 0x7F, Rd = 0x7F\n * * Rs1 = 0x80, Rs2 = 0x80, Rd = 0x80\n * * Rs1 = 0x40, Rs2 = 0x80, Rd = 0xE0\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] + Rs2.B[x]) s>> 1; for RV32: x=3...0, for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RADD8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"radd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.80. RADD8 ===== */\n\n/* ===== Inline Function Start for 3.81. RADD16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief RADD16 (SIMD 16-bit Signed Halving Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * RADD16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element additions simultaneously. The results are halved to avoid\n * overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit signed integer elements in Rs1 with the 16-bit signed\n * integer elements in Rs2. The results are first arithmetically right-shifted by 1 bit and then written to\n * Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Rs1 = 0x7FFF, Rs2 = 0x7FFF, Rd = 0x7FFF\n * * Rs1 = 0x8000, Rs2 = 0x8000, Rd = 0x8000\n * * Rs1 = 0x4000, Rs2 = 0x8000, Rd = 0xE000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] + Rs2.H[x]) s>> 1; for RV32: x=1...0, for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RADD16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"radd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.81. RADD16 ===== */\n\n/* ===== Inline Function Start for 3.82. RADD64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief RADD64 (64-bit Signed Halving Addition)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * RADD64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add two 64-bit signed integers. The result is halved to avoid overflow or saturation.\n *\n * **RV32 Description**:\\n\n * This instruction adds the 64-bit signed integer of an even/odd pair of registers\n * specified by Rs1(4,1) with the 64-bit signed integer of an even/odd pair of registers specified by\n * Rs2(4,1). The 64-bit addition result is first arithmetically right-shifted by 1 bit and then written to an\n * even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., value d, determines the even/odd pair group of two registers. Specifically, the register\n * pair includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction adds the 64-bit signed integer in Rs1 with the 64-bit signed\n * integer in Rs2. The 64-bit addition result is first arithmetically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * a_L = CONCAT(Rs1(4,1),1'b0); a_H = CONCAT(Rs1(4,1),1'b1);\n * b_L = CONCAT(Rs2(4,1),1'b0); b_H = CONCAT(Rs2(4,1),1'b1);\n * R[t_H].R[t_L] = (R[a_H].R[a_L] + R[b_H].R[b_L]) s>> 1;\n * RV64:\n * Rd = (Rs1 + Rs2) s>> 1;\n * ~~~\n *\n * \\param [in]  a    long long type of value stored in a\n * \\param [in]  b    long long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_RADD64(long long a, long long b)\n{\n    register long long result;\n    __ASM volatile(\"radd64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.82. RADD64 ===== */\n\n/* ===== Inline Function Start for 3.83. RADDW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION\n * \\brief RADDW (32-bit Signed Halving Addition)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * RADDW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add 32-bit signed integers and the results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the first 32-bit signed integer in Rs1 with the first 32-bit signed\n * integer in Rs2. The result is first arithmetically right-shifted by 1 bit and then sign-extended and\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Rs1 = 0x7FFFFFFF, Rs2 = 0x7FFFFFFF, Rd = 0x7FFFFFFF\n * * Rs1 = 0x80000000, Rs2 = 0x80000000, Rd = 0x80000000\n * * Rs1 = 0x40000000, Rs2 = 0x80000000, Rd = 0xE0000000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Rd[31:0] = (Rs1[31:0] + Rs2[31:0]) s>> 1;\n * RV64:\n * resw[31:0] = (Rs1[31:0] + Rs2[31:0]) s>> 1;\n * Rd[63:0] = SE(resw[31:0]);\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_RADDW(int a, int b)\n{\n    register long result;\n    __ASM volatile(\"raddw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.83. RADDW ===== */\n\n/* ===== Inline Function Start for 3.84. RCRAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief RCRAS16 (SIMD 16-bit Signed Halving Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * RCRAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element addition and 16-bit signed integer element subtraction in\n * a 32-bit chunk simultaneously. Operands are from crossed positions in 32-bit chunks. The results\n * are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit signed integer element in [31:16] of 32-bit chunks in\n * Rs1 with the 16-bit signed integer element in [15:0] of 32-bit chunks in Rs2, and subtracts the 16-bit\n * signed integer element in [31:16] of 32-bit chunks in Rs2 from the 16-bit signed integer element in\n * [15:0] of 32-bit chunks in Rs1. The element results are first arithmetically right-shifted by 1 bit and\n * then written to [31:16] of 32-bit chunks in Rd and [15:0] of 32-bit chunks in Rd.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `RADD16` and `RSUB16` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = (Rs1.W[x][31:16] + Rs2.W[x][15:0]) s>> 1;\n * Rd.W[x][15:0] = (Rs1.W[x][15:0] - Rs2.W[x][31:16]) s>> 1;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RCRAS16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"rcras16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.84. RCRAS16 ===== */\n\n/* ===== Inline Function Start for 3.85. RCRSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief RCRSA16 (SIMD 16-bit Signed Halving Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * RCRSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element subtraction and 16-bit signed integer element addition in\n * a 32-bit chunk simultaneously. Operands are from crossed positions in 32-bit chunks. The results\n * are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit signed integer element in [15:0] of 32-bit chunks\n * in Rs2 from the 16-bit signed integer element in [31:16] of 32-bit chunks in Rs1, and adds the 16-bit\n * signed element integer in [15:0] of 32-bit chunks in Rs1 with the 16-bit signed integer element in\n * [31:16] of 32-bit chunks in Rs2. The two results are first arithmetically right-shifted by 1 bit and\n * then written to [31:16] of 32-bit chunks in Rd and [15:0] of 32-bit chunks in Rd.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `RADD16` and `RSUB16` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = (Rs1.W[x][31:16] - Rs2.W[x][15:0]) s>> 1;\n * Rd.W[x][15:0] = (Rs1.W[x][15:0] + Rs2.W[x][31:16]) s>> 1;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RCRSA16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"rcrsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.85. RCRSA16 ===== */\n\n/* ===== Inline Function Start for 3.86. RDOV ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_OV_FLAG_SC\n * \\brief RDOV (Read OV flag)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * RDOV Rd  # pseudo mnemonic\n * ~~~\n *\n * **Purpose**:\\n\n * This pseudo instruction is an alias to `CSRR Rd, ucode` instruction which maps to the real\n * instruction of `CSRRS Rd, ucode, x0`.\n *\n *\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RDOV(void)\n{\n    register unsigned long result;\n    __ASM volatile(\"rdov %0\" : \"=r\"(result));\n    return result;\n}\n/* ===== Inline Function End for 3.86. RDOV ===== */\n\n/* ===== Inline Function Start for 3.87. RSTAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief RSTAS16 (SIMD 16-bit Signed Halving Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * RSTAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element addition and 16-bit signed integer element subtraction in\n * a 32-bit chunk simultaneously. Operands are from corresponding positions in 32-bit chunks. The\n * results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit signed integer element in [31:16] of 32-bit chunks in\n * Rs1 with the 16-bit signed integer element in [31:16] of 32-bit chunks in Rs2, and subtracts the 16-bit\n * signed integer element in [15:0] of 32-bit chunks in Rs2 from the 16-bit signed integer element in\n * [15:0] of 32-bit chunks in Rs1. The element results are first arithmetically right-shifted by 1 bit and\n * then written to [31:16] of 32-bit chunks in Rd and [15:0] of 32-bit chunks in Rd.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `RADD16` and `RSUB16` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = (Rs1.W[x][31:16] + Rs2.W[x][31:16]) s>> 1;\n * Rd.W[x][15:0] = (Rs1.W[x][15:0] - Rs2.W[x][15:0]) s>> 1;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RSTAS16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"rstas16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.87. RSTAS16 ===== */\n\n/* ===== Inline Function Start for 3.88. RSTSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief RSTSA16 (SIMD 16-bit Signed Halving Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * RSTSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element subtraction and 16-bit signed integer element addition in\n * a 32-bit chunk simultaneously. Operands are from corresponding positions in 32-bit chunks. The\n * results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit signed integer element in [31:16] of 32-bit chunks\n * in Rs2 from the 16-bit signed integer element in [31:16] of 32-bit chunks in Rs1, and adds the 16-bit\n * signed element integer in [15:0] of 32-bit chunks in Rs1 with the 16-bit signed integer element in\n * [15:0] of 32-bit chunks in Rs2. The two results are first arithmetically right-shifted by 1 bit and then\n * written to [31:16] of 32-bit chunks in Rd and [15:0] of 32-bit chunks in Rd.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `RADD16` and `RSUB16` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = (Rs1.W[x][31:16] - Rs2.W[x][31:16]) s>> 1;\n * Rd.W[x][15:0] = (Rs1.W[x][15:0] + Rs2.W[x][15:0]) s>> 1;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RSTSA16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"rstsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.88. RSTSA16 ===== */\n\n/* ===== Inline Function Start for 3.89. RSUB8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief RSUB8 (SIMD 8-bit Signed Halving Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * RSUB8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed integer element subtractions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 8-bit signed integer elements in Rs2 from the 8-bit\n * signed integer elements in Rs1. The results are first arithmetically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Rs1 = 0x7F, Rs2 = 0x80, Rd = 0x7F\n * * Rs1 = 0x80, Rs2 = 0x7F, Rd = 0x80\n * * Rs1= 0x80, Rs2 = 0x40, Rd = 0xA0\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] - Rs2.B[x]) s>> 1;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RSUB8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"rsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.89. RSUB8 ===== */\n\n/* ===== Inline Function Start for 3.90. RSUB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief RSUB16 (SIMD 16-bit Signed Halving Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * RSUB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element subtractions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit signed integer elements in Rs2 from the 16-bit\n * signed integer elements in Rs1. The results are first arithmetically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7FFF, Rb = 0x8000, Rt = 0x7FFF\n * * Ra = 0x8000, Rb = 0x7FFF, Rt = 0x8000\n * * Ra = 0x8000, Rb = 0x4000, Rt = 0xA000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] - Rs2.H[x]) s>> 1;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RSUB16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"rsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.90. RSUB16 ===== */\n\n/* ===== Inline Function Start for 3.91. RSUB64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief RSUB64 (64-bit Signed Halving Subtraction)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * RSUB64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Perform a 64-bit signed integer subtraction. The result is halved to avoid overflow or\n * saturation.\n *\n * **RV32 Description**:\\n\n * This instruction subtracts the 64-bit signed integer of an even/odd pair of\n * registers specified by Rb(4,1) from the 64-bit signed integer of an even/odd pair of registers\n * specified by Ra(4,1). The subtraction result is first arithmetically right-shifted by 1 bit and then\n * written to an even/odd pair of registers specified by Rt(4,1).\n * Rx(4,1), i.e., value d, determines the even/odd pair group of two registers. Specifically, the register\n * pair includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction subtracts the 64-bit signed integer in Rs2 from the 64-bit signed\n * integer in Rs1. The 64-bit subtraction result is first arithmetically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * a_L = CONCAT(Rs1(4,1),1'b0); a_H = CONCAT(Rs1(4,1),1'b1);\n * b_L = CONCAT(Rs2(4,1),1'b0); b_H = CONCAT(Rs2(4,1),1'b1);\n * R[t_H].R[t_L] = (R[a_H].R[a_L] - R[b_H].R[b_L]) s>> 1;\n * RV64:\n * Rd = (Rs1 - Rs2) s>> 1;\n * ~~~\n *\n * \\param [in]  a    long long type of value stored in a\n * \\param [in]  b    long long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_RSUB64(long long a, long long b)\n{\n    register long long result;\n    __ASM volatile(\"rsub64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.91. RSUB64 ===== */\n\n/* ===== Inline Function Start for 3.92. RSUBW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION\n * \\brief RSUBW (32-bit Signed Halving Subtraction)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * RSUBW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Subtract 32-bit signed integers and the result is halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the first 32-bit signed integer in Rs2 from the first 32-bit\n * signed integer in Rs1. The result is first arithmetically right-shifted by 1 bit and then sign-extended\n * and written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Rs1 = 0x7FFFFFFF, Rs2 = 0x80000000, Rd = 0x7FFFFFFF\n * * Rs1 = 0x80000000, Rs2 = 0x7FFFFFFF, Rd = 0x80000000\n * * Rs1 = 0x80000000, Rs2 = 0x40000000, Rd = 0xA0000000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Rd[31:0] = (Rs1[31:0] - Rs2[31:0]) s>> 1;\n * RV64:\n * resw[31:0] = (Rs1[31:0] - Rs2[31:0]) s>> 1;\n * Rd[63:0] = SE(resw[31:0]);\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_RSUBW(int a, int b)\n{\n    register long result;\n    __ASM volatile(\"rsubw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.92. RSUBW ===== */\n\n/* ===== Inline Function Start for 3.93. SCLIP8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief SCLIP8 (SIMD 8-bit Signed Clip Value)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SCLIP8 Rd, Rs1, imm3u[2:0]\n * ~~~\n *\n * **Purpose**:\\n\n * Limit the 8-bit signed integer elements of a register into a signed range simultaneously.\n *\n * **Description**:\\n\n * This instruction limits the 8-bit signed integer elements stored in Rs1 into a signed\n * integer range between 2^imm3u-1 and -2^imm3u, and writes the limited results to Rd. For example, if\n * imm3u is 3, the 8-bit input values should be saturated between 7 and -8. If saturation is performed,\n * set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.B[x];\n * if (src > (2^imm3u)-1) {\n *   src = (2^imm3u)-1;\n *   OV = 1;\n * } else if (src < -2^imm3u) {\n *   src = -2^imm3u;\n *   OV = 1;\n * }\n * Rd.B[x] = src\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SCLIP8(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"sclip8 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.93. SCLIP8 ===== */\n\n/* ===== Inline Function Start for 3.94. SCLIP16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief SCLIP16 (SIMD 16-bit Signed Clip Value)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SCLIP16 Rd, Rs1, imm4u[3:0]\n * ~~~\n *\n * **Purpose**:\\n\n * Limit the 16-bit signed integer elements of a register into a signed range simultaneously.\n *\n * **Description**:\\n\n * This instruction limits the 16-bit signed integer elements stored in Rs1 into a signed\n * integer range between 2imm4u-1 and -2imm4u, and writes the limited results to Rd. For example, if\n * imm4u is 3, the 16-bit input values should be saturated between 7 and -8. If saturation is performed,\n * set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.H[x];\n * if (src > (2^imm4u)-1) {\n *   src = (2^imm4u)-1;\n *   OV = 1;\n * } else if (src < -2^imm4u) {\n *   src = -2^imm4u;\n *   OV = 1;\n * }\n * Rd.H[x] = src\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SCLIP16(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"sclip16 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.94. SCLIP16 ===== */\n\n/* ===== Inline Function Start for 3.95. SCLIP32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_MISC\n * \\brief SCLIP32 (SIMD 32-bit Signed Clip Value)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SCLIP32 Rd, Rs1, imm5u[4:0]\n * ~~~\n *\n * **Purpose**:\\n\n * Limit the 32-bit signed integer elements of a register into a signed range simultaneously.\n *\n * **Description**:\\n\n * This instruction limits the 32-bit signed integer elements stored in Rs1 into a signed\n * integer range between 2imm5u-1 and -2imm5u, and writes the limited results to Rd. For example, if\n * imm5u is 3, the 32-bit input values should be saturated between 7 and -8. If saturation is performed,\n * set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.W[x];\n * if (src > (2^imm5u)-1) {\n *   src = (2^imm5u)-1;\n *   OV = 1;\n * } else if (src < -2^imm5u) {\n *   src = -2^imm5u;\n *   OV = 1;\n * }\n * Rd.W[x] = src\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n#define __RV_SCLIP32(a, b)    \\\n    ({    \\\n        register long result;    \\\n        register long __a = (long)(a);    \\\n        __ASM volatile(\"sclip32 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.95. SCLIP32 ===== */\n\n/* ===== Inline Function Start for 3.96. SCMPLE8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_CMP\n * \\brief SCMPLE8 (SIMD 8-bit Signed Compare Less Than & Equal)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SCMPLE8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed integer elements less than & equal comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit signed integer elements in Rs1 with the 8-bit\n * signed integer elements in Rs2 to see if the one in Rs1 is less than or equal to the one in Rs2. If it is\n * true, the result is 0xFF; otherwise, the result is 0x0. The element comparison results are written to\n * Rd\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] {le} Rs2.B[x])? 0xff : 0x0;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SCMPLE8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"scmple8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.96. SCMPLE8 ===== */\n\n/* ===== Inline Function Start for 3.97. SCMPLE16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_CMP\n * \\brief SCMPLE16 (SIMD 16-bit Signed Compare Less Than & Equal)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SCMPLE16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer elements less than & equal comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit signed integer elements in Rs1 with the 16-bit\n * signed integer elements in Rs2 to see if the one in Rs1 is less than or equal to the one in Rs2. If it is\n * true, the result is 0xFFFF; otherwise, the result is 0x0. The element comparison results are written\n * to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] {le} Rs2.H[x])? 0xffff : 0x0;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SCMPLE16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"scmple16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.97. SCMPLE16 ===== */\n\n/* ===== Inline Function Start for 3.98. SCMPLT8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_CMP\n * \\brief SCMPLT8 (SIMD 8-bit Signed Compare Less Than)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SCMPLT8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed integer elements less than comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit signed integer elements in Rs1 with the 8-bit\n * signed integer elements in Rs2 to see if the one in Rs1 is less than the one in Rs2. If it is true, the\n * result is 0xFF; otherwise, the result is 0x0. The element comparison results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] < Rs2.B[x])? 0xff : 0x0;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SCMPLT8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"scmplt8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.98. SCMPLT8 ===== */\n\n/* ===== Inline Function Start for 3.99. SCMPLT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_CMP\n * \\brief SCMPLT16 (SIMD 16-bit Signed Compare Less Than)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SCMPLT16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer elements less than comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit signed integer elements in Rs1 with the two 16-\n * bit signed integer elements in Rs2 to see if the one in Rs1 is less than the one in Rs2. If it is true, the\n * result is 0xFFFF; otherwise, the result is 0x0. The element comparison results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] < Rs2.H[x])? 0xffff : 0x0;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SCMPLT16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"scmplt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.99. SCMPLT16 ===== */\n\n/* ===== Inline Function Start for 3.100. SLL8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SLL8 (SIMD 8-bit Shift Left Logical)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SLL8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical left shift operations simultaneously. The shift amount is a\n * variable from a GPR.\n *\n * **Description**:\\n\n * The 8-bit elements in Rs1 are left-shifted logically. And the results are written to Rd.\n * The shifted out bits are filled with zero and the shift amount is specified by the low-order 3-bits of\n * the value in the Rs2 register.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[2:0];\n * Rd.B[x] = Rs1.B[x] << sa;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SLL8(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"sll8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.100. SLL8 ===== */\n\n/* ===== Inline Function Start for 3.101. SLLI8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SLLI8 (SIMD 8-bit Shift Left Logical Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SLLI8 Rd, Rs1, imm3u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical left shift operations simultaneously. The shift amount is an\n * immediate value.\n *\n * **Description**:\\n\n * The 8-bit elements in Rs1 are left-shifted logically. And the results are written to Rd.\n * The shifted out bits are filled with zero and the shift amount is specified by the imm3u constant.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm3u[2:0];\n * Rd.B[x] = Rs1.B[x] << sa;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SLLI8(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"slli8 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.101. SLLI8 ===== */\n\n/* ===== Inline Function Start for 3.102. SLL16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SLL16 (SIMD 16-bit Shift Left Logical)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SLL16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical left shift operations simultaneously. The shift amount is a\n * variable from a GPR.\n *\n * **Description**:\\n\n * The 16-bit elements in Rs1 are left-shifted logically. And the results are written to Rd.\n * The shifted out bits are filled with zero and the shift amount is specified by the low-order 4-bits of\n * the value in the Rs2 register.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[3:0];\n * Rd.H[x] = Rs1.H[x] << sa;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SLL16(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"sll16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.102. SLL16 ===== */\n\n/* ===== Inline Function Start for 3.103. SLLI16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SLLI16 (SIMD 16-bit Shift Left Logical Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SLLI16 Rd, Rs1, imm4[3:0]\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit element logical left shift operations simultaneously. The shift amount is an\n * immediate value.\n *\n * **Description**:\\n\n * The 16-bit elements in Rs1 are left-shifted logically. The shifted out bits are filled with\n * zero and the shift amount is specified by the imm4[3:0] constant. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm4[3:0];\n * Rd.H[x] = Rs1.H[x] << sa;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SLLI16(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"slli16 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.103. SLLI16 ===== */\n\n/* ===== Inline Function Start for 3.104. SMAL ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMAL (Signed Multiply Halfs & Add 64-bit)\n * \\details\n * **Type**: Partial-SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMAL Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed bottom 16-bit content of the 32-bit elements of a register with the top\n * 16-bit content of the same 32-bit elements of the same register, and add the results with a 64-bit\n * value of an even/odd pair of registers (RV32) or a register (RV64). The addition result is written back\n * to another even/odd pair of registers (RV32) or a register (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the bottom 16-bit content of the lower 32-bit of Rs2 with the top 16-bit\n * content of the lower 32-bit of Rs2 and adds the result with the 64-bit value of an even/odd pair of\n * registers specified by Rs1(4,1). The 64-bit addition result is written back to an even/odd pair of\n * registers specified by Rd(4,1). The 16-bit values of Rs2, and the 64-bit value of the Rs1(4,1) register-\n * pair are treated as signed integers.\n * Rx(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the bottom 16-bit content of the 32-bit elements of Rs2 with the top 16-bit\n * content of the same 32-bit elements of Rs2 and adds the results with the 64-bit value of Rs1. The 64-\n * bit addition result is written back to Rd. The 16-bit values of Rs2, and the 64-bit value of Rs1 are\n * treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Mres[31:0] = Rs2.H[1] * Rs2.H[0];\n * Idx0 = CONCAT(Rs1(4,1),1'b0); Idx1 = CONCAT(Rs1(4,1),1'b1); +\n * Idx2 = CONCAT(Rd(4,1),1'b0); Idx3 = CONCAT(Rd(4,1),1'b1);\n * R[Idx3].R[Idx2] = R[Idx1].R[Idx0] + SE64(Mres[31:0]);\n * RV64:\n * Mres[0][31:0] = Rs2.W[0].H[1] * Rs2.W[0].H[0];\n * Mres[1][31:0] = Rs2.W[1].H[1] * Rs2.W[1].H[0];\n * Rd = Rs1 + SE64(Mres[1][31:0]) + SE64(Mres[0][31:0]);\n * ~~~\n *\n * \\param [in]  a    long long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMAL(long long a, unsigned long b)\n{\n    register long long result;\n    __ASM volatile(\"smal %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.104. SMAL ===== */\n\n/* ===== Inline Function Start for 3.105.1. SMALBB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMALBB (Signed Multiply Bottom Halfs & Add 64-bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMALBB Rd, Rs1, Rs2\n * SMALBT Rd, Rs1, Rs2\n * SMALTT Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of the 32-bit elements of a register with the 16-bit\n * content of the corresponding 32-bit elements of another register and add the results with a 64-bit\n * value of an even/odd pair of registers (RV32) or a register (RV64). The addition result is written back\n * to the register-pair (RV32) or the register (RV64).\n * * SMALBB: rt pair + bottom*bottom (all 32-bit elements)\n * * SMALBT rt pair + bottom*top (all 32-bit elements)\n * * SMALTT rt pair + top*top (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMALBB` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2.\n * For the `SMALBT` instruction, it multiplies the bottom 16-bit content of Rs1 with the top 16-bit\n * content of Rs2.\n * For the `SMALTT` instruction, it multiplies the top 16-bit content of Rs1 with the top 16-bit content\n * of Rs2.\n * The multiplication result is added with the 64-bit value of an even/odd pair of registers specified by\n * Rd(4,1). The 64-bit addition result is written back to the register-pair. The 16-bit values of Rs1 and\n * Rs2, and the 64-bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * For the `SMALBB` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2.\n * For the `SMALBT` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `SMALTT` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2.\n * The multiplication results are added with the 64-bit value of Rd. The 64-bit addition result is written\n * back to Rd. The 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Mres[31:0] = Rs1.H[0] * Rs2.H[0]; // SMALBB\n * Mres[31:0] = Rs1.H[0] * Rs2.H[1]; // SMALBT\n * Mres[31:0] = Rs1.H[1] * Rs2.H[1]; // SMALTT\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] + SE64(Mres[31:0]);\n * RV64:\n * // SMALBB\n * Mres[0][31:0] = Rs1.W[0].H[0] * Rs2.W[0].H[0];\n * Mres[1][31:0] = Rs1.W[1].H[0] * Rs2.W[1].H[0];\n * // SMALBT\n * Mres[0][31:0] = Rs1.W[0].H[0] * Rs2.W[0].H[1];\n * Mres[1][31:0] = Rs1.W[1].H[0] * Rs2.W[1].H[1];\n * // SMALTT\n * Mres[0][31:0] = Rs1.W[0].H[1] * Rs2.W[0].H[1];\n * Mres[1][31:0] = Rs1.W[1].H[1] * Rs2.W[1].H[1];\n * Rd = Rd + SE64(Mres[0][31:0]) + SE64(Mres[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMALBB(long long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"smalbb %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.105.1. SMALBB ===== */\n\n/* ===== Inline Function Start for 3.105.2. SMALBT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMALBT (Signed Multiply Bottom Half & Top Half & Add 64-bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMALBB Rd, Rs1, Rs2\n * SMALBT Rd, Rs1, Rs2\n * SMALTT Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of the 32-bit elements of a register with the 16-bit\n * content of the corresponding 32-bit elements of another register and add the results with a 64-bit\n * value of an even/odd pair of registers (RV32) or a register (RV64). The addition result is written back\n * to the register-pair (RV32) or the register (RV64).\n * * SMALBB: rt pair + bottom*bottom (all 32-bit elements)\n * * SMALBT rt pair + bottom*top (all 32-bit elements)\n * * SMALTT rt pair + top*top (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMALBB` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2.\n * For the `SMALBT` instruction, it multiplies the bottom 16-bit content of Rs1 with the top 16-bit\n * content of Rs2.\n * For the `SMALTT` instruction, it multiplies the top 16-bit content of Rs1 with the top 16-bit content\n * of Rs2.\n * The multiplication result is added with the 64-bit value of an even/odd pair of registers specified by\n * Rd(4,1). The 64-bit addition result is written back to the register-pair. The 16-bit values of Rs1 and\n * Rs2, and the 64-bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * For the `SMALBB` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2.\n * For the `SMALBT` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `SMALTT` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2.\n * The multiplication results are added with the 64-bit value of Rd. The 64-bit addition result is written\n * back to Rd. The 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Mres[31:0] = Rs1.H[0] * Rs2.H[0]; // SMALBB\n * Mres[31:0] = Rs1.H[0] * Rs2.H[1]; // SMALBT\n * Mres[31:0] = Rs1.H[1] * Rs2.H[1]; // SMALTT\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] + SE64(Mres[31:0]);\n * RV64:\n * // SMALBB\n * Mres[0][31:0] = Rs1.W[0].H[0] * Rs2.W[0].H[0];\n * Mres[1][31:0] = Rs1.W[1].H[0] * Rs2.W[1].H[0];\n * // SMALBT\n * Mres[0][31:0] = Rs1.W[0].H[0] * Rs2.W[0].H[1];\n * Mres[1][31:0] = Rs1.W[1].H[0] * Rs2.W[1].H[1];\n * // SMALTT\n * Mres[0][31:0] = Rs1.W[0].H[1] * Rs2.W[0].H[1];\n * Mres[1][31:0] = Rs1.W[1].H[1] * Rs2.W[1].H[1];\n * Rd = Rd + SE64(Mres[0][31:0]) + SE64(Mres[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMALBT(long long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"smalbt %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.105.2. SMALBT ===== */\n\n/* ===== Inline Function Start for 3.105.3. SMALTT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMALTT (Signed Multiply Top Halfs & Add 64-bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMALBB Rd, Rs1, Rs2\n * SMALBT Rd, Rs1, Rs2\n * SMALTT Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of the 32-bit elements of a register with the 16-bit\n * content of the corresponding 32-bit elements of another register and add the results with a 64-bit\n * value of an even/odd pair of registers (RV32) or a register (RV64). The addition result is written back\n * to the register-pair (RV32) or the register (RV64).\n * * SMALBB: rt pair + bottom*bottom (all 32-bit elements)\n * * SMALBT rt pair + bottom*top (all 32-bit elements)\n * * SMALTT rt pair + top*top (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMALBB` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2.\n * For the `SMALBT` instruction, it multiplies the bottom 16-bit content of Rs1 with the top 16-bit\n * content of Rs2.\n * For the `SMALTT` instruction, it multiplies the top 16-bit content of Rs1 with the top 16-bit content\n * of Rs2.\n * The multiplication result is added with the 64-bit value of an even/odd pair of registers specified by\n * Rd(4,1). The 64-bit addition result is written back to the register-pair. The 16-bit values of Rs1 and\n * Rs2, and the 64-bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * For the `SMALBB` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2.\n * For the `SMALBT` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `SMALTT` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2.\n * The multiplication results are added with the 64-bit value of Rd. The 64-bit addition result is written\n * back to Rd. The 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * Mres[31:0] = Rs1.H[0] * Rs2.H[0]; // SMALBB\n * Mres[31:0] = Rs1.H[0] * Rs2.H[1]; // SMALBT\n * Mres[31:0] = Rs1.H[1] * Rs2.H[1]; // SMALTT\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] + SE64(Mres[31:0]);\n * RV64:\n * // SMALBB\n * Mres[0][31:0] = Rs1.W[0].H[0] * Rs2.W[0].H[0];\n * Mres[1][31:0] = Rs1.W[1].H[0] * Rs2.W[1].H[0];\n * // SMALBT\n * Mres[0][31:0] = Rs1.W[0].H[0] * Rs2.W[0].H[1];\n * Mres[1][31:0] = Rs1.W[1].H[0] * Rs2.W[1].H[1];\n * // SMALTT\n * Mres[0][31:0] = Rs1.W[0].H[1] * Rs2.W[0].H[1];\n * Mres[1][31:0] = Rs1.W[1].H[1] * Rs2.W[1].H[1];\n * Rd = Rd + SE64(Mres[0][31:0]) + SE64(Mres[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMALTT(long long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"smaltt %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.105.3. SMALTT ===== */\n\n/* ===== Inline Function Start for 3.106.1. SMALDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMALDA (Signed Multiply Two Halfs and Two Adds 64-bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMALDA Rd, Rs1, Rs2\n * SMALXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * adds the two 32-bit results and the 64-bit value of an even/odd pair of registers together.\n * * SMALDA: rt pair+ top*top + bottom*bottom (all 32-bit elements)\n * * SMALXDA: rt pair+ top*bottom + bottom*top (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMALDA` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and then adds the result to the result of multiplying the top 16-bit content of Rs1 with\n * the top 16-bit content of Rs2 with unlimited precision.\n * For the `SMALXDA` instruction, it multiplies the top 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and then adds the result to the result of multiplying the bottom 16-bit content of Rs1\n * with the top 16-bit content of Rs2 with unlimited precision.\n * The result is added to the 64-bit value of an even/odd pair of registers specified by Rd(4,1). The 64-\n * bit addition result is written back to the register-pair. The 16-bit values of Rs1 and Rs2, and the 64-\n * bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * For the `SMALDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then adds the result to the result of\n * multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the 32-\n * bit elements of Rs2 with unlimited precision.\n * For the `SMALXDA` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then adds the result to the result of\n * multiplying the bottom 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the\n * 32-bit elements of Rs2 with unlimited precision.\n * The results are added to the 64-bit value of Rd. The 64-bit addition result is written back to Rd. The\n * 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * // SMALDA\n * Mres0[31:0] = (Rs1.H[0] * Rs2.H[0]);\n * Mres1[31:0] = (Rs1.H[1] * Rs2.H[1]);\n * // SMALXDA\n * Mres0[31:0] = (Rs1.H[0] * Rs2.H[1]);\n * Mres1[31:0] = (Rs1.H[1] * Rs2.H[0]);\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] + SE64(Mres0[31:0]) + SE64(Mres1[31:0]);\n * RV64:\n * // SMALDA\n * Mres0[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[0]);\n * Mres1[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[1]);\n * Mres0[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[1].H[0]);\n * Mres1[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[1].H[1]);\n * // SMALXDA\n * Mres0[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[1]);\n * Mres1[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[0]);\n * Mres0[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[1].H[1]);\n * Mres1[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[1].H[0]);\n * Rd = Rd + SE64(Mres0[0][31:0]) + SE64(Mres1[0][31:0]) + SE64(Mres0[1][31:0]) +\n * SE64(Mres1[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMALDA(long long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"smalda %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.106.1. SMALDA ===== */\n\n/* ===== Inline Function Start for 3.106.2. SMALXDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMALXDA (Signed Crossed Multiply Two Halfs and Two Adds 64-bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMALDA Rd, Rs1, Rs2\n * SMALXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * adds the two 32-bit results and the 64-bit value of an even/odd pair of registers together.\n * * SMALDA: rt pair+ top*top + bottom*bottom (all 32-bit elements)\n * * SMALXDA: rt pair+ top*bottom + bottom*top (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMALDA` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and then adds the result to the result of multiplying the top 16-bit content of Rs1 with\n * the top 16-bit content of Rs2 with unlimited precision.\n * For the `SMALXDA` instruction, it multiplies the top 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and then adds the result to the result of multiplying the bottom 16-bit content of Rs1\n * with the top 16-bit content of Rs2 with unlimited precision.\n * The result is added to the 64-bit value of an even/odd pair of registers specified by Rd(4,1). The 64-\n * bit addition result is written back to the register-pair. The 16-bit values of Rs1 and Rs2, and the 64-\n * bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * For the `SMALDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then adds the result to the result of\n * multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the 32-\n * bit elements of Rs2 with unlimited precision.\n * For the `SMALXDA` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then adds the result to the result of\n * multiplying the bottom 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the\n * 32-bit elements of Rs2 with unlimited precision.\n * The results are added to the 64-bit value of Rd. The 64-bit addition result is written back to Rd. The\n * 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * RV32:\n * // SMALDA\n * Mres0[31:0] = (Rs1.H[0] * Rs2.H[0]);\n * Mres1[31:0] = (Rs1.H[1] * Rs2.H[1]);\n * // SMALXDA\n * Mres0[31:0] = (Rs1.H[0] * Rs2.H[1]);\n * Mres1[31:0] = (Rs1.H[1] * Rs2.H[0]);\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] + SE64(Mres0[31:0]) + SE64(Mres1[31:0]);\n * RV64:\n * // SMALDA\n * Mres0[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[0]);\n * Mres1[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[1]);\n * Mres0[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[1].H[0]);\n * Mres1[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[1].H[1]);\n * // SMALXDA\n * Mres0[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[1]);\n * Mres1[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[0]);\n * Mres0[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[1].H[1]);\n * Mres1[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[1].H[0]);\n * Rd = Rd + SE64(Mres0[0][31:0]) + SE64(Mres1[0][31:0]) + SE64(Mres0[1][31:0]) +\n * SE64(Mres1[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMALXDA(long long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"smalxda %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.106.2. SMALXDA ===== */\n\n/* ===== Inline Function Start for 3.107.1. SMALDS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMALDS (Signed Multiply Two Halfs & Subtract & Add 64-bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMALDS Rd, Rs1, Rs2\n * SMALDRS Rd, Rs1, Rs2\n * SMALXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * perform a subtraction operation between the two 32-bit results. Then add the subtraction result to\n * the 64-bit value of an even/odd pair of registers (RV32) or a register (RV64). The addition result is\n * written back to the register-pair.\n * * SMALDS: rt pair + (top*top - bottom*bottom) (all 32-bit elements)\n * * SMALDRS: rt pair + (bottom*bottom - top*top) (all 32-bit elements)\n * * SMALXDS: rt pair + (top*bottom - bottom*top) (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMALDS` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and then subtracts the result from the result of multiplying the top 16-bit content of\n * Rs1 with the top 16-bit content of Rs2.\n * For the `SMALDRS` instruction, it multiplies the top 16-bit content of Rs1 with the top 16-bit content\n * of Rs2 and then subtracts the result from the result of multiplying the bottom 16-bit content of Rs1\n * with the bottom 16-bit content of Rs2.\n * For the `SMALXDS` instruction, it multiplies the bottom 16-bit content of Rs1 with the top 16-bit\n * content of Rs2 and then subtracts the result from the result of multiplying the top 16-bit content of\n * Rs1 with the bottom 16-bit content of Rs2.\n * The subtraction result is then added to the 64-bit value of an even/odd pair of registers specified by\n * Rd(4,1). The 64-bit addition result is written back to the register-pair. The 16-bit values of Rs1 and\n * Rs2, and the 64-bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * For the `SMALDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content\n * of the 32-bit elements of Rs2.\n * For the `SMALDRS` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit content of\n * the 32-bit elements of Rs2.\n * For the `SMALXDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit\n * content of the 32-bit elements of Rs2.\n * The subtraction results are then added to the 64-bit value of Rd. The 64-bit addition result is written\n * back to Rd. The 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * Mres[31:0] = (Rs1.H[1] * Rs2.H[1]) - (Rs1.H[0] * Rs2.H[0]); // SMALDS\n * Mres[31:0] = (Rs1.H[0] * Rs2.H[0]) - (Rs1.H[1] * Rs2.H[1]); // SMALDRS\n * Mres[31:0] = (Rs1.H[1] * Rs2.H[0]) - (Rs1.H[0] * Rs2.H[1]); // SMALXDS\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] + SE64(Mres[31:0]);\n * * RV64:\n * // SMALDS\n * Mres[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[1]) - (Rs1.W[0].H[0] * Rs2.W[0].H[0]);\n * Mres[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[0].H[1]) - (Rs1.W[1].H[0] * Rs2.W[1].H[0]);\n * // SMALDRS\n * Mres[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[0]) - (Rs1.W[0].H[1] * Rs2.W[0].H[1]);\n * Mres[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[0].H[0]) - (Rs1.W[1].H[1] * Rs2.W[1].H[1]);\n * // SMALXDS\n * Mres[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[0]) - (Rs1.W[0].H[0] * Rs2.W[0].H[1]);\n * Mres[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[0].H[0]) - (Rs1.W[1].H[0] * Rs2.W[1].H[1]);\n * Rd = Rd + SE64(Mres[0][31:0]) + SE64(Mres[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMALDS(long long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"smalds %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.107.1. SMALDS ===== */\n\n/* ===== Inline Function Start for 3.107.2. SMALDRS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMALDRS (Signed Multiply Two Halfs & Reverse Subtract & Add 64- bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMALDS Rd, Rs1, Rs2\n * SMALDRS Rd, Rs1, Rs2\n * SMALXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * perform a subtraction operation between the two 32-bit results. Then add the subtraction result to\n * the 64-bit value of an even/odd pair of registers (RV32) or a register (RV64). The addition result is\n * written back to the register-pair.\n * * SMALDS: rt pair + (top*top - bottom*bottom) (all 32-bit elements)\n * * SMALDRS: rt pair + (bottom*bottom - top*top) (all 32-bit elements)\n * * SMALXDS: rt pair + (top*bottom - bottom*top) (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMALDS` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and then subtracts the result from the result of multiplying the top 16-bit content of\n * Rs1 with the top 16-bit content of Rs2.\n * For the `SMALDRS` instruction, it multiplies the top 16-bit content of Rs1 with the top 16-bit content\n * of Rs2 and then subtracts the result from the result of multiplying the bottom 16-bit content of Rs1\n * with the bottom 16-bit content of Rs2.\n * For the `SMALXDS` instruction, it multiplies the bottom 16-bit content of Rs1 with the top 16-bit\n * content of Rs2 and then subtracts the result from the result of multiplying the top 16-bit content of\n * Rs1 with the bottom 16-bit content of Rs2.\n * The subtraction result is then added to the 64-bit value of an even/odd pair of registers specified by\n * Rd(4,1). The 64-bit addition result is written back to the register-pair. The 16-bit values of Rs1 and\n * Rs2, and the 64-bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * For the `SMALDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content\n * of the 32-bit elements of Rs2.\n * For the `SMALDRS` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit content of\n * the 32-bit elements of Rs2.\n * For the `SMALXDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit\n * content of the 32-bit elements of Rs2.\n * The subtraction results are then added to the 64-bit value of Rd. The 64-bit addition result is written\n * back to Rd. The 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * Mres[31:0] = (Rs1.H[1] * Rs2.H[1]) - (Rs1.H[0] * Rs2.H[0]); // SMALDS\n * Mres[31:0] = (Rs1.H[0] * Rs2.H[0]) - (Rs1.H[1] * Rs2.H[1]); // SMALDRS\n * Mres[31:0] = (Rs1.H[1] * Rs2.H[0]) - (Rs1.H[0] * Rs2.H[1]); // SMALXDS\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] + SE64(Mres[31:0]);\n * * RV64:\n * // SMALDS\n * Mres[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[1]) - (Rs1.W[0].H[0] * Rs2.W[0].H[0]);\n * Mres[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[0].H[1]) - (Rs1.W[1].H[0] * Rs2.W[1].H[0]);\n * // SMALDRS\n * Mres[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[0]) - (Rs1.W[0].H[1] * Rs2.W[0].H[1]);\n * Mres[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[0].H[0]) - (Rs1.W[1].H[1] * Rs2.W[1].H[1]);\n * // SMALXDS\n * Mres[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[0]) - (Rs1.W[0].H[0] * Rs2.W[0].H[1]);\n * Mres[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[0].H[0]) - (Rs1.W[1].H[0] * Rs2.W[1].H[1]);\n * Rd = Rd + SE64(Mres[0][31:0]) + SE64(Mres[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMALDRS(long long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"smaldrs %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.107.2. SMALDRS ===== */\n\n/* ===== Inline Function Start for 3.107.3. SMALXDS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMALXDS (Signed Crossed Multiply Two Halfs & Subtract & Add 64- bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMALDS Rd, Rs1, Rs2\n * SMALDRS Rd, Rs1, Rs2\n * SMALXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * perform a subtraction operation between the two 32-bit results. Then add the subtraction result to\n * the 64-bit value of an even/odd pair of registers (RV32) or a register (RV64). The addition result is\n * written back to the register-pair.\n * * SMALDS: rt pair + (top*top - bottom*bottom) (all 32-bit elements)\n * * SMALDRS: rt pair + (bottom*bottom - top*top) (all 32-bit elements)\n * * SMALXDS: rt pair + (top*bottom - bottom*top) (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMALDS` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and then subtracts the result from the result of multiplying the top 16-bit content of\n * Rs1 with the top 16-bit content of Rs2.\n * For the `SMALDRS` instruction, it multiplies the top 16-bit content of Rs1 with the top 16-bit content\n * of Rs2 and then subtracts the result from the result of multiplying the bottom 16-bit content of Rs1\n * with the bottom 16-bit content of Rs2.\n * For the `SMALXDS` instruction, it multiplies the bottom 16-bit content of Rs1 with the top 16-bit\n * content of Rs2 and then subtracts the result from the result of multiplying the top 16-bit content of\n * Rs1 with the bottom 16-bit content of Rs2.\n * The subtraction result is then added to the 64-bit value of an even/odd pair of registers specified by\n * Rd(4,1). The 64-bit addition result is written back to the register-pair. The 16-bit values of Rs1 and\n * Rs2, and the 64-bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * For the `SMALDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content\n * of the 32-bit elements of Rs2.\n * For the `SMALDRS` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit content of\n * the 32-bit elements of Rs2.\n * For the `SMALXDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit\n * content of the 32-bit elements of Rs2.\n * The subtraction results are then added to the 64-bit value of Rd. The 64-bit addition result is written\n * back to Rd. The 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * Mres[31:0] = (Rs1.H[1] * Rs2.H[1]) - (Rs1.H[0] * Rs2.H[0]); // SMALDS\n * Mres[31:0] = (Rs1.H[0] * Rs2.H[0]) - (Rs1.H[1] * Rs2.H[1]); // SMALDRS\n * Mres[31:0] = (Rs1.H[1] * Rs2.H[0]) - (Rs1.H[0] * Rs2.H[1]); // SMALXDS\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] + SE64(Mres[31:0]);\n * * RV64:\n * // SMALDS\n * Mres[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[1]) - (Rs1.W[0].H[0] * Rs2.W[0].H[0]);\n * Mres[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[0].H[1]) - (Rs1.W[1].H[0] * Rs2.W[1].H[0]);\n * // SMALDRS\n * Mres[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[0]) - (Rs1.W[0].H[1] * Rs2.W[0].H[1]);\n * Mres[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[0].H[0]) - (Rs1.W[1].H[1] * Rs2.W[1].H[1]);\n * // SMALXDS\n * Mres[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[0]) - (Rs1.W[0].H[0] * Rs2.W[0].H[1]);\n * Mres[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[0].H[0]) - (Rs1.W[1].H[0] * Rs2.W[1].H[1]);\n * Rd = Rd + SE64(Mres[0][31:0]) + SE64(Mres[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMALXDS(long long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"smalxds %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.107.3. SMALXDS ===== */\n\n/* ===== Inline Function Start for 3.108. SMAR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB\n * \\brief SMAR64 (Signed Multiply and Add to 64-Bit Data)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMAR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit signed elements in two registers and add the 64-bit multiplication\n * result to the 64-bit signed data of a pair of registers (RV32) or a register (RV64). The result is written\n * back to the pair of registers (RV32) or a register (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit signed data of Rs1 with that of Rs2. It adds\n * the 64-bit multiplication result to the 64-bit signed data of an even/odd pair of registers specified by\n * Rd(4,1). The addition result is written back to the even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the 32-bit signed elements of Rs1 with that of Rs2. It\n * adds the 64-bit multiplication results to the 64-bit signed data of Rd. The addition result is written\n * back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H].R[t_L] = R[t_H].R[t_L] + (Rs1 * Rs2);\n * * RV64:\n * Rd = Rd + (Rs1.W[0] * Rs2.W[0]) + (Rs1.W[1] * Rs2.W[1]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMAR64(long long t, long a, long b)\n{\n    __ASM volatile(\"smar64 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.108. SMAR64 ===== */\n\n/* ===== Inline Function Start for 3.109. SMAQA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_8B_MULT_32B_ADD\n * \\brief SMAQA (Signed Multiply Four Bytes with 32-bit Adds)\n * \\details\n * **Type**: Partial-SIMD (Reduction)\n *\n * **Syntax**:\\n\n * ~~~\n * SMAQA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do four signed 8-bit multiplications from 32-bit chunks of two registers; and then adds\n * the four 16-bit results and the content of corresponding 32-bit chunks of a third register together.\n *\n * **Description**:\\n\n * This instruction multiplies the four signed 8-bit elements of 32-bit chunks of Rs1 with the four\n * signed 8-bit elements of 32-bit chunks of Rs2 and then adds the four results together with the signed\n * content of the corresponding 32-bit chunks of Rd. The final results are written back to the\n * corresponding 32-bit chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rd.W[x] +\n *    (Rs1.W[x].B[3] s* Rs2.W[x].B[3]) + (Rs1.W[x].B[2] s* Rs2.W[x].B[2]) +\n *    (Rs1.W[x].B[1] s* Rs2.W[x].B[1]) + (Rs1.W[x].B[0] s* Rs2.W[x].B[0]);\n * Rd.W[x] = res[x];\n * for RV32: x=0,\n * for RV64: x=1,0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMAQA(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"smaqa %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.109. SMAQA ===== */\n\n/* ===== Inline Function Start for 3.110. SMAQA.SU ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_8B_MULT_32B_ADD\n * \\brief SMAQA.SU (Signed and Unsigned Multiply Four Bytes with 32-bit Adds)\n * \\details\n * **Type**: Partial-SIMD (Reduction)\n *\n * **Syntax**:\\n\n * ~~~\n * SMAQA.SU Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do four `signed x unsigned` 8-bit multiplications from 32-bit chunks of two registers; and\n * then adds the four 16-bit results and the content of corresponding 32-bit chunks of a third register\n * together.\n *\n * **Description**:\\n\n * This instruction multiplies the four signed 8-bit elements of 32-bit chunks of Rs1 with the four\n * unsigned 8-bit elements of 32-bit chunks of Rs2 and then adds the four results together with the\n * signed content of the corresponding 32-bit chunks of Rd. The final results are written back to the\n * corresponding 32-bit chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rd.W[x] +\n *    (Rs1.W[x].B[3] su* Rs2.W[x].B[3]) + (Rs1.W[x].B[2] su* Rs2.W[x].B[2]) +\n *    (Rs1.W[x].B[1] su* Rs2.W[x].B[1]) + (Rs1.W[x].B[0] su* Rs2.W[x].B[0]);\n * Rd.W[x] = res[x];\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMAQA_SU(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"smaqa.su %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.110. SMAQA.SU ===== */\n\n/* ===== Inline Function Start for 3.111. SMAX8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief SMAX8 (SIMD 8-bit Signed Maximum)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMAX8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed integer elements finding maximum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit signed integer elements in Rs1 with the 8-bit\n * signed integer elements in Rs2 and selects the numbers that is greater than the other one. The\n * selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] > Rs2.B[x])? Rs1.B[x] : Rs2.B[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SMAX8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"smax8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.111. SMAX8 ===== */\n\n/* ===== Inline Function Start for 3.112. SMAX16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief SMAX16 (SIMD 16-bit Signed Maximum)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMAX16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer elements finding maximum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit signed integer elements in Rs1 with the 16-bit\n * signed integer elements in Rs2 and selects the numbers that is greater than the other one. The\n * selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] > Rs2.H[x])? Rs1.H[x] : Rs2.H[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SMAX16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"smax16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.112. SMAX16 ===== */\n\n/* ===== Inline Function Start for 3.113.1. SMBB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief SMBB16 (SIMD Signed Multiply Bottom Half & Bottom Half)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMBB16 Rd, Rs1, Rs2\n * SMBT16 Rd, Rs1, Rs2\n * SMTT16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of the 32-bit elements of a register with the signed 16-\n * bit content of the 32-bit elements of another register and write the result to a third register.\n * * SMBB16: W[x].bottom*W[x].bottom\n * * SMBT16: W[x].bottom *W[x].top\n * * SMTT16: W[x].top * W[x].top\n *\n * **Description**:\\n\n * For the `SMBB16` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2.\n * For the `SMBT16` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `SMTT16` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2.\n * The multiplication results are written to Rd. The 16-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = Rs1.W[x].H[0] * Rs2.W[x].H[0]; // SMBB16\n * Rd.W[x] = Rs1.W[x].H[0] * Rs2.W[x].H[1]; // SMBT16\n * Rd.W[x] = Rs1.W[x].H[1] * Rs2.W[x].H[1]; // SMTT16\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMBB16(unsigned long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"smbb16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.113.1. SMBB16 ===== */\n\n/* ===== Inline Function Start for 3.113.2. SMBT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief SMBT16 (SIMD Signed Multiply Bottom Half & Top Half)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMBB16 Rd, Rs1, Rs2\n * SMBT16 Rd, Rs1, Rs2\n * SMTT16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of the 32-bit elements of a register with the signed 16-\n * bit content of the 32-bit elements of another register and write the result to a third register.\n * * SMBB16: W[x].bottom*W[x].bottom\n * * SMBT16: W[x].bottom *W[x].top\n * * SMTT16: W[x].top * W[x].top\n *\n * **Description**:\\n\n * For the `SMBB16` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2.\n * For the `SMBT16` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `SMTT16` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2.\n * The multiplication results are written to Rd. The 16-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = Rs1.W[x].H[0] * Rs2.W[x].H[0]; // SMBB16\n * Rd.W[x] = Rs1.W[x].H[0] * Rs2.W[x].H[1]; // SMBT16\n * Rd.W[x] = Rs1.W[x].H[1] * Rs2.W[x].H[1]; // SMTT16\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMBT16(unsigned long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"smbt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.113.2. SMBT16 ===== */\n\n/* ===== Inline Function Start for 3.113.3. SMTT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief SMTT16 (SIMD Signed Multiply Top Half & Top Half)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMBB16 Rd, Rs1, Rs2\n * SMBT16 Rd, Rs1, Rs2\n * SMTT16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 16-bit content of the 32-bit elements of a register with the signed 16-\n * bit content of the 32-bit elements of another register and write the result to a third register.\n * * SMBB16: W[x].bottom*W[x].bottom\n * * SMBT16: W[x].bottom *W[x].top\n * * SMTT16: W[x].top * W[x].top\n *\n * **Description**:\\n\n * For the `SMBB16` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2.\n * For the `SMBT16` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `SMTT16` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2.\n * The multiplication results are written to Rd. The 16-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = Rs1.W[x].H[0] * Rs2.W[x].H[0]; // SMBB16\n * Rd.W[x] = Rs1.W[x].H[0] * Rs2.W[x].H[1]; // SMBT16\n * Rd.W[x] = Rs1.W[x].H[1] * Rs2.W[x].H[1]; // SMTT16\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMTT16(unsigned long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"smtt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.113.3. SMTT16 ===== */\n\n/* ===== Inline Function Start for 3.114.1. SMDS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief SMDS (SIMD Signed Multiply Two Halfs and Subtract)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMDS Rd, Rs1, Rs2\n * SMDRS Rd, Rs1, Rs2\n * SMXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * perform a subtraction operation between the two 32-bit results.\n * * SMDS: top*top - bottom*bottom (per 32-bit element)\n * * SMDRS: bottom*bottom - top*top (per 32-bit element)\n * * SMXDS: top*bottom - bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `SMDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1 with\n * the bottom 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result\n * of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the\n * 32-bit elements of Rs2.\n * For the `SMDRS` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit content of\n * the 32-bit elements of Rs2.\n * For the `SMXDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit\n * content of the 32-bit elements of Rs2.\n * The subtraction result is written to the corresponding 32-bit element of Rd. The 16-bit contents of\n * multiplication are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * * SMDS:\n * Rd.W[x] = (Rs1.W[x].H[1] * Rs2.W[x].H[1]) - (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * * SMDRS:\n * Rd.W[x] = (Rs1.W[x].H[0] * Rs2.W[x].H[0]) - (Rs1.W[x].H[1] * Rs2.W[x].H[1]);\n * * SMXDS:\n * Rd.W[x] = (Rs1.W[x].H[1] * Rs2.W[x].H[0]) - (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMDS(unsigned long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"smds %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.114.1. SMDS ===== */\n\n/* ===== Inline Function Start for 3.114.2. SMDRS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief SMDRS (SIMD Signed Multiply Two Halfs and Reverse Subtract)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMDS Rd, Rs1, Rs2\n * SMDRS Rd, Rs1, Rs2\n * SMXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * perform a subtraction operation between the two 32-bit results.\n * * SMDS: top*top - bottom*bottom (per 32-bit element)\n * * SMDRS: bottom*bottom - top*top (per 32-bit element)\n * * SMXDS: top*bottom - bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `SMDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1 with\n * the bottom 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result\n * of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the\n * 32-bit elements of Rs2.\n * For the `SMDRS` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit content of\n * the 32-bit elements of Rs2.\n * For the `SMXDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit\n * content of the 32-bit elements of Rs2.\n * The subtraction result is written to the corresponding 32-bit element of Rd. The 16-bit contents of\n * multiplication are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * * SMDS:\n * Rd.W[x] = (Rs1.W[x].H[1] * Rs2.W[x].H[1]) - (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * * SMDRS:\n * Rd.W[x] = (Rs1.W[x].H[0] * Rs2.W[x].H[0]) - (Rs1.W[x].H[1] * Rs2.W[x].H[1]);\n * * SMXDS:\n * Rd.W[x] = (Rs1.W[x].H[1] * Rs2.W[x].H[0]) - (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMDRS(unsigned long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"smdrs %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.114.2. SMDRS ===== */\n\n/* ===== Inline Function Start for 3.114.3. SMXDS ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_32B_ADDSUB\n * \\brief SMXDS (SIMD Signed Crossed Multiply Two Halfs and Subtract)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMDS Rd, Rs1, Rs2\n * SMDRS Rd, Rs1, Rs2\n * SMXDS Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * perform a subtraction operation between the two 32-bit results.\n * * SMDS: top*top - bottom*bottom (per 32-bit element)\n * * SMDRS: bottom*bottom - top*top (per 32-bit element)\n * * SMXDS: top*bottom - bottom*top (per 32-bit element)\n *\n * **Description**:\\n\n * For the `SMDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1 with\n * the bottom 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result\n * of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the top 16-bit content of the\n * 32-bit elements of Rs2.\n * For the `SMDRS` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the result of\n * multiplying the bottom 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit content of\n * the 32-bit elements of Rs2.\n * For the `SMXDS` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the top 16-bit content of the 32-bit elements of Rs2 and then subtracts the result from the\n * result of multiplying the top 16-bit content of the 32-bit elements of Rs1 with the bottom 16-bit\n * content of the 32-bit elements of Rs2.\n * The subtraction result is written to the corresponding 32-bit element of Rd. The 16-bit contents of\n * multiplication are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * * SMDS:\n * Rd.W[x] = (Rs1.W[x].H[1] * Rs2.W[x].H[1]) - (Rs1.W[x].H[0] * Rs2.W[x].H[0]);\n * * SMDRS:\n * Rd.W[x] = (Rs1.W[x].H[0] * Rs2.W[x].H[0]) - (Rs1.W[x].H[1] * Rs2.W[x].H[1]);\n * * SMXDS:\n * Rd.W[x] = (Rs1.W[x].H[1] * Rs2.W[x].H[0]) - (Rs1.W[x].H[0] * Rs2.W[x].H[1]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMXDS(unsigned long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"smxds %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.114.3. SMXDS ===== */\n\n/* ===== Inline Function Start for 3.115. SMIN8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief SMIN8 (SIMD 8-bit Signed Minimum)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMIN8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed integer elements finding minimum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit signed integer elements in Rs1 with the 8-bit\n * signed integer elements in Rs2 and selects the numbers that is less than the other one. The selected\n * results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] < Rs2.B[x])? Rs1.B[x] : Rs2.B[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SMIN8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"smin8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.115. SMIN8 ===== */\n\n/* ===== Inline Function Start for 3.116. SMIN16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief SMIN16 (SIMD 16-bit Signed Minimum)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMIN16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer elements finding minimum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit signed integer elements in Rs1 with the 16-bit\n * signed integer elements in Rs2 and selects the numbers that is less than the other one. The selected\n * results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] < Rs2.H[x])? Rs1.H[x] : Rs2.H[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SMIN16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"smin16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.116. SMIN16 ===== */\n\n/* ===== Inline Function Start for 3.117.1. SMMUL ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC\n * \\brief SMMUL (SIMD MSW Signed Multiply Word)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMMUL Rd, Rs1, Rs2\n * SMMUL.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit signed integer elements of two registers and write the most significant\n * 32-bit results to the corresponding 32-bit elements of a register. The `.u` form performs an\n * additional rounding up operation on the multiplication results before taking the most significant\n * 32-bit part of the results.\n *\n * **Description**:\\n\n * This instruction multiplies the 32-bit elements of Rs1 with the 32-bit elements of Rs2 and writes the\n * most significant 32-bit multiplication results to the corresponding 32-bit elements of Rd. The 32-bit\n * elements of Rs1 and Rs2 are treated as signed integers. The `.u` form of the instruction rounds up\n * the most significant 32-bit of the 64-bit multiplication results by adding a 1 to bit 31 of the results.\n * * For `smmul/RV32` instruction, it is an alias to `mulh/RV32` instruction.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][63:0] = Rs1.W[x] * Rs2.W[x];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][63:31] + 1;\n *   Rd.W[x] = Round[x][32:1];\n * } else {\n *   Rd.W[x] = Mres[x][63:32];\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMMUL(long a, long b)\n{\n    register long result;\n    __ASM volatile(\"smmul %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.117.1. SMMUL ===== */\n\n/* ===== Inline Function Start for 3.117.2. SMMUL.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X32_MAC\n * \\brief SMMUL.u (SIMD MSW Signed Multiply Word with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMMUL Rd, Rs1, Rs2\n * SMMUL.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit signed integer elements of two registers and write the most significant\n * 32-bit results to the corresponding 32-bit elements of a register. The `.u` form performs an\n * additional rounding up operation on the multiplication results before taking the most significant\n * 32-bit part of the results.\n *\n * **Description**:\\n\n * This instruction multiplies the 32-bit elements of Rs1 with the 32-bit elements of Rs2 and writes the\n * most significant 32-bit multiplication results to the corresponding 32-bit elements of Rd. The 32-bit\n * elements of Rs1 and Rs2 are treated as signed integers. The `.u` form of the instruction rounds up\n * the most significant 32-bit of the 64-bit multiplication results by adding a 1 to bit 31 of the results.\n * * For `smmul/RV32` instruction, it is an alias to `mulh/RV32` instruction.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][63:0] = Rs1.W[x] * Rs2.W[x];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][63:31] + 1;\n *   Rd.W[x] = Round[x][32:1];\n * } else {\n *   Rd.W[x] = Mres[x][63:32];\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMMUL_U(long a, long b)\n{\n    register long result;\n    __ASM volatile(\"smmul.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.117.2. SMMUL.u ===== */\n\n/* ===== Inline Function Start for 3.118.1. SMMWB ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief SMMWB (SIMD MSW Signed Multiply Word and Bottom Half)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMMWB Rd, Rs1, Rs2\n * SMMWB.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the bottom 16-bit of the\n * corresponding 32-bit elements of another register, and write the most significant 32-bit results to\n * the corresponding 32-bit elements of a register. The `.u` form rounds up the results from the most\n * significant discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed bottom 16-bit content\n * of the corresponding 32-bit elements of Rs2 and writes the most significant 32-bit multiplication\n * results to the corresponding 32-bit elements of Rd. The `.u` form of the instruction rounds up the\n * most significant 32-bit of the 48-bit multiplication results by adding a 1 to bit 15 of the results.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][47:0] = Rs1.W[x] * Rs2.W[x].H[0];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][47:15] + 1;\n *   Rd.W[x] = Round[x][32:1];\n * } else {\n *   Rd.W[x] = Mres[x][47:16];\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMMWB(long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"smmwb %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.118.1. SMMWB ===== */\n\n/* ===== Inline Function Start for 3.118.2. SMMWB.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief SMMWB.u (SIMD MSW Signed Multiply Word and Bottom Half with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMMWB Rd, Rs1, Rs2\n * SMMWB.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the bottom 16-bit of the\n * corresponding 32-bit elements of another register, and write the most significant 32-bit results to\n * the corresponding 32-bit elements of a register. The `.u` form rounds up the results from the most\n * significant discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the signed bottom 16-bit content\n * of the corresponding 32-bit elements of Rs2 and writes the most significant 32-bit multiplication\n * results to the corresponding 32-bit elements of Rd. The `.u` form of the instruction rounds up the\n * most significant 32-bit of the 48-bit multiplication results by adding a 1 to bit 15 of the results.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][47:0] = Rs1.W[x] * Rs2.W[x].H[0];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][47:15] + 1;\n *   Rd.W[x] = Round[x][32:1];\n * } else {\n *   Rd.W[x] = Mres[x][47:16];\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMMWB_U(long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"smmwb.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.118.2. SMMWB.u ===== */\n\n/* ===== Inline Function Start for 3.119.1. SMMWT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief SMMWT (SIMD MSW Signed Multiply Word and Top Half)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMMWT Rd, Rs1, Rs2\n * SMMWT.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the top 16-bit of the\n * corresponding 32-bit elements of another register, and write the most significant 32-bit results to\n * the corresponding 32-bit elements of a register. The `.u` form rounds up the results from the most\n * significant discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the top signed 16-bit content of\n * the corresponding 32-bit elements of Rs2 and writes the most significant 32-bit multiplication\n * results to the corresponding 32-bit elements of Rd. The `.u` form of the instruction rounds up the\n * most significant 32-bit of the 48-bit multiplication results by adding a 1 to bit 15 of the results.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][47:0] = Rs1.W[x] * Rs2.W[x].H[1];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][47:15] + 1;\n *   Rd.W[x] = Round[x][32:1];\n * } else {\n *   Rd.W[x] = Mres[x][47:16];\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMMWT(long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"smmwt %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.119.1. SMMWT ===== */\n\n/* ===== Inline Function Start for 3.119.2. SMMWT.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_MSW_32X16_MAC\n * \\brief SMMWT.u (SIMD MSW Signed Multiply Word and Top Half with Rounding)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMMWT Rd, Rs1, Rs2\n * SMMWT.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit integer elements of one register and the top 16-bit of the\n * corresponding 32-bit elements of another register, and write the most significant 32-bit results to\n * the corresponding 32-bit elements of a register. The `.u` form rounds up the results from the most\n * significant discarded bit.\n *\n * **Description**:\\n\n * This instruction multiplies the signed 32-bit elements of Rs1 with the top signed 16-bit content of\n * the corresponding 32-bit elements of Rs2 and writes the most significant 32-bit multiplication\n * results to the corresponding 32-bit elements of Rd. The `.u` form of the instruction rounds up the\n * most significant 32-bit of the 48-bit multiplication results by adding a 1 to bit 15 of the results.\n *\n * **Operations**:\\n\n * ~~~\n * Mres[x][47:0] = Rs1.W[x] * Rs2.W[x].H[1];\n * if (`.u` form) {\n *   Round[x][32:0] = Mres[x][47:15] + 1;\n *   Rd.W[x] = Round[x][32:1];\n * } else {\n *   Rd.W[x] = Mres[x][47:16];\n * }\n * for RV32: x=0\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMMWT_U(long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"smmwt.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.119.2. SMMWT.u ===== */\n\n/* ===== Inline Function Start for 3.120.1. SMSLDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMSLDA (Signed Multiply Two Halfs & Add & Subtract 64-bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMSLDA Rd, Rs1, Rs2\n * SMSLXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * subtracts the two 32-bit results from the 64-bit value of an even/odd pair of registers (RV32) or a\n * register (RV64). The subtraction result is written back to the register-pair.\n * * SMSLDA: rd pair - top*top - bottom*bottom (all 32-bit elements)\n * * SMSLXDA: rd pair - top*bottom - bottom*top (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMSLDA` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content Rs2 and multiplies the top 16-bit content of Rs1 with the top 16-bit content of Rs2.\n * For the `SMSLXDA` instruction, it multiplies the top 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and multiplies the bottom 16-bit content of Rs1 with the top 16-bit content of Rs2.\n * The two multiplication results are subtracted from the 64-bit value of an even/odd pair of registers\n * specified by Rd(4,1). The 64-bit subtraction result is written back to the register-pair. The 16-bit\n * values of Rs1 and Rs2, and the 64-bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * For the `SMSLDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and multiplies the top 16-bit content of\n * the 32-bit elements of Rs1 with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `SMSLXDA` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the bottom 16-bit content of the 32-bit elements of Rs2 and multiplies the bottom 16-bit content of\n * the 32-bit elements of Rs1 with the top 16-bit content of the 32-bit elements of Rs2.\n * The four multiplication results are subtracted from the 64-bit value of Rd. The 64-bit subtraction\n * result is written back to Rd. The 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated\n * as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * // SMSLDA\n * Mres0[31:0] = (Rs1.H[0] * Rs2.H[0]);\n * Mres1[31:0] = (Rs1.H[1] * Rs2.H[1]);\n * // SMSLXDA\n * Mres0[31:0] = (Rs1.H[0] * Rs2.H[1]);\n * Mres1[31:0] = (Rs1.H[1] * Rs2.H[0]);\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] - SE64(Mres0[31:0]) - SE64(Mres1[31:0]);\n * * RV64:\n * // SMSLDA\n * Mres0[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[0]);\n * Mres1[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[1]);\n * Mres0[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[1].H[0]);\n * Mres1[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[1].H[1]);\n * // SMSLXDA\n * Mres0[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[1]);\n * Mres1[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[0]);\n * Mres0[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[1].H[1]);\n * Mres1[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[1].H[0]);\n * Rd = Rd - SE64(Mres0[0][31:0]) - SE64(Mres1[0][31:0]) - SE64(Mres0[1][31:0]) -\n * SE64(Mres1[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMSLDA(long long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"smslda %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.120.1. SMSLDA ===== */\n\n/* ===== Inline Function Start for 3.120.2. SMSLXDA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIGNED_16B_MULT_64B_ADDSUB\n * \\brief SMSLXDA (Signed Crossed Multiply Two Halfs & Add & Subtract 64- bit)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMSLDA Rd, Rs1, Rs2\n * SMSLXDA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 16-bit multiplications from the 32-bit elements of two registers; and then\n * subtracts the two 32-bit results from the 64-bit value of an even/odd pair of registers (RV32) or a\n * register (RV64). The subtraction result is written back to the register-pair.\n * * SMSLDA: rd pair - top*top - bottom*bottom (all 32-bit elements)\n * * SMSLXDA: rd pair - top*bottom - bottom*top (all 32-bit elements)\n *\n * **RV32 Description**:\\n\n * For the `SMSLDA` instruction, it multiplies the bottom 16-bit content of Rs1 with the bottom 16-bit\n * content Rs2 and multiplies the top 16-bit content of Rs1 with the top 16-bit content of Rs2.\n * For the `SMSLXDA` instruction, it multiplies the top 16-bit content of Rs1 with the bottom 16-bit\n * content of Rs2 and multiplies the bottom 16-bit content of Rs1 with the top 16-bit content of Rs2.\n * The two multiplication results are subtracted from the 64-bit value of an even/odd pair of registers\n * specified by Rd(4,1). The 64-bit subtraction result is written back to the register-pair. The 16-bit\n * values of Rs1 and Rs2, and the 64-bit value of the register-pair are treated as signed integers.\n * Rd(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * For the `SMSLDA` instruction, it multiplies the bottom 16-bit content of the 32-bit elements of Rs1\n * with the bottom 16-bit content of the 32-bit elements of Rs2 and multiplies the top 16-bit content of\n * the 32-bit elements of Rs1 with the top 16-bit content of the 32-bit elements of Rs2.\n * For the `SMSLXDA` instruction, it multiplies the top 16-bit content of the 32-bit elements of Rs1 with\n * the bottom 16-bit content of the 32-bit elements of Rs2 and multiplies the bottom 16-bit content of\n * the 32-bit elements of Rs1 with the top 16-bit content of the 32-bit elements of Rs2.\n * The four multiplication results are subtracted from the 64-bit value of Rd. The 64-bit subtraction\n * result is written back to Rd. The 16-bit values of Rs1 and Rs2, and the 64-bit value of Rd are treated\n * as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * // SMSLDA\n * Mres0[31:0] = (Rs1.H[0] * Rs2.H[0]);\n * Mres1[31:0] = (Rs1.H[1] * Rs2.H[1]);\n * // SMSLXDA\n * Mres0[31:0] = (Rs1.H[0] * Rs2.H[1]);\n * Mres1[31:0] = (Rs1.H[1] * Rs2.H[0]);\n * Idx0 = CONCAT(Rd(4,1),1'b0); Idx1 = CONCAT(Rd(4,1),1'b1);\n * R[Idx1].R[Idx0] = R[Idx1].R[Idx0] - SE64(Mres0[31:0]) - SE64(Mres1[31:0]);\n * * RV64:\n * // SMSLDA\n * Mres0[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[0]);\n * Mres1[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[1]);\n * Mres0[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[1].H[0]);\n * Mres1[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[1].H[1]);\n * // SMSLXDA\n * Mres0[0][31:0] = (Rs1.W[0].H[0] * Rs2.W[0].H[1]);\n * Mres1[0][31:0] = (Rs1.W[0].H[1] * Rs2.W[0].H[0]);\n * Mres0[1][31:0] = (Rs1.W[1].H[0] * Rs2.W[1].H[1]);\n * Mres1[1][31:0] = (Rs1.W[1].H[1] * Rs2.W[1].H[0]);\n * Rd = Rd - SE64(Mres0[0][31:0]) - SE64(Mres1[0][31:0]) - SE64(Mres0[1][31:0]) -\n * SE64(Mres1[1][31:0]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMSLXDA(long long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"smslxda %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.120.2. SMSLXDA ===== */\n\n/* ===== Inline Function Start for 3.121. SMSR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB\n * \\brief SMSR64 (Signed Multiply and Subtract from 64- Bit Data)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SMSR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit signed elements in two registers and subtract the 64-bit multiplication\n * results from the 64-bit signed data of a pair of registers (RV32) or a register (RV64). The result is\n * written back to the pair of registers (RV32) or a register (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit signed data of Rs1 with that of Rs2. It\n * subtracts the 64-bit multiplication result from the 64-bit signed data of an even/odd pair of registers\n * specified by Rd(4,1). The subtraction result is written back to the even/odd pair of registers\n * specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the 32-bit signed elements of Rs1 with that of Rs2. It\n * subtracts the 64-bit multiplication results from the 64-bit signed data of Rd. The subtraction result is\n * written back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H].R[t_L] = R[t_H].R[t_L] - (Rs1 * Rs2);\n * * RV64:\n * Rd = Rd - (Rs1.W[0] * Rs2.W[0]) - (Rs1.W[1] * Rs2.W[1]);\n * ~~~\n *\n * \\param [in]  t    long long type of value stored in t\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    long type of value stored in b\n * \\return value stored in long long type\n */\n__STATIC_FORCEINLINE long long __RV_SMSR64(long long t, long a, long b)\n{\n    __ASM volatile(\"smsr64 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.121. SMSR64 ===== */\n\n/* ===== Inline Function Start for 3.122.1. SMUL8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MULTIPLY\n * \\brief SMUL8 (SIMD Signed 8-bit Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMUL8 Rd, Rs1, Rs2\n * SMULX8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do signed 8-bit multiplications and generate four 16-bit results simultaneously.\n *\n * **RV32 Description**:\\n\n * For the `SMUL8` instruction, multiply the 8-bit data elements of Rs1 with the\n * corresponding 8-bit data elements of Rs2.\n * For the `SMULX8` instruction, multiply the first and second 8-bit data elements of Rs1 with the\n * second and first 8-bit data elements of Rs2. At the same time, multiply the third and fourth 8-bit data\n * elements of Rs1 with the fourth and third 8-bit data elements of Rs2.\n * The four 16-bit results are then written into an even/odd pair of registers specified by Rd(4,1).\n * Rd(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the two 16-bit results calculated from the top part of\n * Rs1 and the even `2d` register of the pair contains the two 16-bit results calculated from the bottom\n * part of Rs1.\n *\n * **RV64 Description**:\\n\n * For the `SMUL8` instruction, multiply the 8-bit data elements of Rs1 with the\n * corresponding 8-bit data elements of Rs2.\n * For the `SMULX8` instruction, multiply the first and second 8-bit data elements of Rs1 with the\n * second and first 8-bit data elements of Rs2. At the same time, multiply the third and fourth 8-bit data\n * elements of Rs1 with the fourth and third 8-bit data elements of Rs2.\n * The four 16-bit results are then written into Rd. The Rd.W[1] contains the two 16-bit results\n * calculated from the top part of Rs1 and the Rd.W[0] contains the two 16-bit results calculated from\n * the bottom part of Rs1.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * if (is `SMUL8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x+1]; // top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x]; // bottom\n * } else if (is `SMULX8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x]; // Rs1 top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x+1]; // Rs1 bottom\n * }\n * rest[x/2] = op1t[x/2] s* op2t[x/2];\n * resb[x/2] = op1b[x/2] s* op2b[x/2];\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H].H[1] = rest[1]; R[t_H].H[0] = resb[1];\n * R[t_L].H[1] = rest[0]; R[t_L].H[0] = resb[0];\n * x = 0 and 2\n * * RV64:\n * if (is `SMUL8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x+1]; // top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x]; // bottom\n * } else if (is `SMULX8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x]; // Rs1 top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x+1]; // Rs1 bottom\n * }\n * rest[x/2] = op1t[x/2] s* op2t[x/2];\n * resb[x/2] = op1b[x/2] s* op2b[x/2];\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * Rd.W[1].H[1] = rest[1]; Rd.W[1].H[0] = resb[1];\n * Rd.W[0].H[1] = rest[0]; Rd.W[0].H[0] = resb[0];\n * x = 0 and 2\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_SMUL8(unsigned int a, unsigned int b)\n{\n    register unsigned long long result;\n    __ASM volatile(\"smul8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.122.1. SMUL8 ===== */\n\n/* ===== Inline Function Start for 3.122.2. SMULX8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MULTIPLY\n * \\brief SMULX8 (SIMD Signed Crossed 8-bit Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMUL8 Rd, Rs1, Rs2\n * SMULX8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do signed 8-bit multiplications and generate four 16-bit results simultaneously.\n *\n * **RV32 Description**:\\n\n * For the `SMUL8` instruction, multiply the 8-bit data elements of Rs1 with the\n * corresponding 8-bit data elements of Rs2.\n * For the `SMULX8` instruction, multiply the first and second 8-bit data elements of Rs1 with the\n * second and first 8-bit data elements of Rs2. At the same time, multiply the third and fourth 8-bit data\n * elements of Rs1 with the fourth and third 8-bit data elements of Rs2.\n * The four 16-bit results are then written into an even/odd pair of registers specified by Rd(4,1).\n * Rd(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the two 16-bit results calculated from the top part of\n * Rs1 and the even `2d` register of the pair contains the two 16-bit results calculated from the bottom\n * part of Rs1.\n *\n * **RV64 Description**:\\n\n * For the `SMUL8` instruction, multiply the 8-bit data elements of Rs1 with the\n * corresponding 8-bit data elements of Rs2.\n * For the `SMULX8` instruction, multiply the first and second 8-bit data elements of Rs1 with the\n * second and first 8-bit data elements of Rs2. At the same time, multiply the third and fourth 8-bit data\n * elements of Rs1 with the fourth and third 8-bit data elements of Rs2.\n * The four 16-bit results are then written into Rd. The Rd.W[1] contains the two 16-bit results\n * calculated from the top part of Rs1 and the Rd.W[0] contains the two 16-bit results calculated from\n * the bottom part of Rs1.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * if (is `SMUL8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x+1]; // top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x]; // bottom\n * } else if (is `SMULX8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x]; // Rs1 top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x+1]; // Rs1 bottom\n * }\n * rest[x/2] = op1t[x/2] s* op2t[x/2];\n * resb[x/2] = op1b[x/2] s* op2b[x/2];\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H].H[1] = rest[1]; R[t_H].H[0] = resb[1];\n * R[t_L].H[1] = rest[0]; R[t_L].H[0] = resb[0];\n * x = 0 and 2\n * * RV64:\n * if (is `SMUL8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x+1]; // top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x]; // bottom\n * } else if (is `SMULX8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x]; // Rs1 top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x+1]; // Rs1 bottom\n * }\n * rest[x/2] = op1t[x/2] s* op2t[x/2];\n * resb[x/2] = op1b[x/2] s* op2b[x/2];\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * Rd.W[1].H[1] = rest[1]; Rd.W[1].H[0] = resb[1];\n * Rd.W[0].H[1] = rest[0]; Rd.W[0].H[0] = resb[0];\n * x = 0 and 2\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_SMULX8(unsigned int a, unsigned int b)\n{\n    register unsigned long long result;\n    __ASM volatile(\"smulx8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.122.2. SMULX8 ===== */\n\n/* ===== Inline Function Start for 3.123.1. SMUL16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MULTIPLY\n * \\brief SMUL16 (SIMD Signed 16-bit Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMUL16 Rd, Rs1, Rs2\n * SMULX16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do signed 16-bit multiplications and generate two 32-bit results simultaneously.\n *\n * **RV32 Description**:\\n\n * For the `SMUL16` instruction, multiply the top 16-bit Q15 content of Rs1 with\n * the top 16-bit Q15 content of Rs2. At the same time, multiply the bottom 16-bit Q15 content of Rs1\n * with the bottom 16-bit Q15 content of Rs2.\n * For the `SMULX16` instruction, multiply the top 16-bit Q15 content of Rs1 with the bottom 16-bit\n * Q15 content of Rs2. At the same time, multiply the bottom 16-bit Q15 content of Rs1 with the top 16-\n * bit Q15 content of Rs2.\n * The two Q30 results are then written into an even/odd pair of registers specified by Rd(4,1). Rd(4,1),\n * i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair includes\n * register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the 32-bit result calculated from the top part of Rs1 and\n * the even `2d` register of the pair contains the 32-bit result calculated from the bottom part of Rs1.\n *\n * **RV64 Description**:\\n\n * For the `SMUL16` instruction, multiply the top 16-bit Q15 content of the lower\n * 32-bit word in Rs1 with the top 16-bit Q15 content of the lower 32-bit word in Rs2. At the same time,\n * multiply the bottom 16-bit Q15 content of the lower 32-bit word in Rs1 with the bottom 16-bit Q15\n * content of the lower 32-bit word in Rs2.\n * For the `SMULX16` instruction, multiply the top 16-bit Q15 content of the lower 32-bit word in Rs1\n * with the bottom 16-bit Q15 content of the lower 32-bit word in Rs2. At the same time, multiply the\n * bottom 16-bit Q15 content of the lower 32-bit word in Rs1 with the top 16-bit Q15 content of the\n * lower 32-bit word in Rs2.\n * The two 32-bit Q30 results are then written into Rd. The result calculated from the top 16-bit of the\n * lower 32-bit word in Rs1 is written to Rd.W[1]. And the result calculated from the bottom 16-bit of\n * the lower 32-bit word in Rs1 is written to Rd.W[0]\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * if (is `SMUL16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[1]; // top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[0]; // bottom\n * } else if (is `SMULX16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[0]; // Rs1 top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   res = aop s* bop;\n * }\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H] = rest;\n * R[t_L] = resb;\n * * RV64:\n * if (is `SMUL16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[1]; // top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[0]; // bottom\n * } else if (is `SMULX16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[0]; // Rs1 top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   res = aop s* bop;\n * }\n * Rd.W[1] = rest;\n * Rd.W[0] = resb;\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_SMUL16(unsigned int a, unsigned int b)\n{\n    register unsigned long long result;\n    __ASM volatile(\"smul16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.123.1. SMUL16 ===== */\n\n/* ===== Inline Function Start for 3.123.2. SMULX16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MULTIPLY\n * \\brief SMULX16 (SIMD Signed Crossed 16-bit Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SMUL16 Rd, Rs1, Rs2\n * SMULX16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do signed 16-bit multiplications and generate two 32-bit results simultaneously.\n *\n * **RV32 Description**:\\n\n * For the `SMUL16` instruction, multiply the top 16-bit Q15 content of Rs1 with\n * the top 16-bit Q15 content of Rs2. At the same time, multiply the bottom 16-bit Q15 content of Rs1\n * with the bottom 16-bit Q15 content of Rs2.\n * For the `SMULX16` instruction, multiply the top 16-bit Q15 content of Rs1 with the bottom 16-bit\n * Q15 content of Rs2. At the same time, multiply the bottom 16-bit Q15 content of Rs1 with the top 16-\n * bit Q15 content of Rs2.\n * The two Q30 results are then written into an even/odd pair of registers specified by Rd(4,1). Rd(4,1),\n * i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair includes\n * register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the 32-bit result calculated from the top part of Rs1 and\n * the even `2d` register of the pair contains the 32-bit result calculated from the bottom part of Rs1.\n *\n * **RV64 Description**:\\n\n * For the `SMUL16` instruction, multiply the top 16-bit Q15 content of the lower\n * 32-bit word in Rs1 with the top 16-bit Q15 content of the lower 32-bit word in Rs2. At the same time,\n * multiply the bottom 16-bit Q15 content of the lower 32-bit word in Rs1 with the bottom 16-bit Q15\n * content of the lower 32-bit word in Rs2.\n * For the `SMULX16` instruction, multiply the top 16-bit Q15 content of the lower 32-bit word in Rs1\n * with the bottom 16-bit Q15 content of the lower 32-bit word in Rs2. At the same time, multiply the\n * bottom 16-bit Q15 content of the lower 32-bit word in Rs1 with the top 16-bit Q15 content of the\n * lower 32-bit word in Rs2.\n * The two 32-bit Q30 results are then written into Rd. The result calculated from the top 16-bit of the\n * lower 32-bit word in Rs1 is written to Rd.W[1]. And the result calculated from the bottom 16-bit of\n * the lower 32-bit word in Rs1 is written to Rd.W[0]\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * if (is `SMUL16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[1]; // top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[0]; // bottom\n * } else if (is `SMULX16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[0]; // Rs1 top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   res = aop s* bop;\n * }\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H] = rest;\n * R[t_L] = resb;\n * * RV64:\n * if (is `SMUL16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[1]; // top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[0]; // bottom\n * } else if (is `SMULX16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[0]; // Rs1 top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   res = aop s* bop;\n * }\n * Rd.W[1] = rest;\n * Rd.W[0] = resb;\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_SMULX16(unsigned int a, unsigned int b)\n{\n    register unsigned long long result;\n    __ASM volatile(\"smulx16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.123.2. SMULX16 ===== */\n\n/* ===== Inline Function Start for 3.124. SRA.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief SRA.u (Rounding Shift Right Arithmetic)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SRA.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Perform an arithmetic right shift operation with rounding. The shift amount is a variable\n * from a GPR.\n *\n * **Description**:\\n\n * This instruction right-shifts the content of Rs1 arithmetically. The shifted out bits are\n * filled with the sign-bit and the shift amount is specified by the low-order 5-bits (RV32) or 6-bits\n * (RV64) of the Rs2 register. For the rounding operation, a value of 1 is added to the most significant\n * discarded bit of the data to calculate the final result. And the result is written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * sa = Rs2[4:0];\n * if (sa > 0) {\n *   res[31:-1] = SE33(Rs1[31:(sa-1)]) + 1;\n *   Rd = res[31:0];\n * } else {\n *   Rd = Rs1;\n * }\n * * RV64:\n * sa = Rs2[5:0];\n * if (sa > 0) {\n *   res[63:-1] = SE65(Rs1[63:(sa-1)]) + 1;\n *   Rd = res[63:0];\n * } else {\n *   Rd = Rs1;\n * }\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SRA_U(long a, unsigned int b)\n{\n    register long result;\n    __ASM volatile(\"sra.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.124. SRA.u ===== */\n\n/* ===== Inline Function Start for 3.125. SRAI.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief SRAI.u (Rounding Shift Right Arithmetic Immediate)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SRAI.u Rd, Rs1, imm6u[4:0] (RV32)\n * SRAI.u Rd, Rs1, imm6u[5:0] (RV64)\n * ~~~\n *\n * **Purpose**:\\n\n * Perform an arithmetic right shift operation with rounding. The shift amount is an\n * immediate value.\n *\n * **Description**:\\n\n * This instruction right-shifts the content of Rs1 arithmetically. The shifted out bits are\n * filled with the sign-bit and the shift amount is specified by the imm6u[4:0] (RV32) or imm6u[5:0]\n * (RV64) constant . For the rounding operation, a value of 1 is added to the most significant discarded\n * bit of the data to calculate the final result. And the result is written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * sa = imm6u[4:0];\n * if (sa > 0) {\n *   res[31:-1] = SE33(Rs1[31:(sa-1)]) + 1;\n *   Rd = res[31:0];\n * } else {\n *   Rd = Rs1;\n * }\n * * RV64:\n * sa = imm6u[5:0];\n * if (sa > 0) {\n *   res[63:-1] = SE65(Rs1[63:(sa-1)]) + 1;\n *   Rd = res[63:0];\n * } else {\n *   Rd = Rs1;\n * }\n * ~~~\n *\n * \\param [in]  a    long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n#define __RV_SRAI_U(a, b)    \\\n    ({    \\\n        register long result;    \\\n        register long __a = (long)(a);    \\\n        __ASM volatile(\"srai.u %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.125. SRAI.u ===== */\n\n/* ===== Inline Function Start for 3.126.1. SRA8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SRA8 (SIMD 8-bit Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRA8 Rd, Rs1, Rs2\n * SRA8.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit element arithmetic right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the data elements. The shift amount is specified by the low-order\n * 3-bits of the value in the Rs2 register. For the rounding operation of the `.u` form, a value of 1 is\n * added to the most significant discarded bit of each 8-bit data element to calculate the final results.\n * And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[2:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRA8.u\n *     res[7:-1] = SE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[7:0];\n *   } else { // SRA8\n *     Rd.B[x] = SE8(Rd.B[x][7:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRA8(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"sra8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.126.1. SRA8 ===== */\n\n/* ===== Inline Function Start for 3.126.2. SRA8.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SRA8.u (SIMD 8-bit Rounding Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRA8 Rd, Rs1, Rs2\n * SRA8.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit element arithmetic right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the data elements. The shift amount is specified by the low-order\n * 3-bits of the value in the Rs2 register. For the rounding operation of the `.u` form, a value of 1 is\n * added to the most significant discarded bit of each 8-bit data element to calculate the final results.\n * And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[2:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRA8.u\n *     res[7:-1] = SE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[7:0];\n *   } else { // SRA8\n *     Rd.B[x] = SE8(Rd.B[x][7:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRA8_U(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"sra8.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.126.2. SRA8.u ===== */\n\n/* ===== Inline Function Start for 3.127.1. SRAI8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SRAI8 (SIMD 8-bit Shift Right Arithmetic Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRAI8 Rd, Rs1, imm3u\n * SRAI8.u Rd, Rs1, imm3u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit element arithmetic right shift operations simultaneously. The shift amount is an\n * immediate value. The `.u` form performs additional rounding up operations on the shifted results.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the data elements. The shift amount is specified by the imm3u\n * constant. For the rounding operation of the `.u` form, a value of 1 is added to the most significant\n * discarded bit of each 8-bit data element to calculate the final results. And the results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm3u[2:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRA8.u\n *     res[7:-1] = SE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[7:0];\n *   } else { // SRA8\n *     Rd.B[x] = SE8(Rd.B[x][7:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SRAI8(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"srai8 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.127.1. SRAI8 ===== */\n\n/* ===== Inline Function Start for 3.127.2. SRAI8.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SRAI8.u (SIMD 8-bit Rounding Shift Right Arithmetic Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRAI8 Rd, Rs1, imm3u\n * SRAI8.u Rd, Rs1, imm3u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit element arithmetic right shift operations simultaneously. The shift amount is an\n * immediate value. The `.u` form performs additional rounding up operations on the shifted results.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the data elements. The shift amount is specified by the imm3u\n * constant. For the rounding operation of the `.u` form, a value of 1 is added to the most significant\n * discarded bit of each 8-bit data element to calculate the final results. And the results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm3u[2:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRA8.u\n *     res[7:-1] = SE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[7:0];\n *   } else { // SRA8\n *     Rd.B[x] = SE8(Rd.B[x][7:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SRAI8_U(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"srai8.u %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.127.2. SRAI8.u ===== */\n\n/* ===== Inline Function Start for 3.128.1. SRA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SRA16 (SIMD 16-bit Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRA16 Rd, Rs1, Rs2\n * SRA16.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit element arithmetic right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the data elements. The shift amount is specified by the low-order\n * 4-bits of the value in the Rs2 register. For the rounding operation of the `.u` form, a value of 1 is\n * added to the most significant discarded bit of each 16-bit data element to calculate the final results.\n * And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[3:0];\n * if (sa != 0) {\n *   if (`.u` form) { // SRA16.u\n *     res[15:-1] = SE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[15:0];\n *   } else { // SRA16\n *     Rd.H[x] = SE16(Rs1.H[x][15:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRA16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"sra16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.128.1. SRA16 ===== */\n\n/* ===== Inline Function Start for 3.128.2. SRA16.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SRA16.u (SIMD 16-bit Rounding Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRA16 Rd, Rs1, Rs2\n * SRA16.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit element arithmetic right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the data elements. The shift amount is specified by the low-order\n * 4-bits of the value in the Rs2 register. For the rounding operation of the `.u` form, a value of 1 is\n * added to the most significant discarded bit of each 16-bit data element to calculate the final results.\n * And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[3:0];\n * if (sa != 0) {\n *   if (`.u` form) { // SRA16.u\n *     res[15:-1] = SE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[15:0];\n *   } else { // SRA16\n *     Rd.H[x] = SE16(Rs1.H[x][15:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRA16_U(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"sra16.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.128.2. SRA16.u ===== */\n\n/* ===== Inline Function Start for 3.129.1. SRAI16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SRAI16 (SIMD 16-bit Shift Right Arithmetic Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRAI16 Rd, Rs1, imm4u\n * SRAI16.u Rd, Rs1, imm4u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements arithmetic right shift operations simultaneously. The shift amount is\n * an immediate value. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the 16-bit data elements. The shift amount is specified by the\n * imm4u constant. For the rounding operation of the `.u` form, a value of 1 is added to the most\n * significant discarded bit of each 16-bit data to calculate the final results. And the results are written\n * to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm4u[3:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRAI16.u\n *     res[15:-1] = SE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[15:0];\n *   } else { // SRAI16\n *     Rd.H[x] = SE16(Rs1.H[x][15:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SRAI16(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"srai16 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.129.1. SRAI16 ===== */\n\n/* ===== Inline Function Start for 3.129.2. SRAI16.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SRAI16.u (SIMD 16-bit Rounding Shift Right Arithmetic Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRAI16 Rd, Rs1, imm4u\n * SRAI16.u Rd, Rs1, imm4u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements arithmetic right shift operations simultaneously. The shift amount is\n * an immediate value. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the 16-bit data elements. The shift amount is specified by the\n * imm4u constant. For the rounding operation of the `.u` form, a value of 1 is added to the most\n * significant discarded bit of each 16-bit data to calculate the final results. And the results are written\n * to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm4u[3:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRAI16.u\n *     res[15:-1] = SE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[15:0];\n *   } else { // SRAI16\n *     Rd.H[x] = SE16(Rs1.H[x][15:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SRAI16_U(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"srai16.u %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.129.2. SRAI16.u ===== */\n\n/* ===== Inline Function Start for 3.130.1. SRL8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SRL8 (SIMD 8-bit Shift Right Logical)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRL8 Rt, Ra, Rb\n * SRL8.u Rt, Ra, Rb\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits are\n * filled with zero. The shift amount is specified by the low-order 3-bits of the value in the Rs2 register.\n * For the rounding operation of the `.u` form, a value of 1 is added to the most significant discarded\n * bit of each 8-bit data element to calculate the final results. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[2:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRL8.u\n *     res[8:0] = ZE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[8:1];\n *   } else { // SRL8\n *     Rd.B[x] = ZE8(Rs1.B[x][7:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRL8(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"srl8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.130.1. SRL8 ===== */\n\n/* ===== Inline Function Start for 3.130.2. SRL8.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SRL8.u (SIMD 8-bit Rounding Shift Right Logical)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRL8 Rt, Ra, Rb\n * SRL8.u Rt, Ra, Rb\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits are\n * filled with zero. The shift amount is specified by the low-order 3-bits of the value in the Rs2 register.\n * For the rounding operation of the `.u` form, a value of 1 is added to the most significant discarded\n * bit of each 8-bit data element to calculate the final results. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[2:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRL8.u\n *     res[8:0] = ZE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[8:1];\n *   } else { // SRL8\n *     Rd.B[x] = ZE8(Rs1.B[x][7:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRL8_U(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"srl8.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.130.2. SRL8.u ===== */\n\n/* ===== Inline Function Start for 3.131.1. SRLI8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SRLI8 (SIMD 8-bit Shift Right Logical Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRLI8 Rt, Ra, imm3u\n * SRLI8.u Rt, Ra, imm3u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical right shift operations simultaneously. The shift amount is an\n * immediate value. The `.u` form performs additional rounding up operations on the shifted results.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits are\n * filled with zero. The shift amount is specified by the imm3u constant. For the rounding operation of\n * the `.u` form, a value of 1 is added to the most significant discarded bit of each 8-bit data element to\n * calculate the final results. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm3u[2:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRLI8.u\n *     res[8:0] = ZE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[8:1];\n *   } else { // SRLI8\n *     Rd.B[x] = ZE8(Rs1.B[x][7:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SRLI8(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"srli8 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.131.1. SRLI8 ===== */\n\n/* ===== Inline Function Start for 3.131.2. SRLI8.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_SHIFT\n * \\brief SRLI8.u (SIMD 8-bit Rounding Shift Right Logical Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRLI8 Rt, Ra, imm3u\n * SRLI8.u Rt, Ra, imm3u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical right shift operations simultaneously. The shift amount is an\n * immediate value. The `.u` form performs additional rounding up operations on the shifted results.\n *\n * **Description**:\\n\n * The 8-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits are\n * filled with zero. The shift amount is specified by the imm3u constant. For the rounding operation of\n * the `.u` form, a value of 1 is added to the most significant discarded bit of each 8-bit data element to\n * calculate the final results. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm3u[2:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRLI8.u\n *     res[8:0] = ZE9(Rs1.B[x][7:sa-1]) + 1;\n *     Rd.B[x] = res[8:1];\n *   } else { // SRLI8\n *     Rd.B[x] = ZE8(Rs1.B[x][7:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SRLI8_U(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"srli8.u %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.131.2. SRLI8.u ===== */\n\n/* ===== Inline Function Start for 3.132.1. SRL16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SRL16 (SIMD 16-bit Shift Right Logical)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRL16 Rt, Ra, Rb\n *  SRL16.u Rt, Ra, Rb\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical right shift operations simultaneously. The shift amount is a variable from a GPR. The `.u` form performs additional rounding upoperations on the shifted results.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits\n * are filled with zero. The shift amount is specified by the low-order 4-bits of the value in the Rs2\n * register. For the rounding operation of the `.u` form, a value of 1 is added to the most significant\n * discarded bit of each 16-bit data element to calculate the final results. And the results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[3:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRL16.u\n *     res[16:0] = ZE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[16:1];\n *   } else { // SRL16\n *     Rd.H[x] = ZE16(Rs1.H[x][15:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRL16(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"srl16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.132.1. SRL16 ===== */\n\n/* ===== Inline Function Start for 3.132.2. SRL16.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SRL16.u (SIMD 16-bit Rounding Shift Right Logical)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRL16 Rt, Ra, Rb\n *  SRL16.u Rt, Ra, Rb\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical right shift operations simultaneously. The shift amount is a variable from a GPR. The `.u` form performs additional rounding upoperations on the shifted results.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits\n * are filled with zero. The shift amount is specified by the low-order 4-bits of the value in the Rs2\n * register. For the rounding operation of the `.u` form, a value of 1 is added to the most significant\n * discarded bit of each 16-bit data element to calculate the final results. And the results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[3:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRL16.u\n *     res[16:0] = ZE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[16:1];\n *   } else { // SRL16\n *     Rd.H[x] = ZE16(Rs1.H[x][15:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRL16_U(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"srl16.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.132.2. SRL16.u ===== */\n\n/* ===== Inline Function Start for 3.133.1. SRLI16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SRLI16 (SIMD 16-bit Shift Right Logical Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRLI16 Rt, Ra, imm4u\n * SRLI16.u Rt, Ra, imm4u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical right shift operations simultaneously. The shift amount is an\n * immediate value. The `.u` form performs additional rounding up operations on the shifted results.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits\n * are filled with zero. The shift amount is specified by the imm4u constant. For the rounding\n * operation of the `.u` form, a value of 1 is added to the most significant discarded bit of each 16-bit\n * data element to calculate the final results. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm4u;\n * if (sa > 0) {\n *   if (`.u` form) { // SRLI16.u\n *     res[16:0] = ZE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[16:1];\n *   } else { // SRLI16\n *     Rd.H[x] = ZE16(Rs1.H[x][15:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SRLI16(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"srli16 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.133.1. SRLI16 ===== */\n\n/* ===== Inline Function Start for 3.133.2. SRLI16.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_SHIFT\n * \\brief SRLI16.u (SIMD 16-bit Rounding Shift Right Logical Immediate)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SRLI16 Rt, Ra, imm4u\n * SRLI16.u Rt, Ra, imm4u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical right shift operations simultaneously. The shift amount is an\n * immediate value. The `.u` form performs additional rounding up operations on the shifted results.\n *\n * **Description**:\\n\n * The 16-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits\n * are filled with zero. The shift amount is specified by the imm4u constant. For the rounding\n * operation of the `.u` form, a value of 1 is added to the most significant discarded bit of each 16-bit\n * data element to calculate the final results. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm4u;\n * if (sa > 0) {\n *   if (`.u` form) { // SRLI16.u\n *     res[16:0] = ZE17(Rs1.H[x][15:sa-1]) + 1;\n *     Rd.H[x] = res[16:1];\n *   } else { // SRLI16\n *     Rd.H[x] = ZE16(Rs1.H[x][15:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_SRLI16_U(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"srli16.u %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.133.2. SRLI16.u ===== */\n\n/* ===== Inline Function Start for 3.134. STAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief STAS16 (SIMD 16-bit Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * STAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit integer element addition and 16-bit integer element subtraction in a 32-bit\n * chunk simultaneously. Operands are from corresponding positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit integer element in [31:16] of 32-bit chunks in Rs1 with\n * the 16-bit integer element in [31:16] of 32-bit chunks in Rs2, and writes the result to [31:16] of 32-bit\n * chunks in Rd; at the same time, it subtracts the 16-bit integer element in [15:0] of 32-bit chunks in\n * Rs2 from the 16-bit integer element in [15:0] of 32-bit chunks, and writes the result to [15:0] of 32-\n * bit chunks in Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned operations.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = Rs1.W[x][31:16] + Rs2.W[x][31:16];\n * Rd.W[x][15:0] = Rs1.W[x][15:0] - Rs2.W[x][15:0];\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_STAS16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"stas16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.134. STAS16 ===== */\n\n/* ===== Inline Function Start for 3.135. STSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief STSA16 (SIMD 16-bit Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * STSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit integer element subtraction and 16-bit integer element addition in a 32-bit\n * chunk simultaneously. Operands are from corresponding positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit integer element in [31:16] of 32-bit chunks in Rs2\n * from the 16-bit integer element in [31:16] of 32-bit chunks in Rs1, and writes the result to [31:16] of\n * 32-bit chunks in Rd; at the same time, it adds the 16-bit integer element in [15:0] of 32-bit chunks in\n * Rs2 with the 16-bit integer element in [15:0] of 32-bit chunks in Rs1, and writes the result to [15:0] of\n * 32-bit chunks in Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned operations.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = Rs1.W[x][31:16] - Rs2.W[x][31:16];\n * Rd.W[x][15:0] = Rs1.W[x][15:0] + Rs2.W[x][15:0];\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_STSA16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"stsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.135. STSA16 ===== */\n\n/* ===== Inline Function Start for 3.136. SUB8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief SUB8 (SIMD 8-bit Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SUB8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit integer element subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 8-bit integer elements in Rs2 from the 8-bit integer\n * elements in Rs1, and then writes the result to Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = Rs1.B[x] - Rs2.B[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SUB8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"sub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.136. SUB8 ===== */\n\n/* ===== Inline Function Start for 3.137. SUB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief SUB16 (SIMD 16-bit Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * SUB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit integer element subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit integer elements in Rs2 from the 16-bit integer\n * elements in Rs1, and then writes the result to Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = Rs1.H[x] - Rs2.H[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SUB16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"sub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.137. SUB16 ===== */\n\n/* ===== Inline Function Start for 3.138. SUB64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief SUB64 (64-bit Subtraction)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * SUB64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Perform a 64-bit signed or unsigned integer subtraction.\n *\n * **RV32 Description**:\\n\n * This instruction subtracts the 64-bit integer of an even/odd pair of registers\n * specified by Rs2(4,1) from the 64-bit integer of an even/odd pair of registers specified by Rs1(4,1),\n * and then writes the 64-bit result to an even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * This instruction subtracts the 64-bit integer of Rs2 from the 64-bit integer of Rs1,\n * and then writes the 64-bit result to Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * a_L = CONCAT(Rs1(4,1),1'b0); a_H = CONCAT(Rs1(4,1),1'b1);\n * b_L = CONCAT(Rs2(4,1),1'b0); b_H = CONCAT(Rs2(4,1),1'b1);\n * R[t_H].R[t_L] = R[a_H].R[a_L] - R[b_H].R[b_L];\n * * RV64:\n * Rd = Rs1 - Rs2;\n * ~~~\n *\n * \\param [in]  a    unsigned long long type of value stored in a\n * \\param [in]  b    unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_SUB64(unsigned long long a, unsigned long long b)\n{\n    register unsigned long long result;\n    __ASM volatile(\"sub64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.138. SUB64 ===== */\n\n/* ===== Inline Function Start for 3.139.1. SUNPKD810 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief SUNPKD810 (Signed Unpacking Bytes 1 & 0)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte *x and byte y* of 32-bit chunks in a register into two 16-bit signed halfwords\n * of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `SUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit signed halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = SE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = SE16(Rs1.W[m].B[y])\n * // SUNPKD810, x=1,y=0\n * // SUNPKD820, x=2,y=0\n * // SUNPKD830, x=3,y=0\n * // SUNPKD831, x=3,y=1\n * // SUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SUNPKD810(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"sunpkd810 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.139.1. SUNPKD810 ===== */\n\n/* ===== Inline Function Start for 3.139.2. SUNPKD820 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief SUNPKD820 (Signed Unpacking Bytes 2 & 0)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte *x and byte y* of 32-bit chunks in a register into two 16-bit signed halfwords\n * of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `SUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit signed halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = SE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = SE16(Rs1.W[m].B[y])\n * // SUNPKD810, x=1,y=0\n * // SUNPKD820, x=2,y=0\n * // SUNPKD830, x=3,y=0\n * // SUNPKD831, x=3,y=1\n * // SUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SUNPKD820(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"sunpkd820 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.139.2. SUNPKD820 ===== */\n\n/* ===== Inline Function Start for 3.139.3. SUNPKD830 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief SUNPKD830 (Signed Unpacking Bytes 3 & 0)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte *x and byte y* of 32-bit chunks in a register into two 16-bit signed halfwords\n * of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `SUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit signed halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = SE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = SE16(Rs1.W[m].B[y])\n * // SUNPKD810, x=1,y=0\n * // SUNPKD820, x=2,y=0\n * // SUNPKD830, x=3,y=0\n * // SUNPKD831, x=3,y=1\n * // SUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SUNPKD830(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"sunpkd830 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.139.3. SUNPKD830 ===== */\n\n/* ===== Inline Function Start for 3.139.4. SUNPKD831 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief SUNPKD831 (Signed Unpacking Bytes 3 & 1)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte *x and byte y* of 32-bit chunks in a register into two 16-bit signed halfwords\n * of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `SUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit signed halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = SE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = SE16(Rs1.W[m].B[y])\n * // SUNPKD810, x=1,y=0\n * // SUNPKD820, x=2,y=0\n * // SUNPKD830, x=3,y=0\n * // SUNPKD831, x=3,y=1\n * // SUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SUNPKD831(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"sunpkd831 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.139.4. SUNPKD831 ===== */\n\n/* ===== Inline Function Start for 3.139.5. SUNPKD832 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief SUNPKD832 (Signed Unpacking Bytes 3 & 2)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte *x and byte y* of 32-bit chunks in a register into two 16-bit signed halfwords\n * of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `SUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit signed halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = SE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = SE16(Rs1.W[m].B[y])\n * // SUNPKD810, x=1,y=0\n * // SUNPKD820, x=2,y=0\n * // SUNPKD830, x=3,y=0\n * // SUNPKD831, x=3,y=1\n * // SUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SUNPKD832(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"sunpkd832 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.139.5. SUNPKD832 ===== */\n\n/* ===== Inline Function Start for 3.140. SWAP8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief SWAP8 (Swap Byte within Halfword)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SWAP8 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Swap the bytes within each halfword of a register.\n *\n * **Description**:\\n\n * This instruction swaps the bytes within each halfword of Rs1 and writes the result to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = CONCAT(Rs1.H[x][7:0],Rs1.H[x][15:8]);\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SWAP8(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"swap8 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.140. SWAP8 ===== */\n\n/* ===== Inline Function Start for 3.141. SWAP16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief SWAP16 (Swap Halfword within Word)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * SWAP16 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Swap the 16-bit halfwords within each word of a register.\n *\n * **Description**:\\n\n * This instruction swaps the 16-bit halfwords within each word of Rs1 and writes the\n * result to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = CONCAT(Rs1.W[x][15:0],Rs1.H[x][31:16]);\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SWAP16(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"swap16 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.141. SWAP16 ===== */\n\n/* ===== Inline Function Start for 3.142. UCLIP8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief UCLIP8 (SIMD 8-bit Unsigned Clip Value)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UCLIP8 Rt, Ra, imm3u\n * ~~~\n *\n * **Purpose**:\\n\n * Limit the 8-bit signed elements of a register into an unsigned range simultaneously.\n *\n * **Description**:\\n\n * This instruction limits the 8-bit signed elements stored in Rs1 into an unsigned integer\n * range between 2^imm3u-1 and 0, and writes the limited results to Rd. For example, if imm3u is 3, the 8-\n * bit input values should be saturated between 7 and 0. If saturation is performed, set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.H[x];\n * if (src > (2^imm3u)-1) {\n *   src = (2^imm3u)-1;\n *   OV = 1;\n * } else if (src < 0) {\n *   src = 0;\n *   OV = 1;\n * }\n * Rd.H[x] = src;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_UCLIP8(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"uclip8 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.142. UCLIP8 ===== */\n\n/* ===== Inline Function Start for 3.143. UCLIP16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief UCLIP16 (SIMD 16-bit Unsigned Clip Value)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UCLIP16 Rt, Ra, imm4u\n * ~~~\n *\n * **Purpose**:\\n\n * Limit the 16-bit signed elements of a register into an unsigned range simultaneously.\n *\n * **Description**:\\n\n * This instruction limits the 16-bit signed elements stored in Rs1 into an unsigned\n * integer range between 2imm4u-1 and 0, and writes the limited results to Rd. For example, if imm4u is\n * 3, the 16-bit input values should be saturated between 7 and 0. If saturation is performed, set OV bit\n * to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.H[x];\n * if (src > (2^imm4u)-1) {\n *   src = (2^imm4u)-1;\n *   OV = 1;\n * } else if (src < 0) {\n *   src = 0;\n *   OV = 1;\n * }\n * Rd.H[x] = src;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_UCLIP16(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"uclip16 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.143. UCLIP16 ===== */\n\n/* ===== Inline Function Start for 3.144. UCLIP32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_PART_SIMD_MISC\n * \\brief UCLIP32 (SIMD 32-bit Unsigned Clip Value)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UCLIP32 Rd, Rs1, imm5u[4:0]\n * ~~~\n *\n * **Purpose**:\\n\n * Limit the 32-bit signed integer elements of a register into an unsigned range\n * simultaneously.\n *\n * **Description**:\\n\n * This instruction limits the 32-bit signed integer elements stored in Rs1 into an\n * unsigned integer range between 2imm5u-1 and 0, and writes the limited results to Rd. For example, if\n * imm5u is 3, the 32-bit input values should be saturated between 7 and 0. If saturation is performed,\n * set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.W[x];\n * if (src > (2^imm5u)-1) {\n *   src = (2^imm5u)-1;\n *   OV = 1;\n * } else if (src < 0) {\n *   src = 0;\n *   OV = 1;\n * }\n * Rd.W[x] = src\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_UCLIP32(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register unsigned long __a = (unsigned long)(a);    \\\n        __ASM volatile(\"uclip32 %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.144. UCLIP32 ===== */\n\n/* ===== Inline Function Start for 3.145. UCMPLE8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_CMP\n * \\brief UCMPLE8 (SIMD 8-bit Unsigned Compare Less Than & Equal)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UCMPLE8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit unsigned integer elements less than & equal comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit unsigned integer elements in Rs1 with the 8-bit\n * unsigned integer elements in Rs2 to see if the one in Rs1 is less than or equal to the one in Rs2. If it\n * is true, the result is 0xFF; otherwise, the result is 0x0. The four comparison results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] <=u Rs2.B[x])? 0xff : 0x0;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UCMPLE8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ucmple8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.145. UCMPLE8 ===== */\n\n/* ===== Inline Function Start for 3.146. UCMPLE16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_CMP\n * \\brief UCMPLE16 (SIMD 16-bit Unsigned Compare Less Than & Equal)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UCMPLE16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer elements less than & equal comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit unsigned integer elements in Rs1 with the 16-bit\n * unsigned integer elements in Rs2 to see if the one in Rs1 is less than or equal to the one in Rs2. If it\n * is true, the result is 0xFFFF; otherwise, the result is 0x0. The element comparison results are\n * written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] <=u Rs2.H[x])? 0xffff : 0x0;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UCMPLE16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ucmple16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.146. UCMPLE16 ===== */\n\n/* ===== Inline Function Start for 3.147. UCMPLT8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_CMP\n * \\brief UCMPLT8 (SIMD 8-bit Unsigned Compare Less Than)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UCMPLT8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit unsigned integer elements less than comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit unsigned integer elements in Rs1 with the 8-bit\n * unsigned integer elements in Rs2 to see if the one in Rs1 is less than the one in Rs2. If it is true, the\n * result is 0xFF; otherwise, the result is 0x0. The element comparison results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] <u Rs2.B[x])? 0xff : 0x0;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UCMPLT8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ucmplt8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.147. UCMPLT8 ===== */\n\n/* ===== Inline Function Start for 3.148. UCMPLT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_CMP\n * \\brief UCMPLT16 (SIMD 16-bit Unsigned Compare Less Than)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UCMPLT16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer elements less than comparisons simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit unsigned integer elements in Rs1 with the 16-bit\n * unsigned integer elements in Rs2 to see if the one in Rs1 is less than the one in Rs2. If it is true, the\n * result is 0xFFFF; otherwise, the result is 0x0. The element comparison results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] <u Rs2.H[x])? 0xffff : 0x0;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UCMPLT16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ucmplt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.148. UCMPLT16 ===== */\n\n/* ===== Inline Function Start for 3.149. UKADD8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief UKADD8 (SIMD 8-bit Unsigned Saturating Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UKADD8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit unsigned integer element saturating additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 8-bit unsigned integer elements in Rs1 with the 8-bit\n * unsigned integer elements in Rs2. If any of the results are beyond the 8-bit unsigned number range\n * (0 <= RES <= 28-1), they are saturated to the range and the OV bit is set to 1. The saturated results are\n * written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.B[x] + Rs2.B[x];\n * if (res[x] > (2^8)-1) {\n *   res[x] = (2^8)-1;\n *   OV = 1;\n * }\n * Rd.B[x] = res[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKADD8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ukadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.149. UKADD8 ===== */\n\n/* ===== Inline Function Start for 3.150. UKADD16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief UKADD16 (SIMD 16-bit Unsigned Saturating Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UKADD16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer element saturating additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit unsigned integer elements in Rs1 with the 16-bit\n * unsigned integer elements in Rs2. If any of the results are beyond the 16-bit unsigned number\n * range (0 <= RES <= 2^16-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.H[x] + Rs2.H[x];\n * if (res[x] > (2^16)-1) {\n *   res[x] = (2^16)-1;\n *   OV = 1;\n * }\n * Rd.H[x] = res[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKADD16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ukadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.150. UKADD16 ===== */\n\n/* ===== Inline Function Start for 3.151. UKADD64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief UKADD64 (64-bit Unsigned Saturating Addition)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * UKADD64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add two 64-bit unsigned integers. The result is saturated to the U64 range.\n *\n * **RV32 Description**:\\n\n * This instruction adds the 64-bit unsigned integer of an even/odd pair of registers\n * specified by Rs1(4,1) with the 64-bit unsigned integer of an even/odd pair of registers specified by\n * Rs2(4,1). If the 64-bit result is beyond the U64 number range (0 <= U64 <= 2^64-1), it is saturated to the\n * range and the OV bit is set to 1. The saturated result is written to an even/odd pair of registers\n * specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction adds the 64-bit unsigned integer in Rs1 with the 64-bit unsigned\n * integer in Rs2. If the 64-bit result is beyond the U64 number range (0 <= U64 <= 2^64-1), it is saturated to\n * the range and the OV bit is set to 1. The saturated result is written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rt(4,1),1'b0); t_H = CONCAT(Rt(4,1),1'b1);\n * a_L = CONCAT(Ra(4,1),1'b0); a_H = CONCAT(Ra(4,1),1'b1);\n * b_L = CONCAT(Rb(4,1),1'b0); b_H = CONCAT(Rb(4,1),1'b1);\n * result = R[a_H].R[a_L] + R[b_H].R[b_L];\n * if (result > (2^64)-1) {\n *   result = (2^64)-1; OV = 1;\n * }\n * R[t_H].R[t_L] = result;\n * * RV64:\n * result = Rs1 + Rs2;\n * if (result > (2^64)-1) {\n *   result = (2^64)-1; OV = 1;\n * }\n * Rd = result;\n * ~~~\n *\n * \\param [in]  a    unsigned long long type of value stored in a\n * \\param [in]  b    unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UKADD64(unsigned long long a, unsigned long long b)\n{\n    register unsigned long long result;\n    __ASM volatile(\"ukadd64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.151. UKADD64 ===== */\n\n/* ===== Inline Function Start for 3.152. UKADDH ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q15_SAT_ALU\n * \\brief UKADDH (Unsigned Addition with U16 Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * UKADDH Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add the unsigned lower 32-bit content of two registers with U16 saturation.\n *\n * **Description**:\\n\n * The unsigned lower 32-bit content of Rs1 is added with the unsigned lower 32-bit\n * content of Rs2. And the result is saturated to the 16-bit unsigned integer range of [0, 2^16-1] and then\n * sign-extended and written to Rd. If saturation happens, this instruction sets the OV flag.\n *\n * **Operations**:\\n\n * ~~~\n * tmp = Rs1.W[0] + Rs2.W[0];\n * if (tmp > (2^16)-1) {\n *   tmp = (2^16)-1;\n *   OV = 1;\n * }\n * Rd = SE(tmp[15:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKADDH(unsigned int a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ukaddh %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.152. UKADDH ===== */\n\n/* ===== Inline Function Start for 3.153. UKADDW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief UKADDW (Unsigned Addition with U32 Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * UKADDW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add the unsigned lower 32-bit content of two registers with U32 saturation.\n *\n * **Description**:\\n\n * The unsigned lower 32-bit content of Rs1 is added with the unsigned lower 32-bit\n * content of Rs2. And the result is saturated to the 32-bit unsigned integer range of [0, 2^32-1] and then\n * sign-extended and written to Rd. If saturation happens, this instruction sets the OV flag.\n *\n * **Operations**:\\n\n * ~~~\n * tmp = Rs1.W[0] + Rs2.W[0];\n * if (tmp > (2^32)-1) {\n *   tmp[31:0] = (2^32)-1;\n *   OV = 1;\n * }\n * Rd = tmp[31:0]; // RV32\n * Rd = SE(tmp[31:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKADDW(unsigned int a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ukaddw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.153. UKADDW ===== */\n\n/* ===== Inline Function Start for 3.154. UKCRAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief UKCRAS16 (SIMD 16-bit Unsigned Saturating Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UKCRAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do one 16-bit unsigned integer element saturating addition and one 16-bit unsigned\n * integer element saturating subtraction in a 32-bit chunk simultaneously. Operands are from crossed\n * positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit unsigned integer element in [31:16] of 32-bit chunks in\n * Rs1 with the 16-bit unsigned integer element in [15:0] of 32-bit chunks in Rs2; at the same time, it\n * subtracts the 16-bit unsigned integer element in [31:16] of 32-bit chunks in Rs2 from the 16-bit\n * unsigned integer element in [15:0] of 32-bit chunks in Rs1. If any of the results are beyond the 16-bit\n * unsigned number range (0 <= RES <= 2^16-1), they are saturated to the range and the OV bit is set to 1.\n * The saturated results are written to [31:16] of 32-bit chunks in Rd for addition and [15:0] of 32-bit\n * chunks in Rd for subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[x][31:16] + Rs2.W[x][15:0];\n * res2 = Rs1.W[x][15:0] - Rs2.W[x][31:16];\n * if (res1 > (2^16)-1) {\n *   res1 = (2^16)-1;\n *   OV = 1;\n * }\n * if (res2 < 0) {\n *   res2 = 0;\n *   OV = 1;\n * }\n * Rd.W[x][31:16] = res1;\n * Rd.W[x][15:0] = res2;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKCRAS16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ukcras16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.154. UKCRAS16 ===== */\n\n/* ===== Inline Function Start for 3.155. UKCRSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief UKCRSA16 (SIMD 16-bit Unsigned Saturating Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UKCRSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do one 16-bit unsigned integer element saturating subtraction and one 16-bit unsigned\n * integer element saturating addition in a 32-bit chunk simultaneously. Operands are from crossed\n * positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit unsigned integer element in [15:0] of 32-bit\n * chunks in Rs2 from the 16-bit unsigned integer element in [31:16] of 32-bit chunks in Rs1; at the\n * same time, it adds the 16-bit unsigned integer element in [31:16] of 32-bit chunks in Rs2 with the 16-\n * bit unsigned integer element in [15:0] of 32-bit chunks in Rs1. If any of the results are beyond the\n * 16-bit unsigned number range (0 <= RES <= 2^16-1), they are saturated to the range and the OV bit is set\n * to 1. The saturated results are written to [31:16] of 32-bit chunks in Rd for subtraction and [15:0] of\n * 32-bit chunks in Rd for addition.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[x][31:16] - Rs2.W[x][15:0];\n * res2 = Rs1.W[x][15:0] + Rs2.W[x][31:16];\n * if (res1 < 0) {\n *   res1 = 0;\n *   OV = 1;\n * } else if (res2 > (2^16)-1) {\n *   res2 = (2^16)-1;\n *   OV = 1;\n * }\n * Rd.W[x][31:16] = res1;\n * Rd.W[x][15:0] = res2;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKCRSA16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ukcrsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.155. UKCRSA16 ===== */\n\n/* ===== Inline Function Start for 3.156. UKMAR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB\n * \\brief UKMAR64 (Unsigned Multiply and Saturating Add to 64-Bit Data)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * UKMAR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit unsigned elements in two registers and add the 64-bit multiplication\n * results to the 64-bit unsigned data of a pair of registers (RV32) or a register (RV64). The result is\n * saturated to the U64 range and written back to the pair of registers (RV32) or the register (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit unsigned data of Rs1 with that of Rs2. It\n * adds the 64-bit multiplication result to the 64-bit unsigned data of an even/odd pair of registers\n * specified by Rd(4,1) with unlimited precision. If the 64-bit addition result is beyond the U64 number\n * range (0 <= U64 <= 2^64-1), it is saturated to the range and the OV bit is set to 1. The saturated result is\n * written back to the even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the 32-bit unsigned elements of Rs1 with that of Rs2.\n * It adds the 64-bit multiplication results to the 64-bit unsigned data in Rd with unlimited precision. If\n * the 64-bit addition result is beyond the U64 number range (0 <= U64 <= 2^64-1), it is saturated to the\n * range and the OV bit is set to 1. The saturated result is written back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * result = R[t_H].R[t_L] + (Rs1 * Rs2);\n * if (result > (2^64)-1) {\n *   result = (2^64)-1; OV = 1;\n * }\n * R[t_H].R[t_L] = result;\n * * RV64:\n * // `result` has unlimited precision\n * result = Rd + (Rs1.W[0] u* Rs2.W[0]) + (Rs1.W[1] u* Rs2.W[1]);\n * if (result > (2^64)-1) {\n *   result = (2^64)-1; OV = 1;\n * }\n * Rd = result;\n * ~~~\n *\n * \\param [in]  t    unsigned long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UKMAR64(unsigned long long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"ukmar64 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.156. UKMAR64 ===== */\n\n/* ===== Inline Function Start for 3.157. UKMSR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB\n * \\brief UKMSR64 (Unsigned Multiply and Saturating Subtract from 64-Bit Data)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * UKMSR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit unsigned elements in two registers and subtract the 64-bit\n * multiplication results from the 64-bit unsigned data of a pair of registers (RV32) or a register (RV64).\n * The result is saturated to the U64 range and written back to the pair of registers (RV32) or a register\n * (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit unsigned data of Rs1 with that of Rs2. It\n * subtracts the 64-bit multiplication result from the 64-bit unsigned data of an even/odd pair of\n * registers specified by Rd(4,1) with unlimited precision. If the 64-bit subtraction result is beyond the\n * U64 number range (0 <= U64 <= 2^64-1), it is saturated to the range and the OV bit is set to 1. The\n * saturated result is written back to the even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the 32-bit unsigned elements of Rs1 with that of Rs2.\n * It subtracts the 64-bit multiplication results from the 64-bit unsigned data of Rd with unlimited\n * precision. If the 64-bit subtraction result is beyond the U64 number range (0 <= U64 <= 2^64-1), it is\n * saturated to the range and the OV bit is set to 1. The saturated result is written back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * result = R[t_H].R[t_L] - (Rs1 u* Rs2);\n * if (result < 0) {\n *   result = 0; OV = 1;\n * }\n * R[t_H].R[t_L] = result;\n * * RV64:\n * // `result` has unlimited precision\n * result = Rd - (Rs1.W[0] u* Rs2.W[0]) - (Rs1.W[1] u* Rs2.W[1]);\n * if (result < 0) {\n *   result = 0; OV = 1;\n * }\n * Rd = result;\n * ~~~\n *\n * \\param [in]  t    unsigned long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UKMSR64(unsigned long long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"ukmsr64 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.157. UKMSR64 ===== */\n\n/* ===== Inline Function Start for 3.158. UKSTAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief UKSTAS16 (SIMD 16-bit Unsigned Saturating Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UKSTAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do one 16-bit unsigned integer element saturating addition and one 16-bit unsigned\n * integer element saturating subtraction in a 32-bit chunk simultaneously. Operands are from\n * corresponding positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit unsigned integer element in [31:16] of 32-bit chunks in\n * Rs1 with the 16-bit unsigned integer element in [31:16] of 32-bit chunks in Rs2; at the same time, it\n * subtracts the 16-bit unsigned integer element in [15:0] of 32-bit chunks in Rs2 from the 16-bit\n * unsigned integer element in [15:0] of 32-bit chunks in Rs1. If any of the results are beyond the 16-bit\n * unsigned number range (0 <= RES <= 2^16-1), they are saturated to the range and the OV bit is set to 1.\n * The saturated results are written to [31:16] of 32-bit chunks in Rd for addition and [15:0] of 32-bit\n * chunks in Rd for subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[x][31:16] + Rs2.W[x][31:16];\n * res2 = Rs1.W[x][15:0] - Rs2.W[x][15:0];\n * if (res1 > (2^16)-1) {\n *   res1 = (2^16)-1;\n *   OV = 1;\n * }\n * if (res2 < 0) {\n *   res2 = 0;\n *   OV = 1;\n * }\n * Rd.W[x][31:16] = res1;\n * Rd.W[x][15:0] = res2;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSTAS16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ukstas16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.158. UKSTAS16 ===== */\n\n/* ===== Inline Function Start for 3.159. UKSTSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief UKSTSA16 (SIMD 16-bit Unsigned Saturating Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UKSTSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do one 16-bit unsigned integer element saturating subtraction and one 16-bit unsigned\n * integer element saturating addition in a 32-bit chunk simultaneously. Operands are from\n * corresponding positions in 32-bit chunks.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit unsigned integer element in [31:16] of 32-bit\n * chunks in Rs2 from the 16-bit unsigned integer element in [31:16] of 32-bit chunks in Rs1; at the\n * same time, it adds the 16-bit unsigned integer element in [15:0] of 32-bit chunks in Rs2 with the 16-\n * bit unsigned integer element in [15:0] of 32-bit chunks in Rs1. If any of the results are beyond the\n * 16-bit unsigned number range (0 <= RES <= 2^16-1), they are saturated to the range and the OV bit is set\n * to 1. The saturated results are written to [31:16] of 32-bit chunks in Rd for subtraction and [15:0] of\n * 32-bit chunks in Rd for addition.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[x][31:16] - Rs2.W[x][31:16];\n * res2 = Rs1.W[x][15:0] + Rs2.W[x][15:0];\n * if (res1 < 0) {\n *   res1 = 0;\n *   OV = 1;\n * } else if (res2 > (2^16)-1) {\n *   res2 = (2^16)-1;\n *   OV = 1;\n * }\n * Rd.W[x][31:16] = res1;\n * Rd.W[x][15:0] = res2;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSTSA16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ukstsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.159. UKSTSA16 ===== */\n\n/* ===== Inline Function Start for 3.160. UKSUB8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief UKSUB8 (SIMD 8-bit Unsigned Saturating Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UKSUB8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit unsigned integer elements saturating subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 8-bit unsigned integer elements in Rs2 from the 8-bit\n * unsigned integer elements in Rs1. If any of the results are beyond the 8-bit unsigned number range\n * (0 <= RES <= 28-1), they are saturated to the range and the OV bit is set to 1. The saturated results are\n * written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.B[x] - Rs2.B[x];\n * if (res[x] < 0) {\n *   res[x] = 0;\n *   OV = 1;\n * }\n * Rd.B[x] = res[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSUB8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"uksub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.160. UKSUB8 ===== */\n\n/* ===== Inline Function Start for 3.161. UKSUB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief UKSUB16 (SIMD 16-bit Unsigned Saturating Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UKSUB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer elements saturating subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit unsigned integer elements in Rs2 from the 16-bit\n * unsigned integer elements in Rs1. If any of the results are beyond the 16-bit unsigned number\n * range (0 <= RES <= 2^16-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.H[x] - Rs2.H[x];\n * if (res[x] < 0) {\n *   res[x] = 0;\n *   OV = 1;\n * }\n * Rd.H[x] = res[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSUB16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"uksub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.161. UKSUB16 ===== */\n\n/* ===== Inline Function Start for 3.162. UKSUB64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief UKSUB64 (64-bit Unsigned Saturating Subtraction)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * UKSUB64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Perform a 64-bit signed integer subtraction. The result is saturated to the U64 range.\n *\n * **RV32 Description**:\\n\n * This instruction subtracts the 64-bit unsigned integer of an even/odd pair of\n * registers specified by Rs2(4,1) from the 64-bit unsigned integer of an even/odd pair of registers\n * specified by Rs1(4,1). If the 64-bit result is beyond the U64 number range (0 <= U64 <= 2^64-1), it is\n * saturated to the range and the OV bit is set to 1. The saturated result is then written to an even/odd\n * pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the operand and the even `2d`\n * register of the pair contains the low 32-bit of the operand.\n *\n * **RV64 Description**:\\n\n * This instruction subtracts the 64-bit unsigned integer of Rs2 from the 64-bit\n * unsigned integer of an even/odd pair of Rs1. If the 64-bit result is beyond the U64 number range (0 <=\n * U64 <= 2^64-1), it is saturated to the range and the OV bit is set to 1. The saturated result is then written\n * to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * a_L = CONCAT(Rs1(4,1),1'b0); a_H = CONCAT(Rs1(4,1),1'b1);\n * b_L = CONCAT(Rs2(4,1),1'b0); b_H = CONCAT(Rs2(4,1),1'b1);\n * result = R[a_H].R[a_L] - R[b_H].R[b_L];\n * if (result < 0) {\n *   result = 0; OV = 1;\n * }\n * R[t_H].R[t_L] = result;\n * * RV64\n * result = Rs1 - Rs2;\n * if (result < 0) {\n *   result = 0; OV = 1;\n * }\n * Rd = result;\n * ~~~\n *\n * \\param [in]  a    unsigned long long type of value stored in a\n * \\param [in]  b    unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UKSUB64(unsigned long long a, unsigned long long b)\n{\n    register unsigned long long result;\n    __ASM volatile(\"uksub64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.162. UKSUB64 ===== */\n\n/* ===== Inline Function Start for 3.163. UKSUBH ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q15_SAT_ALU\n * \\brief UKSUBH (Unsigned Subtraction with U16 Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * UKSUBH Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Subtract the unsigned lower 32-bit content of two registers with U16 saturation.\n *\n * **Description**:\\n\n * The unsigned lower 32-bit content of Rs2 is subtracted from the unsigned lower 32-bit\n * content of Rs1. And the result is saturated to the 16-bit unsigned integer range of [0, 2^16-1] and then\n * sign-extended and written to Rd. If saturation happens, this instruction sets the OV flag.\n *\n * **Operations**:\\n\n * ~~~\n * tmp = Rs1.W[0] - Rs2.W[0];\n * if (tmp > (2^16)-1) {\n *   tmp = (2^16)-1;\n *   OV = 1;\n * }\n * else if (tmp < 0) {\n *   tmp = 0;\n *   OV = 1;\n * }\n * Rd = SE(tmp[15:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSUBH(unsigned int a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"uksubh %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.163. UKSUBH ===== */\n\n/* ===== Inline Function Start for 3.164. UKSUBW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_Q31_SAT_ALU\n * \\brief UKSUBW (Unsigned Subtraction with U32 Saturation)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * UKSUBW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Subtract the unsigned lower 32-bit content of two registers with unsigned 32-bit\n * saturation.\n *\n * **Description**:\\n\n * The unsigned lower 32-bit content of Rs2 is subtracted from the unsigned lower 32-bit\n * content of Rs1. And the result is saturated to the 32-bit unsigned integer range of [0, 2^32-1] and then\n * sign-extended and written to Rd. If saturation happens, this instruction sets the OV flag.\n *\n * **Operations**:\\n\n * ~~~\n * tmp = Rs1.W[0] - Rs2.W[0];\n * if (tmp < 0) {\n *   tmp[31:0] = 0;\n *   OV = 1;\n * }\n * Rd = tmp[31:0]; // RV32\n * Rd = SE(tmp[31:0]); // RV64\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSUBW(unsigned int a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"uksubw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.164. UKSUBW ===== */\n\n/* ===== Inline Function Start for 3.165. UMAR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB\n * \\brief UMAR64 (Unsigned Multiply and Add to 64-Bit Data)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * UMAR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit unsigned elements in two registers and add the 64-bit multiplication\n * results to the 64-bit unsigned data of a pair of registers (RV32) or a register (RV64). The result is\n * written back to the pair of registers (RV32) or a register (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit unsigned data of Rs1 with that of Rs2. It\n * adds the 64-bit multiplication result to the 64-bit unsigned data of an even/odd pair of registers\n * specified by Rd(4,1). The addition result is written back to the even/odd pair of registers specified by\n * Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the 32-bit unsigned elements of Rs1 with that of Rs2.\n * It adds the 64-bit multiplication results to the 64-bit unsigned data of Rd. The addition result is\n * written back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H].R[t_L] = R[t_H].R[t_L] + (Rs1 * Rs2);\n * * RV64:\n * Rd = Rd + (Rs1.W[0] u* Rs2.W[0]) + (Rs1.W[1] u* Rs2.W[1]);\n * ~~~\n *\n * \\param [in]  t    unsigned long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UMAR64(unsigned long long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"umar64 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.165. UMAR64 ===== */\n\n/* ===== Inline Function Start for 3.166. UMAQA ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_8B_MULT_32B_ADD\n * \\brief UMAQA (Unsigned Multiply Four Bytes with 32- bit Adds)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * UMAQA Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do four unsigned 8-bit multiplications from 32-bit chunks of two registers; and then adds\n * the four 16-bit results and the content of corresponding 32-bit chunks of a third register together.\n *\n * **Description**:\\n\n * This instruction multiplies the four unsigned 8-bit elements of 32-bit chunks of Rs1 with the four\n * unsigned 8-bit elements of 32-bit chunks of Rs2 and then adds the four results together with the\n * unsigned content of the corresponding 32-bit chunks of Rd. The final results are written back to the\n * corresponding 32-bit chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rd.W[x] + (Rs1.W[x].B[3] u* Rs2.W[x].B[3]) +\n *          (Rs1.W[x].B[2] u* Rs2.W[x].B[2]) + (Rs1.W[x].B[1] u* Rs2.W[x].B[1]) +\n *          (Rs1.W[x].B[0] u* Rs2.W[x].B[0]);\n * Rd.W[x] = res[x];\n * for RV32: x=0,\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  t    unsigned long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UMAQA(unsigned long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"umaqa %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.166. UMAQA ===== */\n\n/* ===== Inline Function Start for 3.167. UMAX8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief UMAX8 (SIMD 8-bit Unsigned Maximum)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UMAX8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit unsigned integer elements finding maximum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit unsigned integer elements in Rs1 with the four 8-\n * bit unsigned integer elements in Rs2 and selects the numbers that is greater than the other one. The\n * two selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] >u Rs2.B[x])? Rs1.B[x] : Rs2.B[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UMAX8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"umax8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.167. UMAX8 ===== */\n\n/* ===== Inline Function Start for 3.168. UMAX16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief UMAX16 (SIMD 16-bit Unsigned Maximum)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UMAX16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer elements finding maximum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit unsigned integer elements in Rs1 with the 16-bit\n * unsigned integer elements in Rs2 and selects the numbers that is greater than the other one. The\n * selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] >u Rs2.H[x])? Rs1.H[x] : Rs2.H[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UMAX16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"umax16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.168. UMAX16 ===== */\n\n/* ===== Inline Function Start for 3.169. UMIN8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MISC\n * \\brief UMIN8 (SIMD 8-bit Unsigned Minimum)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UMIN8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit unsigned integer elements finding minimum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 8-bit unsigned integer elements in Rs1 with the 8-bit\n * unsigned integer elements in Rs2 and selects the numbers that is less than the other one. The\n * selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] <u Rs2.B[x])? Rs1.B[x] : Rs2.B[x];\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UMIN8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"umin8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.169. UMIN8 ===== */\n\n/* ===== Inline Function Start for 3.170. UMIN16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MISC\n * \\brief UMIN16 (SIMD 16-bit Unsigned Minimum)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UMIN16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer elements finding minimum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 16-bit unsigned integer elements in Rs1 with the 16-bit\n * unsigned integer elements in Rs2 and selects the numbers that is less than the other one. The\n * selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] <u Rs2.H[x])? Rs1.H[x] : Rs2.H[x];\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UMIN16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"umin16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.170. UMIN16 ===== */\n\n/* ===== Inline Function Start for 3.171. UMSR64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_MULT_64B_ADDSUB\n * \\brief UMSR64 (Unsigned Multiply and Subtract from 64-Bit Data)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * UMSR64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the 32-bit unsigned elements in two registers and subtract the 64-bit\n * multiplication results from the 64-bit unsigned data of a pair of registers (RV32) or a register (RV64).\n * The result is written back to the pair of registers (RV32) or a register (RV64).\n *\n * **RV32 Description**:\\n\n * This instruction multiplies the 32-bit unsigned data of Rs1 with that of Rs2. It\n * subtracts the 64-bit multiplication result from the 64-bit unsigned data of an even/odd pair of\n * registers specified by Rd(4,1). The subtraction result is written back to the even/odd pair of registers\n * specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction multiplies the 32-bit unsigned elements of Rs1 with that of Rs2.\n * It subtracts the 64-bit multiplication results from the 64-bit unsigned data of Rd. The subtraction\n * result is written back to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H].R[t_L] = R[t_H].R[t_L] - (Rs1 * Rs2);\n * * RV64:\n * Rd = Rd - (Rs1.W[0] u* Rs2.W[0]) - (Rs1.W[1] u* Rs2.W[1]);\n * ~~~\n *\n * \\param [in]  t    unsigned long long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UMSR64(unsigned long long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"umsr64 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 3.171. UMSR64 ===== */\n\n/* ===== Inline Function Start for 3.172.1. UMUL8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MULTIPLY\n * \\brief UMUL8 (SIMD Unsigned 8-bit Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UMUL8 Rd, Rs1, Rs2\n * UMULX8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do unsigned 8-bit multiplications and generate four 16-bit results simultaneously.\n *\n * **RV32 Description**:\\n\n * For the `UMUL8` instruction, multiply the unsigned 8-bit data elements of Rs1\n * with the corresponding unsigned 8-bit data elements of Rs2.\n * For the `UMULX8` instruction, multiply the first and second unsigned 8-bit data elements of Rs1\n * with the second and first unsigned 8-bit data elements of Rs2. At the same time, multiply the third\n * and fourth unsigned 8-bit data elements of Rs1 with the fourth and third unsigned 8-bit data\n * elements of Rs2.\n * The four 16-bit results are then written into an even/odd pair of registers specified by Rd(4,1).\n * Rd(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the two 16-bit results calculated from the top part of\n * Rs1 and the even `2d` register of the pair contains the two 16-bit results calculated from the bottom\n * part of Rs1.\n *\n * **RV64 Description**:\\n\n * For the `UMUL8` instruction, multiply the unsigned 8-bit data elements of Rs1\n * with the corresponding unsigned 8-bit data elements of Rs2.\n * For the `UMULX8` instruction, multiply the first and second unsigned 8-bit data elements of Rs1\n * with the second and first unsigned 8-bit data elements of Rs2. At the same time, multiply the third\n * and fourth unsigned 8-bit data elements of Rs1 with the fourth and third unsigned 8-bit data\n * elements of Rs2.\n * The four 16-bit results are then written into Rd. The Rd.W[1] contains the two 16-bit results\n * calculated from the top part of Rs1 and the Rd.W[0] contains the two 16-bit results calculated from\n * the bottom part of Rs1.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * if (is `UMUL8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x+1]; // top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x]; // bottom\n * } else if (is `UMULX8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x]; // Rs1 top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x+1]; // Rs1 bottom\n * }\n * rest[x/2] = op1t[x/2] u* op2t[x/2];\n * resb[x/2] = op1b[x/2] u* op2b[x/2];\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H].H[1] = rest[1]; R[t_H].H[0] = resb[1];\n * R[t_L].H[1] = rest[0]; R[t_L].H[0] = resb[0];\n * x = 0 and 2\n * * RV64:\n * if (is `UMUL8`) {\n *     op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x+1]; // top\n *     op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x]; // bottom\n * } else if (is `UMULX8`) {\n *     op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x]; // Rs1 top\n *     op1b[x/2]  =  Rs1.B[x]; op2b[x/2]  =  Rs2.B[x+1];  //  Rs1  bottom\n * }\n * rest[x/2]  =  op1t[x/2]  u*  op2t[x/2];\n * resb[x/2]  =  op1b[x/2]  u*  op2b[x/2];\n * t_L  =  CONCAT(Rd(4,1),1'b0); t_H  =  CONCAT(Rd(4,1),1'b1);\n * Rd.W[1].H[1] = rest[1]; Rd.W[1].H[0] = resb[1];\n * Rd.W[0].H[1] = rest[0]; Rd.W[0].H[0] = resb[0]; x = 0 and 2\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UMUL8(unsigned int a, unsigned int b)\n{\n    register unsigned long long result;\n    __ASM volatile(\"umul8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.172.1. UMUL8 ===== */\n\n/* ===== Inline Function Start for 3.172.2. UMULX8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_MULTIPLY\n * \\brief UMULX8 (SIMD Unsigned Crossed 8-bit Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UMUL8 Rd, Rs1, Rs2\n * UMULX8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do unsigned 8-bit multiplications and generate four 16-bit results simultaneously.\n *\n * **RV32 Description**:\\n\n * For the `UMUL8` instruction, multiply the unsigned 8-bit data elements of Rs1\n * with the corresponding unsigned 8-bit data elements of Rs2.\n * For the `UMULX8` instruction, multiply the first and second unsigned 8-bit data elements of Rs1\n * with the second and first unsigned 8-bit data elements of Rs2. At the same time, multiply the third\n * and fourth unsigned 8-bit data elements of Rs1 with the fourth and third unsigned 8-bit data\n * elements of Rs2.\n * The four 16-bit results are then written into an even/odd pair of registers specified by Rd(4,1).\n * Rd(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the two 16-bit results calculated from the top part of\n * Rs1 and the even `2d` register of the pair contains the two 16-bit results calculated from the bottom\n * part of Rs1.\n *\n * **RV64 Description**:\\n\n * For the `UMUL8` instruction, multiply the unsigned 8-bit data elements of Rs1\n * with the corresponding unsigned 8-bit data elements of Rs2.\n * For the `UMULX8` instruction, multiply the first and second unsigned 8-bit data elements of Rs1\n * with the second and first unsigned 8-bit data elements of Rs2. At the same time, multiply the third\n * and fourth unsigned 8-bit data elements of Rs1 with the fourth and third unsigned 8-bit data\n * elements of Rs2.\n * The four 16-bit results are then written into Rd. The Rd.W[1] contains the two 16-bit results\n * calculated from the top part of Rs1 and the Rd.W[0] contains the two 16-bit results calculated from\n * the bottom part of Rs1.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * if (is `UMUL8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x+1]; // top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x]; // bottom\n * } else if (is `UMULX8`) {\n *   op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x]; // Rs1 top\n *   op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x+1]; // Rs1 bottom\n * }\n * rest[x/2] = op1t[x/2] u* op2t[x/2];\n * resb[x/2] = op1b[x/2] u* op2b[x/2];\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H].H[1] = rest[1]; R[t_H].H[0] = resb[1];\n * R[t_L].H[1] = rest[0]; R[t_L].H[0] = resb[0];\n * x = 0 and 2\n * * RV64:\n * if (is `UMUL8`) {\n *     op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x+1]; // top\n *     op1b[x/2] = Rs1.B[x]; op2b[x/2] = Rs2.B[x]; // bottom\n * } else if (is `UMULX8`) {\n *     op1t[x/2] = Rs1.B[x+1]; op2t[x/2] = Rs2.B[x]; // Rs1 top\n *     op1b[x/2]  =  Rs1.B[x]; op2b[x/2]  =  Rs2.B[x+1];  //  Rs1  bottom\n * }\n * rest[x/2]  =  op1t[x/2]  u*  op2t[x/2];\n * resb[x/2]  =  op1b[x/2]  u*  op2b[x/2];\n * t_L  =  CONCAT(Rd(4,1),1'b0); t_H  =  CONCAT(Rd(4,1),1'b1);\n * Rd.W[1].H[1] = rest[1]; Rd.W[1].H[0] = resb[1];\n * Rd.W[0].H[1] = rest[0]; Rd.W[0].H[0] = resb[0]; x = 0 and 2\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UMULX8(unsigned int a, unsigned int b)\n{\n    register unsigned long long result;\n    __ASM volatile(\"umulx8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.172.2. UMULX8 ===== */\n\n/* ===== Inline Function Start for 3.173.1. UMUL16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MULTIPLY\n * \\brief UMUL16 (SIMD Unsigned 16-bit Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UMUL16 Rd, Rs1, Rs2\n * UMULX16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do unsigned 16-bit multiplications and generate two 32-bit results simultaneously.\n *\n * **RV32 Description**:\\n\n * For the `UMUL16` instruction, multiply the top 16-bit U16 content of Rs1 with\n * the top 16-bit U16 content of Rs2. At the same time, multiply the bottom 16-bit U16 content of Rs1\n * with the bottom 16-bit U16 content of Rs2.\n * For the `UMULX16` instruction, multiply the top 16-bit U16 content of Rs1 with the bottom 16-bit\n * U16 content of Rs2. At the same time, multiply the bottom 16-bit U16 content of Rs1 with the top 16-\n * bit U16 content of Rs2.\n * The two U32 results are then written into an even/odd pair of registers specified by Rd(4,1). Rd(4,1),\n * i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair includes\n * register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the 32-bit result calculated from the top part of Rs1 and\n * the even `2d` register of the pair contains the 32-bit result calculated from the bottom part of Rs1.\n *\n * **RV64 Description**:\\n\n * For the `UMUL16` instruction, multiply the top 16-bit U16 content of the lower\n * 32-bit word in Rs1 with the top 16-bit U16 content of the lower 32-bit word in Rs2. At the same time,\n * multiply the bottom 16-bit U16 content of the lower 32-bit word in Rs1 with the bottom 16-bit U16\n * content of the lower 32-bit word in Rs2.\n * For the `UMULX16` instruction, multiply the top 16-bit U16 content of the lower 32-bit word in Rs1\n * with the bottom 16-bit U16 content of the lower 32-bit word in Rs2. At the same time, multiply the\n * bottom 16-bit U16 content of the lower 32-bit word in Rs1 with the top 16-bit U16 content of the\n * lower 32-bit word in Rs2.\n * The two 32-bit U32 results are then written into Rd. The result calculated from the top 16-bit of the\n * lower 32-bit word in Rs1 is written to Rd.W[1]. And the result calculated from the bottom 16-bit of\n * the lower 32-bit word in Rs1 is written to Rd.W[0]\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * if (is `UMUL16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[1]; // top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[0]; // bottom\n * } else if (is `UMULX16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[0]; // Rs1 top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   res = aop u* bop;\n * }\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H] = rest;\n * R[t_L] = resb;\n * * RV64:\n * if (is `UMUL16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[1]; // top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[0]; // bottom\n * } else if (is `UMULX16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[0]; // Rs1 top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   res = aop u* bop;\n * }\n * Rd.W[1] = rest;\n * Rd.W[0] = resb;\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UMUL16(unsigned int a, unsigned int b)\n{\n    register unsigned long long result;\n    __ASM volatile(\"umul16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.173.1. UMUL16 ===== */\n\n/* ===== Inline Function Start for 3.173.2. UMULX16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_MULTIPLY\n * \\brief UMULX16 (SIMD Unsigned Crossed 16-bit Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * UMUL16 Rd, Rs1, Rs2\n * UMULX16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do unsigned 16-bit multiplications and generate two 32-bit results simultaneously.\n *\n * **RV32 Description**:\\n\n * For the `UMUL16` instruction, multiply the top 16-bit U16 content of Rs1 with\n * the top 16-bit U16 content of Rs2. At the same time, multiply the bottom 16-bit U16 content of Rs1\n * with the bottom 16-bit U16 content of Rs2.\n * For the `UMULX16` instruction, multiply the top 16-bit U16 content of Rs1 with the bottom 16-bit\n * U16 content of Rs2. At the same time, multiply the bottom 16-bit U16 content of Rs1 with the top 16-\n * bit U16 content of Rs2.\n * The two U32 results are then written into an even/odd pair of registers specified by Rd(4,1). Rd(4,1),\n * i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair includes\n * register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the 32-bit result calculated from the top part of Rs1 and\n * the even `2d` register of the pair contains the 32-bit result calculated from the bottom part of Rs1.\n *\n * **RV64 Description**:\\n\n * For the `UMUL16` instruction, multiply the top 16-bit U16 content of the lower\n * 32-bit word in Rs1 with the top 16-bit U16 content of the lower 32-bit word in Rs2. At the same time,\n * multiply the bottom 16-bit U16 content of the lower 32-bit word in Rs1 with the bottom 16-bit U16\n * content of the lower 32-bit word in Rs2.\n * For the `UMULX16` instruction, multiply the top 16-bit U16 content of the lower 32-bit word in Rs1\n * with the bottom 16-bit U16 content of the lower 32-bit word in Rs2. At the same time, multiply the\n * bottom 16-bit U16 content of the lower 32-bit word in Rs1 with the top 16-bit U16 content of the\n * lower 32-bit word in Rs2.\n * The two 32-bit U32 results are then written into Rd. The result calculated from the top 16-bit of the\n * lower 32-bit word in Rs1 is written to Rd.W[1]. And the result calculated from the bottom 16-bit of\n * the lower 32-bit word in Rs1 is written to Rd.W[0]\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * if (is `UMUL16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[1]; // top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[0]; // bottom\n * } else if (is `UMULX16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[0]; // Rs1 top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   res = aop u* bop;\n * }\n * t_L = CONCAT(Rd(4,1),1'b0); t_H = CONCAT(Rd(4,1),1'b1);\n * R[t_H] = rest;\n * R[t_L] = resb;\n * * RV64:\n * if (is `UMUL16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[1]; // top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[0]; // bottom\n * } else if (is `UMULX16`) {\n *   op1t = Rs1.H[1]; op2t = Rs2.H[0]; // Rs1 top\n *   op1b = Rs1.H[0]; op2b = Rs2.H[1]; // Rs1 bottom\n * }\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   res = aop u* bop;\n * }\n * Rd.W[1] = rest;\n * Rd.W[0] = resb;\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_UMULX16(unsigned int a, unsigned int b)\n{\n    register unsigned long long result;\n    __ASM volatile(\"umulx16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.173.2. UMULX16 ===== */\n\n/* ===== Inline Function Start for 3.174. URADD8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief URADD8 (SIMD 8-bit Unsigned Halving Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * URADD8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit unsigned integer element additions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 8-bit unsigned integer elements in Rs1 with the 8-bit\n * unsigned integer elements in Rs2. The results are first logically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7F, Rb = 0x7F, Rt = 0x7F\n * * Ra = 0x80, Rb = 0x80, Rt = 0x80\n * * Ra = 0x40, Rb = 0x80, Rt = 0x60\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] + Rs2.B[x]) u>> 1;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URADD8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"uradd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.174. URADD8 ===== */\n\n/* ===== Inline Function Start for 3.175. URADD16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief URADD16 (SIMD 16-bit Unsigned Halving Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * URADD16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer element additions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit unsigned integer elements in Rs1 with the 16-bit\n * unsigned integer elements in Rs2. The results are first logically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7FFF, Rb = 0x7FFF Rt = 0x7FFF\n * * Ra = 0x8000, Rb = 0x8000 Rt = 0x8000\n * * Ra = 0x4000, Rb = 0x8000 Rt = 0x6000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] + Rs2.H[x]) u>> 1;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URADD16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"uradd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.175. URADD16 ===== */\n\n/* ===== Inline Function Start for 3.176. URADD64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief URADD64 (64-bit Unsigned Halving Addition)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * URADD64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add two 64-bit unsigned integers. The result is halved to avoid overflow or saturation.\n *\n * **RV32 Description**:\\n\n * This instruction adds the 64-bit unsigned integer of an even/odd pair of registers\n * specified by Rs1(4,1) with the 64-bit unsigned integer of an even/odd pair of registers specified by\n * Rs2(4,1). The 64-bit addition result is first logically right-shifted by 1 bit and then written to an\n * even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction adds the 64-bit unsigned integer in Rs1 with the 64-bit unsigned\n * integer Rs2. The 64-bit addition result is first logically right-shifted by 1 bit and then written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rt(4,1),1'b0); t_H = CONCAT(Rt(4,1),1'b1);\n * a_L = CONCAT(Ra(4,1),1'b0); a_H = CONCAT(Ra(4,1),1'b1);\n * b_L = CONCAT(Rb(4,1),1'b0); b_H = CONCAT(Rb(4,1),1'b1);\n * R[t_H].R[t_L] = (R[a_H].R[a_L] + R[b_H].R[b_L]) u>> 1;\n * * RV64:\n * Rd = (Rs1 + Rs2) u>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long long type of value stored in a\n * \\param [in]  b    unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_URADD64(unsigned long long a, unsigned long long b)\n{\n    register unsigned long long result;\n    __ASM volatile(\"uradd64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.176. URADD64 ===== */\n\n/* ===== Inline Function Start for 3.177. URADDW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION\n * \\brief URADDW (32-bit Unsigned Halving Addition)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * URADDW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Add 32-bit unsigned integers and the results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the first 32-bit unsigned integer in Rs1 with the first 32-bit\n * unsigned integer in Rs2. The result is first logically right-shifted by 1 bit and then sign-extended and\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7FFFFFFF, Rb = 0x7FFFFFFF Rt = 0x7FFFFFFF\n * * Ra = 0x80000000, Rb = 0x80000000 Rt = 0x80000000\n * * Ra = 0x40000000, Rb = 0x80000000 Rt = 0x60000000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * Rd[31:0] = (Rs1[31:0] + Rs2[31:0]) u>> 1;\n * * RV64:\n * resw[31:0] = (Rs1[31:0] + Rs2[31:0]) u>> 1;\n * Rd[63:0] = SE(resw[31:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URADDW(unsigned int a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"uraddw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.177. URADDW ===== */\n\n/* ===== Inline Function Start for 3.178. URCRAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief URCRAS16 (SIMD 16-bit Unsigned Halving Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * URCRAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer element addition and 16-bit unsigned integer element\n * subtraction in a 32-bit chunk simultaneously. Operands are from crossed positions in 32-bit chunks.\n * The results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit unsigned integer in [31:16] of 32-bit chunks in Rs1\n * with the 16-bit unsigned integer in [15:0] of 32-bit chunks in Rs2, and subtracts the 16-bit unsigned\n * integer in [31:16] of 32-bit chunks in Rs2 from the 16-bit unsigned integer in [15:0] of 32-bit chunks\n * in Rs1. The element results are first logically right-shifted by 1 bit and then written to [31:16] of 32-\n * bit chunks in Rd and [15:0] of 32-bit chunks in Rd.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `URADD16` and `URSUB16` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = (Rs1.W[x][31:16] + Rs2.W[x][15:0]) u>> 1;\n * Rd.W[x][15:0] = (Rs1.W[x][15:0] - Rs2.W[x][31:16]) u>> 1;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URCRAS16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"urcras16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.178. URCRAS16 ===== */\n\n/* ===== Inline Function Start for 3.179. URCRSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief URCRSA16 (SIMD 16-bit Unsigned Halving Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * URCRSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer element subtraction and 16-bit unsigned integer element\n * addition in a 32-bit chunk simultaneously. Operands are from crossed positions in 32-bit chunks.\n * The results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit unsigned integer in [15:0] of 32-bit chunks in Rs2\n * from the 16-bit unsigned integer in [31:16] of 32-bit chunks in Rs1, and adds the 16-bit unsigned\n * integer in [15:0] of 32-bit chunks in Rs1 with the 16-bit unsigned integer in [31:16] of 32-bit chunks\n * in Rs2. The two results are first logically right-shifted by 1 bit and then written to [31:16] of 32-bit\n * chunks in Rd and [15:0] of 32-bit chunks in Rd.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `URADD16` and `URSUB16` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = (Rs1.W[x][31:16] - Rs2.W[x][15:0]) u>> 1;\n * Rd.W[x][15:0] = (Rs1.W[x][15:0] + Rs2.W[x][31:16]) u>> 1;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URCRSA16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"urcrsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.179. URCRSA16 ===== */\n\n/* ===== Inline Function Start for 3.180. URSTAS16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief URSTAS16 (SIMD 16-bit Unsigned Halving Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * URSTAS16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer element addition and 16-bit unsigned integer element\n * subtraction in a 32-bit chunk simultaneously. Operands are from corresponding positions in 32-bit\n * chunks. The results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit unsigned integer in [31:16] of 32-bit chunks in Rs1\n * with the 16-bit unsigned integer in [31:16] of 32-bit chunks in Rs2, and subtracts the 16-bit unsigned\n * integer in [15:0] of 32-bit chunks in Rs2 from the 16-bit unsigned integer in [15:0] of 32-bit chunks\n * in Rs1. The element results are first logically right-shifted by 1 bit and then written to [31:16] of 32-\n * bit chunks in Rd and [15:0] of 32-bit chunks in Rd.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `URADD16` and `URSUB16` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = (Rs1.W[x][31:16] + Rs2.W[x][31:16]) u>> 1;\n * Rd.W[x][15:0] = (Rs1.W[x][15:0] - Rs2.W[x][15:0]) u>> 1;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URSTAS16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"urstas16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.180. URSTAS16 ===== */\n\n/* ===== Inline Function Start for 3.181. URSTSA16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief URSTSA16 (SIMD 16-bit Unsigned Halving Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * URCRSA16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer element subtraction and 16-bit unsigned integer element\n * addition in a 32-bit chunk simultaneously. Operands are from corresponding positions in 32-bit\n * chunks. The results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit unsigned integer in [31:16] of 32-bit chunks in Rs2\n * from the 16-bit unsigned integer in [31:16] of 32-bit chunks in Rs1, and adds the 16-bit unsigned\n * integer in [15:0] of 32-bit chunks in Rs1 with the 16-bit unsigned integer in [15:0] of 32-bit chunks in\n * Rs2. The two results are first logically right-shifted by 1 bit and then written to [31:16] of 32-bit\n * chunks in Rd and [15:0] of 32-bit chunks in Rd.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `URADD16` and `URSUB16` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:16] = (Rs1.W[x][31:16] - Rs2.W[x][31:16]) u>> 1;\n * Rd.W[x][15:0] = (Rs1.W[x][15:0] + Rs2.W[x][15:0]) u>> 1;\n * for RV32, x=0\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URSTSA16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"urstsa16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.181. URSTSA16 ===== */\n\n/* ===== Inline Function Start for 3.182. URSUB8 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_ADDSUB\n * \\brief URSUB8 (SIMD 8-bit Unsigned Halving Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * URSUB8 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit unsigned integer element subtractions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 8-bit unsigned integer elements in Rs2 from the 8-bit\n * unsigned integer elements in Rs1. The results are first logically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7F, Rb = 0x80 Rt = 0xFF\n * * Ra = 0x80, Rb = 0x7F Rt = 0x00\n * * Ra = 0x80, Rb = 0x40 Rt = 0x20\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.B[x] = (Rs1.B[x] - Rs2.B[x]) u>> 1;\n * for RV32: x=3...0,\n * for RV64: x=7...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URSUB8(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ursub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.182. URSUB8 ===== */\n\n/* ===== Inline Function Start for 3.183. URSUB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_16B_ADDSUB\n * \\brief URSUB16 (SIMD 16-bit Unsigned Halving Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * URSUB16 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit unsigned integer element subtractions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit unsigned integer elements in Rs2 from the 16-bit\n * unsigned integer elements in Rs1. The results are first logically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7FFF, Rb = 0x8000 Rt = 0xFFFF\n * * Ra = 0x8000, Rb = 0x7FFF Rt = 0x0000\n * * Ra = 0x8000, Rb = 0x4000 Rt = 0x2000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.H[x] = (Rs1.H[x] - Rs2.H[x]) u>> 1;\n * for RV32: x=1...0,\n * for RV64: x=3...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URSUB16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ursub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.183. URSUB16 ===== */\n\n/* ===== Inline Function Start for 3.184. URSUB64 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_64B_ADDSUB\n * \\brief URSUB64 (64-bit Unsigned Halving Subtraction)\n * \\details\n * **Type**: DSP (64-bit Profile)\n *\n * **Syntax**:\\n\n * ~~~\n * URSUB64 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Perform a 64-bit unsigned integer subtraction. The result is halved to avoid overflow or\n * saturation.\n *\n * **RV32 Description**:\\n\n * This instruction subtracts the 64-bit unsigned integer of an even/odd pair of\n * registers specified by Rs2(4,1) from the 64-bit unsigned integer of an even/odd pair of registers\n * specified by Rs1(4,1). The subtraction result is first logically right-shifted by 1 bit and then written\n * to an even/odd pair of registers specified by Rd(4,1).\n * Rx(4,1), i.e., d, determines the even/odd pair group of two registers. Specifically, the register pair\n * includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the result and the even `2d` register\n * of the pair contains the low 32-bit of the result.\n *\n * **RV64 Description**:\\n\n * This instruction subtracts the 64-bit unsigned integer in Rs2 from the 64-bit\n * unsigned integer in Rs1. The subtraction result is first logically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * t_L = CONCAT(Rt(4,1),1'b0); t_H = CONCAT(Rt(4,1),1'b1);\n * a_L = CONCAT(Ra(4,1),1'b0); a_H = CONCAT(Ra(4,1),1'b1);\n * b_L = CONCAT(Rb(4,1),1'b0); b_H = CONCAT(Rb(4,1),1'b1);\n * R[t_H].R[t_L] = (R[a_H].R[a_L] - R[b_H].R[b_L]) u>> 1;\n * * RV64:\n * Rd = (Rs1 - Rs2) u>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long long type of value stored in a\n * \\param [in]  b    unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_URSUB64(unsigned long long a, unsigned long long b)\n{\n    register unsigned long long result;\n    __ASM volatile(\"ursub64 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.184. URSUB64 ===== */\n\n/* ===== Inline Function Start for 3.185. URSUBW ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_32B_COMPUTATION\n * \\brief URSUBW (32-bit Unsigned Halving Subtraction)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * URSUBW Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Subtract 32-bit unsigned integers and the result is halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the first 32-bit signed integer in Rs2 from the first 32-bit\n * signed integer in Rs1. The result is first logically right-shifted by 1 bit and then sign-extended and\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7FFFFFFF, Rb = 0x80000000 Rt = 0xFFFFFFFF\n * * Ra = 0x80000000, Rb = 0x7FFFFFFF Rt = 0x00000000\n * * Ra = 0x80000000, Rb = 0x40000000 Rt = 0x20000000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * Rd[31:0] = (Rs1[31:0] - Rs2[31:0]) u>> 1;\n * * RV64:\n * resw[31:0] = (Rs1[31:0] - Rs2[31:0]) u>> 1;\n * Rd[63:0] = SE(resw[31:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URSUBW(unsigned int a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ursubw %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.185. URSUBW ===== */\n\n/* ===== Inline Function Start for 3.186. WEXTI ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief WEXTI (Extract Word from 64-bit Immediate)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * WEXTI Rd, Rs1, #LSBloc\n * ~~~\n *\n * **Purpose**:\\n\n * Extract a 32-bit word from a 64-bit value stored in an even/odd pair of registers (RV32) or\n * a register (RV64) starting from a specified immediate LSB bit position.\n *\n * **RV32 Description**:\\n\n * This instruction extracts a 32-bit word from a 64-bit value of an even/odd pair of registers specified\n * by Rs1(4,1) starting from a specified immediate LSB bit position, #LSBloc. The extracted word is\n * written to Rd.\n * Rs1(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register\n * pair includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the 64-bit value and the even `2d`\n * register of the pair contains the low 32-bit of the 64-bit value.\n *\n * **RV64 Description**:\\n\n * This instruction extracts a 32-bit word from a 64-bit value in Rs1 starting from a specified\n * immediate LSB bit position, #LSBloc. The extracted word is sign-extended and written to lower 32-\n * bit of Rd.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * Idx0 = CONCAT(Rs1(4,1),1'b0); Idx1 = CONCAT(Rs2(4,1),1'b1);\n * src[63:0] = Concat(R[Idx1], R[Idx0]);\n * Rd = src[31+LSBloc:LSBloc];\n * * RV64:\n * ExtractW = Rs1[31+LSBloc:LSBloc];\n * Rd = SE(ExtractW)\n * ~~~\n *\n * \\param [in]  a    long long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n#define __RV_WEXTI(a, b)    \\\n    ({    \\\n        register unsigned long result;    \\\n        register long long __a = (long long)(a);    \\\n        __ASM volatile(\"wexti %0, %1, %2\" : \"=r\"(result) : \"r\"(__a), \"K\"(b));    \\\n        result;    \\\n    })\n/* ===== Inline Function End for 3.186. WEXTI ===== */\n\n/* ===== Inline Function Start for 3.187. WEXT ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_NON_SIMD_MISC\n * \\brief WEXT (Extract Word from 64-bit)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * WEXT Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Extract a 32-bit word from a 64-bit value stored in an even/odd pair of registers (RV32) or\n * a register (RV64) starting from a specified LSB bit position in a register.\n *\n * **RV32 Description**:\\n\n * This instruction extracts a 32-bit word from a 64-bit value of an even/odd pair of registers specified\n * by Rs1(4,1) starting from a specified LSB bit position, specified in Rs2[4:0]. The extracted word is\n * written to Rd.\n * Rs1(4,1), i.e., d, determines the even/odd pair group of the two registers. Specifically, the register\n * pair includes register 2d and 2d+1.\n * The odd `2d+1` register of the pair contains the high 32-bit of the 64-bit value and the even `2d`\n * register of the pair contains the low 32-bit of the 64-bit value.\n *\n * **Operations**:\\n\n * ~~~\n * * RV32:\n * Idx0 = CONCAT(Rs1(4,1),1'b0); Idx1 = CONCAT(Rs1(4,1),1'b1);\n * src[63:0] = Concat(R[Idx1], R[Idx0]);\n * LSBloc = Rs2[4:0];\n * Rd = src[31+LSBloc:LSBloc];\n * * RV64:\n * LSBloc = Rs2[4:0];\n * ExtractW = Rs1[31+LSBloc:LSBloc];\n * Rd = SE(ExtractW)\n * ~~~\n *\n * \\param [in]  a    long long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_WEXT(long long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"wext %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 3.187. WEXT ===== */\n\n/* ===== Inline Function Start for 3.188.1. ZUNPKD810 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief ZUNPKD810 (Unsigned Unpacking Bytes 1 & 0)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * ZUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte x and byte y of 32-bit chunks in a register into two 16-bit unsigned\n * halfwords of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `ZUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit unsigned halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = ZE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = ZE16(Rs1.W[m].B[y])\n * // ZUNPKD810, x=1,y=0\n * // ZUNPKD820, x=2,y=0\n * // ZUNPKD830, x=3,y=0\n * // ZUNPKD831, x=3,y=1\n * // ZUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_ZUNPKD810(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"zunpkd810 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.188.1. ZUNPKD810 ===== */\n\n/* ===== Inline Function Start for 3.188.2. ZUNPKD820 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief ZUNPKD820 (Unsigned Unpacking Bytes 2 & 0)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * ZUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte x and byte y of 32-bit chunks in a register into two 16-bit unsigned\n * halfwords of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `ZUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit unsigned halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = ZE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = ZE16(Rs1.W[m].B[y])\n * // ZUNPKD810, x=1,y=0\n * // ZUNPKD820, x=2,y=0\n * // ZUNPKD830, x=3,y=0\n * // ZUNPKD831, x=3,y=1\n * // ZUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_ZUNPKD820(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"zunpkd820 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.188.2. ZUNPKD820 ===== */\n\n/* ===== Inline Function Start for 3.188.3. ZUNPKD830 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief ZUNPKD830 (Unsigned Unpacking Bytes 3 & 0)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * ZUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte x and byte y of 32-bit chunks in a register into two 16-bit unsigned\n * halfwords of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `ZUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit unsigned halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = ZE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = ZE16(Rs1.W[m].B[y])\n * // ZUNPKD810, x=1,y=0\n * // ZUNPKD820, x=2,y=0\n * // ZUNPKD830, x=3,y=0\n * // ZUNPKD831, x=3,y=1\n * // ZUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_ZUNPKD830(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"zunpkd830 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.188.3. ZUNPKD830 ===== */\n\n/* ===== Inline Function Start for 3.188.4. ZUNPKD831 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief ZUNPKD831 (Unsigned Unpacking Bytes 3 & 1)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * ZUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte x and byte y of 32-bit chunks in a register into two 16-bit unsigned\n * halfwords of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `ZUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit unsigned halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = ZE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = ZE16(Rs1.W[m].B[y])\n * // ZUNPKD810, x=1,y=0\n * // ZUNPKD820, x=2,y=0\n * // ZUNPKD830, x=3,y=0\n * // ZUNPKD831, x=3,y=1\n * // ZUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_ZUNPKD831(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"zunpkd831 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.188.4. ZUNPKD831 ===== */\n\n/* ===== Inline Function Start for 3.188.5. ZUNPKD832 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_SIMD_8B_UNPACK\n * \\brief ZUNPKD832 (Unsigned Unpacking Bytes 3 & 2)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * ZUNPKD8xy Rd, Rs1\n * xy = {10, 20, 30, 31, 32}\n * ~~~\n *\n * **Purpose**:\\n\n * Unpack byte x and byte y of 32-bit chunks in a register into two 16-bit unsigned\n * halfwords of 32-bit chunks in a register.\n *\n * **Description**:\\n\n * For the `ZUNPKD8(x)(*y*)` instruction, it unpacks byte *x and byte y* of 32-bit chunks in Rs1 into\n * two 16-bit unsigned halfwords and writes the results to the top part and the bottom part of 32-bit\n * chunks in Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[m].H[1] = ZE16(Rs1.W[m].B[x])\n * Rd.W[m].H[0] = ZE16(Rs1.W[m].B[y])\n * // ZUNPKD810, x=1,y=0\n * // ZUNPKD820, x=2,y=0\n * // ZUNPKD830, x=3,y=0\n * // ZUNPKD831, x=3,y=1\n * // ZUNPKD832, x=3,y=2\n * for RV32: m=0,\n * for RV64: m=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_ZUNPKD832(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"zunpkd832 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 3.188.5. ZUNPKD832 ===== */\n\n#if (__RISCV_XLEN == 64) || defined(__ONLY_FOR_DOXYGEN_DOCUMENT_GENERATION__)\n\n/* ===== Inline Function Start for 4.1. ADD32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief ADD32 (SIMD 32-bit Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * ADD32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit integer element additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit integer elements in Rs1 with the 32-bit integer\n * elements in Rs2, and then writes the 32-bit element results to Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned addition.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = Rs1.W[x] + Rs2.W[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_ADD32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"add32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.1. ADD32 ===== */\n\n/* ===== Inline Function Start for 4.2. CRAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief CRAS32 (SIMD 32-bit Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * CRAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit integer element addition and 32-bit integer element subtraction in a 64-bit\n * chunk simultaneously. Operands are from crossed 32-bit elements.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit integer element in [63:32] of Rs1 with the 32-bit\n * integer element in [31:0] of Rs2, and writes the result to [63:32] of Rd; at the same time, it subtracts\n * the 32-bit integer element in [63:32] of Rs2 from the 32-bit integer element in [31:0] of Rs1, and\n * writes the result to [31:0] of Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned operations.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = Rs1.W[1] + Rs2.W[0];\n * Rd.W[0] = Rs1.W[0] - Rs2.W[1];\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CRAS32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"cras32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.2. CRAS32 ===== */\n\n/* ===== Inline Function Start for 4.3. CRSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief CRSA32 (SIMD 32-bit Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * CRSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit integer element subtraction and 32-bit integer element addition in a 64-bit\n * chunk simultaneously. Operands are from crossed 32-bit elements.\n * *Description: *\n * This instruction subtracts the 32-bit integer element in [31:0] of Rs2 from the 32-bit integer element\n * in [63:32] of Rs1, and writes the result to [63:32] of Rd; at the same time, it adds the 32-bit integer\n * element in [31:0] of Rs1 with the 32-bit integer element in [63:32] of Rs2, and writes the result to\n * [31:0] of Rd\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned operations.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = Rs1.W[1] - Rs2.W[0];\n * Rd.W[0] = Rs1.W[0] + Rs2.W[1];\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_CRSA32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"crsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.3. CRSA32 ===== */\n\n/* ===== Inline Function Start for 4.4. KABS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_MISC\n * \\brief KABS32 (Scalar 32-bit Absolute Value with Saturation)\n * \\details\n * **Type**: DSP (RV64 Only)\n24    20\n19    15\n14    12\n11    7\nKABS32\n10010\nRs1\n000\nRd\n6    0\nGE80B\n1111111\n *\n * **Syntax**:\\n\n * ~~~\n * KABS32 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Get the absolute value of signed 32-bit integer elements in a general register.\n *\n * **Description**:\\n\n * This instruction calculates the absolute value of signed 32-bit integer elements stored\n * in Rs1. The results are written to Rd. This instruction with the minimum negative integer input of\n * 0x80000000 will produce a saturated output of maximum positive integer of 0x7fffffff and the OV\n * flag will be set to 1.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs1.W[x] >= 0) {\n *   res[x] = Rs1.W[x];\n * } else {\n *   If (Rs1.W[x] == 0x80000000) {\n *     res[x] = 0x7fffffff;\n *     OV = 1;\n *   } else {\n *     res[x] = -Rs1.W[x];\n *   }\n * }\n * Rd.W[x] = res[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KABS32(unsigned long a)\n{\n    register unsigned long result;\n    __ASM volatile(\"kabs32 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for 4.4. KABS32 ===== */\n\n/* ===== Inline Function Start for 4.5. KADD32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief KADD32 (SIMD 32-bit Signed Saturating Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KADD32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element saturating additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit signed integer elements in Rs1 with the 32-bit signed\n * integer elements in Rs2. If any of the results are beyond the Q31 number range (-2^31 <= Q31 <= 2^31-1),\n * they are saturated to the range and the OV bit is set to 1. The saturated results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.W[x] + Rs2.W[x];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KADD32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kadd32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.5. KADD32 ===== */\n\n/* ===== Inline Function Start for 4.6. KCRAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief KCRAS32 (SIMD 32-bit Signed Saturating Cross Addition & Subtraction)\n * \\details\n * **Type**: SIM (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KCRAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element saturating addition and 32-bit signed integer element\n * saturating subtraction in a 64-bit chunk simultaneously. Operands are from crossed 32-bit elements.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit integer element in [63:32] of Rs1 with the 32-bit\n * integer element in [31:0] of Rs2; at the same time, it subtracts the 32-bit integer element in [63:32] of\n * Rs2 from the 32-bit integer element in [31:0] of Rs1. If any of the results are beyond the Q31 number\n * range (-2^31 <= Q31 <= 2^31-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to [63:32] of Rd for addition and [31:0] of Rd for subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * res[1] = Rs1.W[1] + Rs2.W[0];\n * res[0] = Rs1.W[0] - Rs2.W[1];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[1] = res[1];\n * Rd.W[0] = res[0];\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KCRAS32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kcras32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.6. KCRAS32 ===== */\n\n/* ===== Inline Function Start for 4.7. KCRSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief KCRSA32 (SIMD 32-bit Signed Saturating Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KCRSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element saturating subtraction and 32-bit signed integer element\n * saturating addition in a 64-bit chunk simultaneously. Operands are from crossed 32-bit elements.\n * *Description: *\n * This instruction subtracts the 32-bit integer element in [31:0] of Rs2 from the 32-bit integer element\n * in [63:32] of Rs1; at the same time, it adds the 32-bit integer element in [31:0] of Rs1 with the 32-bit\n * integer element in [63:32] of Rs2. If any of the results are beyond the Q31 number range (-2^31 <= Q31\n * <= 2^31-1), they are saturated to the range and the OV bit is set to 1. The saturated results are written to\n * [63:32] of Rd for subtraction and [31:0] of Rd for addition.\n *\n * **Operations**:\\n\n * ~~~\n * res[1] = Rs1.W[1] - Rs2.W[0];\n * res[0] = Rs1.W[0] + Rs2.W[1];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[1] = res[1];\n * Rd.W[0] = res[0];\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KCRSA32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kcrsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.7. KCRSA32 ===== */\n\n/* ===== Inline Function Start for 4.8.1. KDMBB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KDMBB16 (SIMD Signed Saturating Double Multiply B16 x B16)\n * \\details\n * **Type**: SIMD (RV64 only)\n *\n * **Syntax**:\\n\n * ~~~\n * KDMxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then double and saturate the Q31 results into the 32-bit chunks\n * in the destination register. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the 32-bit portions in Rs2. The Q30 results are then doubled and\n * saturated into Q31 values. The Q31 values are then written into the 32-bit chunks in Rd. When both\n * the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated to 0x7FFFFFFF\n * and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * // KDMBB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KDMBT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KDMTT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop[z] = Rs1.H[x]; bop[z] = Rs2.H[y];\n * If (0x8000 != aop[z] | 0x8000 != bop[z]) {\n *   Mresult[z] = aop[z] * bop[z];\n *   resQ31[z] = Mresult[z] << 1;\n * } else {\n *   resQ31[z] = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * Rd.W[z] = resQ31[z];\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KDMBB16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kdmbb16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.8.1. KDMBB16 ===== */\n\n/* ===== Inline Function Start for 4.8.2. KDMBT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KDMBT16 (SIMD Signed Saturating Double Multiply B16 x T16)\n * \\details\n * **Type**: SIMD (RV64 only)\n *\n * **Syntax**:\\n\n * ~~~\n * KDMxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then double and saturate the Q31 results into the 32-bit chunks\n * in the destination register. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the 32-bit portions in Rs2. The Q30 results are then doubled and\n * saturated into Q31 values. The Q31 values are then written into the 32-bit chunks in Rd. When both\n * the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated to 0x7FFFFFFF\n * and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * // KDMBB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KDMBT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KDMTT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop[z] = Rs1.H[x]; bop[z] = Rs2.H[y];\n * If (0x8000 != aop[z] | 0x8000 != bop[z]) {\n *   Mresult[z] = aop[z] * bop[z];\n *   resQ31[z] = Mresult[z] << 1;\n * } else {\n *   resQ31[z] = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * Rd.W[z] = resQ31[z];\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KDMBT16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kdmbt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.8.2. KDMBT16 ===== */\n\n/* ===== Inline Function Start for 4.8.3. KDMTT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KDMTT16 (SIMD Signed Saturating Double Multiply T16 x T16)\n * \\details\n * **Type**: SIMD (RV64 only)\n *\n * **Syntax**:\\n\n * ~~~\n * KDMxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then double and saturate the Q31 results into the 32-bit chunks\n * in the destination register. If saturation happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the 32-bit portions in Rs2. The Q30 results are then doubled and\n * saturated into Q31 values. The Q31 values are then written into the 32-bit chunks in Rd. When both\n * the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated to 0x7FFFFFFF\n * and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * // KDMBB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KDMBT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KDMTT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop[z] = Rs1.H[x]; bop[z] = Rs2.H[y];\n * If (0x8000 != aop[z] | 0x8000 != bop[z]) {\n *   Mresult[z] = aop[z] * bop[z];\n *   resQ31[z] = Mresult[z] << 1;\n * } else {\n *   resQ31[z] = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * Rd.W[z] = resQ31[z];\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KDMTT16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kdmtt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.8.3. KDMTT16 ===== */\n\n/* ===== Inline Function Start for 4.9.1. KDMABB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KDMABB16 (SIMD Signed Saturating Double Multiply Addition B16 x B16)\n * \\details\n * **Type**: SIMD (RV64 only)\n *\n * **Syntax**:\\n\n * ~~~\n * KDMAxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then double and saturate the Q31 results, add the results with\n * the values of the corresponding 32-bit chunks from the destination register and write the saturated\n * addition results back into the corresponding 32-bit chunks of the destination register. If saturation\n * happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the corresponding 32-bit portions in Rs2. The Q30 results are then\n * doubled and saturated into Q31 values. The Q31 values are then added with the content of the\n * corresponding 32-bit portions of Rd. If the addition results are beyond the Q31 number range (-2^31 <=\n * Q31 <= 2^31-1), they are saturated to the range and the OV flag is set to 1. The results after saturation\n * are written back to Rd.\n * When both the two Q15 inputs are 0x8000, saturation will happen and the overflow flag OV will be\n * set.\n *\n * **Operations**:\\n\n * ~~~\n * // KDMABB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KDMABT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KDMATT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop[z] = Rs1.H[x]; bop[z] = Rs2.H[y];\n * If (0x8000 != aop[z] | 0x8000 != bop[z]) {\n *   Mresult[z] = aop[z] * bop[z];\n *   resQ31[z] = Mresult[z] << 1;\n * } else {\n *   resQ31[z] = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * resadd[z] = Rd.W[z] + resQ31[z];\n * if (resadd[z] > (2^31)-1) {\n *   resadd[z] = (2^31)-1;\n *   OV = 1;\n * } else if (resadd[z] < -2^31) {\n *   resadd[z] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[z] = resadd[z];\n * ~~~\n *\n * \\param [in]  t    unsigned long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KDMABB16(unsigned long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kdmabb16 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 4.9.1. KDMABB16 ===== */\n\n/* ===== Inline Function Start for 4.9.2. KDMABT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KDMABT16 (SIMD Signed Saturating Double Multiply Addition B16 x T16)\n * \\details\n * **Type**: SIMD (RV64 only)\n *\n * **Syntax**:\\n\n * ~~~\n * KDMAxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then double and saturate the Q31 results, add the results with\n * the values of the corresponding 32-bit chunks from the destination register and write the saturated\n * addition results back into the corresponding 32-bit chunks of the destination register. If saturation\n * happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the corresponding 32-bit portions in Rs2. The Q30 results are then\n * doubled and saturated into Q31 values. The Q31 values are then added with the content of the\n * corresponding 32-bit portions of Rd. If the addition results are beyond the Q31 number range (-2^31 <=\n * Q31 <= 2^31-1), they are saturated to the range and the OV flag is set to 1. The results after saturation\n * are written back to Rd.\n * When both the two Q15 inputs are 0x8000, saturation will happen and the overflow flag OV will be\n * set.\n *\n * **Operations**:\\n\n * ~~~\n * // KDMABB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KDMABT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KDMATT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop[z] = Rs1.H[x]; bop[z] = Rs2.H[y];\n * If (0x8000 != aop[z] | 0x8000 != bop[z]) {\n *   Mresult[z] = aop[z] * bop[z];\n *   resQ31[z] = Mresult[z] << 1;\n * } else {\n *   resQ31[z] = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * resadd[z] = Rd.W[z] + resQ31[z];\n * if (resadd[z] > (2^31)-1) {\n *   resadd[z] = (2^31)-1;\n *   OV = 1;\n * } else if (resadd[z] < -2^31) {\n *   resadd[z] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[z] = resadd[z];\n * ~~~\n *\n * \\param [in]  t    unsigned long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KDMABT16(unsigned long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kdmabt16 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 4.9.2. KDMABT16 ===== */\n\n/* ===== Inline Function Start for 4.9.3. KDMATT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KDMATT16 (SIMD Signed Saturating Double Multiply Addition T16 x T16)\n * \\details\n * **Type**: SIMD (RV64 only)\n *\n * **Syntax**:\\n\n * ~~~\n * KDMAxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then double and saturate the Q31 results, add the results with\n * the values of the corresponding 32-bit chunks from the destination register and write the saturated\n * addition results back into the corresponding 32-bit chunks of the destination register. If saturation\n * happens, an overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the corresponding 32-bit portions in Rs2. The Q30 results are then\n * doubled and saturated into Q31 values. The Q31 values are then added with the content of the\n * corresponding 32-bit portions of Rd. If the addition results are beyond the Q31 number range (-2^31 <=\n * Q31 <= 2^31-1), they are saturated to the range and the OV flag is set to 1. The results after saturation\n * are written back to Rd.\n * When both the two Q15 inputs are 0x8000, saturation will happen and the overflow flag OV will be\n * set.\n *\n * **Operations**:\\n\n * ~~~\n * // KDMABB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KDMABT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KDMATT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop[z] = Rs1.H[x]; bop[z] = Rs2.H[y];\n * If (0x8000 != aop[z] | 0x8000 != bop[z]) {\n *   Mresult[z] = aop[z] * bop[z];\n *   resQ31[z] = Mresult[z] << 1;\n * } else {\n *   resQ31[z] = 0x7FFFFFFF;\n *   OV = 1;\n * }\n * resadd[z] = Rd.W[z] + resQ31[z];\n * if (resadd[z] > (2^31)-1) {\n *   resadd[z] = (2^31)-1;\n *   OV = 1;\n * } else if (resadd[z] < -2^31) {\n *   resadd[z] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[z] = resadd[z];\n * ~~~\n *\n * \\param [in]  t    unsigned long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KDMATT16(unsigned long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kdmatt16 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 4.9.3. KDMATT16 ===== */\n\n/* ===== Inline Function Start for 4.10.1. KHMBB16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KHMBB16 (SIMD Signed Saturating Half Multiply B16 x B16)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KHMxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then right-shift 15 bits to turn the Q30 results into Q15\n * numbers again and saturate the Q15 results into the destination register. If saturation happens, an\n * overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the 32-bit portion in Rs2. The Q30 results are then right-shifted 15-\n * bits and saturated into Q15 values. The 32-bit Q15 values are then written into the 32-bit chunks in\n * Rd. When both the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated\n * to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * // KHMBB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KHMBT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KHMTT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop = Rs1.H[x]; bop = Rs2.H[y];\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult[31:0] = aop * bop;\n *   res[15:0] = Mresult[30:15];\n * } else {\n *   res[15:0] = 0x7FFF;\n *   OV = 1;\n * }\n * Rd.W[z] = SE32(res[15:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KHMBB16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"khmbb16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.10.1. KHMBB16 ===== */\n\n/* ===== Inline Function Start for 4.10.2. KHMBT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KHMBT16 (SIMD Signed Saturating Half Multiply B16 x T16)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KHMxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then right-shift 15 bits to turn the Q30 results into Q15\n * numbers again and saturate the Q15 results into the destination register. If saturation happens, an\n * overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the 32-bit portion in Rs2. The Q30 results are then right-shifted 15-\n * bits and saturated into Q15 values. The 32-bit Q15 values are then written into the 32-bit chunks in\n * Rd. When both the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated\n * to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * // KHMBB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KHMBT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KHMTT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop = Rs1.H[x]; bop = Rs2.H[y];\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult[31:0] = aop * bop;\n *   res[15:0] = Mresult[30:15];\n * } else {\n *   res[15:0] = 0x7FFF;\n *   OV = 1;\n * }\n * Rd.W[z] = SE32(res[15:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KHMBT16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"khmbt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.10.2. KHMBT16 ===== */\n\n/* ===== Inline Function Start for 4.10.3. KHMTT16 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_Q15_SAT_MULT\n * \\brief KHMTT16 (SIMD Signed Saturating Half Multiply T16 x T16)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KHMxy16 Rd, Rs1, Rs2 (xy = BB, BT, TT)\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed Q15 integer contents of two 16-bit data in the corresponding portion\n * of the 32-bit chunks in registers and then right-shift 15 bits to turn the Q30 results into Q15\n * numbers again and saturate the Q15 results into the destination register. If saturation happens, an\n * overflow flag OV will be set.\n *\n * **Description**:\\n\n * Multiply the top or bottom 16-bit Q15 content of the 32-bit portions in Rs1 with the top\n * or bottom 16-bit Q15 content of the 32-bit portion in Rs2. The Q30 results are then right-shifted 15-\n * bits and saturated into Q15 values. The 32-bit Q15 values are then written into the 32-bit chunks in\n * Rd. When both the two Q15 inputs are 0x8000, saturation will happen. The result will be saturated\n * to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * // KHMBB16: (x,y,z)=(0,0,0),(2,2,1)\n * // KHMBT16: (x,y,z)=(0,1,0),(2,3,1)\n * // KHMTT16: (x,y,z)=(1,1,0),(3,3,1)\n * aop = Rs1.H[x]; bop = Rs2.H[y];\n * If (0x8000 != aop | 0x8000 != bop) {\n *   Mresult[31:0] = aop * bop;\n *   res[15:0] = Mresult[30:15];\n * } else {\n *   res[15:0] = 0x7FFF;\n *   OV = 1;\n * }\n * Rd.W[z] = SE32(res[15:0]);\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KHMTT16(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"khmtt16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.10.3. KHMTT16 ===== */\n\n/* ===== Inline Function Start for 4.11.1. KMABB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_MULT_ADD\n * \\brief KMABB32 (Saturating Signed Multiply Bottom Words & Add)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMABB32 Rd, Rs1, Rs2\n * KMABT32 Rd, Rs1, Rs2\n * KMATT32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit element in a register with the 32-bit element in another register\n * and add the result to the content of 64-bit data in the third register. The addition result may be\n * saturated and is written to the third register.\n * * KMABB32: rd + bottom*bottom\n * * KMABT32: rd + bottom*top\n * * KMATT32: rd + top*top\n *\n * **Description**:\\n\n * For the `KMABB32` instruction, it multiplies the bottom 32-bit element in Rs1 with the bottom 32-bit\n * element in Rs2.\n * For the `KMABT32` instruction, it multiplies the bottom 32-bit element in Rs1 with the top 32-bit\n * element in Rs2.\n * For the `KMATT32` instruction, it multiplies the top 32-bit element in Rs1 with the top 32-bit\n * element in Rs2.\n * The multiplication result is added to the content of 64-bit data in Rd. If the addition result is beyond\n * the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to 1. The\n * result after saturation is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd + (Rs1.W[0] * Rs2.W[0]); // KMABB32\n *  res = Rd + (Rs1.W[0] * Rs2.W[1]); // KMABT32\n *  res = Rd + (Rs1.W[1] * Rs2.W[1]); // KMATT32\n *  if (res > (2^63)-1) {\n *    res = (2^63)-1;\n *    OV = 1;\n *  } else if (res < -2^63) {\n *    res = -2^63;\n *    OV = 1;\n *  }\n *  Rd = res;\n * *Exceptions:* None\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMABB32(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmabb32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 4.11.1. KMABB32 ===== */\n\n/* ===== Inline Function Start for 4.11.2. KMABT32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_MULT_ADD\n * \\brief KMABT32 (Saturating Signed Multiply Bottom & Top Words & Add)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMABB32 Rd, Rs1, Rs2\n * KMABT32 Rd, Rs1, Rs2\n * KMATT32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit element in a register with the 32-bit element in another register\n * and add the result to the content of 64-bit data in the third register. The addition result may be\n * saturated and is written to the third register.\n * * KMABB32: rd + bottom*bottom\n * * KMABT32: rd + bottom*top\n * * KMATT32: rd + top*top\n *\n * **Description**:\\n\n * For the `KMABB32` instruction, it multiplies the bottom 32-bit element in Rs1 with the bottom 32-bit\n * element in Rs2.\n * For the `KMABT32` instruction, it multiplies the bottom 32-bit element in Rs1 with the top 32-bit\n * element in Rs2.\n * For the `KMATT32` instruction, it multiplies the top 32-bit element in Rs1 with the top 32-bit\n * element in Rs2.\n * The multiplication result is added to the content of 64-bit data in Rd. If the addition result is beyond\n * the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to 1. The\n * result after saturation is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd + (Rs1.W[0] * Rs2.W[0]); // KMABB32\n *  res = Rd + (Rs1.W[0] * Rs2.W[1]); // KMABT32\n *  res = Rd + (Rs1.W[1] * Rs2.W[1]); // KMATT32\n *  if (res > (2^63)-1) {\n *    res = (2^63)-1;\n *    OV = 1;\n *  } else if (res < -2^63) {\n *    res = -2^63;\n *    OV = 1;\n *  }\n *  Rd = res;\n * *Exceptions:* None\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMABT32(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmabt32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 4.11.2. KMABT32 ===== */\n\n/* ===== Inline Function Start for 4.11.3. KMATT32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_MULT_ADD\n * \\brief KMATT32 (Saturating Signed Multiply Top Words & Add)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMABB32 Rd, Rs1, Rs2\n * KMABT32 Rd, Rs1, Rs2\n * KMATT32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit element in a register with the 32-bit element in another register\n * and add the result to the content of 64-bit data in the third register. The addition result may be\n * saturated and is written to the third register.\n * * KMABB32: rd + bottom*bottom\n * * KMABT32: rd + bottom*top\n * * KMATT32: rd + top*top\n *\n * **Description**:\\n\n * For the `KMABB32` instruction, it multiplies the bottom 32-bit element in Rs1 with the bottom 32-bit\n * element in Rs2.\n * For the `KMABT32` instruction, it multiplies the bottom 32-bit element in Rs1 with the top 32-bit\n * element in Rs2.\n * For the `KMATT32` instruction, it multiplies the top 32-bit element in Rs1 with the top 32-bit\n * element in Rs2.\n * The multiplication result is added to the content of 64-bit data in Rd. If the addition result is beyond\n * the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to 1. The\n * result after saturation is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd + (Rs1.W[0] * Rs2.W[0]); // KMABB32\n *  res = Rd + (Rs1.W[0] * Rs2.W[1]); // KMABT32\n *  res = Rd + (Rs1.W[1] * Rs2.W[1]); // KMATT32\n *  if (res > (2^63)-1) {\n *    res = (2^63)-1;\n *    OV = 1;\n *  } else if (res < -2^63) {\n *    res = -2^63;\n *    OV = 1;\n *  }\n *  Rd = res;\n * *Exceptions:* None\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMATT32(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmatt32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 4.11.3. KMATT32 ===== */\n\n/* ===== Inline Function Start for 4.12.1. KMADA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMADA32 (Saturating Signed Multiply Two Words and Two Adds)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMADA32 Rd, Rs1, Rs2\n * KMAXDA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from 32-bit data in two registers; and then adds the\n * two 64-bit results and 64-bit data in a third register together. The addition result may be saturated.\n * * KMADA32: rd + top*top + bottom*bottom\n * * KMAXDA32: rd + top*bottom + bottom*top\n *\n * **Description**:\\n\n * For the `KMADA32` instruction, it multiplies the bottom 32-bit element in Rs1 with the bottom 32-\n * bit element in Rs2 and then adds the result to the result of multiplying the top 32-bit element in Rs1\n * with the top 32-bit element in Rs2. It is actually an alias of the `KMAR64` instruction.\n * For the `KMAXDA32` instruction, it multiplies the top 32-bit element in Rs1 with the bottom 32-bit\n * element in Rs2 and then adds the result to the result of multiplying the bottom 32-bit element in Rs1\n * with the top 32-bit element in Rs2.\n * The result is added to the content of 64-bit data in Rd. If the addition result is beyond the Q63\n * number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to 1. The 64-bit\n * result is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd + (Rs1.W[1] * Rs2.w[1]) + (Rs1.W[0] * Rs2.W[0]); // KMADA32\n * res = Rd + (Rs1.W[1] * Rs2.W[0]) + (Rs1.W[0] * Rs2.W[1]); // KMAXDA32\n * if (res > (2^63)-1) {\n *   res = (2^63)-1;\n *   OV = 1;\n * } else if (res < -2^63) {\n *   res = -2^63;\n *   OV = 1;\n * }\n * Rd = res;\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMADA32(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmada32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 4.12.1. KMADA32 ===== */\n\n/* ===== Inline Function Start for 4.12.2. KMAXDA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMAXDA32 (Saturating Signed Crossed Multiply Two Words and Two Adds)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMADA32 Rd, Rs1, Rs2\n * KMAXDA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from 32-bit data in two registers; and then adds the\n * two 64-bit results and 64-bit data in a third register together. The addition result may be saturated.\n * * KMADA32: rd + top*top + bottom*bottom\n * * KMAXDA32: rd + top*bottom + bottom*top\n *\n * **Description**:\\n\n * For the `KMADA32` instruction, it multiplies the bottom 32-bit element in Rs1 with the bottom 32-\n * bit element in Rs2 and then adds the result to the result of multiplying the top 32-bit element in Rs1\n * with the top 32-bit element in Rs2. It is actually an alias of the `KMAR64` instruction.\n * For the `KMAXDA32` instruction, it multiplies the top 32-bit element in Rs1 with the bottom 32-bit\n * element in Rs2 and then adds the result to the result of multiplying the bottom 32-bit element in Rs1\n * with the top 32-bit element in Rs2.\n * The result is added to the content of 64-bit data in Rd. If the addition result is beyond the Q63\n * number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to 1. The 64-bit\n * result is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd + (Rs1.W[1] * Rs2.w[1]) + (Rs1.W[0] * Rs2.W[0]); // KMADA32\n * res = Rd + (Rs1.W[1] * Rs2.W[0]) + (Rs1.W[0] * Rs2.W[1]); // KMAXDA32\n * if (res > (2^63)-1) {\n *   res = (2^63)-1;\n *   OV = 1;\n * } else if (res < -2^63) {\n *   res = -2^63;\n *   OV = 1;\n * }\n * Rd = res;\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMAXDA32(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmaxda32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 4.12.2. KMAXDA32 ===== */\n\n/* ===== Inline Function Start for 4.13.1. KMDA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMDA32 (Signed Multiply Two Words and Add)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMDA32 Rd, Rs1, Rs2\n * KMXDA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from the 32-bit element of two registers; and then\n * adds the two 64-bit results together. The addition result may be saturated.\n * * KMDA32: top*top + bottom*bottom\n * * KMXDA32: top*bottom + bottom*top\n *\n * **Description**:\\n\n * For the `KMDA32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2 and then adds the result to the result of multiplying the top 32-bit element of Rs1\n * with the top 32-bit element of Rs2.\n * For the `KMXDA32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and then adds the result to the result of multiplying the top 32-bit element of Rs1\n * with the bottom 32-bit element of Rs2.\n * The addition result is checked for saturation. If saturation happens, the result is saturated to 2^63-1.\n * The final result is written to Rd. The 32-bit contents are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1 != 0x8000000080000000) or (Rs2 != 0x8000000080000000)) {\n *   Rd = (Rs1.W[1] * Rs2.W[1]) + (Rs1.W[0] * Rs2.W[0]); // KMDA32\n *   Rd = (Rs1.W[1] * Rs2.W[0]) + (Rs1.W[0] * Rs2.W[1]); // KMXDA32\n * } else {\n *   Rd = 0x7fffffffffffffff;\n *   OV = 1;\n * }\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMDA32(unsigned long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"kmda32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.13.1. KMDA32 ===== */\n\n/* ===== Inline Function Start for 4.13.2. KMXDA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMXDA32 (Signed Crossed Multiply Two Words and Add)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMDA32 Rd, Rs1, Rs2\n * KMXDA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from the 32-bit element of two registers; and then\n * adds the two 64-bit results together. The addition result may be saturated.\n * * KMDA32: top*top + bottom*bottom\n * * KMXDA32: top*bottom + bottom*top\n *\n * **Description**:\\n\n * For the `KMDA32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2 and then adds the result to the result of multiplying the top 32-bit element of Rs1\n * with the top 32-bit element of Rs2.\n * For the `KMXDA32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and then adds the result to the result of multiplying the top 32-bit element of Rs1\n * with the bottom 32-bit element of Rs2.\n * The addition result is checked for saturation. If saturation happens, the result is saturated to 2^63-1.\n * The final result is written to Rd. The 32-bit contents are treated as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * if ((Rs1 != 0x8000000080000000) or (Rs2 != 0x8000000080000000)) {\n *   Rd = (Rs1.W[1] * Rs2.W[1]) + (Rs1.W[0] * Rs2.W[0]); // KMDA32\n *   Rd = (Rs1.W[1] * Rs2.W[0]) + (Rs1.W[0] * Rs2.W[1]); // KMXDA32\n * } else {\n *   Rd = 0x7fffffffffffffff;\n *   OV = 1;\n * }\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMXDA32(unsigned long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"kmxda32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.13.2. KMXDA32 ===== */\n\n/* ===== Inline Function Start for 4.14.1. KMADS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMADS32 (Saturating Signed Multiply Two Words & Subtract & Add)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMADS32 Rd, Rs1, Rs2\n * KMADRS32 Rd, Rs1, Rs2\n * KMAXDS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from 32-bit elements in two registers; and then\n * perform a subtraction operation between the two 64-bit results. Then add the subtraction result to\n * 64-bit data in a third register. The addition result may be saturated.\n * * KMADS32: rd + (top*top - bottom*bottom)\n * * KMADRS32: rd + (bottom*bottom - top*top)\n * * KMAXDS32: rd + (top*bottom - bottom*top)\n *\n * **Description**:\\n\n * For the `KMADS32` instruction, it multiplies the bottom 32-bit element in Rs1 with the bottom 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the top 32-bit element in\n * Rs1 with the top 32-bit element in Rs2.\n * For the `KMADRS32` instruction, it multiplies the top 32-bit element in Rs1 with the top 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the bottom 32-bit\n * element in Rs1 with the bottom 32-bit element in Rs2.\n * For the `KMAXDS32` instruction, it multiplies the bottom 32-bit element in Rs1 with the top 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the top 32-bit element in\n * Rs1 with the bottom 32-bit element in Rs2.\n * The subtraction result is then added to the content of 64-bit data in Rd. If the addition result is\n * beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to\n * 1. The 64-bit result after saturation is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated\n * as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd + (Rs1.W[1] * Rs2.W[1]) - (Rs1.W[0] * Rs2.W[0]); // KMADS32\n * res = Rd + (Rs1.W[0] * Rs2.W[0]) - (Rs1.W[1] * Rs2.W[1]); // KMADRS32\n * res = Rd + (Rs1.W[1] * Rs2.W[0]) - (Rs1.W[0] * Rs2.W[1]); // KMAXDS32\n * if (res > (2^63)-1) {\n *   res = (2^63)-1;\n *   OV = 1;\n * } else if (res < -2^63) {\n *   res = -2^63;\n *   OV = 1;\n * }\n * Rd = res;\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMADS32(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmads32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 4.14.1. KMADS32 ===== */\n\n/* ===== Inline Function Start for 4.14.2. KMADRS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMADRS32 (Saturating Signed Multiply Two Words & Reverse Subtract & Add)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMADS32 Rd, Rs1, Rs2\n * KMADRS32 Rd, Rs1, Rs2\n * KMAXDS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from 32-bit elements in two registers; and then\n * perform a subtraction operation between the two 64-bit results. Then add the subtraction result to\n * 64-bit data in a third register. The addition result may be saturated.\n * * KMADS32: rd + (top*top - bottom*bottom)\n * * KMADRS32: rd + (bottom*bottom - top*top)\n * * KMAXDS32: rd + (top*bottom - bottom*top)\n *\n * **Description**:\\n\n * For the `KMADS32` instruction, it multiplies the bottom 32-bit element in Rs1 with the bottom 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the top 32-bit element in\n * Rs1 with the top 32-bit element in Rs2.\n * For the `KMADRS32` instruction, it multiplies the top 32-bit element in Rs1 with the top 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the bottom 32-bit\n * element in Rs1 with the bottom 32-bit element in Rs2.\n * For the `KMAXDS32` instruction, it multiplies the bottom 32-bit element in Rs1 with the top 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the top 32-bit element in\n * Rs1 with the bottom 32-bit element in Rs2.\n * The subtraction result is then added to the content of 64-bit data in Rd. If the addition result is\n * beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to\n * 1. The 64-bit result after saturation is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated\n * as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd + (Rs1.W[1] * Rs2.W[1]) - (Rs1.W[0] * Rs2.W[0]); // KMADS32\n * res = Rd + (Rs1.W[0] * Rs2.W[0]) - (Rs1.W[1] * Rs2.W[1]); // KMADRS32\n * res = Rd + (Rs1.W[1] * Rs2.W[0]) - (Rs1.W[0] * Rs2.W[1]); // KMAXDS32\n * if (res > (2^63)-1) {\n *   res = (2^63)-1;\n *   OV = 1;\n * } else if (res < -2^63) {\n *   res = -2^63;\n *   OV = 1;\n * }\n * Rd = res;\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMADRS32(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmadrs32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 4.14.2. KMADRS32 ===== */\n\n/* ===== Inline Function Start for 4.14.3. KMAXDS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMAXDS32 (Saturating Signed Crossed Multiply Two Words & Subtract & Add)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMADS32 Rd, Rs1, Rs2\n * KMADRS32 Rd, Rs1, Rs2\n * KMAXDS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from 32-bit elements in two registers; and then\n * perform a subtraction operation between the two 64-bit results. Then add the subtraction result to\n * 64-bit data in a third register. The addition result may be saturated.\n * * KMADS32: rd + (top*top - bottom*bottom)\n * * KMADRS32: rd + (bottom*bottom - top*top)\n * * KMAXDS32: rd + (top*bottom - bottom*top)\n *\n * **Description**:\\n\n * For the `KMADS32` instruction, it multiplies the bottom 32-bit element in Rs1 with the bottom 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the top 32-bit element in\n * Rs1 with the top 32-bit element in Rs2.\n * For the `KMADRS32` instruction, it multiplies the top 32-bit element in Rs1 with the top 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the bottom 32-bit\n * element in Rs1 with the bottom 32-bit element in Rs2.\n * For the `KMAXDS32` instruction, it multiplies the bottom 32-bit element in Rs1 with the top 32-bit\n * element in Rs2 and then subtracts the result from the result of multiplying the top 32-bit element in\n * Rs1 with the bottom 32-bit element in Rs2.\n * The subtraction result is then added to the content of 64-bit data in Rd. If the addition result is\n * beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit is set to\n * 1. The 64-bit result after saturation is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated\n * as signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd + (Rs1.W[1] * Rs2.W[1]) - (Rs1.W[0] * Rs2.W[0]); // KMADS32\n * res = Rd + (Rs1.W[0] * Rs2.W[0]) - (Rs1.W[1] * Rs2.W[1]); // KMADRS32\n * res = Rd + (Rs1.W[1] * Rs2.W[0]) - (Rs1.W[0] * Rs2.W[1]); // KMAXDS32\n * if (res > (2^63)-1) {\n *   res = (2^63)-1;\n *   OV = 1;\n * } else if (res < -2^63) {\n *   res = -2^63;\n *   OV = 1;\n * }\n * Rd = res;\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMAXDS32(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmaxds32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 4.14.3. KMAXDS32 ===== */\n\n/* ===== Inline Function Start for 4.15.1. KMSDA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMSDA32 (Saturating Signed Multiply Two Words & Add & Subtract)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMSDA32 Rd, Rs1, Rs2\n * KMSXDA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from the 32-bit element of two registers; and then\n * subtracts the two 64-bit results from a third register. The subtraction result may be saturated.\n * * KMSDA: rd - top*top - bottom*bottom\n * * KMSXDA: rd - top*bottom - bottom*top\n *\n * **Description**:\\n\n * For the `KMSDA32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2 and multiplies the top 32-bit element of Rs1 with the top 32-bit element of Rs2.\n * For the `KMSXDA32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and multiplies the top 32-bit element of Rs1 with the bottom 32-bit element of Rs2.\n * The two 64-bit multiplication results are then subtracted from the content of Rd. If the subtraction\n * result is beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit\n * is set to 1. The result after saturation is written to Rd. The 32-bit contents are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd - (Rs1.W[1] * Rs2.W[1]) - (Rs1.W[0] * Rs2.W[0]); // KMSDA32\n * res = Rd - (Rs1.W[1] * Rs2.W[0]) - (Rs1.W[0] * Rs2.W[1]); // KMSXDA32\n * if (res > (2^63)-1) {\n *   res = (2^63)-1;\n *   OV = 1;\n * } else if (res < -2^63) {\n *   res = -2^63;\n *   OV = 1;\n * }\n * Rd = res;\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMSDA32(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmsda32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 4.15.1. KMSDA32 ===== */\n\n/* ===== Inline Function Start for 4.15.2. KMSXDA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief KMSXDA32 (Saturating Signed Crossed Multiply Two Words & Add & Subtract)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KMSDA32 Rd, Rs1, Rs2\n * KMSXDA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from the 32-bit element of two registers; and then\n * subtracts the two 64-bit results from a third register. The subtraction result may be saturated.\n * * KMSDA: rd - top*top - bottom*bottom\n * * KMSXDA: rd - top*bottom - bottom*top\n *\n * **Description**:\\n\n * For the `KMSDA32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2 and multiplies the top 32-bit element of Rs1 with the top 32-bit element of Rs2.\n * For the `KMSXDA32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and multiplies the top 32-bit element of Rs1 with the bottom 32-bit element of Rs2.\n * The two 64-bit multiplication results are then subtracted from the content of Rd. If the subtraction\n * result is beyond the Q63 number range (-2^63 <= Q63 <= 2^63-1), it is saturated to the range and the OV bit\n * is set to 1. The result after saturation is written to Rd. The 32-bit contents are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rd - (Rs1.W[1] * Rs2.W[1]) - (Rs1.W[0] * Rs2.W[0]); // KMSDA32\n * res = Rd - (Rs1.W[1] * Rs2.W[0]) - (Rs1.W[0] * Rs2.W[1]); // KMSXDA32\n * if (res > (2^63)-1) {\n *   res = (2^63)-1;\n *   OV = 1;\n * } else if (res < -2^63) {\n *   res = -2^63;\n *   OV = 1;\n * }\n * Rd = res;\n * ~~~\n *\n * \\param [in]  t    long type of value stored in t\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_KMSXDA32(long t, unsigned long a, unsigned long b)\n{\n    __ASM volatile(\"kmsxda32 %0, %1, %2\" : \"+r\"(t) : \"r\"(a), \"r\"(b));\n    return t;\n}\n/* ===== Inline Function End for 4.15.2. KMSXDA32 ===== */\n\n/* ===== Inline Function Start for 4.16. KSLL32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief KSLL32 (SIMD 32-bit Saturating Shift Left Logical)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KSLL32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements logical left shift operations with saturation simultaneously. The shift\n * amount is a variable from a GPR.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are left-shifted logically. The shifted out bits are filled\n * with zero and the shift amount is specified by the low-order 5-bits of the value in the Rs2 register.\n * Any shifted value greater than 2^31-1 is saturated to 2^31-1. Any shifted value smaller than -2^31 is\n * saturated to -2^31. And the saturated results are written to Rd. If any saturation is performed, set OV\n * bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[4:0];\n * if (sa != 0) {\n *   res[(31+sa):0] = Rs1.W[x] << sa;\n *   if (res > (2^31)-1) {\n *     res = 0x7fffffff; OV = 1;\n *   } else if (res < -2^31) {\n *     res = 0x80000000; OV = 1;\n *   }\n *   Rd.W[x] = res[31:0];\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLL32(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ksll32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.16. KSLL32 ===== */\n\n/* ===== Inline Function Start for 4.17. KSLLI32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief KSLLI32 (SIMD 32-bit Saturating Shift Left Logical Immediate)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KSLLI32 Rd, Rs1, imm5u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements logical left shift operations with saturation simultaneously. The shift\n * amount is an immediate value.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are left-shifted logically. The shifted out bits are filled\n * with zero and the shift amount is specified by the imm5u constant. Any shifted value greater than\n * 2^31-1 is saturated to 2^31-1. Any shifted value smaller than -2^31 is saturated to -2^31. And the saturated\n * results are written to Rd. If any saturation is performed, set OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm5u[4:0];\n * if (sa != 0) {\n *   res[(31+sa):0] = Rs1.W[x] << sa;\n *   if (res > (2^31)-1) {\n *     res = 0x7fffffff; OV = 1;\n *   } else if (res < -2^31) {\n *     res = 0x80000000; OV = 1;\n *   }\n *   Rd.W[x] = res[31:0];\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLLI32(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kslli32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.17. KSLLI32 ===== */\n\n/* ===== Inline Function Start for 4.18.1. KSLRA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief KSLRA32 (SIMD 32-bit Shift Left Logical with Saturation or Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KSLRA32 Rd, Rs1, Rs2\n * KSLRA32.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements logical left (positive) or arithmetic right (negative) shift operation with\n * Q31 saturation for the left shift. The `.u` form performs additional rounding up operations for the\n * right shift.\n *\n * **Description**:\\n\n * The 32-bit data elements of Rs1 are left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[5:0]. Rs2[5:0] is in the signed range of [-25, 25-1]. A positive Rs2[5:0] means\n * logical left shift and a negative Rs2[5:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[5:0]. However, the behavior of `Rs2[5:0]==-25 (0x20)` is defined to be\n * equivalent to the behavior of `Rs2[5:0]==-(25-1) (0x21)`.\n * The left-shifted results are saturated to the 32-bit signed integer range of [-2^31, 2^31-1]. For the `.u`\n * form of the instruction, the right-shifted results are added a 1 to the most significant discarded bit\n * position for rounding effect. After the shift, saturation, or rounding, the final results are written to\n * Rd. If any saturation happens, this instruction sets the OV flag. The value of Rs2[31:6] will not affect\n * this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[5:0] < 0) {\n *   sa = -Rs2[5:0];\n *   sa = (sa == 32)? 31 : sa;\n *   if (`.u` form) {\n *     res[31:-1] = SE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   } else {\n *     Rd.W[x] = SE32(Rs1.W[x][31:sa]);\n *   }\n * } else {\n *   sa = Rs2[4:0];\n *   res[(31+sa):0] = Rs1.W[x] <<(logic) sa;\n *   if (res > (2^31)-1) {\n *     res[31:0] = 0x7fffffff; OV = 1;\n *   } else if (res < -2^31) {\n *     res[31:0] = 0x80000000; OV = 1;\n *   }\n *   Rd.W[x] = res[31:0];\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLRA32(unsigned long a, int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kslra32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.18.1. KSLRA32 ===== */\n\n/* ===== Inline Function Start for 4.18.2. KSLRA32.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief KSLRA32.u (SIMD 32-bit Shift Left Logical with Saturation or Rounding Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KSLRA32 Rd, Rs1, Rs2\n * KSLRA32.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements logical left (positive) or arithmetic right (negative) shift operation with\n * Q31 saturation for the left shift. The `.u` form performs additional rounding up operations for the\n * right shift.\n *\n * **Description**:\\n\n * The 32-bit data elements of Rs1 are left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[5:0]. Rs2[5:0] is in the signed range of [-25, 25-1]. A positive Rs2[5:0] means\n * logical left shift and a negative Rs2[5:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[5:0]. However, the behavior of `Rs2[5:0]==-25 (0x20)` is defined to be\n * equivalent to the behavior of `Rs2[5:0]==-(25-1) (0x21)`.\n * The left-shifted results are saturated to the 32-bit signed integer range of [-2^31, 2^31-1]. For the `.u`\n * form of the instruction, the right-shifted results are added a 1 to the most significant discarded bit\n * position for rounding effect. After the shift, saturation, or rounding, the final results are written to\n * Rd. If any saturation happens, this instruction sets the OV flag. The value of Rs2[31:6] will not affect\n * this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[5:0] < 0) {\n *   sa = -Rs2[5:0];\n *   sa = (sa == 32)? 31 : sa;\n *   if (`.u` form) {\n *     res[31:-1] = SE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   } else {\n *     Rd.W[x] = SE32(Rs1.W[x][31:sa]);\n *   }\n * } else {\n *   sa = Rs2[4:0];\n *   res[(31+sa):0] = Rs1.W[x] <<(logic) sa;\n *   if (res > (2^31)-1) {\n *     res[31:0] = 0x7fffffff; OV = 1;\n *   } else if (res < -2^31) {\n *     res[31:0] = 0x80000000; OV = 1;\n *   }\n *   Rd.W[x] = res[31:0];\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSLRA32_U(unsigned long a, int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kslra32.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.18.2. KSLRA32.u ===== */\n\n/* ===== Inline Function Start for 4.19. KSTAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief KSTAS32 (SIMD 32-bit Signed Saturating Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KSTAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element saturating addition and 32-bit signed integer element\n * saturating subtraction in a 64-bit chunk simultaneously. Operands are from corresponding 32-bit\n * elements.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit integer element in [63:32] of Rs1 with the 32-bit\n * integer element in [63:32] of Rs2; at the same time, it subtracts the 32-bit integer element in [31:0] of\n * Rs2 from the 32-bit integer element in [31:0] of Rs1. If any of the results are beyond the Q31 number\n * range (-2^31 <= Q31 <= 2^31-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to [63:32] of Rd for addition and [31:0] of Rd for subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * res[1] = Rs1.W[1] + Rs2.W[1];\n * res[0] = Rs1.W[0] - Rs2.W[0];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[1] = res[1];\n * Rd.W[0] = res[0];\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSTAS32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kstas32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.19. KSTAS32 ===== */\n\n/* ===== Inline Function Start for 4.20. KSTSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief KSTSA32 (SIMD 32-bit Signed Saturating Straight Subtraction & Addition)\n * \\details\n * **Type**: SIM (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KSTSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element saturating subtraction and 32-bit signed integer element\n * saturating addition in a 64-bit chunk simultaneously. Operands are from corresponding 32-bit\n * elements.\n * *Description: *\n * This instruction subtracts the 32-bit integer element in [63:32] of Rs2 from the 32-bit integer\n * element in [63:32] of Rs1; at the same time, it adds the 32-bit integer element in [31:0] of Rs1 with\n * the 32-bit integer element in [31:0] of Rs2. If any of the results are beyond the Q31 number range (-\n * 231 <= Q31 <= 2^31-1), they are saturated to the range and the OV bit is set to 1. The saturated results are\n * written to [63:32] of Rd for subtraction and [31:0] of Rd for addition.\n *\n * **Operations**:\\n\n * ~~~\n * res[1] = Rs1.W[1] - Rs2.W[1];\n * res[0] = Rs1.W[0] + Rs2.W[0];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[1] = res[1];\n * Rd.W[0] = res[0];\n * for RV64, x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSTSA32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"kstsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.20. KSTSA32 ===== */\n\n/* ===== Inline Function Start for 4.21. KSUB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief KSUB32 (SIMD 32-bit Signed Saturating Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * KSUB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer elements saturating subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit signed integer elements in Rs2 from the 32-bit\n * signed integer elements in Rs1. If any of the results are beyond the Q31 number range (-2^31 <= Q31 <=\n * 2^31-1), they are saturated to the range and the OV bit is set to 1. The saturated results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.W[x] - Rs2.W[x];\n * if (res[x] > (2^31)-1) {\n *   res[x] = (2^31)-1;\n *   OV = 1;\n * } else if (res[x] < -2^31) {\n *   res[x] = -2^31;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_KSUB32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ksub32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.21. KSUB32 ===== */\n\n/* ===== Inline Function Start for 4.22.1. PKBB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PACK\n * \\brief PKBB32 (Pack Two 32-bit Data from Both Bottom Half)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * PKBB32 Rd, Rs1, Rs2\n * PKBT32 Rd, Rs1, Rs2\n * PKTT32 Rd, Rs1, Rs2\n * PKTB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Pack 32-bit data from 64-bit chunks in two registers.\n * * PKBB32: bottom.bottom\n * * PKBT32: bottom.top\n * * PKTT32: top.top\n * * PKTB32: top.bottom\n *\n * **Description**:\\n\n * (PKBB32) moves Rs1.W[0] to Rd.W[1] and moves Rs2.W[0] to Rd.W[0].\n * (PKBT32) moves Rs1.W[0] to Rd.W[1] and moves Rs2.W[1] to Rd.W[0].\n * (PKTT32) moves Rs1.W[1] to Rd.W[1] and moves Rs2.W[1] to Rd.W[0].\n * (PKTB32) moves Rs1.W[1] to Rd.W[1] and moves Rs2.W[0] to Rd.W[0].\n *\n * **Operations**:\\n\n * ~~~\n * Rd = CONCAT(Rs1.W[_*0*_], Rs2.W[_*0*_]); // PKBB32\n * Rd = CONCAT(Rs1.W[_*0*_], Rs2.W[_*1*_]); // PKBT32\n * Rd = CONCAT(Rs1.W[_*1*_], Rs2.W[_*1*_]); // PKTT32\n * Rd = CONCAT(Rs1.W[_*1*_], Rs2.W[_*0*_]); // PKTB32\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PKBB32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"pkbb32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.22.1. PKBB32 ===== */\n\n/* ===== Inline Function Start for 4.22.2. PKBT32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PACK\n * \\brief PKBT32 (Pack Two 32-bit Data from Bottom and Top Half)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * PKBB32 Rd, Rs1, Rs2\n * PKBT32 Rd, Rs1, Rs2\n * PKTT32 Rd, Rs1, Rs2\n * PKTB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Pack 32-bit data from 64-bit chunks in two registers.\n * * PKBB32: bottom.bottom\n * * PKBT32: bottom.top\n * * PKTT32: top.top\n * * PKTB32: top.bottom\n *\n * **Description**:\\n\n * (PKBB32) moves Rs1.W[0] to Rd.W[1] and moves Rs2.W[0] to Rd.W[0].\n * (PKBT32) moves Rs1.W[0] to Rd.W[1] and moves Rs2.W[1] to Rd.W[0].\n * (PKTT32) moves Rs1.W[1] to Rd.W[1] and moves Rs2.W[1] to Rd.W[0].\n * (PKTB32) moves Rs1.W[1] to Rd.W[1] and moves Rs2.W[0] to Rd.W[0].\n *\n * **Operations**:\\n\n * ~~~\n * Rd = CONCAT(Rs1.W[_*0*_], Rs2.W[_*0*_]); // PKBB32\n * Rd = CONCAT(Rs1.W[_*0*_], Rs2.W[_*1*_]); // PKBT32\n * Rd = CONCAT(Rs1.W[_*1*_], Rs2.W[_*1*_]); // PKTT32\n * Rd = CONCAT(Rs1.W[_*1*_], Rs2.W[_*0*_]); // PKTB32\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PKBT32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"pkbt32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.22.2. PKBT32 ===== */\n\n/* ===== Inline Function Start for 4.22.3. PKTT32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PACK\n * \\brief PKTT32 (Pack Two 32-bit Data from Both Top Half)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * PKBB32 Rd, Rs1, Rs2\n * PKBT32 Rd, Rs1, Rs2\n * PKTT32 Rd, Rs1, Rs2\n * PKTB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Pack 32-bit data from 64-bit chunks in two registers.\n * * PKBB32: bottom.bottom\n * * PKBT32: bottom.top\n * * PKTT32: top.top\n * * PKTB32: top.bottom\n *\n * **Description**:\\n\n * (PKBB32) moves Rs1.W[0] to Rd.W[1] and moves Rs2.W[0] to Rd.W[0].\n * (PKBT32) moves Rs1.W[0] to Rd.W[1] and moves Rs2.W[1] to Rd.W[0].\n * (PKTT32) moves Rs1.W[1] to Rd.W[1] and moves Rs2.W[1] to Rd.W[0].\n * (PKTB32) moves Rs1.W[1] to Rd.W[1] and moves Rs2.W[0] to Rd.W[0].\n *\n * **Operations**:\\n\n * ~~~\n * Rd = CONCAT(Rs1.W[_*0*_], Rs2.W[_*0*_]); // PKBB32\n * Rd = CONCAT(Rs1.W[_*0*_], Rs2.W[_*1*_]); // PKBT32\n * Rd = CONCAT(Rs1.W[_*1*_], Rs2.W[_*1*_]); // PKTT32\n * Rd = CONCAT(Rs1.W[_*1*_], Rs2.W[_*0*_]); // PKTB32\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PKTT32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"pktt32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.22.3. PKTT32 ===== */\n\n/* ===== Inline Function Start for 4.22.4. PKTB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PACK\n * \\brief PKTB32 (Pack Two 32-bit Data from Top and Bottom Half)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * PKBB32 Rd, Rs1, Rs2\n * PKBT32 Rd, Rs1, Rs2\n * PKTT32 Rd, Rs1, Rs2\n * PKTB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Pack 32-bit data from 64-bit chunks in two registers.\n * * PKBB32: bottom.bottom\n * * PKBT32: bottom.top\n * * PKTT32: top.top\n * * PKTB32: top.bottom\n *\n * **Description**:\\n\n * (PKBB32) moves Rs1.W[0] to Rd.W[1] and moves Rs2.W[0] to Rd.W[0].\n * (PKBT32) moves Rs1.W[0] to Rd.W[1] and moves Rs2.W[1] to Rd.W[0].\n * (PKTT32) moves Rs1.W[1] to Rd.W[1] and moves Rs2.W[1] to Rd.W[0].\n * (PKTB32) moves Rs1.W[1] to Rd.W[1] and moves Rs2.W[0] to Rd.W[0].\n *\n * **Operations**:\\n\n * ~~~\n * Rd = CONCAT(Rs1.W[_*0*_], Rs2.W[_*0*_]); // PKBB32\n * Rd = CONCAT(Rs1.W[_*0*_], Rs2.W[_*1*_]); // PKBT32\n * Rd = CONCAT(Rs1.W[_*1*_], Rs2.W[_*1*_]); // PKTT32\n * Rd = CONCAT(Rs1.W[_*1*_], Rs2.W[_*0*_]); // PKTB32\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_PKTB32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"pktb32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.22.4. PKTB32 ===== */\n\n/* ===== Inline Function Start for 4.23. RADD32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief RADD32 (SIMD 32-bit Signed Halving Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * RADD32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element additions simultaneously. The results are halved to avoid\n * overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit signed integer elements in Rs1 with the 32-bit signed\n * integer elements in Rs2. The results are first arithmetically right-shifted by 1 bit and then written to\n * Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Rs1 = 0x7FFFFFFF, Rs2 = 0x7FFFFFFF Rd = 0x7FFFFFFF\n * * Rs1 = 0x80000000, Rs2 = 0x80000000 Rd = 0x80000000\n * * Rs1 = 0x40000000, Rs2 = 0x80000000 Rd = 0xE0000000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = (Rs1.W[x] + Rs2.W[x]) s>> 1;\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RADD32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"radd32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.23. RADD32 ===== */\n\n/* ===== Inline Function Start for 4.24. RCRAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief RCRAS32 (SIMD 32-bit Signed Halving Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * RCRAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element addition and 32-bit signed integer element subtraction in\n * a 64-bit chunk simultaneously. Operands are from crossed 32-bit elements. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit signed integer element in [63:32] of Rs1 with the 32-bit\n * signed integer element in [31:0] of Rs2, and subtracts the 32-bit signed integer element in [63:32] of\n * Rs2 from the 32-bit signed integer element in [31:0] of Rs1. The element results are first\n * arithmetically right-shifted by 1 bit and then written to [63:32] of Rd for addition and [31:0] of Rd\n * for subtraction.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `RADD32` and `RSUB32` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = (Rs1.W[1] + Rs2.W[0]) s>> 1;\n * Rd.W[0] = (Rs1.W[0] - Rs2.W[1]) s>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RCRAS32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"rcras32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.24. RCRAS32 ===== */\n\n/* ===== Inline Function Start for 4.25. RCRSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief RCRSA32 (SIMD 32-bit Signed Halving Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * RCRSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element subtraction and 32-bit signed integer element addition in\n * a 64-bit chunk simultaneously. Operands are from crossed 32-bit elements. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit signed integer element in [31:0] of Rs2 from the\n * 32-bit signed integer element in [63:32] of Rs1, and adds the 32-bit signed element integer in [31:0]\n * of Rs1 with the 32-bit signed integer element in [63:32] of Rs2. The two results are first\n * arithmetically right-shifted by 1 bit and then written to [63:32] of Rd for subtraction and [31:0] of\n * Rd for addition.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `RADD32` and `RSUB32` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = (Rs1.W[1] - Rs2.W[0]) s>> 1;\n * Rd.W[0] = (Rs1.W[0] + Rs2.W[1]) s>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RCRSA32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"rcrsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.25. RCRSA32 ===== */\n\n/* ===== Inline Function Start for 4.26. RSTAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief RSTAS32 (SIMD 32-bit Signed Halving Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * RSTAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element addition and 32-bit signed integer element subtraction in\n * a 64-bit chunk simultaneously. Operands are from corresponding 32-bit elements. The results are\n * halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit signed integer element in [63:32] of Rs1 with the 32-bit\n * signed integer element in [63:32] of Rs2, and subtracts the 32-bit signed integer element in [31:0] of\n * Rs2 from the 32-bit signed integer element in [31:0] of Rs1. The element results are first\n * arithmetically right-shifted by 1 bit and then written to [63:32] of Rd for addition and [31:0] of Rd\n * for subtraction.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `RADD32` and `RSUB32` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = (Rs1.W[1] + Rs2.W[1]) s>> 1;\n * Rd.W[0] = (Rs1.W[0] - Rs2.W[0]) s>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RSTAS32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"rstas32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.26. RSTAS32 ===== */\n\n/* ===== Inline Function Start for 4.27. RSTSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief RSTSA32 (SIMD 32-bit Signed Halving Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * RSTSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element subtraction and 32-bit signed integer element addition in\n * a 64-bit chunk simultaneously. Operands are from corresponding 32-bit elements. The results are\n * halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit signed integer element in [63:32] of Rs2 from the\n * 32-bit signed integer element in [63:32] of Rs1, and adds the 32-bit signed element integer in [31:0]\n * of Rs1 with the 32-bit signed integer element in [31:0] of Rs2. The two results are first arithmetically\n * right-shifted by 1 bit and then written to [63:32] of Rd for subtraction and [31:0] of Rd for addition.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `RADD32` and `RSUB32` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = (Rs1.W[1] - Rs2.W[1]) s>> 1;\n * Rd.W[0] = (Rs1.W[0] + Rs2.W[0]) s>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RSTSA32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"rstsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.27. RSTSA32 ===== */\n\n/* ===== Inline Function Start for 4.28. RSUB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief RSUB32 (SIMD 32-bit Signed Halving Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * RSUB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer element subtractions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit signed integer elements in Rs2 from the 32-bit\n * signed integer elements in Rs1. The results are first arithmetically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7FFFFFFF, Rb = 0x80000000 Rt = 0x7FFFFFFF\n * * Ra = 0x80000000, Rb = 0x7FFFFFFF Rt = 0x80000000\n * * Ra = 0x80000000, Rb = 0x40000000 Rt = 0xA0000000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = (Rs1.W[x] - Rs2.W[x]) s>> 1;\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_RSUB32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"rsub32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.28. RSUB32 ===== */\n\n/* ===== Inline Function Start for 4.29. SLL32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SLL32 (SIMD 32-bit Shift Left Logical)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SLL32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements logical left shift operations simultaneously. The shift amount is a\n * variable from a GPR.\n *\n * **Description**:\\n\n * The 32-bit elements in Rs1 are left-shifted logically. And the results are written to Rd.\n * The shifted out bits are filled with zero and the shift amount is specified by the low-order 5-bits of\n * the value in the Rs2 register.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[4:0];\n * Rd.W[x] = Rs1.W[x] << sa;\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SLL32(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"sll32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.29. SLL32 ===== */\n\n/* ===== Inline Function Start for 4.30. SLLI32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SLLI32 (SIMD 32-bit Shift Left Logical Immediate)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SLLI32 Rd, Rs1, imm5u[4:0]\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit element logical left shift operations simultaneously. The shift amount is an\n * immediate value.\n *\n * **Description**:\\n\n * The 32-bit elements in Rs1 are left-shifted logically. The shifted out bits are filled with\n * zero and the shift amount is specified by the imm5u[4:0] constant. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm5u[4:0];\n * Rd.W[x] = Rs1.W[x] << sa;\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SLLI32(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"slli32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.30. SLLI32 ===== */\n\n/* ===== Inline Function Start for 4.31. SMAX32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_MISC\n * \\brief SMAX32 (SIMD 32-bit Signed Maximum)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SMAX32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer elements finding maximum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 32-bit signed integer elements in Rs1 with the 32-bit\n * signed integer elements in Rs2 and selects the numbers that is greater than the other one. The\n * selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = (Rs1.W[x] > Rs2.W[x])? Rs1.W[x] : Rs2.W[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SMAX32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"smax32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.31. SMAX32 ===== */\n\n/* ===== Inline Function Start for 4.32.1. SMBB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_MULT\n * \\brief SMBB32 (Signed Multiply Bottom Word & Bottom Word)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SMBB32 Rd, Rs1, Rs2\n * SMBT32 Rd, Rs1, Rs2\n * SMTT32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit element of a register with the signed 32-bit element of another\n * register and write the 64-bit result to a third register.\n * * SMBB32: bottom*bottom\n * * SMBT32: bottom*top\n * * SMTT32: top*top\n *\n * **Description**:\\n\n * For the `SMBB32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2. It is actually an alias of `MULSR64` instruction.\n * For the `SMBT32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2.\n * For the `SMTT32` instruction, it multiplies the top 32-bit element of Rs1 with the top 32-bit element\n * of Rs2.\n * The 64-bit multiplication result is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as\n * signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rs1.W[0] * Rs2.W[0]; // SMBB32 res = Rs1.W[0] * Rs2.w[1]; // SMBT32 res = Rs1.W[1] * Rs2.W[1];\n * // SMTT32 Rd = res;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMBB32(unsigned long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"smbb32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.32.1. SMBB32 ===== */\n\n/* ===== Inline Function Start for 4.32.2. SMBT32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_MULT\n * \\brief SMBT32 (Signed Multiply Bottom Word & Top Word)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SMBB32 Rd, Rs1, Rs2\n * SMBT32 Rd, Rs1, Rs2\n * SMTT32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit element of a register with the signed 32-bit element of another\n * register and write the 64-bit result to a third register.\n * * SMBB32: bottom*bottom\n * * SMBT32: bottom*top\n * * SMTT32: top*top\n *\n * **Description**:\\n\n * For the `SMBB32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2. It is actually an alias of `MULSR64` instruction.\n * For the `SMBT32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2.\n * For the `SMTT32` instruction, it multiplies the top 32-bit element of Rs1 with the top 32-bit element\n * of Rs2.\n * The 64-bit multiplication result is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as\n * signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rs1.W[0] * Rs2.W[0]; // SMBB32 res = Rs1.W[0] * Rs2.w[1]; // SMBT32 res = Rs1.W[1] * Rs2.W[1];\n * // SMTT32 Rd = res;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMBT32(unsigned long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"smbt32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.32.2. SMBT32 ===== */\n\n/* ===== Inline Function Start for 4.32.3. SMTT32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_MULT\n * \\brief SMTT32 (Signed Multiply Top Word & Top Word)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SMBB32 Rd, Rs1, Rs2\n * SMBT32 Rd, Rs1, Rs2\n * SMTT32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Multiply the signed 32-bit element of a register with the signed 32-bit element of another\n * register and write the 64-bit result to a third register.\n * * SMBB32: bottom*bottom\n * * SMBT32: bottom*top\n * * SMTT32: top*top\n *\n * **Description**:\\n\n * For the `SMBB32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2. It is actually an alias of `MULSR64` instruction.\n * For the `SMBT32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2.\n * For the `SMTT32` instruction, it multiplies the top 32-bit element of Rs1 with the top 32-bit element\n * of Rs2.\n * The 64-bit multiplication result is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as\n * signed integers.\n *\n * **Operations**:\\n\n * ~~~\n * res = Rs1.W[0] * Rs2.W[0]; // SMBB32 res = Rs1.W[0] * Rs2.w[1]; // SMBT32 res = Rs1.W[1] * Rs2.W[1];\n * // SMTT32 Rd = res;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMTT32(unsigned long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"smtt32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.32.3. SMTT32 ===== */\n\n/* ===== Inline Function Start for 4.33.1. SMDS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief SMDS32 (Signed Multiply Two Words and Subtract)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SMDS32 Rd, Rs1, Rs2\n * SMDRS32 Rd, Rs1, Rs2\n * SMXDS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from the l 32-bit element of two registers; and then\n * perform a subtraction operation between the two 64-bit results.\n * * SMDS32: top*top - bottom*bottom\n * * SMDRS32: bottom*bottom - top*top\n * * SMXDS32: top*bottom - bottom*top\n *\n * **Description**:\\n\n * For the `SMDS32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the top 32-bit element of\n * Rs1 with the top 32-bit element of Rs2.\n * For the `SMDRS32` instruction, it multiplies the top 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the bottom 32-bit\n * element of Rs1 with the bottom 32-bit element of Rs2.\n * For the `SMXDS32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the top 32-bit element of\n * Rs1 with the bottom 32-bit element of Rs2.\n * The subtraction result is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * Rt = (Rs1.W[1] * Rs2.W[1]) - (Rs1.W[0] * Rs2.W[0]); // SMDS32\n * Rt = (Rs1.W[0] * Rs2.W[0]) - (Rs1.W[1] * Rs2.W[1]); // SMDRS32\n * Rt = (Rs1.W[1] * Rs2.W[0]) - (Rs1.W[0] * Rs2.W[1]); // SMXDS32\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMDS32(unsigned long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"smds32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.33.1. SMDS32 ===== */\n\n/* ===== Inline Function Start for 4.33.2. SMDRS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief SMDRS32 (Signed Multiply Two Words and Reverse Subtract)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SMDS32 Rd, Rs1, Rs2\n * SMDRS32 Rd, Rs1, Rs2\n * SMXDS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from the l 32-bit element of two registers; and then\n * perform a subtraction operation between the two 64-bit results.\n * * SMDS32: top*top - bottom*bottom\n * * SMDRS32: bottom*bottom - top*top\n * * SMXDS32: top*bottom - bottom*top\n *\n * **Description**:\\n\n * For the `SMDS32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the top 32-bit element of\n * Rs1 with the top 32-bit element of Rs2.\n * For the `SMDRS32` instruction, it multiplies the top 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the bottom 32-bit\n * element of Rs1 with the bottom 32-bit element of Rs2.\n * For the `SMXDS32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the top 32-bit element of\n * Rs1 with the bottom 32-bit element of Rs2.\n * The subtraction result is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * Rt = (Rs1.W[1] * Rs2.W[1]) - (Rs1.W[0] * Rs2.W[0]); // SMDS32\n * Rt = (Rs1.W[0] * Rs2.W[0]) - (Rs1.W[1] * Rs2.W[1]); // SMDRS32\n * Rt = (Rs1.W[1] * Rs2.W[0]) - (Rs1.W[0] * Rs2.W[1]); // SMXDS32\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMDRS32(unsigned long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"smdrs32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.33.2. SMDRS32 ===== */\n\n/* ===== Inline Function Start for 4.33.3. SMXDS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_32B_PARALLEL_MAC\n * \\brief SMXDS32 (Signed Crossed Multiply Two Words and Subtract)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SMDS32 Rd, Rs1, Rs2\n * SMDRS32 Rd, Rs1, Rs2\n * SMXDS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do two signed 32-bit multiplications from the l 32-bit element of two registers; and then\n * perform a subtraction operation between the two 64-bit results.\n * * SMDS32: top*top - bottom*bottom\n * * SMDRS32: bottom*bottom - top*top\n * * SMXDS32: top*bottom - bottom*top\n *\n * **Description**:\\n\n * For the `SMDS32` instruction, it multiplies the bottom 32-bit element of Rs1 with the bottom 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the top 32-bit element of\n * Rs1 with the top 32-bit element of Rs2.\n * For the `SMDRS32` instruction, it multiplies the top 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the bottom 32-bit\n * element of Rs1 with the bottom 32-bit element of Rs2.\n * For the `SMXDS32` instruction, it multiplies the bottom 32-bit element of Rs1 with the top 32-bit\n * element of Rs2 and then subtracts the result from the result of multiplying the top 32-bit element of\n * Rs1 with the bottom 32-bit element of Rs2.\n * The subtraction result is written to Rd. The 32-bit contents of Rs1 and Rs2 are treated as signed\n * integers.\n *\n * **Operations**:\\n\n * ~~~\n * Rt = (Rs1.W[1] * Rs2.W[1]) - (Rs1.W[0] * Rs2.W[0]); // SMDS32\n * Rt = (Rs1.W[0] * Rs2.W[0]) - (Rs1.W[1] * Rs2.W[1]); // SMDRS32\n * Rt = (Rs1.W[1] * Rs2.W[0]) - (Rs1.W[0] * Rs2.W[1]); // SMXDS32\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SMXDS32(unsigned long a, unsigned long b)\n{\n    register long result;\n    __ASM volatile(\"smxds32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.33.3. SMXDS32 ===== */\n\n/* ===== Inline Function Start for 4.34. SMIN32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_MISC\n * \\brief SMIN32 (SIMD 32-bit Signed Minimum)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SMIN32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit signed integer elements finding minimum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 32-bit signed integer elements in Rs1 with the 32-bit\n * signed integer elements in Rs2 and selects the numbers that is less than the other one. The selected\n * results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = (Rs1.W[x] < Rs2.W[x])? Rs1.W[x] : Rs2.W[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SMIN32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"smin32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.34. SMIN32 ===== */\n\n/* ===== Inline Function Start for 4.35.1. SRA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SRA32 (SIMD 32-bit Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRA32 Rd, Rs1, Rs2\n * SRA32.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit element arithmetic right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the data elements. The shift amount is specified by the low-order\n * 5-bits of the value in the Rs2 register. For the rounding operation of the `.u` form, a value of 1 is\n * added to the most significant discarded bit of each 32-bit data element to calculate the final results.\n * And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[4:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRA32.u\n *     res[31:-1] = SE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   else { // SRA32\n *     Rd.W[x] = SE32(Rs1.W[x][31:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRA32(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"sra32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.35.1. SRA32 ===== */\n\n/* ===== Inline Function Start for 4.35.2. SRA32.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SRA32.u (SIMD 32-bit Rounding Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRA32 Rd, Rs1, Rs2\n * SRA32.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit element arithmetic right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the data elements. The shift amount is specified by the low-order\n * 5-bits of the value in the Rs2 register. For the rounding operation of the `.u` form, a value of 1 is\n * added to the most significant discarded bit of each 32-bit data element to calculate the final results.\n * And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[4:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRA32.u\n *     res[31:-1] = SE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   else { // SRA32\n *     Rd.W[x] = SE32(Rs1.W[x][31:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRA32_U(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"sra32.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.35.2. SRA32.u ===== */\n\n/* ===== Inline Function Start for 4.36.1. SRAI32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SRAI32 (SIMD 32-bit Shift Right Arithmetic Immediate)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRAI32 Rd, Rs1, imm5u\n * SRAI32.u Rd, Rs1, imm5u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements arithmetic right shift operations simultaneously. The shift amount is\n * an immediate value. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the 32-bit data elements. The shift amount is specified by the\n * imm5u constant. For the rounding operation of the `.u` form, a value of 1 is added to the most\n * significant discarded bit of each 32-bit data to calculate the final results. And the results are written\n * to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm5u[4:0];\n *   if (sa > 0) {\n *   if (`.u` form) { // SRAI32.u\n *     res[31:-1] = SE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   else { // SRAI32\n *     Rd.W[x] = SE32(Rs1.W[x][31:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRAI32(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"srai32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.36.1. SRAI32 ===== */\n\n/* ===== Inline Function Start for 4.36.2. SRAI32.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SRAI32.u (SIMD 32-bit Rounding Shift Right Arithmetic Immediate)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRAI32 Rd, Rs1, imm5u\n * SRAI32.u Rd, Rs1, imm5u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements arithmetic right shift operations simultaneously. The shift amount is\n * an immediate value. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are right-shifted arithmetically, that is, the shifted out\n * bits are filled with the sign-bit of the 32-bit data elements. The shift amount is specified by the\n * imm5u constant. For the rounding operation of the `.u` form, a value of 1 is added to the most\n * significant discarded bit of each 32-bit data to calculate the final results. And the results are written\n * to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm5u[4:0];\n *   if (sa > 0) {\n *   if (`.u` form) { // SRAI32.u\n *     res[31:-1] = SE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   else { // SRAI32\n *     Rd.W[x] = SE32(Rs1.W[x][31:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRAI32_U(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"srai32.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.36.2. SRAI32.u ===== */\n\n/* ===== Inline Function Start for 4.37. SRAIW.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_NON_SIMD_32B_SHIFT\n * \\brief SRAIW.u (Rounding Shift Right Arithmetic Immediate Word)\n * \\details\n * **Type**: DSP (RV64 only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRAIW.u Rd, Rs1, imm5u\n * ~~~\n *\n * **Purpose**:\\n\n * Perform a 32-bit arithmetic right shift operation with rounding. The shift amount is an\n * immediate value.\n *\n * **Description**:\\n\n * This instruction right-shifts the lower 32-bit content of Rs1 arithmetically. The shifted\n * out bits are filled with the sign-bit Rs1(31) and the shift amount is specified by the imm5u constant.\n * For the rounding operation, a value of 1 is added to the most significant discarded bit of the data to\n * calculate the final result. And the result is sign-extended and written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm5u;\n * if (sa != 0) {\n *   res[31:-1] = SE33(Rs1[31:(sa-1)]) + 1;\n *   Rd = SE32(res[31:0]);\n * } else {\n *   Rd = SE32(Rs1.W[0]);\n * }\n * ~~~\n *\n * \\param [in]  a    int type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in long type\n */\n__STATIC_FORCEINLINE long __RV_SRAIW_U(int a, unsigned int b)\n{\n    register long result;\n    __ASM volatile(\"sraiw.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.37. SRAIW.u ===== */\n\n/* ===== Inline Function Start for 4.38.1. SRL32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SRL32 (SIMD 32-bit Shift Right Logical)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRL32 Rd, Rs1, Rs2\n * SRL32.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit element logical right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits\n * are filled with zero. The shift amount is specified by the low-order 5-bits of the value in the Rs2\n * register. For the rounding operation of the `.u` form, a value of 1 is added to the most significant\n * discarded bit of each 32-bit data element to calculate the final results. And the results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[4:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRA32.u\n *     res[31:-1] = ZE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   else { // SRA32\n *     Rd.W[x] = ZE32(Rs1.W[x][31:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRL32(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"srl32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.38.1. SRL32 ===== */\n\n/* ===== Inline Function Start for 4.38.2. SRL32.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SRL32.u (SIMD 32-bit Rounding Shift Right Logical)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRL32 Rd, Rs1, Rs2\n * SRL32.u Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit element logical right shift operations simultaneously. The shift amount is a\n * variable from a GPR. The `.u` form performs additional rounding up operations on the shifted\n * results.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits\n * are filled with zero. The shift amount is specified by the low-order 5-bits of the value in the Rs2\n * register. For the rounding operation of the `.u` form, a value of 1 is added to the most significant\n * discarded bit of each 32-bit data element to calculate the final results. And the results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = Rs2[4:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRA32.u\n *     res[31:-1] = ZE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   else { // SRA32\n *     Rd.W[x] = ZE32(Rs1.W[x][31:sa])\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRL32_U(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"srl32.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.38.2. SRL32.u ===== */\n\n/* ===== Inline Function Start for 4.39.1. SRLI32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SRLI32 (SIMD 32-bit Shift Right Logical Immediate)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRLI32 Rd, Rs1, imm5u\n * SRLI32.u Rd, Rs1, imm5u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements logical right shift operations simultaneously. The shift amount is an\n * immediate value. The `.u` form performs additional rounding up operations on the shifted results.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits\n * are filled with zero. The shift amount is specified by the imm5u constant. For the rounding\n * operation of the `.u` form, a value of 1 is added to the most significant discarded bit of each 32-bit\n * data to calculate the final results. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm5u[4:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRLI32.u\n *     res[31:-1] = ZE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   else { // SRLI32\n *     Rd.W[x] = ZE32(Rs1.W[x][31:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRLI32(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"srli32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.39.1. SRLI32 ===== */\n\n/* ===== Inline Function Start for 4.39.2. SRLI32.u ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_SHIFT\n * \\brief SRLI32.u (SIMD 32-bit Rounding Shift Right Logical Immediate)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SRLI32 Rd, Rs1, imm5u\n * SRLI32.u Rd, Rs1, imm5u\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit elements logical right shift operations simultaneously. The shift amount is an\n * immediate value. The `.u` form performs additional rounding up operations on the shifted results.\n *\n * **Description**:\\n\n * The 32-bit data elements in Rs1 are right-shifted logically, that is, the shifted out bits\n * are filled with zero. The shift amount is specified by the imm5u constant. For the rounding\n * operation of the `.u` form, a value of 1 is added to the most significant discarded bit of each 32-bit\n * data to calculate the final results. And the results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * sa = imm5u[4:0];\n * if (sa > 0) {\n *   if (`.u` form) { // SRLI32.u\n *     res[31:-1] = ZE33(Rs1.W[x][31:sa-1]) + 1;\n *     Rd.W[x] = res[31:0];\n *   else { // SRLI32\n *     Rd.W[x] = ZE32(Rs1.W[x][31:sa]);\n *   }\n * } else {\n *   Rd = Rs1;\n * }\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned int type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SRLI32_U(unsigned long a, unsigned int b)\n{\n    register unsigned long result;\n    __ASM volatile(\"srli32.u %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.39.2. SRLI32.u ===== */\n\n/* ===== Inline Function Start for 4.40. STAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief STAS32 (SIMD 32-bit Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * STAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit integer element addition and 32-bit integer element subtraction in a 64-bit\n * chunk simultaneously. Operands are from corresponding 32-bit elements.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit integer element in [63:32] of Rs1 with the 32-bit\n * integer element in [63:32] of Rs2, and writes the result to [63:32] of Rd; at the same time, it subtracts\n * the 32-bit integer element in [31:0] of Rs2 from the 32-bit integer element in [31:0] of Rs1, and\n * writes the result to [31:0] of Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned operations.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = Rs1.W[1] + Rs2.W[1];\n * Rd.W[0] = Rs1.W[0] - Rs2.W[0];\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_STAS32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"stas32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.40. STAS32 ===== */\n\n/* ===== Inline Function Start for 4.41. STSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief STSA32 (SIMD 32-bit Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * STSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit integer element subtraction and 32-bit integer element addition in a 64-bit\n * chunk simultaneously. Operands are from corresponding 32-bit elements.\n * *Description: *\n * This instruction subtracts the 32-bit integer element in [63:32] of Rs2 from the 32-bit integer\n * element in [63:32] of Rs1, and writes the result to [63:32] of Rd; at the same time, it adds the 32-bit\n * integer element in [31:0] of Rs1 with the 32-bit integer element in [31:0] of Rs2, and writes the result\n * to [31:0] of Rd\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned operations.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = Rs1.W[1] - Rs2.W[1];\n * Rd.W[0] = Rs1.W[0] + Rs2.W[0];\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_STSA32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"stsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.41. STSA32 ===== */\n\n/* ===== Inline Function Start for 4.42. SUB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief SUB32 (SIMD 32-bit Subtraction)\n * \\details\n * **Type**: DSP (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * SUB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit integer element subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit integer elements in Rs2 from the 32-bit integer\n * elements in Rs1, and then writes the results to Rd.\n *\n * **Note**:\\n\n * This instruction can be used for either signed or unsigned subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = Rs1.W[x] - Rs2.W[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_SUB32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"sub32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.42. SUB32 ===== */\n\n/* ===== Inline Function Start for 4.43. UKADD32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief UKADD32 (SIMD 32-bit Unsigned Saturating Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * UKADD32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer element saturating additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit unsigned integer elements in Rs1 with the 32-bit\n * unsigned integer elements in Rs2. If any of the results are beyond the 32-bit unsigned number\n * range (0 <= RES <= 2^32-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.W[x] + Rs2.W[x];\n * if (res[x] > (2^32)-1) {\n *   res[x] = (2^32)-1;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKADD32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ukadd32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.43. UKADD32 ===== */\n\n/* ===== Inline Function Start for 4.44. UKCRAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief UKCRAS32 (SIMD 32-bit Unsigned Saturating Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * UKCRAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do one 32-bit unsigned integer element saturating addition and one 32-bit unsigned\n * integer element saturating subtraction in a 64-bit chunk simultaneously. Operands are from crossed\n * 32-bit elements.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit unsigned integer element in [63:32] of Rs1 with the 32-\n * bit unsigned integer element in [31:0] of Rs2; at the same time, it subtracts the 32-bit unsigned\n * integer element in [63:32] of Rs2 from the 32-bit unsigned integer element in [31:0] Rs1. If any of the\n * results are beyond the 32-bit unsigned number range (0 <= RES <= 2^32-1), they are saturated to the\n * range and the OV bit is set to 1. The saturated results are written to [63:32] of Rd for addition and\n * [31:0] of Rd for subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[1] + Rs2.W[0];\n * res2 = Rs1.W[0] - Rs2.W[1];\n * if (res1 > (2^32)-1) {\n *   res1 = (2^32)-1;\n *   OV = 1;\n * }\n * if (res2 < 0) {\n *   res2 = 0;\n *   OV = 1;\n * }\n * Rd.W[1] = res1;\n * Rd.W[0] = res2;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKCRAS32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ukcras32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.44. UKCRAS32 ===== */\n\n/* ===== Inline Function Start for 4.45. UKCRSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief UKCRSA32 (SIMD 32-bit Unsigned Saturating Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * UKCRSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do one 32-bit unsigned integer element saturating subtraction and one 32-bit unsigned\n * integer element saturating addition in a 64-bit chunk simultaneously. Operands are from crossed\n * 32-bit elements.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit unsigned integer element in [31:0] of Rs2 from the\n * 32-bit unsigned integer element in [63:32] of Rs1; at the same time, it adds the 32-bit unsigned\n * integer element in [63:32] of Rs2 with the 32-bit unsigned integer element in [31:0] Rs1. If any of the\n * results are beyond the 32-bit unsigned number range (0 <= RES <= 2^32-1), they are saturated to the\n * range and the OV bit is set to 1. The saturated results are written to [63:32] of Rd for subtraction and\n * [31:0] of Rd for addition.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[1] - Rs2.W[0];\n * res2 = Rs1.W[0] + Rs2.W[1];\n * if (res1 < 0) {\n *   res1 = 0;\n *   OV = 1;\n * } else if (res2 > (2^32)-1) {\n *   res2 = (2^32)-1;\n *   OV = 1;\n * }\n * Rd.W[1] = res1;\n * Rd.W[0] = res2;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKCRSA32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ukcrsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.45. UKCRSA32 ===== */\n\n/* ===== Inline Function Start for 4.46. UKSTAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief UKSTAS32 (SIMD 32-bit Unsigned Saturating Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * UKSTAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do one 32-bit unsigned integer element saturating addition and one 32-bit unsigned\n * integer element saturating subtraction in a 64-bit chunk simultaneously. Operands are from\n * corresponding 32-bit elements.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit unsigned integer element in [63:32] of Rs1 with the 32-\n * bit unsigned integer element in [63:32] of Rs2; at the same time, it subtracts the 32-bit unsigned\n * integer element in [31:0] of Rs2 from the 32-bit unsigned integer element in [31:0] Rs1. If any of the\n * results are beyond the 32-bit unsigned number range (0 <= RES <= 2^32-1), they are saturated to the\n * range and the OV bit is set to 1. The saturated results are written to [63:32] of Rd for addition and\n * [31:0] of Rd for subtraction.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[1] + Rs2.W[1];\n * res2 = Rs1.W[0] - Rs2.W[0];\n * if (res1 > (2^32)-1) {\n *   res1 = (2^32)-1;\n *   OV = 1;\n * }\n * if (res2 < 0) {\n *   res2 = 0;\n *   OV = 1;\n * }\n * Rd.W[1] = res1;\n * Rd.W[0] = res2;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSTAS32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ukstas32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.46. UKSTAS32 ===== */\n\n/* ===== Inline Function Start for 4.47. UKSTSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief UKSTSA32 (SIMD 32-bit Unsigned Saturating Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * UKSTSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do one 32-bit unsigned integer element saturating subtraction and one 32-bit unsigned\n * integer element saturating addition in a 64-bit chunk simultaneously. Operands are from\n * corresponding 32-bit elements.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit unsigned integer element in [63:32] of Rs2 from\n * the 32-bit unsigned integer element in [63:32] of Rs1; at the same time, it adds the 32-bit unsigned\n * integer element in [31:0] of Rs2 with the 32-bit unsigned integer element in [31:0] Rs1. If any of the\n * results are beyond the 32-bit unsigned number range (0 <= RES <= 2^32-1), they are saturated to the\n * range and the OV bit is set to 1. The saturated results are written to [63:32] of Rd for subtraction and\n * [31:0] of Rd for addition.\n *\n * **Operations**:\\n\n * ~~~\n * res1 = Rs1.W[1] - Rs2.W[1];\n * res2 = Rs1.W[0] + Rs2.W[0];\n * if (res1 < 0) {\n *   res1 = 0;\n *   OV = 1;\n * } else if (res2 > (2^32)-1) {\n *   res2 = (2^32)-1;\n *   OV = 1;\n * }\n * Rd.W[1] = res1;\n * Rd.W[0] = res2;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSTSA32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ukstsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.47. UKSTSA32 ===== */\n\n/* ===== Inline Function Start for 4.48. UKSUB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief UKSUB32 (SIMD 32-bit Unsigned Saturating Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * UKSUB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer elements saturating subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit unsigned integer elements in Rs2 from the 32-bit\n * unsigned integer elements in Rs1. If any of the results are beyond the 32-bit unsigned number\n * range (0 <= RES <= 2^32-1), they are saturated to the range and the OV bit is set to 1. The saturated\n * results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.W[x] - Rs2.W[x];\n * if (res[x] < 0) {\n *   res[x] = 0;\n *   OV = 1;\n * }\n * Rd.W[x] = res[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UKSUB32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"uksub32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.48. UKSUB32 ===== */\n\n/* ===== Inline Function Start for 4.49. UMAX32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_MISC\n * \\brief UMAX32 (SIMD 32-bit Unsigned Maximum)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * UMAX32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer elements finding maximum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 32-bit unsigned integer elements in Rs1 with the 32-bit\n * unsigned integer elements in Rs2 and selects the numbers that is greater than the other one. The\n * selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = (Rs1.W[x] u> Rs2.W[x])? Rs1.W[x] : Rs2.W[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UMAX32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"umax32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.49. UMAX32 ===== */\n\n/* ===== Inline Function Start for 4.50. UMIN32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_MISC\n * \\brief UMIN32 (SIMD 32-bit Unsigned Minimum)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * UMIN32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer elements finding minimum operations simultaneously.\n *\n * **Description**:\\n\n * This instruction compares the 32-bit unsigned integer elements in Rs1 with the 32-bit\n * unsigned integer elements in Rs2 and selects the numbers that is less than the other one. The\n * selected results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = (Rs1.W[x] <u Rs2.W[x])? Rs1.W[x] : Rs2.W[x];\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_UMIN32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"umin32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.50. UMIN32 ===== */\n\n/* ===== Inline Function Start for 4.51. URADD32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief URADD32 (SIMD 32-bit Unsigned Halving Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * URADD32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer element additions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit unsigned integer elements in Rs1 with the 32-bit\n * unsigned integer elements in Rs2. The results are first logically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7FFFFFFF, Rb = 0x7FFFFFFF Rt = 0x7FFFFFFF\n * * Ra = 0x80000000, Rb = 0x80000000 Rt = 0x80000000\n * * Ra = 0x40000000, Rb = 0x80000000 Rt = 0x60000000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = (Rs1.W[x] + Rs2.W[x]) u>> 1;\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URADD32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"uradd32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.51. URADD32 ===== */\n\n/* ===== Inline Function Start for 4.52. URCRAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief URCRAS32 (SIMD 32-bit Unsigned Halving Cross Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * URCRAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer element addition and 32-bit unsigned integer element\n * subtraction in a 64-bit chunk simultaneously. Operands are from crossed 32-bit elements. The\n * results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit unsigned integer element in [63:32] of Rs1 with the 32-\n * bit unsigned integer element in [31:0] of Rs2, and subtracts the 32-bit unsigned integer element in\n * [63:32] of Rs2 from the 32-bit unsigned integer element in [31:0] of Rs1. The element results are first\n * logically right-shifted by 1 bit and then written to [63:32] of Rd for addition and [31:0] of Rd for\n * subtraction.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `URADD32` and `URSUB32` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = (Rs1.W[1] + Rs2.W[0]) u>> 1;\n * Rd.W[0] = (Rs1.W[0] - Rs2.W[1]) u>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URCRAS32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"urcras32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.52. URCRAS32 ===== */\n\n/* ===== Inline Function Start for 4.53. URCRSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief URCRSA32 (SIMD 32-bit Unsigned Halving Cross Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * URCRSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer element subtraction and 32-bit unsigned integer element\n * addition in a 64-bit chunk simultaneously. Operands are from crossed 32-bit elements. The results\n * are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit unsigned integer element in [31:0] of Rs2 from the\n * 32-bit unsigned integer element in [63:32] of Rs1, and adds the 32-bit unsigned element integer in\n * [31:0] of Rs1 with the 32-bit unsigned integer element in [63:32] of Rs2. The two results are first\n * logically right-shifted by 1 bit and then written to [63:32] of Rd for subtraction and [31:0] of Rd for\n * addition.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `URADD32` and `URSUB32` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = (Rs1.W[1] - Rs2.W[0]) u>> 1;\n * Rd.W[0] = (Rs1.W[0] + Rs2.W[1]) u>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URCRSA32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"urcrsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.53. URCRSA32 ===== */\n\n/* ===== Inline Function Start for 4.54. URSTAS32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief URSTAS32 (SIMD 32-bit Unsigned Halving Straight Addition & Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * URSTAS32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer element addition and 32-bit unsigned integer element\n * subtraction in a 64-bit chunk simultaneously. Operands are from corresponding 32-bit elements.\n * The results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction adds the 32-bit unsigned integer element in [63:32] of Rs1 with the 32-\n * bit unsigned integer element in [63:32] of Rs2, and subtracts the 32-bit unsigned integer element in\n * [31:0] of Rs2 from the 32-bit unsigned integer element in [31:0] of Rs1. The element results are first\n * logically right-shifted by 1 bit and then written to [63:32] of Rd for addition and [31:0] of Rd for\n * subtraction.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `URADD32` and `URSUB32` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = (Rs1.W[1] + Rs2.W[1]) u>> 1;\n * Rd.W[0] = (Rs1.W[0] - Rs2.W[0]) u>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URSTAS32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"urstas32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.54. URSTAS32 ===== */\n\n/* ===== Inline Function Start for 4.55. URSTSA32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief URSTSA32 (SIMD 32-bit Unsigned Halving Straight Subtraction & Addition)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * URSTSA32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer element subtraction and 32-bit unsigned integer element\n * addition in a 64-bit chunk simultaneously. Operands are from corresponding 32-bit elements. The\n * results are halved to avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit unsigned integer element in [63:32] of Rs2 from\n * the 32-bit unsigned integer element in [63:32] of Rs1, and adds the 32-bit unsigned element integer\n * in [31:0] of Rs1 with the 32-bit unsigned integer element in [31:0] of Rs2. The two results are first\n * logically right-shifted by 1 bit and then written to [63:32] of Rd for subtraction and [31:0] of Rd for\n * addition.\n *\n * **Examples**:\\n\n * ~~~\n * Please see `URADD32` and `URSUB32` instructions.\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[1] = (Rs1.W[1] - Rs2.W[1]) u>> 1;\n * Rd.W[0] = (Rs1.W[0] + Rs2.W[0]) u>> 1;\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URSTSA32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"urstsa32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.55. URSTSA32 ===== */\n\n/* ===== Inline Function Start for 4.56. URSUB32 ===== */\n/**\n * \\ingroup NMSIS_Core_DSP_Intrinsic_RV64_SIMD_32B_ADDSUB\n * \\brief URSUB32 (SIMD 32-bit Unsigned Halving Subtraction)\n * \\details\n * **Type**: SIMD (RV64 Only)\n *\n * **Syntax**:\\n\n * ~~~\n * URSUB32 Rd, Rs1, Rs2\n * ~~~\n *\n * **Purpose**:\\n\n * Do 32-bit unsigned integer element subtractions simultaneously. The results are halved to\n * avoid overflow or saturation.\n *\n * **Description**:\\n\n * This instruction subtracts the 32-bit unsigned integer elements in Rs2 from the 32-bit\n * unsigned integer elements in Rs1. The results are first logically right-shifted by 1 bit and then\n * written to Rd.\n *\n * **Examples**:\\n\n * ~~~\n * * Ra = 0x7FFFFFFF, Rb = 0x80000000, Rt = 0xFFFFFFFF\n * * Ra = 0x80000000, Rb = 0x7FFFFFFF, Rt = 0x00000000\n * * Ra = 0x80000000, Rb = 0x40000000, Rt = 0x20000000\n * ~~~\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x] = (Rs1.W[x] - Rs2.W[x]) u>> 1;\n * for RV64: x=1...0\n * ~~~\n *\n * \\param [in]  a    unsigned long type of value stored in a\n * \\param [in]  b    unsigned long type of value stored in b\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_URSUB32(unsigned long a, unsigned long b)\n{\n    register unsigned long result;\n    __ASM volatile(\"ursub32 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for 4.56. URSUB32 ===== */\n\n#endif /* __RISCV_XLEN == 64 */\n\n\n#if (__RISCV_XLEN == 32) || defined(__ONLY_FOR_DOXYGEN_DOCUMENT_GENERATION__)\n/* XXXXX Nuclei Extended DSP Instructions for RV32 XXXXX */\n/**\n * \\defgroup NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM      Nuclei Customized DSP Instructions\n * \\ingroup  NMSIS_Core_DSP_Intrinsic\n * \\brief    (RV32 only)Nuclei Customized DSP Instructions\n * \\details  This is Nuclei customized DSP instructions only for RV32\n */\n/* ===== Inline Function Start for A.1. DKHM8 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKHM8 (64-bit SIMD Signed Saturating Q7 Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKHM8 Rd, Rs1, Rs2\n * # Rd, Rs1, Rs2 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Do Q7xQ7 element multiplications simultaneously. The Q14 results are then reduced to Q7\n * numbers again.\n *\n * **Description**:\\n\n * For the `DKHM8` instruction, multiply the top 8-bit Q7 content of 16-bit chunks in Rs1\n * with the top 8-bit Q7 content of 16-bit chunks in Rs2. At the same time, multiply the bottom 8-bit Q7\n * content of 16-bit chunks in Rs1 with the bottom 8-bit Q7 content of 16-bit chunks in Rs2.\n *\n * The Q14 results are then right-shifted 7-bits and saturated into Q7 values. The Q7 results are then\n * written into Rd. When both the two Q7 inputs of a multiplication are 0x80, saturation will happen.\n * The result will be saturated to 0x7F and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * op1t = Rs1.B[x+1]; op2t = Rs2.B[x+1]; // top\n * op1b = Rs1.B[x]; op2b = Rs2.B[x]; // bottom\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   if (0x80 != aop | 0x80 != bop) {\n *     res = (aop s* bop) >> 7;\n *   } else {\n *     res= 0x7F;\n *     OV = 1;\n *   }\n * }\n * Rd.H[x/2] = concat(rest, resb);\n * for RV32, x=0,2,4,6\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\param [in]  b unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKHM8(unsigned long long a, unsigned long long b)\n{\n    unsigned long long result;\n    __ASM volatile(\"dkhm8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for A.1. DKHM8 ===== */\n\n/* ===== Inline Function Start for A.2. DKHM16 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKHM16 (64-bit SIMD Signed Saturating Q15 Multiply)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKHM16 Rd, Rs1, Rs2\n * # Rd, Rs1, Rs2 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Do Q15xQ15 element multiplications simultaneously. The Q30 results are then reduced to\n * Q15 numbers again.\n *\n * **Description**:\\n\n * For the `DKHM16` instruction, multiply the top 16-bit Q15 content of 32-bit chunks in\n * Rs1 with the top 16-bit Q15 content of 32-bit chunks in Rs2. At the same time, multiply the bottom\n * 16-bit Q15 content of 32-bit chunks in Rs1 with the bottom 16-bit Q15 content of 32-bit chunks in\n * Rs2.\n *\n * The Q30 results are then right-shifted 15-bits and saturated into Q15 values. The Q15 results are\n * then written into Rd. When both the two Q15 inputs of a multiplication are 0x8000, saturation will\n * happen. The result will be saturated to 0x7FFF and the overflow flag OV will be set.\n *\n * **Operations**:\\n\n * ~~~\n * op1t = Rs1.H[x+1]; op2t = Rs2.H[x+1]; // top\n * op1b = Rs1.H[x]; op2b = Rs2.H[x]; // bottom\n * for ((aop,bop,res) in [(op1t,op2t,rest), (op1b,op2b,resb)]) {\n *   if (0x8000 != aop | 0x8000 != bop) {\n *     res = (aop s* bop) >> 15;\n *   } else {\n *     res= 0x7FFF;\n *     OV = 1;\n *   }\n * }\n * Rd.W[x/2] = concat(rest, resb);\n * for RV32: x=0, 2\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\param [in]  b unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKHM16(unsigned long long a, unsigned long long b)\n{\n    unsigned long long result;\n    __ASM volatile(\"dkhm16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for A.2. DKHM16 ===== */\n\n/* ===== Inline Function Start for A.3. DKABS8 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKABS8 (64-bit SIMD 8-bit Saturating Absolute)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKABS8 Rd, Rs1\n * # Rd, Rs1 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Get the absolute value of 8-bit signed integer elements simultaneously.\n *\n * **Description**:\\n\n * This instruction calculates the absolute value of 8-bit signed integer elements stored\n * in Rs1 and writes the element results to Rd. If the input number is 0x80, this instruction generates\n * 0x7f as the output and sets the OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.B[x];\n * if (src == 0x80) {\n *   src = 0x7f;\n *   OV = 1;\n * } else if (src[7] == 1)\n *   src = -src;\n * }\n * Rd.B[x] = src;\n * for RV32: x=7...0,\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKABS8(unsigned long long a)\n{\n    unsigned long long result;\n    __ASM volatile(\"dkabs8 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for A.3. DKABS8 ===== */\n\n/* ===== Inline Function Start for A.4. DKABS16 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKABS16 (64-bit SIMD 16-bit Saturating Absolute)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKABS16 Rd, Rs1\n * # Rd, Rs1 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Get the absolute value of 16-bit signed integer elements simultaneously.\n *\n * **Description**:\\n\n * This instruction calculates the absolute value of 16-bit signed integer elements stored\n * in Rs1 and writes the element results to Rd. If the input number is 0x8000, this instruction\n * generates 0x7fff as the output and sets the OV bit to 1.\n *\n * **Operations**:\\n\n * ~~~\n * src = Rs1.H[x];\n * if (src == 0x8000) {\n *   src = 0x7fff;\n *   OV = 1;\n * } else if (src[15] == 1)\n *   src = -src;\n * }\n * Rd.H[x] = src;\n * for RV32: x=3...0,\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKABS16(unsigned long long a)\n{\n    unsigned long long result;\n    __ASM volatile(\"dkabs16 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for A.4. DKABS16 ===== */\n\n/* ===== Inline Function Start for A.5. DKSLRA8 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKSLRA8 (64-bit SIMD 8-bit Shift Left Logical with Saturation or Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKSLRA8 Rd, Rs1, Rs2\n * # Rd, Rs1 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit elements logical left (positive) or arithmetic right (negative) shift operation with\n * Q7 saturation for the left shift.\n *\n * **Description**:\\n\n * The 8-bit data elements of Rs1 are left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[3:0]. Rs2[3:0] is in the signed range of [-2^3, 2^3-1]. A positive Rs2[3:0] means\n * logical left shift and a negative Rs2[3:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[3:0]. However, the behavior of `Rs2[3:0]==-2^3 (0x8)` is defined to be\n * equivalent to the behavior of `Rs2[3:0]==-(2^3-1) (0x9)`.\n * The left-shifted results are saturated to the 8-bit signed integer range of [-2^7, 2^7-1].\n * If any saturation happens, this instruction sets the OV flag. The value of Rs2[31:4] will not affect\n * this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[3:0] < 0) {\n *   sa = -Rs2[3:0];\n *   sa = (sa == 8)? 7 : sa;\n *   Rd.B[x] = SE8(Rs1.B[x][7:sa]);\n * } else {\n *   sa = Rs2[2:0];\n *   res[(7+sa):0] = Rs1.B[x] <<(logic) sa;\n *   if (res > (2^7)-1) {\n *     res[7:0] = 0x7f; OV = 1;\n *   } else if (res < -2^7) {\n *     res[7:0] = 0x80; OV = 1;\n *   }\n *   Rd.B[x] = res[7:0];\n * }\n * for RV32: x=7...0,\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\param [in]  b int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKSLRA8(unsigned long long a, int b)\n{\n    unsigned long long result;\n    __ASM volatile(\"dkslra8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for A.5. DKSLRA8 ===== */\n\n/* ===== Inline Function Start for A.6. DKSLRA16 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKSLRA16 (64-bit SIMD 16-bit Shift Left Logical with Saturation or Shift Right Arithmetic)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKSLRA16 Rd, Rs1, Rs2\n * # Rd, Rs1 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit elements logical left (positive) or arithmetic right (negative) shift operation with\n * Q15 saturation for the left shift.\n *\n * **Description**:\\n\n * The 16-bit data elements of Rs1 are left-shifted logically or right-shifted arithmetically\n * based on the value of Rs2[4:0]. Rs2[4:0] is in the signed range of [-2^4, 2^4-1]. A positive Rs2[4:0] means\n * logical left shift and a negative Rs2[4:0] means arithmetic right shift. The shift amount is the\n * absolute value of Rs2[4:0]. However, the behavior of `Rs2[4:0]==-2^4 (0x10)` is defined to be\n * equivalent to the behavior of `Rs2[4:0]==-(2^4-1) (0x11)`.\n * The left-shifted results are saturated to the 16-bit signed integer range of [-2^15, 2^15-1].\n * After the shift, saturation, or rounding, the final results are written to\n * Rd. If any saturation happens, this instruction sets the OV flag. The value of Rs2[31:5] will not affect\n * this instruction.\n *\n * **Operations**:\\n\n * ~~~\n * if (Rs2[4:0] < 0) {\n *   sa = -Rs2[4:0];\n *   sa = (sa == 16)? 15 : sa;\n *   Rd.H[x] = SE16(Rs1.H[x][15:sa]);\n * } else {\n *   sa = Rs2[3:0];\n *   res[(15+sa):0] = Rs1.H[x] <<(logic) sa;\n *   if (res > (2^15)-1) {\n *     res[15:0] = 0x7fff; OV = 1;\n *   } else if (res < -2^15) {\n *     res[15:0] = 0x8000; OV = 1;\n *   }\n *   d.H[x] = res[15:0];\n * }\n * for RV32: x=3...0,\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\param [in]  b int type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKSLRA16(unsigned long long a, int b)\n{\n    unsigned long long result;\n    __ASM volatile(\"dkslra16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for A.6. DKSLRA16 ===== */\n\n/* ===== Inline Function Start for A.7. DKADD8 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKADD8 (64-bit SIMD 8-bit Signed Saturating Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKADD8 Rd, Rs1, Rs2\n * # Rd, Rs1, Rs2 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed integer element saturating additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 8-bit signed integer elements in Rs1 with the 8-bit signed\n * integer elements in Rs2. If any of the results are beyond the Q7 number range (-2^7 <= Q7 <= 2^7-1), they\n * are saturated to the range and the OV bit is set to 1. The saturated results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.B[x] + Rs2.B[x];\n * if (res[x] > 127) {\n *   res[x] = 127;\n *   OV = 1;\n * } else if (res[x] < -128) {\n *   res[x] = -128;\n *   OV = 1;\n * }\n * Rd.B[x] = res[x];\n * for RV32: x=7...0,\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\param [in]  b unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKADD8(unsigned long long a, unsigned long long b)\n{\n    unsigned long long result;\n    __ASM volatile(\"dkadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for A.7. DKADD8 ===== */\n\n/* ===== Inline Function Start for A.8. DKADD16 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKADD16 (64-bit SIMD 16-bit Signed Saturating Addition)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKADD16 Rd, Rs1, Rs2\n * # Rd, Rs1, Rs2 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer element saturating additions simultaneously.\n *\n * **Description**:\\n\n * This instruction adds the 16-bit signed integer elements in Rs1 with the 16-bit signed\n * integer elements in Rs2. If any of the results are beyond the Q15 number range (-2^15 <= Q15 <= 2^15-1),\n * they are saturated to the range and the OV bit is set to 1. The saturated results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.H[x] + Rs2.H[x];\n * if (res[x] > 32767) {\n *   res[x] = 32767;\n *   OV = 1;\n * } else if (res[x] < -32768) {\n *   res[x] = -32768;\n *   OV = 1;\n * }\n * Rd.H[x] = res[x];\n * for RV32: x=3...0,\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\param [in]  b unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKADD16(unsigned long long a, unsigned long long b)\n{\n    unsigned long long result;\n    __ASM volatile(\"dkadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for A.8. DKADD16 ===== */\n\n/* ===== Inline Function Start for A.10. DKSUB8 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKSUB8 (64-bit SIMD 8-bit Signed Saturating Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKSUB8 Rd, Rs1, Rs2\n * # Rd, Rs1, Rs2 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Do 8-bit signed elements saturating subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 8-bit signed integer elements in Rs2 from the 8-bit\n * signed integer elements in Rs1. If any of the results are beyond the Q7 number range (-2^7 <= Q7 <= 2^7-1),\n * they are saturated to the range and the OV bit is set to 1. The saturated results are written to Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.B[x] - Rs2.B[x];\n * if (res[x] > (2^7)-1) {\n *   res[x] = (2^7)-1;\n *   OV = 1;\n * } else if (res[x] < -2^7) {\n *   res[x] = -2^7;\n *   OV = 1;\n * }\n * Rd.B[x] = res[x];\n * for RV32: x=7...0,\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\param [in]  b unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKSUB8(unsigned long long a, unsigned long long b)\n{\n    unsigned long long result;\n    __ASM volatile(\"dksub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for A.9. DKSUB8 ===== */\n\n/* ===== Inline Function Start for A.10. DKSUB16 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief DKSUB16 (64-bit SIMD 16-bit Signed Saturating Subtraction)\n * \\details\n * **Type**: SIMD\n *\n * **Syntax**:\\n\n * ~~~\n * DKSUB16 Rd, Rs1, Rs2\n * # Rd, Rs1, Rs2 are all even/odd pair of registers\n * ~~~\n *\n * **Purpose**:\\n\n * Do 16-bit signed integer elements saturating subtractions simultaneously.\n *\n * **Description**:\\n\n * This instruction subtracts the 16-bit signed integer elements in Rs2 from the 16-bit\n * signed integer elements in Rs1. If any of the results are beyond the Q15 number range (-2^15 <= Q15 <=\n * 2^15-1), they are saturated to the range and the OV bit is set to 1. The saturated results are written to\n * Rd.\n *\n * **Operations**:\\n\n * ~~~\n * res[x] = Rs1.H[x] - Rs2.H[x];\n * if (res[x] > (2^15)-1) {\n *   res[x] = (2^15)-1;\n *   OV = 1;\n * } else if (res[x] < -2^15) {\n *   res[x] = -2^15;\n *   OV = 1;\n * }\n * Rd.H[x] = res[x];\n * for RV32: x=3...0,\n * ~~~\n *\n * \\param [in]  a unsigned long long type of value stored in a\n * \\param [in]  b unsigned long long type of value stored in b\n * \\return value stored in unsigned long long type\n */\n__STATIC_FORCEINLINE unsigned long long __RV_DKSUB16(unsigned long long a, unsigned long long b)\n{\n    unsigned long long result;\n    __ASM volatile(\"dksub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(a), \"r\"(b));\n    return result;\n}\n/* ===== Inline Function End for A.10. DKSUB16 ===== */\n\n/* ===== Inline Function Start for A.11.1. EXPD80 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief EXPD80 (Expand and Copy Byte 0 to 32bit)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * EXPD80 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Copy 8-bit data from 32-bit chunks into 4 bytes in a register.\n *\n * **Description**:\\n\n * Moves Rs1.B[0][7:0] to Rd.[0][7:0], Rd.[1][7:0], Rd.[2][7:0], Rd.[3][7:0]\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:0] = CONCAT(Rs1.B[0][7:0], Rs1.B[0][7:0], Rs1.B[0][7:0], Rs1.B[0][7:0]);\n * for RV32: x=0\n * ~~~\n *\n * \\param [in]  a unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_EXPD80(unsigned long a)\n{\n    unsigned long result;\n    __ASM volatile(\"expd80 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for A11.1. EXPD80 ===== */\n\n/* ===== Inline Function Start for A.11.2. EXPD81 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief EXPD81 (Expand and Copy Byte 1 to 32bit)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * EXPD81 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Copy 8-bit data from 32-bit chunks into 4 bytes in a register.\n *\n * **Description**:\\n\n * Moves Rs1.B[1][7:0] to Rd.[0][7:0], Rd.[1][7:0], Rd.[2][7:0], Rd.[3][7:0]\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:0] = CONCAT(Rs1.B[1][7:0], Rs1.B[1][7:0], Rs1.B[1][7:0], Rs1.B[1][7:0]);\n * for RV32: x=0\n * ~~~\n *\n * \\param [in]  a unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_EXPD81(unsigned long a)\n{\n    unsigned long result;\n    __ASM volatile(\"expd81 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for A11.2. EXPD81 ===== */\n\n/* ===== Inline Function Start for A.11.3. EXPD82 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief EXPD82 (Expand and Copy Byte 2 to 32bit)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * EXPD82 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Copy 8-bit data from 32-bit chunks into 4 bytes in a register.\n *\n * **Description**:\\n\n * Moves Rs1.B[2][7:0] to Rd.[0][7:0], Rd.[1][7:0], Rd.[2][7:0], Rd.[3][7:0]\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:0] = CONCAT(Rs1.B[2][7:0], Rs1.B[2][7:0], Rs1.B[2][7:0], Rs1.B[2][7:0]);\n * for RV32: x=0\n * ~~~\n *\n * \\param [in]  a unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_EXPD82(unsigned long a)\n{\n    unsigned long result;\n    __ASM volatile(\"expd82 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for A11.3. EXPD82 ===== */\n\n/* ===== Inline Function Start for A.11.4. EXPD83 ===== */\n/**\n * \\ingroup  NMSIS_Core_DSP_Intrinsic_NUCLEI_CUSTOM\n * \\brief EXPD83 (Expand and Copy Byte 3 to 32bit)\n * \\details\n * **Type**: DSP\n *\n * **Syntax**:\\n\n * ~~~\n * EXPD83 Rd, Rs1\n * ~~~\n *\n * **Purpose**:\\n\n * Copy 8-bit data from 32-bit chunks into 4 bytes in a register.\n *\n * **Description**:\\n\n * Moves Rs1.B[3][7:0] to Rd.[0][7:0], Rd.[1][7:0], Rd.[2][7:0], Rd.[3][7:0]\n *\n * **Operations**:\\n\n * ~~~\n * Rd.W[x][31:0] = CONCAT(Rs1.B[3][7:0], Rs1.B[3][7:0], Rs1.B[3][7:0], Rs1.B[3][7:0]);\n * for RV32: x=0\n * ~~~\n *\n * \\param [in]  a unsigned long type of value stored in a\n * \\return value stored in unsigned long type\n */\n__STATIC_FORCEINLINE unsigned long __RV_EXPD83(unsigned long a)\n{\n    unsigned long result;\n    __ASM volatile(\"expd83 %0, %1\" : \"=r\"(result) : \"r\"(a));\n    return result;\n}\n/* ===== Inline Function End for A11.4. EXPD83 ===== */\n#endif /* __RISCV_XLEN == 32 */\n\n#if defined(__RISCV_FEATURE_DSP) && (__RISCV_FEATURE_DSP == 1)\n/* XXXXX ARM Compatiable SIMD API XXXXX */\n/** \\brief Q setting quad 8-bit saturating addition. */\n#define __QADD8(x, y)               __RV_KADD8(x, y)\n/** \\brief Q setting quad 8-bit saturating subtract. */\n#define __QSUB8(x, y)               __RV_KSUB8((x), (y))\n/** \\brief Q setting dual 16-bit saturating addition. */\n#define __QADD16(x, y)              __RV_KADD16((x), (y))\n/** \\brief Dual 16-bit signed addition with halved results. */\n#define __SHADD16(x, y)             __RV_RADD16((x), (y))\n/** \\brief Q setting dual 16-bit saturating subtract. */\n#define __QSUB16(x, y)              __RV_KSUB16((x), (y))\n/** \\brief Dual 16-bit signed subtraction with halved results. */\n#define __SHSUB16(x, y)             __RV_RSUB16((x), (y))\n/** \\brief Q setting dual 16-bit add and subtract with exchange. */\n#define __QASX(x, y)                __RV_KCRAS16((x), (y))\n/** \\brief Dual 16-bit signed addition and subtraction with halved results.*/\n#define __SHASX(x, y)               __RV_RCRAS16((x), (y))\n/** \\brief Q setting dual 16-bit subtract and add with exchange. */\n#define __QSAX(x, y)                __RV_KCRSA16((x), (y))\n/** \\brief Dual 16-bit signed subtraction and addition with halved results.*/\n#define __SHSAX(x, y)               __RV_RCRSA16((x), (y))\n/** \\brief Dual 16-bit signed multiply with exchange returning difference. */\n#define __SMUSDX(x, y)              __RV_SMXDS((y), (x))\n/** \\brief Q setting sum of dual 16-bit signed multiply with exchange. */\n__STATIC_FORCEINLINE int32_t __SMUADX (int32_t op1, int32_t op2)\n{\n    return (int32_t)__RV_KMXDA(op1, op2);\n}\n/** \\brief Q setting saturating add. */\n#define __QADD(x, y)                __RV_KADDW((x), (y))\n/** \\brief Q setting saturating subtract. */\n#define __QSUB(x, y)                __RV_KSUBW((x), (y))\n/** \\brief Q setting dual 16-bit signed multiply with single 32-bit accumulator. */\n__STATIC_FORCEINLINE int32_t __SMLAD(int32_t op1, int32_t op2, int32_t op3)\n{\n    return (int32_t)__RV_KMADA(op3, op1, op2);\n}\n/** \\brief Q setting pre-exchanged dual 16-bit signed multiply with single 32-bit accumulator.  */\n__STATIC_FORCEINLINE int32_t __SMLADX(int32_t op1, int32_t op2, int32_t op3)\n{\n    return (int32_t)__RV_KMAXDA(op3, op1, op2);\n}\n/** \\brief Q setting dual 16-bit signed multiply with exchange subtract with 32-bit accumulate.  */\n__STATIC_FORCEINLINE int32_t __SMLSDX(int32_t op1, int32_t op2, int32_t op3)\n{\n    return (op3 - (int32_t)__RV_SMXDS(op1, op2));\n}\n/** \\brief Dual 16-bit signed multiply with single 64-bit accumulator. */\n__STATIC_FORCEINLINE int64_t __SMLALD(int32_t op1, int32_t op2, int64_t acc)\n{\n    return (int64_t)__RV_SMALDA(acc, op1, op2);\n}\n/** \\brief Dual 16-bit signed multiply with exchange with single 64-bit accumulator.  */\n__STATIC_FORCEINLINE int64_t __SMLALDX(int32_t op1, int32_t op2, int64_t acc)\n{\n    return (int64_t)__RV_SMALXDA(acc, op1, op2);\n}\n/** \\brief Q setting sum of dual 16-bit signed multiply. */\n__STATIC_FORCEINLINE int32_t __SMUAD(int32_t op1, int32_t op2)\n{\n    return (int32_t)__RV_KMDA(op1, op2);\n}\n/** \\brief Dual 16-bit signed multiply returning difference. */\n__STATIC_FORCEINLINE int32_t __SMUSD(int32_t op1, int32_t op2)\n{\n    return (int32_t)__RV_SMDRS(op1, op2);\n}\n/** \\brief Dual extract 8-bits and sign extend each to 16-bits. */\n#define __SXTB16(x)             __RV_SUNPKD820(x)\n/** \\brief Dual extracted 8-bit to 16-bit signed addition. TODO Need test */\n__STATIC_FORCEINLINE int32_t __SXTAB16(uint32_t op1, uint32_t op2)\n{\n    return __RV_ADD16(op1, __RV_SUNPKD820(op2));\n}\n#define __SXTAB16_RORn(ARG1, ARG2, ROTATE)        __SXTAB16(ARG1, __ROR(ARG2, ROTATE))\n\n/** \\brief 32-bit signed multiply with 32-bit truncated accumulator. */\n__STATIC_FORCEINLINE int32_t __SMMLA(int32_t op1, int32_t op2, int32_t op3)\n{\n    int32_t mul;\n    mul = (int32_t)__RV_SMMUL(op1, op2);\n    return (op3 + mul);\n}\n#define __DKHM8                 __RV_DKHM8\n#define __DKHM16                __RV_DKHM16\n#define __DKSUB16               __RV_DKSUB16\n#define __SMAQA                 __RV_SMAQA\n#define __MULSR64               __RV_MULSR64\n#define __DQADD8                __RV_DKADD8\n#define __DQSUB8                __RV_DKSUB8\n#define __DKADD16               __RV_DKADD16\n#define __PKBB16                __RV_PKBB16\n#define __DKSLRA16              __RV_DKSLRA16\n#define __DKSLRA8               __RV_DKSLRA8\n#define __KABSW                 __RV_KABSW\n#define __DKABS8                __RV_DKABS8\n#define __DKABS16               __RV_DKABS16\n#define __SMALDA                __RV_SMALDA\n#define __SMSLDA                __RV_SMSLDA\n#define __SMALBB                __RV_SMALBB\n#define __SUB64                 __RV_SUB64\n#define __ADD64                 __RV_ADD64\n#define __SMBB16                __RV_SMBB16\n#define __SMBT16                __RV_SMBT16\n#define __SMTT16                __RV_SMTT16\n#define __EXPD80                __RV_EXPD80\n#define __SMAX8                 __RV_SMAX8\n#define __SMAX16                __RV_SMAX16\n#define __PKTT16                __RV_PKTT16\n#define __KADD16                __RV_KADD16\n#define __SADD16                __RV_ADD16\n#define __SSUB8                 __RV_KSUB8\n#define __SADD8                 __RV_KADD8\n#define __USAT16                __RV_UCLIP16\n\n/** \\brief Halfword packing instruction. Combines bits[15:0] of val1 with bits[31:16] of val2 levitated with the val3. */\n#define __PKHBT(ARG1,ARG2,ARG3)     ( ((((uint32_t)(ARG1))          ) & 0x0000FFFFUL) |  \\\n                                    ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL)  )\n/** \\brief Halfword packing instruction. Combines bits[31:16] of val1 with bits[15:0] of val2 right-shifted with the val3. */\n#define __PKHTB(ARG1,ARG2,ARG3)     ( ((((uint32_t)(ARG1))          ) & 0xFFFF0000UL) |  \\\n                                    ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL)  )\n\n/** first rotate then extract. This is more suitable for arm compiler for it can rotate and extract in one command*/\n#define __SXTB16_RORn(ARG1, ARG2)   __RV_SUNPKD820(__ROR(ARG1, ARG2))\n\n#endif /* (__RISCV_FEATURE_DSP == 1) */\n\n#endif /* defined(__DSP_PRESENT) && (__DSP_PRESENT == 1) */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __CORE_FEATURE_DSP__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/nmsis/core/inc/core_feature_eclic.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __CORE_FEATURE_ECLIC__\n#define __CORE_FEATURE_ECLIC__\n/*!\n * @file     core_feature_eclic.h\n * @brief    ECLIC feature API header file for Nuclei N/NX Core\n */\n/*\n * ECLIC Feature Configuration Macro:\n * 1. __ECLIC_PRESENT:  Define whether Enhanced Core Local Interrupt Controller (ECLIC) Unit is present or not\n *   * 0: Not present\n *   * 1: Present\n * 2. __ECLIC_BASEADDR:  Base address of the ECLIC unit.\n * 3. ECLIC_GetInfoCtlbits():  Define the number of hardware bits are actually implemented in the clicintctl registers.\n *   Valid number is 1 - 8.\n * 4. __ECLIC_INTNUM  : Define the external interrupt number of ECLIC Unit\n *\n */\n#ifdef __cplusplus\n extern \"C\" {\n#endif\n\n#if defined(__ECLIC_PRESENT) && (__ECLIC_PRESENT == 1)\n/**\n * \\defgroup NMSIS_Core_ECLIC_Registers     Register Define and Type Definitions Of ECLIC\n * \\ingroup NMSIS_Core_Registers\n * \\brief   Type definitions and defines for eclic registers.\n *\n * @{\n */\n\n/**\n * \\brief  Union type to access CLICFG configure register.\n */\ntypedef union\n{\n    struct {\n        uint8_t _reserved0:1;                   /*!< bit:     0   Overflow condition code flag */\n        uint8_t nlbits:4;                       /*!< bit:     29  Carry condition code flag */\n        uint8_t _reserved1:2;                   /*!< bit:     30  Zero condition code flag */\n        uint8_t _reserved2:1;                   /*!< bit:     31  Negative condition code flag */\n    } b;                                        /*!< Structure used for bit  access */\n    uint8_t w;                                  /*!< Type      used for byte access */\n} CLICCFG_Type;\n\n/**\n * \\brief  Union type to access CLICINFO information register.\n */\ntypedef union {\n    struct {\n        uint32_t numint:13;                     /*!< bit:  0..12   number of maximum interrupt inputs supported */\n        uint32_t version:8;                     /*!< bit:  13..20  20:17 for architecture version,16:13 for implementation version */\n        uint32_t intctlbits:4;                  /*!< bit:  21..24  specifies how many hardware bits are actually implemented in the clicintctl registers */\n        uint32_t _reserved0:7;                  /*!< bit:  25..31  Reserved */\n    } b;                                        /*!< Structure used for bit  access */\n    uint32_t w;                                 /*!< Type      used for word access */\n} CLICINFO_Type;\n\n/**\n * \\brief Access to the structure of a vector interrupt controller.\n */\ntypedef struct {\n    __IOM uint8_t  INTIP;                       /*!< Offset: 0x000 (R/W)  Interrupt set pending register */\n    __IOM uint8_t  INTIE;                       /*!< Offset: 0x001 (R/W)  Interrupt set enable register */\n    __IOM uint8_t  INTATTR;                     /*!< Offset: 0x002 (R/W)  Interrupt set attributes register */\n    __IOM uint8_t  INTCTRL;                     /*!< Offset: 0x003 (R/W)  Interrupt configure register */\n} CLIC_CTRL_Type;\n\ntypedef struct {\n    __IOM uint8_t   CFG;                        /*!< Offset: 0x000 (R/W)  CLIC configuration register */\n    uint8_t RESERVED0[3];\n    __IM uint32_t  INFO;                        /*!< Offset: 0x004 (R/ )  CLIC information register */\n    uint8_t RESERVED1[3];\n    __IOM uint8_t  MTH;                         /*!< Offset: 0x00B (R/W)  CLIC machine mode threshold register */\n    uint32_t RESERVED2[0x3FD];\n    CLIC_CTRL_Type CTRL[4096];                  /*!< Offset: 0x1000 (R/W) CLIC register structure for INTIP, INTIE, INTATTR, INTCTL */\n} CLIC_Type;\n\n#define CLIC_CLICCFG_NLBIT_Pos                 1U                                       /*!< CLIC CLICCFG: NLBIT Position */\n#define CLIC_CLICCFG_NLBIT_Msk                 (0xFUL << CLIC_CLICCFG_NLBIT_Pos)        /*!< CLIC CLICCFG: NLBIT Mask */\n\n#define CLIC_CLICINFO_CTLBIT_Pos                21U                                     /*!< CLIC INTINFO: __ECLIC_GetInfoCtlbits() Position */\n#define CLIC_CLICINFO_CTLBIT_Msk                (0xFUL << CLIC_CLICINFO_CTLBIT_Pos)     /*!< CLIC INTINFO: __ECLIC_GetInfoCtlbits() Mask */\n\n#define CLIC_CLICINFO_VER_Pos                  13U                                      /*!< CLIC CLICINFO: VERSION Position */\n#define CLIC_CLICINFO_VER_Msk                  (0xFFUL << CLIC_CLICCFG_NLBIT_Pos)       /*!< CLIC CLICINFO: VERSION Mask */\n\n#define CLIC_CLICINFO_NUM_Pos                  0U                                       /*!< CLIC CLICINFO: NUM Position */\n#define CLIC_CLICINFO_NUM_Msk                  (0xFFFUL << CLIC_CLICINFO_NUM_Pos)       /*!< CLIC CLICINFO: NUM Mask */\n\n#define CLIC_INTIP_IP_Pos                      0U                                       /*!< CLIC INTIP: IP Position */\n#define CLIC_INTIP_IP_Msk                      (0x1UL << CLIC_INTIP_IP_Pos)             /*!< CLIC INTIP: IP Mask */\n\n#define CLIC_INTIE_IE_Pos                      0U                                       /*!< CLIC INTIE: IE Position */\n#define CLIC_INTIE_IE_Msk                      (0x1UL << CLIC_INTIE_IE_Pos)             /*!< CLIC INTIE: IE Mask */\n\n#define CLIC_INTATTR_TRIG_Pos                  1U                                       /*!< CLIC INTATTR: TRIG Position */\n#define CLIC_INTATTR_TRIG_Msk                  (0x3UL << CLIC_INTATTR_TRIG_Pos)         /*!< CLIC INTATTR: TRIG Mask */\n\n#define CLIC_INTATTR_SHV_Pos                   0U                                       /*!< CLIC INTATTR: SHV Position */\n#define CLIC_INTATTR_SHV_Msk                   (0x1UL << CLIC_INTATTR_SHV_Pos)          /*!< CLIC INTATTR: SHV Mask */\n\n#define ECLIC_MAX_NLBITS                       8U                                       /*!< Max nlbit of the CLICINTCTLBITS */\n#define ECLIC_MODE_MTVEC_Msk                   3U                                       /*!< ECLIC Mode mask for MTVT CSR Register */\n\n#define ECLIC_NON_VECTOR_INTERRUPT             0x0                                      /*!< Non-Vector Interrupt Mode of ECLIC */\n#define ECLIC_VECTOR_INTERRUPT                 0x1                                      /*!< Vector Interrupt Mode of ECLIC */\n\n/**\\brief ECLIC Trigger Enum for different Trigger Type */\ntypedef enum ECLIC_TRIGGER {\n    ECLIC_LEVEL_TRIGGER = 0x0,          /*!< Level Triggerred, trig[0] = 0 */\n    ECLIC_POSTIVE_EDGE_TRIGGER = 0x1,   /*!< Postive/Rising Edge Triggered, trig[0] = 1, trig[1] = 0 */\n    ECLIC_NEGTIVE_EDGE_TRIGGER = 0x3,   /*!< Negtive/Falling Edge Triggered, trig[0] = 1, trig[1] = 1 */\n    ECLIC_MAX_TRIGGER = 0x3             /*!< MAX Supported Trigger Mode */\n} ECLIC_TRIGGER_Type;\n\n#ifndef __ECLIC_BASEADDR\n/* Base address of ECLIC(__ECLIC_BASEADDR) should be defined in <Device.h> */\n#error \"__ECLIC_BASEADDR is not defined, please check!\"\n#endif\n\n#ifndef __ECLIC_INTCTLBITS\n/* Define __ECLIC_INTCTLBITS to get via ECLIC->INFO if not defined */\n#define __ECLIC_INTCTLBITS                  (__ECLIC_GetInfoCtlbits())\n#endif\n\n/* ECLIC Memory mapping of Device */\n#define ECLIC_BASE                          __ECLIC_BASEADDR                            /*!< ECLIC Base Address */\n#define ECLIC                               ((CLIC_Type *) ECLIC_BASE)                  /*!< CLIC configuration struct */\n\n/** @} */ /* end of group NMSIS_Core_ECLIC_Registers */\n\n/* ##########################   ECLIC functions  #################################### */\n/**\n * \\defgroup   NMSIS_Core_IntExc        Interrupts and Exceptions\n * \\brief Functions that manage interrupts and exceptions via the ECLIC.\n *\n * @{\n */\n\n/**\n * \\brief  Definition of IRQn numbers\n * \\details\n * The core interrupt enumeration names for IRQn values are defined in the file <b><Device>.h</b>.\n * - Interrupt ID(IRQn) from 0 to 18 are reserved for core internal interrupts.\n * - Interrupt ID(IRQn) start from 19 represent device-specific external interrupts.\n * - The first device-specific interrupt has the IRQn value 19.\n *\n * The table below describes the core interrupt names and their availability in various Nuclei Cores.\n */\n/* The following enum IRQn definition in this file\n * is only used for doxygen documentation generation,\n * The <Device>.h is the real file to define it by vendor\n */\n#if defined(__ONLY_FOR_DOXYGEN_DOCUMENT_GENERATION__)\ntypedef enum IRQn {\n    /* ========= Nuclei N/NX Core Specific Interrupt Numbers  =========== */\n    /* Core Internal Interrupt IRQn definitions */\n    Reserved0_IRQn            =   0,              /*!<  Internal reserved */\n    Reserved1_IRQn            =   1,              /*!<  Internal reserved */\n    Reserved2_IRQn            =   2,              /*!<  Internal reserved */\n    SysTimerSW_IRQn           =   3,              /*!<  System Timer SW interrupt */\n    Reserved3_IRQn            =   4,              /*!<  Internal reserved */\n    Reserved4_IRQn            =   5,              /*!<  Internal reserved */\n    Reserved5_IRQn            =   6,              /*!<  Internal reserved */\n    SysTimer_IRQn             =   7,              /*!<  System Timer Interrupt */\n    Reserved6_IRQn            =   8,              /*!<  Internal reserved */\n    Reserved7_IRQn            =   9,              /*!<  Internal reserved */\n    Reserved8_IRQn            =  10,              /*!<  Internal reserved */\n    Reserved9_IRQn            =  11,              /*!<  Internal reserved */\n    Reserved10_IRQn           =  12,              /*!<  Internal reserved */\n    Reserved11_IRQn           =  13,              /*!<  Internal reserved */\n    Reserved12_IRQn           =  14,              /*!<  Internal reserved */\n    Reserved13_IRQn           =  15,              /*!<  Internal reserved */\n    Reserved14_IRQn           =  16,              /*!<  Internal reserved */\n    Reserved15_IRQn           =  17,              /*!<  Internal reserved */\n    Reserved16_IRQn           =  18,              /*!<  Internal reserved */\n\n    /* ========= Device Specific Interrupt Numbers  =================== */\n    /* ToDo: add here your device specific external interrupt numbers.\n     * 19~max(NUM_INTERRUPT, 1023) is reserved number for user.\n     * Maxmum interrupt supported could get from clicinfo.NUM_INTERRUPT.\n     * According the interrupt handlers defined in startup_Device.S\n     * eg.: Interrupt for Timer#1       eclic_tim1_handler   ->   TIM1_IRQn */\n    FirstDeviceSpecificInterrupt_IRQn    = 19,    /*!< First Device Specific Interrupt */\n    SOC_INT_MAX,                                  /*!< Number of total interrupts */\n} IRQn_Type;\n#endif /* __ONLY_FOR_DOXYGEN_DOCUMENT_GENERATION__ */\n\n#ifdef NMSIS_ECLIC_VIRTUAL\n    #ifndef NMSIS_ECLIC_VIRTUAL_HEADER_FILE\n        #define NMSIS_ECLIC_VIRTUAL_HEADER_FILE \"nmsis_eclic_virtual.h\"\n    #endif\n    #include NMSIS_ECLIC_VIRTUAL_HEADER_FILE\n#else\n    #define ECLIC_SetCfgNlbits            __ECLIC_SetCfgNlbits\n    #define ECLIC_GetCfgNlbits            __ECLIC_GetCfgNlbits\n    #define ECLIC_GetInfoVer              __ECLIC_GetInfoVer\n    #define ECLIC_GetInfoCtlbits          __ECLIC_GetInfoCtlbits\n    #define ECLIC_GetInfoNum              __ECLIC_GetInfoNum\n    #define ECLIC_SetMth                  __ECLIC_SetMth\n    #define ECLIC_GetMth                  __ECLIC_GetMth\n    #define ECLIC_EnableIRQ               __ECLIC_EnableIRQ\n    #define ECLIC_GetEnableIRQ            __ECLIC_GetEnableIRQ\n    #define ECLIC_DisableIRQ              __ECLIC_DisableIRQ\n    #define ECLIC_SetPendingIRQ           __ECLIC_SetPendingIRQ\n    #define ECLIC_GetPendingIRQ           __ECLIC_GetPendingIRQ\n    #define ECLIC_ClearPendingIRQ         __ECLIC_ClearPendingIRQ\n    #define ECLIC_SetTrigIRQ              __ECLIC_SetTrigIRQ\n    #define ECLIC_GetTrigIRQ              __ECLIC_GetTrigIRQ\n    #define ECLIC_SetShvIRQ               __ECLIC_SetShvIRQ\n    #define ECLIC_GetShvIRQ               __ECLIC_GetShvIRQ\n    #define ECLIC_SetCtrlIRQ              __ECLIC_SetCtrlIRQ\n    #define ECLIC_GetCtrlIRQ              __ECLIC_GetCtrlIRQ\n    #define ECLIC_SetLevelIRQ             __ECLIC_SetLevelIRQ\n    #define ECLIC_GetLevelIRQ             __ECLIC_GetLevelIRQ\n    #define ECLIC_SetPriorityIRQ          __ECLIC_SetPriorityIRQ\n    #define ECLIC_GetPriorityIRQ          __ECLIC_GetPriorityIRQ\n\n#endif /* NMSIS_ECLIC_VIRTUAL */\n\n#ifdef NMSIS_VECTAB_VIRTUAL\n    #ifndef NMSIS_VECTAB_VIRTUAL_HEADER_FILE\n        #define NMSIS_VECTAB_VIRTUAL_HEADER_FILE \"nmsis_vectab_virtual.h\"\n    #endif\n    #include NMSIS_VECTAB_VIRTUAL_HEADER_FILE\n#else\n    #define ECLIC_SetVector              __ECLIC_SetVector\n    #define ECLIC_GetVector              __ECLIC_GetVector\n#endif  /* (NMSIS_VECTAB_VIRTUAL) */\n\n/**\n * \\brief  Set nlbits value\n * \\details\n * This function set the nlbits value of CLICCFG register.\n * \\param [in]    nlbits    nlbits value\n * \\remarks\n * - nlbits is used to set the width of level in the CLICINTCTL[i].\n * \\sa\n * - \\ref ECLIC_GetCfgNlbits\n */\n__STATIC_FORCEINLINE void __ECLIC_SetCfgNlbits(uint32_t nlbits)\n{\n    ECLIC->CFG &= ~CLIC_CLICCFG_NLBIT_Msk;\n    ECLIC->CFG |= (uint8_t)((nlbits <<CLIC_CLICCFG_NLBIT_Pos) & CLIC_CLICCFG_NLBIT_Msk);\n}\n\n/**\n * \\brief  Get nlbits value\n * \\details\n * This function get the nlbits value of CLICCFG register.\n * \\return   nlbits value of CLICCFG register\n * \\remarks\n * - nlbits is used to set the width of level in the CLICINTCTL[i].\n * \\sa\n * - \\ref ECLIC_SetCfgNlbits\n */\n__STATIC_FORCEINLINE uint32_t __ECLIC_GetCfgNlbits(void)\n{\n    return ((uint32_t)((ECLIC->CFG & CLIC_CLICCFG_NLBIT_Msk) >> CLIC_CLICCFG_NLBIT_Pos));\n}\n\n/**\n * \\brief  Get the ECLIC version number\n * \\details\n * This function gets the hardware version information from CLICINFO register.\n * \\return   hardware version number in CLICINFO register.\n * \\remarks\n * - This function gets harware version information from CLICINFO register.\n * - Bit 20:17 for architecture version, bit 16:13 for implementation version.\n * \\sa\n * - \\ref ECLIC_GetInfoNum\n*/\n__STATIC_FORCEINLINE uint32_t __ECLIC_GetInfoVer(void)\n{\n    return ((uint32_t)((ECLIC->INFO & CLIC_CLICINFO_VER_Msk) >> CLIC_CLICINFO_VER_Pos));\n}\n\n/**\n * \\brief  Get CLICINTCTLBITS\n * \\details\n * This function gets CLICINTCTLBITS from CLICINFO register.\n * \\return  CLICINTCTLBITS from CLICINFO register.\n * \\remarks\n * - In the CLICINTCTL[i] registers, with 2 <= CLICINTCTLBITS <= 8.\n * - The implemented bits are kept left-justified in the most-significant bits of each 8-bit\n *   CLICINTCTL[I] register, with the lower unimplemented bits treated as hardwired to 1.\n * \\sa\n * - \\ref ECLIC_GetInfoNum\n */\n__STATIC_FORCEINLINE uint32_t __ECLIC_GetInfoCtlbits(void)\n{\n    return ((uint32_t)((ECLIC->INFO & CLIC_CLICINFO_CTLBIT_Msk) >> CLIC_CLICINFO_CTLBIT_Pos));\n}\n\n/**\n * \\brief  Get number of maximum interrupt inputs supported\n * \\details\n * This function gets number of maximum interrupt inputs supported from CLICINFO register.\n * \\return  number of maximum interrupt inputs supported from CLICINFO register.\n * \\remarks\n * - This function gets number of maximum interrupt inputs supported from CLICINFO register.\n * - The num_interrupt field specifies the actual number of maximum interrupt inputs supported in this implementation.\n * \\sa\n * - \\ref ECLIC_GetInfoCtlbits\n */\n__STATIC_FORCEINLINE uint32_t __ECLIC_GetInfoNum(void)\n{\n    return ((uint32_t)((ECLIC->INFO & CLIC_CLICINFO_NUM_Msk) >> CLIC_CLICINFO_NUM_Pos));\n}\n\n/**\n * \\brief  Set Machine Mode Interrupt Level Threshold\n * \\details\n * This function sets machine mode interrupt level threshold.\n * \\param [in]  mth       Interrupt Level Threshold.\n * \\sa\n * - \\ref ECLIC_GetMth\n */\n__STATIC_FORCEINLINE void __ECLIC_SetMth(uint8_t mth)\n{\n    ECLIC->MTH = mth;\n}\n\n/**\n * \\brief  Get Machine Mode Interrupt Level Threshold\n * \\details\n * This function gets machine mode interrupt level threshold.\n * \\return       Interrupt Level Threshold.\n * \\sa\n * - \\ref ECLIC_SetMth\n */\n__STATIC_FORCEINLINE uint8_t __ECLIC_GetMth(void)\n{\n    return (ECLIC->MTH);\n}\n\n\n/**\n * \\brief  Enable a specific interrupt\n * \\details\n * This function enables the specific interrupt \\em IRQn.\n * \\param [in]  IRQn  Interrupt number\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_DisableIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_EnableIRQ(IRQn_Type IRQn)\n{\n    ECLIC->CTRL[IRQn].INTIE |= CLIC_INTIE_IE_Msk;\n}\n\n/**\n * \\brief  Get a specific interrupt enable status\n * \\details\n * This function returns the interrupt enable status for the specific interrupt \\em IRQn.\n * \\param [in]  IRQn  Interrupt number\n * \\returns\n * - 0  Interrupt is not enabled\n * - 1  Interrupt is pending\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_EnableIRQ\n * - \\ref ECLIC_DisableIRQ\n */\n__STATIC_FORCEINLINE uint32_t __ECLIC_GetEnableIRQ(IRQn_Type IRQn)\n{\n    return((uint32_t) (ECLIC->CTRL[IRQn].INTIE) & CLIC_INTIE_IE_Msk);\n}\n\n/**\n * \\brief  Disable a specific interrupt\n * \\details\n * This function disables the specific interrupt \\em IRQn.\n * \\param [in]  IRQn  Number of the external interrupt to disable\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_EnableIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_DisableIRQ(IRQn_Type IRQn)\n{\n    ECLIC->CTRL[IRQn].INTIE &= ~CLIC_INTIE_IE_Msk;\n}\n\n/**\n * \\brief  Get the pending specific interrupt\n * \\details\n * This function returns the pending status of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\returns\n * - 0  Interrupt is not pending\n * - 1  Interrupt is pending\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_SetPendingIRQ\n * - \\ref ECLIC_ClearPendingIRQ\n */\n__STATIC_FORCEINLINE int32_t __ECLIC_GetPendingIRQ(IRQn_Type IRQn)\n{\n    return((uint32_t)(ECLIC->CTRL[IRQn].INTIP) & CLIC_INTIP_IP_Msk);\n}\n\n/**\n * \\brief  Set a specific interrupt to pending\n * \\details\n * This function sets the pending bit for the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_GetPendingIRQ\n * - \\ref ECLIC_ClearPendingIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_SetPendingIRQ(IRQn_Type IRQn)\n{\n    ECLIC->CTRL[IRQn].INTIP |= CLIC_INTIP_IP_Msk;\n}\n\n/**\n * \\brief  Clear a specific interrupt from pending\n * \\details\n * This function removes the pending state of the specific interrupt \\em IRQn.\n * \\em IRQn cannot be a negative number.\n * \\param [in]      IRQn  Interrupt number\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_SetPendingIRQ\n * - \\ref ECLIC_GetPendingIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_ClearPendingIRQ(IRQn_Type IRQn)\n{\n    ECLIC->CTRL[IRQn].INTIP &= ~ CLIC_INTIP_IP_Msk;\n}\n\n/**\n * \\brief  Set trigger mode and polarity for a specific interrupt\n * \\details\n * This function set trigger mode and polarity of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\param [in]      trig\n *                   - 00  level trigger, \\ref ECLIC_LEVEL_TRIGGER\n *                   - 01  positive edge trigger, \\ref ECLIC_POSTIVE_EDGE_TRIGGER\n *                   - 02  level trigger, \\ref ECLIC_LEVEL_TRIGGER\n *                   - 03  negative edge trigger, \\ref ECLIC_NEGTIVE_EDGE_TRIGGER\n * \\remarks\n * - IRQn must not be negative.\n *\n * \\sa\n * - \\ref ECLIC_GetTrigIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_SetTrigIRQ(IRQn_Type IRQn, uint32_t trig)\n{\n    ECLIC->CTRL[IRQn].INTATTR &= ~CLIC_INTATTR_TRIG_Msk;\n    ECLIC->CTRL[IRQn].INTATTR |= (uint8_t)(trig<<CLIC_INTATTR_TRIG_Pos);\n}\n\n/**\n * \\brief  Get trigger mode and polarity for a specific interrupt\n * \\details\n * This function get trigger mode and polarity of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\return\n *                 - 00  level trigger, \\ref ECLIC_LEVEL_TRIGGER\n *                 - 01  positive edge trigger, \\ref ECLIC_POSTIVE_EDGE_TRIGGER\n *                 - 02  level trigger, \\ref ECLIC_LEVEL_TRIGGER\n *                 - 03  negative edge trigger, \\ref ECLIC_NEGTIVE_EDGE_TRIGGER\n * \\remarks\n *     - IRQn must not be negative.\n * \\sa\n *     - \\ref ECLIC_SetTrigIRQ\n */\n__STATIC_FORCEINLINE uint32_t __ECLIC_GetTrigIRQ(IRQn_Type IRQn)\n{\n    return ((int32_t)(((ECLIC->CTRL[IRQn].INTATTR) & CLIC_INTATTR_TRIG_Msk)>>CLIC_INTATTR_TRIG_Pos));\n}\n\n/**\n * \\brief  Set interrupt working mode for a specific interrupt\n * \\details\n * This function set selective hardware vector or non-vector working mode of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\param [in]      shv\n *                        - 0  non-vector mode, \\ref ECLIC_NON_VECTOR_INTERRUPT\n *                        - 1  vector mode, \\ref ECLIC_VECTOR_INTERRUPT\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_GetShvIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_SetShvIRQ(IRQn_Type IRQn, uint32_t shv)\n{\n    ECLIC->CTRL[IRQn].INTATTR &= ~CLIC_INTATTR_SHV_Msk;\n    ECLIC->CTRL[IRQn].INTATTR |= (uint8_t)(shv<<CLIC_INTATTR_SHV_Pos);\n}\n\n/**\n * \\brief  Get interrupt working mode for a specific interrupt\n * \\details\n * This function get selective hardware vector or non-vector working mode of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\return       shv\n *                        - 0  non-vector mode, \\ref ECLIC_NON_VECTOR_INTERRUPT\n *                        - 1  vector mode, \\ref ECLIC_VECTOR_INTERRUPT\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_SetShvIRQ\n */\n__STATIC_FORCEINLINE uint32_t __ECLIC_GetShvIRQ(IRQn_Type IRQn)\n{\n    return ((int32_t)(((ECLIC->CTRL[IRQn].INTATTR) & CLIC_INTATTR_SHV_Msk)>>CLIC_INTATTR_SHV_Pos));\n}\n\n/**\n * \\brief  Modify ECLIC Interrupt Input Control Register for a specific interrupt\n * \\details\n * This function modify ECLIC Interrupt Input Control(CLICINTCTL[i]) register of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\param [in]      intctrl  Set value for CLICINTCTL[i] register\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_GetCtrlIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_SetCtrlIRQ(IRQn_Type IRQn, uint8_t intctrl)\n{\n    ECLIC->CTRL[IRQn].INTCTRL = intctrl;\n}\n\n/**\n * \\brief  Get ECLIC Interrupt Input Control Register value for a specific interrupt\n * \\details\n * This function modify ECLIC Interrupt Input Control register of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\return       value of ECLIC Interrupt Input Control register\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_SetCtrlIRQ\n */\n__STATIC_FORCEINLINE uint8_t __ECLIC_GetCtrlIRQ(IRQn_Type IRQn)\n{\n    return (ECLIC->CTRL[IRQn].INTCTRL);\n}\n\n/**\n * \\brief  Set ECLIC Interrupt level of a specific interrupt\n * \\details\n * This function set interrupt level of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\param [in]      lvl_abs   Interrupt level\n * \\remarks\n * - IRQn must not be negative.\n * - If lvl_abs to be set is larger than the max level allowed, it will be force to be max level.\n * - When you set level value you need use clciinfo.nlbits to get the width of level.\n *   Then we could know the maximum of level. CLICINTCTLBITS is how many total bits are\n *   present in the CLICINTCTL register.\n * \\sa\n * - \\ref ECLIC_GetLevelIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_SetLevelIRQ(IRQn_Type IRQn, uint8_t lvl_abs)\n{\n    uint8_t nlbits = __ECLIC_GetCfgNlbits();\n    uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;\n\n    if (nlbits == 0) {\n        return;\n    }\n\n    if (nlbits > intctlbits) {\n        nlbits = intctlbits;\n    }\n    uint8_t maxlvl = ((1 << nlbits) - 1);\n    if (lvl_abs > maxlvl) {\n        lvl_abs = maxlvl;\n    }\n    uint8_t lvl = lvl_abs << (ECLIC_MAX_NLBITS - nlbits);\n    uint8_t cur_ctrl = __ECLIC_GetCtrlIRQ(IRQn);\n    cur_ctrl = cur_ctrl << nlbits;\n    cur_ctrl = cur_ctrl >> nlbits;\n    __ECLIC_SetCtrlIRQ(IRQn, (cur_ctrl | lvl));\n}\n\n/**\n * \\brief  Get ECLIC Interrupt level of a specific interrupt\n * \\details\n * This function get interrupt level of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\return         Interrupt level\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_SetLevelIRQ\n */\n__STATIC_FORCEINLINE uint8_t __ECLIC_GetLevelIRQ(IRQn_Type IRQn)\n{\n    uint8_t nlbits = __ECLIC_GetCfgNlbits();\n    uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;\n\n    if (nlbits == 0) {\n        return 0;\n    }\n\n    if (nlbits > intctlbits) {\n        nlbits = intctlbits;\n    }\n    uint8_t intctrl = __ECLIC_GetCtrlIRQ(IRQn);\n    uint8_t lvl_abs = intctrl >> (ECLIC_MAX_NLBITS - nlbits);\n    return lvl_abs;\n}\n\n/**\n * \\brief  Get ECLIC Interrupt priority of a specific interrupt\n * \\details\n * This function get interrupt priority of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\param [in]      pri   Interrupt priority\n * \\remarks\n * - IRQn must not be negative.\n * - If pri to be set is larger than the max priority allowed, it will be force to be max priority.\n * - Priority width is CLICINTCTLBITS minus clciinfo.nlbits if clciinfo.nlbits\n *   is less than CLICINTCTLBITS. Otherwise priority width is 0.\n * \\sa\n * - \\ref ECLIC_GetPriorityIRQ\n */\n__STATIC_FORCEINLINE void __ECLIC_SetPriorityIRQ(IRQn_Type IRQn, uint8_t pri)\n{\n    uint8_t nlbits = __ECLIC_GetCfgNlbits();\n    uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;\n    if (nlbits < intctlbits) {\n        uint8_t maxpri = ((1 << (intctlbits - nlbits)) - 1);\n        if (pri > maxpri) {\n            pri = maxpri;\n        }\n        pri = pri << (ECLIC_MAX_NLBITS - intctlbits);\n        uint8_t mask = ((uint8_t)(-1)) >> intctlbits;\n        pri = pri | mask;\n        uint8_t cur_ctrl = __ECLIC_GetCtrlIRQ(IRQn);\n        cur_ctrl = cur_ctrl >> (ECLIC_MAX_NLBITS - nlbits);\n        cur_ctrl = cur_ctrl << (ECLIC_MAX_NLBITS - nlbits);\n        __ECLIC_SetCtrlIRQ(IRQn, (cur_ctrl | pri));\n    }\n}\n\n/**\n * \\brief  Get ECLIC Interrupt priority of a specific interrupt\n * \\details\n * This function get interrupt priority of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\return   Interrupt priority\n * \\remarks\n * - IRQn must not be negative.\n * \\sa\n * - \\ref ECLIC_SetPriorityIRQ\n */\n__STATIC_FORCEINLINE uint8_t __ECLIC_GetPriorityIRQ(IRQn_Type IRQn)\n{\n    uint8_t nlbits = __ECLIC_GetCfgNlbits();\n    uint8_t intctlbits = (uint8_t)__ECLIC_INTCTLBITS;\n    if (nlbits < intctlbits) {\n        uint8_t cur_ctrl = __ECLIC_GetCtrlIRQ(IRQn);\n        uint8_t pri = cur_ctrl << nlbits;\n        pri = pri >> nlbits;\n        pri = pri >> (ECLIC_MAX_NLBITS - intctlbits);\n        return pri;\n    } else {\n        return 0;\n    }\n}\n\n/**\n * \\brief  Set Interrupt Vector of a specific interrupt\n * \\details\n * This function set interrupt handler address of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\param [in]      vector   Interrupt handler address\n * \\remarks\n * - IRQn must not be negative.\n * - You can set the \\ref CSR_CSR_MTVT to set interrupt vector table entry address.\n * - If your vector table is placed in readonly section, the vector for IRQn will not be modified.\n *   For this case, you need to use the correct irq handler name defined in your vector table as\n *   your irq handler function name.\n * - This function will only work correctly when the vector table is placed in an read-write enabled section.\n * \\sa\n * - \\ref ECLIC_GetVector\n */\n__STATIC_FORCEINLINE void __ECLIC_SetVector(IRQn_Type IRQn, rv_csr_t vector)\n{\n#if __RISCV_XLEN == 32\n    volatile uint32_t vec_base;\n    vec_base = ((uint32_t)__RV_CSR_READ(CSR_MTVT));\n    (* (unsigned long *) (vec_base + ((int32_t)IRQn) * 4)) = vector;\n#elif __RISCV_XLEN == 64\n    volatile uint64_t vec_base;\n    vec_base = ((uint64_t)__RV_CSR_READ(CSR_MTVT));\n    (* (unsigned long *) (vec_base + ((int32_t)IRQn) * 8)) = vector;\n#else // TODO Need cover for XLEN=128 case in future\n    volatile uint64_t vec_base;\n    vec_base = ((uint64_t)__RV_CSR_READ(CSR_MTVT));\n    (* (unsigned long *) (vec_base + ((int32_t)IRQn) * 8)) = vector;\n#endif\n}\n\n/**\n * \\brief  Get Interrupt Vector of a specific interrupt\n * \\details\n * This function get interrupt handler address of the specific interrupt \\em IRQn.\n * \\param [in]      IRQn  Interrupt number\n * \\return        Interrupt handler address\n * \\remarks\n * - IRQn must not be negative.\n * - You can read \\ref CSR_CSR_MTVT to get interrupt vector table entry address.\n * \\sa\n *     - \\ref ECLIC_SetVector\n */\n__STATIC_FORCEINLINE rv_csr_t __ECLIC_GetVector(IRQn_Type IRQn)\n{\n#if __RISCV_XLEN == 32\n    return (*(uint32_t *)(__RV_CSR_READ(CSR_MTVT)+IRQn*4));\n#elif __RISCV_XLEN == 64\n    return (*(uint64_t *)(__RV_CSR_READ(CSR_MTVT)+IRQn*8));\n#else // TODO Need cover for XLEN=128 case in future\n    return (*(uint64_t *)(__RV_CSR_READ(CSR_MTVT)+IRQn*8));\n#endif\n}\n\n/**\n * \\brief  Set Exception entry address\n * \\details\n * This function set exception handler address to 'CSR_MTVEC'.\n * \\param [in]      addr  Exception handler address\n * \\remarks\n * - This function use to set exception handler address to 'CSR_MTVEC'. Address is 4 bytes align.\n * \\sa\n * - \\ref __get_exc_entry\n */\n__STATIC_FORCEINLINE void __set_exc_entry(rv_csr_t addr)\n{\n    addr &= (rv_csr_t)(~0x3F);\n    addr |= ECLIC_MODE_MTVEC_Msk;\n    __RV_CSR_WRITE(CSR_MTVEC, addr);\n}\n\n/**\n * \\brief  Get Exception entry address\n * \\details\n * This function get exception handler address from 'CSR_MTVEC'.\n * \\return       Exception handler address\n * \\remarks\n * - This function use to get exception handler address from 'CSR_MTVEC'. Address is 4 bytes align\n * \\sa\n * - \\ref __set_exc_entry\n */\n__STATIC_FORCEINLINE rv_csr_t __get_exc_entry(void)\n{\n    unsigned long addr = __RV_CSR_READ(CSR_MTVEC);\n    return (addr & ~ECLIC_MODE_MTVEC_Msk);\n}\n\n/**\n * \\brief  Set Non-vector interrupt entry address\n * \\details\n * This function set Non-vector interrupt address.\n * \\param [in]      addr  Non-vector interrupt entry address\n * \\remarks\n * - This function use to set non-vector interrupt entry address to 'CSR_MTVT2' if\n * - CSR_MTVT2 bit0 is 1. If 'CSR_MTVT2' bit0 is 0 then set address to 'CSR_MTVEC'\n * \\sa\n * - \\ref __get_nonvec_entry\n */\n__STATIC_FORCEINLINE void __set_nonvec_entry(rv_csr_t addr)\n{\n    if (__RV_CSR_READ(CSR_MTVT2) & 0x1){\n        __RV_CSR_WRITE(CSR_MTVT2, addr | 0x01);\n    } else {\n        addr &= (rv_csr_t)(~0x3F);\n        addr |= ECLIC_MODE_MTVEC_Msk;\n        __RV_CSR_WRITE(CSR_MTVEC, addr);\n    }\n}\n\n/**\n * \\brief  Get Non-vector interrupt entry address\n * \\details\n * This function get Non-vector interrupt address.\n * \\return      Non-vector interrupt handler address\n * \\remarks\n * - This function use to get non-vector interrupt entry address from 'CSR_MTVT2' if\n * - CSR_MTVT2 bit0 is 1. If 'CSR_MTVT2' bit0 is 0 then get address from 'CSR_MTVEC'.\n * \\sa\n * - \\ref __set_nonvec_entry\n */\n__STATIC_FORCEINLINE rv_csr_t __get_nonvec_entry(void)\n{\n    if (__RV_CSR_READ(CSR_MTVT2) & 0x1) {\n        return __RV_CSR_READ(CSR_MTVT2) & (~(rv_csr_t)(0x1));\n    } else {\n        rv_csr_t addr = __RV_CSR_READ(CSR_MTVEC);\n        return (addr & ~ECLIC_MODE_MTVEC_Msk);\n    }\n}\n\n/**\n * \\brief  Get NMI interrupt entry from 'CSR_MNVEC'\n * \\details\n * This function get NMI interrupt address from 'CSR_MNVEC'.\n * \\return      NMI interrupt handler address\n * \\remarks\n * - This function use to get NMI interrupt handler address from 'CSR_MNVEC'. If CSR_MMISC_CTL[9] = 1 'CSR_MNVEC'\n * - will be equal as mtvec. If CSR_MMISC_CTL[9] = 0 'CSR_MNVEC' will be equal as reset vector.\n * - NMI entry is defined via \\ref CSR_MMISC_CTL, writing to \\ref CSR_MNVEC will be ignored.\n */\n__STATIC_FORCEINLINE rv_csr_t __get_nmi_entry(void)\n{\n    return __RV_CSR_READ(CSR_MNVEC);\n}\n\n/**\n * \\brief   Save necessary CSRs into variables for vector interrupt nesting\n * \\details\n * This macro is used to declare variables which are used for saving\n * CSRs(MCAUSE, MEPC, MSUB), and it will read these CSR content into\n * these variables, it need to be used in a vector-interrupt if nesting\n * is required.\n * \\remarks\n * - Interrupt will be enabled after this macro is called\n * - It need to be used together with \\ref RESTORE_IRQ_CSR_CONTEXT\n * - Don't use variable names __mcause, __mpec, __msubm in your ISR code\n * - If you want to enable interrupt nesting feature for vector interrupt,\n * you can do it like this:\n * \\code\n * // __INTERRUPT attribute will generates function entry and exit sequences suitable\n * // for use in an interrupt handler when this attribute is present\n * __INTERRUPT void eclic_mtip_handler(void)\n * {\n *     // Must call this to save CSRs\n *     SAVE_IRQ_CSR_CONTEXT();\n *     // !!!Interrupt is enabled here!!!\n *     // !!!Higher priority interrupt could nest it!!!\n *\n *     // put you own interrupt handling code here\n *\n *     // Must call this to restore CSRs\n *     RESTORE_IRQ_CSR_CONTEXT();\n * }\n * \\endcode\n */\n#define SAVE_IRQ_CSR_CONTEXT()                                              \\\n        rv_csr_t __mcause = __RV_CSR_READ(CSR_MCAUSE);                      \\\n        rv_csr_t __mepc = __RV_CSR_READ(CSR_MEPC);                          \\\n        rv_csr_t __msubm = __RV_CSR_READ(CSR_MSUBM);                        \\\n        __enable_irq();\n\n/**\n * \\brief   Restore necessary CSRs from variables for vector interrupt nesting\n * \\details\n * This macro is used restore CSRs(MCAUSE, MEPC, MSUB) from pre-defined variables\n * in \\ref SAVE_IRQ_CSR_CONTEXT macro.\n * \\remarks\n * - Interrupt will be disabled after this macro is called\n * - It need to be used together with \\ref SAVE_IRQ_CSR_CONTEXT\n */\n#define RESTORE_IRQ_CSR_CONTEXT()                                           \\\n        __disable_irq();                                                    \\\n        __RV_CSR_WRITE(CSR_MSUBM, __msubm);                                 \\\n        __RV_CSR_WRITE(CSR_MEPC, __mepc);                                   \\\n        __RV_CSR_WRITE(CSR_MCAUSE, __mcause);\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_IntExc */\n\n#endif /* defined(__ECLIC_PRESENT) && (__ECLIC_PRESENT == 1) */\n\n#ifdef __cplusplus\n}\n#endif\n#endif /** __CORE_FEATURE_ECLIC__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/nmsis/core/inc/core_feature_fpu.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __CORE_FEATURE_FPU_H__\n#define __CORE_FEATURE_FPU_H__\n/*!\n * @file     core_feature_fpu.h\n * @brief    FPU feature API header file for Nuclei N/NX Core\n */\n/*\n * FPU Feature Configuration Macro:\n * 1. __FPU_PRESENT:  Define whether Floating Point Unit(FPU) is present or not\n *   * 0: Not present\n *   * 1: Single precision FPU present, __RISCV_FLEN == 32\n *   * 2: Double precision FPU present, __RISCV_FLEN == 64\n */\n#ifdef __cplusplus\n extern \"C\" {\n#endif\n\n/* ===== FPU Operations ===== */\n/**\n * \\defgroup NMSIS_Core_FPU_Functions   FPU Functions\n * \\ingroup  NMSIS_Core\n * \\brief    Functions that related to the RISC-V FPU (F and D extension).\n * \\details\n *\n * Nuclei provided floating point unit by RISC-V F and D extension.\n * * `F extension` adds single-precision floating-point computational\n * instructions compliant with the IEEE 754-2008 arithmetic standard, __RISCV_FLEN = 32.\n *   The F extension adds 32 floating-point registers, f0-f31, each 32 bits wide,\n *   and a floating-point control and status register fcsr, which contains the\n *   operating mode and exception status of the floating-point unit.\n * * `D extension` adds double-precision floating-point computational instructions\n * compliant with the IEEE 754-2008 arithmetic standard.\n *   The D extension widens the 32 floating-point registers, f0-f31, to 64 bits, __RISCV_FLEN = 64\n *   @{\n */\n#if defined(__FPU_PRESENT) && (__FPU_PRESENT > 0)\n\n#if __FPU_PRESENT == 1\n  /** \\brief Refer to the width of the floating point register in bits(either 32 or 64) */\n  #define __RISCV_FLEN          32\n#elif __FPU_PRESENT == 2\n  #define __RISCV_FLEN          64\n#else\n  #define __RISCV_FLEN          __riscv_flen\n#endif /* __FPU_PRESENT == 1 */\n\n/** \\brief Get FCSR CSR Register */\n#define __get_FCSR()            __RV_CSR_READ(CSR_FCSR)\n/** \\brief Set FCSR CSR Register with val */\n#define __set_FCSR(val)         __RV_CSR_WRITE(CSR_FCSR, (val))\n/** \\brief Get FRM CSR Register */\n#define __get_FRM()             __RV_CSR_READ(CSR_FRM)\n/** \\brief Set FRM CSR Register with val */\n#define __set_FRM(val)          __RV_CSR_WRITE(CSR_FRM, (val))\n/** \\brief Get FFLAGS CSR Register */\n#define __get_FFLAGS()          __RV_CSR_READ(CSR_FFLAGS)\n/** \\brief Set FFLAGS CSR Register with val */\n#define __set_FFLAGS(val)       __RV_CSR_WRITE(CSR_FFLAGS, (val))\n\n/** \\brief Enable FPU Unit */\n#define __enable_FPU()          __RV_CSR_SET(CSR_MSTATUS, MSTATUS_FS)\n/**\n * \\brief Disable FPU Unit\n * \\details\n * * We can save power by disable FPU Unit.\n * * When FPU Unit is disabled, any access to FPU related CSR registers\n * and FPU instructions will cause illegal Instuction Exception.\n * */\n#define __disable_FPU()         __RV_CSR_CLEAR(CSR_MSTATUS, MSTATUS_FS)\n\n\n/**\n * \\brief   Load a single-precision value from memory into float point register freg using flw instruction\n * \\details The FLW instruction loads a single-precision floating point value from memory\n * address (addr + ofs) into floating point register freg(f0-f31)\n * \\param [in]    freg   The floating point register, eg. FREG(0), f0\n * \\param [in]    addr   The memory base address, 4 byte aligned required\n * \\param [in]    ofs    a 12-bit immediate signed byte offset value, should be an const value\n * \\remarks\n * * FLW and FSW operations need to make sure the address is 4 bytes aligned,\n *   otherwise it will cause exception code 4(Load address misaligned) or 6 (Store/AMO address misaligned)\n * * FLW and FSW do not modify the bits being transferred; in particular, the payloads of non-canonical\n * NaNs are preserved\n *\n */\n#define __RV_FLW(freg, addr, ofs)                              \\\n    ({                                                         \\\n        register rv_csr_t __addr = (rv_csr_t)(addr);           \\\n        __ASM volatile(\"flw \" STRINGIFY(freg) \", %0(%1)  \"     \\\n                     : : \"I\"(ofs), \"r\"(__addr)                 \\\n                     : \"memory\");                              \\\n    })\n\n/**\n * \\brief   Store a single-precision value from float point freg into memory using fsw instruction\n * \\details The FSW instruction stores a single-precision value from floating point register to memory\n * \\param [in]    freg   The floating point register(f0-f31), eg. FREG(0), f0\n * \\param [in]    addr   The memory base address, 4 byte aligned required\n * \\param [in]    ofs    a 12-bit immediate signed byte offset value, should be an const value\n * \\remarks\n * * FLW and FSW operations need to make sure the address is 4 bytes aligned,\n *   otherwise it will cause exception code 4(Load address misaligned) or 6 (Store/AMO address misaligned)\n * * FLW and FSW do not modify the bits being transferred; in particular, the payloads of non-canonical\n * NaNs are preserved\n *\n */\n#define __RV_FSW(freg, addr, ofs)                              \\\n    ({                                                         \\\n        register rv_csr_t __addr = (rv_csr_t)(addr);           \\\n        __ASM volatile(\"fsw \" STRINGIFY(freg) \", %0(%1)  \"     \\\n                     : : \"I\"(ofs), \"r\"(__addr)                 \\\n                     : \"memory\");                              \\\n    })\n\n/**\n * \\brief   Load a double-precision value from memory into float point register freg using fld instruction\n * \\details The FLD instruction loads a double-precision floating point value from memory\n * address (addr + ofs) into floating point register freg(f0-f31)\n * \\param [in]    freg   The floating point register, eg. FREG(0), f0\n * \\param [in]    addr   The memory base address, 8 byte aligned required\n * \\param [in]    ofs    a 12-bit immediate signed byte offset value, should be an const value\n * \\attention\n * * Function only available for double precision floating point unit, FLEN = 64\n * \\remarks\n * * FLD and FSD operations need to make sure the address is 8 bytes aligned,\n *   otherwise it will cause exception code 4(Load address misaligned) or 6 (Store/AMO address misaligned)\n * * FLD and FSD do not modify the bits being transferred; in particular, the payloads of non-canonical\n * NaNs are preserved.\n */\n#define __RV_FLD(freg, addr, ofs)                              \\\n    ({                                                         \\\n        register rv_csr_t __addr = (rv_csr_t)(addr);           \\\n        __ASM volatile(\"fld \" STRINGIFY(freg) \", %0(%1)  \"     \\\n                     : : \"I\"(ofs), \"r\"(__addr)                 \\\n                     : \"memory\");                              \\\n    })\n\n/**\n * \\brief   Store a double-precision value from float point freg into memory using fsd instruction\n * \\details The FSD instruction stores double-precision value from floating point register to memory\n * \\param [in]    freg   The floating point register(f0-f31), eg. FREG(0), f0\n * \\param [in]    addr   The memory base address, 8 byte aligned required\n * \\param [in]    ofs    a 12-bit immediate signed byte offset value, should be an const value\n * \\attention\n * * Function only available for double precision floating point unit, FLEN = 64\n * \\remarks\n * * FLD and FSD operations need to make sure the address is 8 bytes aligned,\n *   otherwise it will cause exception code 4(Load address misaligned) or 6 (Store/AMO address misaligned)\n * * FLD and FSD do not modify the bits being transferred; in particular, the payloads of non-canonical\n * NaNs are preserved.\n *\n */\n#define __RV_FSD(freg, addr, ofs)                              \\\n    ({                                                         \\\n        register rv_csr_t __addr = (rv_csr_t)(addr);           \\\n        __ASM volatile(\"fsd \" STRINGIFY(freg) \", %0(%1)  \"     \\\n                     : : \"I\"(ofs), \"r\"(__addr)                 \\\n                     : \"memory\");                              \\\n    })\n\n/**\n * \\def __RV_FLOAD\n * \\brief   Load a float point value from memory into float point register freg using flw/fld instruction\n * \\details\n * * For Single-Precison Floating-Point Mode(__FPU_PRESENT == 1, __RISCV_FLEN == 32):\n *   It will call \\ref __RV_FLW to load a single-precision floating point value from memory to floating point register\n * * For Double-Precison Floating-Point Mode(__FPU_PRESENT == 2, __RISCV_FLEN == 64):\n *   It will call \\ref __RV_FLD to load a double-precision floating point value from memory to floating point register\n *\n * \\attention\n * Function behaviour is different for __FPU_PRESENT = 1 or 2, please see the real function this macro represent\n */\n/**\n * \\def __RV_FSTORE\n * \\brief   Store a float value from float point freg into memory using fsw/fsd instruction\n * \\details\n * * For Single-Precison Floating-Point Mode(__FPU_PRESENT == 1, __RISCV_FLEN == 32):\n *   It will call \\ref __RV_FSW to store floating point register into memory\n * * For Double-Precison Floating-Point Mode(__FPU_PRESENT == 2, __RISCV_FLEN == 64):\n *   It will call \\ref __RV_FSD to store floating point register into memory\n *\n * \\attention\n * Function behaviour is different for __FPU_PRESENT = 1 or 2, please see the real function this macro represent\n */\n#if __FPU_PRESENT == 1\n#define __RV_FLOAD              __RV_FLW\n#define __RV_FSTORE             __RV_FSW\n/** \\brief Type of FPU register, depends on the FLEN defined in RISC-V */\ntypedef uint32_t rv_fpu_t;\n#elif __FPU_PRESENT == 2\n#define __RV_FLOAD              __RV_FLD\n#define __RV_FSTORE             __RV_FSD\n/** \\brief Type of FPU register, depends on the FLEN defined in RISC-V */\ntypedef uint64_t rv_fpu_t;\n#endif /* __FPU_PRESENT == 2 */\n\n/**\n * \\brief   Save FPU context into variables for interrupt nesting\n * \\details\n * This macro is used to declare variables which are used for saving\n * FPU context, and it will store the nessary fpu registers into\n * these variables, it need to be used in a interrupt when in this\n * interrupt fpu registers are used.\n * \\remarks\n * - It need to be used together with \\ref RESTORE_FPU_CONTEXT\n * - Don't use variable names __fpu_context in your ISR code\n * - If you isr code will use fpu registers, and this interrupt is nested.\n * Then you can do it like this:\n * \\code\n * void eclic_mtip_handler(void)\n * {\n *     // !!!Interrupt is enabled here!!!\n *     // !!!Higher priority interrupt could nest it!!!\n *\n *     // Necessary only when you need to use fpu registers\n *     // in this isr handler functions\n *     SAVE_FPU_CONTEXT();\n *\n *     // put you own interrupt handling code here\n *\n *     // pair of SAVE_FPU_CONTEXT()\n *     RESTORE_FPU_CONTEXT();\n * }\n * \\endcode\n */\n#define SAVE_FPU_CONTEXT()                                                  \\\n        rv_fpu_t __fpu_context[20];                                         \\\n        __RV_FSTORE(FREG(0),  __fpu_context, 0  << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(1),  __fpu_context, 1  << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(2),  __fpu_context, 2  << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(3),  __fpu_context, 3  << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(4),  __fpu_context, 4  << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(5),  __fpu_context, 5  << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(6),  __fpu_context, 6  << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(7),  __fpu_context, 7  << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(10), __fpu_context, 8  << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(11), __fpu_context, 9  << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(12), __fpu_context, 10 << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(13), __fpu_context, 11 << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(14), __fpu_context, 12 << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(15), __fpu_context, 13 << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(16), __fpu_context, 14 << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(17), __fpu_context, 15 << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(28), __fpu_context, 16 << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(29), __fpu_context, 17 << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(30), __fpu_context, 18 << LOG_FPREGBYTES);         \\\n        __RV_FSTORE(FREG(31), __fpu_context, 19 << LOG_FPREGBYTES);\n\n/**\n * \\brief   Restore necessary fpu registers from variables for interrupt nesting\n * \\details\n * This macro is used restore necessary fpu registers from pre-defined variables\n * in \\ref SAVE_FPU_CONTEXT macro.\n * \\remarks\n * - It need to be used together with \\ref SAVE_FPU_CONTEXT\n */\n#define RESTORE_FPU_CONTEXT()                                               \\\n        __RV_FLOAD(FREG(0),  __fpu_context, 0  << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(1),  __fpu_context, 1  << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(2),  __fpu_context, 2  << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(3),  __fpu_context, 3  << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(4),  __fpu_context, 4  << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(5),  __fpu_context, 5  << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(6),  __fpu_context, 6  << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(7),  __fpu_context, 7  << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(10), __fpu_context, 8  << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(11), __fpu_context, 9  << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(12), __fpu_context, 10 << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(13), __fpu_context, 11 << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(14), __fpu_context, 12 << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(15), __fpu_context, 13 << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(16), __fpu_context, 14 << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(17), __fpu_context, 15 << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(28), __fpu_context, 16 << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(29), __fpu_context, 17 << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(30), __fpu_context, 18 << LOG_FPREGBYTES);          \\\n        __RV_FLOAD(FREG(31), __fpu_context, 19 << LOG_FPREGBYTES);\n#else\n#define SAVE_FPU_CONTEXT()\n#define RESTORE_FPU_CONTEXT()\n#endif /* __FPU_PRESENT > 0 */\n/** @} */ /* End of Doxygen Group NMSIS_Core_FPU_Functions */\n\n#ifdef __cplusplus\n}\n#endif\n#endif /** __RISCV_EXT_FPU_H__  */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/nmsis/core/inc/core_feature_pmp.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __CORE_FEATURE_PMP_H__\n#define __CORE_FEATURE_PMP_H__\n/*!\n * @file     core_feature_pmp.h\n * @brief    PMP feature API header file for Nuclei N/NX Core\n */\n/*\n * PMP Feature Configuration Macro:\n * 1. __PMP_PRESENT:  Define whether Physical Memory Protection(PMP) is present or not\n *   * 0: Not present\n *   * 1: Present\n * 2. __PMP_ENTRY_NUM:  Define the number of PMP entries, only 8 or 16 is configurable.\n */\n#ifdef __cplusplus\n extern \"C\" {\n#endif\n\n#if defined(__PMP_PRESENT) && (__PMP_PRESENT == 1)\n/* ===== PMP Operations ===== */\n/**\n * \\defgroup NMSIS_Core_PMP_Functions   PMP Functions\n * \\ingroup  NMSIS_Core\n * \\brief    Functions that related to the RISCV Phyiscal Memory Protection.\n * \\details\n * Optional physical memory protection (PMP) unit provides per-hart machine-mode\n * control registers to allow physical memory access privileges (read, write, execute)\n * to be specified for each physical memory region.\n *\n * The PMP can supports region access control settings as small as four bytes.\n *\n *   @{\n */\n#ifndef __PMP_ENTRY_NUM\n/* numbers of PMP entries(__PMP_ENTRY_NUM) should be defined in <Device.h> */\n#error \"__PMP_ENTRY_NUM is not defined, please check!\"\n#endif\n\n/**\n * \\brief   Get 8bit PMPxCFG Register by PMP entry index\n * \\details Return the content of the PMPxCFG Register.\n * \\param [in]    idx    PMP region index(0-15)\n * \\return               PMPxCFG Register value\n */\n__STATIC_INLINE uint8_t __get_PMPxCFG(uint32_t idx)\n{\n    rv_csr_t pmpcfg = 0;\n\n    if (idx >= __PMP_ENTRY_NUM) return 0;\n#if __RISCV_XLEN == 32\n    if (idx < 4) {\n        pmpcfg = __RV_CSR_READ(CSR_PMPCFG0);\n    } else if ((idx >=4) && (idx < 8)) {\n        idx -= 4;\n        pmpcfg = __RV_CSR_READ(CSR_PMPCFG1);\n    } else if ((idx >=8) && (idx < 12)) {\n        idx -= 8;\n        pmpcfg = __RV_CSR_READ(CSR_PMPCFG2);\n    } else {\n        idx -= 12;\n        pmpcfg = __RV_CSR_READ(CSR_PMPCFG3);\n    }\n\n    idx = idx << 3;\n    return (uint8_t)((pmpcfg>>idx) & 0xFF);\n#elif __RISCV_XLEN == 64\n    if (idx < 8) {\n        pmpcfg = __RV_CSR_READ(CSR_PMPCFG0);\n    } else {\n        idx -= 8;\n        pmpcfg = __RV_CSR_READ(CSR_PMPCFG2);\n    }\n    idx = idx << 3;\n    return (uint8_t)((pmpcfg>>idx) & 0xFF);\n#else\n    // TODO Add RV128 Handling\n    return 0;\n#endif\n}\n\n/**\n * \\brief   Set 8bit PMPxCFG by pmp entry index\n * \\details Set the given pmpxcfg value to the PMPxCFG Register.\n * \\param [in]    idx      PMPx region index(0-15)\n * \\param [in]    pmpxcfg  PMPxCFG register value to set\n */\n__STATIC_INLINE void __set_PMPxCFG(uint32_t idx, uint8_t pmpxcfg)\n{\n    rv_csr_t pmpcfgx = 0;\n    if (idx >= __PMP_ENTRY_NUM) return;\n\n#if __RISCV_XLEN == 32\n    if (idx < 4) {\n        pmpcfgx = __RV_CSR_READ(CSR_PMPCFG0);\n        idx = idx << 3;\n        pmpcfgx = (pmpcfgx & ~(0xFFUL << idx)) | ((rv_csr_t)pmpxcfg << idx);\n        __RV_CSR_WRITE(CSR_PMPCFG0, pmpcfgx);\n    } else if ((idx >=4) && (idx < 8)) {\n        idx -= 4;\n        pmpcfgx = __RV_CSR_READ(CSR_PMPCFG1);\n        idx = idx << 3;\n        pmpcfgx = (pmpcfgx & ~(0xFFUL << idx)) | ((rv_csr_t)pmpxcfg << idx);\n        __RV_CSR_WRITE(CSR_PMPCFG1, pmpcfgx);\n    } else if ((idx >=8) && (idx < 12)) {\n        idx -= 8;\n        pmpcfgx = __RV_CSR_READ(CSR_PMPCFG2);\n        idx = idx << 3;\n        pmpcfgx = (pmpcfgx & ~(0xFFUL << idx)) | ((rv_csr_t)pmpxcfg << idx);\n        __RV_CSR_WRITE(CSR_PMPCFG2, pmpcfgx);\n    } else {\n        idx -= 12;\n        pmpcfgx = __RV_CSR_READ(CSR_PMPCFG3);\n        idx = idx << 3;\n        pmpcfgx = (pmpcfgx & ~(0xFFUL << idx)) | ((rv_csr_t)pmpxcfg << idx);\n        __RV_CSR_WRITE(CSR_PMPCFG3, pmpcfgx);\n    }\n#elif __RISCV_XLEN == 64\n    if (idx < 8) {\n        pmpcfgx = __RV_CSR_READ(CSR_PMPCFG0);\n        idx = idx << 3;\n        pmpcfgx = (pmpcfgx & ~(0xFFULL << idx)) | ((rv_csr_t)pmpxcfg << idx);\n        __RV_CSR_WRITE(CSR_PMPCFG0, pmpcfgx);\n    } else {\n        idx -= 8;\n        pmpcfgx = __RV_CSR_READ(CSR_PMPCFG2);\n        idx = idx << 3;\n        pmpcfgx = (pmpcfgx & ~(0xFFULL << idx)) | ((rv_csr_t)pmpxcfg << idx);\n        __RV_CSR_WRITE(CSR_PMPCFG2, pmpcfgx);\n    }\n#else\n    // TODO Add RV128 Handling\n#endif\n}\n\n/**\n * \\brief   Get PMPCFGx Register by index\n * \\details Return the content of the PMPCFGx Register.\n * \\param [in]    idx    PMPCFG CSR index(0-3)\n * \\return               PMPCFGx Register value\n * \\remark\n * - For RV64, only idx = 0 and idx = 2 is allowed.\n *   pmpcfg0 and pmpcfg2 hold the configurations\n *   for the 16 PMP entries, pmpcfg1 and pmpcfg3 are illegal\n * - For RV32, pmpcfg0–pmpcfg3, hold the configurations\n *   pmp0cfg–pmp15cfg for the 16 PMP entries\n */\n__STATIC_INLINE rv_csr_t __get_PMPCFGx(uint32_t idx)\n{\n    switch (idx) {\n        case 0: return __RV_CSR_READ(CSR_PMPCFG0);\n        case 1: return __RV_CSR_READ(CSR_PMPCFG1);\n        case 2: return __RV_CSR_READ(CSR_PMPCFG2);\n        case 3: return __RV_CSR_READ(CSR_PMPCFG3);\n        default: return 0;\n    }\n}\n\n/**\n * \\brief   Set PMPCFGx by index\n * \\details Write the given value to the PMPCFGx Register.\n * \\param [in]    idx      PMPCFG CSR index(0-3)\n * \\param [in]    pmpcfg   PMPCFGx Register value to set\n * \\remark\n * - For RV64, only idx = 0 and idx = 2 is allowed.\n *   pmpcfg0 and pmpcfg2 hold the configurations\n *   for the 16 PMP entries, pmpcfg1 and pmpcfg3 are illegal\n * - For RV32, pmpcfg0–pmpcfg3, hold the configurations\n *   pmp0cfg–pmp15cfg for the 16 PMP entries\n */\n__STATIC_INLINE void __set_PMPCFGx(uint32_t idx, rv_csr_t pmpcfg)\n{\n    switch (idx) {\n        case 0: __RV_CSR_WRITE(CSR_PMPCFG0, pmpcfg); break;\n        case 1: __RV_CSR_WRITE(CSR_PMPCFG1, pmpcfg); break;\n        case 2: __RV_CSR_WRITE(CSR_PMPCFG2, pmpcfg); break;\n        case 3: __RV_CSR_WRITE(CSR_PMPCFG3, pmpcfg); break;\n        default: return;\n    }\n}\n\n/**\n * \\brief   Get PMPADDRx Register by index\n * \\details Return the content of the PMPADDRx Register.\n * \\param [in]    idx    PMP region index(0-15)\n * \\return               PMPADDRx Register value\n */\n__STATIC_INLINE rv_csr_t __get_PMPADDRx(uint32_t idx)\n{\n    switch (idx) {\n        case 0: return __RV_CSR_READ(CSR_PMPADDR0);\n        case 1: return __RV_CSR_READ(CSR_PMPADDR1);\n        case 2: return __RV_CSR_READ(CSR_PMPADDR2);\n        case 3: return __RV_CSR_READ(CSR_PMPADDR3);\n        case 4: return __RV_CSR_READ(CSR_PMPADDR4);\n        case 5: return __RV_CSR_READ(CSR_PMPADDR5);\n        case 6: return __RV_CSR_READ(CSR_PMPADDR6);\n        case 7: return __RV_CSR_READ(CSR_PMPADDR7);\n        case 8: return __RV_CSR_READ(CSR_PMPADDR8);\n        case 9: return __RV_CSR_READ(CSR_PMPADDR9);\n        case 10: return __RV_CSR_READ(CSR_PMPADDR10);\n        case 11: return __RV_CSR_READ(CSR_PMPADDR11);\n        case 12: return __RV_CSR_READ(CSR_PMPADDR12);\n        case 13: return __RV_CSR_READ(CSR_PMPADDR13);\n        case 14: return __RV_CSR_READ(CSR_PMPADDR14);\n        case 15: return __RV_CSR_READ(CSR_PMPADDR15);\n        default: return 0;\n    }\n}\n\n/**\n * \\brief   Set PMPADDRx by index\n * \\details Write the given value to the PMPADDRx Register.\n * \\param [in]    idx      PMP region index(0-15)\n * \\param [in]    pmpaddr  PMPADDRx Register value to set\n */\n__STATIC_INLINE void __set_PMPADDRx(uint32_t idx, rv_csr_t pmpaddr)\n{\n    switch (idx) {\n        case 0: __RV_CSR_WRITE(CSR_PMPADDR0, pmpaddr); break;\n        case 1: __RV_CSR_WRITE(CSR_PMPADDR1, pmpaddr); break;\n        case 2: __RV_CSR_WRITE(CSR_PMPADDR2, pmpaddr); break;\n        case 3: __RV_CSR_WRITE(CSR_PMPADDR3, pmpaddr); break;\n        case 4: __RV_CSR_WRITE(CSR_PMPADDR4, pmpaddr); break;\n        case 5: __RV_CSR_WRITE(CSR_PMPADDR5, pmpaddr); break;\n        case 6: __RV_CSR_WRITE(CSR_PMPADDR6, pmpaddr); break;\n        case 7: __RV_CSR_WRITE(CSR_PMPADDR7, pmpaddr); break;\n        case 8: __RV_CSR_WRITE(CSR_PMPADDR8, pmpaddr); break;\n        case 9: __RV_CSR_WRITE(CSR_PMPADDR9, pmpaddr); break;\n        case 10: __RV_CSR_WRITE(CSR_PMPADDR10, pmpaddr); break;\n        case 11: __RV_CSR_WRITE(CSR_PMPADDR11, pmpaddr); break;\n        case 12: __RV_CSR_WRITE(CSR_PMPADDR12, pmpaddr); break;\n        case 13: __RV_CSR_WRITE(CSR_PMPADDR13, pmpaddr); break;\n        case 14: __RV_CSR_WRITE(CSR_PMPADDR14, pmpaddr); break;\n        case 15: __RV_CSR_WRITE(CSR_PMPADDR15, pmpaddr); break;\n        default: return;\n    }\n}\n/** @} */ /* End of Doxygen Group NMSIS_Core_PMP_Functions */\n#endif /* defined(__PMP_PRESENT) && (__PMP_PRESENT == 1) */\n\n#ifdef __cplusplus\n}\n#endif\n#endif /** __CORE_FEATURE_PMP_H__  */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/nmsis/core/inc/core_feature_timer.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __CORE_FEATURE_TIMER_H__\n#define __CORE_FEATURE_TIMER_H__\n/*!\n * @file     core_feature_timer.h\n * @brief    System Timer feature API header file for Nuclei N/NX Core\n */\n/*\n * System Timer Feature Configuration Macro:\n * 1. __SYSTIMER_PRESENT:  Define whether Private System Timer is present or not.\n *   * 0: Not present\n *   * 1: Present\n * 2. __SYSTIMER_BASEADDR:  Define the base address of the System Timer.\n */\n#ifdef __cplusplus\n extern \"C\" {\n#endif\n\n#if defined(__SYSTIMER_PRESENT) && (__SYSTIMER_PRESENT == 1)\n/**\n * \\defgroup NMSIS_Core_SysTimer_Registers     Register Define and Type Definitions Of System Timer\n * \\ingroup NMSIS_Core_Registers\n * \\brief   Type definitions and defines for system timer registers.\n *\n * @{\n */\n/**\n * \\brief  Structure type to access the System Timer (SysTimer).\n * \\details\n * Structure definition to access the system timer(SysTimer).\n * \\remarks\n * - MSFTRST register is introduced in Nuclei N Core version 1.3(\\ref __NUCLEI_N_REV >= 0x0103)\n * - MSTOP register is renamed to MTIMECTL register in Nuclei N Core version 1.4(\\ref __NUCLEI_N_REV >= 0x0104)\n * - CMPCLREN and CLKSRC bit in MTIMECTL register is introduced in Nuclei N Core version 1.4(\\ref __NUCLEI_N_REV >= 0x0104)\n */\ntypedef struct {\n    __IOM uint64_t MTIMER;                  /*!< Offset: 0x000 (R/W)  System Timer current value 64bits Register */\n    __IOM uint64_t MTIMERCMP;               /*!< Offset: 0x008 (R/W)  System Timer compare Value 64bits Register */\n    __IOM uint32_t RESERVED0[0x3F8];        /*!< Offset: 0x010 - 0xFEC Reserved */\n    __IOM uint32_t MSFTRST;                 /*!< Offset: 0xFF0 (R/W)  System Timer Software Core Reset Register */\n    __IOM uint32_t RESERVED1;               /*!< Offset: 0xFF4 Reserved */\n    __IOM uint32_t MTIMECTL;                /*!< Offset: 0xFF8 (R/W)  System Timer Control Register, previously MSTOP register */\n    __IOM uint32_t MSIP;                    /*!< Offset: 0xFFC (R/W)  System Timer SW interrupt Register */\n} SysTimer_Type;\n\n/* Timer Control / Status Register Definitions */\n#define SysTimer_MTIMECTL_TIMESTOP_Pos      0U                                          /*!< SysTick Timer MTIMECTL: TIMESTOP bit Position */\n#define SysTimer_MTIMECTL_TIMESTOP_Msk      (1UL << SysTimer_MTIMECTL_TIMESTOP_Pos)     /*!< SysTick Timer MTIMECTL: TIMESTOP Mask */\n#define SysTimer_MTIMECTL_CMPCLREN_Pos      1U                                          /*!< SysTick Timer MTIMECTL: CMPCLREN bit Position */\n#define SysTimer_MTIMECTL_CMPCLREN_Msk      (1UL << SysTimer_MTIMECTL_CMPCLREN_Pos)     /*!< SysTick Timer MTIMECTL: CMPCLREN Mask */\n#define SysTimer_MTIMECTL_CLKSRC_Pos        2U                                          /*!< SysTick Timer MTIMECTL: CLKSRC bit Position */\n#define SysTimer_MTIMECTL_CLKSRC_Msk        (1UL << SysTimer_MTIMECTL_CLKSRC_Pos)       /*!< SysTick Timer MTIMECTL: CLKSRC Mask */\n\n#define SysTimer_MSIP_MSIP_Pos              0U                                          /*!< SysTick Timer MSIP: MSIP bit Position */\n#define SysTimer_MSIP_MSIP_Msk              (1UL << SysTimer_MSIP_MSIP_Pos)             /*!< SysTick Timer MSIP: MSIP Mask */\n\n#define SysTimer_MTIMER_Msk                 (0xFFFFFFFFFFFFFFFFULL)                     /*!< SysTick Timer MTIMER value Mask */\n#define SysTimer_MTIMERCMP_Msk              (0xFFFFFFFFFFFFFFFFULL)                     /*!< SysTick Timer MTIMERCMP value Mask */\n#define SysTimer_MTIMECTL_Msk               (0xFFFFFFFFUL)                              /*!< SysTick Timer MTIMECTL/MSTOP value Mask */\n#define SysTimer_MSIP_Msk                   (0xFFFFFFFFUL)                              /*!< SysTick Timer MSIP   value Mask */\n#define SysTimer_MSFTRST_Msk                (0xFFFFFFFFUL)                              /*!< SysTick Timer MSFTRST value Mask */\n\n#define SysTimer_MSFRST_KEY                 (0x80000A5FUL)                              /*!< SysTick Timer Software Reset Request Key */\n\n#ifndef __SYSTIMER_BASEADDR\n/* Base address of SYSTIMER(__SYSTIMER_BASEADDR) should be defined in <Device.h> */\n#error \"__SYSTIMER_BASEADDR is not defined, please check!\"\n#endif\n/* System Timer Memory mapping of Device  */\n#define SysTimer_BASE                       __SYSTIMER_BASEADDR                         /*!< SysTick Base Address */\n#define SysTimer                            ((SysTimer_Type *) SysTimer_BASE)           /*!< SysTick configuration struct */\n/** @} */ /* end of group NMSIS_Core_SysTimer_Registers */\n\n/* ##################################    SysTimer function  ############################################ */\n/**\n * \\defgroup NMSIS_Core_SysTimer SysTimer Functions\n * \\brief    Functions that configure the Core System Timer.\n * @{\n */\n/**\n * \\brief  Set system timer load value\n * \\details\n * This function set the system timer load value in MTIMER register.\n * \\param [in]  value   value to set system timer MTIMER register.\n * \\remarks\n * - Load value is 64bits wide.\n * - \\ref SysTimer_GetLoadValue\n */\n__STATIC_FORCEINLINE void SysTimer_SetLoadValue(uint64_t value)\n{\n    SysTimer->MTIMER = value;\n}\n\n/**\n * \\brief  Get system timer load value\n * \\details\n * This function get the system timer current value in MTIMER register.\n * \\return  current value(64bit) of system timer MTIMER register.\n * \\remarks\n * - Load value is 64bits wide.\n * - \\ref SysTimer_SetLoadValue\n */\n__STATIC_FORCEINLINE uint64_t SysTimer_GetLoadValue(void)\n{\n    return SysTimer->MTIMER;\n}\n\n/**\n * \\brief  Set system timer compare value\n * \\details\n * This function set the system Timer compare value in MTIMERCMP register.\n * \\param [in]  value   compare value to set system timer MTIMERCMP register.\n * \\remarks\n * - Compare value is 64bits wide.\n * - If compare value is larger than current value timer interrupt generate.\n * - Modify the load value or compare value less to clear the interrupt.\n * - \\ref SysTimer_GetCompareValue\n */\n__STATIC_FORCEINLINE void SysTimer_SetCompareValue(uint64_t value)\n{\n    SysTimer->MTIMERCMP = value;\n}\n\n/**\n * \\brief  Get system timer compare value\n * \\details\n * This function get the system timer compare value in MTIMERCMP register.\n * \\return  compare value of system timer MTIMERCMP register.\n * \\remarks\n * - Compare value is 64bits wide.\n * - \\ref SysTimer_SetCompareValue\n */\n__STATIC_FORCEINLINE uint64_t SysTimer_GetCompareValue(void)\n{\n    return SysTimer->MTIMERCMP;\n}\n\n/**\n * \\brief  Enable system timer counter running\n * \\details\n * Enable system timer counter running by clear\n * TIMESTOP bit in MTIMECTL register.\n */\n__STATIC_FORCEINLINE void SysTimer_Start(void)\n{\n    SysTimer->MTIMECTL &= ~(SysTimer_MTIMECTL_TIMESTOP_Msk);\n}\n\n/**\n * \\brief  Stop system timer counter running\n * \\details\n * Stop system timer counter running by set\n * TIMESTOP bit in MTIMECTL register.\n */\n__STATIC_FORCEINLINE void SysTimer_Stop(void)\n{\n    SysTimer->MTIMECTL |= SysTimer_MTIMECTL_TIMESTOP_Msk;\n}\n\n/**\n * \\brief  Set system timer control value\n * \\details\n * This function set the system timer MTIMECTL register value.\n * \\param [in]  mctl    value to set MTIMECTL register\n * \\remarks\n * - Bit TIMESTOP is used to start and stop timer.\n *   Clear TIMESTOP bit to 0 to start timer, otherwise to stop timer.\n * - Bit CMPCLREN is used to enable auto MTIMER clear to zero when MTIMER >= MTIMERCMP.\n *   Clear CMPCLREN bit to 0 to stop auto clear MTIMER feature, otherwise to enable it.\n * - Bit CLKSRC is used to select timer clock source.\n *   Clear CLKSRC bit to 0 to use *mtime_toggle_a*, otherwise use *core_clk_aon*\n * - \\ref SysTimer_GetControlValue\n */\n__STATIC_FORCEINLINE void SysTimer_SetControlValue(uint32_t mctl)\n{\n    SysTimer->MTIMECTL = (mctl & SysTimer_MTIMECTL_Msk);\n}\n\n/**\n * \\brief  Get system timer control value\n * \\details\n * This function get the system timer MTIMECTL register value.\n * \\return  MTIMECTL register value\n * \\remarks\n * - \\ref SysTimer_SetControlValue\n */\n__STATIC_FORCEINLINE uint32_t SysTimer_GetControlValue(void)\n{\n    return (SysTimer->MTIMECTL & SysTimer_MTIMECTL_Msk);\n}\n\n/**\n * \\brief  Trigger or set software interrupt via system timer\n * \\details\n * This function set the system timer MSIP bit in MSIP register.\n * \\remarks\n * - Set system timer MSIP bit and generate a SW interrupt.\n * - \\ref SysTimer_ClearSWIRQ\n * - \\ref SysTimer_GetMsipValue\n */\n__STATIC_FORCEINLINE void SysTimer_SetSWIRQ(void)\n{\n    SysTimer->MSIP |= SysTimer_MSIP_MSIP_Msk;\n}\n\n/**\n * \\brief  Clear system timer software interrupt pending request\n * \\details\n * This function clear the system timer MSIP bit in MSIP register.\n * \\remarks\n * - Clear system timer MSIP bit in MSIP register to clear the software interrupt pending.\n * - \\ref SysTimer_SetSWIRQ\n * - \\ref SysTimer_GetMsipValue\n */\n__STATIC_FORCEINLINE void SysTimer_ClearSWIRQ(void)\n{\n    SysTimer->MSIP &= ~SysTimer_MSIP_MSIP_Msk;\n}\n\n/**\n * \\brief  Get system timer MSIP register value\n * \\details\n * This function get the system timer MSIP register value.\n * \\return    Value of Timer MSIP register.\n * \\remarks\n * - Bit0 is SW interrupt flag.\n *   Bit0 is 1 then SW interrupt set. Bit0 is 0 then SW interrupt clear.\n * - \\ref SysTimer_SetSWIRQ\n * - \\ref SysTimer_ClearSWIRQ\n */\n__STATIC_FORCEINLINE uint32_t SysTimer_GetMsipValue(void)\n{\n    return (uint32_t)(SysTimer->MSIP & SysTimer_MSIP_Msk);\n}\n\n/**\n * \\brief  Set system timer MSIP register value\n * \\details\n * This function set the system timer MSIP register value.\n * \\param [in]  msip   value to set MSIP register\n */\n__STATIC_FORCEINLINE void SysTimer_SetMsipValue(uint32_t msip)\n{\n    SysTimer->MSIP = (msip & SysTimer_MSIP_Msk);\n}\n\n/**\n * \\brief  Do software reset request\n * \\details\n * This function will do software reset request through MTIMER\n * - Software need to write \\ref SysTimer_MSFRST_KEY to generate software reset request\n * - The software request flag can be cleared by reset operation to clear\n * \\remarks\n * - The software reset is sent to SoC, SoC need to generate reset signal and send back to Core\n * - This function will not return, it will do while(1) to wait the Core reset happened\n */\n__STATIC_FORCEINLINE void SysTimer_SoftwareReset(void)\n{\n    SysTimer->MSFTRST = SysTimer_MSFRST_KEY;\n    while(1);\n}\n\n#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) && defined(__ECLIC_PRESENT) && (__ECLIC_PRESENT == 1)\n/**\n * \\brief   System Tick Configuration\n * \\details Initializes the System Timer and its non-vector interrupt, and starts the System Tick Timer.\n *\n *  In our default implementation, the timer counter will be set to zero, and it will start a timer compare non-vector interrupt\n *  when it matchs the ticks user set, during the timer interrupt user should reload the system tick using \\ref SysTick_Reload function\n *  or similar function written by user, so it can produce period timer interrupt.\n * \\param [in]  ticks  Number of ticks between two interrupts.\n * \\return          0  Function succeeded.\n * \\return          1  Function failed.\n * \\remarks\n * - For \\ref __NUCLEI_N_REV >= 0x0104, the CMPCLREN bit in MTIMECTL is introduced,\n *   but we assume that the CMPCLREN bit is set to 0, so MTIMER register will not be\n *   auto cleared to 0 when MTIMER >= MTIMERCMP.\n * - When the variable \\ref __Vendor_SysTickConfig is set to 1, then the\n *   function \\ref SysTick_Config is not included.\n * - In this case, the file <b><Device>.h</b> must contain a vendor-specific implementation\n *   of this function.\n * - If user need this function to start a period timer interrupt, then in timer interrupt handler\n *   routine code, user should call \\ref SysTick_Reload with ticks to reload the timer.\n * - This function only available when __SYSTIMER_PRESENT == 1 and __ECLIC_PRESENT == 1 and __Vendor_SysTickConfig == 0\n * \\sa\n * - \\ref SysTimer_SetCompareValue; SysTimer_SetLoadValue\n */\n__STATIC_INLINE uint32_t SysTick_Config(uint64_t ticks)\n{\n    SysTimer_SetLoadValue(0);\n    SysTimer_SetCompareValue(ticks);\n    ECLIC_SetShvIRQ(SysTimer_IRQn, ECLIC_NON_VECTOR_INTERRUPT);\n    ECLIC_SetLevelIRQ(SysTimer_IRQn, 0);\n    ECLIC_EnableIRQ(SysTimer_IRQn);\n    return (0UL);\n}\n\n/**\n * \\brief   System Tick Reload\n * \\details Reload the System Timer Tick when the MTIMECMP reached TIME value\n *\n * \\param [in]  ticks  Number of ticks between two interrupts.\n * \\return          0  Function succeeded.\n * \\return          1  Function failed.\n * \\remarks\n * - For \\ref __NUCLEI_N_REV >= 0x0104, the CMPCLREN bit in MTIMECTL is introduced,\n *   but for this \\ref SysTick_Config function, we assume this CMPCLREN bit is set to 0,\n *   so in interrupt handler function, user still need to set the MTIMERCMP or MTIMER to reload\n *   the system tick, if vendor want to use this timer's auto clear feature, they can define\n *   \\ref __Vendor_SysTickConfig to 1, and implement \\ref SysTick_Config and \\ref SysTick_Reload functions.\n * - When the variable \\ref __Vendor_SysTickConfig is set to 1, then the\n *   function \\ref SysTick_Reload is not included.\n * - In this case, the file <b><Device>.h</b> must contain a vendor-specific implementation\n *   of this function.\n * - This function only available when __SYSTIMER_PRESENT == 1 and __ECLIC_PRESENT == 1 and __Vendor_SysTickConfig == 0\n * - Since the MTIMERCMP value might overflow, if overflowed, MTIMER will be set to 0, and MTIMERCMP set to ticks\n * \\sa\n * - \\ref SysTimer_SetCompareValue\n * - \\ref SysTimer_SetLoadValue\n */\n__STATIC_FORCEINLINE uint32_t SysTick_Reload(uint64_t ticks)\n{\n    uint64_t cur_ticks = SysTimer->MTIMER;\n    uint64_t reload_ticks = ticks + cur_ticks;\n\n    if (__USUALLY(reload_ticks > cur_ticks)) {\n        SysTimer->MTIMERCMP = reload_ticks;\n    } else {\n        /* When added the ticks value, then the MTIMERCMP < TIMER,\n         * which means the MTIMERCMP is overflowed,\n         * so we need to reset the counter to zero */\n        SysTimer->MTIMER = 0;\n        SysTimer->MTIMERCMP = ticks;\n    }\n\n    return (0UL);\n}\n\n#endif /* defined(__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) */\n/** @} */ /* End of Doxygen Group NMSIS_Core_SysTimer */\n\n#endif /* defined(__SYSTIMER_PRESENT) && (__SYSTIMER_PRESENT == 1) */\n\n#ifdef __cplusplus\n}\n#endif\n#endif /** __CORE_FEATURE_TIMER_H__  */\n\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/nmsis/core/inc/nmsis_compiler.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#ifndef __NMSIS_COMPILER_H\n#define __NMSIS_COMPILER_H\n\n#include <stdint.h>\n\n/*!\n * @file     nmsis_compiler.h\n * @brief    NMSIS compiler generic header file\n */\n#if defined ( __GNUC__ )\n  /** GNU GCC Compiler */\n  #include \"nmsis_gcc.h\"\n#else\n  #error Unknown compiler.\n#endif\n\n\n#endif /* __NMSIS_COMPILER_H */\n\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/nmsis/core/inc/nmsis_core.h",
    "content": "/*\n * Copyright (c) 2009-2019 Arm Limited. All rights reserved.\n * -- Adaptable modifications made for Nuclei Processors. --\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __NMSIS_CORE_H__\n#define __NMSIS_CORE_H__\n\n#include <stdint.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"nmsis_version.h\"\n\n/**\n * \\ingroup NMSIS_Core_VersionControl\n * @{\n */\n/* The following enum __NUCLEI_N_REV/__NUCLEI_NX_REV definition in this file\n * is only used for doxygen documentation generation,\n * The <device>.h is the real file to define it by vendor\n */\n#if defined(__ONLY_FOR_DOXYGEN_DOCUMENT_GENERATION__)\n/**\n * \\brief Nuclei N class core revision number\n * \\details\n * Reversion number format: [15:8] revision number, [7:0] patch number\n * \\attention\n * This define is exclusive with \\ref __NUCLEI_NX_REV\n */\n#define __NUCLEI_N_REV (0x0104)\n/**\n * \\brief Nuclei NX class core revision number\n * \\details\n * Reversion number format: [15:8] revision number, [7:0] patch number\n * \\attention\n * This define is exclusive with \\ref __NUCLEI_N_REV\n */\n#define __NUCLEI_NX_REV (0x0100)\n#endif /* __ONLY_FOR_DOXYGEN_DOCUMENT_GENERATION__ */\n/** @} */ /* End of Group NMSIS_Core_VersionControl */\n\n#include \"nmsis_compiler.h\" /* NMSIS compiler specific defines */\n\n/* === Include Nuclei Core Related Headers === */\n/* Include core base feature header file */\n#include \"core_feature_base.h\"\n\n#ifndef __NMSIS_GENERIC\n/* Include core eclic feature header file */\n#include \"core_feature_eclic.h\"\n/* Include core systimer feature header file */\n#include \"core_feature_timer.h\"\n#endif\n\n/* Include core fpu feature header file */\n#include \"core_feature_fpu.h\"\n/* Include core dsp feature header file */\n#include \"core_feature_dsp.h\"\n/* Include core pmp feature header file */\n#include \"core_feature_pmp.h\"\n/* Include core cache feature header file */\n#include \"core_feature_cache.h\"\n\n/* Include compatiable functions header file */\n#include \"core_compatiable.h\"\n\n#ifdef __cplusplus\n}\n#endif\n#endif /* __NMSIS_CORE_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/nmsis/core/inc/nmsis_gcc.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n#ifndef __NMSIS_GCC_H__\n#define __NMSIS_GCC_H__\n/*!\n * @file     nmsis_gcc.h\n * @brief    NMSIS compiler GCC header file\n */\n#include <stdint.h>\n#include \"riscv_encoding.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* #########################  Startup and Lowlevel Init  ######################## */\n/**\n * \\defgroup NMSIS_Core_CompilerControl    Compiler Control\n * \\ingroup  NMSIS_Core\n * \\brief    Compiler agnostic \\#define symbols for generic c/c++ source code\n * \\details\n *\n * The NMSIS-Core provides the header file <b>nmsis_compiler.h</b> with consistent \\#define symbols for generate C or C++ source files that should be compiler agnostic.\n * Each NMSIS compliant compiler should support the functionality described in this section.\n *\n * The header file <b>nmsis_compiler.h</b> is also included by each Device Header File <device.h> so that these definitions are available.\n *   @{\n */\n/* ignore some GCC warnings */\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wsign-conversion\"\n#pragma GCC diagnostic ignored \"-Wconversion\"\n#pragma GCC diagnostic ignored \"-Wunused-parameter\"\n\n/* Fallback for __has_builtin */\n#ifndef __has_builtin\n#define __has_builtin(x) (0)\n#endif\n\n/* NMSIS compiler specific defines */\n/** \\brief Pass information from the compiler to the assembler. */\n#ifndef __ASM\n#define __ASM __asm\n#endif\n\n/** \\brief Recommend that function should be inlined by the compiler. */\n#ifndef __INLINE\n#define __INLINE inline\n#endif\n\n/** \\brief Define a static function that may be inlined by the compiler. */\n#ifndef __STATIC_INLINE\n#define __STATIC_INLINE static inline\n#endif\n\n/** \\brief Define a static function that should be always inlined by the compiler. */\n#ifndef __STATIC_FORCEINLINE\n#define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline\n#endif\n\n/** \\brief Inform the compiler that a function does not return. */\n#ifndef __NO_RETURN\n#define __NO_RETURN __attribute__((__noreturn__))\n#endif\n\n/** \\brief Inform that a variable shall be retained in executable image. */\n#ifndef __USED\n#define __USED __attribute__((used))\n#endif\n\n/** \\brief restrict pointer qualifier to enable additional optimizations. */\n#ifndef __WEAK\n#define __WEAK __attribute__((weak))\n#endif\n\n/** \\brief specified the vector size of the variable, measured in bytes */\n#ifndef __VECTOR_SIZE\n#define __VECTOR_SIZE(x) __attribute__((vector_size(x)))\n#endif\n\n/** \\brief Request smallest possible alignment. */\n#ifndef __PACKED\n#define __PACKED __attribute__((packed, aligned(1)))\n#endif\n\n/** \\brief Request smallest possible alignment for a structure. */\n#ifndef __PACKED_STRUCT\n#define __PACKED_STRUCT struct __attribute__((packed, aligned(1)))\n#endif\n\n/** \\brief Request smallest possible alignment for a union. */\n#ifndef __PACKED_UNION\n#define __PACKED_UNION union __attribute__((packed, aligned(1)))\n#endif\n\n#ifndef __UNALIGNED_UINT16_WRITE\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wpacked\"\n#pragma GCC diagnostic ignored \"-Wattributes\"\n/** \\brief Packed struct for unaligned uint16_t write access */\n__PACKED_STRUCT T_UINT16_WRITE\n{\n    uint16_t v;\n};\n#pragma GCC diagnostic pop\n/** \\brief Pointer for unaligned write of a uint16_t variable. */\n#define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))\n#endif\n\n#ifndef __UNALIGNED_UINT16_READ\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wpacked\"\n#pragma GCC diagnostic ignored \"-Wattributes\"\n/** \\brief Packed struct for unaligned uint16_t read access */\n__PACKED_STRUCT T_UINT16_READ\n{\n    uint16_t v;\n};\n#pragma GCC diagnostic pop\n/** \\brief Pointer for unaligned read of a uint16_t variable. */\n#define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)\n#endif\n\n#ifndef __UNALIGNED_UINT32_WRITE\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wpacked\"\n#pragma GCC diagnostic ignored \"-Wattributes\"\n/** \\brief Packed struct for unaligned uint32_t write access */\n__PACKED_STRUCT T_UINT32_WRITE\n{\n    uint32_t v;\n};\n#pragma GCC diagnostic pop\n/** \\brief Pointer for unaligned write of a uint32_t variable. */\n#define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))\n#endif\n\n#ifndef __UNALIGNED_UINT32_READ\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wpacked\"\n#pragma GCC diagnostic ignored \"-Wattributes\"\n/** \\brief Packed struct for unaligned uint32_t read access */\n__PACKED_STRUCT T_UINT32_READ\n{\n    uint32_t v;\n};\n#pragma GCC diagnostic pop\n/** \\brief Pointer for unaligned read of a uint32_t variable. */\n#define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)\n#endif\n\n/** \\brief Minimum `x` bytes alignment for a variable. */\n#ifndef __ALIGNED\n#define __ALIGNED(x) __attribute__((aligned(x)))\n#endif\n\n/** \\brief restrict pointer qualifier to enable additional optimizations. */\n#ifndef __RESTRICT\n#define __RESTRICT __restrict\n#endif\n\n/** \\brief Barrier to prevent compiler from reordering instructions. */\n#ifndef __COMPILER_BARRIER\n#define __COMPILER_BARRIER() __ASM volatile(\"\" :: \\\n                                                : \"memory\")\n#endif\n\n/** \\brief provide the compiler with branch prediction information, the branch is usually true */\n#ifndef __USUALLY\n#define __USUALLY(exp) __builtin_expect((exp), 1)\n#endif\n\n/** \\brief provide the compiler with branch prediction information, the branch is rarely true */\n#ifndef __RARELY\n#define __RARELY(exp) __builtin_expect((exp), 0)\n#endif\n\n/** \\brief Use this attribute to indicate that the specified function is an interrupt handler. */\n#ifndef __INTERRUPT\n#define __INTERRUPT __attribute__((interrupt))\n#endif\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_CompilerControl */\n\n/* IO definitions (access restrictions to peripheral registers) */\n/**\n * \\defgroup NMSIS_Core_PeriphAccess     Peripheral Access\n * \\brief  Naming conventions and optional features for accessing peripherals.\n *\n * The section below describes the naming conventions, requirements, and optional features\n * for accessing device specific peripherals.\n * Most of the rules also apply to the core peripherals.\n *\n * The **Device Header File <device.h>** contains typically these definition\n * and also includes the core specific header files.\n *\n * @{\n */\n/** \\brief Defines 'read only' permissions */\n#ifdef __cplusplus\n#define __I volatile\n#else\n#define __I volatile const\n#endif\n/** \\brief Defines 'write only' permissions */\n#define __O volatile\n/** \\brief Defines 'read / write' permissions */\n#define __IO volatile\n\n/* following defines should be used for structure members */\n/** \\brief Defines 'read only' structure member permissions */\n#define __IM volatile const\n/** \\brief Defines 'write only' structure member permissions */\n#define __OM volatile\n/** \\brief Defines 'read/write' structure member permissions */\n#define __IOM volatile\n\n/**\n * \\brief   Mask and shift a bit field value for use in a register bit range.\n * \\details The macro \\ref _VAL2FLD uses the #define's _Pos and _Msk of the related bit\n * field to shift bit-field values for assigning to a register.\n *\n * **Example**:\n * \\code\n * ECLIC->CFG = _VAL2FLD(CLIC_CLICCFG_NLBIT, 3);\n * \\endcode\n * \\param[in] field  Name of the register bit field.\n * \\param[in] value  Value of the bit field. This parameter is interpreted as an uint32_t type.\n * \\return           Masked and shifted value.\n */\n#define _VAL2FLD(field, value) (((uint32_t)(value) << field##_Pos) & field##_Msk)\n\n/**\n * \\brief   Mask and shift a register value to extract a bit filed value.\n * \\details The macro \\ref _FLD2VAL uses the #define's _Pos and _Msk of the related bit\n * field to extract the value of a bit field from a register.\n *\n * **Example**:\n * \\code\n * nlbits = _FLD2VAL(CLIC_CLICCFG_NLBIT, ECLIC->CFG);\n * \\endcode\n * \\param[in] field  Name of the register bit field.\n * \\param[in] value  Value of register. This parameter is interpreted as an uint32_t type.\n * \\return           Masked and shifted bit field value.\n */\n#define _FLD2VAL(field, value) (((uint32_t)(value)&field##_Msk) >> field##_Pos)\n\n    /** @} */ /* end of group NMSIS_Core_PeriphAccess */\n\n#ifdef __cplusplus\n}\n#endif\n#endif /* __NMSIS_GCC_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/nmsis/core/inc/nmsis_version.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __NMSIS_VERSION_H\n#define __NMSIS_VERSION_H\n\n/**\n * \\defgroup NMSIS_Core_VersionControl    Version Control\n * \\ingroup  NMSIS_Core\n * \\brief    Version \\#define symbols for NMSIS release specific C/C++ source code\n * \\details\n *\n * We followed the [semantic versioning 2.0.0](https://semver.org/) to control NMSIS version.\n * The version format is **MAJOR.MINOR.PATCH**, increment the:\n * 1. MAJOR version when you make incompatible API changes,\n * 2. MINOR version when you add functionality in a backwards compatible manner, and\n * 3. PATCH version when you make backwards compatible bug fixes.\n *\n * The header file `nmsis_version.h` is included by each core header so that these definitions are available.\n *\n * **Example Usage for NMSIS Version Check**:\n * \\code\n *   #if defined(__NMSIS_VERSION) && (__NMSIS_VERSION >= 0x00010105)\n *      #warning \"Yes, we have NMSIS 1.1.5 or later\"\n *   #else\n *      #error \"We need NMSIS 1.1.5 or later!\"\n *   #endif\n * \\endcode\n *\n * @{\n */\n\n/*!\n * \\file     nmsis_version.h\n * \\brief    NMSIS Version definitions\n **/\n\n/**\n * \\brief   Represent the NMSIS major version\n * \\details\n * The NMSIS major version can be used to\n * differentiate between NMSIS major releases.\n * */\n#define __NMSIS_VERSION_MAJOR            (1U)\n\n/**\n * \\brief   Represent the NMSIS minor version\n * \\details\n * The NMSIS minor version can be used to\n * query a NMSIS release update including new features.\n *\n **/\n#define __NMSIS_VERSION_MINOR            (0U)\n\n/**\n * \\brief   Represent the NMSIS patch version\n * \\details\n * The NMSIS patch version can be used to\n * show bug fixes in this package.\n **/\n#define __NMSIS_VERSION_PATCH            (1U)\n/**\n * \\brief   Represent the NMSIS Version\n * \\details\n * NMSIS Version format: **MAJOR.MINOR.PATCH**\n * * MAJOR: \\ref __NMSIS_VERSION_MAJOR, stored in `bits [31:16]` of \\ref __NMSIS_VERSION\n * * MINOR: \\ref __NMSIS_VERSION_MINOR, stored in `bits [15:8]` of \\ref __NMSIS_VERSION\n * * PATCH: \\ref __NMSIS_VERSION_PATCH, stored in `bits [7:0]` of \\ref __NMSIS_VERSION\n **/\n#define __NMSIS_VERSION                  ((__NMSIS_VERSION_MAJOR << 16U) | (__NMSIS_VERSION_MINOR << 8) | __NMSIS_VERSION_PATCH)\n\n/** @} */ /* End of Doxygen Group NMSIS_Core_VersionControl */\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/nmsis/core/inc/riscv_bits.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __RISCV_BITS_H__\n#define __RISCV_BITS_H__\n\n#ifdef __cplusplus\n extern \"C\" {\n#endif\n\n#if __riscv_xlen == 64\n# define SLL32                  sllw\n# define STORE                  sd\n# define LOAD                   ld\n# define LWU                    lwu\n# define LOG_REGBYTES           3\n#else\n# define SLL32                  sll\n# define STORE                  sw\n# define LOAD                   lw\n# define LWU                    lw\n# define LOG_REGBYTES           2\n#endif /* __riscv_xlen */\n\n#define REGBYTES (1 << LOG_REGBYTES)\n\n#if defined(__riscv_flen)\n#if __riscv_flen == 64\n# define FPSTORE                fsd\n# define FPLOAD                 fld\n# define LOG_FPREGBYTES         3\n#else\n# define FPSTORE                fsw\n# define FPLOAD                 flw\n# define LOG_FPREGBYTES         2\n#endif /* __riscv_flen == 64 */\n#define FPREGBYTES              (1 << LOG_FPREGBYTES)\n#endif /* __riscv_flen */\n\n#define __rv_likely(x)          __builtin_expect((x), 1)\n#define __rv_unlikely(x)        __builtin_expect((x), 0)\n\n#define __RV_ROUNDUP(a, b)      ((((a)-1)/(b)+1)*(b))\n#define __RV_ROUNDDOWN(a, b)    ((a)/(b)*(b))\n\n#define __RV_MAX(a, b)          ((a) > (b) ? (a) : (b))\n#define __RV_MIN(a, b)          ((a) < (b) ? (a) : (b))\n#define __RV_CLAMP(a, lo, hi)   MIN(MAX(a, lo), hi)\n\n#define __RV_EXTRACT_FIELD(val, which)                  (((val) & (which)) / ((which) & ~((which)-1)))\n#define __RV_INSERT_FIELD(val, which, fieldval)         (((val) & ~(which)) | ((fieldval) * ((which) & ~((which)-1))))\n\n#ifdef __ASSEMBLY__\n#define _AC(X,Y)                X\n#define _AT(T,X)                X\n#else\n#define __AC(X,Y)               (X##Y)\n#define _AC(X,Y)                __AC(X,Y)\n#define _AT(T,X)                ((T)(X))\n#endif /* __ASSEMBLY__ */\n\n#define _UL(x)                  (_AC(x, UL))\n#define _ULL(x)                 (_AC(x, ULL))\n\n#define _BITUL(x)               (_UL(1) << (x))\n#define _BITULL(x)              (_ULL(1) << (x))\n\n#define UL(x)                   (_UL(x))\n#define ULL(x)                  (_ULL(x))\n\n#define STR(x)                  XSTR(x)\n#define XSTR(x)                 #x\n#define __STR(s)                #s\n#define STRINGIFY(s)            __STR(s)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /** __RISCV_BITS_H__  */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/components/nmsis/core/inc/riscv_encoding.h",
    "content": "/*\n * Copyright (c) 2019 Nuclei Limited. All rights reserved.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * Licensed under the Apache License, Version 2.0 (the License); you may\n * not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an AS IS BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n#ifndef __RISCV_ENCODING_H__\n#define __RISCV_ENCODING_H__\n\n#include \"riscv_bits.h\"\n#ifdef __cplusplus\n extern \"C\" {\n#endif\n/**\n * \\defgroup NMSIS_Core_CSR_Encoding    Core CSR Encodings\n * \\ingroup  NMSIS_Core\n * \\brief    NMSIS Core CSR Encodings\n * \\details\n *\n * The following macros are used for CSR encodings\n *   @{\n */\n/* === Standard CSR bit mask === */\n#define MSTATUS_UIE         0x00000001\n#define MSTATUS_SIE         0x00000002\n#define MSTATUS_HIE         0x00000004\n#define MSTATUS_MIE         0x00000008\n#define MSTATUS_UPIE        0x00000010\n#define MSTATUS_SPIE        0x00000020\n#define MSTATUS_HPIE        0x00000040\n#define MSTATUS_MPIE        0x00000080\n#define MSTATUS_SPP         0x00000100\n#define MSTATUS_MPP         0x00001800\n#define MSTATUS_FS          0x00006000\n#define MSTATUS_XS          0x00018000\n#define MSTATUS_MPRV        0x00020000\n#define MSTATUS_PUM         0x00040000\n#define MSTATUS_MXR         0x00080000\n#define MSTATUS_VM          0x1F000000\n#define MSTATUS32_SD        0x80000000\n#define MSTATUS64_SD        0x8000000000000000\n\n#define MSTATUS_FS_INITIAL  0x00002000\n#define MSTATUS_FS_CLEAN    0x00004000\n#define MSTATUS_FS_DIRTY    0x00006000\n\n#define SSTATUS_UIE         0x00000001\n#define SSTATUS_SIE         0x00000002\n#define SSTATUS_UPIE        0x00000010\n#define SSTATUS_SPIE        0x00000020\n#define SSTATUS_SPP         0x00000100\n#define SSTATUS_FS          0x00006000\n#define SSTATUS_XS          0x00018000\n#define SSTATUS_PUM         0x00040000\n#define SSTATUS32_SD        0x80000000\n#define SSTATUS64_SD        0x8000000000000000\n\n#define CSR_MCACHE_CTL_IE   0x00000001\n#define CSR_MCACHE_CTL_DE   0x00010000\n\n#define DCSR_XDEBUGVER      (3U<<30)\n#define DCSR_NDRESET        (1<<29)\n#define DCSR_FULLRESET      (1<<28)\n#define DCSR_EBREAKM        (1<<15)\n#define DCSR_EBREAKH        (1<<14)\n#define DCSR_EBREAKS        (1<<13)\n#define DCSR_EBREAKU        (1<<12)\n#define DCSR_STOPCYCLE      (1<<10)\n#define DCSR_STOPTIME       (1<<9)\n#define DCSR_CAUSE          (7<<6)\n#define DCSR_DEBUGINT       (1<<5)\n#define DCSR_HALT           (1<<3)\n#define DCSR_STEP           (1<<2)\n#define DCSR_PRV            (3<<0)\n\n#define DCSR_CAUSE_NONE     0\n#define DCSR_CAUSE_SWBP     1\n#define DCSR_CAUSE_HWBP     2\n#define DCSR_CAUSE_DEBUGINT 3\n#define DCSR_CAUSE_STEP     4\n#define DCSR_CAUSE_HALT     5\n\n#define MCONTROL_TYPE(xlen)    (0xfULL<<((xlen)-4))\n#define MCONTROL_DMODE(xlen)   (1ULL<<((xlen)-5))\n#define MCONTROL_MASKMAX(xlen) (0x3fULL<<((xlen)-11))\n\n#define MCONTROL_SELECT     (1<<19)\n#define MCONTROL_TIMING     (1<<18)\n#define MCONTROL_ACTION     (0x3f<<12)\n#define MCONTROL_CHAIN      (1<<11)\n#define MCONTROL_MATCH      (0xf<<7)\n#define MCONTROL_M          (1<<6)\n#define MCONTROL_H          (1<<5)\n#define MCONTROL_S          (1<<4)\n#define MCONTROL_U          (1<<3)\n#define MCONTROL_EXECUTE    (1<<2)\n#define MCONTROL_STORE      (1<<1)\n#define MCONTROL_LOAD       (1<<0)\n\n#define MCONTROL_TYPE_NONE      0\n#define MCONTROL_TYPE_MATCH     2\n\n#define MCONTROL_ACTION_DEBUG_EXCEPTION   0\n#define MCONTROL_ACTION_DEBUG_MODE        1\n#define MCONTROL_ACTION_TRACE_START       2\n#define MCONTROL_ACTION_TRACE_STOP        3\n#define MCONTROL_ACTION_TRACE_EMIT        4\n\n#define MCONTROL_MATCH_EQUAL     0\n#define MCONTROL_MATCH_NAPOT     1\n#define MCONTROL_MATCH_GE        2\n#define MCONTROL_MATCH_LT        3\n#define MCONTROL_MATCH_MASK_LOW  4\n#define MCONTROL_MATCH_MASK_HIGH 5\n\n#define MIP_SSIP            (1 << IRQ_S_SOFT)\n#define MIP_HSIP            (1 << IRQ_H_SOFT)\n#define MIP_MSIP            (1 << IRQ_M_SOFT)\n#define MIP_STIP            (1 << IRQ_S_TIMER)\n#define MIP_HTIP            (1 << IRQ_H_TIMER)\n#define MIP_MTIP            (1 << IRQ_M_TIMER)\n#define MIP_SEIP            (1 << IRQ_S_EXT)\n#define MIP_HEIP            (1 << IRQ_H_EXT)\n#define MIP_MEIP            (1 << IRQ_M_EXT)\n\n#define MIE_SSIE            MIP_SSIP\n#define MIE_HSIE            MIP_HSIP\n#define MIE_MSIE            MIP_MSIP\n#define MIE_STIE            MIP_STIP\n#define MIE_HTIE            MIP_HTIP\n#define MIE_MTIE            MIP_MTIP\n#define MIE_SEIE            MIP_SEIP\n#define MIE_HEIE            MIP_HEIP\n#define MIE_MEIE            MIP_MEIP\n\n/* === P-ext CSR bit mask === */\n\n#define UCODE_OV            (0x1)\n\n/* === Nuclei custom CSR bit mask === */\n\n#define WFE_WFE                     (0x1)\n#define TXEVT_TXEVT                 (0x1)\n#define SLEEPVALUE_SLEEPVALUE       (0x1)\n\n#define MCOUNTINHIBIT_IR            (1<<2)\n#define MCOUNTINHIBIT_CY            (1<<0)\n\n#define MILM_CTL_ILM_BPA            (((1ULL<<((__riscv_xlen)-10))-1)<<10)\n#define MILM_CTL_ILM_RWECC          (1<<3)\n#define MILM_CTL_ILM_ECC_EXCP_EN    (1<<2)\n#define MILM_CTL_ILM_ECC_EN         (1<<1)\n#define MILM_CTL_ILM_EN             (1<<0)\n\n#define MDLM_CTL_DLM_BPA            (((1ULL<<((__riscv_xlen)-10))-1)<<10)\n#define MDLM_CTL_DLM_RWECC          (1<<3)\n#define MDLM_CTL_DLM_ECC_EXCP_EN    (1<<2)\n#define MDLM_CTL_DLM_ECC_EN         (1<<1)\n#define MDLM_CTL_DLM_EN             (1<<0)\n\n#define MSUBM_PTYP                  (0x3<<8)\n#define MSUBM_TYP                   (0x3<<6)\n\n#define MDCAUSE_MDCAUSE             (0x3)\n\n#define MMISC_CTL_NMI_CAUSE_FFF     (1<<9)\n#define MMISC_CTL_MISALIGN          (1<<6)\n#define MMISC_CTL_BPU               (1<<3)\n\n#define MCACHE_CTL_IC_EN            (1<<0)\n#define MCACHE_CTL_IC_SCPD_MOD      (1<<1)\n#define MCACHE_CTL_IC_ECC_EN        (1<<2)\n#define MCACHE_CTL_IC_ECC_EXCP_EN   (1<<3)\n#define MCACHE_CTL_IC_RWTECC        (1<<4)\n#define MCACHE_CTL_IC_RWDECC        (1<<5)\n#define MCACHE_CTL_DC_EN            (1<<16)\n#define MCACHE_CTL_DC_ECC_EN        (1<<17)\n#define MCACHE_CTL_DC_ECC_EXCP_EN   (1<<18)\n#define MCACHE_CTL_DC_RWTECC        (1<<19)\n#define MCACHE_CTL_DC_RWDECC        (1<<20)\n\n#define MTVT2_MTVT2EN               (1<<0)\n#define MTVT2_COMMON_CODE_ENTRY     (((1ULL<<((__riscv_xlen)-2))-1)<<2)\n\n#define MCFG_INFO_TEE               (1<<0)\n#define MCFG_INFO_ECC               (1<<1)\n#define MCFG_INFO_CLIC              (1<<2)\n#define MCFG_INFO_PLIC              (1<<3)\n#define MCFG_INFO_FIO               (1<<4)\n#define MCFG_INFO_PPI               (1<<5)\n#define MCFG_INFO_NICE              (1<<6)\n#define MCFG_INFO_ILM               (1<<7)\n#define MCFG_INFO_DLM               (1<<8)\n#define MCFG_INFO_ICACHE            (1<<9)\n#define MCFG_INFO_DCACHE            (1<<10)\n\n#define MICFG_IC_SET                (0xF<<0)\n#define MICFG_IC_WAY                (0x7<<4)\n#define MICFG_IC_LSIZE              (0x7<<7)\n#define MICFG_IC_ECC                (0x1<<10)\n#define MICFG_ILM_SIZE              (0x1F<<16)\n#define MICFG_ILM_XONLY             (0x1<<21)\n#define MICFG_ILM_ECC               (0x1<<22)\n\n#define MDCFG_DC_SET                (0xF<<0)\n#define MDCFG_DC_WAY                (0x7<<4)\n#define MDCFG_DC_LSIZE              (0x7<<7)\n#define MDCFG_DC_ECC                (0x1<<10)\n#define MDCFG_DLM_SIZE              (0x1F<<16)\n#define MDCFG_DLM_ECC               (0x1<<21)\n\n#define MPPICFG_INFO_PPI_SIZE       (0x1F<<1)\n#define MPPICFG_INFO_PPI_BPA        (((1ULL<<((__riscv_xlen)-10))-1)<<10)\n\n#define MFIOCFG_INFO_FIO_SIZE       (0x1F<<1)\n#define MFIOCFG_INFO_FIO_BPA        (((1ULL<<((__riscv_xlen)-10))-1)<<10)\n\n#define MECC_LOCK_ECC_LOCK          (0x1)\n\n#define MECC_CODE_CODE              (0x1FF)\n#define MECC_CODE_RAMID             (0x1F<<16)\n#define MECC_CODE_SRAMID            (0x1F<<24)\n\n#define CCM_SUEN_SUEN               (0x1<<0)\n#define CCM_DATA_DATA               (0x7<<0)\n#define CCM_COMMAND_COMMAND         (0x1F<<0)\n\n#define SIP_SSIP MIP_SSIP\n#define SIP_STIP MIP_STIP\n\n#define PRV_U 0\n#define PRV_S 1\n#define PRV_H 2\n#define PRV_M 3\n\n#define VM_MBARE 0\n#define VM_MBB   1\n#define VM_MBBID 2\n#define VM_SV32  8\n#define VM_SV39  9\n#define VM_SV48  10\n\n#define IRQ_S_SOFT   1\n#define IRQ_H_SOFT   2\n#define IRQ_M_SOFT   3\n#define IRQ_S_TIMER  5\n#define IRQ_H_TIMER  6\n#define IRQ_M_TIMER  7\n#define IRQ_S_EXT    9\n#define IRQ_H_EXT    10\n#define IRQ_M_EXT    11\n#define IRQ_COP      12\n#define IRQ_HOST     13\n\n\n/* === FPU FRM Rounding Mode === */\n/** FPU Round to Nearest, ties to Even*/\n#define FRM_RNDMODE_RNE     0x0\n/** FPU Round Towards Zero */\n#define FRM_RNDMODE_RTZ     0x1\n/** FPU Round Down (towards -inf) */\n#define FRM_RNDMODE_RDN     0x2\n/** FPU Round Up (towards +inf) */\n#define FRM_RNDMODE_RUP     0x3\n/** FPU Round to nearest, ties to Max Magnitude */\n#define FRM_RNDMODE_RMM     0x4\n/**\n * In instruction's rm, selects dynamic rounding mode.\n * In Rounding Mode register, Invalid */\n#define FRM_RNDMODE_DYN     0x7\n\n/* === FPU FFLAGS Accrued Exceptions === */\n/** FPU Inexact */\n#define FFLAGS_AE_NX        (1<<0)\n/** FPU Underflow */\n#define FFLAGS_AE_UF        (1<<1)\n/** FPU Overflow */\n#define FFLAGS_AE_OF        (1<<2)\n/** FPU Divide by Zero */\n#define FFLAGS_AE_DZ        (1<<3)\n/** FPU Invalid Operation */\n#define FFLAGS_AE_NV        (1<<4)\n\n/** Floating Point Register f0-f31, eg. f0 -> FREG(0) */\n#define FREG(idx)           f##idx\n\n\n/* === PMP CFG Bits === */\n#define PMP_R                0x01\n#define PMP_W                0x02\n#define PMP_X                0x04\n#define PMP_A                0x18\n#define PMP_A_TOR            0x08\n#define PMP_A_NA4            0x10\n#define PMP_A_NAPOT          0x18\n#define PMP_L                0x80\n\n#define PMP_SHIFT            2\n#define PMP_COUNT            16\n\n// page table entry (PTE) fields\n#define PTE_V     0x001 // Valid\n#define PTE_R     0x002 // Read\n#define PTE_W     0x004 // Write\n#define PTE_X     0x008 // Execute\n#define PTE_U     0x010 // User\n#define PTE_G     0x020 // Global\n#define PTE_A     0x040 // Accessed\n#define PTE_D     0x080 // Dirty\n#define PTE_SOFT  0x300 // Reserved for Software\n\n#define PTE_PPN_SHIFT 10\n\n#define PTE_TABLE(PTE) (((PTE) & (PTE_V | PTE_R | PTE_W | PTE_X)) == PTE_V)\n\n#ifdef __riscv\n\n#ifdef __riscv64\n# define MSTATUS_SD MSTATUS64_SD\n# define SSTATUS_SD SSTATUS64_SD\n# define RISCV_PGLEVEL_BITS 9\n#else\n# define MSTATUS_SD MSTATUS32_SD\n# define SSTATUS_SD SSTATUS32_SD\n# define RISCV_PGLEVEL_BITS 10\n#endif /* __riscv64 */\n\n#define RISCV_PGSHIFT 12\n#define RISCV_PGSIZE (1 << RISCV_PGSHIFT)\n\n#endif /* __riscv */\n\n/**\n * \\defgroup NMSIS_Core_CSR_Registers    Core CSR Registers\n * \\ingroup  NMSIS_Core\n * \\brief    NMSIS Core CSR Register Definitions\n * \\details\n *\n * The following macros are used for CSR Register Defintions.\n *   @{\n */\n/* === Standard RISC-V CSR Registers === */\n#define CSR_USTATUS 0x0\n#define CSR_FFLAGS 0x1\n#define CSR_FRM 0x2\n#define CSR_FCSR 0x3\n#define CSR_CYCLE 0xc00\n#define CSR_TIME 0xc01\n#define CSR_INSTRET 0xc02\n#define CSR_HPMCOUNTER3 0xc03\n#define CSR_HPMCOUNTER4 0xc04\n#define CSR_HPMCOUNTER5 0xc05\n#define CSR_HPMCOUNTER6 0xc06\n#define CSR_HPMCOUNTER7 0xc07\n#define CSR_HPMCOUNTER8 0xc08\n#define CSR_HPMCOUNTER9 0xc09\n#define CSR_HPMCOUNTER10 0xc0a\n#define CSR_HPMCOUNTER11 0xc0b\n#define CSR_HPMCOUNTER12 0xc0c\n#define CSR_HPMCOUNTER13 0xc0d\n#define CSR_HPMCOUNTER14 0xc0e\n#define CSR_HPMCOUNTER15 0xc0f\n#define CSR_HPMCOUNTER16 0xc10\n#define CSR_HPMCOUNTER17 0xc11\n#define CSR_HPMCOUNTER18 0xc12\n#define CSR_HPMCOUNTER19 0xc13\n#define CSR_HPMCOUNTER20 0xc14\n#define CSR_HPMCOUNTER21 0xc15\n#define CSR_HPMCOUNTER22 0xc16\n#define CSR_HPMCOUNTER23 0xc17\n#define CSR_HPMCOUNTER24 0xc18\n#define CSR_HPMCOUNTER25 0xc19\n#define CSR_HPMCOUNTER26 0xc1a\n#define CSR_HPMCOUNTER27 0xc1b\n#define CSR_HPMCOUNTER28 0xc1c\n#define CSR_HPMCOUNTER29 0xc1d\n#define CSR_HPMCOUNTER30 0xc1e\n#define CSR_HPMCOUNTER31 0xc1f\n#define CSR_SSTATUS 0x100\n#define CSR_SIE 0x104\n#define CSR_STVEC 0x105\n#define CSR_SSCRATCH 0x140\n#define CSR_SEPC 0x141\n#define CSR_SCAUSE 0x142\n#define CSR_SBADADDR 0x143\n#define CSR_SIP 0x144\n#define CSR_SPTBR 0x180\n#define CSR_MSTATUS 0x300\n#define CSR_MISA 0x301\n#define CSR_MEDELEG 0x302\n#define CSR_MIDELEG 0x303\n#define CSR_MIE 0x304\n#define CSR_MTVEC 0x305\n#define CSR_MCOUNTEREN 0x306\n#define CSR_MSCRATCH 0x340\n#define CSR_MEPC 0x341\n#define CSR_MCAUSE 0x342\n#define CSR_MBADADDR 0x343\n#define CSR_MTVAL 0x343\n#define CSR_MIP 0x344\n#define CSR_PMPCFG0 0x3a0\n#define CSR_PMPCFG1 0x3a1\n#define CSR_PMPCFG2 0x3a2\n#define CSR_PMPCFG3 0x3a3\n#define CSR_PMPADDR0 0x3b0\n#define CSR_PMPADDR1 0x3b1\n#define CSR_PMPADDR2 0x3b2\n#define CSR_PMPADDR3 0x3b3\n#define CSR_PMPADDR4 0x3b4\n#define CSR_PMPADDR5 0x3b5\n#define CSR_PMPADDR6 0x3b6\n#define CSR_PMPADDR7 0x3b7\n#define CSR_PMPADDR8 0x3b8\n#define CSR_PMPADDR9 0x3b9\n#define CSR_PMPADDR10 0x3ba\n#define CSR_PMPADDR11 0x3bb\n#define CSR_PMPADDR12 0x3bc\n#define CSR_PMPADDR13 0x3bd\n#define CSR_PMPADDR14 0x3be\n#define CSR_PMPADDR15 0x3bf\n#define CSR_TSELECT 0x7a0\n#define CSR_TDATA1 0x7a1\n#define CSR_TDATA2 0x7a2\n#define CSR_TDATA3 0x7a3\n#define CSR_DCSR 0x7b0\n#define CSR_DPC 0x7b1\n#define CSR_DSCRATCH 0x7b2\n#define CSR_MCYCLE 0xb00\n#define CSR_MINSTRET 0xb02\n#define CSR_MHPMCOUNTER3 0xb03\n#define CSR_MHPMCOUNTER4 0xb04\n#define CSR_MHPMCOUNTER5 0xb05\n#define CSR_MHPMCOUNTER6 0xb06\n#define CSR_MHPMCOUNTER7 0xb07\n#define CSR_MHPMCOUNTER8 0xb08\n#define CSR_MHPMCOUNTER9 0xb09\n#define CSR_MHPMCOUNTER10 0xb0a\n#define CSR_MHPMCOUNTER11 0xb0b\n#define CSR_MHPMCOUNTER12 0xb0c\n#define CSR_MHPMCOUNTER13 0xb0d\n#define CSR_MHPMCOUNTER14 0xb0e\n#define CSR_MHPMCOUNTER15 0xb0f\n#define CSR_MHPMCOUNTER16 0xb10\n#define CSR_MHPMCOUNTER17 0xb11\n#define CSR_MHPMCOUNTER18 0xb12\n#define CSR_MHPMCOUNTER19 0xb13\n#define CSR_MHPMCOUNTER20 0xb14\n#define CSR_MHPMCOUNTER21 0xb15\n#define CSR_MHPMCOUNTER22 0xb16\n#define CSR_MHPMCOUNTER23 0xb17\n#define CSR_MHPMCOUNTER24 0xb18\n#define CSR_MHPMCOUNTER25 0xb19\n#define CSR_MHPMCOUNTER26 0xb1a\n#define CSR_MHPMCOUNTER27 0xb1b\n#define CSR_MHPMCOUNTER28 0xb1c\n#define CSR_MHPMCOUNTER29 0xb1d\n#define CSR_MHPMCOUNTER30 0xb1e\n#define CSR_MHPMCOUNTER31 0xb1f\n#define CSR_MUCOUNTEREN 0x320\n#define CSR_MSCOUNTEREN 0x321\n#define CSR_MHPMEVENT3 0x323\n#define CSR_MHPMEVENT4 0x324\n#define CSR_MHPMEVENT5 0x325\n#define CSR_MHPMEVENT6 0x326\n#define CSR_MHPMEVENT7 0x327\n#define CSR_MHPMEVENT8 0x328\n#define CSR_MHPMEVENT9 0x329\n#define CSR_MHPMEVENT10 0x32a\n#define CSR_MHPMEVENT11 0x32b\n#define CSR_MHPMEVENT12 0x32c\n#define CSR_MHPMEVENT13 0x32d\n#define CSR_MHPMEVENT14 0x32e\n#define CSR_MHPMEVENT15 0x32f\n#define CSR_MHPMEVENT16 0x330\n#define CSR_MHPMEVENT17 0x331\n#define CSR_MHPMEVENT18 0x332\n#define CSR_MHPMEVENT19 0x333\n#define CSR_MHPMEVENT20 0x334\n#define CSR_MHPMEVENT21 0x335\n#define CSR_MHPMEVENT22 0x336\n#define CSR_MHPMEVENT23 0x337\n#define CSR_MHPMEVENT24 0x338\n#define CSR_MHPMEVENT25 0x339\n#define CSR_MHPMEVENT26 0x33a\n#define CSR_MHPMEVENT27 0x33b\n#define CSR_MHPMEVENT28 0x33c\n#define CSR_MHPMEVENT29 0x33d\n#define CSR_MHPMEVENT30 0x33e\n#define CSR_MHPMEVENT31 0x33f\n#define CSR_MVENDORID 0xf11\n#define CSR_MARCHID 0xf12\n#define CSR_MIMPID 0xf13\n#define CSR_MHARTID 0xf14\n#define CSR_CYCLEH 0xc80\n#define CSR_TIMEH 0xc81\n#define CSR_INSTRETH 0xc82\n#define CSR_HPMCOUNTER3H 0xc83\n#define CSR_HPMCOUNTER4H 0xc84\n#define CSR_HPMCOUNTER5H 0xc85\n#define CSR_HPMCOUNTER6H 0xc86\n#define CSR_HPMCOUNTER7H 0xc87\n#define CSR_HPMCOUNTER8H 0xc88\n#define CSR_HPMCOUNTER9H 0xc89\n#define CSR_HPMCOUNTER10H 0xc8a\n#define CSR_HPMCOUNTER11H 0xc8b\n#define CSR_HPMCOUNTER12H 0xc8c\n#define CSR_HPMCOUNTER13H 0xc8d\n#define CSR_HPMCOUNTER14H 0xc8e\n#define CSR_HPMCOUNTER15H 0xc8f\n#define CSR_HPMCOUNTER16H 0xc90\n#define CSR_HPMCOUNTER17H 0xc91\n#define CSR_HPMCOUNTER18H 0xc92\n#define CSR_HPMCOUNTER19H 0xc93\n#define CSR_HPMCOUNTER20H 0xc94\n#define CSR_HPMCOUNTER21H 0xc95\n#define CSR_HPMCOUNTER22H 0xc96\n#define CSR_HPMCOUNTER23H 0xc97\n#define CSR_HPMCOUNTER24H 0xc98\n#define CSR_HPMCOUNTER25H 0xc99\n#define CSR_HPMCOUNTER26H 0xc9a\n#define CSR_HPMCOUNTER27H 0xc9b\n#define CSR_HPMCOUNTER28H 0xc9c\n#define CSR_HPMCOUNTER29H 0xc9d\n#define CSR_HPMCOUNTER30H 0xc9e\n#define CSR_HPMCOUNTER31H 0xc9f\n#define CSR_MCYCLEH 0xb80\n#define CSR_MINSTRETH 0xb82\n#define CSR_MHPMCOUNTER3H 0xb83\n#define CSR_MHPMCOUNTER4H 0xb84\n#define CSR_MHPMCOUNTER5H 0xb85\n#define CSR_MHPMCOUNTER6H 0xb86\n#define CSR_MHPMCOUNTER7H 0xb87\n#define CSR_MHPMCOUNTER8H 0xb88\n#define CSR_MHPMCOUNTER9H 0xb89\n#define CSR_MHPMCOUNTER10H 0xb8a\n#define CSR_MHPMCOUNTER11H 0xb8b\n#define CSR_MHPMCOUNTER12H 0xb8c\n#define CSR_MHPMCOUNTER13H 0xb8d\n#define CSR_MHPMCOUNTER14H 0xb8e\n#define CSR_MHPMCOUNTER15H 0xb8f\n#define CSR_MHPMCOUNTER16H 0xb90\n#define CSR_MHPMCOUNTER17H 0xb91\n#define CSR_MHPMCOUNTER18H 0xb92\n#define CSR_MHPMCOUNTER19H 0xb93\n#define CSR_MHPMCOUNTER20H 0xb94\n#define CSR_MHPMCOUNTER21H 0xb95\n#define CSR_MHPMCOUNTER22H 0xb96\n#define CSR_MHPMCOUNTER23H 0xb97\n#define CSR_MHPMCOUNTER24H 0xb98\n#define CSR_MHPMCOUNTER25H 0xb99\n#define CSR_MHPMCOUNTER26H 0xb9a\n#define CSR_MHPMCOUNTER27H 0xb9b\n#define CSR_MHPMCOUNTER28H 0xb9c\n#define CSR_MHPMCOUNTER29H 0xb9d\n#define CSR_MHPMCOUNTER30H 0xb9e\n#define CSR_MHPMCOUNTER31H 0xb9f\n\n/* === TEE CSR Registers === */\n#define CSR_SPMPCFG0            0x1A0\n#define CSR_SPMPCFG1            0x1A1\n#define CSR_SPMPCFG2            0x1A2\n#define CSR_SPMPCFG3            0x1A3\n#define CSR_SPMPADDR0           0x1B0\n#define CSR_SPMPADDR1           0x1B1\n#define CSR_SPMPADDR2           0x1B2\n#define CSR_SPMPADDR3           0x1B3\n#define CSR_SPMPADDR4           0x1B4\n#define CSR_SPMPADDR5           0x1B5\n#define CSR_SPMPADDR6           0x1B6\n#define CSR_SPMPADDR7           0x1B7\n#define CSR_SPMPADDR8           0x1B8\n#define CSR_SPMPADDR9           0x1B9\n#define CSR_SPMPADDR10          0x1BA\n#define CSR_SPMPADDR11          0x1BB\n#define CSR_SPMPADDR12          0x1BC\n#define CSR_SPMPADDR13          0x1BD\n#define CSR_SPMPADDR14          0x1BE\n#define CSR_SPMPADDR15          0x1BF\n\n#define CSR_JALSNXTI            0x947\n#define CSR_STVT2               0x948\n#define CSR_PUSHSCAUSE          0x949\n#define CSR_PUSHSEPC            0x94A\n\n\n/* === CLIC CSR Registers === */\n#define CSR_MTVT                0x307\n#define CSR_MNXTI               0x345\n#define CSR_MINTSTATUS          0x346\n#define CSR_MSCRATCHCSW         0x348\n#define CSR_MSCRATCHCSWL        0x349\n#define CSR_MCLICBASE           0x350\n\n/* === P-Extension Registers === */\n#define CSR_UCODE               0x801\n\n/* === Nuclei custom CSR Registers === */\n#define CSR_MCOUNTINHIBIT       0x320\n#define CSR_MILM_CTL            0x7C0\n#define CSR_MDLM_CTL            0x7C1\n#define CSR_MECC_CODE           0x7C2\n#define CSR_MNVEC               0x7C3\n#define CSR_MSUBM               0x7C4\n#define CSR_MDCAUSE             0x7C9\n#define CSR_MCACHE_CTL          0x7CA\n#define CSR_MMISC_CTL           0x7D0\n#define CSR_MSAVESTATUS         0x7D6\n#define CSR_MSAVEEPC1           0x7D7\n#define CSR_MSAVECAUSE1         0x7D8\n#define CSR_MSAVEEPC2           0x7D9\n#define CSR_MSAVECAUSE2         0x7DA\n#define CSR_MSAVEDCAUSE1        0x7DB\n#define CSR_MSAVEDCAUSE2        0x7DC\n#define CSR_MTLB_CTL            0x7DD\n#define CSR_MECC_LOCK           0x7DE\n#define CSR_MFP16MODE           0x7E2\n#define CSR_LSTEPFORC           0x7E9\n#define CSR_PUSHMSUBM           0x7EB\n#define CSR_MTVT2               0x7EC\n#define CSR_JALMNXTI            0x7ED\n#define CSR_PUSHMCAUSE          0x7EE\n#define CSR_PUSHMEPC            0x7EF\n#define CSR_MPPICFG_INFO        0x7F0\n#define CSR_MFIOCFG_INFO        0x7F1\n#define CSR_MSMPCFG_INFO        0x7F7\n#define CSR_SLEEPVALUE          0x811\n#define CSR_TXEVT               0x812\n#define CSR_WFE                 0x810\n#define CSR_MICFG_INFO          0xFC0\n#define CSR_MDCFG_INFO          0xFC1\n#define CSR_MCFG_INFO           0xFC2\n#define CSR_MTLBCFG_INFO        0xFC3\n\n/* === Nuclei CCM Registers === */\n#define CSR_CCM_MBEGINADDR      0x7CB\n#define CSR_CCM_MCOMMAND        0x7CC\n#define CSR_CCM_MDATA           0x7CD\n#define CSR_CCM_SUEN            0x7CE\n#define CSR_CCM_SBEGINADDR      0x5CB\n#define CSR_CCM_SCOMMAND        0x5CC\n#define CSR_CCM_SDATA           0x5CD\n#define CSR_CCM_UBEGINADDR      0x4CB\n#define CSR_CCM_UCOMMAND        0x4CC\n#define CSR_CCM_UDATA           0x4CD\n#define CSR_CCM_FPIPE           0x4CF\n\n/** @} */ /** End of Doxygen Group NMSIS_Core_CSR_Registers **/\n\n/* Exception Code in MCAUSE CSR */\n#define CAUSE_MISALIGNED_FETCH 0x0\n#define CAUSE_FAULT_FETCH 0x1\n#define CAUSE_ILLEGAL_INSTRUCTION 0x2\n#define CAUSE_BREAKPOINT 0x3\n#define CAUSE_MISALIGNED_LOAD 0x4\n#define CAUSE_FAULT_LOAD 0x5\n#define CAUSE_MISALIGNED_STORE 0x6\n#define CAUSE_FAULT_STORE 0x7\n#define CAUSE_USER_ECALL 0x8\n#define CAUSE_SUPERVISOR_ECALL 0x9\n#define CAUSE_HYPERVISOR_ECALL 0xa\n#define CAUSE_MACHINE_ECALL 0xb\n\n/* Exception Subcode in MDCAUSE CSR */\n#define DCAUSE_FAULT_FETCH_PMP      0x1\n#define DCAUSE_FAULT_FETCH_INST     0x2\n\n#define DCAUSE_FAULT_LOAD_PMP       0x1\n#define DCAUSE_FAULT_LOAD_INST      0x2\n#define DCAUSE_FAULT_LOAD_NICE      0x3\n\n#define DCAUSE_FAULT_STORE_PMP      0x1\n#define DCAUSE_FAULT_STORE_INST     0x2\n\n/** @} */ /** End of Doxygen Group NMSIS_Core_CSR_Encoding **/\n\n#ifdef __cplusplus\n}\n#endif\n#endif /* __RISCV_ENCODING_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/CMakeLists.txt",
    "content": "﻿################# Add global include #################\r\nlist(APPEND ADD_INCLUDE\r\n\"${CMAKE_CURRENT_SOURCE_DIR}/hal_drv/inc\"\r\n\"${CMAKE_CURRENT_SOURCE_DIR}/std_drv/inc\"\r\n\"${CMAKE_CURRENT_SOURCE_DIR}/regs\"\r\n\"${CMAKE_CURRENT_SOURCE_DIR}/startup\"\r\n\"${CMAKE_CURRENT_SOURCE_DIR}\"\r\n)\r\n#######################################################\r\n\r\n################# Add private include #################\r\nlist(APPEND ADD_PRIVATE_INCLUDE\r\n\"${CMAKE_CURRENT_SOURCE_DIR}/hal_drv/default_config\"\r\n)\r\n#######################################################\r\n\r\n############## Add current dir source files ###########\r\nfile(GLOB_RECURSE sources\r\n\"${CMAKE_CURRENT_SOURCE_DIR}/std_drv/src/*.c\"\r\n\"${CMAKE_CURRENT_SOURCE_DIR}/hal_drv/src/*.c\"\r\n\"${CMAKE_CURRENT_SOURCE_DIR}/startup/interrupt.c\"\r\n\"${CMAKE_CURRENT_SOURCE_DIR}/startup/system_bl702.c\"\r\n\"${CMAKE_CURRENT_SOURCE_DIR}/startup/GCC/entry.S\"\r\n\"${CMAKE_CURRENT_SOURCE_DIR}/startup/GCC/start_load.c\"\r\n)\r\nlist(APPEND ADD_SRCS  ${sources})\r\n# aux_source_directory(src ADD_SRCS)\r\nlist(REMOVE_ITEM ADD_SRCS \"${CMAKE_CURRENT_SOURCE_DIR}/std_drv/src/bl702_snflash.c\"\r\n\"${CMAKE_CURRENT_SOURCE_DIR}/std_drv/src/bl702_romdriver.c\"\r\n\"${CMAKE_CURRENT_SOURCE_DIR}/std_drv/src/bl702_clock.c\"\r\n)\r\n#######################################################\r\n\r\n########### Add required/dependent components #########\r\nlist(APPEND ADD_REQUIREMENTS common)\r\n#######################################################\r\n\r\n############ Add static libs ##########################\r\n#list(APPEND ADD_STATIC_LIB \"lib/libtest.a\")\r\n#######################################################\r\n\r\n############ Add dynamic libs #########################\r\n# list(APPEND ADD_DYNAMIC_LIB \"lib/arch/v831/libmaix_nn.so\"\r\n#                             \"lib/arch/v831/libmaix_cam.so\"\r\n# )\r\n#######################################################\r\n\r\n############ Add global compile option ################\r\n#add components denpend on this component\r\nif(CONFIG_ROMAPI)\r\nlist(APPEND ADD_DEFINITIONS -DBFLB_USE_ROM_DRIVER)\r\nendif()\r\nif(CONFIG_HALAPI)\r\nlist(APPEND ADD_DEFINITIONS -DBFLB_USE_HAL_DRIVER)\r\nendif()\r\nlist(APPEND ADD_DEFINITIONS -DARCH_RISCV)\r\n#######################################################\r\n\r\n############ Add private compile option ################\r\n#add compile option for this component that won't affect other modules\r\n# list(APPEND ADD_PRIVATE_DEFINITIONS -DAAAAA=1)\r\n#######################################################\r\n\r\ngenerate_library()\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/bl702_flash.ld",
    "content": "/****************************************************************************************\n* @file bl702_flash.ld\n*\n* @brief This file is the map file (gnuarm or armgcc).\n*\n* Copyright (C) BouffaloLab 2021\n*\n****************************************************************************************\n*/\n\n/* configure the CPU type */\nOUTPUT_ARCH( \"riscv\" )\n/* link with the standard c library */\n/* INPUT(-lc) */\n/* link with the standard GCC library */\n/* INPUT(-lgcc) */\n/* configure the entry point */\nENTRY(_enter)\n\nStackSize = 0x1000; /*  4KB */\n__EM_SIZE =8K;\n\nMEMORY\n{\n    xip_memory  (rx)  : ORIGIN = 0x23000000, LENGTH = 1008K /*1024 - 8K header - 4K*2 for settings and logo*/\n    itcm_memory (rx)  : ORIGIN = 0x22014000, LENGTH = 12K\n    dtcm_memory (rx)  : ORIGIN = 0x42014000, LENGTH = 8K\n    ram_memory  (!rx) : ORIGIN = 0x42016000, LENGTH = 72K\n    rsvd_memory (!rx) : ORIGIN = 0x42028000, LENGTH = 1K\n    ram2_memory (!rx) : ORIGIN = 0x42028400, LENGTH = (31K - __EM_SIZE)\n    hbn_memory  (rx)  : ORIGIN = 0x40010000, LENGTH = 0xE00     /* hbn ram 4K used 3.5K*/\n}\n\nSECTIONS\n{\n    PROVIDE(__metal_chicken_bit = 0);\n\n    .text :\n    {\n        . = ALIGN(4);\n        __text_code_start__ = .;\n\n        KEEP (*(.text.metal.init.enter))\n        KEEP (*(SORT_NONE(.init)))\n        /* section information for shell */\n        . = ALIGN(4);\n        __fsymtab_start = .;\n        KEEP(*(FSymTab))\n        __fsymtab_end = .;\n\n        . = ALIGN(4);\n        __vsymtab_start = .;\n        KEEP(*(VSymTab))\n        __vsymtab_end = .;\n\n        /* section information for usb desc */\n        . = ALIGN(4);\n        _usb_desc_start = .;\n        KEEP(*(usb_desc))\n        . = ALIGN(4);\n        _usb_desc_end = .;\n\n        *(.text)\n        *(.text.*)\n\n        /*put .rodata**/\n        *(EXCLUDE_FILE( *bl702_glb*.o* \\\n                        *bl702_pds*.o* \\\n                        *bl702_common*.o* \\\n                        *bl702_sf_cfg*.o* \\\n                        *bl702_sf_cfg_ext*.o* \\\n                        *bl702_sf_ctrl*.o* \\\n                        *bl702_sflash*.o* \\\n                        *bl702_sflash_ext*.o* \\\n                        *bl702_xip_sflash*.o* \\\n                        *bl702_xip_sflash_ext*.o* \\\n                        *bl702_ef_ctrl*.o*) .rodata*)\n\n        *(.rodata)\n        *(.rodata.*)\n\n        *(.srodata)\n        *(.srodata.*)\n\n\t\t_bt_gatt_service_static_list_start = .;\n        KEEP(*(SORT_BY_NAME(\"._bt_gatt_service_static.static.*\")))\n        _bt_gatt_service_static_list_end = .;\n        _bt_l2cap_fixed_chan_list_start = .;\n        KEEP(*(SORT_BY_NAME(\"._bt_l2cap_fixed_chan.static.*\")))\n        _bt_l2cap_fixed_chan_list_end = .;\n\n        . = ALIGN(4);\n        __text_code_end__ = .;\n    } > xip_memory\n    .preinit_array  :\n    {\n        PROVIDE_HIDDEN (__preinit_array_start = .);\n        KEEP (*(.preinit_array))\n        PROVIDE_HIDDEN (__preinit_array_end = .);\n    } >xip_memory AT>xip_memory\n    .init_array     :\n    {\n        PROVIDE_HIDDEN (__init_array_start = .);\n        KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))\n        KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))\n        PROVIDE_HIDDEN (__init_array_end = .);\n    } >xip_memory AT>xip_memory\n    .fini_array     :\n    {\n        PROVIDE_HIDDEN (__fini_array_start = .);\n        KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))\n        KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))\n        PROVIDE_HIDDEN (__fini_array_end = .);\n    } >xip_memory AT>xip_memory\n  .ctors          :\n  {\n    /* gcc uses crtbegin.o to find the start of\n     * the constructors, so we make sure it is\n     * first.  Because this is a wildcard, it\n     * doesn't matter if the user does not\n     * actually link against crtbegin.o; the\n     * linker won't look for a file to match a\n     * wildcard.  The wildcard also means that it\n     * doesn't matter which directory crtbegin.o\n     * is in.\n     */\n    KEEP (*crtbegin.o(.ctors))\n    KEEP (*crtbegin?.o(.ctors))\n    /* We don't want to include the .ctor section from\n     * the crtend.o file until after the sorted ctors.\n     * The .ctor section from the crtend file contains the\n     * end of ctors marker and it must be last\n     */\n    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))\n    KEEP (*(SORT(.ctors.*)))\n    KEEP (*(.ctors))\n  } >xip_memory AT>xip_memory\n  .dtors          :\n  {\n    KEEP (*crtbegin.o(.dtors))\n    KEEP (*crtbegin?.o(.dtors))\n    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))\n    KEEP (*(SORT(.dtors.*)))\n    KEEP (*(.dtors))\n  } >xip_memory AT>xip_memory\n  .lalign         :\n  {\n    . = ALIGN(4);\n    PROVIDE( _data_lma = . );\n  } >xip_memory AT>xip_memory\n    . = ALIGN(4);\n    __itcm_load_addr = .;\n\n    .itcm_region : AT (__itcm_load_addr)\n    {\n        . = ALIGN(4);\n        __tcm_code_start__ = .;\n\n        *(.tcm_code.*)\n        *(.tcm_const.*)\n        *(.sclock_rlt_code.*)\n        *(.sclock_rlt_const.*)\n\n        *bl702_glb*.o*(.rodata*)\n        *bl702_pds*.o*(.rodata*)\n        *bl702_common*.o*(.rodata*)\n        *bl702_sf_cfg*.o*(.rodata*)\n        *bl702_sf_cfg_ext*.o*(.rodata*)\n        *bl702_sf_ctrl*.o*(.rodata*)\n        *bl702_sflash*.o*(.rodata*)\n        *bl702_sflash_ext*.o*(.rodata*)\n        *bl702_xip_sflash*.o*(.rodata*)\n        *bl702_xip_sflash_ext*.o*(.rodata*)\n        *bl702_ef_ctrl*.o*(.rodata*)\n\n        . = ALIGN(4);\n        __tcm_code_end__ = .;\n    } > dtcm_memory\n\n    __hbn_load_addr = __itcm_load_addr + SIZEOF(.itcm_region);\n\n    .hbn_ram_region : AT (__hbn_load_addr)\n    {\n        . = ALIGN(4);\n        __hbn_ram_start__ = .;\n        *bl702_hbn_wakeup*.o*(.rodata*)\n        *(.hbn_ram_code*)\n        *(.hbn_ram_data)\n        . = ALIGN(4);\n        __hbn_ram_end__ = .;\n    } > hbn_memory\n\n    __dtcm_load_addr = __hbn_load_addr + SIZEOF(.hbn_ram_region);\n\n    .dtcm_region : AT (__dtcm_load_addr)\n    {\n        . = ALIGN(4);\n        __tcm_data_start__ = .;\n\n        *(.tcm_data)\n        /* *finger_print.o(.data*) */\n\n        . = ALIGN(4);\n        __tcm_data_end__ = .;\n    } > dtcm_memory\n   \n\n    /*************************************************************************/\n    /* .stack_dummy section doesn't contains any symbols. It is only\n     * used for linker to calculate size of stack sections, and assign\n     * values to stack symbols later */\n    .stack_dummy (NOLOAD):\n    {\n        . = ALIGN(0x4);\n        . = . + StackSize;\n        . = ALIGN(0x4);\n    } > dtcm_memory\n\n    /* Set stack top to end of RAM, and stack limit move down by\n     * size of stack_dummy section */\n    __StackTop = ORIGIN(dtcm_memory) + LENGTH(dtcm_memory);\n    PROVIDE( __freertos_irq_stack_top = __StackTop);\n    __StackLimit = __StackTop - SIZEOF(.stack_dummy);\n\n    /* Check if data + heap + stack exceeds RAM limit */\n    ASSERT(__StackLimit >= __tcm_data_end__, \"region RAM overflowed with stack\")\n    /*************************************************************************/\n\n    __system_ram_load_addr = __dtcm_load_addr + SIZEOF(.dtcm_region);\n\n    .system_ram_data_region : AT (__system_ram_load_addr)\n    {\n        . = ALIGN(4);\n        __system_ram_data_start__ = .;\n\n        *(.system_ram)\n\n        . = ALIGN(4);\n        __system_ram_data_end__ = .;\n    } > ram_memory\n\n    __ram_load_addr = __system_ram_load_addr + SIZEOF(.system_ram_data_region);\n\n    /* Data section */\n    RAM_DATA : AT (__ram_load_addr)\n    {\n        . = ALIGN(4);\n        __ram_data_start__ = .;\n\n        PROVIDE( __global_pointer$ = . + 0x800 );\n\n        *(.data)\n        *(.data.*)\n        *(.sdata)\n        *(.sdata.*)\n        *(.sdata2)\n        *(.sdata2.*)\n\n        . = ALIGN(4);\n        __ram_data_end__ = .;\n    } > ram_memory\n\n    .bss (NOLOAD) :\n    {\n        . = ALIGN(4);\n        __bss_start__ = .;\n\n        *(.bss*)\n        *(.sbss*)\n        *(COMMON)\n\n        . = ALIGN(4);\n        __bss_end__ = .;\n    } > ram_memory\n\n    .noinit_data (NOLOAD) :\n    {\n        . = ALIGN(4);\n        __noinit_data_start__ = .;\n\n        *(.noinit_data*)\n\n        . = ALIGN(4);\n        __noinit_data_end__ = .;\n    } > ram_memory\n\n    .heap (NOLOAD):\n    {\n        . = ALIGN(4);\n        __HeapBase = .;\n\n        KEEP(*(.heap*))\n\n        . = ALIGN(4);\n        __HeapLimit = .;\n    } > ram_memory\n\n    PROVIDE (__heap_min_size = 0x400);\n    __HeapLimit = ORIGIN(ram_memory) + LENGTH(ram_memory);\n\n    ASSERT((__HeapLimit -  __HeapBase ) >= __heap_min_size, \"heap size is too short.\")\n\n    PROVIDE( _heap_start = ORIGIN(ram2_memory) );\n    PROVIDE( _heap_size = LENGTH(ram2_memory) );\n}\n\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/cpu_flags.cmake",
    "content": "﻿SET(CPU_ARCH \"RISCV\")\r\nSET(MCPU \"riscv-e24\")\r\nSET(MARCH \"rv32imafc\")\r\nSET(MABI \"ilp32f\")\r\n\r\nlist(APPEND GLOBAL_C_FLAGS -march=${MARCH} -mabi=${MABI})\r\nlist(APPEND GLOBAL_LD_FLAGS -march=${MARCH} -mabi=${MABI})\r\n\r\nSET(LINKER_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/bl702_flash.ld)\r\nSET(RAM_LINKER_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/bl702_ram.ld)\r\nSET(BOOT2_LINKER_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/blsp_boot2_iap_flash.ld)"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/default_config/adc_config.h",
    "content": "#ifndef _ADC_CONFIG_H\r\n#define _ADC_CONFIG_H\r\n\r\n#define ADC_DATA_WIDIH_12 (0)\r\n\r\n#define ADC_V18_SELECT (2) /*!< ADC 1.8V select */\r\n#define ADC_V11_SELECT (1) /*!< ADC 1.1V select */\r\n\r\n#define ADC_PGA_VCM          (0) /*!< ADC VCM value */\r\n#define ADC_PGA_GAIN1        (0) /*!< PGA gain 1 */\r\n#define ADC_PGA_GAIN2        (0) /*!< PGA gain 2 */\r\n#define ADC_CHOP_MODE        (2) /*!< ADC chop mode select */\r\n#define ADC_BIAS_SELECT      (0) /*!< ADC current form main bandgap or aon bandgap */\r\n#define ADC_OFFSET_CALIB_EN  (0) /*!< Offset calibration enable */\r\n#define ADC_OFFSER_CALIB_VAL (0) /*!< Offset calibration value */\r\n\r\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/default_config/dac_config.h",
    "content": "#ifndef _DAC_CONFIG_H\r\n#define _DAC_CONFIG_H\r\n\r\n#define DAC_REF_SEL      (0)\r\n#define DAC_EXT_REF_GPIO (7)\r\n\r\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/default_config/i2s_config.h",
    "content": "#ifndef _I2S_CONFIG_H\r\n#define _I2S_CONFIG_H\r\n\r\n#define I2S_ADUIO_PLL_DEFAULT AUDIO_PLL_12288000_HZ\r\n#define I2S_DATA_ENDIAN       I2S_DATA_ENDIAN_MSB\r\n#define I2S_MONO_CHANNEL      I2S_RX_MONO_MODE_RIGHT_CHANNEL\r\n#define I2S_LR_EXCHANGE       DISABLE /*The position of L/R channel data within each entry is exchanged if enabled*/\r\n#define I2S_FS_INVERT         DISABLE\r\n#define I2S_BCLK_INVERT       DISABLE\r\n\r\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/default_config/uart_config.h",
    "content": "#ifndef _UART_CONFIG_H\r\n#define _UART_CONFIG_H\r\n\r\n#define UART_CTS_FLOWCONTROL_ENABLE  (0)\r\n#define UART_RTS_FLOWCONTROL_ENABLE  (0)\r\n#define UART_RX_DEGLITCH_ENABLE      (0)\r\n#define UART_MSB_FIRST_ENABLE        (0)\r\n#define UART_TX_SWCONTROL_ENABLE     (0)\r\n#define UART_TX_LINMODE_ENABLE       (0)\r\n#define UART_RX_LINMODE_ENABLE       (0)\r\n#define UART_TX_BREAKBIT_CNT         (0)\r\n\r\n#define UART_FIFO_MAX_LEN        128\r\n#define UART_DEFAULT_RTO_TIMEOUT 100\r\n\r\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_adc.h",
    "content": "/**\n * @file hal_adc.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef __HAL_ADC__H__\n#define __HAL_ADC__H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"hal_common.h\"\n#include \"drv_device.h\"\n#include \"bl702_config.h\"\n\n#define DEVICE_CTRL_ADC_CHANNEL_START  0x10\n#define DEVICE_CTRL_ADC_CHANNEL_STOP   0x11\n#define DEVICE_CTRL_ADC_CHANNEL_CONFIG 0x12\n#define DEVICE_CTRL_ADC_VBAT_ON        0x13\n#define DEVICE_CTRL_ADC_VBAT_OFF       0x14\n#define DEVICE_CTRL_ADC_TSEN_ON        0x15\n#define DEVICE_CTRL_ADC_TSEN_OFF       0x16\n#define DEVICE_CTRL_ADC_DATA_PARSE     0x17\n\nenum adc_index_type {\n#ifdef BSP_USING_ADC0\n    ADC0_INDEX,\n#endif\n    ADC_MAX_INDEX\n};\n\n#define adc_channel_start(dev)        device_control(dev, DEVICE_CTRL_ADC_CHANNEL_START, NULL)\n#define adc_channel_stop(dev)         device_control(dev, DEVICE_CTRL_ADC_CHANNEL_STOP, NULL)\n#define adc_channel_config(dev, list) device_control(dev, DEVICE_CTRL_ADC_CHANNEL_CONFIG, list)\n\ntypedef enum {\n    ADC_CHANNEL0,          /* ADC channel 0 */\n    ADC_CHANNEL1,          /* ADC channel 1 */\n    ADC_CHANNEL2,          /* ADC channel 2 */\n    ADC_CHANNEL3,          /* ADC channel 3 */\n    ADC_CHANNEL4,          /* ADC channel 4 */\n    ADC_CHANNEL5,          /* ADC channel 5 */\n    ADC_CHANNEL6,          /* ADC channel 6 */\n    ADC_CHANNEL7,          /* ADC channel 7 */\n    ADC_CHANNEL8,          /* ADC channel 8 */\n    ADC_CHANNEL9,          /* ADC channel 9 */\n    ADC_CHANNEL10,         /* ADC channel 10 */\n    ADC_CHANNEL11,         /* ADC channel 11 */\n    ADC_CHANNEL_DAC_OUTA,  /* DACA, ADC channel 12 */\n    ADC_CHANNEL_DAC_OUTB,  /* DACB, ADC channel 13 */\n    ADC_CHANNEL_TSEN_P,    /* TSenp, ADC channel 14 */\n    ADC_CHANNEL_TSEN_N,    /* TSenn, ADC channel 15 */\n    ADC_CHANNEL_VREF,      /* Vref, ADC channel 16 */\n    ADC_CHANNEL_DCTEST,    /* DCTest, ADC channel 17 */\n    ADC_CHANNEL_VABT_HALF, /* VBAT/2, ADC channel 18 */\n    ADC_CHANNEL_SENP3,     /* SenVP3, ADC channel 19 */\n    ADC_CHANNEL_SENP2,     /* SenVP2, ADC channel 20 */\n    ADC_CHANNEL_SENP1,     /* SenVP1, ADC channel 21 */\n    ADC_CHANNEL_SENP0,     /* SenVP0, ADC channel 22 */\n    ADC_CHANNEL_GND,       /* GND, ADC channel 23 */\n} adc_channel_t;\n\ntypedef enum {\n    ADC_CLOCK_DIV_1,  /*!< ADC clock:on 32M clock is 32M */\n    ADC_CLOCK_DIV_4,  /*!< ADC clock:on 32M clock is 8M */\n    ADC_CLOCK_DIV_8,  /*!< ADC clock:on 32M clock is 4M */\n    ADC_CLOCK_DIV_12, /*!< ADC clock:on 32M clock is 2.666M */\n    ADC_CLOCK_DIV_16, /*!< ADC clock:on 32M clock is 2M */\n    ADC_CLOCK_DIV_20, /*!< ADC clock:on 32M clock is 1.6M */\n    ADC_CLOCK_DIV_24, /*!< ADC clock:on 32M clock is 1.333M */\n    ADC_CLOCK_DIV_32, /*!< ADC clock:on 32M clock is 1M */\n} adc_clk_div_t;\n\ntypedef enum {\n    ADC_VREF_3V2 = 0, /* ADC select 3.2V as reference voltage */\n    ADC_VREF_2V = 1,  /* ADC select 2V as reference voltage */\n} adc_vref_t;\n\n/**\n *  @brief ADC data width type definition\n */\ntypedef enum {\n    ADC_DATA_WIDTH_12B,                  /*!< ADC 12 bits */\n    ADC_DATA_WIDTH_14B_WITH_16_AVERAGE,  /*!< ADC 14 bits,and the value is average of 16 converts */\n    ADC_DATA_WIDTH_14B_WITH_64_AVERAGE,  /*!< ADC 14 bits,and the value is average of 64 converts */\n    ADC_DATA_WIDTH_16B_WITH_128_AVERAGE, /*!< ADC 16 bits,and the value is average of 128 converts */\n    ADC_DATA_WIDTH_16B_WITH_256_AVERAGE, /*!< ADC 16 bits,and the value is average of 256 converts */\n} adc_data_width_t;\n\n/**\n *  @brief ADC FIFO threshold type definition\n */\ntypedef enum {\n    ADC_FIFO_THRESHOLD_1BYTE,  /*!< ADC FIFO threshold is 1 */\n    ADC_FIFO_THRESHOLD_4BYTE,  /*!< ADC FIFO threshold is 4 */\n    ADC_FIFO_THRESHOLD_8BYTE,  /*!< ADC FIFO threshold is 8 */\n    ADC_FIFO_THRESHOLD_16BYTE, /*!< ADC FIFO threshold is 16 */\n} adc_fifo_threshold_t;\n\n/**\n *  @brief ADC PGA gain type definition\n */\ntypedef enum {\n    ADC_GAIN_NONE, /*!< No PGA gain */\n    ADC_GAIN_1,    /*!< PGA gain 1 */\n    ADC_GAIN_2,    /*!< PGA gain 2 */\n    ADC_GAIN_4,    /*!< PGA gain 4 */\n    ADC_GAIN_8,    /*!< PGA gain 8 */\n    ADC_GAIN_16,   /*!< PGA gain 16 */\n    ADC_GAIN_32,   /*!< PGA gain 32 */\n} adc_pga_gain_t;\n\nenum adc_event_type {\n    ADC_EVENT_UNDERRUN,\n    ADC_EVENT_OVERRUN,\n    ADC_EVENT_FIFO,\n    ADC_EVENT_UNKNOWN\n};\n\nenum adc_it_type {\n    ADC_UNDERRUN_IT = 1 << 2,\n    ADC_OVERRUN_IT = 1 << 3,\n    ADC_FIFO_IT = 1 << 5,\n};\n\ntypedef struct {\n    uint8_t *pos_channel;\n    uint8_t *neg_channel;\n    uint8_t num;\n} adc_channel_cfg_t;\n\ntypedef struct {\n    int8_t posChan; /*!< Positive channel */\n    int8_t negChan; /*!< Negative channel */\n    uint16_t value; /*!< ADC value */\n    float volt;     /*!< ADC voltage result */\n} adc_channel_val_t;\n\ntypedef struct\n{\n    uint32_t *input;\n    adc_channel_val_t *output;\n    uint32_t num;\n} adc_data_parse_t;\n\ntypedef struct adc_device {\n    struct device parent;\n    adc_clk_div_t clk_div;     /* CLK is not more than 2Mhz */\n    adc_vref_t vref;           /* ADC voltage reference*/\n    bool continuous_conv_mode; /** conversion mode: shot conversion mode or continuous conversion mode. */\n    bool differential_mode;    /** Channel type: single-ended or differential. */\n    adc_data_width_t data_width;\n    adc_fifo_threshold_t fifo_threshold;\n    adc_pga_gain_t gain;\n    void *rx_dma;\n} adc_device_t;\n\n#define ADC_DEV(dev) ((adc_device_t *)dev)\n\nint adc_register(enum adc_index_type index, const char *name);\nint adc_trim_tsen(uint16_t *tsen_offset);\nfloat adc_get_tsen(uint16_t tsen_offset);\n\n#ifdef __cplusplus\n}\n#endif\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_boot2.h",
    "content": "/**\r\n * *****************************************************************************\r\n * @file hal_boot2_custom.h\r\n * @version 0.1\r\n * @date 2021-07-17\r\n * @brief\r\n * *****************************************************************************\r\n * @attention\r\n *\r\n *  <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n *  Redistribution and use in source and binary forms, with or without modification,\r\n *  are permitted provided that the following conditions are met:\r\n *    1. Redistributions of source code must retain the above copyright notice,\r\n *       this list of conditions and the following disclaimer.\r\n *    2. Redistributions in binary form must reproduce the above copyright notice,\r\n *       this list of conditions and the following disclaimer in the documentation\r\n *       and/or other materials provided with the distribution.\r\n *    3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *       may be used to endorse or promote products derived from this software\r\n *       without specific prior written permission.\r\n *\r\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n *  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n *  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n * *****************************************************************************\r\n */\r\n#ifndef __HAL_BOOT2_H__\r\n#define __HAL_BOOT2_H__\r\n\r\n#ifdef __cplusplus\r\nextern \"C\"{\r\n#endif\r\n\r\n#include \"hal_common.h\"\r\n#include \"bl702_sflash.h\"\r\n#include \"bl702_glb.h\"\r\n\r\n#define BL_TCM_BASE           BL702_TCM_BASE\r\n#define BL_SYS_CLK_PLL        GLB_SYS_CLK_DLL144M\r\n#define BL_SFLASH_CLK         GLB_SFLASH_CLK_72M\r\n#define HAL_PLL_CFG_MAGICCODE \"PCFG\"\r\n\r\n#define HAL_BOOT2_PK_HASH_SIZE                256 / 8\r\n#define HAL_BOOT2_IMG_HASH_SIZE               256 / 8\r\n#define HAL_BOOT2_ECC_KEYXSIZE                256 / 8\r\n#define HAL_BOOT2_ECC_KEYYSIZE                256 / 8\r\n#define HAL_BOOT2_SIGN_MAXSIZE                (2048 / 8)\r\n#define HAL_BOOT2_DEADBEEF_VAL                0xdeadbeef\r\n#define HAL_BOOT2_CPU0_MAGIC                  \"BFNP\"\r\n#define HAL_BOOT2_CPU1_MAGIC                  \"BFAP\"\r\n#define HAL_BOOT2_CP_FLAG                     0x02\r\n#define HAL_BOOT2_MP_FLAG                     0x01\r\n#define HAL_BOOT2_SP_FLAG                     0x00\r\n\r\n#define HAL_BOOT2_SUPPORT_DECOMPRESS          1 /* 1 support decompress, 0 not support */\r\n#define HAL_BOOT2_SUPPORT_USB_IAP             0 /* 1 support decompress, 0 not support */\r\n#define HAL_BOOT2_SUPPORT_EFLASH_LOADER_RAM   1 /* 1 support decompress, 0 not support */\r\n#define HAL_BOOT2_SUPPORT_EFLASH_LOADER_FLASH 0 /* 1 support decompress, 0 not support */\r\n\r\n#define HAL_BOOT2_CPU_GROUP_MAX               1\r\n#define HAL_BOOT2_CPU_MAX                     1\r\n#define HAL_BOOT2_RAM_IMG_COUNT_MAX           0\r\n\r\n#define HAL_BOOT2_FW_IMG_OFFSET_AFTER_HEADER  4*1024  \r\ntypedef struct\r\n{\r\n    uint8_t encrypted[HAL_BOOT2_CPU_GROUP_MAX];\r\n    uint8_t sign[HAL_BOOT2_CPU_GROUP_MAX];\r\n    uint8_t hbn_check_sign;\r\n    uint8_t rsvd[1];\r\n    uint8_t chip_id[8];\r\n    uint8_t pk_hash_cpu0[HAL_BOOT2_PK_HASH_SIZE];\r\n    uint8_t pk_hash_cpu1[HAL_BOOT2_PK_HASH_SIZE];\r\n    uint8_t uart_download_cfg;\r\n    uint8_t sf_pin_cfg;\r\n    uint8_t keep_dbg_port_closed;\r\n    uint8_t boot_pin_cfg;\r\n} boot2_efuse_hw_config;\r\n\r\nstruct __attribute__((packed, aligned(4))) hal_flash_config \r\n{\r\n    uint32_t magicCode; /*'FCFG'*/\r\n    SPI_Flash_Cfg_Type cfg;\r\n    uint32_t crc32;\r\n} ;\r\n\r\ntypedef struct\r\n{\r\n    uint8_t xtal_type;\r\n    uint8_t pll_clk;\r\n    uint8_t hclk_div;\r\n    uint8_t bclk_div;\r\n\r\n    uint8_t flash_clk_type;\r\n    uint8_t flash_clk_div;\r\n    uint8_t rsvd[2];\r\n} hal_sys_clk_config;\r\n\r\ntypedef struct\r\n{\r\n    uint32_t magicCode; /*'PCFG'*/\r\n    hal_sys_clk_config cfg;\r\n    uint32_t crc32;\r\n} hal_pll_config;\r\n\r\n\r\nstruct __attribute__((packed, aligned(4))) hal_basic_cfg_t {\r\n    uint32_t sign_type          : 2; /* [1: 0]   for sign */\r\n    uint32_t encrypt_type       : 2; /* [3: 2]   for encrypt */\r\n    uint32_t key_sel            : 2; /* [5: 4]   key slot */\r\n    uint32_t xts_mode           : 1; /* [6]      for xts mode */\r\n    uint32_t aes_region_lock    : 1; /* [7]      rsvd */\r\n    uint32_t no_segment         : 1; /* [8]      no segment info */\r\n    uint32_t boot2_enable       : 1; /* [9]      boot2 enable */\r\n    uint32_t boot2_rollback     : 1; /* [10]     boot2 rollback */\r\n    uint32_t cpu_master_id      : 4; /* [14: 11] master id */\r\n    uint32_t notload_in_bootrom : 1; /* [15]     notload in bootrom */\r\n    uint32_t crc_ignore         : 1; /* [16]     ignore crc */\r\n    uint32_t hash_ignore        : 1; /* [17]     hash ignore */\r\n    uint32_t power_on_mm        : 1; /* [18]     power on mm */\r\n    uint32_t em_sel             : 3; /* [21: 19] em_sel */\r\n    uint32_t cmds_en            : 1; /* [22]     command spliter enable */\r\n    uint32_t cmds_wrap_mode     : 2; /* [24: 23] cmds wrap mode */\r\n    uint32_t cmds_wrap_len      : 4; /* [28: 25] cmds wrap len */\r\n    uint32_t icache_invalid     : 1; /* [29] icache invalid */\r\n    uint32_t dcache_invalid     : 1; /* [30] dcache invalid */\r\n    uint32_t fpga_halt_release  : 1; /* [31] FPGA halt release function */\r\n\r\n    uint32_t group_image_offset;     /* flash controller offset */\r\n    uint32_t aes_region_len;         /* aes region length */\r\n\r\n    uint32_t img_len_cnt;            /* image length or segment count */\r\n    uint32_t hash[8];                /* hash of the image */\r\n};\r\n\r\nstruct __attribute__((packed, aligned(4))) hal_cpu_cfg_t {\r\n    uint8_t config_enable;          /* coinfig this cpu */\r\n    uint8_t halt_cpu;               /* halt this cpu */\r\n    uint8_t cache_enable  : 1;      /* cache setting */\r\n    uint8_t cache_wa      : 1;      /* cache setting */\r\n    uint8_t cache_wb      : 1;      /* cache setting */\r\n    uint8_t cache_wt      : 1;      /* cache setting */\r\n    uint8_t cache_way_dis : 4;      /* cache setting */\r\n    uint8_t rsvd;\r\n\r\n    uint32_t image_address_offset;  /* image address on flash */\r\n    uint32_t boot_entry;            /* entry point of the m0 image */\r\n    uint32_t msp_val;               /* msp value */\r\n};\r\n\r\n\r\nstruct  hal_bootheader_t\r\n{\r\n    uint32_t magicCode; /*'BFXP'*/\r\n    uint32_t rivison;\r\n    struct hal_flash_config flash_cfg;\r\n    hal_pll_config clk_cfg;\r\n    __PACKED_UNION\r\n    {\r\n        __PACKED_STRUCT\r\n        {\r\n            uint32_t sign              : 2;  /* [1: 0]      for sign*/\r\n            uint32_t encrypt_type      : 2;  /* [3: 2]      for encrypt */\r\n            uint32_t key_sel           : 2;  /* [5: 4]      for key sel in boot interface*/\r\n            uint32_t rsvd6_7           : 2;  /* [7: 6]      for encrypt*/\r\n            uint32_t no_segment        : 1;  /* [8]         no segment info */\r\n            uint32_t cache_enable      : 1;  /* [9]         for cache */\r\n            uint32_t notLoadInBoot     : 1;  /* [10]        not load this img in bootrom */\r\n            uint32_t aes_region_lock   : 1;  /* [11]        aes region lock */\r\n            uint32_t cache_way_disable : 4;  /* [15: 12]    cache way disable info*/\r\n            uint32_t crcIgnore         : 1;  /* [16]        ignore crc */\r\n            uint32_t hash_ignore       : 1;  /* [17]        hash crc */\r\n            uint32_t halt_cpu1         : 1;  /* [18]        halt ap */\r\n            uint32_t rsvd19_31         : 13; /* [31:19]     rsvd */\r\n        }\r\n        bval;\r\n        uint32_t wval;\r\n    }\r\n    bootCfg;\r\n\r\n    __PACKED_UNION\r\n    {\r\n        uint32_t segment_cnt;\r\n        uint32_t img_len;\r\n    }\r\n    img_segment_info;\r\n\r\n    uint32_t bootEntry; /* entry point of the image*/\r\n    __PACKED_UNION\r\n    {\r\n        uint32_t ram_addr;\r\n        uint32_t flash_offset;\r\n    }\r\n    img_start;\r\n\r\n    uint8_t hash[HAL_BOOT2_IMG_HASH_SIZE]; /*hash of the image*/\r\n\r\n    uint32_t rsv1;\r\n    uint32_t rsv2;\r\n    uint32_t crc32;\r\n} ;\r\n\r\ntypedef struct\r\n{\r\n    uint8_t img_valid;\r\n    uint8_t pk_src;\r\n    uint8_t rsvd[2];\r\n\r\n    struct hal_basic_cfg_t basic_cfg;\r\n\r\n    struct hal_cpu_cfg_t cpu_cfg[HAL_BOOT2_CPU_MAX];\r\n\r\n    uint8_t aes_iv[16 + 4];                         //iv in boot header\r\n\r\n    uint8_t eckye_x[HAL_BOOT2_ECC_KEYXSIZE];  //ec key in boot header\r\n    uint8_t eckey_y[HAL_BOOT2_ECC_KEYYSIZE];  //ec key in boot header\r\n    uint8_t eckey_x2[HAL_BOOT2_ECC_KEYXSIZE]; //ec key in boot header\r\n    uint8_t eckey_y2[HAL_BOOT2_ECC_KEYYSIZE]; //ec key in boot header\r\n\r\n    uint8_t signature[HAL_BOOT2_SIGN_MAXSIZE];  //signature in boot header\r\n    uint8_t signature2[HAL_BOOT2_SIGN_MAXSIZE]; //signature in boot header\r\n\r\n} boot2_image_config;\r\n\r\nextern boot2_efuse_hw_config g_efuse_cfg;\r\nextern uint8_t g_ps_mode;\r\nextern uint32_t g_user_hash_ignored;\r\nextern struct device *dev_check_hash;\r\n\r\n\r\n\r\n\r\nuint32_t hal_boot2_custom(void);\r\nvoid hal_boot2_reset_sec_eng(void);\r\nvoid hal_boot2_sw_system_reset(void);\r\nvoid hal_boot2_set_psmode_status(uint32_t flag);\r\nuint32_t hal_boot2_get_psmode_status(void);\r\nuint32_t hal_boot2_get_user_fw(void);\r\nvoid hal_boot2_clr_user_fw(void);\r\nvoid hal_boot2_get_efuse_cfg(boot2_efuse_hw_config *efuse_cfg);\r\nint32_t hal_boot2_get_clk_cfg(hal_pll_config *cfg);\r\nvoid hal_boot2_sboot_finish(void);\r\nvoid hal_boot2_uart_gpio_init(void);\r\nvoid hal_boot2_debug_uart_gpio_init(void);\r\n#if HAL_BOOT2_SUPPORT_USB_IAP\r\nvoid hal_boot2_debug_usb_port_init(void);\r\n#endif\r\n\r\nvoid hal_boot2_debug_uart_gpio_deinit(void);\r\nint32_t hal_boot_parse_bootheader(boot2_image_config *boot_img_cfg, uint8_t *data);\r\nvoid hal_boot2_clean_cache(void);\r\nBL_Err_Type hal_boot2_set_cache(uint8_t cont_read, boot2_image_config *boot_img_cfg);\r\nvoid hal_boot2_get_ram_img_cnt(char* img_name[],uint32_t *ram_img_cnt );\r\nvoid hal_boot2_get_img_info(uint8_t *data, uint32_t *image_offset, uint32_t *img_len,uint8_t **hash);\r\nvoid hal_boot2_release_cpu(uint32_t core, uint32_t boot_addr);\r\nuint32_t hal_boot2_get_xip_addr(uint32_t flash_addr);\r\nuint32_t hal_boot2_get_grp_count(void);\r\nuint32_t hal_boot2_get_cpu_count(void);\r\nuint32_t hal_boot2_get_feature_flag(void);\r\nuint32_t hal_boot2_get_bootheader_offset(void);\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_clock.h",
    "content": "/**\r\n * @file hal_clock.h\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n#ifndef __HAL_CLOCK__H__\r\n#define __HAL_CLOCK__H__\r\n\r\n#ifdef __cplusplus\r\nextern \"C\"{\r\n#endif\r\n\r\n#include \"hal_common.h\"\r\n#include \"bl702_config.h\"\r\n\r\n/*XTAL_TYPE*/\r\n#define XTAL_NONE         0\r\n#define EXTERNAL_XTAL_32M 1\r\n#define INTERNAL_RC_32M   2\r\n\r\n/*CLOCK_32K_XTAL*/\r\n#define EXTERNAL_XTAL_32K 0\r\n#define INTERNAL_RC_32K   1\r\n\r\n/*BSP_ROOT_CLOCK_SOURCE*/\r\n#if XTAL_TYPE != EXTERNAL_XTAL_32M\r\n#define ROOT_CLOCK_SOURCE_XCLK 0\r\n#else\r\n#define ROOT_CLOCK_SOURCE_XCLK 1\r\n#endif\r\n#define ROOT_CLOCK_SOURCE_PLL_57P6M 2\r\n#define ROOT_CLOCK_SOURCE_PLL_96M   3\r\n#define ROOT_CLOCK_SOURCE_PLL_144M  4\r\n/*BSP_XXX_CLOCK_SOURCE*/\r\n#define ROOT_CLOCK_SOURCE_32K_CLK 5\r\n#define ROOT_CLOCK_SOURCE_FCLK    6\r\n#define ROOT_CLOCK_SOURCE_BCLK    7\r\n#define ROOT_CLOCK_SOURCE_1K_CLK  8\r\n\r\n/*BSP_AUDIO_PLL_CLOCK_SOURCE*/\r\n#define ROOT_CLOCK_SOURCE_AUPLL_12288000_HZ 9\r\n#define ROOT_CLOCK_SOURCE_AUPLL_11289600_HZ 10\r\n#define ROOT_CLOCK_SOURCE_AUPLL_5644800_HZ  11\r\n#define ROOT_CLOCK_SOURCE_AUPLL_24576000_HZ 12\r\n#define ROOT_CLOCK_SOURCE_AUPLL_24000000_HZ 13\r\n\r\nenum system_clock_type {\r\n    SYSTEM_CLOCK_ROOT_CLOCK = 0, /* clock source before fclk_div*/\r\n    SYSTEM_CLOCK_FCLK,           /* clock source after fclk_div*/\r\n    SYSTEM_CLOCK_BCLK,           /* clock source after bclk_div*/\r\n    SYSTEM_CLOCK_XCLK,           /* xtal clock*/\r\n    SYSTEM_CLOCK_32K_CLK,\r\n    SYSTEM_CLOCK_AUPLL,\r\n};\r\nenum peripheral_clock_type {\r\n    PERIPHERAL_CLOCK_UART = 0,\r\n    PERIPHERAL_CLOCK_SPI,\r\n    PERIPHERAL_CLOCK_I2C,\r\n    PERIPHERAL_CLOCK_ADC,\r\n    PERIPHERAL_CLOCK_DAC,\r\n    PERIPHERAL_CLOCK_I2S,\r\n    PERIPHERAL_CLOCK_PWM,\r\n    PERIPHERAL_CLOCK_CAM,\r\n    PERIPHERAL_CLOCK_TIMER0,\r\n    PERIPHERAL_CLOCK_TIMER1,\r\n    PERIPHERAL_CLOCK_WDT,\r\n};\r\n\r\nvoid system_clock_init(void);\r\nvoid peripheral_clock_init(void);\r\nuint32_t system_clock_get(enum system_clock_type type);\r\nuint32_t peripheral_clock_get(enum peripheral_clock_type type);\r\nvoid system_mtimer_clock_init(void);\r\nvoid system_mtimer_clock_reinit(void);\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_common.h",
    "content": "/**\r\n * @file hal_common.h\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n#ifndef __HAL_COMMON__H__\r\n#define __HAL_COMMON__H__\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n#include \"bl702_common.h\"\r\n\r\nvoid cpu_global_irq_enable(void);\r\nvoid cpu_global_irq_disable(void);\r\nvoid hal_por_reset(void);\r\nvoid hal_system_reset(void);\r\nvoid hal_cpu_reset(void);\r\nvoid hal_get_chip_id(uint8_t chip_id[8]);\r\nvoid hal_enter_usb_iap(void);\r\nvoid hal_jump2app(uint32_t flash_offset);\r\nint hal_get_trng_seed(void);\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_dma.h",
    "content": "/**\n * @file hal_dma.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef __HAL_DMA__H__\n#define __HAL_DMA__H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"hal_common.h\"\n#include \"drv_device.h\"\n#include \"bl702_config.h\"\n\n#define DEVICE_CTRL_DMA_CHANNEL_GET_STATUS 0x10\n#define DEVICE_CTRL_DMA_CHANNEL_START      0x11\n#define DEVICE_CTRL_DMA_CHANNEL_STOP       0x12\n#define DEVICE_CTRL_DMA_CHANNEL_UPDATE     0x13\n#define DEVICE_CTRL_DMA_CONFIG_SI          0x14\n#define DEVICE_CTRL_DMA_CONFIG_DI          0x15\n\nenum dma_index_type {\n#ifdef BSP_USING_DMA0_CH0\n    DMA0_CH0_INDEX,\n#endif\n#ifdef BSP_USING_DMA0_CH1\n    DMA0_CH1_INDEX,\n#endif\n#ifdef BSP_USING_DMA0_CH2\n    DMA0_CH2_INDEX,\n#endif\n#ifdef BSP_USING_DMA0_CH3\n    DMA0_CH3_INDEX,\n#endif\n#ifdef BSP_USING_DMA0_CH4\n    DMA0_CH4_INDEX,\n#endif\n#ifdef BSP_USING_DMA0_CH5\n    DMA0_CH5_INDEX,\n#endif\n#ifdef BSP_USING_DMA0_CH6\n    DMA0_CH6_INDEX,\n#endif\n#ifdef BSP_USING_DMA0_CH7\n    DMA0_CH7_INDEX,\n#endif\n    DMA_MAX_INDEX\n};\n\n#define dma_channel_start(dev)        device_control(dev, DEVICE_CTRL_DMA_CHANNEL_START, NULL)\n#define dma_channel_stop(dev)         device_control(dev, DEVICE_CTRL_DMA_CHANNEL_STOP, NULL)\n#define dma_channel_update(dev, list) device_control(dev, DEVICE_CTRL_DMA_CHANNEL_UPDATE, list)\n#define dma_channel_check_busy(dev)   device_control(dev, DEVICE_CTRL_DMA_CHANNEL_GET_STATUS, NULL)\n\n#define DMA_LLI_ONCE_MODE  0\n#define DMA_LLI_CYCLE_MODE 1\n\n#define DMA_ADDR_INCREMENT_DISABLE 0 /*!< Addr increment mode disable */\n#define DMA_ADDR_INCREMENT_ENABLE  1 /*!< Addr increment mode enable  */\n\n#define DMA_TRANSFER_WIDTH_8BIT  0\n#define DMA_TRANSFER_WIDTH_16BIT 1\n#define DMA_TRANSFER_WIDTH_32BIT 2\n\n#define DMA_BURST_INCR1  0\n#define DMA_BURST_INCR4  1\n#define DMA_BURST_INCR8  2\n#define DMA_BURST_INCR16 3\n\n#define DMA_ADDR_UART0_TDR (0x4000A000 + 0x88)\n#define DMA_ADDR_UART0_RDR (0x4000A000 + 0x8C)\n#define DMA_ADDR_UART1_TDR (0x4000A100 + 0x88)\n#define DMA_ADDR_UART1_RDR (0x4000A100 + 0x8C)\n#define DMA_ADDR_I2C_TDR   (0x4000A300 + 0x88)\n#define DMA_ADDR_I2C_RDR   (0x4000A300 + 0x8C)\n#define DMA_ADDR_SPI_TDR   (0x4000A200 + 0x88)\n#define DMA_ADDR_SPI_RDR   (0x4000A200 + 0x8C)\n#define DMA_ADDR_I2S_TDR   (0x4000AA00 + 0x88)\n#define DMA_ADDR_I2S_RDR   (0x4000AA00 + 0x8C)\n#define DMA_ADDR_ADC_RDR   (0x40002000 + 0x04)\n#define DMA_ADDR_DAC_TDR   (0x40002000 + 0X48)\n\n#define DMA_REQUEST_NONE     0x00000000 /*!< DMA request peripheral:None */\n#define DMA_REQUEST_UART0_RX 0x00000000 /*!< DMA request peripheral:UART0 RX */\n#define DMA_REQUEST_UART0_TX 0x00000001 /*!< DMA request peripheral:UART0 TX */\n#define DMA_REQUEST_UART1_RX 0x00000002 /*!< DMA request peripheral:UART1 RX */\n#define DMA_REQUEST_UART1_TX 0x00000003 /*!< DMA request peripheral:UART1 TX */\n#define DMA_REQUEST_I2C0_RX  0x00000006 /*!< DMA request peripheral:I2C RX */\n#define DMA_REQUEST_I2C0_TX  0x00000007 /*!< DMA request peripheral:I2C TX */\n#define DMA_REQUEST_SPI0_RX  0x0000000A /*!< DMA request peripheral:SPI RX */\n#define DMA_REQUEST_SPI0_TX  0x0000000B /*!< DMA request peripheral:SPI TX */\n#define DMA_REQUEST_I2S_RX   0x00000014 /*!< DMA request peripheral:I2S RX */\n#define DMA_REQUEST_I2S_TX   0x00000015 /*!< DMA request peripheral:I2S TX */\n#define DMA_REQUEST_ADC0     0x00000016 /*!< DMA request peripheral:ADC0 */\n#define DMA_REQUEST_DAC0     0x00000017 /*!< DMA request peripheral:DAC0 */\n#define DMA_REQUEST_USB_EP0  0x00000018 /*!< DMA request peripheral:USB EP0*/\n#define DMA_REQUEST_USB_EP1  0x00000019 /*!< DMA request peripheral:USB EP1*/\n#define DMA_REQUEST_USB_EP2  0x0000001A /*!< DMA request peripheral:USB EP2*/\n#define DMA_REQUEST_USB_EP3  0x0000001B /*!< DMA request peripheral:USB EP3*/\n#define DMA_REQUEST_USB_EP4  0x0000001C /*!< DMA request peripheral:USB EP4*/\n#define DMA_REQUEST_USB_EP5  0x0000001D /*!< DMA request peripheral:USB EP5*/\n#define DMA_REQUEST_USB_EP6  0x0000001E /*!< DMA request peripheral:USB EP6*/\n#define DMA_REQUEST_USB_EP7  0x0000001F /*!< DMA request peripheral:USB EP7 */\n\n/**\n *  @brief DMA transfer direction type definition\n */\ntypedef enum {\n    DMA_MEMORY_TO_MEMORY = 0, /*!< DMA transfer type:memory to memory */\n    DMA_MEMORY_TO_PERIPH,     /*!< DMA transfer type:memory to peripheral */\n    DMA_PERIPH_TO_MEMORY,     /*!< DMA transfer type:peripheral to memory */\n    DMA_PERIPH_TO_PERIPH,     /*!< DMA transfer type:peripheral to peripheral */\n} dma_transfer_dir_type;\n\ntypedef union {\n    struct\n    {\n        uint32_t TransferSize : 12; /* [11: 0],        r/w,        0x0 */\n        uint32_t SBSize       : 2;  /* [13:12],        r/w,        0x1 */\n        uint32_t dst_min_mode : 1;  /* [   14],        r/w,        0x0 */\n        uint32_t DBSize       : 2;  /* [16:15],        r/w,        0x1 */\n        uint32_t dst_add_mode : 1;  /* [   17],        r/w,        0x0 */\n        uint32_t SWidth       : 2;  /* [19:18],        r/w,        0x2 */\n        uint32_t reserved_20  : 1;  /* [   20],       rsvd,        0x0 */\n        uint32_t DWidth       : 2;  /* [22:21],        r/w,        0x2 */\n        uint32_t fix_cnt      : 2;  /* [24:23],        r/w,        0x0 */\n        uint32_t SLargerD     : 1;  /* [   25],        r/w,        0x0 */\n        uint32_t SI           : 1;  /* [   26],        r/w,        0x1 */\n        uint32_t DI           : 1;  /* [   27],        r/w,        0x1 */\n        uint32_t Prot         : 3;  /* [30:28],        r/w,        0x0 */\n        uint32_t I            : 1;  /* [   31],        r/w,        0x0 */\n    } bits;\n    uint32_t WORD;\n} dma_control_data_t;\n\ntypedef struct\n{\n    uint32_t src_addr;\n    uint32_t dst_addr;\n    uint32_t nextlli;\n    dma_control_data_t cfg;\n} dma_lli_ctrl_t;\n\ntypedef struct dma_device {\n    struct device parent;\n    uint8_t id;\n    uint8_t ch;\n    uint8_t transfer_mode;\n    uint8_t direction;\n    uint32_t src_req;\n    uint32_t dst_req;\n    uint8_t src_addr_inc;\n    uint8_t dst_addr_inc;\n    uint8_t src_burst_size;\n    uint8_t dst_burst_size;\n    uint8_t src_width;\n    uint8_t dst_width;\n    uint8_t intr; /* private param */\n    dma_lli_ctrl_t *lli_cfg;/* private param*/\n} dma_device_t;\n\n#define DMA_DEV(dev) ((dma_device_t *)dev)\n\nint dma_register(enum dma_index_type index, const char *name);\nint dma_reload(struct device *dev, uint32_t src_addr, uint32_t dst_addr, uint32_t transfer_size);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_flash.h",
    "content": "/**\r\n * @file hal_flash.h\r\n * @brief\r\n *\r\n * Copyright 2019-2030 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n#ifndef __HAL_FLASH__H__\r\n#define __HAL_FLASH__H__\r\n\r\n#ifdef __cplusplus\r\nextern \"C\"{\r\n#endif\r\n\r\n#include \"hal_common.h\"\r\n#include \"bl702_sflash.h\"\r\n#include \"bl702_sflash_ext.h\"\r\n\r\n#define FLASH_NOT_DETECT  0x10\r\n#define BL_FLASH_XIP_BASE BL702_FLASH_XIP_BASE\r\n\r\nuint32_t flash_get_jedecid(void);\r\nBL_Err_Type flash_init(void);\r\nBL_Err_Type flash_read_jedec_id(uint8_t *data);\r\nBL_Err_Type flash_read_via_xip(uint32_t addr, uint8_t *data, uint32_t len);\r\nBL_Err_Type flash_read(uint32_t addr, uint8_t *data, uint32_t len);\r\nBL_Err_Type flash_write(uint32_t addr, uint8_t *data, uint32_t len);\r\nBL_Err_Type flash_erase(uint32_t startaddr, uint32_t len);\r\nBL_Err_Type flash_set_cache(uint8_t cont_read, uint8_t cache_enable, uint8_t cache_way_disable, uint32_t flash_offset);\r\nBL_Err_Type flash_get_cfg(uint8_t **cfg_addr, uint32_t *len);\r\nBL_Err_Type flash_write_protect_set(SFlash_Protect_Kh25v40_Type protect);\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n#endif\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_gpio.h",
    "content": "/**\n * @file hal_gpio.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef __HAL_GPIO__H__\n#define __HAL_GPIO__H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"bl702_config.h\"\n#include \"drv_device.h\"\n#include \"hal_common.h\"\n\nenum gpio_pin_type {\n  GPIO_PIN_0 = 0,\n  GPIO_PIN_1,\n  GPIO_PIN_2,\n  GPIO_PIN_3,\n  GPIO_PIN_4,\n  GPIO_PIN_5,\n  GPIO_PIN_6,\n  GPIO_PIN_7,\n  GPIO_PIN_8,\n  GPIO_PIN_9,\n  GPIO_PIN_10,\n  GPIO_PIN_11,\n  GPIO_PIN_12,\n  GPIO_PIN_13,\n  GPIO_PIN_14,\n  GPIO_PIN_15,\n  GPIO_PIN_16,\n  GPIO_PIN_17,\n  GPIO_PIN_18,\n  GPIO_PIN_19,\n  GPIO_PIN_20,\n  GPIO_PIN_21,\n  GPIO_PIN_22,\n  GPIO_PIN_23,\n  GPIO_PIN_24,\n  GPIO_PIN_25,\n  GPIO_PIN_26,\n  GPIO_PIN_27,\n  GPIO_PIN_28,\n  GPIO_PIN_29,\n  GPIO_PIN_30,\n  GPIO_PIN_31,\n  GPIO_PIN_MAX,\n};\n\n#define GPIO_OUTPUT_MODE                   0\n#define GPIO_OUTPUT_PP_MODE                1\n#define GPIO_OUTPUT_PD_MODE                2\n#define GPIO_INPUT_MODE                    3\n#define GPIO_INPUT_PU_MODE                 4\n#define GPIO_INPUT_PD_MODE                 5\n#define GPIO_ASYNC_RISING_TRIGER_INT_MODE  6\n#define GPIO_ASYNC_FALLING_TRIGER_INT_MODE 7\n#define GPIO_ASYNC_HIGH_LEVEL_INT_MODE     8\n#define GPIO_ASYNC_LOW_LEVEL_INT_MODE      9\n#define GPIO_SYNC_RISING_TRIGER_INT_MODE   10\n#define GPIO_SYNC_FALLING_TRIGER_INT_MODE  11\n#define GPIO_SYNC_HIGH_LEVEL_INT_MODE      12\n#define GPIO_SYNC_LOW_LEVEL_INT_MODE       13\n#define GPIO_HZ_MODE                       14\n\nvoid gpio_set_mode(uint32_t pin, uint32_t mode);\nvoid gpio_write(uint32_t pin, uint32_t value);\nvoid gpio_toggle(uint32_t pin);\nint  gpio_read(uint32_t pin);\nvoid gpio_attach_irq(uint32_t pin, void (*cbfun)(uint32_t pin));\nvoid gpio_irq_enable(uint32_t pin, uint8_t enabled);\n\n#ifdef __cplusplus\n}\n#endif\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_i2c.h",
    "content": "/**\n * @file hal_i2c.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef __HAL_I2C__H__\n#define __HAL_I2C__H__\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif\n\n#include \"hal_common.h\"\n#include \"drv_device.h\"\n#include \"bl702_config.h\"\n\nenum i2c_index_type {\n#ifdef BSP_USING_I2C0\n    I2C0_INDEX,\n#endif\n    I2C_MAX_INDEX\n};\n\n#define I2C_WR      0x0000\n#define I2C_RD      0x0001\n#define I2C_RW_MASK 0x0001\n\n#define SUB_ADDR_0BYTE 0x0010\n#define SUB_ADDR_1BYTE 0x0020\n#define SUB_ADDR_2BYTE 0x0040\n\n#define I2C_HW_MODE 0\n#define I2C_SW_MODE 1\n\ntypedef struct i2c_msg {\n    uint8_t slaveaddr;\n    uint32_t subaddr;\n    uint16_t flags;\n    uint16_t len;\n    uint8_t *buf;\n} i2c_msg_t;\n\ntypedef struct i2c_device {\n    struct device parent;\n    uint8_t id;\n    uint8_t mode;\n    uint32_t phase;\n} i2c_device_t;\n\n#define I2C_DEV(dev) ((i2c_device_t *)dev)\n\nint i2c_register(enum i2c_index_type index, const char *name);\nint i2c_transfer(struct device *dev, i2c_msg_t msgs[], uint32_t num);\n\n#ifdef __cplusplus\n}\n#endif\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_mtimer.h",
    "content": "/**\n * @file hal_mtimer.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef __HAL_MTIMER__H__\n#define __HAL_MTIMER__H__\n\n#include \"stdint.h\"\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif\n\nvoid mtimer_set_alarm_time(uint64_t ticks, void (*interruptfun)(void));\nuint64_t mtimer_get_time_ms();\nuint64_t mtimer_get_time_us();\nvoid mtimer_delay_ms(uint32_t time);\nvoid mtimer_delay_us(uint32_t time);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_pm.h",
    "content": "/**\r\n * @file hal_pm.h\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n#ifndef __HAL_PM__H__\r\n#define __HAL_PM__H__\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n#include \"hal_common.h\"\r\n\r\nenum pm_pds_sleep_level {\r\n    PM_PDS_LEVEL_0,\r\n    PM_PDS_LEVEL_1,\r\n    PM_PDS_LEVEL_2,\r\n    PM_PDS_LEVEL_3,\r\n    PM_PDS_LEVEL_4, /*do not recommend to use*/\r\n    PM_PDS_LEVEL_5, /*do not recommend to use*/\r\n    PM_PDS_LEVEL_6, /*do not recommend to use*/\r\n    PM_PDS_LEVEL_7, /*do not recommend to use*/\r\n    PM_PDS_LEVEL_31 = 31,\r\n};\r\n\r\nenum pm_hbn_sleep_level {\r\n    PM_HBN_LEVEL_0,\r\n    PM_HBN_LEVEL_1,\r\n    PM_HBN_LEVEL_2,\r\n};\r\n\r\nenum pm_event_type {\r\n    PM_HBN_WAKEUP_EVENT_NONE,\r\n    PM_HBN_GPIO9_WAKEUP_EVENT,\r\n    PM_HBN_GPIO10_WAKEUP_EVENT,\r\n    PM_HBN_GPIO11_WAKEUP_EVENT,\r\n    PM_HBN_GPIO12_WAKEUP_EVENT,\r\n    PM_HBN_RTC_WAKEUP_EVENT,\r\n    PM_HBN_BOR_WAKEUP_EVENT,\r\n    PM_HBN_ACOMP0_WAKEUP_EVENT,\r\n    PM_HBN_ACOMP1_WAKEUP_EVENT,\r\n};\r\n\r\nvoid pm_pds_mode_enter(enum pm_pds_sleep_level pds_level, uint32_t sleep_time);\r\nvoid pm_hbn_mode_enter(enum pm_hbn_sleep_level hbn_level, uint8_t sleep_time);\r\nvoid pm_hbn_enter_again(bool reset);\r\nvoid pm_set_wakeup_callback(void (*wakeup_callback)(void));\r\nenum pm_event_type pm_get_wakeup_event(void);\r\nvoid pm_bor_init(void);\r\nvoid pm_hbn_out0_irq_register(void);\r\nvoid pm_hbn_out1_irq_register(void);\r\nvoid pm_irq_callback(enum pm_event_type event);\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_pm_util.h",
    "content": "/**\n * @file hal_pm_util.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef __HAL_PM_UTIL_H__\n#define __HAL_PM_UTIL_H__\n\n#include \"hal_common.h\"\n\n#define ATTR_PDS_RAM_SECTION       __attribute__((section(\".pds_ram_code\")))\n#define ATTR_PDS_RAM_CONST_SECTION __attribute__((section(\".pds_ram_data\")))\n\nuint32_t hal_pds_enter_with_time_compensation(uint32_t pdsLevel, uint32_t pdsSleepCycles);\nvoid pm_set_hardware_recovery_callback(void (*hardware_recovery_cb)(void));\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_rtc.h",
    "content": "/**\n * @file hal_rtc.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef __HAL_RTC__H__\n#define __HAL_RTC__H__\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif\n\n#include \"hal_common.h\"\n\nvoid rtc_init(uint64_t sleep_time);\nvoid rtc_set_timestamp(uint64_t time_stamp);\nuint64_t rtc_get_timestamp(void);\n\n#ifdef __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_sec_aes.h",
    "content": "/**\n * @file hal_sec_aes.h\n * @brief\n *\n * Copyright 2019-2030 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef __HAL_SEC_AES__H__\n#define __HAL_SEC_AES__H__\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif\n\n#include \"hal_common.h\"\n\ntypedef enum {\n    SEC_AES_CBC,\n    SEC_AES_CTR,\n    SEC_AES_ECB\n} sec_aes_type;\n\ntypedef enum {\n    SEC_AES_KEY_128,\n    SEC_AES_KEY_256,\n    SEC_AES_KEY_192\n} sec_aes_key_type;\n\ntypedef struct sec_aes_handle_t {\n    sec_aes_type aes_type;\n    sec_aes_key_type key_type;\n} sec_aes_handle_t;\n\ntypedef enum {\n    SEC_AES_DIR_ENCRYPT,\n    SEC_AES_DIR_DECRYPT\n} sec_aes_dir_type;\n\nint sec_aes_init(sec_aes_handle_t *handle, sec_aes_type aes_tye, sec_aes_key_type key_type);\nint sec_aes_setkey(sec_aes_handle_t *handle, const uint8_t *key, uint8_t key_len, const uint8_t *nonce, uint8_t dir);\nint sec_aes_encrypt(sec_aes_handle_t *handle, const uint8_t *in, uint32_t len, size_t offset, uint8_t *out);\nint sec_aes_decrypt(sec_aes_handle_t *handle, const uint8_t *in, uint32_t len, size_t offset, uint8_t *out);\nint sec_aes_deinit(sec_aes_handle_t *handle);\n#ifdef __cplusplus\n}\n#endif\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_sec_dsa.h",
    "content": "/**\n * @file hal_sec_dsa.h\n * @brief\n *\n * Copyright 2019-2030 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef __HAL_SEC_DSA__H__\n#define __HAL_SEC_DSA__H__\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif\n\n#include \"hal_common.h\"\n\ntypedef struct sec_dsa_crt_cfg_tag {\n    uint32_t *dP;\n    uint32_t *dQ;\n    uint32_t *qInv;\n    uint32_t *p;\n    uint32_t *invR_p;\n    uint32_t *primeN_p;\n    uint32_t *q;\n    uint32_t *invR_q;\n    uint32_t *primeN_q;\n} sec_dsa_crt_cfg_t;\n\ntypedef struct\n{\n    uint32_t size;\n    uint32_t crtSize;\n    uint32_t *n;\n    uint32_t *e;\n    uint32_t *d;\n    sec_dsa_crt_cfg_t crtCfg;\n} sec_dsa_handle_t;\n\nint sec_dsa_init(sec_dsa_handle_t *handle, uint32_t size);\nint sec_dsa_mexp_binary(uint32_t size, const uint32_t *a, const uint32_t *b, const uint32_t *c, uint32_t *r);\nint sec_dsa_mexp_mont(uint32_t size, uint32_t *a, uint32_t *b, uint32_t *c, uint32_t *invR_c, uint32_t *primeN_c, uint32_t *r);\nint sec_dsa_decrypt_crt(uint32_t size, uint32_t *c, sec_dsa_crt_cfg_t *crtCfg, uint32_t *d, uint32_t *r);\nint sec_dsa_sign(sec_dsa_handle_t *handle, const uint32_t *hash, uint32_t hashLenInWord, uint32_t *s);\nint sec_dsa_verify(sec_dsa_handle_t *handle, const uint32_t *hash, uint32_t hashLenInWord, const uint32_t *s);\n#ifdef __cplusplus\n}\n#endif\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_sec_ecdsa.h",
    "content": "/**\n * @file hal_sec_ecdsa.h\n * @brief\n *\n * Copyright 2019-2030 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef __HAL_SEC_ECDSA__H__\n#define __HAL_SEC_ECDSA__H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"hal_common.h\"\n\ntypedef enum {\n    ECP_SECP256R1 = 0,\n    ECP_SECP256K1 = 1,\n    ECP_TYPE_MAX = 2,\n} sec_ecp_type;\n\ntypedef struct\n{\n    sec_ecp_type ecpId;\n    uint32_t *privateKey;\n    uint32_t *publicKeyx;\n    uint32_t *publicKeyy;\n} sec_ecdsa_handle_t;\n\ntypedef struct\n{\n    sec_ecp_type ecpId;\n} sec_ecdh_handle_t;\n\nint sec_ecdsa_init(sec_ecdsa_handle_t *handle, sec_ecp_type id);\nint sec_ecdsa_deinit(sec_ecdsa_handle_t *handle);\nint sec_ecdsa_sign(sec_ecdsa_handle_t *handle, const uint32_t *random_k, const uint32_t *hash, uint32_t hashLenInWord, uint32_t *r, uint32_t *s);\nint sec_ecdsa_verify(sec_ecdsa_handle_t *handle, const uint32_t *hash, uint32_t hashLen, const uint32_t *r, const uint32_t *s);\nint sec_ecdsa_get_private_key(sec_ecdsa_handle_t *handle, uint32_t *private_key);\nint sec_ecdsa_get_public_key(sec_ecdsa_handle_t *handle, const uint32_t *private_key, const uint32_t *pRx, const uint32_t *pRy);\n\nint sec_ecdh_init(sec_ecdh_handle_t *handle, sec_ecp_type id);\nint sec_ecdh_deinit(sec_ecdh_handle_t *handle);\nint sec_ecdh_get_encrypt_key(sec_ecdh_handle_t *handle, const uint32_t *pkX, const uint32_t *pkY, const uint32_t *private_key, const uint32_t *pRx, const uint32_t *pRy);\nint sec_ecdh_get_public_key(sec_ecdh_handle_t *handle, const uint32_t *private_key, const uint32_t *pRx, const uint32_t *pRy);\nint sec_ecc_get_random_value(uint32_t *randomData, uint32_t *maxRef, uint32_t size);\nint sec_eng_trng_enable(void);\nvoid sec_eng_trng_disable(void);\nint sec_eng_trng_read(uint8_t data[32]);\n#ifdef __cplusplus\n}\n#endif\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_sec_hash.h",
    "content": "/**\n * @file hal_sec_hash.h\n * @brief\n *\n * Copyright 2019-2030 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef __HAL_SEC_HASH__H__\n#define __HAL_SEC_HASH__H__\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif\n\n#include \"hal_common.h\"\n#include \"drv_device.h\"\n#include \"bl702_config.h\"\n\nenum sec_hash_index_type {\n    SEC_HASH0_INDEX,\n    SEC_HASH_MAX_INDEX\n};\n\nenum sec_hash_type {\n    SEC_HASH_SHA1,\n    SEC_HASH_SHA224,\n    SEC_HASH_SHA256,\n    SEC_HASH_SHA384,\n    SEC_HASH_SHA512,\n    SEC_HASH_UNKNOWN\n};\n\ntypedef struct sec_hash_device {\n    struct device parent;\n    uint32_t shaBuf[64 / 4];     /*!< Data not processed but in this temp buffer */\n    uint32_t shaPadding[64 / 4]; /*!< Padding data */\n    uint8_t type;                /*!< Sha has feed data */\n} sec_hash_device_t;\n\ntypedef struct\n{\n    uint32_t shaBuf[64 / 4];     /*!< Data not processed but in this temp buffer */\n    uint32_t shaPadding[64 / 4]; /*!< Padding data */\n    uint8_t type;                /*!< Sha has feed data */\n} sec_hash_handle_t;\n\nint sec_hash_init(sec_hash_handle_t *handle, uint8_t type);\nint sec_hash_deinit(sec_hash_handle_t *handle);\nint sec_hash_update(sec_hash_handle_t *handle, const void *buffer, uint32_t size);\nint sec_hash_finish(sec_hash_handle_t *handle, void *buffer);\nint sec_hash_sha256_register(enum sec_hash_index_type index, const char *name);\nint sec_hash_sha224_register(enum sec_hash_index_type index, const char *name);\n\n#ifdef __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_uart.h",
    "content": "/**\n * @file hal_uart.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef __HAL_UART__H__\n#define __HAL_UART__H__\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif\n\n#include \"hal_common.h\"\n#include \"drv_device.h\"\n#include \"bl702_config.h\"\n\n#define UART_FIFO_LEN 128\n\n#define DEVICE_CTRL_UART_GET_TX_FIFO 0x10\n#define DEVICE_CTRL_UART_GET_RX_FIFO 0x11\n#define DEVICE_CTRL_UART_CLEAR_TX_FIFO 0x12\n#define DEVICE_CTRL_UART_CLEAR_RX_FIFO 0x13\n\nenum uart_index_type {\n#ifdef BSP_USING_UART0\n    UART0_INDEX,\n#endif\n#ifdef BSP_USING_UART1\n    UART1_INDEX,\n#endif\n    UART_MAX_INDEX\n};\n\n/*!\n *  @brief    UART data length settings\n *\n *  This enumeration defines the UART data lengths.\n */\ntypedef enum {\n    UART_DATA_LEN_5 = 0, /*!< Data length is 5 bits */\n    UART_DATA_LEN_6 = 1, /*!< Data length is 6 bits */\n    UART_DATA_LEN_7 = 2, /*!< Data length is 7 bits */\n    UART_DATA_LEN_8 = 3  /*!< Data length is 8 bits */\n} uart_databits_t;\n\n/*!\n *  @brief    UART stop bit settings\n *\n *  This enumeration defines the UART stop bits.\n */\ntypedef enum {\n    UART_STOP_ZERO_D_FIVE = 0, /*!< 0.5 stop bit */\n    UART_STOP_ONE = 1,         /*!< 1 stop bit */\n    UART_STOP_ONE_D_FIVE = 2,  /*!< 1.5 stop bit */\n    UART_STOP_TWO = 3          /*!< 2 stop bits */\n} uart_stopbits_t;\n\n/*!\n *  @brief    UART parity type settings\n *\n *  This enumeration defines the UART parity types.\n */\ntypedef enum {\n    UART_PAR_NONE = 0, /*!< No parity */\n    UART_PAR_ODD = 1,  /*!< Parity bit is odd */\n    UART_PAR_EVEN = 2, /*!< Parity bit is even */\n} uart_parity_t;\n\nenum uart_event_type {\n    UART_EVENT_TX_END,\n    UART_EVENT_TX_FIFO,\n    UART_EVENT_RX_END,\n    UART_EVENT_RX_FIFO,\n    UART_EVENT_RTO,\n    UART_EVENT_PCE,\n    UART_EVENT_TX_FER,\n    UART_EVENT_RX_FER,\n    UART_EVENT_UNKNOWN\n};\n\nenum uart_it_type {\n    UART_TX_END_IT = 1 << 0,\n    UART_RX_END_IT = 1 << 1,\n    UART_TX_FIFO_IT = 1 << 2,\n    UART_RX_FIFO_IT = 1 << 3,\n    UART_RTO_IT = 1 << 4,\n    UART_PCE_IT = 1 << 5,\n    UART_TX_FER_IT = 1 << 6,\n    UART_RX_FER_IT = 1 << 7,\n    UART_ALL_IT = 1 << 8\n};\n\ntypedef struct\n{\n    uint32_t baudrate;\n    uart_databits_t databits;\n    uart_stopbits_t stopbits;\n    uart_parity_t parity;\n} uart_param_cfg_t;\n\ntypedef struct uart_device {\n    struct device parent;\n    uint8_t id;\n    uint32_t baudrate;\n    uart_databits_t databits;\n    uart_stopbits_t stopbits;\n    uart_parity_t parity;\n    uint8_t fifo_threshold;\n    void *tx_dma;\n    void *rx_dma;\n} uart_device_t;\n\n#define UART_DEV(dev) ((uart_device_t *)dev)\n\nint uart_register(enum uart_index_type index, const char *name);\n#ifdef __cplusplus\n}\n#endif\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_usb.h",
    "content": "/**\n * @file hal_usb.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#ifndef __HAL_USB__H__\n#define __HAL_USB__H__\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif\n\n#include \"hal_common.h\"\n#include \"ring_buffer.h\"\n#include \"drv_device.h\"\n#include \"bl702_config.h\"\n\n#define DEVICE_CTRL_USB_DC_SET_ACK            0X10\n#define DEVICE_CTRL_USB_DC_ENUM_ON            0X11\n#define DEVICE_CTRL_USB_DC_ENUM_OFF           0X12\n#define DEVICE_CTRL_USB_DC_GET_EP_TX_FIFO_CNT 0x13\n#define DEVICE_CTRL_USB_DC_GET_EP_RX_FIFO_CNT 0x14\n#define DEVICE_CTRL_USB_DC_SET_TX_DMA         0x15\n#define DEVICE_CTRL_USB_DC_SET_RX_DMA         0x16\n\nenum usb_index_type {\n#ifdef BSP_USING_USB\n    USB_INDEX,\n#endif\n    USB_MAX_INDEX\n};\n\n/**\n * USB endpoint Transfer Type mask.\n */\n#define USBD_EP_TYPE_CTRL 0\n#define USBD_EP_TYPE_ISOC 1\n#define USBD_EP_TYPE_BULK 2\n#define USBD_EP_TYPE_INTR 3\n#define USBD_EP_TYPE_MASK 3\n\n/**\n * USB endpoint direction and number.\n */\n#define USB_EP_DIR_MASK 0x80U\n#define USB_EP_DIR_IN   0x80U\n#define USB_EP_DIR_OUT  0x00U\n\n#define USB_EP_OUT_MSK 0x7FU\n#define USB_EP_IN_MSK  0x80U\n\n/** Get endpoint index (number) from endpoint address */\n#define USB_EP_GET_IDX(ep) ((ep) & ~USB_EP_DIR_MASK)\n/** Get direction from endpoint address */\n#define USB_EP_GET_DIR(ep) ((ep)&USB_EP_DIR_MASK)\n/** Get endpoint address from endpoint index and direction */\n#define USB_EP_GET_ADDR(idx, dir) ((idx) | ((dir)&USB_EP_DIR_MASK))\n/** True if the endpoint is an IN endpoint */\n#define USB_EP_DIR_IS_IN(ep) (USB_EP_GET_DIR(ep) == USB_EP_DIR_IN)\n/** True if the endpoint is an OUT endpoint */\n#define USB_EP_DIR_IS_OUT(ep) (USB_EP_GET_DIR(ep) == USB_EP_DIR_OUT)\n\n#define USB_SET_EP_OUT(ep) (ep & USB_EP_OUT_MSK)\n#define USB_SET_EP_IN(ep)  (ep | USB_EP_IN_MSK)\n\n#define USB_OUT_EP_NUM 8\n#define USB_IN_EP_NUM  8\n\n#define USB_CTRL_EP_MPS        64 /**< maximum packet size (MPS) for EP 0 */\n#define USB_FS_MAX_PACKET_SIZE 64 /**< full speed MPS for bulk EP */\n\n/* Default USB control EP, always 0 and 0x80 */\n#define USB_CONTROL_OUT_EP0 0\n#define USB_CONTROL_IN_EP0  0x80\n\n#define USB_DC_EP_TYPE_CTRL 0x5 /*0*/\n#define USB_DC_EP_TYPE_ISOC 0x2 /*1*/\n#define USB_DC_EP_TYPE_BULK 0x4 /*2*/\n#define USB_DC_EP_TYPE_INTR 0x0 /*3*/\n\n#define USB_DC_EP1_IN_DR  (0x4000D800 + 0x118)\n#define USB_DC_EP1_OUT_DR (0x4000D800 + 0x11c)\n#define USB_DC_EP2_IN_DR  (0x4000D800 + 0x128)\n#define USB_DC_EP2_OUT_DR (0x4000D800 + 0x12c)\n#define USB_DC_EP3_IN_DR  (0x4000D800 + 0x138)\n#define USB_DC_EP3_OUT_DR (0x4000D800 + 0x13c)\n#define USB_DC_EP4_IN_DR  (0x4000D800 + 0x148)\n#define USB_DC_EP4_OUT_DR (0x4000D800 + 0x14c)\n#define USB_DC_EP5_IN_DR  (0x4000D800 + 0x158)\n#define USB_DC_EP5_OUT_DR (0x4000D800 + 0x15c)\n#define USB_DC_EP6_IN_DR  (0x4000D800 + 0x168)\n#define USB_DC_EP6_OUT_DR (0x4000D800 + 0x16c)\n#define USB_DC_EP7_IN_DR  (0x4000D800 + 0x178)\n#define USB_DC_EP7_OUT_DR (0x4000D800 + 0x17c)\n\nenum usb_dc_event_type {\n    /** USB error reported by the controller */\n    USB_DC_EVENT_ERROR,\n    /** USB reset */\n    USB_DC_EVENT_RESET,\n    /** Start of Frame received */\n    USB_DC_EVENT_SOF,\n    /** USB connection established, hardware enumeration is completed */\n    USB_DC_EVENT_CONNECTED,\n    /** USB configuration done */\n    USB_DC_EVENT_CONFIGURED,\n    /** USB connection suspended by the HOST */\n    USB_DC_EVENT_SUSPEND,\n    /** USB connection lost */\n    USB_DC_EVENT_DISCONNECTED,\n    /** USB connection resumed by the HOST */\n    USB_DC_EVENT_RESUME,\n\n    /** USB interface selected */\n    USB_DC_EVENT_SET_INTERFACE,\n    /** USB interface selected */\n    USB_DC_EVENT_SET_REMOTE_WAKEUP,\n    /** USB interface selected */\n    USB_DC_EVENT_CLEAR_REMOTE_WAKEUP,\n    /** Set Feature ENDPOINT_HALT received */\n    USB_DC_EVENT_SET_HALT,\n    /** Clear Feature ENDPOINT_HALT received */\n    USB_DC_EVENT_CLEAR_HALT,\n    /** setup packet received */\n    USB_DC_EVENT_SETUP_NOTIFY,\n    /** ep0 in packet received */\n    USB_DC_EVENT_EP0_IN_NOTIFY,\n    /** ep0 out packet received */\n    USB_DC_EVENT_EP0_OUT_NOTIFY,\n    /** ep in packet except ep0 received */\n    USB_DC_EVENT_EP_IN_NOTIFY,\n    /** ep out packet except ep0 received */\n    USB_DC_EVENT_EP_OUT_NOTIFY,\n    /** Initial USB connection status */\n    USB_DC_EVENT_UNKNOWN\n};\n\nenum usb_dc_ep_it_type {\n    USB_SOF_IT = 1 << 0,\n    USB_EP1_DATA_IN_IT = 1 << 10,\n    USB_EP1_DATA_OUT_IT = 1 << 11,\n    USB_EP2_DATA_IN_IT = 1 << 12,\n    USB_EP2_DATA_OUT_IT = 1 << 13,\n    USB_EP3_DATA_IN_IT = 1 << 14,\n    USB_EP3_DATA_OUT_IT = 1 << 15,\n    USB_EP4_DATA_IN_IT = 1 << 16,\n    USB_EP4_DATA_OUT_IT = 1 << 17,\n    USB_EP5_DATA_IN_IT = 1 << 18,\n    USB_EP5_DATA_OUT_IT = 1 << 19,\n    USB_EP6_DATA_IN_IT = 1 << 20,\n    USB_EP6_DATA_OUT_IT = 1 << 21,\n    USB_EP7_DATA_IN_IT = 1 << 22,\n    USB_EP7_DATA_OUT_IT = 1 << 23,\n};\n\nenum usb_error_type {\n    USB_DC_OK = 0,\n    USB_DC_EP_DIR_ERR = 1,\n    USB_DC_EP_EN_ERR = 2,\n    USB_DC_EP_TIMEOUT_ERR = 3,\n    USB_DC_ADDR_ERR = 4,\n    USB_DC_RB_SIZE_SMALL_ERR = 5,\n    USB_DC_ZLP_ERR = 6,\n};\n/**\n * @brief USB Endpoint Configuration.\n *\n * Structure containing the USB endpoint configuration.\n */\nstruct usb_dc_ep_cfg {\n    /** The number associated with the EP in the device\n     *  configuration structure\n     *       IN  EP = 0x80 | \\<endpoint number\\>\n     *       OUT EP = 0x00 | \\<endpoint number\\>\n     */\n    uint8_t ep_addr;\n    /** Endpoint max packet size */\n    uint16_t ep_mps;\n    /** Endpoint Transfer Type.\n     * May be Bulk, Interrupt, Control or Isochronous\n     */\n    uint8_t ep_type;\n};\n\n/*\n * USB endpoint  structure.\n */\ntypedef struct\n{\n    uint8_t ep_ena;\n    uint32_t is_stalled;\n    struct usb_dc_ep_cfg ep_cfg;\n} usb_dc_ep_state_t;\n\ntypedef struct usb_dc_device {\n    struct device parent;\n    uint8_t id;\n    usb_dc_ep_state_t in_ep[8];  /*!< IN endpoint parameters             */\n    usb_dc_ep_state_t out_ep[8]; /*!< OUT endpoint parameters            */\n    void *tx_dma;\n    void *rx_dma;\n} usb_dc_device_t;\n\nint usb_dc_register(enum usb_index_type index, const char *name);\n\nint usb_dc_set_dev_address(const uint8_t addr);\nint usb_dc_ep_open(struct device *dev, const struct usb_dc_ep_cfg *ep_cfg);\nint usb_dc_ep_close(const uint8_t ep);\nint usb_dc_ep_set_stall(const uint8_t ep);\nint usb_dc_ep_clear_stall(const uint8_t ep);\nint usb_dc_ep_is_stalled(struct device *dev, const uint8_t ep, uint8_t *stalled);\nint usb_dc_ep_write(struct device *dev, const uint8_t ep, const uint8_t *data, uint32_t data_len, uint32_t *ret_bytes);\nint usb_dc_ep_read(struct device *dev, const uint8_t ep, uint8_t *data, uint32_t data_len, uint32_t *read_bytes);\nint usb_dc_receive_to_ringbuffer(struct device *dev, Ring_Buffer_Type *rb, uint8_t ep);\nint usb_dc_send_from_ringbuffer(struct device *dev, Ring_Buffer_Type *rb, uint8_t ep);\n#ifdef __cplusplus\n}\n#endif\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/inc/hal_wdt.h",
    "content": "/**\r\n * @file hal_wdt.h\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n#ifndef __HAL_WDT__H__\r\n#define __HAL_WDT__H__\r\n\r\n#ifdef __cplusplus\r\nextern \"C\"{\r\n#endif\r\n\r\n#include \"hal_common.h\"\r\n#include \"drv_device.h\"\r\n#include \"bl702_config.h\"\r\n\r\n#define DEVICE_CTRL_GET_WDT_COUNTER (0x10)\r\n#define DEVICE_CTRL_RST_WDT_COUNTER (0x11)\r\n#define DEVICE_CTRL_GET_RST_STATUS  (0x12)\r\n#define DEVICE_CTRL_CLR_RST_STATUS  (0x13)\r\n\r\nenum wdt_index_type {\r\n#ifdef BSP_USING_WDT\r\n    WDT_INDEX,\r\n#endif\r\n    WDT_MAX_INDEX\r\n};\r\n\r\nenum wdt_event_type {\r\n    WDT_EVENT,\r\n    WDT_EVENT_UNKNOWN\r\n};\r\n\r\ntypedef struct wdt_device {\r\n    struct device parent;\r\n    uint8_t id;\r\n    uint32_t wdt_timeout;\r\n} wdt_device_t;\r\n\r\n#define WDT_DEV(dev) ((wdt_device_t *)dev)\r\n\r\nint wdt_write(struct device *dev, uint32_t pos, const void *buffer, uint32_t size);\r\nint wdt_register(enum wdt_index_type index, const char *name);\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n#endif\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_boot2.c",
    "content": "#include \"hal_boot2.h\"\r\n#include \"bl702_ef_ctrl.h\"\r\n#include \"bl702_glb.h\"\r\n#include \"bl702_hbn.h\"\r\n#include \"bl702_xip_sflash.h\"\r\n#include \"hal_flash.h\"\r\n#include \"hal_gpio.h\"\r\n#include \"hal_sec_hash.h\"\r\n#include \"softcrc.h\"\r\n#include \"tzc_sec_reg.h\"\r\n\r\n/**\r\n * @brief boot2 custom\r\n *\r\n * @param None\r\n * @return uint32\r\n */\r\nuint32_t hal_boot2_custom(void) { return 0; }\r\n\r\n/**\r\n * @brief get efuse Boot2 config\r\n *\r\n * @param g_efuse_cfg\r\n * @param\r\n * @param\r\n * @return None\r\n */\r\nvoid hal_boot2_get_efuse_cfg(boot2_efuse_hw_config *efuse_cfg) {\r\n  uint32_t tmp;\r\n  uint32_t rootClk;\r\n  uint8_t  hdiv = 0, bdiv = 0;\r\n\r\n  /* save bclk fclk div and root clock sel */\r\n  bdiv    = GLB_Get_BCLK_Div();\r\n  hdiv    = GLB_Get_HCLK_Div();\r\n  rootClk = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n\r\n  /* change root clock to rc32m for efuse operation */\r\n  HBN_Set_ROOT_CLK_Sel(HBN_ROOT_CLK_RC32M);\r\n\r\n  /* Get sign and aes type*/\r\n  EF_Ctrl_Read_Secure_Boot((EF_Ctrl_Sign_Type *)efuse_cfg->sign, (EF_Ctrl_SF_AES_Type *)efuse_cfg->encrypted);\r\n  /* Get hash:aes key slot 0 and slot1*/\r\n  EF_Ctrl_Read_AES_Key(0, (uint32_t *)efuse_cfg->pk_hash_cpu0, 8);\r\n  EF_Ctrl_Read_Chip_ID(efuse_cfg->chip_id);\r\n  /* Get HBN check sign config */\r\n  EF_Ctrl_Read_Sw_Usage(0, &tmp);\r\n  efuse_cfg->hbn_check_sign = (tmp >> 22) & 0x01;\r\n\r\n  /* restore bclk fclk div and root clock sel */\r\n  GLB_Set_System_CLK_Div(hdiv, bdiv);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, rootClk);\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n}\r\n/**\r\n * @brief reset sec eng clock\r\n *\r\n * @return\r\n */\r\nvoid hal_boot2_reset_sec_eng(void) { GLB_AHB_Slave1_Reset(BL_AHB_SLAVE1_SEC); }\r\n\r\n/**\r\n * @brief system soft reset\r\n *\r\n * @return\r\n */\r\nvoid hal_boot2_sw_system_reset(void) { GLB_SW_System_Reset(); }\r\n\r\n/**\r\n * @brief\r\n *\r\n * @param flag\r\n * @param\r\n * @param\r\n * @return\r\n */\r\nvoid hal_boot2_set_psmode_status(uint32_t flag) { HBN_Set_Status_Flag(flag); }\r\n\r\n/**\r\n * @brief\r\n *\r\n * @param\r\n * @param\r\n * @param\r\n * @return flag\r\n */\r\nuint32_t hal_boot2_get_psmode_status(void) { return HBN_Get_Status_Flag(); }\r\n\r\n/**\r\n * @brief\r\n *\r\n * @param\r\n * @param\r\n * @param\r\n * @return user define flag\r\n */\r\nuint32_t hal_boot2_get_user_fw(void) { return BL_RD_WORD(HBN_BASE + HBN_RSV0_OFFSET); }\r\n\r\n/**\r\n * @brief clr user define flag\r\n *\r\n * @param\r\n * @param\r\n * @param\r\n * @return\r\n */\r\nvoid hal_boot2_clr_user_fw(void) {\r\n  uint32_t *p = (uint32_t *)(HBN_BASE + HBN_RSV0_OFFSET);\r\n  *p          = 0;\r\n}\r\n\r\n/**\r\n * @brief hal_boot2_sboot_finish\r\n *\r\n * @return\r\n */\r\nvoid ATTR_TCM_SECTION hal_boot2_sboot_finish(void) {\r\n  uint32_t tmp_val;\r\n\r\n  tmp_val = BL_RD_REG(TZC_SEC_BASE, TZC_SEC_TZC_ROM_CTRL);\r\n\r\n  tmp_val = BL_SET_REG_BITS_VAL(tmp_val, TZC_SEC_TZC_SBOOT_DONE, 0xf);\r\n\r\n  BL_WR_REG(TZC_SEC_BASE, TZC_SEC_TZC_ROM_CTRL, tmp_val);\r\n}\r\n\r\n/**\r\n * @brief hal_boot2_uart_gpio_init\r\n *\r\n * @return\r\n */\r\nvoid hal_boot2_uart_gpio_init(void) {\r\n  GLB_GPIO_Type gpios[] = {GPIO_PIN_14, GPIO_PIN_15};\r\n\r\n  GLB_GPIO_Func_Init(GPIO_FUN_UART, gpios, 2);\r\n\r\n  GLB_UART_Fun_Sel((GPIO_PIN_14 % 8), GLB_UART_SIG_FUN_UART0_TXD); //  GPIO_FUN_UART1_TX\r\n  GLB_UART_Fun_Sel((GPIO_PIN_15 % 8), GLB_UART_SIG_FUN_UART0_RXD);\r\n}\r\n\r\n/**\r\n * @brief hal_boot2_pll_init\r\n *\r\n * @return\r\n */\r\nvoid hal_boot2_debug_uart_gpio_init(void) {\r\n  GLB_GPIO_Type gpios[] = {GPIO_PIN_17};\r\n\r\n  GLB_GPIO_Func_Init(GPIO_FUN_UART, gpios, 1);\r\n\r\n  GLB_UART_Fun_Sel((GPIO_PIN_17 % 8), GLB_UART_SIG_FUN_UART1_TXD);\r\n}\r\n\r\n/**\r\n * @brief hal_boot2_debug_usb_port_init\r\n *\r\n * @return\r\n */\r\n#if HAL_BOOT2_SUPPORT_USB_IAP\r\nvoid hal_boot2_debug_usb_port_init(void) {\r\n  /* must do this , or usb can not be recognized */\r\n  cpu_global_irq_disable();\r\n  cpu_global_irq_enable();\r\n\r\n  GLB_GPIO_Type gpios[] = {GPIO_PIN_7, GPIO_PIN_8};\r\n  GLB_GPIO_Func_Init(GPIO_FUN_ANALOG, gpios, 2);\r\n}\r\n#endif\r\n\r\n/**\r\n * @brief hal_boot2_debug_uart_gpio_deinit\r\n *\r\n * @return\r\n */\r\nvoid hal_boot2_debug_uart_gpio_deinit(void) {\r\n  GLB_AHB_Slave1_Reset(BL_AHB_SLAVE1_UART0);\r\n  GLB_AHB_Slave1_Reset(BL_AHB_SLAVE1_UART1);\r\n  GLB_UART_Sig_Swap_Set(UART_SIG_SWAP_NONE);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Check bootheader crc\r\n                                                                                *\r\n                                                                                * @param  data: bootheader data pointer\r\n                                                                                *\r\n                                                                                * @return boot_error_code type\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic uint32_t hal_boot_check_bootheader(struct hal_bootheader_t *header) {\r\n  uint32_t crc_pass = 0;\r\n  uint32_t crc;\r\n\r\n  if (header->bootCfg.bval.crcIgnore == 1 && header->crc32 == HAL_BOOT2_DEADBEEF_VAL) {\r\n    // MSG(\"Crc ignored\\r\\n\");\r\n    crc_pass = 1;\r\n  } else {\r\n    crc = BFLB_Soft_CRC32((uint8_t *)header, sizeof(struct hal_bootheader_t) - sizeof(header->crc32));\r\n\r\n    if (header->crc32 == crc) {\r\n      crc_pass = 1;\r\n    }\r\n  }\r\n  return crc_pass;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Check if the input public key is the same as  burned in the efuse\r\n                                                                                *\r\n                                                                                * @param  g_boot_img_cfg: Boot image config pointer\r\n                                                                                * @param  data: Image data pointer\r\n                                                                                *\r\n                                                                                * @return boot_error_code type\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nint32_t hal_boot_parse_bootheader(boot2_image_config *boot_img_cfg, uint8_t *data) {\r\n  struct hal_bootheader_t *header   = (struct hal_bootheader_t *)data;\r\n  uint32_t                 crc_pass = 0;\r\n  uint32_t                 i        = 0;\r\n  uint32_t                *phash    = (uint32_t *)header->hash;\r\n\r\n  crc_pass = hal_boot_check_bootheader(header);\r\n\r\n  if (!crc_pass) {\r\n    // MSG_ERR(\"bootheader crc error\\r\\n\");\r\n    // blsp_dump_data((uint8_t *)&crc, 4);\r\n    return 0x0204;\r\n  }\r\n\r\n  if (header->bootCfg.bval.notLoadInBoot) {\r\n    return 0x0202;\r\n  }\r\n\r\n  /* Get which CPU's img it is*/\r\n  for (i = 0; i < HAL_BOOT2_CPU_MAX; i++) {\r\n    if (0 == memcmp((void *)&header->magicCode, HAL_BOOT2_CPU0_MAGIC, sizeof(header->magicCode))) {\r\n      break;\r\n    } else if (0 == memcmp((void *)&header->magicCode, HAL_BOOT2_CPU1_MAGIC, sizeof(header->magicCode))) {\r\n      break;\r\n    }\r\n  }\r\n\r\n  if (i == HAL_BOOT2_CPU_MAX) {\r\n    /* No cpu img magic match */\r\n    // MSG_ERR(\"Magic code error\\r\\n\");\r\n    return 0x0203;\r\n  }\r\n\r\n  if (boot_img_cfg == NULL) {\r\n    return 0;\r\n  }\r\n\r\n  boot_img_cfg->pk_src    = i;\r\n  boot_img_cfg->img_valid = 0;\r\n\r\n  /* Deal with pll config */\r\n\r\n  /* Encrypt and sign */\r\n  boot_img_cfg->basic_cfg.encrypt_type = header->bootCfg.bval.encrypt_type;\r\n  boot_img_cfg->basic_cfg.sign_type    = header->bootCfg.bval.sign;\r\n  boot_img_cfg->basic_cfg.key_sel      = header->bootCfg.bval.key_sel;\r\n\r\n  /* Xip relative */\r\n  boot_img_cfg->basic_cfg.no_segment      = header->bootCfg.bval.no_segment;\r\n  boot_img_cfg->cpu_cfg[0].cache_enable   = header->bootCfg.bval.cache_enable;\r\n  boot_img_cfg->basic_cfg.aes_region_lock = header->bootCfg.bval.aes_region_lock;\r\n  // boot_img_cfg->cpu_cfg[1].halt_cpu = header->bootCfg.bval.halt_cpu1;\r\n  boot_img_cfg->cpu_cfg[0].cache_way_dis = header->bootCfg.bval.cache_way_disable;\r\n  boot_img_cfg->basic_cfg.hash_ignore    = header->bootCfg.bval.hash_ignore;\r\n  /* Firmware len*/\r\n  boot_img_cfg->basic_cfg.img_len_cnt = header->img_segment_info.img_len;\r\n\r\n  /* Boot entry and flash offset */\r\n  boot_img_cfg->cpu_cfg[0].boot_entry        = header->bootEntry;\r\n  boot_img_cfg->basic_cfg.group_image_offset = header->img_start.flash_offset;\r\n\r\n  boot_img_cfg->cpu_cfg[0].config_enable = 1;\r\n  boot_img_cfg->cpu_cfg[0].halt_cpu      = 0;\r\n\r\n  // MSG(\"sign %d,encrypt:%d\\r\\n\", boot_img_cfg->sign_type,boot_img_cfg->encrypt_type);\r\n\r\n  /* Check encrypt and sign match*/\r\n  if (g_efuse_cfg.encrypted[i] != 0) {\r\n    if (boot_img_cfg->basic_cfg.encrypt_type == 0) {\r\n      // MSG_ERR(\"Encrypt not fit\\r\\n\");\r\n      return 0x0205;\r\n    }\r\n  }\r\n\r\n  if (g_efuse_cfg.sign[i] != boot_img_cfg->basic_cfg.sign_type) {\r\n    // MSG_ERR(\"sign not fit\\r\\n\");\r\n    boot_img_cfg->basic_cfg.sign_type = g_efuse_cfg.sign[i];\r\n    return 0x0206;\r\n  }\r\n\r\n  if (g_ps_mode == 1 && (!g_efuse_cfg.hbn_check_sign)) {\r\n    /* In HBN Mode, if user select to ignore hash and sign*/\r\n    boot_img_cfg->basic_cfg.hash_ignore = 1;\r\n  } else if ((boot_img_cfg->basic_cfg.hash_ignore == 1 && *phash != HAL_BOOT2_DEADBEEF_VAL) || g_efuse_cfg.sign[i] != 0) {\r\n    /* If signed or user not really want to ignore, hash can't be ignored*/\r\n    boot_img_cfg->basic_cfg.hash_ignore = 0;\r\n  }\r\n\r\n  if (g_user_hash_ignored) {\r\n    boot_img_cfg->basic_cfg.hash_ignore = 1;\r\n  }\r\n\r\n  ARCH_MemCpy_Fast(boot_img_cfg->basic_cfg.hash, header->hash, sizeof(header->hash));\r\n\r\n  if (boot_img_cfg->basic_cfg.img_len_cnt == 0) {\r\n    return 0x0207;\r\n  }\r\n\r\n  return 0;\r\n}\r\n\r\nvoid ATTR_TCM_SECTION hal_boot2_clean_cache(void) {\r\n  /* no need clean again since hal_boot2_set_cache will also clean\r\n    unused way,and bl702 no data cache except psram */\r\n}\r\n\r\nBL_Err_Type ATTR_TCM_SECTION hal_boot2_set_cache(uint8_t cont_read, boot2_image_config *boot_img_cfg) {\r\n  return flash_set_cache(cont_read, boot_img_cfg->cpu_cfg[0].cache_enable, boot_img_cfg->cpu_cfg[0].cache_way_dis, boot_img_cfg->basic_cfg.group_image_offset);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get the ram image name and count\r\n                                                                                *\r\n                                                                                * @param  img_name: ram image name in partition\r\n                                                                                * @param  ram_img_cnt: ram image count that support boot from flash\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid hal_boot2_get_ram_img_cnt(char *img_name[], uint32_t *ram_img_cnt) { *ram_img_cnt = 0; }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get the ram image info\r\n                                                                                *\r\n                                                                                * @param  data: bootheader information\r\n                                                                                * @param  image_offset: ram image offset in flash(from of bootheader)\r\n                                                                                * @param  img_len: ram image length\r\n                                                                                * @param  hash: pointer to hash pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid hal_boot2_get_img_info(uint8_t *data, uint32_t *image_offset, uint32_t *img_len, uint8_t **hash) { *img_len = 0; }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  release other cpu to boot up\r\n                                                                                *\r\n                                                                                * @param  core: core number\r\n                                                                                * @param  boot_addr: boot address\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid ATTR_TCM_SECTION hal_boot2_release_cpu(uint32_t core, uint32_t boot_addr) {}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get xip address according to flash addr\r\n                                                                                *\r\n                                                                                * @param  flash_addr: flash address\r\n                                                                                *\r\n                                                                                * @return XIP Address\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t hal_boot2_get_xip_addr(uint32_t flash_addr) {\r\n  uint32_t img_offset = SF_Ctrl_Get_Flash_Image_Offset();\r\n  if (flash_addr >= img_offset) {\r\n    return BL702_FLASH_XIP_BASE + (flash_addr - img_offset);\r\n  } else {\r\n    return 0;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get multi-group count\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return 1 for multi-group 0 for not\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t hal_boot2_get_grp_count(void) { return 1; }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get cpu count\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return 1 for multi-group 0 for not\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t hal_boot2_get_cpu_count(void) { return 1; }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get cpu count\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return 1 for multi-group 0 for not\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t ATTR_TCM_SECTION hal_boot2_get_feature_flag(void) { return HAL_BOOT2_SP_FLAG; }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get boot header offset\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return bootheader offset\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t hal_boot2_get_bootheader_offset(void) { return 0x00; }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_clock.c",
    "content": "/**\r\n * @file hal_clock.c\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n\r\n#include \"hal_clock.h\"\r\n#include \"bl702_glb.h\"\r\n#include \"bl702_pwm.h\"\r\n#include \"bl702_timer.h\"\r\n\r\n#if XTAL_TYPE != EXTERNAL_XTAL_32M\r\nstatic void internal_rc32m_init(void) {\r\n  uint32_t tmpVal;\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_XTAL_CFG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_XTAL_CAPCODE_EXTRA_AON);\r\n  BL_WR_REG(AON_BASE, AON_XTAL_CFG, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_XTAL_CFG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_XTAL_CAPCODE_OUT_AON, 0);\r\n  BL_WR_REG(AON_BASE, AON_XTAL_CFG, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_XTAL_CFG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_XTAL_CAPCODE_IN_AON, 0);\r\n  BL_WR_REG(AON_BASE, AON_XTAL_CFG, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_XTAL_CFG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_XTAL_RDY_SEL_AON, 0);\r\n  BL_WR_REG(AON_BASE, AON_XTAL_CFG, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_TSEN);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_XTAL_RDY_INT_SEL_AON, 0);\r\n  BL_WR_REG(AON_BASE, AON_TSEN, tmpVal);\r\n\r\n  for (uint32_t i = 0; i < 20000; i++) {\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_XTAL_CFG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, AON_XTAL_EXT_SEL_AON);\r\n    BL_WR_REG(AON_BASE, AON_XTAL_CFG, tmpVal);\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_XTAL_CFG);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, AON_XTAL_EXT_SEL_AON);\r\n    BL_WR_REG(AON_BASE, AON_XTAL_CFG, tmpVal);\r\n    if (BL_IS_REG_BIT_SET(BL_RD_REG(GLB_BASE, GLB_CLK_CFG0), GLB_CHIP_RDY))\r\n      break;\r\n  }\r\n}\r\n#endif\r\n\r\nstatic uint32_t mtimer_get_clk_src_div(void) { return (system_clock_get(SYSTEM_CLOCK_BCLK) / 1000 / 1000 - 1); }\r\n\r\nstatic void peripheral_clock_gate_all() {\r\n  uint32_t tmpVal;\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG1);\r\n  // tmpVal &= (~(1 << BL_AHB_SLAVE1_GPIP));\r\n  // tmpVal &= (~(1 << BL_AHB_SLAVE1_SEC_DBG));\r\n  // tmpVal &= (~(1 << BL_AHB_SLAVE1_SEC));\r\n  tmpVal &= (~(1 << BL_AHB_SLAVE1_TZ1));\r\n  tmpVal &= (~(1 << BL_AHB_SLAVE1_TZ2));\r\n  tmpVal &= (~(1 << BL_AHB_SLAVE1_DMA));\r\n  tmpVal &= (~(1 << BL_AHB_SLAVE1_EMAC));\r\n  tmpVal &= (~(1 << BL_AHB_SLAVE1_UART0));\r\n  tmpVal &= (~(1 << BL_AHB_SLAVE1_UART1));\r\n  tmpVal &= (~(1 << BL_AHB_SLAVE1_SPI));\r\n  tmpVal &= (~(1 << BL_AHB_SLAVE1_I2C));\r\n  tmpVal &= (~(1 << BL_AHB_SLAVE1_PWM));\r\n  tmpVal &= (~(1 << BL_AHB_SLAVE1_TMR));\r\n  tmpVal &= (~(1 << BL_AHB_SLAVE1_IRR));\r\n  tmpVal &= (~(1 << BL_AHB_SLAVE1_CKS));\r\n  tmpVal &= (~(1 << 24)); // QDEC0\r\n  tmpVal &= (~(1 << 25)); // QDEC1\r\n  tmpVal &= (~(1 << 26)); // QDEC2/I2S\r\n  tmpVal &= (~(1 << 27)); // KYS\r\n  tmpVal &= (~(1 << BL_AHB_SLAVE1_USB));\r\n  tmpVal &= (~(1 << BL_AHB_SLAVE1_CAM));\r\n  tmpVal &= (~(1 << BL_AHB_SLAVE1_MJPEG));\r\n  BL_WR_REG(GLB_BASE, GLB_CGEN_CFG1, tmpVal);\r\n}\r\n\r\nvoid system_clock_init(void) {\r\n#if XTAL_TYPE != EXTERNAL_XTAL_32M\r\n  internal_rc32m_init();\r\n  AON_Power_Off_XTAL();\r\n#endif\r\n  /*select root clock*/\r\n  GLB_Set_System_CLK(XTAL_TYPE, BSP_ROOT_CLOCK_SOURCE);\r\n#if BSP_ROOT_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_PLL_57P6M\r\n  /* fix 57.6M */\r\n  SystemCoreClockSet(57.6 * 1000 * 1000);\r\n#endif\r\n  /*set fclk/hclk and bclk clock*/\r\n  GLB_Set_System_CLK_Div(BSP_FCLK_DIV, BSP_BCLK_DIV);\r\n  /* Set MTimer the same frequency as SystemCoreClock */\r\n  GLB_Set_MTimer_CLK(1, GLB_MTIMER_CLK_BCLK, mtimer_get_clk_src_div());\r\n#ifndef FAST_WAKEUP\r\n#ifdef BSP_AUDIO_PLL_CLOCK_SOURCE\r\n  PDS_Set_Audio_PLL_Freq(BSP_AUDIO_PLL_CLOCK_SOURCE - ROOT_CLOCK_SOURCE_AUPLL_12288000_HZ);\r\n#endif\r\n#endif\r\n#if XTAL_32K_TYPE == INTERNAL_RC_32K\r\n  HBN_32K_Sel(HBN_32K_RC);\r\n  HBN_Power_Off_Xtal_32K();\r\n#else\r\n  HBN_Power_On_Xtal_32K();\r\n  HBN_32K_Sel(HBN_32K_XTAL);\r\n#endif\r\n#if XTAL_TYPE == EXTERNAL_XTAL_32M\r\n  HBN_Set_XCLK_CLK_Sel(HBN_XCLK_CLK_XTAL);\r\n#else\r\n  HBN_Set_XCLK_CLK_Sel(HBN_XCLK_CLK_RC32M);\r\n#endif\r\n}\r\n\r\nvoid peripheral_clock_init(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  peripheral_clock_gate_all();\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG1);\r\n#if defined(BSP_USING_UART0) || defined(BSP_USING_UART1)\r\n#if defined(BSP_USING_UART0)\r\n  tmpVal |= (1 << BL_AHB_SLAVE1_UART0);\r\n#endif\r\n#if defined(BSP_USING_UART1)\r\n  tmpVal |= (1 << BL_AHB_SLAVE1_UART1);\r\n#endif\r\n#if BSP_UART_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_PLL_96M\r\n  GLB_Set_UART_CLK(ENABLE, HBN_UART_CLK_96M, BSP_UART_CLOCK_DIV);\r\n#elif BSP_UART_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_FCLK\r\n  GLB_Set_UART_CLK(ENABLE, HBN_UART_CLK_FCLK, BSP_UART_CLOCK_DIV);\r\n#else\r\n#error \"please select correct uart clock source\"\r\n#endif\r\n#endif\r\n\r\n#if defined(BSP_USING_I2C0)\r\n#if BSP_I2C_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_BCLK\r\n  tmpVal |= (1 << BL_AHB_SLAVE1_I2C);\r\n  GLB_Set_I2C_CLK(ENABLE, BSP_I2C_CLOCK_DIV);\r\n#else\r\n#error \"please select correct i2c clock source\"\r\n#endif\r\n#endif\r\n\r\n#if defined(BSP_USING_SPI0)\r\n#if BSP_SPI_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_BCLK\r\n  tmpVal |= (1 << BL_AHB_SLAVE1_SPI);\r\n  GLB_Set_SPI_CLK(ENABLE, BSP_SPI_CLOCK_DIV);\r\n#else\r\n#error \"please select correct spi clock source\"\r\n#endif\r\n#endif\r\n\r\n#if defined(BSP_USING_TIMER0)\r\n  tmpVal |= (1 << BL_AHB_SLAVE1_TMR);\r\n  BL_WR_REG(GLB_BASE, GLB_CGEN_CFG1, tmpVal);\r\n\r\n#if BSP_TIMER0_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_FCLK\r\n  /* Configure timer clock source */\r\n  uint32_t tmp = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n  tmp          = BL_SET_REG_BITS_VAL(tmp, TIMER_CS_1, TIMER_CLKSRC_FCLK);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCCR, tmp);\r\n\r\n  /* Configure timer clock division */\r\n  tmp = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n  tmp = BL_SET_REG_BITS_VAL(tmp, TIMER_TCDR2, BSP_TIMER0_CLOCK_DIV);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCDR, tmp);\r\n#elif BSP_TIMER0_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_XCLK\r\n  /* Configure timer clock source */\r\n  uint32_t tmp = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n  tmp          = BL_SET_REG_BITS_VAL(tmp, TIMER_CS_1, TIMER_CLKSRC_XTAL);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCCR, tmp);\r\n\r\n  /* Configure timer clock division */\r\n  tmp = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n  tmp = BL_SET_REG_BITS_VAL(tmp, TIMER_TCDR2, BSP_TIMER0_CLOCK_DIV);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCDR, tmp);\r\n#elif BSP_TIMER0_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_32K_CLK\r\n  /* Configure timer clock source */\r\n  uint32_t tmp = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n  tmp          = BL_SET_REG_BITS_VAL(tmp, TIMER_CS_1, TIMER_CLKSRC_32K);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCCR, tmp);\r\n\r\n  /* Configure timer clock division */\r\n  tmp = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n  tmp = BL_SET_REG_BITS_VAL(tmp, TIMER_TCDR2, BSP_TIMER0_CLOCK_DIV);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCDR, tmp);\r\n#elif BSP_TIMER0_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_1K_CLK\r\n  /* Configure timer clock source */\r\n  uint32_t tmp = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n  tmp          = BL_SET_REG_BITS_VAL(tmp, TIMER_CS_1, TIMER_CLKSRC_1K);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCCR, tmp);\r\n\r\n  /* Configure timer clock division */\r\n  tmp = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n  tmp = BL_SET_REG_BITS_VAL(tmp, TIMER_TCDR2, BSP_TIMER0_CLOCK_DIV);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCDR, tmp);\r\n#else\r\n#error \"please select correct timer0 clock source\"\r\n#endif\r\n#endif\r\n\r\n#if defined(BSP_USING_TIMER1)\r\n  tmpVal |= (1 << BL_AHB_SLAVE1_TMR);\r\n  BL_WR_REG(GLB_BASE, GLB_CGEN_CFG1, tmpVal);\r\n\r\n#if BSP_TIMER1_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_FCLK\r\n  /* Configure timer clock source */\r\n  uint32_t tmp1 = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n  tmp1          = BL_SET_REG_BITS_VAL(tmp1, TIMER_CS_2, TIMER_CLKSRC_FCLK);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCCR, tmp1);\r\n\r\n  /* Configure timer clock division */\r\n  tmp1 = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n  tmp1 = BL_SET_REG_BITS_VAL(tmp1, TIMER_TCDR3, BSP_TIMER1_CLOCK_DIV);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCDR, tmp1);\r\n#elif BSP_TIMER1_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_XCLK\r\n  /* Configure timer clock source */\r\n  uint32_t tmp1 = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n  tmp1          = BL_SET_REG_BITS_VAL(tmp1, TIMER_CS_2, TIMER_CLKSRC_XTAL);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCCR, tmp1);\r\n\r\n  /* Configure timer clock division */\r\n  tmp1 = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n  tmp1 = BL_SET_REG_BITS_VAL(tmp1, TIMER_TCDR3, BSP_TIMER1_CLOCK_DIV);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCDR, tmp1);\r\n#elif BSP_TIMER1_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_32K_CLK\r\n  /* Configure timer clock source */\r\n  uint32_t tmp1 = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n  tmp1          = BL_SET_REG_BITS_VAL(tmp1, TIMER_CS_2, TIMER_CLKSRC_32K);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCCR, tmp1);\r\n\r\n  /* Configure timer clock division */\r\n  tmp1 = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n  tmp1 = BL_SET_REG_BITS_VAL(tmp, TIMER_TCDR3, BSP_TIMER1_CLOCK_DIV);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCDR, tmp1);\r\n#elif BSP_TIMER1_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_1K_CLK\r\n  /* Configure timer clock source */\r\n  uint32_t tmp1 = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n  tmp1          = BL_SET_REG_BITS_VAL(tmp1, TIMER_CS_2, TIMER_CLKSRC_1K);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCCR, tmp1);\r\n\r\n  /* Configure timer clock division */\r\n  tmp1 = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n  tmp1 = BL_SET_REG_BITS_VAL(tmp, TIMER_TCDR3, BSP_TIMER1_CLOCK_DIV);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCDR, tmp1);\r\n#else\r\n#error \"please select correct timer1 clock source\"\r\n#endif\r\n#endif\r\n\r\n#if defined(BSP_USING_WDT)\r\n  tmpVal |= (1 << BL_AHB_SLAVE1_TMR);\r\n  BL_WR_REG(GLB_BASE, GLB_CGEN_CFG1, tmpVal);\r\n\r\n#if BSP_WDT_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_FCLK\r\n  /* Configure watchdog timer clock source */\r\n  uint32_t tmpwdt = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n  tmpwdt          = BL_SET_REG_BITS_VAL(tmpwdt, TIMER_CS_WDT, TIMER_CLKSRC_FCLK);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCCR, tmpwdt);\r\n\r\n  /* Configure watchdog timer clock division */\r\n  tmpwdt = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n  tmpwdt = BL_SET_REG_BITS_VAL(tmpwdt, TIMER_WCDR, BSP_WDT_CLOCK_DIV);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCDR, tmpwdt);\r\n#elif BSP_WDT_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_XCLK\r\n  /* Configure watchdog timer clock source */\r\n  uint32_t tmpwdt = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n  tmpwdt          = BL_SET_REG_BITS_VAL(tmpwdt, TIMER_CS_WDT, TIMER_CLKSRC_XTAL);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCCR, tmpwdt);\r\n\r\n  /* Configure watchdog timer clock division */\r\n  tmpwdt = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n  tmpwdt = BL_SET_REG_BITS_VAL(tmpwdt, TIMER_WCDR, BSP_WDT_CLOCK_DIV);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCDR, tmpwdt);\r\n#elif BSP_WDT_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_32K_CLK\r\n  /* Configure watchdog timer clock source */\r\n  uint32_t tmpwdt = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n  tmpwdt          = BL_SET_REG_BITS_VAL(tmpwdt, TIMER_CS_WDT, TIMER_CLKSRC_32K);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCCR, tmpwdt);\r\n\r\n  /* Configure watchdog timer clock division */\r\n  tmpwdt = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n  tmpwdt = BL_SET_REG_BITS_VAL(tmpwdt, TIMER_WCDR, BSP_WDT_CLOCK_DIV);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCDR, tmpwdt);\r\n#elif BSP_WDT_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_1K_CLK\r\n  /* Configure watchdog timer clock source */\r\n  uint32_t tmpwdt = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n  tmpwdt          = BL_SET_REG_BITS_VAL(tmpwdt, TIMER_CS_WDT, TIMER_CLKSRC_1K);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCCR, tmpwdt);\r\n\r\n  /* Configure watchdog timer clock division */\r\n  tmpwdt = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n  tmpwdt = BL_SET_REG_BITS_VAL(tmpwdt, TIMER_WCDR, BSP_WDT_CLOCK_DIV);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCDR, tmpwdt);\r\n#else\r\n#error \"please select correct watchdog timer clock source\"\r\n#endif\r\n#endif\r\n\r\n#if defined(BSP_USING_PWM_CH0) || defined(BSP_USING_PWM_CH1) || defined(BSP_USING_PWM_CH2) || defined(BSP_USING_PWM_CH3) || defined(BSP_USING_PWM_CH4) || defined(BSP_USING_PWM_CH5)\r\n  tmpVal |= (1 << BL_AHB_SLAVE1_PWM);\r\n  BL_WR_REG(GLB_BASE, GLB_CGEN_CFG1, tmpVal);\r\n\r\n  uint32_t timeoutCnt = 160 * 1000;\r\n  uint32_t tmp_pwm;\r\n  uint32_t PWMx;\r\n#if BSP_PWM_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_32K_CLK\r\n\r\n  for (int i = 0; i < 5; i++) {\r\n    PWMx    = PWM_BASE + PWM_CHANNEL_OFFSET + (i) * 0x20;\r\n    tmp_pwm = BL_RD_REG(PWMx, PWM_CONFIG);\r\n    BL_WR_REG(PWMx, PWM_CONFIG, BL_SET_REG_BIT(tmp_pwm, PWM_STOP_EN));\r\n\r\n    while (!BL_IS_REG_BIT_SET(BL_RD_REG(PWMx, PWM_CONFIG), PWM_STS_TOP)) {\r\n      timeoutCnt--;\r\n\r\n      if (timeoutCnt == 0) {\r\n        return;\r\n      }\r\n    }\r\n    tmp_pwm = BL_RD_REG(PWMx, PWM_CONFIG);\r\n    tmp_pwm = BL_SET_REG_BITS_VAL(tmp_pwm, PWM_REG_CLK_SEL, PWM_CLK_32K);\r\n    BL_WR_REG(PWMx, PWM_CONFIG, tmp_pwm);\r\n    /* Config pwm division */\r\n    BL_WR_REG(PWMx, PWM_CLKDIV, BSP_PWM_CLOCK_DIV + 1);\r\n  }\r\n#elif BSP_PWM_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_BCLK\r\n\r\n  for (int i = 0; i < 5; i++) {\r\n    PWMx    = PWM_BASE + PWM_CHANNEL_OFFSET + (i) * 0x20;\r\n    tmp_pwm = BL_RD_REG(PWMx, PWM_CONFIG);\r\n    BL_WR_REG(PWMx, PWM_CONFIG, BL_SET_REG_BIT(tmp_pwm, PWM_STOP_EN));\r\n\r\n    while (!BL_IS_REG_BIT_SET(BL_RD_REG(PWMx, PWM_CONFIG), PWM_STS_TOP)) {\r\n      timeoutCnt--;\r\n\r\n      if (timeoutCnt == 0) {\r\n        return;\r\n      }\r\n    }\r\n    tmp_pwm = BL_RD_REG(PWMx, PWM_CONFIG);\r\n    tmp_pwm = BL_SET_REG_BITS_VAL(tmp_pwm, PWM_REG_CLK_SEL, PWM_CLK_BCLK);\r\n    BL_WR_REG(PWMx, PWM_CONFIG, tmp_pwm);\r\n    /* Config pwm division */\r\n    BL_WR_REG(PWMx, PWM_CLKDIV, BSP_PWM_CLOCK_DIV + 1);\r\n  }\r\n#elif BSP_PWM_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_XCLK\r\n\r\n  for (int i = 0; i < 5; i++) {\r\n    PWMx    = PWM_BASE + PWM_CHANNEL_OFFSET + (i) * 0x20;\r\n    tmp_pwm = BL_RD_REG(PWMx, PWM_CONFIG);\r\n    BL_WR_REG(PWMx, PWM_CONFIG, BL_SET_REG_BIT(tmp_pwm, PWM_STOP_EN));\r\n\r\n    while (!BL_IS_REG_BIT_SET(BL_RD_REG(PWMx, PWM_CONFIG), PWM_STS_TOP)) {\r\n      timeoutCnt--;\r\n\r\n      if (timeoutCnt == 0) {\r\n        return;\r\n      }\r\n    }\r\n    tmp_pwm = BL_RD_REG(PWMx, PWM_CONFIG);\r\n    tmp_pwm = BL_SET_REG_BITS_VAL(tmp_pwm, PWM_REG_CLK_SEL, PWM_CLK_XCLK);\r\n    BL_WR_REG(PWMx, PWM_CONFIG, tmp_pwm);\r\n    /* Config pwm division */\r\n    BL_WR_REG(PWMx, PWM_CLKDIV, BSP_PWM_CLOCK_DIV + 1);\r\n  }\r\n#else\r\n#error \"please select correct pwm clock source\"\r\n#endif\r\n#endif\r\n\r\n#if defined(BSP_USING_IR)\r\n  tmpVal |= (1 << BL_AHB_SLAVE1_IRR);\r\n  GLB_Set_IR_CLK(ENABLE, 0, BSP_IR_CLOCK_DIV);\r\n#endif\r\n\r\n#if defined(BSP_USING_I2S0)\r\n  tmpVal |= (1 << BL_AHB_SLAVE1_I2S);\r\n  GLB_Set_I2S_CLK(ENABLE, GLB_I2S_OUT_REF_CLK_NONE);\r\n#endif\r\n\r\n#if defined(BSP_USING_ADC0)\r\n  tmpVal |= (1 << BL_AHB_SLAVE1_GPIP);\r\n#if BSP_ADC_CLOCK_SOURCE >= ROOT_CLOCK_SOURCE_AUPLL_12288000_HZ\r\n  GLB_Set_ADC_CLK(ENABLE, GLB_ADC_CLK_AUDIO_PLL, BSP_ADC_CLOCK_DIV);\r\n#elif BSP_ADC_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_XCLK\r\n  GLB_Set_ADC_CLK(ENABLE, GLB_ADC_CLK_XCLK, BSP_ADC_CLOCK_DIV);\r\n#else\r\n#error \"please select correct adc clock source\"\r\n#endif\r\n#endif\r\n\r\n#if defined(BSP_USING_DAC0)\r\n  tmpVal |= (1 << BL_AHB_SLAVE1_GPIP);\r\n#if BSP_DAC_CLOCK_SOURCE >= ROOT_CLOCK_SOURCE_AUPLL_12288000_HZ\r\n  GLB_Set_DAC_CLK(ENABLE, GLB_DAC_CLK_AUDIO_PLL, BSP_DAC_CLOCK_DIV + 1);\r\n#elif BSP_DAC_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_XCLK\r\n  GLB_Set_DAC_CLK(ENABLE, GLB_DAC_CLK_XCLK, BSP_DAC_CLOCK_DIV + 1);\r\n#else\r\n#error \"please select correct dac clock source\"\r\n#endif\r\n#endif\r\n\r\n#if defined(BSP_USING_CAM0)\r\n  tmpVal |= (1 << BL_AHB_SLAVE1_CAM);\r\n#if BSP_CAM_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_PLL_96M\r\n  GLB_Set_CAM_CLK(ENABLE, GLB_CAM_CLK_DLL96M, BSP_CAM_CLOCK_DIV);\r\n  GLB_SWAP_EMAC_CAM_Pin(GLB_EMAC_CAM_PIN_CAM);\r\n#elif BSP_CAM_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_XCLK\r\n  GLB_Set_CAM_CLK(ENABLE, GLB_CAM_CLK_XCLK, BSP_CAM_CLOCK_DIV);\r\n  GLB_SWAP_EMAC_CAM_Pin(GLB_EMAC_CAM_PIN_CAM);\r\n#else\r\n#error \"please select correct camera clock source\"\r\n#endif\r\n#endif\r\n\r\n#if defined(BSP_USING_QDEC0) || defined(BSP_USING_QDEC1) || defined(BSP_USING_QDEC2) || defined(BSP_USING_KEYSCAN)\r\n#ifdef BSP_USING_KEYSCAN\r\n  tmpVal |= (1 << 27);\r\n#endif\r\n#if defined(BSP_USING_QDEC0)\r\n  tmpVal |= (1 << 24);\r\n#endif\r\n#if defined(BSP_USING_QDEC1)\r\n  tmpVal |= (1 << 25);\r\n#endif\r\n#if defined(BSP_USING_QDEC2)\r\n  tmpVal |= (1 << 26);\r\n#endif\r\n#if BSP_QDEC_KEYSCAN_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_32K_CLK\r\n  GLB_Set_QDEC_CLK(GLB_QDEC_CLK_F32K, BSP_QDEC_KEYSCAN_CLOCK_DIV);\r\n#elif BSP_QDEC_KEYSCAN_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_XCLK\r\n  GLB_Set_QDEC_CLK(GLB_QDEC_CLK_XCLK, BSP_QDEC_KEYSCAN_CLOCK_DIV);\r\n#else\r\n#error \"please select correct qdec or keyscan clock source\"\r\n#endif\r\n#endif\r\n\r\n#if defined(BSP_USING_USB)\r\n  tmpVal |= (1 << BL_AHB_SLAVE1_USB);\r\n  GLB_Set_USB_CLK(1);\r\n#endif\r\n\r\n#if defined(BSP_USING_DMA)\r\n  tmpVal |= (1 << BL_AHB_SLAVE1_DMA);\r\n#endif\r\n\r\n  BL_WR_REG(GLB_BASE, GLB_CGEN_CFG1, tmpVal);\r\n}\r\n\r\nuint32_t system_clock_get(enum system_clock_type type) {\r\n  switch (type) {\r\n  case SYSTEM_CLOCK_ROOT_CLOCK:\r\n    if (GLB_Get_Root_CLK_Sel() == 0) {\r\n      return 32 * 1000 * 1000;\r\n    } else if (GLB_Get_Root_CLK_Sel() == 1)\r\n      return 32 * 1000 * 1000;\r\n    else {\r\n      uint32_t tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG0);\r\n      tmpVal          = BL_GET_REG_BITS_VAL(tmpVal, GLB_REG_PLL_SEL);\r\n      if (tmpVal == 0) {\r\n        return 57.6 * 1000 * 1000;\r\n      } else if (tmpVal == 1) {\r\n        return 96 * 1000 * 1000;\r\n      } else if (tmpVal == 2) {\r\n        return 144 * 1000 * 1000;\r\n      } else {\r\n        return 0;\r\n      }\r\n    }\r\n  case SYSTEM_CLOCK_FCLK:\r\n    return system_clock_get(SYSTEM_CLOCK_ROOT_CLOCK) / (GLB_Get_HCLK_Div() + 1);\r\n\r\n  case SYSTEM_CLOCK_BCLK:\r\n    return system_clock_get(SYSTEM_CLOCK_ROOT_CLOCK) / (GLB_Get_HCLK_Div() + 1) / (GLB_Get_BCLK_Div() + 1);\r\n\r\n  case SYSTEM_CLOCK_XCLK:\r\n    return 32000000;\r\n  case SYSTEM_CLOCK_32K_CLK:\r\n    return 32000;\r\n  case SYSTEM_CLOCK_AUPLL:\r\n#ifdef BSP_AUDIO_PLL_CLOCK_SOURCE\r\n    if (BSP_AUDIO_PLL_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_AUPLL_12288000_HZ) {\r\n      return 12288000;\r\n    } else if (BSP_AUDIO_PLL_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_AUPLL_11289600_HZ) {\r\n      return 11289600;\r\n    } else if (BSP_AUDIO_PLL_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_AUPLL_5644800_HZ) {\r\n      return 5644800;\r\n    } else if (BSP_AUDIO_PLL_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_AUPLL_24576000_HZ) {\r\n      return 24576000;\r\n    } else if (BSP_AUDIO_PLL_CLOCK_SOURCE == ROOT_CLOCK_SOURCE_AUPLL_24000000_HZ) {\r\n      return 24000000;\r\n    }\r\n#endif\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return 0;\r\n}\r\n\r\nuint32_t peripheral_clock_get(enum peripheral_clock_type type) {\r\n  uint32_t tmpVal;\r\n  uint32_t div;\r\n\r\n  switch (type) {\r\n#if defined(BSP_USING_UART0) || defined(BSP_USING_UART1)\r\n  case PERIPHERAL_CLOCK_UART:\r\n    tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, HBN_UART_CLK_SEL);\r\n\r\n    div = BL_RD_REG(GLB_BASE, GLB_CLK_CFG2);\r\n    div = BL_GET_REG_BITS_VAL(div, GLB_UART_CLK_DIV);\r\n    if (tmpVal == HBN_UART_CLK_FCLK) {\r\n      return system_clock_get(SYSTEM_CLOCK_FCLK) / (div + 1);\r\n    } else if (tmpVal == HBN_UART_CLK_96M) {\r\n      return 96000000 / (div + 1);\r\n    }\r\n#endif\r\n#if defined(BSP_USING_SPI0)\r\n  case PERIPHERAL_CLOCK_SPI:\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG3);\r\n    div    = BL_GET_REG_BITS_VAL(tmpVal, GLB_SPI_CLK_DIV);\r\n    return system_clock_get(SYSTEM_CLOCK_BCLK) / (div + 1);\r\n#endif\r\n#if defined(BSP_USING_I2C0)\r\n  case PERIPHERAL_CLOCK_I2C:\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG3);\r\n    div    = BL_GET_REG_BITS_VAL(tmpVal, GLB_I2C_CLK_DIV);\r\n    return system_clock_get(SYSTEM_CLOCK_BCLK) / (div + 1);\r\n#endif\r\n#if defined(BSP_USING_I2S0)\r\n  case PERIPHERAL_CLOCK_I2S:\r\n    return system_clock_get(SYSTEM_CLOCK_AUPLL);\r\n#endif\r\n#if defined(BSP_USING_ADC0)\r\n  case PERIPHERAL_CLOCK_ADC:\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPADC_32M_SRC_CTRL);\r\n    div    = BL_GET_REG_BITS_VAL(tmpVal, GLB_GPADC_32M_CLK_DIV);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, GLB_GPADC_32M_CLK_SEL);\r\n    if (tmpVal == GLB_ADC_CLK_AUDIO_PLL) {\r\n      return system_clock_get(SYSTEM_CLOCK_AUPLL) / (div + 1);\r\n    } else if (tmpVal == GLB_ADC_CLK_XCLK) {\r\n      return system_clock_get(SYSTEM_CLOCK_XCLK) / (div + 1);\r\n    }\r\n#endif\r\n#if defined(BSP_USING_DAC0)\r\n  case PERIPHERAL_CLOCK_DAC:\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL);\r\n    div    = BL_GET_REG_BITS_VAL(tmpVal, GLB_DIG_512K_DIV);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, GLB_DIG_CLK_SRC_SEL);\r\n    if (tmpVal == GLB_DAC_CLK_AUDIO_PLL) {\r\n      return system_clock_get(SYSTEM_CLOCK_AUPLL) / div;\r\n    } else if (tmpVal == GLB_DAC_CLK_XCLK) {\r\n      return system_clock_get(SYSTEM_CLOCK_XCLK) / div;\r\n    }\r\n#endif\r\n#if defined(BSP_USING_TIMER0)\r\n  case PERIPHERAL_CLOCK_TIMER0:\r\n    tmpVal = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, TIMER_CS_1);\r\n\r\n    div = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n    div = BL_GET_REG_BITS_VAL(div, TIMER_TCDR2);\r\n    if (tmpVal == TIMER_CLKSRC_FCLK) {\r\n      return system_clock_get(SYSTEM_CLOCK_FCLK) / (div + 1);\r\n    } else if (tmpVal == TIMER_CLKSRC_32K) {\r\n      return system_clock_get(SYSTEM_CLOCK_32K_CLK) / (div + 1);\r\n    } else if (tmpVal == TIMER_CLKSRC_1K) {\r\n      return 1000 / (div + 1);\r\n    } else if (tmpVal == TIMER_CLKSRC_XTAL) {\r\n      return system_clock_get(SYSTEM_CLOCK_XCLK) / (div + 1);\r\n    }\r\n#endif\r\n#if defined(BSP_USING_TIMER1)\r\n  case PERIPHERAL_CLOCK_TIMER1:\r\n    tmpVal = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, TIMER_CS_2);\r\n\r\n    div = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n    div = BL_GET_REG_BITS_VAL(div, TIMER_TCDR3);\r\n    if (tmpVal == TIMER_CLKSRC_FCLK) {\r\n      return system_clock_get(SYSTEM_CLOCK_FCLK) / (div + 1);\r\n    } else if (tmpVal == TIMER_CLKSRC_32K) {\r\n      return system_clock_get(SYSTEM_CLOCK_32K_CLK) / (div + 1);\r\n    } else if (tmpVal == TIMER_CLKSRC_1K) {\r\n      return 1000 / (div + 1);\r\n    } else if (tmpVal == TIMER_CLKSRC_XTAL) {\r\n      return system_clock_get(SYSTEM_CLOCK_XCLK) / (div + 1);\r\n    }\r\n#endif\r\n#if defined(BSP_USING_WDT)\r\n  case PERIPHERAL_CLOCK_WDT:\r\n    tmpVal = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, TIMER_CS_WDT);\r\n\r\n    div = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n    div = BL_GET_REG_BITS_VAL(div, TIMER_WCDR);\r\n    if (tmpVal == TIMER_CLKSRC_FCLK) {\r\n      return system_clock_get(SYSTEM_CLOCK_FCLK) / (div + 1);\r\n    } else if (tmpVal == TIMER_CLKSRC_32K) {\r\n      return system_clock_get(SYSTEM_CLOCK_32K_CLK) / (div + 1);\r\n    } else if (tmpVal == TIMER_CLKSRC_1K) {\r\n      return 1000 / (div + 1);\r\n    } else if (tmpVal == TIMER_CLKSRC_XTAL) {\r\n      return system_clock_get(SYSTEM_CLOCK_XCLK) / (div + 1);\r\n    }\r\n#endif\r\n#if defined(BSP_USING_PWM_CH0) || defined(BSP_USING_PWM_CH1) || defined(BSP_USING_PWM_CH2) || defined(BSP_USING_PWM_CH3) || defined(BSP_USING_PWM_CH4)\r\n  case PERIPHERAL_CLOCK_PWM:\r\n    tmpVal = BL_RD_REG(PWM_BASE + PWM_CHANNEL_OFFSET, PWM_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, PWM_REG_CLK_SEL);\r\n    div    = BL_RD_REG(PWM_BASE + PWM_CHANNEL_OFFSET, PWM_CLKDIV);\r\n    if (tmpVal == PWM_CLK_XCLK) {\r\n      return system_clock_get(SYSTEM_CLOCK_XCLK) / div;\r\n    } else if (tmpVal == PWM_CLK_BCLK) {\r\n      return system_clock_get(SYSTEM_CLOCK_BCLK) / div;\r\n    } else if (tmpVal == PWM_CLK_32K) {\r\n      return system_clock_get(SYSTEM_CLOCK_32K_CLK) / div;\r\n    }\r\n#endif\r\n#if defined(BSP_USING_CAM)\r\n  case PERIPHERAL_CLOCK_CAM:\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG1);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, GLB_REG_CAM_REF_CLK_SRC_SEL);\r\n    div    = BL_GET_REG_BITS_VAL(tmpVal, GLB_REG_CAM_REF_CLK_DIV);\r\n\r\n    if (tmpVal == GLB_CAM_CLK_XCLK) {\r\n      return system_clock_get(SYSTEM_CLOCK_XCLK) / (div + 1);\r\n    } else if (tmpVal == GLB_CAM_CLK_DLL96M) {\r\n      return 96000000 / (div + 1);\r\n    }\r\n#endif\r\n  default:\r\n\r\n    break;\r\n  }\r\n\r\n  (void)(tmpVal);\r\n  (void)(div);\r\n  return 0;\r\n}\r\n\r\nvoid system_mtimer_clock_init(void) { GLB_Set_MTimer_CLK(1, GLB_MTIMER_CLK_BCLK, mtimer_get_clk_src_div()); }\r\n\r\nvoid system_mtimer_clock_reinit(void) {\r\n  /* reinit clock to 10M */\r\n  GLB_Set_MTimer_CLK(1, GLB_MTIMER_CLK_BCLK, 7);\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_common.c",
    "content": "/**\r\n * @file hal_common.c\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n#include \"hal_common.h\"\r\n#include \"bl702_ef_ctrl.h\"\r\n#include \"bl702_l1c.h\"\r\n#include \"bl702_romdriver.h\"\r\n#include \"bl702_sec_eng.h\"\r\n#include \"hbn_reg.h\"\r\n\r\nvolatile uint32_t nesting = 0;\r\n\r\nvoid ATTR_TCM_SECTION cpu_global_irq_enable(void) {\r\n  nesting--;\r\n  if (nesting == 0) {\r\n    __enable_irq();\r\n  }\r\n}\r\n\r\nvoid ATTR_TCM_SECTION cpu_global_irq_disable(void) {\r\n  __disable_irq();\r\n  nesting++;\r\n}\r\n\r\nvoid hal_por_reset(void) { RomDriver_GLB_SW_POR_Reset(); }\r\n\r\nvoid hal_system_reset(void) { RomDriver_GLB_SW_System_Reset(); }\r\n\r\nvoid hal_cpu_reset(void) { RomDriver_GLB_SW_CPU_Reset(); }\r\n\r\nvoid hal_get_chip_id(uint8_t chip_id[8]) { EF_Ctrl_Read_MAC_Address(chip_id); }\r\n\r\nvoid hal_enter_usb_iap(void) {\r\n  BL_WR_WORD(HBN_BASE + HBN_RSV0_OFFSET, 0x00425355); //\"\\0BSU\"\r\n\r\n  arch_delay_ms(1000);\r\n  RomDriver_GLB_SW_POR_Reset();\r\n}\r\n\r\nvoid ATTR_TCM_SECTION hal_jump2app(uint32_t flash_offset) {\r\n  /*flash_offset from 48K to 3.98M*/\r\n  if ((flash_offset >= 0xc000) && (flash_offset < (0x400000 - 20 * 1024))) {\r\n    void (*app_main)(void) = (void (*)(void))0x23000000;\r\n    BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_ID0_OFFSET, flash_offset);\r\n    L1C_Cache_Flush_Ext();\r\n    app_main();\r\n  } else {\r\n    while (1) {\r\n    }\r\n  }\r\n}\r\n\r\nint hal_get_trng_seed(void) {\r\n  uint32_t seed[8];\r\n  uint32_t tmpVal;\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG1);\r\n  tmpVal |= (1 << BL_AHB_SLAVE1_SEC);\r\n  BL_WR_REG(GLB_BASE, GLB_CGEN_CFG1, tmpVal);\r\n\r\n  Sec_Eng_Trng_Enable();\r\n  Sec_Eng_Trng_Read((uint8_t *)seed);\r\n  Sec_Eng_Trng_Disable();\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG1);\r\n  tmpVal &= (~(1 << BL_AHB_SLAVE1_SEC));\r\n  BL_WR_REG(GLB_BASE, GLB_CGEN_CFG1, tmpVal);\r\n\r\n  return seed[0];\r\n}"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_dma.c",
    "content": "/**\n * @file hal_dma.c\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#include \"hal_dma.h\"\n#include \"bl702_dma.h\"\n\n#define DMA_CHANNEL_BASE(id_base, ch) ((id_base) + DMA_CHANNEL_OFFSET + (ch) * 0x100)\n\nstatic const uint32_t dma_channel_base[][8] = {\n    {\n     DMA_CHANNEL_BASE(DMA_BASE, 0),\n     DMA_CHANNEL_BASE(DMA_BASE, 1),\n     DMA_CHANNEL_BASE(DMA_BASE, 2),\n     DMA_CHANNEL_BASE(DMA_BASE, 3),\n     DMA_CHANNEL_BASE(DMA_BASE, 4),\n     DMA_CHANNEL_BASE(DMA_BASE, 5),\n     DMA_CHANNEL_BASE(DMA_BASE, 6),\n     DMA_CHANNEL_BASE(DMA_BASE, 7),\n     }\n};\n\nstatic void DMA0_IRQ(void);\n\nstatic dma_device_t dmax_device[DMA_MAX_INDEX] = {\n#ifdef BSP_USING_DMA0_CH0\n    DMA0_CH0_CONFIG,\n#endif\n#ifdef BSP_USING_DMA0_CH1\n    DMA0_CH1_CONFIG,\n#endif\n#ifdef BSP_USING_DMA0_CH2\n    DMA0_CH2_CONFIG,\n#endif\n#ifdef BSP_USING_DMA0_CH3\n    DMA0_CH3_CONFIG,\n#endif\n#ifdef BSP_USING_DMA0_CH4\n    DMA0_CH4_CONFIG,\n#endif\n#ifdef BSP_USING_DMA0_CH5\n    DMA0_CH5_CONFIG,\n#endif\n#ifdef BSP_USING_DMA0_CH6\n    DMA0_CH6_CONFIG,\n#endif\n#ifdef BSP_USING_DMA0_CH7\n    DMA0_CH7_CONFIG,\n#endif\n};\n/**\n * @brief\n *\n * @param dev\n * @param oflag\n * @return int\n */\nint dma_open(struct device *dev, uint16_t oflag) {\n  dma_device_t        *dma_device = (dma_device_t *)dev;\n  DMA_Channel_Cfg_Type chCfg      = {0};\n\n  /* Disable all interrupt */\n  DMA_IntMask(dma_device->ch, DMA_INT_ALL, MASK);\n  CPU_Interrupt_Disable(DMA_ALL_IRQn);\n\n  DMA_Disable();\n\n  DMA_Channel_Disable(dma_device->ch);\n\n  dma_device->intr     = 0;\n  chCfg.ch             = dma_device->ch;\n  chCfg.dir            = dma_device->direction;\n  chCfg.srcPeriph      = dma_device->src_req;\n  chCfg.dstPeriph      = dma_device->dst_req;\n  chCfg.srcAddrInc     = dma_device->src_addr_inc;\n  chCfg.destAddrInc    = dma_device->dst_addr_inc;\n  chCfg.srcBurstSize   = dma_device->src_burst_size;\n  chCfg.dstBurstSize   = dma_device->dst_burst_size;\n  chCfg.srcTransfWidth = dma_device->src_width;\n  chCfg.dstTransfWidth = dma_device->dst_width;\n  DMA_Channel_Init(&chCfg);\n\n  DMA_Enable();\n\n  Interrupt_Handler_Register(DMA_ALL_IRQn, DMA0_IRQ);\n  /* Enable dma interrupt*/\n  CPU_Interrupt_Enable(DMA_ALL_IRQn);\n  return 0;\n}\n/**\n * @brief\n *\n * @param dev\n * @param cmd\n * @param args\n * @return int\n */\nint dma_control(struct device *dev, int cmd, void *args) {\n  dma_device_t *dma_device = (dma_device_t *)dev;\n\n  switch (cmd) {\n  case DEVICE_CTRL_SET_INT:\n    /* Dma interrupt configuration */\n    DMA_IntMask(dma_device->ch, DMA_INT_TCOMPLETED, UNMASK);\n    DMA_IntMask(dma_device->ch, DMA_INT_ERR, UNMASK);\n    dma_device->intr = 1;\n    break;\n\n  case DEVICE_CTRL_CLR_INT:\n    /* Dma interrupt configuration */\n    DMA_IntMask(dma_device->ch, DMA_INT_TCOMPLETED, MASK);\n    DMA_IntMask(dma_device->ch, DMA_INT_ERR, MASK);\n    dma_device->intr = 0;\n    break;\n\n  case DEVICE_CTRL_GET_INT:\n    break;\n\n  case DEVICE_CTRL_CONFIG:\n    break;\n\n  case DEVICE_CTRL_DMA_CHANNEL_UPDATE:\n    DMA_LLI_Update(dma_device->ch, (uint32_t)args);\n    break;\n\n  case DEVICE_CTRL_DMA_CHANNEL_GET_STATUS:\n    return DMA_Channel_Is_Busy(dma_device->ch);\n\n  case DEVICE_CTRL_DMA_CHANNEL_START:\n    DMA_Channel_Enable(dma_device->ch);\n    break;\n\n  case DEVICE_CTRL_DMA_CHANNEL_STOP:\n    DMA_Channel_Disable(dma_device->ch);\n    break;\n  case DEVICE_CTRL_DMA_CONFIG_SI: {\n    uint32_t tmpVal = BL_RD_REG(dma_channel_base[dma_device->id][dma_device->ch], DMA_CONTROL);\n    tmpVal          = BL_SET_REG_BITS_VAL(tmpVal, DMA_SI, ((uint32_t)args) & 0x01);\n    BL_WR_REG(dma_channel_base[dma_device->id][dma_device->ch], DMA_CONTROL, tmpVal);\n\n  } break;\n  case DEVICE_CTRL_DMA_CONFIG_DI: {\n    uint32_t tmpVal = BL_RD_REG(dma_channel_base[dma_device->id][dma_device->ch], DMA_CONTROL);\n    tmpVal          = BL_SET_REG_BITS_VAL(tmpVal, DMA_DI, ((uint32_t)args) & 0x01);\n    BL_WR_REG(dma_channel_base[dma_device->id][dma_device->ch], DMA_CONTROL, tmpVal);\n\n  } break;\n  default:\n    break;\n  }\n\n  return 0;\n}\n/**\n * @brief\n *\n * @param dev\n * @return int\n */\nint dma_close(struct device *dev) {\n  dma_device_t        *dma_device = (dma_device_t *)dev;\n  DMA_Channel_Cfg_Type chCfg      = {0};\n\n  DMA_Channel_Disable(dma_device->ch);\n  DMA_Channel_Init(&chCfg);\n  dma_device->intr = 0;\n  return 0;\n}\n\nint dma_register(enum dma_index_type index, const char *name) {\n  struct device *dev;\n\n  if (DMA_MAX_INDEX == 0) {\n    return -DEVICE_EINVAL;\n  }\n\n  dev = &(dmax_device[index].parent);\n\n  dev->open    = dma_open;\n  dev->close   = dma_close;\n  dev->control = dma_control;\n  // dev->write = dma_write;\n  // dev->read = dma_read;\n\n  dev->type   = DEVICE_CLASS_DMA;\n  dev->handle = NULL;\n\n  return device_register(dev, name);\n}\n\n/**\n * @brief\n *\n * @param dev\n * @param src_addr\n * @param dst_addr\n * @param transfer_size\n * @return int\n */\nint dma_reload(struct device *dev, uint32_t src_addr, uint32_t dst_addr, uint32_t transfer_size) {\n#ifdef BSP_USING_DMA\n  uint32_t           malloc_count;\n  uint32_t           remain_len;\n  uint32_t           actual_transfer_len    = 0;\n  uint32_t           actual_transfer_offset = 0;\n  dma_control_data_t dma_ctrl_cfg;\n  bool               intr = false;\n\n  dma_device_t *dma_device = (dma_device_t *)dev;\n\n  DMA_Channel_Disable(dma_device->ch);\n\n  if (transfer_size == 0) {\n    return 0;\n  }\n\n  switch (dma_device->src_width) {\n  case DMA_TRANSFER_WIDTH_8BIT:\n    actual_transfer_offset = 4095;\n    actual_transfer_len    = transfer_size;\n    break;\n  case DMA_TRANSFER_WIDTH_16BIT:\n    if (transfer_size % 2) {\n      return -1;\n    }\n    actual_transfer_offset = 4095 << 1;\n    actual_transfer_len    = transfer_size >> 1;\n    break;\n  case DMA_TRANSFER_WIDTH_32BIT:\n    if (transfer_size % 4) {\n      return -1;\n    }\n\n    actual_transfer_offset = 4095 << 2;\n    actual_transfer_len    = transfer_size >> 2;\n    break;\n\n  default:\n    return -3;\n    break;\n  }\n\n  dma_ctrl_cfg = (dma_control_data_t)(BL_RD_REG(dma_channel_base[dma_device->id][dma_device->ch], DMA_CONTROL));\n  intr         = dma_device->intr;\n\n  malloc_count = actual_transfer_len / 4095;\n  remain_len   = actual_transfer_len % 4095;\n\n  if (remain_len) {\n    malloc_count++;\n  }\n\n  dma_device->lli_cfg = (dma_lli_ctrl_t *)realloc(dma_device->lli_cfg, sizeof(dma_lli_ctrl_t) * malloc_count);\n\n  if (dma_device->lli_cfg) {\n    dma_ctrl_cfg.bits.TransferSize = 4095;\n    dma_ctrl_cfg.bits.I            = 0;\n    /*transfer_size will be integer multiple of 4095*n or 4095*2*n or 4095*4*n,(n>0) */\n    for (uint32_t i = 0; i < malloc_count; i++) {\n      dma_device->lli_cfg[i].src_addr = src_addr;\n      dma_device->lli_cfg[i].dst_addr = dst_addr;\n      dma_device->lli_cfg[i].nextlli  = 0;\n\n      if (dma_ctrl_cfg.bits.SI) {\n        src_addr += actual_transfer_offset;\n      }\n\n      if (dma_ctrl_cfg.bits.DI) {\n        dst_addr += actual_transfer_offset;\n      }\n\n      if (i == malloc_count - 1) {\n        if (remain_len) {\n          dma_ctrl_cfg.bits.TransferSize = remain_len;\n        }\n        dma_ctrl_cfg.bits.I = intr;\n\n        if (dma_device->transfer_mode == DMA_LLI_CYCLE_MODE) {\n          dma_device->lli_cfg[i].nextlli = (uint32_t)&dma_device->lli_cfg[0];\n        }\n      }\n\n      if (i) {\n        dma_device->lli_cfg[i - 1].nextlli = (uint32_t)&dma_device->lli_cfg[i];\n      }\n\n      dma_device->lli_cfg[i].cfg = dma_ctrl_cfg;\n    }\n    BL_WR_REG(dma_channel_base[dma_device->id][dma_device->ch], DMA_SRCADDR, dma_device->lli_cfg[0].src_addr);\n    BL_WR_REG(dma_channel_base[dma_device->id][dma_device->ch], DMA_DSTADDR, dma_device->lli_cfg[0].dst_addr);\n    BL_WR_REG(dma_channel_base[dma_device->id][dma_device->ch], DMA_LLI, dma_device->lli_cfg[0].nextlli);\n    BL_WR_REG(dma_channel_base[dma_device->id][dma_device->ch], DMA_CONTROL, dma_device->lli_cfg[0].cfg.WORD);\n  } else {\n    return -2;\n  }\n#endif\n  return 0;\n}\n\n/**\n * @brief\n *\n * @param handle\n */\nvoid dma_channel_isr(dma_device_t *handle) {\n  uint32_t tmpVal;\n  uint32_t intClr;\n\n  /* Get DMA register */\n  uint32_t DMAChs = DMA_BASE;\n\n  if (!handle->parent.callback) {\n    return;\n  }\n\n  tmpVal = BL_RD_REG(DMAChs, DMA_INTTCSTATUS);\n  if ((BL_GET_REG_BITS_VAL(tmpVal, DMA_INTTCSTATUS) & (1 << handle->ch)) != 0) {\n    /* Clear interrupt */\n    tmpVal = BL_RD_REG(DMAChs, DMA_INTTCCLEAR);\n    intClr = BL_GET_REG_BITS_VAL(tmpVal, DMA_INTTCCLEAR);\n    intClr |= (1 << handle->ch);\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_INTTCCLEAR, intClr);\n    BL_WR_REG(DMAChs, DMA_INTTCCLEAR, tmpVal);\n    handle->parent.callback(&handle->parent, NULL, 0, DMA_INT_TCOMPLETED);\n  }\n\n  tmpVal = BL_RD_REG(DMAChs, DMA_INTERRORSTATUS);\n  if ((BL_GET_REG_BITS_VAL(tmpVal, DMA_INTERRORSTATUS) & (1 << handle->ch)) != 0) {\n    /*Clear interrupt */\n    tmpVal = BL_RD_REG(DMAChs, DMA_INTERRCLR);\n    intClr = BL_GET_REG_BITS_VAL(tmpVal, DMA_INTERRCLR);\n    intClr |= (1 << handle->ch);\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_INTERRCLR, intClr);\n    BL_WR_REG(DMAChs, DMA_INTERRCLR, tmpVal);\n    handle->parent.callback(&handle->parent, NULL, 0, DMA_INT_ERR);\n  }\n}\n/**\n * @brief\n *\n */\nvoid DMA0_IRQ(void) {\n  for (uint8_t i = 0; i < DMA_MAX_INDEX; i++) {\n    dma_channel_isr(&dmax_device[i]);\n  }\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_flash.c",
    "content": "/**\r\n * @file hal_flash.c\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n#include \"hal_flash.h\"\r\n#include \"bl702_glb.h\"\r\n#include \"bl702_sf_cfg.h\"\r\n#include \"bl702_sf_cfg_ext.h\"\r\n#include \"bl702_xip_sflash.h\"\r\n#include \"bl702_xip_sflash_ext.h\"\r\n\r\nstatic uint32_t           g_jedec_id = 0;\r\nstatic SPI_Flash_Cfg_Type g_flash_cfg;\r\n\r\n/**\r\n * @brief flash_get_jedecid\r\n *\r\n * @return BL_Err_Type\r\n */\r\nuint32_t flash_get_jedecid(void) {\r\n  uint32_t jid = 0;\r\n\r\n  jid = ((g_jedec_id & 0xff) << 16) + (g_jedec_id & 0xff00) + ((g_jedec_id & 0xff0000) >> 16);\r\n  return jid;\r\n}\r\n\r\n/**\r\n * @brief flash_get_cfg\r\n *\r\n * @return BL_Err_Type\r\n */\r\nBL_Err_Type flash_get_cfg(uint8_t **cfg_addr, uint32_t *len) {\r\n  *cfg_addr = (uint8_t *)&g_flash_cfg;\r\n  *len      = sizeof(SPI_Flash_Cfg_Type);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/**\r\n * @brief flash_set_qspi_enable\r\n *\r\n * @return BL_Err_Type\r\n */\r\nstatic BL_Err_Type ATTR_TCM_SECTION flash_set_qspi_enable(SPI_Flash_Cfg_Type *p_flash_cfg) {\r\n  if ((p_flash_cfg->ioMode & 0x0f) == SF_CTRL_QO_MODE || (p_flash_cfg->ioMode & 0x0f) == SF_CTRL_QIO_MODE) {\r\n    SFlash_Qspi_Enable(p_flash_cfg);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/**\r\n * @brief flash_set_l1c_wrap\r\n *\r\n * @return BL_Err_Type\r\n */\r\nstatic BL_Err_Type ATTR_TCM_SECTION flash_set_l1c_wrap(SPI_Flash_Cfg_Type *p_flash_cfg) {\r\n  if (((p_flash_cfg->ioMode >> 4) & 0x01) == 1) {\r\n    L1C_Set_Wrap(DISABLE);\r\n  } else {\r\n    L1C_Set_Wrap(ENABLE);\r\n    if ((p_flash_cfg->ioMode & 0x0f) == SF_CTRL_QO_MODE || (p_flash_cfg->ioMode & 0x0f) == SF_CTRL_QIO_MODE) {\r\n      SFlash_SetBurstWrap(p_flash_cfg);\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/**\r\n * @brief flash_config_init\r\n *\r\n * @return BL_Err_Type\r\n */\r\nstatic BL_Err_Type ATTR_TCM_SECTION flash_config_init(SPI_Flash_Cfg_Type *p_flash_cfg, uint8_t *jedec_id) {\r\n  BL_Err_Type ret    = ERROR;\r\n  uint32_t    jid    = 0;\r\n  uint32_t    offset = 0;\r\n\r\n  cpu_global_irq_disable();\r\n  XIP_SFlash_Opt_Enter();\r\n  XIP_SFlash_State_Save(p_flash_cfg, &offset);\r\n  SFlash_GetJedecId(p_flash_cfg, (uint8_t *)&jid);\r\n  arch_memcpy(jedec_id, (uint8_t *)&jid, 3);\r\n  jid &= 0xFFFFFF;\r\n  g_jedec_id = jid;\r\n  ret        = SF_Cfg_Get_Flash_Cfg_Need_Lock_Ext(jid, p_flash_cfg);\r\n  if (ret == SUCCESS) {\r\n    p_flash_cfg->mid = (jid & 0xff);\r\n  }\r\n\r\n  /* Set flash controler from p_flash_cfg */\r\n  flash_set_qspi_enable(p_flash_cfg);\r\n  flash_set_l1c_wrap(p_flash_cfg);\r\n  XIP_SFlash_State_Restore(p_flash_cfg, p_flash_cfg->ioMode & 0x0f, offset);\r\n  XIP_SFlash_Opt_Exit();\r\n  cpu_global_irq_enable();\r\n\r\n  return ret;\r\n}\r\n\r\n/**\r\n * @brief multi flash adapter\r\n *\r\n * @return BL_Err_Type\r\n */\r\nBL_Err_Type ATTR_TCM_SECTION flash_init(void) {\r\n  BL_Err_Type ret       = ERROR;\r\n  uint8_t     clkDelay  = 1;\r\n  uint8_t     clkInvert = 1;\r\n  uint32_t    jedec_id  = 0;\r\n\r\n  cpu_global_irq_disable();\r\n  L1C_Cache_Flush_Ext();\r\n  SF_Cfg_Get_Flash_Cfg_Need_Lock_Ext(0, &g_flash_cfg);\r\n  L1C_Cache_Flush_Ext();\r\n  cpu_global_irq_enable();\r\n  if (g_flash_cfg.mid != 0xff) {\r\n    return SUCCESS;\r\n  }\r\n  clkDelay           = g_flash_cfg.clkDelay;\r\n  clkInvert          = g_flash_cfg.clkInvert;\r\n  g_flash_cfg.ioMode = g_flash_cfg.ioMode & 0x0f;\r\n\r\n  ret = flash_config_init(&g_flash_cfg, (uint8_t *)&jedec_id);\r\n#if 0\r\n    MSG(\"flash ID = %08x\\r\\n\", jedec_id);\r\n    bflb_platform_dump((uint8_t *)&g_flash_cfg, sizeof(g_flash_cfg));\r\n    if (ret != SUCCESS) {\r\n        MSG(\"flash config init fail!\\r\\n\");\r\n    }\r\n#endif\r\n  g_flash_cfg.clkDelay  = clkDelay;\r\n  g_flash_cfg.clkInvert = clkInvert;\r\n\r\n  return ret;\r\n}\r\n\r\n/**\r\n * @brief read jedec id\r\n *\r\n * @param data\r\n * @return BL_Err_Type\r\n */\r\nBL_Err_Type ATTR_TCM_SECTION flash_read_jedec_id(uint8_t *data) {\r\n  uint32_t jid = 0;\r\n\r\n  cpu_global_irq_disable();\r\n  XIP_SFlash_Opt_Enter();\r\n  XIP_SFlash_GetJedecId_Need_Lock(&g_flash_cfg, g_flash_cfg.ioMode & 0x0f, (uint8_t *)&jid);\r\n  XIP_SFlash_Opt_Exit();\r\n  cpu_global_irq_enable();\r\n  jid &= 0xFFFFFF;\r\n  arch_memcpy(data, (void *)&jid, 4);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/**\r\n * @brief read flash data via xip\r\n *\r\n * @param addr\r\n * @param data\r\n * @param len\r\n * @return BL_Err_Type\r\n */\r\nBL_Err_Type ATTR_TCM_SECTION flash_read_via_xip(uint32_t addr, uint8_t *data, uint32_t len) {\r\n  cpu_global_irq_disable();\r\n  L1C_Cache_Flush_Ext();\r\n  XIP_SFlash_Read_Via_Cache_Need_Lock(addr, data, len);\r\n  L1C_Cache_Flush_Ext();\r\n  cpu_global_irq_enable();\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/**\r\n * @brief flash read data\r\n *\r\n * @param addr\r\n * @param data\r\n * @param len\r\n * @return BL_Err_Type\r\n */\r\nBL_Err_Type ATTR_TCM_SECTION flash_read(uint32_t addr, uint8_t *data, uint32_t len) {\r\n  BL_Err_Type ret = ERROR;\r\n\r\n  cpu_global_irq_disable();\r\n  XIP_SFlash_Opt_Enter();\r\n  ret = XIP_SFlash_Read_Need_Lock(&g_flash_cfg, g_flash_cfg.ioMode & 0x0f, addr, data, len);\r\n  XIP_SFlash_Opt_Exit();\r\n  cpu_global_irq_enable();\r\n\r\n  return ret;\r\n}\r\n\r\n/**\r\n * @brief flash write data\r\n *\r\n * @param addr\r\n * @param data\r\n * @param len\r\n * @return BL_Err_Type\r\n */\r\nBL_Err_Type ATTR_TCM_SECTION flash_write(uint32_t addr, uint8_t *data, uint32_t len) {\r\n  BL_Err_Type ret = ERROR;\r\n\r\n  cpu_global_irq_disable();\r\n  XIP_SFlash_Opt_Enter();\r\n  ret = XIP_SFlash_Write_Need_Lock(&g_flash_cfg, g_flash_cfg.ioMode & 0x0f, addr, data, len);\r\n  XIP_SFlash_Opt_Exit();\r\n  cpu_global_irq_enable();\r\n\r\n  return ret;\r\n}\r\n\r\n/**\r\n * @brief flash erase\r\n *\r\n * @param startaddr\r\n * @param endaddr\r\n * @return BL_Err_Type\r\n */\r\nBL_Err_Type ATTR_TCM_SECTION flash_erase(uint32_t startaddr, uint32_t len) {\r\n  BL_Err_Type ret = ERROR;\r\n\r\n  cpu_global_irq_disable();\r\n  XIP_SFlash_Opt_Enter();\r\n  ret = XIP_SFlash_Erase_Need_Lock(&g_flash_cfg, g_flash_cfg.ioMode & 0x0f, startaddr, startaddr + len - 1);\r\n  XIP_SFlash_Opt_Exit();\r\n  cpu_global_irq_enable();\r\n\r\n  return ret;\r\n}\r\n\r\n/**\r\n * @brief flash write protect set\r\n *\r\n * @param protect\r\n * @return BL_Err_Type\r\n */\r\nBL_Err_Type ATTR_TCM_SECTION flash_write_protect_set(SFlash_Protect_Kh25v40_Type protect) {\r\n  BL_Err_Type ret = ERROR;\r\n\r\n  cpu_global_irq_disable();\r\n  XIP_SFlash_Opt_Enter();\r\n  ret = XIP_SFlash_KH25V40_Write_Protect_Need_Lock(&g_flash_cfg, protect);\r\n  XIP_SFlash_Opt_Exit();\r\n  cpu_global_irq_enable();\r\n\r\n  return ret;\r\n}\r\n\r\n/**\r\n * @brief flash clear status register\r\n *\r\n * @param None\r\n * @return BL_Err_Type\r\n */\r\nBL_Err_Type ATTR_TCM_SECTION flash_clear_status_register(void) {\r\n  BL_Err_Type ret = ERROR;\r\n\r\n  cpu_global_irq_disable();\r\n  XIP_SFlash_Opt_Enter();\r\n  ret = XIP_SFlash_Clear_Status_Register_Need_Lock(&g_flash_cfg);\r\n  XIP_SFlash_Opt_Exit();\r\n  cpu_global_irq_enable();\r\n\r\n  return ret;\r\n}\r\n\r\n/**\r\n * @brief set flash cache\r\n *\r\n * @param cont_read\r\n * @param cache_enable\r\n * @param cache_way_disable\r\n * @param flash_offset\r\n * @return BL_Err_Type\r\n */\r\nBL_Err_Type ATTR_TCM_SECTION flash_set_cache(uint8_t cont_read, uint8_t cache_enable, uint8_t cache_way_disable, uint32_t flash_offset) {\r\n  uint32_t    tmp[1];\r\n  BL_Err_Type stat;\r\n\r\n  SF_Ctrl_Set_Owner(SF_CTRL_OWNER_SAHB);\r\n\r\n  XIP_SFlash_Opt_Enter();\r\n  /* To make it simple, exit cont read anyway */\r\n  SFlash_Reset_Continue_Read(&g_flash_cfg);\r\n\r\n  if (g_flash_cfg.cReadSupport == 0) {\r\n    cont_read = 0;\r\n  }\r\n\r\n  if (cont_read == 1) {\r\n    stat = SFlash_Read(&g_flash_cfg, g_flash_cfg.ioMode & 0xf, 1, 0x00000000, (uint8_t *)tmp, sizeof(tmp));\r\n\r\n    if (SUCCESS != stat) {\r\n      XIP_SFlash_Opt_Exit();\r\n      return ERROR;\r\n    }\r\n  }\r\n\r\n  /* Set default value */\r\n  L1C_Cache_Enable_Set(0xf);\r\n\r\n  if (cache_enable) {\r\n    SF_Ctrl_Set_Flash_Image_Offset(flash_offset);\r\n    SFlash_Cache_Read_Enable(&g_flash_cfg, g_flash_cfg.ioMode & 0xf, cont_read, cache_way_disable);\r\n  }\r\n  XIP_SFlash_Opt_Exit();\r\n\r\n  return SUCCESS;\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_gpio.c",
    "content": "/**\n * @file hal_gpio.c\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#include \"hal_gpio.h\"\n#include \"bl702_glb.h\"\n#include \"bl702_gpio.h\"\n\nstatic void GPIO_IRQ(void);\n\nstruct gpio_int_cfg_private {\n  slist_t  list;\n  uint32_t pin;\n  void (*cbfun)(uint32_t pin);\n};\n\nstatic slist_t gpio_int_head = SLIST_OBJECT_INIT(gpio_int_head);\n\n/**\n * @brief\n *\n * @param pin\n * @param mode\n */\nvoid gpio_set_mode(uint32_t pin, uint32_t mode) {\n  GLB_GPIO_Cfg_Type gpio_cfg;\n\n  gpio_cfg.gpioFun = GPIO_FUN_GPIO;\n  gpio_cfg.gpioPin = pin;\n  gpio_cfg.drive   = 3;\n  gpio_cfg.smtCtrl = 1;\n\n  switch (mode) {\n  case GPIO_OUTPUT_MODE:\n    gpio_cfg.gpioMode = GPIO_MODE_OUTPUT;\n    gpio_cfg.pullType = GPIO_PULL_NONE;\n    break;\n\n  case GPIO_OUTPUT_PP_MODE:\n    gpio_cfg.gpioMode = GPIO_MODE_OUTPUT;\n    gpio_cfg.pullType = GPIO_PULL_UP;\n    break;\n\n  case GPIO_OUTPUT_PD_MODE:\n    gpio_cfg.gpioMode = GPIO_MODE_OUTPUT;\n    gpio_cfg.pullType = GPIO_PULL_DOWN;\n    break;\n\n  case GPIO_INPUT_MODE:\n    gpio_cfg.gpioMode = GPIO_MODE_INPUT;\n    gpio_cfg.pullType = GPIO_PULL_NONE;\n    break;\n\n  case GPIO_INPUT_PU_MODE:\n    gpio_cfg.gpioMode = GPIO_MODE_INPUT;\n    gpio_cfg.pullType = GPIO_PULL_UP;\n    break;\n\n  case GPIO_INPUT_PD_MODE:\n    gpio_cfg.gpioMode = GPIO_MODE_INPUT;\n    gpio_cfg.pullType = GPIO_PULL_DOWN;\n    break;\n  case GPIO_HZ_MODE:\n    GLB_GPIO_Set_HZ(pin);\n  default:\n    CPU_Interrupt_Disable(GPIO_INT0_IRQn);\n    GLB_GPIO_IntMask(pin, MASK);\n\n    gpio_cfg.gpioMode = GPIO_MODE_INPUT;\n\n    if (mode == GPIO_ASYNC_RISING_TRIGER_INT_MODE) {\n      gpio_cfg.pullType = GPIO_PULL_DOWN;\n      GLB_Set_GPIO_IntMod(pin, GLB_GPIO_INT_CONTROL_ASYNC, GLB_GPIO_INT_TRIG_POS_PULSE);\n    }\n\n    else if (mode == GPIO_ASYNC_FALLING_TRIGER_INT_MODE) {\n      gpio_cfg.pullType = GPIO_PULL_UP;\n      GLB_Set_GPIO_IntMod(pin, GLB_GPIO_INT_CONTROL_ASYNC, GLB_GPIO_INT_TRIG_NEG_PULSE);\n    }\n\n    else if (mode == GPIO_ASYNC_HIGH_LEVEL_INT_MODE) {\n      gpio_cfg.pullType = GPIO_PULL_DOWN;\n      GLB_Set_GPIO_IntMod(pin, GLB_GPIO_INT_CONTROL_ASYNC, GLB_GPIO_INT_TRIG_POS_LEVEL);\n    }\n\n    else if (mode == GPIO_ASYNC_LOW_LEVEL_INT_MODE) {\n      gpio_cfg.pullType = GPIO_PULL_UP;\n      GLB_Set_GPIO_IntMod(pin, GLB_GPIO_INT_CONTROL_ASYNC, GLB_GPIO_INT_TRIG_NEG_LEVEL);\n    }\n\n    else if (mode == GPIO_SYNC_RISING_TRIGER_INT_MODE) {\n      gpio_cfg.pullType = GPIO_PULL_DOWN;\n      GLB_Set_GPIO_IntMod(pin, GLB_GPIO_INT_CONTROL_SYNC, GLB_GPIO_INT_TRIG_POS_PULSE);\n    }\n\n    else if (mode == GPIO_SYNC_FALLING_TRIGER_INT_MODE) {\n      gpio_cfg.pullType = GPIO_PULL_UP;\n      GLB_Set_GPIO_IntMod(pin, GLB_GPIO_INT_CONTROL_SYNC, GLB_GPIO_INT_TRIG_NEG_PULSE);\n    }\n\n    else if (mode == GPIO_SYNC_HIGH_LEVEL_INT_MODE) {\n      gpio_cfg.pullType = GPIO_PULL_DOWN;\n      GLB_Set_GPIO_IntMod(pin, GLB_GPIO_INT_CONTROL_SYNC, GLB_GPIO_INT_TRIG_POS_LEVEL);\n    }\n\n    else if (mode == GPIO_SYNC_LOW_LEVEL_INT_MODE) {\n      gpio_cfg.pullType = GPIO_PULL_UP;\n      GLB_Set_GPIO_IntMod(pin, GLB_GPIO_INT_CONTROL_SYNC, GLB_GPIO_INT_TRIG_NEG_LEVEL);\n    }\n\n    else {\n      return;\n    }\n\n    break;\n  }\n\n  GLB_GPIO_Init(&gpio_cfg);\n}\n/**\n * @brief\n *\n * @param pin\n * @param value\n */\nvoid gpio_write(uint32_t pin, uint32_t value) {\n  uint32_t tmp = BL_RD_REG(GLB_BASE, GLB_GPIO_OUTPUT);\n\n  if (value) {\n    tmp |= (1 << pin);\n  } else {\n    tmp &= ~(1 << pin);\n  }\n\n  BL_WR_REG(GLB_BASE, GLB_GPIO_OUTPUT, tmp);\n}\n/**\n * @brief\n *\n * @param pin\n */\nvoid gpio_toggle(uint32_t pin) {\n  uint32_t tmp = BL_RD_REG(GLB_BASE, GLB_GPIO_OUTPUT);\n  tmp ^= (1 << pin);\n  BL_WR_REG(GLB_BASE, GLB_GPIO_OUTPUT, tmp);\n}\n/**\n * @brief\n *\n * @param pin\n * @return int\n */\nint gpio_read(uint32_t pin) { return ((BL_RD_REG(GLB_BASE, GLB_GPIO_INPUT) & (1 << pin)) ? 1 : 0); }\n/**\n * @brief\n *\n * @param pin\n * @param cbFun\n */\nvoid gpio_attach_irq(uint32_t pin, void (*cbfun)(uint32_t pin)) {\n  struct gpio_int_cfg_private *int_cfg = malloc(sizeof(struct gpio_int_cfg_private));\n  int_cfg->cbfun                       = cbfun;\n  int_cfg->pin                         = pin;\n  slist_add_tail(&gpio_int_head, &int_cfg->list);\n  CPU_Interrupt_Disable(GPIO_INT0_IRQn);\n  Interrupt_Handler_Register(GPIO_INT0_IRQn, GPIO_IRQ);\n  CPU_Interrupt_Enable(GPIO_INT0_IRQn);\n}\n/**\n * @brief\n *\n * @param pin\n * @param enabled\n */\nvoid gpio_irq_enable(uint32_t pin, uint8_t enabled) {\n  if (enabled) {\n    GLB_GPIO_IntMask(pin, UNMASK);\n  } else {\n    GLB_GPIO_IntMask(pin, MASK);\n  }\n}\n\nstatic void GPIO_IRQ(void) {\n  slist_t *i;\n  uint32_t timeOut = 0;\n#define GLB_GPIO_INT0_CLEAR_TIMEOUT (32)\n  slist_for_each(i, &gpio_int_head) {\n    struct gpio_int_cfg_private *int_cfg = slist_entry(i, struct gpio_int_cfg_private, list);\n\n    if (SET == GLB_Get_GPIO_IntStatus(int_cfg->pin)) {\n      int_cfg->cbfun(int_cfg->pin);\n      GLB_GPIO_IntClear(int_cfg->pin, SET);\n      /* timeout check */\n      timeOut = GLB_GPIO_INT0_CLEAR_TIMEOUT;\n\n      do {\n        timeOut--;\n      } while ((SET == GLB_Get_GPIO_IntStatus(int_cfg->pin)) && timeOut);\n\n      if (!timeOut) {\n        // MSG(\"WARNING: Clear GPIO interrupt status fail.\\r\\n\");\n      }\n\n      GLB_GPIO_IntClear(int_cfg->pin, RESET);\n    }\n  }\n}"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_i2c.c",
    "content": "/**\n * @file hal_i2c.c\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#include \"hal_i2c.h\"\n#include \"bl702_glb.h\"\n#include \"bl702_i2c.h\"\n\nstatic i2c_device_t i2cx_device[I2C_MAX_INDEX] = {\n#ifdef BSP_USING_I2C0\n    I2C0_CONFIG,\n#endif\n#ifdef BSP_USING_I2C1\n    I2C1_CONFIG,\n#endif\n};\n/**\n * @brief\n *\n * @param dev\n * @param oflag\n * @return int\n */\nint i2c_open(struct device *dev, uint16_t oflag) {\n  i2c_device_t *i2c_device = (i2c_device_t *)dev;\n\n  if (i2c_device->mode == I2C_HW_MODE) {\n    I2C_SetPrd(i2c_device->id, i2c_device->phase);\n  }\n\n  return 0;\n}\n\n/**\n * @brief\n *\n * @param index\n * @param name\n * @param flag\n * @return int\n */\nint i2c_register(enum i2c_index_type index, const char *name) {\n  struct device *dev;\n\n  if (I2C_MAX_INDEX == 0) {\n    return -DEVICE_EINVAL;\n  }\n\n  dev = &(i2cx_device[index].parent);\n\n  dev->open    = i2c_open;\n  dev->close   = NULL;\n  dev->control = NULL;\n  dev->write   = NULL;\n  dev->read    = NULL;\n\n  dev->type   = DEVICE_CLASS_I2C;\n  dev->handle = NULL;\n\n  return device_register(dev, name);\n}\n/**\n * @brief\n *\n * @param dev\n * @param msgs\n * @param num\n * @return uint32_t\n */\nint i2c_transfer(struct device *dev, i2c_msg_t msgs[], uint32_t num) {\n  i2c_msg_t       *msg;\n  I2C_Transfer_Cfg i2cCfg = {0};\n\n  i2c_device_t *i2c_device = (i2c_device_t *)dev;\n\n  if (i2c_device->mode == I2C_HW_MODE) {\n    for (uint32_t i = 0; i < num; i++) {\n      msg                  = &msgs[i];\n      i2cCfg.slaveAddr     = msg->slaveaddr;\n      i2cCfg.stopEveryByte = DISABLE;\n      i2cCfg.subAddr       = msg->subaddr;\n      i2cCfg.dataSize      = msg->len;\n      i2cCfg.data          = msg->buf;\n\n      if (msg->flags & SUB_ADDR_0BYTE) {\n        i2cCfg.subAddrSize = 0;\n      } else if (msg->flags & SUB_ADDR_1BYTE) {\n        i2cCfg.subAddrSize = 1;\n      } else if (msg->flags & SUB_ADDR_2BYTE) {\n        i2cCfg.subAddrSize = 2;\n      }\n\n      if ((msg->flags & I2C_RW_MASK) == I2C_WR) {\n        return I2C_MasterSendBlocking(i2c_device->id, &i2cCfg);\n      } else if ((msg->flags & I2C_RW_MASK) == I2C_RD) {\n        return I2C_MasterReceiveBlocking(i2c_device->id, &i2cCfg);\n      }\n    }\n  } else {\n  }\n\n  return 0;\n}"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_mtimer.c",
    "content": "/**\n * @file hal_mtimer.c\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#include \"hal_mtimer.h\"\n#include \"bl702_glb.h\"\n#include \"risc-v/Core/Include/clic.h\"\n\nstatic void (*systick_callback)(void);\nstatic uint64_t next_compare_tick = 0;\nstatic uint64_t current_set_ticks = 0;\n\nstatic void Systick_Handler(void) {\n  *(volatile uint64_t *)(CLIC_CTRL_ADDR + CLIC_MTIMECMP) = next_compare_tick;\n  systick_callback();\n  next_compare_tick += current_set_ticks;\n}\n\n/**\n * @brief\n *\n * @param time\n * @param interruptFun\n */\nvoid mtimer_set_alarm_time(uint64_t ticks, void (*interruptfun)(void)) {\n  CPU_Interrupt_Disable(MTIME_IRQn);\n\n  uint32_t                 ulCurrentTimeHigh, ulCurrentTimeLow;\n  volatile uint32_t *const pulTimeHigh = (volatile uint32_t *const)(CLIC_CTRL_ADDR + CLIC_MTIME + 4);\n  volatile uint32_t *const pulTimeLow  = (volatile uint32_t *const)(CLIC_CTRL_ADDR + CLIC_MTIME);\n  volatile uint32_t        ulHartId    = 0;\n\n  current_set_ticks = ticks;\n  systick_callback  = interruptfun;\n\n  __asm volatile(\"csrr %0, mhartid\" : \"=r\"(ulHartId));\n\n  do {\n    ulCurrentTimeHigh = *pulTimeHigh;\n    ulCurrentTimeLow  = *pulTimeLow;\n  } while (ulCurrentTimeHigh != *pulTimeHigh);\n\n  next_compare_tick = (uint64_t)ulCurrentTimeHigh;\n  next_compare_tick <<= 32ULL;\n  next_compare_tick |= (uint64_t)ulCurrentTimeLow;\n  next_compare_tick += (uint64_t)current_set_ticks;\n\n  *(volatile uint64_t *)(CLIC_CTRL_ADDR + CLIC_MTIMECMP) = next_compare_tick;\n\n  /* Prepare the time to use after the next tick interrupt. */\n  next_compare_tick += (uint64_t)current_set_ticks;\n\n  Interrupt_Handler_Register(MTIME_IRQn, Systick_Handler);\n  CPU_Interrupt_Enable(MTIME_IRQn);\n}\n\n/**\n * @brief\n *\n * @return uint64_t\n */\nuint64_t mtimer_get_time_ms() { return mtimer_get_time_us() / 1000; }\n/**\n * @brief\n *\n * @return uint64_t\n */\nuint64_t mtimer_get_time_us() {\n  uint32_t tmpValLow, tmpValHigh, tmpValHigh1;\n\n  do {\n    tmpValLow   = *(volatile uint32_t *)(CLIC_CTRL_ADDR + CLIC_MTIME);\n    tmpValHigh  = *(volatile uint32_t *)(CLIC_CTRL_ADDR + CLIC_MTIME + 4);\n    tmpValHigh1 = *(volatile uint32_t *)(CLIC_CTRL_ADDR + CLIC_MTIME + 4);\n  } while (tmpValHigh != tmpValHigh1);\n\n  return (((uint64_t)tmpValHigh << 32) + tmpValLow);\n}\n/**\n * @brief\n *\n * @param time\n */\nvoid mtimer_delay_ms(uint32_t time) {\n  uint64_t cnt       = 0;\n  uint32_t clock     = SystemCoreClockGet();\n  uint64_t startTime = mtimer_get_time_ms();\n\n  while (mtimer_get_time_ms() - startTime < time) {\n    cnt++;\n\n    /* assume BFLB_BSP_Get_Time_Ms take 32 cycles*/\n    if (cnt > (time * (clock >> (10 + 5))) * 2) {\n      break;\n    }\n  }\n}\n/**\n * @brief\n *\n * @param time\n */\nvoid mtimer_delay_us(uint32_t time) {\n  uint64_t cnt       = 0;\n  uint32_t clock     = SystemCoreClockGet();\n  uint64_t startTime = mtimer_get_time_us();\n\n  while (mtimer_get_time_us() - startTime < time) {\n    cnt++;\n\n    /* assume BFLB_BSP_Get_Time_Ms take 32 cycles*/\n    if (cnt > (time * (clock >> (10 + 5))) * 2) {\n      break;\n    }\n  }\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_pm.c",
    "content": "/**\n * @file hal_pm.c\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#include \"hal_pm.h\"\n#include \"bl702_glb.h\"\n#include \"bl702_sflash.h\"\n#include \"hal_clock.h\"\n#include \"hal_flash.h\"\n#include \"hal_rtc.h\"\n#include \"risc-v/Core/Include/clic.h\"\n\n/* Cache Way Disable, will get from l1c register */\nuint8_t cacheWayDisable = 0;\n\n/* PSRAM IO Configuration, will get from glb register */\nuint32_t psramIoCfg = 0;\n\n/* Flash offset value, will get from sf_ctrl register */\nuint32_t flash_offset = 0;\n\nSPI_Flash_Cfg_Type *flash_cfg;\n\n#define PM_PDS_FLASH_POWER_OFF   1\n#define PM_PDS_DLL_POWER_OFF     1\n#define PM_PDS_PLL_POWER_OFF     1\n#define PM_PDS_RF_POWER_OFF      1\n#define PM_PDS_LDO_LEVEL_DEFAULT HBN_LDO_LEVEL_1P10V\n#define PM_HBN_LDO_LEVEL_DEFAULT HBN_LDO_LEVEL_0P90V\n\nvoid HBN_OUT0_IRQ(void);\nvoid HBN_OUT1_IRQ(void);\n\n/** @defgroup  Hal_Power_Global_Variables\n *\n *  @brief PDS level config\n *  @{\n */\nstatic PDS_DEFAULT_LV_CFG_Type ATTR_TCM_CONST_SECTION pdsCfgLevel0 = {\n    .pdsCtl =\n        {\n                 .pdsStart                = 1,\n                 .sleepForever            = 0,\n                 .xtalForceOff            = 0,\n                 .saveWifiState           = 0,\n                 .dcdc18Off               = 1,\n                 .bgSysOff                = 1,\n                 .gpioIePuPd              = 1,\n                 .puFlash                 = 0,\n                 .clkOff                  = 1,\n                 .memStby                 = 1,\n                 .swPuFlash               = 1,\n                 .isolation               = 1,\n                 .waitXtalRdy             = 0,\n                 .pdsPwrOff               = 1,\n                 .xtalOff                 = 0,\n                 .socEnbForceOn           = 1,\n                 .pdsRstSocEn             = 0,\n                 .pdsRC32mOn              = 0,\n                 .pdsLdoVselEn            = 0,\n                 .pdsRamLowPowerWithClkEn = 1,\n                 .cpu0WfiMask             = 0,\n                 .ldo11Off                = 1,\n                 .pdsForceRamClkEn        = 0,\n                 .pdsLdoVol               = 0xA,\n                 .pdsCtlRfSel             = 3,\n                 .pdsCtlPllSel            = 0,\n                 },\n    .pdsCtl2 =\n        {\n                 .forceCpuPwrOff  = 0,\n                 .forceBzPwrOff   = 0,\n                 .forceUsbPwrOff  = 0,\n                 .forceCpuIsoEn   = 0,\n                 .forceBzIsoEn    = 0,\n                 .forceUsbIsoEn   = 0,\n                 .forceCpuPdsRst  = 0,\n                 .forceBzPdsRst   = 0,\n                 .forceUsbPdsRst  = 0,\n                 .forceCpuMemStby = 0,\n                 .forceBzMemStby  = 0,\n                 .forceUsbMemStby = 0,\n                 .forceCpuGateClk = 0,\n                 .forceBzGateClk  = 0,\n                 .forceUsbGateClk = 0,\n                 },\n    .pdsCtl3 =\n        {\n                 .forceMiscPwrOff  = 0,\n                 .forceBlePwrOff   = 0,\n                 .forceBleIsoEn    = 0,\n                 .forceMiscPdsRst  = 0,\n                 .forceBlePdsRst   = 0,\n                 .forceMiscMemStby = 0,\n                 .forceBleMemStby  = 0,\n                 .forceMiscGateClk = 0,\n                 .forceBleGateClk  = 0,\n                 .CpuIsoEn         = 0,\n                 .BzIsoEn          = 0,\n                 .BleIsoEn         = 1,\n                 .UsbIsoEn         = 0,\n                 .MiscIsoEn        = 0,\n                 },\n    .pdsCtl4 = {\n                 .cpuPwrOff     = 0,\n                 .cpuRst        = 0,\n                 .cpuMemStby    = 1,\n                 .cpuGateClk    = 1,\n                 .BzPwrOff      = 0,\n                 .BzRst         = 0,\n                 .BzMemStby     = 1,\n                 .BzGateClk     = 1,\n                 .BlePwrOff     = 1,\n                 .BleRst        = 1,\n                 .BleMemStby    = 1,\n                 .BleGateClk    = 1,\n                 .UsbPwrOff     = 0,\n                 .UsbRst        = 0,\n                 .UsbMemStby    = 1,\n                 .UsbGateClk    = 1,\n                 .MiscPwrOff    = 0,\n                 .MiscRst       = 0,\n                 .MiscMemStby   = 1,\n                 .MiscGateClk   = 1,\n                 .MiscAnaPwrOff = 1,\n                 .MiscDigPwrOff = 1,\n                 }\n};\nstatic PDS_DEFAULT_LV_CFG_Type ATTR_TCM_CONST_SECTION pdsCfgLevel1 = {\n    .pdsCtl =\n        {\n                 .pdsStart                = 1,\n                 .sleepForever            = 0,\n                 .xtalForceOff            = 0,\n                 .saveWifiState           = 0,\n                 .dcdc18Off               = 1,\n                 .bgSysOff                = 1,\n                 .gpioIePuPd              = 1,\n                 .puFlash                 = 0,\n                 .clkOff                  = 1,\n                 .memStby                 = 1,\n                 .swPuFlash               = 1,\n                 .isolation               = 1,\n                 .waitXtalRdy             = 0,\n                 .pdsPwrOff               = 1,\n                 .xtalOff                 = 0,\n                 .socEnbForceOn           = 1,\n                 .pdsRstSocEn             = 0,\n                 .pdsRC32mOn              = 0,\n                 .pdsLdoVselEn            = 0,\n                 .pdsRamLowPowerWithClkEn = 1,\n                 .cpu0WfiMask             = 0,\n                 .ldo11Off                = 1,\n                 .pdsForceRamClkEn        = 0,\n                 .pdsLdoVol               = 0xA,\n                 .pdsCtlRfSel             = 3,\n                 .pdsCtlPllSel            = 0,\n                 },\n    .pdsCtl2 =\n        {\n                 .forceCpuPwrOff  = 0,\n                 .forceBzPwrOff   = 0,\n                 .forceUsbPwrOff  = 0,\n                 .forceCpuIsoEn   = 0,\n                 .forceBzIsoEn    = 0,\n                 .forceUsbIsoEn   = 0,\n                 .forceCpuPdsRst  = 0,\n                 .forceBzPdsRst   = 0,\n                 .forceUsbPdsRst  = 0,\n                 .forceCpuMemStby = 0,\n                 .forceBzMemStby  = 0,\n                 .forceUsbMemStby = 0,\n                 .forceCpuGateClk = 0,\n                 .forceBzGateClk  = 0,\n                 .forceUsbGateClk = 0,\n                 },\n    .pdsCtl3 =\n        {\n                 .forceMiscPwrOff  = 0,\n                 .forceBlePwrOff   = 0,\n                 .forceBleIsoEn    = 0,\n                 .forceMiscPdsRst  = 0,\n                 .forceBlePdsRst   = 0,\n                 .forceMiscMemStby = 0,\n                 .forceBleMemStby  = 0,\n                 .forceMiscGateClk = 0,\n                 .forceBleGateClk  = 0,\n                 .CpuIsoEn         = 0,\n                 .BzIsoEn          = 0,\n                 .BleIsoEn         = 1,\n                 .UsbIsoEn         = 1,\n                 .MiscIsoEn        = 0,\n                 },\n    .pdsCtl4 = {\n                 .cpuPwrOff     = 0,\n                 .cpuRst        = 0,\n                 .cpuMemStby    = 1,\n                 .cpuGateClk    = 1,\n                 .BzPwrOff      = 0,\n                 .BzRst         = 0,\n                 .BzMemStby     = 1,\n                 .BzGateClk     = 1,\n                 .BlePwrOff     = 1,\n                 .BleRst        = 1,\n                 .BleMemStby    = 1,\n                 .BleGateClk    = 1,\n                 .UsbPwrOff     = 1,\n                 .UsbRst        = 1,\n                 .UsbMemStby    = 1,\n                 .UsbGateClk    = 1,\n                 .MiscPwrOff    = 0,\n                 .MiscRst       = 0,\n                 .MiscMemStby   = 1,\n                 .MiscGateClk   = 1,\n                 .MiscAnaPwrOff = 1,\n                 .MiscDigPwrOff = 1,\n                 }\n};\nstatic PDS_DEFAULT_LV_CFG_Type ATTR_TCM_CONST_SECTION pdsCfgLevel2 = {\n    .pdsCtl =\n        {\n                 .pdsStart                = 1,\n                 .sleepForever            = 0,\n                 .xtalForceOff            = 0,\n                 .saveWifiState           = 0,\n                 .dcdc18Off               = 1,\n                 .bgSysOff                = 1,\n                 .gpioIePuPd              = 1,\n                 .puFlash                 = 0,\n                 .clkOff                  = 1,\n                 .memStby                 = 1,\n                 .swPuFlash               = 1,\n                 .isolation               = 1,\n                 .waitXtalRdy             = 0,\n                 .pdsPwrOff               = 1,\n                 .xtalOff                 = 0,\n                 .socEnbForceOn           = 1,\n                 .pdsRstSocEn             = 0,\n                 .pdsRC32mOn              = 0,\n                 .pdsLdoVselEn            = 0,\n                 .pdsRamLowPowerWithClkEn = 1,\n                 .cpu0WfiMask             = 0,\n                 .ldo11Off                = 1,\n                 .pdsForceRamClkEn        = 0,\n                 .pdsLdoVol               = 0xA,\n                 .pdsCtlRfSel             = 2,\n                 .pdsCtlPllSel            = 0,\n                 },\n    .pdsCtl2 =\n        {\n                 .forceCpuPwrOff  = 0,\n                 .forceBzPwrOff   = 0,\n                 .forceUsbPwrOff  = 0,\n                 .forceCpuIsoEn   = 0,\n                 .forceBzIsoEn    = 0,\n                 .forceUsbIsoEn   = 0,\n                 .forceCpuPdsRst  = 0,\n                 .forceBzPdsRst   = 0,\n                 .forceUsbPdsRst  = 0,\n                 .forceCpuMemStby = 0,\n                 .forceBzMemStby  = 0,\n                 .forceUsbMemStby = 0,\n                 .forceCpuGateClk = 0,\n                 .forceBzGateClk  = 0,\n                 .forceUsbGateClk = 0,\n                 },\n    .pdsCtl3 =\n        {\n                 .forceMiscPwrOff  = 0,\n                 .forceBlePwrOff   = 0,\n                 .forceBleIsoEn    = 0,\n                 .forceMiscPdsRst  = 0,\n                 .forceBlePdsRst   = 0,\n                 .forceMiscMemStby = 0,\n                 .forceBleMemStby  = 0,\n                 .forceMiscGateClk = 0,\n                 .forceBleGateClk  = 0,\n                 .CpuIsoEn         = 0,\n                 .BzIsoEn          = 1,\n                 .BleIsoEn         = 1,\n                 .UsbIsoEn         = 0,\n                 .MiscIsoEn        = 0,\n                 },\n    .pdsCtl4 = {\n                 .cpuPwrOff     = 0,\n                 .cpuRst        = 0,\n                 .cpuMemStby    = 1,\n                 .cpuGateClk    = 1,\n                 .BzPwrOff      = 1,\n                 .BzRst         = 1,\n                 .BzMemStby     = 1,\n                 .BzGateClk     = 1,\n                 .BlePwrOff     = 1,\n                 .BleRst        = 1,\n                 .BleMemStby    = 1,\n                 .BleGateClk    = 1,\n                 .UsbPwrOff     = 0,\n                 .UsbRst        = 0,\n                 .UsbMemStby    = 1,\n                 .UsbGateClk    = 1,\n                 .MiscPwrOff    = 0,\n                 .MiscRst       = 0,\n                 .MiscMemStby   = 1,\n                 .MiscGateClk   = 1,\n                 .MiscAnaPwrOff = 1,\n                 .MiscDigPwrOff = 1,\n                 }\n};\nstatic PDS_DEFAULT_LV_CFG_Type ATTR_TCM_CONST_SECTION pdsCfgLevel3 = {\n    .pdsCtl =\n        {\n                 .pdsStart                = 1,\n                 .sleepForever            = 0,\n                 .xtalForceOff            = 0,\n                 .saveWifiState           = 0,\n                 .dcdc18Off               = 1,\n                 .bgSysOff                = 1,\n                 .gpioIePuPd              = 1,\n                 .puFlash                 = 0,\n                 .clkOff                  = 1,\n                 .memStby                 = 1,\n                 .swPuFlash               = 1,\n                 .isolation               = 1,\n                 .waitXtalRdy             = 0,\n                 .pdsPwrOff               = 1,\n                 .xtalOff                 = 0,\n                 .socEnbForceOn           = 1,\n                 .pdsRstSocEn             = 0,\n                 .pdsRC32mOn              = 0,\n                 .pdsLdoVselEn            = 0,\n                 .pdsRamLowPowerWithClkEn = 1,\n                 .cpu0WfiMask             = 0,\n                 .ldo11Off                = 1,\n                 .pdsForceRamClkEn        = 0,\n                 .pdsLdoVol               = 0xA,\n                 .pdsCtlRfSel             = 2,\n                 .pdsCtlPllSel            = 0,\n                 },\n    .pdsCtl2 =\n        {\n                 .forceCpuPwrOff  = 0,\n                 .forceBzPwrOff   = 0,\n                 .forceUsbPwrOff  = 0,\n                 .forceCpuIsoEn   = 0,\n                 .forceBzIsoEn    = 0,\n                 .forceUsbIsoEn   = 0,\n                 .forceCpuPdsRst  = 0,\n                 .forceBzPdsRst   = 0,\n                 .forceUsbPdsRst  = 0,\n                 .forceCpuMemStby = 0,\n                 .forceBzMemStby  = 0,\n                 .forceUsbMemStby = 0,\n                 .forceCpuGateClk = 0,\n                 .forceBzGateClk  = 0,\n                 .forceUsbGateClk = 0,\n                 },\n    .pdsCtl3 =\n        {\n                 .forceMiscPwrOff  = 0,\n                 .forceBlePwrOff   = 0,\n                 .forceBleIsoEn    = 0,\n                 .forceMiscPdsRst  = 0,\n                 .forceBlePdsRst   = 0,\n                 .forceMiscMemStby = 0,\n                 .forceBleMemStby  = 0,\n                 .forceMiscGateClk = 0,\n                 .forceBleGateClk  = 0,\n                 .CpuIsoEn         = 0,\n                 .BzIsoEn          = 1,\n                 .BleIsoEn         = 1,\n                 .UsbIsoEn         = 1,\n                 .MiscIsoEn        = 0,\n                 },\n    .pdsCtl4 = {\n                 .cpuPwrOff     = 0,\n                 .cpuRst        = 0,\n                 .cpuMemStby    = 1,\n                 .cpuGateClk    = 1,\n                 .BzPwrOff      = 1,\n                 .BzRst         = 1,\n                 .BzMemStby     = 1,\n                 .BzGateClk     = 1,\n                 .BlePwrOff     = 1,\n                 .BleRst        = 1,\n                 .BleMemStby    = 1,\n                 .BleGateClk    = 1,\n                 .UsbPwrOff     = 1,\n                 .UsbRst        = 1,\n                 .UsbMemStby    = 1,\n                 .UsbGateClk    = 1,\n                 .MiscPwrOff    = 0,\n                 .MiscRst       = 0,\n                 .MiscMemStby   = 1,\n                 .MiscGateClk   = 1,\n                 .MiscAnaPwrOff = 1,\n                 .MiscDigPwrOff = 1,\n                 }\n};\n#if 0\nstatic PDS_DEFAULT_LV_CFG_Type ATTR_TCM_CONST_SECTION pdsCfgLevel4 = {\n    .pdsCtl = {\n        .pdsStart = 1,\n        .sleepForever = 0,\n        .xtalForceOff = 0,\n        .saveWifiState = 0,\n        .dcdc18Off = 1,\n        .bgSysOff = 1,\n        .gpioIePuPd = 1,\n        .puFlash = 0,\n        .clkOff = 1,\n        .memStby = 1,\n        .swPuFlash = 1,\n        .isolation = 1,\n        .waitXtalRdy = 0,\n        .pdsPwrOff = 1,\n        .xtalOff = 0,\n        .socEnbForceOn = 1,\n        .pdsRstSocEn = 0,\n        .pdsRC32mOn = 0,\n        .pdsLdoVselEn = 0,\n        .pdsRamLowPowerWithClkEn = 1,\n        .cpu0WfiMask = 0,\n        .ldo11Off = 1,\n        .pdsForceRamClkEn = 0,\n        .pdsLdoVol = 0xA,\n        .pdsCtlRfSel = 3,\n        .pdsCtlPllSel = 0,\n    },\n    .pdsCtl2 = {\n        .forceCpuPwrOff = 0,\n        .forceBzPwrOff = 0,\n        .forceUsbPwrOff = 0,\n        .forceCpuIsoEn = 0,\n        .forceBzIsoEn = 0,\n        .forceUsbIsoEn = 0,\n        .forceCpuPdsRst = 0,\n        .forceBzPdsRst = 0,\n        .forceUsbPdsRst = 0,\n        .forceCpuMemStby = 0,\n        .forceBzMemStby = 0,\n        .forceUsbMemStby = 0,\n        .forceCpuGateClk = 0,\n        .forceBzGateClk = 0,\n        .forceUsbGateClk = 0,\n    },\n    .pdsCtl3 = {\n        .forceMiscPwrOff = 0,\n        .forceBlePwrOff = 0,\n        .forceBleIsoEn = 0,\n        .forceMiscPdsRst = 0,\n        .forceBlePdsRst = 0,\n        .forceMiscMemStby = 0,\n        .forceBleMemStby = 0,\n        .forceMiscGateClk = 0,\n        .forceBleGateClk = 0,\n        .CpuIsoEn = 1,\n        .BzIsoEn = 0,\n        .BleIsoEn = 1,\n        .UsbIsoEn = 0,\n        .MiscIsoEn = 0,\n    },\n    .pdsCtl4 = {\n        .cpuPwrOff = 1,\n        .cpuRst = 1,\n        .cpuMemStby = 1,\n        .cpuGateClk = 1,\n        .BzPwrOff = 0,\n        .BzRst = 0,\n        .BzMemStby = 1,\n        .BzGateClk = 1,\n        .BlePwrOff = 1,\n        .BleRst = 1,\n        .BleMemStby = 1,\n        .BleGateClk = 1,\n        .UsbPwrOff = 0,\n        .UsbRst = 0,\n        .UsbMemStby = 1,\n        .UsbGateClk = 1,\n        .MiscPwrOff = 0,\n        .MiscRst = 0,\n        .MiscMemStby = 1,\n        .MiscGateClk = 1,\n        .MiscAnaPwrOff = 1,\n        .MiscDigPwrOff = 1,\n    }\n};\nstatic PDS_DEFAULT_LV_CFG_Type ATTR_TCM_CONST_SECTION pdsCfgLevel5 = {\n    .pdsCtl = {\n        .pdsStart = 1,\n        .sleepForever = 0,\n        .xtalForceOff = 0,\n        .saveWifiState = 0,\n        .dcdc18Off = 1,\n        .bgSysOff = 1,\n        .gpioIePuPd = 1,\n        .puFlash = 0,\n        .clkOff = 1,\n        .memStby = 1,\n        .swPuFlash = 1,\n        .isolation = 1,\n        .waitXtalRdy = 0,\n        .pdsPwrOff = 1,\n        .xtalOff = 0,\n        .socEnbForceOn = 1,\n        .pdsRstSocEn = 0,\n        .pdsRC32mOn = 0,\n        .pdsLdoVselEn = 0,\n        .pdsRamLowPowerWithClkEn = 1,\n        .cpu0WfiMask = 0,\n        .ldo11Off = 1,\n        .pdsForceRamClkEn = 0,\n        .pdsLdoVol = 0xA,\n        .pdsCtlRfSel = 3,\n        .pdsCtlPllSel = 0,\n    },\n    .pdsCtl2 = {\n        .forceCpuPwrOff = 0,\n        .forceBzPwrOff = 0,\n        .forceUsbPwrOff = 0,\n        .forceCpuIsoEn = 0,\n        .forceBzIsoEn = 0,\n        .forceUsbIsoEn = 0,\n        .forceCpuPdsRst = 0,\n        .forceBzPdsRst = 0,\n        .forceUsbPdsRst = 0,\n        .forceCpuMemStby = 0,\n        .forceBzMemStby = 0,\n        .forceUsbMemStby = 0,\n        .forceCpuGateClk = 0,\n        .forceBzGateClk = 0,\n        .forceUsbGateClk = 0,\n    },\n    .pdsCtl3 = {\n        .forceMiscPwrOff = 0,\n        .forceBlePwrOff = 0,\n        .forceBleIsoEn = 0,\n        .forceMiscPdsRst = 0,\n        .forceBlePdsRst = 0,\n        .forceMiscMemStby = 0,\n        .forceBleMemStby = 0,\n        .forceMiscGateClk = 0,\n        .forceBleGateClk = 0,\n        .CpuIsoEn = 1,\n        .BzIsoEn = 0,\n        .BleIsoEn = 1,\n        .UsbIsoEn = 1,\n        .MiscIsoEn = 0,\n    },\n    .pdsCtl4 = {\n        .cpuPwrOff = 1,\n        .cpuRst = 1,\n        .cpuMemStby = 1,\n        .cpuGateClk = 1,\n        .BzPwrOff = 0,\n        .BzRst = 0,\n        .BzMemStby = 1,\n        .BzGateClk = 1,\n        .BlePwrOff = 1,\n        .BleRst = 1,\n        .BleMemStby = 1,\n        .BleGateClk = 1,\n        .UsbPwrOff = 1,\n        .UsbRst = 1,\n        .UsbMemStby = 1,\n        .UsbGateClk = 1,\n        .MiscPwrOff = 0,\n        .MiscRst = 0,\n        .MiscMemStby = 1,\n        .MiscGateClk = 1,\n        .MiscAnaPwrOff = 1,\n        .MiscDigPwrOff = 1,\n    }\n};\nstatic PDS_DEFAULT_LV_CFG_Type ATTR_TCM_CONST_SECTION pdsCfgLevel6 = {\n    .pdsCtl = {\n        .pdsStart = 1,\n        .sleepForever = 0,\n        .xtalForceOff = 0,\n        .saveWifiState = 0,\n        .dcdc18Off = 1,\n        .bgSysOff = 1,\n        .gpioIePuPd = 1,\n        .puFlash = 0,\n        .clkOff = 1,\n        .memStby = 1,\n        .swPuFlash = 1,\n        .isolation = 1,\n        .waitXtalRdy = 0,\n        .pdsPwrOff = 1,\n        .xtalOff = 0,\n        .socEnbForceOn = 1,\n        .pdsRstSocEn = 0,\n        .pdsRC32mOn = 0,\n        .pdsLdoVselEn = 0,\n        .pdsRamLowPowerWithClkEn = 1,\n        .cpu0WfiMask = 0,\n        .ldo11Off = 1,\n        .pdsForceRamClkEn = 0,\n        .pdsLdoVol = 0xA,\n        .pdsCtlRfSel = 2,\n        .pdsCtlPllSel = 0,\n    },\n    .pdsCtl2 = {\n        .forceCpuPwrOff = 0,\n        .forceBzPwrOff = 0,\n        .forceUsbPwrOff = 0,\n        .forceCpuIsoEn = 0,\n        .forceBzIsoEn = 0,\n        .forceUsbIsoEn = 0,\n        .forceCpuPdsRst = 0,\n        .forceBzPdsRst = 0,\n        .forceUsbPdsRst = 0,\n        .forceCpuMemStby = 0,\n        .forceBzMemStby = 0,\n        .forceUsbMemStby = 0,\n        .forceCpuGateClk = 0,\n        .forceBzGateClk = 0,\n        .forceUsbGateClk = 0,\n    },\n    .pdsCtl3 = {\n        .forceMiscPwrOff = 0,\n        .forceBlePwrOff = 0,\n        .forceBleIsoEn = 0,\n        .forceMiscPdsRst = 0,\n        .forceBlePdsRst = 0,\n        .forceMiscMemStby = 0,\n        .forceBleMemStby = 0,\n        .forceMiscGateClk = 0,\n        .forceBleGateClk = 0,\n        .CpuIsoEn = 1,\n        .BzIsoEn = 1,\n        .BleIsoEn = 1,\n        .UsbIsoEn = 0,\n        .MiscIsoEn = 0,\n    },\n    .pdsCtl4 = {\n        .cpuPwrOff = 1,\n        .cpuRst = 1,\n        .cpuMemStby = 1,\n        .cpuGateClk = 1,\n        .BzPwrOff = 1,\n        .BzRst = 1,\n        .BzMemStby = 1,\n        .BzGateClk = 1,\n        .BlePwrOff = 1,\n        .BleRst = 1,\n        .BleMemStby = 1,\n        .BleGateClk = 1,\n        .UsbPwrOff = 0,\n        .UsbRst = 0,\n        .UsbMemStby = 1,\n        .UsbGateClk = 1,\n        .MiscPwrOff = 0,\n        .MiscRst = 0,\n        .MiscMemStby = 1,\n        .MiscGateClk = 1,\n        .MiscAnaPwrOff = 1,\n        .MiscDigPwrOff = 1,\n    }\n};\nstatic PDS_DEFAULT_LV_CFG_Type ATTR_TCM_CONST_SECTION pdsCfgLevel7 = {\n    .pdsCtl = {\n        .pdsStart = 1,\n        .sleepForever = 0,\n        .xtalForceOff = 0,\n        .saveWifiState = 0,\n        .dcdc18Off = 1,\n        .bgSysOff = 1,\n        .gpioIePuPd = 1,\n        .puFlash = 0,\n        .clkOff = 1,\n        .memStby = 1,\n        .swPuFlash = 1,\n        .isolation = 1,\n        .waitXtalRdy = 0,\n        .pdsPwrOff = 1,\n        .xtalOff = 0,\n        .socEnbForceOn = 1,\n        .pdsRstSocEn = 0,\n        .pdsRC32mOn = 0,\n        .pdsLdoVselEn = 0,\n        .pdsRamLowPowerWithClkEn = 1,\n        .cpu0WfiMask = 0,\n        .ldo11Off = 1,\n        .pdsForceRamClkEn = 0,\n        .pdsLdoVol = 0xA,\n        .pdsCtlRfSel = 2,\n        .pdsCtlPllSel = 0,\n    },\n    .pdsCtl2 = {\n        .forceCpuPwrOff = 0,\n        .forceBzPwrOff = 0,\n        .forceUsbPwrOff = 0,\n        .forceCpuIsoEn = 0,\n        .forceBzIsoEn = 0,\n        .forceUsbIsoEn = 0,\n        .forceCpuPdsRst = 0,\n        .forceBzPdsRst = 0,\n        .forceUsbPdsRst = 0,\n        .forceCpuMemStby = 0,\n        .forceBzMemStby = 0,\n        .forceUsbMemStby = 0,\n        .forceCpuGateClk = 0,\n        .forceBzGateClk = 0,\n        .forceUsbGateClk = 0,\n    },\n    .pdsCtl3 = {\n        .forceMiscPwrOff = 0,\n        .forceBlePwrOff = 0,\n        .forceBleIsoEn = 0,\n        .forceMiscPdsRst = 0,\n        .forceBlePdsRst = 0,\n        .forceMiscMemStby = 0,\n        .forceBleMemStby = 0,\n        .forceMiscGateClk = 0,\n        .forceBleGateClk = 0,\n        .CpuIsoEn = 1,\n        .BzIsoEn = 1,\n        .BleIsoEn = 1,\n        .UsbIsoEn = 1,\n        .MiscIsoEn = 0,\n    },\n    .pdsCtl4 = {\n        .cpuPwrOff = 1,\n        .cpuRst = 1,\n        .cpuMemStby = 1,\n        .cpuGateClk = 1,\n        .BzPwrOff = 1,\n        .BzRst = 1,\n        .BzMemStby = 1,\n        .BzGateClk = 1,\n        .BlePwrOff = 1,\n        .BleRst = 1,\n        .BleMemStby = 1,\n        .BleGateClk = 1,\n        .UsbPwrOff = 1,\n        .UsbRst = 1,\n        .UsbMemStby = 1,\n        .UsbGateClk = 1,\n        .MiscPwrOff = 0,\n        .MiscRst = 0,\n        .MiscMemStby = 1,\n        .MiscGateClk = 1,\n        .MiscAnaPwrOff = 1,\n        .MiscDigPwrOff = 1,\n    }\n};\n#endif\nstatic PDS_DEFAULT_LV_CFG_Type ATTR_TCM_CONST_SECTION pdsCfgLevel31 = {\n    .pdsCtl =\n        {\n                 .pdsStart                = 1,\n                 .sleepForever            = 0,\n                 .xtalForceOff            = 0,\n                 .saveWifiState           = 0,\n                 .dcdc18Off               = 1,\n                 .bgSysOff                = 1,\n                 .gpioIePuPd              = 1,\n                 .puFlash                 = 0,\n                 .clkOff                  = 1,\n                 .memStby                 = 1,\n                 .swPuFlash               = 1,\n                 .isolation               = 1,\n                 .waitXtalRdy             = 0,\n                 .pdsPwrOff               = 1,\n                 .xtalOff                 = 0,\n                 .socEnbForceOn           = 0,\n                 .pdsRstSocEn             = 0,\n                 .pdsRC32mOn              = 0,\n                 .pdsLdoVselEn            = 0,\n                 .pdsRamLowPowerWithClkEn = 1,\n                 .cpu0WfiMask             = 0,\n                 .ldo11Off                = 1,\n                 .pdsForceRamClkEn        = 0,\n                 .pdsLdoVol               = 0xA,\n                 .pdsCtlRfSel             = 2,\n                 .pdsCtlPllSel            = 0,\n                 },\n    .pdsCtl2 =\n        {\n                 .forceCpuPwrOff  = 0,\n                 .forceBzPwrOff   = 0,\n                 .forceUsbPwrOff  = 0,\n                 .forceCpuIsoEn   = 0,\n                 .forceBzIsoEn    = 0,\n                 .forceUsbIsoEn   = 0,\n                 .forceCpuPdsRst  = 0,\n                 .forceBzPdsRst   = 0,\n                 .forceUsbPdsRst  = 0,\n                 .forceCpuMemStby = 0,\n                 .forceBzMemStby  = 0,\n                 .forceUsbMemStby = 0,\n                 .forceCpuGateClk = 0,\n                 .forceBzGateClk  = 0,\n                 .forceUsbGateClk = 0,\n                 },\n    .pdsCtl3 =\n        {\n                 .forceMiscPwrOff  = 0,\n                 .forceBlePwrOff   = 0,\n                 .forceBleIsoEn    = 0,\n                 .forceMiscPdsRst  = 0,\n                 .forceBlePdsRst   = 0,\n                 .forceMiscMemStby = 0,\n                 .forceBleMemStby  = 0,\n                 .forceMiscGateClk = 0,\n                 .forceBleGateClk  = 0,\n                 .CpuIsoEn         = 1,\n                 .BzIsoEn          = 1,\n                 .BleIsoEn         = 1,\n                 .UsbIsoEn         = 1,\n                 .MiscIsoEn        = 1,\n                 },\n    .pdsCtl4 = {\n                 .cpuPwrOff     = 1,\n                 .cpuRst        = 1,\n                 .cpuMemStby    = 1,\n                 .cpuGateClk    = 1,\n                 .BzPwrOff      = 1,\n                 .BzRst         = 1,\n                 .BzMemStby     = 1,\n                 .BzGateClk     = 1,\n                 .BlePwrOff     = 1,\n                 .BleRst        = 1,\n                 .BleMemStby    = 1,\n                 .BleGateClk    = 1,\n                 .UsbPwrOff     = 1,\n                 .UsbRst        = 1,\n                 .UsbMemStby    = 1,\n                 .UsbGateClk    = 1,\n                 .MiscPwrOff    = 1,\n                 .MiscRst       = 1,\n                 .MiscMemStby   = 1,\n                 .MiscGateClk   = 1,\n                 .MiscAnaPwrOff = 1,\n                 .MiscDigPwrOff = 1,\n                 }\n};\n\n/****************************************************************************/ /**\n                                                                                * @brief  PDS update flash_ctrl setting\n                                                                                *\n                                                                                * @param  fastClock: fast clock\n                                                                                *\n                                                                                * @return None\n                                                                                *\n                                                                                *******************************************************************************/\nstatic ATTR_TCM_SECTION void PDS_Update_Flash_Ctrl_Setting(uint8_t fastClock) {\n  if (fastClock) {\n    GLB_Set_SF_CLK(1, GLB_SFLASH_CLK_72M, 0);\n  } else {\n    GLB_Set_SF_CLK(1, GLB_SFLASH_CLK_XCLK, 0);\n  }\n\n  SF_Ctrl_Set_Clock_Delay(fastClock);\n}\n\nATTR_TCM_SECTION void pm_pds_enter_done(void) {\n  __asm__ __volatile__(\"la     a2,     __ld_pds_bak_addr\\n\\t\"\n                       \"sw     ra,     0(a2)\\n\\t\");\n\n  __WFI(); /* if(.wfiMask==0){CPU won't power down until PDS module had seen __wfi} */\n}\n/**\n * @brief power management in pds(power down sleep) mode\n *\n * cpu's behavior after wakeup depend on psd level,see flow table if cpu off , cpu will reset after wakeup\n *\n *                      PD_CORE     PD_CORE_MISC_DIG    PD_CORE_MISC_ANA    PD_CORE_CPU     PD_BZ   PD_USB\n *          PDS0          ON               ON                  ON               ON            ON      ON\n *          PDS1          ON               ON                  ON               ON            ON      OFF\n *          PDS2          ON               ON                  ON               ON            OFF     ON\n *          PDS3          ON               ON                  ON               ON            OFF     OFF\n *          PDS4          ON               ON                  ON               OFF           ON      ON\n *          PDS5          ON               ON                  ON               OFF           ON      OFF\n *          PDS6          ON               ON                  ON               OFF           OFF     ON\n *          PDS7          ON               ON                  ON               OFF           OFF     OFF\n *          PDS31         ON               OFF                 OFF              OFF           OFF     OFF\n */\nATTR_TCM_SECTION void pm_pds_mode_enter(enum pm_pds_sleep_level pds_level, uint32_t sleep_time) {\n  PDS_DEFAULT_LV_CFG_Type *pPdsCfg = NULL;\n  uint32_t                 tmpVal;\n  uint32_t                 flash_cfg_len;\n\n  /* To make it simple and safe*/\n  cpu_global_irq_disable();\n\n  flash_get_cfg((uint8_t **)&flash_cfg, &flash_cfg_len);\n  HBN_Set_Ldo11_All_Vout(PM_PDS_LDO_LEVEL_DEFAULT);\n\n  PDS_WAKEUP_IRQHandler_Install();\n  BL_WR_REG(HBN_BASE, HBN_IRQ_CLR, 0xffffffff);\n  BL_WR_REG(HBN_BASE, HBN_IRQ_CLR, 0);\n\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_INT);\n  tmpVal &= ~(1 << 8); // unmask pds wakeup\n\n  if (!BL_GET_REG_BITS_VAL(BL_RD_REG(PDS_BASE, PDS_GPIO_INT), PDS_GPIO_INT_MASK) || !(BL_RD_REG(GLB_BASE, GLB_GPIO_INT_MASK1) == 0xffffffff)) {\n    tmpVal |= (1 << 19); // enable gpio wakeup for pds\n  }\n  if (BL_GET_REG_BITS_VAL(BL_RD_REG(HBN_BASE, HBN_IRQ_MODE), HBN_REG_AON_PAD_IE_SMT)) {\n    tmpVal |= (1 << 17); // enable hbn out0 wakeup for pds\n  }\n\n  if (sleep_time) {\n    tmpVal |= (1 << 16); // unmask pds sleep time wakeup\n  }\n  BL_WR_REG(PDS_BASE, PDS_INT, tmpVal);\n\n  PDS_Set_Vddcore_GPIO_IntClear();\n  PDS_IntClear();\n\n  /* enable PDS interrupt to wakeup CPU (PDS1:CPU not powerdown, CPU __WFI) */\n  CPU_Interrupt_Enable(PDS_WAKEUP_IRQn);\n\n  switch (pds_level) {\n  case PM_PDS_LEVEL_0:\n    pPdsCfg = &pdsCfgLevel0;\n    break;\n  case PM_PDS_LEVEL_1:\n    pPdsCfg = &pdsCfgLevel1;\n    break;\n  case PM_PDS_LEVEL_2:\n    pPdsCfg = &pdsCfgLevel2;\n    break;\n  case PM_PDS_LEVEL_3:\n    pPdsCfg = &pdsCfgLevel3;\n    break;\n  case PM_PDS_LEVEL_4:\n    return;\n  case PM_PDS_LEVEL_5:\n    return;\n  case PM_PDS_LEVEL_6:\n    return;\n  case PM_PDS_LEVEL_7:\n    return;\n  case PM_PDS_LEVEL_31:\n    pPdsCfg = &pdsCfgLevel31;\n    break;\n  default:\n    return;\n  }\n\n#if PM_PDS_FLASH_POWER_OFF\n  HBN_Power_Down_Flash(flash_cfg);\n  /* turn_off_ext_flash_pin, GPIO23 - GPIO28 */\n  for (uint32_t pin = 23; pin <= 28; pin++) {\n    GLB_GPIO_Set_HZ(pin);\n  }\n  /* SF io select from efuse value */\n  uint32_t flash_select = BL_RD_WORD(0x40007074);\n  if (((flash_select >> 26) & 7) == 0) {\n    HBN_Set_Pad_23_28_Pullup();\n  }\n  pPdsCfg->pdsCtl.puFlash = 1;\n#endif\n\n#if PM_PDS_PLL_POWER_OFF\n  PDS_Power_Off_PLL();\n#endif\n#if PM_PDS_DLL_POWER_OFF\n  GLB_Set_System_CLK(GLB_DLL_XTAL_NONE, GLB_SYS_CLK_RC32M);\n  AON_Power_Off_XTAL();\n  GLB_Power_Off_DLL();\n  PDS_Update_Flash_Ctrl_Setting(0);\n#endif\n\n  /* pds0-pds7 : ldo11rt_iload_sel=3 */\n  /* pds31     : ldo11rt_iload_sel=1 */\n  if (pds_level <= PM_PDS_LEVEL_7) {\n    HBN_Set_Ldo11rt_Drive_Strength(HBN_LDO11RT_DRIVE_STRENGTH_25_250UA);\n  } else if (pds_level == PM_PDS_LEVEL_31) {\n    HBN_Set_Ldo11rt_Drive_Strength(HBN_LDO11RT_DRIVE_STRENGTH_10_100UA);\n  } else {\n    /* pdsLevel error */\n  }\n\n  pPdsCfg->pdsCtl.pdsLdoVol    = PM_PDS_LDO_LEVEL_DEFAULT;\n  pPdsCfg->pdsCtl.pdsLdoVselEn = 1;\n\n  if (BL_GET_REG_BITS_VAL(BL_RD_REG(PDS_BASE, PDS_GPIO_INT), PDS_GPIO_INT_MASK)) {\n    pPdsCfg->pdsCtl.gpioIePuPd = 0;\n  }\n\n#if PM_PDS_RF_POWER_OFF == 0\n  pPdsCfg->pdsCtl.pdsCtlRfSel = 0;\n#endif\n  /* config  ldo11soc_sstart_delay_aon =2 , cr_pds_pd_ldo11=0 to speedup ldo11soc_rdy_aon */\n  AON_Set_LDO11_SOC_Sstart_Delay(0x2);\n\n  PDS_Default_Level_Config(pPdsCfg, sleep_time);\n\n  __WFI(); /* if(.wfiMask==0){CPU won't power down until PDS module had seen __wfi} */\n\n#if PM_PDS_PLL_POWER_OFF\n  GLB_Set_System_CLK(XTAL_TYPE, BSP_ROOT_CLOCK_SOURCE);\n  PDS_Update_Flash_Ctrl_Setting(1);\n#endif\n\n#if PM_PDS_FLASH_POWER_OFF\n  HBN_Set_Pad_23_28_Pullnone();\n  /* Init flash gpio */\n  SF_Cfg_Init_Flash_Gpio(0, 1);\n\n  SF_Ctrl_Set_Owner(SF_CTRL_OWNER_SAHB);\n  SFlash_Restore_From_Powerdown(flash_cfg, 0);\n#endif\n\n  cpu_global_irq_enable();\n}\n\nATTR_TCM_SECTION void pm_pds31_fast_mode_enter(enum pm_pds_sleep_level pds_level, uint32_t sleep_time) {\n  PDS_DEFAULT_LV_CFG_Type *pPdsCfg = &pdsCfgLevel31;\n  uint32_t                 tmpVal;\n  uint32_t                 flash_cfg_len;\n\n  // Get cache way disable setting\n  cacheWayDisable = (*(volatile uint32_t *)(L1C_BASE + 0x00) >> 8) & 0x0F;\n\n  // Get psram io configuration\n  psramIoCfg = *(volatile uint32_t *)(GLB_BASE + 0x88);\n\n  // Get flash offset\n  flash_offset = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_ID0_OFFSET);\n\n  /* To make it simple and safe*/\n  cpu_global_irq_disable();\n\n  flash_get_cfg((uint8_t **)&flash_cfg, &flash_cfg_len);\n  HBN_Set_Ldo11_All_Vout(PM_PDS_LDO_LEVEL_DEFAULT);\n\n  PDS_WAKEUP_IRQHandler_Install();\n  BL_WR_REG(HBN_BASE, HBN_IRQ_CLR, 0xffffffff);\n  BL_WR_REG(HBN_BASE, HBN_IRQ_CLR, 0);\n\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_INT);\n  tmpVal &= ~(1 << 8); // unmask pds wakeup\n\n  if (!BL_GET_REG_BITS_VAL(BL_RD_REG(PDS_BASE, PDS_GPIO_INT), PDS_GPIO_INT_MASK)) {\n    tmpVal |= (1 << 19); // enable gpio wakeup for pds\n  }\n  if (BL_GET_REG_BITS_VAL(BL_RD_REG(HBN_BASE, HBN_IRQ_MODE), HBN_REG_AON_PAD_IE_SMT)) {\n    tmpVal |= (1 << 17); // enable hbn out0 wakeup for pds\n  }\n\n  if (sleep_time) {\n    tmpVal |= (1 << 16); // unmask pds sleep time wakeup\n  }\n  BL_WR_REG(PDS_BASE, PDS_INT, tmpVal);\n\n  PDS_IntClear();\n\n  /* enable PDS interrupt to wakeup CPU (PDS1:CPU not powerdown, CPU __WFI) */\n  CPU_Interrupt_Enable(PDS_WAKEUP_IRQn);\n\n#if PM_PDS_FLASH_POWER_OFF\n  HBN_Power_Down_Flash(flash_cfg);\n  /* turn_off_ext_flash_pin, GPIO23 - GPIO28 */\n  for (uint32_t pin = 23; pin <= 28; pin++) {\n    GLB_GPIO_Set_HZ(pin);\n  }\n  /* SF io select from efuse value */\n  uint32_t flash_select = BL_RD_WORD(0x40007074);\n  if (((flash_select >> 26) & 7) == 0) {\n    HBN_Set_Pad_23_28_Pullup();\n  }\n  pPdsCfg->pdsCtl.puFlash = 1;\n#endif\n\n#if PM_PDS_PLL_POWER_OFF\n  PDS_Power_Off_PLL();\n#endif\n#if PM_PDS_DLL_POWER_OFF\n  GLB_Set_System_CLK(GLB_DLL_XTAL_NONE, GLB_SYS_CLK_RC32M);\n  AON_Power_Off_XTAL();\n  GLB_Power_Off_DLL();\n  PDS_Update_Flash_Ctrl_Setting(0);\n#endif\n\n  /* pds31     : ldo11rt_iload_sel=1 */\n  HBN_Set_Ldo11rt_Drive_Strength(HBN_LDO11RT_DRIVE_STRENGTH_10_100UA);\n\n  pPdsCfg->pdsCtl.pdsLdoVol    = PM_PDS_LDO_LEVEL_DEFAULT;\n  pPdsCfg->pdsCtl.pdsLdoVselEn = 1;\n\n  if (BL_GET_REG_BITS_VAL(BL_RD_REG(PDS_BASE, PDS_GPIO_INT), PDS_GPIO_INT_MASK)) {\n    pPdsCfg->pdsCtl.gpioIePuPd = 0;\n  }\n\n#if PM_PDS_RF_POWER_OFF == 0\n  pPdsCfg->pdsCtl.pdsCtlRfSel = 0;\n#endif\n  /* config  ldo11soc_sstart_delay_aon =2 , cr_pds_pd_ldo11=0 to speedup ldo11soc_rdy_aon */\n  AON_Set_LDO11_SOC_Sstart_Delay(0x2);\n\n  PDS_Default_Level_Config(pPdsCfg, sleep_time);\n\n  __asm__ __volatile__(\"csrr   a0,     mtvec\\n\\t\"\n                       \"csrr   a1,     mstatus\\n\\t\"\n                       \"la     a2,     __ld_pds_bak_addr\\n\\t\"\n                       \"sw     sp,     1*4(a2)\\n\\t\"\n                       \"sw     tp,     2*4(a2)\\n\\t\"\n                       \"sw     t0,     3*4(a2)\\n\\t\"\n                       \"sw     t1,     4*4(a2)\\n\\t\"\n                       \"sw     t2,     5*4(a2)\\n\\t\"\n                       \"sw     fp,     6*4(a2)\\n\\t\"\n                       \"sw     s1,     7*4(a2)\\n\\t\"\n                       \"sw     a0,     8*4(a2)\\n\\t\"\n                       \"sw     a1,     9*4(a2)\\n\\t\"\n                       \"sw     a3,     10*4(a2)\\n\\t\"\n                       \"sw     a4,     11*4(a2)\\n\\t\"\n                       \"sw     a5,     12*4(a2)\\n\\t\"\n                       \"sw     a6,     13*4(a2)\\n\\t\"\n                       \"sw     a7,     14*4(a2)\\n\\t\"\n                       \"sw     s2,     15*4(a2)\\n\\t\"\n                       \"sw     s3,     16*4(a2)\\n\\t\"\n                       \"sw     s4,     17*4(a2)\\n\\t\"\n                       \"sw     s5,     18*4(a2)\\n\\t\"\n                       \"sw     s6,     19*4(a2)\\n\\t\"\n                       \"sw     s7,     20*4(a2)\\n\\t\"\n                       \"sw     s8,     21*4(a2)\\n\\t\"\n                       \"sw     s9,     22*4(a2)\\n\\t\"\n                       \"sw     s10,    23*4(a2)\\n\\t\"\n                       \"sw     s11,    24*4(a2)\\n\\t\"\n                       \"sw     t3,     25*4(a2)\\n\\t\"\n                       \"sw     t4,     26*4(a2)\\n\\t\"\n                       \"sw     t5,     27*4(a2)\\n\\t\"\n                       \"sw     t6,     28*4(a2)\\n\\t\");\n\n  pm_pds_enter_done();\n\n  cpu_global_irq_enable();\n\n  // Get cache way disable setting\n  *(volatile uint32_t *)(L1C_BASE + 0x00) &= ~(0x0F < 8);\n  *(volatile uint32_t *)(L1C_BASE + 0x00) |= cacheWayDisable;\n\n  // Get psram io configuration\n  *(volatile uint32_t *)(GLB_BASE + 0x88) = psramIoCfg;\n}\n/**\n * @brief\n *\n * power management in hbn(hibernation) mode\n * cpu will reset after wakeup\n *\n * HBN_LEVEL   PD_AON       PD_AON_HNBRTC        PD_AON_HBNCORE        PD_CORE     PD_CORE_MISC_DIG    PD_CORE_MISC_ANA    PD_CORE_CPU     PD_BZ   PD_USB\n * HBN0          ON               ON                  ON                OFF            OFF                  OFF                 OFF         OFF     OFF\n * HBN1          ON               ON                  OFF               OFF            OFF                  OFF                 OFF         OFF     OFF\n * HBN2          ON               OFF                 OFF               OFF            OFF                  OFF                 OFF         OFF     OFF\n * @param hbn_level\n */\nATTR_TCM_SECTION void pm_hbn_mode_enter(enum pm_hbn_sleep_level hbn_level, uint8_t sleep_time) {\n  uint32_t tmpVal;\n\n  /* To make it simple and safe*/\n  cpu_global_irq_disable();\n\n  if (sleep_time && (hbn_level < PM_HBN_LEVEL_2)) {\n    rtc_init(sleep_time); // sleep time,unit is second\n  }\n\n  if (hbn_level >= PM_HBN_LEVEL_2) {\n    HBN_Power_Off_RC32K();\n  } else {\n    HBN_Power_On_RC32K();\n  }\n\n  HBN_Power_Down_Flash(NULL);\n  /* SF io select from efuse value */\n  uint32_t flash_select = BL_RD_WORD(0x40007074);\n  if (((flash_select >> 26) & 7) == 0) {\n    HBN_Set_Pad_23_28_Pullup();\n  }\n\n  /* Select RC32M */\n  GLB_Set_System_CLK(GLB_DLL_XTAL_NONE, GLB_SYS_CLK_RC32M);\n  /* power off xtal */\n  AON_Power_Off_XTAL();\n  GLB_Power_Off_DLL();\n  PDS_Power_Off_PLL();\n\n  /* HBN mode LDO level */\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_LDO11_AON_VOUT_SEL, PM_HBN_LDO_LEVEL_DEFAULT);\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_LDO11_RT_VOUT_SEL, PM_HBN_LDO_LEVEL_DEFAULT);\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal);\n\n  /* Set HBN flag */\n  BL_WR_REG(HBN_BASE, HBN_RSV0, HBN_STATUS_ENTER_FLAG);\n\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\n\n  /* Set HBN level, (HBN_PWRDN_HBN_RAM not use) */\n  switch (hbn_level) {\n  case PM_HBN_LEVEL_0:\n    tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PWRDN_HBN_CORE);\n    tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PWRDN_HBN_RTC);\n    break;\n\n  case PM_HBN_LEVEL_1:\n    tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PWRDN_HBN_CORE);\n    tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PWRDN_HBN_RTC);\n    break;\n\n  case PM_HBN_LEVEL_2:\n    tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PWRDN_HBN_CORE);\n    tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PWRDN_HBN_RTC);\n    break;\n  default:\n    break;\n  }\n\n  /* Set power on option:0 for por reset twice for robust 1 for reset only once*/\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PWR_ON_OPTION);\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal);\n\n  *(volatile uint8_t *)(CLIC_HART0_ADDR + CLIC_INTIP + HBN_OUT0_IRQn) = 0;\n  *(volatile uint8_t *)(CLIC_HART0_ADDR + CLIC_INTIP + HBN_OUT1_IRQn) = 0;\n\n  BL_WR_REG(HBN_BASE, HBN_IRQ_CLR, 0xffffffff);\n  BL_WR_REG(HBN_BASE, HBN_IRQ_CLR, 0);\n\n  /* Enable HBN mode */\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_MODE);\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal);\n\n  while (1) {\n    BL702_Delay_MS(1000);\n  }\n}\n\nATTR_HBN_RAM_SECTION void pm_hbn_enter_again(bool reset) {\n  uint32_t tmpVal;\n  BL_WR_REG(HBN_BASE, HBN_IRQ_CLR, 0xffffffff);\n  BL_WR_REG(HBN_BASE, HBN_IRQ_CLR, 0);\n\n  if (!reset) {\n    /* Enable HBN mode */\n    BL_WR_REG(HBN_BASE, HBN_RSV0, HBN_STATUS_ENTER_FLAG);\n  }\n\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_MODE);\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal);\n}\n\nvoid pm_set_wakeup_callback(void (*wakeup_callback)(void)) {\n  BL_WR_REG(HBN_BASE, HBN_RSV1, (uint32_t)wakeup_callback);\n  /* Set HBN flag */\n  BL_WR_REG(HBN_BASE, HBN_RSV0, HBN_STATUS_ENTER_FLAG);\n}\n\nenum pm_event_type pm_get_wakeup_event(void) {\n  if (BL_RD_REG(HBN_BASE, HBN_IRQ_STAT) & (1 << HBN_INT_GPIO9)) {\n    return PM_HBN_GPIO9_WAKEUP_EVENT;\n  } else if (BL_RD_REG(HBN_BASE, HBN_IRQ_STAT) & (1 << HBN_INT_GPIO10)) {\n    return PM_HBN_GPIO10_WAKEUP_EVENT;\n  } else if (BL_RD_REG(HBN_BASE, HBN_IRQ_STAT) & (1 << HBN_INT_GPIO11)) {\n    return PM_HBN_GPIO11_WAKEUP_EVENT;\n  } else if (BL_RD_REG(HBN_BASE, HBN_IRQ_STAT) & (1 << HBN_INT_GPIO12)) {\n    return PM_HBN_GPIO12_WAKEUP_EVENT;\n  } else if (BL_RD_REG(HBN_BASE, HBN_IRQ_STAT) & (1 << HBN_INT_GPIO10)) {\n  } else if (BL_RD_REG(HBN_BASE, HBN_IRQ_STAT) & (1 << HBN_INT_PIR)) {\n  } else if (BL_RD_REG(HBN_BASE, HBN_IRQ_STAT) & (1 << HBN_INT_BOR)) {\n    return PM_HBN_BOR_WAKEUP_EVENT;\n  } else if (BL_RD_REG(HBN_BASE, HBN_IRQ_STAT) & (1 << HBN_INT_ACOMP0)) {\n    return PM_HBN_ACOMP0_WAKEUP_EVENT;\n  } else if (BL_RD_REG(HBN_BASE, HBN_IRQ_STAT) & (1 << HBN_INT_ACOMP1)) {\n    return PM_HBN_ACOMP1_WAKEUP_EVENT;\n  }\n\n  return PM_HBN_WAKEUP_EVENT_NONE;\n}\n\nvoid pm_bor_init(void) {\n  uint32_t tmpVal;\n\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_IRQ_BOR_EN);\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\n\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_MISC);\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PU_BOR);\n  BL_WR_REG(HBN_BASE, HBN_MISC, tmpVal);\n\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_MISC);\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PU_BOR);\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_BOR_VTH, HBN_BOR_THRES_2P4V);\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_BOR_SEL, HBN_BOR_MODE_POR_INDEPENDENT);\n  BL_WR_REG(HBN_BASE, HBN_MISC, tmpVal);\n\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_IRQ_BOR_EN);\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\n}\n\nvoid pm_hbn_out0_irq_register(void) {\n  Interrupt_Handler_Register(HBN_OUT1_IRQn, HBN_OUT0_IRQ);\n  CPU_Interrupt_Enable(HBN_OUT0_IRQn);\n}\n\nvoid pm_hbn_out1_irq_register(void) {\n  Interrupt_Handler_Register(HBN_OUT1_IRQn, HBN_OUT1_IRQ);\n  CPU_Interrupt_Enable(HBN_OUT1_IRQn);\n}\n\nvoid HBN_OUT0_IRQ(void) {\n  if (SET == HBN_Get_INT_State(HBN_INT_GPIO9)) {\n    HBN_Clear_IRQ(HBN_INT_GPIO9);\n    pm_irq_callback(PM_HBN_GPIO9_WAKEUP_EVENT);\n  } else if (SET == HBN_Get_INT_State(HBN_INT_GPIO10)) {\n    HBN_Clear_IRQ(HBN_INT_GPIO10);\n    pm_irq_callback(PM_HBN_GPIO10_WAKEUP_EVENT);\n  } else if (SET == HBN_Get_INT_State(HBN_INT_GPIO11)) {\n    HBN_Clear_IRQ(HBN_INT_GPIO11);\n    pm_irq_callback(PM_HBN_GPIO11_WAKEUP_EVENT);\n  } else if (SET == HBN_Get_INT_State(HBN_INT_GPIO12)) {\n    HBN_Clear_IRQ(HBN_INT_GPIO12);\n    pm_irq_callback(PM_HBN_GPIO12_WAKEUP_EVENT);\n  } else {\n    HBN_Clear_IRQ(HBN_INT_RTC);\n    HBN_Clear_RTC_INT();\n    pm_irq_callback(PM_HBN_RTC_WAKEUP_EVENT);\n  }\n}\n\nvoid HBN_OUT1_IRQ(void) {\n  /* PIR */\n  if (SET == HBN_Get_INT_State(HBN_INT_PIR)) {\n    HBN_Clear_IRQ(HBN_INT_PIR);\n  }\n  /* BOR */\n  else if (SET == HBN_Get_INT_State(HBN_INT_BOR)) {\n    HBN_Clear_IRQ(HBN_INT_BOR);\n    pm_irq_callback(PM_HBN_BOR_WAKEUP_EVENT);\n  }\n  /* ACOMP0 */\n  else if (SET == HBN_Get_INT_State(HBN_INT_ACOMP0)) {\n    HBN_Clear_IRQ(HBN_INT_ACOMP0);\n    pm_irq_callback(PM_HBN_ACOMP0_WAKEUP_EVENT);\n  }\n  /* ACOMP1 */\n  else if (SET == HBN_Get_INT_State(HBN_INT_ACOMP1)) {\n    HBN_Clear_IRQ(HBN_INT_ACOMP1);\n    pm_irq_callback(PM_HBN_ACOMP1_WAKEUP_EVENT);\n  }\n}\n\n__WEAK void pm_irq_callback(enum pm_event_type event) {}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_pm_util.c",
    "content": "/**\n * @file hal_pm_util.c\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n\n#include \"hal_pm_util.h\"\n#include \"bl702_glb.h\"\n#include \"bl702_romdriver.h\"\n#include \"bl702_sf_ctrl.h\"\n#include \"hal_clock.h\"\n#include \"hal_pm.h\"\n\n/* Cache Way Disable, will get from l1c register */\nextern uint8_t cacheWayDisable;\n\n/* PSRAM IO Configuration, will get from glb register */\nextern uint32_t psramIoCfg;\n\n/* Flash offset value, will get from sf_ctrl register */\nextern uint32_t flash_offset;\n\nextern void pm_pds31_fast_mode_enter(enum pm_pds_sleep_level pds_level, uint32_t sleep_time);\n\nextern SPI_Flash_Cfg_Type *flash_cfg;\n\nvoid ATTR_PDS_RAM_SECTION pm_pds_fastboot_entry(void);\n\nvoid (*hardware_recovery)(void) = NULL;\n\n/**\n * @brief hal_pds_enter_with_time_compensation\n *\n * @param pdsLevel pds level support 0~3,31\n * @param pdsSleepCycles user set sleep time, clock of pds_time is 32768hz\n * @return uint32_t actual sleep time(ms)\n *\n * @note If necessary，please application layer call vTaskStepTick，\n */\nuint32_t hal_pds_enter_with_time_compensation(uint32_t pdsLevel, uint32_t pdsSleepCycles) {\n  uint32_t rtcLowBeforeSleep = 0, rtcHighBeforeSleep = 0;\n  uint32_t rtcLowAfterSleep = 0, rtcHighAfterSleep = 0;\n  uint32_t actualSleepDuration_32768cycles = 0;\n  uint32_t actualSleepDuration_ms          = 0;\n\n  pm_set_wakeup_callback(pm_pds_fastboot_entry);\n\n  HBN_Get_RTC_Timer_Val(&rtcLowBeforeSleep, &rtcHighBeforeSleep);\n\n  pm_pds31_fast_mode_enter(pdsLevel, pdsSleepCycles);\n\n  HBN_Get_RTC_Timer_Val(&rtcLowAfterSleep, &rtcHighAfterSleep);\n\n  CHECK_PARAM((rtcHighAfterSleep - rtcHighBeforeSleep) <= 1); // make sure sleep less than 1 hour (2^32 us > 1 hour)\n\n  actualSleepDuration_32768cycles = (rtcLowAfterSleep - rtcLowBeforeSleep);\n\n  actualSleepDuration_ms = (actualSleepDuration_32768cycles >> 5) - (actualSleepDuration_32768cycles >> 11) - (actualSleepDuration_32768cycles >> 12);\n\n  // vTaskStepTick(actualSleepDuration_ms);\n\n  return actualSleepDuration_ms;\n}\n/**\n * @brief get delay value of spi flash init\n *\n * @param delay_index\n * @return uint8_t\n */\nstatic uint8_t ATTR_PDS_RAM_SECTION bflb_spi_flash_get_delay_val(uint8_t delay_index) {\n  switch (delay_index) {\n  case 0:\n    return 0x00;\n  case 1:\n    return 0x80;\n  case 2:\n    return 0xc0;\n  case 3:\n    return 0xe0;\n  case 4:\n    return 0xf0;\n  case 5:\n    return 0xf8;\n  case 6:\n    return 0xfc;\n  case 7:\n    return 0xfe;\n  default:\n    return 0x00;\n  }\n}\n/**\n * @brief config spi flash\n *\n * @param pFlashCfg flash parameter\n */\nstatic void ATTR_PDS_RAM_SECTION bflb_spi_flash_set_sf_ctrl(SPI_Flash_Cfg_Type *pFlashCfg) {\n  SF_Ctrl_Cfg_Type sfCtrlCfg;\n  uint8_t          delay_index;\n\n  sfCtrlCfg.owner = SF_CTRL_OWNER_SAHB;\n\n  /* bit0-3 for clk delay */\n  sfCtrlCfg.clkDelay = (pFlashCfg->clkDelay & 0x0f);\n  /* bit0 for clk invert */\n  sfCtrlCfg.clkInvert = pFlashCfg->clkInvert & 0x01;\n  /* bit1 for rx clk invert */\n  sfCtrlCfg.rxClkInvert = (pFlashCfg->clkInvert >> 1) & 0x01;\n  /* bit4-6 for do delay */\n  delay_index       = (pFlashCfg->clkDelay >> 4) & 0x07;\n  sfCtrlCfg.doDelay = bflb_spi_flash_get_delay_val(delay_index);\n  /* bit2-4 for di delay */\n  delay_index       = (pFlashCfg->clkInvert >> 2) & 0x07;\n  sfCtrlCfg.diDelay = bflb_spi_flash_get_delay_val(delay_index);\n  /* bit5-7 for oe delay */\n  delay_index       = (pFlashCfg->clkInvert >> 5) & 0x07;\n  sfCtrlCfg.oeDelay = bflb_spi_flash_get_delay_val(delay_index);\n\n  RomDriver_SFlash_Init(&sfCtrlCfg);\n}\n\n/**\n * @brief\n *\n * @param media_boot\n * @return int32_t\n */\nint32_t ATTR_PDS_RAM_SECTION pm_spi_flash_init(uint8_t media_boot) {\n  uint32_t stat;\n  uint32_t jdecId         = 0;\n  uint32_t flash_read_try = 0;\n\n  /*use fclk as flash clok */\n  RomDriver_GLB_Set_SF_CLK(1, GLB_SFLASH_CLK_XCLK, 0); // 32M\n  RomDriver_SF_Ctrl_Set_Clock_Delay(0);\n\n  bflb_spi_flash_set_sf_ctrl(flash_cfg);\n\n  /* Wake flash up from power down */\n  RomDriver_SFlash_Releae_Powerdown(flash_cfg);\n  // ARCH_Delay_US(15*((pFlashCfg->pdDelay&0x7)+1));\n  RomDriver_BL702_Delay_US(120);\n\n  do {\n    if (flash_read_try > 4) {\n      // bflb_bootrom_printd(\"Flash read id TO\\r\\n\");\n      break;\n    } else if (flash_read_try > 0) {\n      RomDriver_BL702_Delay_US(500);\n    }\n\n    // bflb_bootrom_printd(\"reset flash\\r\\n\");\n    /* Exit form continous read for accepting command */\n    RomDriver_SFlash_Reset_Continue_Read(flash_cfg);\n    /* Send software reset command(80bv has no this command)to deburst wrap for ISSI like */\n    RomDriver_SFlash_Software_Reset(flash_cfg);\n    /* Disable burst may be removed(except for 80BV) and only work with winbond,but just for make sure */\n    RomDriver_SFlash_Write_Enable(flash_cfg);\n    /* For disable command that is setting register instaed of send command, we need write enable */\n    RomDriver_SFlash_DisableBurstWrap(flash_cfg);\n\n    stat = RomDriver_SFlash_SetSPIMode(SF_CTRL_SPI_MODE);\n    if (SUCCESS != stat) {\n      // bflb_bootrom_printe(\"enter spi mode fail %d\\r\\n\", stat);\n      // return BFLB_BOOTROM_FLASH_INIT_ERROR;\n      return -1;\n    }\n\n    RomDriver_SFlash_GetJedecId(flash_cfg, (uint8_t *)&jdecId);\n\n    /* Dummy disable burstwrap for make sure */\n    RomDriver_SFlash_Write_Enable(flash_cfg);\n    /* For disable command that is setting register instead of send command, we need write enable */\n    RomDriver_SFlash_DisableBurstWrap(flash_cfg);\n\n    jdecId = jdecId & 0xffffff;\n    // bflb_bootrom_printd(\"ID =%08x\\r\\n\", jdecId);\n    flash_read_try++;\n  } while ((jdecId & 0x00ffff) == 0 || (jdecId & 0xffff00) == 0 || (jdecId & 0x00ffff) == 0xffff || (jdecId & 0xffff00) == 0xffff00);\n\n  /*clear offset setting*/\n\n  // reset image offset\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_ID0_OFFSET, flash_offset);\n\n  /* set read mode */\n  if ((flash_cfg->ioMode & 0x0f) == SF_CTRL_QO_MODE || (flash_cfg->ioMode & 0x0f) == SF_CTRL_QIO_MODE) {\n    stat = RomDriver_SFlash_Qspi_Enable(flash_cfg);\n  }\n\n  if (media_boot) {\n    RomDriver_L1C_Set_Wrap(DISABLE);\n\n    RomDriver_SFlash_Cache_Read_Enable(flash_cfg, flash_cfg->ioMode & 0xf, 0, 0x00);\n  }\n\n  return jdecId;\n}\n\n// can be placed in flash, here placed in pds section to reduce fast boot time\nstatic void ATTR_PDS_RAM_SECTION pm_pds_restore_cpu_reg(void) {\n  __asm__ __volatile__(\"la     a2,     __ld_pds_bak_addr\\n\\t\"\n                       \"lw     ra,     0(a2)\\n\\t\"\n                       \"lw     sp,     1*4(a2)\\n\\t\"\n                       \"lw     tp,     2*4(a2)\\n\\t\"\n                       \"lw     t0,     3*4(a2)\\n\\t\"\n                       \"lw     t1,     4*4(a2)\\n\\t\"\n                       \"lw     t2,     5*4(a2)\\n\\t\"\n                       \"lw     fp,     6*4(a2)\\n\\t\"\n                       \"lw     s1,     7*4(a2)\\n\\t\"\n                       \"lw     a0,     8*4(a2)\\n\\t\"\n                       \"lw     a1,     9*4(a2)\\n\\t\"\n                       \"lw     a3,     10*4(a2)\\n\\t\"\n                       \"lw     a4,     11*4(a2)\\n\\t\"\n                       \"lw     a5,     12*4(a2)\\n\\t\"\n                       \"lw     a6,     13*4(a2)\\n\\t\"\n                       \"lw     a7,     14*4(a2)\\n\\t\"\n                       \"lw     s2,     15*4(a2)\\n\\t\"\n                       \"lw     s3,     16*4(a2)\\n\\t\"\n                       \"lw     s4,     17*4(a2)\\n\\t\"\n                       \"lw     s5,     18*4(a2)\\n\\t\"\n                       \"lw     s6,     19*4(a2)\\n\\t\"\n                       \"lw     s7,     20*4(a2)\\n\\t\"\n                       \"lw     s8,     21*4(a2)\\n\\t\"\n                       \"lw     s9,     22*4(a2)\\n\\t\"\n                       \"lw     s10,    23*4(a2)\\n\\t\"\n                       \"lw     s11,    24*4(a2)\\n\\t\"\n                       \"lw     t3,     25*4(a2)\\n\\t\"\n                       \"lw     t4,     26*4(a2)\\n\\t\"\n                       \"lw     t5,     27*4(a2)\\n\\t\"\n                       \"lw     t6,     28*4(a2)\\n\\t\"\n                       \"csrw   mtvec,  a0\\n\\t\"\n                       \"csrw   mstatus,a1\\n\\t\"\n                       \"ret\\n\\t\");\n}\nvoid ATTR_PDS_RAM_SECTION sf_io_select(void) {\n  uint32_t tmpVal          = 0;\n  uint8_t  flashCfg        = 0;\n  uint8_t  psramCfg        = 0;\n  uint8_t  isInternalFlash = 0;\n  uint8_t  isInternalPsram = 0;\n\n  /* SF io select from efuse value */\n  tmpVal   = BL_RD_WORD(0x40007074);\n  flashCfg = ((tmpVal >> 26) & 7);\n  psramCfg = ((tmpVal >> 24) & 3);\n  if (flashCfg == 1 || flashCfg == 2) {\n    isInternalFlash = 1;\n  } else {\n    isInternalFlash = 0;\n  }\n  if (psramCfg == 1) {\n    isInternalPsram = 1;\n  } else {\n    isInternalPsram = 0;\n  }\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO);\n  if (isInternalFlash == 1 && isInternalPsram == 0) {\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_CFG_GPIO_USE_PSRAM_IO, 0x3f);\n  } else {\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_CFG_GPIO_USE_PSRAM_IO, 0x00);\n  }\n  BL_WR_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO, tmpVal);\n}\n// must be placed in pds section\nvoid ATTR_PDS_RAM_SECTION pm_pds_fastboot_entry(void) {\n  // reload gp register\n  __asm__ __volatile__(\".option push\\n\\t\"\n                       \".option norelax\\n\\t\"\n                       \"la gp, __global_pointer$\\n\\t\"\n                       \".option pop\\n\\t\");\n\n#if XTAL_TYPE != INTERNAL_RC_32M\n  /* power on Xtal_32M*/\n  (*(volatile uint32_t *)(AON_BASE + AON_RF_TOP_AON_OFFSET)) |= (3 << 4);\n#endif\n\n  // recovery flash pad and param\n  RomDriver_SF_Cfg_Init_Flash_Gpio(0, 1);\n  pm_spi_flash_init(1);\n  sf_io_select();\n\n  /* Recovery hardware , include tcm , gpio and clock */\n  if (hardware_recovery) {\n    hardware_recovery();\n  }\n\n  // Restore cpu registers\n  pm_pds_restore_cpu_reg();\n}\n\nvoid pm_set_hardware_recovery_callback(void (*hardware_recovery_cb)(void)) { hardware_recovery = hardware_recovery_cb; }"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_rtc.c",
    "content": "/**\n * @file hal_rtc.c\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#include \"hal_rtc.h\"\n#include \"bl702_hbn.h\"\n\nstatic uint64_t current_timestamp = 0;\n/**\n * @brief rtc init withc sleep time\n *\n * @param sleep_time\n */\nvoid rtc_init(uint64_t sleep_time) {\n  uint32_t tmpVal;\n  uint32_t comp_l, comp_h;\n\n  /* Clear & Disable RTC counter */\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\n  /* Clear RTC control bit0 */\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal & 0xfffffff0);\n\n  /* Get current RTC timer */\n  /* Tigger RTC val read */\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_RTC_TIME_H);\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_RTC_TIME_LATCH);\n  BL_WR_REG(HBN_BASE, HBN_RTC_TIME_H, tmpVal);\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_RTC_TIME_LATCH);\n  BL_WR_REG(HBN_BASE, HBN_RTC_TIME_H, tmpVal);\n\n  /* Read RTC val */\n  comp_l = BL_RD_REG(HBN_BASE, HBN_RTC_TIME_L);\n  comp_h = (BL_RD_REG(HBN_BASE, HBN_RTC_TIME_H) & 0xff);\n\n  /* calculate RTC Comp time */\n  comp_l += (uint32_t)((sleep_time * 32768) & 0xFFFFFFFF);\n  comp_h += (uint32_t)(((sleep_time * 32768) >> 32) & 0xFFFFFFFF);\n\n  /* Set RTC Comp time  */\n  BL_WR_REG(HBN_BASE, HBN_TIME_L, comp_l);\n  BL_WR_REG(HBN_BASE, HBN_TIME_H, comp_h & 0xff);\n\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\n  /* Set interrupt delay option */\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_RTC_DLY_OPTION, HBN_RTC_INT_DELAY_0T);\n  /* Set RTC compare mode */\n  tmpVal |= (HBN_RTC_COMP_BIT0_39 << 1);\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal);\n\n  /* Enable RTC Counter */\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\n  /* Set RTC control bit0 */\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal | 0x01);\n}\n\nvoid rtc_set_timestamp(uint64_t time_stamp) { current_timestamp = time_stamp; }\n/**\n * @bref Get rtc value\n *\n */\nuint64_t rtc_get_timestamp(void) {\n  uint32_t tmpVal;\n  uint64_t time_l;\n  uint64_t time_h;\n\n  /* Tigger RTC val read */\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_RTC_TIME_H);\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_RTC_TIME_LATCH);\n  BL_WR_REG(HBN_BASE, HBN_RTC_TIME_H, tmpVal);\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_RTC_TIME_LATCH);\n  BL_WR_REG(HBN_BASE, HBN_RTC_TIME_H, tmpVal);\n\n  /* Read RTC val */\n  time_l = BL_RD_REG(HBN_BASE, HBN_RTC_TIME_L);\n  time_h = (BL_RD_REG(HBN_BASE, HBN_RTC_TIME_H) & 0xff);\n\n  return (((time_h << 32 | time_l) >> 15) + current_timestamp);\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_sec_aes.c",
    "content": "/**\n * @file hal_sec_aes.c\n * @brief\n *\n * Copyright 2019-2030 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#include \"hal_sec_aes.h\"\n#include \"bl702_sec_eng.h\"\n\nstatic SEC_Eng_AES_Ctx aesCtx;\n\nint sec_aes_init(sec_aes_handle_t *handle, sec_aes_type aes_tye, sec_aes_key_type key_type) {\n  handle->aes_type = aes_tye;\n  handle->key_type = key_type;\n\n  return 0;\n}\n\nstatic SEC_ENG_AES_Key_Type sec_aes_get_key_type(sec_aes_handle_t *handle) {\n  SEC_ENG_AES_Key_Type type = 0;\n\n  switch (handle->key_type) {\n  case SEC_AES_KEY_128:\n    type = SEC_ENG_AES_KEY_128BITS;\n    break;\n\n  case SEC_AES_KEY_256:\n    type = SEC_ENG_AES_KEY_256BITS;\n    break;\n\n  case SEC_AES_KEY_192:\n    type = SEC_ENG_AES_KEY_192BITS;\n    break;\n\n  default:\n    return SEC_ENG_AES_KEY_128BITS;\n  }\n\n  return type;\n}\n\nint sec_aes_setkey(sec_aes_handle_t *handle, const uint8_t *key, uint8_t key_len, const uint8_t *nonce, uint8_t dir) {\n  SEC_ENG_AES_Key_Type type = sec_aes_get_key_type(handle);\n\n  switch (handle->aes_type) {\n  case SEC_AES_CBC:\n    Sec_Eng_AES_Enable_BE(SEC_ENG_AES_ID0);\n    Sec_Eng_AES_Init(&aesCtx, SEC_ENG_AES_ID0, SEC_ENG_AES_CBC, type, SEC_AES_DIR_ENCRYPT == dir ? SEC_ENG_AES_ENCRYPTION : SEC_ENG_AES_DECRYPTION);\n    break;\n\n  case SEC_AES_CTR:\n    Sec_Eng_AES_Enable_BE(SEC_ENG_AES_ID0);\n    Sec_Eng_AES_Init(&aesCtx, SEC_ENG_AES_ID0, SEC_ENG_AES_CTR, type, SEC_AES_DIR_ENCRYPT == dir ? SEC_ENG_AES_ENCRYPTION : SEC_ENG_AES_DECRYPTION);\n    break;\n\n  case SEC_AES_ECB:\n    break;\n\n  default:\n    return -1;\n  }\n\n  /* if key len is 0, means key is from efuse and *key value is key_sel value */\n  if (key_len == 0) {\n    Sec_Eng_AES_Set_Key_IV_BE(SEC_ENG_AES_ID0, SEC_ENG_AES_KEY_HW, key, nonce);\n  } else {\n    Sec_Eng_AES_Set_Key_IV_BE(SEC_ENG_AES_ID0, SEC_ENG_AES_KEY_SW, key, nonce);\n  }\n\n  return 0;\n}\n\nint sec_aes_encrypt(sec_aes_handle_t *handle, const uint8_t *in, uint32_t len, size_t offset, uint8_t *out) {\n  if (SUCCESS != Sec_Eng_AES_Crypt(&aesCtx, SEC_ENG_AES_ID0, in, len, out)) {\n    return -1;\n  }\n\n  return 0;\n}\n\nint sec_aes_decrypt(sec_aes_handle_t *handle, const uint8_t *in, uint32_t len, size_t offset, uint8_t *out) {\n  if (SUCCESS != Sec_Eng_AES_Crypt(&aesCtx, SEC_ENG_AES_ID0, in, len, out)) {\n    return -1;\n  }\n\n  return 0;\n}\n\nint sec_aes_deinit(sec_aes_handle_t *handle) {\n  Sec_Eng_AES_Finish(SEC_ENG_AES_ID0);\n\n  memset(handle, 0, sizeof(sec_aes_handle_t));\n\n  return 0;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_sec_dsa.c",
    "content": "/**\n * @file hal_sec_dsa.c\n * @brief\n *\n * Copyright 2019-2030 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#include \"hal_sec_dsa.h\"\n#include \"bl702_sec_eng.h\"\n\n// #define DSA_DBG                                   1\n// #define DSA_DBG_DETAIL                            1\nvoid bflb_platform_dump(uint8_t *data, uint32_t len);\n\n#if (defined(DSA_DBG) || defined(DSA_DBG_DETAIL))\nuint32_t pka_tmp[64] = {0};\n#endif\n\n/*\nn=p*q;\nF(n)=(p-1)*(q-1)\ne*d%F(n)=1[e is public key and d is private key]\ndP=d%(p-1)\ndQ=d%(q-1)\nm1=c^(dP)%p\nm2=c^(dQ)%q\nh=qInv*(m1-m2)%p\nm=m2+h*q\nm=c^d\n*/\nstatic SEC_ENG_PKA_REG_SIZE_Type sec_dsa_get_reg_size(uint32_t size) {\n  switch (size) {\n  case 64:\n    return SEC_ENG_PKA_REG_SIZE_8;\n\n  case 128:\n    return SEC_ENG_PKA_REG_SIZE_16;\n\n  case 256:\n    return SEC_ENG_PKA_REG_SIZE_32;\n\n  case 512:\n    return SEC_ENG_PKA_REG_SIZE_64;\n\n  case 768:\n    return SEC_ENG_PKA_REG_SIZE_96;\n\n  case 1024:\n    return SEC_ENG_PKA_REG_SIZE_128;\n\n  case 1536:\n    return SEC_ENG_PKA_REG_SIZE_192;\n\n  case 2048:\n    return SEC_ENG_PKA_REG_SIZE_256;\n\n  case 3072:\n    return SEC_ENG_PKA_REG_SIZE_384;\n\n  case 4096:\n    return SEC_ENG_PKA_REG_SIZE_512;\n\n  default:\n    return SEC_ENG_PKA_REG_SIZE_32;\n  }\n\n  return SEC_ENG_PKA_REG_SIZE_32;\n}\n\n/* c code:\nnumber = 1\nbase = a\nwhile b:\n    if b & 1:\n        number = number * base % c\n    b >>= 1\n    base = base * base % c\nreturn number\n*/\nint sec_dsa_mexp_binary(uint32_t size, const uint32_t *a, const uint32_t *b, const uint32_t *c, uint32_t *r) {\n  uint32_t                  i, j, k;\n  uint32_t                  tmp;\n  uint32_t                  isOne    = 0;\n  uint8_t                  *p        = (uint8_t *)b;\n  SEC_ENG_PKA_REG_SIZE_Type nregType = sec_dsa_get_reg_size(size);\n  SEC_ENG_PKA_REG_SIZE_Type lregType = sec_dsa_get_reg_size(size * 2);\n  uint32_t                  dataSize = (size >> 3) >> 2;\n#if 1\n  uint8_t oneBuf[128] ALIGN4 = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};\n#endif\n  /* 0:c\n   * 4:a\n   * 5:number\n   * 6&7:temp\n   */\n\n  /* base = a */\n  Sec_Eng_PKA_Write_Data(nregType, 4, (uint32_t *)a, dataSize, 0);\n\n  /* number = 1 */\n  Sec_Eng_PKA_Write_Data(nregType, 5, (uint32_t *)oneBuf, sizeof(oneBuf) / 4, 0);\n  // Sec_Eng_PKA_Write_Immediate(nregType,5,0x01,1);\n#ifdef DSA_DBG\n  Sec_Eng_PKA_Read_Data(nregType, 5, (uint32_t *)pka_tmp, dataSize);\n  MSG(\"number:\\r\\n\");\n  bflb_platform_dump(pka_tmp, dataSize * 4);\n#endif\n\n  Sec_Eng_PKA_Write_Data(nregType, 0, (uint32_t *)c, dataSize, 0);\n\n  Sec_Eng_PKA_CREG(nregType, 6, dataSize, 1);\n  Sec_Eng_PKA_CREG(nregType, 7, dataSize, 1);\n#ifdef DSA_DBG\n  Sec_Eng_PKA_Read_Data(nregType, 4, (uint32_t *)pka_tmp, dataSize);\n  MSG(\"base:\\r\\n\");\n  bflb_platform_dump(pka_tmp, dataSize * 4);\n#endif\n  /* Remove zeros bytes*/\n  k = 0;\n\n  while (p[k] == 0 && k < (size >> 3)) {\n    k++;\n  }\n\n  i = (size >> 3) - 1;\n\n  for (; i >= k; i--) {\n    tmp = p[i];\n    j   = 0;\n\n    for (j = 0; j < 8; j++) {\n      isOne = tmp & (1 << j);\n\n      if (isOne) {\n        /* number = number * base % c */\n        Sec_Eng_PKA_LMUL(lregType, 3, nregType, 5, nregType, 4, 0);\n        Sec_Eng_PKA_MREM(nregType, 5, lregType, 3, nregType, 0, 1);\n#ifdef DSA_DBG\n        Sec_Eng_PKA_Read_Data(nregType, 5, (uint32_t *)pka_tmp, dataSize);\n        MSG(\"number:\\r\\n\");\n        bflb_platform_dump(pka_tmp, dataSize /*dataSize*4*/);\n#endif\n      }\n\n      /* base = base * base % c */\n      Sec_Eng_PKA_LSQR(lregType, 3, nregType, 4, 0);\n      Sec_Eng_PKA_MREM(nregType, 4, lregType, 3, nregType, 0, 1);\n#ifdef DSA_DBG\n      Sec_Eng_PKA_Read_Data(nregType, 4, (uint32_t *)pka_tmp, dataSize);\n      MSG(\"base:\\r\\n\");\n      bflb_platform_dump(pka_tmp, dataSize /*dataSize*4*/);\n#endif\n    }\n  }\n\n  Sec_Eng_PKA_Read_Data(nregType, 5, (uint32_t *)r, dataSize);\n#ifdef DSA_DBG\n  MSG(\"r:\\r\\n\");\n  bflb_platform_dump(r, dataSize * 4);\n#endif\n  return 0;\n}\n\n/*r=a^b%c*/\nint sec_dsa_mexp_mont(uint32_t size, uint32_t *a, uint32_t *b, uint32_t *c, uint32_t *invR_c, uint32_t *primeN_c, uint32_t *r) {\n  SEC_ENG_PKA_REG_SIZE_Type nregType = sec_dsa_get_reg_size(size);\n  SEC_ENG_PKA_REG_SIZE_Type lregType = sec_dsa_get_reg_size(size * 2);\n  uint32_t                  dataSize = (size >> 3) >> 2;\n\n  /* 0:c\n   * 1:NPrime_c\n   * 2:invR_c\n   * 4:a(mont domain)\n   * 5:b\n   * 6:a^b%c(mont domain)\n   * 7:a^b%c(gf domain)\n   * 10&11:2^size for GF2Mont*/\n  Sec_Eng_PKA_Write_Data(nregType, 0, (uint32_t *)c, dataSize, 0);\n  Sec_Eng_PKA_Write_Data(nregType, 1, (uint32_t *)primeN_c, dataSize, 1);\n  Sec_Eng_PKA_Write_Data(nregType, 2, (uint32_t *)invR_c, dataSize, 1);\n\n  /* change a into mont domain*/\n  Sec_Eng_PKA_Write_Data(nregType, 4, (uint32_t *)a, dataSize, 0);\n  Sec_Eng_PKA_CREG(nregType, 10, dataSize, 1);\n  Sec_Eng_PKA_CREG(nregType, 11, dataSize, 1);\n  Sec_Eng_PKA_GF2Mont(nregType, 4, nregType, 4, size, lregType, 5, nregType, 0);\n#ifdef DSA_DBG\n  Sec_Eng_PKA_Read_Data(nregType, 4, (uint32_t *)pka_tmp, dataSize);\n  MSG(\"GF2Mont Result of a:\\r\\n\");\n  bflb_platform_dump(pka_tmp, dataSize /*dataSize*4*/);\n#endif\n\n  Sec_Eng_PKA_Write_Data(nregType, 5, (uint32_t *)b, dataSize, 0);\n  /* a^b%c*/\n  Sec_Eng_PKA_MEXP(nregType, 6, nregType, 4, nregType, 5, nregType, 0, 1);\n\n  /* change result into gf domain*/\n  Sec_Eng_PKA_CREG(nregType, 10, dataSize, 1);\n  Sec_Eng_PKA_CREG(nregType, 11, dataSize, 1);\n  /*index 2 is invertR*/\n  Sec_Eng_PKA_Mont2GF(nregType, 7, nregType, 6, nregType, 2, lregType, 5, nregType, 0);\n  Sec_Eng_PKA_Read_Data(nregType, 7, (uint32_t *)r, dataSize);\n#ifdef DSA_DBG\n  MSG(\"r:\\r\\n\");\n  bflb_platform_dump(r, dataSize /*dataSize*4*/);\n#endif\n  return 0;\n}\n\n/**\n * dP=d%(p-1)\n * dQ=d%(q-1)\n * qInv=qp^(1-1):qInv*q%p=1\n * invR_p*r%p=1(r is 1024/2048/256)\n * invR_q*r%q=1(r is 1024/2048/256)\n */\nint sec_dsa_decrypt_crt(uint32_t size, uint32_t *c, sec_dsa_crt_cfg_t *crtCfg, uint32_t *d, uint32_t *r) {\n  /*\n   * m1 = pow(c, dP, p)\n   * m2 = pow(c, dQ, q)\n   * h = (qInv * (m1 - m2)) % p\n   * m = m2 + h * q\n   * */\n  SEC_ENG_PKA_REG_SIZE_Type nregType = sec_dsa_get_reg_size(size);\n  SEC_ENG_PKA_REG_SIZE_Type lregType = sec_dsa_get_reg_size(size * 2);\n  uint32_t                  dataSize = (size >> 3) >> 2;\n#if 0\n    uint8_t  m1[64] = {0x11, 0xdd, 0x19, 0x7e, 0x69, 0x1a, 0x40, 0x0a, 0x28, 0xfc, 0x3b, 0x31, 0x47, 0xa2, 0x6c, 0x14,\n                       0x4e, 0xf6, 0xb0, 0xe6, 0xcd, 0x89, 0x0b, 0x4f, 0x02, 0xe4, 0x86, 0xe2, 0xe5, 0xbe, 0xe1, 0xaf,\n                       0x91, 0xd1, 0x7b, 0x59, 0x8d, 0xdc, 0xb3, 0x57, 0x18, 0xcb, 0x80, 0x05, 0x1c, 0xb5, 0xa4, 0x07,\n                       0xde, 0x31, 0x94, 0xa4, 0x2f, 0x45, 0xc7, 0x95, 0x75, 0x0f, 0x91, 0xf0, 0x37, 0x91, 0x85, 0xa5\n                      };\n    uint8_t  m2[64] = {0x63, 0x89, 0xa3, 0xbb, 0x64, 0x63, 0x87, 0x4f, 0x38, 0xbd, 0x9e, 0x0e, 0x93, 0x29, 0x58, 0xee,\n                       0xf8, 0xe2, 0x20, 0x2d, 0xe5, 0x38, 0x0a, 0x7f, 0x18, 0x38, 0x2f, 0xa3, 0xf5, 0x48, 0xf8, 0xfd,\n                       0xe5, 0x78, 0x4a, 0x10, 0x62, 0x01, 0x09, 0x29, 0xe3, 0xe3, 0x9f, 0xad, 0x9b, 0xbe, 0x20, 0xd2,\n                       0x68, 0x90, 0x57, 0x97, 0xfc, 0x78, 0xd5, 0xdb, 0x07, 0x5b, 0xfe, 0x21, 0x0a, 0x2d, 0x7f, 0xc1\n                      };\n#else\n  uint32_t m1[32];\n  uint32_t m2[32];\n#endif\n  /*\n   * 4:m1\n   * 5:m2\n   * 6:qInv\n   * 7:p\n   * 8:q\n   * 9:h\n   * 10&11:qInv*(m1-m2)\n   */\n  sec_dsa_mexp_mont(size, c, crtCfg->dP, crtCfg->p, crtCfg->invR_p, crtCfg->primeN_p, m1);\n  sec_dsa_mexp_mont(size, c, crtCfg->dQ, crtCfg->q, crtCfg->invR_q, crtCfg->primeN_q, m2);\n\n  Sec_Eng_PKA_Write_Data(nregType, 4, (uint32_t *)m1, dataSize, 0);\n  Sec_Eng_PKA_Write_Data(nregType, 5, (uint32_t *)m2, dataSize, 0);\n  Sec_Eng_PKA_Write_Data(nregType, 6, (uint32_t *)crtCfg->qInv, dataSize, 0);\n  Sec_Eng_PKA_Write_Data(nregType, 7, (uint32_t *)crtCfg->p, dataSize, 0);\n  Sec_Eng_PKA_Write_Data(nregType, 8, (uint32_t *)crtCfg->q, dataSize, 0);\n\n  /*(m1 - m2)%p*/\n  Sec_Eng_PKA_MSUB(nregType, 4, nregType, 4, nregType, 5, nregType, 7, 1);\n#ifdef DSA_DBG\n  Sec_Eng_PKA_Read_Data(nregType, 4, (uint32_t *)pka_tmp, dataSize);\n  MSG(\"m1 - m2:\\r\\n\");\n  bflb_platform_dump(pka_tmp, dataSize /*dataSize*4*/);\n#endif\n  /* (qInv * (m1 - m2)) % p*/\n  Sec_Eng_PKA_CREG(nregType, 10, dataSize, 1);\n  Sec_Eng_PKA_CREG(nregType, 11, dataSize, 1);\n  Sec_Eng_PKA_LMUL(lregType, 5, nregType, 6, nregType, 4, 1);\n#ifdef DSA_DBG\n  Sec_Eng_PKA_Read_Data(lregType, 5, (uint32_t *)pka_tmp, dataSize * 2);\n  MSG(\"qInv * (m1 - m2):\\r\\n\");\n  bflb_platform_dump(pka_tmp, dataSize /*dataSize*4*2*/);\n#endif\n  Sec_Eng_PKA_MREM(nregType, 9, lregType, 5, nregType, 7, 1);\n#ifdef DSA_DBG\n  Sec_Eng_PKA_Read_Data(nregType, 9, (uint32_t *)pka_tmp, dataSize);\n  MSG(\"h:\\r\\n\");\n  bflb_platform_dump(pka_tmp, dataSize * 4);\n#endif\n\n  /* h*q */\n  Sec_Eng_PKA_CREG(nregType, 10, dataSize, 1);\n  Sec_Eng_PKA_CREG(nregType, 11, dataSize, 1);\n  Sec_Eng_PKA_LMUL(lregType, 5, nregType, 9, nregType, 8, 1);\n#ifdef DSA_DBG\n  Sec_Eng_PKA_Read_Data(lregType, 5, (uint32_t *)pka_tmp, dataSize * 2);\n  MSG(\"h*q:\\r\\n\");\n  bflb_platform_dump(pka_tmp, dataSize /*dataSize*4*2*/);\n#endif\n  /* m2 + h*q*/\n  Sec_Eng_PKA_LADD(lregType, 5, lregType, 5, nregType, 5, 1);\n\n  Sec_Eng_PKA_Read_Data(lregType, 5, (uint32_t *)r, dataSize * 2);\n#ifdef DSA_DBG\n  MSG(\"r:\\r\\n\");\n  bflb_platform_dump(r, dataSize * 4 * 2);\n#endif\n  return 0;\n}\n\nint sec_dsa_init(sec_dsa_handle_t *handle, uint32_t size) {\n  Sec_Eng_PKA_Reset();\n  Sec_Eng_PKA_BigEndian_Enable();\n\n  memset(handle, 0, sizeof(sec_dsa_handle_t));\n  handle->size    = size;\n  handle->crtSize = (size >> 1);\n\n  return 0;\n}\n\nint sec_dsa_sign(sec_dsa_handle_t *handle, const uint32_t *hash, uint32_t hashLenInWord, uint32_t *s) {\n  uint32_t dsa_tmp[64] = {0};\n\n  Sec_Eng_PKA_Reset();\n  Sec_Eng_PKA_BigEndian_Enable();\n\n  memcpy(dsa_tmp + ((handle->crtSize >> 3) >> 2) - hashLenInWord, hash, hashLenInWord * 4);\n\n  if (0 == sec_dsa_decrypt_crt(handle->crtSize, dsa_tmp, &handle->crtCfg, handle->d, s)) {\n    return 0;\n  } else {\n    return -1;\n  }\n}\n\n/**\n */\nint sec_dsa_verify(sec_dsa_handle_t *handle, const uint32_t *hash, uint32_t hashLenInWord, const uint32_t *s) {\n  uint32_t dsa_tmp[64];\n  uint8_t  i            = 0;\n  uint8_t  resultOffset = 0;\n\n  Sec_Eng_PKA_Reset();\n  Sec_Eng_PKA_BigEndian_Enable();\n\n  if (0 == sec_dsa_mexp_binary(handle->size, s, handle->e, handle->n, dsa_tmp)) {\n    resultOffset = (handle->size >> 5) - hashLenInWord;\n\n    for (i = 0; i < hashLenInWord; i++) {\n      if (dsa_tmp[resultOffset + i] != hash[i]) {\n        return -1;\n      }\n    }\n\n    return 0;\n  } else {\n    return -1;\n  }\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_sec_ecdsa.c",
    "content": "#include \"hal_sec_ecdsa.h\"\n#include \"bl702_sec_eng.h\"\n\n#define ECP_SECP256R1_REG_TYPE           SEC_ENG_PKA_REG_SIZE_32\n#define ECP_SECP256R1_N_REG_INDEX        0\n#define ECP_SECP256R1_NPRIME_N_REG_INDEX 1\n#define ECP_SECP256R1_INVR_N_REG_INDEX   2\n#define ECP_SECP256R1_NPRIME_P_REG_INDEX 3\n#define ECP_SECP256R1_INVR_P_REG_INDEX   4\n#define ECP_SECP256R1_SIZE               32\n/* Used in verify */\n#define ECP_SECP256R1_S_REG_INDEX     5\n#define ECP_SECP256R1_BAR_S_REG_INDEX 6\n#define ECP_SECP256R1_HASH_REG_INDEX  6 // use ECP_SECP256R1_BAR_S_REG_INDEX since it's temp\n#define ECP_SECP256R1_U1_REG_INDEX    7\n#define ECP_SECP256R1_LT_REG_TYPE     SEC_ENG_PKA_REG_SIZE_64\n#define ECP_SECP256R1_LT_REG_INDEX    7\n#define ECP_SECP256R1_SLT_REG_TYPE    SEC_ENG_PKA_REG_SIZE_128\n#define ECP_SECP256R1_SLT_REG_INDEX   3\n\n// #define ECDSA_DBG                                   1\n// #define ECDSA_DBG_DETAIL                            1\n\n#define secp256r1\n#define secp256k1\n#define SEC_ECC_POINT_MUL_PARAM_CFG(G)                                                                                                                                                                 \\\n  sec_ecc_point_mul_cfg((uint32_t *)G##P, (uint32_t *)G##PrimeN_P, (uint32_t *)G##_1, (uint32_t *)G##_BAR2, (uint32_t *)G##_BAR3, (uint32_t *)G##_BAR4, (uint32_t *)G##_BAR8, (uint32_t *)G##_1P1,     \\\n                        (uint32_t *)G##_1M1)\n\n#define SEC_ECC_BASIC_PARAM_CFG(G) sec_ecc_basic_parameter_cfg((uint32_t *)G##N, (uint32_t *)G##PrimeN_N, (uint32_t *)G##InvR_N)\n\nvoid bflb_platform_dump(uint8_t *data, uint32_t len);\n\n#if (defined(ECDSA_DBG) || defined(ECDSA_DBG_DETAIL))\nuint32_t pka_tmp[32] = {0};\n#endif\n/********************************************** secp256r1 *******************************************/\nconst uint8_t secp256r1P[32] ALIGN4        = {0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                              0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};\nconst uint8_t secp256r1B[32] ALIGN4        = {0x5a, 0xc6, 0x35, 0xd8, 0xaa, 0x3a, 0x93, 0xe7, 0xb3, 0xeb, 0xbd, 0x55, 0x76, 0x98, 0x86, 0xbc,\n                                              0x65, 0x1d, 0x06, 0xb0, 0xcc, 0x53, 0xb0, 0xf6, 0x3b, 0xce, 0x3c, 0x3e, 0x27, 0xd2, 0x60, 0x4b};\nconst uint8_t secp256r1Gx[32] ALIGN4       = {0x6b, 0x17, 0xd1, 0xf2, 0xe1, 0x2c, 0x42, 0x47, 0xf8, 0xbc, 0xe6, 0xe5, 0x63, 0xa4, 0x40, 0xf2,\n                                              0x77, 0x03, 0x7d, 0x81, 0x2d, 0xeb, 0x33, 0xa0, 0xf4, 0xa1, 0x39, 0x45, 0xd8, 0x98, 0xc2, 0x96};\nconst uint8_t secp256r1Gy[32] ALIGN4       = {0x4f, 0xe3, 0x42, 0xe2, 0xfe, 0x1a, 0x7f, 0x9b, 0x8e, 0xe7, 0xeb, 0x4a, 0x7c, 0x0f, 0x9e, 0x16,\n                                              0x2b, 0xce, 0x33, 0x57, 0x6b, 0x31, 0x5e, 0xce, 0xcb, 0xb6, 0x40, 0x68, 0x37, 0xbf, 0x51, 0xf5};\nconst uint8_t secp256r1N[32] ALIGN4        = {0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n                                              0xbc, 0xe6, 0xfa, 0xad, 0xa7, 0x17, 0x9e, 0x84, 0xf3, 0xb9, 0xca, 0xc2, 0xfc, 0x63, 0x25, 0x51};\nconst uint8_t secp256r1PrimeN_N[32] ALIGN4 = {0x60, 0xd0, 0x66, 0x33, 0xa9, 0xd6, 0x28, 0x1c, 0x50, 0xfe, 0x77, 0xec, 0xc5, 0x88, 0xc6, 0xf6,\n                                              0x48, 0xc9, 0x44, 0x08, 0x7d, 0x74, 0xd2, 0xe4, 0xcc, 0xd1, 0xc8, 0xaa, 0xee, 0x00, 0xbc, 0x4f};\nconst uint8_t secp256r1InvR_N[32] ALIGN4   = {0x60, 0xd0, 0x66, 0x33, 0x49, 0x05, 0xc1, 0xe9, 0x07, 0xf8, 0xb6, 0x04, 0x1e, 0x60, 0x77, 0x25,\n                                              0xba, 0xde, 0xf3, 0xe2, 0x43, 0x56, 0x6f, 0xaf, 0xce, 0x1b, 0xc8, 0xf7, 0x9c, 0x19, 0x7c, 0x79};\nconst uint8_t secp256r1PrimeN_P[32] ALIGN4 = {0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                              0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};\nconst uint8_t secp256r1InvR_P[32] ALIGN4   = {0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xfd, 0x00, 0x00, 0x00, 0x02,\n                                              0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00};\nconst uint8_t secp256r1_1[32] ALIGN4       = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};\nconst uint8_t secp256r1_BAR2[32] ALIGN4    = {0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n                                              0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02};\nconst uint8_t secp256r1_BAR3[32] ALIGN4    = {0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n                                              0xff, 0xff, 0xff, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03};\nconst uint8_t secp256r1_BAR4[32] ALIGN4    = {0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n                                              0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04};\nconst uint8_t secp256r1_BAR8[32] ALIGN4    = {0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n                                              0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08};\nconst uint8_t secp256r1_1P1[32] ALIGN4     = {0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n                                              0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02};\nconst uint8_t secp256r1_1M1[32] ALIGN4     = {0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n                                              0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\nconst uint8_t secp256r1_Zerox[32] ALIGN4   = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\nconst uint8_t secp256r1_Zeroy[32] ALIGN4   = {0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\n                                              0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};\nconst uint8_t secp256r1_Gx[32] ALIGN4      = {0x18, 0x90, 0x5f, 0x76, 0xa5, 0x37, 0x55, 0xc6, 0x79, 0xfb, 0x73, 0x2b, 0x77, 0x62, 0x25, 0x10,\n                                              0x75, 0xba, 0x95, 0xfc, 0x5f, 0xed, 0xb6, 0x01, 0x79, 0xe7, 0x30, 0xd4, 0x18, 0xa9, 0x14, 0x3c};\nconst uint8_t secp256r1_Gy[32] ALIGN4      = {0x85, 0x71, 0xff, 0x18, 0x25, 0x88, 0x5d, 0x85, 0xd2, 0xe8, 0x86, 0x88, 0xdd, 0x21, 0xf3, 0x25,\n                                              0x8b, 0x4a, 0xb8, 0xe4, 0xba, 0x19, 0xe4, 0x5c, 0xdd, 0xf2, 0x53, 0x57, 0xce, 0x95, 0x56, 0x0a};\n\n/********************************************** secp256k1 *******************************************/\nconst uint8_t secp256k1P[32] ALIGN4        = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,\n                                              0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFC, 0x2F};\nconst uint8_t secp256k1B[32] ALIGN4        = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07};\nconst uint8_t secp256k1Gx[32] ALIGN4       = {0x79, 0xBE, 0x66, 0x7E, 0xF9, 0xDC, 0xBB, 0xAC, 0x55, 0xA0, 0x62, 0x95, 0xCE, 0x87, 0x0B, 0x07,\n                                              0x02, 0x9B, 0xFC, 0xDB, 0x2D, 0xCE, 0x28, 0xD9, 0x59, 0xF2, 0x81, 0x5B, 0x16, 0xF8, 0x17, 0x98};\nconst uint8_t secp256k1Gy[32] ALIGN4       = {0x4f, 0xe3, 0x42, 0xe2, 0xfe, 0x1a, 0x7f, 0x9b, 0x8e, 0xe7, 0xeb, 0x4a, 0x7c, 0x0f, 0x9e, 0x16,\n                                              0x2b, 0xce, 0x33, 0x57, 0x6b, 0x31, 0x5e, 0xce, 0xcb, 0xb6, 0x40, 0x68, 0x37, 0xbf, 0x51, 0xf5};\nconst uint8_t secp256k1N[32] ALIGN4        = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,\n                                              0xBA, 0xAE, 0xDC, 0xE6, 0xAF, 0x48, 0xA0, 0x3B, 0xBF, 0xD2, 0x5E, 0x8C, 0xD0, 0x36, 0x41, 0x41};\nconst uint8_t secp256k1PrimeN_N[32] ALIGN4 = {0xd9, 0xe8, 0x89, 0xd,  0x64, 0x94, 0xef, 0x93, 0x89, 0x7f, 0x30, 0xc1, 0x27, 0xcf, 0xab, 0x5e,\n                                              0x50, 0xa5, 0x1a, 0xc8, 0x34, 0xb9, 0xec, 0x24, 0x4b, 0xd,  0xff, 0x66, 0x55, 0x88, 0xb1, 0x3f};\nconst uint8_t secp256k1InvR_N[32] ALIGN4   = {0xd9, 0xe8, 0x89, 0xd,  0x64, 0x94, 0xef, 0x93, 0x89, 0x7f, 0x30, 0xc1, 0x27, 0xcf, 0xab, 0x5d,\n                                              0x3b, 0xbb, 0xd4, 0x56, 0x7f, 0xa5, 0xc,  0x3c, 0x80, 0xfd, 0x22, 0x93, 0x80, 0x97, 0xc0, 0x16};\nconst uint8_t secp256k1PrimeN_P[32] ALIGN4 = {0xc9, 0xbd, 0x19, 0x5,  0x15, 0x53, 0x83, 0x99, 0x9c, 0x46, 0xc2, 0xc2, 0x95, 0xf2, 0xb7, 0x61,\n                                              0xbc, 0xb2, 0x23, 0xfe, 0xdc, 0x24, 0xa0, 0x59, 0xd8, 0x38, 0x9,  0x1d, 0xd2, 0x25, 0x35, 0x31};\nconst uint8_t secp256k1InvR_P[32] ALIGN4   = {0xc9, 0xbd, 0x19, 0x5,  0x15, 0x53, 0x83, 0x99, 0x9c, 0x46, 0xc2, 0xc2, 0x95, 0xf2, 0xb7, 0x61,\n                                              0xbc, 0xb2, 0x23, 0xfe, 0xdc, 0x24, 0xa0, 0x59, 0xd8, 0x38, 0x9,  0x1d, 0x8,  0x68, 0x19, 0x2a};\nconst uint8_t secp256k1_1[32] ALIGN4       = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};\nconst uint8_t secp256k1_BAR2[32] ALIGN4    = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0xa2};\nconst uint8_t secp256k1_BAR3[32] ALIGN4    = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0b, 0x73};\nconst uint8_t secp256k1_BAR4[32] ALIGN4    = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x44};\nconst uint8_t secp256k1_BAR8[32] ALIGN4    = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x1e, 0x88};\nconst uint8_t secp256k1_1P1[32] ALIGN4     = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xd2};\nconst uint8_t secp256k1_1M1[32] ALIGN4     = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xd0};\nconst uint8_t secp256k1_Zerox[32] ALIGN4   = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\nconst uint8_t secp256k1_Zeroy[32] ALIGN4   = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n                                              0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0xd1};\nconst uint8_t secp256k1_Gx[32] ALIGN4      = {0x99, 0x81, 0xe6, 0x43, 0xe9, 0x08, 0x9f, 0x48, 0x97, 0x9f, 0x48, 0xc0, 0x33, 0xfd, 0x12, 0x9c,\n                                              0x23, 0x1e, 0x29, 0x53, 0x29, 0xbc, 0x66, 0xdb, 0xd7, 0x36, 0x2e, 0x5a, 0x48, 0x7e, 0x20, 0x97};\nconst uint8_t secp256k1_Gy[32] ALIGN4      = {0xcf, 0x3f, 0x85, 0x1f, 0xd4, 0xa5, 0x82, 0xd6, 0x70, 0xb6, 0xb5, 0x9a, 0xac, 0x19, 0xc1, 0x36,\n                                              0x8d, 0xfc, 0x5d, 0x5d, 0x1f, 0x1d, 0xc6, 0x4d, 0xb1, 0x5e, 0xa6, 0xd2, 0xd3, 0xdb, 0xab, 0xe2};\n\nstatic BL_Err_Type sec_ecc_basic_parameter_cfg(uint32_t *n, uint32_t *prime_n, uint32_t *invr_n) {\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX, (uint32_t *)n, ECP_SECP256R1_SIZE / 4, 0);\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_NPRIME_N_REG_INDEX, (uint32_t *)prime_n, ECP_SECP256R1_SIZE / 4, 0);\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_INVR_N_REG_INDEX, (uint32_t *)invr_n, ECP_SECP256R1_SIZE / 4, 0);\n  return SUCCESS;\n}\nstatic BL_Err_Type sec_ecc_basic_parameter_init(uint8_t id) {\n  if (id >= ECP_TYPE_MAX) {\n    return ERROR;\n  }\n\n  if (id == ECP_SECP256R1) {\n    SEC_ECC_BASIC_PARAM_CFG(secp256r1);\n  } else if (id == ECP_SECP256K1) {\n    SEC_ECC_BASIC_PARAM_CFG(secp256k1);\n  }\n\n  return SUCCESS;\n}\n\nstatic BL_Err_Type sec_ecc_point_mul_cfg(uint32_t *p, uint32_t *primeN_p, uint32_t *ori_1, uint32_t *bar2, uint32_t *bar3, uint32_t *bar4, uint32_t *bar8, uint32_t *bar1p1, uint32_t *bar1m1) {\n  Sec_Eng_PKA_Write_Data(SEC_ENG_PKA_REG_SIZE_32, 0, (uint32_t *)p, ECP_SECP256R1_SIZE / 4, 0);\n  Sec_Eng_PKA_Write_Data(SEC_ENG_PKA_REG_SIZE_32, 1, (uint32_t *)primeN_p, ECP_SECP256R1_SIZE / 4, 0);\n  Sec_Eng_PKA_Write_Data(SEC_ENG_PKA_REG_SIZE_32, 8, (uint32_t *)ori_1, ECP_SECP256R1_SIZE / 4, 0);\n  Sec_Eng_PKA_Write_Data(SEC_ENG_PKA_REG_SIZE_32, 9, (uint32_t *)bar2, ECP_SECP256R1_SIZE / 4, 0);\n  Sec_Eng_PKA_Write_Data(SEC_ENG_PKA_REG_SIZE_32, 10, (uint32_t *)bar3, ECP_SECP256R1_SIZE / 4, 0);\n  Sec_Eng_PKA_Write_Data(SEC_ENG_PKA_REG_SIZE_32, 11, (uint32_t *)bar4, ECP_SECP256R1_SIZE / 4, 0);\n  Sec_Eng_PKA_Write_Data(SEC_ENG_PKA_REG_SIZE_32, 12, (uint32_t *)bar8, ECP_SECP256R1_SIZE / 4, 0);\n  Sec_Eng_PKA_Write_Data(SEC_ENG_PKA_REG_SIZE_32, 19, (uint32_t *)bar1p1, ECP_SECP256R1_SIZE / 4, 0);\n  Sec_Eng_PKA_Write_Data(SEC_ENG_PKA_REG_SIZE_32, 20, (uint32_t *)bar1m1, ECP_SECP256R1_SIZE / 4, 0);\n\n  return SUCCESS;\n}\n\nstatic int sec_ecc_point_mul_init(uint8_t id) {\n  if (id >= ECP_TYPE_MAX) {\n    return ERROR;\n  }\n\n  if (id == ECP_SECP256R1) {\n    SEC_ECC_POINT_MUL_PARAM_CFG(secp256r1);\n  } else if (id == ECP_SECP256K1) {\n    SEC_ECC_POINT_MUL_PARAM_CFG(secp256k1);\n  }\n\n  return SUCCESS;\n}\n\nstatic void sec_ecdsa_point_add_inf_check(uint8_t *pka_p1_eq_inf, uint8_t *pka_p2_eq_inf) {\n  uint8_t res[4];\n\n  /* index 2:BAR_Zero_x\n   * index 3:BAR_Zero_y\n   * index 4:BAR_Zero_z\n   * index 5:BAR_G_x\n   * index 6:BAR_G_y\n   * index 7:BAR_G_z\n   * index 8:1\n   * index 9:2\n   * index 10:3\n   * index 11:4\n   * index 12:8\n   * index 19:1P1\n   * index 20:1m1*/\n\n  // cout = 1 if X1 = 0\n  Sec_Eng_PKA_LCMP(res, 3, 2, 3, 8); // s0 < s1 => cout = 1\n  // cout = 1 if Y1 < Bar_1p1\n  Sec_Eng_PKA_LCMP(res + 1, 3, 3, 3, 19);\n  // cout=1 if Y1 > Bar_1m1\n  Sec_Eng_PKA_LCMP(res + 2, 3, 20, 3, 3);\n  // cout =1 if Z1 = 0\n  Sec_Eng_PKA_LCMP(res + 3, 3, 4, 3, 8);\n  *pka_p1_eq_inf = res[0] & res[1] & res[2] & res[3];\n\n  // cout = 1 if X2 = 0\n  Sec_Eng_PKA_LCMP(res, 3, 5, 3, 8);\n  // cout = 1 if Y2 < Bar_1p1\n  Sec_Eng_PKA_LCMP(res + 1, 3, 6, 3, 19);\n  // cout = 1 if Y2 > Bar_1m1\n  Sec_Eng_PKA_LCMP(res + 2, 3, 20, 3, 6);\n  // cout = 1 if Z2 = 0\n  Sec_Eng_PKA_LCMP(res + 3, 3, 7, 3, 8);\n  *pka_p2_eq_inf = res[0] & res[1] & res[2] & res[3];\n}\n\nstatic void sec_ecdsa_copy_x2_to_x1(uint8_t id) {\n  // X2->X1\n  Sec_Eng_PKA_Move_Data(3, 2, 3, 5, 0);\n  // Y2->Y1\n  Sec_Eng_PKA_Move_Data(3, 3, 3, 6, 0);\n  // Z2->Z1\n  Sec_Eng_PKA_Move_Data(3, 4, 3, 7, 1); // Caution!!! wait movdat ready to execute next command\n}\n\nstatic void sec_ecdsa_point_add(uint8_t id) {\n  /* index 2:BAR_Zero_x\n   * index 3:BAR_Zero_y\n   * index 4:BAR_Zero_z\n   * index 5:BAR_G_x\n   * index 6:BAR_G_y\n   * index 7:BAR_G_z\n   * index 8:1\n   * index 9:2\n   * index 10:3\n   * index 11:4\n   * index 12:8\n   * index 19:1P1\n   * index 20:1m1*/\n\n  // U1 = Y2*Z1\n  // PKA_MMUL(0,3,13,3, 6,3, 4,3,0);//d_reg_type,d_reg_idx,s0_reg_type,s0_reg_idx,s1_reg_type,s1_reg_idx,s2_reg_type,s2_reg_idx\n  Sec_Eng_PKA_MMUL(3, 13, 3, 6, 3, 4, 3, 0, 0);\n\n  // U2 = Y1*Z2\n  // PKA_MMUL(0,3,14,3, 3,3, 7,3,0);\n  Sec_Eng_PKA_MMUL(3, 14, 3, 3, 3, 7, 3, 0, 0);\n\n  // V1 = X2*Z1\n  // PKA_MMUL(0,3,15,3, 5,3, 4,3,0);\n  Sec_Eng_PKA_MMUL(3, 15, 3, 5, 3, 4, 3, 0, 0);\n\n  // V2 = X1*Z2\n  // PKA_MMUL(0,3,16,3, 2,3, 7,3,0);\n  Sec_Eng_PKA_MMUL(3, 16, 3, 2, 3, 7, 3, 0, 0);\n\n  // U = U1-U2\n  // PKA_MSUB(0,3,13,3,13,3,14,3,0);\n  Sec_Eng_PKA_MSUB(3, 13, 3, 13, 3, 14, 3, 0, 0);\n\n  // V = V1-V2\n  // PKA_MSUB(0,3,15,3,15,3,16,3,0);\n  Sec_Eng_PKA_MSUB(3, 15, 3, 15, 3, 16, 3, 0, 0);\n\n  // W = Z1*Z2\n  // PKA_MMUL(0,3, 2,3, 4,3, 7,3,0);\n  Sec_Eng_PKA_MMUL(3, 2, 3, 4, 3, 7, 3, 0, 0);\n\n  // V^2\n  // PKA_MMUL(0,3, 3,3,15,3,15,3,0);\n  Sec_Eng_PKA_MMUL(3, 3, 3, 15, 3, 15, 3, 0, 0);\n\n  // V^3\n  // PKA_MMUL(0,3, 4,3, 3,3,15,3,0);\n  Sec_Eng_PKA_MMUL(3, 4, 3, 3, 3, 15, 3, 0, 0);\n\n  // U^2\n  // PKA_MMUL(0,3,17,3,13,3,13,3,0);\n  Sec_Eng_PKA_MMUL(3, 17, 3, 13, 3, 13, 3, 0, 0);\n\n  // U^2*W\n  // PKA_MMUL(0,3,17,3,17,3, 2,3,0);\n  Sec_Eng_PKA_MMUL(3, 17, 3, 17, 3, 2, 3, 0, 0);\n\n  // U^2*W-V^3\n  // PKA_MSUB(0,3,17,3,17,3, 4,3,0);\n  Sec_Eng_PKA_MSUB(3, 17, 3, 17, 3, 4, 3, 0, 0);\n\n  // 2*V^2\n  // PKA_MMUL(0,3,18,3, 9,3, 3,3,0);\n  Sec_Eng_PKA_MMUL(3, 18, 3, 9, 3, 3, 3, 0, 0);\n\n  // 2*V^2*V2\n  // PKA_MMUL(0,3,18,3,18,3,16,3,0);\n  Sec_Eng_PKA_MMUL(3, 18, 3, 18, 3, 16, 3, 0, 0);\n\n  // A = U^2*W-V^3-2*V^2*V2\n  // PKA_MSUB(0,3,18,3,17,3,18,3,0);\n  Sec_Eng_PKA_MSUB(3, 18, 3, 17, 3, 18, 3, 0, 0);\n\n  // V^2*V2\n  // PKA_MMUL(0,3, 3,3, 3,3,16,3,0);\n  Sec_Eng_PKA_MMUL(3, 3, 3, 3, 3, 16, 3, 0, 0);\n\n  // V^3*U2\n  // PKA_MMUL(0,3,14,3, 4,3,14,3,0);\n  Sec_Eng_PKA_MMUL(3, 14, 3, 4, 3, 14, 3, 0, 0);\n\n  // Z3 = V^3*W\n  // PKA_MMUL(0,3, 4,3, 4,3, 2,3,0);\n  Sec_Eng_PKA_MMUL(3, 4, 3, 4, 3, 2, 3, 0, 0);\n\n  // X3 = V*A\n  // PKA_MMUL(0,3, 2,3,15,3,18,3,0);\n  Sec_Eng_PKA_MMUL(3, 2, 3, 15, 3, 18, 3, 0, 0);\n\n  // V^2*V2-A\n  // PKA_MSUB(0,3, 3,3, 3,3,18,3,0);\n  Sec_Eng_PKA_MSUB(3, 3, 3, 3, 3, 18, 3, 0, 0);\n\n  // U*(V^2*V2-A)\n  // PKA_MMUL(0,3, 3,3,13,3, 3,3,0);\n  Sec_Eng_PKA_MMUL(3, 3, 3, 13, 3, 3, 3, 0, 0);\n\n  // Y3 = U*(V^2*V2-A)-V^3*U2\n  // PKA_MSUB(1,3, 3,3, 3,3,14,3,0);\n  Sec_Eng_PKA_MSUB(3, 3, 3, 3, 3, 14, 3, 0, 1);\n}\n/**\n * @brief calculate secp256r1's W\n *\n * @note index 13:W = 3X^2-3Z^2\n */\nstatic void sec_ecdsa_cal_secp256r1_w(void) {\n  // X1^2\n  // PKA_MMUL(0,3,13,3, 5,3, 5,3,0);//d_reg_type,d_reg_idx,s0_reg_type,s0_reg_idx,s1_reg_type,s1_reg_idx,s2_reg_type,s2_reg_idx\n  Sec_Eng_PKA_MMUL(3, 13, 3, 5, 3, 5, 3, 0, 0);\n\n  // Z1^2\n  // PKA_MMUL(0,3,14,3, 7,3, 7,3,0);\n  Sec_Eng_PKA_MMUL(3, 14, 3, 7, 3, 7, 3, 0, 0);\n\n  // X1^2-Z1^2\n  // PKA_MSUB(0,3,13,3,13,3,14,3,0);\n  Sec_Eng_PKA_MSUB(3, 13, 3, 13, 3, 14, 3, 0, 0);\n\n  // W = 3*(X1^2-Z1^2)\n  // PKA_MMUL(0,3,13,3,10,3,13,3,0);\n  Sec_Eng_PKA_MMUL(3, 13, 3, 10, 3, 13, 3, 0, 0);\n}\n\n/**\n * @brief calculate secp256k1's W\n *\n * @note index 13:W = 3X^2\n */\nstatic void sec_ecdsa_cal_secp256k1_w(void) {\n  // X1^2\n  Sec_Eng_PKA_MMUL(3, 13, 3, 5, 3, 5, 3, 0, 0);\n\n  // W = 3* (X1^2)\n  Sec_Eng_PKA_MMUL(3, 13, 3, 10, 3, 13, 3, 0, 0);\n}\n\nstatic BL_Err_Type sec_ecdsa_point_double(sec_ecp_type id) {\n  /* index 2:BAR_Zero_x\n   * index 3:BAR_Zero_y\n   * index 4:BAR_Zero_z\n   * index 5:BAR_G_x\n   * index 6:BAR_G_y\n   * index 7:BAR_G_z\n   * index 8:1\n   * index 9:2\n   * index 10:3\n   * index 11:4\n   * index 12:8\n   * index 19:1P1\n   * index 20:1m1*/\n\n  if (id >= ECP_TYPE_MAX) {\n    return ERROR;\n  }\n\n  if (id == ECP_SECP256R1) {\n    sec_ecdsa_cal_secp256r1_w();\n  } else if (id == ECP_SECP256K1) {\n    sec_ecdsa_cal_secp256k1_w();\n  }\n\n  // S = Y1*Z1\n  // PKA_MMUL(0,3,14,3, 6,3, 7,3,0);\n  Sec_Eng_PKA_MMUL(3, 14, 3, 6, 3, 7, 3, 0, 0);\n\n  // X1*Y1\n  // PKA_MMUL(0,3,15,3, 5,3, 6,3,0);\n  Sec_Eng_PKA_MMUL(3, 15, 3, 5, 3, 6, 3, 0, 0);\n\n  // W^2\n  // PKA_MMUL(0,3, 7,3,13,3,13,3,0);\n  Sec_Eng_PKA_MMUL(3, 7, 3, 13, 3, 13, 3, 0, 0);\n\n  // B = X1*Y1*S\n  // PKA_MMUL(0,3,15,3,15,3,14,3,0);\n  Sec_Eng_PKA_MMUL(3, 15, 3, 15, 3, 14, 3, 0, 0);\n\n  // 8*B\n  // PKA_MMUL(0,3, 5,3,12,3,15,3,0);\n  Sec_Eng_PKA_MMUL(3, 5, 3, 12, 3, 15, 3, 0, 0);\n\n  // H = W^2-8*B\n  // PKA_MSUB(0,3, 7,3, 7,3, 5,3,0);\n  Sec_Eng_PKA_MSUB(3, 7, 3, 7, 3, 5, 3, 0, 0);\n\n  // 2*H\n  // PKA_MMUL(0,3, 5,3, 9,3, 7,3,0);\n  Sec_Eng_PKA_MMUL(3, 5, 3, 9, 3, 7, 3, 0, 0);\n\n  // X2 = 2*H*S\n  // PKA_MMUL(0,3, 5,3, 5,3,14,3,0);\n  Sec_Eng_PKA_MMUL(3, 5, 3, 5, 3, 14, 3, 0, 0);\n\n  // 4*B\n  // PKA_MMUL(0,3,15,3,11,3,15,3,0);\n  Sec_Eng_PKA_MMUL(3, 15, 3, 11, 3, 15, 3, 0, 0);\n\n  // S^2\n  // PKA_MMUL(0,3,16,3,14,3,14,3,0);\n  Sec_Eng_PKA_MMUL(3, 16, 3, 14, 3, 14, 3, 0, 0);\n\n  // 4*B-H\n  // PKA_MSUB(0,3,15,3,15,3, 7,3,0);\n  Sec_Eng_PKA_MSUB(3, 15, 3, 15, 3, 7, 3, 0, 0);\n\n  // Y1^2\n  // PKA_MMUL(0,3, 6,3, 6,3, 6,3,0);\n  Sec_Eng_PKA_MMUL(3, 6, 3, 6, 3, 6, 3, 0, 0);\n\n  // W*(4*B-H)\n  // PKA_MMUL(0,3,15,3,15,3,13,3,0);\n  Sec_Eng_PKA_MMUL(3, 15, 3, 15, 3, 13, 3, 0, 0);\n\n  // 8*Y1^2\n  // PKA_MMUL(0,3, 6,3,12,3, 6,3,0);\n  Sec_Eng_PKA_MMUL(3, 6, 3, 12, 3, 6, 3, 0, 0);\n\n  // 8*Y1^2*S^2\n  // PKA_MMUL(0,3, 6,3, 6,3,16,3,0);\n  Sec_Eng_PKA_MMUL(3, 6, 3, 6, 3, 16, 3, 0, 0);\n\n  // Y2 = W*(4*B-H)-8*Y1^2*S^2\n  // PKA_MSUB(0,3, 6,3,15,3, 6,3,0);\n  Sec_Eng_PKA_MSUB(3, 6, 3, 15, 3, 6, 3, 0, 0);\n\n  // S^3\n  // PKA_MMUL(0,3, 7,3,14,3,16,3,0);\n  Sec_Eng_PKA_MMUL(3, 7, 3, 14, 3, 16, 3, 0, 0);\n\n  // Z2 = 8*S^3\n  // PKA_MMUL(1,3, 7,3,12,3, 7,3,0);\n  Sec_Eng_PKA_MMUL(3, 7, 3, 12, 3, 7, 3, 0, 1);\n\n  return SUCCESS;\n}\n#ifdef ECDSA_DBG_DETAIL\nstatic void sec_ecdsa_dump_temp_result() {\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 2, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 4);\n  MSG(\"2=\\r\\n\");\n  bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE);\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 3, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 4);\n  MSG(\"3=\\r\\n\");\n  bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE);\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 4, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 4);\n  MSG(\"4=\\r\\n\");\n  bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE);\n\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 5, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 4);\n  MSG(\"5=\\r\\n\");\n  bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE);\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 6, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 4);\n  MSG(\"6=\\r\\n\");\n  bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE);\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 7, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 4);\n  MSG(\"7=\\r\\n\");\n  bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE);\n}\n#endif\nstatic int sec_ecdsa_verify_point_mul(uint8_t id, const uint32_t *m) {\n  uint32_t i, j, k;\n  uint32_t tmp;\n  uint32_t isOne = 0;\n  uint8_t *p     = (uint8_t *)m;\n  uint8_t  pka_p1_eq_inf, pka_p2_eq_inf;\n\n  /* Remove zeros bytes*/\n  k = 0;\n\n  while (p[k] == 0 && k < 31) {\n    k++;\n  }\n\n  i = 31;\n\n  for (; i >= k; i--) {\n    tmp = p[i];\n    j   = 0;\n\n    for (j = 0; j < 8; j++) {\n      isOne = tmp & (1 << j);\n\n      if (isOne) {\n        sec_ecdsa_point_add_inf_check(&pka_p1_eq_inf, &pka_p2_eq_inf);\n\n        if (pka_p1_eq_inf == 1 && pka_p2_eq_inf == 0) {\n          // sum = X2\n          sec_ecdsa_copy_x2_to_x1(id);\n#ifdef ECDSA_DBG_DETAIL\n          MSG(\"sum = X2\\r\\n\");\n          sec_ecdsa_dump_temp_result();\n#endif\n        } else if (pka_p1_eq_inf == 0 && pka_p2_eq_inf == 1) {\n          // sum = X1\n          // MSG(\"sum = X1\\r\\n\");\n        } else if (pka_p1_eq_inf == 0 && pka_p2_eq_inf == 0) {\n          // sum = X1 + X2\n          sec_ecdsa_point_add(id);\n#ifdef ECDSA_DBG_DETAIL\n          MSG(\"sum = X1+X2\\r\\n\");\n          sec_ecdsa_dump_temp_result();\n#endif\n        } else {\n          // MSG(\"Error! infinite point + infinite point\\r\\n\");\n          return -1;\n        }\n      }\n\n      sec_ecdsa_point_double(id);\n#ifdef ECDSA_DBG_DETAIL\n      sec_ecdsa_dump_temp_result();\n#endif\n    }\n\n    if (i == 0) {\n      break;\n    }\n  }\n\n  return 0;\n}\n\n/*cal d*G if pkX(pky)==NULL\n * cal d(bG) if pkX(pky)!=NULL */\nstatic int32_t sec_ecdh_get_scalar_point(uint8_t id, const uint32_t *pkX, const uint32_t *pkY, const uint32_t *private_key, const uint32_t *pRx, const uint32_t *pRy) {\n#ifdef ECDSA_DBG\n  uint32_t pk_z[8];\n#endif\n\n  if (id >= ECP_TYPE_MAX) {\n    return ERROR;\n  }\n\n  /* Pointer check */\n  if (private_key == NULL) {\n    return -1;\n  }\n\n  Sec_Eng_PKA_Reset();\n  Sec_Eng_PKA_BigEndian_Enable();\n\n  sec_ecc_basic_parameter_init(id);\n\n  // Clear D[7]\n  // PKA_CREG(1,4, 7,0);\n  Sec_Eng_PKA_CREG(ECP_SECP256R1_LT_REG_TYPE, 7, ECP_SECP256R1_SIZE / 4, 1);\n\n  sec_ecc_point_mul_init(id);\n\n  if (id == ECP_SECP256R1) {\n    // X1\n    // PKA_CTREG(3, 2,8,bar_Zero_x);\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 2, (uint32_t *)secp256r1_Zerox, ECP_SECP256R1_SIZE / 4, 0);\n    // Y1\n    // PKA_CTREG(3, 3,8,bar_Zero_y);\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 3, (uint32_t *)secp256r1_Zeroy, ECP_SECP256R1_SIZE / 4, 0);\n  } else if (id == ECP_SECP256K1) {\n    // X1\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 2, (uint32_t *)secp256k1_Zerox, ECP_SECP256R1_SIZE / 4, 0);\n    // Y1\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 3, (uint32_t *)secp256k1_Zeroy, ECP_SECP256R1_SIZE / 4, 0);\n  }\n  // Z1\n  // PKA_CTREG(3, 4,8,bar_Zero_z);\n  // PKA_MOVDAT(1,3, 4,3, 2);\n  Sec_Eng_PKA_Move_Data(3, 4, 3, 2, 1);\n\n  if (pkX == NULL) {\n    if (id == ECP_SECP256R1) {\n      // X2\n      // PKA_CTREG(3, 5,8,bar_G_x);\n      Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 5, (uint32_t *)secp256r1_Gx, ECP_SECP256R1_SIZE / 4, 0);\n      // Y2\n      // PKA_CTREG(3, 6,8,bar_G_y);\n      Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 6, (uint32_t *)secp256r1_Gy, ECP_SECP256R1_SIZE / 4, 0);\n    } else if (id == ECP_SECP256K1) {\n      // X2\n      Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 5, (uint32_t *)secp256k1_Gx, ECP_SECP256R1_SIZE / 4, 0);\n      // Y2\n      Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 6, (uint32_t *)secp256k1_Gy, ECP_SECP256R1_SIZE / 4, 0);\n    }\n  } else {\n    /* chaneg peer's public key to mont domain*/\n    // PUB_x\n    // PKA_CTREG(3, 5,8,PUB_x);\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 5, (uint32_t *)pkX, ECP_SECP256R1_SIZE / 4, 0);\n    // bar_pub_x\n    // PKA_GF2MONT(3, 5,3, 5);\n    /* Change s to Mont domain,remember to clear temp register and index 0 is P256*/\n    /* Clear register for ECP_SECP256R1_LT_REG_INDEX*/\n    Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX - 1, ECP_SECP256R1_SIZE / 4, 1);\n    Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_SIZE / 4, 1);\n    Sec_Eng_PKA_GF2Mont(ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, 5, 256, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, 0);\n#ifdef ECDSA_DBG\n    Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 5, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 4);\n    MSG(\"PK.x in Mont:\\r\\n\");\n    bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE);\n#endif\n\n    // PUB_y\n    // PKA_CTREG(3, 6,8,PUB_y);\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 6, (uint32_t *)pkY, ECP_SECP256R1_SIZE / 4, 0);\n    // bar_pub_y\n    // PKA_GF2MONT(3, 6,3, 6);\n    Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX - 1, ECP_SECP256R1_SIZE / 4, 1);\n    Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_SIZE / 4, 1);\n    Sec_Eng_PKA_GF2Mont(ECP_SECP256R1_REG_TYPE, 6, ECP_SECP256R1_REG_TYPE, 6, 256, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, 0);\n#ifdef ECDSA_DBG\n    Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 6, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 4);\n    MSG(\"PK.y in Mont:\\r\\n\");\n    bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE);\n#endif\n  }\n\n  // Z2\n  // PKA_CTREG(3, 7,8,bar_G_z);\n  // PKA_MOVDAT(1,3, 7,3, 3);\n  Sec_Eng_PKA_Move_Data(3, 7, 3, 3, 1);\n  /* Clear temp register since it's used in point-mul*/\n  Sec_Eng_PKA_CREG(ECP_SECP256R1_LT_REG_TYPE, 7, ECP_SECP256R1_SIZE / 4, 1);\n\n  sec_ecdsa_verify_point_mul(id, private_key);\n  // get bar_u1_x\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 2, (uint32_t *)pRx, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n  MSG(\"bar_u1_x\\r\\n\");\n  bflb_platform_dump(pRx, ECP_SECP256R1_SIZE);\n#endif\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 3, (uint32_t *)pRy, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n  MSG(\"bar_u1_y\\r\\n\");\n  bflb_platform_dump(pRy, ECP_SECP256R1_SIZE);\n#endif\n#ifdef ECDSA_DBG\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 4, (uint32_t *)pk_z, ECP_SECP256R1_SIZE / 4);\n  MSG(\"bar_u1_z\\r\\n\");\n  bflb_platform_dump(pk_z, ECP_SECP256R1_SIZE);\n#endif\n\n  // get R.x\n  // R.z ^ -1\n  Sec_Eng_PKA_MINV(ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, 4, ECP_SECP256R1_REG_TYPE, 0, 1);\n  if (id == ECP_SECP256R1) {\n    // inv_r\n    // PKA_CTREG(3, 6,8,inv_r);\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 6, (uint32_t *)secp256r1InvR_P, ECP_SECP256R1_SIZE / 4, 0);\n  } else if (id == ECP_SECP256K1) {\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 6, (uint32_t *)secp256k1InvR_P, ECP_SECP256R1_SIZE / 4, 0);\n  }\n  // R.z ^ -1\n  Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX - 1, ECP_SECP256R1_SIZE / 4, 1);\n  Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_SIZE / 4, 1);\n  // PKA_MONT2GF(3, 5,3, 5,3, 6);\n  Sec_Eng_PKA_Mont2GF(ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, 6, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, 0);\n\n  // R.x (Montgomery to GF)\n  // PKA_MONT2GF(3, 6,3, 2,3, 6);\n  Sec_Eng_PKA_Mont2GF(ECP_SECP256R1_REG_TYPE, 6, ECP_SECP256R1_REG_TYPE, 2, ECP_SECP256R1_REG_TYPE, 6, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, 0);\n\n  // R.x (GF to Affine domain)\n  // PKA_MONT2GF(3, 2,3, 5,3, 6);\n  Sec_Eng_PKA_Mont2GF(ECP_SECP256R1_REG_TYPE, 2, ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, 6, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, 0);\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 2, (uint32_t *)pRx, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n  MSG(\"R.x=\\r\\n\");\n  bflb_platform_dump(pRx, ECP_SECP256R1_SIZE);\n#endif\n  if (id == ECP_SECP256R1) {\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX, (uint32_t *)secp256r1N, ECP_SECP256R1_SIZE / 4, 0);\n  } else if (id == ECP_SECP256K1) {\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX, (uint32_t *)secp256k1N, ECP_SECP256R1_SIZE / 4, 0);\n  }\n\n  Sec_Eng_PKA_MREM(ECP_SECP256R1_REG_TYPE, 2, ECP_SECP256R1_REG_TYPE, 2, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX, 1);\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 2, (uint32_t *)pRx, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n  MSG(\"R.x%n=\\r\\n\");\n  bflb_platform_dump(pRx, ECP_SECP256R1_SIZE);\n#endif\n  if (id == ECP_SECP256R1) {\n    /*after %n,re write p*/\n    Sec_Eng_PKA_Write_Data(SEC_ENG_PKA_REG_SIZE_32, 0, (uint32_t *)secp256r1P, ECP_SECP256R1_SIZE / 4, 0);\n  } else if (id == ECP_SECP256K1) {\n    Sec_Eng_PKA_Write_Data(SEC_ENG_PKA_REG_SIZE_32, 0, (uint32_t *)secp256k1P, ECP_SECP256R1_SIZE / 4, 0);\n  }\n\n  // get R.y\n  // R.z ^ -1\n  Sec_Eng_PKA_MINV(ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, 4, ECP_SECP256R1_REG_TYPE, 0, 1);\n  // inv_r\n  // PKA_CTREG(3, 6,8,inv_r);\n  if (id == ECP_SECP256R1) {\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 6, (uint32_t *)secp256r1InvR_P, ECP_SECP256R1_SIZE / 4, 0);\n  } else if (id == ECP_SECP256K1) {\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 6, (uint32_t *)secp256k1InvR_P, ECP_SECP256R1_SIZE / 4, 0);\n  }\n  // R.z ^ -1\n  Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX - 1, ECP_SECP256R1_SIZE / 4, 1);\n  Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_SIZE / 4, 1);\n  // PKA_MONT2GF(3, 5,3, 5,3, 6);\n  Sec_Eng_PKA_Mont2GF(ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, 6, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, 0);\n  // R.x (Montgomery to GF)\n  // PKA_MONT2GF(3, 6,3, 2,3, 6);\n  Sec_Eng_PKA_Mont2GF(ECP_SECP256R1_REG_TYPE, 6, ECP_SECP256R1_REG_TYPE, 3, ECP_SECP256R1_REG_TYPE, 6, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, 0);\n\n  // R.x (GF to Affine domain)\n  // PKA_MONT2GF(3, 2,3, 5,3, 6);\n  Sec_Eng_PKA_Mont2GF(ECP_SECP256R1_REG_TYPE, 3, ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, 6, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, 0);\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 3, (uint32_t *)pRy, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n  MSG(\"R.y=\\r\\n\");\n  bflb_platform_dump(pRy, ECP_SECP256R1_SIZE);\n#endif\n  if (id == ECP_SECP256R1) {\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX, (uint32_t *)secp256r1N, ECP_SECP256R1_SIZE / 4, 0);\n  } else if (id == ECP_SECP256K1) {\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX, (uint32_t *)secp256k1N, ECP_SECP256R1_SIZE / 4, 0);\n  }\n  Sec_Eng_PKA_MREM(ECP_SECP256R1_REG_TYPE, 3, ECP_SECP256R1_REG_TYPE, 3, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX, 1);\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 3, (uint32_t *)pRy, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n  MSG(\"R.y%n=\\r\\n\");\n  bflb_platform_dump(pRy, ECP_SECP256R1_SIZE);\n#endif\n  return 0;\n}\n\nstatic int32_t sec_ecc_is_zero(uint8_t *a, uint32_t len) {\n  uint32_t i = 0;\n\n  for (i = 0; i < len; i++) {\n    if (a[i] != 0) {\n      return 0;\n    }\n  }\n\n  return 1;\n}\n\nstatic int32_t sec_ecc_cmp(uint8_t *a, uint8_t *b, uint32_t len) {\n  uint32_t i = 0, j = 0;\n\n  for (i = 0; i < len; i++) {\n    if (a[i] != 0) {\n      break;\n    }\n  }\n\n  for (j = 0; j < len; j++) {\n    if (b[j] != 0) {\n      break;\n    }\n  }\n\n  if (i == len && j == len) {\n    return (0);\n  }\n\n  if (i > j) {\n    return (-1);\n  }\n\n  if (j > i) {\n    return (1);\n  }\n\n  for (; i < len; i++) {\n    if (a[i] > b[i]) {\n      return (1);\n    }\n\n    if (a[i] < b[i]) {\n      return (-1);\n    }\n  }\n\n  return 0;\n}\n\nint sec_ecdsa_init(sec_ecdsa_handle_t *handle, sec_ecp_type id) {\n  Sec_Eng_PKA_Reset();\n  Sec_Eng_PKA_BigEndian_Enable();\n  Sec_Eng_Trng_Enable();\n\n  handle->ecpId = id;\n\n  return 0;\n}\n\nint sec_ecdsa_deinit(sec_ecdsa_handle_t *handle) {\n  Sec_Eng_PKA_Reset();\n\n  return 0;\n}\n\nint sec_ecdsa_verify(sec_ecdsa_handle_t *handle, const uint32_t *hash, uint32_t hashLenInWord, const uint32_t *r, const uint32_t *s) {\n  uint32_t bar_u1_x[8];\n  uint32_t bar_u1_y[8];\n  uint32_t bar_u1_z[8];\n  uint32_t bar_u2_x[8];\n  uint32_t bar_u2_y[8];\n  uint32_t bar_u2_z[8];\n  uint32_t pka_u1[8] = {0};\n  uint32_t pka_u2[8] = {0};\n  uint32_t i         = 0;\n\n  /* Pointer check */\n  if (hash == NULL || handle->publicKeyx == NULL || handle->publicKeyy == NULL || r == NULL || s == NULL) {\n    return -1;\n  }\n\n  Sec_Eng_PKA_Reset();\n  Sec_Eng_PKA_BigEndian_Enable();\n\n  /*Step 0: make sure r and s are in range 1..n-1*/\n\n  /* r and s should not be 0*/\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, (uint32_t *)r, ECP_SECP256R1_SIZE / 4, 0);\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 8, (uint32_t *)secp256r1_1, ECP_SECP256R1_SIZE / 4, 0);\n  // cout = 1 if r = 0\n  Sec_Eng_PKA_LCMP((uint8_t *)&i, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, ECP_SECP256R1_REG_TYPE, 8); // s0 < s1 => cout = 1\n\n  if (i == 1) {\n    return -1;\n  }\n\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, (uint32_t *)s, ECP_SECP256R1_SIZE / 4, 0);\n  // cout = 1 if r = 0\n  Sec_Eng_PKA_LCMP((uint8_t *)&i, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, ECP_SECP256R1_REG_TYPE, 8); // s0 < s1 => cout = 1\n\n  if (i == 1) {\n    return -1;\n  }\n\n  sec_ecc_basic_parameter_init(handle->ecpId);\n\n  /* r and s should not be 0*/\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, (uint32_t *)r, ECP_SECP256R1_SIZE / 4, 0);\n  // cout = 1 if r < N\n  Sec_Eng_PKA_LCMP((uint8_t *)&i, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX);\n\n  if (i != 1) {\n    return -1;\n  }\n\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, (uint32_t *)s, ECP_SECP256R1_SIZE / 4, 0);\n  // cout = 1 if r < N\n  Sec_Eng_PKA_LCMP((uint8_t *)&i, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX);\n\n  if (i != 1) {\n    return -1;\n  }\n\n  /* u1 = e / s mod n, u2 = r / s mod n\n   * R = u1 G + u2 Q*/\n\n  /* Step1: Get S^-1*/\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, (uint32_t *)s, ECP_SECP256R1_SIZE / 4, 0);\n  /* Change s to Mont domain */\n  /* Clear register for ECP_SECP256R1_LT_REG_INDEX*/\n  Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX - 1, ECP_SECP256R1_SIZE / 4, 1);\n  Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_SIZE / 4, 1);\n  Sec_Eng_PKA_GF2Mont(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, 256, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX,\n                      ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX);\n#ifdef ECDSA_DBG\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 4);\n  MSG(\"GF2Mont Result of s:\\r\\n\");\n  bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE);\n#endif\n\n  /* Get S^-1 in Mont domain */\n  Sec_Eng_PKA_MINV(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_BAR_S_REG_INDEX, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX, 1);\n#ifdef ECDSA_DBG\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_BAR_S_REG_INDEX, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 4);\n  MSG(\"s^-1 in Mont:\\r\\n\");\n  bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE);\n#endif\n\n  /* Change S^-1 into GF domain,now  ECP_SECP256R1_S_REG_INDEX store s^-1*/\n  /* Clear register for ECP_SECP256R1_LT_REG_INDEX*/\n  Sec_Eng_PKA_Mont2GF(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_BAR_S_REG_INDEX, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_INVR_N_REG_INDEX,\n                      ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX);\n#ifdef ECDSA_DBG\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 4);\n  MSG(\"S^-1:\\r\\n\");\n  bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE);\n#endif\n\n  /* Step2: Get u1*/\n  // u1=hash(e)*s^-1;\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_HASH_REG_INDEX, (uint32_t *)hash, ECP_SECP256R1_SIZE / 4, 0);\n  Sec_Eng_PKA_LMUL(ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_HASH_REG_INDEX, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, 0);\n  Sec_Eng_PKA_MREM(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_U1_REG_INDEX, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX, 1);\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_U1_REG_INDEX, (uint32_t *)pka_u1, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n  MSG(\"u1:\\r\\n\");\n  bflb_platform_dump(pka_u1, ECP_SECP256R1_SIZE);\n#endif\n\n  /* Step3: Get u2*/\n  // u2=r*s^-1;\n  //  use hash and u1 temp register\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_HASH_REG_INDEX, (uint32_t *)r, ECP_SECP256R1_SIZE / 4, 0);\n  Sec_Eng_PKA_LMUL(ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_HASH_REG_INDEX, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_S_REG_INDEX, 0);\n  Sec_Eng_PKA_MREM(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_U1_REG_INDEX, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX, 1);\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_U1_REG_INDEX, (uint32_t *)pka_u2, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n  MSG(\"u2:\\r\\n\");\n  bflb_platform_dump(pka_u2, ECP_SECP256R1_SIZE);\n#endif\n\n  /* Step4: Get u1*G*/\n\n  // Clear D[7]\n  // PKA_CREG(1,4, 7,0);\n  Sec_Eng_PKA_CREG(ECP_SECP256R1_LT_REG_TYPE, 7, ECP_SECP256R1_SIZE / 4, 1);\n\n  sec_ecc_point_mul_init(handle->ecpId);\n\n  // X1\n  // PKA_CTREG(3, 2,8,bar_Zero_x);\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 2, (uint32_t *)secp256r1_Zerox, ECP_SECP256R1_SIZE / 4, 0);\n  // Y1\n  // PKA_CTREG(3, 3,8,bar_Zero_y);\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 3, (uint32_t *)secp256r1_Zeroy, ECP_SECP256R1_SIZE / 4, 0);\n  // Z1\n  // PKA_CTREG(3, 4,8,bar_Zero_z);\n  // PKA_MOVDAT(1,3, 4,3, 2);\n  Sec_Eng_PKA_Move_Data(3, 4, 3, 2, 1);\n\n  // X2\n  // PKA_CTREG(3, 5,8,bar_G_x);\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 5, (uint32_t *)secp256r1_Gx, ECP_SECP256R1_SIZE / 4, 0);\n  // Y2\n  // PKA_CTREG(3, 6,8,bar_G_y);\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 6, (uint32_t *)secp256r1_Gy, ECP_SECP256R1_SIZE / 4, 0);\n  // Z2\n  // PKA_CTREG(3, 7,8,bar_G_z);\n  // PKA_MOVDAT(1,3, 7,3, 3);\n  Sec_Eng_PKA_Move_Data(3, 7, 3, 3, 1);\n\n  sec_ecdsa_verify_point_mul(handle->ecpId, pka_u1);\n  // get bar_u1_x\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 2, (uint32_t *)bar_u1_x, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n  MSG(\"bar_u1_x\\r\\n\");\n  bflb_platform_dump(bar_u1_x, ECP_SECP256R1_SIZE);\n#endif\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 3, (uint32_t *)bar_u1_y, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n  MSG(\"bar_u1_y\\r\\n\");\n  bflb_platform_dump(bar_u1_y, ECP_SECP256R1_SIZE);\n#endif\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 4, (uint32_t *)bar_u1_z, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n  MSG(\"bar_u1_z\\r\\n\");\n  bflb_platform_dump(bar_u1_z, ECP_SECP256R1_SIZE);\n#endif\n\n  /* Step4: Get u2*Q*/\n  // X1\n  // PKA_CTREG(3, 2,8,bar_Zero_x);\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 2, (uint32_t *)secp256r1_Zerox, ECP_SECP256R1_SIZE / 4, 0);\n  // Y1\n  // PKA_CTREG(3, 3,8,bar_Zero_y);\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 3, (uint32_t *)secp256r1_Zeroy, ECP_SECP256R1_SIZE / 4, 0);\n  // Z1\n  // PKA_CTREG(3, 4,8,bar_Zero_z);\n  // PKA_MOVDAT(1,3, 4,3, 2);\n  Sec_Eng_PKA_Move_Data(3, 4, 3, 2, 1);\n\n  // PUB_x\n  // PKA_CTREG(3, 5,8,PUB_x);\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 5, (uint32_t *)handle->publicKeyx, ECP_SECP256R1_SIZE / 4, 0);\n  // bar_pub_x\n  // PKA_GF2MONT(3, 5,3, 5);\n  /* Change s to Mont domain,remember to clear temp register and index 0 is P256*/\n  /* Clear register for ECP_SECP256R1_LT_REG_INDEX*/\n  Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX - 1, ECP_SECP256R1_SIZE / 4, 1);\n  Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_SIZE / 4, 1);\n  Sec_Eng_PKA_GF2Mont(ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, 5, 256, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, 0);\n#ifdef ECDSA_DBG\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 5, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 4);\n  MSG(\"PK.x in Mont:\\r\\n\");\n  bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE);\n#endif\n\n  // PUB_y\n  // PKA_CTREG(3, 6,8,PUB_y);\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 6, (uint32_t *)handle->publicKeyy, ECP_SECP256R1_SIZE / 4, 0);\n  // bar_pub_y\n  // PKA_GF2MONT(3, 6,3, 6);\n  Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX - 1, ECP_SECP256R1_SIZE / 4, 1);\n  Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_SIZE / 4, 1);\n  Sec_Eng_PKA_GF2Mont(ECP_SECP256R1_REG_TYPE, 6, ECP_SECP256R1_REG_TYPE, 6, 256, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, 0);\n#ifdef ECDSA_DBG\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 6, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 4);\n  MSG(\"PK.y in Mont:\\r\\n\");\n  bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE);\n#endif\n\n  // bar_pub_z\n  // PKA_CTREG(3, 7,8,PUB_z);\n  // PKA_MOVDAT(1,3, 7,3, 3);\n  Sec_Eng_PKA_Move_Data(3, 7, 3, 3, 1);\n\n  /* Clear temp register since it's used in point-mul*/\n  Sec_Eng_PKA_CREG(ECP_SECP256R1_LT_REG_TYPE, 7, ECP_SECP256R1_SIZE / 4, 1);\n\n  sec_ecdsa_verify_point_mul(handle->ecpId, pka_u2);\n  // get bar_u1_x\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 2, (uint32_t *)bar_u2_x, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n  MSG(\"bar_u2_x\\r\\n\");\n  bflb_platform_dump(bar_u2_x, ECP_SECP256R1_SIZE);\n#endif\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 3, (uint32_t *)bar_u2_y, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n  MSG(\"bar_u2_y\\r\\n\");\n  bflb_platform_dump(bar_u2_y, ECP_SECP256R1_SIZE);\n#endif\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 4, (uint32_t *)bar_u2_z, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n  MSG(\"bar_u2_z\\r\\n\");\n  bflb_platform_dump(bar_u2_z, ECP_SECP256R1_SIZE);\n#endif\n\n  /* Step5: Get u1*G+u2*Q*/\n  // move bar_u2_x\n  // PKA_MOVDAT(0,3, 5,3, 2);\n  Sec_Eng_PKA_Move_Data(3, 5, 3, 2, 0);\n  // move bar_u2_y\n  // PKA_MOVDAT(0,3, 6,3, 3);\n  Sec_Eng_PKA_Move_Data(3, 6, 3, 3, 0);\n  // move bar_u2_z\n  // PKA_MOVDAT(1,3, 7,3, 4);\n  Sec_Eng_PKA_Move_Data(3, 7, 3, 4, 1);\n\n  // bar_u1_x\n  // PKA_CTREG(3, 2,8,bar_u1_x);\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 2, (uint32_t *)bar_u1_x, ECP_SECP256R1_SIZE / 4, 0);\n  // bar_u1_y\n  // PKA_CTREG(3, 3,8,bar_u1_y);\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 3, (uint32_t *)bar_u1_y, ECP_SECP256R1_SIZE / 4, 0);\n  // bar_u1_z\n  // PKA_CTREG(3, 4,8,bar_u1_z);\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 4, (uint32_t *)bar_u1_z, ECP_SECP256R1_SIZE / 4, 0);\n\n  // R = u1 * G + u2 * PUB\n  // PKA_POINT_ADDITION();\n  sec_ecdsa_point_add(handle->ecpId);\n\n  /* Step6 Get R.x(R=u1G+u2P)*/\n  // R.z ^ -1\n  // PKA_MINV(0,3, 5,3, 4,3, 0);\n  Sec_Eng_PKA_MINV(ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, 4, ECP_SECP256R1_REG_TYPE, 0, 1);\n  // inv_r\n  // PKA_CTREG(3, 6,8,inv_r);\n  Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 6, (uint32_t *)secp256r1InvR_P, ECP_SECP256R1_SIZE / 4, 0);\n  // R.z ^ -1\n  Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX - 1, ECP_SECP256R1_SIZE / 4, 1);\n  Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_SIZE / 4, 1);\n  // PKA_MONT2GF(3, 5,3, 5,3, 6);\n  Sec_Eng_PKA_Mont2GF(ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, 6, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, 0);\n\n  // R.x (Montgomery to GF)\n  // PKA_MONT2GF(3, 6,3, 2,3, 6);\n  Sec_Eng_PKA_Mont2GF(ECP_SECP256R1_REG_TYPE, 6, ECP_SECP256R1_REG_TYPE, 2, ECP_SECP256R1_REG_TYPE, 6, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, 0);\n\n  // R.x (GF to Affine domain)\n  // PKA_MONT2GF(3, 2,3, 5,3, 6);\n  Sec_Eng_PKA_Mont2GF(ECP_SECP256R1_REG_TYPE, 2, ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, 6, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, 0);\n  Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 2, (uint32_t *)bar_u2_x, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n  MSG(\"R.x=\\r\\n\");\n  bflb_platform_dump(bar_u2_x, ECP_SECP256R1_SIZE);\n#endif\n\n  /* Step7 check R.x=r*/\n  /* Check Result */\n  for (i = 0; i < 8; i++) {\n    if (bar_u2_x[i] != r[i]) {\n      return -1;\n    }\n  }\n\n#ifdef ECDSA_DBG\n  MSG(\"Verify success\\r\\n\");\n#endif\n  return 0;\n}\n\nint sec_ecdsa_sign(sec_ecdsa_handle_t *handle, const uint32_t *random_k, const uint32_t *hash, uint32_t hashLenInWord, uint32_t *r, uint32_t *s) {\n  uint32_t k[8];\n  uint32_t Rx[8];\n  uint32_t Ry[8];\n  uint32_t KInvert[8];\n  uint32_t maxTry1 = 100;\n\n  /* Pointer check */\n  if (handle->privateKey == NULL || hash == NULL || r == NULL || s == NULL) {\n    return -1;\n  }\n\n  Sec_Eng_PKA_Reset();\n  Sec_Eng_PKA_BigEndian_Enable();\n  Sec_Eng_Trng_Enable();\n\n  while (maxTry1--) {\n    /* step 1 ,get random k*/\n    if (random_k == NULL) {\n      if (sec_ecc_get_random_value(k, (uint32_t *)secp256r1N, 32) < 0) {\n        return -1;\n      }\n    } else {\n      memcpy(k, random_k, 32);\n    }\n\n#ifdef ECDSA_DBG\n    MSG(\"Random k:\\r\\n\");\n    bflb_platform_dump(k, ECP_SECP256R1_SIZE);\n#endif\n\n    /*step 2, calc R=kG*/\n    if (sec_ecdsa_get_public_key(handle, k, Rx, Ry) < 0) {\n      return -1;\n    }\n\n    if (sec_ecc_is_zero((uint8_t *)Rx, 32)) {\n      continue;\n    }\n\n    memcpy(r, Rx, 32);\n#ifdef ECDSA_DBG\n    MSG(\"r:\\r\\n\");\n    bflb_platform_dump(r, ECP_SECP256R1_SIZE);\n#endif\n    sec_ecc_basic_parameter_init(handle->ecpId);\n    /* step 3,get k^-1*/\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 5, (uint32_t *)k, ECP_SECP256R1_SIZE / 4, 0);\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX, (uint32_t *)secp256r1N, ECP_SECP256R1_SIZE / 4, 0);\n    /* Change k to Mont domain */\n    /* Clear register for ECP_SECP256R1_LT_REG_INDEX*/\n    Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX - 1, ECP_SECP256R1_SIZE / 4, 1);\n    Sec_Eng_PKA_CREG(ECP_SECP256R1_REG_TYPE, 2 * ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_SIZE / 4, 1);\n    Sec_Eng_PKA_GF2Mont(ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, 5, 256, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX);\n#ifdef ECDSA_DBG\n    Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 5, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 4);\n    MSG(\"GF2Mont Result of k:\\r\\n\");\n    bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE);\n#endif\n\n    /* Get k^-1 in Mont domain */\n    Sec_Eng_PKA_MINV(ECP_SECP256R1_REG_TYPE, 6, ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX, 1);\n#ifdef ECDSA_DBG\n    Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 6, (uint32_t *)KInvert, ECP_SECP256R1_SIZE / 4);\n    MSG(\"k^-1 in Mont:\\r\\n\");\n    bflb_platform_dump(KInvert, ECP_SECP256R1_SIZE);\n#endif\n\n    /* Change k^-1 into GF domain,now  ECP_SECP256R1_S_REG_INDEX store k^-1*/\n    /* Clear register for ECP_SECP256R1_LT_REG_INDEX*/\n    Sec_Eng_PKA_Mont2GF(ECP_SECP256R1_REG_TYPE, 5, ECP_SECP256R1_REG_TYPE, 6, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_INVR_N_REG_INDEX, ECP_SECP256R1_LT_REG_TYPE, ECP_SECP256R1_LT_REG_INDEX,\n                        ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX);\n    Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 5, (uint32_t *)KInvert, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n    MSG(\"k^-1:\\r\\n\");\n    bflb_platform_dump(KInvert, ECP_SECP256R1_SIZE);\n#endif\n\n    /* Step 4,r*d     ((e + r * d) / k) */\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 4, (uint32_t *)handle->privateKey, ECP_SECP256R1_SIZE / 4, 0);\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 5, (uint32_t *)r, ECP_SECP256R1_SIZE / 4, 0);\n    Sec_Eng_PKA_LMUL(ECP_SECP256R1_SLT_REG_TYPE, ECP_SECP256R1_SLT_REG_INDEX, ECP_SECP256R1_REG_TYPE, 4, ECP_SECP256R1_REG_TYPE, 5, 1);\n#ifdef ECDSA_DBG\n    Sec_Eng_PKA_Read_Data(ECP_SECP256R1_SLT_REG_TYPE, ECP_SECP256R1_SLT_REG_INDEX, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 2);\n    MSG(\"r*d:\\r\\n\");\n    bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE * 2);\n#endif\n\n    /* Step 5,e+r*d   ((e + r * d) / k) */\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 5, (uint32_t *)hash, ECP_SECP256R1_SIZE / 4, 0);\n    Sec_Eng_PKA_LADD(ECP_SECP256R1_SLT_REG_TYPE, ECP_SECP256R1_SLT_REG_INDEX, ECP_SECP256R1_SLT_REG_TYPE, ECP_SECP256R1_SLT_REG_INDEX, ECP_SECP256R1_REG_TYPE, 5, 1);\n#ifdef ECDSA_DBG\n    Sec_Eng_PKA_Read_Data(ECP_SECP256R1_SLT_REG_TYPE, ECP_SECP256R1_SLT_REG_INDEX, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 2);\n    MSG(\"e+r*d:\\r\\n\");\n    bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE * 2);\n#endif\n\n    /* Step 6,(e+r*d)*k^-1   ((e + r * d) / k) */\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, 5, (uint32_t *)KInvert, ECP_SECP256R1_SIZE / 4, 0);\n    Sec_Eng_PKA_LMUL(ECP_SECP256R1_SLT_REG_TYPE, ECP_SECP256R1_SLT_REG_INDEX, ECP_SECP256R1_SLT_REG_TYPE, ECP_SECP256R1_SLT_REG_INDEX, ECP_SECP256R1_REG_TYPE, 5, 1);\n#ifdef ECDSA_DBG\n    Sec_Eng_PKA_Read_Data(ECP_SECP256R1_SLT_REG_TYPE, ECP_SECP256R1_SLT_REG_INDEX, (uint32_t *)pka_tmp, ECP_SECP256R1_SIZE / 2);\n    MSG(\"(e+r*d)*k^-1:\\r\\n\");\n    bflb_platform_dump(pka_tmp, ECP_SECP256R1_SIZE * 2);\n#endif\n    /*N write only this time,add following operation will not change this register*/\n    Sec_Eng_PKA_Write_Data(ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX, (uint32_t *)secp256r1N, ECP_SECP256R1_SIZE / 4, 0);\n    Sec_Eng_PKA_MREM(ECP_SECP256R1_REG_TYPE, 4, ECP_SECP256R1_SLT_REG_TYPE, ECP_SECP256R1_SLT_REG_INDEX, ECP_SECP256R1_REG_TYPE, ECP_SECP256R1_N_REG_INDEX, 1);\n    Sec_Eng_PKA_Read_Data(ECP_SECP256R1_REG_TYPE, 4, (uint32_t *)s, ECP_SECP256R1_SIZE / 4);\n#ifdef ECDSA_DBG\n    MSG(\"s:\\r\\n\");\n    bflb_platform_dump(s, ECP_SECP256R1_SIZE);\n#endif\n\n    /* Check s zero*/\n    if (sec_ecc_is_zero((uint8_t *)s, 32)) {\n      continue;\n    }\n\n    return 0;\n  }\n\n  return -1;\n}\n\nint sec_ecdsa_get_private_key(sec_ecdsa_handle_t *handle, uint32_t *private_key) {\n  if (sec_ecc_get_random_value(private_key, (uint32_t *)secp256r1N, 32) < 0) {\n    return -1;\n  }\n\n  return 0;\n}\n\nint sec_ecdsa_get_public_key(sec_ecdsa_handle_t *handle, const uint32_t *private_key, const uint32_t *pRx, const uint32_t *pRy) {\n  return sec_ecdh_get_scalar_point(handle->ecpId, NULL, NULL, private_key, pRx, pRy);\n}\n\nint sec_ecc_get_random_value(uint32_t *randomData, uint32_t *maxRef, uint32_t size) {\n  uint32_t maxTry = 100;\n  int32_t  ret    = 0;\n\n  while (maxTry--) {\n    ret = Sec_Eng_Trng_Get_Random((uint8_t *)randomData, size);\n\n    if (ret < 0) {\n      return -1;\n    }\n\n    if (maxRef != NULL) {\n      if (sec_ecc_cmp((uint8_t *)maxRef, (uint8_t *)randomData, size) > 0) {\n        return 0;\n      }\n    } else {\n      return 0;\n    }\n  }\n\n  return -1;\n}\n\nint sec_eng_trng_enable(void) { return Sec_Eng_Trng_Enable(); }\n\nvoid sec_eng_trng_disable(void) { Sec_Eng_Trng_Disable(); }\n\nint sec_eng_trng_read(uint8_t data[32]) { return Sec_Eng_Trng_Read(data); }\n\nint sec_ecdh_init(sec_ecdh_handle_t *handle, sec_ecp_type id) {\n  Sec_Eng_PKA_Reset();\n  Sec_Eng_PKA_BigEndian_Enable();\n  Sec_Eng_Trng_Enable();\n\n  handle->ecpId = id;\n\n  return 0;\n}\n\nint sec_ecdh_deinit(sec_ecdh_handle_t *handle) {\n  Sec_Eng_PKA_Reset();\n\n  return 0;\n}\n\nint sec_ecdh_get_encrypt_key(sec_ecdh_handle_t *handle, const uint32_t *pkX, const uint32_t *pkY, const uint32_t *private_key, const uint32_t *pRx, const uint32_t *pRy) {\n  return sec_ecdh_get_scalar_point(handle->ecpId, pkX, pkY, private_key, pRx, pRy);\n}\n\nint sec_ecdh_get_public_key(sec_ecdh_handle_t *handle, const uint32_t *private_key, const uint32_t *pRx, const uint32_t *pRy) {\n  return sec_ecdh_get_scalar_point(handle->ecpId, NULL, NULL, private_key, pRx, pRy);\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_sec_hash.c",
    "content": "/**\n * @file hal_sec_hash.c\n * @brief\n *\n * Copyright 2019-2030 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#include \"hal_sec_hash.h\"\n#include \"bl702_sec_eng.h\"\n\nvoid SEC_SHA_IRQHandler(void);\n\nstatic sec_hash_device_t sec_hashx_device[SEC_HASH_MAX_INDEX] = {0};\n\nstatic SEC_Eng_SHA256_Ctx shaCtx;\n\nstatic SEC_Eng_SHA256_Ctx sha256Ctx;\n\n/**\n * @brief\n *\n * @param dev\n * @param oflag\n * @return int\n */\nint sec_hash_open(struct device *dev, uint16_t oflag) {\n  sec_hash_device_t *sec_hash_device = (sec_hash_device_t *)dev;\n  int                ret             = 0;\n\n  switch (sec_hash_device->type) {\n  case SEC_HASH_SHA1:\n    ret = -1;\n    break;\n\n  case SEC_HASH_SHA224:\n    Sec_Eng_SHA256_Init(&shaCtx, SEC_ENG_SHA_ID0, SEC_ENG_SHA224, sec_hash_device->shaBuf, sec_hash_device->shaPadding);\n    Sec_Eng_SHA_Start(SEC_ENG_SHA_ID0);\n    break;\n\n  case SEC_HASH_SHA256:\n    Sec_Eng_SHA256_Init(&shaCtx, SEC_ENG_SHA_ID0, SEC_ENG_SHA256, sec_hash_device->shaBuf, sec_hash_device->shaPadding);\n    Sec_Eng_SHA_Start(SEC_ENG_SHA_ID0);\n    break;\n\n  case SEC_HASH_SHA384:\n  case SEC_HASH_SHA512:\n    ret = -1;\n    break;\n\n  default:\n    ret = -1;\n    break;\n  }\n\n  return ret;\n}\n/**\n * @brief\n *\n * @param dev\n * @return int\n */\nint sec_hash_close(struct device *dev) {\n  // sec_hash_device_t *sec_hash_device = (sec_hash_device_t *)dev;\n  // memset(sec_hash_device, 0, sizeof(sec_hash_device_t)); //will cause crash\n  return 0;\n}\n/**\n * @brief\n *\n * @param dev\n * @param cmd\n * @param args\n * @return int\n */\nint sec_hash_control(struct device *dev, int cmd, void *args) { return 0; }\n\n/**\n * @brief\n *\n * @param dev\n * @param pos\n * @param buffer\n * @param size\n * @return int\n */\nint sec_hash_write(struct device *dev, uint32_t pos, const void *buffer, uint32_t size) {\n  sec_hash_device_t *sec_hash_device = (sec_hash_device_t *)dev;\n  int                ret             = 0;\n\n  switch (sec_hash_device->type) {\n  case SEC_HASH_SHA1:\n    ret = -1;\n    break;\n\n  case SEC_HASH_SHA224:\n    Sec_Eng_SHA256_Update(&shaCtx, SEC_ENG_SHA_ID0, (uint8_t *)buffer, size);\n    break;\n\n  case SEC_HASH_SHA256:\n    Sec_Eng_SHA256_Update(&shaCtx, SEC_ENG_SHA_ID0, (uint8_t *)buffer, size);\n    break;\n\n  case SEC_HASH_SHA384:\n  case SEC_HASH_SHA512:\n    ret = -1;\n    break;\n\n  default:\n    ret = -1;\n    break;\n  }\n\n  return ret;\n}\n\n/**\n * @brief\n *\n * @param dev\n * @param pos\n * @param buffer\n * @param size\n * @return int\n */\nint sec_hash_read(struct device *dev, uint32_t pos, void *buffer, uint32_t size) {\n  sec_hash_device_t *sec_hash_device = (sec_hash_device_t *)dev;\n  int                ret             = 0;\n\n  switch (sec_hash_device->type) {\n  case SEC_HASH_SHA1:\n    ret = -1;\n    break;\n\n  case SEC_HASH_SHA224:\n    Sec_Eng_SHA256_Finish(&shaCtx, SEC_ENG_SHA_ID0, (uint8_t *)buffer);\n    ret = 28;\n    break;\n\n  case SEC_HASH_SHA256:\n    Sec_Eng_SHA256_Finish(&shaCtx, SEC_ENG_SHA_ID0, (uint8_t *)buffer);\n    ret = 32;\n    break;\n\n  case SEC_HASH_SHA384:\n  case SEC_HASH_SHA512:\n    ret = -1;\n    break;\n\n  default:\n    ret = -1;\n    break;\n  }\n\n  return ret;\n}\n\n/**\n * @brief\n *\n * @param handle\n * @param type\n * @return int\n */\nint sec_hash_init(sec_hash_handle_t *handle, uint8_t type) {\n  int ret = 0;\n\n  switch (type) {\n  case SEC_HASH_SHA1:\n    ret = -1;\n    break;\n\n  case SEC_HASH_SHA224:\n    handle->type = type;\n    Sec_Eng_SHA256_Init(&sha256Ctx, SEC_ENG_SHA_ID0, SEC_ENG_SHA224, handle->shaBuf, handle->shaPadding);\n    Sec_Eng_SHA_Start(SEC_ENG_SHA_ID0);\n    break;\n\n  case SEC_HASH_SHA256:\n    handle->type = type;\n    Sec_Eng_SHA256_Init(&sha256Ctx, SEC_ENG_SHA_ID0, SEC_ENG_SHA256, handle->shaBuf, handle->shaPadding);\n    Sec_Eng_SHA_Start(SEC_ENG_SHA_ID0);\n    break;\n\n  case SEC_HASH_SHA384:\n  case SEC_HASH_SHA512:\n    ret = -1;\n    break;\n\n  default:\n    ret = -1;\n    break;\n  }\n\n  return ret;\n}\n/**\n * @brief\n *\n * @param handle\n * @return int\n */\nint sec_hash_deinit(sec_hash_handle_t *handle) {\n  memset(handle->shaBuf, 0, sizeof(handle->shaBuf));\n  memset(handle->shaPadding, 0, sizeof(handle->shaPadding));\n\n  return 0;\n}\n\n/**\n * @brief\n *\n * @param handle\n * @param buffer\n * @param size\n * @return int\n */\nint sec_hash_update(sec_hash_handle_t *handle, const void *buffer, uint32_t size) {\n  int ret = 0;\n\n  switch (handle->type) {\n  case SEC_HASH_SHA1:\n    ret = -1;\n    break;\n\n  case SEC_HASH_SHA224:\n    Sec_Eng_SHA256_Update(&sha256Ctx, SEC_ENG_SHA_ID0, (uint8_t *)buffer, size);\n    break;\n\n  case SEC_HASH_SHA256:\n    Sec_Eng_SHA256_Update(&sha256Ctx, SEC_ENG_SHA_ID0, (uint8_t *)buffer, size);\n    break;\n\n  case SEC_HASH_SHA384:\n  case SEC_HASH_SHA512:\n    ret = -1;\n    break;\n\n  default:\n    ret = -1;\n    break;\n  }\n\n  return ret;\n}\n\n/**\n * @brief\n *\n * @param handle\n * @param buffer\n * @return int\n */\nint sec_hash_finish(sec_hash_handle_t *handle, void *buffer) {\n  int ret = 0;\n\n  switch (handle->type) {\n  case SEC_HASH_SHA1:\n    ret = -1;\n    break;\n\n  case SEC_HASH_SHA224:\n    Sec_Eng_SHA256_Finish(&sha256Ctx, SEC_ENG_SHA_ID0, (uint8_t *)buffer);\n    ret = 28;\n    break;\n\n  case SEC_HASH_SHA256:\n    Sec_Eng_SHA256_Finish(&sha256Ctx, SEC_ENG_SHA_ID0, (uint8_t *)buffer);\n    ret = 32;\n    break;\n\n  case SEC_HASH_SHA384:\n  case SEC_HASH_SHA512:\n    ret = -1;\n    break;\n\n  default:\n    ret = -1;\n    break;\n  }\n\n  return ret;\n}\n\n/**\n * @brief\n *\n * @param index\n * @param type\n * @param name\n * @param flag\n * @return int\n */\nstatic int sec_hash_sha_register(enum sec_hash_index_type index, enum sec_hash_type type, const char *name) {\n  struct device *dev;\n\n  if (SEC_HASH_MAX_INDEX == 0) {\n    return -DEVICE_EINVAL;\n  }\n\n  dev                          = &(sec_hashx_device[index].parent);\n  sec_hashx_device[index].type = type;\n\n  dev->open    = sec_hash_open;\n  dev->close   = sec_hash_close;\n  dev->control = sec_hash_control;\n  dev->write   = sec_hash_write;\n  dev->read    = sec_hash_read;\n\n  dev->type   = DEVICE_CLASS_SEC_HASH;\n  dev->handle = NULL;\n\n  return device_register(dev, name);\n}\n\n/**\n * @brief\n *\n * @param index\n * @param name\n * @param flag\n * @return int\n */\nint sec_hash_sha256_register(enum sec_hash_index_type index, const char *name) { return sec_hash_sha_register(index, SEC_HASH_SHA256, name); }\n\n/**\n * @brief\n *\n * @param index\n * @param name\n * @param flag\n * @return int\n */\nint sec_hash_sha224_register(enum sec_hash_index_type index, const char *name) { return sec_hash_sha_register(index, SEC_HASH_SHA224, name); }\n\n/**\n * @brief\n *\n * @param handle\n */\nvoid sec_hash_isr(void) {}\n\n/**\n * @brief\n *\n */\nvoid SEC_SHA_IRQ(void) { sec_hash_isr(); }"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_uart.c",
    "content": "/**\n * @file hal_uart.c\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#include \"hal_uart.h\"\n#include \"bl702_glb.h\"\n#include \"bl702_uart.h\"\n#include \"hal_clock.h\"\n#include \"hal_dma.h\"\n#include \"uart_config.h\"\n\n#ifdef BSP_USING_UART0\nstatic void UART0_IRQ(void);\n#endif\n#ifdef BSP_USING_UART1\nstatic void UART1_IRQ(void);\n#endif\n\nstatic uart_device_t uartx_device[UART_MAX_INDEX] = {\n#ifdef BSP_USING_UART0\n    UART0_CONFIG,\n#endif\n#ifdef BSP_USING_UART1\n    UART1_CONFIG,\n#endif\n};\n/**\n * @brief\n *\n * @param dev\n * @param oflag\n * @return int\n */\nint uart_open(struct device *dev, uint16_t oflag) {\n  uart_device_t    *uart_device = (uart_device_t *)dev;\n  UART_FifoCfg_Type fifoCfg     = {0};\n  UART_CFG_Type     uart_cfg    = {0};\n\n  /* disable all interrupt */\n  UART_IntMask(uart_device->id, UART_INT_ALL, MASK);\n  /* disable uart before config */\n  UART_Disable(uart_device->id, UART_TXRX);\n\n  uint32_t uart_clk           = peripheral_clock_get(PERIPHERAL_CLOCK_UART);\n  uart_cfg.baudRate           = uart_device->baudrate;\n  uart_cfg.dataBits           = uart_device->databits;\n  uart_cfg.stopBits           = uart_device->stopbits;\n  uart_cfg.parity             = uart_device->parity;\n  uart_cfg.uartClk            = uart_clk;\n  uart_cfg.ctsFlowControl     = UART_CTS_FLOWCONTROL_ENABLE;\n  uart_cfg.rtsSoftwareControl = UART_RTS_FLOWCONTROL_ENABLE;\n  uart_cfg.byteBitInverse     = UART_MSB_FIRST_ENABLE;\n  uart_cfg.txSoftwareControl  = UART_TX_SWCONTROL_ENABLE;\n  uart_cfg.txLinMode          = UART_TX_LINMODE_ENABLE;\n  uart_cfg.rxLinMode          = UART_RX_LINMODE_ENABLE;\n  uart_cfg.txBreakBitCnt      = UART_TX_BREAKBIT_CNT;\n  uart_cfg.rxDeglitch         = ENABLE;\n\n  /* uart init with default configuration */\n  UART_Init(uart_device->id, &uart_cfg);\n\n  /* Enable tx free run mode */\n  UART_TxFreeRun(uart_device->id, ENABLE);\n  /*set de-glitch function cycle count value*/\n  UART_SetDeglitchCount(uart_device->id, 2);\n\n  /* Set rx time-out value */\n  UART_SetRxTimeoutValue(uart_device->id, UART_DEFAULT_RTO_TIMEOUT);\n\n  fifoCfg.txFifoDmaThreshold = uart_device->fifo_threshold;\n  fifoCfg.txFifoDmaEnable    = DISABLE;\n  fifoCfg.rxFifoDmaThreshold = uart_device->fifo_threshold;\n  fifoCfg.rxFifoDmaEnable    = DISABLE;\n\n  if (oflag & DEVICE_OFLAG_STREAM_TX) {\n  }\n  if ((oflag & DEVICE_OFLAG_INT_TX) || (oflag & DEVICE_OFLAG_INT_RX)) {\n#ifdef BSP_USING_UART0\n    if (uart_device->id == UART0_ID) {\n      Interrupt_Handler_Register(UART0_IRQn, UART0_IRQ);\n    }\n#endif\n#ifdef BSP_USING_UART1\n    if (uart_device->id == UART1_ID) {\n      Interrupt_Handler_Register(UART1_IRQn, UART1_IRQ);\n    }\n#endif\n  }\n  if (oflag & DEVICE_OFLAG_DMA_TX) {\n    fifoCfg.txFifoDmaEnable = ENABLE;\n  }\n  if (oflag & DEVICE_OFLAG_DMA_RX) {\n    fifoCfg.rxFifoDmaEnable = ENABLE;\n  }\n\n  UART_FifoConfig(uart_device->id, &fifoCfg);\n  /* enable uart */\n  UART_Enable(uart_device->id, UART_TXRX);\n  return 0;\n}\n/**\n * @brief\n *\n * @param dev\n * @return int\n */\nint uart_close(struct device *dev) {\n  uart_device_t *uart_device = (uart_device_t *)dev;\n\n  UART_Disable(uart_device->id, UART_TXRX);\n  if (uart_device->id == 0) {\n    GLB_AHB_Slave1_Reset(BL_AHB_SLAVE1_UART0);\n  } else if (uart_device->id == 1) {\n    GLB_AHB_Slave1_Reset(BL_AHB_SLAVE1_UART1);\n  }\n  return 0;\n}\n/**\n * @brief\n *\n * @param dev\n * @param cmd\n * @param args\n * @return int\n */\nint uart_control(struct device *dev, int cmd, void *args) {\n  uart_device_t *uart_device = (uart_device_t *)dev;\n\n  switch (cmd) {\n  case DEVICE_CTRL_SET_INT /* constant-expression */: {\n    uint32_t offset = __builtin_ctz((uint32_t)args);\n    while (offset < 9) {\n      if ((uint32_t)args & (1 << offset)) {\n        UART_IntMask(uart_device->id, offset, UNMASK);\n      }\n      offset++;\n    }\n    if (uart_device->id == UART0_ID) {\n      CPU_Interrupt_Enable(UART0_IRQn);\n    } else if (uart_device->id == UART1_ID) {\n      CPU_Interrupt_Enable(UART1_IRQn);\n    }\n\n    break;\n  }\n  case DEVICE_CTRL_CLR_INT /* constant-expression */: {\n    uint32_t offset = __builtin_ctz((uint32_t)args);\n    while (offset < 9) {\n      if ((uint32_t)args & (1 << offset)) {\n        UART_IntMask(uart_device->id, offset, MASK);\n      }\n      offset++;\n    }\n    if (uart_device->id == UART0_ID) {\n      CPU_Interrupt_Disable(UART0_IRQn);\n    } else if (uart_device->id == UART1_ID) {\n      CPU_Interrupt_Disable(UART1_IRQn);\n    }\n\n    break;\n  }\n  case DEVICE_CTRL_GET_INT /* constant-expression */:\n    /* code */\n    break;\n  case DEVICE_CTRL_RESUME /* constant-expression */:\n    UART_Enable(uart_device->id, UART_TXRX);\n    break;\n  case DEVICE_CTRL_SUSPEND /* constant-expression */:\n    UART_Disable(uart_device->id, UART_TXRX);\n    break;\n  case DEVICE_CTRL_CONFIG /* constant-expression */: {\n    uart_param_cfg_t *cfg = (uart_param_cfg_t *)args;\n    UART_CFG_Type     uart_cfg;\n\n    uint32_t uart_clk = peripheral_clock_get(PERIPHERAL_CLOCK_UART);\n\n    uart_cfg.uartClk            = uart_clk;\n    uart_cfg.baudRate           = cfg->baudrate;\n    uart_cfg.stopBits           = cfg->stopbits;\n    uart_cfg.parity             = cfg->parity;\n    uart_cfg.dataBits           = cfg->databits;\n    uart_cfg.ctsFlowControl     = UART_CTS_FLOWCONTROL_ENABLE;\n    uart_cfg.rtsSoftwareControl = UART_RTS_FLOWCONTROL_ENABLE;\n    uart_cfg.byteBitInverse     = UART_MSB_FIRST_ENABLE;\n    uart_cfg.txSoftwareControl  = UART_TX_SWCONTROL_ENABLE;\n    uart_cfg.txLinMode          = UART_TX_LINMODE_ENABLE;\n    uart_cfg.rxLinMode          = UART_RX_LINMODE_ENABLE;\n    uart_cfg.txBreakBitCnt      = UART_TX_BREAKBIT_CNT;\n    uart_cfg.rxDeglitch         = ENABLE;\n    UART_Init(uart_device->id, &uart_cfg);\n    /*set de-glitch function cycle count value*/\n    UART_SetDeglitchCount(uart_device->id, 2);\n    break;\n  }\n  case DEVICE_CTRL_GET_CONFIG /* constant-expression */:\n    break;\n  case DEVICE_CTRL_ATTACH_TX_DMA /* constant-expression */:\n    uart_device->tx_dma = (struct device *)args;\n    break;\n  case DEVICE_CTRL_ATTACH_RX_DMA /* constant-expression */:\n    uart_device->rx_dma = (struct device *)args;\n    break;\n  case DEVICE_CTRL_TX_DMA_SUSPEND: {\n    uint32_t tmpVal = BL_RD_REG(UART0_BASE + uart_device->id * 0x100, UART_FIFO_CONFIG_0);\n    tmpVal          = BL_CLR_REG_BIT(tmpVal, UART_DMA_TX_EN);\n    BL_WR_REG(UART0_BASE + uart_device->id * 0x100, UART_FIFO_CONFIG_0, tmpVal);\n    dev->oflag &= ~DEVICE_OFLAG_DMA_TX;\n    break;\n  }\n  case DEVICE_CTRL_RX_DMA_SUSPEND: {\n    uint32_t tmpVal = BL_RD_REG(UART0_BASE + uart_device->id * 0x100, UART_FIFO_CONFIG_0);\n    tmpVal          = BL_CLR_REG_BIT(tmpVal, UART_DMA_RX_EN);\n    BL_WR_REG(UART0_BASE + uart_device->id * 0x100, UART_FIFO_CONFIG_0, tmpVal);\n    dev->oflag &= ~DEVICE_OFLAG_DMA_RX;\n    break;\n  }\n  case DEVICE_CTRL_TX_DMA_RESUME: {\n    uint32_t tmpVal = BL_RD_REG(UART0_BASE + uart_device->id * 0x100, UART_FIFO_CONFIG_0);\n    tmpVal          = BL_SET_REG_BIT(tmpVal, UART_DMA_TX_EN);\n    BL_WR_REG(UART0_BASE + uart_device->id * 0x100, UART_FIFO_CONFIG_0, tmpVal);\n    dev->oflag |= DEVICE_OFLAG_DMA_TX;\n    break;\n  }\n  case DEVICE_CTRL_RX_DMA_RESUME: {\n    uint32_t tmpVal = BL_RD_REG(UART0_BASE + uart_device->id * 0x100, UART_FIFO_CONFIG_0);\n    tmpVal          = BL_SET_REG_BIT(tmpVal, UART_DMA_RX_EN);\n    BL_WR_REG(UART0_BASE + uart_device->id * 0x100, UART_FIFO_CONFIG_0, tmpVal);\n    dev->oflag |= DEVICE_OFLAG_DMA_RX;\n    break;\n  }\n  case DEVICE_CTRL_UART_GET_TX_FIFO /* constant-expression */:\n    return UART_GetTxFifoCount(uart_device->id);\n  case DEVICE_CTRL_UART_GET_RX_FIFO /* constant-expression */:\n    return UART_GetRxFifoCount(uart_device->id);\n  case DEVICE_CTRL_UART_CLEAR_TX_FIFO /* constant-expression */:\n    return UART_TxFifoClear(uart_device->id);\n  case DEVICE_CTRL_UART_CLEAR_RX_FIFO /* constant-expression */:\n    return UART_RxFifoClear(uart_device->id);\n  default:\n    break;\n  }\n\n  return 0;\n}\n/**\n * @brief\n *\n * @param dev\n * @param pos\n * @param buffer\n * @param size\n * @return int\n */\nint uart_write(struct device *dev, uint32_t pos, const void *buffer, uint32_t size) {\n  int            ret         = 0;\n  uart_device_t *uart_device = (uart_device_t *)dev;\n  if (dev->oflag & DEVICE_OFLAG_DMA_TX) {\n    struct device *dma_ch = (struct device *)uart_device->tx_dma;\n    if (!dma_ch) {\n      return -1;\n    }\n\n    if (uart_device->id == 0) {\n      ret = dma_reload(dma_ch, (uint32_t)buffer, (uint32_t)DMA_ADDR_UART0_TDR, size);\n      dma_channel_start(dma_ch);\n    } else if (uart_device->id == 1) {\n      ret = dma_reload(dma_ch, (uint32_t)buffer, (uint32_t)DMA_ADDR_UART1_TDR, size);\n      dma_channel_start(dma_ch);\n    }\n    return ret;\n  } else if (dev->oflag & DEVICE_OFLAG_INT_TX) {\n    return -2;\n  } else {\n    return UART_SendData(uart_device->id, (uint8_t *)buffer, size);\n  }\n}\n/**\n * @brief\n *\n * @param dev\n * @param pos\n * @param buffer\n * @param size\n * @return int\n */\nint uart_read(struct device *dev, uint32_t pos, void *buffer, uint32_t size) {\n  int            ret         = -1;\n  uart_device_t *uart_device = (uart_device_t *)dev;\n  if (dev->oflag & DEVICE_OFLAG_DMA_RX) {\n    struct device *dma_ch = (struct device *)uart_device->rx_dma;\n    if (!dma_ch) {\n      return -1;\n    }\n\n    if (uart_device->id == 0) {\n      ret = dma_reload(dma_ch, (uint32_t)DMA_ADDR_UART0_RDR, (uint32_t)buffer, size);\n      dma_channel_start(dma_ch);\n    } else if (uart_device->id == 1) {\n      ret = dma_reload(dma_ch, (uint32_t)DMA_ADDR_UART1_RDR, (uint32_t)buffer, size);\n      dma_channel_start(dma_ch);\n    }\n    return ret;\n  } else if (dev->oflag & DEVICE_OFLAG_INT_RX) {\n    return -2;\n  } else {\n    return UART_ReceiveData(uart_device->id, (uint8_t *)buffer, size);\n  }\n}\n/**\n * @brief\n *\n * @param index\n * @param name\n * @param flag\n * @return int\n */\nint uart_register(enum uart_index_type index, const char *name) {\n  struct device *dev;\n\n  if (UART_MAX_INDEX == 0) {\n    return -DEVICE_EINVAL;\n  }\n\n  dev = &(uartx_device[index].parent);\n\n  dev->open    = uart_open;\n  dev->close   = uart_close;\n  dev->control = uart_control;\n  dev->write   = uart_write;\n  dev->read    = uart_read;\n\n  dev->type   = DEVICE_CLASS_UART;\n  dev->handle = NULL;\n\n  return device_register(dev, name);\n}\n/**\n * @brief\n *\n * @param handle\n */\nvoid uart_isr(uart_device_t *handle) {\n  uint32_t tmpVal  = 0;\n  uint32_t maskVal = 0;\n  uint32_t UARTx   = (UART0_BASE + handle->id * 0x100);\n\n  tmpVal  = BL_RD_REG(UARTx, UART_INT_STS);\n  maskVal = BL_RD_REG(UARTx, UART_INT_MASK);\n\n  if (!handle->parent.callback) {\n    return;\n  }\n\n  /* Length of uart tx data transfer arrived interrupt */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_UTX_END_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_UTX_END_MASK)) {\n    BL_WR_REG(UARTx, UART_INT_CLEAR, 0x1);\n    handle->parent.callback(&handle->parent, NULL, 0, UART_EVENT_TX_END);\n  }\n\n  /* Length of uart rx data transfer arrived interrupt */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_URX_END_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_URX_END_MASK)) {\n    BL_WR_REG(UARTx, UART_INT_CLEAR, 0x2);\n    handle->parent.callback(&handle->parent, NULL, 0, UART_EVENT_RX_END);\n  }\n\n  /* Tx fifo ready interrupt,auto-cleared when data is pushed */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_UTX_FIFO_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_UTX_FIFO_MASK)) {\n    handle->parent.callback(&handle->parent, NULL, 0, UART_EVENT_TX_FIFO);\n  }\n\n  /* Rx fifo ready interrupt,auto-cleared when data is popped */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_URX_FIFO_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_URX_FIFO_MASK)) {\n    uint8_t buffer[UART_FIFO_MAX_LEN];\n    uint8_t len = UART_ReceiveData(handle->id, buffer, UART_FIFO_MAX_LEN);\n    if (len) {\n      handle->parent.callback(&handle->parent, &buffer[0], len, UART_EVENT_RX_FIFO);\n    }\n  }\n\n  /* Rx time-out interrupt */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_URX_RTO_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_URX_RTO_MASK)) {\n    BL_WR_REG(UARTx, UART_INT_CLEAR, 0x10);\n    uint8_t buffer[UART_FIFO_MAX_LEN];\n    uint8_t len = UART_ReceiveData(handle->id, buffer, UART_FIFO_MAX_LEN);\n    if (len) {\n      handle->parent.callback(&handle->parent, &buffer[0], len, UART_EVENT_RTO);\n    }\n  }\n\n  /* Rx parity check error interrupt */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_URX_PCE_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_URX_PCE_MASK)) {\n    BL_WR_REG(UARTx, UART_INT_CLEAR, 0x20);\n    handle->parent.callback(&handle->parent, NULL, 0, UART_EVENT_PCE);\n  }\n\n  /* Tx fifo overflow/underflow error interrupt */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_UTX_FER_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_UTX_FER_MASK)) {\n    handle->parent.callback(&handle->parent, NULL, 0, UART_EVENT_TX_FER);\n  }\n\n  /* Rx fifo overflow/underflow error interrupt */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_URX_FER_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_URX_FER_MASK)) {\n    handle->parent.callback(&handle->parent, NULL, 0, UART_EVENT_RX_FER);\n  }\n}\n\n#ifdef BSP_USING_UART0\n/**\n * @brief\n *\n */\nvoid UART0_IRQ(void) { uart_isr(&uartx_device[UART0_INDEX]); }\n#endif\n#ifdef BSP_USING_UART1\n/**\n * @brief\n *\n */\nvoid UART1_IRQ(void) { uart_isr(&uartx_device[UART1_INDEX]); }\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_usb.c",
    "content": "/**\r\n * @file hal_usb.c\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n#include \"hal_usb.h\"\r\n#include \"bl702_dma.h\"\r\n#include \"bl702_glb.h\"\r\n#include \"bl702_usb.h\"\r\n#include \"hal_dma.h\"\r\n#include \"hal_mtimer.h\"\r\n\r\n#define USE_INTERNAL_TRANSCEIVER\r\n// #define ENABLE_LPM_INT\r\n// #define ENABLE_SOF3MS_INT\r\n// #define ENABLE_ERROR_INT\r\n\r\n#define MIN(a, b) (((a) < (b)) ? (a) : (b))\r\n\r\n#define USB_DC_LOG_WRN(a, ...) // bflb_platform_printf(a, ##__VA_ARGS__)\r\n#define USB_DC_LOG_DBG(a, ...)\r\n#define USB_DC_LOG_ERR(a, ...) // bflb_platform_printf(a, ##__VA_ARGS__)\r\n#define USB_DC_LOG(a, ...)\r\n\r\nstatic usb_dc_device_t usb_fs_device;\r\nstatic void            USB_FS_IRQ(void);\r\n\r\nstatic dma_lli_ctrl_t usb_lli_list = {.src_addr              = 0,\r\n                                      .dst_addr              = 0,\r\n                                      .nextlli               = 0,\r\n                                      .cfg.bits.fix_cnt      = 0,\r\n                                      .cfg.bits.dst_min_mode = 0,\r\n                                      .cfg.bits.dst_add_mode = 0,\r\n                                      .cfg.bits.SI           = 0,\r\n                                      .cfg.bits.DI           = 0,\r\n                                      .cfg.bits.SWidth       = DMA_TRANSFER_WIDTH_8BIT,\r\n                                      .cfg.bits.DWidth       = DMA_TRANSFER_WIDTH_8BIT,\r\n                                      .cfg.bits.SBSize       = 0,\r\n                                      .cfg.bits.DBSize       = 0,\r\n                                      .cfg.bits.I            = 0,\r\n                                      .cfg.bits.TransferSize = 0};\r\n\r\nstatic void usb_set_power_up(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_PU_USB);\r\n  BL_WR_REG(GLB_BASE, GLB_USB_XCVR, tmpVal);\r\n}\r\n\r\nstatic void usb_set_power_off(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_PU_USB);\r\n  BL_WR_REG(GLB_BASE, GLB_USB_XCVR, tmpVal);\r\n}\r\n\r\nstatic uint8_t usb_ep_is_enabled(uint8_t ep) {\r\n  uint8_t ep_idx = USB_EP_GET_IDX(ep);\r\n\r\n  /* Check if ep enabled */\r\n  if ((USB_EP_DIR_IS_OUT(ep)) && usb_fs_device.out_ep[ep_idx].ep_ena) {\r\n    return 1;\r\n  } else if ((USB_EP_DIR_IS_IN(ep)) && usb_fs_device.in_ep[ep_idx].ep_ena) {\r\n    return 1;\r\n  }\r\n\r\n  return 0;\r\n}\r\n\r\nstatic void usb_xcvr_config(BL_Fun_Type NewState) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (NewState != DISABLE) {\r\n#if defined(USE_EXTERNAL_TRANSCEIVER)\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_USB_USE_XCVR, 0); // use external tranceiver\r\n    BL_WR_REG(GLB_BASE, GLB_USB_XCVR_CONFIG, tmpVal);\r\n#elif defined(USE_INTERNAL_TRANSCEIVER)\r\n#if 1\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_PU_USB, 1);\r\n    BL_WR_REG(GLB_BASE, GLB_USB_XCVR, tmpVal);\r\n\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_SUS, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_SPD, 1); // 0 for 1.1 ls,1 for 1.1 fs\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_DATA_CONVERT, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_OEB_SEL, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_ROUT_PMOS, 3);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_ROUT_NMOS, 3);\r\n    BL_WR_REG(GLB_BASE, GLB_USB_XCVR, tmpVal);\r\n\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_SLEWRATE_P_RISE, 2); // 1 for 1.1 ls\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_SLEWRATE_P_FALL, 2); // 1 for 1.1 ls\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_SLEWRATE_M_RISE, 2); // 1 for 1.1 ls\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_SLEWRATE_M_FALL, 2); // 1 for 1.1 ls\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_RES_PULLUP_TUNE, 5);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_USB_USE_XCVR, 1);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_BD_VTH, 1);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_V_HYS_P, 2);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_V_HYS_M, 2);\r\n    BL_WR_REG(GLB_BASE, GLB_USB_XCVR_CONFIG, tmpVal);\r\n\r\n    ///* force BD=1, not use */\r\n    // tmpVal=BL_RD_REG(GLB_BASE,GLB_USB_XCVR);\r\n    // tmpVal=BL_SET_REG_BIT(tmpVal,GLB_PU_USB_LDO);\r\n    // BL_WR_REG(GLB_BASE,GLB_USB_XCVR,tmpVal);\r\n\r\n    /* BD_voltage_thresdhold=2.8V */\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_BD_VTH, 7);\r\n    BL_WR_REG(GLB_BASE, GLB_USB_XCVR_CONFIG, tmpVal);\r\n\r\n#else\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_PU_USB, 1);\r\n    BL_WR_REG(GLB_BASE, GLB_USB_XCVR, tmpVal);\r\n\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_SUS, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_SPD, 0); // 0 for 1.1 ls,1 for 1.1 fs\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_DATA_CONVERT, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_OEB_SEL, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_ROUT_PMOS, 3);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_ROUT_NMOS, 3);\r\n    BL_WR_REG(GLB_BASE, GLB_USB_XCVR, tmpVal);\r\n\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_SLEWRATE_P_RISE, 1); // 4 for 1.1 fs\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_SLEWRATE_P_FALL, 1); // 3 for 1.1 fs\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_SLEWRATE_M_RISE, 1); // 4 for 1.1 fs\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_SLEWRATE_M_FALL, 1); // 3 for 1.1 fs\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_RES_PULLUP_TUNE, 5);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_USB_USE_XCVR, 1);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_BD_VTH, 1);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_V_HYS_P, 2);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_V_HYS_M, 2);\r\n    BL_WR_REG(GLB_BASE, GLB_USB_XCVR_CONFIG, tmpVal);\r\n#endif\r\n\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_ENUM, 1);\r\n    BL_WR_REG(GLB_BASE, GLB_USB_XCVR, tmpVal);\r\n#endif\r\n  } else {\r\n#ifdef USE_INTERNAL_TRANSCEIVER\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_ENUM, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_PU_USB, 0);\r\n    BL_WR_REG(GLB_BASE, GLB_USB_XCVR, tmpVal);\r\n\r\n    ///* force BD=1, not use */\r\n    // tmpVal=BL_RD_REG(GLB_BASE,GLB_USB_XCVR);\r\n    // tmpVal=BL_SET_REG_BIT(tmpVal,GLB_PU_USB_LDO);\r\n    // BL_WR_REG(GLB_BASE,GLB_USB_XCVR,tmpVal);\r\n\r\n    /* BD_voltage_thresdhold=2.8V */\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_BD_VTH, 7);\r\n    BL_WR_REG(GLB_BASE, GLB_USB_XCVR_CONFIG, tmpVal);\r\n\r\n#else\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_USB_USE_XCVR, 1); // use internal tranceiver\r\n    BL_WR_REG(GLB_BASE, GLB_USB_XCVR_CONFIG, tmpVal);\r\n\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_ENUM, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_PU_USB, 1);\r\n    BL_WR_REG(GLB_BASE, GLB_USB_XCVR, tmpVal);\r\n#endif\r\n  }\r\n}\r\n\r\n/**\r\n * @brief\r\n *\r\n * @param dev\r\n * @param oflag\r\n * @return int\r\n */\r\nint usb_open(struct device *dev, uint16_t oflag) {\r\n  USB_Config_Type usbCfg = {0};\r\n\r\n  usb_set_power_off();\r\n  mtimer_delay_ms(10);\r\n  usb_set_power_up();\r\n\r\n  usb_xcvr_config(DISABLE);\r\n  usb_xcvr_config(ENABLE);\r\n\r\n  CPU_Interrupt_Disable(USB_IRQn);\r\n\r\n  usbCfg.DeviceAddress         = 0;\r\n  usbCfg.EnumInEn              = ENABLE;\r\n  usbCfg.EnumOutEn             = ENABLE;\r\n  usbCfg.RomBaseDescriptorUsed = 0;\r\n  usbCfg.SoftwareCtrl          = 1;\r\n  usbCfg.EnumMaxPacketSize     = USB_CTRL_EP_MPS;\r\n\r\n  /* Init Device */\r\n  USB_Set_Config(DISABLE, &usbCfg);\r\n\r\n  usb_fs_device.out_ep[0].ep_ena         = 1U;\r\n  usb_fs_device.in_ep[0].ep_ena          = 1U;\r\n  usb_fs_device.out_ep[0].ep_cfg.ep_mps  = USB_CTRL_EP_MPS;\r\n  usb_fs_device.out_ep[0].ep_cfg.ep_type = USBD_EP_TYPE_CTRL;\r\n  usb_fs_device.in_ep[0].ep_cfg.ep_mps   = USB_CTRL_EP_MPS;\r\n  usb_fs_device.in_ep[0].ep_cfg.ep_type  = USBD_EP_TYPE_CTRL;\r\n\r\n  /* USB interrupt enable config */\r\n  BL_WR_REG(USB_BASE, USB_INT_EN, 0);\r\n  USB_IntEn(USB_INT_RESET, ENABLE);          // 1\r\n  USB_IntEn(USB_INT_EP0_SETUP_DONE, ENABLE); // 5\r\n  USB_IntEn(USB_INT_EP0_IN_DONE, ENABLE);    // 7\r\n  USB_IntEn(USB_INT_EP0_OUT_DONE, ENABLE);   // 9\r\n  USB_IntEn(USB_INT_RESET_END, ENABLE);      // 27\r\n\r\n  /* USB interrupt mask config */\r\n  BL_WR_REG(USB_BASE, USB_INT_MASK, 0xffffffff);\r\n  USB_IntMask(USB_INT_RESET, UNMASK);          // 1\r\n  USB_IntMask(USB_INT_EP0_SETUP_DONE, UNMASK); // 5\r\n  USB_IntMask(USB_INT_EP0_IN_DONE, UNMASK);    // 7\r\n  USB_IntMask(USB_INT_EP0_OUT_DONE, UNMASK);   // 9\r\n  USB_IntMask(USB_INT_RESET_END, UNMASK);      // 27\r\n\r\n#ifdef ENABLE_LPM_INT\r\n  USB_IntEn(USB_INT_LPM_PACKET, ENABLE);\r\n  USB_IntEn(USB_INT_LPM_WAKEUP, ENABLE);\r\n  USB_IntMask(USB_INT_LPM_PACKET, UNMASK);\r\n  USB_IntMask(USB_INT_LPM_WAKEUP, UNMASK);\r\n\r\n  USB_LPM_Enable();\r\n  USB_Set_LPM_Default_Response(USB_LPM_DEFAULT_RESP_ACK);\r\n\r\n#endif\r\n\r\n#ifdef ENABLE_SOF3MS_INT\r\n  /* disable sof3ms until reset_end */\r\n  USB_IntEn(USB_INT_LOST_SOF_3_TIMES, DISABLE);\r\n  USB_IntMask(USB_INT_LOST_SOF_3_TIMES, MASK);\r\n\r\n  /* recommended enable sof3ms after reset_end */\r\n  USB_IntEn(USB_INT_LOST_SOF_3_TIMES, ENABLE);\r\n  USB_IntMask(USB_INT_LOST_SOF_3_TIMES, UNMASK);\r\n#endif\r\n\r\n#ifdef ENABLE_ERROR_INT\r\n  USB_IntEn(USB_INT_ERROR, ENABLE);\r\n  USB_IntMask(USB_INT_ERROR, UNMASK);\r\n#endif\r\n  /*Clear pending interrupts*/\r\n  USB_Clr_IntStatus(USB_INT_ALL);\r\n\r\n  Interrupt_Handler_Register(USB_IRQn, USB_FS_IRQ);\r\n  CPU_Interrupt_Enable(USB_IRQn);\r\n  USB_Enable();\r\n\r\n  return 0;\r\n}\r\n/**\r\n * @brief\r\n *\r\n * @param dev\r\n * @return int\r\n */\r\nint usb_close(struct device *dev) {\r\n  /* disable all interrupts and force USB reset */\r\n  CPU_Interrupt_Disable(USB_IRQn);\r\n  USB_IntMask(USB_INT_LPM_WAKEUP, MASK);\r\n  USB_IntMask(USB_INT_LPM_PACKET, MASK);\r\n\r\n  USB_Disable();\r\n\r\n  /* clear interrupt status register */\r\n  USB_Clr_IntStatus(USB_INT_ALL);\r\n\r\n  usb_set_power_off();\r\n\r\n  usb_xcvr_config(DISABLE);\r\n  GLB_AHB_Slave1_Reset(BL_AHB_SLAVE1_USB);\r\n  return 0;\r\n}\r\n/**\r\n * @brief\r\n *\r\n * @param dev\r\n * @param cmd\r\n * @param args\r\n * @return int\r\n */\r\nint usb_control(struct device *dev, int cmd, void *args) {\r\n  struct usb_dc_device *usb_device = (struct usb_dc_device *)dev;\r\n\r\n  switch (cmd) {\r\n  case DEVICE_CTRL_SET_INT /* constant-expression */: {\r\n    uint32_t offset = __builtin_ctz((uint32_t)args);\r\n\r\n    while (offset < 24) {\r\n      if ((uint32_t)args & (1 << offset)) {\r\n        USB_IntEn(offset, ENABLE);\r\n        USB_IntMask(offset, UNMASK);\r\n      }\r\n\r\n      offset++;\r\n    }\r\n    break;\r\n  }\r\n  case DEVICE_CTRL_CLR_INT /* constant-expression */: {\r\n    uint32_t offset = __builtin_ctz((uint32_t)args);\r\n\r\n    while (offset < 24) {\r\n      if ((uint32_t)args & (1 << offset)) {\r\n        USB_IntEn(offset, DISABLE);\r\n        USB_IntMask(offset, MASK);\r\n      }\r\n\r\n      offset++;\r\n    }\r\n    break;\r\n  }\r\n  case DEVICE_CTRL_USB_DC_SET_ACK /* constant-expression */:\r\n    USB_Set_EPx_Status(USB_EP_GET_IDX(((uint32_t)args) & 0x7f), USB_EP_STATUS_ACK);\r\n    return 0;\r\n  case DEVICE_CTRL_USB_DC_ENUM_ON: {\r\n    uint32_t tmpVal;\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_ENUM, 1);\r\n    BL_WR_REG(GLB_BASE, GLB_USB_XCVR, tmpVal);\r\n    return 0;\r\n  }\r\n  case DEVICE_CTRL_USB_DC_ENUM_OFF: {\r\n    uint32_t tmpVal;\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_ENUM, 0);\r\n    BL_WR_REG(GLB_BASE, GLB_USB_XCVR, tmpVal);\r\n    return 0;\r\n  }\r\n  case DEVICE_CTRL_USB_DC_GET_EP_TX_FIFO_CNT:\r\n    return USB_Get_EPx_TX_FIFO_CNT(((uint32_t)args) & 0x7f);\r\n\r\n  case DEVICE_CTRL_USB_DC_GET_EP_RX_FIFO_CNT:\r\n    return USB_Get_EPx_RX_FIFO_CNT(((uint32_t)args) & 0x7f);\r\n  case DEVICE_CTRL_ATTACH_TX_DMA /* constant-expression */:\r\n    usb_device->tx_dma = (struct device *)args;\r\n    break;\r\n\r\n  case DEVICE_CTRL_ATTACH_RX_DMA /* constant-expression */:\r\n    usb_device->rx_dma = (struct device *)args;\r\n    break;\r\n\r\n  case DEVICE_CTRL_USB_DC_SET_TX_DMA /* constant-expression */:\r\n    USB_Set_EPx_TX_DMA_Interface_Config(((uint32_t)args) & 0x7f, ENABLE);\r\n    break;\r\n\r\n  case DEVICE_CTRL_USB_DC_SET_RX_DMA /* constant-expression */:\r\n    USB_Set_EPx_RX_DMA_Interface_Config(((uint32_t)args) & 0x7f, ENABLE);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return 0;\r\n}\r\n\r\nint usb_write(struct device *dev, uint32_t pos, const void *buffer, uint32_t size) {\r\n  struct usb_dc_device *usb_device = (struct usb_dc_device *)dev;\r\n  uint8_t               ep_idx     = USB_EP_GET_IDX(pos);\r\n\r\n  if (usb_device->in_ep[ep_idx].ep_cfg.ep_type == USBD_EP_TYPE_ISOC) {\r\n    uint32_t usb_ep_addr = USB_BASE + 0x308 + ep_idx * 0x10;\r\n\r\n    dma_channel_stop(usb_device->tx_dma);\r\n    usb_lli_list.src_addr              = (uint32_t)buffer;\r\n    usb_lli_list.dst_addr              = usb_ep_addr;\r\n    usb_lli_list.cfg.bits.TransferSize = size;\r\n    usb_lli_list.cfg.bits.DI           = 0;\r\n    usb_lli_list.cfg.bits.SI           = 1;\r\n    usb_lli_list.cfg.bits.SBSize       = DMA_BURST_SIZE_16;\r\n    usb_lli_list.cfg.bits.DBSize       = DMA_BURST_SIZE_1;\r\n    dma_channel_update(usb_device->tx_dma, (void *)((uint32_t)&usb_lli_list));\r\n    dma_channel_start(usb_device->tx_dma);\r\n    return 0;\r\n  } else {\r\n  }\r\n\r\n  return -1;\r\n}\r\n\r\nint usb_read(struct device *dev, uint32_t pos, void *buffer, uint32_t size) {\r\n  struct usb_dc_device *usb_device = (struct usb_dc_device *)dev;\r\n  uint8_t               ep_idx     = USB_EP_GET_IDX(pos);\r\n\r\n  if (usb_device->out_ep[ep_idx].ep_cfg.ep_type == USBD_EP_TYPE_ISOC) {\r\n    uint32_t usb_ep_addr = USB_BASE + 0x308 + ep_idx * 0x1c;\r\n\r\n    dma_channel_stop(usb_device->tx_dma);\r\n    usb_lli_list.src_addr              = usb_ep_addr;\r\n    usb_lli_list.dst_addr              = (uint32_t)buffer;\r\n    usb_lli_list.cfg.bits.TransferSize = size;\r\n    usb_lli_list.cfg.bits.DI           = 1;\r\n    usb_lli_list.cfg.bits.SI           = 0;\r\n    usb_lli_list.cfg.bits.SBSize       = DMA_BURST_SIZE_1;\r\n    usb_lli_list.cfg.bits.DBSize       = DMA_BURST_SIZE_16;\r\n    dma_channel_update(usb_device->rx_dma, (void *)((uint32_t)&usb_lli_list));\r\n    dma_channel_start(usb_device->rx_dma);\r\n    return 0;\r\n  } else {\r\n  }\r\n\r\n  return -1;\r\n}\r\n\r\n/**\r\n * @brief\r\n *\r\n * @param index\r\n * @param name\r\n * @param flag\r\n * @return int\r\n */\r\nint usb_dc_register(enum usb_index_type index, const char *name) {\r\n  struct device *dev;\r\n\r\n  if (USB_MAX_INDEX == 0) {\r\n    return -DEVICE_EINVAL;\r\n  }\r\n\r\n  dev = &(usb_fs_device.parent);\r\n\r\n  dev->open    = usb_open;\r\n  dev->close   = usb_close;\r\n  dev->control = usb_control;\r\n  dev->write   = usb_write;\r\n  dev->read    = usb_read;\r\n\r\n  dev->type   = DEVICE_CLASS_USB;\r\n  dev->handle = NULL;\r\n\r\n  return device_register(dev, name);\r\n}\r\n\r\n/**\r\n * @brief Set USB device address\r\n *\r\n * @param[in] addr Device address\r\n *\r\n * @return 0 on success, negative errno code on fail.\r\n */\r\nint usb_dc_set_dev_address(const uint8_t addr) {\r\n  USB_Set_Device_Addr(addr);\r\n  return 0;\r\n}\r\n\r\n/**\r\n * @brief configure and enable endpoint\r\n * This function sets endpoint configuration according to one specified in USB\r\n * endpoint descriptor and then enables it for data transfers.\r\n *\r\n * @param dev\r\n * @param ep_cfg  ep_cfg Endpoint\r\n * @return int\r\n */\r\nint usb_dc_ep_open(struct device *dev, const struct usb_dc_ep_cfg *ep_cfg) {\r\n  uint8_t        ep;\r\n  EP_Config_Type epCfg;\r\n\r\n  if (!ep_cfg) {\r\n    return -1;\r\n  }\r\n\r\n  ep = ep_cfg->ep_addr;\r\n\r\n  uint8_t ep_idx = USB_EP_GET_IDX(ep);\r\n\r\n  USB_DC_LOG_DBG(\"%s ep %x, mps %d, type %d\\r\\n\", __func__, ep, ep_cfg->ep_mps, ep_cfg->ep_type);\r\n\r\n  if (ep_idx == 0) {\r\n    return 0;\r\n  }\r\n\r\n  if (USB_EP_DIR_IS_OUT(ep)) {\r\n    epCfg.dir                                   = EP_OUT;\r\n    epCfg.EPMaxPacketSize                       = ep_cfg->ep_mps;\r\n    usb_fs_device.out_ep[ep_idx].ep_cfg.ep_mps  = ep_cfg->ep_mps;\r\n    usb_fs_device.out_ep[ep_idx].ep_cfg.ep_type = ep_cfg->ep_type;\r\n  } else {\r\n    epCfg.dir                                  = EP_IN;\r\n    epCfg.EPMaxPacketSize                      = ep_cfg->ep_mps;\r\n    usb_fs_device.in_ep[ep_idx].ep_cfg.ep_mps  = ep_cfg->ep_mps;\r\n    usb_fs_device.in_ep[ep_idx].ep_cfg.ep_type = ep_cfg->ep_type;\r\n  }\r\n\r\n  switch (ep_cfg->ep_type) {\r\n  case USBD_EP_TYPE_CTRL:\r\n    epCfg.type = USB_DC_EP_TYPE_CTRL;\r\n    break;\r\n\r\n  case USBD_EP_TYPE_ISOC:\r\n    epCfg.type = USB_DC_EP_TYPE_ISOC;\r\n    break;\r\n\r\n  case USBD_EP_TYPE_BULK:\r\n    epCfg.type = USB_DC_EP_TYPE_BULK;\r\n    break;\r\n\r\n  case USBD_EP_TYPE_INTR:\r\n    epCfg.type = USB_DC_EP_TYPE_INTR;\r\n    break;\r\n\r\n  default:\r\n    return -1;\r\n  }\r\n\r\n  USB_Set_EPx_Config(ep_idx, &epCfg);\r\n\r\n  if (USB_EP_DIR_IS_OUT(ep)) {\r\n    /* Clear NAK and enable ep */\r\n    USB_Set_EPx_Status(USB_EP_GET_IDX(ep), USB_EP_STATUS_ACK);\r\n    usb_fs_device.out_ep[ep_idx].ep_ena = 1U;\r\n  } else {\r\n    // USB_Set_EPx_Status(USB_EP_GET_IDX(ep), USB_EP_STATUS_ACK);\r\n    USB_Set_EPx_Status(USB_EP_GET_IDX(ep), USB_EP_STATUS_NACK);\r\n    usb_fs_device.in_ep[ep_idx].ep_ena = 1U;\r\n  }\r\n\r\n  return 0;\r\n}\r\n\r\nint usb_dc_ep_close(const uint8_t ep) { return 0; }\r\n\r\n/**\r\n * @brief Set stall condition for the selected endpoint\r\n *\r\n * @param[in] ep Endpoint address corresponding to the one\r\n *               listed in the device configuration table\r\n *\r\n * @return 0 on success, negative errno code on fail.\r\n */\r\nint usb_dc_ep_set_stall(const uint8_t ep) {\r\n  uint32_t tmpVal = 0;\r\n  uint8_t  ep_idx = USB_EP_GET_IDX(ep);\r\n\r\n  if (USB_EP_DIR_IS_OUT(ep)) {\r\n    usb_fs_device.out_ep[ep_idx].is_stalled = 1U;\r\n  } else {\r\n    usb_fs_device.in_ep[ep_idx].is_stalled = 1U;\r\n  }\r\n\r\n  switch (ep_idx) {\r\n  case 0:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_STALL);\r\n    BL_WR_REG(USB_BASE, USB_CONFIG, tmpVal);\r\n    break;\r\n  case 1:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP1_STALL);\r\n    BL_WR_REG(USB_BASE, USB_EP1_CONFIG, tmpVal);\r\n    break;\r\n  case 2:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP2_STALL);\r\n    BL_WR_REG(USB_BASE, USB_EP2_CONFIG, tmpVal);\r\n    break;\r\n  case 3:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP3_STALL);\r\n    BL_WR_REG(USB_BASE, USB_EP3_CONFIG, tmpVal);\r\n    break;\r\n  case 4:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP4_STALL);\r\n    BL_WR_REG(USB_BASE, USB_EP4_CONFIG, tmpVal);\r\n    break;\r\n  case 5:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP5_STALL);\r\n    BL_WR_REG(USB_BASE, USB_EP5_CONFIG, tmpVal);\r\n    break;\r\n  case 6:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP6_STALL);\r\n    BL_WR_REG(USB_BASE, USB_EP6_CONFIG, tmpVal);\r\n    break;\r\n  case 7:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP7_STALL);\r\n    BL_WR_REG(USB_BASE, USB_EP7_CONFIG, tmpVal);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n  return 0;\r\n}\r\n/**\r\n * @brief Clear stall condition for the selected endpoint\r\n *\r\n * @param[in] ep Endpoint address corresponding to the one\r\n *               listed in the device configuration table\r\n *\r\n * @return 0 on success, negative errno code on fail.\r\n */\r\nint usb_dc_ep_clear_stall(const uint8_t ep) {\r\n  uint8_t  ep_idx = USB_EP_GET_IDX(ep);\r\n  uint32_t tmpVal = 0;\r\n  if (USB_EP_DIR_IS_OUT(ep)) {\r\n    usb_fs_device.out_ep[ep_idx].is_stalled = 0;\r\n  } else {\r\n    usb_fs_device.in_ep[ep_idx].is_stalled = 0;\r\n  }\r\n  switch (ep_idx) {\r\n  case 0:\r\n    break;\r\n  case 1:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP1_RDY);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP1_NACK);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP1_STALL);\r\n    BL_WR_REG(USB_BASE, USB_EP1_CONFIG, tmpVal);\r\n    break;\r\n  case 2:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP2_RDY);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP2_NACK);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP2_STALL);\r\n    BL_WR_REG(USB_BASE, USB_EP2_CONFIG, tmpVal);\r\n    break;\r\n  case 3:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP3_RDY);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP3_NACK);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP3_STALL);\r\n    BL_WR_REG(USB_BASE, USB_EP3_CONFIG, tmpVal);\r\n    break;\r\n  case 4:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP4_RDY);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP4_NACK);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP4_STALL);\r\n    BL_WR_REG(USB_BASE, USB_EP4_CONFIG, tmpVal);\r\n    break;\r\n  case 5:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP5_RDY);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP5_NACK);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP5_STALL);\r\n    BL_WR_REG(USB_BASE, USB_EP5_CONFIG, tmpVal);\r\n    break;\r\n  case 6:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP6_RDY);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP6_NACK);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP6_STALL);\r\n    BL_WR_REG(USB_BASE, USB_EP6_CONFIG, tmpVal);\r\n    break;\r\n  case 7:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP7_RDY);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP7_NACK);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP7_STALL);\r\n    BL_WR_REG(USB_BASE, USB_EP7_CONFIG, tmpVal);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n  return 0;\r\n}\r\n\r\n/**\r\n * @brief Check if the selected endpoint is stalled\r\n *\r\n * @param dev usb device\r\n * @param[in]  ep       Endpoint address corresponding to the one\r\n *                      listed in the device configuration table\r\n * @param[out] stalled  Endpoint stall status\r\n *\r\n * @return 0 on success, negative errno code on fail.\r\n */\r\nint usb_dc_ep_is_stalled(struct device *dev, const uint8_t ep, uint8_t *stalled) {\r\n  uint8_t ep_idx = USB_EP_GET_IDX(ep);\r\n\r\n  if (!stalled) {\r\n    return -1;\r\n  }\r\n\r\n  *stalled = 0U;\r\n\r\n  if (USB_EP_DIR_IS_OUT(ep)) {\r\n    if ((USB_Get_EPx_Status(ep_idx) & USB_EP_STATUS_STALL) && usb_fs_device.out_ep[ep_idx].is_stalled) {\r\n      *stalled = 1U;\r\n    }\r\n  } else {\r\n    if ((USB_Get_EPx_Status(ep_idx) & USB_EP_STATUS_STALL) && usb_fs_device.in_ep[ep_idx].is_stalled) {\r\n      *stalled = 1U;\r\n    }\r\n  }\r\n\r\n  return 0;\r\n}\r\n\r\n/**\r\n * @brief Write data to the specified endpoint\r\n *\r\n * This function is called to write data to the specified endpoint. The\r\n * supplied usbd_endpoint_callback function will be called when data is transmitted\r\n * out.\r\n *\r\n * @param dev\r\n * @param[in]  ep        Endpoint address corresponding to the one\r\n *                       listed in the device configuration table\r\n * @param[in]  data      Pointer to data to write\r\n * @param[in]  data_len  Length of the data requested to write. This may\r\n *                       be zero for a zero length status packet.\r\n * @param[out] ret_bytes Bytes scheduled for transmission. This value\r\n *                       may be NULL if the application expects all\r\n *                       bytes to be written\r\n *\r\n * @return 0 on success, negative errno code on fail.\r\n */\r\nint usb_dc_ep_write(struct device *dev, const uint8_t ep, const uint8_t *data, uint32_t data_len, uint32_t *ret_bytes) {\r\n  uint8_t  ep_idx;\r\n  uint32_t timeout = 0x00FFFFFF;\r\n  uint32_t ep_tx_fifo_addr;\r\n\r\n  ep_idx = USB_EP_GET_IDX(ep);\r\n\r\n  /* Check if IN ep */\r\n  if (USB_EP_GET_DIR(ep) != USB_EP_DIR_IN) {\r\n    return -USB_DC_EP_DIR_ERR;\r\n  }\r\n\r\n  /* Check if ep enabled */\r\n  if (!usb_ep_is_enabled(ep)) {\r\n    return -USB_DC_EP_EN_ERR;\r\n  }\r\n\r\n  if (!data && data_len) {\r\n    USB_DC_LOG_ERR(\"data is null\\r\\n\");\r\n    return -USB_DC_ADDR_ERR;\r\n  }\r\n\r\n  /* Check if ep free */\r\n  while (!USB_Is_EPx_RDY_Free(ep_idx) && (usb_fs_device.in_ep[ep_idx].ep_cfg.ep_type != USBD_EP_TYPE_ISOC)) {\r\n    timeout--;\r\n\r\n    if (!timeout) {\r\n      USB_DC_LOG_ERR(\"ep%d wait free timeout\\r\\n\", ep);\r\n      return -USB_DC_EP_TIMEOUT_ERR;\r\n    }\r\n  }\r\n\r\n  if (!data_len) {\r\n    /* Zero length packet */\r\n    if ((USB_EP_GET_IDX(ep) != 0)) {\r\n      /* Clear NAK and enable ep */\r\n      USB_Set_EPx_Rdy(USB_EP_GET_IDX(ep));\r\n      return USB_DC_OK;\r\n    }\r\n    return USB_DC_OK;\r\n  }\r\n\r\n  if (data_len > usb_fs_device.in_ep[ep_idx].ep_cfg.ep_mps) {\r\n    /* Check if transfer len is too big */\r\n    data_len = usb_fs_device.in_ep[ep_idx].ep_cfg.ep_mps;\r\n  }\r\n\r\n  /* Wait for FIFO space available */\r\n  do {\r\n    uint32_t avail_space = USB_Get_EPx_TX_FIFO_CNT(ep_idx);\r\n\r\n    if (avail_space >= usb_fs_device.in_ep[ep_idx].ep_cfg.ep_mps) {\r\n      break;\r\n    }\r\n\r\n    // USB_DC_LOG_ERR(\"EP%d have remain data\\r\\n\", ep_idx);\r\n  } while (1);\r\n\r\n  /*\r\n   * Write data to FIFO, make sure that we are protected against\r\n   * other USB register accesses.  According to \"DesignWare Cores\r\n   * USB 1.1/2.0 Device Subsystem-AHB/VCI Databook\": \"During FIFO\r\n   * access, the application must not access the UDC/Subsystem\r\n   * registers or vendor registers (for ULPI mode). After starting\r\n   * to access a FIFO, the application must complete the transaction\r\n   * before accessing the register.\"\r\n   */\r\n  ep_tx_fifo_addr = USB_BASE + USB_EP0_TX_FIFO_WDATA_OFFSET + ep_idx * 0x10;\r\n\r\n  if ((data_len == 1) && (ep_idx == 0)) {\r\n    USB_Set_EPx_Xfer_Size(EP_ID0, 1);\r\n  } else if (ep_idx == 0) {\r\n    USB_Set_EPx_Xfer_Size(EP_ID0, 64);\r\n  }\r\n\r\n  memcopy_to_fifo((void *)ep_tx_fifo_addr, (uint8_t *)data, data_len);\r\n  /* Clear NAK and enable ep */\r\n  if (USB_EP_GET_IDX(ep) != 0)\r\n    USB_Set_EPx_Rdy(USB_EP_GET_IDX(ep));\r\n  USB_DC_LOG_DBG(\"EP%d write %u bytes\\r\\n\", ep_idx, data_len);\r\n\r\n  if (ret_bytes) {\r\n    *ret_bytes = data_len;\r\n  }\r\n\r\n  return USB_DC_OK;\r\n}\r\n\r\n/**\r\n * @brief Read data from the specified endpoint\r\n *\r\n * This is similar to usb_dc_ep_read, the difference being that, it doesn't\r\n * clear the endpoint NAKs so that the consumer is not bogged down by further\r\n * upcalls till he is done with the processing of the data. The caller should\r\n * reactivate ep by invoking usb_dc_ep_read_continue() do so.\r\n *\r\n * @param dev\r\n * @param[in]  ep           Endpoint address corresponding to the one\r\n *                          listed in the device configuration table\r\n * @param[in]  data         Pointer to data buffer to write to\r\n * @param[in]  max_data_len Max length of data to read\r\n * @param[out] read_bytes   Number of bytes read. If data is NULL and\r\n *                          max_data_len is 0 the number of bytes\r\n *                          available for read should be returned.\r\n *\r\n * @return 0 on success, negative errno code on fail.\r\n */\r\nint usb_dc_ep_read(struct device *dev, const uint8_t ep, uint8_t *data, uint32_t data_len, uint32_t *read_bytes) {\r\n  uint8_t  ep_idx = USB_EP_GET_IDX(ep);\r\n  uint32_t read_count;\r\n  uint32_t ep_rx_fifo_addr;\r\n  uint32_t timeout = 0x00FFFFFF;\r\n\r\n  /* Check if OUT ep */\r\n  if (USB_EP_GET_DIR(ep) != USB_EP_DIR_OUT) {\r\n    USB_DC_LOG_ERR(\"Wrong endpoint direction\\r\\n\");\r\n    return -USB_DC_EP_DIR_ERR;\r\n  }\r\n\r\n  /* Check if ep enabled */\r\n  if (!usb_ep_is_enabled(ep)) {\r\n    USB_DC_LOG_ERR(\"Not enabled endpoint\\r\\n\");\r\n    return -USB_DC_EP_EN_ERR;\r\n  }\r\n\r\n  if (!data && data_len) {\r\n    USB_DC_LOG_ERR(\"data is null\\r\\n\");\r\n    return -USB_DC_ADDR_ERR;\r\n  }\r\n\r\n  /* Check if ep free */\r\n  while (!USB_Is_EPx_RDY_Free(ep_idx) && (usb_fs_device.out_ep[ep_idx].ep_cfg.ep_type != USBD_EP_TYPE_ISOC)) {\r\n    timeout--;\r\n\r\n    if (!timeout) {\r\n      USB_DC_LOG_ERR(\"ep%d wait free timeout\\r\\n\", ep);\r\n      return -USB_DC_EP_TIMEOUT_ERR;\r\n    }\r\n  }\r\n\r\n  if (!data_len) {\r\n    if ((USB_EP_GET_IDX(ep) != 0)) {\r\n      /* Clear NAK and enable ep */\r\n      USB_Set_EPx_Rdy(USB_EP_GET_IDX(ep));\r\n      return USB_DC_OK;\r\n    }\r\n  }\r\n\r\n  read_count = USB_Get_EPx_RX_FIFO_CNT(ep_idx);\r\n  read_count = MIN(read_count, data_len);\r\n\r\n  /* Data in the FIFOs is always stored per 8-bit word*/\r\n  ep_rx_fifo_addr = (USB_BASE + USB_EP0_RX_FIFO_RDATA_OFFSET + ep_idx * 0x10);\r\n  fifocopy_to_mem((void *)ep_rx_fifo_addr, data, read_count);\r\n  USB_DC_LOG_DBG(\"Read EP%d, req %d, read %d bytes\\r\\n\", ep, data_len, read_count);\r\n\r\n  if (read_bytes) {\r\n    *read_bytes = read_count;\r\n  }\r\n\r\n  return USB_DC_OK;\r\n}\r\n/**\r\n * @brief\r\n *\r\n * @param dev\r\n * @param rb\r\n * @param ep\r\n * @return int\r\n */\r\nint usb_dc_receive_to_ringbuffer(struct device *dev, Ring_Buffer_Type *rb, uint8_t ep) {\r\n  uint8_t     ep_idx;\r\n  uint8_t     recv_len;\r\n  static bool overflow_flag = false;\r\n\r\n  /* Check if OUT ep */\r\n  if (USB_EP_GET_DIR(ep) != USB_EP_DIR_OUT) {\r\n    USB_DC_LOG_ERR(\"Wrong endpoint direction\\r\\n\");\r\n    return -USB_DC_EP_DIR_ERR;\r\n  }\r\n\r\n  /* Check if ep enabled */\r\n  if (!usb_ep_is_enabled(ep)) {\r\n    return -USB_DC_EP_EN_ERR;\r\n  }\r\n\r\n  ep_idx = USB_EP_GET_IDX(ep);\r\n\r\n  recv_len = USB_Get_EPx_RX_FIFO_CNT(ep_idx);\r\n\r\n  /*if rx fifo count equal 0,it means last is send nack and ringbuffer is smaller than 64,\r\n   * so,if ringbuffer is larger than 64,set ack to recv next data.\r\n   */\r\n  if (overflow_flag && (Ring_Buffer_Get_Empty_Length(rb) > 64) && (!recv_len)) {\r\n    overflow_flag = false;\r\n    USB_Set_EPx_Rdy(ep_idx);\r\n    return 0;\r\n  } else {\r\n    uint32_t addr = USB_BASE + 0x11C + (ep_idx - 1) * 0x10;\r\n    Ring_Buffer_Write_Callback(rb, recv_len, fifocopy_to_mem, (void *)addr);\r\n\r\n    if (Ring_Buffer_Get_Empty_Length(rb) < 64) {\r\n      overflow_flag = true;\r\n      return -USB_DC_RB_SIZE_SMALL_ERR;\r\n    }\r\n\r\n    USB_Set_EPx_Rdy(ep_idx);\r\n    return 0;\r\n  }\r\n}\r\n/**\r\n * @brief\r\n *\r\n * @param dev\r\n * @param rb\r\n * @param ep\r\n * @return int\r\n */\r\nint usb_dc_send_from_ringbuffer(struct device *dev, Ring_Buffer_Type *rb, uint8_t ep) {\r\n  uint8_t         ep_idx;\r\n  static bool     zlp_flag       = false;\r\n  static uint32_t send_total_len = 0;\r\n\r\n  ep_idx = USB_EP_GET_IDX(ep);\r\n\r\n  /* Check if IN ep */\r\n  if (USB_EP_GET_DIR(ep) != USB_EP_DIR_IN) {\r\n    return -USB_DC_EP_DIR_ERR;\r\n  }\r\n\r\n  /* Check if ep enabled */\r\n  if (!usb_ep_is_enabled(ep)) {\r\n    return -USB_DC_EP_EN_ERR;\r\n  }\r\n\r\n  uint32_t addr = USB_BASE + 0x118 + (ep_idx - 1) * 0x10;\r\n\r\n  if (zlp_flag == false) {\r\n    if ((USB_Get_EPx_TX_FIFO_CNT(ep_idx) == USB_FS_MAX_PACKET_SIZE) && Ring_Buffer_Get_Length(rb)) {\r\n      uint32_t actual_len = Ring_Buffer_Read_Callback(rb, USB_FS_MAX_PACKET_SIZE, memcopy_to_fifo, (void *)addr);\r\n      send_total_len += actual_len;\r\n\r\n      if (!Ring_Buffer_Get_Length(rb) && (!(send_total_len % 64))) {\r\n        zlp_flag = true;\r\n      }\r\n\r\n      USB_Set_EPx_Rdy(ep_idx);\r\n      return 0;\r\n    } else {\r\n      return -USB_DC_RB_SIZE_SMALL_ERR;\r\n    }\r\n  } else {\r\n    zlp_flag       = false;\r\n    send_total_len = 0;\r\n    USB_Set_EPx_Rdy(ep_idx);\r\n    return -USB_DC_ZLP_ERR;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief\r\n *\r\n * @param device\r\n */\r\nvoid usb_dc_isr(usb_dc_device_t *device) {\r\n  USB_EP_ID epnum = EP_ID0;\r\n\r\n  /* EP1_DONE -> EP2_DONE -> ...... -> EP7_DONE*/\r\n  for (USB_INT_Type epint = USB_INT_EP1_DONE; epint <= USB_INT_EP7_DONE; epint += 2) {\r\n    if (USB_Get_IntStatus(epint)) {\r\n      epnum = (epint - USB_INT_EP0_OUT_CMD) >> 1;\r\n      if (!USB_Is_EPx_RDY_Free(epnum) && (device->out_ep[epnum].ep_cfg.ep_type != USBD_EP_TYPE_ISOC)) {\r\n        USB_DC_LOG_ERR(\"ep%d out busy\\r\\n\", epnum);\r\n        continue;\r\n      }\r\n      USB_Clr_IntStatus(epint);\r\n      device->parent.callback(&device->parent, (void *)((uint32_t)USB_SET_EP_OUT(epnum)), 0, USB_DC_EVENT_EP_OUT_NOTIFY);\r\n    }\r\n  }\r\n\r\n  /* EP1_CMD -> EP2_CMD -> ...... -> EP7_CMD*/\r\n  for (USB_INT_Type epint = USB_INT_EP1_CMD; epint <= USB_INT_EP7_CMD; epint += 2) {\r\n    if (USB_Get_IntStatus(epint)) {\r\n      epnum = (epint - USB_INT_EP0_OUT_CMD) >> 1;\r\n      if (!USB_Is_EPx_RDY_Free(epnum) && (device->in_ep[epnum].ep_cfg.ep_type != USBD_EP_TYPE_ISOC)) {\r\n        USB_DC_LOG_DBG(\"ep%d in busy\\r\\n\", epnum);\r\n        continue;\r\n      }\r\n      USB_Clr_IntStatus(epint);\r\n      device->parent.callback(&device->parent, (void *)((uint32_t)USB_SET_EP_IN(epnum)), 0, USB_DC_EVENT_EP_IN_NOTIFY);\r\n    }\r\n  }\r\n\r\n  /* EP0 setup done */\r\n  if (USB_Get_IntStatus(USB_INT_EP0_SETUP_DONE)) {\r\n    if (!USB_Is_EPx_RDY_Free(0)) {\r\n      USB_DC_LOG_DBG(\"ep0 setup busy\\r\\n\");\r\n      return;\r\n    }\r\n    USB_Clr_IntStatus(USB_INT_EP0_SETUP_DONE);\r\n    device->parent.callback(&device->parent, NULL, 0, USB_DC_EVENT_SETUP_NOTIFY);\r\n    USB_Set_EPx_Rdy(EP_ID0);\r\n    return;\r\n  }\r\n\r\n  /* EP0 in done */\r\n  if (USB_Get_IntStatus(USB_INT_EP0_IN_DONE)) {\r\n    if (!USB_Is_EPx_RDY_Free(0)) {\r\n      USB_DC_LOG_DBG(\"ep0 in busy\\r\\n\");\r\n      return;\r\n    }\r\n    USB_Clr_IntStatus(USB_INT_EP0_IN_DONE);\r\n    device->parent.callback(&device->parent, (void *)0x80, 0, USB_DC_EVENT_EP0_IN_NOTIFY);\r\n    USB_Set_EPx_Rdy(EP_ID0);\r\n    return;\r\n  }\r\n\r\n  /* EP0 out done */\r\n  if (USB_Get_IntStatus(USB_INT_EP0_OUT_DONE)) {\r\n    if (!USB_Is_EPx_RDY_Free(0)) {\r\n      USB_DC_LOG_DBG(\"ep0 out busy\\r\\n\");\r\n      return;\r\n    }\r\n    USB_Clr_IntStatus(USB_INT_EP0_OUT_DONE);\r\n    device->parent.callback(&device->parent, (void *)0x00, 0, USB_DC_EVENT_EP0_OUT_NOTIFY);\r\n    USB_Set_EPx_Rdy(EP_ID0);\r\n    return;\r\n  }\r\n\r\n  /* sof */\r\n  if (USB_Get_IntStatus(USB_INT_SOF)) {\r\n    USB_Clr_IntStatus(USB_INT_SOF);\r\n    device->parent.callback(&device->parent, NULL, 0, USB_DC_EVENT_SOF);\r\n    return;\r\n  }\r\n\r\n  /* reset */\r\n  if (USB_Get_IntStatus(USB_INT_RESET)) {\r\n    USB_Clr_IntStatus(USB_INT_RESET);\r\n    device->parent.callback(&device->parent, NULL, 0, USB_DC_EVENT_RESET);\r\n    return;\r\n  }\r\n\r\n  /* reset end */\r\n  if (USB_Get_IntStatus(USB_INT_RESET_END)) {\r\n    USB_Clr_IntStatus(USB_INT_RESET_END);\r\n    USB_Set_EPx_Rdy(EP_ID0);\r\n    return;\r\n  }\r\n\r\n  /* vbus toggle */\r\n  if (USB_Get_IntStatus(USB_INT_VBUS_TGL)) {\r\n    USB_Clr_IntStatus(USB_INT_VBUS_TGL);\r\n    return;\r\n  }\r\n#ifdef ENABLE_LPM_INT\r\n  /* LPM wakeup */\r\n  if (USB_Get_IntStatus(USB_INT_LPM_WAKEUP)) {\r\n    USB_Clr_IntStatus(USB_INT_LPM_WAKEUP);\r\n    return;\r\n  }\r\n\r\n  /* LPM packet */\r\n  if (USB_Get_IntStatus(USB_INT_LPM_PACKET)) {\r\n    /*************************************/\r\n    /* Force low-power mode in the macrocell */\r\n    if (USB_Get_IntStatus(USB_INT_LPM_WAKEUP) == 0) {\r\n    }\r\n\r\n    /*************************************/\r\n    USB_Clr_IntStatus(USB_INT_LPM_PACKET);\r\n    return;\r\n  }\r\n#endif\r\n#ifdef ENABLE_SOF3MS_INT\r\n  /* lost 3 SOF */\r\n  if (USB_Get_IntStatus(USB_INT_LOST_SOF_3_TIMES)) {\r\n    USB_DC_LOG_ERR(\"Lost 3 SOFs\\r\\n\");\r\n    /*************************************/\r\n    /*************************************/\r\n    USB_Clr_IntStatus(USB_INT_LOST_SOF_3_TIMES);\r\n    return;\r\n  }\r\n#endif\r\n#ifdef ENABLE_ERROR_INT\r\n  /* error */\r\n  if (USB_Get_IntStatus(USB_INT_ERROR)) {\r\n    USB_DC_LOG(\"USB bus error 0x%08x; EP2 fifo status 0x%08x\\r\\n\", *(volatile uint32_t *)(0x4000D81C), *(volatile uint32_t *)(0x4000D920));\r\n    /*************************************/\r\n    /*************************************/\r\n    device->parent.callback(&device->parent, NULL, 0, USB_DC_EVENT_ERROR);\r\n    USB_Clr_IntStatus(USB_INT_ERROR);\r\n    return;\r\n  }\r\n#endif\r\n}\r\n/**\r\n * @brief\r\n *\r\n */\r\nvoid USB_FS_IRQ(void) { usb_dc_isr(&usb_fs_device); }"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/hal_drv/src/hal_wdt.c",
    "content": "/**\r\n * @file hal_wdt.c\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n#include \"hal_wdt.h\"\r\n#include \"bl702_timer.h\"\r\n\r\n#ifdef BSP_USING_WDT\r\nvoid WDT_IRQ(void);\r\n#endif\r\n\r\nstatic wdt_device_t wdtx_device[WDT_MAX_INDEX] = {\r\n#ifdef BSP_USING_WDT\r\n    WDT_CONFIG,\r\n#endif\r\n};\r\n\r\nint wdt_open(struct device *dev, uint16_t oflag) {\r\n  // uint32_t tmpval;\r\n\r\n  /* watchdog timer disable*/\r\n  // tmpval = BL_RD_REG(TIMER_BASE, TIMER_WMER);\r\n  // BL_WR_REG(TIMER_BASE, TIMER_WMER, BL_CLR_REG_BIT(tmpval, TIMER_WE));\r\n  // // MSG(\"wdt timeout %d \\r\\n\", wdt_device->wdt_timeout);\r\n  // /* Set watchdog timer match register value */\r\n  // BL_WR_REG(TIMER_BASE, TIMER_WMR, (uint16_t)wdt_device->wdt_timeout);\r\n\r\n  if (oflag & DEVICE_OFLAG_INT_TX) {\r\n#ifdef BSP_USING_WDT\r\n    wdt_device_t *wdt_device = (wdt_device_t *)dev;\r\n    // WDT_IntMask(WDT_INT, UNMASK);\r\n    if (wdt_device->id == 0) {\r\n      Interrupt_Handler_Register(TIMER_WDT_IRQn, WDT_IRQ);\r\n    }\r\n#endif\r\n  } else {\r\n    WDT_IntMask(WDT_INT, MASK);\r\n  }\r\n\r\n  // /* enable watchdog timer */\r\n  WDT_Enable();\r\n  return 0;\r\n}\r\n\r\nint wdt_close(struct device *dev) {\r\n  // wdt_device_t *wdt_device = (wdt_device_t *)(dev);\r\n  WDT_Disable();\r\n  return 0;\r\n}\r\n\r\nint wdt_control(struct device *dev, int cmd, void *args) {\r\n  // wdt_device_t *wdt_device = (wdt_device_t *)dev;\r\n\r\n  switch (cmd) {\r\n  case DEVICE_CTRL_SET_INT: {\r\n    WDT_IntMask(WDT_INT, UNMASK);\r\n    CPU_Interrupt_Pending_Clear(TIMER_WDT_IRQn);\r\n    CPU_Interrupt_Enable(TIMER_WDT_IRQn);\r\n    break;\r\n  }\r\n  case DEVICE_CTRL_CLR_INT: {\r\n    WDT_IntMask(WDT_INT, MASK);\r\n    CPU_Interrupt_Disable(TIMER_WDT_IRQn);\r\n    break;\r\n  }\r\n  case DEVICE_CTRL_CONFIG: {\r\n    break;\r\n  }\r\n  case DEVICE_CTRL_RESUME: {\r\n    WDT_Enable();\r\n    break;\r\n  }\r\n  case DEVICE_CTRL_SUSPEND: {\r\n    WDT_Disable();\r\n    break;\r\n  }\r\n  case DEVICE_CTRL_GET_WDT_COUNTER: {\r\n    return WDT_GetCounterValue();\r\n    break;\r\n  }\r\n  case DEVICE_CTRL_RST_WDT_COUNTER: {\r\n    WDT_ResetCounterValue();\r\n    break;\r\n  }\r\n  case DEVICE_CTRL_GET_RST_STATUS: {\r\n    return WDT_GetResetStatus();\r\n    break;\r\n  }\r\n  case DEVICE_CTRL_CLR_RST_STATUS: {\r\n    WDT_ClearResetStatus();\r\n    break;\r\n  }\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return 0;\r\n}\r\n\r\nint wdt_write(struct device *dev, uint32_t pos, const void *buffer, uint32_t size) {\r\n  // wdt_device_t *wdt_device = (wdt_device_t *)dev;\r\n  uint16_t wdt_timeout = (uint16_t)(uint32_t)buffer;\r\n\r\n  WDT_Disable();\r\n  WDT_SetCompValue(wdt_timeout);\r\n  WDT_Enable();\r\n\r\n  return 0;\r\n}\r\n\r\nint wdt_register(enum wdt_index_type index, const char *name) {\r\n  struct device *dev;\r\n\r\n  if (WDT_MAX_INDEX == 0) {\r\n    return -DEVICE_EINVAL;\r\n  }\r\n\r\n  dev = &(wdtx_device[index].parent);\r\n\r\n  dev->open    = wdt_open;\r\n  dev->close   = wdt_close;\r\n  dev->control = wdt_control;\r\n  dev->write   = wdt_write;\r\n  // dev->read = NULL;\r\n\r\n  dev->status = DEVICE_UNREGISTER;\r\n  dev->type   = DEVICE_CLASS_TIMER;\r\n  dev->handle = NULL;\r\n\r\n  return device_register(dev, name);\r\n}\r\n\r\nvoid wdt_isr(wdt_device_t *handle) {\r\n  uint32_t tmpval;\r\n\r\n  if (!handle->parent.callback) {\r\n    return;\r\n  }\r\n\r\n  tmpval = BL_RD_REG(TIMER_BASE, TIMER_WICR);\r\n  BL_WR_REG(TIMER_BASE, TIMER_WICR, BL_SET_REG_BIT(tmpval, TIMER_WICLR));\r\n\r\n  handle->parent.callback(&handle->parent, NULL, 0, WDT_EVENT);\r\n}\r\n\r\n#ifdef BSP_USING_WDT\r\n/**\r\n * @brief\r\n *\r\n */\r\nvoid WDT_IRQ(void) { wdt_isr(&wdtx_device[WDT_INDEX]); }\r\n#endif\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/aon_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    aon_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __AON_REG_H__\n#define __AON_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x800 : aon */\n#define AON_OFFSET                     (0x800)\n#define AON_RESV                       AON_RESV\n#define AON_RESV_POS                   (0U)\n#define AON_RESV_LEN                   (8U)\n#define AON_RESV_MSK                   (((1U << AON_RESV_LEN) - 1) << AON_RESV_POS)\n#define AON_RESV_UMSK                  (~(((1U << AON_RESV_LEN) - 1) << AON_RESV_POS))\n#define AON_PU_AON_DC_TBUF             AON_PU_AON_DC_TBUF\n#define AON_PU_AON_DC_TBUF_POS         (12U)\n#define AON_PU_AON_DC_TBUF_LEN         (1U)\n#define AON_PU_AON_DC_TBUF_MSK         (((1U << AON_PU_AON_DC_TBUF_LEN) - 1) << AON_PU_AON_DC_TBUF_POS)\n#define AON_PU_AON_DC_TBUF_UMSK        (~(((1U << AON_PU_AON_DC_TBUF_LEN) - 1) << AON_PU_AON_DC_TBUF_POS))\n#define AON_LDO11_RT_PULLDOWN          AON_LDO11_RT_PULLDOWN\n#define AON_LDO11_RT_PULLDOWN_POS      (20U)\n#define AON_LDO11_RT_PULLDOWN_LEN      (1U)\n#define AON_LDO11_RT_PULLDOWN_MSK      (((1U << AON_LDO11_RT_PULLDOWN_LEN) - 1) << AON_LDO11_RT_PULLDOWN_POS)\n#define AON_LDO11_RT_PULLDOWN_UMSK     (~(((1U << AON_LDO11_RT_PULLDOWN_LEN) - 1) << AON_LDO11_RT_PULLDOWN_POS))\n#define AON_LDO11_RT_PULLDOWN_SEL      AON_LDO11_RT_PULLDOWN_SEL\n#define AON_LDO11_RT_PULLDOWN_SEL_POS  (21U)\n#define AON_LDO11_RT_PULLDOWN_SEL_LEN  (1U)\n#define AON_LDO11_RT_PULLDOWN_SEL_MSK  (((1U << AON_LDO11_RT_PULLDOWN_SEL_LEN) - 1) << AON_LDO11_RT_PULLDOWN_SEL_POS)\n#define AON_LDO11_RT_PULLDOWN_SEL_UMSK (~(((1U << AON_LDO11_RT_PULLDOWN_SEL_LEN) - 1) << AON_LDO11_RT_PULLDOWN_SEL_POS))\n#define AON_SW_PU_LDO11_RT             AON_SW_PU_LDO11_RT\n#define AON_SW_PU_LDO11_RT_POS         (22U)\n#define AON_SW_PU_LDO11_RT_LEN         (1U)\n#define AON_SW_PU_LDO11_RT_MSK         (((1U << AON_SW_PU_LDO11_RT_LEN) - 1) << AON_SW_PU_LDO11_RT_POS)\n#define AON_SW_PU_LDO11_RT_UMSK        (~(((1U << AON_SW_PU_LDO11_RT_LEN) - 1) << AON_SW_PU_LDO11_RT_POS))\n\n/* 0x804 : aon_common */\n#define AON_COMMON_OFFSET         (0x804)\n#define AON_TMUX_AON              AON_TMUX_AON\n#define AON_TMUX_AON_POS          (0U)\n#define AON_TMUX_AON_LEN          (3U)\n#define AON_TMUX_AON_MSK          (((1U << AON_TMUX_AON_LEN) - 1) << AON_TMUX_AON_POS)\n#define AON_TMUX_AON_UMSK         (~(((1U << AON_TMUX_AON_LEN) - 1) << AON_TMUX_AON_POS))\n#define AON_TEN_AON               AON_TEN_AON\n#define AON_TEN_AON_POS           (4U)\n#define AON_TEN_AON_LEN           (1U)\n#define AON_TEN_AON_MSK           (((1U << AON_TEN_AON_LEN) - 1) << AON_TEN_AON_POS)\n#define AON_TEN_AON_UMSK          (~(((1U << AON_TEN_AON_LEN) - 1) << AON_TEN_AON_POS))\n#define AON_DTEN_XTAL32K          AON_DTEN_XTAL32K\n#define AON_DTEN_XTAL32K_POS      (5U)\n#define AON_DTEN_XTAL32K_LEN      (1U)\n#define AON_DTEN_XTAL32K_MSK      (((1U << AON_DTEN_XTAL32K_LEN) - 1) << AON_DTEN_XTAL32K_POS)\n#define AON_DTEN_XTAL32K_UMSK     (~(((1U << AON_DTEN_XTAL32K_LEN) - 1) << AON_DTEN_XTAL32K_POS))\n#define AON_TEN_XTAL32K           AON_TEN_XTAL32K\n#define AON_TEN_XTAL32K_POS       (6U)\n#define AON_TEN_XTAL32K_LEN       (1U)\n#define AON_TEN_XTAL32K_MSK       (((1U << AON_TEN_XTAL32K_LEN) - 1) << AON_TEN_XTAL32K_POS)\n#define AON_TEN_XTAL32K_UMSK      (~(((1U << AON_TEN_XTAL32K_LEN) - 1) << AON_TEN_XTAL32K_POS))\n#define AON_TEN_VDDCORE_AON       AON_TEN_VDDCORE_AON\n#define AON_TEN_VDDCORE_AON_POS   (8U)\n#define AON_TEN_VDDCORE_AON_LEN   (1U)\n#define AON_TEN_VDDCORE_AON_MSK   (((1U << AON_TEN_VDDCORE_AON_LEN) - 1) << AON_TEN_VDDCORE_AON_POS)\n#define AON_TEN_VDDCORE_AON_UMSK  (~(((1U << AON_TEN_VDDCORE_AON_LEN) - 1) << AON_TEN_VDDCORE_AON_POS))\n#define AON_TEN_LDO11SOC_AON      AON_TEN_LDO11SOC_AON\n#define AON_TEN_LDO11SOC_AON_POS  (9U)\n#define AON_TEN_LDO11SOC_AON_LEN  (1U)\n#define AON_TEN_LDO11SOC_AON_MSK  (((1U << AON_TEN_LDO11SOC_AON_LEN) - 1) << AON_TEN_LDO11SOC_AON_POS)\n#define AON_TEN_LDO11SOC_AON_UMSK (~(((1U << AON_TEN_LDO11SOC_AON_LEN) - 1) << AON_TEN_LDO11SOC_AON_POS))\n#define AON_TEN_DCDC18_0_AON      AON_TEN_DCDC18_0_AON\n#define AON_TEN_DCDC18_0_AON_POS  (10U)\n#define AON_TEN_DCDC18_0_AON_LEN  (1U)\n#define AON_TEN_DCDC18_0_AON_MSK  (((1U << AON_TEN_DCDC18_0_AON_LEN) - 1) << AON_TEN_DCDC18_0_AON_POS)\n#define AON_TEN_DCDC18_0_AON_UMSK (~(((1U << AON_TEN_DCDC18_0_AON_LEN) - 1) << AON_TEN_DCDC18_0_AON_POS))\n#define AON_TEN_DCDC18_1_AON      AON_TEN_DCDC18_1_AON\n#define AON_TEN_DCDC18_1_AON_POS  (11U)\n#define AON_TEN_DCDC18_1_AON_LEN  (1U)\n#define AON_TEN_DCDC18_1_AON_MSK  (((1U << AON_TEN_DCDC18_1_AON_LEN) - 1) << AON_TEN_DCDC18_1_AON_POS)\n#define AON_TEN_DCDC18_1_AON_UMSK (~(((1U << AON_TEN_DCDC18_1_AON_LEN) - 1) << AON_TEN_DCDC18_1_AON_POS))\n#define AON_TEN_BG_SYS_AON        AON_TEN_BG_SYS_AON\n#define AON_TEN_BG_SYS_AON_POS    (12U)\n#define AON_TEN_BG_SYS_AON_LEN    (1U)\n#define AON_TEN_BG_SYS_AON_MSK    (((1U << AON_TEN_BG_SYS_AON_LEN) - 1) << AON_TEN_BG_SYS_AON_POS)\n#define AON_TEN_BG_SYS_AON_UMSK   (~(((1U << AON_TEN_BG_SYS_AON_LEN) - 1) << AON_TEN_BG_SYS_AON_POS))\n#define AON_TEN_LDO15RF_AON       AON_TEN_LDO15RF_AON\n#define AON_TEN_LDO15RF_AON_POS   (16U)\n#define AON_TEN_LDO15RF_AON_LEN   (1U)\n#define AON_TEN_LDO15RF_AON_MSK   (((1U << AON_TEN_LDO15RF_AON_LEN) - 1) << AON_TEN_LDO15RF_AON_POS)\n#define AON_TEN_LDO15RF_AON_UMSK  (~(((1U << AON_TEN_LDO15RF_AON_LEN) - 1) << AON_TEN_LDO15RF_AON_POS))\n#define AON_TEN_XTAL_AON          AON_TEN_XTAL_AON\n#define AON_TEN_XTAL_AON_POS      (17U)\n#define AON_TEN_XTAL_AON_LEN      (1U)\n#define AON_TEN_XTAL_AON_MSK      (((1U << AON_TEN_XTAL_AON_LEN) - 1) << AON_TEN_XTAL_AON_POS)\n#define AON_TEN_XTAL_AON_UMSK     (~(((1U << AON_TEN_XTAL_AON_LEN) - 1) << AON_TEN_XTAL_AON_POS))\n#define AON_DTEN_XTAL_AON         AON_DTEN_XTAL_AON\n#define AON_DTEN_XTAL_AON_POS     (18U)\n#define AON_DTEN_XTAL_AON_LEN     (1U)\n#define AON_DTEN_XTAL_AON_MSK     (((1U << AON_DTEN_XTAL_AON_LEN) - 1) << AON_DTEN_XTAL_AON_POS)\n#define AON_DTEN_XTAL_AON_UMSK    (~(((1U << AON_DTEN_XTAL_AON_LEN) - 1) << AON_DTEN_XTAL_AON_POS))\n#define AON_TEN_MBG_AON           AON_TEN_MBG_AON\n#define AON_TEN_MBG_AON_POS       (19U)\n#define AON_TEN_MBG_AON_LEN       (1U)\n#define AON_TEN_MBG_AON_MSK       (((1U << AON_TEN_MBG_AON_LEN) - 1) << AON_TEN_MBG_AON_POS)\n#define AON_TEN_MBG_AON_UMSK      (~(((1U << AON_TEN_MBG_AON_LEN) - 1) << AON_TEN_MBG_AON_POS))\n#define AON_TEN_CIP_MISC_AON      AON_TEN_CIP_MISC_AON\n#define AON_TEN_CIP_MISC_AON_POS  (20U)\n#define AON_TEN_CIP_MISC_AON_LEN  (1U)\n#define AON_TEN_CIP_MISC_AON_MSK  (((1U << AON_TEN_CIP_MISC_AON_LEN) - 1) << AON_TEN_CIP_MISC_AON_POS)\n#define AON_TEN_CIP_MISC_AON_UMSK (~(((1U << AON_TEN_CIP_MISC_AON_LEN) - 1) << AON_TEN_CIP_MISC_AON_POS))\n\n/* 0x808 : aon_misc */\n#define AON_MISC_OFFSET        (0x808)\n#define AON_SW_SOC_EN_AON      AON_SW_SOC_EN_AON\n#define AON_SW_SOC_EN_AON_POS  (0U)\n#define AON_SW_SOC_EN_AON_LEN  (1U)\n#define AON_SW_SOC_EN_AON_MSK  (((1U << AON_SW_SOC_EN_AON_LEN) - 1) << AON_SW_SOC_EN_AON_POS)\n#define AON_SW_SOC_EN_AON_UMSK (~(((1U << AON_SW_SOC_EN_AON_LEN) - 1) << AON_SW_SOC_EN_AON_POS))\n#define AON_SW_BZ_EN_AON       AON_SW_BZ_EN_AON\n#define AON_SW_BZ_EN_AON_POS   (1U)\n#define AON_SW_BZ_EN_AON_LEN   (1U)\n#define AON_SW_BZ_EN_AON_MSK   (((1U << AON_SW_BZ_EN_AON_LEN) - 1) << AON_SW_BZ_EN_AON_POS)\n#define AON_SW_BZ_EN_AON_UMSK  (~(((1U << AON_SW_BZ_EN_AON_LEN) - 1) << AON_SW_BZ_EN_AON_POS))\n\n/* 0x810 : bg_sys_top */\n#define AON_BG_SYS_TOP_OFFSET          (0x810)\n#define AON_PMIP_RESV                  AON_PMIP_RESV\n#define AON_PMIP_RESV_POS              (0U)\n#define AON_PMIP_RESV_LEN              (8U)\n#define AON_PMIP_RESV_MSK              (((1U << AON_PMIP_RESV_LEN) - 1) << AON_PMIP_RESV_POS)\n#define AON_PMIP_RESV_UMSK             (~(((1U << AON_PMIP_RESV_LEN) - 1) << AON_PMIP_RESV_POS))\n#define AON_PU_BG_SYS_AON              AON_PU_BG_SYS_AON\n#define AON_PU_BG_SYS_AON_POS          (8U)\n#define AON_PU_BG_SYS_AON_LEN          (1U)\n#define AON_PU_BG_SYS_AON_MSK          (((1U << AON_PU_BG_SYS_AON_LEN) - 1) << AON_PU_BG_SYS_AON_POS)\n#define AON_PU_BG_SYS_AON_UMSK         (~(((1U << AON_PU_BG_SYS_AON_LEN) - 1) << AON_PU_BG_SYS_AON_POS))\n#define AON_BG_SYS_START_CTRL_AON      AON_BG_SYS_START_CTRL_AON\n#define AON_BG_SYS_START_CTRL_AON_POS  (12U)\n#define AON_BG_SYS_START_CTRL_AON_LEN  (1U)\n#define AON_BG_SYS_START_CTRL_AON_MSK  (((1U << AON_BG_SYS_START_CTRL_AON_LEN) - 1) << AON_BG_SYS_START_CTRL_AON_POS)\n#define AON_BG_SYS_START_CTRL_AON_UMSK (~(((1U << AON_BG_SYS_START_CTRL_AON_LEN) - 1) << AON_BG_SYS_START_CTRL_AON_POS))\n\n/* 0x814 : dcdc18_top_0 */\n#define AON_DCDC18_TOP_0_OFFSET            (0x814)\n#define AON_DCDC18_VOUT_SEL_AON            AON_DCDC18_VOUT_SEL_AON\n#define AON_DCDC18_VOUT_SEL_AON_POS        (1U)\n#define AON_DCDC18_VOUT_SEL_AON_LEN        (5U)\n#define AON_DCDC18_VOUT_SEL_AON_MSK        (((1U << AON_DCDC18_VOUT_SEL_AON_LEN) - 1) << AON_DCDC18_VOUT_SEL_AON_POS)\n#define AON_DCDC18_VOUT_SEL_AON_UMSK       (~(((1U << AON_DCDC18_VOUT_SEL_AON_LEN) - 1) << AON_DCDC18_VOUT_SEL_AON_POS))\n#define AON_DCDC18_VPFM_AON                AON_DCDC18_VPFM_AON\n#define AON_DCDC18_VPFM_AON_POS            (8U)\n#define AON_DCDC18_VPFM_AON_LEN            (4U)\n#define AON_DCDC18_VPFM_AON_MSK            (((1U << AON_DCDC18_VPFM_AON_LEN) - 1) << AON_DCDC18_VPFM_AON_POS)\n#define AON_DCDC18_VPFM_AON_UMSK           (~(((1U << AON_DCDC18_VPFM_AON_LEN) - 1) << AON_DCDC18_VPFM_AON_POS))\n#define AON_DCDC18_OSC_2M_MODE_AON         AON_DCDC18_OSC_2M_MODE_AON\n#define AON_DCDC18_OSC_2M_MODE_AON_POS     (12U)\n#define AON_DCDC18_OSC_2M_MODE_AON_LEN     (1U)\n#define AON_DCDC18_OSC_2M_MODE_AON_MSK     (((1U << AON_DCDC18_OSC_2M_MODE_AON_LEN) - 1) << AON_DCDC18_OSC_2M_MODE_AON_POS)\n#define AON_DCDC18_OSC_2M_MODE_AON_UMSK    (~(((1U << AON_DCDC18_OSC_2M_MODE_AON_LEN) - 1) << AON_DCDC18_OSC_2M_MODE_AON_POS))\n#define AON_DCDC18_OSC_FREQ_TRIM_AON       AON_DCDC18_OSC_FREQ_TRIM_AON\n#define AON_DCDC18_OSC_FREQ_TRIM_AON_POS   (16U)\n#define AON_DCDC18_OSC_FREQ_TRIM_AON_LEN   (4U)\n#define AON_DCDC18_OSC_FREQ_TRIM_AON_MSK   (((1U << AON_DCDC18_OSC_FREQ_TRIM_AON_LEN) - 1) << AON_DCDC18_OSC_FREQ_TRIM_AON_POS)\n#define AON_DCDC18_OSC_FREQ_TRIM_AON_UMSK  (~(((1U << AON_DCDC18_OSC_FREQ_TRIM_AON_LEN) - 1) << AON_DCDC18_OSC_FREQ_TRIM_AON_POS))\n#define AON_DCDC18_SLOPE_CURR_SEL_AON      AON_DCDC18_SLOPE_CURR_SEL_AON\n#define AON_DCDC18_SLOPE_CURR_SEL_AON_POS  (20U)\n#define AON_DCDC18_SLOPE_CURR_SEL_AON_LEN  (5U)\n#define AON_DCDC18_SLOPE_CURR_SEL_AON_MSK  (((1U << AON_DCDC18_SLOPE_CURR_SEL_AON_LEN) - 1) << AON_DCDC18_SLOPE_CURR_SEL_AON_POS)\n#define AON_DCDC18_SLOPE_CURR_SEL_AON_UMSK (~(((1U << AON_DCDC18_SLOPE_CURR_SEL_AON_LEN) - 1) << AON_DCDC18_SLOPE_CURR_SEL_AON_POS))\n#define AON_DCDC18_STOP_OSC_AON            AON_DCDC18_STOP_OSC_AON\n#define AON_DCDC18_STOP_OSC_AON_POS        (25U)\n#define AON_DCDC18_STOP_OSC_AON_LEN        (1U)\n#define AON_DCDC18_STOP_OSC_AON_MSK        (((1U << AON_DCDC18_STOP_OSC_AON_LEN) - 1) << AON_DCDC18_STOP_OSC_AON_POS)\n#define AON_DCDC18_STOP_OSC_AON_UMSK       (~(((1U << AON_DCDC18_STOP_OSC_AON_LEN) - 1) << AON_DCDC18_STOP_OSC_AON_POS))\n#define AON_DCDC18_SLOW_OSC_AON            AON_DCDC18_SLOW_OSC_AON\n#define AON_DCDC18_SLOW_OSC_AON_POS        (26U)\n#define AON_DCDC18_SLOW_OSC_AON_LEN        (1U)\n#define AON_DCDC18_SLOW_OSC_AON_MSK        (((1U << AON_DCDC18_SLOW_OSC_AON_LEN) - 1) << AON_DCDC18_SLOW_OSC_AON_POS)\n#define AON_DCDC18_SLOW_OSC_AON_UMSK       (~(((1U << AON_DCDC18_SLOW_OSC_AON_LEN) - 1) << AON_DCDC18_SLOW_OSC_AON_POS))\n#define AON_DCDC18_OSC_INHIBIT_T2_AON      AON_DCDC18_OSC_INHIBIT_T2_AON\n#define AON_DCDC18_OSC_INHIBIT_T2_AON_POS  (27U)\n#define AON_DCDC18_OSC_INHIBIT_T2_AON_LEN  (1U)\n#define AON_DCDC18_OSC_INHIBIT_T2_AON_MSK  (((1U << AON_DCDC18_OSC_INHIBIT_T2_AON_LEN) - 1) << AON_DCDC18_OSC_INHIBIT_T2_AON_POS)\n#define AON_DCDC18_OSC_INHIBIT_T2_AON_UMSK (~(((1U << AON_DCDC18_OSC_INHIBIT_T2_AON_LEN) - 1) << AON_DCDC18_OSC_INHIBIT_T2_AON_POS))\n#define AON_DCDC18_SSTART_TIME_AON         AON_DCDC18_SSTART_TIME_AON\n#define AON_DCDC18_SSTART_TIME_AON_POS     (28U)\n#define AON_DCDC18_SSTART_TIME_AON_LEN     (2U)\n#define AON_DCDC18_SSTART_TIME_AON_MSK     (((1U << AON_DCDC18_SSTART_TIME_AON_LEN) - 1) << AON_DCDC18_SSTART_TIME_AON_POS)\n#define AON_DCDC18_SSTART_TIME_AON_UMSK    (~(((1U << AON_DCDC18_SSTART_TIME_AON_LEN) - 1) << AON_DCDC18_SSTART_TIME_AON_POS))\n#define AON_DCDC18_RDY_AON                 AON_DCDC18_RDY_AON\n#define AON_DCDC18_RDY_AON_POS             (31U)\n#define AON_DCDC18_RDY_AON_LEN             (1U)\n#define AON_DCDC18_RDY_AON_MSK             (((1U << AON_DCDC18_RDY_AON_LEN) - 1) << AON_DCDC18_RDY_AON_POS)\n#define AON_DCDC18_RDY_AON_UMSK            (~(((1U << AON_DCDC18_RDY_AON_LEN) - 1) << AON_DCDC18_RDY_AON_POS))\n\n/* 0x818 : dcdc18_top_1 */\n#define AON_DCDC18_TOP_1_OFFSET           (0x818)\n#define AON_DCDC18_FORCE_CS_ZVS_AON       AON_DCDC18_FORCE_CS_ZVS_AON\n#define AON_DCDC18_FORCE_CS_ZVS_AON_POS   (0U)\n#define AON_DCDC18_FORCE_CS_ZVS_AON_LEN   (1U)\n#define AON_DCDC18_FORCE_CS_ZVS_AON_MSK   (((1U << AON_DCDC18_FORCE_CS_ZVS_AON_LEN) - 1) << AON_DCDC18_FORCE_CS_ZVS_AON_POS)\n#define AON_DCDC18_FORCE_CS_ZVS_AON_UMSK  (~(((1U << AON_DCDC18_FORCE_CS_ZVS_AON_LEN) - 1) << AON_DCDC18_FORCE_CS_ZVS_AON_POS))\n#define AON_DCDC18_CS_DELAY_AON           AON_DCDC18_CS_DELAY_AON\n#define AON_DCDC18_CS_DELAY_AON_POS       (1U)\n#define AON_DCDC18_CS_DELAY_AON_LEN       (3U)\n#define AON_DCDC18_CS_DELAY_AON_MSK       (((1U << AON_DCDC18_CS_DELAY_AON_LEN) - 1) << AON_DCDC18_CS_DELAY_AON_POS)\n#define AON_DCDC18_CS_DELAY_AON_UMSK      (~(((1U << AON_DCDC18_CS_DELAY_AON_LEN) - 1) << AON_DCDC18_CS_DELAY_AON_POS))\n#define AON_DCDC18_ZVS_TD_OPT_AON         AON_DCDC18_ZVS_TD_OPT_AON\n#define AON_DCDC18_ZVS_TD_OPT_AON_POS     (4U)\n#define AON_DCDC18_ZVS_TD_OPT_AON_LEN     (3U)\n#define AON_DCDC18_ZVS_TD_OPT_AON_MSK     (((1U << AON_DCDC18_ZVS_TD_OPT_AON_LEN) - 1) << AON_DCDC18_ZVS_TD_OPT_AON_POS)\n#define AON_DCDC18_ZVS_TD_OPT_AON_UMSK    (~(((1U << AON_DCDC18_ZVS_TD_OPT_AON_LEN) - 1) << AON_DCDC18_ZVS_TD_OPT_AON_POS))\n#define AON_DCDC18_NONOVERLAP_TD_AON      AON_DCDC18_NONOVERLAP_TD_AON\n#define AON_DCDC18_NONOVERLAP_TD_AON_POS  (8U)\n#define AON_DCDC18_NONOVERLAP_TD_AON_LEN  (5U)\n#define AON_DCDC18_NONOVERLAP_TD_AON_MSK  (((1U << AON_DCDC18_NONOVERLAP_TD_AON_LEN) - 1) << AON_DCDC18_NONOVERLAP_TD_AON_POS)\n#define AON_DCDC18_NONOVERLAP_TD_AON_UMSK (~(((1U << AON_DCDC18_NONOVERLAP_TD_AON_LEN) - 1) << AON_DCDC18_NONOVERLAP_TD_AON_POS))\n#define AON_DCDC18_RC_SEL_AON             AON_DCDC18_RC_SEL_AON\n#define AON_DCDC18_RC_SEL_AON_POS         (16U)\n#define AON_DCDC18_RC_SEL_AON_LEN         (4U)\n#define AON_DCDC18_RC_SEL_AON_MSK         (((1U << AON_DCDC18_RC_SEL_AON_LEN) - 1) << AON_DCDC18_RC_SEL_AON_POS)\n#define AON_DCDC18_RC_SEL_AON_UMSK        (~(((1U << AON_DCDC18_RC_SEL_AON_LEN) - 1) << AON_DCDC18_RC_SEL_AON_POS))\n#define AON_DCDC18_CHF_SEL_AON            AON_DCDC18_CHF_SEL_AON\n#define AON_DCDC18_CHF_SEL_AON_POS        (20U)\n#define AON_DCDC18_CHF_SEL_AON_LEN        (4U)\n#define AON_DCDC18_CHF_SEL_AON_MSK        (((1U << AON_DCDC18_CHF_SEL_AON_LEN) - 1) << AON_DCDC18_CHF_SEL_AON_POS)\n#define AON_DCDC18_CHF_SEL_AON_UMSK       (~(((1U << AON_DCDC18_CHF_SEL_AON_LEN) - 1) << AON_DCDC18_CHF_SEL_AON_POS))\n#define AON_DCDC18_CFB_SEL_AON            AON_DCDC18_CFB_SEL_AON\n#define AON_DCDC18_CFB_SEL_AON_POS        (24U)\n#define AON_DCDC18_CFB_SEL_AON_LEN        (4U)\n#define AON_DCDC18_CFB_SEL_AON_MSK        (((1U << AON_DCDC18_CFB_SEL_AON_LEN) - 1) << AON_DCDC18_CFB_SEL_AON_POS)\n#define AON_DCDC18_CFB_SEL_AON_UMSK       (~(((1U << AON_DCDC18_CFB_SEL_AON_LEN) - 1) << AON_DCDC18_CFB_SEL_AON_POS))\n#define AON_DCDC18_EN_ANTIRING_AON        AON_DCDC18_EN_ANTIRING_AON\n#define AON_DCDC18_EN_ANTIRING_AON_POS    (28U)\n#define AON_DCDC18_EN_ANTIRING_AON_LEN    (1U)\n#define AON_DCDC18_EN_ANTIRING_AON_MSK    (((1U << AON_DCDC18_EN_ANTIRING_AON_LEN) - 1) << AON_DCDC18_EN_ANTIRING_AON_POS)\n#define AON_DCDC18_EN_ANTIRING_AON_UMSK   (~(((1U << AON_DCDC18_EN_ANTIRING_AON_LEN) - 1) << AON_DCDC18_EN_ANTIRING_AON_POS))\n#define AON_DCDC18_PULLDOWN_AON           AON_DCDC18_PULLDOWN_AON\n#define AON_DCDC18_PULLDOWN_AON_POS       (29U)\n#define AON_DCDC18_PULLDOWN_AON_LEN       (1U)\n#define AON_DCDC18_PULLDOWN_AON_MSK       (((1U << AON_DCDC18_PULLDOWN_AON_LEN) - 1) << AON_DCDC18_PULLDOWN_AON_POS)\n#define AON_DCDC18_PULLDOWN_AON_UMSK      (~(((1U << AON_DCDC18_PULLDOWN_AON_LEN) - 1) << AON_DCDC18_PULLDOWN_AON_POS))\n\n/* 0x81C : ldo11soc_and_dctest */\n#define AON_LDO11SOC_AND_DCTEST_OFFSET     (0x81C)\n#define AON_PU_LDO11SOC_AON                AON_PU_LDO11SOC_AON\n#define AON_PU_LDO11SOC_AON_POS            (0U)\n#define AON_PU_LDO11SOC_AON_LEN            (1U)\n#define AON_PU_LDO11SOC_AON_MSK            (((1U << AON_PU_LDO11SOC_AON_LEN) - 1) << AON_PU_LDO11SOC_AON_POS)\n#define AON_PU_LDO11SOC_AON_UMSK           (~(((1U << AON_PU_LDO11SOC_AON_LEN) - 1) << AON_PU_LDO11SOC_AON_POS))\n#define AON_LDO11SOC_SSTART_SEL_AON        AON_LDO11SOC_SSTART_SEL_AON\n#define AON_LDO11SOC_SSTART_SEL_AON_POS    (4U)\n#define AON_LDO11SOC_SSTART_SEL_AON_LEN    (1U)\n#define AON_LDO11SOC_SSTART_SEL_AON_MSK    (((1U << AON_LDO11SOC_SSTART_SEL_AON_LEN) - 1) << AON_LDO11SOC_SSTART_SEL_AON_POS)\n#define AON_LDO11SOC_SSTART_SEL_AON_UMSK   (~(((1U << AON_LDO11SOC_SSTART_SEL_AON_LEN) - 1) << AON_LDO11SOC_SSTART_SEL_AON_POS))\n#define AON_LDO11SOC_SSTART_DELAY_AON      AON_LDO11SOC_SSTART_DELAY_AON\n#define AON_LDO11SOC_SSTART_DELAY_AON_POS  (8U)\n#define AON_LDO11SOC_SSTART_DELAY_AON_LEN  (2U)\n#define AON_LDO11SOC_SSTART_DELAY_AON_MSK  (((1U << AON_LDO11SOC_SSTART_DELAY_AON_LEN) - 1) << AON_LDO11SOC_SSTART_DELAY_AON_POS)\n#define AON_LDO11SOC_SSTART_DELAY_AON_UMSK (~(((1U << AON_LDO11SOC_SSTART_DELAY_AON_LEN) - 1) << AON_LDO11SOC_SSTART_DELAY_AON_POS))\n#define AON_LDO11SOC_PULLDOWN_AON          AON_LDO11SOC_PULLDOWN_AON\n#define AON_LDO11SOC_PULLDOWN_AON_POS      (10U)\n#define AON_LDO11SOC_PULLDOWN_AON_LEN      (1U)\n#define AON_LDO11SOC_PULLDOWN_AON_MSK      (((1U << AON_LDO11SOC_PULLDOWN_AON_LEN) - 1) << AON_LDO11SOC_PULLDOWN_AON_POS)\n#define AON_LDO11SOC_PULLDOWN_AON_UMSK     (~(((1U << AON_LDO11SOC_PULLDOWN_AON_LEN) - 1) << AON_LDO11SOC_PULLDOWN_AON_POS))\n#define AON_LDO11SOC_PULLDOWN_SEL_AON      AON_LDO11SOC_PULLDOWN_SEL_AON\n#define AON_LDO11SOC_PULLDOWN_SEL_AON_POS  (11U)\n#define AON_LDO11SOC_PULLDOWN_SEL_AON_LEN  (1U)\n#define AON_LDO11SOC_PULLDOWN_SEL_AON_MSK  (((1U << AON_LDO11SOC_PULLDOWN_SEL_AON_LEN) - 1) << AON_LDO11SOC_PULLDOWN_SEL_AON_POS)\n#define AON_LDO11SOC_PULLDOWN_SEL_AON_UMSK (~(((1U << AON_LDO11SOC_PULLDOWN_SEL_AON_LEN) - 1) << AON_LDO11SOC_PULLDOWN_SEL_AON_POS))\n#define AON_LDO11SOC_VTH_SEL_AON           AON_LDO11SOC_VTH_SEL_AON\n#define AON_LDO11SOC_VTH_SEL_AON_POS       (12U)\n#define AON_LDO11SOC_VTH_SEL_AON_LEN       (2U)\n#define AON_LDO11SOC_VTH_SEL_AON_MSK       (((1U << AON_LDO11SOC_VTH_SEL_AON_LEN) - 1) << AON_LDO11SOC_VTH_SEL_AON_POS)\n#define AON_LDO11SOC_VTH_SEL_AON_UMSK      (~(((1U << AON_LDO11SOC_VTH_SEL_AON_LEN) - 1) << AON_LDO11SOC_VTH_SEL_AON_POS))\n#define AON_LDO11SOC_CC_AON                AON_LDO11SOC_CC_AON\n#define AON_LDO11SOC_CC_AON_POS            (24U)\n#define AON_LDO11SOC_CC_AON_LEN            (2U)\n#define AON_LDO11SOC_CC_AON_MSK            (((1U << AON_LDO11SOC_CC_AON_LEN) - 1) << AON_LDO11SOC_CC_AON_POS)\n#define AON_LDO11SOC_CC_AON_UMSK           (~(((1U << AON_LDO11SOC_CC_AON_LEN) - 1) << AON_LDO11SOC_CC_AON_POS))\n#define AON_LDO11SOC_RDY_AON               AON_LDO11SOC_RDY_AON\n#define AON_LDO11SOC_RDY_AON_POS           (28U)\n#define AON_LDO11SOC_RDY_AON_LEN           (1U)\n#define AON_LDO11SOC_RDY_AON_MSK           (((1U << AON_LDO11SOC_RDY_AON_LEN) - 1) << AON_LDO11SOC_RDY_AON_POS)\n#define AON_LDO11SOC_RDY_AON_UMSK          (~(((1U << AON_LDO11SOC_RDY_AON_LEN) - 1) << AON_LDO11SOC_RDY_AON_POS))\n#define AON_LDO11SOC_POWER_GOOD_AON        AON_LDO11SOC_POWER_GOOD_AON\n#define AON_LDO11SOC_POWER_GOOD_AON_POS    (29U)\n#define AON_LDO11SOC_POWER_GOOD_AON_LEN    (1U)\n#define AON_LDO11SOC_POWER_GOOD_AON_MSK    (((1U << AON_LDO11SOC_POWER_GOOD_AON_LEN) - 1) << AON_LDO11SOC_POWER_GOOD_AON_POS)\n#define AON_LDO11SOC_POWER_GOOD_AON_UMSK   (~(((1U << AON_LDO11SOC_POWER_GOOD_AON_LEN) - 1) << AON_LDO11SOC_POWER_GOOD_AON_POS))\n#define AON_PU_VDDCORE_MISC_AON            AON_PU_VDDCORE_MISC_AON\n#define AON_PU_VDDCORE_MISC_AON_POS        (30U)\n#define AON_PU_VDDCORE_MISC_AON_LEN        (1U)\n#define AON_PU_VDDCORE_MISC_AON_MSK        (((1U << AON_PU_VDDCORE_MISC_AON_LEN) - 1) << AON_PU_VDDCORE_MISC_AON_POS)\n#define AON_PU_VDDCORE_MISC_AON_UMSK       (~(((1U << AON_PU_VDDCORE_MISC_AON_LEN) - 1) << AON_PU_VDDCORE_MISC_AON_POS))\n#define AON_PMIP_DC_TP_OUT_EN_AON          AON_PMIP_DC_TP_OUT_EN_AON\n#define AON_PMIP_DC_TP_OUT_EN_AON_POS      (31U)\n#define AON_PMIP_DC_TP_OUT_EN_AON_LEN      (1U)\n#define AON_PMIP_DC_TP_OUT_EN_AON_MSK      (((1U << AON_PMIP_DC_TP_OUT_EN_AON_LEN) - 1) << AON_PMIP_DC_TP_OUT_EN_AON_POS)\n#define AON_PMIP_DC_TP_OUT_EN_AON_UMSK     (~(((1U << AON_PMIP_DC_TP_OUT_EN_AON_LEN) - 1) << AON_PMIP_DC_TP_OUT_EN_AON_POS))\n\n/* 0x820 : psw_irrcv */\n#define AON_PSW_IRRCV_OFFSET   (0x820)\n#define AON_PU_IR_PSW_AON      AON_PU_IR_PSW_AON\n#define AON_PU_IR_PSW_AON_POS  (0U)\n#define AON_PU_IR_PSW_AON_LEN  (1U)\n#define AON_PU_IR_PSW_AON_MSK  (((1U << AON_PU_IR_PSW_AON_LEN) - 1) << AON_PU_IR_PSW_AON_POS)\n#define AON_PU_IR_PSW_AON_UMSK (~(((1U << AON_PU_IR_PSW_AON_LEN) - 1) << AON_PU_IR_PSW_AON_POS))\n\n/* 0x880 : rf_top_aon */\n#define AON_RF_TOP_AON_OFFSET             (0x880)\n#define AON_PU_MBG_AON                    AON_PU_MBG_AON\n#define AON_PU_MBG_AON_POS                (0U)\n#define AON_PU_MBG_AON_LEN                (1U)\n#define AON_PU_MBG_AON_MSK                (((1U << AON_PU_MBG_AON_LEN) - 1) << AON_PU_MBG_AON_POS)\n#define AON_PU_MBG_AON_UMSK               (~(((1U << AON_PU_MBG_AON_LEN) - 1) << AON_PU_MBG_AON_POS))\n#define AON_PU_LDO15RF_AON                AON_PU_LDO15RF_AON\n#define AON_PU_LDO15RF_AON_POS            (1U)\n#define AON_PU_LDO15RF_AON_LEN            (1U)\n#define AON_PU_LDO15RF_AON_MSK            (((1U << AON_PU_LDO15RF_AON_LEN) - 1) << AON_PU_LDO15RF_AON_POS)\n#define AON_PU_LDO15RF_AON_UMSK           (~(((1U << AON_PU_LDO15RF_AON_LEN) - 1) << AON_PU_LDO15RF_AON_POS))\n#define AON_PU_SFREG_AON                  AON_PU_SFREG_AON\n#define AON_PU_SFREG_AON_POS              (2U)\n#define AON_PU_SFREG_AON_LEN              (1U)\n#define AON_PU_SFREG_AON_MSK              (((1U << AON_PU_SFREG_AON_LEN) - 1) << AON_PU_SFREG_AON_POS)\n#define AON_PU_SFREG_AON_UMSK             (~(((1U << AON_PU_SFREG_AON_LEN) - 1) << AON_PU_SFREG_AON_POS))\n#define AON_PU_XTAL_BUF_AON               AON_PU_XTAL_BUF_AON\n#define AON_PU_XTAL_BUF_AON_POS           (4U)\n#define AON_PU_XTAL_BUF_AON_LEN           (1U)\n#define AON_PU_XTAL_BUF_AON_MSK           (((1U << AON_PU_XTAL_BUF_AON_LEN) - 1) << AON_PU_XTAL_BUF_AON_POS)\n#define AON_PU_XTAL_BUF_AON_UMSK          (~(((1U << AON_PU_XTAL_BUF_AON_LEN) - 1) << AON_PU_XTAL_BUF_AON_POS))\n#define AON_PU_XTAL_AON                   AON_PU_XTAL_AON\n#define AON_PU_XTAL_AON_POS               (5U)\n#define AON_PU_XTAL_AON_LEN               (1U)\n#define AON_PU_XTAL_AON_MSK               (((1U << AON_PU_XTAL_AON_LEN) - 1) << AON_PU_XTAL_AON_POS)\n#define AON_PU_XTAL_AON_UMSK              (~(((1U << AON_PU_XTAL_AON_LEN) - 1) << AON_PU_XTAL_AON_POS))\n#define AON_LDO15RF_SSTART_SEL_AON        AON_LDO15RF_SSTART_SEL_AON\n#define AON_LDO15RF_SSTART_SEL_AON_POS    (8U)\n#define AON_LDO15RF_SSTART_SEL_AON_LEN    (1U)\n#define AON_LDO15RF_SSTART_SEL_AON_MSK    (((1U << AON_LDO15RF_SSTART_SEL_AON_LEN) - 1) << AON_LDO15RF_SSTART_SEL_AON_POS)\n#define AON_LDO15RF_SSTART_SEL_AON_UMSK   (~(((1U << AON_LDO15RF_SSTART_SEL_AON_LEN) - 1) << AON_LDO15RF_SSTART_SEL_AON_POS))\n#define AON_LDO15RF_SSTART_DELAY_AON      AON_LDO15RF_SSTART_DELAY_AON\n#define AON_LDO15RF_SSTART_DELAY_AON_POS  (9U)\n#define AON_LDO15RF_SSTART_DELAY_AON_LEN  (2U)\n#define AON_LDO15RF_SSTART_DELAY_AON_MSK  (((1U << AON_LDO15RF_SSTART_DELAY_AON_LEN) - 1) << AON_LDO15RF_SSTART_DELAY_AON_POS)\n#define AON_LDO15RF_SSTART_DELAY_AON_UMSK (~(((1U << AON_LDO15RF_SSTART_DELAY_AON_LEN) - 1) << AON_LDO15RF_SSTART_DELAY_AON_POS))\n#define AON_LDO15RF_PULLDOWN_AON          AON_LDO15RF_PULLDOWN_AON\n#define AON_LDO15RF_PULLDOWN_AON_POS      (12U)\n#define AON_LDO15RF_PULLDOWN_AON_LEN      (1U)\n#define AON_LDO15RF_PULLDOWN_AON_MSK      (((1U << AON_LDO15RF_PULLDOWN_AON_LEN) - 1) << AON_LDO15RF_PULLDOWN_AON_POS)\n#define AON_LDO15RF_PULLDOWN_AON_UMSK     (~(((1U << AON_LDO15RF_PULLDOWN_AON_LEN) - 1) << AON_LDO15RF_PULLDOWN_AON_POS))\n#define AON_LDO15RF_PULLDOWN_SEL_AON      AON_LDO15RF_PULLDOWN_SEL_AON\n#define AON_LDO15RF_PULLDOWN_SEL_AON_POS  (13U)\n#define AON_LDO15RF_PULLDOWN_SEL_AON_LEN  (1U)\n#define AON_LDO15RF_PULLDOWN_SEL_AON_MSK  (((1U << AON_LDO15RF_PULLDOWN_SEL_AON_LEN) - 1) << AON_LDO15RF_PULLDOWN_SEL_AON_POS)\n#define AON_LDO15RF_PULLDOWN_SEL_AON_UMSK (~(((1U << AON_LDO15RF_PULLDOWN_SEL_AON_LEN) - 1) << AON_LDO15RF_PULLDOWN_SEL_AON_POS))\n#define AON_LDO15RF_VOUT_SEL_AON          AON_LDO15RF_VOUT_SEL_AON\n#define AON_LDO15RF_VOUT_SEL_AON_POS      (16U)\n#define AON_LDO15RF_VOUT_SEL_AON_LEN      (3U)\n#define AON_LDO15RF_VOUT_SEL_AON_MSK      (((1U << AON_LDO15RF_VOUT_SEL_AON_LEN) - 1) << AON_LDO15RF_VOUT_SEL_AON_POS)\n#define AON_LDO15RF_VOUT_SEL_AON_UMSK     (~(((1U << AON_LDO15RF_VOUT_SEL_AON_LEN) - 1) << AON_LDO15RF_VOUT_SEL_AON_POS))\n#define AON_LDO15RF_CC_AON                AON_LDO15RF_CC_AON\n#define AON_LDO15RF_CC_AON_POS            (24U)\n#define AON_LDO15RF_CC_AON_LEN            (2U)\n#define AON_LDO15RF_CC_AON_MSK            (((1U << AON_LDO15RF_CC_AON_LEN) - 1) << AON_LDO15RF_CC_AON_POS)\n#define AON_LDO15RF_CC_AON_UMSK           (~(((1U << AON_LDO15RF_CC_AON_LEN) - 1) << AON_LDO15RF_CC_AON_POS))\n#define AON_LDO15RF_BYPASS_AON            AON_LDO15RF_BYPASS_AON\n#define AON_LDO15RF_BYPASS_AON_POS        (28U)\n#define AON_LDO15RF_BYPASS_AON_LEN        (1U)\n#define AON_LDO15RF_BYPASS_AON_MSK        (((1U << AON_LDO15RF_BYPASS_AON_LEN) - 1) << AON_LDO15RF_BYPASS_AON_POS)\n#define AON_LDO15RF_BYPASS_AON_UMSK       (~(((1U << AON_LDO15RF_BYPASS_AON_LEN) - 1) << AON_LDO15RF_BYPASS_AON_POS))\n\n/* 0x884 : xtal_cfg */\n#define AON_XTAL_CFG_OFFSET             (0x884)\n#define AON_XTAL_BK_AON                 AON_XTAL_BK_AON\n#define AON_XTAL_BK_AON_POS             (0U)\n#define AON_XTAL_BK_AON_LEN             (2U)\n#define AON_XTAL_BK_AON_MSK             (((1U << AON_XTAL_BK_AON_LEN) - 1) << AON_XTAL_BK_AON_POS)\n#define AON_XTAL_BK_AON_UMSK            (~(((1U << AON_XTAL_BK_AON_LEN) - 1) << AON_XTAL_BK_AON_POS))\n#define AON_XTAL_CAPCODE_EXTRA_AON      AON_XTAL_CAPCODE_EXTRA_AON\n#define AON_XTAL_CAPCODE_EXTRA_AON_POS  (2U)\n#define AON_XTAL_CAPCODE_EXTRA_AON_LEN  (1U)\n#define AON_XTAL_CAPCODE_EXTRA_AON_MSK  (((1U << AON_XTAL_CAPCODE_EXTRA_AON_LEN) - 1) << AON_XTAL_CAPCODE_EXTRA_AON_POS)\n#define AON_XTAL_CAPCODE_EXTRA_AON_UMSK (~(((1U << AON_XTAL_CAPCODE_EXTRA_AON_LEN) - 1) << AON_XTAL_CAPCODE_EXTRA_AON_POS))\n#define AON_XTAL_EXT_SEL_AON            AON_XTAL_EXT_SEL_AON\n#define AON_XTAL_EXT_SEL_AON_POS        (3U)\n#define AON_XTAL_EXT_SEL_AON_LEN        (1U)\n#define AON_XTAL_EXT_SEL_AON_MSK        (((1U << AON_XTAL_EXT_SEL_AON_LEN) - 1) << AON_XTAL_EXT_SEL_AON_POS)\n#define AON_XTAL_EXT_SEL_AON_UMSK       (~(((1U << AON_XTAL_EXT_SEL_AON_LEN) - 1) << AON_XTAL_EXT_SEL_AON_POS))\n#define AON_XTAL_BUF_EN_AON             AON_XTAL_BUF_EN_AON\n#define AON_XTAL_BUF_EN_AON_POS         (4U)\n#define AON_XTAL_BUF_EN_AON_LEN         (4U)\n#define AON_XTAL_BUF_EN_AON_MSK         (((1U << AON_XTAL_BUF_EN_AON_LEN) - 1) << AON_XTAL_BUF_EN_AON_POS)\n#define AON_XTAL_BUF_EN_AON_UMSK        (~(((1U << AON_XTAL_BUF_EN_AON_LEN) - 1) << AON_XTAL_BUF_EN_AON_POS))\n#define AON_XTAL_BUF_HP_AON             AON_XTAL_BUF_HP_AON\n#define AON_XTAL_BUF_HP_AON_POS         (8U)\n#define AON_XTAL_BUF_HP_AON_LEN         (4U)\n#define AON_XTAL_BUF_HP_AON_MSK         (((1U << AON_XTAL_BUF_HP_AON_LEN) - 1) << AON_XTAL_BUF_HP_AON_POS)\n#define AON_XTAL_BUF_HP_AON_UMSK        (~(((1U << AON_XTAL_BUF_HP_AON_LEN) - 1) << AON_XTAL_BUF_HP_AON_POS))\n#define AON_XTAL_FAST_STARTUP_AON       AON_XTAL_FAST_STARTUP_AON\n#define AON_XTAL_FAST_STARTUP_AON_POS   (12U)\n#define AON_XTAL_FAST_STARTUP_AON_LEN   (1U)\n#define AON_XTAL_FAST_STARTUP_AON_MSK   (((1U << AON_XTAL_FAST_STARTUP_AON_LEN) - 1) << AON_XTAL_FAST_STARTUP_AON_POS)\n#define AON_XTAL_FAST_STARTUP_AON_UMSK  (~(((1U << AON_XTAL_FAST_STARTUP_AON_LEN) - 1) << AON_XTAL_FAST_STARTUP_AON_POS))\n#define AON_XTAL_SLEEP_AON              AON_XTAL_SLEEP_AON\n#define AON_XTAL_SLEEP_AON_POS          (13U)\n#define AON_XTAL_SLEEP_AON_LEN          (1U)\n#define AON_XTAL_SLEEP_AON_MSK          (((1U << AON_XTAL_SLEEP_AON_LEN) - 1) << AON_XTAL_SLEEP_AON_POS)\n#define AON_XTAL_SLEEP_AON_UMSK         (~(((1U << AON_XTAL_SLEEP_AON_LEN) - 1) << AON_XTAL_SLEEP_AON_POS))\n#define AON_XTAL_AMP_CTRL_AON           AON_XTAL_AMP_CTRL_AON\n#define AON_XTAL_AMP_CTRL_AON_POS       (14U)\n#define AON_XTAL_AMP_CTRL_AON_LEN       (2U)\n#define AON_XTAL_AMP_CTRL_AON_MSK       (((1U << AON_XTAL_AMP_CTRL_AON_LEN) - 1) << AON_XTAL_AMP_CTRL_AON_POS)\n#define AON_XTAL_AMP_CTRL_AON_UMSK      (~(((1U << AON_XTAL_AMP_CTRL_AON_LEN) - 1) << AON_XTAL_AMP_CTRL_AON_POS))\n#define AON_XTAL_CAPCODE_OUT_AON        AON_XTAL_CAPCODE_OUT_AON\n#define AON_XTAL_CAPCODE_OUT_AON_POS    (16U)\n#define AON_XTAL_CAPCODE_OUT_AON_LEN    (6U)\n#define AON_XTAL_CAPCODE_OUT_AON_MSK    (((1U << AON_XTAL_CAPCODE_OUT_AON_LEN) - 1) << AON_XTAL_CAPCODE_OUT_AON_POS)\n#define AON_XTAL_CAPCODE_OUT_AON_UMSK   (~(((1U << AON_XTAL_CAPCODE_OUT_AON_LEN) - 1) << AON_XTAL_CAPCODE_OUT_AON_POS))\n#define AON_XTAL_CAPCODE_IN_AON         AON_XTAL_CAPCODE_IN_AON\n#define AON_XTAL_CAPCODE_IN_AON_POS     (22U)\n#define AON_XTAL_CAPCODE_IN_AON_LEN     (6U)\n#define AON_XTAL_CAPCODE_IN_AON_MSK     (((1U << AON_XTAL_CAPCODE_IN_AON_LEN) - 1) << AON_XTAL_CAPCODE_IN_AON_POS)\n#define AON_XTAL_CAPCODE_IN_AON_UMSK    (~(((1U << AON_XTAL_CAPCODE_IN_AON_LEN) - 1) << AON_XTAL_CAPCODE_IN_AON_POS))\n#define AON_XTAL_GM_BOOST_AON           AON_XTAL_GM_BOOST_AON\n#define AON_XTAL_GM_BOOST_AON_POS       (28U)\n#define AON_XTAL_GM_BOOST_AON_LEN       (2U)\n#define AON_XTAL_GM_BOOST_AON_MSK       (((1U << AON_XTAL_GM_BOOST_AON_LEN) - 1) << AON_XTAL_GM_BOOST_AON_POS)\n#define AON_XTAL_GM_BOOST_AON_UMSK      (~(((1U << AON_XTAL_GM_BOOST_AON_LEN) - 1) << AON_XTAL_GM_BOOST_AON_POS))\n#define AON_XTAL_RDY_SEL_AON            AON_XTAL_RDY_SEL_AON\n#define AON_XTAL_RDY_SEL_AON_POS        (30U)\n#define AON_XTAL_RDY_SEL_AON_LEN        (2U)\n#define AON_XTAL_RDY_SEL_AON_MSK        (((1U << AON_XTAL_RDY_SEL_AON_LEN) - 1) << AON_XTAL_RDY_SEL_AON_POS)\n#define AON_XTAL_RDY_SEL_AON_UMSK       (~(((1U << AON_XTAL_RDY_SEL_AON_LEN) - 1) << AON_XTAL_RDY_SEL_AON_POS))\n\n/* 0x888 : tsen */\n#define AON_TSEN_OFFSET               (0x888)\n#define AON_TSEN_REFCODE_CORNER       AON_TSEN_REFCODE_CORNER\n#define AON_TSEN_REFCODE_CORNER_POS   (0U)\n#define AON_TSEN_REFCODE_CORNER_LEN   (12U)\n#define AON_TSEN_REFCODE_CORNER_MSK   (((1U << AON_TSEN_REFCODE_CORNER_LEN) - 1) << AON_TSEN_REFCODE_CORNER_POS)\n#define AON_TSEN_REFCODE_CORNER_UMSK  (~(((1U << AON_TSEN_REFCODE_CORNER_LEN) - 1) << AON_TSEN_REFCODE_CORNER_POS))\n#define AON_TSEN_REFCODE_RFCAL        AON_TSEN_REFCODE_RFCAL\n#define AON_TSEN_REFCODE_RFCAL_POS    (16U)\n#define AON_TSEN_REFCODE_RFCAL_LEN    (12U)\n#define AON_TSEN_REFCODE_RFCAL_MSK    (((1U << AON_TSEN_REFCODE_RFCAL_LEN) - 1) << AON_TSEN_REFCODE_RFCAL_POS)\n#define AON_TSEN_REFCODE_RFCAL_UMSK   (~(((1U << AON_TSEN_REFCODE_RFCAL_LEN) - 1) << AON_TSEN_REFCODE_RFCAL_POS))\n#define AON_XTAL_RDY                  AON_XTAL_RDY\n#define AON_XTAL_RDY_POS              (28U)\n#define AON_XTAL_RDY_LEN              (1U)\n#define AON_XTAL_RDY_MSK              (((1U << AON_XTAL_RDY_LEN) - 1) << AON_XTAL_RDY_POS)\n#define AON_XTAL_RDY_UMSK             (~(((1U << AON_XTAL_RDY_LEN) - 1) << AON_XTAL_RDY_POS))\n#define AON_XTAL_INN_CFG_EN_AON       AON_XTAL_INN_CFG_EN_AON\n#define AON_XTAL_INN_CFG_EN_AON_POS   (29U)\n#define AON_XTAL_INN_CFG_EN_AON_LEN   (1U)\n#define AON_XTAL_INN_CFG_EN_AON_MSK   (((1U << AON_XTAL_INN_CFG_EN_AON_LEN) - 1) << AON_XTAL_INN_CFG_EN_AON_POS)\n#define AON_XTAL_INN_CFG_EN_AON_UMSK  (~(((1U << AON_XTAL_INN_CFG_EN_AON_LEN) - 1) << AON_XTAL_INN_CFG_EN_AON_POS))\n#define AON_XTAL_RDY_INT_SEL_AON      AON_XTAL_RDY_INT_SEL_AON\n#define AON_XTAL_RDY_INT_SEL_AON_POS  (30U)\n#define AON_XTAL_RDY_INT_SEL_AON_LEN  (2U)\n#define AON_XTAL_RDY_INT_SEL_AON_MSK  (((1U << AON_XTAL_RDY_INT_SEL_AON_LEN) - 1) << AON_XTAL_RDY_INT_SEL_AON_POS)\n#define AON_XTAL_RDY_INT_SEL_AON_UMSK (~(((1U << AON_XTAL_RDY_INT_SEL_AON_LEN) - 1) << AON_XTAL_RDY_INT_SEL_AON_POS))\n\n/* 0x900 : acomp0_ctrl */\n#define AON_ACOMP0_CTRL_OFFSET    (0x900)\n#define AON_ACOMP0_EN             AON_ACOMP0_EN\n#define AON_ACOMP0_EN_POS         (0U)\n#define AON_ACOMP0_EN_LEN         (1U)\n#define AON_ACOMP0_EN_MSK         (((1U << AON_ACOMP0_EN_LEN) - 1) << AON_ACOMP0_EN_POS)\n#define AON_ACOMP0_EN_UMSK        (~(((1U << AON_ACOMP0_EN_LEN) - 1) << AON_ACOMP0_EN_POS))\n#define AON_ACOMP0_HYST_SELN      AON_ACOMP0_HYST_SELN\n#define AON_ACOMP0_HYST_SELN_POS  (4U)\n#define AON_ACOMP0_HYST_SELN_LEN  (3U)\n#define AON_ACOMP0_HYST_SELN_MSK  (((1U << AON_ACOMP0_HYST_SELN_LEN) - 1) << AON_ACOMP0_HYST_SELN_POS)\n#define AON_ACOMP0_HYST_SELN_UMSK (~(((1U << AON_ACOMP0_HYST_SELN_LEN) - 1) << AON_ACOMP0_HYST_SELN_POS))\n#define AON_ACOMP0_HYST_SELP      AON_ACOMP0_HYST_SELP\n#define AON_ACOMP0_HYST_SELP_POS  (7U)\n#define AON_ACOMP0_HYST_SELP_LEN  (3U)\n#define AON_ACOMP0_HYST_SELP_MSK  (((1U << AON_ACOMP0_HYST_SELP_LEN) - 1) << AON_ACOMP0_HYST_SELP_POS)\n#define AON_ACOMP0_HYST_SELP_UMSK (~(((1U << AON_ACOMP0_HYST_SELP_LEN) - 1) << AON_ACOMP0_HYST_SELP_POS))\n#define AON_ACOMP0_BIAS_PROG      AON_ACOMP0_BIAS_PROG\n#define AON_ACOMP0_BIAS_PROG_POS  (10U)\n#define AON_ACOMP0_BIAS_PROG_LEN  (2U)\n#define AON_ACOMP0_BIAS_PROG_MSK  (((1U << AON_ACOMP0_BIAS_PROG_LEN) - 1) << AON_ACOMP0_BIAS_PROG_POS)\n#define AON_ACOMP0_BIAS_PROG_UMSK (~(((1U << AON_ACOMP0_BIAS_PROG_LEN) - 1) << AON_ACOMP0_BIAS_PROG_POS))\n#define AON_ACOMP0_LEVEL_SEL      AON_ACOMP0_LEVEL_SEL\n#define AON_ACOMP0_LEVEL_SEL_POS  (12U)\n#define AON_ACOMP0_LEVEL_SEL_LEN  (6U)\n#define AON_ACOMP0_LEVEL_SEL_MSK  (((1U << AON_ACOMP0_LEVEL_SEL_LEN) - 1) << AON_ACOMP0_LEVEL_SEL_POS)\n#define AON_ACOMP0_LEVEL_SEL_UMSK (~(((1U << AON_ACOMP0_LEVEL_SEL_LEN) - 1) << AON_ACOMP0_LEVEL_SEL_POS))\n#define AON_ACOMP0_NEG_SEL        AON_ACOMP0_NEG_SEL\n#define AON_ACOMP0_NEG_SEL_POS    (18U)\n#define AON_ACOMP0_NEG_SEL_LEN    (4U)\n#define AON_ACOMP0_NEG_SEL_MSK    (((1U << AON_ACOMP0_NEG_SEL_LEN) - 1) << AON_ACOMP0_NEG_SEL_POS)\n#define AON_ACOMP0_NEG_SEL_UMSK   (~(((1U << AON_ACOMP0_NEG_SEL_LEN) - 1) << AON_ACOMP0_NEG_SEL_POS))\n#define AON_ACOMP0_POS_SEL        AON_ACOMP0_POS_SEL\n#define AON_ACOMP0_POS_SEL_POS    (22U)\n#define AON_ACOMP0_POS_SEL_LEN    (4U)\n#define AON_ACOMP0_POS_SEL_MSK    (((1U << AON_ACOMP0_POS_SEL_LEN) - 1) << AON_ACOMP0_POS_SEL_POS)\n#define AON_ACOMP0_POS_SEL_UMSK   (~(((1U << AON_ACOMP0_POS_SEL_LEN) - 1) << AON_ACOMP0_POS_SEL_POS))\n#define AON_ACOMP0_MUXEN          AON_ACOMP0_MUXEN\n#define AON_ACOMP0_MUXEN_POS      (26U)\n#define AON_ACOMP0_MUXEN_LEN      (1U)\n#define AON_ACOMP0_MUXEN_MSK      (((1U << AON_ACOMP0_MUXEN_LEN) - 1) << AON_ACOMP0_MUXEN_POS)\n#define AON_ACOMP0_MUXEN_UMSK     (~(((1U << AON_ACOMP0_MUXEN_LEN) - 1) << AON_ACOMP0_MUXEN_POS))\n\n/* 0x904 : acomp1_ctrl */\n#define AON_ACOMP1_CTRL_OFFSET    (0x904)\n#define AON_ACOMP1_EN             AON_ACOMP1_EN\n#define AON_ACOMP1_EN_POS         (0U)\n#define AON_ACOMP1_EN_LEN         (1U)\n#define AON_ACOMP1_EN_MSK         (((1U << AON_ACOMP1_EN_LEN) - 1) << AON_ACOMP1_EN_POS)\n#define AON_ACOMP1_EN_UMSK        (~(((1U << AON_ACOMP1_EN_LEN) - 1) << AON_ACOMP1_EN_POS))\n#define AON_ACOMP1_HYST_SELN      AON_ACOMP1_HYST_SELN\n#define AON_ACOMP1_HYST_SELN_POS  (4U)\n#define AON_ACOMP1_HYST_SELN_LEN  (3U)\n#define AON_ACOMP1_HYST_SELN_MSK  (((1U << AON_ACOMP1_HYST_SELN_LEN) - 1) << AON_ACOMP1_HYST_SELN_POS)\n#define AON_ACOMP1_HYST_SELN_UMSK (~(((1U << AON_ACOMP1_HYST_SELN_LEN) - 1) << AON_ACOMP1_HYST_SELN_POS))\n#define AON_ACOMP1_HYST_SELP      AON_ACOMP1_HYST_SELP\n#define AON_ACOMP1_HYST_SELP_POS  (7U)\n#define AON_ACOMP1_HYST_SELP_LEN  (3U)\n#define AON_ACOMP1_HYST_SELP_MSK  (((1U << AON_ACOMP1_HYST_SELP_LEN) - 1) << AON_ACOMP1_HYST_SELP_POS)\n#define AON_ACOMP1_HYST_SELP_UMSK (~(((1U << AON_ACOMP1_HYST_SELP_LEN) - 1) << AON_ACOMP1_HYST_SELP_POS))\n#define AON_ACOMP1_BIAS_PROG      AON_ACOMP1_BIAS_PROG\n#define AON_ACOMP1_BIAS_PROG_POS  (10U)\n#define AON_ACOMP1_BIAS_PROG_LEN  (2U)\n#define AON_ACOMP1_BIAS_PROG_MSK  (((1U << AON_ACOMP1_BIAS_PROG_LEN) - 1) << AON_ACOMP1_BIAS_PROG_POS)\n#define AON_ACOMP1_BIAS_PROG_UMSK (~(((1U << AON_ACOMP1_BIAS_PROG_LEN) - 1) << AON_ACOMP1_BIAS_PROG_POS))\n#define AON_ACOMP1_LEVEL_SEL      AON_ACOMP1_LEVEL_SEL\n#define AON_ACOMP1_LEVEL_SEL_POS  (12U)\n#define AON_ACOMP1_LEVEL_SEL_LEN  (6U)\n#define AON_ACOMP1_LEVEL_SEL_MSK  (((1U << AON_ACOMP1_LEVEL_SEL_LEN) - 1) << AON_ACOMP1_LEVEL_SEL_POS)\n#define AON_ACOMP1_LEVEL_SEL_UMSK (~(((1U << AON_ACOMP1_LEVEL_SEL_LEN) - 1) << AON_ACOMP1_LEVEL_SEL_POS))\n#define AON_ACOMP1_NEG_SEL        AON_ACOMP1_NEG_SEL\n#define AON_ACOMP1_NEG_SEL_POS    (18U)\n#define AON_ACOMP1_NEG_SEL_LEN    (4U)\n#define AON_ACOMP1_NEG_SEL_MSK    (((1U << AON_ACOMP1_NEG_SEL_LEN) - 1) << AON_ACOMP1_NEG_SEL_POS)\n#define AON_ACOMP1_NEG_SEL_UMSK   (~(((1U << AON_ACOMP1_NEG_SEL_LEN) - 1) << AON_ACOMP1_NEG_SEL_POS))\n#define AON_ACOMP1_POS_SEL        AON_ACOMP1_POS_SEL\n#define AON_ACOMP1_POS_SEL_POS    (22U)\n#define AON_ACOMP1_POS_SEL_LEN    (4U)\n#define AON_ACOMP1_POS_SEL_MSK    (((1U << AON_ACOMP1_POS_SEL_LEN) - 1) << AON_ACOMP1_POS_SEL_POS)\n#define AON_ACOMP1_POS_SEL_UMSK   (~(((1U << AON_ACOMP1_POS_SEL_LEN) - 1) << AON_ACOMP1_POS_SEL_POS))\n#define AON_ACOMP1_MUXEN          AON_ACOMP1_MUXEN\n#define AON_ACOMP1_MUXEN_POS      (26U)\n#define AON_ACOMP1_MUXEN_LEN      (1U)\n#define AON_ACOMP1_MUXEN_MSK      (((1U << AON_ACOMP1_MUXEN_LEN) - 1) << AON_ACOMP1_MUXEN_POS)\n#define AON_ACOMP1_MUXEN_UMSK     (~(((1U << AON_ACOMP1_MUXEN_LEN) - 1) << AON_ACOMP1_MUXEN_POS))\n\n/* 0x908 : acomp_ctrl */\n#define AON_ACOMP_CTRL_OFFSET    (0x908)\n#define AON_ACOMP1_RSTN_ANA      AON_ACOMP1_RSTN_ANA\n#define AON_ACOMP1_RSTN_ANA_POS  (0U)\n#define AON_ACOMP1_RSTN_ANA_LEN  (1U)\n#define AON_ACOMP1_RSTN_ANA_MSK  (((1U << AON_ACOMP1_RSTN_ANA_LEN) - 1) << AON_ACOMP1_RSTN_ANA_POS)\n#define AON_ACOMP1_RSTN_ANA_UMSK (~(((1U << AON_ACOMP1_RSTN_ANA_LEN) - 1) << AON_ACOMP1_RSTN_ANA_POS))\n#define AON_ACOMP0_RSTN_ANA      AON_ACOMP0_RSTN_ANA\n#define AON_ACOMP0_RSTN_ANA_POS  (1U)\n#define AON_ACOMP0_RSTN_ANA_LEN  (1U)\n#define AON_ACOMP0_RSTN_ANA_MSK  (((1U << AON_ACOMP0_RSTN_ANA_LEN) - 1) << AON_ACOMP0_RSTN_ANA_POS)\n#define AON_ACOMP0_RSTN_ANA_UMSK (~(((1U << AON_ACOMP0_RSTN_ANA_LEN) - 1) << AON_ACOMP0_RSTN_ANA_POS))\n#define AON_ACOMP1_TEST_EN       AON_ACOMP1_TEST_EN\n#define AON_ACOMP1_TEST_EN_POS   (8U)\n#define AON_ACOMP1_TEST_EN_LEN   (1U)\n#define AON_ACOMP1_TEST_EN_MSK   (((1U << AON_ACOMP1_TEST_EN_LEN) - 1) << AON_ACOMP1_TEST_EN_POS)\n#define AON_ACOMP1_TEST_EN_UMSK  (~(((1U << AON_ACOMP1_TEST_EN_LEN) - 1) << AON_ACOMP1_TEST_EN_POS))\n#define AON_ACOMP0_TEST_EN       AON_ACOMP0_TEST_EN\n#define AON_ACOMP0_TEST_EN_POS   (9U)\n#define AON_ACOMP0_TEST_EN_LEN   (1U)\n#define AON_ACOMP0_TEST_EN_MSK   (((1U << AON_ACOMP0_TEST_EN_LEN) - 1) << AON_ACOMP0_TEST_EN_POS)\n#define AON_ACOMP0_TEST_EN_UMSK  (~(((1U << AON_ACOMP0_TEST_EN_LEN) - 1) << AON_ACOMP0_TEST_EN_POS))\n#define AON_ACOMP1_TEST_SEL      AON_ACOMP1_TEST_SEL\n#define AON_ACOMP1_TEST_SEL_POS  (10U)\n#define AON_ACOMP1_TEST_SEL_LEN  (2U)\n#define AON_ACOMP1_TEST_SEL_MSK  (((1U << AON_ACOMP1_TEST_SEL_LEN) - 1) << AON_ACOMP1_TEST_SEL_POS)\n#define AON_ACOMP1_TEST_SEL_UMSK (~(((1U << AON_ACOMP1_TEST_SEL_LEN) - 1) << AON_ACOMP1_TEST_SEL_POS))\n#define AON_ACOMP0_TEST_SEL      AON_ACOMP0_TEST_SEL\n#define AON_ACOMP0_TEST_SEL_POS  (12U)\n#define AON_ACOMP0_TEST_SEL_LEN  (2U)\n#define AON_ACOMP0_TEST_SEL_MSK  (((1U << AON_ACOMP0_TEST_SEL_LEN) - 1) << AON_ACOMP0_TEST_SEL_POS)\n#define AON_ACOMP0_TEST_SEL_UMSK (~(((1U << AON_ACOMP0_TEST_SEL_LEN) - 1) << AON_ACOMP0_TEST_SEL_POS))\n#define AON_ACOMP1_OUT_RAW       AON_ACOMP1_OUT_RAW\n#define AON_ACOMP1_OUT_RAW_POS   (17U)\n#define AON_ACOMP1_OUT_RAW_LEN   (1U)\n#define AON_ACOMP1_OUT_RAW_MSK   (((1U << AON_ACOMP1_OUT_RAW_LEN) - 1) << AON_ACOMP1_OUT_RAW_POS)\n#define AON_ACOMP1_OUT_RAW_UMSK  (~(((1U << AON_ACOMP1_OUT_RAW_LEN) - 1) << AON_ACOMP1_OUT_RAW_POS))\n#define AON_ACOMP0_OUT_RAW       AON_ACOMP0_OUT_RAW\n#define AON_ACOMP0_OUT_RAW_POS   (19U)\n#define AON_ACOMP0_OUT_RAW_LEN   (1U)\n#define AON_ACOMP0_OUT_RAW_MSK   (((1U << AON_ACOMP0_OUT_RAW_LEN) - 1) << AON_ACOMP0_OUT_RAW_POS)\n#define AON_ACOMP0_OUT_RAW_UMSK  (~(((1U << AON_ACOMP0_OUT_RAW_LEN) - 1) << AON_ACOMP0_OUT_RAW_POS))\n#define AON_ACOMP_RESERVED       AON_ACOMP_RESERVED\n#define AON_ACOMP_RESERVED_POS   (24U)\n#define AON_ACOMP_RESERVED_LEN   (8U)\n#define AON_ACOMP_RESERVED_MSK   (((1U << AON_ACOMP_RESERVED_LEN) - 1) << AON_ACOMP_RESERVED_POS)\n#define AON_ACOMP_RESERVED_UMSK  (~(((1U << AON_ACOMP_RESERVED_LEN) - 1) << AON_ACOMP_RESERVED_POS))\n\n/* 0x90C : gpadc_reg_cmd */\n#define AON_GPADC_REG_CMD_OFFSET        (0x90C)\n#define AON_GPADC_GLOBAL_EN             AON_GPADC_GLOBAL_EN\n#define AON_GPADC_GLOBAL_EN_POS         (0U)\n#define AON_GPADC_GLOBAL_EN_LEN         (1U)\n#define AON_GPADC_GLOBAL_EN_MSK         (((1U << AON_GPADC_GLOBAL_EN_LEN) - 1) << AON_GPADC_GLOBAL_EN_POS)\n#define AON_GPADC_GLOBAL_EN_UMSK        (~(((1U << AON_GPADC_GLOBAL_EN_LEN) - 1) << AON_GPADC_GLOBAL_EN_POS))\n#define AON_GPADC_CONV_START            AON_GPADC_CONV_START\n#define AON_GPADC_CONV_START_POS        (1U)\n#define AON_GPADC_CONV_START_LEN        (1U)\n#define AON_GPADC_CONV_START_MSK        (((1U << AON_GPADC_CONV_START_LEN) - 1) << AON_GPADC_CONV_START_POS)\n#define AON_GPADC_CONV_START_UMSK       (~(((1U << AON_GPADC_CONV_START_LEN) - 1) << AON_GPADC_CONV_START_POS))\n#define AON_GPADC_SOFT_RST              AON_GPADC_SOFT_RST\n#define AON_GPADC_SOFT_RST_POS          (2U)\n#define AON_GPADC_SOFT_RST_LEN          (1U)\n#define AON_GPADC_SOFT_RST_MSK          (((1U << AON_GPADC_SOFT_RST_LEN) - 1) << AON_GPADC_SOFT_RST_POS)\n#define AON_GPADC_SOFT_RST_UMSK         (~(((1U << AON_GPADC_SOFT_RST_LEN) - 1) << AON_GPADC_SOFT_RST_POS))\n#define AON_GPADC_NEG_SEL               AON_GPADC_NEG_SEL\n#define AON_GPADC_NEG_SEL_POS           (3U)\n#define AON_GPADC_NEG_SEL_LEN           (5U)\n#define AON_GPADC_NEG_SEL_MSK           (((1U << AON_GPADC_NEG_SEL_LEN) - 1) << AON_GPADC_NEG_SEL_POS)\n#define AON_GPADC_NEG_SEL_UMSK          (~(((1U << AON_GPADC_NEG_SEL_LEN) - 1) << AON_GPADC_NEG_SEL_POS))\n#define AON_GPADC_POS_SEL               AON_GPADC_POS_SEL\n#define AON_GPADC_POS_SEL_POS           (8U)\n#define AON_GPADC_POS_SEL_LEN           (5U)\n#define AON_GPADC_POS_SEL_MSK           (((1U << AON_GPADC_POS_SEL_LEN) - 1) << AON_GPADC_POS_SEL_POS)\n#define AON_GPADC_POS_SEL_UMSK          (~(((1U << AON_GPADC_POS_SEL_LEN) - 1) << AON_GPADC_POS_SEL_POS))\n#define AON_GPADC_NEG_GND               AON_GPADC_NEG_GND\n#define AON_GPADC_NEG_GND_POS           (13U)\n#define AON_GPADC_NEG_GND_LEN           (1U)\n#define AON_GPADC_NEG_GND_MSK           (((1U << AON_GPADC_NEG_GND_LEN) - 1) << AON_GPADC_NEG_GND_POS)\n#define AON_GPADC_NEG_GND_UMSK          (~(((1U << AON_GPADC_NEG_GND_LEN) - 1) << AON_GPADC_NEG_GND_POS))\n#define AON_GPADC_MICBIAS_EN            AON_GPADC_MICBIAS_EN\n#define AON_GPADC_MICBIAS_EN_POS        (14U)\n#define AON_GPADC_MICBIAS_EN_LEN        (1U)\n#define AON_GPADC_MICBIAS_EN_MSK        (((1U << AON_GPADC_MICBIAS_EN_LEN) - 1) << AON_GPADC_MICBIAS_EN_POS)\n#define AON_GPADC_MICBIAS_EN_UMSK       (~(((1U << AON_GPADC_MICBIAS_EN_LEN) - 1) << AON_GPADC_MICBIAS_EN_POS))\n#define AON_GPADC_MICPGA_EN             AON_GPADC_MICPGA_EN\n#define AON_GPADC_MICPGA_EN_POS         (15U)\n#define AON_GPADC_MICPGA_EN_LEN         (1U)\n#define AON_GPADC_MICPGA_EN_MSK         (((1U << AON_GPADC_MICPGA_EN_LEN) - 1) << AON_GPADC_MICPGA_EN_POS)\n#define AON_GPADC_MICPGA_EN_UMSK        (~(((1U << AON_GPADC_MICPGA_EN_LEN) - 1) << AON_GPADC_MICPGA_EN_POS))\n#define AON_GPADC_BYP_MICBOOST          AON_GPADC_BYP_MICBOOST\n#define AON_GPADC_BYP_MICBOOST_POS      (16U)\n#define AON_GPADC_BYP_MICBOOST_LEN      (1U)\n#define AON_GPADC_BYP_MICBOOST_MSK      (((1U << AON_GPADC_BYP_MICBOOST_LEN) - 1) << AON_GPADC_BYP_MICBOOST_POS)\n#define AON_GPADC_BYP_MICBOOST_UMSK     (~(((1U << AON_GPADC_BYP_MICBOOST_LEN) - 1) << AON_GPADC_BYP_MICBOOST_POS))\n#define AON_GPADC_DWA_EN                AON_GPADC_DWA_EN\n#define AON_GPADC_DWA_EN_POS            (18U)\n#define AON_GPADC_DWA_EN_LEN            (1U)\n#define AON_GPADC_DWA_EN_MSK            (((1U << AON_GPADC_DWA_EN_LEN) - 1) << AON_GPADC_DWA_EN_POS)\n#define AON_GPADC_DWA_EN_UMSK           (~(((1U << AON_GPADC_DWA_EN_LEN) - 1) << AON_GPADC_DWA_EN_POS))\n#define AON_GPADC_MIC2_DIFF             AON_GPADC_MIC2_DIFF\n#define AON_GPADC_MIC2_DIFF_POS         (19U)\n#define AON_GPADC_MIC2_DIFF_LEN         (1U)\n#define AON_GPADC_MIC2_DIFF_MSK         (((1U << AON_GPADC_MIC2_DIFF_LEN) - 1) << AON_GPADC_MIC2_DIFF_POS)\n#define AON_GPADC_MIC2_DIFF_UMSK        (~(((1U << AON_GPADC_MIC2_DIFF_LEN) - 1) << AON_GPADC_MIC2_DIFF_POS))\n#define AON_GPADC_MIC1_DIFF             AON_GPADC_MIC1_DIFF\n#define AON_GPADC_MIC1_DIFF_POS         (20U)\n#define AON_GPADC_MIC1_DIFF_LEN         (1U)\n#define AON_GPADC_MIC1_DIFF_MSK         (((1U << AON_GPADC_MIC1_DIFF_LEN) - 1) << AON_GPADC_MIC1_DIFF_POS)\n#define AON_GPADC_MIC1_DIFF_UMSK        (~(((1U << AON_GPADC_MIC1_DIFF_LEN) - 1) << AON_GPADC_MIC1_DIFF_POS))\n#define AON_GPADC_MIC_PGA2_GAIN         AON_GPADC_MIC_PGA2_GAIN\n#define AON_GPADC_MIC_PGA2_GAIN_POS     (21U)\n#define AON_GPADC_MIC_PGA2_GAIN_LEN     (2U)\n#define AON_GPADC_MIC_PGA2_GAIN_MSK     (((1U << AON_GPADC_MIC_PGA2_GAIN_LEN) - 1) << AON_GPADC_MIC_PGA2_GAIN_POS)\n#define AON_GPADC_MIC_PGA2_GAIN_UMSK    (~(((1U << AON_GPADC_MIC_PGA2_GAIN_LEN) - 1) << AON_GPADC_MIC_PGA2_GAIN_POS))\n#define AON_GPADC_MICBOOST_32DB_EN      AON_GPADC_MICBOOST_32DB_EN\n#define AON_GPADC_MICBOOST_32DB_EN_POS  (23U)\n#define AON_GPADC_MICBOOST_32DB_EN_LEN  (1U)\n#define AON_GPADC_MICBOOST_32DB_EN_MSK  (((1U << AON_GPADC_MICBOOST_32DB_EN_LEN) - 1) << AON_GPADC_MICBOOST_32DB_EN_POS)\n#define AON_GPADC_MICBOOST_32DB_EN_UMSK (~(((1U << AON_GPADC_MICBOOST_32DB_EN_LEN) - 1) << AON_GPADC_MICBOOST_32DB_EN_POS))\n#define AON_GPADC_CHIP_SEN_PU           AON_GPADC_CHIP_SEN_PU\n#define AON_GPADC_CHIP_SEN_PU_POS       (27U)\n#define AON_GPADC_CHIP_SEN_PU_LEN       (1U)\n#define AON_GPADC_CHIP_SEN_PU_MSK       (((1U << AON_GPADC_CHIP_SEN_PU_LEN) - 1) << AON_GPADC_CHIP_SEN_PU_POS)\n#define AON_GPADC_CHIP_SEN_PU_UMSK      (~(((1U << AON_GPADC_CHIP_SEN_PU_LEN) - 1) << AON_GPADC_CHIP_SEN_PU_POS))\n#define AON_GPADC_SEN_SEL               AON_GPADC_SEN_SEL\n#define AON_GPADC_SEN_SEL_POS           (28U)\n#define AON_GPADC_SEN_SEL_LEN           (2U)\n#define AON_GPADC_SEN_SEL_MSK           (((1U << AON_GPADC_SEN_SEL_LEN) - 1) << AON_GPADC_SEN_SEL_POS)\n#define AON_GPADC_SEN_SEL_UMSK          (~(((1U << AON_GPADC_SEN_SEL_LEN) - 1) << AON_GPADC_SEN_SEL_POS))\n#define AON_GPADC_SEN_TEST_EN           AON_GPADC_SEN_TEST_EN\n#define AON_GPADC_SEN_TEST_EN_POS       (30U)\n#define AON_GPADC_SEN_TEST_EN_LEN       (1U)\n#define AON_GPADC_SEN_TEST_EN_MSK       (((1U << AON_GPADC_SEN_TEST_EN_LEN) - 1) << AON_GPADC_SEN_TEST_EN_POS)\n#define AON_GPADC_SEN_TEST_EN_UMSK      (~(((1U << AON_GPADC_SEN_TEST_EN_LEN) - 1) << AON_GPADC_SEN_TEST_EN_POS))\n\n/* 0x910 : gpadc_reg_config1 */\n#define AON_GPADC_REG_CONFIG1_OFFSET (0x910)\n#define AON_GPADC_CAL_OS_EN          AON_GPADC_CAL_OS_EN\n#define AON_GPADC_CAL_OS_EN_POS      (0U)\n#define AON_GPADC_CAL_OS_EN_LEN      (1U)\n#define AON_GPADC_CAL_OS_EN_MSK      (((1U << AON_GPADC_CAL_OS_EN_LEN) - 1) << AON_GPADC_CAL_OS_EN_POS)\n#define AON_GPADC_CAL_OS_EN_UMSK     (~(((1U << AON_GPADC_CAL_OS_EN_LEN) - 1) << AON_GPADC_CAL_OS_EN_POS))\n#define AON_GPADC_CONT_CONV_EN       AON_GPADC_CONT_CONV_EN\n#define AON_GPADC_CONT_CONV_EN_POS   (1U)\n#define AON_GPADC_CONT_CONV_EN_LEN   (1U)\n#define AON_GPADC_CONT_CONV_EN_MSK   (((1U << AON_GPADC_CONT_CONV_EN_LEN) - 1) << AON_GPADC_CONT_CONV_EN_POS)\n#define AON_GPADC_CONT_CONV_EN_UMSK  (~(((1U << AON_GPADC_CONT_CONV_EN_LEN) - 1) << AON_GPADC_CONT_CONV_EN_POS))\n#define AON_GPADC_RES_SEL            AON_GPADC_RES_SEL\n#define AON_GPADC_RES_SEL_POS        (2U)\n#define AON_GPADC_RES_SEL_LEN        (3U)\n#define AON_GPADC_RES_SEL_MSK        (((1U << AON_GPADC_RES_SEL_LEN) - 1) << AON_GPADC_RES_SEL_POS)\n#define AON_GPADC_RES_SEL_UMSK       (~(((1U << AON_GPADC_RES_SEL_LEN) - 1) << AON_GPADC_RES_SEL_POS))\n#define AON_GPADC_VCM_SEL_EN         AON_GPADC_VCM_SEL_EN\n#define AON_GPADC_VCM_SEL_EN_POS     (8U)\n#define AON_GPADC_VCM_SEL_EN_LEN     (1U)\n#define AON_GPADC_VCM_SEL_EN_MSK     (((1U << AON_GPADC_VCM_SEL_EN_LEN) - 1) << AON_GPADC_VCM_SEL_EN_POS)\n#define AON_GPADC_VCM_SEL_EN_UMSK    (~(((1U << AON_GPADC_VCM_SEL_EN_LEN) - 1) << AON_GPADC_VCM_SEL_EN_POS))\n#define AON_GPADC_VCM_HYST_SEL       AON_GPADC_VCM_HYST_SEL\n#define AON_GPADC_VCM_HYST_SEL_POS   (9U)\n#define AON_GPADC_VCM_HYST_SEL_LEN   (1U)\n#define AON_GPADC_VCM_HYST_SEL_MSK   (((1U << AON_GPADC_VCM_HYST_SEL_LEN) - 1) << AON_GPADC_VCM_HYST_SEL_POS)\n#define AON_GPADC_VCM_HYST_SEL_UMSK  (~(((1U << AON_GPADC_VCM_HYST_SEL_LEN) - 1) << AON_GPADC_VCM_HYST_SEL_POS))\n#define AON_GPADC_LOWV_DET_EN        AON_GPADC_LOWV_DET_EN\n#define AON_GPADC_LOWV_DET_EN_POS    (10U)\n#define AON_GPADC_LOWV_DET_EN_LEN    (1U)\n#define AON_GPADC_LOWV_DET_EN_MSK    (((1U << AON_GPADC_LOWV_DET_EN_LEN) - 1) << AON_GPADC_LOWV_DET_EN_POS)\n#define AON_GPADC_LOWV_DET_EN_UMSK   (~(((1U << AON_GPADC_LOWV_DET_EN_LEN) - 1) << AON_GPADC_LOWV_DET_EN_POS))\n#define AON_GPADC_CLK_ANA_INV        AON_GPADC_CLK_ANA_INV\n#define AON_GPADC_CLK_ANA_INV_POS    (17U)\n#define AON_GPADC_CLK_ANA_INV_LEN    (1U)\n#define AON_GPADC_CLK_ANA_INV_MSK    (((1U << AON_GPADC_CLK_ANA_INV_LEN) - 1) << AON_GPADC_CLK_ANA_INV_POS)\n#define AON_GPADC_CLK_ANA_INV_UMSK   (~(((1U << AON_GPADC_CLK_ANA_INV_LEN) - 1) << AON_GPADC_CLK_ANA_INV_POS))\n#define AON_GPADC_CLK_DIV_RATIO      AON_GPADC_CLK_DIV_RATIO\n#define AON_GPADC_CLK_DIV_RATIO_POS  (18U)\n#define AON_GPADC_CLK_DIV_RATIO_LEN  (3U)\n#define AON_GPADC_CLK_DIV_RATIO_MSK  (((1U << AON_GPADC_CLK_DIV_RATIO_LEN) - 1) << AON_GPADC_CLK_DIV_RATIO_POS)\n#define AON_GPADC_CLK_DIV_RATIO_UMSK (~(((1U << AON_GPADC_CLK_DIV_RATIO_LEN) - 1) << AON_GPADC_CLK_DIV_RATIO_POS))\n#define AON_GPADC_SCAN_LENGTH        AON_GPADC_SCAN_LENGTH\n#define AON_GPADC_SCAN_LENGTH_POS    (21U)\n#define AON_GPADC_SCAN_LENGTH_LEN    (4U)\n#define AON_GPADC_SCAN_LENGTH_MSK    (((1U << AON_GPADC_SCAN_LENGTH_LEN) - 1) << AON_GPADC_SCAN_LENGTH_POS)\n#define AON_GPADC_SCAN_LENGTH_UMSK   (~(((1U << AON_GPADC_SCAN_LENGTH_LEN) - 1) << AON_GPADC_SCAN_LENGTH_POS))\n#define AON_GPADC_SCAN_EN            AON_GPADC_SCAN_EN\n#define AON_GPADC_SCAN_EN_POS        (25U)\n#define AON_GPADC_SCAN_EN_LEN        (1U)\n#define AON_GPADC_SCAN_EN_MSK        (((1U << AON_GPADC_SCAN_EN_LEN) - 1) << AON_GPADC_SCAN_EN_POS)\n#define AON_GPADC_SCAN_EN_UMSK       (~(((1U << AON_GPADC_SCAN_EN_LEN) - 1) << AON_GPADC_SCAN_EN_POS))\n#define AON_GPADC_DITHER_EN          AON_GPADC_DITHER_EN\n#define AON_GPADC_DITHER_EN_POS      (26U)\n#define AON_GPADC_DITHER_EN_LEN      (1U)\n#define AON_GPADC_DITHER_EN_MSK      (((1U << AON_GPADC_DITHER_EN_LEN) - 1) << AON_GPADC_DITHER_EN_POS)\n#define AON_GPADC_DITHER_EN_UMSK     (~(((1U << AON_GPADC_DITHER_EN_LEN) - 1) << AON_GPADC_DITHER_EN_POS))\n#define AON_GPADC_V11_SEL            AON_GPADC_V11_SEL\n#define AON_GPADC_V11_SEL_POS        (27U)\n#define AON_GPADC_V11_SEL_LEN        (2U)\n#define AON_GPADC_V11_SEL_MSK        (((1U << AON_GPADC_V11_SEL_LEN) - 1) << AON_GPADC_V11_SEL_POS)\n#define AON_GPADC_V11_SEL_UMSK       (~(((1U << AON_GPADC_V11_SEL_LEN) - 1) << AON_GPADC_V11_SEL_POS))\n#define AON_GPADC_V18_SEL            AON_GPADC_V18_SEL\n#define AON_GPADC_V18_SEL_POS        (29U)\n#define AON_GPADC_V18_SEL_LEN        (2U)\n#define AON_GPADC_V18_SEL_MSK        (((1U << AON_GPADC_V18_SEL_LEN) - 1) << AON_GPADC_V18_SEL_POS)\n#define AON_GPADC_V18_SEL_UMSK       (~(((1U << AON_GPADC_V18_SEL_LEN) - 1) << AON_GPADC_V18_SEL_POS))\n\n/* 0x914 : gpadc_reg_config2 */\n#define AON_GPADC_REG_CONFIG2_OFFSET (0x914)\n#define AON_GPADC_DIFF_MODE          AON_GPADC_DIFF_MODE\n#define AON_GPADC_DIFF_MODE_POS      (2U)\n#define AON_GPADC_DIFF_MODE_LEN      (1U)\n#define AON_GPADC_DIFF_MODE_MSK      (((1U << AON_GPADC_DIFF_MODE_LEN) - 1) << AON_GPADC_DIFF_MODE_POS)\n#define AON_GPADC_DIFF_MODE_UMSK     (~(((1U << AON_GPADC_DIFF_MODE_LEN) - 1) << AON_GPADC_DIFF_MODE_POS))\n#define AON_GPADC_VREF_SEL           AON_GPADC_VREF_SEL\n#define AON_GPADC_VREF_SEL_POS       (3U)\n#define AON_GPADC_VREF_SEL_LEN       (1U)\n#define AON_GPADC_VREF_SEL_MSK       (((1U << AON_GPADC_VREF_SEL_LEN) - 1) << AON_GPADC_VREF_SEL_POS)\n#define AON_GPADC_VREF_SEL_UMSK      (~(((1U << AON_GPADC_VREF_SEL_LEN) - 1) << AON_GPADC_VREF_SEL_POS))\n#define AON_GPADC_VBAT_EN            AON_GPADC_VBAT_EN\n#define AON_GPADC_VBAT_EN_POS        (4U)\n#define AON_GPADC_VBAT_EN_LEN        (1U)\n#define AON_GPADC_VBAT_EN_MSK        (((1U << AON_GPADC_VBAT_EN_LEN) - 1) << AON_GPADC_VBAT_EN_POS)\n#define AON_GPADC_VBAT_EN_UMSK       (~(((1U << AON_GPADC_VBAT_EN_LEN) - 1) << AON_GPADC_VBAT_EN_POS))\n#define AON_GPADC_TSEXT_SEL          AON_GPADC_TSEXT_SEL\n#define AON_GPADC_TSEXT_SEL_POS      (5U)\n#define AON_GPADC_TSEXT_SEL_LEN      (1U)\n#define AON_GPADC_TSEXT_SEL_MSK      (((1U << AON_GPADC_TSEXT_SEL_LEN) - 1) << AON_GPADC_TSEXT_SEL_POS)\n#define AON_GPADC_TSEXT_SEL_UMSK     (~(((1U << AON_GPADC_TSEXT_SEL_LEN) - 1) << AON_GPADC_TSEXT_SEL_POS))\n#define AON_GPADC_TS_EN              AON_GPADC_TS_EN\n#define AON_GPADC_TS_EN_POS          (6U)\n#define AON_GPADC_TS_EN_LEN          (1U)\n#define AON_GPADC_TS_EN_MSK          (((1U << AON_GPADC_TS_EN_LEN) - 1) << AON_GPADC_TS_EN_POS)\n#define AON_GPADC_TS_EN_UMSK         (~(((1U << AON_GPADC_TS_EN_LEN) - 1) << AON_GPADC_TS_EN_POS))\n#define AON_GPADC_PGA_VCM            AON_GPADC_PGA_VCM\n#define AON_GPADC_PGA_VCM_POS        (7U)\n#define AON_GPADC_PGA_VCM_LEN        (2U)\n#define AON_GPADC_PGA_VCM_MSK        (((1U << AON_GPADC_PGA_VCM_LEN) - 1) << AON_GPADC_PGA_VCM_POS)\n#define AON_GPADC_PGA_VCM_UMSK       (~(((1U << AON_GPADC_PGA_VCM_LEN) - 1) << AON_GPADC_PGA_VCM_POS))\n#define AON_GPADC_PGA_OS_CAL         AON_GPADC_PGA_OS_CAL\n#define AON_GPADC_PGA_OS_CAL_POS     (9U)\n#define AON_GPADC_PGA_OS_CAL_LEN     (4U)\n#define AON_GPADC_PGA_OS_CAL_MSK     (((1U << AON_GPADC_PGA_OS_CAL_LEN) - 1) << AON_GPADC_PGA_OS_CAL_POS)\n#define AON_GPADC_PGA_OS_CAL_UMSK    (~(((1U << AON_GPADC_PGA_OS_CAL_LEN) - 1) << AON_GPADC_PGA_OS_CAL_POS))\n#define AON_GPADC_PGA_EN             AON_GPADC_PGA_EN\n#define AON_GPADC_PGA_EN_POS         (13U)\n#define AON_GPADC_PGA_EN_LEN         (1U)\n#define AON_GPADC_PGA_EN_MSK         (((1U << AON_GPADC_PGA_EN_LEN) - 1) << AON_GPADC_PGA_EN_POS)\n#define AON_GPADC_PGA_EN_UMSK        (~(((1U << AON_GPADC_PGA_EN_LEN) - 1) << AON_GPADC_PGA_EN_POS))\n#define AON_GPADC_PGA_VCMI_EN        AON_GPADC_PGA_VCMI_EN\n#define AON_GPADC_PGA_VCMI_EN_POS    (14U)\n#define AON_GPADC_PGA_VCMI_EN_LEN    (1U)\n#define AON_GPADC_PGA_VCMI_EN_MSK    (((1U << AON_GPADC_PGA_VCMI_EN_LEN) - 1) << AON_GPADC_PGA_VCMI_EN_POS)\n#define AON_GPADC_PGA_VCMI_EN_UMSK   (~(((1U << AON_GPADC_PGA_VCMI_EN_LEN) - 1) << AON_GPADC_PGA_VCMI_EN_POS))\n#define AON_GPADC_CHOP_MODE          AON_GPADC_CHOP_MODE\n#define AON_GPADC_CHOP_MODE_POS      (15U)\n#define AON_GPADC_CHOP_MODE_LEN      (2U)\n#define AON_GPADC_CHOP_MODE_MSK      (((1U << AON_GPADC_CHOP_MODE_LEN) - 1) << AON_GPADC_CHOP_MODE_POS)\n#define AON_GPADC_CHOP_MODE_UMSK     (~(((1U << AON_GPADC_CHOP_MODE_LEN) - 1) << AON_GPADC_CHOP_MODE_POS))\n#define AON_GPADC_BIAS_SEL           AON_GPADC_BIAS_SEL\n#define AON_GPADC_BIAS_SEL_POS       (17U)\n#define AON_GPADC_BIAS_SEL_LEN       (1U)\n#define AON_GPADC_BIAS_SEL_MSK       (((1U << AON_GPADC_BIAS_SEL_LEN) - 1) << AON_GPADC_BIAS_SEL_POS)\n#define AON_GPADC_BIAS_SEL_UMSK      (~(((1U << AON_GPADC_BIAS_SEL_LEN) - 1) << AON_GPADC_BIAS_SEL_POS))\n#define AON_GPADC_TEST_EN            AON_GPADC_TEST_EN\n#define AON_GPADC_TEST_EN_POS        (18U)\n#define AON_GPADC_TEST_EN_LEN        (1U)\n#define AON_GPADC_TEST_EN_MSK        (((1U << AON_GPADC_TEST_EN_LEN) - 1) << AON_GPADC_TEST_EN_POS)\n#define AON_GPADC_TEST_EN_UMSK       (~(((1U << AON_GPADC_TEST_EN_LEN) - 1) << AON_GPADC_TEST_EN_POS))\n#define AON_GPADC_TEST_SEL           AON_GPADC_TEST_SEL\n#define AON_GPADC_TEST_SEL_POS       (19U)\n#define AON_GPADC_TEST_SEL_LEN       (3U)\n#define AON_GPADC_TEST_SEL_MSK       (((1U << AON_GPADC_TEST_SEL_LEN) - 1) << AON_GPADC_TEST_SEL_POS)\n#define AON_GPADC_TEST_SEL_UMSK      (~(((1U << AON_GPADC_TEST_SEL_LEN) - 1) << AON_GPADC_TEST_SEL_POS))\n#define AON_GPADC_PGA2_GAIN          AON_GPADC_PGA2_GAIN\n#define AON_GPADC_PGA2_GAIN_POS      (22U)\n#define AON_GPADC_PGA2_GAIN_LEN      (3U)\n#define AON_GPADC_PGA2_GAIN_MSK      (((1U << AON_GPADC_PGA2_GAIN_LEN) - 1) << AON_GPADC_PGA2_GAIN_POS)\n#define AON_GPADC_PGA2_GAIN_UMSK     (~(((1U << AON_GPADC_PGA2_GAIN_LEN) - 1) << AON_GPADC_PGA2_GAIN_POS))\n#define AON_GPADC_PGA1_GAIN          AON_GPADC_PGA1_GAIN\n#define AON_GPADC_PGA1_GAIN_POS      (25U)\n#define AON_GPADC_PGA1_GAIN_LEN      (3U)\n#define AON_GPADC_PGA1_GAIN_MSK      (((1U << AON_GPADC_PGA1_GAIN_LEN) - 1) << AON_GPADC_PGA1_GAIN_POS)\n#define AON_GPADC_PGA1_GAIN_UMSK     (~(((1U << AON_GPADC_PGA1_GAIN_LEN) - 1) << AON_GPADC_PGA1_GAIN_POS))\n#define AON_GPADC_DLY_SEL            AON_GPADC_DLY_SEL\n#define AON_GPADC_DLY_SEL_POS        (28U)\n#define AON_GPADC_DLY_SEL_LEN        (3U)\n#define AON_GPADC_DLY_SEL_MSK        (((1U << AON_GPADC_DLY_SEL_LEN) - 1) << AON_GPADC_DLY_SEL_POS)\n#define AON_GPADC_DLY_SEL_UMSK       (~(((1U << AON_GPADC_DLY_SEL_LEN) - 1) << AON_GPADC_DLY_SEL_POS))\n#define AON_GPADC_TSVBE_LOW          AON_GPADC_TSVBE_LOW\n#define AON_GPADC_TSVBE_LOW_POS      (31U)\n#define AON_GPADC_TSVBE_LOW_LEN      (1U)\n#define AON_GPADC_TSVBE_LOW_MSK      (((1U << AON_GPADC_TSVBE_LOW_LEN) - 1) << AON_GPADC_TSVBE_LOW_POS)\n#define AON_GPADC_TSVBE_LOW_UMSK     (~(((1U << AON_GPADC_TSVBE_LOW_LEN) - 1) << AON_GPADC_TSVBE_LOW_POS))\n\n/* 0x918 : adc converation sequence 1 */\n#define AON_GPADC_REG_SCN_POS1_OFFSET (0x918)\n#define AON_GPADC_SCAN_POS_0          AON_GPADC_SCAN_POS_0\n#define AON_GPADC_SCAN_POS_0_POS      (0U)\n#define AON_GPADC_SCAN_POS_0_LEN      (5U)\n#define AON_GPADC_SCAN_POS_0_MSK      (((1U << AON_GPADC_SCAN_POS_0_LEN) - 1) << AON_GPADC_SCAN_POS_0_POS)\n#define AON_GPADC_SCAN_POS_0_UMSK     (~(((1U << AON_GPADC_SCAN_POS_0_LEN) - 1) << AON_GPADC_SCAN_POS_0_POS))\n#define AON_GPADC_SCAN_POS_1          AON_GPADC_SCAN_POS_1\n#define AON_GPADC_SCAN_POS_1_POS      (5U)\n#define AON_GPADC_SCAN_POS_1_LEN      (5U)\n#define AON_GPADC_SCAN_POS_1_MSK      (((1U << AON_GPADC_SCAN_POS_1_LEN) - 1) << AON_GPADC_SCAN_POS_1_POS)\n#define AON_GPADC_SCAN_POS_1_UMSK     (~(((1U << AON_GPADC_SCAN_POS_1_LEN) - 1) << AON_GPADC_SCAN_POS_1_POS))\n#define AON_GPADC_SCAN_POS_2          AON_GPADC_SCAN_POS_2\n#define AON_GPADC_SCAN_POS_2_POS      (10U)\n#define AON_GPADC_SCAN_POS_2_LEN      (5U)\n#define AON_GPADC_SCAN_POS_2_MSK      (((1U << AON_GPADC_SCAN_POS_2_LEN) - 1) << AON_GPADC_SCAN_POS_2_POS)\n#define AON_GPADC_SCAN_POS_2_UMSK     (~(((1U << AON_GPADC_SCAN_POS_2_LEN) - 1) << AON_GPADC_SCAN_POS_2_POS))\n#define AON_GPADC_SCAN_POS_3          AON_GPADC_SCAN_POS_3\n#define AON_GPADC_SCAN_POS_3_POS      (15U)\n#define AON_GPADC_SCAN_POS_3_LEN      (5U)\n#define AON_GPADC_SCAN_POS_3_MSK      (((1U << AON_GPADC_SCAN_POS_3_LEN) - 1) << AON_GPADC_SCAN_POS_3_POS)\n#define AON_GPADC_SCAN_POS_3_UMSK     (~(((1U << AON_GPADC_SCAN_POS_3_LEN) - 1) << AON_GPADC_SCAN_POS_3_POS))\n#define AON_GPADC_SCAN_POS_4          AON_GPADC_SCAN_POS_4\n#define AON_GPADC_SCAN_POS_4_POS      (20U)\n#define AON_GPADC_SCAN_POS_4_LEN      (5U)\n#define AON_GPADC_SCAN_POS_4_MSK      (((1U << AON_GPADC_SCAN_POS_4_LEN) - 1) << AON_GPADC_SCAN_POS_4_POS)\n#define AON_GPADC_SCAN_POS_4_UMSK     (~(((1U << AON_GPADC_SCAN_POS_4_LEN) - 1) << AON_GPADC_SCAN_POS_4_POS))\n#define AON_GPADC_SCAN_POS_5          AON_GPADC_SCAN_POS_5\n#define AON_GPADC_SCAN_POS_5_POS      (25U)\n#define AON_GPADC_SCAN_POS_5_LEN      (5U)\n#define AON_GPADC_SCAN_POS_5_MSK      (((1U << AON_GPADC_SCAN_POS_5_LEN) - 1) << AON_GPADC_SCAN_POS_5_POS)\n#define AON_GPADC_SCAN_POS_5_UMSK     (~(((1U << AON_GPADC_SCAN_POS_5_LEN) - 1) << AON_GPADC_SCAN_POS_5_POS))\n\n/* 0x91C : adc converation sequence 2 */\n#define AON_GPADC_REG_SCN_POS2_OFFSET (0x91C)\n#define AON_GPADC_SCAN_POS_6          AON_GPADC_SCAN_POS_6\n#define AON_GPADC_SCAN_POS_6_POS      (0U)\n#define AON_GPADC_SCAN_POS_6_LEN      (5U)\n#define AON_GPADC_SCAN_POS_6_MSK      (((1U << AON_GPADC_SCAN_POS_6_LEN) - 1) << AON_GPADC_SCAN_POS_6_POS)\n#define AON_GPADC_SCAN_POS_6_UMSK     (~(((1U << AON_GPADC_SCAN_POS_6_LEN) - 1) << AON_GPADC_SCAN_POS_6_POS))\n#define AON_GPADC_SCAN_POS_7          AON_GPADC_SCAN_POS_7\n#define AON_GPADC_SCAN_POS_7_POS      (5U)\n#define AON_GPADC_SCAN_POS_7_LEN      (5U)\n#define AON_GPADC_SCAN_POS_7_MSK      (((1U << AON_GPADC_SCAN_POS_7_LEN) - 1) << AON_GPADC_SCAN_POS_7_POS)\n#define AON_GPADC_SCAN_POS_7_UMSK     (~(((1U << AON_GPADC_SCAN_POS_7_LEN) - 1) << AON_GPADC_SCAN_POS_7_POS))\n#define AON_GPADC_SCAN_POS_8          AON_GPADC_SCAN_POS_8\n#define AON_GPADC_SCAN_POS_8_POS      (10U)\n#define AON_GPADC_SCAN_POS_8_LEN      (5U)\n#define AON_GPADC_SCAN_POS_8_MSK      (((1U << AON_GPADC_SCAN_POS_8_LEN) - 1) << AON_GPADC_SCAN_POS_8_POS)\n#define AON_GPADC_SCAN_POS_8_UMSK     (~(((1U << AON_GPADC_SCAN_POS_8_LEN) - 1) << AON_GPADC_SCAN_POS_8_POS))\n#define AON_GPADC_SCAN_POS_9          AON_GPADC_SCAN_POS_9\n#define AON_GPADC_SCAN_POS_9_POS      (15U)\n#define AON_GPADC_SCAN_POS_9_LEN      (5U)\n#define AON_GPADC_SCAN_POS_9_MSK      (((1U << AON_GPADC_SCAN_POS_9_LEN) - 1) << AON_GPADC_SCAN_POS_9_POS)\n#define AON_GPADC_SCAN_POS_9_UMSK     (~(((1U << AON_GPADC_SCAN_POS_9_LEN) - 1) << AON_GPADC_SCAN_POS_9_POS))\n#define AON_GPADC_SCAN_POS_10         AON_GPADC_SCAN_POS_10\n#define AON_GPADC_SCAN_POS_10_POS     (20U)\n#define AON_GPADC_SCAN_POS_10_LEN     (5U)\n#define AON_GPADC_SCAN_POS_10_MSK     (((1U << AON_GPADC_SCAN_POS_10_LEN) - 1) << AON_GPADC_SCAN_POS_10_POS)\n#define AON_GPADC_SCAN_POS_10_UMSK    (~(((1U << AON_GPADC_SCAN_POS_10_LEN) - 1) << AON_GPADC_SCAN_POS_10_POS))\n#define AON_GPADC_SCAN_POS_11         AON_GPADC_SCAN_POS_11\n#define AON_GPADC_SCAN_POS_11_POS     (25U)\n#define AON_GPADC_SCAN_POS_11_LEN     (5U)\n#define AON_GPADC_SCAN_POS_11_MSK     (((1U << AON_GPADC_SCAN_POS_11_LEN) - 1) << AON_GPADC_SCAN_POS_11_POS)\n#define AON_GPADC_SCAN_POS_11_UMSK    (~(((1U << AON_GPADC_SCAN_POS_11_LEN) - 1) << AON_GPADC_SCAN_POS_11_POS))\n\n/* 0x920 : adc converation sequence 3 */\n#define AON_GPADC_REG_SCN_NEG1_OFFSET (0x920)\n#define AON_GPADC_SCAN_NEG_0          AON_GPADC_SCAN_NEG_0\n#define AON_GPADC_SCAN_NEG_0_POS      (0U)\n#define AON_GPADC_SCAN_NEG_0_LEN      (5U)\n#define AON_GPADC_SCAN_NEG_0_MSK      (((1U << AON_GPADC_SCAN_NEG_0_LEN) - 1) << AON_GPADC_SCAN_NEG_0_POS)\n#define AON_GPADC_SCAN_NEG_0_UMSK     (~(((1U << AON_GPADC_SCAN_NEG_0_LEN) - 1) << AON_GPADC_SCAN_NEG_0_POS))\n#define AON_GPADC_SCAN_NEG_1          AON_GPADC_SCAN_NEG_1\n#define AON_GPADC_SCAN_NEG_1_POS      (5U)\n#define AON_GPADC_SCAN_NEG_1_LEN      (5U)\n#define AON_GPADC_SCAN_NEG_1_MSK      (((1U << AON_GPADC_SCAN_NEG_1_LEN) - 1) << AON_GPADC_SCAN_NEG_1_POS)\n#define AON_GPADC_SCAN_NEG_1_UMSK     (~(((1U << AON_GPADC_SCAN_NEG_1_LEN) - 1) << AON_GPADC_SCAN_NEG_1_POS))\n#define AON_GPADC_SCAN_NEG_2          AON_GPADC_SCAN_NEG_2\n#define AON_GPADC_SCAN_NEG_2_POS      (10U)\n#define AON_GPADC_SCAN_NEG_2_LEN      (5U)\n#define AON_GPADC_SCAN_NEG_2_MSK      (((1U << AON_GPADC_SCAN_NEG_2_LEN) - 1) << AON_GPADC_SCAN_NEG_2_POS)\n#define AON_GPADC_SCAN_NEG_2_UMSK     (~(((1U << AON_GPADC_SCAN_NEG_2_LEN) - 1) << AON_GPADC_SCAN_NEG_2_POS))\n#define AON_GPADC_SCAN_NEG_3          AON_GPADC_SCAN_NEG_3\n#define AON_GPADC_SCAN_NEG_3_POS      (15U)\n#define AON_GPADC_SCAN_NEG_3_LEN      (5U)\n#define AON_GPADC_SCAN_NEG_3_MSK      (((1U << AON_GPADC_SCAN_NEG_3_LEN) - 1) << AON_GPADC_SCAN_NEG_3_POS)\n#define AON_GPADC_SCAN_NEG_3_UMSK     (~(((1U << AON_GPADC_SCAN_NEG_3_LEN) - 1) << AON_GPADC_SCAN_NEG_3_POS))\n#define AON_GPADC_SCAN_NEG_4          AON_GPADC_SCAN_NEG_4\n#define AON_GPADC_SCAN_NEG_4_POS      (20U)\n#define AON_GPADC_SCAN_NEG_4_LEN      (5U)\n#define AON_GPADC_SCAN_NEG_4_MSK      (((1U << AON_GPADC_SCAN_NEG_4_LEN) - 1) << AON_GPADC_SCAN_NEG_4_POS)\n#define AON_GPADC_SCAN_NEG_4_UMSK     (~(((1U << AON_GPADC_SCAN_NEG_4_LEN) - 1) << AON_GPADC_SCAN_NEG_4_POS))\n#define AON_GPADC_SCAN_NEG_5          AON_GPADC_SCAN_NEG_5\n#define AON_GPADC_SCAN_NEG_5_POS      (25U)\n#define AON_GPADC_SCAN_NEG_5_LEN      (5U)\n#define AON_GPADC_SCAN_NEG_5_MSK      (((1U << AON_GPADC_SCAN_NEG_5_LEN) - 1) << AON_GPADC_SCAN_NEG_5_POS)\n#define AON_GPADC_SCAN_NEG_5_UMSK     (~(((1U << AON_GPADC_SCAN_NEG_5_LEN) - 1) << AON_GPADC_SCAN_NEG_5_POS))\n\n/* 0x924 : adc converation sequence 4 */\n#define AON_GPADC_REG_SCN_NEG2_OFFSET (0x924)\n#define AON_GPADC_SCAN_NEG_6          AON_GPADC_SCAN_NEG_6\n#define AON_GPADC_SCAN_NEG_6_POS      (0U)\n#define AON_GPADC_SCAN_NEG_6_LEN      (5U)\n#define AON_GPADC_SCAN_NEG_6_MSK      (((1U << AON_GPADC_SCAN_NEG_6_LEN) - 1) << AON_GPADC_SCAN_NEG_6_POS)\n#define AON_GPADC_SCAN_NEG_6_UMSK     (~(((1U << AON_GPADC_SCAN_NEG_6_LEN) - 1) << AON_GPADC_SCAN_NEG_6_POS))\n#define AON_GPADC_SCAN_NEG_7          AON_GPADC_SCAN_NEG_7\n#define AON_GPADC_SCAN_NEG_7_POS      (5U)\n#define AON_GPADC_SCAN_NEG_7_LEN      (5U)\n#define AON_GPADC_SCAN_NEG_7_MSK      (((1U << AON_GPADC_SCAN_NEG_7_LEN) - 1) << AON_GPADC_SCAN_NEG_7_POS)\n#define AON_GPADC_SCAN_NEG_7_UMSK     (~(((1U << AON_GPADC_SCAN_NEG_7_LEN) - 1) << AON_GPADC_SCAN_NEG_7_POS))\n#define AON_GPADC_SCAN_NEG_8          AON_GPADC_SCAN_NEG_8\n#define AON_GPADC_SCAN_NEG_8_POS      (10U)\n#define AON_GPADC_SCAN_NEG_8_LEN      (5U)\n#define AON_GPADC_SCAN_NEG_8_MSK      (((1U << AON_GPADC_SCAN_NEG_8_LEN) - 1) << AON_GPADC_SCAN_NEG_8_POS)\n#define AON_GPADC_SCAN_NEG_8_UMSK     (~(((1U << AON_GPADC_SCAN_NEG_8_LEN) - 1) << AON_GPADC_SCAN_NEG_8_POS))\n#define AON_GPADC_SCAN_NEG_9          AON_GPADC_SCAN_NEG_9\n#define AON_GPADC_SCAN_NEG_9_POS      (15U)\n#define AON_GPADC_SCAN_NEG_9_LEN      (5U)\n#define AON_GPADC_SCAN_NEG_9_MSK      (((1U << AON_GPADC_SCAN_NEG_9_LEN) - 1) << AON_GPADC_SCAN_NEG_9_POS)\n#define AON_GPADC_SCAN_NEG_9_UMSK     (~(((1U << AON_GPADC_SCAN_NEG_9_LEN) - 1) << AON_GPADC_SCAN_NEG_9_POS))\n#define AON_GPADC_SCAN_NEG_10         AON_GPADC_SCAN_NEG_10\n#define AON_GPADC_SCAN_NEG_10_POS     (20U)\n#define AON_GPADC_SCAN_NEG_10_LEN     (5U)\n#define AON_GPADC_SCAN_NEG_10_MSK     (((1U << AON_GPADC_SCAN_NEG_10_LEN) - 1) << AON_GPADC_SCAN_NEG_10_POS)\n#define AON_GPADC_SCAN_NEG_10_UMSK    (~(((1U << AON_GPADC_SCAN_NEG_10_LEN) - 1) << AON_GPADC_SCAN_NEG_10_POS))\n#define AON_GPADC_SCAN_NEG_11         AON_GPADC_SCAN_NEG_11\n#define AON_GPADC_SCAN_NEG_11_POS     (25U)\n#define AON_GPADC_SCAN_NEG_11_LEN     (5U)\n#define AON_GPADC_SCAN_NEG_11_MSK     (((1U << AON_GPADC_SCAN_NEG_11_LEN) - 1) << AON_GPADC_SCAN_NEG_11_POS)\n#define AON_GPADC_SCAN_NEG_11_UMSK    (~(((1U << AON_GPADC_SCAN_NEG_11_LEN) - 1) << AON_GPADC_SCAN_NEG_11_POS))\n\n/* 0x928 : gpadc_reg_status */\n#define AON_GPADC_REG_STATUS_OFFSET (0x928)\n#define AON_GPADC_DATA_RDY          AON_GPADC_DATA_RDY\n#define AON_GPADC_DATA_RDY_POS      (0U)\n#define AON_GPADC_DATA_RDY_LEN      (1U)\n#define AON_GPADC_DATA_RDY_MSK      (((1U << AON_GPADC_DATA_RDY_LEN) - 1) << AON_GPADC_DATA_RDY_POS)\n#define AON_GPADC_DATA_RDY_UMSK     (~(((1U << AON_GPADC_DATA_RDY_LEN) - 1) << AON_GPADC_DATA_RDY_POS))\n#define AON_GPADC_RESERVED          AON_GPADC_RESERVED\n#define AON_GPADC_RESERVED_POS      (16U)\n#define AON_GPADC_RESERVED_LEN      (16U)\n#define AON_GPADC_RESERVED_MSK      (((1U << AON_GPADC_RESERVED_LEN) - 1) << AON_GPADC_RESERVED_POS)\n#define AON_GPADC_RESERVED_UMSK     (~(((1U << AON_GPADC_RESERVED_LEN) - 1) << AON_GPADC_RESERVED_POS))\n\n/* 0x92C : gpadc_reg_isr */\n#define AON_GPADC_REG_ISR_OFFSET      (0x92C)\n#define AON_GPADC_NEG_SATUR           AON_GPADC_NEG_SATUR\n#define AON_GPADC_NEG_SATUR_POS       (0U)\n#define AON_GPADC_NEG_SATUR_LEN       (1U)\n#define AON_GPADC_NEG_SATUR_MSK       (((1U << AON_GPADC_NEG_SATUR_LEN) - 1) << AON_GPADC_NEG_SATUR_POS)\n#define AON_GPADC_NEG_SATUR_UMSK      (~(((1U << AON_GPADC_NEG_SATUR_LEN) - 1) << AON_GPADC_NEG_SATUR_POS))\n#define AON_GPADC_POS_SATUR           AON_GPADC_POS_SATUR\n#define AON_GPADC_POS_SATUR_POS       (1U)\n#define AON_GPADC_POS_SATUR_LEN       (1U)\n#define AON_GPADC_POS_SATUR_MSK       (((1U << AON_GPADC_POS_SATUR_LEN) - 1) << AON_GPADC_POS_SATUR_POS)\n#define AON_GPADC_POS_SATUR_UMSK      (~(((1U << AON_GPADC_POS_SATUR_LEN) - 1) << AON_GPADC_POS_SATUR_POS))\n#define AON_GPADC_NEG_SATUR_CLR       AON_GPADC_NEG_SATUR_CLR\n#define AON_GPADC_NEG_SATUR_CLR_POS   (4U)\n#define AON_GPADC_NEG_SATUR_CLR_LEN   (1U)\n#define AON_GPADC_NEG_SATUR_CLR_MSK   (((1U << AON_GPADC_NEG_SATUR_CLR_LEN) - 1) << AON_GPADC_NEG_SATUR_CLR_POS)\n#define AON_GPADC_NEG_SATUR_CLR_UMSK  (~(((1U << AON_GPADC_NEG_SATUR_CLR_LEN) - 1) << AON_GPADC_NEG_SATUR_CLR_POS))\n#define AON_GPADC_POS_SATUR_CLR       AON_GPADC_POS_SATUR_CLR\n#define AON_GPADC_POS_SATUR_CLR_POS   (5U)\n#define AON_GPADC_POS_SATUR_CLR_LEN   (1U)\n#define AON_GPADC_POS_SATUR_CLR_MSK   (((1U << AON_GPADC_POS_SATUR_CLR_LEN) - 1) << AON_GPADC_POS_SATUR_CLR_POS)\n#define AON_GPADC_POS_SATUR_CLR_UMSK  (~(((1U << AON_GPADC_POS_SATUR_CLR_LEN) - 1) << AON_GPADC_POS_SATUR_CLR_POS))\n#define AON_GPADC_NEG_SATUR_MASK      AON_GPADC_NEG_SATUR_MASK\n#define AON_GPADC_NEG_SATUR_MASK_POS  (8U)\n#define AON_GPADC_NEG_SATUR_MASK_LEN  (1U)\n#define AON_GPADC_NEG_SATUR_MASK_MSK  (((1U << AON_GPADC_NEG_SATUR_MASK_LEN) - 1) << AON_GPADC_NEG_SATUR_MASK_POS)\n#define AON_GPADC_NEG_SATUR_MASK_UMSK (~(((1U << AON_GPADC_NEG_SATUR_MASK_LEN) - 1) << AON_GPADC_NEG_SATUR_MASK_POS))\n#define AON_GPADC_POS_SATUR_MASK      AON_GPADC_POS_SATUR_MASK\n#define AON_GPADC_POS_SATUR_MASK_POS  (9U)\n#define AON_GPADC_POS_SATUR_MASK_LEN  (1U)\n#define AON_GPADC_POS_SATUR_MASK_MSK  (((1U << AON_GPADC_POS_SATUR_MASK_LEN) - 1) << AON_GPADC_POS_SATUR_MASK_POS)\n#define AON_GPADC_POS_SATUR_MASK_UMSK (~(((1U << AON_GPADC_POS_SATUR_MASK_LEN) - 1) << AON_GPADC_POS_SATUR_MASK_POS))\n\n/* 0x930 : gpadc_reg_result */\n#define AON_GPADC_REG_RESULT_OFFSET (0x930)\n#define AON_GPADC_DATA_OUT          AON_GPADC_DATA_OUT\n#define AON_GPADC_DATA_OUT_POS      (0U)\n#define AON_GPADC_DATA_OUT_LEN      (26U)\n#define AON_GPADC_DATA_OUT_MSK      (((1U << AON_GPADC_DATA_OUT_LEN) - 1) << AON_GPADC_DATA_OUT_POS)\n#define AON_GPADC_DATA_OUT_UMSK     (~(((1U << AON_GPADC_DATA_OUT_LEN) - 1) << AON_GPADC_DATA_OUT_POS))\n\n/* 0x934 : gpadc_reg_raw_result */\n#define AON_GPADC_REG_RAW_RESULT_OFFSET (0x934)\n#define AON_GPADC_RAW_DATA              AON_GPADC_RAW_DATA\n#define AON_GPADC_RAW_DATA_POS          (0U)\n#define AON_GPADC_RAW_DATA_LEN          (12U)\n#define AON_GPADC_RAW_DATA_MSK          (((1U << AON_GPADC_RAW_DATA_LEN) - 1) << AON_GPADC_RAW_DATA_POS)\n#define AON_GPADC_RAW_DATA_UMSK         (~(((1U << AON_GPADC_RAW_DATA_LEN) - 1) << AON_GPADC_RAW_DATA_POS))\n\n/* 0x938 : gpadc_reg_define */\n#define AON_GPADC_REG_DEFINE_OFFSET (0x938)\n#define AON_GPADC_OS_CAL_DATA       AON_GPADC_OS_CAL_DATA\n#define AON_GPADC_OS_CAL_DATA_POS   (0U)\n#define AON_GPADC_OS_CAL_DATA_LEN   (16U)\n#define AON_GPADC_OS_CAL_DATA_MSK   (((1U << AON_GPADC_OS_CAL_DATA_LEN) - 1) << AON_GPADC_OS_CAL_DATA_POS)\n#define AON_GPADC_OS_CAL_DATA_UMSK  (~(((1U << AON_GPADC_OS_CAL_DATA_LEN) - 1) << AON_GPADC_OS_CAL_DATA_POS))\n\n/* 0x93C : hbncore_resv0 */\n#define AON_HBNCORE_RESV0_OFFSET    (0x93C)\n#define AON_HBNCORE_RESV0_DATA      AON_HBNCORE_RESV0_DATA\n#define AON_HBNCORE_RESV0_DATA_POS  (0U)\n#define AON_HBNCORE_RESV0_DATA_LEN  (32U)\n#define AON_HBNCORE_RESV0_DATA_MSK  (((1U << AON_HBNCORE_RESV0_DATA_LEN) - 1) << AON_HBNCORE_RESV0_DATA_POS)\n#define AON_HBNCORE_RESV0_DATA_UMSK (~(((1U << AON_HBNCORE_RESV0_DATA_LEN) - 1) << AON_HBNCORE_RESV0_DATA_POS))\n\n/* 0x940 : hbncore_resv1 */\n#define AON_HBNCORE_RESV1_OFFSET    (0x940)\n#define AON_HBNCORE_RESV1_DATA      AON_HBNCORE_RESV1_DATA\n#define AON_HBNCORE_RESV1_DATA_POS  (0U)\n#define AON_HBNCORE_RESV1_DATA_LEN  (32U)\n#define AON_HBNCORE_RESV1_DATA_MSK  (((1U << AON_HBNCORE_RESV1_DATA_LEN) - 1) << AON_HBNCORE_RESV1_DATA_POS)\n#define AON_HBNCORE_RESV1_DATA_UMSK (~(((1U << AON_HBNCORE_RESV1_DATA_LEN) - 1) << AON_HBNCORE_RESV1_DATA_POS))\n\nstruct aon_reg {\n    /* 0x0  reserved */\n    uint8_t RESERVED0x0[2048];\n\n    /* 0x800 : aon */\n    union {\n        struct\n        {\n            uint32_t aon_resv              : 8; /* [ 7: 0],        r/w,        0x0 */\n            uint32_t reserved_8_11         : 4; /* [11: 8],       rsvd,        0x0 */\n            uint32_t pu_aon_dc_tbuf        : 1; /* [   12],        r/w,        0x0 */\n            uint32_t reserved_13_19        : 7; /* [19:13],       rsvd,        0x0 */\n            uint32_t ldo11_rt_pulldown     : 1; /* [   20],        r/w,        0x0 */\n            uint32_t ldo11_rt_pulldown_sel : 1; /* [   21],        r/w,        0x0 */\n            uint32_t sw_pu_ldo11_rt        : 1; /* [   22],        r/w,        0x1 */\n            uint32_t reserved_23_31        : 9; /* [31:23],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } aon;\n\n    /* 0x804 : aon_common */\n    union {\n        struct\n        {\n            uint32_t tmux_aon         : 3;  /* [ 2: 0],        r/w,        0x0 */\n            uint32_t reserved_3       : 1;  /* [    3],       rsvd,        0x0 */\n            uint32_t ten_aon          : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t dten_xtal32k     : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t ten_xtal32k      : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t reserved_7       : 1;  /* [    7],       rsvd,        0x0 */\n            uint32_t ten_vddcore_aon  : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t ten_ldo11soc_aon : 1;  /* [    9],        r/w,        0x0 */\n            uint32_t ten_dcdc18_0_aon : 1;  /* [   10],        r/w,        0x0 */\n            uint32_t ten_dcdc18_1_aon : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t ten_bg_sys_aon   : 1;  /* [   12],        r/w,        0x0 */\n            uint32_t reserved_13_15   : 3;  /* [15:13],       rsvd,        0x0 */\n            uint32_t ten_ldo15rf_aon  : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t ten_xtal_aon     : 1;  /* [   17],        r/w,        0x0 */\n            uint32_t dten_xtal_aon    : 1;  /* [   18],        r/w,        0x0 */\n            uint32_t ten_mbg_aon      : 1;  /* [   19],        r/w,        0x0 */\n            uint32_t ten_cip_misc_aon : 1;  /* [   20],        r/w,        0x0 */\n            uint32_t reserved_21_31   : 11; /* [31:21],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } aon_common;\n\n    /* 0x808 : aon_misc */\n    union {\n        struct\n        {\n            uint32_t sw_soc_en_aon : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t sw_bz_en_aon  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t reserved_2_31 : 30; /* [31: 2],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } aon_misc;\n\n    /* 0x80c  reserved */\n    uint8_t RESERVED0x80c[4];\n\n    /* 0x810 : bg_sys_top */\n    union {\n        struct\n        {\n            uint32_t pmip_resv             : 8;  /* [ 7: 0],        r/w,        0x0 */\n            uint32_t pu_bg_sys_aon         : 1;  /* [    8],        r/w,        0x1 */\n            uint32_t reserved_9_11         : 3;  /* [11: 9],       rsvd,        0x0 */\n            uint32_t bg_sys_start_ctrl_aon : 1;  /* [   12],        r/w,        0x1 */\n            uint32_t reserved_13_31        : 19; /* [31:13],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } bg_sys_top;\n\n    /* 0x814 : dcdc18_top_0 */\n    union {\n        struct\n        {\n            uint32_t reserved_0                : 1; /* [    0],       rsvd,        0x0 */\n            uint32_t dcdc18_vout_sel_aon       : 5; /* [ 5: 1],        r/w,       0x1b */\n            uint32_t reserved_6_7              : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t dcdc18_vpfm_aon           : 4; /* [11: 8],        r/w,        0x7 */\n            uint32_t dcdc18_osc_2m_mode_aon    : 1; /* [   12],        r/w,        0x0 */\n            uint32_t reserved_13_15            : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t dcdc18_osc_freq_trim_aon  : 4; /* [19:16],        r/w,        0x8 */\n            uint32_t dcdc18_slope_curr_sel_aon : 5; /* [24:20],        r/w,        0x5 */\n            uint32_t dcdc18_stop_osc_aon       : 1; /* [   25],        r/w,        0x1 */\n            uint32_t dcdc18_slow_osc_aon       : 1; /* [   26],        r/w,        0x0 */\n            uint32_t dcdc18_osc_inhibit_t2_aon : 1; /* [   27],        r/w,        0x1 */\n            uint32_t dcdc18_sstart_time_aon    : 2; /* [29:28],        r/w,        0x0 */\n            uint32_t reserved_30               : 1; /* [   30],       rsvd,        0x0 */\n            uint32_t dcdc18_rdy_aon            : 1; /* [   31],          r,        0x1 */\n        } BF;\n        uint32_t WORD;\n    } dcdc18_top_0;\n\n    /* 0x818 : dcdc18_top_1 */\n    union {\n        struct\n        {\n            uint32_t dcdc18_force_cs_zvs_aon  : 1; /* [    0],        r/w,        0x0 */\n            uint32_t dcdc18_cs_delay_aon      : 3; /* [ 3: 1],        r/w,        0x4 */\n            uint32_t dcdc18_zvs_td_opt_aon    : 3; /* [ 6: 4],        r/w,        0x4 */\n            uint32_t reserved_7               : 1; /* [    7],       rsvd,        0x0 */\n            uint32_t dcdc18_nonoverlap_td_aon : 5; /* [12: 8],        r/w,        0x0 */\n            uint32_t reserved_13_15           : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t dcdc18_rc_sel_aon        : 4; /* [19:16],        r/w,        0x8 */\n            uint32_t dcdc18_chf_sel_aon       : 4; /* [23:20],        r/w,        0x1 */\n            uint32_t dcdc18_cfb_sel_aon       : 4; /* [27:24],        r/w,        0x8 */\n            uint32_t dcdc18_en_antiring_aon   : 1; /* [   28],        r/w,        0x1 */\n            uint32_t dcdc18_pulldown_aon      : 1; /* [   29],        r/w,        0x0 */\n            uint32_t reserved_30_31           : 2; /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } dcdc18_top_1;\n\n    /* 0x81C : ldo11soc_and_dctest */\n    union {\n        struct\n        {\n            uint32_t pu_ldo11soc_aon           : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t reserved_1_3              : 3;  /* [ 3: 1],       rsvd,        0x0 */\n            uint32_t ldo11soc_sstart_sel_aon   : 1;  /* [    4],        r/w,        0x1 */\n            uint32_t reserved_5_7              : 3;  /* [ 7: 5],       rsvd,        0x0 */\n            uint32_t ldo11soc_sstart_delay_aon : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t ldo11soc_pulldown_aon     : 1;  /* [   10],        r/w,        0x0 */\n            uint32_t ldo11soc_pulldown_sel_aon : 1;  /* [   11],        r/w,        0x1 */\n            uint32_t ldo11soc_vth_sel_aon      : 2;  /* [13:12],        r/w,        0x1 */\n            uint32_t reserved_14_23            : 10; /* [23:14],       rsvd,        0x0 */\n            uint32_t ldo11soc_cc_aon           : 2;  /* [25:24],        r/w,        0x0 */\n            uint32_t reserved_26_27            : 2;  /* [27:26],       rsvd,        0x0 */\n            uint32_t ldo11soc_rdy_aon          : 1;  /* [   28],          r,        0x1 */\n            uint32_t ldo11soc_power_good_aon   : 1;  /* [   29],          r,        0x1 */\n            uint32_t pu_vddcore_misc_aon       : 1;  /* [   30],        r/w,        0x1 */\n            uint32_t pmip_dc_tp_out_en_aon     : 1;  /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ldo11soc_and_dctest;\n\n    /* 0x820 : psw_irrcv */\n    union {\n        struct\n        {\n            uint32_t pu_ir_psw_aon : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1_31 : 31; /* [31: 1],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } psw_irrcv;\n\n    /* 0x824  reserved */\n    uint8_t RESERVED0x824[92];\n\n    /* 0x880 : rf_top_aon */\n    union {\n        struct\n        {\n            uint32_t pu_mbg_aon               : 1; /* [    0],        r/w,        0x1 */\n            uint32_t pu_ldo15rf_aon           : 1; /* [    1],        r/w,        0x1 */\n            uint32_t pu_sfreg_aon             : 1; /* [    2],        r/w,        0x1 */\n            uint32_t reserved_3               : 1; /* [    3],       rsvd,        0x0 */\n            uint32_t pu_xtal_buf_aon          : 1; /* [    4],        r/w,        0x1 */\n            uint32_t pu_xtal_aon              : 1; /* [    5],        r/w,        0x1 */\n            uint32_t reserved_6_7             : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t ldo15rf_sstart_sel_aon   : 1; /* [    8],        r/w,        0x1 */\n            uint32_t ldo15rf_sstart_delay_aon : 2; /* [10: 9],        r/w,        0x0 */\n            uint32_t reserved_11              : 1; /* [   11],       rsvd,        0x0 */\n            uint32_t ldo15rf_pulldown_aon     : 1; /* [   12],        r/w,        0x0 */\n            uint32_t ldo15rf_pulldown_sel_aon : 1; /* [   13],        r/w,        0x0 */\n            uint32_t reserved_14_15           : 2; /* [15:14],       rsvd,        0x0 */\n            uint32_t ldo15rf_vout_sel_aon     : 3; /* [18:16],        r/w,        0x2 */\n            uint32_t reserved_19_23           : 5; /* [23:19],       rsvd,        0x0 */\n            uint32_t ldo15rf_cc_aon           : 2; /* [25:24],        r/w,        0x0 */\n            uint32_t reserved_26_27           : 2; /* [27:26],       rsvd,        0x0 */\n            uint32_t ldo15rf_bypass_aon       : 1; /* [   28],        r/w,        0x0 */\n            uint32_t reserved_29_31           : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } rf_top_aon;\n\n    /* 0x884 : xtal_cfg */\n    union {\n        struct\n        {\n            uint32_t xtal_bk_aon            : 2; /* [ 1: 0],        r/w,        0x0 */\n            uint32_t xtal_capcode_extra_aon : 1; /* [    2],        r/w,        0x0 */\n            uint32_t xtal_ext_sel_aon       : 1; /* [    3],        r/w,        0x0 */\n            uint32_t xtal_buf_en_aon        : 4; /* [ 7: 4],        r/w,        0xf */\n            uint32_t xtal_buf_hp_aon        : 4; /* [11: 8],        r/w,        0x0 */\n            uint32_t xtal_fast_startup_aon  : 1; /* [   12],        r/w,        0x1 */\n            uint32_t xtal_sleep_aon         : 1; /* [   13],        r/w,        0x1 */\n            uint32_t xtal_amp_ctrl_aon      : 2; /* [15:14],        r/w,        0x3 */\n            uint32_t xtal_capcode_out_aon   : 6; /* [21:16],        r/w,       0x10 */\n            uint32_t xtal_capcode_in_aon    : 6; /* [27:22],        r/w,       0x10 */\n            uint32_t xtal_gm_boost_aon      : 2; /* [29:28],        r/w,        0x3 */\n            uint32_t xtal_rdy_sel_aon       : 2; /* [31:30],        r/w,        0x2 */\n        } BF;\n        uint32_t WORD;\n    } xtal_cfg;\n\n    /* 0x888 : tsen */\n    union {\n        struct\n        {\n            uint32_t tsen_refcode_corner  : 12; /* [11: 0],        r/w,      0x8ff */\n            uint32_t reserved_12_15       : 4;  /* [15:12],       rsvd,        0x0 */\n            uint32_t tsen_refcode_rfcal   : 12; /* [27:16],        r/w,      0x8ff */\n            uint32_t xtal_rdy             : 1;  /* [   28],          r,        0x1 */\n            uint32_t xtal_inn_cfg_en_aon  : 1;  /* [   29],        r/w,        0x1 */\n            uint32_t xtal_rdy_int_sel_aon : 2;  /* [31:30],        r/w,        0x1 */\n        } BF;\n        uint32_t WORD;\n    } tsen;\n\n    /* 0x88c  reserved */\n    uint8_t RESERVED0x88c[116];\n\n    /* 0x900 : acomp0_ctrl */\n    union {\n        struct\n        {\n            uint32_t acomp0_en        : 1; /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1_3     : 3; /* [ 3: 1],       rsvd,        0x0 */\n            uint32_t acomp0_hyst_seln : 3; /* [ 6: 4],        r/w,        0x0 */\n            uint32_t acomp0_hyst_selp : 3; /* [ 9: 7],        r/w,        0x0 */\n            uint32_t acomp0_bias_prog : 2; /* [11:10],        r/w,        0x0 */\n            uint32_t acomp0_level_sel : 6; /* [17:12],        r/w,        0x0 */\n            uint32_t acomp0_neg_sel   : 4; /* [21:18],        r/w,        0x0 */\n            uint32_t acomp0_pos_sel   : 4; /* [25:22],        r/w,        0x0 */\n            uint32_t acomp0_muxen     : 1; /* [   26],        r/w,        0x0 */\n            uint32_t reserved_27_31   : 5; /* [31:27],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } acomp0_ctrl;\n\n    /* 0x904 : acomp1_ctrl */\n    union {\n        struct\n        {\n            uint32_t acomp1_en        : 1; /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1_3     : 3; /* [ 3: 1],       rsvd,        0x0 */\n            uint32_t acomp1_hyst_seln : 3; /* [ 6: 4],        r/w,        0x0 */\n            uint32_t acomp1_hyst_selp : 3; /* [ 9: 7],        r/w,        0x0 */\n            uint32_t acomp1_bias_prog : 2; /* [11:10],        r/w,        0x0 */\n            uint32_t acomp1_level_sel : 6; /* [17:12],        r/w,        0x0 */\n            uint32_t acomp1_neg_sel   : 4; /* [21:18],        r/w,        0x0 */\n            uint32_t acomp1_pos_sel   : 4; /* [25:22],        r/w,        0x0 */\n            uint32_t acomp1_muxen     : 1; /* [   26],        r/w,        0x0 */\n            uint32_t reserved_27_31   : 5; /* [31:27],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } acomp1_ctrl;\n\n    /* 0x908 : acomp_ctrl */\n    union {\n        struct\n        {\n            uint32_t acomp1_rstn_ana : 1; /* [    0],        r/w,        0x1 */\n            uint32_t acomp0_rstn_ana : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reserved_2_7    : 6; /* [ 7: 2],       rsvd,        0x0 */\n            uint32_t acomp1_test_en  : 1; /* [    8],        r/w,        0x0 */\n            uint32_t acomp0_test_en  : 1; /* [    9],        r/w,        0x0 */\n            uint32_t acomp1_test_sel : 2; /* [11:10],        r/w,        0x0 */\n            uint32_t acomp0_test_sel : 2; /* [13:12],        r/w,        0x0 */\n            uint32_t reserved_14_16  : 3; /* [16:14],       rsvd,        0x0 */\n            uint32_t acomp1_out_raw  : 1; /* [   17],          r,        0x0 */\n            uint32_t reserved_18     : 1; /* [   18],       rsvd,        0x0 */\n            uint32_t acomp0_out_raw  : 1; /* [   19],          r,        0x0 */\n            uint32_t reserved_20_23  : 4; /* [23:20],       rsvd,        0x0 */\n            uint32_t acomp_reserved  : 8; /* [31:24],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } acomp_ctrl;\n\n    /* 0x90C : gpadc_reg_cmd */\n    union {\n        struct\n        {\n            uint32_t gpadc_global_en        : 1; /* [    0],        r/w,        0x0 */\n            uint32_t gpadc_conv_start       : 1; /* [    1],        r/w,        0x0 */\n            uint32_t gpadc_soft_rst         : 1; /* [    2],        r/w,        0x0 */\n            uint32_t gpadc_neg_sel          : 5; /* [ 7: 3],        r/w,        0xf */\n            uint32_t gpadc_pos_sel          : 5; /* [12: 8],        r/w,        0xf */\n            uint32_t gpadc_neg_gnd          : 1; /* [   13],        r/w,        0x0 */\n            uint32_t gpadc_micbias_en       : 1; /* [   14],        r/w,        0x0 */\n            uint32_t gpadc_micpga_en        : 1; /* [   15],        r/w,        0x0 */\n            uint32_t gpadc_byp_micboost     : 1; /* [   16],        r/w,        0x0 */\n            uint32_t reserved_17            : 1; /* [   17],       rsvd,        0x0 */\n            uint32_t gpadc_dwa_en           : 1; /* [   18],        r/w,        0x0 */\n            uint32_t gpadc_mic2_diff        : 1; /* [   19],        r/w,        0x0 */\n            uint32_t gpadc_mic1_diff        : 1; /* [   20],        r/w,        0x0 */\n            uint32_t gpadc_mic_pga2_gain    : 2; /* [22:21],        r/w,        0x0 */\n            uint32_t gpadc_micboost_32db_en : 1; /* [   23],        r/w,        0x0 */\n            uint32_t reserved_24_26         : 3; /* [26:24],       rsvd,        0x0 */\n            uint32_t gpadc_chip_sen_pu      : 1; /* [   27],        r/w,        0x0 */\n            uint32_t gpadc_sen_sel          : 2; /* [29:28],        r/w,        0x0 */\n            uint32_t gpadc_sen_test_en      : 1; /* [   30],        r/w,        0x0 */\n            uint32_t reserved_31            : 1; /* [   31],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpadc_reg_cmd;\n\n    /* 0x910 : gpadc_reg_config1 */\n    union {\n        struct\n        {\n            uint32_t gpadc_cal_os_en     : 1; /* [    0],        r/w,        0x0 */\n            uint32_t gpadc_cont_conv_en  : 1; /* [    1],        r/w,        0x1 */\n            uint32_t gpadc_res_sel       : 3; /* [ 4: 2],        r/w,        0x0 */\n            uint32_t reserved_5_7        : 3; /* [ 7: 5],       rsvd,        0x0 */\n            uint32_t gpadc_vcm_sel_en    : 1; /* [    8],        r/w,        0x0 */\n            uint32_t gpadc_vcm_hyst_sel  : 1; /* [    9],        r/w,        0x0 */\n            uint32_t gpadc_lowv_det_en   : 1; /* [   10],        r/w,        0x0 */\n            uint32_t reserved_11_16      : 6; /* [16:11],       rsvd,        0x0 */\n            uint32_t gpadc_clk_ana_inv   : 1; /* [   17],        r/w,        0x0 */\n            uint32_t gpadc_clk_div_ratio : 3; /* [20:18],        r/w,        0x3 */\n            uint32_t gpadc_scan_length   : 4; /* [24:21],        r/w,        0x0 */\n            uint32_t gpadc_scan_en       : 1; /* [   25],        r/w,        0x0 */\n            uint32_t gpadc_dither_en     : 1; /* [   26],        r/w,        0x0 */\n            uint32_t gpadc_v11_sel       : 2; /* [28:27],        r/w,        0x0 */\n            uint32_t gpadc_v18_sel       : 2; /* [30:29],        r/w,        0x0 */\n            uint32_t reserved_31         : 1; /* [   31],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpadc_reg_config1;\n\n    /* 0x914 : gpadc_reg_config2 */\n    union {\n        struct\n        {\n            uint32_t reserved_0_1      : 2; /* [ 1: 0],       rsvd,        0x0 */\n            uint32_t gpadc_diff_mode   : 1; /* [    2],        r/w,        0x0 */\n            uint32_t gpadc_vref_sel    : 1; /* [    3],        r/w,        0x0 */\n            uint32_t gpadc_vbat_en     : 1; /* [    4],        r/w,        0x0 */\n            uint32_t gpadc_tsext_sel   : 1; /* [    5],        r/w,        0x0 */\n            uint32_t gpadc_ts_en       : 1; /* [    6],        r/w,        0x0 */\n            uint32_t gpadc_pga_vcm     : 2; /* [ 8: 7],        r/w,        0x2 */\n            uint32_t gpadc_pga_os_cal  : 4; /* [12: 9],        r/w,        0x8 */\n            uint32_t gpadc_pga_en      : 1; /* [   13],        r/w,        0x0 */\n            uint32_t gpadc_pga_vcmi_en : 1; /* [   14],        r/w,        0x0 */\n            uint32_t gpadc_chop_mode   : 2; /* [16:15],        r/w,        0x3 */\n            uint32_t gpadc_bias_sel    : 1; /* [   17],        r/w,        0x0 */\n            uint32_t gpadc_test_en     : 1; /* [   18],        r/w,        0x0 */\n            uint32_t gpadc_test_sel    : 3; /* [21:19],        r/w,        0x0 */\n            uint32_t gpadc_pga2_gain   : 3; /* [24:22],        r/w,        0x0 */\n            uint32_t gpadc_pga1_gain   : 3; /* [27:25],        r/w,        0x0 */\n            uint32_t gpadc_dly_sel     : 3; /* [30:28],        r/w,        0x0 */\n            uint32_t gpadc_tsvbe_low   : 1; /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpadc_reg_config2;\n\n    /* 0x918 : adc converation sequence 1 */\n    union {\n        struct\n        {\n            uint32_t gpadc_scan_pos_0 : 5; /* [ 4: 0],        r/w,        0xf */\n            uint32_t gpadc_scan_pos_1 : 5; /* [ 9: 5],        r/w,        0xf */\n            uint32_t gpadc_scan_pos_2 : 5; /* [14:10],        r/w,        0xf */\n            uint32_t gpadc_scan_pos_3 : 5; /* [19:15],        r/w,        0xf */\n            uint32_t gpadc_scan_pos_4 : 5; /* [24:20],        r/w,        0xf */\n            uint32_t gpadc_scan_pos_5 : 5; /* [29:25],        r/w,        0xf */\n            uint32_t reserved_30_31   : 2; /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpadc_reg_scn_pos1;\n\n    /* 0x91C : adc converation sequence 2 */\n    union {\n        struct\n        {\n            uint32_t gpadc_scan_pos_6  : 5; /* [ 4: 0],        r/w,        0xf */\n            uint32_t gpadc_scan_pos_7  : 5; /* [ 9: 5],        r/w,        0xf */\n            uint32_t gpadc_scan_pos_8  : 5; /* [14:10],        r/w,        0xf */\n            uint32_t gpadc_scan_pos_9  : 5; /* [19:15],        r/w,        0xf */\n            uint32_t gpadc_scan_pos_10 : 5; /* [24:20],        r/w,        0xf */\n            uint32_t gpadc_scan_pos_11 : 5; /* [29:25],        r/w,        0xf */\n            uint32_t reserved_30_31    : 2; /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpadc_reg_scn_pos2;\n\n    /* 0x920 : adc converation sequence 3 */\n    union {\n        struct\n        {\n            uint32_t gpadc_scan_neg_0 : 5; /* [ 4: 0],        r/w,        0xf */\n            uint32_t gpadc_scan_neg_1 : 5; /* [ 9: 5],        r/w,        0xf */\n            uint32_t gpadc_scan_neg_2 : 5; /* [14:10],        r/w,        0xf */\n            uint32_t gpadc_scan_neg_3 : 5; /* [19:15],        r/w,        0xf */\n            uint32_t gpadc_scan_neg_4 : 5; /* [24:20],        r/w,        0xf */\n            uint32_t gpadc_scan_neg_5 : 5; /* [29:25],        r/w,        0xf */\n            uint32_t reserved_30_31   : 2; /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpadc_reg_scn_neg1;\n\n    /* 0x924 : adc converation sequence 4 */\n    union {\n        struct\n        {\n            uint32_t gpadc_scan_neg_6  : 5; /* [ 4: 0],        r/w,        0xf */\n            uint32_t gpadc_scan_neg_7  : 5; /* [ 9: 5],        r/w,        0xf */\n            uint32_t gpadc_scan_neg_8  : 5; /* [14:10],        r/w,        0xf */\n            uint32_t gpadc_scan_neg_9  : 5; /* [19:15],        r/w,        0xf */\n            uint32_t gpadc_scan_neg_10 : 5; /* [24:20],        r/w,        0xf */\n            uint32_t gpadc_scan_neg_11 : 5; /* [29:25],        r/w,        0xf */\n            uint32_t reserved_30_31    : 2; /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpadc_reg_scn_neg2;\n\n    /* 0x928 : gpadc_reg_status */\n    union {\n        struct\n        {\n            uint32_t gpadc_data_rdy : 1;  /* [    0],          r,        0x0 */\n            uint32_t reserved_1_15  : 15; /* [15: 1],       rsvd,        0x0 */\n            uint32_t gpadc_reserved : 16; /* [31:16],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpadc_reg_status;\n\n    /* 0x92C : gpadc_reg_isr */\n    union {\n        struct\n        {\n            uint32_t gpadc_neg_satur      : 1;  /* [    0],          r,        0x0 */\n            uint32_t gpadc_pos_satur      : 1;  /* [    1],          r,        0x0 */\n            uint32_t reserved_2_3         : 2;  /* [ 3: 2],       rsvd,        0x0 */\n            uint32_t gpadc_neg_satur_clr  : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t gpadc_pos_satur_clr  : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7         : 2;  /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t gpadc_neg_satur_mask : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t gpadc_pos_satur_mask : 1;  /* [    9],        r/w,        0x0 */\n            uint32_t reserved_10_31       : 22; /* [31:10],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpadc_reg_isr;\n\n    /* 0x930 : gpadc_reg_result */\n    union {\n        struct\n        {\n            uint32_t gpadc_data_out : 26; /* [25: 0],          r,  0x1ef0000 */\n            uint32_t reserved_26_31 : 6;  /* [31:26],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpadc_reg_result;\n\n    /* 0x934 : gpadc_reg_raw_result */\n    union {\n        struct\n        {\n            uint32_t gpadc_raw_data : 12; /* [11: 0],          r,        0x0 */\n            uint32_t reserved_12_31 : 20; /* [31:12],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpadc_reg_raw_result;\n\n    /* 0x938 : gpadc_reg_define */\n    union {\n        struct\n        {\n            uint32_t gpadc_os_cal_data : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31    : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpadc_reg_define;\n\n    /* 0x93C : hbncore_resv0 */\n    union {\n        struct\n        {\n            uint32_t hbncore_resv0_data : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } hbncore_resv0;\n\n    /* 0x940 : hbncore_resv1 */\n    union {\n        struct\n        {\n            uint32_t hbncore_resv1_data : 32; /* [31: 0],        r/w, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } hbncore_resv1;\n};\n\ntypedef volatile struct aon_reg aon_reg_t;\n\n#endif /* __AON_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/bl702.h",
    "content": "#ifndef __BL702_H__\n#define __BL702_H__\n\n/* This file had been modified, add USB_IRQn=43 for temp test, the irq value 43 should be checked after all. */\n\n/** @addtogroup Configuration_section_for_RISCV\n * @{\n */\n\n/**\n * @brief Configuration of the Processor and Core Peripherals\n */\n\n/* fix 57.6M */\n#define SystemCoreClockSet(val)                 \\\n  if ((int)val == (int)(57.6000 * 1000)) {      \\\n    BL_WR_WORD(0x4000F108, 57.6 * 1000 * 1000); \\\n  } else {                                      \\\n    BL_WR_WORD(0x4000F108, val);                \\\n  }\n#define SystemCoreClockGet(val) BL_RD_WORD(0x4000F108)\n\n/**\n * @}\n */\n\n/** @addtogroup Peripheral_interrupt_number_definition\n * @{\n */\n\n#ifdef ARCH_ARM\n#define IRQ_NUM_BASE 0\n#endif\n\n#ifdef ARCH_RISCV\n#define IRQ_NUM_BASE 16\n#endif\n/**\n * @brief BL702 Interrupt Number Definition, according to the selected device\n *        in @ref Library_configuration_section\n */\ntypedef enum {\n#ifdef ARCH_ARM\n  /******  Cortex-M4 Processor Exceptions Numbers ****************************************************************/\n  NonMaskableInt_IRQn   = -14, /*!< 2 Cortex-M4 Non Maskable Interrupt                                */\n  HardFault_IRQn        = -13, /*!< 3 Cortex-M4 Hard Fault Interrupt                                  */\n  MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt                           */\n  BusFault_IRQn         = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt                                   */\n  UsageFault_IRQn       = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt                                 */\n  SVCall_IRQn           = -5,  /*!< 11 Cortex-M4 SV Call Interrupt                                    */\n  DebugMonitor_IRQn     = -4,  /*!< 12 Cortex-M4 Debug Monitor Interrupt                              */\n  PendSV_IRQn           = -2,  /*!< 14 Cortex-M4 Pend SV Interrupt                                    */\n  SysTick_IRQn          = -1,  /*!< 15 Cortex-M4 System Tick Interrupt                                */\n#endif\n#ifdef ARCH_RISCV\n  MSOFT_IRQn          = 3,  /*!< 3 RISCV machine software Interrupt                                */\n  MTIME_IRQn          = 7,  /*!< 7 RISCV machine time Interrupt                                    */\n  MEXT_IRQn           = 11, /*!< 11 RISCV external  Interrupt                                      */\n  CLIC_SOFT_PEND_IRQn = 12, /*!< 12 RISCV CLIC software pending  Interrupt                         */\n#endif\n  /******  BL702 specific Interrupt Numbers **********************************************************************/\n  BMX_ERR_IRQn          = IRQ_NUM_BASE + 0,  /*!< BMX Error Interrupt                                               */\n  BMX_TO_IRQn           = IRQ_NUM_BASE + 1,  /*!< BMX Timeout Interrupt                                             */\n  L1C_BMX_ERR_IRQn      = IRQ_NUM_BASE + 2,  /*!< L1C BMX Error Interrupt                                           */\n  L1C_BMX_TO_IRQn       = IRQ_NUM_BASE + 3,  /*!< L1C BMX Timeout Interrupt                                         */\n  SEC_BMX_ERR_IRQn      = IRQ_NUM_BASE + 4,  /*!< SEC BMX Error Interrupt                                           */\n  RF_TOP_INT0_IRQn      = IRQ_NUM_BASE + 5,  /*!< RF_TOP_INT0 Interrupt                                             */\n  RF_TOP_INT1_IRQn      = IRQ_NUM_BASE + 6,  /*!< RF_TOP_INT1 Interrupt                                             */\n  RESERVED0             = IRQ_NUM_BASE + 7,  /*!< RESERVED Interrupt                                                */\n  DMA_BMX_ERR_IRQn      = IRQ_NUM_BASE + 8,  /*!< DMA BMX Error Interrupt                                           */\n  SEC_GMAC_IRQn         = IRQ_NUM_BASE + 9,  /*!< SEC_ENG_GMAC_INT Interrupt                                        */\n  SEC_CDET_IRQn         = IRQ_NUM_BASE + 10, /*!< SEC_ENG_CDET_INT Interrupt                                        */\n  SEC_PKA_IRQn          = IRQ_NUM_BASE + 11, /*!< SEC_ENG_PKA_INT  Interrupt                                        */\n  SEC_TRNG_IRQn         = IRQ_NUM_BASE + 12, /*!< SEC_ENG_TRNG_INT Interrupt                                        */\n  SEC_AES_IRQn          = IRQ_NUM_BASE + 13, /*!< SEC_ENG_AES_INT  Interrupt                                        */\n  SEC_SHA_IRQn          = IRQ_NUM_BASE + 14, /*!< SEC_ENG_SHA_INT  Interrupt                                        */\n  DMA_ALL_IRQn          = IRQ_NUM_BASE + 15, /*!< DMA ALL Interrupt                                                 */\n  MJPEG_IRQn            = IRQ_NUM_BASE + 16, /*!< MJPEG Interrupt                                                   */\n  CAM_IRQn              = IRQ_NUM_BASE + 17, /*!< CAM Interrupt                                                     */\n  I2S_IRQn              = IRQ_NUM_BASE + 18, /*!< I2S Interrupt                                                     */\n  IRTX_IRQn             = IRQ_NUM_BASE + 19, /*!< IR TX Interrupt                                                   */\n  IRRX_IRQn             = IRQ_NUM_BASE + 20, /*!< IR RX Interrupt                                                   */\n  USB_IRQn              = IRQ_NUM_BASE + 21, /*!< USB Interrupt                                                     */\n  EMAC_IRQn             = IRQ_NUM_BASE + 22, /*!< EMAC  Interrupt                                                   */\n  SF_CTRL_IRQn          = IRQ_NUM_BASE + 23, /*!< SF_CTRL   Interrupt                                               */\n  RESERVED1             = IRQ_NUM_BASE + 24, /*!< RESERVED  Interrupt                                               */\n  GPADC_DMA_IRQn        = IRQ_NUM_BASE + 25, /*!< GPADC_DMA Interrupt                                               */\n  EFUSE_IRQn            = IRQ_NUM_BASE + 26, /*!< Efuse Interrupt                                                   */\n  SPI_IRQn              = IRQ_NUM_BASE + 27, /*!< SPI   Interrupt                                                   */\n  RESERVED2             = IRQ_NUM_BASE + 28, /*!< RESERVED Interrupt                                                */\n  UART0_IRQn            = IRQ_NUM_BASE + 29, /*!< UART  Interrupt                                                   */\n  UART1_IRQn            = IRQ_NUM_BASE + 30, /*!< UART1 Interrupt                                                   */\n  RESERVED3             = IRQ_NUM_BASE + 31, /*!< RESERVED Interrupt                                                */\n  I2C_IRQn              = IRQ_NUM_BASE + 32, /*!< I2C   Interrupt                                                   */\n  RESERVED4             = IRQ_NUM_BASE + 33, /*!< RESERVED Interrupt                                                */\n  PWM_IRQn              = IRQ_NUM_BASE + 34, /*!< PWM   Interrupt                                                   */\n  RESERVED5             = IRQ_NUM_BASE + 35, /*!< RESERVED Interrupt                                                */\n  TIMER_CH0_IRQn        = IRQ_NUM_BASE + 36, /*!< Timer Channel 0 Interrupt                                         */\n  TIMER_CH1_IRQn        = IRQ_NUM_BASE + 37, /*!< Timer Channel 1 Interrupt                                         */\n  TIMER_WDT_IRQn        = IRQ_NUM_BASE + 38, /*!< Timer Watch Dog Interrupt                                         */\n  KYS_IRQn              = IRQ_NUM_BASE + 39, /*!< KYS Interrupt                                                     */\n  QDEC0_IRQn            = IRQ_NUM_BASE + 40, /*!< QDEC0 Interrupt                                                   */\n  QDEC1_IRQn            = IRQ_NUM_BASE + 41, /*!< QDEC1 Interrupt                                                   */\n  QDEC2_IRQn            = IRQ_NUM_BASE + 42, /*!< QDEC2 Interrupt                                                   */\n  RESERVED6             = IRQ_NUM_BASE + 43, /*!< RESERVED Interrupt                                                */\n  GPIO_INT0_IRQn        = IRQ_NUM_BASE + 44, /*!< GPIO_INT0 Interrupt                                               */\n  TOUCH_IRQn            = IRQ_NUM_BASE + 45, /*!< TOUCH Interrupt                                                   */\n  RESERVED7             = IRQ_NUM_BASE + 46, /*!< RESERVED Interrupt                                                */\n  M154_REQ_ENH_ACK_IRQn = IRQ_NUM_BASE + 47, /*!< M154_REQ Interrupt                                                */\n  M154_IRQn             = IRQ_NUM_BASE + 48, /*!< M154 Interrupt                                                    */\n  M154_AES_IRQn         = IRQ_NUM_BASE + 49, /*!< M154_AES Interrupt                                                */\n  PDS_WAKEUP_IRQn       = IRQ_NUM_BASE + 50, /*!< PDS Wakeup Interrupt                                              */\n  HBN_OUT0_IRQn         = IRQ_NUM_BASE + 51, /*!< Hibernate out 0 Interrupt                                         */\n  HBN_OUT1_IRQn         = IRQ_NUM_BASE + 52, /*!< Hibernate out 1 Interrupt                                         */\n  BOR_IRQn              = IRQ_NUM_BASE + 53, /*!< BOR Interrupt                                                     */\n  WIFI_IRQn             = IRQ_NUM_BASE + 54, /*!< WIFI To CPU Interrupt                                             */\n  BZ_PHY_IRQn           = IRQ_NUM_BASE + 55, /*!< BZ_PHY Interrupt                                                  */\n  BLE_IRQn              = IRQ_NUM_BASE + 56, /*!< BLE Interrupt                                                     */\n  MAC_TXRX_TIMER_IRQn   = IRQ_NUM_BASE + 57, /*!< mac_int_tx_rx_timer Interrupt                                     */\n  MAC_TXRX_MISC_IRQn    = IRQ_NUM_BASE + 58, /*!< mac_int_tx_rx_misc Interrupt                                      */\n  MAC_RX_TRG_IRQn       = IRQ_NUM_BASE + 59, /*!< mac_int_rx_trigger Interrupt                                      */\n  MAC_TX_TRG_IRQn       = IRQ_NUM_BASE + 60, /*!< mac_int_tx_trigger Interrupt                                      */\n  MAC_GEN_IRQn          = IRQ_NUM_BASE + 61, /*!< mac_int_gen Interrupt                                             */\n  MAC_PORT_TRG_IRQn     = IRQ_NUM_BASE + 62, /*!< mac_int_port_trigger Interrupt                                    */\n  WIFI_IPC_PUBLIC_IRQn  = IRQ_NUM_BASE + 63, /*!< wifi IPC public Interrupt                                         */\n  IRQn_LAST,\n} IRQn_Type;\n\n/**\n * @brief BL702 Memory Map Definitions\n */\n#define BL702_FLASH_XIP_BASE        0x23000000\n#define BL702_FLASH_XIP_END         (0x23000000 + 16 * 1024 * 1024)\n#define BL702_FLASH_XIP_REMAP0_BASE 0x33000000\n#define BL702_FLASH_XIP_REMAP0_END  (0x33000000 + 16 * 1024 * 1024)\n#define BL702_FLASH_XIP_REMAP1_BASE 0x43000000\n#define BL702_FLASH_XIP_REMAP1_END  (0x43000000 + 16 * 1024 * 1024)\n#define BL702_FLASH_XIP_REMAP2_BASE 0x53000000\n#define BL702_FLASH_XIP_REMAP2_END  (0x53000000 + 16 * 1024 * 1024)\n\n#define BL702_PSRAM_XIP_BASE        0x24000000\n#define BL702_PSRAM_XIP_END         (0x24000000 + 16 * 1024 * 1024)\n#define BL702_PSRAM_XIP_REMAP0_BASE 0x34000000\n#define BL702_PSRAM_XIP_REMAP0_END  (0x34000000 + 16 * 1024 * 1024)\n#define BL702_PSRAM_XIP_REMAP1_BASE 0x44000000\n#define BL702_PSRAM_XIP_REMAP1_END  (0x44000000 + 16 * 1024 * 1024)\n#define BL702_PSRAM_XIP_REMAP2_BASE 0x54000000\n#define BL702_PSRAM_XIP_REMAP2_END  (0x54000000 + 16 * 1024 * 1024)\n\n#define BL702_WRAM_BASE        0x42020000\n#define BL702_WRAM_END         (0x42020000 + 56 * 1024)\n#define BL702_WRAM_REMAP0_BASE 0x22020000\n#define BL702_WRAM_REMAP0_END  (0x22020000 + 56 * 1024)\n#define BL702_WRAM_REMAP1_BASE 0x32020000\n#define BL702_WRAM_REMAP1_END  (0x32020000 + 56 * 1024)\n#define BL702_WRAM_REMAP2_BASE 0x52020000\n#define BL702_WRAM_REMAP2_END  (0x52020000 + 56 * 1024)\n\n#define BL702_TCM_BASE        0x22010000\n#define BL702_TCM_END         (0x22010000 + (16 + 48) * 1024)\n#define BL702_TCM_REMAP0_BASE 0x32010000\n#define BL702_TCM_REMAP0_END  (0x32010000 + (16 + 48) * 1024)\n#define BL702_TCM_REMAP1_BASE 0x42010000\n#define BL702_TCM_REMAP1_END  (0x42010000 + (16 + 48) * 1024)\n#define BL702_TCM_REMAP2_BASE 0x52010000\n#define BL702_TCM_REMAP2_END  (0x52010000 + (16 + 48) * 1024)\n/*@} end of group Memory_Map_Section */\n\n/* BL702 peripherals base address */\n#define GLB_BASE         ((uint32_t)0x40000000)\n#define RF_BASE          ((uint32_t)0x40001000)\n#define BZ_PHY_BASE      ((uint32_t)0x40001000)\n#define BZ_PHY_AGC_BASE  ((uint32_t)0x40001000)\n#define GPIP_BASE        ((uint32_t)0x40002000) /*!< AUX module base address */\n#define SEC_DBG_BASE     ((uint32_t)0x40003000) /*!< Security Debug module base address */\n#define SEC_ENG_BASE     ((uint32_t)0x40004000) /*!< Security Engine module base address */\n#define TZC_SEC_BASE     ((uint32_t)0x40005000) /*!< Trustzone control security base address */\n#define TZC_NSEC_BASE    ((uint32_t)0x40006000) /*!< Trustzone control none-security base address */\n#define EF_DATA_BASE     ((uint32_t)0x40007000)\n#define EF_CTRL_BASE     ((uint32_t)0x40007000)\n#define CCI_BASE         ((uint32_t)0x40008000)\n#define L1C_BASE         ((uint32_t)0x40009000) /*!< L1 cache config base address */\n#define UART0_BASE       ((uint32_t)0x4000A000)\n#define UART1_BASE       ((uint32_t)0x4000A100)\n#define SPI_BASE         ((uint32_t)0x4000A200)\n#define I2C_BASE         ((uint32_t)0x4000A300)\n#define PWM_BASE         ((uint32_t)0x4000A400)\n#define TIMER_BASE       ((uint32_t)0x4000A500)\n#define IR_BASE          ((uint32_t)0x4000A600)\n#define CKS_BASE         ((uint32_t)0x4000A700)\n#define QDEC0_BASE       ((uint32_t)0x4000A800)\n#define QDEC1_BASE       ((uint32_t)0x4000A840)\n#define QDEC2_BASE       ((uint32_t)0x4000A880)\n#define KYS_BASE         ((uint32_t)0x4000A900)\n#define I2S_BASE         ((uint32_t)0x4000AA00)\n#define CAM_BASE         ((uint32_t)0x4000AD00)\n#define MJPEG_BASE       ((uint32_t)0x4000AE00)\n#define SF_CTRL_BASE     ((uint32_t)0x4000B000)\n#define SF_CTRL_BUF_BASE ((uint32_t)0x4000B700)\n#define DMA_BASE         ((uint32_t)0x4000C000)\n#define EMAC_BASE        ((uint32_t)0x4000D000)\n#define USB_BASE         ((uint32_t)0x4000D800)\n#define PDS_BASE         ((uint32_t)0x4000E000) /*!< Power down sleep module base address */\n#define HBN_BASE         ((uint32_t)0x4000F000) /*!< Hibernate module base address */\n#define AON_BASE         ((uint32_t)0x4000F000) /*!< Always on module base address */\n#define MAC154_BASE      ((uint32_t)0x4C000000) /*!< MAC154 module base address */\n\n#define HBN_RAM_BASE ((uint32_t)0x40010000)\n\ntypedef enum {\n  BL_AHB_SLAVE1_GLB                = 0x00,\n  BL_AHB_SLAVE1_MIX                = 0x01,\n  BL_AHB_SLAVE1_GPIP               = 0x02,\n  BL_AHB_SLAVE1_SEC_DBG            = 0x03,\n  BL_AHB_SLAVE1_SEC                = 0x04,\n  BL_AHB_SLAVE1_TZ1                = 0x05,\n  BL_AHB_SLAVE1_TZ2                = 0x06,\n  BL_AHB_SLAVE1_EFUSE              = 0x07,\n  BL_AHB_SLAVE1_CCI                = 0x08,\n  BL_AHB_SLAVE1_L1C                = 0x09,\n  BL_AHB_SLAVE1_S1A_ALL            = 0x0A,\n  BL_AHB_SLAVE1_SFC                = 0x0B,\n  BL_AHB_SLAVE1_DMA                = 0x0C,\n  BL_AHB_SLAVE1_EMAC               = 0x0D,\n  BL_AHB_SLAVE1_PDS_HBN_AON_HBNRAM = 0x0E,\n  BL_AHB_SLAVE1_RSVD0F             = 0x0F,\n  BL_AHB_SLAVE1_UART0              = 0x10,\n  BL_AHB_SLAVE1_UART1              = 0x11,\n  BL_AHB_SLAVE1_SPI                = 0x12,\n  BL_AHB_SLAVE1_I2C                = 0x13,\n  BL_AHB_SLAVE1_PWM                = 0x14,\n  BL_AHB_SLAVE1_TMR                = 0x15,\n  BL_AHB_SLAVE1_IRR                = 0x16,\n  BL_AHB_SLAVE1_CKS                = 0x17,\n  BL_AHB_SLAVE1_QDEC               = 0x18,\n  BL_AHB_SLAVE1_KYS                = 0x19,\n  BL_AHB_SLAVE1_I2S                = 0x1A,\n  BL_AHB_SLAVE1_RSVD1B             = 0x1B,\n  BL_AHB_SLAVE1_USB                = 0x1C,\n  BL_AHB_SLAVE1_CAM                = 0x1D,\n  BL_AHB_SLAVE1_MJPEG              = 0x1E,\n  BL_AHB_SLAVE1_MAX                = 0x1F,\n} BL_AHB_Slave1_Type;\n\ntypedef enum {\n  BL_AHB_SEC_ENG_AES0 = 0,\n  BL_AHB_SEC_ENG_AES1,\n  BL_AHB_SEC_ENG_SHA0,\n  BL_AHB_SEC_ENG_SHA1,\n} BL_AHB_Sec_Eng_Type;\n\ntypedef enum {\n  BL_AHB_DMA0_CH0 = 0,\n  BL_AHB_DMA0_CH1,\n  BL_AHB_DMA0_CH2,\n  BL_AHB_DMA0_CH3,\n  BL_AHB_DMA0_CH4,\n  BL_AHB_DMA0_CH5,\n  BL_AHB_DMA0_CH6,\n  BL_AHB_DMA0_CH7,\n} BL_AHB_DMA0_CHNL_Type;\n\ntypedef enum {\n  BL_AHB_SLAVE2_WIFI_CFG = 0,\n  BL_AHB_SLAVE2_MAX,\n} BL_AHB_Slave2_Type;\n\ntypedef enum {\n  BL_AHB_SLAVE3_BLE = 0,\n  BL_AHB_SLAVE3_MAX,\n} BL_AHB_Slave3_Type;\n\ntypedef enum {\n  BL_CORE_MASTER_IBUS_CPU = 0,\n  BL_CORE_MASTER_DBUS_CPU,\n  BL_CORE_MASTER_BUS_S2F,\n  BL_CORE_MASTER_MAX,\n} BL_Core_Master_Type;\n\ntypedef enum {\n  BL_CORE_SLAVE0_DTCM_CPU = 0,\n  BL_CORE_SLAVE0_MAX,\n} BL_Core_Slave0_Type;\n\ntypedef enum {\n  BL_CORE_SLAVE1_XIP_CPU = 0,\n  BL_CORE_SLAVE1_ITCM_CPU,\n  BL_CORE_SLAVE1_ROM,\n  BL_CORE_SLAVE1_MAX,\n} BL_Core_Slave1_Type;\n\ntypedef enum {\n  BL_CORE_SLAVE2_F2S = 0,\n  BL_CORE_SLAVE2_MAX,\n} BL_Core_Slave2_Type;\n\n/**\n * @}\n */\n#include <stdint.h>\n#include <system_bl702.h>\n\n/**\n * @}\n */\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/bl70x_reg.svc",
    "content": "<?xml version='1.0' encoding='utf-8'?>\r\n<com.csky.cds.peripheral>\r\n\t<config Version=\"0.0.1\">\r\n\t\t<Peripheral Name=\"glb\">\r\n\t\t\t<Register Name=\"clk_cfg0\" Authority=\"RW\" Address=\"0x40000000\" Width=\"32\" Description=\"clk_cfg0.\">\r\n\t\t\t\t<Bit Name=\"glb_id\" Authority=\"RW\" Bits=\"31-28\" />\r\n\t\t\t\t<Bit Name=\"chip_rdy\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"fclk_sw_state\" Authority=\"RW\" Bits=\"26-24\" />\r\n\t\t\t\t<Bit Name=\"reg_bclk_div\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"reg_hclk_div\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t\t<Bit Name=\"hbn_root_clk_sel\" Authority=\"RW\" Bits=\"7-6\" />\r\n\t\t\t\t<Bit Name=\"reg_pll_sel\" Authority=\"RW\" Bits=\"5-4\" />\r\n\t\t\t\t<Bit Name=\"reg_bclk_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"reg_hclk_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"reg_fclk_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_pll_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"clk_cfg1\" Authority=\"RW\" Address=\"0x40000004\" Width=\"32\" Description=\"clk_cfg1.\">\r\n\t\t\t\t<Bit Name=\"reg_cam_ref_clk_div\" Authority=\"RW\" Bits=\"31-30\" />\r\n\t\t\t\t<Bit Name=\"reg_cam_ref_clk_src_sel\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"reg_cam_ref_clk_en\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"m154_zbEn\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"ble_en\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"ble_clk_sel\" Authority=\"RW\" Bits=\"21-16\" />\r\n\t\t\t\t<Bit Name=\"reg_i2s_0_ref_clk_oe\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"reg_i2s0_clk_en\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"reg_i2s_clk_sel\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"dll_48m_div_en\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"usb_clk_en\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"qdec_clk_sel\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"qdec_clk_div\" Authority=\"RW\" Bits=\"4-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"clk_cfg2\" Authority=\"RW\" Address=\"0x40000008\" Width=\"32\" Description=\"clk_cfg2.\">\r\n\t\t\t\t<Bit Name=\"dma_clk_en\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"ir_clk_en\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"ir_clk_div\" Authority=\"RW\" Bits=\"21-16\" />\r\n\t\t\t\t<Bit Name=\"sf_clk_sel2\" Authority=\"RW\" Bits=\"15-14\" />\r\n\t\t\t\t<Bit Name=\"sf_clk_sel\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"sf_clk_en\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"sf_clk_div\" Authority=\"RW\" Bits=\"10-8\" />\r\n\t\t\t\t<Bit Name=\"hbn_uart_clk_sel\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"uart_clk_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"uart_clk_div\" Authority=\"RW\" Bits=\"2-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"clk_cfg3\" Authority=\"RW\" Address=\"0x4000000C\" Width=\"32\" Description=\"clk_cfg3.\">\r\n\t\t\t\t<Bit Name=\"chip_clk_out_1_sel\" Authority=\"RW\" Bits=\"31-30\" />\r\n\t\t\t\t<Bit Name=\"chip_clk_out_0_sel\" Authority=\"RW\" Bits=\"29-28\" />\r\n\t\t\t\t<Bit Name=\"i2c_clk_en\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"i2c_clk_div\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"cfg_inv_eth_rx_clk\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"cfg_inv_rf_test_clk_o\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"spi_clk_en\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"cfg_inv_eth_tx_clk\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"cfg_inv_eth_ref_clk_o\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"cfg_sel_eth_ref_clk_o\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"spi_clk_div\" Authority=\"RW\" Bits=\"4-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"swrst_cfg0\" Authority=\"RW\" Address=\"0x40000010\" Width=\"32\" Description=\"swrst_cfg0.\">\r\n\t\t\t\t<Bit Name=\"swrst_s30\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"swrst_s20\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"swrst_s01\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"swrst_s00\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"swrst_cfg1\" Authority=\"RW\" Address=\"0x40000014\" Width=\"32\" Description=\"swrst_cfg1.\">\r\n\t\t\t\t<Bit Name=\"swrst_s1ae\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1ad\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1ac\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1ab\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1aa\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1a9\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1a8\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1a7\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1a6\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1a5\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1a4\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1a3\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1a2\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1a1\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1a0\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1f\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1e\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1d\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1c\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1b\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"swrst_s1a\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"swrst_s19\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"swrst_s18\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"swrst_s17\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"swrst_s16\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"swrst_s15\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"swrst_s14\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"swrst_s13\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"swrst_s12\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"swrst_s11\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"swrst_s10\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"swrst_cfg2\" Authority=\"RW\" Address=\"0x40000018\" Width=\"32\" Description=\"swrst_cfg2.\">\r\n\t\t\t\t<Bit Name=\"pka_clk_sel\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"reg_ctrl_reset_dummy\" Authority=\"RW\" Bits=\"7-4\" />\r\n\t\t\t\t<Bit Name=\"reg_ctrl_sys_reset\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"reg_ctrl_cpu_reset\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_ctrl_pwron_rst\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"swrst_cfg3\" Authority=\"RW\" Address=\"0x4000001C\" Width=\"32\" Description=\"swrst_cfg3.\" />\r\n\t\t\t<Register Name=\"cgen_cfg0\" Authority=\"RW\" Address=\"0x40000020\" Width=\"32\" Description=\"cgen_cfg0.\">\r\n\t\t\t\t<Bit Name=\"cgen_m\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"cgen_cfg1\" Authority=\"RW\" Address=\"0x40000024\" Width=\"32\" Description=\"cgen_cfg1.\">\r\n\t\t\t\t<Bit Name=\"cgen_s1a\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"cgen_s1\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"cgen_cfg2\" Authority=\"RW\" Address=\"0x40000028\" Width=\"32\" Description=\"cgen_cfg2.\">\r\n\t\t\t\t<Bit Name=\"cgen_s3\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cgen_s2\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"cgen_cfg3\" Authority=\"RW\" Address=\"0x40000x2C\" Width=\"32\" Description=\"cgen_cfg3.\" />\r\n\t\t\t<Register Name=\"MBIST_CTL\" Authority=\"RW\" Address=\"0x40000030\" Width=\"32\" Description=\"MBIST_CTL.\">\r\n\t\t\t\t<Bit Name=\"reg_mbist_rst_n\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"em_ram_mbist_mode\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"ocram_mbist_mode\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"tag_mbist_mode\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"hsram_cache_mbist_mode\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"hsram_mem_mbist_mode\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"irom_mbist_mode\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"MBIST_STAT\" Authority=\"RW\" Address=\"0x40000034\" Width=\"32\" Description=\"MBIST_STAT.\">\r\n\t\t\t\t<Bit Name=\"em_ram_mbist_fail\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"ocram_mbist_fail\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"tag_mbist_fail\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"hsram_cache_mbist_fail\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"hsram_mem_mbist_fail\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"irom_mbist_fail\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"em_ram_mbist_done\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"ocram_mbist_done\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"tag_mbist_done\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"hsram_cache_mbist_done\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"hsram_mem_mbist_done\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"irom_mbist_done\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"bmx_cfg1\" Authority=\"RW\" Address=\"0x40000050\" Width=\"32\" Description=\"bmx_cfg1.\">\r\n\t\t\t\t<Bit Name=\"hbn_apb_cfg\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"pds_apb_cfg\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"hsel_option\" Authority=\"RW\" Bits=\"15-12\" />\r\n\t\t\t\t<Bit Name=\"bmx_gating_dis\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"bmx_busy_option_dis\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"bmx_err_en\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"bmx_arb_mode\" Authority=\"RW\" Bits=\"5-4\" />\r\n\t\t\t\t<Bit Name=\"bmx_timeout_en\" Authority=\"RW\" Bits=\"3-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"bmx_cfg2\" Authority=\"RW\" Address=\"0x40000054\" Width=\"32\" Description=\"bmx_cfg2.\">\r\n\t\t\t\t<Bit Name=\"bmx_dbg_sel\" Authority=\"RW\" Bits=\"31-28\" />\r\n\t\t\t\t<Bit Name=\"reg_w_thre_l1c\" Authority=\"RW\" Bits=\"11-10\" />\r\n\t\t\t\t<Bit Name=\"reg_w_thre_bmx\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"bmx_err_tz\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"bmx_err_dec\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"bmx_err_addr_dis\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"bmx_err_addr\" Authority=\"RW\" Address=\"0x40000058\" Width=\"32\" Description=\"bmx_err_addr.\">\r\n\t\t\t\t<Bit Name=\"bmx_err_addr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"bmx_dbg_out\" Authority=\"RW\" Address=\"0x40000x5C\" Width=\"32\" Description=\"bmx_dbg_out.\">\r\n\t\t\t\t<Bit Name=\"bmx_dbg_out\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"rsv0\" Authority=\"RW\" Address=\"0x40000060\" Width=\"32\" Description=\"rsv0.\">\r\n\t\t\t\t<Bit Name=\"rsvd_31_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"rsv1\" Authority=\"RW\" Address=\"0x40000064\" Width=\"32\" Description=\"rsv1.\">\r\n\t\t\t\t<Bit Name=\"rsvd_31_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"rsv2\" Authority=\"RW\" Address=\"0x40000068\" Width=\"32\" Description=\"rsv2.\">\r\n\t\t\t\t<Bit Name=\"rsvd_31_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"rsv3\" Authority=\"RW\" Address=\"0x40000x6C\" Width=\"32\" Description=\"rsv3.\">\r\n\t\t\t\t<Bit Name=\"rsvd_31_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sram_ret\" Authority=\"RW\" Address=\"0x40000070\" Width=\"32\" Description=\"sram_ret.\">\r\n\t\t\t\t<Bit Name=\"reg_sram_ret\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sram_slp\" Authority=\"RW\" Address=\"0x40000074\" Width=\"32\" Description=\"sram_slp.\">\r\n\t\t\t\t<Bit Name=\"reg_sram_slp\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sram_parm\" Authority=\"RW\" Address=\"0x40000078\" Width=\"32\" Description=\"sram_parm.\">\r\n\t\t\t\t<Bit Name=\"reg_sram_parm\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"seam_misc\" Authority=\"RW\" Address=\"0x4000007C\" Width=\"32\" Description=\"seam_misc.\">\r\n\t\t\t\t<Bit Name=\"em_sel\" Authority=\"RW\" Bits=\"3-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"glb_parm\" Authority=\"RW\" Address=\"0x40000080\" Width=\"32\" Description=\"glb_parm.\">\r\n\t\t\t\t<Bit Name=\"pin_sel_emac_cam\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"reg_ext_rst_smt\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"reg_kys_drv_val\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"uart_swap_set\" Authority=\"RW\" Bits=\"27-24\" />\r\n\t\t\t\t<Bit Name=\"p6_jtag_use_io_0_2_7\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"p5_dac_test_with_jtag\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"p4_adc_test_with_jtag\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"p3_cci_use_io_0_2_7\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"p2_dac_test_with_cci\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"p1_adc_test_with_cci\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_cci_use_jtag_pin\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_spi_0_swap\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"reg_spi_0_master_mode\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"cfg_flash_scenario\" Authority=\"RW\" Bits=\"11-10\" />\r\n\t\t\t\t<Bit Name=\"cfg_sflash2_swap_cs_io2\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"cfg_sflash2_swap_io0_io3\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"jtag_swap_set\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"PDM_CLK_CTRL\" Authority=\"RW\" Address=\"0x40000084\" Width=\"32\" Description=\"PDM_CLK_CTRL.\">\r\n\t\t\t\t<Bit Name=\"reg_pdm0_clk_en\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"reg_pdm0_clk_div\" Authority=\"RW\" Bits=\"5-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_USE_PSRAM__IO\" Authority=\"RW\" Address=\"0x40000088\" Width=\"32\" Description=\"GPIO_USE_PSRAM__IO.\">\r\n\t\t\t\t<Bit Name=\"cfg_gpio_use_psram_io\" Authority=\"RW\" Bits=\"5-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"CPU_CLK_CFG\" Authority=\"RW\" Address=\"0x40000090\" Width=\"32\" Description=\"CPU_CLK_CFG.\">\r\n\t\t\t\t<Bit Name=\"debug_ndreset_gate\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"cpu_rtc_sel\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"cpu_rtc_en\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"cpu_rtc_div\" Authority=\"RW\" Bits=\"16-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPADC_32M_SRC_CTRL\" Authority=\"RW\" Address=\"0x400000A4\" Width=\"32\" Description=\"GPADC_32M_SRC_CTRL.\">\r\n\t\t\t\t<Bit Name=\"gpadc_32m_div_en\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"gpadc_32m_clk_sel\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"gpadc_32m_clk_div\" Authority=\"RW\" Bits=\"5-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DIG32K_WAKEUP_CTRL\" Authority=\"RW\" Address=\"0x400000A8\" Width=\"32\" Description=\"DIG32K_WAKEUP_CTRL.\">\r\n\t\t\t\t<Bit Name=\"reg_en_platform_wakeup\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"dig_clk_src_sel\" Authority=\"RW\" Bits=\"29-28\" />\r\n\t\t\t\t<Bit Name=\"dig_512k_comp\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"dig_512k_en\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"dig_512k_div\" Authority=\"RW\" Bits=\"22-16\" />\r\n\t\t\t\t<Bit Name=\"dig_32k_comp\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"dig_32k_en\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"dig_32k_div\" Authority=\"RW\" Bits=\"10-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"WIFI_BT_COEX_CTRL\" Authority=\"RW\" Address=\"0x400000AC\" Width=\"32\" Description=\"WIFI_BT_COEX_CTRL.\">\r\n\t\t\t\t<Bit Name=\"en_gpio_bt_coex\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"coex_bt_bw\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"coex_bt_pti\" Authority=\"RW\" Bits=\"10-7\" />\r\n\t\t\t\t<Bit Name=\"coex_bt_channel\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"BZ_COEX_CTRL\" Authority=\"RW\" Address=\"0x400000B0\" Width=\"32\" Description=\"BZ_COEX_CTRL.\">\r\n\t\t\t\t<Bit Name=\"coex_arb\" Authority=\"RW\" Bits=\"31-28\" />\r\n\t\t\t\t<Bit Name=\"ble_tx_abort_dis\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"ble_rx_abort_dis\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"m154_tx_abort_dis\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"m154_rx_abort_dis\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"coex_force_ch\" Authority=\"RW\" Bits=\"22-16\" />\r\n\t\t\t\t<Bit Name=\"coex_option\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"force_ble_win\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"force_m154_win\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"coex_pri\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"bz_abort_pol\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"bz_active_pol\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"bz_pri_pol\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"bz_pri_en\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"bz_pri_thr\" Authority=\"RW\" Bits=\"7-4\" />\r\n\t\t\t\t<Bit Name=\"m154_rx_ignore\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"ble_rx_ignore\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"wlan_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"coex_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"UART_SIG_SEL_0\" Authority=\"RW\" Address=\"0x400000C0\" Width=\"32\" Description=\"UART_SIG_SEL_0.\">\r\n\t\t\t\t<Bit Name=\"uart_sig_7_sel\" Authority=\"RW\" Bits=\"31-28\" />\r\n\t\t\t\t<Bit Name=\"uart_sig_6_sel\" Authority=\"RW\" Bits=\"27-24\" />\r\n\t\t\t\t<Bit Name=\"uart_sig_5_sel\" Authority=\"RW\" Bits=\"23-20\" />\r\n\t\t\t\t<Bit Name=\"uart_sig_4_sel\" Authority=\"RW\" Bits=\"19-16\" />\r\n\t\t\t\t<Bit Name=\"uart_sig_3_sel\" Authority=\"RW\" Bits=\"15-12\" />\r\n\t\t\t\t<Bit Name=\"uart_sig_2_sel\" Authority=\"RW\" Bits=\"11-8\" />\r\n\t\t\t\t<Bit Name=\"uart_sig_1_sel\" Authority=\"RW\" Bits=\"7-4\" />\r\n\t\t\t\t<Bit Name=\"uart_sig_0_sel\" Authority=\"RW\" Bits=\"3-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DBG_SEL_LL\" Authority=\"RW\" Address=\"0x400000D0\" Width=\"32\" Description=\"DBG_SEL_LL.\">\r\n\t\t\t\t<Bit Name=\"reg_dbg_ll_ctrl\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DBG_SEL_LH\" Authority=\"RW\" Address=\"0x400000D4\" Width=\"32\" Description=\"DBG_SEL_LH.\">\r\n\t\t\t\t<Bit Name=\"reg_dbg_lh_ctrl\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DBG_SEL_HL\" Authority=\"RW\" Address=\"0x400000D8\" Width=\"32\" Description=\"DBG_SEL_HL.\">\r\n\t\t\t\t<Bit Name=\"reg_dbg_hl_ctrl\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DBG_SEL_HH\" Authority=\"RW\" Address=\"0x400000DC\" Width=\"32\" Description=\"DBG_SEL_HH.\">\r\n\t\t\t\t<Bit Name=\"reg_dbg_hh_ctrl\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"debug\" Authority=\"RW\" Address=\"0x400000E0\" Width=\"32\" Description=\"debug.\">\r\n\t\t\t\t<Bit Name=\"debug_i\" Authority=\"RW\" Bits=\"31-1\" />\r\n\t\t\t\t<Bit Name=\"debug_oe\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL0\" Authority=\"RW\" Address=\"0x40000100\" Width=\"32\" Description=\"GPIO_CFGCTL0.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_1_func_sel\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_1_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_1_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_1_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_1_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_1_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_0_func_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_0_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_0_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_0_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_0_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_0_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL1\" Authority=\"RW\" Address=\"0x40000104\" Width=\"32\" Description=\"GPIO_CFGCTL1.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_3_func_sel\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_3_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_3_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_3_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_3_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_3_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_2_func_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_2_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_2_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_2_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_2_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_2_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL2\" Authority=\"RW\" Address=\"0x40000108\" Width=\"32\" Description=\"GPIO_CFGCTL2.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_5_func_sel\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_5_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_5_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_5_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_5_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_5_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_4_func_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_4_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_4_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_4_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_4_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_4_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL3\" Authority=\"RW\" Address=\"0x4000010C\" Width=\"32\" Description=\"GPIO_CFGCTL3.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_7_func_sel\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_7_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_7_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_7_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_7_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_7_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_6_func_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_6_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_6_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_6_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_6_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_6_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL4\" Authority=\"RW\" Address=\"0x40000110\" Width=\"32\" Description=\"GPIO_CFGCTL4.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_9_func_sel\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_9_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_9_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_9_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_9_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_9_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_8_func_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_8_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_8_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_8_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_8_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_8_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL5\" Authority=\"RW\" Address=\"0x40000114\" Width=\"32\" Description=\"GPIO_CFGCTL5.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_11_func_sel\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_11_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_11_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_11_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_11_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_11_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_10_func_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_10_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_10_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_10_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_10_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_10_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL6\" Authority=\"RW\" Address=\"0x40000118\" Width=\"32\" Description=\"GPIO_CFGCTL6.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_13_func_sel\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_13_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_13_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_13_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_13_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_13_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_12_func_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_12_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_12_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_12_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_12_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_12_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL7\" Authority=\"RW\" Address=\"0x4000011C\" Width=\"32\" Description=\"GPIO_CFGCTL7.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_15_func_sel\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_15_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_15_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_15_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_15_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_15_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_14_func_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_14_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_14_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_14_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_14_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_14_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL8\" Authority=\"RW\" Address=\"0x40000120\" Width=\"32\" Description=\"GPIO_CFGCTL8.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_17_func_sel\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_17_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_17_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_17_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_17_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_17_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_16_func_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_16_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_16_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_16_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_16_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_16_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL9\" Authority=\"RW\" Address=\"0x40000124\" Width=\"32\" Description=\"GPIO_CFGCTL9.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_19_func_sel\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_19_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_19_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_19_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_19_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_19_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_18_func_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_18_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_18_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_18_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_18_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_18_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL10\" Authority=\"RW\" Address=\"0x40000128\" Width=\"32\" Description=\"GPIO_CFGCTL10.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_21_func_sel\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_21_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_21_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_21_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_21_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_21_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_20_func_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_20_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_20_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_20_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_20_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_20_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL11\" Authority=\"RW\" Address=\"0x4000012C\" Width=\"32\" Description=\"GPIO_CFGCTL11.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_23_func_sel\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_23_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_23_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_23_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_23_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_23_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_22_func_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_22_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_22_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_22_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_22_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_22_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL12\" Authority=\"RW\" Address=\"0x40000130\" Width=\"32\" Description=\"GPIO_CFGCTL12.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_25_func_sel\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_25_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_25_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_25_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_25_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_25_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_24_func_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_24_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_24_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_24_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_24_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_24_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL13\" Authority=\"RW\" Address=\"0x40000134\" Width=\"32\" Description=\"GPIO_CFGCTL13.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_27_func_sel\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_27_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_27_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_27_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_27_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_27_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_26_func_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_26_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_26_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_26_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_26_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_26_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL14\" Authority=\"RW\" Address=\"0x40000138\" Width=\"32\" Description=\"GPIO_CFGCTL14.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_29_func_sel\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_29_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_29_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_29_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_29_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_29_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_28_func_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_28_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_28_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_28_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_28_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_28_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL15\" Authority=\"RW\" Address=\"0x4000013C\" Width=\"32\" Description=\"GPIO_CFGCTL15.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_31_func_sel\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_31_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_31_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_31_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_31_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_31_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_30_func_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_30_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_30_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_30_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_30_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_30_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL16\" Authority=\"RW\" Address=\"0x40000140\" Width=\"32\" Description=\"GPIO_CFGCTL16.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_33_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_33_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_33_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_33_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_33_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_32_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_32_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_32_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_32_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_32_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL17\" Authority=\"RW\" Address=\"0x40000144\" Width=\"32\" Description=\"GPIO_CFGCTL17.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_35_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_35_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_35_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_35_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_35_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_34_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_34_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_34_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_34_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_34_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL18\" Authority=\"RW\" Address=\"0x40000148\" Width=\"32\" Description=\"GPIO_CFGCTL18.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_37_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_37_pu\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_37_drv\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_37_smt\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_37_ie\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_36_pd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_36_pu\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_36_drv\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_36_smt\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_36_ie\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL30\" Authority=\"RW\" Address=\"0x40000180\" Width=\"32\" Description=\"GPIO_CFGCTL30.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_31_i\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_30_i\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_29_i\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_28_i\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_27_i\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_26_i\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_25_i\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_24_i\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_23_i\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_22_i\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_21_i\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_20_i\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_19_i\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_18_i\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_17_i\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_16_i\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_15_i\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_14_i\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_13_i\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_12_i\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_11_i\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_10_i\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_9_i\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_8_i\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_7_i\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_6_i\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_5_i\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_4_i\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_3_i\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_2_i\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_1_i\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_0_i\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL31\" Authority=\"RW\" Address=\"0x40000184\" Width=\"32\" Description=\"GPIO_CFGCTL31.\" />\r\n\t\t\t<Register Name=\"GPIO_CFGCTL32\" Authority=\"RW\" Address=\"0x40000188\" Width=\"32\" Description=\"GPIO_CFGCTL32.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_31_o\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_30_o\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_29_o\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_28_o\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_27_o\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_26_o\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_25_o\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_24_o\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_23_o\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_22_o\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_21_o\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_20_o\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_19_o\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_18_o\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_17_o\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_16_o\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_15_o\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_14_o\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_13_o\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_12_o\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_11_o\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_10_o\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_9_o\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_8_o\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_7_o\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_6_o\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_5_o\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_4_o\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_3_o\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_2_o\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_1_o\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_0_o\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL33\" Authority=\"RW\" Address=\"0x4000018C\" Width=\"32\" Description=\"GPIO_CFGCTL33.\" />\r\n\t\t\t<Register Name=\"GPIO_CFGCTL34\" Authority=\"RW\" Address=\"0x40000190\" Width=\"32\" Description=\"GPIO_CFGCTL34.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_31_oe\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_30_oe\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_29_oe\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_28_oe\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_27_oe\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_26_oe\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_25_oe\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_24_oe\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_23_oe\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_22_oe\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_21_oe\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_20_oe\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_19_oe\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_18_oe\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_17_oe\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_16_oe\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_15_oe\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_14_oe\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_13_oe\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_12_oe\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_11_oe\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_10_oe\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_9_oe\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_8_oe\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_7_oe\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_6_oe\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_5_oe\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_4_oe\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_3_oe\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_2_oe\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_1_oe\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_gpio_0_oe\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_CFGCTL35\" Authority=\"RW\" Address=\"0x40000194\" Width=\"32\" Description=\"GPIO_CFGCTL35.\" />\r\n\t\t\t<Register Name=\"GPIO_INT_MASK1\" Authority=\"RW\" Address=\"0x400001A0\" Width=\"32\" Description=\"GPIO_INT_MASK1.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_int_mask1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_INT_STAT1\" Authority=\"RW\" Address=\"0x400001A8\" Width=\"32\" Description=\"GPIO_INT_STAT1.\">\r\n\t\t\t\t<Bit Name=\"gpio_int_stat1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_INT_CLR1\" Authority=\"RW\" Address=\"0x400001B0\" Width=\"32\" Description=\"GPIO_INT_CLR1.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_int_clr1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_INT_MODE_SET1\" Authority=\"RW\" Address=\"0x400001C0\" Width=\"32\" Description=\"GPIO_INT_MODE_SET1.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_int_mode_set1\" Authority=\"RW\" Bits=\"29-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_INT_MODE_SET2\" Authority=\"RW\" Address=\"0x400001C4\" Width=\"32\" Description=\"GPIO_INT_MODE_SET2.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_int_mode_set2\" Authority=\"RW\" Bits=\"29-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_INT_MODE_SET3\" Authority=\"RW\" Address=\"0x400001C8\" Width=\"32\" Description=\"GPIO_INT_MODE_SET3.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_int_mode_set3\" Authority=\"RW\" Bits=\"29-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_INT_MODE_SET4\" Authority=\"RW\" Address=\"0x400001CC\" Width=\"32\" Description=\"GPIO_INT_MODE_SET4.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_int_mode_set4\" Authority=\"RW\" Bits=\"5-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_INT2_MASK1\" Authority=\"RW\" Address=\"0x400001D0\" Width=\"32\" Description=\"GPIO_INT2_MASK1.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_int2_mask1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_INT2_STAT1\" Authority=\"RW\" Address=\"0x400001D4\" Width=\"32\" Description=\"GPIO_INT2_STAT1.\">\r\n\t\t\t\t<Bit Name=\"gpio_int2_stat1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_INT2_CLR1\" Authority=\"RW\" Address=\"0x400001D8\" Width=\"32\" Description=\"GPIO_INT2_CLR1.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_int2_clr1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_INT2_MODE_SET1\" Authority=\"RW\" Address=\"0x400001DC\" Width=\"32\" Description=\"GPIO_INT2_MODE_SET1.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_int2_mode_set1\" Authority=\"RW\" Bits=\"29-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_INT2_MODE_SET2\" Authority=\"RW\" Address=\"0x400001E0\" Width=\"32\" Description=\"GPIO_INT2_MODE_SET2.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_int2_mode_set2\" Authority=\"RW\" Bits=\"29-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_INT2_MODE_SET3\" Authority=\"RW\" Address=\"0x400001E4\" Width=\"32\" Description=\"GPIO_INT2_MODE_SET3.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_int2_mode_set3\" Authority=\"RW\" Bits=\"29-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"GPIO_INT2_MODE_SET4\" Authority=\"RW\" Address=\"0x400001E8\" Width=\"32\" Description=\"GPIO_INT2_MODE_SET4.\">\r\n\t\t\t\t<Bit Name=\"reg_gpio_int2_mode_set4\" Authority=\"RW\" Bits=\"5-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"dll\" Authority=\"RW\" Address=\"0x40000200\" Width=\"32\" Description=\"dll.\">\r\n\t\t\t\t<Bit Name=\"ppu_dll\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"pu_dll\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"dll_reset\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"dll_refclk_sel\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"dll_cp_hiz\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"dll_cp_op_en\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"dll_delay_sel\" Authority=\"RW\" Bits=\"21-20\" />\r\n\t\t\t\t<Bit Name=\"dll_post_div\" Authority=\"RW\" Bits=\"19-16\" />\r\n\t\t\t\t<Bit Name=\"dll_vctrl_force_en\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"dll_prechg_en\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"dll_prechg_reg\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"dll_prechg_sel\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"dll_vctrl_sel\" Authority=\"RW\" Bits=\"10-8\" />\r\n\t\t\t\t<Bit Name=\"dll_clk_57p6M_en\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"dll_clk_96M_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"dll_clk_144M_en\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"dll_clk_288M_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"dll_clk_mmdiv_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"ten_dll\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"dtest_en_dll_outclk\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"dtest_en_dll_refclk\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"led_driver\" Authority=\"RW\" Address=\"0x40000224\" Width=\"32\" Description=\"led_driver.\">\r\n\t\t\t\t<Bit Name=\"pu_leddrv\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"leddrv_out_en\" Authority=\"RW\" Bits=\"29-28\" />\r\n\t\t\t\t<Bit Name=\"ir_rx_gpio_sel\" Authority=\"RW\" Bits=\"11-8\" />\r\n\t\t\t\t<Bit Name=\"leddrv_ibias\" Authority=\"RW\" Bits=\"7-4\" />\r\n\t\t\t\t<Bit Name=\"led_din_polarity_sel\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"led_din_sel\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"led_din_reg\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"usb_xcvr\" Authority=\"RW\" Address=\"0x40000228\" Width=\"32\" Description=\"usb_xcvr.\">\r\n\t\t\t\t<Bit Name=\"usb_rcv\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"usb_vip\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"usb_vim\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"usb_bd\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"pu_usb\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"usb_sus\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"usb_spd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"usb_enum\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"usb_data_convert\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"usb_oeb\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"usb_oeb_reg\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"usb_oeb_sel\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"usb_rout_pmos\" Authority=\"RW\" Bits=\"10-8\" />\r\n\t\t\t\t<Bit Name=\"usb_rout_nmos\" Authority=\"RW\" Bits=\"6-4\" />\r\n\t\t\t\t<Bit Name=\"pu_usb_ldo\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"usb_ldo_vfb\" Authority=\"RW\" Bits=\"2-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"usb_xcvr_config\" Authority=\"RW\" Address=\"0x4000022C\" Width=\"32\" Description=\"usb_xcvr_config.\">\r\n\t\t\t\t<Bit Name=\"usb_slewrate_p_rise\" Authority=\"RW\" Bits=\"30-28\" />\r\n\t\t\t\t<Bit Name=\"usb_slewrate_p_fall\" Authority=\"RW\" Bits=\"26-24\" />\r\n\t\t\t\t<Bit Name=\"usb_slewrate_m_rise\" Authority=\"RW\" Bits=\"22-20\" />\r\n\t\t\t\t<Bit Name=\"usb_slewrate_m_fall\" Authority=\"RW\" Bits=\"18-16\" />\r\n\t\t\t\t<Bit Name=\"usb_res_pullup_tune\" Authority=\"RW\" Bits=\"14-12\" />\r\n\t\t\t\t<Bit Name=\"reg_usb_use_ctrl\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"usb_str_drv\" Authority=\"RW\" Bits=\"10-8\" />\r\n\t\t\t\t<Bit Name=\"reg_usb_use_xcvr\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"usb_bd_vth\" Authority=\"RW\" Bits=\"6-4\" />\r\n\t\t\t\t<Bit Name=\"usb_v_hys_p\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"usb_v_hys_m\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpdac_ctrl\" Authority=\"RW\" Address=\"0x40000308\" Width=\"32\" Description=\"gpdac_ctrl.\">\r\n\t\t\t\t<Bit Name=\"gpdac_reserved\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"gpdac_test_sel\" Authority=\"RW\" Bits=\"11-9\" />\r\n\t\t\t\t<Bit Name=\"gpdac_ref_sel\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"gpdac_test_en\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"gpdacb_rstn_ana\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"gpdaca_rstn_ana\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpdac_actrl\" Authority=\"RW\" Address=\"0x4000030C\" Width=\"32\" Description=\"gpdac_actrl.\">\r\n\t\t\t\t<Bit Name=\"gpdac_a_outmux\" Authority=\"RW\" Bits=\"22-20\" />\r\n\t\t\t\t<Bit Name=\"gpdac_a_rng\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"gpdac_ioa_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"gpdac_a_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpdac_bctrl\" Authority=\"RW\" Address=\"0x40000310\" Width=\"32\" Description=\"gpdac_bctrl.\">\r\n\t\t\t\t<Bit Name=\"gpdac_b_outmux\" Authority=\"RW\" Bits=\"22-20\" />\r\n\t\t\t\t<Bit Name=\"gpdac_b_rng\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"gpdac_iob_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"gpdac_b_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpdac_data\" Authority=\"RW\" Address=\"0x40000314\" Width=\"32\" Description=\"gpdac_data.\">\r\n\t\t\t\t<Bit Name=\"gpdac_a_data\" Authority=\"RW\" Bits=\"25-16\" />\r\n\t\t\t\t<Bit Name=\"gpdac_b_data\" Authority=\"RW\" Bits=\"9-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"chip_revision\" Authority=\"RW\" Address=\"0x40000E00\" Width=\"32\" Description=\"chip_revision.\">\r\n\t\t\t\t<Bit Name=\"chip_rev\" Authority=\"RW\" Bits=\"3-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"tzc_glb_ctrl_0\" Authority=\"RW\" Address=\"0x40000F00\" Width=\"32\" Description=\"tzc_glb_ctrl_0.\">\r\n\t\t\t\t<Bit Name=\"tzc_glb_clk_lock\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_mbist_lock\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_dbg_lock\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_bmx_lock\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_l2c_lock\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_sram_lock\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_misc_lock\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_ctrl_ungated_ap_lock\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_ctrl_sys_reset_lock\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_ctrl_cpu_reset_lock\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_ctrl_pwron_rst_lock\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s30_lock\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s01_lock\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s00_lock\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"tzc_glb_ctrl_1\" Authority=\"RW\" Address=\"0x40000F04\" Width=\"32\" Description=\"tzc_glb_ctrl_1.\">\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s1f_lock\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s1e_lock\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s1d_lock\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s1c_lock\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s1b_lock\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s1a_lock\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s19_lock\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s18_lock\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s17_lock\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s16_lock\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s15_lock\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s14_lock\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s13_lock\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s12_lock\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s11_lock\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s10_lock\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s2f_lock\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s2e_lock\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s2d_lock\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s2c_lock\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s2b_lock\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s2a_lock\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s29_lock\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s28_lock\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s27_lock\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s26_lock\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s25_lock\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s24_lock\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s23_lock\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s22_lock\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s21_lock\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_swrst_s20_lock\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"tzc_glb_ctrl_2\" Authority=\"RW\" Address=\"0x40000F08\" Width=\"32\" Description=\"tzc_glb_ctrl_2.\">\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_31_lock\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_30_lock\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_29_lock\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_28_lock\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_27_lock\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_26_lock\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_25_lock\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_24_lock\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_23_lock\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_22_lock\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_21_lock\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_20_lock\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_19_lock\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_18_lock\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_17_lock\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_16_lock\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_15_lock\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_14_lock\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_13_lock\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_12_lock\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_11_lock\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_10_lock\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_9_lock\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_8_lock\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_7_lock\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_6_lock\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_5_lock\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_4_lock\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_3_lock\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_2_lock\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_1_lock\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_0_lock\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"tzc_glb_ctrl_3\" Authority=\"RW\" Address=\"0x40000F0C\" Width=\"32\" Description=\"tzc_glb_ctrl_3.\">\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_37_lock\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_36_lock\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_35_lock\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_34_lock\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_33_lock\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"tzc_glb_gpio_32_lock\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"gpip\">\r\n\t\t\t<Register Name=\"gpadc_config\" Authority=\"RW\" Address=\"0x40002000\" Width=\"32\" Description=\"gpadc_config.\">\r\n\t\t\t\t<Bit Name=\"rsvd_31_24\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"gpadc_fifo_thl\" Authority=\"RW\" Bits=\"23-22\" />\r\n\t\t\t\t<Bit Name=\"gpadc_fifo_data_count\" Authority=\"RW\" Bits=\"21-16\" />\r\n\t\t\t\t<Bit Name=\"gpadc_fifo_rdy_mask\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"gpadc_fifo_underrun_mask\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"gpadc_fifo_overrun_mask\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"gpadc_rdy_mask\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"gpadc_fifo_underrun_clr\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"gpadc_fifo_overrun_clr\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"gpadc_rdy_clr\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"gpadc_fifo_rdy\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"gpadc_fifo_underrun\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"gpadc_fifo_overrun\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"gpadc_rdy\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"gpadc_fifo_full\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"gpadc_fifo_ne\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"gpadc_fifo_clr\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"gpadc_dma_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpadc_dma_rdata\" Authority=\"RW\" Address=\"0x40002004\" Width=\"32\" Description=\"gpadc_dma_rdata.\">\r\n\t\t\t\t<Bit Name=\"rsvd_31_26\" Authority=\"RW\" Bits=\"31-26\" />\r\n\t\t\t\t<Bit Name=\"gpadc_dma_rdata\" Authority=\"RW\" Bits=\"25-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpdac_config\" Authority=\"RW\" Address=\"0x40002040\" Width=\"32\" Description=\"gpdac_config.\">\r\n\t\t\t\t<Bit Name=\"rsvd_31_24\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"gpdac_ch_b_sel\" Authority=\"RW\" Bits=\"23-20\" />\r\n\t\t\t\t<Bit Name=\"gpdac_ch_a_sel\" Authority=\"RW\" Bits=\"19-16\" />\r\n\t\t\t\t<Bit Name=\"gpdac_mode\" Authority=\"RW\" Bits=\"10-8\" />\r\n\t\t\t\t<Bit Name=\"dsm_mode\" Authority=\"RW\" Bits=\"5-4\" />\r\n\t\t\t\t<Bit Name=\"gpdac_en2\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"gpdac_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpdac_dma_config\" Authority=\"RW\" Address=\"0x40002044\" Width=\"32\" Description=\"gpdac_dma_config.\">\r\n\t\t\t\t<Bit Name=\"gpdac_dma_format\" Authority=\"RW\" Bits=\"5-4\" />\r\n\t\t\t\t<Bit Name=\"gpdac_dma_tx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpdac_dma_wdata\" Authority=\"RW\" Address=\"0x40002048\" Width=\"32\" Description=\"gpdac_dma_wdata.\">\r\n\t\t\t\t<Bit Name=\"gpdac_dma_wdata\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpdac_tx_fifo_status\" Authority=\"RW\" Address=\"0x40002x4C\" Width=\"32\" Description=\"gpdac_tx_fifo_status.\">\r\n\t\t\t\t<Bit Name=\"TxFifoWrPtr\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"TxFifoRdPtr\" Authority=\"RW\" Bits=\"6-4\" />\r\n\t\t\t\t<Bit Name=\"tx_cs\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_full\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_empty\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"sec_dbg\">\r\n\t\t\t<Register Name=\"sd_chip_id_low\" Authority=\"RW\" Address=\"0x40003000\" Width=\"32\" Description=\"sd_chip_id_low.\">\r\n\t\t\t\t<Bit Name=\"sd_chip_id_low\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sd_chip_id_high\" Authority=\"RW\" Address=\"0x40003004\" Width=\"32\" Description=\"sd_chip_id_high.\">\r\n\t\t\t\t<Bit Name=\"sd_chip_id_high\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sd_wifi_mac_low\" Authority=\"RW\" Address=\"0x40003008\" Width=\"32\" Description=\"sd_wifi_mac_low.\">\r\n\t\t\t\t<Bit Name=\"sd_wifi_mac_low\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sd_wifi_mac_high\" Authority=\"RW\" Address=\"0x4000300C\" Width=\"32\" Description=\"sd_wifi_mac_high.\">\r\n\t\t\t\t<Bit Name=\"sd_wifi_mac_high\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sd_dbg_pwd_low\" Authority=\"RW\" Address=\"0x40003010\" Width=\"32\" Description=\"sd_dbg_pwd_low.\">\r\n\t\t\t\t<Bit Name=\"sd_dbg_pwd_low\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sd_dbg_pwd_high\" Authority=\"RW\" Address=\"0x40003014\" Width=\"32\" Description=\"sd_dbg_pwd_high.\">\r\n\t\t\t\t<Bit Name=\"sd_dbg_pwd_high\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sd_status\" Authority=\"RW\" Address=\"0x40003018\" Width=\"32\" Description=\"sd_status.\">\r\n\t\t\t\t<Bit Name=\"sd_dbg_ena\" Authority=\"RW\" Bits=\"31-28\" />\r\n\t\t\t\t<Bit Name=\"sd_dbg_mode\" Authority=\"RW\" Bits=\"27-24\" />\r\n\t\t\t\t<Bit Name=\"sd_dbg_pwd_cnt\" Authority=\"RW\" Bits=\"23-4\" />\r\n\t\t\t\t<Bit Name=\"sd_dbg_cci_clk_sel\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"sd_dbg_cci_read_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"sd_dbg_pwd_trig\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"sd_dbg_pwd_busy\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sd_dbg_reserved\" Authority=\"RW\" Address=\"0x4000301C\" Width=\"32\" Description=\"sd_dbg_reserved.\">\r\n\t\t\t\t<Bit Name=\"sd_dbg_reserved\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"sec_eng\">\r\n\t\t\t<Register Name=\"se_sha_0_ctrl\" Authority=\"RW\" Address=\"0x40004000\" Width=\"32\" Description=\"se_sha_0_ctrl.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_msg_len\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"se_sha_0_link_mode\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"se_sha_0_int_mask\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"se_sha_0_int_set_1t\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"se_sha_0_int_clr_1t\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"se_sha_0_int\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_sel\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"se_sha_0_en\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"se_sha_0_mode\" Authority=\"RW\" Bits=\"4-2\" />\r\n\t\t\t\t<Bit Name=\"se_sha_0_trig_1t\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"se_sha_0_busy\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_msa\" Authority=\"RW\" Address=\"0x40004004\" Width=\"32\" Description=\"se_sha_0_msa.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_msa\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_status\" Authority=\"RW\" Address=\"0x40004008\" Width=\"32\" Description=\"se_sha_0_status.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_status\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_endian\" Authority=\"RW\" Address=\"0x4000400C\" Width=\"32\" Description=\"se_sha_0_endian.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_dout_endian\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_hash_l_0\" Authority=\"RW\" Address=\"0x40004010\" Width=\"32\" Description=\"se_sha_0_hash_l_0.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_l_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_hash_l_1\" Authority=\"RW\" Address=\"0x40004014\" Width=\"32\" Description=\"se_sha_0_hash_l_1.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_l_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_hash_l_2\" Authority=\"RW\" Address=\"0x40004018\" Width=\"32\" Description=\"se_sha_0_hash_l_2.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_l_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_hash_l_3\" Authority=\"RW\" Address=\"0x4000401C\" Width=\"32\" Description=\"se_sha_0_hash_l_3.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_l_3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_hash_l_4\" Authority=\"RW\" Address=\"0x40004020\" Width=\"32\" Description=\"se_sha_0_hash_l_4.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_l_4\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_hash_l_5\" Authority=\"RW\" Address=\"0x40004024\" Width=\"32\" Description=\"se_sha_0_hash_l_5.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_l_5\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_hash_l_6\" Authority=\"RW\" Address=\"0x40004028\" Width=\"32\" Description=\"se_sha_0_hash_l_6.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_l_6\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_hash_l_7\" Authority=\"RW\" Address=\"0x40004x2C\" Width=\"32\" Description=\"se_sha_0_hash_l_7.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_l_7\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_hash_h_0\" Authority=\"RW\" Address=\"0x40004030\" Width=\"32\" Description=\"se_sha_0_hash_h_0.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_h_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_hash_h_1\" Authority=\"RW\" Address=\"0x40004034\" Width=\"32\" Description=\"se_sha_0_hash_h_1.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_h_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_hash_h_2\" Authority=\"RW\" Address=\"0x40004038\" Width=\"32\" Description=\"se_sha_0_hash_h_2.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_h_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_hash_h_3\" Authority=\"RW\" Address=\"0x40004x3C\" Width=\"32\" Description=\"se_sha_0_hash_h_3.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_h_3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_hash_h_4\" Authority=\"RW\" Address=\"0x40004040\" Width=\"32\" Description=\"se_sha_0_hash_h_4.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_h_4\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_hash_h_5\" Authority=\"RW\" Address=\"0x40004044\" Width=\"32\" Description=\"se_sha_0_hash_h_5.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_h_5\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_hash_h_6\" Authority=\"RW\" Address=\"0x40004048\" Width=\"32\" Description=\"se_sha_0_hash_h_6.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_h_6\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_hash_h_7\" Authority=\"RW\" Address=\"0x40004x4C\" Width=\"32\" Description=\"se_sha_0_hash_h_7.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_hash_h_7\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_link\" Authority=\"RW\" Address=\"0x40004050\" Width=\"32\" Description=\"se_sha_0_link.\">\r\n\t\t\t\t<Bit Name=\"se_sha_0_lca\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_sha_0_ctrl_prot\" Authority=\"RW\" Address=\"0x400040FC\" Width=\"32\" Description=\"se_sha_0_ctrl_prot.\">\r\n\t\t\t\t<Bit Name=\"se_sha_id1_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"se_sha_id0_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"se_sha_prot_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_ctrl\" Authority=\"RW\" Address=\"0x40004100\" Width=\"32\" Description=\"se_aes_0_ctrl.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_msg_len\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_link_mode\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_iv_sel\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_block_mode\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_int_mask\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_int_set_1t\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_int_clr_1t\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_int\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_hw_key_en\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_dec_key_sel\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_dec_en\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_mode\" Authority=\"RW\" Bits=\"4-3\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_trig_1t\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_busy\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_msa\" Authority=\"RW\" Address=\"0x40004104\" Width=\"32\" Description=\"se_aes_0_msa.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_msa\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_mda\" Authority=\"RW\" Address=\"0x40004108\" Width=\"32\" Description=\"se_aes_0_mda.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_mda\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_status\" Authority=\"RW\" Address=\"0x4000410C\" Width=\"32\" Description=\"se_aes_0_status.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_status\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_iv_0\" Authority=\"RW\" Address=\"0x40004110\" Width=\"32\" Description=\"se_aes_0_iv_0.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_iv_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_iv_1\" Authority=\"RW\" Address=\"0x40004114\" Width=\"32\" Description=\"se_aes_0_iv_1.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_iv_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_iv_2\" Authority=\"RW\" Address=\"0x40004118\" Width=\"32\" Description=\"se_aes_0_iv_2.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_iv_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_iv_3\" Authority=\"RW\" Address=\"0x4000411C\" Width=\"32\" Description=\"se_aes_0_iv_3.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_iv_3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_key_0\" Authority=\"RW\" Address=\"0x40004120\" Width=\"32\" Description=\"se_aes_0_key_0.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_key_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_key_1\" Authority=\"RW\" Address=\"0x40004124\" Width=\"32\" Description=\"se_aes_0_key_1.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_key_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_key_2\" Authority=\"RW\" Address=\"0x40004128\" Width=\"32\" Description=\"se_aes_0_key_2.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_key_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_key_3\" Authority=\"RW\" Address=\"0x4000412C\" Width=\"32\" Description=\"se_aes_0_key_3.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_key_3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_key_4\" Authority=\"RW\" Address=\"0x40004130\" Width=\"32\" Description=\"se_aes_0_key_4.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_key_4\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_key_5\" Authority=\"RW\" Address=\"0x40004134\" Width=\"32\" Description=\"se_aes_0_key_5.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_key_5\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_key_6\" Authority=\"RW\" Address=\"0x40004138\" Width=\"32\" Description=\"se_aes_0_key_6.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_key_6\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_key_7\" Authority=\"RW\" Address=\"0x4000413C\" Width=\"32\" Description=\"se_aes_0_key_7.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_key_7\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_key_sel_0\" Authority=\"RW\" Address=\"0x40004140\" Width=\"32\" Description=\"se_aes_0_key_sel_0.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_key_sel_0\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_key_sel_1\" Authority=\"RW\" Address=\"0x40004144\" Width=\"32\" Description=\"se_aes_0_key_sel_1.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_key_sel_1\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_endian\" Authority=\"RW\" Address=\"0x40004148\" Width=\"32\" Description=\"se_aes_0_endian.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_ctr_len\" Authority=\"RW\" Bits=\"31-30\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_iv_endian\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_key_endian\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_din_endian\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"se_aes_0_dout_endian\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_sboot\" Authority=\"RW\" Address=\"0x4000414C\" Width=\"32\" Description=\"se_aes_0_sboot.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_sboot_key_sel\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_link\" Authority=\"RW\" Address=\"0x40004150\" Width=\"32\" Description=\"se_aes_0_link.\">\r\n\t\t\t\t<Bit Name=\"se_aes_0_lca\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_aes_0_ctrl_prot\" Authority=\"RW\" Address=\"0x400041FC\" Width=\"32\" Description=\"se_aes_0_ctrl_prot.\">\r\n\t\t\t\t<Bit Name=\"se_aes_id1_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"se_aes_id0_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"se_aes_prot_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_ctrl_0\" Authority=\"RW\" Address=\"0x40004200\" Width=\"32\" Description=\"se_trng_0_ctrl_0.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_manual_en\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_manual_reseed\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_manual_fun_sel\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_int_mask\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_int_set_1t\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_int_clr_1t\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_int\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_ht_error\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_dout_clr_1t\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_trig_1t\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_busy\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_status\" Authority=\"RW\" Address=\"0x40004204\" Width=\"32\" Description=\"se_trng_0_status.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_status\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_dout_0\" Authority=\"RW\" Address=\"0x40004208\" Width=\"32\" Description=\"se_trng_0_dout_0.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_dout_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_dout_1\" Authority=\"RW\" Address=\"0x4000420C\" Width=\"32\" Description=\"se_trng_0_dout_1.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_dout_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_dout_2\" Authority=\"RW\" Address=\"0x40004210\" Width=\"32\" Description=\"se_trng_0_dout_2.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_dout_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_dout_3\" Authority=\"RW\" Address=\"0x40004214\" Width=\"32\" Description=\"se_trng_0_dout_3.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_dout_3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_dout_4\" Authority=\"RW\" Address=\"0x40004218\" Width=\"32\" Description=\"se_trng_0_dout_4.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_dout_4\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_dout_5\" Authority=\"RW\" Address=\"0x4000421C\" Width=\"32\" Description=\"se_trng_0_dout_5.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_dout_5\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_dout_6\" Authority=\"RW\" Address=\"0x40004220\" Width=\"32\" Description=\"se_trng_0_dout_6.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_dout_6\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_dout_7\" Authority=\"RW\" Address=\"0x40004224\" Width=\"32\" Description=\"se_trng_0_dout_7.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_dout_7\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_test\" Authority=\"RW\" Address=\"0x40004228\" Width=\"32\" Description=\"se_trng_0_test.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_ht_alarm_n\" Authority=\"RW\" Bits=\"11-4\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_ht_dis\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_cp_bypass\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_cp_test_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_test_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_ctrl_1\" Authority=\"RW\" Address=\"0x4000422C\" Width=\"32\" Description=\"se_trng_0_ctrl_1.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_reseed_n_lsb\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_ctrl_2\" Authority=\"RW\" Address=\"0x40004230\" Width=\"32\" Description=\"se_trng_0_ctrl_2.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_reseed_n_msb\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_ctrl_3\" Authority=\"RW\" Address=\"0x40004234\" Width=\"32\" Description=\"se_trng_0_ctrl_3.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_rosc_en\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_ht_od_en\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_ht_apt_c\" Authority=\"RW\" Bits=\"25-16\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_ht_rct_c\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t\t<Bit Name=\"se_trng_0_cp_ratio\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_test_out_0\" Authority=\"RW\" Address=\"0x40004240\" Width=\"32\" Description=\"se_trng_0_test_out_0.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_test_out_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_test_out_1\" Authority=\"RW\" Address=\"0x40004244\" Width=\"32\" Description=\"se_trng_0_test_out_1.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_test_out_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_test_out_2\" Authority=\"RW\" Address=\"0x40004248\" Width=\"32\" Description=\"se_trng_0_test_out_2.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_test_out_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_test_out_3\" Authority=\"RW\" Address=\"0x4000424C\" Width=\"32\" Description=\"se_trng_0_test_out_3.\">\r\n\t\t\t\t<Bit Name=\"se_trng_0_test_out_3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_trng_0_ctrl_prot\" Authority=\"RW\" Address=\"0x400042FC\" Width=\"32\" Description=\"se_trng_0_ctrl_prot.\">\r\n\t\t\t\t<Bit Name=\"se_trng_id1_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"se_trng_id0_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"se_trng_prot_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_pka_0_ctrl_0\" Authority=\"RW\" Address=\"0x40004300\" Width=\"32\" Description=\"se_pka_0_ctrl_0.\">\r\n\t\t\t\t<Bit Name=\"se_pka_0_status\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"se_pka_0_status_clr_1t\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"se_pka_0_ram_clr_md\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"se_pka_0_endian\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"se_pka_0_int_mask\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"se_pka_0_int_set\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"se_pka_0_int_clr_1t\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"se_pka_0_int\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"se_pka_0_prot_md\" Authority=\"RW\" Bits=\"7-4\" />\r\n\t\t\t\t<Bit Name=\"se_pka_0_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"se_pka_0_busy\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"se_pka_0_done_clr_1t\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"se_pka_0_done\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_pka_0_seed\" Authority=\"RW\" Address=\"0x4000430C\" Width=\"32\" Description=\"se_pka_0_seed.\">\r\n\t\t\t\t<Bit Name=\"se_pka_0_seed\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_pka_0_ctrl_1\" Authority=\"RW\" Address=\"0x40004310\" Width=\"32\" Description=\"se_pka_0_ctrl_1.\">\r\n\t\t\t\t<Bit Name=\"se_pka_0_hbypass\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"se_pka_0_hburst\" Authority=\"RW\" Bits=\"2-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_pka_0_rw\" Authority=\"RW\" Address=\"0x40004340\" Width=\"32\" Description=\"se_pka_0_rw.\" />\r\n\t\t\t<Register Name=\"se_pka_0_rw_burst\" Authority=\"RW\" Address=\"0x40004360\" Width=\"32\" Description=\"se_pka_0_rw_burst.\" />\r\n\t\t\t<Register Name=\"se_pka_0_ctrl_prot\" Authority=\"RW\" Address=\"0x400043FC\" Width=\"32\" Description=\"se_pka_0_ctrl_prot.\">\r\n\t\t\t\t<Bit Name=\"se_pka_id1_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"se_pka_id0_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"se_pka_prot_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_cdet_0_ctrl_0\" Authority=\"RW\" Address=\"0x40004400\" Width=\"32\" Description=\"se_cdet_0_ctrl_0.\">\r\n\t\t\t\t<Bit Name=\"se_cdet_0_g_loop_min\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"se_cdet_0_g_loop_max\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"se_cdet_0_status\" Authority=\"RW\" Bits=\"15-2\" />\r\n\t\t\t\t<Bit Name=\"se_cdet_0_error\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"se_cdet_0_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_cdet_0_ctrl_1\" Authority=\"RW\" Address=\"0x40004404\" Width=\"32\" Description=\"se_cdet_0_ctrl_1.\">\r\n\t\t\t\t<Bit Name=\"se_cdet_0_g_slp_n\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"se_cdet_0_t_dly_n\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t\t<Bit Name=\"se_cdet_0_t_loop_n\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_cdet_0_ctrl_prot\" Authority=\"RW\" Address=\"0x400044FC\" Width=\"32\" Description=\"se_cdet_0_ctrl_prot.\">\r\n\t\t\t\t<Bit Name=\"se_cdet_id1_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"se_cdet_id0_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"se_cdet_prot_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_gmac_0_ctrl_0\" Authority=\"RW\" Address=\"0x40004500\" Width=\"32\" Description=\"se_gmac_0_ctrl_0.\">\r\n\t\t\t\t<Bit Name=\"se_gmac_0_x_endian\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"se_gmac_0_h_endian\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"se_gmac_0_t_endian\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"se_gmac_0_int_mask\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"se_gmac_0_int_set_1t\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"se_gmac_0_int_clr_1t\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"se_gmac_0_int\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"se_gmac_0_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"se_gmac_0_trig_1t\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"se_gmac_0_busy\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_gmac_0_lca\" Authority=\"RW\" Address=\"0x40004504\" Width=\"32\" Description=\"se_gmac_0_lca.\">\r\n\t\t\t\t<Bit Name=\"se_gmac_0_lca\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_gmac_0_status\" Authority=\"RW\" Address=\"0x40004508\" Width=\"32\" Description=\"se_gmac_0_status.\">\r\n\t\t\t\t<Bit Name=\"se_gmac_0_status\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_gmac_0_ctrl_prot\" Authority=\"RW\" Address=\"0x400045FC\" Width=\"32\" Description=\"se_gmac_0_ctrl_prot.\">\r\n\t\t\t\t<Bit Name=\"se_gmac_id1_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"se_gmac_id0_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"se_gmac_prot_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_ctrl_prot_rd\" Authority=\"RW\" Address=\"0x40004F00\" Width=\"32\" Description=\"se_ctrl_prot_rd.\">\r\n\t\t\t\t<Bit Name=\"se_dbg_dis\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"se_gmac_id1_en_rd\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"se_gmac_id0_en_rd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"se_gmac_prot_en_rd\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"se_cdet_id1_en_rd\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"se_cdet_id0_en_rd\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"se_cdet_prot_en_rd\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"se_pka_id1_en_rd\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"se_pka_id0_en_rd\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"se_pka_prot_en_rd\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"se_trng_id1_en_rd\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"se_trng_id0_en_rd\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"se_trng_prot_en_rd\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"se_aes_id1_en_rd\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"se_aes_id0_en_rd\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"se_aes_prot_en_rd\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"se_sha_id1_en_rd\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"se_sha_id0_en_rd\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"se_sha_prot_en_rd\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_ctrl_reserved_0\" Authority=\"RW\" Address=\"0x40004F04\" Width=\"32\" Description=\"se_ctrl_reserved_0.\">\r\n\t\t\t\t<Bit Name=\"se_ctrl_reserved_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_ctrl_reserved_1\" Authority=\"RW\" Address=\"0x40004F08\" Width=\"32\" Description=\"se_ctrl_reserved_1.\">\r\n\t\t\t\t<Bit Name=\"se_ctrl_reserved_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"se_ctrl_reserved_2\" Authority=\"RW\" Address=\"0x40004F0C\" Width=\"32\" Description=\"se_ctrl_reserved_2.\">\r\n\t\t\t\t<Bit Name=\"se_ctrl_reserved_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"tzc_sec\">\r\n\t\t\t<Register Name=\"tzc_rom_ctrl\" Authority=\"RW\" Address=\"0x40005040\" Width=\"32\" Description=\"tzc_rom_ctrl.\">\r\n\t\t\t\t<Bit Name=\"tzc_sboot_done\" Authority=\"RW\" Bits=\"31-28\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r1_lock\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r0_lock\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r1_lock\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r0_lock\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r1_en\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r0_en\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r1_en\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r0_en\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r1_id1_en\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r0_id1_en\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r1_id1_en\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r0_id1_en\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r1_id0_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r0_id0_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r1_id0_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r0_id0_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"tzc_rom0_r0\" Authority=\"RW\" Address=\"0x40005044\" Width=\"32\" Description=\"tzc_rom0_r0.\">\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r0_start\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r0_end\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"tzc_rom0_r1\" Authority=\"RW\" Address=\"0x40005048\" Width=\"32\" Description=\"tzc_rom0_r1.\">\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r1_start\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r1_end\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"tzc_rom1_r0\" Authority=\"RW\" Address=\"0x40005x4C\" Width=\"32\" Description=\"tzc_rom1_r0.\">\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r0_start\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r0_end\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"tzc_rom1_r1\" Authority=\"RW\" Address=\"0x40005050\" Width=\"32\" Description=\"tzc_rom1_r1.\">\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r1_start\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r1_end\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"tzc_nsec\">\r\n\t\t\t<Register Name=\"tzc_rom_ctrl\" Authority=\"RW\" Address=\"0x40006040\" Width=\"32\" Description=\"tzc_rom_ctrl.\">\r\n\t\t\t\t<Bit Name=\"tzc_sboot_done\" Authority=\"RW\" Bits=\"31-28\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r1_lock\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r0_lock\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r1_lock\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r0_lock\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r1_en\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r0_en\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r1_en\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r0_en\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r1_id1_en\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r0_id1_en\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r1_id1_en\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r0_id1_en\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r1_id0_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r0_id0_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r1_id0_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r0_id0_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"tzc_rom0_r0\" Authority=\"RW\" Address=\"0x40006044\" Width=\"32\" Description=\"tzc_rom0_r0.\">\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r0_start\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r0_end\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"tzc_rom0_r1\" Authority=\"RW\" Address=\"0x40006048\" Width=\"32\" Description=\"tzc_rom0_r1.\">\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r1_start\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom0_r1_end\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"tzc_rom1_r0\" Authority=\"RW\" Address=\"0x40006x4C\" Width=\"32\" Description=\"tzc_rom1_r0.\">\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r0_start\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r0_end\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"tzc_rom1_r1\" Authority=\"RW\" Address=\"0x40006050\" Width=\"32\" Description=\"tzc_rom1_r1.\">\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r1_start\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"tzc_rom1_r1_end\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"ef_data_0\">\r\n\t\t\t<Register Name=\"ef_cfg_0\" Authority=\"RW\" Address=\"0x40007000\" Width=\"32\" Description=\"ef_cfg_0.\">\r\n\t\t\t\t<Bit Name=\"ef_dbg_mode\" Authority=\"RW\" Bits=\"31-28\" />\r\n\t\t\t\t<Bit Name=\"ef_dbg_jtag_0_dis\" Authority=\"RW\" Bits=\"27-26\" />\r\n\t\t\t\t<Bit Name=\"ef_dbg_jtag_1_dis\" Authority=\"RW\" Bits=\"25-24\" />\r\n\t\t\t\t<Bit Name=\"ef_efuse_dbg_dis\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"ef_se_dbg_dis\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"ef_cpu_rst_dbg_dis\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"ef_cpu1_dis\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"ef_sf_dis\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"ef_cam_dis\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"ef_0_key_enc_en\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"ef_wifi_dis\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"ef_ble_dis\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"ef_sdu_dis\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"ef_sf_key_0_sel\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"ef_boot_sel\" Authority=\"RW\" Bits=\"11-8\" />\r\n\t\t\t\t<Bit Name=\"ef_cpu0_enc_en\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"ef_cpu1_enc_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"ef_sboot_en\" Authority=\"RW\" Bits=\"5-4\" />\r\n\t\t\t\t<Bit Name=\"ef_sboot_sign_mode\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"ef_sf_aes_mode\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_dbg_pwd_low\" Authority=\"RW\" Address=\"0x40007004\" Width=\"32\" Description=\"ef_dbg_pwd_low.\">\r\n\t\t\t\t<Bit Name=\"ef_dbg_pwd_low\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_dbg_pwd_high\" Authority=\"RW\" Address=\"0x40007008\" Width=\"32\" Description=\"ef_dbg_pwd_high.\">\r\n\t\t\t\t<Bit Name=\"ef_dbg_pwd_high\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_ana_trim_0\" Authority=\"RW\" Address=\"0x4000700C\" Width=\"32\" Description=\"ef_ana_trim_0.\">\r\n\t\t\t\t<Bit Name=\"ef_ana_trim_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_sw_usage_0\" Authority=\"RW\" Address=\"0x40007010\" Width=\"32\" Description=\"ef_sw_usage_0.\">\r\n\t\t\t\t<Bit Name=\"ef_sw_usage_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_wifi_mac_low\" Authority=\"RW\" Address=\"0x40007014\" Width=\"32\" Description=\"ef_wifi_mac_low.\">\r\n\t\t\t\t<Bit Name=\"ef_wifi_mac_low\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_wifi_mac_high\" Authority=\"RW\" Address=\"0x40007018\" Width=\"32\" Description=\"ef_wifi_mac_high.\">\r\n\t\t\t\t<Bit Name=\"ef_wifi_mac_high\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_0_w0\" Authority=\"RW\" Address=\"0x4000701C\" Width=\"32\" Description=\"ef_key_slot_0_w0.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_0_w0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_0_w1\" Authority=\"RW\" Address=\"0x40007020\" Width=\"32\" Description=\"ef_key_slot_0_w1.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_0_w1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_0_w2\" Authority=\"RW\" Address=\"0x40007024\" Width=\"32\" Description=\"ef_key_slot_0_w2.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_0_w2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_0_w3\" Authority=\"RW\" Address=\"0x40007028\" Width=\"32\" Description=\"ef_key_slot_0_w3.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_0_w3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_1_w0\" Authority=\"RW\" Address=\"0x40007x2C\" Width=\"32\" Description=\"ef_key_slot_1_w0.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_1_w0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_1_w1\" Authority=\"RW\" Address=\"0x40007030\" Width=\"32\" Description=\"ef_key_slot_1_w1.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_1_w1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_1_w2\" Authority=\"RW\" Address=\"0x40007034\" Width=\"32\" Description=\"ef_key_slot_1_w2.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_1_w2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_1_w3\" Authority=\"RW\" Address=\"0x40007038\" Width=\"32\" Description=\"ef_key_slot_1_w3.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_1_w3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_2_w0\" Authority=\"RW\" Address=\"0x40007x3C\" Width=\"32\" Description=\"ef_key_slot_2_w0.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_2_w0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_2_w1\" Authority=\"RW\" Address=\"0x40007040\" Width=\"32\" Description=\"ef_key_slot_2_w1.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_2_w1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_2_w2\" Authority=\"RW\" Address=\"0x40007044\" Width=\"32\" Description=\"ef_key_slot_2_w2.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_2_w2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_2_w3\" Authority=\"RW\" Address=\"0x40007048\" Width=\"32\" Description=\"ef_key_slot_2_w3.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_2_w3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_3_w0\" Authority=\"RW\" Address=\"0x40007x4C\" Width=\"32\" Description=\"ef_key_slot_3_w0.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_3_w0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_3_w1\" Authority=\"RW\" Address=\"0x40007050\" Width=\"32\" Description=\"ef_key_slot_3_w1.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_3_w1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_3_w2\" Authority=\"RW\" Address=\"0x40007054\" Width=\"32\" Description=\"ef_key_slot_3_w2.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_3_w2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_3_w3\" Authority=\"RW\" Address=\"0x40007058\" Width=\"32\" Description=\"ef_key_slot_3_w3.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_3_w3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_4_w0\" Authority=\"RW\" Address=\"0x40007x5C\" Width=\"32\" Description=\"ef_key_slot_4_w0.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_4_w0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_4_w1\" Authority=\"RW\" Address=\"0x40007060\" Width=\"32\" Description=\"ef_key_slot_4_w1.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_4_w1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_4_w2\" Authority=\"RW\" Address=\"0x40007064\" Width=\"32\" Description=\"ef_key_slot_4_w2.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_4_w2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_4_w3\" Authority=\"RW\" Address=\"0x40007068\" Width=\"32\" Description=\"ef_key_slot_4_w3.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_4_w3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_5_w0\" Authority=\"RW\" Address=\"0x40007x6C\" Width=\"32\" Description=\"ef_key_slot_5_w0.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_5_w0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_5_w1\" Authority=\"RW\" Address=\"0x40007070\" Width=\"32\" Description=\"ef_key_slot_5_w1.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_5_w1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_5_w2\" Authority=\"RW\" Address=\"0x40007074\" Width=\"32\" Description=\"ef_key_slot_5_w2.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_5_w2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_key_slot_5_w3\" Authority=\"RW\" Address=\"0x40007078\" Width=\"32\" Description=\"ef_key_slot_5_w3.\">\r\n\t\t\t\t<Bit Name=\"ef_key_slot_5_w3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_data_0_lock\" Authority=\"RW\" Address=\"0x4000707C\" Width=\"32\" Description=\"ef_data_0_lock.\">\r\n\t\t\t\t<Bit Name=\"rd_lock_key_slot_5\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"rd_lock_key_slot_4\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"rd_lock_key_slot_3\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"rd_lock_key_slot_2\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"rd_lock_key_slot_1\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"rd_lock_key_slot_0\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"rd_lock_dbg_pwd\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"wr_lock_key_slot_5_h\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"wr_lock_key_slot_4_h\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"wr_lock_key_slot_3\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"wr_lock_key_slot_2\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"wr_lock_key_slot_1\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"wr_lock_key_slot_0\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"wr_lock_wifi_mac\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"wr_lock_sw_usage_0\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"wr_lock_dbg_pwd\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"wr_lock_boot_mode\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"wr_lock_key_slot_5_l\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"wr_lock_key_slot_4_l\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"ef_ana_trim_1\" Authority=\"RW\" Bits=\"12-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"ef_data_1\">\r\n\t\t\t<Register Name=\"reg_key_slot_6_w0\" Authority=\"RW\" Address=\"0x40007080\" Width=\"32\" Description=\"reg_key_slot_6_w0.\">\r\n\t\t\t\t<Bit Name=\"reg_key_slot_6_w0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"reg_key_slot_6_w1\" Authority=\"RW\" Address=\"0x40007084\" Width=\"32\" Description=\"reg_key_slot_6_w1.\">\r\n\t\t\t\t<Bit Name=\"reg_key_slot_6_w1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"reg_key_slot_6_w2\" Authority=\"RW\" Address=\"0x40007088\" Width=\"32\" Description=\"reg_key_slot_6_w2.\">\r\n\t\t\t\t<Bit Name=\"reg_key_slot_6_w2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"reg_key_slot_6_w3\" Authority=\"RW\" Address=\"0x4000708C\" Width=\"32\" Description=\"reg_key_slot_6_w3.\">\r\n\t\t\t\t<Bit Name=\"reg_key_slot_6_w3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"reg_key_slot_7_w0\" Authority=\"RW\" Address=\"0x40007090\" Width=\"32\" Description=\"reg_key_slot_7_w0.\">\r\n\t\t\t\t<Bit Name=\"reg_key_slot_7_w0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"reg_key_slot_7_w1\" Authority=\"RW\" Address=\"0x40007094\" Width=\"32\" Description=\"reg_key_slot_7_w1.\">\r\n\t\t\t\t<Bit Name=\"reg_key_slot_7_w1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"reg_key_slot_7_w2\" Authority=\"RW\" Address=\"0x40007098\" Width=\"32\" Description=\"reg_key_slot_7_w2.\">\r\n\t\t\t\t<Bit Name=\"reg_key_slot_7_w2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"reg_key_slot_7_w3\" Authority=\"RW\" Address=\"0x4000709C\" Width=\"32\" Description=\"reg_key_slot_7_w3.\">\r\n\t\t\t\t<Bit Name=\"reg_key_slot_7_w3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"reg_key_slot_8_w0\" Authority=\"RW\" Address=\"0x400070A0\" Width=\"32\" Description=\"reg_key_slot_8_w0.\">\r\n\t\t\t\t<Bit Name=\"reg_key_slot_8_w0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"reg_key_slot_8_w1\" Authority=\"RW\" Address=\"0x400070A4\" Width=\"32\" Description=\"reg_key_slot_8_w1.\">\r\n\t\t\t\t<Bit Name=\"reg_key_slot_8_w1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"reg_key_slot_8_w2\" Authority=\"RW\" Address=\"0x400070A8\" Width=\"32\" Description=\"reg_key_slot_8_w2.\">\r\n\t\t\t\t<Bit Name=\"reg_key_slot_8_w2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"reg_key_slot_8_w3\" Authority=\"RW\" Address=\"0x400070AC\" Width=\"32\" Description=\"reg_key_slot_8_w3.\">\r\n\t\t\t\t<Bit Name=\"reg_key_slot_8_w3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"reg_key_slot_9_w0\" Authority=\"RW\" Address=\"0x400070B0\" Width=\"32\" Description=\"reg_key_slot_9_w0.\">\r\n\t\t\t\t<Bit Name=\"reg_key_slot_9_w0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"reg_key_slot_9_w1\" Authority=\"RW\" Address=\"0x400070B4\" Width=\"32\" Description=\"reg_key_slot_9_w1.\">\r\n\t\t\t\t<Bit Name=\"reg_key_slot_9_w1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"reg_key_slot_9_w2\" Authority=\"RW\" Address=\"0x400070B8\" Width=\"32\" Description=\"reg_key_slot_9_w2.\">\r\n\t\t\t\t<Bit Name=\"reg_key_slot_9_w2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"reg_key_slot_9_w3\" Authority=\"RW\" Address=\"0x400070BC\" Width=\"32\" Description=\"reg_key_slot_9_w3.\">\r\n\t\t\t\t<Bit Name=\"reg_key_slot_9_w3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"reg_key_slot_10_w0\" Authority=\"RW\" Address=\"0x400070C0\" Width=\"32\" Description=\"reg_key_slot_10_w0.\" />\r\n\t\t\t<Register Name=\"reg_key_slot_10_w1\" Authority=\"RW\" Address=\"0x400070C4\" Width=\"32\" Description=\"reg_key_slot_10_w1.\" />\r\n\t\t\t<Register Name=\"reg_key_slot_10_w2\" Authority=\"RW\" Address=\"0x400070C8\" Width=\"32\" Description=\"reg_key_slot_10_w2.\" />\r\n\t\t\t<Register Name=\"reg_key_slot_10_w3\" Authority=\"RW\" Address=\"0x400070CC\" Width=\"32\" Description=\"reg_key_slot_10_w3.\" />\r\n\t\t\t<Register Name=\"reg_key_slot_11_w0\" Authority=\"RW\" Address=\"0x400070D0\" Width=\"32\" Description=\"reg_key_slot_11_w0.\" />\r\n\t\t\t<Register Name=\"reg_key_slot_11_w1\" Authority=\"RW\" Address=\"0x400070D4\" Width=\"32\" Description=\"reg_key_slot_11_w1.\" />\r\n\t\t\t<Register Name=\"reg_key_slot_11_w2\" Authority=\"RW\" Address=\"0x400070D8\" Width=\"32\" Description=\"reg_key_slot_11_w2.\" />\r\n\t\t\t<Register Name=\"reg_key_slot_11_w3\" Authority=\"RW\" Address=\"0x400070DC\" Width=\"32\" Description=\"reg_key_slot_11_w3.\" />\r\n\t\t\t<Register Name=\"reg_data_1_lock\" Authority=\"RW\" Address=\"0x400070E0\" Width=\"32\" Description=\"reg_data_1_lock.\">\r\n\t\t\t\t<Bit Name=\"rd_lock_key_slot_9\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"rd_lock_key_slot_8\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"rd_lock_key_slot_7\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"rd_lock_key_slot_6\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"RESERVED_25_16\" Authority=\"RW\" Bits=\"25-16\" />\r\n\t\t\t\t<Bit Name=\"wr_lock_key_slot_9\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"wr_lock_key_slot_8\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"wr_lock_key_slot_7\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"wr_lock_key_slot_6\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"RESERVED_9_0\" Authority=\"RW\" Bits=\"9-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"ef_ctrl\">\r\n\t\t\t<Register Name=\"ef_if_ctrl_0\" Authority=\"RW\" Address=\"0x40007800\" Width=\"32\" Description=\"ef_if_ctrl_0.\">\r\n\t\t\t\t<Bit Name=\"ef_if_prot_code_cyc\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"ef_if_0_int_set\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"ef_if_0_int_clr\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"ef_if_0_int\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"ef_if_cyc_modify_lock\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"ef_if_auto_rd_en\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"ef_clk_sahb_data_gate\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"ef_if_por_dig\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"ef_if_prot_code_ctrl\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t\t<Bit Name=\"ef_clk_sahb_data_sel\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"ef_if_0_cyc_modify\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"ef_if_0_manual_en\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"ef_if_0_trig\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"ef_if_0_rw\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"ef_if_0_busy\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"ef_if_0_autoload_done\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"ef_if_0_autoload_p1_done\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_if_cyc_0\" Authority=\"RW\" Address=\"0x40007804\" Width=\"32\" Description=\"ef_if_cyc_0.\">\r\n\t\t\t\t<Bit Name=\"ef_if_cyc_pd_cs_s\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"ef_if_cyc_cs\" Authority=\"RW\" Bits=\"23-18\" />\r\n\t\t\t\t<Bit Name=\"ef_if_cyc_rd_adr\" Authority=\"RW\" Bits=\"17-12\" />\r\n\t\t\t\t<Bit Name=\"ef_if_cyc_rd_dat\" Authority=\"RW\" Bits=\"11-6\" />\r\n\t\t\t\t<Bit Name=\"ef_if_cyc_rd_dmy\" Authority=\"RW\" Bits=\"5-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_if_cyc_1\" Authority=\"RW\" Address=\"0x40007808\" Width=\"32\" Description=\"ef_if_cyc_1.\">\r\n\t\t\t\t<Bit Name=\"ef_if_cyc_pd_cs_h\" Authority=\"RW\" Bits=\"31-26\" />\r\n\t\t\t\t<Bit Name=\"ef_if_cyc_ps_cs\" Authority=\"RW\" Bits=\"25-20\" />\r\n\t\t\t\t<Bit Name=\"ef_if_cyc_wr_adr\" Authority=\"RW\" Bits=\"19-14\" />\r\n\t\t\t\t<Bit Name=\"ef_if_cyc_pp\" Authority=\"RW\" Bits=\"13-6\" />\r\n\t\t\t\t<Bit Name=\"ef_if_cyc_pi\" Authority=\"RW\" Bits=\"5-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_if_0_manual\" Authority=\"RW\" Address=\"0x4000780C\" Width=\"32\" Description=\"ef_if_0_manual.\">\r\n\t\t\t\t<Bit Name=\"ef_if_prot_code_manual\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"ef_if_0_q\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"ef_if_csb\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"ef_if_load\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"ef_if_pgenb\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"ef_if_strobe\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"ef_if_ps\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"ef_if_pd\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"ef_if_a\" Authority=\"RW\" Bits=\"9-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_if_0_status\" Authority=\"RW\" Address=\"0x40007810\" Width=\"32\" Description=\"ef_if_0_status.\">\r\n\t\t\t\t<Bit Name=\"ef_if_0_status\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_if_cfg_0\" Authority=\"RW\" Address=\"0x40007814\" Width=\"32\" Description=\"ef_if_cfg_0.\">\r\n\t\t\t\t<Bit Name=\"ef_if_dbg_mode\" Authority=\"RW\" Bits=\"31-28\" />\r\n\t\t\t\t<Bit Name=\"ef_if_dbg_jtag_0_dis\" Authority=\"RW\" Bits=\"27-26\" />\r\n\t\t\t\t<Bit Name=\"ef_if_dbg_jtag_1_dis\" Authority=\"RW\" Bits=\"25-24\" />\r\n\t\t\t\t<Bit Name=\"ef_if_efuse_dbg_dis\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"ef_if_se_dbg_dis\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"ef_if_cpu_rst_dbg_dis\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"ef_if_cpu1_dis\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"ef_if_sf_dis\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"ef_if_cam_dis\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"ef_if_0_key_enc_en\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"ef_if_wifi_dis\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"ef_if_ble_dis\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"ef_if_sdu_dis\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"ef_if_sf_key_0_sel\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"ef_if_boot_sel\" Authority=\"RW\" Bits=\"11-8\" />\r\n\t\t\t\t<Bit Name=\"ef_if_cpu0_enc_en\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"ef_if_cpu1_enc_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"ef_if_sboot_en\" Authority=\"RW\" Bits=\"5-4\" />\r\n\t\t\t\t<Bit Name=\"ef_if_sboot_sign_mode\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"ef_if_sf_aes_mode\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_sw_cfg_0\" Authority=\"RW\" Address=\"0x40007818\" Width=\"32\" Description=\"ef_sw_cfg_0.\">\r\n\t\t\t\t<Bit Name=\"ef_sw_dbg_mode\" Authority=\"RW\" Bits=\"31-28\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_dbg_jtag_0_dis\" Authority=\"RW\" Bits=\"27-26\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_dbg_jtag_1_dis\" Authority=\"RW\" Bits=\"25-24\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_efuse_dbg_dis\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_se_dbg_dis\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_cpu_rst_dbg_dis\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_cpu1_dis\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_sf_dis\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_cam_dis\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_0_key_enc_en\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_wifi_dis\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_ble_dis\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_sdu_dis\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_sf_key_0_sel\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_cpu0_enc_en\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_cpu1_enc_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_sboot_en\" Authority=\"RW\" Bits=\"5-4\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_sboot_sign_mode\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"ef_sw_sf_aes_mode\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_reserved\" Authority=\"RW\" Address=\"0x4000781C\" Width=\"32\" Description=\"ef_reserved.\">\r\n\t\t\t\t<Bit Name=\"ef_reserved\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_if_ana_trim_0\" Authority=\"RW\" Address=\"0x40007820\" Width=\"32\" Description=\"ef_if_ana_trim_0.\">\r\n\t\t\t\t<Bit Name=\"ef_if_ana_trim_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_if_sw_usage_0\" Authority=\"RW\" Address=\"0x40007824\" Width=\"32\" Description=\"ef_if_sw_usage_0.\">\r\n\t\t\t\t<Bit Name=\"ef_if_sw_usage_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_crc_ctrl_0\" Authority=\"RW\" Address=\"0x40007A00\" Width=\"32\" Description=\"ef_crc_ctrl_0.\">\r\n\t\t\t\t<Bit Name=\"ef_crc_slp_n\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"ef_crc_lock\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"ef_crc_int_set\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"ef_crc_int_clr\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"ef_crc_int\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"ef_crc_din_endian\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"ef_crc_dout_endian\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"ef_crc_dout_inv_en\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"ef_crc_error\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"ef_crc_mode\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"ef_crc_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"ef_crc_trig\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"ef_crc_busy\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_crc_ctrl_1\" Authority=\"RW\" Address=\"0x40007A04\" Width=\"32\" Description=\"ef_crc_ctrl_1.\">\r\n\t\t\t\t<Bit Name=\"ef_crc_data_0_en\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_crc_ctrl_2\" Authority=\"RW\" Address=\"0x40007A08\" Width=\"32\" Description=\"ef_crc_ctrl_2.\">\r\n\t\t\t\t<Bit Name=\"ef_crc_data_1_en\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_crc_ctrl_3\" Authority=\"RW\" Address=\"0x40007A0C\" Width=\"32\" Description=\"ef_crc_ctrl_3.\">\r\n\t\t\t\t<Bit Name=\"ef_crc_iv\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_crc_ctrl_4\" Authority=\"RW\" Address=\"0x40007A10\" Width=\"32\" Description=\"ef_crc_ctrl_4.\">\r\n\t\t\t\t<Bit Name=\"ef_crc_golden\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ef_crc_ctrl_5\" Authority=\"RW\" Address=\"0x40007A14\" Width=\"32\" Description=\"ef_crc_ctrl_5.\">\r\n\t\t\t\t<Bit Name=\"ef_crc_dout\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"cci\">\r\n\t\t\t<Register Name=\"cci_cfg\" Authority=\"RW\" Address=\"0x40008000\" Width=\"32\" Description=\"cci_cfg.\">\r\n\t\t\t\t<Bit Name=\"reg_mcci_clk_inv\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"reg_scci_clk_inv\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"cfg_cci1_pre_read\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"reg_div_m_cci_sclk\" Authority=\"RW\" Bits=\"6-5\" />\r\n\t\t\t\t<Bit Name=\"reg_m_cci_sclk_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cci_mas_hw_mode\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cci_mas_sel_cci2\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cci_slv_sel_cci2\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cci_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"cci_addr\" Authority=\"RW\" Address=\"0x40008004\" Width=\"32\" Description=\"cci_addr.\">\r\n\t\t\t\t<Bit Name=\"apb_cci_addr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"cci_wdata\" Authority=\"RW\" Address=\"0x40008008\" Width=\"32\" Description=\"cci_wdata.\">\r\n\t\t\t\t<Bit Name=\"apb_cci_wdata\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"cci_rdata\" Authority=\"RW\" Address=\"0x4000800C\" Width=\"32\" Description=\"cci_rdata.\">\r\n\t\t\t\t<Bit Name=\"apb_cci_rdata\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"cci_ctl\" Authority=\"RW\" Address=\"0x40008010\" Width=\"32\" Description=\"cci_ctl.\">\r\n\t\t\t\t<Bit Name=\"ahb_state\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"cci_read_flag\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cci_write_flag\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"l1c\">\r\n\t\t\t<Register Name=\"l1c_config\" Authority=\"RW\" Address=\"0x40009000\" Width=\"32\" Description=\"l1c_config.\">\r\n\t\t\t\t<Bit Name=\"reserved_31_30\" Authority=\"RW\" Bits=\"31-30\" />\r\n\t\t\t\t<Bit Name=\"l1c_flush_done\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"l1c_flush_en\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"wrap_dis\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"early_resp_dis\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"l1c_bmx_busy_option_dis\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"l1c_bmx_timeout_en\" Authority=\"RW\" Bits=\"23-20\" />\r\n\t\t\t\t<Bit Name=\"l1c_bmx_arb_mode\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"l1c_bmx_err_en\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"l1c_bypass\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"irom_2t_access\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"l1c_way_dis\" Authority=\"RW\" Bits=\"11-8\" />\r\n\t\t\t\t<Bit Name=\"l1c_wa_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"l1c_wb_en\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"l1c_wt_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"l1c_invalid_done\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"l1c_invalid_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"l1c_cnt_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"l1c_cacheable\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"hit_cnt_lsb\" Authority=\"RW\" Address=\"0x40009004\" Width=\"32\" Description=\"hit_cnt_lsb.\">\r\n\t\t\t\t<Bit Name=\"hit_cnt_lsb\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"hit_cnt_msb\" Authority=\"RW\" Address=\"0x40009008\" Width=\"32\" Description=\"hit_cnt_msb.\">\r\n\t\t\t\t<Bit Name=\"hit_cnt_msb\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"miss_cnt\" Authority=\"RW\" Address=\"0x4000900C\" Width=\"32\" Description=\"miss_cnt.\">\r\n\t\t\t\t<Bit Name=\"miss_cnt\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"l1c_misc\" Authority=\"RW\" Address=\"0x40009010\" Width=\"32\" Description=\"l1c_misc.\">\r\n\t\t\t\t<Bit Name=\"l1c_fsm\" Authority=\"RW\" Bits=\"30-28\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"l1c_bmx_err_addr_en\" Authority=\"RW\" Address=\"0x40009200\" Width=\"32\" Description=\"l1c_bmx_err_addr_en.\">\r\n\t\t\t\t<Bit Name=\"l1c_hsel_option\" Authority=\"RW\" Bits=\"19-16\" />\r\n\t\t\t\t<Bit Name=\"l1c_bmx_err_tz\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"l1c_bmx_err_dec\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"l1c_bmx_err_addr_dis\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"l1c_bmx_err_addr\" Authority=\"RW\" Address=\"0x40009204\" Width=\"32\" Description=\"l1c_bmx_err_addr.\">\r\n\t\t\t\t<Bit Name=\"l1c_bmx_err_addr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irom1_misr_dataout_0\" Authority=\"RW\" Address=\"0x40009208\" Width=\"32\" Description=\"irom1_misr_dataout_0.\">\r\n\t\t\t\t<Bit Name=\"irom1_misr_dataout_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irom1_misr_dataout_1\" Authority=\"RW\" Address=\"0x4000920C\" Width=\"32\" Description=\"irom1_misr_dataout_1.\">\r\n\t\t\t\t<Bit Name=\"irom1_misr_dataout_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"cpu_clk_gate\" Authority=\"RW\" Address=\"0x40009210\" Width=\"32\" Description=\"cpu_clk_gate.\">\r\n\t\t\t\t<Bit Name=\"force_e21_clock_on_2\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"force_e21_clock_on_1\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"force_e21_clock_on_0\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"uart\">\r\n\t\t\t<Register Name=\"utx_config\" Authority=\"RW\" Address=\"0x4000A000\" Width=\"32\" Description=\"utx_config.\">\r\n\t\t\t\t<Bit Name=\"cr_utx_len\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_bit_cnt_b\" Authority=\"RW\" Bits=\"15-13\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_bit_cnt_p\" Authority=\"RW\" Bits=\"12-11\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_bit_cnt_d\" Authority=\"RW\" Bits=\"10-8\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_ir_inv\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_ir_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_prt_sel\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_prt_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_lin_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_frm_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_cts_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"urx_config\" Authority=\"RW\" Address=\"0x4000A004\" Width=\"32\" Description=\"urx_config.\">\r\n\t\t\t\t<Bit Name=\"cr_urx_len\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_deg_cnt\" Authority=\"RW\" Bits=\"15-12\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_deg_en\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_bit_cnt_d\" Authority=\"RW\" Bits=\"10-8\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_ir_inv\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_ir_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_prt_sel\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_prt_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_lin_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_abr_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"uart_bit_prd\" Authority=\"RW\" Address=\"0x4000A008\" Width=\"32\" Description=\"uart_bit_prd.\">\r\n\t\t\t\t<Bit Name=\"cr_urx_bit_prd\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_bit_prd\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"data_config\" Authority=\"RW\" Address=\"0x4000A00C\" Width=\"32\" Description=\"data_config.\">\r\n\t\t\t\t<Bit Name=\"cr_uart_bit_inv\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"utx_ir_position\" Authority=\"RW\" Address=\"0x4000A010\" Width=\"32\" Description=\"utx_ir_position.\">\r\n\t\t\t\t<Bit Name=\"cr_utx_ir_pos_p\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_ir_pos_s\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"urx_ir_position\" Authority=\"RW\" Address=\"0x4000A014\" Width=\"32\" Description=\"urx_ir_position.\">\r\n\t\t\t\t<Bit Name=\"cr_urx_ir_pos_s\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"urx_rto_timer\" Authority=\"RW\" Address=\"0x4000A018\" Width=\"32\" Description=\"urx_rto_timer.\">\r\n\t\t\t\t<Bit Name=\"cr_urx_rto_value\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"uart_sw_mode\" Authority=\"RW\" Address=\"0x4000A01C\" Width=\"32\" Description=\"uart_sw_mode.\">\r\n\t\t\t\t<Bit Name=\"cr_urx_rts_sw_val\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_rts_sw_mode\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_txd_sw_val\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_txd_sw_mode\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"uart_int_sts\" Authority=\"RW\" Address=\"0x4000A020\" Width=\"32\" Description=\"UART interrupt status\">\r\n\t\t\t\t<Bit Name=\"urx_lse_int\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"urx_fer_int\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"utx_fer_int\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"urx_pce_int\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"urx_rto_int\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"urx_fifo_int\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"utx_fifo_int\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"urx_end_int\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"utx_end_int\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"uart_int_mask\" Authority=\"RW\" Address=\"0x4000A024\" Width=\"32\" Description=\"UART interrupt mask\">\r\n\t\t\t\t<Bit Name=\"cr_urx_lse_mask\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_fer_mask\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_fer_mask\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_pce_mask\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_rto_mask\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_fifo_mask\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_fifo_mask\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_end_mask\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_end_mask\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"uart_int_clear\" Authority=\"RW\" Address=\"0x4000A028\" Width=\"32\" Description=\"UART interrupt clear\">\r\n\t\t\t\t<Bit Name=\"cr_urx_lse_clr\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"rsvd_7\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"rsvd_6\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_pce_clr\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_rto_clr\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"rsvd_3\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"rsvd_2\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_end_clr\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_end_clr\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"uart_int_en\" Authority=\"RW\" Address=\"0x4000Ax2C\" Width=\"32\" Description=\"UART interrupt enable\">\r\n\t\t\t\t<Bit Name=\"cr_urx_lse_en\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_fer_en\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_fer_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_pce_en\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_rto_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_fifo_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_fifo_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_urx_end_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_utx_end_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"uart_status\" Authority=\"RW\" Address=\"0x4000A030\" Width=\"32\" Description=\"uart_status.\">\r\n\t\t\t\t<Bit Name=\"sts_urx_bus_busy\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"sts_utx_bus_busy\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sts_urx_abr_prd\" Authority=\"RW\" Address=\"0x4000A034\" Width=\"32\" Description=\"sts_urx_abr_prd.\">\r\n\t\t\t\t<Bit Name=\"sts_urx_abr_prd_0x55\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"sts_urx_abr_prd_start\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"uart_fifo_config_0\" Authority=\"RW\" Address=\"0x4000A080\" Width=\"32\" Description=\"uart_fifo_config_0.\">\r\n\t\t\t\t<Bit Name=\"rx_fifo_underflow\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"rx_fifo_overflow\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_underflow\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_overflow\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"rx_fifo_clr\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_clr\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"uart_dma_rx_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"uart_dma_tx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"uart_fifo_config_1\" Authority=\"RW\" Address=\"0x4000A084\" Width=\"32\" Description=\"uart_fifo_config_1.\">\r\n\t\t\t\t<Bit Name=\"rx_fifo_th\" Authority=\"RW\" Bits=\"30-24\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_th\" Authority=\"RW\" Bits=\"22-16\" />\r\n\t\t\t\t<Bit Name=\"rx_fifo_cnt\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_cnt\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"uart_fifo_wdata\" Authority=\"RW\" Address=\"0x4000A088\" Width=\"32\" Description=\"uart_fifo_wdata.\">\r\n\t\t\t\t<Bit Name=\"uart_fifo_wdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"uart_fifo_rdata\" Authority=\"RW\" Address=\"0x4000A08C\" Width=\"32\" Description=\"uart_fifo_rdata.\">\r\n\t\t\t\t<Bit Name=\"uart_fifo_rdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"spi\">\r\n\t\t\t<Register Name=\"spi_config\" Authority=\"RW\" Address=\"0x4000A000\" Width=\"32\" Description=\"spi_config.\">\r\n\t\t\t\t<Bit Name=\"cr_spi_deg_cnt\" Authority=\"RW\" Bits=\"15-12\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_deg_en\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_m_cont_en\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_rxd_ignr_en\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_byte_inv\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_bit_inv\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_sclk_ph\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_sclk_pol\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_frame_size\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_s_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_m_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"spi_int_sts\" Authority=\"RW\" Address=\"0x4000A004\" Width=\"32\" Description=\"spi_int_sts.\">\r\n\t\t\t\t<Bit Name=\"cr_spi_fer_en\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_txu_en\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_sto_en\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_rxf_en\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_txf_en\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_end_en\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"rsvd_21\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_txu_clr\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_sto_clr\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"rsvd_18\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"rsvd_17\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_end_clr\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_fer_mask\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_txu_mask\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_sto_mask\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_rxf_mask\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_txf_mask\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_end_mask\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"spi_fer_int\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"spi_txu_int\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"spi_sto_int\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"spi_rxf_int\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"spi_txf_int\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"spi_end_int\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"spi_bus_busy\" Authority=\"RW\" Address=\"0x4000A008\" Width=\"32\" Description=\"spi_bus_busy.\">\r\n\t\t\t\t<Bit Name=\"sts_spi_bus_busy\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"spi_prd_0\" Authority=\"RW\" Address=\"0x4000A010\" Width=\"32\" Description=\"spi_prd_0.\">\r\n\t\t\t\t<Bit Name=\"cr_spi_prd_d_ph_1\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_prd_d_ph_0\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_prd_p\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_prd_s\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"spi_prd_1\" Authority=\"RW\" Address=\"0x4000A014\" Width=\"32\" Description=\"spi_prd_1.\">\r\n\t\t\t\t<Bit Name=\"cr_spi_prd_i\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"spi_rxd_ignr\" Authority=\"RW\" Address=\"0x4000A018\" Width=\"32\" Description=\"spi_rxd_ignr.\">\r\n\t\t\t\t<Bit Name=\"cr_spi_rxd_ignr_s\" Authority=\"RW\" Bits=\"20-16\" />\r\n\t\t\t\t<Bit Name=\"cr_spi_rxd_ignr_p\" Authority=\"RW\" Bits=\"4-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"spi_sto_value\" Authority=\"RW\" Address=\"0x4000A01C\" Width=\"32\" Description=\"spi_sto_value.\">\r\n\t\t\t\t<Bit Name=\"cr_spi_sto_value\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"spi_fifo_config_0\" Authority=\"RW\" Address=\"0x4000A080\" Width=\"32\" Description=\"spi_fifo_config_0.\">\r\n\t\t\t\t<Bit Name=\"rx_fifo_underflow\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"rx_fifo_overflow\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_underflow\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_overflow\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"rx_fifo_clr\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_clr\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"spi_dma_rx_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"spi_dma_tx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"spi_fifo_config_1\" Authority=\"RW\" Address=\"0x4000A084\" Width=\"32\" Description=\"spi_fifo_config_1.\">\r\n\t\t\t\t<Bit Name=\"rx_fifo_th\" Authority=\"RW\" Bits=\"25-24\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_th\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"rx_fifo_cnt\" Authority=\"RW\" Bits=\"10-8\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_cnt\" Authority=\"RW\" Bits=\"2-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"spi_fifo_wdata\" Authority=\"RW\" Address=\"0x4000A088\" Width=\"32\" Description=\"spi_fifo_wdata.\">\r\n\t\t\t\t<Bit Name=\"spi_fifo_wdata\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"spi_fifo_rdata\" Authority=\"RW\" Address=\"0x4000A08C\" Width=\"32\" Description=\"spi_fifo_rdata.\">\r\n\t\t\t\t<Bit Name=\"spi_fifo_rdata\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"i2c\">\r\n\t\t\t<Register Name=\"i2c_config\" Authority=\"RW\" Address=\"0x4000A000\" Width=\"32\" Description=\"i2c_config.\">\r\n\t\t\t\t<Bit Name=\"cr_i2c_deg_cnt\" Authority=\"RW\" Bits=\"31-28\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_pkt_len\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_slv_addr\" Authority=\"RW\" Bits=\"14-8\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_sub_addr_bc\" Authority=\"RW\" Bits=\"6-5\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_sub_addr_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_scl_sync_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_deg_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_pkt_dir\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_m_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2c_int_sts\" Authority=\"RW\" Address=\"0x4000A004\" Width=\"32\" Description=\"i2c_int_sts.\">\r\n\t\t\t\t<Bit Name=\"cr_i2c_fer_en\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_arb_en\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_nak_en\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_rxf_en\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_txf_en\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_end_en\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"rsvd_21\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_arb_clr\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_nak_clr\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"rsvd_18\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"rsvd_17\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_end_clr\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_fer_mask\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_arb_mask\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_nak_mask\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_rxf_mask\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_txf_mask\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_end_mask\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"i2c_fer_int\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"i2c_arb_int\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"i2c_nak_int\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"i2c_rxf_int\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"i2c_txf_int\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"i2c_end_int\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2c_sub_addr\" Authority=\"RW\" Address=\"0x4000A008\" Width=\"32\" Description=\"i2c_sub_addr.\">\r\n\t\t\t\t<Bit Name=\"cr_i2c_sub_addr_b3\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_sub_addr_b2\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_sub_addr_b1\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_sub_addr_b0\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2c_bus_busy\" Authority=\"RW\" Address=\"0x4000A00C\" Width=\"32\" Description=\"i2c_bus_busy.\">\r\n\t\t\t\t<Bit Name=\"cr_i2c_bus_busy_clr\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"sts_i2c_bus_busy\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2c_prd_start\" Authority=\"RW\" Address=\"0x4000A010\" Width=\"32\" Description=\"i2c_prd_start.\">\r\n\t\t\t\t<Bit Name=\"cr_i2c_prd_s_ph_3\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_prd_s_ph_2\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_prd_s_ph_1\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_prd_s_ph_0\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2c_prd_stop\" Authority=\"RW\" Address=\"0x4000A014\" Width=\"32\" Description=\"i2c_prd_stop.\">\r\n\t\t\t\t<Bit Name=\"cr_i2c_prd_p_ph_3\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_prd_p_ph_2\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_prd_p_ph_1\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_prd_p_ph_0\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2c_prd_data\" Authority=\"RW\" Address=\"0x4000A018\" Width=\"32\" Description=\"i2c_prd_data.\">\r\n\t\t\t\t<Bit Name=\"cr_i2c_prd_d_ph_3\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_prd_d_ph_2\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_prd_d_ph_1\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t\t<Bit Name=\"cr_i2c_prd_d_ph_0\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2c_fifo_config_0\" Authority=\"RW\" Address=\"0x4000A080\" Width=\"32\" Description=\"i2c_fifo_config_0.\">\r\n\t\t\t\t<Bit Name=\"rx_fifo_underflow\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"rx_fifo_overflow\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_underflow\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_overflow\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"rx_fifo_clr\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_clr\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"i2c_dma_rx_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"i2c_dma_tx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2c_fifo_config_1\" Authority=\"RW\" Address=\"0x4000A084\" Width=\"32\" Description=\"i2c_fifo_config_1.\">\r\n\t\t\t\t<Bit Name=\"rx_fifo_th\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_th\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"rx_fifo_cnt\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_cnt\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2c_fifo_wdata\" Authority=\"RW\" Address=\"0x4000A088\" Width=\"32\" Description=\"i2c_fifo_wdata.\">\r\n\t\t\t\t<Bit Name=\"i2c_fifo_wdata\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2c_fifo_rdata\" Authority=\"RW\" Address=\"0x4000A08C\" Width=\"32\" Description=\"i2c_fifo_rdata.\">\r\n\t\t\t\t<Bit Name=\"i2c_fifo_rdata\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"pwm\">\r\n\t\t\t<Register Name=\"pwm_int_config\" Authority=\"RW\" Address=\"0x4000A000\" Width=\"32\" Description=\"pwm_int_config.\">\r\n\t\t\t\t<Bit Name=\"pwm_int_clear\" Authority=\"RW\" Bits=\"13-8\" />\r\n\t\t\t\t<Bit Name=\"pwm_interrupt_sts\" Authority=\"RW\" Bits=\"5-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm0_clkdiv\" Authority=\"RW\" Address=\"0x4000A020\" Width=\"32\" Description=\"pwm0_clkdiv.\">\r\n\t\t\t\t<Bit Name=\"pwm_clk_div\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm0_thre1\" Authority=\"RW\" Address=\"0x4000A024\" Width=\"32\" Description=\"pwm0_thre1.\">\r\n\t\t\t\t<Bit Name=\"pwm_thre1\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm0_thre2\" Authority=\"RW\" Address=\"0x4000A028\" Width=\"32\" Description=\"pwm0_thre2.\">\r\n\t\t\t\t<Bit Name=\"pwm_thre2\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm0_period\" Authority=\"RW\" Address=\"0x4000Ax2C\" Width=\"32\" Description=\"pwm0_period.\">\r\n\t\t\t\t<Bit Name=\"pwm_period\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm0_config\" Authority=\"RW\" Address=\"0x4000A030\" Width=\"32\" Description=\"pwm0_config.\">\r\n\t\t\t\t<Bit Name=\"pwm_sts_top\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"pwm_stop_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"pwm_sw_mode\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"pwm_sw_force_val\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"pwm_stop_mode\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"pwm_out_inv\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"reg_clk_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm0_interrupt\" Authority=\"RW\" Address=\"0x4000A034\" Width=\"32\" Description=\"pwm0_interrupt.\">\r\n\t\t\t\t<Bit Name=\"pwm_int_enable\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"pwm_int_period_cnt\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm1_clkdiv\" Authority=\"RW\" Address=\"0x4000A040\" Width=\"32\" Description=\"pwm1_clkdiv.\">\r\n\t\t\t\t<Bit Name=\"pwm_clk_div\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm1_thre1\" Authority=\"RW\" Address=\"0x4000A044\" Width=\"32\" Description=\"pwm1_thre1.\">\r\n\t\t\t\t<Bit Name=\"pwm_thre1\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm1_thre2\" Authority=\"RW\" Address=\"0x4000A048\" Width=\"32\" Description=\"pwm1_thre2.\">\r\n\t\t\t\t<Bit Name=\"pwm_thre2\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm1_period\" Authority=\"RW\" Address=\"0x4000Ax4C\" Width=\"32\" Description=\"pwm1_period.\">\r\n\t\t\t\t<Bit Name=\"pwm_period\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm1_config\" Authority=\"RW\" Address=\"0x4000A050\" Width=\"32\" Description=\"pwm1_config.\">\r\n\t\t\t\t<Bit Name=\"pwm_sts_top\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"pwm_stop_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"pwm_sw_mode\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"pwm_sw_force_val\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"pwm_stop_mode\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"pwm_out_inv\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"reg_clk_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm1_interrupt\" Authority=\"RW\" Address=\"0x4000A054\" Width=\"32\" Description=\"pwm1_interrupt.\">\r\n\t\t\t\t<Bit Name=\"pwm_int_enable\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"pwm_int_period_cnt\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm2_clkdiv\" Authority=\"RW\" Address=\"0x4000A060\" Width=\"32\" Description=\"pwm2_clkdiv.\">\r\n\t\t\t\t<Bit Name=\"pwm_clk_div\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm2_thre1\" Authority=\"RW\" Address=\"0x4000A064\" Width=\"32\" Description=\"pwm2_thre1.\">\r\n\t\t\t\t<Bit Name=\"pwm_thre1\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm2_thre2\" Authority=\"RW\" Address=\"0x4000A068\" Width=\"32\" Description=\"pwm2_thre2.\">\r\n\t\t\t\t<Bit Name=\"pwm_thre2\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm2_period\" Authority=\"RW\" Address=\"0x4000Ax6C\" Width=\"32\" Description=\"pwm2_period.\">\r\n\t\t\t\t<Bit Name=\"pwm_period\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm2_config\" Authority=\"RW\" Address=\"0x4000A070\" Width=\"32\" Description=\"pwm2_config.\">\r\n\t\t\t\t<Bit Name=\"pwm_sts_top\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"pwm_stop_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"pwm_sw_mode\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"pwm_sw_force_val\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"pwm_stop_mode\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"pwm_out_inv\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"reg_clk_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm2_interrupt\" Authority=\"RW\" Address=\"0x4000A074\" Width=\"32\" Description=\"pwm2_interrupt.\">\r\n\t\t\t\t<Bit Name=\"pwm_int_enable\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"pwm_int_period_cnt\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm3_clkdiv\" Authority=\"RW\" Address=\"0x4000A080\" Width=\"32\" Description=\"pwm3_clkdiv.\">\r\n\t\t\t\t<Bit Name=\"pwm_clk_div\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm3_thre1\" Authority=\"RW\" Address=\"0x4000A084\" Width=\"32\" Description=\"pwm3_thre1.\">\r\n\t\t\t\t<Bit Name=\"pwm_thre1\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm3_thre2\" Authority=\"RW\" Address=\"0x4000A088\" Width=\"32\" Description=\"pwm3_thre2.\">\r\n\t\t\t\t<Bit Name=\"pwm_thre2\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm3_period\" Authority=\"RW\" Address=\"0x4000A08C\" Width=\"32\" Description=\"pwm3_period.\">\r\n\t\t\t\t<Bit Name=\"pwm_period\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm3_config\" Authority=\"RW\" Address=\"0x4000A090\" Width=\"32\" Description=\"pwm3_config.\">\r\n\t\t\t\t<Bit Name=\"pwm_sts_top\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"pwm_stop_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"pwm_sw_mode\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"pwm_sw_force_val\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"pwm_stop_mode\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"pwm_out_inv\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"reg_clk_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm3_interrupt\" Authority=\"RW\" Address=\"0x4000A094\" Width=\"32\" Description=\"pwm3_interrupt.\">\r\n\t\t\t\t<Bit Name=\"pwm_int_enable\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"pwm_int_period_cnt\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm4_clkdiv\" Authority=\"RW\" Address=\"0x4000A0A0\" Width=\"32\" Description=\"pwm4_clkdiv.\">\r\n\t\t\t\t<Bit Name=\"pwm_clk_div\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm4_thre1\" Authority=\"RW\" Address=\"0x4000A0A4\" Width=\"32\" Description=\"pwm4_thre1.\">\r\n\t\t\t\t<Bit Name=\"pwm_thre1\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm4_thre2\" Authority=\"RW\" Address=\"0x4000A0A8\" Width=\"32\" Description=\"pwm4_thre2.\">\r\n\t\t\t\t<Bit Name=\"pwm_thre2\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm4_period\" Authority=\"RW\" Address=\"0x4000A0AC\" Width=\"32\" Description=\"pwm4_period.\">\r\n\t\t\t\t<Bit Name=\"pwm_period\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm4_config\" Authority=\"RW\" Address=\"0x4000A0B0\" Width=\"32\" Description=\"pwm4_config.\">\r\n\t\t\t\t<Bit Name=\"pwm_sts_top\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"pwm_stop_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"pwm_sw_mode\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"pwm_sw_force_val\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"pwm_stop_mode\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"pwm_out_inv\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"reg_clk_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pwm4_interrupt\" Authority=\"RW\" Address=\"0x4000A0B4\" Width=\"32\" Description=\"pwm4_interrupt.\">\r\n\t\t\t\t<Bit Name=\"pwm_int_enable\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"pwm_int_period_cnt\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"timer\">\r\n\t\t\t<Register Name=\"TCCR\" Authority=\"RW\" Address=\"0x4000A000\" Width=\"32\" Description=\"TCCR.\">\r\n\t\t\t\t<Bit Name=\"cs_wdt\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"RESERVED_7\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"cs_2\" Authority=\"RW\" Bits=\"6-5\" />\r\n\t\t\t\t<Bit Name=\"RESERVED_4\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cs_1\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TMR2_0\" Authority=\"RW\" Address=\"0x4000A010\" Width=\"32\" Description=\"TMR2_0.\">\r\n\t\t\t\t<Bit Name=\"tmr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TMR2_1\" Authority=\"RW\" Address=\"0x4000A014\" Width=\"32\" Description=\"TMR2_1.\">\r\n\t\t\t\t<Bit Name=\"tmr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TMR2_2\" Authority=\"RW\" Address=\"0x4000A018\" Width=\"32\" Description=\"TMR2_2.\">\r\n\t\t\t\t<Bit Name=\"tmr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TMR3_0\" Authority=\"RW\" Address=\"0x4000A01C\" Width=\"32\" Description=\"TMR3_0.\">\r\n\t\t\t\t<Bit Name=\"tmr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TMR3_1\" Authority=\"RW\" Address=\"0x4000A020\" Width=\"32\" Description=\"TMR3_1.\">\r\n\t\t\t\t<Bit Name=\"tmr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TMR3_2\" Authority=\"RW\" Address=\"0x4000A024\" Width=\"32\" Description=\"TMR3_2.\">\r\n\t\t\t\t<Bit Name=\"tmr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TCR2\" Authority=\"RW\" Address=\"0x4000Ax2C\" Width=\"32\" Description=\"TCR2.\">\r\n\t\t\t\t<Bit Name=\"tcr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TCR3\" Authority=\"RW\" Address=\"0x4000A030\" Width=\"32\" Description=\"TCR3.\">\r\n\t\t\t\t<Bit Name=\"tcr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TMSR2\" Authority=\"RW\" Address=\"0x4000A038\" Width=\"32\" Description=\"TMSR2.\">\r\n\t\t\t\t<Bit Name=\"tmsr_2\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"tmsr_1\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"tmsr_0\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TMSR3\" Authority=\"RW\" Address=\"0x4000Ax3C\" Width=\"32\" Description=\"TMSR3.\">\r\n\t\t\t\t<Bit Name=\"tmsr_2\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"tmsr_1\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"tmsr_0\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TIER2\" Authority=\"RW\" Address=\"0x4000A044\" Width=\"32\" Description=\"TIER2.\">\r\n\t\t\t\t<Bit Name=\"tier_2\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"tier_1\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"tier_0\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TIER3\" Authority=\"RW\" Address=\"0x4000A048\" Width=\"32\" Description=\"TIER3.\">\r\n\t\t\t\t<Bit Name=\"tier_2\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"tier_1\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"tier_0\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TPLVR2\" Authority=\"RW\" Address=\"0x4000A050\" Width=\"32\" Description=\"TPLVR2.\">\r\n\t\t\t\t<Bit Name=\"tplvr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TPLVR3\" Authority=\"RW\" Address=\"0x4000A054\" Width=\"32\" Description=\"TPLVR3.\">\r\n\t\t\t\t<Bit Name=\"tplvr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TPLCR2\" Authority=\"RW\" Address=\"0x4000Ax5C\" Width=\"32\" Description=\"TPLCR2.\">\r\n\t\t\t\t<Bit Name=\"tplcr\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TPLCR3\" Authority=\"RW\" Address=\"0x4000A060\" Width=\"32\" Description=\"TPLCR3.\">\r\n\t\t\t\t<Bit Name=\"tplcr\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"WMER\" Authority=\"RW\" Address=\"0x4000A064\" Width=\"32\" Description=\"WMER.\">\r\n\t\t\t\t<Bit Name=\"wrie\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"we\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"WMR\" Authority=\"RW\" Address=\"0x4000A068\" Width=\"32\" Description=\"WMR.\">\r\n\t\t\t\t<Bit Name=\"wmr\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"WVR\" Authority=\"RW\" Address=\"0x4000Ax6C\" Width=\"32\" Description=\"WVR.\">\r\n\t\t\t\t<Bit Name=\"wvr\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"WSR\" Authority=\"RW\" Address=\"0x4000A070\" Width=\"32\" Description=\"WSR.\">\r\n\t\t\t\t<Bit Name=\"wts\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TICR2\" Authority=\"RW\" Address=\"0x4000A078\" Width=\"32\" Description=\"TICR2.\">\r\n\t\t\t\t<Bit Name=\"tclr_2\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"tclr_1\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"tclr_0\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TICR3\" Authority=\"RW\" Address=\"0x4000A07C\" Width=\"32\" Description=\"TICR3.\">\r\n\t\t\t\t<Bit Name=\"tclr_2\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"tclr_1\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"tclr_0\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"WICR\" Authority=\"RW\" Address=\"0x4000A080\" Width=\"32\" Description=\"WICR.\">\r\n\t\t\t\t<Bit Name=\"wiclr\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TCER\" Authority=\"RW\" Address=\"0x4000A084\" Width=\"32\" Description=\"TCER.\">\r\n\t\t\t\t<Bit Name=\"timer3_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"timer2_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TCMR\" Authority=\"RW\" Address=\"0x4000A088\" Width=\"32\" Description=\"TCMR.\">\r\n\t\t\t\t<Bit Name=\"timer3_mode\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"timer2_mode\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TILR2\" Authority=\"RW\" Address=\"0x4000A090\" Width=\"32\" Description=\"TILR2.\">\r\n\t\t\t\t<Bit Name=\"tilr_2\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"tilr_1\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"tilr_0\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TILR3\" Authority=\"RW\" Address=\"0x4000A094\" Width=\"32\" Description=\"TILR3.\">\r\n\t\t\t\t<Bit Name=\"tilr_2\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"tilr_1\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"tilr_0\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"WCR\" Authority=\"RW\" Address=\"0x4000A098\" Width=\"32\" Description=\"WCR.\">\r\n\t\t\t\t<Bit Name=\"wcr\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"WFAR\" Authority=\"RW\" Address=\"0x4000A09C\" Width=\"32\" Description=\"WFAR.\">\r\n\t\t\t\t<Bit Name=\"wfar\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"WSAR\" Authority=\"RW\" Address=\"0x4000A0A0\" Width=\"32\" Description=\"WSAR.\">\r\n\t\t\t\t<Bit Name=\"wsar\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TCVWR2\" Authority=\"RW\" Address=\"0x4000A0A8\" Width=\"32\" Description=\"TCVWR2.\">\r\n\t\t\t\t<Bit Name=\"tcvwr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TCVWR3\" Authority=\"RW\" Address=\"0x4000A0AC\" Width=\"32\" Description=\"TCVWR3.\">\r\n\t\t\t\t<Bit Name=\"tcvwr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TCVSYN2\" Authority=\"RW\" Address=\"0x4000A0B4\" Width=\"32\" Description=\"TCVSYN2.\">\r\n\t\t\t\t<Bit Name=\"tcvsyn2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TCVSYN3\" Authority=\"RW\" Address=\"0x4000A0B8\" Width=\"32\" Description=\"TCVSYN3.\">\r\n\t\t\t\t<Bit Name=\"tcvsyn3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TCDR\" Authority=\"RW\" Address=\"0x4000A0BC\" Width=\"32\" Description=\"TCDR.\">\r\n\t\t\t\t<Bit Name=\"wcdr\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"tcdr3\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"tcdr2\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"ir\">\r\n\t\t\t<Register Name=\"irtx_config\" Authority=\"RW\" Address=\"0x4000A000\" Width=\"32\" Description=\"irtx_config.\">\r\n\t\t\t\t<Bit Name=\"cr_irtx_data_num\" Authority=\"RW\" Bits=\"17-12\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_tail_hl_inv\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_tail_en\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_head_hl_inv\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_head_en\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_logic1_hl_inv\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_logic0_hl_inv\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_data_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_swm_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_mod_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_out_inv\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irtx_int_sts\" Authority=\"RW\" Address=\"0x4000A004\" Width=\"32\" Description=\"irtx_int_sts.\">\r\n\t\t\t\t<Bit Name=\"cr_irtx_end_en\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_end_clr\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_end_mask\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"irtx_end_int\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irtx_data_word0\" Authority=\"RW\" Address=\"0x4000A008\" Width=\"32\" Description=\"irtx_data_word0.\">\r\n\t\t\t\t<Bit Name=\"cr_irtx_data_word0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irtx_data_word1\" Authority=\"RW\" Address=\"0x4000A00C\" Width=\"32\" Description=\"irtx_data_word1.\">\r\n\t\t\t\t<Bit Name=\"cr_irtx_data_word1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irtx_pulse_width\" Authority=\"RW\" Address=\"0x4000A010\" Width=\"32\" Description=\"irtx_pulse_width.\">\r\n\t\t\t\t<Bit Name=\"cr_irtx_mod_ph1_w\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_mod_ph0_w\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_pw_unit\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irtx_pw\" Authority=\"RW\" Address=\"0x4000A014\" Width=\"32\" Description=\"irtx_pw.\">\r\n\t\t\t\t<Bit Name=\"cr_irtx_tail_ph1_w\" Authority=\"RW\" Bits=\"31-28\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_tail_ph0_w\" Authority=\"RW\" Bits=\"27-24\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_head_ph1_w\" Authority=\"RW\" Bits=\"23-20\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_head_ph0_w\" Authority=\"RW\" Bits=\"19-16\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_logic1_ph1_w\" Authority=\"RW\" Bits=\"15-12\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_logic1_ph0_w\" Authority=\"RW\" Bits=\"11-8\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_logic0_ph1_w\" Authority=\"RW\" Bits=\"7-4\" />\r\n\t\t\t\t<Bit Name=\"cr_irtx_logic0_ph0_w\" Authority=\"RW\" Bits=\"3-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irtx_swm_pw_0\" Authority=\"RW\" Address=\"0x4000A040\" Width=\"32\" Description=\"irtx_swm_pw_0.\">\r\n\t\t\t\t<Bit Name=\"cr_irtx_swm_pw_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irtx_swm_pw_1\" Authority=\"RW\" Address=\"0x4000A044\" Width=\"32\" Description=\"irtx_swm_pw_1.\">\r\n\t\t\t\t<Bit Name=\"cr_irtx_swm_pw_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irtx_swm_pw_2\" Authority=\"RW\" Address=\"0x4000A048\" Width=\"32\" Description=\"irtx_swm_pw_2.\">\r\n\t\t\t\t<Bit Name=\"cr_irtx_swm_pw_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irtx_swm_pw_3\" Authority=\"RW\" Address=\"0x4000Ax4C\" Width=\"32\" Description=\"irtx_swm_pw_3.\">\r\n\t\t\t\t<Bit Name=\"cr_irtx_swm_pw_3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irtx_swm_pw_4\" Authority=\"RW\" Address=\"0x4000A050\" Width=\"32\" Description=\"irtx_swm_pw_4.\">\r\n\t\t\t\t<Bit Name=\"cr_irtx_swm_pw_4\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irtx_swm_pw_5\" Authority=\"RW\" Address=\"0x4000A054\" Width=\"32\" Description=\"irtx_swm_pw_5.\">\r\n\t\t\t\t<Bit Name=\"cr_irtx_swm_pw_5\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irtx_swm_pw_6\" Authority=\"RW\" Address=\"0x4000A058\" Width=\"32\" Description=\"irtx_swm_pw_6.\">\r\n\t\t\t\t<Bit Name=\"cr_irtx_swm_pw_6\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irtx_swm_pw_7\" Authority=\"RW\" Address=\"0x4000Ax5C\" Width=\"32\" Description=\"irtx_swm_pw_7.\">\r\n\t\t\t\t<Bit Name=\"cr_irtx_swm_pw_7\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irrx_config\" Authority=\"RW\" Address=\"0x4000A080\" Width=\"32\" Description=\"irrx_config.\">\r\n\t\t\t\t<Bit Name=\"cr_irrx_deg_cnt\" Authority=\"RW\" Bits=\"11-8\" />\r\n\t\t\t\t<Bit Name=\"cr_irrx_deg_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cr_irrx_mode\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"cr_irrx_in_inv\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_irrx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irrx_int_sts\" Authority=\"RW\" Address=\"0x4000A084\" Width=\"32\" Description=\"irrx_int_sts.\">\r\n\t\t\t\t<Bit Name=\"cr_irrx_end_en\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"cr_irrx_end_clr\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_irrx_end_mask\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"irrx_end_int\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irrx_pw_config\" Authority=\"RW\" Address=\"0x4000A088\" Width=\"32\" Description=\"irrx_pw_config.\">\r\n\t\t\t\t<Bit Name=\"cr_irrx_end_th\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"cr_irrx_data_th\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irrx_data_count\" Authority=\"RW\" Address=\"0x4000A090\" Width=\"32\" Description=\"irrx_data_count.\">\r\n\t\t\t\t<Bit Name=\"sts_irrx_data_cnt\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irrx_data_word0\" Authority=\"RW\" Address=\"0x4000A094\" Width=\"32\" Description=\"irrx_data_word0.\">\r\n\t\t\t\t<Bit Name=\"sts_irrx_data_word0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irrx_data_word1\" Authority=\"RW\" Address=\"0x4000A098\" Width=\"32\" Description=\"irrx_data_word1.\">\r\n\t\t\t\t<Bit Name=\"sts_irrx_data_word1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irrx_swm_fifo_config_0\" Authority=\"RW\" Address=\"0x4000A0C0\" Width=\"32\" Description=\"irrx_swm_fifo_config_0.\">\r\n\t\t\t\t<Bit Name=\"rx_fifo_cnt\" Authority=\"RW\" Bits=\"10-4\" />\r\n\t\t\t\t<Bit Name=\"rx_fifo_underflow\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"rx_fifo_overflow\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"rx_fifo_clr\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"irrx_swm_fifo_rdata\" Authority=\"RW\" Address=\"0x4000A0C4\" Width=\"32\" Description=\"irrx_swm_fifo_rdata.\">\r\n\t\t\t\t<Bit Name=\"rx_fifo_rdata\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"cks\">\r\n\t\t\t<Register Name=\"cks_config\" Authority=\"RW\" Address=\"0x4000A000\" Width=\"32\" Description=\"cks_config.\">\r\n\t\t\t\t<Bit Name=\"cr_cks_byte_swap\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_cks_clr\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"data_in\" Authority=\"RW\" Address=\"0x4000A004\" Width=\"32\" Description=\"data_in.\">\r\n\t\t\t\t<Bit Name=\"data_in\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"cks_out\" Authority=\"RW\" Address=\"0x4000A008\" Width=\"32\" Description=\"cks_out.\">\r\n\t\t\t\t<Bit Name=\"cks_out\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"qdec\">\r\n\t\t\t<Register Name=\"qdec_ctrl\" Authority=\"RW\" Address=\"0x4000A000\" Width=\"32\" Description=\"qdec_ctrl.\">\r\n\t\t\t\t<Bit Name=\"input_swap\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"rpt_mode\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"spl_mode\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"led_period\" Authority=\"RW\" Bits=\"28-20\" />\r\n\t\t\t\t<Bit Name=\"rpt_period\" Authority=\"RW\" Bits=\"19-12\" />\r\n\t\t\t\t<Bit Name=\"spl_period\" Authority=\"RW\" Bits=\"11-8\" />\r\n\t\t\t\t<Bit Name=\"deg_cnt\" Authority=\"RW\" Bits=\"7-4\" />\r\n\t\t\t\t<Bit Name=\"deg_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"led_pol\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"led_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"qdec_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"qdec_value\" Authority=\"RW\" Address=\"0x4000A004\" Width=\"32\" Description=\"qdec_value.\">\r\n\t\t\t\t<Bit Name=\"spl_val\" Authority=\"RW\" Bits=\"29-28\" />\r\n\t\t\t\t<Bit Name=\"acc2_val\" Authority=\"RW\" Bits=\"19-16\" />\r\n\t\t\t\t<Bit Name=\"acc1_val\" Authority=\"RW\" Bits=\"10-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"qdec_int_en\" Authority=\"RW\" Address=\"0x4000A010\" Width=\"32\" Description=\"qdec_int_en.\">\r\n\t\t\t\t<Bit Name=\"overflow_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"dbl_rdy_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"spl_rdy_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"rpt_rdy_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"qdec_int_sts\" Authority=\"RW\" Address=\"0x4000A014\" Width=\"32\" Description=\"qdec_int_sts.\">\r\n\t\t\t\t<Bit Name=\"overflow_sts\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"dbl_rdy_sts\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"spl_rdy_sts\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"rpt_rdy_sts\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"qdec_int_clr\" Authority=\"RW\" Address=\"0x4000A018\" Width=\"32\" Description=\"qdec_int_clr.\">\r\n\t\t\t\t<Bit Name=\"overflow_clr\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"dbl_rdy_clr\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"spl_rdy_clr\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"rpt_rdy_clr\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"kys\">\r\n\t\t\t<Register Name=\"ks_ctrl\" Authority=\"RW\" Address=\"0x4000A000\" Width=\"32\" Description=\"ks_ctrl.\">\r\n\t\t\t\t<Bit Name=\"col_num\" Authority=\"RW\" Bits=\"24-20\" />\r\n\t\t\t\t<Bit Name=\"row_num\" Authority=\"RW\" Bits=\"18-16\" />\r\n\t\t\t\t<Bit Name=\"rc_ext\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"deg_cnt\" Authority=\"RW\" Bits=\"7-4\" />\r\n\t\t\t\t<Bit Name=\"deg_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"ghost_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"ks_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ks_int_en\" Authority=\"RW\" Address=\"0x4000A010\" Width=\"32\" Description=\"ks_int_en.\">\r\n\t\t\t\t<Bit Name=\"ks_int_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ks_int_sts\" Authority=\"RW\" Address=\"0x4000A014\" Width=\"32\" Description=\"ks_int_sts.\">\r\n\t\t\t\t<Bit Name=\"keycode_valid\" Authority=\"RW\" Bits=\"3-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"keycode_clr\" Authority=\"RW\" Address=\"0x4000A018\" Width=\"32\" Description=\"keycode_clr.\">\r\n\t\t\t\t<Bit Name=\"keycode_clr\" Authority=\"RW\" Bits=\"3-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"keycode_value\" Authority=\"RW\" Address=\"0x4000A01C\" Width=\"32\" Description=\"keycode_value.\">\r\n\t\t\t\t<Bit Name=\"keycode3\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"keycode2\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"keycode1\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t\t<Bit Name=\"keycode0\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"i2s\">\r\n\t\t\t<Register Name=\"i2s_config\" Authority=\"RW\" Address=\"0x4000A000\" Width=\"32\" Description=\"i2s_config.\">\r\n\t\t\t\t<Bit Name=\"cr_ofs_en\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"cr_ofs_cnt\" Authority=\"RW\" Bits=\"24-20\" />\r\n\t\t\t\t<Bit Name=\"cr_mono_rx_ch\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"cr_endian\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"cr_i2s_mode\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"cr_data_size\" Authority=\"RW\" Bits=\"15-14\" />\r\n\t\t\t\t<Bit Name=\"cr_frame_size\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"cr_fs_3ch_mode\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"cr_fs_4ch_mode\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"cr_fs_1t_mode\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"cr_mute_mode\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"cr_mono_mode\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cr_i2s_rxd_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cr_i2s_txd_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_i2s_s_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_i2s_m_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2s_int_sts\" Authority=\"RW\" Address=\"0x4000A004\" Width=\"32\" Description=\"i2s_int_sts.\">\r\n\t\t\t\t<Bit Name=\"cr_i2s_fer_en\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"cr_i2s_rxf_en\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"cr_i2s_txf_en\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"cr_i2s_fer_mask\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"cr_i2s_rxf_mask\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"cr_i2s_txf_mask\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"i2s_fer_int\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"i2s_rxf_int\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"i2s_txf_int\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2s_bclk_config\" Authority=\"RW\" Address=\"0x4000A010\" Width=\"32\" Description=\"i2s_bclk_config.\">\r\n\t\t\t\t<Bit Name=\"cr_bclk_div_h\" Authority=\"RW\" Bits=\"27-16\" />\r\n\t\t\t\t<Bit Name=\"cr_bclk_div_l\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2s_fifo_config_0\" Authority=\"RW\" Address=\"0x4000A080\" Width=\"32\" Description=\"i2s_fifo_config_0.\">\r\n\t\t\t\t<Bit Name=\"cr_fifo_24b_lj\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"cr_fifo_lr_exchg\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"cr_fifo_lr_merge\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"rx_fifo_underflow\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"rx_fifo_overflow\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_underflow\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_overflow\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"rx_fifo_clr\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_clr\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"i2s_dma_rx_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"i2s_dma_tx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2s_fifo_config_1\" Authority=\"RW\" Address=\"0x4000A084\" Width=\"32\" Description=\"i2s_fifo_config_1.\">\r\n\t\t\t\t<Bit Name=\"rx_fifo_th\" Authority=\"RW\" Bits=\"27-24\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_th\" Authority=\"RW\" Bits=\"19-16\" />\r\n\t\t\t\t<Bit Name=\"rx_fifo_cnt\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"tx_fifo_cnt\" Authority=\"RW\" Bits=\"4-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2s_fifo_wdata\" Authority=\"RW\" Address=\"0x4000A088\" Width=\"32\" Description=\"i2s_fifo_wdata.\">\r\n\t\t\t\t<Bit Name=\"i2s_fifo_wdata\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2s_fifo_rdata\" Authority=\"RW\" Address=\"0x4000A08C\" Width=\"32\" Description=\"i2s_fifo_rdata.\">\r\n\t\t\t\t<Bit Name=\"i2s_fifo_rdata\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"i2s_io_config\" Authority=\"RW\" Address=\"0x4000A0FC\" Width=\"32\" Description=\"i2s_io_config.\">\r\n\t\t\t\t<Bit Name=\"cr_deg_en\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"cr_deg_cnt\" Authority=\"RW\" Bits=\"6-4\" />\r\n\t\t\t\t<Bit Name=\"cr_i2s_bclk_inv\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cr_i2s_fs_inv\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_i2s_rxd_inv\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_i2s_txd_inv\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"cam\">\r\n\t\t\t<Register Name=\"dvp2axi_configue\" Authority=\"RW\" Address=\"0x4000A000\" Width=\"32\" Description=\"dvp2axi_configue.\">\r\n\t\t\t\t<Bit Name=\"reg_dvp_wait_cycle\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"reg_dvp_pix_clk_cg\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"reg_interlv_mode\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_subsample_even\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"reg_subsample_en\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"reg_drop_even\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"reg_drop_en\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"reg_hw_mode_fwrap\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"reg_dvp_mode\" Authority=\"RW\" Bits=\"10-8\" />\r\n\t\t\t\t<Bit Name=\"reg_hburst\" Authority=\"RW\" Bits=\"5-4\" />\r\n\t\t\t\t<Bit Name=\"reg_line_vld_pol\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"reg_fram_vld_pol\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"reg_sw_mode\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_dvp_enable\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"dvp2ahb_addr_start_0\" Authority=\"RW\" Address=\"0x4000A004\" Width=\"32\" Description=\"dvp2ahb_addr_start_0.\">\r\n\t\t\t\t<Bit Name=\"reg_addr_start_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"dvp2ahb_mem_bcnt_0\" Authority=\"RW\" Address=\"0x4000A008\" Width=\"32\" Description=\"dvp2ahb_mem_bcnt_0.\">\r\n\t\t\t\t<Bit Name=\"reg_mem_burst_cnt_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"dvp2ahb_frame_bcnt_0\" Authority=\"RW\" Address=\"0x4000A00C\" Width=\"32\" Description=\"dvp2ahb_frame_bcnt_0.\">\r\n\t\t\t\t<Bit Name=\"reg_frame_burst_cnt_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"dvp2ahb_addr_start_1\" Authority=\"RW\" Address=\"0x4000A010\" Width=\"32\" Description=\"dvp2ahb_addr_start_1.\">\r\n\t\t\t\t<Bit Name=\"reg_addr_start_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"dvp2ahb_mem_bcnt_1\" Authority=\"RW\" Address=\"0x4000A014\" Width=\"32\" Description=\"dvp2ahb_mem_bcnt_1.\">\r\n\t\t\t\t<Bit Name=\"reg_mem_burst_cnt_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"dvp2ahb_frame_bcnt_1\" Authority=\"RW\" Address=\"0x4000A018\" Width=\"32\" Description=\"dvp2ahb_frame_bcnt_1.\">\r\n\t\t\t\t<Bit Name=\"reg_frame_burst_cnt_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"dvp_status_and_error\" Authority=\"RW\" Address=\"0x4000A01C\" Width=\"32\" Description=\"dvp_status_and_error.\">\r\n\t\t\t\t<Bit Name=\"st_bus_flsh\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"st_bus_wait\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"st_bus_func\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"st_bus_idle\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"frame_valid_cnt_1\" Authority=\"RW\" Bits=\"27-24\" />\r\n\t\t\t\t<Bit Name=\"frame_valid_cnt_0\" Authority=\"RW\" Bits=\"23-20\" />\r\n\t\t\t\t<Bit Name=\"st_dvp_idle\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"ahb_idle_1\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"ahb_idle_0\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"sts_vcnt_int\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"sts_hcnt_int\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"sts_fifo_int_1\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"sts_fifo_int_0\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"sts_frame_int_1\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"sts_frame_int_0\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"sts_mem_int_1\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"sts_mem_int_0\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"sts_normal_int_1\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"sts_normal_int_0\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"dvp_frame_fifo_pop\" Authority=\"RW\" Address=\"0x4000A020\" Width=\"32\" Description=\"dvp_frame_fifo_pop.\">\r\n\t\t\t\t<Bit Name=\"reg_int_fifo_clr_1\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"reg_int_frame_clr_1\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"reg_int_mem_clr_1\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"reg_int_normal_clr_1\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_int_vcnt_clr_0\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"reg_int_hcnt_clr_0\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"reg_int_fifo_clr_0\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"reg_int_frame_clr_0\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"reg_int_mem_clr_0\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_int_normal_clr_0\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"rfifo_pop_1\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"rfifo_pop_0\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"snsr_control\" Authority=\"RW\" Address=\"0x4000A024\" Width=\"32\" Description=\"snsr_control.\">\r\n\t\t\t\t<Bit Name=\"reg_cam_pwdn\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_cam_rst\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"int_control\" Authority=\"RW\" Address=\"0x4000A028\" Width=\"32\" Description=\"int_control.\">\r\n\t\t\t\t<Bit Name=\"reg_frame_cnt_trgr_int\" Authority=\"RW\" Bits=\"31-28\" />\r\n\t\t\t\t<Bit Name=\"reg_int_vcnt_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"reg_int_hcnt_en\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_int_fifo_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_int_frame_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"reg_int_mem_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"reg_int_normal_1_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_int_normal_0_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"hsync_control\" Authority=\"RW\" Address=\"0x4000A030\" Width=\"32\" Description=\"hsync_control.\">\r\n\t\t\t\t<Bit Name=\"reg_hsync_act_start\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"reg_hsync_act_end\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"vsync_control\" Authority=\"RW\" Address=\"0x4000A034\" Width=\"32\" Description=\"vsync_control.\">\r\n\t\t\t\t<Bit Name=\"reg_vsync_act_start\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"reg_vsync_act_end\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_size_control\" Authority=\"RW\" Address=\"0x4000A038\" Width=\"32\" Description=\"frame_size_control.\">\r\n\t\t\t\t<Bit Name=\"reg_total_vcnt\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"reg_total_hcnt\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_start_addr0_0\" Authority=\"RW\" Address=\"0x4000A040\" Width=\"32\" Description=\"frame_start_addr0_0.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_0_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_byte_cnt0_0\" Authority=\"RW\" Address=\"0x4000A044\" Width=\"32\" Description=\"frame_byte_cnt0_0.\">\r\n\t\t\t\t<Bit Name=\"frame_byte_cnt_0_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_start_addr0_1\" Authority=\"RW\" Address=\"0x4000A048\" Width=\"32\" Description=\"frame_start_addr0_1.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_0_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_byte_cnt0_1\" Authority=\"RW\" Address=\"0x4000Ax4C\" Width=\"32\" Description=\"frame_byte_cnt0_1.\">\r\n\t\t\t\t<Bit Name=\"frame_byte_cnt_0_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_start_addr0_2\" Authority=\"RW\" Address=\"0x4000A050\" Width=\"32\" Description=\"frame_start_addr0_2.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_0_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_byte_cnt0_2\" Authority=\"RW\" Address=\"0x4000A054\" Width=\"32\" Description=\"frame_byte_cnt0_2.\">\r\n\t\t\t\t<Bit Name=\"frame_byte_cnt_0_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_start_addr0_3\" Authority=\"RW\" Address=\"0x4000A058\" Width=\"32\" Description=\"frame_start_addr0_3.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_0_3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_byte_cnt0_3\" Authority=\"RW\" Address=\"0x4000Ax5C\" Width=\"32\" Description=\"frame_byte_cnt0_3.\">\r\n\t\t\t\t<Bit Name=\"frame_byte_cnt_0_3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_start_addr0_4\" Authority=\"RW\" Address=\"0x4000A060\" Width=\"32\" Description=\"frame_start_addr0_4.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_0_4\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_byte_cnt0_4\" Authority=\"RW\" Address=\"0x4000A064\" Width=\"32\" Description=\"frame_byte_cnt0_4.\">\r\n\t\t\t\t<Bit Name=\"frame_byte_cnt_0_4\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_start_addr0_5\" Authority=\"RW\" Address=\"0x4000A068\" Width=\"32\" Description=\"frame_start_addr0_5.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_0_5\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_byte_cnt0_5\" Authority=\"RW\" Address=\"0x4000Ax6C\" Width=\"32\" Description=\"frame_byte_cnt0_5.\">\r\n\t\t\t\t<Bit Name=\"frame_byte_cnt_0_5\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_start_addr0_6\" Authority=\"RW\" Address=\"0x4000A070\" Width=\"32\" Description=\"frame_start_addr0_6.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_0_6\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_byte_cnt0_6\" Authority=\"RW\" Address=\"0x4000A074\" Width=\"32\" Description=\"frame_byte_cnt0_6.\">\r\n\t\t\t\t<Bit Name=\"frame_byte_cnt_0_6\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_start_addr0_7\" Authority=\"RW\" Address=\"0x4000A078\" Width=\"32\" Description=\"frame_start_addr0_7.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_0_7\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_byte_cnt0_7\" Authority=\"RW\" Address=\"0x4000A07C\" Width=\"32\" Description=\"frame_byte_cnt0_7.\">\r\n\t\t\t\t<Bit Name=\"frame_byte_cnt_0_7\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_start_addr1_0\" Authority=\"RW\" Address=\"0x4000A080\" Width=\"32\" Description=\"frame_start_addr1_0.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_1_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_byte_cnt1_0\" Authority=\"RW\" Address=\"0x4000A084\" Width=\"32\" Description=\"frame_byte_cnt1_0.\">\r\n\t\t\t\t<Bit Name=\"frame_byte_cnt_1_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_start_addr1_1\" Authority=\"RW\" Address=\"0x4000A088\" Width=\"32\" Description=\"frame_start_addr1_1.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_1_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_byte_cnt1_1\" Authority=\"RW\" Address=\"0x4000A08C\" Width=\"32\" Description=\"frame_byte_cnt1_1.\">\r\n\t\t\t\t<Bit Name=\"frame_byte_cnt_1_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_start_addr1_2\" Authority=\"RW\" Address=\"0x4000A090\" Width=\"32\" Description=\"frame_start_addr1_2.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_1_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_byte_cnt1_2\" Authority=\"RW\" Address=\"0x4000A094\" Width=\"32\" Description=\"frame_byte_cnt1_2.\">\r\n\t\t\t\t<Bit Name=\"frame_byte_cnt_1_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_start_addr1_3\" Authority=\"RW\" Address=\"0x4000A098\" Width=\"32\" Description=\"frame_start_addr1_3.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_1_3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_byte_cnt1_3\" Authority=\"RW\" Address=\"0x4000A09C\" Width=\"32\" Description=\"frame_byte_cnt1_3.\">\r\n\t\t\t\t<Bit Name=\"frame_byte_cnt_1_3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_start_addr1_4\" Authority=\"RW\" Address=\"0x4000A0A0\" Width=\"32\" Description=\"frame_start_addr1_4.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_1_4\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_byte_cnt1_4\" Authority=\"RW\" Address=\"0x4000A0A4\" Width=\"32\" Description=\"frame_byte_cnt1_4.\">\r\n\t\t\t\t<Bit Name=\"frame_byte_cnt_1_4\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_start_addr1_5\" Authority=\"RW\" Address=\"0x4000A0A8\" Width=\"32\" Description=\"frame_start_addr1_5.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_1_5\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_byte_cnt1_5\" Authority=\"RW\" Address=\"0x4000A0AC\" Width=\"32\" Description=\"frame_byte_cnt1_5.\">\r\n\t\t\t\t<Bit Name=\"frame_byte_cnt_1_5\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_start_addr1_6\" Authority=\"RW\" Address=\"0x4000A0B0\" Width=\"32\" Description=\"frame_start_addr1_6.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_1_6\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_byte_cnt1_6\" Authority=\"RW\" Address=\"0x4000A0B4\" Width=\"32\" Description=\"frame_byte_cnt1_6.\">\r\n\t\t\t\t<Bit Name=\"frame_byte_cnt_1_6\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_start_addr1_7\" Authority=\"RW\" Address=\"0x4000A0B8\" Width=\"32\" Description=\"frame_start_addr1_7.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_1_7\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"frame_byte_cnt1_7\" Authority=\"RW\" Address=\"0x4000A0BC\" Width=\"32\" Description=\"frame_byte_cnt1_7.\">\r\n\t\t\t\t<Bit Name=\"frame_byte_cnt_1_7\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"dvp_debug\" Authority=\"RW\" Address=\"0x4000AFF0\" Width=\"32\" Description=\"dvp_debug.\">\r\n\t\t\t\t<Bit Name=\"reg_dvp_dbg_sel\" Authority=\"RW\" Bits=\"3-1\" />\r\n\t\t\t\t<Bit Name=\"reg_dvp_dbg_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"dvp_dummy_reg\" Authority=\"RW\" Address=\"0x4000AFFC\" Width=\"32\" Description=\"dvp_dummy_reg.\">\r\n\t\t\t\t<Bit Name=\"RESERVED_31_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"mjpeg\">\r\n\t\t\t<Register Name=\"mjpeg_control_1\" Authority=\"RW\" Address=\"0x4000A000\" Width=\"32\" Description=\"mjpeg_control_1.\">\r\n\t\t\t\t<Bit Name=\"reg_v0_order\" Authority=\"RW\" Bits=\"31-30\" />\r\n\t\t\t\t<Bit Name=\"reg_y1_order\" Authority=\"RW\" Bits=\"29-28\" />\r\n\t\t\t\t<Bit Name=\"reg_u0_order\" Authority=\"RW\" Bits=\"27-26\" />\r\n\t\t\t\t<Bit Name=\"reg_y0_order\" Authority=\"RW\" Bits=\"25-24\" />\r\n\t\t\t\t<Bit Name=\"reg_q_mode\" Authority=\"RW\" Bits=\"22-16\" />\r\n\t\t\t\t<Bit Name=\"reg_yuv_mode\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"reg_h_bust\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"reg_reflect_dmy\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"reg_last_hf_hblk_dmy\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"reg_last_hf_wblk_dmy\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_wr_over_stop\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"reg_order_u_even\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"reg_mjpeg_bit_order\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_mjpeg_enable\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_control_2\" Authority=\"RW\" Address=\"0x4000A004\" Width=\"32\" Description=\"mjpeg_control_2.\">\r\n\t\t\t\t<Bit Name=\"reg_mjpeg_wait_cycle\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"reg_uv_dvp2ahb_fsel\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"reg_uv_dvp2ahb_lsel\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"reg_yy_dvp2ahb_fsel\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"reg_yy_dvp2ahb_lsel\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"reg_mjpeg_sw_run\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"reg_mjpeg_sw_mode\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"reg_sw_frame\" Authority=\"RW\" Bits=\"4-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_yy_frame_addr\" Authority=\"RW\" Address=\"0x4000Ax08\" Width=\"32\" Description=\"mjpeg_yy_frame_addr.\">\r\n\t\t\t\t<Bit Name=\"reg_yy_addr_start\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_uv_frame_addr\" Authority=\"RW\" Address=\"0x4000Ax0C\" Width=\"32\" Description=\"mjpeg_uv_frame_addr.\">\r\n\t\t\t\t<Bit Name=\"reg_uv_addr_start\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_yuv_mem\" Authority=\"RW\" Address=\"0x4000A010\" Width=\"32\" Description=\"mjpeg_yuv_mem.\">\r\n\t\t\t\t<Bit Name=\"reg_uv_mem_hblk\" Authority=\"RW\" Bits=\"28-16\" />\r\n\t\t\t\t<Bit Name=\"reg_yy_mem_hblk\" Authority=\"RW\" Bits=\"12-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"jpeg_frame_addr\" Authority=\"RW\" Address=\"0x4000A014\" Width=\"32\" Description=\"jpeg_frame_addr.\">\r\n\t\t\t\t<Bit Name=\"reg_w_addr_start\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"jpeg_store_memory\" Authority=\"RW\" Address=\"0x4000A018\" Width=\"32\" Description=\"jpeg_store_memory.\">\r\n\t\t\t\t<Bit Name=\"reg_w_burst_cnt\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_control_3\" Authority=\"RW\" Address=\"0x4000A01C\" Width=\"32\" Description=\"mjpeg_control_3.\">\r\n\t\t\t\t<Bit Name=\"sts_swap_int\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"reg_int_swap_en\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"frame_valid_cnt\" Authority=\"RW\" Bits=\"28-24\" />\r\n\t\t\t\t<Bit Name=\"sts_idle_int\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"reg_int_idle_en\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"reg_frame_cnt_trgr_int\" Authority=\"RW\" Bits=\"20-16\" />\r\n\t\t\t\t<Bit Name=\"ahb_idle\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"mjpeg_manf\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"mjpeg_mans\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"mjpeg_flsh\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"mjpeg_wait\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"mjpeg_func\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"mjpeg_idle\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"sts_frame_int\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"sts_mem_int\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"sts_cam_int\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"sts_normal_int\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"reg_int_frame_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"reg_int_mem_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"reg_int_cam_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_int_normal_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_frame_fifo_pop\" Authority=\"RW\" Address=\"0x4000A020\" Width=\"32\" Description=\"mjpeg_frame_fifo_pop.\">\r\n\t\t\t\t<Bit Name=\"reg_int_swap_clr\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"reg_int_idle_clr\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"reg_int_frame_clr\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"reg_int_mem_clr\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"reg_int_cam_clr\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"reg_int_normal_clr\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"reg_w_swap_clr\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"rfifo_pop\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_frame_size\" Authority=\"RW\" Address=\"0x4000A024\" Width=\"32\" Description=\"mjpeg_frame_size.\">\r\n\t\t\t\t<Bit Name=\"reg_frame_hblk\" Authority=\"RW\" Bits=\"27-16\" />\r\n\t\t\t\t<Bit Name=\"reg_frame_wblk\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_header_byte\" Authority=\"RW\" Address=\"0x4000A028\" Width=\"32\" Description=\"mjpeg_header_byte.\">\r\n\t\t\t\t<Bit Name=\"reg_tail_exp\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_head_byte\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_swap_mode\" Authority=\"RW\" Address=\"0x4000A030\" Width=\"32\" Description=\"mjpeg_swap_mode.\">\r\n\t\t\t\t<Bit Name=\"sts_swap_fend\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"sts_swap_fstart\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"sts_read_swap_idx\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"sts_swap1_full\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"sts_swap0_full\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"reg_w_swap_mode\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_swap_bit_cnt\" Authority=\"RW\" Address=\"0x4000A034\" Width=\"32\" Description=\"mjpeg_swap_bit_cnt.\">\r\n\t\t\t\t<Bit Name=\"frame_swap_end_bit_cnt\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_paket_ctrl\" Authority=\"RW\" Address=\"0x4000A038\" Width=\"32\" Description=\"mjpeg_paket_ctrl.\">\r\n\t\t\t\t<Bit Name=\"reg_pket_body_byte\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"reg_jend_to_pend\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"reg_pket_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_paket_head_tail\" Authority=\"RW\" Address=\"0x4000Ax3C\" Width=\"32\" Description=\"mjpeg_paket_head_tail.\">\r\n\t\t\t\t<Bit Name=\"reg_pket_tail_byte\" Authority=\"RW\" Bits=\"27-16\" />\r\n\t\t\t\t<Bit Name=\"reg_pket_head_byte\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_Y_frame_read_status_1\" Authority=\"RW\" Address=\"0x4000A040\" Width=\"32\" Description=\"mjpeg_Y_frame_read_status_1.\">\r\n\t\t\t\t<Bit Name=\"yy_frm_hblk_r\" Authority=\"RW\" Bits=\"28-16\" />\r\n\t\t\t\t<Bit Name=\"yy_mem_hblk_r\" Authority=\"RW\" Bits=\"12-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_Y_frame_read_status_2\" Authority=\"RW\" Address=\"0x4000A044\" Width=\"32\" Description=\"mjpeg_Y_frame_read_status_2.\">\r\n\t\t\t\t<Bit Name=\"yy_frm_cnt_r\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"yy_mem_rnd_r\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"yy_wblk_r\" Authority=\"RW\" Bits=\"12-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_Y_frame_write_status\" Authority=\"RW\" Address=\"0x4000A048\" Width=\"32\" Description=\"mjpeg_Y_frame_write_status.\">\r\n\t\t\t\t<Bit Name=\"yy_frm_cnt_w\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"yy_mem_rnd_w\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"yy_mem_hblk_w\" Authority=\"RW\" Bits=\"12-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_UV_frame_read_status_1\" Authority=\"RW\" Address=\"0x4000Ax4C\" Width=\"32\" Description=\"mjpeg_UV_frame_read_status_1.\">\r\n\t\t\t\t<Bit Name=\"uv_frm_hblk_r\" Authority=\"RW\" Bits=\"28-16\" />\r\n\t\t\t\t<Bit Name=\"uv_mem_hblk_r\" Authority=\"RW\" Bits=\"12-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_UV_frame_read_status_2\" Authority=\"RW\" Address=\"0x4000A050\" Width=\"32\" Description=\"mjpeg_UV_frame_read_status_2.\">\r\n\t\t\t\t<Bit Name=\"uv_frm_cnt_r\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"uv_mem_rnd_r\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"uv_wblk_r\" Authority=\"RW\" Bits=\"12-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_UV_frame_write_status\" Authority=\"RW\" Address=\"0x4000A054\" Width=\"32\" Description=\"mjpeg_UV_frame_write_status.\">\r\n\t\t\t\t<Bit Name=\"uv_frm_cnt_w\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"uv_mem_rnd_w\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"uv_mem_hblk_w\" Authority=\"RW\" Bits=\"12-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_start_addr0\" Authority=\"RW\" Address=\"0x4000A080\" Width=\"32\" Description=\"mjpeg_start_addr0.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_bit_cnt0\" Authority=\"RW\" Address=\"0x4000A084\" Width=\"32\" Description=\"mjpeg_bit_cnt0.\">\r\n\t\t\t\t<Bit Name=\"frame_bit_cnt_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_start_addr1\" Authority=\"RW\" Address=\"0x4000A088\" Width=\"32\" Description=\"mjpeg_start_addr1.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_bit_cnt1\" Authority=\"RW\" Address=\"0x4000A08C\" Width=\"32\" Description=\"mjpeg_bit_cnt1.\">\r\n\t\t\t\t<Bit Name=\"frame_bit_cnt_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_start_addr2\" Authority=\"RW\" Address=\"0x4000A090\" Width=\"32\" Description=\"mjpeg_start_addr2.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_bit_cnt2\" Authority=\"RW\" Address=\"0x4000A094\" Width=\"32\" Description=\"mjpeg_bit_cnt2.\">\r\n\t\t\t\t<Bit Name=\"frame_bit_cnt_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_start_addr3\" Authority=\"RW\" Address=\"0x4000A098\" Width=\"32\" Description=\"mjpeg_start_addr3.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_bit_cnt3\" Authority=\"RW\" Address=\"0x4000A09C\" Width=\"32\" Description=\"mjpeg_bit_cnt3.\">\r\n\t\t\t\t<Bit Name=\"frame_bit_cnt_3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_start_addr4\" Authority=\"RW\" Address=\"0x4000A0A0\" Width=\"32\" Description=\"mjpeg_start_addr4.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_4\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_bit_cnt4\" Authority=\"RW\" Address=\"0x4000A0A4\" Width=\"32\" Description=\"mjpeg_bit_cnt4.\">\r\n\t\t\t\t<Bit Name=\"frame_bit_cnt_4\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_start_addr5\" Authority=\"RW\" Address=\"0x4000A0A8\" Width=\"32\" Description=\"mjpeg_start_addr5.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_5\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_bit_cnt5\" Authority=\"RW\" Address=\"0x4000A0AC\" Width=\"32\" Description=\"mjpeg_bit_cnt5.\">\r\n\t\t\t\t<Bit Name=\"frame_bit_cnt_5\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_start_addr6\" Authority=\"RW\" Address=\"0x4000A0B0\" Width=\"32\" Description=\"mjpeg_start_addr6.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_6\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_bit_cnt6\" Authority=\"RW\" Address=\"0x4000A0B4\" Width=\"32\" Description=\"mjpeg_bit_cnt6.\">\r\n\t\t\t\t<Bit Name=\"frame_bit_cnt_6\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_start_addr7\" Authority=\"RW\" Address=\"0x4000A0B8\" Width=\"32\" Description=\"mjpeg_start_addr7.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_7\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_bit_cnt7\" Authority=\"RW\" Address=\"0x4000A0BC\" Width=\"32\" Description=\"mjpeg_bit_cnt7.\">\r\n\t\t\t\t<Bit Name=\"frame_bit_cnt_7\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_start_addr_8\" Authority=\"RW\" Address=\"0x4000A0C0\" Width=\"32\" Description=\"mjpeg_start_addr_8.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_8\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_bit_cnt_8\" Authority=\"RW\" Address=\"0x4000A0C4\" Width=\"32\" Description=\"mjpeg_bit_cnt_8.\">\r\n\t\t\t\t<Bit Name=\"frame_bit_cnt_8\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_start_addr_9\" Authority=\"RW\" Address=\"0x4000A0C8\" Width=\"32\" Description=\"mjpeg_start_addr_9.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_9\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_bit_cnt_9\" Authority=\"RW\" Address=\"0x4000A0CC\" Width=\"32\" Description=\"mjpeg_bit_cnt_9.\">\r\n\t\t\t\t<Bit Name=\"frame_bit_cnt_9\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_start_addr_a\" Authority=\"RW\" Address=\"0x4000A0D0\" Width=\"32\" Description=\"mjpeg_start_addr_a.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_a\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_bit_cnt_a\" Authority=\"RW\" Address=\"0x4000A0D4\" Width=\"32\" Description=\"mjpeg_bit_cnt_a.\">\r\n\t\t\t\t<Bit Name=\"frame_bit_cnt_a\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_start_addr_b\" Authority=\"RW\" Address=\"0x4000A0D8\" Width=\"32\" Description=\"mjpeg_start_addr_b.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_b\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_bit_cnt_b\" Authority=\"RW\" Address=\"0x4000A0DC\" Width=\"32\" Description=\"mjpeg_bit_cnt_b.\">\r\n\t\t\t\t<Bit Name=\"frame_bit_cnt_b\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_start_addr_c\" Authority=\"RW\" Address=\"0x4000A0E0\" Width=\"32\" Description=\"mjpeg_start_addr_c.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_c\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_bit_cnt_c\" Authority=\"RW\" Address=\"0x4000A0E4\" Width=\"32\" Description=\"mjpeg_bit_cnt_c.\">\r\n\t\t\t\t<Bit Name=\"frame_bit_cnt_c\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_start_addr_d\" Authority=\"RW\" Address=\"0x4000A0E8\" Width=\"32\" Description=\"mjpeg_start_addr_d.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_d\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_bit_cnt_d\" Authority=\"RW\" Address=\"0x4000A0EC\" Width=\"32\" Description=\"mjpeg_bit_cnt_d.\">\r\n\t\t\t\t<Bit Name=\"frame_bit_cnt_d\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_start_addr_e\" Authority=\"RW\" Address=\"0x4000A0F0\" Width=\"32\" Description=\"mjpeg_start_addr_e.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_e\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_bit_cnt_e\" Authority=\"RW\" Address=\"0x4000A0F4\" Width=\"32\" Description=\"mjpeg_bit_cnt_e.\">\r\n\t\t\t\t<Bit Name=\"frame_bit_cnt_e\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_start_addr_f\" Authority=\"RW\" Address=\"0x4000A0F8\" Width=\"32\" Description=\"mjpeg_start_addr_f.\">\r\n\t\t\t\t<Bit Name=\"frame_start_addr_f\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_bit_cnt_f\" Authority=\"RW\" Address=\"0x4000A0FC\" Width=\"32\" Description=\"mjpeg_bit_cnt_f.\">\r\n\t\t\t\t<Bit Name=\"frame_bit_cnt_f\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_q_mode0\" Authority=\"RW\" Address=\"0x4000A100\" Width=\"32\" Description=\"mjpeg_q_mode0.\">\r\n\t\t\t\t<Bit Name=\"frame_q_mode_0\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_q_mode1\" Authority=\"RW\" Address=\"0x4000A104\" Width=\"32\" Description=\"mjpeg_q_mode1.\">\r\n\t\t\t\t<Bit Name=\"frame_q_mode_1\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_q_mode2\" Authority=\"RW\" Address=\"0x4000A108\" Width=\"32\" Description=\"mjpeg_q_mode2.\">\r\n\t\t\t\t<Bit Name=\"frame_q_mode_2\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_q_mode3\" Authority=\"RW\" Address=\"0x4000A10C\" Width=\"32\" Description=\"mjpeg_q_mode3.\">\r\n\t\t\t\t<Bit Name=\"frame_q_mode_3\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_q_mode4\" Authority=\"RW\" Address=\"0x4000A110\" Width=\"32\" Description=\"mjpeg_q_mode4.\">\r\n\t\t\t\t<Bit Name=\"frame_q_mode_4\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_q_mode5\" Authority=\"RW\" Address=\"0x4000A114\" Width=\"32\" Description=\"mjpeg_q_mode5.\">\r\n\t\t\t\t<Bit Name=\"frame_q_mode_5\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_q_mode6\" Authority=\"RW\" Address=\"0x4000A118\" Width=\"32\" Description=\"mjpeg_q_mode6.\">\r\n\t\t\t\t<Bit Name=\"frame_q_mode_6\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_q_mode7\" Authority=\"RW\" Address=\"0x4000A11C\" Width=\"32\" Description=\"mjpeg_q_mode7.\">\r\n\t\t\t\t<Bit Name=\"frame_q_mode_7\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_q_mode_8\" Authority=\"RW\" Address=\"0x4000A120\" Width=\"32\" Description=\"mjpeg_q_mode_8.\">\r\n\t\t\t\t<Bit Name=\"frame_q_mode_8\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_q_mode_9\" Authority=\"RW\" Address=\"0x4000A124\" Width=\"32\" Description=\"mjpeg_q_mode_9.\">\r\n\t\t\t\t<Bit Name=\"frame_q_mode_9\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_q_mode_a\" Authority=\"RW\" Address=\"0x4000A128\" Width=\"32\" Description=\"mjpeg_q_mode_a.\">\r\n\t\t\t\t<Bit Name=\"frame_q_mode_a\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_q_mode_b\" Authority=\"RW\" Address=\"0x4000A12C\" Width=\"32\" Description=\"mjpeg_q_mode_b.\">\r\n\t\t\t\t<Bit Name=\"frame_q_mode_b\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_q_mode_c\" Authority=\"RW\" Address=\"0x4000A130\" Width=\"32\" Description=\"mjpeg_q_mode_c.\">\r\n\t\t\t\t<Bit Name=\"frame_q_mode_c\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_q_mode_d\" Authority=\"RW\" Address=\"0x4000A134\" Width=\"32\" Description=\"mjpeg_q_mode_d.\">\r\n\t\t\t\t<Bit Name=\"frame_q_mode_d\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_q_mode_e\" Authority=\"RW\" Address=\"0x4000A138\" Width=\"32\" Description=\"mjpeg_q_mode_e.\">\r\n\t\t\t\t<Bit Name=\"frame_q_mode_e\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_q_mode_f\" Authority=\"RW\" Address=\"0x4000A13C\" Width=\"32\" Description=\"mjpeg_q_mode_f.\">\r\n\t\t\t\t<Bit Name=\"frame_q_mode_f\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_debug\" Authority=\"RW\" Address=\"0x4000A1F0\" Width=\"32\" Description=\"mjpeg_debug.\">\r\n\t\t\t\t<Bit Name=\"reg_mjpeg_dbg_sel\" Authority=\"RW\" Bits=\"7-4\" />\r\n\t\t\t\t<Bit Name=\"reg_mjpeg_dbg_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"mjpeg_dummy_reg\" Authority=\"RW\" Address=\"0x4000A1FC\" Width=\"32\" Description=\"mjpeg_dummy_reg.\">\r\n\t\t\t\t<Bit Name=\"mjpeg_dummy_reg\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"sf_ctrl\">\r\n\t\t\t<Register Name=\"sf_ctrl_0\" Authority=\"RW\" Address=\"0x4000B000\" Width=\"32\" Description=\"sf_ctrl_0.\">\r\n\t\t\t\t<Bit Name=\"sf_id\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_iv_endian\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_key_endian\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_ctr_plus_en\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_dout_endian\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_dly_mode\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"sf_if_int_set\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"sf_if_int_clr\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"sf_if_int\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"sf_if_read_dly_en\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"sf_if_read_dly_n\" Authority=\"RW\" Bits=\"10-8\" />\r\n\t\t\t\t<Bit Name=\"sf_clk_sahb_sram_sel\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"sf_clk_out_inv_sel\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"sf_clk_out_gate_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"sf_clk_sf_rx_inv_sel\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_ctrl_1\" Authority=\"RW\" Address=\"0x4000B004\" Width=\"32\" Description=\"sf_ctrl_1.\">\r\n\t\t\t\t<Bit Name=\"sf_ahb2sram_en\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"sf_ahb2sif_en\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"sf_if_en\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"sf_if_fn_sel\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"sf_ahb2sif_stop\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"sf_ahb2sif_stopped\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"sf_if_reg_wp\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"sf_if_reg_hold\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"sf_if_0_ack_lat\" Authority=\"RW\" Bits=\"22-20\" />\r\n\t\t\t\t<Bit Name=\"sf_if_sr_int_set\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"sf_if_sr_int_en\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"sf_if_sr_int\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"sf_if_sr_pat\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t\t<Bit Name=\"sf_if_sr_pat_mask\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_sahb_0\" Authority=\"RW\" Address=\"0x4000B008\" Width=\"32\" Description=\"sf_if_sahb_0.\">\r\n\t\t\t\t<Bit Name=\"sf_if_0_qpi_mode_en\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"sf_if_0_spi_mode\" Authority=\"RW\" Bits=\"30-28\" />\r\n\t\t\t\t<Bit Name=\"sf_if_0_cmd_en\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"sf_if_0_adr_en\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"sf_if_0_dmy_en\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"sf_if_0_dat_en\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"sf_if_0_dat_rw  \" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"sf_if_0_cmd_byte\" Authority=\"RW\" Bits=\"22-20\" />\r\n\t\t\t\t<Bit Name=\"sf_if_0_adr_byte\" Authority=\"RW\" Bits=\"19-17\" />\r\n\t\t\t\t<Bit Name=\"sf_if_0_dmy_byte\" Authority=\"RW\" Bits=\"16-12\" />\r\n\t\t\t\t<Bit Name=\"sf_if_0_dat_byte\" Authority=\"RW\" Bits=\"11-2\" />\r\n\t\t\t\t<Bit Name=\"sf_if_0_trig\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"sf_if_busy\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_sahb_1\" Authority=\"RW\" Address=\"0x4000B00C\" Width=\"32\" Description=\"sf_if_sahb_1.\">\r\n\t\t\t\t<Bit Name=\"sf_if_0_cmd_buf_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_sahb_2\" Authority=\"RW\" Address=\"0x4000B010\" Width=\"32\" Description=\"sf_if_sahb_2.\">\r\n\t\t\t\t<Bit Name=\"sf_if_0_cmd_buf_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_iahb_0\" Authority=\"RW\" Address=\"0x4000B014\" Width=\"32\" Description=\"sf_if_iahb_0.\">\r\n\t\t\t\t<Bit Name=\"sf_if_1_qpi_mode_en\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"sf_if_1_spi_mode\" Authority=\"RW\" Bits=\"30-28\" />\r\n\t\t\t\t<Bit Name=\"sf_if_1_cmd_en\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"sf_if_1_adr_en\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"sf_if_1_dmy_en\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"sf_if_1_dat_en\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"sf_if_1_dat_rw  \" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"sf_if_1_cmd_byte\" Authority=\"RW\" Bits=\"22-20\" />\r\n\t\t\t\t<Bit Name=\"sf_if_1_adr_byte\" Authority=\"RW\" Bits=\"19-17\" />\r\n\t\t\t\t<Bit Name=\"sf_if_1_dmy_byte\" Authority=\"RW\" Bits=\"16-12\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_iahb_1\" Authority=\"RW\" Address=\"0x4000B018\" Width=\"32\" Description=\"sf_if_iahb_1.\">\r\n\t\t\t\t<Bit Name=\"sf_if_1_cmd_buf_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_iahb_2\" Authority=\"RW\" Address=\"0x4000B01C\" Width=\"32\" Description=\"sf_if_iahb_2.\">\r\n\t\t\t\t<Bit Name=\"sf_if_1_cmd_buf_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_status_0\" Authority=\"RW\" Address=\"0x4000B020\" Width=\"32\" Description=\"sf_if_status_0.\">\r\n\t\t\t\t<Bit Name=\"sf_if_status_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_status_1\" Authority=\"RW\" Address=\"0x4000B024\" Width=\"32\" Description=\"sf_if_status_1.\">\r\n\t\t\t\t<Bit Name=\"sf_if_status_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes\" Authority=\"RW\" Address=\"0x4000B028\" Width=\"32\" Description=\"sf_aes.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_status\" Authority=\"RW\" Bits=\"31-5\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_pref_busy\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_pref_trig\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_mode\" Authority=\"RW\" Bits=\"2-1\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_ahb2sif_status\" Authority=\"RW\" Address=\"0x4000Bx2C\" Width=\"32\" Description=\"sf_ahb2sif_status.\">\r\n\t\t\t\t<Bit Name=\"sf_ahb2sif_status\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_io_dly_0\" Authority=\"RW\" Address=\"0x4000B030\" Width=\"32\" Description=\"sf_if_io_dly_0.\">\r\n\t\t\t\t<Bit Name=\"sf_dqs_do_dly_sel\" Authority=\"RW\" Bits=\"31-30\" />\r\n\t\t\t\t<Bit Name=\"sf_dqs_di_dly_sel\" Authority=\"RW\" Bits=\"29-28\" />\r\n\t\t\t\t<Bit Name=\"sf_dqs_oe_dly_sel\" Authority=\"RW\" Bits=\"27-26\" />\r\n\t\t\t\t<Bit Name=\"sf_clk_out_dly_sel\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"sf_cs2_dly_sel\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"sf_cs_dly_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_io_dly_1\" Authority=\"RW\" Address=\"0x4000B034\" Width=\"32\" Description=\"sf_if_io_dly_1.\">\r\n\t\t\t\t<Bit Name=\"sf_io_0_do_dly_sel\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"sf_io_0_di_dly_sel\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"sf_io_0_oe_dly_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_io_dly_2\" Authority=\"RW\" Address=\"0x4000B038\" Width=\"32\" Description=\"sf_if_io_dly_2.\">\r\n\t\t\t\t<Bit Name=\"sf_io_1_do_dly_sel\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"sf_io_1_di_dly_sel\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"sf_io_1_oe_dly_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_io_dly_3\" Authority=\"RW\" Address=\"0x4000Bx3C\" Width=\"32\" Description=\"sf_if_io_dly_3.\">\r\n\t\t\t\t<Bit Name=\"sf_io_2_do_dly_sel\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"sf_io_2_di_dly_sel\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"sf_io_2_oe_dly_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_io_dly_4\" Authority=\"RW\" Address=\"0x4000B040\" Width=\"32\" Description=\"sf_if_io_dly_4.\">\r\n\t\t\t\t<Bit Name=\"sf_io_3_do_dly_sel\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"sf_io_3_di_dly_sel\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"sf_io_3_oe_dly_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_reserved\" Authority=\"RW\" Address=\"0x4000B044\" Width=\"32\" Description=\"sf_reserved.\">\r\n\t\t\t\t<Bit Name=\"sf_reserved\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf2_if_io_dly_0\" Authority=\"RW\" Address=\"0x4000B048\" Width=\"32\" Description=\"sf2_if_io_dly_0.\">\r\n\t\t\t\t<Bit Name=\"sf2_dqs_do_dly_sel\" Authority=\"RW\" Bits=\"31-30\" />\r\n\t\t\t\t<Bit Name=\"sf2_dqs_di_dly_sel\" Authority=\"RW\" Bits=\"29-28\" />\r\n\t\t\t\t<Bit Name=\"sf2_dqs_oe_dly_sel\" Authority=\"RW\" Bits=\"27-26\" />\r\n\t\t\t\t<Bit Name=\"sf2_clk_out_dly_sel\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"sf2_cs2_dly_sel\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"sf2_cs_dly_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf2_if_io_dly_1\" Authority=\"RW\" Address=\"0x4000Bx4C\" Width=\"32\" Description=\"sf2_if_io_dly_1.\">\r\n\t\t\t\t<Bit Name=\"sf2_io_0_do_dly_sel\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"sf2_io_0_di_dly_sel\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"sf2_io_0_oe_dly_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf2_if_io_dly_2\" Authority=\"RW\" Address=\"0x4000B050\" Width=\"32\" Description=\"sf2_if_io_dly_2.\">\r\n\t\t\t\t<Bit Name=\"sf2_io_1_do_dly_sel\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"sf2_io_1_di_dly_sel\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"sf2_io_1_oe_dly_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf2_if_io_dly_3\" Authority=\"RW\" Address=\"0x4000B054\" Width=\"32\" Description=\"sf2_if_io_dly_3.\">\r\n\t\t\t\t<Bit Name=\"sf2_io_2_do_dly_sel\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"sf2_io_2_di_dly_sel\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"sf2_io_2_oe_dly_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf2_if_io_dly_4\" Authority=\"RW\" Address=\"0x4000B058\" Width=\"32\" Description=\"sf2_if_io_dly_4.\">\r\n\t\t\t\t<Bit Name=\"sf2_io_3_do_dly_sel\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"sf2_io_3_di_dly_sel\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"sf2_io_3_oe_dly_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf3_if_io_dly_0\" Authority=\"RW\" Address=\"0x4000Bx5C\" Width=\"32\" Description=\"sf3_if_io_dly_0.\">\r\n\t\t\t\t<Bit Name=\"sf3_dqs_do_dly_sel\" Authority=\"RW\" Bits=\"31-30\" />\r\n\t\t\t\t<Bit Name=\"sf3_dqs_di_dly_sel\" Authority=\"RW\" Bits=\"29-28\" />\r\n\t\t\t\t<Bit Name=\"sf3_dqs_oe_dly_sel\" Authority=\"RW\" Bits=\"27-26\" />\r\n\t\t\t\t<Bit Name=\"sf3_clk_out_dly_sel\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"sf3_cs2_dly_sel\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"sf3_cs_dly_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf3_if_io_dly_1\" Authority=\"RW\" Address=\"0x4000B060\" Width=\"32\" Description=\"sf3_if_io_dly_1.\">\r\n\t\t\t\t<Bit Name=\"sf3_io_0_do_dly_sel\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"sf3_io_0_di_dly_sel\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"sf3_io_0_oe_dly_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf3_if_io_dly_2\" Authority=\"RW\" Address=\"0x4000B064\" Width=\"32\" Description=\"sf3_if_io_dly_2.\">\r\n\t\t\t\t<Bit Name=\"sf3_io_1_do_dly_sel\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"sf3_io_1_di_dly_sel\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"sf3_io_1_oe_dly_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf3_if_io_dly_3\" Authority=\"RW\" Address=\"0x4000B068\" Width=\"32\" Description=\"sf3_if_io_dly_3.\">\r\n\t\t\t\t<Bit Name=\"sf3_io_2_do_dly_sel\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"sf3_io_2_di_dly_sel\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"sf3_io_2_oe_dly_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf3_if_io_dly_4\" Authority=\"RW\" Address=\"0x4000Bx6C\" Width=\"32\" Description=\"sf3_if_io_dly_4.\">\r\n\t\t\t\t<Bit Name=\"sf3_io_3_do_dly_sel\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"sf3_io_3_di_dly_sel\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"sf3_io_3_oe_dly_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_ctrl_2\" Authority=\"RW\" Address=\"0x4000B070\" Width=\"32\" Description=\"sf_ctrl_2.\">\r\n\t\t\t\t<Bit Name=\"sf_if_0_bk_sel\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"sf_if_bk2_en\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"sf_if_bk2_mode\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"sf_if_bk_swap\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"sf_if_dqs_en\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"sf_if_dtr_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"sf_if_pad_sel_lock\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"sf_if_pad_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_ctrl_3\" Authority=\"RW\" Address=\"0x4000B074\" Width=\"32\" Description=\"sf_ctrl_3.\">\r\n\t\t\t\t<Bit Name=\"sf_if_1_ack_lat\" Authority=\"RW\" Bits=\"31-29\" />\r\n\t\t\t\t<Bit Name=\"sf_cmds_wrap_q\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"sf_cmds_wrap_mode\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"sf_cmds_wrap_q_ini\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"sf_cmds_bt_en\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"sf_cmds_bt_dly\" Authority=\"RW\" Bits=\"7-5\" />\r\n\t\t\t\t<Bit Name=\"sf_cmds_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"sf_cmds_wrap_len\" Authority=\"RW\" Bits=\"3-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_iahb_3\" Authority=\"RW\" Address=\"0x4000B078\" Width=\"32\" Description=\"sf_if_iahb_3.\">\r\n\t\t\t\t<Bit Name=\"sf_if_2_qpi_mode_en\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"sf_if_2_spi_mode\" Authority=\"RW\" Bits=\"30-28\" />\r\n\t\t\t\t<Bit Name=\"sf_if_2_cmd_en\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"sf_if_2_adr_en\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"sf_if_2_dmy_en\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"sf_if_2_dat_en\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"sf_if_2_dat_rw  \" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"sf_if_2_cmd_byte\" Authority=\"RW\" Bits=\"22-20\" />\r\n\t\t\t\t<Bit Name=\"sf_if_2_adr_byte\" Authority=\"RW\" Bits=\"19-17\" />\r\n\t\t\t\t<Bit Name=\"sf_if_2_dmy_byte\" Authority=\"RW\" Bits=\"16-12\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_iahb_4\" Authority=\"RW\" Address=\"0x4000B07C\" Width=\"32\" Description=\"sf_if_iahb_4.\">\r\n\t\t\t\t<Bit Name=\"sf_if_2_cmd_buf_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_iahb_5\" Authority=\"RW\" Address=\"0x4000B080\" Width=\"32\" Description=\"sf_if_iahb_5.\">\r\n\t\t\t\t<Bit Name=\"sf_if_2_cmd_buf_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_iahb_6\" Authority=\"RW\" Address=\"0x4000B084\" Width=\"32\" Description=\"sf_if_iahb_6.\">\r\n\t\t\t\t<Bit Name=\"sf_if_3_qpi_mode_en\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"sf_if_3_spi_mode\" Authority=\"RW\" Bits=\"30-28\" />\r\n\t\t\t\t<Bit Name=\"sf_if_3_cmd_en\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"sf_if_3_adr_en\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"sf_if_3_cmd_byte\" Authority=\"RW\" Bits=\"22-20\" />\r\n\t\t\t\t<Bit Name=\"sf_if_3_adr_byte\" Authority=\"RW\" Bits=\"19-17\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_iahb_7\" Authority=\"RW\" Address=\"0x4000B088\" Width=\"32\" Description=\"sf_if_iahb_7.\">\r\n\t\t\t\t<Bit Name=\"sf_if_3_cmd_buf_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_iahb_8\" Authority=\"RW\" Address=\"0x4000B08C\" Width=\"32\" Description=\"sf_if_iahb_8.\">\r\n\t\t\t\t<Bit Name=\"sf_if_3_cmd_buf_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_iahb_9\" Authority=\"RW\" Address=\"0x4000B090\" Width=\"32\" Description=\"sf_if_iahb_9.\">\r\n\t\t\t\t<Bit Name=\"sf_if_4_qpi_mode_en\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"sf_if_4_spi_mode\" Authority=\"RW\" Bits=\"30-28\" />\r\n\t\t\t\t<Bit Name=\"sf_if_4_cmd_en\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"sf_if_4_adr_en\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"sf_if_4_dmy_en\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"sf_if_4_dat_en\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"sf_if_4_dat_rw  \" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"sf_if_4_cmd_byte\" Authority=\"RW\" Bits=\"22-20\" />\r\n\t\t\t\t<Bit Name=\"sf_if_4_adr_byte\" Authority=\"RW\" Bits=\"19-17\" />\r\n\t\t\t\t<Bit Name=\"sf_if_4_dmy_byte\" Authority=\"RW\" Bits=\"16-12\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_iahb_10\" Authority=\"RW\" Address=\"0x4000B094\" Width=\"32\" Description=\"sf_if_iahb_10.\">\r\n\t\t\t\t<Bit Name=\"sf_if_4_cmd_buf_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_iahb_11\" Authority=\"RW\" Address=\"0x4000B098\" Width=\"32\" Description=\"sf_if_iahb_11.\">\r\n\t\t\t\t<Bit Name=\"sf_if_4_cmd_buf_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_if_iahb_12\" Authority=\"RW\" Address=\"0x4000B09C\" Width=\"32\" Description=\"sf_if_iahb_12.\">\r\n\t\t\t\t<Bit Name=\"sf2_if_read_dly_src\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"sf2_if_read_dly_en\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"sf2_if_read_dly_n\" Authority=\"RW\" Bits=\"10-8\" />\r\n\t\t\t\t<Bit Name=\"sf3_clk_out_inv_sel\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"sf2_clk_out_inv_sel\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"sf2_clk_sf_rx_inv_src\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"sf2_clk_sf_rx_inv_sel\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_ctrl_prot_en_rd\" Authority=\"RW\" Address=\"0x4000B100\" Width=\"32\" Description=\"sf_ctrl_prot_en_rd.\">\r\n\t\t\t\t<Bit Name=\"sf_dbg_dis\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"sf_if_0_trig_wr_lock\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"sf_ctrl_id1_en_rd\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"sf_ctrl_id0_en_rd\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"sf_ctrl_prot_en_rd\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_ctrl_prot_en\" Authority=\"RW\" Address=\"0x4000B104\" Width=\"32\" Description=\"sf_ctrl_prot_en.\">\r\n\t\t\t\t<Bit Name=\"sf_ctrl_id1_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"sf_ctrl_id0_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"sf_ctrl_prot_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r0_0\" Authority=\"RW\" Address=\"0x4000B200\" Width=\"32\" Description=\"sf_aes_key_r0_0.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r0_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r0_1\" Authority=\"RW\" Address=\"0x4000B204\" Width=\"32\" Description=\"sf_aes_key_r0_1.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r0_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r0_2\" Authority=\"RW\" Address=\"0x4000B208\" Width=\"32\" Description=\"sf_aes_key_r0_2.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r0_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r0_3\" Authority=\"RW\" Address=\"0x4000B20C\" Width=\"32\" Description=\"sf_aes_key_r0_3.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r0_3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r0_4\" Authority=\"RW\" Address=\"0x4000B210\" Width=\"32\" Description=\"sf_aes_key_r0_4.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r0_4\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r0_5\" Authority=\"RW\" Address=\"0x4000B214\" Width=\"32\" Description=\"sf_aes_key_r0_5.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r0_5\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r0_6\" Authority=\"RW\" Address=\"0x4000B218\" Width=\"32\" Description=\"sf_aes_key_r0_6.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r0_6\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r0_7\" Authority=\"RW\" Address=\"0x4000B21C\" Width=\"32\" Description=\"sf_aes_key_r0_7.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r0_7\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_iv_r0_w0\" Authority=\"RW\" Address=\"0x4000B220\" Width=\"32\" Description=\"sf_aes_iv_r0_w0.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_iv_r0_w0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_iv_r0_w1\" Authority=\"RW\" Address=\"0x4000B224\" Width=\"32\" Description=\"sf_aes_iv_r0_w1.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_iv_r0_w1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_iv_r0_w2\" Authority=\"RW\" Address=\"0x4000B228\" Width=\"32\" Description=\"sf_aes_iv_r0_w2.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_iv_r0_w2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_iv_r0_w3\" Authority=\"RW\" Address=\"0x4000B22C\" Width=\"32\" Description=\"sf_aes_iv_r0_w3.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_iv_r0_w3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_cfg_r0\" Authority=\"RW\" Address=\"0x4000B230\" Width=\"32\" Description=\"sf_aes_cfg_r0.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_region_r0_lock\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_region_r0_en\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_region_r0_hw_key_en\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_region_r0_start\" Authority=\"RW\" Bits=\"27-14\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_region_r0_end\" Authority=\"RW\" Bits=\"13-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r1_0\" Authority=\"RW\" Address=\"0x4000B300\" Width=\"32\" Description=\"sf_aes_key_r1_0.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r1_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r1_1\" Authority=\"RW\" Address=\"0x4000B304\" Width=\"32\" Description=\"sf_aes_key_r1_1.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r1_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r1_2\" Authority=\"RW\" Address=\"0x4000B308\" Width=\"32\" Description=\"sf_aes_key_r1_2.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r1_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r1_3\" Authority=\"RW\" Address=\"0x4000B30C\" Width=\"32\" Description=\"sf_aes_key_r1_3.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r1_3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r1_4\" Authority=\"RW\" Address=\"0x4000B310\" Width=\"32\" Description=\"sf_aes_key_r1_4.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r1_4\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r1_5\" Authority=\"RW\" Address=\"0x4000B314\" Width=\"32\" Description=\"sf_aes_key_r1_5.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r1_5\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r1_6\" Authority=\"RW\" Address=\"0x4000B318\" Width=\"32\" Description=\"sf_aes_key_r1_6.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r1_6\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r1_7\" Authority=\"RW\" Address=\"0x4000B31C\" Width=\"32\" Description=\"sf_aes_key_r1_7.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r1_7\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_iv_r1_w0\" Authority=\"RW\" Address=\"0x4000B320\" Width=\"32\" Description=\"sf_aes_iv_r1_w0.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_iv_r1_w0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_iv_r1_w1\" Authority=\"RW\" Address=\"0x4000B324\" Width=\"32\" Description=\"sf_aes_iv_r1_w1.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_iv_r1_w1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_iv_r1_w2\" Authority=\"RW\" Address=\"0x4000B328\" Width=\"32\" Description=\"sf_aes_iv_r1_w2.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_iv_r1_w2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_iv_r1_w3\" Authority=\"RW\" Address=\"0x4000B32C\" Width=\"32\" Description=\"sf_aes_iv_r1_w3.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_iv_r1_w3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_r1\" Authority=\"RW\" Address=\"0x4000B330\" Width=\"32\" Description=\"sf_aes_r1.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_r1_lock\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_r1_en\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_r1_hw_key_en\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_r1_start\" Authority=\"RW\" Bits=\"27-14\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_r1_end\" Authority=\"RW\" Bits=\"13-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r2_0\" Authority=\"RW\" Address=\"0x4000B400\" Width=\"32\" Description=\"sf_aes_key_r2_0.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r2_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r2_1\" Authority=\"RW\" Address=\"0x4000B404\" Width=\"32\" Description=\"sf_aes_key_r2_1.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r2_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r2_2\" Authority=\"RW\" Address=\"0x4000B408\" Width=\"32\" Description=\"sf_aes_key_r2_2.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r2_2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r2_3\" Authority=\"RW\" Address=\"0x4000B40C\" Width=\"32\" Description=\"sf_aes_key_r2_3.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r2_3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r2_4\" Authority=\"RW\" Address=\"0x4000B410\" Width=\"32\" Description=\"sf_aes_key_r2_4.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r2_4\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r2_5\" Authority=\"RW\" Address=\"0x4000B414\" Width=\"32\" Description=\"sf_aes_key_r2_5.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r2_5\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r2_6\" Authority=\"RW\" Address=\"0x4000B418\" Width=\"32\" Description=\"sf_aes_key_r2_6.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r2_6\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_key_r2_7\" Authority=\"RW\" Address=\"0x4000B41C\" Width=\"32\" Description=\"sf_aes_key_r2_7.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_key_r2_7\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_iv_r2_w0\" Authority=\"RW\" Address=\"0x4000B420\" Width=\"32\" Description=\"sf_aes_iv_r2_w0.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_iv_r2_w0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_iv_r2_w1\" Authority=\"RW\" Address=\"0x4000B424\" Width=\"32\" Description=\"sf_aes_iv_r2_w1.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_iv_r2_w1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_iv_r2_w2\" Authority=\"RW\" Address=\"0x4000B428\" Width=\"32\" Description=\"sf_aes_iv_r2_w2.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_iv_r2_w2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_iv_r2_w3\" Authority=\"RW\" Address=\"0x4000B42C\" Width=\"32\" Description=\"sf_aes_iv_r2_w3.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_iv_r2_w3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_aes_r2\" Authority=\"RW\" Address=\"0x4000B430\" Width=\"32\" Description=\"sf_aes_r2.\">\r\n\t\t\t\t<Bit Name=\"sf_aes_r2_lock\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_r2_en\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_r2_hw_key_en\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_r2_start\" Authority=\"RW\" Bits=\"27-14\" />\r\n\t\t\t\t<Bit Name=\"sf_aes_r2_end\" Authority=\"RW\" Bits=\"13-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_id0_offset\" Authority=\"RW\" Address=\"0x4000B434\" Width=\"32\" Description=\"sf_id0_offset.\">\r\n\t\t\t\t<Bit Name=\"sf_id0_offset\" Authority=\"RW\" Bits=\"23-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_id1_offset\" Authority=\"RW\" Address=\"0x4000B438\" Width=\"32\" Description=\"sf_id1_offset.\">\r\n\t\t\t\t<Bit Name=\"sf_id1_offset\" Authority=\"RW\" Bits=\"23-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_bk2_id0_offset\" Authority=\"RW\" Address=\"0x4000B43C\" Width=\"32\" Description=\"sf_bk2_id0_offset.\">\r\n\t\t\t\t<Bit Name=\"sf_bk2_id0_offset\" Authority=\"RW\" Bits=\"23-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"sf_bk2_id1_offset\" Authority=\"RW\" Address=\"0x4000B440\" Width=\"32\" Description=\"sf_bk2_id1_offset.\">\r\n\t\t\t\t<Bit Name=\"sf_bk2_id1_offset\" Authority=\"RW\" Bits=\"23-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"dma\">\r\n\t\t\t<Register Name=\"DMA_IntStatus\" Authority=\"RW\" Address=\"0x40007000\" Width=\"32\" Description=\"DMA_IntStatus.\">\r\n\t\t\t\t<Bit Name=\"IntStatus\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_IntTCStatus\" Authority=\"RW\" Address=\"0x40007004\" Width=\"32\" Description=\"DMA_IntTCStatus.\">\r\n\t\t\t\t<Bit Name=\"IntTCStatus\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_IntTCClear\" Authority=\"RW\" Address=\"0x40007008\" Width=\"32\" Description=\"DMA_IntTCClear.\">\r\n\t\t\t\t<Bit Name=\"IntTCClear\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_IntErrorStatus\" Authority=\"RW\" Address=\"0x4000700C\" Width=\"32\" Description=\"DMA_IntErrorStatus.\">\r\n\t\t\t\t<Bit Name=\"IntErrorStatus\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_IntErrClr\" Authority=\"RW\" Address=\"0x40007010\" Width=\"32\" Description=\"DMA_IntErrClr.\">\r\n\t\t\t\t<Bit Name=\"IntErrClr\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_RawIntTCStatus\" Authority=\"RW\" Address=\"0x40007014\" Width=\"32\" Description=\"DMA_RawIntTCStatus.\">\r\n\t\t\t\t<Bit Name=\"RawIntTCStatus\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_RawIntErrorStatus\" Authority=\"RW\" Address=\"0x40007018\" Width=\"32\" Description=\"DMA_RawIntErrorStatus.\">\r\n\t\t\t\t<Bit Name=\"RawIntErrorStatus\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_EnbldChns\" Authority=\"RW\" Address=\"0x4000701C\" Width=\"32\" Description=\"DMA_EnbldChns.\">\r\n\t\t\t\t<Bit Name=\"EnabledChannels\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_SoftBReq\" Authority=\"RW\" Address=\"0x40007020\" Width=\"32\" Description=\"DMA_SoftBReq.\">\r\n\t\t\t\t<Bit Name=\"SoftBReq\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_SoftSReq\" Authority=\"RW\" Address=\"0x40007024\" Width=\"32\" Description=\"DMA_SoftSReq.\">\r\n\t\t\t\t<Bit Name=\"SoftSReq\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_SoftLBReq\" Authority=\"RW\" Address=\"0x40007028\" Width=\"32\" Description=\"DMA_SoftLBReq.\">\r\n\t\t\t\t<Bit Name=\"SoftLBReq\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_SoftLSReq\" Authority=\"RW\" Address=\"0x40007x2C\" Width=\"32\" Description=\"DMA_SoftLSReq.\">\r\n\t\t\t\t<Bit Name=\"SoftLSReq\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_Top_Config\" Authority=\"RW\" Address=\"0x40007030\" Width=\"32\" Description=\"DMA_Top_Config.\">\r\n\t\t\t\t<Bit Name=\"M\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"E\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_Sync\" Authority=\"RW\" Address=\"0x40007034\" Width=\"32\" Description=\"DMA_Sync.\">\r\n\t\t\t\t<Bit Name=\"DMA_Sync\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C0SrcAddr\" Authority=\"RW\" Address=\"0x40007100\" Width=\"32\" Description=\"DMA_C0SrcAddr.\">\r\n\t\t\t\t<Bit Name=\"SrcAddr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C0DstAddr\" Authority=\"RW\" Address=\"0x40007104\" Width=\"32\" Description=\"DMA_C0DstAddr.\">\r\n\t\t\t\t<Bit Name=\"DstAddr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C0LLI\" Authority=\"RW\" Address=\"0x40007108\" Width=\"32\" Description=\"DMA_C0LLI.\">\r\n\t\t\t\t<Bit Name=\"LLI\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C0Control\" Authority=\"RW\" Address=\"0x4000710C\" Width=\"32\" Description=\"DMA_C0Control.\">\r\n\t\t\t\t<Bit Name=\"I\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"Prot\" Authority=\"RW\" Bits=\"30-28\" />\r\n\t\t\t\t<Bit Name=\"DI\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"SI\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"SLargerD\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"fix_cnt\" Authority=\"RW\" Bits=\"24-23\" />\r\n\t\t\t\t<Bit Name=\"DWidth\" Authority=\"RW\" Bits=\"22-21\" />\r\n\t\t\t\t<Bit Name=\"SWidth\" Authority=\"RW\" Bits=\"19-18\" />\r\n\t\t\t\t<Bit Name=\"dst_add_mode\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"DBSize\" Authority=\"RW\" Bits=\"16-15\" />\r\n\t\t\t\t<Bit Name=\"dst_min_mode\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"SBSize\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"TransferSize\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C0Config\" Authority=\"RW\" Address=\"0x40007110\" Width=\"32\" Description=\"DMA_C0Config.\">\r\n\t\t\t\t<Bit Name=\"LLICounter\" Authority=\"RW\" Bits=\"29-20\" />\r\n\t\t\t\t<Bit Name=\"H\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"A\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"L\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"ITC\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"IE\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"FlowCntrl\" Authority=\"RW\" Bits=\"13-11\" />\r\n\t\t\t\t<Bit Name=\"DstPeripheral\" Authority=\"RW\" Bits=\"10-6\" />\r\n\t\t\t\t<Bit Name=\"SrcPeripheral\" Authority=\"RW\" Bits=\"5-1\" />\r\n\t\t\t\t<Bit Name=\"E\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C1SrcAddr\" Authority=\"RW\" Address=\"0x40007200\" Width=\"32\" Description=\"DMA_C1SrcAddr.\">\r\n\t\t\t\t<Bit Name=\"SrcAddr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C1DstAddr\" Authority=\"RW\" Address=\"0x40007204\" Width=\"32\" Description=\"DMA_C1DstAddr.\">\r\n\t\t\t\t<Bit Name=\"DstAddr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C1LLI\" Authority=\"RW\" Address=\"0x40007208\" Width=\"32\" Description=\"DMA_C1LLI.\">\r\n\t\t\t\t<Bit Name=\"LLI\" Authority=\"RW\" Bits=\"31-2\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C1Control\" Authority=\"RW\" Address=\"0x4000720C\" Width=\"32\" Description=\"DMA_C1Control.\">\r\n\t\t\t\t<Bit Name=\"I\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"Prot\" Authority=\"RW\" Bits=\"30-28\" />\r\n\t\t\t\t<Bit Name=\"DI\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"SI\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"fix_cnt\" Authority=\"RW\" Bits=\"24-23\" />\r\n\t\t\t\t<Bit Name=\"DWidth\" Authority=\"RW\" Bits=\"23-21\" />\r\n\t\t\t\t<Bit Name=\"SWidth\" Authority=\"RW\" Bits=\"20-18\" />\r\n\t\t\t\t<Bit Name=\"dst_add_mode\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"DBSize\" Authority=\"RW\" Bits=\"16-15\" />\r\n\t\t\t\t<Bit Name=\"dst_min_mode\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"SBSize\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"TransferSize\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C1Config\" Authority=\"RW\" Address=\"0x40007210\" Width=\"32\" Description=\"DMA_C1Config.\">\r\n\t\t\t\t<Bit Name=\"H\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"A\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"L\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"ITC\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"IE\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"FlowCntrl\" Authority=\"RW\" Bits=\"13-11\" />\r\n\t\t\t\t<Bit Name=\"DstPeripheral\" Authority=\"RW\" Bits=\"10-6\" />\r\n\t\t\t\t<Bit Name=\"SrcPeripheral\" Authority=\"RW\" Bits=\"5-1\" />\r\n\t\t\t\t<Bit Name=\"E\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C2SrcAddr\" Authority=\"RW\" Address=\"0x40007300\" Width=\"32\" Description=\"DMA_C2SrcAddr.\">\r\n\t\t\t\t<Bit Name=\"SrcAddr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C2DstAddr\" Authority=\"RW\" Address=\"0x40007304\" Width=\"32\" Description=\"DMA_C2DstAddr.\">\r\n\t\t\t\t<Bit Name=\"DstAddr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C2LLI\" Authority=\"RW\" Address=\"0x40007308\" Width=\"32\" Description=\"DMA_C2LLI.\">\r\n\t\t\t\t<Bit Name=\"LLI\" Authority=\"RW\" Bits=\"31-2\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C2Control\" Authority=\"RW\" Address=\"0x4000730C\" Width=\"32\" Description=\"DMA_C2Control.\">\r\n\t\t\t\t<Bit Name=\"I\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"Prot\" Authority=\"RW\" Bits=\"30-28\" />\r\n\t\t\t\t<Bit Name=\"DI\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"SI\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"fix_cnt\" Authority=\"RW\" Bits=\"24-23\" />\r\n\t\t\t\t<Bit Name=\"DWidth\" Authority=\"RW\" Bits=\"23-21\" />\r\n\t\t\t\t<Bit Name=\"SWidth\" Authority=\"RW\" Bits=\"20-18\" />\r\n\t\t\t\t<Bit Name=\"dst_add_mode\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"DBSize\" Authority=\"RW\" Bits=\"16-15\" />\r\n\t\t\t\t<Bit Name=\"dst_min_mode\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"SBSize\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"TransferSize\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C2Config\" Authority=\"RW\" Address=\"0x40007310\" Width=\"32\" Description=\"DMA_C2Config.\">\r\n\t\t\t\t<Bit Name=\"H\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"A\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"L\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"ITC\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"IE\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"FlowCntrl\" Authority=\"RW\" Bits=\"13-11\" />\r\n\t\t\t\t<Bit Name=\"DstPeripheral\" Authority=\"RW\" Bits=\"10-6\" />\r\n\t\t\t\t<Bit Name=\"SrcPeripheral\" Authority=\"RW\" Bits=\"5-1\" />\r\n\t\t\t\t<Bit Name=\"E\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C3SrcAddr\" Authority=\"RW\" Address=\"0x40007400\" Width=\"32\" Description=\"DMA_C3SrcAddr.\">\r\n\t\t\t\t<Bit Name=\"SrcAddr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C3DstAddr\" Authority=\"RW\" Address=\"0x40007404\" Width=\"32\" Description=\"DMA_C3DstAddr.\">\r\n\t\t\t\t<Bit Name=\"DstAddr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C3LLI\" Authority=\"RW\" Address=\"0x40007408\" Width=\"32\" Description=\"DMA_C3LLI.\">\r\n\t\t\t\t<Bit Name=\"LLI\" Authority=\"RW\" Bits=\"31-2\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C3Control\" Authority=\"RW\" Address=\"0x4000740C\" Width=\"32\" Description=\"DMA_C3Control.\">\r\n\t\t\t\t<Bit Name=\"I\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"Prot\" Authority=\"RW\" Bits=\"30-28\" />\r\n\t\t\t\t<Bit Name=\"DI\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"SI\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"fix_cnt\" Authority=\"RW\" Bits=\"24-23\" />\r\n\t\t\t\t<Bit Name=\"DWidth\" Authority=\"RW\" Bits=\"23-21\" />\r\n\t\t\t\t<Bit Name=\"SWidth\" Authority=\"RW\" Bits=\"20-18\" />\r\n\t\t\t\t<Bit Name=\"dst_add_mode\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"DBSize\" Authority=\"RW\" Bits=\"16-15\" />\r\n\t\t\t\t<Bit Name=\"dst_min_mode\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"SBSize\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"TransferSize\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C3Config\" Authority=\"RW\" Address=\"0x40007410\" Width=\"32\" Description=\"DMA_C3Config.\">\r\n\t\t\t\t<Bit Name=\"H\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"A\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"L\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"ITC\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"IE\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"FlowCntrl\" Authority=\"RW\" Bits=\"13-11\" />\r\n\t\t\t\t<Bit Name=\"DstPeripheral\" Authority=\"RW\" Bits=\"10-6\" />\r\n\t\t\t\t<Bit Name=\"SrcPeripheral\" Authority=\"RW\" Bits=\"5-1\" />\r\n\t\t\t\t<Bit Name=\"E\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C4SrcAddr\" Authority=\"RW\" Address=\"0x40007500\" Width=\"32\" Description=\"DMA_C4SrcAddr.\">\r\n\t\t\t\t<Bit Name=\"SrcAddr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C4DstAddr\" Authority=\"RW\" Address=\"0x40007504\" Width=\"32\" Description=\"DMA_C4DstAddr.\">\r\n\t\t\t\t<Bit Name=\"DstAddr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C4LLI\" Authority=\"RW\" Address=\"0x40007508\" Width=\"32\" Description=\"DMA_C4LLI.\">\r\n\t\t\t\t<Bit Name=\"LLI\" Authority=\"RW\" Bits=\"31-2\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C4Control\" Authority=\"RW\" Address=\"0x4000750C\" Width=\"32\" Description=\"DMA_C4Control.\">\r\n\t\t\t\t<Bit Name=\"I\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"Prot\" Authority=\"RW\" Bits=\"30-28\" />\r\n\t\t\t\t<Bit Name=\"DI\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"SI\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"fix_cnt\" Authority=\"RW\" Bits=\"24-23\" />\r\n\t\t\t\t<Bit Name=\"DWidth\" Authority=\"RW\" Bits=\"23-21\" />\r\n\t\t\t\t<Bit Name=\"SWidth\" Authority=\"RW\" Bits=\"20-18\" />\r\n\t\t\t\t<Bit Name=\"dst_add_mode\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"DBSize\" Authority=\"RW\" Bits=\"16-15\" />\r\n\t\t\t\t<Bit Name=\"dst_min_mode\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"SBSize\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"TransferSize\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C4Config\" Authority=\"RW\" Address=\"0x40007510\" Width=\"32\" Description=\"DMA_C4Config.\">\r\n\t\t\t\t<Bit Name=\"H\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"A\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"L\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"ITC\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"IE\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"FlowCntrl\" Authority=\"RW\" Bits=\"13-11\" />\r\n\t\t\t\t<Bit Name=\"DstPeripheral\" Authority=\"RW\" Bits=\"10-6\" />\r\n\t\t\t\t<Bit Name=\"SrcPeripheral\" Authority=\"RW\" Bits=\"5-1\" />\r\n\t\t\t\t<Bit Name=\"E\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C5SrcAddr\" Authority=\"RW\" Address=\"0x40007600\" Width=\"32\" Description=\"DMA_C5SrcAddr.\">\r\n\t\t\t\t<Bit Name=\"SrcAddr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C5DstAddr\" Authority=\"RW\" Address=\"0x40007604\" Width=\"32\" Description=\"DMA_C5DstAddr.\">\r\n\t\t\t\t<Bit Name=\"DstAddr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C5LLI\" Authority=\"RW\" Address=\"0x40007608\" Width=\"32\" Description=\"DMA_C5LLI.\">\r\n\t\t\t\t<Bit Name=\"LLI\" Authority=\"RW\" Bits=\"31-2\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C5Control\" Authority=\"RW\" Address=\"0x4000760C\" Width=\"32\" Description=\"DMA_C5Control.\">\r\n\t\t\t\t<Bit Name=\"I\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"Prot\" Authority=\"RW\" Bits=\"30-28\" />\r\n\t\t\t\t<Bit Name=\"DI\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"SI\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"fix_cnt\" Authority=\"RW\" Bits=\"24-23\" />\r\n\t\t\t\t<Bit Name=\"DWidth\" Authority=\"RW\" Bits=\"23-21\" />\r\n\t\t\t\t<Bit Name=\"SWidth\" Authority=\"RW\" Bits=\"20-18\" />\r\n\t\t\t\t<Bit Name=\"dst_add_mode\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"DBSize\" Authority=\"RW\" Bits=\"16-15\" />\r\n\t\t\t\t<Bit Name=\"dst_min_mode\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"SBSize\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"TransferSize\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C5Config\" Authority=\"RW\" Address=\"0x40007610\" Width=\"32\" Description=\"DMA_C5Config.\">\r\n\t\t\t\t<Bit Name=\"H\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"A\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"L\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"ITC\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"IE\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"FlowCntrl\" Authority=\"RW\" Bits=\"13-11\" />\r\n\t\t\t\t<Bit Name=\"DstPeripheral\" Authority=\"RW\" Bits=\"10-6\" />\r\n\t\t\t\t<Bit Name=\"SrcPeripheral\" Authority=\"RW\" Bits=\"5-1\" />\r\n\t\t\t\t<Bit Name=\"E\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C6SrcAddr\" Authority=\"RW\" Address=\"0x40007700\" Width=\"32\" Description=\"DMA_C6SrcAddr.\">\r\n\t\t\t\t<Bit Name=\"SrcAddr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C6DstAddr\" Authority=\"RW\" Address=\"0x40007704\" Width=\"32\" Description=\"DMA_C6DstAddr.\">\r\n\t\t\t\t<Bit Name=\"DstAddr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C6LLI\" Authority=\"RW\" Address=\"0x40007708\" Width=\"32\" Description=\"DMA_C6LLI.\">\r\n\t\t\t\t<Bit Name=\"LLI\" Authority=\"RW\" Bits=\"31-2\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C6Control\" Authority=\"RW\" Address=\"0x4000770C\" Width=\"32\" Description=\"DMA_C6Control.\">\r\n\t\t\t\t<Bit Name=\"I\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"Prot\" Authority=\"RW\" Bits=\"30-28\" />\r\n\t\t\t\t<Bit Name=\"DI\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"SI\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"fix_cnt\" Authority=\"RW\" Bits=\"24-23\" />\r\n\t\t\t\t<Bit Name=\"DWidth\" Authority=\"RW\" Bits=\"23-21\" />\r\n\t\t\t\t<Bit Name=\"SWidth\" Authority=\"RW\" Bits=\"20-18\" />\r\n\t\t\t\t<Bit Name=\"dst_add_mode\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"DBSize\" Authority=\"RW\" Bits=\"16-15\" />\r\n\t\t\t\t<Bit Name=\"dst_min_mode\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"SBSize\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"TransferSize\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C6Config\" Authority=\"RW\" Address=\"0x40007710\" Width=\"32\" Description=\"DMA_C6Config.\">\r\n\t\t\t\t<Bit Name=\"H\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"A\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"L\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"ITC\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"IE\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"FlowCntrl\" Authority=\"RW\" Bits=\"13-11\" />\r\n\t\t\t\t<Bit Name=\"DstPeripheral\" Authority=\"RW\" Bits=\"10-6\" />\r\n\t\t\t\t<Bit Name=\"SrcPeripheral\" Authority=\"RW\" Bits=\"5-1\" />\r\n\t\t\t\t<Bit Name=\"E\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C7SrcAddr\" Authority=\"RW\" Address=\"0x40007800\" Width=\"32\" Description=\"DMA_C7SrcAddr.\">\r\n\t\t\t\t<Bit Name=\"SrcAddr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C7DstAddr\" Authority=\"RW\" Address=\"0x40007804\" Width=\"32\" Description=\"DMA_C7DstAddr.\">\r\n\t\t\t\t<Bit Name=\"DstAddr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C7LLI\" Authority=\"RW\" Address=\"0x40007808\" Width=\"32\" Description=\"DMA_C7LLI.\">\r\n\t\t\t\t<Bit Name=\"LLI\" Authority=\"RW\" Bits=\"31-2\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C7Control\" Authority=\"RW\" Address=\"0x4000780C\" Width=\"32\" Description=\"DMA_C7Control.\">\r\n\t\t\t\t<Bit Name=\"I\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"Prot\" Authority=\"RW\" Bits=\"30-28\" />\r\n\t\t\t\t<Bit Name=\"DI\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"SI\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"fix_cnt\" Authority=\"RW\" Bits=\"24-23\" />\r\n\t\t\t\t<Bit Name=\"DWidth\" Authority=\"RW\" Bits=\"23-21\" />\r\n\t\t\t\t<Bit Name=\"SWidth\" Authority=\"RW\" Bits=\"20-18\" />\r\n\t\t\t\t<Bit Name=\"dst_add_mode\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"DBSize\" Authority=\"RW\" Bits=\"16-15\" />\r\n\t\t\t\t<Bit Name=\"dst_min_mode\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"SBSize\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"TransferSize\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"DMA_C7Config\" Authority=\"RW\" Address=\"0x40007810\" Width=\"32\" Description=\"DMA_C7Config.\">\r\n\t\t\t\t<Bit Name=\"H\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"A\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"L\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"ITC\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"IE\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"FlowCntrl\" Authority=\"RW\" Bits=\"13-11\" />\r\n\t\t\t\t<Bit Name=\"DstPeripheral\" Authority=\"RW\" Bits=\"10-6\" />\r\n\t\t\t\t<Bit Name=\"SrcPeripheral\" Authority=\"RW\" Bits=\"5-1\" />\r\n\t\t\t\t<Bit Name=\"E\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"emac\">\r\n\t\t\t<Register Name=\"MODE\" Authority=\"RW\" Address=\"0x4000D000\" Width=\"32\" Description=\"MODE.\">\r\n\t\t\t\t<Bit Name=\"rsvd_23_18\" Authority=\"RW\" Bits=\"23-18\" />\r\n\t\t\t\t<Bit Name=\"RMII_EN\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"RECSMALL\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"PAD\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"HUGEN\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"CRCEN\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"rsvd_12_11\" Authority=\"RW\" Bits=\"12-11\" />\r\n\t\t\t\t<Bit Name=\"FULLD\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"rsvd_9_7\" Authority=\"RW\" Bits=\"9-7\" />\r\n\t\t\t\t<Bit Name=\"IFG\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"PRO\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"rsvd_4\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"BRO\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"NOPRE\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"TXEN\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"RXEN\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"INT_SOURCE\" Authority=\"RW\" Address=\"0x4000D004\" Width=\"32\" Description=\"INT_SOURCE.\">\r\n\t\t\t\t<Bit Name=\"RXC\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"TXC\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"BUSY\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"RXE\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"RXB\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"TXE\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"TXB\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"INT_MASK\" Authority=\"RW\" Address=\"0x4000D008\" Width=\"32\" Description=\"INT_MASK.\">\r\n\t\t\t\t<Bit Name=\"RXC_M\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"TXC_M\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"BUSY_M\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"RXE_M\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"RXB_M\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"TXE_M\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"TXB_M\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"IPGT\" Authority=\"RW\" Address=\"0x4000D00C\" Width=\"32\" Description=\"IPGT.\">\r\n\t\t\t\t<Bit Name=\"IPGT\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"PACKETLEN\" Authority=\"RW\" Address=\"0x4000D018\" Width=\"32\" Description=\"PACKETLEN.\">\r\n\t\t\t\t<Bit Name=\"MINFL\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"MAXFL\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"COLLCONFIG\" Authority=\"RW\" Address=\"0x4000D01C\" Width=\"32\" Description=\"COLLCONFIG.\">\r\n\t\t\t\t<Bit Name=\"MAXRET\" Authority=\"RW\" Bits=\"19-16\" />\r\n\t\t\t\t<Bit Name=\"COLLVALID\" Authority=\"RW\" Bits=\"5-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TX_BD_NUM\" Authority=\"RW\" Address=\"0x4000D020\" Width=\"32\" Description=\"TX_BD_NUM.\">\r\n\t\t\t\t<Bit Name=\"RXBDPTR\" Authority=\"RW\" Bits=\"30-24\" />\r\n\t\t\t\t<Bit Name=\"TXBDPTR\" Authority=\"RW\" Bits=\"22-16\" />\r\n\t\t\t\t<Bit Name=\"TXBDNUM\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"MIIMODE\" Authority=\"RW\" Address=\"0x4000D028\" Width=\"32\" Description=\"MIIMODE.\">\r\n\t\t\t\t<Bit Name=\"MIINOPRE\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"CLKDIV\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"MIICOMMAND\" Authority=\"RW\" Address=\"0x4000Dx2C\" Width=\"32\" Description=\"MIICOMMAND.\">\r\n\t\t\t\t<Bit Name=\"WCTRLDATA\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"RSTAT\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"SCANSTAT\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"MIIADDRESS\" Authority=\"RW\" Address=\"0x4000D030\" Width=\"32\" Description=\"MIIADDRESS.\">\r\n\t\t\t\t<Bit Name=\"RGAD\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"FIAD\" Authority=\"RW\" Bits=\"4-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"MIITX_DATA\" Authority=\"RW\" Address=\"0x4000D034\" Width=\"32\" Description=\"MIITX_DATA.\">\r\n\t\t\t\t<Bit Name=\"CTRLDATA\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"MIIRX_DATA\" Authority=\"RW\" Address=\"0x4000D038\" Width=\"32\" Description=\"MIIRX_DATA.\">\r\n\t\t\t\t<Bit Name=\"PRSD\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"MIISTATUS\" Authority=\"RW\" Address=\"0x4000Dx3C\" Width=\"32\" Description=\"MIISTATUS.\">\r\n\t\t\t\t<Bit Name=\"MIIM_BUSY\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"MIIM_LINKFAIL\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"MAC_ADDR0\" Authority=\"RW\" Address=\"0x4000D040\" Width=\"32\" Description=\"MAC_ADDR0.\">\r\n\t\t\t\t<Bit Name=\"MAC_B2\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"MAC_B3\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"MAC_B4\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t\t<Bit Name=\"MAC_B5\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"MAC_ADDR1\" Authority=\"RW\" Address=\"0x4000D044\" Width=\"32\" Description=\"MAC_ADDR1.\">\r\n\t\t\t\t<Bit Name=\"MAC_B0\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t\t<Bit Name=\"MAC_B1\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HASH0_ADDR\" Authority=\"RW\" Address=\"0x4000D048\" Width=\"32\" Description=\"HASH0_ADDR.\">\r\n\t\t\t\t<Bit Name=\"HASH0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HASH1_ADDR\" Authority=\"RW\" Address=\"0x4000Dx4C\" Width=\"32\" Description=\"HASH1_ADDR.\">\r\n\t\t\t\t<Bit Name=\"HASH1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"TXCTRL\" Authority=\"RW\" Address=\"0x4000D050\" Width=\"32\" Description=\"TXCTRL.\">\r\n\t\t\t\t<Bit Name=\"TXPAUSERQ\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"TXPAUSETV\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"usb\">\r\n\t\t\t<Register Name=\"usb_config\" Authority=\"RW\" Address=\"0x4000D000\" Width=\"32\" Description=\"usb_config.\">\r\n\t\t\t\t<Bit Name=\"sts_usb_ep0_sw_rdy\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"cr_usb_ep0_sw_rdy\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"cr_usb_ep0_sw_nack_out\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"cr_usb_ep0_sw_nack_in\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"cr_usb_ep0_sw_stall\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"cr_usb_ep0_sw_size\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"cr_usb_ep0_sw_addr\" Authority=\"RW\" Bits=\"15-9\" />\r\n\t\t\t\t<Bit Name=\"cr_usb_ep0_sw_ctrl\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"cr_usb_rom_dct_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cr_usb_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"usb_lpm_config\" Authority=\"RW\" Address=\"0x4000D004\" Width=\"32\" Description=\"usb_lpm_config.\">\r\n\t\t\t\t<Bit Name=\"sts_lpm\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"sts_lpm_attr\" Authority=\"RW\" Bits=\"30-20\" />\r\n\t\t\t\t<Bit Name=\"cr_lpm_resp\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"cr_lpm_resp_upd\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_lpm_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"usb_resume_config\" Authority=\"RW\" Address=\"0x4000D008\" Width=\"32\" Description=\"usb_resume_config.\">\r\n\t\t\t\t<Bit Name=\"cr_res_force\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"cr_res_trig\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"cr_res_width\" Authority=\"RW\" Bits=\"10-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"usb_setup_data_0\" Authority=\"RW\" Address=\"0x4000D010\" Width=\"32\" Description=\"usb_setup_data_0.\">\r\n\t\t\t\t<Bit Name=\"sts_setup_data_b3\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"sts_setup_data_b2\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"sts_setup_data_b1\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t\t<Bit Name=\"sts_setup_data_b0\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"usb_setup_data_1\" Authority=\"RW\" Address=\"0x4000D014\" Width=\"32\" Description=\"usb_setup_data_1.\">\r\n\t\t\t\t<Bit Name=\"sts_setup_data_b7\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"sts_setup_data_b6\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"sts_setup_data_b5\" Authority=\"RW\" Bits=\"15-8\" />\r\n\t\t\t\t<Bit Name=\"sts_setup_data_b4\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"usb_frame_no\" Authority=\"RW\" Address=\"0x4000D018\" Width=\"32\" Description=\"usb_frame_no.\">\r\n\t\t\t\t<Bit Name=\"sts_ep_no\" Authority=\"RW\" Bits=\"19-16\" />\r\n\t\t\t\t<Bit Name=\"sts_pid\" Authority=\"RW\" Bits=\"15-12\" />\r\n\t\t\t\t<Bit Name=\"sts_frame_no\" Authority=\"RW\" Bits=\"10-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"usb_error\" Authority=\"RW\" Address=\"0x4000D01C\" Width=\"32\" Description=\"usb_error.\">\r\n\t\t\t\t<Bit Name=\"crc16_err\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"crc5_err\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"pid_cks_err\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"pid_seq_err\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"ivld_ep_err\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"xfer_to_err\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"utmi_rx_err\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"usb_int_en\" Authority=\"RW\" Address=\"0x4000D020\" Width=\"32\" Description=\"USB interrupt enable\">\r\n\t\t\t\t<Bit Name=\"cr_usb_err_en\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"cr_sof_3ms_en\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"cr_lpm_pkt_en\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"cr_lpm_wkup_en\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"rsvd_27_24\" Authority=\"RW\" Bits=\"27-24\" />\r\n\t\t\t\t<Bit Name=\"cr_ep7_done_en\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"cr_ep7_cmd_en\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"cr_ep6_done_en\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"cr_ep6_cmd_en\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"cr_ep5_done_en\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"cr_ep5_cmd_en\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"cr_ep4_done_en\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"cr_ep4_cmd_en\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_ep3_done_en\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"cr_ep3_cmd_en\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"cr_ep2_done_en\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"cr_ep2_cmd_en\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"cr_ep1_done_en\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"cr_ep1_cmd_en\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_out_done_en\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_out_cmd_en\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_in_done_en\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_in_cmd_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_setup_done_en\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_setup_cmd_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cr_get_dct_cmd_en\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cr_vbus_tgl_en\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_usb_reset_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_sof_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"usb_int_sts\" Authority=\"RW\" Address=\"0x4000D024\" Width=\"32\" Description=\"USB interrupt status\">\r\n\t\t\t\t<Bit Name=\"usb_err_int\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"sof_3ms_int\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"lpm_pkt_int\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"lpm_wkup_int\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"rsvd_27_24\" Authority=\"RW\" Bits=\"27-24\" />\r\n\t\t\t\t<Bit Name=\"ep7_done_int\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"ep7_cmd_int\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"ep6_done_int\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"ep6_cmd_int\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"ep5_done_int\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"ep5_cmd_int\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"ep4_done_int\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"ep4_cmd_int\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"ep3_done_int\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"ep3_cmd_int\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"ep2_done_int\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"ep2_cmd_int\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"ep1_done_int\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"ep1_cmd_int\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"ep0_out_done_int\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"ep0_out_cmd_int\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"ep0_in_done_int\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"ep0_in_cmd_int\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"ep0_setup_done_int\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"ep0_setup_cmd_int\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"get_dct_cmd_int\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"vbus_tgl_int\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"usb_reset_int\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"sof_int\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"usb_int_mask\" Authority=\"RW\" Address=\"0x4000D028\" Width=\"32\" Description=\"USB interrupt mask\">\r\n\t\t\t\t<Bit Name=\"cr_usb_err_mask\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"cr_sof_3ms_mask\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"cr_lpm_pkt_mask\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"cr_lpm_wkup_mask\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"rsvd_27_24\" Authority=\"RW\" Bits=\"27-24\" />\r\n\t\t\t\t<Bit Name=\"cr_ep7_done_mask\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"cr_ep7_cmd_mask\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"cr_ep6_done_mask\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"cr_ep6_cmd_mask\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"cr_ep5_done_mask\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"cr_ep5_cmd_mask\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"cr_ep4_done_mask\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"cr_ep4_cmd_mask\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_ep3_done_mask\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"cr_ep3_cmd_mask\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"cr_ep2_done_mask\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"cr_ep2_cmd_mask\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"cr_ep1_done_mask\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"cr_ep1_cmd_mask\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_out_done_mask\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_out_cmd_mask\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_in_done_mask\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_in_cmd_mask\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_setup_done_mask\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_setup_cmd_mask\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cr_get_dct_cmd_mask\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cr_vbus_tgl_mask\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_usb_reset_mask\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_sof_mask\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"usb_int_clear\" Authority=\"RW\" Address=\"0x4000Dx2C\" Width=\"32\" Description=\"USB interrupt clear\">\r\n\t\t\t\t<Bit Name=\"cr_usb_err_clr\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"cr_sof_3ms_clr\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"cr_lpm_pkt_clr\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"cr_lpm_wkup_clr\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"rsvd_27_24\" Authority=\"RW\" Bits=\"27-24\" />\r\n\t\t\t\t<Bit Name=\"cr_ep7_done_clr\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"cr_ep7_cmd_clr\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"cr_ep6_done_clr\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"cr_ep6_cmd_clr\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"cr_ep5_done_clr\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"cr_ep5_cmd_clr\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"cr_ep4_done_clr\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"cr_ep4_cmd_clr\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_ep3_done_clr\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"cr_ep3_cmd_clr\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"cr_ep2_done_clr\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"cr_ep2_cmd_clr\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"cr_ep1_done_clr\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"cr_ep1_cmd_clr\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_out_done_clr\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_out_cmd_clr\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_in_done_clr\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_in_cmd_clr\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_setup_done_clr\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"cr_ep0_setup_cmd_clr\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cr_get_dct_cmd_clr\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cr_vbus_tgl_clr\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_usb_reset_clr\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_sof_clr\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep1_config\" Authority=\"RW\" Address=\"0x4000D040\" Width=\"32\" Description=\"ep1_config.\">\r\n\t\t\t\t<Bit Name=\"sts_ep1_rdy\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"cr_ep1_rdy\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"cr_ep1_nack\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"cr_ep1_stall\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_ep1_type\" Authority=\"RW\" Bits=\"15-13\" />\r\n\t\t\t\t<Bit Name=\"cr_ep1_dir\" Authority=\"RW\" Bits=\"12-11\" />\r\n\t\t\t\t<Bit Name=\"cr_ep1_size\" Authority=\"RW\" Bits=\"10-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep2_config\" Authority=\"RW\" Address=\"0x4000D044\" Width=\"32\" Description=\"ep2_config.\">\r\n\t\t\t\t<Bit Name=\"sts_ep2_rdy\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"cr_ep2_rdy\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"cr_ep2_nack\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"cr_ep2_stall\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_ep2_type\" Authority=\"RW\" Bits=\"15-13\" />\r\n\t\t\t\t<Bit Name=\"cr_ep2_dir\" Authority=\"RW\" Bits=\"12-11\" />\r\n\t\t\t\t<Bit Name=\"cr_ep2_size\" Authority=\"RW\" Bits=\"10-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep3_config\" Authority=\"RW\" Address=\"0x4000D048\" Width=\"32\" Description=\"ep3_config.\">\r\n\t\t\t\t<Bit Name=\"sts_ep3_rdy\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"cr_ep3_rdy\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"cr_ep3_nack\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"cr_ep3_stall\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_ep3_type\" Authority=\"RW\" Bits=\"15-13\" />\r\n\t\t\t\t<Bit Name=\"cr_ep3_dir\" Authority=\"RW\" Bits=\"12-11\" />\r\n\t\t\t\t<Bit Name=\"cr_ep3_size\" Authority=\"RW\" Bits=\"10-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep4_config\" Authority=\"RW\" Address=\"0x4000Dx4C\" Width=\"32\" Description=\"ep4_config.\">\r\n\t\t\t\t<Bit Name=\"sts_ep4_rdy\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"cr_ep4_rdy\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"cr_ep4_nack\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"cr_ep4_stall\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_ep4_type\" Authority=\"RW\" Bits=\"15-13\" />\r\n\t\t\t\t<Bit Name=\"cr_ep4_dir\" Authority=\"RW\" Bits=\"12-11\" />\r\n\t\t\t\t<Bit Name=\"cr_ep4_size\" Authority=\"RW\" Bits=\"10-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep5_config\" Authority=\"RW\" Address=\"0x4000D050\" Width=\"32\" Description=\"ep5_config.\">\r\n\t\t\t\t<Bit Name=\"sts_ep5_rdy\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"cr_ep5_rdy\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"cr_ep5_nack\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"cr_ep5_stall\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_ep5_type\" Authority=\"RW\" Bits=\"15-13\" />\r\n\t\t\t\t<Bit Name=\"cr_ep5_dir\" Authority=\"RW\" Bits=\"12-11\" />\r\n\t\t\t\t<Bit Name=\"cr_ep5_size\" Authority=\"RW\" Bits=\"10-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep6_config\" Authority=\"RW\" Address=\"0x4000D054\" Width=\"32\" Description=\"ep6_config.\">\r\n\t\t\t\t<Bit Name=\"sts_ep6_rdy\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"cr_ep6_rdy\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"cr_ep6_nack\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"cr_ep6_stall\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_ep6_type\" Authority=\"RW\" Bits=\"15-13\" />\r\n\t\t\t\t<Bit Name=\"cr_ep6_dir\" Authority=\"RW\" Bits=\"12-11\" />\r\n\t\t\t\t<Bit Name=\"cr_ep6_size\" Authority=\"RW\" Bits=\"10-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep7_config\" Authority=\"RW\" Address=\"0x4000D058\" Width=\"32\" Description=\"ep7_config.\">\r\n\t\t\t\t<Bit Name=\"sts_ep7_rdy\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"cr_ep7_rdy\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"cr_ep7_nack\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"cr_ep7_stall\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_ep7_type\" Authority=\"RW\" Bits=\"15-13\" />\r\n\t\t\t\t<Bit Name=\"cr_ep7_dir\" Authority=\"RW\" Bits=\"12-11\" />\r\n\t\t\t\t<Bit Name=\"cr_ep7_size\" Authority=\"RW\" Bits=\"10-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep0_fifo_config\" Authority=\"RW\" Address=\"0x4000D100\" Width=\"32\" Description=\"ep0_fifo_config.\">\r\n\t\t\t\t<Bit Name=\"ep0_rx_fifo_underflow\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"ep0_rx_fifo_overflow\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"ep0_tx_fifo_underflow\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"ep0_tx_fifo_overflow\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"ep0_rx_fifo_clr\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"ep0_tx_fifo_clr\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"ep0_dma_rx_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"ep0_dma_tx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep0_fifo_status\" Authority=\"RW\" Address=\"0x4000D104\" Width=\"32\" Description=\"ep0_fifo_status.\">\r\n\t\t\t\t<Bit Name=\"ep0_rx_fifo_full\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"ep0_rx_fifo_empty\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"ep0_rx_fifo_cnt\" Authority=\"RW\" Bits=\"22-16\" />\r\n\t\t\t\t<Bit Name=\"ep0_tx_fifo_full\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"ep0_tx_fifo_empty\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"ep0_tx_fifo_cnt\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep0_tx_fifo_wdata\" Authority=\"RW\" Address=\"0x4000D108\" Width=\"32\" Description=\"ep0_tx_fifo_wdata.\">\r\n\t\t\t\t<Bit Name=\"ep0_tx_fifo_wdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep0_rx_fifo_rdata\" Authority=\"RW\" Address=\"0x4000D10C\" Width=\"32\" Description=\"ep0_rx_fifo_rdata.\">\r\n\t\t\t\t<Bit Name=\"ep0_rx_fifo_rdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep1_fifo_config\" Authority=\"RW\" Address=\"0x4000D110\" Width=\"32\" Description=\"ep1_fifo_config.\">\r\n\t\t\t\t<Bit Name=\"ep1_rx_fifo_underflow\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"ep1_rx_fifo_overflow\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"ep1_tx_fifo_underflow\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"ep1_tx_fifo_overflow\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"ep1_rx_fifo_clr\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"ep1_tx_fifo_clr\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"ep1_dma_rx_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"ep1_dma_tx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep1_fifo_status\" Authority=\"RW\" Address=\"0x4000D114\" Width=\"32\" Description=\"ep1_fifo_status.\">\r\n\t\t\t\t<Bit Name=\"ep1_rx_fifo_full\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"ep1_rx_fifo_empty\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"ep1_rx_fifo_cnt\" Authority=\"RW\" Bits=\"22-16\" />\r\n\t\t\t\t<Bit Name=\"ep1_tx_fifo_full\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"ep1_tx_fifo_empty\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"ep1_tx_fifo_cnt\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep1_tx_fifo_wdata\" Authority=\"RW\" Address=\"0x4000D118\" Width=\"32\" Description=\"ep1_tx_fifo_wdata.\">\r\n\t\t\t\t<Bit Name=\"ep1_tx_fifo_wdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep1_rx_fifo_rdata\" Authority=\"RW\" Address=\"0x4000D11C\" Width=\"32\" Description=\"ep1_rx_fifo_rdata.\">\r\n\t\t\t\t<Bit Name=\"ep1_rx_fifo_rdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep2_fifo_config\" Authority=\"RW\" Address=\"0x4000D120\" Width=\"32\" Description=\"ep2_fifo_config.\">\r\n\t\t\t\t<Bit Name=\"ep2_rx_fifo_underflow\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"ep2_rx_fifo_overflow\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"ep2_tx_fifo_underflow\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"ep2_tx_fifo_overflow\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"ep2_rx_fifo_clr\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"ep2_tx_fifo_clr\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"ep2_dma_rx_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"ep2_dma_tx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep2_fifo_status\" Authority=\"RW\" Address=\"0x4000D124\" Width=\"32\" Description=\"ep2_fifo_status.\">\r\n\t\t\t\t<Bit Name=\"ep2_rx_fifo_full\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"ep2_rx_fifo_empty\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"ep2_rx_fifo_cnt\" Authority=\"RW\" Bits=\"22-16\" />\r\n\t\t\t\t<Bit Name=\"ep2_tx_fifo_full\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"ep2_tx_fifo_empty\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"ep2_tx_fifo_cnt\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep2_tx_fifo_wdata\" Authority=\"RW\" Address=\"0x4000D128\" Width=\"32\" Description=\"ep2_tx_fifo_wdata.\">\r\n\t\t\t\t<Bit Name=\"ep2_tx_fifo_wdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep2_rx_fifo_rdata\" Authority=\"RW\" Address=\"0x4000D12C\" Width=\"32\" Description=\"ep2_rx_fifo_rdata.\">\r\n\t\t\t\t<Bit Name=\"ep2_rx_fifo_rdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep3_fifo_config\" Authority=\"RW\" Address=\"0x4000D130\" Width=\"32\" Description=\"ep3_fifo_config.\">\r\n\t\t\t\t<Bit Name=\"ep3_rx_fifo_underflow\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"ep3_rx_fifo_overflow\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"ep3_tx_fifo_underflow\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"ep3_tx_fifo_overflow\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"ep3_rx_fifo_clr\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"ep3_tx_fifo_clr\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"ep3_dma_rx_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"ep3_dma_tx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep3_fifo_status\" Authority=\"RW\" Address=\"0x4000D134\" Width=\"32\" Description=\"ep3_fifo_status.\">\r\n\t\t\t\t<Bit Name=\"ep3_rx_fifo_full\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"ep3_rx_fifo_empty\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"ep3_rx_fifo_cnt\" Authority=\"RW\" Bits=\"22-16\" />\r\n\t\t\t\t<Bit Name=\"ep3_tx_fifo_full\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"ep3_tx_fifo_empty\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"ep3_tx_fifo_cnt\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep3_tx_fifo_wdata\" Authority=\"RW\" Address=\"0x4000D138\" Width=\"32\" Description=\"ep3_tx_fifo_wdata.\">\r\n\t\t\t\t<Bit Name=\"ep3_tx_fifo_wdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep3_rx_fifo_rdata\" Authority=\"RW\" Address=\"0x4000D13C\" Width=\"32\" Description=\"ep3_rx_fifo_rdata.\">\r\n\t\t\t\t<Bit Name=\"ep3_rx_fifo_rdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep4_fifo_config\" Authority=\"RW\" Address=\"0x4000D140\" Width=\"32\" Description=\"ep4_fifo_config.\">\r\n\t\t\t\t<Bit Name=\"ep4_rx_fifo_underflow\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"ep4_rx_fifo_overflow\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"ep4_tx_fifo_underflow\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"ep4_tx_fifo_overflow\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"ep4_rx_fifo_clr\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"ep4_tx_fifo_clr\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"ep4_dma_rx_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"ep4_dma_tx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep4_fifo_status\" Authority=\"RW\" Address=\"0x4000D144\" Width=\"32\" Description=\"ep4_fifo_status.\">\r\n\t\t\t\t<Bit Name=\"ep4_rx_fifo_full\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"ep4_rx_fifo_empty\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"ep4_rx_fifo_cnt\" Authority=\"RW\" Bits=\"22-16\" />\r\n\t\t\t\t<Bit Name=\"ep4_tx_fifo_full\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"ep4_tx_fifo_empty\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"ep4_tx_fifo_cnt\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep4_tx_fifo_wdata\" Authority=\"RW\" Address=\"0x4000D148\" Width=\"32\" Description=\"ep4_tx_fifo_wdata.\">\r\n\t\t\t\t<Bit Name=\"ep4_tx_fifo_wdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep4_rx_fifo_rdata\" Authority=\"RW\" Address=\"0x4000D14C\" Width=\"32\" Description=\"ep4_rx_fifo_rdata.\">\r\n\t\t\t\t<Bit Name=\"ep4_rx_fifo_rdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep5_fifo_config\" Authority=\"RW\" Address=\"0x4000D150\" Width=\"32\" Description=\"ep5_fifo_config.\">\r\n\t\t\t\t<Bit Name=\"ep5_rx_fifo_underflow\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"ep5_rx_fifo_overflow\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"ep5_tx_fifo_underflow\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"ep5_tx_fifo_overflow\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"ep5_rx_fifo_clr\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"ep5_tx_fifo_clr\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"ep5_dma_rx_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"ep5_dma_tx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep5_fifo_status\" Authority=\"RW\" Address=\"0x4000D154\" Width=\"32\" Description=\"ep5_fifo_status.\">\r\n\t\t\t\t<Bit Name=\"ep5_rx_fifo_full\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"ep5_rx_fifo_empty\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"ep5_rx_fifo_cnt\" Authority=\"RW\" Bits=\"22-16\" />\r\n\t\t\t\t<Bit Name=\"ep5_tx_fifo_full\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"ep5_tx_fifo_empty\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"ep5_tx_fifo_cnt\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep5_tx_fifo_wdata\" Authority=\"RW\" Address=\"0x4000D158\" Width=\"32\" Description=\"ep5_tx_fifo_wdata.\">\r\n\t\t\t\t<Bit Name=\"ep5_tx_fifo_wdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep5_rx_fifo_rdata\" Authority=\"RW\" Address=\"0x4000D15C\" Width=\"32\" Description=\"ep5_rx_fifo_rdata.\">\r\n\t\t\t\t<Bit Name=\"ep5_rx_fifo_rdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep6_fifo_config\" Authority=\"RW\" Address=\"0x4000D160\" Width=\"32\" Description=\"ep6_fifo_config.\">\r\n\t\t\t\t<Bit Name=\"ep6_rx_fifo_underflow\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"ep6_rx_fifo_overflow\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"ep6_tx_fifo_underflow\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"ep6_tx_fifo_overflow\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"ep6_rx_fifo_clr\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"ep6_tx_fifo_clr\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"ep6_dma_rx_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"ep6_dma_tx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep6_fifo_status\" Authority=\"RW\" Address=\"0x4000D164\" Width=\"32\" Description=\"ep6_fifo_status.\">\r\n\t\t\t\t<Bit Name=\"ep6_rx_fifo_full\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"ep6_rx_fifo_empty\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"ep6_rx_fifo_cnt\" Authority=\"RW\" Bits=\"22-16\" />\r\n\t\t\t\t<Bit Name=\"ep6_tx_fifo_full\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"ep6_tx_fifo_empty\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"ep6_tx_fifo_cnt\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep6_tx_fifo_wdata\" Authority=\"RW\" Address=\"0x4000D168\" Width=\"32\" Description=\"ep6_tx_fifo_wdata.\">\r\n\t\t\t\t<Bit Name=\"ep6_tx_fifo_wdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep6_rx_fifo_rdata\" Authority=\"RW\" Address=\"0x4000D16C\" Width=\"32\" Description=\"ep6_rx_fifo_rdata.\">\r\n\t\t\t\t<Bit Name=\"ep6_rx_fifo_rdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep7_fifo_config\" Authority=\"RW\" Address=\"0x4000D170\" Width=\"32\" Description=\"ep7_fifo_config.\">\r\n\t\t\t\t<Bit Name=\"ep7_rx_fifo_underflow\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"ep7_rx_fifo_overflow\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"ep7_tx_fifo_underflow\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"ep7_tx_fifo_overflow\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"ep7_rx_fifo_clr\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"ep7_tx_fifo_clr\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"ep7_dma_rx_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"ep7_dma_tx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep7_fifo_status\" Authority=\"RW\" Address=\"0x4000D174\" Width=\"32\" Description=\"ep7_fifo_status.\">\r\n\t\t\t\t<Bit Name=\"ep7_rx_fifo_full\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"ep7_rx_fifo_empty\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"ep7_rx_fifo_cnt\" Authority=\"RW\" Bits=\"22-16\" />\r\n\t\t\t\t<Bit Name=\"ep7_tx_fifo_full\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"ep7_tx_fifo_empty\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"ep7_tx_fifo_cnt\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep7_tx_fifo_wdata\" Authority=\"RW\" Address=\"0x4000D178\" Width=\"32\" Description=\"ep7_tx_fifo_wdata.\">\r\n\t\t\t\t<Bit Name=\"ep7_tx_fifo_wdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ep7_rx_fifo_rdata\" Authority=\"RW\" Address=\"0x4000D17C\" Width=\"32\" Description=\"ep7_rx_fifo_rdata.\">\r\n\t\t\t\t<Bit Name=\"ep7_rx_fifo_rdata\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"rsvd_0\" Authority=\"RW\" Address=\"0x4000D1F0\" Width=\"32\" Description=\"rsvd_0.\">\r\n\t\t\t\t<Bit Name=\"rsvd_0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"rsvd_1\" Authority=\"RW\" Address=\"0x4000D1F4\" Width=\"32\" Description=\"rsvd_1.\">\r\n\t\t\t\t<Bit Name=\"rsvd_1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"xcvr_if_config\" Authority=\"RW\" Address=\"0x4000D1FC\" Width=\"32\" Description=\"xcvr_if_config.\">\r\n\t\t\t\t<Bit Name=\"sts_vbus_det\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"cr_xcvr_om_rx_dn\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"cr_xcvr_om_rx_dp\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"cr_xcvr_om_rx_d\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"cr_xcvr_om_rx_sel\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"cr_xcvr_force_rx_dn\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"cr_xcvr_force_rx_dp\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"cr_xcvr_force_rx_d\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"cr_xcvr_force_rx_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cr_xcvr_force_tx_dn\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cr_xcvr_force_tx_dp\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_xcvr_force_tx_oe\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_xcvr_force_tx_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"pds\">\r\n\t\t\t<Register Name=\"PDS_CTL\" Authority=\"RW\" Address=\"0x4000E000\" Width=\"32\" Description=\"PDS_CTL.\">\r\n\t\t\t\t<Bit Name=\"cr_pds_ctrl_pll\" Authority=\"RW\" Bits=\"31-30\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_ctrl_rf\" Authority=\"RW\" Bits=\"29-28\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_ldo_vol\" Authority=\"RW\" Bits=\"27-24\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_ram_clk_en\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_pd_ldo11\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"cr_np_wfi_mask\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_ram_lp_with_clk_en\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_ldo_vsel_en\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_rc32m_off_dis\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_rst_soc_en\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_soc_enb_force_on\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_pd_xtal\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_pwr_off\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_wait_xtal_rdy\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_iso_en\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"cr_sw_pu_flash\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_mem_stby\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_gate_clk\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_ctrl_pu_flash\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_ctrl_gpio_ie_pu_pd\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_pd_bg_sys\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_pd_dcdc18\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cr_wifi_pds_save_state\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cr_xtal_force_off\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_sleep_forever\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"pds_start_ps\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"PDS_TIME1\" Authority=\"RW\" Address=\"0x4000E004\" Width=\"32\" Description=\"PDS_TIME1.\">\r\n\t\t\t\t<Bit Name=\"cr_sleep_duration\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"PDS_INT\" Authority=\"RW\" Address=\"0x4000E00C\" Width=\"32\" Description=\"PDS_INT.\">\r\n\t\t\t\t<Bit Name=\"ro_pds_wakeup_event\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_wakeup_src_en\" Authority=\"RW\" Bits=\"23-16\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_int_clr\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_pll_done_int_mask\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_rf_done_int_mask\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_wake_int_mask\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"pds_clr_reset_event\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"pds_reset_event\" Authority=\"RW\" Bits=\"6-4\" />\r\n\t\t\t\t<Bit Name=\"ro_pds_pll_done_int\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"ro_pds_rf_done_int\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"ro_pds_wake_int\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"PDS_CTL2\" Authority=\"RW\" Address=\"0x4000E010\" Width=\"32\" Description=\"PDS_CTL2.\">\r\n\t\t\t\t<Bit Name=\"cr_pds_force_usb_gate_clk\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_bz_gate_clk\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_np_gate_clk\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_usb_mem_stby\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_bz_mem_stby\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_np_mem_stby\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_usb_pds_rst\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_bz_pds_rst\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_np_pds_rst\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_usb_iso_en\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_bz_iso_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_np_iso_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_usb_pwr_off\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_bz_pwr_off\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_np_pwr_off\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"PDS_CTL3\" Authority=\"RW\" Address=\"0x4000E014\" Width=\"32\" Description=\"PDS_CTL3.\">\r\n\t\t\t\t<Bit Name=\"cr_pds_misc_iso_en\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_usb_iso_en\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_ble_iso_en\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_bz_iso_en\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_np_iso_en\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_ble_gate_clk\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_misc_gate_clk\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_ble_mem_stby\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_misc_mem_stby\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_ble_pds_rst\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_misc_pds_rst\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_ble_iso_en\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_ble_pwr_off\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_force_misc_pwr_off\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"PDS_CTL4\" Authority=\"RW\" Address=\"0x4000E018\" Width=\"32\" Description=\"PDS_CTL4.\">\r\n\t\t\t\t<Bit Name=\"cr_pds_misc_dig_pwr_off\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_misc_ana_pwr_off\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_misc_gate_clk\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_misc_mem_stby\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_misc_reset\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_misc_pwr_off\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_usb_gate_clk\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_usb_mem_stby\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_usb_reset\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_usb_pwr_off\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_ble_gate_clk\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_ble_mem_stby\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_ble_reset\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_ble_pwr_off\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_bz_gate_clk\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_bz_mem_stby\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_bz_reset\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_bz_pwr_off\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_np_gate_clk\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_np_mem_stby\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_np_reset\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_np_pwr_off\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pds_stat\" Authority=\"RW\" Address=\"0x4000E01C\" Width=\"32\" Description=\"pds_stat.\">\r\n\t\t\t\t<Bit Name=\"ro_pds_pll_state\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"ro_pds_rf_state\" Authority=\"RW\" Bits=\"11-8\" />\r\n\t\t\t\t<Bit Name=\"ro_pds_state\" Authority=\"RW\" Bits=\"3-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pds_ram1\" Authority=\"RW\" Address=\"0x4000E020\" Width=\"32\" Description=\"pds_ram1.\">\r\n\t\t\t\t<Bit Name=\"cr_pds_ram_pgen\" Authority=\"RW\" Bits=\"11-8\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_ram_ret2n\" Authority=\"RW\" Bits=\"7-4\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_ram_ret1n\" Authority=\"RW\" Bits=\"3-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pds_gpio_set_pu_pd\" Authority=\"RW\" Address=\"0x4000E030\" Width=\"32\" Description=\"pds_gpio_set_pu_pd.\">\r\n\t\t\t\t<Bit Name=\"cr_pds_gpio_28_23_pu\" Authority=\"RW\" Bits=\"29-24\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_gpio_28_23_pd\" Authority=\"RW\" Bits=\"21-16\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_gpio_22_17_pu\" Authority=\"RW\" Bits=\"13-8\" />\r\n\t\t\t\t<Bit Name=\"cr_pds_gpio_22_17_pd\" Authority=\"RW\" Bits=\"5-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pds_gpio_int\" Authority=\"RW\" Address=\"0x4000E040\" Width=\"32\" Description=\"pds_gpio_int.\">\r\n\t\t\t\t<Bit Name=\"pds_gpio_int_select\" Authority=\"RW\" Bits=\"10-8\" />\r\n\t\t\t\t<Bit Name=\"pds_gpio_int_mode\" Authority=\"RW\" Bits=\"6-4\" />\r\n\t\t\t\t<Bit Name=\"pds_gpio_int_clr\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"pds_gpio_int_stat\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"pds_gpio_int_mask\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"rc32m_ctrl0\" Authority=\"RW\" Address=\"0x4000E300\" Width=\"32\" Description=\"rc32m_ctrl0.\">\r\n\t\t\t\t<Bit Name=\"rc32m_code_fr_ext\" Authority=\"RW\" Bits=\"29-22\" />\r\n\t\t\t\t<Bit Name=\"rc32m_pd\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"rc32m_cal_en\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"rc32m_ext_code_en\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"rc32m_refclk_half\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"rc32m_allow_cal\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"rc32m_dig_code_fr_cal\" Authority=\"RW\" Bits=\"13-6\" />\r\n\t\t\t\t<Bit Name=\"rc32m_cal_precharge\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"rc32m_cal_div\" Authority=\"RW\" Bits=\"4-3\" />\r\n\t\t\t\t<Bit Name=\"rc32m_cal_inprogress\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"rc32m_rdy\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"rc32m_cal_done\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"rc32m_ctrl1\" Authority=\"RW\" Address=\"0x4000E304\" Width=\"32\" Description=\"rc32m_ctrl1.\">\r\n\t\t\t\t<Bit Name=\"rc32m_reserved\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"rc32m_clk_force_on\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"rc32m_clk_inv\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"rc32m_clk_soft_rst\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"rc32m_soft_rst\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"rc32m_test_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"pu_rst_clkpll\" Authority=\"RW\" Address=\"0x4000E400\" Width=\"32\" Description=\"pu_rst_clkpll.\">\r\n\t\t\t\t<Bit Name=\"pu_clkpll\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"pu_clkpll_sfreg\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"clkpll_pu_cp\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"clkpll_pu_pfd\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"clkpll_pu_clamp_op\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"clkpll_pu_fbdv\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"clkpll_pu_postdiv\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"clkpll_reset_refdiv\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"clkpll_reset_fbdv\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"clkpll_reset_postdiv\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"clkpll_sdm_reset\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"clkpll_top_ctrl\" Authority=\"RW\" Address=\"0x4000E404\" Width=\"32\" Description=\"clkpll_top_ctrl.\">\r\n\t\t\t\t<Bit Name=\"clkpll_resv\" Authority=\"RW\" Bits=\"25-24\" />\r\n\t\t\t\t<Bit Name=\"clkpll_vg11_sel\" Authority=\"RW\" Bits=\"21-20\" />\r\n\t\t\t\t<Bit Name=\"clkpll_refclk_sel\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"clkpll_xtal_rc32m_sel\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"clkpll_refdiv_ratio\" Authority=\"RW\" Bits=\"11-8\" />\r\n\t\t\t\t<Bit Name=\"clkpll_postdiv\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"clkpll_cp\" Authority=\"RW\" Address=\"0x4000E408\" Width=\"32\" Description=\"clkpll_cp.\">\r\n\t\t\t\t<Bit Name=\"clkpll_cp_opamp_en\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"clkpll_cp_startup_en\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"clkpll_int_frac_sw\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"clkpll_icp_1u\" Authority=\"RW\" Bits=\"7-6\" />\r\n\t\t\t\t<Bit Name=\"clkpll_icp_5u\" Authority=\"RW\" Bits=\"5-4\" />\r\n\t\t\t\t<Bit Name=\"clkpll_sel_cp_bias\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"clkpll_rz\" Authority=\"RW\" Address=\"0x4000E40C\" Width=\"32\" Description=\"clkpll_rz.\">\r\n\t\t\t\t<Bit Name=\"clkpll_rz\" Authority=\"RW\" Bits=\"18-16\" />\r\n\t\t\t\t<Bit Name=\"clkpll_cz\" Authority=\"RW\" Bits=\"15-14\" />\r\n\t\t\t\t<Bit Name=\"clkpll_c3\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"clkpll_r4_short\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"clkpll_r4\" Authority=\"RW\" Bits=\"5-4\" />\r\n\t\t\t\t<Bit Name=\"clkpll_c4_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"clkpll_fbdv\" Authority=\"RW\" Address=\"0x4000E410\" Width=\"32\" Description=\"clkpll_fbdv.\">\r\n\t\t\t\t<Bit Name=\"clkpll_sel_fb_clk\" Authority=\"RW\" Bits=\"3-2\" />\r\n\t\t\t\t<Bit Name=\"clkpll_sel_sample_clk\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"clkpll_vco\" Authority=\"RW\" Address=\"0x4000E414\" Width=\"32\" Description=\"clkpll_vco.\">\r\n\t\t\t\t<Bit Name=\"clkpll_shrtr\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"clkpll_vco_speed\" Authority=\"RW\" Bits=\"2-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"clkpll_sdm\" Authority=\"RW\" Address=\"0x4000E418\" Width=\"32\" Description=\"clkpll_sdm.\">\r\n\t\t\t\t<Bit Name=\"clkpll_sdm_bypass\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"clkpll_sdm_flag\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"clkpll_dither_sel\" Authority=\"RW\" Bits=\"25-24\" />\r\n\t\t\t\t<Bit Name=\"clkpll_sdmin\" Authority=\"RW\" Bits=\"23-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"clkpll_output_en\" Authority=\"RW\" Address=\"0x4000E41C\" Width=\"32\" Description=\"clkpll_output_en.\">\r\n\t\t\t\t<Bit Name=\"clkpll_en_div2_480m\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"clkpll_en_32m\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"clkpll_en_48m\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"clkpll_en_80m\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"clkpll_en_96m\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"clkpll_en_120m\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"clkpll_en_160m\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"clkpll_en_192m\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"clkpll_en_240m\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"clkpll_en_480m\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"clkpll_test_enable\" Authority=\"RW\" Address=\"0x4000E420\" Width=\"32\" Description=\"clkpll_test_enable.\">\r\n\t\t\t\t<Bit Name=\"clkpll_dc_tp_out_en\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"ten_clkpll\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"ten_clkpll_sfreg\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"dten_clkpll_fin\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"dten_clkpll_fref\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"dten_clkpll_fsdm\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"dten_clk32M\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"dten_clk96M\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"dten_clkpll_postdiv_clk\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"hbn\">\r\n\t\t\t<Register Name=\"HBN_CTL\" Authority=\"RW\" Address=\"0x4000F000\" Width=\"32\" Description=\"HBN_CTL.\">\r\n\t\t\t\t<Bit Name=\"hbn_state\" Authority=\"RW\" Bits=\"31-28\" />\r\n\t\t\t\t<Bit Name=\"sram_slp\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"sram_slp_option\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"pwr_on_option\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"rtc_dly_option\" Authority=\"RW\" Bits=\"24\" />\r\n\t\t\t\t<Bit Name=\"pu_dcdc18_aon\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"hbn_ldo11_aon_vout_sel\" Authority=\"RW\" Bits=\"22-19\" />\r\n\t\t\t\t<Bit Name=\"hbn_ldo11_rt_vout_sel\" Authority=\"RW\" Bits=\"18-15\" />\r\n\t\t\t\t<Bit Name=\"hbn_dis_pwr_off_ldo11_rt\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"hbn_dis_pwr_off_ldo11\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"sw_rst\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"pwrdn_hbn_rtc\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"pwrdn_hbn_core\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"trap_mode\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"hbn_mode\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"rtc_ctl\" Authority=\"RW\" Bits=\"6-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HBN_TIME_L\" Authority=\"RW\" Address=\"0x4000F004\" Width=\"32\" Description=\"HBN_TIME_L.\">\r\n\t\t\t\t<Bit Name=\"hbn_time_l\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HBN_TIME_H\" Authority=\"RW\" Address=\"0x4000F008\" Width=\"32\" Description=\"HBN_TIME_H.\">\r\n\t\t\t\t<Bit Name=\"hbn_time_h\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"RTC_TIME_L\" Authority=\"RW\" Address=\"0x4000F00C\" Width=\"32\" Description=\"RTC_TIME_L.\">\r\n\t\t\t\t<Bit Name=\"rtc_time_latch_l\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"RTC_TIME_H\" Authority=\"RW\" Address=\"0x4000F010\" Width=\"32\" Description=\"RTC_TIME_H.\">\r\n\t\t\t\t<Bit Name=\"rtc_time_latch\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"rtc_time_latch_h\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HBN_IRQ_MODE\" Authority=\"RW\" Address=\"0x4000F014\" Width=\"32\" Description=\"HBN_IRQ_MODE.\">\r\n\t\t\t\t<Bit Name=\"pin_wakeup_en\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"pin_wakeup_sel\" Authority=\"RW\" Bits=\"26-24\" />\r\n\t\t\t\t<Bit Name=\"irq_acomp1_en\" Authority=\"RW\" Bits=\"23-22\" />\r\n\t\t\t\t<Bit Name=\"irq_acomp0_en\" Authority=\"RW\" Bits=\"21-20\" />\r\n\t\t\t\t<Bit Name=\"irq_bor_en\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"reg_en_hw_pu_pd\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"reg_aon_pad_ie_smt\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"hbn_pin_wakeup_mask\" Authority=\"RW\" Bits=\"7-3\" />\r\n\t\t\t\t<Bit Name=\"hbn_pin_wakeup_mode\" Authority=\"RW\" Bits=\"2-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HBN_IRQ_STAT\" Authority=\"RW\" Address=\"0x4000F018\" Width=\"32\" Description=\"HBN_IRQ_STAT.\">\r\n\t\t\t\t<Bit Name=\"irq_stat\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HBN_IRQ_CLR\" Authority=\"RW\" Address=\"0x4000F01C\" Width=\"32\" Description=\"HBN_IRQ_CLR.\">\r\n\t\t\t\t<Bit Name=\"irq_clr\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HBN_PIR_CFG\" Authority=\"RW\" Address=\"0x4000F020\" Width=\"32\" Description=\"HBN_PIR_CFG.\">\r\n\t\t\t\t<Bit Name=\"gpadc_nosync\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"gpadc_cgen\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"pir_en\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"pir_dis\" Authority=\"RW\" Bits=\"5-4\" />\r\n\t\t\t\t<Bit Name=\"pir_lpf_sel\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"pir_hpf_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HBN_PIR_VTH\" Authority=\"RW\" Address=\"0x4000F024\" Width=\"32\" Description=\"HBN_PIR_VTH.\">\r\n\t\t\t\t<Bit Name=\"pir_vth\" Authority=\"RW\" Bits=\"13-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HBN_PIR_INTERVAL\" Authority=\"RW\" Address=\"0x4000F028\" Width=\"32\" Description=\"HBN_PIR_INTERVAL.\">\r\n\t\t\t\t<Bit Name=\"pir_interval\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HBN_MISC\" Authority=\"RW\" Address=\"0x4000Fx2C\" Width=\"32\" Description=\"HBN_MISC.\">\r\n\t\t\t\t<Bit Name=\"hbn_flash_pulldown_aon\" Authority=\"RW\" Bits=\"29-24\" />\r\n\t\t\t\t<Bit Name=\"hbn_flash_pullup_aon\" Authority=\"RW\" Bits=\"21-16\" />\r\n\t\t\t\t<Bit Name=\"r_bor_out\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"pu_bor\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"bor_vth\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"bor_sel\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HBN_GLB\" Authority=\"RW\" Address=\"0x4000F030\" Width=\"32\" Description=\"HBN_GLB.\">\r\n\t\t\t\t<Bit Name=\"sw_ldo11_aon_vout_sel\" Authority=\"RW\" Bits=\"31-28\" />\r\n\t\t\t\t<Bit Name=\"sw_ldo11_rt_vout_sel\" Authority=\"RW\" Bits=\"27-24\" />\r\n\t\t\t\t<Bit Name=\"sw_ldo11soc_vout_sel_aon\" Authority=\"RW\" Bits=\"19-16\" />\r\n\t\t\t\t<Bit Name=\"hbn_clear_reset_event\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"hbn_reset_event\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"ldo11_rt_iload_sel\" Authority=\"RW\" Bits=\"7-6\" />\r\n\t\t\t\t<Bit Name=\"hbn_pu_rc32k\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"hbn_f32k_sel\" Authority=\"RW\" Bits=\"4-3\" />\r\n\t\t\t\t<Bit Name=\"hbn_uart_clk_sel\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"hbn_root_clk_sel\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HBN_SRAM\" Authority=\"RW\" Address=\"0x4000F034\" Width=\"32\" Description=\"HBN_SRAM.\">\r\n\t\t\t\t<Bit Name=\"retram_slp\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"retram_ret\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"retram_emaw\" Authority=\"RW\" Bits=\"4-3\" />\r\n\t\t\t\t<Bit Name=\"retram_ema\" Authority=\"RW\" Bits=\"2-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HBN_RSV0\" Authority=\"RW\" Address=\"0x4000F100\" Width=\"32\" Description=\"HBN_RSV0.\">\r\n\t\t\t\t<Bit Name=\"HBN_RSV0\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HBN_RSV1\" Authority=\"RW\" Address=\"0x4000F104\" Width=\"32\" Description=\"HBN_RSV1.\">\r\n\t\t\t\t<Bit Name=\"HBN_RSV1\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HBN_RSV2\" Authority=\"RW\" Address=\"0x4000F108\" Width=\"32\" Description=\"HBN_RSV2.\">\r\n\t\t\t\t<Bit Name=\"HBN_RSV2\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"HBN_RSV3\" Authority=\"RW\" Address=\"0x4000F10C\" Width=\"32\" Description=\"HBN_RSV3.\">\r\n\t\t\t\t<Bit Name=\"HBN_RSV3\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"rc32k_ctrl0\" Authority=\"RW\" Address=\"0x4000F200\" Width=\"32\" Description=\"rc32k_ctrl0.\">\r\n\t\t\t\t<Bit Name=\"rc32k_code_fr_ext\" Authority=\"RW\" Bits=\"31-22\" />\r\n\t\t\t\t<Bit Name=\"rc32k_cal_en\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"rc32k_ext_code_en\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"rc32k_allow_cal\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"rc32k_vref_dly\" Authority=\"RW\" Bits=\"17-16\" />\r\n\t\t\t\t<Bit Name=\"rc32k_dig_code_fr_cal\" Authority=\"RW\" Bits=\"15-6\" />\r\n\t\t\t\t<Bit Name=\"rc32k_cal_precharge\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"rc32k_cal_div\" Authority=\"RW\" Bits=\"4-3\" />\r\n\t\t\t\t<Bit Name=\"rc32k_cal_inprogress\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"rc32k_rdy\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"rc32k_cal_done\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"xtal32k\" Authority=\"RW\" Address=\"0x4000F204\" Width=\"32\" Description=\"xtal32k.\">\r\n\t\t\t\t<Bit Name=\"pu_xtal32k\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"pu_xtal32k_buf\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"xtal32k_ac_cap_short\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"xtal32k_capbank\" Authority=\"RW\" Bits=\"16-11\" />\r\n\t\t\t\t<Bit Name=\"xtal32k_inv_stre\" Authority=\"RW\" Bits=\"10-9\" />\r\n\t\t\t\t<Bit Name=\"xtal32k_otf_short\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"xtal32k_outbuf_stre\" Authority=\"RW\" Bits=\"7\" />\r\n\t\t\t\t<Bit Name=\"xtal32k_reg\" Authority=\"RW\" Bits=\"6-5\" />\r\n\t\t\t\t<Bit Name=\"xtal32k_amp_ctrl\" Authority=\"RW\" Bits=\"4-3\" />\r\n\t\t\t\t<Bit Name=\"xtal32k_ext_sel\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"xtal32k_lowv_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"xtal32k_hiz_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t\t<Peripheral Name=\"aon\">\r\n\t\t\t<Register Name=\"aon\" Authority=\"RW\" Address=\"0x4000F800\" Width=\"32\" Description=\"aon.\">\r\n\t\t\t\t<Bit Name=\"sw_pu_ldo11_rt\" Authority=\"RW\" Bits=\"22\" />\r\n\t\t\t\t<Bit Name=\"ldo11_rt_pulldown_sel\" Authority=\"RW\" Bits=\"21\" />\r\n\t\t\t\t<Bit Name=\"ldo11_rt_pulldown\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"pu_aon_dc_tbuf\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"aon_resv\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"aon_common\" Authority=\"RW\" Address=\"0x4000F804\" Width=\"32\" Description=\"aon_common.\">\r\n\t\t\t\t<Bit Name=\"ten_cip_misc_aon\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"ten_mbg_aon\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"dten_xtal_aon\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"ten_xtal_aon\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"ten_ldo15rf_aon\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"ten_bg_sys_aon\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"ten_dcdc18_1_aon\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"ten_dcdc18_0_aon\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"ten_ldo11soc_aon\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"ten_vddcore_aon\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"ten_xtal32k\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"dten_xtal32k\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"ten_aon\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"tmux_aon\" Authority=\"RW\" Bits=\"2-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"aon_misc\" Authority=\"RW\" Address=\"0x4000F808\" Width=\"32\" Description=\"aon_misc.\">\r\n\t\t\t\t<Bit Name=\"sw_bz_en_aon\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"sw_soc_en_aon\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"bg_sys_top\" Authority=\"RW\" Address=\"0x4000F810\" Width=\"32\" Description=\"bg_sys_top.\">\r\n\t\t\t\t<Bit Name=\"bg_sys_start_ctrl_aon\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"pu_bg_sys_aon\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"pmip_resv\" Authority=\"RW\" Bits=\"7-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"dcdc18_top_0\" Authority=\"RW\" Address=\"0x4000F814\" Width=\"32\" Description=\"dcdc18_top_0.\">\r\n\t\t\t\t<Bit Name=\"dcdc18_rdy_aon\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_sstart_time_aon\" Authority=\"RW\" Bits=\"29-28\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_osc_inhibit_t2_aon\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_slow_osc_aon\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_stop_osc_aon\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_slope_curr_sel_aon\" Authority=\"RW\" Bits=\"24-20\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_osc_freq_trim_aon\" Authority=\"RW\" Bits=\"19-16\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_osc_2m_mode_aon\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_vpfm_aon\" Authority=\"RW\" Bits=\"11-8\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_vout_sel_aon\" Authority=\"RW\" Bits=\"5-1\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"dcdc18_top_1\" Authority=\"RW\" Address=\"0x4000F818\" Width=\"32\" Description=\"dcdc18_top_1.\">\r\n\t\t\t\t<Bit Name=\"dcdc18_pulldown_aon\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_en_antiring_aon\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_cfb_sel_aon\" Authority=\"RW\" Bits=\"27-24\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_chf_sel_aon\" Authority=\"RW\" Bits=\"23-20\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_rc_sel_aon\" Authority=\"RW\" Bits=\"19-16\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_nonoverlap_td_aon\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_zvs_td_opt_aon\" Authority=\"RW\" Bits=\"6-4\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_cs_delay_aon\" Authority=\"RW\" Bits=\"3-1\" />\r\n\t\t\t\t<Bit Name=\"dcdc18_force_cs_zvs_aon\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"ldo11soc_and_dctest\" Authority=\"RW\" Address=\"0x4000F81C\" Width=\"32\" Description=\"ldo11soc_and_dctest.\">\r\n\t\t\t\t<Bit Name=\"pmip_dc_tp_out_en_aon\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"pu_vddcore_misc_aon\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"ldo11soc_power_good_aon\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"ldo11soc_rdy_aon\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"ldo11soc_cc_aon\" Authority=\"RW\" Bits=\"25-24\" />\r\n\t\t\t\t<Bit Name=\"ldo11soc_vth_sel_aon\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"ldo11soc_pulldown_sel_aon\" Authority=\"RW\" Bits=\"11\" />\r\n\t\t\t\t<Bit Name=\"ldo11soc_pulldown_aon\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"ldo11soc_sstart_delay_aon\" Authority=\"RW\" Bits=\"9-8\" />\r\n\t\t\t\t<Bit Name=\"ldo11soc_sstart_sel_aon\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"pu_ldo11soc_aon\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"psw_irrcv\" Authority=\"RW\" Address=\"0x4000F820\" Width=\"32\" Description=\"psw_irrcv.\">\r\n\t\t\t\t<Bit Name=\"pu_ir_psw_aon\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"rf_top_aon\" Authority=\"RW\" Address=\"0x4000F880\" Width=\"32\" Description=\"rf_top_aon.\">\r\n\t\t\t\t<Bit Name=\"ldo15rf_bypass_aon\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"ldo15rf_cc_aon\" Authority=\"RW\" Bits=\"25-24\" />\r\n\t\t\t\t<Bit Name=\"ldo15rf_vout_sel_aon\" Authority=\"RW\" Bits=\"18-16\" />\r\n\t\t\t\t<Bit Name=\"ldo15rf_pulldown_sel_aon\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"ldo15rf_pulldown_aon\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"ldo15rf_sstart_delay_aon\" Authority=\"RW\" Bits=\"10-9\" />\r\n\t\t\t\t<Bit Name=\"ldo15rf_sstart_sel_aon\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"pu_xtal_aon\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"pu_xtal_buf_aon\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"pu_sfreg_aon\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"pu_ldo15rf_aon\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"pu_mbg_aon\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"xtal_cfg\" Authority=\"RW\" Address=\"0x4000F884\" Width=\"32\" Description=\"xtal_cfg.\">\r\n\t\t\t\t<Bit Name=\"xtal_rdy_sel_aon\" Authority=\"RW\" Bits=\"31-30\" />\r\n\t\t\t\t<Bit Name=\"xtal_gm_boost_aon\" Authority=\"RW\" Bits=\"29-28\" />\r\n\t\t\t\t<Bit Name=\"xtal_capcode_in_aon\" Authority=\"RW\" Bits=\"27-22\" />\r\n\t\t\t\t<Bit Name=\"xtal_capcode_out_aon\" Authority=\"RW\" Bits=\"21-16\" />\r\n\t\t\t\t<Bit Name=\"xtal_amp_ctrl_aon\" Authority=\"RW\" Bits=\"15-14\" />\r\n\t\t\t\t<Bit Name=\"xtal_sleep_aon\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"xtal_fast_startup_aon\" Authority=\"RW\" Bits=\"12\" />\r\n\t\t\t\t<Bit Name=\"xtal_buf_hp_aon\" Authority=\"RW\" Bits=\"11-8\" />\r\n\t\t\t\t<Bit Name=\"xtal_buf_en_aon\" Authority=\"RW\" Bits=\"7-4\" />\r\n\t\t\t\t<Bit Name=\"xtal_ext_sel_aon\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"xtal_capcode_extra_aon\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"xtal_bk_aon\" Authority=\"RW\" Bits=\"1-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"tsen\" Authority=\"RW\" Address=\"0x4000F888\" Width=\"32\" Description=\"tsen.\">\r\n\t\t\t\t<Bit Name=\"xtal_rdy_int_sel_aon\" Authority=\"RW\" Bits=\"31-30\" />\r\n\t\t\t\t<Bit Name=\"xtal_inn_cfg_en_aon\" Authority=\"RW\" Bits=\"29\" />\r\n\t\t\t\t<Bit Name=\"xtal_rdy\" Authority=\"RW\" Bits=\"28\" />\r\n\t\t\t\t<Bit Name=\"tsen_refcode_rfcal\" Authority=\"RW\" Bits=\"27-16\" />\r\n\t\t\t\t<Bit Name=\"tsen_refcode_corner\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"acomp0_ctrl\" Authority=\"RW\" Address=\"0x4000F900\" Width=\"32\" Description=\"acomp0_ctrl.\">\r\n\t\t\t\t<Bit Name=\"acomp0_muxen\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"acomp0_pos_sel\" Authority=\"RW\" Bits=\"25-22\" />\r\n\t\t\t\t<Bit Name=\"acomp0_neg_sel\" Authority=\"RW\" Bits=\"21-18\" />\r\n\t\t\t\t<Bit Name=\"acomp0_level_sel\" Authority=\"RW\" Bits=\"17-12\" />\r\n\t\t\t\t<Bit Name=\"acomp0_bias_prog\" Authority=\"RW\" Bits=\"11-10\" />\r\n\t\t\t\t<Bit Name=\"acomp0_hyst_selp\" Authority=\"RW\" Bits=\"9-7\" />\r\n\t\t\t\t<Bit Name=\"acomp0_hyst_seln\" Authority=\"RW\" Bits=\"6-4\" />\r\n\t\t\t\t<Bit Name=\"acomp0_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"acomp1_ctrl\" Authority=\"RW\" Address=\"0x4000F904\" Width=\"32\" Description=\"acomp1_ctrl.\">\r\n\t\t\t\t<Bit Name=\"acomp1_muxen\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"acomp1_pos_sel\" Authority=\"RW\" Bits=\"25-22\" />\r\n\t\t\t\t<Bit Name=\"acomp1_neg_sel\" Authority=\"RW\" Bits=\"21-18\" />\r\n\t\t\t\t<Bit Name=\"acomp1_level_sel\" Authority=\"RW\" Bits=\"17-12\" />\r\n\t\t\t\t<Bit Name=\"acomp1_bias_prog\" Authority=\"RW\" Bits=\"11-10\" />\r\n\t\t\t\t<Bit Name=\"acomp1_hyst_selp\" Authority=\"RW\" Bits=\"9-7\" />\r\n\t\t\t\t<Bit Name=\"acomp1_hyst_seln\" Authority=\"RW\" Bits=\"6-4\" />\r\n\t\t\t\t<Bit Name=\"acomp1_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"acomp_ctrl\" Authority=\"RW\" Address=\"0x4000F908\" Width=\"32\" Description=\"acomp_ctrl.\">\r\n\t\t\t\t<Bit Name=\"acomp_reserved\" Authority=\"RW\" Bits=\"31-24\" />\r\n\t\t\t\t<Bit Name=\"acomp0_out_raw\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"acomp1_out_raw\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"acomp0_test_sel\" Authority=\"RW\" Bits=\"13-12\" />\r\n\t\t\t\t<Bit Name=\"acomp1_test_sel\" Authority=\"RW\" Bits=\"11-10\" />\r\n\t\t\t\t<Bit Name=\"acomp0_test_en\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"acomp1_test_en\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"acomp0_rstn_ana\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"acomp1_rstn_ana\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpadc_reg_cmd\" Authority=\"RW\" Address=\"0x4000F90C\" Width=\"32\" Description=\"gpadc_reg_cmd.\">\r\n\t\t\t\t<Bit Name=\"gpadc_sen_test_en\" Authority=\"RW\" Bits=\"30\" />\r\n\t\t\t\t<Bit Name=\"gpadc_sen_sel\" Authority=\"RW\" Bits=\"29-28\" />\r\n\t\t\t\t<Bit Name=\"gpadc_chip_sen_pu\" Authority=\"RW\" Bits=\"27\" />\r\n\t\t\t\t<Bit Name=\"gpadc_micboost_32db_en\" Authority=\"RW\" Bits=\"23\" />\r\n\t\t\t\t<Bit Name=\"gpadc_mic_pga2_gain\" Authority=\"RW\" Bits=\"22-21\" />\r\n\t\t\t\t<Bit Name=\"gpadc_mic1_diff\" Authority=\"RW\" Bits=\"20\" />\r\n\t\t\t\t<Bit Name=\"gpadc_mic2_diff\" Authority=\"RW\" Bits=\"19\" />\r\n\t\t\t\t<Bit Name=\"gpadc_dwa_en\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"gpadc_byp_micboost\" Authority=\"RW\" Bits=\"16\" />\r\n\t\t\t\t<Bit Name=\"gpadc_micpga_en\" Authority=\"RW\" Bits=\"15\" />\r\n\t\t\t\t<Bit Name=\"gpadc_micbias_en\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"gpadc_neg_gnd\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"gpadc_pos_sel\" Authority=\"RW\" Bits=\"12-8\" />\r\n\t\t\t\t<Bit Name=\"gpadc_neg_sel\" Authority=\"RW\" Bits=\"7-3\" />\r\n\t\t\t\t<Bit Name=\"gpadc_soft_rst\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t\t<Bit Name=\"gpadc_conv_start\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"gpadc_global_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpadc_reg_config1\" Authority=\"RW\" Address=\"0x4000F910\" Width=\"32\" Description=\"gpadc_reg_config1.\">\r\n\t\t\t\t<Bit Name=\"gpadc_v18_sel\" Authority=\"RW\" Bits=\"30-29\" />\r\n\t\t\t\t<Bit Name=\"gpadc_v11_sel\" Authority=\"RW\" Bits=\"28-27\" />\r\n\t\t\t\t<Bit Name=\"gpadc_dither_en\" Authority=\"RW\" Bits=\"26\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_en\" Authority=\"RW\" Bits=\"25\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_length\" Authority=\"RW\" Bits=\"24-21\" />\r\n\t\t\t\t<Bit Name=\"gpadc_clk_div_ratio\" Authority=\"RW\" Bits=\"20-18\" />\r\n\t\t\t\t<Bit Name=\"gpadc_clk_ana_inv\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"gpadc_lowv_det_en\" Authority=\"RW\" Bits=\"10\" />\r\n\t\t\t\t<Bit Name=\"gpadc_vcm_hyst_sel\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"gpadc_vcm_sel_en\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"gpadc_res_sel\" Authority=\"RW\" Bits=\"4-2\" />\r\n\t\t\t\t<Bit Name=\"gpadc_cont_conv_en\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"gpadc_cal_os_en\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpadc_reg_config2\" Authority=\"RW\" Address=\"0x4000F914\" Width=\"32\" Description=\"gpadc_reg_config2.\">\r\n\t\t\t\t<Bit Name=\"gpadc_tsvbe_low\" Authority=\"RW\" Bits=\"31\" />\r\n\t\t\t\t<Bit Name=\"gpadc_dly_sel\" Authority=\"RW\" Bits=\"30-28\" />\r\n\t\t\t\t<Bit Name=\"gpadc_pga1_gain\" Authority=\"RW\" Bits=\"27-25\" />\r\n\t\t\t\t<Bit Name=\"gpadc_pga2_gain\" Authority=\"RW\" Bits=\"24-22\" />\r\n\t\t\t\t<Bit Name=\"gpadc_test_sel\" Authority=\"RW\" Bits=\"21-19\" />\r\n\t\t\t\t<Bit Name=\"gpadc_test_en\" Authority=\"RW\" Bits=\"18\" />\r\n\t\t\t\t<Bit Name=\"gpadc_bias_sel\" Authority=\"RW\" Bits=\"17\" />\r\n\t\t\t\t<Bit Name=\"gpadc_chop_mode\" Authority=\"RW\" Bits=\"16-15\" />\r\n\t\t\t\t<Bit Name=\"gpadc_pga_vcmi_en\" Authority=\"RW\" Bits=\"14\" />\r\n\t\t\t\t<Bit Name=\"gpadc_pga_en\" Authority=\"RW\" Bits=\"13\" />\r\n\t\t\t\t<Bit Name=\"gpadc_pga_os_cal\" Authority=\"RW\" Bits=\"12-9\" />\r\n\t\t\t\t<Bit Name=\"gpadc_pga_vcm\" Authority=\"RW\" Bits=\"8-7\" />\r\n\t\t\t\t<Bit Name=\"gpadc_ts_en\" Authority=\"RW\" Bits=\"6\" />\r\n\t\t\t\t<Bit Name=\"gpadc_tsext_sel\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"gpadc_vbat_en\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"gpadc_vref_sel\" Authority=\"RW\" Bits=\"3\" />\r\n\t\t\t\t<Bit Name=\"gpadc_diff_mode\" Authority=\"RW\" Bits=\"2\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpadc_reg_scn_pos1\" Authority=\"RW\" Address=\"0x4000F918\" Width=\"32\" Description=\"adc converation sequence 1\">\r\n\t\t\t\t<Bit Name=\"gpadc_scan_pos_5\" Authority=\"RW\" Bits=\"29-25\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_pos_4\" Authority=\"RW\" Bits=\"24-20\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_pos_3\" Authority=\"RW\" Bits=\"19-15\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_pos_2\" Authority=\"RW\" Bits=\"14-10\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_pos_1\" Authority=\"RW\" Bits=\"9-5\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_pos_0\" Authority=\"RW\" Bits=\"4-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpadc_reg_scn_pos2\" Authority=\"RW\" Address=\"0x4000F91C\" Width=\"32\" Description=\"adc converation sequence 2\">\r\n\t\t\t\t<Bit Name=\"gpadc_scan_pos_11\" Authority=\"RW\" Bits=\"29-25\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_pos_10\" Authority=\"RW\" Bits=\"24-20\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_pos_9\" Authority=\"RW\" Bits=\"19-15\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_pos_8\" Authority=\"RW\" Bits=\"14-10\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_pos_7\" Authority=\"RW\" Bits=\"9-5\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_pos_6\" Authority=\"RW\" Bits=\"4-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpadc_reg_scn_neg1\" Authority=\"RW\" Address=\"0x4000F920\" Width=\"32\" Description=\"adc converation sequence 3\">\r\n\t\t\t\t<Bit Name=\"gpadc_scan_neg_5\" Authority=\"RW\" Bits=\"29-25\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_neg_4\" Authority=\"RW\" Bits=\"24-20\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_neg_3\" Authority=\"RW\" Bits=\"19-15\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_neg_2\" Authority=\"RW\" Bits=\"14-10\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_neg_1\" Authority=\"RW\" Bits=\"9-5\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_neg_0\" Authority=\"RW\" Bits=\"4-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpadc_reg_scn_neg2\" Authority=\"RW\" Address=\"0x4000F924\" Width=\"32\" Description=\"adc converation sequence 4\">\r\n\t\t\t\t<Bit Name=\"gpadc_scan_neg_11\" Authority=\"RW\" Bits=\"29-25\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_neg_10\" Authority=\"RW\" Bits=\"24-20\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_neg_9\" Authority=\"RW\" Bits=\"19-15\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_neg_8\" Authority=\"RW\" Bits=\"14-10\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_neg_7\" Authority=\"RW\" Bits=\"9-5\" />\r\n\t\t\t\t<Bit Name=\"gpadc_scan_neg_6\" Authority=\"RW\" Bits=\"4-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpadc_reg_status\" Authority=\"RW\" Address=\"0x4000F928\" Width=\"32\" Description=\"gpadc_reg_status.\">\r\n\t\t\t\t<Bit Name=\"gpadc_reserved\" Authority=\"RW\" Bits=\"31-16\" />\r\n\t\t\t\t<Bit Name=\"gpadc_data_rdy\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpadc_reg_isr\" Authority=\"RW\" Address=\"0x4000F92C\" Width=\"32\" Description=\"gpadc_reg_isr.\">\r\n\t\t\t\t<Bit Name=\"gpadc_pos_satur_mask\" Authority=\"RW\" Bits=\"9\" />\r\n\t\t\t\t<Bit Name=\"gpadc_neg_satur_mask\" Authority=\"RW\" Bits=\"8\" />\r\n\t\t\t\t<Bit Name=\"gpadc_pos_satur_clr\" Authority=\"RW\" Bits=\"5\" />\r\n\t\t\t\t<Bit Name=\"gpadc_neg_satur_clr\" Authority=\"RW\" Bits=\"4\" />\r\n\t\t\t\t<Bit Name=\"gpadc_pos_satur\" Authority=\"RW\" Bits=\"1\" />\r\n\t\t\t\t<Bit Name=\"gpadc_neg_satur\" Authority=\"RW\" Bits=\"0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpadc_reg_result\" Authority=\"RW\" Address=\"0x4000F930\" Width=\"32\" Description=\"gpadc_reg_result.\">\r\n\t\t\t\t<Bit Name=\"gpadc_data_out\" Authority=\"RW\" Bits=\"25-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpadc_reg_raw_result\" Authority=\"RW\" Address=\"0x4000F934\" Width=\"32\" Description=\"gpadc_reg_raw_result.\">\r\n\t\t\t\t<Bit Name=\"gpadc_raw_data\" Authority=\"RW\" Bits=\"11-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"gpadc_reg_define\" Authority=\"RW\" Address=\"0x4000F938\" Width=\"32\" Description=\"gpadc_reg_define.\">\r\n\t\t\t\t<Bit Name=\"gpadc_os_cal_data\" Authority=\"RW\" Bits=\"15-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"hbncore_resv0\" Authority=\"RW\" Address=\"0x4000F93C\" Width=\"32\" Description=\"hbncore_resv0.\">\r\n\t\t\t\t<Bit Name=\"hbncore_resv0_data\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t\t<Register Name=\"hbncore_resv1\" Authority=\"RW\" Address=\"0x4000F940\" Width=\"32\" Description=\"hbncore_resv1.\">\r\n\t\t\t\t<Bit Name=\"hbncore_resv1_data\" Authority=\"RW\" Bits=\"31-0\" />\r\n\t\t\t</Register>\r\n\t\t</Peripheral>\r\n\t</config>\r\n</com.csky.cds.peripheral>"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/cam_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    cam_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __CAM_REG_H__\n#define __CAM_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : dvp2axi_configue */\n#define CAM_DVP2AXI_CONFIGUE_OFFSET (0x0)\n#define CAM_REG_DVP_ENABLE          CAM_REG_DVP_ENABLE\n#define CAM_REG_DVP_ENABLE_POS      (0U)\n#define CAM_REG_DVP_ENABLE_LEN      (1U)\n#define CAM_REG_DVP_ENABLE_MSK      (((1U << CAM_REG_DVP_ENABLE_LEN) - 1) << CAM_REG_DVP_ENABLE_POS)\n#define CAM_REG_DVP_ENABLE_UMSK     (~(((1U << CAM_REG_DVP_ENABLE_LEN) - 1) << CAM_REG_DVP_ENABLE_POS))\n#define CAM_REG_SW_MODE             CAM_REG_SW_MODE\n#define CAM_REG_SW_MODE_POS         (1U)\n#define CAM_REG_SW_MODE_LEN         (1U)\n#define CAM_REG_SW_MODE_MSK         (((1U << CAM_REG_SW_MODE_LEN) - 1) << CAM_REG_SW_MODE_POS)\n#define CAM_REG_SW_MODE_UMSK        (~(((1U << CAM_REG_SW_MODE_LEN) - 1) << CAM_REG_SW_MODE_POS))\n#define CAM_REG_FRAM_VLD_POL        CAM_REG_FRAM_VLD_POL\n#define CAM_REG_FRAM_VLD_POL_POS    (2U)\n#define CAM_REG_FRAM_VLD_POL_LEN    (1U)\n#define CAM_REG_FRAM_VLD_POL_MSK    (((1U << CAM_REG_FRAM_VLD_POL_LEN) - 1) << CAM_REG_FRAM_VLD_POL_POS)\n#define CAM_REG_FRAM_VLD_POL_UMSK   (~(((1U << CAM_REG_FRAM_VLD_POL_LEN) - 1) << CAM_REG_FRAM_VLD_POL_POS))\n#define CAM_REG_LINE_VLD_POL        CAM_REG_LINE_VLD_POL\n#define CAM_REG_LINE_VLD_POL_POS    (3U)\n#define CAM_REG_LINE_VLD_POL_LEN    (1U)\n#define CAM_REG_LINE_VLD_POL_MSK    (((1U << CAM_REG_LINE_VLD_POL_LEN) - 1) << CAM_REG_LINE_VLD_POL_POS)\n#define CAM_REG_LINE_VLD_POL_UMSK   (~(((1U << CAM_REG_LINE_VLD_POL_LEN) - 1) << CAM_REG_LINE_VLD_POL_POS))\n#define CAM_REG_HBURST              CAM_REG_HBURST\n#define CAM_REG_HBURST_POS          (4U)\n#define CAM_REG_HBURST_LEN          (2U)\n#define CAM_REG_HBURST_MSK          (((1U << CAM_REG_HBURST_LEN) - 1) << CAM_REG_HBURST_POS)\n#define CAM_REG_HBURST_UMSK         (~(((1U << CAM_REG_HBURST_LEN) - 1) << CAM_REG_HBURST_POS))\n#define CAM_REG_DVP_MODE            CAM_REG_DVP_MODE\n#define CAM_REG_DVP_MODE_POS        (8U)\n#define CAM_REG_DVP_MODE_LEN        (3U)\n#define CAM_REG_DVP_MODE_MSK        (((1U << CAM_REG_DVP_MODE_LEN) - 1) << CAM_REG_DVP_MODE_POS)\n#define CAM_REG_DVP_MODE_UMSK       (~(((1U << CAM_REG_DVP_MODE_LEN) - 1) << CAM_REG_DVP_MODE_POS))\n#define CAM_REG_HW_MODE_FWRAP       CAM_REG_HW_MODE_FWRAP\n#define CAM_REG_HW_MODE_FWRAP_POS   (11U)\n#define CAM_REG_HW_MODE_FWRAP_LEN   (1U)\n#define CAM_REG_HW_MODE_FWRAP_MSK   (((1U << CAM_REG_HW_MODE_FWRAP_LEN) - 1) << CAM_REG_HW_MODE_FWRAP_POS)\n#define CAM_REG_HW_MODE_FWRAP_UMSK  (~(((1U << CAM_REG_HW_MODE_FWRAP_LEN) - 1) << CAM_REG_HW_MODE_FWRAP_POS))\n#define CAM_REG_DROP_EN             CAM_REG_DROP_EN\n#define CAM_REG_DROP_EN_POS         (12U)\n#define CAM_REG_DROP_EN_LEN         (1U)\n#define CAM_REG_DROP_EN_MSK         (((1U << CAM_REG_DROP_EN_LEN) - 1) << CAM_REG_DROP_EN_POS)\n#define CAM_REG_DROP_EN_UMSK        (~(((1U << CAM_REG_DROP_EN_LEN) - 1) << CAM_REG_DROP_EN_POS))\n#define CAM_REG_DROP_EVEN           CAM_REG_DROP_EVEN\n#define CAM_REG_DROP_EVEN_POS       (13U)\n#define CAM_REG_DROP_EVEN_LEN       (1U)\n#define CAM_REG_DROP_EVEN_MSK       (((1U << CAM_REG_DROP_EVEN_LEN) - 1) << CAM_REG_DROP_EVEN_POS)\n#define CAM_REG_DROP_EVEN_UMSK      (~(((1U << CAM_REG_DROP_EVEN_LEN) - 1) << CAM_REG_DROP_EVEN_POS))\n#define CAM_REG_SUBSAMPLE_EN        CAM_REG_SUBSAMPLE_EN\n#define CAM_REG_SUBSAMPLE_EN_POS    (14U)\n#define CAM_REG_SUBSAMPLE_EN_LEN    (1U)\n#define CAM_REG_SUBSAMPLE_EN_MSK    (((1U << CAM_REG_SUBSAMPLE_EN_LEN) - 1) << CAM_REG_SUBSAMPLE_EN_POS)\n#define CAM_REG_SUBSAMPLE_EN_UMSK   (~(((1U << CAM_REG_SUBSAMPLE_EN_LEN) - 1) << CAM_REG_SUBSAMPLE_EN_POS))\n#define CAM_REG_SUBSAMPLE_EVEN      CAM_REG_SUBSAMPLE_EVEN\n#define CAM_REG_SUBSAMPLE_EVEN_POS  (15U)\n#define CAM_REG_SUBSAMPLE_EVEN_LEN  (1U)\n#define CAM_REG_SUBSAMPLE_EVEN_MSK  (((1U << CAM_REG_SUBSAMPLE_EVEN_LEN) - 1) << CAM_REG_SUBSAMPLE_EVEN_POS)\n#define CAM_REG_SUBSAMPLE_EVEN_UMSK (~(((1U << CAM_REG_SUBSAMPLE_EVEN_LEN) - 1) << CAM_REG_SUBSAMPLE_EVEN_POS))\n#define CAM_REG_INTERLV_MODE        CAM_REG_INTERLV_MODE\n#define CAM_REG_INTERLV_MODE_POS    (16U)\n#define CAM_REG_INTERLV_MODE_LEN    (1U)\n#define CAM_REG_INTERLV_MODE_MSK    (((1U << CAM_REG_INTERLV_MODE_LEN) - 1) << CAM_REG_INTERLV_MODE_POS)\n#define CAM_REG_INTERLV_MODE_UMSK   (~(((1U << CAM_REG_INTERLV_MODE_LEN) - 1) << CAM_REG_INTERLV_MODE_POS))\n#define CAM_REG_DVP_PIX_CLK_CG      CAM_REG_DVP_PIX_CLK_CG\n#define CAM_REG_DVP_PIX_CLK_CG_POS  (20U)\n#define CAM_REG_DVP_PIX_CLK_CG_LEN  (1U)\n#define CAM_REG_DVP_PIX_CLK_CG_MSK  (((1U << CAM_REG_DVP_PIX_CLK_CG_LEN) - 1) << CAM_REG_DVP_PIX_CLK_CG_POS)\n#define CAM_REG_DVP_PIX_CLK_CG_UMSK (~(((1U << CAM_REG_DVP_PIX_CLK_CG_LEN) - 1) << CAM_REG_DVP_PIX_CLK_CG_POS))\n#define CAM_REG_DVP_WAIT_CYCLE      CAM_REG_DVP_WAIT_CYCLE\n#define CAM_REG_DVP_WAIT_CYCLE_POS  (24U)\n#define CAM_REG_DVP_WAIT_CYCLE_LEN  (8U)\n#define CAM_REG_DVP_WAIT_CYCLE_MSK  (((1U << CAM_REG_DVP_WAIT_CYCLE_LEN) - 1) << CAM_REG_DVP_WAIT_CYCLE_POS)\n#define CAM_REG_DVP_WAIT_CYCLE_UMSK (~(((1U << CAM_REG_DVP_WAIT_CYCLE_LEN) - 1) << CAM_REG_DVP_WAIT_CYCLE_POS))\n\n/* 0x4 : dvp2ahb_addr_start_0 */\n#define CAM_DVP2AHB_ADDR_START_0_OFFSET (0x4)\n#define CAM_REG_ADDR_START_0            CAM_REG_ADDR_START_0\n#define CAM_REG_ADDR_START_0_POS        (0U)\n#define CAM_REG_ADDR_START_0_LEN        (32U)\n#define CAM_REG_ADDR_START_0_MSK        (((1U << CAM_REG_ADDR_START_0_LEN) - 1) << CAM_REG_ADDR_START_0_POS)\n#define CAM_REG_ADDR_START_0_UMSK       (~(((1U << CAM_REG_ADDR_START_0_LEN) - 1) << CAM_REG_ADDR_START_0_POS))\n\n/* 0x8 : dvp2ahb_mem_bcnt_0 */\n#define CAM_DVP2AHB_MEM_BCNT_0_OFFSET (0x8)\n#define CAM_REG_MEM_BURST_CNT_0       CAM_REG_MEM_BURST_CNT_0\n#define CAM_REG_MEM_BURST_CNT_0_POS   (0U)\n#define CAM_REG_MEM_BURST_CNT_0_LEN   (32U)\n#define CAM_REG_MEM_BURST_CNT_0_MSK   (((1U << CAM_REG_MEM_BURST_CNT_0_LEN) - 1) << CAM_REG_MEM_BURST_CNT_0_POS)\n#define CAM_REG_MEM_BURST_CNT_0_UMSK  (~(((1U << CAM_REG_MEM_BURST_CNT_0_LEN) - 1) << CAM_REG_MEM_BURST_CNT_0_POS))\n\n/* 0xC : dvp2ahb_frame_bcnt_0 */\n#define CAM_DVP2AHB_FRAME_BCNT_0_OFFSET (0xC)\n#define CAM_REG_FRAME_BURST_CNT_0       CAM_REG_FRAME_BURST_CNT_0\n#define CAM_REG_FRAME_BURST_CNT_0_POS   (0U)\n#define CAM_REG_FRAME_BURST_CNT_0_LEN   (32U)\n#define CAM_REG_FRAME_BURST_CNT_0_MSK   (((1U << CAM_REG_FRAME_BURST_CNT_0_LEN) - 1) << CAM_REG_FRAME_BURST_CNT_0_POS)\n#define CAM_REG_FRAME_BURST_CNT_0_UMSK  (~(((1U << CAM_REG_FRAME_BURST_CNT_0_LEN) - 1) << CAM_REG_FRAME_BURST_CNT_0_POS))\n\n/* 0x10 : dvp2ahb_addr_start_1 */\n#define CAM_DVP2AHB_ADDR_START_1_OFFSET (0x10)\n#define CAM_REG_ADDR_START_1            CAM_REG_ADDR_START_1\n#define CAM_REG_ADDR_START_1_POS        (0U)\n#define CAM_REG_ADDR_START_1_LEN        (32U)\n#define CAM_REG_ADDR_START_1_MSK        (((1U << CAM_REG_ADDR_START_1_LEN) - 1) << CAM_REG_ADDR_START_1_POS)\n#define CAM_REG_ADDR_START_1_UMSK       (~(((1U << CAM_REG_ADDR_START_1_LEN) - 1) << CAM_REG_ADDR_START_1_POS))\n\n/* 0x14 : dvp2ahb_mem_bcnt_1 */\n#define CAM_DVP2AHB_MEM_BCNT_1_OFFSET (0x14)\n#define CAM_REG_MEM_BURST_CNT_1       CAM_REG_MEM_BURST_CNT_1\n#define CAM_REG_MEM_BURST_CNT_1_POS   (0U)\n#define CAM_REG_MEM_BURST_CNT_1_LEN   (32U)\n#define CAM_REG_MEM_BURST_CNT_1_MSK   (((1U << CAM_REG_MEM_BURST_CNT_1_LEN) - 1) << CAM_REG_MEM_BURST_CNT_1_POS)\n#define CAM_REG_MEM_BURST_CNT_1_UMSK  (~(((1U << CAM_REG_MEM_BURST_CNT_1_LEN) - 1) << CAM_REG_MEM_BURST_CNT_1_POS))\n\n/* 0x18 : dvp2ahb_frame_bcnt_1 */\n#define CAM_DVP2AHB_FRAME_BCNT_1_OFFSET (0x18)\n#define CAM_REG_FRAME_BURST_CNT_1       CAM_REG_FRAME_BURST_CNT_1\n#define CAM_REG_FRAME_BURST_CNT_1_POS   (0U)\n#define CAM_REG_FRAME_BURST_CNT_1_LEN   (32U)\n#define CAM_REG_FRAME_BURST_CNT_1_MSK   (((1U << CAM_REG_FRAME_BURST_CNT_1_LEN) - 1) << CAM_REG_FRAME_BURST_CNT_1_POS)\n#define CAM_REG_FRAME_BURST_CNT_1_UMSK  (~(((1U << CAM_REG_FRAME_BURST_CNT_1_LEN) - 1) << CAM_REG_FRAME_BURST_CNT_1_POS))\n\n/* 0x1C : dvp_status_and_error */\n#define CAM_DVP_STATUS_AND_ERROR_OFFSET (0x1C)\n#define CAM_STS_NORMAL_INT_0            CAM_STS_NORMAL_INT_0\n#define CAM_STS_NORMAL_INT_0_POS        (0U)\n#define CAM_STS_NORMAL_INT_0_LEN        (1U)\n#define CAM_STS_NORMAL_INT_0_MSK        (((1U << CAM_STS_NORMAL_INT_0_LEN) - 1) << CAM_STS_NORMAL_INT_0_POS)\n#define CAM_STS_NORMAL_INT_0_UMSK       (~(((1U << CAM_STS_NORMAL_INT_0_LEN) - 1) << CAM_STS_NORMAL_INT_0_POS))\n#define CAM_STS_NORMAL_INT_1            CAM_STS_NORMAL_INT_1\n#define CAM_STS_NORMAL_INT_1_POS        (1U)\n#define CAM_STS_NORMAL_INT_1_LEN        (1U)\n#define CAM_STS_NORMAL_INT_1_MSK        (((1U << CAM_STS_NORMAL_INT_1_LEN) - 1) << CAM_STS_NORMAL_INT_1_POS)\n#define CAM_STS_NORMAL_INT_1_UMSK       (~(((1U << CAM_STS_NORMAL_INT_1_LEN) - 1) << CAM_STS_NORMAL_INT_1_POS))\n#define CAM_STS_MEM_INT_0               CAM_STS_MEM_INT_0\n#define CAM_STS_MEM_INT_0_POS           (2U)\n#define CAM_STS_MEM_INT_0_LEN           (1U)\n#define CAM_STS_MEM_INT_0_MSK           (((1U << CAM_STS_MEM_INT_0_LEN) - 1) << CAM_STS_MEM_INT_0_POS)\n#define CAM_STS_MEM_INT_0_UMSK          (~(((1U << CAM_STS_MEM_INT_0_LEN) - 1) << CAM_STS_MEM_INT_0_POS))\n#define CAM_STS_MEM_INT_1               CAM_STS_MEM_INT_1\n#define CAM_STS_MEM_INT_1_POS           (3U)\n#define CAM_STS_MEM_INT_1_LEN           (1U)\n#define CAM_STS_MEM_INT_1_MSK           (((1U << CAM_STS_MEM_INT_1_LEN) - 1) << CAM_STS_MEM_INT_1_POS)\n#define CAM_STS_MEM_INT_1_UMSK          (~(((1U << CAM_STS_MEM_INT_1_LEN) - 1) << CAM_STS_MEM_INT_1_POS))\n#define CAM_STS_FRAME_INT_0             CAM_STS_FRAME_INT_0\n#define CAM_STS_FRAME_INT_0_POS         (4U)\n#define CAM_STS_FRAME_INT_0_LEN         (1U)\n#define CAM_STS_FRAME_INT_0_MSK         (((1U << CAM_STS_FRAME_INT_0_LEN) - 1) << CAM_STS_FRAME_INT_0_POS)\n#define CAM_STS_FRAME_INT_0_UMSK        (~(((1U << CAM_STS_FRAME_INT_0_LEN) - 1) << CAM_STS_FRAME_INT_0_POS))\n#define CAM_STS_FRAME_INT_1             CAM_STS_FRAME_INT_1\n#define CAM_STS_FRAME_INT_1_POS         (5U)\n#define CAM_STS_FRAME_INT_1_LEN         (1U)\n#define CAM_STS_FRAME_INT_1_MSK         (((1U << CAM_STS_FRAME_INT_1_LEN) - 1) << CAM_STS_FRAME_INT_1_POS)\n#define CAM_STS_FRAME_INT_1_UMSK        (~(((1U << CAM_STS_FRAME_INT_1_LEN) - 1) << CAM_STS_FRAME_INT_1_POS))\n#define CAM_STS_FIFO_INT_0              CAM_STS_FIFO_INT_0\n#define CAM_STS_FIFO_INT_0_POS          (6U)\n#define CAM_STS_FIFO_INT_0_LEN          (1U)\n#define CAM_STS_FIFO_INT_0_MSK          (((1U << CAM_STS_FIFO_INT_0_LEN) - 1) << CAM_STS_FIFO_INT_0_POS)\n#define CAM_STS_FIFO_INT_0_UMSK         (~(((1U << CAM_STS_FIFO_INT_0_LEN) - 1) << CAM_STS_FIFO_INT_0_POS))\n#define CAM_STS_FIFO_INT_1              CAM_STS_FIFO_INT_1\n#define CAM_STS_FIFO_INT_1_POS          (7U)\n#define CAM_STS_FIFO_INT_1_LEN          (1U)\n#define CAM_STS_FIFO_INT_1_MSK          (((1U << CAM_STS_FIFO_INT_1_LEN) - 1) << CAM_STS_FIFO_INT_1_POS)\n#define CAM_STS_FIFO_INT_1_UMSK         (~(((1U << CAM_STS_FIFO_INT_1_LEN) - 1) << CAM_STS_FIFO_INT_1_POS))\n#define CAM_STS_HCNT_INT                CAM_STS_HCNT_INT\n#define CAM_STS_HCNT_INT_POS            (8U)\n#define CAM_STS_HCNT_INT_LEN            (1U)\n#define CAM_STS_HCNT_INT_MSK            (((1U << CAM_STS_HCNT_INT_LEN) - 1) << CAM_STS_HCNT_INT_POS)\n#define CAM_STS_HCNT_INT_UMSK           (~(((1U << CAM_STS_HCNT_INT_LEN) - 1) << CAM_STS_HCNT_INT_POS))\n#define CAM_STS_VCNT_INT                CAM_STS_VCNT_INT\n#define CAM_STS_VCNT_INT_POS            (9U)\n#define CAM_STS_VCNT_INT_LEN            (1U)\n#define CAM_STS_VCNT_INT_MSK            (((1U << CAM_STS_VCNT_INT_LEN) - 1) << CAM_STS_VCNT_INT_POS)\n#define CAM_STS_VCNT_INT_UMSK           (~(((1U << CAM_STS_VCNT_INT_LEN) - 1) << CAM_STS_VCNT_INT_POS))\n#define CAM_AHB_IDLE_0                  CAM_AHB_IDLE_0\n#define CAM_AHB_IDLE_0_POS              (16U)\n#define CAM_AHB_IDLE_0_LEN              (1U)\n#define CAM_AHB_IDLE_0_MSK              (((1U << CAM_AHB_IDLE_0_LEN) - 1) << CAM_AHB_IDLE_0_POS)\n#define CAM_AHB_IDLE_0_UMSK             (~(((1U << CAM_AHB_IDLE_0_LEN) - 1) << CAM_AHB_IDLE_0_POS))\n#define CAM_AHB_IDLE_1                  CAM_AHB_IDLE_1\n#define CAM_AHB_IDLE_1_POS              (17U)\n#define CAM_AHB_IDLE_1_LEN              (1U)\n#define CAM_AHB_IDLE_1_MSK              (((1U << CAM_AHB_IDLE_1_LEN) - 1) << CAM_AHB_IDLE_1_POS)\n#define CAM_AHB_IDLE_1_UMSK             (~(((1U << CAM_AHB_IDLE_1_LEN) - 1) << CAM_AHB_IDLE_1_POS))\n#define CAM_ST_DVP_IDLE                 CAM_ST_DVP_IDLE\n#define CAM_ST_DVP_IDLE_POS             (19U)\n#define CAM_ST_DVP_IDLE_LEN             (1U)\n#define CAM_ST_DVP_IDLE_MSK             (((1U << CAM_ST_DVP_IDLE_LEN) - 1) << CAM_ST_DVP_IDLE_POS)\n#define CAM_ST_DVP_IDLE_UMSK            (~(((1U << CAM_ST_DVP_IDLE_LEN) - 1) << CAM_ST_DVP_IDLE_POS))\n#define CAM_FRAME_VALID_CNT_0           CAM_FRAME_VALID_CNT_0\n#define CAM_FRAME_VALID_CNT_0_POS       (20U)\n#define CAM_FRAME_VALID_CNT_0_LEN       (4U)\n#define CAM_FRAME_VALID_CNT_0_MSK       (((1U << CAM_FRAME_VALID_CNT_0_LEN) - 1) << CAM_FRAME_VALID_CNT_0_POS)\n#define CAM_FRAME_VALID_CNT_0_UMSK      (~(((1U << CAM_FRAME_VALID_CNT_0_LEN) - 1) << CAM_FRAME_VALID_CNT_0_POS))\n#define CAM_FRAME_VALID_CNT_1           CAM_FRAME_VALID_CNT_1\n#define CAM_FRAME_VALID_CNT_1_POS       (24U)\n#define CAM_FRAME_VALID_CNT_1_LEN       (4U)\n#define CAM_FRAME_VALID_CNT_1_MSK       (((1U << CAM_FRAME_VALID_CNT_1_LEN) - 1) << CAM_FRAME_VALID_CNT_1_POS)\n#define CAM_FRAME_VALID_CNT_1_UMSK      (~(((1U << CAM_FRAME_VALID_CNT_1_LEN) - 1) << CAM_FRAME_VALID_CNT_1_POS))\n#define CAM_ST_BUS_IDLE                 CAM_ST_BUS_IDLE\n#define CAM_ST_BUS_IDLE_POS             (28U)\n#define CAM_ST_BUS_IDLE_LEN             (1U)\n#define CAM_ST_BUS_IDLE_MSK             (((1U << CAM_ST_BUS_IDLE_LEN) - 1) << CAM_ST_BUS_IDLE_POS)\n#define CAM_ST_BUS_IDLE_UMSK            (~(((1U << CAM_ST_BUS_IDLE_LEN) - 1) << CAM_ST_BUS_IDLE_POS))\n#define CAM_ST_BUS_FUNC                 CAM_ST_BUS_FUNC\n#define CAM_ST_BUS_FUNC_POS             (29U)\n#define CAM_ST_BUS_FUNC_LEN             (1U)\n#define CAM_ST_BUS_FUNC_MSK             (((1U << CAM_ST_BUS_FUNC_LEN) - 1) << CAM_ST_BUS_FUNC_POS)\n#define CAM_ST_BUS_FUNC_UMSK            (~(((1U << CAM_ST_BUS_FUNC_LEN) - 1) << CAM_ST_BUS_FUNC_POS))\n#define CAM_ST_BUS_WAIT                 CAM_ST_BUS_WAIT\n#define CAM_ST_BUS_WAIT_POS             (30U)\n#define CAM_ST_BUS_WAIT_LEN             (1U)\n#define CAM_ST_BUS_WAIT_MSK             (((1U << CAM_ST_BUS_WAIT_LEN) - 1) << CAM_ST_BUS_WAIT_POS)\n#define CAM_ST_BUS_WAIT_UMSK            (~(((1U << CAM_ST_BUS_WAIT_LEN) - 1) << CAM_ST_BUS_WAIT_POS))\n#define CAM_ST_BUS_FLSH                 CAM_ST_BUS_FLSH\n#define CAM_ST_BUS_FLSH_POS             (31U)\n#define CAM_ST_BUS_FLSH_LEN             (1U)\n#define CAM_ST_BUS_FLSH_MSK             (((1U << CAM_ST_BUS_FLSH_LEN) - 1) << CAM_ST_BUS_FLSH_POS)\n#define CAM_ST_BUS_FLSH_UMSK            (~(((1U << CAM_ST_BUS_FLSH_LEN) - 1) << CAM_ST_BUS_FLSH_POS))\n\n/* 0x20 : dvp_frame_fifo_pop */\n#define CAM_DVP_FRAME_FIFO_POP_OFFSET (0x20)\n#define CAM_RFIFO_POP_0               CAM_RFIFO_POP_0\n#define CAM_RFIFO_POP_0_POS           (0U)\n#define CAM_RFIFO_POP_0_LEN           (1U)\n#define CAM_RFIFO_POP_0_MSK           (((1U << CAM_RFIFO_POP_0_LEN) - 1) << CAM_RFIFO_POP_0_POS)\n#define CAM_RFIFO_POP_0_UMSK          (~(((1U << CAM_RFIFO_POP_0_LEN) - 1) << CAM_RFIFO_POP_0_POS))\n#define CAM_RFIFO_POP_1               CAM_RFIFO_POP_1\n#define CAM_RFIFO_POP_1_POS           (1U)\n#define CAM_RFIFO_POP_1_LEN           (1U)\n#define CAM_RFIFO_POP_1_MSK           (((1U << CAM_RFIFO_POP_1_LEN) - 1) << CAM_RFIFO_POP_1_POS)\n#define CAM_RFIFO_POP_1_UMSK          (~(((1U << CAM_RFIFO_POP_1_LEN) - 1) << CAM_RFIFO_POP_1_POS))\n#define CAM_REG_INT_NORMAL_CLR_0      CAM_REG_INT_NORMAL_CLR_0\n#define CAM_REG_INT_NORMAL_CLR_0_POS  (4U)\n#define CAM_REG_INT_NORMAL_CLR_0_LEN  (1U)\n#define CAM_REG_INT_NORMAL_CLR_0_MSK  (((1U << CAM_REG_INT_NORMAL_CLR_0_LEN) - 1) << CAM_REG_INT_NORMAL_CLR_0_POS)\n#define CAM_REG_INT_NORMAL_CLR_0_UMSK (~(((1U << CAM_REG_INT_NORMAL_CLR_0_LEN) - 1) << CAM_REG_INT_NORMAL_CLR_0_POS))\n#define CAM_REG_INT_MEM_CLR_0         CAM_REG_INT_MEM_CLR_0\n#define CAM_REG_INT_MEM_CLR_0_POS     (5U)\n#define CAM_REG_INT_MEM_CLR_0_LEN     (1U)\n#define CAM_REG_INT_MEM_CLR_0_MSK     (((1U << CAM_REG_INT_MEM_CLR_0_LEN) - 1) << CAM_REG_INT_MEM_CLR_0_POS)\n#define CAM_REG_INT_MEM_CLR_0_UMSK    (~(((1U << CAM_REG_INT_MEM_CLR_0_LEN) - 1) << CAM_REG_INT_MEM_CLR_0_POS))\n#define CAM_REG_INT_FRAME_CLR_0       CAM_REG_INT_FRAME_CLR_0\n#define CAM_REG_INT_FRAME_CLR_0_POS   (6U)\n#define CAM_REG_INT_FRAME_CLR_0_LEN   (1U)\n#define CAM_REG_INT_FRAME_CLR_0_MSK   (((1U << CAM_REG_INT_FRAME_CLR_0_LEN) - 1) << CAM_REG_INT_FRAME_CLR_0_POS)\n#define CAM_REG_INT_FRAME_CLR_0_UMSK  (~(((1U << CAM_REG_INT_FRAME_CLR_0_LEN) - 1) << CAM_REG_INT_FRAME_CLR_0_POS))\n#define CAM_REG_INT_FIFO_CLR_0        CAM_REG_INT_FIFO_CLR_0\n#define CAM_REG_INT_FIFO_CLR_0_POS    (7U)\n#define CAM_REG_INT_FIFO_CLR_0_LEN    (1U)\n#define CAM_REG_INT_FIFO_CLR_0_MSK    (((1U << CAM_REG_INT_FIFO_CLR_0_LEN) - 1) << CAM_REG_INT_FIFO_CLR_0_POS)\n#define CAM_REG_INT_FIFO_CLR_0_UMSK   (~(((1U << CAM_REG_INT_FIFO_CLR_0_LEN) - 1) << CAM_REG_INT_FIFO_CLR_0_POS))\n#define CAM_REG_INT_HCNT_CLR_0        CAM_REG_INT_HCNT_CLR_0\n#define CAM_REG_INT_HCNT_CLR_0_POS    (8U)\n#define CAM_REG_INT_HCNT_CLR_0_LEN    (1U)\n#define CAM_REG_INT_HCNT_CLR_0_MSK    (((1U << CAM_REG_INT_HCNT_CLR_0_LEN) - 1) << CAM_REG_INT_HCNT_CLR_0_POS)\n#define CAM_REG_INT_HCNT_CLR_0_UMSK   (~(((1U << CAM_REG_INT_HCNT_CLR_0_LEN) - 1) << CAM_REG_INT_HCNT_CLR_0_POS))\n#define CAM_REG_INT_VCNT_CLR_0        CAM_REG_INT_VCNT_CLR_0\n#define CAM_REG_INT_VCNT_CLR_0_POS    (9U)\n#define CAM_REG_INT_VCNT_CLR_0_LEN    (1U)\n#define CAM_REG_INT_VCNT_CLR_0_MSK    (((1U << CAM_REG_INT_VCNT_CLR_0_LEN) - 1) << CAM_REG_INT_VCNT_CLR_0_POS)\n#define CAM_REG_INT_VCNT_CLR_0_UMSK   (~(((1U << CAM_REG_INT_VCNT_CLR_0_LEN) - 1) << CAM_REG_INT_VCNT_CLR_0_POS))\n#define CAM_REG_INT_NORMAL_CLR_1      CAM_REG_INT_NORMAL_CLR_1\n#define CAM_REG_INT_NORMAL_CLR_1_POS  (16U)\n#define CAM_REG_INT_NORMAL_CLR_1_LEN  (1U)\n#define CAM_REG_INT_NORMAL_CLR_1_MSK  (((1U << CAM_REG_INT_NORMAL_CLR_1_LEN) - 1) << CAM_REG_INT_NORMAL_CLR_1_POS)\n#define CAM_REG_INT_NORMAL_CLR_1_UMSK (~(((1U << CAM_REG_INT_NORMAL_CLR_1_LEN) - 1) << CAM_REG_INT_NORMAL_CLR_1_POS))\n#define CAM_REG_INT_MEM_CLR_1         CAM_REG_INT_MEM_CLR_1\n#define CAM_REG_INT_MEM_CLR_1_POS     (17U)\n#define CAM_REG_INT_MEM_CLR_1_LEN     (1U)\n#define CAM_REG_INT_MEM_CLR_1_MSK     (((1U << CAM_REG_INT_MEM_CLR_1_LEN) - 1) << CAM_REG_INT_MEM_CLR_1_POS)\n#define CAM_REG_INT_MEM_CLR_1_UMSK    (~(((1U << CAM_REG_INT_MEM_CLR_1_LEN) - 1) << CAM_REG_INT_MEM_CLR_1_POS))\n#define CAM_REG_INT_FRAME_CLR_1       CAM_REG_INT_FRAME_CLR_1\n#define CAM_REG_INT_FRAME_CLR_1_POS   (18U)\n#define CAM_REG_INT_FRAME_CLR_1_LEN   (1U)\n#define CAM_REG_INT_FRAME_CLR_1_MSK   (((1U << CAM_REG_INT_FRAME_CLR_1_LEN) - 1) << CAM_REG_INT_FRAME_CLR_1_POS)\n#define CAM_REG_INT_FRAME_CLR_1_UMSK  (~(((1U << CAM_REG_INT_FRAME_CLR_1_LEN) - 1) << CAM_REG_INT_FRAME_CLR_1_POS))\n#define CAM_REG_INT_FIFO_CLR_1        CAM_REG_INT_FIFO_CLR_1\n#define CAM_REG_INT_FIFO_CLR_1_POS    (19U)\n#define CAM_REG_INT_FIFO_CLR_1_LEN    (1U)\n#define CAM_REG_INT_FIFO_CLR_1_MSK    (((1U << CAM_REG_INT_FIFO_CLR_1_LEN) - 1) << CAM_REG_INT_FIFO_CLR_1_POS)\n#define CAM_REG_INT_FIFO_CLR_1_UMSK   (~(((1U << CAM_REG_INT_FIFO_CLR_1_LEN) - 1) << CAM_REG_INT_FIFO_CLR_1_POS))\n\n/* 0x24 : snsr_control */\n#define CAM_SNSR_CONTROL_OFFSET (0x24)\n#define CAM_REG_CAM_RST         CAM_REG_CAM_RST\n#define CAM_REG_CAM_RST_POS     (0U)\n#define CAM_REG_CAM_RST_LEN     (1U)\n#define CAM_REG_CAM_RST_MSK     (((1U << CAM_REG_CAM_RST_LEN) - 1) << CAM_REG_CAM_RST_POS)\n#define CAM_REG_CAM_RST_UMSK    (~(((1U << CAM_REG_CAM_RST_LEN) - 1) << CAM_REG_CAM_RST_POS))\n#define CAM_REG_CAM_PWDN        CAM_REG_CAM_PWDN\n#define CAM_REG_CAM_PWDN_POS    (1U)\n#define CAM_REG_CAM_PWDN_LEN    (1U)\n#define CAM_REG_CAM_PWDN_MSK    (((1U << CAM_REG_CAM_PWDN_LEN) - 1) << CAM_REG_CAM_PWDN_POS)\n#define CAM_REG_CAM_PWDN_UMSK   (~(((1U << CAM_REG_CAM_PWDN_LEN) - 1) << CAM_REG_CAM_PWDN_POS))\n\n/* 0x28 : int_control */\n#define CAM_INT_CONTROL_OFFSET          (0x28)\n#define CAM_REG_INT_NORMAL_0_EN         CAM_REG_INT_NORMAL_0_EN\n#define CAM_REG_INT_NORMAL_0_EN_POS     (0U)\n#define CAM_REG_INT_NORMAL_0_EN_LEN     (1U)\n#define CAM_REG_INT_NORMAL_0_EN_MSK     (((1U << CAM_REG_INT_NORMAL_0_EN_LEN) - 1) << CAM_REG_INT_NORMAL_0_EN_POS)\n#define CAM_REG_INT_NORMAL_0_EN_UMSK    (~(((1U << CAM_REG_INT_NORMAL_0_EN_LEN) - 1) << CAM_REG_INT_NORMAL_0_EN_POS))\n#define CAM_REG_INT_NORMAL_1_EN         CAM_REG_INT_NORMAL_1_EN\n#define CAM_REG_INT_NORMAL_1_EN_POS     (1U)\n#define CAM_REG_INT_NORMAL_1_EN_LEN     (1U)\n#define CAM_REG_INT_NORMAL_1_EN_MSK     (((1U << CAM_REG_INT_NORMAL_1_EN_LEN) - 1) << CAM_REG_INT_NORMAL_1_EN_POS)\n#define CAM_REG_INT_NORMAL_1_EN_UMSK    (~(((1U << CAM_REG_INT_NORMAL_1_EN_LEN) - 1) << CAM_REG_INT_NORMAL_1_EN_POS))\n#define CAM_REG_INT_MEM_EN              CAM_REG_INT_MEM_EN\n#define CAM_REG_INT_MEM_EN_POS          (2U)\n#define CAM_REG_INT_MEM_EN_LEN          (1U)\n#define CAM_REG_INT_MEM_EN_MSK          (((1U << CAM_REG_INT_MEM_EN_LEN) - 1) << CAM_REG_INT_MEM_EN_POS)\n#define CAM_REG_INT_MEM_EN_UMSK         (~(((1U << CAM_REG_INT_MEM_EN_LEN) - 1) << CAM_REG_INT_MEM_EN_POS))\n#define CAM_REG_INT_FRAME_EN            CAM_REG_INT_FRAME_EN\n#define CAM_REG_INT_FRAME_EN_POS        (3U)\n#define CAM_REG_INT_FRAME_EN_LEN        (1U)\n#define CAM_REG_INT_FRAME_EN_MSK        (((1U << CAM_REG_INT_FRAME_EN_LEN) - 1) << CAM_REG_INT_FRAME_EN_POS)\n#define CAM_REG_INT_FRAME_EN_UMSK       (~(((1U << CAM_REG_INT_FRAME_EN_LEN) - 1) << CAM_REG_INT_FRAME_EN_POS))\n#define CAM_REG_INT_FIFO_EN             CAM_REG_INT_FIFO_EN\n#define CAM_REG_INT_FIFO_EN_POS         (4U)\n#define CAM_REG_INT_FIFO_EN_LEN         (1U)\n#define CAM_REG_INT_FIFO_EN_MSK         (((1U << CAM_REG_INT_FIFO_EN_LEN) - 1) << CAM_REG_INT_FIFO_EN_POS)\n#define CAM_REG_INT_FIFO_EN_UMSK        (~(((1U << CAM_REG_INT_FIFO_EN_LEN) - 1) << CAM_REG_INT_FIFO_EN_POS))\n#define CAM_REG_INT_HCNT_EN             CAM_REG_INT_HCNT_EN\n#define CAM_REG_INT_HCNT_EN_POS         (5U)\n#define CAM_REG_INT_HCNT_EN_LEN         (1U)\n#define CAM_REG_INT_HCNT_EN_MSK         (((1U << CAM_REG_INT_HCNT_EN_LEN) - 1) << CAM_REG_INT_HCNT_EN_POS)\n#define CAM_REG_INT_HCNT_EN_UMSK        (~(((1U << CAM_REG_INT_HCNT_EN_LEN) - 1) << CAM_REG_INT_HCNT_EN_POS))\n#define CAM_REG_INT_VCNT_EN             CAM_REG_INT_VCNT_EN\n#define CAM_REG_INT_VCNT_EN_POS         (6U)\n#define CAM_REG_INT_VCNT_EN_LEN         (1U)\n#define CAM_REG_INT_VCNT_EN_MSK         (((1U << CAM_REG_INT_VCNT_EN_LEN) - 1) << CAM_REG_INT_VCNT_EN_POS)\n#define CAM_REG_INT_VCNT_EN_UMSK        (~(((1U << CAM_REG_INT_VCNT_EN_LEN) - 1) << CAM_REG_INT_VCNT_EN_POS))\n#define CAM_REG_FRAME_CNT_TRGR_INT      CAM_REG_FRAME_CNT_TRGR_INT\n#define CAM_REG_FRAME_CNT_TRGR_INT_POS  (28U)\n#define CAM_REG_FRAME_CNT_TRGR_INT_LEN  (4U)\n#define CAM_REG_FRAME_CNT_TRGR_INT_MSK  (((1U << CAM_REG_FRAME_CNT_TRGR_INT_LEN) - 1) << CAM_REG_FRAME_CNT_TRGR_INT_POS)\n#define CAM_REG_FRAME_CNT_TRGR_INT_UMSK (~(((1U << CAM_REG_FRAME_CNT_TRGR_INT_LEN) - 1) << CAM_REG_FRAME_CNT_TRGR_INT_POS))\n\n/* 0x30 : hsync_control */\n#define CAM_HSYNC_CONTROL_OFFSET     (0x30)\n#define CAM_REG_HSYNC_ACT_END        CAM_REG_HSYNC_ACT_END\n#define CAM_REG_HSYNC_ACT_END_POS    (0U)\n#define CAM_REG_HSYNC_ACT_END_LEN    (16U)\n#define CAM_REG_HSYNC_ACT_END_MSK    (((1U << CAM_REG_HSYNC_ACT_END_LEN) - 1) << CAM_REG_HSYNC_ACT_END_POS)\n#define CAM_REG_HSYNC_ACT_END_UMSK   (~(((1U << CAM_REG_HSYNC_ACT_END_LEN) - 1) << CAM_REG_HSYNC_ACT_END_POS))\n#define CAM_REG_HSYNC_ACT_START      CAM_REG_HSYNC_ACT_START\n#define CAM_REG_HSYNC_ACT_START_POS  (16U)\n#define CAM_REG_HSYNC_ACT_START_LEN  (16U)\n#define CAM_REG_HSYNC_ACT_START_MSK  (((1U << CAM_REG_HSYNC_ACT_START_LEN) - 1) << CAM_REG_HSYNC_ACT_START_POS)\n#define CAM_REG_HSYNC_ACT_START_UMSK (~(((1U << CAM_REG_HSYNC_ACT_START_LEN) - 1) << CAM_REG_HSYNC_ACT_START_POS))\n\n/* 0x34 : vsync_control */\n#define CAM_VSYNC_CONTROL_OFFSET     (0x34)\n#define CAM_REG_VSYNC_ACT_END        CAM_REG_VSYNC_ACT_END\n#define CAM_REG_VSYNC_ACT_END_POS    (0U)\n#define CAM_REG_VSYNC_ACT_END_LEN    (16U)\n#define CAM_REG_VSYNC_ACT_END_MSK    (((1U << CAM_REG_VSYNC_ACT_END_LEN) - 1) << CAM_REG_VSYNC_ACT_END_POS)\n#define CAM_REG_VSYNC_ACT_END_UMSK   (~(((1U << CAM_REG_VSYNC_ACT_END_LEN) - 1) << CAM_REG_VSYNC_ACT_END_POS))\n#define CAM_REG_VSYNC_ACT_START      CAM_REG_VSYNC_ACT_START\n#define CAM_REG_VSYNC_ACT_START_POS  (16U)\n#define CAM_REG_VSYNC_ACT_START_LEN  (16U)\n#define CAM_REG_VSYNC_ACT_START_MSK  (((1U << CAM_REG_VSYNC_ACT_START_LEN) - 1) << CAM_REG_VSYNC_ACT_START_POS)\n#define CAM_REG_VSYNC_ACT_START_UMSK (~(((1U << CAM_REG_VSYNC_ACT_START_LEN) - 1) << CAM_REG_VSYNC_ACT_START_POS))\n\n/* 0x38 : frame_size_control */\n#define CAM_FRAME_SIZE_CONTROL_OFFSET (0x38)\n#define CAM_REG_TOTAL_HCNT            CAM_REG_TOTAL_HCNT\n#define CAM_REG_TOTAL_HCNT_POS        (0U)\n#define CAM_REG_TOTAL_HCNT_LEN        (16U)\n#define CAM_REG_TOTAL_HCNT_MSK        (((1U << CAM_REG_TOTAL_HCNT_LEN) - 1) << CAM_REG_TOTAL_HCNT_POS)\n#define CAM_REG_TOTAL_HCNT_UMSK       (~(((1U << CAM_REG_TOTAL_HCNT_LEN) - 1) << CAM_REG_TOTAL_HCNT_POS))\n#define CAM_REG_TOTAL_VCNT            CAM_REG_TOTAL_VCNT\n#define CAM_REG_TOTAL_VCNT_POS        (16U)\n#define CAM_REG_TOTAL_VCNT_LEN        (16U)\n#define CAM_REG_TOTAL_VCNT_MSK        (((1U << CAM_REG_TOTAL_VCNT_LEN) - 1) << CAM_REG_TOTAL_VCNT_POS)\n#define CAM_REG_TOTAL_VCNT_UMSK       (~(((1U << CAM_REG_TOTAL_VCNT_LEN) - 1) << CAM_REG_TOTAL_VCNT_POS))\n\n/* 0x40 : frame_start_addr0_0 */\n#define CAM_FRAME_START_ADDR0_0_OFFSET (0x40)\n#define CAM_FRAME_START_ADDR_0_0       CAM_FRAME_START_ADDR_0_0\n#define CAM_FRAME_START_ADDR_0_0_POS   (0U)\n#define CAM_FRAME_START_ADDR_0_0_LEN   (32U)\n#define CAM_FRAME_START_ADDR_0_0_MSK   (((1U << CAM_FRAME_START_ADDR_0_0_LEN) - 1) << CAM_FRAME_START_ADDR_0_0_POS)\n#define CAM_FRAME_START_ADDR_0_0_UMSK  (~(((1U << CAM_FRAME_START_ADDR_0_0_LEN) - 1) << CAM_FRAME_START_ADDR_0_0_POS))\n\n/* 0x44 : frame_byte_cnt0_0 */\n#define CAM_FRAME_BYTE_CNT0_0_OFFSET (0x44)\n#define CAM_FRAME_BYTE_CNT_0_0       CAM_FRAME_BYTE_CNT_0_0\n#define CAM_FRAME_BYTE_CNT_0_0_POS   (0U)\n#define CAM_FRAME_BYTE_CNT_0_0_LEN   (32U)\n#define CAM_FRAME_BYTE_CNT_0_0_MSK   (((1U << CAM_FRAME_BYTE_CNT_0_0_LEN) - 1) << CAM_FRAME_BYTE_CNT_0_0_POS)\n#define CAM_FRAME_BYTE_CNT_0_0_UMSK  (~(((1U << CAM_FRAME_BYTE_CNT_0_0_LEN) - 1) << CAM_FRAME_BYTE_CNT_0_0_POS))\n\n/* 0x48 : frame_start_addr0_1 */\n#define CAM_FRAME_START_ADDR0_1_OFFSET (0x48)\n#define CAM_FRAME_START_ADDR_0_1       CAM_FRAME_START_ADDR_0_1\n#define CAM_FRAME_START_ADDR_0_1_POS   (0U)\n#define CAM_FRAME_START_ADDR_0_1_LEN   (32U)\n#define CAM_FRAME_START_ADDR_0_1_MSK   (((1U << CAM_FRAME_START_ADDR_0_1_LEN) - 1) << CAM_FRAME_START_ADDR_0_1_POS)\n#define CAM_FRAME_START_ADDR_0_1_UMSK  (~(((1U << CAM_FRAME_START_ADDR_0_1_LEN) - 1) << CAM_FRAME_START_ADDR_0_1_POS))\n\n/* 0x4C : frame_byte_cnt0_1 */\n#define CAM_FRAME_BYTE_CNT0_1_OFFSET (0x4C)\n#define CAM_FRAME_BYTE_CNT_0_1       CAM_FRAME_BYTE_CNT_0_1\n#define CAM_FRAME_BYTE_CNT_0_1_POS   (0U)\n#define CAM_FRAME_BYTE_CNT_0_1_LEN   (32U)\n#define CAM_FRAME_BYTE_CNT_0_1_MSK   (((1U << CAM_FRAME_BYTE_CNT_0_1_LEN) - 1) << CAM_FRAME_BYTE_CNT_0_1_POS)\n#define CAM_FRAME_BYTE_CNT_0_1_UMSK  (~(((1U << CAM_FRAME_BYTE_CNT_0_1_LEN) - 1) << CAM_FRAME_BYTE_CNT_0_1_POS))\n\n/* 0x50 : frame_start_addr0_2 */\n#define CAM_FRAME_START_ADDR0_2_OFFSET (0x50)\n#define CAM_FRAME_START_ADDR_0_2       CAM_FRAME_START_ADDR_0_2\n#define CAM_FRAME_START_ADDR_0_2_POS   (0U)\n#define CAM_FRAME_START_ADDR_0_2_LEN   (32U)\n#define CAM_FRAME_START_ADDR_0_2_MSK   (((1U << CAM_FRAME_START_ADDR_0_2_LEN) - 1) << CAM_FRAME_START_ADDR_0_2_POS)\n#define CAM_FRAME_START_ADDR_0_2_UMSK  (~(((1U << CAM_FRAME_START_ADDR_0_2_LEN) - 1) << CAM_FRAME_START_ADDR_0_2_POS))\n\n/* 0x54 : frame_byte_cnt0_2 */\n#define CAM_FRAME_BYTE_CNT0_2_OFFSET (0x54)\n#define CAM_FRAME_BYTE_CNT_0_2       CAM_FRAME_BYTE_CNT_0_2\n#define CAM_FRAME_BYTE_CNT_0_2_POS   (0U)\n#define CAM_FRAME_BYTE_CNT_0_2_LEN   (32U)\n#define CAM_FRAME_BYTE_CNT_0_2_MSK   (((1U << CAM_FRAME_BYTE_CNT_0_2_LEN) - 1) << CAM_FRAME_BYTE_CNT_0_2_POS)\n#define CAM_FRAME_BYTE_CNT_0_2_UMSK  (~(((1U << CAM_FRAME_BYTE_CNT_0_2_LEN) - 1) << CAM_FRAME_BYTE_CNT_0_2_POS))\n\n/* 0x58 : frame_start_addr0_3 */\n#define CAM_FRAME_START_ADDR0_3_OFFSET (0x58)\n#define CAM_FRAME_START_ADDR_0_3       CAM_FRAME_START_ADDR_0_3\n#define CAM_FRAME_START_ADDR_0_3_POS   (0U)\n#define CAM_FRAME_START_ADDR_0_3_LEN   (32U)\n#define CAM_FRAME_START_ADDR_0_3_MSK   (((1U << CAM_FRAME_START_ADDR_0_3_LEN) - 1) << CAM_FRAME_START_ADDR_0_3_POS)\n#define CAM_FRAME_START_ADDR_0_3_UMSK  (~(((1U << CAM_FRAME_START_ADDR_0_3_LEN) - 1) << CAM_FRAME_START_ADDR_0_3_POS))\n\n/* 0x5C : frame_byte_cnt0_3 */\n#define CAM_FRAME_BYTE_CNT0_3_OFFSET (0x5C)\n#define CAM_FRAME_BYTE_CNT_0_3       CAM_FRAME_BYTE_CNT_0_3\n#define CAM_FRAME_BYTE_CNT_0_3_POS   (0U)\n#define CAM_FRAME_BYTE_CNT_0_3_LEN   (32U)\n#define CAM_FRAME_BYTE_CNT_0_3_MSK   (((1U << CAM_FRAME_BYTE_CNT_0_3_LEN) - 1) << CAM_FRAME_BYTE_CNT_0_3_POS)\n#define CAM_FRAME_BYTE_CNT_0_3_UMSK  (~(((1U << CAM_FRAME_BYTE_CNT_0_3_LEN) - 1) << CAM_FRAME_BYTE_CNT_0_3_POS))\n\n/* 0x60 : frame_start_addr0_4 */\n#define CAM_FRAME_START_ADDR0_4_OFFSET (0x60)\n#define CAM_FRAME_START_ADDR_0_4       CAM_FRAME_START_ADDR_0_4\n#define CAM_FRAME_START_ADDR_0_4_POS   (0U)\n#define CAM_FRAME_START_ADDR_0_4_LEN   (32U)\n#define CAM_FRAME_START_ADDR_0_4_MSK   (((1U << CAM_FRAME_START_ADDR_0_4_LEN) - 1) << CAM_FRAME_START_ADDR_0_4_POS)\n#define CAM_FRAME_START_ADDR_0_4_UMSK  (~(((1U << CAM_FRAME_START_ADDR_0_4_LEN) - 1) << CAM_FRAME_START_ADDR_0_4_POS))\n\n/* 0x64 : frame_byte_cnt0_4 */\n#define CAM_FRAME_BYTE_CNT0_4_OFFSET (0x64)\n#define CAM_FRAME_BYTE_CNT_0_4       CAM_FRAME_BYTE_CNT_0_4\n#define CAM_FRAME_BYTE_CNT_0_4_POS   (0U)\n#define CAM_FRAME_BYTE_CNT_0_4_LEN   (32U)\n#define CAM_FRAME_BYTE_CNT_0_4_MSK   (((1U << CAM_FRAME_BYTE_CNT_0_4_LEN) - 1) << CAM_FRAME_BYTE_CNT_0_4_POS)\n#define CAM_FRAME_BYTE_CNT_0_4_UMSK  (~(((1U << CAM_FRAME_BYTE_CNT_0_4_LEN) - 1) << CAM_FRAME_BYTE_CNT_0_4_POS))\n\n/* 0x68 : frame_start_addr0_5 */\n#define CAM_FRAME_START_ADDR0_5_OFFSET (0x68)\n#define CAM_FRAME_START_ADDR_0_5       CAM_FRAME_START_ADDR_0_5\n#define CAM_FRAME_START_ADDR_0_5_POS   (0U)\n#define CAM_FRAME_START_ADDR_0_5_LEN   (32U)\n#define CAM_FRAME_START_ADDR_0_5_MSK   (((1U << CAM_FRAME_START_ADDR_0_5_LEN) - 1) << CAM_FRAME_START_ADDR_0_5_POS)\n#define CAM_FRAME_START_ADDR_0_5_UMSK  (~(((1U << CAM_FRAME_START_ADDR_0_5_LEN) - 1) << CAM_FRAME_START_ADDR_0_5_POS))\n\n/* 0x6C : frame_byte_cnt0_5 */\n#define CAM_FRAME_BYTE_CNT0_5_OFFSET (0x6C)\n#define CAM_FRAME_BYTE_CNT_0_5       CAM_FRAME_BYTE_CNT_0_5\n#define CAM_FRAME_BYTE_CNT_0_5_POS   (0U)\n#define CAM_FRAME_BYTE_CNT_0_5_LEN   (32U)\n#define CAM_FRAME_BYTE_CNT_0_5_MSK   (((1U << CAM_FRAME_BYTE_CNT_0_5_LEN) - 1) << CAM_FRAME_BYTE_CNT_0_5_POS)\n#define CAM_FRAME_BYTE_CNT_0_5_UMSK  (~(((1U << CAM_FRAME_BYTE_CNT_0_5_LEN) - 1) << CAM_FRAME_BYTE_CNT_0_5_POS))\n\n/* 0x70 : frame_start_addr0_6 */\n#define CAM_FRAME_START_ADDR0_6_OFFSET (0x70)\n#define CAM_FRAME_START_ADDR_0_6       CAM_FRAME_START_ADDR_0_6\n#define CAM_FRAME_START_ADDR_0_6_POS   (0U)\n#define CAM_FRAME_START_ADDR_0_6_LEN   (32U)\n#define CAM_FRAME_START_ADDR_0_6_MSK   (((1U << CAM_FRAME_START_ADDR_0_6_LEN) - 1) << CAM_FRAME_START_ADDR_0_6_POS)\n#define CAM_FRAME_START_ADDR_0_6_UMSK  (~(((1U << CAM_FRAME_START_ADDR_0_6_LEN) - 1) << CAM_FRAME_START_ADDR_0_6_POS))\n\n/* 0x74 : frame_byte_cnt0_6 */\n#define CAM_FRAME_BYTE_CNT0_6_OFFSET (0x74)\n#define CAM_FRAME_BYTE_CNT_0_6       CAM_FRAME_BYTE_CNT_0_6\n#define CAM_FRAME_BYTE_CNT_0_6_POS   (0U)\n#define CAM_FRAME_BYTE_CNT_0_6_LEN   (32U)\n#define CAM_FRAME_BYTE_CNT_0_6_MSK   (((1U << CAM_FRAME_BYTE_CNT_0_6_LEN) - 1) << CAM_FRAME_BYTE_CNT_0_6_POS)\n#define CAM_FRAME_BYTE_CNT_0_6_UMSK  (~(((1U << CAM_FRAME_BYTE_CNT_0_6_LEN) - 1) << CAM_FRAME_BYTE_CNT_0_6_POS))\n\n/* 0x78 : frame_start_addr0_7 */\n#define CAM_FRAME_START_ADDR0_7_OFFSET (0x78)\n#define CAM_FRAME_START_ADDR_0_7       CAM_FRAME_START_ADDR_0_7\n#define CAM_FRAME_START_ADDR_0_7_POS   (0U)\n#define CAM_FRAME_START_ADDR_0_7_LEN   (32U)\n#define CAM_FRAME_START_ADDR_0_7_MSK   (((1U << CAM_FRAME_START_ADDR_0_7_LEN) - 1) << CAM_FRAME_START_ADDR_0_7_POS)\n#define CAM_FRAME_START_ADDR_0_7_UMSK  (~(((1U << CAM_FRAME_START_ADDR_0_7_LEN) - 1) << CAM_FRAME_START_ADDR_0_7_POS))\n\n/* 0x7C : frame_byte_cnt0_7 */\n#define CAM_FRAME_BYTE_CNT0_7_OFFSET (0x7C)\n#define CAM_FRAME_BYTE_CNT_0_7       CAM_FRAME_BYTE_CNT_0_7\n#define CAM_FRAME_BYTE_CNT_0_7_POS   (0U)\n#define CAM_FRAME_BYTE_CNT_0_7_LEN   (32U)\n#define CAM_FRAME_BYTE_CNT_0_7_MSK   (((1U << CAM_FRAME_BYTE_CNT_0_7_LEN) - 1) << CAM_FRAME_BYTE_CNT_0_7_POS)\n#define CAM_FRAME_BYTE_CNT_0_7_UMSK  (~(((1U << CAM_FRAME_BYTE_CNT_0_7_LEN) - 1) << CAM_FRAME_BYTE_CNT_0_7_POS))\n\n/* 0x80 : frame_start_addr1_0 */\n#define CAM_FRAME_START_ADDR1_0_OFFSET (0x80)\n#define CAM_FRAME_START_ADDR_1_0       CAM_FRAME_START_ADDR_1_0\n#define CAM_FRAME_START_ADDR_1_0_POS   (0U)\n#define CAM_FRAME_START_ADDR_1_0_LEN   (32U)\n#define CAM_FRAME_START_ADDR_1_0_MSK   (((1U << CAM_FRAME_START_ADDR_1_0_LEN) - 1) << CAM_FRAME_START_ADDR_1_0_POS)\n#define CAM_FRAME_START_ADDR_1_0_UMSK  (~(((1U << CAM_FRAME_START_ADDR_1_0_LEN) - 1) << CAM_FRAME_START_ADDR_1_0_POS))\n\n/* 0x84 : frame_byte_cnt1_0 */\n#define CAM_FRAME_BYTE_CNT1_0_OFFSET (0x84)\n#define CAM_FRAME_BYTE_CNT_1_0       CAM_FRAME_BYTE_CNT_1_0\n#define CAM_FRAME_BYTE_CNT_1_0_POS   (0U)\n#define CAM_FRAME_BYTE_CNT_1_0_LEN   (32U)\n#define CAM_FRAME_BYTE_CNT_1_0_MSK   (((1U << CAM_FRAME_BYTE_CNT_1_0_LEN) - 1) << CAM_FRAME_BYTE_CNT_1_0_POS)\n#define CAM_FRAME_BYTE_CNT_1_0_UMSK  (~(((1U << CAM_FRAME_BYTE_CNT_1_0_LEN) - 1) << CAM_FRAME_BYTE_CNT_1_0_POS))\n\n/* 0x88 : frame_start_addr1_1 */\n#define CAM_FRAME_START_ADDR1_1_OFFSET (0x88)\n#define CAM_FRAME_START_ADDR_1_1       CAM_FRAME_START_ADDR_1_1\n#define CAM_FRAME_START_ADDR_1_1_POS   (0U)\n#define CAM_FRAME_START_ADDR_1_1_LEN   (32U)\n#define CAM_FRAME_START_ADDR_1_1_MSK   (((1U << CAM_FRAME_START_ADDR_1_1_LEN) - 1) << CAM_FRAME_START_ADDR_1_1_POS)\n#define CAM_FRAME_START_ADDR_1_1_UMSK  (~(((1U << CAM_FRAME_START_ADDR_1_1_LEN) - 1) << CAM_FRAME_START_ADDR_1_1_POS))\n\n/* 0x8C : frame_byte_cnt1_1 */\n#define CAM_FRAME_BYTE_CNT1_1_OFFSET (0x8C)\n#define CAM_FRAME_BYTE_CNT_1_1       CAM_FRAME_BYTE_CNT_1_1\n#define CAM_FRAME_BYTE_CNT_1_1_POS   (0U)\n#define CAM_FRAME_BYTE_CNT_1_1_LEN   (32U)\n#define CAM_FRAME_BYTE_CNT_1_1_MSK   (((1U << CAM_FRAME_BYTE_CNT_1_1_LEN) - 1) << CAM_FRAME_BYTE_CNT_1_1_POS)\n#define CAM_FRAME_BYTE_CNT_1_1_UMSK  (~(((1U << CAM_FRAME_BYTE_CNT_1_1_LEN) - 1) << CAM_FRAME_BYTE_CNT_1_1_POS))\n\n/* 0x90 : frame_start_addr1_2 */\n#define CAM_FRAME_START_ADDR1_2_OFFSET (0x90)\n#define CAM_FRAME_START_ADDR_1_2       CAM_FRAME_START_ADDR_1_2\n#define CAM_FRAME_START_ADDR_1_2_POS   (0U)\n#define CAM_FRAME_START_ADDR_1_2_LEN   (32U)\n#define CAM_FRAME_START_ADDR_1_2_MSK   (((1U << CAM_FRAME_START_ADDR_1_2_LEN) - 1) << CAM_FRAME_START_ADDR_1_2_POS)\n#define CAM_FRAME_START_ADDR_1_2_UMSK  (~(((1U << CAM_FRAME_START_ADDR_1_2_LEN) - 1) << CAM_FRAME_START_ADDR_1_2_POS))\n\n/* 0x94 : frame_byte_cnt1_2 */\n#define CAM_FRAME_BYTE_CNT1_2_OFFSET (0x94)\n#define CAM_FRAME_BYTE_CNT_1_2       CAM_FRAME_BYTE_CNT_1_2\n#define CAM_FRAME_BYTE_CNT_1_2_POS   (0U)\n#define CAM_FRAME_BYTE_CNT_1_2_LEN   (32U)\n#define CAM_FRAME_BYTE_CNT_1_2_MSK   (((1U << CAM_FRAME_BYTE_CNT_1_2_LEN) - 1) << CAM_FRAME_BYTE_CNT_1_2_POS)\n#define CAM_FRAME_BYTE_CNT_1_2_UMSK  (~(((1U << CAM_FRAME_BYTE_CNT_1_2_LEN) - 1) << CAM_FRAME_BYTE_CNT_1_2_POS))\n\n/* 0x98 : frame_start_addr1_3 */\n#define CAM_FRAME_START_ADDR1_3_OFFSET (0x98)\n#define CAM_FRAME_START_ADDR_1_3       CAM_FRAME_START_ADDR_1_3\n#define CAM_FRAME_START_ADDR_1_3_POS   (0U)\n#define CAM_FRAME_START_ADDR_1_3_LEN   (32U)\n#define CAM_FRAME_START_ADDR_1_3_MSK   (((1U << CAM_FRAME_START_ADDR_1_3_LEN) - 1) << CAM_FRAME_START_ADDR_1_3_POS)\n#define CAM_FRAME_START_ADDR_1_3_UMSK  (~(((1U << CAM_FRAME_START_ADDR_1_3_LEN) - 1) << CAM_FRAME_START_ADDR_1_3_POS))\n\n/* 0x9C : frame_byte_cnt1_3 */\n#define CAM_FRAME_BYTE_CNT1_3_OFFSET (0x9C)\n#define CAM_FRAME_BYTE_CNT_1_3       CAM_FRAME_BYTE_CNT_1_3\n#define CAM_FRAME_BYTE_CNT_1_3_POS   (0U)\n#define CAM_FRAME_BYTE_CNT_1_3_LEN   (32U)\n#define CAM_FRAME_BYTE_CNT_1_3_MSK   (((1U << CAM_FRAME_BYTE_CNT_1_3_LEN) - 1) << CAM_FRAME_BYTE_CNT_1_3_POS)\n#define CAM_FRAME_BYTE_CNT_1_3_UMSK  (~(((1U << CAM_FRAME_BYTE_CNT_1_3_LEN) - 1) << CAM_FRAME_BYTE_CNT_1_3_POS))\n\n/* 0xA0 : frame_start_addr1_4 */\n#define CAM_FRAME_START_ADDR1_4_OFFSET (0xA0)\n#define CAM_FRAME_START_ADDR_1_4       CAM_FRAME_START_ADDR_1_4\n#define CAM_FRAME_START_ADDR_1_4_POS   (0U)\n#define CAM_FRAME_START_ADDR_1_4_LEN   (32U)\n#define CAM_FRAME_START_ADDR_1_4_MSK   (((1U << CAM_FRAME_START_ADDR_1_4_LEN) - 1) << CAM_FRAME_START_ADDR_1_4_POS)\n#define CAM_FRAME_START_ADDR_1_4_UMSK  (~(((1U << CAM_FRAME_START_ADDR_1_4_LEN) - 1) << CAM_FRAME_START_ADDR_1_4_POS))\n\n/* 0xA4 : frame_byte_cnt1_4 */\n#define CAM_FRAME_BYTE_CNT1_4_OFFSET (0xA4)\n#define CAM_FRAME_BYTE_CNT_1_4       CAM_FRAME_BYTE_CNT_1_4\n#define CAM_FRAME_BYTE_CNT_1_4_POS   (0U)\n#define CAM_FRAME_BYTE_CNT_1_4_LEN   (32U)\n#define CAM_FRAME_BYTE_CNT_1_4_MSK   (((1U << CAM_FRAME_BYTE_CNT_1_4_LEN) - 1) << CAM_FRAME_BYTE_CNT_1_4_POS)\n#define CAM_FRAME_BYTE_CNT_1_4_UMSK  (~(((1U << CAM_FRAME_BYTE_CNT_1_4_LEN) - 1) << CAM_FRAME_BYTE_CNT_1_4_POS))\n\n/* 0xA8 : frame_start_addr1_5 */\n#define CAM_FRAME_START_ADDR1_5_OFFSET (0xA8)\n#define CAM_FRAME_START_ADDR_1_5       CAM_FRAME_START_ADDR_1_5\n#define CAM_FRAME_START_ADDR_1_5_POS   (0U)\n#define CAM_FRAME_START_ADDR_1_5_LEN   (32U)\n#define CAM_FRAME_START_ADDR_1_5_MSK   (((1U << CAM_FRAME_START_ADDR_1_5_LEN) - 1) << CAM_FRAME_START_ADDR_1_5_POS)\n#define CAM_FRAME_START_ADDR_1_5_UMSK  (~(((1U << CAM_FRAME_START_ADDR_1_5_LEN) - 1) << CAM_FRAME_START_ADDR_1_5_POS))\n\n/* 0xAC : frame_byte_cnt1_5 */\n#define CAM_FRAME_BYTE_CNT1_5_OFFSET (0xAC)\n#define CAM_FRAME_BYTE_CNT_1_5       CAM_FRAME_BYTE_CNT_1_5\n#define CAM_FRAME_BYTE_CNT_1_5_POS   (0U)\n#define CAM_FRAME_BYTE_CNT_1_5_LEN   (32U)\n#define CAM_FRAME_BYTE_CNT_1_5_MSK   (((1U << CAM_FRAME_BYTE_CNT_1_5_LEN) - 1) << CAM_FRAME_BYTE_CNT_1_5_POS)\n#define CAM_FRAME_BYTE_CNT_1_5_UMSK  (~(((1U << CAM_FRAME_BYTE_CNT_1_5_LEN) - 1) << CAM_FRAME_BYTE_CNT_1_5_POS))\n\n/* 0xB0 : frame_start_addr1_6 */\n#define CAM_FRAME_START_ADDR1_6_OFFSET (0xB0)\n#define CAM_FRAME_START_ADDR_1_6       CAM_FRAME_START_ADDR_1_6\n#define CAM_FRAME_START_ADDR_1_6_POS   (0U)\n#define CAM_FRAME_START_ADDR_1_6_LEN   (32U)\n#define CAM_FRAME_START_ADDR_1_6_MSK   (((1U << CAM_FRAME_START_ADDR_1_6_LEN) - 1) << CAM_FRAME_START_ADDR_1_6_POS)\n#define CAM_FRAME_START_ADDR_1_6_UMSK  (~(((1U << CAM_FRAME_START_ADDR_1_6_LEN) - 1) << CAM_FRAME_START_ADDR_1_6_POS))\n\n/* 0xB4 : frame_byte_cnt1_6 */\n#define CAM_FRAME_BYTE_CNT1_6_OFFSET (0xB4)\n#define CAM_FRAME_BYTE_CNT_1_6       CAM_FRAME_BYTE_CNT_1_6\n#define CAM_FRAME_BYTE_CNT_1_6_POS   (0U)\n#define CAM_FRAME_BYTE_CNT_1_6_LEN   (32U)\n#define CAM_FRAME_BYTE_CNT_1_6_MSK   (((1U << CAM_FRAME_BYTE_CNT_1_6_LEN) - 1) << CAM_FRAME_BYTE_CNT_1_6_POS)\n#define CAM_FRAME_BYTE_CNT_1_6_UMSK  (~(((1U << CAM_FRAME_BYTE_CNT_1_6_LEN) - 1) << CAM_FRAME_BYTE_CNT_1_6_POS))\n\n/* 0xB8 : frame_start_addr1_7 */\n#define CAM_FRAME_START_ADDR1_7_OFFSET (0xB8)\n#define CAM_FRAME_START_ADDR_1_7       CAM_FRAME_START_ADDR_1_7\n#define CAM_FRAME_START_ADDR_1_7_POS   (0U)\n#define CAM_FRAME_START_ADDR_1_7_LEN   (32U)\n#define CAM_FRAME_START_ADDR_1_7_MSK   (((1U << CAM_FRAME_START_ADDR_1_7_LEN) - 1) << CAM_FRAME_START_ADDR_1_7_POS)\n#define CAM_FRAME_START_ADDR_1_7_UMSK  (~(((1U << CAM_FRAME_START_ADDR_1_7_LEN) - 1) << CAM_FRAME_START_ADDR_1_7_POS))\n\n/* 0xBC : frame_byte_cnt1_7 */\n#define CAM_FRAME_BYTE_CNT1_7_OFFSET (0xBC)\n#define CAM_FRAME_BYTE_CNT_1_7       CAM_FRAME_BYTE_CNT_1_7\n#define CAM_FRAME_BYTE_CNT_1_7_POS   (0U)\n#define CAM_FRAME_BYTE_CNT_1_7_LEN   (32U)\n#define CAM_FRAME_BYTE_CNT_1_7_MSK   (((1U << CAM_FRAME_BYTE_CNT_1_7_LEN) - 1) << CAM_FRAME_BYTE_CNT_1_7_POS)\n#define CAM_FRAME_BYTE_CNT_1_7_UMSK  (~(((1U << CAM_FRAME_BYTE_CNT_1_7_LEN) - 1) << CAM_FRAME_BYTE_CNT_1_7_POS))\n\n/* 0xFF0 : dvp_debug */\n#define CAM_DVP_DEBUG_OFFSET     (0xFF0)\n#define CAM_REG_DVP_DBG_EN       CAM_REG_DVP_DBG_EN\n#define CAM_REG_DVP_DBG_EN_POS   (0U)\n#define CAM_REG_DVP_DBG_EN_LEN   (1U)\n#define CAM_REG_DVP_DBG_EN_MSK   (((1U << CAM_REG_DVP_DBG_EN_LEN) - 1) << CAM_REG_DVP_DBG_EN_POS)\n#define CAM_REG_DVP_DBG_EN_UMSK  (~(((1U << CAM_REG_DVP_DBG_EN_LEN) - 1) << CAM_REG_DVP_DBG_EN_POS))\n#define CAM_REG_DVP_DBG_SEL      CAM_REG_DVP_DBG_SEL\n#define CAM_REG_DVP_DBG_SEL_POS  (1U)\n#define CAM_REG_DVP_DBG_SEL_LEN  (3U)\n#define CAM_REG_DVP_DBG_SEL_MSK  (((1U << CAM_REG_DVP_DBG_SEL_LEN) - 1) << CAM_REG_DVP_DBG_SEL_POS)\n#define CAM_REG_DVP_DBG_SEL_UMSK (~(((1U << CAM_REG_DVP_DBG_SEL_LEN) - 1) << CAM_REG_DVP_DBG_SEL_POS))\n\n/* 0xFFC : dvp_dummy_reg */\n#define CAM_DVP_DUMMY_REG_OFFSET (0xFFC)\n\nstruct cam_reg {\n    /* 0x0 : dvp2axi_configue */\n    union {\n        struct\n        {\n            uint32_t reg_dvp_enable     : 1; /* [    0],        r/w,        0x0 */\n            uint32_t reg_sw_mode        : 1; /* [    1],        r/w,        0x0 */\n            uint32_t reg_fram_vld_pol   : 1; /* [    2],        r/w,        0x1 */\n            uint32_t reg_line_vld_pol   : 1; /* [    3],        r/w,        0x1 */\n            uint32_t reg_hburst         : 2; /* [ 5: 4],        r/w,        0x3 */\n            uint32_t reserved_6_7       : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_dvp_mode       : 3; /* [10: 8],        r/w,        0x0 */\n            uint32_t reg_hw_mode_fwrap  : 1; /* [   11],        r/w,        0x1 */\n            uint32_t reg_drop_en        : 1; /* [   12],        r/w,        0x0 */\n            uint32_t reg_drop_even      : 1; /* [   13],        r/w,        0x0 */\n            uint32_t reg_subsample_en   : 1; /* [   14],        r/w,        0x0 */\n            uint32_t reg_subsample_even : 1; /* [   15],        r/w,        0x0 */\n            uint32_t reg_interlv_mode   : 1; /* [   16],        r/w,        0x0 */\n            uint32_t reserved_17_19     : 3; /* [19:17],       rsvd,        0x0 */\n            uint32_t reg_dvp_pix_clk_cg : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reserved_21_23     : 3; /* [23:21],       rsvd,        0x0 */\n            uint32_t reg_dvp_wait_cycle : 8; /* [31:24],        r/w,       0x40 */\n        } BF;\n        uint32_t WORD;\n    } dvp2axi_configue;\n\n    /* 0x4 : dvp2ahb_addr_start_0 */\n    union {\n        struct\n        {\n            uint32_t reg_addr_start_0 : 32; /* [31: 0],        r/w, 0x80000000L */\n        } BF;\n        uint32_t WORD;\n    } dvp2ahb_addr_start_0;\n\n    /* 0x8 : dvp2ahb_mem_bcnt_0 */\n    union {\n        struct\n        {\n            uint32_t reg_mem_burst_cnt_0 : 32; /* [31: 0],        r/w,     0xc000 */\n        } BF;\n        uint32_t WORD;\n    } dvp2ahb_mem_bcnt_0;\n\n    /* 0xC : dvp2ahb_frame_bcnt_0 */\n    union {\n        struct\n        {\n            uint32_t reg_frame_burst_cnt_0 : 32; /* [31: 0],        r/w,     0xc000 */\n        } BF;\n        uint32_t WORD;\n    } dvp2ahb_frame_bcnt_0;\n\n    /* 0x10 : dvp2ahb_addr_start_1 */\n    union {\n        struct\n        {\n            uint32_t reg_addr_start_1 : 32; /* [31: 0],        r/w, 0x80000000L */\n        } BF;\n        uint32_t WORD;\n    } dvp2ahb_addr_start_1;\n\n    /* 0x14 : dvp2ahb_mem_bcnt_1 */\n    union {\n        struct\n        {\n            uint32_t reg_mem_burst_cnt_1 : 32; /* [31: 0],        r/w,     0xc000 */\n        } BF;\n        uint32_t WORD;\n    } dvp2ahb_mem_bcnt_1;\n\n    /* 0x18 : dvp2ahb_frame_bcnt_1 */\n    union {\n        struct\n        {\n            uint32_t reg_frame_burst_cnt_1 : 32; /* [31: 0],        r/w,     0xc000 */\n        } BF;\n        uint32_t WORD;\n    } dvp2ahb_frame_bcnt_1;\n\n    /* 0x1C : dvp_status_and_error */\n    union {\n        struct\n        {\n            uint32_t sts_normal_int_0  : 1; /* [    0],          r,        0x0 */\n            uint32_t sts_normal_int_1  : 1; /* [    1],          r,        0x0 */\n            uint32_t sts_mem_int_0     : 1; /* [    2],          r,        0x0 */\n            uint32_t sts_mem_int_1     : 1; /* [    3],          r,        0x0 */\n            uint32_t sts_frame_int_0   : 1; /* [    4],          r,        0x0 */\n            uint32_t sts_frame_int_1   : 1; /* [    5],          r,        0x0 */\n            uint32_t sts_fifo_int_0    : 1; /* [    6],          r,        0x0 */\n            uint32_t sts_fifo_int_1    : 1; /* [    7],          r,        0x0 */\n            uint32_t sts_hcnt_int      : 1; /* [    8],          r,        0x0 */\n            uint32_t sts_vcnt_int      : 1; /* [    9],          r,        0x0 */\n            uint32_t reserved_10_15    : 6; /* [15:10],       rsvd,        0x0 */\n            uint32_t ahb_idle_0        : 1; /* [   16],          r,        0x1 */\n            uint32_t ahb_idle_1        : 1; /* [   17],          r,        0x1 */\n            uint32_t reserved_18       : 1; /* [   18],       rsvd,        0x0 */\n            uint32_t st_dvp_idle       : 1; /* [   19],          r,        0x1 */\n            uint32_t frame_valid_cnt_0 : 4; /* [23:20],          r,        0x0 */\n            uint32_t frame_valid_cnt_1 : 4; /* [27:24],          r,        0x0 */\n            uint32_t st_bus_idle       : 1; /* [   28],          r,        0x1 */\n            uint32_t st_bus_func       : 1; /* [   29],          r,        0x0 */\n            uint32_t st_bus_wait       : 1; /* [   30],          r,        0x0 */\n            uint32_t st_bus_flsh       : 1; /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } dvp_status_and_error;\n\n    /* 0x20 : dvp_frame_fifo_pop */\n    union {\n        struct\n        {\n            uint32_t rfifo_pop_0          : 1;  /* [    0],        w1p,        0x0 */\n            uint32_t rfifo_pop_1          : 1;  /* [    1],        w1p,        0x0 */\n            uint32_t reserved_2_3         : 2;  /* [ 3: 2],       rsvd,        0x0 */\n            uint32_t reg_int_normal_clr_0 : 1;  /* [    4],        w1p,        0x0 */\n            uint32_t reg_int_mem_clr_0    : 1;  /* [    5],        w1p,        0x0 */\n            uint32_t reg_int_frame_clr_0  : 1;  /* [    6],        w1p,        0x0 */\n            uint32_t reg_int_fifo_clr_0   : 1;  /* [    7],        w1p,        0x0 */\n            uint32_t reg_int_hcnt_clr_0   : 1;  /* [    8],        w1p,        0x0 */\n            uint32_t reg_int_vcnt_clr_0   : 1;  /* [    9],        w1p,        0x0 */\n            uint32_t reserved_10_15       : 6;  /* [15:10],       rsvd,        0x0 */\n            uint32_t reg_int_normal_clr_1 : 1;  /* [   16],        w1p,        0x0 */\n            uint32_t reg_int_mem_clr_1    : 1;  /* [   17],        w1p,        0x0 */\n            uint32_t reg_int_frame_clr_1  : 1;  /* [   18],        w1p,        0x0 */\n            uint32_t reg_int_fifo_clr_1   : 1;  /* [   19],        w1p,        0x0 */\n            uint32_t reserved_20_31       : 12; /* [31:20],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } dvp_frame_fifo_pop;\n\n    /* 0x24 : snsr_control */\n    union {\n        struct\n        {\n            uint32_t reg_cam_rst   : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t reg_cam_pwdn  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t reserved_2_31 : 30; /* [31: 2],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } snsr_control;\n\n    /* 0x28 : int_control */\n    union {\n        struct\n        {\n            uint32_t reg_int_normal_0_en    : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reg_int_normal_1_en    : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t reg_int_mem_en         : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t reg_int_frame_en       : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t reg_int_fifo_en        : 1;  /* [    4],        r/w,        0x1 */\n            uint32_t reg_int_hcnt_en        : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t reg_int_vcnt_en        : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t reserved_7_27          : 21; /* [27: 7],       rsvd,        0x0 */\n            uint32_t reg_frame_cnt_trgr_int : 4;  /* [31:28],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } int_control;\n\n    /* 0x2c  reserved */\n    uint8_t RESERVED0x2c[4];\n\n    /* 0x30 : hsync_control */\n    union {\n        struct\n        {\n            uint32_t reg_hsync_act_end   : 16; /* [15: 0],        r/w,     0xffff */\n            uint32_t reg_hsync_act_start : 16; /* [31:16],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } hsync_control;\n\n    /* 0x34 : vsync_control */\n    union {\n        struct\n        {\n            uint32_t reg_vsync_act_end   : 16; /* [15: 0],        r/w,     0xffff */\n            uint32_t reg_vsync_act_start : 16; /* [31:16],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } vsync_control;\n\n    /* 0x38 : frame_size_control */\n    union {\n        struct\n        {\n            uint32_t reg_total_hcnt : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reg_total_vcnt : 16; /* [31:16],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_size_control;\n\n    /* 0x3c  reserved */\n    uint8_t RESERVED0x3c[4];\n\n    /* 0x40 : frame_start_addr0_0 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_0_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_start_addr0_0;\n\n    /* 0x44 : frame_byte_cnt0_0 */\n    union {\n        struct\n        {\n            uint32_t frame_byte_cnt_0_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_byte_cnt0_0;\n\n    /* 0x48 : frame_start_addr0_1 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_0_1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_start_addr0_1;\n\n    /* 0x4C : frame_byte_cnt0_1 */\n    union {\n        struct\n        {\n            uint32_t frame_byte_cnt_0_1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_byte_cnt0_1;\n\n    /* 0x50 : frame_start_addr0_2 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_0_2 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_start_addr0_2;\n\n    /* 0x54 : frame_byte_cnt0_2 */\n    union {\n        struct\n        {\n            uint32_t frame_byte_cnt_0_2 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_byte_cnt0_2;\n\n    /* 0x58 : frame_start_addr0_3 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_0_3 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_start_addr0_3;\n\n    /* 0x5C : frame_byte_cnt0_3 */\n    union {\n        struct\n        {\n            uint32_t frame_byte_cnt_0_3 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_byte_cnt0_3;\n\n    /* 0x60 : frame_start_addr0_4 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_0_4 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_start_addr0_4;\n\n    /* 0x64 : frame_byte_cnt0_4 */\n    union {\n        struct\n        {\n            uint32_t frame_byte_cnt_0_4 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_byte_cnt0_4;\n\n    /* 0x68 : frame_start_addr0_5 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_0_5 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_start_addr0_5;\n\n    /* 0x6C : frame_byte_cnt0_5 */\n    union {\n        struct\n        {\n            uint32_t frame_byte_cnt_0_5 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_byte_cnt0_5;\n\n    /* 0x70 : frame_start_addr0_6 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_0_6 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_start_addr0_6;\n\n    /* 0x74 : frame_byte_cnt0_6 */\n    union {\n        struct\n        {\n            uint32_t frame_byte_cnt_0_6 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_byte_cnt0_6;\n\n    /* 0x78 : frame_start_addr0_7 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_0_7 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_start_addr0_7;\n\n    /* 0x7C : frame_byte_cnt0_7 */\n    union {\n        struct\n        {\n            uint32_t frame_byte_cnt_0_7 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_byte_cnt0_7;\n\n    /* 0x80 : frame_start_addr1_0 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_1_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_start_addr1_0;\n\n    /* 0x84 : frame_byte_cnt1_0 */\n    union {\n        struct\n        {\n            uint32_t frame_byte_cnt_1_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_byte_cnt1_0;\n\n    /* 0x88 : frame_start_addr1_1 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_1_1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_start_addr1_1;\n\n    /* 0x8C : frame_byte_cnt1_1 */\n    union {\n        struct\n        {\n            uint32_t frame_byte_cnt_1_1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_byte_cnt1_1;\n\n    /* 0x90 : frame_start_addr1_2 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_1_2 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_start_addr1_2;\n\n    /* 0x94 : frame_byte_cnt1_2 */\n    union {\n        struct\n        {\n            uint32_t frame_byte_cnt_1_2 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_byte_cnt1_2;\n\n    /* 0x98 : frame_start_addr1_3 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_1_3 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_start_addr1_3;\n\n    /* 0x9C : frame_byte_cnt1_3 */\n    union {\n        struct\n        {\n            uint32_t frame_byte_cnt_1_3 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_byte_cnt1_3;\n\n    /* 0xA0 : frame_start_addr1_4 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_1_4 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_start_addr1_4;\n\n    /* 0xA4 : frame_byte_cnt1_4 */\n    union {\n        struct\n        {\n            uint32_t frame_byte_cnt_1_4 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_byte_cnt1_4;\n\n    /* 0xA8 : frame_start_addr1_5 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_1_5 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_start_addr1_5;\n\n    /* 0xAC : frame_byte_cnt1_5 */\n    union {\n        struct\n        {\n            uint32_t frame_byte_cnt_1_5 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_byte_cnt1_5;\n\n    /* 0xB0 : frame_start_addr1_6 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_1_6 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_start_addr1_6;\n\n    /* 0xB4 : frame_byte_cnt1_6 */\n    union {\n        struct\n        {\n            uint32_t frame_byte_cnt_1_6 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_byte_cnt1_6;\n\n    /* 0xB8 : frame_start_addr1_7 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_1_7 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_start_addr1_7;\n\n    /* 0xBC : frame_byte_cnt1_7 */\n    union {\n        struct\n        {\n            uint32_t frame_byte_cnt_1_7 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } frame_byte_cnt1_7;\n\n    /* 0xc0  reserved */\n    uint8_t RESERVED0xc0[3888];\n\n    /* 0xFF0 : dvp_debug */\n    union {\n        struct\n        {\n            uint32_t reg_dvp_dbg_en  : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reg_dvp_dbg_sel : 3;  /* [ 3: 1],        r/w,        0x0 */\n            uint32_t reserved_4_31   : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } dvp_debug;\n\n    /* 0xff4  reserved */\n    uint8_t RESERVED0xff4[8];\n\n    /* 0xFFC : dvp_dummy_reg */\n    union {\n        struct\n        {\n            uint32_t RESERVED_31_0 : 32; /* [31: 0],       rsvd, 0xf0f0f0f0L */\n        } BF;\n        uint32_t WORD;\n    } dvp_dummy_reg;\n};\n\ntypedef volatile struct cam_reg cam_reg_t;\n\n#endif /* __CAM_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/cci_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    cci_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __CCI_REG_H__\n#define __CCI_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : cci_cfg */\n#define CCI_CFG_OFFSET              (0x0)\n#define CCI_EN                      CCI_EN\n#define CCI_EN_POS                  (0U)\n#define CCI_EN_LEN                  (1U)\n#define CCI_EN_MSK                  (((1U << CCI_EN_LEN) - 1) << CCI_EN_POS)\n#define CCI_EN_UMSK                 (~(((1U << CCI_EN_LEN) - 1) << CCI_EN_POS))\n#define CCI_SLV_SEL_CCI2            CCI_SLV_SEL_CCI2\n#define CCI_SLV_SEL_CCI2_POS        (1U)\n#define CCI_SLV_SEL_CCI2_LEN        (1U)\n#define CCI_SLV_SEL_CCI2_MSK        (((1U << CCI_SLV_SEL_CCI2_LEN) - 1) << CCI_SLV_SEL_CCI2_POS)\n#define CCI_SLV_SEL_CCI2_UMSK       (~(((1U << CCI_SLV_SEL_CCI2_LEN) - 1) << CCI_SLV_SEL_CCI2_POS))\n#define CCI_MAS_SEL_CCI2            CCI_MAS_SEL_CCI2\n#define CCI_MAS_SEL_CCI2_POS        (2U)\n#define CCI_MAS_SEL_CCI2_LEN        (1U)\n#define CCI_MAS_SEL_CCI2_MSK        (((1U << CCI_MAS_SEL_CCI2_LEN) - 1) << CCI_MAS_SEL_CCI2_POS)\n#define CCI_MAS_SEL_CCI2_UMSK       (~(((1U << CCI_MAS_SEL_CCI2_LEN) - 1) << CCI_MAS_SEL_CCI2_POS))\n#define CCI_MAS_HW_MODE             CCI_MAS_HW_MODE\n#define CCI_MAS_HW_MODE_POS         (3U)\n#define CCI_MAS_HW_MODE_LEN         (1U)\n#define CCI_MAS_HW_MODE_MSK         (((1U << CCI_MAS_HW_MODE_LEN) - 1) << CCI_MAS_HW_MODE_POS)\n#define CCI_MAS_HW_MODE_UMSK        (~(((1U << CCI_MAS_HW_MODE_LEN) - 1) << CCI_MAS_HW_MODE_POS))\n#define CCI_REG_M_CCI_SCLK_EN       CCI_REG_M_CCI_SCLK_EN\n#define CCI_REG_M_CCI_SCLK_EN_POS   (4U)\n#define CCI_REG_M_CCI_SCLK_EN_LEN   (1U)\n#define CCI_REG_M_CCI_SCLK_EN_MSK   (((1U << CCI_REG_M_CCI_SCLK_EN_LEN) - 1) << CCI_REG_M_CCI_SCLK_EN_POS)\n#define CCI_REG_M_CCI_SCLK_EN_UMSK  (~(((1U << CCI_REG_M_CCI_SCLK_EN_LEN) - 1) << CCI_REG_M_CCI_SCLK_EN_POS))\n#define CCI_REG_DIV_M_CCI_SCLK      CCI_REG_DIV_M_CCI_SCLK\n#define CCI_REG_DIV_M_CCI_SCLK_POS  (5U)\n#define CCI_REG_DIV_M_CCI_SCLK_LEN  (2U)\n#define CCI_REG_DIV_M_CCI_SCLK_MSK  (((1U << CCI_REG_DIV_M_CCI_SCLK_LEN) - 1) << CCI_REG_DIV_M_CCI_SCLK_POS)\n#define CCI_REG_DIV_M_CCI_SCLK_UMSK (~(((1U << CCI_REG_DIV_M_CCI_SCLK_LEN) - 1) << CCI_REG_DIV_M_CCI_SCLK_POS))\n#define CCI_CFG_CCI1_PRE_READ       CCI_CFG_CCI1_PRE_READ\n#define CCI_CFG_CCI1_PRE_READ_POS   (7U)\n#define CCI_CFG_CCI1_PRE_READ_LEN   (1U)\n#define CCI_CFG_CCI1_PRE_READ_MSK   (((1U << CCI_CFG_CCI1_PRE_READ_LEN) - 1) << CCI_CFG_CCI1_PRE_READ_POS)\n#define CCI_CFG_CCI1_PRE_READ_UMSK  (~(((1U << CCI_CFG_CCI1_PRE_READ_LEN) - 1) << CCI_CFG_CCI1_PRE_READ_POS))\n#define CCI_REG_SCCI_CLK_INV        CCI_REG_SCCI_CLK_INV\n#define CCI_REG_SCCI_CLK_INV_POS    (8U)\n#define CCI_REG_SCCI_CLK_INV_LEN    (1U)\n#define CCI_REG_SCCI_CLK_INV_MSK    (((1U << CCI_REG_SCCI_CLK_INV_LEN) - 1) << CCI_REG_SCCI_CLK_INV_POS)\n#define CCI_REG_SCCI_CLK_INV_UMSK   (~(((1U << CCI_REG_SCCI_CLK_INV_LEN) - 1) << CCI_REG_SCCI_CLK_INV_POS))\n#define CCI_REG_MCCI_CLK_INV        CCI_REG_MCCI_CLK_INV\n#define CCI_REG_MCCI_CLK_INV_POS    (9U)\n#define CCI_REG_MCCI_CLK_INV_LEN    (1U)\n#define CCI_REG_MCCI_CLK_INV_MSK    (((1U << CCI_REG_MCCI_CLK_INV_LEN) - 1) << CCI_REG_MCCI_CLK_INV_POS)\n#define CCI_REG_MCCI_CLK_INV_UMSK   (~(((1U << CCI_REG_MCCI_CLK_INV_LEN) - 1) << CCI_REG_MCCI_CLK_INV_POS))\n\n/* 0x4 : cci_addr */\n#define CCI_ADDR_OFFSET       (0x4)\n#define CCI_APB_CCI_ADDR      CCI_APB_CCI_ADDR\n#define CCI_APB_CCI_ADDR_POS  (0U)\n#define CCI_APB_CCI_ADDR_LEN  (32U)\n#define CCI_APB_CCI_ADDR_MSK  (((1U << CCI_APB_CCI_ADDR_LEN) - 1) << CCI_APB_CCI_ADDR_POS)\n#define CCI_APB_CCI_ADDR_UMSK (~(((1U << CCI_APB_CCI_ADDR_LEN) - 1) << CCI_APB_CCI_ADDR_POS))\n\n/* 0x8 : cci_wdata */\n#define CCI_WDATA_OFFSET       (0x8)\n#define CCI_APB_CCI_WDATA      CCI_APB_CCI_WDATA\n#define CCI_APB_CCI_WDATA_POS  (0U)\n#define CCI_APB_CCI_WDATA_LEN  (32U)\n#define CCI_APB_CCI_WDATA_MSK  (((1U << CCI_APB_CCI_WDATA_LEN) - 1) << CCI_APB_CCI_WDATA_POS)\n#define CCI_APB_CCI_WDATA_UMSK (~(((1U << CCI_APB_CCI_WDATA_LEN) - 1) << CCI_APB_CCI_WDATA_POS))\n\n/* 0xC : cci_rdata */\n#define CCI_RDATA_OFFSET       (0xC)\n#define CCI_APB_CCI_RDATA      CCI_APB_CCI_RDATA\n#define CCI_APB_CCI_RDATA_POS  (0U)\n#define CCI_APB_CCI_RDATA_LEN  (32U)\n#define CCI_APB_CCI_RDATA_MSK  (((1U << CCI_APB_CCI_RDATA_LEN) - 1) << CCI_APB_CCI_RDATA_POS)\n#define CCI_APB_CCI_RDATA_UMSK (~(((1U << CCI_APB_CCI_RDATA_LEN) - 1) << CCI_APB_CCI_RDATA_POS))\n\n/* 0x10 : cci_ctl */\n#define CCI_CTL_OFFSET      (0x10)\n#define CCI_WRITE_FLAG      CCI_WRITE_FLAG\n#define CCI_WRITE_FLAG_POS  (0U)\n#define CCI_WRITE_FLAG_LEN  (1U)\n#define CCI_WRITE_FLAG_MSK  (((1U << CCI_WRITE_FLAG_LEN) - 1) << CCI_WRITE_FLAG_POS)\n#define CCI_WRITE_FLAG_UMSK (~(((1U << CCI_WRITE_FLAG_LEN) - 1) << CCI_WRITE_FLAG_POS))\n#define CCI_READ_FLAG       CCI_READ_FLAG\n#define CCI_READ_FLAG_POS   (1U)\n#define CCI_READ_FLAG_LEN   (1U)\n#define CCI_READ_FLAG_MSK   (((1U << CCI_READ_FLAG_LEN) - 1) << CCI_READ_FLAG_POS)\n#define CCI_READ_FLAG_UMSK  (~(((1U << CCI_READ_FLAG_LEN) - 1) << CCI_READ_FLAG_POS))\n#define CCI_AHB_STATE       CCI_AHB_STATE\n#define CCI_AHB_STATE_POS   (2U)\n#define CCI_AHB_STATE_LEN   (2U)\n#define CCI_AHB_STATE_MSK   (((1U << CCI_AHB_STATE_LEN) - 1) << CCI_AHB_STATE_POS)\n#define CCI_AHB_STATE_UMSK  (~(((1U << CCI_AHB_STATE_LEN) - 1) << CCI_AHB_STATE_POS))\n\nstruct cci_reg {\n    /* 0x0 : cci_cfg */\n    union {\n        struct\n        {\n            uint32_t cci_en             : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t cci_slv_sel_cci2   : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t cci_mas_sel_cci2   : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t cci_mas_hw_mode    : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t reg_m_cci_sclk_en  : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t reg_div_m_cci_sclk : 2;  /* [ 6: 5],        r/w,        0x1 */\n            uint32_t cfg_cci1_pre_read  : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t reg_scci_clk_inv   : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t reg_mcci_clk_inv   : 1;  /* [    9],        r/w,        0x1 */\n            uint32_t reserved_10_31     : 22; /* [31:10],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } cci_cfg;\n\n    /* 0x4 : cci_addr */\n    union {\n        struct\n        {\n            uint32_t apb_cci_addr : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } cci_addr;\n\n    /* 0x8 : cci_wdata */\n    union {\n        struct\n        {\n            uint32_t apb_cci_wdata : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } cci_wdata;\n\n    /* 0xC : cci_rdata */\n    union {\n        struct\n        {\n            uint32_t apb_cci_rdata : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } cci_rdata;\n\n    /* 0x10 : cci_ctl */\n    union {\n        struct\n        {\n            uint32_t cci_write_flag : 1;  /* [    0],          r,        0x0 */\n            uint32_t cci_read_flag  : 1;  /* [    1],          r,        0x0 */\n            uint32_t ahb_state      : 2;  /* [ 3: 2],          r,        0x0 */\n            uint32_t reserved_4_31  : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } cci_ctl;\n};\n\ntypedef volatile struct cci_reg cci_reg_t;\n\n#endif /* __CCI_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/cks_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    cks_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __CKS_REG_H__\n#define __CKS_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : cks_config */\n#define CKS_CONFIG_OFFSET         (0x0)\n#define CKS_CR_CKS_CLR            CKS_CR_CKS_CLR\n#define CKS_CR_CKS_CLR_POS        (0U)\n#define CKS_CR_CKS_CLR_LEN        (1U)\n#define CKS_CR_CKS_CLR_MSK        (((1U << CKS_CR_CKS_CLR_LEN) - 1) << CKS_CR_CKS_CLR_POS)\n#define CKS_CR_CKS_CLR_UMSK       (~(((1U << CKS_CR_CKS_CLR_LEN) - 1) << CKS_CR_CKS_CLR_POS))\n#define CKS_CR_CKS_BYTE_SWAP      CKS_CR_CKS_BYTE_SWAP\n#define CKS_CR_CKS_BYTE_SWAP_POS  (1U)\n#define CKS_CR_CKS_BYTE_SWAP_LEN  (1U)\n#define CKS_CR_CKS_BYTE_SWAP_MSK  (((1U << CKS_CR_CKS_BYTE_SWAP_LEN) - 1) << CKS_CR_CKS_BYTE_SWAP_POS)\n#define CKS_CR_CKS_BYTE_SWAP_UMSK (~(((1U << CKS_CR_CKS_BYTE_SWAP_LEN) - 1) << CKS_CR_CKS_BYTE_SWAP_POS))\n\n/* 0x4 : data_in */\n#define CKS_DATA_IN_OFFSET (0x4)\n#define CKS_DATA_IN        CKS_DATA_IN\n#define CKS_DATA_IN_POS    (0U)\n#define CKS_DATA_IN_LEN    (8U)\n#define CKS_DATA_IN_MSK    (((1U << CKS_DATA_IN_LEN) - 1) << CKS_DATA_IN_POS)\n#define CKS_DATA_IN_UMSK   (~(((1U << CKS_DATA_IN_LEN) - 1) << CKS_DATA_IN_POS))\n\n/* 0x8 : cks_out */\n#define CKS_OUT_OFFSET (0x8)\n#define CKS_OUT        CKS_OUT\n#define CKS_OUT_POS    (0U)\n#define CKS_OUT_LEN    (16U)\n#define CKS_OUT_MSK    (((1U << CKS_OUT_LEN) - 1) << CKS_OUT_POS)\n#define CKS_OUT_UMSK   (~(((1U << CKS_OUT_LEN) - 1) << CKS_OUT_POS))\n\nstruct cks_reg {\n    /* 0x0 : cks_config */\n    union {\n        struct\n        {\n            uint32_t cr_cks_clr       : 1;  /* [    0],        w1c,        0x0 */\n            uint32_t cr_cks_byte_swap : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t reserved_2_31    : 30; /* [31: 2],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } cks_config;\n\n    /* 0x4 : data_in */\n    union {\n        struct\n        {\n            uint32_t data_in       : 8;  /* [ 7: 0],          w,          x */\n            uint32_t reserved_8_31 : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } data_in;\n\n    /* 0x8 : cks_out */\n    union {\n        struct\n        {\n            uint32_t cks_out        : 16; /* [15: 0],          r,     0xffff */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } cks_out;\n};\n\ntypedef volatile struct cks_reg cks_reg_t;\n\n#endif /* __CKS_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/dma_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    dma_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __DMA_REG_H__\n#define __DMA_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : DMA_IntStatus */\n#define DMA_INTSTATUS_OFFSET (0x0)\n#define DMA_INTSTATUS        DMA_INTSTATUS\n#define DMA_INTSTATUS_POS    (0U)\n#define DMA_INTSTATUS_LEN    (8U)\n#define DMA_INTSTATUS_MSK    (((1U << DMA_INTSTATUS_LEN) - 1) << DMA_INTSTATUS_POS)\n#define DMA_INTSTATUS_UMSK   (~(((1U << DMA_INTSTATUS_LEN) - 1) << DMA_INTSTATUS_POS))\n\n/* 0x4 : DMA_IntTCStatus */\n#define DMA_INTTCSTATUS_OFFSET (0x4)\n#define DMA_INTTCSTATUS        DMA_INTTCSTATUS\n#define DMA_INTTCSTATUS_POS    (0U)\n#define DMA_INTTCSTATUS_LEN    (8U)\n#define DMA_INTTCSTATUS_MSK    (((1U << DMA_INTTCSTATUS_LEN) - 1) << DMA_INTTCSTATUS_POS)\n#define DMA_INTTCSTATUS_UMSK   (~(((1U << DMA_INTTCSTATUS_LEN) - 1) << DMA_INTTCSTATUS_POS))\n\n/* 0x8 : DMA_IntTCClear */\n#define DMA_INTTCCLEAR_OFFSET (0x8)\n#define DMA_INTTCCLEAR        DMA_INTTCCLEAR\n#define DMA_INTTCCLEAR_POS    (0U)\n#define DMA_INTTCCLEAR_LEN    (8U)\n#define DMA_INTTCCLEAR_MSK    (((1U << DMA_INTTCCLEAR_LEN) - 1) << DMA_INTTCCLEAR_POS)\n#define DMA_INTTCCLEAR_UMSK   (~(((1U << DMA_INTTCCLEAR_LEN) - 1) << DMA_INTTCCLEAR_POS))\n\n/* 0xC : DMA_IntErrorStatus */\n#define DMA_INTERRORSTATUS_OFFSET (0xC)\n#define DMA_INTERRORSTATUS        DMA_INTERRORSTATUS\n#define DMA_INTERRORSTATUS_POS    (0U)\n#define DMA_INTERRORSTATUS_LEN    (8U)\n#define DMA_INTERRORSTATUS_MSK    (((1U << DMA_INTERRORSTATUS_LEN) - 1) << DMA_INTERRORSTATUS_POS)\n#define DMA_INTERRORSTATUS_UMSK   (~(((1U << DMA_INTERRORSTATUS_LEN) - 1) << DMA_INTERRORSTATUS_POS))\n\n/* 0x10 : DMA_IntErrClr */\n#define DMA_INTERRCLR_OFFSET (0x10)\n#define DMA_INTERRCLR        DMA_INTERRCLR\n#define DMA_INTERRCLR_POS    (0U)\n#define DMA_INTERRCLR_LEN    (8U)\n#define DMA_INTERRCLR_MSK    (((1U << DMA_INTERRCLR_LEN) - 1) << DMA_INTERRCLR_POS)\n#define DMA_INTERRCLR_UMSK   (~(((1U << DMA_INTERRCLR_LEN) - 1) << DMA_INTERRCLR_POS))\n\n/* 0x14 : DMA_RawIntTCStatus */\n#define DMA_RAWINTTCSTATUS_OFFSET (0x14)\n#define DMA_RAWINTTCSTATUS        DMA_RAWINTTCSTATUS\n#define DMA_RAWINTTCSTATUS_POS    (0U)\n#define DMA_RAWINTTCSTATUS_LEN    (8U)\n#define DMA_RAWINTTCSTATUS_MSK    (((1U << DMA_RAWINTTCSTATUS_LEN) - 1) << DMA_RAWINTTCSTATUS_POS)\n#define DMA_RAWINTTCSTATUS_UMSK   (~(((1U << DMA_RAWINTTCSTATUS_LEN) - 1) << DMA_RAWINTTCSTATUS_POS))\n\n/* 0x18 : DMA_RawIntErrorStatus */\n#define DMA_RAWINTERRORSTATUS_OFFSET (0x18)\n#define DMA_RAWINTERRORSTATUS        DMA_RAWINTERRORSTATUS\n#define DMA_RAWINTERRORSTATUS_POS    (0U)\n#define DMA_RAWINTERRORSTATUS_LEN    (8U)\n#define DMA_RAWINTERRORSTATUS_MSK    (((1U << DMA_RAWINTERRORSTATUS_LEN) - 1) << DMA_RAWINTERRORSTATUS_POS)\n#define DMA_RAWINTERRORSTATUS_UMSK   (~(((1U << DMA_RAWINTERRORSTATUS_LEN) - 1) << DMA_RAWINTERRORSTATUS_POS))\n\n/* 0x1C : DMA_EnbldChns */\n#define DMA_ENBLDCHNS_OFFSET     (0x1C)\n#define DMA_ENABLEDCHANNELS      DMA_ENABLEDCHANNELS\n#define DMA_ENABLEDCHANNELS_POS  (0U)\n#define DMA_ENABLEDCHANNELS_LEN  (8U)\n#define DMA_ENABLEDCHANNELS_MSK  (((1U << DMA_ENABLEDCHANNELS_LEN) - 1) << DMA_ENABLEDCHANNELS_POS)\n#define DMA_ENABLEDCHANNELS_UMSK (~(((1U << DMA_ENABLEDCHANNELS_LEN) - 1) << DMA_ENABLEDCHANNELS_POS))\n\n/* 0x20 : DMA_SoftBReq */\n#define DMA_SOFTBREQ_OFFSET (0x20)\n#define DMA_SOFTBREQ        DMA_SOFTBREQ\n#define DMA_SOFTBREQ_POS    (0U)\n#define DMA_SOFTBREQ_LEN    (32U)\n#define DMA_SOFTBREQ_MSK    (((1U << DMA_SOFTBREQ_LEN) - 1) << DMA_SOFTBREQ_POS)\n#define DMA_SOFTBREQ_UMSK   (~(((1U << DMA_SOFTBREQ_LEN) - 1) << DMA_SOFTBREQ_POS))\n\n/* 0x24 : DMA_SoftSReq */\n#define DMA_SOFTSREQ_OFFSET (0x24)\n#define DMA_SOFTSREQ        DMA_SOFTSREQ\n#define DMA_SOFTSREQ_POS    (0U)\n#define DMA_SOFTSREQ_LEN    (32U)\n#define DMA_SOFTSREQ_MSK    (((1U << DMA_SOFTSREQ_LEN) - 1) << DMA_SOFTSREQ_POS)\n#define DMA_SOFTSREQ_UMSK   (~(((1U << DMA_SOFTSREQ_LEN) - 1) << DMA_SOFTSREQ_POS))\n\n/* 0x28 : DMA_SoftLBReq */\n#define DMA_SOFTLBREQ_OFFSET (0x28)\n#define DMA_SOFTLBREQ        DMA_SOFTLBREQ\n#define DMA_SOFTLBREQ_POS    (0U)\n#define DMA_SOFTLBREQ_LEN    (32U)\n#define DMA_SOFTLBREQ_MSK    (((1U << DMA_SOFTLBREQ_LEN) - 1) << DMA_SOFTLBREQ_POS)\n#define DMA_SOFTLBREQ_UMSK   (~(((1U << DMA_SOFTLBREQ_LEN) - 1) << DMA_SOFTLBREQ_POS))\n\n/* 0x2C : DMA_SoftLSReq */\n#define DMA_SOFTLSREQ_OFFSET (0x2C)\n#define DMA_SOFTLSREQ        DMA_SOFTLSREQ\n#define DMA_SOFTLSREQ_POS    (0U)\n#define DMA_SOFTLSREQ_LEN    (32U)\n#define DMA_SOFTLSREQ_MSK    (((1U << DMA_SOFTLSREQ_LEN) - 1) << DMA_SOFTLSREQ_POS)\n#define DMA_SOFTLSREQ_UMSK   (~(((1U << DMA_SOFTLSREQ_LEN) - 1) << DMA_SOFTLSREQ_POS))\n\n/* 0x30 : DMA_Top_Config */\n#define DMA_TOP_CONFIG_OFFSET (0x30)\n#define DMA_E                 DMA_E\n#define DMA_E_POS             (0U)\n#define DMA_E_LEN             (1U)\n#define DMA_E_MSK             (((1U << DMA_E_LEN) - 1) << DMA_E_POS)\n#define DMA_E_UMSK            (~(((1U << DMA_E_LEN) - 1) << DMA_E_POS))\n#define DMA_M                 DMA_M\n#define DMA_M_POS             (1U)\n#define DMA_M_LEN             (1U)\n#define DMA_M_MSK             (((1U << DMA_M_LEN) - 1) << DMA_M_POS)\n#define DMA_M_UMSK            (~(((1U << DMA_M_LEN) - 1) << DMA_M_POS))\n\n/* 0x34 : DMA_Sync */\n#define DMA_SYNC_OFFSET (0x34)\n#define DMA_SYNC        DMA_SYNC\n#define DMA_SYNC_POS    (0U)\n#define DMA_SYNC_LEN    (32U)\n#define DMA_SYNC_MSK    (((1U << DMA_SYNC_LEN) - 1) << DMA_SYNC_POS)\n#define DMA_SYNC_UMSK   (~(((1U << DMA_SYNC_LEN) - 1) << DMA_SYNC_POS))\n\n#if 0\n/* 0x100 : DMA_C0SrcAddr */\n#define DMA_C0SRCADDR_OFFSET   (0x100)\n#define DMA_SRCADDR            DMA_SRCADDR\n#define DMA_SRCADDR_POS        (0U)\n#define DMA_SRCADDR_LEN        (32U)\n#define DMA_SRCADDR_MSK        (((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS)\n#define DMA_SRCADDR_UMSK       (~(((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS))\n\n/* 0x104 : DMA_C0DstAddr */\n#define DMA_C0DSTADDR_OFFSET   (0x104)\n#define DMA_DSTADDR            DMA_DSTADDR\n#define DMA_DSTADDR_POS        (0U)\n#define DMA_DSTADDR_LEN        (32U)\n#define DMA_DSTADDR_MSK        (((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS)\n#define DMA_DSTADDR_UMSK       (~(((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS))\n\n/* 0x108 : DMA_C0LLI */\n#define DMA_C0LLI_OFFSET       (0x108)\n#define DMA_LLI                DMA_LLI\n#define DMA_LLI_POS            (0U)\n#define DMA_LLI_LEN            (32U)\n#define DMA_LLI_MSK            (((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS)\n#define DMA_LLI_UMSK           (~(((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS))\n\n/* 0x10C : DMA_C0Control */\n#define DMA_C0CONTROL_OFFSET   (0x10C)\n#define DMA_TRANSFERSIZE       DMA_TRANSFERSIZE\n#define DMA_TRANSFERSIZE_POS   (0U)\n#define DMA_TRANSFERSIZE_LEN   (12U)\n#define DMA_TRANSFERSIZE_MSK   (((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS)\n#define DMA_TRANSFERSIZE_UMSK  (~(((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS))\n#define DMA_SBSIZE             DMA_SBSIZE\n#define DMA_SBSIZE_POS         (12U)\n#define DMA_SBSIZE_LEN         (2U)\n#define DMA_SBSIZE_MSK         (((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS)\n#define DMA_SBSIZE_UMSK        (~(((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS))\n#define DMA_DST_MIN_MODE       DMA_DST_MIN_MODE\n#define DMA_DST_MIN_MODE_POS   (14U)\n#define DMA_DST_MIN_MODE_LEN   (1U)\n#define DMA_DST_MIN_MODE_MSK   (((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS)\n#define DMA_DST_MIN_MODE_UMSK  (~(((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS))\n#define DMA_DBSIZE             DMA_DBSIZE\n#define DMA_DBSIZE_POS         (15U)\n#define DMA_DBSIZE_LEN         (2U)\n#define DMA_DBSIZE_MSK         (((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS)\n#define DMA_DBSIZE_UMSK        (~(((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS))\n#define DMA_DST_ADD_MODE       DMA_DST_ADD_MODE\n#define DMA_DST_ADD_MODE_POS   (17U)\n#define DMA_DST_ADD_MODE_LEN   (1U)\n#define DMA_DST_ADD_MODE_MSK   (((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS)\n#define DMA_DST_ADD_MODE_UMSK  (~(((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS))\n#define DMA_SWIDTH             DMA_SWIDTH\n#define DMA_SWIDTH_POS         (18U)\n#define DMA_SWIDTH_LEN         (2U)\n#define DMA_SWIDTH_MSK         (((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS)\n#define DMA_SWIDTH_UMSK        (~(((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS))\n#define DMA_DWIDTH             DMA_DWIDTH\n#define DMA_DWIDTH_POS         (21U)\n#define DMA_DWIDTH_LEN         (2U)\n#define DMA_DWIDTH_MSK         (((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS)\n#define DMA_DWIDTH_UMSK        (~(((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS))\n#define DMA_FIX_CNT            DMA_FIX_CNT\n#define DMA_FIX_CNT_POS        (23U)\n#define DMA_FIX_CNT_LEN        (2U)\n#define DMA_FIX_CNT_MSK        (((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS)\n#define DMA_FIX_CNT_UMSK       (~(((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS))\n#define DMA_SLARGERD           DMA_SLARGERD\n#define DMA_SLARGERD_POS       (25U)\n#define DMA_SLARGERD_LEN       (1U)\n#define DMA_SLARGERD_MSK       (((1U << DMA_SLARGERD_LEN) - 1) << DMA_SLARGERD_POS)\n#define DMA_SLARGERD_UMSK      (~(((1U << DMA_SLARGERD_LEN) - 1) << DMA_SLARGERD_POS))\n#define DMA_SI                 DMA_SI\n#define DMA_SI_POS             (26U)\n#define DMA_SI_LEN             (1U)\n#define DMA_SI_MSK             (((1U << DMA_SI_LEN) - 1) << DMA_SI_POS)\n#define DMA_SI_UMSK            (~(((1U << DMA_SI_LEN) - 1) << DMA_SI_POS))\n#define DMA_DI                 DMA_DI\n#define DMA_DI_POS             (27U)\n#define DMA_DI_LEN             (1U)\n#define DMA_DI_MSK             (((1U << DMA_DI_LEN) - 1) << DMA_DI_POS)\n#define DMA_DI_UMSK            (~(((1U << DMA_DI_LEN) - 1) << DMA_DI_POS))\n#define DMA_PROT               DMA_PROT\n#define DMA_PROT_POS           (28U)\n#define DMA_PROT_LEN           (3U)\n#define DMA_PROT_MSK           (((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS)\n#define DMA_PROT_UMSK          (~(((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS))\n#define DMA_I                  DMA_I\n#define DMA_I_POS              (31U)\n#define DMA_I_LEN              (1U)\n#define DMA_I_MSK              (((1U << DMA_I_LEN) - 1) << DMA_I_POS)\n#define DMA_I_UMSK             (~(((1U << DMA_I_LEN) - 1) << DMA_I_POS))\n\n/* 0x110 : DMA_C0Config */\n#define DMA_C0CONFIG_OFFSET    (0x110)\n#define DMA_E                  DMA_E\n#define DMA_E_POS              (0U)\n#define DMA_E_LEN              (1U)\n#define DMA_E_MSK              (((1U << DMA_E_LEN) - 1) << DMA_E_POS)\n#define DMA_E_UMSK             (~(((1U << DMA_E_LEN) - 1) << DMA_E_POS))\n#define DMA_SRCPERIPHERAL      DMA_SRCPERIPHERAL\n#define DMA_SRCPERIPHERAL_POS  (1U)\n#define DMA_SRCPERIPHERAL_LEN  (5U)\n#define DMA_SRCPERIPHERAL_MSK  (((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS)\n#define DMA_SRCPERIPHERAL_UMSK (~(((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS))\n#define DMA_DSTPERIPHERAL      DMA_DSTPERIPHERAL\n#define DMA_DSTPERIPHERAL_POS  (6U)\n#define DMA_DSTPERIPHERAL_LEN  (5U)\n#define DMA_DSTPERIPHERAL_MSK  (((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS)\n#define DMA_DSTPERIPHERAL_UMSK (~(((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS))\n#define DMA_FLOWCNTRL          DMA_FLOWCNTRL\n#define DMA_FLOWCNTRL_POS      (11U)\n#define DMA_FLOWCNTRL_LEN      (3U)\n#define DMA_FLOWCNTRL_MSK      (((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS)\n#define DMA_FLOWCNTRL_UMSK     (~(((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS))\n#define DMA_IE                 DMA_IE\n#define DMA_IE_POS             (14U)\n#define DMA_IE_LEN             (1U)\n#define DMA_IE_MSK             (((1U << DMA_IE_LEN) - 1) << DMA_IE_POS)\n#define DMA_IE_UMSK            (~(((1U << DMA_IE_LEN) - 1) << DMA_IE_POS))\n#define DMA_ITC                DMA_ITC\n#define DMA_ITC_POS            (15U)\n#define DMA_ITC_LEN            (1U)\n#define DMA_ITC_MSK            (((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS)\n#define DMA_ITC_UMSK           (~(((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS))\n#define DMA_L                  DMA_L\n#define DMA_L_POS              (16U)\n#define DMA_L_LEN              (1U)\n#define DMA_L_MSK              (((1U << DMA_L_LEN) - 1) << DMA_L_POS)\n#define DMA_L_UMSK             (~(((1U << DMA_L_LEN) - 1) << DMA_L_POS))\n#define DMA_A                  DMA_A\n#define DMA_A_POS              (17U)\n#define DMA_A_LEN              (1U)\n#define DMA_A_MSK              (((1U << DMA_A_LEN) - 1) << DMA_A_POS)\n#define DMA_A_UMSK             (~(((1U << DMA_A_LEN) - 1) << DMA_A_POS))\n#define DMA_H                  DMA_H\n#define DMA_H_POS              (18U)\n#define DMA_H_LEN              (1U)\n#define DMA_H_MSK              (((1U << DMA_H_LEN) - 1) << DMA_H_POS)\n#define DMA_H_UMSK             (~(((1U << DMA_H_LEN) - 1) << DMA_H_POS))\n#define DMA_LLICOUNTER         DMA_LLICOUNTER\n#define DMA_LLICOUNTER_POS     (20U)\n#define DMA_LLICOUNTER_LEN     (10U)\n#define DMA_LLICOUNTER_MSK     (((1U << DMA_LLICOUNTER_LEN) - 1) << DMA_LLICOUNTER_POS)\n#define DMA_LLICOUNTER_UMSK    (~(((1U << DMA_LLICOUNTER_LEN) - 1) << DMA_LLICOUNTER_POS))\n\n/* 0x200 : DMA_C1SrcAddr */\n#define DMA_C1SRCADDR_OFFSET   (0x200)\n#define DMA_SRCADDR            DMA_SRCADDR\n#define DMA_SRCADDR_POS        (0U)\n#define DMA_SRCADDR_LEN        (32U)\n#define DMA_SRCADDR_MSK        (((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS)\n#define DMA_SRCADDR_UMSK       (~(((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS))\n\n/* 0x204 : DMA_C1DstAddr */\n#define DMA_C1DSTADDR_OFFSET   (0x204)\n#define DMA_DSTADDR            DMA_DSTADDR\n#define DMA_DSTADDR_POS        (0U)\n#define DMA_DSTADDR_LEN        (32U)\n#define DMA_DSTADDR_MSK        (((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS)\n#define DMA_DSTADDR_UMSK       (~(((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS))\n\n/* 0x208 : DMA_C1LLI */\n#define DMA_C1LLI_OFFSET       (0x208)\n#define DMA_LLI                DMA_LLI\n#define DMA_LLI_POS            (0U)\n#define DMA_LLI_LEN            (32U)\n#define DMA_LLI_MSK            (((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS)\n#define DMA_LLI_UMSK           (~(((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS))\n\n/* 0x20C : DMA_C1Control */\n#define DMA_C1CONTROL_OFFSET   (0x20C)\n#define DMA_TRANSFERSIZE       DMA_TRANSFERSIZE\n#define DMA_TRANSFERSIZE_POS   (0U)\n#define DMA_TRANSFERSIZE_LEN   (12U)\n#define DMA_TRANSFERSIZE_MSK   (((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS)\n#define DMA_TRANSFERSIZE_UMSK  (~(((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS))\n#define DMA_SBSIZE             DMA_SBSIZE\n#define DMA_SBSIZE_POS         (12U)\n#define DMA_SBSIZE_LEN         (2U)\n#define DMA_SBSIZE_MSK         (((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS)\n#define DMA_SBSIZE_UMSK        (~(((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS))\n#define DMA_DST_MIN_MODE       DMA_DST_MIN_MODE\n#define DMA_DST_MIN_MODE_POS   (14U)\n#define DMA_DST_MIN_MODE_LEN   (1U)\n#define DMA_DST_MIN_MODE_MSK   (((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS)\n#define DMA_DST_MIN_MODE_UMSK  (~(((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS))\n#define DMA_DBSIZE             DMA_DBSIZE\n#define DMA_DBSIZE_POS         (15U)\n#define DMA_DBSIZE_LEN         (2U)\n#define DMA_DBSIZE_MSK         (((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS)\n#define DMA_DBSIZE_UMSK        (~(((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS))\n#define DMA_DST_ADD_MODE       DMA_DST_ADD_MODE\n#define DMA_DST_ADD_MODE_POS   (17U)\n#define DMA_DST_ADD_MODE_LEN   (1U)\n#define DMA_DST_ADD_MODE_MSK   (((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS)\n#define DMA_DST_ADD_MODE_UMSK  (~(((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS))\n#define DMA_SWIDTH             DMA_SWIDTH\n#define DMA_SWIDTH_POS         (18U)\n#define DMA_SWIDTH_LEN         (3U)\n#define DMA_SWIDTH_MSK         (((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS)\n#define DMA_SWIDTH_UMSK        (~(((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS))\n#define DMA_DWIDTH             DMA_DWIDTH\n#define DMA_DWIDTH_POS         (21U)\n#define DMA_DWIDTH_LEN         (3U)\n#define DMA_DWIDTH_MSK         (((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS)\n#define DMA_DWIDTH_UMSK        (~(((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS))\n#define DMA_FIX_CNT            DMA_FIX_CNT\n#define DMA_FIX_CNT_POS        (23U)\n#define DMA_FIX_CNT_LEN        (2U)\n#define DMA_FIX_CNT_MSK        (((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS)\n#define DMA_FIX_CNT_UMSK       (~(((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS))\n#define DMA_SI                 DMA_SI\n#define DMA_SI_POS             (26U)\n#define DMA_SI_LEN             (1U)\n#define DMA_SI_MSK             (((1U << DMA_SI_LEN) - 1) << DMA_SI_POS)\n#define DMA_SI_UMSK            (~(((1U << DMA_SI_LEN) - 1) << DMA_SI_POS))\n#define DMA_DI                 DMA_DI\n#define DMA_DI_POS             (27U)\n#define DMA_DI_LEN             (1U)\n#define DMA_DI_MSK             (((1U << DMA_DI_LEN) - 1) << DMA_DI_POS)\n#define DMA_DI_UMSK            (~(((1U << DMA_DI_LEN) - 1) << DMA_DI_POS))\n#define DMA_PROT               DMA_PROT\n#define DMA_PROT_POS           (28U)\n#define DMA_PROT_LEN           (3U)\n#define DMA_PROT_MSK           (((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS)\n#define DMA_PROT_UMSK          (~(((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS))\n#define DMA_I                  DMA_I\n#define DMA_I_POS              (31U)\n#define DMA_I_LEN              (1U)\n#define DMA_I_MSK              (((1U << DMA_I_LEN) - 1) << DMA_I_POS)\n#define DMA_I_UMSK             (~(((1U << DMA_I_LEN) - 1) << DMA_I_POS))\n\n/* 0x210 : DMA_C1Config */\n#define DMA_C1CONFIG_OFFSET    (0x210)\n#define DMA_E                  DMA_E\n#define DMA_E_POS              (0U)\n#define DMA_E_LEN              (1U)\n#define DMA_E_MSK              (((1U << DMA_E_LEN) - 1) << DMA_E_POS)\n#define DMA_E_UMSK             (~(((1U << DMA_E_LEN) - 1) << DMA_E_POS))\n#define DMA_SRCPERIPHERAL      DMA_SRCPERIPHERAL\n#define DMA_SRCPERIPHERAL_POS  (1U)\n#define DMA_SRCPERIPHERAL_LEN  (5U)\n#define DMA_SRCPERIPHERAL_MSK  (((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS)\n#define DMA_SRCPERIPHERAL_UMSK (~(((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS))\n#define DMA_DSTPERIPHERAL      DMA_DSTPERIPHERAL\n#define DMA_DSTPERIPHERAL_POS  (6U)\n#define DMA_DSTPERIPHERAL_LEN  (5U)\n#define DMA_DSTPERIPHERAL_MSK  (((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS)\n#define DMA_DSTPERIPHERAL_UMSK (~(((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS))\n#define DMA_FLOWCNTRL          DMA_FLOWCNTRL\n#define DMA_FLOWCNTRL_POS      (11U)\n#define DMA_FLOWCNTRL_LEN      (3U)\n#define DMA_FLOWCNTRL_MSK      (((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS)\n#define DMA_FLOWCNTRL_UMSK     (~(((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS))\n#define DMA_IE                 DMA_IE\n#define DMA_IE_POS             (14U)\n#define DMA_IE_LEN             (1U)\n#define DMA_IE_MSK             (((1U << DMA_IE_LEN) - 1) << DMA_IE_POS)\n#define DMA_IE_UMSK            (~(((1U << DMA_IE_LEN) - 1) << DMA_IE_POS))\n#define DMA_ITC                DMA_ITC\n#define DMA_ITC_POS            (15U)\n#define DMA_ITC_LEN            (1U)\n#define DMA_ITC_MSK            (((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS)\n#define DMA_ITC_UMSK           (~(((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS))\n#define DMA_L                  DMA_L\n#define DMA_L_POS              (16U)\n#define DMA_L_LEN              (1U)\n#define DMA_L_MSK              (((1U << DMA_L_LEN) - 1) << DMA_L_POS)\n#define DMA_L_UMSK             (~(((1U << DMA_L_LEN) - 1) << DMA_L_POS))\n#define DMA_A                  DMA_A\n#define DMA_A_POS              (17U)\n#define DMA_A_LEN              (1U)\n#define DMA_A_MSK              (((1U << DMA_A_LEN) - 1) << DMA_A_POS)\n#define DMA_A_UMSK             (~(((1U << DMA_A_LEN) - 1) << DMA_A_POS))\n#define DMA_H                  DMA_H\n#define DMA_H_POS              (18U)\n#define DMA_H_LEN              (1U)\n#define DMA_H_MSK              (((1U << DMA_H_LEN) - 1) << DMA_H_POS)\n#define DMA_H_UMSK             (~(((1U << DMA_H_LEN) - 1) << DMA_H_POS))\n\n/* 0x300 : DMA_C2SrcAddr */\n#define DMA_C2SRCADDR_OFFSET   (0x300)\n#define DMA_SRCADDR            DMA_SRCADDR\n#define DMA_SRCADDR_POS        (0U)\n#define DMA_SRCADDR_LEN        (32U)\n#define DMA_SRCADDR_MSK        (((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS)\n#define DMA_SRCADDR_UMSK       (~(((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS))\n\n/* 0x304 : DMA_C2DstAddr */\n#define DMA_C2DSTADDR_OFFSET   (0x304)\n#define DMA_DSTADDR            DMA_DSTADDR\n#define DMA_DSTADDR_POS        (0U)\n#define DMA_DSTADDR_LEN        (32U)\n#define DMA_DSTADDR_MSK        (((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS)\n#define DMA_DSTADDR_UMSK       (~(((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS))\n\n/* 0x308 : DMA_C2LLI */\n#define DMA_C2LLI_OFFSET       (0x308)\n#define DMA_LLI                DMA_LLI\n#define DMA_LLI_POS            (0U)\n#define DMA_LLI_LEN            (32U)\n#define DMA_LLI_MSK            (((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS)\n#define DMA_LLI_UMSK           (~(((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS))\n\n/* 0x30C : DMA_C2Control */\n#define DMA_C2CONTROL_OFFSET   (0x30C)\n#define DMA_TRANSFERSIZE       DMA_TRANSFERSIZE\n#define DMA_TRANSFERSIZE_POS   (0U)\n#define DMA_TRANSFERSIZE_LEN   (12U)\n#define DMA_TRANSFERSIZE_MSK   (((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS)\n#define DMA_TRANSFERSIZE_UMSK  (~(((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS))\n#define DMA_SBSIZE             DMA_SBSIZE\n#define DMA_SBSIZE_POS         (12U)\n#define DMA_SBSIZE_LEN         (2U)\n#define DMA_SBSIZE_MSK         (((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS)\n#define DMA_SBSIZE_UMSK        (~(((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS))\n#define DMA_DST_MIN_MODE       DMA_DST_MIN_MODE\n#define DMA_DST_MIN_MODE_POS   (14U)\n#define DMA_DST_MIN_MODE_LEN   (1U)\n#define DMA_DST_MIN_MODE_MSK   (((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS)\n#define DMA_DST_MIN_MODE_UMSK  (~(((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS))\n#define DMA_DBSIZE             DMA_DBSIZE\n#define DMA_DBSIZE_POS         (15U)\n#define DMA_DBSIZE_LEN         (2U)\n#define DMA_DBSIZE_MSK         (((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS)\n#define DMA_DBSIZE_UMSK        (~(((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS))\n#define DMA_DST_ADD_MODE       DMA_DST_ADD_MODE\n#define DMA_DST_ADD_MODE_POS   (17U)\n#define DMA_DST_ADD_MODE_LEN   (1U)\n#define DMA_DST_ADD_MODE_MSK   (((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS)\n#define DMA_DST_ADD_MODE_UMSK  (~(((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS))\n#define DMA_SWIDTH             DMA_SWIDTH\n#define DMA_SWIDTH_POS         (18U)\n#define DMA_SWIDTH_LEN         (3U)\n#define DMA_SWIDTH_MSK         (((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS)\n#define DMA_SWIDTH_UMSK        (~(((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS))\n#define DMA_DWIDTH             DMA_DWIDTH\n#define DMA_DWIDTH_POS         (21U)\n#define DMA_DWIDTH_LEN         (3U)\n#define DMA_DWIDTH_MSK         (((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS)\n#define DMA_DWIDTH_UMSK        (~(((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS))\n#define DMA_FIX_CNT            DMA_FIX_CNT\n#define DMA_FIX_CNT_POS        (23U)\n#define DMA_FIX_CNT_LEN        (2U)\n#define DMA_FIX_CNT_MSK        (((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS)\n#define DMA_FIX_CNT_UMSK       (~(((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS))\n#define DMA_SI                 DMA_SI\n#define DMA_SI_POS             (26U)\n#define DMA_SI_LEN             (1U)\n#define DMA_SI_MSK             (((1U << DMA_SI_LEN) - 1) << DMA_SI_POS)\n#define DMA_SI_UMSK            (~(((1U << DMA_SI_LEN) - 1) << DMA_SI_POS))\n#define DMA_DI                 DMA_DI\n#define DMA_DI_POS             (27U)\n#define DMA_DI_LEN             (1U)\n#define DMA_DI_MSK             (((1U << DMA_DI_LEN) - 1) << DMA_DI_POS)\n#define DMA_DI_UMSK            (~(((1U << DMA_DI_LEN) - 1) << DMA_DI_POS))\n#define DMA_PROT               DMA_PROT\n#define DMA_PROT_POS           (28U)\n#define DMA_PROT_LEN           (3U)\n#define DMA_PROT_MSK           (((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS)\n#define DMA_PROT_UMSK          (~(((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS))\n#define DMA_I                  DMA_I\n#define DMA_I_POS              (31U)\n#define DMA_I_LEN              (1U)\n#define DMA_I_MSK              (((1U << DMA_I_LEN) - 1) << DMA_I_POS)\n#define DMA_I_UMSK             (~(((1U << DMA_I_LEN) - 1) << DMA_I_POS))\n\n/* 0x310 : DMA_C2Config */\n#define DMA_C2CONFIG_OFFSET    (0x310)\n#define DMA_E                  DMA_E\n#define DMA_E_POS              (0U)\n#define DMA_E_LEN              (1U)\n#define DMA_E_MSK              (((1U << DMA_E_LEN) - 1) << DMA_E_POS)\n#define DMA_E_UMSK             (~(((1U << DMA_E_LEN) - 1) << DMA_E_POS))\n#define DMA_SRCPERIPHERAL      DMA_SRCPERIPHERAL\n#define DMA_SRCPERIPHERAL_POS  (1U)\n#define DMA_SRCPERIPHERAL_LEN  (5U)\n#define DMA_SRCPERIPHERAL_MSK  (((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS)\n#define DMA_SRCPERIPHERAL_UMSK (~(((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS))\n#define DMA_DSTPERIPHERAL      DMA_DSTPERIPHERAL\n#define DMA_DSTPERIPHERAL_POS  (6U)\n#define DMA_DSTPERIPHERAL_LEN  (5U)\n#define DMA_DSTPERIPHERAL_MSK  (((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS)\n#define DMA_DSTPERIPHERAL_UMSK (~(((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS))\n#define DMA_FLOWCNTRL          DMA_FLOWCNTRL\n#define DMA_FLOWCNTRL_POS      (11U)\n#define DMA_FLOWCNTRL_LEN      (3U)\n#define DMA_FLOWCNTRL_MSK      (((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS)\n#define DMA_FLOWCNTRL_UMSK     (~(((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS))\n#define DMA_IE                 DMA_IE\n#define DMA_IE_POS             (14U)\n#define DMA_IE_LEN             (1U)\n#define DMA_IE_MSK             (((1U << DMA_IE_LEN) - 1) << DMA_IE_POS)\n#define DMA_IE_UMSK            (~(((1U << DMA_IE_LEN) - 1) << DMA_IE_POS))\n#define DMA_ITC                DMA_ITC\n#define DMA_ITC_POS            (15U)\n#define DMA_ITC_LEN            (1U)\n#define DMA_ITC_MSK            (((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS)\n#define DMA_ITC_UMSK           (~(((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS))\n#define DMA_L                  DMA_L\n#define DMA_L_POS              (16U)\n#define DMA_L_LEN              (1U)\n#define DMA_L_MSK              (((1U << DMA_L_LEN) - 1) << DMA_L_POS)\n#define DMA_L_UMSK             (~(((1U << DMA_L_LEN) - 1) << DMA_L_POS))\n#define DMA_A                  DMA_A\n#define DMA_A_POS              (17U)\n#define DMA_A_LEN              (1U)\n#define DMA_A_MSK              (((1U << DMA_A_LEN) - 1) << DMA_A_POS)\n#define DMA_A_UMSK             (~(((1U << DMA_A_LEN) - 1) << DMA_A_POS))\n#define DMA_H                  DMA_H\n#define DMA_H_POS              (18U)\n#define DMA_H_LEN              (1U)\n#define DMA_H_MSK              (((1U << DMA_H_LEN) - 1) << DMA_H_POS)\n#define DMA_H_UMSK             (~(((1U << DMA_H_LEN) - 1) << DMA_H_POS))\n\n/* 0x400 : DMA_C3SrcAddr */\n#define DMA_C3SRCADDR_OFFSET   (0x400)\n#define DMA_SRCADDR            DMA_SRCADDR\n#define DMA_SRCADDR_POS        (0U)\n#define DMA_SRCADDR_LEN        (32U)\n#define DMA_SRCADDR_MSK        (((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS)\n#define DMA_SRCADDR_UMSK       (~(((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS))\n\n/* 0x404 : DMA_C3DstAddr */\n#define DMA_C3DSTADDR_OFFSET   (0x404)\n#define DMA_DSTADDR            DMA_DSTADDR\n#define DMA_DSTADDR_POS        (0U)\n#define DMA_DSTADDR_LEN        (32U)\n#define DMA_DSTADDR_MSK        (((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS)\n#define DMA_DSTADDR_UMSK       (~(((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS))\n\n/* 0x408 : DMA_C3LLI */\n#define DMA_C3LLI_OFFSET       (0x408)\n#define DMA_LLI_POS            (0U)\n#define DMA_LLI_LEN            (32U)\n#define DMA_LLI_MSK            (((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS)\n#define DMA_LLI_UMSK           (~(((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS))\n\n/* 0x40C : DMA_C3Control */\n#define DMA_C3CONTROL_OFFSET   (0x40C)\n#define DMA_TRANSFERSIZE       DMA_TRANSFERSIZE\n#define DMA_TRANSFERSIZE_POS   (0U)\n#define DMA_TRANSFERSIZE_LEN   (12U)\n#define DMA_TRANSFERSIZE_MSK   (((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS)\n#define DMA_TRANSFERSIZE_UMSK  (~(((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS))\n#define DMA_SBSIZE             DMA_SBSIZE\n#define DMA_SBSIZE_POS         (12U)\n#define DMA_SBSIZE_LEN         (2U)\n#define DMA_SBSIZE_MSK         (((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS)\n#define DMA_SBSIZE_UMSK        (~(((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS))\n#define DMA_DST_MIN_MODE       DMA_DST_MIN_MODE\n#define DMA_DST_MIN_MODE_POS   (14U)\n#define DMA_DST_MIN_MODE_LEN   (1U)\n#define DMA_DST_MIN_MODE_MSK   (((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS)\n#define DMA_DST_MIN_MODE_UMSK  (~(((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS))\n#define DMA_DBSIZE             DMA_DBSIZE\n#define DMA_DBSIZE_POS         (15U)\n#define DMA_DBSIZE_LEN         (2U)\n#define DMA_DBSIZE_MSK         (((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS)\n#define DMA_DBSIZE_UMSK        (~(((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS))\n#define DMA_DST_ADD_MODE       DMA_DST_ADD_MODE\n#define DMA_DST_ADD_MODE_POS   (17U)\n#define DMA_DST_ADD_MODE_LEN   (1U)\n#define DMA_DST_ADD_MODE_MSK   (((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS)\n#define DMA_DST_ADD_MODE_UMSK  (~(((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS))\n#define DMA_SWIDTH             DMA_SWIDTH\n#define DMA_SWIDTH_POS         (18U)\n#define DMA_SWIDTH_LEN         (3U)\n#define DMA_SWIDTH_MSK         (((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS)\n#define DMA_SWIDTH_UMSK        (~(((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS))\n#define DMA_DWIDTH             DMA_DWIDTH\n#define DMA_DWIDTH_POS         (21U)\n#define DMA_DWIDTH_LEN         (3U)\n#define DMA_DWIDTH_MSK         (((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS)\n#define DMA_DWIDTH_UMSK        (~(((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS))\n#define DMA_FIX_CNT            DMA_FIX_CNT\n#define DMA_FIX_CNT_POS        (23U)\n#define DMA_FIX_CNT_LEN        (2U)\n#define DMA_FIX_CNT_MSK        (((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS)\n#define DMA_FIX_CNT_UMSK       (~(((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS))\n#define DMA_SI                 DMA_SI\n#define DMA_SI_POS             (26U)\n#define DMA_SI_LEN             (1U)\n#define DMA_SI_MSK             (((1U << DMA_SI_LEN) - 1) << DMA_SI_POS)\n#define DMA_SI_UMSK            (~(((1U << DMA_SI_LEN) - 1) << DMA_SI_POS))\n#define DMA_DI                 DMA_DI\n#define DMA_DI_POS             (27U)\n#define DMA_DI_LEN             (1U)\n#define DMA_DI_MSK             (((1U << DMA_DI_LEN) - 1) << DMA_DI_POS)\n#define DMA_DI_UMSK            (~(((1U << DMA_DI_LEN) - 1) << DMA_DI_POS))\n#define DMA_PROT               DMA_PROT\n#define DMA_PROT_POS           (28U)\n#define DMA_PROT_LEN           (3U)\n#define DMA_PROT_MSK           (((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS)\n#define DMA_PROT_UMSK          (~(((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS))\n#define DMA_I                  DMA_I\n#define DMA_I_POS              (31U)\n#define DMA_I_LEN              (1U)\n#define DMA_I_MSK              (((1U << DMA_I_LEN) - 1) << DMA_I_POS)\n#define DMA_I_UMSK             (~(((1U << DMA_I_LEN) - 1) << DMA_I_POS))\n\n/* 0x410 : DMA_C3Config */\n#define DMA_C3CONFIG_OFFSET    (0x410)\n#define DMA_E                  DMA_E\n#define DMA_E_POS              (0U)\n#define DMA_E_LEN              (1U)\n#define DMA_E_MSK              (((1U << DMA_E_LEN) - 1) << DMA_E_POS)\n#define DMA_E_UMSK             (~(((1U << DMA_E_LEN) - 1) << DMA_E_POS))\n#define DMA_SRCPERIPHERAL      DMA_SRCPERIPHERAL\n#define DMA_SRCPERIPHERAL_POS  (1U)\n#define DMA_SRCPERIPHERAL_LEN  (5U)\n#define DMA_SRCPERIPHERAL_MSK  (((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS)\n#define DMA_SRCPERIPHERAL_UMSK (~(((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS))\n#define DMA_DSTPERIPHERAL      DMA_DSTPERIPHERAL\n#define DMA_DSTPERIPHERAL_POS  (6U)\n#define DMA_DSTPERIPHERAL_LEN  (5U)\n#define DMA_DSTPERIPHERAL_MSK  (((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS)\n#define DMA_DSTPERIPHERAL_UMSK (~(((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS))\n#define DMA_FLOWCNTRL          DMA_FLOWCNTRL\n#define DMA_FLOWCNTRL_POS      (11U)\n#define DMA_FLOWCNTRL_LEN      (3U)\n#define DMA_FLOWCNTRL_MSK      (((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS)\n#define DMA_FLOWCNTRL_UMSK     (~(((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS))\n#define DMA_IE                 DMA_IE\n#define DMA_IE_POS             (14U)\n#define DMA_IE_LEN             (1U)\n#define DMA_IE_MSK             (((1U << DMA_IE_LEN) - 1) << DMA_IE_POS)\n#define DMA_IE_UMSK            (~(((1U << DMA_IE_LEN) - 1) << DMA_IE_POS))\n#define DMA_ITC                DMA_ITC\n#define DMA_ITC_POS            (15U)\n#define DMA_ITC_LEN            (1U)\n#define DMA_ITC_MSK            (((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS)\n#define DMA_ITC_UMSK           (~(((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS))\n#define DMA_L                  DMA_L\n#define DMA_L_POS              (16U)\n#define DMA_L_LEN              (1U)\n#define DMA_L_MSK              (((1U << DMA_L_LEN) - 1) << DMA_L_POS)\n#define DMA_L_UMSK             (~(((1U << DMA_L_LEN) - 1) << DMA_L_POS))\n#define DMA_A                  DMA_A\n#define DMA_A_POS              (17U)\n#define DMA_A_LEN              (1U)\n#define DMA_A_MSK              (((1U << DMA_A_LEN) - 1) << DMA_A_POS)\n#define DMA_A_UMSK             (~(((1U << DMA_A_LEN) - 1) << DMA_A_POS))\n#define DMA_H                  DMA_H\n#define DMA_H_POS              (18U)\n#define DMA_H_LEN              (1U)\n#define DMA_H_MSK              (((1U << DMA_H_LEN) - 1) << DMA_H_POS)\n#define DMA_H_UMSK             (~(((1U << DMA_H_LEN) - 1) << DMA_H_POS))\n\n/* 0x500 : DMA_C4SrcAddr */\n#define DMA_C4SRCADDR_OFFSET   (0x500)\n#define DMA_SRCADDR            DMA_SRCADDR\n#define DMA_SRCADDR_POS        (0U)\n#define DMA_SRCADDR_LEN        (32U)\n#define DMA_SRCADDR_MSK        (((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS)\n#define DMA_SRCADDR_UMSK       (~(((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS))\n\n/* 0x504 : DMA_C4DstAddr */\n#define DMA_C4DSTADDR_OFFSET   (0x504)\n#define DMA_DSTADDR            DMA_DSTADDR\n#define DMA_DSTADDR_POS        (0U)\n#define DMA_DSTADDR_LEN        (32U)\n#define DMA_DSTADDR_MSK        (((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS)\n#define DMA_DSTADDR_UMSK       (~(((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS))\n\n/* 0x508 : DMA_C4LLI */\n#define DMA_C4LLI_OFFSET       (0x508)\n#define DMA_LLI_POS            (0U)\n#define DMA_LLI_LEN            (32U)\n#define DMA_LLI_MSK            (((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS)\n#define DMA_LLI_UMSK           (~(((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS))\n\n/* 0x50C : DMA_C4Control */\n#define DMA_C4CONTROL_OFFSET   (0x50C)\n#define DMA_TRANSFERSIZE       DMA_TRANSFERSIZE\n#define DMA_TRANSFERSIZE_POS   (0U)\n#define DMA_TRANSFERSIZE_LEN   (12U)\n#define DMA_TRANSFERSIZE_MSK   (((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS)\n#define DMA_TRANSFERSIZE_UMSK  (~(((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS))\n#define DMA_SBSIZE             DMA_SBSIZE\n#define DMA_SBSIZE_POS         (12U)\n#define DMA_SBSIZE_LEN         (2U)\n#define DMA_SBSIZE_MSK         (((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS)\n#define DMA_SBSIZE_UMSK        (~(((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS))\n#define DMA_DST_MIN_MODE       DMA_DST_MIN_MODE\n#define DMA_DST_MIN_MODE_POS   (14U)\n#define DMA_DST_MIN_MODE_LEN   (1U)\n#define DMA_DST_MIN_MODE_MSK   (((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS)\n#define DMA_DST_MIN_MODE_UMSK  (~(((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS))\n#define DMA_DBSIZE             DMA_DBSIZE\n#define DMA_DBSIZE_POS         (15U)\n#define DMA_DBSIZE_LEN         (2U)\n#define DMA_DBSIZE_MSK         (((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS)\n#define DMA_DBSIZE_UMSK        (~(((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS))\n#define DMA_DST_ADD_MODE       DMA_DST_ADD_MODE\n#define DMA_DST_ADD_MODE_POS   (17U)\n#define DMA_DST_ADD_MODE_LEN   (1U)\n#define DMA_DST_ADD_MODE_MSK   (((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS)\n#define DMA_DST_ADD_MODE_UMSK  (~(((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS))\n#define DMA_SWIDTH             DMA_SWIDTH\n#define DMA_SWIDTH_POS         (18U)\n#define DMA_SWIDTH_LEN         (3U)\n#define DMA_SWIDTH_MSK         (((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS)\n#define DMA_SWIDTH_UMSK        (~(((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS))\n#define DMA_DWIDTH             DMA_DWIDTH\n#define DMA_DWIDTH_POS         (21U)\n#define DMA_DWIDTH_LEN         (3U)\n#define DMA_DWIDTH_MSK         (((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS)\n#define DMA_DWIDTH_UMSK        (~(((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS))\n#define DMA_FIX_CNT            DMA_FIX_CNT\n#define DMA_FIX_CNT_POS        (23U)\n#define DMA_FIX_CNT_LEN        (2U)\n#define DMA_FIX_CNT_MSK        (((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS)\n#define DMA_FIX_CNT_UMSK       (~(((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS))\n#define DMA_SI                 DMA_SI\n#define DMA_SI_POS             (26U)\n#define DMA_SI_LEN             (1U)\n#define DMA_SI_MSK             (((1U << DMA_SI_LEN) - 1) << DMA_SI_POS)\n#define DMA_SI_UMSK            (~(((1U << DMA_SI_LEN) - 1) << DMA_SI_POS))\n#define DMA_DI                 DMA_DI\n#define DMA_DI_POS             (27U)\n#define DMA_DI_LEN             (1U)\n#define DMA_DI_MSK             (((1U << DMA_DI_LEN) - 1) << DMA_DI_POS)\n#define DMA_DI_UMSK            (~(((1U << DMA_DI_LEN) - 1) << DMA_DI_POS))\n#define DMA_PROT               DMA_PROT\n#define DMA_PROT_POS           (28U)\n#define DMA_PROT_LEN           (3U)\n#define DMA_PROT_MSK           (((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS)\n#define DMA_PROT_UMSK          (~(((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS))\n#define DMA_I                  DMA_I\n#define DMA_I_POS              (31U)\n#define DMA_I_LEN              (1U)\n#define DMA_I_MSK              (((1U << DMA_I_LEN) - 1) << DMA_I_POS)\n#define DMA_I_UMSK             (~(((1U << DMA_I_LEN) - 1) << DMA_I_POS))\n\n/* 0x510 : DMA_C4Config */\n#define DMA_C4CONFIG_OFFSET    (0x510)\n#define DMA_E                  DMA_E\n#define DMA_E_POS              (0U)\n#define DMA_E_LEN              (1U)\n#define DMA_E_MSK              (((1U << DMA_E_LEN) - 1) << DMA_E_POS)\n#define DMA_E_UMSK             (~(((1U << DMA_E_LEN) - 1) << DMA_E_POS))\n#define DMA_SRCPERIPHERAL      DMA_SRCPERIPHERAL\n#define DMA_SRCPERIPHERAL_POS  (1U)\n#define DMA_SRCPERIPHERAL_LEN  (5U)\n#define DMA_SRCPERIPHERAL_MSK  (((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS)\n#define DMA_SRCPERIPHERAL_UMSK (~(((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS))\n#define DMA_DSTPERIPHERAL      DMA_DSTPERIPHERAL\n#define DMA_DSTPERIPHERAL_POS  (6U)\n#define DMA_DSTPERIPHERAL_LEN  (5U)\n#define DMA_DSTPERIPHERAL_MSK  (((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS)\n#define DMA_DSTPERIPHERAL_UMSK (~(((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS))\n#define DMA_FLOWCNTRL          DMA_FLOWCNTRL\n#define DMA_FLOWCNTRL_POS      (11U)\n#define DMA_FLOWCNTRL_LEN      (3U)\n#define DMA_FLOWCNTRL_MSK      (((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS)\n#define DMA_FLOWCNTRL_UMSK     (~(((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS))\n#define DMA_IE                 DMA_IE\n#define DMA_IE_POS             (14U)\n#define DMA_IE_LEN             (1U)\n#define DMA_IE_MSK             (((1U << DMA_IE_LEN) - 1) << DMA_IE_POS)\n#define DMA_IE_UMSK            (~(((1U << DMA_IE_LEN) - 1) << DMA_IE_POS))\n#define DMA_ITC                DMA_ITC\n#define DMA_ITC_POS            (15U)\n#define DMA_ITC_LEN            (1U)\n#define DMA_ITC_MSK            (((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS)\n#define DMA_ITC_UMSK           (~(((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS))\n#define DMA_L                  DMA_L\n#define DMA_L_POS              (16U)\n#define DMA_L_LEN              (1U)\n#define DMA_L_MSK              (((1U << DMA_L_LEN) - 1) << DMA_L_POS)\n#define DMA_L_UMSK             (~(((1U << DMA_L_LEN) - 1) << DMA_L_POS))\n#define DMA_A                  DMA_A\n#define DMA_A_POS              (17U)\n#define DMA_A_LEN              (1U)\n#define DMA_A_MSK              (((1U << DMA_A_LEN) - 1) << DMA_A_POS)\n#define DMA_A_UMSK             (~(((1U << DMA_A_LEN) - 1) << DMA_A_POS))\n#define DMA_H                  DMA_H\n#define DMA_H_POS              (18U)\n#define DMA_H_LEN              (1U)\n#define DMA_H_MSK              (((1U << DMA_H_LEN) - 1) << DMA_H_POS)\n#define DMA_H_UMSK             (~(((1U << DMA_H_LEN) - 1) << DMA_H_POS))\n\n/* 0x600 : DMA_C5SrcAddr */\n#define DMA_C5SRCADDR_OFFSET   (0x600)\n#define DMA_SRCADDR            DMA_SRCADDR\n#define DMA_SRCADDR_POS        (0U)\n#define DMA_SRCADDR_LEN        (32U)\n#define DMA_SRCADDR_MSK        (((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS)\n#define DMA_SRCADDR_UMSK       (~(((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS))\n\n/* 0x604 : DMA_C5DstAddr */\n#define DMA_C5DSTADDR_OFFSET   (0x604)\n#define DMA_DSTADDR            DMA_DSTADDR\n#define DMA_DSTADDR_POS        (0U)\n#define DMA_DSTADDR_LEN        (32U)\n#define DMA_DSTADDR_MSK        (((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS)\n#define DMA_DSTADDR_UMSK       (~(((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS))\n\n/* 0x608 : DMA_C5LLI */\n#define DMA_C5LLI_OFFSET       (0x608)\n#define DMA_LLI_POS            (0U)\n#define DMA_LLI_LEN            (32U)\n#define DMA_LLI_MSK            (((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS)\n#define DMA_LLI_UMSK           (~(((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS))\n\n/* 0x60C : DMA_C5Control */\n#define DMA_C5CONTROL_OFFSET   (0x60C)\n#define DMA_TRANSFERSIZE       DMA_TRANSFERSIZE\n#define DMA_TRANSFERSIZE_POS   (0U)\n#define DMA_TRANSFERSIZE_LEN   (12U)\n#define DMA_TRANSFERSIZE_MSK   (((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS)\n#define DMA_TRANSFERSIZE_UMSK  (~(((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS))\n#define DMA_SBSIZE             DMA_SBSIZE\n#define DMA_SBSIZE_POS         (12U)\n#define DMA_SBSIZE_LEN         (2U)\n#define DMA_SBSIZE_MSK         (((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS)\n#define DMA_SBSIZE_UMSK        (~(((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS))\n#define DMA_DST_MIN_MODE       DMA_DST_MIN_MODE\n#define DMA_DST_MIN_MODE_POS   (14U)\n#define DMA_DST_MIN_MODE_LEN   (1U)\n#define DMA_DST_MIN_MODE_MSK   (((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS)\n#define DMA_DST_MIN_MODE_UMSK  (~(((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS))\n#define DMA_DBSIZE             DMA_DBSIZE\n#define DMA_DBSIZE_POS         (15U)\n#define DMA_DBSIZE_LEN         (2U)\n#define DMA_DBSIZE_MSK         (((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS)\n#define DMA_DBSIZE_UMSK        (~(((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS))\n#define DMA_DST_ADD_MODE       DMA_DST_ADD_MODE\n#define DMA_DST_ADD_MODE_POS   (17U)\n#define DMA_DST_ADD_MODE_LEN   (1U)\n#define DMA_DST_ADD_MODE_MSK   (((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS)\n#define DMA_DST_ADD_MODE_UMSK  (~(((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS))\n#define DMA_SWIDTH             DMA_SWIDTH\n#define DMA_SWIDTH_POS         (18U)\n#define DMA_SWIDTH_LEN         (3U)\n#define DMA_SWIDTH_MSK         (((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS)\n#define DMA_SWIDTH_UMSK        (~(((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS))\n#define DMA_DWIDTH             DMA_DWIDTH\n#define DMA_DWIDTH_POS         (21U)\n#define DMA_DWIDTH_LEN         (3U)\n#define DMA_DWIDTH_MSK         (((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS)\n#define DMA_DWIDTH_UMSK        (~(((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS))\n#define DMA_FIX_CNT            DMA_FIX_CNT\n#define DMA_FIX_CNT_POS        (23U)\n#define DMA_FIX_CNT_LEN        (2U)\n#define DMA_FIX_CNT_MSK        (((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS)\n#define DMA_FIX_CNT_UMSK       (~(((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS))\n#define DMA_SI                 DMA_SI\n#define DMA_SI_POS             (26U)\n#define DMA_SI_LEN             (1U)\n#define DMA_SI_MSK             (((1U << DMA_SI_LEN) - 1) << DMA_SI_POS)\n#define DMA_SI_UMSK            (~(((1U << DMA_SI_LEN) - 1) << DMA_SI_POS))\n#define DMA_DI                 DMA_DI\n#define DMA_DI_POS             (27U)\n#define DMA_DI_LEN             (1U)\n#define DMA_DI_MSK             (((1U << DMA_DI_LEN) - 1) << DMA_DI_POS)\n#define DMA_DI_UMSK            (~(((1U << DMA_DI_LEN) - 1) << DMA_DI_POS))\n#define DMA_PROT               DMA_PROT\n#define DMA_PROT_POS           (28U)\n#define DMA_PROT_LEN           (3U)\n#define DMA_PROT_MSK           (((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS)\n#define DMA_PROT_UMSK          (~(((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS))\n#define DMA_I                  DMA_I\n#define DMA_I_POS              (31U)\n#define DMA_I_LEN              (1U)\n#define DMA_I_MSK              (((1U << DMA_I_LEN) - 1) << DMA_I_POS)\n#define DMA_I_UMSK             (~(((1U << DMA_I_LEN) - 1) << DMA_I_POS))\n\n/* 0x610 : DMA_C5Config */\n#define DMA_C5CONFIG_OFFSET    (0x610)\n#define DMA_E                  DMA_E\n#define DMA_E_POS              (0U)\n#define DMA_E_LEN              (1U)\n#define DMA_E_MSK              (((1U << DMA_E_LEN) - 1) << DMA_E_POS)\n#define DMA_E_UMSK             (~(((1U << DMA_E_LEN) - 1) << DMA_E_POS))\n#define DMA_SRCPERIPHERAL      DMA_SRCPERIPHERAL\n#define DMA_SRCPERIPHERAL_POS  (1U)\n#define DMA_SRCPERIPHERAL_LEN  (5U)\n#define DMA_SRCPERIPHERAL_MSK  (((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS)\n#define DMA_SRCPERIPHERAL_UMSK (~(((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS))\n#define DMA_DSTPERIPHERAL      DMA_DSTPERIPHERAL\n#define DMA_DSTPERIPHERAL_POS  (6U)\n#define DMA_DSTPERIPHERAL_LEN  (5U)\n#define DMA_DSTPERIPHERAL_MSK  (((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS)\n#define DMA_DSTPERIPHERAL_UMSK (~(((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS))\n#define DMA_FLOWCNTRL          DMA_FLOWCNTRL\n#define DMA_FLOWCNTRL_POS      (11U)\n#define DMA_FLOWCNTRL_LEN      (3U)\n#define DMA_FLOWCNTRL_MSK      (((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS)\n#define DMA_FLOWCNTRL_UMSK     (~(((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS))\n#define DMA_IE                 DMA_IE\n#define DMA_IE_POS             (14U)\n#define DMA_IE_LEN             (1U)\n#define DMA_IE_MSK             (((1U << DMA_IE_LEN) - 1) << DMA_IE_POS)\n#define DMA_IE_UMSK            (~(((1U << DMA_IE_LEN) - 1) << DMA_IE_POS))\n#define DMA_ITC                DMA_ITC\n#define DMA_ITC_POS            (15U)\n#define DMA_ITC_LEN            (1U)\n#define DMA_ITC_MSK            (((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS)\n#define DMA_ITC_UMSK           (~(((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS))\n#define DMA_L                  DMA_L\n#define DMA_L_POS              (16U)\n#define DMA_L_LEN              (1U)\n#define DMA_L_MSK              (((1U << DMA_L_LEN) - 1) << DMA_L_POS)\n#define DMA_L_UMSK             (~(((1U << DMA_L_LEN) - 1) << DMA_L_POS))\n#define DMA_A                  DMA_A\n#define DMA_A_POS              (17U)\n#define DMA_A_LEN              (1U)\n#define DMA_A_MSK              (((1U << DMA_A_LEN) - 1) << DMA_A_POS)\n#define DMA_A_UMSK             (~(((1U << DMA_A_LEN) - 1) << DMA_A_POS))\n#define DMA_H                  DMA_H\n#define DMA_H_POS              (18U)\n#define DMA_H_LEN              (1U)\n#define DMA_H_MSK              (((1U << DMA_H_LEN) - 1) << DMA_H_POS)\n#define DMA_H_UMSK             (~(((1U << DMA_H_LEN) - 1) << DMA_H_POS))\n\n/* 0x700 : DMA_C6SrcAddr */\n#define DMA_C6SRCADDR_OFFSET   (0x700)\n#define DMA_SRCADDR            DMA_SRCADDR\n#define DMA_SRCADDR_POS        (0U)\n#define DMA_SRCADDR_LEN        (32U)\n#define DMA_SRCADDR_MSK        (((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS)\n#define DMA_SRCADDR_UMSK       (~(((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS))\n\n/* 0x704 : DMA_C6DstAddr */\n#define DMA_C6DSTADDR_OFFSET   (0x704)\n#define DMA_DSTADDR            DMA_DSTADDR\n#define DMA_DSTADDR_POS        (0U)\n#define DMA_DSTADDR_LEN        (32U)\n#define DMA_DSTADDR_MSK        (((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS)\n#define DMA_DSTADDR_UMSK       (~(((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS))\n\n/* 0x708 : DMA_C6LLI */\n#define DMA_C6LLI_OFFSET       (0x708)\n#define DMA_LLI_POS            (0U)\n#define DMA_LLI_LEN            (32U)\n#define DMA_LLI_MSK            (((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS)\n#define DMA_LLI_UMSK           (~(((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS))\n\n/* 0x70C : DMA_C6Control */\n#define DMA_C6CONTROL_OFFSET   (0x70C)\n#define DMA_TRANSFERSIZE       DMA_TRANSFERSIZE\n#define DMA_TRANSFERSIZE_POS   (0U)\n#define DMA_TRANSFERSIZE_LEN   (12U)\n#define DMA_TRANSFERSIZE_MSK   (((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS)\n#define DMA_TRANSFERSIZE_UMSK  (~(((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS))\n#define DMA_SBSIZE             DMA_SBSIZE\n#define DMA_SBSIZE_POS         (12U)\n#define DMA_SBSIZE_LEN         (2U)\n#define DMA_SBSIZE_MSK         (((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS)\n#define DMA_SBSIZE_UMSK        (~(((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS))\n#define DMA_DST_MIN_MODE       DMA_DST_MIN_MODE\n#define DMA_DST_MIN_MODE_POS   (14U)\n#define DMA_DST_MIN_MODE_LEN   (1U)\n#define DMA_DST_MIN_MODE_MSK   (((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS)\n#define DMA_DST_MIN_MODE_UMSK  (~(((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS))\n#define DMA_DBSIZE             DMA_DBSIZE\n#define DMA_DBSIZE_POS         (15U)\n#define DMA_DBSIZE_LEN         (2U)\n#define DMA_DBSIZE_MSK         (((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS)\n#define DMA_DBSIZE_UMSK        (~(((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS))\n#define DMA_DST_ADD_MODE       DMA_DST_ADD_MODE\n#define DMA_DST_ADD_MODE_POS   (17U)\n#define DMA_DST_ADD_MODE_LEN   (1U)\n#define DMA_DST_ADD_MODE_MSK   (((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS)\n#define DMA_DST_ADD_MODE_UMSK  (~(((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS))\n#define DMA_SWIDTH             DMA_SWIDTH\n#define DMA_SWIDTH_POS         (18U)\n#define DMA_SWIDTH_LEN         (3U)\n#define DMA_SWIDTH_MSK         (((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS)\n#define DMA_SWIDTH_UMSK        (~(((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS))\n#define DMA_DWIDTH             DMA_DWIDTH\n#define DMA_DWIDTH_POS         (21U)\n#define DMA_DWIDTH_LEN         (3U)\n#define DMA_DWIDTH_MSK         (((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS)\n#define DMA_DWIDTH_UMSK        (~(((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS))\n#define DMA_FIX_CNT            DMA_FIX_CNT\n#define DMA_FIX_CNT_POS        (23U)\n#define DMA_FIX_CNT_LEN        (2U)\n#define DMA_FIX_CNT_MSK        (((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS)\n#define DMA_FIX_CNT_UMSK       (~(((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS))\n#define DMA_SI                 DMA_SI\n#define DMA_SI_POS             (26U)\n#define DMA_SI_LEN             (1U)\n#define DMA_SI_MSK             (((1U << DMA_SI_LEN) - 1) << DMA_SI_POS)\n#define DMA_SI_UMSK            (~(((1U << DMA_SI_LEN) - 1) << DMA_SI_POS))\n#define DMA_DI                 DMA_DI\n#define DMA_DI_POS             (27U)\n#define DMA_DI_LEN             (1U)\n#define DMA_DI_MSK             (((1U << DMA_DI_LEN) - 1) << DMA_DI_POS)\n#define DMA_DI_UMSK            (~(((1U << DMA_DI_LEN) - 1) << DMA_DI_POS))\n#define DMA_PROT               DMA_PROT\n#define DMA_PROT_POS           (28U)\n#define DMA_PROT_LEN           (3U)\n#define DMA_PROT_MSK           (((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS)\n#define DMA_PROT_UMSK          (~(((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS))\n#define DMA_I                  DMA_I\n#define DMA_I_POS              (31U)\n#define DMA_I_LEN              (1U)\n#define DMA_I_MSK              (((1U << DMA_I_LEN) - 1) << DMA_I_POS)\n#define DMA_I_UMSK             (~(((1U << DMA_I_LEN) - 1) << DMA_I_POS))\n\n/* 0x710 : DMA_C6Config */\n#define DMA_C6CONFIG_OFFSET    (0x710)\n#define DMA_E                  DMA_E\n#define DMA_E_POS              (0U)\n#define DMA_E_LEN              (1U)\n#define DMA_E_MSK              (((1U << DMA_E_LEN) - 1) << DMA_E_POS)\n#define DMA_E_UMSK             (~(((1U << DMA_E_LEN) - 1) << DMA_E_POS))\n#define DMA_SRCPERIPHERAL      DMA_SRCPERIPHERAL\n#define DMA_SRCPERIPHERAL_POS  (1U)\n#define DMA_SRCPERIPHERAL_LEN  (5U)\n#define DMA_SRCPERIPHERAL_MSK  (((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS)\n#define DMA_SRCPERIPHERAL_UMSK (~(((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS))\n#define DMA_DSTPERIPHERAL      DMA_DSTPERIPHERAL\n#define DMA_DSTPERIPHERAL_POS  (6U)\n#define DMA_DSTPERIPHERAL_LEN  (5U)\n#define DMA_DSTPERIPHERAL_MSK  (((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS)\n#define DMA_DSTPERIPHERAL_UMSK (~(((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS))\n#define DMA_FLOWCNTRL          DMA_FLOWCNTRL\n#define DMA_FLOWCNTRL_POS      (11U)\n#define DMA_FLOWCNTRL_LEN      (3U)\n#define DMA_FLOWCNTRL_MSK      (((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS)\n#define DMA_FLOWCNTRL_UMSK     (~(((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS))\n#define DMA_IE                 DMA_IE\n#define DMA_IE_POS             (14U)\n#define DMA_IE_LEN             (1U)\n#define DMA_IE_MSK             (((1U << DMA_IE_LEN) - 1) << DMA_IE_POS)\n#define DMA_IE_UMSK            (~(((1U << DMA_IE_LEN) - 1) << DMA_IE_POS))\n#define DMA_ITC                DMA_ITC\n#define DMA_ITC_POS            (15U)\n#define DMA_ITC_LEN            (1U)\n#define DMA_ITC_MSK            (((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS)\n#define DMA_ITC_UMSK           (~(((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS))\n#define DMA_L                  DMA_L\n#define DMA_L_POS              (16U)\n#define DMA_L_LEN              (1U)\n#define DMA_L_MSK              (((1U << DMA_L_LEN) - 1) << DMA_L_POS)\n#define DMA_L_UMSK             (~(((1U << DMA_L_LEN) - 1) << DMA_L_POS))\n#define DMA_A                  DMA_A\n#define DMA_A_POS              (17U)\n#define DMA_A_LEN              (1U)\n#define DMA_A_MSK              (((1U << DMA_A_LEN) - 1) << DMA_A_POS)\n#define DMA_A_UMSK             (~(((1U << DMA_A_LEN) - 1) << DMA_A_POS))\n#define DMA_H                  DMA_H\n#define DMA_H_POS              (18U)\n#define DMA_H_LEN              (1U)\n#define DMA_H_MSK              (((1U << DMA_H_LEN) - 1) << DMA_H_POS)\n#define DMA_H_UMSK             (~(((1U << DMA_H_LEN) - 1) << DMA_H_POS))\n\n/* 0x800 : DMA_C7SrcAddr */\n#define DMA_C7SRCADDR_OFFSET   (0x800)\n#define DMA_SRCADDR            DMA_SRCADDR\n#define DMA_SRCADDR_POS        (0U)\n#define DMA_SRCADDR_LEN        (32U)\n#define DMA_SRCADDR_MSK        (((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS)\n#define DMA_SRCADDR_UMSK       (~(((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS))\n\n/* 0x804 : DMA_C7DstAddr */\n#define DMA_C7DSTADDR_OFFSET   (0x804)\n#define DMA_DSTADDR            DMA_DSTADDR\n#define DMA_DSTADDR_POS        (0U)\n#define DMA_DSTADDR_LEN        (32U)\n#define DMA_DSTADDR_MSK        (((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS)\n#define DMA_DSTADDR_UMSK       (~(((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS))\n\n/* 0x808 : DMA_C7LLI */\n#define DMA_C7LLI_OFFSET       (0x808)\n#define DMA_LLI_POS            (0U)\n#define DMA_LLI_LEN            (32U)\n#define DMA_LLI_MSK            (((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS)\n#define DMA_LLI_UMSK           (~(((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS))\n\n/* 0x80C : DMA_C7Control */\n#define DMA_C7CONTROL_OFFSET   (0x80C)\n#define DMA_TRANSFERSIZE       DMA_TRANSFERSIZE\n#define DMA_TRANSFERSIZE_POS   (0U)\n#define DMA_TRANSFERSIZE_LEN   (12U)\n#define DMA_TRANSFERSIZE_MSK   (((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS)\n#define DMA_TRANSFERSIZE_UMSK  (~(((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS))\n#define DMA_SBSIZE             DMA_SBSIZE\n#define DMA_SBSIZE_POS         (12U)\n#define DMA_SBSIZE_LEN         (2U)\n#define DMA_SBSIZE_MSK         (((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS)\n#define DMA_SBSIZE_UMSK        (~(((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS))\n#define DMA_DST_MIN_MODE       DMA_DST_MIN_MODE\n#define DMA_DST_MIN_MODE_POS   (14U)\n#define DMA_DST_MIN_MODE_LEN   (1U)\n#define DMA_DST_MIN_MODE_MSK   (((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS)\n#define DMA_DST_MIN_MODE_UMSK  (~(((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS))\n#define DMA_DBSIZE             DMA_DBSIZE\n#define DMA_DBSIZE_POS         (15U)\n#define DMA_DBSIZE_LEN         (2U)\n#define DMA_DBSIZE_MSK         (((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS)\n#define DMA_DBSIZE_UMSK        (~(((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS))\n#define DMA_DST_ADD_MODE       DMA_DST_ADD_MODE\n#define DMA_DST_ADD_MODE_POS   (17U)\n#define DMA_DST_ADD_MODE_LEN   (1U)\n#define DMA_DST_ADD_MODE_MSK   (((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS)\n#define DMA_DST_ADD_MODE_UMSK  (~(((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS))\n#define DMA_SWIDTH             DMA_SWIDTH\n#define DMA_SWIDTH_POS         (18U)\n#define DMA_SWIDTH_LEN         (3U)\n#define DMA_SWIDTH_MSK         (((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS)\n#define DMA_SWIDTH_UMSK        (~(((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS))\n#define DMA_DWIDTH             DMA_DWIDTH\n#define DMA_DWIDTH_POS         (21U)\n#define DMA_DWIDTH_LEN         (3U)\n#define DMA_DWIDTH_MSK         (((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS)\n#define DMA_DWIDTH_UMSK        (~(((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS))\n#define DMA_FIX_CNT            DMA_FIX_CNT\n#define DMA_FIX_CNT_POS        (23U)\n#define DMA_FIX_CNT_LEN        (2U)\n#define DMA_FIX_CNT_MSK        (((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS)\n#define DMA_FIX_CNT_UMSK       (~(((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS))\n#define DMA_SI                 DMA_SI\n#define DMA_SI_POS             (26U)\n#define DMA_SI_LEN             (1U)\n#define DMA_SI_MSK             (((1U << DMA_SI_LEN) - 1) << DMA_SI_POS)\n#define DMA_SI_UMSK            (~(((1U << DMA_SI_LEN) - 1) << DMA_SI_POS))\n#define DMA_DI                 DMA_DI\n#define DMA_DI_POS             (27U)\n#define DMA_DI_LEN             (1U)\n#define DMA_DI_MSK             (((1U << DMA_DI_LEN) - 1) << DMA_DI_POS)\n#define DMA_DI_UMSK            (~(((1U << DMA_DI_LEN) - 1) << DMA_DI_POS))\n#define DMA_PROT               DMA_PROT\n#define DMA_PROT_POS           (28U)\n#define DMA_PROT_LEN           (3U)\n#define DMA_PROT_MSK           (((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS)\n#define DMA_PROT_UMSK          (~(((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS))\n#define DMA_I                  DMA_I\n#define DMA_I_POS              (31U)\n#define DMA_I_LEN              (1U)\n#define DMA_I_MSK              (((1U << DMA_I_LEN) - 1) << DMA_I_POS)\n#define DMA_I_UMSK             (~(((1U << DMA_I_LEN) - 1) << DMA_I_POS))\n\n/* 0x810 : DMA_C7Config */\n#define DMA_C7CONFIG_OFFSET    (0x810)\n#define DMA_E                  DMA_E\n#define DMA_E_POS              (0U)\n#define DMA_E_LEN              (1U)\n#define DMA_E_MSK              (((1U << DMA_E_LEN) - 1) << DMA_E_POS)\n#define DMA_E_UMSK             (~(((1U << DMA_E_LEN) - 1) << DMA_E_POS))\n#define DMA_SRCPERIPHERAL      DMA_SRCPERIPHERAL\n#define DMA_SRCPERIPHERAL_POS  (1U)\n#define DMA_SRCPERIPHERAL_LEN  (5U)\n#define DMA_SRCPERIPHERAL_MSK  (((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS)\n#define DMA_SRCPERIPHERAL_UMSK (~(((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS))\n#define DMA_DSTPERIPHERAL      DMA_DSTPERIPHERAL\n#define DMA_DSTPERIPHERAL_POS  (6U)\n#define DMA_DSTPERIPHERAL_LEN  (5U)\n#define DMA_DSTPERIPHERAL_MSK  (((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS)\n#define DMA_DSTPERIPHERAL_UMSK (~(((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS))\n#define DMA_FLOWCNTRL          DMA_FLOWCNTRL\n#define DMA_FLOWCNTRL_POS      (11U)\n#define DMA_FLOWCNTRL_LEN      (3U)\n#define DMA_FLOWCNTRL_MSK      (((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS)\n#define DMA_FLOWCNTRL_UMSK     (~(((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS))\n#define DMA_IE                 DMA_IE\n#define DMA_IE_POS             (14U)\n#define DMA_IE_LEN             (1U)\n#define DMA_IE_MSK             (((1U << DMA_IE_LEN) - 1) << DMA_IE_POS)\n#define DMA_IE_UMSK            (~(((1U << DMA_IE_LEN) - 1) << DMA_IE_POS))\n#define DMA_ITC                DMA_ITC\n#define DMA_ITC_POS            (15U)\n#define DMA_ITC_LEN            (1U)\n#define DMA_ITC_MSK            (((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS)\n#define DMA_ITC_UMSK           (~(((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS))\n#define DMA_L                  DMA_L\n#define DMA_L_POS              (16U)\n#define DMA_L_LEN              (1U)\n#define DMA_L_MSK              (((1U << DMA_L_LEN) - 1) << DMA_L_POS)\n#define DMA_L_UMSK             (~(((1U << DMA_L_LEN) - 1) << DMA_L_POS))\n#define DMA_A                  DMA_A\n#define DMA_A_POS              (17U)\n#define DMA_A_LEN              (1U)\n#define DMA_A_MSK              (((1U << DMA_A_LEN) - 1) << DMA_A_POS)\n#define DMA_A_UMSK             (~(((1U << DMA_A_LEN) - 1) << DMA_A_POS))\n#define DMA_H                  DMA_H\n#define DMA_H_POS              (18U)\n#define DMA_H_LEN              (1U)\n#define DMA_H_MSK              (((1U << DMA_H_LEN) - 1) << DMA_H_POS)\n#define DMA_H_UMSK             (~(((1U << DMA_H_LEN) - 1) << DMA_H_POS))\n\n\nstruct  dma_reg\n{\n    /* 0x0 : DMA_IntStatus */\n    union\n    {\n        struct\n        {\n            uint32_t IntStatus                      :  8; /* [ 7: 0],          r,        0x0 */\n            uint32_t reserved_8_31                  : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_IntStatus;\n\n    /* 0x4 : DMA_IntTCStatus */\n    union\n    {\n        struct\n        {\n            uint32_t IntTCStatus                    :  8; /* [ 7: 0],          r,        0x0 */\n            uint32_t reserved_8_31                  : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_IntTCStatus;\n\n    /* 0x8 : DMA_IntTCClear */\n    union\n    {\n        struct\n        {\n            uint32_t IntTCClear                     :  8; /* [ 7: 0],          w,        0x0 */\n            uint32_t reserved_8_31                  : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_IntTCClear;\n\n    /* 0xC : DMA_IntErrorStatus */\n    union\n    {\n        struct\n        {\n            uint32_t IntErrorStatus                 :  8; /* [ 7: 0],          r,        0x0 */\n            uint32_t reserved_8_31                  : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_IntErrorStatus;\n\n    /* 0x10 : DMA_IntErrClr */\n    union\n    {\n        struct\n        {\n            uint32_t IntErrClr                      :  8; /* [ 7: 0],          w,        0x0 */\n            uint32_t reserved_8_31                  : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_IntErrClr;\n\n    /* 0x14 : DMA_RawIntTCStatus */\n    union\n    {\n        struct\n        {\n            uint32_t RawIntTCStatus                 :  8; /* [ 7: 0],          r,        0x0 */\n            uint32_t reserved_8_31                  : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_RawIntTCStatus;\n\n    /* 0x18 : DMA_RawIntErrorStatus */\n    union\n    {\n        struct\n        {\n            uint32_t RawIntErrorStatus              :  8; /* [ 7: 0],          r,        0x0 */\n            uint32_t reserved_8_31                  : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_RawIntErrorStatus;\n\n    /* 0x1C : DMA_EnbldChns */\n    union\n    {\n        struct\n        {\n            uint32_t EnabledChannels                :  8; /* [ 7: 0],          r,        0x0 */\n            uint32_t reserved_8_31                  : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_EnbldChns;\n\n    /* 0x20 : DMA_SoftBReq */\n    union\n    {\n        struct\n        {\n            uint32_t SoftBReq                       : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_SoftBReq;\n\n    /* 0x24 : DMA_SoftSReq */\n    union\n    {\n        struct\n        {\n            uint32_t SoftSReq                       : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_SoftSReq;\n\n    /* 0x28 : DMA_SoftLBReq */\n    union\n    {\n        struct\n        {\n            uint32_t SoftLBReq                      : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_SoftLBReq;\n\n    /* 0x2C : DMA_SoftLSReq */\n    union\n    {\n        struct\n        {\n            uint32_t SoftLSReq                      : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_SoftLSReq;\n\n    /* 0x30 : DMA_Top_Config */\n    union\n    {\n        struct\n        {\n            uint32_t E                              :  1; /* [    0],        r/w,        0x0 */\n            uint32_t M                              :  1; /* [    1],        r/w,        0x0 */\n            uint32_t reserved_2_31                  : 30; /* [31: 2],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_Top_Config;\n\n    /* 0x34 : DMA_Sync */\n    union\n    {\n        struct\n        {\n            uint32_t DMA_Sync                       : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_Sync;\n\n    /* 0x38  reserved */\n    uint8_t RESERVED0x38[200];\n\n    /* 0x100 : DMA_C0SrcAddr */\n    union\n    {\n        struct\n        {\n            uint32_t SrcAddr                        : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C0SrcAddr;\n\n    /* 0x104 : DMA_C0DstAddr */\n    union\n    {\n        struct\n        {\n            uint32_t DstAddr                        : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C0DstAddr;\n\n    /* 0x108 : DMA_C0LLI */\n    union\n    {\n        struct\n        {\n            uint32_t LLI                            : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C0LLI;\n\n    /* 0x10C : DMA_C0Control */\n    union\n    {\n        struct\n        {\n            uint32_t TransferSize                   : 12; /* [11: 0],        r/w,        0x0 */\n            uint32_t SBSize                         :  2; /* [13:12],        r/w,        0x1 */\n            uint32_t dst_min_mode                   :  1; /* [   14],        r/w,        0x0 */\n            uint32_t DBSize                         :  2; /* [16:15],        r/w,        0x1 */\n            uint32_t dst_add_mode                   :  1; /* [   17],        r/w,        0x0 */\n            uint32_t SWidth                         :  2; /* [19:18],        r/w,        0x2 */\n            uint32_t reserved_20                    :  1; /* [   20],       rsvd,        0x0 */\n            uint32_t DWidth                         :  2; /* [22:21],        r/w,        0x2 */\n            uint32_t fix_cnt                        :  2; /* [24:23],        r/w,        0x0 */\n            uint32_t SLargerD                       :  1; /* [   25],        r/w,        0x0 */\n            uint32_t SI                             :  1; /* [   26],        r/w,        0x1 */\n            uint32_t DI                             :  1; /* [   27],        r/w,        0x1 */\n            uint32_t Prot                           :  3; /* [30:28],        r/w,        0x0 */\n            uint32_t I                              :  1; /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C0Control;\n\n    /* 0x110 : DMA_C0Config */\n    union\n    {\n        struct\n        {\n            uint32_t E                              :  1; /* [    0],        r/w,        0x0 */\n            uint32_t SrcPeripheral                  :  5; /* [ 5: 1],        r/w,        0x0 */\n            uint32_t DstPeripheral                  :  5; /* [10: 6],        r/w,        0x0 */\n            uint32_t FlowCntrl                      :  3; /* [13:11],        r/w,        0x0 */\n            uint32_t IE                             :  1; /* [   14],        r/w,        0x0 */\n            uint32_t ITC                            :  1; /* [   15],        r/w,        0x0 */\n            uint32_t L                              :  1; /* [   16],        r/w,        0x0 */\n            uint32_t A                              :  1; /* [   17],          r,        0x0 */\n            uint32_t H                              :  1; /* [   18],        r/w,        0x0 */\n            uint32_t reserved_19                    :  1; /* [   19],       rsvd,        0x0 */\n            uint32_t LLICounter                     : 10; /* [29:20],          r,        0x0 */\n            uint32_t reserved_30_31                 :  2; /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C0Config;\n\n    /* 0x114  reserved */\n    uint8_t RESERVED0x114[236];\n\n    /* 0x200 : DMA_C1SrcAddr */\n    union\n    {\n        struct\n        {\n            uint32_t SrcAddr                        : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C1SrcAddr;\n\n    /* 0x204 : DMA_C1DstAddr */\n    union\n    {\n        struct\n        {\n            uint32_t DstAddr                        : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C1DstAddr;\n\n    /* 0x208 : DMA_C1LLI */\n    union\n    {\n        struct\n        {\n            uint32_t reserved_0_1                   :  2; /* [ 1: 0],       rsvd,        0x0 */\n            uint32_t LLI                            : 30; /* [31: 2],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C1LLI;\n\n    /* 0x20C : DMA_C1Control */\n    union\n    {\n        struct\n        {\n            uint32_t TransferSize                   : 12; /* [11: 0],        r/w,        0x0 */\n            uint32_t SBSize                         :  2; /* [13:12],        r/w,        0x1 */\n            uint32_t dst_min_mode                   :  1; /* [   14],        r/w,        0x0 */\n            uint32_t DBSize                         :  2; /* [16:15],        r/w,        0x1 */\n            uint32_t dst_add_mode                   :  1; /* [   17],        r/w,        0x0 */\n            uint32_t SWidth                         :  2; /* [19:18],        r/w,        0x2 */\n            uint32_t reserved_20                    :  1; /* [   20],       rsvd,        0x0 */\n            uint32_t DWidth                         :  2; /* [22:21],        r/w,        0x2 */\n            uint32_t fix_cnt                        :  2; /* [24:23],        r/w,        0x0 */\n            uint32_t SLargerD                       :  1; /* [   25],        r/w,        0x0 */\n            uint32_t SI                             :  1; /* [   26],        r/w,        0x1 */\n            uint32_t DI                             :  1; /* [   27],        r/w,        0x1 */\n            uint32_t Prot                           :  3; /* [30:28],        r/w,        0x0 */\n            uint32_t I                              :  1; /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C1Control;\n\n    /* 0x210 : DMA_C1Config */\n    union\n    {\n        struct\n        {\n            uint32_t E                              :  1; /* [    0],        r/w,        0x0 */\n            uint32_t SrcPeripheral                  :  5; /* [ 5: 1],        r/w,        0x0 */\n            uint32_t DstPeripheral                  :  5; /* [10: 6],        r/w,        0x0 */\n            uint32_t FlowCntrl                      :  3; /* [13:11],        r/w,        0x0 */\n            uint32_t IE                             :  1; /* [   14],        r/w,        0x0 */\n            uint32_t ITC                            :  1; /* [   15],        r/w,        0x0 */\n            uint32_t L                              :  1; /* [   16],        r/w,        0x0 */\n            uint32_t A                              :  1; /* [   17],          r,        0x0 */\n            uint32_t H                              :  1; /* [   18],        r/w,        0x0 */\n            uint32_t reserved_19_31                 : 13; /* [31:19],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C1Config;\n\n    /* 0x214  reserved */\n    uint8_t RESERVED0x214[236];\n\n    /* 0x300 : DMA_C2SrcAddr */\n    union\n    {\n        struct\n        {\n            uint32_t SrcAddr                        : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C2SrcAddr;\n\n    /* 0x304 : DMA_C2DstAddr */\n    union\n    {\n        struct\n        {\n            uint32_t DstAddr                        : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C2DstAddr;\n\n    /* 0x308 : DMA_C2LLI */\n    union\n    {\n        struct\n        {\n            uint32_t reserved_0_1                   :  2; /* [ 1: 0],       rsvd,        0x0 */\n            uint32_t LLI                            : 30; /* [31: 2],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C2LLI;\n\n    /* 0x30C : DMA_C2Control */\n    union\n    {\n        struct\n        {\n            uint32_t TransferSize                   : 12; /* [11: 0],        r/w,        0x0 */\n            uint32_t SBSize                         :  2; /* [13:12],        r/w,        0x1 */\n            uint32_t dst_min_mode                   :  1; /* [   14],        r/w,        0x0 */\n            uint32_t DBSize                         :  2; /* [16:15],        r/w,        0x1 */\n            uint32_t dst_add_mode                   :  1; /* [   17],        r/w,        0x0 */\n            uint32_t SWidth                         :  2; /* [19:18],        r/w,        0x2 */\n            uint32_t reserved_20                    :  1; /* [   20],       rsvd,        0x0 */\n            uint32_t DWidth                         :  2; /* [22:21],        r/w,        0x2 */\n            uint32_t fix_cnt                        :  2; /* [24:23],        r/w,        0x0 */\n            uint32_t SLargerD                       :  1; /* [   25],        r/w,        0x0 */\n            uint32_t SI                             :  1; /* [   26],        r/w,        0x1 */\n            uint32_t DI                             :  1; /* [   27],        r/w,        0x1 */\n            uint32_t Prot                           :  3; /* [30:28],        r/w,        0x0 */\n            uint32_t I                              :  1; /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C2Control;\n\n    /* 0x310 : DMA_C2Config */\n    union\n    {\n        struct\n        {\n            uint32_t E                              :  1; /* [    0],        r/w,        0x0 */\n            uint32_t SrcPeripheral                  :  5; /* [ 5: 1],        r/w,        0x0 */\n            uint32_t DstPeripheral                  :  5; /* [10: 6],        r/w,        0x0 */\n            uint32_t FlowCntrl                      :  3; /* [13:11],        r/w,        0x0 */\n            uint32_t IE                             :  1; /* [   14],        r/w,        0x0 */\n            uint32_t ITC                            :  1; /* [   15],        r/w,        0x0 */\n            uint32_t L                              :  1; /* [   16],        r/w,        0x0 */\n            uint32_t A                              :  1; /* [   17],          r,        0x0 */\n            uint32_t H                              :  1; /* [   18],        r/w,        0x0 */\n            uint32_t reserved_19_31                 : 13; /* [31:19],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C2Config;\n\n    /* 0x314  reserved */\n    uint8_t RESERVED0x314[236];\n\n    /* 0x400 : DMA_C3SrcAddr */\n    union\n    {\n        struct\n        {\n            uint32_t SrcAddr                        : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C3SrcAddr;\n\n    /* 0x404 : DMA_C3DstAddr */\n    union\n    {\n        struct\n        {\n            uint32_t DstAddr                        : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C3DstAddr;\n\n    /* 0x408 : DMA_C3LLI */\n    union\n    {\n        struct\n        {\n            uint32_t reserved_0_1                   :  2; /* [ 1: 0],       rsvd,        0x0 */\n            uint32_t LLI                            : 30; /* [31: 2],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C3LLI;\n\n    /* 0x40C : DMA_C3Control */\n    union\n    {\n        struct\n        {\n            uint32_t TransferSize                   : 12; /* [11: 0],        r/w,        0x0 */\n            uint32_t SBSize                         :  2; /* [13:12],        r/w,        0x1 */\n            uint32_t dst_min_mode                   :  1; /* [   14],        r/w,        0x0 */\n            uint32_t DBSize                         :  2; /* [16:15],        r/w,        0x1 */\n            uint32_t dst_add_mode                   :  1; /* [   17],        r/w,        0x0 */\n            uint32_t SWidth                         :  2; /* [19:18],        r/w,        0x2 */\n            uint32_t reserved_20                    :  1; /* [   20],       rsvd,        0x0 */\n            uint32_t DWidth                         :  2; /* [22:21],        r/w,        0x2 */\n            uint32_t fix_cnt                        :  2; /* [24:23],        r/w,        0x0 */\n            uint32_t SLargerD                       :  1; /* [   25],        r/w,        0x0 */\n            uint32_t SI                             :  1; /* [   26],        r/w,        0x1 */\n            uint32_t DI                             :  1; /* [   27],        r/w,        0x1 */\n            uint32_t Prot                           :  3; /* [30:28],        r/w,        0x0 */\n            uint32_t I                              :  1; /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C3Control;\n\n    /* 0x410 : DMA_C3Config */\n    union\n    {\n        struct\n        {\n            uint32_t E                              :  1; /* [    0],        r/w,        0x0 */\n            uint32_t SrcPeripheral                  :  5; /* [ 5: 1],        r/w,        0x0 */\n            uint32_t DstPeripheral                  :  5; /* [10: 6],        r/w,        0x0 */\n            uint32_t FlowCntrl                      :  3; /* [13:11],        r/w,        0x0 */\n            uint32_t IE                             :  1; /* [   14],        r/w,        0x0 */\n            uint32_t ITC                            :  1; /* [   15],        r/w,        0x0 */\n            uint32_t L                              :  1; /* [   16],        r/w,        0x0 */\n            uint32_t A                              :  1; /* [   17],          r,        0x0 */\n            uint32_t H                              :  1; /* [   18],        r/w,        0x0 */\n            uint32_t reserved_19_31                 : 13; /* [31:19],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C3Config;\n\n    /* 0x414  reserved */\n    uint8_t RESERVED0x414[236];\n\n    /* 0x500 : DMA_C4SrcAddr */\n    union\n    {\n        struct\n        {\n            uint32_t SrcAddr                        : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C4SrcAddr;\n\n    /* 0x504 : DMA_C4DstAddr */\n    union\n    {\n        struct\n        {\n            uint32_t DstAddr                        : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C4DstAddr;\n\n    /* 0x508 : DMA_C4LLI */\n    union\n    {\n        struct\n        {\n            uint32_t reserved_0_1                   :  2; /* [ 1: 0],       rsvd,        0x0 */\n            uint32_t LLI                            : 30; /* [31: 2],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C4LLI;\n\n    /* 0x50C : DMA_C4Control */\n    union\n    {\n        struct\n        {\n            uint32_t TransferSize                   : 12; /* [11: 0],        r/w,        0x0 */\n            uint32_t SBSize                         :  2; /* [13:12],        r/w,        0x1 */\n            uint32_t dst_min_mode                   :  1; /* [   14],        r/w,        0x0 */\n            uint32_t DBSize                         :  2; /* [16:15],        r/w,        0x1 */\n            uint32_t dst_add_mode                   :  1; /* [   17],        r/w,        0x0 */\n            uint32_t SWidth                         :  2; /* [19:18],        r/w,        0x2 */\n            uint32_t reserved_20                    :  1; /* [   20],       rsvd,        0x0 */\n            uint32_t DWidth                         :  2; /* [22:21],        r/w,        0x2 */\n            uint32_t fix_cnt                        :  2; /* [24:23],        r/w,        0x0 */\n            uint32_t SLargerD                       :  1; /* [   25],        r/w,        0x0 */\n            uint32_t SI                             :  1; /* [   26],        r/w,        0x1 */\n            uint32_t DI                             :  1; /* [   27],        r/w,        0x1 */\n            uint32_t Prot                           :  3; /* [30:28],        r/w,        0x0 */\n            uint32_t I                              :  1; /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C4Control;\n\n    /* 0x510 : DMA_C4Config */\n    union\n    {\n        struct\n        {\n            uint32_t E                              :  1; /* [    0],        r/w,        0x0 */\n            uint32_t SrcPeripheral                  :  5; /* [ 5: 1],        r/w,        0x0 */\n            uint32_t DstPeripheral                  :  5; /* [10: 6],        r/w,        0x0 */\n            uint32_t FlowCntrl                      :  3; /* [13:11],        r/w,        0x0 */\n            uint32_t IE                             :  1; /* [   14],        r/w,        0x0 */\n            uint32_t ITC                            :  1; /* [   15],        r/w,        0x0 */\n            uint32_t L                              :  1; /* [   16],        r/w,        0x0 */\n            uint32_t A                              :  1; /* [   17],          r,        0x0 */\n            uint32_t H                              :  1; /* [   18],        r/w,        0x0 */\n            uint32_t reserved_19_31                 : 13; /* [31:19],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C4Config;\n\n    /* 0x514  reserved */\n    uint8_t RESERVED0x514[236];\n\n    /* 0x600 : DMA_C5SrcAddr */\n    union\n    {\n        struct\n        {\n            uint32_t SrcAddr                        : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C5SrcAddr;\n\n    /* 0x604 : DMA_C5DstAddr */\n    union\n    {\n        struct\n        {\n            uint32_t DstAddr                        : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C5DstAddr;\n\n    /* 0x608 : DMA_C5LLI */\n    union\n    {\n        struct\n        {\n            uint32_t reserved_0_1                   :  2; /* [ 1: 0],       rsvd,        0x0 */\n            uint32_t LLI                            : 30; /* [31: 2],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C5LLI;\n\n    /* 0x60C : DMA_C5Control */\n    union\n    {\n        struct\n        {\n            uint32_t TransferSize                   : 12; /* [11: 0],        r/w,        0x0 */\n            uint32_t SBSize                         :  2; /* [13:12],        r/w,        0x1 */\n            uint32_t dst_min_mode                   :  1; /* [   14],        r/w,        0x0 */\n            uint32_t DBSize                         :  2; /* [16:15],        r/w,        0x1 */\n            uint32_t dst_add_mode                   :  1; /* [   17],        r/w,        0x0 */\n            uint32_t SWidth                         :  2; /* [19:18],        r/w,        0x2 */\n            uint32_t reserved_20                    :  1; /* [   20],       rsvd,        0x0 */\n            uint32_t DWidth                         :  2; /* [22:21],        r/w,        0x2 */\n            uint32_t fix_cnt                        :  2; /* [24:23],        r/w,        0x0 */\n            uint32_t SLargerD                       :  1; /* [   25],        r/w,        0x0 */\n            uint32_t SI                             :  1; /* [   26],        r/w,        0x1 */\n            uint32_t DI                             :  1; /* [   27],        r/w,        0x1 */\n            uint32_t Prot                           :  3; /* [30:28],        r/w,        0x0 */\n            uint32_t I                              :  1; /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C5Control;\n\n    /* 0x610 : DMA_C5Config */\n    union\n    {\n        struct\n        {\n            uint32_t E                              :  1; /* [    0],        r/w,        0x0 */\n            uint32_t SrcPeripheral                  :  5; /* [ 5: 1],        r/w,        0x0 */\n            uint32_t DstPeripheral                  :  5; /* [10: 6],        r/w,        0x0 */\n            uint32_t FlowCntrl                      :  3; /* [13:11],        r/w,        0x0 */\n            uint32_t IE                             :  1; /* [   14],        r/w,        0x0 */\n            uint32_t ITC                            :  1; /* [   15],        r/w,        0x0 */\n            uint32_t L                              :  1; /* [   16],        r/w,        0x0 */\n            uint32_t A                              :  1; /* [   17],          r,        0x0 */\n            uint32_t H                              :  1; /* [   18],        r/w,        0x0 */\n            uint32_t reserved_19_31                 : 13; /* [31:19],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C5Config;\n\n    /* 0x614  reserved */\n    uint8_t RESERVED0x614[236];\n\n    /* 0x700 : DMA_C6SrcAddr */\n    union\n    {\n        struct\n        {\n            uint32_t SrcAddr                        : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C6SrcAddr;\n\n    /* 0x704 : DMA_C6DstAddr */\n    union\n    {\n        struct\n        {\n            uint32_t DstAddr                        : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C6DstAddr;\n\n    /* 0x708 : DMA_C6LLI */\n    union\n    {\n        struct\n        {\n            uint32_t reserved_0_1                   :  2; /* [ 1: 0],       rsvd,        0x0 */\n            uint32_t LLI                            : 30; /* [31: 2],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C6LLI;\n\n    /* 0x70C : DMA_C6Control */\n    union\n    {\n        struct\n        {\n            uint32_t TransferSize                   : 12; /* [11: 0],        r/w,        0x0 */\n            uint32_t SBSize                         :  2; /* [13:12],        r/w,        0x1 */\n            uint32_t dst_min_mode                   :  1; /* [   14],        r/w,        0x0 */\n            uint32_t DBSize                         :  2; /* [16:15],        r/w,        0x1 */\n            uint32_t dst_add_mode                   :  1; /* [   17],        r/w,        0x0 */\n            uint32_t SWidth                         :  2; /* [19:18],        r/w,        0x2 */\n            uint32_t reserved_20                    :  1; /* [   20],       rsvd,        0x0 */\n            uint32_t DWidth                         :  2; /* [22:21],        r/w,        0x2 */\n            uint32_t fix_cnt                        :  2; /* [24:23],        r/w,        0x0 */\n            uint32_t SLargerD                       :  1; /* [   25],        r/w,        0x0 */\n            uint32_t SI                             :  1; /* [   26],        r/w,        0x1 */\n            uint32_t DI                             :  1; /* [   27],        r/w,        0x1 */\n            uint32_t Prot                           :  3; /* [30:28],        r/w,        0x0 */\n            uint32_t I                              :  1; /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C6Control;\n\n    /* 0x710 : DMA_C6Config */\n    union\n    {\n        struct\n        {\n            uint32_t E                              :  1; /* [    0],        r/w,        0x0 */\n            uint32_t SrcPeripheral                  :  5; /* [ 5: 1],        r/w,        0x0 */\n            uint32_t DstPeripheral                  :  5; /* [10: 6],        r/w,        0x0 */\n            uint32_t FlowCntrl                      :  3; /* [13:11],        r/w,        0x0 */\n            uint32_t IE                             :  1; /* [   14],        r/w,        0x0 */\n            uint32_t ITC                            :  1; /* [   15],        r/w,        0x0 */\n            uint32_t L                              :  1; /* [   16],        r/w,        0x0 */\n            uint32_t A                              :  1; /* [   17],          r,        0x0 */\n            uint32_t H                              :  1; /* [   18],        r/w,        0x0 */\n            uint32_t reserved_19_31                 : 13; /* [31:19],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C6Config;\n\n    /* 0x714  reserved */\n    uint8_t RESERVED0x714[236];\n\n    /* 0x800 : DMA_C7SrcAddr */\n    union\n    {\n        struct\n        {\n            uint32_t SrcAddr                        : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C7SrcAddr;\n\n    /* 0x804 : DMA_C7DstAddr */\n    union\n    {\n        struct\n        {\n            uint32_t DstAddr                        : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C7DstAddr;\n\n    /* 0x808 : DMA_C7LLI */\n    union\n    {\n        struct\n        {\n            uint32_t reserved_0_1                   :  2; /* [ 1: 0],       rsvd,        0x0 */\n            uint32_t LLI                            : 30; /* [31: 2],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C7LLI;\n\n    /* 0x80C : DMA_C7Control */\n    union\n    {\n        struct\n        {\n            uint32_t TransferSize                   : 12; /* [11: 0],        r/w,        0x0 */\n            uint32_t SBSize                         :  2; /* [13:12],        r/w,        0x1 */\n            uint32_t dst_min_mode                   :  1; /* [   14],        r/w,        0x0 */\n            uint32_t DBSize                         :  2; /* [16:15],        r/w,        0x1 */\n            uint32_t dst_add_mode                   :  1; /* [   17],        r/w,        0x0 */\n            uint32_t SWidth                         :  2; /* [19:18],        r/w,        0x2 */\n            uint32_t reserved_20                    :  1; /* [   20],       rsvd,        0x0 */\n            uint32_t DWidth                         :  2; /* [22:21],        r/w,        0x2 */\n            uint32_t fix_cnt                        :  2; /* [24:23],        r/w,        0x0 */\n            uint32_t SLargerD                       :  1; /* [   25],        r/w,        0x0 */\n            uint32_t SI                             :  1; /* [   26],        r/w,        0x1 */\n            uint32_t DI                             :  1; /* [   27],        r/w,        0x1 */\n            uint32_t Prot                           :  3; /* [30:28],        r/w,        0x0 */\n            uint32_t I                              :  1; /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C7Control;\n\n    /* 0x810 : DMA_C7Config */\n    union\n    {\n        struct\n        {\n            uint32_t E                              :  1; /* [    0],        r/w,        0x0 */\n            uint32_t SrcPeripheral                  :  5; /* [ 5: 1],        r/w,        0x0 */\n            uint32_t DstPeripheral                  :  5; /* [10: 6],        r/w,        0x0 */\n            uint32_t FlowCntrl                      :  3; /* [13:11],        r/w,        0x0 */\n            uint32_t IE                             :  1; /* [   14],        r/w,        0x0 */\n            uint32_t ITC                            :  1; /* [   15],        r/w,        0x0 */\n            uint32_t L                              :  1; /* [   16],        r/w,        0x0 */\n            uint32_t A                              :  1; /* [   17],          r,        0x0 */\n            uint32_t H                              :  1; /* [   18],        r/w,        0x0 */\n            uint32_t reserved_19_31                 : 13; /* [31:19],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_C7Config;\n\n};\n#endif\n\ntypedef volatile struct dma_reg dma_reg_t;\n\n/*Following is reg patch*/\n\n/* 0x0 : DMA_SrcAddr */\n#define DMA_SRCADDR_OFFSET (0x0)\n#define DMA_SRCADDR        DMA_SRCADDR\n#define DMA_SRCADDR_POS    (0U)\n#define DMA_SRCADDR_LEN    (32U)\n#define DMA_SRCADDR_MSK    (((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS)\n#define DMA_SRCADDR_UMSK   (~(((1U << DMA_SRCADDR_LEN) - 1) << DMA_SRCADDR_POS))\n\n/* 0x4 : DMA_DstAddr */\n#define DMA_DSTADDR_OFFSET (0x4)\n#define DMA_DSTADDR        DMA_DSTADDR\n#define DMA_DSTADDR_POS    (0U)\n#define DMA_DSTADDR_LEN    (32U)\n#define DMA_DSTADDR_MSK    (((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS)\n#define DMA_DSTADDR_UMSK   (~(((1U << DMA_DSTADDR_LEN) - 1) << DMA_DSTADDR_POS))\n\n/* 0x8 : DMA_LLI */\n#define DMA_LLI_OFFSET (0x8)\n#define DMA_LLI        DMA_LLI\n#define DMA_LLI_POS    (0U)\n#define DMA_LLI_LEN    (32U)\n#define DMA_LLI_MSK    (((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS)\n#define DMA_LLI_UMSK   (~(((1U << DMA_LLI_LEN) - 1) << DMA_LLI_POS))\n\n/* 0xc : DMA_Control */\n#define DMA_CONTROL_OFFSET    (0xc)\n#define DMA_TRANSFERSIZE      DMA_TRANSFERSIZE\n#define DMA_TRANSFERSIZE_POS  (0U)\n#define DMA_TRANSFERSIZE_LEN  (12U)\n#define DMA_TRANSFERSIZE_MSK  (((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS)\n#define DMA_TRANSFERSIZE_UMSK (~(((1U << DMA_TRANSFERSIZE_LEN) - 1) << DMA_TRANSFERSIZE_POS))\n#define DMA_SBSIZE            DMA_SBSIZE\n#define DMA_SBSIZE_POS        (12U)\n#define DMA_SBSIZE_LEN        (2U)\n#define DMA_SBSIZE_MSK        (((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS)\n#define DMA_SBSIZE_UMSK       (~(((1U << DMA_SBSIZE_LEN) - 1) << DMA_SBSIZE_POS))\n#define DMA_DST_MIN_MODE      DMA_DST_MIN_MODE\n#define DMA_DST_MIN_MODE_POS  (14U)\n#define DMA_DST_MIN_MODE_LEN  (1U)\n#define DMA_DST_MIN_MODE_MSK  (((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS)\n#define DMA_DST_MIN_MODE_UMSK (~(((1U << DMA_DST_MIN_MODE_LEN) - 1) << DMA_DST_MIN_MODE_POS))\n#define DMA_DBSIZE            DMA_DBSIZE\n#define DMA_DBSIZE_POS        (15U)\n#define DMA_DBSIZE_LEN        (2U)\n#define DMA_DBSIZE_MSK        (((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS)\n#define DMA_DBSIZE_UMSK       (~(((1U << DMA_DBSIZE_LEN) - 1) << DMA_DBSIZE_POS))\n#define DMA_DST_ADD_MODE      DMA_DST_ADD_MODE\n#define DMA_DST_ADD_MODE_POS  (17U)\n#define DMA_DST_ADD_MODE_LEN  (1U)\n#define DMA_DST_ADD_MODE_MSK  (((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS)\n#define DMA_DST_ADD_MODE_UMSK (~(((1U << DMA_DST_ADD_MODE_LEN) - 1) << DMA_DST_ADD_MODE_POS))\n#define DMA_SWIDTH            DMA_SWIDTH\n#define DMA_SWIDTH_POS        (18U)\n#define DMA_SWIDTH_LEN        (2U)\n#define DMA_SWIDTH_MSK        (((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS)\n#define DMA_SWIDTH_UMSK       (~(((1U << DMA_SWIDTH_LEN) - 1) << DMA_SWIDTH_POS))\n#define DMA_DWIDTH            DMA_DWIDTH\n#define DMA_DWIDTH_POS        (21U)\n#define DMA_DWIDTH_LEN        (2U)\n#define DMA_DWIDTH_MSK        (((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS)\n#define DMA_DWIDTH_UMSK       (~(((1U << DMA_DWIDTH_LEN) - 1) << DMA_DWIDTH_POS))\n#define DMA_FIX_CNT           DMA_FIX_CNT\n#define DMA_FIX_CNT_POS       (23U)\n#define DMA_FIX_CNT_LEN       (2U)\n#define DMA_FIX_CNT_MSK       (((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS)\n#define DMA_FIX_CNT_UMSK      (~(((1U << DMA_FIX_CNT_LEN) - 1) << DMA_FIX_CNT_POS))\n#define DMA_SLARGERD          DMA_SLARGERD\n#define DMA_SLARGERD_POS      (25U)\n#define DMA_SLARGERD_LEN      (1U)\n#define DMA_SLARGERD_MSK      (((1U << DMA_SLARGERD_LEN) - 1) << DMA_SLARGERD_POS)\n#define DMA_SLARGERD_UMSK     (~(((1U << DMA_SLARGERD_LEN) - 1) << DMA_SLARGERD_POS))\n#define DMA_SI                DMA_SI\n#define DMA_SI_POS            (26U)\n#define DMA_SI_LEN            (1U)\n#define DMA_SI_MSK            (((1U << DMA_SI_LEN) - 1) << DMA_SI_POS)\n#define DMA_SI_UMSK           (~(((1U << DMA_SI_LEN) - 1) << DMA_SI_POS))\n#define DMA_DI                DMA_DI\n#define DMA_DI_POS            (27U)\n#define DMA_DI_LEN            (1U)\n#define DMA_DI_MSK            (((1U << DMA_DI_LEN) - 1) << DMA_DI_POS)\n#define DMA_DI_UMSK           (~(((1U << DMA_DI_LEN) - 1) << DMA_DI_POS))\n#define DMA_PROT              DMA_PROT\n#define DMA_PROT_POS          (28U)\n#define DMA_PROT_LEN          (3U)\n#define DMA_PROT_MSK          (((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS)\n#define DMA_PROT_UMSK         (~(((1U << DMA_PROT_LEN) - 1) << DMA_PROT_POS))\n#define DMA_I                 DMA_I\n#define DMA_I_POS             (31U)\n#define DMA_I_LEN             (1U)\n#define DMA_I_MSK             (((1U << DMA_I_LEN) - 1) << DMA_I_POS)\n#define DMA_I_UMSK            (~(((1U << DMA_I_LEN) - 1) << DMA_I_POS))\n\n/* 0x10 : DMA_Config */\n#define DMA_CONFIG_OFFSET      (0x10)\n#define DMA_E                  DMA_E\n#define DMA_E_POS              (0U)\n#define DMA_E_LEN              (1U)\n#define DMA_E_MSK              (((1U << DMA_E_LEN) - 1) << DMA_E_POS)\n#define DMA_E_UMSK             (~(((1U << DMA_E_LEN) - 1) << DMA_E_POS))\n#define DMA_SRCPERIPHERAL      DMA_SRCPERIPHERAL\n#define DMA_SRCPERIPHERAL_POS  (1U)\n#define DMA_SRCPERIPHERAL_LEN  (5U)\n#define DMA_SRCPERIPHERAL_MSK  (((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS)\n#define DMA_SRCPERIPHERAL_UMSK (~(((1U << DMA_SRCPERIPHERAL_LEN) - 1) << DMA_SRCPERIPHERAL_POS))\n#define DMA_DSTPERIPHERAL      DMA_DSTPERIPHERAL\n#define DMA_DSTPERIPHERAL_POS  (6U)\n#define DMA_DSTPERIPHERAL_LEN  (5U)\n#define DMA_DSTPERIPHERAL_MSK  (((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS)\n#define DMA_DSTPERIPHERAL_UMSK (~(((1U << DMA_DSTPERIPHERAL_LEN) - 1) << DMA_DSTPERIPHERAL_POS))\n#define DMA_FLOWCNTRL          DMA_FLOWCNTRL\n#define DMA_FLOWCNTRL_POS      (11U)\n#define DMA_FLOWCNTRL_LEN      (3U)\n#define DMA_FLOWCNTRL_MSK      (((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS)\n#define DMA_FLOWCNTRL_UMSK     (~(((1U << DMA_FLOWCNTRL_LEN) - 1) << DMA_FLOWCNTRL_POS))\n#define DMA_IE                 DMA_IE\n#define DMA_IE_POS             (14U)\n#define DMA_IE_LEN             (1U)\n#define DMA_IE_MSK             (((1U << DMA_IE_LEN) - 1) << DMA_IE_POS)\n#define DMA_IE_UMSK            (~(((1U << DMA_IE_LEN) - 1) << DMA_IE_POS))\n#define DMA_ITC                DMA_ITC\n#define DMA_ITC_POS            (15U)\n#define DMA_ITC_LEN            (1U)\n#define DMA_ITC_MSK            (((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS)\n#define DMA_ITC_UMSK           (~(((1U << DMA_ITC_LEN) - 1) << DMA_ITC_POS))\n#define DMA_L                  DMA_L\n#define DMA_L_POS              (16U)\n#define DMA_L_LEN              (1U)\n#define DMA_L_MSK              (((1U << DMA_L_LEN) - 1) << DMA_L_POS)\n#define DMA_L_UMSK             (~(((1U << DMA_L_LEN) - 1) << DMA_L_POS))\n#define DMA_A                  DMA_A\n#define DMA_A_POS              (17U)\n#define DMA_A_LEN              (1U)\n#define DMA_A_MSK              (((1U << DMA_A_LEN) - 1) << DMA_A_POS)\n#define DMA_A_UMSK             (~(((1U << DMA_A_LEN) - 1) << DMA_A_POS))\n#define DMA_H                  DMA_H\n#define DMA_H_POS              (18U)\n#define DMA_H_LEN              (1U)\n#define DMA_H_MSK              (((1U << DMA_H_LEN) - 1) << DMA_H_POS)\n#define DMA_H_UMSK             (~(((1U << DMA_H_LEN) - 1) << DMA_H_POS))\n#define DMA_LLICOUNTER         DMA_LLICOUNTER\n#define DMA_LLICOUNTER_POS     (20U)\n#define DMA_LLICOUNTER_LEN     (10U)\n#define DMA_LLICOUNTER_MSK     (((1U << DMA_LLICOUNTER_LEN) - 1) << DMA_LLICOUNTER_POS)\n#define DMA_LLICOUNTER_UMSK    (~(((1U << DMA_LLICOUNTER_LEN) - 1) << DMA_LLICOUNTER_POS))\n\nstruct dma_channel_reg {\n    /* 0x0 : DMA_SrcAddr */\n    union {\n        struct\n        {\n            uint32_t SrcAddr : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_SrcAddr;\n\n    /* 0x4 : DMA_DstAddr */\n    union {\n        struct\n        {\n            uint32_t DstAddr : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_DstAddr;\n\n    /* 0x8 : DMA_LLI */\n    union {\n        struct\n        {\n            uint32_t LLI : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_LLI;\n\n    /* 0xc : DMA_Control */\n    union {\n        struct DMA_Control_Reg {\n            uint32_t TransferSize : 12; /* [11: 0],        r/w,        0x0 */\n            uint32_t SBSize       : 2;  /* [13:12],        r/w,        0x1 */\n            uint32_t dst_min_mode : 1;  /* [   14],        r/w,        0x0 */\n            uint32_t DBSize       : 2;  /* [16:15],        r/w,        0x1 */\n            uint32_t dst_add_mode : 1;  /* [   17],        r/w,        0x0 */\n            uint32_t SWidth       : 2;  /* [19:18],        r/w,        0x2 */\n            uint32_t reserved_20  : 1;  /* [   20],       rsvd,        0x0 */\n            uint32_t DWidth       : 2;  /* [22:21],        r/w,        0x2 */\n            uint32_t fix_cnt      : 2;  /* [24:23],        r/w,        0x0 */\n            uint32_t SLargerD     : 1;  /* [   25],        r/w,        0x0 */\n            uint32_t SI           : 1;  /* [   26],        r/w,        0x1 */\n            uint32_t DI           : 1;  /* [   27],        r/w,        0x1 */\n            uint32_t Prot         : 3;  /* [30:28],        r/w,        0x0 */\n            uint32_t I            : 1;  /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_Control;\n\n    /* 0x10 : DMA_Config */\n    union {\n        struct\n        {\n            uint32_t E              : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t SrcPeripheral  : 5;  /* [ 5: 1],        r/w,        0x0 */\n            uint32_t DstPeripheral  : 5;  /* [10: 6],        r/w,        0x0 */\n            uint32_t FlowCntrl      : 3;  /* [13:11],        r/w,        0x0 */\n            uint32_t IE             : 1;  /* [   14],        r/w,        0x0 */\n            uint32_t ITC            : 1;  /* [   15],        r/w,        0x0 */\n            uint32_t L              : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t A              : 1;  /* [   17],          r,        0x0 */\n            uint32_t H              : 1;  /* [   18],        r/w,        0x0 */\n            uint32_t reserved_19    : 1;  /* [   19],       rsvd,        0x0 */\n            uint32_t LLICounter     : 10; /* [29:20],          r,        0x0 */\n            uint32_t reserved_30_31 : 2;  /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DMA_Config;\n};\n\ntypedef volatile struct dma_channel_reg dma_channel_reg_t;\n\n#define DMA_CHANNEL_OFFSET 0x100\n\n#endif /* __DMA_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/ef_ctrl_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    ef_ctrl_reg.h\n  * @version V1.2\n  * @date    2020-04-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __EF_CTRL_REG_H__\n#define __EF_CTRL_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x800 : ef_if_ctrl_0 */\n#define EF_CTRL_EF_IF_CTRL_0_OFFSET           (0x800)\n#define EF_CTRL_EF_IF_0_AUTOLOAD_P1_DONE      EF_CTRL_EF_IF_0_AUTOLOAD_P1_DONE\n#define EF_CTRL_EF_IF_0_AUTOLOAD_P1_DONE_POS  (0U)\n#define EF_CTRL_EF_IF_0_AUTOLOAD_P1_DONE_LEN  (1U)\n#define EF_CTRL_EF_IF_0_AUTOLOAD_P1_DONE_MSK  (((1U << EF_CTRL_EF_IF_0_AUTOLOAD_P1_DONE_LEN) - 1) << EF_CTRL_EF_IF_0_AUTOLOAD_P1_DONE_POS)\n#define EF_CTRL_EF_IF_0_AUTOLOAD_P1_DONE_UMSK (~(((1U << EF_CTRL_EF_IF_0_AUTOLOAD_P1_DONE_LEN) - 1) << EF_CTRL_EF_IF_0_AUTOLOAD_P1_DONE_POS))\n#define EF_CTRL_EF_IF_0_AUTOLOAD_DONE         EF_CTRL_EF_IF_0_AUTOLOAD_DONE\n#define EF_CTRL_EF_IF_0_AUTOLOAD_DONE_POS     (1U)\n#define EF_CTRL_EF_IF_0_AUTOLOAD_DONE_LEN     (1U)\n#define EF_CTRL_EF_IF_0_AUTOLOAD_DONE_MSK     (((1U << EF_CTRL_EF_IF_0_AUTOLOAD_DONE_LEN) - 1) << EF_CTRL_EF_IF_0_AUTOLOAD_DONE_POS)\n#define EF_CTRL_EF_IF_0_AUTOLOAD_DONE_UMSK    (~(((1U << EF_CTRL_EF_IF_0_AUTOLOAD_DONE_LEN) - 1) << EF_CTRL_EF_IF_0_AUTOLOAD_DONE_POS))\n#define EF_CTRL_EF_IF_0_BUSY                  EF_CTRL_EF_IF_0_BUSY\n#define EF_CTRL_EF_IF_0_BUSY_POS              (2U)\n#define EF_CTRL_EF_IF_0_BUSY_LEN              (1U)\n#define EF_CTRL_EF_IF_0_BUSY_MSK              (((1U << EF_CTRL_EF_IF_0_BUSY_LEN) - 1) << EF_CTRL_EF_IF_0_BUSY_POS)\n#define EF_CTRL_EF_IF_0_BUSY_UMSK             (~(((1U << EF_CTRL_EF_IF_0_BUSY_LEN) - 1) << EF_CTRL_EF_IF_0_BUSY_POS))\n#define EF_CTRL_EF_IF_0_RW                    EF_CTRL_EF_IF_0_RW\n#define EF_CTRL_EF_IF_0_RW_POS                (3U)\n#define EF_CTRL_EF_IF_0_RW_LEN                (1U)\n#define EF_CTRL_EF_IF_0_RW_MSK                (((1U << EF_CTRL_EF_IF_0_RW_LEN) - 1) << EF_CTRL_EF_IF_0_RW_POS)\n#define EF_CTRL_EF_IF_0_RW_UMSK               (~(((1U << EF_CTRL_EF_IF_0_RW_LEN) - 1) << EF_CTRL_EF_IF_0_RW_POS))\n#define EF_CTRL_EF_IF_0_TRIG                  EF_CTRL_EF_IF_0_TRIG\n#define EF_CTRL_EF_IF_0_TRIG_POS              (4U)\n#define EF_CTRL_EF_IF_0_TRIG_LEN              (1U)\n#define EF_CTRL_EF_IF_0_TRIG_MSK              (((1U << EF_CTRL_EF_IF_0_TRIG_LEN) - 1) << EF_CTRL_EF_IF_0_TRIG_POS)\n#define EF_CTRL_EF_IF_0_TRIG_UMSK             (~(((1U << EF_CTRL_EF_IF_0_TRIG_LEN) - 1) << EF_CTRL_EF_IF_0_TRIG_POS))\n#define EF_CTRL_EF_IF_0_MANUAL_EN             EF_CTRL_EF_IF_0_MANUAL_EN\n#define EF_CTRL_EF_IF_0_MANUAL_EN_POS         (5U)\n#define EF_CTRL_EF_IF_0_MANUAL_EN_LEN         (1U)\n#define EF_CTRL_EF_IF_0_MANUAL_EN_MSK         (((1U << EF_CTRL_EF_IF_0_MANUAL_EN_LEN) - 1) << EF_CTRL_EF_IF_0_MANUAL_EN_POS)\n#define EF_CTRL_EF_IF_0_MANUAL_EN_UMSK        (~(((1U << EF_CTRL_EF_IF_0_MANUAL_EN_LEN) - 1) << EF_CTRL_EF_IF_0_MANUAL_EN_POS))\n#define EF_CTRL_EF_IF_0_CYC_MODIFY            EF_CTRL_EF_IF_0_CYC_MODIFY\n#define EF_CTRL_EF_IF_0_CYC_MODIFY_POS        (6U)\n#define EF_CTRL_EF_IF_0_CYC_MODIFY_LEN        (1U)\n#define EF_CTRL_EF_IF_0_CYC_MODIFY_MSK        (((1U << EF_CTRL_EF_IF_0_CYC_MODIFY_LEN) - 1) << EF_CTRL_EF_IF_0_CYC_MODIFY_POS)\n#define EF_CTRL_EF_IF_0_CYC_MODIFY_UMSK       (~(((1U << EF_CTRL_EF_IF_0_CYC_MODIFY_LEN) - 1) << EF_CTRL_EF_IF_0_CYC_MODIFY_POS))\n#define EF_CTRL_EF_CLK_SAHB_DATA_SEL          EF_CTRL_EF_CLK_SAHB_DATA_SEL\n#define EF_CTRL_EF_CLK_SAHB_DATA_SEL_POS      (7U)\n#define EF_CTRL_EF_CLK_SAHB_DATA_SEL_LEN      (1U)\n#define EF_CTRL_EF_CLK_SAHB_DATA_SEL_MSK      (((1U << EF_CTRL_EF_CLK_SAHB_DATA_SEL_LEN) - 1) << EF_CTRL_EF_CLK_SAHB_DATA_SEL_POS)\n#define EF_CTRL_EF_CLK_SAHB_DATA_SEL_UMSK     (~(((1U << EF_CTRL_EF_CLK_SAHB_DATA_SEL_LEN) - 1) << EF_CTRL_EF_CLK_SAHB_DATA_SEL_POS))\n#define EF_CTRL_EF_IF_PROT_CODE_CTRL          EF_CTRL_EF_IF_PROT_CODE_CTRL\n#define EF_CTRL_EF_IF_PROT_CODE_CTRL_POS      (8U)\n#define EF_CTRL_EF_IF_PROT_CODE_CTRL_LEN      (8U)\n#define EF_CTRL_EF_IF_PROT_CODE_CTRL_MSK      (((1U << EF_CTRL_EF_IF_PROT_CODE_CTRL_LEN) - 1) << EF_CTRL_EF_IF_PROT_CODE_CTRL_POS)\n#define EF_CTRL_EF_IF_PROT_CODE_CTRL_UMSK     (~(((1U << EF_CTRL_EF_IF_PROT_CODE_CTRL_LEN) - 1) << EF_CTRL_EF_IF_PROT_CODE_CTRL_POS))\n#define EF_CTRL_EF_IF_POR_DIG                 EF_CTRL_EF_IF_POR_DIG\n#define EF_CTRL_EF_IF_POR_DIG_POS             (16U)\n#define EF_CTRL_EF_IF_POR_DIG_LEN             (1U)\n#define EF_CTRL_EF_IF_POR_DIG_MSK             (((1U << EF_CTRL_EF_IF_POR_DIG_LEN) - 1) << EF_CTRL_EF_IF_POR_DIG_POS)\n#define EF_CTRL_EF_IF_POR_DIG_UMSK            (~(((1U << EF_CTRL_EF_IF_POR_DIG_LEN) - 1) << EF_CTRL_EF_IF_POR_DIG_POS))\n#define EF_CTRL_EF_CLK_SAHB_DATA_GATE         EF_CTRL_EF_CLK_SAHB_DATA_GATE\n#define EF_CTRL_EF_CLK_SAHB_DATA_GATE_POS     (17U)\n#define EF_CTRL_EF_CLK_SAHB_DATA_GATE_LEN     (1U)\n#define EF_CTRL_EF_CLK_SAHB_DATA_GATE_MSK     (((1U << EF_CTRL_EF_CLK_SAHB_DATA_GATE_LEN) - 1) << EF_CTRL_EF_CLK_SAHB_DATA_GATE_POS)\n#define EF_CTRL_EF_CLK_SAHB_DATA_GATE_UMSK    (~(((1U << EF_CTRL_EF_CLK_SAHB_DATA_GATE_LEN) - 1) << EF_CTRL_EF_CLK_SAHB_DATA_GATE_POS))\n#define EF_CTRL_EF_IF_AUTO_RD_EN              EF_CTRL_EF_IF_AUTO_RD_EN\n#define EF_CTRL_EF_IF_AUTO_RD_EN_POS          (18U)\n#define EF_CTRL_EF_IF_AUTO_RD_EN_LEN          (1U)\n#define EF_CTRL_EF_IF_AUTO_RD_EN_MSK          (((1U << EF_CTRL_EF_IF_AUTO_RD_EN_LEN) - 1) << EF_CTRL_EF_IF_AUTO_RD_EN_POS)\n#define EF_CTRL_EF_IF_AUTO_RD_EN_UMSK         (~(((1U << EF_CTRL_EF_IF_AUTO_RD_EN_LEN) - 1) << EF_CTRL_EF_IF_AUTO_RD_EN_POS))\n#define EF_CTRL_EF_IF_CYC_MODIFY_LOCK         EF_CTRL_EF_IF_CYC_MODIFY_LOCK\n#define EF_CTRL_EF_IF_CYC_MODIFY_LOCK_POS     (19U)\n#define EF_CTRL_EF_IF_CYC_MODIFY_LOCK_LEN     (1U)\n#define EF_CTRL_EF_IF_CYC_MODIFY_LOCK_MSK     (((1U << EF_CTRL_EF_IF_CYC_MODIFY_LOCK_LEN) - 1) << EF_CTRL_EF_IF_CYC_MODIFY_LOCK_POS)\n#define EF_CTRL_EF_IF_CYC_MODIFY_LOCK_UMSK    (~(((1U << EF_CTRL_EF_IF_CYC_MODIFY_LOCK_LEN) - 1) << EF_CTRL_EF_IF_CYC_MODIFY_LOCK_POS))\n#define EF_CTRL_EF_IF_0_INT                   EF_CTRL_EF_IF_0_INT\n#define EF_CTRL_EF_IF_0_INT_POS               (20U)\n#define EF_CTRL_EF_IF_0_INT_LEN               (1U)\n#define EF_CTRL_EF_IF_0_INT_MSK               (((1U << EF_CTRL_EF_IF_0_INT_LEN) - 1) << EF_CTRL_EF_IF_0_INT_POS)\n#define EF_CTRL_EF_IF_0_INT_UMSK              (~(((1U << EF_CTRL_EF_IF_0_INT_LEN) - 1) << EF_CTRL_EF_IF_0_INT_POS))\n#define EF_CTRL_EF_IF_0_INT_CLR               EF_CTRL_EF_IF_0_INT_CLR\n#define EF_CTRL_EF_IF_0_INT_CLR_POS           (21U)\n#define EF_CTRL_EF_IF_0_INT_CLR_LEN           (1U)\n#define EF_CTRL_EF_IF_0_INT_CLR_MSK           (((1U << EF_CTRL_EF_IF_0_INT_CLR_LEN) - 1) << EF_CTRL_EF_IF_0_INT_CLR_POS)\n#define EF_CTRL_EF_IF_0_INT_CLR_UMSK          (~(((1U << EF_CTRL_EF_IF_0_INT_CLR_LEN) - 1) << EF_CTRL_EF_IF_0_INT_CLR_POS))\n#define EF_CTRL_EF_IF_0_INT_SET               EF_CTRL_EF_IF_0_INT_SET\n#define EF_CTRL_EF_IF_0_INT_SET_POS           (22U)\n#define EF_CTRL_EF_IF_0_INT_SET_LEN           (1U)\n#define EF_CTRL_EF_IF_0_INT_SET_MSK           (((1U << EF_CTRL_EF_IF_0_INT_SET_LEN) - 1) << EF_CTRL_EF_IF_0_INT_SET_POS)\n#define EF_CTRL_EF_IF_0_INT_SET_UMSK          (~(((1U << EF_CTRL_EF_IF_0_INT_SET_LEN) - 1) << EF_CTRL_EF_IF_0_INT_SET_POS))\n#define EF_CTRL_EF_IF_PROT_CODE_CYC           EF_CTRL_EF_IF_PROT_CODE_CYC\n#define EF_CTRL_EF_IF_PROT_CODE_CYC_POS       (24U)\n#define EF_CTRL_EF_IF_PROT_CODE_CYC_LEN       (8U)\n#define EF_CTRL_EF_IF_PROT_CODE_CYC_MSK       (((1U << EF_CTRL_EF_IF_PROT_CODE_CYC_LEN) - 1) << EF_CTRL_EF_IF_PROT_CODE_CYC_POS)\n#define EF_CTRL_EF_IF_PROT_CODE_CYC_UMSK      (~(((1U << EF_CTRL_EF_IF_PROT_CODE_CYC_LEN) - 1) << EF_CTRL_EF_IF_PROT_CODE_CYC_POS))\n\n/* 0x804 : ef_if_cyc_0 */\n#define EF_CTRL_EF_IF_CYC_0_OFFSET     (0x804)\n#define EF_CTRL_EF_IF_CYC_RD_DMY       EF_CTRL_EF_IF_CYC_RD_DMY\n#define EF_CTRL_EF_IF_CYC_RD_DMY_POS   (0U)\n#define EF_CTRL_EF_IF_CYC_RD_DMY_LEN   (6U)\n#define EF_CTRL_EF_IF_CYC_RD_DMY_MSK   (((1U << EF_CTRL_EF_IF_CYC_RD_DMY_LEN) - 1) << EF_CTRL_EF_IF_CYC_RD_DMY_POS)\n#define EF_CTRL_EF_IF_CYC_RD_DMY_UMSK  (~(((1U << EF_CTRL_EF_IF_CYC_RD_DMY_LEN) - 1) << EF_CTRL_EF_IF_CYC_RD_DMY_POS))\n#define EF_CTRL_EF_IF_CYC_RD_DAT       EF_CTRL_EF_IF_CYC_RD_DAT\n#define EF_CTRL_EF_IF_CYC_RD_DAT_POS   (6U)\n#define EF_CTRL_EF_IF_CYC_RD_DAT_LEN   (6U)\n#define EF_CTRL_EF_IF_CYC_RD_DAT_MSK   (((1U << EF_CTRL_EF_IF_CYC_RD_DAT_LEN) - 1) << EF_CTRL_EF_IF_CYC_RD_DAT_POS)\n#define EF_CTRL_EF_IF_CYC_RD_DAT_UMSK  (~(((1U << EF_CTRL_EF_IF_CYC_RD_DAT_LEN) - 1) << EF_CTRL_EF_IF_CYC_RD_DAT_POS))\n#define EF_CTRL_EF_IF_CYC_RD_ADR       EF_CTRL_EF_IF_CYC_RD_ADR\n#define EF_CTRL_EF_IF_CYC_RD_ADR_POS   (12U)\n#define EF_CTRL_EF_IF_CYC_RD_ADR_LEN   (6U)\n#define EF_CTRL_EF_IF_CYC_RD_ADR_MSK   (((1U << EF_CTRL_EF_IF_CYC_RD_ADR_LEN) - 1) << EF_CTRL_EF_IF_CYC_RD_ADR_POS)\n#define EF_CTRL_EF_IF_CYC_RD_ADR_UMSK  (~(((1U << EF_CTRL_EF_IF_CYC_RD_ADR_LEN) - 1) << EF_CTRL_EF_IF_CYC_RD_ADR_POS))\n#define EF_CTRL_EF_IF_CYC_CS           EF_CTRL_EF_IF_CYC_CS\n#define EF_CTRL_EF_IF_CYC_CS_POS       (18U)\n#define EF_CTRL_EF_IF_CYC_CS_LEN       (6U)\n#define EF_CTRL_EF_IF_CYC_CS_MSK       (((1U << EF_CTRL_EF_IF_CYC_CS_LEN) - 1) << EF_CTRL_EF_IF_CYC_CS_POS)\n#define EF_CTRL_EF_IF_CYC_CS_UMSK      (~(((1U << EF_CTRL_EF_IF_CYC_CS_LEN) - 1) << EF_CTRL_EF_IF_CYC_CS_POS))\n#define EF_CTRL_EF_IF_CYC_PD_CS_S      EF_CTRL_EF_IF_CYC_PD_CS_S\n#define EF_CTRL_EF_IF_CYC_PD_CS_S_POS  (24U)\n#define EF_CTRL_EF_IF_CYC_PD_CS_S_LEN  (8U)\n#define EF_CTRL_EF_IF_CYC_PD_CS_S_MSK  (((1U << EF_CTRL_EF_IF_CYC_PD_CS_S_LEN) - 1) << EF_CTRL_EF_IF_CYC_PD_CS_S_POS)\n#define EF_CTRL_EF_IF_CYC_PD_CS_S_UMSK (~(((1U << EF_CTRL_EF_IF_CYC_PD_CS_S_LEN) - 1) << EF_CTRL_EF_IF_CYC_PD_CS_S_POS))\n\n/* 0x808 : ef_if_cyc_1 */\n#define EF_CTRL_EF_IF_CYC_1_OFFSET     (0x808)\n#define EF_CTRL_EF_IF_CYC_PI           EF_CTRL_EF_IF_CYC_PI\n#define EF_CTRL_EF_IF_CYC_PI_POS       (0U)\n#define EF_CTRL_EF_IF_CYC_PI_LEN       (6U)\n#define EF_CTRL_EF_IF_CYC_PI_MSK       (((1U << EF_CTRL_EF_IF_CYC_PI_LEN) - 1) << EF_CTRL_EF_IF_CYC_PI_POS)\n#define EF_CTRL_EF_IF_CYC_PI_UMSK      (~(((1U << EF_CTRL_EF_IF_CYC_PI_LEN) - 1) << EF_CTRL_EF_IF_CYC_PI_POS))\n#define EF_CTRL_EF_IF_CYC_PP           EF_CTRL_EF_IF_CYC_PP\n#define EF_CTRL_EF_IF_CYC_PP_POS       (6U)\n#define EF_CTRL_EF_IF_CYC_PP_LEN       (8U)\n#define EF_CTRL_EF_IF_CYC_PP_MSK       (((1U << EF_CTRL_EF_IF_CYC_PP_LEN) - 1) << EF_CTRL_EF_IF_CYC_PP_POS)\n#define EF_CTRL_EF_IF_CYC_PP_UMSK      (~(((1U << EF_CTRL_EF_IF_CYC_PP_LEN) - 1) << EF_CTRL_EF_IF_CYC_PP_POS))\n#define EF_CTRL_EF_IF_CYC_WR_ADR       EF_CTRL_EF_IF_CYC_WR_ADR\n#define EF_CTRL_EF_IF_CYC_WR_ADR_POS   (14U)\n#define EF_CTRL_EF_IF_CYC_WR_ADR_LEN   (6U)\n#define EF_CTRL_EF_IF_CYC_WR_ADR_MSK   (((1U << EF_CTRL_EF_IF_CYC_WR_ADR_LEN) - 1) << EF_CTRL_EF_IF_CYC_WR_ADR_POS)\n#define EF_CTRL_EF_IF_CYC_WR_ADR_UMSK  (~(((1U << EF_CTRL_EF_IF_CYC_WR_ADR_LEN) - 1) << EF_CTRL_EF_IF_CYC_WR_ADR_POS))\n#define EF_CTRL_EF_IF_CYC_PS_CS        EF_CTRL_EF_IF_CYC_PS_CS\n#define EF_CTRL_EF_IF_CYC_PS_CS_POS    (20U)\n#define EF_CTRL_EF_IF_CYC_PS_CS_LEN    (6U)\n#define EF_CTRL_EF_IF_CYC_PS_CS_MSK    (((1U << EF_CTRL_EF_IF_CYC_PS_CS_LEN) - 1) << EF_CTRL_EF_IF_CYC_PS_CS_POS)\n#define EF_CTRL_EF_IF_CYC_PS_CS_UMSK   (~(((1U << EF_CTRL_EF_IF_CYC_PS_CS_LEN) - 1) << EF_CTRL_EF_IF_CYC_PS_CS_POS))\n#define EF_CTRL_EF_IF_CYC_PD_CS_H      EF_CTRL_EF_IF_CYC_PD_CS_H\n#define EF_CTRL_EF_IF_CYC_PD_CS_H_POS  (26U)\n#define EF_CTRL_EF_IF_CYC_PD_CS_H_LEN  (6U)\n#define EF_CTRL_EF_IF_CYC_PD_CS_H_MSK  (((1U << EF_CTRL_EF_IF_CYC_PD_CS_H_LEN) - 1) << EF_CTRL_EF_IF_CYC_PD_CS_H_POS)\n#define EF_CTRL_EF_IF_CYC_PD_CS_H_UMSK (~(((1U << EF_CTRL_EF_IF_CYC_PD_CS_H_LEN) - 1) << EF_CTRL_EF_IF_CYC_PD_CS_H_POS))\n\n/* 0x80C : ef_if_0_manual */\n#define EF_CTRL_EF_IF_0_MANUAL_OFFSET       (0x80C)\n#define EF_CTRL_EF_IF_A                     EF_CTRL_EF_IF_A\n#define EF_CTRL_EF_IF_A_POS                 (0U)\n#define EF_CTRL_EF_IF_A_LEN                 (10U)\n#define EF_CTRL_EF_IF_A_MSK                 (((1U << EF_CTRL_EF_IF_A_LEN) - 1) << EF_CTRL_EF_IF_A_POS)\n#define EF_CTRL_EF_IF_A_UMSK                (~(((1U << EF_CTRL_EF_IF_A_LEN) - 1) << EF_CTRL_EF_IF_A_POS))\n#define EF_CTRL_EF_IF_PD                    EF_CTRL_EF_IF_PD\n#define EF_CTRL_EF_IF_PD_POS                (10U)\n#define EF_CTRL_EF_IF_PD_LEN                (1U)\n#define EF_CTRL_EF_IF_PD_MSK                (((1U << EF_CTRL_EF_IF_PD_LEN) - 1) << EF_CTRL_EF_IF_PD_POS)\n#define EF_CTRL_EF_IF_PD_UMSK               (~(((1U << EF_CTRL_EF_IF_PD_LEN) - 1) << EF_CTRL_EF_IF_PD_POS))\n#define EF_CTRL_EF_IF_PS                    EF_CTRL_EF_IF_PS\n#define EF_CTRL_EF_IF_PS_POS                (11U)\n#define EF_CTRL_EF_IF_PS_LEN                (1U)\n#define EF_CTRL_EF_IF_PS_MSK                (((1U << EF_CTRL_EF_IF_PS_LEN) - 1) << EF_CTRL_EF_IF_PS_POS)\n#define EF_CTRL_EF_IF_PS_UMSK               (~(((1U << EF_CTRL_EF_IF_PS_LEN) - 1) << EF_CTRL_EF_IF_PS_POS))\n#define EF_CTRL_EF_IF_STROBE                EF_CTRL_EF_IF_STROBE\n#define EF_CTRL_EF_IF_STROBE_POS            (12U)\n#define EF_CTRL_EF_IF_STROBE_LEN            (1U)\n#define EF_CTRL_EF_IF_STROBE_MSK            (((1U << EF_CTRL_EF_IF_STROBE_LEN) - 1) << EF_CTRL_EF_IF_STROBE_POS)\n#define EF_CTRL_EF_IF_STROBE_UMSK           (~(((1U << EF_CTRL_EF_IF_STROBE_LEN) - 1) << EF_CTRL_EF_IF_STROBE_POS))\n#define EF_CTRL_EF_IF_PGENB                 EF_CTRL_EF_IF_PGENB\n#define EF_CTRL_EF_IF_PGENB_POS             (13U)\n#define EF_CTRL_EF_IF_PGENB_LEN             (1U)\n#define EF_CTRL_EF_IF_PGENB_MSK             (((1U << EF_CTRL_EF_IF_PGENB_LEN) - 1) << EF_CTRL_EF_IF_PGENB_POS)\n#define EF_CTRL_EF_IF_PGENB_UMSK            (~(((1U << EF_CTRL_EF_IF_PGENB_LEN) - 1) << EF_CTRL_EF_IF_PGENB_POS))\n#define EF_CTRL_EF_IF_LOAD                  EF_CTRL_EF_IF_LOAD\n#define EF_CTRL_EF_IF_LOAD_POS              (14U)\n#define EF_CTRL_EF_IF_LOAD_LEN              (1U)\n#define EF_CTRL_EF_IF_LOAD_MSK              (((1U << EF_CTRL_EF_IF_LOAD_LEN) - 1) << EF_CTRL_EF_IF_LOAD_POS)\n#define EF_CTRL_EF_IF_LOAD_UMSK             (~(((1U << EF_CTRL_EF_IF_LOAD_LEN) - 1) << EF_CTRL_EF_IF_LOAD_POS))\n#define EF_CTRL_EF_IF_CSB                   EF_CTRL_EF_IF_CSB\n#define EF_CTRL_EF_IF_CSB_POS               (15U)\n#define EF_CTRL_EF_IF_CSB_LEN               (1U)\n#define EF_CTRL_EF_IF_CSB_MSK               (((1U << EF_CTRL_EF_IF_CSB_LEN) - 1) << EF_CTRL_EF_IF_CSB_POS)\n#define EF_CTRL_EF_IF_CSB_UMSK              (~(((1U << EF_CTRL_EF_IF_CSB_LEN) - 1) << EF_CTRL_EF_IF_CSB_POS))\n#define EF_CTRL_EF_IF_0_Q                   EF_CTRL_EF_IF_0_Q\n#define EF_CTRL_EF_IF_0_Q_POS               (16U)\n#define EF_CTRL_EF_IF_0_Q_LEN               (8U)\n#define EF_CTRL_EF_IF_0_Q_MSK               (((1U << EF_CTRL_EF_IF_0_Q_LEN) - 1) << EF_CTRL_EF_IF_0_Q_POS)\n#define EF_CTRL_EF_IF_0_Q_UMSK              (~(((1U << EF_CTRL_EF_IF_0_Q_LEN) - 1) << EF_CTRL_EF_IF_0_Q_POS))\n#define EF_CTRL_EF_IF_PROT_CODE_MANUAL      EF_CTRL_EF_IF_PROT_CODE_MANUAL\n#define EF_CTRL_EF_IF_PROT_CODE_MANUAL_POS  (24U)\n#define EF_CTRL_EF_IF_PROT_CODE_MANUAL_LEN  (8U)\n#define EF_CTRL_EF_IF_PROT_CODE_MANUAL_MSK  (((1U << EF_CTRL_EF_IF_PROT_CODE_MANUAL_LEN) - 1) << EF_CTRL_EF_IF_PROT_CODE_MANUAL_POS)\n#define EF_CTRL_EF_IF_PROT_CODE_MANUAL_UMSK (~(((1U << EF_CTRL_EF_IF_PROT_CODE_MANUAL_LEN) - 1) << EF_CTRL_EF_IF_PROT_CODE_MANUAL_POS))\n\n/* 0x810 : ef_if_0_status */\n#define EF_CTRL_EF_IF_0_STATUS_OFFSET (0x810)\n#define EF_CTRL_EF_IF_0_STATUS        EF_CTRL_EF_IF_0_STATUS\n#define EF_CTRL_EF_IF_0_STATUS_POS    (0U)\n#define EF_CTRL_EF_IF_0_STATUS_LEN    (32U)\n#define EF_CTRL_EF_IF_0_STATUS_MSK    (((1U << EF_CTRL_EF_IF_0_STATUS_LEN) - 1) << EF_CTRL_EF_IF_0_STATUS_POS)\n#define EF_CTRL_EF_IF_0_STATUS_UMSK   (~(((1U << EF_CTRL_EF_IF_0_STATUS_LEN) - 1) << EF_CTRL_EF_IF_0_STATUS_POS))\n\n/* 0x814 : ef_if_cfg_0 */\n#define EF_CTRL_EF_IF_CFG_0_OFFSET         (0x814)\n#define EF_CTRL_EF_IF_SF_AES_MODE          EF_CTRL_EF_IF_SF_AES_MODE\n#define EF_CTRL_EF_IF_SF_AES_MODE_POS      (0U)\n#define EF_CTRL_EF_IF_SF_AES_MODE_LEN      (2U)\n#define EF_CTRL_EF_IF_SF_AES_MODE_MSK      (((1U << EF_CTRL_EF_IF_SF_AES_MODE_LEN) - 1) << EF_CTRL_EF_IF_SF_AES_MODE_POS)\n#define EF_CTRL_EF_IF_SF_AES_MODE_UMSK     (~(((1U << EF_CTRL_EF_IF_SF_AES_MODE_LEN) - 1) << EF_CTRL_EF_IF_SF_AES_MODE_POS))\n#define EF_CTRL_EF_IF_SBOOT_SIGN_MODE      EF_CTRL_EF_IF_SBOOT_SIGN_MODE\n#define EF_CTRL_EF_IF_SBOOT_SIGN_MODE_POS  (2U)\n#define EF_CTRL_EF_IF_SBOOT_SIGN_MODE_LEN  (2U)\n#define EF_CTRL_EF_IF_SBOOT_SIGN_MODE_MSK  (((1U << EF_CTRL_EF_IF_SBOOT_SIGN_MODE_LEN) - 1) << EF_CTRL_EF_IF_SBOOT_SIGN_MODE_POS)\n#define EF_CTRL_EF_IF_SBOOT_SIGN_MODE_UMSK (~(((1U << EF_CTRL_EF_IF_SBOOT_SIGN_MODE_LEN) - 1) << EF_CTRL_EF_IF_SBOOT_SIGN_MODE_POS))\n#define EF_CTRL_EF_IF_SBOOT_EN             EF_CTRL_EF_IF_SBOOT_EN\n#define EF_CTRL_EF_IF_SBOOT_EN_POS         (4U)\n#define EF_CTRL_EF_IF_SBOOT_EN_LEN         (2U)\n#define EF_CTRL_EF_IF_SBOOT_EN_MSK         (((1U << EF_CTRL_EF_IF_SBOOT_EN_LEN) - 1) << EF_CTRL_EF_IF_SBOOT_EN_POS)\n#define EF_CTRL_EF_IF_SBOOT_EN_UMSK        (~(((1U << EF_CTRL_EF_IF_SBOOT_EN_LEN) - 1) << EF_CTRL_EF_IF_SBOOT_EN_POS))\n#define EF_CTRL_EF_IF_CPU1_ENC_EN          EF_CTRL_EF_IF_CPU1_ENC_EN\n#define EF_CTRL_EF_IF_CPU1_ENC_EN_POS      (6U)\n#define EF_CTRL_EF_IF_CPU1_ENC_EN_LEN      (1U)\n#define EF_CTRL_EF_IF_CPU1_ENC_EN_MSK      (((1U << EF_CTRL_EF_IF_CPU1_ENC_EN_LEN) - 1) << EF_CTRL_EF_IF_CPU1_ENC_EN_POS)\n#define EF_CTRL_EF_IF_CPU1_ENC_EN_UMSK     (~(((1U << EF_CTRL_EF_IF_CPU1_ENC_EN_LEN) - 1) << EF_CTRL_EF_IF_CPU1_ENC_EN_POS))\n#define EF_CTRL_EF_IF_CPU0_ENC_EN          EF_CTRL_EF_IF_CPU0_ENC_EN\n#define EF_CTRL_EF_IF_CPU0_ENC_EN_POS      (7U)\n#define EF_CTRL_EF_IF_CPU0_ENC_EN_LEN      (1U)\n#define EF_CTRL_EF_IF_CPU0_ENC_EN_MSK      (((1U << EF_CTRL_EF_IF_CPU0_ENC_EN_LEN) - 1) << EF_CTRL_EF_IF_CPU0_ENC_EN_POS)\n#define EF_CTRL_EF_IF_CPU0_ENC_EN_UMSK     (~(((1U << EF_CTRL_EF_IF_CPU0_ENC_EN_LEN) - 1) << EF_CTRL_EF_IF_CPU0_ENC_EN_POS))\n#define EF_CTRL_EF_IF_BOOT_SEL             EF_CTRL_EF_IF_BOOT_SEL\n#define EF_CTRL_EF_IF_BOOT_SEL_POS         (8U)\n#define EF_CTRL_EF_IF_BOOT_SEL_LEN         (4U)\n#define EF_CTRL_EF_IF_BOOT_SEL_MSK         (((1U << EF_CTRL_EF_IF_BOOT_SEL_LEN) - 1) << EF_CTRL_EF_IF_BOOT_SEL_POS)\n#define EF_CTRL_EF_IF_BOOT_SEL_UMSK        (~(((1U << EF_CTRL_EF_IF_BOOT_SEL_LEN) - 1) << EF_CTRL_EF_IF_BOOT_SEL_POS))\n#define EF_CTRL_EF_IF_SF_KEY_0_SEL         EF_CTRL_EF_IF_SF_KEY_0_SEL\n#define EF_CTRL_EF_IF_SF_KEY_0_SEL_POS     (12U)\n#define EF_CTRL_EF_IF_SF_KEY_0_SEL_LEN     (2U)\n#define EF_CTRL_EF_IF_SF_KEY_0_SEL_MSK     (((1U << EF_CTRL_EF_IF_SF_KEY_0_SEL_LEN) - 1) << EF_CTRL_EF_IF_SF_KEY_0_SEL_POS)\n#define EF_CTRL_EF_IF_SF_KEY_0_SEL_UMSK    (~(((1U << EF_CTRL_EF_IF_SF_KEY_0_SEL_LEN) - 1) << EF_CTRL_EF_IF_SF_KEY_0_SEL_POS))\n#define EF_CTRL_EF_IF_SDU_DIS              EF_CTRL_EF_IF_SDU_DIS\n#define EF_CTRL_EF_IF_SDU_DIS_POS          (14U)\n#define EF_CTRL_EF_IF_SDU_DIS_LEN          (1U)\n#define EF_CTRL_EF_IF_SDU_DIS_MSK          (((1U << EF_CTRL_EF_IF_SDU_DIS_LEN) - 1) << EF_CTRL_EF_IF_SDU_DIS_POS)\n#define EF_CTRL_EF_IF_SDU_DIS_UMSK         (~(((1U << EF_CTRL_EF_IF_SDU_DIS_LEN) - 1) << EF_CTRL_EF_IF_SDU_DIS_POS))\n#define EF_CTRL_EF_IF_BLE_DIS              EF_CTRL_EF_IF_BLE_DIS\n#define EF_CTRL_EF_IF_BLE_DIS_POS          (15U)\n#define EF_CTRL_EF_IF_BLE_DIS_LEN          (1U)\n#define EF_CTRL_EF_IF_BLE_DIS_MSK          (((1U << EF_CTRL_EF_IF_BLE_DIS_LEN) - 1) << EF_CTRL_EF_IF_BLE_DIS_POS)\n#define EF_CTRL_EF_IF_BLE_DIS_UMSK         (~(((1U << EF_CTRL_EF_IF_BLE_DIS_LEN) - 1) << EF_CTRL_EF_IF_BLE_DIS_POS))\n#define EF_CTRL_EF_IF_WIFI_DIS             EF_CTRL_EF_IF_WIFI_DIS\n#define EF_CTRL_EF_IF_WIFI_DIS_POS         (16U)\n#define EF_CTRL_EF_IF_WIFI_DIS_LEN         (1U)\n#define EF_CTRL_EF_IF_WIFI_DIS_MSK         (((1U << EF_CTRL_EF_IF_WIFI_DIS_LEN) - 1) << EF_CTRL_EF_IF_WIFI_DIS_POS)\n#define EF_CTRL_EF_IF_WIFI_DIS_UMSK        (~(((1U << EF_CTRL_EF_IF_WIFI_DIS_LEN) - 1) << EF_CTRL_EF_IF_WIFI_DIS_POS))\n#define EF_CTRL_EF_IF_0_KEY_ENC_EN         EF_CTRL_EF_IF_0_KEY_ENC_EN\n#define EF_CTRL_EF_IF_0_KEY_ENC_EN_POS     (17U)\n#define EF_CTRL_EF_IF_0_KEY_ENC_EN_LEN     (1U)\n#define EF_CTRL_EF_IF_0_KEY_ENC_EN_MSK     (((1U << EF_CTRL_EF_IF_0_KEY_ENC_EN_LEN) - 1) << EF_CTRL_EF_IF_0_KEY_ENC_EN_POS)\n#define EF_CTRL_EF_IF_0_KEY_ENC_EN_UMSK    (~(((1U << EF_CTRL_EF_IF_0_KEY_ENC_EN_LEN) - 1) << EF_CTRL_EF_IF_0_KEY_ENC_EN_POS))\n#define EF_CTRL_EF_IF_CAM_DIS              EF_CTRL_EF_IF_CAM_DIS\n#define EF_CTRL_EF_IF_CAM_DIS_POS          (18U)\n#define EF_CTRL_EF_IF_CAM_DIS_LEN          (1U)\n#define EF_CTRL_EF_IF_CAM_DIS_MSK          (((1U << EF_CTRL_EF_IF_CAM_DIS_LEN) - 1) << EF_CTRL_EF_IF_CAM_DIS_POS)\n#define EF_CTRL_EF_IF_CAM_DIS_UMSK         (~(((1U << EF_CTRL_EF_IF_CAM_DIS_LEN) - 1) << EF_CTRL_EF_IF_CAM_DIS_POS))\n#define EF_CTRL_EF_IF_M154_DIS             EF_CTRL_EF_IF_M154_DIS\n#define EF_CTRL_EF_IF_M154_DIS_POS         (19U)\n#define EF_CTRL_EF_IF_M154_DIS_LEN         (1U)\n#define EF_CTRL_EF_IF_M154_DIS_MSK         (((1U << EF_CTRL_EF_IF_M154_DIS_LEN) - 1) << EF_CTRL_EF_IF_M154_DIS_POS)\n#define EF_CTRL_EF_IF_M154_DIS_UMSK        (~(((1U << EF_CTRL_EF_IF_M154_DIS_LEN) - 1) << EF_CTRL_EF_IF_M154_DIS_POS))\n#define EF_CTRL_EF_IF_CPU1_DIS             EF_CTRL_EF_IF_CPU1_DIS\n#define EF_CTRL_EF_IF_CPU1_DIS_POS         (20U)\n#define EF_CTRL_EF_IF_CPU1_DIS_LEN         (1U)\n#define EF_CTRL_EF_IF_CPU1_DIS_MSK         (((1U << EF_CTRL_EF_IF_CPU1_DIS_LEN) - 1) << EF_CTRL_EF_IF_CPU1_DIS_POS)\n#define EF_CTRL_EF_IF_CPU1_DIS_UMSK        (~(((1U << EF_CTRL_EF_IF_CPU1_DIS_LEN) - 1) << EF_CTRL_EF_IF_CPU1_DIS_POS))\n#define EF_CTRL_EF_IF_CPU_RST_DBG_DIS      EF_CTRL_EF_IF_CPU_RST_DBG_DIS\n#define EF_CTRL_EF_IF_CPU_RST_DBG_DIS_POS  (21U)\n#define EF_CTRL_EF_IF_CPU_RST_DBG_DIS_LEN  (1U)\n#define EF_CTRL_EF_IF_CPU_RST_DBG_DIS_MSK  (((1U << EF_CTRL_EF_IF_CPU_RST_DBG_DIS_LEN) - 1) << EF_CTRL_EF_IF_CPU_RST_DBG_DIS_POS)\n#define EF_CTRL_EF_IF_CPU_RST_DBG_DIS_UMSK (~(((1U << EF_CTRL_EF_IF_CPU_RST_DBG_DIS_LEN) - 1) << EF_CTRL_EF_IF_CPU_RST_DBG_DIS_POS))\n#define EF_CTRL_EF_IF_SE_DBG_DIS           EF_CTRL_EF_IF_SE_DBG_DIS\n#define EF_CTRL_EF_IF_SE_DBG_DIS_POS       (22U)\n#define EF_CTRL_EF_IF_SE_DBG_DIS_LEN       (1U)\n#define EF_CTRL_EF_IF_SE_DBG_DIS_MSK       (((1U << EF_CTRL_EF_IF_SE_DBG_DIS_LEN) - 1) << EF_CTRL_EF_IF_SE_DBG_DIS_POS)\n#define EF_CTRL_EF_IF_SE_DBG_DIS_UMSK      (~(((1U << EF_CTRL_EF_IF_SE_DBG_DIS_LEN) - 1) << EF_CTRL_EF_IF_SE_DBG_DIS_POS))\n#define EF_CTRL_EF_IF_EFUSE_DBG_DIS        EF_CTRL_EF_IF_EFUSE_DBG_DIS\n#define EF_CTRL_EF_IF_EFUSE_DBG_DIS_POS    (23U)\n#define EF_CTRL_EF_IF_EFUSE_DBG_DIS_LEN    (1U)\n#define EF_CTRL_EF_IF_EFUSE_DBG_DIS_MSK    (((1U << EF_CTRL_EF_IF_EFUSE_DBG_DIS_LEN) - 1) << EF_CTRL_EF_IF_EFUSE_DBG_DIS_POS)\n#define EF_CTRL_EF_IF_EFUSE_DBG_DIS_UMSK   (~(((1U << EF_CTRL_EF_IF_EFUSE_DBG_DIS_LEN) - 1) << EF_CTRL_EF_IF_EFUSE_DBG_DIS_POS))\n#define EF_CTRL_EF_IF_DBG_JTAG_1_DIS       EF_CTRL_EF_IF_DBG_JTAG_1_DIS\n#define EF_CTRL_EF_IF_DBG_JTAG_1_DIS_POS   (24U)\n#define EF_CTRL_EF_IF_DBG_JTAG_1_DIS_LEN   (2U)\n#define EF_CTRL_EF_IF_DBG_JTAG_1_DIS_MSK   (((1U << EF_CTRL_EF_IF_DBG_JTAG_1_DIS_LEN) - 1) << EF_CTRL_EF_IF_DBG_JTAG_1_DIS_POS)\n#define EF_CTRL_EF_IF_DBG_JTAG_1_DIS_UMSK  (~(((1U << EF_CTRL_EF_IF_DBG_JTAG_1_DIS_LEN) - 1) << EF_CTRL_EF_IF_DBG_JTAG_1_DIS_POS))\n#define EF_CTRL_EF_IF_DBG_JTAG_0_DIS       EF_CTRL_EF_IF_DBG_JTAG_0_DIS\n#define EF_CTRL_EF_IF_DBG_JTAG_0_DIS_POS   (26U)\n#define EF_CTRL_EF_IF_DBG_JTAG_0_DIS_LEN   (2U)\n#define EF_CTRL_EF_IF_DBG_JTAG_0_DIS_MSK   (((1U << EF_CTRL_EF_IF_DBG_JTAG_0_DIS_LEN) - 1) << EF_CTRL_EF_IF_DBG_JTAG_0_DIS_POS)\n#define EF_CTRL_EF_IF_DBG_JTAG_0_DIS_UMSK  (~(((1U << EF_CTRL_EF_IF_DBG_JTAG_0_DIS_LEN) - 1) << EF_CTRL_EF_IF_DBG_JTAG_0_DIS_POS))\n#define EF_CTRL_EF_IF_DBG_MODE             EF_CTRL_EF_IF_DBG_MODE\n#define EF_CTRL_EF_IF_DBG_MODE_POS         (28U)\n#define EF_CTRL_EF_IF_DBG_MODE_LEN         (4U)\n#define EF_CTRL_EF_IF_DBG_MODE_MSK         (((1U << EF_CTRL_EF_IF_DBG_MODE_LEN) - 1) << EF_CTRL_EF_IF_DBG_MODE_POS)\n#define EF_CTRL_EF_IF_DBG_MODE_UMSK        (~(((1U << EF_CTRL_EF_IF_DBG_MODE_LEN) - 1) << EF_CTRL_EF_IF_DBG_MODE_POS))\n\n/* 0x818 : ef_sw_cfg_0 */\n#define EF_CTRL_EF_SW_CFG_0_OFFSET         (0x818)\n#define EF_CTRL_EF_SW_SF_AES_MODE          EF_CTRL_EF_SW_SF_AES_MODE\n#define EF_CTRL_EF_SW_SF_AES_MODE_POS      (0U)\n#define EF_CTRL_EF_SW_SF_AES_MODE_LEN      (2U)\n#define EF_CTRL_EF_SW_SF_AES_MODE_MSK      (((1U << EF_CTRL_EF_SW_SF_AES_MODE_LEN) - 1) << EF_CTRL_EF_SW_SF_AES_MODE_POS)\n#define EF_CTRL_EF_SW_SF_AES_MODE_UMSK     (~(((1U << EF_CTRL_EF_SW_SF_AES_MODE_LEN) - 1) << EF_CTRL_EF_SW_SF_AES_MODE_POS))\n#define EF_CTRL_EF_SW_SBOOT_SIGN_MODE      EF_CTRL_EF_SW_SBOOT_SIGN_MODE\n#define EF_CTRL_EF_SW_SBOOT_SIGN_MODE_POS  (2U)\n#define EF_CTRL_EF_SW_SBOOT_SIGN_MODE_LEN  (2U)\n#define EF_CTRL_EF_SW_SBOOT_SIGN_MODE_MSK  (((1U << EF_CTRL_EF_SW_SBOOT_SIGN_MODE_LEN) - 1) << EF_CTRL_EF_SW_SBOOT_SIGN_MODE_POS)\n#define EF_CTRL_EF_SW_SBOOT_SIGN_MODE_UMSK (~(((1U << EF_CTRL_EF_SW_SBOOT_SIGN_MODE_LEN) - 1) << EF_CTRL_EF_SW_SBOOT_SIGN_MODE_POS))\n#define EF_CTRL_EF_SW_SBOOT_EN             EF_CTRL_EF_SW_SBOOT_EN\n#define EF_CTRL_EF_SW_SBOOT_EN_POS         (4U)\n#define EF_CTRL_EF_SW_SBOOT_EN_LEN         (2U)\n#define EF_CTRL_EF_SW_SBOOT_EN_MSK         (((1U << EF_CTRL_EF_SW_SBOOT_EN_LEN) - 1) << EF_CTRL_EF_SW_SBOOT_EN_POS)\n#define EF_CTRL_EF_SW_SBOOT_EN_UMSK        (~(((1U << EF_CTRL_EF_SW_SBOOT_EN_LEN) - 1) << EF_CTRL_EF_SW_SBOOT_EN_POS))\n#define EF_CTRL_EF_SW_CPU1_ENC_EN          EF_CTRL_EF_SW_CPU1_ENC_EN\n#define EF_CTRL_EF_SW_CPU1_ENC_EN_POS      (6U)\n#define EF_CTRL_EF_SW_CPU1_ENC_EN_LEN      (1U)\n#define EF_CTRL_EF_SW_CPU1_ENC_EN_MSK      (((1U << EF_CTRL_EF_SW_CPU1_ENC_EN_LEN) - 1) << EF_CTRL_EF_SW_CPU1_ENC_EN_POS)\n#define EF_CTRL_EF_SW_CPU1_ENC_EN_UMSK     (~(((1U << EF_CTRL_EF_SW_CPU1_ENC_EN_LEN) - 1) << EF_CTRL_EF_SW_CPU1_ENC_EN_POS))\n#define EF_CTRL_EF_SW_CPU0_ENC_EN          EF_CTRL_EF_SW_CPU0_ENC_EN\n#define EF_CTRL_EF_SW_CPU0_ENC_EN_POS      (7U)\n#define EF_CTRL_EF_SW_CPU0_ENC_EN_LEN      (1U)\n#define EF_CTRL_EF_SW_CPU0_ENC_EN_MSK      (((1U << EF_CTRL_EF_SW_CPU0_ENC_EN_LEN) - 1) << EF_CTRL_EF_SW_CPU0_ENC_EN_POS)\n#define EF_CTRL_EF_SW_CPU0_ENC_EN_UMSK     (~(((1U << EF_CTRL_EF_SW_CPU0_ENC_EN_LEN) - 1) << EF_CTRL_EF_SW_CPU0_ENC_EN_POS))\n#define EF_CTRL_EF_SW_SF_KEY_0_SEL         EF_CTRL_EF_SW_SF_KEY_0_SEL\n#define EF_CTRL_EF_SW_SF_KEY_0_SEL_POS     (12U)\n#define EF_CTRL_EF_SW_SF_KEY_0_SEL_LEN     (2U)\n#define EF_CTRL_EF_SW_SF_KEY_0_SEL_MSK     (((1U << EF_CTRL_EF_SW_SF_KEY_0_SEL_LEN) - 1) << EF_CTRL_EF_SW_SF_KEY_0_SEL_POS)\n#define EF_CTRL_EF_SW_SF_KEY_0_SEL_UMSK    (~(((1U << EF_CTRL_EF_SW_SF_KEY_0_SEL_LEN) - 1) << EF_CTRL_EF_SW_SF_KEY_0_SEL_POS))\n#define EF_CTRL_EF_SW_SDU_DIS              EF_CTRL_EF_SW_SDU_DIS\n#define EF_CTRL_EF_SW_SDU_DIS_POS          (14U)\n#define EF_CTRL_EF_SW_SDU_DIS_LEN          (1U)\n#define EF_CTRL_EF_SW_SDU_DIS_MSK          (((1U << EF_CTRL_EF_SW_SDU_DIS_LEN) - 1) << EF_CTRL_EF_SW_SDU_DIS_POS)\n#define EF_CTRL_EF_SW_SDU_DIS_UMSK         (~(((1U << EF_CTRL_EF_SW_SDU_DIS_LEN) - 1) << EF_CTRL_EF_SW_SDU_DIS_POS))\n#define EF_CTRL_EF_SW_BLE_DIS              EF_CTRL_EF_SW_BLE_DIS\n#define EF_CTRL_EF_SW_BLE_DIS_POS          (15U)\n#define EF_CTRL_EF_SW_BLE_DIS_LEN          (1U)\n#define EF_CTRL_EF_SW_BLE_DIS_MSK          (((1U << EF_CTRL_EF_SW_BLE_DIS_LEN) - 1) << EF_CTRL_EF_SW_BLE_DIS_POS)\n#define EF_CTRL_EF_SW_BLE_DIS_UMSK         (~(((1U << EF_CTRL_EF_SW_BLE_DIS_LEN) - 1) << EF_CTRL_EF_SW_BLE_DIS_POS))\n#define EF_CTRL_EF_SW_WIFI_DIS             EF_CTRL_EF_SW_WIFI_DIS\n#define EF_CTRL_EF_SW_WIFI_DIS_POS         (16U)\n#define EF_CTRL_EF_SW_WIFI_DIS_LEN         (1U)\n#define EF_CTRL_EF_SW_WIFI_DIS_MSK         (((1U << EF_CTRL_EF_SW_WIFI_DIS_LEN) - 1) << EF_CTRL_EF_SW_WIFI_DIS_POS)\n#define EF_CTRL_EF_SW_WIFI_DIS_UMSK        (~(((1U << EF_CTRL_EF_SW_WIFI_DIS_LEN) - 1) << EF_CTRL_EF_SW_WIFI_DIS_POS))\n#define EF_CTRL_EF_SW_0_KEY_ENC_EN         EF_CTRL_EF_SW_0_KEY_ENC_EN\n#define EF_CTRL_EF_SW_0_KEY_ENC_EN_POS     (17U)\n#define EF_CTRL_EF_SW_0_KEY_ENC_EN_LEN     (1U)\n#define EF_CTRL_EF_SW_0_KEY_ENC_EN_MSK     (((1U << EF_CTRL_EF_SW_0_KEY_ENC_EN_LEN) - 1) << EF_CTRL_EF_SW_0_KEY_ENC_EN_POS)\n#define EF_CTRL_EF_SW_0_KEY_ENC_EN_UMSK    (~(((1U << EF_CTRL_EF_SW_0_KEY_ENC_EN_LEN) - 1) << EF_CTRL_EF_SW_0_KEY_ENC_EN_POS))\n#define EF_CTRL_EF_SW_CAM_DIS              EF_CTRL_EF_SW_CAM_DIS\n#define EF_CTRL_EF_SW_CAM_DIS_POS          (18U)\n#define EF_CTRL_EF_SW_CAM_DIS_LEN          (1U)\n#define EF_CTRL_EF_SW_CAM_DIS_MSK          (((1U << EF_CTRL_EF_SW_CAM_DIS_LEN) - 1) << EF_CTRL_EF_SW_CAM_DIS_POS)\n#define EF_CTRL_EF_SW_CAM_DIS_UMSK         (~(((1U << EF_CTRL_EF_SW_CAM_DIS_LEN) - 1) << EF_CTRL_EF_SW_CAM_DIS_POS))\n#define EF_CTRL_EF_SW_M154_DIS             EF_CTRL_EF_SW_M154_DIS\n#define EF_CTRL_EF_SW_M154_DIS_POS         (19U)\n#define EF_CTRL_EF_SW_M154_DIS_LEN         (1U)\n#define EF_CTRL_EF_SW_M154_DIS_MSK         (((1U << EF_CTRL_EF_SW_M154_DIS_LEN) - 1) << EF_CTRL_EF_SW_M154_DIS_POS)\n#define EF_CTRL_EF_SW_M154_DIS_UMSK        (~(((1U << EF_CTRL_EF_SW_M154_DIS_LEN) - 1) << EF_CTRL_EF_SW_M154_DIS_POS))\n#define EF_CTRL_EF_SW_CPU1_DIS             EF_CTRL_EF_SW_CPU1_DIS\n#define EF_CTRL_EF_SW_CPU1_DIS_POS         (20U)\n#define EF_CTRL_EF_SW_CPU1_DIS_LEN         (1U)\n#define EF_CTRL_EF_SW_CPU1_DIS_MSK         (((1U << EF_CTRL_EF_SW_CPU1_DIS_LEN) - 1) << EF_CTRL_EF_SW_CPU1_DIS_POS)\n#define EF_CTRL_EF_SW_CPU1_DIS_UMSK        (~(((1U << EF_CTRL_EF_SW_CPU1_DIS_LEN) - 1) << EF_CTRL_EF_SW_CPU1_DIS_POS))\n#define EF_CTRL_EF_SW_CPU_RST_DBG_DIS      EF_CTRL_EF_SW_CPU_RST_DBG_DIS\n#define EF_CTRL_EF_SW_CPU_RST_DBG_DIS_POS  (21U)\n#define EF_CTRL_EF_SW_CPU_RST_DBG_DIS_LEN  (1U)\n#define EF_CTRL_EF_SW_CPU_RST_DBG_DIS_MSK  (((1U << EF_CTRL_EF_SW_CPU_RST_DBG_DIS_LEN) - 1) << EF_CTRL_EF_SW_CPU_RST_DBG_DIS_POS)\n#define EF_CTRL_EF_SW_CPU_RST_DBG_DIS_UMSK (~(((1U << EF_CTRL_EF_SW_CPU_RST_DBG_DIS_LEN) - 1) << EF_CTRL_EF_SW_CPU_RST_DBG_DIS_POS))\n#define EF_CTRL_EF_SW_SE_DBG_DIS           EF_CTRL_EF_SW_SE_DBG_DIS\n#define EF_CTRL_EF_SW_SE_DBG_DIS_POS       (22U)\n#define EF_CTRL_EF_SW_SE_DBG_DIS_LEN       (1U)\n#define EF_CTRL_EF_SW_SE_DBG_DIS_MSK       (((1U << EF_CTRL_EF_SW_SE_DBG_DIS_LEN) - 1) << EF_CTRL_EF_SW_SE_DBG_DIS_POS)\n#define EF_CTRL_EF_SW_SE_DBG_DIS_UMSK      (~(((1U << EF_CTRL_EF_SW_SE_DBG_DIS_LEN) - 1) << EF_CTRL_EF_SW_SE_DBG_DIS_POS))\n#define EF_CTRL_EF_SW_EFUSE_DBG_DIS        EF_CTRL_EF_SW_EFUSE_DBG_DIS\n#define EF_CTRL_EF_SW_EFUSE_DBG_DIS_POS    (23U)\n#define EF_CTRL_EF_SW_EFUSE_DBG_DIS_LEN    (1U)\n#define EF_CTRL_EF_SW_EFUSE_DBG_DIS_MSK    (((1U << EF_CTRL_EF_SW_EFUSE_DBG_DIS_LEN) - 1) << EF_CTRL_EF_SW_EFUSE_DBG_DIS_POS)\n#define EF_CTRL_EF_SW_EFUSE_DBG_DIS_UMSK   (~(((1U << EF_CTRL_EF_SW_EFUSE_DBG_DIS_LEN) - 1) << EF_CTRL_EF_SW_EFUSE_DBG_DIS_POS))\n#define EF_CTRL_EF_SW_DBG_JTAG_1_DIS       EF_CTRL_EF_SW_DBG_JTAG_1_DIS\n#define EF_CTRL_EF_SW_DBG_JTAG_1_DIS_POS   (24U)\n#define EF_CTRL_EF_SW_DBG_JTAG_1_DIS_LEN   (2U)\n#define EF_CTRL_EF_SW_DBG_JTAG_1_DIS_MSK   (((1U << EF_CTRL_EF_SW_DBG_JTAG_1_DIS_LEN) - 1) << EF_CTRL_EF_SW_DBG_JTAG_1_DIS_POS)\n#define EF_CTRL_EF_SW_DBG_JTAG_1_DIS_UMSK  (~(((1U << EF_CTRL_EF_SW_DBG_JTAG_1_DIS_LEN) - 1) << EF_CTRL_EF_SW_DBG_JTAG_1_DIS_POS))\n#define EF_CTRL_EF_SW_DBG_JTAG_0_DIS       EF_CTRL_EF_SW_DBG_JTAG_0_DIS\n#define EF_CTRL_EF_SW_DBG_JTAG_0_DIS_POS   (26U)\n#define EF_CTRL_EF_SW_DBG_JTAG_0_DIS_LEN   (2U)\n#define EF_CTRL_EF_SW_DBG_JTAG_0_DIS_MSK   (((1U << EF_CTRL_EF_SW_DBG_JTAG_0_DIS_LEN) - 1) << EF_CTRL_EF_SW_DBG_JTAG_0_DIS_POS)\n#define EF_CTRL_EF_SW_DBG_JTAG_0_DIS_UMSK  (~(((1U << EF_CTRL_EF_SW_DBG_JTAG_0_DIS_LEN) - 1) << EF_CTRL_EF_SW_DBG_JTAG_0_DIS_POS))\n#define EF_CTRL_EF_SW_DBG_MODE             EF_CTRL_EF_SW_DBG_MODE\n#define EF_CTRL_EF_SW_DBG_MODE_POS         (28U)\n#define EF_CTRL_EF_SW_DBG_MODE_LEN         (4U)\n#define EF_CTRL_EF_SW_DBG_MODE_MSK         (((1U << EF_CTRL_EF_SW_DBG_MODE_LEN) - 1) << EF_CTRL_EF_SW_DBG_MODE_POS)\n#define EF_CTRL_EF_SW_DBG_MODE_UMSK        (~(((1U << EF_CTRL_EF_SW_DBG_MODE_LEN) - 1) << EF_CTRL_EF_SW_DBG_MODE_POS))\n\n/* 0x81C : ef_reserved */\n#define EF_CTRL_EF_RESERVED_OFFSET (0x81C)\n#define EF_CTRL_EF_RESERVED        EF_CTRL_EF_RESERVED\n#define EF_CTRL_EF_RESERVED_POS    (0U)\n#define EF_CTRL_EF_RESERVED_LEN    (32U)\n#define EF_CTRL_EF_RESERVED_MSK    (((1U << EF_CTRL_EF_RESERVED_LEN) - 1) << EF_CTRL_EF_RESERVED_POS)\n#define EF_CTRL_EF_RESERVED_UMSK   (~(((1U << EF_CTRL_EF_RESERVED_LEN) - 1) << EF_CTRL_EF_RESERVED_POS))\n\n/* 0x820 : ef_if_ana_trim_0 */\n#define EF_CTRL_EF_IF_ANA_TRIM_0_OFFSET (0x820)\n#define EF_CTRL_EF_IF_ANA_TRIM_0        EF_CTRL_EF_IF_ANA_TRIM_0\n#define EF_CTRL_EF_IF_ANA_TRIM_0_POS    (0U)\n#define EF_CTRL_EF_IF_ANA_TRIM_0_LEN    (32U)\n#define EF_CTRL_EF_IF_ANA_TRIM_0_MSK    (((1U << EF_CTRL_EF_IF_ANA_TRIM_0_LEN) - 1) << EF_CTRL_EF_IF_ANA_TRIM_0_POS)\n#define EF_CTRL_EF_IF_ANA_TRIM_0_UMSK   (~(((1U << EF_CTRL_EF_IF_ANA_TRIM_0_LEN) - 1) << EF_CTRL_EF_IF_ANA_TRIM_0_POS))\n\n/* 0x824 : ef_if_sw_usage_0 */\n#define EF_CTRL_EF_IF_SW_USAGE_0_OFFSET (0x824)\n#define EF_CTRL_EF_IF_SW_USAGE_0        EF_CTRL_EF_IF_SW_USAGE_0\n#define EF_CTRL_EF_IF_SW_USAGE_0_POS    (0U)\n#define EF_CTRL_EF_IF_SW_USAGE_0_LEN    (32U)\n#define EF_CTRL_EF_IF_SW_USAGE_0_MSK    (((1U << EF_CTRL_EF_IF_SW_USAGE_0_LEN) - 1) << EF_CTRL_EF_IF_SW_USAGE_0_POS)\n#define EF_CTRL_EF_IF_SW_USAGE_0_UMSK   (~(((1U << EF_CTRL_EF_IF_SW_USAGE_0_LEN) - 1) << EF_CTRL_EF_IF_SW_USAGE_0_POS))\n\n/* 0xA00 : ef_crc_ctrl_0 */\n#define EF_CTRL_EF_CRC_CTRL_0_OFFSET    (0xA00)\n#define EF_CTRL_EF_CRC_BUSY             EF_CTRL_EF_CRC_BUSY\n#define EF_CTRL_EF_CRC_BUSY_POS         (0U)\n#define EF_CTRL_EF_CRC_BUSY_LEN         (1U)\n#define EF_CTRL_EF_CRC_BUSY_MSK         (((1U << EF_CTRL_EF_CRC_BUSY_LEN) - 1) << EF_CTRL_EF_CRC_BUSY_POS)\n#define EF_CTRL_EF_CRC_BUSY_UMSK        (~(((1U << EF_CTRL_EF_CRC_BUSY_LEN) - 1) << EF_CTRL_EF_CRC_BUSY_POS))\n#define EF_CTRL_EF_CRC_TRIG             EF_CTRL_EF_CRC_TRIG\n#define EF_CTRL_EF_CRC_TRIG_POS         (1U)\n#define EF_CTRL_EF_CRC_TRIG_LEN         (1U)\n#define EF_CTRL_EF_CRC_TRIG_MSK         (((1U << EF_CTRL_EF_CRC_TRIG_LEN) - 1) << EF_CTRL_EF_CRC_TRIG_POS)\n#define EF_CTRL_EF_CRC_TRIG_UMSK        (~(((1U << EF_CTRL_EF_CRC_TRIG_LEN) - 1) << EF_CTRL_EF_CRC_TRIG_POS))\n#define EF_CTRL_EF_CRC_EN               EF_CTRL_EF_CRC_EN\n#define EF_CTRL_EF_CRC_EN_POS           (2U)\n#define EF_CTRL_EF_CRC_EN_LEN           (1U)\n#define EF_CTRL_EF_CRC_EN_MSK           (((1U << EF_CTRL_EF_CRC_EN_LEN) - 1) << EF_CTRL_EF_CRC_EN_POS)\n#define EF_CTRL_EF_CRC_EN_UMSK          (~(((1U << EF_CTRL_EF_CRC_EN_LEN) - 1) << EF_CTRL_EF_CRC_EN_POS))\n#define EF_CTRL_EF_CRC_MODE             EF_CTRL_EF_CRC_MODE\n#define EF_CTRL_EF_CRC_MODE_POS         (3U)\n#define EF_CTRL_EF_CRC_MODE_LEN         (1U)\n#define EF_CTRL_EF_CRC_MODE_MSK         (((1U << EF_CTRL_EF_CRC_MODE_LEN) - 1) << EF_CTRL_EF_CRC_MODE_POS)\n#define EF_CTRL_EF_CRC_MODE_UMSK        (~(((1U << EF_CTRL_EF_CRC_MODE_LEN) - 1) << EF_CTRL_EF_CRC_MODE_POS))\n#define EF_CTRL_EF_CRC_ERROR            EF_CTRL_EF_CRC_ERROR\n#define EF_CTRL_EF_CRC_ERROR_POS        (4U)\n#define EF_CTRL_EF_CRC_ERROR_LEN        (1U)\n#define EF_CTRL_EF_CRC_ERROR_MSK        (((1U << EF_CTRL_EF_CRC_ERROR_LEN) - 1) << EF_CTRL_EF_CRC_ERROR_POS)\n#define EF_CTRL_EF_CRC_ERROR_UMSK       (~(((1U << EF_CTRL_EF_CRC_ERROR_LEN) - 1) << EF_CTRL_EF_CRC_ERROR_POS))\n#define EF_CTRL_EF_CRC_DOUT_INV_EN      EF_CTRL_EF_CRC_DOUT_INV_EN\n#define EF_CTRL_EF_CRC_DOUT_INV_EN_POS  (5U)\n#define EF_CTRL_EF_CRC_DOUT_INV_EN_LEN  (1U)\n#define EF_CTRL_EF_CRC_DOUT_INV_EN_MSK  (((1U << EF_CTRL_EF_CRC_DOUT_INV_EN_LEN) - 1) << EF_CTRL_EF_CRC_DOUT_INV_EN_POS)\n#define EF_CTRL_EF_CRC_DOUT_INV_EN_UMSK (~(((1U << EF_CTRL_EF_CRC_DOUT_INV_EN_LEN) - 1) << EF_CTRL_EF_CRC_DOUT_INV_EN_POS))\n#define EF_CTRL_EF_CRC_DOUT_ENDIAN      EF_CTRL_EF_CRC_DOUT_ENDIAN\n#define EF_CTRL_EF_CRC_DOUT_ENDIAN_POS  (6U)\n#define EF_CTRL_EF_CRC_DOUT_ENDIAN_LEN  (1U)\n#define EF_CTRL_EF_CRC_DOUT_ENDIAN_MSK  (((1U << EF_CTRL_EF_CRC_DOUT_ENDIAN_LEN) - 1) << EF_CTRL_EF_CRC_DOUT_ENDIAN_POS)\n#define EF_CTRL_EF_CRC_DOUT_ENDIAN_UMSK (~(((1U << EF_CTRL_EF_CRC_DOUT_ENDIAN_LEN) - 1) << EF_CTRL_EF_CRC_DOUT_ENDIAN_POS))\n#define EF_CTRL_EF_CRC_DIN_ENDIAN       EF_CTRL_EF_CRC_DIN_ENDIAN\n#define EF_CTRL_EF_CRC_DIN_ENDIAN_POS   (7U)\n#define EF_CTRL_EF_CRC_DIN_ENDIAN_LEN   (1U)\n#define EF_CTRL_EF_CRC_DIN_ENDIAN_MSK   (((1U << EF_CTRL_EF_CRC_DIN_ENDIAN_LEN) - 1) << EF_CTRL_EF_CRC_DIN_ENDIAN_POS)\n#define EF_CTRL_EF_CRC_DIN_ENDIAN_UMSK  (~(((1U << EF_CTRL_EF_CRC_DIN_ENDIAN_LEN) - 1) << EF_CTRL_EF_CRC_DIN_ENDIAN_POS))\n#define EF_CTRL_EF_CRC_INT              EF_CTRL_EF_CRC_INT\n#define EF_CTRL_EF_CRC_INT_POS          (8U)\n#define EF_CTRL_EF_CRC_INT_LEN          (1U)\n#define EF_CTRL_EF_CRC_INT_MSK          (((1U << EF_CTRL_EF_CRC_INT_LEN) - 1) << EF_CTRL_EF_CRC_INT_POS)\n#define EF_CTRL_EF_CRC_INT_UMSK         (~(((1U << EF_CTRL_EF_CRC_INT_LEN) - 1) << EF_CTRL_EF_CRC_INT_POS))\n#define EF_CTRL_EF_CRC_INT_CLR          EF_CTRL_EF_CRC_INT_CLR\n#define EF_CTRL_EF_CRC_INT_CLR_POS      (9U)\n#define EF_CTRL_EF_CRC_INT_CLR_LEN      (1U)\n#define EF_CTRL_EF_CRC_INT_CLR_MSK      (((1U << EF_CTRL_EF_CRC_INT_CLR_LEN) - 1) << EF_CTRL_EF_CRC_INT_CLR_POS)\n#define EF_CTRL_EF_CRC_INT_CLR_UMSK     (~(((1U << EF_CTRL_EF_CRC_INT_CLR_LEN) - 1) << EF_CTRL_EF_CRC_INT_CLR_POS))\n#define EF_CTRL_EF_CRC_INT_SET          EF_CTRL_EF_CRC_INT_SET\n#define EF_CTRL_EF_CRC_INT_SET_POS      (10U)\n#define EF_CTRL_EF_CRC_INT_SET_LEN      (1U)\n#define EF_CTRL_EF_CRC_INT_SET_MSK      (((1U << EF_CTRL_EF_CRC_INT_SET_LEN) - 1) << EF_CTRL_EF_CRC_INT_SET_POS)\n#define EF_CTRL_EF_CRC_INT_SET_UMSK     (~(((1U << EF_CTRL_EF_CRC_INT_SET_LEN) - 1) << EF_CTRL_EF_CRC_INT_SET_POS))\n#define EF_CTRL_EF_CRC_LOCK             EF_CTRL_EF_CRC_LOCK\n#define EF_CTRL_EF_CRC_LOCK_POS         (11U)\n#define EF_CTRL_EF_CRC_LOCK_LEN         (1U)\n#define EF_CTRL_EF_CRC_LOCK_MSK         (((1U << EF_CTRL_EF_CRC_LOCK_LEN) - 1) << EF_CTRL_EF_CRC_LOCK_POS)\n#define EF_CTRL_EF_CRC_LOCK_UMSK        (~(((1U << EF_CTRL_EF_CRC_LOCK_LEN) - 1) << EF_CTRL_EF_CRC_LOCK_POS))\n#define EF_CTRL_EF_CRC_SLP_N            EF_CTRL_EF_CRC_SLP_N\n#define EF_CTRL_EF_CRC_SLP_N_POS        (16U)\n#define EF_CTRL_EF_CRC_SLP_N_LEN        (16U)\n#define EF_CTRL_EF_CRC_SLP_N_MSK        (((1U << EF_CTRL_EF_CRC_SLP_N_LEN) - 1) << EF_CTRL_EF_CRC_SLP_N_POS)\n#define EF_CTRL_EF_CRC_SLP_N_UMSK       (~(((1U << EF_CTRL_EF_CRC_SLP_N_LEN) - 1) << EF_CTRL_EF_CRC_SLP_N_POS))\n\n/* 0xA04 : ef_crc_ctrl_1 */\n#define EF_CTRL_EF_CRC_CTRL_1_OFFSET  (0xA04)\n#define EF_CTRL_EF_CRC_DATA_0_EN      EF_CTRL_EF_CRC_DATA_0_EN\n#define EF_CTRL_EF_CRC_DATA_0_EN_POS  (0U)\n#define EF_CTRL_EF_CRC_DATA_0_EN_LEN  (32U)\n#define EF_CTRL_EF_CRC_DATA_0_EN_MSK  (((1U << EF_CTRL_EF_CRC_DATA_0_EN_LEN) - 1) << EF_CTRL_EF_CRC_DATA_0_EN_POS)\n#define EF_CTRL_EF_CRC_DATA_0_EN_UMSK (~(((1U << EF_CTRL_EF_CRC_DATA_0_EN_LEN) - 1) << EF_CTRL_EF_CRC_DATA_0_EN_POS))\n\n/* 0xA08 : ef_crc_ctrl_2 */\n#define EF_CTRL_EF_CRC_CTRL_2_OFFSET  (0xA08)\n#define EF_CTRL_EF_CRC_DATA_1_EN      EF_CTRL_EF_CRC_DATA_1_EN\n#define EF_CTRL_EF_CRC_DATA_1_EN_POS  (0U)\n#define EF_CTRL_EF_CRC_DATA_1_EN_LEN  (32U)\n#define EF_CTRL_EF_CRC_DATA_1_EN_MSK  (((1U << EF_CTRL_EF_CRC_DATA_1_EN_LEN) - 1) << EF_CTRL_EF_CRC_DATA_1_EN_POS)\n#define EF_CTRL_EF_CRC_DATA_1_EN_UMSK (~(((1U << EF_CTRL_EF_CRC_DATA_1_EN_LEN) - 1) << EF_CTRL_EF_CRC_DATA_1_EN_POS))\n\n/* 0xA0C : ef_crc_ctrl_3 */\n#define EF_CTRL_EF_CRC_CTRL_3_OFFSET (0xA0C)\n#define EF_CTRL_EF_CRC_IV            EF_CTRL_EF_CRC_IV\n#define EF_CTRL_EF_CRC_IV_POS        (0U)\n#define EF_CTRL_EF_CRC_IV_LEN        (32U)\n#define EF_CTRL_EF_CRC_IV_MSK        (((1U << EF_CTRL_EF_CRC_IV_LEN) - 1) << EF_CTRL_EF_CRC_IV_POS)\n#define EF_CTRL_EF_CRC_IV_UMSK       (~(((1U << EF_CTRL_EF_CRC_IV_LEN) - 1) << EF_CTRL_EF_CRC_IV_POS))\n\n/* 0xA10 : ef_crc_ctrl_4 */\n#define EF_CTRL_EF_CRC_CTRL_4_OFFSET (0xA10)\n#define EF_CTRL_EF_CRC_GOLDEN        EF_CTRL_EF_CRC_GOLDEN\n#define EF_CTRL_EF_CRC_GOLDEN_POS    (0U)\n#define EF_CTRL_EF_CRC_GOLDEN_LEN    (32U)\n#define EF_CTRL_EF_CRC_GOLDEN_MSK    (((1U << EF_CTRL_EF_CRC_GOLDEN_LEN) - 1) << EF_CTRL_EF_CRC_GOLDEN_POS)\n#define EF_CTRL_EF_CRC_GOLDEN_UMSK   (~(((1U << EF_CTRL_EF_CRC_GOLDEN_LEN) - 1) << EF_CTRL_EF_CRC_GOLDEN_POS))\n\n/* 0xA14 : ef_crc_ctrl_5 */\n#define EF_CTRL_EF_CRC_CTRL_5_OFFSET (0xA14)\n#define EF_CTRL_EF_CRC_DOUT          EF_CTRL_EF_CRC_DOUT\n#define EF_CTRL_EF_CRC_DOUT_POS      (0U)\n#define EF_CTRL_EF_CRC_DOUT_LEN      (32U)\n#define EF_CTRL_EF_CRC_DOUT_MSK      (((1U << EF_CTRL_EF_CRC_DOUT_LEN) - 1) << EF_CTRL_EF_CRC_DOUT_POS)\n#define EF_CTRL_EF_CRC_DOUT_UMSK     (~(((1U << EF_CTRL_EF_CRC_DOUT_LEN) - 1) << EF_CTRL_EF_CRC_DOUT_POS))\n\nstruct ef_ctrl_reg {\n    /* 0x0  reserved */\n    uint8_t RESERVED0x0[2048];\n\n    /* 0x800 : ef_if_ctrl_0 */\n    union {\n        struct\n        {\n            uint32_t ef_if_0_autoload_p1_done : 1; /* [    0],          r,        0x1 */\n            uint32_t ef_if_0_autoload_done    : 1; /* [    1],          r,        0x1 */\n            uint32_t ef_if_0_busy             : 1; /* [    2],          r,        0x0 */\n            uint32_t ef_if_0_rw               : 1; /* [    3],        r/w,        0x0 */\n            uint32_t ef_if_0_trig             : 1; /* [    4],        r/w,        0x0 */\n            uint32_t ef_if_0_manual_en        : 1; /* [    5],        r/w,        0x0 */\n            uint32_t ef_if_0_cyc_modify       : 1; /* [    6],        r/w,        0x0 */\n            uint32_t ef_clk_sahb_data_sel     : 1; /* [    7],        r/w,        0x0 */\n            uint32_t ef_if_prot_code_ctrl     : 8; /* [15: 8],        r/w,        0x0 */\n            uint32_t ef_if_por_dig            : 1; /* [   16],        r/w,        0x0 */\n            uint32_t ef_clk_sahb_data_gate    : 1; /* [   17],        r/w,        0x0 */\n            uint32_t ef_if_auto_rd_en         : 1; /* [   18],        r/w,        0x1 */\n            uint32_t ef_if_cyc_modify_lock    : 1; /* [   19],        r/w,        0x0 */\n            uint32_t ef_if_0_int              : 1; /* [   20],          r,        0x0 */\n            uint32_t ef_if_0_int_clr          : 1; /* [   21],        r/w,        0x1 */\n            uint32_t ef_if_0_int_set          : 1; /* [   22],        r/w,        0x0 */\n            uint32_t reserved_23              : 1; /* [   23],       rsvd,        0x0 */\n            uint32_t ef_if_prot_code_cyc      : 8; /* [31:24],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_if_ctrl_0;\n\n    /* 0x804 : ef_if_cyc_0 */\n    union {\n        struct\n        {\n            uint32_t ef_if_cyc_rd_dmy  : 6; /* [ 5: 0],        r/w,        0x0 */\n            uint32_t ef_if_cyc_rd_dat  : 6; /* [11: 6],        r/w,        0x1 */\n            uint32_t ef_if_cyc_rd_adr  : 6; /* [17:12],        r/w,        0x0 */\n            uint32_t ef_if_cyc_cs      : 6; /* [23:18],        r/w,        0x0 */\n            uint32_t ef_if_cyc_pd_cs_s : 8; /* [31:24],        r/w,       0x16 */\n        } BF;\n        uint32_t WORD;\n    } ef_if_cyc_0;\n\n    /* 0x808 : ef_if_cyc_1 */\n    union {\n        struct\n        {\n            uint32_t ef_if_cyc_pi      : 6; /* [ 5: 0],        r/w,        0x9 */\n            uint32_t ef_if_cyc_pp      : 8; /* [13: 6],        r/w,       0x98 */\n            uint32_t ef_if_cyc_wr_adr  : 6; /* [19:14],        r/w,        0x1 */\n            uint32_t ef_if_cyc_ps_cs   : 6; /* [25:20],        r/w,        0x2 */\n            uint32_t ef_if_cyc_pd_cs_h : 6; /* [31:26],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_if_cyc_1;\n\n    /* 0x80C : ef_if_0_manual */\n    union {\n        struct\n        {\n            uint32_t ef_if_a                : 10; /* [ 9: 0],        r/w,        0x0 */\n            uint32_t ef_if_pd               : 1;  /* [   10],        r/w,        0x1 */\n            uint32_t ef_if_ps               : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t ef_if_strobe           : 1;  /* [   12],        r/w,        0x0 */\n            uint32_t ef_if_pgenb            : 1;  /* [   13],        r/w,        0x1 */\n            uint32_t ef_if_load             : 1;  /* [   14],        r/w,        0x1 */\n            uint32_t ef_if_csb              : 1;  /* [   15],        r/w,        0x1 */\n            uint32_t ef_if_0_q              : 8;  /* [23:16],          r,        0x0 */\n            uint32_t ef_if_prot_code_manual : 8;  /* [31:24],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_if_0_manual;\n\n    /* 0x810 : ef_if_0_status */\n    union {\n        struct\n        {\n            uint32_t ef_if_0_status : 32; /* [31: 0],          r,     0xe400 */\n        } BF;\n        uint32_t WORD;\n    } ef_if_0_status;\n\n    /* 0x814 : ef_if_cfg_0 */\n    union {\n        struct\n        {\n            uint32_t ef_if_sf_aes_mode     : 2; /* [ 1: 0],          r,        0x0 */\n            uint32_t ef_if_sboot_sign_mode : 2; /* [ 3: 2],          r,        0x0 */\n            uint32_t ef_if_sboot_en        : 2; /* [ 5: 4],          r,        0x0 */\n            uint32_t ef_if_cpu1_enc_en     : 1; /* [    6],          r,        0x0 */\n            uint32_t ef_if_cpu0_enc_en     : 1; /* [    7],          r,        0x0 */\n            uint32_t ef_if_boot_sel        : 4; /* [11: 8],          r,        0x0 */\n            uint32_t ef_if_sf_key_0_sel    : 2; /* [13:12],          r,        0x0 */\n            uint32_t ef_if_sdu_dis         : 1; /* [   14],          r,        0x0 */\n            uint32_t ef_if_ble_dis         : 1; /* [   15],          r,        0x0 */\n            uint32_t ef_if_wifi_dis        : 1; /* [   16],          r,        0x0 */\n            uint32_t ef_if_0_key_enc_en    : 1; /* [   17],          r,        0x0 */\n            uint32_t ef_if_cam_dis         : 1; /* [   18],          r,        0x0 */\n            uint32_t ef_if_m154_dis        : 1; /* [   19],          r,        0x0 */\n            uint32_t ef_if_cpu1_dis        : 1; /* [   20],          r,        0x0 */\n            uint32_t ef_if_cpu_rst_dbg_dis : 1; /* [   21],          r,        0x0 */\n            uint32_t ef_if_se_dbg_dis      : 1; /* [   22],          r,        0x0 */\n            uint32_t ef_if_efuse_dbg_dis   : 1; /* [   23],          r,        0x0 */\n            uint32_t ef_if_dbg_jtag_1_dis  : 2; /* [25:24],          r,        0x0 */\n            uint32_t ef_if_dbg_jtag_0_dis  : 2; /* [27:26],          r,        0x0 */\n            uint32_t ef_if_dbg_mode        : 4; /* [31:28],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_if_cfg_0;\n\n    /* 0x818 : ef_sw_cfg_0 */\n    union {\n        struct\n        {\n            uint32_t ef_sw_sf_aes_mode     : 2; /* [ 1: 0],        r/w,        0x0 */\n            uint32_t ef_sw_sboot_sign_mode : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t ef_sw_sboot_en        : 2; /* [ 5: 4],        r/w,        0x0 */\n            uint32_t ef_sw_cpu1_enc_en     : 1; /* [    6],        r/w,        0x0 */\n            uint32_t ef_sw_cpu0_enc_en     : 1; /* [    7],        r/w,        0x0 */\n            uint32_t reserved_8_11         : 4; /* [11: 8],       rsvd,        0x0 */\n            uint32_t ef_sw_sf_key_0_sel    : 2; /* [13:12],        r/w,        0x0 */\n            uint32_t ef_sw_sdu_dis         : 1; /* [   14],        r/w,        0x0 */\n            uint32_t ef_sw_ble_dis         : 1; /* [   15],        r/w,        0x0 */\n            uint32_t ef_sw_wifi_dis        : 1; /* [   16],        r/w,        0x0 */\n            uint32_t ef_sw_0_key_enc_en    : 1; /* [   17],        r/w,        0x0 */\n            uint32_t ef_sw_cam_dis         : 1; /* [   18],        r/w,        0x0 */\n            uint32_t ef_sw_m154_dis        : 1; /* [   19],        r/w,        0x0 */\n            uint32_t ef_sw_cpu1_dis        : 1; /* [   20],        r/w,        0x0 */\n            uint32_t ef_sw_cpu_rst_dbg_dis : 1; /* [   21],        r/w,        0x0 */\n            uint32_t ef_sw_se_dbg_dis      : 1; /* [   22],        r/w,        0x0 */\n            uint32_t ef_sw_efuse_dbg_dis   : 1; /* [   23],        r/w,        0x0 */\n            uint32_t ef_sw_dbg_jtag_1_dis  : 2; /* [25:24],        r/w,        0x0 */\n            uint32_t ef_sw_dbg_jtag_0_dis  : 2; /* [27:26],        r/w,        0x0 */\n            uint32_t ef_sw_dbg_mode        : 4; /* [31:28],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_sw_cfg_0;\n\n    /* 0x81C : ef_reserved */\n    union {\n        struct\n        {\n            uint32_t ef_reserved : 32; /* [31: 0],        r/w,     0xffff */\n        } BF;\n        uint32_t WORD;\n    } ef_reserved;\n\n    /* 0x820 : ef_if_ana_trim_0 */\n    union {\n        struct\n        {\n            uint32_t ef_if_ana_trim_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_if_ana_trim_0;\n\n    /* 0x824 : ef_if_sw_usage_0 */\n    union {\n        struct\n        {\n            uint32_t ef_if_sw_usage_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_if_sw_usage_0;\n\n    /* 0x828  reserved */\n    uint8_t RESERVED0x828[472];\n\n    /* 0xA00 : ef_crc_ctrl_0 */\n    union {\n        struct\n        {\n            uint32_t ef_crc_busy        : 1;  /* [    0],          r,        0x0 */\n            uint32_t ef_crc_trig        : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t ef_crc_en          : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t ef_crc_mode        : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t ef_crc_error       : 1;  /* [    4],          r,        0x0 */\n            uint32_t ef_crc_dout_inv_en : 1;  /* [    5],        r/w,        0x1 */\n            uint32_t ef_crc_dout_endian : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t ef_crc_din_endian  : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t ef_crc_int         : 1;  /* [    8],          r,        0x0 */\n            uint32_t ef_crc_int_clr     : 1;  /* [    9],        r/w,        0x1 */\n            uint32_t ef_crc_int_set     : 1;  /* [   10],        r/w,        0x0 */\n            uint32_t ef_crc_lock        : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t reserved_12_15     : 4;  /* [15:12],       rsvd,        0x0 */\n            uint32_t ef_crc_slp_n       : 16; /* [31:16],        r/w,       0xff */\n        } BF;\n        uint32_t WORD;\n    } ef_crc_ctrl_0;\n\n    /* 0xA04 : ef_crc_ctrl_1 */\n    union {\n        struct\n        {\n            uint32_t ef_crc_data_0_en : 32; /* [31: 0],        r/w, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } ef_crc_ctrl_1;\n\n    /* 0xA08 : ef_crc_ctrl_2 */\n    union {\n        struct\n        {\n            uint32_t ef_crc_data_1_en : 32; /* [31: 0],        r/w, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } ef_crc_ctrl_2;\n\n    /* 0xA0C : ef_crc_ctrl_3 */\n    union {\n        struct\n        {\n            uint32_t ef_crc_iv : 32; /* [31: 0],        r/w, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } ef_crc_ctrl_3;\n\n    /* 0xA10 : ef_crc_ctrl_4 */\n    union {\n        struct\n        {\n            uint32_t ef_crc_golden : 32; /* [31: 0],        r/w, 0xc2a8fa9dL */\n        } BF;\n        uint32_t WORD;\n    } ef_crc_ctrl_4;\n\n    /* 0xA14 : ef_crc_ctrl_5 */\n    union {\n        struct\n        {\n            uint32_t ef_crc_dout : 32; /* [31: 0],          r, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } ef_crc_ctrl_5;\n};\n\ntypedef volatile struct ef_ctrl_reg ef_ctrl_reg_t;\n\n#endif /* __EF_CTRL_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/ef_data_0_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    ef_data_0_reg.h\n  * @version V1.2\n  * @date    2020-04-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __EF_DATA_0_REG_H__\n#define __EF_DATA_0_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : ef_cfg_0 */\n#define EF_DATA_0_EF_CFG_0_OFFSET         (0x0)\n#define EF_DATA_0_EF_SF_AES_MODE          EF_DATA_0_EF_SF_AES_MODE\n#define EF_DATA_0_EF_SF_AES_MODE_POS      (0U)\n#define EF_DATA_0_EF_SF_AES_MODE_LEN      (2U)\n#define EF_DATA_0_EF_SF_AES_MODE_MSK      (((1U << EF_DATA_0_EF_SF_AES_MODE_LEN) - 1) << EF_DATA_0_EF_SF_AES_MODE_POS)\n#define EF_DATA_0_EF_SF_AES_MODE_UMSK     (~(((1U << EF_DATA_0_EF_SF_AES_MODE_LEN) - 1) << EF_DATA_0_EF_SF_AES_MODE_POS))\n#define EF_DATA_0_EF_SBOOT_SIGN_MODE      EF_DATA_0_EF_SBOOT_SIGN_MODE\n#define EF_DATA_0_EF_SBOOT_SIGN_MODE_POS  (2U)\n#define EF_DATA_0_EF_SBOOT_SIGN_MODE_LEN  (2U)\n#define EF_DATA_0_EF_SBOOT_SIGN_MODE_MSK  (((1U << EF_DATA_0_EF_SBOOT_SIGN_MODE_LEN) - 1) << EF_DATA_0_EF_SBOOT_SIGN_MODE_POS)\n#define EF_DATA_0_EF_SBOOT_SIGN_MODE_UMSK (~(((1U << EF_DATA_0_EF_SBOOT_SIGN_MODE_LEN) - 1) << EF_DATA_0_EF_SBOOT_SIGN_MODE_POS))\n#define EF_DATA_0_EF_SBOOT_EN             EF_DATA_0_EF_SBOOT_EN\n#define EF_DATA_0_EF_SBOOT_EN_POS         (4U)\n#define EF_DATA_0_EF_SBOOT_EN_LEN         (2U)\n#define EF_DATA_0_EF_SBOOT_EN_MSK         (((1U << EF_DATA_0_EF_SBOOT_EN_LEN) - 1) << EF_DATA_0_EF_SBOOT_EN_POS)\n#define EF_DATA_0_EF_SBOOT_EN_UMSK        (~(((1U << EF_DATA_0_EF_SBOOT_EN_LEN) - 1) << EF_DATA_0_EF_SBOOT_EN_POS))\n#define EF_DATA_0_EF_CPU0_ENC_EN          EF_DATA_0_EF_CPU0_ENC_EN\n#define EF_DATA_0_EF_CPU0_ENC_EN_POS      (7U)\n#define EF_DATA_0_EF_CPU0_ENC_EN_LEN      (1U)\n#define EF_DATA_0_EF_CPU0_ENC_EN_MSK      (((1U << EF_DATA_0_EF_CPU0_ENC_EN_LEN) - 1) << EF_DATA_0_EF_CPU0_ENC_EN_POS)\n#define EF_DATA_0_EF_CPU0_ENC_EN_UMSK     (~(((1U << EF_DATA_0_EF_CPU0_ENC_EN_LEN) - 1) << EF_DATA_0_EF_CPU0_ENC_EN_POS))\n#define EF_DATA_0_EF_BOOT_SEL             EF_DATA_0_EF_BOOT_SEL\n#define EF_DATA_0_EF_BOOT_SEL_POS         (8U)\n#define EF_DATA_0_EF_BOOT_SEL_LEN         (4U)\n#define EF_DATA_0_EF_BOOT_SEL_MSK         (((1U << EF_DATA_0_EF_BOOT_SEL_LEN) - 1) << EF_DATA_0_EF_BOOT_SEL_POS)\n#define EF_DATA_0_EF_BOOT_SEL_UMSK        (~(((1U << EF_DATA_0_EF_BOOT_SEL_LEN) - 1) << EF_DATA_0_EF_BOOT_SEL_POS))\n#define EF_DATA_0_EF_SF_KEY_0_SEL         EF_DATA_0_EF_SF_KEY_0_SEL\n#define EF_DATA_0_EF_SF_KEY_0_SEL_POS     (12U)\n#define EF_DATA_0_EF_SF_KEY_0_SEL_LEN     (2U)\n#define EF_DATA_0_EF_SF_KEY_0_SEL_MSK     (((1U << EF_DATA_0_EF_SF_KEY_0_SEL_LEN) - 1) << EF_DATA_0_EF_SF_KEY_0_SEL_POS)\n#define EF_DATA_0_EF_SF_KEY_0_SEL_UMSK    (~(((1U << EF_DATA_0_EF_SF_KEY_0_SEL_LEN) - 1) << EF_DATA_0_EF_SF_KEY_0_SEL_POS))\n#define EF_DATA_0_EF_0_KEY_ENC_EN         EF_DATA_0_EF_0_KEY_ENC_EN\n#define EF_DATA_0_EF_0_KEY_ENC_EN_POS     (17U)\n#define EF_DATA_0_EF_0_KEY_ENC_EN_LEN     (1U)\n#define EF_DATA_0_EF_0_KEY_ENC_EN_MSK     (((1U << EF_DATA_0_EF_0_KEY_ENC_EN_LEN) - 1) << EF_DATA_0_EF_0_KEY_ENC_EN_POS)\n#define EF_DATA_0_EF_0_KEY_ENC_EN_UMSK    (~(((1U << EF_DATA_0_EF_0_KEY_ENC_EN_LEN) - 1) << EF_DATA_0_EF_0_KEY_ENC_EN_POS))\n#define EF_DATA_0_EF_DBG_JTAG_0_DIS       EF_DATA_0_EF_DBG_JTAG_0_DIS\n#define EF_DATA_0_EF_DBG_JTAG_0_DIS_POS   (26U)\n#define EF_DATA_0_EF_DBG_JTAG_0_DIS_LEN   (2U)\n#define EF_DATA_0_EF_DBG_JTAG_0_DIS_MSK   (((1U << EF_DATA_0_EF_DBG_JTAG_0_DIS_LEN) - 1) << EF_DATA_0_EF_DBG_JTAG_0_DIS_POS)\n#define EF_DATA_0_EF_DBG_JTAG_0_DIS_UMSK  (~(((1U << EF_DATA_0_EF_DBG_JTAG_0_DIS_LEN) - 1) << EF_DATA_0_EF_DBG_JTAG_0_DIS_POS))\n#define EF_DATA_0_EF_DBG_MODE             EF_DATA_0_EF_DBG_MODE\n#define EF_DATA_0_EF_DBG_MODE_POS         (28U)\n#define EF_DATA_0_EF_DBG_MODE_LEN         (4U)\n#define EF_DATA_0_EF_DBG_MODE_MSK         (((1U << EF_DATA_0_EF_DBG_MODE_LEN) - 1) << EF_DATA_0_EF_DBG_MODE_POS)\n#define EF_DATA_0_EF_DBG_MODE_UMSK        (~(((1U << EF_DATA_0_EF_DBG_MODE_LEN) - 1) << EF_DATA_0_EF_DBG_MODE_POS))\n\n/* 0x4 : ef_dbg_pwd_low */\n#define EF_DATA_0_EF_DBG_PWD_LOW_OFFSET (0x4)\n#define EF_DATA_0_EF_DBG_PWD_LOW        EF_DATA_0_EF_DBG_PWD_LOW\n#define EF_DATA_0_EF_DBG_PWD_LOW_POS    (0U)\n#define EF_DATA_0_EF_DBG_PWD_LOW_LEN    (32U)\n#define EF_DATA_0_EF_DBG_PWD_LOW_MSK    (((1U << EF_DATA_0_EF_DBG_PWD_LOW_LEN) - 1) << EF_DATA_0_EF_DBG_PWD_LOW_POS)\n#define EF_DATA_0_EF_DBG_PWD_LOW_UMSK   (~(((1U << EF_DATA_0_EF_DBG_PWD_LOW_LEN) - 1) << EF_DATA_0_EF_DBG_PWD_LOW_POS))\n\n/* 0x8 : ef_dbg_pwd_high */\n#define EF_DATA_0_EF_DBG_PWD_HIGH_OFFSET (0x8)\n#define EF_DATA_0_EF_DBG_PWD_HIGH        EF_DATA_0_EF_DBG_PWD_HIGH\n#define EF_DATA_0_EF_DBG_PWD_HIGH_POS    (0U)\n#define EF_DATA_0_EF_DBG_PWD_HIGH_LEN    (32U)\n#define EF_DATA_0_EF_DBG_PWD_HIGH_MSK    (((1U << EF_DATA_0_EF_DBG_PWD_HIGH_LEN) - 1) << EF_DATA_0_EF_DBG_PWD_HIGH_POS)\n#define EF_DATA_0_EF_DBG_PWD_HIGH_UMSK   (~(((1U << EF_DATA_0_EF_DBG_PWD_HIGH_LEN) - 1) << EF_DATA_0_EF_DBG_PWD_HIGH_POS))\n\n/* 0xC : ef_ana_trim_0 */\n#define EF_DATA_0_EF_ANA_TRIM_0_OFFSET (0xC)\n#define EF_DATA_0_EF_ANA_TRIM_0        EF_DATA_0_EF_ANA_TRIM_0\n#define EF_DATA_0_EF_ANA_TRIM_0_POS    (0U)\n#define EF_DATA_0_EF_ANA_TRIM_0_LEN    (32U)\n#define EF_DATA_0_EF_ANA_TRIM_0_MSK    (((1U << EF_DATA_0_EF_ANA_TRIM_0_LEN) - 1) << EF_DATA_0_EF_ANA_TRIM_0_POS)\n#define EF_DATA_0_EF_ANA_TRIM_0_UMSK   (~(((1U << EF_DATA_0_EF_ANA_TRIM_0_LEN) - 1) << EF_DATA_0_EF_ANA_TRIM_0_POS))\n\n/* 0x10 : ef_sw_usage_0 */\n#define EF_DATA_0_EF_SW_USAGE_0_OFFSET (0x10)\n#define EF_DATA_0_EF_SW_USAGE_0        EF_DATA_0_EF_SW_USAGE_0\n#define EF_DATA_0_EF_SW_USAGE_0_POS    (0U)\n#define EF_DATA_0_EF_SW_USAGE_0_LEN    (32U)\n#define EF_DATA_0_EF_SW_USAGE_0_MSK    (((1U << EF_DATA_0_EF_SW_USAGE_0_LEN) - 1) << EF_DATA_0_EF_SW_USAGE_0_POS)\n#define EF_DATA_0_EF_SW_USAGE_0_UMSK   (~(((1U << EF_DATA_0_EF_SW_USAGE_0_LEN) - 1) << EF_DATA_0_EF_SW_USAGE_0_POS))\n\n/* 0x14 : ef_wifi_mac_low */\n#define EF_DATA_0_EF_WIFI_MAC_LOW_OFFSET (0x14)\n#define EF_DATA_0_EF_WIFI_MAC_LOW        EF_DATA_0_EF_WIFI_MAC_LOW\n#define EF_DATA_0_EF_WIFI_MAC_LOW_POS    (0U)\n#define EF_DATA_0_EF_WIFI_MAC_LOW_LEN    (32U)\n#define EF_DATA_0_EF_WIFI_MAC_LOW_MSK    (((1U << EF_DATA_0_EF_WIFI_MAC_LOW_LEN) - 1) << EF_DATA_0_EF_WIFI_MAC_LOW_POS)\n#define EF_DATA_0_EF_WIFI_MAC_LOW_UMSK   (~(((1U << EF_DATA_0_EF_WIFI_MAC_LOW_LEN) - 1) << EF_DATA_0_EF_WIFI_MAC_LOW_POS))\n\n/* 0x18 : ef_wifi_mac_high */\n#define EF_DATA_0_EF_WIFI_MAC_HIGH_OFFSET (0x18)\n#define EF_DATA_0_EF_WIFI_MAC_HIGH        EF_DATA_0_EF_WIFI_MAC_HIGH\n#define EF_DATA_0_EF_WIFI_MAC_HIGH_POS    (0U)\n#define EF_DATA_0_EF_WIFI_MAC_HIGH_LEN    (32U)\n#define EF_DATA_0_EF_WIFI_MAC_HIGH_MSK    (((1U << EF_DATA_0_EF_WIFI_MAC_HIGH_LEN) - 1) << EF_DATA_0_EF_WIFI_MAC_HIGH_POS)\n#define EF_DATA_0_EF_WIFI_MAC_HIGH_UMSK   (~(((1U << EF_DATA_0_EF_WIFI_MAC_HIGH_LEN) - 1) << EF_DATA_0_EF_WIFI_MAC_HIGH_POS))\n\n/* 0x1C : ef_key_slot_0_w0 */\n#define EF_DATA_0_EF_KEY_SLOT_0_W0_OFFSET (0x1C)\n#define EF_DATA_0_EF_KEY_SLOT_0_W0        EF_DATA_0_EF_KEY_SLOT_0_W0\n#define EF_DATA_0_EF_KEY_SLOT_0_W0_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_0_W0_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_0_W0_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_0_W0_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_0_W0_POS)\n#define EF_DATA_0_EF_KEY_SLOT_0_W0_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_0_W0_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_0_W0_POS))\n\n/* 0x20 : ef_key_slot_0_w1 */\n#define EF_DATA_0_EF_KEY_SLOT_0_W1_OFFSET (0x20)\n#define EF_DATA_0_EF_KEY_SLOT_0_W1        EF_DATA_0_EF_KEY_SLOT_0_W1\n#define EF_DATA_0_EF_KEY_SLOT_0_W1_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_0_W1_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_0_W1_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_0_W1_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_0_W1_POS)\n#define EF_DATA_0_EF_KEY_SLOT_0_W1_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_0_W1_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_0_W1_POS))\n\n/* 0x24 : ef_key_slot_0_w2 */\n#define EF_DATA_0_EF_KEY_SLOT_0_W2_OFFSET (0x24)\n#define EF_DATA_0_EF_KEY_SLOT_0_W2        EF_DATA_0_EF_KEY_SLOT_0_W2\n#define EF_DATA_0_EF_KEY_SLOT_0_W2_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_0_W2_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_0_W2_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_0_W2_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_0_W2_POS)\n#define EF_DATA_0_EF_KEY_SLOT_0_W2_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_0_W2_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_0_W2_POS))\n\n/* 0x28 : ef_key_slot_0_w3 */\n#define EF_DATA_0_EF_KEY_SLOT_0_W3_OFFSET (0x28)\n#define EF_DATA_0_EF_KEY_SLOT_0_W3        EF_DATA_0_EF_KEY_SLOT_0_W3\n#define EF_DATA_0_EF_KEY_SLOT_0_W3_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_0_W3_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_0_W3_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_0_W3_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_0_W3_POS)\n#define EF_DATA_0_EF_KEY_SLOT_0_W3_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_0_W3_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_0_W3_POS))\n\n/* 0x2C : ef_key_slot_1_w0 */\n#define EF_DATA_0_EF_KEY_SLOT_1_W0_OFFSET (0x2C)\n#define EF_DATA_0_EF_KEY_SLOT_1_W0        EF_DATA_0_EF_KEY_SLOT_1_W0\n#define EF_DATA_0_EF_KEY_SLOT_1_W0_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_1_W0_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_1_W0_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_1_W0_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_1_W0_POS)\n#define EF_DATA_0_EF_KEY_SLOT_1_W0_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_1_W0_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_1_W0_POS))\n\n/* 0x30 : ef_key_slot_1_w1 */\n#define EF_DATA_0_EF_KEY_SLOT_1_W1_OFFSET (0x30)\n#define EF_DATA_0_EF_KEY_SLOT_1_W1        EF_DATA_0_EF_KEY_SLOT_1_W1\n#define EF_DATA_0_EF_KEY_SLOT_1_W1_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_1_W1_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_1_W1_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_1_W1_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_1_W1_POS)\n#define EF_DATA_0_EF_KEY_SLOT_1_W1_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_1_W1_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_1_W1_POS))\n\n/* 0x34 : ef_key_slot_1_w2 */\n#define EF_DATA_0_EF_KEY_SLOT_1_W2_OFFSET (0x34)\n#define EF_DATA_0_EF_KEY_SLOT_1_W2        EF_DATA_0_EF_KEY_SLOT_1_W2\n#define EF_DATA_0_EF_KEY_SLOT_1_W2_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_1_W2_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_1_W2_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_1_W2_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_1_W2_POS)\n#define EF_DATA_0_EF_KEY_SLOT_1_W2_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_1_W2_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_1_W2_POS))\n\n/* 0x38 : ef_key_slot_1_w3 */\n#define EF_DATA_0_EF_KEY_SLOT_1_W3_OFFSET (0x38)\n#define EF_DATA_0_EF_KEY_SLOT_1_W3        EF_DATA_0_EF_KEY_SLOT_1_W3\n#define EF_DATA_0_EF_KEY_SLOT_1_W3_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_1_W3_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_1_W3_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_1_W3_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_1_W3_POS)\n#define EF_DATA_0_EF_KEY_SLOT_1_W3_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_1_W3_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_1_W3_POS))\n\n/* 0x3C : ef_key_slot_2_w0 */\n#define EF_DATA_0_EF_KEY_SLOT_2_W0_OFFSET (0x3C)\n#define EF_DATA_0_EF_KEY_SLOT_2_W0        EF_DATA_0_EF_KEY_SLOT_2_W0\n#define EF_DATA_0_EF_KEY_SLOT_2_W0_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_2_W0_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_2_W0_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_2_W0_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_2_W0_POS)\n#define EF_DATA_0_EF_KEY_SLOT_2_W0_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_2_W0_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_2_W0_POS))\n\n/* 0x40 : ef_key_slot_2_w1 */\n#define EF_DATA_0_EF_KEY_SLOT_2_W1_OFFSET (0x40)\n#define EF_DATA_0_EF_KEY_SLOT_2_W1        EF_DATA_0_EF_KEY_SLOT_2_W1\n#define EF_DATA_0_EF_KEY_SLOT_2_W1_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_2_W1_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_2_W1_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_2_W1_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_2_W1_POS)\n#define EF_DATA_0_EF_KEY_SLOT_2_W1_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_2_W1_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_2_W1_POS))\n\n/* 0x44 : ef_key_slot_2_w2 */\n#define EF_DATA_0_EF_KEY_SLOT_2_W2_OFFSET (0x44)\n#define EF_DATA_0_EF_KEY_SLOT_2_W2        EF_DATA_0_EF_KEY_SLOT_2_W2\n#define EF_DATA_0_EF_KEY_SLOT_2_W2_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_2_W2_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_2_W2_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_2_W2_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_2_W2_POS)\n#define EF_DATA_0_EF_KEY_SLOT_2_W2_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_2_W2_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_2_W2_POS))\n\n/* 0x48 : ef_key_slot_2_w3 */\n#define EF_DATA_0_EF_KEY_SLOT_2_W3_OFFSET (0x48)\n#define EF_DATA_0_EF_KEY_SLOT_2_W3        EF_DATA_0_EF_KEY_SLOT_2_W3\n#define EF_DATA_0_EF_KEY_SLOT_2_W3_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_2_W3_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_2_W3_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_2_W3_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_2_W3_POS)\n#define EF_DATA_0_EF_KEY_SLOT_2_W3_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_2_W3_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_2_W3_POS))\n\n/* 0x4C : ef_key_slot_3_w0 */\n#define EF_DATA_0_EF_KEY_SLOT_3_W0_OFFSET (0x4C)\n#define EF_DATA_0_EF_KEY_SLOT_3_W0        EF_DATA_0_EF_KEY_SLOT_3_W0\n#define EF_DATA_0_EF_KEY_SLOT_3_W0_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_3_W0_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_3_W0_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_3_W0_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_3_W0_POS)\n#define EF_DATA_0_EF_KEY_SLOT_3_W0_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_3_W0_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_3_W0_POS))\n\n/* 0x50 : ef_key_slot_3_w1 */\n#define EF_DATA_0_EF_KEY_SLOT_3_W1_OFFSET (0x50)\n#define EF_DATA_0_EF_KEY_SLOT_3_W1        EF_DATA_0_EF_KEY_SLOT_3_W1\n#define EF_DATA_0_EF_KEY_SLOT_3_W1_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_3_W1_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_3_W1_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_3_W1_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_3_W1_POS)\n#define EF_DATA_0_EF_KEY_SLOT_3_W1_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_3_W1_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_3_W1_POS))\n\n/* 0x54 : ef_key_slot_3_w2 */\n#define EF_DATA_0_EF_KEY_SLOT_3_W2_OFFSET (0x54)\n#define EF_DATA_0_EF_KEY_SLOT_3_W2        EF_DATA_0_EF_KEY_SLOT_3_W2\n#define EF_DATA_0_EF_KEY_SLOT_3_W2_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_3_W2_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_3_W2_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_3_W2_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_3_W2_POS)\n#define EF_DATA_0_EF_KEY_SLOT_3_W2_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_3_W2_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_3_W2_POS))\n\n/* 0x58 : ef_key_slot_3_w3 */\n#define EF_DATA_0_EF_KEY_SLOT_3_W3_OFFSET (0x58)\n#define EF_DATA_0_EF_KEY_SLOT_3_W3        EF_DATA_0_EF_KEY_SLOT_3_W3\n#define EF_DATA_0_EF_KEY_SLOT_3_W3_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_3_W3_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_3_W3_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_3_W3_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_3_W3_POS)\n#define EF_DATA_0_EF_KEY_SLOT_3_W3_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_3_W3_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_3_W3_POS))\n\n/* 0x5C : ef_key_slot_4_w0 */\n#define EF_DATA_0_EF_KEY_SLOT_4_W0_OFFSET (0x5C)\n#define EF_DATA_0_EF_KEY_SLOT_4_W0        EF_DATA_0_EF_KEY_SLOT_4_W0\n#define EF_DATA_0_EF_KEY_SLOT_4_W0_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_4_W0_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_4_W0_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_4_W0_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_4_W0_POS)\n#define EF_DATA_0_EF_KEY_SLOT_4_W0_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_4_W0_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_4_W0_POS))\n\n/* 0x60 : ef_key_slot_4_w1 */\n#define EF_DATA_0_EF_KEY_SLOT_4_W1_OFFSET (0x60)\n#define EF_DATA_0_EF_KEY_SLOT_4_W1        EF_DATA_0_EF_KEY_SLOT_4_W1\n#define EF_DATA_0_EF_KEY_SLOT_4_W1_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_4_W1_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_4_W1_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_4_W1_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_4_W1_POS)\n#define EF_DATA_0_EF_KEY_SLOT_4_W1_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_4_W1_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_4_W1_POS))\n\n/* 0x64 : ef_key_slot_4_w2 */\n#define EF_DATA_0_EF_KEY_SLOT_4_W2_OFFSET (0x64)\n#define EF_DATA_0_EF_KEY_SLOT_4_W2        EF_DATA_0_EF_KEY_SLOT_4_W2\n#define EF_DATA_0_EF_KEY_SLOT_4_W2_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_4_W2_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_4_W2_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_4_W2_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_4_W2_POS)\n#define EF_DATA_0_EF_KEY_SLOT_4_W2_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_4_W2_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_4_W2_POS))\n\n/* 0x68 : ef_key_slot_4_w3 */\n#define EF_DATA_0_EF_KEY_SLOT_4_W3_OFFSET (0x68)\n#define EF_DATA_0_EF_KEY_SLOT_4_W3        EF_DATA_0_EF_KEY_SLOT_4_W3\n#define EF_DATA_0_EF_KEY_SLOT_4_W3_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_4_W3_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_4_W3_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_4_W3_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_4_W3_POS)\n#define EF_DATA_0_EF_KEY_SLOT_4_W3_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_4_W3_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_4_W3_POS))\n\n/* 0x6C : ef_key_slot_5_w0 */\n#define EF_DATA_0_EF_KEY_SLOT_5_W0_OFFSET (0x6C)\n#define EF_DATA_0_EF_KEY_SLOT_5_W0        EF_DATA_0_EF_KEY_SLOT_5_W0\n#define EF_DATA_0_EF_KEY_SLOT_5_W0_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_5_W0_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_5_W0_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_5_W0_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_5_W0_POS)\n#define EF_DATA_0_EF_KEY_SLOT_5_W0_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_5_W0_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_5_W0_POS))\n\n/* 0x70 : ef_key_slot_5_w1 */\n#define EF_DATA_0_EF_KEY_SLOT_5_W1_OFFSET (0x70)\n#define EF_DATA_0_EF_KEY_SLOT_5_W1        EF_DATA_0_EF_KEY_SLOT_5_W1\n#define EF_DATA_0_EF_KEY_SLOT_5_W1_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_5_W1_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_5_W1_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_5_W1_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_5_W1_POS)\n#define EF_DATA_0_EF_KEY_SLOT_5_W1_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_5_W1_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_5_W1_POS))\n\n/* 0x74 : ef_key_slot_5_w2 */\n#define EF_DATA_0_EF_KEY_SLOT_5_W2_OFFSET (0x74)\n#define EF_DATA_0_EF_KEY_SLOT_5_W2        EF_DATA_0_EF_KEY_SLOT_5_W2\n#define EF_DATA_0_EF_KEY_SLOT_5_W2_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_5_W2_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_5_W2_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_5_W2_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_5_W2_POS)\n#define EF_DATA_0_EF_KEY_SLOT_5_W2_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_5_W2_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_5_W2_POS))\n\n/* 0x78 : ef_key_slot_5_w3 */\n#define EF_DATA_0_EF_KEY_SLOT_5_W3_OFFSET (0x78)\n#define EF_DATA_0_EF_KEY_SLOT_5_W3        EF_DATA_0_EF_KEY_SLOT_5_W3\n#define EF_DATA_0_EF_KEY_SLOT_5_W3_POS    (0U)\n#define EF_DATA_0_EF_KEY_SLOT_5_W3_LEN    (32U)\n#define EF_DATA_0_EF_KEY_SLOT_5_W3_MSK    (((1U << EF_DATA_0_EF_KEY_SLOT_5_W3_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_5_W3_POS)\n#define EF_DATA_0_EF_KEY_SLOT_5_W3_UMSK   (~(((1U << EF_DATA_0_EF_KEY_SLOT_5_W3_LEN) - 1) << EF_DATA_0_EF_KEY_SLOT_5_W3_POS))\n\n/* 0x7C : ef_data_0_lock */\n#define EF_DATA_0_LOCK_OFFSET               (0x7C)\n#define EF_DATA_0_EF_ANA_TRIM_1             EF_DATA_0_EF_ANA_TRIM_1\n#define EF_DATA_0_EF_ANA_TRIM_1_POS         (0U)\n#define EF_DATA_0_EF_ANA_TRIM_1_LEN         (13U)\n#define EF_DATA_0_EF_ANA_TRIM_1_MSK         (((1U << EF_DATA_0_EF_ANA_TRIM_1_LEN) - 1) << EF_DATA_0_EF_ANA_TRIM_1_POS)\n#define EF_DATA_0_EF_ANA_TRIM_1_UMSK        (~(((1U << EF_DATA_0_EF_ANA_TRIM_1_LEN) - 1) << EF_DATA_0_EF_ANA_TRIM_1_POS))\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_4_L      EF_DATA_0_WR_LOCK_KEY_SLOT_4_L\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_4_L_POS  (13U)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_4_L_LEN  (1U)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_4_L_MSK  (((1U << EF_DATA_0_WR_LOCK_KEY_SLOT_4_L_LEN) - 1) << EF_DATA_0_WR_LOCK_KEY_SLOT_4_L_POS)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_4_L_UMSK (~(((1U << EF_DATA_0_WR_LOCK_KEY_SLOT_4_L_LEN) - 1) << EF_DATA_0_WR_LOCK_KEY_SLOT_4_L_POS))\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_5_L      EF_DATA_0_WR_LOCK_KEY_SLOT_5_L\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_5_L_POS  (14U)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_5_L_LEN  (1U)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_5_L_MSK  (((1U << EF_DATA_0_WR_LOCK_KEY_SLOT_5_L_LEN) - 1) << EF_DATA_0_WR_LOCK_KEY_SLOT_5_L_POS)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_5_L_UMSK (~(((1U << EF_DATA_0_WR_LOCK_KEY_SLOT_5_L_LEN) - 1) << EF_DATA_0_WR_LOCK_KEY_SLOT_5_L_POS))\n#define EF_DATA_0_WR_LOCK_BOOT_MODE         EF_DATA_0_WR_LOCK_BOOT_MODE\n#define EF_DATA_0_WR_LOCK_BOOT_MODE_POS     (15U)\n#define EF_DATA_0_WR_LOCK_BOOT_MODE_LEN     (1U)\n#define EF_DATA_0_WR_LOCK_BOOT_MODE_MSK     (((1U << EF_DATA_0_WR_LOCK_BOOT_MODE_LEN) - 1) << EF_DATA_0_WR_LOCK_BOOT_MODE_POS)\n#define EF_DATA_0_WR_LOCK_BOOT_MODE_UMSK    (~(((1U << EF_DATA_0_WR_LOCK_BOOT_MODE_LEN) - 1) << EF_DATA_0_WR_LOCK_BOOT_MODE_POS))\n#define EF_DATA_0_WR_LOCK_DBG_PWD           EF_DATA_0_WR_LOCK_DBG_PWD\n#define EF_DATA_0_WR_LOCK_DBG_PWD_POS       (16U)\n#define EF_DATA_0_WR_LOCK_DBG_PWD_LEN       (1U)\n#define EF_DATA_0_WR_LOCK_DBG_PWD_MSK       (((1U << EF_DATA_0_WR_LOCK_DBG_PWD_LEN) - 1) << EF_DATA_0_WR_LOCK_DBG_PWD_POS)\n#define EF_DATA_0_WR_LOCK_DBG_PWD_UMSK      (~(((1U << EF_DATA_0_WR_LOCK_DBG_PWD_LEN) - 1) << EF_DATA_0_WR_LOCK_DBG_PWD_POS))\n#define EF_DATA_0_WR_LOCK_SW_USAGE_0        EF_DATA_0_WR_LOCK_SW_USAGE_0\n#define EF_DATA_0_WR_LOCK_SW_USAGE_0_POS    (17U)\n#define EF_DATA_0_WR_LOCK_SW_USAGE_0_LEN    (1U)\n#define EF_DATA_0_WR_LOCK_SW_USAGE_0_MSK    (((1U << EF_DATA_0_WR_LOCK_SW_USAGE_0_LEN) - 1) << EF_DATA_0_WR_LOCK_SW_USAGE_0_POS)\n#define EF_DATA_0_WR_LOCK_SW_USAGE_0_UMSK   (~(((1U << EF_DATA_0_WR_LOCK_SW_USAGE_0_LEN) - 1) << EF_DATA_0_WR_LOCK_SW_USAGE_0_POS))\n#define EF_DATA_0_WR_LOCK_WIFI_MAC          EF_DATA_0_WR_LOCK_WIFI_MAC\n#define EF_DATA_0_WR_LOCK_WIFI_MAC_POS      (18U)\n#define EF_DATA_0_WR_LOCK_WIFI_MAC_LEN      (1U)\n#define EF_DATA_0_WR_LOCK_WIFI_MAC_MSK      (((1U << EF_DATA_0_WR_LOCK_WIFI_MAC_LEN) - 1) << EF_DATA_0_WR_LOCK_WIFI_MAC_POS)\n#define EF_DATA_0_WR_LOCK_WIFI_MAC_UMSK     (~(((1U << EF_DATA_0_WR_LOCK_WIFI_MAC_LEN) - 1) << EF_DATA_0_WR_LOCK_WIFI_MAC_POS))\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_0        EF_DATA_0_WR_LOCK_KEY_SLOT_0\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_0_POS    (19U)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_0_LEN    (1U)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_0_MSK    (((1U << EF_DATA_0_WR_LOCK_KEY_SLOT_0_LEN) - 1) << EF_DATA_0_WR_LOCK_KEY_SLOT_0_POS)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_0_UMSK   (~(((1U << EF_DATA_0_WR_LOCK_KEY_SLOT_0_LEN) - 1) << EF_DATA_0_WR_LOCK_KEY_SLOT_0_POS))\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_1        EF_DATA_0_WR_LOCK_KEY_SLOT_1\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_1_POS    (20U)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_1_LEN    (1U)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_1_MSK    (((1U << EF_DATA_0_WR_LOCK_KEY_SLOT_1_LEN) - 1) << EF_DATA_0_WR_LOCK_KEY_SLOT_1_POS)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_1_UMSK   (~(((1U << EF_DATA_0_WR_LOCK_KEY_SLOT_1_LEN) - 1) << EF_DATA_0_WR_LOCK_KEY_SLOT_1_POS))\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_2        EF_DATA_0_WR_LOCK_KEY_SLOT_2\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_2_POS    (21U)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_2_LEN    (1U)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_2_MSK    (((1U << EF_DATA_0_WR_LOCK_KEY_SLOT_2_LEN) - 1) << EF_DATA_0_WR_LOCK_KEY_SLOT_2_POS)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_2_UMSK   (~(((1U << EF_DATA_0_WR_LOCK_KEY_SLOT_2_LEN) - 1) << EF_DATA_0_WR_LOCK_KEY_SLOT_2_POS))\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_3        EF_DATA_0_WR_LOCK_KEY_SLOT_3\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_3_POS    (22U)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_3_LEN    (1U)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_3_MSK    (((1U << EF_DATA_0_WR_LOCK_KEY_SLOT_3_LEN) - 1) << EF_DATA_0_WR_LOCK_KEY_SLOT_3_POS)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_3_UMSK   (~(((1U << EF_DATA_0_WR_LOCK_KEY_SLOT_3_LEN) - 1) << EF_DATA_0_WR_LOCK_KEY_SLOT_3_POS))\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_4_H      EF_DATA_0_WR_LOCK_KEY_SLOT_4_H\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_4_H_POS  (23U)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_4_H_LEN  (1U)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_4_H_MSK  (((1U << EF_DATA_0_WR_LOCK_KEY_SLOT_4_H_LEN) - 1) << EF_DATA_0_WR_LOCK_KEY_SLOT_4_H_POS)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_4_H_UMSK (~(((1U << EF_DATA_0_WR_LOCK_KEY_SLOT_4_H_LEN) - 1) << EF_DATA_0_WR_LOCK_KEY_SLOT_4_H_POS))\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_5_H      EF_DATA_0_WR_LOCK_KEY_SLOT_5_H\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_5_H_POS  (24U)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_5_H_LEN  (1U)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_5_H_MSK  (((1U << EF_DATA_0_WR_LOCK_KEY_SLOT_5_H_LEN) - 1) << EF_DATA_0_WR_LOCK_KEY_SLOT_5_H_POS)\n#define EF_DATA_0_WR_LOCK_KEY_SLOT_5_H_UMSK (~(((1U << EF_DATA_0_WR_LOCK_KEY_SLOT_5_H_LEN) - 1) << EF_DATA_0_WR_LOCK_KEY_SLOT_5_H_POS))\n#define EF_DATA_0_RD_LOCK_DBG_PWD           EF_DATA_0_RD_LOCK_DBG_PWD\n#define EF_DATA_0_RD_LOCK_DBG_PWD_POS       (25U)\n#define EF_DATA_0_RD_LOCK_DBG_PWD_LEN       (1U)\n#define EF_DATA_0_RD_LOCK_DBG_PWD_MSK       (((1U << EF_DATA_0_RD_LOCK_DBG_PWD_LEN) - 1) << EF_DATA_0_RD_LOCK_DBG_PWD_POS)\n#define EF_DATA_0_RD_LOCK_DBG_PWD_UMSK      (~(((1U << EF_DATA_0_RD_LOCK_DBG_PWD_LEN) - 1) << EF_DATA_0_RD_LOCK_DBG_PWD_POS))\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_0        EF_DATA_0_RD_LOCK_KEY_SLOT_0\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_0_POS    (26U)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_0_LEN    (1U)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_0_MSK    (((1U << EF_DATA_0_RD_LOCK_KEY_SLOT_0_LEN) - 1) << EF_DATA_0_RD_LOCK_KEY_SLOT_0_POS)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_0_UMSK   (~(((1U << EF_DATA_0_RD_LOCK_KEY_SLOT_0_LEN) - 1) << EF_DATA_0_RD_LOCK_KEY_SLOT_0_POS))\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_1        EF_DATA_0_RD_LOCK_KEY_SLOT_1\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_1_POS    (27U)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_1_LEN    (1U)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_1_MSK    (((1U << EF_DATA_0_RD_LOCK_KEY_SLOT_1_LEN) - 1) << EF_DATA_0_RD_LOCK_KEY_SLOT_1_POS)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_1_UMSK   (~(((1U << EF_DATA_0_RD_LOCK_KEY_SLOT_1_LEN) - 1) << EF_DATA_0_RD_LOCK_KEY_SLOT_1_POS))\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_2        EF_DATA_0_RD_LOCK_KEY_SLOT_2\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_2_POS    (28U)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_2_LEN    (1U)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_2_MSK    (((1U << EF_DATA_0_RD_LOCK_KEY_SLOT_2_LEN) - 1) << EF_DATA_0_RD_LOCK_KEY_SLOT_2_POS)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_2_UMSK   (~(((1U << EF_DATA_0_RD_LOCK_KEY_SLOT_2_LEN) - 1) << EF_DATA_0_RD_LOCK_KEY_SLOT_2_POS))\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_3        EF_DATA_0_RD_LOCK_KEY_SLOT_3\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_3_POS    (29U)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_3_LEN    (1U)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_3_MSK    (((1U << EF_DATA_0_RD_LOCK_KEY_SLOT_3_LEN) - 1) << EF_DATA_0_RD_LOCK_KEY_SLOT_3_POS)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_3_UMSK   (~(((1U << EF_DATA_0_RD_LOCK_KEY_SLOT_3_LEN) - 1) << EF_DATA_0_RD_LOCK_KEY_SLOT_3_POS))\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_4        EF_DATA_0_RD_LOCK_KEY_SLOT_4\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_4_POS    (30U)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_4_LEN    (1U)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_4_MSK    (((1U << EF_DATA_0_RD_LOCK_KEY_SLOT_4_LEN) - 1) << EF_DATA_0_RD_LOCK_KEY_SLOT_4_POS)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_4_UMSK   (~(((1U << EF_DATA_0_RD_LOCK_KEY_SLOT_4_LEN) - 1) << EF_DATA_0_RD_LOCK_KEY_SLOT_4_POS))\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_5        EF_DATA_0_RD_LOCK_KEY_SLOT_5\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_5_POS    (31U)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_5_LEN    (1U)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_5_MSK    (((1U << EF_DATA_0_RD_LOCK_KEY_SLOT_5_LEN) - 1) << EF_DATA_0_RD_LOCK_KEY_SLOT_5_POS)\n#define EF_DATA_0_RD_LOCK_KEY_SLOT_5_UMSK   (~(((1U << EF_DATA_0_RD_LOCK_KEY_SLOT_5_LEN) - 1) << EF_DATA_0_RD_LOCK_KEY_SLOT_5_POS))\n\nstruct ef_data_0_reg {\n    /* 0x0 : ef_cfg_0 */\n    union {\n        struct\n        {\n            uint32_t ef_sf_aes_mode     : 2; /* [ 1: 0],        r/w,        0x0 */\n            uint32_t ef_sboot_sign_mode : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t rsvd0              : 2; /* [ 5: 4],        r/w,        0x0 */\n            uint32_t rsvd1              : 1; /* [    6],        r/w,        0x0 */\n            uint32_t ef_cpu0_enc_en     : 1; /* [    7],        r/w,        0x0 */\n            uint32_t ef_boot_sel        : 4; /* [11: 8],        r/w,        0x0 */\n            uint32_t ef_sf_key_0_sel    : 2; /* [13:12],        r/w,        0x0 */\n            uint32_t rsvd2              : 1; /* [   14],        r/w,        0x0 */\n            uint32_t rsvd3              : 1; /* [   15],        r/w,        0x0 */\n            uint32_t rsvd4              : 1; /* [   16],        r/w,        0x0 */\n            uint32_t ef_0_key_enc_en    : 1; /* [   17],        r/w,        0x0 */\n            uint32_t rsvd5              : 1; /* [   18],        r/w,        0x0 */\n            uint32_t rsvd6              : 1; /* [   19],        r/w,        0x0 */\n            uint32_t rsvd7              : 1; /* [   20],        r/w,        0x0 */\n            uint32_t rsvd8              : 1; /* [   21],        r/w,        0x0 */\n            uint32_t rsvd9              : 1; /* [   22],        r/w,        0x0 */\n            uint32_t rsvd10             : 1; /* [   23],        r/w,        0x0 */\n            uint32_t rsvd11             : 2; /* [25:24],        r/w,        0x0 */\n            uint32_t ef_dbg_jtag_0_dis  : 2; /* [27:26],        r/w,        0x0 */\n            uint32_t ef_dbg_mode        : 4; /* [31:28],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_cfg_0;\n\n    /* 0x4 : ef_dbg_pwd_low */\n    union {\n        struct\n        {\n            uint32_t ef_dbg_pwd_low : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_dbg_pwd_low;\n\n    /* 0x8 : ef_dbg_pwd_high */\n    union {\n        struct\n        {\n            uint32_t ef_dbg_pwd_high : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_dbg_pwd_high;\n\n    /* 0xC : ef_ana_trim_0 */\n    union {\n        struct\n        {\n            uint32_t ef_ana_trim_0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_ana_trim_0;\n\n    /* 0x10 : ef_sw_usage_0 */\n    union {\n        struct\n        {\n            uint32_t ef_sw_usage_0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_sw_usage_0;\n\n    /* 0x14 : ef_wifi_mac_low */\n    union {\n        struct\n        {\n            uint32_t ef_wifi_mac_low : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_wifi_mac_low;\n\n    /* 0x18 : ef_wifi_mac_high */\n    union {\n        struct\n        {\n            uint32_t ef_wifi_mac_high : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_wifi_mac_high;\n\n    /* 0x1C : ef_key_slot_0_w0 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_0_w0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_0_w0;\n\n    /* 0x20 : ef_key_slot_0_w1 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_0_w1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_0_w1;\n\n    /* 0x24 : ef_key_slot_0_w2 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_0_w2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_0_w2;\n\n    /* 0x28 : ef_key_slot_0_w3 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_0_w3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_0_w3;\n\n    /* 0x2C : ef_key_slot_1_w0 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_1_w0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_1_w0;\n\n    /* 0x30 : ef_key_slot_1_w1 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_1_w1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_1_w1;\n\n    /* 0x34 : ef_key_slot_1_w2 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_1_w2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_1_w2;\n\n    /* 0x38 : ef_key_slot_1_w3 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_1_w3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_1_w3;\n\n    /* 0x3C : ef_key_slot_2_w0 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_2_w0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_2_w0;\n\n    /* 0x40 : ef_key_slot_2_w1 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_2_w1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_2_w1;\n\n    /* 0x44 : ef_key_slot_2_w2 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_2_w2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_2_w2;\n\n    /* 0x48 : ef_key_slot_2_w3 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_2_w3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_2_w3;\n\n    /* 0x4C : ef_key_slot_3_w0 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_3_w0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_3_w0;\n\n    /* 0x50 : ef_key_slot_3_w1 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_3_w1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_3_w1;\n\n    /* 0x54 : ef_key_slot_3_w2 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_3_w2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_3_w2;\n\n    /* 0x58 : ef_key_slot_3_w3 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_3_w3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_3_w3;\n\n    /* 0x5C : ef_key_slot_4_w0 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_4_w0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_4_w0;\n\n    /* 0x60 : ef_key_slot_4_w1 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_4_w1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_4_w1;\n\n    /* 0x64 : ef_key_slot_4_w2 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_4_w2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_4_w2;\n\n    /* 0x68 : ef_key_slot_4_w3 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_4_w3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_4_w3;\n\n    /* 0x6C : ef_key_slot_5_w0 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_5_w0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_5_w0;\n\n    /* 0x70 : ef_key_slot_5_w1 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_5_w1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_5_w1;\n\n    /* 0x74 : ef_key_slot_5_w2 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_5_w2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_5_w2;\n\n    /* 0x78 : ef_key_slot_5_w3 */\n    union {\n        struct\n        {\n            uint32_t ef_key_slot_5_w3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_key_slot_5_w3;\n\n    /* 0x7C : ef_data_0_lock */\n    union {\n        struct\n        {\n            uint32_t ef_ana_trim_1        : 13; /* [12: 0],        r/w,        0x0 */\n            uint32_t wr_lock_key_slot_4_l : 1;  /* [   13],        r/w,        0x0 */\n            uint32_t wr_lock_key_slot_5_l : 1;  /* [   14],        r/w,        0x0 */\n            uint32_t wr_lock_boot_mode    : 1;  /* [   15],        r/w,        0x0 */\n            uint32_t wr_lock_dbg_pwd      : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t wr_lock_sw_usage_0   : 1;  /* [   17],        r/w,        0x0 */\n            uint32_t wr_lock_wifi_mac     : 1;  /* [   18],        r/w,        0x0 */\n            uint32_t wr_lock_key_slot_0   : 1;  /* [   19],        r/w,        0x0 */\n            uint32_t wr_lock_key_slot_1   : 1;  /* [   20],        r/w,        0x0 */\n            uint32_t wr_lock_key_slot_2   : 1;  /* [   21],        r/w,        0x0 */\n            uint32_t wr_lock_key_slot_3   : 1;  /* [   22],        r/w,        0x0 */\n            uint32_t wr_lock_key_slot_4_h : 1;  /* [   23],        r/w,        0x0 */\n            uint32_t wr_lock_key_slot_5_h : 1;  /* [   24],        r/w,        0x0 */\n            uint32_t rd_lock_dbg_pwd      : 1;  /* [   25],        r/w,        0x0 */\n            uint32_t rd_lock_key_slot_0   : 1;  /* [   26],        r/w,        0x0 */\n            uint32_t rd_lock_key_slot_1   : 1;  /* [   27],        r/w,        0x0 */\n            uint32_t rd_lock_key_slot_2   : 1;  /* [   28],        r/w,        0x0 */\n            uint32_t rd_lock_key_slot_3   : 1;  /* [   29],        r/w,        0x0 */\n            uint32_t rd_lock_key_slot_4   : 1;  /* [   30],        r/w,        0x0 */\n            uint32_t rd_lock_key_slot_5   : 1;  /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ef_data_0_lock;\n};\n\ntypedef volatile struct ef_data_0_reg ef_data_0_reg_t;\n\n#endif /* __EF_DATA_0_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/emac_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    emac_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __EMAC_REG_H__\n#define __EMAC_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : MODE */\n#define EMAC_MODE_OFFSET   (0x0)\n#define EMAC_RXEN          EMAC_RXEN\n#define EMAC_RXEN_POS      (0U)\n#define EMAC_RXEN_LEN      (1U)\n#define EMAC_RXEN_MSK      (((1U << EMAC_RXEN_LEN) - 1) << EMAC_RXEN_POS)\n#define EMAC_RXEN_UMSK     (~(((1U << EMAC_RXEN_LEN) - 1) << EMAC_RXEN_POS))\n#define EMAC_TXEN          EMAC_TXEN\n#define EMAC_TXEN_POS      (1U)\n#define EMAC_TXEN_LEN      (1U)\n#define EMAC_TXEN_MSK      (((1U << EMAC_TXEN_LEN) - 1) << EMAC_TXEN_POS)\n#define EMAC_TXEN_UMSK     (~(((1U << EMAC_TXEN_LEN) - 1) << EMAC_TXEN_POS))\n#define EMAC_NOPRE         EMAC_NOPRE\n#define EMAC_NOPRE_POS     (2U)\n#define EMAC_NOPRE_LEN     (1U)\n#define EMAC_NOPRE_MSK     (((1U << EMAC_NOPRE_LEN) - 1) << EMAC_NOPRE_POS)\n#define EMAC_NOPRE_UMSK    (~(((1U << EMAC_NOPRE_LEN) - 1) << EMAC_NOPRE_POS))\n#define EMAC_BRO           EMAC_BRO\n#define EMAC_BRO_POS       (3U)\n#define EMAC_BRO_LEN       (1U)\n#define EMAC_BRO_MSK       (((1U << EMAC_BRO_LEN) - 1) << EMAC_BRO_POS)\n#define EMAC_BRO_UMSK      (~(((1U << EMAC_BRO_LEN) - 1) << EMAC_BRO_POS))\n#define EMAC_PRO           EMAC_PRO\n#define EMAC_PRO_POS       (5U)\n#define EMAC_PRO_LEN       (1U)\n#define EMAC_PRO_MSK       (((1U << EMAC_PRO_LEN) - 1) << EMAC_PRO_POS)\n#define EMAC_PRO_UMSK      (~(((1U << EMAC_PRO_LEN) - 1) << EMAC_PRO_POS))\n#define EMAC_IFG           EMAC_IFG\n#define EMAC_IFG_POS       (6U)\n#define EMAC_IFG_LEN       (1U)\n#define EMAC_IFG_MSK       (((1U << EMAC_IFG_LEN) - 1) << EMAC_IFG_POS)\n#define EMAC_IFG_UMSK      (~(((1U << EMAC_IFG_LEN) - 1) << EMAC_IFG_POS))\n#define EMAC_FULLD         EMAC_FULLD\n#define EMAC_FULLD_POS     (10U)\n#define EMAC_FULLD_LEN     (1U)\n#define EMAC_FULLD_MSK     (((1U << EMAC_FULLD_LEN) - 1) << EMAC_FULLD_POS)\n#define EMAC_FULLD_UMSK    (~(((1U << EMAC_FULLD_LEN) - 1) << EMAC_FULLD_POS))\n#define EMAC_CRCEN         EMAC_CRCEN\n#define EMAC_CRCEN_POS     (13U)\n#define EMAC_CRCEN_LEN     (1U)\n#define EMAC_CRCEN_MSK     (((1U << EMAC_CRCEN_LEN) - 1) << EMAC_CRCEN_POS)\n#define EMAC_CRCEN_UMSK    (~(((1U << EMAC_CRCEN_LEN) - 1) << EMAC_CRCEN_POS))\n#define EMAC_HUGEN         EMAC_HUGEN\n#define EMAC_HUGEN_POS     (14U)\n#define EMAC_HUGEN_LEN     (1U)\n#define EMAC_HUGEN_MSK     (((1U << EMAC_HUGEN_LEN) - 1) << EMAC_HUGEN_POS)\n#define EMAC_HUGEN_UMSK    (~(((1U << EMAC_HUGEN_LEN) - 1) << EMAC_HUGEN_POS))\n#define EMAC_PAD           EMAC_PAD\n#define EMAC_PAD_POS       (15U)\n#define EMAC_PAD_LEN       (1U)\n#define EMAC_PAD_MSK       (((1U << EMAC_PAD_LEN) - 1) << EMAC_PAD_POS)\n#define EMAC_PAD_UMSK      (~(((1U << EMAC_PAD_LEN) - 1) << EMAC_PAD_POS))\n#define EMAC_RECSMALL      EMAC_RECSMALL\n#define EMAC_RECSMALL_POS  (16U)\n#define EMAC_RECSMALL_LEN  (1U)\n#define EMAC_RECSMALL_MSK  (((1U << EMAC_RECSMALL_LEN) - 1) << EMAC_RECSMALL_POS)\n#define EMAC_RECSMALL_UMSK (~(((1U << EMAC_RECSMALL_LEN) - 1) << EMAC_RECSMALL_POS))\n#define EMAC_RMII_EN       EMAC_RMII_EN\n#define EMAC_RMII_EN_POS   (17U)\n#define EMAC_RMII_EN_LEN   (1U)\n#define EMAC_RMII_EN_MSK   (((1U << EMAC_RMII_EN_LEN) - 1) << EMAC_RMII_EN_POS)\n#define EMAC_RMII_EN_UMSK  (~(((1U << EMAC_RMII_EN_LEN) - 1) << EMAC_RMII_EN_POS))\n\n/* 0x4 : INT_SOURCE */\n#define EMAC_INT_SOURCE_OFFSET (0x4)\n#define EMAC_TXB               EMAC_TXB\n#define EMAC_TXB_POS           (0U)\n#define EMAC_TXB_LEN           (1U)\n#define EMAC_TXB_MSK           (((1U << EMAC_TXB_LEN) - 1) << EMAC_TXB_POS)\n#define EMAC_TXB_UMSK          (~(((1U << EMAC_TXB_LEN) - 1) << EMAC_TXB_POS))\n#define EMAC_TXE               EMAC_TXE\n#define EMAC_TXE_POS           (1U)\n#define EMAC_TXE_LEN           (1U)\n#define EMAC_TXE_MSK           (((1U << EMAC_TXE_LEN) - 1) << EMAC_TXE_POS)\n#define EMAC_TXE_UMSK          (~(((1U << EMAC_TXE_LEN) - 1) << EMAC_TXE_POS))\n#define EMAC_RXB               EMAC_RXB\n#define EMAC_RXB_POS           (2U)\n#define EMAC_RXB_LEN           (1U)\n#define EMAC_RXB_MSK           (((1U << EMAC_RXB_LEN) - 1) << EMAC_RXB_POS)\n#define EMAC_RXB_UMSK          (~(((1U << EMAC_RXB_LEN) - 1) << EMAC_RXB_POS))\n#define EMAC_RXE               EMAC_RXE\n#define EMAC_RXE_POS           (3U)\n#define EMAC_RXE_LEN           (1U)\n#define EMAC_RXE_MSK           (((1U << EMAC_RXE_LEN) - 1) << EMAC_RXE_POS)\n#define EMAC_RXE_UMSK          (~(((1U << EMAC_RXE_LEN) - 1) << EMAC_RXE_POS))\n#define EMAC_BUSY              EMAC_BUSY\n#define EMAC_BUSY_POS          (4U)\n#define EMAC_BUSY_LEN          (1U)\n#define EMAC_BUSY_MSK          (((1U << EMAC_BUSY_LEN) - 1) << EMAC_BUSY_POS)\n#define EMAC_BUSY_UMSK         (~(((1U << EMAC_BUSY_LEN) - 1) << EMAC_BUSY_POS))\n#define EMAC_TXC               EMAC_TXC\n#define EMAC_TXC_POS           (5U)\n#define EMAC_TXC_LEN           (1U)\n#define EMAC_TXC_MSK           (((1U << EMAC_TXC_LEN) - 1) << EMAC_TXC_POS)\n#define EMAC_TXC_UMSK          (~(((1U << EMAC_TXC_LEN) - 1) << EMAC_TXC_POS))\n#define EMAC_RXC               EMAC_RXC\n#define EMAC_RXC_POS           (6U)\n#define EMAC_RXC_LEN           (1U)\n#define EMAC_RXC_MSK           (((1U << EMAC_RXC_LEN) - 1) << EMAC_RXC_POS)\n#define EMAC_RXC_UMSK          (~(((1U << EMAC_RXC_LEN) - 1) << EMAC_RXC_POS))\n\n/* 0x8 : INT_MASK */\n#define EMAC_INT_MASK_OFFSET (0x8)\n#define EMAC_TXB_M           EMAC_TXB_M\n#define EMAC_TXB_M_POS       (0U)\n#define EMAC_TXB_M_LEN       (1U)\n#define EMAC_TXB_M_MSK       (((1U << EMAC_TXB_M_LEN) - 1) << EMAC_TXB_M_POS)\n#define EMAC_TXB_M_UMSK      (~(((1U << EMAC_TXB_M_LEN) - 1) << EMAC_TXB_M_POS))\n#define EMAC_TXE_M           EMAC_TXE_M\n#define EMAC_TXE_M_POS       (1U)\n#define EMAC_TXE_M_LEN       (1U)\n#define EMAC_TXE_M_MSK       (((1U << EMAC_TXE_M_LEN) - 1) << EMAC_TXE_M_POS)\n#define EMAC_TXE_M_UMSK      (~(((1U << EMAC_TXE_M_LEN) - 1) << EMAC_TXE_M_POS))\n#define EMAC_RXB_M           EMAC_RXB_M\n#define EMAC_RXB_M_POS       (2U)\n#define EMAC_RXB_M_LEN       (1U)\n#define EMAC_RXB_M_MSK       (((1U << EMAC_RXB_M_LEN) - 1) << EMAC_RXB_M_POS)\n#define EMAC_RXB_M_UMSK      (~(((1U << EMAC_RXB_M_LEN) - 1) << EMAC_RXB_M_POS))\n#define EMAC_RXE_M           EMAC_RXE_M\n#define EMAC_RXE_M_POS       (3U)\n#define EMAC_RXE_M_LEN       (1U)\n#define EMAC_RXE_M_MSK       (((1U << EMAC_RXE_M_LEN) - 1) << EMAC_RXE_M_POS)\n#define EMAC_RXE_M_UMSK      (~(((1U << EMAC_RXE_M_LEN) - 1) << EMAC_RXE_M_POS))\n#define EMAC_BUSY_M          EMAC_BUSY_M\n#define EMAC_BUSY_M_POS      (4U)\n#define EMAC_BUSY_M_LEN      (1U)\n#define EMAC_BUSY_M_MSK      (((1U << EMAC_BUSY_M_LEN) - 1) << EMAC_BUSY_M_POS)\n#define EMAC_BUSY_M_UMSK     (~(((1U << EMAC_BUSY_M_LEN) - 1) << EMAC_BUSY_M_POS))\n#define EMAC_TXC_M           EMAC_TXC_M\n#define EMAC_TXC_M_POS       (5U)\n#define EMAC_TXC_M_LEN       (1U)\n#define EMAC_TXC_M_MSK       (((1U << EMAC_TXC_M_LEN) - 1) << EMAC_TXC_M_POS)\n#define EMAC_TXC_M_UMSK      (~(((1U << EMAC_TXC_M_LEN) - 1) << EMAC_TXC_M_POS))\n#define EMAC_RXC_M           EMAC_RXC_M\n#define EMAC_RXC_M_POS       (6U)\n#define EMAC_RXC_M_LEN       (1U)\n#define EMAC_RXC_M_MSK       (((1U << EMAC_RXC_M_LEN) - 1) << EMAC_RXC_M_POS)\n#define EMAC_RXC_M_UMSK      (~(((1U << EMAC_RXC_M_LEN) - 1) << EMAC_RXC_M_POS))\n\n/* 0xC : IPGT */\n#define EMAC_IPGT_OFFSET (0xC)\n#define EMAC_IPGT        EMAC_IPGT\n#define EMAC_IPGT_POS    (0U)\n#define EMAC_IPGT_LEN    (7U)\n#define EMAC_IPGT_MSK    (((1U << EMAC_IPGT_LEN) - 1) << EMAC_IPGT_POS)\n#define EMAC_IPGT_UMSK   (~(((1U << EMAC_IPGT_LEN) - 1) << EMAC_IPGT_POS))\n\n/* 0x18 : PACKETLEN */\n#define EMAC_PACKETLEN_OFFSET (0x18)\n#define EMAC_MAXFL            EMAC_MAXFL\n#define EMAC_MAXFL_POS        (0U)\n#define EMAC_MAXFL_LEN        (16U)\n#define EMAC_MAXFL_MSK        (((1U << EMAC_MAXFL_LEN) - 1) << EMAC_MAXFL_POS)\n#define EMAC_MAXFL_UMSK       (~(((1U << EMAC_MAXFL_LEN) - 1) << EMAC_MAXFL_POS))\n#define EMAC_MINFL            EMAC_MINFL\n#define EMAC_MINFL_POS        (16U)\n#define EMAC_MINFL_LEN        (16U)\n#define EMAC_MINFL_MSK        (((1U << EMAC_MINFL_LEN) - 1) << EMAC_MINFL_POS)\n#define EMAC_MINFL_UMSK       (~(((1U << EMAC_MINFL_LEN) - 1) << EMAC_MINFL_POS))\n\n/* 0x1C : COLLCONFIG */\n#define EMAC_COLLCONFIG_OFFSET (0x1C)\n#define EMAC_COLLVALID         EMAC_COLLVALID\n#define EMAC_COLLVALID_POS     (0U)\n#define EMAC_COLLVALID_LEN     (6U)\n#define EMAC_COLLVALID_MSK     (((1U << EMAC_COLLVALID_LEN) - 1) << EMAC_COLLVALID_POS)\n#define EMAC_COLLVALID_UMSK    (~(((1U << EMAC_COLLVALID_LEN) - 1) << EMAC_COLLVALID_POS))\n#define EMAC_MAXRET            EMAC_MAXRET\n#define EMAC_MAXRET_POS        (16U)\n#define EMAC_MAXRET_LEN        (4U)\n#define EMAC_MAXRET_MSK        (((1U << EMAC_MAXRET_LEN) - 1) << EMAC_MAXRET_POS)\n#define EMAC_MAXRET_UMSK       (~(((1U << EMAC_MAXRET_LEN) - 1) << EMAC_MAXRET_POS))\n\n/* 0x20 : TX_BD_NUM */\n#define EMAC_TX_BD_NUM_OFFSET (0x20)\n#define EMAC_TXBDNUM          EMAC_TXBDNUM\n#define EMAC_TXBDNUM_POS      (0U)\n#define EMAC_TXBDNUM_LEN      (8U)\n#define EMAC_TXBDNUM_MSK      (((1U << EMAC_TXBDNUM_LEN) - 1) << EMAC_TXBDNUM_POS)\n#define EMAC_TXBDNUM_UMSK     (~(((1U << EMAC_TXBDNUM_LEN) - 1) << EMAC_TXBDNUM_POS))\n#define EMAC_TXBDPTR          EMAC_TXBDPTR\n#define EMAC_TXBDPTR_POS      (16U)\n#define EMAC_TXBDPTR_LEN      (7U)\n#define EMAC_TXBDPTR_MSK      (((1U << EMAC_TXBDPTR_LEN) - 1) << EMAC_TXBDPTR_POS)\n#define EMAC_TXBDPTR_UMSK     (~(((1U << EMAC_TXBDPTR_LEN) - 1) << EMAC_TXBDPTR_POS))\n#define EMAC_RXBDPTR          EMAC_RXBDPTR\n#define EMAC_RXBDPTR_POS      (24U)\n#define EMAC_RXBDPTR_LEN      (7U)\n#define EMAC_RXBDPTR_MSK      (((1U << EMAC_RXBDPTR_LEN) - 1) << EMAC_RXBDPTR_POS)\n#define EMAC_RXBDPTR_UMSK     (~(((1U << EMAC_RXBDPTR_LEN) - 1) << EMAC_RXBDPTR_POS))\n\n/* 0x28 : MIIMODE */\n#define EMAC_MIIMODE_OFFSET (0x28)\n#define EMAC_CLKDIV         EMAC_CLKDIV\n#define EMAC_CLKDIV_POS     (0U)\n#define EMAC_CLKDIV_LEN     (8U)\n#define EMAC_CLKDIV_MSK     (((1U << EMAC_CLKDIV_LEN) - 1) << EMAC_CLKDIV_POS)\n#define EMAC_CLKDIV_UMSK    (~(((1U << EMAC_CLKDIV_LEN) - 1) << EMAC_CLKDIV_POS))\n#define EMAC_MIINOPRE       EMAC_MIINOPRE\n#define EMAC_MIINOPRE_POS   (8U)\n#define EMAC_MIINOPRE_LEN   (1U)\n#define EMAC_MIINOPRE_MSK   (((1U << EMAC_MIINOPRE_LEN) - 1) << EMAC_MIINOPRE_POS)\n#define EMAC_MIINOPRE_UMSK  (~(((1U << EMAC_MIINOPRE_LEN) - 1) << EMAC_MIINOPRE_POS))\n\n/* 0x2C : MIICOMMAND */\n#define EMAC_MIICOMMAND_OFFSET (0x2C)\n#define EMAC_SCANSTAT          EMAC_SCANSTAT\n#define EMAC_SCANSTAT_POS      (0U)\n#define EMAC_SCANSTAT_LEN      (1U)\n#define EMAC_SCANSTAT_MSK      (((1U << EMAC_SCANSTAT_LEN) - 1) << EMAC_SCANSTAT_POS)\n#define EMAC_SCANSTAT_UMSK     (~(((1U << EMAC_SCANSTAT_LEN) - 1) << EMAC_SCANSTAT_POS))\n#define EMAC_RSTAT             EMAC_RSTAT\n#define EMAC_RSTAT_POS         (1U)\n#define EMAC_RSTAT_LEN         (1U)\n#define EMAC_RSTAT_MSK         (((1U << EMAC_RSTAT_LEN) - 1) << EMAC_RSTAT_POS)\n#define EMAC_RSTAT_UMSK        (~(((1U << EMAC_RSTAT_LEN) - 1) << EMAC_RSTAT_POS))\n#define EMAC_WCTRLDATA         EMAC_WCTRLDATA\n#define EMAC_WCTRLDATA_POS     (2U)\n#define EMAC_WCTRLDATA_LEN     (1U)\n#define EMAC_WCTRLDATA_MSK     (((1U << EMAC_WCTRLDATA_LEN) - 1) << EMAC_WCTRLDATA_POS)\n#define EMAC_WCTRLDATA_UMSK    (~(((1U << EMAC_WCTRLDATA_LEN) - 1) << EMAC_WCTRLDATA_POS))\n\n/* 0x30 : MIIADDRESS */\n#define EMAC_MIIADDRESS_OFFSET (0x30)\n#define EMAC_FIAD              EMAC_FIAD\n#define EMAC_FIAD_POS          (0U)\n#define EMAC_FIAD_LEN          (5U)\n#define EMAC_FIAD_MSK          (((1U << EMAC_FIAD_LEN) - 1) << EMAC_FIAD_POS)\n#define EMAC_FIAD_UMSK         (~(((1U << EMAC_FIAD_LEN) - 1) << EMAC_FIAD_POS))\n#define EMAC_RGAD              EMAC_RGAD\n#define EMAC_RGAD_POS          (8U)\n#define EMAC_RGAD_LEN          (5U)\n#define EMAC_RGAD_MSK          (((1U << EMAC_RGAD_LEN) - 1) << EMAC_RGAD_POS)\n#define EMAC_RGAD_UMSK         (~(((1U << EMAC_RGAD_LEN) - 1) << EMAC_RGAD_POS))\n\n/* 0x34 : MIITX_DATA */\n#define EMAC_MIITX_DATA_OFFSET (0x34)\n#define EMAC_CTRLDATA          EMAC_CTRLDATA\n#define EMAC_CTRLDATA_POS      (0U)\n#define EMAC_CTRLDATA_LEN      (16U)\n#define EMAC_CTRLDATA_MSK      (((1U << EMAC_CTRLDATA_LEN) - 1) << EMAC_CTRLDATA_POS)\n#define EMAC_CTRLDATA_UMSK     (~(((1U << EMAC_CTRLDATA_LEN) - 1) << EMAC_CTRLDATA_POS))\n\n/* 0x38 : MIIRX_DATA */\n#define EMAC_MIIRX_DATA_OFFSET (0x38)\n#define EMAC_PRSD              EMAC_PRSD\n#define EMAC_PRSD_POS          (0U)\n#define EMAC_PRSD_LEN          (16U)\n#define EMAC_PRSD_MSK          (((1U << EMAC_PRSD_LEN) - 1) << EMAC_PRSD_POS)\n#define EMAC_PRSD_UMSK         (~(((1U << EMAC_PRSD_LEN) - 1) << EMAC_PRSD_POS))\n\n/* 0x3C : MIISTATUS */\n#define EMAC_MIISTATUS_OFFSET   (0x3C)\n#define EMAC_MIIM_LINKFAIL      EMAC_MIIM_LINKFAIL\n#define EMAC_MIIM_LINKFAIL_POS  (0U)\n#define EMAC_MIIM_LINKFAIL_LEN  (1U)\n#define EMAC_MIIM_LINKFAIL_MSK  (((1U << EMAC_MIIM_LINKFAIL_LEN) - 1) << EMAC_MIIM_LINKFAIL_POS)\n#define EMAC_MIIM_LINKFAIL_UMSK (~(((1U << EMAC_MIIM_LINKFAIL_LEN) - 1) << EMAC_MIIM_LINKFAIL_POS))\n#define EMAC_MIIM_BUSY          EMAC_MIIM_BUSY\n#define EMAC_MIIM_BUSY_POS      (1U)\n#define EMAC_MIIM_BUSY_LEN      (1U)\n#define EMAC_MIIM_BUSY_MSK      (((1U << EMAC_MIIM_BUSY_LEN) - 1) << EMAC_MIIM_BUSY_POS)\n#define EMAC_MIIM_BUSY_UMSK     (~(((1U << EMAC_MIIM_BUSY_LEN) - 1) << EMAC_MIIM_BUSY_POS))\n\n/* 0x40 : MAC_ADDR0 */\n#define EMAC_MAC_ADDR0_OFFSET (0x40)\n#define EMAC_MAC_B5           EMAC_MAC_B5\n#define EMAC_MAC_B5_POS       (0U)\n#define EMAC_MAC_B5_LEN       (8U)\n#define EMAC_MAC_B5_MSK       (((1U << EMAC_MAC_B5_LEN) - 1) << EMAC_MAC_B5_POS)\n#define EMAC_MAC_B5_UMSK      (~(((1U << EMAC_MAC_B5_LEN) - 1) << EMAC_MAC_B5_POS))\n#define EMAC_MAC_B4           EMAC_MAC_B4\n#define EMAC_MAC_B4_POS       (8U)\n#define EMAC_MAC_B4_LEN       (8U)\n#define EMAC_MAC_B4_MSK       (((1U << EMAC_MAC_B4_LEN) - 1) << EMAC_MAC_B4_POS)\n#define EMAC_MAC_B4_UMSK      (~(((1U << EMAC_MAC_B4_LEN) - 1) << EMAC_MAC_B4_POS))\n#define EMAC_MAC_B3           EMAC_MAC_B3\n#define EMAC_MAC_B3_POS       (16U)\n#define EMAC_MAC_B3_LEN       (8U)\n#define EMAC_MAC_B3_MSK       (((1U << EMAC_MAC_B3_LEN) - 1) << EMAC_MAC_B3_POS)\n#define EMAC_MAC_B3_UMSK      (~(((1U << EMAC_MAC_B3_LEN) - 1) << EMAC_MAC_B3_POS))\n#define EMAC_MAC_B2           EMAC_MAC_B2\n#define EMAC_MAC_B2_POS       (24U)\n#define EMAC_MAC_B2_LEN       (8U)\n#define EMAC_MAC_B2_MSK       (((1U << EMAC_MAC_B2_LEN) - 1) << EMAC_MAC_B2_POS)\n#define EMAC_MAC_B2_UMSK      (~(((1U << EMAC_MAC_B2_LEN) - 1) << EMAC_MAC_B2_POS))\n\n/* 0x44 : MAC_ADDR1 */\n#define EMAC_MAC_ADDR1_OFFSET (0x44)\n#define EMAC_MAC_B1           EMAC_MAC_B1\n#define EMAC_MAC_B1_POS       (0U)\n#define EMAC_MAC_B1_LEN       (8U)\n#define EMAC_MAC_B1_MSK       (((1U << EMAC_MAC_B1_LEN) - 1) << EMAC_MAC_B1_POS)\n#define EMAC_MAC_B1_UMSK      (~(((1U << EMAC_MAC_B1_LEN) - 1) << EMAC_MAC_B1_POS))\n#define EMAC_MAC_B0           EMAC_MAC_B0\n#define EMAC_MAC_B0_POS       (8U)\n#define EMAC_MAC_B0_LEN       (8U)\n#define EMAC_MAC_B0_MSK       (((1U << EMAC_MAC_B0_LEN) - 1) << EMAC_MAC_B0_POS)\n#define EMAC_MAC_B0_UMSK      (~(((1U << EMAC_MAC_B0_LEN) - 1) << EMAC_MAC_B0_POS))\n\n/* 0x48 : HASH0_ADDR */\n#define EMAC_HASH0_ADDR_OFFSET (0x48)\n#define EMAC_HASH0             EMAC_HASH0\n#define EMAC_HASH0_POS         (0U)\n#define EMAC_HASH0_LEN         (32U)\n#define EMAC_HASH0_MSK         (((1U << EMAC_HASH0_LEN) - 1) << EMAC_HASH0_POS)\n#define EMAC_HASH0_UMSK        (~(((1U << EMAC_HASH0_LEN) - 1) << EMAC_HASH0_POS))\n\n/* 0x4C : HASH1_ADDR */\n#define EMAC_HASH1_ADDR_OFFSET (0x4C)\n#define EMAC_HASH1             EMAC_HASH1\n#define EMAC_HASH1_POS         (0U)\n#define EMAC_HASH1_LEN         (32U)\n#define EMAC_HASH1_MSK         (((1U << EMAC_HASH1_LEN) - 1) << EMAC_HASH1_POS)\n#define EMAC_HASH1_UMSK        (~(((1U << EMAC_HASH1_LEN) - 1) << EMAC_HASH1_POS))\n\n/* 0x50 : TXCTRL */\n#define EMAC_TXCTRL_OFFSET  (0x50)\n#define EMAC_TXPAUSETV      EMAC_TXPAUSETV\n#define EMAC_TXPAUSETV_POS  (0U)\n#define EMAC_TXPAUSETV_LEN  (16U)\n#define EMAC_TXPAUSETV_MSK  (((1U << EMAC_TXPAUSETV_LEN) - 1) << EMAC_TXPAUSETV_POS)\n#define EMAC_TXPAUSETV_UMSK (~(((1U << EMAC_TXPAUSETV_LEN) - 1) << EMAC_TXPAUSETV_POS))\n#define EMAC_TXPAUSERQ      EMAC_TXPAUSERQ\n#define EMAC_TXPAUSERQ_POS  (16U)\n#define EMAC_TXPAUSERQ_LEN  (1U)\n#define EMAC_TXPAUSERQ_MSK  (((1U << EMAC_TXPAUSERQ_LEN) - 1) << EMAC_TXPAUSERQ_POS)\n#define EMAC_TXPAUSERQ_UMSK (~(((1U << EMAC_TXPAUSERQ_LEN) - 1) << EMAC_TXPAUSERQ_POS))\n\nstruct emac_reg {\n    /* 0x0 : MODE */\n    union {\n        struct\n        {\n            uint32_t RXEN           : 1; /* [    0],        r/w,        0x0 */\n            uint32_t TXEN           : 1; /* [    1],        r/w,        0x0 */\n            uint32_t NOPRE          : 1; /* [    2],        r/w,        0x0 */\n            uint32_t BRO            : 1; /* [    3],        r/w,        0x1 */\n            uint32_t rsvd_4         : 1; /* [    4],       rsvd,        0x0 */\n            uint32_t PRO            : 1; /* [    5],        r/w,        0x0 */\n            uint32_t IFG            : 1; /* [    6],        r/w,        0x0 */\n            uint32_t rsvd_9_7       : 3; /* [ 9: 7],       rsvd,        0x0 */\n            uint32_t FULLD          : 1; /* [   10],        r/w,        0x0 */\n            uint32_t rsvd_12_11     : 2; /* [12:11],       rsvd,        0x0 */\n            uint32_t CRCEN          : 1; /* [   13],        r/w,        0x1 */\n            uint32_t HUGEN          : 1; /* [   14],        r/w,        0x0 */\n            uint32_t PAD            : 1; /* [   15],        r/w,        0x1 */\n            uint32_t RECSMALL       : 1; /* [   16],        r/w,        0x0 */\n            uint32_t RMII_EN        : 1; /* [   17],        r/w,        0x0 */\n            uint32_t rsvd_23_18     : 6; /* [23:18],       rsvd,        0x0 */\n            uint32_t reserved_24_31 : 8; /* [31:24],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } MODE;\n\n    /* 0x4 : INT_SOURCE */\n    union {\n        struct\n        {\n            uint32_t TXB           : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t TXE           : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t RXB           : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t RXE           : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t BUSY          : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t TXC           : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t RXC           : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t reserved_7_31 : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } INT_SOURCE;\n\n    /* 0x8 : INT_MASK */\n    union {\n        struct\n        {\n            uint32_t TXB_M         : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t TXE_M         : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t RXB_M         : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t RXE_M         : 1;  /* [    3],        r/w,        0x1 */\n            uint32_t BUSY_M        : 1;  /* [    4],        r/w,        0x1 */\n            uint32_t TXC_M         : 1;  /* [    5],        r/w,        0x1 */\n            uint32_t RXC_M         : 1;  /* [    6],        r/w,        0x1 */\n            uint32_t reserved_7_31 : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } INT_MASK;\n\n    /* 0xC : IPGT */\n    union {\n        struct\n        {\n            uint32_t IPGT          : 7;  /* [ 6: 0],        r/w,       0x18 */\n            uint32_t reserved_7_31 : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } IPGT;\n\n    /* 0x10  reserved */\n    uint8_t RESERVED0x10[8];\n\n    /* 0x18 : PACKETLEN */\n    union {\n        struct\n        {\n            uint32_t MAXFL : 16; /* [15: 0],        r/w,      0x600 */\n            uint32_t MINFL : 16; /* [31:16],        r/w,       0x40 */\n        } BF;\n        uint32_t WORD;\n    } PACKETLEN;\n\n    /* 0x1C : COLLCONFIG */\n    union {\n        struct\n        {\n            uint32_t COLLVALID      : 6;  /* [ 5: 0],        r/w,       0x3f */\n            uint32_t reserved_6_15  : 10; /* [15: 6],       rsvd,        0x0 */\n            uint32_t MAXRET         : 4;  /* [19:16],        r/w,        0xf */\n            uint32_t reserved_20_31 : 12; /* [31:20],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } COLLCONFIG;\n\n    /* 0x20 : TX_BD_NUM */\n    union {\n        struct\n        {\n            uint32_t TXBDNUM       : 8; /* [ 7: 0],        r/w,       0x40 */\n            uint32_t reserved_8_15 : 8; /* [15: 8],       rsvd,        0x0 */\n            uint32_t TXBDPTR       : 7; /* [22:16],          r,        0x0 */\n            uint32_t reserved_23   : 1; /* [   23],       rsvd,        0x0 */\n            uint32_t RXBDPTR       : 7; /* [30:24],          r,        0x0 */\n            uint32_t reserved_31   : 1; /* [   31],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TX_BD_NUM;\n\n    /* 0x24  reserved */\n    uint8_t RESERVED0x24[4];\n\n    /* 0x28 : MIIMODE */\n    union {\n        struct\n        {\n            uint32_t CLKDIV        : 8;  /* [ 7: 0],        r/w,       0x64 */\n            uint32_t MIINOPRE      : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t reserved_9_31 : 23; /* [31: 9],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } MIIMODE;\n\n    /* 0x2C : MIICOMMAND */\n    union {\n        struct\n        {\n            uint32_t SCANSTAT      : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t RSTAT         : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t WCTRLDATA     : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t reserved_3_31 : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } MIICOMMAND;\n\n    /* 0x30 : MIIADDRESS */\n    union {\n        struct\n        {\n            uint32_t FIAD           : 5;  /* [ 4: 0],        r/w,        0x0 */\n            uint32_t reserved_5_7   : 3;  /* [ 7: 5],       rsvd,        0x0 */\n            uint32_t RGAD           : 5;  /* [12: 8],        r/w,        0x0 */\n            uint32_t reserved_13_31 : 19; /* [31:13],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } MIIADDRESS;\n\n    /* 0x34 : MIITX_DATA */\n    union {\n        struct\n        {\n            uint32_t CTRLDATA       : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } MIITX_DATA;\n\n    /* 0x38 : MIIRX_DATA */\n    union {\n        struct\n        {\n            uint32_t PRSD           : 16; /* [15: 0],          r,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } MIIRX_DATA;\n\n    /* 0x3C : MIISTATUS */\n    union {\n        struct\n        {\n            uint32_t MIIM_LINKFAIL : 1;  /* [    0],          r,        0x0 */\n            uint32_t MIIM_BUSY     : 1;  /* [    1],          r,        0x0 */\n            uint32_t reserved_2_31 : 30; /* [31: 2],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } MIISTATUS;\n\n    /* 0x40 : MAC_ADDR0 */\n    union {\n        struct\n        {\n            uint32_t MAC_B5 : 8; /* [ 7: 0],        r/w,        0x0 */\n            uint32_t MAC_B4 : 8; /* [15: 8],        r/w,        0x0 */\n            uint32_t MAC_B3 : 8; /* [23:16],        r/w,        0x0 */\n            uint32_t MAC_B2 : 8; /* [31:24],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } MAC_ADDR0;\n\n    /* 0x44 : MAC_ADDR1 */\n    union {\n        struct\n        {\n            uint32_t MAC_B1         : 8;  /* [ 7: 0],        r/w,        0x0 */\n            uint32_t MAC_B0         : 8;  /* [15: 8],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } MAC_ADDR1;\n\n    /* 0x48 : HASH0_ADDR */\n    union {\n        struct\n        {\n            uint32_t HASH0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } HASH0_ADDR;\n\n    /* 0x4C : HASH1_ADDR */\n    union {\n        struct\n        {\n            uint32_t HASH1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } HASH1_ADDR;\n\n    /* 0x50 : TXCTRL */\n    union {\n        struct\n        {\n            uint32_t TXPAUSETV      : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t TXPAUSERQ      : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t reserved_17_31 : 15; /* [31:17],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TXCTRL;\n};\n\ntypedef volatile struct emac_reg emac_reg_t;\n\n#endif /* __EMAC_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/glb_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    glb_reg.h\n  * @version V1.2\n  * @date    2020-07-08\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __GLB_REG_H__\n#define __GLB_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : clk_cfg0 */\n#define GLB_CLK_CFG0_OFFSET       (0x0)\n#define GLB_REG_PLL_EN            GLB_REG_PLL_EN\n#define GLB_REG_PLL_EN_POS        (0U)\n#define GLB_REG_PLL_EN_LEN        (1U)\n#define GLB_REG_PLL_EN_MSK        (((1U << GLB_REG_PLL_EN_LEN) - 1) << GLB_REG_PLL_EN_POS)\n#define GLB_REG_PLL_EN_UMSK       (~(((1U << GLB_REG_PLL_EN_LEN) - 1) << GLB_REG_PLL_EN_POS))\n#define GLB_REG_FCLK_EN           GLB_REG_FCLK_EN\n#define GLB_REG_FCLK_EN_POS       (1U)\n#define GLB_REG_FCLK_EN_LEN       (1U)\n#define GLB_REG_FCLK_EN_MSK       (((1U << GLB_REG_FCLK_EN_LEN) - 1) << GLB_REG_FCLK_EN_POS)\n#define GLB_REG_FCLK_EN_UMSK      (~(((1U << GLB_REG_FCLK_EN_LEN) - 1) << GLB_REG_FCLK_EN_POS))\n#define GLB_REG_HCLK_EN           GLB_REG_HCLK_EN\n#define GLB_REG_HCLK_EN_POS       (2U)\n#define GLB_REG_HCLK_EN_LEN       (1U)\n#define GLB_REG_HCLK_EN_MSK       (((1U << GLB_REG_HCLK_EN_LEN) - 1) << GLB_REG_HCLK_EN_POS)\n#define GLB_REG_HCLK_EN_UMSK      (~(((1U << GLB_REG_HCLK_EN_LEN) - 1) << GLB_REG_HCLK_EN_POS))\n#define GLB_REG_BCLK_EN           GLB_REG_BCLK_EN\n#define GLB_REG_BCLK_EN_POS       (3U)\n#define GLB_REG_BCLK_EN_LEN       (1U)\n#define GLB_REG_BCLK_EN_MSK       (((1U << GLB_REG_BCLK_EN_LEN) - 1) << GLB_REG_BCLK_EN_POS)\n#define GLB_REG_BCLK_EN_UMSK      (~(((1U << GLB_REG_BCLK_EN_LEN) - 1) << GLB_REG_BCLK_EN_POS))\n#define GLB_REG_PLL_SEL           GLB_REG_PLL_SEL\n#define GLB_REG_PLL_SEL_POS       (4U)\n#define GLB_REG_PLL_SEL_LEN       (2U)\n#define GLB_REG_PLL_SEL_MSK       (((1U << GLB_REG_PLL_SEL_LEN) - 1) << GLB_REG_PLL_SEL_POS)\n#define GLB_REG_PLL_SEL_UMSK      (~(((1U << GLB_REG_PLL_SEL_LEN) - 1) << GLB_REG_PLL_SEL_POS))\n#define GLB_HBN_ROOT_CLK_SEL      GLB_HBN_ROOT_CLK_SEL\n#define GLB_HBN_ROOT_CLK_SEL_POS  (6U)\n#define GLB_HBN_ROOT_CLK_SEL_LEN  (2U)\n#define GLB_HBN_ROOT_CLK_SEL_MSK  (((1U << GLB_HBN_ROOT_CLK_SEL_LEN) - 1) << GLB_HBN_ROOT_CLK_SEL_POS)\n#define GLB_HBN_ROOT_CLK_SEL_UMSK (~(((1U << GLB_HBN_ROOT_CLK_SEL_LEN) - 1) << GLB_HBN_ROOT_CLK_SEL_POS))\n#define GLB_REG_HCLK_DIV          GLB_REG_HCLK_DIV\n#define GLB_REG_HCLK_DIV_POS      (8U)\n#define GLB_REG_HCLK_DIV_LEN      (8U)\n#define GLB_REG_HCLK_DIV_MSK      (((1U << GLB_REG_HCLK_DIV_LEN) - 1) << GLB_REG_HCLK_DIV_POS)\n#define GLB_REG_HCLK_DIV_UMSK     (~(((1U << GLB_REG_HCLK_DIV_LEN) - 1) << GLB_REG_HCLK_DIV_POS))\n#define GLB_REG_BCLK_DIV          GLB_REG_BCLK_DIV\n#define GLB_REG_BCLK_DIV_POS      (16U)\n#define GLB_REG_BCLK_DIV_LEN      (8U)\n#define GLB_REG_BCLK_DIV_MSK      (((1U << GLB_REG_BCLK_DIV_LEN) - 1) << GLB_REG_BCLK_DIV_POS)\n#define GLB_REG_BCLK_DIV_UMSK     (~(((1U << GLB_REG_BCLK_DIV_LEN) - 1) << GLB_REG_BCLK_DIV_POS))\n#define GLB_FCLK_SW_STATE         GLB_FCLK_SW_STATE\n#define GLB_FCLK_SW_STATE_POS     (24U)\n#define GLB_FCLK_SW_STATE_LEN     (3U)\n#define GLB_FCLK_SW_STATE_MSK     (((1U << GLB_FCLK_SW_STATE_LEN) - 1) << GLB_FCLK_SW_STATE_POS)\n#define GLB_FCLK_SW_STATE_UMSK    (~(((1U << GLB_FCLK_SW_STATE_LEN) - 1) << GLB_FCLK_SW_STATE_POS))\n#define GLB_CHIP_RDY              GLB_CHIP_RDY\n#define GLB_CHIP_RDY_POS          (27U)\n#define GLB_CHIP_RDY_LEN          (1U)\n#define GLB_CHIP_RDY_MSK          (((1U << GLB_CHIP_RDY_LEN) - 1) << GLB_CHIP_RDY_POS)\n#define GLB_CHIP_RDY_UMSK         (~(((1U << GLB_CHIP_RDY_LEN) - 1) << GLB_CHIP_RDY_POS))\n#define GLB_ID                    GLB_ID\n#define GLB_ID_POS                (28U)\n#define GLB_ID_LEN                (4U)\n#define GLB_ID_MSK                (((1U << GLB_ID_LEN) - 1) << GLB_ID_POS)\n#define GLB_ID_UMSK               (~(((1U << GLB_ID_LEN) - 1) << GLB_ID_POS))\n\n/* 0x4 : clk_cfg1 */\n#define GLB_CLK_CFG1_OFFSET              (0x4)\n#define GLB_QDEC_CLK_DIV                 GLB_QDEC_CLK_DIV\n#define GLB_QDEC_CLK_DIV_POS             (0U)\n#define GLB_QDEC_CLK_DIV_LEN             (5U)\n#define GLB_QDEC_CLK_DIV_MSK             (((1U << GLB_QDEC_CLK_DIV_LEN) - 1) << GLB_QDEC_CLK_DIV_POS)\n#define GLB_QDEC_CLK_DIV_UMSK            (~(((1U << GLB_QDEC_CLK_DIV_LEN) - 1) << GLB_QDEC_CLK_DIV_POS))\n#define GLB_QDEC_CLK_SEL                 GLB_QDEC_CLK_SEL\n#define GLB_QDEC_CLK_SEL_POS             (7U)\n#define GLB_QDEC_CLK_SEL_LEN             (1U)\n#define GLB_QDEC_CLK_SEL_MSK             (((1U << GLB_QDEC_CLK_SEL_LEN) - 1) << GLB_QDEC_CLK_SEL_POS)\n#define GLB_QDEC_CLK_SEL_UMSK            (~(((1U << GLB_QDEC_CLK_SEL_LEN) - 1) << GLB_QDEC_CLK_SEL_POS))\n#define GLB_USB_CLK_EN                   GLB_USB_CLK_EN\n#define GLB_USB_CLK_EN_POS               (8U)\n#define GLB_USB_CLK_EN_LEN               (1U)\n#define GLB_USB_CLK_EN_MSK               (((1U << GLB_USB_CLK_EN_LEN) - 1) << GLB_USB_CLK_EN_POS)\n#define GLB_USB_CLK_EN_UMSK              (~(((1U << GLB_USB_CLK_EN_LEN) - 1) << GLB_USB_CLK_EN_POS))\n#define GLB_DLL_48M_DIV_EN               GLB_DLL_48M_DIV_EN\n#define GLB_DLL_48M_DIV_EN_POS           (9U)\n#define GLB_DLL_48M_DIV_EN_LEN           (1U)\n#define GLB_DLL_48M_DIV_EN_MSK           (((1U << GLB_DLL_48M_DIV_EN_LEN) - 1) << GLB_DLL_48M_DIV_EN_POS)\n#define GLB_DLL_48M_DIV_EN_UMSK          (~(((1U << GLB_DLL_48M_DIV_EN_LEN) - 1) << GLB_DLL_48M_DIV_EN_POS))\n#define GLB_REG_I2S_CLK_SEL              GLB_REG_I2S_CLK_SEL\n#define GLB_REG_I2S_CLK_SEL_POS          (12U)\n#define GLB_REG_I2S_CLK_SEL_LEN          (1U)\n#define GLB_REG_I2S_CLK_SEL_MSK          (((1U << GLB_REG_I2S_CLK_SEL_LEN) - 1) << GLB_REG_I2S_CLK_SEL_POS)\n#define GLB_REG_I2S_CLK_SEL_UMSK         (~(((1U << GLB_REG_I2S_CLK_SEL_LEN) - 1) << GLB_REG_I2S_CLK_SEL_POS))\n#define GLB_REG_I2S0_CLK_EN              GLB_REG_I2S0_CLK_EN\n#define GLB_REG_I2S0_CLK_EN_POS          (13U)\n#define GLB_REG_I2S0_CLK_EN_LEN          (1U)\n#define GLB_REG_I2S0_CLK_EN_MSK          (((1U << GLB_REG_I2S0_CLK_EN_LEN) - 1) << GLB_REG_I2S0_CLK_EN_POS)\n#define GLB_REG_I2S0_CLK_EN_UMSK         (~(((1U << GLB_REG_I2S0_CLK_EN_LEN) - 1) << GLB_REG_I2S0_CLK_EN_POS))\n#define GLB_REG_I2S_0_REF_CLK_OE         GLB_REG_I2S_0_REF_CLK_OE\n#define GLB_REG_I2S_0_REF_CLK_OE_POS     (14U)\n#define GLB_REG_I2S_0_REF_CLK_OE_LEN     (1U)\n#define GLB_REG_I2S_0_REF_CLK_OE_MSK     (((1U << GLB_REG_I2S_0_REF_CLK_OE_LEN) - 1) << GLB_REG_I2S_0_REF_CLK_OE_POS)\n#define GLB_REG_I2S_0_REF_CLK_OE_UMSK    (~(((1U << GLB_REG_I2S_0_REF_CLK_OE_LEN) - 1) << GLB_REG_I2S_0_REF_CLK_OE_POS))\n#define GLB_BLE_CLK_SEL                  GLB_BLE_CLK_SEL\n#define GLB_BLE_CLK_SEL_POS              (16U)\n#define GLB_BLE_CLK_SEL_LEN              (6U)\n#define GLB_BLE_CLK_SEL_MSK              (((1U << GLB_BLE_CLK_SEL_LEN) - 1) << GLB_BLE_CLK_SEL_POS)\n#define GLB_BLE_CLK_SEL_UMSK             (~(((1U << GLB_BLE_CLK_SEL_LEN) - 1) << GLB_BLE_CLK_SEL_POS))\n#define GLB_BLE_EN                       GLB_BLE_EN\n#define GLB_BLE_EN_POS                   (24U)\n#define GLB_BLE_EN_LEN                   (1U)\n#define GLB_BLE_EN_MSK                   (((1U << GLB_BLE_EN_LEN) - 1) << GLB_BLE_EN_POS)\n#define GLB_BLE_EN_UMSK                  (~(((1U << GLB_BLE_EN_LEN) - 1) << GLB_BLE_EN_POS))\n#define GLB_M154_ZBEN                    GLB_M154_ZBEN\n#define GLB_M154_ZBEN_POS                (25U)\n#define GLB_M154_ZBEN_LEN                (1U)\n#define GLB_M154_ZBEN_MSK                (((1U << GLB_M154_ZBEN_LEN) - 1) << GLB_M154_ZBEN_POS)\n#define GLB_M154_ZBEN_UMSK               (~(((1U << GLB_M154_ZBEN_LEN) - 1) << GLB_M154_ZBEN_POS))\n#define GLB_REG_CAM_REF_CLK_EN           GLB_REG_CAM_REF_CLK_EN\n#define GLB_REG_CAM_REF_CLK_EN_POS       (28U)\n#define GLB_REG_CAM_REF_CLK_EN_LEN       (1U)\n#define GLB_REG_CAM_REF_CLK_EN_MSK       (((1U << GLB_REG_CAM_REF_CLK_EN_LEN) - 1) << GLB_REG_CAM_REF_CLK_EN_POS)\n#define GLB_REG_CAM_REF_CLK_EN_UMSK      (~(((1U << GLB_REG_CAM_REF_CLK_EN_LEN) - 1) << GLB_REG_CAM_REF_CLK_EN_POS))\n#define GLB_REG_CAM_REF_CLK_SRC_SEL      GLB_REG_CAM_REF_CLK_SRC_SEL\n#define GLB_REG_CAM_REF_CLK_SRC_SEL_POS  (29U)\n#define GLB_REG_CAM_REF_CLK_SRC_SEL_LEN  (1U)\n#define GLB_REG_CAM_REF_CLK_SRC_SEL_MSK  (((1U << GLB_REG_CAM_REF_CLK_SRC_SEL_LEN) - 1) << GLB_REG_CAM_REF_CLK_SRC_SEL_POS)\n#define GLB_REG_CAM_REF_CLK_SRC_SEL_UMSK (~(((1U << GLB_REG_CAM_REF_CLK_SRC_SEL_LEN) - 1) << GLB_REG_CAM_REF_CLK_SRC_SEL_POS))\n#define GLB_REG_CAM_REF_CLK_DIV          GLB_REG_CAM_REF_CLK_DIV\n#define GLB_REG_CAM_REF_CLK_DIV_POS      (30U)\n#define GLB_REG_CAM_REF_CLK_DIV_LEN      (2U)\n#define GLB_REG_CAM_REF_CLK_DIV_MSK      (((1U << GLB_REG_CAM_REF_CLK_DIV_LEN) - 1) << GLB_REG_CAM_REF_CLK_DIV_POS)\n#define GLB_REG_CAM_REF_CLK_DIV_UMSK     (~(((1U << GLB_REG_CAM_REF_CLK_DIV_LEN) - 1) << GLB_REG_CAM_REF_CLK_DIV_POS))\n\n/* 0x8 : clk_cfg2 */\n#define GLB_CLK_CFG2_OFFSET       (0x8)\n#define GLB_UART_CLK_DIV          GLB_UART_CLK_DIV\n#define GLB_UART_CLK_DIV_POS      (0U)\n#define GLB_UART_CLK_DIV_LEN      (3U)\n#define GLB_UART_CLK_DIV_MSK      (((1U << GLB_UART_CLK_DIV_LEN) - 1) << GLB_UART_CLK_DIV_POS)\n#define GLB_UART_CLK_DIV_UMSK     (~(((1U << GLB_UART_CLK_DIV_LEN) - 1) << GLB_UART_CLK_DIV_POS))\n#define GLB_UART_CLK_EN           GLB_UART_CLK_EN\n#define GLB_UART_CLK_EN_POS       (4U)\n#define GLB_UART_CLK_EN_LEN       (1U)\n#define GLB_UART_CLK_EN_MSK       (((1U << GLB_UART_CLK_EN_LEN) - 1) << GLB_UART_CLK_EN_POS)\n#define GLB_UART_CLK_EN_UMSK      (~(((1U << GLB_UART_CLK_EN_LEN) - 1) << GLB_UART_CLK_EN_POS))\n#define GLB_HBN_UART_CLK_SEL      GLB_HBN_UART_CLK_SEL\n#define GLB_HBN_UART_CLK_SEL_POS  (7U)\n#define GLB_HBN_UART_CLK_SEL_LEN  (1U)\n#define GLB_HBN_UART_CLK_SEL_MSK  (((1U << GLB_HBN_UART_CLK_SEL_LEN) - 1) << GLB_HBN_UART_CLK_SEL_POS)\n#define GLB_HBN_UART_CLK_SEL_UMSK (~(((1U << GLB_HBN_UART_CLK_SEL_LEN) - 1) << GLB_HBN_UART_CLK_SEL_POS))\n#define GLB_SF_CLK_DIV            GLB_SF_CLK_DIV\n#define GLB_SF_CLK_DIV_POS        (8U)\n#define GLB_SF_CLK_DIV_LEN        (3U)\n#define GLB_SF_CLK_DIV_MSK        (((1U << GLB_SF_CLK_DIV_LEN) - 1) << GLB_SF_CLK_DIV_POS)\n#define GLB_SF_CLK_DIV_UMSK       (~(((1U << GLB_SF_CLK_DIV_LEN) - 1) << GLB_SF_CLK_DIV_POS))\n#define GLB_SF_CLK_EN             GLB_SF_CLK_EN\n#define GLB_SF_CLK_EN_POS         (11U)\n#define GLB_SF_CLK_EN_LEN         (1U)\n#define GLB_SF_CLK_EN_MSK         (((1U << GLB_SF_CLK_EN_LEN) - 1) << GLB_SF_CLK_EN_POS)\n#define GLB_SF_CLK_EN_UMSK        (~(((1U << GLB_SF_CLK_EN_LEN) - 1) << GLB_SF_CLK_EN_POS))\n#define GLB_SF_CLK_SEL            GLB_SF_CLK_SEL\n#define GLB_SF_CLK_SEL_POS        (12U)\n#define GLB_SF_CLK_SEL_LEN        (2U)\n#define GLB_SF_CLK_SEL_MSK        (((1U << GLB_SF_CLK_SEL_LEN) - 1) << GLB_SF_CLK_SEL_POS)\n#define GLB_SF_CLK_SEL_UMSK       (~(((1U << GLB_SF_CLK_SEL_LEN) - 1) << GLB_SF_CLK_SEL_POS))\n#define GLB_SF_CLK_SEL2           GLB_SF_CLK_SEL2\n#define GLB_SF_CLK_SEL2_POS       (14U)\n#define GLB_SF_CLK_SEL2_LEN       (2U)\n#define GLB_SF_CLK_SEL2_MSK       (((1U << GLB_SF_CLK_SEL2_LEN) - 1) << GLB_SF_CLK_SEL2_POS)\n#define GLB_SF_CLK_SEL2_UMSK      (~(((1U << GLB_SF_CLK_SEL2_LEN) - 1) << GLB_SF_CLK_SEL2_POS))\n#define GLB_IR_CLK_DIV            GLB_IR_CLK_DIV\n#define GLB_IR_CLK_DIV_POS        (16U)\n#define GLB_IR_CLK_DIV_LEN        (6U)\n#define GLB_IR_CLK_DIV_MSK        (((1U << GLB_IR_CLK_DIV_LEN) - 1) << GLB_IR_CLK_DIV_POS)\n#define GLB_IR_CLK_DIV_UMSK       (~(((1U << GLB_IR_CLK_DIV_LEN) - 1) << GLB_IR_CLK_DIV_POS))\n#define GLB_IR_CLK_EN             GLB_IR_CLK_EN\n#define GLB_IR_CLK_EN_POS         (23U)\n#define GLB_IR_CLK_EN_LEN         (1U)\n#define GLB_IR_CLK_EN_MSK         (((1U << GLB_IR_CLK_EN_LEN) - 1) << GLB_IR_CLK_EN_POS)\n#define GLB_IR_CLK_EN_UMSK        (~(((1U << GLB_IR_CLK_EN_LEN) - 1) << GLB_IR_CLK_EN_POS))\n#define GLB_DMA_CLK_EN            GLB_DMA_CLK_EN\n#define GLB_DMA_CLK_EN_POS        (24U)\n#define GLB_DMA_CLK_EN_LEN        (8U)\n#define GLB_DMA_CLK_EN_MSK        (((1U << GLB_DMA_CLK_EN_LEN) - 1) << GLB_DMA_CLK_EN_POS)\n#define GLB_DMA_CLK_EN_UMSK       (~(((1U << GLB_DMA_CLK_EN_LEN) - 1) << GLB_DMA_CLK_EN_POS))\n\n/* 0xC : clk_cfg3 */\n#define GLB_CLK_CFG3_OFFSET            (0xC)\n#define GLB_SPI_CLK_DIV                GLB_SPI_CLK_DIV\n#define GLB_SPI_CLK_DIV_POS            (0U)\n#define GLB_SPI_CLK_DIV_LEN            (5U)\n#define GLB_SPI_CLK_DIV_MSK            (((1U << GLB_SPI_CLK_DIV_LEN) - 1) << GLB_SPI_CLK_DIV_POS)\n#define GLB_SPI_CLK_DIV_UMSK           (~(((1U << GLB_SPI_CLK_DIV_LEN) - 1) << GLB_SPI_CLK_DIV_POS))\n#define GLB_CFG_SEL_ETH_REF_CLK_O      GLB_CFG_SEL_ETH_REF_CLK_O\n#define GLB_CFG_SEL_ETH_REF_CLK_O_POS  (5U)\n#define GLB_CFG_SEL_ETH_REF_CLK_O_LEN  (1U)\n#define GLB_CFG_SEL_ETH_REF_CLK_O_MSK  (((1U << GLB_CFG_SEL_ETH_REF_CLK_O_LEN) - 1) << GLB_CFG_SEL_ETH_REF_CLK_O_POS)\n#define GLB_CFG_SEL_ETH_REF_CLK_O_UMSK (~(((1U << GLB_CFG_SEL_ETH_REF_CLK_O_LEN) - 1) << GLB_CFG_SEL_ETH_REF_CLK_O_POS))\n#define GLB_CFG_INV_ETH_REF_CLK_O      GLB_CFG_INV_ETH_REF_CLK_O\n#define GLB_CFG_INV_ETH_REF_CLK_O_POS  (6U)\n#define GLB_CFG_INV_ETH_REF_CLK_O_LEN  (1U)\n#define GLB_CFG_INV_ETH_REF_CLK_O_MSK  (((1U << GLB_CFG_INV_ETH_REF_CLK_O_LEN) - 1) << GLB_CFG_INV_ETH_REF_CLK_O_POS)\n#define GLB_CFG_INV_ETH_REF_CLK_O_UMSK (~(((1U << GLB_CFG_INV_ETH_REF_CLK_O_LEN) - 1) << GLB_CFG_INV_ETH_REF_CLK_O_POS))\n#define GLB_CFG_INV_ETH_TX_CLK         GLB_CFG_INV_ETH_TX_CLK\n#define GLB_CFG_INV_ETH_TX_CLK_POS     (7U)\n#define GLB_CFG_INV_ETH_TX_CLK_LEN     (1U)\n#define GLB_CFG_INV_ETH_TX_CLK_MSK     (((1U << GLB_CFG_INV_ETH_TX_CLK_LEN) - 1) << GLB_CFG_INV_ETH_TX_CLK_POS)\n#define GLB_CFG_INV_ETH_TX_CLK_UMSK    (~(((1U << GLB_CFG_INV_ETH_TX_CLK_LEN) - 1) << GLB_CFG_INV_ETH_TX_CLK_POS))\n#define GLB_SPI_CLK_EN                 GLB_SPI_CLK_EN\n#define GLB_SPI_CLK_EN_POS             (8U)\n#define GLB_SPI_CLK_EN_LEN             (1U)\n#define GLB_SPI_CLK_EN_MSK             (((1U << GLB_SPI_CLK_EN_LEN) - 1) << GLB_SPI_CLK_EN_POS)\n#define GLB_SPI_CLK_EN_UMSK            (~(((1U << GLB_SPI_CLK_EN_LEN) - 1) << GLB_SPI_CLK_EN_POS))\n#define GLB_CFG_INV_RF_TEST_CLK_O      GLB_CFG_INV_RF_TEST_CLK_O\n#define GLB_CFG_INV_RF_TEST_CLK_O_POS  (9U)\n#define GLB_CFG_INV_RF_TEST_CLK_O_LEN  (1U)\n#define GLB_CFG_INV_RF_TEST_CLK_O_MSK  (((1U << GLB_CFG_INV_RF_TEST_CLK_O_LEN) - 1) << GLB_CFG_INV_RF_TEST_CLK_O_POS)\n#define GLB_CFG_INV_RF_TEST_CLK_O_UMSK (~(((1U << GLB_CFG_INV_RF_TEST_CLK_O_LEN) - 1) << GLB_CFG_INV_RF_TEST_CLK_O_POS))\n#define GLB_CFG_INV_ETH_RX_CLK         GLB_CFG_INV_ETH_RX_CLK\n#define GLB_CFG_INV_ETH_RX_CLK_POS     (10U)\n#define GLB_CFG_INV_ETH_RX_CLK_LEN     (1U)\n#define GLB_CFG_INV_ETH_RX_CLK_MSK     (((1U << GLB_CFG_INV_ETH_RX_CLK_LEN) - 1) << GLB_CFG_INV_ETH_RX_CLK_POS)\n#define GLB_CFG_INV_ETH_RX_CLK_UMSK    (~(((1U << GLB_CFG_INV_ETH_RX_CLK_LEN) - 1) << GLB_CFG_INV_ETH_RX_CLK_POS))\n#define GLB_I2C_CLK_DIV                GLB_I2C_CLK_DIV\n#define GLB_I2C_CLK_DIV_POS            (16U)\n#define GLB_I2C_CLK_DIV_LEN            (8U)\n#define GLB_I2C_CLK_DIV_MSK            (((1U << GLB_I2C_CLK_DIV_LEN) - 1) << GLB_I2C_CLK_DIV_POS)\n#define GLB_I2C_CLK_DIV_UMSK           (~(((1U << GLB_I2C_CLK_DIV_LEN) - 1) << GLB_I2C_CLK_DIV_POS))\n#define GLB_I2C_CLK_EN                 GLB_I2C_CLK_EN\n#define GLB_I2C_CLK_EN_POS             (24U)\n#define GLB_I2C_CLK_EN_LEN             (1U)\n#define GLB_I2C_CLK_EN_MSK             (((1U << GLB_I2C_CLK_EN_LEN) - 1) << GLB_I2C_CLK_EN_POS)\n#define GLB_I2C_CLK_EN_UMSK            (~(((1U << GLB_I2C_CLK_EN_LEN) - 1) << GLB_I2C_CLK_EN_POS))\n#define GLB_CHIP_CLK_OUT_0_SEL         GLB_CHIP_CLK_OUT_0_SEL\n#define GLB_CHIP_CLK_OUT_0_SEL_POS     (28U)\n#define GLB_CHIP_CLK_OUT_0_SEL_LEN     (2U)\n#define GLB_CHIP_CLK_OUT_0_SEL_MSK     (((1U << GLB_CHIP_CLK_OUT_0_SEL_LEN) - 1) << GLB_CHIP_CLK_OUT_0_SEL_POS)\n#define GLB_CHIP_CLK_OUT_0_SEL_UMSK    (~(((1U << GLB_CHIP_CLK_OUT_0_SEL_LEN) - 1) << GLB_CHIP_CLK_OUT_0_SEL_POS))\n#define GLB_CHIP_CLK_OUT_1_SEL         GLB_CHIP_CLK_OUT_1_SEL\n#define GLB_CHIP_CLK_OUT_1_SEL_POS     (30U)\n#define GLB_CHIP_CLK_OUT_1_SEL_LEN     (2U)\n#define GLB_CHIP_CLK_OUT_1_SEL_MSK     (((1U << GLB_CHIP_CLK_OUT_1_SEL_LEN) - 1) << GLB_CHIP_CLK_OUT_1_SEL_POS)\n#define GLB_CHIP_CLK_OUT_1_SEL_UMSK    (~(((1U << GLB_CHIP_CLK_OUT_1_SEL_LEN) - 1) << GLB_CHIP_CLK_OUT_1_SEL_POS))\n\n/* 0x10 : swrst_cfg0 */\n#define GLB_SWRST_CFG0_OFFSET (0x10)\n#define GLB_SWRST_S00         GLB_SWRST_S00\n#define GLB_SWRST_S00_POS     (0U)\n#define GLB_SWRST_S00_LEN     (1U)\n#define GLB_SWRST_S00_MSK     (((1U << GLB_SWRST_S00_LEN) - 1) << GLB_SWRST_S00_POS)\n#define GLB_SWRST_S00_UMSK    (~(((1U << GLB_SWRST_S00_LEN) - 1) << GLB_SWRST_S00_POS))\n#define GLB_SWRST_S01         GLB_SWRST_S01\n#define GLB_SWRST_S01_POS     (1U)\n#define GLB_SWRST_S01_LEN     (1U)\n#define GLB_SWRST_S01_MSK     (((1U << GLB_SWRST_S01_LEN) - 1) << GLB_SWRST_S01_POS)\n#define GLB_SWRST_S01_UMSK    (~(((1U << GLB_SWRST_S01_LEN) - 1) << GLB_SWRST_S01_POS))\n#define GLB_SWRST_S20         GLB_SWRST_S20\n#define GLB_SWRST_S20_POS     (4U)\n#define GLB_SWRST_S20_LEN     (1U)\n#define GLB_SWRST_S20_MSK     (((1U << GLB_SWRST_S20_LEN) - 1) << GLB_SWRST_S20_POS)\n#define GLB_SWRST_S20_UMSK    (~(((1U << GLB_SWRST_S20_LEN) - 1) << GLB_SWRST_S20_POS))\n#define GLB_SWRST_S30         GLB_SWRST_S30\n#define GLB_SWRST_S30_POS     (8U)\n#define GLB_SWRST_S30_LEN     (1U)\n#define GLB_SWRST_S30_MSK     (((1U << GLB_SWRST_S30_LEN) - 1) << GLB_SWRST_S30_POS)\n#define GLB_SWRST_S30_UMSK    (~(((1U << GLB_SWRST_S30_LEN) - 1) << GLB_SWRST_S30_POS))\n\n/* 0x14 : swrst_cfg1 */\n#define GLB_SWRST_CFG1_OFFSET (0x14)\n#define GLB_SWRST_S10         GLB_SWRST_S10\n#define GLB_SWRST_S10_POS     (0U)\n#define GLB_SWRST_S10_LEN     (1U)\n#define GLB_SWRST_S10_MSK     (((1U << GLB_SWRST_S10_LEN) - 1) << GLB_SWRST_S10_POS)\n#define GLB_SWRST_S10_UMSK    (~(((1U << GLB_SWRST_S10_LEN) - 1) << GLB_SWRST_S10_POS))\n#define GLB_SWRST_S11         GLB_SWRST_S11\n#define GLB_SWRST_S11_POS     (1U)\n#define GLB_SWRST_S11_LEN     (1U)\n#define GLB_SWRST_S11_MSK     (((1U << GLB_SWRST_S11_LEN) - 1) << GLB_SWRST_S11_POS)\n#define GLB_SWRST_S11_UMSK    (~(((1U << GLB_SWRST_S11_LEN) - 1) << GLB_SWRST_S11_POS))\n#define GLB_SWRST_S12         GLB_SWRST_S12\n#define GLB_SWRST_S12_POS     (2U)\n#define GLB_SWRST_S12_LEN     (1U)\n#define GLB_SWRST_S12_MSK     (((1U << GLB_SWRST_S12_LEN) - 1) << GLB_SWRST_S12_POS)\n#define GLB_SWRST_S12_UMSK    (~(((1U << GLB_SWRST_S12_LEN) - 1) << GLB_SWRST_S12_POS))\n#define GLB_SWRST_S13         GLB_SWRST_S13\n#define GLB_SWRST_S13_POS     (3U)\n#define GLB_SWRST_S13_LEN     (1U)\n#define GLB_SWRST_S13_MSK     (((1U << GLB_SWRST_S13_LEN) - 1) << GLB_SWRST_S13_POS)\n#define GLB_SWRST_S13_UMSK    (~(((1U << GLB_SWRST_S13_LEN) - 1) << GLB_SWRST_S13_POS))\n#define GLB_SWRST_S14         GLB_SWRST_S14\n#define GLB_SWRST_S14_POS     (4U)\n#define GLB_SWRST_S14_LEN     (1U)\n#define GLB_SWRST_S14_MSK     (((1U << GLB_SWRST_S14_LEN) - 1) << GLB_SWRST_S14_POS)\n#define GLB_SWRST_S14_UMSK    (~(((1U << GLB_SWRST_S14_LEN) - 1) << GLB_SWRST_S14_POS))\n#define GLB_SWRST_S15         GLB_SWRST_S15\n#define GLB_SWRST_S15_POS     (5U)\n#define GLB_SWRST_S15_LEN     (1U)\n#define GLB_SWRST_S15_MSK     (((1U << GLB_SWRST_S15_LEN) - 1) << GLB_SWRST_S15_POS)\n#define GLB_SWRST_S15_UMSK    (~(((1U << GLB_SWRST_S15_LEN) - 1) << GLB_SWRST_S15_POS))\n#define GLB_SWRST_S16         GLB_SWRST_S16\n#define GLB_SWRST_S16_POS     (6U)\n#define GLB_SWRST_S16_LEN     (1U)\n#define GLB_SWRST_S16_MSK     (((1U << GLB_SWRST_S16_LEN) - 1) << GLB_SWRST_S16_POS)\n#define GLB_SWRST_S16_UMSK    (~(((1U << GLB_SWRST_S16_LEN) - 1) << GLB_SWRST_S16_POS))\n#define GLB_SWRST_S17         GLB_SWRST_S17\n#define GLB_SWRST_S17_POS     (7U)\n#define GLB_SWRST_S17_LEN     (1U)\n#define GLB_SWRST_S17_MSK     (((1U << GLB_SWRST_S17_LEN) - 1) << GLB_SWRST_S17_POS)\n#define GLB_SWRST_S17_UMSK    (~(((1U << GLB_SWRST_S17_LEN) - 1) << GLB_SWRST_S17_POS))\n#define GLB_SWRST_S18         GLB_SWRST_S18\n#define GLB_SWRST_S18_POS     (8U)\n#define GLB_SWRST_S18_LEN     (1U)\n#define GLB_SWRST_S18_MSK     (((1U << GLB_SWRST_S18_LEN) - 1) << GLB_SWRST_S18_POS)\n#define GLB_SWRST_S18_UMSK    (~(((1U << GLB_SWRST_S18_LEN) - 1) << GLB_SWRST_S18_POS))\n#define GLB_SWRST_S19         GLB_SWRST_S19\n#define GLB_SWRST_S19_POS     (9U)\n#define GLB_SWRST_S19_LEN     (1U)\n#define GLB_SWRST_S19_MSK     (((1U << GLB_SWRST_S19_LEN) - 1) << GLB_SWRST_S19_POS)\n#define GLB_SWRST_S19_UMSK    (~(((1U << GLB_SWRST_S19_LEN) - 1) << GLB_SWRST_S19_POS))\n#define GLB_SWRST_S1A         GLB_SWRST_S1A\n#define GLB_SWRST_S1A_POS     (10U)\n#define GLB_SWRST_S1A_LEN     (1U)\n#define GLB_SWRST_S1A_MSK     (((1U << GLB_SWRST_S1A_LEN) - 1) << GLB_SWRST_S1A_POS)\n#define GLB_SWRST_S1A_UMSK    (~(((1U << GLB_SWRST_S1A_LEN) - 1) << GLB_SWRST_S1A_POS))\n#define GLB_SWRST_S1B         GLB_SWRST_S1B\n#define GLB_SWRST_S1B_POS     (11U)\n#define GLB_SWRST_S1B_LEN     (1U)\n#define GLB_SWRST_S1B_MSK     (((1U << GLB_SWRST_S1B_LEN) - 1) << GLB_SWRST_S1B_POS)\n#define GLB_SWRST_S1B_UMSK    (~(((1U << GLB_SWRST_S1B_LEN) - 1) << GLB_SWRST_S1B_POS))\n#define GLB_SWRST_S1C         GLB_SWRST_S1C\n#define GLB_SWRST_S1C_POS     (12U)\n#define GLB_SWRST_S1C_LEN     (1U)\n#define GLB_SWRST_S1C_MSK     (((1U << GLB_SWRST_S1C_LEN) - 1) << GLB_SWRST_S1C_POS)\n#define GLB_SWRST_S1C_UMSK    (~(((1U << GLB_SWRST_S1C_LEN) - 1) << GLB_SWRST_S1C_POS))\n#define GLB_SWRST_S1D         GLB_SWRST_S1D\n#define GLB_SWRST_S1D_POS     (13U)\n#define GLB_SWRST_S1D_LEN     (1U)\n#define GLB_SWRST_S1D_MSK     (((1U << GLB_SWRST_S1D_LEN) - 1) << GLB_SWRST_S1D_POS)\n#define GLB_SWRST_S1D_UMSK    (~(((1U << GLB_SWRST_S1D_LEN) - 1) << GLB_SWRST_S1D_POS))\n#define GLB_SWRST_S1E         GLB_SWRST_S1E\n#define GLB_SWRST_S1E_POS     (14U)\n#define GLB_SWRST_S1E_LEN     (1U)\n#define GLB_SWRST_S1E_MSK     (((1U << GLB_SWRST_S1E_LEN) - 1) << GLB_SWRST_S1E_POS)\n#define GLB_SWRST_S1E_UMSK    (~(((1U << GLB_SWRST_S1E_LEN) - 1) << GLB_SWRST_S1E_POS))\n#define GLB_SWRST_S1F         GLB_SWRST_S1F\n#define GLB_SWRST_S1F_POS     (15U)\n#define GLB_SWRST_S1F_LEN     (1U)\n#define GLB_SWRST_S1F_MSK     (((1U << GLB_SWRST_S1F_LEN) - 1) << GLB_SWRST_S1F_POS)\n#define GLB_SWRST_S1F_UMSK    (~(((1U << GLB_SWRST_S1F_LEN) - 1) << GLB_SWRST_S1F_POS))\n#define GLB_SWRST_S1A0        GLB_SWRST_S1A0\n#define GLB_SWRST_S1A0_POS    (16U)\n#define GLB_SWRST_S1A0_LEN    (1U)\n#define GLB_SWRST_S1A0_MSK    (((1U << GLB_SWRST_S1A0_LEN) - 1) << GLB_SWRST_S1A0_POS)\n#define GLB_SWRST_S1A0_UMSK   (~(((1U << GLB_SWRST_S1A0_LEN) - 1) << GLB_SWRST_S1A0_POS))\n#define GLB_SWRST_S1A1        GLB_SWRST_S1A1\n#define GLB_SWRST_S1A1_POS    (17U)\n#define GLB_SWRST_S1A1_LEN    (1U)\n#define GLB_SWRST_S1A1_MSK    (((1U << GLB_SWRST_S1A1_LEN) - 1) << GLB_SWRST_S1A1_POS)\n#define GLB_SWRST_S1A1_UMSK   (~(((1U << GLB_SWRST_S1A1_LEN) - 1) << GLB_SWRST_S1A1_POS))\n#define GLB_SWRST_S1A2        GLB_SWRST_S1A2\n#define GLB_SWRST_S1A2_POS    (18U)\n#define GLB_SWRST_S1A2_LEN    (1U)\n#define GLB_SWRST_S1A2_MSK    (((1U << GLB_SWRST_S1A2_LEN) - 1) << GLB_SWRST_S1A2_POS)\n#define GLB_SWRST_S1A2_UMSK   (~(((1U << GLB_SWRST_S1A2_LEN) - 1) << GLB_SWRST_S1A2_POS))\n#define GLB_SWRST_S1A3        GLB_SWRST_S1A3\n#define GLB_SWRST_S1A3_POS    (19U)\n#define GLB_SWRST_S1A3_LEN    (1U)\n#define GLB_SWRST_S1A3_MSK    (((1U << GLB_SWRST_S1A3_LEN) - 1) << GLB_SWRST_S1A3_POS)\n#define GLB_SWRST_S1A3_UMSK   (~(((1U << GLB_SWRST_S1A3_LEN) - 1) << GLB_SWRST_S1A3_POS))\n#define GLB_SWRST_S1A4        GLB_SWRST_S1A4\n#define GLB_SWRST_S1A4_POS    (20U)\n#define GLB_SWRST_S1A4_LEN    (1U)\n#define GLB_SWRST_S1A4_MSK    (((1U << GLB_SWRST_S1A4_LEN) - 1) << GLB_SWRST_S1A4_POS)\n#define GLB_SWRST_S1A4_UMSK   (~(((1U << GLB_SWRST_S1A4_LEN) - 1) << GLB_SWRST_S1A4_POS))\n#define GLB_SWRST_S1A5        GLB_SWRST_S1A5\n#define GLB_SWRST_S1A5_POS    (21U)\n#define GLB_SWRST_S1A5_LEN    (1U)\n#define GLB_SWRST_S1A5_MSK    (((1U << GLB_SWRST_S1A5_LEN) - 1) << GLB_SWRST_S1A5_POS)\n#define GLB_SWRST_S1A5_UMSK   (~(((1U << GLB_SWRST_S1A5_LEN) - 1) << GLB_SWRST_S1A5_POS))\n#define GLB_SWRST_S1A6        GLB_SWRST_S1A6\n#define GLB_SWRST_S1A6_POS    (22U)\n#define GLB_SWRST_S1A6_LEN    (1U)\n#define GLB_SWRST_S1A6_MSK    (((1U << GLB_SWRST_S1A6_LEN) - 1) << GLB_SWRST_S1A6_POS)\n#define GLB_SWRST_S1A6_UMSK   (~(((1U << GLB_SWRST_S1A6_LEN) - 1) << GLB_SWRST_S1A6_POS))\n#define GLB_SWRST_S1A7        GLB_SWRST_S1A7\n#define GLB_SWRST_S1A7_POS    (23U)\n#define GLB_SWRST_S1A7_LEN    (1U)\n#define GLB_SWRST_S1A7_MSK    (((1U << GLB_SWRST_S1A7_LEN) - 1) << GLB_SWRST_S1A7_POS)\n#define GLB_SWRST_S1A7_UMSK   (~(((1U << GLB_SWRST_S1A7_LEN) - 1) << GLB_SWRST_S1A7_POS))\n#define GLB_SWRST_S1A8        GLB_SWRST_S1A8\n#define GLB_SWRST_S1A8_POS    (24U)\n#define GLB_SWRST_S1A8_LEN    (1U)\n#define GLB_SWRST_S1A8_MSK    (((1U << GLB_SWRST_S1A8_LEN) - 1) << GLB_SWRST_S1A8_POS)\n#define GLB_SWRST_S1A8_UMSK   (~(((1U << GLB_SWRST_S1A8_LEN) - 1) << GLB_SWRST_S1A8_POS))\n#define GLB_SWRST_S1A9        GLB_SWRST_S1A9\n#define GLB_SWRST_S1A9_POS    (25U)\n#define GLB_SWRST_S1A9_LEN    (1U)\n#define GLB_SWRST_S1A9_MSK    (((1U << GLB_SWRST_S1A9_LEN) - 1) << GLB_SWRST_S1A9_POS)\n#define GLB_SWRST_S1A9_UMSK   (~(((1U << GLB_SWRST_S1A9_LEN) - 1) << GLB_SWRST_S1A9_POS))\n#define GLB_SWRST_S1AA        GLB_SWRST_S1AA\n#define GLB_SWRST_S1AA_POS    (26U)\n#define GLB_SWRST_S1AA_LEN    (1U)\n#define GLB_SWRST_S1AA_MSK    (((1U << GLB_SWRST_S1AA_LEN) - 1) << GLB_SWRST_S1AA_POS)\n#define GLB_SWRST_S1AA_UMSK   (~(((1U << GLB_SWRST_S1AA_LEN) - 1) << GLB_SWRST_S1AA_POS))\n#define GLB_SWRST_S1AB        GLB_SWRST_S1AB\n#define GLB_SWRST_S1AB_POS    (27U)\n#define GLB_SWRST_S1AB_LEN    (1U)\n#define GLB_SWRST_S1AB_MSK    (((1U << GLB_SWRST_S1AB_LEN) - 1) << GLB_SWRST_S1AB_POS)\n#define GLB_SWRST_S1AB_UMSK   (~(((1U << GLB_SWRST_S1AB_LEN) - 1) << GLB_SWRST_S1AB_POS))\n#define GLB_SWRST_S1AC        GLB_SWRST_S1AC\n#define GLB_SWRST_S1AC_POS    (28U)\n#define GLB_SWRST_S1AC_LEN    (1U)\n#define GLB_SWRST_S1AC_MSK    (((1U << GLB_SWRST_S1AC_LEN) - 1) << GLB_SWRST_S1AC_POS)\n#define GLB_SWRST_S1AC_UMSK   (~(((1U << GLB_SWRST_S1AC_LEN) - 1) << GLB_SWRST_S1AC_POS))\n#define GLB_SWRST_S1AD        GLB_SWRST_S1AD\n#define GLB_SWRST_S1AD_POS    (29U)\n#define GLB_SWRST_S1AD_LEN    (1U)\n#define GLB_SWRST_S1AD_MSK    (((1U << GLB_SWRST_S1AD_LEN) - 1) << GLB_SWRST_S1AD_POS)\n#define GLB_SWRST_S1AD_UMSK   (~(((1U << GLB_SWRST_S1AD_LEN) - 1) << GLB_SWRST_S1AD_POS))\n#define GLB_SWRST_S1AE        GLB_SWRST_S1AE\n#define GLB_SWRST_S1AE_POS    (30U)\n#define GLB_SWRST_S1AE_LEN    (1U)\n#define GLB_SWRST_S1AE_MSK    (((1U << GLB_SWRST_S1AE_LEN) - 1) << GLB_SWRST_S1AE_POS)\n#define GLB_SWRST_S1AE_UMSK   (~(((1U << GLB_SWRST_S1AE_LEN) - 1) << GLB_SWRST_S1AE_POS))\n\n/* 0x18 : swrst_cfg2 */\n#define GLB_SWRST_CFG2_OFFSET         (0x18)\n#define GLB_REG_CTRL_PWRON_RST        GLB_REG_CTRL_PWRON_RST\n#define GLB_REG_CTRL_PWRON_RST_POS    (0U)\n#define GLB_REG_CTRL_PWRON_RST_LEN    (1U)\n#define GLB_REG_CTRL_PWRON_RST_MSK    (((1U << GLB_REG_CTRL_PWRON_RST_LEN) - 1) << GLB_REG_CTRL_PWRON_RST_POS)\n#define GLB_REG_CTRL_PWRON_RST_UMSK   (~(((1U << GLB_REG_CTRL_PWRON_RST_LEN) - 1) << GLB_REG_CTRL_PWRON_RST_POS))\n#define GLB_REG_CTRL_CPU_RESET        GLB_REG_CTRL_CPU_RESET\n#define GLB_REG_CTRL_CPU_RESET_POS    (1U)\n#define GLB_REG_CTRL_CPU_RESET_LEN    (1U)\n#define GLB_REG_CTRL_CPU_RESET_MSK    (((1U << GLB_REG_CTRL_CPU_RESET_LEN) - 1) << GLB_REG_CTRL_CPU_RESET_POS)\n#define GLB_REG_CTRL_CPU_RESET_UMSK   (~(((1U << GLB_REG_CTRL_CPU_RESET_LEN) - 1) << GLB_REG_CTRL_CPU_RESET_POS))\n#define GLB_REG_CTRL_SYS_RESET        GLB_REG_CTRL_SYS_RESET\n#define GLB_REG_CTRL_SYS_RESET_POS    (2U)\n#define GLB_REG_CTRL_SYS_RESET_LEN    (1U)\n#define GLB_REG_CTRL_SYS_RESET_MSK    (((1U << GLB_REG_CTRL_SYS_RESET_LEN) - 1) << GLB_REG_CTRL_SYS_RESET_POS)\n#define GLB_REG_CTRL_SYS_RESET_UMSK   (~(((1U << GLB_REG_CTRL_SYS_RESET_LEN) - 1) << GLB_REG_CTRL_SYS_RESET_POS))\n#define GLB_REG_CTRL_RESET_DUMMY      GLB_REG_CTRL_RESET_DUMMY\n#define GLB_REG_CTRL_RESET_DUMMY_POS  (4U)\n#define GLB_REG_CTRL_RESET_DUMMY_LEN  (4U)\n#define GLB_REG_CTRL_RESET_DUMMY_MSK  (((1U << GLB_REG_CTRL_RESET_DUMMY_LEN) - 1) << GLB_REG_CTRL_RESET_DUMMY_POS)\n#define GLB_REG_CTRL_RESET_DUMMY_UMSK (~(((1U << GLB_REG_CTRL_RESET_DUMMY_LEN) - 1) << GLB_REG_CTRL_RESET_DUMMY_POS))\n#define GLB_PKA_CLK_SEL               GLB_PKA_CLK_SEL\n#define GLB_PKA_CLK_SEL_POS           (24U)\n#define GLB_PKA_CLK_SEL_LEN           (1U)\n#define GLB_PKA_CLK_SEL_MSK           (((1U << GLB_PKA_CLK_SEL_LEN) - 1) << GLB_PKA_CLK_SEL_POS)\n#define GLB_PKA_CLK_SEL_UMSK          (~(((1U << GLB_PKA_CLK_SEL_LEN) - 1) << GLB_PKA_CLK_SEL_POS))\n\n/* 0x1C : swrst_cfg3 */\n#define GLB_SWRST_CFG3_OFFSET (0x1C)\n\n/* 0x20 : cgen_cfg0 */\n#define GLB_CGEN_CFG0_OFFSET (0x20)\n#define GLB_CGEN_M           GLB_CGEN_M\n#define GLB_CGEN_M_POS       (0U)\n#define GLB_CGEN_M_LEN       (8U)\n#define GLB_CGEN_M_MSK       (((1U << GLB_CGEN_M_LEN) - 1) << GLB_CGEN_M_POS)\n#define GLB_CGEN_M_UMSK      (~(((1U << GLB_CGEN_M_LEN) - 1) << GLB_CGEN_M_POS))\n\n/* 0x24 : cgen_cfg1 */\n#define GLB_CGEN_CFG1_OFFSET (0x24)\n#define GLB_CGEN_S1          GLB_CGEN_S1\n#define GLB_CGEN_S1_POS      (0U)\n#define GLB_CGEN_S1_LEN      (16U)\n#define GLB_CGEN_S1_MSK      (((1U << GLB_CGEN_S1_LEN) - 1) << GLB_CGEN_S1_POS)\n#define GLB_CGEN_S1_UMSK     (~(((1U << GLB_CGEN_S1_LEN) - 1) << GLB_CGEN_S1_POS))\n#define GLB_CGEN_S1A         GLB_CGEN_S1A\n#define GLB_CGEN_S1A_POS     (16U)\n#define GLB_CGEN_S1A_LEN     (16U)\n#define GLB_CGEN_S1A_MSK     (((1U << GLB_CGEN_S1A_LEN) - 1) << GLB_CGEN_S1A_POS)\n#define GLB_CGEN_S1A_UMSK    (~(((1U << GLB_CGEN_S1A_LEN) - 1) << GLB_CGEN_S1A_POS))\n\n/* 0x28 : cgen_cfg2 */\n#define GLB_CGEN_CFG2_OFFSET (0x28)\n#define GLB_CGEN_S2          GLB_CGEN_S2\n#define GLB_CGEN_S2_POS      (0U)\n#define GLB_CGEN_S2_LEN      (1U)\n#define GLB_CGEN_S2_MSK      (((1U << GLB_CGEN_S2_LEN) - 1) << GLB_CGEN_S2_POS)\n#define GLB_CGEN_S2_UMSK     (~(((1U << GLB_CGEN_S2_LEN) - 1) << GLB_CGEN_S2_POS))\n#define GLB_CGEN_S3          GLB_CGEN_S3\n#define GLB_CGEN_S3_POS      (4U)\n#define GLB_CGEN_S3_LEN      (1U)\n#define GLB_CGEN_S3_MSK      (((1U << GLB_CGEN_S3_LEN) - 1) << GLB_CGEN_S3_POS)\n#define GLB_CGEN_S3_UMSK     (~(((1U << GLB_CGEN_S3_LEN) - 1) << GLB_CGEN_S3_POS))\n\n/* 0x2C : cgen_cfg3 */\n#define GLB_CGEN_CFG3_OFFSET (0x2C)\n\n/* 0x30 : MBIST_CTL */\n#define GLB_MBIST_CTL_OFFSET            (0x30)\n#define GLB_IROM_MBIST_MODE             GLB_IROM_MBIST_MODE\n#define GLB_IROM_MBIST_MODE_POS         (0U)\n#define GLB_IROM_MBIST_MODE_LEN         (1U)\n#define GLB_IROM_MBIST_MODE_MSK         (((1U << GLB_IROM_MBIST_MODE_LEN) - 1) << GLB_IROM_MBIST_MODE_POS)\n#define GLB_IROM_MBIST_MODE_UMSK        (~(((1U << GLB_IROM_MBIST_MODE_LEN) - 1) << GLB_IROM_MBIST_MODE_POS))\n#define GLB_HSRAM_MEM_MBIST_MODE        GLB_HSRAM_MEM_MBIST_MODE\n#define GLB_HSRAM_MEM_MBIST_MODE_POS    (1U)\n#define GLB_HSRAM_MEM_MBIST_MODE_LEN    (1U)\n#define GLB_HSRAM_MEM_MBIST_MODE_MSK    (((1U << GLB_HSRAM_MEM_MBIST_MODE_LEN) - 1) << GLB_HSRAM_MEM_MBIST_MODE_POS)\n#define GLB_HSRAM_MEM_MBIST_MODE_UMSK   (~(((1U << GLB_HSRAM_MEM_MBIST_MODE_LEN) - 1) << GLB_HSRAM_MEM_MBIST_MODE_POS))\n#define GLB_HSRAM_CACHE_MBIST_MODE      GLB_HSRAM_CACHE_MBIST_MODE\n#define GLB_HSRAM_CACHE_MBIST_MODE_POS  (2U)\n#define GLB_HSRAM_CACHE_MBIST_MODE_LEN  (1U)\n#define GLB_HSRAM_CACHE_MBIST_MODE_MSK  (((1U << GLB_HSRAM_CACHE_MBIST_MODE_LEN) - 1) << GLB_HSRAM_CACHE_MBIST_MODE_POS)\n#define GLB_HSRAM_CACHE_MBIST_MODE_UMSK (~(((1U << GLB_HSRAM_CACHE_MBIST_MODE_LEN) - 1) << GLB_HSRAM_CACHE_MBIST_MODE_POS))\n#define GLB_TAG_MBIST_MODE              GLB_TAG_MBIST_MODE\n#define GLB_TAG_MBIST_MODE_POS          (3U)\n#define GLB_TAG_MBIST_MODE_LEN          (1U)\n#define GLB_TAG_MBIST_MODE_MSK          (((1U << GLB_TAG_MBIST_MODE_LEN) - 1) << GLB_TAG_MBIST_MODE_POS)\n#define GLB_TAG_MBIST_MODE_UMSK         (~(((1U << GLB_TAG_MBIST_MODE_LEN) - 1) << GLB_TAG_MBIST_MODE_POS))\n#define GLB_OCRAM_MBIST_MODE            GLB_OCRAM_MBIST_MODE\n#define GLB_OCRAM_MBIST_MODE_POS        (4U)\n#define GLB_OCRAM_MBIST_MODE_LEN        (1U)\n#define GLB_OCRAM_MBIST_MODE_MSK        (((1U << GLB_OCRAM_MBIST_MODE_LEN) - 1) << GLB_OCRAM_MBIST_MODE_POS)\n#define GLB_OCRAM_MBIST_MODE_UMSK       (~(((1U << GLB_OCRAM_MBIST_MODE_LEN) - 1) << GLB_OCRAM_MBIST_MODE_POS))\n#define GLB_EM_RAM_MBIST_MODE           GLB_EM_RAM_MBIST_MODE\n#define GLB_EM_RAM_MBIST_MODE_POS       (5U)\n#define GLB_EM_RAM_MBIST_MODE_LEN       (1U)\n#define GLB_EM_RAM_MBIST_MODE_MSK       (((1U << GLB_EM_RAM_MBIST_MODE_LEN) - 1) << GLB_EM_RAM_MBIST_MODE_POS)\n#define GLB_EM_RAM_MBIST_MODE_UMSK      (~(((1U << GLB_EM_RAM_MBIST_MODE_LEN) - 1) << GLB_EM_RAM_MBIST_MODE_POS))\n#define GLB_REG_MBIST_RST_N             GLB_REG_MBIST_RST_N\n#define GLB_REG_MBIST_RST_N_POS         (31U)\n#define GLB_REG_MBIST_RST_N_LEN         (1U)\n#define GLB_REG_MBIST_RST_N_MSK         (((1U << GLB_REG_MBIST_RST_N_LEN) - 1) << GLB_REG_MBIST_RST_N_POS)\n#define GLB_REG_MBIST_RST_N_UMSK        (~(((1U << GLB_REG_MBIST_RST_N_LEN) - 1) << GLB_REG_MBIST_RST_N_POS))\n\n/* 0x34 : MBIST_STAT */\n#define GLB_MBIST_STAT_OFFSET           (0x34)\n#define GLB_IROM_MBIST_DONE             GLB_IROM_MBIST_DONE\n#define GLB_IROM_MBIST_DONE_POS         (0U)\n#define GLB_IROM_MBIST_DONE_LEN         (1U)\n#define GLB_IROM_MBIST_DONE_MSK         (((1U << GLB_IROM_MBIST_DONE_LEN) - 1) << GLB_IROM_MBIST_DONE_POS)\n#define GLB_IROM_MBIST_DONE_UMSK        (~(((1U << GLB_IROM_MBIST_DONE_LEN) - 1) << GLB_IROM_MBIST_DONE_POS))\n#define GLB_HSRAM_MEM_MBIST_DONE        GLB_HSRAM_MEM_MBIST_DONE\n#define GLB_HSRAM_MEM_MBIST_DONE_POS    (1U)\n#define GLB_HSRAM_MEM_MBIST_DONE_LEN    (1U)\n#define GLB_HSRAM_MEM_MBIST_DONE_MSK    (((1U << GLB_HSRAM_MEM_MBIST_DONE_LEN) - 1) << GLB_HSRAM_MEM_MBIST_DONE_POS)\n#define GLB_HSRAM_MEM_MBIST_DONE_UMSK   (~(((1U << GLB_HSRAM_MEM_MBIST_DONE_LEN) - 1) << GLB_HSRAM_MEM_MBIST_DONE_POS))\n#define GLB_HSRAM_CACHE_MBIST_DONE      GLB_HSRAM_CACHE_MBIST_DONE\n#define GLB_HSRAM_CACHE_MBIST_DONE_POS  (2U)\n#define GLB_HSRAM_CACHE_MBIST_DONE_LEN  (1U)\n#define GLB_HSRAM_CACHE_MBIST_DONE_MSK  (((1U << GLB_HSRAM_CACHE_MBIST_DONE_LEN) - 1) << GLB_HSRAM_CACHE_MBIST_DONE_POS)\n#define GLB_HSRAM_CACHE_MBIST_DONE_UMSK (~(((1U << GLB_HSRAM_CACHE_MBIST_DONE_LEN) - 1) << GLB_HSRAM_CACHE_MBIST_DONE_POS))\n#define GLB_TAG_MBIST_DONE              GLB_TAG_MBIST_DONE\n#define GLB_TAG_MBIST_DONE_POS          (3U)\n#define GLB_TAG_MBIST_DONE_LEN          (1U)\n#define GLB_TAG_MBIST_DONE_MSK          (((1U << GLB_TAG_MBIST_DONE_LEN) - 1) << GLB_TAG_MBIST_DONE_POS)\n#define GLB_TAG_MBIST_DONE_UMSK         (~(((1U << GLB_TAG_MBIST_DONE_LEN) - 1) << GLB_TAG_MBIST_DONE_POS))\n#define GLB_OCRAM_MBIST_DONE            GLB_OCRAM_MBIST_DONE\n#define GLB_OCRAM_MBIST_DONE_POS        (4U)\n#define GLB_OCRAM_MBIST_DONE_LEN        (1U)\n#define GLB_OCRAM_MBIST_DONE_MSK        (((1U << GLB_OCRAM_MBIST_DONE_LEN) - 1) << GLB_OCRAM_MBIST_DONE_POS)\n#define GLB_OCRAM_MBIST_DONE_UMSK       (~(((1U << GLB_OCRAM_MBIST_DONE_LEN) - 1) << GLB_OCRAM_MBIST_DONE_POS))\n#define GLB_EM_RAM_MBIST_DONE           GLB_EM_RAM_MBIST_DONE\n#define GLB_EM_RAM_MBIST_DONE_POS       (5U)\n#define GLB_EM_RAM_MBIST_DONE_LEN       (1U)\n#define GLB_EM_RAM_MBIST_DONE_MSK       (((1U << GLB_EM_RAM_MBIST_DONE_LEN) - 1) << GLB_EM_RAM_MBIST_DONE_POS)\n#define GLB_EM_RAM_MBIST_DONE_UMSK      (~(((1U << GLB_EM_RAM_MBIST_DONE_LEN) - 1) << GLB_EM_RAM_MBIST_DONE_POS))\n#define GLB_IROM_MBIST_FAIL             GLB_IROM_MBIST_FAIL\n#define GLB_IROM_MBIST_FAIL_POS         (16U)\n#define GLB_IROM_MBIST_FAIL_LEN         (1U)\n#define GLB_IROM_MBIST_FAIL_MSK         (((1U << GLB_IROM_MBIST_FAIL_LEN) - 1) << GLB_IROM_MBIST_FAIL_POS)\n#define GLB_IROM_MBIST_FAIL_UMSK        (~(((1U << GLB_IROM_MBIST_FAIL_LEN) - 1) << GLB_IROM_MBIST_FAIL_POS))\n#define GLB_HSRAM_MEM_MBIST_FAIL        GLB_HSRAM_MEM_MBIST_FAIL\n#define GLB_HSRAM_MEM_MBIST_FAIL_POS    (17U)\n#define GLB_HSRAM_MEM_MBIST_FAIL_LEN    (1U)\n#define GLB_HSRAM_MEM_MBIST_FAIL_MSK    (((1U << GLB_HSRAM_MEM_MBIST_FAIL_LEN) - 1) << GLB_HSRAM_MEM_MBIST_FAIL_POS)\n#define GLB_HSRAM_MEM_MBIST_FAIL_UMSK   (~(((1U << GLB_HSRAM_MEM_MBIST_FAIL_LEN) - 1) << GLB_HSRAM_MEM_MBIST_FAIL_POS))\n#define GLB_HSRAM_CACHE_MBIST_FAIL      GLB_HSRAM_CACHE_MBIST_FAIL\n#define GLB_HSRAM_CACHE_MBIST_FAIL_POS  (18U)\n#define GLB_HSRAM_CACHE_MBIST_FAIL_LEN  (1U)\n#define GLB_HSRAM_CACHE_MBIST_FAIL_MSK  (((1U << GLB_HSRAM_CACHE_MBIST_FAIL_LEN) - 1) << GLB_HSRAM_CACHE_MBIST_FAIL_POS)\n#define GLB_HSRAM_CACHE_MBIST_FAIL_UMSK (~(((1U << GLB_HSRAM_CACHE_MBIST_FAIL_LEN) - 1) << GLB_HSRAM_CACHE_MBIST_FAIL_POS))\n#define GLB_TAG_MBIST_FAIL              GLB_TAG_MBIST_FAIL\n#define GLB_TAG_MBIST_FAIL_POS          (19U)\n#define GLB_TAG_MBIST_FAIL_LEN          (1U)\n#define GLB_TAG_MBIST_FAIL_MSK          (((1U << GLB_TAG_MBIST_FAIL_LEN) - 1) << GLB_TAG_MBIST_FAIL_POS)\n#define GLB_TAG_MBIST_FAIL_UMSK         (~(((1U << GLB_TAG_MBIST_FAIL_LEN) - 1) << GLB_TAG_MBIST_FAIL_POS))\n#define GLB_OCRAM_MBIST_FAIL            GLB_OCRAM_MBIST_FAIL\n#define GLB_OCRAM_MBIST_FAIL_POS        (20U)\n#define GLB_OCRAM_MBIST_FAIL_LEN        (1U)\n#define GLB_OCRAM_MBIST_FAIL_MSK        (((1U << GLB_OCRAM_MBIST_FAIL_LEN) - 1) << GLB_OCRAM_MBIST_FAIL_POS)\n#define GLB_OCRAM_MBIST_FAIL_UMSK       (~(((1U << GLB_OCRAM_MBIST_FAIL_LEN) - 1) << GLB_OCRAM_MBIST_FAIL_POS))\n#define GLB_EM_RAM_MBIST_FAIL           GLB_EM_RAM_MBIST_FAIL\n#define GLB_EM_RAM_MBIST_FAIL_POS       (21U)\n#define GLB_EM_RAM_MBIST_FAIL_LEN       (1U)\n#define GLB_EM_RAM_MBIST_FAIL_MSK       (((1U << GLB_EM_RAM_MBIST_FAIL_LEN) - 1) << GLB_EM_RAM_MBIST_FAIL_POS)\n#define GLB_EM_RAM_MBIST_FAIL_UMSK      (~(((1U << GLB_EM_RAM_MBIST_FAIL_LEN) - 1) << GLB_EM_RAM_MBIST_FAIL_POS))\n\n/* 0x50 : bmx_cfg1 */\n#define GLB_BMX_CFG1_OFFSET          (0x50)\n#define GLB_BMX_TIMEOUT_EN           GLB_BMX_TIMEOUT_EN\n#define GLB_BMX_TIMEOUT_EN_POS       (0U)\n#define GLB_BMX_TIMEOUT_EN_LEN       (4U)\n#define GLB_BMX_TIMEOUT_EN_MSK       (((1U << GLB_BMX_TIMEOUT_EN_LEN) - 1) << GLB_BMX_TIMEOUT_EN_POS)\n#define GLB_BMX_TIMEOUT_EN_UMSK      (~(((1U << GLB_BMX_TIMEOUT_EN_LEN) - 1) << GLB_BMX_TIMEOUT_EN_POS))\n#define GLB_BMX_ARB_MODE             GLB_BMX_ARB_MODE\n#define GLB_BMX_ARB_MODE_POS         (4U)\n#define GLB_BMX_ARB_MODE_LEN         (2U)\n#define GLB_BMX_ARB_MODE_MSK         (((1U << GLB_BMX_ARB_MODE_LEN) - 1) << GLB_BMX_ARB_MODE_POS)\n#define GLB_BMX_ARB_MODE_UMSK        (~(((1U << GLB_BMX_ARB_MODE_LEN) - 1) << GLB_BMX_ARB_MODE_POS))\n#define GLB_BMX_ERR_EN               GLB_BMX_ERR_EN\n#define GLB_BMX_ERR_EN_POS           (8U)\n#define GLB_BMX_ERR_EN_LEN           (1U)\n#define GLB_BMX_ERR_EN_MSK           (((1U << GLB_BMX_ERR_EN_LEN) - 1) << GLB_BMX_ERR_EN_POS)\n#define GLB_BMX_ERR_EN_UMSK          (~(((1U << GLB_BMX_ERR_EN_LEN) - 1) << GLB_BMX_ERR_EN_POS))\n#define GLB_BMX_BUSY_OPTION_DIS      GLB_BMX_BUSY_OPTION_DIS\n#define GLB_BMX_BUSY_OPTION_DIS_POS  (9U)\n#define GLB_BMX_BUSY_OPTION_DIS_LEN  (1U)\n#define GLB_BMX_BUSY_OPTION_DIS_MSK  (((1U << GLB_BMX_BUSY_OPTION_DIS_LEN) - 1) << GLB_BMX_BUSY_OPTION_DIS_POS)\n#define GLB_BMX_BUSY_OPTION_DIS_UMSK (~(((1U << GLB_BMX_BUSY_OPTION_DIS_LEN) - 1) << GLB_BMX_BUSY_OPTION_DIS_POS))\n#define GLB_BMX_GATING_DIS           GLB_BMX_GATING_DIS\n#define GLB_BMX_GATING_DIS_POS       (10U)\n#define GLB_BMX_GATING_DIS_LEN       (1U)\n#define GLB_BMX_GATING_DIS_MSK       (((1U << GLB_BMX_GATING_DIS_LEN) - 1) << GLB_BMX_GATING_DIS_POS)\n#define GLB_BMX_GATING_DIS_UMSK      (~(((1U << GLB_BMX_GATING_DIS_LEN) - 1) << GLB_BMX_GATING_DIS_POS))\n#define GLB_HSEL_OPTION              GLB_HSEL_OPTION\n#define GLB_HSEL_OPTION_POS          (12U)\n#define GLB_HSEL_OPTION_LEN          (4U)\n#define GLB_HSEL_OPTION_MSK          (((1U << GLB_HSEL_OPTION_LEN) - 1) << GLB_HSEL_OPTION_POS)\n#define GLB_HSEL_OPTION_UMSK         (~(((1U << GLB_HSEL_OPTION_LEN) - 1) << GLB_HSEL_OPTION_POS))\n#define GLB_PDS_APB_CFG              GLB_PDS_APB_CFG\n#define GLB_PDS_APB_CFG_POS          (16U)\n#define GLB_PDS_APB_CFG_LEN          (8U)\n#define GLB_PDS_APB_CFG_MSK          (((1U << GLB_PDS_APB_CFG_LEN) - 1) << GLB_PDS_APB_CFG_POS)\n#define GLB_PDS_APB_CFG_UMSK         (~(((1U << GLB_PDS_APB_CFG_LEN) - 1) << GLB_PDS_APB_CFG_POS))\n#define GLB_HBN_APB_CFG              GLB_HBN_APB_CFG\n#define GLB_HBN_APB_CFG_POS          (24U)\n#define GLB_HBN_APB_CFG_LEN          (8U)\n#define GLB_HBN_APB_CFG_MSK          (((1U << GLB_HBN_APB_CFG_LEN) - 1) << GLB_HBN_APB_CFG_POS)\n#define GLB_HBN_APB_CFG_UMSK         (~(((1U << GLB_HBN_APB_CFG_LEN) - 1) << GLB_HBN_APB_CFG_POS))\n\n/* 0x54 : bmx_cfg2 */\n#define GLB_BMX_CFG2_OFFSET       (0x54)\n#define GLB_BMX_ERR_ADDR_DIS      GLB_BMX_ERR_ADDR_DIS\n#define GLB_BMX_ERR_ADDR_DIS_POS  (0U)\n#define GLB_BMX_ERR_ADDR_DIS_LEN  (1U)\n#define GLB_BMX_ERR_ADDR_DIS_MSK  (((1U << GLB_BMX_ERR_ADDR_DIS_LEN) - 1) << GLB_BMX_ERR_ADDR_DIS_POS)\n#define GLB_BMX_ERR_ADDR_DIS_UMSK (~(((1U << GLB_BMX_ERR_ADDR_DIS_LEN) - 1) << GLB_BMX_ERR_ADDR_DIS_POS))\n#define GLB_BMX_ERR_DEC           GLB_BMX_ERR_DEC\n#define GLB_BMX_ERR_DEC_POS       (4U)\n#define GLB_BMX_ERR_DEC_LEN       (1U)\n#define GLB_BMX_ERR_DEC_MSK       (((1U << GLB_BMX_ERR_DEC_LEN) - 1) << GLB_BMX_ERR_DEC_POS)\n#define GLB_BMX_ERR_DEC_UMSK      (~(((1U << GLB_BMX_ERR_DEC_LEN) - 1) << GLB_BMX_ERR_DEC_POS))\n#define GLB_BMX_ERR_TZ            GLB_BMX_ERR_TZ\n#define GLB_BMX_ERR_TZ_POS        (5U)\n#define GLB_BMX_ERR_TZ_LEN        (1U)\n#define GLB_BMX_ERR_TZ_MSK        (((1U << GLB_BMX_ERR_TZ_LEN) - 1) << GLB_BMX_ERR_TZ_POS)\n#define GLB_BMX_ERR_TZ_UMSK       (~(((1U << GLB_BMX_ERR_TZ_LEN) - 1) << GLB_BMX_ERR_TZ_POS))\n#define GLB_REG_W_THRE_BMX        GLB_REG_W_THRE_BMX\n#define GLB_REG_W_THRE_BMX_POS    (8U)\n#define GLB_REG_W_THRE_BMX_LEN    (2U)\n#define GLB_REG_W_THRE_BMX_MSK    (((1U << GLB_REG_W_THRE_BMX_LEN) - 1) << GLB_REG_W_THRE_BMX_POS)\n#define GLB_REG_W_THRE_BMX_UMSK   (~(((1U << GLB_REG_W_THRE_BMX_LEN) - 1) << GLB_REG_W_THRE_BMX_POS))\n#define GLB_REG_W_THRE_L1C        GLB_REG_W_THRE_L1C\n#define GLB_REG_W_THRE_L1C_POS    (10U)\n#define GLB_REG_W_THRE_L1C_LEN    (2U)\n#define GLB_REG_W_THRE_L1C_MSK    (((1U << GLB_REG_W_THRE_L1C_LEN) - 1) << GLB_REG_W_THRE_L1C_POS)\n#define GLB_REG_W_THRE_L1C_UMSK   (~(((1U << GLB_REG_W_THRE_L1C_LEN) - 1) << GLB_REG_W_THRE_L1C_POS))\n#define GLB_BMX_DBG_SEL           GLB_BMX_DBG_SEL\n#define GLB_BMX_DBG_SEL_POS       (28U)\n#define GLB_BMX_DBG_SEL_LEN       (4U)\n#define GLB_BMX_DBG_SEL_MSK       (((1U << GLB_BMX_DBG_SEL_LEN) - 1) << GLB_BMX_DBG_SEL_POS)\n#define GLB_BMX_DBG_SEL_UMSK      (~(((1U << GLB_BMX_DBG_SEL_LEN) - 1) << GLB_BMX_DBG_SEL_POS))\n\n/* 0x58 : bmx_err_addr */\n#define GLB_BMX_ERR_ADDR_OFFSET (0x58)\n#define GLB_BMX_ERR_ADDR        GLB_BMX_ERR_ADDR\n#define GLB_BMX_ERR_ADDR_POS    (0U)\n#define GLB_BMX_ERR_ADDR_LEN    (32U)\n#define GLB_BMX_ERR_ADDR_MSK    (((1U << GLB_BMX_ERR_ADDR_LEN) - 1) << GLB_BMX_ERR_ADDR_POS)\n#define GLB_BMX_ERR_ADDR_UMSK   (~(((1U << GLB_BMX_ERR_ADDR_LEN) - 1) << GLB_BMX_ERR_ADDR_POS))\n\n/* 0x5C : bmx_dbg_out */\n#define GLB_BMX_DBG_OUT_OFFSET (0x5C)\n#define GLB_BMX_DBG_OUT        GLB_BMX_DBG_OUT\n#define GLB_BMX_DBG_OUT_POS    (0U)\n#define GLB_BMX_DBG_OUT_LEN    (32U)\n#define GLB_BMX_DBG_OUT_MSK    (((1U << GLB_BMX_DBG_OUT_LEN) - 1) << GLB_BMX_DBG_OUT_POS)\n#define GLB_BMX_DBG_OUT_UMSK   (~(((1U << GLB_BMX_DBG_OUT_LEN) - 1) << GLB_BMX_DBG_OUT_POS))\n\n/* 0x60 : rsv0 */\n#define GLB_RSV0_OFFSET (0x60)\n\n/* 0x64 : rsv1 */\n#define GLB_RSV1_OFFSET (0x64)\n\n/* 0x68 : rsv2 */\n#define GLB_RSV2_OFFSET (0x68)\n\n/* 0x6C : rsv3 */\n#define GLB_RSV3_OFFSET (0x6C)\n\n/* 0x70 : sram_ret */\n#define GLB_SRAM_RET_OFFSET   (0x70)\n#define GLB_REG_SRAM_RET      GLB_REG_SRAM_RET\n#define GLB_REG_SRAM_RET_POS  (0U)\n#define GLB_REG_SRAM_RET_LEN  (32U)\n#define GLB_REG_SRAM_RET_MSK  (((1U << GLB_REG_SRAM_RET_LEN) - 1) << GLB_REG_SRAM_RET_POS)\n#define GLB_REG_SRAM_RET_UMSK (~(((1U << GLB_REG_SRAM_RET_LEN) - 1) << GLB_REG_SRAM_RET_POS))\n\n/* 0x74 : sram_slp */\n#define GLB_SRAM_SLP_OFFSET   (0x74)\n#define GLB_REG_SRAM_SLP      GLB_REG_SRAM_SLP\n#define GLB_REG_SRAM_SLP_POS  (0U)\n#define GLB_REG_SRAM_SLP_LEN  (32U)\n#define GLB_REG_SRAM_SLP_MSK  (((1U << GLB_REG_SRAM_SLP_LEN) - 1) << GLB_REG_SRAM_SLP_POS)\n#define GLB_REG_SRAM_SLP_UMSK (~(((1U << GLB_REG_SRAM_SLP_LEN) - 1) << GLB_REG_SRAM_SLP_POS))\n\n/* 0x78 : sram_parm */\n#define GLB_SRAM_PARM_OFFSET   (0x78)\n#define GLB_REG_SRAM_PARM      GLB_REG_SRAM_PARM\n#define GLB_REG_SRAM_PARM_POS  (0U)\n#define GLB_REG_SRAM_PARM_LEN  (32U)\n#define GLB_REG_SRAM_PARM_MSK  (((1U << GLB_REG_SRAM_PARM_LEN) - 1) << GLB_REG_SRAM_PARM_POS)\n#define GLB_REG_SRAM_PARM_UMSK (~(((1U << GLB_REG_SRAM_PARM_LEN) - 1) << GLB_REG_SRAM_PARM_POS))\n\n/* 0x7C : seam_misc */\n#define GLB_SEAM_MISC_OFFSET (0x7C)\n#define GLB_EM_SEL           GLB_EM_SEL\n#define GLB_EM_SEL_POS       (0U)\n#define GLB_EM_SEL_LEN       (4U)\n#define GLB_EM_SEL_MSK       (((1U << GLB_EM_SEL_LEN) - 1) << GLB_EM_SEL_POS)\n#define GLB_EM_SEL_UMSK      (~(((1U << GLB_EM_SEL_LEN) - 1) << GLB_EM_SEL_POS))\n\n/* 0x80 : glb_parm */\n#define GLB_PARM_OFFSET                   (0x80)\n#define GLB_JTAG_SWAP_SET                 GLB_JTAG_SWAP_SET\n#define GLB_JTAG_SWAP_SET_POS             (0U)\n#define GLB_JTAG_SWAP_SET_LEN             (8U)\n#define GLB_JTAG_SWAP_SET_MSK             (((1U << GLB_JTAG_SWAP_SET_LEN) - 1) << GLB_JTAG_SWAP_SET_POS)\n#define GLB_JTAG_SWAP_SET_UMSK            (~(((1U << GLB_JTAG_SWAP_SET_LEN) - 1) << GLB_JTAG_SWAP_SET_POS))\n#define GLB_CFG_SFLASH2_SWAP_IO0_IO3      GLB_CFG_SFLASH2_SWAP_IO0_IO3\n#define GLB_CFG_SFLASH2_SWAP_IO0_IO3_POS  (8U)\n#define GLB_CFG_SFLASH2_SWAP_IO0_IO3_LEN  (1U)\n#define GLB_CFG_SFLASH2_SWAP_IO0_IO3_MSK  (((1U << GLB_CFG_SFLASH2_SWAP_IO0_IO3_LEN) - 1) << GLB_CFG_SFLASH2_SWAP_IO0_IO3_POS)\n#define GLB_CFG_SFLASH2_SWAP_IO0_IO3_UMSK (~(((1U << GLB_CFG_SFLASH2_SWAP_IO0_IO3_LEN) - 1) << GLB_CFG_SFLASH2_SWAP_IO0_IO3_POS))\n#define GLB_CFG_SFLASH2_SWAP_CS_IO2       GLB_CFG_SFLASH2_SWAP_CS_IO2\n#define GLB_CFG_SFLASH2_SWAP_CS_IO2_POS   (9U)\n#define GLB_CFG_SFLASH2_SWAP_CS_IO2_LEN   (1U)\n#define GLB_CFG_SFLASH2_SWAP_CS_IO2_MSK   (((1U << GLB_CFG_SFLASH2_SWAP_CS_IO2_LEN) - 1) << GLB_CFG_SFLASH2_SWAP_CS_IO2_POS)\n#define GLB_CFG_SFLASH2_SWAP_CS_IO2_UMSK  (~(((1U << GLB_CFG_SFLASH2_SWAP_CS_IO2_LEN) - 1) << GLB_CFG_SFLASH2_SWAP_CS_IO2_POS))\n#define GLB_CFG_FLASH_SCENARIO            GLB_CFG_FLASH_SCENARIO\n#define GLB_CFG_FLASH_SCENARIO_POS        (10U)\n#define GLB_CFG_FLASH_SCENARIO_LEN        (2U)\n#define GLB_CFG_FLASH_SCENARIO_MSK        (((1U << GLB_CFG_FLASH_SCENARIO_LEN) - 1) << GLB_CFG_FLASH_SCENARIO_POS)\n#define GLB_CFG_FLASH_SCENARIO_UMSK       (~(((1U << GLB_CFG_FLASH_SCENARIO_LEN) - 1) << GLB_CFG_FLASH_SCENARIO_POS))\n#define GLB_REG_SPI_0_MASTER_MODE         GLB_REG_SPI_0_MASTER_MODE\n#define GLB_REG_SPI_0_MASTER_MODE_POS     (12U)\n#define GLB_REG_SPI_0_MASTER_MODE_LEN     (1U)\n#define GLB_REG_SPI_0_MASTER_MODE_MSK     (((1U << GLB_REG_SPI_0_MASTER_MODE_LEN) - 1) << GLB_REG_SPI_0_MASTER_MODE_POS)\n#define GLB_REG_SPI_0_MASTER_MODE_UMSK    (~(((1U << GLB_REG_SPI_0_MASTER_MODE_LEN) - 1) << GLB_REG_SPI_0_MASTER_MODE_POS))\n#define GLB_REG_SPI_0_SWAP                GLB_REG_SPI_0_SWAP\n#define GLB_REG_SPI_0_SWAP_POS            (13U)\n#define GLB_REG_SPI_0_SWAP_LEN            (1U)\n#define GLB_REG_SPI_0_SWAP_MSK            (((1U << GLB_REG_SPI_0_SWAP_LEN) - 1) << GLB_REG_SPI_0_SWAP_POS)\n#define GLB_REG_SPI_0_SWAP_UMSK           (~(((1U << GLB_REG_SPI_0_SWAP_LEN) - 1) << GLB_REG_SPI_0_SWAP_POS))\n#define GLB_REG_CCI_USE_JTAG_PIN          GLB_REG_CCI_USE_JTAG_PIN\n#define GLB_REG_CCI_USE_JTAG_PIN_POS      (16U)\n#define GLB_REG_CCI_USE_JTAG_PIN_LEN      (1U)\n#define GLB_REG_CCI_USE_JTAG_PIN_MSK      (((1U << GLB_REG_CCI_USE_JTAG_PIN_LEN) - 1) << GLB_REG_CCI_USE_JTAG_PIN_POS)\n#define GLB_REG_CCI_USE_JTAG_PIN_UMSK     (~(((1U << GLB_REG_CCI_USE_JTAG_PIN_LEN) - 1) << GLB_REG_CCI_USE_JTAG_PIN_POS))\n#define GLB_P1_ADC_TEST_WITH_CCI          GLB_P1_ADC_TEST_WITH_CCI\n#define GLB_P1_ADC_TEST_WITH_CCI_POS      (17U)\n#define GLB_P1_ADC_TEST_WITH_CCI_LEN      (1U)\n#define GLB_P1_ADC_TEST_WITH_CCI_MSK      (((1U << GLB_P1_ADC_TEST_WITH_CCI_LEN) - 1) << GLB_P1_ADC_TEST_WITH_CCI_POS)\n#define GLB_P1_ADC_TEST_WITH_CCI_UMSK     (~(((1U << GLB_P1_ADC_TEST_WITH_CCI_LEN) - 1) << GLB_P1_ADC_TEST_WITH_CCI_POS))\n#define GLB_P2_DAC_TEST_WITH_CCI          GLB_P2_DAC_TEST_WITH_CCI\n#define GLB_P2_DAC_TEST_WITH_CCI_POS      (18U)\n#define GLB_P2_DAC_TEST_WITH_CCI_LEN      (1U)\n#define GLB_P2_DAC_TEST_WITH_CCI_MSK      (((1U << GLB_P2_DAC_TEST_WITH_CCI_LEN) - 1) << GLB_P2_DAC_TEST_WITH_CCI_POS)\n#define GLB_P2_DAC_TEST_WITH_CCI_UMSK     (~(((1U << GLB_P2_DAC_TEST_WITH_CCI_LEN) - 1) << GLB_P2_DAC_TEST_WITH_CCI_POS))\n#define GLB_P3_CCI_USE_IO_0_2_7           GLB_P3_CCI_USE_IO_0_2_7\n#define GLB_P3_CCI_USE_IO_0_2_7_POS       (19U)\n#define GLB_P3_CCI_USE_IO_0_2_7_LEN       (1U)\n#define GLB_P3_CCI_USE_IO_0_2_7_MSK       (((1U << GLB_P3_CCI_USE_IO_0_2_7_LEN) - 1) << GLB_P3_CCI_USE_IO_0_2_7_POS)\n#define GLB_P3_CCI_USE_IO_0_2_7_UMSK      (~(((1U << GLB_P3_CCI_USE_IO_0_2_7_LEN) - 1) << GLB_P3_CCI_USE_IO_0_2_7_POS))\n#define GLB_P4_ADC_TEST_WITH_JTAG         GLB_P4_ADC_TEST_WITH_JTAG\n#define GLB_P4_ADC_TEST_WITH_JTAG_POS     (20U)\n#define GLB_P4_ADC_TEST_WITH_JTAG_LEN     (1U)\n#define GLB_P4_ADC_TEST_WITH_JTAG_MSK     (((1U << GLB_P4_ADC_TEST_WITH_JTAG_LEN) - 1) << GLB_P4_ADC_TEST_WITH_JTAG_POS)\n#define GLB_P4_ADC_TEST_WITH_JTAG_UMSK    (~(((1U << GLB_P4_ADC_TEST_WITH_JTAG_LEN) - 1) << GLB_P4_ADC_TEST_WITH_JTAG_POS))\n#define GLB_P5_DAC_TEST_WITH_JTAG         GLB_P5_DAC_TEST_WITH_JTAG\n#define GLB_P5_DAC_TEST_WITH_JTAG_POS     (21U)\n#define GLB_P5_DAC_TEST_WITH_JTAG_LEN     (1U)\n#define GLB_P5_DAC_TEST_WITH_JTAG_MSK     (((1U << GLB_P5_DAC_TEST_WITH_JTAG_LEN) - 1) << GLB_P5_DAC_TEST_WITH_JTAG_POS)\n#define GLB_P5_DAC_TEST_WITH_JTAG_UMSK    (~(((1U << GLB_P5_DAC_TEST_WITH_JTAG_LEN) - 1) << GLB_P5_DAC_TEST_WITH_JTAG_POS))\n#define GLB_P6_JTAG_USE_IO_0_2_7          GLB_P6_JTAG_USE_IO_0_2_7\n#define GLB_P6_JTAG_USE_IO_0_2_7_POS      (23U)\n#define GLB_P6_JTAG_USE_IO_0_2_7_LEN      (1U)\n#define GLB_P6_JTAG_USE_IO_0_2_7_MSK      (((1U << GLB_P6_JTAG_USE_IO_0_2_7_LEN) - 1) << GLB_P6_JTAG_USE_IO_0_2_7_POS)\n#define GLB_P6_JTAG_USE_IO_0_2_7_UMSK     (~(((1U << GLB_P6_JTAG_USE_IO_0_2_7_LEN) - 1) << GLB_P6_JTAG_USE_IO_0_2_7_POS))\n#define GLB_UART_SWAP_SET                 GLB_UART_SWAP_SET\n#define GLB_UART_SWAP_SET_POS             (24U)\n#define GLB_UART_SWAP_SET_LEN             (4U)\n#define GLB_UART_SWAP_SET_MSK             (((1U << GLB_UART_SWAP_SET_LEN) - 1) << GLB_UART_SWAP_SET_POS)\n#define GLB_UART_SWAP_SET_UMSK            (~(((1U << GLB_UART_SWAP_SET_LEN) - 1) << GLB_UART_SWAP_SET_POS))\n#define GLB_REG_KYS_DRV_VAL               GLB_REG_KYS_DRV_VAL\n#define GLB_REG_KYS_DRV_VAL_POS           (29U)\n#define GLB_REG_KYS_DRV_VAL_LEN           (1U)\n#define GLB_REG_KYS_DRV_VAL_MSK           (((1U << GLB_REG_KYS_DRV_VAL_LEN) - 1) << GLB_REG_KYS_DRV_VAL_POS)\n#define GLB_REG_KYS_DRV_VAL_UMSK          (~(((1U << GLB_REG_KYS_DRV_VAL_LEN) - 1) << GLB_REG_KYS_DRV_VAL_POS))\n#define GLB_REG_EXT_RST_SMT               GLB_REG_EXT_RST_SMT\n#define GLB_REG_EXT_RST_SMT_POS           (30U)\n#define GLB_REG_EXT_RST_SMT_LEN           (1U)\n#define GLB_REG_EXT_RST_SMT_MSK           (((1U << GLB_REG_EXT_RST_SMT_LEN) - 1) << GLB_REG_EXT_RST_SMT_POS)\n#define GLB_REG_EXT_RST_SMT_UMSK          (~(((1U << GLB_REG_EXT_RST_SMT_LEN) - 1) << GLB_REG_EXT_RST_SMT_POS))\n#define GLB_PIN_SEL_EMAC_CAM              GLB_PIN_SEL_EMAC_CAM\n#define GLB_PIN_SEL_EMAC_CAM_POS          (31U)\n#define GLB_PIN_SEL_EMAC_CAM_LEN          (1U)\n#define GLB_PIN_SEL_EMAC_CAM_MSK          (((1U << GLB_PIN_SEL_EMAC_CAM_LEN) - 1) << GLB_PIN_SEL_EMAC_CAM_POS)\n#define GLB_PIN_SEL_EMAC_CAM_UMSK         (~(((1U << GLB_PIN_SEL_EMAC_CAM_LEN) - 1) << GLB_PIN_SEL_EMAC_CAM_POS))\n\n/* 0x84 : PDM_CLK_CTRL */\n#define GLB_PDM_CLK_CTRL_OFFSET   (0x84)\n#define GLB_REG_PDM0_CLK_DIV      GLB_REG_PDM0_CLK_DIV\n#define GLB_REG_PDM0_CLK_DIV_POS  (0U)\n#define GLB_REG_PDM0_CLK_DIV_LEN  (6U)\n#define GLB_REG_PDM0_CLK_DIV_MSK  (((1U << GLB_REG_PDM0_CLK_DIV_LEN) - 1) << GLB_REG_PDM0_CLK_DIV_POS)\n#define GLB_REG_PDM0_CLK_DIV_UMSK (~(((1U << GLB_REG_PDM0_CLK_DIV_LEN) - 1) << GLB_REG_PDM0_CLK_DIV_POS))\n#define GLB_REG_PDM0_CLK_EN       GLB_REG_PDM0_CLK_EN\n#define GLB_REG_PDM0_CLK_EN_POS   (7U)\n#define GLB_REG_PDM0_CLK_EN_LEN   (1U)\n#define GLB_REG_PDM0_CLK_EN_MSK   (((1U << GLB_REG_PDM0_CLK_EN_LEN) - 1) << GLB_REG_PDM0_CLK_EN_POS)\n#define GLB_REG_PDM0_CLK_EN_UMSK  (~(((1U << GLB_REG_PDM0_CLK_EN_LEN) - 1) << GLB_REG_PDM0_CLK_EN_POS))\n\n/* 0x88 : GPIO_USE_PSRAM__IO */\n#define GLB_GPIO_USE_PSRAM__IO_OFFSET  (0x88)\n#define GLB_CFG_GPIO_USE_PSRAM_IO      GLB_CFG_GPIO_USE_PSRAM_IO\n#define GLB_CFG_GPIO_USE_PSRAM_IO_POS  (0U)\n#define GLB_CFG_GPIO_USE_PSRAM_IO_LEN  (6U)\n#define GLB_CFG_GPIO_USE_PSRAM_IO_MSK  (((1U << GLB_CFG_GPIO_USE_PSRAM_IO_LEN) - 1) << GLB_CFG_GPIO_USE_PSRAM_IO_POS)\n#define GLB_CFG_GPIO_USE_PSRAM_IO_UMSK (~(((1U << GLB_CFG_GPIO_USE_PSRAM_IO_LEN) - 1) << GLB_CFG_GPIO_USE_PSRAM_IO_POS))\n\n/* 0x90 : CPU_CLK_CFG */\n#define GLB_CPU_CLK_CFG_OFFSET      (0x90)\n#define GLB_CPU_RTC_DIV             GLB_CPU_RTC_DIV\n#define GLB_CPU_RTC_DIV_POS         (0U)\n#define GLB_CPU_RTC_DIV_LEN         (17U)\n#define GLB_CPU_RTC_DIV_MSK         (((1U << GLB_CPU_RTC_DIV_LEN) - 1) << GLB_CPU_RTC_DIV_POS)\n#define GLB_CPU_RTC_DIV_UMSK        (~(((1U << GLB_CPU_RTC_DIV_LEN) - 1) << GLB_CPU_RTC_DIV_POS))\n#define GLB_CPU_RTC_EN              GLB_CPU_RTC_EN\n#define GLB_CPU_RTC_EN_POS          (18U)\n#define GLB_CPU_RTC_EN_LEN          (1U)\n#define GLB_CPU_RTC_EN_MSK          (((1U << GLB_CPU_RTC_EN_LEN) - 1) << GLB_CPU_RTC_EN_POS)\n#define GLB_CPU_RTC_EN_UMSK         (~(((1U << GLB_CPU_RTC_EN_LEN) - 1) << GLB_CPU_RTC_EN_POS))\n#define GLB_CPU_RTC_SEL             GLB_CPU_RTC_SEL\n#define GLB_CPU_RTC_SEL_POS         (19U)\n#define GLB_CPU_RTC_SEL_LEN         (1U)\n#define GLB_CPU_RTC_SEL_MSK         (((1U << GLB_CPU_RTC_SEL_LEN) - 1) << GLB_CPU_RTC_SEL_POS)\n#define GLB_CPU_RTC_SEL_UMSK        (~(((1U << GLB_CPU_RTC_SEL_LEN) - 1) << GLB_CPU_RTC_SEL_POS))\n#define GLB_DEBUG_NDRESET_GATE      GLB_DEBUG_NDRESET_GATE\n#define GLB_DEBUG_NDRESET_GATE_POS  (20U)\n#define GLB_DEBUG_NDRESET_GATE_LEN  (1U)\n#define GLB_DEBUG_NDRESET_GATE_MSK  (((1U << GLB_DEBUG_NDRESET_GATE_LEN) - 1) << GLB_DEBUG_NDRESET_GATE_POS)\n#define GLB_DEBUG_NDRESET_GATE_UMSK (~(((1U << GLB_DEBUG_NDRESET_GATE_LEN) - 1) << GLB_DEBUG_NDRESET_GATE_POS))\n\n/* 0xA4 : GPADC_32M_SRC_CTRL */\n#define GLB_GPADC_32M_SRC_CTRL_OFFSET (0xA4)\n#define GLB_GPADC_32M_CLK_DIV         GLB_GPADC_32M_CLK_DIV\n#define GLB_GPADC_32M_CLK_DIV_POS     (0U)\n#define GLB_GPADC_32M_CLK_DIV_LEN     (6U)\n#define GLB_GPADC_32M_CLK_DIV_MSK     (((1U << GLB_GPADC_32M_CLK_DIV_LEN) - 1) << GLB_GPADC_32M_CLK_DIV_POS)\n#define GLB_GPADC_32M_CLK_DIV_UMSK    (~(((1U << GLB_GPADC_32M_CLK_DIV_LEN) - 1) << GLB_GPADC_32M_CLK_DIV_POS))\n#define GLB_GPADC_32M_CLK_SEL         GLB_GPADC_32M_CLK_SEL\n#define GLB_GPADC_32M_CLK_SEL_POS     (7U)\n#define GLB_GPADC_32M_CLK_SEL_LEN     (1U)\n#define GLB_GPADC_32M_CLK_SEL_MSK     (((1U << GLB_GPADC_32M_CLK_SEL_LEN) - 1) << GLB_GPADC_32M_CLK_SEL_POS)\n#define GLB_GPADC_32M_CLK_SEL_UMSK    (~(((1U << GLB_GPADC_32M_CLK_SEL_LEN) - 1) << GLB_GPADC_32M_CLK_SEL_POS))\n#define GLB_GPADC_32M_DIV_EN          GLB_GPADC_32M_DIV_EN\n#define GLB_GPADC_32M_DIV_EN_POS      (8U)\n#define GLB_GPADC_32M_DIV_EN_LEN      (1U)\n#define GLB_GPADC_32M_DIV_EN_MSK      (((1U << GLB_GPADC_32M_DIV_EN_LEN) - 1) << GLB_GPADC_32M_DIV_EN_POS)\n#define GLB_GPADC_32M_DIV_EN_UMSK     (~(((1U << GLB_GPADC_32M_DIV_EN_LEN) - 1) << GLB_GPADC_32M_DIV_EN_POS))\n\n/* 0xA8 : DIG32K_WAKEUP_CTRL */\n#define GLB_DIG32K_WAKEUP_CTRL_OFFSET   (0xA8)\n#define GLB_DIG_32K_DIV                 GLB_DIG_32K_DIV\n#define GLB_DIG_32K_DIV_POS             (0U)\n#define GLB_DIG_32K_DIV_LEN             (11U)\n#define GLB_DIG_32K_DIV_MSK             (((1U << GLB_DIG_32K_DIV_LEN) - 1) << GLB_DIG_32K_DIV_POS)\n#define GLB_DIG_32K_DIV_UMSK            (~(((1U << GLB_DIG_32K_DIV_LEN) - 1) << GLB_DIG_32K_DIV_POS))\n#define GLB_DIG_32K_EN                  GLB_DIG_32K_EN\n#define GLB_DIG_32K_EN_POS              (12U)\n#define GLB_DIG_32K_EN_LEN              (1U)\n#define GLB_DIG_32K_EN_MSK              (((1U << GLB_DIG_32K_EN_LEN) - 1) << GLB_DIG_32K_EN_POS)\n#define GLB_DIG_32K_EN_UMSK             (~(((1U << GLB_DIG_32K_EN_LEN) - 1) << GLB_DIG_32K_EN_POS))\n#define GLB_DIG_32K_COMP                GLB_DIG_32K_COMP\n#define GLB_DIG_32K_COMP_POS            (13U)\n#define GLB_DIG_32K_COMP_LEN            (1U)\n#define GLB_DIG_32K_COMP_MSK            (((1U << GLB_DIG_32K_COMP_LEN) - 1) << GLB_DIG_32K_COMP_POS)\n#define GLB_DIG_32K_COMP_UMSK           (~(((1U << GLB_DIG_32K_COMP_LEN) - 1) << GLB_DIG_32K_COMP_POS))\n#define GLB_DIG_512K_DIV                GLB_DIG_512K_DIV\n#define GLB_DIG_512K_DIV_POS            (16U)\n#define GLB_DIG_512K_DIV_LEN            (7U)\n#define GLB_DIG_512K_DIV_MSK            (((1U << GLB_DIG_512K_DIV_LEN) - 1) << GLB_DIG_512K_DIV_POS)\n#define GLB_DIG_512K_DIV_UMSK           (~(((1U << GLB_DIG_512K_DIV_LEN) - 1) << GLB_DIG_512K_DIV_POS))\n#define GLB_DIG_512K_EN                 GLB_DIG_512K_EN\n#define GLB_DIG_512K_EN_POS             (24U)\n#define GLB_DIG_512K_EN_LEN             (1U)\n#define GLB_DIG_512K_EN_MSK             (((1U << GLB_DIG_512K_EN_LEN) - 1) << GLB_DIG_512K_EN_POS)\n#define GLB_DIG_512K_EN_UMSK            (~(((1U << GLB_DIG_512K_EN_LEN) - 1) << GLB_DIG_512K_EN_POS))\n#define GLB_DIG_512K_COMP               GLB_DIG_512K_COMP\n#define GLB_DIG_512K_COMP_POS           (25U)\n#define GLB_DIG_512K_COMP_LEN           (1U)\n#define GLB_DIG_512K_COMP_MSK           (((1U << GLB_DIG_512K_COMP_LEN) - 1) << GLB_DIG_512K_COMP_POS)\n#define GLB_DIG_512K_COMP_UMSK          (~(((1U << GLB_DIG_512K_COMP_LEN) - 1) << GLB_DIG_512K_COMP_POS))\n#define GLB_DIG_CLK_SRC_SEL             GLB_DIG_CLK_SRC_SEL\n#define GLB_DIG_CLK_SRC_SEL_POS         (28U)\n#define GLB_DIG_CLK_SRC_SEL_LEN         (2U)\n#define GLB_DIG_CLK_SRC_SEL_MSK         (((1U << GLB_DIG_CLK_SRC_SEL_LEN) - 1) << GLB_DIG_CLK_SRC_SEL_POS)\n#define GLB_DIG_CLK_SRC_SEL_UMSK        (~(((1U << GLB_DIG_CLK_SRC_SEL_LEN) - 1) << GLB_DIG_CLK_SRC_SEL_POS))\n#define GLB_REG_EN_PLATFORM_WAKEUP      GLB_REG_EN_PLATFORM_WAKEUP\n#define GLB_REG_EN_PLATFORM_WAKEUP_POS  (31U)\n#define GLB_REG_EN_PLATFORM_WAKEUP_LEN  (1U)\n#define GLB_REG_EN_PLATFORM_WAKEUP_MSK  (((1U << GLB_REG_EN_PLATFORM_WAKEUP_LEN) - 1) << GLB_REG_EN_PLATFORM_WAKEUP_POS)\n#define GLB_REG_EN_PLATFORM_WAKEUP_UMSK (~(((1U << GLB_REG_EN_PLATFORM_WAKEUP_LEN) - 1) << GLB_REG_EN_PLATFORM_WAKEUP_POS))\n\n/* 0xAC : WIFI_BT_COEX_CTRL */\n#define GLB_WIFI_BT_COEX_CTRL_OFFSET (0xAC)\n#define GLB_COEX_BT_CHANNEL          GLB_COEX_BT_CHANNEL\n#define GLB_COEX_BT_CHANNEL_POS      (0U)\n#define GLB_COEX_BT_CHANNEL_LEN      (7U)\n#define GLB_COEX_BT_CHANNEL_MSK      (((1U << GLB_COEX_BT_CHANNEL_LEN) - 1) << GLB_COEX_BT_CHANNEL_POS)\n#define GLB_COEX_BT_CHANNEL_UMSK     (~(((1U << GLB_COEX_BT_CHANNEL_LEN) - 1) << GLB_COEX_BT_CHANNEL_POS))\n#define GLB_COEX_BT_PTI              GLB_COEX_BT_PTI\n#define GLB_COEX_BT_PTI_POS          (7U)\n#define GLB_COEX_BT_PTI_LEN          (4U)\n#define GLB_COEX_BT_PTI_MSK          (((1U << GLB_COEX_BT_PTI_LEN) - 1) << GLB_COEX_BT_PTI_POS)\n#define GLB_COEX_BT_PTI_UMSK         (~(((1U << GLB_COEX_BT_PTI_LEN) - 1) << GLB_COEX_BT_PTI_POS))\n#define GLB_COEX_BT_BW               GLB_COEX_BT_BW\n#define GLB_COEX_BT_BW_POS           (11U)\n#define GLB_COEX_BT_BW_LEN           (1U)\n#define GLB_COEX_BT_BW_MSK           (((1U << GLB_COEX_BT_BW_LEN) - 1) << GLB_COEX_BT_BW_POS)\n#define GLB_COEX_BT_BW_UMSK          (~(((1U << GLB_COEX_BT_BW_LEN) - 1) << GLB_COEX_BT_BW_POS))\n#define GLB_EN_GPIO_BT_COEX          GLB_EN_GPIO_BT_COEX\n#define GLB_EN_GPIO_BT_COEX_POS      (12U)\n#define GLB_EN_GPIO_BT_COEX_LEN      (1U)\n#define GLB_EN_GPIO_BT_COEX_MSK      (((1U << GLB_EN_GPIO_BT_COEX_LEN) - 1) << GLB_EN_GPIO_BT_COEX_POS)\n#define GLB_EN_GPIO_BT_COEX_UMSK     (~(((1U << GLB_EN_GPIO_BT_COEX_LEN) - 1) << GLB_EN_GPIO_BT_COEX_POS))\n\n/* 0xB0 : BZ_COEX_CTRL */\n#define GLB_BZ_COEX_CTRL_OFFSET    (0xB0)\n#define GLB_COEX_EN                GLB_COEX_EN\n#define GLB_COEX_EN_POS            (0U)\n#define GLB_COEX_EN_LEN            (1U)\n#define GLB_COEX_EN_MSK            (((1U << GLB_COEX_EN_LEN) - 1) << GLB_COEX_EN_POS)\n#define GLB_COEX_EN_UMSK           (~(((1U << GLB_COEX_EN_LEN) - 1) << GLB_COEX_EN_POS))\n#define GLB_WLAN_EN                GLB_WLAN_EN\n#define GLB_WLAN_EN_POS            (1U)\n#define GLB_WLAN_EN_LEN            (1U)\n#define GLB_WLAN_EN_MSK            (((1U << GLB_WLAN_EN_LEN) - 1) << GLB_WLAN_EN_POS)\n#define GLB_WLAN_EN_UMSK           (~(((1U << GLB_WLAN_EN_LEN) - 1) << GLB_WLAN_EN_POS))\n#define GLB_BLE_RX_IGNORE          GLB_BLE_RX_IGNORE\n#define GLB_BLE_RX_IGNORE_POS      (2U)\n#define GLB_BLE_RX_IGNORE_LEN      (1U)\n#define GLB_BLE_RX_IGNORE_MSK      (((1U << GLB_BLE_RX_IGNORE_LEN) - 1) << GLB_BLE_RX_IGNORE_POS)\n#define GLB_BLE_RX_IGNORE_UMSK     (~(((1U << GLB_BLE_RX_IGNORE_LEN) - 1) << GLB_BLE_RX_IGNORE_POS))\n#define GLB_M154_RX_IGNORE         GLB_M154_RX_IGNORE\n#define GLB_M154_RX_IGNORE_POS     (3U)\n#define GLB_M154_RX_IGNORE_LEN     (1U)\n#define GLB_M154_RX_IGNORE_MSK     (((1U << GLB_M154_RX_IGNORE_LEN) - 1) << GLB_M154_RX_IGNORE_POS)\n#define GLB_M154_RX_IGNORE_UMSK    (~(((1U << GLB_M154_RX_IGNORE_LEN) - 1) << GLB_M154_RX_IGNORE_POS))\n#define GLB_BZ_PRI_THR             GLB_BZ_PRI_THR\n#define GLB_BZ_PRI_THR_POS         (4U)\n#define GLB_BZ_PRI_THR_LEN         (4U)\n#define GLB_BZ_PRI_THR_MSK         (((1U << GLB_BZ_PRI_THR_LEN) - 1) << GLB_BZ_PRI_THR_POS)\n#define GLB_BZ_PRI_THR_UMSK        (~(((1U << GLB_BZ_PRI_THR_LEN) - 1) << GLB_BZ_PRI_THR_POS))\n#define GLB_BZ_PRI_EN              GLB_BZ_PRI_EN\n#define GLB_BZ_PRI_EN_POS          (8U)\n#define GLB_BZ_PRI_EN_LEN          (1U)\n#define GLB_BZ_PRI_EN_MSK          (((1U << GLB_BZ_PRI_EN_LEN) - 1) << GLB_BZ_PRI_EN_POS)\n#define GLB_BZ_PRI_EN_UMSK         (~(((1U << GLB_BZ_PRI_EN_LEN) - 1) << GLB_BZ_PRI_EN_POS))\n#define GLB_BZ_PRI_POL             GLB_BZ_PRI_POL\n#define GLB_BZ_PRI_POL_POS         (9U)\n#define GLB_BZ_PRI_POL_LEN         (1U)\n#define GLB_BZ_PRI_POL_MSK         (((1U << GLB_BZ_PRI_POL_LEN) - 1) << GLB_BZ_PRI_POL_POS)\n#define GLB_BZ_PRI_POL_UMSK        (~(((1U << GLB_BZ_PRI_POL_LEN) - 1) << GLB_BZ_PRI_POL_POS))\n#define GLB_BZ_ACTIVE_POL          GLB_BZ_ACTIVE_POL\n#define GLB_BZ_ACTIVE_POL_POS      (10U)\n#define GLB_BZ_ACTIVE_POL_LEN      (1U)\n#define GLB_BZ_ACTIVE_POL_MSK      (((1U << GLB_BZ_ACTIVE_POL_LEN) - 1) << GLB_BZ_ACTIVE_POL_POS)\n#define GLB_BZ_ACTIVE_POL_UMSK     (~(((1U << GLB_BZ_ACTIVE_POL_LEN) - 1) << GLB_BZ_ACTIVE_POL_POS))\n#define GLB_BZ_ABORT_POL           GLB_BZ_ABORT_POL\n#define GLB_BZ_ABORT_POL_POS       (11U)\n#define GLB_BZ_ABORT_POL_LEN       (1U)\n#define GLB_BZ_ABORT_POL_MSK       (((1U << GLB_BZ_ABORT_POL_LEN) - 1) << GLB_BZ_ABORT_POL_POS)\n#define GLB_BZ_ABORT_POL_UMSK      (~(((1U << GLB_BZ_ABORT_POL_LEN) - 1) << GLB_BZ_ABORT_POL_POS))\n#define GLB_COEX_PRI               GLB_COEX_PRI\n#define GLB_COEX_PRI_POS           (12U)\n#define GLB_COEX_PRI_LEN           (1U)\n#define GLB_COEX_PRI_MSK           (((1U << GLB_COEX_PRI_LEN) - 1) << GLB_COEX_PRI_POS)\n#define GLB_COEX_PRI_UMSK          (~(((1U << GLB_COEX_PRI_LEN) - 1) << GLB_COEX_PRI_POS))\n#define GLB_FORCE_M154_WIN         GLB_FORCE_M154_WIN\n#define GLB_FORCE_M154_WIN_POS     (13U)\n#define GLB_FORCE_M154_WIN_LEN     (1U)\n#define GLB_FORCE_M154_WIN_MSK     (((1U << GLB_FORCE_M154_WIN_LEN) - 1) << GLB_FORCE_M154_WIN_POS)\n#define GLB_FORCE_M154_WIN_UMSK    (~(((1U << GLB_FORCE_M154_WIN_LEN) - 1) << GLB_FORCE_M154_WIN_POS))\n#define GLB_FORCE_BLE_WIN          GLB_FORCE_BLE_WIN\n#define GLB_FORCE_BLE_WIN_POS      (14U)\n#define GLB_FORCE_BLE_WIN_LEN      (1U)\n#define GLB_FORCE_BLE_WIN_MSK      (((1U << GLB_FORCE_BLE_WIN_LEN) - 1) << GLB_FORCE_BLE_WIN_POS)\n#define GLB_FORCE_BLE_WIN_UMSK     (~(((1U << GLB_FORCE_BLE_WIN_LEN) - 1) << GLB_FORCE_BLE_WIN_POS))\n#define GLB_COEX_OPTION            GLB_COEX_OPTION\n#define GLB_COEX_OPTION_POS        (15U)\n#define GLB_COEX_OPTION_LEN        (1U)\n#define GLB_COEX_OPTION_MSK        (((1U << GLB_COEX_OPTION_LEN) - 1) << GLB_COEX_OPTION_POS)\n#define GLB_COEX_OPTION_UMSK       (~(((1U << GLB_COEX_OPTION_LEN) - 1) << GLB_COEX_OPTION_POS))\n#define GLB_COEX_FORCE_CH          GLB_COEX_FORCE_CH\n#define GLB_COEX_FORCE_CH_POS      (16U)\n#define GLB_COEX_FORCE_CH_LEN      (7U)\n#define GLB_COEX_FORCE_CH_MSK      (((1U << GLB_COEX_FORCE_CH_LEN) - 1) << GLB_COEX_FORCE_CH_POS)\n#define GLB_COEX_FORCE_CH_UMSK     (~(((1U << GLB_COEX_FORCE_CH_LEN) - 1) << GLB_COEX_FORCE_CH_POS))\n#define GLB_M154_RX_ABORT_DIS      GLB_M154_RX_ABORT_DIS\n#define GLB_M154_RX_ABORT_DIS_POS  (24U)\n#define GLB_M154_RX_ABORT_DIS_LEN  (1U)\n#define GLB_M154_RX_ABORT_DIS_MSK  (((1U << GLB_M154_RX_ABORT_DIS_LEN) - 1) << GLB_M154_RX_ABORT_DIS_POS)\n#define GLB_M154_RX_ABORT_DIS_UMSK (~(((1U << GLB_M154_RX_ABORT_DIS_LEN) - 1) << GLB_M154_RX_ABORT_DIS_POS))\n#define GLB_M154_TX_ABORT_DIS      GLB_M154_TX_ABORT_DIS\n#define GLB_M154_TX_ABORT_DIS_POS  (25U)\n#define GLB_M154_TX_ABORT_DIS_LEN  (1U)\n#define GLB_M154_TX_ABORT_DIS_MSK  (((1U << GLB_M154_TX_ABORT_DIS_LEN) - 1) << GLB_M154_TX_ABORT_DIS_POS)\n#define GLB_M154_TX_ABORT_DIS_UMSK (~(((1U << GLB_M154_TX_ABORT_DIS_LEN) - 1) << GLB_M154_TX_ABORT_DIS_POS))\n#define GLB_BLE_RX_ABORT_DIS       GLB_BLE_RX_ABORT_DIS\n#define GLB_BLE_RX_ABORT_DIS_POS   (26U)\n#define GLB_BLE_RX_ABORT_DIS_LEN   (1U)\n#define GLB_BLE_RX_ABORT_DIS_MSK   (((1U << GLB_BLE_RX_ABORT_DIS_LEN) - 1) << GLB_BLE_RX_ABORT_DIS_POS)\n#define GLB_BLE_RX_ABORT_DIS_UMSK  (~(((1U << GLB_BLE_RX_ABORT_DIS_LEN) - 1) << GLB_BLE_RX_ABORT_DIS_POS))\n#define GLB_BLE_TX_ABORT_DIS       GLB_BLE_TX_ABORT_DIS\n#define GLB_BLE_TX_ABORT_DIS_POS   (27U)\n#define GLB_BLE_TX_ABORT_DIS_LEN   (1U)\n#define GLB_BLE_TX_ABORT_DIS_MSK   (((1U << GLB_BLE_TX_ABORT_DIS_LEN) - 1) << GLB_BLE_TX_ABORT_DIS_POS)\n#define GLB_BLE_TX_ABORT_DIS_UMSK  (~(((1U << GLB_BLE_TX_ABORT_DIS_LEN) - 1) << GLB_BLE_TX_ABORT_DIS_POS))\n#define GLB_COEX_ARB               GLB_COEX_ARB\n#define GLB_COEX_ARB_POS           (28U)\n#define GLB_COEX_ARB_LEN           (4U)\n#define GLB_COEX_ARB_MSK           (((1U << GLB_COEX_ARB_LEN) - 1) << GLB_COEX_ARB_POS)\n#define GLB_COEX_ARB_UMSK          (~(((1U << GLB_COEX_ARB_LEN) - 1) << GLB_COEX_ARB_POS))\n\n/* 0xC0 : UART_SIG_SEL_0 */\n#define GLB_UART_SIG_SEL_0_OFFSET (0xC0)\n#define GLB_UART_SIG_0_SEL        GLB_UART_SIG_0_SEL\n#define GLB_UART_SIG_0_SEL_POS    (0U)\n#define GLB_UART_SIG_0_SEL_LEN    (4U)\n#define GLB_UART_SIG_0_SEL_MSK    (((1U << GLB_UART_SIG_0_SEL_LEN) - 1) << GLB_UART_SIG_0_SEL_POS)\n#define GLB_UART_SIG_0_SEL_UMSK   (~(((1U << GLB_UART_SIG_0_SEL_LEN) - 1) << GLB_UART_SIG_0_SEL_POS))\n#define GLB_UART_SIG_1_SEL        GLB_UART_SIG_1_SEL\n#define GLB_UART_SIG_1_SEL_POS    (4U)\n#define GLB_UART_SIG_1_SEL_LEN    (4U)\n#define GLB_UART_SIG_1_SEL_MSK    (((1U << GLB_UART_SIG_1_SEL_LEN) - 1) << GLB_UART_SIG_1_SEL_POS)\n#define GLB_UART_SIG_1_SEL_UMSK   (~(((1U << GLB_UART_SIG_1_SEL_LEN) - 1) << GLB_UART_SIG_1_SEL_POS))\n#define GLB_UART_SIG_2_SEL        GLB_UART_SIG_2_SEL\n#define GLB_UART_SIG_2_SEL_POS    (8U)\n#define GLB_UART_SIG_2_SEL_LEN    (4U)\n#define GLB_UART_SIG_2_SEL_MSK    (((1U << GLB_UART_SIG_2_SEL_LEN) - 1) << GLB_UART_SIG_2_SEL_POS)\n#define GLB_UART_SIG_2_SEL_UMSK   (~(((1U << GLB_UART_SIG_2_SEL_LEN) - 1) << GLB_UART_SIG_2_SEL_POS))\n#define GLB_UART_SIG_3_SEL        GLB_UART_SIG_3_SEL\n#define GLB_UART_SIG_3_SEL_POS    (12U)\n#define GLB_UART_SIG_3_SEL_LEN    (4U)\n#define GLB_UART_SIG_3_SEL_MSK    (((1U << GLB_UART_SIG_3_SEL_LEN) - 1) << GLB_UART_SIG_3_SEL_POS)\n#define GLB_UART_SIG_3_SEL_UMSK   (~(((1U << GLB_UART_SIG_3_SEL_LEN) - 1) << GLB_UART_SIG_3_SEL_POS))\n#define GLB_UART_SIG_4_SEL        GLB_UART_SIG_4_SEL\n#define GLB_UART_SIG_4_SEL_POS    (16U)\n#define GLB_UART_SIG_4_SEL_LEN    (4U)\n#define GLB_UART_SIG_4_SEL_MSK    (((1U << GLB_UART_SIG_4_SEL_LEN) - 1) << GLB_UART_SIG_4_SEL_POS)\n#define GLB_UART_SIG_4_SEL_UMSK   (~(((1U << GLB_UART_SIG_4_SEL_LEN) - 1) << GLB_UART_SIG_4_SEL_POS))\n#define GLB_UART_SIG_5_SEL        GLB_UART_SIG_5_SEL\n#define GLB_UART_SIG_5_SEL_POS    (20U)\n#define GLB_UART_SIG_5_SEL_LEN    (4U)\n#define GLB_UART_SIG_5_SEL_MSK    (((1U << GLB_UART_SIG_5_SEL_LEN) - 1) << GLB_UART_SIG_5_SEL_POS)\n#define GLB_UART_SIG_5_SEL_UMSK   (~(((1U << GLB_UART_SIG_5_SEL_LEN) - 1) << GLB_UART_SIG_5_SEL_POS))\n#define GLB_UART_SIG_6_SEL        GLB_UART_SIG_6_SEL\n#define GLB_UART_SIG_6_SEL_POS    (24U)\n#define GLB_UART_SIG_6_SEL_LEN    (4U)\n#define GLB_UART_SIG_6_SEL_MSK    (((1U << GLB_UART_SIG_6_SEL_LEN) - 1) << GLB_UART_SIG_6_SEL_POS)\n#define GLB_UART_SIG_6_SEL_UMSK   (~(((1U << GLB_UART_SIG_6_SEL_LEN) - 1) << GLB_UART_SIG_6_SEL_POS))\n#define GLB_UART_SIG_7_SEL        GLB_UART_SIG_7_SEL\n#define GLB_UART_SIG_7_SEL_POS    (28U)\n#define GLB_UART_SIG_7_SEL_LEN    (4U)\n#define GLB_UART_SIG_7_SEL_MSK    (((1U << GLB_UART_SIG_7_SEL_LEN) - 1) << GLB_UART_SIG_7_SEL_POS)\n#define GLB_UART_SIG_7_SEL_UMSK   (~(((1U << GLB_UART_SIG_7_SEL_LEN) - 1) << GLB_UART_SIG_7_SEL_POS))\n\n/* 0xD0 : DBG_SEL_LL */\n#define GLB_DBG_SEL_LL_OFFSET    (0xD0)\n#define GLB_REG_DBG_LL_CTRL      GLB_REG_DBG_LL_CTRL\n#define GLB_REG_DBG_LL_CTRL_POS  (0U)\n#define GLB_REG_DBG_LL_CTRL_LEN  (32U)\n#define GLB_REG_DBG_LL_CTRL_MSK  (((1U << GLB_REG_DBG_LL_CTRL_LEN) - 1) << GLB_REG_DBG_LL_CTRL_POS)\n#define GLB_REG_DBG_LL_CTRL_UMSK (~(((1U << GLB_REG_DBG_LL_CTRL_LEN) - 1) << GLB_REG_DBG_LL_CTRL_POS))\n\n/* 0xD4 : DBG_SEL_LH */\n#define GLB_DBG_SEL_LH_OFFSET    (0xD4)\n#define GLB_REG_DBG_LH_CTRL      GLB_REG_DBG_LH_CTRL\n#define GLB_REG_DBG_LH_CTRL_POS  (0U)\n#define GLB_REG_DBG_LH_CTRL_LEN  (32U)\n#define GLB_REG_DBG_LH_CTRL_MSK  (((1U << GLB_REG_DBG_LH_CTRL_LEN) - 1) << GLB_REG_DBG_LH_CTRL_POS)\n#define GLB_REG_DBG_LH_CTRL_UMSK (~(((1U << GLB_REG_DBG_LH_CTRL_LEN) - 1) << GLB_REG_DBG_LH_CTRL_POS))\n\n/* 0xD8 : DBG_SEL_HL */\n#define GLB_DBG_SEL_HL_OFFSET    (0xD8)\n#define GLB_REG_DBG_HL_CTRL      GLB_REG_DBG_HL_CTRL\n#define GLB_REG_DBG_HL_CTRL_POS  (0U)\n#define GLB_REG_DBG_HL_CTRL_LEN  (32U)\n#define GLB_REG_DBG_HL_CTRL_MSK  (((1U << GLB_REG_DBG_HL_CTRL_LEN) - 1) << GLB_REG_DBG_HL_CTRL_POS)\n#define GLB_REG_DBG_HL_CTRL_UMSK (~(((1U << GLB_REG_DBG_HL_CTRL_LEN) - 1) << GLB_REG_DBG_HL_CTRL_POS))\n\n/* 0xDC : DBG_SEL_HH */\n#define GLB_DBG_SEL_HH_OFFSET    (0xDC)\n#define GLB_REG_DBG_HH_CTRL      GLB_REG_DBG_HH_CTRL\n#define GLB_REG_DBG_HH_CTRL_POS  (0U)\n#define GLB_REG_DBG_HH_CTRL_LEN  (32U)\n#define GLB_REG_DBG_HH_CTRL_MSK  (((1U << GLB_REG_DBG_HH_CTRL_LEN) - 1) << GLB_REG_DBG_HH_CTRL_POS)\n#define GLB_REG_DBG_HH_CTRL_UMSK (~(((1U << GLB_REG_DBG_HH_CTRL_LEN) - 1) << GLB_REG_DBG_HH_CTRL_POS))\n\n/* 0xE0 : debug */\n#define GLB_DEBUG_OFFSET  (0xE0)\n#define GLB_DEBUG_OE      GLB_DEBUG_OE\n#define GLB_DEBUG_OE_POS  (0U)\n#define GLB_DEBUG_OE_LEN  (1U)\n#define GLB_DEBUG_OE_MSK  (((1U << GLB_DEBUG_OE_LEN) - 1) << GLB_DEBUG_OE_POS)\n#define GLB_DEBUG_OE_UMSK (~(((1U << GLB_DEBUG_OE_LEN) - 1) << GLB_DEBUG_OE_POS))\n#define GLB_DEBUG_I       GLB_DEBUG_I\n#define GLB_DEBUG_I_POS   (1U)\n#define GLB_DEBUG_I_LEN   (31U)\n#define GLB_DEBUG_I_MSK   (((1U << GLB_DEBUG_I_LEN) - 1) << GLB_DEBUG_I_POS)\n#define GLB_DEBUG_I_UMSK  (~(((1U << GLB_DEBUG_I_LEN) - 1) << GLB_DEBUG_I_POS))\n\n/* 0x100 : GPIO_CFGCTL0 */\n#define GLB_GPIO_CFGCTL0_OFFSET      (0x100)\n#define GLB_REG_GPIO_0_IE            GLB_REG_GPIO_0_IE\n#define GLB_REG_GPIO_0_IE_POS        (0U)\n#define GLB_REG_GPIO_0_IE_LEN        (1U)\n#define GLB_REG_GPIO_0_IE_MSK        (((1U << GLB_REG_GPIO_0_IE_LEN) - 1) << GLB_REG_GPIO_0_IE_POS)\n#define GLB_REG_GPIO_0_IE_UMSK       (~(((1U << GLB_REG_GPIO_0_IE_LEN) - 1) << GLB_REG_GPIO_0_IE_POS))\n#define GLB_REG_GPIO_0_SMT           GLB_REG_GPIO_0_SMT\n#define GLB_REG_GPIO_0_SMT_POS       (1U)\n#define GLB_REG_GPIO_0_SMT_LEN       (1U)\n#define GLB_REG_GPIO_0_SMT_MSK       (((1U << GLB_REG_GPIO_0_SMT_LEN) - 1) << GLB_REG_GPIO_0_SMT_POS)\n#define GLB_REG_GPIO_0_SMT_UMSK      (~(((1U << GLB_REG_GPIO_0_SMT_LEN) - 1) << GLB_REG_GPIO_0_SMT_POS))\n#define GLB_REG_GPIO_0_DRV           GLB_REG_GPIO_0_DRV\n#define GLB_REG_GPIO_0_DRV_POS       (2U)\n#define GLB_REG_GPIO_0_DRV_LEN       (2U)\n#define GLB_REG_GPIO_0_DRV_MSK       (((1U << GLB_REG_GPIO_0_DRV_LEN) - 1) << GLB_REG_GPIO_0_DRV_POS)\n#define GLB_REG_GPIO_0_DRV_UMSK      (~(((1U << GLB_REG_GPIO_0_DRV_LEN) - 1) << GLB_REG_GPIO_0_DRV_POS))\n#define GLB_REG_GPIO_0_PU            GLB_REG_GPIO_0_PU\n#define GLB_REG_GPIO_0_PU_POS        (4U)\n#define GLB_REG_GPIO_0_PU_LEN        (1U)\n#define GLB_REG_GPIO_0_PU_MSK        (((1U << GLB_REG_GPIO_0_PU_LEN) - 1) << GLB_REG_GPIO_0_PU_POS)\n#define GLB_REG_GPIO_0_PU_UMSK       (~(((1U << GLB_REG_GPIO_0_PU_LEN) - 1) << GLB_REG_GPIO_0_PU_POS))\n#define GLB_REG_GPIO_0_PD            GLB_REG_GPIO_0_PD\n#define GLB_REG_GPIO_0_PD_POS        (5U)\n#define GLB_REG_GPIO_0_PD_LEN        (1U)\n#define GLB_REG_GPIO_0_PD_MSK        (((1U << GLB_REG_GPIO_0_PD_LEN) - 1) << GLB_REG_GPIO_0_PD_POS)\n#define GLB_REG_GPIO_0_PD_UMSK       (~(((1U << GLB_REG_GPIO_0_PD_LEN) - 1) << GLB_REG_GPIO_0_PD_POS))\n#define GLB_REG_GPIO_0_FUNC_SEL      GLB_REG_GPIO_0_FUNC_SEL\n#define GLB_REG_GPIO_0_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_0_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_0_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_0_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_0_FUNC_SEL_POS)\n#define GLB_REG_GPIO_0_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_0_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_0_FUNC_SEL_POS))\n#define GLB_REG_GPIO_1_IE            GLB_REG_GPIO_1_IE\n#define GLB_REG_GPIO_1_IE_POS        (16U)\n#define GLB_REG_GPIO_1_IE_LEN        (1U)\n#define GLB_REG_GPIO_1_IE_MSK        (((1U << GLB_REG_GPIO_1_IE_LEN) - 1) << GLB_REG_GPIO_1_IE_POS)\n#define GLB_REG_GPIO_1_IE_UMSK       (~(((1U << GLB_REG_GPIO_1_IE_LEN) - 1) << GLB_REG_GPIO_1_IE_POS))\n#define GLB_REG_GPIO_1_SMT           GLB_REG_GPIO_1_SMT\n#define GLB_REG_GPIO_1_SMT_POS       (17U)\n#define GLB_REG_GPIO_1_SMT_LEN       (1U)\n#define GLB_REG_GPIO_1_SMT_MSK       (((1U << GLB_REG_GPIO_1_SMT_LEN) - 1) << GLB_REG_GPIO_1_SMT_POS)\n#define GLB_REG_GPIO_1_SMT_UMSK      (~(((1U << GLB_REG_GPIO_1_SMT_LEN) - 1) << GLB_REG_GPIO_1_SMT_POS))\n#define GLB_REG_GPIO_1_DRV           GLB_REG_GPIO_1_DRV\n#define GLB_REG_GPIO_1_DRV_POS       (18U)\n#define GLB_REG_GPIO_1_DRV_LEN       (2U)\n#define GLB_REG_GPIO_1_DRV_MSK       (((1U << GLB_REG_GPIO_1_DRV_LEN) - 1) << GLB_REG_GPIO_1_DRV_POS)\n#define GLB_REG_GPIO_1_DRV_UMSK      (~(((1U << GLB_REG_GPIO_1_DRV_LEN) - 1) << GLB_REG_GPIO_1_DRV_POS))\n#define GLB_REG_GPIO_1_PU            GLB_REG_GPIO_1_PU\n#define GLB_REG_GPIO_1_PU_POS        (20U)\n#define GLB_REG_GPIO_1_PU_LEN        (1U)\n#define GLB_REG_GPIO_1_PU_MSK        (((1U << GLB_REG_GPIO_1_PU_LEN) - 1) << GLB_REG_GPIO_1_PU_POS)\n#define GLB_REG_GPIO_1_PU_UMSK       (~(((1U << GLB_REG_GPIO_1_PU_LEN) - 1) << GLB_REG_GPIO_1_PU_POS))\n#define GLB_REG_GPIO_1_PD            GLB_REG_GPIO_1_PD\n#define GLB_REG_GPIO_1_PD_POS        (21U)\n#define GLB_REG_GPIO_1_PD_LEN        (1U)\n#define GLB_REG_GPIO_1_PD_MSK        (((1U << GLB_REG_GPIO_1_PD_LEN) - 1) << GLB_REG_GPIO_1_PD_POS)\n#define GLB_REG_GPIO_1_PD_UMSK       (~(((1U << GLB_REG_GPIO_1_PD_LEN) - 1) << GLB_REG_GPIO_1_PD_POS))\n#define GLB_REG_GPIO_1_FUNC_SEL      GLB_REG_GPIO_1_FUNC_SEL\n#define GLB_REG_GPIO_1_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_1_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_1_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_1_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_1_FUNC_SEL_POS)\n#define GLB_REG_GPIO_1_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_1_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_1_FUNC_SEL_POS))\n\n/* 0x104 : GPIO_CFGCTL1 */\n#define GLB_GPIO_CFGCTL1_OFFSET      (0x104)\n#define GLB_REG_GPIO_2_IE            GLB_REG_GPIO_2_IE\n#define GLB_REG_GPIO_2_IE_POS        (0U)\n#define GLB_REG_GPIO_2_IE_LEN        (1U)\n#define GLB_REG_GPIO_2_IE_MSK        (((1U << GLB_REG_GPIO_2_IE_LEN) - 1) << GLB_REG_GPIO_2_IE_POS)\n#define GLB_REG_GPIO_2_IE_UMSK       (~(((1U << GLB_REG_GPIO_2_IE_LEN) - 1) << GLB_REG_GPIO_2_IE_POS))\n#define GLB_REG_GPIO_2_SMT           GLB_REG_GPIO_2_SMT\n#define GLB_REG_GPIO_2_SMT_POS       (1U)\n#define GLB_REG_GPIO_2_SMT_LEN       (1U)\n#define GLB_REG_GPIO_2_SMT_MSK       (((1U << GLB_REG_GPIO_2_SMT_LEN) - 1) << GLB_REG_GPIO_2_SMT_POS)\n#define GLB_REG_GPIO_2_SMT_UMSK      (~(((1U << GLB_REG_GPIO_2_SMT_LEN) - 1) << GLB_REG_GPIO_2_SMT_POS))\n#define GLB_REG_GPIO_2_DRV           GLB_REG_GPIO_2_DRV\n#define GLB_REG_GPIO_2_DRV_POS       (2U)\n#define GLB_REG_GPIO_2_DRV_LEN       (2U)\n#define GLB_REG_GPIO_2_DRV_MSK       (((1U << GLB_REG_GPIO_2_DRV_LEN) - 1) << GLB_REG_GPIO_2_DRV_POS)\n#define GLB_REG_GPIO_2_DRV_UMSK      (~(((1U << GLB_REG_GPIO_2_DRV_LEN) - 1) << GLB_REG_GPIO_2_DRV_POS))\n#define GLB_REG_GPIO_2_PU            GLB_REG_GPIO_2_PU\n#define GLB_REG_GPIO_2_PU_POS        (4U)\n#define GLB_REG_GPIO_2_PU_LEN        (1U)\n#define GLB_REG_GPIO_2_PU_MSK        (((1U << GLB_REG_GPIO_2_PU_LEN) - 1) << GLB_REG_GPIO_2_PU_POS)\n#define GLB_REG_GPIO_2_PU_UMSK       (~(((1U << GLB_REG_GPIO_2_PU_LEN) - 1) << GLB_REG_GPIO_2_PU_POS))\n#define GLB_REG_GPIO_2_PD            GLB_REG_GPIO_2_PD\n#define GLB_REG_GPIO_2_PD_POS        (5U)\n#define GLB_REG_GPIO_2_PD_LEN        (1U)\n#define GLB_REG_GPIO_2_PD_MSK        (((1U << GLB_REG_GPIO_2_PD_LEN) - 1) << GLB_REG_GPIO_2_PD_POS)\n#define GLB_REG_GPIO_2_PD_UMSK       (~(((1U << GLB_REG_GPIO_2_PD_LEN) - 1) << GLB_REG_GPIO_2_PD_POS))\n#define GLB_REG_GPIO_2_FUNC_SEL      GLB_REG_GPIO_2_FUNC_SEL\n#define GLB_REG_GPIO_2_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_2_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_2_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_2_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_2_FUNC_SEL_POS)\n#define GLB_REG_GPIO_2_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_2_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_2_FUNC_SEL_POS))\n#define GLB_REG_GPIO_3_IE            GLB_REG_GPIO_3_IE\n#define GLB_REG_GPIO_3_IE_POS        (16U)\n#define GLB_REG_GPIO_3_IE_LEN        (1U)\n#define GLB_REG_GPIO_3_IE_MSK        (((1U << GLB_REG_GPIO_3_IE_LEN) - 1) << GLB_REG_GPIO_3_IE_POS)\n#define GLB_REG_GPIO_3_IE_UMSK       (~(((1U << GLB_REG_GPIO_3_IE_LEN) - 1) << GLB_REG_GPIO_3_IE_POS))\n#define GLB_REG_GPIO_3_SMT           GLB_REG_GPIO_3_SMT\n#define GLB_REG_GPIO_3_SMT_POS       (17U)\n#define GLB_REG_GPIO_3_SMT_LEN       (1U)\n#define GLB_REG_GPIO_3_SMT_MSK       (((1U << GLB_REG_GPIO_3_SMT_LEN) - 1) << GLB_REG_GPIO_3_SMT_POS)\n#define GLB_REG_GPIO_3_SMT_UMSK      (~(((1U << GLB_REG_GPIO_3_SMT_LEN) - 1) << GLB_REG_GPIO_3_SMT_POS))\n#define GLB_REG_GPIO_3_DRV           GLB_REG_GPIO_3_DRV\n#define GLB_REG_GPIO_3_DRV_POS       (18U)\n#define GLB_REG_GPIO_3_DRV_LEN       (2U)\n#define GLB_REG_GPIO_3_DRV_MSK       (((1U << GLB_REG_GPIO_3_DRV_LEN) - 1) << GLB_REG_GPIO_3_DRV_POS)\n#define GLB_REG_GPIO_3_DRV_UMSK      (~(((1U << GLB_REG_GPIO_3_DRV_LEN) - 1) << GLB_REG_GPIO_3_DRV_POS))\n#define GLB_REG_GPIO_3_PU            GLB_REG_GPIO_3_PU\n#define GLB_REG_GPIO_3_PU_POS        (20U)\n#define GLB_REG_GPIO_3_PU_LEN        (1U)\n#define GLB_REG_GPIO_3_PU_MSK        (((1U << GLB_REG_GPIO_3_PU_LEN) - 1) << GLB_REG_GPIO_3_PU_POS)\n#define GLB_REG_GPIO_3_PU_UMSK       (~(((1U << GLB_REG_GPIO_3_PU_LEN) - 1) << GLB_REG_GPIO_3_PU_POS))\n#define GLB_REG_GPIO_3_PD            GLB_REG_GPIO_3_PD\n#define GLB_REG_GPIO_3_PD_POS        (21U)\n#define GLB_REG_GPIO_3_PD_LEN        (1U)\n#define GLB_REG_GPIO_3_PD_MSK        (((1U << GLB_REG_GPIO_3_PD_LEN) - 1) << GLB_REG_GPIO_3_PD_POS)\n#define GLB_REG_GPIO_3_PD_UMSK       (~(((1U << GLB_REG_GPIO_3_PD_LEN) - 1) << GLB_REG_GPIO_3_PD_POS))\n#define GLB_REG_GPIO_3_FUNC_SEL      GLB_REG_GPIO_3_FUNC_SEL\n#define GLB_REG_GPIO_3_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_3_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_3_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_3_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_3_FUNC_SEL_POS)\n#define GLB_REG_GPIO_3_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_3_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_3_FUNC_SEL_POS))\n\n/* 0x108 : GPIO_CFGCTL2 */\n#define GLB_GPIO_CFGCTL2_OFFSET      (0x108)\n#define GLB_REG_GPIO_4_IE            GLB_REG_GPIO_4_IE\n#define GLB_REG_GPIO_4_IE_POS        (0U)\n#define GLB_REG_GPIO_4_IE_LEN        (1U)\n#define GLB_REG_GPIO_4_IE_MSK        (((1U << GLB_REG_GPIO_4_IE_LEN) - 1) << GLB_REG_GPIO_4_IE_POS)\n#define GLB_REG_GPIO_4_IE_UMSK       (~(((1U << GLB_REG_GPIO_4_IE_LEN) - 1) << GLB_REG_GPIO_4_IE_POS))\n#define GLB_REG_GPIO_4_SMT           GLB_REG_GPIO_4_SMT\n#define GLB_REG_GPIO_4_SMT_POS       (1U)\n#define GLB_REG_GPIO_4_SMT_LEN       (1U)\n#define GLB_REG_GPIO_4_SMT_MSK       (((1U << GLB_REG_GPIO_4_SMT_LEN) - 1) << GLB_REG_GPIO_4_SMT_POS)\n#define GLB_REG_GPIO_4_SMT_UMSK      (~(((1U << GLB_REG_GPIO_4_SMT_LEN) - 1) << GLB_REG_GPIO_4_SMT_POS))\n#define GLB_REG_GPIO_4_DRV           GLB_REG_GPIO_4_DRV\n#define GLB_REG_GPIO_4_DRV_POS       (2U)\n#define GLB_REG_GPIO_4_DRV_LEN       (2U)\n#define GLB_REG_GPIO_4_DRV_MSK       (((1U << GLB_REG_GPIO_4_DRV_LEN) - 1) << GLB_REG_GPIO_4_DRV_POS)\n#define GLB_REG_GPIO_4_DRV_UMSK      (~(((1U << GLB_REG_GPIO_4_DRV_LEN) - 1) << GLB_REG_GPIO_4_DRV_POS))\n#define GLB_REG_GPIO_4_PU            GLB_REG_GPIO_4_PU\n#define GLB_REG_GPIO_4_PU_POS        (4U)\n#define GLB_REG_GPIO_4_PU_LEN        (1U)\n#define GLB_REG_GPIO_4_PU_MSK        (((1U << GLB_REG_GPIO_4_PU_LEN) - 1) << GLB_REG_GPIO_4_PU_POS)\n#define GLB_REG_GPIO_4_PU_UMSK       (~(((1U << GLB_REG_GPIO_4_PU_LEN) - 1) << GLB_REG_GPIO_4_PU_POS))\n#define GLB_REG_GPIO_4_PD            GLB_REG_GPIO_4_PD\n#define GLB_REG_GPIO_4_PD_POS        (5U)\n#define GLB_REG_GPIO_4_PD_LEN        (1U)\n#define GLB_REG_GPIO_4_PD_MSK        (((1U << GLB_REG_GPIO_4_PD_LEN) - 1) << GLB_REG_GPIO_4_PD_POS)\n#define GLB_REG_GPIO_4_PD_UMSK       (~(((1U << GLB_REG_GPIO_4_PD_LEN) - 1) << GLB_REG_GPIO_4_PD_POS))\n#define GLB_REG_GPIO_4_FUNC_SEL      GLB_REG_GPIO_4_FUNC_SEL\n#define GLB_REG_GPIO_4_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_4_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_4_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_4_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_4_FUNC_SEL_POS)\n#define GLB_REG_GPIO_4_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_4_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_4_FUNC_SEL_POS))\n#define GLB_REG_GPIO_5_IE            GLB_REG_GPIO_5_IE\n#define GLB_REG_GPIO_5_IE_POS        (16U)\n#define GLB_REG_GPIO_5_IE_LEN        (1U)\n#define GLB_REG_GPIO_5_IE_MSK        (((1U << GLB_REG_GPIO_5_IE_LEN) - 1) << GLB_REG_GPIO_5_IE_POS)\n#define GLB_REG_GPIO_5_IE_UMSK       (~(((1U << GLB_REG_GPIO_5_IE_LEN) - 1) << GLB_REG_GPIO_5_IE_POS))\n#define GLB_REG_GPIO_5_SMT           GLB_REG_GPIO_5_SMT\n#define GLB_REG_GPIO_5_SMT_POS       (17U)\n#define GLB_REG_GPIO_5_SMT_LEN       (1U)\n#define GLB_REG_GPIO_5_SMT_MSK       (((1U << GLB_REG_GPIO_5_SMT_LEN) - 1) << GLB_REG_GPIO_5_SMT_POS)\n#define GLB_REG_GPIO_5_SMT_UMSK      (~(((1U << GLB_REG_GPIO_5_SMT_LEN) - 1) << GLB_REG_GPIO_5_SMT_POS))\n#define GLB_REG_GPIO_5_DRV           GLB_REG_GPIO_5_DRV\n#define GLB_REG_GPIO_5_DRV_POS       (18U)\n#define GLB_REG_GPIO_5_DRV_LEN       (2U)\n#define GLB_REG_GPIO_5_DRV_MSK       (((1U << GLB_REG_GPIO_5_DRV_LEN) - 1) << GLB_REG_GPIO_5_DRV_POS)\n#define GLB_REG_GPIO_5_DRV_UMSK      (~(((1U << GLB_REG_GPIO_5_DRV_LEN) - 1) << GLB_REG_GPIO_5_DRV_POS))\n#define GLB_REG_GPIO_5_PU            GLB_REG_GPIO_5_PU\n#define GLB_REG_GPIO_5_PU_POS        (20U)\n#define GLB_REG_GPIO_5_PU_LEN        (1U)\n#define GLB_REG_GPIO_5_PU_MSK        (((1U << GLB_REG_GPIO_5_PU_LEN) - 1) << GLB_REG_GPIO_5_PU_POS)\n#define GLB_REG_GPIO_5_PU_UMSK       (~(((1U << GLB_REG_GPIO_5_PU_LEN) - 1) << GLB_REG_GPIO_5_PU_POS))\n#define GLB_REG_GPIO_5_PD            GLB_REG_GPIO_5_PD\n#define GLB_REG_GPIO_5_PD_POS        (21U)\n#define GLB_REG_GPIO_5_PD_LEN        (1U)\n#define GLB_REG_GPIO_5_PD_MSK        (((1U << GLB_REG_GPIO_5_PD_LEN) - 1) << GLB_REG_GPIO_5_PD_POS)\n#define GLB_REG_GPIO_5_PD_UMSK       (~(((1U << GLB_REG_GPIO_5_PD_LEN) - 1) << GLB_REG_GPIO_5_PD_POS))\n#define GLB_REG_GPIO_5_FUNC_SEL      GLB_REG_GPIO_5_FUNC_SEL\n#define GLB_REG_GPIO_5_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_5_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_5_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_5_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_5_FUNC_SEL_POS)\n#define GLB_REG_GPIO_5_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_5_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_5_FUNC_SEL_POS))\n\n/* 0x10C : GPIO_CFGCTL3 */\n#define GLB_GPIO_CFGCTL3_OFFSET      (0x10C)\n#define GLB_REG_GPIO_6_IE            GLB_REG_GPIO_6_IE\n#define GLB_REG_GPIO_6_IE_POS        (0U)\n#define GLB_REG_GPIO_6_IE_LEN        (1U)\n#define GLB_REG_GPIO_6_IE_MSK        (((1U << GLB_REG_GPIO_6_IE_LEN) - 1) << GLB_REG_GPIO_6_IE_POS)\n#define GLB_REG_GPIO_6_IE_UMSK       (~(((1U << GLB_REG_GPIO_6_IE_LEN) - 1) << GLB_REG_GPIO_6_IE_POS))\n#define GLB_REG_GPIO_6_SMT           GLB_REG_GPIO_6_SMT\n#define GLB_REG_GPIO_6_SMT_POS       (1U)\n#define GLB_REG_GPIO_6_SMT_LEN       (1U)\n#define GLB_REG_GPIO_6_SMT_MSK       (((1U << GLB_REG_GPIO_6_SMT_LEN) - 1) << GLB_REG_GPIO_6_SMT_POS)\n#define GLB_REG_GPIO_6_SMT_UMSK      (~(((1U << GLB_REG_GPIO_6_SMT_LEN) - 1) << GLB_REG_GPIO_6_SMT_POS))\n#define GLB_REG_GPIO_6_DRV           GLB_REG_GPIO_6_DRV\n#define GLB_REG_GPIO_6_DRV_POS       (2U)\n#define GLB_REG_GPIO_6_DRV_LEN       (2U)\n#define GLB_REG_GPIO_6_DRV_MSK       (((1U << GLB_REG_GPIO_6_DRV_LEN) - 1) << GLB_REG_GPIO_6_DRV_POS)\n#define GLB_REG_GPIO_6_DRV_UMSK      (~(((1U << GLB_REG_GPIO_6_DRV_LEN) - 1) << GLB_REG_GPIO_6_DRV_POS))\n#define GLB_REG_GPIO_6_PU            GLB_REG_GPIO_6_PU\n#define GLB_REG_GPIO_6_PU_POS        (4U)\n#define GLB_REG_GPIO_6_PU_LEN        (1U)\n#define GLB_REG_GPIO_6_PU_MSK        (((1U << GLB_REG_GPIO_6_PU_LEN) - 1) << GLB_REG_GPIO_6_PU_POS)\n#define GLB_REG_GPIO_6_PU_UMSK       (~(((1U << GLB_REG_GPIO_6_PU_LEN) - 1) << GLB_REG_GPIO_6_PU_POS))\n#define GLB_REG_GPIO_6_PD            GLB_REG_GPIO_6_PD\n#define GLB_REG_GPIO_6_PD_POS        (5U)\n#define GLB_REG_GPIO_6_PD_LEN        (1U)\n#define GLB_REG_GPIO_6_PD_MSK        (((1U << GLB_REG_GPIO_6_PD_LEN) - 1) << GLB_REG_GPIO_6_PD_POS)\n#define GLB_REG_GPIO_6_PD_UMSK       (~(((1U << GLB_REG_GPIO_6_PD_LEN) - 1) << GLB_REG_GPIO_6_PD_POS))\n#define GLB_REG_GPIO_6_FUNC_SEL      GLB_REG_GPIO_6_FUNC_SEL\n#define GLB_REG_GPIO_6_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_6_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_6_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_6_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_6_FUNC_SEL_POS)\n#define GLB_REG_GPIO_6_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_6_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_6_FUNC_SEL_POS))\n#define GLB_REG_GPIO_7_IE            GLB_REG_GPIO_7_IE\n#define GLB_REG_GPIO_7_IE_POS        (16U)\n#define GLB_REG_GPIO_7_IE_LEN        (1U)\n#define GLB_REG_GPIO_7_IE_MSK        (((1U << GLB_REG_GPIO_7_IE_LEN) - 1) << GLB_REG_GPIO_7_IE_POS)\n#define GLB_REG_GPIO_7_IE_UMSK       (~(((1U << GLB_REG_GPIO_7_IE_LEN) - 1) << GLB_REG_GPIO_7_IE_POS))\n#define GLB_REG_GPIO_7_SMT           GLB_REG_GPIO_7_SMT\n#define GLB_REG_GPIO_7_SMT_POS       (17U)\n#define GLB_REG_GPIO_7_SMT_LEN       (1U)\n#define GLB_REG_GPIO_7_SMT_MSK       (((1U << GLB_REG_GPIO_7_SMT_LEN) - 1) << GLB_REG_GPIO_7_SMT_POS)\n#define GLB_REG_GPIO_7_SMT_UMSK      (~(((1U << GLB_REG_GPIO_7_SMT_LEN) - 1) << GLB_REG_GPIO_7_SMT_POS))\n#define GLB_REG_GPIO_7_DRV           GLB_REG_GPIO_7_DRV\n#define GLB_REG_GPIO_7_DRV_POS       (18U)\n#define GLB_REG_GPIO_7_DRV_LEN       (2U)\n#define GLB_REG_GPIO_7_DRV_MSK       (((1U << GLB_REG_GPIO_7_DRV_LEN) - 1) << GLB_REG_GPIO_7_DRV_POS)\n#define GLB_REG_GPIO_7_DRV_UMSK      (~(((1U << GLB_REG_GPIO_7_DRV_LEN) - 1) << GLB_REG_GPIO_7_DRV_POS))\n#define GLB_REG_GPIO_7_PU            GLB_REG_GPIO_7_PU\n#define GLB_REG_GPIO_7_PU_POS        (20U)\n#define GLB_REG_GPIO_7_PU_LEN        (1U)\n#define GLB_REG_GPIO_7_PU_MSK        (((1U << GLB_REG_GPIO_7_PU_LEN) - 1) << GLB_REG_GPIO_7_PU_POS)\n#define GLB_REG_GPIO_7_PU_UMSK       (~(((1U << GLB_REG_GPIO_7_PU_LEN) - 1) << GLB_REG_GPIO_7_PU_POS))\n#define GLB_REG_GPIO_7_PD            GLB_REG_GPIO_7_PD\n#define GLB_REG_GPIO_7_PD_POS        (21U)\n#define GLB_REG_GPIO_7_PD_LEN        (1U)\n#define GLB_REG_GPIO_7_PD_MSK        (((1U << GLB_REG_GPIO_7_PD_LEN) - 1) << GLB_REG_GPIO_7_PD_POS)\n#define GLB_REG_GPIO_7_PD_UMSK       (~(((1U << GLB_REG_GPIO_7_PD_LEN) - 1) << GLB_REG_GPIO_7_PD_POS))\n#define GLB_REG_GPIO_7_FUNC_SEL      GLB_REG_GPIO_7_FUNC_SEL\n#define GLB_REG_GPIO_7_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_7_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_7_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_7_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_7_FUNC_SEL_POS)\n#define GLB_REG_GPIO_7_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_7_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_7_FUNC_SEL_POS))\n\n/* 0x110 : GPIO_CFGCTL4 */\n#define GLB_GPIO_CFGCTL4_OFFSET      (0x110)\n#define GLB_REG_GPIO_8_IE            GLB_REG_GPIO_8_IE\n#define GLB_REG_GPIO_8_IE_POS        (0U)\n#define GLB_REG_GPIO_8_IE_LEN        (1U)\n#define GLB_REG_GPIO_8_IE_MSK        (((1U << GLB_REG_GPIO_8_IE_LEN) - 1) << GLB_REG_GPIO_8_IE_POS)\n#define GLB_REG_GPIO_8_IE_UMSK       (~(((1U << GLB_REG_GPIO_8_IE_LEN) - 1) << GLB_REG_GPIO_8_IE_POS))\n#define GLB_REG_GPIO_8_SMT           GLB_REG_GPIO_8_SMT\n#define GLB_REG_GPIO_8_SMT_POS       (1U)\n#define GLB_REG_GPIO_8_SMT_LEN       (1U)\n#define GLB_REG_GPIO_8_SMT_MSK       (((1U << GLB_REG_GPIO_8_SMT_LEN) - 1) << GLB_REG_GPIO_8_SMT_POS)\n#define GLB_REG_GPIO_8_SMT_UMSK      (~(((1U << GLB_REG_GPIO_8_SMT_LEN) - 1) << GLB_REG_GPIO_8_SMT_POS))\n#define GLB_REG_GPIO_8_DRV           GLB_REG_GPIO_8_DRV\n#define GLB_REG_GPIO_8_DRV_POS       (2U)\n#define GLB_REG_GPIO_8_DRV_LEN       (2U)\n#define GLB_REG_GPIO_8_DRV_MSK       (((1U << GLB_REG_GPIO_8_DRV_LEN) - 1) << GLB_REG_GPIO_8_DRV_POS)\n#define GLB_REG_GPIO_8_DRV_UMSK      (~(((1U << GLB_REG_GPIO_8_DRV_LEN) - 1) << GLB_REG_GPIO_8_DRV_POS))\n#define GLB_REG_GPIO_8_PU            GLB_REG_GPIO_8_PU\n#define GLB_REG_GPIO_8_PU_POS        (4U)\n#define GLB_REG_GPIO_8_PU_LEN        (1U)\n#define GLB_REG_GPIO_8_PU_MSK        (((1U << GLB_REG_GPIO_8_PU_LEN) - 1) << GLB_REG_GPIO_8_PU_POS)\n#define GLB_REG_GPIO_8_PU_UMSK       (~(((1U << GLB_REG_GPIO_8_PU_LEN) - 1) << GLB_REG_GPIO_8_PU_POS))\n#define GLB_REG_GPIO_8_PD            GLB_REG_GPIO_8_PD\n#define GLB_REG_GPIO_8_PD_POS        (5U)\n#define GLB_REG_GPIO_8_PD_LEN        (1U)\n#define GLB_REG_GPIO_8_PD_MSK        (((1U << GLB_REG_GPIO_8_PD_LEN) - 1) << GLB_REG_GPIO_8_PD_POS)\n#define GLB_REG_GPIO_8_PD_UMSK       (~(((1U << GLB_REG_GPIO_8_PD_LEN) - 1) << GLB_REG_GPIO_8_PD_POS))\n#define GLB_REG_GPIO_8_FUNC_SEL      GLB_REG_GPIO_8_FUNC_SEL\n#define GLB_REG_GPIO_8_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_8_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_8_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_8_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_8_FUNC_SEL_POS)\n#define GLB_REG_GPIO_8_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_8_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_8_FUNC_SEL_POS))\n#define GLB_REG_GPIO_9_IE            GLB_REG_GPIO_9_IE\n#define GLB_REG_GPIO_9_IE_POS        (16U)\n#define GLB_REG_GPIO_9_IE_LEN        (1U)\n#define GLB_REG_GPIO_9_IE_MSK        (((1U << GLB_REG_GPIO_9_IE_LEN) - 1) << GLB_REG_GPIO_9_IE_POS)\n#define GLB_REG_GPIO_9_IE_UMSK       (~(((1U << GLB_REG_GPIO_9_IE_LEN) - 1) << GLB_REG_GPIO_9_IE_POS))\n#define GLB_REG_GPIO_9_SMT           GLB_REG_GPIO_9_SMT\n#define GLB_REG_GPIO_9_SMT_POS       (17U)\n#define GLB_REG_GPIO_9_SMT_LEN       (1U)\n#define GLB_REG_GPIO_9_SMT_MSK       (((1U << GLB_REG_GPIO_9_SMT_LEN) - 1) << GLB_REG_GPIO_9_SMT_POS)\n#define GLB_REG_GPIO_9_SMT_UMSK      (~(((1U << GLB_REG_GPIO_9_SMT_LEN) - 1) << GLB_REG_GPIO_9_SMT_POS))\n#define GLB_REG_GPIO_9_DRV           GLB_REG_GPIO_9_DRV\n#define GLB_REG_GPIO_9_DRV_POS       (18U)\n#define GLB_REG_GPIO_9_DRV_LEN       (2U)\n#define GLB_REG_GPIO_9_DRV_MSK       (((1U << GLB_REG_GPIO_9_DRV_LEN) - 1) << GLB_REG_GPIO_9_DRV_POS)\n#define GLB_REG_GPIO_9_DRV_UMSK      (~(((1U << GLB_REG_GPIO_9_DRV_LEN) - 1) << GLB_REG_GPIO_9_DRV_POS))\n#define GLB_REG_GPIO_9_PU            GLB_REG_GPIO_9_PU\n#define GLB_REG_GPIO_9_PU_POS        (20U)\n#define GLB_REG_GPIO_9_PU_LEN        (1U)\n#define GLB_REG_GPIO_9_PU_MSK        (((1U << GLB_REG_GPIO_9_PU_LEN) - 1) << GLB_REG_GPIO_9_PU_POS)\n#define GLB_REG_GPIO_9_PU_UMSK       (~(((1U << GLB_REG_GPIO_9_PU_LEN) - 1) << GLB_REG_GPIO_9_PU_POS))\n#define GLB_REG_GPIO_9_PD            GLB_REG_GPIO_9_PD\n#define GLB_REG_GPIO_9_PD_POS        (21U)\n#define GLB_REG_GPIO_9_PD_LEN        (1U)\n#define GLB_REG_GPIO_9_PD_MSK        (((1U << GLB_REG_GPIO_9_PD_LEN) - 1) << GLB_REG_GPIO_9_PD_POS)\n#define GLB_REG_GPIO_9_PD_UMSK       (~(((1U << GLB_REG_GPIO_9_PD_LEN) - 1) << GLB_REG_GPIO_9_PD_POS))\n#define GLB_REG_GPIO_9_FUNC_SEL      GLB_REG_GPIO_9_FUNC_SEL\n#define GLB_REG_GPIO_9_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_9_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_9_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_9_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_9_FUNC_SEL_POS)\n#define GLB_REG_GPIO_9_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_9_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_9_FUNC_SEL_POS))\n\n/* 0x114 : GPIO_CFGCTL5 */\n#define GLB_GPIO_CFGCTL5_OFFSET       (0x114)\n#define GLB_REG_GPIO_10_IE            GLB_REG_GPIO_10_IE\n#define GLB_REG_GPIO_10_IE_POS        (0U)\n#define GLB_REG_GPIO_10_IE_LEN        (1U)\n#define GLB_REG_GPIO_10_IE_MSK        (((1U << GLB_REG_GPIO_10_IE_LEN) - 1) << GLB_REG_GPIO_10_IE_POS)\n#define GLB_REG_GPIO_10_IE_UMSK       (~(((1U << GLB_REG_GPIO_10_IE_LEN) - 1) << GLB_REG_GPIO_10_IE_POS))\n#define GLB_REG_GPIO_10_SMT           GLB_REG_GPIO_10_SMT\n#define GLB_REG_GPIO_10_SMT_POS       (1U)\n#define GLB_REG_GPIO_10_SMT_LEN       (1U)\n#define GLB_REG_GPIO_10_SMT_MSK       (((1U << GLB_REG_GPIO_10_SMT_LEN) - 1) << GLB_REG_GPIO_10_SMT_POS)\n#define GLB_REG_GPIO_10_SMT_UMSK      (~(((1U << GLB_REG_GPIO_10_SMT_LEN) - 1) << GLB_REG_GPIO_10_SMT_POS))\n#define GLB_REG_GPIO_10_DRV           GLB_REG_GPIO_10_DRV\n#define GLB_REG_GPIO_10_DRV_POS       (2U)\n#define GLB_REG_GPIO_10_DRV_LEN       (2U)\n#define GLB_REG_GPIO_10_DRV_MSK       (((1U << GLB_REG_GPIO_10_DRV_LEN) - 1) << GLB_REG_GPIO_10_DRV_POS)\n#define GLB_REG_GPIO_10_DRV_UMSK      (~(((1U << GLB_REG_GPIO_10_DRV_LEN) - 1) << GLB_REG_GPIO_10_DRV_POS))\n#define GLB_REG_GPIO_10_PU            GLB_REG_GPIO_10_PU\n#define GLB_REG_GPIO_10_PU_POS        (4U)\n#define GLB_REG_GPIO_10_PU_LEN        (1U)\n#define GLB_REG_GPIO_10_PU_MSK        (((1U << GLB_REG_GPIO_10_PU_LEN) - 1) << GLB_REG_GPIO_10_PU_POS)\n#define GLB_REG_GPIO_10_PU_UMSK       (~(((1U << GLB_REG_GPIO_10_PU_LEN) - 1) << GLB_REG_GPIO_10_PU_POS))\n#define GLB_REG_GPIO_10_PD            GLB_REG_GPIO_10_PD\n#define GLB_REG_GPIO_10_PD_POS        (5U)\n#define GLB_REG_GPIO_10_PD_LEN        (1U)\n#define GLB_REG_GPIO_10_PD_MSK        (((1U << GLB_REG_GPIO_10_PD_LEN) - 1) << GLB_REG_GPIO_10_PD_POS)\n#define GLB_REG_GPIO_10_PD_UMSK       (~(((1U << GLB_REG_GPIO_10_PD_LEN) - 1) << GLB_REG_GPIO_10_PD_POS))\n#define GLB_REG_GPIO_10_FUNC_SEL      GLB_REG_GPIO_10_FUNC_SEL\n#define GLB_REG_GPIO_10_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_10_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_10_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_10_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_10_FUNC_SEL_POS)\n#define GLB_REG_GPIO_10_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_10_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_10_FUNC_SEL_POS))\n#define GLB_REG_GPIO_11_IE            GLB_REG_GPIO_11_IE\n#define GLB_REG_GPIO_11_IE_POS        (16U)\n#define GLB_REG_GPIO_11_IE_LEN        (1U)\n#define GLB_REG_GPIO_11_IE_MSK        (((1U << GLB_REG_GPIO_11_IE_LEN) - 1) << GLB_REG_GPIO_11_IE_POS)\n#define GLB_REG_GPIO_11_IE_UMSK       (~(((1U << GLB_REG_GPIO_11_IE_LEN) - 1) << GLB_REG_GPIO_11_IE_POS))\n#define GLB_REG_GPIO_11_SMT           GLB_REG_GPIO_11_SMT\n#define GLB_REG_GPIO_11_SMT_POS       (17U)\n#define GLB_REG_GPIO_11_SMT_LEN       (1U)\n#define GLB_REG_GPIO_11_SMT_MSK       (((1U << GLB_REG_GPIO_11_SMT_LEN) - 1) << GLB_REG_GPIO_11_SMT_POS)\n#define GLB_REG_GPIO_11_SMT_UMSK      (~(((1U << GLB_REG_GPIO_11_SMT_LEN) - 1) << GLB_REG_GPIO_11_SMT_POS))\n#define GLB_REG_GPIO_11_DRV           GLB_REG_GPIO_11_DRV\n#define GLB_REG_GPIO_11_DRV_POS       (18U)\n#define GLB_REG_GPIO_11_DRV_LEN       (2U)\n#define GLB_REG_GPIO_11_DRV_MSK       (((1U << GLB_REG_GPIO_11_DRV_LEN) - 1) << GLB_REG_GPIO_11_DRV_POS)\n#define GLB_REG_GPIO_11_DRV_UMSK      (~(((1U << GLB_REG_GPIO_11_DRV_LEN) - 1) << GLB_REG_GPIO_11_DRV_POS))\n#define GLB_REG_GPIO_11_PU            GLB_REG_GPIO_11_PU\n#define GLB_REG_GPIO_11_PU_POS        (20U)\n#define GLB_REG_GPIO_11_PU_LEN        (1U)\n#define GLB_REG_GPIO_11_PU_MSK        (((1U << GLB_REG_GPIO_11_PU_LEN) - 1) << GLB_REG_GPIO_11_PU_POS)\n#define GLB_REG_GPIO_11_PU_UMSK       (~(((1U << GLB_REG_GPIO_11_PU_LEN) - 1) << GLB_REG_GPIO_11_PU_POS))\n#define GLB_REG_GPIO_11_PD            GLB_REG_GPIO_11_PD\n#define GLB_REG_GPIO_11_PD_POS        (21U)\n#define GLB_REG_GPIO_11_PD_LEN        (1U)\n#define GLB_REG_GPIO_11_PD_MSK        (((1U << GLB_REG_GPIO_11_PD_LEN) - 1) << GLB_REG_GPIO_11_PD_POS)\n#define GLB_REG_GPIO_11_PD_UMSK       (~(((1U << GLB_REG_GPIO_11_PD_LEN) - 1) << GLB_REG_GPIO_11_PD_POS))\n#define GLB_REG_GPIO_11_FUNC_SEL      GLB_REG_GPIO_11_FUNC_SEL\n#define GLB_REG_GPIO_11_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_11_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_11_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_11_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_11_FUNC_SEL_POS)\n#define GLB_REG_GPIO_11_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_11_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_11_FUNC_SEL_POS))\n\n/* 0x118 : GPIO_CFGCTL6 */\n#define GLB_GPIO_CFGCTL6_OFFSET       (0x118)\n#define GLB_REG_GPIO_12_IE            GLB_REG_GPIO_12_IE\n#define GLB_REG_GPIO_12_IE_POS        (0U)\n#define GLB_REG_GPIO_12_IE_LEN        (1U)\n#define GLB_REG_GPIO_12_IE_MSK        (((1U << GLB_REG_GPIO_12_IE_LEN) - 1) << GLB_REG_GPIO_12_IE_POS)\n#define GLB_REG_GPIO_12_IE_UMSK       (~(((1U << GLB_REG_GPIO_12_IE_LEN) - 1) << GLB_REG_GPIO_12_IE_POS))\n#define GLB_REG_GPIO_12_SMT           GLB_REG_GPIO_12_SMT\n#define GLB_REG_GPIO_12_SMT_POS       (1U)\n#define GLB_REG_GPIO_12_SMT_LEN       (1U)\n#define GLB_REG_GPIO_12_SMT_MSK       (((1U << GLB_REG_GPIO_12_SMT_LEN) - 1) << GLB_REG_GPIO_12_SMT_POS)\n#define GLB_REG_GPIO_12_SMT_UMSK      (~(((1U << GLB_REG_GPIO_12_SMT_LEN) - 1) << GLB_REG_GPIO_12_SMT_POS))\n#define GLB_REG_GPIO_12_DRV           GLB_REG_GPIO_12_DRV\n#define GLB_REG_GPIO_12_DRV_POS       (2U)\n#define GLB_REG_GPIO_12_DRV_LEN       (2U)\n#define GLB_REG_GPIO_12_DRV_MSK       (((1U << GLB_REG_GPIO_12_DRV_LEN) - 1) << GLB_REG_GPIO_12_DRV_POS)\n#define GLB_REG_GPIO_12_DRV_UMSK      (~(((1U << GLB_REG_GPIO_12_DRV_LEN) - 1) << GLB_REG_GPIO_12_DRV_POS))\n#define GLB_REG_GPIO_12_PU            GLB_REG_GPIO_12_PU\n#define GLB_REG_GPIO_12_PU_POS        (4U)\n#define GLB_REG_GPIO_12_PU_LEN        (1U)\n#define GLB_REG_GPIO_12_PU_MSK        (((1U << GLB_REG_GPIO_12_PU_LEN) - 1) << GLB_REG_GPIO_12_PU_POS)\n#define GLB_REG_GPIO_12_PU_UMSK       (~(((1U << GLB_REG_GPIO_12_PU_LEN) - 1) << GLB_REG_GPIO_12_PU_POS))\n#define GLB_REG_GPIO_12_PD            GLB_REG_GPIO_12_PD\n#define GLB_REG_GPIO_12_PD_POS        (5U)\n#define GLB_REG_GPIO_12_PD_LEN        (1U)\n#define GLB_REG_GPIO_12_PD_MSK        (((1U << GLB_REG_GPIO_12_PD_LEN) - 1) << GLB_REG_GPIO_12_PD_POS)\n#define GLB_REG_GPIO_12_PD_UMSK       (~(((1U << GLB_REG_GPIO_12_PD_LEN) - 1) << GLB_REG_GPIO_12_PD_POS))\n#define GLB_REG_GPIO_12_FUNC_SEL      GLB_REG_GPIO_12_FUNC_SEL\n#define GLB_REG_GPIO_12_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_12_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_12_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_12_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_12_FUNC_SEL_POS)\n#define GLB_REG_GPIO_12_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_12_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_12_FUNC_SEL_POS))\n#define GLB_REG_GPIO_13_IE            GLB_REG_GPIO_13_IE\n#define GLB_REG_GPIO_13_IE_POS        (16U)\n#define GLB_REG_GPIO_13_IE_LEN        (1U)\n#define GLB_REG_GPIO_13_IE_MSK        (((1U << GLB_REG_GPIO_13_IE_LEN) - 1) << GLB_REG_GPIO_13_IE_POS)\n#define GLB_REG_GPIO_13_IE_UMSK       (~(((1U << GLB_REG_GPIO_13_IE_LEN) - 1) << GLB_REG_GPIO_13_IE_POS))\n#define GLB_REG_GPIO_13_SMT           GLB_REG_GPIO_13_SMT\n#define GLB_REG_GPIO_13_SMT_POS       (17U)\n#define GLB_REG_GPIO_13_SMT_LEN       (1U)\n#define GLB_REG_GPIO_13_SMT_MSK       (((1U << GLB_REG_GPIO_13_SMT_LEN) - 1) << GLB_REG_GPIO_13_SMT_POS)\n#define GLB_REG_GPIO_13_SMT_UMSK      (~(((1U << GLB_REG_GPIO_13_SMT_LEN) - 1) << GLB_REG_GPIO_13_SMT_POS))\n#define GLB_REG_GPIO_13_DRV           GLB_REG_GPIO_13_DRV\n#define GLB_REG_GPIO_13_DRV_POS       (18U)\n#define GLB_REG_GPIO_13_DRV_LEN       (2U)\n#define GLB_REG_GPIO_13_DRV_MSK       (((1U << GLB_REG_GPIO_13_DRV_LEN) - 1) << GLB_REG_GPIO_13_DRV_POS)\n#define GLB_REG_GPIO_13_DRV_UMSK      (~(((1U << GLB_REG_GPIO_13_DRV_LEN) - 1) << GLB_REG_GPIO_13_DRV_POS))\n#define GLB_REG_GPIO_13_PU            GLB_REG_GPIO_13_PU\n#define GLB_REG_GPIO_13_PU_POS        (20U)\n#define GLB_REG_GPIO_13_PU_LEN        (1U)\n#define GLB_REG_GPIO_13_PU_MSK        (((1U << GLB_REG_GPIO_13_PU_LEN) - 1) << GLB_REG_GPIO_13_PU_POS)\n#define GLB_REG_GPIO_13_PU_UMSK       (~(((1U << GLB_REG_GPIO_13_PU_LEN) - 1) << GLB_REG_GPIO_13_PU_POS))\n#define GLB_REG_GPIO_13_PD            GLB_REG_GPIO_13_PD\n#define GLB_REG_GPIO_13_PD_POS        (21U)\n#define GLB_REG_GPIO_13_PD_LEN        (1U)\n#define GLB_REG_GPIO_13_PD_MSK        (((1U << GLB_REG_GPIO_13_PD_LEN) - 1) << GLB_REG_GPIO_13_PD_POS)\n#define GLB_REG_GPIO_13_PD_UMSK       (~(((1U << GLB_REG_GPIO_13_PD_LEN) - 1) << GLB_REG_GPIO_13_PD_POS))\n#define GLB_REG_GPIO_13_FUNC_SEL      GLB_REG_GPIO_13_FUNC_SEL\n#define GLB_REG_GPIO_13_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_13_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_13_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_13_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_13_FUNC_SEL_POS)\n#define GLB_REG_GPIO_13_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_13_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_13_FUNC_SEL_POS))\n\n/* 0x11C : GPIO_CFGCTL7 */\n#define GLB_GPIO_CFGCTL7_OFFSET       (0x11C)\n#define GLB_REG_GPIO_14_IE            GLB_REG_GPIO_14_IE\n#define GLB_REG_GPIO_14_IE_POS        (0U)\n#define GLB_REG_GPIO_14_IE_LEN        (1U)\n#define GLB_REG_GPIO_14_IE_MSK        (((1U << GLB_REG_GPIO_14_IE_LEN) - 1) << GLB_REG_GPIO_14_IE_POS)\n#define GLB_REG_GPIO_14_IE_UMSK       (~(((1U << GLB_REG_GPIO_14_IE_LEN) - 1) << GLB_REG_GPIO_14_IE_POS))\n#define GLB_REG_GPIO_14_SMT           GLB_REG_GPIO_14_SMT\n#define GLB_REG_GPIO_14_SMT_POS       (1U)\n#define GLB_REG_GPIO_14_SMT_LEN       (1U)\n#define GLB_REG_GPIO_14_SMT_MSK       (((1U << GLB_REG_GPIO_14_SMT_LEN) - 1) << GLB_REG_GPIO_14_SMT_POS)\n#define GLB_REG_GPIO_14_SMT_UMSK      (~(((1U << GLB_REG_GPIO_14_SMT_LEN) - 1) << GLB_REG_GPIO_14_SMT_POS))\n#define GLB_REG_GPIO_14_DRV           GLB_REG_GPIO_14_DRV\n#define GLB_REG_GPIO_14_DRV_POS       (2U)\n#define GLB_REG_GPIO_14_DRV_LEN       (2U)\n#define GLB_REG_GPIO_14_DRV_MSK       (((1U << GLB_REG_GPIO_14_DRV_LEN) - 1) << GLB_REG_GPIO_14_DRV_POS)\n#define GLB_REG_GPIO_14_DRV_UMSK      (~(((1U << GLB_REG_GPIO_14_DRV_LEN) - 1) << GLB_REG_GPIO_14_DRV_POS))\n#define GLB_REG_GPIO_14_PU            GLB_REG_GPIO_14_PU\n#define GLB_REG_GPIO_14_PU_POS        (4U)\n#define GLB_REG_GPIO_14_PU_LEN        (1U)\n#define GLB_REG_GPIO_14_PU_MSK        (((1U << GLB_REG_GPIO_14_PU_LEN) - 1) << GLB_REG_GPIO_14_PU_POS)\n#define GLB_REG_GPIO_14_PU_UMSK       (~(((1U << GLB_REG_GPIO_14_PU_LEN) - 1) << GLB_REG_GPIO_14_PU_POS))\n#define GLB_REG_GPIO_14_PD            GLB_REG_GPIO_14_PD\n#define GLB_REG_GPIO_14_PD_POS        (5U)\n#define GLB_REG_GPIO_14_PD_LEN        (1U)\n#define GLB_REG_GPIO_14_PD_MSK        (((1U << GLB_REG_GPIO_14_PD_LEN) - 1) << GLB_REG_GPIO_14_PD_POS)\n#define GLB_REG_GPIO_14_PD_UMSK       (~(((1U << GLB_REG_GPIO_14_PD_LEN) - 1) << GLB_REG_GPIO_14_PD_POS))\n#define GLB_REG_GPIO_14_FUNC_SEL      GLB_REG_GPIO_14_FUNC_SEL\n#define GLB_REG_GPIO_14_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_14_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_14_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_14_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_14_FUNC_SEL_POS)\n#define GLB_REG_GPIO_14_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_14_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_14_FUNC_SEL_POS))\n#define GLB_REG_GPIO_15_IE            GLB_REG_GPIO_15_IE\n#define GLB_REG_GPIO_15_IE_POS        (16U)\n#define GLB_REG_GPIO_15_IE_LEN        (1U)\n#define GLB_REG_GPIO_15_IE_MSK        (((1U << GLB_REG_GPIO_15_IE_LEN) - 1) << GLB_REG_GPIO_15_IE_POS)\n#define GLB_REG_GPIO_15_IE_UMSK       (~(((1U << GLB_REG_GPIO_15_IE_LEN) - 1) << GLB_REG_GPIO_15_IE_POS))\n#define GLB_REG_GPIO_15_SMT           GLB_REG_GPIO_15_SMT\n#define GLB_REG_GPIO_15_SMT_POS       (17U)\n#define GLB_REG_GPIO_15_SMT_LEN       (1U)\n#define GLB_REG_GPIO_15_SMT_MSK       (((1U << GLB_REG_GPIO_15_SMT_LEN) - 1) << GLB_REG_GPIO_15_SMT_POS)\n#define GLB_REG_GPIO_15_SMT_UMSK      (~(((1U << GLB_REG_GPIO_15_SMT_LEN) - 1) << GLB_REG_GPIO_15_SMT_POS))\n#define GLB_REG_GPIO_15_DRV           GLB_REG_GPIO_15_DRV\n#define GLB_REG_GPIO_15_DRV_POS       (18U)\n#define GLB_REG_GPIO_15_DRV_LEN       (2U)\n#define GLB_REG_GPIO_15_DRV_MSK       (((1U << GLB_REG_GPIO_15_DRV_LEN) - 1) << GLB_REG_GPIO_15_DRV_POS)\n#define GLB_REG_GPIO_15_DRV_UMSK      (~(((1U << GLB_REG_GPIO_15_DRV_LEN) - 1) << GLB_REG_GPIO_15_DRV_POS))\n#define GLB_REG_GPIO_15_PU            GLB_REG_GPIO_15_PU\n#define GLB_REG_GPIO_15_PU_POS        (20U)\n#define GLB_REG_GPIO_15_PU_LEN        (1U)\n#define GLB_REG_GPIO_15_PU_MSK        (((1U << GLB_REG_GPIO_15_PU_LEN) - 1) << GLB_REG_GPIO_15_PU_POS)\n#define GLB_REG_GPIO_15_PU_UMSK       (~(((1U << GLB_REG_GPIO_15_PU_LEN) - 1) << GLB_REG_GPIO_15_PU_POS))\n#define GLB_REG_GPIO_15_PD            GLB_REG_GPIO_15_PD\n#define GLB_REG_GPIO_15_PD_POS        (21U)\n#define GLB_REG_GPIO_15_PD_LEN        (1U)\n#define GLB_REG_GPIO_15_PD_MSK        (((1U << GLB_REG_GPIO_15_PD_LEN) - 1) << GLB_REG_GPIO_15_PD_POS)\n#define GLB_REG_GPIO_15_PD_UMSK       (~(((1U << GLB_REG_GPIO_15_PD_LEN) - 1) << GLB_REG_GPIO_15_PD_POS))\n#define GLB_REG_GPIO_15_FUNC_SEL      GLB_REG_GPIO_15_FUNC_SEL\n#define GLB_REG_GPIO_15_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_15_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_15_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_15_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_15_FUNC_SEL_POS)\n#define GLB_REG_GPIO_15_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_15_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_15_FUNC_SEL_POS))\n\n/* 0x120 : GPIO_CFGCTL8 */\n#define GLB_GPIO_CFGCTL8_OFFSET       (0x120)\n#define GLB_REG_GPIO_16_IE            GLB_REG_GPIO_16_IE\n#define GLB_REG_GPIO_16_IE_POS        (0U)\n#define GLB_REG_GPIO_16_IE_LEN        (1U)\n#define GLB_REG_GPIO_16_IE_MSK        (((1U << GLB_REG_GPIO_16_IE_LEN) - 1) << GLB_REG_GPIO_16_IE_POS)\n#define GLB_REG_GPIO_16_IE_UMSK       (~(((1U << GLB_REG_GPIO_16_IE_LEN) - 1) << GLB_REG_GPIO_16_IE_POS))\n#define GLB_REG_GPIO_16_SMT           GLB_REG_GPIO_16_SMT\n#define GLB_REG_GPIO_16_SMT_POS       (1U)\n#define GLB_REG_GPIO_16_SMT_LEN       (1U)\n#define GLB_REG_GPIO_16_SMT_MSK       (((1U << GLB_REG_GPIO_16_SMT_LEN) - 1) << GLB_REG_GPIO_16_SMT_POS)\n#define GLB_REG_GPIO_16_SMT_UMSK      (~(((1U << GLB_REG_GPIO_16_SMT_LEN) - 1) << GLB_REG_GPIO_16_SMT_POS))\n#define GLB_REG_GPIO_16_DRV           GLB_REG_GPIO_16_DRV\n#define GLB_REG_GPIO_16_DRV_POS       (2U)\n#define GLB_REG_GPIO_16_DRV_LEN       (2U)\n#define GLB_REG_GPIO_16_DRV_MSK       (((1U << GLB_REG_GPIO_16_DRV_LEN) - 1) << GLB_REG_GPIO_16_DRV_POS)\n#define GLB_REG_GPIO_16_DRV_UMSK      (~(((1U << GLB_REG_GPIO_16_DRV_LEN) - 1) << GLB_REG_GPIO_16_DRV_POS))\n#define GLB_REG_GPIO_16_PU            GLB_REG_GPIO_16_PU\n#define GLB_REG_GPIO_16_PU_POS        (4U)\n#define GLB_REG_GPIO_16_PU_LEN        (1U)\n#define GLB_REG_GPIO_16_PU_MSK        (((1U << GLB_REG_GPIO_16_PU_LEN) - 1) << GLB_REG_GPIO_16_PU_POS)\n#define GLB_REG_GPIO_16_PU_UMSK       (~(((1U << GLB_REG_GPIO_16_PU_LEN) - 1) << GLB_REG_GPIO_16_PU_POS))\n#define GLB_REG_GPIO_16_PD            GLB_REG_GPIO_16_PD\n#define GLB_REG_GPIO_16_PD_POS        (5U)\n#define GLB_REG_GPIO_16_PD_LEN        (1U)\n#define GLB_REG_GPIO_16_PD_MSK        (((1U << GLB_REG_GPIO_16_PD_LEN) - 1) << GLB_REG_GPIO_16_PD_POS)\n#define GLB_REG_GPIO_16_PD_UMSK       (~(((1U << GLB_REG_GPIO_16_PD_LEN) - 1) << GLB_REG_GPIO_16_PD_POS))\n#define GLB_REG_GPIO_16_FUNC_SEL      GLB_REG_GPIO_16_FUNC_SEL\n#define GLB_REG_GPIO_16_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_16_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_16_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_16_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_16_FUNC_SEL_POS)\n#define GLB_REG_GPIO_16_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_16_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_16_FUNC_SEL_POS))\n#define GLB_REG_GPIO_17_IE            GLB_REG_GPIO_17_IE\n#define GLB_REG_GPIO_17_IE_POS        (16U)\n#define GLB_REG_GPIO_17_IE_LEN        (1U)\n#define GLB_REG_GPIO_17_IE_MSK        (((1U << GLB_REG_GPIO_17_IE_LEN) - 1) << GLB_REG_GPIO_17_IE_POS)\n#define GLB_REG_GPIO_17_IE_UMSK       (~(((1U << GLB_REG_GPIO_17_IE_LEN) - 1) << GLB_REG_GPIO_17_IE_POS))\n#define GLB_REG_GPIO_17_SMT           GLB_REG_GPIO_17_SMT\n#define GLB_REG_GPIO_17_SMT_POS       (17U)\n#define GLB_REG_GPIO_17_SMT_LEN       (1U)\n#define GLB_REG_GPIO_17_SMT_MSK       (((1U << GLB_REG_GPIO_17_SMT_LEN) - 1) << GLB_REG_GPIO_17_SMT_POS)\n#define GLB_REG_GPIO_17_SMT_UMSK      (~(((1U << GLB_REG_GPIO_17_SMT_LEN) - 1) << GLB_REG_GPIO_17_SMT_POS))\n#define GLB_REG_GPIO_17_DRV           GLB_REG_GPIO_17_DRV\n#define GLB_REG_GPIO_17_DRV_POS       (18U)\n#define GLB_REG_GPIO_17_DRV_LEN       (2U)\n#define GLB_REG_GPIO_17_DRV_MSK       (((1U << GLB_REG_GPIO_17_DRV_LEN) - 1) << GLB_REG_GPIO_17_DRV_POS)\n#define GLB_REG_GPIO_17_DRV_UMSK      (~(((1U << GLB_REG_GPIO_17_DRV_LEN) - 1) << GLB_REG_GPIO_17_DRV_POS))\n#define GLB_REG_GPIO_17_PU            GLB_REG_GPIO_17_PU\n#define GLB_REG_GPIO_17_PU_POS        (20U)\n#define GLB_REG_GPIO_17_PU_LEN        (1U)\n#define GLB_REG_GPIO_17_PU_MSK        (((1U << GLB_REG_GPIO_17_PU_LEN) - 1) << GLB_REG_GPIO_17_PU_POS)\n#define GLB_REG_GPIO_17_PU_UMSK       (~(((1U << GLB_REG_GPIO_17_PU_LEN) - 1) << GLB_REG_GPIO_17_PU_POS))\n#define GLB_REG_GPIO_17_PD            GLB_REG_GPIO_17_PD\n#define GLB_REG_GPIO_17_PD_POS        (21U)\n#define GLB_REG_GPIO_17_PD_LEN        (1U)\n#define GLB_REG_GPIO_17_PD_MSK        (((1U << GLB_REG_GPIO_17_PD_LEN) - 1) << GLB_REG_GPIO_17_PD_POS)\n#define GLB_REG_GPIO_17_PD_UMSK       (~(((1U << GLB_REG_GPIO_17_PD_LEN) - 1) << GLB_REG_GPIO_17_PD_POS))\n#define GLB_REG_GPIO_17_FUNC_SEL      GLB_REG_GPIO_17_FUNC_SEL\n#define GLB_REG_GPIO_17_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_17_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_17_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_17_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_17_FUNC_SEL_POS)\n#define GLB_REG_GPIO_17_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_17_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_17_FUNC_SEL_POS))\n\n/* 0x124 : GPIO_CFGCTL9 */\n#define GLB_GPIO_CFGCTL9_OFFSET       (0x124)\n#define GLB_REG_GPIO_18_IE            GLB_REG_GPIO_18_IE\n#define GLB_REG_GPIO_18_IE_POS        (0U)\n#define GLB_REG_GPIO_18_IE_LEN        (1U)\n#define GLB_REG_GPIO_18_IE_MSK        (((1U << GLB_REG_GPIO_18_IE_LEN) - 1) << GLB_REG_GPIO_18_IE_POS)\n#define GLB_REG_GPIO_18_IE_UMSK       (~(((1U << GLB_REG_GPIO_18_IE_LEN) - 1) << GLB_REG_GPIO_18_IE_POS))\n#define GLB_REG_GPIO_18_SMT           GLB_REG_GPIO_18_SMT\n#define GLB_REG_GPIO_18_SMT_POS       (1U)\n#define GLB_REG_GPIO_18_SMT_LEN       (1U)\n#define GLB_REG_GPIO_18_SMT_MSK       (((1U << GLB_REG_GPIO_18_SMT_LEN) - 1) << GLB_REG_GPIO_18_SMT_POS)\n#define GLB_REG_GPIO_18_SMT_UMSK      (~(((1U << GLB_REG_GPIO_18_SMT_LEN) - 1) << GLB_REG_GPIO_18_SMT_POS))\n#define GLB_REG_GPIO_18_DRV           GLB_REG_GPIO_18_DRV\n#define GLB_REG_GPIO_18_DRV_POS       (2U)\n#define GLB_REG_GPIO_18_DRV_LEN       (2U)\n#define GLB_REG_GPIO_18_DRV_MSK       (((1U << GLB_REG_GPIO_18_DRV_LEN) - 1) << GLB_REG_GPIO_18_DRV_POS)\n#define GLB_REG_GPIO_18_DRV_UMSK      (~(((1U << GLB_REG_GPIO_18_DRV_LEN) - 1) << GLB_REG_GPIO_18_DRV_POS))\n#define GLB_REG_GPIO_18_PU            GLB_REG_GPIO_18_PU\n#define GLB_REG_GPIO_18_PU_POS        (4U)\n#define GLB_REG_GPIO_18_PU_LEN        (1U)\n#define GLB_REG_GPIO_18_PU_MSK        (((1U << GLB_REG_GPIO_18_PU_LEN) - 1) << GLB_REG_GPIO_18_PU_POS)\n#define GLB_REG_GPIO_18_PU_UMSK       (~(((1U << GLB_REG_GPIO_18_PU_LEN) - 1) << GLB_REG_GPIO_18_PU_POS))\n#define GLB_REG_GPIO_18_PD            GLB_REG_GPIO_18_PD\n#define GLB_REG_GPIO_18_PD_POS        (5U)\n#define GLB_REG_GPIO_18_PD_LEN        (1U)\n#define GLB_REG_GPIO_18_PD_MSK        (((1U << GLB_REG_GPIO_18_PD_LEN) - 1) << GLB_REG_GPIO_18_PD_POS)\n#define GLB_REG_GPIO_18_PD_UMSK       (~(((1U << GLB_REG_GPIO_18_PD_LEN) - 1) << GLB_REG_GPIO_18_PD_POS))\n#define GLB_REG_GPIO_18_FUNC_SEL      GLB_REG_GPIO_18_FUNC_SEL\n#define GLB_REG_GPIO_18_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_18_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_18_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_18_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_18_FUNC_SEL_POS)\n#define GLB_REG_GPIO_18_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_18_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_18_FUNC_SEL_POS))\n#define GLB_REG_GPIO_19_IE            GLB_REG_GPIO_19_IE\n#define GLB_REG_GPIO_19_IE_POS        (16U)\n#define GLB_REG_GPIO_19_IE_LEN        (1U)\n#define GLB_REG_GPIO_19_IE_MSK        (((1U << GLB_REG_GPIO_19_IE_LEN) - 1) << GLB_REG_GPIO_19_IE_POS)\n#define GLB_REG_GPIO_19_IE_UMSK       (~(((1U << GLB_REG_GPIO_19_IE_LEN) - 1) << GLB_REG_GPIO_19_IE_POS))\n#define GLB_REG_GPIO_19_SMT           GLB_REG_GPIO_19_SMT\n#define GLB_REG_GPIO_19_SMT_POS       (17U)\n#define GLB_REG_GPIO_19_SMT_LEN       (1U)\n#define GLB_REG_GPIO_19_SMT_MSK       (((1U << GLB_REG_GPIO_19_SMT_LEN) - 1) << GLB_REG_GPIO_19_SMT_POS)\n#define GLB_REG_GPIO_19_SMT_UMSK      (~(((1U << GLB_REG_GPIO_19_SMT_LEN) - 1) << GLB_REG_GPIO_19_SMT_POS))\n#define GLB_REG_GPIO_19_DRV           GLB_REG_GPIO_19_DRV\n#define GLB_REG_GPIO_19_DRV_POS       (18U)\n#define GLB_REG_GPIO_19_DRV_LEN       (2U)\n#define GLB_REG_GPIO_19_DRV_MSK       (((1U << GLB_REG_GPIO_19_DRV_LEN) - 1) << GLB_REG_GPIO_19_DRV_POS)\n#define GLB_REG_GPIO_19_DRV_UMSK      (~(((1U << GLB_REG_GPIO_19_DRV_LEN) - 1) << GLB_REG_GPIO_19_DRV_POS))\n#define GLB_REG_GPIO_19_PU            GLB_REG_GPIO_19_PU\n#define GLB_REG_GPIO_19_PU_POS        (20U)\n#define GLB_REG_GPIO_19_PU_LEN        (1U)\n#define GLB_REG_GPIO_19_PU_MSK        (((1U << GLB_REG_GPIO_19_PU_LEN) - 1) << GLB_REG_GPIO_19_PU_POS)\n#define GLB_REG_GPIO_19_PU_UMSK       (~(((1U << GLB_REG_GPIO_19_PU_LEN) - 1) << GLB_REG_GPIO_19_PU_POS))\n#define GLB_REG_GPIO_19_PD            GLB_REG_GPIO_19_PD\n#define GLB_REG_GPIO_19_PD_POS        (21U)\n#define GLB_REG_GPIO_19_PD_LEN        (1U)\n#define GLB_REG_GPIO_19_PD_MSK        (((1U << GLB_REG_GPIO_19_PD_LEN) - 1) << GLB_REG_GPIO_19_PD_POS)\n#define GLB_REG_GPIO_19_PD_UMSK       (~(((1U << GLB_REG_GPIO_19_PD_LEN) - 1) << GLB_REG_GPIO_19_PD_POS))\n#define GLB_REG_GPIO_19_FUNC_SEL      GLB_REG_GPIO_19_FUNC_SEL\n#define GLB_REG_GPIO_19_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_19_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_19_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_19_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_19_FUNC_SEL_POS)\n#define GLB_REG_GPIO_19_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_19_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_19_FUNC_SEL_POS))\n\n/* 0x128 : GPIO_CFGCTL10 */\n#define GLB_GPIO_CFGCTL10_OFFSET      (0x128)\n#define GLB_REG_GPIO_20_IE            GLB_REG_GPIO_20_IE\n#define GLB_REG_GPIO_20_IE_POS        (0U)\n#define GLB_REG_GPIO_20_IE_LEN        (1U)\n#define GLB_REG_GPIO_20_IE_MSK        (((1U << GLB_REG_GPIO_20_IE_LEN) - 1) << GLB_REG_GPIO_20_IE_POS)\n#define GLB_REG_GPIO_20_IE_UMSK       (~(((1U << GLB_REG_GPIO_20_IE_LEN) - 1) << GLB_REG_GPIO_20_IE_POS))\n#define GLB_REG_GPIO_20_SMT           GLB_REG_GPIO_20_SMT\n#define GLB_REG_GPIO_20_SMT_POS       (1U)\n#define GLB_REG_GPIO_20_SMT_LEN       (1U)\n#define GLB_REG_GPIO_20_SMT_MSK       (((1U << GLB_REG_GPIO_20_SMT_LEN) - 1) << GLB_REG_GPIO_20_SMT_POS)\n#define GLB_REG_GPIO_20_SMT_UMSK      (~(((1U << GLB_REG_GPIO_20_SMT_LEN) - 1) << GLB_REG_GPIO_20_SMT_POS))\n#define GLB_REG_GPIO_20_DRV           GLB_REG_GPIO_20_DRV\n#define GLB_REG_GPIO_20_DRV_POS       (2U)\n#define GLB_REG_GPIO_20_DRV_LEN       (2U)\n#define GLB_REG_GPIO_20_DRV_MSK       (((1U << GLB_REG_GPIO_20_DRV_LEN) - 1) << GLB_REG_GPIO_20_DRV_POS)\n#define GLB_REG_GPIO_20_DRV_UMSK      (~(((1U << GLB_REG_GPIO_20_DRV_LEN) - 1) << GLB_REG_GPIO_20_DRV_POS))\n#define GLB_REG_GPIO_20_PU            GLB_REG_GPIO_20_PU\n#define GLB_REG_GPIO_20_PU_POS        (4U)\n#define GLB_REG_GPIO_20_PU_LEN        (1U)\n#define GLB_REG_GPIO_20_PU_MSK        (((1U << GLB_REG_GPIO_20_PU_LEN) - 1) << GLB_REG_GPIO_20_PU_POS)\n#define GLB_REG_GPIO_20_PU_UMSK       (~(((1U << GLB_REG_GPIO_20_PU_LEN) - 1) << GLB_REG_GPIO_20_PU_POS))\n#define GLB_REG_GPIO_20_PD            GLB_REG_GPIO_20_PD\n#define GLB_REG_GPIO_20_PD_POS        (5U)\n#define GLB_REG_GPIO_20_PD_LEN        (1U)\n#define GLB_REG_GPIO_20_PD_MSK        (((1U << GLB_REG_GPIO_20_PD_LEN) - 1) << GLB_REG_GPIO_20_PD_POS)\n#define GLB_REG_GPIO_20_PD_UMSK       (~(((1U << GLB_REG_GPIO_20_PD_LEN) - 1) << GLB_REG_GPIO_20_PD_POS))\n#define GLB_REG_GPIO_20_FUNC_SEL      GLB_REG_GPIO_20_FUNC_SEL\n#define GLB_REG_GPIO_20_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_20_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_20_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_20_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_20_FUNC_SEL_POS)\n#define GLB_REG_GPIO_20_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_20_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_20_FUNC_SEL_POS))\n#define GLB_REG_GPIO_21_IE            GLB_REG_GPIO_21_IE\n#define GLB_REG_GPIO_21_IE_POS        (16U)\n#define GLB_REG_GPIO_21_IE_LEN        (1U)\n#define GLB_REG_GPIO_21_IE_MSK        (((1U << GLB_REG_GPIO_21_IE_LEN) - 1) << GLB_REG_GPIO_21_IE_POS)\n#define GLB_REG_GPIO_21_IE_UMSK       (~(((1U << GLB_REG_GPIO_21_IE_LEN) - 1) << GLB_REG_GPIO_21_IE_POS))\n#define GLB_REG_GPIO_21_SMT           GLB_REG_GPIO_21_SMT\n#define GLB_REG_GPIO_21_SMT_POS       (17U)\n#define GLB_REG_GPIO_21_SMT_LEN       (1U)\n#define GLB_REG_GPIO_21_SMT_MSK       (((1U << GLB_REG_GPIO_21_SMT_LEN) - 1) << GLB_REG_GPIO_21_SMT_POS)\n#define GLB_REG_GPIO_21_SMT_UMSK      (~(((1U << GLB_REG_GPIO_21_SMT_LEN) - 1) << GLB_REG_GPIO_21_SMT_POS))\n#define GLB_REG_GPIO_21_DRV           GLB_REG_GPIO_21_DRV\n#define GLB_REG_GPIO_21_DRV_POS       (18U)\n#define GLB_REG_GPIO_21_DRV_LEN       (2U)\n#define GLB_REG_GPIO_21_DRV_MSK       (((1U << GLB_REG_GPIO_21_DRV_LEN) - 1) << GLB_REG_GPIO_21_DRV_POS)\n#define GLB_REG_GPIO_21_DRV_UMSK      (~(((1U << GLB_REG_GPIO_21_DRV_LEN) - 1) << GLB_REG_GPIO_21_DRV_POS))\n#define GLB_REG_GPIO_21_PU            GLB_REG_GPIO_21_PU\n#define GLB_REG_GPIO_21_PU_POS        (20U)\n#define GLB_REG_GPIO_21_PU_LEN        (1U)\n#define GLB_REG_GPIO_21_PU_MSK        (((1U << GLB_REG_GPIO_21_PU_LEN) - 1) << GLB_REG_GPIO_21_PU_POS)\n#define GLB_REG_GPIO_21_PU_UMSK       (~(((1U << GLB_REG_GPIO_21_PU_LEN) - 1) << GLB_REG_GPIO_21_PU_POS))\n#define GLB_REG_GPIO_21_PD            GLB_REG_GPIO_21_PD\n#define GLB_REG_GPIO_21_PD_POS        (21U)\n#define GLB_REG_GPIO_21_PD_LEN        (1U)\n#define GLB_REG_GPIO_21_PD_MSK        (((1U << GLB_REG_GPIO_21_PD_LEN) - 1) << GLB_REG_GPIO_21_PD_POS)\n#define GLB_REG_GPIO_21_PD_UMSK       (~(((1U << GLB_REG_GPIO_21_PD_LEN) - 1) << GLB_REG_GPIO_21_PD_POS))\n#define GLB_REG_GPIO_21_FUNC_SEL      GLB_REG_GPIO_21_FUNC_SEL\n#define GLB_REG_GPIO_21_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_21_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_21_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_21_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_21_FUNC_SEL_POS)\n#define GLB_REG_GPIO_21_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_21_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_21_FUNC_SEL_POS))\n\n/* 0x12C : GPIO_CFGCTL11 */\n#define GLB_GPIO_CFGCTL11_OFFSET      (0x12C)\n#define GLB_REG_GPIO_22_IE            GLB_REG_GPIO_22_IE\n#define GLB_REG_GPIO_22_IE_POS        (0U)\n#define GLB_REG_GPIO_22_IE_LEN        (1U)\n#define GLB_REG_GPIO_22_IE_MSK        (((1U << GLB_REG_GPIO_22_IE_LEN) - 1) << GLB_REG_GPIO_22_IE_POS)\n#define GLB_REG_GPIO_22_IE_UMSK       (~(((1U << GLB_REG_GPIO_22_IE_LEN) - 1) << GLB_REG_GPIO_22_IE_POS))\n#define GLB_REG_GPIO_22_SMT           GLB_REG_GPIO_22_SMT\n#define GLB_REG_GPIO_22_SMT_POS       (1U)\n#define GLB_REG_GPIO_22_SMT_LEN       (1U)\n#define GLB_REG_GPIO_22_SMT_MSK       (((1U << GLB_REG_GPIO_22_SMT_LEN) - 1) << GLB_REG_GPIO_22_SMT_POS)\n#define GLB_REG_GPIO_22_SMT_UMSK      (~(((1U << GLB_REG_GPIO_22_SMT_LEN) - 1) << GLB_REG_GPIO_22_SMT_POS))\n#define GLB_REG_GPIO_22_DRV           GLB_REG_GPIO_22_DRV\n#define GLB_REG_GPIO_22_DRV_POS       (2U)\n#define GLB_REG_GPIO_22_DRV_LEN       (2U)\n#define GLB_REG_GPIO_22_DRV_MSK       (((1U << GLB_REG_GPIO_22_DRV_LEN) - 1) << GLB_REG_GPIO_22_DRV_POS)\n#define GLB_REG_GPIO_22_DRV_UMSK      (~(((1U << GLB_REG_GPIO_22_DRV_LEN) - 1) << GLB_REG_GPIO_22_DRV_POS))\n#define GLB_REG_GPIO_22_PU            GLB_REG_GPIO_22_PU\n#define GLB_REG_GPIO_22_PU_POS        (4U)\n#define GLB_REG_GPIO_22_PU_LEN        (1U)\n#define GLB_REG_GPIO_22_PU_MSK        (((1U << GLB_REG_GPIO_22_PU_LEN) - 1) << GLB_REG_GPIO_22_PU_POS)\n#define GLB_REG_GPIO_22_PU_UMSK       (~(((1U << GLB_REG_GPIO_22_PU_LEN) - 1) << GLB_REG_GPIO_22_PU_POS))\n#define GLB_REG_GPIO_22_PD            GLB_REG_GPIO_22_PD\n#define GLB_REG_GPIO_22_PD_POS        (5U)\n#define GLB_REG_GPIO_22_PD_LEN        (1U)\n#define GLB_REG_GPIO_22_PD_MSK        (((1U << GLB_REG_GPIO_22_PD_LEN) - 1) << GLB_REG_GPIO_22_PD_POS)\n#define GLB_REG_GPIO_22_PD_UMSK       (~(((1U << GLB_REG_GPIO_22_PD_LEN) - 1) << GLB_REG_GPIO_22_PD_POS))\n#define GLB_REG_GPIO_22_FUNC_SEL      GLB_REG_GPIO_22_FUNC_SEL\n#define GLB_REG_GPIO_22_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_22_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_22_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_22_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_22_FUNC_SEL_POS)\n#define GLB_REG_GPIO_22_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_22_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_22_FUNC_SEL_POS))\n#define GLB_REG_GPIO_23_IE            GLB_REG_GPIO_23_IE\n#define GLB_REG_GPIO_23_IE_POS        (16U)\n#define GLB_REG_GPIO_23_IE_LEN        (1U)\n#define GLB_REG_GPIO_23_IE_MSK        (((1U << GLB_REG_GPIO_23_IE_LEN) - 1) << GLB_REG_GPIO_23_IE_POS)\n#define GLB_REG_GPIO_23_IE_UMSK       (~(((1U << GLB_REG_GPIO_23_IE_LEN) - 1) << GLB_REG_GPIO_23_IE_POS))\n#define GLB_REG_GPIO_23_SMT           GLB_REG_GPIO_23_SMT\n#define GLB_REG_GPIO_23_SMT_POS       (17U)\n#define GLB_REG_GPIO_23_SMT_LEN       (1U)\n#define GLB_REG_GPIO_23_SMT_MSK       (((1U << GLB_REG_GPIO_23_SMT_LEN) - 1) << GLB_REG_GPIO_23_SMT_POS)\n#define GLB_REG_GPIO_23_SMT_UMSK      (~(((1U << GLB_REG_GPIO_23_SMT_LEN) - 1) << GLB_REG_GPIO_23_SMT_POS))\n#define GLB_REG_GPIO_23_DRV           GLB_REG_GPIO_23_DRV\n#define GLB_REG_GPIO_23_DRV_POS       (18U)\n#define GLB_REG_GPIO_23_DRV_LEN       (2U)\n#define GLB_REG_GPIO_23_DRV_MSK       (((1U << GLB_REG_GPIO_23_DRV_LEN) - 1) << GLB_REG_GPIO_23_DRV_POS)\n#define GLB_REG_GPIO_23_DRV_UMSK      (~(((1U << GLB_REG_GPIO_23_DRV_LEN) - 1) << GLB_REG_GPIO_23_DRV_POS))\n#define GLB_REG_GPIO_23_PU            GLB_REG_GPIO_23_PU\n#define GLB_REG_GPIO_23_PU_POS        (20U)\n#define GLB_REG_GPIO_23_PU_LEN        (1U)\n#define GLB_REG_GPIO_23_PU_MSK        (((1U << GLB_REG_GPIO_23_PU_LEN) - 1) << GLB_REG_GPIO_23_PU_POS)\n#define GLB_REG_GPIO_23_PU_UMSK       (~(((1U << GLB_REG_GPIO_23_PU_LEN) - 1) << GLB_REG_GPIO_23_PU_POS))\n#define GLB_REG_GPIO_23_PD            GLB_REG_GPIO_23_PD\n#define GLB_REG_GPIO_23_PD_POS        (21U)\n#define GLB_REG_GPIO_23_PD_LEN        (1U)\n#define GLB_REG_GPIO_23_PD_MSK        (((1U << GLB_REG_GPIO_23_PD_LEN) - 1) << GLB_REG_GPIO_23_PD_POS)\n#define GLB_REG_GPIO_23_PD_UMSK       (~(((1U << GLB_REG_GPIO_23_PD_LEN) - 1) << GLB_REG_GPIO_23_PD_POS))\n#define GLB_REG_GPIO_23_FUNC_SEL      GLB_REG_GPIO_23_FUNC_SEL\n#define GLB_REG_GPIO_23_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_23_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_23_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_23_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_23_FUNC_SEL_POS)\n#define GLB_REG_GPIO_23_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_23_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_23_FUNC_SEL_POS))\n\n/* 0x130 : GPIO_CFGCTL12 */\n#define GLB_GPIO_CFGCTL12_OFFSET      (0x130)\n#define GLB_REG_GPIO_24_IE            GLB_REG_GPIO_24_IE\n#define GLB_REG_GPIO_24_IE_POS        (0U)\n#define GLB_REG_GPIO_24_IE_LEN        (1U)\n#define GLB_REG_GPIO_24_IE_MSK        (((1U << GLB_REG_GPIO_24_IE_LEN) - 1) << GLB_REG_GPIO_24_IE_POS)\n#define GLB_REG_GPIO_24_IE_UMSK       (~(((1U << GLB_REG_GPIO_24_IE_LEN) - 1) << GLB_REG_GPIO_24_IE_POS))\n#define GLB_REG_GPIO_24_SMT           GLB_REG_GPIO_24_SMT\n#define GLB_REG_GPIO_24_SMT_POS       (1U)\n#define GLB_REG_GPIO_24_SMT_LEN       (1U)\n#define GLB_REG_GPIO_24_SMT_MSK       (((1U << GLB_REG_GPIO_24_SMT_LEN) - 1) << GLB_REG_GPIO_24_SMT_POS)\n#define GLB_REG_GPIO_24_SMT_UMSK      (~(((1U << GLB_REG_GPIO_24_SMT_LEN) - 1) << GLB_REG_GPIO_24_SMT_POS))\n#define GLB_REG_GPIO_24_DRV           GLB_REG_GPIO_24_DRV\n#define GLB_REG_GPIO_24_DRV_POS       (2U)\n#define GLB_REG_GPIO_24_DRV_LEN       (2U)\n#define GLB_REG_GPIO_24_DRV_MSK       (((1U << GLB_REG_GPIO_24_DRV_LEN) - 1) << GLB_REG_GPIO_24_DRV_POS)\n#define GLB_REG_GPIO_24_DRV_UMSK      (~(((1U << GLB_REG_GPIO_24_DRV_LEN) - 1) << GLB_REG_GPIO_24_DRV_POS))\n#define GLB_REG_GPIO_24_PU            GLB_REG_GPIO_24_PU\n#define GLB_REG_GPIO_24_PU_POS        (4U)\n#define GLB_REG_GPIO_24_PU_LEN        (1U)\n#define GLB_REG_GPIO_24_PU_MSK        (((1U << GLB_REG_GPIO_24_PU_LEN) - 1) << GLB_REG_GPIO_24_PU_POS)\n#define GLB_REG_GPIO_24_PU_UMSK       (~(((1U << GLB_REG_GPIO_24_PU_LEN) - 1) << GLB_REG_GPIO_24_PU_POS))\n#define GLB_REG_GPIO_24_PD            GLB_REG_GPIO_24_PD\n#define GLB_REG_GPIO_24_PD_POS        (5U)\n#define GLB_REG_GPIO_24_PD_LEN        (1U)\n#define GLB_REG_GPIO_24_PD_MSK        (((1U << GLB_REG_GPIO_24_PD_LEN) - 1) << GLB_REG_GPIO_24_PD_POS)\n#define GLB_REG_GPIO_24_PD_UMSK       (~(((1U << GLB_REG_GPIO_24_PD_LEN) - 1) << GLB_REG_GPIO_24_PD_POS))\n#define GLB_REG_GPIO_24_FUNC_SEL      GLB_REG_GPIO_24_FUNC_SEL\n#define GLB_REG_GPIO_24_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_24_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_24_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_24_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_24_FUNC_SEL_POS)\n#define GLB_REG_GPIO_24_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_24_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_24_FUNC_SEL_POS))\n#define GLB_REG_GPIO_25_IE            GLB_REG_GPIO_25_IE\n#define GLB_REG_GPIO_25_IE_POS        (16U)\n#define GLB_REG_GPIO_25_IE_LEN        (1U)\n#define GLB_REG_GPIO_25_IE_MSK        (((1U << GLB_REG_GPIO_25_IE_LEN) - 1) << GLB_REG_GPIO_25_IE_POS)\n#define GLB_REG_GPIO_25_IE_UMSK       (~(((1U << GLB_REG_GPIO_25_IE_LEN) - 1) << GLB_REG_GPIO_25_IE_POS))\n#define GLB_REG_GPIO_25_SMT           GLB_REG_GPIO_25_SMT\n#define GLB_REG_GPIO_25_SMT_POS       (17U)\n#define GLB_REG_GPIO_25_SMT_LEN       (1U)\n#define GLB_REG_GPIO_25_SMT_MSK       (((1U << GLB_REG_GPIO_25_SMT_LEN) - 1) << GLB_REG_GPIO_25_SMT_POS)\n#define GLB_REG_GPIO_25_SMT_UMSK      (~(((1U << GLB_REG_GPIO_25_SMT_LEN) - 1) << GLB_REG_GPIO_25_SMT_POS))\n#define GLB_REG_GPIO_25_DRV           GLB_REG_GPIO_25_DRV\n#define GLB_REG_GPIO_25_DRV_POS       (18U)\n#define GLB_REG_GPIO_25_DRV_LEN       (2U)\n#define GLB_REG_GPIO_25_DRV_MSK       (((1U << GLB_REG_GPIO_25_DRV_LEN) - 1) << GLB_REG_GPIO_25_DRV_POS)\n#define GLB_REG_GPIO_25_DRV_UMSK      (~(((1U << GLB_REG_GPIO_25_DRV_LEN) - 1) << GLB_REG_GPIO_25_DRV_POS))\n#define GLB_REG_GPIO_25_PU            GLB_REG_GPIO_25_PU\n#define GLB_REG_GPIO_25_PU_POS        (20U)\n#define GLB_REG_GPIO_25_PU_LEN        (1U)\n#define GLB_REG_GPIO_25_PU_MSK        (((1U << GLB_REG_GPIO_25_PU_LEN) - 1) << GLB_REG_GPIO_25_PU_POS)\n#define GLB_REG_GPIO_25_PU_UMSK       (~(((1U << GLB_REG_GPIO_25_PU_LEN) - 1) << GLB_REG_GPIO_25_PU_POS))\n#define GLB_REG_GPIO_25_PD            GLB_REG_GPIO_25_PD\n#define GLB_REG_GPIO_25_PD_POS        (21U)\n#define GLB_REG_GPIO_25_PD_LEN        (1U)\n#define GLB_REG_GPIO_25_PD_MSK        (((1U << GLB_REG_GPIO_25_PD_LEN) - 1) << GLB_REG_GPIO_25_PD_POS)\n#define GLB_REG_GPIO_25_PD_UMSK       (~(((1U << GLB_REG_GPIO_25_PD_LEN) - 1) << GLB_REG_GPIO_25_PD_POS))\n#define GLB_REG_GPIO_25_FUNC_SEL      GLB_REG_GPIO_25_FUNC_SEL\n#define GLB_REG_GPIO_25_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_25_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_25_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_25_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_25_FUNC_SEL_POS)\n#define GLB_REG_GPIO_25_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_25_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_25_FUNC_SEL_POS))\n\n/* 0x134 : GPIO_CFGCTL13 */\n#define GLB_GPIO_CFGCTL13_OFFSET      (0x134)\n#define GLB_REG_GPIO_26_IE            GLB_REG_GPIO_26_IE\n#define GLB_REG_GPIO_26_IE_POS        (0U)\n#define GLB_REG_GPIO_26_IE_LEN        (1U)\n#define GLB_REG_GPIO_26_IE_MSK        (((1U << GLB_REG_GPIO_26_IE_LEN) - 1) << GLB_REG_GPIO_26_IE_POS)\n#define GLB_REG_GPIO_26_IE_UMSK       (~(((1U << GLB_REG_GPIO_26_IE_LEN) - 1) << GLB_REG_GPIO_26_IE_POS))\n#define GLB_REG_GPIO_26_SMT           GLB_REG_GPIO_26_SMT\n#define GLB_REG_GPIO_26_SMT_POS       (1U)\n#define GLB_REG_GPIO_26_SMT_LEN       (1U)\n#define GLB_REG_GPIO_26_SMT_MSK       (((1U << GLB_REG_GPIO_26_SMT_LEN) - 1) << GLB_REG_GPIO_26_SMT_POS)\n#define GLB_REG_GPIO_26_SMT_UMSK      (~(((1U << GLB_REG_GPIO_26_SMT_LEN) - 1) << GLB_REG_GPIO_26_SMT_POS))\n#define GLB_REG_GPIO_26_DRV           GLB_REG_GPIO_26_DRV\n#define GLB_REG_GPIO_26_DRV_POS       (2U)\n#define GLB_REG_GPIO_26_DRV_LEN       (2U)\n#define GLB_REG_GPIO_26_DRV_MSK       (((1U << GLB_REG_GPIO_26_DRV_LEN) - 1) << GLB_REG_GPIO_26_DRV_POS)\n#define GLB_REG_GPIO_26_DRV_UMSK      (~(((1U << GLB_REG_GPIO_26_DRV_LEN) - 1) << GLB_REG_GPIO_26_DRV_POS))\n#define GLB_REG_GPIO_26_PU            GLB_REG_GPIO_26_PU\n#define GLB_REG_GPIO_26_PU_POS        (4U)\n#define GLB_REG_GPIO_26_PU_LEN        (1U)\n#define GLB_REG_GPIO_26_PU_MSK        (((1U << GLB_REG_GPIO_26_PU_LEN) - 1) << GLB_REG_GPIO_26_PU_POS)\n#define GLB_REG_GPIO_26_PU_UMSK       (~(((1U << GLB_REG_GPIO_26_PU_LEN) - 1) << GLB_REG_GPIO_26_PU_POS))\n#define GLB_REG_GPIO_26_PD            GLB_REG_GPIO_26_PD\n#define GLB_REG_GPIO_26_PD_POS        (5U)\n#define GLB_REG_GPIO_26_PD_LEN        (1U)\n#define GLB_REG_GPIO_26_PD_MSK        (((1U << GLB_REG_GPIO_26_PD_LEN) - 1) << GLB_REG_GPIO_26_PD_POS)\n#define GLB_REG_GPIO_26_PD_UMSK       (~(((1U << GLB_REG_GPIO_26_PD_LEN) - 1) << GLB_REG_GPIO_26_PD_POS))\n#define GLB_REG_GPIO_26_FUNC_SEL      GLB_REG_GPIO_26_FUNC_SEL\n#define GLB_REG_GPIO_26_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_26_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_26_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_26_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_26_FUNC_SEL_POS)\n#define GLB_REG_GPIO_26_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_26_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_26_FUNC_SEL_POS))\n#define GLB_REG_GPIO_27_IE            GLB_REG_GPIO_27_IE\n#define GLB_REG_GPIO_27_IE_POS        (16U)\n#define GLB_REG_GPIO_27_IE_LEN        (1U)\n#define GLB_REG_GPIO_27_IE_MSK        (((1U << GLB_REG_GPIO_27_IE_LEN) - 1) << GLB_REG_GPIO_27_IE_POS)\n#define GLB_REG_GPIO_27_IE_UMSK       (~(((1U << GLB_REG_GPIO_27_IE_LEN) - 1) << GLB_REG_GPIO_27_IE_POS))\n#define GLB_REG_GPIO_27_SMT           GLB_REG_GPIO_27_SMT\n#define GLB_REG_GPIO_27_SMT_POS       (17U)\n#define GLB_REG_GPIO_27_SMT_LEN       (1U)\n#define GLB_REG_GPIO_27_SMT_MSK       (((1U << GLB_REG_GPIO_27_SMT_LEN) - 1) << GLB_REG_GPIO_27_SMT_POS)\n#define GLB_REG_GPIO_27_SMT_UMSK      (~(((1U << GLB_REG_GPIO_27_SMT_LEN) - 1) << GLB_REG_GPIO_27_SMT_POS))\n#define GLB_REG_GPIO_27_DRV           GLB_REG_GPIO_27_DRV\n#define GLB_REG_GPIO_27_DRV_POS       (18U)\n#define GLB_REG_GPIO_27_DRV_LEN       (2U)\n#define GLB_REG_GPIO_27_DRV_MSK       (((1U << GLB_REG_GPIO_27_DRV_LEN) - 1) << GLB_REG_GPIO_27_DRV_POS)\n#define GLB_REG_GPIO_27_DRV_UMSK      (~(((1U << GLB_REG_GPIO_27_DRV_LEN) - 1) << GLB_REG_GPIO_27_DRV_POS))\n#define GLB_REG_GPIO_27_PU            GLB_REG_GPIO_27_PU\n#define GLB_REG_GPIO_27_PU_POS        (20U)\n#define GLB_REG_GPIO_27_PU_LEN        (1U)\n#define GLB_REG_GPIO_27_PU_MSK        (((1U << GLB_REG_GPIO_27_PU_LEN) - 1) << GLB_REG_GPIO_27_PU_POS)\n#define GLB_REG_GPIO_27_PU_UMSK       (~(((1U << GLB_REG_GPIO_27_PU_LEN) - 1) << GLB_REG_GPIO_27_PU_POS))\n#define GLB_REG_GPIO_27_PD            GLB_REG_GPIO_27_PD\n#define GLB_REG_GPIO_27_PD_POS        (21U)\n#define GLB_REG_GPIO_27_PD_LEN        (1U)\n#define GLB_REG_GPIO_27_PD_MSK        (((1U << GLB_REG_GPIO_27_PD_LEN) - 1) << GLB_REG_GPIO_27_PD_POS)\n#define GLB_REG_GPIO_27_PD_UMSK       (~(((1U << GLB_REG_GPIO_27_PD_LEN) - 1) << GLB_REG_GPIO_27_PD_POS))\n#define GLB_REG_GPIO_27_FUNC_SEL      GLB_REG_GPIO_27_FUNC_SEL\n#define GLB_REG_GPIO_27_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_27_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_27_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_27_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_27_FUNC_SEL_POS)\n#define GLB_REG_GPIO_27_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_27_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_27_FUNC_SEL_POS))\n\n/* 0x138 : GPIO_CFGCTL14 */\n#define GLB_GPIO_CFGCTL14_OFFSET      (0x138)\n#define GLB_REG_GPIO_28_IE            GLB_REG_GPIO_28_IE\n#define GLB_REG_GPIO_28_IE_POS        (0U)\n#define GLB_REG_GPIO_28_IE_LEN        (1U)\n#define GLB_REG_GPIO_28_IE_MSK        (((1U << GLB_REG_GPIO_28_IE_LEN) - 1) << GLB_REG_GPIO_28_IE_POS)\n#define GLB_REG_GPIO_28_IE_UMSK       (~(((1U << GLB_REG_GPIO_28_IE_LEN) - 1) << GLB_REG_GPIO_28_IE_POS))\n#define GLB_REG_GPIO_28_SMT           GLB_REG_GPIO_28_SMT\n#define GLB_REG_GPIO_28_SMT_POS       (1U)\n#define GLB_REG_GPIO_28_SMT_LEN       (1U)\n#define GLB_REG_GPIO_28_SMT_MSK       (((1U << GLB_REG_GPIO_28_SMT_LEN) - 1) << GLB_REG_GPIO_28_SMT_POS)\n#define GLB_REG_GPIO_28_SMT_UMSK      (~(((1U << GLB_REG_GPIO_28_SMT_LEN) - 1) << GLB_REG_GPIO_28_SMT_POS))\n#define GLB_REG_GPIO_28_DRV           GLB_REG_GPIO_28_DRV\n#define GLB_REG_GPIO_28_DRV_POS       (2U)\n#define GLB_REG_GPIO_28_DRV_LEN       (2U)\n#define GLB_REG_GPIO_28_DRV_MSK       (((1U << GLB_REG_GPIO_28_DRV_LEN) - 1) << GLB_REG_GPIO_28_DRV_POS)\n#define GLB_REG_GPIO_28_DRV_UMSK      (~(((1U << GLB_REG_GPIO_28_DRV_LEN) - 1) << GLB_REG_GPIO_28_DRV_POS))\n#define GLB_REG_GPIO_28_PU            GLB_REG_GPIO_28_PU\n#define GLB_REG_GPIO_28_PU_POS        (4U)\n#define GLB_REG_GPIO_28_PU_LEN        (1U)\n#define GLB_REG_GPIO_28_PU_MSK        (((1U << GLB_REG_GPIO_28_PU_LEN) - 1) << GLB_REG_GPIO_28_PU_POS)\n#define GLB_REG_GPIO_28_PU_UMSK       (~(((1U << GLB_REG_GPIO_28_PU_LEN) - 1) << GLB_REG_GPIO_28_PU_POS))\n#define GLB_REG_GPIO_28_PD            GLB_REG_GPIO_28_PD\n#define GLB_REG_GPIO_28_PD_POS        (5U)\n#define GLB_REG_GPIO_28_PD_LEN        (1U)\n#define GLB_REG_GPIO_28_PD_MSK        (((1U << GLB_REG_GPIO_28_PD_LEN) - 1) << GLB_REG_GPIO_28_PD_POS)\n#define GLB_REG_GPIO_28_PD_UMSK       (~(((1U << GLB_REG_GPIO_28_PD_LEN) - 1) << GLB_REG_GPIO_28_PD_POS))\n#define GLB_REG_GPIO_28_FUNC_SEL      GLB_REG_GPIO_28_FUNC_SEL\n#define GLB_REG_GPIO_28_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_28_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_28_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_28_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_28_FUNC_SEL_POS)\n#define GLB_REG_GPIO_28_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_28_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_28_FUNC_SEL_POS))\n#define GLB_REG_GPIO_29_IE            GLB_REG_GPIO_29_IE\n#define GLB_REG_GPIO_29_IE_POS        (16U)\n#define GLB_REG_GPIO_29_IE_LEN        (1U)\n#define GLB_REG_GPIO_29_IE_MSK        (((1U << GLB_REG_GPIO_29_IE_LEN) - 1) << GLB_REG_GPIO_29_IE_POS)\n#define GLB_REG_GPIO_29_IE_UMSK       (~(((1U << GLB_REG_GPIO_29_IE_LEN) - 1) << GLB_REG_GPIO_29_IE_POS))\n#define GLB_REG_GPIO_29_SMT           GLB_REG_GPIO_29_SMT\n#define GLB_REG_GPIO_29_SMT_POS       (17U)\n#define GLB_REG_GPIO_29_SMT_LEN       (1U)\n#define GLB_REG_GPIO_29_SMT_MSK       (((1U << GLB_REG_GPIO_29_SMT_LEN) - 1) << GLB_REG_GPIO_29_SMT_POS)\n#define GLB_REG_GPIO_29_SMT_UMSK      (~(((1U << GLB_REG_GPIO_29_SMT_LEN) - 1) << GLB_REG_GPIO_29_SMT_POS))\n#define GLB_REG_GPIO_29_DRV           GLB_REG_GPIO_29_DRV\n#define GLB_REG_GPIO_29_DRV_POS       (18U)\n#define GLB_REG_GPIO_29_DRV_LEN       (2U)\n#define GLB_REG_GPIO_29_DRV_MSK       (((1U << GLB_REG_GPIO_29_DRV_LEN) - 1) << GLB_REG_GPIO_29_DRV_POS)\n#define GLB_REG_GPIO_29_DRV_UMSK      (~(((1U << GLB_REG_GPIO_29_DRV_LEN) - 1) << GLB_REG_GPIO_29_DRV_POS))\n#define GLB_REG_GPIO_29_PU            GLB_REG_GPIO_29_PU\n#define GLB_REG_GPIO_29_PU_POS        (20U)\n#define GLB_REG_GPIO_29_PU_LEN        (1U)\n#define GLB_REG_GPIO_29_PU_MSK        (((1U << GLB_REG_GPIO_29_PU_LEN) - 1) << GLB_REG_GPIO_29_PU_POS)\n#define GLB_REG_GPIO_29_PU_UMSK       (~(((1U << GLB_REG_GPIO_29_PU_LEN) - 1) << GLB_REG_GPIO_29_PU_POS))\n#define GLB_REG_GPIO_29_PD            GLB_REG_GPIO_29_PD\n#define GLB_REG_GPIO_29_PD_POS        (21U)\n#define GLB_REG_GPIO_29_PD_LEN        (1U)\n#define GLB_REG_GPIO_29_PD_MSK        (((1U << GLB_REG_GPIO_29_PD_LEN) - 1) << GLB_REG_GPIO_29_PD_POS)\n#define GLB_REG_GPIO_29_PD_UMSK       (~(((1U << GLB_REG_GPIO_29_PD_LEN) - 1) << GLB_REG_GPIO_29_PD_POS))\n#define GLB_REG_GPIO_29_FUNC_SEL      GLB_REG_GPIO_29_FUNC_SEL\n#define GLB_REG_GPIO_29_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_29_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_29_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_29_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_29_FUNC_SEL_POS)\n#define GLB_REG_GPIO_29_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_29_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_29_FUNC_SEL_POS))\n\n/* 0x13C : GPIO_CFGCTL15 */\n#define GLB_GPIO_CFGCTL15_OFFSET      (0x13C)\n#define GLB_REG_GPIO_30_IE            GLB_REG_GPIO_30_IE\n#define GLB_REG_GPIO_30_IE_POS        (0U)\n#define GLB_REG_GPIO_30_IE_LEN        (1U)\n#define GLB_REG_GPIO_30_IE_MSK        (((1U << GLB_REG_GPIO_30_IE_LEN) - 1) << GLB_REG_GPIO_30_IE_POS)\n#define GLB_REG_GPIO_30_IE_UMSK       (~(((1U << GLB_REG_GPIO_30_IE_LEN) - 1) << GLB_REG_GPIO_30_IE_POS))\n#define GLB_REG_GPIO_30_SMT           GLB_REG_GPIO_30_SMT\n#define GLB_REG_GPIO_30_SMT_POS       (1U)\n#define GLB_REG_GPIO_30_SMT_LEN       (1U)\n#define GLB_REG_GPIO_30_SMT_MSK       (((1U << GLB_REG_GPIO_30_SMT_LEN) - 1) << GLB_REG_GPIO_30_SMT_POS)\n#define GLB_REG_GPIO_30_SMT_UMSK      (~(((1U << GLB_REG_GPIO_30_SMT_LEN) - 1) << GLB_REG_GPIO_30_SMT_POS))\n#define GLB_REG_GPIO_30_DRV           GLB_REG_GPIO_30_DRV\n#define GLB_REG_GPIO_30_DRV_POS       (2U)\n#define GLB_REG_GPIO_30_DRV_LEN       (2U)\n#define GLB_REG_GPIO_30_DRV_MSK       (((1U << GLB_REG_GPIO_30_DRV_LEN) - 1) << GLB_REG_GPIO_30_DRV_POS)\n#define GLB_REG_GPIO_30_DRV_UMSK      (~(((1U << GLB_REG_GPIO_30_DRV_LEN) - 1) << GLB_REG_GPIO_30_DRV_POS))\n#define GLB_REG_GPIO_30_PU            GLB_REG_GPIO_30_PU\n#define GLB_REG_GPIO_30_PU_POS        (4U)\n#define GLB_REG_GPIO_30_PU_LEN        (1U)\n#define GLB_REG_GPIO_30_PU_MSK        (((1U << GLB_REG_GPIO_30_PU_LEN) - 1) << GLB_REG_GPIO_30_PU_POS)\n#define GLB_REG_GPIO_30_PU_UMSK       (~(((1U << GLB_REG_GPIO_30_PU_LEN) - 1) << GLB_REG_GPIO_30_PU_POS))\n#define GLB_REG_GPIO_30_PD            GLB_REG_GPIO_30_PD\n#define GLB_REG_GPIO_30_PD_POS        (5U)\n#define GLB_REG_GPIO_30_PD_LEN        (1U)\n#define GLB_REG_GPIO_30_PD_MSK        (((1U << GLB_REG_GPIO_30_PD_LEN) - 1) << GLB_REG_GPIO_30_PD_POS)\n#define GLB_REG_GPIO_30_PD_UMSK       (~(((1U << GLB_REG_GPIO_30_PD_LEN) - 1) << GLB_REG_GPIO_30_PD_POS))\n#define GLB_REG_GPIO_30_FUNC_SEL      GLB_REG_GPIO_30_FUNC_SEL\n#define GLB_REG_GPIO_30_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_30_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_30_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_30_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_30_FUNC_SEL_POS)\n#define GLB_REG_GPIO_30_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_30_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_30_FUNC_SEL_POS))\n#define GLB_REG_GPIO_31_IE            GLB_REG_GPIO_31_IE\n#define GLB_REG_GPIO_31_IE_POS        (16U)\n#define GLB_REG_GPIO_31_IE_LEN        (1U)\n#define GLB_REG_GPIO_31_IE_MSK        (((1U << GLB_REG_GPIO_31_IE_LEN) - 1) << GLB_REG_GPIO_31_IE_POS)\n#define GLB_REG_GPIO_31_IE_UMSK       (~(((1U << GLB_REG_GPIO_31_IE_LEN) - 1) << GLB_REG_GPIO_31_IE_POS))\n#define GLB_REG_GPIO_31_SMT           GLB_REG_GPIO_31_SMT\n#define GLB_REG_GPIO_31_SMT_POS       (17U)\n#define GLB_REG_GPIO_31_SMT_LEN       (1U)\n#define GLB_REG_GPIO_31_SMT_MSK       (((1U << GLB_REG_GPIO_31_SMT_LEN) - 1) << GLB_REG_GPIO_31_SMT_POS)\n#define GLB_REG_GPIO_31_SMT_UMSK      (~(((1U << GLB_REG_GPIO_31_SMT_LEN) - 1) << GLB_REG_GPIO_31_SMT_POS))\n#define GLB_REG_GPIO_31_DRV           GLB_REG_GPIO_31_DRV\n#define GLB_REG_GPIO_31_DRV_POS       (18U)\n#define GLB_REG_GPIO_31_DRV_LEN       (2U)\n#define GLB_REG_GPIO_31_DRV_MSK       (((1U << GLB_REG_GPIO_31_DRV_LEN) - 1) << GLB_REG_GPIO_31_DRV_POS)\n#define GLB_REG_GPIO_31_DRV_UMSK      (~(((1U << GLB_REG_GPIO_31_DRV_LEN) - 1) << GLB_REG_GPIO_31_DRV_POS))\n#define GLB_REG_GPIO_31_PU            GLB_REG_GPIO_31_PU\n#define GLB_REG_GPIO_31_PU_POS        (20U)\n#define GLB_REG_GPIO_31_PU_LEN        (1U)\n#define GLB_REG_GPIO_31_PU_MSK        (((1U << GLB_REG_GPIO_31_PU_LEN) - 1) << GLB_REG_GPIO_31_PU_POS)\n#define GLB_REG_GPIO_31_PU_UMSK       (~(((1U << GLB_REG_GPIO_31_PU_LEN) - 1) << GLB_REG_GPIO_31_PU_POS))\n#define GLB_REG_GPIO_31_PD            GLB_REG_GPIO_31_PD\n#define GLB_REG_GPIO_31_PD_POS        (21U)\n#define GLB_REG_GPIO_31_PD_LEN        (1U)\n#define GLB_REG_GPIO_31_PD_MSK        (((1U << GLB_REG_GPIO_31_PD_LEN) - 1) << GLB_REG_GPIO_31_PD_POS)\n#define GLB_REG_GPIO_31_PD_UMSK       (~(((1U << GLB_REG_GPIO_31_PD_LEN) - 1) << GLB_REG_GPIO_31_PD_POS))\n#define GLB_REG_GPIO_31_FUNC_SEL      GLB_REG_GPIO_31_FUNC_SEL\n#define GLB_REG_GPIO_31_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_31_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_31_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_31_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_31_FUNC_SEL_POS)\n#define GLB_REG_GPIO_31_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_31_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_31_FUNC_SEL_POS))\n\n/* 0x140 : GPIO_CFGCTL16 */\n#define GLB_GPIO_CFGCTL16_OFFSET (0x140)\n#define GLB_REG_GPIO_32_IE       GLB_REG_GPIO_32_IE\n#define GLB_REG_GPIO_32_IE_POS   (0U)\n#define GLB_REG_GPIO_32_IE_LEN   (1U)\n#define GLB_REG_GPIO_32_IE_MSK   (((1U << GLB_REG_GPIO_32_IE_LEN) - 1) << GLB_REG_GPIO_32_IE_POS)\n#define GLB_REG_GPIO_32_IE_UMSK  (~(((1U << GLB_REG_GPIO_32_IE_LEN) - 1) << GLB_REG_GPIO_32_IE_POS))\n#define GLB_REG_GPIO_32_SMT      GLB_REG_GPIO_32_SMT\n#define GLB_REG_GPIO_32_SMT_POS  (1U)\n#define GLB_REG_GPIO_32_SMT_LEN  (1U)\n#define GLB_REG_GPIO_32_SMT_MSK  (((1U << GLB_REG_GPIO_32_SMT_LEN) - 1) << GLB_REG_GPIO_32_SMT_POS)\n#define GLB_REG_GPIO_32_SMT_UMSK (~(((1U << GLB_REG_GPIO_32_SMT_LEN) - 1) << GLB_REG_GPIO_32_SMT_POS))\n#define GLB_REG_GPIO_32_DRV      GLB_REG_GPIO_32_DRV\n#define GLB_REG_GPIO_32_DRV_POS  (2U)\n#define GLB_REG_GPIO_32_DRV_LEN  (2U)\n#define GLB_REG_GPIO_32_DRV_MSK  (((1U << GLB_REG_GPIO_32_DRV_LEN) - 1) << GLB_REG_GPIO_32_DRV_POS)\n#define GLB_REG_GPIO_32_DRV_UMSK (~(((1U << GLB_REG_GPIO_32_DRV_LEN) - 1) << GLB_REG_GPIO_32_DRV_POS))\n#define GLB_REG_GPIO_32_PU       GLB_REG_GPIO_32_PU\n#define GLB_REG_GPIO_32_PU_POS   (4U)\n#define GLB_REG_GPIO_32_PU_LEN   (1U)\n#define GLB_REG_GPIO_32_PU_MSK   (((1U << GLB_REG_GPIO_32_PU_LEN) - 1) << GLB_REG_GPIO_32_PU_POS)\n#define GLB_REG_GPIO_32_PU_UMSK  (~(((1U << GLB_REG_GPIO_32_PU_LEN) - 1) << GLB_REG_GPIO_32_PU_POS))\n#define GLB_REG_GPIO_32_PD       GLB_REG_GPIO_32_PD\n#define GLB_REG_GPIO_32_PD_POS   (5U)\n#define GLB_REG_GPIO_32_PD_LEN   (1U)\n#define GLB_REG_GPIO_32_PD_MSK   (((1U << GLB_REG_GPIO_32_PD_LEN) - 1) << GLB_REG_GPIO_32_PD_POS)\n#define GLB_REG_GPIO_32_PD_UMSK  (~(((1U << GLB_REG_GPIO_32_PD_LEN) - 1) << GLB_REG_GPIO_32_PD_POS))\n#define GLB_REG_GPIO_33_IE       GLB_REG_GPIO_33_IE\n#define GLB_REG_GPIO_33_IE_POS   (16U)\n#define GLB_REG_GPIO_33_IE_LEN   (1U)\n#define GLB_REG_GPIO_33_IE_MSK   (((1U << GLB_REG_GPIO_33_IE_LEN) - 1) << GLB_REG_GPIO_33_IE_POS)\n#define GLB_REG_GPIO_33_IE_UMSK  (~(((1U << GLB_REG_GPIO_33_IE_LEN) - 1) << GLB_REG_GPIO_33_IE_POS))\n#define GLB_REG_GPIO_33_SMT      GLB_REG_GPIO_33_SMT\n#define GLB_REG_GPIO_33_SMT_POS  (17U)\n#define GLB_REG_GPIO_33_SMT_LEN  (1U)\n#define GLB_REG_GPIO_33_SMT_MSK  (((1U << GLB_REG_GPIO_33_SMT_LEN) - 1) << GLB_REG_GPIO_33_SMT_POS)\n#define GLB_REG_GPIO_33_SMT_UMSK (~(((1U << GLB_REG_GPIO_33_SMT_LEN) - 1) << GLB_REG_GPIO_33_SMT_POS))\n#define GLB_REG_GPIO_33_DRV      GLB_REG_GPIO_33_DRV\n#define GLB_REG_GPIO_33_DRV_POS  (18U)\n#define GLB_REG_GPIO_33_DRV_LEN  (2U)\n#define GLB_REG_GPIO_33_DRV_MSK  (((1U << GLB_REG_GPIO_33_DRV_LEN) - 1) << GLB_REG_GPIO_33_DRV_POS)\n#define GLB_REG_GPIO_33_DRV_UMSK (~(((1U << GLB_REG_GPIO_33_DRV_LEN) - 1) << GLB_REG_GPIO_33_DRV_POS))\n#define GLB_REG_GPIO_33_PU       GLB_REG_GPIO_33_PU\n#define GLB_REG_GPIO_33_PU_POS   (20U)\n#define GLB_REG_GPIO_33_PU_LEN   (1U)\n#define GLB_REG_GPIO_33_PU_MSK   (((1U << GLB_REG_GPIO_33_PU_LEN) - 1) << GLB_REG_GPIO_33_PU_POS)\n#define GLB_REG_GPIO_33_PU_UMSK  (~(((1U << GLB_REG_GPIO_33_PU_LEN) - 1) << GLB_REG_GPIO_33_PU_POS))\n#define GLB_REG_GPIO_33_PD       GLB_REG_GPIO_33_PD\n#define GLB_REG_GPIO_33_PD_POS   (21U)\n#define GLB_REG_GPIO_33_PD_LEN   (1U)\n#define GLB_REG_GPIO_33_PD_MSK   (((1U << GLB_REG_GPIO_33_PD_LEN) - 1) << GLB_REG_GPIO_33_PD_POS)\n#define GLB_REG_GPIO_33_PD_UMSK  (~(((1U << GLB_REG_GPIO_33_PD_LEN) - 1) << GLB_REG_GPIO_33_PD_POS))\n\n/* 0x144 : GPIO_CFGCTL17 */\n#define GLB_GPIO_CFGCTL17_OFFSET (0x144)\n#define GLB_REG_GPIO_34_IE       GLB_REG_GPIO_34_IE\n#define GLB_REG_GPIO_34_IE_POS   (0U)\n#define GLB_REG_GPIO_34_IE_LEN   (1U)\n#define GLB_REG_GPIO_34_IE_MSK   (((1U << GLB_REG_GPIO_34_IE_LEN) - 1) << GLB_REG_GPIO_34_IE_POS)\n#define GLB_REG_GPIO_34_IE_UMSK  (~(((1U << GLB_REG_GPIO_34_IE_LEN) - 1) << GLB_REG_GPIO_34_IE_POS))\n#define GLB_REG_GPIO_34_SMT      GLB_REG_GPIO_34_SMT\n#define GLB_REG_GPIO_34_SMT_POS  (1U)\n#define GLB_REG_GPIO_34_SMT_LEN  (1U)\n#define GLB_REG_GPIO_34_SMT_MSK  (((1U << GLB_REG_GPIO_34_SMT_LEN) - 1) << GLB_REG_GPIO_34_SMT_POS)\n#define GLB_REG_GPIO_34_SMT_UMSK (~(((1U << GLB_REG_GPIO_34_SMT_LEN) - 1) << GLB_REG_GPIO_34_SMT_POS))\n#define GLB_REG_GPIO_34_DRV      GLB_REG_GPIO_34_DRV\n#define GLB_REG_GPIO_34_DRV_POS  (2U)\n#define GLB_REG_GPIO_34_DRV_LEN  (2U)\n#define GLB_REG_GPIO_34_DRV_MSK  (((1U << GLB_REG_GPIO_34_DRV_LEN) - 1) << GLB_REG_GPIO_34_DRV_POS)\n#define GLB_REG_GPIO_34_DRV_UMSK (~(((1U << GLB_REG_GPIO_34_DRV_LEN) - 1) << GLB_REG_GPIO_34_DRV_POS))\n#define GLB_REG_GPIO_34_PU       GLB_REG_GPIO_34_PU\n#define GLB_REG_GPIO_34_PU_POS   (4U)\n#define GLB_REG_GPIO_34_PU_LEN   (1U)\n#define GLB_REG_GPIO_34_PU_MSK   (((1U << GLB_REG_GPIO_34_PU_LEN) - 1) << GLB_REG_GPIO_34_PU_POS)\n#define GLB_REG_GPIO_34_PU_UMSK  (~(((1U << GLB_REG_GPIO_34_PU_LEN) - 1) << GLB_REG_GPIO_34_PU_POS))\n#define GLB_REG_GPIO_34_PD       GLB_REG_GPIO_34_PD\n#define GLB_REG_GPIO_34_PD_POS   (5U)\n#define GLB_REG_GPIO_34_PD_LEN   (1U)\n#define GLB_REG_GPIO_34_PD_MSK   (((1U << GLB_REG_GPIO_34_PD_LEN) - 1) << GLB_REG_GPIO_34_PD_POS)\n#define GLB_REG_GPIO_34_PD_UMSK  (~(((1U << GLB_REG_GPIO_34_PD_LEN) - 1) << GLB_REG_GPIO_34_PD_POS))\n#define GLB_REG_GPIO_35_IE       GLB_REG_GPIO_35_IE\n#define GLB_REG_GPIO_35_IE_POS   (16U)\n#define GLB_REG_GPIO_35_IE_LEN   (1U)\n#define GLB_REG_GPIO_35_IE_MSK   (((1U << GLB_REG_GPIO_35_IE_LEN) - 1) << GLB_REG_GPIO_35_IE_POS)\n#define GLB_REG_GPIO_35_IE_UMSK  (~(((1U << GLB_REG_GPIO_35_IE_LEN) - 1) << GLB_REG_GPIO_35_IE_POS))\n#define GLB_REG_GPIO_35_SMT      GLB_REG_GPIO_35_SMT\n#define GLB_REG_GPIO_35_SMT_POS  (17U)\n#define GLB_REG_GPIO_35_SMT_LEN  (1U)\n#define GLB_REG_GPIO_35_SMT_MSK  (((1U << GLB_REG_GPIO_35_SMT_LEN) - 1) << GLB_REG_GPIO_35_SMT_POS)\n#define GLB_REG_GPIO_35_SMT_UMSK (~(((1U << GLB_REG_GPIO_35_SMT_LEN) - 1) << GLB_REG_GPIO_35_SMT_POS))\n#define GLB_REG_GPIO_35_DRV      GLB_REG_GPIO_35_DRV\n#define GLB_REG_GPIO_35_DRV_POS  (18U)\n#define GLB_REG_GPIO_35_DRV_LEN  (2U)\n#define GLB_REG_GPIO_35_DRV_MSK  (((1U << GLB_REG_GPIO_35_DRV_LEN) - 1) << GLB_REG_GPIO_35_DRV_POS)\n#define GLB_REG_GPIO_35_DRV_UMSK (~(((1U << GLB_REG_GPIO_35_DRV_LEN) - 1) << GLB_REG_GPIO_35_DRV_POS))\n#define GLB_REG_GPIO_35_PU       GLB_REG_GPIO_35_PU\n#define GLB_REG_GPIO_35_PU_POS   (20U)\n#define GLB_REG_GPIO_35_PU_LEN   (1U)\n#define GLB_REG_GPIO_35_PU_MSK   (((1U << GLB_REG_GPIO_35_PU_LEN) - 1) << GLB_REG_GPIO_35_PU_POS)\n#define GLB_REG_GPIO_35_PU_UMSK  (~(((1U << GLB_REG_GPIO_35_PU_LEN) - 1) << GLB_REG_GPIO_35_PU_POS))\n#define GLB_REG_GPIO_35_PD       GLB_REG_GPIO_35_PD\n#define GLB_REG_GPIO_35_PD_POS   (21U)\n#define GLB_REG_GPIO_35_PD_LEN   (1U)\n#define GLB_REG_GPIO_35_PD_MSK   (((1U << GLB_REG_GPIO_35_PD_LEN) - 1) << GLB_REG_GPIO_35_PD_POS)\n#define GLB_REG_GPIO_35_PD_UMSK  (~(((1U << GLB_REG_GPIO_35_PD_LEN) - 1) << GLB_REG_GPIO_35_PD_POS))\n\n/* 0x148 : GPIO_CFGCTL18 */\n#define GLB_GPIO_CFGCTL18_OFFSET (0x148)\n#define GLB_REG_GPIO_36_IE       GLB_REG_GPIO_36_IE\n#define GLB_REG_GPIO_36_IE_POS   (0U)\n#define GLB_REG_GPIO_36_IE_LEN   (1U)\n#define GLB_REG_GPIO_36_IE_MSK   (((1U << GLB_REG_GPIO_36_IE_LEN) - 1) << GLB_REG_GPIO_36_IE_POS)\n#define GLB_REG_GPIO_36_IE_UMSK  (~(((1U << GLB_REG_GPIO_36_IE_LEN) - 1) << GLB_REG_GPIO_36_IE_POS))\n#define GLB_REG_GPIO_36_SMT      GLB_REG_GPIO_36_SMT\n#define GLB_REG_GPIO_36_SMT_POS  (1U)\n#define GLB_REG_GPIO_36_SMT_LEN  (1U)\n#define GLB_REG_GPIO_36_SMT_MSK  (((1U << GLB_REG_GPIO_36_SMT_LEN) - 1) << GLB_REG_GPIO_36_SMT_POS)\n#define GLB_REG_GPIO_36_SMT_UMSK (~(((1U << GLB_REG_GPIO_36_SMT_LEN) - 1) << GLB_REG_GPIO_36_SMT_POS))\n#define GLB_REG_GPIO_36_DRV      GLB_REG_GPIO_36_DRV\n#define GLB_REG_GPIO_36_DRV_POS  (2U)\n#define GLB_REG_GPIO_36_DRV_LEN  (2U)\n#define GLB_REG_GPIO_36_DRV_MSK  (((1U << GLB_REG_GPIO_36_DRV_LEN) - 1) << GLB_REG_GPIO_36_DRV_POS)\n#define GLB_REG_GPIO_36_DRV_UMSK (~(((1U << GLB_REG_GPIO_36_DRV_LEN) - 1) << GLB_REG_GPIO_36_DRV_POS))\n#define GLB_REG_GPIO_36_PU       GLB_REG_GPIO_36_PU\n#define GLB_REG_GPIO_36_PU_POS   (4U)\n#define GLB_REG_GPIO_36_PU_LEN   (1U)\n#define GLB_REG_GPIO_36_PU_MSK   (((1U << GLB_REG_GPIO_36_PU_LEN) - 1) << GLB_REG_GPIO_36_PU_POS)\n#define GLB_REG_GPIO_36_PU_UMSK  (~(((1U << GLB_REG_GPIO_36_PU_LEN) - 1) << GLB_REG_GPIO_36_PU_POS))\n#define GLB_REG_GPIO_36_PD       GLB_REG_GPIO_36_PD\n#define GLB_REG_GPIO_36_PD_POS   (5U)\n#define GLB_REG_GPIO_36_PD_LEN   (1U)\n#define GLB_REG_GPIO_36_PD_MSK   (((1U << GLB_REG_GPIO_36_PD_LEN) - 1) << GLB_REG_GPIO_36_PD_POS)\n#define GLB_REG_GPIO_36_PD_UMSK  (~(((1U << GLB_REG_GPIO_36_PD_LEN) - 1) << GLB_REG_GPIO_36_PD_POS))\n#define GLB_REG_GPIO_37_IE       GLB_REG_GPIO_37_IE\n#define GLB_REG_GPIO_37_IE_POS   (16U)\n#define GLB_REG_GPIO_37_IE_LEN   (1U)\n#define GLB_REG_GPIO_37_IE_MSK   (((1U << GLB_REG_GPIO_37_IE_LEN) - 1) << GLB_REG_GPIO_37_IE_POS)\n#define GLB_REG_GPIO_37_IE_UMSK  (~(((1U << GLB_REG_GPIO_37_IE_LEN) - 1) << GLB_REG_GPIO_37_IE_POS))\n#define GLB_REG_GPIO_37_SMT      GLB_REG_GPIO_37_SMT\n#define GLB_REG_GPIO_37_SMT_POS  (17U)\n#define GLB_REG_GPIO_37_SMT_LEN  (1U)\n#define GLB_REG_GPIO_37_SMT_MSK  (((1U << GLB_REG_GPIO_37_SMT_LEN) - 1) << GLB_REG_GPIO_37_SMT_POS)\n#define GLB_REG_GPIO_37_SMT_UMSK (~(((1U << GLB_REG_GPIO_37_SMT_LEN) - 1) << GLB_REG_GPIO_37_SMT_POS))\n#define GLB_REG_GPIO_37_DRV      GLB_REG_GPIO_37_DRV\n#define GLB_REG_GPIO_37_DRV_POS  (18U)\n#define GLB_REG_GPIO_37_DRV_LEN  (2U)\n#define GLB_REG_GPIO_37_DRV_MSK  (((1U << GLB_REG_GPIO_37_DRV_LEN) - 1) << GLB_REG_GPIO_37_DRV_POS)\n#define GLB_REG_GPIO_37_DRV_UMSK (~(((1U << GLB_REG_GPIO_37_DRV_LEN) - 1) << GLB_REG_GPIO_37_DRV_POS))\n#define GLB_REG_GPIO_37_PU       GLB_REG_GPIO_37_PU\n#define GLB_REG_GPIO_37_PU_POS   (20U)\n#define GLB_REG_GPIO_37_PU_LEN   (1U)\n#define GLB_REG_GPIO_37_PU_MSK   (((1U << GLB_REG_GPIO_37_PU_LEN) - 1) << GLB_REG_GPIO_37_PU_POS)\n#define GLB_REG_GPIO_37_PU_UMSK  (~(((1U << GLB_REG_GPIO_37_PU_LEN) - 1) << GLB_REG_GPIO_37_PU_POS))\n#define GLB_REG_GPIO_37_PD       GLB_REG_GPIO_37_PD\n#define GLB_REG_GPIO_37_PD_POS   (21U)\n#define GLB_REG_GPIO_37_PD_LEN   (1U)\n#define GLB_REG_GPIO_37_PD_MSK   (((1U << GLB_REG_GPIO_37_PD_LEN) - 1) << GLB_REG_GPIO_37_PD_POS)\n#define GLB_REG_GPIO_37_PD_UMSK  (~(((1U << GLB_REG_GPIO_37_PD_LEN) - 1) << GLB_REG_GPIO_37_PD_POS))\n\n/* 0x180 : GPIO_CFGCTL30 */\n#define GLB_GPIO_CFGCTL30_OFFSET (0x180)\n#define GLB_REG_GPIO_0_I         GLB_REG_GPIO_0_I\n#define GLB_REG_GPIO_0_I_POS     (0U)\n#define GLB_REG_GPIO_0_I_LEN     (1U)\n#define GLB_REG_GPIO_0_I_MSK     (((1U << GLB_REG_GPIO_0_I_LEN) - 1) << GLB_REG_GPIO_0_I_POS)\n#define GLB_REG_GPIO_0_I_UMSK    (~(((1U << GLB_REG_GPIO_0_I_LEN) - 1) << GLB_REG_GPIO_0_I_POS))\n#define GLB_REG_GPIO_1_I         GLB_REG_GPIO_1_I\n#define GLB_REG_GPIO_1_I_POS     (1U)\n#define GLB_REG_GPIO_1_I_LEN     (1U)\n#define GLB_REG_GPIO_1_I_MSK     (((1U << GLB_REG_GPIO_1_I_LEN) - 1) << GLB_REG_GPIO_1_I_POS)\n#define GLB_REG_GPIO_1_I_UMSK    (~(((1U << GLB_REG_GPIO_1_I_LEN) - 1) << GLB_REG_GPIO_1_I_POS))\n#define GLB_REG_GPIO_2_I         GLB_REG_GPIO_2_I\n#define GLB_REG_GPIO_2_I_POS     (2U)\n#define GLB_REG_GPIO_2_I_LEN     (1U)\n#define GLB_REG_GPIO_2_I_MSK     (((1U << GLB_REG_GPIO_2_I_LEN) - 1) << GLB_REG_GPIO_2_I_POS)\n#define GLB_REG_GPIO_2_I_UMSK    (~(((1U << GLB_REG_GPIO_2_I_LEN) - 1) << GLB_REG_GPIO_2_I_POS))\n#define GLB_REG_GPIO_3_I         GLB_REG_GPIO_3_I\n#define GLB_REG_GPIO_3_I_POS     (3U)\n#define GLB_REG_GPIO_3_I_LEN     (1U)\n#define GLB_REG_GPIO_3_I_MSK     (((1U << GLB_REG_GPIO_3_I_LEN) - 1) << GLB_REG_GPIO_3_I_POS)\n#define GLB_REG_GPIO_3_I_UMSK    (~(((1U << GLB_REG_GPIO_3_I_LEN) - 1) << GLB_REG_GPIO_3_I_POS))\n#define GLB_REG_GPIO_4_I         GLB_REG_GPIO_4_I\n#define GLB_REG_GPIO_4_I_POS     (4U)\n#define GLB_REG_GPIO_4_I_LEN     (1U)\n#define GLB_REG_GPIO_4_I_MSK     (((1U << GLB_REG_GPIO_4_I_LEN) - 1) << GLB_REG_GPIO_4_I_POS)\n#define GLB_REG_GPIO_4_I_UMSK    (~(((1U << GLB_REG_GPIO_4_I_LEN) - 1) << GLB_REG_GPIO_4_I_POS))\n#define GLB_REG_GPIO_5_I         GLB_REG_GPIO_5_I\n#define GLB_REG_GPIO_5_I_POS     (5U)\n#define GLB_REG_GPIO_5_I_LEN     (1U)\n#define GLB_REG_GPIO_5_I_MSK     (((1U << GLB_REG_GPIO_5_I_LEN) - 1) << GLB_REG_GPIO_5_I_POS)\n#define GLB_REG_GPIO_5_I_UMSK    (~(((1U << GLB_REG_GPIO_5_I_LEN) - 1) << GLB_REG_GPIO_5_I_POS))\n#define GLB_REG_GPIO_6_I         GLB_REG_GPIO_6_I\n#define GLB_REG_GPIO_6_I_POS     (6U)\n#define GLB_REG_GPIO_6_I_LEN     (1U)\n#define GLB_REG_GPIO_6_I_MSK     (((1U << GLB_REG_GPIO_6_I_LEN) - 1) << GLB_REG_GPIO_6_I_POS)\n#define GLB_REG_GPIO_6_I_UMSK    (~(((1U << GLB_REG_GPIO_6_I_LEN) - 1) << GLB_REG_GPIO_6_I_POS))\n#define GLB_REG_GPIO_7_I         GLB_REG_GPIO_7_I\n#define GLB_REG_GPIO_7_I_POS     (7U)\n#define GLB_REG_GPIO_7_I_LEN     (1U)\n#define GLB_REG_GPIO_7_I_MSK     (((1U << GLB_REG_GPIO_7_I_LEN) - 1) << GLB_REG_GPIO_7_I_POS)\n#define GLB_REG_GPIO_7_I_UMSK    (~(((1U << GLB_REG_GPIO_7_I_LEN) - 1) << GLB_REG_GPIO_7_I_POS))\n#define GLB_REG_GPIO_8_I         GLB_REG_GPIO_8_I\n#define GLB_REG_GPIO_8_I_POS     (8U)\n#define GLB_REG_GPIO_8_I_LEN     (1U)\n#define GLB_REG_GPIO_8_I_MSK     (((1U << GLB_REG_GPIO_8_I_LEN) - 1) << GLB_REG_GPIO_8_I_POS)\n#define GLB_REG_GPIO_8_I_UMSK    (~(((1U << GLB_REG_GPIO_8_I_LEN) - 1) << GLB_REG_GPIO_8_I_POS))\n#define GLB_REG_GPIO_9_I         GLB_REG_GPIO_9_I\n#define GLB_REG_GPIO_9_I_POS     (9U)\n#define GLB_REG_GPIO_9_I_LEN     (1U)\n#define GLB_REG_GPIO_9_I_MSK     (((1U << GLB_REG_GPIO_9_I_LEN) - 1) << GLB_REG_GPIO_9_I_POS)\n#define GLB_REG_GPIO_9_I_UMSK    (~(((1U << GLB_REG_GPIO_9_I_LEN) - 1) << GLB_REG_GPIO_9_I_POS))\n#define GLB_REG_GPIO_10_I        GLB_REG_GPIO_10_I\n#define GLB_REG_GPIO_10_I_POS    (10U)\n#define GLB_REG_GPIO_10_I_LEN    (1U)\n#define GLB_REG_GPIO_10_I_MSK    (((1U << GLB_REG_GPIO_10_I_LEN) - 1) << GLB_REG_GPIO_10_I_POS)\n#define GLB_REG_GPIO_10_I_UMSK   (~(((1U << GLB_REG_GPIO_10_I_LEN) - 1) << GLB_REG_GPIO_10_I_POS))\n#define GLB_REG_GPIO_11_I        GLB_REG_GPIO_11_I\n#define GLB_REG_GPIO_11_I_POS    (11U)\n#define GLB_REG_GPIO_11_I_LEN    (1U)\n#define GLB_REG_GPIO_11_I_MSK    (((1U << GLB_REG_GPIO_11_I_LEN) - 1) << GLB_REG_GPIO_11_I_POS)\n#define GLB_REG_GPIO_11_I_UMSK   (~(((1U << GLB_REG_GPIO_11_I_LEN) - 1) << GLB_REG_GPIO_11_I_POS))\n#define GLB_REG_GPIO_12_I        GLB_REG_GPIO_12_I\n#define GLB_REG_GPIO_12_I_POS    (12U)\n#define GLB_REG_GPIO_12_I_LEN    (1U)\n#define GLB_REG_GPIO_12_I_MSK    (((1U << GLB_REG_GPIO_12_I_LEN) - 1) << GLB_REG_GPIO_12_I_POS)\n#define GLB_REG_GPIO_12_I_UMSK   (~(((1U << GLB_REG_GPIO_12_I_LEN) - 1) << GLB_REG_GPIO_12_I_POS))\n#define GLB_REG_GPIO_13_I        GLB_REG_GPIO_13_I\n#define GLB_REG_GPIO_13_I_POS    (13U)\n#define GLB_REG_GPIO_13_I_LEN    (1U)\n#define GLB_REG_GPIO_13_I_MSK    (((1U << GLB_REG_GPIO_13_I_LEN) - 1) << GLB_REG_GPIO_13_I_POS)\n#define GLB_REG_GPIO_13_I_UMSK   (~(((1U << GLB_REG_GPIO_13_I_LEN) - 1) << GLB_REG_GPIO_13_I_POS))\n#define GLB_REG_GPIO_14_I        GLB_REG_GPIO_14_I\n#define GLB_REG_GPIO_14_I_POS    (14U)\n#define GLB_REG_GPIO_14_I_LEN    (1U)\n#define GLB_REG_GPIO_14_I_MSK    (((1U << GLB_REG_GPIO_14_I_LEN) - 1) << GLB_REG_GPIO_14_I_POS)\n#define GLB_REG_GPIO_14_I_UMSK   (~(((1U << GLB_REG_GPIO_14_I_LEN) - 1) << GLB_REG_GPIO_14_I_POS))\n#define GLB_REG_GPIO_15_I        GLB_REG_GPIO_15_I\n#define GLB_REG_GPIO_15_I_POS    (15U)\n#define GLB_REG_GPIO_15_I_LEN    (1U)\n#define GLB_REG_GPIO_15_I_MSK    (((1U << GLB_REG_GPIO_15_I_LEN) - 1) << GLB_REG_GPIO_15_I_POS)\n#define GLB_REG_GPIO_15_I_UMSK   (~(((1U << GLB_REG_GPIO_15_I_LEN) - 1) << GLB_REG_GPIO_15_I_POS))\n#define GLB_REG_GPIO_16_I        GLB_REG_GPIO_16_I\n#define GLB_REG_GPIO_16_I_POS    (16U)\n#define GLB_REG_GPIO_16_I_LEN    (1U)\n#define GLB_REG_GPIO_16_I_MSK    (((1U << GLB_REG_GPIO_16_I_LEN) - 1) << GLB_REG_GPIO_16_I_POS)\n#define GLB_REG_GPIO_16_I_UMSK   (~(((1U << GLB_REG_GPIO_16_I_LEN) - 1) << GLB_REG_GPIO_16_I_POS))\n#define GLB_REG_GPIO_17_I        GLB_REG_GPIO_17_I\n#define GLB_REG_GPIO_17_I_POS    (17U)\n#define GLB_REG_GPIO_17_I_LEN    (1U)\n#define GLB_REG_GPIO_17_I_MSK    (((1U << GLB_REG_GPIO_17_I_LEN) - 1) << GLB_REG_GPIO_17_I_POS)\n#define GLB_REG_GPIO_17_I_UMSK   (~(((1U << GLB_REG_GPIO_17_I_LEN) - 1) << GLB_REG_GPIO_17_I_POS))\n#define GLB_REG_GPIO_18_I        GLB_REG_GPIO_18_I\n#define GLB_REG_GPIO_18_I_POS    (18U)\n#define GLB_REG_GPIO_18_I_LEN    (1U)\n#define GLB_REG_GPIO_18_I_MSK    (((1U << GLB_REG_GPIO_18_I_LEN) - 1) << GLB_REG_GPIO_18_I_POS)\n#define GLB_REG_GPIO_18_I_UMSK   (~(((1U << GLB_REG_GPIO_18_I_LEN) - 1) << GLB_REG_GPIO_18_I_POS))\n#define GLB_REG_GPIO_19_I        GLB_REG_GPIO_19_I\n#define GLB_REG_GPIO_19_I_POS    (19U)\n#define GLB_REG_GPIO_19_I_LEN    (1U)\n#define GLB_REG_GPIO_19_I_MSK    (((1U << GLB_REG_GPIO_19_I_LEN) - 1) << GLB_REG_GPIO_19_I_POS)\n#define GLB_REG_GPIO_19_I_UMSK   (~(((1U << GLB_REG_GPIO_19_I_LEN) - 1) << GLB_REG_GPIO_19_I_POS))\n#define GLB_REG_GPIO_20_I        GLB_REG_GPIO_20_I\n#define GLB_REG_GPIO_20_I_POS    (20U)\n#define GLB_REG_GPIO_20_I_LEN    (1U)\n#define GLB_REG_GPIO_20_I_MSK    (((1U << GLB_REG_GPIO_20_I_LEN) - 1) << GLB_REG_GPIO_20_I_POS)\n#define GLB_REG_GPIO_20_I_UMSK   (~(((1U << GLB_REG_GPIO_20_I_LEN) - 1) << GLB_REG_GPIO_20_I_POS))\n#define GLB_REG_GPIO_21_I        GLB_REG_GPIO_21_I\n#define GLB_REG_GPIO_21_I_POS    (21U)\n#define GLB_REG_GPIO_21_I_LEN    (1U)\n#define GLB_REG_GPIO_21_I_MSK    (((1U << GLB_REG_GPIO_21_I_LEN) - 1) << GLB_REG_GPIO_21_I_POS)\n#define GLB_REG_GPIO_21_I_UMSK   (~(((1U << GLB_REG_GPIO_21_I_LEN) - 1) << GLB_REG_GPIO_21_I_POS))\n#define GLB_REG_GPIO_22_I        GLB_REG_GPIO_22_I\n#define GLB_REG_GPIO_22_I_POS    (22U)\n#define GLB_REG_GPIO_22_I_LEN    (1U)\n#define GLB_REG_GPIO_22_I_MSK    (((1U << GLB_REG_GPIO_22_I_LEN) - 1) << GLB_REG_GPIO_22_I_POS)\n#define GLB_REG_GPIO_22_I_UMSK   (~(((1U << GLB_REG_GPIO_22_I_LEN) - 1) << GLB_REG_GPIO_22_I_POS))\n#define GLB_REG_GPIO_23_I        GLB_REG_GPIO_23_I\n#define GLB_REG_GPIO_23_I_POS    (23U)\n#define GLB_REG_GPIO_23_I_LEN    (1U)\n#define GLB_REG_GPIO_23_I_MSK    (((1U << GLB_REG_GPIO_23_I_LEN) - 1) << GLB_REG_GPIO_23_I_POS)\n#define GLB_REG_GPIO_23_I_UMSK   (~(((1U << GLB_REG_GPIO_23_I_LEN) - 1) << GLB_REG_GPIO_23_I_POS))\n#define GLB_REG_GPIO_24_I        GLB_REG_GPIO_24_I\n#define GLB_REG_GPIO_24_I_POS    (24U)\n#define GLB_REG_GPIO_24_I_LEN    (1U)\n#define GLB_REG_GPIO_24_I_MSK    (((1U << GLB_REG_GPIO_24_I_LEN) - 1) << GLB_REG_GPIO_24_I_POS)\n#define GLB_REG_GPIO_24_I_UMSK   (~(((1U << GLB_REG_GPIO_24_I_LEN) - 1) << GLB_REG_GPIO_24_I_POS))\n#define GLB_REG_GPIO_25_I        GLB_REG_GPIO_25_I\n#define GLB_REG_GPIO_25_I_POS    (25U)\n#define GLB_REG_GPIO_25_I_LEN    (1U)\n#define GLB_REG_GPIO_25_I_MSK    (((1U << GLB_REG_GPIO_25_I_LEN) - 1) << GLB_REG_GPIO_25_I_POS)\n#define GLB_REG_GPIO_25_I_UMSK   (~(((1U << GLB_REG_GPIO_25_I_LEN) - 1) << GLB_REG_GPIO_25_I_POS))\n#define GLB_REG_GPIO_26_I        GLB_REG_GPIO_26_I\n#define GLB_REG_GPIO_26_I_POS    (26U)\n#define GLB_REG_GPIO_26_I_LEN    (1U)\n#define GLB_REG_GPIO_26_I_MSK    (((1U << GLB_REG_GPIO_26_I_LEN) - 1) << GLB_REG_GPIO_26_I_POS)\n#define GLB_REG_GPIO_26_I_UMSK   (~(((1U << GLB_REG_GPIO_26_I_LEN) - 1) << GLB_REG_GPIO_26_I_POS))\n#define GLB_REG_GPIO_27_I        GLB_REG_GPIO_27_I\n#define GLB_REG_GPIO_27_I_POS    (27U)\n#define GLB_REG_GPIO_27_I_LEN    (1U)\n#define GLB_REG_GPIO_27_I_MSK    (((1U << GLB_REG_GPIO_27_I_LEN) - 1) << GLB_REG_GPIO_27_I_POS)\n#define GLB_REG_GPIO_27_I_UMSK   (~(((1U << GLB_REG_GPIO_27_I_LEN) - 1) << GLB_REG_GPIO_27_I_POS))\n#define GLB_REG_GPIO_28_I        GLB_REG_GPIO_28_I\n#define GLB_REG_GPIO_28_I_POS    (28U)\n#define GLB_REG_GPIO_28_I_LEN    (1U)\n#define GLB_REG_GPIO_28_I_MSK    (((1U << GLB_REG_GPIO_28_I_LEN) - 1) << GLB_REG_GPIO_28_I_POS)\n#define GLB_REG_GPIO_28_I_UMSK   (~(((1U << GLB_REG_GPIO_28_I_LEN) - 1) << GLB_REG_GPIO_28_I_POS))\n#define GLB_REG_GPIO_29_I        GLB_REG_GPIO_29_I\n#define GLB_REG_GPIO_29_I_POS    (29U)\n#define GLB_REG_GPIO_29_I_LEN    (1U)\n#define GLB_REG_GPIO_29_I_MSK    (((1U << GLB_REG_GPIO_29_I_LEN) - 1) << GLB_REG_GPIO_29_I_POS)\n#define GLB_REG_GPIO_29_I_UMSK   (~(((1U << GLB_REG_GPIO_29_I_LEN) - 1) << GLB_REG_GPIO_29_I_POS))\n#define GLB_REG_GPIO_30_I        GLB_REG_GPIO_30_I\n#define GLB_REG_GPIO_30_I_POS    (30U)\n#define GLB_REG_GPIO_30_I_LEN    (1U)\n#define GLB_REG_GPIO_30_I_MSK    (((1U << GLB_REG_GPIO_30_I_LEN) - 1) << GLB_REG_GPIO_30_I_POS)\n#define GLB_REG_GPIO_30_I_UMSK   (~(((1U << GLB_REG_GPIO_30_I_LEN) - 1) << GLB_REG_GPIO_30_I_POS))\n#define GLB_REG_GPIO_31_I        GLB_REG_GPIO_31_I\n#define GLB_REG_GPIO_31_I_POS    (31U)\n#define GLB_REG_GPIO_31_I_LEN    (1U)\n#define GLB_REG_GPIO_31_I_MSK    (((1U << GLB_REG_GPIO_31_I_LEN) - 1) << GLB_REG_GPIO_31_I_POS)\n#define GLB_REG_GPIO_31_I_UMSK   (~(((1U << GLB_REG_GPIO_31_I_LEN) - 1) << GLB_REG_GPIO_31_I_POS))\n\n/* 0x184 : GPIO_CFGCTL31 */\n#define GLB_GPIO_CFGCTL31_OFFSET (0x184)\n\n/* 0x188 : GPIO_CFGCTL32 */\n#define GLB_GPIO_CFGCTL32_OFFSET (0x188)\n#define GLB_REG_GPIO_0_O         GLB_REG_GPIO_0_O\n#define GLB_REG_GPIO_0_O_POS     (0U)\n#define GLB_REG_GPIO_0_O_LEN     (1U)\n#define GLB_REG_GPIO_0_O_MSK     (((1U << GLB_REG_GPIO_0_O_LEN) - 1) << GLB_REG_GPIO_0_O_POS)\n#define GLB_REG_GPIO_0_O_UMSK    (~(((1U << GLB_REG_GPIO_0_O_LEN) - 1) << GLB_REG_GPIO_0_O_POS))\n#define GLB_REG_GPIO_1_O         GLB_REG_GPIO_1_O\n#define GLB_REG_GPIO_1_O_POS     (1U)\n#define GLB_REG_GPIO_1_O_LEN     (1U)\n#define GLB_REG_GPIO_1_O_MSK     (((1U << GLB_REG_GPIO_1_O_LEN) - 1) << GLB_REG_GPIO_1_O_POS)\n#define GLB_REG_GPIO_1_O_UMSK    (~(((1U << GLB_REG_GPIO_1_O_LEN) - 1) << GLB_REG_GPIO_1_O_POS))\n#define GLB_REG_GPIO_2_O         GLB_REG_GPIO_2_O\n#define GLB_REG_GPIO_2_O_POS     (2U)\n#define GLB_REG_GPIO_2_O_LEN     (1U)\n#define GLB_REG_GPIO_2_O_MSK     (((1U << GLB_REG_GPIO_2_O_LEN) - 1) << GLB_REG_GPIO_2_O_POS)\n#define GLB_REG_GPIO_2_O_UMSK    (~(((1U << GLB_REG_GPIO_2_O_LEN) - 1) << GLB_REG_GPIO_2_O_POS))\n#define GLB_REG_GPIO_3_O         GLB_REG_GPIO_3_O\n#define GLB_REG_GPIO_3_O_POS     (3U)\n#define GLB_REG_GPIO_3_O_LEN     (1U)\n#define GLB_REG_GPIO_3_O_MSK     (((1U << GLB_REG_GPIO_3_O_LEN) - 1) << GLB_REG_GPIO_3_O_POS)\n#define GLB_REG_GPIO_3_O_UMSK    (~(((1U << GLB_REG_GPIO_3_O_LEN) - 1) << GLB_REG_GPIO_3_O_POS))\n#define GLB_REG_GPIO_4_O         GLB_REG_GPIO_4_O\n#define GLB_REG_GPIO_4_O_POS     (4U)\n#define GLB_REG_GPIO_4_O_LEN     (1U)\n#define GLB_REG_GPIO_4_O_MSK     (((1U << GLB_REG_GPIO_4_O_LEN) - 1) << GLB_REG_GPIO_4_O_POS)\n#define GLB_REG_GPIO_4_O_UMSK    (~(((1U << GLB_REG_GPIO_4_O_LEN) - 1) << GLB_REG_GPIO_4_O_POS))\n#define GLB_REG_GPIO_5_O         GLB_REG_GPIO_5_O\n#define GLB_REG_GPIO_5_O_POS     (5U)\n#define GLB_REG_GPIO_5_O_LEN     (1U)\n#define GLB_REG_GPIO_5_O_MSK     (((1U << GLB_REG_GPIO_5_O_LEN) - 1) << GLB_REG_GPIO_5_O_POS)\n#define GLB_REG_GPIO_5_O_UMSK    (~(((1U << GLB_REG_GPIO_5_O_LEN) - 1) << GLB_REG_GPIO_5_O_POS))\n#define GLB_REG_GPIO_6_O         GLB_REG_GPIO_6_O\n#define GLB_REG_GPIO_6_O_POS     (6U)\n#define GLB_REG_GPIO_6_O_LEN     (1U)\n#define GLB_REG_GPIO_6_O_MSK     (((1U << GLB_REG_GPIO_6_O_LEN) - 1) << GLB_REG_GPIO_6_O_POS)\n#define GLB_REG_GPIO_6_O_UMSK    (~(((1U << GLB_REG_GPIO_6_O_LEN) - 1) << GLB_REG_GPIO_6_O_POS))\n#define GLB_REG_GPIO_7_O         GLB_REG_GPIO_7_O\n#define GLB_REG_GPIO_7_O_POS     (7U)\n#define GLB_REG_GPIO_7_O_LEN     (1U)\n#define GLB_REG_GPIO_7_O_MSK     (((1U << GLB_REG_GPIO_7_O_LEN) - 1) << GLB_REG_GPIO_7_O_POS)\n#define GLB_REG_GPIO_7_O_UMSK    (~(((1U << GLB_REG_GPIO_7_O_LEN) - 1) << GLB_REG_GPIO_7_O_POS))\n#define GLB_REG_GPIO_8_O         GLB_REG_GPIO_8_O\n#define GLB_REG_GPIO_8_O_POS     (8U)\n#define GLB_REG_GPIO_8_O_LEN     (1U)\n#define GLB_REG_GPIO_8_O_MSK     (((1U << GLB_REG_GPIO_8_O_LEN) - 1) << GLB_REG_GPIO_8_O_POS)\n#define GLB_REG_GPIO_8_O_UMSK    (~(((1U << GLB_REG_GPIO_8_O_LEN) - 1) << GLB_REG_GPIO_8_O_POS))\n#define GLB_REG_GPIO_9_O         GLB_REG_GPIO_9_O\n#define GLB_REG_GPIO_9_O_POS     (9U)\n#define GLB_REG_GPIO_9_O_LEN     (1U)\n#define GLB_REG_GPIO_9_O_MSK     (((1U << GLB_REG_GPIO_9_O_LEN) - 1) << GLB_REG_GPIO_9_O_POS)\n#define GLB_REG_GPIO_9_O_UMSK    (~(((1U << GLB_REG_GPIO_9_O_LEN) - 1) << GLB_REG_GPIO_9_O_POS))\n#define GLB_REG_GPIO_10_O        GLB_REG_GPIO_10_O\n#define GLB_REG_GPIO_10_O_POS    (10U)\n#define GLB_REG_GPIO_10_O_LEN    (1U)\n#define GLB_REG_GPIO_10_O_MSK    (((1U << GLB_REG_GPIO_10_O_LEN) - 1) << GLB_REG_GPIO_10_O_POS)\n#define GLB_REG_GPIO_10_O_UMSK   (~(((1U << GLB_REG_GPIO_10_O_LEN) - 1) << GLB_REG_GPIO_10_O_POS))\n#define GLB_REG_GPIO_11_O        GLB_REG_GPIO_11_O\n#define GLB_REG_GPIO_11_O_POS    (11U)\n#define GLB_REG_GPIO_11_O_LEN    (1U)\n#define GLB_REG_GPIO_11_O_MSK    (((1U << GLB_REG_GPIO_11_O_LEN) - 1) << GLB_REG_GPIO_11_O_POS)\n#define GLB_REG_GPIO_11_O_UMSK   (~(((1U << GLB_REG_GPIO_11_O_LEN) - 1) << GLB_REG_GPIO_11_O_POS))\n#define GLB_REG_GPIO_12_O        GLB_REG_GPIO_12_O\n#define GLB_REG_GPIO_12_O_POS    (12U)\n#define GLB_REG_GPIO_12_O_LEN    (1U)\n#define GLB_REG_GPIO_12_O_MSK    (((1U << GLB_REG_GPIO_12_O_LEN) - 1) << GLB_REG_GPIO_12_O_POS)\n#define GLB_REG_GPIO_12_O_UMSK   (~(((1U << GLB_REG_GPIO_12_O_LEN) - 1) << GLB_REG_GPIO_12_O_POS))\n#define GLB_REG_GPIO_13_O        GLB_REG_GPIO_13_O\n#define GLB_REG_GPIO_13_O_POS    (13U)\n#define GLB_REG_GPIO_13_O_LEN    (1U)\n#define GLB_REG_GPIO_13_O_MSK    (((1U << GLB_REG_GPIO_13_O_LEN) - 1) << GLB_REG_GPIO_13_O_POS)\n#define GLB_REG_GPIO_13_O_UMSK   (~(((1U << GLB_REG_GPIO_13_O_LEN) - 1) << GLB_REG_GPIO_13_O_POS))\n#define GLB_REG_GPIO_14_O        GLB_REG_GPIO_14_O\n#define GLB_REG_GPIO_14_O_POS    (14U)\n#define GLB_REG_GPIO_14_O_LEN    (1U)\n#define GLB_REG_GPIO_14_O_MSK    (((1U << GLB_REG_GPIO_14_O_LEN) - 1) << GLB_REG_GPIO_14_O_POS)\n#define GLB_REG_GPIO_14_O_UMSK   (~(((1U << GLB_REG_GPIO_14_O_LEN) - 1) << GLB_REG_GPIO_14_O_POS))\n#define GLB_REG_GPIO_15_O        GLB_REG_GPIO_15_O\n#define GLB_REG_GPIO_15_O_POS    (15U)\n#define GLB_REG_GPIO_15_O_LEN    (1U)\n#define GLB_REG_GPIO_15_O_MSK    (((1U << GLB_REG_GPIO_15_O_LEN) - 1) << GLB_REG_GPIO_15_O_POS)\n#define GLB_REG_GPIO_15_O_UMSK   (~(((1U << GLB_REG_GPIO_15_O_LEN) - 1) << GLB_REG_GPIO_15_O_POS))\n#define GLB_REG_GPIO_16_O        GLB_REG_GPIO_16_O\n#define GLB_REG_GPIO_16_O_POS    (16U)\n#define GLB_REG_GPIO_16_O_LEN    (1U)\n#define GLB_REG_GPIO_16_O_MSK    (((1U << GLB_REG_GPIO_16_O_LEN) - 1) << GLB_REG_GPIO_16_O_POS)\n#define GLB_REG_GPIO_16_O_UMSK   (~(((1U << GLB_REG_GPIO_16_O_LEN) - 1) << GLB_REG_GPIO_16_O_POS))\n#define GLB_REG_GPIO_17_O        GLB_REG_GPIO_17_O\n#define GLB_REG_GPIO_17_O_POS    (17U)\n#define GLB_REG_GPIO_17_O_LEN    (1U)\n#define GLB_REG_GPIO_17_O_MSK    (((1U << GLB_REG_GPIO_17_O_LEN) - 1) << GLB_REG_GPIO_17_O_POS)\n#define GLB_REG_GPIO_17_O_UMSK   (~(((1U << GLB_REG_GPIO_17_O_LEN) - 1) << GLB_REG_GPIO_17_O_POS))\n#define GLB_REG_GPIO_18_O        GLB_REG_GPIO_18_O\n#define GLB_REG_GPIO_18_O_POS    (18U)\n#define GLB_REG_GPIO_18_O_LEN    (1U)\n#define GLB_REG_GPIO_18_O_MSK    (((1U << GLB_REG_GPIO_18_O_LEN) - 1) << GLB_REG_GPIO_18_O_POS)\n#define GLB_REG_GPIO_18_O_UMSK   (~(((1U << GLB_REG_GPIO_18_O_LEN) - 1) << GLB_REG_GPIO_18_O_POS))\n#define GLB_REG_GPIO_19_O        GLB_REG_GPIO_19_O\n#define GLB_REG_GPIO_19_O_POS    (19U)\n#define GLB_REG_GPIO_19_O_LEN    (1U)\n#define GLB_REG_GPIO_19_O_MSK    (((1U << GLB_REG_GPIO_19_O_LEN) - 1) << GLB_REG_GPIO_19_O_POS)\n#define GLB_REG_GPIO_19_O_UMSK   (~(((1U << GLB_REG_GPIO_19_O_LEN) - 1) << GLB_REG_GPIO_19_O_POS))\n#define GLB_REG_GPIO_20_O        GLB_REG_GPIO_20_O\n#define GLB_REG_GPIO_20_O_POS    (20U)\n#define GLB_REG_GPIO_20_O_LEN    (1U)\n#define GLB_REG_GPIO_20_O_MSK    (((1U << GLB_REG_GPIO_20_O_LEN) - 1) << GLB_REG_GPIO_20_O_POS)\n#define GLB_REG_GPIO_20_O_UMSK   (~(((1U << GLB_REG_GPIO_20_O_LEN) - 1) << GLB_REG_GPIO_20_O_POS))\n#define GLB_REG_GPIO_21_O        GLB_REG_GPIO_21_O\n#define GLB_REG_GPIO_21_O_POS    (21U)\n#define GLB_REG_GPIO_21_O_LEN    (1U)\n#define GLB_REG_GPIO_21_O_MSK    (((1U << GLB_REG_GPIO_21_O_LEN) - 1) << GLB_REG_GPIO_21_O_POS)\n#define GLB_REG_GPIO_21_O_UMSK   (~(((1U << GLB_REG_GPIO_21_O_LEN) - 1) << GLB_REG_GPIO_21_O_POS))\n#define GLB_REG_GPIO_22_O        GLB_REG_GPIO_22_O\n#define GLB_REG_GPIO_22_O_POS    (22U)\n#define GLB_REG_GPIO_22_O_LEN    (1U)\n#define GLB_REG_GPIO_22_O_MSK    (((1U << GLB_REG_GPIO_22_O_LEN) - 1) << GLB_REG_GPIO_22_O_POS)\n#define GLB_REG_GPIO_22_O_UMSK   (~(((1U << GLB_REG_GPIO_22_O_LEN) - 1) << GLB_REG_GPIO_22_O_POS))\n#define GLB_REG_GPIO_23_O        GLB_REG_GPIO_23_O\n#define GLB_REG_GPIO_23_O_POS    (23U)\n#define GLB_REG_GPIO_23_O_LEN    (1U)\n#define GLB_REG_GPIO_23_O_MSK    (((1U << GLB_REG_GPIO_23_O_LEN) - 1) << GLB_REG_GPIO_23_O_POS)\n#define GLB_REG_GPIO_23_O_UMSK   (~(((1U << GLB_REG_GPIO_23_O_LEN) - 1) << GLB_REG_GPIO_23_O_POS))\n#define GLB_REG_GPIO_24_O        GLB_REG_GPIO_24_O\n#define GLB_REG_GPIO_24_O_POS    (24U)\n#define GLB_REG_GPIO_24_O_LEN    (1U)\n#define GLB_REG_GPIO_24_O_MSK    (((1U << GLB_REG_GPIO_24_O_LEN) - 1) << GLB_REG_GPIO_24_O_POS)\n#define GLB_REG_GPIO_24_O_UMSK   (~(((1U << GLB_REG_GPIO_24_O_LEN) - 1) << GLB_REG_GPIO_24_O_POS))\n#define GLB_REG_GPIO_25_O        GLB_REG_GPIO_25_O\n#define GLB_REG_GPIO_25_O_POS    (25U)\n#define GLB_REG_GPIO_25_O_LEN    (1U)\n#define GLB_REG_GPIO_25_O_MSK    (((1U << GLB_REG_GPIO_25_O_LEN) - 1) << GLB_REG_GPIO_25_O_POS)\n#define GLB_REG_GPIO_25_O_UMSK   (~(((1U << GLB_REG_GPIO_25_O_LEN) - 1) << GLB_REG_GPIO_25_O_POS))\n#define GLB_REG_GPIO_26_O        GLB_REG_GPIO_26_O\n#define GLB_REG_GPIO_26_O_POS    (26U)\n#define GLB_REG_GPIO_26_O_LEN    (1U)\n#define GLB_REG_GPIO_26_O_MSK    (((1U << GLB_REG_GPIO_26_O_LEN) - 1) << GLB_REG_GPIO_26_O_POS)\n#define GLB_REG_GPIO_26_O_UMSK   (~(((1U << GLB_REG_GPIO_26_O_LEN) - 1) << GLB_REG_GPIO_26_O_POS))\n#define GLB_REG_GPIO_27_O        GLB_REG_GPIO_27_O\n#define GLB_REG_GPIO_27_O_POS    (27U)\n#define GLB_REG_GPIO_27_O_LEN    (1U)\n#define GLB_REG_GPIO_27_O_MSK    (((1U << GLB_REG_GPIO_27_O_LEN) - 1) << GLB_REG_GPIO_27_O_POS)\n#define GLB_REG_GPIO_27_O_UMSK   (~(((1U << GLB_REG_GPIO_27_O_LEN) - 1) << GLB_REG_GPIO_27_O_POS))\n#define GLB_REG_GPIO_28_O        GLB_REG_GPIO_28_O\n#define GLB_REG_GPIO_28_O_POS    (28U)\n#define GLB_REG_GPIO_28_O_LEN    (1U)\n#define GLB_REG_GPIO_28_O_MSK    (((1U << GLB_REG_GPIO_28_O_LEN) - 1) << GLB_REG_GPIO_28_O_POS)\n#define GLB_REG_GPIO_28_O_UMSK   (~(((1U << GLB_REG_GPIO_28_O_LEN) - 1) << GLB_REG_GPIO_28_O_POS))\n#define GLB_REG_GPIO_29_O        GLB_REG_GPIO_29_O\n#define GLB_REG_GPIO_29_O_POS    (29U)\n#define GLB_REG_GPIO_29_O_LEN    (1U)\n#define GLB_REG_GPIO_29_O_MSK    (((1U << GLB_REG_GPIO_29_O_LEN) - 1) << GLB_REG_GPIO_29_O_POS)\n#define GLB_REG_GPIO_29_O_UMSK   (~(((1U << GLB_REG_GPIO_29_O_LEN) - 1) << GLB_REG_GPIO_29_O_POS))\n#define GLB_REG_GPIO_30_O        GLB_REG_GPIO_30_O\n#define GLB_REG_GPIO_30_O_POS    (30U)\n#define GLB_REG_GPIO_30_O_LEN    (1U)\n#define GLB_REG_GPIO_30_O_MSK    (((1U << GLB_REG_GPIO_30_O_LEN) - 1) << GLB_REG_GPIO_30_O_POS)\n#define GLB_REG_GPIO_30_O_UMSK   (~(((1U << GLB_REG_GPIO_30_O_LEN) - 1) << GLB_REG_GPIO_30_O_POS))\n#define GLB_REG_GPIO_31_O        GLB_REG_GPIO_31_O\n#define GLB_REG_GPIO_31_O_POS    (31U)\n#define GLB_REG_GPIO_31_O_LEN    (1U)\n#define GLB_REG_GPIO_31_O_MSK    (((1U << GLB_REG_GPIO_31_O_LEN) - 1) << GLB_REG_GPIO_31_O_POS)\n#define GLB_REG_GPIO_31_O_UMSK   (~(((1U << GLB_REG_GPIO_31_O_LEN) - 1) << GLB_REG_GPIO_31_O_POS))\n\n/* 0x18C : GPIO_CFGCTL33 */\n#define GLB_GPIO_CFGCTL33_OFFSET (0x18C)\n\n/* 0x190 : GPIO_CFGCTL34 */\n#define GLB_GPIO_CFGCTL34_OFFSET (0x190)\n#define GLB_REG_GPIO_0_OE        GLB_REG_GPIO_0_OE\n#define GLB_REG_GPIO_0_OE_POS    (0U)\n#define GLB_REG_GPIO_0_OE_LEN    (1U)\n#define GLB_REG_GPIO_0_OE_MSK    (((1U << GLB_REG_GPIO_0_OE_LEN) - 1) << GLB_REG_GPIO_0_OE_POS)\n#define GLB_REG_GPIO_0_OE_UMSK   (~(((1U << GLB_REG_GPIO_0_OE_LEN) - 1) << GLB_REG_GPIO_0_OE_POS))\n#define GLB_REG_GPIO_1_OE        GLB_REG_GPIO_1_OE\n#define GLB_REG_GPIO_1_OE_POS    (1U)\n#define GLB_REG_GPIO_1_OE_LEN    (1U)\n#define GLB_REG_GPIO_1_OE_MSK    (((1U << GLB_REG_GPIO_1_OE_LEN) - 1) << GLB_REG_GPIO_1_OE_POS)\n#define GLB_REG_GPIO_1_OE_UMSK   (~(((1U << GLB_REG_GPIO_1_OE_LEN) - 1) << GLB_REG_GPIO_1_OE_POS))\n#define GLB_REG_GPIO_2_OE        GLB_REG_GPIO_2_OE\n#define GLB_REG_GPIO_2_OE_POS    (2U)\n#define GLB_REG_GPIO_2_OE_LEN    (1U)\n#define GLB_REG_GPIO_2_OE_MSK    (((1U << GLB_REG_GPIO_2_OE_LEN) - 1) << GLB_REG_GPIO_2_OE_POS)\n#define GLB_REG_GPIO_2_OE_UMSK   (~(((1U << GLB_REG_GPIO_2_OE_LEN) - 1) << GLB_REG_GPIO_2_OE_POS))\n#define GLB_REG_GPIO_3_OE        GLB_REG_GPIO_3_OE\n#define GLB_REG_GPIO_3_OE_POS    (3U)\n#define GLB_REG_GPIO_3_OE_LEN    (1U)\n#define GLB_REG_GPIO_3_OE_MSK    (((1U << GLB_REG_GPIO_3_OE_LEN) - 1) << GLB_REG_GPIO_3_OE_POS)\n#define GLB_REG_GPIO_3_OE_UMSK   (~(((1U << GLB_REG_GPIO_3_OE_LEN) - 1) << GLB_REG_GPIO_3_OE_POS))\n#define GLB_REG_GPIO_4_OE        GLB_REG_GPIO_4_OE\n#define GLB_REG_GPIO_4_OE_POS    (4U)\n#define GLB_REG_GPIO_4_OE_LEN    (1U)\n#define GLB_REG_GPIO_4_OE_MSK    (((1U << GLB_REG_GPIO_4_OE_LEN) - 1) << GLB_REG_GPIO_4_OE_POS)\n#define GLB_REG_GPIO_4_OE_UMSK   (~(((1U << GLB_REG_GPIO_4_OE_LEN) - 1) << GLB_REG_GPIO_4_OE_POS))\n#define GLB_REG_GPIO_5_OE        GLB_REG_GPIO_5_OE\n#define GLB_REG_GPIO_5_OE_POS    (5U)\n#define GLB_REG_GPIO_5_OE_LEN    (1U)\n#define GLB_REG_GPIO_5_OE_MSK    (((1U << GLB_REG_GPIO_5_OE_LEN) - 1) << GLB_REG_GPIO_5_OE_POS)\n#define GLB_REG_GPIO_5_OE_UMSK   (~(((1U << GLB_REG_GPIO_5_OE_LEN) - 1) << GLB_REG_GPIO_5_OE_POS))\n#define GLB_REG_GPIO_6_OE        GLB_REG_GPIO_6_OE\n#define GLB_REG_GPIO_6_OE_POS    (6U)\n#define GLB_REG_GPIO_6_OE_LEN    (1U)\n#define GLB_REG_GPIO_6_OE_MSK    (((1U << GLB_REG_GPIO_6_OE_LEN) - 1) << GLB_REG_GPIO_6_OE_POS)\n#define GLB_REG_GPIO_6_OE_UMSK   (~(((1U << GLB_REG_GPIO_6_OE_LEN) - 1) << GLB_REG_GPIO_6_OE_POS))\n#define GLB_REG_GPIO_7_OE        GLB_REG_GPIO_7_OE\n#define GLB_REG_GPIO_7_OE_POS    (7U)\n#define GLB_REG_GPIO_7_OE_LEN    (1U)\n#define GLB_REG_GPIO_7_OE_MSK    (((1U << GLB_REG_GPIO_7_OE_LEN) - 1) << GLB_REG_GPIO_7_OE_POS)\n#define GLB_REG_GPIO_7_OE_UMSK   (~(((1U << GLB_REG_GPIO_7_OE_LEN) - 1) << GLB_REG_GPIO_7_OE_POS))\n#define GLB_REG_GPIO_8_OE        GLB_REG_GPIO_8_OE\n#define GLB_REG_GPIO_8_OE_POS    (8U)\n#define GLB_REG_GPIO_8_OE_LEN    (1U)\n#define GLB_REG_GPIO_8_OE_MSK    (((1U << GLB_REG_GPIO_8_OE_LEN) - 1) << GLB_REG_GPIO_8_OE_POS)\n#define GLB_REG_GPIO_8_OE_UMSK   (~(((1U << GLB_REG_GPIO_8_OE_LEN) - 1) << GLB_REG_GPIO_8_OE_POS))\n#define GLB_REG_GPIO_9_OE        GLB_REG_GPIO_9_OE\n#define GLB_REG_GPIO_9_OE_POS    (9U)\n#define GLB_REG_GPIO_9_OE_LEN    (1U)\n#define GLB_REG_GPIO_9_OE_MSK    (((1U << GLB_REG_GPIO_9_OE_LEN) - 1) << GLB_REG_GPIO_9_OE_POS)\n#define GLB_REG_GPIO_9_OE_UMSK   (~(((1U << GLB_REG_GPIO_9_OE_LEN) - 1) << GLB_REG_GPIO_9_OE_POS))\n#define GLB_REG_GPIO_10_OE       GLB_REG_GPIO_10_OE\n#define GLB_REG_GPIO_10_OE_POS   (10U)\n#define GLB_REG_GPIO_10_OE_LEN   (1U)\n#define GLB_REG_GPIO_10_OE_MSK   (((1U << GLB_REG_GPIO_10_OE_LEN) - 1) << GLB_REG_GPIO_10_OE_POS)\n#define GLB_REG_GPIO_10_OE_UMSK  (~(((1U << GLB_REG_GPIO_10_OE_LEN) - 1) << GLB_REG_GPIO_10_OE_POS))\n#define GLB_REG_GPIO_11_OE       GLB_REG_GPIO_11_OE\n#define GLB_REG_GPIO_11_OE_POS   (11U)\n#define GLB_REG_GPIO_11_OE_LEN   (1U)\n#define GLB_REG_GPIO_11_OE_MSK   (((1U << GLB_REG_GPIO_11_OE_LEN) - 1) << GLB_REG_GPIO_11_OE_POS)\n#define GLB_REG_GPIO_11_OE_UMSK  (~(((1U << GLB_REG_GPIO_11_OE_LEN) - 1) << GLB_REG_GPIO_11_OE_POS))\n#define GLB_REG_GPIO_12_OE       GLB_REG_GPIO_12_OE\n#define GLB_REG_GPIO_12_OE_POS   (12U)\n#define GLB_REG_GPIO_12_OE_LEN   (1U)\n#define GLB_REG_GPIO_12_OE_MSK   (((1U << GLB_REG_GPIO_12_OE_LEN) - 1) << GLB_REG_GPIO_12_OE_POS)\n#define GLB_REG_GPIO_12_OE_UMSK  (~(((1U << GLB_REG_GPIO_12_OE_LEN) - 1) << GLB_REG_GPIO_12_OE_POS))\n#define GLB_REG_GPIO_13_OE       GLB_REG_GPIO_13_OE\n#define GLB_REG_GPIO_13_OE_POS   (13U)\n#define GLB_REG_GPIO_13_OE_LEN   (1U)\n#define GLB_REG_GPIO_13_OE_MSK   (((1U << GLB_REG_GPIO_13_OE_LEN) - 1) << GLB_REG_GPIO_13_OE_POS)\n#define GLB_REG_GPIO_13_OE_UMSK  (~(((1U << GLB_REG_GPIO_13_OE_LEN) - 1) << GLB_REG_GPIO_13_OE_POS))\n#define GLB_REG_GPIO_14_OE       GLB_REG_GPIO_14_OE\n#define GLB_REG_GPIO_14_OE_POS   (14U)\n#define GLB_REG_GPIO_14_OE_LEN   (1U)\n#define GLB_REG_GPIO_14_OE_MSK   (((1U << GLB_REG_GPIO_14_OE_LEN) - 1) << GLB_REG_GPIO_14_OE_POS)\n#define GLB_REG_GPIO_14_OE_UMSK  (~(((1U << GLB_REG_GPIO_14_OE_LEN) - 1) << GLB_REG_GPIO_14_OE_POS))\n#define GLB_REG_GPIO_15_OE       GLB_REG_GPIO_15_OE\n#define GLB_REG_GPIO_15_OE_POS   (15U)\n#define GLB_REG_GPIO_15_OE_LEN   (1U)\n#define GLB_REG_GPIO_15_OE_MSK   (((1U << GLB_REG_GPIO_15_OE_LEN) - 1) << GLB_REG_GPIO_15_OE_POS)\n#define GLB_REG_GPIO_15_OE_UMSK  (~(((1U << GLB_REG_GPIO_15_OE_LEN) - 1) << GLB_REG_GPIO_15_OE_POS))\n#define GLB_REG_GPIO_16_OE       GLB_REG_GPIO_16_OE\n#define GLB_REG_GPIO_16_OE_POS   (16U)\n#define GLB_REG_GPIO_16_OE_LEN   (1U)\n#define GLB_REG_GPIO_16_OE_MSK   (((1U << GLB_REG_GPIO_16_OE_LEN) - 1) << GLB_REG_GPIO_16_OE_POS)\n#define GLB_REG_GPIO_16_OE_UMSK  (~(((1U << GLB_REG_GPIO_16_OE_LEN) - 1) << GLB_REG_GPIO_16_OE_POS))\n#define GLB_REG_GPIO_17_OE       GLB_REG_GPIO_17_OE\n#define GLB_REG_GPIO_17_OE_POS   (17U)\n#define GLB_REG_GPIO_17_OE_LEN   (1U)\n#define GLB_REG_GPIO_17_OE_MSK   (((1U << GLB_REG_GPIO_17_OE_LEN) - 1) << GLB_REG_GPIO_17_OE_POS)\n#define GLB_REG_GPIO_17_OE_UMSK  (~(((1U << GLB_REG_GPIO_17_OE_LEN) - 1) << GLB_REG_GPIO_17_OE_POS))\n#define GLB_REG_GPIO_18_OE       GLB_REG_GPIO_18_OE\n#define GLB_REG_GPIO_18_OE_POS   (18U)\n#define GLB_REG_GPIO_18_OE_LEN   (1U)\n#define GLB_REG_GPIO_18_OE_MSK   (((1U << GLB_REG_GPIO_18_OE_LEN) - 1) << GLB_REG_GPIO_18_OE_POS)\n#define GLB_REG_GPIO_18_OE_UMSK  (~(((1U << GLB_REG_GPIO_18_OE_LEN) - 1) << GLB_REG_GPIO_18_OE_POS))\n#define GLB_REG_GPIO_19_OE       GLB_REG_GPIO_19_OE\n#define GLB_REG_GPIO_19_OE_POS   (19U)\n#define GLB_REG_GPIO_19_OE_LEN   (1U)\n#define GLB_REG_GPIO_19_OE_MSK   (((1U << GLB_REG_GPIO_19_OE_LEN) - 1) << GLB_REG_GPIO_19_OE_POS)\n#define GLB_REG_GPIO_19_OE_UMSK  (~(((1U << GLB_REG_GPIO_19_OE_LEN) - 1) << GLB_REG_GPIO_19_OE_POS))\n#define GLB_REG_GPIO_20_OE       GLB_REG_GPIO_20_OE\n#define GLB_REG_GPIO_20_OE_POS   (20U)\n#define GLB_REG_GPIO_20_OE_LEN   (1U)\n#define GLB_REG_GPIO_20_OE_MSK   (((1U << GLB_REG_GPIO_20_OE_LEN) - 1) << GLB_REG_GPIO_20_OE_POS)\n#define GLB_REG_GPIO_20_OE_UMSK  (~(((1U << GLB_REG_GPIO_20_OE_LEN) - 1) << GLB_REG_GPIO_20_OE_POS))\n#define GLB_REG_GPIO_21_OE       GLB_REG_GPIO_21_OE\n#define GLB_REG_GPIO_21_OE_POS   (21U)\n#define GLB_REG_GPIO_21_OE_LEN   (1U)\n#define GLB_REG_GPIO_21_OE_MSK   (((1U << GLB_REG_GPIO_21_OE_LEN) - 1) << GLB_REG_GPIO_21_OE_POS)\n#define GLB_REG_GPIO_21_OE_UMSK  (~(((1U << GLB_REG_GPIO_21_OE_LEN) - 1) << GLB_REG_GPIO_21_OE_POS))\n#define GLB_REG_GPIO_22_OE       GLB_REG_GPIO_22_OE\n#define GLB_REG_GPIO_22_OE_POS   (22U)\n#define GLB_REG_GPIO_22_OE_LEN   (1U)\n#define GLB_REG_GPIO_22_OE_MSK   (((1U << GLB_REG_GPIO_22_OE_LEN) - 1) << GLB_REG_GPIO_22_OE_POS)\n#define GLB_REG_GPIO_22_OE_UMSK  (~(((1U << GLB_REG_GPIO_22_OE_LEN) - 1) << GLB_REG_GPIO_22_OE_POS))\n#define GLB_REG_GPIO_23_OE       GLB_REG_GPIO_23_OE\n#define GLB_REG_GPIO_23_OE_POS   (23U)\n#define GLB_REG_GPIO_23_OE_LEN   (1U)\n#define GLB_REG_GPIO_23_OE_MSK   (((1U << GLB_REG_GPIO_23_OE_LEN) - 1) << GLB_REG_GPIO_23_OE_POS)\n#define GLB_REG_GPIO_23_OE_UMSK  (~(((1U << GLB_REG_GPIO_23_OE_LEN) - 1) << GLB_REG_GPIO_23_OE_POS))\n#define GLB_REG_GPIO_24_OE       GLB_REG_GPIO_24_OE\n#define GLB_REG_GPIO_24_OE_POS   (24U)\n#define GLB_REG_GPIO_24_OE_LEN   (1U)\n#define GLB_REG_GPIO_24_OE_MSK   (((1U << GLB_REG_GPIO_24_OE_LEN) - 1) << GLB_REG_GPIO_24_OE_POS)\n#define GLB_REG_GPIO_24_OE_UMSK  (~(((1U << GLB_REG_GPIO_24_OE_LEN) - 1) << GLB_REG_GPIO_24_OE_POS))\n#define GLB_REG_GPIO_25_OE       GLB_REG_GPIO_25_OE\n#define GLB_REG_GPIO_25_OE_POS   (25U)\n#define GLB_REG_GPIO_25_OE_LEN   (1U)\n#define GLB_REG_GPIO_25_OE_MSK   (((1U << GLB_REG_GPIO_25_OE_LEN) - 1) << GLB_REG_GPIO_25_OE_POS)\n#define GLB_REG_GPIO_25_OE_UMSK  (~(((1U << GLB_REG_GPIO_25_OE_LEN) - 1) << GLB_REG_GPIO_25_OE_POS))\n#define GLB_REG_GPIO_26_OE       GLB_REG_GPIO_26_OE\n#define GLB_REG_GPIO_26_OE_POS   (26U)\n#define GLB_REG_GPIO_26_OE_LEN   (1U)\n#define GLB_REG_GPIO_26_OE_MSK   (((1U << GLB_REG_GPIO_26_OE_LEN) - 1) << GLB_REG_GPIO_26_OE_POS)\n#define GLB_REG_GPIO_26_OE_UMSK  (~(((1U << GLB_REG_GPIO_26_OE_LEN) - 1) << GLB_REG_GPIO_26_OE_POS))\n#define GLB_REG_GPIO_27_OE       GLB_REG_GPIO_27_OE\n#define GLB_REG_GPIO_27_OE_POS   (27U)\n#define GLB_REG_GPIO_27_OE_LEN   (1U)\n#define GLB_REG_GPIO_27_OE_MSK   (((1U << GLB_REG_GPIO_27_OE_LEN) - 1) << GLB_REG_GPIO_27_OE_POS)\n#define GLB_REG_GPIO_27_OE_UMSK  (~(((1U << GLB_REG_GPIO_27_OE_LEN) - 1) << GLB_REG_GPIO_27_OE_POS))\n#define GLB_REG_GPIO_28_OE       GLB_REG_GPIO_28_OE\n#define GLB_REG_GPIO_28_OE_POS   (28U)\n#define GLB_REG_GPIO_28_OE_LEN   (1U)\n#define GLB_REG_GPIO_28_OE_MSK   (((1U << GLB_REG_GPIO_28_OE_LEN) - 1) << GLB_REG_GPIO_28_OE_POS)\n#define GLB_REG_GPIO_28_OE_UMSK  (~(((1U << GLB_REG_GPIO_28_OE_LEN) - 1) << GLB_REG_GPIO_28_OE_POS))\n#define GLB_REG_GPIO_29_OE       GLB_REG_GPIO_29_OE\n#define GLB_REG_GPIO_29_OE_POS   (29U)\n#define GLB_REG_GPIO_29_OE_LEN   (1U)\n#define GLB_REG_GPIO_29_OE_MSK   (((1U << GLB_REG_GPIO_29_OE_LEN) - 1) << GLB_REG_GPIO_29_OE_POS)\n#define GLB_REG_GPIO_29_OE_UMSK  (~(((1U << GLB_REG_GPIO_29_OE_LEN) - 1) << GLB_REG_GPIO_29_OE_POS))\n#define GLB_REG_GPIO_30_OE       GLB_REG_GPIO_30_OE\n#define GLB_REG_GPIO_30_OE_POS   (30U)\n#define GLB_REG_GPIO_30_OE_LEN   (1U)\n#define GLB_REG_GPIO_30_OE_MSK   (((1U << GLB_REG_GPIO_30_OE_LEN) - 1) << GLB_REG_GPIO_30_OE_POS)\n#define GLB_REG_GPIO_30_OE_UMSK  (~(((1U << GLB_REG_GPIO_30_OE_LEN) - 1) << GLB_REG_GPIO_30_OE_POS))\n#define GLB_REG_GPIO_31_OE       GLB_REG_GPIO_31_OE\n#define GLB_REG_GPIO_31_OE_POS   (31U)\n#define GLB_REG_GPIO_31_OE_LEN   (1U)\n#define GLB_REG_GPIO_31_OE_MSK   (((1U << GLB_REG_GPIO_31_OE_LEN) - 1) << GLB_REG_GPIO_31_OE_POS)\n#define GLB_REG_GPIO_31_OE_UMSK  (~(((1U << GLB_REG_GPIO_31_OE_LEN) - 1) << GLB_REG_GPIO_31_OE_POS))\n\n/* 0x194 : GPIO_CFGCTL35 */\n#define GLB_GPIO_CFGCTL35_OFFSET (0x194)\n\n/* 0x1A0 : GPIO_INT_MASK1 */\n#define GLB_GPIO_INT_MASK1_OFFSET   (0x1A0)\n#define GLB_REG_GPIO_INT_MASK1      GLB_REG_GPIO_INT_MASK1\n#define GLB_REG_GPIO_INT_MASK1_POS  (0U)\n#define GLB_REG_GPIO_INT_MASK1_LEN  (32U)\n#define GLB_REG_GPIO_INT_MASK1_MSK  (((1U << GLB_REG_GPIO_INT_MASK1_LEN) - 1) << GLB_REG_GPIO_INT_MASK1_POS)\n#define GLB_REG_GPIO_INT_MASK1_UMSK (~(((1U << GLB_REG_GPIO_INT_MASK1_LEN) - 1) << GLB_REG_GPIO_INT_MASK1_POS))\n\n/* 0x1A8 : GPIO_INT_STAT1 */\n#define GLB_GPIO_INT_STAT1_OFFSET (0x1A8)\n#define GLB_GPIO_INT_STAT1        GLB_GPIO_INT_STAT1\n#define GLB_GPIO_INT_STAT1_POS    (0U)\n#define GLB_GPIO_INT_STAT1_LEN    (32U)\n#define GLB_GPIO_INT_STAT1_MSK    (((1U << GLB_GPIO_INT_STAT1_LEN) - 1) << GLB_GPIO_INT_STAT1_POS)\n#define GLB_GPIO_INT_STAT1_UMSK   (~(((1U << GLB_GPIO_INT_STAT1_LEN) - 1) << GLB_GPIO_INT_STAT1_POS))\n\n/* 0x1B0 : GPIO_INT_CLR1 */\n#define GLB_GPIO_INT_CLR1_OFFSET   (0x1B0)\n#define GLB_REG_GPIO_INT_CLR1      GLB_REG_GPIO_INT_CLR1\n#define GLB_REG_GPIO_INT_CLR1_POS  (0U)\n#define GLB_REG_GPIO_INT_CLR1_LEN  (32U)\n#define GLB_REG_GPIO_INT_CLR1_MSK  (((1U << GLB_REG_GPIO_INT_CLR1_LEN) - 1) << GLB_REG_GPIO_INT_CLR1_POS)\n#define GLB_REG_GPIO_INT_CLR1_UMSK (~(((1U << GLB_REG_GPIO_INT_CLR1_LEN) - 1) << GLB_REG_GPIO_INT_CLR1_POS))\n\n/* 0x1C0 : GPIO_INT_MODE_SET1 */\n#define GLB_GPIO_INT_MODE_SET1_OFFSET   (0x1C0)\n#define GLB_REG_GPIO_INT_MODE_SET1      GLB_REG_GPIO_INT_MODE_SET1\n#define GLB_REG_GPIO_INT_MODE_SET1_POS  (0U)\n#define GLB_REG_GPIO_INT_MODE_SET1_LEN  (30U)\n#define GLB_REG_GPIO_INT_MODE_SET1_MSK  (((1U << GLB_REG_GPIO_INT_MODE_SET1_LEN) - 1) << GLB_REG_GPIO_INT_MODE_SET1_POS)\n#define GLB_REG_GPIO_INT_MODE_SET1_UMSK (~(((1U << GLB_REG_GPIO_INT_MODE_SET1_LEN) - 1) << GLB_REG_GPIO_INT_MODE_SET1_POS))\n\n/* 0x1C4 : GPIO_INT_MODE_SET2 */\n#define GLB_GPIO_INT_MODE_SET2_OFFSET   (0x1C4)\n#define GLB_REG_GPIO_INT_MODE_SET2      GLB_REG_GPIO_INT_MODE_SET2\n#define GLB_REG_GPIO_INT_MODE_SET2_POS  (0U)\n#define GLB_REG_GPIO_INT_MODE_SET2_LEN  (30U)\n#define GLB_REG_GPIO_INT_MODE_SET2_MSK  (((1U << GLB_REG_GPIO_INT_MODE_SET2_LEN) - 1) << GLB_REG_GPIO_INT_MODE_SET2_POS)\n#define GLB_REG_GPIO_INT_MODE_SET2_UMSK (~(((1U << GLB_REG_GPIO_INT_MODE_SET2_LEN) - 1) << GLB_REG_GPIO_INT_MODE_SET2_POS))\n\n/* 0x1C8 : GPIO_INT_MODE_SET3 */\n#define GLB_GPIO_INT_MODE_SET3_OFFSET   (0x1C8)\n#define GLB_REG_GPIO_INT_MODE_SET3      GLB_REG_GPIO_INT_MODE_SET3\n#define GLB_REG_GPIO_INT_MODE_SET3_POS  (0U)\n#define GLB_REG_GPIO_INT_MODE_SET3_LEN  (30U)\n#define GLB_REG_GPIO_INT_MODE_SET3_MSK  (((1U << GLB_REG_GPIO_INT_MODE_SET3_LEN) - 1) << GLB_REG_GPIO_INT_MODE_SET3_POS)\n#define GLB_REG_GPIO_INT_MODE_SET3_UMSK (~(((1U << GLB_REG_GPIO_INT_MODE_SET3_LEN) - 1) << GLB_REG_GPIO_INT_MODE_SET3_POS))\n\n/* 0x1CC : GPIO_INT_MODE_SET4 */\n#define GLB_GPIO_INT_MODE_SET4_OFFSET   (0x1CC)\n#define GLB_REG_GPIO_INT_MODE_SET4      GLB_REG_GPIO_INT_MODE_SET4\n#define GLB_REG_GPIO_INT_MODE_SET4_POS  (0U)\n#define GLB_REG_GPIO_INT_MODE_SET4_LEN  (6U)\n#define GLB_REG_GPIO_INT_MODE_SET4_MSK  (((1U << GLB_REG_GPIO_INT_MODE_SET4_LEN) - 1) << GLB_REG_GPIO_INT_MODE_SET4_POS)\n#define GLB_REG_GPIO_INT_MODE_SET4_UMSK (~(((1U << GLB_REG_GPIO_INT_MODE_SET4_LEN) - 1) << GLB_REG_GPIO_INT_MODE_SET4_POS))\n\n/* 0x1D0 : GPIO_INT2_MASK1 */\n#define GLB_GPIO_INT2_MASK1_OFFSET   (0x1D0)\n#define GLB_REG_GPIO_INT2_MASK1      GLB_REG_GPIO_INT2_MASK1\n#define GLB_REG_GPIO_INT2_MASK1_POS  (0U)\n#define GLB_REG_GPIO_INT2_MASK1_LEN  (32U)\n#define GLB_REG_GPIO_INT2_MASK1_MSK  (((1U << GLB_REG_GPIO_INT2_MASK1_LEN) - 1) << GLB_REG_GPIO_INT2_MASK1_POS)\n#define GLB_REG_GPIO_INT2_MASK1_UMSK (~(((1U << GLB_REG_GPIO_INT2_MASK1_LEN) - 1) << GLB_REG_GPIO_INT2_MASK1_POS))\n\n/* 0x1D4 : GPIO_INT2_STAT1 */\n#define GLB_GPIO_INT2_STAT1_OFFSET (0x1D4)\n#define GLB_GPIO_INT2_STAT1        GLB_GPIO_INT2_STAT1\n#define GLB_GPIO_INT2_STAT1_POS    (0U)\n#define GLB_GPIO_INT2_STAT1_LEN    (32U)\n#define GLB_GPIO_INT2_STAT1_MSK    (((1U << GLB_GPIO_INT2_STAT1_LEN) - 1) << GLB_GPIO_INT2_STAT1_POS)\n#define GLB_GPIO_INT2_STAT1_UMSK   (~(((1U << GLB_GPIO_INT2_STAT1_LEN) - 1) << GLB_GPIO_INT2_STAT1_POS))\n\n/* 0x1D8 : GPIO_INT2_CLR1 */\n#define GLB_GPIO_INT2_CLR1_OFFSET   (0x1D8)\n#define GLB_REG_GPIO_INT2_CLR1      GLB_REG_GPIO_INT2_CLR1\n#define GLB_REG_GPIO_INT2_CLR1_POS  (0U)\n#define GLB_REG_GPIO_INT2_CLR1_LEN  (32U)\n#define GLB_REG_GPIO_INT2_CLR1_MSK  (((1U << GLB_REG_GPIO_INT2_CLR1_LEN) - 1) << GLB_REG_GPIO_INT2_CLR1_POS)\n#define GLB_REG_GPIO_INT2_CLR1_UMSK (~(((1U << GLB_REG_GPIO_INT2_CLR1_LEN) - 1) << GLB_REG_GPIO_INT2_CLR1_POS))\n\n/* 0x1DC : GPIO_INT2_MODE_SET1 */\n#define GLB_GPIO_INT2_MODE_SET1_OFFSET   (0x1DC)\n#define GLB_REG_GPIO_INT2_MODE_SET1      GLB_REG_GPIO_INT2_MODE_SET1\n#define GLB_REG_GPIO_INT2_MODE_SET1_POS  (0U)\n#define GLB_REG_GPIO_INT2_MODE_SET1_LEN  (30U)\n#define GLB_REG_GPIO_INT2_MODE_SET1_MSK  (((1U << GLB_REG_GPIO_INT2_MODE_SET1_LEN) - 1) << GLB_REG_GPIO_INT2_MODE_SET1_POS)\n#define GLB_REG_GPIO_INT2_MODE_SET1_UMSK (~(((1U << GLB_REG_GPIO_INT2_MODE_SET1_LEN) - 1) << GLB_REG_GPIO_INT2_MODE_SET1_POS))\n\n/* 0x1E0 : GPIO_INT2_MODE_SET2 */\n#define GLB_GPIO_INT2_MODE_SET2_OFFSET   (0x1E0)\n#define GLB_REG_GPIO_INT2_MODE_SET2      GLB_REG_GPIO_INT2_MODE_SET2\n#define GLB_REG_GPIO_INT2_MODE_SET2_POS  (0U)\n#define GLB_REG_GPIO_INT2_MODE_SET2_LEN  (30U)\n#define GLB_REG_GPIO_INT2_MODE_SET2_MSK  (((1U << GLB_REG_GPIO_INT2_MODE_SET2_LEN) - 1) << GLB_REG_GPIO_INT2_MODE_SET2_POS)\n#define GLB_REG_GPIO_INT2_MODE_SET2_UMSK (~(((1U << GLB_REG_GPIO_INT2_MODE_SET2_LEN) - 1) << GLB_REG_GPIO_INT2_MODE_SET2_POS))\n\n/* 0x1E4 : GPIO_INT2_MODE_SET3 */\n#define GLB_GPIO_INT2_MODE_SET3_OFFSET   (0x1E4)\n#define GLB_REG_GPIO_INT2_MODE_SET3      GLB_REG_GPIO_INT2_MODE_SET3\n#define GLB_REG_GPIO_INT2_MODE_SET3_POS  (0U)\n#define GLB_REG_GPIO_INT2_MODE_SET3_LEN  (30U)\n#define GLB_REG_GPIO_INT2_MODE_SET3_MSK  (((1U << GLB_REG_GPIO_INT2_MODE_SET3_LEN) - 1) << GLB_REG_GPIO_INT2_MODE_SET3_POS)\n#define GLB_REG_GPIO_INT2_MODE_SET3_UMSK (~(((1U << GLB_REG_GPIO_INT2_MODE_SET3_LEN) - 1) << GLB_REG_GPIO_INT2_MODE_SET3_POS))\n\n/* 0x1E8 : GPIO_INT2_MODE_SET4 */\n#define GLB_GPIO_INT2_MODE_SET4_OFFSET   (0x1E8)\n#define GLB_REG_GPIO_INT2_MODE_SET4      GLB_REG_GPIO_INT2_MODE_SET4\n#define GLB_REG_GPIO_INT2_MODE_SET4_POS  (0U)\n#define GLB_REG_GPIO_INT2_MODE_SET4_LEN  (6U)\n#define GLB_REG_GPIO_INT2_MODE_SET4_MSK  (((1U << GLB_REG_GPIO_INT2_MODE_SET4_LEN) - 1) << GLB_REG_GPIO_INT2_MODE_SET4_POS)\n#define GLB_REG_GPIO_INT2_MODE_SET4_UMSK (~(((1U << GLB_REG_GPIO_INT2_MODE_SET4_LEN) - 1) << GLB_REG_GPIO_INT2_MODE_SET4_POS))\n\n/* 0x200 : dll */\n#define GLB_DLL_OFFSET               (0x200)\n#define GLB_DTEST_EN_DLL_REFCLK      GLB_DTEST_EN_DLL_REFCLK\n#define GLB_DTEST_EN_DLL_REFCLK_POS  (0U)\n#define GLB_DTEST_EN_DLL_REFCLK_LEN  (1U)\n#define GLB_DTEST_EN_DLL_REFCLK_MSK  (((1U << GLB_DTEST_EN_DLL_REFCLK_LEN) - 1) << GLB_DTEST_EN_DLL_REFCLK_POS)\n#define GLB_DTEST_EN_DLL_REFCLK_UMSK (~(((1U << GLB_DTEST_EN_DLL_REFCLK_LEN) - 1) << GLB_DTEST_EN_DLL_REFCLK_POS))\n#define GLB_DTEST_EN_DLL_OUTCLK      GLB_DTEST_EN_DLL_OUTCLK\n#define GLB_DTEST_EN_DLL_OUTCLK_POS  (1U)\n#define GLB_DTEST_EN_DLL_OUTCLK_LEN  (1U)\n#define GLB_DTEST_EN_DLL_OUTCLK_MSK  (((1U << GLB_DTEST_EN_DLL_OUTCLK_LEN) - 1) << GLB_DTEST_EN_DLL_OUTCLK_POS)\n#define GLB_DTEST_EN_DLL_OUTCLK_UMSK (~(((1U << GLB_DTEST_EN_DLL_OUTCLK_LEN) - 1) << GLB_DTEST_EN_DLL_OUTCLK_POS))\n#define GLB_TEN_DLL                  GLB_TEN_DLL\n#define GLB_TEN_DLL_POS              (2U)\n#define GLB_TEN_DLL_LEN              (1U)\n#define GLB_TEN_DLL_MSK              (((1U << GLB_TEN_DLL_LEN) - 1) << GLB_TEN_DLL_POS)\n#define GLB_TEN_DLL_UMSK             (~(((1U << GLB_TEN_DLL_LEN) - 1) << GLB_TEN_DLL_POS))\n#define GLB_DLL_CLK_MMDIV_EN         GLB_DLL_CLK_MMDIV_EN\n#define GLB_DLL_CLK_MMDIV_EN_POS     (3U)\n#define GLB_DLL_CLK_MMDIV_EN_LEN     (1U)\n#define GLB_DLL_CLK_MMDIV_EN_MSK     (((1U << GLB_DLL_CLK_MMDIV_EN_LEN) - 1) << GLB_DLL_CLK_MMDIV_EN_POS)\n#define GLB_DLL_CLK_MMDIV_EN_UMSK    (~(((1U << GLB_DLL_CLK_MMDIV_EN_LEN) - 1) << GLB_DLL_CLK_MMDIV_EN_POS))\n#define GLB_DLL_CLK_288M_EN          GLB_DLL_CLK_288M_EN\n#define GLB_DLL_CLK_288M_EN_POS      (4U)\n#define GLB_DLL_CLK_288M_EN_LEN      (1U)\n#define GLB_DLL_CLK_288M_EN_MSK      (((1U << GLB_DLL_CLK_288M_EN_LEN) - 1) << GLB_DLL_CLK_288M_EN_POS)\n#define GLB_DLL_CLK_288M_EN_UMSK     (~(((1U << GLB_DLL_CLK_288M_EN_LEN) - 1) << GLB_DLL_CLK_288M_EN_POS))\n#define GLB_DLL_CLK_144M_EN          GLB_DLL_CLK_144M_EN\n#define GLB_DLL_CLK_144M_EN_POS      (5U)\n#define GLB_DLL_CLK_144M_EN_LEN      (1U)\n#define GLB_DLL_CLK_144M_EN_MSK      (((1U << GLB_DLL_CLK_144M_EN_LEN) - 1) << GLB_DLL_CLK_144M_EN_POS)\n#define GLB_DLL_CLK_144M_EN_UMSK     (~(((1U << GLB_DLL_CLK_144M_EN_LEN) - 1) << GLB_DLL_CLK_144M_EN_POS))\n#define GLB_DLL_CLK_96M_EN           GLB_DLL_CLK_96M_EN\n#define GLB_DLL_CLK_96M_EN_POS       (6U)\n#define GLB_DLL_CLK_96M_EN_LEN       (1U)\n#define GLB_DLL_CLK_96M_EN_MSK       (((1U << GLB_DLL_CLK_96M_EN_LEN) - 1) << GLB_DLL_CLK_96M_EN_POS)\n#define GLB_DLL_CLK_96M_EN_UMSK      (~(((1U << GLB_DLL_CLK_96M_EN_LEN) - 1) << GLB_DLL_CLK_96M_EN_POS))\n#define GLB_DLL_CLK_57P6M_EN         GLB_DLL_CLK_57P6M_EN\n#define GLB_DLL_CLK_57P6M_EN_POS     (7U)\n#define GLB_DLL_CLK_57P6M_EN_LEN     (1U)\n#define GLB_DLL_CLK_57P6M_EN_MSK     (((1U << GLB_DLL_CLK_57P6M_EN_LEN) - 1) << GLB_DLL_CLK_57P6M_EN_POS)\n#define GLB_DLL_CLK_57P6M_EN_UMSK    (~(((1U << GLB_DLL_CLK_57P6M_EN_LEN) - 1) << GLB_DLL_CLK_57P6M_EN_POS))\n#define GLB_DLL_VCTRL_SEL            GLB_DLL_VCTRL_SEL\n#define GLB_DLL_VCTRL_SEL_POS        (8U)\n#define GLB_DLL_VCTRL_SEL_LEN        (3U)\n#define GLB_DLL_VCTRL_SEL_MSK        (((1U << GLB_DLL_VCTRL_SEL_LEN) - 1) << GLB_DLL_VCTRL_SEL_POS)\n#define GLB_DLL_VCTRL_SEL_UMSK       (~(((1U << GLB_DLL_VCTRL_SEL_LEN) - 1) << GLB_DLL_VCTRL_SEL_POS))\n#define GLB_DLL_PRECHG_SEL           GLB_DLL_PRECHG_SEL\n#define GLB_DLL_PRECHG_SEL_POS       (12U)\n#define GLB_DLL_PRECHG_SEL_LEN       (1U)\n#define GLB_DLL_PRECHG_SEL_MSK       (((1U << GLB_DLL_PRECHG_SEL_LEN) - 1) << GLB_DLL_PRECHG_SEL_POS)\n#define GLB_DLL_PRECHG_SEL_UMSK      (~(((1U << GLB_DLL_PRECHG_SEL_LEN) - 1) << GLB_DLL_PRECHG_SEL_POS))\n#define GLB_DLL_PRECHG_REG           GLB_DLL_PRECHG_REG\n#define GLB_DLL_PRECHG_REG_POS       (13U)\n#define GLB_DLL_PRECHG_REG_LEN       (1U)\n#define GLB_DLL_PRECHG_REG_MSK       (((1U << GLB_DLL_PRECHG_REG_LEN) - 1) << GLB_DLL_PRECHG_REG_POS)\n#define GLB_DLL_PRECHG_REG_UMSK      (~(((1U << GLB_DLL_PRECHG_REG_LEN) - 1) << GLB_DLL_PRECHG_REG_POS))\n#define GLB_DLL_PRECHG_EN            GLB_DLL_PRECHG_EN\n#define GLB_DLL_PRECHG_EN_POS        (14U)\n#define GLB_DLL_PRECHG_EN_LEN        (1U)\n#define GLB_DLL_PRECHG_EN_MSK        (((1U << GLB_DLL_PRECHG_EN_LEN) - 1) << GLB_DLL_PRECHG_EN_POS)\n#define GLB_DLL_PRECHG_EN_UMSK       (~(((1U << GLB_DLL_PRECHG_EN_LEN) - 1) << GLB_DLL_PRECHG_EN_POS))\n#define GLB_DLL_VCTRL_FORCE_EN       GLB_DLL_VCTRL_FORCE_EN\n#define GLB_DLL_VCTRL_FORCE_EN_POS   (15U)\n#define GLB_DLL_VCTRL_FORCE_EN_LEN   (1U)\n#define GLB_DLL_VCTRL_FORCE_EN_MSK   (((1U << GLB_DLL_VCTRL_FORCE_EN_LEN) - 1) << GLB_DLL_VCTRL_FORCE_EN_POS)\n#define GLB_DLL_VCTRL_FORCE_EN_UMSK  (~(((1U << GLB_DLL_VCTRL_FORCE_EN_LEN) - 1) << GLB_DLL_VCTRL_FORCE_EN_POS))\n#define GLB_DLL_POST_DIV             GLB_DLL_POST_DIV\n#define GLB_DLL_POST_DIV_POS         (16U)\n#define GLB_DLL_POST_DIV_LEN         (4U)\n#define GLB_DLL_POST_DIV_MSK         (((1U << GLB_DLL_POST_DIV_LEN) - 1) << GLB_DLL_POST_DIV_POS)\n#define GLB_DLL_POST_DIV_UMSK        (~(((1U << GLB_DLL_POST_DIV_LEN) - 1) << GLB_DLL_POST_DIV_POS))\n#define GLB_DLL_DELAY_SEL            GLB_DLL_DELAY_SEL\n#define GLB_DLL_DELAY_SEL_POS        (20U)\n#define GLB_DLL_DELAY_SEL_LEN        (2U)\n#define GLB_DLL_DELAY_SEL_MSK        (((1U << GLB_DLL_DELAY_SEL_LEN) - 1) << GLB_DLL_DELAY_SEL_POS)\n#define GLB_DLL_DELAY_SEL_UMSK       (~(((1U << GLB_DLL_DELAY_SEL_LEN) - 1) << GLB_DLL_DELAY_SEL_POS))\n#define GLB_DLL_CP_OP_EN             GLB_DLL_CP_OP_EN\n#define GLB_DLL_CP_OP_EN_POS         (22U)\n#define GLB_DLL_CP_OP_EN_LEN         (1U)\n#define GLB_DLL_CP_OP_EN_MSK         (((1U << GLB_DLL_CP_OP_EN_LEN) - 1) << GLB_DLL_CP_OP_EN_POS)\n#define GLB_DLL_CP_OP_EN_UMSK        (~(((1U << GLB_DLL_CP_OP_EN_LEN) - 1) << GLB_DLL_CP_OP_EN_POS))\n#define GLB_DLL_CP_HIZ               GLB_DLL_CP_HIZ\n#define GLB_DLL_CP_HIZ_POS           (23U)\n#define GLB_DLL_CP_HIZ_LEN           (1U)\n#define GLB_DLL_CP_HIZ_MSK           (((1U << GLB_DLL_CP_HIZ_LEN) - 1) << GLB_DLL_CP_HIZ_POS)\n#define GLB_DLL_CP_HIZ_UMSK          (~(((1U << GLB_DLL_CP_HIZ_LEN) - 1) << GLB_DLL_CP_HIZ_POS))\n#define GLB_DLL_REFCLK_SEL           GLB_DLL_REFCLK_SEL\n#define GLB_DLL_REFCLK_SEL_POS       (28U)\n#define GLB_DLL_REFCLK_SEL_LEN       (1U)\n#define GLB_DLL_REFCLK_SEL_MSK       (((1U << GLB_DLL_REFCLK_SEL_LEN) - 1) << GLB_DLL_REFCLK_SEL_POS)\n#define GLB_DLL_REFCLK_SEL_UMSK      (~(((1U << GLB_DLL_REFCLK_SEL_LEN) - 1) << GLB_DLL_REFCLK_SEL_POS))\n#define GLB_DLL_RESET                GLB_DLL_RESET\n#define GLB_DLL_RESET_POS            (29U)\n#define GLB_DLL_RESET_LEN            (1U)\n#define GLB_DLL_RESET_MSK            (((1U << GLB_DLL_RESET_LEN) - 1) << GLB_DLL_RESET_POS)\n#define GLB_DLL_RESET_UMSK           (~(((1U << GLB_DLL_RESET_LEN) - 1) << GLB_DLL_RESET_POS))\n#define GLB_PU_DLL                   GLB_PU_DLL\n#define GLB_PU_DLL_POS               (30U)\n#define GLB_PU_DLL_LEN               (1U)\n#define GLB_PU_DLL_MSK               (((1U << GLB_PU_DLL_LEN) - 1) << GLB_PU_DLL_POS)\n#define GLB_PU_DLL_UMSK              (~(((1U << GLB_PU_DLL_LEN) - 1) << GLB_PU_DLL_POS))\n#define GLB_PPU_DLL                  GLB_PPU_DLL\n#define GLB_PPU_DLL_POS              (31U)\n#define GLB_PPU_DLL_LEN              (1U)\n#define GLB_PPU_DLL_MSK              (((1U << GLB_PPU_DLL_LEN) - 1) << GLB_PPU_DLL_POS)\n#define GLB_PPU_DLL_UMSK             (~(((1U << GLB_PPU_DLL_LEN) - 1) << GLB_PPU_DLL_POS))\n\n/* 0x224 : led_driver */\n#define GLB_LED_DRIVER_OFFSET         (0x224)\n#define GLB_LED_DIN_REG               GLB_LED_DIN_REG\n#define GLB_LED_DIN_REG_POS           (0U)\n#define GLB_LED_DIN_REG_LEN           (1U)\n#define GLB_LED_DIN_REG_MSK           (((1U << GLB_LED_DIN_REG_LEN) - 1) << GLB_LED_DIN_REG_POS)\n#define GLB_LED_DIN_REG_UMSK          (~(((1U << GLB_LED_DIN_REG_LEN) - 1) << GLB_LED_DIN_REG_POS))\n#define GLB_LED_DIN_SEL               GLB_LED_DIN_SEL\n#define GLB_LED_DIN_SEL_POS           (1U)\n#define GLB_LED_DIN_SEL_LEN           (1U)\n#define GLB_LED_DIN_SEL_MSK           (((1U << GLB_LED_DIN_SEL_LEN) - 1) << GLB_LED_DIN_SEL_POS)\n#define GLB_LED_DIN_SEL_UMSK          (~(((1U << GLB_LED_DIN_SEL_LEN) - 1) << GLB_LED_DIN_SEL_POS))\n#define GLB_LED_DIN_POLARITY_SEL      GLB_LED_DIN_POLARITY_SEL\n#define GLB_LED_DIN_POLARITY_SEL_POS  (2U)\n#define GLB_LED_DIN_POLARITY_SEL_LEN  (1U)\n#define GLB_LED_DIN_POLARITY_SEL_MSK  (((1U << GLB_LED_DIN_POLARITY_SEL_LEN) - 1) << GLB_LED_DIN_POLARITY_SEL_POS)\n#define GLB_LED_DIN_POLARITY_SEL_UMSK (~(((1U << GLB_LED_DIN_POLARITY_SEL_LEN) - 1) << GLB_LED_DIN_POLARITY_SEL_POS))\n#define GLB_LEDDRV_IBIAS              GLB_LEDDRV_IBIAS\n#define GLB_LEDDRV_IBIAS_POS          (4U)\n#define GLB_LEDDRV_IBIAS_LEN          (4U)\n#define GLB_LEDDRV_IBIAS_MSK          (((1U << GLB_LEDDRV_IBIAS_LEN) - 1) << GLB_LEDDRV_IBIAS_POS)\n#define GLB_LEDDRV_IBIAS_UMSK         (~(((1U << GLB_LEDDRV_IBIAS_LEN) - 1) << GLB_LEDDRV_IBIAS_POS))\n#define GLB_IR_RX_GPIO_SEL            GLB_IR_RX_GPIO_SEL\n#define GLB_IR_RX_GPIO_SEL_POS        (8U)\n#define GLB_IR_RX_GPIO_SEL_LEN        (4U)\n#define GLB_IR_RX_GPIO_SEL_MSK        (((1U << GLB_IR_RX_GPIO_SEL_LEN) - 1) << GLB_IR_RX_GPIO_SEL_POS)\n#define GLB_IR_RX_GPIO_SEL_UMSK       (~(((1U << GLB_IR_RX_GPIO_SEL_LEN) - 1) << GLB_IR_RX_GPIO_SEL_POS))\n#define GLB_LEDDRV_OUT_EN             GLB_LEDDRV_OUT_EN\n#define GLB_LEDDRV_OUT_EN_POS         (28U)\n#define GLB_LEDDRV_OUT_EN_LEN         (2U)\n#define GLB_LEDDRV_OUT_EN_MSK         (((1U << GLB_LEDDRV_OUT_EN_LEN) - 1) << GLB_LEDDRV_OUT_EN_POS)\n#define GLB_LEDDRV_OUT_EN_UMSK        (~(((1U << GLB_LEDDRV_OUT_EN_LEN) - 1) << GLB_LEDDRV_OUT_EN_POS))\n#define GLB_PU_LEDDRV                 GLB_PU_LEDDRV\n#define GLB_PU_LEDDRV_POS             (31U)\n#define GLB_PU_LEDDRV_LEN             (1U)\n#define GLB_PU_LEDDRV_MSK             (((1U << GLB_PU_LEDDRV_LEN) - 1) << GLB_PU_LEDDRV_POS)\n#define GLB_PU_LEDDRV_UMSK            (~(((1U << GLB_PU_LEDDRV_LEN) - 1) << GLB_PU_LEDDRV_POS))\n\n/* 0x228 : usb_xcvr */\n#define GLB_USB_XCVR_OFFSET       (0x228)\n#define GLB_USB_LDO_VFB           GLB_USB_LDO_VFB\n#define GLB_USB_LDO_VFB_POS       (0U)\n#define GLB_USB_LDO_VFB_LEN       (3U)\n#define GLB_USB_LDO_VFB_MSK       (((1U << GLB_USB_LDO_VFB_LEN) - 1) << GLB_USB_LDO_VFB_POS)\n#define GLB_USB_LDO_VFB_UMSK      (~(((1U << GLB_USB_LDO_VFB_LEN) - 1) << GLB_USB_LDO_VFB_POS))\n#define GLB_PU_USB_LDO            GLB_PU_USB_LDO\n#define GLB_PU_USB_LDO_POS        (3U)\n#define GLB_PU_USB_LDO_LEN        (1U)\n#define GLB_PU_USB_LDO_MSK        (((1U << GLB_PU_USB_LDO_LEN) - 1) << GLB_PU_USB_LDO_POS)\n#define GLB_PU_USB_LDO_UMSK       (~(((1U << GLB_PU_USB_LDO_LEN) - 1) << GLB_PU_USB_LDO_POS))\n#define GLB_USB_ROUT_NMOS         GLB_USB_ROUT_NMOS\n#define GLB_USB_ROUT_NMOS_POS     (4U)\n#define GLB_USB_ROUT_NMOS_LEN     (3U)\n#define GLB_USB_ROUT_NMOS_MSK     (((1U << GLB_USB_ROUT_NMOS_LEN) - 1) << GLB_USB_ROUT_NMOS_POS)\n#define GLB_USB_ROUT_NMOS_UMSK    (~(((1U << GLB_USB_ROUT_NMOS_LEN) - 1) << GLB_USB_ROUT_NMOS_POS))\n#define GLB_USB_ROUT_PMOS         GLB_USB_ROUT_PMOS\n#define GLB_USB_ROUT_PMOS_POS     (8U)\n#define GLB_USB_ROUT_PMOS_LEN     (3U)\n#define GLB_USB_ROUT_PMOS_MSK     (((1U << GLB_USB_ROUT_PMOS_LEN) - 1) << GLB_USB_ROUT_PMOS_POS)\n#define GLB_USB_ROUT_PMOS_UMSK    (~(((1U << GLB_USB_ROUT_PMOS_LEN) - 1) << GLB_USB_ROUT_PMOS_POS))\n#define GLB_USB_OEB_SEL           GLB_USB_OEB_SEL\n#define GLB_USB_OEB_SEL_POS       (12U)\n#define GLB_USB_OEB_SEL_LEN       (1U)\n#define GLB_USB_OEB_SEL_MSK       (((1U << GLB_USB_OEB_SEL_LEN) - 1) << GLB_USB_OEB_SEL_POS)\n#define GLB_USB_OEB_SEL_UMSK      (~(((1U << GLB_USB_OEB_SEL_LEN) - 1) << GLB_USB_OEB_SEL_POS))\n#define GLB_USB_OEB_REG           GLB_USB_OEB_REG\n#define GLB_USB_OEB_REG_POS       (13U)\n#define GLB_USB_OEB_REG_LEN       (1U)\n#define GLB_USB_OEB_REG_MSK       (((1U << GLB_USB_OEB_REG_LEN) - 1) << GLB_USB_OEB_REG_POS)\n#define GLB_USB_OEB_REG_UMSK      (~(((1U << GLB_USB_OEB_REG_LEN) - 1) << GLB_USB_OEB_REG_POS))\n#define GLB_USB_OEB               GLB_USB_OEB\n#define GLB_USB_OEB_POS           (14U)\n#define GLB_USB_OEB_LEN           (1U)\n#define GLB_USB_OEB_MSK           (((1U << GLB_USB_OEB_LEN) - 1) << GLB_USB_OEB_POS)\n#define GLB_USB_OEB_UMSK          (~(((1U << GLB_USB_OEB_LEN) - 1) << GLB_USB_OEB_POS))\n#define GLB_USB_DATA_CONVERT      GLB_USB_DATA_CONVERT\n#define GLB_USB_DATA_CONVERT_POS  (16U)\n#define GLB_USB_DATA_CONVERT_LEN  (1U)\n#define GLB_USB_DATA_CONVERT_MSK  (((1U << GLB_USB_DATA_CONVERT_LEN) - 1) << GLB_USB_DATA_CONVERT_POS)\n#define GLB_USB_DATA_CONVERT_UMSK (~(((1U << GLB_USB_DATA_CONVERT_LEN) - 1) << GLB_USB_DATA_CONVERT_POS))\n#define GLB_USB_ENUM              GLB_USB_ENUM\n#define GLB_USB_ENUM_POS          (20U)\n#define GLB_USB_ENUM_LEN          (1U)\n#define GLB_USB_ENUM_MSK          (((1U << GLB_USB_ENUM_LEN) - 1) << GLB_USB_ENUM_POS)\n#define GLB_USB_ENUM_UMSK         (~(((1U << GLB_USB_ENUM_LEN) - 1) << GLB_USB_ENUM_POS))\n#define GLB_USB_SPD               GLB_USB_SPD\n#define GLB_USB_SPD_POS           (21U)\n#define GLB_USB_SPD_LEN           (1U)\n#define GLB_USB_SPD_MSK           (((1U << GLB_USB_SPD_LEN) - 1) << GLB_USB_SPD_POS)\n#define GLB_USB_SPD_UMSK          (~(((1U << GLB_USB_SPD_LEN) - 1) << GLB_USB_SPD_POS))\n#define GLB_USB_SUS               GLB_USB_SUS\n#define GLB_USB_SUS_POS           (22U)\n#define GLB_USB_SUS_LEN           (1U)\n#define GLB_USB_SUS_MSK           (((1U << GLB_USB_SUS_LEN) - 1) << GLB_USB_SUS_POS)\n#define GLB_USB_SUS_UMSK          (~(((1U << GLB_USB_SUS_LEN) - 1) << GLB_USB_SUS_POS))\n#define GLB_PU_USB                GLB_PU_USB\n#define GLB_PU_USB_POS            (23U)\n#define GLB_PU_USB_LEN            (1U)\n#define GLB_PU_USB_MSK            (((1U << GLB_PU_USB_LEN) - 1) << GLB_PU_USB_POS)\n#define GLB_PU_USB_UMSK           (~(((1U << GLB_PU_USB_LEN) - 1) << GLB_PU_USB_POS))\n#define GLB_USB_BD                GLB_USB_BD\n#define GLB_USB_BD_POS            (24U)\n#define GLB_USB_BD_LEN            (1U)\n#define GLB_USB_BD_MSK            (((1U << GLB_USB_BD_LEN) - 1) << GLB_USB_BD_POS)\n#define GLB_USB_BD_UMSK           (~(((1U << GLB_USB_BD_LEN) - 1) << GLB_USB_BD_POS))\n#define GLB_USB_VIM               GLB_USB_VIM\n#define GLB_USB_VIM_POS           (25U)\n#define GLB_USB_VIM_LEN           (1U)\n#define GLB_USB_VIM_MSK           (((1U << GLB_USB_VIM_LEN) - 1) << GLB_USB_VIM_POS)\n#define GLB_USB_VIM_UMSK          (~(((1U << GLB_USB_VIM_LEN) - 1) << GLB_USB_VIM_POS))\n#define GLB_USB_VIP               GLB_USB_VIP\n#define GLB_USB_VIP_POS           (26U)\n#define GLB_USB_VIP_LEN           (1U)\n#define GLB_USB_VIP_MSK           (((1U << GLB_USB_VIP_LEN) - 1) << GLB_USB_VIP_POS)\n#define GLB_USB_VIP_UMSK          (~(((1U << GLB_USB_VIP_LEN) - 1) << GLB_USB_VIP_POS))\n#define GLB_USB_RCV               GLB_USB_RCV\n#define GLB_USB_RCV_POS           (27U)\n#define GLB_USB_RCV_LEN           (1U)\n#define GLB_USB_RCV_MSK           (((1U << GLB_USB_RCV_LEN) - 1) << GLB_USB_RCV_POS)\n#define GLB_USB_RCV_UMSK          (~(((1U << GLB_USB_RCV_LEN) - 1) << GLB_USB_RCV_POS))\n\n/* 0x22C : usb_xcvr_config */\n#define GLB_USB_XCVR_CONFIG_OFFSET   (0x22C)\n#define GLB_USB_V_HYS_M              GLB_USB_V_HYS_M\n#define GLB_USB_V_HYS_M_POS          (0U)\n#define GLB_USB_V_HYS_M_LEN          (2U)\n#define GLB_USB_V_HYS_M_MSK          (((1U << GLB_USB_V_HYS_M_LEN) - 1) << GLB_USB_V_HYS_M_POS)\n#define GLB_USB_V_HYS_M_UMSK         (~(((1U << GLB_USB_V_HYS_M_LEN) - 1) << GLB_USB_V_HYS_M_POS))\n#define GLB_USB_V_HYS_P              GLB_USB_V_HYS_P\n#define GLB_USB_V_HYS_P_POS          (2U)\n#define GLB_USB_V_HYS_P_LEN          (2U)\n#define GLB_USB_V_HYS_P_MSK          (((1U << GLB_USB_V_HYS_P_LEN) - 1) << GLB_USB_V_HYS_P_POS)\n#define GLB_USB_V_HYS_P_UMSK         (~(((1U << GLB_USB_V_HYS_P_LEN) - 1) << GLB_USB_V_HYS_P_POS))\n#define GLB_USB_BD_VTH               GLB_USB_BD_VTH\n#define GLB_USB_BD_VTH_POS           (4U)\n#define GLB_USB_BD_VTH_LEN           (3U)\n#define GLB_USB_BD_VTH_MSK           (((1U << GLB_USB_BD_VTH_LEN) - 1) << GLB_USB_BD_VTH_POS)\n#define GLB_USB_BD_VTH_UMSK          (~(((1U << GLB_USB_BD_VTH_LEN) - 1) << GLB_USB_BD_VTH_POS))\n#define GLB_REG_USB_USE_XCVR         GLB_REG_USB_USE_XCVR\n#define GLB_REG_USB_USE_XCVR_POS     (7U)\n#define GLB_REG_USB_USE_XCVR_LEN     (1U)\n#define GLB_REG_USB_USE_XCVR_MSK     (((1U << GLB_REG_USB_USE_XCVR_LEN) - 1) << GLB_REG_USB_USE_XCVR_POS)\n#define GLB_REG_USB_USE_XCVR_UMSK    (~(((1U << GLB_REG_USB_USE_XCVR_LEN) - 1) << GLB_REG_USB_USE_XCVR_POS))\n#define GLB_USB_STR_DRV              GLB_USB_STR_DRV\n#define GLB_USB_STR_DRV_POS          (8U)\n#define GLB_USB_STR_DRV_LEN          (3U)\n#define GLB_USB_STR_DRV_MSK          (((1U << GLB_USB_STR_DRV_LEN) - 1) << GLB_USB_STR_DRV_POS)\n#define GLB_USB_STR_DRV_UMSK         (~(((1U << GLB_USB_STR_DRV_LEN) - 1) << GLB_USB_STR_DRV_POS))\n#define GLB_REG_USB_USE_CTRL         GLB_REG_USB_USE_CTRL\n#define GLB_REG_USB_USE_CTRL_POS     (11U)\n#define GLB_REG_USB_USE_CTRL_LEN     (1U)\n#define GLB_REG_USB_USE_CTRL_MSK     (((1U << GLB_REG_USB_USE_CTRL_LEN) - 1) << GLB_REG_USB_USE_CTRL_POS)\n#define GLB_REG_USB_USE_CTRL_UMSK    (~(((1U << GLB_REG_USB_USE_CTRL_LEN) - 1) << GLB_REG_USB_USE_CTRL_POS))\n#define GLB_USB_RES_PULLUP_TUNE      GLB_USB_RES_PULLUP_TUNE\n#define GLB_USB_RES_PULLUP_TUNE_POS  (12U)\n#define GLB_USB_RES_PULLUP_TUNE_LEN  (3U)\n#define GLB_USB_RES_PULLUP_TUNE_MSK  (((1U << GLB_USB_RES_PULLUP_TUNE_LEN) - 1) << GLB_USB_RES_PULLUP_TUNE_POS)\n#define GLB_USB_RES_PULLUP_TUNE_UMSK (~(((1U << GLB_USB_RES_PULLUP_TUNE_LEN) - 1) << GLB_USB_RES_PULLUP_TUNE_POS))\n#define GLB_USB_SLEWRATE_M_FALL      GLB_USB_SLEWRATE_M_FALL\n#define GLB_USB_SLEWRATE_M_FALL_POS  (16U)\n#define GLB_USB_SLEWRATE_M_FALL_LEN  (3U)\n#define GLB_USB_SLEWRATE_M_FALL_MSK  (((1U << GLB_USB_SLEWRATE_M_FALL_LEN) - 1) << GLB_USB_SLEWRATE_M_FALL_POS)\n#define GLB_USB_SLEWRATE_M_FALL_UMSK (~(((1U << GLB_USB_SLEWRATE_M_FALL_LEN) - 1) << GLB_USB_SLEWRATE_M_FALL_POS))\n#define GLB_USB_SLEWRATE_M_RISE      GLB_USB_SLEWRATE_M_RISE\n#define GLB_USB_SLEWRATE_M_RISE_POS  (20U)\n#define GLB_USB_SLEWRATE_M_RISE_LEN  (3U)\n#define GLB_USB_SLEWRATE_M_RISE_MSK  (((1U << GLB_USB_SLEWRATE_M_RISE_LEN) - 1) << GLB_USB_SLEWRATE_M_RISE_POS)\n#define GLB_USB_SLEWRATE_M_RISE_UMSK (~(((1U << GLB_USB_SLEWRATE_M_RISE_LEN) - 1) << GLB_USB_SLEWRATE_M_RISE_POS))\n#define GLB_USB_SLEWRATE_P_FALL      GLB_USB_SLEWRATE_P_FALL\n#define GLB_USB_SLEWRATE_P_FALL_POS  (24U)\n#define GLB_USB_SLEWRATE_P_FALL_LEN  (3U)\n#define GLB_USB_SLEWRATE_P_FALL_MSK  (((1U << GLB_USB_SLEWRATE_P_FALL_LEN) - 1) << GLB_USB_SLEWRATE_P_FALL_POS)\n#define GLB_USB_SLEWRATE_P_FALL_UMSK (~(((1U << GLB_USB_SLEWRATE_P_FALL_LEN) - 1) << GLB_USB_SLEWRATE_P_FALL_POS))\n#define GLB_USB_SLEWRATE_P_RISE      GLB_USB_SLEWRATE_P_RISE\n#define GLB_USB_SLEWRATE_P_RISE_POS  (28U)\n#define GLB_USB_SLEWRATE_P_RISE_LEN  (3U)\n#define GLB_USB_SLEWRATE_P_RISE_MSK  (((1U << GLB_USB_SLEWRATE_P_RISE_LEN) - 1) << GLB_USB_SLEWRATE_P_RISE_POS)\n#define GLB_USB_SLEWRATE_P_RISE_UMSK (~(((1U << GLB_USB_SLEWRATE_P_RISE_LEN) - 1) << GLB_USB_SLEWRATE_P_RISE_POS))\n\n/* 0x308 : gpdac_ctrl */\n#define GLB_GPDAC_CTRL_OFFSET    (0x308)\n#define GLB_GPDACA_RSTN_ANA      GLB_GPDACA_RSTN_ANA\n#define GLB_GPDACA_RSTN_ANA_POS  (0U)\n#define GLB_GPDACA_RSTN_ANA_LEN  (1U)\n#define GLB_GPDACA_RSTN_ANA_MSK  (((1U << GLB_GPDACA_RSTN_ANA_LEN) - 1) << GLB_GPDACA_RSTN_ANA_POS)\n#define GLB_GPDACA_RSTN_ANA_UMSK (~(((1U << GLB_GPDACA_RSTN_ANA_LEN) - 1) << GLB_GPDACA_RSTN_ANA_POS))\n#define GLB_GPDACB_RSTN_ANA      GLB_GPDACB_RSTN_ANA\n#define GLB_GPDACB_RSTN_ANA_POS  (1U)\n#define GLB_GPDACB_RSTN_ANA_LEN  (1U)\n#define GLB_GPDACB_RSTN_ANA_MSK  (((1U << GLB_GPDACB_RSTN_ANA_LEN) - 1) << GLB_GPDACB_RSTN_ANA_POS)\n#define GLB_GPDACB_RSTN_ANA_UMSK (~(((1U << GLB_GPDACB_RSTN_ANA_LEN) - 1) << GLB_GPDACB_RSTN_ANA_POS))\n#define GLB_GPDAC_TEST_EN        GLB_GPDAC_TEST_EN\n#define GLB_GPDAC_TEST_EN_POS    (7U)\n#define GLB_GPDAC_TEST_EN_LEN    (1U)\n#define GLB_GPDAC_TEST_EN_MSK    (((1U << GLB_GPDAC_TEST_EN_LEN) - 1) << GLB_GPDAC_TEST_EN_POS)\n#define GLB_GPDAC_TEST_EN_UMSK   (~(((1U << GLB_GPDAC_TEST_EN_LEN) - 1) << GLB_GPDAC_TEST_EN_POS))\n#define GLB_GPDAC_REF_SEL        GLB_GPDAC_REF_SEL\n#define GLB_GPDAC_REF_SEL_POS    (8U)\n#define GLB_GPDAC_REF_SEL_LEN    (1U)\n#define GLB_GPDAC_REF_SEL_MSK    (((1U << GLB_GPDAC_REF_SEL_LEN) - 1) << GLB_GPDAC_REF_SEL_POS)\n#define GLB_GPDAC_REF_SEL_UMSK   (~(((1U << GLB_GPDAC_REF_SEL_LEN) - 1) << GLB_GPDAC_REF_SEL_POS))\n#define GLB_GPDAC_TEST_SEL       GLB_GPDAC_TEST_SEL\n#define GLB_GPDAC_TEST_SEL_POS   (9U)\n#define GLB_GPDAC_TEST_SEL_LEN   (3U)\n#define GLB_GPDAC_TEST_SEL_MSK   (((1U << GLB_GPDAC_TEST_SEL_LEN) - 1) << GLB_GPDAC_TEST_SEL_POS)\n#define GLB_GPDAC_TEST_SEL_UMSK  (~(((1U << GLB_GPDAC_TEST_SEL_LEN) - 1) << GLB_GPDAC_TEST_SEL_POS))\n#define GLB_GPDAC_RESERVED       GLB_GPDAC_RESERVED\n#define GLB_GPDAC_RESERVED_POS   (24U)\n#define GLB_GPDAC_RESERVED_LEN   (8U)\n#define GLB_GPDAC_RESERVED_MSK   (((1U << GLB_GPDAC_RESERVED_LEN) - 1) << GLB_GPDAC_RESERVED_POS)\n#define GLB_GPDAC_RESERVED_UMSK  (~(((1U << GLB_GPDAC_RESERVED_LEN) - 1) << GLB_GPDAC_RESERVED_POS))\n\n/* 0x30C : gpdac_actrl */\n#define GLB_GPDAC_ACTRL_OFFSET  (0x30C)\n#define GLB_GPDAC_A_EN          GLB_GPDAC_A_EN\n#define GLB_GPDAC_A_EN_POS      (0U)\n#define GLB_GPDAC_A_EN_LEN      (1U)\n#define GLB_GPDAC_A_EN_MSK      (((1U << GLB_GPDAC_A_EN_LEN) - 1) << GLB_GPDAC_A_EN_POS)\n#define GLB_GPDAC_A_EN_UMSK     (~(((1U << GLB_GPDAC_A_EN_LEN) - 1) << GLB_GPDAC_A_EN_POS))\n#define GLB_GPDAC_IOA_EN        GLB_GPDAC_IOA_EN\n#define GLB_GPDAC_IOA_EN_POS    (1U)\n#define GLB_GPDAC_IOA_EN_LEN    (1U)\n#define GLB_GPDAC_IOA_EN_MSK    (((1U << GLB_GPDAC_IOA_EN_LEN) - 1) << GLB_GPDAC_IOA_EN_POS)\n#define GLB_GPDAC_IOA_EN_UMSK   (~(((1U << GLB_GPDAC_IOA_EN_LEN) - 1) << GLB_GPDAC_IOA_EN_POS))\n#define GLB_GPDAC_A_RNG         GLB_GPDAC_A_RNG\n#define GLB_GPDAC_A_RNG_POS     (18U)\n#define GLB_GPDAC_A_RNG_LEN     (2U)\n#define GLB_GPDAC_A_RNG_MSK     (((1U << GLB_GPDAC_A_RNG_LEN) - 1) << GLB_GPDAC_A_RNG_POS)\n#define GLB_GPDAC_A_RNG_UMSK    (~(((1U << GLB_GPDAC_A_RNG_LEN) - 1) << GLB_GPDAC_A_RNG_POS))\n#define GLB_GPDAC_A_OUTMUX      GLB_GPDAC_A_OUTMUX\n#define GLB_GPDAC_A_OUTMUX_POS  (20U)\n#define GLB_GPDAC_A_OUTMUX_LEN  (3U)\n#define GLB_GPDAC_A_OUTMUX_MSK  (((1U << GLB_GPDAC_A_OUTMUX_LEN) - 1) << GLB_GPDAC_A_OUTMUX_POS)\n#define GLB_GPDAC_A_OUTMUX_UMSK (~(((1U << GLB_GPDAC_A_OUTMUX_LEN) - 1) << GLB_GPDAC_A_OUTMUX_POS))\n\n/* 0x310 : gpdac_bctrl */\n#define GLB_GPDAC_BCTRL_OFFSET  (0x310)\n#define GLB_GPDAC_B_EN          GLB_GPDAC_B_EN\n#define GLB_GPDAC_B_EN_POS      (0U)\n#define GLB_GPDAC_B_EN_LEN      (1U)\n#define GLB_GPDAC_B_EN_MSK      (((1U << GLB_GPDAC_B_EN_LEN) - 1) << GLB_GPDAC_B_EN_POS)\n#define GLB_GPDAC_B_EN_UMSK     (~(((1U << GLB_GPDAC_B_EN_LEN) - 1) << GLB_GPDAC_B_EN_POS))\n#define GLB_GPDAC_IOB_EN        GLB_GPDAC_IOB_EN\n#define GLB_GPDAC_IOB_EN_POS    (1U)\n#define GLB_GPDAC_IOB_EN_LEN    (1U)\n#define GLB_GPDAC_IOB_EN_MSK    (((1U << GLB_GPDAC_IOB_EN_LEN) - 1) << GLB_GPDAC_IOB_EN_POS)\n#define GLB_GPDAC_IOB_EN_UMSK   (~(((1U << GLB_GPDAC_IOB_EN_LEN) - 1) << GLB_GPDAC_IOB_EN_POS))\n#define GLB_GPDAC_B_RNG         GLB_GPDAC_B_RNG\n#define GLB_GPDAC_B_RNG_POS     (18U)\n#define GLB_GPDAC_B_RNG_LEN     (2U)\n#define GLB_GPDAC_B_RNG_MSK     (((1U << GLB_GPDAC_B_RNG_LEN) - 1) << GLB_GPDAC_B_RNG_POS)\n#define GLB_GPDAC_B_RNG_UMSK    (~(((1U << GLB_GPDAC_B_RNG_LEN) - 1) << GLB_GPDAC_B_RNG_POS))\n#define GLB_GPDAC_B_OUTMUX      GLB_GPDAC_B_OUTMUX\n#define GLB_GPDAC_B_OUTMUX_POS  (20U)\n#define GLB_GPDAC_B_OUTMUX_LEN  (3U)\n#define GLB_GPDAC_B_OUTMUX_MSK  (((1U << GLB_GPDAC_B_OUTMUX_LEN) - 1) << GLB_GPDAC_B_OUTMUX_POS)\n#define GLB_GPDAC_B_OUTMUX_UMSK (~(((1U << GLB_GPDAC_B_OUTMUX_LEN) - 1) << GLB_GPDAC_B_OUTMUX_POS))\n\n/* 0x314 : gpdac_data */\n#define GLB_GPDAC_DATA_OFFSET (0x314)\n#define GLB_GPDAC_B_DATA      GLB_GPDAC_B_DATA\n#define GLB_GPDAC_B_DATA_POS  (0U)\n#define GLB_GPDAC_B_DATA_LEN  (10U)\n#define GLB_GPDAC_B_DATA_MSK  (((1U << GLB_GPDAC_B_DATA_LEN) - 1) << GLB_GPDAC_B_DATA_POS)\n#define GLB_GPDAC_B_DATA_UMSK (~(((1U << GLB_GPDAC_B_DATA_LEN) - 1) << GLB_GPDAC_B_DATA_POS))\n#define GLB_GPDAC_A_DATA      GLB_GPDAC_A_DATA\n#define GLB_GPDAC_A_DATA_POS  (16U)\n#define GLB_GPDAC_A_DATA_LEN  (10U)\n#define GLB_GPDAC_A_DATA_MSK  (((1U << GLB_GPDAC_A_DATA_LEN) - 1) << GLB_GPDAC_A_DATA_POS)\n#define GLB_GPDAC_A_DATA_UMSK (~(((1U << GLB_GPDAC_A_DATA_LEN) - 1) << GLB_GPDAC_A_DATA_POS))\n\n/* 0xE00 : chip_revision */\n#define GLB_CHIP_REVISION_OFFSET (0xE00)\n#define GLB_CHIP_REV             GLB_CHIP_REV\n#define GLB_CHIP_REV_POS         (0U)\n#define GLB_CHIP_REV_LEN         (4U)\n#define GLB_CHIP_REV_MSK         (((1U << GLB_CHIP_REV_LEN) - 1) << GLB_CHIP_REV_POS)\n#define GLB_CHIP_REV_UMSK        (~(((1U << GLB_CHIP_REV_LEN) - 1) << GLB_CHIP_REV_POS))\n\n/* 0xF00 : tzc_glb_ctrl_0 */\n#define GLB_TZC_GLB_CTRL_0_OFFSET             (0xF00)\n#define GLB_TZC_GLB_SWRST_S00_LOCK            GLB_TZC_GLB_SWRST_S00_LOCK\n#define GLB_TZC_GLB_SWRST_S00_LOCK_POS        (0U)\n#define GLB_TZC_GLB_SWRST_S00_LOCK_LEN        (1U)\n#define GLB_TZC_GLB_SWRST_S00_LOCK_MSK        (((1U << GLB_TZC_GLB_SWRST_S00_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S00_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S00_LOCK_UMSK       (~(((1U << GLB_TZC_GLB_SWRST_S00_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S00_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S01_LOCK            GLB_TZC_GLB_SWRST_S01_LOCK\n#define GLB_TZC_GLB_SWRST_S01_LOCK_POS        (1U)\n#define GLB_TZC_GLB_SWRST_S01_LOCK_LEN        (1U)\n#define GLB_TZC_GLB_SWRST_S01_LOCK_MSK        (((1U << GLB_TZC_GLB_SWRST_S01_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S01_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S01_LOCK_UMSK       (~(((1U << GLB_TZC_GLB_SWRST_S01_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S01_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S30_LOCK            GLB_TZC_GLB_SWRST_S30_LOCK\n#define GLB_TZC_GLB_SWRST_S30_LOCK_POS        (8U)\n#define GLB_TZC_GLB_SWRST_S30_LOCK_LEN        (1U)\n#define GLB_TZC_GLB_SWRST_S30_LOCK_MSK        (((1U << GLB_TZC_GLB_SWRST_S30_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S30_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S30_LOCK_UMSK       (~(((1U << GLB_TZC_GLB_SWRST_S30_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S30_LOCK_POS))\n#define GLB_TZC_GLB_CTRL_PWRON_RST_LOCK       GLB_TZC_GLB_CTRL_PWRON_RST_LOCK\n#define GLB_TZC_GLB_CTRL_PWRON_RST_LOCK_POS   (12U)\n#define GLB_TZC_GLB_CTRL_PWRON_RST_LOCK_LEN   (1U)\n#define GLB_TZC_GLB_CTRL_PWRON_RST_LOCK_MSK   (((1U << GLB_TZC_GLB_CTRL_PWRON_RST_LOCK_LEN) - 1) << GLB_TZC_GLB_CTRL_PWRON_RST_LOCK_POS)\n#define GLB_TZC_GLB_CTRL_PWRON_RST_LOCK_UMSK  (~(((1U << GLB_TZC_GLB_CTRL_PWRON_RST_LOCK_LEN) - 1) << GLB_TZC_GLB_CTRL_PWRON_RST_LOCK_POS))\n#define GLB_TZC_GLB_CTRL_CPU_RESET_LOCK       GLB_TZC_GLB_CTRL_CPU_RESET_LOCK\n#define GLB_TZC_GLB_CTRL_CPU_RESET_LOCK_POS   (13U)\n#define GLB_TZC_GLB_CTRL_CPU_RESET_LOCK_LEN   (1U)\n#define GLB_TZC_GLB_CTRL_CPU_RESET_LOCK_MSK   (((1U << GLB_TZC_GLB_CTRL_CPU_RESET_LOCK_LEN) - 1) << GLB_TZC_GLB_CTRL_CPU_RESET_LOCK_POS)\n#define GLB_TZC_GLB_CTRL_CPU_RESET_LOCK_UMSK  (~(((1U << GLB_TZC_GLB_CTRL_CPU_RESET_LOCK_LEN) - 1) << GLB_TZC_GLB_CTRL_CPU_RESET_LOCK_POS))\n#define GLB_TZC_GLB_CTRL_SYS_RESET_LOCK       GLB_TZC_GLB_CTRL_SYS_RESET_LOCK\n#define GLB_TZC_GLB_CTRL_SYS_RESET_LOCK_POS   (14U)\n#define GLB_TZC_GLB_CTRL_SYS_RESET_LOCK_LEN   (1U)\n#define GLB_TZC_GLB_CTRL_SYS_RESET_LOCK_MSK   (((1U << GLB_TZC_GLB_CTRL_SYS_RESET_LOCK_LEN) - 1) << GLB_TZC_GLB_CTRL_SYS_RESET_LOCK_POS)\n#define GLB_TZC_GLB_CTRL_SYS_RESET_LOCK_UMSK  (~(((1U << GLB_TZC_GLB_CTRL_SYS_RESET_LOCK_LEN) - 1) << GLB_TZC_GLB_CTRL_SYS_RESET_LOCK_POS))\n#define GLB_TZC_GLB_CTRL_UNGATED_AP_LOCK      GLB_TZC_GLB_CTRL_UNGATED_AP_LOCK\n#define GLB_TZC_GLB_CTRL_UNGATED_AP_LOCK_POS  (15U)\n#define GLB_TZC_GLB_CTRL_UNGATED_AP_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_CTRL_UNGATED_AP_LOCK_MSK  (((1U << GLB_TZC_GLB_CTRL_UNGATED_AP_LOCK_LEN) - 1) << GLB_TZC_GLB_CTRL_UNGATED_AP_LOCK_POS)\n#define GLB_TZC_GLB_CTRL_UNGATED_AP_LOCK_UMSK (~(((1U << GLB_TZC_GLB_CTRL_UNGATED_AP_LOCK_LEN) - 1) << GLB_TZC_GLB_CTRL_UNGATED_AP_LOCK_POS))\n#define GLB_TZC_GLB_MISC_LOCK                 GLB_TZC_GLB_MISC_LOCK\n#define GLB_TZC_GLB_MISC_LOCK_POS             (25U)\n#define GLB_TZC_GLB_MISC_LOCK_LEN             (1U)\n#define GLB_TZC_GLB_MISC_LOCK_MSK             (((1U << GLB_TZC_GLB_MISC_LOCK_LEN) - 1) << GLB_TZC_GLB_MISC_LOCK_POS)\n#define GLB_TZC_GLB_MISC_LOCK_UMSK            (~(((1U << GLB_TZC_GLB_MISC_LOCK_LEN) - 1) << GLB_TZC_GLB_MISC_LOCK_POS))\n#define GLB_TZC_GLB_SRAM_LOCK                 GLB_TZC_GLB_SRAM_LOCK\n#define GLB_TZC_GLB_SRAM_LOCK_POS             (26U)\n#define GLB_TZC_GLB_SRAM_LOCK_LEN             (1U)\n#define GLB_TZC_GLB_SRAM_LOCK_MSK             (((1U << GLB_TZC_GLB_SRAM_LOCK_LEN) - 1) << GLB_TZC_GLB_SRAM_LOCK_POS)\n#define GLB_TZC_GLB_SRAM_LOCK_UMSK            (~(((1U << GLB_TZC_GLB_SRAM_LOCK_LEN) - 1) << GLB_TZC_GLB_SRAM_LOCK_POS))\n#define GLB_TZC_GLB_L2C_LOCK                  GLB_TZC_GLB_L2C_LOCK\n#define GLB_TZC_GLB_L2C_LOCK_POS              (27U)\n#define GLB_TZC_GLB_L2C_LOCK_LEN              (1U)\n#define GLB_TZC_GLB_L2C_LOCK_MSK              (((1U << GLB_TZC_GLB_L2C_LOCK_LEN) - 1) << GLB_TZC_GLB_L2C_LOCK_POS)\n#define GLB_TZC_GLB_L2C_LOCK_UMSK             (~(((1U << GLB_TZC_GLB_L2C_LOCK_LEN) - 1) << GLB_TZC_GLB_L2C_LOCK_POS))\n#define GLB_TZC_GLB_BMX_LOCK                  GLB_TZC_GLB_BMX_LOCK\n#define GLB_TZC_GLB_BMX_LOCK_POS              (28U)\n#define GLB_TZC_GLB_BMX_LOCK_LEN              (1U)\n#define GLB_TZC_GLB_BMX_LOCK_MSK              (((1U << GLB_TZC_GLB_BMX_LOCK_LEN) - 1) << GLB_TZC_GLB_BMX_LOCK_POS)\n#define GLB_TZC_GLB_BMX_LOCK_UMSK             (~(((1U << GLB_TZC_GLB_BMX_LOCK_LEN) - 1) << GLB_TZC_GLB_BMX_LOCK_POS))\n#define GLB_TZC_GLB_DBG_LOCK                  GLB_TZC_GLB_DBG_LOCK\n#define GLB_TZC_GLB_DBG_LOCK_POS              (29U)\n#define GLB_TZC_GLB_DBG_LOCK_LEN              (1U)\n#define GLB_TZC_GLB_DBG_LOCK_MSK              (((1U << GLB_TZC_GLB_DBG_LOCK_LEN) - 1) << GLB_TZC_GLB_DBG_LOCK_POS)\n#define GLB_TZC_GLB_DBG_LOCK_UMSK             (~(((1U << GLB_TZC_GLB_DBG_LOCK_LEN) - 1) << GLB_TZC_GLB_DBG_LOCK_POS))\n#define GLB_TZC_GLB_MBIST_LOCK                GLB_TZC_GLB_MBIST_LOCK\n#define GLB_TZC_GLB_MBIST_LOCK_POS            (30U)\n#define GLB_TZC_GLB_MBIST_LOCK_LEN            (1U)\n#define GLB_TZC_GLB_MBIST_LOCK_MSK            (((1U << GLB_TZC_GLB_MBIST_LOCK_LEN) - 1) << GLB_TZC_GLB_MBIST_LOCK_POS)\n#define GLB_TZC_GLB_MBIST_LOCK_UMSK           (~(((1U << GLB_TZC_GLB_MBIST_LOCK_LEN) - 1) << GLB_TZC_GLB_MBIST_LOCK_POS))\n#define GLB_TZC_GLB_CLK_LOCK                  GLB_TZC_GLB_CLK_LOCK\n#define GLB_TZC_GLB_CLK_LOCK_POS              (31U)\n#define GLB_TZC_GLB_CLK_LOCK_LEN              (1U)\n#define GLB_TZC_GLB_CLK_LOCK_MSK              (((1U << GLB_TZC_GLB_CLK_LOCK_LEN) - 1) << GLB_TZC_GLB_CLK_LOCK_POS)\n#define GLB_TZC_GLB_CLK_LOCK_UMSK             (~(((1U << GLB_TZC_GLB_CLK_LOCK_LEN) - 1) << GLB_TZC_GLB_CLK_LOCK_POS))\n\n/* 0xF04 : tzc_glb_ctrl_1 */\n#define GLB_TZC_GLB_CTRL_1_OFFSET       (0xF04)\n#define GLB_TZC_GLB_SWRST_S20_LOCK      GLB_TZC_GLB_SWRST_S20_LOCK\n#define GLB_TZC_GLB_SWRST_S20_LOCK_POS  (0U)\n#define GLB_TZC_GLB_SWRST_S20_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S20_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S20_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S20_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S20_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S20_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S20_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S21_LOCK      GLB_TZC_GLB_SWRST_S21_LOCK\n#define GLB_TZC_GLB_SWRST_S21_LOCK_POS  (1U)\n#define GLB_TZC_GLB_SWRST_S21_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S21_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S21_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S21_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S21_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S21_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S21_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S22_LOCK      GLB_TZC_GLB_SWRST_S22_LOCK\n#define GLB_TZC_GLB_SWRST_S22_LOCK_POS  (2U)\n#define GLB_TZC_GLB_SWRST_S22_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S22_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S22_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S22_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S22_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S22_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S22_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S23_LOCK      GLB_TZC_GLB_SWRST_S23_LOCK\n#define GLB_TZC_GLB_SWRST_S23_LOCK_POS  (3U)\n#define GLB_TZC_GLB_SWRST_S23_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S23_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S23_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S23_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S23_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S23_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S23_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S24_LOCK      GLB_TZC_GLB_SWRST_S24_LOCK\n#define GLB_TZC_GLB_SWRST_S24_LOCK_POS  (4U)\n#define GLB_TZC_GLB_SWRST_S24_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S24_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S24_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S24_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S24_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S24_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S24_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S25_LOCK      GLB_TZC_GLB_SWRST_S25_LOCK\n#define GLB_TZC_GLB_SWRST_S25_LOCK_POS  (5U)\n#define GLB_TZC_GLB_SWRST_S25_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S25_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S25_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S25_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S25_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S25_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S25_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S26_LOCK      GLB_TZC_GLB_SWRST_S26_LOCK\n#define GLB_TZC_GLB_SWRST_S26_LOCK_POS  (6U)\n#define GLB_TZC_GLB_SWRST_S26_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S26_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S26_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S26_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S26_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S26_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S26_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S27_LOCK      GLB_TZC_GLB_SWRST_S27_LOCK\n#define GLB_TZC_GLB_SWRST_S27_LOCK_POS  (7U)\n#define GLB_TZC_GLB_SWRST_S27_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S27_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S27_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S27_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S27_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S27_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S27_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S28_LOCK      GLB_TZC_GLB_SWRST_S28_LOCK\n#define GLB_TZC_GLB_SWRST_S28_LOCK_POS  (8U)\n#define GLB_TZC_GLB_SWRST_S28_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S28_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S28_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S28_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S28_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S28_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S28_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S29_LOCK      GLB_TZC_GLB_SWRST_S29_LOCK\n#define GLB_TZC_GLB_SWRST_S29_LOCK_POS  (9U)\n#define GLB_TZC_GLB_SWRST_S29_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S29_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S29_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S29_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S29_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S29_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S29_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S2A_LOCK      GLB_TZC_GLB_SWRST_S2A_LOCK\n#define GLB_TZC_GLB_SWRST_S2A_LOCK_POS  (10U)\n#define GLB_TZC_GLB_SWRST_S2A_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S2A_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S2A_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S2A_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S2A_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S2A_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S2A_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S2B_LOCK      GLB_TZC_GLB_SWRST_S2B_LOCK\n#define GLB_TZC_GLB_SWRST_S2B_LOCK_POS  (11U)\n#define GLB_TZC_GLB_SWRST_S2B_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S2B_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S2B_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S2B_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S2B_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S2B_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S2B_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S2C_LOCK      GLB_TZC_GLB_SWRST_S2C_LOCK\n#define GLB_TZC_GLB_SWRST_S2C_LOCK_POS  (12U)\n#define GLB_TZC_GLB_SWRST_S2C_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S2C_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S2C_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S2C_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S2C_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S2C_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S2C_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S2D_LOCK      GLB_TZC_GLB_SWRST_S2D_LOCK\n#define GLB_TZC_GLB_SWRST_S2D_LOCK_POS  (13U)\n#define GLB_TZC_GLB_SWRST_S2D_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S2D_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S2D_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S2D_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S2D_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S2D_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S2D_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S2E_LOCK      GLB_TZC_GLB_SWRST_S2E_LOCK\n#define GLB_TZC_GLB_SWRST_S2E_LOCK_POS  (14U)\n#define GLB_TZC_GLB_SWRST_S2E_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S2E_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S2E_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S2E_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S2E_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S2E_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S2E_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S2F_LOCK      GLB_TZC_GLB_SWRST_S2F_LOCK\n#define GLB_TZC_GLB_SWRST_S2F_LOCK_POS  (15U)\n#define GLB_TZC_GLB_SWRST_S2F_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S2F_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S2F_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S2F_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S2F_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S2F_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S2F_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S10_LOCK      GLB_TZC_GLB_SWRST_S10_LOCK\n#define GLB_TZC_GLB_SWRST_S10_LOCK_POS  (16U)\n#define GLB_TZC_GLB_SWRST_S10_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S10_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S10_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S10_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S10_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S10_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S10_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S11_LOCK      GLB_TZC_GLB_SWRST_S11_LOCK\n#define GLB_TZC_GLB_SWRST_S11_LOCK_POS  (17U)\n#define GLB_TZC_GLB_SWRST_S11_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S11_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S11_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S11_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S11_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S11_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S11_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S12_LOCK      GLB_TZC_GLB_SWRST_S12_LOCK\n#define GLB_TZC_GLB_SWRST_S12_LOCK_POS  (18U)\n#define GLB_TZC_GLB_SWRST_S12_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S12_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S12_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S12_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S12_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S12_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S12_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S13_LOCK      GLB_TZC_GLB_SWRST_S13_LOCK\n#define GLB_TZC_GLB_SWRST_S13_LOCK_POS  (19U)\n#define GLB_TZC_GLB_SWRST_S13_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S13_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S13_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S13_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S13_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S13_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S13_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S14_LOCK      GLB_TZC_GLB_SWRST_S14_LOCK\n#define GLB_TZC_GLB_SWRST_S14_LOCK_POS  (20U)\n#define GLB_TZC_GLB_SWRST_S14_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S14_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S14_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S14_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S14_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S14_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S14_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S15_LOCK      GLB_TZC_GLB_SWRST_S15_LOCK\n#define GLB_TZC_GLB_SWRST_S15_LOCK_POS  (21U)\n#define GLB_TZC_GLB_SWRST_S15_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S15_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S15_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S15_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S15_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S15_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S15_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S16_LOCK      GLB_TZC_GLB_SWRST_S16_LOCK\n#define GLB_TZC_GLB_SWRST_S16_LOCK_POS  (22U)\n#define GLB_TZC_GLB_SWRST_S16_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S16_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S16_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S16_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S16_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S16_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S16_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S17_LOCK      GLB_TZC_GLB_SWRST_S17_LOCK\n#define GLB_TZC_GLB_SWRST_S17_LOCK_POS  (23U)\n#define GLB_TZC_GLB_SWRST_S17_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S17_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S17_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S17_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S17_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S17_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S17_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S18_LOCK      GLB_TZC_GLB_SWRST_S18_LOCK\n#define GLB_TZC_GLB_SWRST_S18_LOCK_POS  (24U)\n#define GLB_TZC_GLB_SWRST_S18_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S18_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S18_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S18_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S18_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S18_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S18_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S19_LOCK      GLB_TZC_GLB_SWRST_S19_LOCK\n#define GLB_TZC_GLB_SWRST_S19_LOCK_POS  (25U)\n#define GLB_TZC_GLB_SWRST_S19_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S19_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S19_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S19_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S19_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S19_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S19_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S1A_LOCK      GLB_TZC_GLB_SWRST_S1A_LOCK\n#define GLB_TZC_GLB_SWRST_S1A_LOCK_POS  (26U)\n#define GLB_TZC_GLB_SWRST_S1A_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S1A_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S1A_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S1A_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S1A_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S1A_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S1A_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S1B_LOCK      GLB_TZC_GLB_SWRST_S1B_LOCK\n#define GLB_TZC_GLB_SWRST_S1B_LOCK_POS  (27U)\n#define GLB_TZC_GLB_SWRST_S1B_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S1B_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S1B_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S1B_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S1B_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S1B_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S1B_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S1C_LOCK      GLB_TZC_GLB_SWRST_S1C_LOCK\n#define GLB_TZC_GLB_SWRST_S1C_LOCK_POS  (28U)\n#define GLB_TZC_GLB_SWRST_S1C_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S1C_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S1C_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S1C_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S1C_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S1C_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S1C_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S1D_LOCK      GLB_TZC_GLB_SWRST_S1D_LOCK\n#define GLB_TZC_GLB_SWRST_S1D_LOCK_POS  (29U)\n#define GLB_TZC_GLB_SWRST_S1D_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S1D_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S1D_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S1D_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S1D_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S1D_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S1D_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S1E_LOCK      GLB_TZC_GLB_SWRST_S1E_LOCK\n#define GLB_TZC_GLB_SWRST_S1E_LOCK_POS  (30U)\n#define GLB_TZC_GLB_SWRST_S1E_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S1E_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S1E_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S1E_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S1E_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S1E_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S1E_LOCK_POS))\n#define GLB_TZC_GLB_SWRST_S1F_LOCK      GLB_TZC_GLB_SWRST_S1F_LOCK\n#define GLB_TZC_GLB_SWRST_S1F_LOCK_POS  (31U)\n#define GLB_TZC_GLB_SWRST_S1F_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_SWRST_S1F_LOCK_MSK  (((1U << GLB_TZC_GLB_SWRST_S1F_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S1F_LOCK_POS)\n#define GLB_TZC_GLB_SWRST_S1F_LOCK_UMSK (~(((1U << GLB_TZC_GLB_SWRST_S1F_LOCK_LEN) - 1) << GLB_TZC_GLB_SWRST_S1F_LOCK_POS))\n\n/* 0xF08 : tzc_glb_ctrl_2 */\n#define GLB_TZC_GLB_CTRL_2_OFFSET     (0xF08)\n#define GLB_TZC_GLB_GPIO_0_LOCK       GLB_TZC_GLB_GPIO_0_LOCK\n#define GLB_TZC_GLB_GPIO_0_LOCK_POS   (0U)\n#define GLB_TZC_GLB_GPIO_0_LOCK_LEN   (1U)\n#define GLB_TZC_GLB_GPIO_0_LOCK_MSK   (((1U << GLB_TZC_GLB_GPIO_0_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_0_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_0_LOCK_UMSK  (~(((1U << GLB_TZC_GLB_GPIO_0_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_0_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_1_LOCK       GLB_TZC_GLB_GPIO_1_LOCK\n#define GLB_TZC_GLB_GPIO_1_LOCK_POS   (1U)\n#define GLB_TZC_GLB_GPIO_1_LOCK_LEN   (1U)\n#define GLB_TZC_GLB_GPIO_1_LOCK_MSK   (((1U << GLB_TZC_GLB_GPIO_1_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_1_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_1_LOCK_UMSK  (~(((1U << GLB_TZC_GLB_GPIO_1_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_1_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_2_LOCK       GLB_TZC_GLB_GPIO_2_LOCK\n#define GLB_TZC_GLB_GPIO_2_LOCK_POS   (2U)\n#define GLB_TZC_GLB_GPIO_2_LOCK_LEN   (1U)\n#define GLB_TZC_GLB_GPIO_2_LOCK_MSK   (((1U << GLB_TZC_GLB_GPIO_2_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_2_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_2_LOCK_UMSK  (~(((1U << GLB_TZC_GLB_GPIO_2_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_2_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_3_LOCK       GLB_TZC_GLB_GPIO_3_LOCK\n#define GLB_TZC_GLB_GPIO_3_LOCK_POS   (3U)\n#define GLB_TZC_GLB_GPIO_3_LOCK_LEN   (1U)\n#define GLB_TZC_GLB_GPIO_3_LOCK_MSK   (((1U << GLB_TZC_GLB_GPIO_3_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_3_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_3_LOCK_UMSK  (~(((1U << GLB_TZC_GLB_GPIO_3_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_3_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_4_LOCK       GLB_TZC_GLB_GPIO_4_LOCK\n#define GLB_TZC_GLB_GPIO_4_LOCK_POS   (4U)\n#define GLB_TZC_GLB_GPIO_4_LOCK_LEN   (1U)\n#define GLB_TZC_GLB_GPIO_4_LOCK_MSK   (((1U << GLB_TZC_GLB_GPIO_4_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_4_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_4_LOCK_UMSK  (~(((1U << GLB_TZC_GLB_GPIO_4_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_4_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_5_LOCK       GLB_TZC_GLB_GPIO_5_LOCK\n#define GLB_TZC_GLB_GPIO_5_LOCK_POS   (5U)\n#define GLB_TZC_GLB_GPIO_5_LOCK_LEN   (1U)\n#define GLB_TZC_GLB_GPIO_5_LOCK_MSK   (((1U << GLB_TZC_GLB_GPIO_5_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_5_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_5_LOCK_UMSK  (~(((1U << GLB_TZC_GLB_GPIO_5_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_5_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_6_LOCK       GLB_TZC_GLB_GPIO_6_LOCK\n#define GLB_TZC_GLB_GPIO_6_LOCK_POS   (6U)\n#define GLB_TZC_GLB_GPIO_6_LOCK_LEN   (1U)\n#define GLB_TZC_GLB_GPIO_6_LOCK_MSK   (((1U << GLB_TZC_GLB_GPIO_6_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_6_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_6_LOCK_UMSK  (~(((1U << GLB_TZC_GLB_GPIO_6_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_6_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_7_LOCK       GLB_TZC_GLB_GPIO_7_LOCK\n#define GLB_TZC_GLB_GPIO_7_LOCK_POS   (7U)\n#define GLB_TZC_GLB_GPIO_7_LOCK_LEN   (1U)\n#define GLB_TZC_GLB_GPIO_7_LOCK_MSK   (((1U << GLB_TZC_GLB_GPIO_7_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_7_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_7_LOCK_UMSK  (~(((1U << GLB_TZC_GLB_GPIO_7_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_7_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_8_LOCK       GLB_TZC_GLB_GPIO_8_LOCK\n#define GLB_TZC_GLB_GPIO_8_LOCK_POS   (8U)\n#define GLB_TZC_GLB_GPIO_8_LOCK_LEN   (1U)\n#define GLB_TZC_GLB_GPIO_8_LOCK_MSK   (((1U << GLB_TZC_GLB_GPIO_8_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_8_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_8_LOCK_UMSK  (~(((1U << GLB_TZC_GLB_GPIO_8_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_8_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_9_LOCK       GLB_TZC_GLB_GPIO_9_LOCK\n#define GLB_TZC_GLB_GPIO_9_LOCK_POS   (9U)\n#define GLB_TZC_GLB_GPIO_9_LOCK_LEN   (1U)\n#define GLB_TZC_GLB_GPIO_9_LOCK_MSK   (((1U << GLB_TZC_GLB_GPIO_9_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_9_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_9_LOCK_UMSK  (~(((1U << GLB_TZC_GLB_GPIO_9_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_9_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_10_LOCK      GLB_TZC_GLB_GPIO_10_LOCK\n#define GLB_TZC_GLB_GPIO_10_LOCK_POS  (10U)\n#define GLB_TZC_GLB_GPIO_10_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_10_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_10_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_10_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_10_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_10_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_10_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_11_LOCK      GLB_TZC_GLB_GPIO_11_LOCK\n#define GLB_TZC_GLB_GPIO_11_LOCK_POS  (11U)\n#define GLB_TZC_GLB_GPIO_11_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_11_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_11_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_11_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_11_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_11_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_11_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_12_LOCK      GLB_TZC_GLB_GPIO_12_LOCK\n#define GLB_TZC_GLB_GPIO_12_LOCK_POS  (12U)\n#define GLB_TZC_GLB_GPIO_12_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_12_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_12_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_12_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_12_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_12_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_12_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_13_LOCK      GLB_TZC_GLB_GPIO_13_LOCK\n#define GLB_TZC_GLB_GPIO_13_LOCK_POS  (13U)\n#define GLB_TZC_GLB_GPIO_13_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_13_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_13_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_13_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_13_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_13_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_13_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_14_LOCK      GLB_TZC_GLB_GPIO_14_LOCK\n#define GLB_TZC_GLB_GPIO_14_LOCK_POS  (14U)\n#define GLB_TZC_GLB_GPIO_14_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_14_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_14_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_14_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_14_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_14_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_14_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_15_LOCK      GLB_TZC_GLB_GPIO_15_LOCK\n#define GLB_TZC_GLB_GPIO_15_LOCK_POS  (15U)\n#define GLB_TZC_GLB_GPIO_15_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_15_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_15_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_15_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_15_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_15_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_15_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_16_LOCK      GLB_TZC_GLB_GPIO_16_LOCK\n#define GLB_TZC_GLB_GPIO_16_LOCK_POS  (16U)\n#define GLB_TZC_GLB_GPIO_16_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_16_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_16_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_16_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_16_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_16_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_16_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_17_LOCK      GLB_TZC_GLB_GPIO_17_LOCK\n#define GLB_TZC_GLB_GPIO_17_LOCK_POS  (17U)\n#define GLB_TZC_GLB_GPIO_17_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_17_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_17_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_17_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_17_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_17_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_17_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_18_LOCK      GLB_TZC_GLB_GPIO_18_LOCK\n#define GLB_TZC_GLB_GPIO_18_LOCK_POS  (18U)\n#define GLB_TZC_GLB_GPIO_18_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_18_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_18_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_18_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_18_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_18_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_18_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_19_LOCK      GLB_TZC_GLB_GPIO_19_LOCK\n#define GLB_TZC_GLB_GPIO_19_LOCK_POS  (19U)\n#define GLB_TZC_GLB_GPIO_19_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_19_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_19_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_19_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_19_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_19_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_19_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_20_LOCK      GLB_TZC_GLB_GPIO_20_LOCK\n#define GLB_TZC_GLB_GPIO_20_LOCK_POS  (20U)\n#define GLB_TZC_GLB_GPIO_20_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_20_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_20_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_20_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_20_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_20_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_20_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_21_LOCK      GLB_TZC_GLB_GPIO_21_LOCK\n#define GLB_TZC_GLB_GPIO_21_LOCK_POS  (21U)\n#define GLB_TZC_GLB_GPIO_21_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_21_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_21_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_21_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_21_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_21_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_21_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_22_LOCK      GLB_TZC_GLB_GPIO_22_LOCK\n#define GLB_TZC_GLB_GPIO_22_LOCK_POS  (22U)\n#define GLB_TZC_GLB_GPIO_22_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_22_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_22_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_22_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_22_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_22_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_22_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_23_LOCK      GLB_TZC_GLB_GPIO_23_LOCK\n#define GLB_TZC_GLB_GPIO_23_LOCK_POS  (23U)\n#define GLB_TZC_GLB_GPIO_23_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_23_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_23_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_23_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_23_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_23_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_23_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_24_LOCK      GLB_TZC_GLB_GPIO_24_LOCK\n#define GLB_TZC_GLB_GPIO_24_LOCK_POS  (24U)\n#define GLB_TZC_GLB_GPIO_24_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_24_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_24_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_24_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_24_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_24_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_24_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_25_LOCK      GLB_TZC_GLB_GPIO_25_LOCK\n#define GLB_TZC_GLB_GPIO_25_LOCK_POS  (25U)\n#define GLB_TZC_GLB_GPIO_25_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_25_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_25_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_25_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_25_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_25_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_25_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_26_LOCK      GLB_TZC_GLB_GPIO_26_LOCK\n#define GLB_TZC_GLB_GPIO_26_LOCK_POS  (26U)\n#define GLB_TZC_GLB_GPIO_26_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_26_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_26_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_26_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_26_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_26_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_26_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_27_LOCK      GLB_TZC_GLB_GPIO_27_LOCK\n#define GLB_TZC_GLB_GPIO_27_LOCK_POS  (27U)\n#define GLB_TZC_GLB_GPIO_27_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_27_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_27_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_27_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_27_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_27_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_27_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_28_LOCK      GLB_TZC_GLB_GPIO_28_LOCK\n#define GLB_TZC_GLB_GPIO_28_LOCK_POS  (28U)\n#define GLB_TZC_GLB_GPIO_28_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_28_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_28_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_28_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_28_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_28_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_28_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_29_LOCK      GLB_TZC_GLB_GPIO_29_LOCK\n#define GLB_TZC_GLB_GPIO_29_LOCK_POS  (29U)\n#define GLB_TZC_GLB_GPIO_29_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_29_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_29_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_29_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_29_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_29_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_29_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_30_LOCK      GLB_TZC_GLB_GPIO_30_LOCK\n#define GLB_TZC_GLB_GPIO_30_LOCK_POS  (30U)\n#define GLB_TZC_GLB_GPIO_30_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_30_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_30_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_30_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_30_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_30_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_30_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_31_LOCK      GLB_TZC_GLB_GPIO_31_LOCK\n#define GLB_TZC_GLB_GPIO_31_LOCK_POS  (31U)\n#define GLB_TZC_GLB_GPIO_31_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_31_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_31_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_31_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_31_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_31_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_31_LOCK_POS))\n\n/* 0xF0C : tzc_glb_ctrl_3 */\n#define GLB_TZC_GLB_CTRL_3_OFFSET     (0xF0C)\n#define GLB_TZC_GLB_GPIO_32_LOCK      GLB_TZC_GLB_GPIO_32_LOCK\n#define GLB_TZC_GLB_GPIO_32_LOCK_POS  (0U)\n#define GLB_TZC_GLB_GPIO_32_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_32_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_32_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_32_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_32_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_32_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_32_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_33_LOCK      GLB_TZC_GLB_GPIO_33_LOCK\n#define GLB_TZC_GLB_GPIO_33_LOCK_POS  (1U)\n#define GLB_TZC_GLB_GPIO_33_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_33_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_33_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_33_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_33_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_33_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_33_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_34_LOCK      GLB_TZC_GLB_GPIO_34_LOCK\n#define GLB_TZC_GLB_GPIO_34_LOCK_POS  (2U)\n#define GLB_TZC_GLB_GPIO_34_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_34_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_34_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_34_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_34_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_34_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_34_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_35_LOCK      GLB_TZC_GLB_GPIO_35_LOCK\n#define GLB_TZC_GLB_GPIO_35_LOCK_POS  (3U)\n#define GLB_TZC_GLB_GPIO_35_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_35_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_35_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_35_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_35_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_35_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_35_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_36_LOCK      GLB_TZC_GLB_GPIO_36_LOCK\n#define GLB_TZC_GLB_GPIO_36_LOCK_POS  (4U)\n#define GLB_TZC_GLB_GPIO_36_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_36_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_36_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_36_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_36_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_36_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_36_LOCK_POS))\n#define GLB_TZC_GLB_GPIO_37_LOCK      GLB_TZC_GLB_GPIO_37_LOCK\n#define GLB_TZC_GLB_GPIO_37_LOCK_POS  (5U)\n#define GLB_TZC_GLB_GPIO_37_LOCK_LEN  (1U)\n#define GLB_TZC_GLB_GPIO_37_LOCK_MSK  (((1U << GLB_TZC_GLB_GPIO_37_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_37_LOCK_POS)\n#define GLB_TZC_GLB_GPIO_37_LOCK_UMSK (~(((1U << GLB_TZC_GLB_GPIO_37_LOCK_LEN) - 1) << GLB_TZC_GLB_GPIO_37_LOCK_POS))\n\nstruct glb_reg {\n    /* 0x0 : clk_cfg0 */\n    union {\n        struct\n        {\n            uint32_t reg_pll_en       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_fclk_en      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_hclk_en      : 1; /* [    2],        r/w,        0x1 */\n            uint32_t reg_bclk_en      : 1; /* [    3],        r/w,        0x1 */\n            uint32_t reg_pll_sel      : 2; /* [ 5: 4],        r/w,        0x0 */\n            uint32_t hbn_root_clk_sel : 2; /* [ 7: 6],          r,        0x0 */\n            uint32_t reg_hclk_div     : 8; /* [15: 8],        r/w,        0x0 */\n            uint32_t reg_bclk_div     : 8; /* [23:16],        r/w,        0x0 */\n            uint32_t fclk_sw_state    : 3; /* [26:24],          r,        0x0 */\n            uint32_t chip_rdy         : 1; /* [   27],          r,        0x0 */\n            uint32_t glb_id           : 4; /* [31:28],          r,        0x7 */\n        } BF;\n        uint32_t WORD;\n    } clk_cfg0;\n\n    /* 0x4 : clk_cfg1 */\n    union {\n        struct\n        {\n            uint32_t qdec_clk_div            : 5; /* [ 4: 0],        r/w,       0x1f */\n            uint32_t reserved_5_6            : 2; /* [ 6: 5],       rsvd,        0x0 */\n            uint32_t qdec_clk_sel            : 1; /* [    7],        r/w,        0x0 */\n            uint32_t usb_clk_en              : 1; /* [    8],        r/w,        0x1 */\n            uint32_t dll_48m_div_en          : 1; /* [    9],        r/w,        0x1 */\n            uint32_t reserved_10_11          : 2; /* [11:10],       rsvd,        0x0 */\n            uint32_t reg_i2s_clk_sel         : 1; /* [   12],        r/w,        0x0 */\n            uint32_t reg_i2s0_clk_en         : 1; /* [   13],        r/w,        0x0 */\n            uint32_t reg_i2s_0_ref_clk_oe    : 1; /* [   14],        r/w,        0x0 */\n            uint32_t reserved_15             : 1; /* [   15],       rsvd,        0x0 */\n            uint32_t ble_clk_sel             : 6; /* [21:16],        r/w,       0x10 */\n            uint32_t reserved_22_23          : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t ble_en                  : 1; /* [   24],        r/w,        0x1 */\n            uint32_t m154_zbEn               : 1; /* [   25],        r/w,        0x1 */\n            uint32_t reserved_26_27          : 2; /* [27:26],       rsvd,        0x0 */\n            uint32_t reg_cam_ref_clk_en      : 1; /* [   28],        r/w,        0x0 */\n            uint32_t reg_cam_ref_clk_src_sel : 1; /* [   29],        r/w,        0x0 */\n            uint32_t reg_cam_ref_clk_div     : 2; /* [31:30],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } clk_cfg1;\n\n    /* 0x8 : clk_cfg2 */\n    union {\n        struct\n        {\n            uint32_t uart_clk_div     : 3; /* [ 2: 0],        r/w,        0x7 */\n            uint32_t reserved_3       : 1; /* [    3],       rsvd,        0x0 */\n            uint32_t uart_clk_en      : 1; /* [    4],        r/w,        0x1 */\n            uint32_t reserved_5_6     : 2; /* [ 6: 5],       rsvd,        0x0 */\n            uint32_t hbn_uart_clk_sel : 1; /* [    7],          r,        0x0 */\n            uint32_t sf_clk_div       : 3; /* [10: 8],        r/w,        0x3 */\n            uint32_t sf_clk_en        : 1; /* [   11],        r/w,        0x1 */\n            uint32_t sf_clk_sel       : 2; /* [13:12],        r/w,        0x2 */\n            uint32_t sf_clk_sel2      : 2; /* [15:14],        r/w,        0x0 */\n            uint32_t ir_clk_div       : 6; /* [21:16],        r/w,        0xf */\n            uint32_t reserved_22      : 1; /* [   22],       rsvd,        0x0 */\n            uint32_t ir_clk_en        : 1; /* [   23],        r/w,        0x1 */\n            uint32_t dma_clk_en       : 8; /* [31:24],        r/w,       0xff */\n        } BF;\n        uint32_t WORD;\n    } clk_cfg2;\n\n    /* 0xC : clk_cfg3 */\n    union {\n        struct\n        {\n            uint32_t spi_clk_div           : 5; /* [ 4: 0],        r/w,        0x3 */\n            uint32_t cfg_sel_eth_ref_clk_o : 1; /* [    5],        r/w,        0x0 */\n            uint32_t cfg_inv_eth_ref_clk_o : 1; /* [    6],        r/w,        0x1 */\n            uint32_t cfg_inv_eth_tx_clk    : 1; /* [    7],        r/w,        0x1 */\n            uint32_t spi_clk_en            : 1; /* [    8],        r/w,        0x1 */\n            uint32_t cfg_inv_rf_test_clk_o : 1; /* [    9],        r/w,        0x1 */\n            uint32_t cfg_inv_eth_rx_clk    : 1; /* [   10],        r/w,        0x1 */\n            uint32_t reserved_11_15        : 5; /* [15:11],       rsvd,        0x0 */\n            uint32_t i2c_clk_div           : 8; /* [23:16],        r/w,       0xff */\n            uint32_t i2c_clk_en            : 1; /* [   24],        r/w,        0x1 */\n            uint32_t reserved_25_27        : 3; /* [27:25],       rsvd,        0x0 */\n            uint32_t chip_clk_out_0_sel    : 2; /* [29:28],        r/w,        0x0 */\n            uint32_t chip_clk_out_1_sel    : 2; /* [31:30],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } clk_cfg3;\n\n    /* 0x10 : swrst_cfg0 */\n    union {\n        struct\n        {\n            uint32_t swrst_s00     : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t swrst_s01     : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t reserved_2_3  : 2;  /* [ 3: 2],       rsvd,        0x0 */\n            uint32_t swrst_s20     : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t reserved_5_7  : 3;  /* [ 7: 5],       rsvd,        0x0 */\n            uint32_t swrst_s30     : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t reserved_9_31 : 23; /* [31: 9],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } swrst_cfg0;\n\n    /* 0x14 : swrst_cfg1 */\n    union {\n        struct\n        {\n            uint32_t swrst_s10   : 1; /* [    0],        r/w,        0x0 */\n            uint32_t swrst_s11   : 1; /* [    1],        r/w,        0x0 */\n            uint32_t swrst_s12   : 1; /* [    2],        r/w,        0x0 */\n            uint32_t swrst_s13   : 1; /* [    3],        r/w,        0x0 */\n            uint32_t swrst_s14   : 1; /* [    4],        r/w,        0x0 */\n            uint32_t swrst_s15   : 1; /* [    5],        r/w,        0x0 */\n            uint32_t swrst_s16   : 1; /* [    6],        r/w,        0x0 */\n            uint32_t swrst_s17   : 1; /* [    7],        r/w,        0x0 */\n            uint32_t swrst_s18   : 1; /* [    8],        r/w,        0x0 */\n            uint32_t swrst_s19   : 1; /* [    9],        r/w,        0x0 */\n            uint32_t swrst_s1a   : 1; /* [   10],        r/w,        0x0 */\n            uint32_t swrst_s1b   : 1; /* [   11],        r/w,        0x0 */\n            uint32_t swrst_s1c   : 1; /* [   12],        r/w,        0x0 */\n            uint32_t swrst_s1d   : 1; /* [   13],        r/w,        0x0 */\n            uint32_t swrst_s1e   : 1; /* [   14],        r/w,        0x0 */\n            uint32_t swrst_s1f   : 1; /* [   15],        r/w,        0x0 */\n            uint32_t swrst_s1a0  : 1; /* [   16],        r/w,        0x0 */\n            uint32_t swrst_s1a1  : 1; /* [   17],        r/w,        0x0 */\n            uint32_t swrst_s1a2  : 1; /* [   18],        r/w,        0x0 */\n            uint32_t swrst_s1a3  : 1; /* [   19],        r/w,        0x0 */\n            uint32_t swrst_s1a4  : 1; /* [   20],        r/w,        0x0 */\n            uint32_t swrst_s1a5  : 1; /* [   21],        r/w,        0x0 */\n            uint32_t swrst_s1a6  : 1; /* [   22],        r/w,        0x0 */\n            uint32_t swrst_s1a7  : 1; /* [   23],        r/w,        0x0 */\n            uint32_t swrst_s1a8  : 1; /* [   24],        r/w,        0x0 */\n            uint32_t swrst_s1a9  : 1; /* [   25],        r/w,        0x0 */\n            uint32_t swrst_s1aa  : 1; /* [   26],        r/w,        0x0 */\n            uint32_t swrst_s1ab  : 1; /* [   27],        r/w,        0x0 */\n            uint32_t swrst_s1ac  : 1; /* [   28],        r/w,        0x0 */\n            uint32_t swrst_s1ad  : 1; /* [   29],        r/w,        0x0 */\n            uint32_t swrst_s1ae  : 1; /* [   30],        r/w,        0x0 */\n            uint32_t reserved_31 : 1; /* [   31],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } swrst_cfg1;\n\n    /* 0x18 : swrst_cfg2 */\n    union {\n        struct\n        {\n            uint32_t reg_ctrl_pwron_rst   : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reg_ctrl_cpu_reset   : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t reg_ctrl_sys_reset   : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t reserved_3           : 1;  /* [    3],       rsvd,        0x0 */\n            uint32_t reg_ctrl_reset_dummy : 4;  /* [ 7: 4],        r/w,        0x0 */\n            uint32_t reserved_8_23        : 16; /* [23: 8],       rsvd,        0x0 */\n            uint32_t pka_clk_sel          : 1;  /* [   24],        r/w,        0x0 */\n            uint32_t reserved_25_31       : 7;  /* [31:25],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } swrst_cfg2;\n\n    /* 0x1C : swrst_cfg3 */\n    union {\n        struct\n        {\n            uint32_t reserved_0_31 : 32; /* [31: 0],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } swrst_cfg3;\n\n    /* 0x20 : cgen_cfg0 */\n    union {\n        struct\n        {\n            uint32_t cgen_m        : 8;  /* [ 7: 0],        r/w,       0xff */\n            uint32_t reserved_8_31 : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } cgen_cfg0;\n\n    /* 0x24 : cgen_cfg1 */\n    union {\n        struct\n        {\n            uint32_t cgen_s1  : 16; /* [15: 0],        r/w,     0xcfff */\n            uint32_t cgen_s1a : 16; /* [31:16],        r/w,     0x9b23 */\n        } BF;\n        uint32_t WORD;\n    } cgen_cfg1;\n\n    /* 0x28 : cgen_cfg2 */\n    union {\n        struct\n        {\n            uint32_t cgen_s2       : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1_3  : 3;  /* [ 3: 1],       rsvd,        0x0 */\n            uint32_t cgen_s3       : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t reserved_5_31 : 27; /* [31: 5],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } cgen_cfg2;\n\n    /* 0x2C : cgen_cfg3 */\n    union {\n        struct\n        {\n            uint32_t reserved_0_31 : 32; /* [31: 0],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } cgen_cfg3;\n\n    /* 0x30 : MBIST_CTL */\n    union {\n        struct\n        {\n            uint32_t irom_mbist_mode        : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t hsram_mem_mbist_mode   : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t hsram_cache_mbist_mode : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t tag_mbist_mode         : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t ocram_mbist_mode       : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t em_ram_mbist_mode      : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_30          : 25; /* [30: 6],       rsvd,        0x0 */\n            uint32_t reg_mbist_rst_n        : 1;  /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } MBIST_CTL;\n\n    /* 0x34 : MBIST_STAT */\n    union {\n        struct\n        {\n            uint32_t irom_mbist_done        : 1;  /* [    0],          r,        0x0 */\n            uint32_t hsram_mem_mbist_done   : 1;  /* [    1],          r,        0x0 */\n            uint32_t hsram_cache_mbist_done : 1;  /* [    2],          r,        0x0 */\n            uint32_t tag_mbist_done         : 1;  /* [    3],          r,        0x0 */\n            uint32_t ocram_mbist_done       : 1;  /* [    4],          r,        0x0 */\n            uint32_t em_ram_mbist_done      : 1;  /* [    5],          r,        0x0 */\n            uint32_t reserved_6_15          : 10; /* [15: 6],       rsvd,        0x0 */\n            uint32_t irom_mbist_fail        : 1;  /* [   16],          r,        0x0 */\n            uint32_t hsram_mem_mbist_fail   : 1;  /* [   17],          r,        0x0 */\n            uint32_t hsram_cache_mbist_fail : 1;  /* [   18],          r,        0x0 */\n            uint32_t tag_mbist_fail         : 1;  /* [   19],          r,        0x0 */\n            uint32_t ocram_mbist_fail       : 1;  /* [   20],          r,        0x0 */\n            uint32_t em_ram_mbist_fail      : 1;  /* [   21],          r,        0x0 */\n            uint32_t reserved_22_31         : 10; /* [31:22],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } MBIST_STAT;\n\n    /* 0x38  reserved */\n    uint8_t RESERVED0x38[24];\n\n    /* 0x50 : bmx_cfg1 */\n    union {\n        struct\n        {\n            uint32_t bmx_timeout_en      : 4; /* [ 3: 0],        r/w,        0x0 */\n            uint32_t bmx_arb_mode        : 2; /* [ 5: 4],        r/w,        0x0 */\n            uint32_t reserved_6_7        : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t bmx_err_en          : 1; /* [    8],        r/w,        0x0 */\n            uint32_t bmx_busy_option_dis : 1; /* [    9],        r/w,        0x0 */\n            uint32_t bmx_gating_dis      : 1; /* [   10],        r/w,        0x0 */\n            uint32_t reserved_11         : 1; /* [   11],       rsvd,        0x0 */\n            uint32_t hsel_option         : 4; /* [15:12],        r/w,        0x0 */\n            uint32_t pds_apb_cfg         : 8; /* [23:16],        r/w,        0x0 */\n            uint32_t hbn_apb_cfg         : 8; /* [31:24],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } bmx_cfg1;\n\n    /* 0x54 : bmx_cfg2 */\n    union {\n        struct\n        {\n            uint32_t bmx_err_addr_dis : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1_3     : 3;  /* [ 3: 1],       rsvd,        0x0 */\n            uint32_t bmx_err_dec      : 1;  /* [    4],          r,        0x0 */\n            uint32_t bmx_err_tz       : 1;  /* [    5],          r,        0x0 */\n            uint32_t reserved_6_7     : 2;  /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_w_thre_bmx   : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reg_w_thre_l1c   : 2;  /* [11:10],        r/w,        0x0 */\n            uint32_t reserved_12_27   : 16; /* [27:12],       rsvd,        0x0 */\n            uint32_t bmx_dbg_sel      : 4;  /* [31:28],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } bmx_cfg2;\n\n    /* 0x58 : bmx_err_addr */\n    union {\n        struct\n        {\n            uint32_t bmx_err_addr : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } bmx_err_addr;\n\n    /* 0x5C : bmx_dbg_out */\n    union {\n        struct\n        {\n            uint32_t bmx_dbg_out : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } bmx_dbg_out;\n\n    /* 0x60 : rsv0 */\n    union {\n        struct\n        {\n            uint32_t rsvd_31_0 : 32; /* [31: 0],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } rsv0;\n\n    /* 0x64 : rsv1 */\n    union {\n        struct\n        {\n            uint32_t rsvd_31_0 : 32; /* [31: 0],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } rsv1;\n\n    /* 0x68 : rsv2 */\n    union {\n        struct\n        {\n            uint32_t rsvd_31_0 : 32; /* [31: 0],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } rsv2;\n\n    /* 0x6C : rsv3 */\n    union {\n        struct\n        {\n            uint32_t rsvd_31_0 : 32; /* [31: 0],       rsvd, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } rsv3;\n\n    /* 0x70 : sram_ret */\n    union {\n        struct\n        {\n            uint32_t reg_sram_ret : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sram_ret;\n\n    /* 0x74 : sram_slp */\n    union {\n        struct\n        {\n            uint32_t reg_sram_slp : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sram_slp;\n\n    /* 0x78 : sram_parm */\n    union {\n        struct\n        {\n            uint32_t reg_sram_parm : 32; /* [31: 0],        r/w, 0x6a4c0c0c */\n        } BF;\n        uint32_t WORD;\n    } sram_parm;\n\n    /* 0x7C : seam_misc */\n    union {\n        struct\n        {\n            uint32_t em_sel        : 4;  /* [ 3: 0],        r/w,        0x3 */\n            uint32_t reserved_4_31 : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } seam_misc;\n\n    /* 0x80 : glb_parm */\n    union {\n        struct\n        {\n            uint32_t jtag_swap_set            : 8; /* [ 7: 0],        r/w,        0x4 */\n            uint32_t cfg_sflash2_swap_io0_io3 : 1; /* [    8],        r/w,        0x0 */\n            uint32_t cfg_sflash2_swap_cs_io2  : 1; /* [    9],        r/w,        0x0 */\n            uint32_t cfg_flash_scenario       : 2; /* [11:10],        r/w,        0x0 */\n            uint32_t reg_spi_0_master_mode    : 1; /* [   12],        r/w,        0x0 */\n            uint32_t reg_spi_0_swap           : 1; /* [   13],        r/w,        0x0 */\n            uint32_t reserved_14_15           : 2; /* [15:14],       rsvd,        0x0 */\n            uint32_t reg_cci_use_jtag_pin     : 1; /* [   16],        r/w,        0x1 */\n            uint32_t p1_adc_test_with_cci     : 1; /* [   17],        r/w,        0x0 */\n            uint32_t p2_dac_test_with_cci     : 1; /* [   18],        r/w,        0x0 */\n            uint32_t p3_cci_use_io_0_2_7      : 1; /* [   19],        r/w,        0x0 */\n            uint32_t p4_adc_test_with_jtag    : 1; /* [   20],        r/w,        0x0 */\n            uint32_t p5_dac_test_with_jtag    : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22              : 1; /* [   22],       rsvd,        0x0 */\n            uint32_t p6_jtag_use_io_0_2_7     : 1; /* [   23],        r/w,        0x0 */\n            uint32_t uart_swap_set            : 4; /* [27:24],        r/w,        0x0 */\n            uint32_t reserved_28              : 1; /* [   28],       rsvd,        0x0 */\n            uint32_t reg_kys_drv_val          : 1; /* [   29],        r/w,        0x0 */\n            uint32_t reg_ext_rst_smt          : 1; /* [   30],        r/w,        0x0 */\n            uint32_t pin_sel_emac_cam         : 1; /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } glb_parm;\n\n    /* 0x84 : PDM_CLK_CTRL */\n    union {\n        struct\n        {\n            uint32_t reg_pdm0_clk_div : 6;  /* [ 5: 0],        r/w,        0x1 */\n            uint32_t reserved_6       : 1;  /* [    6],       rsvd,        0x0 */\n            uint32_t reg_pdm0_clk_en  : 1;  /* [    7],        r/w,        0x1 */\n            uint32_t reserved_8_31    : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } PDM_CLK_CTRL;\n\n    /* 0x88 : GPIO_USE_PSRAM__IO */\n    union {\n        struct\n        {\n            uint32_t cfg_gpio_use_psram_io : 6;  /* [ 5: 0],        r/w,        0x0 */\n            uint32_t reserved_6_31         : 26; /* [31: 6],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_USE_PSRAM__IO;\n\n    /* 0x8c  reserved */\n    uint8_t RESERVED0x8c[4];\n\n    /* 0x90 : CPU_CLK_CFG */\n    union {\n        struct\n        {\n            uint32_t cpu_rtc_div        : 17; /* [16: 0],        r/w,       0x10 */\n            uint32_t reserved_17        : 1;  /* [   17],       rsvd,        0x0 */\n            uint32_t cpu_rtc_en         : 1;  /* [   18],        r/w,        0x0 */\n            uint32_t cpu_rtc_sel        : 1;  /* [   19],        r/w,        0x1 */\n            uint32_t debug_ndreset_gate : 1;  /* [   20],        r/w,        0x0 */\n            uint32_t reserved_21_31     : 11; /* [31:21],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } CPU_CLK_CFG;\n\n    /* 0x94  reserved */\n    uint8_t RESERVED0x94[16];\n\n    /* 0xA4 : GPADC_32M_SRC_CTRL */\n    union {\n        struct\n        {\n            uint32_t gpadc_32m_clk_div : 6;  /* [ 5: 0],        r/w,        0x2 */\n            uint32_t reserved_6        : 1;  /* [    6],       rsvd,        0x0 */\n            uint32_t gpadc_32m_clk_sel : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t gpadc_32m_div_en  : 1;  /* [    8],        r/w,        0x1 */\n            uint32_t reserved_9_31     : 23; /* [31: 9],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPADC_32M_SRC_CTRL;\n\n    /* 0xA8 : DIG32K_WAKEUP_CTRL */\n    union {\n        struct\n        {\n            uint32_t dig_32k_div            : 11; /* [10: 0],        r/w,      0x3e8 */\n            uint32_t reserved_11            : 1;  /* [   11],       rsvd,        0x0 */\n            uint32_t dig_32k_en             : 1;  /* [   12],        r/w,        0x1 */\n            uint32_t dig_32k_comp           : 1;  /* [   13],        r/w,        0x0 */\n            uint32_t reserved_14_15         : 2;  /* [15:14],       rsvd,        0x0 */\n            uint32_t dig_512k_div           : 7;  /* [22:16],        r/w,       0x3e */\n            uint32_t reserved_23            : 1;  /* [   23],       rsvd,        0x0 */\n            uint32_t dig_512k_en            : 1;  /* [   24],        r/w,        0x1 */\n            uint32_t dig_512k_comp          : 1;  /* [   25],        r/w,        0x1 */\n            uint32_t reserved_26_27         : 2;  /* [27:26],       rsvd,        0x0 */\n            uint32_t dig_clk_src_sel        : 2;  /* [29:28],        r/w,        0x0 */\n            uint32_t reserved_30            : 1;  /* [   30],       rsvd,        0x0 */\n            uint32_t reg_en_platform_wakeup : 1;  /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DIG32K_WAKEUP_CTRL;\n\n    /* 0xAC : WIFI_BT_COEX_CTRL */\n    union {\n        struct\n        {\n            uint32_t coex_bt_channel : 7;  /* [ 6: 0],        r/w,        0x0 */\n            uint32_t coex_bt_pti     : 4;  /* [10: 7],        r/w,        0x0 */\n            uint32_t coex_bt_bw      : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t en_gpio_bt_coex : 1;  /* [   12],        r/w,        0x0 */\n            uint32_t reserved_13_31  : 19; /* [31:13],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } WIFI_BT_COEX_CTRL;\n\n    /* 0xB0 : BZ_COEX_CTRL */\n    union {\n        struct\n        {\n            uint32_t coex_en           : 1; /* [    0],        r/w,        0x0 */\n            uint32_t wlan_en           : 1; /* [    1],        r/w,        0x0 */\n            uint32_t ble_rx_ignore     : 1; /* [    2],        r/w,        0x0 */\n            uint32_t m154_rx_ignore    : 1; /* [    3],        r/w,        0x0 */\n            uint32_t bz_pri_thr        : 4; /* [ 7: 4],        r/w,        0x0 */\n            uint32_t bz_pri_en         : 1; /* [    8],        r/w,        0x1 */\n            uint32_t bz_pri_pol        : 1; /* [    9],        r/w,        0x1 */\n            uint32_t bz_active_pol     : 1; /* [   10],        r/w,        0x1 */\n            uint32_t bz_abort_pol      : 1; /* [   11],        r/w,        0x1 */\n            uint32_t coex_pri          : 1; /* [   12],        r/w,        0x0 */\n            uint32_t force_m154_win    : 1; /* [   13],        r/w,        0x0 */\n            uint32_t force_ble_win     : 1; /* [   14],        r/w,        0x0 */\n            uint32_t coex_option       : 1; /* [   15],        r/w,        0x0 */\n            uint32_t coex_force_ch     : 7; /* [22:16],        r/w,        0x4 */\n            uint32_t reserved_23       : 1; /* [   23],       rsvd,        0x0 */\n            uint32_t m154_rx_abort_dis : 1; /* [   24],        r/w,        0x0 */\n            uint32_t m154_tx_abort_dis : 1; /* [   25],        r/w,        0x0 */\n            uint32_t ble_rx_abort_dis  : 1; /* [   26],        r/w,        0x0 */\n            uint32_t ble_tx_abort_dis  : 1; /* [   27],        r/w,        0x0 */\n            uint32_t coex_arb          : 4; /* [31:28],          r,        0x8 */\n        } BF;\n        uint32_t WORD;\n    } BZ_COEX_CTRL;\n\n    /* 0xb4  reserved */\n    uint8_t RESERVED0xb4[12];\n\n    /* 0xC0 : UART_SIG_SEL_0 */\n    union {\n        struct\n        {\n            uint32_t uart_sig_0_sel : 4; /* [ 3: 0],        r/w,        0x0 */\n            uint32_t uart_sig_1_sel : 4; /* [ 7: 4],        r/w,        0x1 */\n            uint32_t uart_sig_2_sel : 4; /* [11: 8],        r/w,        0x2 */\n            uint32_t uart_sig_3_sel : 4; /* [15:12],        r/w,        0x3 */\n            uint32_t uart_sig_4_sel : 4; /* [19:16],        r/w,        0x4 */\n            uint32_t uart_sig_5_sel : 4; /* [23:20],        r/w,        0x5 */\n            uint32_t uart_sig_6_sel : 4; /* [27:24],        r/w,        0x6 */\n            uint32_t uart_sig_7_sel : 4; /* [31:28],        r/w,        0x7 */\n        } BF;\n        uint32_t WORD;\n    } UART_SIG_SEL_0;\n\n    /* 0xc4  reserved */\n    uint8_t RESERVED0xc4[12];\n\n    /* 0xD0 : DBG_SEL_LL */\n    union {\n        struct\n        {\n            uint32_t reg_dbg_ll_ctrl : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DBG_SEL_LL;\n\n    /* 0xD4 : DBG_SEL_LH */\n    union {\n        struct\n        {\n            uint32_t reg_dbg_lh_ctrl : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DBG_SEL_LH;\n\n    /* 0xD8 : DBG_SEL_HL */\n    union {\n        struct\n        {\n            uint32_t reg_dbg_hl_ctrl : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DBG_SEL_HL;\n\n    /* 0xDC : DBG_SEL_HH */\n    union {\n        struct\n        {\n            uint32_t reg_dbg_hh_ctrl : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } DBG_SEL_HH;\n\n    /* 0xE0 : debug */\n    union {\n        struct\n        {\n            uint32_t debug_oe : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t debug_i  : 31; /* [31: 1],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } debug;\n\n    /* 0xe4  reserved */\n    uint8_t RESERVED0xe4[28];\n\n    /* 0x100 : GPIO_CFGCTL0 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_0_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_0_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_0_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_0_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_0_pd       : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7        : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_0_func_sel : 5; /* [12: 8],        r/w,        0xe */\n            uint32_t reserved_13_15      : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_1_ie       : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_1_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_1_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_1_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_1_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23      : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_1_func_sel : 5; /* [28:24],        r/w,        0xe */\n            uint32_t reserved_29_31      : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL0;\n\n    /* 0x104 : GPIO_CFGCTL1 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_2_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_2_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_2_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_2_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_2_pd       : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7        : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_2_func_sel : 5; /* [12: 8],        r/w,        0xe */\n            uint32_t reserved_13_15      : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_3_ie       : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_3_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_3_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_3_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_3_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23      : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_3_func_sel : 5; /* [28:24],        r/w,        0xb */\n            uint32_t reserved_29_31      : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL1;\n\n    /* 0x108 : GPIO_CFGCTL2 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_4_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_4_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_4_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_4_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_4_pd       : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7        : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_4_func_sel : 5; /* [12: 8],        r/w,        0xb */\n            uint32_t reserved_13_15      : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_5_ie       : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_5_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_5_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_5_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_5_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23      : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_5_func_sel : 5; /* [28:24],        r/w,        0xb */\n            uint32_t reserved_29_31      : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL2;\n\n    /* 0x10C : GPIO_CFGCTL3 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_6_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_6_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_6_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_6_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_6_pd       : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7        : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_6_func_sel : 5; /* [12: 8],        r/w,        0xb */\n            uint32_t reserved_13_15      : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_7_ie       : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_7_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_7_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_7_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_7_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23      : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_7_func_sel : 5; /* [28:24],        r/w,        0xb */\n            uint32_t reserved_29_31      : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL3;\n\n    /* 0x110 : GPIO_CFGCTL4 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_8_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_8_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_8_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_8_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_8_pd       : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7        : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_8_func_sel : 5; /* [12: 8],        r/w,        0xb */\n            uint32_t reserved_13_15      : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_9_ie       : 1; /* [   16],        r/w,        0x0 */\n            uint32_t reg_gpio_9_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_9_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_9_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_9_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23      : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_9_func_sel : 5; /* [28:24],        r/w,        0xe */\n            uint32_t reserved_29_31      : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL4;\n\n    /* 0x114 : GPIO_CFGCTL5 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_10_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_10_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_10_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_10_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_10_pd       : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7         : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_10_func_sel : 5; /* [12: 8],        r/w,        0xb */\n            uint32_t reserved_13_15       : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_11_ie       : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_11_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_11_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_11_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_11_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23       : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_11_func_sel : 5; /* [28:24],        r/w,        0xb */\n            uint32_t reserved_29_31       : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL5;\n\n    /* 0x118 : GPIO_CFGCTL6 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_12_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_12_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_12_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_12_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_12_pd       : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7         : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_12_func_sel : 5; /* [12: 8],        r/w,        0xb */\n            uint32_t reserved_13_15       : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_13_ie       : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_13_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_13_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_13_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_13_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23       : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_13_func_sel : 5; /* [28:24],        r/w,        0xb */\n            uint32_t reserved_29_31       : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL6;\n\n    /* 0x11C : GPIO_CFGCTL7 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_14_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_14_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_14_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_14_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_14_pd       : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7         : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_14_func_sel : 5; /* [12: 8],        r/w,        0xb */\n            uint32_t reserved_13_15       : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_15_ie       : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_15_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_15_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_15_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_15_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23       : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_15_func_sel : 5; /* [28:24],        r/w,        0xb */\n            uint32_t reserved_29_31       : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL7;\n\n    /* 0x120 : GPIO_CFGCTL8 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_16_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_16_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_16_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_16_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_16_pd       : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7         : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_16_func_sel : 5; /* [12: 8],        r/w,        0xb */\n            uint32_t reserved_13_15       : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_17_ie       : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_17_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_17_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_17_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_17_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23       : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_17_func_sel : 5; /* [28:24],        r/w,        0xb */\n            uint32_t reserved_29_31       : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL8;\n\n    /* 0x124 : GPIO_CFGCTL9 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_18_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_18_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_18_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_18_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_18_pd       : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7         : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_18_func_sel : 5; /* [12: 8],        r/w,        0xb */\n            uint32_t reserved_13_15       : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_19_ie       : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_19_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_19_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_19_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_19_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23       : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_19_func_sel : 5; /* [28:24],        r/w,        0xb */\n            uint32_t reserved_29_31       : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL9;\n\n    /* 0x128 : GPIO_CFGCTL10 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_20_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_20_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_20_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_20_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_20_pd       : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7         : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_20_func_sel : 5; /* [12: 8],        r/w,        0xb */\n            uint32_t reserved_13_15       : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_21_ie       : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_21_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_21_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_21_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_21_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23       : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_21_func_sel : 5; /* [28:24],        r/w,        0xb */\n            uint32_t reserved_29_31       : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL10;\n\n    /* 0x12C : GPIO_CFGCTL11 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_22_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_22_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_22_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_22_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_22_pd       : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7         : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_22_func_sel : 5; /* [12: 8],        r/w,        0xb */\n            uint32_t reserved_13_15       : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_23_ie       : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_23_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_23_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_23_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_23_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23       : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_23_func_sel : 5; /* [28:24],        r/w,        0xb */\n            uint32_t reserved_29_31       : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL11;\n\n    /* 0x130 : GPIO_CFGCTL12 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_24_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_24_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_24_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_24_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_24_pd       : 1; /* [    5],        r/w,        0x1 */\n            uint32_t reserved_6_7         : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_24_func_sel : 5; /* [12: 8],        r/w,        0xb */\n            uint32_t reserved_13_15       : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_25_ie       : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_25_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_25_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_25_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_25_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23       : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_25_func_sel : 5; /* [28:24],        r/w,        0xb */\n            uint32_t reserved_29_31       : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL12;\n\n    /* 0x134 : GPIO_CFGCTL13 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_26_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_26_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_26_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_26_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_26_pd       : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7         : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_26_func_sel : 5; /* [12: 8],        r/w,        0xb */\n            uint32_t reserved_13_15       : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_27_ie       : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_27_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_27_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_27_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_27_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23       : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_27_func_sel : 5; /* [28:24],        r/w,        0xb */\n            uint32_t reserved_29_31       : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL13;\n\n    /* 0x138 : GPIO_CFGCTL14 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_28_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_28_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_28_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_28_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_28_pd       : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7         : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_28_func_sel : 5; /* [12: 8],        r/w,        0xb */\n            uint32_t reserved_13_15       : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_29_ie       : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_29_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_29_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_29_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_29_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23       : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_29_func_sel : 5; /* [28:24],        r/w,        0xb */\n            uint32_t reserved_29_31       : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL14;\n\n    /* 0x13C : GPIO_CFGCTL15 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_30_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_30_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_30_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_30_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_30_pd       : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7         : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_30_func_sel : 5; /* [12: 8],        r/w,        0xb */\n            uint32_t reserved_13_15       : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_31_ie       : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_31_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_31_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_31_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_31_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23       : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_31_func_sel : 5; /* [28:24],        r/w,        0xb */\n            uint32_t reserved_29_31       : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL15;\n\n    /* 0x140 : GPIO_CFGCTL16 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_32_ie  : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_32_smt : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_32_drv : 2;  /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_32_pu  : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_32_pd  : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_15   : 10; /* [15: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_33_ie  : 1;  /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_33_smt : 1;  /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_33_drv : 2;  /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_33_pu  : 1;  /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_33_pd  : 1;  /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_31  : 10; /* [31:22],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL16;\n\n    /* 0x144 : GPIO_CFGCTL17 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_34_ie  : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_34_smt : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_34_drv : 2;  /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_34_pu  : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_34_pd  : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_15   : 10; /* [15: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_35_ie  : 1;  /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_35_smt : 1;  /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_35_drv : 2;  /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_35_pu  : 1;  /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_35_pd  : 1;  /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_31  : 10; /* [31:22],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL17;\n\n    /* 0x148 : GPIO_CFGCTL18 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_36_ie  : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_36_smt : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_36_drv : 2;  /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_36_pu  : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_36_pd  : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_15   : 10; /* [15: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_37_ie  : 1;  /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_37_smt : 1;  /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_37_drv : 2;  /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_37_pu  : 1;  /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_37_pd  : 1;  /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_31  : 10; /* [31:22],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL18;\n\n    /* 0x14c  reserved */\n    uint8_t RESERVED0x14c[52];\n\n    /* 0x180 : GPIO_CFGCTL30 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_0_i  : 1; /* [    0],          r,        0x0 */\n            uint32_t reg_gpio_1_i  : 1; /* [    1],          r,        0x0 */\n            uint32_t reg_gpio_2_i  : 1; /* [    2],          r,        0x0 */\n            uint32_t reg_gpio_3_i  : 1; /* [    3],          r,        0x0 */\n            uint32_t reg_gpio_4_i  : 1; /* [    4],          r,        0x0 */\n            uint32_t reg_gpio_5_i  : 1; /* [    5],          r,        0x0 */\n            uint32_t reg_gpio_6_i  : 1; /* [    6],          r,        0x0 */\n            uint32_t reg_gpio_7_i  : 1; /* [    7],          r,        0x0 */\n            uint32_t reg_gpio_8_i  : 1; /* [    8],          r,        0x0 */\n            uint32_t reg_gpio_9_i  : 1; /* [    9],          r,        0x0 */\n            uint32_t reg_gpio_10_i : 1; /* [   10],          r,        0x0 */\n            uint32_t reg_gpio_11_i : 1; /* [   11],          r,        0x0 */\n            uint32_t reg_gpio_12_i : 1; /* [   12],          r,        0x0 */\n            uint32_t reg_gpio_13_i : 1; /* [   13],          r,        0x0 */\n            uint32_t reg_gpio_14_i : 1; /* [   14],          r,        0x0 */\n            uint32_t reg_gpio_15_i : 1; /* [   15],          r,        0x0 */\n            uint32_t reg_gpio_16_i : 1; /* [   16],          r,        0x0 */\n            uint32_t reg_gpio_17_i : 1; /* [   17],          r,        0x0 */\n            uint32_t reg_gpio_18_i : 1; /* [   18],          r,        0x0 */\n            uint32_t reg_gpio_19_i : 1; /* [   19],          r,        0x0 */\n            uint32_t reg_gpio_20_i : 1; /* [   20],          r,        0x0 */\n            uint32_t reg_gpio_21_i : 1; /* [   21],          r,        0x0 */\n            uint32_t reg_gpio_22_i : 1; /* [   22],          r,        0x0 */\n            uint32_t reg_gpio_23_i : 1; /* [   23],          r,        0x0 */\n            uint32_t reg_gpio_24_i : 1; /* [   24],          r,        0x0 */\n            uint32_t reg_gpio_25_i : 1; /* [   25],          r,        0x0 */\n            uint32_t reg_gpio_26_i : 1; /* [   26],          r,        0x0 */\n            uint32_t reg_gpio_27_i : 1; /* [   27],          r,        0x0 */\n            uint32_t reg_gpio_28_i : 1; /* [   28],          r,        0x0 */\n            uint32_t reg_gpio_29_i : 1; /* [   29],          r,        0x0 */\n            uint32_t reg_gpio_30_i : 1; /* [   30],          r,        0x0 */\n            uint32_t reg_gpio_31_i : 1; /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL30;\n\n    /* 0x184 : GPIO_CFGCTL31 */\n    union {\n        struct\n        {\n            uint32_t reserved_0_31 : 32; /* [31: 0],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL31;\n\n    /* 0x188 : GPIO_CFGCTL32 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_0_o  : 1; /* [    0],        r/w,        0x0 */\n            uint32_t reg_gpio_1_o  : 1; /* [    1],        r/w,        0x0 */\n            uint32_t reg_gpio_2_o  : 1; /* [    2],        r/w,        0x0 */\n            uint32_t reg_gpio_3_o  : 1; /* [    3],        r/w,        0x0 */\n            uint32_t reg_gpio_4_o  : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_5_o  : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reg_gpio_6_o  : 1; /* [    6],        r/w,        0x0 */\n            uint32_t reg_gpio_7_o  : 1; /* [    7],        r/w,        0x0 */\n            uint32_t reg_gpio_8_o  : 1; /* [    8],        r/w,        0x0 */\n            uint32_t reg_gpio_9_o  : 1; /* [    9],        r/w,        0x0 */\n            uint32_t reg_gpio_10_o : 1; /* [   10],        r/w,        0x0 */\n            uint32_t reg_gpio_11_o : 1; /* [   11],        r/w,        0x0 */\n            uint32_t reg_gpio_12_o : 1; /* [   12],        r/w,        0x0 */\n            uint32_t reg_gpio_13_o : 1; /* [   13],        r/w,        0x0 */\n            uint32_t reg_gpio_14_o : 1; /* [   14],        r/w,        0x0 */\n            uint32_t reg_gpio_15_o : 1; /* [   15],        r/w,        0x0 */\n            uint32_t reg_gpio_16_o : 1; /* [   16],        r/w,        0x0 */\n            uint32_t reg_gpio_17_o : 1; /* [   17],        r/w,        0x0 */\n            uint32_t reg_gpio_18_o : 1; /* [   18],        r/w,        0x0 */\n            uint32_t reg_gpio_19_o : 1; /* [   19],        r/w,        0x0 */\n            uint32_t reg_gpio_20_o : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_21_o : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reg_gpio_22_o : 1; /* [   22],        r/w,        0x0 */\n            uint32_t reg_gpio_23_o : 1; /* [   23],        r/w,        0x0 */\n            uint32_t reg_gpio_24_o : 1; /* [   24],        r/w,        0x0 */\n            uint32_t reg_gpio_25_o : 1; /* [   25],        r/w,        0x0 */\n            uint32_t reg_gpio_26_o : 1; /* [   26],        r/w,        0x0 */\n            uint32_t reg_gpio_27_o : 1; /* [   27],        r/w,        0x0 */\n            uint32_t reg_gpio_28_o : 1; /* [   28],        r/w,        0x0 */\n            uint32_t reg_gpio_29_o : 1; /* [   29],        r/w,        0x0 */\n            uint32_t reg_gpio_30_o : 1; /* [   30],        r/w,        0x0 */\n            uint32_t reg_gpio_31_o : 1; /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL32;\n\n    /* 0x18C : GPIO_CFGCTL33 */\n    union {\n        struct\n        {\n            uint32_t reserved_0_31 : 32; /* [31: 0],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL33;\n\n    /* 0x190 : GPIO_CFGCTL34 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_0_oe  : 1; /* [    0],        r/w,        0x0 */\n            uint32_t reg_gpio_1_oe  : 1; /* [    1],        r/w,        0x0 */\n            uint32_t reg_gpio_2_oe  : 1; /* [    2],        r/w,        0x0 */\n            uint32_t reg_gpio_3_oe  : 1; /* [    3],        r/w,        0x0 */\n            uint32_t reg_gpio_4_oe  : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_5_oe  : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reg_gpio_6_oe  : 1; /* [    6],        r/w,        0x0 */\n            uint32_t reg_gpio_7_oe  : 1; /* [    7],        r/w,        0x0 */\n            uint32_t reg_gpio_8_oe  : 1; /* [    8],        r/w,        0x0 */\n            uint32_t reg_gpio_9_oe  : 1; /* [    9],        r/w,        0x0 */\n            uint32_t reg_gpio_10_oe : 1; /* [   10],        r/w,        0x0 */\n            uint32_t reg_gpio_11_oe : 1; /* [   11],        r/w,        0x0 */\n            uint32_t reg_gpio_12_oe : 1; /* [   12],        r/w,        0x0 */\n            uint32_t reg_gpio_13_oe : 1; /* [   13],        r/w,        0x0 */\n            uint32_t reg_gpio_14_oe : 1; /* [   14],        r/w,        0x0 */\n            uint32_t reg_gpio_15_oe : 1; /* [   15],        r/w,        0x0 */\n            uint32_t reg_gpio_16_oe : 1; /* [   16],        r/w,        0x0 */\n            uint32_t reg_gpio_17_oe : 1; /* [   17],        r/w,        0x0 */\n            uint32_t reg_gpio_18_oe : 1; /* [   18],        r/w,        0x0 */\n            uint32_t reg_gpio_19_oe : 1; /* [   19],        r/w,        0x0 */\n            uint32_t reg_gpio_20_oe : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_21_oe : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reg_gpio_22_oe : 1; /* [   22],        r/w,        0x0 */\n            uint32_t reg_gpio_23_oe : 1; /* [   23],        r/w,        0x0 */\n            uint32_t reg_gpio_24_oe : 1; /* [   24],        r/w,        0x0 */\n            uint32_t reg_gpio_25_oe : 1; /* [   25],        r/w,        0x0 */\n            uint32_t reg_gpio_26_oe : 1; /* [   26],        r/w,        0x0 */\n            uint32_t reg_gpio_27_oe : 1; /* [   27],        r/w,        0x0 */\n            uint32_t reg_gpio_28_oe : 1; /* [   28],        r/w,        0x0 */\n            uint32_t reg_gpio_29_oe : 1; /* [   29],        r/w,        0x0 */\n            uint32_t reg_gpio_30_oe : 1; /* [   30],        r/w,        0x0 */\n            uint32_t reg_gpio_31_oe : 1; /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL34;\n\n    /* 0x194 : GPIO_CFGCTL35 */\n    union {\n        struct\n        {\n            uint32_t reserved_0_31 : 32; /* [31: 0],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL35;\n\n    /* 0x198  reserved */\n    uint8_t RESERVED0x198[8];\n\n    /* 0x1A0 : GPIO_INT_MASK1 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_int_mask1 : 32; /* [31: 0],        r/w, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } GPIO_INT_MASK1;\n\n    /* 0x1a4  reserved */\n    uint8_t RESERVED0x1a4[4];\n\n    /* 0x1A8 : GPIO_INT_STAT1 */\n    union {\n        struct\n        {\n            uint32_t gpio_int_stat1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_INT_STAT1;\n\n    /* 0x1ac  reserved */\n    uint8_t RESERVED0x1ac[4];\n\n    /* 0x1B0 : GPIO_INT_CLR1 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_int_clr1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_INT_CLR1;\n\n    /* 0x1b4  reserved */\n    uint8_t RESERVED0x1b4[12];\n\n    /* 0x1C0 : GPIO_INT_MODE_SET1 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_int_mode_set1 : 30; /* [29: 0],        r/w,        0x0 */\n            uint32_t reserved_30_31         : 2;  /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_INT_MODE_SET1;\n\n    /* 0x1C4 : GPIO_INT_MODE_SET2 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_int_mode_set2 : 30; /* [29: 0],        r/w,        0x0 */\n            uint32_t reserved_30_31         : 2;  /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_INT_MODE_SET2;\n\n    /* 0x1C8 : GPIO_INT_MODE_SET3 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_int_mode_set3 : 30; /* [29: 0],        r/w,        0x0 */\n            uint32_t reserved_30_31         : 2;  /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_INT_MODE_SET3;\n\n    /* 0x1CC : GPIO_INT_MODE_SET4 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_int_mode_set4 : 6;  /* [ 5: 0],        r/w,        0x0 */\n            uint32_t reserved_6_31          : 26; /* [31: 6],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_INT_MODE_SET4;\n\n    /* 0x1D0 : GPIO_INT2_MASK1 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_int2_mask1 : 32; /* [31: 0],        r/w, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } GPIO_INT2_MASK1;\n\n    /* 0x1D4 : GPIO_INT2_STAT1 */\n    union {\n        struct\n        {\n            uint32_t gpio_int2_stat1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_INT2_STAT1;\n\n    /* 0x1D8 : GPIO_INT2_CLR1 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_int2_clr1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_INT2_CLR1;\n\n    /* 0x1DC : GPIO_INT2_MODE_SET1 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_int2_mode_set1 : 30; /* [29: 0],        r/w,        0x0 */\n            uint32_t reserved_30_31          : 2;  /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_INT2_MODE_SET1;\n\n    /* 0x1E0 : GPIO_INT2_MODE_SET2 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_int2_mode_set2 : 30; /* [29: 0],        r/w,        0x0 */\n            uint32_t reserved_30_31          : 2;  /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_INT2_MODE_SET2;\n\n    /* 0x1E4 : GPIO_INT2_MODE_SET3 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_int2_mode_set3 : 30; /* [29: 0],        r/w,        0x0 */\n            uint32_t reserved_30_31          : 2;  /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_INT2_MODE_SET3;\n\n    /* 0x1E8 : GPIO_INT2_MODE_SET4 */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_int2_mode_set4 : 6;  /* [ 5: 0],        r/w,        0x0 */\n            uint32_t reserved_6_31           : 26; /* [31: 6],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_INT2_MODE_SET4;\n\n    /* 0x1ec  reserved */\n    uint8_t RESERVED0x1ec[20];\n\n    /* 0x200 : dll */\n    union {\n        struct\n        {\n            uint32_t dtest_en_dll_refclk : 1; /* [    0],        r/w,        0x0 */\n            uint32_t dtest_en_dll_outclk : 1; /* [    1],        r/w,        0x0 */\n            uint32_t ten_dll             : 1; /* [    2],        r/w,        0x0 */\n            uint32_t dll_clk_mmdiv_en    : 1; /* [    3],        r/w,        0x0 */\n            uint32_t dll_clk_288M_en     : 1; /* [    4],        r/w,        0x1 */\n            uint32_t dll_clk_144M_en     : 1; /* [    5],        r/w,        0x1 */\n            uint32_t dll_clk_96M_en      : 1; /* [    6],        r/w,        0x1 */\n            uint32_t dll_clk_57p6M_en    : 1; /* [    7],        r/w,        0x1 */\n            uint32_t dll_vctrl_sel       : 3; /* [10: 8],        r/w,        0x4 */\n            uint32_t reserved_11         : 1; /* [   11],       rsvd,        0x0 */\n            uint32_t dll_prechg_sel      : 1; /* [   12],        r/w,        0x0 */\n            uint32_t dll_prechg_reg      : 1; /* [   13],        r/w,        0x1 */\n            uint32_t dll_prechg_en       : 1; /* [   14],        r/w,        0x1 */\n            uint32_t dll_vctrl_force_en  : 1; /* [   15],        r/w,        0x0 */\n            uint32_t dll_post_div        : 4; /* [19:16],        r/w,        0x2 */\n            uint32_t dll_delay_sel       : 2; /* [21:20],        r/w,        0x1 */\n            uint32_t dll_cp_op_en        : 1; /* [   22],        r/w,        0x1 */\n            uint32_t dll_cp_hiz          : 1; /* [   23],        r/w,        0x0 */\n            uint32_t reserved_24_27      : 4; /* [27:24],       rsvd,        0x0 */\n            uint32_t dll_refclk_sel      : 1; /* [   28],        r/w,        0x0 */\n            uint32_t dll_reset           : 1; /* [   29],        r/w,        0x1 */\n            uint32_t pu_dll              : 1; /* [   30],        r/w,        0x0 */\n            uint32_t ppu_dll             : 1; /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } dll;\n\n    /* 0x204  reserved */\n    uint8_t RESERVED0x204[32];\n\n    /* 0x224 : led_driver */\n    union {\n        struct\n        {\n            uint32_t led_din_reg          : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t led_din_sel          : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t led_din_polarity_sel : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t reserved_3           : 1;  /* [    3],       rsvd,        0x0 */\n            uint32_t leddrv_ibias         : 4;  /* [ 7: 4],        r/w,        0x8 */\n            uint32_t ir_rx_gpio_sel       : 4;  /* [11: 8],        r/w,        0x0 */\n            uint32_t reserved_12_27       : 16; /* [27:12],       rsvd,        0x0 */\n            uint32_t leddrv_out_en        : 2;  /* [29:28],        r/w,        0x3 */\n            uint32_t reserved_30          : 1;  /* [   30],       rsvd,        0x0 */\n            uint32_t pu_leddrv            : 1;  /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } led_driver;\n\n    /* 0x228 : usb_xcvr */\n    union {\n        struct\n        {\n            uint32_t usb_ldo_vfb      : 3; /* [ 2: 0],        r/w,        0x3 */\n            uint32_t pu_usb_ldo       : 1; /* [    3],        r/w,        0x0 */\n            uint32_t usb_rout_nmos    : 3; /* [ 6: 4],        r/w,        0x3 */\n            uint32_t reserved_7       : 1; /* [    7],       rsvd,        0x0 */\n            uint32_t usb_rout_pmos    : 3; /* [10: 8],        r/w,        0x3 */\n            uint32_t reserved_11      : 1; /* [   11],       rsvd,        0x0 */\n            uint32_t usb_oeb_sel      : 1; /* [   12],         rw,        0x0 */\n            uint32_t usb_oeb_reg      : 1; /* [   13],         rw,        0x1 */\n            uint32_t usb_oeb          : 1; /* [   14],          r,        0x1 */\n            uint32_t reserved_15      : 1; /* [   15],       rsvd,        0x0 */\n            uint32_t usb_data_convert : 1; /* [   16],         rw,        0x0 */\n            uint32_t reserved_17_19   : 3; /* [19:17],       rsvd,        0x0 */\n            uint32_t usb_enum         : 1; /* [   20],        r/w,        0x0 */\n            uint32_t usb_spd          : 1; /* [   21],        r/w,        0x1 */\n            uint32_t usb_sus          : 1; /* [   22],        r/w,        0x0 */\n            uint32_t pu_usb           : 1; /* [   23],        r/w,        0x0 */\n            uint32_t usb_bd           : 1; /* [   24],          r,        0x0 */\n            uint32_t usb_vim          : 1; /* [   25],          r,        0x0 */\n            uint32_t usb_vip          : 1; /* [   26],          r,        0x0 */\n            uint32_t usb_rcv          : 1; /* [   27],          r,        0x0 */\n            uint32_t reserved_28_31   : 4; /* [31:28],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } usb_xcvr;\n\n    /* 0x22C : usb_xcvr_config */\n    union {\n        struct\n        {\n            uint32_t usb_v_hys_m         : 2; /* [ 1: 0],        r/w,        0x1 */\n            uint32_t usb_v_hys_p         : 2; /* [ 3: 2],        r/w,        0x1 */\n            uint32_t usb_bd_vth          : 3; /* [ 6: 4],        r/w,        0x1 */\n            uint32_t reg_usb_use_xcvr    : 1; /* [    7],        r/w,        0x1 */\n            uint32_t usb_str_drv         : 3; /* [10: 8],        r/w,        0x0 */\n            uint32_t reg_usb_use_ctrl    : 1; /* [   11],        r/w,        0x1 */\n            uint32_t usb_res_pullup_tune : 3; /* [14:12],        r/w,        0x2 */\n            uint32_t reserved_15         : 1; /* [   15],       rsvd,        0x0 */\n            uint32_t usb_slewrate_m_fall : 3; /* [18:16],        r/w,        0x3 */\n            uint32_t reserved_19         : 1; /* [   19],       rsvd,        0x0 */\n            uint32_t usb_slewrate_m_rise : 3; /* [22:20],        r/w,        0x4 */\n            uint32_t reserved_23         : 1; /* [   23],       rsvd,        0x0 */\n            uint32_t usb_slewrate_p_fall : 3; /* [26:24],        r/w,        0x3 */\n            uint32_t reserved_27         : 1; /* [   27],       rsvd,        0x0 */\n            uint32_t usb_slewrate_p_rise : 3; /* [30:28],        r/w,        0x4 */\n            uint32_t reserved_31         : 1; /* [   31],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } usb_xcvr_config;\n\n    /* 0x230  reserved */\n    uint8_t RESERVED0x230[216];\n\n    /* 0x308 : gpdac_ctrl */\n    union {\n        struct\n        {\n            uint32_t gpdaca_rstn_ana : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t gpdacb_rstn_ana : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t reserved_2_6    : 5;  /* [ 6: 2],       rsvd,        0x0 */\n            uint32_t gpdac_test_en   : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t gpdac_ref_sel   : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t gpdac_test_sel  : 3;  /* [11: 9],        r/w,        0x0 */\n            uint32_t reserved_12_23  : 12; /* [23:12],       rsvd,        0x0 */\n            uint32_t gpdac_reserved  : 8;  /* [31:24],        r/w,        0xf */\n        } BF;\n        uint32_t WORD;\n    } gpdac_ctrl;\n\n    /* 0x30C : gpdac_actrl */\n    union {\n        struct\n        {\n            uint32_t gpdac_a_en     : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t gpdac_ioa_en   : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t reserved_2_17  : 16; /* [17: 2],       rsvd,        0x0 */\n            uint32_t gpdac_a_rng    : 2;  /* [19:18],        r/w,        0x3 */\n            uint32_t gpdac_a_outmux : 3;  /* [22:20],        r/w,        0x0 */\n            uint32_t reserved_23_31 : 9;  /* [31:23],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpdac_actrl;\n\n    /* 0x310 : gpdac_bctrl */\n    union {\n        struct\n        {\n            uint32_t gpdac_b_en     : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t gpdac_iob_en   : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t reserved_2_17  : 16; /* [17: 2],       rsvd,        0x0 */\n            uint32_t gpdac_b_rng    : 2;  /* [19:18],        r/w,        0x3 */\n            uint32_t gpdac_b_outmux : 3;  /* [22:20],        r/w,        0x0 */\n            uint32_t reserved_23_31 : 9;  /* [31:23],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpdac_bctrl;\n\n    /* 0x314 : gpdac_data */\n    union {\n        struct\n        {\n            uint32_t gpdac_b_data   : 10; /* [ 9: 0],        r/w,        0x0 */\n            uint32_t reserved_10_15 : 6;  /* [15:10],       rsvd,        0x0 */\n            uint32_t gpdac_a_data   : 10; /* [25:16],        r/w,        0x0 */\n            uint32_t reserved_26_31 : 6;  /* [31:26],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpdac_data;\n\n    /* 0x318  reserved */\n    uint8_t RESERVED0x318[2792];\n\n    /* 0xE00 : chip_revision */\n    union {\n        struct\n        {\n            uint32_t chip_rev      : 4;  /* [ 3: 0],          r,        0x0 */\n            uint32_t reserved_4_31 : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } chip_revision;\n\n    /* 0xe04  reserved */\n    uint8_t RESERVED0xe04[252];\n\n    /* 0xF00 : tzc_glb_ctrl_0 */\n    union {\n        struct\n        {\n            uint32_t tzc_glb_swrst_s00_lock       : 1; /* [    0],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s01_lock       : 1; /* [    1],          r,        0x0 */\n            uint32_t reserved_2_7                 : 6; /* [ 7: 2],       rsvd,        0x0 */\n            uint32_t tzc_glb_swrst_s30_lock       : 1; /* [    8],          r,        0x0 */\n            uint32_t reserved_9_11                : 3; /* [11: 9],       rsvd,        0x0 */\n            uint32_t tzc_glb_ctrl_pwron_rst_lock  : 1; /* [   12],          r,        0x0 */\n            uint32_t tzc_glb_ctrl_cpu_reset_lock  : 1; /* [   13],          r,        0x0 */\n            uint32_t tzc_glb_ctrl_sys_reset_lock  : 1; /* [   14],          r,        0x0 */\n            uint32_t tzc_glb_ctrl_ungated_ap_lock : 1; /* [   15],          r,        0x0 */\n            uint32_t reserved_16_24               : 9; /* [24:16],       rsvd,        0x0 */\n            uint32_t tzc_glb_misc_lock            : 1; /* [   25],          r,        0x0 */\n            uint32_t tzc_glb_sram_lock            : 1; /* [   26],          r,        0x0 */\n            uint32_t tzc_glb_l2c_lock             : 1; /* [   27],          r,        0x0 */\n            uint32_t tzc_glb_bmx_lock             : 1; /* [   28],          r,        0x0 */\n            uint32_t tzc_glb_dbg_lock             : 1; /* [   29],          r,        0x0 */\n            uint32_t tzc_glb_mbist_lock           : 1; /* [   30],          r,        0x0 */\n            uint32_t tzc_glb_clk_lock             : 1; /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } tzc_glb_ctrl_0;\n\n    /* 0xF04 : tzc_glb_ctrl_1 */\n    union {\n        struct\n        {\n            uint32_t tzc_glb_swrst_s20_lock : 1; /* [    0],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s21_lock : 1; /* [    1],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s22_lock : 1; /* [    2],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s23_lock : 1; /* [    3],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s24_lock : 1; /* [    4],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s25_lock : 1; /* [    5],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s26_lock : 1; /* [    6],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s27_lock : 1; /* [    7],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s28_lock : 1; /* [    8],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s29_lock : 1; /* [    9],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s2a_lock : 1; /* [   10],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s2b_lock : 1; /* [   11],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s2c_lock : 1; /* [   12],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s2d_lock : 1; /* [   13],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s2e_lock : 1; /* [   14],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s2f_lock : 1; /* [   15],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s10_lock : 1; /* [   16],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s11_lock : 1; /* [   17],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s12_lock : 1; /* [   18],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s13_lock : 1; /* [   19],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s14_lock : 1; /* [   20],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s15_lock : 1; /* [   21],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s16_lock : 1; /* [   22],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s17_lock : 1; /* [   23],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s18_lock : 1; /* [   24],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s19_lock : 1; /* [   25],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s1a_lock : 1; /* [   26],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s1b_lock : 1; /* [   27],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s1c_lock : 1; /* [   28],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s1d_lock : 1; /* [   29],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s1e_lock : 1; /* [   30],          r,        0x0 */\n            uint32_t tzc_glb_swrst_s1f_lock : 1; /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } tzc_glb_ctrl_1;\n\n    /* 0xF08 : tzc_glb_ctrl_2 */\n    union {\n        struct\n        {\n            uint32_t tzc_glb_gpio_0_lock  : 1; /* [    0],          r,        0x0 */\n            uint32_t tzc_glb_gpio_1_lock  : 1; /* [    1],          r,        0x0 */\n            uint32_t tzc_glb_gpio_2_lock  : 1; /* [    2],          r,        0x0 */\n            uint32_t tzc_glb_gpio_3_lock  : 1; /* [    3],          r,        0x0 */\n            uint32_t tzc_glb_gpio_4_lock  : 1; /* [    4],          r,        0x0 */\n            uint32_t tzc_glb_gpio_5_lock  : 1; /* [    5],          r,        0x0 */\n            uint32_t tzc_glb_gpio_6_lock  : 1; /* [    6],          r,        0x0 */\n            uint32_t tzc_glb_gpio_7_lock  : 1; /* [    7],          r,        0x0 */\n            uint32_t tzc_glb_gpio_8_lock  : 1; /* [    8],          r,        0x0 */\n            uint32_t tzc_glb_gpio_9_lock  : 1; /* [    9],          r,        0x0 */\n            uint32_t tzc_glb_gpio_10_lock : 1; /* [   10],          r,        0x0 */\n            uint32_t tzc_glb_gpio_11_lock : 1; /* [   11],          r,        0x0 */\n            uint32_t tzc_glb_gpio_12_lock : 1; /* [   12],          r,        0x0 */\n            uint32_t tzc_glb_gpio_13_lock : 1; /* [   13],          r,        0x0 */\n            uint32_t tzc_glb_gpio_14_lock : 1; /* [   14],          r,        0x0 */\n            uint32_t tzc_glb_gpio_15_lock : 1; /* [   15],          r,        0x0 */\n            uint32_t tzc_glb_gpio_16_lock : 1; /* [   16],          r,        0x0 */\n            uint32_t tzc_glb_gpio_17_lock : 1; /* [   17],          r,        0x0 */\n            uint32_t tzc_glb_gpio_18_lock : 1; /* [   18],          r,        0x0 */\n            uint32_t tzc_glb_gpio_19_lock : 1; /* [   19],          r,        0x0 */\n            uint32_t tzc_glb_gpio_20_lock : 1; /* [   20],          r,        0x0 */\n            uint32_t tzc_glb_gpio_21_lock : 1; /* [   21],          r,        0x0 */\n            uint32_t tzc_glb_gpio_22_lock : 1; /* [   22],          r,        0x0 */\n            uint32_t tzc_glb_gpio_23_lock : 1; /* [   23],          r,        0x0 */\n            uint32_t tzc_glb_gpio_24_lock : 1; /* [   24],          r,        0x0 */\n            uint32_t tzc_glb_gpio_25_lock : 1; /* [   25],          r,        0x0 */\n            uint32_t tzc_glb_gpio_26_lock : 1; /* [   26],          r,        0x0 */\n            uint32_t tzc_glb_gpio_27_lock : 1; /* [   27],          r,        0x0 */\n            uint32_t tzc_glb_gpio_28_lock : 1; /* [   28],          r,        0x0 */\n            uint32_t tzc_glb_gpio_29_lock : 1; /* [   29],          r,        0x0 */\n            uint32_t tzc_glb_gpio_30_lock : 1; /* [   30],          r,        0x0 */\n            uint32_t tzc_glb_gpio_31_lock : 1; /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } tzc_glb_ctrl_2;\n\n    /* 0xF0C : tzc_glb_ctrl_3 */\n    union {\n        struct\n        {\n            uint32_t tzc_glb_gpio_32_lock : 1;  /* [    0],          r,        0x0 */\n            uint32_t tzc_glb_gpio_33_lock : 1;  /* [    1],          r,        0x0 */\n            uint32_t tzc_glb_gpio_34_lock : 1;  /* [    2],          r,        0x0 */\n            uint32_t tzc_glb_gpio_35_lock : 1;  /* [    3],          r,        0x0 */\n            uint32_t tzc_glb_gpio_36_lock : 1;  /* [    4],          r,        0x0 */\n            uint32_t tzc_glb_gpio_37_lock : 1;  /* [    5],          r,        0x0 */\n            uint32_t reserved_6_31        : 26; /* [31: 6],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } tzc_glb_ctrl_3;\n};\n\ntypedef volatile struct glb_reg glb_reg_t;\n\n/*Following is reg patch*/\n\n/* 0x0 : GPIO_CFGCTL */\n#define GLB_GPIO_CFGCTL_OFFSET       (0x0)\n#define GLB_REG_GPIO_0_IE            GLB_REG_GPIO_0_IE\n#define GLB_REG_GPIO_0_IE_POS        (0U)\n#define GLB_REG_GPIO_0_IE_LEN        (1U)\n#define GLB_REG_GPIO_0_IE_MSK        (((1U << GLB_REG_GPIO_0_IE_LEN) - 1) << GLB_REG_GPIO_0_IE_POS)\n#define GLB_REG_GPIO_0_IE_UMSK       (~(((1U << GLB_REG_GPIO_0_IE_LEN) - 1) << GLB_REG_GPIO_0_IE_POS))\n#define GLB_REG_GPIO_0_SMT           GLB_REG_GPIO_0_SMT\n#define GLB_REG_GPIO_0_SMT_POS       (1U)\n#define GLB_REG_GPIO_0_SMT_LEN       (1U)\n#define GLB_REG_GPIO_0_SMT_MSK       (((1U << GLB_REG_GPIO_0_SMT_LEN) - 1) << GLB_REG_GPIO_0_SMT_POS)\n#define GLB_REG_GPIO_0_SMT_UMSK      (~(((1U << GLB_REG_GPIO_0_SMT_LEN) - 1) << GLB_REG_GPIO_0_SMT_POS))\n#define GLB_REG_GPIO_0_DRV           GLB_REG_GPIO_0_DRV\n#define GLB_REG_GPIO_0_DRV_POS       (2U)\n#define GLB_REG_GPIO_0_DRV_LEN       (2U)\n#define GLB_REG_GPIO_0_DRV_MSK       (((1U << GLB_REG_GPIO_0_DRV_LEN) - 1) << GLB_REG_GPIO_0_DRV_POS)\n#define GLB_REG_GPIO_0_DRV_UMSK      (~(((1U << GLB_REG_GPIO_0_DRV_LEN) - 1) << GLB_REG_GPIO_0_DRV_POS))\n#define GLB_REG_GPIO_0_PU            GLB_REG_GPIO_0_PU\n#define GLB_REG_GPIO_0_PU_POS        (4U)\n#define GLB_REG_GPIO_0_PU_LEN        (1U)\n#define GLB_REG_GPIO_0_PU_MSK        (((1U << GLB_REG_GPIO_0_PU_LEN) - 1) << GLB_REG_GPIO_0_PU_POS)\n#define GLB_REG_GPIO_0_PU_UMSK       (~(((1U << GLB_REG_GPIO_0_PU_LEN) - 1) << GLB_REG_GPIO_0_PU_POS))\n#define GLB_REG_GPIO_0_PD            GLB_REG_GPIO_0_PD\n#define GLB_REG_GPIO_0_PD_POS        (5U)\n#define GLB_REG_GPIO_0_PD_LEN        (1U)\n#define GLB_REG_GPIO_0_PD_MSK        (((1U << GLB_REG_GPIO_0_PD_LEN) - 1) << GLB_REG_GPIO_0_PD_POS)\n#define GLB_REG_GPIO_0_PD_UMSK       (~(((1U << GLB_REG_GPIO_0_PD_LEN) - 1) << GLB_REG_GPIO_0_PD_POS))\n#define GLB_REG_GPIO_0_FUNC_SEL      GLB_REG_GPIO_0_FUNC_SEL\n#define GLB_REG_GPIO_0_FUNC_SEL_POS  (8U)\n#define GLB_REG_GPIO_0_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_0_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_0_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_0_FUNC_SEL_POS)\n#define GLB_REG_GPIO_0_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_0_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_0_FUNC_SEL_POS))\n#define GLB_REG_GPIO_1_IE            GLB_REG_GPIO_1_IE\n#define GLB_REG_GPIO_1_IE_POS        (16U)\n#define GLB_REG_GPIO_1_IE_LEN        (1U)\n#define GLB_REG_GPIO_1_IE_MSK        (((1U << GLB_REG_GPIO_1_IE_LEN) - 1) << GLB_REG_GPIO_1_IE_POS)\n#define GLB_REG_GPIO_1_IE_UMSK       (~(((1U << GLB_REG_GPIO_1_IE_LEN) - 1) << GLB_REG_GPIO_1_IE_POS))\n#define GLB_REG_GPIO_1_SMT           GLB_REG_GPIO_1_SMT\n#define GLB_REG_GPIO_1_SMT_POS       (17U)\n#define GLB_REG_GPIO_1_SMT_LEN       (1U)\n#define GLB_REG_GPIO_1_SMT_MSK       (((1U << GLB_REG_GPIO_1_SMT_LEN) - 1) << GLB_REG_GPIO_1_SMT_POS)\n#define GLB_REG_GPIO_1_SMT_UMSK      (~(((1U << GLB_REG_GPIO_1_SMT_LEN) - 1) << GLB_REG_GPIO_1_SMT_POS))\n#define GLB_REG_GPIO_1_DRV           GLB_REG_GPIO_1_DRV\n#define GLB_REG_GPIO_1_DRV_POS       (18U)\n#define GLB_REG_GPIO_1_DRV_LEN       (2U)\n#define GLB_REG_GPIO_1_DRV_MSK       (((1U << GLB_REG_GPIO_1_DRV_LEN) - 1) << GLB_REG_GPIO_1_DRV_POS)\n#define GLB_REG_GPIO_1_DRV_UMSK      (~(((1U << GLB_REG_GPIO_1_DRV_LEN) - 1) << GLB_REG_GPIO_1_DRV_POS))\n#define GLB_REG_GPIO_1_PU            GLB_REG_GPIO_1_PU\n#define GLB_REG_GPIO_1_PU_POS        (20U)\n#define GLB_REG_GPIO_1_PU_LEN        (1U)\n#define GLB_REG_GPIO_1_PU_MSK        (((1U << GLB_REG_GPIO_1_PU_LEN) - 1) << GLB_REG_GPIO_1_PU_POS)\n#define GLB_REG_GPIO_1_PU_UMSK       (~(((1U << GLB_REG_GPIO_1_PU_LEN) - 1) << GLB_REG_GPIO_1_PU_POS))\n#define GLB_REG_GPIO_1_PD            GLB_REG_GPIO_1_PD\n#define GLB_REG_GPIO_1_PD_POS        (21U)\n#define GLB_REG_GPIO_1_PD_LEN        (1U)\n#define GLB_REG_GPIO_1_PD_MSK        (((1U << GLB_REG_GPIO_1_PD_LEN) - 1) << GLB_REG_GPIO_1_PD_POS)\n#define GLB_REG_GPIO_1_PD_UMSK       (~(((1U << GLB_REG_GPIO_1_PD_LEN) - 1) << GLB_REG_GPIO_1_PD_POS))\n#define GLB_REG_GPIO_1_FUNC_SEL      GLB_REG_GPIO_1_FUNC_SEL\n#define GLB_REG_GPIO_1_FUNC_SEL_POS  (24U)\n#define GLB_REG_GPIO_1_FUNC_SEL_LEN  (5U)\n#define GLB_REG_GPIO_1_FUNC_SEL_MSK  (((1U << GLB_REG_GPIO_1_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_1_FUNC_SEL_POS)\n#define GLB_REG_GPIO_1_FUNC_SEL_UMSK (~(((1U << GLB_REG_GPIO_1_FUNC_SEL_LEN) - 1) << GLB_REG_GPIO_1_FUNC_SEL_POS))\n\nstruct glb_gpio_reg {\n    /* 0x0 : GPIO_CFGCTL */\n    union {\n        struct\n        {\n            uint32_t reg_gpio_0_ie       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_gpio_0_smt      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_gpio_0_drv      : 2; /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reg_gpio_0_pu       : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_gpio_0_pd       : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7        : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t reg_gpio_0_func_sel : 5; /* [12: 8],        r/w,        0xe */\n            uint32_t reserved_13_15      : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_gpio_1_ie       : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reg_gpio_1_smt      : 1; /* [   17],        r/w,        0x1 */\n            uint32_t reg_gpio_1_drv      : 2; /* [19:18],        r/w,        0x0 */\n            uint32_t reg_gpio_1_pu       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t reg_gpio_1_pd       : 1; /* [   21],        r/w,        0x0 */\n            uint32_t reserved_22_23      : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t reg_gpio_1_func_sel : 5; /* [28:24],        r/w,        0xe */\n            uint32_t reserved_29_31      : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } GPIO_CFGCTL;\n};\n\ntypedef volatile struct glb_gpio_reg glb_gpio_reg_t;\n\n#define GLB_GPIO_OFFSET           0x100\n#define GLB_GPIO_INPUT_OFFSET     0x180\n#define GLB_GPIO_OUTPUT_OFFSET    0x188\n#define GLB_GPIO_OUTPUT_EN_OFFSET 0x190\n\n#endif /* __GLB_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/gpip_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    gpip_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __GPIP_REG_H__\n#define __GPIP_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : gpadc_config */\n#define GPIP_GPADC_CONFIG_OFFSET           (0x0)\n#define GPIP_GPADC_DMA_EN                  GPIP_GPADC_DMA_EN\n#define GPIP_GPADC_DMA_EN_POS              (0U)\n#define GPIP_GPADC_DMA_EN_LEN              (1U)\n#define GPIP_GPADC_DMA_EN_MSK              (((1U << GPIP_GPADC_DMA_EN_LEN) - 1) << GPIP_GPADC_DMA_EN_POS)\n#define GPIP_GPADC_DMA_EN_UMSK             (~(((1U << GPIP_GPADC_DMA_EN_LEN) - 1) << GPIP_GPADC_DMA_EN_POS))\n#define GPIP_GPADC_FIFO_CLR                GPIP_GPADC_FIFO_CLR\n#define GPIP_GPADC_FIFO_CLR_POS            (1U)\n#define GPIP_GPADC_FIFO_CLR_LEN            (1U)\n#define GPIP_GPADC_FIFO_CLR_MSK            (((1U << GPIP_GPADC_FIFO_CLR_LEN) - 1) << GPIP_GPADC_FIFO_CLR_POS)\n#define GPIP_GPADC_FIFO_CLR_UMSK           (~(((1U << GPIP_GPADC_FIFO_CLR_LEN) - 1) << GPIP_GPADC_FIFO_CLR_POS))\n#define GPIP_GPADC_FIFO_NE                 GPIP_GPADC_FIFO_NE\n#define GPIP_GPADC_FIFO_NE_POS             (2U)\n#define GPIP_GPADC_FIFO_NE_LEN             (1U)\n#define GPIP_GPADC_FIFO_NE_MSK             (((1U << GPIP_GPADC_FIFO_NE_LEN) - 1) << GPIP_GPADC_FIFO_NE_POS)\n#define GPIP_GPADC_FIFO_NE_UMSK            (~(((1U << GPIP_GPADC_FIFO_NE_LEN) - 1) << GPIP_GPADC_FIFO_NE_POS))\n#define GPIP_GPADC_FIFO_FULL               GPIP_GPADC_FIFO_FULL\n#define GPIP_GPADC_FIFO_FULL_POS           (3U)\n#define GPIP_GPADC_FIFO_FULL_LEN           (1U)\n#define GPIP_GPADC_FIFO_FULL_MSK           (((1U << GPIP_GPADC_FIFO_FULL_LEN) - 1) << GPIP_GPADC_FIFO_FULL_POS)\n#define GPIP_GPADC_FIFO_FULL_UMSK          (~(((1U << GPIP_GPADC_FIFO_FULL_LEN) - 1) << GPIP_GPADC_FIFO_FULL_POS))\n#define GPIP_GPADC_RDY                     GPIP_GPADC_RDY\n#define GPIP_GPADC_RDY_POS                 (4U)\n#define GPIP_GPADC_RDY_LEN                 (1U)\n#define GPIP_GPADC_RDY_MSK                 (((1U << GPIP_GPADC_RDY_LEN) - 1) << GPIP_GPADC_RDY_POS)\n#define GPIP_GPADC_RDY_UMSK                (~(((1U << GPIP_GPADC_RDY_LEN) - 1) << GPIP_GPADC_RDY_POS))\n#define GPIP_GPADC_FIFO_OVERRUN            GPIP_GPADC_FIFO_OVERRUN\n#define GPIP_GPADC_FIFO_OVERRUN_POS        (5U)\n#define GPIP_GPADC_FIFO_OVERRUN_LEN        (1U)\n#define GPIP_GPADC_FIFO_OVERRUN_MSK        (((1U << GPIP_GPADC_FIFO_OVERRUN_LEN) - 1) << GPIP_GPADC_FIFO_OVERRUN_POS)\n#define GPIP_GPADC_FIFO_OVERRUN_UMSK       (~(((1U << GPIP_GPADC_FIFO_OVERRUN_LEN) - 1) << GPIP_GPADC_FIFO_OVERRUN_POS))\n#define GPIP_GPADC_FIFO_UNDERRUN           GPIP_GPADC_FIFO_UNDERRUN\n#define GPIP_GPADC_FIFO_UNDERRUN_POS       (6U)\n#define GPIP_GPADC_FIFO_UNDERRUN_LEN       (1U)\n#define GPIP_GPADC_FIFO_UNDERRUN_MSK       (((1U << GPIP_GPADC_FIFO_UNDERRUN_LEN) - 1) << GPIP_GPADC_FIFO_UNDERRUN_POS)\n#define GPIP_GPADC_FIFO_UNDERRUN_UMSK      (~(((1U << GPIP_GPADC_FIFO_UNDERRUN_LEN) - 1) << GPIP_GPADC_FIFO_UNDERRUN_POS))\n#define GPIP_GPADC_FIFO_RDY                GPIP_GPADC_FIFO_RDY\n#define GPIP_GPADC_FIFO_RDY_POS            (7U)\n#define GPIP_GPADC_FIFO_RDY_LEN            (1U)\n#define GPIP_GPADC_FIFO_RDY_MSK            (((1U << GPIP_GPADC_FIFO_RDY_LEN) - 1) << GPIP_GPADC_FIFO_RDY_POS)\n#define GPIP_GPADC_FIFO_RDY_UMSK           (~(((1U << GPIP_GPADC_FIFO_RDY_LEN) - 1) << GPIP_GPADC_FIFO_RDY_POS))\n#define GPIP_GPADC_RDY_CLR                 GPIP_GPADC_RDY_CLR\n#define GPIP_GPADC_RDY_CLR_POS             (8U)\n#define GPIP_GPADC_RDY_CLR_LEN             (1U)\n#define GPIP_GPADC_RDY_CLR_MSK             (((1U << GPIP_GPADC_RDY_CLR_LEN) - 1) << GPIP_GPADC_RDY_CLR_POS)\n#define GPIP_GPADC_RDY_CLR_UMSK            (~(((1U << GPIP_GPADC_RDY_CLR_LEN) - 1) << GPIP_GPADC_RDY_CLR_POS))\n#define GPIP_GPADC_FIFO_OVERRUN_CLR        GPIP_GPADC_FIFO_OVERRUN_CLR\n#define GPIP_GPADC_FIFO_OVERRUN_CLR_POS    (9U)\n#define GPIP_GPADC_FIFO_OVERRUN_CLR_LEN    (1U)\n#define GPIP_GPADC_FIFO_OVERRUN_CLR_MSK    (((1U << GPIP_GPADC_FIFO_OVERRUN_CLR_LEN) - 1) << GPIP_GPADC_FIFO_OVERRUN_CLR_POS)\n#define GPIP_GPADC_FIFO_OVERRUN_CLR_UMSK   (~(((1U << GPIP_GPADC_FIFO_OVERRUN_CLR_LEN) - 1) << GPIP_GPADC_FIFO_OVERRUN_CLR_POS))\n#define GPIP_GPADC_FIFO_UNDERRUN_CLR       GPIP_GPADC_FIFO_UNDERRUN_CLR\n#define GPIP_GPADC_FIFO_UNDERRUN_CLR_POS   (10U)\n#define GPIP_GPADC_FIFO_UNDERRUN_CLR_LEN   (1U)\n#define GPIP_GPADC_FIFO_UNDERRUN_CLR_MSK   (((1U << GPIP_GPADC_FIFO_UNDERRUN_CLR_LEN) - 1) << GPIP_GPADC_FIFO_UNDERRUN_CLR_POS)\n#define GPIP_GPADC_FIFO_UNDERRUN_CLR_UMSK  (~(((1U << GPIP_GPADC_FIFO_UNDERRUN_CLR_LEN) - 1) << GPIP_GPADC_FIFO_UNDERRUN_CLR_POS))\n#define GPIP_GPADC_RDY_MASK                GPIP_GPADC_RDY_MASK\n#define GPIP_GPADC_RDY_MASK_POS            (12U)\n#define GPIP_GPADC_RDY_MASK_LEN            (1U)\n#define GPIP_GPADC_RDY_MASK_MSK            (((1U << GPIP_GPADC_RDY_MASK_LEN) - 1) << GPIP_GPADC_RDY_MASK_POS)\n#define GPIP_GPADC_RDY_MASK_UMSK           (~(((1U << GPIP_GPADC_RDY_MASK_LEN) - 1) << GPIP_GPADC_RDY_MASK_POS))\n#define GPIP_GPADC_FIFO_OVERRUN_MASK       GPIP_GPADC_FIFO_OVERRUN_MASK\n#define GPIP_GPADC_FIFO_OVERRUN_MASK_POS   (13U)\n#define GPIP_GPADC_FIFO_OVERRUN_MASK_LEN   (1U)\n#define GPIP_GPADC_FIFO_OVERRUN_MASK_MSK   (((1U << GPIP_GPADC_FIFO_OVERRUN_MASK_LEN) - 1) << GPIP_GPADC_FIFO_OVERRUN_MASK_POS)\n#define GPIP_GPADC_FIFO_OVERRUN_MASK_UMSK  (~(((1U << GPIP_GPADC_FIFO_OVERRUN_MASK_LEN) - 1) << GPIP_GPADC_FIFO_OVERRUN_MASK_POS))\n#define GPIP_GPADC_FIFO_UNDERRUN_MASK      GPIP_GPADC_FIFO_UNDERRUN_MASK\n#define GPIP_GPADC_FIFO_UNDERRUN_MASK_POS  (14U)\n#define GPIP_GPADC_FIFO_UNDERRUN_MASK_LEN  (1U)\n#define GPIP_GPADC_FIFO_UNDERRUN_MASK_MSK  (((1U << GPIP_GPADC_FIFO_UNDERRUN_MASK_LEN) - 1) << GPIP_GPADC_FIFO_UNDERRUN_MASK_POS)\n#define GPIP_GPADC_FIFO_UNDERRUN_MASK_UMSK (~(((1U << GPIP_GPADC_FIFO_UNDERRUN_MASK_LEN) - 1) << GPIP_GPADC_FIFO_UNDERRUN_MASK_POS))\n#define GPIP_GPADC_FIFO_RDY_MASK           GPIP_GPADC_FIFO_RDY_MASK\n#define GPIP_GPADC_FIFO_RDY_MASK_POS       (15U)\n#define GPIP_GPADC_FIFO_RDY_MASK_LEN       (1U)\n#define GPIP_GPADC_FIFO_RDY_MASK_MSK       (((1U << GPIP_GPADC_FIFO_RDY_MASK_LEN) - 1) << GPIP_GPADC_FIFO_RDY_MASK_POS)\n#define GPIP_GPADC_FIFO_RDY_MASK_UMSK      (~(((1U << GPIP_GPADC_FIFO_RDY_MASK_LEN) - 1) << GPIP_GPADC_FIFO_RDY_MASK_POS))\n#define GPIP_GPADC_FIFO_DATA_COUNT         GPIP_GPADC_FIFO_DATA_COUNT\n#define GPIP_GPADC_FIFO_DATA_COUNT_POS     (16U)\n#define GPIP_GPADC_FIFO_DATA_COUNT_LEN     (6U)\n#define GPIP_GPADC_FIFO_DATA_COUNT_MSK     (((1U << GPIP_GPADC_FIFO_DATA_COUNT_LEN) - 1) << GPIP_GPADC_FIFO_DATA_COUNT_POS)\n#define GPIP_GPADC_FIFO_DATA_COUNT_UMSK    (~(((1U << GPIP_GPADC_FIFO_DATA_COUNT_LEN) - 1) << GPIP_GPADC_FIFO_DATA_COUNT_POS))\n#define GPIP_GPADC_FIFO_THL                GPIP_GPADC_FIFO_THL\n#define GPIP_GPADC_FIFO_THL_POS            (22U)\n#define GPIP_GPADC_FIFO_THL_LEN            (2U)\n#define GPIP_GPADC_FIFO_THL_MSK            (((1U << GPIP_GPADC_FIFO_THL_LEN) - 1) << GPIP_GPADC_FIFO_THL_POS)\n#define GPIP_GPADC_FIFO_THL_UMSK           (~(((1U << GPIP_GPADC_FIFO_THL_LEN) - 1) << GPIP_GPADC_FIFO_THL_POS))\n\n/* 0x4 : gpadc_dma_rdata */\n#define GPIP_GPADC_DMA_RDATA_OFFSET (0x4)\n#define GPIP_GPADC_DMA_RDATA        GPIP_GPADC_DMA_RDATA\n#define GPIP_GPADC_DMA_RDATA_POS    (0U)\n#define GPIP_GPADC_DMA_RDATA_LEN    (26U)\n#define GPIP_GPADC_DMA_RDATA_MSK    (((1U << GPIP_GPADC_DMA_RDATA_LEN) - 1) << GPIP_GPADC_DMA_RDATA_POS)\n#define GPIP_GPADC_DMA_RDATA_UMSK   (~(((1U << GPIP_GPADC_DMA_RDATA_LEN) - 1) << GPIP_GPADC_DMA_RDATA_POS))\n\n/* 0x40 : gpdac_config */\n#define GPIP_GPDAC_CONFIG_OFFSET (0x40)\n#define GPIP_GPDAC_EN            GPIP_GPDAC_EN\n#define GPIP_GPDAC_EN_POS        (0U)\n#define GPIP_GPDAC_EN_LEN        (1U)\n#define GPIP_GPDAC_EN_MSK        (((1U << GPIP_GPDAC_EN_LEN) - 1) << GPIP_GPDAC_EN_POS)\n#define GPIP_GPDAC_EN_UMSK       (~(((1U << GPIP_GPDAC_EN_LEN) - 1) << GPIP_GPDAC_EN_POS))\n#define GPIP_GPDAC_EN2           GPIP_GPDAC_EN2\n#define GPIP_GPDAC_EN2_POS       (1U)\n#define GPIP_GPDAC_EN2_LEN       (1U)\n#define GPIP_GPDAC_EN2_MSK       (((1U << GPIP_GPDAC_EN2_LEN) - 1) << GPIP_GPDAC_EN2_POS)\n#define GPIP_GPDAC_EN2_UMSK      (~(((1U << GPIP_GPDAC_EN2_LEN) - 1) << GPIP_GPDAC_EN2_POS))\n#define GPIP_DSM_MODE            GPIP_DSM_MODE\n#define GPIP_DSM_MODE_POS        (4U)\n#define GPIP_DSM_MODE_LEN        (2U)\n#define GPIP_DSM_MODE_MSK        (((1U << GPIP_DSM_MODE_LEN) - 1) << GPIP_DSM_MODE_POS)\n#define GPIP_DSM_MODE_UMSK       (~(((1U << GPIP_DSM_MODE_LEN) - 1) << GPIP_DSM_MODE_POS))\n#define GPIP_GPDAC_MODE          GPIP_GPDAC_MODE\n#define GPIP_GPDAC_MODE_POS      (8U)\n#define GPIP_GPDAC_MODE_LEN      (3U)\n#define GPIP_GPDAC_MODE_MSK      (((1U << GPIP_GPDAC_MODE_LEN) - 1) << GPIP_GPDAC_MODE_POS)\n#define GPIP_GPDAC_MODE_UMSK     (~(((1U << GPIP_GPDAC_MODE_LEN) - 1) << GPIP_GPDAC_MODE_POS))\n#define GPIP_GPDAC_CH_A_SEL      GPIP_GPDAC_CH_A_SEL\n#define GPIP_GPDAC_CH_A_SEL_POS  (16U)\n#define GPIP_GPDAC_CH_A_SEL_LEN  (4U)\n#define GPIP_GPDAC_CH_A_SEL_MSK  (((1U << GPIP_GPDAC_CH_A_SEL_LEN) - 1) << GPIP_GPDAC_CH_A_SEL_POS)\n#define GPIP_GPDAC_CH_A_SEL_UMSK (~(((1U << GPIP_GPDAC_CH_A_SEL_LEN) - 1) << GPIP_GPDAC_CH_A_SEL_POS))\n#define GPIP_GPDAC_CH_B_SEL      GPIP_GPDAC_CH_B_SEL\n#define GPIP_GPDAC_CH_B_SEL_POS  (20U)\n#define GPIP_GPDAC_CH_B_SEL_LEN  (4U)\n#define GPIP_GPDAC_CH_B_SEL_MSK  (((1U << GPIP_GPDAC_CH_B_SEL_LEN) - 1) << GPIP_GPDAC_CH_B_SEL_POS)\n#define GPIP_GPDAC_CH_B_SEL_UMSK (~(((1U << GPIP_GPDAC_CH_B_SEL_LEN) - 1) << GPIP_GPDAC_CH_B_SEL_POS))\n\n/* 0x44 : gpdac_dma_config */\n#define GPIP_GPDAC_DMA_CONFIG_OFFSET (0x44)\n#define GPIP_GPDAC_DMA_TX_EN         GPIP_GPDAC_DMA_TX_EN\n#define GPIP_GPDAC_DMA_TX_EN_POS     (0U)\n#define GPIP_GPDAC_DMA_TX_EN_LEN     (1U)\n#define GPIP_GPDAC_DMA_TX_EN_MSK     (((1U << GPIP_GPDAC_DMA_TX_EN_LEN) - 1) << GPIP_GPDAC_DMA_TX_EN_POS)\n#define GPIP_GPDAC_DMA_TX_EN_UMSK    (~(((1U << GPIP_GPDAC_DMA_TX_EN_LEN) - 1) << GPIP_GPDAC_DMA_TX_EN_POS))\n#define GPIP_GPDAC_DMA_FORMAT        GPIP_GPDAC_DMA_FORMAT\n#define GPIP_GPDAC_DMA_FORMAT_POS    (4U)\n#define GPIP_GPDAC_DMA_FORMAT_LEN    (2U)\n#define GPIP_GPDAC_DMA_FORMAT_MSK    (((1U << GPIP_GPDAC_DMA_FORMAT_LEN) - 1) << GPIP_GPDAC_DMA_FORMAT_POS)\n#define GPIP_GPDAC_DMA_FORMAT_UMSK   (~(((1U << GPIP_GPDAC_DMA_FORMAT_LEN) - 1) << GPIP_GPDAC_DMA_FORMAT_POS))\n\n/* 0x48 : gpdac_dma_wdata */\n#define GPIP_GPDAC_DMA_WDATA_OFFSET (0x48)\n#define GPIP_GPDAC_DMA_WDATA        GPIP_GPDAC_DMA_WDATA\n#define GPIP_GPDAC_DMA_WDATA_POS    (0U)\n#define GPIP_GPDAC_DMA_WDATA_LEN    (32U)\n#define GPIP_GPDAC_DMA_WDATA_MSK    (((1U << GPIP_GPDAC_DMA_WDATA_LEN) - 1) << GPIP_GPDAC_DMA_WDATA_POS)\n#define GPIP_GPDAC_DMA_WDATA_UMSK   (~(((1U << GPIP_GPDAC_DMA_WDATA_LEN) - 1) << GPIP_GPDAC_DMA_WDATA_POS))\n\n/* 0x4C : gpdac_tx_fifo_status */\n#define GPIP_GPDAC_TX_FIFO_STATUS_OFFSET (0x4C)\n#define GPIP_TX_FIFO_EMPTY               GPIP_TX_FIFO_EMPTY\n#define GPIP_TX_FIFO_EMPTY_POS           (0U)\n#define GPIP_TX_FIFO_EMPTY_LEN           (1U)\n#define GPIP_TX_FIFO_EMPTY_MSK           (((1U << GPIP_TX_FIFO_EMPTY_LEN) - 1) << GPIP_TX_FIFO_EMPTY_POS)\n#define GPIP_TX_FIFO_EMPTY_UMSK          (~(((1U << GPIP_TX_FIFO_EMPTY_LEN) - 1) << GPIP_TX_FIFO_EMPTY_POS))\n#define GPIP_TX_FIFO_FULL                GPIP_TX_FIFO_FULL\n#define GPIP_TX_FIFO_FULL_POS            (1U)\n#define GPIP_TX_FIFO_FULL_LEN            (1U)\n#define GPIP_TX_FIFO_FULL_MSK            (((1U << GPIP_TX_FIFO_FULL_LEN) - 1) << GPIP_TX_FIFO_FULL_POS)\n#define GPIP_TX_FIFO_FULL_UMSK           (~(((1U << GPIP_TX_FIFO_FULL_LEN) - 1) << GPIP_TX_FIFO_FULL_POS))\n#define GPIP_TX_CS                       GPIP_TX_CS\n#define GPIP_TX_CS_POS                   (2U)\n#define GPIP_TX_CS_LEN                   (2U)\n#define GPIP_TX_CS_MSK                   (((1U << GPIP_TX_CS_LEN) - 1) << GPIP_TX_CS_POS)\n#define GPIP_TX_CS_UMSK                  (~(((1U << GPIP_TX_CS_LEN) - 1) << GPIP_TX_CS_POS))\n#define GPIP_TXFIFORDPTR                 GPIP_TXFIFORDPTR\n#define GPIP_TXFIFORDPTR_POS             (4U)\n#define GPIP_TXFIFORDPTR_LEN             (3U)\n#define GPIP_TXFIFORDPTR_MSK             (((1U << GPIP_TXFIFORDPTR_LEN) - 1) << GPIP_TXFIFORDPTR_POS)\n#define GPIP_TXFIFORDPTR_UMSK            (~(((1U << GPIP_TXFIFORDPTR_LEN) - 1) << GPIP_TXFIFORDPTR_POS))\n#define GPIP_TXFIFOWRPTR                 GPIP_TXFIFOWRPTR\n#define GPIP_TXFIFOWRPTR_POS             (8U)\n#define GPIP_TXFIFOWRPTR_LEN             (2U)\n#define GPIP_TXFIFOWRPTR_MSK             (((1U << GPIP_TXFIFOWRPTR_LEN) - 1) << GPIP_TXFIFOWRPTR_POS)\n#define GPIP_TXFIFOWRPTR_UMSK            (~(((1U << GPIP_TXFIFOWRPTR_LEN) - 1) << GPIP_TXFIFOWRPTR_POS))\n\nstruct gpip_reg {\n    /* 0x0 : gpadc_config */\n    union {\n        struct\n        {\n            uint32_t gpadc_dma_en             : 1; /* [    0],        r/w,        0x0 */\n            uint32_t gpadc_fifo_clr           : 1; /* [    1],        w1c,        0x0 */\n            uint32_t gpadc_fifo_ne            : 1; /* [    2],          r,        0x0 */\n            uint32_t gpadc_fifo_full          : 1; /* [    3],          r,        0x0 */\n            uint32_t gpadc_rdy                : 1; /* [    4],          r,        0x0 */\n            uint32_t gpadc_fifo_overrun       : 1; /* [    5],          r,        0x0 */\n            uint32_t gpadc_fifo_underrun      : 1; /* [    6],          r,        0x0 */\n            uint32_t gpadc_fifo_rdy           : 1; /* [    7],          r,        0x0 */\n            uint32_t gpadc_rdy_clr            : 1; /* [    8],        w1c,        0x0 */\n            uint32_t gpadc_fifo_overrun_clr   : 1; /* [    9],        w1c,        0x0 */\n            uint32_t gpadc_fifo_underrun_clr  : 1; /* [   10],        w1c,        0x0 */\n            uint32_t reserved_11              : 1; /* [   11],       rsvd,        0x0 */\n            uint32_t gpadc_rdy_mask           : 1; /* [   12],        r/w,        0x0 */\n            uint32_t gpadc_fifo_overrun_mask  : 1; /* [   13],        r/w,        0x0 */\n            uint32_t gpadc_fifo_underrun_mask : 1; /* [   14],        r/w,        0x0 */\n            uint32_t gpadc_fifo_rdy_mask      : 1; /* [   15],        r/w,        0x1 */\n            uint32_t gpadc_fifo_data_count    : 6; /* [21:16],          r,        0x0 */\n            uint32_t gpadc_fifo_thl           : 2; /* [23:22],        r/w,        0x0 */\n            uint32_t rsvd_31_24               : 8; /* [31:24],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpadc_config;\n\n    /* 0x4 : gpadc_dma_rdata */\n    union {\n        struct\n        {\n            uint32_t gpadc_dma_rdata : 26; /* [25: 0],          r,        0x0 */\n            uint32_t rsvd_31_26      : 6;  /* [31:26],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpadc_dma_rdata;\n\n    /* 0x8  reserved */\n    uint8_t RESERVED0x8[56];\n\n    /* 0x40 : gpdac_config */\n    union {\n        struct\n        {\n            uint32_t gpdac_en       : 1; /* [    0],        r/w,        0x0 */\n            uint32_t gpdac_en2      : 1; /* [    1],        r/w,        0x0 */\n            uint32_t reserved_2_3   : 2; /* [ 3: 2],       rsvd,        0x0 */\n            uint32_t dsm_mode       : 2; /* [ 5: 4],        r/w,        0x0 */\n            uint32_t reserved_6_7   : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t gpdac_mode     : 3; /* [10: 8],        r/w,        0x0 */\n            uint32_t reserved_11_15 : 5; /* [15:11],       rsvd,        0x0 */\n            uint32_t gpdac_ch_a_sel : 4; /* [19:16],        r/w,        0x0 */\n            uint32_t gpdac_ch_b_sel : 4; /* [23:20],        r/w,        0x0 */\n            uint32_t rsvd_31_24     : 8; /* [31:24],       rsvd,        0xd */\n        } BF;\n        uint32_t WORD;\n    } gpdac_config;\n\n    /* 0x44 : gpdac_dma_config */\n    union {\n        struct\n        {\n            uint32_t gpdac_dma_tx_en  : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1_3     : 3;  /* [ 3: 1],       rsvd,        0x0 */\n            uint32_t gpdac_dma_format : 2;  /* [ 5: 4],        r/w,        0x0 */\n            uint32_t reserved_6_31    : 26; /* [31: 6],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpdac_dma_config;\n\n    /* 0x48 : gpdac_dma_wdata */\n    union {\n        struct\n        {\n            uint32_t gpdac_dma_wdata : 32; /* [31: 0],          w,          x */\n        } BF;\n        uint32_t WORD;\n    } gpdac_dma_wdata;\n\n    /* 0x4C : gpdac_tx_fifo_status */\n    union {\n        struct\n        {\n            uint32_t tx_fifo_empty  : 1;  /* [    0],          r,        0x0 */\n            uint32_t tx_fifo_full   : 1;  /* [    1],          r,        0x0 */\n            uint32_t tx_cs          : 2;  /* [ 3: 2],          r,        0x0 */\n            uint32_t TxFifoRdPtr    : 3;  /* [ 6: 4],          r,        0x4 */\n            uint32_t reserved_7     : 1;  /* [    7],       rsvd,        0x0 */\n            uint32_t TxFifoWrPtr    : 2;  /* [ 9: 8],          r,        0x0 */\n            uint32_t reserved_10_31 : 22; /* [31:10],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } gpdac_tx_fifo_status;\n};\n\ntypedef volatile struct gpip_reg gpip_reg_t;\n\n#endif /* __GPIP_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/hbn_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    hbn_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __HBN_REG_H__\n#define __HBN_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : HBN_CTL */\n#define HBN_CTL_OFFSET                (0x0)\n#define HBN_RTC_CTL                   HBN_RTC_CTL\n#define HBN_RTC_CTL_POS               (0U)\n#define HBN_RTC_CTL_LEN               (7U)\n#define HBN_RTC_CTL_MSK               (((1U << HBN_RTC_CTL_LEN) - 1) << HBN_RTC_CTL_POS)\n#define HBN_RTC_CTL_UMSK              (~(((1U << HBN_RTC_CTL_LEN) - 1) << HBN_RTC_CTL_POS))\n#define HBN_MODE                      HBN_MODE\n#define HBN_MODE_POS                  (7U)\n#define HBN_MODE_LEN                  (1U)\n#define HBN_MODE_MSK                  (((1U << HBN_MODE_LEN) - 1) << HBN_MODE_POS)\n#define HBN_MODE_UMSK                 (~(((1U << HBN_MODE_LEN) - 1) << HBN_MODE_POS))\n#define HBN_TRAP_MODE                 HBN_TRAP_MODE\n#define HBN_TRAP_MODE_POS             (8U)\n#define HBN_TRAP_MODE_LEN             (1U)\n#define HBN_TRAP_MODE_MSK             (((1U << HBN_TRAP_MODE_LEN) - 1) << HBN_TRAP_MODE_POS)\n#define HBN_TRAP_MODE_UMSK            (~(((1U << HBN_TRAP_MODE_LEN) - 1) << HBN_TRAP_MODE_POS))\n#define HBN_PWRDN_HBN_CORE            HBN_PWRDN_HBN_CORE\n#define HBN_PWRDN_HBN_CORE_POS        (9U)\n#define HBN_PWRDN_HBN_CORE_LEN        (1U)\n#define HBN_PWRDN_HBN_CORE_MSK        (((1U << HBN_PWRDN_HBN_CORE_LEN) - 1) << HBN_PWRDN_HBN_CORE_POS)\n#define HBN_PWRDN_HBN_CORE_UMSK       (~(((1U << HBN_PWRDN_HBN_CORE_LEN) - 1) << HBN_PWRDN_HBN_CORE_POS))\n#define HBN_PWRDN_HBN_RTC             HBN_PWRDN_HBN_RTC\n#define HBN_PWRDN_HBN_RTC_POS         (11U)\n#define HBN_PWRDN_HBN_RTC_LEN         (1U)\n#define HBN_PWRDN_HBN_RTC_MSK         (((1U << HBN_PWRDN_HBN_RTC_LEN) - 1) << HBN_PWRDN_HBN_RTC_POS)\n#define HBN_PWRDN_HBN_RTC_UMSK        (~(((1U << HBN_PWRDN_HBN_RTC_LEN) - 1) << HBN_PWRDN_HBN_RTC_POS))\n#define HBN_SW_RST                    HBN_SW_RST\n#define HBN_SW_RST_POS                (12U)\n#define HBN_SW_RST_LEN                (1U)\n#define HBN_SW_RST_MSK                (((1U << HBN_SW_RST_LEN) - 1) << HBN_SW_RST_POS)\n#define HBN_SW_RST_UMSK               (~(((1U << HBN_SW_RST_LEN) - 1) << HBN_SW_RST_POS))\n#define HBN_DIS_PWR_OFF_LDO11         HBN_DIS_PWR_OFF_LDO11\n#define HBN_DIS_PWR_OFF_LDO11_POS     (13U)\n#define HBN_DIS_PWR_OFF_LDO11_LEN     (1U)\n#define HBN_DIS_PWR_OFF_LDO11_MSK     (((1U << HBN_DIS_PWR_OFF_LDO11_LEN) - 1) << HBN_DIS_PWR_OFF_LDO11_POS)\n#define HBN_DIS_PWR_OFF_LDO11_UMSK    (~(((1U << HBN_DIS_PWR_OFF_LDO11_LEN) - 1) << HBN_DIS_PWR_OFF_LDO11_POS))\n#define HBN_DIS_PWR_OFF_LDO11_RT      HBN_DIS_PWR_OFF_LDO11_RT\n#define HBN_DIS_PWR_OFF_LDO11_RT_POS  (14U)\n#define HBN_DIS_PWR_OFF_LDO11_RT_LEN  (1U)\n#define HBN_DIS_PWR_OFF_LDO11_RT_MSK  (((1U << HBN_DIS_PWR_OFF_LDO11_RT_LEN) - 1) << HBN_DIS_PWR_OFF_LDO11_RT_POS)\n#define HBN_DIS_PWR_OFF_LDO11_RT_UMSK (~(((1U << HBN_DIS_PWR_OFF_LDO11_RT_LEN) - 1) << HBN_DIS_PWR_OFF_LDO11_RT_POS))\n#define HBN_LDO11_RT_VOUT_SEL         HBN_LDO11_RT_VOUT_SEL\n#define HBN_LDO11_RT_VOUT_SEL_POS     (15U)\n#define HBN_LDO11_RT_VOUT_SEL_LEN     (4U)\n#define HBN_LDO11_RT_VOUT_SEL_MSK     (((1U << HBN_LDO11_RT_VOUT_SEL_LEN) - 1) << HBN_LDO11_RT_VOUT_SEL_POS)\n#define HBN_LDO11_RT_VOUT_SEL_UMSK    (~(((1U << HBN_LDO11_RT_VOUT_SEL_LEN) - 1) << HBN_LDO11_RT_VOUT_SEL_POS))\n#define HBN_LDO11_AON_VOUT_SEL        HBN_LDO11_AON_VOUT_SEL\n#define HBN_LDO11_AON_VOUT_SEL_POS    (19U)\n#define HBN_LDO11_AON_VOUT_SEL_LEN    (4U)\n#define HBN_LDO11_AON_VOUT_SEL_MSK    (((1U << HBN_LDO11_AON_VOUT_SEL_LEN) - 1) << HBN_LDO11_AON_VOUT_SEL_POS)\n#define HBN_LDO11_AON_VOUT_SEL_UMSK   (~(((1U << HBN_LDO11_AON_VOUT_SEL_LEN) - 1) << HBN_LDO11_AON_VOUT_SEL_POS))\n#define HBN_PU_DCDC18_AON             HBN_PU_DCDC18_AON\n#define HBN_PU_DCDC18_AON_POS         (23U)\n#define HBN_PU_DCDC18_AON_LEN         (1U)\n#define HBN_PU_DCDC18_AON_MSK         (((1U << HBN_PU_DCDC18_AON_LEN) - 1) << HBN_PU_DCDC18_AON_POS)\n#define HBN_PU_DCDC18_AON_UMSK        (~(((1U << HBN_PU_DCDC18_AON_LEN) - 1) << HBN_PU_DCDC18_AON_POS))\n#define HBN_RTC_DLY_OPTION            HBN_RTC_DLY_OPTION\n#define HBN_RTC_DLY_OPTION_POS        (24U)\n#define HBN_RTC_DLY_OPTION_LEN        (1U)\n#define HBN_RTC_DLY_OPTION_MSK        (((1U << HBN_RTC_DLY_OPTION_LEN) - 1) << HBN_RTC_DLY_OPTION_POS)\n#define HBN_RTC_DLY_OPTION_UMSK       (~(((1U << HBN_RTC_DLY_OPTION_LEN) - 1) << HBN_RTC_DLY_OPTION_POS))\n#define HBN_PWR_ON_OPTION             HBN_PWR_ON_OPTION\n#define HBN_PWR_ON_OPTION_POS         (25U)\n#define HBN_PWR_ON_OPTION_LEN         (1U)\n#define HBN_PWR_ON_OPTION_MSK         (((1U << HBN_PWR_ON_OPTION_LEN) - 1) << HBN_PWR_ON_OPTION_POS)\n#define HBN_PWR_ON_OPTION_UMSK        (~(((1U << HBN_PWR_ON_OPTION_LEN) - 1) << HBN_PWR_ON_OPTION_POS))\n#define HBN_SRAM_SLP_OPTION           HBN_SRAM_SLP_OPTION\n#define HBN_SRAM_SLP_OPTION_POS       (26U)\n#define HBN_SRAM_SLP_OPTION_LEN       (1U)\n#define HBN_SRAM_SLP_OPTION_MSK       (((1U << HBN_SRAM_SLP_OPTION_LEN) - 1) << HBN_SRAM_SLP_OPTION_POS)\n#define HBN_SRAM_SLP_OPTION_UMSK      (~(((1U << HBN_SRAM_SLP_OPTION_LEN) - 1) << HBN_SRAM_SLP_OPTION_POS))\n#define HBN_SRAM_SLP                  HBN_SRAM_SLP\n#define HBN_SRAM_SLP_POS              (27U)\n#define HBN_SRAM_SLP_LEN              (1U)\n#define HBN_SRAM_SLP_MSK              (((1U << HBN_SRAM_SLP_LEN) - 1) << HBN_SRAM_SLP_POS)\n#define HBN_SRAM_SLP_UMSK             (~(((1U << HBN_SRAM_SLP_LEN) - 1) << HBN_SRAM_SLP_POS))\n#define HBN_STATE                     HBN_STATE\n#define HBN_STATE_POS                 (28U)\n#define HBN_STATE_LEN                 (4U)\n#define HBN_STATE_MSK                 (((1U << HBN_STATE_LEN) - 1) << HBN_STATE_POS)\n#define HBN_STATE_UMSK                (~(((1U << HBN_STATE_LEN) - 1) << HBN_STATE_POS))\n\n/* 0x4 : HBN_TIME_L */\n#define HBN_TIME_L_OFFSET (0x4)\n#define HBN_TIME_L        HBN_TIME_L\n#define HBN_TIME_L_POS    (0U)\n#define HBN_TIME_L_LEN    (32U)\n#define HBN_TIME_L_MSK    (((1U << HBN_TIME_L_LEN) - 1) << HBN_TIME_L_POS)\n#define HBN_TIME_L_UMSK   (~(((1U << HBN_TIME_L_LEN) - 1) << HBN_TIME_L_POS))\n\n/* 0x8 : HBN_TIME_H */\n#define HBN_TIME_H_OFFSET (0x8)\n#define HBN_TIME_H        HBN_TIME_H\n#define HBN_TIME_H_POS    (0U)\n#define HBN_TIME_H_LEN    (8U)\n#define HBN_TIME_H_MSK    (((1U << HBN_TIME_H_LEN) - 1) << HBN_TIME_H_POS)\n#define HBN_TIME_H_UMSK   (~(((1U << HBN_TIME_H_LEN) - 1) << HBN_TIME_H_POS))\n\n/* 0xC : RTC_TIME_L */\n#define HBN_RTC_TIME_L_OFFSET     (0xC)\n#define HBN_RTC_TIME_LATCH_L      HBN_RTC_TIME_LATCH_L\n#define HBN_RTC_TIME_LATCH_L_POS  (0U)\n#define HBN_RTC_TIME_LATCH_L_LEN  (32U)\n#define HBN_RTC_TIME_LATCH_L_MSK  (((1U << HBN_RTC_TIME_LATCH_L_LEN) - 1) << HBN_RTC_TIME_LATCH_L_POS)\n#define HBN_RTC_TIME_LATCH_L_UMSK (~(((1U << HBN_RTC_TIME_LATCH_L_LEN) - 1) << HBN_RTC_TIME_LATCH_L_POS))\n\n/* 0x10 : RTC_TIME_H */\n#define HBN_RTC_TIME_H_OFFSET     (0x10)\n#define HBN_RTC_TIME_LATCH_H      HBN_RTC_TIME_LATCH_H\n#define HBN_RTC_TIME_LATCH_H_POS  (0U)\n#define HBN_RTC_TIME_LATCH_H_LEN  (8U)\n#define HBN_RTC_TIME_LATCH_H_MSK  (((1U << HBN_RTC_TIME_LATCH_H_LEN) - 1) << HBN_RTC_TIME_LATCH_H_POS)\n#define HBN_RTC_TIME_LATCH_H_UMSK (~(((1U << HBN_RTC_TIME_LATCH_H_LEN) - 1) << HBN_RTC_TIME_LATCH_H_POS))\n#define HBN_RTC_TIME_LATCH        HBN_RTC_TIME_LATCH\n#define HBN_RTC_TIME_LATCH_POS    (31U)\n#define HBN_RTC_TIME_LATCH_LEN    (1U)\n#define HBN_RTC_TIME_LATCH_MSK    (((1U << HBN_RTC_TIME_LATCH_LEN) - 1) << HBN_RTC_TIME_LATCH_POS)\n#define HBN_RTC_TIME_LATCH_UMSK   (~(((1U << HBN_RTC_TIME_LATCH_LEN) - 1) << HBN_RTC_TIME_LATCH_POS))\n\n/* 0x14 : HBN_IRQ_MODE */\n#define HBN_IRQ_MODE_OFFSET         (0x14)\n#define HBN_PIN_WAKEUP_MODE         HBN_PIN_WAKEUP_MODE\n#define HBN_PIN_WAKEUP_MODE_POS     (0U)\n#define HBN_PIN_WAKEUP_MODE_LEN     (3U)\n#define HBN_PIN_WAKEUP_MODE_MSK     (((1U << HBN_PIN_WAKEUP_MODE_LEN) - 1) << HBN_PIN_WAKEUP_MODE_POS)\n#define HBN_PIN_WAKEUP_MODE_UMSK    (~(((1U << HBN_PIN_WAKEUP_MODE_LEN) - 1) << HBN_PIN_WAKEUP_MODE_POS))\n#define HBN_PIN_WAKEUP_MASK         HBN_PIN_WAKEUP_MASK\n#define HBN_PIN_WAKEUP_MASK_POS     (3U)\n#define HBN_PIN_WAKEUP_MASK_LEN     (5U)\n#define HBN_PIN_WAKEUP_MASK_MSK     (((1U << HBN_PIN_WAKEUP_MASK_LEN) - 1) << HBN_PIN_WAKEUP_MASK_POS)\n#define HBN_PIN_WAKEUP_MASK_UMSK    (~(((1U << HBN_PIN_WAKEUP_MASK_LEN) - 1) << HBN_PIN_WAKEUP_MASK_POS))\n#define HBN_REG_AON_PAD_IE_SMT      HBN_REG_AON_PAD_IE_SMT\n#define HBN_REG_AON_PAD_IE_SMT_POS  (8U)\n#define HBN_REG_AON_PAD_IE_SMT_LEN  (5U)\n#define HBN_REG_AON_PAD_IE_SMT_MSK  (((1U << HBN_REG_AON_PAD_IE_SMT_LEN) - 1) << HBN_REG_AON_PAD_IE_SMT_POS)\n#define HBN_REG_AON_PAD_IE_SMT_UMSK (~(((1U << HBN_REG_AON_PAD_IE_SMT_LEN) - 1) << HBN_REG_AON_PAD_IE_SMT_POS))\n#define HBN_REG_EN_HW_PU_PD         HBN_REG_EN_HW_PU_PD\n#define HBN_REG_EN_HW_PU_PD_POS     (16U)\n#define HBN_REG_EN_HW_PU_PD_LEN     (1U)\n#define HBN_REG_EN_HW_PU_PD_MSK     (((1U << HBN_REG_EN_HW_PU_PD_LEN) - 1) << HBN_REG_EN_HW_PU_PD_POS)\n#define HBN_REG_EN_HW_PU_PD_UMSK    (~(((1U << HBN_REG_EN_HW_PU_PD_LEN) - 1) << HBN_REG_EN_HW_PU_PD_POS))\n#define HBN_IRQ_BOR_EN              HBN_IRQ_BOR_EN\n#define HBN_IRQ_BOR_EN_POS          (18U)\n#define HBN_IRQ_BOR_EN_LEN          (1U)\n#define HBN_IRQ_BOR_EN_MSK          (((1U << HBN_IRQ_BOR_EN_LEN) - 1) << HBN_IRQ_BOR_EN_POS)\n#define HBN_IRQ_BOR_EN_UMSK         (~(((1U << HBN_IRQ_BOR_EN_LEN) - 1) << HBN_IRQ_BOR_EN_POS))\n#define HBN_IRQ_ACOMP0_EN           HBN_IRQ_ACOMP0_EN\n#define HBN_IRQ_ACOMP0_EN_POS       (20U)\n#define HBN_IRQ_ACOMP0_EN_LEN       (2U)\n#define HBN_IRQ_ACOMP0_EN_MSK       (((1U << HBN_IRQ_ACOMP0_EN_LEN) - 1) << HBN_IRQ_ACOMP0_EN_POS)\n#define HBN_IRQ_ACOMP0_EN_UMSK      (~(((1U << HBN_IRQ_ACOMP0_EN_LEN) - 1) << HBN_IRQ_ACOMP0_EN_POS))\n#define HBN_IRQ_ACOMP1_EN           HBN_IRQ_ACOMP1_EN\n#define HBN_IRQ_ACOMP1_EN_POS       (22U)\n#define HBN_IRQ_ACOMP1_EN_LEN       (2U)\n#define HBN_IRQ_ACOMP1_EN_MSK       (((1U << HBN_IRQ_ACOMP1_EN_LEN) - 1) << HBN_IRQ_ACOMP1_EN_POS)\n#define HBN_IRQ_ACOMP1_EN_UMSK      (~(((1U << HBN_IRQ_ACOMP1_EN_LEN) - 1) << HBN_IRQ_ACOMP1_EN_POS))\n#define HBN_PIN_WAKEUP_SEL          HBN_PIN_WAKEUP_SEL\n#define HBN_PIN_WAKEUP_SEL_POS      (24U)\n#define HBN_PIN_WAKEUP_SEL_LEN      (3U)\n#define HBN_PIN_WAKEUP_SEL_MSK      (((1U << HBN_PIN_WAKEUP_SEL_LEN) - 1) << HBN_PIN_WAKEUP_SEL_POS)\n#define HBN_PIN_WAKEUP_SEL_UMSK     (~(((1U << HBN_PIN_WAKEUP_SEL_LEN) - 1) << HBN_PIN_WAKEUP_SEL_POS))\n#define HBN_PIN_WAKEUP_EN           HBN_PIN_WAKEUP_EN\n#define HBN_PIN_WAKEUP_EN_POS       (27U)\n#define HBN_PIN_WAKEUP_EN_LEN       (1U)\n#define HBN_PIN_WAKEUP_EN_MSK       (((1U << HBN_PIN_WAKEUP_EN_LEN) - 1) << HBN_PIN_WAKEUP_EN_POS)\n#define HBN_PIN_WAKEUP_EN_UMSK      (~(((1U << HBN_PIN_WAKEUP_EN_LEN) - 1) << HBN_PIN_WAKEUP_EN_POS))\n\n/* 0x18 : HBN_IRQ_STAT */\n#define HBN_IRQ_STAT_OFFSET (0x18)\n#define HBN_IRQ_STAT        HBN_IRQ_STAT\n#define HBN_IRQ_STAT_POS    (0U)\n#define HBN_IRQ_STAT_LEN    (32U)\n#define HBN_IRQ_STAT_MSK    (((1U << HBN_IRQ_STAT_LEN) - 1) << HBN_IRQ_STAT_POS)\n#define HBN_IRQ_STAT_UMSK   (~(((1U << HBN_IRQ_STAT_LEN) - 1) << HBN_IRQ_STAT_POS))\n\n/* 0x1C : HBN_IRQ_CLR */\n#define HBN_IRQ_CLR_OFFSET (0x1C)\n#define HBN_IRQ_CLR        HBN_IRQ_CLR\n#define HBN_IRQ_CLR_POS    (0U)\n#define HBN_IRQ_CLR_LEN    (32U)\n#define HBN_IRQ_CLR_MSK    (((1U << HBN_IRQ_CLR_LEN) - 1) << HBN_IRQ_CLR_POS)\n#define HBN_IRQ_CLR_UMSK   (~(((1U << HBN_IRQ_CLR_LEN) - 1) << HBN_IRQ_CLR_POS))\n\n/* 0x20 : HBN_PIR_CFG */\n#define HBN_PIR_CFG_OFFSET    (0x20)\n#define HBN_PIR_HPF_SEL       HBN_PIR_HPF_SEL\n#define HBN_PIR_HPF_SEL_POS   (0U)\n#define HBN_PIR_HPF_SEL_LEN   (2U)\n#define HBN_PIR_HPF_SEL_MSK   (((1U << HBN_PIR_HPF_SEL_LEN) - 1) << HBN_PIR_HPF_SEL_POS)\n#define HBN_PIR_HPF_SEL_UMSK  (~(((1U << HBN_PIR_HPF_SEL_LEN) - 1) << HBN_PIR_HPF_SEL_POS))\n#define HBN_PIR_LPF_SEL       HBN_PIR_LPF_SEL\n#define HBN_PIR_LPF_SEL_POS   (2U)\n#define HBN_PIR_LPF_SEL_LEN   (1U)\n#define HBN_PIR_LPF_SEL_MSK   (((1U << HBN_PIR_LPF_SEL_LEN) - 1) << HBN_PIR_LPF_SEL_POS)\n#define HBN_PIR_LPF_SEL_UMSK  (~(((1U << HBN_PIR_LPF_SEL_LEN) - 1) << HBN_PIR_LPF_SEL_POS))\n#define HBN_PIR_DIS           HBN_PIR_DIS\n#define HBN_PIR_DIS_POS       (4U)\n#define HBN_PIR_DIS_LEN       (2U)\n#define HBN_PIR_DIS_MSK       (((1U << HBN_PIR_DIS_LEN) - 1) << HBN_PIR_DIS_POS)\n#define HBN_PIR_DIS_UMSK      (~(((1U << HBN_PIR_DIS_LEN) - 1) << HBN_PIR_DIS_POS))\n#define HBN_PIR_EN            HBN_PIR_EN\n#define HBN_PIR_EN_POS        (7U)\n#define HBN_PIR_EN_LEN        (1U)\n#define HBN_PIR_EN_MSK        (((1U << HBN_PIR_EN_LEN) - 1) << HBN_PIR_EN_POS)\n#define HBN_PIR_EN_UMSK       (~(((1U << HBN_PIR_EN_LEN) - 1) << HBN_PIR_EN_POS))\n#define HBN_GPADC_CGEN        HBN_GPADC_CGEN\n#define HBN_GPADC_CGEN_POS    (8U)\n#define HBN_GPADC_CGEN_LEN    (1U)\n#define HBN_GPADC_CGEN_MSK    (((1U << HBN_GPADC_CGEN_LEN) - 1) << HBN_GPADC_CGEN_POS)\n#define HBN_GPADC_CGEN_UMSK   (~(((1U << HBN_GPADC_CGEN_LEN) - 1) << HBN_GPADC_CGEN_POS))\n#define HBN_GPADC_NOSYNC      HBN_GPADC_NOSYNC\n#define HBN_GPADC_NOSYNC_POS  (9U)\n#define HBN_GPADC_NOSYNC_LEN  (1U)\n#define HBN_GPADC_NOSYNC_MSK  (((1U << HBN_GPADC_NOSYNC_LEN) - 1) << HBN_GPADC_NOSYNC_POS)\n#define HBN_GPADC_NOSYNC_UMSK (~(((1U << HBN_GPADC_NOSYNC_LEN) - 1) << HBN_GPADC_NOSYNC_POS))\n\n/* 0x24 : HBN_PIR_VTH */\n#define HBN_PIR_VTH_OFFSET (0x24)\n#define HBN_PIR_VTH        HBN_PIR_VTH\n#define HBN_PIR_VTH_POS    (0U)\n#define HBN_PIR_VTH_LEN    (14U)\n#define HBN_PIR_VTH_MSK    (((1U << HBN_PIR_VTH_LEN) - 1) << HBN_PIR_VTH_POS)\n#define HBN_PIR_VTH_UMSK   (~(((1U << HBN_PIR_VTH_LEN) - 1) << HBN_PIR_VTH_POS))\n\n/* 0x28 : HBN_PIR_INTERVAL */\n#define HBN_PIR_INTERVAL_OFFSET (0x28)\n#define HBN_PIR_INTERVAL        HBN_PIR_INTERVAL\n#define HBN_PIR_INTERVAL_POS    (0U)\n#define HBN_PIR_INTERVAL_LEN    (12U)\n#define HBN_PIR_INTERVAL_MSK    (((1U << HBN_PIR_INTERVAL_LEN) - 1) << HBN_PIR_INTERVAL_POS)\n#define HBN_PIR_INTERVAL_UMSK   (~(((1U << HBN_PIR_INTERVAL_LEN) - 1) << HBN_PIR_INTERVAL_POS))\n\n/* 0x2C : HBN_MISC */\n#define HBN_MISC_OFFSET             (0x2C)\n#define HBN_BOR_SEL                 HBN_BOR_SEL\n#define HBN_BOR_SEL_POS             (0U)\n#define HBN_BOR_SEL_LEN             (1U)\n#define HBN_BOR_SEL_MSK             (((1U << HBN_BOR_SEL_LEN) - 1) << HBN_BOR_SEL_POS)\n#define HBN_BOR_SEL_UMSK            (~(((1U << HBN_BOR_SEL_LEN) - 1) << HBN_BOR_SEL_POS))\n#define HBN_BOR_VTH                 HBN_BOR_VTH\n#define HBN_BOR_VTH_POS             (1U)\n#define HBN_BOR_VTH_LEN             (1U)\n#define HBN_BOR_VTH_MSK             (((1U << HBN_BOR_VTH_LEN) - 1) << HBN_BOR_VTH_POS)\n#define HBN_BOR_VTH_UMSK            (~(((1U << HBN_BOR_VTH_LEN) - 1) << HBN_BOR_VTH_POS))\n#define HBN_PU_BOR                  HBN_PU_BOR\n#define HBN_PU_BOR_POS              (2U)\n#define HBN_PU_BOR_LEN              (1U)\n#define HBN_PU_BOR_MSK              (((1U << HBN_PU_BOR_LEN) - 1) << HBN_PU_BOR_POS)\n#define HBN_PU_BOR_UMSK             (~(((1U << HBN_PU_BOR_LEN) - 1) << HBN_PU_BOR_POS))\n#define HBN_R_BOR_OUT               HBN_R_BOR_OUT\n#define HBN_R_BOR_OUT_POS           (3U)\n#define HBN_R_BOR_OUT_LEN           (1U)\n#define HBN_R_BOR_OUT_MSK           (((1U << HBN_R_BOR_OUT_LEN) - 1) << HBN_R_BOR_OUT_POS)\n#define HBN_R_BOR_OUT_UMSK          (~(((1U << HBN_R_BOR_OUT_LEN) - 1) << HBN_R_BOR_OUT_POS))\n#define HBN_FLASH_PULLUP_AON        HBN_FLASH_PULLUP_AON\n#define HBN_FLASH_PULLUP_AON_POS    (16U)\n#define HBN_FLASH_PULLUP_AON_LEN    (6U)\n#define HBN_FLASH_PULLUP_AON_MSK    (((1U << HBN_FLASH_PULLUP_AON_LEN) - 1) << HBN_FLASH_PULLUP_AON_POS)\n#define HBN_FLASH_PULLUP_AON_UMSK   (~(((1U << HBN_FLASH_PULLUP_AON_LEN) - 1) << HBN_FLASH_PULLUP_AON_POS))\n#define HBN_FLASH_PULLDOWN_AON      HBN_FLASH_PULLDOWN_AON\n#define HBN_FLASH_PULLDOWN_AON_POS  (24U)\n#define HBN_FLASH_PULLDOWN_AON_LEN  (6U)\n#define HBN_FLASH_PULLDOWN_AON_MSK  (((1U << HBN_FLASH_PULLDOWN_AON_LEN) - 1) << HBN_FLASH_PULLDOWN_AON_POS)\n#define HBN_FLASH_PULLDOWN_AON_UMSK (~(((1U << HBN_FLASH_PULLDOWN_AON_LEN) - 1) << HBN_FLASH_PULLDOWN_AON_POS))\n\n/* 0x30 : HBN_GLB */\n#define HBN_GLB_OFFSET                    (0x30)\n#define HBN_ROOT_CLK_SEL                  HBN_ROOT_CLK_SEL\n#define HBN_ROOT_CLK_SEL_POS              (0U)\n#define HBN_ROOT_CLK_SEL_LEN              (2U)\n#define HBN_ROOT_CLK_SEL_MSK              (((1U << HBN_ROOT_CLK_SEL_LEN) - 1) << HBN_ROOT_CLK_SEL_POS)\n#define HBN_ROOT_CLK_SEL_UMSK             (~(((1U << HBN_ROOT_CLK_SEL_LEN) - 1) << HBN_ROOT_CLK_SEL_POS))\n#define HBN_UART_CLK_SEL                  HBN_UART_CLK_SEL\n#define HBN_UART_CLK_SEL_POS              (2U)\n#define HBN_UART_CLK_SEL_LEN              (1U)\n#define HBN_UART_CLK_SEL_MSK              (((1U << HBN_UART_CLK_SEL_LEN) - 1) << HBN_UART_CLK_SEL_POS)\n#define HBN_UART_CLK_SEL_UMSK             (~(((1U << HBN_UART_CLK_SEL_LEN) - 1) << HBN_UART_CLK_SEL_POS))\n#define HBN_F32K_SEL                      HBN_F32K_SEL\n#define HBN_F32K_SEL_POS                  (3U)\n#define HBN_F32K_SEL_LEN                  (2U)\n#define HBN_F32K_SEL_MSK                  (((1U << HBN_F32K_SEL_LEN) - 1) << HBN_F32K_SEL_POS)\n#define HBN_F32K_SEL_UMSK                 (~(((1U << HBN_F32K_SEL_LEN) - 1) << HBN_F32K_SEL_POS))\n#define HBN_PU_RC32K                      HBN_PU_RC32K\n#define HBN_PU_RC32K_POS                  (5U)\n#define HBN_PU_RC32K_LEN                  (1U)\n#define HBN_PU_RC32K_MSK                  (((1U << HBN_PU_RC32K_LEN) - 1) << HBN_PU_RC32K_POS)\n#define HBN_PU_RC32K_UMSK                 (~(((1U << HBN_PU_RC32K_LEN) - 1) << HBN_PU_RC32K_POS))\n#define HBN_LDO11_RT_ILOAD_SEL            HBN_LDO11_RT_ILOAD_SEL\n#define HBN_LDO11_RT_ILOAD_SEL_POS        (6U)\n#define HBN_LDO11_RT_ILOAD_SEL_LEN        (2U)\n#define HBN_LDO11_RT_ILOAD_SEL_MSK        (((1U << HBN_LDO11_RT_ILOAD_SEL_LEN) - 1) << HBN_LDO11_RT_ILOAD_SEL_POS)\n#define HBN_LDO11_RT_ILOAD_SEL_UMSK       (~(((1U << HBN_LDO11_RT_ILOAD_SEL_LEN) - 1) << HBN_LDO11_RT_ILOAD_SEL_POS))\n#define HBN_RESET_EVENT                   HBN_RESET_EVENT\n#define HBN_RESET_EVENT_POS               (8U)\n#define HBN_RESET_EVENT_LEN               (5U)\n#define HBN_RESET_EVENT_MSK               (((1U << HBN_RESET_EVENT_LEN) - 1) << HBN_RESET_EVENT_POS)\n#define HBN_RESET_EVENT_UMSK              (~(((1U << HBN_RESET_EVENT_LEN) - 1) << HBN_RESET_EVENT_POS))\n#define HBN_CLEAR_RESET_EVENT             HBN_CLEAR_RESET_EVENT\n#define HBN_CLEAR_RESET_EVENT_POS         (13U)\n#define HBN_CLEAR_RESET_EVENT_LEN         (1U)\n#define HBN_CLEAR_RESET_EVENT_MSK         (((1U << HBN_CLEAR_RESET_EVENT_LEN) - 1) << HBN_CLEAR_RESET_EVENT_POS)\n#define HBN_CLEAR_RESET_EVENT_UMSK        (~(((1U << HBN_CLEAR_RESET_EVENT_LEN) - 1) << HBN_CLEAR_RESET_EVENT_POS))\n#define HBN_SW_LDO11SOC_VOUT_SEL_AON      HBN_SW_LDO11SOC_VOUT_SEL_AON\n#define HBN_SW_LDO11SOC_VOUT_SEL_AON_POS  (16U)\n#define HBN_SW_LDO11SOC_VOUT_SEL_AON_LEN  (4U)\n#define HBN_SW_LDO11SOC_VOUT_SEL_AON_MSK  (((1U << HBN_SW_LDO11SOC_VOUT_SEL_AON_LEN) - 1) << HBN_SW_LDO11SOC_VOUT_SEL_AON_POS)\n#define HBN_SW_LDO11SOC_VOUT_SEL_AON_UMSK (~(((1U << HBN_SW_LDO11SOC_VOUT_SEL_AON_LEN) - 1) << HBN_SW_LDO11SOC_VOUT_SEL_AON_POS))\n#define HBN_SW_LDO11_RT_VOUT_SEL          HBN_SW_LDO11_RT_VOUT_SEL\n#define HBN_SW_LDO11_RT_VOUT_SEL_POS      (24U)\n#define HBN_SW_LDO11_RT_VOUT_SEL_LEN      (4U)\n#define HBN_SW_LDO11_RT_VOUT_SEL_MSK      (((1U << HBN_SW_LDO11_RT_VOUT_SEL_LEN) - 1) << HBN_SW_LDO11_RT_VOUT_SEL_POS)\n#define HBN_SW_LDO11_RT_VOUT_SEL_UMSK     (~(((1U << HBN_SW_LDO11_RT_VOUT_SEL_LEN) - 1) << HBN_SW_LDO11_RT_VOUT_SEL_POS))\n#define HBN_SW_LDO11_AON_VOUT_SEL         HBN_SW_LDO11_AON_VOUT_SEL\n#define HBN_SW_LDO11_AON_VOUT_SEL_POS     (28U)\n#define HBN_SW_LDO11_AON_VOUT_SEL_LEN     (4U)\n#define HBN_SW_LDO11_AON_VOUT_SEL_MSK     (((1U << HBN_SW_LDO11_AON_VOUT_SEL_LEN) - 1) << HBN_SW_LDO11_AON_VOUT_SEL_POS)\n#define HBN_SW_LDO11_AON_VOUT_SEL_UMSK    (~(((1U << HBN_SW_LDO11_AON_VOUT_SEL_LEN) - 1) << HBN_SW_LDO11_AON_VOUT_SEL_POS))\n\n/* 0x34 : HBN_SRAM */\n#define HBN_SRAM_OFFSET      (0x34)\n#define HBN_RETRAM_EMA       HBN_RETRAM_EMA\n#define HBN_RETRAM_EMA_POS   (0U)\n#define HBN_RETRAM_EMA_LEN   (3U)\n#define HBN_RETRAM_EMA_MSK   (((1U << HBN_RETRAM_EMA_LEN) - 1) << HBN_RETRAM_EMA_POS)\n#define HBN_RETRAM_EMA_UMSK  (~(((1U << HBN_RETRAM_EMA_LEN) - 1) << HBN_RETRAM_EMA_POS))\n#define HBN_RETRAM_EMAW      HBN_RETRAM_EMAW\n#define HBN_RETRAM_EMAW_POS  (3U)\n#define HBN_RETRAM_EMAW_LEN  (2U)\n#define HBN_RETRAM_EMAW_MSK  (((1U << HBN_RETRAM_EMAW_LEN) - 1) << HBN_RETRAM_EMAW_POS)\n#define HBN_RETRAM_EMAW_UMSK (~(((1U << HBN_RETRAM_EMAW_LEN) - 1) << HBN_RETRAM_EMAW_POS))\n#define HBN_RETRAM_RET       HBN_RETRAM_RET\n#define HBN_RETRAM_RET_POS   (6U)\n#define HBN_RETRAM_RET_LEN   (1U)\n#define HBN_RETRAM_RET_MSK   (((1U << HBN_RETRAM_RET_LEN) - 1) << HBN_RETRAM_RET_POS)\n#define HBN_RETRAM_RET_UMSK  (~(((1U << HBN_RETRAM_RET_LEN) - 1) << HBN_RETRAM_RET_POS))\n#define HBN_RETRAM_SLP       HBN_RETRAM_SLP\n#define HBN_RETRAM_SLP_POS   (7U)\n#define HBN_RETRAM_SLP_LEN   (1U)\n#define HBN_RETRAM_SLP_MSK   (((1U << HBN_RETRAM_SLP_LEN) - 1) << HBN_RETRAM_SLP_POS)\n#define HBN_RETRAM_SLP_UMSK  (~(((1U << HBN_RETRAM_SLP_LEN) - 1) << HBN_RETRAM_SLP_POS))\n\n/* 0x100 : HBN_RSV0 */\n#define HBN_RSV0_OFFSET (0x100)\n#define HBN_RSV0        HBN_RSV0\n#define HBN_RSV0_POS    (0U)\n#define HBN_RSV0_LEN    (32U)\n#define HBN_RSV0_MSK    (((1U << HBN_RSV0_LEN) - 1) << HBN_RSV0_POS)\n#define HBN_RSV0_UMSK   (~(((1U << HBN_RSV0_LEN) - 1) << HBN_RSV0_POS))\n\n/* 0x104 : HBN_RSV1 */\n#define HBN_RSV1_OFFSET (0x104)\n#define HBN_RSV1        HBN_RSV1\n#define HBN_RSV1_POS    (0U)\n#define HBN_RSV1_LEN    (32U)\n#define HBN_RSV1_MSK    (((1U << HBN_RSV1_LEN) - 1) << HBN_RSV1_POS)\n#define HBN_RSV1_UMSK   (~(((1U << HBN_RSV1_LEN) - 1) << HBN_RSV1_POS))\n\n/* 0x108 : HBN_RSV2 */\n#define HBN_RSV2_OFFSET (0x108)\n#define HBN_RSV2        HBN_RSV2\n#define HBN_RSV2_POS    (0U)\n#define HBN_RSV2_LEN    (32U)\n#define HBN_RSV2_MSK    (((1U << HBN_RSV2_LEN) - 1) << HBN_RSV2_POS)\n#define HBN_RSV2_UMSK   (~(((1U << HBN_RSV2_LEN) - 1) << HBN_RSV2_POS))\n\n/* 0x10C : HBN_RSV3 */\n#define HBN_RSV3_OFFSET (0x10C)\n#define HBN_RSV3        HBN_RSV3\n#define HBN_RSV3_POS    (0U)\n#define HBN_RSV3_LEN    (32U)\n#define HBN_RSV3_MSK    (((1U << HBN_RSV3_LEN) - 1) << HBN_RSV3_POS)\n#define HBN_RSV3_UMSK   (~(((1U << HBN_RSV3_LEN) - 1) << HBN_RSV3_POS))\n\n/* 0x200 : rc32k_ctrl0 */\n#define HBN_RC32K_CTRL0_OFFSET         (0x200)\n#define HBN_RC32K_CAL_DONE             HBN_RC32K_CAL_DONE\n#define HBN_RC32K_CAL_DONE_POS         (0U)\n#define HBN_RC32K_CAL_DONE_LEN         (1U)\n#define HBN_RC32K_CAL_DONE_MSK         (((1U << HBN_RC32K_CAL_DONE_LEN) - 1) << HBN_RC32K_CAL_DONE_POS)\n#define HBN_RC32K_CAL_DONE_UMSK        (~(((1U << HBN_RC32K_CAL_DONE_LEN) - 1) << HBN_RC32K_CAL_DONE_POS))\n#define HBN_RC32K_RDY                  HBN_RC32K_RDY\n#define HBN_RC32K_RDY_POS              (1U)\n#define HBN_RC32K_RDY_LEN              (1U)\n#define HBN_RC32K_RDY_MSK              (((1U << HBN_RC32K_RDY_LEN) - 1) << HBN_RC32K_RDY_POS)\n#define HBN_RC32K_RDY_UMSK             (~(((1U << HBN_RC32K_RDY_LEN) - 1) << HBN_RC32K_RDY_POS))\n#define HBN_RC32K_CAL_INPROGRESS       HBN_RC32K_CAL_INPROGRESS\n#define HBN_RC32K_CAL_INPROGRESS_POS   (2U)\n#define HBN_RC32K_CAL_INPROGRESS_LEN   (1U)\n#define HBN_RC32K_CAL_INPROGRESS_MSK   (((1U << HBN_RC32K_CAL_INPROGRESS_LEN) - 1) << HBN_RC32K_CAL_INPROGRESS_POS)\n#define HBN_RC32K_CAL_INPROGRESS_UMSK  (~(((1U << HBN_RC32K_CAL_INPROGRESS_LEN) - 1) << HBN_RC32K_CAL_INPROGRESS_POS))\n#define HBN_RC32K_CAL_DIV              HBN_RC32K_CAL_DIV\n#define HBN_RC32K_CAL_DIV_POS          (3U)\n#define HBN_RC32K_CAL_DIV_LEN          (2U)\n#define HBN_RC32K_CAL_DIV_MSK          (((1U << HBN_RC32K_CAL_DIV_LEN) - 1) << HBN_RC32K_CAL_DIV_POS)\n#define HBN_RC32K_CAL_DIV_UMSK         (~(((1U << HBN_RC32K_CAL_DIV_LEN) - 1) << HBN_RC32K_CAL_DIV_POS))\n#define HBN_RC32K_CAL_PRECHARGE        HBN_RC32K_CAL_PRECHARGE\n#define HBN_RC32K_CAL_PRECHARGE_POS    (5U)\n#define HBN_RC32K_CAL_PRECHARGE_LEN    (1U)\n#define HBN_RC32K_CAL_PRECHARGE_MSK    (((1U << HBN_RC32K_CAL_PRECHARGE_LEN) - 1) << HBN_RC32K_CAL_PRECHARGE_POS)\n#define HBN_RC32K_CAL_PRECHARGE_UMSK   (~(((1U << HBN_RC32K_CAL_PRECHARGE_LEN) - 1) << HBN_RC32K_CAL_PRECHARGE_POS))\n#define HBN_RC32K_DIG_CODE_FR_CAL      HBN_RC32K_DIG_CODE_FR_CAL\n#define HBN_RC32K_DIG_CODE_FR_CAL_POS  (6U)\n#define HBN_RC32K_DIG_CODE_FR_CAL_LEN  (10U)\n#define HBN_RC32K_DIG_CODE_FR_CAL_MSK  (((1U << HBN_RC32K_DIG_CODE_FR_CAL_LEN) - 1) << HBN_RC32K_DIG_CODE_FR_CAL_POS)\n#define HBN_RC32K_DIG_CODE_FR_CAL_UMSK (~(((1U << HBN_RC32K_DIG_CODE_FR_CAL_LEN) - 1) << HBN_RC32K_DIG_CODE_FR_CAL_POS))\n#define HBN_RC32K_VREF_DLY             HBN_RC32K_VREF_DLY\n#define HBN_RC32K_VREF_DLY_POS         (16U)\n#define HBN_RC32K_VREF_DLY_LEN         (2U)\n#define HBN_RC32K_VREF_DLY_MSK         (((1U << HBN_RC32K_VREF_DLY_LEN) - 1) << HBN_RC32K_VREF_DLY_POS)\n#define HBN_RC32K_VREF_DLY_UMSK        (~(((1U << HBN_RC32K_VREF_DLY_LEN) - 1) << HBN_RC32K_VREF_DLY_POS))\n#define HBN_RC32K_ALLOW_CAL            HBN_RC32K_ALLOW_CAL\n#define HBN_RC32K_ALLOW_CAL_POS        (18U)\n#define HBN_RC32K_ALLOW_CAL_LEN        (1U)\n#define HBN_RC32K_ALLOW_CAL_MSK        (((1U << HBN_RC32K_ALLOW_CAL_LEN) - 1) << HBN_RC32K_ALLOW_CAL_POS)\n#define HBN_RC32K_ALLOW_CAL_UMSK       (~(((1U << HBN_RC32K_ALLOW_CAL_LEN) - 1) << HBN_RC32K_ALLOW_CAL_POS))\n#define HBN_RC32K_EXT_CODE_EN          HBN_RC32K_EXT_CODE_EN\n#define HBN_RC32K_EXT_CODE_EN_POS      (19U)\n#define HBN_RC32K_EXT_CODE_EN_LEN      (1U)\n#define HBN_RC32K_EXT_CODE_EN_MSK      (((1U << HBN_RC32K_EXT_CODE_EN_LEN) - 1) << HBN_RC32K_EXT_CODE_EN_POS)\n#define HBN_RC32K_EXT_CODE_EN_UMSK     (~(((1U << HBN_RC32K_EXT_CODE_EN_LEN) - 1) << HBN_RC32K_EXT_CODE_EN_POS))\n#define HBN_RC32K_CAL_EN               HBN_RC32K_CAL_EN\n#define HBN_RC32K_CAL_EN_POS           (20U)\n#define HBN_RC32K_CAL_EN_LEN           (1U)\n#define HBN_RC32K_CAL_EN_MSK           (((1U << HBN_RC32K_CAL_EN_LEN) - 1) << HBN_RC32K_CAL_EN_POS)\n#define HBN_RC32K_CAL_EN_UMSK          (~(((1U << HBN_RC32K_CAL_EN_LEN) - 1) << HBN_RC32K_CAL_EN_POS))\n#define HBN_RC32K_CODE_FR_EXT          HBN_RC32K_CODE_FR_EXT\n#define HBN_RC32K_CODE_FR_EXT_POS      (22U)\n#define HBN_RC32K_CODE_FR_EXT_LEN      (10U)\n#define HBN_RC32K_CODE_FR_EXT_MSK      (((1U << HBN_RC32K_CODE_FR_EXT_LEN) - 1) << HBN_RC32K_CODE_FR_EXT_POS)\n#define HBN_RC32K_CODE_FR_EXT_UMSK     (~(((1U << HBN_RC32K_CODE_FR_EXT_LEN) - 1) << HBN_RC32K_CODE_FR_EXT_POS))\n\n/* 0x204 : xtal32k */\n#define HBN_XTAL32K_OFFSET            (0x204)\n#define HBN_XTAL32K_HIZ_EN            HBN_XTAL32K_HIZ_EN\n#define HBN_XTAL32K_HIZ_EN_POS        (0U)\n#define HBN_XTAL32K_HIZ_EN_LEN        (1U)\n#define HBN_XTAL32K_HIZ_EN_MSK        (((1U << HBN_XTAL32K_HIZ_EN_LEN) - 1) << HBN_XTAL32K_HIZ_EN_POS)\n#define HBN_XTAL32K_HIZ_EN_UMSK       (~(((1U << HBN_XTAL32K_HIZ_EN_LEN) - 1) << HBN_XTAL32K_HIZ_EN_POS))\n#define HBN_XTAL32K_LOWV_EN           HBN_XTAL32K_LOWV_EN\n#define HBN_XTAL32K_LOWV_EN_POS       (1U)\n#define HBN_XTAL32K_LOWV_EN_LEN       (1U)\n#define HBN_XTAL32K_LOWV_EN_MSK       (((1U << HBN_XTAL32K_LOWV_EN_LEN) - 1) << HBN_XTAL32K_LOWV_EN_POS)\n#define HBN_XTAL32K_LOWV_EN_UMSK      (~(((1U << HBN_XTAL32K_LOWV_EN_LEN) - 1) << HBN_XTAL32K_LOWV_EN_POS))\n#define HBN_XTAL32K_EXT_SEL           HBN_XTAL32K_EXT_SEL\n#define HBN_XTAL32K_EXT_SEL_POS       (2U)\n#define HBN_XTAL32K_EXT_SEL_LEN       (1U)\n#define HBN_XTAL32K_EXT_SEL_MSK       (((1U << HBN_XTAL32K_EXT_SEL_LEN) - 1) << HBN_XTAL32K_EXT_SEL_POS)\n#define HBN_XTAL32K_EXT_SEL_UMSK      (~(((1U << HBN_XTAL32K_EXT_SEL_LEN) - 1) << HBN_XTAL32K_EXT_SEL_POS))\n#define HBN_XTAL32K_AMP_CTRL          HBN_XTAL32K_AMP_CTRL\n#define HBN_XTAL32K_AMP_CTRL_POS      (3U)\n#define HBN_XTAL32K_AMP_CTRL_LEN      (2U)\n#define HBN_XTAL32K_AMP_CTRL_MSK      (((1U << HBN_XTAL32K_AMP_CTRL_LEN) - 1) << HBN_XTAL32K_AMP_CTRL_POS)\n#define HBN_XTAL32K_AMP_CTRL_UMSK     (~(((1U << HBN_XTAL32K_AMP_CTRL_LEN) - 1) << HBN_XTAL32K_AMP_CTRL_POS))\n#define HBN_XTAL32K_REG               HBN_XTAL32K_REG\n#define HBN_XTAL32K_REG_POS           (5U)\n#define HBN_XTAL32K_REG_LEN           (2U)\n#define HBN_XTAL32K_REG_MSK           (((1U << HBN_XTAL32K_REG_LEN) - 1) << HBN_XTAL32K_REG_POS)\n#define HBN_XTAL32K_REG_UMSK          (~(((1U << HBN_XTAL32K_REG_LEN) - 1) << HBN_XTAL32K_REG_POS))\n#define HBN_XTAL32K_OUTBUF_STRE       HBN_XTAL32K_OUTBUF_STRE\n#define HBN_XTAL32K_OUTBUF_STRE_POS   (7U)\n#define HBN_XTAL32K_OUTBUF_STRE_LEN   (1U)\n#define HBN_XTAL32K_OUTBUF_STRE_MSK   (((1U << HBN_XTAL32K_OUTBUF_STRE_LEN) - 1) << HBN_XTAL32K_OUTBUF_STRE_POS)\n#define HBN_XTAL32K_OUTBUF_STRE_UMSK  (~(((1U << HBN_XTAL32K_OUTBUF_STRE_LEN) - 1) << HBN_XTAL32K_OUTBUF_STRE_POS))\n#define HBN_XTAL32K_OTF_SHORT         HBN_XTAL32K_OTF_SHORT\n#define HBN_XTAL32K_OTF_SHORT_POS     (8U)\n#define HBN_XTAL32K_OTF_SHORT_LEN     (1U)\n#define HBN_XTAL32K_OTF_SHORT_MSK     (((1U << HBN_XTAL32K_OTF_SHORT_LEN) - 1) << HBN_XTAL32K_OTF_SHORT_POS)\n#define HBN_XTAL32K_OTF_SHORT_UMSK    (~(((1U << HBN_XTAL32K_OTF_SHORT_LEN) - 1) << HBN_XTAL32K_OTF_SHORT_POS))\n#define HBN_XTAL32K_INV_STRE          HBN_XTAL32K_INV_STRE\n#define HBN_XTAL32K_INV_STRE_POS      (9U)\n#define HBN_XTAL32K_INV_STRE_LEN      (2U)\n#define HBN_XTAL32K_INV_STRE_MSK      (((1U << HBN_XTAL32K_INV_STRE_LEN) - 1) << HBN_XTAL32K_INV_STRE_POS)\n#define HBN_XTAL32K_INV_STRE_UMSK     (~(((1U << HBN_XTAL32K_INV_STRE_LEN) - 1) << HBN_XTAL32K_INV_STRE_POS))\n#define HBN_XTAL32K_CAPBANK           HBN_XTAL32K_CAPBANK\n#define HBN_XTAL32K_CAPBANK_POS       (11U)\n#define HBN_XTAL32K_CAPBANK_LEN       (6U)\n#define HBN_XTAL32K_CAPBANK_MSK       (((1U << HBN_XTAL32K_CAPBANK_LEN) - 1) << HBN_XTAL32K_CAPBANK_POS)\n#define HBN_XTAL32K_CAPBANK_UMSK      (~(((1U << HBN_XTAL32K_CAPBANK_LEN) - 1) << HBN_XTAL32K_CAPBANK_POS))\n#define HBN_XTAL32K_AC_CAP_SHORT      HBN_XTAL32K_AC_CAP_SHORT\n#define HBN_XTAL32K_AC_CAP_SHORT_POS  (17U)\n#define HBN_XTAL32K_AC_CAP_SHORT_LEN  (1U)\n#define HBN_XTAL32K_AC_CAP_SHORT_MSK  (((1U << HBN_XTAL32K_AC_CAP_SHORT_LEN) - 1) << HBN_XTAL32K_AC_CAP_SHORT_POS)\n#define HBN_XTAL32K_AC_CAP_SHORT_UMSK (~(((1U << HBN_XTAL32K_AC_CAP_SHORT_LEN) - 1) << HBN_XTAL32K_AC_CAP_SHORT_POS))\n#define HBN_PU_XTAL32K_BUF            HBN_PU_XTAL32K_BUF\n#define HBN_PU_XTAL32K_BUF_POS        (18U)\n#define HBN_PU_XTAL32K_BUF_LEN        (1U)\n#define HBN_PU_XTAL32K_BUF_MSK        (((1U << HBN_PU_XTAL32K_BUF_LEN) - 1) << HBN_PU_XTAL32K_BUF_POS)\n#define HBN_PU_XTAL32K_BUF_UMSK       (~(((1U << HBN_PU_XTAL32K_BUF_LEN) - 1) << HBN_PU_XTAL32K_BUF_POS))\n#define HBN_PU_XTAL32K                HBN_PU_XTAL32K\n#define HBN_PU_XTAL32K_POS            (19U)\n#define HBN_PU_XTAL32K_LEN            (1U)\n#define HBN_PU_XTAL32K_MSK            (((1U << HBN_PU_XTAL32K_LEN) - 1) << HBN_PU_XTAL32K_POS)\n#define HBN_PU_XTAL32K_UMSK           (~(((1U << HBN_PU_XTAL32K_LEN) - 1) << HBN_PU_XTAL32K_POS))\n\nstruct hbn_reg {\n    /* 0x0 : HBN_CTL */\n    union {\n        struct\n        {\n            uint32_t rtc_ctl                  : 7; /* [ 6: 0],        r/w,        0x0 */\n            uint32_t hbn_mode                 : 1; /* [    7],          w,        0x0 */\n            uint32_t trap_mode                : 1; /* [    8],          r,        0x0 */\n            uint32_t pwrdn_hbn_core           : 1; /* [    9],        r/w,        0x0 */\n            uint32_t reserved_10              : 1; /* [   10],       rsvd,        0x0 */\n            uint32_t pwrdn_hbn_rtc            : 1; /* [   11],        r/w,        0x0 */\n            uint32_t sw_rst                   : 1; /* [   12],        r/w,        0x0 */\n            uint32_t hbn_dis_pwr_off_ldo11    : 1; /* [   13],        r/w,        0x0 */\n            uint32_t hbn_dis_pwr_off_ldo11_rt : 1; /* [   14],        r/w,        0x0 */\n            uint32_t hbn_ldo11_rt_vout_sel    : 4; /* [18:15],        r/w,        0xa */\n            uint32_t hbn_ldo11_aon_vout_sel   : 4; /* [22:19],        r/w,        0xa */\n            uint32_t pu_dcdc18_aon            : 1; /* [   23],        r/w,        0x1 */\n            uint32_t rtc_dly_option           : 1; /* [   24],        r/w,        0x0 */\n            uint32_t pwr_on_option            : 1; /* [   25],        r/w,        0x0 */\n            uint32_t sram_slp_option          : 1; /* [   26],        r/w,        0x0 */\n            uint32_t sram_slp                 : 1; /* [   27],          r,        0x0 */\n            uint32_t hbn_state                : 4; /* [31:28],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } HBN_CTL;\n\n    /* 0x4 : HBN_TIME_L */\n    union {\n        struct\n        {\n            uint32_t hbn_time_l : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } HBN_TIME_L;\n\n    /* 0x8 : HBN_TIME_H */\n    union {\n        struct\n        {\n            uint32_t hbn_time_h    : 8;  /* [ 7: 0],        r/w,        0x0 */\n            uint32_t reserved_8_31 : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } HBN_TIME_H;\n\n    /* 0xC : RTC_TIME_L */\n    union {\n        struct\n        {\n            uint32_t rtc_time_latch_l : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } RTC_TIME_L;\n\n    /* 0x10 : RTC_TIME_H */\n    union {\n        struct\n        {\n            uint32_t rtc_time_latch_h : 8;  /* [ 7: 0],          r,        0x0 */\n            uint32_t reserved_8_30    : 23; /* [30: 8],       rsvd,        0x0 */\n            uint32_t rtc_time_latch   : 1;  /* [   31],          w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } RTC_TIME_H;\n\n    /* 0x14 : HBN_IRQ_MODE */\n    union {\n        struct\n        {\n            uint32_t hbn_pin_wakeup_mode : 3; /* [ 2: 0],        r/w,        0x5 */\n            uint32_t hbn_pin_wakeup_mask : 5; /* [ 7: 3],        r/w,        0x0 */\n            uint32_t reg_aon_pad_ie_smt  : 5; /* [12: 8],        r/w,       0x1f */\n            uint32_t reserved_13_15      : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_en_hw_pu_pd     : 1; /* [   16],        r/w,        0x1 */\n            uint32_t reserved_17         : 1; /* [   17],       rsvd,        0x0 */\n            uint32_t irq_bor_en          : 1; /* [   18],        r/w,        0x0 */\n            uint32_t reserved_19         : 1; /* [   19],       rsvd,        0x0 */\n            uint32_t irq_acomp0_en       : 2; /* [21:20],        r/w,        0x0 */\n            uint32_t irq_acomp1_en       : 2; /* [23:22],        r/w,        0x0 */\n            uint32_t pin_wakeup_sel      : 3; /* [26:24],        r/w,        0x3 */\n            uint32_t pin_wakeup_en       : 1; /* [   27],        r/w,        0x0 */\n            uint32_t reserved_28_31      : 4; /* [31:28],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } HBN_IRQ_MODE;\n\n    /* 0x18 : HBN_IRQ_STAT */\n    union {\n        struct\n        {\n            uint32_t irq_stat : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } HBN_IRQ_STAT;\n\n    /* 0x1C : HBN_IRQ_CLR */\n    union {\n        struct\n        {\n            uint32_t irq_clr : 32; /* [31: 0],          w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } HBN_IRQ_CLR;\n\n    /* 0x20 : HBN_PIR_CFG */\n    union {\n        struct\n        {\n            uint32_t pir_hpf_sel    : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t pir_lpf_sel    : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t reserved_3     : 1;  /* [    3],       rsvd,        0x0 */\n            uint32_t pir_dis        : 2;  /* [ 5: 4],        r/w,        0x0 */\n            uint32_t reserved_6     : 1;  /* [    6],       rsvd,        0x0 */\n            uint32_t pir_en         : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t gpadc_cgen     : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t gpadc_nosync   : 1;  /* [    9],        r/w,        0x0 */\n            uint32_t reserved_10_31 : 22; /* [31:10],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } HBN_PIR_CFG;\n\n    /* 0x24 : HBN_PIR_VTH */\n    union {\n        struct\n        {\n            uint32_t pir_vth        : 14; /* [13: 0],        r/w,      0x3ff */\n            uint32_t reserved_14_31 : 18; /* [31:14],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } HBN_PIR_VTH;\n\n    /* 0x28 : HBN_PIR_INTERVAL */\n    union {\n        struct\n        {\n            uint32_t pir_interval   : 12; /* [11: 0],        r/w,      0xa3d */\n            uint32_t reserved_12_31 : 20; /* [31:12],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } HBN_PIR_INTERVAL;\n\n    /* 0x2C : HBN_MISC */\n    union {\n        struct\n        {\n            uint32_t bor_sel                : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t bor_vth                : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t pu_bor                 : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t r_bor_out              : 1;  /* [    3],          r,        0x0 */\n            uint32_t reserved_4_15          : 12; /* [15: 4],       rsvd,        0x0 */\n            uint32_t hbn_flash_pullup_aon   : 6;  /* [21:16],        r/w,        0x0 */\n            uint32_t reserved_22_23         : 2;  /* [23:22],       rsvd,        0x0 */\n            uint32_t hbn_flash_pulldown_aon : 6;  /* [29:24],        r/w,        0x0 */\n            uint32_t reserved_30_31         : 2;  /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } HBN_MISC;\n\n    /* 0x30 : HBN_GLB */\n    union {\n        struct\n        {\n            uint32_t hbn_root_clk_sel         : 2; /* [ 1: 0],        r/w,        0x0 */\n            uint32_t hbn_uart_clk_sel         : 1; /* [    2],        r/w,        0x0 */\n            uint32_t hbn_f32k_sel             : 2; /* [ 4: 3],        r/w,        0x0 */\n            uint32_t hbn_pu_rc32k             : 1; /* [    5],        r/w,        0x1 */\n            uint32_t ldo11_rt_iload_sel       : 2; /* [ 7: 6],        r/w,        0x1 */\n            uint32_t hbn_reset_event          : 5; /* [12: 8],          r,        0x0 */\n            uint32_t hbn_clear_reset_event    : 1; /* [   13],        r/w,        0x0 */\n            uint32_t reserved_14_15           : 2; /* [15:14],       rsvd,        0x0 */\n            uint32_t sw_ldo11soc_vout_sel_aon : 4; /* [19:16],        r/w,        0xa */\n            uint32_t reserved_20_23           : 4; /* [23:20],       rsvd,        0x0 */\n            uint32_t sw_ldo11_rt_vout_sel     : 4; /* [27:24],        r/w,        0xa */\n            uint32_t sw_ldo11_aon_vout_sel    : 4; /* [31:28],        r/w,        0xa */\n        } BF;\n        uint32_t WORD;\n    } HBN_GLB;\n\n    /* 0x34 : HBN_SRAM */\n    union {\n        struct\n        {\n            uint32_t retram_ema    : 3;  /* [ 2: 0],        r/w,        0x3 */\n            uint32_t retram_emaw   : 2;  /* [ 4: 3],        r/w,        0x1 */\n            uint32_t reserved_5    : 1;  /* [    5],       rsvd,        0x0 */\n            uint32_t retram_ret    : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t retram_slp    : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t reserved_8_31 : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } HBN_SRAM;\n\n    /* 0x38  reserved */\n    uint8_t RESERVED0x38[200];\n\n    /* 0x100 : HBN_RSV0 */\n    union {\n        struct\n        {\n            uint32_t HBN_RSV0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } HBN_RSV0;\n\n    /* 0x104 : HBN_RSV1 */\n    union {\n        struct\n        {\n            uint32_t HBN_RSV1 : 32; /* [31: 0],        r/w, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } HBN_RSV1;\n\n    /* 0x108 : HBN_RSV2 */\n    union {\n        struct\n        {\n            uint32_t HBN_RSV2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } HBN_RSV2;\n\n    /* 0x10C : HBN_RSV3 */\n    union {\n        struct\n        {\n            uint32_t HBN_RSV3 : 32; /* [31: 0],        r/w, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } HBN_RSV3;\n\n    /* 0x110  reserved */\n    uint8_t RESERVED0x110[240];\n\n    /* 0x200 : rc32k_ctrl0 */\n    union {\n        struct\n        {\n            uint32_t rc32k_cal_done        : 1;  /* [    0],          r,        0x1 */\n            uint32_t rc32k_rdy             : 1;  /* [    1],          r,        0x1 */\n            uint32_t rc32k_cal_inprogress  : 1;  /* [    2],          r,        0x0 */\n            uint32_t rc32k_cal_div         : 2;  /* [ 4: 3],        r/w,        0x3 */\n            uint32_t rc32k_cal_precharge   : 1;  /* [    5],          r,        0x0 */\n            uint32_t rc32k_dig_code_fr_cal : 10; /* [15: 6],          r,      0x200 */\n            uint32_t rc32k_vref_dly        : 2;  /* [17:16],        r/w,        0x0 */\n            uint32_t rc32k_allow_cal       : 1;  /* [   18],        r/w,        0x0 */\n            uint32_t rc32k_ext_code_en     : 1;  /* [   19],        r/w,        0x1 */\n            uint32_t rc32k_cal_en          : 1;  /* [   20],        r/w,        0x0 */\n            uint32_t reserved_21           : 1;  /* [   21],       rsvd,        0x0 */\n            uint32_t rc32k_code_fr_ext     : 10; /* [31:22],        r/w,      0x12c */\n        } BF;\n        uint32_t WORD;\n    } rc32k_ctrl0;\n\n    /* 0x204 : xtal32k */\n    union {\n        struct\n        {\n            uint32_t xtal32k_hiz_en       : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t xtal32k_lowv_en      : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t xtal32k_ext_sel      : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t xtal32k_amp_ctrl     : 2;  /* [ 4: 3],        r/w,        0x1 */\n            uint32_t xtal32k_reg          : 2;  /* [ 6: 5],        r/w,        0x1 */\n            uint32_t xtal32k_outbuf_stre  : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t xtal32k_otf_short    : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t xtal32k_inv_stre     : 2;  /* [10: 9],        r/w,        0x1 */\n            uint32_t xtal32k_capbank      : 6;  /* [16:11],        r/w,       0x20 */\n            uint32_t xtal32k_ac_cap_short : 1;  /* [   17],        r/w,        0x1 */\n            uint32_t pu_xtal32k_buf       : 1;  /* [   18],        r/w,        0x1 */\n            uint32_t pu_xtal32k           : 1;  /* [   19],        r/w,        0x1 */\n            uint32_t reserved_20_31       : 12; /* [31:20],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } xtal32k;\n};\n\ntypedef volatile struct hbn_reg hbn_reg_t;\n\n#endif /* __HBN_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/i2c_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    i2c_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __I2C_REG_H__\n#define __I2C_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : i2c_config */\n#define I2C_CONFIG_OFFSET           (0x0)\n#define I2C_CR_I2C_M_EN             I2C_CR_I2C_M_EN\n#define I2C_CR_I2C_M_EN_POS         (0U)\n#define I2C_CR_I2C_M_EN_LEN         (1U)\n#define I2C_CR_I2C_M_EN_MSK         (((1U << I2C_CR_I2C_M_EN_LEN) - 1) << I2C_CR_I2C_M_EN_POS)\n#define I2C_CR_I2C_M_EN_UMSK        (~(((1U << I2C_CR_I2C_M_EN_LEN) - 1) << I2C_CR_I2C_M_EN_POS))\n#define I2C_CR_I2C_PKT_DIR          I2C_CR_I2C_PKT_DIR\n#define I2C_CR_I2C_PKT_DIR_POS      (1U)\n#define I2C_CR_I2C_PKT_DIR_LEN      (1U)\n#define I2C_CR_I2C_PKT_DIR_MSK      (((1U << I2C_CR_I2C_PKT_DIR_LEN) - 1) << I2C_CR_I2C_PKT_DIR_POS)\n#define I2C_CR_I2C_PKT_DIR_UMSK     (~(((1U << I2C_CR_I2C_PKT_DIR_LEN) - 1) << I2C_CR_I2C_PKT_DIR_POS))\n#define I2C_CR_I2C_DEG_EN           I2C_CR_I2C_DEG_EN\n#define I2C_CR_I2C_DEG_EN_POS       (2U)\n#define I2C_CR_I2C_DEG_EN_LEN       (1U)\n#define I2C_CR_I2C_DEG_EN_MSK       (((1U << I2C_CR_I2C_DEG_EN_LEN) - 1) << I2C_CR_I2C_DEG_EN_POS)\n#define I2C_CR_I2C_DEG_EN_UMSK      (~(((1U << I2C_CR_I2C_DEG_EN_LEN) - 1) << I2C_CR_I2C_DEG_EN_POS))\n#define I2C_CR_I2C_SCL_SYNC_EN      I2C_CR_I2C_SCL_SYNC_EN\n#define I2C_CR_I2C_SCL_SYNC_EN_POS  (3U)\n#define I2C_CR_I2C_SCL_SYNC_EN_LEN  (1U)\n#define I2C_CR_I2C_SCL_SYNC_EN_MSK  (((1U << I2C_CR_I2C_SCL_SYNC_EN_LEN) - 1) << I2C_CR_I2C_SCL_SYNC_EN_POS)\n#define I2C_CR_I2C_SCL_SYNC_EN_UMSK (~(((1U << I2C_CR_I2C_SCL_SYNC_EN_LEN) - 1) << I2C_CR_I2C_SCL_SYNC_EN_POS))\n#define I2C_CR_I2C_SUB_ADDR_EN      I2C_CR_I2C_SUB_ADDR_EN\n#define I2C_CR_I2C_SUB_ADDR_EN_POS  (4U)\n#define I2C_CR_I2C_SUB_ADDR_EN_LEN  (1U)\n#define I2C_CR_I2C_SUB_ADDR_EN_MSK  (((1U << I2C_CR_I2C_SUB_ADDR_EN_LEN) - 1) << I2C_CR_I2C_SUB_ADDR_EN_POS)\n#define I2C_CR_I2C_SUB_ADDR_EN_UMSK (~(((1U << I2C_CR_I2C_SUB_ADDR_EN_LEN) - 1) << I2C_CR_I2C_SUB_ADDR_EN_POS))\n#define I2C_CR_I2C_SUB_ADDR_BC      I2C_CR_I2C_SUB_ADDR_BC\n#define I2C_CR_I2C_SUB_ADDR_BC_POS  (5U)\n#define I2C_CR_I2C_SUB_ADDR_BC_LEN  (2U)\n#define I2C_CR_I2C_SUB_ADDR_BC_MSK  (((1U << I2C_CR_I2C_SUB_ADDR_BC_LEN) - 1) << I2C_CR_I2C_SUB_ADDR_BC_POS)\n#define I2C_CR_I2C_SUB_ADDR_BC_UMSK (~(((1U << I2C_CR_I2C_SUB_ADDR_BC_LEN) - 1) << I2C_CR_I2C_SUB_ADDR_BC_POS))\n#define I2C_CR_I2C_SLV_ADDR         I2C_CR_I2C_SLV_ADDR\n#define I2C_CR_I2C_SLV_ADDR_POS     (8U)\n#define I2C_CR_I2C_SLV_ADDR_LEN     (7U)\n#define I2C_CR_I2C_SLV_ADDR_MSK     (((1U << I2C_CR_I2C_SLV_ADDR_LEN) - 1) << I2C_CR_I2C_SLV_ADDR_POS)\n#define I2C_CR_I2C_SLV_ADDR_UMSK    (~(((1U << I2C_CR_I2C_SLV_ADDR_LEN) - 1) << I2C_CR_I2C_SLV_ADDR_POS))\n#define I2C_CR_I2C_PKT_LEN          I2C_CR_I2C_PKT_LEN\n#define I2C_CR_I2C_PKT_LEN_POS      (16U)\n#define I2C_CR_I2C_PKT_LEN_LEN      (8U)\n#define I2C_CR_I2C_PKT_LEN_MSK      (((1U << I2C_CR_I2C_PKT_LEN_LEN) - 1) << I2C_CR_I2C_PKT_LEN_POS)\n#define I2C_CR_I2C_PKT_LEN_UMSK     (~(((1U << I2C_CR_I2C_PKT_LEN_LEN) - 1) << I2C_CR_I2C_PKT_LEN_POS))\n#define I2C_CR_I2C_DEG_CNT          I2C_CR_I2C_DEG_CNT\n#define I2C_CR_I2C_DEG_CNT_POS      (28U)\n#define I2C_CR_I2C_DEG_CNT_LEN      (4U)\n#define I2C_CR_I2C_DEG_CNT_MSK      (((1U << I2C_CR_I2C_DEG_CNT_LEN) - 1) << I2C_CR_I2C_DEG_CNT_POS)\n#define I2C_CR_I2C_DEG_CNT_UMSK     (~(((1U << I2C_CR_I2C_DEG_CNT_LEN) - 1) << I2C_CR_I2C_DEG_CNT_POS))\n\n/* 0x4 : i2c_int_sts */\n#define I2C_INT_STS_OFFSET       (0x4)\n#define I2C_END_INT              I2C_END_INT\n#define I2C_END_INT_POS          (0U)\n#define I2C_END_INT_LEN          (1U)\n#define I2C_END_INT_MSK          (((1U << I2C_END_INT_LEN) - 1) << I2C_END_INT_POS)\n#define I2C_END_INT_UMSK         (~(((1U << I2C_END_INT_LEN) - 1) << I2C_END_INT_POS))\n#define I2C_TXF_INT              I2C_TXF_INT\n#define I2C_TXF_INT_POS          (1U)\n#define I2C_TXF_INT_LEN          (1U)\n#define I2C_TXF_INT_MSK          (((1U << I2C_TXF_INT_LEN) - 1) << I2C_TXF_INT_POS)\n#define I2C_TXF_INT_UMSK         (~(((1U << I2C_TXF_INT_LEN) - 1) << I2C_TXF_INT_POS))\n#define I2C_RXF_INT              I2C_RXF_INT\n#define I2C_RXF_INT_POS          (2U)\n#define I2C_RXF_INT_LEN          (1U)\n#define I2C_RXF_INT_MSK          (((1U << I2C_RXF_INT_LEN) - 1) << I2C_RXF_INT_POS)\n#define I2C_RXF_INT_UMSK         (~(((1U << I2C_RXF_INT_LEN) - 1) << I2C_RXF_INT_POS))\n#define I2C_NAK_INT              I2C_NAK_INT\n#define I2C_NAK_INT_POS          (3U)\n#define I2C_NAK_INT_LEN          (1U)\n#define I2C_NAK_INT_MSK          (((1U << I2C_NAK_INT_LEN) - 1) << I2C_NAK_INT_POS)\n#define I2C_NAK_INT_UMSK         (~(((1U << I2C_NAK_INT_LEN) - 1) << I2C_NAK_INT_POS))\n#define I2C_ARB_INT              I2C_ARB_INT\n#define I2C_ARB_INT_POS          (4U)\n#define I2C_ARB_INT_LEN          (1U)\n#define I2C_ARB_INT_MSK          (((1U << I2C_ARB_INT_LEN) - 1) << I2C_ARB_INT_POS)\n#define I2C_ARB_INT_UMSK         (~(((1U << I2C_ARB_INT_LEN) - 1) << I2C_ARB_INT_POS))\n#define I2C_FER_INT              I2C_FER_INT\n#define I2C_FER_INT_POS          (5U)\n#define I2C_FER_INT_LEN          (1U)\n#define I2C_FER_INT_MSK          (((1U << I2C_FER_INT_LEN) - 1) << I2C_FER_INT_POS)\n#define I2C_FER_INT_UMSK         (~(((1U << I2C_FER_INT_LEN) - 1) << I2C_FER_INT_POS))\n#define I2C_CR_I2C_END_MASK      I2C_CR_I2C_END_MASK\n#define I2C_CR_I2C_END_MASK_POS  (8U)\n#define I2C_CR_I2C_END_MASK_LEN  (1U)\n#define I2C_CR_I2C_END_MASK_MSK  (((1U << I2C_CR_I2C_END_MASK_LEN) - 1) << I2C_CR_I2C_END_MASK_POS)\n#define I2C_CR_I2C_END_MASK_UMSK (~(((1U << I2C_CR_I2C_END_MASK_LEN) - 1) << I2C_CR_I2C_END_MASK_POS))\n#define I2C_CR_I2C_TXF_MASK      I2C_CR_I2C_TXF_MASK\n#define I2C_CR_I2C_TXF_MASK_POS  (9U)\n#define I2C_CR_I2C_TXF_MASK_LEN  (1U)\n#define I2C_CR_I2C_TXF_MASK_MSK  (((1U << I2C_CR_I2C_TXF_MASK_LEN) - 1) << I2C_CR_I2C_TXF_MASK_POS)\n#define I2C_CR_I2C_TXF_MASK_UMSK (~(((1U << I2C_CR_I2C_TXF_MASK_LEN) - 1) << I2C_CR_I2C_TXF_MASK_POS))\n#define I2C_CR_I2C_RXF_MASK      I2C_CR_I2C_RXF_MASK\n#define I2C_CR_I2C_RXF_MASK_POS  (10U)\n#define I2C_CR_I2C_RXF_MASK_LEN  (1U)\n#define I2C_CR_I2C_RXF_MASK_MSK  (((1U << I2C_CR_I2C_RXF_MASK_LEN) - 1) << I2C_CR_I2C_RXF_MASK_POS)\n#define I2C_CR_I2C_RXF_MASK_UMSK (~(((1U << I2C_CR_I2C_RXF_MASK_LEN) - 1) << I2C_CR_I2C_RXF_MASK_POS))\n#define I2C_CR_I2C_NAK_MASK      I2C_CR_I2C_NAK_MASK\n#define I2C_CR_I2C_NAK_MASK_POS  (11U)\n#define I2C_CR_I2C_NAK_MASK_LEN  (1U)\n#define I2C_CR_I2C_NAK_MASK_MSK  (((1U << I2C_CR_I2C_NAK_MASK_LEN) - 1) << I2C_CR_I2C_NAK_MASK_POS)\n#define I2C_CR_I2C_NAK_MASK_UMSK (~(((1U << I2C_CR_I2C_NAK_MASK_LEN) - 1) << I2C_CR_I2C_NAK_MASK_POS))\n#define I2C_CR_I2C_ARB_MASK      I2C_CR_I2C_ARB_MASK\n#define I2C_CR_I2C_ARB_MASK_POS  (12U)\n#define I2C_CR_I2C_ARB_MASK_LEN  (1U)\n#define I2C_CR_I2C_ARB_MASK_MSK  (((1U << I2C_CR_I2C_ARB_MASK_LEN) - 1) << I2C_CR_I2C_ARB_MASK_POS)\n#define I2C_CR_I2C_ARB_MASK_UMSK (~(((1U << I2C_CR_I2C_ARB_MASK_LEN) - 1) << I2C_CR_I2C_ARB_MASK_POS))\n#define I2C_CR_I2C_FER_MASK      I2C_CR_I2C_FER_MASK\n#define I2C_CR_I2C_FER_MASK_POS  (13U)\n#define I2C_CR_I2C_FER_MASK_LEN  (1U)\n#define I2C_CR_I2C_FER_MASK_MSK  (((1U << I2C_CR_I2C_FER_MASK_LEN) - 1) << I2C_CR_I2C_FER_MASK_POS)\n#define I2C_CR_I2C_FER_MASK_UMSK (~(((1U << I2C_CR_I2C_FER_MASK_LEN) - 1) << I2C_CR_I2C_FER_MASK_POS))\n#define I2C_CR_I2C_END_CLR       I2C_CR_I2C_END_CLR\n#define I2C_CR_I2C_END_CLR_POS   (16U)\n#define I2C_CR_I2C_END_CLR_LEN   (1U)\n#define I2C_CR_I2C_END_CLR_MSK   (((1U << I2C_CR_I2C_END_CLR_LEN) - 1) << I2C_CR_I2C_END_CLR_POS)\n#define I2C_CR_I2C_END_CLR_UMSK  (~(((1U << I2C_CR_I2C_END_CLR_LEN) - 1) << I2C_CR_I2C_END_CLR_POS))\n#define I2C_CR_I2C_NAK_CLR       I2C_CR_I2C_NAK_CLR\n#define I2C_CR_I2C_NAK_CLR_POS   (19U)\n#define I2C_CR_I2C_NAK_CLR_LEN   (1U)\n#define I2C_CR_I2C_NAK_CLR_MSK   (((1U << I2C_CR_I2C_NAK_CLR_LEN) - 1) << I2C_CR_I2C_NAK_CLR_POS)\n#define I2C_CR_I2C_NAK_CLR_UMSK  (~(((1U << I2C_CR_I2C_NAK_CLR_LEN) - 1) << I2C_CR_I2C_NAK_CLR_POS))\n#define I2C_CR_I2C_ARB_CLR       I2C_CR_I2C_ARB_CLR\n#define I2C_CR_I2C_ARB_CLR_POS   (20U)\n#define I2C_CR_I2C_ARB_CLR_LEN   (1U)\n#define I2C_CR_I2C_ARB_CLR_MSK   (((1U << I2C_CR_I2C_ARB_CLR_LEN) - 1) << I2C_CR_I2C_ARB_CLR_POS)\n#define I2C_CR_I2C_ARB_CLR_UMSK  (~(((1U << I2C_CR_I2C_ARB_CLR_LEN) - 1) << I2C_CR_I2C_ARB_CLR_POS))\n#define I2C_CR_I2C_END_EN        I2C_CR_I2C_END_EN\n#define I2C_CR_I2C_END_EN_POS    (24U)\n#define I2C_CR_I2C_END_EN_LEN    (1U)\n#define I2C_CR_I2C_END_EN_MSK    (((1U << I2C_CR_I2C_END_EN_LEN) - 1) << I2C_CR_I2C_END_EN_POS)\n#define I2C_CR_I2C_END_EN_UMSK   (~(((1U << I2C_CR_I2C_END_EN_LEN) - 1) << I2C_CR_I2C_END_EN_POS))\n#define I2C_CR_I2C_TXF_EN        I2C_CR_I2C_TXF_EN\n#define I2C_CR_I2C_TXF_EN_POS    (25U)\n#define I2C_CR_I2C_TXF_EN_LEN    (1U)\n#define I2C_CR_I2C_TXF_EN_MSK    (((1U << I2C_CR_I2C_TXF_EN_LEN) - 1) << I2C_CR_I2C_TXF_EN_POS)\n#define I2C_CR_I2C_TXF_EN_UMSK   (~(((1U << I2C_CR_I2C_TXF_EN_LEN) - 1) << I2C_CR_I2C_TXF_EN_POS))\n#define I2C_CR_I2C_RXF_EN        I2C_CR_I2C_RXF_EN\n#define I2C_CR_I2C_RXF_EN_POS    (26U)\n#define I2C_CR_I2C_RXF_EN_LEN    (1U)\n#define I2C_CR_I2C_RXF_EN_MSK    (((1U << I2C_CR_I2C_RXF_EN_LEN) - 1) << I2C_CR_I2C_RXF_EN_POS)\n#define I2C_CR_I2C_RXF_EN_UMSK   (~(((1U << I2C_CR_I2C_RXF_EN_LEN) - 1) << I2C_CR_I2C_RXF_EN_POS))\n#define I2C_CR_I2C_NAK_EN        I2C_CR_I2C_NAK_EN\n#define I2C_CR_I2C_NAK_EN_POS    (27U)\n#define I2C_CR_I2C_NAK_EN_LEN    (1U)\n#define I2C_CR_I2C_NAK_EN_MSK    (((1U << I2C_CR_I2C_NAK_EN_LEN) - 1) << I2C_CR_I2C_NAK_EN_POS)\n#define I2C_CR_I2C_NAK_EN_UMSK   (~(((1U << I2C_CR_I2C_NAK_EN_LEN) - 1) << I2C_CR_I2C_NAK_EN_POS))\n#define I2C_CR_I2C_ARB_EN        I2C_CR_I2C_ARB_EN\n#define I2C_CR_I2C_ARB_EN_POS    (28U)\n#define I2C_CR_I2C_ARB_EN_LEN    (1U)\n#define I2C_CR_I2C_ARB_EN_MSK    (((1U << I2C_CR_I2C_ARB_EN_LEN) - 1) << I2C_CR_I2C_ARB_EN_POS)\n#define I2C_CR_I2C_ARB_EN_UMSK   (~(((1U << I2C_CR_I2C_ARB_EN_LEN) - 1) << I2C_CR_I2C_ARB_EN_POS))\n#define I2C_CR_I2C_FER_EN        I2C_CR_I2C_FER_EN\n#define I2C_CR_I2C_FER_EN_POS    (29U)\n#define I2C_CR_I2C_FER_EN_LEN    (1U)\n#define I2C_CR_I2C_FER_EN_MSK    (((1U << I2C_CR_I2C_FER_EN_LEN) - 1) << I2C_CR_I2C_FER_EN_POS)\n#define I2C_CR_I2C_FER_EN_UMSK   (~(((1U << I2C_CR_I2C_FER_EN_LEN) - 1) << I2C_CR_I2C_FER_EN_POS))\n\n/* 0x8 : i2c_sub_addr */\n#define I2C_SUB_ADDR_OFFSET         (0x8)\n#define I2C_CR_I2C_SUB_ADDR_B0      I2C_CR_I2C_SUB_ADDR_B0\n#define I2C_CR_I2C_SUB_ADDR_B0_POS  (0U)\n#define I2C_CR_I2C_SUB_ADDR_B0_LEN  (8U)\n#define I2C_CR_I2C_SUB_ADDR_B0_MSK  (((1U << I2C_CR_I2C_SUB_ADDR_B0_LEN) - 1) << I2C_CR_I2C_SUB_ADDR_B0_POS)\n#define I2C_CR_I2C_SUB_ADDR_B0_UMSK (~(((1U << I2C_CR_I2C_SUB_ADDR_B0_LEN) - 1) << I2C_CR_I2C_SUB_ADDR_B0_POS))\n#define I2C_CR_I2C_SUB_ADDR_B1      I2C_CR_I2C_SUB_ADDR_B1\n#define I2C_CR_I2C_SUB_ADDR_B1_POS  (8U)\n#define I2C_CR_I2C_SUB_ADDR_B1_LEN  (8U)\n#define I2C_CR_I2C_SUB_ADDR_B1_MSK  (((1U << I2C_CR_I2C_SUB_ADDR_B1_LEN) - 1) << I2C_CR_I2C_SUB_ADDR_B1_POS)\n#define I2C_CR_I2C_SUB_ADDR_B1_UMSK (~(((1U << I2C_CR_I2C_SUB_ADDR_B1_LEN) - 1) << I2C_CR_I2C_SUB_ADDR_B1_POS))\n#define I2C_CR_I2C_SUB_ADDR_B2      I2C_CR_I2C_SUB_ADDR_B2\n#define I2C_CR_I2C_SUB_ADDR_B2_POS  (16U)\n#define I2C_CR_I2C_SUB_ADDR_B2_LEN  (8U)\n#define I2C_CR_I2C_SUB_ADDR_B2_MSK  (((1U << I2C_CR_I2C_SUB_ADDR_B2_LEN) - 1) << I2C_CR_I2C_SUB_ADDR_B2_POS)\n#define I2C_CR_I2C_SUB_ADDR_B2_UMSK (~(((1U << I2C_CR_I2C_SUB_ADDR_B2_LEN) - 1) << I2C_CR_I2C_SUB_ADDR_B2_POS))\n#define I2C_CR_I2C_SUB_ADDR_B3      I2C_CR_I2C_SUB_ADDR_B3\n#define I2C_CR_I2C_SUB_ADDR_B3_POS  (24U)\n#define I2C_CR_I2C_SUB_ADDR_B3_LEN  (8U)\n#define I2C_CR_I2C_SUB_ADDR_B3_MSK  (((1U << I2C_CR_I2C_SUB_ADDR_B3_LEN) - 1) << I2C_CR_I2C_SUB_ADDR_B3_POS)\n#define I2C_CR_I2C_SUB_ADDR_B3_UMSK (~(((1U << I2C_CR_I2C_SUB_ADDR_B3_LEN) - 1) << I2C_CR_I2C_SUB_ADDR_B3_POS))\n\n/* 0xC : i2c_bus_busy */\n#define I2C_BUS_BUSY_OFFSET          (0xC)\n#define I2C_STS_I2C_BUS_BUSY         I2C_STS_I2C_BUS_BUSY\n#define I2C_STS_I2C_BUS_BUSY_POS     (0U)\n#define I2C_STS_I2C_BUS_BUSY_LEN     (1U)\n#define I2C_STS_I2C_BUS_BUSY_MSK     (((1U << I2C_STS_I2C_BUS_BUSY_LEN) - 1) << I2C_STS_I2C_BUS_BUSY_POS)\n#define I2C_STS_I2C_BUS_BUSY_UMSK    (~(((1U << I2C_STS_I2C_BUS_BUSY_LEN) - 1) << I2C_STS_I2C_BUS_BUSY_POS))\n#define I2C_CR_I2C_BUS_BUSY_CLR      I2C_CR_I2C_BUS_BUSY_CLR\n#define I2C_CR_I2C_BUS_BUSY_CLR_POS  (1U)\n#define I2C_CR_I2C_BUS_BUSY_CLR_LEN  (1U)\n#define I2C_CR_I2C_BUS_BUSY_CLR_MSK  (((1U << I2C_CR_I2C_BUS_BUSY_CLR_LEN) - 1) << I2C_CR_I2C_BUS_BUSY_CLR_POS)\n#define I2C_CR_I2C_BUS_BUSY_CLR_UMSK (~(((1U << I2C_CR_I2C_BUS_BUSY_CLR_LEN) - 1) << I2C_CR_I2C_BUS_BUSY_CLR_POS))\n\n/* 0x10 : i2c_prd_start */\n#define I2C_PRD_START_OFFSET       (0x10)\n#define I2C_CR_I2C_PRD_S_PH_0      I2C_CR_I2C_PRD_S_PH_0\n#define I2C_CR_I2C_PRD_S_PH_0_POS  (0U)\n#define I2C_CR_I2C_PRD_S_PH_0_LEN  (8U)\n#define I2C_CR_I2C_PRD_S_PH_0_MSK  (((1U << I2C_CR_I2C_PRD_S_PH_0_LEN) - 1) << I2C_CR_I2C_PRD_S_PH_0_POS)\n#define I2C_CR_I2C_PRD_S_PH_0_UMSK (~(((1U << I2C_CR_I2C_PRD_S_PH_0_LEN) - 1) << I2C_CR_I2C_PRD_S_PH_0_POS))\n#define I2C_CR_I2C_PRD_S_PH_1      I2C_CR_I2C_PRD_S_PH_1\n#define I2C_CR_I2C_PRD_S_PH_1_POS  (8U)\n#define I2C_CR_I2C_PRD_S_PH_1_LEN  (8U)\n#define I2C_CR_I2C_PRD_S_PH_1_MSK  (((1U << I2C_CR_I2C_PRD_S_PH_1_LEN) - 1) << I2C_CR_I2C_PRD_S_PH_1_POS)\n#define I2C_CR_I2C_PRD_S_PH_1_UMSK (~(((1U << I2C_CR_I2C_PRD_S_PH_1_LEN) - 1) << I2C_CR_I2C_PRD_S_PH_1_POS))\n#define I2C_CR_I2C_PRD_S_PH_2      I2C_CR_I2C_PRD_S_PH_2\n#define I2C_CR_I2C_PRD_S_PH_2_POS  (16U)\n#define I2C_CR_I2C_PRD_S_PH_2_LEN  (8U)\n#define I2C_CR_I2C_PRD_S_PH_2_MSK  (((1U << I2C_CR_I2C_PRD_S_PH_2_LEN) - 1) << I2C_CR_I2C_PRD_S_PH_2_POS)\n#define I2C_CR_I2C_PRD_S_PH_2_UMSK (~(((1U << I2C_CR_I2C_PRD_S_PH_2_LEN) - 1) << I2C_CR_I2C_PRD_S_PH_2_POS))\n#define I2C_CR_I2C_PRD_S_PH_3      I2C_CR_I2C_PRD_S_PH_3\n#define I2C_CR_I2C_PRD_S_PH_3_POS  (24U)\n#define I2C_CR_I2C_PRD_S_PH_3_LEN  (8U)\n#define I2C_CR_I2C_PRD_S_PH_3_MSK  (((1U << I2C_CR_I2C_PRD_S_PH_3_LEN) - 1) << I2C_CR_I2C_PRD_S_PH_3_POS)\n#define I2C_CR_I2C_PRD_S_PH_3_UMSK (~(((1U << I2C_CR_I2C_PRD_S_PH_3_LEN) - 1) << I2C_CR_I2C_PRD_S_PH_3_POS))\n\n/* 0x14 : i2c_prd_stop */\n#define I2C_PRD_STOP_OFFSET        (0x14)\n#define I2C_CR_I2C_PRD_P_PH_0      I2C_CR_I2C_PRD_P_PH_0\n#define I2C_CR_I2C_PRD_P_PH_0_POS  (0U)\n#define I2C_CR_I2C_PRD_P_PH_0_LEN  (8U)\n#define I2C_CR_I2C_PRD_P_PH_0_MSK  (((1U << I2C_CR_I2C_PRD_P_PH_0_LEN) - 1) << I2C_CR_I2C_PRD_P_PH_0_POS)\n#define I2C_CR_I2C_PRD_P_PH_0_UMSK (~(((1U << I2C_CR_I2C_PRD_P_PH_0_LEN) - 1) << I2C_CR_I2C_PRD_P_PH_0_POS))\n#define I2C_CR_I2C_PRD_P_PH_1      I2C_CR_I2C_PRD_P_PH_1\n#define I2C_CR_I2C_PRD_P_PH_1_POS  (8U)\n#define I2C_CR_I2C_PRD_P_PH_1_LEN  (8U)\n#define I2C_CR_I2C_PRD_P_PH_1_MSK  (((1U << I2C_CR_I2C_PRD_P_PH_1_LEN) - 1) << I2C_CR_I2C_PRD_P_PH_1_POS)\n#define I2C_CR_I2C_PRD_P_PH_1_UMSK (~(((1U << I2C_CR_I2C_PRD_P_PH_1_LEN) - 1) << I2C_CR_I2C_PRD_P_PH_1_POS))\n#define I2C_CR_I2C_PRD_P_PH_2      I2C_CR_I2C_PRD_P_PH_2\n#define I2C_CR_I2C_PRD_P_PH_2_POS  (16U)\n#define I2C_CR_I2C_PRD_P_PH_2_LEN  (8U)\n#define I2C_CR_I2C_PRD_P_PH_2_MSK  (((1U << I2C_CR_I2C_PRD_P_PH_2_LEN) - 1) << I2C_CR_I2C_PRD_P_PH_2_POS)\n#define I2C_CR_I2C_PRD_P_PH_2_UMSK (~(((1U << I2C_CR_I2C_PRD_P_PH_2_LEN) - 1) << I2C_CR_I2C_PRD_P_PH_2_POS))\n#define I2C_CR_I2C_PRD_P_PH_3      I2C_CR_I2C_PRD_P_PH_3\n#define I2C_CR_I2C_PRD_P_PH_3_POS  (24U)\n#define I2C_CR_I2C_PRD_P_PH_3_LEN  (8U)\n#define I2C_CR_I2C_PRD_P_PH_3_MSK  (((1U << I2C_CR_I2C_PRD_P_PH_3_LEN) - 1) << I2C_CR_I2C_PRD_P_PH_3_POS)\n#define I2C_CR_I2C_PRD_P_PH_3_UMSK (~(((1U << I2C_CR_I2C_PRD_P_PH_3_LEN) - 1) << I2C_CR_I2C_PRD_P_PH_3_POS))\n\n/* 0x18 : i2c_prd_data */\n#define I2C_PRD_DATA_OFFSET        (0x18)\n#define I2C_CR_I2C_PRD_D_PH_0      I2C_CR_I2C_PRD_D_PH_0\n#define I2C_CR_I2C_PRD_D_PH_0_POS  (0U)\n#define I2C_CR_I2C_PRD_D_PH_0_LEN  (8U)\n#define I2C_CR_I2C_PRD_D_PH_0_MSK  (((1U << I2C_CR_I2C_PRD_D_PH_0_LEN) - 1) << I2C_CR_I2C_PRD_D_PH_0_POS)\n#define I2C_CR_I2C_PRD_D_PH_0_UMSK (~(((1U << I2C_CR_I2C_PRD_D_PH_0_LEN) - 1) << I2C_CR_I2C_PRD_D_PH_0_POS))\n#define I2C_CR_I2C_PRD_D_PH_1      I2C_CR_I2C_PRD_D_PH_1\n#define I2C_CR_I2C_PRD_D_PH_1_POS  (8U)\n#define I2C_CR_I2C_PRD_D_PH_1_LEN  (8U)\n#define I2C_CR_I2C_PRD_D_PH_1_MSK  (((1U << I2C_CR_I2C_PRD_D_PH_1_LEN) - 1) << I2C_CR_I2C_PRD_D_PH_1_POS)\n#define I2C_CR_I2C_PRD_D_PH_1_UMSK (~(((1U << I2C_CR_I2C_PRD_D_PH_1_LEN) - 1) << I2C_CR_I2C_PRD_D_PH_1_POS))\n#define I2C_CR_I2C_PRD_D_PH_2      I2C_CR_I2C_PRD_D_PH_2\n#define I2C_CR_I2C_PRD_D_PH_2_POS  (16U)\n#define I2C_CR_I2C_PRD_D_PH_2_LEN  (8U)\n#define I2C_CR_I2C_PRD_D_PH_2_MSK  (((1U << I2C_CR_I2C_PRD_D_PH_2_LEN) - 1) << I2C_CR_I2C_PRD_D_PH_2_POS)\n#define I2C_CR_I2C_PRD_D_PH_2_UMSK (~(((1U << I2C_CR_I2C_PRD_D_PH_2_LEN) - 1) << I2C_CR_I2C_PRD_D_PH_2_POS))\n#define I2C_CR_I2C_PRD_D_PH_3      I2C_CR_I2C_PRD_D_PH_3\n#define I2C_CR_I2C_PRD_D_PH_3_POS  (24U)\n#define I2C_CR_I2C_PRD_D_PH_3_LEN  (8U)\n#define I2C_CR_I2C_PRD_D_PH_3_MSK  (((1U << I2C_CR_I2C_PRD_D_PH_3_LEN) - 1) << I2C_CR_I2C_PRD_D_PH_3_POS)\n#define I2C_CR_I2C_PRD_D_PH_3_UMSK (~(((1U << I2C_CR_I2C_PRD_D_PH_3_LEN) - 1) << I2C_CR_I2C_PRD_D_PH_3_POS))\n\n/* 0x80 : i2c_fifo_config_0 */\n#define I2C_FIFO_CONFIG_0_OFFSET   (0x80)\n#define I2C_DMA_TX_EN              I2C_DMA_TX_EN\n#define I2C_DMA_TX_EN_POS          (0U)\n#define I2C_DMA_TX_EN_LEN          (1U)\n#define I2C_DMA_TX_EN_MSK          (((1U << I2C_DMA_TX_EN_LEN) - 1) << I2C_DMA_TX_EN_POS)\n#define I2C_DMA_TX_EN_UMSK         (~(((1U << I2C_DMA_TX_EN_LEN) - 1) << I2C_DMA_TX_EN_POS))\n#define I2C_DMA_RX_EN              I2C_DMA_RX_EN\n#define I2C_DMA_RX_EN_POS          (1U)\n#define I2C_DMA_RX_EN_LEN          (1U)\n#define I2C_DMA_RX_EN_MSK          (((1U << I2C_DMA_RX_EN_LEN) - 1) << I2C_DMA_RX_EN_POS)\n#define I2C_DMA_RX_EN_UMSK         (~(((1U << I2C_DMA_RX_EN_LEN) - 1) << I2C_DMA_RX_EN_POS))\n#define I2C_TX_FIFO_CLR            I2C_TX_FIFO_CLR\n#define I2C_TX_FIFO_CLR_POS        (2U)\n#define I2C_TX_FIFO_CLR_LEN        (1U)\n#define I2C_TX_FIFO_CLR_MSK        (((1U << I2C_TX_FIFO_CLR_LEN) - 1) << I2C_TX_FIFO_CLR_POS)\n#define I2C_TX_FIFO_CLR_UMSK       (~(((1U << I2C_TX_FIFO_CLR_LEN) - 1) << I2C_TX_FIFO_CLR_POS))\n#define I2C_RX_FIFO_CLR            I2C_RX_FIFO_CLR\n#define I2C_RX_FIFO_CLR_POS        (3U)\n#define I2C_RX_FIFO_CLR_LEN        (1U)\n#define I2C_RX_FIFO_CLR_MSK        (((1U << I2C_RX_FIFO_CLR_LEN) - 1) << I2C_RX_FIFO_CLR_POS)\n#define I2C_RX_FIFO_CLR_UMSK       (~(((1U << I2C_RX_FIFO_CLR_LEN) - 1) << I2C_RX_FIFO_CLR_POS))\n#define I2C_TX_FIFO_OVERFLOW       I2C_TX_FIFO_OVERFLOW\n#define I2C_TX_FIFO_OVERFLOW_POS   (4U)\n#define I2C_TX_FIFO_OVERFLOW_LEN   (1U)\n#define I2C_TX_FIFO_OVERFLOW_MSK   (((1U << I2C_TX_FIFO_OVERFLOW_LEN) - 1) << I2C_TX_FIFO_OVERFLOW_POS)\n#define I2C_TX_FIFO_OVERFLOW_UMSK  (~(((1U << I2C_TX_FIFO_OVERFLOW_LEN) - 1) << I2C_TX_FIFO_OVERFLOW_POS))\n#define I2C_TX_FIFO_UNDERFLOW      I2C_TX_FIFO_UNDERFLOW\n#define I2C_TX_FIFO_UNDERFLOW_POS  (5U)\n#define I2C_TX_FIFO_UNDERFLOW_LEN  (1U)\n#define I2C_TX_FIFO_UNDERFLOW_MSK  (((1U << I2C_TX_FIFO_UNDERFLOW_LEN) - 1) << I2C_TX_FIFO_UNDERFLOW_POS)\n#define I2C_TX_FIFO_UNDERFLOW_UMSK (~(((1U << I2C_TX_FIFO_UNDERFLOW_LEN) - 1) << I2C_TX_FIFO_UNDERFLOW_POS))\n#define I2C_RX_FIFO_OVERFLOW       I2C_RX_FIFO_OVERFLOW\n#define I2C_RX_FIFO_OVERFLOW_POS   (6U)\n#define I2C_RX_FIFO_OVERFLOW_LEN   (1U)\n#define I2C_RX_FIFO_OVERFLOW_MSK   (((1U << I2C_RX_FIFO_OVERFLOW_LEN) - 1) << I2C_RX_FIFO_OVERFLOW_POS)\n#define I2C_RX_FIFO_OVERFLOW_UMSK  (~(((1U << I2C_RX_FIFO_OVERFLOW_LEN) - 1) << I2C_RX_FIFO_OVERFLOW_POS))\n#define I2C_RX_FIFO_UNDERFLOW      I2C_RX_FIFO_UNDERFLOW\n#define I2C_RX_FIFO_UNDERFLOW_POS  (7U)\n#define I2C_RX_FIFO_UNDERFLOW_LEN  (1U)\n#define I2C_RX_FIFO_UNDERFLOW_MSK  (((1U << I2C_RX_FIFO_UNDERFLOW_LEN) - 1) << I2C_RX_FIFO_UNDERFLOW_POS)\n#define I2C_RX_FIFO_UNDERFLOW_UMSK (~(((1U << I2C_RX_FIFO_UNDERFLOW_LEN) - 1) << I2C_RX_FIFO_UNDERFLOW_POS))\n\n/* 0x84 : i2c_fifo_config_1 */\n#define I2C_FIFO_CONFIG_1_OFFSET (0x84)\n#define I2C_TX_FIFO_CNT          I2C_TX_FIFO_CNT\n#define I2C_TX_FIFO_CNT_POS      (0U)\n#define I2C_TX_FIFO_CNT_LEN      (2U)\n#define I2C_TX_FIFO_CNT_MSK      (((1U << I2C_TX_FIFO_CNT_LEN) - 1) << I2C_TX_FIFO_CNT_POS)\n#define I2C_TX_FIFO_CNT_UMSK     (~(((1U << I2C_TX_FIFO_CNT_LEN) - 1) << I2C_TX_FIFO_CNT_POS))\n#define I2C_RX_FIFO_CNT          I2C_RX_FIFO_CNT\n#define I2C_RX_FIFO_CNT_POS      (8U)\n#define I2C_RX_FIFO_CNT_LEN      (2U)\n#define I2C_RX_FIFO_CNT_MSK      (((1U << I2C_RX_FIFO_CNT_LEN) - 1) << I2C_RX_FIFO_CNT_POS)\n#define I2C_RX_FIFO_CNT_UMSK     (~(((1U << I2C_RX_FIFO_CNT_LEN) - 1) << I2C_RX_FIFO_CNT_POS))\n#define I2C_TX_FIFO_TH           I2C_TX_FIFO_TH\n#define I2C_TX_FIFO_TH_POS       (16U)\n#define I2C_TX_FIFO_TH_LEN       (1U)\n#define I2C_TX_FIFO_TH_MSK       (((1U << I2C_TX_FIFO_TH_LEN) - 1) << I2C_TX_FIFO_TH_POS)\n#define I2C_TX_FIFO_TH_UMSK      (~(((1U << I2C_TX_FIFO_TH_LEN) - 1) << I2C_TX_FIFO_TH_POS))\n#define I2C_RX_FIFO_TH           I2C_RX_FIFO_TH\n#define I2C_RX_FIFO_TH_POS       (24U)\n#define I2C_RX_FIFO_TH_LEN       (1U)\n#define I2C_RX_FIFO_TH_MSK       (((1U << I2C_RX_FIFO_TH_LEN) - 1) << I2C_RX_FIFO_TH_POS)\n#define I2C_RX_FIFO_TH_UMSK      (~(((1U << I2C_RX_FIFO_TH_LEN) - 1) << I2C_RX_FIFO_TH_POS))\n\n/* 0x88 : i2c_fifo_wdata */\n#define I2C_FIFO_WDATA_OFFSET (0x88)\n#define I2C_FIFO_WDATA        I2C_FIFO_WDATA\n#define I2C_FIFO_WDATA_POS    (0U)\n#define I2C_FIFO_WDATA_LEN    (32U)\n#define I2C_FIFO_WDATA_MSK    (((1U << I2C_FIFO_WDATA_LEN) - 1) << I2C_FIFO_WDATA_POS)\n#define I2C_FIFO_WDATA_UMSK   (~(((1U << I2C_FIFO_WDATA_LEN) - 1) << I2C_FIFO_WDATA_POS))\n\n/* 0x8C : i2c_fifo_rdata */\n#define I2C_FIFO_RDATA_OFFSET (0x8C)\n#define I2C_FIFO_RDATA        I2C_FIFO_RDATA\n#define I2C_FIFO_RDATA_POS    (0U)\n#define I2C_FIFO_RDATA_LEN    (32U)\n#define I2C_FIFO_RDATA_MSK    (((1U << I2C_FIFO_RDATA_LEN) - 1) << I2C_FIFO_RDATA_POS)\n#define I2C_FIFO_RDATA_UMSK   (~(((1U << I2C_FIFO_RDATA_LEN) - 1) << I2C_FIFO_RDATA_POS))\n\nstruct i2c_reg {\n    /* 0x0 : i2c_config */\n    union {\n        struct\n        {\n            uint32_t cr_i2c_m_en        : 1; /* [    0],        r/w,        0x0 */\n            uint32_t cr_i2c_pkt_dir     : 1; /* [    1],        r/w,        0x1 */\n            uint32_t cr_i2c_deg_en      : 1; /* [    2],        r/w,        0x0 */\n            uint32_t cr_i2c_scl_sync_en : 1; /* [    3],        r/w,        0x1 */\n            uint32_t cr_i2c_sub_addr_en : 1; /* [    4],        r/w,        0x0 */\n            uint32_t cr_i2c_sub_addr_bc : 2; /* [ 6: 5],        r/w,        0x0 */\n            uint32_t reserved_7         : 1; /* [    7],       rsvd,        0x0 */\n            uint32_t cr_i2c_slv_addr    : 7; /* [14: 8],        r/w,        0x0 */\n            uint32_t reserved_15        : 1; /* [   15],       rsvd,        0x0 */\n            uint32_t cr_i2c_pkt_len     : 8; /* [23:16],        r/w,        0x0 */\n            uint32_t reserved_24_27     : 4; /* [27:24],       rsvd,        0x0 */\n            uint32_t cr_i2c_deg_cnt     : 4; /* [31:28],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } i2c_config;\n\n    /* 0x4 : i2c_int_sts */\n    union {\n        struct\n        {\n            uint32_t i2c_end_int     : 1; /* [    0],          r,        0x0 */\n            uint32_t i2c_txf_int     : 1; /* [    1],          r,        0x0 */\n            uint32_t i2c_rxf_int     : 1; /* [    2],          r,        0x0 */\n            uint32_t i2c_nak_int     : 1; /* [    3],          r,        0x0 */\n            uint32_t i2c_arb_int     : 1; /* [    4],          r,        0x0 */\n            uint32_t i2c_fer_int     : 1; /* [    5],          r,        0x0 */\n            uint32_t reserved_6_7    : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t cr_i2c_end_mask : 1; /* [    8],        r/w,        0x1 */\n            uint32_t cr_i2c_txf_mask : 1; /* [    9],        r/w,        0x1 */\n            uint32_t cr_i2c_rxf_mask : 1; /* [   10],        r/w,        0x1 */\n            uint32_t cr_i2c_nak_mask : 1; /* [   11],        r/w,        0x1 */\n            uint32_t cr_i2c_arb_mask : 1; /* [   12],        r/w,        0x1 */\n            uint32_t cr_i2c_fer_mask : 1; /* [   13],        r/w,        0x1 */\n            uint32_t reserved_14_15  : 2; /* [15:14],       rsvd,        0x0 */\n            uint32_t cr_i2c_end_clr  : 1; /* [   16],        w1c,        0x0 */\n            uint32_t rsvd_17         : 1; /* [   17],       rsvd,        0x0 */\n            uint32_t rsvd_18         : 1; /* [   18],       rsvd,        0x0 */\n            uint32_t cr_i2c_nak_clr  : 1; /* [   19],        w1c,        0x0 */\n            uint32_t cr_i2c_arb_clr  : 1; /* [   20],        w1c,        0x0 */\n            uint32_t rsvd_21         : 1; /* [   21],       rsvd,        0x0 */\n            uint32_t reserved_22_23  : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t cr_i2c_end_en   : 1; /* [   24],        r/w,        0x1 */\n            uint32_t cr_i2c_txf_en   : 1; /* [   25],        r/w,        0x1 */\n            uint32_t cr_i2c_rxf_en   : 1; /* [   26],        r/w,        0x1 */\n            uint32_t cr_i2c_nak_en   : 1; /* [   27],        r/w,        0x1 */\n            uint32_t cr_i2c_arb_en   : 1; /* [   28],        r/w,        0x1 */\n            uint32_t cr_i2c_fer_en   : 1; /* [   29],        r/w,        0x1 */\n            uint32_t reserved_30_31  : 2; /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } i2c_int_sts;\n\n    /* 0x8 : i2c_sub_addr */\n    union {\n        struct\n        {\n            uint32_t cr_i2c_sub_addr_b0 : 8; /* [ 7: 0],        r/w,        0x0 */\n            uint32_t cr_i2c_sub_addr_b1 : 8; /* [15: 8],        r/w,        0x0 */\n            uint32_t cr_i2c_sub_addr_b2 : 8; /* [23:16],        r/w,        0x0 */\n            uint32_t cr_i2c_sub_addr_b3 : 8; /* [31:24],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } i2c_sub_addr;\n\n    /* 0xC : i2c_bus_busy */\n    union {\n        struct\n        {\n            uint32_t sts_i2c_bus_busy    : 1;  /* [    0],          r,        0x0 */\n            uint32_t cr_i2c_bus_busy_clr : 1;  /* [    1],        w1c,        0x0 */\n            uint32_t reserved_2_31       : 30; /* [31: 2],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } i2c_bus_busy;\n\n    /* 0x10 : i2c_prd_start */\n    union {\n        struct\n        {\n            uint32_t cr_i2c_prd_s_ph_0 : 8; /* [ 7: 0],        r/w,        0xf */\n            uint32_t cr_i2c_prd_s_ph_1 : 8; /* [15: 8],        r/w,        0xf */\n            uint32_t cr_i2c_prd_s_ph_2 : 8; /* [23:16],        r/w,        0xf */\n            uint32_t cr_i2c_prd_s_ph_3 : 8; /* [31:24],        r/w,        0xf */\n        } BF;\n        uint32_t WORD;\n    } i2c_prd_start;\n\n    /* 0x14 : i2c_prd_stop */\n    union {\n        struct\n        {\n            uint32_t cr_i2c_prd_p_ph_0 : 8; /* [ 7: 0],        r/w,        0xf */\n            uint32_t cr_i2c_prd_p_ph_1 : 8; /* [15: 8],        r/w,        0xf */\n            uint32_t cr_i2c_prd_p_ph_2 : 8; /* [23:16],        r/w,        0xf */\n            uint32_t cr_i2c_prd_p_ph_3 : 8; /* [31:24],        r/w,        0xf */\n        } BF;\n        uint32_t WORD;\n    } i2c_prd_stop;\n\n    /* 0x18 : i2c_prd_data */\n    union {\n        struct\n        {\n            uint32_t cr_i2c_prd_d_ph_0 : 8; /* [ 7: 0],        r/w,        0xf */\n            uint32_t cr_i2c_prd_d_ph_1 : 8; /* [15: 8],        r/w,        0xf */\n            uint32_t cr_i2c_prd_d_ph_2 : 8; /* [23:16],        r/w,        0xf */\n            uint32_t cr_i2c_prd_d_ph_3 : 8; /* [31:24],        r/w,        0xf */\n        } BF;\n        uint32_t WORD;\n    } i2c_prd_data;\n\n    /* 0x1c  reserved */\n    uint8_t RESERVED0x1c[100];\n\n    /* 0x80 : i2c_fifo_config_0 */\n    union {\n        struct\n        {\n            uint32_t i2c_dma_tx_en     : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t i2c_dma_rx_en     : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t tx_fifo_clr       : 1;  /* [    2],        w1c,        0x0 */\n            uint32_t rx_fifo_clr       : 1;  /* [    3],        w1c,        0x0 */\n            uint32_t tx_fifo_overflow  : 1;  /* [    4],          r,        0x0 */\n            uint32_t tx_fifo_underflow : 1;  /* [    5],          r,        0x0 */\n            uint32_t rx_fifo_overflow  : 1;  /* [    6],          r,        0x0 */\n            uint32_t rx_fifo_underflow : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } i2c_fifo_config_0;\n\n    /* 0x84 : i2c_fifo_config_1 */\n    union {\n        struct\n        {\n            uint32_t tx_fifo_cnt    : 2; /* [ 1: 0],          r,        0x2 */\n            uint32_t reserved_2_7   : 6; /* [ 7: 2],       rsvd,        0x0 */\n            uint32_t rx_fifo_cnt    : 2; /* [ 9: 8],          r,        0x0 */\n            uint32_t reserved_10_15 : 6; /* [15:10],       rsvd,        0x0 */\n            uint32_t tx_fifo_th     : 1; /* [   16],        r/w,        0x0 */\n            uint32_t reserved_17_23 : 7; /* [23:17],       rsvd,        0x0 */\n            uint32_t rx_fifo_th     : 1; /* [   24],        r/w,        0x0 */\n            uint32_t reserved_25_31 : 7; /* [31:25],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } i2c_fifo_config_1;\n\n    /* 0x88 : i2c_fifo_wdata */\n    union {\n        struct\n        {\n            uint32_t i2c_fifo_wdata : 32; /* [31: 0],          w,          x */\n        } BF;\n        uint32_t WORD;\n    } i2c_fifo_wdata;\n\n    /* 0x8C : i2c_fifo_rdata */\n    union {\n        struct\n        {\n            uint32_t i2c_fifo_rdata : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } i2c_fifo_rdata;\n};\n\ntypedef volatile struct i2c_reg i2c_reg_t;\n\n#endif /* __I2C_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/i2s_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    i2s_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __I2S_REG_H__\n#define __I2S_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : i2s_config */\n#define I2S_CONFIG_OFFSET       (0x0)\n#define I2S_CR_I2S_M_EN         I2S_CR_I2S_M_EN\n#define I2S_CR_I2S_M_EN_POS     (0U)\n#define I2S_CR_I2S_M_EN_LEN     (1U)\n#define I2S_CR_I2S_M_EN_MSK     (((1U << I2S_CR_I2S_M_EN_LEN) - 1) << I2S_CR_I2S_M_EN_POS)\n#define I2S_CR_I2S_M_EN_UMSK    (~(((1U << I2S_CR_I2S_M_EN_LEN) - 1) << I2S_CR_I2S_M_EN_POS))\n#define I2S_CR_I2S_S_EN         I2S_CR_I2S_S_EN\n#define I2S_CR_I2S_S_EN_POS     (1U)\n#define I2S_CR_I2S_S_EN_LEN     (1U)\n#define I2S_CR_I2S_S_EN_MSK     (((1U << I2S_CR_I2S_S_EN_LEN) - 1) << I2S_CR_I2S_S_EN_POS)\n#define I2S_CR_I2S_S_EN_UMSK    (~(((1U << I2S_CR_I2S_S_EN_LEN) - 1) << I2S_CR_I2S_S_EN_POS))\n#define I2S_CR_I2S_TXD_EN       I2S_CR_I2S_TXD_EN\n#define I2S_CR_I2S_TXD_EN_POS   (2U)\n#define I2S_CR_I2S_TXD_EN_LEN   (1U)\n#define I2S_CR_I2S_TXD_EN_MSK   (((1U << I2S_CR_I2S_TXD_EN_LEN) - 1) << I2S_CR_I2S_TXD_EN_POS)\n#define I2S_CR_I2S_TXD_EN_UMSK  (~(((1U << I2S_CR_I2S_TXD_EN_LEN) - 1) << I2S_CR_I2S_TXD_EN_POS))\n#define I2S_CR_I2S_RXD_EN       I2S_CR_I2S_RXD_EN\n#define I2S_CR_I2S_RXD_EN_POS   (3U)\n#define I2S_CR_I2S_RXD_EN_LEN   (1U)\n#define I2S_CR_I2S_RXD_EN_MSK   (((1U << I2S_CR_I2S_RXD_EN_LEN) - 1) << I2S_CR_I2S_RXD_EN_POS)\n#define I2S_CR_I2S_RXD_EN_UMSK  (~(((1U << I2S_CR_I2S_RXD_EN_LEN) - 1) << I2S_CR_I2S_RXD_EN_POS))\n#define I2S_CR_MONO_MODE        I2S_CR_MONO_MODE\n#define I2S_CR_MONO_MODE_POS    (4U)\n#define I2S_CR_MONO_MODE_LEN    (1U)\n#define I2S_CR_MONO_MODE_MSK    (((1U << I2S_CR_MONO_MODE_LEN) - 1) << I2S_CR_MONO_MODE_POS)\n#define I2S_CR_MONO_MODE_UMSK   (~(((1U << I2S_CR_MONO_MODE_LEN) - 1) << I2S_CR_MONO_MODE_POS))\n#define I2S_CR_MUTE_MODE        I2S_CR_MUTE_MODE\n#define I2S_CR_MUTE_MODE_POS    (5U)\n#define I2S_CR_MUTE_MODE_LEN    (1U)\n#define I2S_CR_MUTE_MODE_MSK    (((1U << I2S_CR_MUTE_MODE_LEN) - 1) << I2S_CR_MUTE_MODE_POS)\n#define I2S_CR_MUTE_MODE_UMSK   (~(((1U << I2S_CR_MUTE_MODE_LEN) - 1) << I2S_CR_MUTE_MODE_POS))\n#define I2S_CR_FS_1T_MODE       I2S_CR_FS_1T_MODE\n#define I2S_CR_FS_1T_MODE_POS   (6U)\n#define I2S_CR_FS_1T_MODE_LEN   (1U)\n#define I2S_CR_FS_1T_MODE_MSK   (((1U << I2S_CR_FS_1T_MODE_LEN) - 1) << I2S_CR_FS_1T_MODE_POS)\n#define I2S_CR_FS_1T_MODE_UMSK  (~(((1U << I2S_CR_FS_1T_MODE_LEN) - 1) << I2S_CR_FS_1T_MODE_POS))\n#define I2S_CR_FS_4CH_MODE      I2S_CR_FS_4CH_MODE\n#define I2S_CR_FS_4CH_MODE_POS  (7U)\n#define I2S_CR_FS_4CH_MODE_LEN  (1U)\n#define I2S_CR_FS_4CH_MODE_MSK  (((1U << I2S_CR_FS_4CH_MODE_LEN) - 1) << I2S_CR_FS_4CH_MODE_POS)\n#define I2S_CR_FS_4CH_MODE_UMSK (~(((1U << I2S_CR_FS_4CH_MODE_LEN) - 1) << I2S_CR_FS_4CH_MODE_POS))\n#define I2S_CR_FS_3CH_MODE      I2S_CR_FS_3CH_MODE\n#define I2S_CR_FS_3CH_MODE_POS  (8U)\n#define I2S_CR_FS_3CH_MODE_LEN  (1U)\n#define I2S_CR_FS_3CH_MODE_MSK  (((1U << I2S_CR_FS_3CH_MODE_LEN) - 1) << I2S_CR_FS_3CH_MODE_POS)\n#define I2S_CR_FS_3CH_MODE_UMSK (~(((1U << I2S_CR_FS_3CH_MODE_LEN) - 1) << I2S_CR_FS_3CH_MODE_POS))\n#define I2S_CR_FRAME_SIZE       I2S_CR_FRAME_SIZE\n#define I2S_CR_FRAME_SIZE_POS   (12U)\n#define I2S_CR_FRAME_SIZE_LEN   (2U)\n#define I2S_CR_FRAME_SIZE_MSK   (((1U << I2S_CR_FRAME_SIZE_LEN) - 1) << I2S_CR_FRAME_SIZE_POS)\n#define I2S_CR_FRAME_SIZE_UMSK  (~(((1U << I2S_CR_FRAME_SIZE_LEN) - 1) << I2S_CR_FRAME_SIZE_POS))\n#define I2S_CR_DATA_SIZE        I2S_CR_DATA_SIZE\n#define I2S_CR_DATA_SIZE_POS    (14U)\n#define I2S_CR_DATA_SIZE_LEN    (2U)\n#define I2S_CR_DATA_SIZE_MSK    (((1U << I2S_CR_DATA_SIZE_LEN) - 1) << I2S_CR_DATA_SIZE_POS)\n#define I2S_CR_DATA_SIZE_UMSK   (~(((1U << I2S_CR_DATA_SIZE_LEN) - 1) << I2S_CR_DATA_SIZE_POS))\n#define I2S_CR_I2S_MODE         I2S_CR_I2S_MODE\n#define I2S_CR_I2S_MODE_POS     (16U)\n#define I2S_CR_I2S_MODE_LEN     (2U)\n#define I2S_CR_I2S_MODE_MSK     (((1U << I2S_CR_I2S_MODE_LEN) - 1) << I2S_CR_I2S_MODE_POS)\n#define I2S_CR_I2S_MODE_UMSK    (~(((1U << I2S_CR_I2S_MODE_LEN) - 1) << I2S_CR_I2S_MODE_POS))\n#define I2S_CR_ENDIAN           I2S_CR_ENDIAN\n#define I2S_CR_ENDIAN_POS       (18U)\n#define I2S_CR_ENDIAN_LEN       (1U)\n#define I2S_CR_ENDIAN_MSK       (((1U << I2S_CR_ENDIAN_LEN) - 1) << I2S_CR_ENDIAN_POS)\n#define I2S_CR_ENDIAN_UMSK      (~(((1U << I2S_CR_ENDIAN_LEN) - 1) << I2S_CR_ENDIAN_POS))\n#define I2S_CR_MONO_RX_CH       I2S_CR_MONO_RX_CH\n#define I2S_CR_MONO_RX_CH_POS   (19U)\n#define I2S_CR_MONO_RX_CH_LEN   (1U)\n#define I2S_CR_MONO_RX_CH_MSK   (((1U << I2S_CR_MONO_RX_CH_LEN) - 1) << I2S_CR_MONO_RX_CH_POS)\n#define I2S_CR_MONO_RX_CH_UMSK  (~(((1U << I2S_CR_MONO_RX_CH_LEN) - 1) << I2S_CR_MONO_RX_CH_POS))\n#define I2S_CR_OFS_CNT          I2S_CR_OFS_CNT\n#define I2S_CR_OFS_CNT_POS      (20U)\n#define I2S_CR_OFS_CNT_LEN      (5U)\n#define I2S_CR_OFS_CNT_MSK      (((1U << I2S_CR_OFS_CNT_LEN) - 1) << I2S_CR_OFS_CNT_POS)\n#define I2S_CR_OFS_CNT_UMSK     (~(((1U << I2S_CR_OFS_CNT_LEN) - 1) << I2S_CR_OFS_CNT_POS))\n#define I2S_CR_OFS_EN           I2S_CR_OFS_EN\n#define I2S_CR_OFS_EN_POS       (25U)\n#define I2S_CR_OFS_EN_LEN       (1U)\n#define I2S_CR_OFS_EN_MSK       (((1U << I2S_CR_OFS_EN_LEN) - 1) << I2S_CR_OFS_EN_POS)\n#define I2S_CR_OFS_EN_UMSK      (~(((1U << I2S_CR_OFS_EN_LEN) - 1) << I2S_CR_OFS_EN_POS))\n\n/* 0x4 : i2s_int_sts */\n#define I2S_INT_STS_OFFSET       (0x4)\n#define I2S_TXF_INT              I2S_TXF_INT\n#define I2S_TXF_INT_POS          (0U)\n#define I2S_TXF_INT_LEN          (1U)\n#define I2S_TXF_INT_MSK          (((1U << I2S_TXF_INT_LEN) - 1) << I2S_TXF_INT_POS)\n#define I2S_TXF_INT_UMSK         (~(((1U << I2S_TXF_INT_LEN) - 1) << I2S_TXF_INT_POS))\n#define I2S_RXF_INT              I2S_RXF_INT\n#define I2S_RXF_INT_POS          (1U)\n#define I2S_RXF_INT_LEN          (1U)\n#define I2S_RXF_INT_MSK          (((1U << I2S_RXF_INT_LEN) - 1) << I2S_RXF_INT_POS)\n#define I2S_RXF_INT_UMSK         (~(((1U << I2S_RXF_INT_LEN) - 1) << I2S_RXF_INT_POS))\n#define I2S_FER_INT              I2S_FER_INT\n#define I2S_FER_INT_POS          (2U)\n#define I2S_FER_INT_LEN          (1U)\n#define I2S_FER_INT_MSK          (((1U << I2S_FER_INT_LEN) - 1) << I2S_FER_INT_POS)\n#define I2S_FER_INT_UMSK         (~(((1U << I2S_FER_INT_LEN) - 1) << I2S_FER_INT_POS))\n#define I2S_CR_I2S_TXF_MASK      I2S_CR_I2S_TXF_MASK\n#define I2S_CR_I2S_TXF_MASK_POS  (8U)\n#define I2S_CR_I2S_TXF_MASK_LEN  (1U)\n#define I2S_CR_I2S_TXF_MASK_MSK  (((1U << I2S_CR_I2S_TXF_MASK_LEN) - 1) << I2S_CR_I2S_TXF_MASK_POS)\n#define I2S_CR_I2S_TXF_MASK_UMSK (~(((1U << I2S_CR_I2S_TXF_MASK_LEN) - 1) << I2S_CR_I2S_TXF_MASK_POS))\n#define I2S_CR_I2S_RXF_MASK      I2S_CR_I2S_RXF_MASK\n#define I2S_CR_I2S_RXF_MASK_POS  (9U)\n#define I2S_CR_I2S_RXF_MASK_LEN  (1U)\n#define I2S_CR_I2S_RXF_MASK_MSK  (((1U << I2S_CR_I2S_RXF_MASK_LEN) - 1) << I2S_CR_I2S_RXF_MASK_POS)\n#define I2S_CR_I2S_RXF_MASK_UMSK (~(((1U << I2S_CR_I2S_RXF_MASK_LEN) - 1) << I2S_CR_I2S_RXF_MASK_POS))\n#define I2S_CR_I2S_FER_MASK      I2S_CR_I2S_FER_MASK\n#define I2S_CR_I2S_FER_MASK_POS  (10U)\n#define I2S_CR_I2S_FER_MASK_LEN  (1U)\n#define I2S_CR_I2S_FER_MASK_MSK  (((1U << I2S_CR_I2S_FER_MASK_LEN) - 1) << I2S_CR_I2S_FER_MASK_POS)\n#define I2S_CR_I2S_FER_MASK_UMSK (~(((1U << I2S_CR_I2S_FER_MASK_LEN) - 1) << I2S_CR_I2S_FER_MASK_POS))\n#define I2S_CR_I2S_TXF_EN        I2S_CR_I2S_TXF_EN\n#define I2S_CR_I2S_TXF_EN_POS    (24U)\n#define I2S_CR_I2S_TXF_EN_LEN    (1U)\n#define I2S_CR_I2S_TXF_EN_MSK    (((1U << I2S_CR_I2S_TXF_EN_LEN) - 1) << I2S_CR_I2S_TXF_EN_POS)\n#define I2S_CR_I2S_TXF_EN_UMSK   (~(((1U << I2S_CR_I2S_TXF_EN_LEN) - 1) << I2S_CR_I2S_TXF_EN_POS))\n#define I2S_CR_I2S_RXF_EN        I2S_CR_I2S_RXF_EN\n#define I2S_CR_I2S_RXF_EN_POS    (25U)\n#define I2S_CR_I2S_RXF_EN_LEN    (1U)\n#define I2S_CR_I2S_RXF_EN_MSK    (((1U << I2S_CR_I2S_RXF_EN_LEN) - 1) << I2S_CR_I2S_RXF_EN_POS)\n#define I2S_CR_I2S_RXF_EN_UMSK   (~(((1U << I2S_CR_I2S_RXF_EN_LEN) - 1) << I2S_CR_I2S_RXF_EN_POS))\n#define I2S_CR_I2S_FER_EN        I2S_CR_I2S_FER_EN\n#define I2S_CR_I2S_FER_EN_POS    (26U)\n#define I2S_CR_I2S_FER_EN_LEN    (1U)\n#define I2S_CR_I2S_FER_EN_MSK    (((1U << I2S_CR_I2S_FER_EN_LEN) - 1) << I2S_CR_I2S_FER_EN_POS)\n#define I2S_CR_I2S_FER_EN_UMSK   (~(((1U << I2S_CR_I2S_FER_EN_LEN) - 1) << I2S_CR_I2S_FER_EN_POS))\n\n/* 0x10 : i2s_bclk_config */\n#define I2S_BCLK_CONFIG_OFFSET (0x10)\n#define I2S_CR_BCLK_DIV_L      I2S_CR_BCLK_DIV_L\n#define I2S_CR_BCLK_DIV_L_POS  (0U)\n#define I2S_CR_BCLK_DIV_L_LEN  (12U)\n#define I2S_CR_BCLK_DIV_L_MSK  (((1U << I2S_CR_BCLK_DIV_L_LEN) - 1) << I2S_CR_BCLK_DIV_L_POS)\n#define I2S_CR_BCLK_DIV_L_UMSK (~(((1U << I2S_CR_BCLK_DIV_L_LEN) - 1) << I2S_CR_BCLK_DIV_L_POS))\n#define I2S_CR_BCLK_DIV_H      I2S_CR_BCLK_DIV_H\n#define I2S_CR_BCLK_DIV_H_POS  (16U)\n#define I2S_CR_BCLK_DIV_H_LEN  (12U)\n#define I2S_CR_BCLK_DIV_H_MSK  (((1U << I2S_CR_BCLK_DIV_H_LEN) - 1) << I2S_CR_BCLK_DIV_H_POS)\n#define I2S_CR_BCLK_DIV_H_UMSK (~(((1U << I2S_CR_BCLK_DIV_H_LEN) - 1) << I2S_CR_BCLK_DIV_H_POS))\n\n/* 0x80 : i2s_fifo_config_0 */\n#define I2S_FIFO_CONFIG_0_OFFSET   (0x80)\n#define I2S_DMA_TX_EN              I2S_DMA_TX_EN\n#define I2S_DMA_TX_EN_POS          (0U)\n#define I2S_DMA_TX_EN_LEN          (1U)\n#define I2S_DMA_TX_EN_MSK          (((1U << I2S_DMA_TX_EN_LEN) - 1) << I2S_DMA_TX_EN_POS)\n#define I2S_DMA_TX_EN_UMSK         (~(((1U << I2S_DMA_TX_EN_LEN) - 1) << I2S_DMA_TX_EN_POS))\n#define I2S_DMA_RX_EN              I2S_DMA_RX_EN\n#define I2S_DMA_RX_EN_POS          (1U)\n#define I2S_DMA_RX_EN_LEN          (1U)\n#define I2S_DMA_RX_EN_MSK          (((1U << I2S_DMA_RX_EN_LEN) - 1) << I2S_DMA_RX_EN_POS)\n#define I2S_DMA_RX_EN_UMSK         (~(((1U << I2S_DMA_RX_EN_LEN) - 1) << I2S_DMA_RX_EN_POS))\n#define I2S_TX_FIFO_CLR            I2S_TX_FIFO_CLR\n#define I2S_TX_FIFO_CLR_POS        (2U)\n#define I2S_TX_FIFO_CLR_LEN        (1U)\n#define I2S_TX_FIFO_CLR_MSK        (((1U << I2S_TX_FIFO_CLR_LEN) - 1) << I2S_TX_FIFO_CLR_POS)\n#define I2S_TX_FIFO_CLR_UMSK       (~(((1U << I2S_TX_FIFO_CLR_LEN) - 1) << I2S_TX_FIFO_CLR_POS))\n#define I2S_RX_FIFO_CLR            I2S_RX_FIFO_CLR\n#define I2S_RX_FIFO_CLR_POS        (3U)\n#define I2S_RX_FIFO_CLR_LEN        (1U)\n#define I2S_RX_FIFO_CLR_MSK        (((1U << I2S_RX_FIFO_CLR_LEN) - 1) << I2S_RX_FIFO_CLR_POS)\n#define I2S_RX_FIFO_CLR_UMSK       (~(((1U << I2S_RX_FIFO_CLR_LEN) - 1) << I2S_RX_FIFO_CLR_POS))\n#define I2S_TX_FIFO_OVERFLOW       I2S_TX_FIFO_OVERFLOW\n#define I2S_TX_FIFO_OVERFLOW_POS   (4U)\n#define I2S_TX_FIFO_OVERFLOW_LEN   (1U)\n#define I2S_TX_FIFO_OVERFLOW_MSK   (((1U << I2S_TX_FIFO_OVERFLOW_LEN) - 1) << I2S_TX_FIFO_OVERFLOW_POS)\n#define I2S_TX_FIFO_OVERFLOW_UMSK  (~(((1U << I2S_TX_FIFO_OVERFLOW_LEN) - 1) << I2S_TX_FIFO_OVERFLOW_POS))\n#define I2S_TX_FIFO_UNDERFLOW      I2S_TX_FIFO_UNDERFLOW\n#define I2S_TX_FIFO_UNDERFLOW_POS  (5U)\n#define I2S_TX_FIFO_UNDERFLOW_LEN  (1U)\n#define I2S_TX_FIFO_UNDERFLOW_MSK  (((1U << I2S_TX_FIFO_UNDERFLOW_LEN) - 1) << I2S_TX_FIFO_UNDERFLOW_POS)\n#define I2S_TX_FIFO_UNDERFLOW_UMSK (~(((1U << I2S_TX_FIFO_UNDERFLOW_LEN) - 1) << I2S_TX_FIFO_UNDERFLOW_POS))\n#define I2S_RX_FIFO_OVERFLOW       I2S_RX_FIFO_OVERFLOW\n#define I2S_RX_FIFO_OVERFLOW_POS   (6U)\n#define I2S_RX_FIFO_OVERFLOW_LEN   (1U)\n#define I2S_RX_FIFO_OVERFLOW_MSK   (((1U << I2S_RX_FIFO_OVERFLOW_LEN) - 1) << I2S_RX_FIFO_OVERFLOW_POS)\n#define I2S_RX_FIFO_OVERFLOW_UMSK  (~(((1U << I2S_RX_FIFO_OVERFLOW_LEN) - 1) << I2S_RX_FIFO_OVERFLOW_POS))\n#define I2S_RX_FIFO_UNDERFLOW      I2S_RX_FIFO_UNDERFLOW\n#define I2S_RX_FIFO_UNDERFLOW_POS  (7U)\n#define I2S_RX_FIFO_UNDERFLOW_LEN  (1U)\n#define I2S_RX_FIFO_UNDERFLOW_MSK  (((1U << I2S_RX_FIFO_UNDERFLOW_LEN) - 1) << I2S_RX_FIFO_UNDERFLOW_POS)\n#define I2S_RX_FIFO_UNDERFLOW_UMSK (~(((1U << I2S_RX_FIFO_UNDERFLOW_LEN) - 1) << I2S_RX_FIFO_UNDERFLOW_POS))\n#define I2S_CR_FIFO_LR_MERGE       I2S_CR_FIFO_LR_MERGE\n#define I2S_CR_FIFO_LR_MERGE_POS   (8U)\n#define I2S_CR_FIFO_LR_MERGE_LEN   (1U)\n#define I2S_CR_FIFO_LR_MERGE_MSK   (((1U << I2S_CR_FIFO_LR_MERGE_LEN) - 1) << I2S_CR_FIFO_LR_MERGE_POS)\n#define I2S_CR_FIFO_LR_MERGE_UMSK  (~(((1U << I2S_CR_FIFO_LR_MERGE_LEN) - 1) << I2S_CR_FIFO_LR_MERGE_POS))\n#define I2S_CR_FIFO_LR_EXCHG       I2S_CR_FIFO_LR_EXCHG\n#define I2S_CR_FIFO_LR_EXCHG_POS   (9U)\n#define I2S_CR_FIFO_LR_EXCHG_LEN   (1U)\n#define I2S_CR_FIFO_LR_EXCHG_MSK   (((1U << I2S_CR_FIFO_LR_EXCHG_LEN) - 1) << I2S_CR_FIFO_LR_EXCHG_POS)\n#define I2S_CR_FIFO_LR_EXCHG_UMSK  (~(((1U << I2S_CR_FIFO_LR_EXCHG_LEN) - 1) << I2S_CR_FIFO_LR_EXCHG_POS))\n#define I2S_CR_FIFO_24B_LJ         I2S_CR_FIFO_24B_LJ\n#define I2S_CR_FIFO_24B_LJ_POS     (10U)\n#define I2S_CR_FIFO_24B_LJ_LEN     (1U)\n#define I2S_CR_FIFO_24B_LJ_MSK     (((1U << I2S_CR_FIFO_24B_LJ_LEN) - 1) << I2S_CR_FIFO_24B_LJ_POS)\n#define I2S_CR_FIFO_24B_LJ_UMSK    (~(((1U << I2S_CR_FIFO_24B_LJ_LEN) - 1) << I2S_CR_FIFO_24B_LJ_POS))\n\n/* 0x84 : i2s_fifo_config_1 */\n#define I2S_FIFO_CONFIG_1_OFFSET (0x84)\n#define I2S_TX_FIFO_CNT          I2S_TX_FIFO_CNT\n#define I2S_TX_FIFO_CNT_POS      (0U)\n#define I2S_TX_FIFO_CNT_LEN      (5U)\n#define I2S_TX_FIFO_CNT_MSK      (((1U << I2S_TX_FIFO_CNT_LEN) - 1) << I2S_TX_FIFO_CNT_POS)\n#define I2S_TX_FIFO_CNT_UMSK     (~(((1U << I2S_TX_FIFO_CNT_LEN) - 1) << I2S_TX_FIFO_CNT_POS))\n#define I2S_RX_FIFO_CNT          I2S_RX_FIFO_CNT\n#define I2S_RX_FIFO_CNT_POS      (8U)\n#define I2S_RX_FIFO_CNT_LEN      (5U)\n#define I2S_RX_FIFO_CNT_MSK      (((1U << I2S_RX_FIFO_CNT_LEN) - 1) << I2S_RX_FIFO_CNT_POS)\n#define I2S_RX_FIFO_CNT_UMSK     (~(((1U << I2S_RX_FIFO_CNT_LEN) - 1) << I2S_RX_FIFO_CNT_POS))\n#define I2S_TX_FIFO_TH           I2S_TX_FIFO_TH\n#define I2S_TX_FIFO_TH_POS       (16U)\n#define I2S_TX_FIFO_TH_LEN       (4U)\n#define I2S_TX_FIFO_TH_MSK       (((1U << I2S_TX_FIFO_TH_LEN) - 1) << I2S_TX_FIFO_TH_POS)\n#define I2S_TX_FIFO_TH_UMSK      (~(((1U << I2S_TX_FIFO_TH_LEN) - 1) << I2S_TX_FIFO_TH_POS))\n#define I2S_RX_FIFO_TH           I2S_RX_FIFO_TH\n#define I2S_RX_FIFO_TH_POS       (24U)\n#define I2S_RX_FIFO_TH_LEN       (4U)\n#define I2S_RX_FIFO_TH_MSK       (((1U << I2S_RX_FIFO_TH_LEN) - 1) << I2S_RX_FIFO_TH_POS)\n#define I2S_RX_FIFO_TH_UMSK      (~(((1U << I2S_RX_FIFO_TH_LEN) - 1) << I2S_RX_FIFO_TH_POS))\n\n/* 0x88 : i2s_fifo_wdata */\n#define I2S_FIFO_WDATA_OFFSET (0x88)\n#define I2S_FIFO_WDATA        I2S_FIFO_WDATA\n#define I2S_FIFO_WDATA_POS    (0U)\n#define I2S_FIFO_WDATA_LEN    (32U)\n#define I2S_FIFO_WDATA_MSK    (((1U << I2S_FIFO_WDATA_LEN) - 1) << I2S_FIFO_WDATA_POS)\n#define I2S_FIFO_WDATA_UMSK   (~(((1U << I2S_FIFO_WDATA_LEN) - 1) << I2S_FIFO_WDATA_POS))\n\n/* 0x8C : i2s_fifo_rdata */\n#define I2S_FIFO_RDATA_OFFSET (0x8C)\n#define I2S_FIFO_RDATA        I2S_FIFO_RDATA\n#define I2S_FIFO_RDATA_POS    (0U)\n#define I2S_FIFO_RDATA_LEN    (32U)\n#define I2S_FIFO_RDATA_MSK    (((1U << I2S_FIFO_RDATA_LEN) - 1) << I2S_FIFO_RDATA_POS)\n#define I2S_FIFO_RDATA_UMSK   (~(((1U << I2S_FIFO_RDATA_LEN) - 1) << I2S_FIFO_RDATA_POS))\n\n/* 0xFC : i2s_io_config */\n#define I2S_IO_CONFIG_OFFSET     (0xFC)\n#define I2S_CR_I2S_TXD_INV       I2S_CR_I2S_TXD_INV\n#define I2S_CR_I2S_TXD_INV_POS   (0U)\n#define I2S_CR_I2S_TXD_INV_LEN   (1U)\n#define I2S_CR_I2S_TXD_INV_MSK   (((1U << I2S_CR_I2S_TXD_INV_LEN) - 1) << I2S_CR_I2S_TXD_INV_POS)\n#define I2S_CR_I2S_TXD_INV_UMSK  (~(((1U << I2S_CR_I2S_TXD_INV_LEN) - 1) << I2S_CR_I2S_TXD_INV_POS))\n#define I2S_CR_I2S_RXD_INV       I2S_CR_I2S_RXD_INV\n#define I2S_CR_I2S_RXD_INV_POS   (1U)\n#define I2S_CR_I2S_RXD_INV_LEN   (1U)\n#define I2S_CR_I2S_RXD_INV_MSK   (((1U << I2S_CR_I2S_RXD_INV_LEN) - 1) << I2S_CR_I2S_RXD_INV_POS)\n#define I2S_CR_I2S_RXD_INV_UMSK  (~(((1U << I2S_CR_I2S_RXD_INV_LEN) - 1) << I2S_CR_I2S_RXD_INV_POS))\n#define I2S_CR_I2S_FS_INV        I2S_CR_I2S_FS_INV\n#define I2S_CR_I2S_FS_INV_POS    (2U)\n#define I2S_CR_I2S_FS_INV_LEN    (1U)\n#define I2S_CR_I2S_FS_INV_MSK    (((1U << I2S_CR_I2S_FS_INV_LEN) - 1) << I2S_CR_I2S_FS_INV_POS)\n#define I2S_CR_I2S_FS_INV_UMSK   (~(((1U << I2S_CR_I2S_FS_INV_LEN) - 1) << I2S_CR_I2S_FS_INV_POS))\n#define I2S_CR_I2S_BCLK_INV      I2S_CR_I2S_BCLK_INV\n#define I2S_CR_I2S_BCLK_INV_POS  (3U)\n#define I2S_CR_I2S_BCLK_INV_LEN  (1U)\n#define I2S_CR_I2S_BCLK_INV_MSK  (((1U << I2S_CR_I2S_BCLK_INV_LEN) - 1) << I2S_CR_I2S_BCLK_INV_POS)\n#define I2S_CR_I2S_BCLK_INV_UMSK (~(((1U << I2S_CR_I2S_BCLK_INV_LEN) - 1) << I2S_CR_I2S_BCLK_INV_POS))\n#define I2S_CR_DEG_CNT           I2S_CR_DEG_CNT\n#define I2S_CR_DEG_CNT_POS       (4U)\n#define I2S_CR_DEG_CNT_LEN       (3U)\n#define I2S_CR_DEG_CNT_MSK       (((1U << I2S_CR_DEG_CNT_LEN) - 1) << I2S_CR_DEG_CNT_POS)\n#define I2S_CR_DEG_CNT_UMSK      (~(((1U << I2S_CR_DEG_CNT_LEN) - 1) << I2S_CR_DEG_CNT_POS))\n#define I2S_CR_DEG_EN            I2S_CR_DEG_EN\n#define I2S_CR_DEG_EN_POS        (7U)\n#define I2S_CR_DEG_EN_LEN        (1U)\n#define I2S_CR_DEG_EN_MSK        (((1U << I2S_CR_DEG_EN_LEN) - 1) << I2S_CR_DEG_EN_POS)\n#define I2S_CR_DEG_EN_UMSK       (~(((1U << I2S_CR_DEG_EN_LEN) - 1) << I2S_CR_DEG_EN_POS))\n\nstruct i2s_reg {\n    /* 0x0 : i2s_config */\n    union {\n        struct\n        {\n            uint32_t cr_i2s_m_en    : 1; /* [    0],        r/w,        0x0 */\n            uint32_t cr_i2s_s_en    : 1; /* [    1],        r/w,        0x0 */\n            uint32_t cr_i2s_txd_en  : 1; /* [    2],        r/w,        0x0 */\n            uint32_t cr_i2s_rxd_en  : 1; /* [    3],        r/w,        0x0 */\n            uint32_t cr_mono_mode   : 1; /* [    4],        r/w,        0x0 */\n            uint32_t cr_mute_mode   : 1; /* [    5],        r/w,        0x0 */\n            uint32_t cr_fs_1t_mode  : 1; /* [    6],        r/w,        0x0 */\n            uint32_t cr_fs_4ch_mode : 1; /* [    7],        r/w,        0x0 */\n            uint32_t cr_fs_3ch_mode : 1; /* [    8],        r/w,        0x0 */\n            uint32_t reserved_9_11  : 3; /* [11: 9],       rsvd,        0x0 */\n            uint32_t cr_frame_size  : 2; /* [13:12],        r/w,        0x1 */\n            uint32_t cr_data_size   : 2; /* [15:14],        r/w,        0x1 */\n            uint32_t cr_i2s_mode    : 2; /* [17:16],        r/w,        0x0 */\n            uint32_t cr_endian      : 1; /* [   18],        r/w,        0x0 */\n            uint32_t cr_mono_rx_ch  : 1; /* [   19],        r/w,        0x0 */\n            uint32_t cr_ofs_cnt     : 5; /* [24:20],        r/w,        0x0 */\n            uint32_t cr_ofs_en      : 1; /* [   25],        r/w,        0x0 */\n            uint32_t reserved_26_31 : 6; /* [31:26],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } i2s_config;\n\n    /* 0x4 : i2s_int_sts */\n    union {\n        struct\n        {\n            uint32_t i2s_txf_int     : 1;  /* [    0],          r,        0x0 */\n            uint32_t i2s_rxf_int     : 1;  /* [    1],          r,        0x0 */\n            uint32_t i2s_fer_int     : 1;  /* [    2],          r,        0x0 */\n            uint32_t reserved_3_7    : 5;  /* [ 7: 3],       rsvd,        0x0 */\n            uint32_t cr_i2s_txf_mask : 1;  /* [    8],        r/w,        0x1 */\n            uint32_t cr_i2s_rxf_mask : 1;  /* [    9],        r/w,        0x1 */\n            uint32_t cr_i2s_fer_mask : 1;  /* [   10],        r/w,        0x1 */\n            uint32_t reserved_11_23  : 13; /* [23:11],       rsvd,        0x0 */\n            uint32_t cr_i2s_txf_en   : 1;  /* [   24],        r/w,        0x1 */\n            uint32_t cr_i2s_rxf_en   : 1;  /* [   25],        r/w,        0x1 */\n            uint32_t cr_i2s_fer_en   : 1;  /* [   26],        r/w,        0x1 */\n            uint32_t reserved_27_31  : 5;  /* [31:27],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } i2s_int_sts;\n\n    /* 0x8  reserved */\n    uint8_t RESERVED0x8[8];\n\n    /* 0x10 : i2s_bclk_config */\n    union {\n        struct\n        {\n            uint32_t cr_bclk_div_l  : 12; /* [11: 0],        r/w,        0x1 */\n            uint32_t reserved_12_15 : 4;  /* [15:12],       rsvd,        0x0 */\n            uint32_t cr_bclk_div_h  : 12; /* [27:16],        r/w,        0x1 */\n            uint32_t reserved_28_31 : 4;  /* [31:28],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } i2s_bclk_config;\n\n    /* 0x14  reserved */\n    uint8_t RESERVED0x14[108];\n\n    /* 0x80 : i2s_fifo_config_0 */\n    union {\n        struct\n        {\n            uint32_t i2s_dma_tx_en     : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t i2s_dma_rx_en     : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t tx_fifo_clr       : 1;  /* [    2],        w1c,        0x0 */\n            uint32_t rx_fifo_clr       : 1;  /* [    3],        w1c,        0x0 */\n            uint32_t tx_fifo_overflow  : 1;  /* [    4],          r,        0x0 */\n            uint32_t tx_fifo_underflow : 1;  /* [    5],          r,        0x0 */\n            uint32_t rx_fifo_overflow  : 1;  /* [    6],          r,        0x0 */\n            uint32_t rx_fifo_underflow : 1;  /* [    7],          r,        0x0 */\n            uint32_t cr_fifo_lr_merge  : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t cr_fifo_lr_exchg  : 1;  /* [    9],        r/w,        0x0 */\n            uint32_t cr_fifo_24b_lj    : 1;  /* [   10],        r/w,        0x0 */\n            uint32_t reserved_11_31    : 21; /* [31:11],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } i2s_fifo_config_0;\n\n    /* 0x84 : i2s_fifo_config_1 */\n    union {\n        struct\n        {\n            uint32_t tx_fifo_cnt    : 5; /* [ 4: 0],          r,       0x10 */\n            uint32_t reserved_5_7   : 3; /* [ 7: 5],       rsvd,        0x0 */\n            uint32_t rx_fifo_cnt    : 5; /* [12: 8],          r,        0x0 */\n            uint32_t reserved_13_15 : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t tx_fifo_th     : 4; /* [19:16],        r/w,        0x0 */\n            uint32_t reserved_20_23 : 4; /* [23:20],       rsvd,        0x0 */\n            uint32_t rx_fifo_th     : 4; /* [27:24],        r/w,        0x0 */\n            uint32_t reserved_28_31 : 4; /* [31:28],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } i2s_fifo_config_1;\n\n    /* 0x88 : i2s_fifo_wdata */\n    union {\n        struct\n        {\n            uint32_t i2s_fifo_wdata : 32; /* [31: 0],          w,          x */\n        } BF;\n        uint32_t WORD;\n    } i2s_fifo_wdata;\n\n    /* 0x8C : i2s_fifo_rdata */\n    union {\n        struct\n        {\n            uint32_t i2s_fifo_rdata : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } i2s_fifo_rdata;\n\n    /* 0x90  reserved */\n    uint8_t RESERVED0x90[108];\n\n    /* 0xFC : i2s_io_config */\n    union {\n        struct\n        {\n            uint32_t cr_i2s_txd_inv  : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t cr_i2s_rxd_inv  : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t cr_i2s_fs_inv   : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t cr_i2s_bclk_inv : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t cr_deg_cnt      : 3;  /* [ 6: 4],        r/w,        0x0 */\n            uint32_t cr_deg_en       : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t reserved_8_31   : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } i2s_io_config;\n};\n\ntypedef volatile struct i2s_reg i2s_reg_t;\n\n#endif /* __I2S_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/ir_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    ir_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __IR_REG_H__\n#define __IR_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : irtx_config */\n#define IRTX_CONFIG_OFFSET            (0x0)\n#define IR_CR_IRTX_EN                 IR_CR_IRTX_EN\n#define IR_CR_IRTX_EN_POS             (0U)\n#define IR_CR_IRTX_EN_LEN             (1U)\n#define IR_CR_IRTX_EN_MSK             (((1U << IR_CR_IRTX_EN_LEN) - 1) << IR_CR_IRTX_EN_POS)\n#define IR_CR_IRTX_EN_UMSK            (~(((1U << IR_CR_IRTX_EN_LEN) - 1) << IR_CR_IRTX_EN_POS))\n#define IR_CR_IRTX_OUT_INV            IR_CR_IRTX_OUT_INV\n#define IR_CR_IRTX_OUT_INV_POS        (1U)\n#define IR_CR_IRTX_OUT_INV_LEN        (1U)\n#define IR_CR_IRTX_OUT_INV_MSK        (((1U << IR_CR_IRTX_OUT_INV_LEN) - 1) << IR_CR_IRTX_OUT_INV_POS)\n#define IR_CR_IRTX_OUT_INV_UMSK       (~(((1U << IR_CR_IRTX_OUT_INV_LEN) - 1) << IR_CR_IRTX_OUT_INV_POS))\n#define IR_CR_IRTX_MOD_EN             IR_CR_IRTX_MOD_EN\n#define IR_CR_IRTX_MOD_EN_POS         (2U)\n#define IR_CR_IRTX_MOD_EN_LEN         (1U)\n#define IR_CR_IRTX_MOD_EN_MSK         (((1U << IR_CR_IRTX_MOD_EN_LEN) - 1) << IR_CR_IRTX_MOD_EN_POS)\n#define IR_CR_IRTX_MOD_EN_UMSK        (~(((1U << IR_CR_IRTX_MOD_EN_LEN) - 1) << IR_CR_IRTX_MOD_EN_POS))\n#define IR_CR_IRTX_SWM_EN             IR_CR_IRTX_SWM_EN\n#define IR_CR_IRTX_SWM_EN_POS         (3U)\n#define IR_CR_IRTX_SWM_EN_LEN         (1U)\n#define IR_CR_IRTX_SWM_EN_MSK         (((1U << IR_CR_IRTX_SWM_EN_LEN) - 1) << IR_CR_IRTX_SWM_EN_POS)\n#define IR_CR_IRTX_SWM_EN_UMSK        (~(((1U << IR_CR_IRTX_SWM_EN_LEN) - 1) << IR_CR_IRTX_SWM_EN_POS))\n#define IR_CR_IRTX_DATA_EN            IR_CR_IRTX_DATA_EN\n#define IR_CR_IRTX_DATA_EN_POS        (4U)\n#define IR_CR_IRTX_DATA_EN_LEN        (1U)\n#define IR_CR_IRTX_DATA_EN_MSK        (((1U << IR_CR_IRTX_DATA_EN_LEN) - 1) << IR_CR_IRTX_DATA_EN_POS)\n#define IR_CR_IRTX_DATA_EN_UMSK       (~(((1U << IR_CR_IRTX_DATA_EN_LEN) - 1) << IR_CR_IRTX_DATA_EN_POS))\n#define IR_CR_IRTX_LOGIC0_HL_INV      IR_CR_IRTX_LOGIC0_HL_INV\n#define IR_CR_IRTX_LOGIC0_HL_INV_POS  (5U)\n#define IR_CR_IRTX_LOGIC0_HL_INV_LEN  (1U)\n#define IR_CR_IRTX_LOGIC0_HL_INV_MSK  (((1U << IR_CR_IRTX_LOGIC0_HL_INV_LEN) - 1) << IR_CR_IRTX_LOGIC0_HL_INV_POS)\n#define IR_CR_IRTX_LOGIC0_HL_INV_UMSK (~(((1U << IR_CR_IRTX_LOGIC0_HL_INV_LEN) - 1) << IR_CR_IRTX_LOGIC0_HL_INV_POS))\n#define IR_CR_IRTX_LOGIC1_HL_INV      IR_CR_IRTX_LOGIC1_HL_INV\n#define IR_CR_IRTX_LOGIC1_HL_INV_POS  (6U)\n#define IR_CR_IRTX_LOGIC1_HL_INV_LEN  (1U)\n#define IR_CR_IRTX_LOGIC1_HL_INV_MSK  (((1U << IR_CR_IRTX_LOGIC1_HL_INV_LEN) - 1) << IR_CR_IRTX_LOGIC1_HL_INV_POS)\n#define IR_CR_IRTX_LOGIC1_HL_INV_UMSK (~(((1U << IR_CR_IRTX_LOGIC1_HL_INV_LEN) - 1) << IR_CR_IRTX_LOGIC1_HL_INV_POS))\n#define IR_CR_IRTX_HEAD_EN            IR_CR_IRTX_HEAD_EN\n#define IR_CR_IRTX_HEAD_EN_POS        (8U)\n#define IR_CR_IRTX_HEAD_EN_LEN        (1U)\n#define IR_CR_IRTX_HEAD_EN_MSK        (((1U << IR_CR_IRTX_HEAD_EN_LEN) - 1) << IR_CR_IRTX_HEAD_EN_POS)\n#define IR_CR_IRTX_HEAD_EN_UMSK       (~(((1U << IR_CR_IRTX_HEAD_EN_LEN) - 1) << IR_CR_IRTX_HEAD_EN_POS))\n#define IR_CR_IRTX_HEAD_HL_INV        IR_CR_IRTX_HEAD_HL_INV\n#define IR_CR_IRTX_HEAD_HL_INV_POS    (9U)\n#define IR_CR_IRTX_HEAD_HL_INV_LEN    (1U)\n#define IR_CR_IRTX_HEAD_HL_INV_MSK    (((1U << IR_CR_IRTX_HEAD_HL_INV_LEN) - 1) << IR_CR_IRTX_HEAD_HL_INV_POS)\n#define IR_CR_IRTX_HEAD_HL_INV_UMSK   (~(((1U << IR_CR_IRTX_HEAD_HL_INV_LEN) - 1) << IR_CR_IRTX_HEAD_HL_INV_POS))\n#define IR_CR_IRTX_TAIL_EN            IR_CR_IRTX_TAIL_EN\n#define IR_CR_IRTX_TAIL_EN_POS        (10U)\n#define IR_CR_IRTX_TAIL_EN_LEN        (1U)\n#define IR_CR_IRTX_TAIL_EN_MSK        (((1U << IR_CR_IRTX_TAIL_EN_LEN) - 1) << IR_CR_IRTX_TAIL_EN_POS)\n#define IR_CR_IRTX_TAIL_EN_UMSK       (~(((1U << IR_CR_IRTX_TAIL_EN_LEN) - 1) << IR_CR_IRTX_TAIL_EN_POS))\n#define IR_CR_IRTX_TAIL_HL_INV        IR_CR_IRTX_TAIL_HL_INV\n#define IR_CR_IRTX_TAIL_HL_INV_POS    (11U)\n#define IR_CR_IRTX_TAIL_HL_INV_LEN    (1U)\n#define IR_CR_IRTX_TAIL_HL_INV_MSK    (((1U << IR_CR_IRTX_TAIL_HL_INV_LEN) - 1) << IR_CR_IRTX_TAIL_HL_INV_POS)\n#define IR_CR_IRTX_TAIL_HL_INV_UMSK   (~(((1U << IR_CR_IRTX_TAIL_HL_INV_LEN) - 1) << IR_CR_IRTX_TAIL_HL_INV_POS))\n#define IR_CR_IRTX_DATA_NUM           IR_CR_IRTX_DATA_NUM\n#define IR_CR_IRTX_DATA_NUM_POS       (12U)\n#define IR_CR_IRTX_DATA_NUM_LEN       (6U)\n#define IR_CR_IRTX_DATA_NUM_MSK       (((1U << IR_CR_IRTX_DATA_NUM_LEN) - 1) << IR_CR_IRTX_DATA_NUM_POS)\n#define IR_CR_IRTX_DATA_NUM_UMSK      (~(((1U << IR_CR_IRTX_DATA_NUM_LEN) - 1) << IR_CR_IRTX_DATA_NUM_POS))\n\n/* 0x4 : irtx_int_sts */\n#define IRTX_INT_STS_OFFSET      (0x4)\n#define IRTX_END_INT             IRTX_END_INT\n#define IRTX_END_INT_POS         (0U)\n#define IRTX_END_INT_LEN         (1U)\n#define IRTX_END_INT_MSK         (((1U << IRTX_END_INT_LEN) - 1) << IRTX_END_INT_POS)\n#define IRTX_END_INT_UMSK        (~(((1U << IRTX_END_INT_LEN) - 1) << IRTX_END_INT_POS))\n#define IR_CR_IRTX_END_MASK      IR_CR_IRTX_END_MASK\n#define IR_CR_IRTX_END_MASK_POS  (8U)\n#define IR_CR_IRTX_END_MASK_LEN  (1U)\n#define IR_CR_IRTX_END_MASK_MSK  (((1U << IR_CR_IRTX_END_MASK_LEN) - 1) << IR_CR_IRTX_END_MASK_POS)\n#define IR_CR_IRTX_END_MASK_UMSK (~(((1U << IR_CR_IRTX_END_MASK_LEN) - 1) << IR_CR_IRTX_END_MASK_POS))\n#define IR_CR_IRTX_END_CLR       IR_CR_IRTX_END_CLR\n#define IR_CR_IRTX_END_CLR_POS   (16U)\n#define IR_CR_IRTX_END_CLR_LEN   (1U)\n#define IR_CR_IRTX_END_CLR_MSK   (((1U << IR_CR_IRTX_END_CLR_LEN) - 1) << IR_CR_IRTX_END_CLR_POS)\n#define IR_CR_IRTX_END_CLR_UMSK  (~(((1U << IR_CR_IRTX_END_CLR_LEN) - 1) << IR_CR_IRTX_END_CLR_POS))\n#define IR_CR_IRTX_END_EN        IR_CR_IRTX_END_EN\n#define IR_CR_IRTX_END_EN_POS    (24U)\n#define IR_CR_IRTX_END_EN_LEN    (1U)\n#define IR_CR_IRTX_END_EN_MSK    (((1U << IR_CR_IRTX_END_EN_LEN) - 1) << IR_CR_IRTX_END_EN_POS)\n#define IR_CR_IRTX_END_EN_UMSK   (~(((1U << IR_CR_IRTX_END_EN_LEN) - 1) << IR_CR_IRTX_END_EN_POS))\n\n/* 0x8 : irtx_data_word0 */\n#define IRTX_DATA_WORD0_OFFSET     (0x8)\n#define IR_CR_IRTX_DATA_WORD0      IR_CR_IRTX_DATA_WORD0\n#define IR_CR_IRTX_DATA_WORD0_POS  (0U)\n#define IR_CR_IRTX_DATA_WORD0_LEN  (32U)\n#define IR_CR_IRTX_DATA_WORD0_MSK  (((1U << IR_CR_IRTX_DATA_WORD0_LEN) - 1) << IR_CR_IRTX_DATA_WORD0_POS)\n#define IR_CR_IRTX_DATA_WORD0_UMSK (~(((1U << IR_CR_IRTX_DATA_WORD0_LEN) - 1) << IR_CR_IRTX_DATA_WORD0_POS))\n\n/* 0xC : irtx_data_word1 */\n#define IRTX_DATA_WORD1_OFFSET     (0xC)\n#define IR_CR_IRTX_DATA_WORD1      IR_CR_IRTX_DATA_WORD1\n#define IR_CR_IRTX_DATA_WORD1_POS  (0U)\n#define IR_CR_IRTX_DATA_WORD1_LEN  (32U)\n#define IR_CR_IRTX_DATA_WORD1_MSK  (((1U << IR_CR_IRTX_DATA_WORD1_LEN) - 1) << IR_CR_IRTX_DATA_WORD1_POS)\n#define IR_CR_IRTX_DATA_WORD1_UMSK (~(((1U << IR_CR_IRTX_DATA_WORD1_LEN) - 1) << IR_CR_IRTX_DATA_WORD1_POS))\n\n/* 0x10 : irtx_pulse_width */\n#define IRTX_PULSE_WIDTH_OFFSET   (0x10)\n#define IR_CR_IRTX_PW_UNIT        IR_CR_IRTX_PW_UNIT\n#define IR_CR_IRTX_PW_UNIT_POS    (0U)\n#define IR_CR_IRTX_PW_UNIT_LEN    (12U)\n#define IR_CR_IRTX_PW_UNIT_MSK    (((1U << IR_CR_IRTX_PW_UNIT_LEN) - 1) << IR_CR_IRTX_PW_UNIT_POS)\n#define IR_CR_IRTX_PW_UNIT_UMSK   (~(((1U << IR_CR_IRTX_PW_UNIT_LEN) - 1) << IR_CR_IRTX_PW_UNIT_POS))\n#define IR_CR_IRTX_MOD_PH0_W      IR_CR_IRTX_MOD_PH0_W\n#define IR_CR_IRTX_MOD_PH0_W_POS  (16U)\n#define IR_CR_IRTX_MOD_PH0_W_LEN  (8U)\n#define IR_CR_IRTX_MOD_PH0_W_MSK  (((1U << IR_CR_IRTX_MOD_PH0_W_LEN) - 1) << IR_CR_IRTX_MOD_PH0_W_POS)\n#define IR_CR_IRTX_MOD_PH0_W_UMSK (~(((1U << IR_CR_IRTX_MOD_PH0_W_LEN) - 1) << IR_CR_IRTX_MOD_PH0_W_POS))\n#define IR_CR_IRTX_MOD_PH1_W      IR_CR_IRTX_MOD_PH1_W\n#define IR_CR_IRTX_MOD_PH1_W_POS  (24U)\n#define IR_CR_IRTX_MOD_PH1_W_LEN  (8U)\n#define IR_CR_IRTX_MOD_PH1_W_MSK  (((1U << IR_CR_IRTX_MOD_PH1_W_LEN) - 1) << IR_CR_IRTX_MOD_PH1_W_POS)\n#define IR_CR_IRTX_MOD_PH1_W_UMSK (~(((1U << IR_CR_IRTX_MOD_PH1_W_LEN) - 1) << IR_CR_IRTX_MOD_PH1_W_POS))\n\n/* 0x14 : irtx_pw */\n#define IRTX_PW_OFFSET               (0x14)\n#define IR_CR_IRTX_LOGIC0_PH0_W      IR_CR_IRTX_LOGIC0_PH0_W\n#define IR_CR_IRTX_LOGIC0_PH0_W_POS  (0U)\n#define IR_CR_IRTX_LOGIC0_PH0_W_LEN  (4U)\n#define IR_CR_IRTX_LOGIC0_PH0_W_MSK  (((1U << IR_CR_IRTX_LOGIC0_PH0_W_LEN) - 1) << IR_CR_IRTX_LOGIC0_PH0_W_POS)\n#define IR_CR_IRTX_LOGIC0_PH0_W_UMSK (~(((1U << IR_CR_IRTX_LOGIC0_PH0_W_LEN) - 1) << IR_CR_IRTX_LOGIC0_PH0_W_POS))\n#define IR_CR_IRTX_LOGIC0_PH1_W      IR_CR_IRTX_LOGIC0_PH1_W\n#define IR_CR_IRTX_LOGIC0_PH1_W_POS  (4U)\n#define IR_CR_IRTX_LOGIC0_PH1_W_LEN  (4U)\n#define IR_CR_IRTX_LOGIC0_PH1_W_MSK  (((1U << IR_CR_IRTX_LOGIC0_PH1_W_LEN) - 1) << IR_CR_IRTX_LOGIC0_PH1_W_POS)\n#define IR_CR_IRTX_LOGIC0_PH1_W_UMSK (~(((1U << IR_CR_IRTX_LOGIC0_PH1_W_LEN) - 1) << IR_CR_IRTX_LOGIC0_PH1_W_POS))\n#define IR_CR_IRTX_LOGIC1_PH0_W      IR_CR_IRTX_LOGIC1_PH0_W\n#define IR_CR_IRTX_LOGIC1_PH0_W_POS  (8U)\n#define IR_CR_IRTX_LOGIC1_PH0_W_LEN  (4U)\n#define IR_CR_IRTX_LOGIC1_PH0_W_MSK  (((1U << IR_CR_IRTX_LOGIC1_PH0_W_LEN) - 1) << IR_CR_IRTX_LOGIC1_PH0_W_POS)\n#define IR_CR_IRTX_LOGIC1_PH0_W_UMSK (~(((1U << IR_CR_IRTX_LOGIC1_PH0_W_LEN) - 1) << IR_CR_IRTX_LOGIC1_PH0_W_POS))\n#define IR_CR_IRTX_LOGIC1_PH1_W      IR_CR_IRTX_LOGIC1_PH1_W\n#define IR_CR_IRTX_LOGIC1_PH1_W_POS  (12U)\n#define IR_CR_IRTX_LOGIC1_PH1_W_LEN  (4U)\n#define IR_CR_IRTX_LOGIC1_PH1_W_MSK  (((1U << IR_CR_IRTX_LOGIC1_PH1_W_LEN) - 1) << IR_CR_IRTX_LOGIC1_PH1_W_POS)\n#define IR_CR_IRTX_LOGIC1_PH1_W_UMSK (~(((1U << IR_CR_IRTX_LOGIC1_PH1_W_LEN) - 1) << IR_CR_IRTX_LOGIC1_PH1_W_POS))\n#define IR_CR_IRTX_HEAD_PH0_W        IR_CR_IRTX_HEAD_PH0_W\n#define IR_CR_IRTX_HEAD_PH0_W_POS    (16U)\n#define IR_CR_IRTX_HEAD_PH0_W_LEN    (4U)\n#define IR_CR_IRTX_HEAD_PH0_W_MSK    (((1U << IR_CR_IRTX_HEAD_PH0_W_LEN) - 1) << IR_CR_IRTX_HEAD_PH0_W_POS)\n#define IR_CR_IRTX_HEAD_PH0_W_UMSK   (~(((1U << IR_CR_IRTX_HEAD_PH0_W_LEN) - 1) << IR_CR_IRTX_HEAD_PH0_W_POS))\n#define IR_CR_IRTX_HEAD_PH1_W        IR_CR_IRTX_HEAD_PH1_W\n#define IR_CR_IRTX_HEAD_PH1_W_POS    (20U)\n#define IR_CR_IRTX_HEAD_PH1_W_LEN    (4U)\n#define IR_CR_IRTX_HEAD_PH1_W_MSK    (((1U << IR_CR_IRTX_HEAD_PH1_W_LEN) - 1) << IR_CR_IRTX_HEAD_PH1_W_POS)\n#define IR_CR_IRTX_HEAD_PH1_W_UMSK   (~(((1U << IR_CR_IRTX_HEAD_PH1_W_LEN) - 1) << IR_CR_IRTX_HEAD_PH1_W_POS))\n#define IR_CR_IRTX_TAIL_PH0_W        IR_CR_IRTX_TAIL_PH0_W\n#define IR_CR_IRTX_TAIL_PH0_W_POS    (24U)\n#define IR_CR_IRTX_TAIL_PH0_W_LEN    (4U)\n#define IR_CR_IRTX_TAIL_PH0_W_MSK    (((1U << IR_CR_IRTX_TAIL_PH0_W_LEN) - 1) << IR_CR_IRTX_TAIL_PH0_W_POS)\n#define IR_CR_IRTX_TAIL_PH0_W_UMSK   (~(((1U << IR_CR_IRTX_TAIL_PH0_W_LEN) - 1) << IR_CR_IRTX_TAIL_PH0_W_POS))\n#define IR_CR_IRTX_TAIL_PH1_W        IR_CR_IRTX_TAIL_PH1_W\n#define IR_CR_IRTX_TAIL_PH1_W_POS    (28U)\n#define IR_CR_IRTX_TAIL_PH1_W_LEN    (4U)\n#define IR_CR_IRTX_TAIL_PH1_W_MSK    (((1U << IR_CR_IRTX_TAIL_PH1_W_LEN) - 1) << IR_CR_IRTX_TAIL_PH1_W_POS)\n#define IR_CR_IRTX_TAIL_PH1_W_UMSK   (~(((1U << IR_CR_IRTX_TAIL_PH1_W_LEN) - 1) << IR_CR_IRTX_TAIL_PH1_W_POS))\n\n/* 0x40 : irtx_swm_pw_0 */\n#define IRTX_SWM_PW_0_OFFSET     (0x40)\n#define IR_CR_IRTX_SWM_PW_0      IR_CR_IRTX_SWM_PW_0\n#define IR_CR_IRTX_SWM_PW_0_POS  (0U)\n#define IR_CR_IRTX_SWM_PW_0_LEN  (32U)\n#define IR_CR_IRTX_SWM_PW_0_MSK  (((1U << IR_CR_IRTX_SWM_PW_0_LEN) - 1) << IR_CR_IRTX_SWM_PW_0_POS)\n#define IR_CR_IRTX_SWM_PW_0_UMSK (~(((1U << IR_CR_IRTX_SWM_PW_0_LEN) - 1) << IR_CR_IRTX_SWM_PW_0_POS))\n\n/* 0x44 : irtx_swm_pw_1 */\n#define IRTX_SWM_PW_1_OFFSET     (0x44)\n#define IR_CR_IRTX_SWM_PW_1      IR_CR_IRTX_SWM_PW_1\n#define IR_CR_IRTX_SWM_PW_1_POS  (0U)\n#define IR_CR_IRTX_SWM_PW_1_LEN  (32U)\n#define IR_CR_IRTX_SWM_PW_1_MSK  (((1U << IR_CR_IRTX_SWM_PW_1_LEN) - 1) << IR_CR_IRTX_SWM_PW_1_POS)\n#define IR_CR_IRTX_SWM_PW_1_UMSK (~(((1U << IR_CR_IRTX_SWM_PW_1_LEN) - 1) << IR_CR_IRTX_SWM_PW_1_POS))\n\n/* 0x48 : irtx_swm_pw_2 */\n#define IRTX_SWM_PW_2_OFFSET     (0x48)\n#define IR_CR_IRTX_SWM_PW_2      IR_CR_IRTX_SWM_PW_2\n#define IR_CR_IRTX_SWM_PW_2_POS  (0U)\n#define IR_CR_IRTX_SWM_PW_2_LEN  (32U)\n#define IR_CR_IRTX_SWM_PW_2_MSK  (((1U << IR_CR_IRTX_SWM_PW_2_LEN) - 1) << IR_CR_IRTX_SWM_PW_2_POS)\n#define IR_CR_IRTX_SWM_PW_2_UMSK (~(((1U << IR_CR_IRTX_SWM_PW_2_LEN) - 1) << IR_CR_IRTX_SWM_PW_2_POS))\n\n/* 0x4C : irtx_swm_pw_3 */\n#define IRTX_SWM_PW_3_OFFSET     (0x4C)\n#define IR_CR_IRTX_SWM_PW_3      IR_CR_IRTX_SWM_PW_3\n#define IR_CR_IRTX_SWM_PW_3_POS  (0U)\n#define IR_CR_IRTX_SWM_PW_3_LEN  (32U)\n#define IR_CR_IRTX_SWM_PW_3_MSK  (((1U << IR_CR_IRTX_SWM_PW_3_LEN) - 1) << IR_CR_IRTX_SWM_PW_3_POS)\n#define IR_CR_IRTX_SWM_PW_3_UMSK (~(((1U << IR_CR_IRTX_SWM_PW_3_LEN) - 1) << IR_CR_IRTX_SWM_PW_3_POS))\n\n/* 0x50 : irtx_swm_pw_4 */\n#define IRTX_SWM_PW_4_OFFSET     (0x50)\n#define IR_CR_IRTX_SWM_PW_4      IR_CR_IRTX_SWM_PW_4\n#define IR_CR_IRTX_SWM_PW_4_POS  (0U)\n#define IR_CR_IRTX_SWM_PW_4_LEN  (32U)\n#define IR_CR_IRTX_SWM_PW_4_MSK  (((1U << IR_CR_IRTX_SWM_PW_4_LEN) - 1) << IR_CR_IRTX_SWM_PW_4_POS)\n#define IR_CR_IRTX_SWM_PW_4_UMSK (~(((1U << IR_CR_IRTX_SWM_PW_4_LEN) - 1) << IR_CR_IRTX_SWM_PW_4_POS))\n\n/* 0x54 : irtx_swm_pw_5 */\n#define IRTX_SWM_PW_5_OFFSET     (0x54)\n#define IR_CR_IRTX_SWM_PW_5      IR_CR_IRTX_SWM_PW_5\n#define IR_CR_IRTX_SWM_PW_5_POS  (0U)\n#define IR_CR_IRTX_SWM_PW_5_LEN  (32U)\n#define IR_CR_IRTX_SWM_PW_5_MSK  (((1U << IR_CR_IRTX_SWM_PW_5_LEN) - 1) << IR_CR_IRTX_SWM_PW_5_POS)\n#define IR_CR_IRTX_SWM_PW_5_UMSK (~(((1U << IR_CR_IRTX_SWM_PW_5_LEN) - 1) << IR_CR_IRTX_SWM_PW_5_POS))\n\n/* 0x58 : irtx_swm_pw_6 */\n#define IRTX_SWM_PW_6_OFFSET     (0x58)\n#define IR_CR_IRTX_SWM_PW_6      IR_CR_IRTX_SWM_PW_6\n#define IR_CR_IRTX_SWM_PW_6_POS  (0U)\n#define IR_CR_IRTX_SWM_PW_6_LEN  (32U)\n#define IR_CR_IRTX_SWM_PW_6_MSK  (((1U << IR_CR_IRTX_SWM_PW_6_LEN) - 1) << IR_CR_IRTX_SWM_PW_6_POS)\n#define IR_CR_IRTX_SWM_PW_6_UMSK (~(((1U << IR_CR_IRTX_SWM_PW_6_LEN) - 1) << IR_CR_IRTX_SWM_PW_6_POS))\n\n/* 0x5C : irtx_swm_pw_7 */\n#define IRTX_SWM_PW_7_OFFSET     (0x5C)\n#define IR_CR_IRTX_SWM_PW_7      IR_CR_IRTX_SWM_PW_7\n#define IR_CR_IRTX_SWM_PW_7_POS  (0U)\n#define IR_CR_IRTX_SWM_PW_7_LEN  (32U)\n#define IR_CR_IRTX_SWM_PW_7_MSK  (((1U << IR_CR_IRTX_SWM_PW_7_LEN) - 1) << IR_CR_IRTX_SWM_PW_7_POS)\n#define IR_CR_IRTX_SWM_PW_7_UMSK (~(((1U << IR_CR_IRTX_SWM_PW_7_LEN) - 1) << IR_CR_IRTX_SWM_PW_7_POS))\n\n/* 0x80 : irrx_config */\n#define IRRX_CONFIG_OFFSET      (0x80)\n#define IR_CR_IRRX_EN           IR_CR_IRRX_EN\n#define IR_CR_IRRX_EN_POS       (0U)\n#define IR_CR_IRRX_EN_LEN       (1U)\n#define IR_CR_IRRX_EN_MSK       (((1U << IR_CR_IRRX_EN_LEN) - 1) << IR_CR_IRRX_EN_POS)\n#define IR_CR_IRRX_EN_UMSK      (~(((1U << IR_CR_IRRX_EN_LEN) - 1) << IR_CR_IRRX_EN_POS))\n#define IR_CR_IRRX_IN_INV       IR_CR_IRRX_IN_INV\n#define IR_CR_IRRX_IN_INV_POS   (1U)\n#define IR_CR_IRRX_IN_INV_LEN   (1U)\n#define IR_CR_IRRX_IN_INV_MSK   (((1U << IR_CR_IRRX_IN_INV_LEN) - 1) << IR_CR_IRRX_IN_INV_POS)\n#define IR_CR_IRRX_IN_INV_UMSK  (~(((1U << IR_CR_IRRX_IN_INV_LEN) - 1) << IR_CR_IRRX_IN_INV_POS))\n#define IR_CR_IRRX_MODE         IR_CR_IRRX_MODE\n#define IR_CR_IRRX_MODE_POS     (2U)\n#define IR_CR_IRRX_MODE_LEN     (2U)\n#define IR_CR_IRRX_MODE_MSK     (((1U << IR_CR_IRRX_MODE_LEN) - 1) << IR_CR_IRRX_MODE_POS)\n#define IR_CR_IRRX_MODE_UMSK    (~(((1U << IR_CR_IRRX_MODE_LEN) - 1) << IR_CR_IRRX_MODE_POS))\n#define IR_CR_IRRX_DEG_EN       IR_CR_IRRX_DEG_EN\n#define IR_CR_IRRX_DEG_EN_POS   (4U)\n#define IR_CR_IRRX_DEG_EN_LEN   (1U)\n#define IR_CR_IRRX_DEG_EN_MSK   (((1U << IR_CR_IRRX_DEG_EN_LEN) - 1) << IR_CR_IRRX_DEG_EN_POS)\n#define IR_CR_IRRX_DEG_EN_UMSK  (~(((1U << IR_CR_IRRX_DEG_EN_LEN) - 1) << IR_CR_IRRX_DEG_EN_POS))\n#define IR_CR_IRRX_DEG_CNT      IR_CR_IRRX_DEG_CNT\n#define IR_CR_IRRX_DEG_CNT_POS  (8U)\n#define IR_CR_IRRX_DEG_CNT_LEN  (4U)\n#define IR_CR_IRRX_DEG_CNT_MSK  (((1U << IR_CR_IRRX_DEG_CNT_LEN) - 1) << IR_CR_IRRX_DEG_CNT_POS)\n#define IR_CR_IRRX_DEG_CNT_UMSK (~(((1U << IR_CR_IRRX_DEG_CNT_LEN) - 1) << IR_CR_IRRX_DEG_CNT_POS))\n\n/* 0x84 : irrx_int_sts */\n#define IRRX_INT_STS_OFFSET      (0x84)\n#define IRRX_END_INT             IRRX_END_INT\n#define IRRX_END_INT_POS         (0U)\n#define IRRX_END_INT_LEN         (1U)\n#define IRRX_END_INT_MSK         (((1U << IRRX_END_INT_LEN) - 1) << IRRX_END_INT_POS)\n#define IRRX_END_INT_UMSK        (~(((1U << IRRX_END_INT_LEN) - 1) << IRRX_END_INT_POS))\n#define IR_CR_IRRX_END_MASK      IR_CR_IRRX_END_MASK\n#define IR_CR_IRRX_END_MASK_POS  (8U)\n#define IR_CR_IRRX_END_MASK_LEN  (1U)\n#define IR_CR_IRRX_END_MASK_MSK  (((1U << IR_CR_IRRX_END_MASK_LEN) - 1) << IR_CR_IRRX_END_MASK_POS)\n#define IR_CR_IRRX_END_MASK_UMSK (~(((1U << IR_CR_IRRX_END_MASK_LEN) - 1) << IR_CR_IRRX_END_MASK_POS))\n#define IR_CR_IRRX_END_CLR       IR_CR_IRRX_END_CLR\n#define IR_CR_IRRX_END_CLR_POS   (16U)\n#define IR_CR_IRRX_END_CLR_LEN   (1U)\n#define IR_CR_IRRX_END_CLR_MSK   (((1U << IR_CR_IRRX_END_CLR_LEN) - 1) << IR_CR_IRRX_END_CLR_POS)\n#define IR_CR_IRRX_END_CLR_UMSK  (~(((1U << IR_CR_IRRX_END_CLR_LEN) - 1) << IR_CR_IRRX_END_CLR_POS))\n#define IR_CR_IRRX_END_EN        IR_CR_IRRX_END_EN\n#define IR_CR_IRRX_END_EN_POS    (24U)\n#define IR_CR_IRRX_END_EN_LEN    (1U)\n#define IR_CR_IRRX_END_EN_MSK    (((1U << IR_CR_IRRX_END_EN_LEN) - 1) << IR_CR_IRRX_END_EN_POS)\n#define IR_CR_IRRX_END_EN_UMSK   (~(((1U << IR_CR_IRRX_END_EN_LEN) - 1) << IR_CR_IRRX_END_EN_POS))\n\n/* 0x88 : irrx_pw_config */\n#define IRRX_PW_CONFIG_OFFSET   (0x88)\n#define IR_CR_IRRX_DATA_TH      IR_CR_IRRX_DATA_TH\n#define IR_CR_IRRX_DATA_TH_POS  (0U)\n#define IR_CR_IRRX_DATA_TH_LEN  (16U)\n#define IR_CR_IRRX_DATA_TH_MSK  (((1U << IR_CR_IRRX_DATA_TH_LEN) - 1) << IR_CR_IRRX_DATA_TH_POS)\n#define IR_CR_IRRX_DATA_TH_UMSK (~(((1U << IR_CR_IRRX_DATA_TH_LEN) - 1) << IR_CR_IRRX_DATA_TH_POS))\n#define IR_CR_IRRX_END_TH       IR_CR_IRRX_END_TH\n#define IR_CR_IRRX_END_TH_POS   (16U)\n#define IR_CR_IRRX_END_TH_LEN   (16U)\n#define IR_CR_IRRX_END_TH_MSK   (((1U << IR_CR_IRRX_END_TH_LEN) - 1) << IR_CR_IRRX_END_TH_POS)\n#define IR_CR_IRRX_END_TH_UMSK  (~(((1U << IR_CR_IRRX_END_TH_LEN) - 1) << IR_CR_IRRX_END_TH_POS))\n\n/* 0x90 : irrx_data_count */\n#define IRRX_DATA_COUNT_OFFSET    (0x90)\n#define IR_STS_IRRX_DATA_CNT      IR_STS_IRRX_DATA_CNT\n#define IR_STS_IRRX_DATA_CNT_POS  (0U)\n#define IR_STS_IRRX_DATA_CNT_LEN  (7U)\n#define IR_STS_IRRX_DATA_CNT_MSK  (((1U << IR_STS_IRRX_DATA_CNT_LEN) - 1) << IR_STS_IRRX_DATA_CNT_POS)\n#define IR_STS_IRRX_DATA_CNT_UMSK (~(((1U << IR_STS_IRRX_DATA_CNT_LEN) - 1) << IR_STS_IRRX_DATA_CNT_POS))\n\n/* 0x94 : irrx_data_word0 */\n#define IRRX_DATA_WORD0_OFFSET      (0x94)\n#define IR_STS_IRRX_DATA_WORD0      IR_STS_IRRX_DATA_WORD0\n#define IR_STS_IRRX_DATA_WORD0_POS  (0U)\n#define IR_STS_IRRX_DATA_WORD0_LEN  (32U)\n#define IR_STS_IRRX_DATA_WORD0_MSK  (((1U << IR_STS_IRRX_DATA_WORD0_LEN) - 1) << IR_STS_IRRX_DATA_WORD0_POS)\n#define IR_STS_IRRX_DATA_WORD0_UMSK (~(((1U << IR_STS_IRRX_DATA_WORD0_LEN) - 1) << IR_STS_IRRX_DATA_WORD0_POS))\n\n/* 0x98 : irrx_data_word1 */\n#define IRRX_DATA_WORD1_OFFSET      (0x98)\n#define IR_STS_IRRX_DATA_WORD1      IR_STS_IRRX_DATA_WORD1\n#define IR_STS_IRRX_DATA_WORD1_POS  (0U)\n#define IR_STS_IRRX_DATA_WORD1_LEN  (32U)\n#define IR_STS_IRRX_DATA_WORD1_MSK  (((1U << IR_STS_IRRX_DATA_WORD1_LEN) - 1) << IR_STS_IRRX_DATA_WORD1_POS)\n#define IR_STS_IRRX_DATA_WORD1_UMSK (~(((1U << IR_STS_IRRX_DATA_WORD1_LEN) - 1) << IR_STS_IRRX_DATA_WORD1_POS))\n\n/* 0xC0 : irrx_swm_fifo_config_0 */\n#define IRRX_SWM_FIFO_CONFIG_0_OFFSET (0xC0)\n#define IR_RX_FIFO_CLR                IR_RX_FIFO_CLR\n#define IR_RX_FIFO_CLR_POS            (0U)\n#define IR_RX_FIFO_CLR_LEN            (1U)\n#define IR_RX_FIFO_CLR_MSK            (((1U << IR_RX_FIFO_CLR_LEN) - 1) << IR_RX_FIFO_CLR_POS)\n#define IR_RX_FIFO_CLR_UMSK           (~(((1U << IR_RX_FIFO_CLR_LEN) - 1) << IR_RX_FIFO_CLR_POS))\n#define IR_RX_FIFO_OVERFLOW           IR_RX_FIFO_OVERFLOW\n#define IR_RX_FIFO_OVERFLOW_POS       (2U)\n#define IR_RX_FIFO_OVERFLOW_LEN       (1U)\n#define IR_RX_FIFO_OVERFLOW_MSK       (((1U << IR_RX_FIFO_OVERFLOW_LEN) - 1) << IR_RX_FIFO_OVERFLOW_POS)\n#define IR_RX_FIFO_OVERFLOW_UMSK      (~(((1U << IR_RX_FIFO_OVERFLOW_LEN) - 1) << IR_RX_FIFO_OVERFLOW_POS))\n#define IR_RX_FIFO_UNDERFLOW          IR_RX_FIFO_UNDERFLOW\n#define IR_RX_FIFO_UNDERFLOW_POS      (3U)\n#define IR_RX_FIFO_UNDERFLOW_LEN      (1U)\n#define IR_RX_FIFO_UNDERFLOW_MSK      (((1U << IR_RX_FIFO_UNDERFLOW_LEN) - 1) << IR_RX_FIFO_UNDERFLOW_POS)\n#define IR_RX_FIFO_UNDERFLOW_UMSK     (~(((1U << IR_RX_FIFO_UNDERFLOW_LEN) - 1) << IR_RX_FIFO_UNDERFLOW_POS))\n#define IR_RX_FIFO_CNT                IR_RX_FIFO_CNT\n#define IR_RX_FIFO_CNT_POS            (4U)\n#define IR_RX_FIFO_CNT_LEN            (7U)\n#define IR_RX_FIFO_CNT_MSK            (((1U << IR_RX_FIFO_CNT_LEN) - 1) << IR_RX_FIFO_CNT_POS)\n#define IR_RX_FIFO_CNT_UMSK           (~(((1U << IR_RX_FIFO_CNT_LEN) - 1) << IR_RX_FIFO_CNT_POS))\n\n/* 0xC4 : irrx_swm_fifo_rdata */\n#define IRRX_SWM_FIFO_RDATA_OFFSET (0xC4)\n#define IR_RX_FIFO_RDATA           IR_RX_FIFO_RDATA\n#define IR_RX_FIFO_RDATA_POS       (0U)\n#define IR_RX_FIFO_RDATA_LEN       (16U)\n#define IR_RX_FIFO_RDATA_MSK       (((1U << IR_RX_FIFO_RDATA_LEN) - 1) << IR_RX_FIFO_RDATA_POS)\n#define IR_RX_FIFO_RDATA_UMSK      (~(((1U << IR_RX_FIFO_RDATA_LEN) - 1) << IR_RX_FIFO_RDATA_POS))\n\nstruct ir_reg {\n    /* 0x0 : irtx_config */\n    union {\n        struct\n        {\n            uint32_t cr_irtx_en            : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t cr_irtx_out_inv       : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t cr_irtx_mod_en        : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t cr_irtx_swm_en        : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t cr_irtx_data_en       : 1;  /* [    4],        r/w,        0x1 */\n            uint32_t cr_irtx_logic0_hl_inv : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t cr_irtx_logic1_hl_inv : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t reserved_7            : 1;  /* [    7],       rsvd,        0x0 */\n            uint32_t cr_irtx_head_en       : 1;  /* [    8],        r/w,        0x1 */\n            uint32_t cr_irtx_head_hl_inv   : 1;  /* [    9],        r/w,        0x0 */\n            uint32_t cr_irtx_tail_en       : 1;  /* [   10],        r/w,        0x1 */\n            uint32_t cr_irtx_tail_hl_inv   : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t cr_irtx_data_num      : 6;  /* [17:12],        r/w,       0x1f */\n            uint32_t reserved_18_31        : 14; /* [31:18],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irtx_config;\n\n    /* 0x4 : irtx_int_sts */\n    union {\n        struct\n        {\n            uint32_t irtx_end_int     : 1; /* [    0],          r,        0x0 */\n            uint32_t reserved_1_7     : 7; /* [ 7: 1],       rsvd,        0x0 */\n            uint32_t cr_irtx_end_mask : 1; /* [    8],        r/w,        0x1 */\n            uint32_t reserved_9_15    : 7; /* [15: 9],       rsvd,        0x0 */\n            uint32_t cr_irtx_end_clr  : 1; /* [   16],        w1c,        0x0 */\n            uint32_t reserved_17_23   : 7; /* [23:17],       rsvd,        0x0 */\n            uint32_t cr_irtx_end_en   : 1; /* [   24],        r/w,        0x1 */\n            uint32_t reserved_25_31   : 7; /* [31:25],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irtx_int_sts;\n\n    /* 0x8 : irtx_data_word0 */\n    union {\n        struct\n        {\n            uint32_t cr_irtx_data_word0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irtx_data_word0;\n\n    /* 0xC : irtx_data_word1 */\n    union {\n        struct\n        {\n            uint32_t cr_irtx_data_word1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irtx_data_word1;\n\n    /* 0x10 : irtx_pulse_width */\n    union {\n        struct\n        {\n            uint32_t cr_irtx_pw_unit   : 12; /* [11: 0],        r/w,      0x464 */\n            uint32_t reserved_12_15    : 4;  /* [15:12],       rsvd,        0x0 */\n            uint32_t cr_irtx_mod_ph0_w : 8;  /* [23:16],        r/w,       0x11 */\n            uint32_t cr_irtx_mod_ph1_w : 8;  /* [31:24],        r/w,       0x22 */\n        } BF;\n        uint32_t WORD;\n    } irtx_pulse_width;\n\n    /* 0x14 : irtx_pw */\n    union {\n        struct\n        {\n            uint32_t cr_irtx_logic0_ph0_w : 4; /* [ 3: 0],        r/w,        0x0 */\n            uint32_t cr_irtx_logic0_ph1_w : 4; /* [ 7: 4],        r/w,        0x0 */\n            uint32_t cr_irtx_logic1_ph0_w : 4; /* [11: 8],        r/w,        0x0 */\n            uint32_t cr_irtx_logic1_ph1_w : 4; /* [15:12],        r/w,        0x2 */\n            uint32_t cr_irtx_head_ph0_w   : 4; /* [19:16],        r/w,        0xf */\n            uint32_t cr_irtx_head_ph1_w   : 4; /* [23:20],        r/w,        0x7 */\n            uint32_t cr_irtx_tail_ph0_w   : 4; /* [27:24],        r/w,        0x0 */\n            uint32_t cr_irtx_tail_ph1_w   : 4; /* [31:28],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irtx_pw;\n\n    /* 0x18  reserved */\n    uint8_t RESERVED0x18[40];\n\n    /* 0x40 : irtx_swm_pw_0 */\n    union {\n        struct\n        {\n            uint32_t cr_irtx_swm_pw_0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irtx_swm_pw_0;\n\n    /* 0x44 : irtx_swm_pw_1 */\n    union {\n        struct\n        {\n            uint32_t cr_irtx_swm_pw_1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irtx_swm_pw_1;\n\n    /* 0x48 : irtx_swm_pw_2 */\n    union {\n        struct\n        {\n            uint32_t cr_irtx_swm_pw_2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irtx_swm_pw_2;\n\n    /* 0x4C : irtx_swm_pw_3 */\n    union {\n        struct\n        {\n            uint32_t cr_irtx_swm_pw_3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irtx_swm_pw_3;\n\n    /* 0x50 : irtx_swm_pw_4 */\n    union {\n        struct\n        {\n            uint32_t cr_irtx_swm_pw_4 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irtx_swm_pw_4;\n\n    /* 0x54 : irtx_swm_pw_5 */\n    union {\n        struct\n        {\n            uint32_t cr_irtx_swm_pw_5 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irtx_swm_pw_5;\n\n    /* 0x58 : irtx_swm_pw_6 */\n    union {\n        struct\n        {\n            uint32_t cr_irtx_swm_pw_6 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irtx_swm_pw_6;\n\n    /* 0x5C : irtx_swm_pw_7 */\n    union {\n        struct\n        {\n            uint32_t cr_irtx_swm_pw_7 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irtx_swm_pw_7;\n\n    /* 0x60  reserved */\n    uint8_t RESERVED0x60[32];\n\n    /* 0x80 : irrx_config */\n    union {\n        struct\n        {\n            uint32_t cr_irrx_en      : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t cr_irrx_in_inv  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t cr_irrx_mode    : 2;  /* [ 3: 2],        r/w,        0x0 */\n            uint32_t cr_irrx_deg_en  : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t reserved_5_7    : 3;  /* [ 7: 5],       rsvd,        0x0 */\n            uint32_t cr_irrx_deg_cnt : 4;  /* [11: 8],        r/w,        0x0 */\n            uint32_t reserved_12_31  : 20; /* [31:12],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irrx_config;\n\n    /* 0x84 : irrx_int_sts */\n    union {\n        struct\n        {\n            uint32_t irrx_end_int     : 1; /* [    0],          r,        0x0 */\n            uint32_t reserved_1_7     : 7; /* [ 7: 1],       rsvd,        0x0 */\n            uint32_t cr_irrx_end_mask : 1; /* [    8],        r/w,        0x1 */\n            uint32_t reserved_9_15    : 7; /* [15: 9],       rsvd,        0x0 */\n            uint32_t cr_irrx_end_clr  : 1; /* [   16],        w1c,        0x0 */\n            uint32_t reserved_17_23   : 7; /* [23:17],       rsvd,        0x0 */\n            uint32_t cr_irrx_end_en   : 1; /* [   24],        r/w,        0x1 */\n            uint32_t reserved_25_31   : 7; /* [31:25],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irrx_int_sts;\n\n    /* 0x88 : irrx_pw_config */\n    union {\n        struct\n        {\n            uint32_t cr_irrx_data_th : 16; /* [15: 0],        r/w,      0xd47 */\n            uint32_t cr_irrx_end_th  : 16; /* [31:16],        r/w,     0x2327 */\n        } BF;\n        uint32_t WORD;\n    } irrx_pw_config;\n\n    /* 0x8c  reserved */\n    uint8_t RESERVED0x8c[4];\n\n    /* 0x90 : irrx_data_count */\n    union {\n        struct\n        {\n            uint32_t sts_irrx_data_cnt : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31     : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irrx_data_count;\n\n    /* 0x94 : irrx_data_word0 */\n    union {\n        struct\n        {\n            uint32_t sts_irrx_data_word0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irrx_data_word0;\n\n    /* 0x98 : irrx_data_word1 */\n    union {\n        struct\n        {\n            uint32_t sts_irrx_data_word1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irrx_data_word1;\n\n    /* 0x9c  reserved */\n    uint8_t RESERVED0x9c[36];\n\n    /* 0xC0 : irrx_swm_fifo_config_0 */\n    union {\n        struct\n        {\n            uint32_t rx_fifo_clr       : 1;  /* [    0],        w1c,        0x0 */\n            uint32_t reserved_1        : 1;  /* [    1],       rsvd,        0x0 */\n            uint32_t rx_fifo_overflow  : 1;  /* [    2],          r,        0x0 */\n            uint32_t rx_fifo_underflow : 1;  /* [    3],          r,        0x0 */\n            uint32_t rx_fifo_cnt       : 7;  /* [10: 4],          r,        0x0 */\n            uint32_t reserved_11_31    : 21; /* [31:11],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irrx_swm_fifo_config_0;\n\n    /* 0xC4 : irrx_swm_fifo_rdata */\n    union {\n        struct\n        {\n            uint32_t rx_fifo_rdata  : 16; /* [15: 0],          r,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irrx_swm_fifo_rdata;\n};\n\ntypedef volatile struct ir_reg ir_reg_t;\n\n#endif /* __IR_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/kys_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    kys_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __KYS_REG_H__\n#define __KYS_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : ks_ctrl */\n#define KYS_KS_CTRL_OFFSET (0x0)\n#define KYS_KS_EN          KYS_KS_EN\n#define KYS_KS_EN_POS      (0U)\n#define KYS_KS_EN_LEN      (1U)\n#define KYS_KS_EN_MSK      (((1U << KYS_KS_EN_LEN) - 1) << KYS_KS_EN_POS)\n#define KYS_KS_EN_UMSK     (~(((1U << KYS_KS_EN_LEN) - 1) << KYS_KS_EN_POS))\n#define KYS_GHOST_EN       KYS_GHOST_EN\n#define KYS_GHOST_EN_POS   (2U)\n#define KYS_GHOST_EN_LEN   (1U)\n#define KYS_GHOST_EN_MSK   (((1U << KYS_GHOST_EN_LEN) - 1) << KYS_GHOST_EN_POS)\n#define KYS_GHOST_EN_UMSK  (~(((1U << KYS_GHOST_EN_LEN) - 1) << KYS_GHOST_EN_POS))\n#define KYS_DEG_EN         KYS_DEG_EN\n#define KYS_DEG_EN_POS     (3U)\n#define KYS_DEG_EN_LEN     (1U)\n#define KYS_DEG_EN_MSK     (((1U << KYS_DEG_EN_LEN) - 1) << KYS_DEG_EN_POS)\n#define KYS_DEG_EN_UMSK    (~(((1U << KYS_DEG_EN_LEN) - 1) << KYS_DEG_EN_POS))\n#define KYS_DEG_CNT        KYS_DEG_CNT\n#define KYS_DEG_CNT_POS    (4U)\n#define KYS_DEG_CNT_LEN    (4U)\n#define KYS_DEG_CNT_MSK    (((1U << KYS_DEG_CNT_LEN) - 1) << KYS_DEG_CNT_POS)\n#define KYS_DEG_CNT_UMSK   (~(((1U << KYS_DEG_CNT_LEN) - 1) << KYS_DEG_CNT_POS))\n#define KYS_RC_EXT         KYS_RC_EXT\n#define KYS_RC_EXT_POS     (8U)\n#define KYS_RC_EXT_LEN     (2U)\n#define KYS_RC_EXT_MSK     (((1U << KYS_RC_EXT_LEN) - 1) << KYS_RC_EXT_POS)\n#define KYS_RC_EXT_UMSK    (~(((1U << KYS_RC_EXT_LEN) - 1) << KYS_RC_EXT_POS))\n#define KYS_ROW_NUM        KYS_ROW_NUM\n#define KYS_ROW_NUM_POS    (16U)\n#define KYS_ROW_NUM_LEN    (3U)\n#define KYS_ROW_NUM_MSK    (((1U << KYS_ROW_NUM_LEN) - 1) << KYS_ROW_NUM_POS)\n#define KYS_ROW_NUM_UMSK   (~(((1U << KYS_ROW_NUM_LEN) - 1) << KYS_ROW_NUM_POS))\n#define KYS_COL_NUM        KYS_COL_NUM\n#define KYS_COL_NUM_POS    (20U)\n#define KYS_COL_NUM_LEN    (5U)\n#define KYS_COL_NUM_MSK    (((1U << KYS_COL_NUM_LEN) - 1) << KYS_COL_NUM_POS)\n#define KYS_COL_NUM_UMSK   (~(((1U << KYS_COL_NUM_LEN) - 1) << KYS_COL_NUM_POS))\n\n/* 0x10 : ks_int_en */\n#define KYS_KS_INT_EN_OFFSET (0x10)\n#define KYS_KS_INT_EN        KYS_KS_INT_EN\n#define KYS_KS_INT_EN_POS    (0U)\n#define KYS_KS_INT_EN_LEN    (1U)\n#define KYS_KS_INT_EN_MSK    (((1U << KYS_KS_INT_EN_LEN) - 1) << KYS_KS_INT_EN_POS)\n#define KYS_KS_INT_EN_UMSK   (~(((1U << KYS_KS_INT_EN_LEN) - 1) << KYS_KS_INT_EN_POS))\n\n/* 0x14 : ks_int_sts */\n#define KYS_KS_INT_STS_OFFSET  (0x14)\n#define KYS_KEYCODE_VALID      KYS_KEYCODE_VALID\n#define KYS_KEYCODE_VALID_POS  (0U)\n#define KYS_KEYCODE_VALID_LEN  (4U)\n#define KYS_KEYCODE_VALID_MSK  (((1U << KYS_KEYCODE_VALID_LEN) - 1) << KYS_KEYCODE_VALID_POS)\n#define KYS_KEYCODE_VALID_UMSK (~(((1U << KYS_KEYCODE_VALID_LEN) - 1) << KYS_KEYCODE_VALID_POS))\n\n/* 0x18 : keycode_clr */\n#define KYS_KEYCODE_CLR_OFFSET (0x18)\n#define KYS_KEYCODE_CLR        KYS_KEYCODE_CLR\n#define KYS_KEYCODE_CLR_POS    (0U)\n#define KYS_KEYCODE_CLR_LEN    (4U)\n#define KYS_KEYCODE_CLR_MSK    (((1U << KYS_KEYCODE_CLR_LEN) - 1) << KYS_KEYCODE_CLR_POS)\n#define KYS_KEYCODE_CLR_UMSK   (~(((1U << KYS_KEYCODE_CLR_LEN) - 1) << KYS_KEYCODE_CLR_POS))\n\n/* 0x1C : keycode_value */\n#define KYS_KEYCODE_VALUE_OFFSET (0x1C)\n#define KYS_KEYCODE0             KYS_KEYCODE0\n#define KYS_KEYCODE0_POS         (0U)\n#define KYS_KEYCODE0_LEN         (8U)\n#define KYS_KEYCODE0_MSK         (((1U << KYS_KEYCODE0_LEN) - 1) << KYS_KEYCODE0_POS)\n#define KYS_KEYCODE0_UMSK        (~(((1U << KYS_KEYCODE0_LEN) - 1) << KYS_KEYCODE0_POS))\n#define KYS_KEYCODE1             KYS_KEYCODE1\n#define KYS_KEYCODE1_POS         (8U)\n#define KYS_KEYCODE1_LEN         (8U)\n#define KYS_KEYCODE1_MSK         (((1U << KYS_KEYCODE1_LEN) - 1) << KYS_KEYCODE1_POS)\n#define KYS_KEYCODE1_UMSK        (~(((1U << KYS_KEYCODE1_LEN) - 1) << KYS_KEYCODE1_POS))\n#define KYS_KEYCODE2             KYS_KEYCODE2\n#define KYS_KEYCODE2_POS         (16U)\n#define KYS_KEYCODE2_LEN         (8U)\n#define KYS_KEYCODE2_MSK         (((1U << KYS_KEYCODE2_LEN) - 1) << KYS_KEYCODE2_POS)\n#define KYS_KEYCODE2_UMSK        (~(((1U << KYS_KEYCODE2_LEN) - 1) << KYS_KEYCODE2_POS))\n#define KYS_KEYCODE3             KYS_KEYCODE3\n#define KYS_KEYCODE3_POS         (24U)\n#define KYS_KEYCODE3_LEN         (8U)\n#define KYS_KEYCODE3_MSK         (((1U << KYS_KEYCODE3_LEN) - 1) << KYS_KEYCODE3_POS)\n#define KYS_KEYCODE3_UMSK        (~(((1U << KYS_KEYCODE3_LEN) - 1) << KYS_KEYCODE3_POS))\n\nstruct kys_reg {\n    /* 0x0 : ks_ctrl */\n    union {\n        struct\n        {\n            uint32_t ks_en          : 1; /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1     : 1; /* [    1],       rsvd,        0x0 */\n            uint32_t ghost_en       : 1; /* [    2],        r/w,        0x0 */\n            uint32_t deg_en         : 1; /* [    3],        r/w,        0x0 */\n            uint32_t deg_cnt        : 4; /* [ 7: 4],        r/w,        0x0 */\n            uint32_t rc_ext         : 2; /* [ 9: 8],        r/w,        0x3 */\n            uint32_t reserved_10_15 : 6; /* [15:10],       rsvd,        0x0 */\n            uint32_t row_num        : 3; /* [18:16],        r/w,        0x7 */\n            uint32_t reserved_19    : 1; /* [   19],       rsvd,        0x0 */\n            uint32_t col_num        : 5; /* [24:20],        r/w,       0x13 */\n            uint32_t reserved_25_31 : 7; /* [31:25],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ks_ctrl;\n\n    /* 0x4  reserved */\n    uint8_t RESERVED0x4[12];\n\n    /* 0x10 : ks_int_en */\n    union {\n        struct\n        {\n            uint32_t ks_int_en     : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t reserved_1_31 : 31; /* [31: 1],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ks_int_en;\n\n    /* 0x14 : ks_int_sts */\n    union {\n        struct\n        {\n            uint32_t keycode_valid : 4;  /* [ 3: 0],          r,        0x0 */\n            uint32_t reserved_4_31 : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ks_int_sts;\n\n    /* 0x18 : keycode_clr */\n    union {\n        struct\n        {\n            uint32_t keycode_clr   : 4;  /* [ 3: 0],        w1c,        0x0 */\n            uint32_t reserved_4_31 : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } keycode_clr;\n\n    /* 0x1C : keycode_value */\n    union {\n        struct\n        {\n            uint32_t keycode0 : 8; /* [ 7: 0],          r,       0xff */\n            uint32_t keycode1 : 8; /* [15: 8],          r,       0xff */\n            uint32_t keycode2 : 8; /* [23:16],          r,       0xff */\n            uint32_t keycode3 : 8; /* [31:24],          r,       0xff */\n        } BF;\n        uint32_t WORD;\n    } keycode_value;\n};\n\ntypedef volatile struct kys_reg kys_reg_t;\n\n#endif /* __KYS_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/l1c_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    l1c_reg.h\n  * @version V1.2\n  * @date    2020-07-08\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __L1C_REG_H__\n#define __L1C_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : l1c_config */\n#define L1C_CONFIG_OFFSET            (0x0)\n#define L1C_CACHEABLE                L1C_CACHEABLE\n#define L1C_CACHEABLE_POS            (0U)\n#define L1C_CACHEABLE_LEN            (1U)\n#define L1C_CACHEABLE_MSK            (((1U << L1C_CACHEABLE_LEN) - 1) << L1C_CACHEABLE_POS)\n#define L1C_CACHEABLE_UMSK           (~(((1U << L1C_CACHEABLE_LEN) - 1) << L1C_CACHEABLE_POS))\n#define L1C_CNT_EN                   L1C_CNT_EN\n#define L1C_CNT_EN_POS               (1U)\n#define L1C_CNT_EN_LEN               (1U)\n#define L1C_CNT_EN_MSK               (((1U << L1C_CNT_EN_LEN) - 1) << L1C_CNT_EN_POS)\n#define L1C_CNT_EN_UMSK              (~(((1U << L1C_CNT_EN_LEN) - 1) << L1C_CNT_EN_POS))\n#define L1C_INVALID_EN               L1C_INVALID_EN\n#define L1C_INVALID_EN_POS           (2U)\n#define L1C_INVALID_EN_LEN           (1U)\n#define L1C_INVALID_EN_MSK           (((1U << L1C_INVALID_EN_LEN) - 1) << L1C_INVALID_EN_POS)\n#define L1C_INVALID_EN_UMSK          (~(((1U << L1C_INVALID_EN_LEN) - 1) << L1C_INVALID_EN_POS))\n#define L1C_INVALID_DONE             L1C_INVALID_DONE\n#define L1C_INVALID_DONE_POS         (3U)\n#define L1C_INVALID_DONE_LEN         (1U)\n#define L1C_INVALID_DONE_MSK         (((1U << L1C_INVALID_DONE_LEN) - 1) << L1C_INVALID_DONE_POS)\n#define L1C_INVALID_DONE_UMSK        (~(((1U << L1C_INVALID_DONE_LEN) - 1) << L1C_INVALID_DONE_POS))\n#define L1C_WT_EN                    L1C_WT_EN\n#define L1C_WT_EN_POS                (4U)\n#define L1C_WT_EN_LEN                (1U)\n#define L1C_WT_EN_MSK                (((1U << L1C_WT_EN_LEN) - 1) << L1C_WT_EN_POS)\n#define L1C_WT_EN_UMSK               (~(((1U << L1C_WT_EN_LEN) - 1) << L1C_WT_EN_POS))\n#define L1C_WB_EN                    L1C_WB_EN\n#define L1C_WB_EN_POS                (5U)\n#define L1C_WB_EN_LEN                (1U)\n#define L1C_WB_EN_MSK                (((1U << L1C_WB_EN_LEN) - 1) << L1C_WB_EN_POS)\n#define L1C_WB_EN_UMSK               (~(((1U << L1C_WB_EN_LEN) - 1) << L1C_WB_EN_POS))\n#define L1C_WA_EN                    L1C_WA_EN\n#define L1C_WA_EN_POS                (6U)\n#define L1C_WA_EN_LEN                (1U)\n#define L1C_WA_EN_MSK                (((1U << L1C_WA_EN_LEN) - 1) << L1C_WA_EN_POS)\n#define L1C_WA_EN_UMSK               (~(((1U << L1C_WA_EN_LEN) - 1) << L1C_WA_EN_POS))\n#define L1C_RANDOM_REPLACE           L1C_RANDOM_REPLACE\n#define L1C_RANDOM_REPLACE_POS       (7U)\n#define L1C_RANDOM_REPLACE_LEN       (1U)\n#define L1C_RANDOM_REPLACE_MSK       (((1U << L1C_RANDOM_REPLACE_LEN) - 1) << L1C_RANDOM_REPLACE_POS)\n#define L1C_RANDOM_REPLACE_UMSK      (~(((1U << L1C_RANDOM_REPLACE_LEN) - 1) << L1C_RANDOM_REPLACE_POS))\n#define L1C_WAY_DIS                  L1C_WAY_DIS\n#define L1C_WAY_DIS_POS              (8U)\n#define L1C_WAY_DIS_LEN              (4U)\n#define L1C_WAY_DIS_MSK              (((1U << L1C_WAY_DIS_LEN) - 1) << L1C_WAY_DIS_POS)\n#define L1C_WAY_DIS_UMSK             (~(((1U << L1C_WAY_DIS_LEN) - 1) << L1C_WAY_DIS_POS))\n#define L1C_IROM_2T_ACCESS           L1C_IROM_2T_ACCESS\n#define L1C_IROM_2T_ACCESS_POS       (12U)\n#define L1C_IROM_2T_ACCESS_LEN       (1U)\n#define L1C_IROM_2T_ACCESS_MSK       (((1U << L1C_IROM_2T_ACCESS_LEN) - 1) << L1C_IROM_2T_ACCESS_POS)\n#define L1C_IROM_2T_ACCESS_UMSK      (~(((1U << L1C_IROM_2T_ACCESS_LEN) - 1) << L1C_IROM_2T_ACCESS_POS))\n#define L1C_BYPASS                   L1C_BYPASS\n#define L1C_BYPASS_POS               (14U)\n#define L1C_BYPASS_LEN               (1U)\n#define L1C_BYPASS_MSK               (((1U << L1C_BYPASS_LEN) - 1) << L1C_BYPASS_POS)\n#define L1C_BYPASS_UMSK              (~(((1U << L1C_BYPASS_LEN) - 1) << L1C_BYPASS_POS))\n#define L1C_BMX_ERR_EN               L1C_BMX_ERR_EN\n#define L1C_BMX_ERR_EN_POS           (15U)\n#define L1C_BMX_ERR_EN_LEN           (1U)\n#define L1C_BMX_ERR_EN_MSK           (((1U << L1C_BMX_ERR_EN_LEN) - 1) << L1C_BMX_ERR_EN_POS)\n#define L1C_BMX_ERR_EN_UMSK          (~(((1U << L1C_BMX_ERR_EN_LEN) - 1) << L1C_BMX_ERR_EN_POS))\n#define L1C_BMX_ARB_MODE             L1C_BMX_ARB_MODE\n#define L1C_BMX_ARB_MODE_POS         (16U)\n#define L1C_BMX_ARB_MODE_LEN         (2U)\n#define L1C_BMX_ARB_MODE_MSK         (((1U << L1C_BMX_ARB_MODE_LEN) - 1) << L1C_BMX_ARB_MODE_POS)\n#define L1C_BMX_ARB_MODE_UMSK        (~(((1U << L1C_BMX_ARB_MODE_LEN) - 1) << L1C_BMX_ARB_MODE_POS))\n#define L1C_BMX_TIMEOUT_EN           L1C_BMX_TIMEOUT_EN\n#define L1C_BMX_TIMEOUT_EN_POS       (20U)\n#define L1C_BMX_TIMEOUT_EN_LEN       (4U)\n#define L1C_BMX_TIMEOUT_EN_MSK       (((1U << L1C_BMX_TIMEOUT_EN_LEN) - 1) << L1C_BMX_TIMEOUT_EN_POS)\n#define L1C_BMX_TIMEOUT_EN_UMSK      (~(((1U << L1C_BMX_TIMEOUT_EN_LEN) - 1) << L1C_BMX_TIMEOUT_EN_POS))\n#define L1C_BMX_BUSY_OPTION_DIS      L1C_BMX_BUSY_OPTION_DIS\n#define L1C_BMX_BUSY_OPTION_DIS_POS  (24U)\n#define L1C_BMX_BUSY_OPTION_DIS_LEN  (1U)\n#define L1C_BMX_BUSY_OPTION_DIS_MSK  (((1U << L1C_BMX_BUSY_OPTION_DIS_LEN) - 1) << L1C_BMX_BUSY_OPTION_DIS_POS)\n#define L1C_BMX_BUSY_OPTION_DIS_UMSK (~(((1U << L1C_BMX_BUSY_OPTION_DIS_LEN) - 1) << L1C_BMX_BUSY_OPTION_DIS_POS))\n#define L1C_EARLY_RESP_DIS           L1C_EARLY_RESP_DIS\n#define L1C_EARLY_RESP_DIS_POS       (25U)\n#define L1C_EARLY_RESP_DIS_LEN       (1U)\n#define L1C_EARLY_RESP_DIS_MSK       (((1U << L1C_EARLY_RESP_DIS_LEN) - 1) << L1C_EARLY_RESP_DIS_POS)\n#define L1C_EARLY_RESP_DIS_UMSK      (~(((1U << L1C_EARLY_RESP_DIS_LEN) - 1) << L1C_EARLY_RESP_DIS_POS))\n#define L1C_WRAP_DIS                 L1C_WRAP_DIS\n#define L1C_WRAP_DIS_POS             (26U)\n#define L1C_WRAP_DIS_LEN             (1U)\n#define L1C_WRAP_DIS_MSK             (((1U << L1C_WRAP_DIS_LEN) - 1) << L1C_WRAP_DIS_POS)\n#define L1C_WRAP_DIS_UMSK            (~(((1U << L1C_WRAP_DIS_LEN) - 1) << L1C_WRAP_DIS_POS))\n#define L1C_FLUSH_EN                 L1C_FLUSH_EN\n#define L1C_FLUSH_EN_POS             (28U)\n#define L1C_FLUSH_EN_LEN             (1U)\n#define L1C_FLUSH_EN_MSK             (((1U << L1C_FLUSH_EN_LEN) - 1) << L1C_FLUSH_EN_POS)\n#define L1C_FLUSH_EN_UMSK            (~(((1U << L1C_FLUSH_EN_LEN) - 1) << L1C_FLUSH_EN_POS))\n#define L1C_FLUSH_DONE               L1C_FLUSH_DONE\n#define L1C_FLUSH_DONE_POS           (29U)\n#define L1C_FLUSH_DONE_LEN           (1U)\n#define L1C_FLUSH_DONE_MSK           (((1U << L1C_FLUSH_DONE_LEN) - 1) << L1C_FLUSH_DONE_POS)\n#define L1C_FLUSH_DONE_UMSK          (~(((1U << L1C_FLUSH_DONE_LEN) - 1) << L1C_FLUSH_DONE_POS))\n\n/* 0x4 : hit_cnt_lsb */\n#define L1C_HIT_CNT_LSB_OFFSET (0x4)\n#define L1C_HIT_CNT_LSB        L1C_HIT_CNT_LSB\n#define L1C_HIT_CNT_LSB_POS    (0U)\n#define L1C_HIT_CNT_LSB_LEN    (32U)\n#define L1C_HIT_CNT_LSB_MSK    (((1U << L1C_HIT_CNT_LSB_LEN) - 1) << L1C_HIT_CNT_LSB_POS)\n#define L1C_HIT_CNT_LSB_UMSK   (~(((1U << L1C_HIT_CNT_LSB_LEN) - 1) << L1C_HIT_CNT_LSB_POS))\n\n/* 0x8 : hit_cnt_msb */\n#define L1C_HIT_CNT_MSB_OFFSET (0x8)\n#define L1C_HIT_CNT_MSB        L1C_HIT_CNT_MSB\n#define L1C_HIT_CNT_MSB_POS    (0U)\n#define L1C_HIT_CNT_MSB_LEN    (32U)\n#define L1C_HIT_CNT_MSB_MSK    (((1U << L1C_HIT_CNT_MSB_LEN) - 1) << L1C_HIT_CNT_MSB_POS)\n#define L1C_HIT_CNT_MSB_UMSK   (~(((1U << L1C_HIT_CNT_MSB_LEN) - 1) << L1C_HIT_CNT_MSB_POS))\n\n/* 0xC : miss_cnt */\n#define L1C_MISS_CNT_OFFSET (0xC)\n#define L1C_MISS_CNT        L1C_MISS_CNT\n#define L1C_MISS_CNT_POS    (0U)\n#define L1C_MISS_CNT_LEN    (32U)\n#define L1C_MISS_CNT_MSK    (((1U << L1C_MISS_CNT_LEN) - 1) << L1C_MISS_CNT_POS)\n#define L1C_MISS_CNT_UMSK   (~(((1U << L1C_MISS_CNT_LEN) - 1) << L1C_MISS_CNT_POS))\n\n/* 0x10 : l1c_misc */\n#define L1C_MISC_OFFSET (0x10)\n#define L1C_FSM         L1C_FSM\n#define L1C_FSM_POS     (28U)\n#define L1C_FSM_LEN     (3U)\n#define L1C_FSM_MSK     (((1U << L1C_FSM_LEN) - 1) << L1C_FSM_POS)\n#define L1C_FSM_UMSK    (~(((1U << L1C_FSM_LEN) - 1) << L1C_FSM_POS))\n\n/* 0x200 : l1c_bmx_err_addr_en */\n#define L1C_BMX_ERR_ADDR_EN_OFFSET (0x200)\n#define L1C_BMX_ERR_ADDR_DIS       L1C_BMX_ERR_ADDR_DIS\n#define L1C_BMX_ERR_ADDR_DIS_POS   (0U)\n#define L1C_BMX_ERR_ADDR_DIS_LEN   (1U)\n#define L1C_BMX_ERR_ADDR_DIS_MSK   (((1U << L1C_BMX_ERR_ADDR_DIS_LEN) - 1) << L1C_BMX_ERR_ADDR_DIS_POS)\n#define L1C_BMX_ERR_ADDR_DIS_UMSK  (~(((1U << L1C_BMX_ERR_ADDR_DIS_LEN) - 1) << L1C_BMX_ERR_ADDR_DIS_POS))\n#define L1C_BMX_ERR_DEC            L1C_BMX_ERR_DEC\n#define L1C_BMX_ERR_DEC_POS        (4U)\n#define L1C_BMX_ERR_DEC_LEN        (1U)\n#define L1C_BMX_ERR_DEC_MSK        (((1U << L1C_BMX_ERR_DEC_LEN) - 1) << L1C_BMX_ERR_DEC_POS)\n#define L1C_BMX_ERR_DEC_UMSK       (~(((1U << L1C_BMX_ERR_DEC_LEN) - 1) << L1C_BMX_ERR_DEC_POS))\n#define L1C_BMX_ERR_TZ             L1C_BMX_ERR_TZ\n#define L1C_BMX_ERR_TZ_POS         (5U)\n#define L1C_BMX_ERR_TZ_LEN         (1U)\n#define L1C_BMX_ERR_TZ_MSK         (((1U << L1C_BMX_ERR_TZ_LEN) - 1) << L1C_BMX_ERR_TZ_POS)\n#define L1C_BMX_ERR_TZ_UMSK        (~(((1U << L1C_BMX_ERR_TZ_LEN) - 1) << L1C_BMX_ERR_TZ_POS))\n#define L1C_HSEL_OPTION            L1C_HSEL_OPTION\n#define L1C_HSEL_OPTION_POS        (16U)\n#define L1C_HSEL_OPTION_LEN        (4U)\n#define L1C_HSEL_OPTION_MSK        (((1U << L1C_HSEL_OPTION_LEN) - 1) << L1C_HSEL_OPTION_POS)\n#define L1C_HSEL_OPTION_UMSK       (~(((1U << L1C_HSEL_OPTION_LEN) - 1) << L1C_HSEL_OPTION_POS))\n\n/* 0x204 : l1c_bmx_err_addr */\n#define L1C_BMX_ERR_ADDR_OFFSET (0x204)\n#define L1C_BMX_ERR_ADDR        L1C_BMX_ERR_ADDR\n#define L1C_BMX_ERR_ADDR_POS    (0U)\n#define L1C_BMX_ERR_ADDR_LEN    (32U)\n#define L1C_BMX_ERR_ADDR_MSK    (((1U << L1C_BMX_ERR_ADDR_LEN) - 1) << L1C_BMX_ERR_ADDR_POS)\n#define L1C_BMX_ERR_ADDR_UMSK   (~(((1U << L1C_BMX_ERR_ADDR_LEN) - 1) << L1C_BMX_ERR_ADDR_POS))\n\n/* 0x208 : irom1_misr_dataout_0 */\n#define L1C_IROM1_MISR_DATAOUT_0_OFFSET (0x208)\n#define L1C_IROM1_MISR_DATAOUT_0        L1C_IROM1_MISR_DATAOUT_0\n#define L1C_IROM1_MISR_DATAOUT_0_POS    (0U)\n#define L1C_IROM1_MISR_DATAOUT_0_LEN    (32U)\n#define L1C_IROM1_MISR_DATAOUT_0_MSK    (((1U << L1C_IROM1_MISR_DATAOUT_0_LEN) - 1) << L1C_IROM1_MISR_DATAOUT_0_POS)\n#define L1C_IROM1_MISR_DATAOUT_0_UMSK   (~(((1U << L1C_IROM1_MISR_DATAOUT_0_LEN) - 1) << L1C_IROM1_MISR_DATAOUT_0_POS))\n\n/* 0x20C : irom1_misr_dataout_1 */\n#define L1C_IROM1_MISR_DATAOUT_1_OFFSET (0x20C)\n#define L1C_IROM1_MISR_DATAOUT_1        L1C_IROM1_MISR_DATAOUT_1\n#define L1C_IROM1_MISR_DATAOUT_1_POS    (0U)\n#define L1C_IROM1_MISR_DATAOUT_1_LEN    (32U)\n#define L1C_IROM1_MISR_DATAOUT_1_MSK    (((1U << L1C_IROM1_MISR_DATAOUT_1_LEN) - 1) << L1C_IROM1_MISR_DATAOUT_1_POS)\n#define L1C_IROM1_MISR_DATAOUT_1_UMSK   (~(((1U << L1C_IROM1_MISR_DATAOUT_1_LEN) - 1) << L1C_IROM1_MISR_DATAOUT_1_POS))\n\n/* 0x210 : cpu_clk_gate */\n#define L1C_CPU_CLK_GATE_OFFSET       (0x210)\n#define L1C_FORCE_E21_CLOCK_ON_0      L1C_FORCE_E21_CLOCK_ON_0\n#define L1C_FORCE_E21_CLOCK_ON_0_POS  (0U)\n#define L1C_FORCE_E21_CLOCK_ON_0_LEN  (1U)\n#define L1C_FORCE_E21_CLOCK_ON_0_MSK  (((1U << L1C_FORCE_E21_CLOCK_ON_0_LEN) - 1) << L1C_FORCE_E21_CLOCK_ON_0_POS)\n#define L1C_FORCE_E21_CLOCK_ON_0_UMSK (~(((1U << L1C_FORCE_E21_CLOCK_ON_0_LEN) - 1) << L1C_FORCE_E21_CLOCK_ON_0_POS))\n#define L1C_FORCE_E21_CLOCK_ON_1      L1C_FORCE_E21_CLOCK_ON_1\n#define L1C_FORCE_E21_CLOCK_ON_1_POS  (1U)\n#define L1C_FORCE_E21_CLOCK_ON_1_LEN  (1U)\n#define L1C_FORCE_E21_CLOCK_ON_1_MSK  (((1U << L1C_FORCE_E21_CLOCK_ON_1_LEN) - 1) << L1C_FORCE_E21_CLOCK_ON_1_POS)\n#define L1C_FORCE_E21_CLOCK_ON_1_UMSK (~(((1U << L1C_FORCE_E21_CLOCK_ON_1_LEN) - 1) << L1C_FORCE_E21_CLOCK_ON_1_POS))\n#define L1C_FORCE_E21_CLOCK_ON_2      L1C_FORCE_E21_CLOCK_ON_2\n#define L1C_FORCE_E21_CLOCK_ON_2_POS  (2U)\n#define L1C_FORCE_E21_CLOCK_ON_2_LEN  (1U)\n#define L1C_FORCE_E21_CLOCK_ON_2_MSK  (((1U << L1C_FORCE_E21_CLOCK_ON_2_LEN) - 1) << L1C_FORCE_E21_CLOCK_ON_2_POS)\n#define L1C_FORCE_E21_CLOCK_ON_2_UMSK (~(((1U << L1C_FORCE_E21_CLOCK_ON_2_LEN) - 1) << L1C_FORCE_E21_CLOCK_ON_2_POS))\n\nstruct l1c_reg {\n    /* 0x0 : l1c_config */\n    union {\n        struct\n        {\n            uint32_t l1c_cacheable           : 1; /* [    0],        r/w,        0x0 */\n            uint32_t l1c_cnt_en              : 1; /* [    1],        r/w,        0x0 */\n            uint32_t l1c_invalid_en          : 1; /* [    2],        r/w,        0x0 */\n            uint32_t l1c_invalid_done        : 1; /* [    3],          r,        0x0 */\n            uint32_t l1c_wt_en               : 1; /* [    4],        r/w,        0x0 */\n            uint32_t l1c_wb_en               : 1; /* [    5],        r/w,        0x1 */\n            uint32_t l1c_wa_en               : 1; /* [    6],        r/w,        0x1 */\n            uint32_t l1c_random_replace      : 1; /* [    7],        r/w,        0x0 */\n            uint32_t l1c_way_dis             : 4; /* [11: 8],        r/w,        0xf */\n            uint32_t irom_2t_access          : 1; /* [   12],        r/w,        0x0 */\n            uint32_t reserved_13             : 1; /* [   13],       rsvd,        0x0 */\n            uint32_t l1c_bypass              : 1; /* [   14],        r/w,        0x0 */\n            uint32_t l1c_bmx_err_en          : 1; /* [   15],        r/w,        0x0 */\n            uint32_t l1c_bmx_arb_mode        : 2; /* [17:16],        r/w,        0x0 */\n            uint32_t reserved_18_19          : 2; /* [19:18],       rsvd,        0x0 */\n            uint32_t l1c_bmx_timeout_en      : 4; /* [23:20],        r/w,        0x0 */\n            uint32_t l1c_bmx_busy_option_dis : 1; /* [   24],        r/w,        0x0 */\n            uint32_t early_resp_dis          : 1; /* [   25],        r/w,        0x1 */\n            uint32_t wrap_dis                : 1; /* [   26],        r/w,        0x1 */\n            uint32_t reserved_27             : 1; /* [   27],       rsvd,        0x0 */\n            uint32_t l1c_flush_en            : 1; /* [   28],        r/w,        0x0 */\n            uint32_t l1c_flush_done          : 1; /* [   29],          r,        0x0 */\n            uint32_t reserved_31_30          : 2; /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } l1c_config;\n\n    /* 0x4 : hit_cnt_lsb */\n    union {\n        struct\n        {\n            uint32_t hit_cnt_lsb : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } hit_cnt_lsb;\n\n    /* 0x8 : hit_cnt_msb */\n    union {\n        struct\n        {\n            uint32_t hit_cnt_msb : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } hit_cnt_msb;\n\n    /* 0xC : miss_cnt */\n    union {\n        struct\n        {\n            uint32_t miss_cnt : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } miss_cnt;\n\n    /* 0x10 : l1c_misc */\n    union {\n        struct\n        {\n            uint32_t reserved_0_27 : 28; /* [27: 0],       rsvd,        0x0 */\n            uint32_t l1c_fsm       : 3;  /* [30:28],          r,        0x0 */\n            uint32_t reserved_31   : 1;  /* [   31],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } l1c_misc;\n\n    /* 0x14  reserved */\n    uint8_t RESERVED0x14[492];\n\n    /* 0x200 : l1c_bmx_err_addr_en */\n    union {\n        struct\n        {\n            uint32_t l1c_bmx_err_addr_dis : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1_3         : 3;  /* [ 3: 1],       rsvd,        0x0 */\n            uint32_t l1c_bmx_err_dec      : 1;  /* [    4],          r,        0x0 */\n            uint32_t l1c_bmx_err_tz       : 1;  /* [    5],          r,        0x0 */\n            uint32_t reserved_6_15        : 10; /* [15: 6],       rsvd,        0x0 */\n            uint32_t l1c_hsel_option      : 4;  /* [19:16],        r/w,        0x0 */\n            uint32_t reserved_20_31       : 12; /* [31:20],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } l1c_bmx_err_addr_en;\n\n    /* 0x204 : l1c_bmx_err_addr */\n    union {\n        struct\n        {\n            uint32_t l1c_bmx_err_addr : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } l1c_bmx_err_addr;\n\n    /* 0x208 : irom1_misr_dataout_0 */\n    union {\n        struct\n        {\n            uint32_t irom1_misr_dataout_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irom1_misr_dataout_0;\n\n    /* 0x20C : irom1_misr_dataout_1 */\n    union {\n        struct\n        {\n            uint32_t irom1_misr_dataout_1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } irom1_misr_dataout_1;\n\n    /* 0x210 : cpu_clk_gate */\n    union {\n        struct\n        {\n            uint32_t force_e21_clock_on_0 : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t force_e21_clock_on_1 : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t force_e21_clock_on_2 : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t reserved_3_31        : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } cpu_clk_gate;\n};\n\ntypedef volatile struct l1c_reg l1c_reg_t;\n\n#endif /* __L1C_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/mjpeg_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    mjpeg_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __MJPEG_REG_H__\n#define __MJPEG_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : mjpeg_control_1 */\n#define MJPEG_CONTROL_1_OFFSET          (0x0)\n#define MJPEG_REG_MJPEG_ENABLE          MJPEG_REG_MJPEG_ENABLE\n#define MJPEG_REG_MJPEG_ENABLE_POS      (0U)\n#define MJPEG_REG_MJPEG_ENABLE_LEN      (1U)\n#define MJPEG_REG_MJPEG_ENABLE_MSK      (((1U << MJPEG_REG_MJPEG_ENABLE_LEN) - 1) << MJPEG_REG_MJPEG_ENABLE_POS)\n#define MJPEG_REG_MJPEG_ENABLE_UMSK     (~(((1U << MJPEG_REG_MJPEG_ENABLE_LEN) - 1) << MJPEG_REG_MJPEG_ENABLE_POS))\n#define MJPEG_REG_MJPEG_BIT_ORDER       MJPEG_REG_MJPEG_BIT_ORDER\n#define MJPEG_REG_MJPEG_BIT_ORDER_POS   (1U)\n#define MJPEG_REG_MJPEG_BIT_ORDER_LEN   (1U)\n#define MJPEG_REG_MJPEG_BIT_ORDER_MSK   (((1U << MJPEG_REG_MJPEG_BIT_ORDER_LEN) - 1) << MJPEG_REG_MJPEG_BIT_ORDER_POS)\n#define MJPEG_REG_MJPEG_BIT_ORDER_UMSK  (~(((1U << MJPEG_REG_MJPEG_BIT_ORDER_LEN) - 1) << MJPEG_REG_MJPEG_BIT_ORDER_POS))\n#define MJPEG_REG_ORDER_U_EVEN          MJPEG_REG_ORDER_U_EVEN\n#define MJPEG_REG_ORDER_U_EVEN_POS      (2U)\n#define MJPEG_REG_ORDER_U_EVEN_LEN      (1U)\n#define MJPEG_REG_ORDER_U_EVEN_MSK      (((1U << MJPEG_REG_ORDER_U_EVEN_LEN) - 1) << MJPEG_REG_ORDER_U_EVEN_POS)\n#define MJPEG_REG_ORDER_U_EVEN_UMSK     (~(((1U << MJPEG_REG_ORDER_U_EVEN_LEN) - 1) << MJPEG_REG_ORDER_U_EVEN_POS))\n#define MJPEG_REG_WR_OVER_STOP          MJPEG_REG_WR_OVER_STOP\n#define MJPEG_REG_WR_OVER_STOP_POS      (3U)\n#define MJPEG_REG_WR_OVER_STOP_LEN      (1U)\n#define MJPEG_REG_WR_OVER_STOP_MSK      (((1U << MJPEG_REG_WR_OVER_STOP_LEN) - 1) << MJPEG_REG_WR_OVER_STOP_POS)\n#define MJPEG_REG_WR_OVER_STOP_UMSK     (~(((1U << MJPEG_REG_WR_OVER_STOP_LEN) - 1) << MJPEG_REG_WR_OVER_STOP_POS))\n#define MJPEG_REG_LAST_HF_WBLK_DMY      MJPEG_REG_LAST_HF_WBLK_DMY\n#define MJPEG_REG_LAST_HF_WBLK_DMY_POS  (4U)\n#define MJPEG_REG_LAST_HF_WBLK_DMY_LEN  (1U)\n#define MJPEG_REG_LAST_HF_WBLK_DMY_MSK  (((1U << MJPEG_REG_LAST_HF_WBLK_DMY_LEN) - 1) << MJPEG_REG_LAST_HF_WBLK_DMY_POS)\n#define MJPEG_REG_LAST_HF_WBLK_DMY_UMSK (~(((1U << MJPEG_REG_LAST_HF_WBLK_DMY_LEN) - 1) << MJPEG_REG_LAST_HF_WBLK_DMY_POS))\n#define MJPEG_REG_LAST_HF_HBLK_DMY      MJPEG_REG_LAST_HF_HBLK_DMY\n#define MJPEG_REG_LAST_HF_HBLK_DMY_POS  (5U)\n#define MJPEG_REG_LAST_HF_HBLK_DMY_LEN  (1U)\n#define MJPEG_REG_LAST_HF_HBLK_DMY_MSK  (((1U << MJPEG_REG_LAST_HF_HBLK_DMY_LEN) - 1) << MJPEG_REG_LAST_HF_HBLK_DMY_POS)\n#define MJPEG_REG_LAST_HF_HBLK_DMY_UMSK (~(((1U << MJPEG_REG_LAST_HF_HBLK_DMY_LEN) - 1) << MJPEG_REG_LAST_HF_HBLK_DMY_POS))\n#define MJPEG_REG_REFLECT_DMY           MJPEG_REG_REFLECT_DMY\n#define MJPEG_REG_REFLECT_DMY_POS       (6U)\n#define MJPEG_REG_REFLECT_DMY_LEN       (1U)\n#define MJPEG_REG_REFLECT_DMY_MSK       (((1U << MJPEG_REG_REFLECT_DMY_LEN) - 1) << MJPEG_REG_REFLECT_DMY_POS)\n#define MJPEG_REG_REFLECT_DMY_UMSK      (~(((1U << MJPEG_REG_REFLECT_DMY_LEN) - 1) << MJPEG_REG_REFLECT_DMY_POS))\n#define MJPEG_REG_H_BUST                MJPEG_REG_H_BUST\n#define MJPEG_REG_H_BUST_POS            (8U)\n#define MJPEG_REG_H_BUST_LEN            (2U)\n#define MJPEG_REG_H_BUST_MSK            (((1U << MJPEG_REG_H_BUST_LEN) - 1) << MJPEG_REG_H_BUST_POS)\n#define MJPEG_REG_H_BUST_UMSK           (~(((1U << MJPEG_REG_H_BUST_LEN) - 1) << MJPEG_REG_H_BUST_POS))\n#define MJPEG_REG_YUV_MODE              MJPEG_REG_YUV_MODE\n#define MJPEG_REG_YUV_MODE_POS          (12U)\n#define MJPEG_REG_YUV_MODE_LEN          (2U)\n#define MJPEG_REG_YUV_MODE_MSK          (((1U << MJPEG_REG_YUV_MODE_LEN) - 1) << MJPEG_REG_YUV_MODE_POS)\n#define MJPEG_REG_YUV_MODE_UMSK         (~(((1U << MJPEG_REG_YUV_MODE_LEN) - 1) << MJPEG_REG_YUV_MODE_POS))\n#define MJPEG_REG_Q_MODE                MJPEG_REG_Q_MODE\n#define MJPEG_REG_Q_MODE_POS            (16U)\n#define MJPEG_REG_Q_MODE_LEN            (7U)\n#define MJPEG_REG_Q_MODE_MSK            (((1U << MJPEG_REG_Q_MODE_LEN) - 1) << MJPEG_REG_Q_MODE_POS)\n#define MJPEG_REG_Q_MODE_UMSK           (~(((1U << MJPEG_REG_Q_MODE_LEN) - 1) << MJPEG_REG_Q_MODE_POS))\n#define MJPEG_REG_Y0_ORDER              MJPEG_REG_Y0_ORDER\n#define MJPEG_REG_Y0_ORDER_POS          (24U)\n#define MJPEG_REG_Y0_ORDER_LEN          (2U)\n#define MJPEG_REG_Y0_ORDER_MSK          (((1U << MJPEG_REG_Y0_ORDER_LEN) - 1) << MJPEG_REG_Y0_ORDER_POS)\n#define MJPEG_REG_Y0_ORDER_UMSK         (~(((1U << MJPEG_REG_Y0_ORDER_LEN) - 1) << MJPEG_REG_Y0_ORDER_POS))\n#define MJPEG_REG_U0_ORDER              MJPEG_REG_U0_ORDER\n#define MJPEG_REG_U0_ORDER_POS          (26U)\n#define MJPEG_REG_U0_ORDER_LEN          (2U)\n#define MJPEG_REG_U0_ORDER_MSK          (((1U << MJPEG_REG_U0_ORDER_LEN) - 1) << MJPEG_REG_U0_ORDER_POS)\n#define MJPEG_REG_U0_ORDER_UMSK         (~(((1U << MJPEG_REG_U0_ORDER_LEN) - 1) << MJPEG_REG_U0_ORDER_POS))\n#define MJPEG_REG_Y1_ORDER              MJPEG_REG_Y1_ORDER\n#define MJPEG_REG_Y1_ORDER_POS          (28U)\n#define MJPEG_REG_Y1_ORDER_LEN          (2U)\n#define MJPEG_REG_Y1_ORDER_MSK          (((1U << MJPEG_REG_Y1_ORDER_LEN) - 1) << MJPEG_REG_Y1_ORDER_POS)\n#define MJPEG_REG_Y1_ORDER_UMSK         (~(((1U << MJPEG_REG_Y1_ORDER_LEN) - 1) << MJPEG_REG_Y1_ORDER_POS))\n#define MJPEG_REG_V0_ORDER              MJPEG_REG_V0_ORDER\n#define MJPEG_REG_V0_ORDER_POS          (30U)\n#define MJPEG_REG_V0_ORDER_LEN          (2U)\n#define MJPEG_REG_V0_ORDER_MSK          (((1U << MJPEG_REG_V0_ORDER_LEN) - 1) << MJPEG_REG_V0_ORDER_POS)\n#define MJPEG_REG_V0_ORDER_UMSK         (~(((1U << MJPEG_REG_V0_ORDER_LEN) - 1) << MJPEG_REG_V0_ORDER_POS))\n\n/* 0x4 : mjpeg_control_2 */\n#define MJPEG_CONTROL_2_OFFSET          (0x4)\n#define MJPEG_REG_SW_FRAME              MJPEG_REG_SW_FRAME\n#define MJPEG_REG_SW_FRAME_POS          (0U)\n#define MJPEG_REG_SW_FRAME_LEN          (5U)\n#define MJPEG_REG_SW_FRAME_MSK          (((1U << MJPEG_REG_SW_FRAME_LEN) - 1) << MJPEG_REG_SW_FRAME_POS)\n#define MJPEG_REG_SW_FRAME_UMSK         (~(((1U << MJPEG_REG_SW_FRAME_LEN) - 1) << MJPEG_REG_SW_FRAME_POS))\n#define MJPEG_REG_MJPEG_SW_MODE         MJPEG_REG_MJPEG_SW_MODE\n#define MJPEG_REG_MJPEG_SW_MODE_POS     (8U)\n#define MJPEG_REG_MJPEG_SW_MODE_LEN     (1U)\n#define MJPEG_REG_MJPEG_SW_MODE_MSK     (((1U << MJPEG_REG_MJPEG_SW_MODE_LEN) - 1) << MJPEG_REG_MJPEG_SW_MODE_POS)\n#define MJPEG_REG_MJPEG_SW_MODE_UMSK    (~(((1U << MJPEG_REG_MJPEG_SW_MODE_LEN) - 1) << MJPEG_REG_MJPEG_SW_MODE_POS))\n#define MJPEG_REG_MJPEG_SW_RUN          MJPEG_REG_MJPEG_SW_RUN\n#define MJPEG_REG_MJPEG_SW_RUN_POS      (9U)\n#define MJPEG_REG_MJPEG_SW_RUN_LEN      (1U)\n#define MJPEG_REG_MJPEG_SW_RUN_MSK      (((1U << MJPEG_REG_MJPEG_SW_RUN_LEN) - 1) << MJPEG_REG_MJPEG_SW_RUN_POS)\n#define MJPEG_REG_MJPEG_SW_RUN_UMSK     (~(((1U << MJPEG_REG_MJPEG_SW_RUN_LEN) - 1) << MJPEG_REG_MJPEG_SW_RUN_POS))\n#define MJPEG_REG_YY_DVP2AHB_LSEL       MJPEG_REG_YY_DVP2AHB_LSEL\n#define MJPEG_REG_YY_DVP2AHB_LSEL_POS   (12U)\n#define MJPEG_REG_YY_DVP2AHB_LSEL_LEN   (1U)\n#define MJPEG_REG_YY_DVP2AHB_LSEL_MSK   (((1U << MJPEG_REG_YY_DVP2AHB_LSEL_LEN) - 1) << MJPEG_REG_YY_DVP2AHB_LSEL_POS)\n#define MJPEG_REG_YY_DVP2AHB_LSEL_UMSK  (~(((1U << MJPEG_REG_YY_DVP2AHB_LSEL_LEN) - 1) << MJPEG_REG_YY_DVP2AHB_LSEL_POS))\n#define MJPEG_REG_YY_DVP2AHB_FSEL       MJPEG_REG_YY_DVP2AHB_FSEL\n#define MJPEG_REG_YY_DVP2AHB_FSEL_POS   (13U)\n#define MJPEG_REG_YY_DVP2AHB_FSEL_LEN   (1U)\n#define MJPEG_REG_YY_DVP2AHB_FSEL_MSK   (((1U << MJPEG_REG_YY_DVP2AHB_FSEL_LEN) - 1) << MJPEG_REG_YY_DVP2AHB_FSEL_POS)\n#define MJPEG_REG_YY_DVP2AHB_FSEL_UMSK  (~(((1U << MJPEG_REG_YY_DVP2AHB_FSEL_LEN) - 1) << MJPEG_REG_YY_DVP2AHB_FSEL_POS))\n#define MJPEG_REG_UV_DVP2AHB_LSEL       MJPEG_REG_UV_DVP2AHB_LSEL\n#define MJPEG_REG_UV_DVP2AHB_LSEL_POS   (14U)\n#define MJPEG_REG_UV_DVP2AHB_LSEL_LEN   (1U)\n#define MJPEG_REG_UV_DVP2AHB_LSEL_MSK   (((1U << MJPEG_REG_UV_DVP2AHB_LSEL_LEN) - 1) << MJPEG_REG_UV_DVP2AHB_LSEL_POS)\n#define MJPEG_REG_UV_DVP2AHB_LSEL_UMSK  (~(((1U << MJPEG_REG_UV_DVP2AHB_LSEL_LEN) - 1) << MJPEG_REG_UV_DVP2AHB_LSEL_POS))\n#define MJPEG_REG_UV_DVP2AHB_FSEL       MJPEG_REG_UV_DVP2AHB_FSEL\n#define MJPEG_REG_UV_DVP2AHB_FSEL_POS   (15U)\n#define MJPEG_REG_UV_DVP2AHB_FSEL_LEN   (1U)\n#define MJPEG_REG_UV_DVP2AHB_FSEL_MSK   (((1U << MJPEG_REG_UV_DVP2AHB_FSEL_LEN) - 1) << MJPEG_REG_UV_DVP2AHB_FSEL_POS)\n#define MJPEG_REG_UV_DVP2AHB_FSEL_UMSK  (~(((1U << MJPEG_REG_UV_DVP2AHB_FSEL_LEN) - 1) << MJPEG_REG_UV_DVP2AHB_FSEL_POS))\n#define MJPEG_REG_MJPEG_WAIT_CYCLE      MJPEG_REG_MJPEG_WAIT_CYCLE\n#define MJPEG_REG_MJPEG_WAIT_CYCLE_POS  (16U)\n#define MJPEG_REG_MJPEG_WAIT_CYCLE_LEN  (16U)\n#define MJPEG_REG_MJPEG_WAIT_CYCLE_MSK  (((1U << MJPEG_REG_MJPEG_WAIT_CYCLE_LEN) - 1) << MJPEG_REG_MJPEG_WAIT_CYCLE_POS)\n#define MJPEG_REG_MJPEG_WAIT_CYCLE_UMSK (~(((1U << MJPEG_REG_MJPEG_WAIT_CYCLE_LEN) - 1) << MJPEG_REG_MJPEG_WAIT_CYCLE_POS))\n\n/* 0x08 : mjpeg_yy_frame_addr */\n#define MJPEG_YY_FRAME_ADDR_OFFSET   (0x08)\n#define MJPEG_REG_YY_ADDR_START      MJPEG_REG_YY_ADDR_START\n#define MJPEG_REG_YY_ADDR_START_POS  (0U)\n#define MJPEG_REG_YY_ADDR_START_LEN  (32U)\n#define MJPEG_REG_YY_ADDR_START_MSK  (((1U << MJPEG_REG_YY_ADDR_START_LEN) - 1) << MJPEG_REG_YY_ADDR_START_POS)\n#define MJPEG_REG_YY_ADDR_START_UMSK (~(((1U << MJPEG_REG_YY_ADDR_START_LEN) - 1) << MJPEG_REG_YY_ADDR_START_POS))\n\n/* 0x0C : mjpeg_uv_frame_addr */\n#define MJPEG_UV_FRAME_ADDR_OFFSET   (0x0C)\n#define MJPEG_REG_UV_ADDR_START      MJPEG_REG_UV_ADDR_START\n#define MJPEG_REG_UV_ADDR_START_POS  (0U)\n#define MJPEG_REG_UV_ADDR_START_LEN  (32U)\n#define MJPEG_REG_UV_ADDR_START_MSK  (((1U << MJPEG_REG_UV_ADDR_START_LEN) - 1) << MJPEG_REG_UV_ADDR_START_POS)\n#define MJPEG_REG_UV_ADDR_START_UMSK (~(((1U << MJPEG_REG_UV_ADDR_START_LEN) - 1) << MJPEG_REG_UV_ADDR_START_POS))\n\n/* 0x10 : mjpeg_yuv_mem */\n#define MJPEG_YUV_MEM_OFFSET       (0x10)\n#define MJPEG_REG_YY_MEM_HBLK      MJPEG_REG_YY_MEM_HBLK\n#define MJPEG_REG_YY_MEM_HBLK_POS  (0U)\n#define MJPEG_REG_YY_MEM_HBLK_LEN  (13U)\n#define MJPEG_REG_YY_MEM_HBLK_MSK  (((1U << MJPEG_REG_YY_MEM_HBLK_LEN) - 1) << MJPEG_REG_YY_MEM_HBLK_POS)\n#define MJPEG_REG_YY_MEM_HBLK_UMSK (~(((1U << MJPEG_REG_YY_MEM_HBLK_LEN) - 1) << MJPEG_REG_YY_MEM_HBLK_POS))\n#define MJPEG_REG_UV_MEM_HBLK      MJPEG_REG_UV_MEM_HBLK\n#define MJPEG_REG_UV_MEM_HBLK_POS  (16U)\n#define MJPEG_REG_UV_MEM_HBLK_LEN  (13U)\n#define MJPEG_REG_UV_MEM_HBLK_MSK  (((1U << MJPEG_REG_UV_MEM_HBLK_LEN) - 1) << MJPEG_REG_UV_MEM_HBLK_POS)\n#define MJPEG_REG_UV_MEM_HBLK_UMSK (~(((1U << MJPEG_REG_UV_MEM_HBLK_LEN) - 1) << MJPEG_REG_UV_MEM_HBLK_POS))\n\n/* 0x14 : jpeg_frame_addr */\n#define MJPEG_JPEG_FRAME_ADDR_OFFSET (0x14)\n#define MJPEG_REG_W_ADDR_START       MJPEG_REG_W_ADDR_START\n#define MJPEG_REG_W_ADDR_START_POS   (0U)\n#define MJPEG_REG_W_ADDR_START_LEN   (32U)\n#define MJPEG_REG_W_ADDR_START_MSK   (((1U << MJPEG_REG_W_ADDR_START_LEN) - 1) << MJPEG_REG_W_ADDR_START_POS)\n#define MJPEG_REG_W_ADDR_START_UMSK  (~(((1U << MJPEG_REG_W_ADDR_START_LEN) - 1) << MJPEG_REG_W_ADDR_START_POS))\n\n/* 0x18 : jpeg_store_memory */\n#define MJPEG_JPEG_STORE_MEMORY_OFFSET (0x18)\n#define MJPEG_REG_W_BURST_CNT          MJPEG_REG_W_BURST_CNT\n#define MJPEG_REG_W_BURST_CNT_POS      (0U)\n#define MJPEG_REG_W_BURST_CNT_LEN      (32U)\n#define MJPEG_REG_W_BURST_CNT_MSK      (((1U << MJPEG_REG_W_BURST_CNT_LEN) - 1) << MJPEG_REG_W_BURST_CNT_POS)\n#define MJPEG_REG_W_BURST_CNT_UMSK     (~(((1U << MJPEG_REG_W_BURST_CNT_LEN) - 1) << MJPEG_REG_W_BURST_CNT_POS))\n\n/* 0x1C : mjpeg_control_3 */\n#define MJPEG_CONTROL_3_OFFSET            (0x1C)\n#define MJPEG_REG_INT_NORMAL_EN           MJPEG_REG_INT_NORMAL_EN\n#define MJPEG_REG_INT_NORMAL_EN_POS       (0U)\n#define MJPEG_REG_INT_NORMAL_EN_LEN       (1U)\n#define MJPEG_REG_INT_NORMAL_EN_MSK       (((1U << MJPEG_REG_INT_NORMAL_EN_LEN) - 1) << MJPEG_REG_INT_NORMAL_EN_POS)\n#define MJPEG_REG_INT_NORMAL_EN_UMSK      (~(((1U << MJPEG_REG_INT_NORMAL_EN_LEN) - 1) << MJPEG_REG_INT_NORMAL_EN_POS))\n#define MJPEG_REG_INT_CAM_EN              MJPEG_REG_INT_CAM_EN\n#define MJPEG_REG_INT_CAM_EN_POS          (1U)\n#define MJPEG_REG_INT_CAM_EN_LEN          (1U)\n#define MJPEG_REG_INT_CAM_EN_MSK          (((1U << MJPEG_REG_INT_CAM_EN_LEN) - 1) << MJPEG_REG_INT_CAM_EN_POS)\n#define MJPEG_REG_INT_CAM_EN_UMSK         (~(((1U << MJPEG_REG_INT_CAM_EN_LEN) - 1) << MJPEG_REG_INT_CAM_EN_POS))\n#define MJPEG_REG_INT_MEM_EN              MJPEG_REG_INT_MEM_EN\n#define MJPEG_REG_INT_MEM_EN_POS          (2U)\n#define MJPEG_REG_INT_MEM_EN_LEN          (1U)\n#define MJPEG_REG_INT_MEM_EN_MSK          (((1U << MJPEG_REG_INT_MEM_EN_LEN) - 1) << MJPEG_REG_INT_MEM_EN_POS)\n#define MJPEG_REG_INT_MEM_EN_UMSK         (~(((1U << MJPEG_REG_INT_MEM_EN_LEN) - 1) << MJPEG_REG_INT_MEM_EN_POS))\n#define MJPEG_REG_INT_FRAME_EN            MJPEG_REG_INT_FRAME_EN\n#define MJPEG_REG_INT_FRAME_EN_POS        (3U)\n#define MJPEG_REG_INT_FRAME_EN_LEN        (1U)\n#define MJPEG_REG_INT_FRAME_EN_MSK        (((1U << MJPEG_REG_INT_FRAME_EN_LEN) - 1) << MJPEG_REG_INT_FRAME_EN_POS)\n#define MJPEG_REG_INT_FRAME_EN_UMSK       (~(((1U << MJPEG_REG_INT_FRAME_EN_LEN) - 1) << MJPEG_REG_INT_FRAME_EN_POS))\n#define MJPEG_STS_NORMAL_INT              MJPEG_STS_NORMAL_INT\n#define MJPEG_STS_NORMAL_INT_POS          (4U)\n#define MJPEG_STS_NORMAL_INT_LEN          (1U)\n#define MJPEG_STS_NORMAL_INT_MSK          (((1U << MJPEG_STS_NORMAL_INT_LEN) - 1) << MJPEG_STS_NORMAL_INT_POS)\n#define MJPEG_STS_NORMAL_INT_UMSK         (~(((1U << MJPEG_STS_NORMAL_INT_LEN) - 1) << MJPEG_STS_NORMAL_INT_POS))\n#define MJPEG_STS_CAM_INT                 MJPEG_STS_CAM_INT\n#define MJPEG_STS_CAM_INT_POS             (5U)\n#define MJPEG_STS_CAM_INT_LEN             (1U)\n#define MJPEG_STS_CAM_INT_MSK             (((1U << MJPEG_STS_CAM_INT_LEN) - 1) << MJPEG_STS_CAM_INT_POS)\n#define MJPEG_STS_CAM_INT_UMSK            (~(((1U << MJPEG_STS_CAM_INT_LEN) - 1) << MJPEG_STS_CAM_INT_POS))\n#define MJPEG_STS_MEM_INT                 MJPEG_STS_MEM_INT\n#define MJPEG_STS_MEM_INT_POS             (6U)\n#define MJPEG_STS_MEM_INT_LEN             (1U)\n#define MJPEG_STS_MEM_INT_MSK             (((1U << MJPEG_STS_MEM_INT_LEN) - 1) << MJPEG_STS_MEM_INT_POS)\n#define MJPEG_STS_MEM_INT_UMSK            (~(((1U << MJPEG_STS_MEM_INT_LEN) - 1) << MJPEG_STS_MEM_INT_POS))\n#define MJPEG_STS_FRAME_INT               MJPEG_STS_FRAME_INT\n#define MJPEG_STS_FRAME_INT_POS           (7U)\n#define MJPEG_STS_FRAME_INT_LEN           (1U)\n#define MJPEG_STS_FRAME_INT_MSK           (((1U << MJPEG_STS_FRAME_INT_LEN) - 1) << MJPEG_STS_FRAME_INT_POS)\n#define MJPEG_STS_FRAME_INT_UMSK          (~(((1U << MJPEG_STS_FRAME_INT_LEN) - 1) << MJPEG_STS_FRAME_INT_POS))\n#define MJPEG_IDLE                        MJPEG_IDLE\n#define MJPEG_IDLE_POS                    (8U)\n#define MJPEG_IDLE_LEN                    (1U)\n#define MJPEG_IDLE_MSK                    (((1U << MJPEG_IDLE_LEN) - 1) << MJPEG_IDLE_POS)\n#define MJPEG_IDLE_UMSK                   (~(((1U << MJPEG_IDLE_LEN) - 1) << MJPEG_IDLE_POS))\n#define MJPEG_FUNC                        MJPEG_FUNC\n#define MJPEG_FUNC_POS                    (9U)\n#define MJPEG_FUNC_LEN                    (1U)\n#define MJPEG_FUNC_MSK                    (((1U << MJPEG_FUNC_LEN) - 1) << MJPEG_FUNC_POS)\n#define MJPEG_FUNC_UMSK                   (~(((1U << MJPEG_FUNC_LEN) - 1) << MJPEG_FUNC_POS))\n#define MJPEG_WAIT                        MJPEG_WAIT\n#define MJPEG_WAIT_POS                    (10U)\n#define MJPEG_WAIT_LEN                    (1U)\n#define MJPEG_WAIT_MSK                    (((1U << MJPEG_WAIT_LEN) - 1) << MJPEG_WAIT_POS)\n#define MJPEG_WAIT_UMSK                   (~(((1U << MJPEG_WAIT_LEN) - 1) << MJPEG_WAIT_POS))\n#define MJPEG_FLSH                        MJPEG_FLSH\n#define MJPEG_FLSH_POS                    (11U)\n#define MJPEG_FLSH_LEN                    (1U)\n#define MJPEG_FLSH_MSK                    (((1U << MJPEG_FLSH_LEN) - 1) << MJPEG_FLSH_POS)\n#define MJPEG_FLSH_UMSK                   (~(((1U << MJPEG_FLSH_LEN) - 1) << MJPEG_FLSH_POS))\n#define MJPEG_MANS                        MJPEG_MANS\n#define MJPEG_MANS_POS                    (12U)\n#define MJPEG_MANS_LEN                    (1U)\n#define MJPEG_MANS_MSK                    (((1U << MJPEG_MANS_LEN) - 1) << MJPEG_MANS_POS)\n#define MJPEG_MANS_UMSK                   (~(((1U << MJPEG_MANS_LEN) - 1) << MJPEG_MANS_POS))\n#define MJPEG_MANF                        MJPEG_MANF\n#define MJPEG_MANF_POS                    (13U)\n#define MJPEG_MANF_LEN                    (1U)\n#define MJPEG_MANF_MSK                    (((1U << MJPEG_MANF_LEN) - 1) << MJPEG_MANF_POS)\n#define MJPEG_MANF_UMSK                   (~(((1U << MJPEG_MANF_LEN) - 1) << MJPEG_MANF_POS))\n#define MJPEG_AHB_IDLE                    MJPEG_AHB_IDLE\n#define MJPEG_AHB_IDLE_POS                (14U)\n#define MJPEG_AHB_IDLE_LEN                (1U)\n#define MJPEG_AHB_IDLE_MSK                (((1U << MJPEG_AHB_IDLE_LEN) - 1) << MJPEG_AHB_IDLE_POS)\n#define MJPEG_AHB_IDLE_UMSK               (~(((1U << MJPEG_AHB_IDLE_LEN) - 1) << MJPEG_AHB_IDLE_POS))\n#define MJPEG_REG_FRAME_CNT_TRGR_INT      MJPEG_REG_FRAME_CNT_TRGR_INT\n#define MJPEG_REG_FRAME_CNT_TRGR_INT_POS  (16U)\n#define MJPEG_REG_FRAME_CNT_TRGR_INT_LEN  (5U)\n#define MJPEG_REG_FRAME_CNT_TRGR_INT_MSK  (((1U << MJPEG_REG_FRAME_CNT_TRGR_INT_LEN) - 1) << MJPEG_REG_FRAME_CNT_TRGR_INT_POS)\n#define MJPEG_REG_FRAME_CNT_TRGR_INT_UMSK (~(((1U << MJPEG_REG_FRAME_CNT_TRGR_INT_LEN) - 1) << MJPEG_REG_FRAME_CNT_TRGR_INT_POS))\n#define MJPEG_REG_INT_IDLE_EN             MJPEG_REG_INT_IDLE_EN\n#define MJPEG_REG_INT_IDLE_EN_POS         (21U)\n#define MJPEG_REG_INT_IDLE_EN_LEN         (1U)\n#define MJPEG_REG_INT_IDLE_EN_MSK         (((1U << MJPEG_REG_INT_IDLE_EN_LEN) - 1) << MJPEG_REG_INT_IDLE_EN_POS)\n#define MJPEG_REG_INT_IDLE_EN_UMSK        (~(((1U << MJPEG_REG_INT_IDLE_EN_LEN) - 1) << MJPEG_REG_INT_IDLE_EN_POS))\n#define MJPEG_STS_IDLE_INT                MJPEG_STS_IDLE_INT\n#define MJPEG_STS_IDLE_INT_POS            (22U)\n#define MJPEG_STS_IDLE_INT_LEN            (1U)\n#define MJPEG_STS_IDLE_INT_MSK            (((1U << MJPEG_STS_IDLE_INT_LEN) - 1) << MJPEG_STS_IDLE_INT_POS)\n#define MJPEG_STS_IDLE_INT_UMSK           (~(((1U << MJPEG_STS_IDLE_INT_LEN) - 1) << MJPEG_STS_IDLE_INT_POS))\n#define MJPEG_FRAME_VALID_CNT             MJPEG_FRAME_VALID_CNT\n#define MJPEG_FRAME_VALID_CNT_POS         (24U)\n#define MJPEG_FRAME_VALID_CNT_LEN         (5U)\n#define MJPEG_FRAME_VALID_CNT_MSK         (((1U << MJPEG_FRAME_VALID_CNT_LEN) - 1) << MJPEG_FRAME_VALID_CNT_POS)\n#define MJPEG_FRAME_VALID_CNT_UMSK        (~(((1U << MJPEG_FRAME_VALID_CNT_LEN) - 1) << MJPEG_FRAME_VALID_CNT_POS))\n#define MJPEG_REG_INT_SWAP_EN             MJPEG_REG_INT_SWAP_EN\n#define MJPEG_REG_INT_SWAP_EN_POS         (29U)\n#define MJPEG_REG_INT_SWAP_EN_LEN         (1U)\n#define MJPEG_REG_INT_SWAP_EN_MSK         (((1U << MJPEG_REG_INT_SWAP_EN_LEN) - 1) << MJPEG_REG_INT_SWAP_EN_POS)\n#define MJPEG_REG_INT_SWAP_EN_UMSK        (~(((1U << MJPEG_REG_INT_SWAP_EN_LEN) - 1) << MJPEG_REG_INT_SWAP_EN_POS))\n#define MJPEG_STS_SWAP_INT                MJPEG_STS_SWAP_INT\n#define MJPEG_STS_SWAP_INT_POS            (30U)\n#define MJPEG_STS_SWAP_INT_LEN            (1U)\n#define MJPEG_STS_SWAP_INT_MSK            (((1U << MJPEG_STS_SWAP_INT_LEN) - 1) << MJPEG_STS_SWAP_INT_POS)\n#define MJPEG_STS_SWAP_INT_UMSK           (~(((1U << MJPEG_STS_SWAP_INT_LEN) - 1) << MJPEG_STS_SWAP_INT_POS))\n\n/* 0x20 : mjpeg_frame_fifo_pop */\n#define MJPEG_FRAME_FIFO_POP_OFFSET   (0x20)\n#define MJPEG_RFIFO_POP               MJPEG_RFIFO_POP\n#define MJPEG_RFIFO_POP_POS           (0U)\n#define MJPEG_RFIFO_POP_LEN           (1U)\n#define MJPEG_RFIFO_POP_MSK           (((1U << MJPEG_RFIFO_POP_LEN) - 1) << MJPEG_RFIFO_POP_POS)\n#define MJPEG_RFIFO_POP_UMSK          (~(((1U << MJPEG_RFIFO_POP_LEN) - 1) << MJPEG_RFIFO_POP_POS))\n#define MJPEG_REG_W_SWAP_CLR          MJPEG_REG_W_SWAP_CLR\n#define MJPEG_REG_W_SWAP_CLR_POS      (1U)\n#define MJPEG_REG_W_SWAP_CLR_LEN      (1U)\n#define MJPEG_REG_W_SWAP_CLR_MSK      (((1U << MJPEG_REG_W_SWAP_CLR_LEN) - 1) << MJPEG_REG_W_SWAP_CLR_POS)\n#define MJPEG_REG_W_SWAP_CLR_UMSK     (~(((1U << MJPEG_REG_W_SWAP_CLR_LEN) - 1) << MJPEG_REG_W_SWAP_CLR_POS))\n#define MJPEG_REG_INT_NORMAL_CLR      MJPEG_REG_INT_NORMAL_CLR\n#define MJPEG_REG_INT_NORMAL_CLR_POS  (8U)\n#define MJPEG_REG_INT_NORMAL_CLR_LEN  (1U)\n#define MJPEG_REG_INT_NORMAL_CLR_MSK  (((1U << MJPEG_REG_INT_NORMAL_CLR_LEN) - 1) << MJPEG_REG_INT_NORMAL_CLR_POS)\n#define MJPEG_REG_INT_NORMAL_CLR_UMSK (~(((1U << MJPEG_REG_INT_NORMAL_CLR_LEN) - 1) << MJPEG_REG_INT_NORMAL_CLR_POS))\n#define MJPEG_REG_INT_CAM_CLR         MJPEG_REG_INT_CAM_CLR\n#define MJPEG_REG_INT_CAM_CLR_POS     (9U)\n#define MJPEG_REG_INT_CAM_CLR_LEN     (1U)\n#define MJPEG_REG_INT_CAM_CLR_MSK     (((1U << MJPEG_REG_INT_CAM_CLR_LEN) - 1) << MJPEG_REG_INT_CAM_CLR_POS)\n#define MJPEG_REG_INT_CAM_CLR_UMSK    (~(((1U << MJPEG_REG_INT_CAM_CLR_LEN) - 1) << MJPEG_REG_INT_CAM_CLR_POS))\n#define MJPEG_REG_INT_MEM_CLR         MJPEG_REG_INT_MEM_CLR\n#define MJPEG_REG_INT_MEM_CLR_POS     (10U)\n#define MJPEG_REG_INT_MEM_CLR_LEN     (1U)\n#define MJPEG_REG_INT_MEM_CLR_MSK     (((1U << MJPEG_REG_INT_MEM_CLR_LEN) - 1) << MJPEG_REG_INT_MEM_CLR_POS)\n#define MJPEG_REG_INT_MEM_CLR_UMSK    (~(((1U << MJPEG_REG_INT_MEM_CLR_LEN) - 1) << MJPEG_REG_INT_MEM_CLR_POS))\n#define MJPEG_REG_INT_FRAME_CLR       MJPEG_REG_INT_FRAME_CLR\n#define MJPEG_REG_INT_FRAME_CLR_POS   (11U)\n#define MJPEG_REG_INT_FRAME_CLR_LEN   (1U)\n#define MJPEG_REG_INT_FRAME_CLR_MSK   (((1U << MJPEG_REG_INT_FRAME_CLR_LEN) - 1) << MJPEG_REG_INT_FRAME_CLR_POS)\n#define MJPEG_REG_INT_FRAME_CLR_UMSK  (~(((1U << MJPEG_REG_INT_FRAME_CLR_LEN) - 1) << MJPEG_REG_INT_FRAME_CLR_POS))\n#define MJPEG_REG_INT_IDLE_CLR        MJPEG_REG_INT_IDLE_CLR\n#define MJPEG_REG_INT_IDLE_CLR_POS    (12U)\n#define MJPEG_REG_INT_IDLE_CLR_LEN    (1U)\n#define MJPEG_REG_INT_IDLE_CLR_MSK    (((1U << MJPEG_REG_INT_IDLE_CLR_LEN) - 1) << MJPEG_REG_INT_IDLE_CLR_POS)\n#define MJPEG_REG_INT_IDLE_CLR_UMSK   (~(((1U << MJPEG_REG_INT_IDLE_CLR_LEN) - 1) << MJPEG_REG_INT_IDLE_CLR_POS))\n#define MJPEG_REG_INT_SWAP_CLR        MJPEG_REG_INT_SWAP_CLR\n#define MJPEG_REG_INT_SWAP_CLR_POS    (13U)\n#define MJPEG_REG_INT_SWAP_CLR_LEN    (1U)\n#define MJPEG_REG_INT_SWAP_CLR_MSK    (((1U << MJPEG_REG_INT_SWAP_CLR_LEN) - 1) << MJPEG_REG_INT_SWAP_CLR_POS)\n#define MJPEG_REG_INT_SWAP_CLR_UMSK   (~(((1U << MJPEG_REG_INT_SWAP_CLR_LEN) - 1) << MJPEG_REG_INT_SWAP_CLR_POS))\n\n/* 0x24 : mjpeg_frame_size */\n#define MJPEG_FRAME_SIZE_OFFSET   (0x24)\n#define MJPEG_REG_FRAME_WBLK      MJPEG_REG_FRAME_WBLK\n#define MJPEG_REG_FRAME_WBLK_POS  (0U)\n#define MJPEG_REG_FRAME_WBLK_LEN  (12U)\n#define MJPEG_REG_FRAME_WBLK_MSK  (((1U << MJPEG_REG_FRAME_WBLK_LEN) - 1) << MJPEG_REG_FRAME_WBLK_POS)\n#define MJPEG_REG_FRAME_WBLK_UMSK (~(((1U << MJPEG_REG_FRAME_WBLK_LEN) - 1) << MJPEG_REG_FRAME_WBLK_POS))\n#define MJPEG_REG_FRAME_HBLK      MJPEG_REG_FRAME_HBLK\n#define MJPEG_REG_FRAME_HBLK_POS  (16U)\n#define MJPEG_REG_FRAME_HBLK_LEN  (12U)\n#define MJPEG_REG_FRAME_HBLK_MSK  (((1U << MJPEG_REG_FRAME_HBLK_LEN) - 1) << MJPEG_REG_FRAME_HBLK_POS)\n#define MJPEG_REG_FRAME_HBLK_UMSK (~(((1U << MJPEG_REG_FRAME_HBLK_LEN) - 1) << MJPEG_REG_FRAME_HBLK_POS))\n\n/* 0x28 : mjpeg_header_byte */\n#define MJPEG_HEADER_BYTE_OFFSET (0x28)\n#define MJPEG_REG_HEAD_BYTE      MJPEG_REG_HEAD_BYTE\n#define MJPEG_REG_HEAD_BYTE_POS  (0U)\n#define MJPEG_REG_HEAD_BYTE_LEN  (12U)\n#define MJPEG_REG_HEAD_BYTE_MSK  (((1U << MJPEG_REG_HEAD_BYTE_LEN) - 1) << MJPEG_REG_HEAD_BYTE_POS)\n#define MJPEG_REG_HEAD_BYTE_UMSK (~(((1U << MJPEG_REG_HEAD_BYTE_LEN) - 1) << MJPEG_REG_HEAD_BYTE_POS))\n#define MJPEG_REG_TAIL_EXP       MJPEG_REG_TAIL_EXP\n#define MJPEG_REG_TAIL_EXP_POS   (16U)\n#define MJPEG_REG_TAIL_EXP_LEN   (1U)\n#define MJPEG_REG_TAIL_EXP_MSK   (((1U << MJPEG_REG_TAIL_EXP_LEN) - 1) << MJPEG_REG_TAIL_EXP_POS)\n#define MJPEG_REG_TAIL_EXP_UMSK  (~(((1U << MJPEG_REG_TAIL_EXP_LEN) - 1) << MJPEG_REG_TAIL_EXP_POS))\n\n/* 0x30 : mjpeg_swap_mode */\n#define MJPEG_SWAP_MODE_OFFSET       (0x30)\n#define MJPEG_REG_W_SWAP_MODE        MJPEG_REG_W_SWAP_MODE\n#define MJPEG_REG_W_SWAP_MODE_POS    (0U)\n#define MJPEG_REG_W_SWAP_MODE_LEN    (1U)\n#define MJPEG_REG_W_SWAP_MODE_MSK    (((1U << MJPEG_REG_W_SWAP_MODE_LEN) - 1) << MJPEG_REG_W_SWAP_MODE_POS)\n#define MJPEG_REG_W_SWAP_MODE_UMSK   (~(((1U << MJPEG_REG_W_SWAP_MODE_LEN) - 1) << MJPEG_REG_W_SWAP_MODE_POS))\n#define MJPEG_STS_SWAP0_FULL         MJPEG_STS_SWAP0_FULL\n#define MJPEG_STS_SWAP0_FULL_POS     (8U)\n#define MJPEG_STS_SWAP0_FULL_LEN     (1U)\n#define MJPEG_STS_SWAP0_FULL_MSK     (((1U << MJPEG_STS_SWAP0_FULL_LEN) - 1) << MJPEG_STS_SWAP0_FULL_POS)\n#define MJPEG_STS_SWAP0_FULL_UMSK    (~(((1U << MJPEG_STS_SWAP0_FULL_LEN) - 1) << MJPEG_STS_SWAP0_FULL_POS))\n#define MJPEG_STS_SWAP1_FULL         MJPEG_STS_SWAP1_FULL\n#define MJPEG_STS_SWAP1_FULL_POS     (9U)\n#define MJPEG_STS_SWAP1_FULL_LEN     (1U)\n#define MJPEG_STS_SWAP1_FULL_MSK     (((1U << MJPEG_STS_SWAP1_FULL_LEN) - 1) << MJPEG_STS_SWAP1_FULL_POS)\n#define MJPEG_STS_SWAP1_FULL_UMSK    (~(((1U << MJPEG_STS_SWAP1_FULL_LEN) - 1) << MJPEG_STS_SWAP1_FULL_POS))\n#define MJPEG_STS_READ_SWAP_IDX      MJPEG_STS_READ_SWAP_IDX\n#define MJPEG_STS_READ_SWAP_IDX_POS  (10U)\n#define MJPEG_STS_READ_SWAP_IDX_LEN  (1U)\n#define MJPEG_STS_READ_SWAP_IDX_MSK  (((1U << MJPEG_STS_READ_SWAP_IDX_LEN) - 1) << MJPEG_STS_READ_SWAP_IDX_POS)\n#define MJPEG_STS_READ_SWAP_IDX_UMSK (~(((1U << MJPEG_STS_READ_SWAP_IDX_LEN) - 1) << MJPEG_STS_READ_SWAP_IDX_POS))\n#define MJPEG_STS_SWAP_FSTART        MJPEG_STS_SWAP_FSTART\n#define MJPEG_STS_SWAP_FSTART_POS    (11U)\n#define MJPEG_STS_SWAP_FSTART_LEN    (1U)\n#define MJPEG_STS_SWAP_FSTART_MSK    (((1U << MJPEG_STS_SWAP_FSTART_LEN) - 1) << MJPEG_STS_SWAP_FSTART_POS)\n#define MJPEG_STS_SWAP_FSTART_UMSK   (~(((1U << MJPEG_STS_SWAP_FSTART_LEN) - 1) << MJPEG_STS_SWAP_FSTART_POS))\n#define MJPEG_STS_SWAP_FEND          MJPEG_STS_SWAP_FEND\n#define MJPEG_STS_SWAP_FEND_POS      (12U)\n#define MJPEG_STS_SWAP_FEND_LEN      (1U)\n#define MJPEG_STS_SWAP_FEND_MSK      (((1U << MJPEG_STS_SWAP_FEND_LEN) - 1) << MJPEG_STS_SWAP_FEND_POS)\n#define MJPEG_STS_SWAP_FEND_UMSK     (~(((1U << MJPEG_STS_SWAP_FEND_LEN) - 1) << MJPEG_STS_SWAP_FEND_POS))\n\n/* 0x34 : mjpeg_swap_bit_cnt */\n#define MJPEG_SWAP_BIT_CNT_OFFSET         (0x34)\n#define MJPEG_FRAME_SWAP_END_BIT_CNT      MJPEG_FRAME_SWAP_END_BIT_CNT\n#define MJPEG_FRAME_SWAP_END_BIT_CNT_POS  (0U)\n#define MJPEG_FRAME_SWAP_END_BIT_CNT_LEN  (32U)\n#define MJPEG_FRAME_SWAP_END_BIT_CNT_MSK  (((1U << MJPEG_FRAME_SWAP_END_BIT_CNT_LEN) - 1) << MJPEG_FRAME_SWAP_END_BIT_CNT_POS)\n#define MJPEG_FRAME_SWAP_END_BIT_CNT_UMSK (~(((1U << MJPEG_FRAME_SWAP_END_BIT_CNT_LEN) - 1) << MJPEG_FRAME_SWAP_END_BIT_CNT_POS))\n\n/* 0x38 : mjpeg_paket_ctrl */\n#define MJPEG_PAKET_CTRL_OFFSET       (0x38)\n#define MJPEG_REG_PKET_EN             MJPEG_REG_PKET_EN\n#define MJPEG_REG_PKET_EN_POS         (0U)\n#define MJPEG_REG_PKET_EN_LEN         (1U)\n#define MJPEG_REG_PKET_EN_MSK         (((1U << MJPEG_REG_PKET_EN_LEN) - 1) << MJPEG_REG_PKET_EN_POS)\n#define MJPEG_REG_PKET_EN_UMSK        (~(((1U << MJPEG_REG_PKET_EN_LEN) - 1) << MJPEG_REG_PKET_EN_POS))\n#define MJPEG_REG_JEND_TO_PEND        MJPEG_REG_JEND_TO_PEND\n#define MJPEG_REG_JEND_TO_PEND_POS    (1U)\n#define MJPEG_REG_JEND_TO_PEND_LEN    (1U)\n#define MJPEG_REG_JEND_TO_PEND_MSK    (((1U << MJPEG_REG_JEND_TO_PEND_LEN) - 1) << MJPEG_REG_JEND_TO_PEND_POS)\n#define MJPEG_REG_JEND_TO_PEND_UMSK   (~(((1U << MJPEG_REG_JEND_TO_PEND_LEN) - 1) << MJPEG_REG_JEND_TO_PEND_POS))\n#define MJPEG_REG_PKET_BODY_BYTE      MJPEG_REG_PKET_BODY_BYTE\n#define MJPEG_REG_PKET_BODY_BYTE_POS  (16U)\n#define MJPEG_REG_PKET_BODY_BYTE_LEN  (16U)\n#define MJPEG_REG_PKET_BODY_BYTE_MSK  (((1U << MJPEG_REG_PKET_BODY_BYTE_LEN) - 1) << MJPEG_REG_PKET_BODY_BYTE_POS)\n#define MJPEG_REG_PKET_BODY_BYTE_UMSK (~(((1U << MJPEG_REG_PKET_BODY_BYTE_LEN) - 1) << MJPEG_REG_PKET_BODY_BYTE_POS))\n\n/* 0x3C : mjpeg_paket_head_tail */\n#define MJPEG_PAKET_HEAD_TAIL_OFFSET  (0x3C)\n#define MJPEG_REG_PKET_HEAD_BYTE      MJPEG_REG_PKET_HEAD_BYTE\n#define MJPEG_REG_PKET_HEAD_BYTE_POS  (0U)\n#define MJPEG_REG_PKET_HEAD_BYTE_LEN  (12U)\n#define MJPEG_REG_PKET_HEAD_BYTE_MSK  (((1U << MJPEG_REG_PKET_HEAD_BYTE_LEN) - 1) << MJPEG_REG_PKET_HEAD_BYTE_POS)\n#define MJPEG_REG_PKET_HEAD_BYTE_UMSK (~(((1U << MJPEG_REG_PKET_HEAD_BYTE_LEN) - 1) << MJPEG_REG_PKET_HEAD_BYTE_POS))\n#define MJPEG_REG_PKET_TAIL_BYTE      MJPEG_REG_PKET_TAIL_BYTE\n#define MJPEG_REG_PKET_TAIL_BYTE_POS  (16U)\n#define MJPEG_REG_PKET_TAIL_BYTE_LEN  (12U)\n#define MJPEG_REG_PKET_TAIL_BYTE_MSK  (((1U << MJPEG_REG_PKET_TAIL_BYTE_LEN) - 1) << MJPEG_REG_PKET_TAIL_BYTE_POS)\n#define MJPEG_REG_PKET_TAIL_BYTE_UMSK (~(((1U << MJPEG_REG_PKET_TAIL_BYTE_LEN) - 1) << MJPEG_REG_PKET_TAIL_BYTE_POS))\n\n/* 0x40 : mjpeg_Y_frame_read_status_1 */\n#define MJPEG_Y_FRAME_READ_STATUS_1_OFFSET (0x40)\n#define MJPEG_YY_MEM_HBLK_R                MJPEG_YY_MEM_HBLK_R\n#define MJPEG_YY_MEM_HBLK_R_POS            (0U)\n#define MJPEG_YY_MEM_HBLK_R_LEN            (13U)\n#define MJPEG_YY_MEM_HBLK_R_MSK            (((1U << MJPEG_YY_MEM_HBLK_R_LEN) - 1) << MJPEG_YY_MEM_HBLK_R_POS)\n#define MJPEG_YY_MEM_HBLK_R_UMSK           (~(((1U << MJPEG_YY_MEM_HBLK_R_LEN) - 1) << MJPEG_YY_MEM_HBLK_R_POS))\n#define MJPEG_YY_FRM_HBLK_R                MJPEG_YY_FRM_HBLK_R\n#define MJPEG_YY_FRM_HBLK_R_POS            (16U)\n#define MJPEG_YY_FRM_HBLK_R_LEN            (13U)\n#define MJPEG_YY_FRM_HBLK_R_MSK            (((1U << MJPEG_YY_FRM_HBLK_R_LEN) - 1) << MJPEG_YY_FRM_HBLK_R_POS)\n#define MJPEG_YY_FRM_HBLK_R_UMSK           (~(((1U << MJPEG_YY_FRM_HBLK_R_LEN) - 1) << MJPEG_YY_FRM_HBLK_R_POS))\n\n/* 0x44 : mjpeg_Y_frame_read_status_2 */\n#define MJPEG_Y_FRAME_READ_STATUS_2_OFFSET (0x44)\n#define MJPEG_YY_WBLK_R                    MJPEG_YY_WBLK_R\n#define MJPEG_YY_WBLK_R_POS                (0U)\n#define MJPEG_YY_WBLK_R_LEN                (13U)\n#define MJPEG_YY_WBLK_R_MSK                (((1U << MJPEG_YY_WBLK_R_LEN) - 1) << MJPEG_YY_WBLK_R_POS)\n#define MJPEG_YY_WBLK_R_UMSK               (~(((1U << MJPEG_YY_WBLK_R_LEN) - 1) << MJPEG_YY_WBLK_R_POS))\n#define MJPEG_YY_MEM_RND_R                 MJPEG_YY_MEM_RND_R\n#define MJPEG_YY_MEM_RND_R_POS             (16U)\n#define MJPEG_YY_MEM_RND_R_LEN             (8U)\n#define MJPEG_YY_MEM_RND_R_MSK             (((1U << MJPEG_YY_MEM_RND_R_LEN) - 1) << MJPEG_YY_MEM_RND_R_POS)\n#define MJPEG_YY_MEM_RND_R_UMSK            (~(((1U << MJPEG_YY_MEM_RND_R_LEN) - 1) << MJPEG_YY_MEM_RND_R_POS))\n#define MJPEG_YY_FRM_CNT_R                 MJPEG_YY_FRM_CNT_R\n#define MJPEG_YY_FRM_CNT_R_POS             (24U)\n#define MJPEG_YY_FRM_CNT_R_LEN             (8U)\n#define MJPEG_YY_FRM_CNT_R_MSK             (((1U << MJPEG_YY_FRM_CNT_R_LEN) - 1) << MJPEG_YY_FRM_CNT_R_POS)\n#define MJPEG_YY_FRM_CNT_R_UMSK            (~(((1U << MJPEG_YY_FRM_CNT_R_LEN) - 1) << MJPEG_YY_FRM_CNT_R_POS))\n\n/* 0x48 : mjpeg_Y_frame_write_status */\n#define MJPEG_Y_FRAME_WRITE_STATUS_OFFSET (0x48)\n#define MJPEG_YY_MEM_HBLK_W               MJPEG_YY_MEM_HBLK_W\n#define MJPEG_YY_MEM_HBLK_W_POS           (0U)\n#define MJPEG_YY_MEM_HBLK_W_LEN           (13U)\n#define MJPEG_YY_MEM_HBLK_W_MSK           (((1U << MJPEG_YY_MEM_HBLK_W_LEN) - 1) << MJPEG_YY_MEM_HBLK_W_POS)\n#define MJPEG_YY_MEM_HBLK_W_UMSK          (~(((1U << MJPEG_YY_MEM_HBLK_W_LEN) - 1) << MJPEG_YY_MEM_HBLK_W_POS))\n#define MJPEG_YY_MEM_RND_W                MJPEG_YY_MEM_RND_W\n#define MJPEG_YY_MEM_RND_W_POS            (16U)\n#define MJPEG_YY_MEM_RND_W_LEN            (8U)\n#define MJPEG_YY_MEM_RND_W_MSK            (((1U << MJPEG_YY_MEM_RND_W_LEN) - 1) << MJPEG_YY_MEM_RND_W_POS)\n#define MJPEG_YY_MEM_RND_W_UMSK           (~(((1U << MJPEG_YY_MEM_RND_W_LEN) - 1) << MJPEG_YY_MEM_RND_W_POS))\n#define MJPEG_YY_FRM_CNT_W                MJPEG_YY_FRM_CNT_W\n#define MJPEG_YY_FRM_CNT_W_POS            (24U)\n#define MJPEG_YY_FRM_CNT_W_LEN            (8U)\n#define MJPEG_YY_FRM_CNT_W_MSK            (((1U << MJPEG_YY_FRM_CNT_W_LEN) - 1) << MJPEG_YY_FRM_CNT_W_POS)\n#define MJPEG_YY_FRM_CNT_W_UMSK           (~(((1U << MJPEG_YY_FRM_CNT_W_LEN) - 1) << MJPEG_YY_FRM_CNT_W_POS))\n\n/* 0x4C : mjpeg_UV_frame_read_status_1 */\n#define MJPEG_UV_FRAME_READ_STATUS_1_OFFSET (0x4C)\n#define MJPEG_UV_MEM_HBLK_R                 MJPEG_UV_MEM_HBLK_R\n#define MJPEG_UV_MEM_HBLK_R_POS             (0U)\n#define MJPEG_UV_MEM_HBLK_R_LEN             (13U)\n#define MJPEG_UV_MEM_HBLK_R_MSK             (((1U << MJPEG_UV_MEM_HBLK_R_LEN) - 1) << MJPEG_UV_MEM_HBLK_R_POS)\n#define MJPEG_UV_MEM_HBLK_R_UMSK            (~(((1U << MJPEG_UV_MEM_HBLK_R_LEN) - 1) << MJPEG_UV_MEM_HBLK_R_POS))\n#define MJPEG_UV_FRM_HBLK_R                 MJPEG_UV_FRM_HBLK_R\n#define MJPEG_UV_FRM_HBLK_R_POS             (16U)\n#define MJPEG_UV_FRM_HBLK_R_LEN             (13U)\n#define MJPEG_UV_FRM_HBLK_R_MSK             (((1U << MJPEG_UV_FRM_HBLK_R_LEN) - 1) << MJPEG_UV_FRM_HBLK_R_POS)\n#define MJPEG_UV_FRM_HBLK_R_UMSK            (~(((1U << MJPEG_UV_FRM_HBLK_R_LEN) - 1) << MJPEG_UV_FRM_HBLK_R_POS))\n\n/* 0x50 : mjpeg_UV_frame_read_status_2 */\n#define MJPEG_UV_FRAME_READ_STATUS_2_OFFSET (0x50)\n#define MJPEG_UV_WBLK_R                     MJPEG_UV_WBLK_R\n#define MJPEG_UV_WBLK_R_POS                 (0U)\n#define MJPEG_UV_WBLK_R_LEN                 (13U)\n#define MJPEG_UV_WBLK_R_MSK                 (((1U << MJPEG_UV_WBLK_R_LEN) - 1) << MJPEG_UV_WBLK_R_POS)\n#define MJPEG_UV_WBLK_R_UMSK                (~(((1U << MJPEG_UV_WBLK_R_LEN) - 1) << MJPEG_UV_WBLK_R_POS))\n#define MJPEG_UV_MEM_RND_R                  MJPEG_UV_MEM_RND_R\n#define MJPEG_UV_MEM_RND_R_POS              (16U)\n#define MJPEG_UV_MEM_RND_R_LEN              (8U)\n#define MJPEG_UV_MEM_RND_R_MSK              (((1U << MJPEG_UV_MEM_RND_R_LEN) - 1) << MJPEG_UV_MEM_RND_R_POS)\n#define MJPEG_UV_MEM_RND_R_UMSK             (~(((1U << MJPEG_UV_MEM_RND_R_LEN) - 1) << MJPEG_UV_MEM_RND_R_POS))\n#define MJPEG_UV_FRM_CNT_R                  MJPEG_UV_FRM_CNT_R\n#define MJPEG_UV_FRM_CNT_R_POS              (24U)\n#define MJPEG_UV_FRM_CNT_R_LEN              (8U)\n#define MJPEG_UV_FRM_CNT_R_MSK              (((1U << MJPEG_UV_FRM_CNT_R_LEN) - 1) << MJPEG_UV_FRM_CNT_R_POS)\n#define MJPEG_UV_FRM_CNT_R_UMSK             (~(((1U << MJPEG_UV_FRM_CNT_R_LEN) - 1) << MJPEG_UV_FRM_CNT_R_POS))\n\n/* 0x54 : mjpeg_UV_frame_write_status */\n#define MJPEG_UV_FRAME_WRITE_STATUS_OFFSET (0x54)\n#define MJPEG_UV_MEM_HBLK_W                MJPEG_UV_MEM_HBLK_W\n#define MJPEG_UV_MEM_HBLK_W_POS            (0U)\n#define MJPEG_UV_MEM_HBLK_W_LEN            (13U)\n#define MJPEG_UV_MEM_HBLK_W_MSK            (((1U << MJPEG_UV_MEM_HBLK_W_LEN) - 1) << MJPEG_UV_MEM_HBLK_W_POS)\n#define MJPEG_UV_MEM_HBLK_W_UMSK           (~(((1U << MJPEG_UV_MEM_HBLK_W_LEN) - 1) << MJPEG_UV_MEM_HBLK_W_POS))\n#define MJPEG_UV_MEM_RND_W                 MJPEG_UV_MEM_RND_W\n#define MJPEG_UV_MEM_RND_W_POS             (16U)\n#define MJPEG_UV_MEM_RND_W_LEN             (8U)\n#define MJPEG_UV_MEM_RND_W_MSK             (((1U << MJPEG_UV_MEM_RND_W_LEN) - 1) << MJPEG_UV_MEM_RND_W_POS)\n#define MJPEG_UV_MEM_RND_W_UMSK            (~(((1U << MJPEG_UV_MEM_RND_W_LEN) - 1) << MJPEG_UV_MEM_RND_W_POS))\n#define MJPEG_UV_FRM_CNT_W                 MJPEG_UV_FRM_CNT_W\n#define MJPEG_UV_FRM_CNT_W_POS             (24U)\n#define MJPEG_UV_FRM_CNT_W_LEN             (8U)\n#define MJPEG_UV_FRM_CNT_W_MSK             (((1U << MJPEG_UV_FRM_CNT_W_LEN) - 1) << MJPEG_UV_FRM_CNT_W_POS)\n#define MJPEG_UV_FRM_CNT_W_UMSK            (~(((1U << MJPEG_UV_FRM_CNT_W_LEN) - 1) << MJPEG_UV_FRM_CNT_W_POS))\n\n/* 0x80 : mjpeg_start_addr0 */\n#define MJPEG_START_ADDR0_OFFSET      (0x80)\n#define MJPEG_FRAME_START_ADDR_0      MJPEG_FRAME_START_ADDR_0\n#define MJPEG_FRAME_START_ADDR_0_POS  (0U)\n#define MJPEG_FRAME_START_ADDR_0_LEN  (32U)\n#define MJPEG_FRAME_START_ADDR_0_MSK  (((1U << MJPEG_FRAME_START_ADDR_0_LEN) - 1) << MJPEG_FRAME_START_ADDR_0_POS)\n#define MJPEG_FRAME_START_ADDR_0_UMSK (~(((1U << MJPEG_FRAME_START_ADDR_0_LEN) - 1) << MJPEG_FRAME_START_ADDR_0_POS))\n\n/* 0x84 : mjpeg_bit_cnt0 */\n#define MJPEG_BIT_CNT0_OFFSET      (0x84)\n#define MJPEG_FRAME_BIT_CNT_0      MJPEG_FRAME_BIT_CNT_0\n#define MJPEG_FRAME_BIT_CNT_0_POS  (0U)\n#define MJPEG_FRAME_BIT_CNT_0_LEN  (32U)\n#define MJPEG_FRAME_BIT_CNT_0_MSK  (((1U << MJPEG_FRAME_BIT_CNT_0_LEN) - 1) << MJPEG_FRAME_BIT_CNT_0_POS)\n#define MJPEG_FRAME_BIT_CNT_0_UMSK (~(((1U << MJPEG_FRAME_BIT_CNT_0_LEN) - 1) << MJPEG_FRAME_BIT_CNT_0_POS))\n\n/* 0x88 : mjpeg_start_addr1 */\n#define MJPEG_START_ADDR1_OFFSET      (0x88)\n#define MJPEG_FRAME_START_ADDR_1      MJPEG_FRAME_START_ADDR_1\n#define MJPEG_FRAME_START_ADDR_1_POS  (0U)\n#define MJPEG_FRAME_START_ADDR_1_LEN  (32U)\n#define MJPEG_FRAME_START_ADDR_1_MSK  (((1U << MJPEG_FRAME_START_ADDR_1_LEN) - 1) << MJPEG_FRAME_START_ADDR_1_POS)\n#define MJPEG_FRAME_START_ADDR_1_UMSK (~(((1U << MJPEG_FRAME_START_ADDR_1_LEN) - 1) << MJPEG_FRAME_START_ADDR_1_POS))\n\n/* 0x8C : mjpeg_bit_cnt1 */\n#define MJPEG_BIT_CNT1_OFFSET      (0x8C)\n#define MJPEG_FRAME_BIT_CNT_1      MJPEG_FRAME_BIT_CNT_1\n#define MJPEG_FRAME_BIT_CNT_1_POS  (0U)\n#define MJPEG_FRAME_BIT_CNT_1_LEN  (32U)\n#define MJPEG_FRAME_BIT_CNT_1_MSK  (((1U << MJPEG_FRAME_BIT_CNT_1_LEN) - 1) << MJPEG_FRAME_BIT_CNT_1_POS)\n#define MJPEG_FRAME_BIT_CNT_1_UMSK (~(((1U << MJPEG_FRAME_BIT_CNT_1_LEN) - 1) << MJPEG_FRAME_BIT_CNT_1_POS))\n\n/* 0x90 : mjpeg_start_addr2 */\n#define MJPEG_START_ADDR2_OFFSET      (0x90)\n#define MJPEG_FRAME_START_ADDR_2      MJPEG_FRAME_START_ADDR_2\n#define MJPEG_FRAME_START_ADDR_2_POS  (0U)\n#define MJPEG_FRAME_START_ADDR_2_LEN  (32U)\n#define MJPEG_FRAME_START_ADDR_2_MSK  (((1U << MJPEG_FRAME_START_ADDR_2_LEN) - 1) << MJPEG_FRAME_START_ADDR_2_POS)\n#define MJPEG_FRAME_START_ADDR_2_UMSK (~(((1U << MJPEG_FRAME_START_ADDR_2_LEN) - 1) << MJPEG_FRAME_START_ADDR_2_POS))\n\n/* 0x94 : mjpeg_bit_cnt2 */\n#define MJPEG_BIT_CNT2_OFFSET      (0x94)\n#define MJPEG_FRAME_BIT_CNT_2      MJPEG_FRAME_BIT_CNT_2\n#define MJPEG_FRAME_BIT_CNT_2_POS  (0U)\n#define MJPEG_FRAME_BIT_CNT_2_LEN  (32U)\n#define MJPEG_FRAME_BIT_CNT_2_MSK  (((1U << MJPEG_FRAME_BIT_CNT_2_LEN) - 1) << MJPEG_FRAME_BIT_CNT_2_POS)\n#define MJPEG_FRAME_BIT_CNT_2_UMSK (~(((1U << MJPEG_FRAME_BIT_CNT_2_LEN) - 1) << MJPEG_FRAME_BIT_CNT_2_POS))\n\n/* 0x98 : mjpeg_start_addr3 */\n#define MJPEG_START_ADDR3_OFFSET      (0x98)\n#define MJPEG_FRAME_START_ADDR_3      MJPEG_FRAME_START_ADDR_3\n#define MJPEG_FRAME_START_ADDR_3_POS  (0U)\n#define MJPEG_FRAME_START_ADDR_3_LEN  (32U)\n#define MJPEG_FRAME_START_ADDR_3_MSK  (((1U << MJPEG_FRAME_START_ADDR_3_LEN) - 1) << MJPEG_FRAME_START_ADDR_3_POS)\n#define MJPEG_FRAME_START_ADDR_3_UMSK (~(((1U << MJPEG_FRAME_START_ADDR_3_LEN) - 1) << MJPEG_FRAME_START_ADDR_3_POS))\n\n/* 0x9C : mjpeg_bit_cnt3 */\n#define MJPEG_BIT_CNT3_OFFSET      (0x9C)\n#define MJPEG_FRAME_BIT_CNT_3      MJPEG_FRAME_BIT_CNT_3\n#define MJPEG_FRAME_BIT_CNT_3_POS  (0U)\n#define MJPEG_FRAME_BIT_CNT_3_LEN  (32U)\n#define MJPEG_FRAME_BIT_CNT_3_MSK  (((1U << MJPEG_FRAME_BIT_CNT_3_LEN) - 1) << MJPEG_FRAME_BIT_CNT_3_POS)\n#define MJPEG_FRAME_BIT_CNT_3_UMSK (~(((1U << MJPEG_FRAME_BIT_CNT_3_LEN) - 1) << MJPEG_FRAME_BIT_CNT_3_POS))\n\n/* 0xA0 : mjpeg_start_addr4 */\n#define MJPEG_START_ADDR4_OFFSET      (0xA0)\n#define MJPEG_FRAME_START_ADDR_4      MJPEG_FRAME_START_ADDR_4\n#define MJPEG_FRAME_START_ADDR_4_POS  (0U)\n#define MJPEG_FRAME_START_ADDR_4_LEN  (32U)\n#define MJPEG_FRAME_START_ADDR_4_MSK  (((1U << MJPEG_FRAME_START_ADDR_4_LEN) - 1) << MJPEG_FRAME_START_ADDR_4_POS)\n#define MJPEG_FRAME_START_ADDR_4_UMSK (~(((1U << MJPEG_FRAME_START_ADDR_4_LEN) - 1) << MJPEG_FRAME_START_ADDR_4_POS))\n\n/* 0xA4 : mjpeg_bit_cnt4 */\n#define MJPEG_BIT_CNT4_OFFSET      (0xA4)\n#define MJPEG_FRAME_BIT_CNT_4      MJPEG_FRAME_BIT_CNT_4\n#define MJPEG_FRAME_BIT_CNT_4_POS  (0U)\n#define MJPEG_FRAME_BIT_CNT_4_LEN  (32U)\n#define MJPEG_FRAME_BIT_CNT_4_MSK  (((1U << MJPEG_FRAME_BIT_CNT_4_LEN) - 1) << MJPEG_FRAME_BIT_CNT_4_POS)\n#define MJPEG_FRAME_BIT_CNT_4_UMSK (~(((1U << MJPEG_FRAME_BIT_CNT_4_LEN) - 1) << MJPEG_FRAME_BIT_CNT_4_POS))\n\n/* 0xA8 : mjpeg_start_addr5 */\n#define MJPEG_START_ADDR5_OFFSET      (0xA8)\n#define MJPEG_FRAME_START_ADDR_5      MJPEG_FRAME_START_ADDR_5\n#define MJPEG_FRAME_START_ADDR_5_POS  (0U)\n#define MJPEG_FRAME_START_ADDR_5_LEN  (32U)\n#define MJPEG_FRAME_START_ADDR_5_MSK  (((1U << MJPEG_FRAME_START_ADDR_5_LEN) - 1) << MJPEG_FRAME_START_ADDR_5_POS)\n#define MJPEG_FRAME_START_ADDR_5_UMSK (~(((1U << MJPEG_FRAME_START_ADDR_5_LEN) - 1) << MJPEG_FRAME_START_ADDR_5_POS))\n\n/* 0xAC : mjpeg_bit_cnt5 */\n#define MJPEG_BIT_CNT5_OFFSET      (0xAC)\n#define MJPEG_FRAME_BIT_CNT_5      MJPEG_FRAME_BIT_CNT_5\n#define MJPEG_FRAME_BIT_CNT_5_POS  (0U)\n#define MJPEG_FRAME_BIT_CNT_5_LEN  (32U)\n#define MJPEG_FRAME_BIT_CNT_5_MSK  (((1U << MJPEG_FRAME_BIT_CNT_5_LEN) - 1) << MJPEG_FRAME_BIT_CNT_5_POS)\n#define MJPEG_FRAME_BIT_CNT_5_UMSK (~(((1U << MJPEG_FRAME_BIT_CNT_5_LEN) - 1) << MJPEG_FRAME_BIT_CNT_5_POS))\n\n/* 0xB0 : mjpeg_start_addr6 */\n#define MJPEG_START_ADDR6_OFFSET      (0xB0)\n#define MJPEG_FRAME_START_ADDR_6      MJPEG_FRAME_START_ADDR_6\n#define MJPEG_FRAME_START_ADDR_6_POS  (0U)\n#define MJPEG_FRAME_START_ADDR_6_LEN  (32U)\n#define MJPEG_FRAME_START_ADDR_6_MSK  (((1U << MJPEG_FRAME_START_ADDR_6_LEN) - 1) << MJPEG_FRAME_START_ADDR_6_POS)\n#define MJPEG_FRAME_START_ADDR_6_UMSK (~(((1U << MJPEG_FRAME_START_ADDR_6_LEN) - 1) << MJPEG_FRAME_START_ADDR_6_POS))\n\n/* 0xB4 : mjpeg_bit_cnt6 */\n#define MJPEG_BIT_CNT6_OFFSET      (0xB4)\n#define MJPEG_FRAME_BIT_CNT_6      MJPEG_FRAME_BIT_CNT_6\n#define MJPEG_FRAME_BIT_CNT_6_POS  (0U)\n#define MJPEG_FRAME_BIT_CNT_6_LEN  (32U)\n#define MJPEG_FRAME_BIT_CNT_6_MSK  (((1U << MJPEG_FRAME_BIT_CNT_6_LEN) - 1) << MJPEG_FRAME_BIT_CNT_6_POS)\n#define MJPEG_FRAME_BIT_CNT_6_UMSK (~(((1U << MJPEG_FRAME_BIT_CNT_6_LEN) - 1) << MJPEG_FRAME_BIT_CNT_6_POS))\n\n/* 0xB8 : mjpeg_start_addr7 */\n#define MJPEG_START_ADDR7_OFFSET      (0xB8)\n#define MJPEG_FRAME_START_ADDR_7      MJPEG_FRAME_START_ADDR_7\n#define MJPEG_FRAME_START_ADDR_7_POS  (0U)\n#define MJPEG_FRAME_START_ADDR_7_LEN  (32U)\n#define MJPEG_FRAME_START_ADDR_7_MSK  (((1U << MJPEG_FRAME_START_ADDR_7_LEN) - 1) << MJPEG_FRAME_START_ADDR_7_POS)\n#define MJPEG_FRAME_START_ADDR_7_UMSK (~(((1U << MJPEG_FRAME_START_ADDR_7_LEN) - 1) << MJPEG_FRAME_START_ADDR_7_POS))\n\n/* 0xBC : mjpeg_bit_cnt7 */\n#define MJPEG_BIT_CNT7_OFFSET      (0xBC)\n#define MJPEG_FRAME_BIT_CNT_7      MJPEG_FRAME_BIT_CNT_7\n#define MJPEG_FRAME_BIT_CNT_7_POS  (0U)\n#define MJPEG_FRAME_BIT_CNT_7_LEN  (32U)\n#define MJPEG_FRAME_BIT_CNT_7_MSK  (((1U << MJPEG_FRAME_BIT_CNT_7_LEN) - 1) << MJPEG_FRAME_BIT_CNT_7_POS)\n#define MJPEG_FRAME_BIT_CNT_7_UMSK (~(((1U << MJPEG_FRAME_BIT_CNT_7_LEN) - 1) << MJPEG_FRAME_BIT_CNT_7_POS))\n\n/* 0xC0 : mjpeg_start_addr_8 */\n#define MJPEG_START_ADDR_8_OFFSET     (0xC0)\n#define MJPEG_FRAME_START_ADDR_8      MJPEG_FRAME_START_ADDR_8\n#define MJPEG_FRAME_START_ADDR_8_POS  (0U)\n#define MJPEG_FRAME_START_ADDR_8_LEN  (32U)\n#define MJPEG_FRAME_START_ADDR_8_MSK  (((1U << MJPEG_FRAME_START_ADDR_8_LEN) - 1) << MJPEG_FRAME_START_ADDR_8_POS)\n#define MJPEG_FRAME_START_ADDR_8_UMSK (~(((1U << MJPEG_FRAME_START_ADDR_8_LEN) - 1) << MJPEG_FRAME_START_ADDR_8_POS))\n\n/* 0xC4 : mjpeg_bit_cnt_8 */\n#define MJPEG_BIT_CNT_8_OFFSET     (0xC4)\n#define MJPEG_FRAME_BIT_CNT_8      MJPEG_FRAME_BIT_CNT_8\n#define MJPEG_FRAME_BIT_CNT_8_POS  (0U)\n#define MJPEG_FRAME_BIT_CNT_8_LEN  (32U)\n#define MJPEG_FRAME_BIT_CNT_8_MSK  (((1U << MJPEG_FRAME_BIT_CNT_8_LEN) - 1) << MJPEG_FRAME_BIT_CNT_8_POS)\n#define MJPEG_FRAME_BIT_CNT_8_UMSK (~(((1U << MJPEG_FRAME_BIT_CNT_8_LEN) - 1) << MJPEG_FRAME_BIT_CNT_8_POS))\n\n/* 0xC8 : mjpeg_start_addr_9 */\n#define MJPEG_START_ADDR_9_OFFSET     (0xC8)\n#define MJPEG_FRAME_START_ADDR_9      MJPEG_FRAME_START_ADDR_9\n#define MJPEG_FRAME_START_ADDR_9_POS  (0U)\n#define MJPEG_FRAME_START_ADDR_9_LEN  (32U)\n#define MJPEG_FRAME_START_ADDR_9_MSK  (((1U << MJPEG_FRAME_START_ADDR_9_LEN) - 1) << MJPEG_FRAME_START_ADDR_9_POS)\n#define MJPEG_FRAME_START_ADDR_9_UMSK (~(((1U << MJPEG_FRAME_START_ADDR_9_LEN) - 1) << MJPEG_FRAME_START_ADDR_9_POS))\n\n/* 0xCC : mjpeg_bit_cnt_9 */\n#define MJPEG_BIT_CNT_9_OFFSET     (0xCC)\n#define MJPEG_FRAME_BIT_CNT_9      MJPEG_FRAME_BIT_CNT_9\n#define MJPEG_FRAME_BIT_CNT_9_POS  (0U)\n#define MJPEG_FRAME_BIT_CNT_9_LEN  (32U)\n#define MJPEG_FRAME_BIT_CNT_9_MSK  (((1U << MJPEG_FRAME_BIT_CNT_9_LEN) - 1) << MJPEG_FRAME_BIT_CNT_9_POS)\n#define MJPEG_FRAME_BIT_CNT_9_UMSK (~(((1U << MJPEG_FRAME_BIT_CNT_9_LEN) - 1) << MJPEG_FRAME_BIT_CNT_9_POS))\n\n/* 0xD0 : mjpeg_start_addr_a */\n#define MJPEG_START_ADDR_A_OFFSET     (0xD0)\n#define MJPEG_FRAME_START_ADDR_A      MJPEG_FRAME_START_ADDR_A\n#define MJPEG_FRAME_START_ADDR_A_POS  (0U)\n#define MJPEG_FRAME_START_ADDR_A_LEN  (32U)\n#define MJPEG_FRAME_START_ADDR_A_MSK  (((1U << MJPEG_FRAME_START_ADDR_A_LEN) - 1) << MJPEG_FRAME_START_ADDR_A_POS)\n#define MJPEG_FRAME_START_ADDR_A_UMSK (~(((1U << MJPEG_FRAME_START_ADDR_A_LEN) - 1) << MJPEG_FRAME_START_ADDR_A_POS))\n\n/* 0xD4 : mjpeg_bit_cnt_a */\n#define MJPEG_BIT_CNT_A_OFFSET     (0xD4)\n#define MJPEG_FRAME_BIT_CNT_A      MJPEG_FRAME_BIT_CNT_A\n#define MJPEG_FRAME_BIT_CNT_A_POS  (0U)\n#define MJPEG_FRAME_BIT_CNT_A_LEN  (32U)\n#define MJPEG_FRAME_BIT_CNT_A_MSK  (((1U << MJPEG_FRAME_BIT_CNT_A_LEN) - 1) << MJPEG_FRAME_BIT_CNT_A_POS)\n#define MJPEG_FRAME_BIT_CNT_A_UMSK (~(((1U << MJPEG_FRAME_BIT_CNT_A_LEN) - 1) << MJPEG_FRAME_BIT_CNT_A_POS))\n\n/* 0xD8 : mjpeg_start_addr_b */\n#define MJPEG_START_ADDR_B_OFFSET     (0xD8)\n#define MJPEG_FRAME_START_ADDR_B      MJPEG_FRAME_START_ADDR_B\n#define MJPEG_FRAME_START_ADDR_B_POS  (0U)\n#define MJPEG_FRAME_START_ADDR_B_LEN  (32U)\n#define MJPEG_FRAME_START_ADDR_B_MSK  (((1U << MJPEG_FRAME_START_ADDR_B_LEN) - 1) << MJPEG_FRAME_START_ADDR_B_POS)\n#define MJPEG_FRAME_START_ADDR_B_UMSK (~(((1U << MJPEG_FRAME_START_ADDR_B_LEN) - 1) << MJPEG_FRAME_START_ADDR_B_POS))\n\n/* 0xDC : mjpeg_bit_cnt_b */\n#define MJPEG_BIT_CNT_B_OFFSET     (0xDC)\n#define MJPEG_FRAME_BIT_CNT_B      MJPEG_FRAME_BIT_CNT_B\n#define MJPEG_FRAME_BIT_CNT_B_POS  (0U)\n#define MJPEG_FRAME_BIT_CNT_B_LEN  (32U)\n#define MJPEG_FRAME_BIT_CNT_B_MSK  (((1U << MJPEG_FRAME_BIT_CNT_B_LEN) - 1) << MJPEG_FRAME_BIT_CNT_B_POS)\n#define MJPEG_FRAME_BIT_CNT_B_UMSK (~(((1U << MJPEG_FRAME_BIT_CNT_B_LEN) - 1) << MJPEG_FRAME_BIT_CNT_B_POS))\n\n/* 0xE0 : mjpeg_start_addr_c */\n#define MJPEG_START_ADDR_C_OFFSET     (0xE0)\n#define MJPEG_FRAME_START_ADDR_C      MJPEG_FRAME_START_ADDR_C\n#define MJPEG_FRAME_START_ADDR_C_POS  (0U)\n#define MJPEG_FRAME_START_ADDR_C_LEN  (32U)\n#define MJPEG_FRAME_START_ADDR_C_MSK  (((1U << MJPEG_FRAME_START_ADDR_C_LEN) - 1) << MJPEG_FRAME_START_ADDR_C_POS)\n#define MJPEG_FRAME_START_ADDR_C_UMSK (~(((1U << MJPEG_FRAME_START_ADDR_C_LEN) - 1) << MJPEG_FRAME_START_ADDR_C_POS))\n\n/* 0xE4 : mjpeg_bit_cnt_c */\n#define MJPEG_BIT_CNT_C_OFFSET     (0xE4)\n#define MJPEG_FRAME_BIT_CNT_C      MJPEG_FRAME_BIT_CNT_C\n#define MJPEG_FRAME_BIT_CNT_C_POS  (0U)\n#define MJPEG_FRAME_BIT_CNT_C_LEN  (32U)\n#define MJPEG_FRAME_BIT_CNT_C_MSK  (((1U << MJPEG_FRAME_BIT_CNT_C_LEN) - 1) << MJPEG_FRAME_BIT_CNT_C_POS)\n#define MJPEG_FRAME_BIT_CNT_C_UMSK (~(((1U << MJPEG_FRAME_BIT_CNT_C_LEN) - 1) << MJPEG_FRAME_BIT_CNT_C_POS))\n\n/* 0xE8 : mjpeg_start_addr_d */\n#define MJPEG_START_ADDR_D_OFFSET     (0xE8)\n#define MJPEG_FRAME_START_ADDR_D      MJPEG_FRAME_START_ADDR_D\n#define MJPEG_FRAME_START_ADDR_D_POS  (0U)\n#define MJPEG_FRAME_START_ADDR_D_LEN  (32U)\n#define MJPEG_FRAME_START_ADDR_D_MSK  (((1U << MJPEG_FRAME_START_ADDR_D_LEN) - 1) << MJPEG_FRAME_START_ADDR_D_POS)\n#define MJPEG_FRAME_START_ADDR_D_UMSK (~(((1U << MJPEG_FRAME_START_ADDR_D_LEN) - 1) << MJPEG_FRAME_START_ADDR_D_POS))\n\n/* 0xEC : mjpeg_bit_cnt_d */\n#define MJPEG_BIT_CNT_D_OFFSET     (0xEC)\n#define MJPEG_FRAME_BIT_CNT_D      MJPEG_FRAME_BIT_CNT_D\n#define MJPEG_FRAME_BIT_CNT_D_POS  (0U)\n#define MJPEG_FRAME_BIT_CNT_D_LEN  (32U)\n#define MJPEG_FRAME_BIT_CNT_D_MSK  (((1U << MJPEG_FRAME_BIT_CNT_D_LEN) - 1) << MJPEG_FRAME_BIT_CNT_D_POS)\n#define MJPEG_FRAME_BIT_CNT_D_UMSK (~(((1U << MJPEG_FRAME_BIT_CNT_D_LEN) - 1) << MJPEG_FRAME_BIT_CNT_D_POS))\n\n/* 0xF0 : mjpeg_start_addr_e */\n#define MJPEG_START_ADDR_E_OFFSET     (0xF0)\n#define MJPEG_FRAME_START_ADDR_E      MJPEG_FRAME_START_ADDR_E\n#define MJPEG_FRAME_START_ADDR_E_POS  (0U)\n#define MJPEG_FRAME_START_ADDR_E_LEN  (32U)\n#define MJPEG_FRAME_START_ADDR_E_MSK  (((1U << MJPEG_FRAME_START_ADDR_E_LEN) - 1) << MJPEG_FRAME_START_ADDR_E_POS)\n#define MJPEG_FRAME_START_ADDR_E_UMSK (~(((1U << MJPEG_FRAME_START_ADDR_E_LEN) - 1) << MJPEG_FRAME_START_ADDR_E_POS))\n\n/* 0xF4 : mjpeg_bit_cnt_e */\n#define MJPEG_BIT_CNT_E_OFFSET     (0xF4)\n#define MJPEG_FRAME_BIT_CNT_E      MJPEG_FRAME_BIT_CNT_E\n#define MJPEG_FRAME_BIT_CNT_E_POS  (0U)\n#define MJPEG_FRAME_BIT_CNT_E_LEN  (32U)\n#define MJPEG_FRAME_BIT_CNT_E_MSK  (((1U << MJPEG_FRAME_BIT_CNT_E_LEN) - 1) << MJPEG_FRAME_BIT_CNT_E_POS)\n#define MJPEG_FRAME_BIT_CNT_E_UMSK (~(((1U << MJPEG_FRAME_BIT_CNT_E_LEN) - 1) << MJPEG_FRAME_BIT_CNT_E_POS))\n\n/* 0xF8 : mjpeg_start_addr_f */\n#define MJPEG_START_ADDR_F_OFFSET     (0xF8)\n#define MJPEG_FRAME_START_ADDR_F      MJPEG_FRAME_START_ADDR_F\n#define MJPEG_FRAME_START_ADDR_F_POS  (0U)\n#define MJPEG_FRAME_START_ADDR_F_LEN  (32U)\n#define MJPEG_FRAME_START_ADDR_F_MSK  (((1U << MJPEG_FRAME_START_ADDR_F_LEN) - 1) << MJPEG_FRAME_START_ADDR_F_POS)\n#define MJPEG_FRAME_START_ADDR_F_UMSK (~(((1U << MJPEG_FRAME_START_ADDR_F_LEN) - 1) << MJPEG_FRAME_START_ADDR_F_POS))\n\n/* 0xFC : mjpeg_bit_cnt_f */\n#define MJPEG_BIT_CNT_F_OFFSET     (0xFC)\n#define MJPEG_FRAME_BIT_CNT_F      MJPEG_FRAME_BIT_CNT_F\n#define MJPEG_FRAME_BIT_CNT_F_POS  (0U)\n#define MJPEG_FRAME_BIT_CNT_F_LEN  (32U)\n#define MJPEG_FRAME_BIT_CNT_F_MSK  (((1U << MJPEG_FRAME_BIT_CNT_F_LEN) - 1) << MJPEG_FRAME_BIT_CNT_F_POS)\n#define MJPEG_FRAME_BIT_CNT_F_UMSK (~(((1U << MJPEG_FRAME_BIT_CNT_F_LEN) - 1) << MJPEG_FRAME_BIT_CNT_F_POS))\n\n/* 0x100 : mjpeg_q_mode0 */\n#define MJPEG_Q_MODE0_OFFSET      (0x100)\n#define MJPEG_FRAME_Q_MODE_0      MJPEG_FRAME_Q_MODE_0\n#define MJPEG_FRAME_Q_MODE_0_POS  (0U)\n#define MJPEG_FRAME_Q_MODE_0_LEN  (7U)\n#define MJPEG_FRAME_Q_MODE_0_MSK  (((1U << MJPEG_FRAME_Q_MODE_0_LEN) - 1) << MJPEG_FRAME_Q_MODE_0_POS)\n#define MJPEG_FRAME_Q_MODE_0_UMSK (~(((1U << MJPEG_FRAME_Q_MODE_0_LEN) - 1) << MJPEG_FRAME_Q_MODE_0_POS))\n\n/* 0x104 : mjpeg_q_mode1 */\n#define MJPEG_Q_MODE1_OFFSET      (0x104)\n#define MJPEG_FRAME_Q_MODE_1      MJPEG_FRAME_Q_MODE_1\n#define MJPEG_FRAME_Q_MODE_1_POS  (0U)\n#define MJPEG_FRAME_Q_MODE_1_LEN  (7U)\n#define MJPEG_FRAME_Q_MODE_1_MSK  (((1U << MJPEG_FRAME_Q_MODE_1_LEN) - 1) << MJPEG_FRAME_Q_MODE_1_POS)\n#define MJPEG_FRAME_Q_MODE_1_UMSK (~(((1U << MJPEG_FRAME_Q_MODE_1_LEN) - 1) << MJPEG_FRAME_Q_MODE_1_POS))\n\n/* 0x108 : mjpeg_q_mode2 */\n#define MJPEG_Q_MODE2_OFFSET      (0x108)\n#define MJPEG_FRAME_Q_MODE_2      MJPEG_FRAME_Q_MODE_2\n#define MJPEG_FRAME_Q_MODE_2_POS  (0U)\n#define MJPEG_FRAME_Q_MODE_2_LEN  (7U)\n#define MJPEG_FRAME_Q_MODE_2_MSK  (((1U << MJPEG_FRAME_Q_MODE_2_LEN) - 1) << MJPEG_FRAME_Q_MODE_2_POS)\n#define MJPEG_FRAME_Q_MODE_2_UMSK (~(((1U << MJPEG_FRAME_Q_MODE_2_LEN) - 1) << MJPEG_FRAME_Q_MODE_2_POS))\n\n/* 0x10C : mjpeg_q_mode3 */\n#define MJPEG_Q_MODE3_OFFSET      (0x10C)\n#define MJPEG_FRAME_Q_MODE_3      MJPEG_FRAME_Q_MODE_3\n#define MJPEG_FRAME_Q_MODE_3_POS  (0U)\n#define MJPEG_FRAME_Q_MODE_3_LEN  (7U)\n#define MJPEG_FRAME_Q_MODE_3_MSK  (((1U << MJPEG_FRAME_Q_MODE_3_LEN) - 1) << MJPEG_FRAME_Q_MODE_3_POS)\n#define MJPEG_FRAME_Q_MODE_3_UMSK (~(((1U << MJPEG_FRAME_Q_MODE_3_LEN) - 1) << MJPEG_FRAME_Q_MODE_3_POS))\n\n/* 0x110 : mjpeg_q_mode4 */\n#define MJPEG_Q_MODE4_OFFSET      (0x110)\n#define MJPEG_FRAME_Q_MODE_4      MJPEG_FRAME_Q_MODE_4\n#define MJPEG_FRAME_Q_MODE_4_POS  (0U)\n#define MJPEG_FRAME_Q_MODE_4_LEN  (7U)\n#define MJPEG_FRAME_Q_MODE_4_MSK  (((1U << MJPEG_FRAME_Q_MODE_4_LEN) - 1) << MJPEG_FRAME_Q_MODE_4_POS)\n#define MJPEG_FRAME_Q_MODE_4_UMSK (~(((1U << MJPEG_FRAME_Q_MODE_4_LEN) - 1) << MJPEG_FRAME_Q_MODE_4_POS))\n\n/* 0x114 : mjpeg_q_mode5 */\n#define MJPEG_Q_MODE5_OFFSET      (0x114)\n#define MJPEG_FRAME_Q_MODE_5      MJPEG_FRAME_Q_MODE_5\n#define MJPEG_FRAME_Q_MODE_5_POS  (0U)\n#define MJPEG_FRAME_Q_MODE_5_LEN  (7U)\n#define MJPEG_FRAME_Q_MODE_5_MSK  (((1U << MJPEG_FRAME_Q_MODE_5_LEN) - 1) << MJPEG_FRAME_Q_MODE_5_POS)\n#define MJPEG_FRAME_Q_MODE_5_UMSK (~(((1U << MJPEG_FRAME_Q_MODE_5_LEN) - 1) << MJPEG_FRAME_Q_MODE_5_POS))\n\n/* 0x118 : mjpeg_q_mode6 */\n#define MJPEG_Q_MODE6_OFFSET      (0x118)\n#define MJPEG_FRAME_Q_MODE_6      MJPEG_FRAME_Q_MODE_6\n#define MJPEG_FRAME_Q_MODE_6_POS  (0U)\n#define MJPEG_FRAME_Q_MODE_6_LEN  (7U)\n#define MJPEG_FRAME_Q_MODE_6_MSK  (((1U << MJPEG_FRAME_Q_MODE_6_LEN) - 1) << MJPEG_FRAME_Q_MODE_6_POS)\n#define MJPEG_FRAME_Q_MODE_6_UMSK (~(((1U << MJPEG_FRAME_Q_MODE_6_LEN) - 1) << MJPEG_FRAME_Q_MODE_6_POS))\n\n/* 0x11C : mjpeg_q_mode7 */\n#define MJPEG_Q_MODE7_OFFSET      (0x11C)\n#define MJPEG_FRAME_Q_MODE_7      MJPEG_FRAME_Q_MODE_7\n#define MJPEG_FRAME_Q_MODE_7_POS  (0U)\n#define MJPEG_FRAME_Q_MODE_7_LEN  (7U)\n#define MJPEG_FRAME_Q_MODE_7_MSK  (((1U << MJPEG_FRAME_Q_MODE_7_LEN) - 1) << MJPEG_FRAME_Q_MODE_7_POS)\n#define MJPEG_FRAME_Q_MODE_7_UMSK (~(((1U << MJPEG_FRAME_Q_MODE_7_LEN) - 1) << MJPEG_FRAME_Q_MODE_7_POS))\n\n/* 0x120 : mjpeg_q_mode_8 */\n#define MJPEG_Q_MODE_8_OFFSET     (0x120)\n#define MJPEG_FRAME_Q_MODE_8      MJPEG_FRAME_Q_MODE_8\n#define MJPEG_FRAME_Q_MODE_8_POS  (0U)\n#define MJPEG_FRAME_Q_MODE_8_LEN  (7U)\n#define MJPEG_FRAME_Q_MODE_8_MSK  (((1U << MJPEG_FRAME_Q_MODE_8_LEN) - 1) << MJPEG_FRAME_Q_MODE_8_POS)\n#define MJPEG_FRAME_Q_MODE_8_UMSK (~(((1U << MJPEG_FRAME_Q_MODE_8_LEN) - 1) << MJPEG_FRAME_Q_MODE_8_POS))\n\n/* 0x124 : mjpeg_q_mode_9 */\n#define MJPEG_Q_MODE_9_OFFSET     (0x124)\n#define MJPEG_FRAME_Q_MODE_9      MJPEG_FRAME_Q_MODE_9\n#define MJPEG_FRAME_Q_MODE_9_POS  (0U)\n#define MJPEG_FRAME_Q_MODE_9_LEN  (7U)\n#define MJPEG_FRAME_Q_MODE_9_MSK  (((1U << MJPEG_FRAME_Q_MODE_9_LEN) - 1) << MJPEG_FRAME_Q_MODE_9_POS)\n#define MJPEG_FRAME_Q_MODE_9_UMSK (~(((1U << MJPEG_FRAME_Q_MODE_9_LEN) - 1) << MJPEG_FRAME_Q_MODE_9_POS))\n\n/* 0x128 : mjpeg_q_mode_a */\n#define MJPEG_Q_MODE_A_OFFSET     (0x128)\n#define MJPEG_FRAME_Q_MODE_A      MJPEG_FRAME_Q_MODE_A\n#define MJPEG_FRAME_Q_MODE_A_POS  (0U)\n#define MJPEG_FRAME_Q_MODE_A_LEN  (7U)\n#define MJPEG_FRAME_Q_MODE_A_MSK  (((1U << MJPEG_FRAME_Q_MODE_A_LEN) - 1) << MJPEG_FRAME_Q_MODE_A_POS)\n#define MJPEG_FRAME_Q_MODE_A_UMSK (~(((1U << MJPEG_FRAME_Q_MODE_A_LEN) - 1) << MJPEG_FRAME_Q_MODE_A_POS))\n\n/* 0x12C : mjpeg_q_mode_b */\n#define MJPEG_Q_MODE_B_OFFSET     (0x12C)\n#define MJPEG_FRAME_Q_MODE_B      MJPEG_FRAME_Q_MODE_B\n#define MJPEG_FRAME_Q_MODE_B_POS  (0U)\n#define MJPEG_FRAME_Q_MODE_B_LEN  (7U)\n#define MJPEG_FRAME_Q_MODE_B_MSK  (((1U << MJPEG_FRAME_Q_MODE_B_LEN) - 1) << MJPEG_FRAME_Q_MODE_B_POS)\n#define MJPEG_FRAME_Q_MODE_B_UMSK (~(((1U << MJPEG_FRAME_Q_MODE_B_LEN) - 1) << MJPEG_FRAME_Q_MODE_B_POS))\n\n/* 0x130 : mjpeg_q_mode_c */\n#define MJPEG_Q_MODE_C_OFFSET     (0x130)\n#define MJPEG_FRAME_Q_MODE_C      MJPEG_FRAME_Q_MODE_C\n#define MJPEG_FRAME_Q_MODE_C_POS  (0U)\n#define MJPEG_FRAME_Q_MODE_C_LEN  (7U)\n#define MJPEG_FRAME_Q_MODE_C_MSK  (((1U << MJPEG_FRAME_Q_MODE_C_LEN) - 1) << MJPEG_FRAME_Q_MODE_C_POS)\n#define MJPEG_FRAME_Q_MODE_C_UMSK (~(((1U << MJPEG_FRAME_Q_MODE_C_LEN) - 1) << MJPEG_FRAME_Q_MODE_C_POS))\n\n/* 0x134 : mjpeg_q_mode_d */\n#define MJPEG_Q_MODE_D_OFFSET     (0x134)\n#define MJPEG_FRAME_Q_MODE_D      MJPEG_FRAME_Q_MODE_D\n#define MJPEG_FRAME_Q_MODE_D_POS  (0U)\n#define MJPEG_FRAME_Q_MODE_D_LEN  (7U)\n#define MJPEG_FRAME_Q_MODE_D_MSK  (((1U << MJPEG_FRAME_Q_MODE_D_LEN) - 1) << MJPEG_FRAME_Q_MODE_D_POS)\n#define MJPEG_FRAME_Q_MODE_D_UMSK (~(((1U << MJPEG_FRAME_Q_MODE_D_LEN) - 1) << MJPEG_FRAME_Q_MODE_D_POS))\n\n/* 0x138 : mjpeg_q_mode_e */\n#define MJPEG_Q_MODE_E_OFFSET     (0x138)\n#define MJPEG_FRAME_Q_MODE_E      MJPEG_FRAME_Q_MODE_E\n#define MJPEG_FRAME_Q_MODE_E_POS  (0U)\n#define MJPEG_FRAME_Q_MODE_E_LEN  (7U)\n#define MJPEG_FRAME_Q_MODE_E_MSK  (((1U << MJPEG_FRAME_Q_MODE_E_LEN) - 1) << MJPEG_FRAME_Q_MODE_E_POS)\n#define MJPEG_FRAME_Q_MODE_E_UMSK (~(((1U << MJPEG_FRAME_Q_MODE_E_LEN) - 1) << MJPEG_FRAME_Q_MODE_E_POS))\n\n/* 0x13C : mjpeg_q_mode_f */\n#define MJPEG_Q_MODE_F_OFFSET     (0x13C)\n#define MJPEG_FRAME_Q_MODE_F      MJPEG_FRAME_Q_MODE_F\n#define MJPEG_FRAME_Q_MODE_F_POS  (0U)\n#define MJPEG_FRAME_Q_MODE_F_LEN  (7U)\n#define MJPEG_FRAME_Q_MODE_F_MSK  (((1U << MJPEG_FRAME_Q_MODE_F_LEN) - 1) << MJPEG_FRAME_Q_MODE_F_POS)\n#define MJPEG_FRAME_Q_MODE_F_UMSK (~(((1U << MJPEG_FRAME_Q_MODE_F_LEN) - 1) << MJPEG_FRAME_Q_MODE_F_POS))\n\n/* 0x1F0 : mjpeg_debug */\n#define MJPEG_DEBUG_OFFSET           (0x1F0)\n#define MJPEG_REG_MJPEG_DBG_EN       MJPEG_REG_MJPEG_DBG_EN\n#define MJPEG_REG_MJPEG_DBG_EN_POS   (0U)\n#define MJPEG_REG_MJPEG_DBG_EN_LEN   (1U)\n#define MJPEG_REG_MJPEG_DBG_EN_MSK   (((1U << MJPEG_REG_MJPEG_DBG_EN_LEN) - 1) << MJPEG_REG_MJPEG_DBG_EN_POS)\n#define MJPEG_REG_MJPEG_DBG_EN_UMSK  (~(((1U << MJPEG_REG_MJPEG_DBG_EN_LEN) - 1) << MJPEG_REG_MJPEG_DBG_EN_POS))\n#define MJPEG_REG_MJPEG_DBG_SEL      MJPEG_REG_MJPEG_DBG_SEL\n#define MJPEG_REG_MJPEG_DBG_SEL_POS  (4U)\n#define MJPEG_REG_MJPEG_DBG_SEL_LEN  (4U)\n#define MJPEG_REG_MJPEG_DBG_SEL_MSK  (((1U << MJPEG_REG_MJPEG_DBG_SEL_LEN) - 1) << MJPEG_REG_MJPEG_DBG_SEL_POS)\n#define MJPEG_REG_MJPEG_DBG_SEL_UMSK (~(((1U << MJPEG_REG_MJPEG_DBG_SEL_LEN) - 1) << MJPEG_REG_MJPEG_DBG_SEL_POS))\n\n/* 0x1FC : mjpeg_dummy_reg */\n#define MJPEG_DUMMY_REG_OFFSET (0x1FC)\n#define MJPEG_DUMMY_REG        MJPEG_DUMMY_REG\n#define MJPEG_DUMMY_REG_POS    (0U)\n#define MJPEG_DUMMY_REG_LEN    (32U)\n#define MJPEG_DUMMY_REG_MSK    (((1U << MJPEG_DUMMY_REG_LEN) - 1) << MJPEG_DUMMY_REG_POS)\n#define MJPEG_DUMMY_REG_UMSK   (~(((1U << MJPEG_DUMMY_REG_LEN) - 1) << MJPEG_DUMMY_REG_POS))\n\nstruct mjpeg_reg {\n    /* 0x0 : mjpeg_control_1 */\n    union {\n        struct\n        {\n            uint32_t reg_mjpeg_enable     : 1; /* [    0],        r/w,        0x0 */\n            uint32_t reg_mjpeg_bit_order  : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_order_u_even     : 1; /* [    2],        r/w,        0x1 */\n            uint32_t reg_wr_over_stop     : 1; /* [    3],        r/w,        0x0 */\n            uint32_t reg_last_hf_wblk_dmy : 1; /* [    4],        r/w,        0x0 */\n            uint32_t reg_last_hf_hblk_dmy : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reg_reflect_dmy      : 1; /* [    6],        r/w,        0x0 */\n            uint32_t reserved_7           : 1; /* [    7],       rsvd,        0x0 */\n            uint32_t reg_h_bust           : 2; /* [ 9: 8],        r/w,        0x3 */\n            uint32_t reserved_10_11       : 2; /* [11:10],       rsvd,        0x0 */\n            uint32_t reg_yuv_mode         : 2; /* [13:12],        r/w,        0x0 */\n            uint32_t reserved_14_15       : 2; /* [15:14],       rsvd,        0x0 */\n            uint32_t reg_q_mode           : 7; /* [22:16],        r/w,       0x32 */\n            uint32_t reserved_23          : 1; /* [   23],       rsvd,        0x0 */\n            uint32_t reg_y0_order         : 2; /* [25:24],        r/w,        0x0 */\n            uint32_t reg_u0_order         : 2; /* [27:26],        r/w,        0x1 */\n            uint32_t reg_y1_order         : 2; /* [29:28],        r/w,        0x2 */\n            uint32_t reg_v0_order         : 2; /* [31:30],        r/w,        0x3 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_control_1;\n\n    /* 0x4 : mjpeg_control_2 */\n    union {\n        struct\n        {\n            uint32_t reg_sw_frame         : 5;  /* [ 4: 0],        r/w,        0x0 */\n            uint32_t reserved_5_7         : 3;  /* [ 7: 5],       rsvd,        0x0 */\n            uint32_t reg_mjpeg_sw_mode    : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t reg_mjpeg_sw_run     : 1;  /* [    9],        r/w,        0x0 */\n            uint32_t reserved_10_11       : 2;  /* [11:10],       rsvd,        0x0 */\n            uint32_t reg_yy_dvp2ahb_lsel  : 1;  /* [   12],        r/w,        0x0 */\n            uint32_t reg_yy_dvp2ahb_fsel  : 1;  /* [   13],        r/w,        0x0 */\n            uint32_t reg_uv_dvp2ahb_lsel  : 1;  /* [   14],        r/w,        0x0 */\n            uint32_t reg_uv_dvp2ahb_fsel  : 1;  /* [   15],        r/w,        0x0 */\n            uint32_t reg_mjpeg_wait_cycle : 16; /* [31:16],        r/w,      0x400 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_control_2;\n\n    /* 0x08 : mjpeg_yy_frame_addr */\n    union {\n        struct\n        {\n            uint32_t reg_yy_addr_start : 32; /* [31: 0],        r/w, 0x80000000L */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_yy_frame_addr;\n\n    /* 0x0C : mjpeg_uv_frame_addr */\n    union {\n        struct\n        {\n            uint32_t reg_uv_addr_start : 32; /* [31: 0],        r/w, 0x80000000L */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_uv_frame_addr;\n\n    /* 0x10 : mjpeg_yuv_mem */\n    union {\n        struct\n        {\n            uint32_t reg_yy_mem_hblk : 13; /* [12: 0],        r/w,        0x2 */\n            uint32_t reserved_13_15  : 3;  /* [15:13],       rsvd,        0x0 */\n            uint32_t reg_uv_mem_hblk : 13; /* [28:16],        r/w,        0x2 */\n            uint32_t reserved_29_31  : 3;  /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_yuv_mem;\n\n    /* 0x14 : jpeg_frame_addr */\n    union {\n        struct\n        {\n            uint32_t reg_w_addr_start : 32; /* [31: 0],        r/w, 0x80400000L */\n        } BF;\n        uint32_t WORD;\n    } jpeg_frame_addr;\n\n    /* 0x18 : jpeg_store_memory */\n    union {\n        struct\n        {\n            uint32_t reg_w_burst_cnt : 32; /* [31: 0],        r/w,     0x4000 */\n        } BF;\n        uint32_t WORD;\n    } jpeg_store_memory;\n\n    /* 0x1C : mjpeg_control_3 */\n    union {\n        struct\n        {\n            uint32_t reg_int_normal_en      : 1; /* [    0],        r/w,        0x1 */\n            uint32_t reg_int_cam_en         : 1; /* [    1],        r/w,        0x1 */\n            uint32_t reg_int_mem_en         : 1; /* [    2],        r/w,        0x0 */\n            uint32_t reg_int_frame_en       : 1; /* [    3],        r/w,        0x0 */\n            uint32_t sts_normal_int         : 1; /* [    4],          r,        0x0 */\n            uint32_t sts_cam_int            : 1; /* [    5],          r,        0x0 */\n            uint32_t sts_mem_int            : 1; /* [    6],          r,        0x0 */\n            uint32_t sts_frame_int          : 1; /* [    7],          r,        0x0 */\n            uint32_t mjpeg_idle             : 1; /* [    8],          r,        0x1 */\n            uint32_t mjpeg_func             : 1; /* [    9],          r,        0x0 */\n            uint32_t mjpeg_wait             : 1; /* [   10],          r,        0x0 */\n            uint32_t mjpeg_flsh             : 1; /* [   11],          r,        0x0 */\n            uint32_t mjpeg_mans             : 1; /* [   12],          r,        0x0 */\n            uint32_t mjpeg_manf             : 1; /* [   13],          r,        0x0 */\n            uint32_t ahb_idle               : 1; /* [   14],          r,        0x0 */\n            uint32_t reserved_15            : 1; /* [   15],       rsvd,        0x0 */\n            uint32_t reg_frame_cnt_trgr_int : 5; /* [20:16],        r/w,        0x0 */\n            uint32_t reg_int_idle_en        : 1; /* [   21],        r/w,        0x0 */\n            uint32_t sts_idle_int           : 1; /* [   22],          r,        0x0 */\n            uint32_t reserved_23            : 1; /* [   23],       rsvd,        0x0 */\n            uint32_t frame_valid_cnt        : 5; /* [28:24],          r,        0x0 */\n            uint32_t reg_int_swap_en        : 1; /* [   29],        r/w,        0x0 */\n            uint32_t sts_swap_int           : 1; /* [   30],          r,        0x0 */\n            uint32_t reserved_31            : 1; /* [   31],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_control_3;\n\n    /* 0x20 : mjpeg_frame_fifo_pop */\n    union {\n        struct\n        {\n            uint32_t rfifo_pop          : 1;  /* [    0],        w1p,        0x0 */\n            uint32_t reg_w_swap_clr     : 1;  /* [    1],        w1p,        0x0 */\n            uint32_t reserved_2_7       : 6;  /* [ 7: 2],       rsvd,        0x0 */\n            uint32_t reg_int_normal_clr : 1;  /* [    8],        w1p,        0x0 */\n            uint32_t reg_int_cam_clr    : 1;  /* [    9],        w1p,        0x0 */\n            uint32_t reg_int_mem_clr    : 1;  /* [   10],        w1p,        0x0 */\n            uint32_t reg_int_frame_clr  : 1;  /* [   11],        w1p,        0x0 */\n            uint32_t reg_int_idle_clr   : 1;  /* [   12],        w1p,        0x0 */\n            uint32_t reg_int_swap_clr   : 1;  /* [   13],        w1p,        0x0 */\n            uint32_t reserved_14_31     : 18; /* [31:14],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_frame_fifo_pop;\n\n    /* 0x24 : mjpeg_frame_size */\n    union {\n        struct\n        {\n            uint32_t reg_frame_wblk : 12; /* [11: 0],        r/w,        0xf */\n            uint32_t reserved_12_15 : 4;  /* [15:12],       rsvd,        0x0 */\n            uint32_t reg_frame_hblk : 12; /* [27:16],        r/w,       0x14 */\n            uint32_t reserved_28_31 : 4;  /* [31:28],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_frame_size;\n\n    /* 0x28 : mjpeg_header_byte */\n    union {\n        struct\n        {\n            uint32_t reg_head_byte  : 12; /* [11: 0],        r/w,        0x0 */\n            uint32_t reserved_12_15 : 4;  /* [15:12],       rsvd,        0x0 */\n            uint32_t reg_tail_exp   : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t reserved_17_31 : 15; /* [31:17],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_header_byte;\n\n    /* 0x2c  reserved */\n    uint8_t RESERVED0x2c[4];\n\n    /* 0x30 : mjpeg_swap_mode */\n    union {\n        struct\n        {\n            uint32_t reg_w_swap_mode   : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1_7      : 7;  /* [ 7: 1],       rsvd,        0x0 */\n            uint32_t sts_swap0_full    : 1;  /* [    8],          r,        0x0 */\n            uint32_t sts_swap1_full    : 1;  /* [    9],          r,        0x0 */\n            uint32_t sts_read_swap_idx : 1;  /* [   10],          r,        0x0 */\n            uint32_t sts_swap_fstart   : 1;  /* [   11],          r,        0x0 */\n            uint32_t sts_swap_fend     : 1;  /* [   12],          r,        0x0 */\n            uint32_t reserved_13_31    : 19; /* [31:13],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_swap_mode;\n\n    /* 0x34 : mjpeg_swap_bit_cnt */\n    union {\n        struct\n        {\n            uint32_t frame_swap_end_bit_cnt : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_swap_bit_cnt;\n\n    /* 0x38 : mjpeg_paket_ctrl */\n    union {\n        struct\n        {\n            uint32_t reg_pket_en        : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reg_jend_to_pend   : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t reserved_2_15      : 14; /* [15: 2],       rsvd,        0x0 */\n            uint32_t reg_pket_body_byte : 16; /* [31:16],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_paket_ctrl;\n\n    /* 0x3C : mjpeg_paket_head_tail */\n    union {\n        struct\n        {\n            uint32_t reg_pket_head_byte : 12; /* [11: 0],        r/w,        0x0 */\n            uint32_t reserved_12_15     : 4;  /* [15:12],       rsvd,        0x0 */\n            uint32_t reg_pket_tail_byte : 12; /* [27:16],        r/w,        0x0 */\n            uint32_t reserved_28_31     : 4;  /* [31:28],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_paket_head_tail;\n\n    /* 0x40 : mjpeg_Y_frame_read_status_1 */\n    union {\n        struct\n        {\n            uint32_t yy_mem_hblk_r  : 13; /* [12: 0],          r,        0x0 */\n            uint32_t reserved_13_15 : 3;  /* [15:13],       rsvd,        0x0 */\n            uint32_t yy_frm_hblk_r  : 13; /* [28:16],          r,        0x0 */\n            uint32_t reserved_29_31 : 3;  /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_Y_frame_read_status_1;\n\n    /* 0x44 : mjpeg_Y_frame_read_status_2 */\n    union {\n        struct\n        {\n            uint32_t yy_wblk_r      : 13; /* [12: 0],          r,        0x0 */\n            uint32_t reserved_13_15 : 3;  /* [15:13],       rsvd,        0x0 */\n            uint32_t yy_mem_rnd_r   : 8;  /* [23:16],          r,        0x0 */\n            uint32_t yy_frm_cnt_r   : 8;  /* [31:24],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_Y_frame_read_status_2;\n\n    /* 0x48 : mjpeg_Y_frame_write_status */\n    union {\n        struct\n        {\n            uint32_t yy_mem_hblk_w  : 13; /* [12: 0],          r,        0x0 */\n            uint32_t reserved_13_15 : 3;  /* [15:13],       rsvd,        0x0 */\n            uint32_t yy_mem_rnd_w   : 8;  /* [23:16],          r,        0x0 */\n            uint32_t yy_frm_cnt_w   : 8;  /* [31:24],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_Y_frame_write_status;\n\n    /* 0x4C : mjpeg_UV_frame_read_status_1 */\n    union {\n        struct\n        {\n            uint32_t uv_mem_hblk_r  : 13; /* [12: 0],          r,        0x0 */\n            uint32_t reserved_13_15 : 3;  /* [15:13],       rsvd,        0x0 */\n            uint32_t uv_frm_hblk_r  : 13; /* [28:16],          r,        0x0 */\n            uint32_t reserved_29_31 : 3;  /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_UV_frame_read_status_1;\n\n    /* 0x50 : mjpeg_UV_frame_read_status_2 */\n    union {\n        struct\n        {\n            uint32_t uv_wblk_r      : 13; /* [12: 0],          r,        0x0 */\n            uint32_t reserved_13_15 : 3;  /* [15:13],       rsvd,        0x0 */\n            uint32_t uv_mem_rnd_r   : 8;  /* [23:16],          r,        0x0 */\n            uint32_t uv_frm_cnt_r   : 8;  /* [31:24],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_UV_frame_read_status_2;\n\n    /* 0x54 : mjpeg_UV_frame_write_status */\n    union {\n        struct\n        {\n            uint32_t uv_mem_hblk_w  : 13; /* [12: 0],          r,        0x0 */\n            uint32_t reserved_13_15 : 3;  /* [15:13],       rsvd,        0x0 */\n            uint32_t uv_mem_rnd_w   : 8;  /* [23:16],          r,        0x0 */\n            uint32_t uv_frm_cnt_w   : 8;  /* [31:24],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_UV_frame_write_status;\n\n    /* 0x58  reserved */\n    uint8_t RESERVED0x58[40];\n\n    /* 0x80 : mjpeg_start_addr0 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_start_addr0;\n\n    /* 0x84 : mjpeg_bit_cnt0 */\n    union {\n        struct\n        {\n            uint32_t frame_bit_cnt_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_bit_cnt0;\n\n    /* 0x88 : mjpeg_start_addr1 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_start_addr1;\n\n    /* 0x8C : mjpeg_bit_cnt1 */\n    union {\n        struct\n        {\n            uint32_t frame_bit_cnt_1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_bit_cnt1;\n\n    /* 0x90 : mjpeg_start_addr2 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_2 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_start_addr2;\n\n    /* 0x94 : mjpeg_bit_cnt2 */\n    union {\n        struct\n        {\n            uint32_t frame_bit_cnt_2 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_bit_cnt2;\n\n    /* 0x98 : mjpeg_start_addr3 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_3 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_start_addr3;\n\n    /* 0x9C : mjpeg_bit_cnt3 */\n    union {\n        struct\n        {\n            uint32_t frame_bit_cnt_3 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_bit_cnt3;\n\n    /* 0xA0 : mjpeg_start_addr4 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_4 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_start_addr4;\n\n    /* 0xA4 : mjpeg_bit_cnt4 */\n    union {\n        struct\n        {\n            uint32_t frame_bit_cnt_4 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_bit_cnt4;\n\n    /* 0xA8 : mjpeg_start_addr5 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_5 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_start_addr5;\n\n    /* 0xAC : mjpeg_bit_cnt5 */\n    union {\n        struct\n        {\n            uint32_t frame_bit_cnt_5 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_bit_cnt5;\n\n    /* 0xB0 : mjpeg_start_addr6 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_6 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_start_addr6;\n\n    /* 0xB4 : mjpeg_bit_cnt6 */\n    union {\n        struct\n        {\n            uint32_t frame_bit_cnt_6 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_bit_cnt6;\n\n    /* 0xB8 : mjpeg_start_addr7 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_7 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_start_addr7;\n\n    /* 0xBC : mjpeg_bit_cnt7 */\n    union {\n        struct\n        {\n            uint32_t frame_bit_cnt_7 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_bit_cnt7;\n\n    /* 0xC0 : mjpeg_start_addr_8 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_8 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_start_addr_8;\n\n    /* 0xC4 : mjpeg_bit_cnt_8 */\n    union {\n        struct\n        {\n            uint32_t frame_bit_cnt_8 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_bit_cnt_8;\n\n    /* 0xC8 : mjpeg_start_addr_9 */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_9 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_start_addr_9;\n\n    /* 0xCC : mjpeg_bit_cnt_9 */\n    union {\n        struct\n        {\n            uint32_t frame_bit_cnt_9 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_bit_cnt_9;\n\n    /* 0xD0 : mjpeg_start_addr_a */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_a : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_start_addr_a;\n\n    /* 0xD4 : mjpeg_bit_cnt_a */\n    union {\n        struct\n        {\n            uint32_t frame_bit_cnt_a : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_bit_cnt_a;\n\n    /* 0xD8 : mjpeg_start_addr_b */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_b : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_start_addr_b;\n\n    /* 0xDC : mjpeg_bit_cnt_b */\n    union {\n        struct\n        {\n            uint32_t frame_bit_cnt_b : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_bit_cnt_b;\n\n    /* 0xE0 : mjpeg_start_addr_c */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_c : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_start_addr_c;\n\n    /* 0xE4 : mjpeg_bit_cnt_c */\n    union {\n        struct\n        {\n            uint32_t frame_bit_cnt_c : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_bit_cnt_c;\n\n    /* 0xE8 : mjpeg_start_addr_d */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_d : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_start_addr_d;\n\n    /* 0xEC : mjpeg_bit_cnt_d */\n    union {\n        struct\n        {\n            uint32_t frame_bit_cnt_d : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_bit_cnt_d;\n\n    /* 0xF0 : mjpeg_start_addr_e */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_e : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_start_addr_e;\n\n    /* 0xF4 : mjpeg_bit_cnt_e */\n    union {\n        struct\n        {\n            uint32_t frame_bit_cnt_e : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_bit_cnt_e;\n\n    /* 0xF8 : mjpeg_start_addr_f */\n    union {\n        struct\n        {\n            uint32_t frame_start_addr_f : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_start_addr_f;\n\n    /* 0xFC : mjpeg_bit_cnt_f */\n    union {\n        struct\n        {\n            uint32_t frame_bit_cnt_f : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_bit_cnt_f;\n\n    /* 0x100 : mjpeg_q_mode0 */\n    union {\n        struct\n        {\n            uint32_t frame_q_mode_0 : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31  : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_q_mode0;\n\n    /* 0x104 : mjpeg_q_mode1 */\n    union {\n        struct\n        {\n            uint32_t frame_q_mode_1 : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31  : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_q_mode1;\n\n    /* 0x108 : mjpeg_q_mode2 */\n    union {\n        struct\n        {\n            uint32_t frame_q_mode_2 : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31  : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_q_mode2;\n\n    /* 0x10C : mjpeg_q_mode3 */\n    union {\n        struct\n        {\n            uint32_t frame_q_mode_3 : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31  : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_q_mode3;\n\n    /* 0x110 : mjpeg_q_mode4 */\n    union {\n        struct\n        {\n            uint32_t frame_q_mode_4 : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31  : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_q_mode4;\n\n    /* 0x114 : mjpeg_q_mode5 */\n    union {\n        struct\n        {\n            uint32_t frame_q_mode_5 : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31  : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_q_mode5;\n\n    /* 0x118 : mjpeg_q_mode6 */\n    union {\n        struct\n        {\n            uint32_t frame_q_mode_6 : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31  : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_q_mode6;\n\n    /* 0x11C : mjpeg_q_mode7 */\n    union {\n        struct\n        {\n            uint32_t frame_q_mode_7 : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31  : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_q_mode7;\n\n    /* 0x120 : mjpeg_q_mode_8 */\n    union {\n        struct\n        {\n            uint32_t frame_q_mode_8 : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31  : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_q_mode_8;\n\n    /* 0x124 : mjpeg_q_mode_9 */\n    union {\n        struct\n        {\n            uint32_t frame_q_mode_9 : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31  : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_q_mode_9;\n\n    /* 0x128 : mjpeg_q_mode_a */\n    union {\n        struct\n        {\n            uint32_t frame_q_mode_a : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31  : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_q_mode_a;\n\n    /* 0x12C : mjpeg_q_mode_b */\n    union {\n        struct\n        {\n            uint32_t frame_q_mode_b : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31  : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_q_mode_b;\n\n    /* 0x130 : mjpeg_q_mode_c */\n    union {\n        struct\n        {\n            uint32_t frame_q_mode_c : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31  : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_q_mode_c;\n\n    /* 0x134 : mjpeg_q_mode_d */\n    union {\n        struct\n        {\n            uint32_t frame_q_mode_d : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31  : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_q_mode_d;\n\n    /* 0x138 : mjpeg_q_mode_e */\n    union {\n        struct\n        {\n            uint32_t frame_q_mode_e : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31  : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_q_mode_e;\n\n    /* 0x13C : mjpeg_q_mode_f */\n    union {\n        struct\n        {\n            uint32_t frame_q_mode_f : 7;  /* [ 6: 0],          r,        0x0 */\n            uint32_t reserved_7_31  : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_q_mode_f;\n\n    /* 0x140  reserved */\n    uint8_t RESERVED0x140[176];\n\n    /* 0x1F0 : mjpeg_debug */\n    union {\n        struct\n        {\n            uint32_t reg_mjpeg_dbg_en  : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1_3      : 3;  /* [ 3: 1],       rsvd,        0x0 */\n            uint32_t reg_mjpeg_dbg_sel : 4;  /* [ 7: 4],        r/w,        0x0 */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_debug;\n\n    /* 0x1f4  reserved */\n    uint8_t RESERVED0x1f4[8];\n\n    /* 0x1FC : mjpeg_dummy_reg */\n    union {\n        struct\n        {\n            uint32_t mjpeg_dummy_reg : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } mjpeg_dummy_reg;\n};\n\ntypedef volatile struct mjpeg_reg mjpeg_reg_t;\n\n#endif /* __MJPEG_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/pdm_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    pdm_reg.h\n  * @version V1.2\n  * @date    2020-02-13\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __PDM_REG_H__\n#define __PDM_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : pdm_datapath_config */\n#define PDM_DATAPATH_CONFIG_OFFSET (0x0)\n#define PDM_EN                     PDM_EN\n#define PDM_EN_POS                 (0U)\n#define PDM_EN_LEN                 (1U)\n#define PDM_EN_MSK                 (((1U << PDM_EN_LEN) - 1) << PDM_EN_POS)\n#define PDM_EN_UMSK                (~(((1U << PDM_EN_LEN) - 1) << PDM_EN_POS))\n#define PDM_RX_SEL_128FS           PDM_RX_SEL_128FS\n#define PDM_RX_SEL_128FS_POS       (2U)\n#define PDM_RX_SEL_128FS_LEN       (1U)\n#define PDM_RX_SEL_128FS_MSK       (((1U << PDM_RX_SEL_128FS_LEN) - 1) << PDM_RX_SEL_128FS_POS)\n#define PDM_RX_SEL_128FS_UMSK      (~(((1U << PDM_RX_SEL_128FS_LEN) - 1) << PDM_RX_SEL_128FS_POS))\n#define PDM_TX_SEL_128FS           PDM_TX_SEL_128FS\n#define PDM_TX_SEL_128FS_POS       (3U)\n#define PDM_TX_SEL_128FS_LEN       (1U)\n#define PDM_TX_SEL_128FS_MSK       (((1U << PDM_TX_SEL_128FS_LEN) - 1) << PDM_TX_SEL_128FS_POS)\n#define PDM_TX_SEL_128FS_UMSK      (~(((1U << PDM_TX_SEL_128FS_LEN) - 1) << PDM_TX_SEL_128FS_POS))\n#define PDM_DC_MUL                 PDM_DC_MUL\n#define PDM_DC_MUL_POS             (4U)\n#define PDM_DC_MUL_LEN             (8U)\n#define PDM_DC_MUL_MSK             (((1U << PDM_DC_MUL_LEN) - 1) << PDM_DC_MUL_POS)\n#define PDM_DC_MUL_UMSK            (~(((1U << PDM_DC_MUL_LEN) - 1) << PDM_DC_MUL_POS))\n#define PDM_SCALE_SEL              PDM_SCALE_SEL\n#define PDM_SCALE_SEL_POS          (12U)\n#define PDM_SCALE_SEL_LEN          (3U)\n#define PDM_SCALE_SEL_MSK          (((1U << PDM_SCALE_SEL_LEN) - 1) << PDM_SCALE_SEL_POS)\n#define PDM_SCALE_SEL_UMSK         (~(((1U << PDM_SCALE_SEL_LEN) - 1) << PDM_SCALE_SEL_POS))\n#define PDM_DITHER_SEL             PDM_DITHER_SEL\n#define PDM_DITHER_SEL_POS         (16U)\n#define PDM_DITHER_SEL_LEN         (2U)\n#define PDM_DITHER_SEL_MSK         (((1U << PDM_DITHER_SEL_LEN) - 1) << PDM_DITHER_SEL_POS)\n#define PDM_DITHER_SEL_UMSK        (~(((1U << PDM_DITHER_SEL_LEN) - 1) << PDM_DITHER_SEL_POS))\n#define PDM_FORCE_LR               PDM_FORCE_LR\n#define PDM_FORCE_LR_POS           (20U)\n#define PDM_FORCE_LR_LEN           (1U)\n#define PDM_FORCE_LR_MSK           (((1U << PDM_FORCE_LR_LEN) - 1) << PDM_FORCE_LR_POS)\n#define PDM_FORCE_LR_UMSK          (~(((1U << PDM_FORCE_LR_LEN) - 1) << PDM_FORCE_LR_POS))\n#define PDM_FORCE_SEL              PDM_FORCE_SEL\n#define PDM_FORCE_SEL_POS          (21U)\n#define PDM_FORCE_SEL_LEN          (1U)\n#define PDM_FORCE_SEL_MSK          (((1U << PDM_FORCE_SEL_LEN) - 1) << PDM_FORCE_SEL_POS)\n#define PDM_FORCE_SEL_UMSK         (~(((1U << PDM_FORCE_SEL_LEN) - 1) << PDM_FORCE_SEL_POS))\n#define PDM_DSD_SWAP               PDM_DSD_SWAP\n#define PDM_DSD_SWAP_POS           (22U)\n#define PDM_DSD_SWAP_LEN           (1U)\n#define PDM_DSD_SWAP_MSK           (((1U << PDM_DSD_SWAP_LEN) - 1) << PDM_DSD_SWAP_POS)\n#define PDM_DSD_SWAP_UMSK          (~(((1U << PDM_DSD_SWAP_LEN) - 1) << PDM_DSD_SWAP_POS))\n#define PDM_OUT_DAT_DLY            PDM_OUT_DAT_DLY\n#define PDM_OUT_DAT_DLY_POS        (24U)\n#define PDM_OUT_DAT_DLY_LEN        (2U)\n#define PDM_OUT_DAT_DLY_MSK        (((1U << PDM_OUT_DAT_DLY_LEN) - 1) << PDM_OUT_DAT_DLY_POS)\n#define PDM_OUT_DAT_DLY_UMSK       (~(((1U << PDM_OUT_DAT_DLY_LEN) - 1) << PDM_OUT_DAT_DLY_POS))\n#define PDM_OUT_SEL_DLY            PDM_OUT_SEL_DLY\n#define PDM_OUT_SEL_DLY_POS        (26U)\n#define PDM_OUT_SEL_DLY_LEN        (2U)\n#define PDM_OUT_SEL_DLY_MSK        (((1U << PDM_OUT_SEL_DLY_LEN) - 1) << PDM_OUT_SEL_DLY_POS)\n#define PDM_OUT_SEL_DLY_UMSK       (~(((1U << PDM_OUT_SEL_DLY_LEN) - 1) << PDM_OUT_SEL_DLY_POS))\n#define PDM_OUT_SEL_INV            PDM_OUT_SEL_INV\n#define PDM_OUT_SEL_INV_POS        (28U)\n#define PDM_OUT_SEL_INV_LEN        (1U)\n#define PDM_OUT_SEL_INV_MSK        (((1U << PDM_OUT_SEL_INV_LEN) - 1) << PDM_OUT_SEL_INV_POS)\n#define PDM_OUT_SEL_INV_UMSK       (~(((1U << PDM_OUT_SEL_INV_LEN) - 1) << PDM_OUT_SEL_INV_POS))\n\n/* 0x4 : pdm_dma_config */\n#define PDM_DMA_CONFIG_OFFSET  (0x4)\n#define PDM_DMA_RX_EN          PDM_DMA_RX_EN\n#define PDM_DMA_RX_EN_POS      (0U)\n#define PDM_DMA_RX_EN_LEN      (1U)\n#define PDM_DMA_RX_EN_MSK      (((1U << PDM_DMA_RX_EN_LEN) - 1) << PDM_DMA_RX_EN_POS)\n#define PDM_DMA_RX_EN_UMSK     (~(((1U << PDM_DMA_RX_EN_LEN) - 1) << PDM_DMA_RX_EN_POS))\n#define PDM_RX_FORMAT          PDM_RX_FORMAT\n#define PDM_RX_FORMAT_POS      (4U)\n#define PDM_RX_FORMAT_LEN      (3U)\n#define PDM_RX_FORMAT_MSK      (((1U << PDM_RX_FORMAT_LEN) - 1) << PDM_RX_FORMAT_POS)\n#define PDM_RX_FORMAT_UMSK     (~(((1U << PDM_RX_FORMAT_LEN) - 1) << PDM_RX_FORMAT_POS))\n#define PDM_DMA_TX_EN          PDM_DMA_TX_EN\n#define PDM_DMA_TX_EN_POS      (8U)\n#define PDM_DMA_TX_EN_LEN      (1U)\n#define PDM_DMA_TX_EN_MSK      (((1U << PDM_DMA_TX_EN_LEN) - 1) << PDM_DMA_TX_EN_POS)\n#define PDM_DMA_TX_EN_UMSK     (~(((1U << PDM_DMA_TX_EN_LEN) - 1) << PDM_DMA_TX_EN_POS))\n#define PDM_TX_FORMAT          PDM_TX_FORMAT\n#define PDM_TX_FORMAT_POS      (12U)\n#define PDM_TX_FORMAT_LEN      (3U)\n#define PDM_TX_FORMAT_MSK      (((1U << PDM_TX_FORMAT_LEN) - 1) << PDM_TX_FORMAT_POS)\n#define PDM_TX_FORMAT_UMSK     (~(((1U << PDM_TX_FORMAT_LEN) - 1) << PDM_TX_FORMAT_POS))\n#define PDM_TX_DATA_SHIFT      PDM_TX_DATA_SHIFT\n#define PDM_TX_DATA_SHIFT_POS  (16U)\n#define PDM_TX_DATA_SHIFT_LEN  (5U)\n#define PDM_TX_DATA_SHIFT_MSK  (((1U << PDM_TX_DATA_SHIFT_LEN) - 1) << PDM_TX_DATA_SHIFT_POS)\n#define PDM_TX_DATA_SHIFT_UMSK (~(((1U << PDM_TX_DATA_SHIFT_LEN) - 1) << PDM_TX_DATA_SHIFT_POS))\n\n/* 0x8 : pdm_dma_wdata2 */\n#define PDM_DMA_WDATA2_OFFSET (0x8)\n#define PDM_DMA_WDATA2        PDM_DMA_WDATA2\n#define PDM_DMA_WDATA2_POS    (0U)\n#define PDM_DMA_WDATA2_LEN    (32U)\n#define PDM_DMA_WDATA2_MSK    (((1U << PDM_DMA_WDATA2_LEN) - 1) << PDM_DMA_WDATA2_POS)\n#define PDM_DMA_WDATA2_UMSK   (~(((1U << PDM_DMA_WDATA2_LEN) - 1) << PDM_DMA_WDATA2_POS))\n\n/* 0x10 : pdm_dma_wdata */\n#define PDM_DMA_WDATA_OFFSET (0x10)\n#define PDM_DMA_WDATA        PDM_DMA_WDATA\n#define PDM_DMA_WDATA_POS    (0U)\n#define PDM_DMA_WDATA_LEN    (32U)\n#define PDM_DMA_WDATA_MSK    (((1U << PDM_DMA_WDATA_LEN) - 1) << PDM_DMA_WDATA_POS)\n#define PDM_DMA_WDATA_UMSK   (~(((1U << PDM_DMA_WDATA_LEN) - 1) << PDM_DMA_WDATA_POS))\n\n/* 0x14 : pdm_dma_rdata */\n#define PDM_DMA_RDATA_OFFSET (0x14)\n#define PDM_DMA_RDATA        PDM_DMA_RDATA\n#define PDM_DMA_RDATA_POS    (0U)\n#define PDM_DMA_RDATA_LEN    (32U)\n#define PDM_DMA_RDATA_MSK    (((1U << PDM_DMA_RDATA_LEN) - 1) << PDM_DMA_RDATA_POS)\n#define PDM_DMA_RDATA_UMSK   (~(((1U << PDM_DMA_RDATA_LEN) - 1) << PDM_DMA_RDATA_POS))\n\n/* 0x18 : pdm_tx_fifo_status */\n#define PDM_TX_FIFO_STATUS_OFFSET (0x18)\n#define PDM_TX_FIFO_EMPTY         PDM_TX_FIFO_EMPTY\n#define PDM_TX_FIFO_EMPTY_POS     (0U)\n#define PDM_TX_FIFO_EMPTY_LEN     (1U)\n#define PDM_TX_FIFO_EMPTY_MSK     (((1U << PDM_TX_FIFO_EMPTY_LEN) - 1) << PDM_TX_FIFO_EMPTY_POS)\n#define PDM_TX_FIFO_EMPTY_UMSK    (~(((1U << PDM_TX_FIFO_EMPTY_LEN) - 1) << PDM_TX_FIFO_EMPTY_POS))\n#define PDM_TX_FIFO_FULL          PDM_TX_FIFO_FULL\n#define PDM_TX_FIFO_FULL_POS      (1U)\n#define PDM_TX_FIFO_FULL_LEN      (1U)\n#define PDM_TX_FIFO_FULL_MSK      (((1U << PDM_TX_FIFO_FULL_LEN) - 1) << PDM_TX_FIFO_FULL_POS)\n#define PDM_TX_FIFO_FULL_UMSK     (~(((1U << PDM_TX_FIFO_FULL_LEN) - 1) << PDM_TX_FIFO_FULL_POS))\n#define PDM_TX_CS                 PDM_TX_CS\n#define PDM_TX_CS_POS             (2U)\n#define PDM_TX_CS_LEN             (2U)\n#define PDM_TX_CS_MSK             (((1U << PDM_TX_CS_LEN) - 1) << PDM_TX_CS_POS)\n#define PDM_TX_CS_UMSK            (~(((1U << PDM_TX_CS_LEN) - 1) << PDM_TX_CS_POS))\n#define PDM_TXFIFORDPTR           PDM_TXFIFORDPTR\n#define PDM_TXFIFORDPTR_POS       (4U)\n#define PDM_TXFIFORDPTR_LEN       (3U)\n#define PDM_TXFIFORDPTR_MSK       (((1U << PDM_TXFIFORDPTR_LEN) - 1) << PDM_TXFIFORDPTR_POS)\n#define PDM_TXFIFORDPTR_UMSK      (~(((1U << PDM_TXFIFORDPTR_LEN) - 1) << PDM_TXFIFORDPTR_POS))\n#define PDM_TXFIFOWRPTR           PDM_TXFIFOWRPTR\n#define PDM_TXFIFOWRPTR_POS       (8U)\n#define PDM_TXFIFOWRPTR_LEN       (2U)\n#define PDM_TXFIFOWRPTR_MSK       (((1U << PDM_TXFIFOWRPTR_LEN) - 1) << PDM_TXFIFOWRPTR_POS)\n#define PDM_TXFIFOWRPTR_UMSK      (~(((1U << PDM_TXFIFOWRPTR_LEN) - 1) << PDM_TXFIFOWRPTR_POS))\n#define PDM_TX2_FIFO_EMPTY        PDM_TX2_FIFO_EMPTY\n#define PDM_TX2_FIFO_EMPTY_POS    (16U)\n#define PDM_TX2_FIFO_EMPTY_LEN    (1U)\n#define PDM_TX2_FIFO_EMPTY_MSK    (((1U << PDM_TX2_FIFO_EMPTY_LEN) - 1) << PDM_TX2_FIFO_EMPTY_POS)\n#define PDM_TX2_FIFO_EMPTY_UMSK   (~(((1U << PDM_TX2_FIFO_EMPTY_LEN) - 1) << PDM_TX2_FIFO_EMPTY_POS))\n#define PDM_TX2_FIFO_FULL         PDM_TX2_FIFO_FULL\n#define PDM_TX2_FIFO_FULL_POS     (17U)\n#define PDM_TX2_FIFO_FULL_LEN     (1U)\n#define PDM_TX2_FIFO_FULL_MSK     (((1U << PDM_TX2_FIFO_FULL_LEN) - 1) << PDM_TX2_FIFO_FULL_POS)\n#define PDM_TX2_FIFO_FULL_UMSK    (~(((1U << PDM_TX2_FIFO_FULL_LEN) - 1) << PDM_TX2_FIFO_FULL_POS))\n#define PDM_TX2_CS                PDM_TX2_CS\n#define PDM_TX2_CS_POS            (18U)\n#define PDM_TX2_CS_LEN            (2U)\n#define PDM_TX2_CS_MSK            (((1U << PDM_TX2_CS_LEN) - 1) << PDM_TX2_CS_POS)\n#define PDM_TX2_CS_UMSK           (~(((1U << PDM_TX2_CS_LEN) - 1) << PDM_TX2_CS_POS))\n#define PDM_TX2FIFORDPTR          PDM_TX2FIFORDPTR\n#define PDM_TX2FIFORDPTR_POS      (20U)\n#define PDM_TX2FIFORDPTR_LEN      (3U)\n#define PDM_TX2FIFORDPTR_MSK      (((1U << PDM_TX2FIFORDPTR_LEN) - 1) << PDM_TX2FIFORDPTR_POS)\n#define PDM_TX2FIFORDPTR_UMSK     (~(((1U << PDM_TX2FIFORDPTR_LEN) - 1) << PDM_TX2FIFORDPTR_POS))\n#define PDM_TX2FIFOWRPTR          PDM_TX2FIFOWRPTR\n#define PDM_TX2FIFOWRPTR_POS      (24U)\n#define PDM_TX2FIFOWRPTR_LEN      (2U)\n#define PDM_TX2FIFOWRPTR_MSK      (((1U << PDM_TX2FIFOWRPTR_LEN) - 1) << PDM_TX2FIFOWRPTR_POS)\n#define PDM_TX2FIFOWRPTR_UMSK     (~(((1U << PDM_TX2FIFOWRPTR_LEN) - 1) << PDM_TX2FIFOWRPTR_POS))\n\n/* 0x1C : pdm_rx_fifo_status */\n#define PDM_RX_FIFO_STATUS_OFFSET (0x1C)\n#define PDM_RX_FIFO_EMPTY         PDM_RX_FIFO_EMPTY\n#define PDM_RX_FIFO_EMPTY_POS     (0U)\n#define PDM_RX_FIFO_EMPTY_LEN     (1U)\n#define PDM_RX_FIFO_EMPTY_MSK     (((1U << PDM_RX_FIFO_EMPTY_LEN) - 1) << PDM_RX_FIFO_EMPTY_POS)\n#define PDM_RX_FIFO_EMPTY_UMSK    (~(((1U << PDM_RX_FIFO_EMPTY_LEN) - 1) << PDM_RX_FIFO_EMPTY_POS))\n#define PDM_RX_FIFO_FULL          PDM_RX_FIFO_FULL\n#define PDM_RX_FIFO_FULL_POS      (1U)\n#define PDM_RX_FIFO_FULL_LEN      (1U)\n#define PDM_RX_FIFO_FULL_MSK      (((1U << PDM_RX_FIFO_FULL_LEN) - 1) << PDM_RX_FIFO_FULL_POS)\n#define PDM_RX_FIFO_FULL_UMSK     (~(((1U << PDM_RX_FIFO_FULL_LEN) - 1) << PDM_RX_FIFO_FULL_POS))\n#define PDM_RX_CS                 PDM_RX_CS\n#define PDM_RX_CS_POS             (2U)\n#define PDM_RX_CS_LEN             (2U)\n#define PDM_RX_CS_MSK             (((1U << PDM_RX_CS_LEN) - 1) << PDM_RX_CS_POS)\n#define PDM_RX_CS_UMSK            (~(((1U << PDM_RX_CS_LEN) - 1) << PDM_RX_CS_POS))\n#define PDM_RXFIFORDPTR           PDM_RXFIFORDPTR\n#define PDM_RXFIFORDPTR_POS       (4U)\n#define PDM_RXFIFORDPTR_LEN       (2U)\n#define PDM_RXFIFORDPTR_MSK       (((1U << PDM_RXFIFORDPTR_LEN) - 1) << PDM_RXFIFORDPTR_POS)\n#define PDM_RXFIFORDPTR_UMSK      (~(((1U << PDM_RXFIFORDPTR_LEN) - 1) << PDM_RXFIFORDPTR_POS))\n#define PDM_RXFIFOWRPTR           PDM_RXFIFOWRPTR\n#define PDM_RXFIFOWRPTR_POS       (8U)\n#define PDM_RXFIFOWRPTR_LEN       (3U)\n#define PDM_RXFIFOWRPTR_MSK       (((1U << PDM_RXFIFOWRPTR_LEN) - 1) << PDM_RXFIFOWRPTR_POS)\n#define PDM_RXFIFOWRPTR_UMSK      (~(((1U << PDM_RXFIFOWRPTR_LEN) - 1) << PDM_RXFIFOWRPTR_POS))\n\nstruct pdm_reg {\n    /* 0x0 : pdm_datapath_config */\n    union {\n        struct\n        {\n            uint32_t pdm_en         : 1; /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1     : 1; /* [    1],       rsvd,        0x0 */\n            uint32_t rx_sel_128fs   : 1; /* [    2],        r/w,        0x0 */\n            uint32_t tx_sel_128fs   : 1; /* [    3],        r/w,        0x0 */\n            uint32_t dc_mul         : 8; /* [11: 4],        r/w,       0x64 */\n            uint32_t scale_sel      : 3; /* [14:12],        r/w,        0x5 */\n            uint32_t reserved_15    : 1; /* [   15],       rsvd,        0x0 */\n            uint32_t dither_sel     : 2; /* [17:16],        r/w,        0x1 */\n            uint32_t reserved_18_19 : 2; /* [19:18],       rsvd,        0x0 */\n            uint32_t force_lr       : 1; /* [   20],        r/w,        0x0 */\n            uint32_t force_sel      : 1; /* [   21],        r/w,        0x0 */\n            uint32_t dsd_swap       : 1; /* [   22],        r/w,        0x0 */\n            uint32_t reserved_23    : 1; /* [   23],       rsvd,        0x0 */\n            uint32_t out_dat_dly    : 2; /* [25:24],        r/w,        0x0 */\n            uint32_t out_sel_dly    : 2; /* [27:26],        r/w,        0x0 */\n            uint32_t out_sel_inv    : 1; /* [   28],        r/w,        0x0 */\n            uint32_t rsvd_31_29     : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pdm_datapath_config;\n\n    /* 0x4 : pdm_dma_config */\n    union {\n        struct\n        {\n            uint32_t pdm_dma_rx_en  : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1_3   : 3;  /* [ 3: 1],       rsvd,        0x0 */\n            uint32_t rx_format      : 3;  /* [ 6: 4],        r/w,        0x3 */\n            uint32_t reserved_7     : 1;  /* [    7],       rsvd,        0x0 */\n            uint32_t pdm_dma_tx_en  : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t reserved_9_11  : 3;  /* [11: 9],       rsvd,        0x0 */\n            uint32_t tx_format      : 3;  /* [14:12],        r/w,        0x3 */\n            uint32_t reserved_15    : 1;  /* [   15],       rsvd,        0x0 */\n            uint32_t tx_data_shift  : 5;  /* [20:16],        r/w,        0x0 */\n            uint32_t reserved_21_31 : 11; /* [31:21],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pdm_dma_config;\n\n    /* 0x8 : pdm_dma_wdata2 */\n    union {\n        struct\n        {\n            uint32_t pdm_dma_wdata2 : 32; /* [31: 0],          w,          x */\n        } BF;\n        uint32_t WORD;\n    } pdm_dma_wdata2;\n\n    /* 0xc  reserved */\n    uint8_t RESERVED0xc[4];\n\n    /* 0x10 : pdm_dma_wdata */\n    union {\n        struct\n        {\n            uint32_t pdm_dma_wdata : 32; /* [31: 0],          w,          x */\n        } BF;\n        uint32_t WORD;\n    } pdm_dma_wdata;\n\n    /* 0x14 : pdm_dma_rdata */\n    union {\n        struct\n        {\n            uint32_t pdm_dma_rdata : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pdm_dma_rdata;\n\n    /* 0x18 : pdm_tx_fifo_status */\n    union {\n        struct\n        {\n            uint32_t tx_fifo_empty  : 1; /* [    0],          r,        0x0 */\n            uint32_t tx_fifo_full   : 1; /* [    1],          r,        0x0 */\n            uint32_t tx_cs          : 2; /* [ 3: 2],          r,        0x0 */\n            uint32_t TxFifoRdPtr    : 3; /* [ 6: 4],          r,        0x4 */\n            uint32_t reserved_7     : 1; /* [    7],       rsvd,        0x0 */\n            uint32_t TxFifoWrPtr    : 2; /* [ 9: 8],          r,        0x0 */\n            uint32_t reserved_10_15 : 6; /* [15:10],       rsvd,        0x0 */\n            uint32_t tx2_fifo_empty : 1; /* [   16],          r,        0x0 */\n            uint32_t tx2_fifo_full  : 1; /* [   17],          r,        0x0 */\n            uint32_t tx2_cs         : 2; /* [19:18],          r,        0x0 */\n            uint32_t Tx2FifoRdPtr   : 3; /* [22:20],          r,        0x4 */\n            uint32_t reserved_23    : 1; /* [   23],       rsvd,        0x0 */\n            uint32_t Tx2FifoWrPtr   : 2; /* [25:24],          r,        0x0 */\n            uint32_t reserved_26_31 : 6; /* [31:26],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pdm_tx_fifo_status;\n\n    /* 0x1C : pdm_rx_fifo_status */\n    union {\n        struct\n        {\n            uint32_t rx_fifo_empty  : 1;  /* [    0],          r,        0x1 */\n            uint32_t rx_fifo_full   : 1;  /* [    1],          r,        0x0 */\n            uint32_t rx_cs          : 2;  /* [ 3: 2],          r,        0x0 */\n            uint32_t RxFifoRdPtr    : 2;  /* [ 5: 4],          r,        0x3 */\n            uint32_t reserved_6_7   : 2;  /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t RxFifoWrPtr    : 3;  /* [10: 8],          r,        0x0 */\n            uint32_t reserved_11_31 : 21; /* [31:11],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pdm_rx_fifo_status;\n};\n\ntypedef volatile struct pdm_reg pdm_reg_t;\n\n#endif /* __PDM_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/pds_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    pds_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __PDS_REG_H__\n#define __PDS_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : PDS_CTL */\n#define PDS_CTL_OFFSET                     (0x0)\n#define PDS_START_PS                       PDS_START_PS\n#define PDS_START_PS_POS                   (0U)\n#define PDS_START_PS_LEN                   (1U)\n#define PDS_START_PS_MSK                   (((1U << PDS_START_PS_LEN) - 1) << PDS_START_PS_POS)\n#define PDS_START_PS_UMSK                  (~(((1U << PDS_START_PS_LEN) - 1) << PDS_START_PS_POS))\n#define PDS_CR_SLEEP_FOREVER               PDS_CR_SLEEP_FOREVER\n#define PDS_CR_SLEEP_FOREVER_POS           (1U)\n#define PDS_CR_SLEEP_FOREVER_LEN           (1U)\n#define PDS_CR_SLEEP_FOREVER_MSK           (((1U << PDS_CR_SLEEP_FOREVER_LEN) - 1) << PDS_CR_SLEEP_FOREVER_POS)\n#define PDS_CR_SLEEP_FOREVER_UMSK          (~(((1U << PDS_CR_SLEEP_FOREVER_LEN) - 1) << PDS_CR_SLEEP_FOREVER_POS))\n#define PDS_CR_XTAL_FORCE_OFF              PDS_CR_XTAL_FORCE_OFF\n#define PDS_CR_XTAL_FORCE_OFF_POS          (2U)\n#define PDS_CR_XTAL_FORCE_OFF_LEN          (1U)\n#define PDS_CR_XTAL_FORCE_OFF_MSK          (((1U << PDS_CR_XTAL_FORCE_OFF_LEN) - 1) << PDS_CR_XTAL_FORCE_OFF_POS)\n#define PDS_CR_XTAL_FORCE_OFF_UMSK         (~(((1U << PDS_CR_XTAL_FORCE_OFF_LEN) - 1) << PDS_CR_XTAL_FORCE_OFF_POS))\n#define PDS_CR_WIFI_PDS_SAVE_STATE         PDS_CR_WIFI_PDS_SAVE_STATE\n#define PDS_CR_WIFI_PDS_SAVE_STATE_POS     (3U)\n#define PDS_CR_WIFI_PDS_SAVE_STATE_LEN     (1U)\n#define PDS_CR_WIFI_PDS_SAVE_STATE_MSK     (((1U << PDS_CR_WIFI_PDS_SAVE_STATE_LEN) - 1) << PDS_CR_WIFI_PDS_SAVE_STATE_POS)\n#define PDS_CR_WIFI_PDS_SAVE_STATE_UMSK    (~(((1U << PDS_CR_WIFI_PDS_SAVE_STATE_LEN) - 1) << PDS_CR_WIFI_PDS_SAVE_STATE_POS))\n#define PDS_CR_PDS_PD_DCDC18               PDS_CR_PDS_PD_DCDC18\n#define PDS_CR_PDS_PD_DCDC18_POS           (4U)\n#define PDS_CR_PDS_PD_DCDC18_LEN           (1U)\n#define PDS_CR_PDS_PD_DCDC18_MSK           (((1U << PDS_CR_PDS_PD_DCDC18_LEN) - 1) << PDS_CR_PDS_PD_DCDC18_POS)\n#define PDS_CR_PDS_PD_DCDC18_UMSK          (~(((1U << PDS_CR_PDS_PD_DCDC18_LEN) - 1) << PDS_CR_PDS_PD_DCDC18_POS))\n#define PDS_CR_PDS_PD_BG_SYS               PDS_CR_PDS_PD_BG_SYS\n#define PDS_CR_PDS_PD_BG_SYS_POS           (5U)\n#define PDS_CR_PDS_PD_BG_SYS_LEN           (1U)\n#define PDS_CR_PDS_PD_BG_SYS_MSK           (((1U << PDS_CR_PDS_PD_BG_SYS_LEN) - 1) << PDS_CR_PDS_PD_BG_SYS_POS)\n#define PDS_CR_PDS_PD_BG_SYS_UMSK          (~(((1U << PDS_CR_PDS_PD_BG_SYS_LEN) - 1) << PDS_CR_PDS_PD_BG_SYS_POS))\n#define PDS_CR_PDS_CTRL_GPIO_IE_PU_PD      PDS_CR_PDS_CTRL_GPIO_IE_PU_PD\n#define PDS_CR_PDS_CTRL_GPIO_IE_PU_PD_POS  (6U)\n#define PDS_CR_PDS_CTRL_GPIO_IE_PU_PD_LEN  (1U)\n#define PDS_CR_PDS_CTRL_GPIO_IE_PU_PD_MSK  (((1U << PDS_CR_PDS_CTRL_GPIO_IE_PU_PD_LEN) - 1) << PDS_CR_PDS_CTRL_GPIO_IE_PU_PD_POS)\n#define PDS_CR_PDS_CTRL_GPIO_IE_PU_PD_UMSK (~(((1U << PDS_CR_PDS_CTRL_GPIO_IE_PU_PD_LEN) - 1) << PDS_CR_PDS_CTRL_GPIO_IE_PU_PD_POS))\n#define PDS_CR_PDS_CTRL_PU_FLASH           PDS_CR_PDS_CTRL_PU_FLASH\n#define PDS_CR_PDS_CTRL_PU_FLASH_POS       (7U)\n#define PDS_CR_PDS_CTRL_PU_FLASH_LEN       (1U)\n#define PDS_CR_PDS_CTRL_PU_FLASH_MSK       (((1U << PDS_CR_PDS_CTRL_PU_FLASH_LEN) - 1) << PDS_CR_PDS_CTRL_PU_FLASH_POS)\n#define PDS_CR_PDS_CTRL_PU_FLASH_UMSK      (~(((1U << PDS_CR_PDS_CTRL_PU_FLASH_LEN) - 1) << PDS_CR_PDS_CTRL_PU_FLASH_POS))\n#define PDS_CR_PDS_GATE_CLK                PDS_CR_PDS_GATE_CLK\n#define PDS_CR_PDS_GATE_CLK_POS            (8U)\n#define PDS_CR_PDS_GATE_CLK_LEN            (1U)\n#define PDS_CR_PDS_GATE_CLK_MSK            (((1U << PDS_CR_PDS_GATE_CLK_LEN) - 1) << PDS_CR_PDS_GATE_CLK_POS)\n#define PDS_CR_PDS_GATE_CLK_UMSK           (~(((1U << PDS_CR_PDS_GATE_CLK_LEN) - 1) << PDS_CR_PDS_GATE_CLK_POS))\n#define PDS_CR_PDS_MEM_STBY                PDS_CR_PDS_MEM_STBY\n#define PDS_CR_PDS_MEM_STBY_POS            (9U)\n#define PDS_CR_PDS_MEM_STBY_LEN            (1U)\n#define PDS_CR_PDS_MEM_STBY_MSK            (((1U << PDS_CR_PDS_MEM_STBY_LEN) - 1) << PDS_CR_PDS_MEM_STBY_POS)\n#define PDS_CR_PDS_MEM_STBY_UMSK           (~(((1U << PDS_CR_PDS_MEM_STBY_LEN) - 1) << PDS_CR_PDS_MEM_STBY_POS))\n#define PDS_CR_SW_PU_FLASH                 PDS_CR_SW_PU_FLASH\n#define PDS_CR_SW_PU_FLASH_POS             (10U)\n#define PDS_CR_SW_PU_FLASH_LEN             (1U)\n#define PDS_CR_SW_PU_FLASH_MSK             (((1U << PDS_CR_SW_PU_FLASH_LEN) - 1) << PDS_CR_SW_PU_FLASH_POS)\n#define PDS_CR_SW_PU_FLASH_UMSK            (~(((1U << PDS_CR_SW_PU_FLASH_LEN) - 1) << PDS_CR_SW_PU_FLASH_POS))\n#define PDS_CR_PDS_ISO_EN                  PDS_CR_PDS_ISO_EN\n#define PDS_CR_PDS_ISO_EN_POS              (11U)\n#define PDS_CR_PDS_ISO_EN_LEN              (1U)\n#define PDS_CR_PDS_ISO_EN_MSK              (((1U << PDS_CR_PDS_ISO_EN_LEN) - 1) << PDS_CR_PDS_ISO_EN_POS)\n#define PDS_CR_PDS_ISO_EN_UMSK             (~(((1U << PDS_CR_PDS_ISO_EN_LEN) - 1) << PDS_CR_PDS_ISO_EN_POS))\n#define PDS_CR_PDS_WAIT_XTAL_RDY           PDS_CR_PDS_WAIT_XTAL_RDY\n#define PDS_CR_PDS_WAIT_XTAL_RDY_POS       (12U)\n#define PDS_CR_PDS_WAIT_XTAL_RDY_LEN       (1U)\n#define PDS_CR_PDS_WAIT_XTAL_RDY_MSK       (((1U << PDS_CR_PDS_WAIT_XTAL_RDY_LEN) - 1) << PDS_CR_PDS_WAIT_XTAL_RDY_POS)\n#define PDS_CR_PDS_WAIT_XTAL_RDY_UMSK      (~(((1U << PDS_CR_PDS_WAIT_XTAL_RDY_LEN) - 1) << PDS_CR_PDS_WAIT_XTAL_RDY_POS))\n#define PDS_CR_PDS_PWR_OFF                 PDS_CR_PDS_PWR_OFF\n#define PDS_CR_PDS_PWR_OFF_POS             (13U)\n#define PDS_CR_PDS_PWR_OFF_LEN             (1U)\n#define PDS_CR_PDS_PWR_OFF_MSK             (((1U << PDS_CR_PDS_PWR_OFF_LEN) - 1) << PDS_CR_PDS_PWR_OFF_POS)\n#define PDS_CR_PDS_PWR_OFF_UMSK            (~(((1U << PDS_CR_PDS_PWR_OFF_LEN) - 1) << PDS_CR_PDS_PWR_OFF_POS))\n#define PDS_CR_PDS_PD_XTAL                 PDS_CR_PDS_PD_XTAL\n#define PDS_CR_PDS_PD_XTAL_POS             (14U)\n#define PDS_CR_PDS_PD_XTAL_LEN             (1U)\n#define PDS_CR_PDS_PD_XTAL_MSK             (((1U << PDS_CR_PDS_PD_XTAL_LEN) - 1) << PDS_CR_PDS_PD_XTAL_POS)\n#define PDS_CR_PDS_PD_XTAL_UMSK            (~(((1U << PDS_CR_PDS_PD_XTAL_LEN) - 1) << PDS_CR_PDS_PD_XTAL_POS))\n#define PDS_CR_PDS_SOC_ENB_FORCE_ON        PDS_CR_PDS_SOC_ENB_FORCE_ON\n#define PDS_CR_PDS_SOC_ENB_FORCE_ON_POS    (15U)\n#define PDS_CR_PDS_SOC_ENB_FORCE_ON_LEN    (1U)\n#define PDS_CR_PDS_SOC_ENB_FORCE_ON_MSK    (((1U << PDS_CR_PDS_SOC_ENB_FORCE_ON_LEN) - 1) << PDS_CR_PDS_SOC_ENB_FORCE_ON_POS)\n#define PDS_CR_PDS_SOC_ENB_FORCE_ON_UMSK   (~(((1U << PDS_CR_PDS_SOC_ENB_FORCE_ON_LEN) - 1) << PDS_CR_PDS_SOC_ENB_FORCE_ON_POS))\n#define PDS_CR_PDS_RST_SOC_EN              PDS_CR_PDS_RST_SOC_EN\n#define PDS_CR_PDS_RST_SOC_EN_POS          (16U)\n#define PDS_CR_PDS_RST_SOC_EN_LEN          (1U)\n#define PDS_CR_PDS_RST_SOC_EN_MSK          (((1U << PDS_CR_PDS_RST_SOC_EN_LEN) - 1) << PDS_CR_PDS_RST_SOC_EN_POS)\n#define PDS_CR_PDS_RST_SOC_EN_UMSK         (~(((1U << PDS_CR_PDS_RST_SOC_EN_LEN) - 1) << PDS_CR_PDS_RST_SOC_EN_POS))\n#define PDS_CR_PDS_RC32M_OFF_DIS           PDS_CR_PDS_RC32M_OFF_DIS\n#define PDS_CR_PDS_RC32M_OFF_DIS_POS       (17U)\n#define PDS_CR_PDS_RC32M_OFF_DIS_LEN       (1U)\n#define PDS_CR_PDS_RC32M_OFF_DIS_MSK       (((1U << PDS_CR_PDS_RC32M_OFF_DIS_LEN) - 1) << PDS_CR_PDS_RC32M_OFF_DIS_POS)\n#define PDS_CR_PDS_RC32M_OFF_DIS_UMSK      (~(((1U << PDS_CR_PDS_RC32M_OFF_DIS_LEN) - 1) << PDS_CR_PDS_RC32M_OFF_DIS_POS))\n#define PDS_CR_PDS_LDO_VSEL_EN             PDS_CR_PDS_LDO_VSEL_EN\n#define PDS_CR_PDS_LDO_VSEL_EN_POS         (18U)\n#define PDS_CR_PDS_LDO_VSEL_EN_LEN         (1U)\n#define PDS_CR_PDS_LDO_VSEL_EN_MSK         (((1U << PDS_CR_PDS_LDO_VSEL_EN_LEN) - 1) << PDS_CR_PDS_LDO_VSEL_EN_POS)\n#define PDS_CR_PDS_LDO_VSEL_EN_UMSK        (~(((1U << PDS_CR_PDS_LDO_VSEL_EN_LEN) - 1) << PDS_CR_PDS_LDO_VSEL_EN_POS))\n#define PDS_CR_PDS_RAM_LP_WITH_CLK_EN      PDS_CR_PDS_RAM_LP_WITH_CLK_EN\n#define PDS_CR_PDS_RAM_LP_WITH_CLK_EN_POS  (19U)\n#define PDS_CR_PDS_RAM_LP_WITH_CLK_EN_LEN  (1U)\n#define PDS_CR_PDS_RAM_LP_WITH_CLK_EN_MSK  (((1U << PDS_CR_PDS_RAM_LP_WITH_CLK_EN_LEN) - 1) << PDS_CR_PDS_RAM_LP_WITH_CLK_EN_POS)\n#define PDS_CR_PDS_RAM_LP_WITH_CLK_EN_UMSK (~(((1U << PDS_CR_PDS_RAM_LP_WITH_CLK_EN_LEN) - 1) << PDS_CR_PDS_RAM_LP_WITH_CLK_EN_POS))\n#define PDS_CR_NP_WFI_MASK                 PDS_CR_NP_WFI_MASK\n#define PDS_CR_NP_WFI_MASK_POS             (21U)\n#define PDS_CR_NP_WFI_MASK_LEN             (1U)\n#define PDS_CR_NP_WFI_MASK_MSK             (((1U << PDS_CR_NP_WFI_MASK_LEN) - 1) << PDS_CR_NP_WFI_MASK_POS)\n#define PDS_CR_NP_WFI_MASK_UMSK            (~(((1U << PDS_CR_NP_WFI_MASK_LEN) - 1) << PDS_CR_NP_WFI_MASK_POS))\n#define PDS_CR_PDS_PD_LDO11                PDS_CR_PDS_PD_LDO11\n#define PDS_CR_PDS_PD_LDO11_POS            (22U)\n#define PDS_CR_PDS_PD_LDO11_LEN            (1U)\n#define PDS_CR_PDS_PD_LDO11_MSK            (((1U << PDS_CR_PDS_PD_LDO11_LEN) - 1) << PDS_CR_PDS_PD_LDO11_POS)\n#define PDS_CR_PDS_PD_LDO11_UMSK           (~(((1U << PDS_CR_PDS_PD_LDO11_LEN) - 1) << PDS_CR_PDS_PD_LDO11_POS))\n#define PDS_CR_PDS_FORCE_RAM_CLK_EN        PDS_CR_PDS_FORCE_RAM_CLK_EN\n#define PDS_CR_PDS_FORCE_RAM_CLK_EN_POS    (23U)\n#define PDS_CR_PDS_FORCE_RAM_CLK_EN_LEN    (1U)\n#define PDS_CR_PDS_FORCE_RAM_CLK_EN_MSK    (((1U << PDS_CR_PDS_FORCE_RAM_CLK_EN_LEN) - 1) << PDS_CR_PDS_FORCE_RAM_CLK_EN_POS)\n#define PDS_CR_PDS_FORCE_RAM_CLK_EN_UMSK   (~(((1U << PDS_CR_PDS_FORCE_RAM_CLK_EN_LEN) - 1) << PDS_CR_PDS_FORCE_RAM_CLK_EN_POS))\n#define PDS_CR_PDS_LDO_VOL                 PDS_CR_PDS_LDO_VOL\n#define PDS_CR_PDS_LDO_VOL_POS             (24U)\n#define PDS_CR_PDS_LDO_VOL_LEN             (4U)\n#define PDS_CR_PDS_LDO_VOL_MSK             (((1U << PDS_CR_PDS_LDO_VOL_LEN) - 1) << PDS_CR_PDS_LDO_VOL_POS)\n#define PDS_CR_PDS_LDO_VOL_UMSK            (~(((1U << PDS_CR_PDS_LDO_VOL_LEN) - 1) << PDS_CR_PDS_LDO_VOL_POS))\n#define PDS_CR_PDS_CTRL_RF                 PDS_CR_PDS_CTRL_RF\n#define PDS_CR_PDS_CTRL_RF_POS             (28U)\n#define PDS_CR_PDS_CTRL_RF_LEN             (2U)\n#define PDS_CR_PDS_CTRL_RF_MSK             (((1U << PDS_CR_PDS_CTRL_RF_LEN) - 1) << PDS_CR_PDS_CTRL_RF_POS)\n#define PDS_CR_PDS_CTRL_RF_UMSK            (~(((1U << PDS_CR_PDS_CTRL_RF_LEN) - 1) << PDS_CR_PDS_CTRL_RF_POS))\n#define PDS_CR_PDS_CTRL_PLL                PDS_CR_PDS_CTRL_PLL\n#define PDS_CR_PDS_CTRL_PLL_POS            (30U)\n#define PDS_CR_PDS_CTRL_PLL_LEN            (2U)\n#define PDS_CR_PDS_CTRL_PLL_MSK            (((1U << PDS_CR_PDS_CTRL_PLL_LEN) - 1) << PDS_CR_PDS_CTRL_PLL_POS)\n#define PDS_CR_PDS_CTRL_PLL_UMSK           (~(((1U << PDS_CR_PDS_CTRL_PLL_LEN) - 1) << PDS_CR_PDS_CTRL_PLL_POS))\n\n/* 0x4 : PDS_TIME1 */\n#define PDS_TIME1_OFFSET           (0x4)\n#define PDS_CR_SLEEP_DURATION      PDS_CR_SLEEP_DURATION\n#define PDS_CR_SLEEP_DURATION_POS  (0U)\n#define PDS_CR_SLEEP_DURATION_LEN  (32U)\n#define PDS_CR_SLEEP_DURATION_MSK  (((1U << PDS_CR_SLEEP_DURATION_LEN) - 1) << PDS_CR_SLEEP_DURATION_POS)\n#define PDS_CR_SLEEP_DURATION_UMSK (~(((1U << PDS_CR_SLEEP_DURATION_LEN) - 1) << PDS_CR_SLEEP_DURATION_POS))\n\n/* 0xC : PDS_INT */\n#define PDS_INT_OFFSET                    (0xC)\n#define PDS_RO_PDS_WAKE_INT               PDS_RO_PDS_WAKE_INT\n#define PDS_RO_PDS_WAKE_INT_POS           (0U)\n#define PDS_RO_PDS_WAKE_INT_LEN           (1U)\n#define PDS_RO_PDS_WAKE_INT_MSK           (((1U << PDS_RO_PDS_WAKE_INT_LEN) - 1) << PDS_RO_PDS_WAKE_INT_POS)\n#define PDS_RO_PDS_WAKE_INT_UMSK          (~(((1U << PDS_RO_PDS_WAKE_INT_LEN) - 1) << PDS_RO_PDS_WAKE_INT_POS))\n#define PDS_RO_PDS_RF_DONE_INT            PDS_RO_PDS_RF_DONE_INT\n#define PDS_RO_PDS_RF_DONE_INT_POS        (2U)\n#define PDS_RO_PDS_RF_DONE_INT_LEN        (1U)\n#define PDS_RO_PDS_RF_DONE_INT_MSK        (((1U << PDS_RO_PDS_RF_DONE_INT_LEN) - 1) << PDS_RO_PDS_RF_DONE_INT_POS)\n#define PDS_RO_PDS_RF_DONE_INT_UMSK       (~(((1U << PDS_RO_PDS_RF_DONE_INT_LEN) - 1) << PDS_RO_PDS_RF_DONE_INT_POS))\n#define PDS_RO_PDS_PLL_DONE_INT           PDS_RO_PDS_PLL_DONE_INT\n#define PDS_RO_PDS_PLL_DONE_INT_POS       (3U)\n#define PDS_RO_PDS_PLL_DONE_INT_LEN       (1U)\n#define PDS_RO_PDS_PLL_DONE_INT_MSK       (((1U << PDS_RO_PDS_PLL_DONE_INT_LEN) - 1) << PDS_RO_PDS_PLL_DONE_INT_POS)\n#define PDS_RO_PDS_PLL_DONE_INT_UMSK      (~(((1U << PDS_RO_PDS_PLL_DONE_INT_LEN) - 1) << PDS_RO_PDS_PLL_DONE_INT_POS))\n#define PDS_RESET_EVENT                   PDS_RESET_EVENT\n#define PDS_RESET_EVENT_POS               (4U)\n#define PDS_RESET_EVENT_LEN               (3U)\n#define PDS_RESET_EVENT_MSK               (((1U << PDS_RESET_EVENT_LEN) - 1) << PDS_RESET_EVENT_POS)\n#define PDS_RESET_EVENT_UMSK              (~(((1U << PDS_RESET_EVENT_LEN) - 1) << PDS_RESET_EVENT_POS))\n#define PDS_CLR_RESET_EVENT               PDS_CLR_RESET_EVENT\n#define PDS_CLR_RESET_EVENT_POS           (7U)\n#define PDS_CLR_RESET_EVENT_LEN           (1U)\n#define PDS_CLR_RESET_EVENT_MSK           (((1U << PDS_CLR_RESET_EVENT_LEN) - 1) << PDS_CLR_RESET_EVENT_POS)\n#define PDS_CLR_RESET_EVENT_UMSK          (~(((1U << PDS_CLR_RESET_EVENT_LEN) - 1) << PDS_CLR_RESET_EVENT_POS))\n#define PDS_CR_PDS_WAKE_INT_MASK          PDS_CR_PDS_WAKE_INT_MASK\n#define PDS_CR_PDS_WAKE_INT_MASK_POS      (8U)\n#define PDS_CR_PDS_WAKE_INT_MASK_LEN      (1U)\n#define PDS_CR_PDS_WAKE_INT_MASK_MSK      (((1U << PDS_CR_PDS_WAKE_INT_MASK_LEN) - 1) << PDS_CR_PDS_WAKE_INT_MASK_POS)\n#define PDS_CR_PDS_WAKE_INT_MASK_UMSK     (~(((1U << PDS_CR_PDS_WAKE_INT_MASK_LEN) - 1) << PDS_CR_PDS_WAKE_INT_MASK_POS))\n#define PDS_CR_PDS_RF_DONE_INT_MASK       PDS_CR_PDS_RF_DONE_INT_MASK\n#define PDS_CR_PDS_RF_DONE_INT_MASK_POS   (10U)\n#define PDS_CR_PDS_RF_DONE_INT_MASK_LEN   (1U)\n#define PDS_CR_PDS_RF_DONE_INT_MASK_MSK   (((1U << PDS_CR_PDS_RF_DONE_INT_MASK_LEN) - 1) << PDS_CR_PDS_RF_DONE_INT_MASK_POS)\n#define PDS_CR_PDS_RF_DONE_INT_MASK_UMSK  (~(((1U << PDS_CR_PDS_RF_DONE_INT_MASK_LEN) - 1) << PDS_CR_PDS_RF_DONE_INT_MASK_POS))\n#define PDS_CR_PDS_PLL_DONE_INT_MASK      PDS_CR_PDS_PLL_DONE_INT_MASK\n#define PDS_CR_PDS_PLL_DONE_INT_MASK_POS  (11U)\n#define PDS_CR_PDS_PLL_DONE_INT_MASK_LEN  (1U)\n#define PDS_CR_PDS_PLL_DONE_INT_MASK_MSK  (((1U << PDS_CR_PDS_PLL_DONE_INT_MASK_LEN) - 1) << PDS_CR_PDS_PLL_DONE_INT_MASK_POS)\n#define PDS_CR_PDS_PLL_DONE_INT_MASK_UMSK (~(((1U << PDS_CR_PDS_PLL_DONE_INT_MASK_LEN) - 1) << PDS_CR_PDS_PLL_DONE_INT_MASK_POS))\n#define PDS_CR_PDS_INT_CLR                PDS_CR_PDS_INT_CLR\n#define PDS_CR_PDS_INT_CLR_POS            (15U)\n#define PDS_CR_PDS_INT_CLR_LEN            (1U)\n#define PDS_CR_PDS_INT_CLR_MSK            (((1U << PDS_CR_PDS_INT_CLR_LEN) - 1) << PDS_CR_PDS_INT_CLR_POS)\n#define PDS_CR_PDS_INT_CLR_UMSK           (~(((1U << PDS_CR_PDS_INT_CLR_LEN) - 1) << PDS_CR_PDS_INT_CLR_POS))\n#define PDS_CR_PDS_WAKEUP_SRC_EN          PDS_CR_PDS_WAKEUP_SRC_EN\n#define PDS_CR_PDS_WAKEUP_SRC_EN_POS      (16U)\n#define PDS_CR_PDS_WAKEUP_SRC_EN_LEN      (8U)\n#define PDS_CR_PDS_WAKEUP_SRC_EN_MSK      (((1U << PDS_CR_PDS_WAKEUP_SRC_EN_LEN) - 1) << PDS_CR_PDS_WAKEUP_SRC_EN_POS)\n#define PDS_CR_PDS_WAKEUP_SRC_EN_UMSK     (~(((1U << PDS_CR_PDS_WAKEUP_SRC_EN_LEN) - 1) << PDS_CR_PDS_WAKEUP_SRC_EN_POS))\n#define PDS_RO_PDS_WAKEUP_EVENT           PDS_RO_PDS_WAKEUP_EVENT\n#define PDS_RO_PDS_WAKEUP_EVENT_POS       (24U)\n#define PDS_RO_PDS_WAKEUP_EVENT_LEN       (8U)\n#define PDS_RO_PDS_WAKEUP_EVENT_MSK       (((1U << PDS_RO_PDS_WAKEUP_EVENT_LEN) - 1) << PDS_RO_PDS_WAKEUP_EVENT_POS)\n#define PDS_RO_PDS_WAKEUP_EVENT_UMSK      (~(((1U << PDS_RO_PDS_WAKEUP_EVENT_LEN) - 1) << PDS_RO_PDS_WAKEUP_EVENT_POS))\n\n/* 0x10 : PDS_CTL2 */\n#define PDS_CTL2_OFFSET                    (0x10)\n#define PDS_CR_PDS_FORCE_NP_PWR_OFF        PDS_CR_PDS_FORCE_NP_PWR_OFF\n#define PDS_CR_PDS_FORCE_NP_PWR_OFF_POS    (0U)\n#define PDS_CR_PDS_FORCE_NP_PWR_OFF_LEN    (1U)\n#define PDS_CR_PDS_FORCE_NP_PWR_OFF_MSK    (((1U << PDS_CR_PDS_FORCE_NP_PWR_OFF_LEN) - 1) << PDS_CR_PDS_FORCE_NP_PWR_OFF_POS)\n#define PDS_CR_PDS_FORCE_NP_PWR_OFF_UMSK   (~(((1U << PDS_CR_PDS_FORCE_NP_PWR_OFF_LEN) - 1) << PDS_CR_PDS_FORCE_NP_PWR_OFF_POS))\n#define PDS_CR_PDS_FORCE_BZ_PWR_OFF        PDS_CR_PDS_FORCE_BZ_PWR_OFF\n#define PDS_CR_PDS_FORCE_BZ_PWR_OFF_POS    (2U)\n#define PDS_CR_PDS_FORCE_BZ_PWR_OFF_LEN    (1U)\n#define PDS_CR_PDS_FORCE_BZ_PWR_OFF_MSK    (((1U << PDS_CR_PDS_FORCE_BZ_PWR_OFF_LEN) - 1) << PDS_CR_PDS_FORCE_BZ_PWR_OFF_POS)\n#define PDS_CR_PDS_FORCE_BZ_PWR_OFF_UMSK   (~(((1U << PDS_CR_PDS_FORCE_BZ_PWR_OFF_LEN) - 1) << PDS_CR_PDS_FORCE_BZ_PWR_OFF_POS))\n#define PDS_CR_PDS_FORCE_USB_PWR_OFF       PDS_CR_PDS_FORCE_USB_PWR_OFF\n#define PDS_CR_PDS_FORCE_USB_PWR_OFF_POS   (3U)\n#define PDS_CR_PDS_FORCE_USB_PWR_OFF_LEN   (1U)\n#define PDS_CR_PDS_FORCE_USB_PWR_OFF_MSK   (((1U << PDS_CR_PDS_FORCE_USB_PWR_OFF_LEN) - 1) << PDS_CR_PDS_FORCE_USB_PWR_OFF_POS)\n#define PDS_CR_PDS_FORCE_USB_PWR_OFF_UMSK  (~(((1U << PDS_CR_PDS_FORCE_USB_PWR_OFF_LEN) - 1) << PDS_CR_PDS_FORCE_USB_PWR_OFF_POS))\n#define PDS_CR_PDS_FORCE_NP_ISO_EN         PDS_CR_PDS_FORCE_NP_ISO_EN\n#define PDS_CR_PDS_FORCE_NP_ISO_EN_POS     (4U)\n#define PDS_CR_PDS_FORCE_NP_ISO_EN_LEN     (1U)\n#define PDS_CR_PDS_FORCE_NP_ISO_EN_MSK     (((1U << PDS_CR_PDS_FORCE_NP_ISO_EN_LEN) - 1) << PDS_CR_PDS_FORCE_NP_ISO_EN_POS)\n#define PDS_CR_PDS_FORCE_NP_ISO_EN_UMSK    (~(((1U << PDS_CR_PDS_FORCE_NP_ISO_EN_LEN) - 1) << PDS_CR_PDS_FORCE_NP_ISO_EN_POS))\n#define PDS_CR_PDS_FORCE_BZ_ISO_EN         PDS_CR_PDS_FORCE_BZ_ISO_EN\n#define PDS_CR_PDS_FORCE_BZ_ISO_EN_POS     (6U)\n#define PDS_CR_PDS_FORCE_BZ_ISO_EN_LEN     (1U)\n#define PDS_CR_PDS_FORCE_BZ_ISO_EN_MSK     (((1U << PDS_CR_PDS_FORCE_BZ_ISO_EN_LEN) - 1) << PDS_CR_PDS_FORCE_BZ_ISO_EN_POS)\n#define PDS_CR_PDS_FORCE_BZ_ISO_EN_UMSK    (~(((1U << PDS_CR_PDS_FORCE_BZ_ISO_EN_LEN) - 1) << PDS_CR_PDS_FORCE_BZ_ISO_EN_POS))\n#define PDS_CR_PDS_FORCE_USB_ISO_EN        PDS_CR_PDS_FORCE_USB_ISO_EN\n#define PDS_CR_PDS_FORCE_USB_ISO_EN_POS    (7U)\n#define PDS_CR_PDS_FORCE_USB_ISO_EN_LEN    (1U)\n#define PDS_CR_PDS_FORCE_USB_ISO_EN_MSK    (((1U << PDS_CR_PDS_FORCE_USB_ISO_EN_LEN) - 1) << PDS_CR_PDS_FORCE_USB_ISO_EN_POS)\n#define PDS_CR_PDS_FORCE_USB_ISO_EN_UMSK   (~(((1U << PDS_CR_PDS_FORCE_USB_ISO_EN_LEN) - 1) << PDS_CR_PDS_FORCE_USB_ISO_EN_POS))\n#define PDS_CR_PDS_FORCE_NP_PDS_RST        PDS_CR_PDS_FORCE_NP_PDS_RST\n#define PDS_CR_PDS_FORCE_NP_PDS_RST_POS    (8U)\n#define PDS_CR_PDS_FORCE_NP_PDS_RST_LEN    (1U)\n#define PDS_CR_PDS_FORCE_NP_PDS_RST_MSK    (((1U << PDS_CR_PDS_FORCE_NP_PDS_RST_LEN) - 1) << PDS_CR_PDS_FORCE_NP_PDS_RST_POS)\n#define PDS_CR_PDS_FORCE_NP_PDS_RST_UMSK   (~(((1U << PDS_CR_PDS_FORCE_NP_PDS_RST_LEN) - 1) << PDS_CR_PDS_FORCE_NP_PDS_RST_POS))\n#define PDS_CR_PDS_FORCE_BZ_PDS_RST        PDS_CR_PDS_FORCE_BZ_PDS_RST\n#define PDS_CR_PDS_FORCE_BZ_PDS_RST_POS    (10U)\n#define PDS_CR_PDS_FORCE_BZ_PDS_RST_LEN    (1U)\n#define PDS_CR_PDS_FORCE_BZ_PDS_RST_MSK    (((1U << PDS_CR_PDS_FORCE_BZ_PDS_RST_LEN) - 1) << PDS_CR_PDS_FORCE_BZ_PDS_RST_POS)\n#define PDS_CR_PDS_FORCE_BZ_PDS_RST_UMSK   (~(((1U << PDS_CR_PDS_FORCE_BZ_PDS_RST_LEN) - 1) << PDS_CR_PDS_FORCE_BZ_PDS_RST_POS))\n#define PDS_CR_PDS_FORCE_USB_PDS_RST       PDS_CR_PDS_FORCE_USB_PDS_RST\n#define PDS_CR_PDS_FORCE_USB_PDS_RST_POS   (11U)\n#define PDS_CR_PDS_FORCE_USB_PDS_RST_LEN   (1U)\n#define PDS_CR_PDS_FORCE_USB_PDS_RST_MSK   (((1U << PDS_CR_PDS_FORCE_USB_PDS_RST_LEN) - 1) << PDS_CR_PDS_FORCE_USB_PDS_RST_POS)\n#define PDS_CR_PDS_FORCE_USB_PDS_RST_UMSK  (~(((1U << PDS_CR_PDS_FORCE_USB_PDS_RST_LEN) - 1) << PDS_CR_PDS_FORCE_USB_PDS_RST_POS))\n#define PDS_CR_PDS_FORCE_NP_MEM_STBY       PDS_CR_PDS_FORCE_NP_MEM_STBY\n#define PDS_CR_PDS_FORCE_NP_MEM_STBY_POS   (12U)\n#define PDS_CR_PDS_FORCE_NP_MEM_STBY_LEN   (1U)\n#define PDS_CR_PDS_FORCE_NP_MEM_STBY_MSK   (((1U << PDS_CR_PDS_FORCE_NP_MEM_STBY_LEN) - 1) << PDS_CR_PDS_FORCE_NP_MEM_STBY_POS)\n#define PDS_CR_PDS_FORCE_NP_MEM_STBY_UMSK  (~(((1U << PDS_CR_PDS_FORCE_NP_MEM_STBY_LEN) - 1) << PDS_CR_PDS_FORCE_NP_MEM_STBY_POS))\n#define PDS_CR_PDS_FORCE_BZ_MEM_STBY       PDS_CR_PDS_FORCE_BZ_MEM_STBY\n#define PDS_CR_PDS_FORCE_BZ_MEM_STBY_POS   (14U)\n#define PDS_CR_PDS_FORCE_BZ_MEM_STBY_LEN   (1U)\n#define PDS_CR_PDS_FORCE_BZ_MEM_STBY_MSK   (((1U << PDS_CR_PDS_FORCE_BZ_MEM_STBY_LEN) - 1) << PDS_CR_PDS_FORCE_BZ_MEM_STBY_POS)\n#define PDS_CR_PDS_FORCE_BZ_MEM_STBY_UMSK  (~(((1U << PDS_CR_PDS_FORCE_BZ_MEM_STBY_LEN) - 1) << PDS_CR_PDS_FORCE_BZ_MEM_STBY_POS))\n#define PDS_CR_PDS_FORCE_USB_MEM_STBY      PDS_CR_PDS_FORCE_USB_MEM_STBY\n#define PDS_CR_PDS_FORCE_USB_MEM_STBY_POS  (15U)\n#define PDS_CR_PDS_FORCE_USB_MEM_STBY_LEN  (1U)\n#define PDS_CR_PDS_FORCE_USB_MEM_STBY_MSK  (((1U << PDS_CR_PDS_FORCE_USB_MEM_STBY_LEN) - 1) << PDS_CR_PDS_FORCE_USB_MEM_STBY_POS)\n#define PDS_CR_PDS_FORCE_USB_MEM_STBY_UMSK (~(((1U << PDS_CR_PDS_FORCE_USB_MEM_STBY_LEN) - 1) << PDS_CR_PDS_FORCE_USB_MEM_STBY_POS))\n#define PDS_CR_PDS_FORCE_NP_GATE_CLK       PDS_CR_PDS_FORCE_NP_GATE_CLK\n#define PDS_CR_PDS_FORCE_NP_GATE_CLK_POS   (16U)\n#define PDS_CR_PDS_FORCE_NP_GATE_CLK_LEN   (1U)\n#define PDS_CR_PDS_FORCE_NP_GATE_CLK_MSK   (((1U << PDS_CR_PDS_FORCE_NP_GATE_CLK_LEN) - 1) << PDS_CR_PDS_FORCE_NP_GATE_CLK_POS)\n#define PDS_CR_PDS_FORCE_NP_GATE_CLK_UMSK  (~(((1U << PDS_CR_PDS_FORCE_NP_GATE_CLK_LEN) - 1) << PDS_CR_PDS_FORCE_NP_GATE_CLK_POS))\n#define PDS_CR_PDS_FORCE_BZ_GATE_CLK       PDS_CR_PDS_FORCE_BZ_GATE_CLK\n#define PDS_CR_PDS_FORCE_BZ_GATE_CLK_POS   (18U)\n#define PDS_CR_PDS_FORCE_BZ_GATE_CLK_LEN   (1U)\n#define PDS_CR_PDS_FORCE_BZ_GATE_CLK_MSK   (((1U << PDS_CR_PDS_FORCE_BZ_GATE_CLK_LEN) - 1) << PDS_CR_PDS_FORCE_BZ_GATE_CLK_POS)\n#define PDS_CR_PDS_FORCE_BZ_GATE_CLK_UMSK  (~(((1U << PDS_CR_PDS_FORCE_BZ_GATE_CLK_LEN) - 1) << PDS_CR_PDS_FORCE_BZ_GATE_CLK_POS))\n#define PDS_CR_PDS_FORCE_USB_GATE_CLK      PDS_CR_PDS_FORCE_USB_GATE_CLK\n#define PDS_CR_PDS_FORCE_USB_GATE_CLK_POS  (19U)\n#define PDS_CR_PDS_FORCE_USB_GATE_CLK_LEN  (1U)\n#define PDS_CR_PDS_FORCE_USB_GATE_CLK_MSK  (((1U << PDS_CR_PDS_FORCE_USB_GATE_CLK_LEN) - 1) << PDS_CR_PDS_FORCE_USB_GATE_CLK_POS)\n#define PDS_CR_PDS_FORCE_USB_GATE_CLK_UMSK (~(((1U << PDS_CR_PDS_FORCE_USB_GATE_CLK_LEN) - 1) << PDS_CR_PDS_FORCE_USB_GATE_CLK_POS))\n\n/* 0x14 : PDS_CTL3 */\n#define PDS_CTL3_OFFSET                     (0x14)\n#define PDS_CR_PDS_FORCE_MISC_PWR_OFF       PDS_CR_PDS_FORCE_MISC_PWR_OFF\n#define PDS_CR_PDS_FORCE_MISC_PWR_OFF_POS   (1U)\n#define PDS_CR_PDS_FORCE_MISC_PWR_OFF_LEN   (1U)\n#define PDS_CR_PDS_FORCE_MISC_PWR_OFF_MSK   (((1U << PDS_CR_PDS_FORCE_MISC_PWR_OFF_LEN) - 1) << PDS_CR_PDS_FORCE_MISC_PWR_OFF_POS)\n#define PDS_CR_PDS_FORCE_MISC_PWR_OFF_UMSK  (~(((1U << PDS_CR_PDS_FORCE_MISC_PWR_OFF_LEN) - 1) << PDS_CR_PDS_FORCE_MISC_PWR_OFF_POS))\n#define PDS_CR_PDS_FORCE_BLE_PWR_OFF        PDS_CR_PDS_FORCE_BLE_PWR_OFF\n#define PDS_CR_PDS_FORCE_BLE_PWR_OFF_POS    (2U)\n#define PDS_CR_PDS_FORCE_BLE_PWR_OFF_LEN    (1U)\n#define PDS_CR_PDS_FORCE_BLE_PWR_OFF_MSK    (((1U << PDS_CR_PDS_FORCE_BLE_PWR_OFF_LEN) - 1) << PDS_CR_PDS_FORCE_BLE_PWR_OFF_POS)\n#define PDS_CR_PDS_FORCE_BLE_PWR_OFF_UMSK   (~(((1U << PDS_CR_PDS_FORCE_BLE_PWR_OFF_LEN) - 1) << PDS_CR_PDS_FORCE_BLE_PWR_OFF_POS))\n#define PDS_CR_PDS_FORCE_BLE_ISO_EN         PDS_CR_PDS_FORCE_BLE_ISO_EN\n#define PDS_CR_PDS_FORCE_BLE_ISO_EN_POS     (5U)\n#define PDS_CR_PDS_FORCE_BLE_ISO_EN_LEN     (1U)\n#define PDS_CR_PDS_FORCE_BLE_ISO_EN_MSK     (((1U << PDS_CR_PDS_FORCE_BLE_ISO_EN_LEN) - 1) << PDS_CR_PDS_FORCE_BLE_ISO_EN_POS)\n#define PDS_CR_PDS_FORCE_BLE_ISO_EN_UMSK    (~(((1U << PDS_CR_PDS_FORCE_BLE_ISO_EN_LEN) - 1) << PDS_CR_PDS_FORCE_BLE_ISO_EN_POS))\n#define PDS_CR_PDS_FORCE_MISC_PDS_RST       PDS_CR_PDS_FORCE_MISC_PDS_RST\n#define PDS_CR_PDS_FORCE_MISC_PDS_RST_POS   (7U)\n#define PDS_CR_PDS_FORCE_MISC_PDS_RST_LEN   (1U)\n#define PDS_CR_PDS_FORCE_MISC_PDS_RST_MSK   (((1U << PDS_CR_PDS_FORCE_MISC_PDS_RST_LEN) - 1) << PDS_CR_PDS_FORCE_MISC_PDS_RST_POS)\n#define PDS_CR_PDS_FORCE_MISC_PDS_RST_UMSK  (~(((1U << PDS_CR_PDS_FORCE_MISC_PDS_RST_LEN) - 1) << PDS_CR_PDS_FORCE_MISC_PDS_RST_POS))\n#define PDS_CR_PDS_FORCE_BLE_PDS_RST        PDS_CR_PDS_FORCE_BLE_PDS_RST\n#define PDS_CR_PDS_FORCE_BLE_PDS_RST_POS    (8U)\n#define PDS_CR_PDS_FORCE_BLE_PDS_RST_LEN    (1U)\n#define PDS_CR_PDS_FORCE_BLE_PDS_RST_MSK    (((1U << PDS_CR_PDS_FORCE_BLE_PDS_RST_LEN) - 1) << PDS_CR_PDS_FORCE_BLE_PDS_RST_POS)\n#define PDS_CR_PDS_FORCE_BLE_PDS_RST_UMSK   (~(((1U << PDS_CR_PDS_FORCE_BLE_PDS_RST_LEN) - 1) << PDS_CR_PDS_FORCE_BLE_PDS_RST_POS))\n#define PDS_CR_PDS_FORCE_MISC_MEM_STBY      PDS_CR_PDS_FORCE_MISC_MEM_STBY\n#define PDS_CR_PDS_FORCE_MISC_MEM_STBY_POS  (10U)\n#define PDS_CR_PDS_FORCE_MISC_MEM_STBY_LEN  (1U)\n#define PDS_CR_PDS_FORCE_MISC_MEM_STBY_MSK  (((1U << PDS_CR_PDS_FORCE_MISC_MEM_STBY_LEN) - 1) << PDS_CR_PDS_FORCE_MISC_MEM_STBY_POS)\n#define PDS_CR_PDS_FORCE_MISC_MEM_STBY_UMSK (~(((1U << PDS_CR_PDS_FORCE_MISC_MEM_STBY_LEN) - 1) << PDS_CR_PDS_FORCE_MISC_MEM_STBY_POS))\n#define PDS_CR_PDS_FORCE_BLE_MEM_STBY       PDS_CR_PDS_FORCE_BLE_MEM_STBY\n#define PDS_CR_PDS_FORCE_BLE_MEM_STBY_POS   (11U)\n#define PDS_CR_PDS_FORCE_BLE_MEM_STBY_LEN   (1U)\n#define PDS_CR_PDS_FORCE_BLE_MEM_STBY_MSK   (((1U << PDS_CR_PDS_FORCE_BLE_MEM_STBY_LEN) - 1) << PDS_CR_PDS_FORCE_BLE_MEM_STBY_POS)\n#define PDS_CR_PDS_FORCE_BLE_MEM_STBY_UMSK  (~(((1U << PDS_CR_PDS_FORCE_BLE_MEM_STBY_LEN) - 1) << PDS_CR_PDS_FORCE_BLE_MEM_STBY_POS))\n#define PDS_CR_PDS_FORCE_MISC_GATE_CLK      PDS_CR_PDS_FORCE_MISC_GATE_CLK\n#define PDS_CR_PDS_FORCE_MISC_GATE_CLK_POS  (13U)\n#define PDS_CR_PDS_FORCE_MISC_GATE_CLK_LEN  (1U)\n#define PDS_CR_PDS_FORCE_MISC_GATE_CLK_MSK  (((1U << PDS_CR_PDS_FORCE_MISC_GATE_CLK_LEN) - 1) << PDS_CR_PDS_FORCE_MISC_GATE_CLK_POS)\n#define PDS_CR_PDS_FORCE_MISC_GATE_CLK_UMSK (~(((1U << PDS_CR_PDS_FORCE_MISC_GATE_CLK_LEN) - 1) << PDS_CR_PDS_FORCE_MISC_GATE_CLK_POS))\n#define PDS_CR_PDS_FORCE_BLE_GATE_CLK       PDS_CR_PDS_FORCE_BLE_GATE_CLK\n#define PDS_CR_PDS_FORCE_BLE_GATE_CLK_POS   (14U)\n#define PDS_CR_PDS_FORCE_BLE_GATE_CLK_LEN   (1U)\n#define PDS_CR_PDS_FORCE_BLE_GATE_CLK_MSK   (((1U << PDS_CR_PDS_FORCE_BLE_GATE_CLK_LEN) - 1) << PDS_CR_PDS_FORCE_BLE_GATE_CLK_POS)\n#define PDS_CR_PDS_FORCE_BLE_GATE_CLK_UMSK  (~(((1U << PDS_CR_PDS_FORCE_BLE_GATE_CLK_LEN) - 1) << PDS_CR_PDS_FORCE_BLE_GATE_CLK_POS))\n#define PDS_CR_PDS_NP_ISO_EN                PDS_CR_PDS_NP_ISO_EN\n#define PDS_CR_PDS_NP_ISO_EN_POS            (24U)\n#define PDS_CR_PDS_NP_ISO_EN_LEN            (1U)\n#define PDS_CR_PDS_NP_ISO_EN_MSK            (((1U << PDS_CR_PDS_NP_ISO_EN_LEN) - 1) << PDS_CR_PDS_NP_ISO_EN_POS)\n#define PDS_CR_PDS_NP_ISO_EN_UMSK           (~(((1U << PDS_CR_PDS_NP_ISO_EN_LEN) - 1) << PDS_CR_PDS_NP_ISO_EN_POS))\n#define PDS_CR_PDS_BZ_ISO_EN                PDS_CR_PDS_BZ_ISO_EN\n#define PDS_CR_PDS_BZ_ISO_EN_POS            (27U)\n#define PDS_CR_PDS_BZ_ISO_EN_LEN            (1U)\n#define PDS_CR_PDS_BZ_ISO_EN_MSK            (((1U << PDS_CR_PDS_BZ_ISO_EN_LEN) - 1) << PDS_CR_PDS_BZ_ISO_EN_POS)\n#define PDS_CR_PDS_BZ_ISO_EN_UMSK           (~(((1U << PDS_CR_PDS_BZ_ISO_EN_LEN) - 1) << PDS_CR_PDS_BZ_ISO_EN_POS))\n#define PDS_CR_PDS_BLE_ISO_EN               PDS_CR_PDS_BLE_ISO_EN\n#define PDS_CR_PDS_BLE_ISO_EN_POS           (28U)\n#define PDS_CR_PDS_BLE_ISO_EN_LEN           (1U)\n#define PDS_CR_PDS_BLE_ISO_EN_MSK           (((1U << PDS_CR_PDS_BLE_ISO_EN_LEN) - 1) << PDS_CR_PDS_BLE_ISO_EN_POS)\n#define PDS_CR_PDS_BLE_ISO_EN_UMSK          (~(((1U << PDS_CR_PDS_BLE_ISO_EN_LEN) - 1) << PDS_CR_PDS_BLE_ISO_EN_POS))\n#define PDS_CR_PDS_USB_ISO_EN               PDS_CR_PDS_USB_ISO_EN\n#define PDS_CR_PDS_USB_ISO_EN_POS           (29U)\n#define PDS_CR_PDS_USB_ISO_EN_LEN           (1U)\n#define PDS_CR_PDS_USB_ISO_EN_MSK           (((1U << PDS_CR_PDS_USB_ISO_EN_LEN) - 1) << PDS_CR_PDS_USB_ISO_EN_POS)\n#define PDS_CR_PDS_USB_ISO_EN_UMSK          (~(((1U << PDS_CR_PDS_USB_ISO_EN_LEN) - 1) << PDS_CR_PDS_USB_ISO_EN_POS))\n#define PDS_CR_PDS_MISC_ISO_EN              PDS_CR_PDS_MISC_ISO_EN\n#define PDS_CR_PDS_MISC_ISO_EN_POS          (30U)\n#define PDS_CR_PDS_MISC_ISO_EN_LEN          (1U)\n#define PDS_CR_PDS_MISC_ISO_EN_MSK          (((1U << PDS_CR_PDS_MISC_ISO_EN_LEN) - 1) << PDS_CR_PDS_MISC_ISO_EN_POS)\n#define PDS_CR_PDS_MISC_ISO_EN_UMSK         (~(((1U << PDS_CR_PDS_MISC_ISO_EN_LEN) - 1) << PDS_CR_PDS_MISC_ISO_EN_POS))\n\n/* 0x18 : PDS_CTL4 */\n#define PDS_CTL4_OFFSET                  (0x18)\n#define PDS_CR_PDS_NP_PWR_OFF            PDS_CR_PDS_NP_PWR_OFF\n#define PDS_CR_PDS_NP_PWR_OFF_POS        (0U)\n#define PDS_CR_PDS_NP_PWR_OFF_LEN        (1U)\n#define PDS_CR_PDS_NP_PWR_OFF_MSK        (((1U << PDS_CR_PDS_NP_PWR_OFF_LEN) - 1) << PDS_CR_PDS_NP_PWR_OFF_POS)\n#define PDS_CR_PDS_NP_PWR_OFF_UMSK       (~(((1U << PDS_CR_PDS_NP_PWR_OFF_LEN) - 1) << PDS_CR_PDS_NP_PWR_OFF_POS))\n#define PDS_CR_PDS_NP_RESET              PDS_CR_PDS_NP_RESET\n#define PDS_CR_PDS_NP_RESET_POS          (1U)\n#define PDS_CR_PDS_NP_RESET_LEN          (1U)\n#define PDS_CR_PDS_NP_RESET_MSK          (((1U << PDS_CR_PDS_NP_RESET_LEN) - 1) << PDS_CR_PDS_NP_RESET_POS)\n#define PDS_CR_PDS_NP_RESET_UMSK         (~(((1U << PDS_CR_PDS_NP_RESET_LEN) - 1) << PDS_CR_PDS_NP_RESET_POS))\n#define PDS_CR_PDS_NP_MEM_STBY           PDS_CR_PDS_NP_MEM_STBY\n#define PDS_CR_PDS_NP_MEM_STBY_POS       (2U)\n#define PDS_CR_PDS_NP_MEM_STBY_LEN       (1U)\n#define PDS_CR_PDS_NP_MEM_STBY_MSK       (((1U << PDS_CR_PDS_NP_MEM_STBY_LEN) - 1) << PDS_CR_PDS_NP_MEM_STBY_POS)\n#define PDS_CR_PDS_NP_MEM_STBY_UMSK      (~(((1U << PDS_CR_PDS_NP_MEM_STBY_LEN) - 1) << PDS_CR_PDS_NP_MEM_STBY_POS))\n#define PDS_CR_PDS_NP_GATE_CLK           PDS_CR_PDS_NP_GATE_CLK\n#define PDS_CR_PDS_NP_GATE_CLK_POS       (3U)\n#define PDS_CR_PDS_NP_GATE_CLK_LEN       (1U)\n#define PDS_CR_PDS_NP_GATE_CLK_MSK       (((1U << PDS_CR_PDS_NP_GATE_CLK_LEN) - 1) << PDS_CR_PDS_NP_GATE_CLK_POS)\n#define PDS_CR_PDS_NP_GATE_CLK_UMSK      (~(((1U << PDS_CR_PDS_NP_GATE_CLK_LEN) - 1) << PDS_CR_PDS_NP_GATE_CLK_POS))\n#define PDS_CR_PDS_BZ_PWR_OFF            PDS_CR_PDS_BZ_PWR_OFF\n#define PDS_CR_PDS_BZ_PWR_OFF_POS        (12U)\n#define PDS_CR_PDS_BZ_PWR_OFF_LEN        (1U)\n#define PDS_CR_PDS_BZ_PWR_OFF_MSK        (((1U << PDS_CR_PDS_BZ_PWR_OFF_LEN) - 1) << PDS_CR_PDS_BZ_PWR_OFF_POS)\n#define PDS_CR_PDS_BZ_PWR_OFF_UMSK       (~(((1U << PDS_CR_PDS_BZ_PWR_OFF_LEN) - 1) << PDS_CR_PDS_BZ_PWR_OFF_POS))\n#define PDS_CR_PDS_BZ_RESET              PDS_CR_PDS_BZ_RESET\n#define PDS_CR_PDS_BZ_RESET_POS          (13U)\n#define PDS_CR_PDS_BZ_RESET_LEN          (1U)\n#define PDS_CR_PDS_BZ_RESET_MSK          (((1U << PDS_CR_PDS_BZ_RESET_LEN) - 1) << PDS_CR_PDS_BZ_RESET_POS)\n#define PDS_CR_PDS_BZ_RESET_UMSK         (~(((1U << PDS_CR_PDS_BZ_RESET_LEN) - 1) << PDS_CR_PDS_BZ_RESET_POS))\n#define PDS_CR_PDS_BZ_MEM_STBY           PDS_CR_PDS_BZ_MEM_STBY\n#define PDS_CR_PDS_BZ_MEM_STBY_POS       (14U)\n#define PDS_CR_PDS_BZ_MEM_STBY_LEN       (1U)\n#define PDS_CR_PDS_BZ_MEM_STBY_MSK       (((1U << PDS_CR_PDS_BZ_MEM_STBY_LEN) - 1) << PDS_CR_PDS_BZ_MEM_STBY_POS)\n#define PDS_CR_PDS_BZ_MEM_STBY_UMSK      (~(((1U << PDS_CR_PDS_BZ_MEM_STBY_LEN) - 1) << PDS_CR_PDS_BZ_MEM_STBY_POS))\n#define PDS_CR_PDS_BZ_GATE_CLK           PDS_CR_PDS_BZ_GATE_CLK\n#define PDS_CR_PDS_BZ_GATE_CLK_POS       (15U)\n#define PDS_CR_PDS_BZ_GATE_CLK_LEN       (1U)\n#define PDS_CR_PDS_BZ_GATE_CLK_MSK       (((1U << PDS_CR_PDS_BZ_GATE_CLK_LEN) - 1) << PDS_CR_PDS_BZ_GATE_CLK_POS)\n#define PDS_CR_PDS_BZ_GATE_CLK_UMSK      (~(((1U << PDS_CR_PDS_BZ_GATE_CLK_LEN) - 1) << PDS_CR_PDS_BZ_GATE_CLK_POS))\n#define PDS_CR_PDS_BLE_PWR_OFF           PDS_CR_PDS_BLE_PWR_OFF\n#define PDS_CR_PDS_BLE_PWR_OFF_POS       (16U)\n#define PDS_CR_PDS_BLE_PWR_OFF_LEN       (1U)\n#define PDS_CR_PDS_BLE_PWR_OFF_MSK       (((1U << PDS_CR_PDS_BLE_PWR_OFF_LEN) - 1) << PDS_CR_PDS_BLE_PWR_OFF_POS)\n#define PDS_CR_PDS_BLE_PWR_OFF_UMSK      (~(((1U << PDS_CR_PDS_BLE_PWR_OFF_LEN) - 1) << PDS_CR_PDS_BLE_PWR_OFF_POS))\n#define PDS_CR_PDS_BLE_RESET             PDS_CR_PDS_BLE_RESET\n#define PDS_CR_PDS_BLE_RESET_POS         (17U)\n#define PDS_CR_PDS_BLE_RESET_LEN         (1U)\n#define PDS_CR_PDS_BLE_RESET_MSK         (((1U << PDS_CR_PDS_BLE_RESET_LEN) - 1) << PDS_CR_PDS_BLE_RESET_POS)\n#define PDS_CR_PDS_BLE_RESET_UMSK        (~(((1U << PDS_CR_PDS_BLE_RESET_LEN) - 1) << PDS_CR_PDS_BLE_RESET_POS))\n#define PDS_CR_PDS_BLE_MEM_STBY          PDS_CR_PDS_BLE_MEM_STBY\n#define PDS_CR_PDS_BLE_MEM_STBY_POS      (18U)\n#define PDS_CR_PDS_BLE_MEM_STBY_LEN      (1U)\n#define PDS_CR_PDS_BLE_MEM_STBY_MSK      (((1U << PDS_CR_PDS_BLE_MEM_STBY_LEN) - 1) << PDS_CR_PDS_BLE_MEM_STBY_POS)\n#define PDS_CR_PDS_BLE_MEM_STBY_UMSK     (~(((1U << PDS_CR_PDS_BLE_MEM_STBY_LEN) - 1) << PDS_CR_PDS_BLE_MEM_STBY_POS))\n#define PDS_CR_PDS_BLE_GATE_CLK          PDS_CR_PDS_BLE_GATE_CLK\n#define PDS_CR_PDS_BLE_GATE_CLK_POS      (19U)\n#define PDS_CR_PDS_BLE_GATE_CLK_LEN      (1U)\n#define PDS_CR_PDS_BLE_GATE_CLK_MSK      (((1U << PDS_CR_PDS_BLE_GATE_CLK_LEN) - 1) << PDS_CR_PDS_BLE_GATE_CLK_POS)\n#define PDS_CR_PDS_BLE_GATE_CLK_UMSK     (~(((1U << PDS_CR_PDS_BLE_GATE_CLK_LEN) - 1) << PDS_CR_PDS_BLE_GATE_CLK_POS))\n#define PDS_CR_PDS_USB_PWR_OFF           PDS_CR_PDS_USB_PWR_OFF\n#define PDS_CR_PDS_USB_PWR_OFF_POS       (20U)\n#define PDS_CR_PDS_USB_PWR_OFF_LEN       (1U)\n#define PDS_CR_PDS_USB_PWR_OFF_MSK       (((1U << PDS_CR_PDS_USB_PWR_OFF_LEN) - 1) << PDS_CR_PDS_USB_PWR_OFF_POS)\n#define PDS_CR_PDS_USB_PWR_OFF_UMSK      (~(((1U << PDS_CR_PDS_USB_PWR_OFF_LEN) - 1) << PDS_CR_PDS_USB_PWR_OFF_POS))\n#define PDS_CR_PDS_USB_RESET             PDS_CR_PDS_USB_RESET\n#define PDS_CR_PDS_USB_RESET_POS         (21U)\n#define PDS_CR_PDS_USB_RESET_LEN         (1U)\n#define PDS_CR_PDS_USB_RESET_MSK         (((1U << PDS_CR_PDS_USB_RESET_LEN) - 1) << PDS_CR_PDS_USB_RESET_POS)\n#define PDS_CR_PDS_USB_RESET_UMSK        (~(((1U << PDS_CR_PDS_USB_RESET_LEN) - 1) << PDS_CR_PDS_USB_RESET_POS))\n#define PDS_CR_PDS_USB_MEM_STBY          PDS_CR_PDS_USB_MEM_STBY\n#define PDS_CR_PDS_USB_MEM_STBY_POS      (22U)\n#define PDS_CR_PDS_USB_MEM_STBY_LEN      (1U)\n#define PDS_CR_PDS_USB_MEM_STBY_MSK      (((1U << PDS_CR_PDS_USB_MEM_STBY_LEN) - 1) << PDS_CR_PDS_USB_MEM_STBY_POS)\n#define PDS_CR_PDS_USB_MEM_STBY_UMSK     (~(((1U << PDS_CR_PDS_USB_MEM_STBY_LEN) - 1) << PDS_CR_PDS_USB_MEM_STBY_POS))\n#define PDS_CR_PDS_USB_GATE_CLK          PDS_CR_PDS_USB_GATE_CLK\n#define PDS_CR_PDS_USB_GATE_CLK_POS      (23U)\n#define PDS_CR_PDS_USB_GATE_CLK_LEN      (1U)\n#define PDS_CR_PDS_USB_GATE_CLK_MSK      (((1U << PDS_CR_PDS_USB_GATE_CLK_LEN) - 1) << PDS_CR_PDS_USB_GATE_CLK_POS)\n#define PDS_CR_PDS_USB_GATE_CLK_UMSK     (~(((1U << PDS_CR_PDS_USB_GATE_CLK_LEN) - 1) << PDS_CR_PDS_USB_GATE_CLK_POS))\n#define PDS_CR_PDS_MISC_PWR_OFF          PDS_CR_PDS_MISC_PWR_OFF\n#define PDS_CR_PDS_MISC_PWR_OFF_POS      (24U)\n#define PDS_CR_PDS_MISC_PWR_OFF_LEN      (1U)\n#define PDS_CR_PDS_MISC_PWR_OFF_MSK      (((1U << PDS_CR_PDS_MISC_PWR_OFF_LEN) - 1) << PDS_CR_PDS_MISC_PWR_OFF_POS)\n#define PDS_CR_PDS_MISC_PWR_OFF_UMSK     (~(((1U << PDS_CR_PDS_MISC_PWR_OFF_LEN) - 1) << PDS_CR_PDS_MISC_PWR_OFF_POS))\n#define PDS_CR_PDS_MISC_RESET            PDS_CR_PDS_MISC_RESET\n#define PDS_CR_PDS_MISC_RESET_POS        (25U)\n#define PDS_CR_PDS_MISC_RESET_LEN        (1U)\n#define PDS_CR_PDS_MISC_RESET_MSK        (((1U << PDS_CR_PDS_MISC_RESET_LEN) - 1) << PDS_CR_PDS_MISC_RESET_POS)\n#define PDS_CR_PDS_MISC_RESET_UMSK       (~(((1U << PDS_CR_PDS_MISC_RESET_LEN) - 1) << PDS_CR_PDS_MISC_RESET_POS))\n#define PDS_CR_PDS_MISC_MEM_STBY         PDS_CR_PDS_MISC_MEM_STBY\n#define PDS_CR_PDS_MISC_MEM_STBY_POS     (26U)\n#define PDS_CR_PDS_MISC_MEM_STBY_LEN     (1U)\n#define PDS_CR_PDS_MISC_MEM_STBY_MSK     (((1U << PDS_CR_PDS_MISC_MEM_STBY_LEN) - 1) << PDS_CR_PDS_MISC_MEM_STBY_POS)\n#define PDS_CR_PDS_MISC_MEM_STBY_UMSK    (~(((1U << PDS_CR_PDS_MISC_MEM_STBY_LEN) - 1) << PDS_CR_PDS_MISC_MEM_STBY_POS))\n#define PDS_CR_PDS_MISC_GATE_CLK         PDS_CR_PDS_MISC_GATE_CLK\n#define PDS_CR_PDS_MISC_GATE_CLK_POS     (27U)\n#define PDS_CR_PDS_MISC_GATE_CLK_LEN     (1U)\n#define PDS_CR_PDS_MISC_GATE_CLK_MSK     (((1U << PDS_CR_PDS_MISC_GATE_CLK_LEN) - 1) << PDS_CR_PDS_MISC_GATE_CLK_POS)\n#define PDS_CR_PDS_MISC_GATE_CLK_UMSK    (~(((1U << PDS_CR_PDS_MISC_GATE_CLK_LEN) - 1) << PDS_CR_PDS_MISC_GATE_CLK_POS))\n#define PDS_CR_PDS_MISC_ANA_PWR_OFF      PDS_CR_PDS_MISC_ANA_PWR_OFF\n#define PDS_CR_PDS_MISC_ANA_PWR_OFF_POS  (30U)\n#define PDS_CR_PDS_MISC_ANA_PWR_OFF_LEN  (1U)\n#define PDS_CR_PDS_MISC_ANA_PWR_OFF_MSK  (((1U << PDS_CR_PDS_MISC_ANA_PWR_OFF_LEN) - 1) << PDS_CR_PDS_MISC_ANA_PWR_OFF_POS)\n#define PDS_CR_PDS_MISC_ANA_PWR_OFF_UMSK (~(((1U << PDS_CR_PDS_MISC_ANA_PWR_OFF_LEN) - 1) << PDS_CR_PDS_MISC_ANA_PWR_OFF_POS))\n#define PDS_CR_PDS_MISC_DIG_PWR_OFF      PDS_CR_PDS_MISC_DIG_PWR_OFF\n#define PDS_CR_PDS_MISC_DIG_PWR_OFF_POS  (31U)\n#define PDS_CR_PDS_MISC_DIG_PWR_OFF_LEN  (1U)\n#define PDS_CR_PDS_MISC_DIG_PWR_OFF_MSK  (((1U << PDS_CR_PDS_MISC_DIG_PWR_OFF_LEN) - 1) << PDS_CR_PDS_MISC_DIG_PWR_OFF_POS)\n#define PDS_CR_PDS_MISC_DIG_PWR_OFF_UMSK (~(((1U << PDS_CR_PDS_MISC_DIG_PWR_OFF_LEN) - 1) << PDS_CR_PDS_MISC_DIG_PWR_OFF_POS))\n\n/* 0x1C : pds_stat */\n#define PDS_STAT_OFFSET           (0x1C)\n#define PDS_RO_PDS_STATE          PDS_RO_PDS_STATE\n#define PDS_RO_PDS_STATE_POS      (0U)\n#define PDS_RO_PDS_STATE_LEN      (4U)\n#define PDS_RO_PDS_STATE_MSK      (((1U << PDS_RO_PDS_STATE_LEN) - 1) << PDS_RO_PDS_STATE_POS)\n#define PDS_RO_PDS_STATE_UMSK     (~(((1U << PDS_RO_PDS_STATE_LEN) - 1) << PDS_RO_PDS_STATE_POS))\n#define PDS_RO_PDS_RF_STATE       PDS_RO_PDS_RF_STATE\n#define PDS_RO_PDS_RF_STATE_POS   (8U)\n#define PDS_RO_PDS_RF_STATE_LEN   (4U)\n#define PDS_RO_PDS_RF_STATE_MSK   (((1U << PDS_RO_PDS_RF_STATE_LEN) - 1) << PDS_RO_PDS_RF_STATE_POS)\n#define PDS_RO_PDS_RF_STATE_UMSK  (~(((1U << PDS_RO_PDS_RF_STATE_LEN) - 1) << PDS_RO_PDS_RF_STATE_POS))\n#define PDS_RO_PDS_PLL_STATE      PDS_RO_PDS_PLL_STATE\n#define PDS_RO_PDS_PLL_STATE_POS  (16U)\n#define PDS_RO_PDS_PLL_STATE_LEN  (2U)\n#define PDS_RO_PDS_PLL_STATE_MSK  (((1U << PDS_RO_PDS_PLL_STATE_LEN) - 1) << PDS_RO_PDS_PLL_STATE_POS)\n#define PDS_RO_PDS_PLL_STATE_UMSK (~(((1U << PDS_RO_PDS_PLL_STATE_LEN) - 1) << PDS_RO_PDS_PLL_STATE_POS))\n\n/* 0x20 : pds_ram1 */\n#define PDS_RAM1_OFFSET           (0x20)\n#define PDS_CR_PDS_RAM_RET1N      PDS_CR_PDS_RAM_RET1N\n#define PDS_CR_PDS_RAM_RET1N_POS  (0U)\n#define PDS_CR_PDS_RAM_RET1N_LEN  (4U)\n#define PDS_CR_PDS_RAM_RET1N_MSK  (((1U << PDS_CR_PDS_RAM_RET1N_LEN) - 1) << PDS_CR_PDS_RAM_RET1N_POS)\n#define PDS_CR_PDS_RAM_RET1N_UMSK (~(((1U << PDS_CR_PDS_RAM_RET1N_LEN) - 1) << PDS_CR_PDS_RAM_RET1N_POS))\n#define PDS_CR_PDS_RAM_RET2N      PDS_CR_PDS_RAM_RET2N\n#define PDS_CR_PDS_RAM_RET2N_POS  (4U)\n#define PDS_CR_PDS_RAM_RET2N_LEN  (4U)\n#define PDS_CR_PDS_RAM_RET2N_MSK  (((1U << PDS_CR_PDS_RAM_RET2N_LEN) - 1) << PDS_CR_PDS_RAM_RET2N_POS)\n#define PDS_CR_PDS_RAM_RET2N_UMSK (~(((1U << PDS_CR_PDS_RAM_RET2N_LEN) - 1) << PDS_CR_PDS_RAM_RET2N_POS))\n#define PDS_CR_PDS_RAM_PGEN       PDS_CR_PDS_RAM_PGEN\n#define PDS_CR_PDS_RAM_PGEN_POS   (8U)\n#define PDS_CR_PDS_RAM_PGEN_LEN   (4U)\n#define PDS_CR_PDS_RAM_PGEN_MSK   (((1U << PDS_CR_PDS_RAM_PGEN_LEN) - 1) << PDS_CR_PDS_RAM_PGEN_POS)\n#define PDS_CR_PDS_RAM_PGEN_UMSK  (~(((1U << PDS_CR_PDS_RAM_PGEN_LEN) - 1) << PDS_CR_PDS_RAM_PGEN_POS))\n\n/* 0x30 : pds_gpio_set_pu_pd */\n#define PDS_GPIO_SET_PU_PD_OFFSET     (0x30)\n#define PDS_CR_PDS_GPIO_22_17_PD      PDS_CR_PDS_GPIO_22_17_PD\n#define PDS_CR_PDS_GPIO_22_17_PD_POS  (0U)\n#define PDS_CR_PDS_GPIO_22_17_PD_LEN  (6U)\n#define PDS_CR_PDS_GPIO_22_17_PD_MSK  (((1U << PDS_CR_PDS_GPIO_22_17_PD_LEN) - 1) << PDS_CR_PDS_GPIO_22_17_PD_POS)\n#define PDS_CR_PDS_GPIO_22_17_PD_UMSK (~(((1U << PDS_CR_PDS_GPIO_22_17_PD_LEN) - 1) << PDS_CR_PDS_GPIO_22_17_PD_POS))\n#define PDS_CR_PDS_GPIO_22_17_PU      PDS_CR_PDS_GPIO_22_17_PU\n#define PDS_CR_PDS_GPIO_22_17_PU_POS  (8U)\n#define PDS_CR_PDS_GPIO_22_17_PU_LEN  (6U)\n#define PDS_CR_PDS_GPIO_22_17_PU_MSK  (((1U << PDS_CR_PDS_GPIO_22_17_PU_LEN) - 1) << PDS_CR_PDS_GPIO_22_17_PU_POS)\n#define PDS_CR_PDS_GPIO_22_17_PU_UMSK (~(((1U << PDS_CR_PDS_GPIO_22_17_PU_LEN) - 1) << PDS_CR_PDS_GPIO_22_17_PU_POS))\n#define PDS_CR_PDS_GPIO_28_23_PD      PDS_CR_PDS_GPIO_28_23_PD\n#define PDS_CR_PDS_GPIO_28_23_PD_POS  (16U)\n#define PDS_CR_PDS_GPIO_28_23_PD_LEN  (6U)\n#define PDS_CR_PDS_GPIO_28_23_PD_MSK  (((1U << PDS_CR_PDS_GPIO_28_23_PD_LEN) - 1) << PDS_CR_PDS_GPIO_28_23_PD_POS)\n#define PDS_CR_PDS_GPIO_28_23_PD_UMSK (~(((1U << PDS_CR_PDS_GPIO_28_23_PD_LEN) - 1) << PDS_CR_PDS_GPIO_28_23_PD_POS))\n#define PDS_CR_PDS_GPIO_28_23_PU      PDS_CR_PDS_GPIO_28_23_PU\n#define PDS_CR_PDS_GPIO_28_23_PU_POS  (24U)\n#define PDS_CR_PDS_GPIO_28_23_PU_LEN  (6U)\n#define PDS_CR_PDS_GPIO_28_23_PU_MSK  (((1U << PDS_CR_PDS_GPIO_28_23_PU_LEN) - 1) << PDS_CR_PDS_GPIO_28_23_PU_POS)\n#define PDS_CR_PDS_GPIO_28_23_PU_UMSK (~(((1U << PDS_CR_PDS_GPIO_28_23_PU_LEN) - 1) << PDS_CR_PDS_GPIO_28_23_PU_POS))\n\n/* 0x40 : pds_gpio_int */\n#define PDS_GPIO_INT_OFFSET      (0x40)\n#define PDS_GPIO_INT_MASK        PDS_GPIO_INT_MASK\n#define PDS_GPIO_INT_MASK_POS    (0U)\n#define PDS_GPIO_INT_MASK_LEN    (1U)\n#define PDS_GPIO_INT_MASK_MSK    (((1U << PDS_GPIO_INT_MASK_LEN) - 1) << PDS_GPIO_INT_MASK_POS)\n#define PDS_GPIO_INT_MASK_UMSK   (~(((1U << PDS_GPIO_INT_MASK_LEN) - 1) << PDS_GPIO_INT_MASK_POS))\n#define PDS_GPIO_INT_STAT        PDS_GPIO_INT_STAT\n#define PDS_GPIO_INT_STAT_POS    (1U)\n#define PDS_GPIO_INT_STAT_LEN    (1U)\n#define PDS_GPIO_INT_STAT_MSK    (((1U << PDS_GPIO_INT_STAT_LEN) - 1) << PDS_GPIO_INT_STAT_POS)\n#define PDS_GPIO_INT_STAT_UMSK   (~(((1U << PDS_GPIO_INT_STAT_LEN) - 1) << PDS_GPIO_INT_STAT_POS))\n#define PDS_GPIO_INT_CLR         PDS_GPIO_INT_CLR\n#define PDS_GPIO_INT_CLR_POS     (2U)\n#define PDS_GPIO_INT_CLR_LEN     (1U)\n#define PDS_GPIO_INT_CLR_MSK     (((1U << PDS_GPIO_INT_CLR_LEN) - 1) << PDS_GPIO_INT_CLR_POS)\n#define PDS_GPIO_INT_CLR_UMSK    (~(((1U << PDS_GPIO_INT_CLR_LEN) - 1) << PDS_GPIO_INT_CLR_POS))\n#define PDS_GPIO_INT_MODE        PDS_GPIO_INT_MODE\n#define PDS_GPIO_INT_MODE_POS    (4U)\n#define PDS_GPIO_INT_MODE_LEN    (3U)\n#define PDS_GPIO_INT_MODE_MSK    (((1U << PDS_GPIO_INT_MODE_LEN) - 1) << PDS_GPIO_INT_MODE_POS)\n#define PDS_GPIO_INT_MODE_UMSK   (~(((1U << PDS_GPIO_INT_MODE_LEN) - 1) << PDS_GPIO_INT_MODE_POS))\n#define PDS_GPIO_INT_SELECT      PDS_GPIO_INT_SELECT\n#define PDS_GPIO_INT_SELECT_POS  (8U)\n#define PDS_GPIO_INT_SELECT_LEN  (3U)\n#define PDS_GPIO_INT_SELECT_MSK  (((1U << PDS_GPIO_INT_SELECT_LEN) - 1) << PDS_GPIO_INT_SELECT_POS)\n#define PDS_GPIO_INT_SELECT_UMSK (~(((1U << PDS_GPIO_INT_SELECT_LEN) - 1) << PDS_GPIO_INT_SELECT_POS))\n\n/* 0x300 : rc32m_ctrl0 */\n#define PDS_RC32M_CTRL0_OFFSET         (0x300)\n#define PDS_RC32M_CAL_DONE             PDS_RC32M_CAL_DONE\n#define PDS_RC32M_CAL_DONE_POS         (0U)\n#define PDS_RC32M_CAL_DONE_LEN         (1U)\n#define PDS_RC32M_CAL_DONE_MSK         (((1U << PDS_RC32M_CAL_DONE_LEN) - 1) << PDS_RC32M_CAL_DONE_POS)\n#define PDS_RC32M_CAL_DONE_UMSK        (~(((1U << PDS_RC32M_CAL_DONE_LEN) - 1) << PDS_RC32M_CAL_DONE_POS))\n#define PDS_RC32M_RDY                  PDS_RC32M_RDY\n#define PDS_RC32M_RDY_POS              (1U)\n#define PDS_RC32M_RDY_LEN              (1U)\n#define PDS_RC32M_RDY_MSK              (((1U << PDS_RC32M_RDY_LEN) - 1) << PDS_RC32M_RDY_POS)\n#define PDS_RC32M_RDY_UMSK             (~(((1U << PDS_RC32M_RDY_LEN) - 1) << PDS_RC32M_RDY_POS))\n#define PDS_RC32M_CAL_INPROGRESS       PDS_RC32M_CAL_INPROGRESS\n#define PDS_RC32M_CAL_INPROGRESS_POS   (2U)\n#define PDS_RC32M_CAL_INPROGRESS_LEN   (1U)\n#define PDS_RC32M_CAL_INPROGRESS_MSK   (((1U << PDS_RC32M_CAL_INPROGRESS_LEN) - 1) << PDS_RC32M_CAL_INPROGRESS_POS)\n#define PDS_RC32M_CAL_INPROGRESS_UMSK  (~(((1U << PDS_RC32M_CAL_INPROGRESS_LEN) - 1) << PDS_RC32M_CAL_INPROGRESS_POS))\n#define PDS_RC32M_CAL_DIV              PDS_RC32M_CAL_DIV\n#define PDS_RC32M_CAL_DIV_POS          (3U)\n#define PDS_RC32M_CAL_DIV_LEN          (2U)\n#define PDS_RC32M_CAL_DIV_MSK          (((1U << PDS_RC32M_CAL_DIV_LEN) - 1) << PDS_RC32M_CAL_DIV_POS)\n#define PDS_RC32M_CAL_DIV_UMSK         (~(((1U << PDS_RC32M_CAL_DIV_LEN) - 1) << PDS_RC32M_CAL_DIV_POS))\n#define PDS_RC32M_CAL_PRECHARGE        PDS_RC32M_CAL_PRECHARGE\n#define PDS_RC32M_CAL_PRECHARGE_POS    (5U)\n#define PDS_RC32M_CAL_PRECHARGE_LEN    (1U)\n#define PDS_RC32M_CAL_PRECHARGE_MSK    (((1U << PDS_RC32M_CAL_PRECHARGE_LEN) - 1) << PDS_RC32M_CAL_PRECHARGE_POS)\n#define PDS_RC32M_CAL_PRECHARGE_UMSK   (~(((1U << PDS_RC32M_CAL_PRECHARGE_LEN) - 1) << PDS_RC32M_CAL_PRECHARGE_POS))\n#define PDS_RC32M_DIG_CODE_FR_CAL      PDS_RC32M_DIG_CODE_FR_CAL\n#define PDS_RC32M_DIG_CODE_FR_CAL_POS  (6U)\n#define PDS_RC32M_DIG_CODE_FR_CAL_LEN  (8U)\n#define PDS_RC32M_DIG_CODE_FR_CAL_MSK  (((1U << PDS_RC32M_DIG_CODE_FR_CAL_LEN) - 1) << PDS_RC32M_DIG_CODE_FR_CAL_POS)\n#define PDS_RC32M_DIG_CODE_FR_CAL_UMSK (~(((1U << PDS_RC32M_DIG_CODE_FR_CAL_LEN) - 1) << PDS_RC32M_DIG_CODE_FR_CAL_POS))\n#define PDS_RC32M_ALLOW_CAL            PDS_RC32M_ALLOW_CAL\n#define PDS_RC32M_ALLOW_CAL_POS        (17U)\n#define PDS_RC32M_ALLOW_CAL_LEN        (1U)\n#define PDS_RC32M_ALLOW_CAL_MSK        (((1U << PDS_RC32M_ALLOW_CAL_LEN) - 1) << PDS_RC32M_ALLOW_CAL_POS)\n#define PDS_RC32M_ALLOW_CAL_UMSK       (~(((1U << PDS_RC32M_ALLOW_CAL_LEN) - 1) << PDS_RC32M_ALLOW_CAL_POS))\n#define PDS_RC32M_REFCLK_HALF          PDS_RC32M_REFCLK_HALF\n#define PDS_RC32M_REFCLK_HALF_POS      (18U)\n#define PDS_RC32M_REFCLK_HALF_LEN      (1U)\n#define PDS_RC32M_REFCLK_HALF_MSK      (((1U << PDS_RC32M_REFCLK_HALF_LEN) - 1) << PDS_RC32M_REFCLK_HALF_POS)\n#define PDS_RC32M_REFCLK_HALF_UMSK     (~(((1U << PDS_RC32M_REFCLK_HALF_LEN) - 1) << PDS_RC32M_REFCLK_HALF_POS))\n#define PDS_RC32M_EXT_CODE_EN          PDS_RC32M_EXT_CODE_EN\n#define PDS_RC32M_EXT_CODE_EN_POS      (19U)\n#define PDS_RC32M_EXT_CODE_EN_LEN      (1U)\n#define PDS_RC32M_EXT_CODE_EN_MSK      (((1U << PDS_RC32M_EXT_CODE_EN_LEN) - 1) << PDS_RC32M_EXT_CODE_EN_POS)\n#define PDS_RC32M_EXT_CODE_EN_UMSK     (~(((1U << PDS_RC32M_EXT_CODE_EN_LEN) - 1) << PDS_RC32M_EXT_CODE_EN_POS))\n#define PDS_RC32M_CAL_EN               PDS_RC32M_CAL_EN\n#define PDS_RC32M_CAL_EN_POS           (20U)\n#define PDS_RC32M_CAL_EN_LEN           (1U)\n#define PDS_RC32M_CAL_EN_MSK           (((1U << PDS_RC32M_CAL_EN_LEN) - 1) << PDS_RC32M_CAL_EN_POS)\n#define PDS_RC32M_CAL_EN_UMSK          (~(((1U << PDS_RC32M_CAL_EN_LEN) - 1) << PDS_RC32M_CAL_EN_POS))\n#define PDS_RC32M_PD                   PDS_RC32M_PD\n#define PDS_RC32M_PD_POS               (21U)\n#define PDS_RC32M_PD_LEN               (1U)\n#define PDS_RC32M_PD_MSK               (((1U << PDS_RC32M_PD_LEN) - 1) << PDS_RC32M_PD_POS)\n#define PDS_RC32M_PD_UMSK              (~(((1U << PDS_RC32M_PD_LEN) - 1) << PDS_RC32M_PD_POS))\n#define PDS_RC32M_CODE_FR_EXT          PDS_RC32M_CODE_FR_EXT\n#define PDS_RC32M_CODE_FR_EXT_POS      (22U)\n#define PDS_RC32M_CODE_FR_EXT_LEN      (8U)\n#define PDS_RC32M_CODE_FR_EXT_MSK      (((1U << PDS_RC32M_CODE_FR_EXT_LEN) - 1) << PDS_RC32M_CODE_FR_EXT_POS)\n#define PDS_RC32M_CODE_FR_EXT_UMSK     (~(((1U << PDS_RC32M_CODE_FR_EXT_LEN) - 1) << PDS_RC32M_CODE_FR_EXT_POS))\n\n/* 0x304 : rc32m_ctrl1 */\n#define PDS_RC32M_CTRL1_OFFSET      (0x304)\n#define PDS_RC32M_TEST_EN           PDS_RC32M_TEST_EN\n#define PDS_RC32M_TEST_EN_POS       (0U)\n#define PDS_RC32M_TEST_EN_LEN       (1U)\n#define PDS_RC32M_TEST_EN_MSK       (((1U << PDS_RC32M_TEST_EN_LEN) - 1) << PDS_RC32M_TEST_EN_POS)\n#define PDS_RC32M_TEST_EN_UMSK      (~(((1U << PDS_RC32M_TEST_EN_LEN) - 1) << PDS_RC32M_TEST_EN_POS))\n#define PDS_RC32M_SOFT_RST          PDS_RC32M_SOFT_RST\n#define PDS_RC32M_SOFT_RST_POS      (1U)\n#define PDS_RC32M_SOFT_RST_LEN      (1U)\n#define PDS_RC32M_SOFT_RST_MSK      (((1U << PDS_RC32M_SOFT_RST_LEN) - 1) << PDS_RC32M_SOFT_RST_POS)\n#define PDS_RC32M_SOFT_RST_UMSK     (~(((1U << PDS_RC32M_SOFT_RST_LEN) - 1) << PDS_RC32M_SOFT_RST_POS))\n#define PDS_RC32M_CLK_SOFT_RST      PDS_RC32M_CLK_SOFT_RST\n#define PDS_RC32M_CLK_SOFT_RST_POS  (2U)\n#define PDS_RC32M_CLK_SOFT_RST_LEN  (1U)\n#define PDS_RC32M_CLK_SOFT_RST_MSK  (((1U << PDS_RC32M_CLK_SOFT_RST_LEN) - 1) << PDS_RC32M_CLK_SOFT_RST_POS)\n#define PDS_RC32M_CLK_SOFT_RST_UMSK (~(((1U << PDS_RC32M_CLK_SOFT_RST_LEN) - 1) << PDS_RC32M_CLK_SOFT_RST_POS))\n#define PDS_RC32M_CLK_INV           PDS_RC32M_CLK_INV\n#define PDS_RC32M_CLK_INV_POS       (3U)\n#define PDS_RC32M_CLK_INV_LEN       (1U)\n#define PDS_RC32M_CLK_INV_MSK       (((1U << PDS_RC32M_CLK_INV_LEN) - 1) << PDS_RC32M_CLK_INV_POS)\n#define PDS_RC32M_CLK_INV_UMSK      (~(((1U << PDS_RC32M_CLK_INV_LEN) - 1) << PDS_RC32M_CLK_INV_POS))\n#define PDS_RC32M_CLK_FORCE_ON      PDS_RC32M_CLK_FORCE_ON\n#define PDS_RC32M_CLK_FORCE_ON_POS  (4U)\n#define PDS_RC32M_CLK_FORCE_ON_LEN  (1U)\n#define PDS_RC32M_CLK_FORCE_ON_MSK  (((1U << PDS_RC32M_CLK_FORCE_ON_LEN) - 1) << PDS_RC32M_CLK_FORCE_ON_POS)\n#define PDS_RC32M_CLK_FORCE_ON_UMSK (~(((1U << PDS_RC32M_CLK_FORCE_ON_LEN) - 1) << PDS_RC32M_CLK_FORCE_ON_POS))\n#define PDS_RC32M_RESERVED          PDS_RC32M_RESERVED\n#define PDS_RC32M_RESERVED_POS      (24U)\n#define PDS_RC32M_RESERVED_LEN      (8U)\n#define PDS_RC32M_RESERVED_MSK      (((1U << PDS_RC32M_RESERVED_LEN) - 1) << PDS_RC32M_RESERVED_POS)\n#define PDS_RC32M_RESERVED_UMSK     (~(((1U << PDS_RC32M_RESERVED_LEN) - 1) << PDS_RC32M_RESERVED_POS))\n\n/* 0x400 : pu_rst_clkpll */\n#define PDS_PU_RST_CLKPLL_OFFSET      (0x400)\n#define PDS_CLKPLL_SDM_RESET          PDS_CLKPLL_SDM_RESET\n#define PDS_CLKPLL_SDM_RESET_POS      (0U)\n#define PDS_CLKPLL_SDM_RESET_LEN      (1U)\n#define PDS_CLKPLL_SDM_RESET_MSK      (((1U << PDS_CLKPLL_SDM_RESET_LEN) - 1) << PDS_CLKPLL_SDM_RESET_POS)\n#define PDS_CLKPLL_SDM_RESET_UMSK     (~(((1U << PDS_CLKPLL_SDM_RESET_LEN) - 1) << PDS_CLKPLL_SDM_RESET_POS))\n#define PDS_CLKPLL_RESET_POSTDIV      PDS_CLKPLL_RESET_POSTDIV\n#define PDS_CLKPLL_RESET_POSTDIV_POS  (1U)\n#define PDS_CLKPLL_RESET_POSTDIV_LEN  (1U)\n#define PDS_CLKPLL_RESET_POSTDIV_MSK  (((1U << PDS_CLKPLL_RESET_POSTDIV_LEN) - 1) << PDS_CLKPLL_RESET_POSTDIV_POS)\n#define PDS_CLKPLL_RESET_POSTDIV_UMSK (~(((1U << PDS_CLKPLL_RESET_POSTDIV_LEN) - 1) << PDS_CLKPLL_RESET_POSTDIV_POS))\n#define PDS_CLKPLL_RESET_FBDV         PDS_CLKPLL_RESET_FBDV\n#define PDS_CLKPLL_RESET_FBDV_POS     (2U)\n#define PDS_CLKPLL_RESET_FBDV_LEN     (1U)\n#define PDS_CLKPLL_RESET_FBDV_MSK     (((1U << PDS_CLKPLL_RESET_FBDV_LEN) - 1) << PDS_CLKPLL_RESET_FBDV_POS)\n#define PDS_CLKPLL_RESET_FBDV_UMSK    (~(((1U << PDS_CLKPLL_RESET_FBDV_LEN) - 1) << PDS_CLKPLL_RESET_FBDV_POS))\n#define PDS_CLKPLL_RESET_REFDIV       PDS_CLKPLL_RESET_REFDIV\n#define PDS_CLKPLL_RESET_REFDIV_POS   (3U)\n#define PDS_CLKPLL_RESET_REFDIV_LEN   (1U)\n#define PDS_CLKPLL_RESET_REFDIV_MSK   (((1U << PDS_CLKPLL_RESET_REFDIV_LEN) - 1) << PDS_CLKPLL_RESET_REFDIV_POS)\n#define PDS_CLKPLL_RESET_REFDIV_UMSK  (~(((1U << PDS_CLKPLL_RESET_REFDIV_LEN) - 1) << PDS_CLKPLL_RESET_REFDIV_POS))\n#define PDS_CLKPLL_PU_POSTDIV         PDS_CLKPLL_PU_POSTDIV\n#define PDS_CLKPLL_PU_POSTDIV_POS     (4U)\n#define PDS_CLKPLL_PU_POSTDIV_LEN     (1U)\n#define PDS_CLKPLL_PU_POSTDIV_MSK     (((1U << PDS_CLKPLL_PU_POSTDIV_LEN) - 1) << PDS_CLKPLL_PU_POSTDIV_POS)\n#define PDS_CLKPLL_PU_POSTDIV_UMSK    (~(((1U << PDS_CLKPLL_PU_POSTDIV_LEN) - 1) << PDS_CLKPLL_PU_POSTDIV_POS))\n#define PDS_CLKPLL_PU_FBDV            PDS_CLKPLL_PU_FBDV\n#define PDS_CLKPLL_PU_FBDV_POS        (5U)\n#define PDS_CLKPLL_PU_FBDV_LEN        (1U)\n#define PDS_CLKPLL_PU_FBDV_MSK        (((1U << PDS_CLKPLL_PU_FBDV_LEN) - 1) << PDS_CLKPLL_PU_FBDV_POS)\n#define PDS_CLKPLL_PU_FBDV_UMSK       (~(((1U << PDS_CLKPLL_PU_FBDV_LEN) - 1) << PDS_CLKPLL_PU_FBDV_POS))\n#define PDS_CLKPLL_PU_CLAMP_OP        PDS_CLKPLL_PU_CLAMP_OP\n#define PDS_CLKPLL_PU_CLAMP_OP_POS    (6U)\n#define PDS_CLKPLL_PU_CLAMP_OP_LEN    (1U)\n#define PDS_CLKPLL_PU_CLAMP_OP_MSK    (((1U << PDS_CLKPLL_PU_CLAMP_OP_LEN) - 1) << PDS_CLKPLL_PU_CLAMP_OP_POS)\n#define PDS_CLKPLL_PU_CLAMP_OP_UMSK   (~(((1U << PDS_CLKPLL_PU_CLAMP_OP_LEN) - 1) << PDS_CLKPLL_PU_CLAMP_OP_POS))\n#define PDS_CLKPLL_PU_PFD             PDS_CLKPLL_PU_PFD\n#define PDS_CLKPLL_PU_PFD_POS         (7U)\n#define PDS_CLKPLL_PU_PFD_LEN         (1U)\n#define PDS_CLKPLL_PU_PFD_MSK         (((1U << PDS_CLKPLL_PU_PFD_LEN) - 1) << PDS_CLKPLL_PU_PFD_POS)\n#define PDS_CLKPLL_PU_PFD_UMSK        (~(((1U << PDS_CLKPLL_PU_PFD_LEN) - 1) << PDS_CLKPLL_PU_PFD_POS))\n#define PDS_CLKPLL_PU_CP              PDS_CLKPLL_PU_CP\n#define PDS_CLKPLL_PU_CP_POS          (8U)\n#define PDS_CLKPLL_PU_CP_LEN          (1U)\n#define PDS_CLKPLL_PU_CP_MSK          (((1U << PDS_CLKPLL_PU_CP_LEN) - 1) << PDS_CLKPLL_PU_CP_POS)\n#define PDS_CLKPLL_PU_CP_UMSK         (~(((1U << PDS_CLKPLL_PU_CP_LEN) - 1) << PDS_CLKPLL_PU_CP_POS))\n#define PDS_PU_CLKPLL_SFREG           PDS_PU_CLKPLL_SFREG\n#define PDS_PU_CLKPLL_SFREG_POS       (9U)\n#define PDS_PU_CLKPLL_SFREG_LEN       (1U)\n#define PDS_PU_CLKPLL_SFREG_MSK       (((1U << PDS_PU_CLKPLL_SFREG_LEN) - 1) << PDS_PU_CLKPLL_SFREG_POS)\n#define PDS_PU_CLKPLL_SFREG_UMSK      (~(((1U << PDS_PU_CLKPLL_SFREG_LEN) - 1) << PDS_PU_CLKPLL_SFREG_POS))\n#define PDS_PU_CLKPLL                 PDS_PU_CLKPLL\n#define PDS_PU_CLKPLL_POS             (10U)\n#define PDS_PU_CLKPLL_LEN             (1U)\n#define PDS_PU_CLKPLL_MSK             (((1U << PDS_PU_CLKPLL_LEN) - 1) << PDS_PU_CLKPLL_POS)\n#define PDS_PU_CLKPLL_UMSK            (~(((1U << PDS_PU_CLKPLL_LEN) - 1) << PDS_PU_CLKPLL_POS))\n\n/* 0x404 : clkpll_top_ctrl */\n#define PDS_CLKPLL_TOP_CTRL_OFFSET     (0x404)\n#define PDS_CLKPLL_POSTDIV             PDS_CLKPLL_POSTDIV\n#define PDS_CLKPLL_POSTDIV_POS         (0U)\n#define PDS_CLKPLL_POSTDIV_LEN         (7U)\n#define PDS_CLKPLL_POSTDIV_MSK         (((1U << PDS_CLKPLL_POSTDIV_LEN) - 1) << PDS_CLKPLL_POSTDIV_POS)\n#define PDS_CLKPLL_POSTDIV_UMSK        (~(((1U << PDS_CLKPLL_POSTDIV_LEN) - 1) << PDS_CLKPLL_POSTDIV_POS))\n#define PDS_CLKPLL_REFDIV_RATIO        PDS_CLKPLL_REFDIV_RATIO\n#define PDS_CLKPLL_REFDIV_RATIO_POS    (8U)\n#define PDS_CLKPLL_REFDIV_RATIO_LEN    (4U)\n#define PDS_CLKPLL_REFDIV_RATIO_MSK    (((1U << PDS_CLKPLL_REFDIV_RATIO_LEN) - 1) << PDS_CLKPLL_REFDIV_RATIO_POS)\n#define PDS_CLKPLL_REFDIV_RATIO_UMSK   (~(((1U << PDS_CLKPLL_REFDIV_RATIO_LEN) - 1) << PDS_CLKPLL_REFDIV_RATIO_POS))\n#define PDS_CLKPLL_XTAL_RC32M_SEL      PDS_CLKPLL_XTAL_RC32M_SEL\n#define PDS_CLKPLL_XTAL_RC32M_SEL_POS  (12U)\n#define PDS_CLKPLL_XTAL_RC32M_SEL_LEN  (1U)\n#define PDS_CLKPLL_XTAL_RC32M_SEL_MSK  (((1U << PDS_CLKPLL_XTAL_RC32M_SEL_LEN) - 1) << PDS_CLKPLL_XTAL_RC32M_SEL_POS)\n#define PDS_CLKPLL_XTAL_RC32M_SEL_UMSK (~(((1U << PDS_CLKPLL_XTAL_RC32M_SEL_LEN) - 1) << PDS_CLKPLL_XTAL_RC32M_SEL_POS))\n#define PDS_CLKPLL_REFCLK_SEL          PDS_CLKPLL_REFCLK_SEL\n#define PDS_CLKPLL_REFCLK_SEL_POS      (16U)\n#define PDS_CLKPLL_REFCLK_SEL_LEN      (1U)\n#define PDS_CLKPLL_REFCLK_SEL_MSK      (((1U << PDS_CLKPLL_REFCLK_SEL_LEN) - 1) << PDS_CLKPLL_REFCLK_SEL_POS)\n#define PDS_CLKPLL_REFCLK_SEL_UMSK     (~(((1U << PDS_CLKPLL_REFCLK_SEL_LEN) - 1) << PDS_CLKPLL_REFCLK_SEL_POS))\n#define PDS_CLKPLL_VG11_SEL            PDS_CLKPLL_VG11_SEL\n#define PDS_CLKPLL_VG11_SEL_POS        (20U)\n#define PDS_CLKPLL_VG11_SEL_LEN        (2U)\n#define PDS_CLKPLL_VG11_SEL_MSK        (((1U << PDS_CLKPLL_VG11_SEL_LEN) - 1) << PDS_CLKPLL_VG11_SEL_POS)\n#define PDS_CLKPLL_VG11_SEL_UMSK       (~(((1U << PDS_CLKPLL_VG11_SEL_LEN) - 1) << PDS_CLKPLL_VG11_SEL_POS))\n#define PDS_CLKPLL_RESV                PDS_CLKPLL_RESV\n#define PDS_CLKPLL_RESV_POS            (24U)\n#define PDS_CLKPLL_RESV_LEN            (2U)\n#define PDS_CLKPLL_RESV_MSK            (((1U << PDS_CLKPLL_RESV_LEN) - 1) << PDS_CLKPLL_RESV_POS)\n#define PDS_CLKPLL_RESV_UMSK           (~(((1U << PDS_CLKPLL_RESV_LEN) - 1) << PDS_CLKPLL_RESV_POS))\n\n/* 0x408 : clkpll_cp */\n#define PDS_CLKPLL_CP_OFFSET          (0x408)\n#define PDS_CLKPLL_SEL_CP_BIAS        PDS_CLKPLL_SEL_CP_BIAS\n#define PDS_CLKPLL_SEL_CP_BIAS_POS    (0U)\n#define PDS_CLKPLL_SEL_CP_BIAS_LEN    (1U)\n#define PDS_CLKPLL_SEL_CP_BIAS_MSK    (((1U << PDS_CLKPLL_SEL_CP_BIAS_LEN) - 1) << PDS_CLKPLL_SEL_CP_BIAS_POS)\n#define PDS_CLKPLL_SEL_CP_BIAS_UMSK   (~(((1U << PDS_CLKPLL_SEL_CP_BIAS_LEN) - 1) << PDS_CLKPLL_SEL_CP_BIAS_POS))\n#define PDS_CLKPLL_ICP_5U             PDS_CLKPLL_ICP_5U\n#define PDS_CLKPLL_ICP_5U_POS         (4U)\n#define PDS_CLKPLL_ICP_5U_LEN         (2U)\n#define PDS_CLKPLL_ICP_5U_MSK         (((1U << PDS_CLKPLL_ICP_5U_LEN) - 1) << PDS_CLKPLL_ICP_5U_POS)\n#define PDS_CLKPLL_ICP_5U_UMSK        (~(((1U << PDS_CLKPLL_ICP_5U_LEN) - 1) << PDS_CLKPLL_ICP_5U_POS))\n#define PDS_CLKPLL_ICP_1U             PDS_CLKPLL_ICP_1U\n#define PDS_CLKPLL_ICP_1U_POS         (6U)\n#define PDS_CLKPLL_ICP_1U_LEN         (2U)\n#define PDS_CLKPLL_ICP_1U_MSK         (((1U << PDS_CLKPLL_ICP_1U_LEN) - 1) << PDS_CLKPLL_ICP_1U_POS)\n#define PDS_CLKPLL_ICP_1U_UMSK        (~(((1U << PDS_CLKPLL_ICP_1U_LEN) - 1) << PDS_CLKPLL_ICP_1U_POS))\n#define PDS_CLKPLL_INT_FRAC_SW        PDS_CLKPLL_INT_FRAC_SW\n#define PDS_CLKPLL_INT_FRAC_SW_POS    (8U)\n#define PDS_CLKPLL_INT_FRAC_SW_LEN    (1U)\n#define PDS_CLKPLL_INT_FRAC_SW_MSK    (((1U << PDS_CLKPLL_INT_FRAC_SW_LEN) - 1) << PDS_CLKPLL_INT_FRAC_SW_POS)\n#define PDS_CLKPLL_INT_FRAC_SW_UMSK   (~(((1U << PDS_CLKPLL_INT_FRAC_SW_LEN) - 1) << PDS_CLKPLL_INT_FRAC_SW_POS))\n#define PDS_CLKPLL_CP_STARTUP_EN      PDS_CLKPLL_CP_STARTUP_EN\n#define PDS_CLKPLL_CP_STARTUP_EN_POS  (9U)\n#define PDS_CLKPLL_CP_STARTUP_EN_LEN  (1U)\n#define PDS_CLKPLL_CP_STARTUP_EN_MSK  (((1U << PDS_CLKPLL_CP_STARTUP_EN_LEN) - 1) << PDS_CLKPLL_CP_STARTUP_EN_POS)\n#define PDS_CLKPLL_CP_STARTUP_EN_UMSK (~(((1U << PDS_CLKPLL_CP_STARTUP_EN_LEN) - 1) << PDS_CLKPLL_CP_STARTUP_EN_POS))\n#define PDS_CLKPLL_CP_OPAMP_EN        PDS_CLKPLL_CP_OPAMP_EN\n#define PDS_CLKPLL_CP_OPAMP_EN_POS    (10U)\n#define PDS_CLKPLL_CP_OPAMP_EN_LEN    (1U)\n#define PDS_CLKPLL_CP_OPAMP_EN_MSK    (((1U << PDS_CLKPLL_CP_OPAMP_EN_LEN) - 1) << PDS_CLKPLL_CP_OPAMP_EN_POS)\n#define PDS_CLKPLL_CP_OPAMP_EN_UMSK   (~(((1U << PDS_CLKPLL_CP_OPAMP_EN_LEN) - 1) << PDS_CLKPLL_CP_OPAMP_EN_POS))\n\n/* 0x40C : clkpll_rz */\n#define PDS_CLKPLL_RZ_OFFSET     (0x40C)\n#define PDS_CLKPLL_C4_EN         PDS_CLKPLL_C4_EN\n#define PDS_CLKPLL_C4_EN_POS     (0U)\n#define PDS_CLKPLL_C4_EN_LEN     (1U)\n#define PDS_CLKPLL_C4_EN_MSK     (((1U << PDS_CLKPLL_C4_EN_LEN) - 1) << PDS_CLKPLL_C4_EN_POS)\n#define PDS_CLKPLL_C4_EN_UMSK    (~(((1U << PDS_CLKPLL_C4_EN_LEN) - 1) << PDS_CLKPLL_C4_EN_POS))\n#define PDS_CLKPLL_R4            PDS_CLKPLL_R4\n#define PDS_CLKPLL_R4_POS        (4U)\n#define PDS_CLKPLL_R4_LEN        (2U)\n#define PDS_CLKPLL_R4_MSK        (((1U << PDS_CLKPLL_R4_LEN) - 1) << PDS_CLKPLL_R4_POS)\n#define PDS_CLKPLL_R4_UMSK       (~(((1U << PDS_CLKPLL_R4_LEN) - 1) << PDS_CLKPLL_R4_POS))\n#define PDS_CLKPLL_R4_SHORT      PDS_CLKPLL_R4_SHORT\n#define PDS_CLKPLL_R4_SHORT_POS  (8U)\n#define PDS_CLKPLL_R4_SHORT_LEN  (1U)\n#define PDS_CLKPLL_R4_SHORT_MSK  (((1U << PDS_CLKPLL_R4_SHORT_LEN) - 1) << PDS_CLKPLL_R4_SHORT_POS)\n#define PDS_CLKPLL_R4_SHORT_UMSK (~(((1U << PDS_CLKPLL_R4_SHORT_LEN) - 1) << PDS_CLKPLL_R4_SHORT_POS))\n#define PDS_CLKPLL_C3            PDS_CLKPLL_C3\n#define PDS_CLKPLL_C3_POS        (12U)\n#define PDS_CLKPLL_C3_LEN        (2U)\n#define PDS_CLKPLL_C3_MSK        (((1U << PDS_CLKPLL_C3_LEN) - 1) << PDS_CLKPLL_C3_POS)\n#define PDS_CLKPLL_C3_UMSK       (~(((1U << PDS_CLKPLL_C3_LEN) - 1) << PDS_CLKPLL_C3_POS))\n#define PDS_CLKPLL_CZ            PDS_CLKPLL_CZ\n#define PDS_CLKPLL_CZ_POS        (14U)\n#define PDS_CLKPLL_CZ_LEN        (2U)\n#define PDS_CLKPLL_CZ_MSK        (((1U << PDS_CLKPLL_CZ_LEN) - 1) << PDS_CLKPLL_CZ_POS)\n#define PDS_CLKPLL_CZ_UMSK       (~(((1U << PDS_CLKPLL_CZ_LEN) - 1) << PDS_CLKPLL_CZ_POS))\n#define PDS_CLKPLL_RZ            PDS_CLKPLL_RZ\n#define PDS_CLKPLL_RZ_POS        (16U)\n#define PDS_CLKPLL_RZ_LEN        (3U)\n#define PDS_CLKPLL_RZ_MSK        (((1U << PDS_CLKPLL_RZ_LEN) - 1) << PDS_CLKPLL_RZ_POS)\n#define PDS_CLKPLL_RZ_UMSK       (~(((1U << PDS_CLKPLL_RZ_LEN) - 1) << PDS_CLKPLL_RZ_POS))\n\n/* 0x410 : clkpll_fbdv */\n#define PDS_CLKPLL_FBDV_OFFSET         (0x410)\n#define PDS_CLKPLL_SEL_SAMPLE_CLK      PDS_CLKPLL_SEL_SAMPLE_CLK\n#define PDS_CLKPLL_SEL_SAMPLE_CLK_POS  (0U)\n#define PDS_CLKPLL_SEL_SAMPLE_CLK_LEN  (2U)\n#define PDS_CLKPLL_SEL_SAMPLE_CLK_MSK  (((1U << PDS_CLKPLL_SEL_SAMPLE_CLK_LEN) - 1) << PDS_CLKPLL_SEL_SAMPLE_CLK_POS)\n#define PDS_CLKPLL_SEL_SAMPLE_CLK_UMSK (~(((1U << PDS_CLKPLL_SEL_SAMPLE_CLK_LEN) - 1) << PDS_CLKPLL_SEL_SAMPLE_CLK_POS))\n#define PDS_CLKPLL_SEL_FB_CLK          PDS_CLKPLL_SEL_FB_CLK\n#define PDS_CLKPLL_SEL_FB_CLK_POS      (2U)\n#define PDS_CLKPLL_SEL_FB_CLK_LEN      (2U)\n#define PDS_CLKPLL_SEL_FB_CLK_MSK      (((1U << PDS_CLKPLL_SEL_FB_CLK_LEN) - 1) << PDS_CLKPLL_SEL_FB_CLK_POS)\n#define PDS_CLKPLL_SEL_FB_CLK_UMSK     (~(((1U << PDS_CLKPLL_SEL_FB_CLK_LEN) - 1) << PDS_CLKPLL_SEL_FB_CLK_POS))\n\n/* 0x414 : clkpll_vco */\n#define PDS_CLKPLL_VCO_OFFSET     (0x414)\n#define PDS_CLKPLL_VCO_SPEED      PDS_CLKPLL_VCO_SPEED\n#define PDS_CLKPLL_VCO_SPEED_POS  (0U)\n#define PDS_CLKPLL_VCO_SPEED_LEN  (3U)\n#define PDS_CLKPLL_VCO_SPEED_MSK  (((1U << PDS_CLKPLL_VCO_SPEED_LEN) - 1) << PDS_CLKPLL_VCO_SPEED_POS)\n#define PDS_CLKPLL_VCO_SPEED_UMSK (~(((1U << PDS_CLKPLL_VCO_SPEED_LEN) - 1) << PDS_CLKPLL_VCO_SPEED_POS))\n#define PDS_CLKPLL_SHRTR          PDS_CLKPLL_SHRTR\n#define PDS_CLKPLL_SHRTR_POS      (3U)\n#define PDS_CLKPLL_SHRTR_LEN      (1U)\n#define PDS_CLKPLL_SHRTR_MSK      (((1U << PDS_CLKPLL_SHRTR_LEN) - 1) << PDS_CLKPLL_SHRTR_POS)\n#define PDS_CLKPLL_SHRTR_UMSK     (~(((1U << PDS_CLKPLL_SHRTR_LEN) - 1) << PDS_CLKPLL_SHRTR_POS))\n\n/* 0x418 : clkpll_sdm */\n#define PDS_CLKPLL_SDM_OFFSET      (0x418)\n#define PDS_CLKPLL_SDMIN           PDS_CLKPLL_SDMIN\n#define PDS_CLKPLL_SDMIN_POS       (0U)\n#define PDS_CLKPLL_SDMIN_LEN       (24U)\n#define PDS_CLKPLL_SDMIN_MSK       (((1U << PDS_CLKPLL_SDMIN_LEN) - 1) << PDS_CLKPLL_SDMIN_POS)\n#define PDS_CLKPLL_SDMIN_UMSK      (~(((1U << PDS_CLKPLL_SDMIN_LEN) - 1) << PDS_CLKPLL_SDMIN_POS))\n#define PDS_CLKPLL_DITHER_SEL      PDS_CLKPLL_DITHER_SEL\n#define PDS_CLKPLL_DITHER_SEL_POS  (24U)\n#define PDS_CLKPLL_DITHER_SEL_LEN  (2U)\n#define PDS_CLKPLL_DITHER_SEL_MSK  (((1U << PDS_CLKPLL_DITHER_SEL_LEN) - 1) << PDS_CLKPLL_DITHER_SEL_POS)\n#define PDS_CLKPLL_DITHER_SEL_UMSK (~(((1U << PDS_CLKPLL_DITHER_SEL_LEN) - 1) << PDS_CLKPLL_DITHER_SEL_POS))\n#define PDS_CLKPLL_SDM_FLAG        PDS_CLKPLL_SDM_FLAG\n#define PDS_CLKPLL_SDM_FLAG_POS    (28U)\n#define PDS_CLKPLL_SDM_FLAG_LEN    (1U)\n#define PDS_CLKPLL_SDM_FLAG_MSK    (((1U << PDS_CLKPLL_SDM_FLAG_LEN) - 1) << PDS_CLKPLL_SDM_FLAG_POS)\n#define PDS_CLKPLL_SDM_FLAG_UMSK   (~(((1U << PDS_CLKPLL_SDM_FLAG_LEN) - 1) << PDS_CLKPLL_SDM_FLAG_POS))\n#define PDS_CLKPLL_SDM_BYPASS      PDS_CLKPLL_SDM_BYPASS\n#define PDS_CLKPLL_SDM_BYPASS_POS  (29U)\n#define PDS_CLKPLL_SDM_BYPASS_LEN  (1U)\n#define PDS_CLKPLL_SDM_BYPASS_MSK  (((1U << PDS_CLKPLL_SDM_BYPASS_LEN) - 1) << PDS_CLKPLL_SDM_BYPASS_POS)\n#define PDS_CLKPLL_SDM_BYPASS_UMSK (~(((1U << PDS_CLKPLL_SDM_BYPASS_LEN) - 1) << PDS_CLKPLL_SDM_BYPASS_POS))\n\n/* 0x41C : clkpll_output_en */\n#define PDS_CLKPLL_OUTPUT_EN_OFFSET  (0x41C)\n#define PDS_CLKPLL_EN_480M           PDS_CLKPLL_EN_480M\n#define PDS_CLKPLL_EN_480M_POS       (0U)\n#define PDS_CLKPLL_EN_480M_LEN       (1U)\n#define PDS_CLKPLL_EN_480M_MSK       (((1U << PDS_CLKPLL_EN_480M_LEN) - 1) << PDS_CLKPLL_EN_480M_POS)\n#define PDS_CLKPLL_EN_480M_UMSK      (~(((1U << PDS_CLKPLL_EN_480M_LEN) - 1) << PDS_CLKPLL_EN_480M_POS))\n#define PDS_CLKPLL_EN_240M           PDS_CLKPLL_EN_240M\n#define PDS_CLKPLL_EN_240M_POS       (1U)\n#define PDS_CLKPLL_EN_240M_LEN       (1U)\n#define PDS_CLKPLL_EN_240M_MSK       (((1U << PDS_CLKPLL_EN_240M_LEN) - 1) << PDS_CLKPLL_EN_240M_POS)\n#define PDS_CLKPLL_EN_240M_UMSK      (~(((1U << PDS_CLKPLL_EN_240M_LEN) - 1) << PDS_CLKPLL_EN_240M_POS))\n#define PDS_CLKPLL_EN_192M           PDS_CLKPLL_EN_192M\n#define PDS_CLKPLL_EN_192M_POS       (2U)\n#define PDS_CLKPLL_EN_192M_LEN       (1U)\n#define PDS_CLKPLL_EN_192M_MSK       (((1U << PDS_CLKPLL_EN_192M_LEN) - 1) << PDS_CLKPLL_EN_192M_POS)\n#define PDS_CLKPLL_EN_192M_UMSK      (~(((1U << PDS_CLKPLL_EN_192M_LEN) - 1) << PDS_CLKPLL_EN_192M_POS))\n#define PDS_CLKPLL_EN_160M           PDS_CLKPLL_EN_160M\n#define PDS_CLKPLL_EN_160M_POS       (3U)\n#define PDS_CLKPLL_EN_160M_LEN       (1U)\n#define PDS_CLKPLL_EN_160M_MSK       (((1U << PDS_CLKPLL_EN_160M_LEN) - 1) << PDS_CLKPLL_EN_160M_POS)\n#define PDS_CLKPLL_EN_160M_UMSK      (~(((1U << PDS_CLKPLL_EN_160M_LEN) - 1) << PDS_CLKPLL_EN_160M_POS))\n#define PDS_CLKPLL_EN_120M           PDS_CLKPLL_EN_120M\n#define PDS_CLKPLL_EN_120M_POS       (4U)\n#define PDS_CLKPLL_EN_120M_LEN       (1U)\n#define PDS_CLKPLL_EN_120M_MSK       (((1U << PDS_CLKPLL_EN_120M_LEN) - 1) << PDS_CLKPLL_EN_120M_POS)\n#define PDS_CLKPLL_EN_120M_UMSK      (~(((1U << PDS_CLKPLL_EN_120M_LEN) - 1) << PDS_CLKPLL_EN_120M_POS))\n#define PDS_CLKPLL_EN_96M            PDS_CLKPLL_EN_96M\n#define PDS_CLKPLL_EN_96M_POS        (5U)\n#define PDS_CLKPLL_EN_96M_LEN        (1U)\n#define PDS_CLKPLL_EN_96M_MSK        (((1U << PDS_CLKPLL_EN_96M_LEN) - 1) << PDS_CLKPLL_EN_96M_POS)\n#define PDS_CLKPLL_EN_96M_UMSK       (~(((1U << PDS_CLKPLL_EN_96M_LEN) - 1) << PDS_CLKPLL_EN_96M_POS))\n#define PDS_CLKPLL_EN_80M            PDS_CLKPLL_EN_80M\n#define PDS_CLKPLL_EN_80M_POS        (6U)\n#define PDS_CLKPLL_EN_80M_LEN        (1U)\n#define PDS_CLKPLL_EN_80M_MSK        (((1U << PDS_CLKPLL_EN_80M_LEN) - 1) << PDS_CLKPLL_EN_80M_POS)\n#define PDS_CLKPLL_EN_80M_UMSK       (~(((1U << PDS_CLKPLL_EN_80M_LEN) - 1) << PDS_CLKPLL_EN_80M_POS))\n#define PDS_CLKPLL_EN_48M            PDS_CLKPLL_EN_48M\n#define PDS_CLKPLL_EN_48M_POS        (7U)\n#define PDS_CLKPLL_EN_48M_LEN        (1U)\n#define PDS_CLKPLL_EN_48M_MSK        (((1U << PDS_CLKPLL_EN_48M_LEN) - 1) << PDS_CLKPLL_EN_48M_POS)\n#define PDS_CLKPLL_EN_48M_UMSK       (~(((1U << PDS_CLKPLL_EN_48M_LEN) - 1) << PDS_CLKPLL_EN_48M_POS))\n#define PDS_CLKPLL_EN_32M            PDS_CLKPLL_EN_32M\n#define PDS_CLKPLL_EN_32M_POS        (8U)\n#define PDS_CLKPLL_EN_32M_LEN        (1U)\n#define PDS_CLKPLL_EN_32M_MSK        (((1U << PDS_CLKPLL_EN_32M_LEN) - 1) << PDS_CLKPLL_EN_32M_POS)\n#define PDS_CLKPLL_EN_32M_UMSK       (~(((1U << PDS_CLKPLL_EN_32M_LEN) - 1) << PDS_CLKPLL_EN_32M_POS))\n#define PDS_CLKPLL_EN_DIV2_480M      PDS_CLKPLL_EN_DIV2_480M\n#define PDS_CLKPLL_EN_DIV2_480M_POS  (9U)\n#define PDS_CLKPLL_EN_DIV2_480M_LEN  (1U)\n#define PDS_CLKPLL_EN_DIV2_480M_MSK  (((1U << PDS_CLKPLL_EN_DIV2_480M_LEN) - 1) << PDS_CLKPLL_EN_DIV2_480M_POS)\n#define PDS_CLKPLL_EN_DIV2_480M_UMSK (~(((1U << PDS_CLKPLL_EN_DIV2_480M_LEN) - 1) << PDS_CLKPLL_EN_DIV2_480M_POS))\n\n/* 0x420 : clkpll_test_enable */\n#define PDS_CLKPLL_TEST_ENABLE_OFFSET    (0x420)\n#define PDS_DTEN_CLKPLL_POSTDIV_CLK      PDS_DTEN_CLKPLL_POSTDIV_CLK\n#define PDS_DTEN_CLKPLL_POSTDIV_CLK_POS  (0U)\n#define PDS_DTEN_CLKPLL_POSTDIV_CLK_LEN  (1U)\n#define PDS_DTEN_CLKPLL_POSTDIV_CLK_MSK  (((1U << PDS_DTEN_CLKPLL_POSTDIV_CLK_LEN) - 1) << PDS_DTEN_CLKPLL_POSTDIV_CLK_POS)\n#define PDS_DTEN_CLKPLL_POSTDIV_CLK_UMSK (~(((1U << PDS_DTEN_CLKPLL_POSTDIV_CLK_LEN) - 1) << PDS_DTEN_CLKPLL_POSTDIV_CLK_POS))\n#define PDS_DTEN_CLK96M                  PDS_DTEN_CLK96M\n#define PDS_DTEN_CLK96M_POS              (1U)\n#define PDS_DTEN_CLK96M_LEN              (1U)\n#define PDS_DTEN_CLK96M_MSK              (((1U << PDS_DTEN_CLK96M_LEN) - 1) << PDS_DTEN_CLK96M_POS)\n#define PDS_DTEN_CLK96M_UMSK             (~(((1U << PDS_DTEN_CLK96M_LEN) - 1) << PDS_DTEN_CLK96M_POS))\n#define PDS_DTEN_CLK32M                  PDS_DTEN_CLK32M\n#define PDS_DTEN_CLK32M_POS              (2U)\n#define PDS_DTEN_CLK32M_LEN              (1U)\n#define PDS_DTEN_CLK32M_MSK              (((1U << PDS_DTEN_CLK32M_LEN) - 1) << PDS_DTEN_CLK32M_POS)\n#define PDS_DTEN_CLK32M_UMSK             (~(((1U << PDS_DTEN_CLK32M_LEN) - 1) << PDS_DTEN_CLK32M_POS))\n#define PDS_DTEN_CLKPLL_FSDM             PDS_DTEN_CLKPLL_FSDM\n#define PDS_DTEN_CLKPLL_FSDM_POS         (3U)\n#define PDS_DTEN_CLKPLL_FSDM_LEN         (1U)\n#define PDS_DTEN_CLKPLL_FSDM_MSK         (((1U << PDS_DTEN_CLKPLL_FSDM_LEN) - 1) << PDS_DTEN_CLKPLL_FSDM_POS)\n#define PDS_DTEN_CLKPLL_FSDM_UMSK        (~(((1U << PDS_DTEN_CLKPLL_FSDM_LEN) - 1) << PDS_DTEN_CLKPLL_FSDM_POS))\n#define PDS_DTEN_CLKPLL_FREF             PDS_DTEN_CLKPLL_FREF\n#define PDS_DTEN_CLKPLL_FREF_POS         (4U)\n#define PDS_DTEN_CLKPLL_FREF_LEN         (1U)\n#define PDS_DTEN_CLKPLL_FREF_MSK         (((1U << PDS_DTEN_CLKPLL_FREF_LEN) - 1) << PDS_DTEN_CLKPLL_FREF_POS)\n#define PDS_DTEN_CLKPLL_FREF_UMSK        (~(((1U << PDS_DTEN_CLKPLL_FREF_LEN) - 1) << PDS_DTEN_CLKPLL_FREF_POS))\n#define PDS_DTEN_CLKPLL_FIN              PDS_DTEN_CLKPLL_FIN\n#define PDS_DTEN_CLKPLL_FIN_POS          (5U)\n#define PDS_DTEN_CLKPLL_FIN_LEN          (1U)\n#define PDS_DTEN_CLKPLL_FIN_MSK          (((1U << PDS_DTEN_CLKPLL_FIN_LEN) - 1) << PDS_DTEN_CLKPLL_FIN_POS)\n#define PDS_DTEN_CLKPLL_FIN_UMSK         (~(((1U << PDS_DTEN_CLKPLL_FIN_LEN) - 1) << PDS_DTEN_CLKPLL_FIN_POS))\n#define PDS_TEN_CLKPLL_SFREG             PDS_TEN_CLKPLL_SFREG\n#define PDS_TEN_CLKPLL_SFREG_POS         (6U)\n#define PDS_TEN_CLKPLL_SFREG_LEN         (1U)\n#define PDS_TEN_CLKPLL_SFREG_MSK         (((1U << PDS_TEN_CLKPLL_SFREG_LEN) - 1) << PDS_TEN_CLKPLL_SFREG_POS)\n#define PDS_TEN_CLKPLL_SFREG_UMSK        (~(((1U << PDS_TEN_CLKPLL_SFREG_LEN) - 1) << PDS_TEN_CLKPLL_SFREG_POS))\n#define PDS_TEN_CLKPLL                   PDS_TEN_CLKPLL\n#define PDS_TEN_CLKPLL_POS               (7U)\n#define PDS_TEN_CLKPLL_LEN               (1U)\n#define PDS_TEN_CLKPLL_MSK               (((1U << PDS_TEN_CLKPLL_LEN) - 1) << PDS_TEN_CLKPLL_POS)\n#define PDS_TEN_CLKPLL_UMSK              (~(((1U << PDS_TEN_CLKPLL_LEN) - 1) << PDS_TEN_CLKPLL_POS))\n#define PDS_CLKPLL_DC_TP_OUT_EN          PDS_CLKPLL_DC_TP_OUT_EN\n#define PDS_CLKPLL_DC_TP_OUT_EN_POS      (8U)\n#define PDS_CLKPLL_DC_TP_OUT_EN_LEN      (1U)\n#define PDS_CLKPLL_DC_TP_OUT_EN_MSK      (((1U << PDS_CLKPLL_DC_TP_OUT_EN_LEN) - 1) << PDS_CLKPLL_DC_TP_OUT_EN_POS)\n#define PDS_CLKPLL_DC_TP_OUT_EN_UMSK     (~(((1U << PDS_CLKPLL_DC_TP_OUT_EN_LEN) - 1) << PDS_CLKPLL_DC_TP_OUT_EN_POS))\n\nstruct pds_reg {\n    /* 0x0 : PDS_CTL */\n    union {\n        struct\n        {\n            uint32_t pds_start_ps              : 1; /* [    0],        w1p,        0x0 */\n            uint32_t cr_sleep_forever          : 1; /* [    1],        r/w,        0x0 */\n            uint32_t cr_xtal_force_off         : 1; /* [    2],        r/w,        0x0 */\n            uint32_t cr_wifi_pds_save_state    : 1; /* [    3],        r/w,        0x0 */\n            uint32_t cr_pds_pd_dcdc18          : 1; /* [    4],        r/w,        0x0 */\n            uint32_t cr_pds_pd_bg_sys          : 1; /* [    5],        r/w,        0x0 */\n            uint32_t cr_pds_ctrl_gpio_ie_pu_pd : 1; /* [    6],        r/w,        0x0 */\n            uint32_t cr_pds_ctrl_pu_flash      : 1; /* [    7],        r/w,        0x0 */\n            uint32_t cr_pds_gate_clk           : 1; /* [    8],        r/w,        0x1 */\n            uint32_t cr_pds_mem_stby           : 1; /* [    9],        r/w,        0x1 */\n            uint32_t cr_sw_pu_flash            : 1; /* [   10],        r/w,        0x1 */\n            uint32_t cr_pds_iso_en             : 1; /* [   11],        r/w,        0x1 */\n            uint32_t cr_pds_wait_xtal_rdy      : 1; /* [   12],        r/w,        0x0 */\n            uint32_t cr_pds_pwr_off            : 1; /* [   13],        r/w,        0x1 */\n            uint32_t cr_pds_pd_xtal            : 1; /* [   14],        r/w,        0x1 */\n            uint32_t cr_pds_soc_enb_force_on   : 1; /* [   15],        r/w,        0x0 */\n            uint32_t cr_pds_rst_soc_en         : 1; /* [   16],        r/w,        0x0 */\n            uint32_t cr_pds_rc32m_off_dis      : 1; /* [   17],        r/w,        0x0 */\n            uint32_t cr_pds_ldo_vsel_en        : 1; /* [   18],        r/w,        0x0 */\n            uint32_t cr_pds_ram_lp_with_clk_en : 1; /* [   19],        r/w,        0x0 */\n            uint32_t reserved_20               : 1; /* [   20],       rsvd,        0x0 */\n            uint32_t cr_np_wfi_mask            : 1; /* [   21],        r/w,        0x0 */\n            uint32_t cr_pds_pd_ldo11           : 1; /* [   22],        r/w,        0x0 */\n            uint32_t cr_pds_force_ram_clk_en   : 1; /* [   23],        r/w,        0x0 */\n            uint32_t cr_pds_ldo_vol            : 4; /* [27:24],        r/w,        0xa */\n            uint32_t cr_pds_ctrl_rf            : 2; /* [29:28],        r/w,        0x1 */\n            uint32_t cr_pds_ctrl_pll           : 2; /* [31:30],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } PDS_CTL;\n\n    /* 0x4 : PDS_TIME1 */\n    union {\n        struct\n        {\n            uint32_t cr_sleep_duration : 32; /* [31: 0],        r/w,      0xca8 */\n        } BF;\n        uint32_t WORD;\n    } PDS_TIME1;\n\n    /* 0x8  reserved */\n    uint8_t RESERVED0x8[4];\n\n    /* 0xC : PDS_INT */\n    union {\n        struct\n        {\n            uint32_t ro_pds_wake_int          : 1; /* [    0],          r,        0x0 */\n            uint32_t reserved_1               : 1; /* [    1],       rsvd,        0x0 */\n            uint32_t ro_pds_rf_done_int       : 1; /* [    2],          r,        0x0 */\n            uint32_t ro_pds_pll_done_int      : 1; /* [    3],          r,        0x0 */\n            uint32_t pds_reset_event          : 3; /* [ 6: 4],          r,        0x0 */\n            uint32_t pds_clr_reset_event      : 1; /* [    7],          w,        0x0 */\n            uint32_t cr_pds_wake_int_mask     : 1; /* [    8],        r/w,        0x0 */\n            uint32_t reserved_9               : 1; /* [    9],       rsvd,        0x0 */\n            uint32_t cr_pds_rf_done_int_mask  : 1; /* [   10],        r/w,        0x0 */\n            uint32_t cr_pds_pll_done_int_mask : 1; /* [   11],        r/w,        0x0 */\n            uint32_t reserved_12_14           : 3; /* [14:12],       rsvd,        0x0 */\n            uint32_t cr_pds_int_clr           : 1; /* [   15],        r/w,        0x0 */\n            uint32_t cr_pds_wakeup_src_en     : 8; /* [23:16],        r/w,       0xff */\n            uint32_t ro_pds_wakeup_event      : 8; /* [31:24],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } PDS_INT;\n\n    /* 0x10 : PDS_CTL2 */\n    union {\n        struct\n        {\n            uint32_t cr_pds_force_np_pwr_off   : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1                : 1;  /* [    1],       rsvd,        0x0 */\n            uint32_t cr_pds_force_bz_pwr_off   : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t cr_pds_force_usb_pwr_off  : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t cr_pds_force_np_iso_en    : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t reserved_5                : 1;  /* [    5],       rsvd,        0x0 */\n            uint32_t cr_pds_force_bz_iso_en    : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t cr_pds_force_usb_iso_en   : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t cr_pds_force_np_pds_rst   : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t reserved_9                : 1;  /* [    9],       rsvd,        0x0 */\n            uint32_t cr_pds_force_bz_pds_rst   : 1;  /* [   10],        r/w,        0x0 */\n            uint32_t cr_pds_force_usb_pds_rst  : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t cr_pds_force_np_mem_stby  : 1;  /* [   12],        r/w,        0x0 */\n            uint32_t reserved_13               : 1;  /* [   13],       rsvd,        0x0 */\n            uint32_t cr_pds_force_bz_mem_stby  : 1;  /* [   14],        r/w,        0x0 */\n            uint32_t cr_pds_force_usb_mem_stby : 1;  /* [   15],        r/w,        0x0 */\n            uint32_t cr_pds_force_np_gate_clk  : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t reserved_17               : 1;  /* [   17],       rsvd,        0x0 */\n            uint32_t cr_pds_force_bz_gate_clk  : 1;  /* [   18],        r/w,        0x0 */\n            uint32_t cr_pds_force_usb_gate_clk : 1;  /* [   19],        r/w,        0x0 */\n            uint32_t reserved_20_31            : 12; /* [31:20],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } PDS_CTL2;\n\n    /* 0x14 : PDS_CTL3 */\n    union {\n        struct\n        {\n            uint32_t reserved_0                 : 1; /* [    0],       rsvd,        0x0 */\n            uint32_t cr_pds_force_misc_pwr_off  : 1; /* [    1],        r/w,        0x0 */\n            uint32_t cr_pds_force_ble_pwr_off   : 1; /* [    2],        r/w,        0x0 */\n            uint32_t reserved_3_4               : 2; /* [ 4: 3],       rsvd,        0x0 */\n            uint32_t cr_pds_force_ble_iso_en    : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6                 : 1; /* [    6],       rsvd,        0x0 */\n            uint32_t cr_pds_force_misc_pds_rst  : 1; /* [    7],        r/w,        0x0 */\n            uint32_t cr_pds_force_ble_pds_rst   : 1; /* [    8],        r/w,        0x0 */\n            uint32_t reserved_9                 : 1; /* [    9],       rsvd,        0x0 */\n            uint32_t cr_pds_force_misc_mem_stby : 1; /* [   10],        r/w,        0x0 */\n            uint32_t cr_pds_force_ble_mem_stby  : 1; /* [   11],        r/w,        0x0 */\n            uint32_t reserved_12                : 1; /* [   12],       rsvd,        0x0 */\n            uint32_t cr_pds_force_misc_gate_clk : 1; /* [   13],        r/w,        0x0 */\n            uint32_t cr_pds_force_ble_gate_clk  : 1; /* [   14],        r/w,        0x0 */\n            uint32_t reserved_15_23             : 9; /* [23:15],       rsvd,        0x0 */\n            uint32_t cr_pds_np_iso_en           : 1; /* [   24],        r/w,        0x1 */\n            uint32_t reserved_25_26             : 2; /* [26:25],       rsvd,        0x0 */\n            uint32_t cr_pds_bz_iso_en           : 1; /* [   27],        r/w,        0x1 */\n            uint32_t cr_pds_ble_iso_en          : 1; /* [   28],        r/w,        0x1 */\n            uint32_t cr_pds_usb_iso_en          : 1; /* [   29],        r/w,        0x1 */\n            uint32_t cr_pds_misc_iso_en         : 1; /* [   30],        r/w,        0x1 */\n            uint32_t reserved_31                : 1; /* [   31],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } PDS_CTL3;\n\n    /* 0x18 : PDS_CTL4 */\n    union {\n        struct\n        {\n            uint32_t cr_pds_np_pwr_off       : 1; /* [    0],        r/w,        0x1 */\n            uint32_t cr_pds_np_reset         : 1; /* [    1],        r/w,        0x1 */\n            uint32_t cr_pds_np_mem_stby      : 1; /* [    2],        r/w,        0x1 */\n            uint32_t cr_pds_np_gate_clk      : 1; /* [    3],        r/w,        0x1 */\n            uint32_t reserved_4_11           : 8; /* [11: 4],       rsvd,        0x0 */\n            uint32_t cr_pds_bz_pwr_off       : 1; /* [   12],        r/w,        0x1 */\n            uint32_t cr_pds_bz_reset         : 1; /* [   13],        r/w,        0x1 */\n            uint32_t cr_pds_bz_mem_stby      : 1; /* [   14],        r/w,        0x1 */\n            uint32_t cr_pds_bz_gate_clk      : 1; /* [   15],        r/w,        0x1 */\n            uint32_t cr_pds_ble_pwr_off      : 1; /* [   16],        r/w,        0x1 */\n            uint32_t cr_pds_ble_reset        : 1; /* [   17],        r/w,        0x1 */\n            uint32_t cr_pds_ble_mem_stby     : 1; /* [   18],        r/w,        0x1 */\n            uint32_t cr_pds_ble_gate_clk     : 1; /* [   19],        r/w,        0x1 */\n            uint32_t cr_pds_usb_pwr_off      : 1; /* [   20],        r/w,        0x1 */\n            uint32_t cr_pds_usb_reset        : 1; /* [   21],        r/w,        0x1 */\n            uint32_t cr_pds_usb_mem_stby     : 1; /* [   22],        r/w,        0x1 */\n            uint32_t cr_pds_usb_gate_clk     : 1; /* [   23],        r/w,        0x1 */\n            uint32_t cr_pds_misc_pwr_off     : 1; /* [   24],        r/w,        0x1 */\n            uint32_t cr_pds_misc_reset       : 1; /* [   25],        r/w,        0x1 */\n            uint32_t cr_pds_misc_mem_stby    : 1; /* [   26],        r/w,        0x1 */\n            uint32_t cr_pds_misc_gate_clk    : 1; /* [   27],        r/w,        0x1 */\n            uint32_t reserved_28_29          : 2; /* [29:28],       rsvd,        0x0 */\n            uint32_t cr_pds_misc_ana_pwr_off : 1; /* [   30],        r/w,        0x1 */\n            uint32_t cr_pds_misc_dig_pwr_off : 1; /* [   31],        r/w,        0x1 */\n        } BF;\n        uint32_t WORD;\n    } PDS_CTL4;\n\n    /* 0x1C : pds_stat */\n    union {\n        struct\n        {\n            uint32_t ro_pds_state     : 4;  /* [ 3: 0],          r,        0x0 */\n            uint32_t reserved_4_7     : 4;  /* [ 7: 4],       rsvd,        0x0 */\n            uint32_t ro_pds_rf_state  : 4;  /* [11: 8],          r,        0x0 */\n            uint32_t reserved_12_15   : 4;  /* [15:12],       rsvd,        0x0 */\n            uint32_t ro_pds_pll_state : 2;  /* [17:16],          r,        0x0 */\n            uint32_t reserved_18_31   : 14; /* [31:18],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pds_stat;\n\n    /* 0x20 : pds_ram1 */\n    union {\n        struct\n        {\n            uint32_t cr_pds_ram_ret1n : 4;  /* [ 3: 0],        r/w,        0xf */\n            uint32_t cr_pds_ram_ret2n : 4;  /* [ 7: 4],        r/w,        0x0 */\n            uint32_t cr_pds_ram_pgen  : 4;  /* [11: 8],        r/w,        0x0 */\n            uint32_t reserved_12_31   : 20; /* [31:12],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pds_ram1;\n\n    /* 0x24  reserved */\n    uint8_t RESERVED0x24[12];\n\n    /* 0x30 : pds_gpio_set_pu_pd */\n    union {\n        struct\n        {\n            uint32_t cr_pds_gpio_22_17_pd : 6; /* [ 5: 0],        r/w,        0x0 */\n            uint32_t reserved_6_7         : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t cr_pds_gpio_22_17_pu : 6; /* [13: 8],        r/w,        0x0 */\n            uint32_t reserved_14_15       : 2; /* [15:14],       rsvd,        0x0 */\n            uint32_t cr_pds_gpio_28_23_pd : 6; /* [21:16],        r/w,        0x0 */\n            uint32_t reserved_22_23       : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t cr_pds_gpio_28_23_pu : 6; /* [29:24],        r/w,        0x0 */\n            uint32_t reserved_30_31       : 2; /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pds_gpio_set_pu_pd;\n\n    /* 0x34  reserved */\n    uint8_t RESERVED0x34[12];\n\n    /* 0x40 : pds_gpio_int */\n    union {\n        struct\n        {\n            uint32_t pds_gpio_int_mask   : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t pds_gpio_int_stat   : 1;  /* [    1],          r,        0x0 */\n            uint32_t pds_gpio_int_clr    : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t reserved_3          : 1;  /* [    3],       rsvd,        0x0 */\n            uint32_t pds_gpio_int_mode   : 3;  /* [ 6: 4],        r/w,        0x0 */\n            uint32_t reserved_7          : 1;  /* [    7],       rsvd,        0x0 */\n            uint32_t pds_gpio_int_select : 3;  /* [10: 8],        r/w,        0x0 */\n            uint32_t reserved_11_31      : 21; /* [31:11],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pds_gpio_int;\n\n    /* 0x44  reserved */\n    uint8_t RESERVED0x44[700];\n\n    /* 0x300 : rc32m_ctrl0 */\n    union {\n        struct\n        {\n            uint32_t rc32m_cal_done        : 1; /* [    0],          r,        0x0 */\n            uint32_t rc32m_rdy             : 1; /* [    1],          r,        0x0 */\n            uint32_t rc32m_cal_inprogress  : 1; /* [    2],          r,        0x0 */\n            uint32_t rc32m_cal_div         : 2; /* [ 4: 3],        r/w,        0x3 */\n            uint32_t rc32m_cal_precharge   : 1; /* [    5],          r,        0x0 */\n            uint32_t rc32m_dig_code_fr_cal : 8; /* [13: 6],          r,        0x0 */\n            uint32_t reserved_14_16        : 3; /* [16:14],       rsvd,        0x0 */\n            uint32_t rc32m_allow_cal       : 1; /* [   17],        r/w,        0x0 */\n            uint32_t rc32m_refclk_half     : 1; /* [   18],        r/w,        0x0 */\n            uint32_t rc32m_ext_code_en     : 1; /* [   19],        r/w,        0x1 */\n            uint32_t rc32m_cal_en          : 1; /* [   20],        r/w,        0x0 */\n            uint32_t rc32m_pd              : 1; /* [   21],        r/w,        0x0 */\n            uint32_t rc32m_code_fr_ext     : 8; /* [29:22],        r/w,       0x60 */\n            uint32_t reserved_30_31        : 2; /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } rc32m_ctrl0;\n\n    /* 0x304 : rc32m_ctrl1 */\n    union {\n        struct\n        {\n            uint32_t rc32m_test_en      : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t rc32m_soft_rst     : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t rc32m_clk_soft_rst : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t rc32m_clk_inv      : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t rc32m_clk_force_on : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t reserved_5_23      : 19; /* [23: 5],       rsvd,        0x0 */\n            uint32_t rc32m_reserved     : 8;  /* [31:24],        r/w,        0xf */\n        } BF;\n        uint32_t WORD;\n    } rc32m_ctrl1;\n\n    /* 0x308  reserved */\n    uint8_t RESERVED0x308[248];\n\n    /* 0x400 : pu_rst_clkpll */\n    union {\n        struct\n        {\n            uint32_t clkpll_sdm_reset     : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t clkpll_reset_postdiv : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t clkpll_reset_fbdv    : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t clkpll_reset_refdiv  : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t clkpll_pu_postdiv    : 1;  /* [    4],        r/w,        0x1 */\n            uint32_t clkpll_pu_fbdv       : 1;  /* [    5],        r/w,        0x1 */\n            uint32_t clkpll_pu_clamp_op   : 1;  /* [    6],        r/w,        0x1 */\n            uint32_t clkpll_pu_pfd        : 1;  /* [    7],        r/w,        0x1 */\n            uint32_t clkpll_pu_cp         : 1;  /* [    8],        r/w,        0x1 */\n            uint32_t pu_clkpll_sfreg      : 1;  /* [    9],        r/w,        0x0 */\n            uint32_t pu_clkpll            : 1;  /* [   10],        r/w,        0x0 */\n            uint32_t reserved_11_31       : 21; /* [31:11],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pu_rst_clkpll;\n\n    /* 0x404 : clkpll_top_ctrl */\n    union {\n        struct\n        {\n            uint32_t clkpll_postdiv        : 7; /* [ 6: 0],        r/w,       0x14 */\n            uint32_t reserved_7            : 1; /* [    7],       rsvd,        0x0 */\n            uint32_t clkpll_refdiv_ratio   : 4; /* [11: 8],        r/w,        0x4 */\n            uint32_t clkpll_xtal_rc32m_sel : 1; /* [   12],        r/w,        0x0 */\n            uint32_t reserved_13_15        : 3; /* [15:13],       rsvd,        0x0 */\n            uint32_t clkpll_refclk_sel     : 1; /* [   16],        r/w,        0x0 */\n            uint32_t reserved_17_19        : 3; /* [19:17],       rsvd,        0x0 */\n            uint32_t clkpll_vg11_sel       : 2; /* [21:20],        r/w,        0x1 */\n            uint32_t reserved_22_23        : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t clkpll_resv           : 2; /* [25:24],        r/w,        0x1 */\n            uint32_t reserved_26_31        : 6; /* [31:26],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } clkpll_top_ctrl;\n\n    /* 0x408 : clkpll_cp */\n    union {\n        struct\n        {\n            uint32_t clkpll_sel_cp_bias   : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t reserved_1_3         : 3;  /* [ 3: 1],       rsvd,        0x0 */\n            uint32_t clkpll_icp_5u        : 2;  /* [ 5: 4],        r/w,        0x0 */\n            uint32_t clkpll_icp_1u        : 2;  /* [ 7: 6],        r/w,        0x1 */\n            uint32_t clkpll_int_frac_sw   : 1;  /* [    8],        r/w,        0x1 */\n            uint32_t clkpll_cp_startup_en : 1;  /* [    9],        r/w,        0x1 */\n            uint32_t clkpll_cp_opamp_en   : 1;  /* [   10],        r/w,        0x1 */\n            uint32_t reserved_11_31       : 21; /* [31:11],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } clkpll_cp;\n\n    /* 0x40C : clkpll_rz */\n    union {\n        struct\n        {\n            uint32_t clkpll_c4_en    : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1_3    : 3;  /* [ 3: 1],       rsvd,        0x0 */\n            uint32_t clkpll_r4       : 2;  /* [ 5: 4],        r/w,        0x2 */\n            uint32_t reserved_6_7    : 2;  /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t clkpll_r4_short : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t reserved_9_11   : 3;  /* [11: 9],       rsvd,        0x0 */\n            uint32_t clkpll_c3       : 2;  /* [13:12],        r/w,        0x2 */\n            uint32_t clkpll_cz       : 2;  /* [15:14],        r/w,        0x2 */\n            uint32_t clkpll_rz       : 3;  /* [18:16],        r/w,        0x5 */\n            uint32_t reserved_19_31  : 13; /* [31:19],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } clkpll_rz;\n\n    /* 0x410 : clkpll_fbdv */\n    union {\n        struct\n        {\n            uint32_t clkpll_sel_sample_clk : 2;  /* [ 1: 0],        r/w,        0x1 */\n            uint32_t clkpll_sel_fb_clk     : 2;  /* [ 3: 2],        r/w,        0x1 */\n            uint32_t reserved_4_31         : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } clkpll_fbdv;\n\n    /* 0x414 : clkpll_vco */\n    union {\n        struct\n        {\n            uint32_t clkpll_vco_speed : 3;  /* [ 2: 0],        r/w,        0x6 */\n            uint32_t clkpll_shrtr     : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t reserved_4_31    : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } clkpll_vco;\n\n    /* 0x418 : clkpll_sdm */\n    union {\n        struct\n        {\n            uint32_t clkpll_sdmin      : 24; /* [23: 0],        r/w,   0x600000 */\n            uint32_t clkpll_dither_sel : 2;  /* [25:24],        r/w,        0x0 */\n            uint32_t reserved_26_27    : 2;  /* [27:26],       rsvd,        0x0 */\n            uint32_t clkpll_sdm_flag   : 1;  /* [   28],        r/w,        0x1 */\n            uint32_t clkpll_sdm_bypass : 1;  /* [   29],        r/w,        0x0 */\n            uint32_t reserved_30_31    : 2;  /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } clkpll_sdm;\n\n    /* 0x41C : clkpll_output_en */\n    union {\n        struct\n        {\n            uint32_t clkpll_en_480m      : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t clkpll_en_240m      : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t clkpll_en_192m      : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t clkpll_en_160m      : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t clkpll_en_120m      : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t clkpll_en_96m       : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t clkpll_en_80m       : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t clkpll_en_48m       : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t clkpll_en_32m       : 1;  /* [    8],        r/w,        0x1 */\n            uint32_t clkpll_en_div2_480m : 1;  /* [    9],        r/w,        0x0 */\n            uint32_t reserved_10_31      : 22; /* [31:10],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } clkpll_output_en;\n\n    /* 0x420 : clkpll_test_enable */\n    union {\n        struct\n        {\n            uint32_t dten_clkpll_postdiv_clk : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t dten_clk96M             : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t dten_clk32M             : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t dten_clkpll_fsdm        : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t dten_clkpll_fref        : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t dten_clkpll_fin         : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t ten_clkpll_sfreg        : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t ten_clkpll              : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t clkpll_dc_tp_out_en     : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t reserved_9_31           : 23; /* [31: 9],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } clkpll_test_enable;\n};\n\ntypedef volatile struct pds_reg pds_reg_t;\n\n#endif /* __PDS_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/pwm_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    pwm_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __PWM_REG_H__\n#define __PWM_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : pwm_int_config */\n#define PWM_INT_CONFIG_OFFSET  (0x0)\n#define PWM_INTERRUPT_STS      PWM_INTERRUPT_STS\n#define PWM_INTERRUPT_STS_POS  (0U)\n#define PWM_INTERRUPT_STS_LEN  (6U)\n#define PWM_INTERRUPT_STS_MSK  (((1U << PWM_INTERRUPT_STS_LEN) - 1) << PWM_INTERRUPT_STS_POS)\n#define PWM_INTERRUPT_STS_UMSK (~(((1U << PWM_INTERRUPT_STS_LEN) - 1) << PWM_INTERRUPT_STS_POS))\n#define PWM_INT_CLEAR          PWM_INT_CLEAR\n#define PWM_INT_CLEAR_POS      (8U)\n#define PWM_INT_CLEAR_LEN      (6U)\n#define PWM_INT_CLEAR_MSK      (((1U << PWM_INT_CLEAR_LEN) - 1) << PWM_INT_CLEAR_POS)\n#define PWM_INT_CLEAR_UMSK     (~(((1U << PWM_INT_CLEAR_LEN) - 1) << PWM_INT_CLEAR_POS))\n\n/* 0x20 : pwm0_clkdiv */\n#define PWM0_CLKDIV_OFFSET (0x20)\n#define PWM_CLK_DIV        PWM_CLK_DIV\n#define PWM_CLK_DIV_POS    (0U)\n#define PWM_CLK_DIV_LEN    (16U)\n#define PWM_CLK_DIV_MSK    (((1U << PWM_CLK_DIV_LEN) - 1) << PWM_CLK_DIV_POS)\n#define PWM_CLK_DIV_UMSK   (~(((1U << PWM_CLK_DIV_LEN) - 1) << PWM_CLK_DIV_POS))\n\n/* 0x24 : pwm0_thre1 */\n#define PWM0_THRE1_OFFSET (0x24)\n#define PWM_THRE1         PWM_THRE1\n#define PWM_THRE1_POS     (0U)\n#define PWM_THRE1_LEN     (16U)\n#define PWM_THRE1_MSK     (((1U << PWM_THRE1_LEN) - 1) << PWM_THRE1_POS)\n#define PWM_THRE1_UMSK    (~(((1U << PWM_THRE1_LEN) - 1) << PWM_THRE1_POS))\n\n/* 0x28 : pwm0_thre2 */\n#define PWM0_THRE2_OFFSET (0x28)\n#define PWM_THRE2         PWM_THRE2\n#define PWM_THRE2_POS     (0U)\n#define PWM_THRE2_LEN     (16U)\n#define PWM_THRE2_MSK     (((1U << PWM_THRE2_LEN) - 1) << PWM_THRE2_POS)\n#define PWM_THRE2_UMSK    (~(((1U << PWM_THRE2_LEN) - 1) << PWM_THRE2_POS))\n\n/* 0x2C : pwm0_period */\n#define PWM0_PERIOD_OFFSET (0x2C)\n#define PWM_PERIOD         PWM_PERIOD\n#define PWM_PERIOD_POS     (0U)\n#define PWM_PERIOD_LEN     (16U)\n#define PWM_PERIOD_MSK     (((1U << PWM_PERIOD_LEN) - 1) << PWM_PERIOD_POS)\n#define PWM_PERIOD_UMSK    (~(((1U << PWM_PERIOD_LEN) - 1) << PWM_PERIOD_POS))\n\n/* 0x30 : pwm0_config */\n#define PWM0_CONFIG_OFFSET    (0x30)\n#define PWM_REG_CLK_SEL       PWM_REG_CLK_SEL\n#define PWM_REG_CLK_SEL_POS   (0U)\n#define PWM_REG_CLK_SEL_LEN   (2U)\n#define PWM_REG_CLK_SEL_MSK   (((1U << PWM_REG_CLK_SEL_LEN) - 1) << PWM_REG_CLK_SEL_POS)\n#define PWM_REG_CLK_SEL_UMSK  (~(((1U << PWM_REG_CLK_SEL_LEN) - 1) << PWM_REG_CLK_SEL_POS))\n#define PWM_OUT_INV           PWM_OUT_INV\n#define PWM_OUT_INV_POS       (2U)\n#define PWM_OUT_INV_LEN       (1U)\n#define PWM_OUT_INV_MSK       (((1U << PWM_OUT_INV_LEN) - 1) << PWM_OUT_INV_POS)\n#define PWM_OUT_INV_UMSK      (~(((1U << PWM_OUT_INV_LEN) - 1) << PWM_OUT_INV_POS))\n#define PWM_STOP_MODE         PWM_STOP_MODE\n#define PWM_STOP_MODE_POS     (3U)\n#define PWM_STOP_MODE_LEN     (1U)\n#define PWM_STOP_MODE_MSK     (((1U << PWM_STOP_MODE_LEN) - 1) << PWM_STOP_MODE_POS)\n#define PWM_STOP_MODE_UMSK    (~(((1U << PWM_STOP_MODE_LEN) - 1) << PWM_STOP_MODE_POS))\n#define PWM_SW_FORCE_VAL      PWM_SW_FORCE_VAL\n#define PWM_SW_FORCE_VAL_POS  (4U)\n#define PWM_SW_FORCE_VAL_LEN  (1U)\n#define PWM_SW_FORCE_VAL_MSK  (((1U << PWM_SW_FORCE_VAL_LEN) - 1) << PWM_SW_FORCE_VAL_POS)\n#define PWM_SW_FORCE_VAL_UMSK (~(((1U << PWM_SW_FORCE_VAL_LEN) - 1) << PWM_SW_FORCE_VAL_POS))\n#define PWM_SW_MODE           PWM_SW_MODE\n#define PWM_SW_MODE_POS       (5U)\n#define PWM_SW_MODE_LEN       (1U)\n#define PWM_SW_MODE_MSK       (((1U << PWM_SW_MODE_LEN) - 1) << PWM_SW_MODE_POS)\n#define PWM_SW_MODE_UMSK      (~(((1U << PWM_SW_MODE_LEN) - 1) << PWM_SW_MODE_POS))\n#define PWM_STOP_EN           PWM_STOP_EN\n#define PWM_STOP_EN_POS       (6U)\n#define PWM_STOP_EN_LEN       (1U)\n#define PWM_STOP_EN_MSK       (((1U << PWM_STOP_EN_LEN) - 1) << PWM_STOP_EN_POS)\n#define PWM_STOP_EN_UMSK      (~(((1U << PWM_STOP_EN_LEN) - 1) << PWM_STOP_EN_POS))\n#define PWM_STS_TOP           PWM_STS_TOP\n#define PWM_STS_TOP_POS       (7U)\n#define PWM_STS_TOP_LEN       (1U)\n#define PWM_STS_TOP_MSK       (((1U << PWM_STS_TOP_LEN) - 1) << PWM_STS_TOP_POS)\n#define PWM_STS_TOP_UMSK      (~(((1U << PWM_STS_TOP_LEN) - 1) << PWM_STS_TOP_POS))\n\n/* 0x34 : pwm0_interrupt */\n#define PWM0_INTERRUPT_OFFSET   (0x34)\n#define PWM_INT_PERIOD_CNT      PWM_INT_PERIOD_CNT\n#define PWM_INT_PERIOD_CNT_POS  (0U)\n#define PWM_INT_PERIOD_CNT_LEN  (16U)\n#define PWM_INT_PERIOD_CNT_MSK  (((1U << PWM_INT_PERIOD_CNT_LEN) - 1) << PWM_INT_PERIOD_CNT_POS)\n#define PWM_INT_PERIOD_CNT_UMSK (~(((1U << PWM_INT_PERIOD_CNT_LEN) - 1) << PWM_INT_PERIOD_CNT_POS))\n#define PWM_INT_ENABLE          PWM_INT_ENABLE\n#define PWM_INT_ENABLE_POS      (16U)\n#define PWM_INT_ENABLE_LEN      (1U)\n#define PWM_INT_ENABLE_MSK      (((1U << PWM_INT_ENABLE_LEN) - 1) << PWM_INT_ENABLE_POS)\n#define PWM_INT_ENABLE_UMSK     (~(((1U << PWM_INT_ENABLE_LEN) - 1) << PWM_INT_ENABLE_POS))\n\n/* 0x40 : pwm1_clkdiv */\n#define PWM1_CLKDIV_OFFSET (0x40)\n#define PWM_CLK_DIV        PWM_CLK_DIV\n#define PWM_CLK_DIV_POS    (0U)\n#define PWM_CLK_DIV_LEN    (16U)\n#define PWM_CLK_DIV_MSK    (((1U << PWM_CLK_DIV_LEN) - 1) << PWM_CLK_DIV_POS)\n#define PWM_CLK_DIV_UMSK   (~(((1U << PWM_CLK_DIV_LEN) - 1) << PWM_CLK_DIV_POS))\n\n/* 0x44 : pwm1_thre1 */\n#define PWM1_THRE1_OFFSET (0x44)\n#define PWM_THRE1         PWM_THRE1\n#define PWM_THRE1_POS     (0U)\n#define PWM_THRE1_LEN     (16U)\n#define PWM_THRE1_MSK     (((1U << PWM_THRE1_LEN) - 1) << PWM_THRE1_POS)\n#define PWM_THRE1_UMSK    (~(((1U << PWM_THRE1_LEN) - 1) << PWM_THRE1_POS))\n\n/* 0x48 : pwm1_thre2 */\n#define PWM1_THRE2_OFFSET (0x48)\n#define PWM_THRE2         PWM_THRE2\n#define PWM_THRE2_POS     (0U)\n#define PWM_THRE2_LEN     (16U)\n#define PWM_THRE2_MSK     (((1U << PWM_THRE2_LEN) - 1) << PWM_THRE2_POS)\n#define PWM_THRE2_UMSK    (~(((1U << PWM_THRE2_LEN) - 1) << PWM_THRE2_POS))\n\n/* 0x4C : pwm1_period */\n#define PWM1_PERIOD_OFFSET (0x4C)\n#define PWM_PERIOD         PWM_PERIOD\n#define PWM_PERIOD_POS     (0U)\n#define PWM_PERIOD_LEN     (16U)\n#define PWM_PERIOD_MSK     (((1U << PWM_PERIOD_LEN) - 1) << PWM_PERIOD_POS)\n#define PWM_PERIOD_UMSK    (~(((1U << PWM_PERIOD_LEN) - 1) << PWM_PERIOD_POS))\n\n/* 0x50 : pwm1_config */\n#define PWM1_CONFIG_OFFSET    (0x50)\n#define PWM_REG_CLK_SEL       PWM_REG_CLK_SEL\n#define PWM_REG_CLK_SEL_POS   (0U)\n#define PWM_REG_CLK_SEL_LEN   (2U)\n#define PWM_REG_CLK_SEL_MSK   (((1U << PWM_REG_CLK_SEL_LEN) - 1) << PWM_REG_CLK_SEL_POS)\n#define PWM_REG_CLK_SEL_UMSK  (~(((1U << PWM_REG_CLK_SEL_LEN) - 1) << PWM_REG_CLK_SEL_POS))\n#define PWM_OUT_INV           PWM_OUT_INV\n#define PWM_OUT_INV_POS       (2U)\n#define PWM_OUT_INV_LEN       (1U)\n#define PWM_OUT_INV_MSK       (((1U << PWM_OUT_INV_LEN) - 1) << PWM_OUT_INV_POS)\n#define PWM_OUT_INV_UMSK      (~(((1U << PWM_OUT_INV_LEN) - 1) << PWM_OUT_INV_POS))\n#define PWM_STOP_MODE         PWM_STOP_MODE\n#define PWM_STOP_MODE_POS     (3U)\n#define PWM_STOP_MODE_LEN     (1U)\n#define PWM_STOP_MODE_MSK     (((1U << PWM_STOP_MODE_LEN) - 1) << PWM_STOP_MODE_POS)\n#define PWM_STOP_MODE_UMSK    (~(((1U << PWM_STOP_MODE_LEN) - 1) << PWM_STOP_MODE_POS))\n#define PWM_SW_FORCE_VAL      PWM_SW_FORCE_VAL\n#define PWM_SW_FORCE_VAL_POS  (4U)\n#define PWM_SW_FORCE_VAL_LEN  (1U)\n#define PWM_SW_FORCE_VAL_MSK  (((1U << PWM_SW_FORCE_VAL_LEN) - 1) << PWM_SW_FORCE_VAL_POS)\n#define PWM_SW_FORCE_VAL_UMSK (~(((1U << PWM_SW_FORCE_VAL_LEN) - 1) << PWM_SW_FORCE_VAL_POS))\n#define PWM_SW_MODE           PWM_SW_MODE\n#define PWM_SW_MODE_POS       (5U)\n#define PWM_SW_MODE_LEN       (1U)\n#define PWM_SW_MODE_MSK       (((1U << PWM_SW_MODE_LEN) - 1) << PWM_SW_MODE_POS)\n#define PWM_SW_MODE_UMSK      (~(((1U << PWM_SW_MODE_LEN) - 1) << PWM_SW_MODE_POS))\n#define PWM_STOP_EN           PWM_STOP_EN\n#define PWM_STOP_EN_POS       (6U)\n#define PWM_STOP_EN_LEN       (1U)\n#define PWM_STOP_EN_MSK       (((1U << PWM_STOP_EN_LEN) - 1) << PWM_STOP_EN_POS)\n#define PWM_STOP_EN_UMSK      (~(((1U << PWM_STOP_EN_LEN) - 1) << PWM_STOP_EN_POS))\n#define PWM_STS_TOP           PWM_STS_TOP\n#define PWM_STS_TOP_POS       (7U)\n#define PWM_STS_TOP_LEN       (1U)\n#define PWM_STS_TOP_MSK       (((1U << PWM_STS_TOP_LEN) - 1) << PWM_STS_TOP_POS)\n#define PWM_STS_TOP_UMSK      (~(((1U << PWM_STS_TOP_LEN) - 1) << PWM_STS_TOP_POS))\n\n/* 0x54 : pwm1_interrupt */\n#define PWM1_INTERRUPT_OFFSET   (0x54)\n#define PWM_INT_PERIOD_CNT      PWM_INT_PERIOD_CNT\n#define PWM_INT_PERIOD_CNT_POS  (0U)\n#define PWM_INT_PERIOD_CNT_LEN  (16U)\n#define PWM_INT_PERIOD_CNT_MSK  (((1U << PWM_INT_PERIOD_CNT_LEN) - 1) << PWM_INT_PERIOD_CNT_POS)\n#define PWM_INT_PERIOD_CNT_UMSK (~(((1U << PWM_INT_PERIOD_CNT_LEN) - 1) << PWM_INT_PERIOD_CNT_POS))\n#define PWM_INT_ENABLE          PWM_INT_ENABLE\n#define PWM_INT_ENABLE_POS      (16U)\n#define PWM_INT_ENABLE_LEN      (1U)\n#define PWM_INT_ENABLE_MSK      (((1U << PWM_INT_ENABLE_LEN) - 1) << PWM_INT_ENABLE_POS)\n#define PWM_INT_ENABLE_UMSK     (~(((1U << PWM_INT_ENABLE_LEN) - 1) << PWM_INT_ENABLE_POS))\n\n/* 0x60 : pwm2_clkdiv */\n#define PWM2_CLKDIV_OFFSET (0x60)\n#define PWM_CLK_DIV        PWM_CLK_DIV\n#define PWM_CLK_DIV_POS    (0U)\n#define PWM_CLK_DIV_LEN    (16U)\n#define PWM_CLK_DIV_MSK    (((1U << PWM_CLK_DIV_LEN) - 1) << PWM_CLK_DIV_POS)\n#define PWM_CLK_DIV_UMSK   (~(((1U << PWM_CLK_DIV_LEN) - 1) << PWM_CLK_DIV_POS))\n\n/* 0x64 : pwm2_thre1 */\n#define PWM2_THRE1_OFFSET (0x64)\n#define PWM_THRE1         PWM_THRE1\n#define PWM_THRE1_POS     (0U)\n#define PWM_THRE1_LEN     (16U)\n#define PWM_THRE1_MSK     (((1U << PWM_THRE1_LEN) - 1) << PWM_THRE1_POS)\n#define PWM_THRE1_UMSK    (~(((1U << PWM_THRE1_LEN) - 1) << PWM_THRE1_POS))\n\n/* 0x68 : pwm2_thre2 */\n#define PWM2_THRE2_OFFSET (0x68)\n#define PWM_THRE2         PWM_THRE2\n#define PWM_THRE2_POS     (0U)\n#define PWM_THRE2_LEN     (16U)\n#define PWM_THRE2_MSK     (((1U << PWM_THRE2_LEN) - 1) << PWM_THRE2_POS)\n#define PWM_THRE2_UMSK    (~(((1U << PWM_THRE2_LEN) - 1) << PWM_THRE2_POS))\n\n/* 0x6C : pwm2_period */\n#define PWM2_PERIOD_OFFSET (0x6C)\n#define PWM_PERIOD         PWM_PERIOD\n#define PWM_PERIOD_POS     (0U)\n#define PWM_PERIOD_LEN     (16U)\n#define PWM_PERIOD_MSK     (((1U << PWM_PERIOD_LEN) - 1) << PWM_PERIOD_POS)\n#define PWM_PERIOD_UMSK    (~(((1U << PWM_PERIOD_LEN) - 1) << PWM_PERIOD_POS))\n\n/* 0x70 : pwm2_config */\n#define PWM2_CONFIG_OFFSET    (0x70)\n#define PWM_REG_CLK_SEL       PWM_REG_CLK_SEL\n#define PWM_REG_CLK_SEL_POS   (0U)\n#define PWM_REG_CLK_SEL_LEN   (2U)\n#define PWM_REG_CLK_SEL_MSK   (((1U << PWM_REG_CLK_SEL_LEN) - 1) << PWM_REG_CLK_SEL_POS)\n#define PWM_REG_CLK_SEL_UMSK  (~(((1U << PWM_REG_CLK_SEL_LEN) - 1) << PWM_REG_CLK_SEL_POS))\n#define PWM_OUT_INV           PWM_OUT_INV\n#define PWM_OUT_INV_POS       (2U)\n#define PWM_OUT_INV_LEN       (1U)\n#define PWM_OUT_INV_MSK       (((1U << PWM_OUT_INV_LEN) - 1) << PWM_OUT_INV_POS)\n#define PWM_OUT_INV_UMSK      (~(((1U << PWM_OUT_INV_LEN) - 1) << PWM_OUT_INV_POS))\n#define PWM_STOP_MODE         PWM_STOP_MODE\n#define PWM_STOP_MODE_POS     (3U)\n#define PWM_STOP_MODE_LEN     (1U)\n#define PWM_STOP_MODE_MSK     (((1U << PWM_STOP_MODE_LEN) - 1) << PWM_STOP_MODE_POS)\n#define PWM_STOP_MODE_UMSK    (~(((1U << PWM_STOP_MODE_LEN) - 1) << PWM_STOP_MODE_POS))\n#define PWM_SW_FORCE_VAL      PWM_SW_FORCE_VAL\n#define PWM_SW_FORCE_VAL_POS  (4U)\n#define PWM_SW_FORCE_VAL_LEN  (1U)\n#define PWM_SW_FORCE_VAL_MSK  (((1U << PWM_SW_FORCE_VAL_LEN) - 1) << PWM_SW_FORCE_VAL_POS)\n#define PWM_SW_FORCE_VAL_UMSK (~(((1U << PWM_SW_FORCE_VAL_LEN) - 1) << PWM_SW_FORCE_VAL_POS))\n#define PWM_SW_MODE           PWM_SW_MODE\n#define PWM_SW_MODE_POS       (5U)\n#define PWM_SW_MODE_LEN       (1U)\n#define PWM_SW_MODE_MSK       (((1U << PWM_SW_MODE_LEN) - 1) << PWM_SW_MODE_POS)\n#define PWM_SW_MODE_UMSK      (~(((1U << PWM_SW_MODE_LEN) - 1) << PWM_SW_MODE_POS))\n#define PWM_STOP_EN           PWM_STOP_EN\n#define PWM_STOP_EN_POS       (6U)\n#define PWM_STOP_EN_LEN       (1U)\n#define PWM_STOP_EN_MSK       (((1U << PWM_STOP_EN_LEN) - 1) << PWM_STOP_EN_POS)\n#define PWM_STOP_EN_UMSK      (~(((1U << PWM_STOP_EN_LEN) - 1) << PWM_STOP_EN_POS))\n#define PWM_STS_TOP           PWM_STS_TOP\n#define PWM_STS_TOP_POS       (7U)\n#define PWM_STS_TOP_LEN       (1U)\n#define PWM_STS_TOP_MSK       (((1U << PWM_STS_TOP_LEN) - 1) << PWM_STS_TOP_POS)\n#define PWM_STS_TOP_UMSK      (~(((1U << PWM_STS_TOP_LEN) - 1) << PWM_STS_TOP_POS))\n\n/* 0x74 : pwm2_interrupt */\n#define PWM2_INTERRUPT_OFFSET   (0x74)\n#define PWM_INT_PERIOD_CNT      PWM_INT_PERIOD_CNT\n#define PWM_INT_PERIOD_CNT_POS  (0U)\n#define PWM_INT_PERIOD_CNT_LEN  (16U)\n#define PWM_INT_PERIOD_CNT_MSK  (((1U << PWM_INT_PERIOD_CNT_LEN) - 1) << PWM_INT_PERIOD_CNT_POS)\n#define PWM_INT_PERIOD_CNT_UMSK (~(((1U << PWM_INT_PERIOD_CNT_LEN) - 1) << PWM_INT_PERIOD_CNT_POS))\n#define PWM_INT_ENABLE          PWM_INT_ENABLE\n#define PWM_INT_ENABLE_POS      (16U)\n#define PWM_INT_ENABLE_LEN      (1U)\n#define PWM_INT_ENABLE_MSK      (((1U << PWM_INT_ENABLE_LEN) - 1) << PWM_INT_ENABLE_POS)\n#define PWM_INT_ENABLE_UMSK     (~(((1U << PWM_INT_ENABLE_LEN) - 1) << PWM_INT_ENABLE_POS))\n\n/* 0x80 : pwm3_clkdiv */\n#define PWM3_CLKDIV_OFFSET (0x80)\n#define PWM_CLK_DIV        PWM_CLK_DIV\n#define PWM_CLK_DIV_POS    (0U)\n#define PWM_CLK_DIV_LEN    (16U)\n#define PWM_CLK_DIV_MSK    (((1U << PWM_CLK_DIV_LEN) - 1) << PWM_CLK_DIV_POS)\n#define PWM_CLK_DIV_UMSK   (~(((1U << PWM_CLK_DIV_LEN) - 1) << PWM_CLK_DIV_POS))\n\n/* 0x84 : pwm3_thre1 */\n#define PWM3_THRE1_OFFSET (0x84)\n#define PWM_THRE1         PWM_THRE1\n#define PWM_THRE1_POS     (0U)\n#define PWM_THRE1_LEN     (16U)\n#define PWM_THRE1_MSK     (((1U << PWM_THRE1_LEN) - 1) << PWM_THRE1_POS)\n#define PWM_THRE1_UMSK    (~(((1U << PWM_THRE1_LEN) - 1) << PWM_THRE1_POS))\n\n/* 0x88 : pwm3_thre2 */\n#define PWM3_THRE2_OFFSET (0x88)\n#define PWM_THRE2         PWM_THRE2\n#define PWM_THRE2_POS     (0U)\n#define PWM_THRE2_LEN     (16U)\n#define PWM_THRE2_MSK     (((1U << PWM_THRE2_LEN) - 1) << PWM_THRE2_POS)\n#define PWM_THRE2_UMSK    (~(((1U << PWM_THRE2_LEN) - 1) << PWM_THRE2_POS))\n\n/* 0x8C : pwm3_period */\n#define PWM3_PERIOD_OFFSET (0x8C)\n#define PWM_PERIOD         PWM_PERIOD\n#define PWM_PERIOD_POS     (0U)\n#define PWM_PERIOD_LEN     (16U)\n#define PWM_PERIOD_MSK     (((1U << PWM_PERIOD_LEN) - 1) << PWM_PERIOD_POS)\n#define PWM_PERIOD_UMSK    (~(((1U << PWM_PERIOD_LEN) - 1) << PWM_PERIOD_POS))\n\n/* 0x90 : pwm3_config */\n#define PWM3_CONFIG_OFFSET    (0x90)\n#define PWM_REG_CLK_SEL       PWM_REG_CLK_SEL\n#define PWM_REG_CLK_SEL_POS   (0U)\n#define PWM_REG_CLK_SEL_LEN   (2U)\n#define PWM_REG_CLK_SEL_MSK   (((1U << PWM_REG_CLK_SEL_LEN) - 1) << PWM_REG_CLK_SEL_POS)\n#define PWM_REG_CLK_SEL_UMSK  (~(((1U << PWM_REG_CLK_SEL_LEN) - 1) << PWM_REG_CLK_SEL_POS))\n#define PWM_OUT_INV           PWM_OUT_INV\n#define PWM_OUT_INV_POS       (2U)\n#define PWM_OUT_INV_LEN       (1U)\n#define PWM_OUT_INV_MSK       (((1U << PWM_OUT_INV_LEN) - 1) << PWM_OUT_INV_POS)\n#define PWM_OUT_INV_UMSK      (~(((1U << PWM_OUT_INV_LEN) - 1) << PWM_OUT_INV_POS))\n#define PWM_STOP_MODE         PWM_STOP_MODE\n#define PWM_STOP_MODE_POS     (3U)\n#define PWM_STOP_MODE_LEN     (1U)\n#define PWM_STOP_MODE_MSK     (((1U << PWM_STOP_MODE_LEN) - 1) << PWM_STOP_MODE_POS)\n#define PWM_STOP_MODE_UMSK    (~(((1U << PWM_STOP_MODE_LEN) - 1) << PWM_STOP_MODE_POS))\n#define PWM_SW_FORCE_VAL      PWM_SW_FORCE_VAL\n#define PWM_SW_FORCE_VAL_POS  (4U)\n#define PWM_SW_FORCE_VAL_LEN  (1U)\n#define PWM_SW_FORCE_VAL_MSK  (((1U << PWM_SW_FORCE_VAL_LEN) - 1) << PWM_SW_FORCE_VAL_POS)\n#define PWM_SW_FORCE_VAL_UMSK (~(((1U << PWM_SW_FORCE_VAL_LEN) - 1) << PWM_SW_FORCE_VAL_POS))\n#define PWM_SW_MODE           PWM_SW_MODE\n#define PWM_SW_MODE_POS       (5U)\n#define PWM_SW_MODE_LEN       (1U)\n#define PWM_SW_MODE_MSK       (((1U << PWM_SW_MODE_LEN) - 1) << PWM_SW_MODE_POS)\n#define PWM_SW_MODE_UMSK      (~(((1U << PWM_SW_MODE_LEN) - 1) << PWM_SW_MODE_POS))\n#define PWM_STOP_EN           PWM_STOP_EN\n#define PWM_STOP_EN_POS       (6U)\n#define PWM_STOP_EN_LEN       (1U)\n#define PWM_STOP_EN_MSK       (((1U << PWM_STOP_EN_LEN) - 1) << PWM_STOP_EN_POS)\n#define PWM_STOP_EN_UMSK      (~(((1U << PWM_STOP_EN_LEN) - 1) << PWM_STOP_EN_POS))\n#define PWM_STS_TOP           PWM_STS_TOP\n#define PWM_STS_TOP_POS       (7U)\n#define PWM_STS_TOP_LEN       (1U)\n#define PWM_STS_TOP_MSK       (((1U << PWM_STS_TOP_LEN) - 1) << PWM_STS_TOP_POS)\n#define PWM_STS_TOP_UMSK      (~(((1U << PWM_STS_TOP_LEN) - 1) << PWM_STS_TOP_POS))\n\n/* 0x94 : pwm3_interrupt */\n#define PWM3_INTERRUPT_OFFSET   (0x94)\n#define PWM_INT_PERIOD_CNT      PWM_INT_PERIOD_CNT\n#define PWM_INT_PERIOD_CNT_POS  (0U)\n#define PWM_INT_PERIOD_CNT_LEN  (16U)\n#define PWM_INT_PERIOD_CNT_MSK  (((1U << PWM_INT_PERIOD_CNT_LEN) - 1) << PWM_INT_PERIOD_CNT_POS)\n#define PWM_INT_PERIOD_CNT_UMSK (~(((1U << PWM_INT_PERIOD_CNT_LEN) - 1) << PWM_INT_PERIOD_CNT_POS))\n#define PWM_INT_ENABLE          PWM_INT_ENABLE\n#define PWM_INT_ENABLE_POS      (16U)\n#define PWM_INT_ENABLE_LEN      (1U)\n#define PWM_INT_ENABLE_MSK      (((1U << PWM_INT_ENABLE_LEN) - 1) << PWM_INT_ENABLE_POS)\n#define PWM_INT_ENABLE_UMSK     (~(((1U << PWM_INT_ENABLE_LEN) - 1) << PWM_INT_ENABLE_POS))\n\n/* 0xA0 : pwm4_clkdiv */\n#define PWM4_CLKDIV_OFFSET (0xA0)\n#define PWM_CLK_DIV        PWM_CLK_DIV\n#define PWM_CLK_DIV_POS    (0U)\n#define PWM_CLK_DIV_LEN    (16U)\n#define PWM_CLK_DIV_MSK    (((1U << PWM_CLK_DIV_LEN) - 1) << PWM_CLK_DIV_POS)\n#define PWM_CLK_DIV_UMSK   (~(((1U << PWM_CLK_DIV_LEN) - 1) << PWM_CLK_DIV_POS))\n\n/* 0xA4 : pwm4_thre1 */\n#define PWM4_THRE1_OFFSET (0xA4)\n#define PWM_THRE1         PWM_THRE1\n#define PWM_THRE1_POS     (0U)\n#define PWM_THRE1_LEN     (16U)\n#define PWM_THRE1_MSK     (((1U << PWM_THRE1_LEN) - 1) << PWM_THRE1_POS)\n#define PWM_THRE1_UMSK    (~(((1U << PWM_THRE1_LEN) - 1) << PWM_THRE1_POS))\n\n/* 0xA8 : pwm4_thre2 */\n#define PWM4_THRE2_OFFSET (0xA8)\n#define PWM_THRE2         PWM_THRE2\n#define PWM_THRE2_POS     (0U)\n#define PWM_THRE2_LEN     (16U)\n#define PWM_THRE2_MSK     (((1U << PWM_THRE2_LEN) - 1) << PWM_THRE2_POS)\n#define PWM_THRE2_UMSK    (~(((1U << PWM_THRE2_LEN) - 1) << PWM_THRE2_POS))\n\n/* 0xAC : pwm4_period */\n#define PWM4_PERIOD_OFFSET (0xAC)\n#define PWM_PERIOD         PWM_PERIOD\n#define PWM_PERIOD_POS     (0U)\n#define PWM_PERIOD_LEN     (16U)\n#define PWM_PERIOD_MSK     (((1U << PWM_PERIOD_LEN) - 1) << PWM_PERIOD_POS)\n#define PWM_PERIOD_UMSK    (~(((1U << PWM_PERIOD_LEN) - 1) << PWM_PERIOD_POS))\n\n/* 0xB0 : pwm4_config */\n#define PWM4_CONFIG_OFFSET    (0xB0)\n#define PWM_REG_CLK_SEL       PWM_REG_CLK_SEL\n#define PWM_REG_CLK_SEL_POS   (0U)\n#define PWM_REG_CLK_SEL_LEN   (2U)\n#define PWM_REG_CLK_SEL_MSK   (((1U << PWM_REG_CLK_SEL_LEN) - 1) << PWM_REG_CLK_SEL_POS)\n#define PWM_REG_CLK_SEL_UMSK  (~(((1U << PWM_REG_CLK_SEL_LEN) - 1) << PWM_REG_CLK_SEL_POS))\n#define PWM_OUT_INV           PWM_OUT_INV\n#define PWM_OUT_INV_POS       (2U)\n#define PWM_OUT_INV_LEN       (1U)\n#define PWM_OUT_INV_MSK       (((1U << PWM_OUT_INV_LEN) - 1) << PWM_OUT_INV_POS)\n#define PWM_OUT_INV_UMSK      (~(((1U << PWM_OUT_INV_LEN) - 1) << PWM_OUT_INV_POS))\n#define PWM_STOP_MODE         PWM_STOP_MODE\n#define PWM_STOP_MODE_POS     (3U)\n#define PWM_STOP_MODE_LEN     (1U)\n#define PWM_STOP_MODE_MSK     (((1U << PWM_STOP_MODE_LEN) - 1) << PWM_STOP_MODE_POS)\n#define PWM_STOP_MODE_UMSK    (~(((1U << PWM_STOP_MODE_LEN) - 1) << PWM_STOP_MODE_POS))\n#define PWM_SW_FORCE_VAL      PWM_SW_FORCE_VAL\n#define PWM_SW_FORCE_VAL_POS  (4U)\n#define PWM_SW_FORCE_VAL_LEN  (1U)\n#define PWM_SW_FORCE_VAL_MSK  (((1U << PWM_SW_FORCE_VAL_LEN) - 1) << PWM_SW_FORCE_VAL_POS)\n#define PWM_SW_FORCE_VAL_UMSK (~(((1U << PWM_SW_FORCE_VAL_LEN) - 1) << PWM_SW_FORCE_VAL_POS))\n#define PWM_SW_MODE           PWM_SW_MODE\n#define PWM_SW_MODE_POS       (5U)\n#define PWM_SW_MODE_LEN       (1U)\n#define PWM_SW_MODE_MSK       (((1U << PWM_SW_MODE_LEN) - 1) << PWM_SW_MODE_POS)\n#define PWM_SW_MODE_UMSK      (~(((1U << PWM_SW_MODE_LEN) - 1) << PWM_SW_MODE_POS))\n#define PWM_STOP_EN           PWM_STOP_EN\n#define PWM_STOP_EN_POS       (6U)\n#define PWM_STOP_EN_LEN       (1U)\n#define PWM_STOP_EN_MSK       (((1U << PWM_STOP_EN_LEN) - 1) << PWM_STOP_EN_POS)\n#define PWM_STOP_EN_UMSK      (~(((1U << PWM_STOP_EN_LEN) - 1) << PWM_STOP_EN_POS))\n#define PWM_STS_TOP           PWM_STS_TOP\n#define PWM_STS_TOP_POS       (7U)\n#define PWM_STS_TOP_LEN       (1U)\n#define PWM_STS_TOP_MSK       (((1U << PWM_STS_TOP_LEN) - 1) << PWM_STS_TOP_POS)\n#define PWM_STS_TOP_UMSK      (~(((1U << PWM_STS_TOP_LEN) - 1) << PWM_STS_TOP_POS))\n\n/* 0xB4 : pwm4_interrupt */\n#define PWM4_INTERRUPT_OFFSET   (0xB4)\n#define PWM_INT_PERIOD_CNT      PWM_INT_PERIOD_CNT\n#define PWM_INT_PERIOD_CNT_POS  (0U)\n#define PWM_INT_PERIOD_CNT_LEN  (16U)\n#define PWM_INT_PERIOD_CNT_MSK  (((1U << PWM_INT_PERIOD_CNT_LEN) - 1) << PWM_INT_PERIOD_CNT_POS)\n#define PWM_INT_PERIOD_CNT_UMSK (~(((1U << PWM_INT_PERIOD_CNT_LEN) - 1) << PWM_INT_PERIOD_CNT_POS))\n#define PWM_INT_ENABLE          PWM_INT_ENABLE\n#define PWM_INT_ENABLE_POS      (16U)\n#define PWM_INT_ENABLE_LEN      (1U)\n#define PWM_INT_ENABLE_MSK      (((1U << PWM_INT_ENABLE_LEN) - 1) << PWM_INT_ENABLE_POS)\n#define PWM_INT_ENABLE_UMSK     (~(((1U << PWM_INT_ENABLE_LEN) - 1) << PWM_INT_ENABLE_POS))\n\nstruct pwm_reg {\n    /* 0x0 : pwm_int_config */\n    union {\n        struct\n        {\n            uint32_t pwm_interrupt_sts : 6;  /* [ 5: 0],          r,        0x0 */\n            uint32_t reserved_6_7      : 2;  /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t pwm_int_clear     : 6;  /* [13: 8],          w,        0x0 */\n            uint32_t reserved_14_31    : 18; /* [31:14],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm_int_config;\n\n    /* 0x4  reserved */\n    uint8_t RESERVED0x4[28];\n\n    /* 0x20 : pwm0_clkdiv */\n    union {\n        struct\n        {\n            uint32_t pwm_clk_div    : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm0_clkdiv;\n\n    /* 0x24 : pwm0_thre1 */\n    union {\n        struct\n        {\n            uint32_t pwm_thre1      : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm0_thre1;\n\n    /* 0x28 : pwm0_thre2 */\n    union {\n        struct\n        {\n            uint32_t pwm_thre2      : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm0_thre2;\n\n    /* 0x2C : pwm0_period */\n    union {\n        struct\n        {\n            uint32_t pwm_period     : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm0_period;\n\n    /* 0x30 : pwm0_config */\n    union {\n        struct\n        {\n            uint32_t reg_clk_sel      : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t pwm_out_inv      : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t pwm_stop_mode    : 1;  /* [    3],        r/w,        0x1 */\n            uint32_t pwm_sw_force_val : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t pwm_sw_mode      : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t pwm_stop_en      : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t pwm_sts_top      : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31    : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm0_config;\n\n    /* 0x34 : pwm0_interrupt */\n    union {\n        struct\n        {\n            uint32_t pwm_int_period_cnt : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t pwm_int_enable     : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t reserved_17_31     : 15; /* [31:17],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm0_interrupt;\n\n    /* 0x38  reserved */\n    uint8_t RESERVED0x38[8];\n\n    /* 0x40 : pwm1_clkdiv */\n    union {\n        struct\n        {\n            uint32_t pwm_clk_div    : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm1_clkdiv;\n\n    /* 0x44 : pwm1_thre1 */\n    union {\n        struct\n        {\n            uint32_t pwm_thre1      : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm1_thre1;\n\n    /* 0x48 : pwm1_thre2 */\n    union {\n        struct\n        {\n            uint32_t pwm_thre2      : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm1_thre2;\n\n    /* 0x4C : pwm1_period */\n    union {\n        struct\n        {\n            uint32_t pwm_period     : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm1_period;\n\n    /* 0x50 : pwm1_config */\n    union {\n        struct\n        {\n            uint32_t reg_clk_sel      : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t pwm_out_inv      : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t pwm_stop_mode    : 1;  /* [    3],        r/w,        0x1 */\n            uint32_t pwm_sw_force_val : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t pwm_sw_mode      : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t pwm_stop_en      : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t pwm_sts_top      : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31    : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm1_config;\n\n    /* 0x54 : pwm1_interrupt */\n    union {\n        struct\n        {\n            uint32_t pwm_int_period_cnt : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t pwm_int_enable     : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t reserved_17_31     : 15; /* [31:17],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm1_interrupt;\n\n    /* 0x58  reserved */\n    uint8_t RESERVED0x58[8];\n\n    /* 0x60 : pwm2_clkdiv */\n    union {\n        struct\n        {\n            uint32_t pwm_clk_div    : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm2_clkdiv;\n\n    /* 0x64 : pwm2_thre1 */\n    union {\n        struct\n        {\n            uint32_t pwm_thre1      : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm2_thre1;\n\n    /* 0x68 : pwm2_thre2 */\n    union {\n        struct\n        {\n            uint32_t pwm_thre2      : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm2_thre2;\n\n    /* 0x6C : pwm2_period */\n    union {\n        struct\n        {\n            uint32_t pwm_period     : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm2_period;\n\n    /* 0x70 : pwm2_config */\n    union {\n        struct\n        {\n            uint32_t reg_clk_sel      : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t pwm_out_inv      : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t pwm_stop_mode    : 1;  /* [    3],        r/w,        0x1 */\n            uint32_t pwm_sw_force_val : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t pwm_sw_mode      : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t pwm_stop_en      : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t pwm_sts_top      : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31    : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm2_config;\n\n    /* 0x74 : pwm2_interrupt */\n    union {\n        struct\n        {\n            uint32_t pwm_int_period_cnt : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t pwm_int_enable     : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t reserved_17_31     : 15; /* [31:17],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm2_interrupt;\n\n    /* 0x78  reserved */\n    uint8_t RESERVED0x78[8];\n\n    /* 0x80 : pwm3_clkdiv */\n    union {\n        struct\n        {\n            uint32_t pwm_clk_div    : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm3_clkdiv;\n\n    /* 0x84 : pwm3_thre1 */\n    union {\n        struct\n        {\n            uint32_t pwm_thre1      : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm3_thre1;\n\n    /* 0x88 : pwm3_thre2 */\n    union {\n        struct\n        {\n            uint32_t pwm_thre2      : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm3_thre2;\n\n    /* 0x8C : pwm3_period */\n    union {\n        struct\n        {\n            uint32_t pwm_period     : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm3_period;\n\n    /* 0x90 : pwm3_config */\n    union {\n        struct\n        {\n            uint32_t reg_clk_sel      : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t pwm_out_inv      : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t pwm_stop_mode    : 1;  /* [    3],        r/w,        0x1 */\n            uint32_t pwm_sw_force_val : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t pwm_sw_mode      : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t pwm_stop_en      : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t pwm_sts_top      : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31    : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm3_config;\n\n    /* 0x94 : pwm3_interrupt */\n    union {\n        struct\n        {\n            uint32_t pwm_int_period_cnt : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t pwm_int_enable     : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t reserved_17_31     : 15; /* [31:17],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm3_interrupt;\n\n    /* 0x98  reserved */\n    uint8_t RESERVED0x98[8];\n\n    /* 0xA0 : pwm4_clkdiv */\n    union {\n        struct\n        {\n            uint32_t pwm_clk_div    : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm4_clkdiv;\n\n    /* 0xA4 : pwm4_thre1 */\n    union {\n        struct\n        {\n            uint32_t pwm_thre1      : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm4_thre1;\n\n    /* 0xA8 : pwm4_thre2 */\n    union {\n        struct\n        {\n            uint32_t pwm_thre2      : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm4_thre2;\n\n    /* 0xAC : pwm4_period */\n    union {\n        struct\n        {\n            uint32_t pwm_period     : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm4_period;\n\n    /* 0xB0 : pwm4_config */\n    union {\n        struct\n        {\n            uint32_t reg_clk_sel      : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t pwm_out_inv      : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t pwm_stop_mode    : 1;  /* [    3],        r/w,        0x1 */\n            uint32_t pwm_sw_force_val : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t pwm_sw_mode      : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t pwm_stop_en      : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t pwm_sts_top      : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31    : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm4_config;\n\n    /* 0xB4 : pwm4_interrupt */\n    union {\n        struct\n        {\n            uint32_t pwm_int_period_cnt : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t pwm_int_enable     : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t reserved_17_31     : 15; /* [31:17],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm4_interrupt;\n};\n\ntypedef volatile struct pwm_reg pwm_reg_t;\n\n/*Following is reg patch*/\n\n/* 0x0 : pwm_clkdiv */\n#define PWM_CLKDIV_OFFSET (0x0)\n#define PWM_CLK_DIV       PWM_CLK_DIV\n#define PWM_CLK_DIV_POS   (0U)\n#define PWM_CLK_DIV_LEN   (16U)\n#define PWM_CLK_DIV_MSK   (((1U << PWM_CLK_DIV_LEN) - 1) << PWM_CLK_DIV_POS)\n#define PWM_CLK_DIV_UMSK  (~(((1U << PWM_CLK_DIV_LEN) - 1) << PWM_CLK_DIV_POS))\n\n/* 0x4 : pwm_thre1 */\n#define PWM_THRE1_OFFSET (0x4)\n#define PWM_THRE1        PWM_THRE1\n#define PWM_THRE1_POS    (0U)\n#define PWM_THRE1_LEN    (16U)\n#define PWM_THRE1_MSK    (((1U << PWM_THRE1_LEN) - 1) << PWM_THRE1_POS)\n#define PWM_THRE1_UMSK   (~(((1U << PWM_THRE1_LEN) - 1) << PWM_THRE1_POS))\n\n/* 0x8 : pwm_thre2 */\n#define PWM_THRE2_OFFSET (0x8)\n#define PWM_THRE2        PWM_THRE2\n#define PWM_THRE2_POS    (0U)\n#define PWM_THRE2_LEN    (16U)\n#define PWM_THRE2_MSK    (((1U << PWM_THRE2_LEN) - 1) << PWM_THRE2_POS)\n#define PWM_THRE2_UMSK   (~(((1U << PWM_THRE2_LEN) - 1) << PWM_THRE2_POS))\n\n/* 0xc : pwm_period */\n#define PWM_PERIOD_OFFSET (0xc)\n#define PWM_PERIOD        PWM_PERIOD\n#define PWM_PERIOD_POS    (0U)\n#define PWM_PERIOD_LEN    (16U)\n#define PWM_PERIOD_MSK    (((1U << PWM_PERIOD_LEN) - 1) << PWM_PERIOD_POS)\n#define PWM_PERIOD_UMSK   (~(((1U << PWM_PERIOD_LEN) - 1) << PWM_PERIOD_POS))\n\n/* 0x10 : pwm_config */\n#define PWM_CONFIG_OFFSET     (0x10)\n#define PWM_REG_CLK_SEL       PWM_REG_CLK_SEL\n#define PWM_REG_CLK_SEL_POS   (0U)\n#define PWM_REG_CLK_SEL_LEN   (2U)\n#define PWM_REG_CLK_SEL_MSK   (((1U << PWM_REG_CLK_SEL_LEN) - 1) << PWM_REG_CLK_SEL_POS)\n#define PWM_REG_CLK_SEL_UMSK  (~(((1U << PWM_REG_CLK_SEL_LEN) - 1) << PWM_REG_CLK_SEL_POS))\n#define PWM_OUT_INV           PWM_OUT_INV\n#define PWM_OUT_INV_POS       (2U)\n#define PWM_OUT_INV_LEN       (1U)\n#define PWM_OUT_INV_MSK       (((1U << PWM_OUT_INV_LEN) - 1) << PWM_OUT_INV_POS)\n#define PWM_OUT_INV_UMSK      (~(((1U << PWM_OUT_INV_LEN) - 1) << PWM_OUT_INV_POS))\n#define PWM_STOP_MODE         PWM_STOP_MODE\n#define PWM_STOP_MODE_POS     (3U)\n#define PWM_STOP_MODE_LEN     (1U)\n#define PWM_STOP_MODE_MSK     (((1U << PWM_STOP_MODE_LEN) - 1) << PWM_STOP_MODE_POS)\n#define PWM_STOP_MODE_UMSK    (~(((1U << PWM_STOP_MODE_LEN) - 1) << PWM_STOP_MODE_POS))\n#define PWM_SW_FORCE_VAL      PWM_SW_FORCE_VAL\n#define PWM_SW_FORCE_VAL_POS  (4U)\n#define PWM_SW_FORCE_VAL_LEN  (1U)\n#define PWM_SW_FORCE_VAL_MSK  (((1U << PWM_SW_FORCE_VAL_LEN) - 1) << PWM_SW_FORCE_VAL_POS)\n#define PWM_SW_FORCE_VAL_UMSK (~(((1U << PWM_SW_FORCE_VAL_LEN) - 1) << PWM_SW_FORCE_VAL_POS))\n#define PWM_SW_MODE           PWM_SW_MODE\n#define PWM_SW_MODE_POS       (5U)\n#define PWM_SW_MODE_LEN       (1U)\n#define PWM_SW_MODE_MSK       (((1U << PWM_SW_MODE_LEN) - 1) << PWM_SW_MODE_POS)\n#define PWM_SW_MODE_UMSK      (~(((1U << PWM_SW_MODE_LEN) - 1) << PWM_SW_MODE_POS))\n#define PWM_STOP_EN           PWM_STOP_EN\n#define PWM_STOP_EN_POS       (6U)\n#define PWM_STOP_EN_LEN       (1U)\n#define PWM_STOP_EN_MSK       (((1U << PWM_STOP_EN_LEN) - 1) << PWM_STOP_EN_POS)\n#define PWM_STOP_EN_UMSK      (~(((1U << PWM_STOP_EN_LEN) - 1) << PWM_STOP_EN_POS))\n#define PWM_STS_TOP           PWM_STS_TOP\n#define PWM_STS_TOP_POS       (7U)\n#define PWM_STS_TOP_LEN       (1U)\n#define PWM_STS_TOP_MSK       (((1U << PWM_STS_TOP_LEN) - 1) << PWM_STS_TOP_POS)\n#define PWM_STS_TOP_UMSK      (~(((1U << PWM_STS_TOP_LEN) - 1) << PWM_STS_TOP_POS))\n\n/* 0x14 : pwm_interrupt */\n#define PWM_INTERRUPT_OFFSET    (0x14)\n#define PWM_INT_PERIOD_CNT      PWM_INT_PERIOD_CNT\n#define PWM_INT_PERIOD_CNT_POS  (0U)\n#define PWM_INT_PERIOD_CNT_LEN  (16U)\n#define PWM_INT_PERIOD_CNT_MSK  (((1U << PWM_INT_PERIOD_CNT_LEN) - 1) << PWM_INT_PERIOD_CNT_POS)\n#define PWM_INT_PERIOD_CNT_UMSK (~(((1U << PWM_INT_PERIOD_CNT_LEN) - 1) << PWM_INT_PERIOD_CNT_POS))\n#define PWM_INT_ENABLE          PWM_INT_ENABLE\n#define PWM_INT_ENABLE_POS      (16U)\n#define PWM_INT_ENABLE_LEN      (1U)\n#define PWM_INT_ENABLE_MSK      (((1U << PWM_INT_ENABLE_LEN) - 1) << PWM_INT_ENABLE_POS)\n#define PWM_INT_ENABLE_UMSK     (~(((1U << PWM_INT_ENABLE_LEN) - 1) << PWM_INT_ENABLE_POS))\n\nstruct pwm_channel_reg {\n    /* 0x0 : pwm_clkdiv */\n    union {\n        struct\n        {\n            uint32_t pwm_clk_div    : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm_clkdiv;\n\n    /* 0x4 : pwm_thre1 */\n    union {\n        struct\n        {\n            uint32_t pwm_thre1      : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm_thre1;\n\n    /* 0x8 : pwm_thre2 */\n    union {\n        struct\n        {\n            uint32_t pwm_thre2      : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm_thre2;\n\n    /* 0xc : pwm_period */\n    union {\n        struct\n        {\n            uint32_t pwm_period     : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm_period;\n\n    /* 0x10 : pwm_config */\n    union {\n        struct\n        {\n            uint32_t reg_clk_sel      : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t pwm_out_inv      : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t pwm_stop_mode    : 1;  /* [    3],        r/w,        0x1 */\n            uint32_t pwm_sw_force_val : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t pwm_sw_mode      : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t pwm_stop_en      : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t pwm_sts_top      : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31    : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm_config;\n\n    /* 0x14 : pwm_interrupt */\n    union {\n        struct\n        {\n            uint32_t pwm_int_period_cnt : 16; /* [15: 0],        r/w,        0x0 */\n            uint32_t pwm_int_enable     : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t reserved_17_31     : 15; /* [31:17],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } pwm_interrupt;\n};\n\ntypedef volatile struct pwm_channel_reg pwm_channel_reg_t;\n\n#define PWM_CHANNEL_OFFSET 0x20\n\n#endif /* __PWM_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/qdec_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    qdec_reg.h\n  * @version V1.2\n  * @date    2020-04-08\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __QDEC_REG_H__\n#define __QDEC_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : qdec0_ctrl0 */\n#define QDEC0_CTRL0_OFFSET   (0x0)\n#define QDEC_EN              QDEC_EN\n#define QDEC_EN_POS          (0U)\n#define QDEC_EN_LEN          (1U)\n#define QDEC_EN_MSK          (((1U << QDEC_EN_LEN) - 1) << QDEC_EN_POS)\n#define QDEC_EN_UMSK         (~(((1U << QDEC_EN_LEN) - 1) << QDEC_EN_POS))\n#define QDEC_LED_EN          QDEC_LED_EN\n#define QDEC_LED_EN_POS      (1U)\n#define QDEC_LED_EN_LEN      (1U)\n#define QDEC_LED_EN_MSK      (((1U << QDEC_LED_EN_LEN) - 1) << QDEC_LED_EN_POS)\n#define QDEC_LED_EN_UMSK     (~(((1U << QDEC_LED_EN_LEN) - 1) << QDEC_LED_EN_POS))\n#define QDEC_LED_POL         QDEC_LED_POL\n#define QDEC_LED_POL_POS     (2U)\n#define QDEC_LED_POL_LEN     (1U)\n#define QDEC_LED_POL_MSK     (((1U << QDEC_LED_POL_LEN) - 1) << QDEC_LED_POL_POS)\n#define QDEC_LED_POL_UMSK    (~(((1U << QDEC_LED_POL_LEN) - 1) << QDEC_LED_POL_POS))\n#define QDEC_DEG_EN          QDEC_DEG_EN\n#define QDEC_DEG_EN_POS      (3U)\n#define QDEC_DEG_EN_LEN      (1U)\n#define QDEC_DEG_EN_MSK      (((1U << QDEC_DEG_EN_LEN) - 1) << QDEC_DEG_EN_POS)\n#define QDEC_DEG_EN_UMSK     (~(((1U << QDEC_DEG_EN_LEN) - 1) << QDEC_DEG_EN_POS))\n#define QDEC_DEG_CNT         QDEC_DEG_CNT\n#define QDEC_DEG_CNT_POS     (4U)\n#define QDEC_DEG_CNT_LEN     (4U)\n#define QDEC_DEG_CNT_MSK     (((1U << QDEC_DEG_CNT_LEN) - 1) << QDEC_DEG_CNT_POS)\n#define QDEC_DEG_CNT_UMSK    (~(((1U << QDEC_DEG_CNT_LEN) - 1) << QDEC_DEG_CNT_POS))\n#define QDEC_SPL_PERIOD      QDEC_SPL_PERIOD\n#define QDEC_SPL_PERIOD_POS  (8U)\n#define QDEC_SPL_PERIOD_LEN  (4U)\n#define QDEC_SPL_PERIOD_MSK  (((1U << QDEC_SPL_PERIOD_LEN) - 1) << QDEC_SPL_PERIOD_POS)\n#define QDEC_SPL_PERIOD_UMSK (~(((1U << QDEC_SPL_PERIOD_LEN) - 1) << QDEC_SPL_PERIOD_POS))\n#define QDEC_RPT_PERIOD      QDEC_RPT_PERIOD\n#define QDEC_RPT_PERIOD_POS  (12U)\n#define QDEC_RPT_PERIOD_LEN  (16U)\n#define QDEC_RPT_PERIOD_MSK  (((1U << QDEC_RPT_PERIOD_LEN) - 1) << QDEC_RPT_PERIOD_POS)\n#define QDEC_RPT_PERIOD_UMSK (~(((1U << QDEC_RPT_PERIOD_LEN) - 1) << QDEC_RPT_PERIOD_POS))\n\n/* 0x4 : qdec0_ctrl1 */\n#define QDEC0_CTRL1_OFFSET   (0x4)\n#define QDEC_ACC_MODE        QDEC_ACC_MODE\n#define QDEC_ACC_MODE_POS    (0U)\n#define QDEC_ACC_MODE_LEN    (1U)\n#define QDEC_ACC_MODE_MSK    (((1U << QDEC_ACC_MODE_LEN) - 1) << QDEC_ACC_MODE_POS)\n#define QDEC_ACC_MODE_UMSK   (~(((1U << QDEC_ACC_MODE_LEN) - 1) << QDEC_ACC_MODE_POS))\n#define QDEC_SPL_MODE        QDEC_SPL_MODE\n#define QDEC_SPL_MODE_POS    (1U)\n#define QDEC_SPL_MODE_LEN    (1U)\n#define QDEC_SPL_MODE_MSK    (((1U << QDEC_SPL_MODE_LEN) - 1) << QDEC_SPL_MODE_POS)\n#define QDEC_SPL_MODE_UMSK   (~(((1U << QDEC_SPL_MODE_LEN) - 1) << QDEC_SPL_MODE_POS))\n#define QDEC_RPT_MODE        QDEC_RPT_MODE\n#define QDEC_RPT_MODE_POS    (2U)\n#define QDEC_RPT_MODE_LEN    (1U)\n#define QDEC_RPT_MODE_MSK    (((1U << QDEC_RPT_MODE_LEN) - 1) << QDEC_RPT_MODE_POS)\n#define QDEC_RPT_MODE_UMSK   (~(((1U << QDEC_RPT_MODE_LEN) - 1) << QDEC_RPT_MODE_POS))\n#define QDEC_INPUT_SWAP      QDEC_INPUT_SWAP\n#define QDEC_INPUT_SWAP_POS  (3U)\n#define QDEC_INPUT_SWAP_LEN  (1U)\n#define QDEC_INPUT_SWAP_MSK  (((1U << QDEC_INPUT_SWAP_LEN) - 1) << QDEC_INPUT_SWAP_POS)\n#define QDEC_INPUT_SWAP_UMSK (~(((1U << QDEC_INPUT_SWAP_LEN) - 1) << QDEC_INPUT_SWAP_POS))\n#define QDEC_LED_PERIOD      QDEC_LED_PERIOD\n#define QDEC_LED_PERIOD_POS  (16U)\n#define QDEC_LED_PERIOD_LEN  (9U)\n#define QDEC_LED_PERIOD_MSK  (((1U << QDEC_LED_PERIOD_LEN) - 1) << QDEC_LED_PERIOD_POS)\n#define QDEC_LED_PERIOD_UMSK (~(((1U << QDEC_LED_PERIOD_LEN) - 1) << QDEC_LED_PERIOD_POS))\n\n/* 0x8 : qdec0_value */\n#define QDEC0_VALUE_OFFSET (0x8)\n#define QDEC_ACC1_VAL      QDEC_ACC1_VAL\n#define QDEC_ACC1_VAL_POS  (0U)\n#define QDEC_ACC1_VAL_LEN  (16U)\n#define QDEC_ACC1_VAL_MSK  (((1U << QDEC_ACC1_VAL_LEN) - 1) << QDEC_ACC1_VAL_POS)\n#define QDEC_ACC1_VAL_UMSK (~(((1U << QDEC_ACC1_VAL_LEN) - 1) << QDEC_ACC1_VAL_POS))\n#define QDEC_ACC2_VAL      QDEC_ACC2_VAL\n#define QDEC_ACC2_VAL_POS  (16U)\n#define QDEC_ACC2_VAL_LEN  (4U)\n#define QDEC_ACC2_VAL_MSK  (((1U << QDEC_ACC2_VAL_LEN) - 1) << QDEC_ACC2_VAL_POS)\n#define QDEC_ACC2_VAL_UMSK (~(((1U << QDEC_ACC2_VAL_LEN) - 1) << QDEC_ACC2_VAL_POS))\n#define QDEC_SPL_VAL       QDEC_SPL_VAL\n#define QDEC_SPL_VAL_POS   (28U)\n#define QDEC_SPL_VAL_LEN   (2U)\n#define QDEC_SPL_VAL_MSK   (((1U << QDEC_SPL_VAL_LEN) - 1) << QDEC_SPL_VAL_POS)\n#define QDEC_SPL_VAL_UMSK  (~(((1U << QDEC_SPL_VAL_LEN) - 1) << QDEC_SPL_VAL_POS))\n\n/* 0x10 : qdec0_int_en */\n#define QDEC0_INT_EN_OFFSET   (0x10)\n#define QDEC_RPT_RDY_EN       QDEC_RPT_RDY_EN\n#define QDEC_RPT_RDY_EN_POS   (0U)\n#define QDEC_RPT_RDY_EN_LEN   (1U)\n#define QDEC_RPT_RDY_EN_MSK   (((1U << QDEC_RPT_RDY_EN_LEN) - 1) << QDEC_RPT_RDY_EN_POS)\n#define QDEC_RPT_RDY_EN_UMSK  (~(((1U << QDEC_RPT_RDY_EN_LEN) - 1) << QDEC_RPT_RDY_EN_POS))\n#define QDEC_SPL_RDY_EN       QDEC_SPL_RDY_EN\n#define QDEC_SPL_RDY_EN_POS   (1U)\n#define QDEC_SPL_RDY_EN_LEN   (1U)\n#define QDEC_SPL_RDY_EN_MSK   (((1U << QDEC_SPL_RDY_EN_LEN) - 1) << QDEC_SPL_RDY_EN_POS)\n#define QDEC_SPL_RDY_EN_UMSK  (~(((1U << QDEC_SPL_RDY_EN_LEN) - 1) << QDEC_SPL_RDY_EN_POS))\n#define QDEC_DBL_RDY_EN       QDEC_DBL_RDY_EN\n#define QDEC_DBL_RDY_EN_POS   (2U)\n#define QDEC_DBL_RDY_EN_LEN   (1U)\n#define QDEC_DBL_RDY_EN_MSK   (((1U << QDEC_DBL_RDY_EN_LEN) - 1) << QDEC_DBL_RDY_EN_POS)\n#define QDEC_DBL_RDY_EN_UMSK  (~(((1U << QDEC_DBL_RDY_EN_LEN) - 1) << QDEC_DBL_RDY_EN_POS))\n#define QDEC_OVERFLOW_EN      QDEC_OVERFLOW_EN\n#define QDEC_OVERFLOW_EN_POS  (3U)\n#define QDEC_OVERFLOW_EN_LEN  (1U)\n#define QDEC_OVERFLOW_EN_MSK  (((1U << QDEC_OVERFLOW_EN_LEN) - 1) << QDEC_OVERFLOW_EN_POS)\n#define QDEC_OVERFLOW_EN_UMSK (~(((1U << QDEC_OVERFLOW_EN_LEN) - 1) << QDEC_OVERFLOW_EN_POS))\n\n/* 0x14 : qdec0_int_sts */\n#define QDEC0_INT_STS_OFFSET   (0x14)\n#define QDEC_RPT_RDY_STS       QDEC_RPT_RDY_STS\n#define QDEC_RPT_RDY_STS_POS   (0U)\n#define QDEC_RPT_RDY_STS_LEN   (1U)\n#define QDEC_RPT_RDY_STS_MSK   (((1U << QDEC_RPT_RDY_STS_LEN) - 1) << QDEC_RPT_RDY_STS_POS)\n#define QDEC_RPT_RDY_STS_UMSK  (~(((1U << QDEC_RPT_RDY_STS_LEN) - 1) << QDEC_RPT_RDY_STS_POS))\n#define QDEC_SPL_RDY_STS       QDEC_SPL_RDY_STS\n#define QDEC_SPL_RDY_STS_POS   (1U)\n#define QDEC_SPL_RDY_STS_LEN   (1U)\n#define QDEC_SPL_RDY_STS_MSK   (((1U << QDEC_SPL_RDY_STS_LEN) - 1) << QDEC_SPL_RDY_STS_POS)\n#define QDEC_SPL_RDY_STS_UMSK  (~(((1U << QDEC_SPL_RDY_STS_LEN) - 1) << QDEC_SPL_RDY_STS_POS))\n#define QDEC_DBL_RDY_STS       QDEC_DBL_RDY_STS\n#define QDEC_DBL_RDY_STS_POS   (2U)\n#define QDEC_DBL_RDY_STS_LEN   (1U)\n#define QDEC_DBL_RDY_STS_MSK   (((1U << QDEC_DBL_RDY_STS_LEN) - 1) << QDEC_DBL_RDY_STS_POS)\n#define QDEC_DBL_RDY_STS_UMSK  (~(((1U << QDEC_DBL_RDY_STS_LEN) - 1) << QDEC_DBL_RDY_STS_POS))\n#define QDEC_OVERFLOW_STS      QDEC_OVERFLOW_STS\n#define QDEC_OVERFLOW_STS_POS  (3U)\n#define QDEC_OVERFLOW_STS_LEN  (1U)\n#define QDEC_OVERFLOW_STS_MSK  (((1U << QDEC_OVERFLOW_STS_LEN) - 1) << QDEC_OVERFLOW_STS_POS)\n#define QDEC_OVERFLOW_STS_UMSK (~(((1U << QDEC_OVERFLOW_STS_LEN) - 1) << QDEC_OVERFLOW_STS_POS))\n\n/* 0x18 : qdec0_int_clr */\n#define QDEC0_INT_CLR_OFFSET   (0x18)\n#define QDEC_RPT_RDY_CLR       QDEC_RPT_RDY_CLR\n#define QDEC_RPT_RDY_CLR_POS   (0U)\n#define QDEC_RPT_RDY_CLR_LEN   (1U)\n#define QDEC_RPT_RDY_CLR_MSK   (((1U << QDEC_RPT_RDY_CLR_LEN) - 1) << QDEC_RPT_RDY_CLR_POS)\n#define QDEC_RPT_RDY_CLR_UMSK  (~(((1U << QDEC_RPT_RDY_CLR_LEN) - 1) << QDEC_RPT_RDY_CLR_POS))\n#define QDEC_SPL_RDY_CLR       QDEC_SPL_RDY_CLR\n#define QDEC_SPL_RDY_CLR_POS   (1U)\n#define QDEC_SPL_RDY_CLR_LEN   (1U)\n#define QDEC_SPL_RDY_CLR_MSK   (((1U << QDEC_SPL_RDY_CLR_LEN) - 1) << QDEC_SPL_RDY_CLR_POS)\n#define QDEC_SPL_RDY_CLR_UMSK  (~(((1U << QDEC_SPL_RDY_CLR_LEN) - 1) << QDEC_SPL_RDY_CLR_POS))\n#define QDEC_DBL_RDY_CLR       QDEC_DBL_RDY_CLR\n#define QDEC_DBL_RDY_CLR_POS   (2U)\n#define QDEC_DBL_RDY_CLR_LEN   (1U)\n#define QDEC_DBL_RDY_CLR_MSK   (((1U << QDEC_DBL_RDY_CLR_LEN) - 1) << QDEC_DBL_RDY_CLR_POS)\n#define QDEC_DBL_RDY_CLR_UMSK  (~(((1U << QDEC_DBL_RDY_CLR_LEN) - 1) << QDEC_DBL_RDY_CLR_POS))\n#define QDEC_OVERFLOW_CLR      QDEC_OVERFLOW_CLR\n#define QDEC_OVERFLOW_CLR_POS  (3U)\n#define QDEC_OVERFLOW_CLR_LEN  (1U)\n#define QDEC_OVERFLOW_CLR_MSK  (((1U << QDEC_OVERFLOW_CLR_LEN) - 1) << QDEC_OVERFLOW_CLR_POS)\n#define QDEC_OVERFLOW_CLR_UMSK (~(((1U << QDEC_OVERFLOW_CLR_LEN) - 1) << QDEC_OVERFLOW_CLR_POS))\n\n/* 0x40 : qdec1_ctrl0 */\n#define QDEC1_CTRL0_OFFSET   (0x40)\n#define QDEC_EN              QDEC_EN\n#define QDEC_EN_POS          (0U)\n#define QDEC_EN_LEN          (1U)\n#define QDEC_EN_MSK          (((1U << QDEC_EN_LEN) - 1) << QDEC_EN_POS)\n#define QDEC_EN_UMSK         (~(((1U << QDEC_EN_LEN) - 1) << QDEC_EN_POS))\n#define QDEC_LED_EN          QDEC_LED_EN\n#define QDEC_LED_EN_POS      (1U)\n#define QDEC_LED_EN_LEN      (1U)\n#define QDEC_LED_EN_MSK      (((1U << QDEC_LED_EN_LEN) - 1) << QDEC_LED_EN_POS)\n#define QDEC_LED_EN_UMSK     (~(((1U << QDEC_LED_EN_LEN) - 1) << QDEC_LED_EN_POS))\n#define QDEC_LED_POL         QDEC_LED_POL\n#define QDEC_LED_POL_POS     (2U)\n#define QDEC_LED_POL_LEN     (1U)\n#define QDEC_LED_POL_MSK     (((1U << QDEC_LED_POL_LEN) - 1) << QDEC_LED_POL_POS)\n#define QDEC_LED_POL_UMSK    (~(((1U << QDEC_LED_POL_LEN) - 1) << QDEC_LED_POL_POS))\n#define QDEC_DEG_EN          QDEC_DEG_EN\n#define QDEC_DEG_EN_POS      (3U)\n#define QDEC_DEG_EN_LEN      (1U)\n#define QDEC_DEG_EN_MSK      (((1U << QDEC_DEG_EN_LEN) - 1) << QDEC_DEG_EN_POS)\n#define QDEC_DEG_EN_UMSK     (~(((1U << QDEC_DEG_EN_LEN) - 1) << QDEC_DEG_EN_POS))\n#define QDEC_DEG_CNT         QDEC_DEG_CNT\n#define QDEC_DEG_CNT_POS     (4U)\n#define QDEC_DEG_CNT_LEN     (4U)\n#define QDEC_DEG_CNT_MSK     (((1U << QDEC_DEG_CNT_LEN) - 1) << QDEC_DEG_CNT_POS)\n#define QDEC_DEG_CNT_UMSK    (~(((1U << QDEC_DEG_CNT_LEN) - 1) << QDEC_DEG_CNT_POS))\n#define QDEC_SPL_PERIOD      QDEC_SPL_PERIOD\n#define QDEC_SPL_PERIOD_POS  (8U)\n#define QDEC_SPL_PERIOD_LEN  (4U)\n#define QDEC_SPL_PERIOD_MSK  (((1U << QDEC_SPL_PERIOD_LEN) - 1) << QDEC_SPL_PERIOD_POS)\n#define QDEC_SPL_PERIOD_UMSK (~(((1U << QDEC_SPL_PERIOD_LEN) - 1) << QDEC_SPL_PERIOD_POS))\n#define QDEC_RPT_PERIOD      QDEC_RPT_PERIOD\n#define QDEC_RPT_PERIOD_POS  (12U)\n#define QDEC_RPT_PERIOD_LEN  (16U)\n#define QDEC_RPT_PERIOD_MSK  (((1U << QDEC_RPT_PERIOD_LEN) - 1) << QDEC_RPT_PERIOD_POS)\n#define QDEC_RPT_PERIOD_UMSK (~(((1U << QDEC_RPT_PERIOD_LEN) - 1) << QDEC_RPT_PERIOD_POS))\n\n/* 0x44 : qdec1_ctrl1 */\n#define QDEC1_CTRL1_OFFSET   (0x44)\n#define QDEC_ACC_MODE        QDEC_ACC_MODE\n#define QDEC_ACC_MODE_POS    (0U)\n#define QDEC_ACC_MODE_LEN    (1U)\n#define QDEC_ACC_MODE_MSK    (((1U << QDEC_ACC_MODE_LEN) - 1) << QDEC_ACC_MODE_POS)\n#define QDEC_ACC_MODE_UMSK   (~(((1U << QDEC_ACC_MODE_LEN) - 1) << QDEC_ACC_MODE_POS))\n#define QDEC_SPL_MODE        QDEC_SPL_MODE\n#define QDEC_SPL_MODE_POS    (1U)\n#define QDEC_SPL_MODE_LEN    (1U)\n#define QDEC_SPL_MODE_MSK    (((1U << QDEC_SPL_MODE_LEN) - 1) << QDEC_SPL_MODE_POS)\n#define QDEC_SPL_MODE_UMSK   (~(((1U << QDEC_SPL_MODE_LEN) - 1) << QDEC_SPL_MODE_POS))\n#define QDEC_RPT_MODE        QDEC_RPT_MODE\n#define QDEC_RPT_MODE_POS    (2U)\n#define QDEC_RPT_MODE_LEN    (1U)\n#define QDEC_RPT_MODE_MSK    (((1U << QDEC_RPT_MODE_LEN) - 1) << QDEC_RPT_MODE_POS)\n#define QDEC_RPT_MODE_UMSK   (~(((1U << QDEC_RPT_MODE_LEN) - 1) << QDEC_RPT_MODE_POS))\n#define QDEC_INPUT_SWAP      QDEC_INPUT_SWAP\n#define QDEC_INPUT_SWAP_POS  (3U)\n#define QDEC_INPUT_SWAP_LEN  (1U)\n#define QDEC_INPUT_SWAP_MSK  (((1U << QDEC_INPUT_SWAP_LEN) - 1) << QDEC_INPUT_SWAP_POS)\n#define QDEC_INPUT_SWAP_UMSK (~(((1U << QDEC_INPUT_SWAP_LEN) - 1) << QDEC_INPUT_SWAP_POS))\n#define QDEC_LED_PERIOD      QDEC_LED_PERIOD\n#define QDEC_LED_PERIOD_POS  (16U)\n#define QDEC_LED_PERIOD_LEN  (9U)\n#define QDEC_LED_PERIOD_MSK  (((1U << QDEC_LED_PERIOD_LEN) - 1) << QDEC_LED_PERIOD_POS)\n#define QDEC_LED_PERIOD_UMSK (~(((1U << QDEC_LED_PERIOD_LEN) - 1) << QDEC_LED_PERIOD_POS))\n\n/* 0x48 : qdec1_value */\n#define QDEC1_VALUE_OFFSET (0x48)\n#define QDEC_ACC1_VAL      QDEC_ACC1_VAL\n#define QDEC_ACC1_VAL_POS  (0U)\n#define QDEC_ACC1_VAL_LEN  (16U)\n#define QDEC_ACC1_VAL_MSK  (((1U << QDEC_ACC1_VAL_LEN) - 1) << QDEC_ACC1_VAL_POS)\n#define QDEC_ACC1_VAL_UMSK (~(((1U << QDEC_ACC1_VAL_LEN) - 1) << QDEC_ACC1_VAL_POS))\n#define QDEC_ACC2_VAL      QDEC_ACC2_VAL\n#define QDEC_ACC2_VAL_POS  (16U)\n#define QDEC_ACC2_VAL_LEN  (4U)\n#define QDEC_ACC2_VAL_MSK  (((1U << QDEC_ACC2_VAL_LEN) - 1) << QDEC_ACC2_VAL_POS)\n#define QDEC_ACC2_VAL_UMSK (~(((1U << QDEC_ACC2_VAL_LEN) - 1) << QDEC_ACC2_VAL_POS))\n#define QDEC_SPL_VAL       QDEC_SPL_VAL\n#define QDEC_SPL_VAL_POS   (28U)\n#define QDEC_SPL_VAL_LEN   (2U)\n#define QDEC_SPL_VAL_MSK   (((1U << QDEC_SPL_VAL_LEN) - 1) << QDEC_SPL_VAL_POS)\n#define QDEC_SPL_VAL_UMSK  (~(((1U << QDEC_SPL_VAL_LEN) - 1) << QDEC_SPL_VAL_POS))\n\n/* 0x50 : qdec1_int_en */\n#define QDEC1_INT_EN_OFFSET   (0x50)\n#define QDEC_RPT_RDY_EN       QDEC_RPT_RDY_EN\n#define QDEC_RPT_RDY_EN_POS   (0U)\n#define QDEC_RPT_RDY_EN_LEN   (1U)\n#define QDEC_RPT_RDY_EN_MSK   (((1U << QDEC_RPT_RDY_EN_LEN) - 1) << QDEC_RPT_RDY_EN_POS)\n#define QDEC_RPT_RDY_EN_UMSK  (~(((1U << QDEC_RPT_RDY_EN_LEN) - 1) << QDEC_RPT_RDY_EN_POS))\n#define QDEC_SPL_RDY_EN       QDEC_SPL_RDY_EN\n#define QDEC_SPL_RDY_EN_POS   (1U)\n#define QDEC_SPL_RDY_EN_LEN   (1U)\n#define QDEC_SPL_RDY_EN_MSK   (((1U << QDEC_SPL_RDY_EN_LEN) - 1) << QDEC_SPL_RDY_EN_POS)\n#define QDEC_SPL_RDY_EN_UMSK  (~(((1U << QDEC_SPL_RDY_EN_LEN) - 1) << QDEC_SPL_RDY_EN_POS))\n#define QDEC_DBL_RDY_EN       QDEC_DBL_RDY_EN\n#define QDEC_DBL_RDY_EN_POS   (2U)\n#define QDEC_DBL_RDY_EN_LEN   (1U)\n#define QDEC_DBL_RDY_EN_MSK   (((1U << QDEC_DBL_RDY_EN_LEN) - 1) << QDEC_DBL_RDY_EN_POS)\n#define QDEC_DBL_RDY_EN_UMSK  (~(((1U << QDEC_DBL_RDY_EN_LEN) - 1) << QDEC_DBL_RDY_EN_POS))\n#define QDEC_OVERFLOW_EN      QDEC_OVERFLOW_EN\n#define QDEC_OVERFLOW_EN_POS  (3U)\n#define QDEC_OVERFLOW_EN_LEN  (1U)\n#define QDEC_OVERFLOW_EN_MSK  (((1U << QDEC_OVERFLOW_EN_LEN) - 1) << QDEC_OVERFLOW_EN_POS)\n#define QDEC_OVERFLOW_EN_UMSK (~(((1U << QDEC_OVERFLOW_EN_LEN) - 1) << QDEC_OVERFLOW_EN_POS))\n\n/* 0x54 : qdec1_int_sts */\n#define QDEC1_INT_STS_OFFSET   (0x54)\n#define QDEC_RPT_RDY_STS       QDEC_RPT_RDY_STS\n#define QDEC_RPT_RDY_STS_POS   (0U)\n#define QDEC_RPT_RDY_STS_LEN   (1U)\n#define QDEC_RPT_RDY_STS_MSK   (((1U << QDEC_RPT_RDY_STS_LEN) - 1) << QDEC_RPT_RDY_STS_POS)\n#define QDEC_RPT_RDY_STS_UMSK  (~(((1U << QDEC_RPT_RDY_STS_LEN) - 1) << QDEC_RPT_RDY_STS_POS))\n#define QDEC_SPL_RDY_STS       QDEC_SPL_RDY_STS\n#define QDEC_SPL_RDY_STS_POS   (1U)\n#define QDEC_SPL_RDY_STS_LEN   (1U)\n#define QDEC_SPL_RDY_STS_MSK   (((1U << QDEC_SPL_RDY_STS_LEN) - 1) << QDEC_SPL_RDY_STS_POS)\n#define QDEC_SPL_RDY_STS_UMSK  (~(((1U << QDEC_SPL_RDY_STS_LEN) - 1) << QDEC_SPL_RDY_STS_POS))\n#define QDEC_DBL_RDY_STS       QDEC_DBL_RDY_STS\n#define QDEC_DBL_RDY_STS_POS   (2U)\n#define QDEC_DBL_RDY_STS_LEN   (1U)\n#define QDEC_DBL_RDY_STS_MSK   (((1U << QDEC_DBL_RDY_STS_LEN) - 1) << QDEC_DBL_RDY_STS_POS)\n#define QDEC_DBL_RDY_STS_UMSK  (~(((1U << QDEC_DBL_RDY_STS_LEN) - 1) << QDEC_DBL_RDY_STS_POS))\n#define QDEC_OVERFLOW_STS      QDEC_OVERFLOW_STS\n#define QDEC_OVERFLOW_STS_POS  (3U)\n#define QDEC_OVERFLOW_STS_LEN  (1U)\n#define QDEC_OVERFLOW_STS_MSK  (((1U << QDEC_OVERFLOW_STS_LEN) - 1) << QDEC_OVERFLOW_STS_POS)\n#define QDEC_OVERFLOW_STS_UMSK (~(((1U << QDEC_OVERFLOW_STS_LEN) - 1) << QDEC_OVERFLOW_STS_POS))\n\n/* 0x58 : qdec1_int_clr */\n#define QDEC1_INT_CLR_OFFSET   (0x58)\n#define QDEC_RPT_RDY_CLR       QDEC_RPT_RDY_CLR\n#define QDEC_RPT_RDY_CLR_POS   (0U)\n#define QDEC_RPT_RDY_CLR_LEN   (1U)\n#define QDEC_RPT_RDY_CLR_MSK   (((1U << QDEC_RPT_RDY_CLR_LEN) - 1) << QDEC_RPT_RDY_CLR_POS)\n#define QDEC_RPT_RDY_CLR_UMSK  (~(((1U << QDEC_RPT_RDY_CLR_LEN) - 1) << QDEC_RPT_RDY_CLR_POS))\n#define QDEC_SPL_RDY_CLR       QDEC_SPL_RDY_CLR\n#define QDEC_SPL_RDY_CLR_POS   (1U)\n#define QDEC_SPL_RDY_CLR_LEN   (1U)\n#define QDEC_SPL_RDY_CLR_MSK   (((1U << QDEC_SPL_RDY_CLR_LEN) - 1) << QDEC_SPL_RDY_CLR_POS)\n#define QDEC_SPL_RDY_CLR_UMSK  (~(((1U << QDEC_SPL_RDY_CLR_LEN) - 1) << QDEC_SPL_RDY_CLR_POS))\n#define QDEC_DBL_RDY_CLR       QDEC_DBL_RDY_CLR\n#define QDEC_DBL_RDY_CLR_POS   (2U)\n#define QDEC_DBL_RDY_CLR_LEN   (1U)\n#define QDEC_DBL_RDY_CLR_MSK   (((1U << QDEC_DBL_RDY_CLR_LEN) - 1) << QDEC_DBL_RDY_CLR_POS)\n#define QDEC_DBL_RDY_CLR_UMSK  (~(((1U << QDEC_DBL_RDY_CLR_LEN) - 1) << QDEC_DBL_RDY_CLR_POS))\n#define QDEC_OVERFLOW_CLR      QDEC_OVERFLOW_CLR\n#define QDEC_OVERFLOW_CLR_POS  (3U)\n#define QDEC_OVERFLOW_CLR_LEN  (1U)\n#define QDEC_OVERFLOW_CLR_MSK  (((1U << QDEC_OVERFLOW_CLR_LEN) - 1) << QDEC_OVERFLOW_CLR_POS)\n#define QDEC_OVERFLOW_CLR_UMSK (~(((1U << QDEC_OVERFLOW_CLR_LEN) - 1) << QDEC_OVERFLOW_CLR_POS))\n\n/* 0x80 : qdec2_ctrl0 */\n#define QDEC2_CTRL0_OFFSET   (0x80)\n#define QDEC_EN              QDEC_EN\n#define QDEC_EN_POS          (0U)\n#define QDEC_EN_LEN          (1U)\n#define QDEC_EN_MSK          (((1U << QDEC_EN_LEN) - 1) << QDEC_EN_POS)\n#define QDEC_EN_UMSK         (~(((1U << QDEC_EN_LEN) - 1) << QDEC_EN_POS))\n#define QDEC_LED_EN          QDEC_LED_EN\n#define QDEC_LED_EN_POS      (1U)\n#define QDEC_LED_EN_LEN      (1U)\n#define QDEC_LED_EN_MSK      (((1U << QDEC_LED_EN_LEN) - 1) << QDEC_LED_EN_POS)\n#define QDEC_LED_EN_UMSK     (~(((1U << QDEC_LED_EN_LEN) - 1) << QDEC_LED_EN_POS))\n#define QDEC_LED_POL         QDEC_LED_POL\n#define QDEC_LED_POL_POS     (2U)\n#define QDEC_LED_POL_LEN     (1U)\n#define QDEC_LED_POL_MSK     (((1U << QDEC_LED_POL_LEN) - 1) << QDEC_LED_POL_POS)\n#define QDEC_LED_POL_UMSK    (~(((1U << QDEC_LED_POL_LEN) - 1) << QDEC_LED_POL_POS))\n#define QDEC_DEG_EN          QDEC_DEG_EN\n#define QDEC_DEG_EN_POS      (3U)\n#define QDEC_DEG_EN_LEN      (1U)\n#define QDEC_DEG_EN_MSK      (((1U << QDEC_DEG_EN_LEN) - 1) << QDEC_DEG_EN_POS)\n#define QDEC_DEG_EN_UMSK     (~(((1U << QDEC_DEG_EN_LEN) - 1) << QDEC_DEG_EN_POS))\n#define QDEC_DEG_CNT         QDEC_DEG_CNT\n#define QDEC_DEG_CNT_POS     (4U)\n#define QDEC_DEG_CNT_LEN     (4U)\n#define QDEC_DEG_CNT_MSK     (((1U << QDEC_DEG_CNT_LEN) - 1) << QDEC_DEG_CNT_POS)\n#define QDEC_DEG_CNT_UMSK    (~(((1U << QDEC_DEG_CNT_LEN) - 1) << QDEC_DEG_CNT_POS))\n#define QDEC_SPL_PERIOD      QDEC_SPL_PERIOD\n#define QDEC_SPL_PERIOD_POS  (8U)\n#define QDEC_SPL_PERIOD_LEN  (4U)\n#define QDEC_SPL_PERIOD_MSK  (((1U << QDEC_SPL_PERIOD_LEN) - 1) << QDEC_SPL_PERIOD_POS)\n#define QDEC_SPL_PERIOD_UMSK (~(((1U << QDEC_SPL_PERIOD_LEN) - 1) << QDEC_SPL_PERIOD_POS))\n#define QDEC_RPT_PERIOD      QDEC_RPT_PERIOD\n#define QDEC_RPT_PERIOD_POS  (12U)\n#define QDEC_RPT_PERIOD_LEN  (16U)\n#define QDEC_RPT_PERIOD_MSK  (((1U << QDEC_RPT_PERIOD_LEN) - 1) << QDEC_RPT_PERIOD_POS)\n#define QDEC_RPT_PERIOD_UMSK (~(((1U << QDEC_RPT_PERIOD_LEN) - 1) << QDEC_RPT_PERIOD_POS))\n\n/* 0x84 : qdec2_ctrl1 */\n#define QDEC2_CTRL1_OFFSET   (0x84)\n#define QDEC_ACC_MODE        QDEC_ACC_MODE\n#define QDEC_ACC_MODE_POS    (0U)\n#define QDEC_ACC_MODE_LEN    (1U)\n#define QDEC_ACC_MODE_MSK    (((1U << QDEC_ACC_MODE_LEN) - 1) << QDEC_ACC_MODE_POS)\n#define QDEC_ACC_MODE_UMSK   (~(((1U << QDEC_ACC_MODE_LEN) - 1) << QDEC_ACC_MODE_POS))\n#define QDEC_SPL_MODE        QDEC_SPL_MODE\n#define QDEC_SPL_MODE_POS    (1U)\n#define QDEC_SPL_MODE_LEN    (1U)\n#define QDEC_SPL_MODE_MSK    (((1U << QDEC_SPL_MODE_LEN) - 1) << QDEC_SPL_MODE_POS)\n#define QDEC_SPL_MODE_UMSK   (~(((1U << QDEC_SPL_MODE_LEN) - 1) << QDEC_SPL_MODE_POS))\n#define QDEC_RPT_MODE        QDEC_RPT_MODE\n#define QDEC_RPT_MODE_POS    (2U)\n#define QDEC_RPT_MODE_LEN    (1U)\n#define QDEC_RPT_MODE_MSK    (((1U << QDEC_RPT_MODE_LEN) - 1) << QDEC_RPT_MODE_POS)\n#define QDEC_RPT_MODE_UMSK   (~(((1U << QDEC_RPT_MODE_LEN) - 1) << QDEC_RPT_MODE_POS))\n#define QDEC_INPUT_SWAP      QDEC_INPUT_SWAP\n#define QDEC_INPUT_SWAP_POS  (3U)\n#define QDEC_INPUT_SWAP_LEN  (1U)\n#define QDEC_INPUT_SWAP_MSK  (((1U << QDEC_INPUT_SWAP_LEN) - 1) << QDEC_INPUT_SWAP_POS)\n#define QDEC_INPUT_SWAP_UMSK (~(((1U << QDEC_INPUT_SWAP_LEN) - 1) << QDEC_INPUT_SWAP_POS))\n#define QDEC_LED_PERIOD      QDEC_LED_PERIOD\n#define QDEC_LED_PERIOD_POS  (16U)\n#define QDEC_LED_PERIOD_LEN  (9U)\n#define QDEC_LED_PERIOD_MSK  (((1U << QDEC_LED_PERIOD_LEN) - 1) << QDEC_LED_PERIOD_POS)\n#define QDEC_LED_PERIOD_UMSK (~(((1U << QDEC_LED_PERIOD_LEN) - 1) << QDEC_LED_PERIOD_POS))\n\n/* 0x88 : qdec2_value */\n#define QDEC2_VALUE_OFFSET (0x88)\n#define QDEC_ACC1_VAL      QDEC_ACC1_VAL\n#define QDEC_ACC1_VAL_POS  (0U)\n#define QDEC_ACC1_VAL_LEN  (16U)\n#define QDEC_ACC1_VAL_MSK  (((1U << QDEC_ACC1_VAL_LEN) - 1) << QDEC_ACC1_VAL_POS)\n#define QDEC_ACC1_VAL_UMSK (~(((1U << QDEC_ACC1_VAL_LEN) - 1) << QDEC_ACC1_VAL_POS))\n#define QDEC_ACC2_VAL      QDEC_ACC2_VAL\n#define QDEC_ACC2_VAL_POS  (16U)\n#define QDEC_ACC2_VAL_LEN  (4U)\n#define QDEC_ACC2_VAL_MSK  (((1U << QDEC_ACC2_VAL_LEN) - 1) << QDEC_ACC2_VAL_POS)\n#define QDEC_ACC2_VAL_UMSK (~(((1U << QDEC_ACC2_VAL_LEN) - 1) << QDEC_ACC2_VAL_POS))\n#define QDEC_SPL_VAL       QDEC_SPL_VAL\n#define QDEC_SPL_VAL_POS   (28U)\n#define QDEC_SPL_VAL_LEN   (2U)\n#define QDEC_SPL_VAL_MSK   (((1U << QDEC_SPL_VAL_LEN) - 1) << QDEC_SPL_VAL_POS)\n#define QDEC_SPL_VAL_UMSK  (~(((1U << QDEC_SPL_VAL_LEN) - 1) << QDEC_SPL_VAL_POS))\n\n/* 0x90 : qdec2_int_en */\n#define QDEC2_INT_EN_OFFSET   (0x90)\n#define QDEC_RPT_RDY_EN       QDEC_RPT_RDY_EN\n#define QDEC_RPT_RDY_EN_POS   (0U)\n#define QDEC_RPT_RDY_EN_LEN   (1U)\n#define QDEC_RPT_RDY_EN_MSK   (((1U << QDEC_RPT_RDY_EN_LEN) - 1) << QDEC_RPT_RDY_EN_POS)\n#define QDEC_RPT_RDY_EN_UMSK  (~(((1U << QDEC_RPT_RDY_EN_LEN) - 1) << QDEC_RPT_RDY_EN_POS))\n#define QDEC_SPL_RDY_EN       QDEC_SPL_RDY_EN\n#define QDEC_SPL_RDY_EN_POS   (1U)\n#define QDEC_SPL_RDY_EN_LEN   (1U)\n#define QDEC_SPL_RDY_EN_MSK   (((1U << QDEC_SPL_RDY_EN_LEN) - 1) << QDEC_SPL_RDY_EN_POS)\n#define QDEC_SPL_RDY_EN_UMSK  (~(((1U << QDEC_SPL_RDY_EN_LEN) - 1) << QDEC_SPL_RDY_EN_POS))\n#define QDEC_DBL_RDY_EN       QDEC_DBL_RDY_EN\n#define QDEC_DBL_RDY_EN_POS   (2U)\n#define QDEC_DBL_RDY_EN_LEN   (1U)\n#define QDEC_DBL_RDY_EN_MSK   (((1U << QDEC_DBL_RDY_EN_LEN) - 1) << QDEC_DBL_RDY_EN_POS)\n#define QDEC_DBL_RDY_EN_UMSK  (~(((1U << QDEC_DBL_RDY_EN_LEN) - 1) << QDEC_DBL_RDY_EN_POS))\n#define QDEC_OVERFLOW_EN      QDEC_OVERFLOW_EN\n#define QDEC_OVERFLOW_EN_POS  (3U)\n#define QDEC_OVERFLOW_EN_LEN  (1U)\n#define QDEC_OVERFLOW_EN_MSK  (((1U << QDEC_OVERFLOW_EN_LEN) - 1) << QDEC_OVERFLOW_EN_POS)\n#define QDEC_OVERFLOW_EN_UMSK (~(((1U << QDEC_OVERFLOW_EN_LEN) - 1) << QDEC_OVERFLOW_EN_POS))\n\n/* 0x94 : qdec2_int_sts */\n#define QDEC2_INT_STS_OFFSET   (0x94)\n#define QDEC_RPT_RDY_STS       QDEC_RPT_RDY_STS\n#define QDEC_RPT_RDY_STS_POS   (0U)\n#define QDEC_RPT_RDY_STS_LEN   (1U)\n#define QDEC_RPT_RDY_STS_MSK   (((1U << QDEC_RPT_RDY_STS_LEN) - 1) << QDEC_RPT_RDY_STS_POS)\n#define QDEC_RPT_RDY_STS_UMSK  (~(((1U << QDEC_RPT_RDY_STS_LEN) - 1) << QDEC_RPT_RDY_STS_POS))\n#define QDEC_SPL_RDY_STS       QDEC_SPL_RDY_STS\n#define QDEC_SPL_RDY_STS_POS   (1U)\n#define QDEC_SPL_RDY_STS_LEN   (1U)\n#define QDEC_SPL_RDY_STS_MSK   (((1U << QDEC_SPL_RDY_STS_LEN) - 1) << QDEC_SPL_RDY_STS_POS)\n#define QDEC_SPL_RDY_STS_UMSK  (~(((1U << QDEC_SPL_RDY_STS_LEN) - 1) << QDEC_SPL_RDY_STS_POS))\n#define QDEC_DBL_RDY_STS       QDEC_DBL_RDY_STS\n#define QDEC_DBL_RDY_STS_POS   (2U)\n#define QDEC_DBL_RDY_STS_LEN   (1U)\n#define QDEC_DBL_RDY_STS_MSK   (((1U << QDEC_DBL_RDY_STS_LEN) - 1) << QDEC_DBL_RDY_STS_POS)\n#define QDEC_DBL_RDY_STS_UMSK  (~(((1U << QDEC_DBL_RDY_STS_LEN) - 1) << QDEC_DBL_RDY_STS_POS))\n#define QDEC_OVERFLOW_STS      QDEC_OVERFLOW_STS\n#define QDEC_OVERFLOW_STS_POS  (3U)\n#define QDEC_OVERFLOW_STS_LEN  (1U)\n#define QDEC_OVERFLOW_STS_MSK  (((1U << QDEC_OVERFLOW_STS_LEN) - 1) << QDEC_OVERFLOW_STS_POS)\n#define QDEC_OVERFLOW_STS_UMSK (~(((1U << QDEC_OVERFLOW_STS_LEN) - 1) << QDEC_OVERFLOW_STS_POS))\n\n/* 0x98 : qdec2_int_clr */\n#define QDEC2_INT_CLR_OFFSET   (0x98)\n#define QDEC_RPT_RDY_CLR       QDEC_RPT_RDY_CLR\n#define QDEC_RPT_RDY_CLR_POS   (0U)\n#define QDEC_RPT_RDY_CLR_LEN   (1U)\n#define QDEC_RPT_RDY_CLR_MSK   (((1U << QDEC_RPT_RDY_CLR_LEN) - 1) << QDEC_RPT_RDY_CLR_POS)\n#define QDEC_RPT_RDY_CLR_UMSK  (~(((1U << QDEC_RPT_RDY_CLR_LEN) - 1) << QDEC_RPT_RDY_CLR_POS))\n#define QDEC_SPL_RDY_CLR       QDEC_SPL_RDY_CLR\n#define QDEC_SPL_RDY_CLR_POS   (1U)\n#define QDEC_SPL_RDY_CLR_LEN   (1U)\n#define QDEC_SPL_RDY_CLR_MSK   (((1U << QDEC_SPL_RDY_CLR_LEN) - 1) << QDEC_SPL_RDY_CLR_POS)\n#define QDEC_SPL_RDY_CLR_UMSK  (~(((1U << QDEC_SPL_RDY_CLR_LEN) - 1) << QDEC_SPL_RDY_CLR_POS))\n#define QDEC_DBL_RDY_CLR       QDEC_DBL_RDY_CLR\n#define QDEC_DBL_RDY_CLR_POS   (2U)\n#define QDEC_DBL_RDY_CLR_LEN   (1U)\n#define QDEC_DBL_RDY_CLR_MSK   (((1U << QDEC_DBL_RDY_CLR_LEN) - 1) << QDEC_DBL_RDY_CLR_POS)\n#define QDEC_DBL_RDY_CLR_UMSK  (~(((1U << QDEC_DBL_RDY_CLR_LEN) - 1) << QDEC_DBL_RDY_CLR_POS))\n#define QDEC_OVERFLOW_CLR      QDEC_OVERFLOW_CLR\n#define QDEC_OVERFLOW_CLR_POS  (3U)\n#define QDEC_OVERFLOW_CLR_LEN  (1U)\n#define QDEC_OVERFLOW_CLR_MSK  (((1U << QDEC_OVERFLOW_CLR_LEN) - 1) << QDEC_OVERFLOW_CLR_POS)\n#define QDEC_OVERFLOW_CLR_UMSK (~(((1U << QDEC_OVERFLOW_CLR_LEN) - 1) << QDEC_OVERFLOW_CLR_POS))\n\nstruct qdec_reg {\n    /* 0x0 : qdec0_ctrl0 */\n    union {\n        struct\n        {\n            uint32_t qdec_en        : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t led_en         : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t led_pol        : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t deg_en         : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t deg_cnt        : 4;  /* [ 7: 4],        r/w,        0x0 */\n            uint32_t spl_period     : 4;  /* [11: 8],        r/w,        0x2 */\n            uint32_t rpt_period     : 16; /* [27:12],        r/w,        0xa */\n            uint32_t reserved_28_31 : 4;  /* [31:28],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec0_ctrl0;\n\n    /* 0x4 : qdec0_ctrl1 */\n    union {\n        struct\n        {\n            uint32_t acc_mode       : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t spl_mode       : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t rpt_mode       : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t input_swap     : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t reserved_4_15  : 12; /* [15: 4],       rsvd,        0x0 */\n            uint32_t led_period     : 9;  /* [24:16],        r/w,        0x0 */\n            uint32_t reserved_25_31 : 7;  /* [31:25],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec0_ctrl1;\n\n    /* 0x8 : qdec0_value */\n    union {\n        struct\n        {\n            uint32_t acc1_val       : 16; /* [15: 0],          r,        0x0 */\n            uint32_t acc2_val       : 4;  /* [19:16],          r,        0x0 */\n            uint32_t reserved_20_27 : 8;  /* [27:20],       rsvd,        0x0 */\n            uint32_t spl_val        : 2;  /* [29:28],          r,        0x0 */\n            uint32_t reserved_30_31 : 2;  /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec0_value;\n\n    /* 0xc  reserved */\n    uint8_t RESERVED0xc[4];\n\n    /* 0x10 : qdec0_int_en */\n    union {\n        struct\n        {\n            uint32_t rpt_rdy_en    : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t spl_rdy_en    : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t dbl_rdy_en    : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t overflow_en   : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t reserved_4_31 : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec0_int_en;\n\n    /* 0x14 : qdec0_int_sts */\n    union {\n        struct\n        {\n            uint32_t rpt_rdy_sts   : 1;  /* [    0],          r,        0x0 */\n            uint32_t spl_rdy_sts   : 1;  /* [    1],          r,        0x0 */\n            uint32_t dbl_rdy_sts   : 1;  /* [    2],          r,        0x0 */\n            uint32_t overflow_sts  : 1;  /* [    3],          r,        0x0 */\n            uint32_t reserved_4_31 : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec0_int_sts;\n\n    /* 0x18 : qdec0_int_clr */\n    union {\n        struct\n        {\n            uint32_t rpt_rdy_clr   : 1;  /* [    0],        w1c,        0x0 */\n            uint32_t spl_rdy_clr   : 1;  /* [    1],        w1c,        0x0 */\n            uint32_t dbl_rdy_clr   : 1;  /* [    2],        w1c,        0x0 */\n            uint32_t overflow_clr  : 1;  /* [    3],        w1c,        0x0 */\n            uint32_t reserved_4_31 : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec0_int_clr;\n\n    /* 0x1c  reserved */\n    uint8_t RESERVED0x1c[36];\n\n    /* 0x40 : qdec1_ctrl0 */\n    union {\n        struct\n        {\n            uint32_t qdec_en        : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t led_en         : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t led_pol        : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t deg_en         : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t deg_cnt        : 4;  /* [ 7: 4],        r/w,        0x0 */\n            uint32_t spl_period     : 4;  /* [11: 8],        r/w,        0x2 */\n            uint32_t rpt_period     : 16; /* [27:12],        r/w,        0xa */\n            uint32_t reserved_28_31 : 4;  /* [31:28],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec1_ctrl0;\n\n    /* 0x44 : qdec1_ctrl1 */\n    union {\n        struct\n        {\n            uint32_t acc_mode       : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t spl_mode       : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t rpt_mode       : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t input_swap     : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t reserved_4_15  : 12; /* [15: 4],       rsvd,        0x0 */\n            uint32_t led_period     : 9;  /* [24:16],        r/w,        0x0 */\n            uint32_t reserved_25_31 : 7;  /* [31:25],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec1_ctrl1;\n\n    /* 0x48 : qdec1_value */\n    union {\n        struct\n        {\n            uint32_t acc1_val       : 16; /* [15: 0],          r,        0x0 */\n            uint32_t acc2_val       : 4;  /* [19:16],          r,        0x0 */\n            uint32_t reserved_20_27 : 8;  /* [27:20],       rsvd,        0x0 */\n            uint32_t spl_val        : 2;  /* [29:28],          r,        0x0 */\n            uint32_t reserved_30_31 : 2;  /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec1_value;\n\n    /* 0x4c  reserved */\n    uint8_t RESERVED0x4c[4];\n\n    /* 0x50 : qdec1_int_en */\n    union {\n        struct\n        {\n            uint32_t rpt_rdy_en    : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t spl_rdy_en    : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t dbl_rdy_en    : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t overflow_en   : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t reserved_4_31 : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec1_int_en;\n\n    /* 0x54 : qdec1_int_sts */\n    union {\n        struct\n        {\n            uint32_t rpt_rdy_sts   : 1;  /* [    0],          r,        0x0 */\n            uint32_t spl_rdy_sts   : 1;  /* [    1],          r,        0x0 */\n            uint32_t dbl_rdy_sts   : 1;  /* [    2],          r,        0x0 */\n            uint32_t overflow_sts  : 1;  /* [    3],          r,        0x0 */\n            uint32_t reserved_4_31 : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec1_int_sts;\n\n    /* 0x58 : qdec1_int_clr */\n    union {\n        struct\n        {\n            uint32_t rpt_rdy_clr   : 1;  /* [    0],        w1c,        0x0 */\n            uint32_t spl_rdy_clr   : 1;  /* [    1],        w1c,        0x0 */\n            uint32_t dbl_rdy_clr   : 1;  /* [    2],        w1c,        0x0 */\n            uint32_t overflow_clr  : 1;  /* [    3],        w1c,        0x0 */\n            uint32_t reserved_4_31 : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec1_int_clr;\n\n    /* 0x5c  reserved */\n    uint8_t RESERVED0x5c[36];\n\n    /* 0x80 : qdec2_ctrl0 */\n    union {\n        struct\n        {\n            uint32_t qdec_en        : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t led_en         : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t led_pol        : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t deg_en         : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t deg_cnt        : 4;  /* [ 7: 4],        r/w,        0x0 */\n            uint32_t spl_period     : 4;  /* [11: 8],        r/w,        0x2 */\n            uint32_t rpt_period     : 16; /* [27:12],        r/w,        0xa */\n            uint32_t reserved_28_31 : 4;  /* [31:28],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec2_ctrl0;\n\n    /* 0x84 : qdec2_ctrl1 */\n    union {\n        struct\n        {\n            uint32_t acc_mode       : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t spl_mode       : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t rpt_mode       : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t input_swap     : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t reserved_4_15  : 12; /* [15: 4],       rsvd,        0x0 */\n            uint32_t led_period     : 9;  /* [24:16],        r/w,        0x0 */\n            uint32_t reserved_25_31 : 7;  /* [31:25],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec2_ctrl1;\n\n    /* 0x88 : qdec2_value */\n    union {\n        struct\n        {\n            uint32_t acc1_val       : 16; /* [15: 0],          r,        0x0 */\n            uint32_t acc2_val       : 4;  /* [19:16],          r,        0x0 */\n            uint32_t reserved_20_27 : 8;  /* [27:20],       rsvd,        0x0 */\n            uint32_t spl_val        : 2;  /* [29:28],          r,        0x0 */\n            uint32_t reserved_30_31 : 2;  /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec2_value;\n\n    /* 0x8c  reserved */\n    uint8_t RESERVED0x8c[4];\n\n    /* 0x90 : qdec2_int_en */\n    union {\n        struct\n        {\n            uint32_t rpt_rdy_en    : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t spl_rdy_en    : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t dbl_rdy_en    : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t overflow_en   : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t reserved_4_31 : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec2_int_en;\n\n    /* 0x94 : qdec2_int_sts */\n    union {\n        struct\n        {\n            uint32_t rpt_rdy_sts   : 1;  /* [    0],          r,        0x0 */\n            uint32_t spl_rdy_sts   : 1;  /* [    1],          r,        0x0 */\n            uint32_t dbl_rdy_sts   : 1;  /* [    2],          r,        0x0 */\n            uint32_t overflow_sts  : 1;  /* [    3],          r,        0x0 */\n            uint32_t reserved_4_31 : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec2_int_sts;\n\n    /* 0x98 : qdec2_int_clr */\n    union {\n        struct\n        {\n            uint32_t rpt_rdy_clr   : 1;  /* [    0],        w1c,        0x0 */\n            uint32_t spl_rdy_clr   : 1;  /* [    1],        w1c,        0x0 */\n            uint32_t dbl_rdy_clr   : 1;  /* [    2],        w1c,        0x0 */\n            uint32_t overflow_clr  : 1;  /* [    3],        w1c,        0x0 */\n            uint32_t reserved_4_31 : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } qdec2_int_clr;\n};\n\ntypedef volatile struct qdec_reg qdec_reg_t;\n\n#endif /* __QDEC_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/sec_dbg_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    sec_dbg_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __SEC_DBG_REG_H__\n#define __SEC_DBG_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : sd_chip_id_low */\n#define SEC_DBG_SD_CHIP_ID_LOW_OFFSET (0x0)\n#define SEC_DBG_SD_CHIP_ID_LOW        SEC_DBG_SD_CHIP_ID_LOW\n#define SEC_DBG_SD_CHIP_ID_LOW_POS    (0U)\n#define SEC_DBG_SD_CHIP_ID_LOW_LEN    (32U)\n#define SEC_DBG_SD_CHIP_ID_LOW_MSK    (((1U << SEC_DBG_SD_CHIP_ID_LOW_LEN) - 1) << SEC_DBG_SD_CHIP_ID_LOW_POS)\n#define SEC_DBG_SD_CHIP_ID_LOW_UMSK   (~(((1U << SEC_DBG_SD_CHIP_ID_LOW_LEN) - 1) << SEC_DBG_SD_CHIP_ID_LOW_POS))\n\n/* 0x4 : sd_chip_id_high */\n#define SEC_DBG_SD_CHIP_ID_HIGH_OFFSET (0x4)\n#define SEC_DBG_SD_CHIP_ID_HIGH        SEC_DBG_SD_CHIP_ID_HIGH\n#define SEC_DBG_SD_CHIP_ID_HIGH_POS    (0U)\n#define SEC_DBG_SD_CHIP_ID_HIGH_LEN    (32U)\n#define SEC_DBG_SD_CHIP_ID_HIGH_MSK    (((1U << SEC_DBG_SD_CHIP_ID_HIGH_LEN) - 1) << SEC_DBG_SD_CHIP_ID_HIGH_POS)\n#define SEC_DBG_SD_CHIP_ID_HIGH_UMSK   (~(((1U << SEC_DBG_SD_CHIP_ID_HIGH_LEN) - 1) << SEC_DBG_SD_CHIP_ID_HIGH_POS))\n\n/* 0x8 : sd_wifi_mac_low */\n#define SEC_DBG_SD_WIFI_MAC_LOW_OFFSET (0x8)\n#define SEC_DBG_SD_WIFI_MAC_LOW        SEC_DBG_SD_WIFI_MAC_LOW\n#define SEC_DBG_SD_WIFI_MAC_LOW_POS    (0U)\n#define SEC_DBG_SD_WIFI_MAC_LOW_LEN    (32U)\n#define SEC_DBG_SD_WIFI_MAC_LOW_MSK    (((1U << SEC_DBG_SD_WIFI_MAC_LOW_LEN) - 1) << SEC_DBG_SD_WIFI_MAC_LOW_POS)\n#define SEC_DBG_SD_WIFI_MAC_LOW_UMSK   (~(((1U << SEC_DBG_SD_WIFI_MAC_LOW_LEN) - 1) << SEC_DBG_SD_WIFI_MAC_LOW_POS))\n\n/* 0xC : sd_wifi_mac_high */\n#define SEC_DBG_SD_WIFI_MAC_HIGH_OFFSET (0xC)\n#define SEC_DBG_SD_WIFI_MAC_HIGH        SEC_DBG_SD_WIFI_MAC_HIGH\n#define SEC_DBG_SD_WIFI_MAC_HIGH_POS    (0U)\n#define SEC_DBG_SD_WIFI_MAC_HIGH_LEN    (32U)\n#define SEC_DBG_SD_WIFI_MAC_HIGH_MSK    (((1U << SEC_DBG_SD_WIFI_MAC_HIGH_LEN) - 1) << SEC_DBG_SD_WIFI_MAC_HIGH_POS)\n#define SEC_DBG_SD_WIFI_MAC_HIGH_UMSK   (~(((1U << SEC_DBG_SD_WIFI_MAC_HIGH_LEN) - 1) << SEC_DBG_SD_WIFI_MAC_HIGH_POS))\n\n/* 0x10 : sd_dbg_pwd_low */\n#define SEC_DBG_SD_DBG_PWD_LOW_OFFSET (0x10)\n#define SEC_DBG_SD_DBG_PWD_LOW        SEC_DBG_SD_DBG_PWD_LOW\n#define SEC_DBG_SD_DBG_PWD_LOW_POS    (0U)\n#define SEC_DBG_SD_DBG_PWD_LOW_LEN    (32U)\n#define SEC_DBG_SD_DBG_PWD_LOW_MSK    (((1U << SEC_DBG_SD_DBG_PWD_LOW_LEN) - 1) << SEC_DBG_SD_DBG_PWD_LOW_POS)\n#define SEC_DBG_SD_DBG_PWD_LOW_UMSK   (~(((1U << SEC_DBG_SD_DBG_PWD_LOW_LEN) - 1) << SEC_DBG_SD_DBG_PWD_LOW_POS))\n\n/* 0x14 : sd_dbg_pwd_high */\n#define SEC_DBG_SD_DBG_PWD_HIGH_OFFSET (0x14)\n#define SEC_DBG_SD_DBG_PWD_HIGH        SEC_DBG_SD_DBG_PWD_HIGH\n#define SEC_DBG_SD_DBG_PWD_HIGH_POS    (0U)\n#define SEC_DBG_SD_DBG_PWD_HIGH_LEN    (32U)\n#define SEC_DBG_SD_DBG_PWD_HIGH_MSK    (((1U << SEC_DBG_SD_DBG_PWD_HIGH_LEN) - 1) << SEC_DBG_SD_DBG_PWD_HIGH_POS)\n#define SEC_DBG_SD_DBG_PWD_HIGH_UMSK   (~(((1U << SEC_DBG_SD_DBG_PWD_HIGH_LEN) - 1) << SEC_DBG_SD_DBG_PWD_HIGH_POS))\n\n/* 0x18 : sd_status */\n#define SEC_DBG_SD_STATUS_OFFSET        (0x18)\n#define SEC_DBG_SD_DBG_PWD_BUSY         SEC_DBG_SD_DBG_PWD_BUSY\n#define SEC_DBG_SD_DBG_PWD_BUSY_POS     (0U)\n#define SEC_DBG_SD_DBG_PWD_BUSY_LEN     (1U)\n#define SEC_DBG_SD_DBG_PWD_BUSY_MSK     (((1U << SEC_DBG_SD_DBG_PWD_BUSY_LEN) - 1) << SEC_DBG_SD_DBG_PWD_BUSY_POS)\n#define SEC_DBG_SD_DBG_PWD_BUSY_UMSK    (~(((1U << SEC_DBG_SD_DBG_PWD_BUSY_LEN) - 1) << SEC_DBG_SD_DBG_PWD_BUSY_POS))\n#define SEC_DBG_SD_DBG_PWD_TRIG         SEC_DBG_SD_DBG_PWD_TRIG\n#define SEC_DBG_SD_DBG_PWD_TRIG_POS     (1U)\n#define SEC_DBG_SD_DBG_PWD_TRIG_LEN     (1U)\n#define SEC_DBG_SD_DBG_PWD_TRIG_MSK     (((1U << SEC_DBG_SD_DBG_PWD_TRIG_LEN) - 1) << SEC_DBG_SD_DBG_PWD_TRIG_POS)\n#define SEC_DBG_SD_DBG_PWD_TRIG_UMSK    (~(((1U << SEC_DBG_SD_DBG_PWD_TRIG_LEN) - 1) << SEC_DBG_SD_DBG_PWD_TRIG_POS))\n#define SEC_DBG_SD_DBG_CCI_READ_EN      SEC_DBG_SD_DBG_CCI_READ_EN\n#define SEC_DBG_SD_DBG_CCI_READ_EN_POS  (2U)\n#define SEC_DBG_SD_DBG_CCI_READ_EN_LEN  (1U)\n#define SEC_DBG_SD_DBG_CCI_READ_EN_MSK  (((1U << SEC_DBG_SD_DBG_CCI_READ_EN_LEN) - 1) << SEC_DBG_SD_DBG_CCI_READ_EN_POS)\n#define SEC_DBG_SD_DBG_CCI_READ_EN_UMSK (~(((1U << SEC_DBG_SD_DBG_CCI_READ_EN_LEN) - 1) << SEC_DBG_SD_DBG_CCI_READ_EN_POS))\n#define SEC_DBG_SD_DBG_CCI_CLK_SEL      SEC_DBG_SD_DBG_CCI_CLK_SEL\n#define SEC_DBG_SD_DBG_CCI_CLK_SEL_POS  (3U)\n#define SEC_DBG_SD_DBG_CCI_CLK_SEL_LEN  (1U)\n#define SEC_DBG_SD_DBG_CCI_CLK_SEL_MSK  (((1U << SEC_DBG_SD_DBG_CCI_CLK_SEL_LEN) - 1) << SEC_DBG_SD_DBG_CCI_CLK_SEL_POS)\n#define SEC_DBG_SD_DBG_CCI_CLK_SEL_UMSK (~(((1U << SEC_DBG_SD_DBG_CCI_CLK_SEL_LEN) - 1) << SEC_DBG_SD_DBG_CCI_CLK_SEL_POS))\n#define SEC_DBG_SD_DBG_PWD_CNT          SEC_DBG_SD_DBG_PWD_CNT\n#define SEC_DBG_SD_DBG_PWD_CNT_POS      (4U)\n#define SEC_DBG_SD_DBG_PWD_CNT_LEN      (20U)\n#define SEC_DBG_SD_DBG_PWD_CNT_MSK      (((1U << SEC_DBG_SD_DBG_PWD_CNT_LEN) - 1) << SEC_DBG_SD_DBG_PWD_CNT_POS)\n#define SEC_DBG_SD_DBG_PWD_CNT_UMSK     (~(((1U << SEC_DBG_SD_DBG_PWD_CNT_LEN) - 1) << SEC_DBG_SD_DBG_PWD_CNT_POS))\n#define SEC_DBG_SD_DBG_MODE             SEC_DBG_SD_DBG_MODE\n#define SEC_DBG_SD_DBG_MODE_POS         (24U)\n#define SEC_DBG_SD_DBG_MODE_LEN         (4U)\n#define SEC_DBG_SD_DBG_MODE_MSK         (((1U << SEC_DBG_SD_DBG_MODE_LEN) - 1) << SEC_DBG_SD_DBG_MODE_POS)\n#define SEC_DBG_SD_DBG_MODE_UMSK        (~(((1U << SEC_DBG_SD_DBG_MODE_LEN) - 1) << SEC_DBG_SD_DBG_MODE_POS))\n#define SEC_DBG_SD_DBG_ENA              SEC_DBG_SD_DBG_ENA\n#define SEC_DBG_SD_DBG_ENA_POS          (28U)\n#define SEC_DBG_SD_DBG_ENA_LEN          (4U)\n#define SEC_DBG_SD_DBG_ENA_MSK          (((1U << SEC_DBG_SD_DBG_ENA_LEN) - 1) << SEC_DBG_SD_DBG_ENA_POS)\n#define SEC_DBG_SD_DBG_ENA_UMSK         (~(((1U << SEC_DBG_SD_DBG_ENA_LEN) - 1) << SEC_DBG_SD_DBG_ENA_POS))\n\n/* 0x1C : sd_dbg_reserved */\n#define SEC_DBG_SD_DBG_RESERVED_OFFSET (0x1C)\n#define SEC_DBG_SD_DBG_RESERVED        SEC_DBG_SD_DBG_RESERVED\n#define SEC_DBG_SD_DBG_RESERVED_POS    (0U)\n#define SEC_DBG_SD_DBG_RESERVED_LEN    (32U)\n#define SEC_DBG_SD_DBG_RESERVED_MSK    (((1U << SEC_DBG_SD_DBG_RESERVED_LEN) - 1) << SEC_DBG_SD_DBG_RESERVED_POS)\n#define SEC_DBG_SD_DBG_RESERVED_UMSK   (~(((1U << SEC_DBG_SD_DBG_RESERVED_LEN) - 1) << SEC_DBG_SD_DBG_RESERVED_POS))\n\nstruct sec_dbg_reg {\n    /* 0x0 : sd_chip_id_low */\n    union {\n        struct\n        {\n            uint32_t sd_chip_id_low : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sd_chip_id_low;\n\n    /* 0x4 : sd_chip_id_high */\n    union {\n        struct\n        {\n            uint32_t sd_chip_id_high : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sd_chip_id_high;\n\n    /* 0x8 : sd_wifi_mac_low */\n    union {\n        struct\n        {\n            uint32_t sd_wifi_mac_low : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sd_wifi_mac_low;\n\n    /* 0xC : sd_wifi_mac_high */\n    union {\n        struct\n        {\n            uint32_t sd_wifi_mac_high : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sd_wifi_mac_high;\n\n    /* 0x10 : sd_dbg_pwd_low */\n    union {\n        struct\n        {\n            uint32_t sd_dbg_pwd_low : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sd_dbg_pwd_low;\n\n    /* 0x14 : sd_dbg_pwd_high */\n    union {\n        struct\n        {\n            uint32_t sd_dbg_pwd_high : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sd_dbg_pwd_high;\n\n    /* 0x18 : sd_status */\n    union {\n        struct\n        {\n            uint32_t sd_dbg_pwd_busy    : 1;  /* [    0],          r,        0x0 */\n            uint32_t sd_dbg_pwd_trig    : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t sd_dbg_cci_read_en : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t sd_dbg_cci_clk_sel : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t sd_dbg_pwd_cnt     : 20; /* [23: 4],          r,        0x0 */\n            uint32_t sd_dbg_mode        : 4;  /* [27:24],          r,        0x0 */\n            uint32_t sd_dbg_ena         : 4;  /* [31:28],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sd_status;\n\n    /* 0x1C : sd_dbg_reserved */\n    union {\n        struct\n        {\n            uint32_t sd_dbg_reserved : 32; /* [31: 0],        r/w,     0xffff */\n        } BF;\n        uint32_t WORD;\n    } sd_dbg_reserved;\n};\n\ntypedef volatile struct sec_dbg_reg sec_dbg_reg_t;\n\n#endif /* __SEC_DBG_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/sec_eng_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    sec_eng_reg.h\n  * @version V1.2\n  * @date    2020-04-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __SEC_ENG_REG_H__\n#define __SEC_ENG_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : se_sha_0_ctrl */\n#define SEC_ENG_SE_SHA_0_CTRL_OFFSET     (0x0)\n#define SEC_ENG_SE_SHA_0_BUSY            SEC_ENG_SE_SHA_0_BUSY\n#define SEC_ENG_SE_SHA_0_BUSY_POS        (0U)\n#define SEC_ENG_SE_SHA_0_BUSY_LEN        (1U)\n#define SEC_ENG_SE_SHA_0_BUSY_MSK        (((1U << SEC_ENG_SE_SHA_0_BUSY_LEN) - 1) << SEC_ENG_SE_SHA_0_BUSY_POS)\n#define SEC_ENG_SE_SHA_0_BUSY_UMSK       (~(((1U << SEC_ENG_SE_SHA_0_BUSY_LEN) - 1) << SEC_ENG_SE_SHA_0_BUSY_POS))\n#define SEC_ENG_SE_SHA_0_TRIG_1T         SEC_ENG_SE_SHA_0_TRIG_1T\n#define SEC_ENG_SE_SHA_0_TRIG_1T_POS     (1U)\n#define SEC_ENG_SE_SHA_0_TRIG_1T_LEN     (1U)\n#define SEC_ENG_SE_SHA_0_TRIG_1T_MSK     (((1U << SEC_ENG_SE_SHA_0_TRIG_1T_LEN) - 1) << SEC_ENG_SE_SHA_0_TRIG_1T_POS)\n#define SEC_ENG_SE_SHA_0_TRIG_1T_UMSK    (~(((1U << SEC_ENG_SE_SHA_0_TRIG_1T_LEN) - 1) << SEC_ENG_SE_SHA_0_TRIG_1T_POS))\n#define SEC_ENG_SE_SHA_0_MODE            SEC_ENG_SE_SHA_0_MODE\n#define SEC_ENG_SE_SHA_0_MODE_POS        (2U)\n#define SEC_ENG_SE_SHA_0_MODE_LEN        (3U)\n#define SEC_ENG_SE_SHA_0_MODE_MSK        (((1U << SEC_ENG_SE_SHA_0_MODE_LEN) - 1) << SEC_ENG_SE_SHA_0_MODE_POS)\n#define SEC_ENG_SE_SHA_0_MODE_UMSK       (~(((1U << SEC_ENG_SE_SHA_0_MODE_LEN) - 1) << SEC_ENG_SE_SHA_0_MODE_POS))\n#define SEC_ENG_SE_SHA_0_EN              SEC_ENG_SE_SHA_0_EN\n#define SEC_ENG_SE_SHA_0_EN_POS          (5U)\n#define SEC_ENG_SE_SHA_0_EN_LEN          (1U)\n#define SEC_ENG_SE_SHA_0_EN_MSK          (((1U << SEC_ENG_SE_SHA_0_EN_LEN) - 1) << SEC_ENG_SE_SHA_0_EN_POS)\n#define SEC_ENG_SE_SHA_0_EN_UMSK         (~(((1U << SEC_ENG_SE_SHA_0_EN_LEN) - 1) << SEC_ENG_SE_SHA_0_EN_POS))\n#define SEC_ENG_SE_SHA_0_HASH_SEL        SEC_ENG_SE_SHA_0_HASH_SEL\n#define SEC_ENG_SE_SHA_0_HASH_SEL_POS    (6U)\n#define SEC_ENG_SE_SHA_0_HASH_SEL_LEN    (1U)\n#define SEC_ENG_SE_SHA_0_HASH_SEL_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_SEL_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_SEL_POS)\n#define SEC_ENG_SE_SHA_0_HASH_SEL_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_SEL_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_SEL_POS))\n#define SEC_ENG_SE_SHA_0_INT             SEC_ENG_SE_SHA_0_INT\n#define SEC_ENG_SE_SHA_0_INT_POS         (8U)\n#define SEC_ENG_SE_SHA_0_INT_LEN         (1U)\n#define SEC_ENG_SE_SHA_0_INT_MSK         (((1U << SEC_ENG_SE_SHA_0_INT_LEN) - 1) << SEC_ENG_SE_SHA_0_INT_POS)\n#define SEC_ENG_SE_SHA_0_INT_UMSK        (~(((1U << SEC_ENG_SE_SHA_0_INT_LEN) - 1) << SEC_ENG_SE_SHA_0_INT_POS))\n#define SEC_ENG_SE_SHA_0_INT_CLR_1T      SEC_ENG_SE_SHA_0_INT_CLR_1T\n#define SEC_ENG_SE_SHA_0_INT_CLR_1T_POS  (9U)\n#define SEC_ENG_SE_SHA_0_INT_CLR_1T_LEN  (1U)\n#define SEC_ENG_SE_SHA_0_INT_CLR_1T_MSK  (((1U << SEC_ENG_SE_SHA_0_INT_CLR_1T_LEN) - 1) << SEC_ENG_SE_SHA_0_INT_CLR_1T_POS)\n#define SEC_ENG_SE_SHA_0_INT_CLR_1T_UMSK (~(((1U << SEC_ENG_SE_SHA_0_INT_CLR_1T_LEN) - 1) << SEC_ENG_SE_SHA_0_INT_CLR_1T_POS))\n#define SEC_ENG_SE_SHA_0_INT_SET_1T      SEC_ENG_SE_SHA_0_INT_SET_1T\n#define SEC_ENG_SE_SHA_0_INT_SET_1T_POS  (10U)\n#define SEC_ENG_SE_SHA_0_INT_SET_1T_LEN  (1U)\n#define SEC_ENG_SE_SHA_0_INT_SET_1T_MSK  (((1U << SEC_ENG_SE_SHA_0_INT_SET_1T_LEN) - 1) << SEC_ENG_SE_SHA_0_INT_SET_1T_POS)\n#define SEC_ENG_SE_SHA_0_INT_SET_1T_UMSK (~(((1U << SEC_ENG_SE_SHA_0_INT_SET_1T_LEN) - 1) << SEC_ENG_SE_SHA_0_INT_SET_1T_POS))\n#define SEC_ENG_SE_SHA_0_INT_MASK        SEC_ENG_SE_SHA_0_INT_MASK\n#define SEC_ENG_SE_SHA_0_INT_MASK_POS    (11U)\n#define SEC_ENG_SE_SHA_0_INT_MASK_LEN    (1U)\n#define SEC_ENG_SE_SHA_0_INT_MASK_MSK    (((1U << SEC_ENG_SE_SHA_0_INT_MASK_LEN) - 1) << SEC_ENG_SE_SHA_0_INT_MASK_POS)\n#define SEC_ENG_SE_SHA_0_INT_MASK_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_INT_MASK_LEN) - 1) << SEC_ENG_SE_SHA_0_INT_MASK_POS))\n#define SEC_ENG_SE_SHA_0_LINK_MODE       SEC_ENG_SE_SHA_0_LINK_MODE\n#define SEC_ENG_SE_SHA_0_LINK_MODE_POS   (15U)\n#define SEC_ENG_SE_SHA_0_LINK_MODE_LEN   (1U)\n#define SEC_ENG_SE_SHA_0_LINK_MODE_MSK   (((1U << SEC_ENG_SE_SHA_0_LINK_MODE_LEN) - 1) << SEC_ENG_SE_SHA_0_LINK_MODE_POS)\n#define SEC_ENG_SE_SHA_0_LINK_MODE_UMSK  (~(((1U << SEC_ENG_SE_SHA_0_LINK_MODE_LEN) - 1) << SEC_ENG_SE_SHA_0_LINK_MODE_POS))\n#define SEC_ENG_SE_SHA_0_MSG_LEN         SEC_ENG_SE_SHA_0_MSG_LEN\n#define SEC_ENG_SE_SHA_0_MSG_LEN_POS     (16U)\n#define SEC_ENG_SE_SHA_0_MSG_LEN_LEN     (16U)\n#define SEC_ENG_SE_SHA_0_MSG_LEN_MSK     (((1U << SEC_ENG_SE_SHA_0_MSG_LEN_LEN) - 1) << SEC_ENG_SE_SHA_0_MSG_LEN_POS)\n#define SEC_ENG_SE_SHA_0_MSG_LEN_UMSK    (~(((1U << SEC_ENG_SE_SHA_0_MSG_LEN_LEN) - 1) << SEC_ENG_SE_SHA_0_MSG_LEN_POS))\n\n/* 0x4 : se_sha_0_msa */\n#define SEC_ENG_SE_SHA_0_MSA_OFFSET (0x4)\n#define SEC_ENG_SE_SHA_0_MSA        SEC_ENG_SE_SHA_0_MSA\n#define SEC_ENG_SE_SHA_0_MSA_POS    (0U)\n#define SEC_ENG_SE_SHA_0_MSA_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_MSA_MSK    (((1U << SEC_ENG_SE_SHA_0_MSA_LEN) - 1) << SEC_ENG_SE_SHA_0_MSA_POS)\n#define SEC_ENG_SE_SHA_0_MSA_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_MSA_LEN) - 1) << SEC_ENG_SE_SHA_0_MSA_POS))\n\n/* 0x8 : se_sha_0_status */\n#define SEC_ENG_SE_SHA_0_STATUS_OFFSET (0x8)\n#define SEC_ENG_SE_SHA_0_STATUS        SEC_ENG_SE_SHA_0_STATUS\n#define SEC_ENG_SE_SHA_0_STATUS_POS    (0U)\n#define SEC_ENG_SE_SHA_0_STATUS_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_STATUS_MSK    (((1U << SEC_ENG_SE_SHA_0_STATUS_LEN) - 1) << SEC_ENG_SE_SHA_0_STATUS_POS)\n#define SEC_ENG_SE_SHA_0_STATUS_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_STATUS_LEN) - 1) << SEC_ENG_SE_SHA_0_STATUS_POS))\n\n/* 0xC : se_sha_0_endian */\n#define SEC_ENG_SE_SHA_0_ENDIAN_OFFSET    (0xC)\n#define SEC_ENG_SE_SHA_0_DOUT_ENDIAN      SEC_ENG_SE_SHA_0_DOUT_ENDIAN\n#define SEC_ENG_SE_SHA_0_DOUT_ENDIAN_POS  (0U)\n#define SEC_ENG_SE_SHA_0_DOUT_ENDIAN_LEN  (1U)\n#define SEC_ENG_SE_SHA_0_DOUT_ENDIAN_MSK  (((1U << SEC_ENG_SE_SHA_0_DOUT_ENDIAN_LEN) - 1) << SEC_ENG_SE_SHA_0_DOUT_ENDIAN_POS)\n#define SEC_ENG_SE_SHA_0_DOUT_ENDIAN_UMSK (~(((1U << SEC_ENG_SE_SHA_0_DOUT_ENDIAN_LEN) - 1) << SEC_ENG_SE_SHA_0_DOUT_ENDIAN_POS))\n\n/* 0x10 : se_sha_0_hash_l_0 */\n#define SEC_ENG_SE_SHA_0_HASH_L_0_OFFSET (0x10)\n#define SEC_ENG_SE_SHA_0_HASH_L_0        SEC_ENG_SE_SHA_0_HASH_L_0\n#define SEC_ENG_SE_SHA_0_HASH_L_0_POS    (0U)\n#define SEC_ENG_SE_SHA_0_HASH_L_0_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_HASH_L_0_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_L_0_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_L_0_POS)\n#define SEC_ENG_SE_SHA_0_HASH_L_0_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_L_0_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_L_0_POS))\n\n/* 0x14 : se_sha_0_hash_l_1 */\n#define SEC_ENG_SE_SHA_0_HASH_L_1_OFFSET (0x14)\n#define SEC_ENG_SE_SHA_0_HASH_L_1        SEC_ENG_SE_SHA_0_HASH_L_1\n#define SEC_ENG_SE_SHA_0_HASH_L_1_POS    (0U)\n#define SEC_ENG_SE_SHA_0_HASH_L_1_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_HASH_L_1_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_L_1_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_L_1_POS)\n#define SEC_ENG_SE_SHA_0_HASH_L_1_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_L_1_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_L_1_POS))\n\n/* 0x18 : se_sha_0_hash_l_2 */\n#define SEC_ENG_SE_SHA_0_HASH_L_2_OFFSET (0x18)\n#define SEC_ENG_SE_SHA_0_HASH_L_2        SEC_ENG_SE_SHA_0_HASH_L_2\n#define SEC_ENG_SE_SHA_0_HASH_L_2_POS    (0U)\n#define SEC_ENG_SE_SHA_0_HASH_L_2_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_HASH_L_2_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_L_2_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_L_2_POS)\n#define SEC_ENG_SE_SHA_0_HASH_L_2_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_L_2_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_L_2_POS))\n\n/* 0x1C : se_sha_0_hash_l_3 */\n#define SEC_ENG_SE_SHA_0_HASH_L_3_OFFSET (0x1C)\n#define SEC_ENG_SE_SHA_0_HASH_L_3        SEC_ENG_SE_SHA_0_HASH_L_3\n#define SEC_ENG_SE_SHA_0_HASH_L_3_POS    (0U)\n#define SEC_ENG_SE_SHA_0_HASH_L_3_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_HASH_L_3_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_L_3_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_L_3_POS)\n#define SEC_ENG_SE_SHA_0_HASH_L_3_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_L_3_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_L_3_POS))\n\n/* 0x20 : se_sha_0_hash_l_4 */\n#define SEC_ENG_SE_SHA_0_HASH_L_4_OFFSET (0x20)\n#define SEC_ENG_SE_SHA_0_HASH_L_4        SEC_ENG_SE_SHA_0_HASH_L_4\n#define SEC_ENG_SE_SHA_0_HASH_L_4_POS    (0U)\n#define SEC_ENG_SE_SHA_0_HASH_L_4_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_HASH_L_4_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_L_4_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_L_4_POS)\n#define SEC_ENG_SE_SHA_0_HASH_L_4_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_L_4_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_L_4_POS))\n\n/* 0x24 : se_sha_0_hash_l_5 */\n#define SEC_ENG_SE_SHA_0_HASH_L_5_OFFSET (0x24)\n#define SEC_ENG_SE_SHA_0_HASH_L_5        SEC_ENG_SE_SHA_0_HASH_L_5\n#define SEC_ENG_SE_SHA_0_HASH_L_5_POS    (0U)\n#define SEC_ENG_SE_SHA_0_HASH_L_5_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_HASH_L_5_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_L_5_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_L_5_POS)\n#define SEC_ENG_SE_SHA_0_HASH_L_5_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_L_5_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_L_5_POS))\n\n/* 0x28 : se_sha_0_hash_l_6 */\n#define SEC_ENG_SE_SHA_0_HASH_L_6_OFFSET (0x28)\n#define SEC_ENG_SE_SHA_0_HASH_L_6        SEC_ENG_SE_SHA_0_HASH_L_6\n#define SEC_ENG_SE_SHA_0_HASH_L_6_POS    (0U)\n#define SEC_ENG_SE_SHA_0_HASH_L_6_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_HASH_L_6_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_L_6_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_L_6_POS)\n#define SEC_ENG_SE_SHA_0_HASH_L_6_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_L_6_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_L_6_POS))\n\n/* 0x2C : se_sha_0_hash_l_7 */\n#define SEC_ENG_SE_SHA_0_HASH_L_7_OFFSET (0x2C)\n#define SEC_ENG_SE_SHA_0_HASH_L_7        SEC_ENG_SE_SHA_0_HASH_L_7\n#define SEC_ENG_SE_SHA_0_HASH_L_7_POS    (0U)\n#define SEC_ENG_SE_SHA_0_HASH_L_7_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_HASH_L_7_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_L_7_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_L_7_POS)\n#define SEC_ENG_SE_SHA_0_HASH_L_7_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_L_7_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_L_7_POS))\n\n/* 0x30 : se_sha_0_hash_h_0 */\n#define SEC_ENG_SE_SHA_0_HASH_H_0_OFFSET (0x30)\n#define SEC_ENG_SE_SHA_0_HASH_H_0        SEC_ENG_SE_SHA_0_HASH_H_0\n#define SEC_ENG_SE_SHA_0_HASH_H_0_POS    (0U)\n#define SEC_ENG_SE_SHA_0_HASH_H_0_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_HASH_H_0_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_H_0_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_H_0_POS)\n#define SEC_ENG_SE_SHA_0_HASH_H_0_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_H_0_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_H_0_POS))\n\n/* 0x34 : se_sha_0_hash_h_1 */\n#define SEC_ENG_SE_SHA_0_HASH_H_1_OFFSET (0x34)\n#define SEC_ENG_SE_SHA_0_HASH_H_1        SEC_ENG_SE_SHA_0_HASH_H_1\n#define SEC_ENG_SE_SHA_0_HASH_H_1_POS    (0U)\n#define SEC_ENG_SE_SHA_0_HASH_H_1_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_HASH_H_1_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_H_1_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_H_1_POS)\n#define SEC_ENG_SE_SHA_0_HASH_H_1_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_H_1_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_H_1_POS))\n\n/* 0x38 : se_sha_0_hash_h_2 */\n#define SEC_ENG_SE_SHA_0_HASH_H_2_OFFSET (0x38)\n#define SEC_ENG_SE_SHA_0_HASH_H_2        SEC_ENG_SE_SHA_0_HASH_H_2\n#define SEC_ENG_SE_SHA_0_HASH_H_2_POS    (0U)\n#define SEC_ENG_SE_SHA_0_HASH_H_2_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_HASH_H_2_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_H_2_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_H_2_POS)\n#define SEC_ENG_SE_SHA_0_HASH_H_2_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_H_2_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_H_2_POS))\n\n/* 0x3C : se_sha_0_hash_h_3 */\n#define SEC_ENG_SE_SHA_0_HASH_H_3_OFFSET (0x3C)\n#define SEC_ENG_SE_SHA_0_HASH_H_3        SEC_ENG_SE_SHA_0_HASH_H_3\n#define SEC_ENG_SE_SHA_0_HASH_H_3_POS    (0U)\n#define SEC_ENG_SE_SHA_0_HASH_H_3_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_HASH_H_3_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_H_3_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_H_3_POS)\n#define SEC_ENG_SE_SHA_0_HASH_H_3_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_H_3_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_H_3_POS))\n\n/* 0x40 : se_sha_0_hash_h_4 */\n#define SEC_ENG_SE_SHA_0_HASH_H_4_OFFSET (0x40)\n#define SEC_ENG_SE_SHA_0_HASH_H_4        SEC_ENG_SE_SHA_0_HASH_H_4\n#define SEC_ENG_SE_SHA_0_HASH_H_4_POS    (0U)\n#define SEC_ENG_SE_SHA_0_HASH_H_4_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_HASH_H_4_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_H_4_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_H_4_POS)\n#define SEC_ENG_SE_SHA_0_HASH_H_4_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_H_4_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_H_4_POS))\n\n/* 0x44 : se_sha_0_hash_h_5 */\n#define SEC_ENG_SE_SHA_0_HASH_H_5_OFFSET (0x44)\n#define SEC_ENG_SE_SHA_0_HASH_H_5        SEC_ENG_SE_SHA_0_HASH_H_5\n#define SEC_ENG_SE_SHA_0_HASH_H_5_POS    (0U)\n#define SEC_ENG_SE_SHA_0_HASH_H_5_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_HASH_H_5_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_H_5_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_H_5_POS)\n#define SEC_ENG_SE_SHA_0_HASH_H_5_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_H_5_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_H_5_POS))\n\n/* 0x48 : se_sha_0_hash_h_6 */\n#define SEC_ENG_SE_SHA_0_HASH_H_6_OFFSET (0x48)\n#define SEC_ENG_SE_SHA_0_HASH_H_6        SEC_ENG_SE_SHA_0_HASH_H_6\n#define SEC_ENG_SE_SHA_0_HASH_H_6_POS    (0U)\n#define SEC_ENG_SE_SHA_0_HASH_H_6_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_HASH_H_6_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_H_6_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_H_6_POS)\n#define SEC_ENG_SE_SHA_0_HASH_H_6_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_H_6_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_H_6_POS))\n\n/* 0x4C : se_sha_0_hash_h_7 */\n#define SEC_ENG_SE_SHA_0_HASH_H_7_OFFSET (0x4C)\n#define SEC_ENG_SE_SHA_0_HASH_H_7        SEC_ENG_SE_SHA_0_HASH_H_7\n#define SEC_ENG_SE_SHA_0_HASH_H_7_POS    (0U)\n#define SEC_ENG_SE_SHA_0_HASH_H_7_LEN    (32U)\n#define SEC_ENG_SE_SHA_0_HASH_H_7_MSK    (((1U << SEC_ENG_SE_SHA_0_HASH_H_7_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_H_7_POS)\n#define SEC_ENG_SE_SHA_0_HASH_H_7_UMSK   (~(((1U << SEC_ENG_SE_SHA_0_HASH_H_7_LEN) - 1) << SEC_ENG_SE_SHA_0_HASH_H_7_POS))\n\n/* 0x50 : se_sha_0_link */\n#define SEC_ENG_SE_SHA_0_LINK_OFFSET (0x50)\n#define SEC_ENG_SE_SHA_0_LCA         SEC_ENG_SE_SHA_0_LCA\n#define SEC_ENG_SE_SHA_0_LCA_POS     (0U)\n#define SEC_ENG_SE_SHA_0_LCA_LEN     (32U)\n#define SEC_ENG_SE_SHA_0_LCA_MSK     (((1U << SEC_ENG_SE_SHA_0_LCA_LEN) - 1) << SEC_ENG_SE_SHA_0_LCA_POS)\n#define SEC_ENG_SE_SHA_0_LCA_UMSK    (~(((1U << SEC_ENG_SE_SHA_0_LCA_LEN) - 1) << SEC_ENG_SE_SHA_0_LCA_POS))\n\n/* 0xFC : se_sha_0_ctrl_prot */\n#define SEC_ENG_SE_SHA_0_CTRL_PROT_OFFSET (0xFC)\n#define SEC_ENG_SE_SHA_PROT_EN            SEC_ENG_SE_SHA_PROT_EN\n#define SEC_ENG_SE_SHA_PROT_EN_POS        (0U)\n#define SEC_ENG_SE_SHA_PROT_EN_LEN        (1U)\n#define SEC_ENG_SE_SHA_PROT_EN_MSK        (((1U << SEC_ENG_SE_SHA_PROT_EN_LEN) - 1) << SEC_ENG_SE_SHA_PROT_EN_POS)\n#define SEC_ENG_SE_SHA_PROT_EN_UMSK       (~(((1U << SEC_ENG_SE_SHA_PROT_EN_LEN) - 1) << SEC_ENG_SE_SHA_PROT_EN_POS))\n#define SEC_ENG_SE_SHA_ID0_EN             SEC_ENG_SE_SHA_ID0_EN\n#define SEC_ENG_SE_SHA_ID0_EN_POS         (1U)\n#define SEC_ENG_SE_SHA_ID0_EN_LEN         (1U)\n#define SEC_ENG_SE_SHA_ID0_EN_MSK         (((1U << SEC_ENG_SE_SHA_ID0_EN_LEN) - 1) << SEC_ENG_SE_SHA_ID0_EN_POS)\n#define SEC_ENG_SE_SHA_ID0_EN_UMSK        (~(((1U << SEC_ENG_SE_SHA_ID0_EN_LEN) - 1) << SEC_ENG_SE_SHA_ID0_EN_POS))\n#define SEC_ENG_SE_SHA_ID1_EN             SEC_ENG_SE_SHA_ID1_EN\n#define SEC_ENG_SE_SHA_ID1_EN_POS         (2U)\n#define SEC_ENG_SE_SHA_ID1_EN_LEN         (1U)\n#define SEC_ENG_SE_SHA_ID1_EN_MSK         (((1U << SEC_ENG_SE_SHA_ID1_EN_LEN) - 1) << SEC_ENG_SE_SHA_ID1_EN_POS)\n#define SEC_ENG_SE_SHA_ID1_EN_UMSK        (~(((1U << SEC_ENG_SE_SHA_ID1_EN_LEN) - 1) << SEC_ENG_SE_SHA_ID1_EN_POS))\n\n/* 0x100 : se_aes_0_ctrl */\n#define SEC_ENG_SE_AES_0_CTRL_OFFSET      (0x100)\n#define SEC_ENG_SE_AES_0_BUSY             SEC_ENG_SE_AES_0_BUSY\n#define SEC_ENG_SE_AES_0_BUSY_POS         (0U)\n#define SEC_ENG_SE_AES_0_BUSY_LEN         (1U)\n#define SEC_ENG_SE_AES_0_BUSY_MSK         (((1U << SEC_ENG_SE_AES_0_BUSY_LEN) - 1) << SEC_ENG_SE_AES_0_BUSY_POS)\n#define SEC_ENG_SE_AES_0_BUSY_UMSK        (~(((1U << SEC_ENG_SE_AES_0_BUSY_LEN) - 1) << SEC_ENG_SE_AES_0_BUSY_POS))\n#define SEC_ENG_SE_AES_0_TRIG_1T          SEC_ENG_SE_AES_0_TRIG_1T\n#define SEC_ENG_SE_AES_0_TRIG_1T_POS      (1U)\n#define SEC_ENG_SE_AES_0_TRIG_1T_LEN      (1U)\n#define SEC_ENG_SE_AES_0_TRIG_1T_MSK      (((1U << SEC_ENG_SE_AES_0_TRIG_1T_LEN) - 1) << SEC_ENG_SE_AES_0_TRIG_1T_POS)\n#define SEC_ENG_SE_AES_0_TRIG_1T_UMSK     (~(((1U << SEC_ENG_SE_AES_0_TRIG_1T_LEN) - 1) << SEC_ENG_SE_AES_0_TRIG_1T_POS))\n#define SEC_ENG_SE_AES_0_EN               SEC_ENG_SE_AES_0_EN\n#define SEC_ENG_SE_AES_0_EN_POS           (2U)\n#define SEC_ENG_SE_AES_0_EN_LEN           (1U)\n#define SEC_ENG_SE_AES_0_EN_MSK           (((1U << SEC_ENG_SE_AES_0_EN_LEN) - 1) << SEC_ENG_SE_AES_0_EN_POS)\n#define SEC_ENG_SE_AES_0_EN_UMSK          (~(((1U << SEC_ENG_SE_AES_0_EN_LEN) - 1) << SEC_ENG_SE_AES_0_EN_POS))\n#define SEC_ENG_SE_AES_0_MODE             SEC_ENG_SE_AES_0_MODE\n#define SEC_ENG_SE_AES_0_MODE_POS         (3U)\n#define SEC_ENG_SE_AES_0_MODE_LEN         (2U)\n#define SEC_ENG_SE_AES_0_MODE_MSK         (((1U << SEC_ENG_SE_AES_0_MODE_LEN) - 1) << SEC_ENG_SE_AES_0_MODE_POS)\n#define SEC_ENG_SE_AES_0_MODE_UMSK        (~(((1U << SEC_ENG_SE_AES_0_MODE_LEN) - 1) << SEC_ENG_SE_AES_0_MODE_POS))\n#define SEC_ENG_SE_AES_0_DEC_EN           SEC_ENG_SE_AES_0_DEC_EN\n#define SEC_ENG_SE_AES_0_DEC_EN_POS       (5U)\n#define SEC_ENG_SE_AES_0_DEC_EN_LEN       (1U)\n#define SEC_ENG_SE_AES_0_DEC_EN_MSK       (((1U << SEC_ENG_SE_AES_0_DEC_EN_LEN) - 1) << SEC_ENG_SE_AES_0_DEC_EN_POS)\n#define SEC_ENG_SE_AES_0_DEC_EN_UMSK      (~(((1U << SEC_ENG_SE_AES_0_DEC_EN_LEN) - 1) << SEC_ENG_SE_AES_0_DEC_EN_POS))\n#define SEC_ENG_SE_AES_0_DEC_KEY_SEL      SEC_ENG_SE_AES_0_DEC_KEY_SEL\n#define SEC_ENG_SE_AES_0_DEC_KEY_SEL_POS  (6U)\n#define SEC_ENG_SE_AES_0_DEC_KEY_SEL_LEN  (1U)\n#define SEC_ENG_SE_AES_0_DEC_KEY_SEL_MSK  (((1U << SEC_ENG_SE_AES_0_DEC_KEY_SEL_LEN) - 1) << SEC_ENG_SE_AES_0_DEC_KEY_SEL_POS)\n#define SEC_ENG_SE_AES_0_DEC_KEY_SEL_UMSK (~(((1U << SEC_ENG_SE_AES_0_DEC_KEY_SEL_LEN) - 1) << SEC_ENG_SE_AES_0_DEC_KEY_SEL_POS))\n#define SEC_ENG_SE_AES_0_HW_KEY_EN        SEC_ENG_SE_AES_0_HW_KEY_EN\n#define SEC_ENG_SE_AES_0_HW_KEY_EN_POS    (7U)\n#define SEC_ENG_SE_AES_0_HW_KEY_EN_LEN    (1U)\n#define SEC_ENG_SE_AES_0_HW_KEY_EN_MSK    (((1U << SEC_ENG_SE_AES_0_HW_KEY_EN_LEN) - 1) << SEC_ENG_SE_AES_0_HW_KEY_EN_POS)\n#define SEC_ENG_SE_AES_0_HW_KEY_EN_UMSK   (~(((1U << SEC_ENG_SE_AES_0_HW_KEY_EN_LEN) - 1) << SEC_ENG_SE_AES_0_HW_KEY_EN_POS))\n#define SEC_ENG_SE_AES_0_INT              SEC_ENG_SE_AES_0_INT\n#define SEC_ENG_SE_AES_0_INT_POS          (8U)\n#define SEC_ENG_SE_AES_0_INT_LEN          (1U)\n#define SEC_ENG_SE_AES_0_INT_MSK          (((1U << SEC_ENG_SE_AES_0_INT_LEN) - 1) << SEC_ENG_SE_AES_0_INT_POS)\n#define SEC_ENG_SE_AES_0_INT_UMSK         (~(((1U << SEC_ENG_SE_AES_0_INT_LEN) - 1) << SEC_ENG_SE_AES_0_INT_POS))\n#define SEC_ENG_SE_AES_0_INT_CLR_1T       SEC_ENG_SE_AES_0_INT_CLR_1T\n#define SEC_ENG_SE_AES_0_INT_CLR_1T_POS   (9U)\n#define SEC_ENG_SE_AES_0_INT_CLR_1T_LEN   (1U)\n#define SEC_ENG_SE_AES_0_INT_CLR_1T_MSK   (((1U << SEC_ENG_SE_AES_0_INT_CLR_1T_LEN) - 1) << SEC_ENG_SE_AES_0_INT_CLR_1T_POS)\n#define SEC_ENG_SE_AES_0_INT_CLR_1T_UMSK  (~(((1U << SEC_ENG_SE_AES_0_INT_CLR_1T_LEN) - 1) << SEC_ENG_SE_AES_0_INT_CLR_1T_POS))\n#define SEC_ENG_SE_AES_0_INT_SET_1T       SEC_ENG_SE_AES_0_INT_SET_1T\n#define SEC_ENG_SE_AES_0_INT_SET_1T_POS   (10U)\n#define SEC_ENG_SE_AES_0_INT_SET_1T_LEN   (1U)\n#define SEC_ENG_SE_AES_0_INT_SET_1T_MSK   (((1U << SEC_ENG_SE_AES_0_INT_SET_1T_LEN) - 1) << SEC_ENG_SE_AES_0_INT_SET_1T_POS)\n#define SEC_ENG_SE_AES_0_INT_SET_1T_UMSK  (~(((1U << SEC_ENG_SE_AES_0_INT_SET_1T_LEN) - 1) << SEC_ENG_SE_AES_0_INT_SET_1T_POS))\n#define SEC_ENG_SE_AES_0_INT_MASK         SEC_ENG_SE_AES_0_INT_MASK\n#define SEC_ENG_SE_AES_0_INT_MASK_POS     (11U)\n#define SEC_ENG_SE_AES_0_INT_MASK_LEN     (1U)\n#define SEC_ENG_SE_AES_0_INT_MASK_MSK     (((1U << SEC_ENG_SE_AES_0_INT_MASK_LEN) - 1) << SEC_ENG_SE_AES_0_INT_MASK_POS)\n#define SEC_ENG_SE_AES_0_INT_MASK_UMSK    (~(((1U << SEC_ENG_SE_AES_0_INT_MASK_LEN) - 1) << SEC_ENG_SE_AES_0_INT_MASK_POS))\n#define SEC_ENG_SE_AES_0_BLOCK_MODE       SEC_ENG_SE_AES_0_BLOCK_MODE\n#define SEC_ENG_SE_AES_0_BLOCK_MODE_POS   (12U)\n#define SEC_ENG_SE_AES_0_BLOCK_MODE_LEN   (2U)\n#define SEC_ENG_SE_AES_0_BLOCK_MODE_MSK   (((1U << SEC_ENG_SE_AES_0_BLOCK_MODE_LEN) - 1) << SEC_ENG_SE_AES_0_BLOCK_MODE_POS)\n#define SEC_ENG_SE_AES_0_BLOCK_MODE_UMSK  (~(((1U << SEC_ENG_SE_AES_0_BLOCK_MODE_LEN) - 1) << SEC_ENG_SE_AES_0_BLOCK_MODE_POS))\n#define SEC_ENG_SE_AES_0_IV_SEL           SEC_ENG_SE_AES_0_IV_SEL\n#define SEC_ENG_SE_AES_0_IV_SEL_POS       (14U)\n#define SEC_ENG_SE_AES_0_IV_SEL_LEN       (1U)\n#define SEC_ENG_SE_AES_0_IV_SEL_MSK       (((1U << SEC_ENG_SE_AES_0_IV_SEL_LEN) - 1) << SEC_ENG_SE_AES_0_IV_SEL_POS)\n#define SEC_ENG_SE_AES_0_IV_SEL_UMSK      (~(((1U << SEC_ENG_SE_AES_0_IV_SEL_LEN) - 1) << SEC_ENG_SE_AES_0_IV_SEL_POS))\n#define SEC_ENG_SE_AES_0_LINK_MODE        SEC_ENG_SE_AES_0_LINK_MODE\n#define SEC_ENG_SE_AES_0_LINK_MODE_POS    (15U)\n#define SEC_ENG_SE_AES_0_LINK_MODE_LEN    (1U)\n#define SEC_ENG_SE_AES_0_LINK_MODE_MSK    (((1U << SEC_ENG_SE_AES_0_LINK_MODE_LEN) - 1) << SEC_ENG_SE_AES_0_LINK_MODE_POS)\n#define SEC_ENG_SE_AES_0_LINK_MODE_UMSK   (~(((1U << SEC_ENG_SE_AES_0_LINK_MODE_LEN) - 1) << SEC_ENG_SE_AES_0_LINK_MODE_POS))\n#define SEC_ENG_SE_AES_0_MSG_LEN          SEC_ENG_SE_AES_0_MSG_LEN\n#define SEC_ENG_SE_AES_0_MSG_LEN_POS      (16U)\n#define SEC_ENG_SE_AES_0_MSG_LEN_LEN      (16U)\n#define SEC_ENG_SE_AES_0_MSG_LEN_MSK      (((1U << SEC_ENG_SE_AES_0_MSG_LEN_LEN) - 1) << SEC_ENG_SE_AES_0_MSG_LEN_POS)\n#define SEC_ENG_SE_AES_0_MSG_LEN_UMSK     (~(((1U << SEC_ENG_SE_AES_0_MSG_LEN_LEN) - 1) << SEC_ENG_SE_AES_0_MSG_LEN_POS))\n\n/* 0x104 : se_aes_0_msa */\n#define SEC_ENG_SE_AES_0_MSA_OFFSET (0x104)\n#define SEC_ENG_SE_AES_0_MSA        SEC_ENG_SE_AES_0_MSA\n#define SEC_ENG_SE_AES_0_MSA_POS    (0U)\n#define SEC_ENG_SE_AES_0_MSA_LEN    (32U)\n#define SEC_ENG_SE_AES_0_MSA_MSK    (((1U << SEC_ENG_SE_AES_0_MSA_LEN) - 1) << SEC_ENG_SE_AES_0_MSA_POS)\n#define SEC_ENG_SE_AES_0_MSA_UMSK   (~(((1U << SEC_ENG_SE_AES_0_MSA_LEN) - 1) << SEC_ENG_SE_AES_0_MSA_POS))\n\n/* 0x108 : se_aes_0_mda */\n#define SEC_ENG_SE_AES_0_MDA_OFFSET (0x108)\n#define SEC_ENG_SE_AES_0_MDA        SEC_ENG_SE_AES_0_MDA\n#define SEC_ENG_SE_AES_0_MDA_POS    (0U)\n#define SEC_ENG_SE_AES_0_MDA_LEN    (32U)\n#define SEC_ENG_SE_AES_0_MDA_MSK    (((1U << SEC_ENG_SE_AES_0_MDA_LEN) - 1) << SEC_ENG_SE_AES_0_MDA_POS)\n#define SEC_ENG_SE_AES_0_MDA_UMSK   (~(((1U << SEC_ENG_SE_AES_0_MDA_LEN) - 1) << SEC_ENG_SE_AES_0_MDA_POS))\n\n/* 0x10C : se_aes_0_status */\n#define SEC_ENG_SE_AES_0_STATUS_OFFSET (0x10C)\n#define SEC_ENG_SE_AES_0_STATUS        SEC_ENG_SE_AES_0_STATUS\n#define SEC_ENG_SE_AES_0_STATUS_POS    (0U)\n#define SEC_ENG_SE_AES_0_STATUS_LEN    (32U)\n#define SEC_ENG_SE_AES_0_STATUS_MSK    (((1U << SEC_ENG_SE_AES_0_STATUS_LEN) - 1) << SEC_ENG_SE_AES_0_STATUS_POS)\n#define SEC_ENG_SE_AES_0_STATUS_UMSK   (~(((1U << SEC_ENG_SE_AES_0_STATUS_LEN) - 1) << SEC_ENG_SE_AES_0_STATUS_POS))\n\n/* 0x110 : se_aes_0_iv_0 */\n#define SEC_ENG_SE_AES_0_IV_0_OFFSET (0x110)\n#define SEC_ENG_SE_AES_0_IV_0        SEC_ENG_SE_AES_0_IV_0\n#define SEC_ENG_SE_AES_0_IV_0_POS    (0U)\n#define SEC_ENG_SE_AES_0_IV_0_LEN    (32U)\n#define SEC_ENG_SE_AES_0_IV_0_MSK    (((1U << SEC_ENG_SE_AES_0_IV_0_LEN) - 1) << SEC_ENG_SE_AES_0_IV_0_POS)\n#define SEC_ENG_SE_AES_0_IV_0_UMSK   (~(((1U << SEC_ENG_SE_AES_0_IV_0_LEN) - 1) << SEC_ENG_SE_AES_0_IV_0_POS))\n\n/* 0x114 : se_aes_0_iv_1 */\n#define SEC_ENG_SE_AES_0_IV_1_OFFSET (0x114)\n#define SEC_ENG_SE_AES_0_IV_1        SEC_ENG_SE_AES_0_IV_1\n#define SEC_ENG_SE_AES_0_IV_1_POS    (0U)\n#define SEC_ENG_SE_AES_0_IV_1_LEN    (32U)\n#define SEC_ENG_SE_AES_0_IV_1_MSK    (((1U << SEC_ENG_SE_AES_0_IV_1_LEN) - 1) << SEC_ENG_SE_AES_0_IV_1_POS)\n#define SEC_ENG_SE_AES_0_IV_1_UMSK   (~(((1U << SEC_ENG_SE_AES_0_IV_1_LEN) - 1) << SEC_ENG_SE_AES_0_IV_1_POS))\n\n/* 0x118 : se_aes_0_iv_2 */\n#define SEC_ENG_SE_AES_0_IV_2_OFFSET (0x118)\n#define SEC_ENG_SE_AES_0_IV_2        SEC_ENG_SE_AES_0_IV_2\n#define SEC_ENG_SE_AES_0_IV_2_POS    (0U)\n#define SEC_ENG_SE_AES_0_IV_2_LEN    (32U)\n#define SEC_ENG_SE_AES_0_IV_2_MSK    (((1U << SEC_ENG_SE_AES_0_IV_2_LEN) - 1) << SEC_ENG_SE_AES_0_IV_2_POS)\n#define SEC_ENG_SE_AES_0_IV_2_UMSK   (~(((1U << SEC_ENG_SE_AES_0_IV_2_LEN) - 1) << SEC_ENG_SE_AES_0_IV_2_POS))\n\n/* 0x11C : se_aes_0_iv_3 */\n#define SEC_ENG_SE_AES_0_IV_3_OFFSET (0x11C)\n#define SEC_ENG_SE_AES_0_IV_3        SEC_ENG_SE_AES_0_IV_3\n#define SEC_ENG_SE_AES_0_IV_3_POS    (0U)\n#define SEC_ENG_SE_AES_0_IV_3_LEN    (32U)\n#define SEC_ENG_SE_AES_0_IV_3_MSK    (((1U << SEC_ENG_SE_AES_0_IV_3_LEN) - 1) << SEC_ENG_SE_AES_0_IV_3_POS)\n#define SEC_ENG_SE_AES_0_IV_3_UMSK   (~(((1U << SEC_ENG_SE_AES_0_IV_3_LEN) - 1) << SEC_ENG_SE_AES_0_IV_3_POS))\n\n/* 0x120 : se_aes_0_key_0 */\n#define SEC_ENG_SE_AES_0_KEY_0_OFFSET (0x120)\n#define SEC_ENG_SE_AES_0_KEY_0        SEC_ENG_SE_AES_0_KEY_0\n#define SEC_ENG_SE_AES_0_KEY_0_POS    (0U)\n#define SEC_ENG_SE_AES_0_KEY_0_LEN    (32U)\n#define SEC_ENG_SE_AES_0_KEY_0_MSK    (((1U << SEC_ENG_SE_AES_0_KEY_0_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_0_POS)\n#define SEC_ENG_SE_AES_0_KEY_0_UMSK   (~(((1U << SEC_ENG_SE_AES_0_KEY_0_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_0_POS))\n\n/* 0x124 : se_aes_0_key_1 */\n#define SEC_ENG_SE_AES_0_KEY_1_OFFSET (0x124)\n#define SEC_ENG_SE_AES_0_KEY_1        SEC_ENG_SE_AES_0_KEY_1\n#define SEC_ENG_SE_AES_0_KEY_1_POS    (0U)\n#define SEC_ENG_SE_AES_0_KEY_1_LEN    (32U)\n#define SEC_ENG_SE_AES_0_KEY_1_MSK    (((1U << SEC_ENG_SE_AES_0_KEY_1_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_1_POS)\n#define SEC_ENG_SE_AES_0_KEY_1_UMSK   (~(((1U << SEC_ENG_SE_AES_0_KEY_1_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_1_POS))\n\n/* 0x128 : se_aes_0_key_2 */\n#define SEC_ENG_SE_AES_0_KEY_2_OFFSET (0x128)\n#define SEC_ENG_SE_AES_0_KEY_2        SEC_ENG_SE_AES_0_KEY_2\n#define SEC_ENG_SE_AES_0_KEY_2_POS    (0U)\n#define SEC_ENG_SE_AES_0_KEY_2_LEN    (32U)\n#define SEC_ENG_SE_AES_0_KEY_2_MSK    (((1U << SEC_ENG_SE_AES_0_KEY_2_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_2_POS)\n#define SEC_ENG_SE_AES_0_KEY_2_UMSK   (~(((1U << SEC_ENG_SE_AES_0_KEY_2_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_2_POS))\n\n/* 0x12C : se_aes_0_key_3 */\n#define SEC_ENG_SE_AES_0_KEY_3_OFFSET (0x12C)\n#define SEC_ENG_SE_AES_0_KEY_3        SEC_ENG_SE_AES_0_KEY_3\n#define SEC_ENG_SE_AES_0_KEY_3_POS    (0U)\n#define SEC_ENG_SE_AES_0_KEY_3_LEN    (32U)\n#define SEC_ENG_SE_AES_0_KEY_3_MSK    (((1U << SEC_ENG_SE_AES_0_KEY_3_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_3_POS)\n#define SEC_ENG_SE_AES_0_KEY_3_UMSK   (~(((1U << SEC_ENG_SE_AES_0_KEY_3_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_3_POS))\n\n/* 0x130 : se_aes_0_key_4 */\n#define SEC_ENG_SE_AES_0_KEY_4_OFFSET (0x130)\n#define SEC_ENG_SE_AES_0_KEY_4        SEC_ENG_SE_AES_0_KEY_4\n#define SEC_ENG_SE_AES_0_KEY_4_POS    (0U)\n#define SEC_ENG_SE_AES_0_KEY_4_LEN    (32U)\n#define SEC_ENG_SE_AES_0_KEY_4_MSK    (((1U << SEC_ENG_SE_AES_0_KEY_4_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_4_POS)\n#define SEC_ENG_SE_AES_0_KEY_4_UMSK   (~(((1U << SEC_ENG_SE_AES_0_KEY_4_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_4_POS))\n\n/* 0x134 : se_aes_0_key_5 */\n#define SEC_ENG_SE_AES_0_KEY_5_OFFSET (0x134)\n#define SEC_ENG_SE_AES_0_KEY_5        SEC_ENG_SE_AES_0_KEY_5\n#define SEC_ENG_SE_AES_0_KEY_5_POS    (0U)\n#define SEC_ENG_SE_AES_0_KEY_5_LEN    (32U)\n#define SEC_ENG_SE_AES_0_KEY_5_MSK    (((1U << SEC_ENG_SE_AES_0_KEY_5_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_5_POS)\n#define SEC_ENG_SE_AES_0_KEY_5_UMSK   (~(((1U << SEC_ENG_SE_AES_0_KEY_5_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_5_POS))\n\n/* 0x138 : se_aes_0_key_6 */\n#define SEC_ENG_SE_AES_0_KEY_6_OFFSET (0x138)\n#define SEC_ENG_SE_AES_0_KEY_6        SEC_ENG_SE_AES_0_KEY_6\n#define SEC_ENG_SE_AES_0_KEY_6_POS    (0U)\n#define SEC_ENG_SE_AES_0_KEY_6_LEN    (32U)\n#define SEC_ENG_SE_AES_0_KEY_6_MSK    (((1U << SEC_ENG_SE_AES_0_KEY_6_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_6_POS)\n#define SEC_ENG_SE_AES_0_KEY_6_UMSK   (~(((1U << SEC_ENG_SE_AES_0_KEY_6_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_6_POS))\n\n/* 0x13C : se_aes_0_key_7 */\n#define SEC_ENG_SE_AES_0_KEY_7_OFFSET (0x13C)\n#define SEC_ENG_SE_AES_0_KEY_7        SEC_ENG_SE_AES_0_KEY_7\n#define SEC_ENG_SE_AES_0_KEY_7_POS    (0U)\n#define SEC_ENG_SE_AES_0_KEY_7_LEN    (32U)\n#define SEC_ENG_SE_AES_0_KEY_7_MSK    (((1U << SEC_ENG_SE_AES_0_KEY_7_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_7_POS)\n#define SEC_ENG_SE_AES_0_KEY_7_UMSK   (~(((1U << SEC_ENG_SE_AES_0_KEY_7_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_7_POS))\n\n/* 0x140 : se_aes_0_key_sel_0 */\n#define SEC_ENG_SE_AES_0_KEY_SEL_0_OFFSET (0x140)\n#define SEC_ENG_SE_AES_0_KEY_SEL_0        SEC_ENG_SE_AES_0_KEY_SEL_0\n#define SEC_ENG_SE_AES_0_KEY_SEL_0_POS    (0U)\n#define SEC_ENG_SE_AES_0_KEY_SEL_0_LEN    (2U)\n#define SEC_ENG_SE_AES_0_KEY_SEL_0_MSK    (((1U << SEC_ENG_SE_AES_0_KEY_SEL_0_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_SEL_0_POS)\n#define SEC_ENG_SE_AES_0_KEY_SEL_0_UMSK   (~(((1U << SEC_ENG_SE_AES_0_KEY_SEL_0_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_SEL_0_POS))\n\n/* 0x144 : se_aes_0_key_sel_1 */\n#define SEC_ENG_SE_AES_0_KEY_SEL_1_OFFSET (0x144)\n#define SEC_ENG_SE_AES_0_KEY_SEL_1        SEC_ENG_SE_AES_0_KEY_SEL_1\n#define SEC_ENG_SE_AES_0_KEY_SEL_1_POS    (0U)\n#define SEC_ENG_SE_AES_0_KEY_SEL_1_LEN    (2U)\n#define SEC_ENG_SE_AES_0_KEY_SEL_1_MSK    (((1U << SEC_ENG_SE_AES_0_KEY_SEL_1_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_SEL_1_POS)\n#define SEC_ENG_SE_AES_0_KEY_SEL_1_UMSK   (~(((1U << SEC_ENG_SE_AES_0_KEY_SEL_1_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_SEL_1_POS))\n\n/* 0x148 : se_aes_0_endian */\n#define SEC_ENG_SE_AES_0_ENDIAN_OFFSET    (0x148)\n#define SEC_ENG_SE_AES_0_DOUT_ENDIAN      SEC_ENG_SE_AES_0_DOUT_ENDIAN\n#define SEC_ENG_SE_AES_0_DOUT_ENDIAN_POS  (0U)\n#define SEC_ENG_SE_AES_0_DOUT_ENDIAN_LEN  (1U)\n#define SEC_ENG_SE_AES_0_DOUT_ENDIAN_MSK  (((1U << SEC_ENG_SE_AES_0_DOUT_ENDIAN_LEN) - 1) << SEC_ENG_SE_AES_0_DOUT_ENDIAN_POS)\n#define SEC_ENG_SE_AES_0_DOUT_ENDIAN_UMSK (~(((1U << SEC_ENG_SE_AES_0_DOUT_ENDIAN_LEN) - 1) << SEC_ENG_SE_AES_0_DOUT_ENDIAN_POS))\n#define SEC_ENG_SE_AES_0_DIN_ENDIAN       SEC_ENG_SE_AES_0_DIN_ENDIAN\n#define SEC_ENG_SE_AES_0_DIN_ENDIAN_POS   (1U)\n#define SEC_ENG_SE_AES_0_DIN_ENDIAN_LEN   (1U)\n#define SEC_ENG_SE_AES_0_DIN_ENDIAN_MSK   (((1U << SEC_ENG_SE_AES_0_DIN_ENDIAN_LEN) - 1) << SEC_ENG_SE_AES_0_DIN_ENDIAN_POS)\n#define SEC_ENG_SE_AES_0_DIN_ENDIAN_UMSK  (~(((1U << SEC_ENG_SE_AES_0_DIN_ENDIAN_LEN) - 1) << SEC_ENG_SE_AES_0_DIN_ENDIAN_POS))\n#define SEC_ENG_SE_AES_0_KEY_ENDIAN       SEC_ENG_SE_AES_0_KEY_ENDIAN\n#define SEC_ENG_SE_AES_0_KEY_ENDIAN_POS   (2U)\n#define SEC_ENG_SE_AES_0_KEY_ENDIAN_LEN   (1U)\n#define SEC_ENG_SE_AES_0_KEY_ENDIAN_MSK   (((1U << SEC_ENG_SE_AES_0_KEY_ENDIAN_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_ENDIAN_POS)\n#define SEC_ENG_SE_AES_0_KEY_ENDIAN_UMSK  (~(((1U << SEC_ENG_SE_AES_0_KEY_ENDIAN_LEN) - 1) << SEC_ENG_SE_AES_0_KEY_ENDIAN_POS))\n#define SEC_ENG_SE_AES_0_IV_ENDIAN        SEC_ENG_SE_AES_0_IV_ENDIAN\n#define SEC_ENG_SE_AES_0_IV_ENDIAN_POS    (3U)\n#define SEC_ENG_SE_AES_0_IV_ENDIAN_LEN    (1U)\n#define SEC_ENG_SE_AES_0_IV_ENDIAN_MSK    (((1U << SEC_ENG_SE_AES_0_IV_ENDIAN_LEN) - 1) << SEC_ENG_SE_AES_0_IV_ENDIAN_POS)\n#define SEC_ENG_SE_AES_0_IV_ENDIAN_UMSK   (~(((1U << SEC_ENG_SE_AES_0_IV_ENDIAN_LEN) - 1) << SEC_ENG_SE_AES_0_IV_ENDIAN_POS))\n#define SEC_ENG_SE_AES_0_CTR_LEN          SEC_ENG_SE_AES_0_CTR_LEN\n#define SEC_ENG_SE_AES_0_CTR_LEN_POS      (30U)\n#define SEC_ENG_SE_AES_0_CTR_LEN_LEN      (2U)\n#define SEC_ENG_SE_AES_0_CTR_LEN_MSK      (((1U << SEC_ENG_SE_AES_0_CTR_LEN_LEN) - 1) << SEC_ENG_SE_AES_0_CTR_LEN_POS)\n#define SEC_ENG_SE_AES_0_CTR_LEN_UMSK     (~(((1U << SEC_ENG_SE_AES_0_CTR_LEN_LEN) - 1) << SEC_ENG_SE_AES_0_CTR_LEN_POS))\n\n/* 0x14C : se_aes_0_sboot */\n#define SEC_ENG_SE_AES_0_SBOOT_OFFSET       (0x14C)\n#define SEC_ENG_SE_AES_0_SBOOT_KEY_SEL      SEC_ENG_SE_AES_0_SBOOT_KEY_SEL\n#define SEC_ENG_SE_AES_0_SBOOT_KEY_SEL_POS  (0U)\n#define SEC_ENG_SE_AES_0_SBOOT_KEY_SEL_LEN  (1U)\n#define SEC_ENG_SE_AES_0_SBOOT_KEY_SEL_MSK  (((1U << SEC_ENG_SE_AES_0_SBOOT_KEY_SEL_LEN) - 1) << SEC_ENG_SE_AES_0_SBOOT_KEY_SEL_POS)\n#define SEC_ENG_SE_AES_0_SBOOT_KEY_SEL_UMSK (~(((1U << SEC_ENG_SE_AES_0_SBOOT_KEY_SEL_LEN) - 1) << SEC_ENG_SE_AES_0_SBOOT_KEY_SEL_POS))\n\n/* 0x150 : se_aes_0_link */\n#define SEC_ENG_SE_AES_0_LINK_OFFSET (0x150)\n#define SEC_ENG_SE_AES_0_LCA         SEC_ENG_SE_AES_0_LCA\n#define SEC_ENG_SE_AES_0_LCA_POS     (0U)\n#define SEC_ENG_SE_AES_0_LCA_LEN     (32U)\n#define SEC_ENG_SE_AES_0_LCA_MSK     (((1U << SEC_ENG_SE_AES_0_LCA_LEN) - 1) << SEC_ENG_SE_AES_0_LCA_POS)\n#define SEC_ENG_SE_AES_0_LCA_UMSK    (~(((1U << SEC_ENG_SE_AES_0_LCA_LEN) - 1) << SEC_ENG_SE_AES_0_LCA_POS))\n\n/* 0x1FC : se_aes_0_ctrl_prot */\n#define SEC_ENG_SE_AES_0_CTRL_PROT_OFFSET (0x1FC)\n#define SEC_ENG_SE_AES_PROT_EN            SEC_ENG_SE_AES_PROT_EN\n#define SEC_ENG_SE_AES_PROT_EN_POS        (0U)\n#define SEC_ENG_SE_AES_PROT_EN_LEN        (1U)\n#define SEC_ENG_SE_AES_PROT_EN_MSK        (((1U << SEC_ENG_SE_AES_PROT_EN_LEN) - 1) << SEC_ENG_SE_AES_PROT_EN_POS)\n#define SEC_ENG_SE_AES_PROT_EN_UMSK       (~(((1U << SEC_ENG_SE_AES_PROT_EN_LEN) - 1) << SEC_ENG_SE_AES_PROT_EN_POS))\n#define SEC_ENG_SE_AES_ID0_EN             SEC_ENG_SE_AES_ID0_EN\n#define SEC_ENG_SE_AES_ID0_EN_POS         (1U)\n#define SEC_ENG_SE_AES_ID0_EN_LEN         (1U)\n#define SEC_ENG_SE_AES_ID0_EN_MSK         (((1U << SEC_ENG_SE_AES_ID0_EN_LEN) - 1) << SEC_ENG_SE_AES_ID0_EN_POS)\n#define SEC_ENG_SE_AES_ID0_EN_UMSK        (~(((1U << SEC_ENG_SE_AES_ID0_EN_LEN) - 1) << SEC_ENG_SE_AES_ID0_EN_POS))\n#define SEC_ENG_SE_AES_ID1_EN             SEC_ENG_SE_AES_ID1_EN\n#define SEC_ENG_SE_AES_ID1_EN_POS         (2U)\n#define SEC_ENG_SE_AES_ID1_EN_LEN         (1U)\n#define SEC_ENG_SE_AES_ID1_EN_MSK         (((1U << SEC_ENG_SE_AES_ID1_EN_LEN) - 1) << SEC_ENG_SE_AES_ID1_EN_POS)\n#define SEC_ENG_SE_AES_ID1_EN_UMSK        (~(((1U << SEC_ENG_SE_AES_ID1_EN_LEN) - 1) << SEC_ENG_SE_AES_ID1_EN_POS))\n\n/* 0x200 : se_trng_0_ctrl_0 */\n#define SEC_ENG_SE_TRNG_0_CTRL_0_OFFSET       (0x200)\n#define SEC_ENG_SE_TRNG_0_BUSY                SEC_ENG_SE_TRNG_0_BUSY\n#define SEC_ENG_SE_TRNG_0_BUSY_POS            (0U)\n#define SEC_ENG_SE_TRNG_0_BUSY_LEN            (1U)\n#define SEC_ENG_SE_TRNG_0_BUSY_MSK            (((1U << SEC_ENG_SE_TRNG_0_BUSY_LEN) - 1) << SEC_ENG_SE_TRNG_0_BUSY_POS)\n#define SEC_ENG_SE_TRNG_0_BUSY_UMSK           (~(((1U << SEC_ENG_SE_TRNG_0_BUSY_LEN) - 1) << SEC_ENG_SE_TRNG_0_BUSY_POS))\n#define SEC_ENG_SE_TRNG_0_TRIG_1T             SEC_ENG_SE_TRNG_0_TRIG_1T\n#define SEC_ENG_SE_TRNG_0_TRIG_1T_POS         (1U)\n#define SEC_ENG_SE_TRNG_0_TRIG_1T_LEN         (1U)\n#define SEC_ENG_SE_TRNG_0_TRIG_1T_MSK         (((1U << SEC_ENG_SE_TRNG_0_TRIG_1T_LEN) - 1) << SEC_ENG_SE_TRNG_0_TRIG_1T_POS)\n#define SEC_ENG_SE_TRNG_0_TRIG_1T_UMSK        (~(((1U << SEC_ENG_SE_TRNG_0_TRIG_1T_LEN) - 1) << SEC_ENG_SE_TRNG_0_TRIG_1T_POS))\n#define SEC_ENG_SE_TRNG_0_EN                  SEC_ENG_SE_TRNG_0_EN\n#define SEC_ENG_SE_TRNG_0_EN_POS              (2U)\n#define SEC_ENG_SE_TRNG_0_EN_LEN              (1U)\n#define SEC_ENG_SE_TRNG_0_EN_MSK              (((1U << SEC_ENG_SE_TRNG_0_EN_LEN) - 1) << SEC_ENG_SE_TRNG_0_EN_POS)\n#define SEC_ENG_SE_TRNG_0_EN_UMSK             (~(((1U << SEC_ENG_SE_TRNG_0_EN_LEN) - 1) << SEC_ENG_SE_TRNG_0_EN_POS))\n#define SEC_ENG_SE_TRNG_0_DOUT_CLR_1T         SEC_ENG_SE_TRNG_0_DOUT_CLR_1T\n#define SEC_ENG_SE_TRNG_0_DOUT_CLR_1T_POS     (3U)\n#define SEC_ENG_SE_TRNG_0_DOUT_CLR_1T_LEN     (1U)\n#define SEC_ENG_SE_TRNG_0_DOUT_CLR_1T_MSK     (((1U << SEC_ENG_SE_TRNG_0_DOUT_CLR_1T_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_CLR_1T_POS)\n#define SEC_ENG_SE_TRNG_0_DOUT_CLR_1T_UMSK    (~(((1U << SEC_ENG_SE_TRNG_0_DOUT_CLR_1T_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_CLR_1T_POS))\n#define SEC_ENG_SE_TRNG_0_HT_ERROR            SEC_ENG_SE_TRNG_0_HT_ERROR\n#define SEC_ENG_SE_TRNG_0_HT_ERROR_POS        (4U)\n#define SEC_ENG_SE_TRNG_0_HT_ERROR_LEN        (1U)\n#define SEC_ENG_SE_TRNG_0_HT_ERROR_MSK        (((1U << SEC_ENG_SE_TRNG_0_HT_ERROR_LEN) - 1) << SEC_ENG_SE_TRNG_0_HT_ERROR_POS)\n#define SEC_ENG_SE_TRNG_0_HT_ERROR_UMSK       (~(((1U << SEC_ENG_SE_TRNG_0_HT_ERROR_LEN) - 1) << SEC_ENG_SE_TRNG_0_HT_ERROR_POS))\n#define SEC_ENG_SE_TRNG_0_INT                 SEC_ENG_SE_TRNG_0_INT\n#define SEC_ENG_SE_TRNG_0_INT_POS             (8U)\n#define SEC_ENG_SE_TRNG_0_INT_LEN             (1U)\n#define SEC_ENG_SE_TRNG_0_INT_MSK             (((1U << SEC_ENG_SE_TRNG_0_INT_LEN) - 1) << SEC_ENG_SE_TRNG_0_INT_POS)\n#define SEC_ENG_SE_TRNG_0_INT_UMSK            (~(((1U << SEC_ENG_SE_TRNG_0_INT_LEN) - 1) << SEC_ENG_SE_TRNG_0_INT_POS))\n#define SEC_ENG_SE_TRNG_0_INT_CLR_1T          SEC_ENG_SE_TRNG_0_INT_CLR_1T\n#define SEC_ENG_SE_TRNG_0_INT_CLR_1T_POS      (9U)\n#define SEC_ENG_SE_TRNG_0_INT_CLR_1T_LEN      (1U)\n#define SEC_ENG_SE_TRNG_0_INT_CLR_1T_MSK      (((1U << SEC_ENG_SE_TRNG_0_INT_CLR_1T_LEN) - 1) << SEC_ENG_SE_TRNG_0_INT_CLR_1T_POS)\n#define SEC_ENG_SE_TRNG_0_INT_CLR_1T_UMSK     (~(((1U << SEC_ENG_SE_TRNG_0_INT_CLR_1T_LEN) - 1) << SEC_ENG_SE_TRNG_0_INT_CLR_1T_POS))\n#define SEC_ENG_SE_TRNG_0_INT_SET_1T          SEC_ENG_SE_TRNG_0_INT_SET_1T\n#define SEC_ENG_SE_TRNG_0_INT_SET_1T_POS      (10U)\n#define SEC_ENG_SE_TRNG_0_INT_SET_1T_LEN      (1U)\n#define SEC_ENG_SE_TRNG_0_INT_SET_1T_MSK      (((1U << SEC_ENG_SE_TRNG_0_INT_SET_1T_LEN) - 1) << SEC_ENG_SE_TRNG_0_INT_SET_1T_POS)\n#define SEC_ENG_SE_TRNG_0_INT_SET_1T_UMSK     (~(((1U << SEC_ENG_SE_TRNG_0_INT_SET_1T_LEN) - 1) << SEC_ENG_SE_TRNG_0_INT_SET_1T_POS))\n#define SEC_ENG_SE_TRNG_0_INT_MASK            SEC_ENG_SE_TRNG_0_INT_MASK\n#define SEC_ENG_SE_TRNG_0_INT_MASK_POS        (11U)\n#define SEC_ENG_SE_TRNG_0_INT_MASK_LEN        (1U)\n#define SEC_ENG_SE_TRNG_0_INT_MASK_MSK        (((1U << SEC_ENG_SE_TRNG_0_INT_MASK_LEN) - 1) << SEC_ENG_SE_TRNG_0_INT_MASK_POS)\n#define SEC_ENG_SE_TRNG_0_INT_MASK_UMSK       (~(((1U << SEC_ENG_SE_TRNG_0_INT_MASK_LEN) - 1) << SEC_ENG_SE_TRNG_0_INT_MASK_POS))\n#define SEC_ENG_SE_TRNG_0_MANUAL_FUN_SEL      SEC_ENG_SE_TRNG_0_MANUAL_FUN_SEL\n#define SEC_ENG_SE_TRNG_0_MANUAL_FUN_SEL_POS  (13U)\n#define SEC_ENG_SE_TRNG_0_MANUAL_FUN_SEL_LEN  (1U)\n#define SEC_ENG_SE_TRNG_0_MANUAL_FUN_SEL_MSK  (((1U << SEC_ENG_SE_TRNG_0_MANUAL_FUN_SEL_LEN) - 1) << SEC_ENG_SE_TRNG_0_MANUAL_FUN_SEL_POS)\n#define SEC_ENG_SE_TRNG_0_MANUAL_FUN_SEL_UMSK (~(((1U << SEC_ENG_SE_TRNG_0_MANUAL_FUN_SEL_LEN) - 1) << SEC_ENG_SE_TRNG_0_MANUAL_FUN_SEL_POS))\n#define SEC_ENG_SE_TRNG_0_MANUAL_RESEED       SEC_ENG_SE_TRNG_0_MANUAL_RESEED\n#define SEC_ENG_SE_TRNG_0_MANUAL_RESEED_POS   (14U)\n#define SEC_ENG_SE_TRNG_0_MANUAL_RESEED_LEN   (1U)\n#define SEC_ENG_SE_TRNG_0_MANUAL_RESEED_MSK   (((1U << SEC_ENG_SE_TRNG_0_MANUAL_RESEED_LEN) - 1) << SEC_ENG_SE_TRNG_0_MANUAL_RESEED_POS)\n#define SEC_ENG_SE_TRNG_0_MANUAL_RESEED_UMSK  (~(((1U << SEC_ENG_SE_TRNG_0_MANUAL_RESEED_LEN) - 1) << SEC_ENG_SE_TRNG_0_MANUAL_RESEED_POS))\n#define SEC_ENG_SE_TRNG_0_MANUAL_EN           SEC_ENG_SE_TRNG_0_MANUAL_EN\n#define SEC_ENG_SE_TRNG_0_MANUAL_EN_POS       (15U)\n#define SEC_ENG_SE_TRNG_0_MANUAL_EN_LEN       (1U)\n#define SEC_ENG_SE_TRNG_0_MANUAL_EN_MSK       (((1U << SEC_ENG_SE_TRNG_0_MANUAL_EN_LEN) - 1) << SEC_ENG_SE_TRNG_0_MANUAL_EN_POS)\n#define SEC_ENG_SE_TRNG_0_MANUAL_EN_UMSK      (~(((1U << SEC_ENG_SE_TRNG_0_MANUAL_EN_LEN) - 1) << SEC_ENG_SE_TRNG_0_MANUAL_EN_POS))\n\n/* 0x204 : se_trng_0_status */\n#define SEC_ENG_SE_TRNG_0_STATUS_OFFSET (0x204)\n#define SEC_ENG_SE_TRNG_0_STATUS        SEC_ENG_SE_TRNG_0_STATUS\n#define SEC_ENG_SE_TRNG_0_STATUS_POS    (0U)\n#define SEC_ENG_SE_TRNG_0_STATUS_LEN    (32U)\n#define SEC_ENG_SE_TRNG_0_STATUS_MSK    (((1U << SEC_ENG_SE_TRNG_0_STATUS_LEN) - 1) << SEC_ENG_SE_TRNG_0_STATUS_POS)\n#define SEC_ENG_SE_TRNG_0_STATUS_UMSK   (~(((1U << SEC_ENG_SE_TRNG_0_STATUS_LEN) - 1) << SEC_ENG_SE_TRNG_0_STATUS_POS))\n\n/* 0x208 : se_trng_0_dout_0 */\n#define SEC_ENG_SE_TRNG_0_DOUT_0_OFFSET (0x208)\n#define SEC_ENG_SE_TRNG_0_DOUT_0        SEC_ENG_SE_TRNG_0_DOUT_0\n#define SEC_ENG_SE_TRNG_0_DOUT_0_POS    (0U)\n#define SEC_ENG_SE_TRNG_0_DOUT_0_LEN    (32U)\n#define SEC_ENG_SE_TRNG_0_DOUT_0_MSK    (((1U << SEC_ENG_SE_TRNG_0_DOUT_0_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_0_POS)\n#define SEC_ENG_SE_TRNG_0_DOUT_0_UMSK   (~(((1U << SEC_ENG_SE_TRNG_0_DOUT_0_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_0_POS))\n\n/* 0x20C : se_trng_0_dout_1 */\n#define SEC_ENG_SE_TRNG_0_DOUT_1_OFFSET (0x20C)\n#define SEC_ENG_SE_TRNG_0_DOUT_1        SEC_ENG_SE_TRNG_0_DOUT_1\n#define SEC_ENG_SE_TRNG_0_DOUT_1_POS    (0U)\n#define SEC_ENG_SE_TRNG_0_DOUT_1_LEN    (32U)\n#define SEC_ENG_SE_TRNG_0_DOUT_1_MSK    (((1U << SEC_ENG_SE_TRNG_0_DOUT_1_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_1_POS)\n#define SEC_ENG_SE_TRNG_0_DOUT_1_UMSK   (~(((1U << SEC_ENG_SE_TRNG_0_DOUT_1_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_1_POS))\n\n/* 0x210 : se_trng_0_dout_2 */\n#define SEC_ENG_SE_TRNG_0_DOUT_2_OFFSET (0x210)\n#define SEC_ENG_SE_TRNG_0_DOUT_2        SEC_ENG_SE_TRNG_0_DOUT_2\n#define SEC_ENG_SE_TRNG_0_DOUT_2_POS    (0U)\n#define SEC_ENG_SE_TRNG_0_DOUT_2_LEN    (32U)\n#define SEC_ENG_SE_TRNG_0_DOUT_2_MSK    (((1U << SEC_ENG_SE_TRNG_0_DOUT_2_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_2_POS)\n#define SEC_ENG_SE_TRNG_0_DOUT_2_UMSK   (~(((1U << SEC_ENG_SE_TRNG_0_DOUT_2_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_2_POS))\n\n/* 0x214 : se_trng_0_dout_3 */\n#define SEC_ENG_SE_TRNG_0_DOUT_3_OFFSET (0x214)\n#define SEC_ENG_SE_TRNG_0_DOUT_3        SEC_ENG_SE_TRNG_0_DOUT_3\n#define SEC_ENG_SE_TRNG_0_DOUT_3_POS    (0U)\n#define SEC_ENG_SE_TRNG_0_DOUT_3_LEN    (32U)\n#define SEC_ENG_SE_TRNG_0_DOUT_3_MSK    (((1U << SEC_ENG_SE_TRNG_0_DOUT_3_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_3_POS)\n#define SEC_ENG_SE_TRNG_0_DOUT_3_UMSK   (~(((1U << SEC_ENG_SE_TRNG_0_DOUT_3_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_3_POS))\n\n/* 0x218 : se_trng_0_dout_4 */\n#define SEC_ENG_SE_TRNG_0_DOUT_4_OFFSET (0x218)\n#define SEC_ENG_SE_TRNG_0_DOUT_4        SEC_ENG_SE_TRNG_0_DOUT_4\n#define SEC_ENG_SE_TRNG_0_DOUT_4_POS    (0U)\n#define SEC_ENG_SE_TRNG_0_DOUT_4_LEN    (32U)\n#define SEC_ENG_SE_TRNG_0_DOUT_4_MSK    (((1U << SEC_ENG_SE_TRNG_0_DOUT_4_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_4_POS)\n#define SEC_ENG_SE_TRNG_0_DOUT_4_UMSK   (~(((1U << SEC_ENG_SE_TRNG_0_DOUT_4_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_4_POS))\n\n/* 0x21C : se_trng_0_dout_5 */\n#define SEC_ENG_SE_TRNG_0_DOUT_5_OFFSET (0x21C)\n#define SEC_ENG_SE_TRNG_0_DOUT_5        SEC_ENG_SE_TRNG_0_DOUT_5\n#define SEC_ENG_SE_TRNG_0_DOUT_5_POS    (0U)\n#define SEC_ENG_SE_TRNG_0_DOUT_5_LEN    (32U)\n#define SEC_ENG_SE_TRNG_0_DOUT_5_MSK    (((1U << SEC_ENG_SE_TRNG_0_DOUT_5_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_5_POS)\n#define SEC_ENG_SE_TRNG_0_DOUT_5_UMSK   (~(((1U << SEC_ENG_SE_TRNG_0_DOUT_5_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_5_POS))\n\n/* 0x220 : se_trng_0_dout_6 */\n#define SEC_ENG_SE_TRNG_0_DOUT_6_OFFSET (0x220)\n#define SEC_ENG_SE_TRNG_0_DOUT_6        SEC_ENG_SE_TRNG_0_DOUT_6\n#define SEC_ENG_SE_TRNG_0_DOUT_6_POS    (0U)\n#define SEC_ENG_SE_TRNG_0_DOUT_6_LEN    (32U)\n#define SEC_ENG_SE_TRNG_0_DOUT_6_MSK    (((1U << SEC_ENG_SE_TRNG_0_DOUT_6_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_6_POS)\n#define SEC_ENG_SE_TRNG_0_DOUT_6_UMSK   (~(((1U << SEC_ENG_SE_TRNG_0_DOUT_6_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_6_POS))\n\n/* 0x224 : se_trng_0_dout_7 */\n#define SEC_ENG_SE_TRNG_0_DOUT_7_OFFSET (0x224)\n#define SEC_ENG_SE_TRNG_0_DOUT_7        SEC_ENG_SE_TRNG_0_DOUT_7\n#define SEC_ENG_SE_TRNG_0_DOUT_7_POS    (0U)\n#define SEC_ENG_SE_TRNG_0_DOUT_7_LEN    (32U)\n#define SEC_ENG_SE_TRNG_0_DOUT_7_MSK    (((1U << SEC_ENG_SE_TRNG_0_DOUT_7_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_7_POS)\n#define SEC_ENG_SE_TRNG_0_DOUT_7_UMSK   (~(((1U << SEC_ENG_SE_TRNG_0_DOUT_7_LEN) - 1) << SEC_ENG_SE_TRNG_0_DOUT_7_POS))\n\n/* 0x228 : se_trng_0_test */\n#define SEC_ENG_SE_TRNG_0_TEST_OFFSET     (0x228)\n#define SEC_ENG_SE_TRNG_0_TEST_EN         SEC_ENG_SE_TRNG_0_TEST_EN\n#define SEC_ENG_SE_TRNG_0_TEST_EN_POS     (0U)\n#define SEC_ENG_SE_TRNG_0_TEST_EN_LEN     (1U)\n#define SEC_ENG_SE_TRNG_0_TEST_EN_MSK     (((1U << SEC_ENG_SE_TRNG_0_TEST_EN_LEN) - 1) << SEC_ENG_SE_TRNG_0_TEST_EN_POS)\n#define SEC_ENG_SE_TRNG_0_TEST_EN_UMSK    (~(((1U << SEC_ENG_SE_TRNG_0_TEST_EN_LEN) - 1) << SEC_ENG_SE_TRNG_0_TEST_EN_POS))\n#define SEC_ENG_SE_TRNG_0_CP_TEST_EN      SEC_ENG_SE_TRNG_0_CP_TEST_EN\n#define SEC_ENG_SE_TRNG_0_CP_TEST_EN_POS  (1U)\n#define SEC_ENG_SE_TRNG_0_CP_TEST_EN_LEN  (1U)\n#define SEC_ENG_SE_TRNG_0_CP_TEST_EN_MSK  (((1U << SEC_ENG_SE_TRNG_0_CP_TEST_EN_LEN) - 1) << SEC_ENG_SE_TRNG_0_CP_TEST_EN_POS)\n#define SEC_ENG_SE_TRNG_0_CP_TEST_EN_UMSK (~(((1U << SEC_ENG_SE_TRNG_0_CP_TEST_EN_LEN) - 1) << SEC_ENG_SE_TRNG_0_CP_TEST_EN_POS))\n#define SEC_ENG_SE_TRNG_0_CP_BYPASS       SEC_ENG_SE_TRNG_0_CP_BYPASS\n#define SEC_ENG_SE_TRNG_0_CP_BYPASS_POS   (2U)\n#define SEC_ENG_SE_TRNG_0_CP_BYPASS_LEN   (1U)\n#define SEC_ENG_SE_TRNG_0_CP_BYPASS_MSK   (((1U << SEC_ENG_SE_TRNG_0_CP_BYPASS_LEN) - 1) << SEC_ENG_SE_TRNG_0_CP_BYPASS_POS)\n#define SEC_ENG_SE_TRNG_0_CP_BYPASS_UMSK  (~(((1U << SEC_ENG_SE_TRNG_0_CP_BYPASS_LEN) - 1) << SEC_ENG_SE_TRNG_0_CP_BYPASS_POS))\n#define SEC_ENG_SE_TRNG_0_HT_DIS          SEC_ENG_SE_TRNG_0_HT_DIS\n#define SEC_ENG_SE_TRNG_0_HT_DIS_POS      (3U)\n#define SEC_ENG_SE_TRNG_0_HT_DIS_LEN      (1U)\n#define SEC_ENG_SE_TRNG_0_HT_DIS_MSK      (((1U << SEC_ENG_SE_TRNG_0_HT_DIS_LEN) - 1) << SEC_ENG_SE_TRNG_0_HT_DIS_POS)\n#define SEC_ENG_SE_TRNG_0_HT_DIS_UMSK     (~(((1U << SEC_ENG_SE_TRNG_0_HT_DIS_LEN) - 1) << SEC_ENG_SE_TRNG_0_HT_DIS_POS))\n#define SEC_ENG_SE_TRNG_0_HT_ALARM_N      SEC_ENG_SE_TRNG_0_HT_ALARM_N\n#define SEC_ENG_SE_TRNG_0_HT_ALARM_N_POS  (4U)\n#define SEC_ENG_SE_TRNG_0_HT_ALARM_N_LEN  (8U)\n#define SEC_ENG_SE_TRNG_0_HT_ALARM_N_MSK  (((1U << SEC_ENG_SE_TRNG_0_HT_ALARM_N_LEN) - 1) << SEC_ENG_SE_TRNG_0_HT_ALARM_N_POS)\n#define SEC_ENG_SE_TRNG_0_HT_ALARM_N_UMSK (~(((1U << SEC_ENG_SE_TRNG_0_HT_ALARM_N_LEN) - 1) << SEC_ENG_SE_TRNG_0_HT_ALARM_N_POS))\n\n/* 0x22C : se_trng_0_ctrl_1 */\n#define SEC_ENG_SE_TRNG_0_CTRL_1_OFFSET     (0x22C)\n#define SEC_ENG_SE_TRNG_0_RESEED_N_LSB      SEC_ENG_SE_TRNG_0_RESEED_N_LSB\n#define SEC_ENG_SE_TRNG_0_RESEED_N_LSB_POS  (0U)\n#define SEC_ENG_SE_TRNG_0_RESEED_N_LSB_LEN  (32U)\n#define SEC_ENG_SE_TRNG_0_RESEED_N_LSB_MSK  (((1U << SEC_ENG_SE_TRNG_0_RESEED_N_LSB_LEN) - 1) << SEC_ENG_SE_TRNG_0_RESEED_N_LSB_POS)\n#define SEC_ENG_SE_TRNG_0_RESEED_N_LSB_UMSK (~(((1U << SEC_ENG_SE_TRNG_0_RESEED_N_LSB_LEN) - 1) << SEC_ENG_SE_TRNG_0_RESEED_N_LSB_POS))\n\n/* 0x230 : se_trng_0_ctrl_2 */\n#define SEC_ENG_SE_TRNG_0_CTRL_2_OFFSET     (0x230)\n#define SEC_ENG_SE_TRNG_0_RESEED_N_MSB      SEC_ENG_SE_TRNG_0_RESEED_N_MSB\n#define SEC_ENG_SE_TRNG_0_RESEED_N_MSB_POS  (0U)\n#define SEC_ENG_SE_TRNG_0_RESEED_N_MSB_LEN  (16U)\n#define SEC_ENG_SE_TRNG_0_RESEED_N_MSB_MSK  (((1U << SEC_ENG_SE_TRNG_0_RESEED_N_MSB_LEN) - 1) << SEC_ENG_SE_TRNG_0_RESEED_N_MSB_POS)\n#define SEC_ENG_SE_TRNG_0_RESEED_N_MSB_UMSK (~(((1U << SEC_ENG_SE_TRNG_0_RESEED_N_MSB_LEN) - 1) << SEC_ENG_SE_TRNG_0_RESEED_N_MSB_POS))\n\n/* 0x234 : se_trng_0_ctrl_3 */\n#define SEC_ENG_SE_TRNG_0_CTRL_3_OFFSET (0x234)\n#define SEC_ENG_SE_TRNG_0_CP_RATIO      SEC_ENG_SE_TRNG_0_CP_RATIO\n#define SEC_ENG_SE_TRNG_0_CP_RATIO_POS  (0U)\n#define SEC_ENG_SE_TRNG_0_CP_RATIO_LEN  (8U)\n#define SEC_ENG_SE_TRNG_0_CP_RATIO_MSK  (((1U << SEC_ENG_SE_TRNG_0_CP_RATIO_LEN) - 1) << SEC_ENG_SE_TRNG_0_CP_RATIO_POS)\n#define SEC_ENG_SE_TRNG_0_CP_RATIO_UMSK (~(((1U << SEC_ENG_SE_TRNG_0_CP_RATIO_LEN) - 1) << SEC_ENG_SE_TRNG_0_CP_RATIO_POS))\n#define SEC_ENG_SE_TRNG_0_HT_RCT_C      SEC_ENG_SE_TRNG_0_HT_RCT_C\n#define SEC_ENG_SE_TRNG_0_HT_RCT_C_POS  (8U)\n#define SEC_ENG_SE_TRNG_0_HT_RCT_C_LEN  (8U)\n#define SEC_ENG_SE_TRNG_0_HT_RCT_C_MSK  (((1U << SEC_ENG_SE_TRNG_0_HT_RCT_C_LEN) - 1) << SEC_ENG_SE_TRNG_0_HT_RCT_C_POS)\n#define SEC_ENG_SE_TRNG_0_HT_RCT_C_UMSK (~(((1U << SEC_ENG_SE_TRNG_0_HT_RCT_C_LEN) - 1) << SEC_ENG_SE_TRNG_0_HT_RCT_C_POS))\n#define SEC_ENG_SE_TRNG_0_HT_APT_C      SEC_ENG_SE_TRNG_0_HT_APT_C\n#define SEC_ENG_SE_TRNG_0_HT_APT_C_POS  (16U)\n#define SEC_ENG_SE_TRNG_0_HT_APT_C_LEN  (10U)\n#define SEC_ENG_SE_TRNG_0_HT_APT_C_MSK  (((1U << SEC_ENG_SE_TRNG_0_HT_APT_C_LEN) - 1) << SEC_ENG_SE_TRNG_0_HT_APT_C_POS)\n#define SEC_ENG_SE_TRNG_0_HT_APT_C_UMSK (~(((1U << SEC_ENG_SE_TRNG_0_HT_APT_C_LEN) - 1) << SEC_ENG_SE_TRNG_0_HT_APT_C_POS))\n#define SEC_ENG_SE_TRNG_0_HT_OD_EN      SEC_ENG_SE_TRNG_0_HT_OD_EN\n#define SEC_ENG_SE_TRNG_0_HT_OD_EN_POS  (26U)\n#define SEC_ENG_SE_TRNG_0_HT_OD_EN_LEN  (1U)\n#define SEC_ENG_SE_TRNG_0_HT_OD_EN_MSK  (((1U << SEC_ENG_SE_TRNG_0_HT_OD_EN_LEN) - 1) << SEC_ENG_SE_TRNG_0_HT_OD_EN_POS)\n#define SEC_ENG_SE_TRNG_0_HT_OD_EN_UMSK (~(((1U << SEC_ENG_SE_TRNG_0_HT_OD_EN_LEN) - 1) << SEC_ENG_SE_TRNG_0_HT_OD_EN_POS))\n#define SEC_ENG_SE_TRNG_0_ROSC_EN       SEC_ENG_SE_TRNG_0_ROSC_EN\n#define SEC_ENG_SE_TRNG_0_ROSC_EN_POS   (31U)\n#define SEC_ENG_SE_TRNG_0_ROSC_EN_LEN   (1U)\n#define SEC_ENG_SE_TRNG_0_ROSC_EN_MSK   (((1U << SEC_ENG_SE_TRNG_0_ROSC_EN_LEN) - 1) << SEC_ENG_SE_TRNG_0_ROSC_EN_POS)\n#define SEC_ENG_SE_TRNG_0_ROSC_EN_UMSK  (~(((1U << SEC_ENG_SE_TRNG_0_ROSC_EN_LEN) - 1) << SEC_ENG_SE_TRNG_0_ROSC_EN_POS))\n\n/* 0x240 : se_trng_0_test_out_0 */\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_0_OFFSET (0x240)\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_0        SEC_ENG_SE_TRNG_0_TEST_OUT_0\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_0_POS    (0U)\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_0_LEN    (32U)\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_0_MSK    (((1U << SEC_ENG_SE_TRNG_0_TEST_OUT_0_LEN) - 1) << SEC_ENG_SE_TRNG_0_TEST_OUT_0_POS)\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_0_UMSK   (~(((1U << SEC_ENG_SE_TRNG_0_TEST_OUT_0_LEN) - 1) << SEC_ENG_SE_TRNG_0_TEST_OUT_0_POS))\n\n/* 0x244 : se_trng_0_test_out_1 */\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_1_OFFSET (0x244)\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_1        SEC_ENG_SE_TRNG_0_TEST_OUT_1\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_1_POS    (0U)\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_1_LEN    (32U)\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_1_MSK    (((1U << SEC_ENG_SE_TRNG_0_TEST_OUT_1_LEN) - 1) << SEC_ENG_SE_TRNG_0_TEST_OUT_1_POS)\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_1_UMSK   (~(((1U << SEC_ENG_SE_TRNG_0_TEST_OUT_1_LEN) - 1) << SEC_ENG_SE_TRNG_0_TEST_OUT_1_POS))\n\n/* 0x248 : se_trng_0_test_out_2 */\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_2_OFFSET (0x248)\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_2        SEC_ENG_SE_TRNG_0_TEST_OUT_2\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_2_POS    (0U)\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_2_LEN    (32U)\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_2_MSK    (((1U << SEC_ENG_SE_TRNG_0_TEST_OUT_2_LEN) - 1) << SEC_ENG_SE_TRNG_0_TEST_OUT_2_POS)\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_2_UMSK   (~(((1U << SEC_ENG_SE_TRNG_0_TEST_OUT_2_LEN) - 1) << SEC_ENG_SE_TRNG_0_TEST_OUT_2_POS))\n\n/* 0x24C : se_trng_0_test_out_3 */\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_3_OFFSET (0x24C)\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_3        SEC_ENG_SE_TRNG_0_TEST_OUT_3\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_3_POS    (0U)\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_3_LEN    (32U)\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_3_MSK    (((1U << SEC_ENG_SE_TRNG_0_TEST_OUT_3_LEN) - 1) << SEC_ENG_SE_TRNG_0_TEST_OUT_3_POS)\n#define SEC_ENG_SE_TRNG_0_TEST_OUT_3_UMSK   (~(((1U << SEC_ENG_SE_TRNG_0_TEST_OUT_3_LEN) - 1) << SEC_ENG_SE_TRNG_0_TEST_OUT_3_POS))\n\n/* 0x2FC : se_trng_0_ctrl_prot */\n#define SEC_ENG_SE_TRNG_0_CTRL_PROT_OFFSET (0x2FC)\n#define SEC_ENG_SE_TRNG_PROT_EN            SEC_ENG_SE_TRNG_PROT_EN\n#define SEC_ENG_SE_TRNG_PROT_EN_POS        (0U)\n#define SEC_ENG_SE_TRNG_PROT_EN_LEN        (1U)\n#define SEC_ENG_SE_TRNG_PROT_EN_MSK        (((1U << SEC_ENG_SE_TRNG_PROT_EN_LEN) - 1) << SEC_ENG_SE_TRNG_PROT_EN_POS)\n#define SEC_ENG_SE_TRNG_PROT_EN_UMSK       (~(((1U << SEC_ENG_SE_TRNG_PROT_EN_LEN) - 1) << SEC_ENG_SE_TRNG_PROT_EN_POS))\n#define SEC_ENG_SE_TRNG_ID0_EN             SEC_ENG_SE_TRNG_ID0_EN\n#define SEC_ENG_SE_TRNG_ID0_EN_POS         (1U)\n#define SEC_ENG_SE_TRNG_ID0_EN_LEN         (1U)\n#define SEC_ENG_SE_TRNG_ID0_EN_MSK         (((1U << SEC_ENG_SE_TRNG_ID0_EN_LEN) - 1) << SEC_ENG_SE_TRNG_ID0_EN_POS)\n#define SEC_ENG_SE_TRNG_ID0_EN_UMSK        (~(((1U << SEC_ENG_SE_TRNG_ID0_EN_LEN) - 1) << SEC_ENG_SE_TRNG_ID0_EN_POS))\n#define SEC_ENG_SE_TRNG_ID1_EN             SEC_ENG_SE_TRNG_ID1_EN\n#define SEC_ENG_SE_TRNG_ID1_EN_POS         (2U)\n#define SEC_ENG_SE_TRNG_ID1_EN_LEN         (1U)\n#define SEC_ENG_SE_TRNG_ID1_EN_MSK         (((1U << SEC_ENG_SE_TRNG_ID1_EN_LEN) - 1) << SEC_ENG_SE_TRNG_ID1_EN_POS)\n#define SEC_ENG_SE_TRNG_ID1_EN_UMSK        (~(((1U << SEC_ENG_SE_TRNG_ID1_EN_LEN) - 1) << SEC_ENG_SE_TRNG_ID1_EN_POS))\n\n/* 0x300 : se_pka_0_ctrl_0 */\n#define SEC_ENG_SE_PKA_0_CTRL_0_OFFSET      (0x300)\n#define SEC_ENG_SE_PKA_0_DONE               SEC_ENG_SE_PKA_0_DONE\n#define SEC_ENG_SE_PKA_0_DONE_POS           (0U)\n#define SEC_ENG_SE_PKA_0_DONE_LEN           (1U)\n#define SEC_ENG_SE_PKA_0_DONE_MSK           (((1U << SEC_ENG_SE_PKA_0_DONE_LEN) - 1) << SEC_ENG_SE_PKA_0_DONE_POS)\n#define SEC_ENG_SE_PKA_0_DONE_UMSK          (~(((1U << SEC_ENG_SE_PKA_0_DONE_LEN) - 1) << SEC_ENG_SE_PKA_0_DONE_POS))\n#define SEC_ENG_SE_PKA_0_DONE_CLR_1T        SEC_ENG_SE_PKA_0_DONE_CLR_1T\n#define SEC_ENG_SE_PKA_0_DONE_CLR_1T_POS    (1U)\n#define SEC_ENG_SE_PKA_0_DONE_CLR_1T_LEN    (1U)\n#define SEC_ENG_SE_PKA_0_DONE_CLR_1T_MSK    (((1U << SEC_ENG_SE_PKA_0_DONE_CLR_1T_LEN) - 1) << SEC_ENG_SE_PKA_0_DONE_CLR_1T_POS)\n#define SEC_ENG_SE_PKA_0_DONE_CLR_1T_UMSK   (~(((1U << SEC_ENG_SE_PKA_0_DONE_CLR_1T_LEN) - 1) << SEC_ENG_SE_PKA_0_DONE_CLR_1T_POS))\n#define SEC_ENG_SE_PKA_0_BUSY               SEC_ENG_SE_PKA_0_BUSY\n#define SEC_ENG_SE_PKA_0_BUSY_POS           (2U)\n#define SEC_ENG_SE_PKA_0_BUSY_LEN           (1U)\n#define SEC_ENG_SE_PKA_0_BUSY_MSK           (((1U << SEC_ENG_SE_PKA_0_BUSY_LEN) - 1) << SEC_ENG_SE_PKA_0_BUSY_POS)\n#define SEC_ENG_SE_PKA_0_BUSY_UMSK          (~(((1U << SEC_ENG_SE_PKA_0_BUSY_LEN) - 1) << SEC_ENG_SE_PKA_0_BUSY_POS))\n#define SEC_ENG_SE_PKA_0_EN                 SEC_ENG_SE_PKA_0_EN\n#define SEC_ENG_SE_PKA_0_EN_POS             (3U)\n#define SEC_ENG_SE_PKA_0_EN_LEN             (1U)\n#define SEC_ENG_SE_PKA_0_EN_MSK             (((1U << SEC_ENG_SE_PKA_0_EN_LEN) - 1) << SEC_ENG_SE_PKA_0_EN_POS)\n#define SEC_ENG_SE_PKA_0_EN_UMSK            (~(((1U << SEC_ENG_SE_PKA_0_EN_LEN) - 1) << SEC_ENG_SE_PKA_0_EN_POS))\n#define SEC_ENG_SE_PKA_0_PROT_MD            SEC_ENG_SE_PKA_0_PROT_MD\n#define SEC_ENG_SE_PKA_0_PROT_MD_POS        (4U)\n#define SEC_ENG_SE_PKA_0_PROT_MD_LEN        (4U)\n#define SEC_ENG_SE_PKA_0_PROT_MD_MSK        (((1U << SEC_ENG_SE_PKA_0_PROT_MD_LEN) - 1) << SEC_ENG_SE_PKA_0_PROT_MD_POS)\n#define SEC_ENG_SE_PKA_0_PROT_MD_UMSK       (~(((1U << SEC_ENG_SE_PKA_0_PROT_MD_LEN) - 1) << SEC_ENG_SE_PKA_0_PROT_MD_POS))\n#define SEC_ENG_SE_PKA_0_INT                SEC_ENG_SE_PKA_0_INT\n#define SEC_ENG_SE_PKA_0_INT_POS            (8U)\n#define SEC_ENG_SE_PKA_0_INT_LEN            (1U)\n#define SEC_ENG_SE_PKA_0_INT_MSK            (((1U << SEC_ENG_SE_PKA_0_INT_LEN) - 1) << SEC_ENG_SE_PKA_0_INT_POS)\n#define SEC_ENG_SE_PKA_0_INT_UMSK           (~(((1U << SEC_ENG_SE_PKA_0_INT_LEN) - 1) << SEC_ENG_SE_PKA_0_INT_POS))\n#define SEC_ENG_SE_PKA_0_INT_CLR_1T         SEC_ENG_SE_PKA_0_INT_CLR_1T\n#define SEC_ENG_SE_PKA_0_INT_CLR_1T_POS     (9U)\n#define SEC_ENG_SE_PKA_0_INT_CLR_1T_LEN     (1U)\n#define SEC_ENG_SE_PKA_0_INT_CLR_1T_MSK     (((1U << SEC_ENG_SE_PKA_0_INT_CLR_1T_LEN) - 1) << SEC_ENG_SE_PKA_0_INT_CLR_1T_POS)\n#define SEC_ENG_SE_PKA_0_INT_CLR_1T_UMSK    (~(((1U << SEC_ENG_SE_PKA_0_INT_CLR_1T_LEN) - 1) << SEC_ENG_SE_PKA_0_INT_CLR_1T_POS))\n#define SEC_ENG_SE_PKA_0_INT_SET            SEC_ENG_SE_PKA_0_INT_SET\n#define SEC_ENG_SE_PKA_0_INT_SET_POS        (10U)\n#define SEC_ENG_SE_PKA_0_INT_SET_LEN        (1U)\n#define SEC_ENG_SE_PKA_0_INT_SET_MSK        (((1U << SEC_ENG_SE_PKA_0_INT_SET_LEN) - 1) << SEC_ENG_SE_PKA_0_INT_SET_POS)\n#define SEC_ENG_SE_PKA_0_INT_SET_UMSK       (~(((1U << SEC_ENG_SE_PKA_0_INT_SET_LEN) - 1) << SEC_ENG_SE_PKA_0_INT_SET_POS))\n#define SEC_ENG_SE_PKA_0_INT_MASK           SEC_ENG_SE_PKA_0_INT_MASK\n#define SEC_ENG_SE_PKA_0_INT_MASK_POS       (11U)\n#define SEC_ENG_SE_PKA_0_INT_MASK_LEN       (1U)\n#define SEC_ENG_SE_PKA_0_INT_MASK_MSK       (((1U << SEC_ENG_SE_PKA_0_INT_MASK_LEN) - 1) << SEC_ENG_SE_PKA_0_INT_MASK_POS)\n#define SEC_ENG_SE_PKA_0_INT_MASK_UMSK      (~(((1U << SEC_ENG_SE_PKA_0_INT_MASK_LEN) - 1) << SEC_ENG_SE_PKA_0_INT_MASK_POS))\n#define SEC_ENG_SE_PKA_0_ENDIAN             SEC_ENG_SE_PKA_0_ENDIAN\n#define SEC_ENG_SE_PKA_0_ENDIAN_POS         (12U)\n#define SEC_ENG_SE_PKA_0_ENDIAN_LEN         (1U)\n#define SEC_ENG_SE_PKA_0_ENDIAN_MSK         (((1U << SEC_ENG_SE_PKA_0_ENDIAN_LEN) - 1) << SEC_ENG_SE_PKA_0_ENDIAN_POS)\n#define SEC_ENG_SE_PKA_0_ENDIAN_UMSK        (~(((1U << SEC_ENG_SE_PKA_0_ENDIAN_LEN) - 1) << SEC_ENG_SE_PKA_0_ENDIAN_POS))\n#define SEC_ENG_SE_PKA_0_RAM_CLR_MD         SEC_ENG_SE_PKA_0_RAM_CLR_MD\n#define SEC_ENG_SE_PKA_0_RAM_CLR_MD_POS     (13U)\n#define SEC_ENG_SE_PKA_0_RAM_CLR_MD_LEN     (1U)\n#define SEC_ENG_SE_PKA_0_RAM_CLR_MD_MSK     (((1U << SEC_ENG_SE_PKA_0_RAM_CLR_MD_LEN) - 1) << SEC_ENG_SE_PKA_0_RAM_CLR_MD_POS)\n#define SEC_ENG_SE_PKA_0_RAM_CLR_MD_UMSK    (~(((1U << SEC_ENG_SE_PKA_0_RAM_CLR_MD_LEN) - 1) << SEC_ENG_SE_PKA_0_RAM_CLR_MD_POS))\n#define SEC_ENG_SE_PKA_0_STATUS_CLR_1T      SEC_ENG_SE_PKA_0_STATUS_CLR_1T\n#define SEC_ENG_SE_PKA_0_STATUS_CLR_1T_POS  (15U)\n#define SEC_ENG_SE_PKA_0_STATUS_CLR_1T_LEN  (1U)\n#define SEC_ENG_SE_PKA_0_STATUS_CLR_1T_MSK  (((1U << SEC_ENG_SE_PKA_0_STATUS_CLR_1T_LEN) - 1) << SEC_ENG_SE_PKA_0_STATUS_CLR_1T_POS)\n#define SEC_ENG_SE_PKA_0_STATUS_CLR_1T_UMSK (~(((1U << SEC_ENG_SE_PKA_0_STATUS_CLR_1T_LEN) - 1) << SEC_ENG_SE_PKA_0_STATUS_CLR_1T_POS))\n#define SEC_ENG_SE_PKA_0_STATUS             SEC_ENG_SE_PKA_0_STATUS\n#define SEC_ENG_SE_PKA_0_STATUS_POS         (16U)\n#define SEC_ENG_SE_PKA_0_STATUS_LEN         (16U)\n#define SEC_ENG_SE_PKA_0_STATUS_MSK         (((1U << SEC_ENG_SE_PKA_0_STATUS_LEN) - 1) << SEC_ENG_SE_PKA_0_STATUS_POS)\n#define SEC_ENG_SE_PKA_0_STATUS_UMSK        (~(((1U << SEC_ENG_SE_PKA_0_STATUS_LEN) - 1) << SEC_ENG_SE_PKA_0_STATUS_POS))\n\n/* 0x30C : se_pka_0_seed */\n#define SEC_ENG_SE_PKA_0_SEED_OFFSET (0x30C)\n#define SEC_ENG_SE_PKA_0_SEED        SEC_ENG_SE_PKA_0_SEED\n#define SEC_ENG_SE_PKA_0_SEED_POS    (0U)\n#define SEC_ENG_SE_PKA_0_SEED_LEN    (32U)\n#define SEC_ENG_SE_PKA_0_SEED_MSK    (((1U << SEC_ENG_SE_PKA_0_SEED_LEN) - 1) << SEC_ENG_SE_PKA_0_SEED_POS)\n#define SEC_ENG_SE_PKA_0_SEED_UMSK   (~(((1U << SEC_ENG_SE_PKA_0_SEED_LEN) - 1) << SEC_ENG_SE_PKA_0_SEED_POS))\n\n/* 0x310 : se_pka_0_ctrl_1 */\n#define SEC_ENG_SE_PKA_0_CTRL_1_OFFSET (0x310)\n#define SEC_ENG_SE_PKA_0_HBURST        SEC_ENG_SE_PKA_0_HBURST\n#define SEC_ENG_SE_PKA_0_HBURST_POS    (0U)\n#define SEC_ENG_SE_PKA_0_HBURST_LEN    (3U)\n#define SEC_ENG_SE_PKA_0_HBURST_MSK    (((1U << SEC_ENG_SE_PKA_0_HBURST_LEN) - 1) << SEC_ENG_SE_PKA_0_HBURST_POS)\n#define SEC_ENG_SE_PKA_0_HBURST_UMSK   (~(((1U << SEC_ENG_SE_PKA_0_HBURST_LEN) - 1) << SEC_ENG_SE_PKA_0_HBURST_POS))\n#define SEC_ENG_SE_PKA_0_HBYPASS       SEC_ENG_SE_PKA_0_HBYPASS\n#define SEC_ENG_SE_PKA_0_HBYPASS_POS   (3U)\n#define SEC_ENG_SE_PKA_0_HBYPASS_LEN   (1U)\n#define SEC_ENG_SE_PKA_0_HBYPASS_MSK   (((1U << SEC_ENG_SE_PKA_0_HBYPASS_LEN) - 1) << SEC_ENG_SE_PKA_0_HBYPASS_POS)\n#define SEC_ENG_SE_PKA_0_HBYPASS_UMSK  (~(((1U << SEC_ENG_SE_PKA_0_HBYPASS_LEN) - 1) << SEC_ENG_SE_PKA_0_HBYPASS_POS))\n\n/* 0x340 : se_pka_0_rw */\n#define SEC_ENG_SE_PKA_0_RW_OFFSET (0x340)\n\n/* 0x360 : se_pka_0_rw_burst */\n#define SEC_ENG_SE_PKA_0_RW_BURST_OFFSET (0x360)\n\n/* 0x3FC : se_pka_0_ctrl_prot */\n#define SEC_ENG_SE_PKA_0_CTRL_PROT_OFFSET (0x3FC)\n#define SEC_ENG_SE_PKA_PROT_EN            SEC_ENG_SE_PKA_PROT_EN\n#define SEC_ENG_SE_PKA_PROT_EN_POS        (0U)\n#define SEC_ENG_SE_PKA_PROT_EN_LEN        (1U)\n#define SEC_ENG_SE_PKA_PROT_EN_MSK        (((1U << SEC_ENG_SE_PKA_PROT_EN_LEN) - 1) << SEC_ENG_SE_PKA_PROT_EN_POS)\n#define SEC_ENG_SE_PKA_PROT_EN_UMSK       (~(((1U << SEC_ENG_SE_PKA_PROT_EN_LEN) - 1) << SEC_ENG_SE_PKA_PROT_EN_POS))\n#define SEC_ENG_SE_PKA_ID0_EN             SEC_ENG_SE_PKA_ID0_EN\n#define SEC_ENG_SE_PKA_ID0_EN_POS         (1U)\n#define SEC_ENG_SE_PKA_ID0_EN_LEN         (1U)\n#define SEC_ENG_SE_PKA_ID0_EN_MSK         (((1U << SEC_ENG_SE_PKA_ID0_EN_LEN) - 1) << SEC_ENG_SE_PKA_ID0_EN_POS)\n#define SEC_ENG_SE_PKA_ID0_EN_UMSK        (~(((1U << SEC_ENG_SE_PKA_ID0_EN_LEN) - 1) << SEC_ENG_SE_PKA_ID0_EN_POS))\n#define SEC_ENG_SE_PKA_ID1_EN             SEC_ENG_SE_PKA_ID1_EN\n#define SEC_ENG_SE_PKA_ID1_EN_POS         (2U)\n#define SEC_ENG_SE_PKA_ID1_EN_LEN         (1U)\n#define SEC_ENG_SE_PKA_ID1_EN_MSK         (((1U << SEC_ENG_SE_PKA_ID1_EN_LEN) - 1) << SEC_ENG_SE_PKA_ID1_EN_POS)\n#define SEC_ENG_SE_PKA_ID1_EN_UMSK        (~(((1U << SEC_ENG_SE_PKA_ID1_EN_LEN) - 1) << SEC_ENG_SE_PKA_ID1_EN_POS))\n\n/* 0x400 : se_cdet_0_ctrl_0 */\n#define SEC_ENG_SE_CDET_0_CTRL_0_OFFSET   (0x400)\n#define SEC_ENG_SE_CDET_0_EN              SEC_ENG_SE_CDET_0_EN\n#define SEC_ENG_SE_CDET_0_EN_POS          (0U)\n#define SEC_ENG_SE_CDET_0_EN_LEN          (1U)\n#define SEC_ENG_SE_CDET_0_EN_MSK          (((1U << SEC_ENG_SE_CDET_0_EN_LEN) - 1) << SEC_ENG_SE_CDET_0_EN_POS)\n#define SEC_ENG_SE_CDET_0_EN_UMSK         (~(((1U << SEC_ENG_SE_CDET_0_EN_LEN) - 1) << SEC_ENG_SE_CDET_0_EN_POS))\n#define SEC_ENG_SE_CDET_0_ERROR           SEC_ENG_SE_CDET_0_ERROR\n#define SEC_ENG_SE_CDET_0_ERROR_POS       (1U)\n#define SEC_ENG_SE_CDET_0_ERROR_LEN       (1U)\n#define SEC_ENG_SE_CDET_0_ERROR_MSK       (((1U << SEC_ENG_SE_CDET_0_ERROR_LEN) - 1) << SEC_ENG_SE_CDET_0_ERROR_POS)\n#define SEC_ENG_SE_CDET_0_ERROR_UMSK      (~(((1U << SEC_ENG_SE_CDET_0_ERROR_LEN) - 1) << SEC_ENG_SE_CDET_0_ERROR_POS))\n#define SEC_ENG_SE_CDET_0_STATUS          SEC_ENG_SE_CDET_0_STATUS\n#define SEC_ENG_SE_CDET_0_STATUS_POS      (2U)\n#define SEC_ENG_SE_CDET_0_STATUS_LEN      (14U)\n#define SEC_ENG_SE_CDET_0_STATUS_MSK      (((1U << SEC_ENG_SE_CDET_0_STATUS_LEN) - 1) << SEC_ENG_SE_CDET_0_STATUS_POS)\n#define SEC_ENG_SE_CDET_0_STATUS_UMSK     (~(((1U << SEC_ENG_SE_CDET_0_STATUS_LEN) - 1) << SEC_ENG_SE_CDET_0_STATUS_POS))\n#define SEC_ENG_SE_CDET_0_G_LOOP_MAX      SEC_ENG_SE_CDET_0_G_LOOP_MAX\n#define SEC_ENG_SE_CDET_0_G_LOOP_MAX_POS  (16U)\n#define SEC_ENG_SE_CDET_0_G_LOOP_MAX_LEN  (8U)\n#define SEC_ENG_SE_CDET_0_G_LOOP_MAX_MSK  (((1U << SEC_ENG_SE_CDET_0_G_LOOP_MAX_LEN) - 1) << SEC_ENG_SE_CDET_0_G_LOOP_MAX_POS)\n#define SEC_ENG_SE_CDET_0_G_LOOP_MAX_UMSK (~(((1U << SEC_ENG_SE_CDET_0_G_LOOP_MAX_LEN) - 1) << SEC_ENG_SE_CDET_0_G_LOOP_MAX_POS))\n#define SEC_ENG_SE_CDET_0_G_LOOP_MIN      SEC_ENG_SE_CDET_0_G_LOOP_MIN\n#define SEC_ENG_SE_CDET_0_G_LOOP_MIN_POS  (24U)\n#define SEC_ENG_SE_CDET_0_G_LOOP_MIN_LEN  (8U)\n#define SEC_ENG_SE_CDET_0_G_LOOP_MIN_MSK  (((1U << SEC_ENG_SE_CDET_0_G_LOOP_MIN_LEN) - 1) << SEC_ENG_SE_CDET_0_G_LOOP_MIN_POS)\n#define SEC_ENG_SE_CDET_0_G_LOOP_MIN_UMSK (~(((1U << SEC_ENG_SE_CDET_0_G_LOOP_MIN_LEN) - 1) << SEC_ENG_SE_CDET_0_G_LOOP_MIN_POS))\n\n/* 0x404 : se_cdet_0_ctrl_1 */\n#define SEC_ENG_SE_CDET_0_CTRL_1_OFFSET (0x404)\n#define SEC_ENG_SE_CDET_0_T_LOOP_N      SEC_ENG_SE_CDET_0_T_LOOP_N\n#define SEC_ENG_SE_CDET_0_T_LOOP_N_POS  (0U)\n#define SEC_ENG_SE_CDET_0_T_LOOP_N_LEN  (8U)\n#define SEC_ENG_SE_CDET_0_T_LOOP_N_MSK  (((1U << SEC_ENG_SE_CDET_0_T_LOOP_N_LEN) - 1) << SEC_ENG_SE_CDET_0_T_LOOP_N_POS)\n#define SEC_ENG_SE_CDET_0_T_LOOP_N_UMSK (~(((1U << SEC_ENG_SE_CDET_0_T_LOOP_N_LEN) - 1) << SEC_ENG_SE_CDET_0_T_LOOP_N_POS))\n#define SEC_ENG_SE_CDET_0_T_DLY_N       SEC_ENG_SE_CDET_0_T_DLY_N\n#define SEC_ENG_SE_CDET_0_T_DLY_N_POS   (8U)\n#define SEC_ENG_SE_CDET_0_T_DLY_N_LEN   (8U)\n#define SEC_ENG_SE_CDET_0_T_DLY_N_MSK   (((1U << SEC_ENG_SE_CDET_0_T_DLY_N_LEN) - 1) << SEC_ENG_SE_CDET_0_T_DLY_N_POS)\n#define SEC_ENG_SE_CDET_0_T_DLY_N_UMSK  (~(((1U << SEC_ENG_SE_CDET_0_T_DLY_N_LEN) - 1) << SEC_ENG_SE_CDET_0_T_DLY_N_POS))\n#define SEC_ENG_SE_CDET_0_G_SLP_N       SEC_ENG_SE_CDET_0_G_SLP_N\n#define SEC_ENG_SE_CDET_0_G_SLP_N_POS   (16U)\n#define SEC_ENG_SE_CDET_0_G_SLP_N_LEN   (8U)\n#define SEC_ENG_SE_CDET_0_G_SLP_N_MSK   (((1U << SEC_ENG_SE_CDET_0_G_SLP_N_LEN) - 1) << SEC_ENG_SE_CDET_0_G_SLP_N_POS)\n#define SEC_ENG_SE_CDET_0_G_SLP_N_UMSK  (~(((1U << SEC_ENG_SE_CDET_0_G_SLP_N_LEN) - 1) << SEC_ENG_SE_CDET_0_G_SLP_N_POS))\n\n/* 0x4FC : se_cdet_0_ctrl_prot */\n#define SEC_ENG_SE_CDET_0_CTRL_PROT_OFFSET (0x4FC)\n#define SEC_ENG_SE_CDET_PROT_EN            SEC_ENG_SE_CDET_PROT_EN\n#define SEC_ENG_SE_CDET_PROT_EN_POS        (0U)\n#define SEC_ENG_SE_CDET_PROT_EN_LEN        (1U)\n#define SEC_ENG_SE_CDET_PROT_EN_MSK        (((1U << SEC_ENG_SE_CDET_PROT_EN_LEN) - 1) << SEC_ENG_SE_CDET_PROT_EN_POS)\n#define SEC_ENG_SE_CDET_PROT_EN_UMSK       (~(((1U << SEC_ENG_SE_CDET_PROT_EN_LEN) - 1) << SEC_ENG_SE_CDET_PROT_EN_POS))\n#define SEC_ENG_SE_CDET_ID0_EN             SEC_ENG_SE_CDET_ID0_EN\n#define SEC_ENG_SE_CDET_ID0_EN_POS         (1U)\n#define SEC_ENG_SE_CDET_ID0_EN_LEN         (1U)\n#define SEC_ENG_SE_CDET_ID0_EN_MSK         (((1U << SEC_ENG_SE_CDET_ID0_EN_LEN) - 1) << SEC_ENG_SE_CDET_ID0_EN_POS)\n#define SEC_ENG_SE_CDET_ID0_EN_UMSK        (~(((1U << SEC_ENG_SE_CDET_ID0_EN_LEN) - 1) << SEC_ENG_SE_CDET_ID0_EN_POS))\n#define SEC_ENG_SE_CDET_ID1_EN             SEC_ENG_SE_CDET_ID1_EN\n#define SEC_ENG_SE_CDET_ID1_EN_POS         (2U)\n#define SEC_ENG_SE_CDET_ID1_EN_LEN         (1U)\n#define SEC_ENG_SE_CDET_ID1_EN_MSK         (((1U << SEC_ENG_SE_CDET_ID1_EN_LEN) - 1) << SEC_ENG_SE_CDET_ID1_EN_POS)\n#define SEC_ENG_SE_CDET_ID1_EN_UMSK        (~(((1U << SEC_ENG_SE_CDET_ID1_EN_LEN) - 1) << SEC_ENG_SE_CDET_ID1_EN_POS))\n\n/* 0x500 : se_gmac_0_ctrl_0 */\n#define SEC_ENG_SE_GMAC_0_CTRL_0_OFFSET   (0x500)\n#define SEC_ENG_SE_GMAC_0_BUSY            SEC_ENG_SE_GMAC_0_BUSY\n#define SEC_ENG_SE_GMAC_0_BUSY_POS        (0U)\n#define SEC_ENG_SE_GMAC_0_BUSY_LEN        (1U)\n#define SEC_ENG_SE_GMAC_0_BUSY_MSK        (((1U << SEC_ENG_SE_GMAC_0_BUSY_LEN) - 1) << SEC_ENG_SE_GMAC_0_BUSY_POS)\n#define SEC_ENG_SE_GMAC_0_BUSY_UMSK       (~(((1U << SEC_ENG_SE_GMAC_0_BUSY_LEN) - 1) << SEC_ENG_SE_GMAC_0_BUSY_POS))\n#define SEC_ENG_SE_GMAC_0_TRIG_1T         SEC_ENG_SE_GMAC_0_TRIG_1T\n#define SEC_ENG_SE_GMAC_0_TRIG_1T_POS     (1U)\n#define SEC_ENG_SE_GMAC_0_TRIG_1T_LEN     (1U)\n#define SEC_ENG_SE_GMAC_0_TRIG_1T_MSK     (((1U << SEC_ENG_SE_GMAC_0_TRIG_1T_LEN) - 1) << SEC_ENG_SE_GMAC_0_TRIG_1T_POS)\n#define SEC_ENG_SE_GMAC_0_TRIG_1T_UMSK    (~(((1U << SEC_ENG_SE_GMAC_0_TRIG_1T_LEN) - 1) << SEC_ENG_SE_GMAC_0_TRIG_1T_POS))\n#define SEC_ENG_SE_GMAC_0_EN              SEC_ENG_SE_GMAC_0_EN\n#define SEC_ENG_SE_GMAC_0_EN_POS          (2U)\n#define SEC_ENG_SE_GMAC_0_EN_LEN          (1U)\n#define SEC_ENG_SE_GMAC_0_EN_MSK          (((1U << SEC_ENG_SE_GMAC_0_EN_LEN) - 1) << SEC_ENG_SE_GMAC_0_EN_POS)\n#define SEC_ENG_SE_GMAC_0_EN_UMSK         (~(((1U << SEC_ENG_SE_GMAC_0_EN_LEN) - 1) << SEC_ENG_SE_GMAC_0_EN_POS))\n#define SEC_ENG_SE_GMAC_0_INT             SEC_ENG_SE_GMAC_0_INT\n#define SEC_ENG_SE_GMAC_0_INT_POS         (8U)\n#define SEC_ENG_SE_GMAC_0_INT_LEN         (1U)\n#define SEC_ENG_SE_GMAC_0_INT_MSK         (((1U << SEC_ENG_SE_GMAC_0_INT_LEN) - 1) << SEC_ENG_SE_GMAC_0_INT_POS)\n#define SEC_ENG_SE_GMAC_0_INT_UMSK        (~(((1U << SEC_ENG_SE_GMAC_0_INT_LEN) - 1) << SEC_ENG_SE_GMAC_0_INT_POS))\n#define SEC_ENG_SE_GMAC_0_INT_CLR_1T      SEC_ENG_SE_GMAC_0_INT_CLR_1T\n#define SEC_ENG_SE_GMAC_0_INT_CLR_1T_POS  (9U)\n#define SEC_ENG_SE_GMAC_0_INT_CLR_1T_LEN  (1U)\n#define SEC_ENG_SE_GMAC_0_INT_CLR_1T_MSK  (((1U << SEC_ENG_SE_GMAC_0_INT_CLR_1T_LEN) - 1) << SEC_ENG_SE_GMAC_0_INT_CLR_1T_POS)\n#define SEC_ENG_SE_GMAC_0_INT_CLR_1T_UMSK (~(((1U << SEC_ENG_SE_GMAC_0_INT_CLR_1T_LEN) - 1) << SEC_ENG_SE_GMAC_0_INT_CLR_1T_POS))\n#define SEC_ENG_SE_GMAC_0_INT_SET_1T      SEC_ENG_SE_GMAC_0_INT_SET_1T\n#define SEC_ENG_SE_GMAC_0_INT_SET_1T_POS  (10U)\n#define SEC_ENG_SE_GMAC_0_INT_SET_1T_LEN  (1U)\n#define SEC_ENG_SE_GMAC_0_INT_SET_1T_MSK  (((1U << SEC_ENG_SE_GMAC_0_INT_SET_1T_LEN) - 1) << SEC_ENG_SE_GMAC_0_INT_SET_1T_POS)\n#define SEC_ENG_SE_GMAC_0_INT_SET_1T_UMSK (~(((1U << SEC_ENG_SE_GMAC_0_INT_SET_1T_LEN) - 1) << SEC_ENG_SE_GMAC_0_INT_SET_1T_POS))\n#define SEC_ENG_SE_GMAC_0_INT_MASK        SEC_ENG_SE_GMAC_0_INT_MASK\n#define SEC_ENG_SE_GMAC_0_INT_MASK_POS    (11U)\n#define SEC_ENG_SE_GMAC_0_INT_MASK_LEN    (1U)\n#define SEC_ENG_SE_GMAC_0_INT_MASK_MSK    (((1U << SEC_ENG_SE_GMAC_0_INT_MASK_LEN) - 1) << SEC_ENG_SE_GMAC_0_INT_MASK_POS)\n#define SEC_ENG_SE_GMAC_0_INT_MASK_UMSK   (~(((1U << SEC_ENG_SE_GMAC_0_INT_MASK_LEN) - 1) << SEC_ENG_SE_GMAC_0_INT_MASK_POS))\n#define SEC_ENG_SE_GMAC_0_T_ENDIAN        SEC_ENG_SE_GMAC_0_T_ENDIAN\n#define SEC_ENG_SE_GMAC_0_T_ENDIAN_POS    (12U)\n#define SEC_ENG_SE_GMAC_0_T_ENDIAN_LEN    (1U)\n#define SEC_ENG_SE_GMAC_0_T_ENDIAN_MSK    (((1U << SEC_ENG_SE_GMAC_0_T_ENDIAN_LEN) - 1) << SEC_ENG_SE_GMAC_0_T_ENDIAN_POS)\n#define SEC_ENG_SE_GMAC_0_T_ENDIAN_UMSK   (~(((1U << SEC_ENG_SE_GMAC_0_T_ENDIAN_LEN) - 1) << SEC_ENG_SE_GMAC_0_T_ENDIAN_POS))\n#define SEC_ENG_SE_GMAC_0_H_ENDIAN        SEC_ENG_SE_GMAC_0_H_ENDIAN\n#define SEC_ENG_SE_GMAC_0_H_ENDIAN_POS    (13U)\n#define SEC_ENG_SE_GMAC_0_H_ENDIAN_LEN    (1U)\n#define SEC_ENG_SE_GMAC_0_H_ENDIAN_MSK    (((1U << SEC_ENG_SE_GMAC_0_H_ENDIAN_LEN) - 1) << SEC_ENG_SE_GMAC_0_H_ENDIAN_POS)\n#define SEC_ENG_SE_GMAC_0_H_ENDIAN_UMSK   (~(((1U << SEC_ENG_SE_GMAC_0_H_ENDIAN_LEN) - 1) << SEC_ENG_SE_GMAC_0_H_ENDIAN_POS))\n#define SEC_ENG_SE_GMAC_0_X_ENDIAN        SEC_ENG_SE_GMAC_0_X_ENDIAN\n#define SEC_ENG_SE_GMAC_0_X_ENDIAN_POS    (14U)\n#define SEC_ENG_SE_GMAC_0_X_ENDIAN_LEN    (1U)\n#define SEC_ENG_SE_GMAC_0_X_ENDIAN_MSK    (((1U << SEC_ENG_SE_GMAC_0_X_ENDIAN_LEN) - 1) << SEC_ENG_SE_GMAC_0_X_ENDIAN_POS)\n#define SEC_ENG_SE_GMAC_0_X_ENDIAN_UMSK   (~(((1U << SEC_ENG_SE_GMAC_0_X_ENDIAN_LEN) - 1) << SEC_ENG_SE_GMAC_0_X_ENDIAN_POS))\n\n/* 0x504 : se_gmac_0_lca */\n#define SEC_ENG_SE_GMAC_0_LCA_OFFSET (0x504)\n#define SEC_ENG_SE_GMAC_0_LCA        SEC_ENG_SE_GMAC_0_LCA\n#define SEC_ENG_SE_GMAC_0_LCA_POS    (0U)\n#define SEC_ENG_SE_GMAC_0_LCA_LEN    (32U)\n#define SEC_ENG_SE_GMAC_0_LCA_MSK    (((1U << SEC_ENG_SE_GMAC_0_LCA_LEN) - 1) << SEC_ENG_SE_GMAC_0_LCA_POS)\n#define SEC_ENG_SE_GMAC_0_LCA_UMSK   (~(((1U << SEC_ENG_SE_GMAC_0_LCA_LEN) - 1) << SEC_ENG_SE_GMAC_0_LCA_POS))\n\n/* 0x508 : se_gmac_0_status */\n#define SEC_ENG_SE_GMAC_0_STATUS_OFFSET (0x508)\n#define SEC_ENG_SE_GMAC_0_STATUS        SEC_ENG_SE_GMAC_0_STATUS\n#define SEC_ENG_SE_GMAC_0_STATUS_POS    (0U)\n#define SEC_ENG_SE_GMAC_0_STATUS_LEN    (32U)\n#define SEC_ENG_SE_GMAC_0_STATUS_MSK    (((1U << SEC_ENG_SE_GMAC_0_STATUS_LEN) - 1) << SEC_ENG_SE_GMAC_0_STATUS_POS)\n#define SEC_ENG_SE_GMAC_0_STATUS_UMSK   (~(((1U << SEC_ENG_SE_GMAC_0_STATUS_LEN) - 1) << SEC_ENG_SE_GMAC_0_STATUS_POS))\n\n/* 0x5FC : se_gmac_0_ctrl_prot */\n#define SEC_ENG_SE_GMAC_0_CTRL_PROT_OFFSET (0x5FC)\n#define SEC_ENG_SE_GMAC_PROT_EN            SEC_ENG_SE_GMAC_PROT_EN\n#define SEC_ENG_SE_GMAC_PROT_EN_POS        (0U)\n#define SEC_ENG_SE_GMAC_PROT_EN_LEN        (1U)\n#define SEC_ENG_SE_GMAC_PROT_EN_MSK        (((1U << SEC_ENG_SE_GMAC_PROT_EN_LEN) - 1) << SEC_ENG_SE_GMAC_PROT_EN_POS)\n#define SEC_ENG_SE_GMAC_PROT_EN_UMSK       (~(((1U << SEC_ENG_SE_GMAC_PROT_EN_LEN) - 1) << SEC_ENG_SE_GMAC_PROT_EN_POS))\n#define SEC_ENG_SE_GMAC_ID0_EN             SEC_ENG_SE_GMAC_ID0_EN\n#define SEC_ENG_SE_GMAC_ID0_EN_POS         (1U)\n#define SEC_ENG_SE_GMAC_ID0_EN_LEN         (1U)\n#define SEC_ENG_SE_GMAC_ID0_EN_MSK         (((1U << SEC_ENG_SE_GMAC_ID0_EN_LEN) - 1) << SEC_ENG_SE_GMAC_ID0_EN_POS)\n#define SEC_ENG_SE_GMAC_ID0_EN_UMSK        (~(((1U << SEC_ENG_SE_GMAC_ID0_EN_LEN) - 1) << SEC_ENG_SE_GMAC_ID0_EN_POS))\n#define SEC_ENG_SE_GMAC_ID1_EN             SEC_ENG_SE_GMAC_ID1_EN\n#define SEC_ENG_SE_GMAC_ID1_EN_POS         (2U)\n#define SEC_ENG_SE_GMAC_ID1_EN_LEN         (1U)\n#define SEC_ENG_SE_GMAC_ID1_EN_MSK         (((1U << SEC_ENG_SE_GMAC_ID1_EN_LEN) - 1) << SEC_ENG_SE_GMAC_ID1_EN_POS)\n#define SEC_ENG_SE_GMAC_ID1_EN_UMSK        (~(((1U << SEC_ENG_SE_GMAC_ID1_EN_LEN) - 1) << SEC_ENG_SE_GMAC_ID1_EN_POS))\n\n/* 0xF00 : se_ctrl_prot_rd */\n#define SEC_ENG_SE_CTRL_PROT_RD_OFFSET  (0xF00)\n#define SEC_ENG_SE_SHA_PROT_EN_RD       SEC_ENG_SE_SHA_PROT_EN_RD\n#define SEC_ENG_SE_SHA_PROT_EN_RD_POS   (0U)\n#define SEC_ENG_SE_SHA_PROT_EN_RD_LEN   (1U)\n#define SEC_ENG_SE_SHA_PROT_EN_RD_MSK   (((1U << SEC_ENG_SE_SHA_PROT_EN_RD_LEN) - 1) << SEC_ENG_SE_SHA_PROT_EN_RD_POS)\n#define SEC_ENG_SE_SHA_PROT_EN_RD_UMSK  (~(((1U << SEC_ENG_SE_SHA_PROT_EN_RD_LEN) - 1) << SEC_ENG_SE_SHA_PROT_EN_RD_POS))\n#define SEC_ENG_SE_SHA_ID0_EN_RD        SEC_ENG_SE_SHA_ID0_EN_RD\n#define SEC_ENG_SE_SHA_ID0_EN_RD_POS    (1U)\n#define SEC_ENG_SE_SHA_ID0_EN_RD_LEN    (1U)\n#define SEC_ENG_SE_SHA_ID0_EN_RD_MSK    (((1U << SEC_ENG_SE_SHA_ID0_EN_RD_LEN) - 1) << SEC_ENG_SE_SHA_ID0_EN_RD_POS)\n#define SEC_ENG_SE_SHA_ID0_EN_RD_UMSK   (~(((1U << SEC_ENG_SE_SHA_ID0_EN_RD_LEN) - 1) << SEC_ENG_SE_SHA_ID0_EN_RD_POS))\n#define SEC_ENG_SE_SHA_ID1_EN_RD        SEC_ENG_SE_SHA_ID1_EN_RD\n#define SEC_ENG_SE_SHA_ID1_EN_RD_POS    (2U)\n#define SEC_ENG_SE_SHA_ID1_EN_RD_LEN    (1U)\n#define SEC_ENG_SE_SHA_ID1_EN_RD_MSK    (((1U << SEC_ENG_SE_SHA_ID1_EN_RD_LEN) - 1) << SEC_ENG_SE_SHA_ID1_EN_RD_POS)\n#define SEC_ENG_SE_SHA_ID1_EN_RD_UMSK   (~(((1U << SEC_ENG_SE_SHA_ID1_EN_RD_LEN) - 1) << SEC_ENG_SE_SHA_ID1_EN_RD_POS))\n#define SEC_ENG_SE_AES_PROT_EN_RD       SEC_ENG_SE_AES_PROT_EN_RD\n#define SEC_ENG_SE_AES_PROT_EN_RD_POS   (4U)\n#define SEC_ENG_SE_AES_PROT_EN_RD_LEN   (1U)\n#define SEC_ENG_SE_AES_PROT_EN_RD_MSK   (((1U << SEC_ENG_SE_AES_PROT_EN_RD_LEN) - 1) << SEC_ENG_SE_AES_PROT_EN_RD_POS)\n#define SEC_ENG_SE_AES_PROT_EN_RD_UMSK  (~(((1U << SEC_ENG_SE_AES_PROT_EN_RD_LEN) - 1) << SEC_ENG_SE_AES_PROT_EN_RD_POS))\n#define SEC_ENG_SE_AES_ID0_EN_RD        SEC_ENG_SE_AES_ID0_EN_RD\n#define SEC_ENG_SE_AES_ID0_EN_RD_POS    (5U)\n#define SEC_ENG_SE_AES_ID0_EN_RD_LEN    (1U)\n#define SEC_ENG_SE_AES_ID0_EN_RD_MSK    (((1U << SEC_ENG_SE_AES_ID0_EN_RD_LEN) - 1) << SEC_ENG_SE_AES_ID0_EN_RD_POS)\n#define SEC_ENG_SE_AES_ID0_EN_RD_UMSK   (~(((1U << SEC_ENG_SE_AES_ID0_EN_RD_LEN) - 1) << SEC_ENG_SE_AES_ID0_EN_RD_POS))\n#define SEC_ENG_SE_AES_ID1_EN_RD        SEC_ENG_SE_AES_ID1_EN_RD\n#define SEC_ENG_SE_AES_ID1_EN_RD_POS    (6U)\n#define SEC_ENG_SE_AES_ID1_EN_RD_LEN    (1U)\n#define SEC_ENG_SE_AES_ID1_EN_RD_MSK    (((1U << SEC_ENG_SE_AES_ID1_EN_RD_LEN) - 1) << SEC_ENG_SE_AES_ID1_EN_RD_POS)\n#define SEC_ENG_SE_AES_ID1_EN_RD_UMSK   (~(((1U << SEC_ENG_SE_AES_ID1_EN_RD_LEN) - 1) << SEC_ENG_SE_AES_ID1_EN_RD_POS))\n#define SEC_ENG_SE_TRNG_PROT_EN_RD      SEC_ENG_SE_TRNG_PROT_EN_RD\n#define SEC_ENG_SE_TRNG_PROT_EN_RD_POS  (8U)\n#define SEC_ENG_SE_TRNG_PROT_EN_RD_LEN  (1U)\n#define SEC_ENG_SE_TRNG_PROT_EN_RD_MSK  (((1U << SEC_ENG_SE_TRNG_PROT_EN_RD_LEN) - 1) << SEC_ENG_SE_TRNG_PROT_EN_RD_POS)\n#define SEC_ENG_SE_TRNG_PROT_EN_RD_UMSK (~(((1U << SEC_ENG_SE_TRNG_PROT_EN_RD_LEN) - 1) << SEC_ENG_SE_TRNG_PROT_EN_RD_POS))\n#define SEC_ENG_SE_TRNG_ID0_EN_RD       SEC_ENG_SE_TRNG_ID0_EN_RD\n#define SEC_ENG_SE_TRNG_ID0_EN_RD_POS   (9U)\n#define SEC_ENG_SE_TRNG_ID0_EN_RD_LEN   (1U)\n#define SEC_ENG_SE_TRNG_ID0_EN_RD_MSK   (((1U << SEC_ENG_SE_TRNG_ID0_EN_RD_LEN) - 1) << SEC_ENG_SE_TRNG_ID0_EN_RD_POS)\n#define SEC_ENG_SE_TRNG_ID0_EN_RD_UMSK  (~(((1U << SEC_ENG_SE_TRNG_ID0_EN_RD_LEN) - 1) << SEC_ENG_SE_TRNG_ID0_EN_RD_POS))\n#define SEC_ENG_SE_TRNG_ID1_EN_RD       SEC_ENG_SE_TRNG_ID1_EN_RD\n#define SEC_ENG_SE_TRNG_ID1_EN_RD_POS   (10U)\n#define SEC_ENG_SE_TRNG_ID1_EN_RD_LEN   (1U)\n#define SEC_ENG_SE_TRNG_ID1_EN_RD_MSK   (((1U << SEC_ENG_SE_TRNG_ID1_EN_RD_LEN) - 1) << SEC_ENG_SE_TRNG_ID1_EN_RD_POS)\n#define SEC_ENG_SE_TRNG_ID1_EN_RD_UMSK  (~(((1U << SEC_ENG_SE_TRNG_ID1_EN_RD_LEN) - 1) << SEC_ENG_SE_TRNG_ID1_EN_RD_POS))\n#define SEC_ENG_SE_PKA_PROT_EN_RD       SEC_ENG_SE_PKA_PROT_EN_RD\n#define SEC_ENG_SE_PKA_PROT_EN_RD_POS   (12U)\n#define SEC_ENG_SE_PKA_PROT_EN_RD_LEN   (1U)\n#define SEC_ENG_SE_PKA_PROT_EN_RD_MSK   (((1U << SEC_ENG_SE_PKA_PROT_EN_RD_LEN) - 1) << SEC_ENG_SE_PKA_PROT_EN_RD_POS)\n#define SEC_ENG_SE_PKA_PROT_EN_RD_UMSK  (~(((1U << SEC_ENG_SE_PKA_PROT_EN_RD_LEN) - 1) << SEC_ENG_SE_PKA_PROT_EN_RD_POS))\n#define SEC_ENG_SE_PKA_ID0_EN_RD        SEC_ENG_SE_PKA_ID0_EN_RD\n#define SEC_ENG_SE_PKA_ID0_EN_RD_POS    (13U)\n#define SEC_ENG_SE_PKA_ID0_EN_RD_LEN    (1U)\n#define SEC_ENG_SE_PKA_ID0_EN_RD_MSK    (((1U << SEC_ENG_SE_PKA_ID0_EN_RD_LEN) - 1) << SEC_ENG_SE_PKA_ID0_EN_RD_POS)\n#define SEC_ENG_SE_PKA_ID0_EN_RD_UMSK   (~(((1U << SEC_ENG_SE_PKA_ID0_EN_RD_LEN) - 1) << SEC_ENG_SE_PKA_ID0_EN_RD_POS))\n#define SEC_ENG_SE_PKA_ID1_EN_RD        SEC_ENG_SE_PKA_ID1_EN_RD\n#define SEC_ENG_SE_PKA_ID1_EN_RD_POS    (14U)\n#define SEC_ENG_SE_PKA_ID1_EN_RD_LEN    (1U)\n#define SEC_ENG_SE_PKA_ID1_EN_RD_MSK    (((1U << SEC_ENG_SE_PKA_ID1_EN_RD_LEN) - 1) << SEC_ENG_SE_PKA_ID1_EN_RD_POS)\n#define SEC_ENG_SE_PKA_ID1_EN_RD_UMSK   (~(((1U << SEC_ENG_SE_PKA_ID1_EN_RD_LEN) - 1) << SEC_ENG_SE_PKA_ID1_EN_RD_POS))\n#define SEC_ENG_SE_CDET_PROT_EN_RD      SEC_ENG_SE_CDET_PROT_EN_RD\n#define SEC_ENG_SE_CDET_PROT_EN_RD_POS  (16U)\n#define SEC_ENG_SE_CDET_PROT_EN_RD_LEN  (1U)\n#define SEC_ENG_SE_CDET_PROT_EN_RD_MSK  (((1U << SEC_ENG_SE_CDET_PROT_EN_RD_LEN) - 1) << SEC_ENG_SE_CDET_PROT_EN_RD_POS)\n#define SEC_ENG_SE_CDET_PROT_EN_RD_UMSK (~(((1U << SEC_ENG_SE_CDET_PROT_EN_RD_LEN) - 1) << SEC_ENG_SE_CDET_PROT_EN_RD_POS))\n#define SEC_ENG_SE_CDET_ID0_EN_RD       SEC_ENG_SE_CDET_ID0_EN_RD\n#define SEC_ENG_SE_CDET_ID0_EN_RD_POS   (17U)\n#define SEC_ENG_SE_CDET_ID0_EN_RD_LEN   (1U)\n#define SEC_ENG_SE_CDET_ID0_EN_RD_MSK   (((1U << SEC_ENG_SE_CDET_ID0_EN_RD_LEN) - 1) << SEC_ENG_SE_CDET_ID0_EN_RD_POS)\n#define SEC_ENG_SE_CDET_ID0_EN_RD_UMSK  (~(((1U << SEC_ENG_SE_CDET_ID0_EN_RD_LEN) - 1) << SEC_ENG_SE_CDET_ID0_EN_RD_POS))\n#define SEC_ENG_SE_CDET_ID1_EN_RD       SEC_ENG_SE_CDET_ID1_EN_RD\n#define SEC_ENG_SE_CDET_ID1_EN_RD_POS   (18U)\n#define SEC_ENG_SE_CDET_ID1_EN_RD_LEN   (1U)\n#define SEC_ENG_SE_CDET_ID1_EN_RD_MSK   (((1U << SEC_ENG_SE_CDET_ID1_EN_RD_LEN) - 1) << SEC_ENG_SE_CDET_ID1_EN_RD_POS)\n#define SEC_ENG_SE_CDET_ID1_EN_RD_UMSK  (~(((1U << SEC_ENG_SE_CDET_ID1_EN_RD_LEN) - 1) << SEC_ENG_SE_CDET_ID1_EN_RD_POS))\n#define SEC_ENG_SE_GMAC_PROT_EN_RD      SEC_ENG_SE_GMAC_PROT_EN_RD\n#define SEC_ENG_SE_GMAC_PROT_EN_RD_POS  (20U)\n#define SEC_ENG_SE_GMAC_PROT_EN_RD_LEN  (1U)\n#define SEC_ENG_SE_GMAC_PROT_EN_RD_MSK  (((1U << SEC_ENG_SE_GMAC_PROT_EN_RD_LEN) - 1) << SEC_ENG_SE_GMAC_PROT_EN_RD_POS)\n#define SEC_ENG_SE_GMAC_PROT_EN_RD_UMSK (~(((1U << SEC_ENG_SE_GMAC_PROT_EN_RD_LEN) - 1) << SEC_ENG_SE_GMAC_PROT_EN_RD_POS))\n#define SEC_ENG_SE_GMAC_ID0_EN_RD       SEC_ENG_SE_GMAC_ID0_EN_RD\n#define SEC_ENG_SE_GMAC_ID0_EN_RD_POS   (21U)\n#define SEC_ENG_SE_GMAC_ID0_EN_RD_LEN   (1U)\n#define SEC_ENG_SE_GMAC_ID0_EN_RD_MSK   (((1U << SEC_ENG_SE_GMAC_ID0_EN_RD_LEN) - 1) << SEC_ENG_SE_GMAC_ID0_EN_RD_POS)\n#define SEC_ENG_SE_GMAC_ID0_EN_RD_UMSK  (~(((1U << SEC_ENG_SE_GMAC_ID0_EN_RD_LEN) - 1) << SEC_ENG_SE_GMAC_ID0_EN_RD_POS))\n#define SEC_ENG_SE_GMAC_ID1_EN_RD       SEC_ENG_SE_GMAC_ID1_EN_RD\n#define SEC_ENG_SE_GMAC_ID1_EN_RD_POS   (22U)\n#define SEC_ENG_SE_GMAC_ID1_EN_RD_LEN   (1U)\n#define SEC_ENG_SE_GMAC_ID1_EN_RD_MSK   (((1U << SEC_ENG_SE_GMAC_ID1_EN_RD_LEN) - 1) << SEC_ENG_SE_GMAC_ID1_EN_RD_POS)\n#define SEC_ENG_SE_GMAC_ID1_EN_RD_UMSK  (~(((1U << SEC_ENG_SE_GMAC_ID1_EN_RD_LEN) - 1) << SEC_ENG_SE_GMAC_ID1_EN_RD_POS))\n#define SEC_ENG_SE_DBG_DIS              SEC_ENG_SE_DBG_DIS\n#define SEC_ENG_SE_DBG_DIS_POS          (31U)\n#define SEC_ENG_SE_DBG_DIS_LEN          (1U)\n#define SEC_ENG_SE_DBG_DIS_MSK          (((1U << SEC_ENG_SE_DBG_DIS_LEN) - 1) << SEC_ENG_SE_DBG_DIS_POS)\n#define SEC_ENG_SE_DBG_DIS_UMSK         (~(((1U << SEC_ENG_SE_DBG_DIS_LEN) - 1) << SEC_ENG_SE_DBG_DIS_POS))\n\n/* 0xF04 : se_ctrl_reserved_0 */\n#define SEC_ENG_SE_CTRL_RESERVED_0_OFFSET (0xF04)\n#define SEC_ENG_SE_CTRL_RESERVED_0        SEC_ENG_SE_CTRL_RESERVED_0\n#define SEC_ENG_SE_CTRL_RESERVED_0_POS    (0U)\n#define SEC_ENG_SE_CTRL_RESERVED_0_LEN    (32U)\n#define SEC_ENG_SE_CTRL_RESERVED_0_MSK    (((1U << SEC_ENG_SE_CTRL_RESERVED_0_LEN) - 1) << SEC_ENG_SE_CTRL_RESERVED_0_POS)\n#define SEC_ENG_SE_CTRL_RESERVED_0_UMSK   (~(((1U << SEC_ENG_SE_CTRL_RESERVED_0_LEN) - 1) << SEC_ENG_SE_CTRL_RESERVED_0_POS))\n\n/* 0xF08 : se_ctrl_reserved_1 */\n#define SEC_ENG_SE_CTRL_RESERVED_1_OFFSET (0xF08)\n#define SEC_ENG_SE_CTRL_RESERVED_1        SEC_ENG_SE_CTRL_RESERVED_1\n#define SEC_ENG_SE_CTRL_RESERVED_1_POS    (0U)\n#define SEC_ENG_SE_CTRL_RESERVED_1_LEN    (32U)\n#define SEC_ENG_SE_CTRL_RESERVED_1_MSK    (((1U << SEC_ENG_SE_CTRL_RESERVED_1_LEN) - 1) << SEC_ENG_SE_CTRL_RESERVED_1_POS)\n#define SEC_ENG_SE_CTRL_RESERVED_1_UMSK   (~(((1U << SEC_ENG_SE_CTRL_RESERVED_1_LEN) - 1) << SEC_ENG_SE_CTRL_RESERVED_1_POS))\n\n/* 0xF0C : se_ctrl_reserved_2 */\n#define SEC_ENG_SE_CTRL_RESERVED_2_OFFSET (0xF0C)\n#define SEC_ENG_SE_CTRL_RESERVED_2        SEC_ENG_SE_CTRL_RESERVED_2\n#define SEC_ENG_SE_CTRL_RESERVED_2_POS    (0U)\n#define SEC_ENG_SE_CTRL_RESERVED_2_LEN    (32U)\n#define SEC_ENG_SE_CTRL_RESERVED_2_MSK    (((1U << SEC_ENG_SE_CTRL_RESERVED_2_LEN) - 1) << SEC_ENG_SE_CTRL_RESERVED_2_POS)\n#define SEC_ENG_SE_CTRL_RESERVED_2_UMSK   (~(((1U << SEC_ENG_SE_CTRL_RESERVED_2_LEN) - 1) << SEC_ENG_SE_CTRL_RESERVED_2_POS))\n\nstruct sec_eng_reg {\n    /* 0x0 : se_sha_0_ctrl */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_busy       : 1;  /* [    0],          r,        0x0 */\n            uint32_t se_sha_0_trig_1t    : 1;  /* [    1],        w1p,        0x0 */\n            uint32_t se_sha_0_mode       : 3;  /* [ 4: 2],        r/w,        0x0 */\n            uint32_t se_sha_0_en         : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t se_sha_0_hash_sel   : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t reserved_7          : 1;  /* [    7],       rsvd,        0x0 */\n            uint32_t se_sha_0_int        : 1;  /* [    8],          r,        0x0 */\n            uint32_t se_sha_0_int_clr_1t : 1;  /* [    9],        w1p,        0x0 */\n            uint32_t se_sha_0_int_set_1t : 1;  /* [   10],        w1p,        0x0 */\n            uint32_t se_sha_0_int_mask   : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t reserved_12_14      : 3;  /* [14:12],       rsvd,        0x0 */\n            uint32_t se_sha_0_link_mode  : 1;  /* [   15],        r/w,        0x0 */\n            uint32_t se_sha_0_msg_len    : 16; /* [31:16],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_ctrl;\n\n    /* 0x4 : se_sha_0_msa */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_msa : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_msa;\n\n    /* 0x8 : se_sha_0_status */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_status : 32; /* [31: 0],          r,       0x41 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_status;\n\n    /* 0xC : se_sha_0_endian */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_dout_endian : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t reserved_1_31        : 31; /* [31: 1],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_endian;\n\n    /* 0x10 : se_sha_0_hash_l_0 */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_hash_l_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_hash_l_0;\n\n    /* 0x14 : se_sha_0_hash_l_1 */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_hash_l_1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_hash_l_1;\n\n    /* 0x18 : se_sha_0_hash_l_2 */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_hash_l_2 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_hash_l_2;\n\n    /* 0x1C : se_sha_0_hash_l_3 */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_hash_l_3 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_hash_l_3;\n\n    /* 0x20 : se_sha_0_hash_l_4 */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_hash_l_4 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_hash_l_4;\n\n    /* 0x24 : se_sha_0_hash_l_5 */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_hash_l_5 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_hash_l_5;\n\n    /* 0x28 : se_sha_0_hash_l_6 */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_hash_l_6 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_hash_l_6;\n\n    /* 0x2C : se_sha_0_hash_l_7 */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_hash_l_7 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_hash_l_7;\n\n    /* 0x30 : se_sha_0_hash_h_0 */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_hash_h_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_hash_h_0;\n\n    /* 0x34 : se_sha_0_hash_h_1 */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_hash_h_1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_hash_h_1;\n\n    /* 0x38 : se_sha_0_hash_h_2 */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_hash_h_2 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_hash_h_2;\n\n    /* 0x3C : se_sha_0_hash_h_3 */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_hash_h_3 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_hash_h_3;\n\n    /* 0x40 : se_sha_0_hash_h_4 */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_hash_h_4 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_hash_h_4;\n\n    /* 0x44 : se_sha_0_hash_h_5 */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_hash_h_5 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_hash_h_5;\n\n    /* 0x48 : se_sha_0_hash_h_6 */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_hash_h_6 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_hash_h_6;\n\n    /* 0x4C : se_sha_0_hash_h_7 */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_hash_h_7 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_hash_h_7;\n\n    /* 0x50 : se_sha_0_link */\n    union {\n        struct\n        {\n            uint32_t se_sha_0_lca : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_link;\n\n    /* 0x54  reserved */\n    uint8_t RESERVED0x54[168];\n\n    /* 0xFC : se_sha_0_ctrl_prot */\n    union {\n        struct\n        {\n            uint32_t se_sha_prot_en : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t se_sha_id0_en  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t se_sha_id1_en  : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t reserved_3_31  : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_0_ctrl_prot;\n\n    /* 0x100 : se_aes_0_ctrl */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_busy        : 1;  /* [    0],          r,        0x0 */\n            uint32_t se_aes_0_trig_1t     : 1;  /* [    1],        w1p,        0x0 */\n            uint32_t se_aes_0_en          : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t se_aes_0_mode        : 2;  /* [ 4: 3],        r/w,        0x0 */\n            uint32_t se_aes_0_dec_en      : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t se_aes_0_dec_key_sel : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t se_aes_0_hw_key_en   : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t se_aes_0_int         : 1;  /* [    8],          r,        0x0 */\n            uint32_t se_aes_0_int_clr_1t  : 1;  /* [    9],        w1p,        0x0 */\n            uint32_t se_aes_0_int_set_1t  : 1;  /* [   10],        w1p,        0x0 */\n            uint32_t se_aes_0_int_mask    : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t se_aes_0_block_mode  : 2;  /* [13:12],        r/w,        0x0 */\n            uint32_t se_aes_0_iv_sel      : 1;  /* [   14],        r/w,        0x0 */\n            uint32_t se_aes_0_link_mode   : 1;  /* [   15],        r/w,        0x0 */\n            uint32_t se_aes_0_msg_len     : 16; /* [31:16],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_ctrl;\n\n    /* 0x104 : se_aes_0_msa */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_msa : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_msa;\n\n    /* 0x108 : se_aes_0_mda */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_mda : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_mda;\n\n    /* 0x10C : se_aes_0_status */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_status : 32; /* [31: 0],          r,      0x100 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_status;\n\n    /* 0x110 : se_aes_0_iv_0 */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_iv_0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_iv_0;\n\n    /* 0x114 : se_aes_0_iv_1 */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_iv_1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_iv_1;\n\n    /* 0x118 : se_aes_0_iv_2 */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_iv_2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_iv_2;\n\n    /* 0x11C : se_aes_0_iv_3 */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_iv_3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_iv_3;\n\n    /* 0x120 : se_aes_0_key_0 */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_key_0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_key_0;\n\n    /* 0x124 : se_aes_0_key_1 */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_key_1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_key_1;\n\n    /* 0x128 : se_aes_0_key_2 */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_key_2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_key_2;\n\n    /* 0x12C : se_aes_0_key_3 */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_key_3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_key_3;\n\n    /* 0x130 : se_aes_0_key_4 */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_key_4 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_key_4;\n\n    /* 0x134 : se_aes_0_key_5 */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_key_5 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_key_5;\n\n    /* 0x138 : se_aes_0_key_6 */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_key_6 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_key_6;\n\n    /* 0x13C : se_aes_0_key_7 */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_key_7 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_key_7;\n\n    /* 0x140 : se_aes_0_key_sel_0 */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_key_sel_0 : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_31      : 30; /* [31: 2],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_key_sel_0;\n\n    /* 0x144 : se_aes_0_key_sel_1 */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_key_sel_1 : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_31      : 30; /* [31: 2],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_key_sel_1;\n\n    /* 0x148 : se_aes_0_endian */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_dout_endian : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t se_aes_0_din_endian  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t se_aes_0_key_endian  : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t se_aes_0_iv_endian   : 1;  /* [    3],        r/w,        0x1 */\n            uint32_t reserved_4_29        : 26; /* [29: 4],       rsvd,        0x0 */\n            uint32_t se_aes_0_ctr_len     : 2;  /* [31:30],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_endian;\n\n    /* 0x14C : se_aes_0_sboot */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_sboot_key_sel : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1_31          : 31; /* [31: 1],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_sboot;\n\n    /* 0x150 : se_aes_0_link */\n    union {\n        struct\n        {\n            uint32_t se_aes_0_lca : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_link;\n\n    /* 0x154  reserved */\n    uint8_t RESERVED0x154[168];\n\n    /* 0x1FC : se_aes_0_ctrl_prot */\n    union {\n        struct\n        {\n            uint32_t se_aes_prot_en : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t se_aes_id0_en  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t se_aes_id1_en  : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t reserved_3_31  : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_0_ctrl_prot;\n\n    /* 0x200 : se_trng_0_ctrl_0 */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_busy           : 1;  /* [    0],          r,        0x0 */\n            uint32_t se_trng_0_trig_1t        : 1;  /* [    1],        w1p,        0x0 */\n            uint32_t se_trng_0_en             : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t se_trng_0_dout_clr_1t    : 1;  /* [    3],        w1p,        0x0 */\n            uint32_t se_trng_0_ht_error       : 1;  /* [    4],          r,        0x0 */\n            uint32_t reserved_5_7             : 3;  /* [ 7: 5],       rsvd,        0x0 */\n            uint32_t se_trng_0_int            : 1;  /* [    8],          r,        0x0 */\n            uint32_t se_trng_0_int_clr_1t     : 1;  /* [    9],        w1p,        0x0 */\n            uint32_t se_trng_0_int_set_1t     : 1;  /* [   10],        w1p,        0x0 */\n            uint32_t se_trng_0_int_mask       : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t reserved_12              : 1;  /* [   12],       rsvd,        0x0 */\n            uint32_t se_trng_0_manual_fun_sel : 1;  /* [   13],        r/w,        0x0 */\n            uint32_t se_trng_0_manual_reseed  : 1;  /* [   14],        r/w,        0x0 */\n            uint32_t se_trng_0_manual_en      : 1;  /* [   15],        r/w,        0x0 */\n            uint32_t reserved_16_31           : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_ctrl_0;\n\n    /* 0x204 : se_trng_0_status */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_status : 32; /* [31: 0],          r,   0x100020 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_status;\n\n    /* 0x208 : se_trng_0_dout_0 */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_dout_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_dout_0;\n\n    /* 0x20C : se_trng_0_dout_1 */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_dout_1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_dout_1;\n\n    /* 0x210 : se_trng_0_dout_2 */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_dout_2 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_dout_2;\n\n    /* 0x214 : se_trng_0_dout_3 */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_dout_3 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_dout_3;\n\n    /* 0x218 : se_trng_0_dout_4 */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_dout_4 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_dout_4;\n\n    /* 0x21C : se_trng_0_dout_5 */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_dout_5 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_dout_5;\n\n    /* 0x220 : se_trng_0_dout_6 */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_dout_6 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_dout_6;\n\n    /* 0x224 : se_trng_0_dout_7 */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_dout_7 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_dout_7;\n\n    /* 0x228 : se_trng_0_test */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_test_en    : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t se_trng_0_cp_test_en : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t se_trng_0_cp_bypass  : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t se_trng_0_ht_dis     : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t se_trng_0_ht_alarm_n : 8;  /* [11: 4],        r/w,        0x0 */\n            uint32_t reserved_12_31       : 20; /* [31:12],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_test;\n\n    /* 0x22C : se_trng_0_ctrl_1 */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_reseed_n_lsb : 32; /* [31: 0],        r/w,     0xffff */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_ctrl_1;\n\n    /* 0x230 : se_trng_0_ctrl_2 */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_reseed_n_msb : 16; /* [15: 0],        r/w,       0xff */\n            uint32_t reserved_16_31         : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_ctrl_2;\n\n    /* 0x234 : se_trng_0_ctrl_3 */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_cp_ratio : 8;  /* [ 7: 0],        r/w,        0x3 */\n            uint32_t se_trng_0_ht_rct_c : 8;  /* [15: 8],        r/w,       0x42 */\n            uint32_t se_trng_0_ht_apt_c : 10; /* [25:16],        r/w,      0x37a */\n            uint32_t se_trng_0_ht_od_en : 1;  /* [   26],        r/w,        0x0 */\n            uint32_t reserved_27_30     : 4;  /* [30:27],       rsvd,        0x0 */\n            uint32_t se_trng_0_rosc_en  : 1;  /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_ctrl_3;\n\n    /* 0x238  reserved */\n    uint8_t RESERVED0x238[8];\n\n    /* 0x240 : se_trng_0_test_out_0 */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_test_out_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_test_out_0;\n\n    /* 0x244 : se_trng_0_test_out_1 */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_test_out_1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_test_out_1;\n\n    /* 0x248 : se_trng_0_test_out_2 */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_test_out_2 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_test_out_2;\n\n    /* 0x24C : se_trng_0_test_out_3 */\n    union {\n        struct\n        {\n            uint32_t se_trng_0_test_out_3 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_test_out_3;\n\n    /* 0x250  reserved */\n    uint8_t RESERVED0x250[172];\n\n    /* 0x2FC : se_trng_0_ctrl_prot */\n    union {\n        struct\n        {\n            uint32_t se_trng_prot_en : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t se_trng_id0_en  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t se_trng_id1_en  : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t reserved_3_31   : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_0_ctrl_prot;\n\n    /* 0x300 : se_pka_0_ctrl_0 */\n    union {\n        struct\n        {\n            uint32_t se_pka_0_done          : 1;  /* [    0],          r,        0x0 */\n            uint32_t se_pka_0_done_clr_1t   : 1;  /* [    1],        w1p,        0x0 */\n            uint32_t se_pka_0_busy          : 1;  /* [    2],          r,        0x0 */\n            uint32_t se_pka_0_en            : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t se_pka_0_prot_md       : 4;  /* [ 7: 4],        r/w,        0x0 */\n            uint32_t se_pka_0_int           : 1;  /* [    8],          r,        0x0 */\n            uint32_t se_pka_0_int_clr_1t    : 1;  /* [    9],        w1p,        0x0 */\n            uint32_t se_pka_0_int_set       : 1;  /* [   10],        r/w,        0x0 */\n            uint32_t se_pka_0_int_mask      : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t se_pka_0_endian        : 1;  /* [   12],        r/w,        0x0 */\n            uint32_t se_pka_0_ram_clr_md    : 1;  /* [   13],        r/w,        0x0 */\n            uint32_t reserved_14            : 1;  /* [   14],       rsvd,        0x0 */\n            uint32_t se_pka_0_status_clr_1t : 1;  /* [   15],        w1p,        0x0 */\n            uint32_t se_pka_0_status        : 16; /* [31:16],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_pka_0_ctrl_0;\n\n    /* 0x304  reserved */\n    uint8_t RESERVED0x304[8];\n\n    /* 0x30C : se_pka_0_seed */\n    union {\n        struct\n        {\n            uint32_t se_pka_0_seed : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_pka_0_seed;\n\n    /* 0x310 : se_pka_0_ctrl_1 */\n    union {\n        struct\n        {\n            uint32_t se_pka_0_hburst  : 3;  /* [ 2: 0],        r/w,        0x5 */\n            uint32_t se_pka_0_hbypass : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t reserved_4_31    : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_pka_0_ctrl_1;\n\n    /* 0x314  reserved */\n    uint8_t RESERVED0x314[44];\n\n    /* 0x340 : se_pka_0_rw */\n    union {\n        struct\n        {\n            uint32_t reserved_0_31 : 32; /* [31: 0],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_pka_0_rw;\n\n    /* 0x344  reserved */\n    uint8_t RESERVED0x344[28];\n\n    /* 0x360 : se_pka_0_rw_burst */\n    union {\n        struct\n        {\n            uint32_t reserved_0_31 : 32; /* [31: 0],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_pka_0_rw_burst;\n\n    /* 0x364  reserved */\n    uint8_t RESERVED0x364[152];\n\n    /* 0x3FC : se_pka_0_ctrl_prot */\n    union {\n        struct\n        {\n            uint32_t se_pka_prot_en : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t se_pka_id0_en  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t se_pka_id1_en  : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t reserved_3_31  : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_pka_0_ctrl_prot;\n\n    /* 0x400 : se_cdet_0_ctrl_0 */\n    union {\n        struct\n        {\n            uint32_t se_cdet_0_en         : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t se_cdet_0_error      : 1;  /* [    1],          r,        0x0 */\n            uint32_t se_cdet_0_status     : 14; /* [15: 2],          r,        0x1 */\n            uint32_t se_cdet_0_g_loop_max : 8;  /* [23:16],        r/w,       0x64 */\n            uint32_t se_cdet_0_g_loop_min : 8;  /* [31:24],        r/w,       0x21 */\n        } BF;\n        uint32_t WORD;\n    } se_cdet_0_ctrl_0;\n\n    /* 0x404 : se_cdet_0_ctrl_1 */\n    union {\n        struct\n        {\n            uint32_t se_cdet_0_t_loop_n : 8; /* [ 7: 0],        r/w,       0x32 */\n            uint32_t se_cdet_0_t_dly_n  : 8; /* [15: 8],        r/w,        0x3 */\n            uint32_t se_cdet_0_g_slp_n  : 8; /* [23:16],        r/w,       0xff */\n            uint32_t reserved_24_31     : 8; /* [31:24],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_cdet_0_ctrl_1;\n\n    /* 0x408  reserved */\n    uint8_t RESERVED0x408[244];\n\n    /* 0x4FC : se_cdet_0_ctrl_prot */\n    union {\n        struct\n        {\n            uint32_t se_cdet_prot_en : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t se_cdet_id0_en  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t se_cdet_id1_en  : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t reserved_3_31   : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_cdet_0_ctrl_prot;\n\n    /* 0x500 : se_gmac_0_ctrl_0 */\n    union {\n        struct\n        {\n            uint32_t se_gmac_0_busy       : 1;  /* [    0],          r,        0x0 */\n            uint32_t se_gmac_0_trig_1t    : 1;  /* [    1],        w1p,        0x0 */\n            uint32_t se_gmac_0_en         : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t reserved_3_7         : 5;  /* [ 7: 3],       rsvd,        0x0 */\n            uint32_t se_gmac_0_int        : 1;  /* [    8],          r,        0x0 */\n            uint32_t se_gmac_0_int_clr_1t : 1;  /* [    9],        w1p,        0x0 */\n            uint32_t se_gmac_0_int_set_1t : 1;  /* [   10],        w1p,        0x0 */\n            uint32_t se_gmac_0_int_mask   : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t se_gmac_0_t_endian   : 1;  /* [   12],        r/w,        0x1 */\n            uint32_t se_gmac_0_h_endian   : 1;  /* [   13],        r/w,        0x1 */\n            uint32_t se_gmac_0_x_endian   : 1;  /* [   14],        r/w,        0x1 */\n            uint32_t reserved_15_31       : 17; /* [31:15],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_gmac_0_ctrl_0;\n\n    /* 0x504 : se_gmac_0_lca */\n    union {\n        struct\n        {\n            uint32_t se_gmac_0_lca : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_gmac_0_lca;\n\n    /* 0x508 : se_gmac_0_status */\n    union {\n        struct\n        {\n            uint32_t se_gmac_0_status : 32; /* [31: 0],          r, 0xf1000000L */\n        } BF;\n        uint32_t WORD;\n    } se_gmac_0_status;\n\n    /* 0x50c  reserved */\n    uint8_t RESERVED0x50c[240];\n\n    /* 0x5FC : se_gmac_0_ctrl_prot */\n    union {\n        struct\n        {\n            uint32_t se_gmac_prot_en : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t se_gmac_id0_en  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t se_gmac_id1_en  : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t reserved_3_31   : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_gmac_0_ctrl_prot;\n\n    /* 0x600  reserved */\n    uint8_t RESERVED0x600[2304];\n\n    /* 0xF00 : se_ctrl_prot_rd */\n    union {\n        struct\n        {\n            uint32_t se_sha_prot_en_rd  : 1; /* [    0],          r,        0x1 */\n            uint32_t se_sha_id0_en_rd   : 1; /* [    1],          r,        0x1 */\n            uint32_t se_sha_id1_en_rd   : 1; /* [    2],          r,        0x1 */\n            uint32_t reserved_3         : 1; /* [    3],       rsvd,        0x0 */\n            uint32_t se_aes_prot_en_rd  : 1; /* [    4],          r,        0x1 */\n            uint32_t se_aes_id0_en_rd   : 1; /* [    5],          r,        0x1 */\n            uint32_t se_aes_id1_en_rd   : 1; /* [    6],          r,        0x1 */\n            uint32_t reserved_7         : 1; /* [    7],       rsvd,        0x0 */\n            uint32_t se_trng_prot_en_rd : 1; /* [    8],          r,        0x1 */\n            uint32_t se_trng_id0_en_rd  : 1; /* [    9],          r,        0x1 */\n            uint32_t se_trng_id1_en_rd  : 1; /* [   10],          r,        0x1 */\n            uint32_t reserved_11        : 1; /* [   11],       rsvd,        0x0 */\n            uint32_t se_pka_prot_en_rd  : 1; /* [   12],          r,        0x1 */\n            uint32_t se_pka_id0_en_rd   : 1; /* [   13],          r,        0x1 */\n            uint32_t se_pka_id1_en_rd   : 1; /* [   14],          r,        0x1 */\n            uint32_t reserved_15        : 1; /* [   15],       rsvd,        0x0 */\n            uint32_t se_cdet_prot_en_rd : 1; /* [   16],          r,        0x1 */\n            uint32_t se_cdet_id0_en_rd  : 1; /* [   17],          r,        0x1 */\n            uint32_t se_cdet_id1_en_rd  : 1; /* [   18],          r,        0x1 */\n            uint32_t reserved_19        : 1; /* [   19],       rsvd,        0x0 */\n            uint32_t se_gmac_prot_en_rd : 1; /* [   20],          r,        0x1 */\n            uint32_t se_gmac_id0_en_rd  : 1; /* [   21],          r,        0x1 */\n            uint32_t se_gmac_id1_en_rd  : 1; /* [   22],          r,        0x1 */\n            uint32_t reserved_23_30     : 8; /* [30:23],       rsvd,        0x0 */\n            uint32_t se_dbg_dis         : 1; /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_ctrl_prot_rd;\n\n    /* 0xF04 : se_ctrl_reserved_0 */\n    union {\n        struct\n        {\n            uint32_t se_ctrl_reserved_0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_ctrl_reserved_0;\n\n    /* 0xF08 : se_ctrl_reserved_1 */\n    union {\n        struct\n        {\n            uint32_t se_ctrl_reserved_1 : 32; /* [31: 0],        r/w, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } se_ctrl_reserved_1;\n\n    /* 0xF0C : se_ctrl_reserved_2 */\n    union {\n        struct\n        {\n            uint32_t se_ctrl_reserved_2 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_ctrl_reserved_2;\n};\n\ntypedef volatile struct sec_eng_reg sec_eng_reg_t;\n\n/*Following is reg patch*/\n\n/* 0x0 : se_sha_ctrl */\n#define SEC_ENG_SE_SHA_CTRL_OFFSET     (0x0)\n#define SEC_ENG_SE_SHA_BUSY            SEC_ENG_SE_SHA_BUSY\n#define SEC_ENG_SE_SHA_BUSY_POS        (0U)\n#define SEC_ENG_SE_SHA_BUSY_LEN        (1U)\n#define SEC_ENG_SE_SHA_BUSY_MSK        (((1U << SEC_ENG_SE_SHA_BUSY_LEN) - 1) << SEC_ENG_SE_SHA_BUSY_POS)\n#define SEC_ENG_SE_SHA_BUSY_UMSK       (~(((1U << SEC_ENG_SE_SHA_BUSY_LEN) - 1) << SEC_ENG_SE_SHA_BUSY_POS))\n#define SEC_ENG_SE_SHA_TRIG_1T         SEC_ENG_SE_SHA_TRIG_1T\n#define SEC_ENG_SE_SHA_TRIG_1T_POS     (1U)\n#define SEC_ENG_SE_SHA_TRIG_1T_LEN     (1U)\n#define SEC_ENG_SE_SHA_TRIG_1T_MSK     (((1U << SEC_ENG_SE_SHA_TRIG_1T_LEN) - 1) << SEC_ENG_SE_SHA_TRIG_1T_POS)\n#define SEC_ENG_SE_SHA_TRIG_1T_UMSK    (~(((1U << SEC_ENG_SE_SHA_TRIG_1T_LEN) - 1) << SEC_ENG_SE_SHA_TRIG_1T_POS))\n#define SEC_ENG_SE_SHA_MODE            SEC_ENG_SE_SHA_MODE\n#define SEC_ENG_SE_SHA_MODE_POS        (2U)\n#define SEC_ENG_SE_SHA_MODE_LEN        (3U)\n#define SEC_ENG_SE_SHA_MODE_MSK        (((1U << SEC_ENG_SE_SHA_MODE_LEN) - 1) << SEC_ENG_SE_SHA_MODE_POS)\n#define SEC_ENG_SE_SHA_MODE_UMSK       (~(((1U << SEC_ENG_SE_SHA_MODE_LEN) - 1) << SEC_ENG_SE_SHA_MODE_POS))\n#define SEC_ENG_SE_SHA_EN              SEC_ENG_SE_SHA_EN\n#define SEC_ENG_SE_SHA_EN_POS          (5U)\n#define SEC_ENG_SE_SHA_EN_LEN          (1U)\n#define SEC_ENG_SE_SHA_EN_MSK          (((1U << SEC_ENG_SE_SHA_EN_LEN) - 1) << SEC_ENG_SE_SHA_EN_POS)\n#define SEC_ENG_SE_SHA_EN_UMSK         (~(((1U << SEC_ENG_SE_SHA_EN_LEN) - 1) << SEC_ENG_SE_SHA_EN_POS))\n#define SEC_ENG_SE_SHA_HASH_SEL        SEC_ENG_SE_SHA_HASH_SEL\n#define SEC_ENG_SE_SHA_HASH_SEL_POS    (6U)\n#define SEC_ENG_SE_SHA_HASH_SEL_LEN    (1U)\n#define SEC_ENG_SE_SHA_HASH_SEL_MSK    (((1U << SEC_ENG_SE_SHA_HASH_SEL_LEN) - 1) << SEC_ENG_SE_SHA_HASH_SEL_POS)\n#define SEC_ENG_SE_SHA_HASH_SEL_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_SEL_LEN) - 1) << SEC_ENG_SE_SHA_HASH_SEL_POS))\n#define SEC_ENG_SE_SHA_INT             SEC_ENG_SE_SHA_INT\n#define SEC_ENG_SE_SHA_INT_POS         (8U)\n#define SEC_ENG_SE_SHA_INT_LEN         (1U)\n#define SEC_ENG_SE_SHA_INT_MSK         (((1U << SEC_ENG_SE_SHA_INT_LEN) - 1) << SEC_ENG_SE_SHA_INT_POS)\n#define SEC_ENG_SE_SHA_INT_UMSK        (~(((1U << SEC_ENG_SE_SHA_INT_LEN) - 1) << SEC_ENG_SE_SHA_INT_POS))\n#define SEC_ENG_SE_SHA_INT_CLR_1T      SEC_ENG_SE_SHA_INT_CLR_1T\n#define SEC_ENG_SE_SHA_INT_CLR_1T_POS  (9U)\n#define SEC_ENG_SE_SHA_INT_CLR_1T_LEN  (1U)\n#define SEC_ENG_SE_SHA_INT_CLR_1T_MSK  (((1U << SEC_ENG_SE_SHA_INT_CLR_1T_LEN) - 1) << SEC_ENG_SE_SHA_INT_CLR_1T_POS)\n#define SEC_ENG_SE_SHA_INT_CLR_1T_UMSK (~(((1U << SEC_ENG_SE_SHA_INT_CLR_1T_LEN) - 1) << SEC_ENG_SE_SHA_INT_CLR_1T_POS))\n#define SEC_ENG_SE_SHA_INT_SET_1T      SEC_ENG_SE_SHA_INT_SET_1T\n#define SEC_ENG_SE_SHA_INT_SET_1T_POS  (10U)\n#define SEC_ENG_SE_SHA_INT_SET_1T_LEN  (1U)\n#define SEC_ENG_SE_SHA_INT_SET_1T_MSK  (((1U << SEC_ENG_SE_SHA_INT_SET_1T_LEN) - 1) << SEC_ENG_SE_SHA_INT_SET_1T_POS)\n#define SEC_ENG_SE_SHA_INT_SET_1T_UMSK (~(((1U << SEC_ENG_SE_SHA_INT_SET_1T_LEN) - 1) << SEC_ENG_SE_SHA_INT_SET_1T_POS))\n#define SEC_ENG_SE_SHA_INT_MASK        SEC_ENG_SE_SHA_INT_MASK\n#define SEC_ENG_SE_SHA_INT_MASK_POS    (11U)\n#define SEC_ENG_SE_SHA_INT_MASK_LEN    (1U)\n#define SEC_ENG_SE_SHA_INT_MASK_MSK    (((1U << SEC_ENG_SE_SHA_INT_MASK_LEN) - 1) << SEC_ENG_SE_SHA_INT_MASK_POS)\n#define SEC_ENG_SE_SHA_INT_MASK_UMSK   (~(((1U << SEC_ENG_SE_SHA_INT_MASK_LEN) - 1) << SEC_ENG_SE_SHA_INT_MASK_POS))\n#define SEC_ENG_SE_SHA_LINK_MODE       SEC_ENG_SE_SHA_LINK_MODE\n#define SEC_ENG_SE_SHA_LINK_MODE_POS   (15U)\n#define SEC_ENG_SE_SHA_LINK_MODE_LEN   (1U)\n#define SEC_ENG_SE_SHA_LINK_MODE_MSK   (((1U << SEC_ENG_SE_SHA_LINK_MODE_LEN) - 1) << SEC_ENG_SE_SHA_LINK_MODE_POS)\n#define SEC_ENG_SE_SHA_LINK_MODE_UMSK  (~(((1U << SEC_ENG_SE_SHA_LINK_MODE_LEN) - 1) << SEC_ENG_SE_SHA_LINK_MODE_POS))\n#define SEC_ENG_SE_SHA_MSG_LEN         SEC_ENG_SE_SHA_MSG_LEN\n#define SEC_ENG_SE_SHA_MSG_LEN_POS     (16U)\n#define SEC_ENG_SE_SHA_MSG_LEN_LEN     (16U)\n#define SEC_ENG_SE_SHA_MSG_LEN_MSK     (((1U << SEC_ENG_SE_SHA_MSG_LEN_LEN) - 1) << SEC_ENG_SE_SHA_MSG_LEN_POS)\n#define SEC_ENG_SE_SHA_MSG_LEN_UMSK    (~(((1U << SEC_ENG_SE_SHA_MSG_LEN_LEN) - 1) << SEC_ENG_SE_SHA_MSG_LEN_POS))\n\n/* 0x4 : se_sha_msa */\n#define SEC_ENG_SE_SHA_MSA_OFFSET (0x4)\n#define SEC_ENG_SE_SHA_MSA        SEC_ENG_SE_SHA_MSA\n#define SEC_ENG_SE_SHA_MSA_POS    (0U)\n#define SEC_ENG_SE_SHA_MSA_LEN    (32U)\n#define SEC_ENG_SE_SHA_MSA_MSK    (((1U << SEC_ENG_SE_SHA_MSA_LEN) - 1) << SEC_ENG_SE_SHA_MSA_POS)\n#define SEC_ENG_SE_SHA_MSA_UMSK   (~(((1U << SEC_ENG_SE_SHA_MSA_LEN) - 1) << SEC_ENG_SE_SHA_MSA_POS))\n\n/* 0x8 : se_sha_status */\n#define SEC_ENG_SE_SHA_STATUS_OFFSET (0x8)\n#define SEC_ENG_SE_SHA_STATUS        SEC_ENG_SE_SHA_STATUS\n#define SEC_ENG_SE_SHA_STATUS_POS    (0U)\n#define SEC_ENG_SE_SHA_STATUS_LEN    (32U)\n#define SEC_ENG_SE_SHA_STATUS_MSK    (((1U << SEC_ENG_SE_SHA_STATUS_LEN) - 1) << SEC_ENG_SE_SHA_STATUS_POS)\n#define SEC_ENG_SE_SHA_STATUS_UMSK   (~(((1U << SEC_ENG_SE_SHA_STATUS_LEN) - 1) << SEC_ENG_SE_SHA_STATUS_POS))\n\n/* 0xc : se_sha_endian */\n#define SEC_ENG_SE_SHA_ENDIAN_OFFSET    (0xc)\n#define SEC_ENG_SE_SHA_DOUT_ENDIAN      SEC_ENG_SE_SHA_DOUT_ENDIAN\n#define SEC_ENG_SE_SHA_DOUT_ENDIAN_POS  (0U)\n#define SEC_ENG_SE_SHA_DOUT_ENDIAN_LEN  (1U)\n#define SEC_ENG_SE_SHA_DOUT_ENDIAN_MSK  (((1U << SEC_ENG_SE_SHA_DOUT_ENDIAN_LEN) - 1) << SEC_ENG_SE_SHA_DOUT_ENDIAN_POS)\n#define SEC_ENG_SE_SHA_DOUT_ENDIAN_UMSK (~(((1U << SEC_ENG_SE_SHA_DOUT_ENDIAN_LEN) - 1) << SEC_ENG_SE_SHA_DOUT_ENDIAN_POS))\n\n/* 0x10 : se_sha_hash_l_0 */\n#define SEC_ENG_SE_SHA_HASH_L_0_OFFSET (0x10)\n#define SEC_ENG_SE_SHA_HASH_L_0        SEC_ENG_SE_SHA_HASH_L_0\n#define SEC_ENG_SE_SHA_HASH_L_0_POS    (0U)\n#define SEC_ENG_SE_SHA_HASH_L_0_LEN    (32U)\n#define SEC_ENG_SE_SHA_HASH_L_0_MSK    (((1U << SEC_ENG_SE_SHA_HASH_L_0_LEN) - 1) << SEC_ENG_SE_SHA_HASH_L_0_POS)\n#define SEC_ENG_SE_SHA_HASH_L_0_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_L_0_LEN) - 1) << SEC_ENG_SE_SHA_HASH_L_0_POS))\n\n/* 0x14 : se_sha_hash_l_1 */\n#define SEC_ENG_SE_SHA_HASH_L_1_OFFSET (0x14)\n#define SEC_ENG_SE_SHA_HASH_L_1        SEC_ENG_SE_SHA_HASH_L_1\n#define SEC_ENG_SE_SHA_HASH_L_1_POS    (0U)\n#define SEC_ENG_SE_SHA_HASH_L_1_LEN    (32U)\n#define SEC_ENG_SE_SHA_HASH_L_1_MSK    (((1U << SEC_ENG_SE_SHA_HASH_L_1_LEN) - 1) << SEC_ENG_SE_SHA_HASH_L_1_POS)\n#define SEC_ENG_SE_SHA_HASH_L_1_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_L_1_LEN) - 1) << SEC_ENG_SE_SHA_HASH_L_1_POS))\n\n/* 0x18 : se_sha_hash_l_2 */\n#define SEC_ENG_SE_SHA_HASH_L_2_OFFSET (0x18)\n#define SEC_ENG_SE_SHA_HASH_L_2        SEC_ENG_SE_SHA_HASH_L_2\n#define SEC_ENG_SE_SHA_HASH_L_2_POS    (0U)\n#define SEC_ENG_SE_SHA_HASH_L_2_LEN    (32U)\n#define SEC_ENG_SE_SHA_HASH_L_2_MSK    (((1U << SEC_ENG_SE_SHA_HASH_L_2_LEN) - 1) << SEC_ENG_SE_SHA_HASH_L_2_POS)\n#define SEC_ENG_SE_SHA_HASH_L_2_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_L_2_LEN) - 1) << SEC_ENG_SE_SHA_HASH_L_2_POS))\n\n/* 0x1c : se_sha_hash_l_3 */\n#define SEC_ENG_SE_SHA_HASH_L_3_OFFSET (0x1c)\n#define SEC_ENG_SE_SHA_HASH_L_3        SEC_ENG_SE_SHA_HASH_L_3\n#define SEC_ENG_SE_SHA_HASH_L_3_POS    (0U)\n#define SEC_ENG_SE_SHA_HASH_L_3_LEN    (32U)\n#define SEC_ENG_SE_SHA_HASH_L_3_MSK    (((1U << SEC_ENG_SE_SHA_HASH_L_3_LEN) - 1) << SEC_ENG_SE_SHA_HASH_L_3_POS)\n#define SEC_ENG_SE_SHA_HASH_L_3_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_L_3_LEN) - 1) << SEC_ENG_SE_SHA_HASH_L_3_POS))\n\n/* 0x20 : se_sha_hash_l_4 */\n#define SEC_ENG_SE_SHA_HASH_L_4_OFFSET (0x20)\n#define SEC_ENG_SE_SHA_HASH_L_4        SEC_ENG_SE_SHA_HASH_L_4\n#define SEC_ENG_SE_SHA_HASH_L_4_POS    (0U)\n#define SEC_ENG_SE_SHA_HASH_L_4_LEN    (32U)\n#define SEC_ENG_SE_SHA_HASH_L_4_MSK    (((1U << SEC_ENG_SE_SHA_HASH_L_4_LEN) - 1) << SEC_ENG_SE_SHA_HASH_L_4_POS)\n#define SEC_ENG_SE_SHA_HASH_L_4_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_L_4_LEN) - 1) << SEC_ENG_SE_SHA_HASH_L_4_POS))\n\n/* 0x24 : se_sha_hash_l_5 */\n#define SEC_ENG_SE_SHA_HASH_L_5_OFFSET (0x24)\n#define SEC_ENG_SE_SHA_HASH_L_5        SEC_ENG_SE_SHA_HASH_L_5\n#define SEC_ENG_SE_SHA_HASH_L_5_POS    (0U)\n#define SEC_ENG_SE_SHA_HASH_L_5_LEN    (32U)\n#define SEC_ENG_SE_SHA_HASH_L_5_MSK    (((1U << SEC_ENG_SE_SHA_HASH_L_5_LEN) - 1) << SEC_ENG_SE_SHA_HASH_L_5_POS)\n#define SEC_ENG_SE_SHA_HASH_L_5_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_L_5_LEN) - 1) << SEC_ENG_SE_SHA_HASH_L_5_POS))\n\n/* 0x28 : se_sha_hash_l_6 */\n#define SEC_ENG_SE_SHA_HASH_L_6_OFFSET (0x28)\n#define SEC_ENG_SE_SHA_HASH_L_6        SEC_ENG_SE_SHA_HASH_L_6\n#define SEC_ENG_SE_SHA_HASH_L_6_POS    (0U)\n#define SEC_ENG_SE_SHA_HASH_L_6_LEN    (32U)\n#define SEC_ENG_SE_SHA_HASH_L_6_MSK    (((1U << SEC_ENG_SE_SHA_HASH_L_6_LEN) - 1) << SEC_ENG_SE_SHA_HASH_L_6_POS)\n#define SEC_ENG_SE_SHA_HASH_L_6_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_L_6_LEN) - 1) << SEC_ENG_SE_SHA_HASH_L_6_POS))\n\n/* 0x2c : se_sha_hash_l_7 */\n#define SEC_ENG_SE_SHA_HASH_L_7_OFFSET (0x2c)\n#define SEC_ENG_SE_SHA_HASH_L_7        SEC_ENG_SE_SHA_HASH_L_7\n#define SEC_ENG_SE_SHA_HASH_L_7_POS    (0U)\n#define SEC_ENG_SE_SHA_HASH_L_7_LEN    (32U)\n#define SEC_ENG_SE_SHA_HASH_L_7_MSK    (((1U << SEC_ENG_SE_SHA_HASH_L_7_LEN) - 1) << SEC_ENG_SE_SHA_HASH_L_7_POS)\n#define SEC_ENG_SE_SHA_HASH_L_7_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_L_7_LEN) - 1) << SEC_ENG_SE_SHA_HASH_L_7_POS))\n\n/* 0x30 : se_sha_hash_h_0 */\n#define SEC_ENG_SE_SHA_HASH_H_0_OFFSET (0x30)\n#define SEC_ENG_SE_SHA_HASH_H_0        SEC_ENG_SE_SHA_HASH_H_0\n#define SEC_ENG_SE_SHA_HASH_H_0_POS    (0U)\n#define SEC_ENG_SE_SHA_HASH_H_0_LEN    (32U)\n#define SEC_ENG_SE_SHA_HASH_H_0_MSK    (((1U << SEC_ENG_SE_SHA_HASH_H_0_LEN) - 1) << SEC_ENG_SE_SHA_HASH_H_0_POS)\n#define SEC_ENG_SE_SHA_HASH_H_0_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_H_0_LEN) - 1) << SEC_ENG_SE_SHA_HASH_H_0_POS))\n\n/* 0x34 : se_sha_hash_h_1 */\n#define SEC_ENG_SE_SHA_HASH_H_1_OFFSET (0x34)\n#define SEC_ENG_SE_SHA_HASH_H_1        SEC_ENG_SE_SHA_HASH_H_1\n#define SEC_ENG_SE_SHA_HASH_H_1_POS    (0U)\n#define SEC_ENG_SE_SHA_HASH_H_1_LEN    (32U)\n#define SEC_ENG_SE_SHA_HASH_H_1_MSK    (((1U << SEC_ENG_SE_SHA_HASH_H_1_LEN) - 1) << SEC_ENG_SE_SHA_HASH_H_1_POS)\n#define SEC_ENG_SE_SHA_HASH_H_1_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_H_1_LEN) - 1) << SEC_ENG_SE_SHA_HASH_H_1_POS))\n\n/* 0x38 : se_sha_hash_h_2 */\n#define SEC_ENG_SE_SHA_HASH_H_2_OFFSET (0x38)\n#define SEC_ENG_SE_SHA_HASH_H_2        SEC_ENG_SE_SHA_HASH_H_2\n#define SEC_ENG_SE_SHA_HASH_H_2_POS    (0U)\n#define SEC_ENG_SE_SHA_HASH_H_2_LEN    (32U)\n#define SEC_ENG_SE_SHA_HASH_H_2_MSK    (((1U << SEC_ENG_SE_SHA_HASH_H_2_LEN) - 1) << SEC_ENG_SE_SHA_HASH_H_2_POS)\n#define SEC_ENG_SE_SHA_HASH_H_2_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_H_2_LEN) - 1) << SEC_ENG_SE_SHA_HASH_H_2_POS))\n\n/* 0x3c : se_sha_hash_h_3 */\n#define SEC_ENG_SE_SHA_HASH_H_3_OFFSET (0x3c)\n#define SEC_ENG_SE_SHA_HASH_H_3        SEC_ENG_SE_SHA_HASH_H_3\n#define SEC_ENG_SE_SHA_HASH_H_3_POS    (0U)\n#define SEC_ENG_SE_SHA_HASH_H_3_LEN    (32U)\n#define SEC_ENG_SE_SHA_HASH_H_3_MSK    (((1U << SEC_ENG_SE_SHA_HASH_H_3_LEN) - 1) << SEC_ENG_SE_SHA_HASH_H_3_POS)\n#define SEC_ENG_SE_SHA_HASH_H_3_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_H_3_LEN) - 1) << SEC_ENG_SE_SHA_HASH_H_3_POS))\n\n/* 0x40 : se_sha_hash_h_4 */\n#define SEC_ENG_SE_SHA_HASH_H_4_OFFSET (0x40)\n#define SEC_ENG_SE_SHA_HASH_H_4        SEC_ENG_SE_SHA_HASH_H_4\n#define SEC_ENG_SE_SHA_HASH_H_4_POS    (0U)\n#define SEC_ENG_SE_SHA_HASH_H_4_LEN    (32U)\n#define SEC_ENG_SE_SHA_HASH_H_4_MSK    (((1U << SEC_ENG_SE_SHA_HASH_H_4_LEN) - 1) << SEC_ENG_SE_SHA_HASH_H_4_POS)\n#define SEC_ENG_SE_SHA_HASH_H_4_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_H_4_LEN) - 1) << SEC_ENG_SE_SHA_HASH_H_4_POS))\n\n/* 0x44 : se_sha_hash_h_5 */\n#define SEC_ENG_SE_SHA_HASH_H_5_OFFSET (0x44)\n#define SEC_ENG_SE_SHA_HASH_H_5        SEC_ENG_SE_SHA_HASH_H_5\n#define SEC_ENG_SE_SHA_HASH_H_5_POS    (0U)\n#define SEC_ENG_SE_SHA_HASH_H_5_LEN    (32U)\n#define SEC_ENG_SE_SHA_HASH_H_5_MSK    (((1U << SEC_ENG_SE_SHA_HASH_H_5_LEN) - 1) << SEC_ENG_SE_SHA_HASH_H_5_POS)\n#define SEC_ENG_SE_SHA_HASH_H_5_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_H_5_LEN) - 1) << SEC_ENG_SE_SHA_HASH_H_5_POS))\n\n/* 0x48 : se_sha_hash_h_6 */\n#define SEC_ENG_SE_SHA_HASH_H_6_OFFSET (0x48)\n#define SEC_ENG_SE_SHA_HASH_H_6        SEC_ENG_SE_SHA_HASH_H_6\n#define SEC_ENG_SE_SHA_HASH_H_6_POS    (0U)\n#define SEC_ENG_SE_SHA_HASH_H_6_LEN    (32U)\n#define SEC_ENG_SE_SHA_HASH_H_6_MSK    (((1U << SEC_ENG_SE_SHA_HASH_H_6_LEN) - 1) << SEC_ENG_SE_SHA_HASH_H_6_POS)\n#define SEC_ENG_SE_SHA_HASH_H_6_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_H_6_LEN) - 1) << SEC_ENG_SE_SHA_HASH_H_6_POS))\n\n/* 0x4c : se_sha_hash_h_7 */\n#define SEC_ENG_SE_SHA_HASH_H_7_OFFSET (0x4c)\n#define SEC_ENG_SE_SHA_HASH_H_7        SEC_ENG_SE_SHA_HASH_H_7\n#define SEC_ENG_SE_SHA_HASH_H_7_POS    (0U)\n#define SEC_ENG_SE_SHA_HASH_H_7_LEN    (32U)\n#define SEC_ENG_SE_SHA_HASH_H_7_MSK    (((1U << SEC_ENG_SE_SHA_HASH_H_7_LEN) - 1) << SEC_ENG_SE_SHA_HASH_H_7_POS)\n#define SEC_ENG_SE_SHA_HASH_H_7_UMSK   (~(((1U << SEC_ENG_SE_SHA_HASH_H_7_LEN) - 1) << SEC_ENG_SE_SHA_HASH_H_7_POS))\n\n/* 0x50 : se_sha_link */\n#define SEC_ENG_SE_SHA_LINK_OFFSET (0x50)\n#define SEC_ENG_SE_SHA_LCA         SEC_ENG_SE_SHA_LCA\n#define SEC_ENG_SE_SHA_LCA_POS     (0U)\n#define SEC_ENG_SE_SHA_LCA_LEN     (32U)\n#define SEC_ENG_SE_SHA_LCA_MSK     (((1U << SEC_ENG_SE_SHA_LCA_LEN) - 1) << SEC_ENG_SE_SHA_LCA_POS)\n#define SEC_ENG_SE_SHA_LCA_UMSK    (~(((1U << SEC_ENG_SE_SHA_LCA_LEN) - 1) << SEC_ENG_SE_SHA_LCA_POS))\n\n/* 0xfc : se_sha_ctrl_prot */\n#define SEC_ENG_SE_SHA_CTRL_PROT_OFFSET (0xfc)\n#define SEC_ENG_SE_SHA_PROT_EN          SEC_ENG_SE_SHA_PROT_EN\n#define SEC_ENG_SE_SHA_PROT_EN_POS      (0U)\n#define SEC_ENG_SE_SHA_PROT_EN_LEN      (1U)\n#define SEC_ENG_SE_SHA_PROT_EN_MSK      (((1U << SEC_ENG_SE_SHA_PROT_EN_LEN) - 1) << SEC_ENG_SE_SHA_PROT_EN_POS)\n#define SEC_ENG_SE_SHA_PROT_EN_UMSK     (~(((1U << SEC_ENG_SE_SHA_PROT_EN_LEN) - 1) << SEC_ENG_SE_SHA_PROT_EN_POS))\n#define SEC_ENG_SE_SHA_ID0_EN           SEC_ENG_SE_SHA_ID0_EN\n#define SEC_ENG_SE_SHA_ID0_EN_POS       (1U)\n#define SEC_ENG_SE_SHA_ID0_EN_LEN       (1U)\n#define SEC_ENG_SE_SHA_ID0_EN_MSK       (((1U << SEC_ENG_SE_SHA_ID0_EN_LEN) - 1) << SEC_ENG_SE_SHA_ID0_EN_POS)\n#define SEC_ENG_SE_SHA_ID0_EN_UMSK      (~(((1U << SEC_ENG_SE_SHA_ID0_EN_LEN) - 1) << SEC_ENG_SE_SHA_ID0_EN_POS))\n#define SEC_ENG_SE_SHA_ID1_EN           SEC_ENG_SE_SHA_ID1_EN\n#define SEC_ENG_SE_SHA_ID1_EN_POS       (2U)\n#define SEC_ENG_SE_SHA_ID1_EN_LEN       (1U)\n#define SEC_ENG_SE_SHA_ID1_EN_MSK       (((1U << SEC_ENG_SE_SHA_ID1_EN_LEN) - 1) << SEC_ENG_SE_SHA_ID1_EN_POS)\n#define SEC_ENG_SE_SHA_ID1_EN_UMSK      (~(((1U << SEC_ENG_SE_SHA_ID1_EN_LEN) - 1) << SEC_ENG_SE_SHA_ID1_EN_POS))\n\nstruct sec_eng_sha_reg {\n    /* 0x0 : se_sha_ctrl */\n    union {\n        struct\n        {\n            uint32_t se_sha_busy       : 1;  /* [    0],          r,        0x0 */\n            uint32_t se_sha_trig_1t    : 1;  /* [    1],        w1p,        0x0 */\n            uint32_t se_sha_mode       : 3;  /* [ 4: 2],        r/w,        0x0 */\n            uint32_t se_sha_en         : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t se_sha_hash_sel   : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t reserved_7        : 1;  /* [    7],       rsvd,        0x0 */\n            uint32_t se_sha_int        : 1;  /* [    8],          r,        0x0 */\n            uint32_t se_sha_int_clr_1t : 1;  /* [    9],        w1p,        0x0 */\n            uint32_t se_sha_int_set_1t : 1;  /* [   10],        w1p,        0x0 */\n            uint32_t se_sha_int_mask   : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t reserved_12_14    : 3;  /* [14:12],       rsvd,        0x0 */\n            uint32_t se_sha_link_mode  : 1;  /* [   15],        r/w,        0x0 */\n            uint32_t se_sha_msg_len    : 16; /* [31:16],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_ctrl;\n\n    /* 0x4 : se_sha_msa */\n    union {\n        struct\n        {\n            uint32_t se_sha_msa : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_msa;\n\n    /* 0x8 : se_sha_status */\n    union {\n        struct\n        {\n            uint32_t se_sha_status : 32; /* [31: 0],          r,       0x41 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_status;\n\n    /* 0xc : se_sha_endian */\n    union {\n        struct\n        {\n            uint32_t se_sha_dout_endian : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t reserved_1_31      : 31; /* [31: 1],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_endian;\n\n    /* 0x10 : se_sha_hash_l_0 */\n    union {\n        struct\n        {\n            uint32_t se_sha_hash_l_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_hash_l_0;\n\n    /* 0x14 : se_sha_hash_l_1 */\n    union {\n        struct\n        {\n            uint32_t se_sha_hash_l_1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_hash_l_1;\n\n    /* 0x18 : se_sha_hash_l_2 */\n    union {\n        struct\n        {\n            uint32_t se_sha_hash_l_2 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_hash_l_2;\n\n    /* 0x1c : se_sha_hash_l_3 */\n    union {\n        struct\n        {\n            uint32_t se_sha_hash_l_3 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_hash_l_3;\n\n    /* 0x20 : se_sha_hash_l_4 */\n    union {\n        struct\n        {\n            uint32_t se_sha_hash_l_4 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_hash_l_4;\n\n    /* 0x24 : se_sha_hash_l_5 */\n    union {\n        struct\n        {\n            uint32_t se_sha_hash_l_5 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_hash_l_5;\n\n    /* 0x28 : se_sha_hash_l_6 */\n    union {\n        struct\n        {\n            uint32_t se_sha_hash_l_6 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_hash_l_6;\n\n    /* 0x2c : se_sha_hash_l_7 */\n    union {\n        struct\n        {\n            uint32_t se_sha_hash_l_7 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_hash_l_7;\n\n    /* 0x30 : se_sha_hash_h_0 */\n    union {\n        struct\n        {\n            uint32_t se_sha_hash_h_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_hash_h_0;\n\n    /* 0x34 : se_sha_hash_h_1 */\n    union {\n        struct\n        {\n            uint32_t se_sha_hash_h_1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_hash_h_1;\n\n    /* 0x38 : se_sha_hash_h_2 */\n    union {\n        struct\n        {\n            uint32_t se_sha_hash_h_2 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_hash_h_2;\n\n    /* 0x3c : se_sha_hash_h_3 */\n    union {\n        struct\n        {\n            uint32_t se_sha_hash_h_3 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_hash_h_3;\n\n    /* 0x40 : se_sha_hash_h_4 */\n    union {\n        struct\n        {\n            uint32_t se_sha_hash_h_4 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_hash_h_4;\n\n    /* 0x44 : se_sha_hash_h_5 */\n    union {\n        struct\n        {\n            uint32_t se_sha_hash_h_5 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_hash_h_5;\n\n    /* 0x48 : se_sha_hash_h_6 */\n    union {\n        struct\n        {\n            uint32_t se_sha_hash_h_6 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_hash_h_6;\n\n    /* 0x4c : se_sha_hash_h_7 */\n    union {\n        struct\n        {\n            uint32_t se_sha_hash_h_7 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_hash_h_7;\n\n    /* 0x50 : se_sha_link */\n    union {\n        struct\n        {\n            uint32_t se_sha_lca : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_link;\n\n    /* 0x54  reserved */\n    uint8_t RESERVED0x54[168];\n\n    /* 0xfc : se_sha_ctrl_prot */\n    union {\n        struct\n        {\n            uint32_t se_sha_prot_en : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t se_sha_id0_en  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t se_sha_id1_en  : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t reserved_3_31  : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_sha_ctrl_prot;\n};\n\ntypedef volatile struct sec_eng_sha_reg sec_eng_sha_reg_t;\n\n#define SEC_ENG_SHA_OFFSET 0x000\n\n/*Following is reg patch*/\n\n/* 0x0 : se_aes_ctrl */\n#define SEC_ENG_SE_AES_CTRL_OFFSET      (0x0)\n#define SEC_ENG_SE_AES_BUSY             SEC_ENG_SE_AES_BUSY\n#define SEC_ENG_SE_AES_BUSY_POS         (0U)\n#define SEC_ENG_SE_AES_BUSY_LEN         (1U)\n#define SEC_ENG_SE_AES_BUSY_MSK         (((1U << SEC_ENG_SE_AES_BUSY_LEN) - 1) << SEC_ENG_SE_AES_BUSY_POS)\n#define SEC_ENG_SE_AES_BUSY_UMSK        (~(((1U << SEC_ENG_SE_AES_BUSY_LEN) - 1) << SEC_ENG_SE_AES_BUSY_POS))\n#define SEC_ENG_SE_AES_TRIG_1T          SEC_ENG_SE_AES_TRIG_1T\n#define SEC_ENG_SE_AES_TRIG_1T_POS      (1U)\n#define SEC_ENG_SE_AES_TRIG_1T_LEN      (1U)\n#define SEC_ENG_SE_AES_TRIG_1T_MSK      (((1U << SEC_ENG_SE_AES_TRIG_1T_LEN) - 1) << SEC_ENG_SE_AES_TRIG_1T_POS)\n#define SEC_ENG_SE_AES_TRIG_1T_UMSK     (~(((1U << SEC_ENG_SE_AES_TRIG_1T_LEN) - 1) << SEC_ENG_SE_AES_TRIG_1T_POS))\n#define SEC_ENG_SE_AES_EN               SEC_ENG_SE_AES_EN\n#define SEC_ENG_SE_AES_EN_POS           (2U)\n#define SEC_ENG_SE_AES_EN_LEN           (1U)\n#define SEC_ENG_SE_AES_EN_MSK           (((1U << SEC_ENG_SE_AES_EN_LEN) - 1) << SEC_ENG_SE_AES_EN_POS)\n#define SEC_ENG_SE_AES_EN_UMSK          (~(((1U << SEC_ENG_SE_AES_EN_LEN) - 1) << SEC_ENG_SE_AES_EN_POS))\n#define SEC_ENG_SE_AES_MODE             SEC_ENG_SE_AES_MODE\n#define SEC_ENG_SE_AES_MODE_POS         (3U)\n#define SEC_ENG_SE_AES_MODE_LEN         (2U)\n#define SEC_ENG_SE_AES_MODE_MSK         (((1U << SEC_ENG_SE_AES_MODE_LEN) - 1) << SEC_ENG_SE_AES_MODE_POS)\n#define SEC_ENG_SE_AES_MODE_UMSK        (~(((1U << SEC_ENG_SE_AES_MODE_LEN) - 1) << SEC_ENG_SE_AES_MODE_POS))\n#define SEC_ENG_SE_AES_DEC_EN           SEC_ENG_SE_AES_DEC_EN\n#define SEC_ENG_SE_AES_DEC_EN_POS       (5U)\n#define SEC_ENG_SE_AES_DEC_EN_LEN       (1U)\n#define SEC_ENG_SE_AES_DEC_EN_MSK       (((1U << SEC_ENG_SE_AES_DEC_EN_LEN) - 1) << SEC_ENG_SE_AES_DEC_EN_POS)\n#define SEC_ENG_SE_AES_DEC_EN_UMSK      (~(((1U << SEC_ENG_SE_AES_DEC_EN_LEN) - 1) << SEC_ENG_SE_AES_DEC_EN_POS))\n#define SEC_ENG_SE_AES_DEC_KEY_SEL      SEC_ENG_SE_AES_DEC_KEY_SEL\n#define SEC_ENG_SE_AES_DEC_KEY_SEL_POS  (6U)\n#define SEC_ENG_SE_AES_DEC_KEY_SEL_LEN  (1U)\n#define SEC_ENG_SE_AES_DEC_KEY_SEL_MSK  (((1U << SEC_ENG_SE_AES_DEC_KEY_SEL_LEN) - 1) << SEC_ENG_SE_AES_DEC_KEY_SEL_POS)\n#define SEC_ENG_SE_AES_DEC_KEY_SEL_UMSK (~(((1U << SEC_ENG_SE_AES_DEC_KEY_SEL_LEN) - 1) << SEC_ENG_SE_AES_DEC_KEY_SEL_POS))\n#define SEC_ENG_SE_AES_HW_KEY_EN        SEC_ENG_SE_AES_HW_KEY_EN\n#define SEC_ENG_SE_AES_HW_KEY_EN_POS    (7U)\n#define SEC_ENG_SE_AES_HW_KEY_EN_LEN    (1U)\n#define SEC_ENG_SE_AES_HW_KEY_EN_MSK    (((1U << SEC_ENG_SE_AES_HW_KEY_EN_LEN) - 1) << SEC_ENG_SE_AES_HW_KEY_EN_POS)\n#define SEC_ENG_SE_AES_HW_KEY_EN_UMSK   (~(((1U << SEC_ENG_SE_AES_HW_KEY_EN_LEN) - 1) << SEC_ENG_SE_AES_HW_KEY_EN_POS))\n#define SEC_ENG_SE_AES_INT              SEC_ENG_SE_AES_INT\n#define SEC_ENG_SE_AES_INT_POS          (8U)\n#define SEC_ENG_SE_AES_INT_LEN          (1U)\n#define SEC_ENG_SE_AES_INT_MSK          (((1U << SEC_ENG_SE_AES_INT_LEN) - 1) << SEC_ENG_SE_AES_INT_POS)\n#define SEC_ENG_SE_AES_INT_UMSK         (~(((1U << SEC_ENG_SE_AES_INT_LEN) - 1) << SEC_ENG_SE_AES_INT_POS))\n#define SEC_ENG_SE_AES_INT_CLR_1T       SEC_ENG_SE_AES_INT_CLR_1T\n#define SEC_ENG_SE_AES_INT_CLR_1T_POS   (9U)\n#define SEC_ENG_SE_AES_INT_CLR_1T_LEN   (1U)\n#define SEC_ENG_SE_AES_INT_CLR_1T_MSK   (((1U << SEC_ENG_SE_AES_INT_CLR_1T_LEN) - 1) << SEC_ENG_SE_AES_INT_CLR_1T_POS)\n#define SEC_ENG_SE_AES_INT_CLR_1T_UMSK  (~(((1U << SEC_ENG_SE_AES_INT_CLR_1T_LEN) - 1) << SEC_ENG_SE_AES_INT_CLR_1T_POS))\n#define SEC_ENG_SE_AES_INT_SET_1T       SEC_ENG_SE_AES_INT_SET_1T\n#define SEC_ENG_SE_AES_INT_SET_1T_POS   (10U)\n#define SEC_ENG_SE_AES_INT_SET_1T_LEN   (1U)\n#define SEC_ENG_SE_AES_INT_SET_1T_MSK   (((1U << SEC_ENG_SE_AES_INT_SET_1T_LEN) - 1) << SEC_ENG_SE_AES_INT_SET_1T_POS)\n#define SEC_ENG_SE_AES_INT_SET_1T_UMSK  (~(((1U << SEC_ENG_SE_AES_INT_SET_1T_LEN) - 1) << SEC_ENG_SE_AES_INT_SET_1T_POS))\n#define SEC_ENG_SE_AES_INT_MASK         SEC_ENG_SE_AES_INT_MASK\n#define SEC_ENG_SE_AES_INT_MASK_POS     (11U)\n#define SEC_ENG_SE_AES_INT_MASK_LEN     (1U)\n#define SEC_ENG_SE_AES_INT_MASK_MSK     (((1U << SEC_ENG_SE_AES_INT_MASK_LEN) - 1) << SEC_ENG_SE_AES_INT_MASK_POS)\n#define SEC_ENG_SE_AES_INT_MASK_UMSK    (~(((1U << SEC_ENG_SE_AES_INT_MASK_LEN) - 1) << SEC_ENG_SE_AES_INT_MASK_POS))\n#define SEC_ENG_SE_AES_BLOCK_MODE       SEC_ENG_SE_AES_BLOCK_MODE\n#define SEC_ENG_SE_AES_BLOCK_MODE_POS   (12U)\n#define SEC_ENG_SE_AES_BLOCK_MODE_LEN   (2U)\n#define SEC_ENG_SE_AES_BLOCK_MODE_MSK   (((1U << SEC_ENG_SE_AES_BLOCK_MODE_LEN) - 1) << SEC_ENG_SE_AES_BLOCK_MODE_POS)\n#define SEC_ENG_SE_AES_BLOCK_MODE_UMSK  (~(((1U << SEC_ENG_SE_AES_BLOCK_MODE_LEN) - 1) << SEC_ENG_SE_AES_BLOCK_MODE_POS))\n#define SEC_ENG_SE_AES_IV_SEL           SEC_ENG_SE_AES_IV_SEL\n#define SEC_ENG_SE_AES_IV_SEL_POS       (14U)\n#define SEC_ENG_SE_AES_IV_SEL_LEN       (1U)\n#define SEC_ENG_SE_AES_IV_SEL_MSK       (((1U << SEC_ENG_SE_AES_IV_SEL_LEN) - 1) << SEC_ENG_SE_AES_IV_SEL_POS)\n#define SEC_ENG_SE_AES_IV_SEL_UMSK      (~(((1U << SEC_ENG_SE_AES_IV_SEL_LEN) - 1) << SEC_ENG_SE_AES_IV_SEL_POS))\n#define SEC_ENG_SE_AES_LINK_MODE        SEC_ENG_SE_AES_LINK_MODE\n#define SEC_ENG_SE_AES_LINK_MODE_POS    (15U)\n#define SEC_ENG_SE_AES_LINK_MODE_LEN    (1U)\n#define SEC_ENG_SE_AES_LINK_MODE_MSK    (((1U << SEC_ENG_SE_AES_LINK_MODE_LEN) - 1) << SEC_ENG_SE_AES_LINK_MODE_POS)\n#define SEC_ENG_SE_AES_LINK_MODE_UMSK   (~(((1U << SEC_ENG_SE_AES_LINK_MODE_LEN) - 1) << SEC_ENG_SE_AES_LINK_MODE_POS))\n#define SEC_ENG_SE_AES_MSG_LEN          SEC_ENG_SE_AES_MSG_LEN\n#define SEC_ENG_SE_AES_MSG_LEN_POS      (16U)\n#define SEC_ENG_SE_AES_MSG_LEN_LEN      (16U)\n#define SEC_ENG_SE_AES_MSG_LEN_MSK      (((1U << SEC_ENG_SE_AES_MSG_LEN_LEN) - 1) << SEC_ENG_SE_AES_MSG_LEN_POS)\n#define SEC_ENG_SE_AES_MSG_LEN_UMSK     (~(((1U << SEC_ENG_SE_AES_MSG_LEN_LEN) - 1) << SEC_ENG_SE_AES_MSG_LEN_POS))\n\n/* 0x4 : se_aes_msa */\n#define SEC_ENG_SE_AES_MSA_OFFSET (0x4)\n#define SEC_ENG_SE_AES_MSA        SEC_ENG_SE_AES_MSA\n#define SEC_ENG_SE_AES_MSA_POS    (0U)\n#define SEC_ENG_SE_AES_MSA_LEN    (32U)\n#define SEC_ENG_SE_AES_MSA_MSK    (((1U << SEC_ENG_SE_AES_MSA_LEN) - 1) << SEC_ENG_SE_AES_MSA_POS)\n#define SEC_ENG_SE_AES_MSA_UMSK   (~(((1U << SEC_ENG_SE_AES_MSA_LEN) - 1) << SEC_ENG_SE_AES_MSA_POS))\n\n/* 0x8 : se_aes_mda */\n#define SEC_ENG_SE_AES_MDA_OFFSET (0x8)\n#define SEC_ENG_SE_AES_MDA        SEC_ENG_SE_AES_MDA\n#define SEC_ENG_SE_AES_MDA_POS    (0U)\n#define SEC_ENG_SE_AES_MDA_LEN    (32U)\n#define SEC_ENG_SE_AES_MDA_MSK    (((1U << SEC_ENG_SE_AES_MDA_LEN) - 1) << SEC_ENG_SE_AES_MDA_POS)\n#define SEC_ENG_SE_AES_MDA_UMSK   (~(((1U << SEC_ENG_SE_AES_MDA_LEN) - 1) << SEC_ENG_SE_AES_MDA_POS))\n\n/* 0xc : se_aes_status */\n#define SEC_ENG_SE_AES_STATUS_OFFSET (0xc)\n#define SEC_ENG_SE_AES_STATUS        SEC_ENG_SE_AES_STATUS\n#define SEC_ENG_SE_AES_STATUS_POS    (0U)\n#define SEC_ENG_SE_AES_STATUS_LEN    (32U)\n#define SEC_ENG_SE_AES_STATUS_MSK    (((1U << SEC_ENG_SE_AES_STATUS_LEN) - 1) << SEC_ENG_SE_AES_STATUS_POS)\n#define SEC_ENG_SE_AES_STATUS_UMSK   (~(((1U << SEC_ENG_SE_AES_STATUS_LEN) - 1) << SEC_ENG_SE_AES_STATUS_POS))\n\n/* 0x10 : se_aes_iv_0 */\n#define SEC_ENG_SE_AES_IV_0_OFFSET (0x10)\n#define SEC_ENG_SE_AES_IV_0        SEC_ENG_SE_AES_IV_0\n#define SEC_ENG_SE_AES_IV_0_POS    (0U)\n#define SEC_ENG_SE_AES_IV_0_LEN    (32U)\n#define SEC_ENG_SE_AES_IV_0_MSK    (((1U << SEC_ENG_SE_AES_IV_0_LEN) - 1) << SEC_ENG_SE_AES_IV_0_POS)\n#define SEC_ENG_SE_AES_IV_0_UMSK   (~(((1U << SEC_ENG_SE_AES_IV_0_LEN) - 1) << SEC_ENG_SE_AES_IV_0_POS))\n\n/* 0x14 : se_aes_iv_1 */\n#define SEC_ENG_SE_AES_IV_1_OFFSET (0x14)\n#define SEC_ENG_SE_AES_IV_1        SEC_ENG_SE_AES_IV_1\n#define SEC_ENG_SE_AES_IV_1_POS    (0U)\n#define SEC_ENG_SE_AES_IV_1_LEN    (32U)\n#define SEC_ENG_SE_AES_IV_1_MSK    (((1U << SEC_ENG_SE_AES_IV_1_LEN) - 1) << SEC_ENG_SE_AES_IV_1_POS)\n#define SEC_ENG_SE_AES_IV_1_UMSK   (~(((1U << SEC_ENG_SE_AES_IV_1_LEN) - 1) << SEC_ENG_SE_AES_IV_1_POS))\n\n/* 0x18 : se_aes_iv_2 */\n#define SEC_ENG_SE_AES_IV_2_OFFSET (0x18)\n#define SEC_ENG_SE_AES_IV_2        SEC_ENG_SE_AES_IV_2\n#define SEC_ENG_SE_AES_IV_2_POS    (0U)\n#define SEC_ENG_SE_AES_IV_2_LEN    (32U)\n#define SEC_ENG_SE_AES_IV_2_MSK    (((1U << SEC_ENG_SE_AES_IV_2_LEN) - 1) << SEC_ENG_SE_AES_IV_2_POS)\n#define SEC_ENG_SE_AES_IV_2_UMSK   (~(((1U << SEC_ENG_SE_AES_IV_2_LEN) - 1) << SEC_ENG_SE_AES_IV_2_POS))\n\n/* 0x1c : se_aes_iv_3 */\n#define SEC_ENG_SE_AES_IV_3_OFFSET (0x1c)\n#define SEC_ENG_SE_AES_IV_3        SEC_ENG_SE_AES_IV_3\n#define SEC_ENG_SE_AES_IV_3_POS    (0U)\n#define SEC_ENG_SE_AES_IV_3_LEN    (32U)\n#define SEC_ENG_SE_AES_IV_3_MSK    (((1U << SEC_ENG_SE_AES_IV_3_LEN) - 1) << SEC_ENG_SE_AES_IV_3_POS)\n#define SEC_ENG_SE_AES_IV_3_UMSK   (~(((1U << SEC_ENG_SE_AES_IV_3_LEN) - 1) << SEC_ENG_SE_AES_IV_3_POS))\n\n/* 0x20 : se_aes_key_0 */\n#define SEC_ENG_SE_AES_KEY_0_OFFSET (0x20)\n#define SEC_ENG_SE_AES_KEY_0        SEC_ENG_SE_AES_KEY_0\n#define SEC_ENG_SE_AES_KEY_0_POS    (0U)\n#define SEC_ENG_SE_AES_KEY_0_LEN    (32U)\n#define SEC_ENG_SE_AES_KEY_0_MSK    (((1U << SEC_ENG_SE_AES_KEY_0_LEN) - 1) << SEC_ENG_SE_AES_KEY_0_POS)\n#define SEC_ENG_SE_AES_KEY_0_UMSK   (~(((1U << SEC_ENG_SE_AES_KEY_0_LEN) - 1) << SEC_ENG_SE_AES_KEY_0_POS))\n\n/* 0x24 : se_aes_key_1 */\n#define SEC_ENG_SE_AES_KEY_1_OFFSET (0x24)\n#define SEC_ENG_SE_AES_KEY_1        SEC_ENG_SE_AES_KEY_1\n#define SEC_ENG_SE_AES_KEY_1_POS    (0U)\n#define SEC_ENG_SE_AES_KEY_1_LEN    (32U)\n#define SEC_ENG_SE_AES_KEY_1_MSK    (((1U << SEC_ENG_SE_AES_KEY_1_LEN) - 1) << SEC_ENG_SE_AES_KEY_1_POS)\n#define SEC_ENG_SE_AES_KEY_1_UMSK   (~(((1U << SEC_ENG_SE_AES_KEY_1_LEN) - 1) << SEC_ENG_SE_AES_KEY_1_POS))\n\n/* 0x28 : se_aes_key_2 */\n#define SEC_ENG_SE_AES_KEY_2_OFFSET (0x28)\n#define SEC_ENG_SE_AES_KEY_2        SEC_ENG_SE_AES_KEY_2\n#define SEC_ENG_SE_AES_KEY_2_POS    (0U)\n#define SEC_ENG_SE_AES_KEY_2_LEN    (32U)\n#define SEC_ENG_SE_AES_KEY_2_MSK    (((1U << SEC_ENG_SE_AES_KEY_2_LEN) - 1) << SEC_ENG_SE_AES_KEY_2_POS)\n#define SEC_ENG_SE_AES_KEY_2_UMSK   (~(((1U << SEC_ENG_SE_AES_KEY_2_LEN) - 1) << SEC_ENG_SE_AES_KEY_2_POS))\n\n/* 0x2c : se_aes_key_3 */\n#define SEC_ENG_SE_AES_KEY_3_OFFSET (0x2c)\n#define SEC_ENG_SE_AES_KEY_3        SEC_ENG_SE_AES_KEY_3\n#define SEC_ENG_SE_AES_KEY_3_POS    (0U)\n#define SEC_ENG_SE_AES_KEY_3_LEN    (32U)\n#define SEC_ENG_SE_AES_KEY_3_MSK    (((1U << SEC_ENG_SE_AES_KEY_3_LEN) - 1) << SEC_ENG_SE_AES_KEY_3_POS)\n#define SEC_ENG_SE_AES_KEY_3_UMSK   (~(((1U << SEC_ENG_SE_AES_KEY_3_LEN) - 1) << SEC_ENG_SE_AES_KEY_3_POS))\n\n/* 0x30 : se_aes_key_4 */\n#define SEC_ENG_SE_AES_KEY_4_OFFSET (0x30)\n#define SEC_ENG_SE_AES_KEY_4        SEC_ENG_SE_AES_KEY_4\n#define SEC_ENG_SE_AES_KEY_4_POS    (0U)\n#define SEC_ENG_SE_AES_KEY_4_LEN    (32U)\n#define SEC_ENG_SE_AES_KEY_4_MSK    (((1U << SEC_ENG_SE_AES_KEY_4_LEN) - 1) << SEC_ENG_SE_AES_KEY_4_POS)\n#define SEC_ENG_SE_AES_KEY_4_UMSK   (~(((1U << SEC_ENG_SE_AES_KEY_4_LEN) - 1) << SEC_ENG_SE_AES_KEY_4_POS))\n\n/* 0x34 : se_aes_key_5 */\n#define SEC_ENG_SE_AES_KEY_5_OFFSET (0x34)\n#define SEC_ENG_SE_AES_KEY_5        SEC_ENG_SE_AES_KEY_5\n#define SEC_ENG_SE_AES_KEY_5_POS    (0U)\n#define SEC_ENG_SE_AES_KEY_5_LEN    (32U)\n#define SEC_ENG_SE_AES_KEY_5_MSK    (((1U << SEC_ENG_SE_AES_KEY_5_LEN) - 1) << SEC_ENG_SE_AES_KEY_5_POS)\n#define SEC_ENG_SE_AES_KEY_5_UMSK   (~(((1U << SEC_ENG_SE_AES_KEY_5_LEN) - 1) << SEC_ENG_SE_AES_KEY_5_POS))\n\n/* 0x38 : se_aes_key_6 */\n#define SEC_ENG_SE_AES_KEY_6_OFFSET (0x38)\n#define SEC_ENG_SE_AES_KEY_6        SEC_ENG_SE_AES_KEY_6\n#define SEC_ENG_SE_AES_KEY_6_POS    (0U)\n#define SEC_ENG_SE_AES_KEY_6_LEN    (32U)\n#define SEC_ENG_SE_AES_KEY_6_MSK    (((1U << SEC_ENG_SE_AES_KEY_6_LEN) - 1) << SEC_ENG_SE_AES_KEY_6_POS)\n#define SEC_ENG_SE_AES_KEY_6_UMSK   (~(((1U << SEC_ENG_SE_AES_KEY_6_LEN) - 1) << SEC_ENG_SE_AES_KEY_6_POS))\n\n/* 0x3c : se_aes_key_7 */\n#define SEC_ENG_SE_AES_KEY_7_OFFSET (0x3c)\n#define SEC_ENG_SE_AES_KEY_7        SEC_ENG_SE_AES_KEY_7\n#define SEC_ENG_SE_AES_KEY_7_POS    (0U)\n#define SEC_ENG_SE_AES_KEY_7_LEN    (32U)\n#define SEC_ENG_SE_AES_KEY_7_MSK    (((1U << SEC_ENG_SE_AES_KEY_7_LEN) - 1) << SEC_ENG_SE_AES_KEY_7_POS)\n#define SEC_ENG_SE_AES_KEY_7_UMSK   (~(((1U << SEC_ENG_SE_AES_KEY_7_LEN) - 1) << SEC_ENG_SE_AES_KEY_7_POS))\n\n/* 0x40 : se_aes_key_sel_0 */\n#define SEC_ENG_SE_AES_KEY_SEL_0_OFFSET (0x40)\n#define SEC_ENG_SE_AES_KEY_SEL_0        SEC_ENG_SE_AES_KEY_SEL_0\n#define SEC_ENG_SE_AES_KEY_SEL_0_POS    (0U)\n#define SEC_ENG_SE_AES_KEY_SEL_0_LEN    (2U)\n#define SEC_ENG_SE_AES_KEY_SEL_0_MSK    (((1U << SEC_ENG_SE_AES_KEY_SEL_0_LEN) - 1) << SEC_ENG_SE_AES_KEY_SEL_0_POS)\n#define SEC_ENG_SE_AES_KEY_SEL_0_UMSK   (~(((1U << SEC_ENG_SE_AES_KEY_SEL_0_LEN) - 1) << SEC_ENG_SE_AES_KEY_SEL_0_POS))\n\n/* 0x44 : se_aes_key_sel_1 */\n#define SEC_ENG_SE_AES_KEY_SEL_1_OFFSET (0x44)\n#define SEC_ENG_SE_AES_KEY_SEL_1        SEC_ENG_SE_AES_KEY_SEL_1\n#define SEC_ENG_SE_AES_KEY_SEL_1_POS    (0U)\n#define SEC_ENG_SE_AES_KEY_SEL_1_LEN    (2U)\n#define SEC_ENG_SE_AES_KEY_SEL_1_MSK    (((1U << SEC_ENG_SE_AES_KEY_SEL_1_LEN) - 1) << SEC_ENG_SE_AES_KEY_SEL_1_POS)\n#define SEC_ENG_SE_AES_KEY_SEL_1_UMSK   (~(((1U << SEC_ENG_SE_AES_KEY_SEL_1_LEN) - 1) << SEC_ENG_SE_AES_KEY_SEL_1_POS))\n\n/* 0x48 : se_aes_endian */\n#define SEC_ENG_SE_AES_ENDIAN_OFFSET    (0x48)\n#define SEC_ENG_SE_AES_DOUT_ENDIAN      SEC_ENG_SE_AES_DOUT_ENDIAN\n#define SEC_ENG_SE_AES_DOUT_ENDIAN_POS  (0U)\n#define SEC_ENG_SE_AES_DOUT_ENDIAN_LEN  (1U)\n#define SEC_ENG_SE_AES_DOUT_ENDIAN_MSK  (((1U << SEC_ENG_SE_AES_DOUT_ENDIAN_LEN) - 1) << SEC_ENG_SE_AES_DOUT_ENDIAN_POS)\n#define SEC_ENG_SE_AES_DOUT_ENDIAN_UMSK (~(((1U << SEC_ENG_SE_AES_DOUT_ENDIAN_LEN) - 1) << SEC_ENG_SE_AES_DOUT_ENDIAN_POS))\n#define SEC_ENG_SE_AES_DIN_ENDIAN       SEC_ENG_SE_AES_DIN_ENDIAN\n#define SEC_ENG_SE_AES_DIN_ENDIAN_POS   (1U)\n#define SEC_ENG_SE_AES_DIN_ENDIAN_LEN   (1U)\n#define SEC_ENG_SE_AES_DIN_ENDIAN_MSK   (((1U << SEC_ENG_SE_AES_DIN_ENDIAN_LEN) - 1) << SEC_ENG_SE_AES_DIN_ENDIAN_POS)\n#define SEC_ENG_SE_AES_DIN_ENDIAN_UMSK  (~(((1U << SEC_ENG_SE_AES_DIN_ENDIAN_LEN) - 1) << SEC_ENG_SE_AES_DIN_ENDIAN_POS))\n#define SEC_ENG_SE_AES_KEY_ENDIAN       SEC_ENG_SE_AES_KEY_ENDIAN\n#define SEC_ENG_SE_AES_KEY_ENDIAN_POS   (2U)\n#define SEC_ENG_SE_AES_KEY_ENDIAN_LEN   (1U)\n#define SEC_ENG_SE_AES_KEY_ENDIAN_MSK   (((1U << SEC_ENG_SE_AES_KEY_ENDIAN_LEN) - 1) << SEC_ENG_SE_AES_KEY_ENDIAN_POS)\n#define SEC_ENG_SE_AES_KEY_ENDIAN_UMSK  (~(((1U << SEC_ENG_SE_AES_KEY_ENDIAN_LEN) - 1) << SEC_ENG_SE_AES_KEY_ENDIAN_POS))\n#define SEC_ENG_SE_AES_IV_ENDIAN        SEC_ENG_SE_AES_IV_ENDIAN\n#define SEC_ENG_SE_AES_IV_ENDIAN_POS    (3U)\n#define SEC_ENG_SE_AES_IV_ENDIAN_LEN    (1U)\n#define SEC_ENG_SE_AES_IV_ENDIAN_MSK    (((1U << SEC_ENG_SE_AES_IV_ENDIAN_LEN) - 1) << SEC_ENG_SE_AES_IV_ENDIAN_POS)\n#define SEC_ENG_SE_AES_IV_ENDIAN_UMSK   (~(((1U << SEC_ENG_SE_AES_IV_ENDIAN_LEN) - 1) << SEC_ENG_SE_AES_IV_ENDIAN_POS))\n#define SEC_ENG_SE_AES_CTR_LEN          SEC_ENG_SE_AES_CTR_LEN\n#define SEC_ENG_SE_AES_CTR_LEN_POS      (30U)\n#define SEC_ENG_SE_AES_CTR_LEN_LEN      (2U)\n#define SEC_ENG_SE_AES_CTR_LEN_MSK      (((1U << SEC_ENG_SE_AES_CTR_LEN_LEN) - 1) << SEC_ENG_SE_AES_CTR_LEN_POS)\n#define SEC_ENG_SE_AES_CTR_LEN_UMSK     (~(((1U << SEC_ENG_SE_AES_CTR_LEN_LEN) - 1) << SEC_ENG_SE_AES_CTR_LEN_POS))\n\n/* 0x4c : se_aes_sboot */\n#define SEC_ENG_SE_AES_SBOOT_OFFSET       (0x4c)\n#define SEC_ENG_SE_AES_SBOOT_KEY_SEL      SEC_ENG_SE_AES_SBOOT_KEY_SEL\n#define SEC_ENG_SE_AES_SBOOT_KEY_SEL_POS  (0U)\n#define SEC_ENG_SE_AES_SBOOT_KEY_SEL_LEN  (1U)\n#define SEC_ENG_SE_AES_SBOOT_KEY_SEL_MSK  (((1U << SEC_ENG_SE_AES_SBOOT_KEY_SEL_LEN) - 1) << SEC_ENG_SE_AES_SBOOT_KEY_SEL_POS)\n#define SEC_ENG_SE_AES_SBOOT_KEY_SEL_UMSK (~(((1U << SEC_ENG_SE_AES_SBOOT_KEY_SEL_LEN) - 1) << SEC_ENG_SE_AES_SBOOT_KEY_SEL_POS))\n\n/* 0x50 : se_aes_link */\n#define SEC_ENG_SE_AES_LINK_OFFSET (0x50)\n#define SEC_ENG_SE_AES_LCA         SEC_ENG_SE_AES_LCA\n#define SEC_ENG_SE_AES_LCA_POS     (0U)\n#define SEC_ENG_SE_AES_LCA_LEN     (32U)\n#define SEC_ENG_SE_AES_LCA_MSK     (((1U << SEC_ENG_SE_AES_LCA_LEN) - 1) << SEC_ENG_SE_AES_LCA_POS)\n#define SEC_ENG_SE_AES_LCA_UMSK    (~(((1U << SEC_ENG_SE_AES_LCA_LEN) - 1) << SEC_ENG_SE_AES_LCA_POS))\n\n/* 0xfc : se_aes_ctrl_prot */\n#define SEC_ENG_SE_AES_CTRL_PROT_OFFSET (0xfc)\n#define SEC_ENG_SE_AES_PROT_EN          SEC_ENG_SE_AES_PROT_EN\n#define SEC_ENG_SE_AES_PROT_EN_POS      (0U)\n#define SEC_ENG_SE_AES_PROT_EN_LEN      (1U)\n#define SEC_ENG_SE_AES_PROT_EN_MSK      (((1U << SEC_ENG_SE_AES_PROT_EN_LEN) - 1) << SEC_ENG_SE_AES_PROT_EN_POS)\n#define SEC_ENG_SE_AES_PROT_EN_UMSK     (~(((1U << SEC_ENG_SE_AES_PROT_EN_LEN) - 1) << SEC_ENG_SE_AES_PROT_EN_POS))\n#define SEC_ENG_SE_AES_ID0_EN           SEC_ENG_SE_AES_ID0_EN\n#define SEC_ENG_SE_AES_ID0_EN_POS       (1U)\n#define SEC_ENG_SE_AES_ID0_EN_LEN       (1U)\n#define SEC_ENG_SE_AES_ID0_EN_MSK       (((1U << SEC_ENG_SE_AES_ID0_EN_LEN) - 1) << SEC_ENG_SE_AES_ID0_EN_POS)\n#define SEC_ENG_SE_AES_ID0_EN_UMSK      (~(((1U << SEC_ENG_SE_AES_ID0_EN_LEN) - 1) << SEC_ENG_SE_AES_ID0_EN_POS))\n#define SEC_ENG_SE_AES_ID1_EN           SEC_ENG_SE_AES_ID1_EN\n#define SEC_ENG_SE_AES_ID1_EN_POS       (2U)\n#define SEC_ENG_SE_AES_ID1_EN_LEN       (1U)\n#define SEC_ENG_SE_AES_ID1_EN_MSK       (((1U << SEC_ENG_SE_AES_ID1_EN_LEN) - 1) << SEC_ENG_SE_AES_ID1_EN_POS)\n#define SEC_ENG_SE_AES_ID1_EN_UMSK      (~(((1U << SEC_ENG_SE_AES_ID1_EN_LEN) - 1) << SEC_ENG_SE_AES_ID1_EN_POS))\n\nstruct sec_eng_aes_reg {\n    /* 0x0 : se_aes_ctrl */\n    union {\n        struct\n        {\n            uint32_t se_aes_busy        : 1;  /* [    0],          r,        0x0 */\n            uint32_t se_aes_trig_1t     : 1;  /* [    1],        w1p,        0x0 */\n            uint32_t se_aes_en          : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t se_aes_mode        : 2;  /* [ 4: 3],        r/w,        0x0 */\n            uint32_t se_aes_dec_en      : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t se_aes_dec_key_sel : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t se_aes_hw_key_en   : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t se_aes_int         : 1;  /* [    8],          r,        0x0 */\n            uint32_t se_aes_int_clr_1t  : 1;  /* [    9],        w1p,        0x0 */\n            uint32_t se_aes_int_set_1t  : 1;  /* [   10],        w1p,        0x0 */\n            uint32_t se_aes_int_mask    : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t se_aes_block_mode  : 2;  /* [13:12],        r/w,        0x0 */\n            uint32_t se_aes_iv_sel      : 1;  /* [   14],        r/w,        0x0 */\n            uint32_t se_aes_link_mode   : 1;  /* [   15],        r/w,        0x0 */\n            uint32_t se_aes_msg_len     : 16; /* [31:16],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_ctrl;\n\n    /* 0x4 : se_aes_msa */\n    union {\n        struct\n        {\n            uint32_t se_aes_msa : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_msa;\n\n    /* 0x8 : se_aes_mda */\n    union {\n        struct\n        {\n            uint32_t se_aes_mda : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_mda;\n\n    /* 0xc : se_aes_status */\n    union {\n        struct\n        {\n            uint32_t se_aes_status : 32; /* [31: 0],          r,      0x100 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_status;\n\n    /* 0x10 : se_aes_iv_0 */\n    union {\n        struct\n        {\n            uint32_t se_aes_iv_0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_iv_0;\n\n    /* 0x14 : se_aes_iv_1 */\n    union {\n        struct\n        {\n            uint32_t se_aes_iv_1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_iv_1;\n\n    /* 0x18 : se_aes_iv_2 */\n    union {\n        struct\n        {\n            uint32_t se_aes_iv_2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_iv_2;\n\n    /* 0x1c : se_aes_iv_3 */\n    union {\n        struct\n        {\n            uint32_t se_aes_iv_3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_iv_3;\n\n    /* 0x20 : se_aes_key_0 */\n    union {\n        struct\n        {\n            uint32_t se_aes_key_0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_key_0;\n\n    /* 0x24 : se_aes_key_1 */\n    union {\n        struct\n        {\n            uint32_t se_aes_key_1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_key_1;\n\n    /* 0x28 : se_aes_key_2 */\n    union {\n        struct\n        {\n            uint32_t se_aes_key_2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_key_2;\n\n    /* 0x2c : se_aes_key_3 */\n    union {\n        struct\n        {\n            uint32_t se_aes_key_3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_key_3;\n\n    /* 0x30 : se_aes_key_4 */\n    union {\n        struct\n        {\n            uint32_t se_aes_key_4 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_key_4;\n\n    /* 0x34 : se_aes_key_5 */\n    union {\n        struct\n        {\n            uint32_t se_aes_key_5 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_key_5;\n\n    /* 0x38 : se_aes_key_6 */\n    union {\n        struct\n        {\n            uint32_t se_aes_key_6 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_key_6;\n\n    /* 0x3c : se_aes_key_7 */\n    union {\n        struct\n        {\n            uint32_t se_aes_key_7 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_key_7;\n\n    /* 0x40 : se_aes_key_sel_0 */\n    union {\n        struct\n        {\n            uint32_t se_aes_key_sel_0 : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_31    : 30; /* [31: 2],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_key_sel_0;\n\n    /* 0x44 : se_aes_key_sel_1 */\n    union {\n        struct\n        {\n            uint32_t se_aes_key_sel_1 : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_31    : 30; /* [31: 2],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_key_sel_1;\n\n    /* 0x48 : se_aes_endian */\n    union {\n        struct\n        {\n            uint32_t se_aes_dout_endian : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t se_aes_din_endian  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t se_aes_key_endian  : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t se_aes_iv_endian   : 1;  /* [    3],        r/w,        0x1 */\n            uint32_t reserved_4_29      : 26; /* [29: 4],       rsvd,        0x0 */\n            uint32_t se_aes_ctr_len     : 2;  /* [31:30],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_endian;\n\n    /* 0x4c : se_aes_sboot */\n    union {\n        struct\n        {\n            uint32_t se_aes_sboot_key_sel : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1_31        : 31; /* [31: 1],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_sboot;\n\n    /* 0x50 : se_aes_link */\n    union {\n        struct\n        {\n            uint32_t se_aes_lca : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_link;\n\n    /* 0x54  reserved */\n    uint8_t RESERVED0x54[168];\n\n    /* 0xfc : se_aes_ctrl_prot */\n    union {\n        struct\n        {\n            uint32_t se_aes_prot_en : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t se_aes_id0_en  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t se_aes_id1_en  : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t reserved_3_31  : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_aes_ctrl_prot;\n};\n\ntypedef volatile struct sec_eng_aes_reg sec_eng_aes_reg_t;\n\n#define SEC_ENG_AES_OFFSET 0x100\n\n/*Following is reg patch*/\n\n/* 0x0 : se_trng_ctrl_0 */\n#define SEC_ENG_SE_TRNG_CTRL_0_OFFSET       (0x0)\n#define SEC_ENG_SE_TRNG_BUSY                SEC_ENG_SE_TRNG_BUSY\n#define SEC_ENG_SE_TRNG_BUSY_POS            (0U)\n#define SEC_ENG_SE_TRNG_BUSY_LEN            (1U)\n#define SEC_ENG_SE_TRNG_BUSY_MSK            (((1U << SEC_ENG_SE_TRNG_BUSY_LEN) - 1) << SEC_ENG_SE_TRNG_BUSY_POS)\n#define SEC_ENG_SE_TRNG_BUSY_UMSK           (~(((1U << SEC_ENG_SE_TRNG_BUSY_LEN) - 1) << SEC_ENG_SE_TRNG_BUSY_POS))\n#define SEC_ENG_SE_TRNG_TRIG_1T             SEC_ENG_SE_TRNG_TRIG_1T\n#define SEC_ENG_SE_TRNG_TRIG_1T_POS         (1U)\n#define SEC_ENG_SE_TRNG_TRIG_1T_LEN         (1U)\n#define SEC_ENG_SE_TRNG_TRIG_1T_MSK         (((1U << SEC_ENG_SE_TRNG_TRIG_1T_LEN) - 1) << SEC_ENG_SE_TRNG_TRIG_1T_POS)\n#define SEC_ENG_SE_TRNG_TRIG_1T_UMSK        (~(((1U << SEC_ENG_SE_TRNG_TRIG_1T_LEN) - 1) << SEC_ENG_SE_TRNG_TRIG_1T_POS))\n#define SEC_ENG_SE_TRNG_EN                  SEC_ENG_SE_TRNG_EN\n#define SEC_ENG_SE_TRNG_EN_POS              (2U)\n#define SEC_ENG_SE_TRNG_EN_LEN              (1U)\n#define SEC_ENG_SE_TRNG_EN_MSK              (((1U << SEC_ENG_SE_TRNG_EN_LEN) - 1) << SEC_ENG_SE_TRNG_EN_POS)\n#define SEC_ENG_SE_TRNG_EN_UMSK             (~(((1U << SEC_ENG_SE_TRNG_EN_LEN) - 1) << SEC_ENG_SE_TRNG_EN_POS))\n#define SEC_ENG_SE_TRNG_DOUT_CLR_1T         SEC_ENG_SE_TRNG_DOUT_CLR_1T\n#define SEC_ENG_SE_TRNG_DOUT_CLR_1T_POS     (3U)\n#define SEC_ENG_SE_TRNG_DOUT_CLR_1T_LEN     (1U)\n#define SEC_ENG_SE_TRNG_DOUT_CLR_1T_MSK     (((1U << SEC_ENG_SE_TRNG_DOUT_CLR_1T_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_CLR_1T_POS)\n#define SEC_ENG_SE_TRNG_DOUT_CLR_1T_UMSK    (~(((1U << SEC_ENG_SE_TRNG_DOUT_CLR_1T_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_CLR_1T_POS))\n#define SEC_ENG_SE_TRNG_HT_ERROR            SEC_ENG_SE_TRNG_HT_ERROR\n#define SEC_ENG_SE_TRNG_HT_ERROR_POS        (4U)\n#define SEC_ENG_SE_TRNG_HT_ERROR_LEN        (1U)\n#define SEC_ENG_SE_TRNG_HT_ERROR_MSK        (((1U << SEC_ENG_SE_TRNG_HT_ERROR_LEN) - 1) << SEC_ENG_SE_TRNG_HT_ERROR_POS)\n#define SEC_ENG_SE_TRNG_HT_ERROR_UMSK       (~(((1U << SEC_ENG_SE_TRNG_HT_ERROR_LEN) - 1) << SEC_ENG_SE_TRNG_HT_ERROR_POS))\n#define SEC_ENG_SE_TRNG_INT                 SEC_ENG_SE_TRNG_INT\n#define SEC_ENG_SE_TRNG_INT_POS             (8U)\n#define SEC_ENG_SE_TRNG_INT_LEN             (1U)\n#define SEC_ENG_SE_TRNG_INT_MSK             (((1U << SEC_ENG_SE_TRNG_INT_LEN) - 1) << SEC_ENG_SE_TRNG_INT_POS)\n#define SEC_ENG_SE_TRNG_INT_UMSK            (~(((1U << SEC_ENG_SE_TRNG_INT_LEN) - 1) << SEC_ENG_SE_TRNG_INT_POS))\n#define SEC_ENG_SE_TRNG_INT_CLR_1T          SEC_ENG_SE_TRNG_INT_CLR_1T\n#define SEC_ENG_SE_TRNG_INT_CLR_1T_POS      (9U)\n#define SEC_ENG_SE_TRNG_INT_CLR_1T_LEN      (1U)\n#define SEC_ENG_SE_TRNG_INT_CLR_1T_MSK      (((1U << SEC_ENG_SE_TRNG_INT_CLR_1T_LEN) - 1) << SEC_ENG_SE_TRNG_INT_CLR_1T_POS)\n#define SEC_ENG_SE_TRNG_INT_CLR_1T_UMSK     (~(((1U << SEC_ENG_SE_TRNG_INT_CLR_1T_LEN) - 1) << SEC_ENG_SE_TRNG_INT_CLR_1T_POS))\n#define SEC_ENG_SE_TRNG_INT_SET_1T          SEC_ENG_SE_TRNG_INT_SET_1T\n#define SEC_ENG_SE_TRNG_INT_SET_1T_POS      (10U)\n#define SEC_ENG_SE_TRNG_INT_SET_1T_LEN      (1U)\n#define SEC_ENG_SE_TRNG_INT_SET_1T_MSK      (((1U << SEC_ENG_SE_TRNG_INT_SET_1T_LEN) - 1) << SEC_ENG_SE_TRNG_INT_SET_1T_POS)\n#define SEC_ENG_SE_TRNG_INT_SET_1T_UMSK     (~(((1U << SEC_ENG_SE_TRNG_INT_SET_1T_LEN) - 1) << SEC_ENG_SE_TRNG_INT_SET_1T_POS))\n#define SEC_ENG_SE_TRNG_INT_MASK            SEC_ENG_SE_TRNG_INT_MASK\n#define SEC_ENG_SE_TRNG_INT_MASK_POS        (11U)\n#define SEC_ENG_SE_TRNG_INT_MASK_LEN        (1U)\n#define SEC_ENG_SE_TRNG_INT_MASK_MSK        (((1U << SEC_ENG_SE_TRNG_INT_MASK_LEN) - 1) << SEC_ENG_SE_TRNG_INT_MASK_POS)\n#define SEC_ENG_SE_TRNG_INT_MASK_UMSK       (~(((1U << SEC_ENG_SE_TRNG_INT_MASK_LEN) - 1) << SEC_ENG_SE_TRNG_INT_MASK_POS))\n#define SEC_ENG_SE_TRNG_MANUAL_FUN_SEL      SEC_ENG_SE_TRNG_MANUAL_FUN_SEL\n#define SEC_ENG_SE_TRNG_MANUAL_FUN_SEL_POS  (13U)\n#define SEC_ENG_SE_TRNG_MANUAL_FUN_SEL_LEN  (1U)\n#define SEC_ENG_SE_TRNG_MANUAL_FUN_SEL_MSK  (((1U << SEC_ENG_SE_TRNG_MANUAL_FUN_SEL_LEN) - 1) << SEC_ENG_SE_TRNG_MANUAL_FUN_SEL_POS)\n#define SEC_ENG_SE_TRNG_MANUAL_FUN_SEL_UMSK (~(((1U << SEC_ENG_SE_TRNG_MANUAL_FUN_SEL_LEN) - 1) << SEC_ENG_SE_TRNG_MANUAL_FUN_SEL_POS))\n#define SEC_ENG_SE_TRNG_MANUAL_RESEED       SEC_ENG_SE_TRNG_MANUAL_RESEED\n#define SEC_ENG_SE_TRNG_MANUAL_RESEED_POS   (14U)\n#define SEC_ENG_SE_TRNG_MANUAL_RESEED_LEN   (1U)\n#define SEC_ENG_SE_TRNG_MANUAL_RESEED_MSK   (((1U << SEC_ENG_SE_TRNG_MANUAL_RESEED_LEN) - 1) << SEC_ENG_SE_TRNG_MANUAL_RESEED_POS)\n#define SEC_ENG_SE_TRNG_MANUAL_RESEED_UMSK  (~(((1U << SEC_ENG_SE_TRNG_MANUAL_RESEED_LEN) - 1) << SEC_ENG_SE_TRNG_MANUAL_RESEED_POS))\n#define SEC_ENG_SE_TRNG_MANUAL_EN           SEC_ENG_SE_TRNG_MANUAL_EN\n#define SEC_ENG_SE_TRNG_MANUAL_EN_POS       (15U)\n#define SEC_ENG_SE_TRNG_MANUAL_EN_LEN       (1U)\n#define SEC_ENG_SE_TRNG_MANUAL_EN_MSK       (((1U << SEC_ENG_SE_TRNG_MANUAL_EN_LEN) - 1) << SEC_ENG_SE_TRNG_MANUAL_EN_POS)\n#define SEC_ENG_SE_TRNG_MANUAL_EN_UMSK      (~(((1U << SEC_ENG_SE_TRNG_MANUAL_EN_LEN) - 1) << SEC_ENG_SE_TRNG_MANUAL_EN_POS))\n\n/* 0x4 : se_trng_status */\n#define SEC_ENG_SE_TRNG_STATUS_OFFSET (0x4)\n#define SEC_ENG_SE_TRNG_STATUS        SEC_ENG_SE_TRNG_STATUS\n#define SEC_ENG_SE_TRNG_STATUS_POS    (0U)\n#define SEC_ENG_SE_TRNG_STATUS_LEN    (32U)\n#define SEC_ENG_SE_TRNG_STATUS_MSK    (((1U << SEC_ENG_SE_TRNG_STATUS_LEN) - 1) << SEC_ENG_SE_TRNG_STATUS_POS)\n#define SEC_ENG_SE_TRNG_STATUS_UMSK   (~(((1U << SEC_ENG_SE_TRNG_STATUS_LEN) - 1) << SEC_ENG_SE_TRNG_STATUS_POS))\n\n/* 0x8 : se_trng_dout_0 */\n#define SEC_ENG_SE_TRNG_DOUT_0_OFFSET (0x8)\n#define SEC_ENG_SE_TRNG_DOUT_0        SEC_ENG_SE_TRNG_DOUT_0\n#define SEC_ENG_SE_TRNG_DOUT_0_POS    (0U)\n#define SEC_ENG_SE_TRNG_DOUT_0_LEN    (32U)\n#define SEC_ENG_SE_TRNG_DOUT_0_MSK    (((1U << SEC_ENG_SE_TRNG_DOUT_0_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_0_POS)\n#define SEC_ENG_SE_TRNG_DOUT_0_UMSK   (~(((1U << SEC_ENG_SE_TRNG_DOUT_0_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_0_POS))\n\n/* 0xc : se_trng_dout_1 */\n#define SEC_ENG_SE_TRNG_DOUT_1_OFFSET (0xc)\n#define SEC_ENG_SE_TRNG_DOUT_1        SEC_ENG_SE_TRNG_DOUT_1\n#define SEC_ENG_SE_TRNG_DOUT_1_POS    (0U)\n#define SEC_ENG_SE_TRNG_DOUT_1_LEN    (32U)\n#define SEC_ENG_SE_TRNG_DOUT_1_MSK    (((1U << SEC_ENG_SE_TRNG_DOUT_1_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_1_POS)\n#define SEC_ENG_SE_TRNG_DOUT_1_UMSK   (~(((1U << SEC_ENG_SE_TRNG_DOUT_1_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_1_POS))\n\n/* 0x10 : se_trng_dout_2 */\n#define SEC_ENG_SE_TRNG_DOUT_2_OFFSET (0x10)\n#define SEC_ENG_SE_TRNG_DOUT_2        SEC_ENG_SE_TRNG_DOUT_2\n#define SEC_ENG_SE_TRNG_DOUT_2_POS    (0U)\n#define SEC_ENG_SE_TRNG_DOUT_2_LEN    (32U)\n#define SEC_ENG_SE_TRNG_DOUT_2_MSK    (((1U << SEC_ENG_SE_TRNG_DOUT_2_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_2_POS)\n#define SEC_ENG_SE_TRNG_DOUT_2_UMSK   (~(((1U << SEC_ENG_SE_TRNG_DOUT_2_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_2_POS))\n\n/* 0x14 : se_trng_dout_3 */\n#define SEC_ENG_SE_TRNG_DOUT_3_OFFSET (0x14)\n#define SEC_ENG_SE_TRNG_DOUT_3        SEC_ENG_SE_TRNG_DOUT_3\n#define SEC_ENG_SE_TRNG_DOUT_3_POS    (0U)\n#define SEC_ENG_SE_TRNG_DOUT_3_LEN    (32U)\n#define SEC_ENG_SE_TRNG_DOUT_3_MSK    (((1U << SEC_ENG_SE_TRNG_DOUT_3_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_3_POS)\n#define SEC_ENG_SE_TRNG_DOUT_3_UMSK   (~(((1U << SEC_ENG_SE_TRNG_DOUT_3_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_3_POS))\n\n/* 0x18 : se_trng_dout_4 */\n#define SEC_ENG_SE_TRNG_DOUT_4_OFFSET (0x18)\n#define SEC_ENG_SE_TRNG_DOUT_4        SEC_ENG_SE_TRNG_DOUT_4\n#define SEC_ENG_SE_TRNG_DOUT_4_POS    (0U)\n#define SEC_ENG_SE_TRNG_DOUT_4_LEN    (32U)\n#define SEC_ENG_SE_TRNG_DOUT_4_MSK    (((1U << SEC_ENG_SE_TRNG_DOUT_4_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_4_POS)\n#define SEC_ENG_SE_TRNG_DOUT_4_UMSK   (~(((1U << SEC_ENG_SE_TRNG_DOUT_4_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_4_POS))\n\n/* 0x1c : se_trng_dout_5 */\n#define SEC_ENG_SE_TRNG_DOUT_5_OFFSET (0x1c)\n#define SEC_ENG_SE_TRNG_DOUT_5        SEC_ENG_SE_TRNG_DOUT_5\n#define SEC_ENG_SE_TRNG_DOUT_5_POS    (0U)\n#define SEC_ENG_SE_TRNG_DOUT_5_LEN    (32U)\n#define SEC_ENG_SE_TRNG_DOUT_5_MSK    (((1U << SEC_ENG_SE_TRNG_DOUT_5_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_5_POS)\n#define SEC_ENG_SE_TRNG_DOUT_5_UMSK   (~(((1U << SEC_ENG_SE_TRNG_DOUT_5_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_5_POS))\n\n/* 0x20 : se_trng_dout_6 */\n#define SEC_ENG_SE_TRNG_DOUT_6_OFFSET (0x20)\n#define SEC_ENG_SE_TRNG_DOUT_6        SEC_ENG_SE_TRNG_DOUT_6\n#define SEC_ENG_SE_TRNG_DOUT_6_POS    (0U)\n#define SEC_ENG_SE_TRNG_DOUT_6_LEN    (32U)\n#define SEC_ENG_SE_TRNG_DOUT_6_MSK    (((1U << SEC_ENG_SE_TRNG_DOUT_6_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_6_POS)\n#define SEC_ENG_SE_TRNG_DOUT_6_UMSK   (~(((1U << SEC_ENG_SE_TRNG_DOUT_6_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_6_POS))\n\n/* 0x24 : se_trng_dout_7 */\n#define SEC_ENG_SE_TRNG_DOUT_7_OFFSET (0x24)\n#define SEC_ENG_SE_TRNG_DOUT_7        SEC_ENG_SE_TRNG_DOUT_7\n#define SEC_ENG_SE_TRNG_DOUT_7_POS    (0U)\n#define SEC_ENG_SE_TRNG_DOUT_7_LEN    (32U)\n#define SEC_ENG_SE_TRNG_DOUT_7_MSK    (((1U << SEC_ENG_SE_TRNG_DOUT_7_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_7_POS)\n#define SEC_ENG_SE_TRNG_DOUT_7_UMSK   (~(((1U << SEC_ENG_SE_TRNG_DOUT_7_LEN) - 1) << SEC_ENG_SE_TRNG_DOUT_7_POS))\n\n/* 0x28 : se_trng_test */\n#define SEC_ENG_SE_TRNG_TEST_OFFSET     (0x28)\n#define SEC_ENG_SE_TRNG_TEST_EN         SEC_ENG_SE_TRNG_TEST_EN\n#define SEC_ENG_SE_TRNG_TEST_EN_POS     (0U)\n#define SEC_ENG_SE_TRNG_TEST_EN_LEN     (1U)\n#define SEC_ENG_SE_TRNG_TEST_EN_MSK     (((1U << SEC_ENG_SE_TRNG_TEST_EN_LEN) - 1) << SEC_ENG_SE_TRNG_TEST_EN_POS)\n#define SEC_ENG_SE_TRNG_TEST_EN_UMSK    (~(((1U << SEC_ENG_SE_TRNG_TEST_EN_LEN) - 1) << SEC_ENG_SE_TRNG_TEST_EN_POS))\n#define SEC_ENG_SE_TRNG_CP_TEST_EN      SEC_ENG_SE_TRNG_CP_TEST_EN\n#define SEC_ENG_SE_TRNG_CP_TEST_EN_POS  (1U)\n#define SEC_ENG_SE_TRNG_CP_TEST_EN_LEN  (1U)\n#define SEC_ENG_SE_TRNG_CP_TEST_EN_MSK  (((1U << SEC_ENG_SE_TRNG_CP_TEST_EN_LEN) - 1) << SEC_ENG_SE_TRNG_CP_TEST_EN_POS)\n#define SEC_ENG_SE_TRNG_CP_TEST_EN_UMSK (~(((1U << SEC_ENG_SE_TRNG_CP_TEST_EN_LEN) - 1) << SEC_ENG_SE_TRNG_CP_TEST_EN_POS))\n#define SEC_ENG_SE_TRNG_CP_BYPASS       SEC_ENG_SE_TRNG_CP_BYPASS\n#define SEC_ENG_SE_TRNG_CP_BYPASS_POS   (2U)\n#define SEC_ENG_SE_TRNG_CP_BYPASS_LEN   (1U)\n#define SEC_ENG_SE_TRNG_CP_BYPASS_MSK   (((1U << SEC_ENG_SE_TRNG_CP_BYPASS_LEN) - 1) << SEC_ENG_SE_TRNG_CP_BYPASS_POS)\n#define SEC_ENG_SE_TRNG_CP_BYPASS_UMSK  (~(((1U << SEC_ENG_SE_TRNG_CP_BYPASS_LEN) - 1) << SEC_ENG_SE_TRNG_CP_BYPASS_POS))\n#define SEC_ENG_SE_TRNG_HT_DIS          SEC_ENG_SE_TRNG_HT_DIS\n#define SEC_ENG_SE_TRNG_HT_DIS_POS      (3U)\n#define SEC_ENG_SE_TRNG_HT_DIS_LEN      (1U)\n#define SEC_ENG_SE_TRNG_HT_DIS_MSK      (((1U << SEC_ENG_SE_TRNG_HT_DIS_LEN) - 1) << SEC_ENG_SE_TRNG_HT_DIS_POS)\n#define SEC_ENG_SE_TRNG_HT_DIS_UMSK     (~(((1U << SEC_ENG_SE_TRNG_HT_DIS_LEN) - 1) << SEC_ENG_SE_TRNG_HT_DIS_POS))\n#define SEC_ENG_SE_TRNG_HT_ALARM_N      SEC_ENG_SE_TRNG_HT_ALARM_N\n#define SEC_ENG_SE_TRNG_HT_ALARM_N_POS  (4U)\n#define SEC_ENG_SE_TRNG_HT_ALARM_N_LEN  (8U)\n#define SEC_ENG_SE_TRNG_HT_ALARM_N_MSK  (((1U << SEC_ENG_SE_TRNG_HT_ALARM_N_LEN) - 1) << SEC_ENG_SE_TRNG_HT_ALARM_N_POS)\n#define SEC_ENG_SE_TRNG_HT_ALARM_N_UMSK (~(((1U << SEC_ENG_SE_TRNG_HT_ALARM_N_LEN) - 1) << SEC_ENG_SE_TRNG_HT_ALARM_N_POS))\n\n/* 0x2c : se_trng_ctrl_1 */\n#define SEC_ENG_SE_TRNG_CTRL_1_OFFSET     (0x2c)\n#define SEC_ENG_SE_TRNG_RESEED_N_LSB      SEC_ENG_SE_TRNG_RESEED_N_LSB\n#define SEC_ENG_SE_TRNG_RESEED_N_LSB_POS  (0U)\n#define SEC_ENG_SE_TRNG_RESEED_N_LSB_LEN  (32U)\n#define SEC_ENG_SE_TRNG_RESEED_N_LSB_MSK  (((1U << SEC_ENG_SE_TRNG_RESEED_N_LSB_LEN) - 1) << SEC_ENG_SE_TRNG_RESEED_N_LSB_POS)\n#define SEC_ENG_SE_TRNG_RESEED_N_LSB_UMSK (~(((1U << SEC_ENG_SE_TRNG_RESEED_N_LSB_LEN) - 1) << SEC_ENG_SE_TRNG_RESEED_N_LSB_POS))\n\n/* 0x30 : se_trng_ctrl_2 */\n#define SEC_ENG_SE_TRNG_CTRL_2_OFFSET     (0x30)\n#define SEC_ENG_SE_TRNG_RESEED_N_MSB      SEC_ENG_SE_TRNG_RESEED_N_MSB\n#define SEC_ENG_SE_TRNG_RESEED_N_MSB_POS  (0U)\n#define SEC_ENG_SE_TRNG_RESEED_N_MSB_LEN  (16U)\n#define SEC_ENG_SE_TRNG_RESEED_N_MSB_MSK  (((1U << SEC_ENG_SE_TRNG_RESEED_N_MSB_LEN) - 1) << SEC_ENG_SE_TRNG_RESEED_N_MSB_POS)\n#define SEC_ENG_SE_TRNG_RESEED_N_MSB_UMSK (~(((1U << SEC_ENG_SE_TRNG_RESEED_N_MSB_LEN) - 1) << SEC_ENG_SE_TRNG_RESEED_N_MSB_POS))\n\n/* 0x34 : se_trng_ctrl_3 */\n#define SEC_ENG_SE_TRNG_CTRL_3_OFFSET (0x34)\n#define SEC_ENG_SE_TRNG_CP_RATIO      SEC_ENG_SE_TRNG_CP_RATIO\n#define SEC_ENG_SE_TRNG_CP_RATIO_POS  (0U)\n#define SEC_ENG_SE_TRNG_CP_RATIO_LEN  (8U)\n#define SEC_ENG_SE_TRNG_CP_RATIO_MSK  (((1U << SEC_ENG_SE_TRNG_CP_RATIO_LEN) - 1) << SEC_ENG_SE_TRNG_CP_RATIO_POS)\n#define SEC_ENG_SE_TRNG_CP_RATIO_UMSK (~(((1U << SEC_ENG_SE_TRNG_CP_RATIO_LEN) - 1) << SEC_ENG_SE_TRNG_CP_RATIO_POS))\n#define SEC_ENG_SE_TRNG_HT_RCT_C      SEC_ENG_SE_TRNG_HT_RCT_C\n#define SEC_ENG_SE_TRNG_HT_RCT_C_POS  (8U)\n#define SEC_ENG_SE_TRNG_HT_RCT_C_LEN  (8U)\n#define SEC_ENG_SE_TRNG_HT_RCT_C_MSK  (((1U << SEC_ENG_SE_TRNG_HT_RCT_C_LEN) - 1) << SEC_ENG_SE_TRNG_HT_RCT_C_POS)\n#define SEC_ENG_SE_TRNG_HT_RCT_C_UMSK (~(((1U << SEC_ENG_SE_TRNG_HT_RCT_C_LEN) - 1) << SEC_ENG_SE_TRNG_HT_RCT_C_POS))\n#define SEC_ENG_SE_TRNG_HT_APT_C      SEC_ENG_SE_TRNG_HT_APT_C\n#define SEC_ENG_SE_TRNG_HT_APT_C_POS  (16U)\n#define SEC_ENG_SE_TRNG_HT_APT_C_LEN  (10U)\n#define SEC_ENG_SE_TRNG_HT_APT_C_MSK  (((1U << SEC_ENG_SE_TRNG_HT_APT_C_LEN) - 1) << SEC_ENG_SE_TRNG_HT_APT_C_POS)\n#define SEC_ENG_SE_TRNG_HT_APT_C_UMSK (~(((1U << SEC_ENG_SE_TRNG_HT_APT_C_LEN) - 1) << SEC_ENG_SE_TRNG_HT_APT_C_POS))\n#define SEC_ENG_SE_TRNG_HT_OD_EN      SEC_ENG_SE_TRNG_HT_OD_EN\n#define SEC_ENG_SE_TRNG_HT_OD_EN_POS  (26U)\n#define SEC_ENG_SE_TRNG_HT_OD_EN_LEN  (1U)\n#define SEC_ENG_SE_TRNG_HT_OD_EN_MSK  (((1U << SEC_ENG_SE_TRNG_HT_OD_EN_LEN) - 1) << SEC_ENG_SE_TRNG_HT_OD_EN_POS)\n#define SEC_ENG_SE_TRNG_HT_OD_EN_UMSK (~(((1U << SEC_ENG_SE_TRNG_HT_OD_EN_LEN) - 1) << SEC_ENG_SE_TRNG_HT_OD_EN_POS))\n#define SEC_ENG_SE_TRNG_ROSC_EN       SEC_ENG_SE_TRNG_ROSC_EN\n#define SEC_ENG_SE_TRNG_ROSC_EN_POS   (31U)\n#define SEC_ENG_SE_TRNG_ROSC_EN_LEN   (1U)\n#define SEC_ENG_SE_TRNG_ROSC_EN_MSK   (((1U << SEC_ENG_SE_TRNG_ROSC_EN_LEN) - 1) << SEC_ENG_SE_TRNG_ROSC_EN_POS)\n#define SEC_ENG_SE_TRNG_ROSC_EN_UMSK  (~(((1U << SEC_ENG_SE_TRNG_ROSC_EN_LEN) - 1) << SEC_ENG_SE_TRNG_ROSC_EN_POS))\n\n/* 0x40 : se_trng_test_out_0 */\n#define SEC_ENG_SE_TRNG_TEST_OUT_0_OFFSET (0x40)\n#define SEC_ENG_SE_TRNG_TEST_OUT_0        SEC_ENG_SE_TRNG_TEST_OUT_0\n#define SEC_ENG_SE_TRNG_TEST_OUT_0_POS    (0U)\n#define SEC_ENG_SE_TRNG_TEST_OUT_0_LEN    (32U)\n#define SEC_ENG_SE_TRNG_TEST_OUT_0_MSK    (((1U << SEC_ENG_SE_TRNG_TEST_OUT_0_LEN) - 1) << SEC_ENG_SE_TRNG_TEST_OUT_0_POS)\n#define SEC_ENG_SE_TRNG_TEST_OUT_0_UMSK   (~(((1U << SEC_ENG_SE_TRNG_TEST_OUT_0_LEN) - 1) << SEC_ENG_SE_TRNG_TEST_OUT_0_POS))\n\n/* 0x44 : se_trng_test_out_1 */\n#define SEC_ENG_SE_TRNG_TEST_OUT_1_OFFSET (0x44)\n#define SEC_ENG_SE_TRNG_TEST_OUT_1        SEC_ENG_SE_TRNG_TEST_OUT_1\n#define SEC_ENG_SE_TRNG_TEST_OUT_1_POS    (0U)\n#define SEC_ENG_SE_TRNG_TEST_OUT_1_LEN    (32U)\n#define SEC_ENG_SE_TRNG_TEST_OUT_1_MSK    (((1U << SEC_ENG_SE_TRNG_TEST_OUT_1_LEN) - 1) << SEC_ENG_SE_TRNG_TEST_OUT_1_POS)\n#define SEC_ENG_SE_TRNG_TEST_OUT_1_UMSK   (~(((1U << SEC_ENG_SE_TRNG_TEST_OUT_1_LEN) - 1) << SEC_ENG_SE_TRNG_TEST_OUT_1_POS))\n\n/* 0x48 : se_trng_test_out_2 */\n#define SEC_ENG_SE_TRNG_TEST_OUT_2_OFFSET (0x48)\n#define SEC_ENG_SE_TRNG_TEST_OUT_2        SEC_ENG_SE_TRNG_TEST_OUT_2\n#define SEC_ENG_SE_TRNG_TEST_OUT_2_POS    (0U)\n#define SEC_ENG_SE_TRNG_TEST_OUT_2_LEN    (32U)\n#define SEC_ENG_SE_TRNG_TEST_OUT_2_MSK    (((1U << SEC_ENG_SE_TRNG_TEST_OUT_2_LEN) - 1) << SEC_ENG_SE_TRNG_TEST_OUT_2_POS)\n#define SEC_ENG_SE_TRNG_TEST_OUT_2_UMSK   (~(((1U << SEC_ENG_SE_TRNG_TEST_OUT_2_LEN) - 1) << SEC_ENG_SE_TRNG_TEST_OUT_2_POS))\n\n/* 0x4c : se_trng_test_out_3 */\n#define SEC_ENG_SE_TRNG_TEST_OUT_3_OFFSET (0x4c)\n#define SEC_ENG_SE_TRNG_TEST_OUT_3        SEC_ENG_SE_TRNG_TEST_OUT_3\n#define SEC_ENG_SE_TRNG_TEST_OUT_3_POS    (0U)\n#define SEC_ENG_SE_TRNG_TEST_OUT_3_LEN    (32U)\n#define SEC_ENG_SE_TRNG_TEST_OUT_3_MSK    (((1U << SEC_ENG_SE_TRNG_TEST_OUT_3_LEN) - 1) << SEC_ENG_SE_TRNG_TEST_OUT_3_POS)\n#define SEC_ENG_SE_TRNG_TEST_OUT_3_UMSK   (~(((1U << SEC_ENG_SE_TRNG_TEST_OUT_3_LEN) - 1) << SEC_ENG_SE_TRNG_TEST_OUT_3_POS))\n\n/* 0xfc : se_trng_ctrl_prot */\n#define SEC_ENG_SE_TRNG_CTRL_PROT_OFFSET (0xfc)\n#define SEC_ENG_SE_TRNG_PROT_EN          SEC_ENG_SE_TRNG_PROT_EN\n#define SEC_ENG_SE_TRNG_PROT_EN_POS      (0U)\n#define SEC_ENG_SE_TRNG_PROT_EN_LEN      (1U)\n#define SEC_ENG_SE_TRNG_PROT_EN_MSK      (((1U << SEC_ENG_SE_TRNG_PROT_EN_LEN) - 1) << SEC_ENG_SE_TRNG_PROT_EN_POS)\n#define SEC_ENG_SE_TRNG_PROT_EN_UMSK     (~(((1U << SEC_ENG_SE_TRNG_PROT_EN_LEN) - 1) << SEC_ENG_SE_TRNG_PROT_EN_POS))\n#define SEC_ENG_SE_TRNG_ID0_EN           SEC_ENG_SE_TRNG_ID0_EN\n#define SEC_ENG_SE_TRNG_ID0_EN_POS       (1U)\n#define SEC_ENG_SE_TRNG_ID0_EN_LEN       (1U)\n#define SEC_ENG_SE_TRNG_ID0_EN_MSK       (((1U << SEC_ENG_SE_TRNG_ID0_EN_LEN) - 1) << SEC_ENG_SE_TRNG_ID0_EN_POS)\n#define SEC_ENG_SE_TRNG_ID0_EN_UMSK      (~(((1U << SEC_ENG_SE_TRNG_ID0_EN_LEN) - 1) << SEC_ENG_SE_TRNG_ID0_EN_POS))\n#define SEC_ENG_SE_TRNG_ID1_EN           SEC_ENG_SE_TRNG_ID1_EN\n#define SEC_ENG_SE_TRNG_ID1_EN_POS       (2U)\n#define SEC_ENG_SE_TRNG_ID1_EN_LEN       (1U)\n#define SEC_ENG_SE_TRNG_ID1_EN_MSK       (((1U << SEC_ENG_SE_TRNG_ID1_EN_LEN) - 1) << SEC_ENG_SE_TRNG_ID1_EN_POS)\n#define SEC_ENG_SE_TRNG_ID1_EN_UMSK      (~(((1U << SEC_ENG_SE_TRNG_ID1_EN_LEN) - 1) << SEC_ENG_SE_TRNG_ID1_EN_POS))\n\nstruct sec_eng_trng_reg {\n    /* 0x0 : se_trng_ctrl_0 */\n    union {\n        struct\n        {\n            uint32_t se_trng_busy           : 1;  /* [    0],          r,        0x0 */\n            uint32_t se_trng_trig_1t        : 1;  /* [    1],        w1p,        0x0 */\n            uint32_t se_trng_en             : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t se_trng_dout_clr_1t    : 1;  /* [    3],        w1p,        0x0 */\n            uint32_t se_trng_ht_error       : 1;  /* [    4],          r,        0x0 */\n            uint32_t reserved_5_7           : 3;  /* [ 7: 5],       rsvd,        0x0 */\n            uint32_t se_trng_int            : 1;  /* [    8],          r,        0x0 */\n            uint32_t se_trng_int_clr_1t     : 1;  /* [    9],        w1p,        0x0 */\n            uint32_t se_trng_int_set_1t     : 1;  /* [   10],        w1p,        0x0 */\n            uint32_t se_trng_int_mask       : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t reserved_12            : 1;  /* [   12],       rsvd,        0x0 */\n            uint32_t se_trng_manual_fun_sel : 1;  /* [   13],        r/w,        0x0 */\n            uint32_t se_trng_manual_reseed  : 1;  /* [   14],        r/w,        0x0 */\n            uint32_t se_trng_manual_en      : 1;  /* [   15],        r/w,        0x0 */\n            uint32_t reserved_16_31         : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_ctrl_0;\n\n    /* 0x4 : se_trng_status */\n    union {\n        struct\n        {\n            uint32_t se_trng_status : 32; /* [31: 0],          r,   0x100020 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_status;\n\n    /* 0x8 : se_trng_dout_0 */\n    union {\n        struct\n        {\n            uint32_t se_trng_dout_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_dout_0;\n\n    /* 0xc : se_trng_dout_1 */\n    union {\n        struct\n        {\n            uint32_t se_trng_dout_1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_dout_1;\n\n    /* 0x10 : se_trng_dout_2 */\n    union {\n        struct\n        {\n            uint32_t se_trng_dout_2 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_dout_2;\n\n    /* 0x14 : se_trng_dout_3 */\n    union {\n        struct\n        {\n            uint32_t se_trng_dout_3 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_dout_3;\n\n    /* 0x18 : se_trng_dout_4 */\n    union {\n        struct\n        {\n            uint32_t se_trng_dout_4 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_dout_4;\n\n    /* 0x1c : se_trng_dout_5 */\n    union {\n        struct\n        {\n            uint32_t se_trng_dout_5 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_dout_5;\n\n    /* 0x20 : se_trng_dout_6 */\n    union {\n        struct\n        {\n            uint32_t se_trng_dout_6 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_dout_6;\n\n    /* 0x24 : se_trng_dout_7 */\n    union {\n        struct\n        {\n            uint32_t se_trng_dout_7 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_dout_7;\n\n    /* 0x28 : se_trng_test */\n    union {\n        struct\n        {\n            uint32_t se_trng_test_en    : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t se_trng_cp_test_en : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t se_trng_cp_bypass  : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t se_trng_ht_dis     : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t se_trng_ht_alarm_n : 8;  /* [11: 4],        r/w,        0x0 */\n            uint32_t reserved_12_31     : 20; /* [31:12],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_test;\n\n    /* 0x2c : se_trng_ctrl_1 */\n    union {\n        struct\n        {\n            uint32_t se_trng_reseed_n_lsb : 32; /* [31: 0],        r/w,     0xffff */\n        } BF;\n        uint32_t WORD;\n    } se_trng_ctrl_1;\n\n    /* 0x30 : se_trng_ctrl_2 */\n    union {\n        struct\n        {\n            uint32_t se_trng_reseed_n_msb : 16; /* [15: 0],        r/w,       0xff */\n            uint32_t reserved_16_31       : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_ctrl_2;\n\n    /* 0x34 : se_trng_ctrl_3 */\n    union {\n        struct\n        {\n            uint32_t se_trng_cp_ratio : 8;  /* [ 7: 0],        r/w,        0x3 */\n            uint32_t se_trng_ht_rct_c : 8;  /* [15: 8],        r/w,       0x42 */\n            uint32_t se_trng_ht_apt_c : 10; /* [25:16],        r/w,      0x37a */\n            uint32_t se_trng_ht_od_en : 1;  /* [   26],        r/w,        0x0 */\n            uint32_t reserved_27_30   : 4;  /* [30:27],       rsvd,        0x0 */\n            uint32_t se_trng_rosc_en  : 1;  /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_ctrl_3;\n\n    /* 0x38  reserved */\n    uint8_t RESERVED0x38[8];\n\n    /* 0x40 : se_trng_test_out_0 */\n    union {\n        struct\n        {\n            uint32_t se_trng_test_out_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_test_out_0;\n\n    /* 0x44 : se_trng_test_out_1 */\n    union {\n        struct\n        {\n            uint32_t se_trng_test_out_1 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_test_out_1;\n\n    /* 0x48 : se_trng_test_out_2 */\n    union {\n        struct\n        {\n            uint32_t se_trng_test_out_2 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_test_out_2;\n\n    /* 0x4c : se_trng_test_out_3 */\n    union {\n        struct\n        {\n            uint32_t se_trng_test_out_3 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_test_out_3;\n\n    /* 0x50  reserved */\n    uint8_t RESERVED0x50[172];\n\n    /* 0xfc : se_trng_ctrl_prot */\n    union {\n        struct\n        {\n            uint32_t se_trng_prot_en : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t se_trng_id0_en  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t se_trng_id1_en  : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t reserved_3_31   : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } se_trng_ctrl_prot;\n};\n\ntypedef volatile struct sec_eng_trng_reg sec_eng_trng_reg_t;\n\n#define SEC_ENG_TRNG_OFFSET 0x200\n\n#endif /* __SEC_ENG_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/sf_ctrl_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    sf_ctrl_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __SF_CTRL_REG_H__\n#define __SF_CTRL_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : sf_ctrl_0 */\n#define SF_CTRL_0_OFFSET                  (0x0)\n#define SF_CTRL_SF_CLK_SF_RX_INV_SEL      SF_CTRL_SF_CLK_SF_RX_INV_SEL\n#define SF_CTRL_SF_CLK_SF_RX_INV_SEL_POS  (2U)\n#define SF_CTRL_SF_CLK_SF_RX_INV_SEL_LEN  (1U)\n#define SF_CTRL_SF_CLK_SF_RX_INV_SEL_MSK  (((1U << SF_CTRL_SF_CLK_SF_RX_INV_SEL_LEN) - 1) << SF_CTRL_SF_CLK_SF_RX_INV_SEL_POS)\n#define SF_CTRL_SF_CLK_SF_RX_INV_SEL_UMSK (~(((1U << SF_CTRL_SF_CLK_SF_RX_INV_SEL_LEN) - 1) << SF_CTRL_SF_CLK_SF_RX_INV_SEL_POS))\n#define SF_CTRL_SF_CLK_OUT_GATE_EN        SF_CTRL_SF_CLK_OUT_GATE_EN\n#define SF_CTRL_SF_CLK_OUT_GATE_EN_POS    (3U)\n#define SF_CTRL_SF_CLK_OUT_GATE_EN_LEN    (1U)\n#define SF_CTRL_SF_CLK_OUT_GATE_EN_MSK    (((1U << SF_CTRL_SF_CLK_OUT_GATE_EN_LEN) - 1) << SF_CTRL_SF_CLK_OUT_GATE_EN_POS)\n#define SF_CTRL_SF_CLK_OUT_GATE_EN_UMSK   (~(((1U << SF_CTRL_SF_CLK_OUT_GATE_EN_LEN) - 1) << SF_CTRL_SF_CLK_OUT_GATE_EN_POS))\n#define SF_CTRL_SF_CLK_OUT_INV_SEL        SF_CTRL_SF_CLK_OUT_INV_SEL\n#define SF_CTRL_SF_CLK_OUT_INV_SEL_POS    (4U)\n#define SF_CTRL_SF_CLK_OUT_INV_SEL_LEN    (1U)\n#define SF_CTRL_SF_CLK_OUT_INV_SEL_MSK    (((1U << SF_CTRL_SF_CLK_OUT_INV_SEL_LEN) - 1) << SF_CTRL_SF_CLK_OUT_INV_SEL_POS)\n#define SF_CTRL_SF_CLK_OUT_INV_SEL_UMSK   (~(((1U << SF_CTRL_SF_CLK_OUT_INV_SEL_LEN) - 1) << SF_CTRL_SF_CLK_OUT_INV_SEL_POS))\n#define SF_CTRL_SF_CLK_SAHB_SRAM_SEL      SF_CTRL_SF_CLK_SAHB_SRAM_SEL\n#define SF_CTRL_SF_CLK_SAHB_SRAM_SEL_POS  (5U)\n#define SF_CTRL_SF_CLK_SAHB_SRAM_SEL_LEN  (1U)\n#define SF_CTRL_SF_CLK_SAHB_SRAM_SEL_MSK  (((1U << SF_CTRL_SF_CLK_SAHB_SRAM_SEL_LEN) - 1) << SF_CTRL_SF_CLK_SAHB_SRAM_SEL_POS)\n#define SF_CTRL_SF_CLK_SAHB_SRAM_SEL_UMSK (~(((1U << SF_CTRL_SF_CLK_SAHB_SRAM_SEL_LEN) - 1) << SF_CTRL_SF_CLK_SAHB_SRAM_SEL_POS))\n#define SF_CTRL_SF_IF_READ_DLY_N          SF_CTRL_SF_IF_READ_DLY_N\n#define SF_CTRL_SF_IF_READ_DLY_N_POS      (8U)\n#define SF_CTRL_SF_IF_READ_DLY_N_LEN      (3U)\n#define SF_CTRL_SF_IF_READ_DLY_N_MSK      (((1U << SF_CTRL_SF_IF_READ_DLY_N_LEN) - 1) << SF_CTRL_SF_IF_READ_DLY_N_POS)\n#define SF_CTRL_SF_IF_READ_DLY_N_UMSK     (~(((1U << SF_CTRL_SF_IF_READ_DLY_N_LEN) - 1) << SF_CTRL_SF_IF_READ_DLY_N_POS))\n#define SF_CTRL_SF_IF_READ_DLY_EN         SF_CTRL_SF_IF_READ_DLY_EN\n#define SF_CTRL_SF_IF_READ_DLY_EN_POS     (11U)\n#define SF_CTRL_SF_IF_READ_DLY_EN_LEN     (1U)\n#define SF_CTRL_SF_IF_READ_DLY_EN_MSK     (((1U << SF_CTRL_SF_IF_READ_DLY_EN_LEN) - 1) << SF_CTRL_SF_IF_READ_DLY_EN_POS)\n#define SF_CTRL_SF_IF_READ_DLY_EN_UMSK    (~(((1U << SF_CTRL_SF_IF_READ_DLY_EN_LEN) - 1) << SF_CTRL_SF_IF_READ_DLY_EN_POS))\n#define SF_CTRL_SF_IF_INT                 SF_CTRL_SF_IF_INT\n#define SF_CTRL_SF_IF_INT_POS             (16U)\n#define SF_CTRL_SF_IF_INT_LEN             (1U)\n#define SF_CTRL_SF_IF_INT_MSK             (((1U << SF_CTRL_SF_IF_INT_LEN) - 1) << SF_CTRL_SF_IF_INT_POS)\n#define SF_CTRL_SF_IF_INT_UMSK            (~(((1U << SF_CTRL_SF_IF_INT_LEN) - 1) << SF_CTRL_SF_IF_INT_POS))\n#define SF_CTRL_SF_IF_INT_CLR             SF_CTRL_SF_IF_INT_CLR\n#define SF_CTRL_SF_IF_INT_CLR_POS         (17U)\n#define SF_CTRL_SF_IF_INT_CLR_LEN         (1U)\n#define SF_CTRL_SF_IF_INT_CLR_MSK         (((1U << SF_CTRL_SF_IF_INT_CLR_LEN) - 1) << SF_CTRL_SF_IF_INT_CLR_POS)\n#define SF_CTRL_SF_IF_INT_CLR_UMSK        (~(((1U << SF_CTRL_SF_IF_INT_CLR_LEN) - 1) << SF_CTRL_SF_IF_INT_CLR_POS))\n#define SF_CTRL_SF_IF_INT_SET             SF_CTRL_SF_IF_INT_SET\n#define SF_CTRL_SF_IF_INT_SET_POS         (18U)\n#define SF_CTRL_SF_IF_INT_SET_LEN         (1U)\n#define SF_CTRL_SF_IF_INT_SET_MSK         (((1U << SF_CTRL_SF_IF_INT_SET_LEN) - 1) << SF_CTRL_SF_IF_INT_SET_POS)\n#define SF_CTRL_SF_IF_INT_SET_UMSK        (~(((1U << SF_CTRL_SF_IF_INT_SET_LEN) - 1) << SF_CTRL_SF_IF_INT_SET_POS))\n#define SF_CTRL_SF_AES_DLY_MODE           SF_CTRL_SF_AES_DLY_MODE\n#define SF_CTRL_SF_AES_DLY_MODE_POS       (19U)\n#define SF_CTRL_SF_AES_DLY_MODE_LEN       (1U)\n#define SF_CTRL_SF_AES_DLY_MODE_MSK       (((1U << SF_CTRL_SF_AES_DLY_MODE_LEN) - 1) << SF_CTRL_SF_AES_DLY_MODE_POS)\n#define SF_CTRL_SF_AES_DLY_MODE_UMSK      (~(((1U << SF_CTRL_SF_AES_DLY_MODE_LEN) - 1) << SF_CTRL_SF_AES_DLY_MODE_POS))\n#define SF_CTRL_SF_AES_DOUT_ENDIAN        SF_CTRL_SF_AES_DOUT_ENDIAN\n#define SF_CTRL_SF_AES_DOUT_ENDIAN_POS    (20U)\n#define SF_CTRL_SF_AES_DOUT_ENDIAN_LEN    (1U)\n#define SF_CTRL_SF_AES_DOUT_ENDIAN_MSK    (((1U << SF_CTRL_SF_AES_DOUT_ENDIAN_LEN) - 1) << SF_CTRL_SF_AES_DOUT_ENDIAN_POS)\n#define SF_CTRL_SF_AES_DOUT_ENDIAN_UMSK   (~(((1U << SF_CTRL_SF_AES_DOUT_ENDIAN_LEN) - 1) << SF_CTRL_SF_AES_DOUT_ENDIAN_POS))\n#define SF_CTRL_SF_AES_CTR_PLUS_EN        SF_CTRL_SF_AES_CTR_PLUS_EN\n#define SF_CTRL_SF_AES_CTR_PLUS_EN_POS    (21U)\n#define SF_CTRL_SF_AES_CTR_PLUS_EN_LEN    (1U)\n#define SF_CTRL_SF_AES_CTR_PLUS_EN_MSK    (((1U << SF_CTRL_SF_AES_CTR_PLUS_EN_LEN) - 1) << SF_CTRL_SF_AES_CTR_PLUS_EN_POS)\n#define SF_CTRL_SF_AES_CTR_PLUS_EN_UMSK   (~(((1U << SF_CTRL_SF_AES_CTR_PLUS_EN_LEN) - 1) << SF_CTRL_SF_AES_CTR_PLUS_EN_POS))\n#define SF_CTRL_SF_AES_KEY_ENDIAN         SF_CTRL_SF_AES_KEY_ENDIAN\n#define SF_CTRL_SF_AES_KEY_ENDIAN_POS     (22U)\n#define SF_CTRL_SF_AES_KEY_ENDIAN_LEN     (1U)\n#define SF_CTRL_SF_AES_KEY_ENDIAN_MSK     (((1U << SF_CTRL_SF_AES_KEY_ENDIAN_LEN) - 1) << SF_CTRL_SF_AES_KEY_ENDIAN_POS)\n#define SF_CTRL_SF_AES_KEY_ENDIAN_UMSK    (~(((1U << SF_CTRL_SF_AES_KEY_ENDIAN_LEN) - 1) << SF_CTRL_SF_AES_KEY_ENDIAN_POS))\n#define SF_CTRL_SF_AES_IV_ENDIAN          SF_CTRL_SF_AES_IV_ENDIAN\n#define SF_CTRL_SF_AES_IV_ENDIAN_POS      (23U)\n#define SF_CTRL_SF_AES_IV_ENDIAN_LEN      (1U)\n#define SF_CTRL_SF_AES_IV_ENDIAN_MSK      (((1U << SF_CTRL_SF_AES_IV_ENDIAN_LEN) - 1) << SF_CTRL_SF_AES_IV_ENDIAN_POS)\n#define SF_CTRL_SF_AES_IV_ENDIAN_UMSK     (~(((1U << SF_CTRL_SF_AES_IV_ENDIAN_LEN) - 1) << SF_CTRL_SF_AES_IV_ENDIAN_POS))\n#define SF_CTRL_SF_ID                     SF_CTRL_SF_ID\n#define SF_CTRL_SF_ID_POS                 (24U)\n#define SF_CTRL_SF_ID_LEN                 (8U)\n#define SF_CTRL_SF_ID_MSK                 (((1U << SF_CTRL_SF_ID_LEN) - 1) << SF_CTRL_SF_ID_POS)\n#define SF_CTRL_SF_ID_UMSK                (~(((1U << SF_CTRL_SF_ID_LEN) - 1) << SF_CTRL_SF_ID_POS))\n\n/* 0x4 : sf_ctrl_1 */\n#define SF_CTRL_1_OFFSET                (0x4)\n#define SF_CTRL_SF_IF_SR_PAT_MASK       SF_CTRL_SF_IF_SR_PAT_MASK\n#define SF_CTRL_SF_IF_SR_PAT_MASK_POS   (0U)\n#define SF_CTRL_SF_IF_SR_PAT_MASK_LEN   (8U)\n#define SF_CTRL_SF_IF_SR_PAT_MASK_MSK   (((1U << SF_CTRL_SF_IF_SR_PAT_MASK_LEN) - 1) << SF_CTRL_SF_IF_SR_PAT_MASK_POS)\n#define SF_CTRL_SF_IF_SR_PAT_MASK_UMSK  (~(((1U << SF_CTRL_SF_IF_SR_PAT_MASK_LEN) - 1) << SF_CTRL_SF_IF_SR_PAT_MASK_POS))\n#define SF_CTRL_SF_IF_SR_PAT            SF_CTRL_SF_IF_SR_PAT\n#define SF_CTRL_SF_IF_SR_PAT_POS        (8U)\n#define SF_CTRL_SF_IF_SR_PAT_LEN        (8U)\n#define SF_CTRL_SF_IF_SR_PAT_MSK        (((1U << SF_CTRL_SF_IF_SR_PAT_LEN) - 1) << SF_CTRL_SF_IF_SR_PAT_POS)\n#define SF_CTRL_SF_IF_SR_PAT_UMSK       (~(((1U << SF_CTRL_SF_IF_SR_PAT_LEN) - 1) << SF_CTRL_SF_IF_SR_PAT_POS))\n#define SF_CTRL_SF_IF_SR_INT            SF_CTRL_SF_IF_SR_INT\n#define SF_CTRL_SF_IF_SR_INT_POS        (16U)\n#define SF_CTRL_SF_IF_SR_INT_LEN        (1U)\n#define SF_CTRL_SF_IF_SR_INT_MSK        (((1U << SF_CTRL_SF_IF_SR_INT_LEN) - 1) << SF_CTRL_SF_IF_SR_INT_POS)\n#define SF_CTRL_SF_IF_SR_INT_UMSK       (~(((1U << SF_CTRL_SF_IF_SR_INT_LEN) - 1) << SF_CTRL_SF_IF_SR_INT_POS))\n#define SF_CTRL_SF_IF_SR_INT_EN         SF_CTRL_SF_IF_SR_INT_EN\n#define SF_CTRL_SF_IF_SR_INT_EN_POS     (17U)\n#define SF_CTRL_SF_IF_SR_INT_EN_LEN     (1U)\n#define SF_CTRL_SF_IF_SR_INT_EN_MSK     (((1U << SF_CTRL_SF_IF_SR_INT_EN_LEN) - 1) << SF_CTRL_SF_IF_SR_INT_EN_POS)\n#define SF_CTRL_SF_IF_SR_INT_EN_UMSK    (~(((1U << SF_CTRL_SF_IF_SR_INT_EN_LEN) - 1) << SF_CTRL_SF_IF_SR_INT_EN_POS))\n#define SF_CTRL_SF_IF_SR_INT_SET        SF_CTRL_SF_IF_SR_INT_SET\n#define SF_CTRL_SF_IF_SR_INT_SET_POS    (18U)\n#define SF_CTRL_SF_IF_SR_INT_SET_LEN    (1U)\n#define SF_CTRL_SF_IF_SR_INT_SET_MSK    (((1U << SF_CTRL_SF_IF_SR_INT_SET_LEN) - 1) << SF_CTRL_SF_IF_SR_INT_SET_POS)\n#define SF_CTRL_SF_IF_SR_INT_SET_UMSK   (~(((1U << SF_CTRL_SF_IF_SR_INT_SET_LEN) - 1) << SF_CTRL_SF_IF_SR_INT_SET_POS))\n#define SF_CTRL_SF_IF_0_ACK_LAT         SF_CTRL_SF_IF_0_ACK_LAT\n#define SF_CTRL_SF_IF_0_ACK_LAT_POS     (20U)\n#define SF_CTRL_SF_IF_0_ACK_LAT_LEN     (3U)\n#define SF_CTRL_SF_IF_0_ACK_LAT_MSK     (((1U << SF_CTRL_SF_IF_0_ACK_LAT_LEN) - 1) << SF_CTRL_SF_IF_0_ACK_LAT_POS)\n#define SF_CTRL_SF_IF_0_ACK_LAT_UMSK    (~(((1U << SF_CTRL_SF_IF_0_ACK_LAT_LEN) - 1) << SF_CTRL_SF_IF_0_ACK_LAT_POS))\n#define SF_CTRL_SF_IF_REG_HOLD          SF_CTRL_SF_IF_REG_HOLD\n#define SF_CTRL_SF_IF_REG_HOLD_POS      (24U)\n#define SF_CTRL_SF_IF_REG_HOLD_LEN      (1U)\n#define SF_CTRL_SF_IF_REG_HOLD_MSK      (((1U << SF_CTRL_SF_IF_REG_HOLD_LEN) - 1) << SF_CTRL_SF_IF_REG_HOLD_POS)\n#define SF_CTRL_SF_IF_REG_HOLD_UMSK     (~(((1U << SF_CTRL_SF_IF_REG_HOLD_LEN) - 1) << SF_CTRL_SF_IF_REG_HOLD_POS))\n#define SF_CTRL_SF_IF_REG_WP            SF_CTRL_SF_IF_REG_WP\n#define SF_CTRL_SF_IF_REG_WP_POS        (25U)\n#define SF_CTRL_SF_IF_REG_WP_LEN        (1U)\n#define SF_CTRL_SF_IF_REG_WP_MSK        (((1U << SF_CTRL_SF_IF_REG_WP_LEN) - 1) << SF_CTRL_SF_IF_REG_WP_POS)\n#define SF_CTRL_SF_IF_REG_WP_UMSK       (~(((1U << SF_CTRL_SF_IF_REG_WP_LEN) - 1) << SF_CTRL_SF_IF_REG_WP_POS))\n#define SF_CTRL_SF_AHB2SIF_STOPPED      SF_CTRL_SF_AHB2SIF_STOPPED\n#define SF_CTRL_SF_AHB2SIF_STOPPED_POS  (26U)\n#define SF_CTRL_SF_AHB2SIF_STOPPED_LEN  (1U)\n#define SF_CTRL_SF_AHB2SIF_STOPPED_MSK  (((1U << SF_CTRL_SF_AHB2SIF_STOPPED_LEN) - 1) << SF_CTRL_SF_AHB2SIF_STOPPED_POS)\n#define SF_CTRL_SF_AHB2SIF_STOPPED_UMSK (~(((1U << SF_CTRL_SF_AHB2SIF_STOPPED_LEN) - 1) << SF_CTRL_SF_AHB2SIF_STOPPED_POS))\n#define SF_CTRL_SF_AHB2SIF_STOP         SF_CTRL_SF_AHB2SIF_STOP\n#define SF_CTRL_SF_AHB2SIF_STOP_POS     (27U)\n#define SF_CTRL_SF_AHB2SIF_STOP_LEN     (1U)\n#define SF_CTRL_SF_AHB2SIF_STOP_MSK     (((1U << SF_CTRL_SF_AHB2SIF_STOP_LEN) - 1) << SF_CTRL_SF_AHB2SIF_STOP_POS)\n#define SF_CTRL_SF_AHB2SIF_STOP_UMSK    (~(((1U << SF_CTRL_SF_AHB2SIF_STOP_LEN) - 1) << SF_CTRL_SF_AHB2SIF_STOP_POS))\n#define SF_CTRL_SF_IF_FN_SEL            SF_CTRL_SF_IF_FN_SEL\n#define SF_CTRL_SF_IF_FN_SEL_POS        (28U)\n#define SF_CTRL_SF_IF_FN_SEL_LEN        (1U)\n#define SF_CTRL_SF_IF_FN_SEL_MSK        (((1U << SF_CTRL_SF_IF_FN_SEL_LEN) - 1) << SF_CTRL_SF_IF_FN_SEL_POS)\n#define SF_CTRL_SF_IF_FN_SEL_UMSK       (~(((1U << SF_CTRL_SF_IF_FN_SEL_LEN) - 1) << SF_CTRL_SF_IF_FN_SEL_POS))\n#define SF_CTRL_SF_IF_EN                SF_CTRL_SF_IF_EN\n#define SF_CTRL_SF_IF_EN_POS            (29U)\n#define SF_CTRL_SF_IF_EN_LEN            (1U)\n#define SF_CTRL_SF_IF_EN_MSK            (((1U << SF_CTRL_SF_IF_EN_LEN) - 1) << SF_CTRL_SF_IF_EN_POS)\n#define SF_CTRL_SF_IF_EN_UMSK           (~(((1U << SF_CTRL_SF_IF_EN_LEN) - 1) << SF_CTRL_SF_IF_EN_POS))\n#define SF_CTRL_SF_AHB2SIF_EN           SF_CTRL_SF_AHB2SIF_EN\n#define SF_CTRL_SF_AHB2SIF_EN_POS       (30U)\n#define SF_CTRL_SF_AHB2SIF_EN_LEN       (1U)\n#define SF_CTRL_SF_AHB2SIF_EN_MSK       (((1U << SF_CTRL_SF_AHB2SIF_EN_LEN) - 1) << SF_CTRL_SF_AHB2SIF_EN_POS)\n#define SF_CTRL_SF_AHB2SIF_EN_UMSK      (~(((1U << SF_CTRL_SF_AHB2SIF_EN_LEN) - 1) << SF_CTRL_SF_AHB2SIF_EN_POS))\n#define SF_CTRL_SF_AHB2SRAM_EN          SF_CTRL_SF_AHB2SRAM_EN\n#define SF_CTRL_SF_AHB2SRAM_EN_POS      (31U)\n#define SF_CTRL_SF_AHB2SRAM_EN_LEN      (1U)\n#define SF_CTRL_SF_AHB2SRAM_EN_MSK      (((1U << SF_CTRL_SF_AHB2SRAM_EN_LEN) - 1) << SF_CTRL_SF_AHB2SRAM_EN_POS)\n#define SF_CTRL_SF_AHB2SRAM_EN_UMSK     (~(((1U << SF_CTRL_SF_AHB2SRAM_EN_LEN) - 1) << SF_CTRL_SF_AHB2SRAM_EN_POS))\n\n/* 0x8 : sf_if_sahb_0 */\n#define SF_CTRL_SF_IF_SAHB_0_OFFSET      (0x8)\n#define SF_CTRL_SF_IF_BUSY               SF_CTRL_SF_IF_BUSY\n#define SF_CTRL_SF_IF_BUSY_POS           (0U)\n#define SF_CTRL_SF_IF_BUSY_LEN           (1U)\n#define SF_CTRL_SF_IF_BUSY_MSK           (((1U << SF_CTRL_SF_IF_BUSY_LEN) - 1) << SF_CTRL_SF_IF_BUSY_POS)\n#define SF_CTRL_SF_IF_BUSY_UMSK          (~(((1U << SF_CTRL_SF_IF_BUSY_LEN) - 1) << SF_CTRL_SF_IF_BUSY_POS))\n#define SF_CTRL_SF_IF_0_TRIG             SF_CTRL_SF_IF_0_TRIG\n#define SF_CTRL_SF_IF_0_TRIG_POS         (1U)\n#define SF_CTRL_SF_IF_0_TRIG_LEN         (1U)\n#define SF_CTRL_SF_IF_0_TRIG_MSK         (((1U << SF_CTRL_SF_IF_0_TRIG_LEN) - 1) << SF_CTRL_SF_IF_0_TRIG_POS)\n#define SF_CTRL_SF_IF_0_TRIG_UMSK        (~(((1U << SF_CTRL_SF_IF_0_TRIG_LEN) - 1) << SF_CTRL_SF_IF_0_TRIG_POS))\n#define SF_CTRL_SF_IF_0_DAT_BYTE         SF_CTRL_SF_IF_0_DAT_BYTE\n#define SF_CTRL_SF_IF_0_DAT_BYTE_POS     (2U)\n#define SF_CTRL_SF_IF_0_DAT_BYTE_LEN     (10U)\n#define SF_CTRL_SF_IF_0_DAT_BYTE_MSK     (((1U << SF_CTRL_SF_IF_0_DAT_BYTE_LEN) - 1) << SF_CTRL_SF_IF_0_DAT_BYTE_POS)\n#define SF_CTRL_SF_IF_0_DAT_BYTE_UMSK    (~(((1U << SF_CTRL_SF_IF_0_DAT_BYTE_LEN) - 1) << SF_CTRL_SF_IF_0_DAT_BYTE_POS))\n#define SF_CTRL_SF_IF_0_DMY_BYTE         SF_CTRL_SF_IF_0_DMY_BYTE\n#define SF_CTRL_SF_IF_0_DMY_BYTE_POS     (12U)\n#define SF_CTRL_SF_IF_0_DMY_BYTE_LEN     (5U)\n#define SF_CTRL_SF_IF_0_DMY_BYTE_MSK     (((1U << SF_CTRL_SF_IF_0_DMY_BYTE_LEN) - 1) << SF_CTRL_SF_IF_0_DMY_BYTE_POS)\n#define SF_CTRL_SF_IF_0_DMY_BYTE_UMSK    (~(((1U << SF_CTRL_SF_IF_0_DMY_BYTE_LEN) - 1) << SF_CTRL_SF_IF_0_DMY_BYTE_POS))\n#define SF_CTRL_SF_IF_0_ADR_BYTE         SF_CTRL_SF_IF_0_ADR_BYTE\n#define SF_CTRL_SF_IF_0_ADR_BYTE_POS     (17U)\n#define SF_CTRL_SF_IF_0_ADR_BYTE_LEN     (3U)\n#define SF_CTRL_SF_IF_0_ADR_BYTE_MSK     (((1U << SF_CTRL_SF_IF_0_ADR_BYTE_LEN) - 1) << SF_CTRL_SF_IF_0_ADR_BYTE_POS)\n#define SF_CTRL_SF_IF_0_ADR_BYTE_UMSK    (~(((1U << SF_CTRL_SF_IF_0_ADR_BYTE_LEN) - 1) << SF_CTRL_SF_IF_0_ADR_BYTE_POS))\n#define SF_CTRL_SF_IF_0_CMD_BYTE         SF_CTRL_SF_IF_0_CMD_BYTE\n#define SF_CTRL_SF_IF_0_CMD_BYTE_POS     (20U)\n#define SF_CTRL_SF_IF_0_CMD_BYTE_LEN     (3U)\n#define SF_CTRL_SF_IF_0_CMD_BYTE_MSK     (((1U << SF_CTRL_SF_IF_0_CMD_BYTE_LEN) - 1) << SF_CTRL_SF_IF_0_CMD_BYTE_POS)\n#define SF_CTRL_SF_IF_0_CMD_BYTE_UMSK    (~(((1U << SF_CTRL_SF_IF_0_CMD_BYTE_LEN) - 1) << SF_CTRL_SF_IF_0_CMD_BYTE_POS))\n#define SF_CTRL_SF_IF_0_DAT_RW           SF_CTRL_SF_IF_0_DAT_RW\n#define SF_CTRL_SF_IF_0_DAT_RW_POS       (23U)\n#define SF_CTRL_SF_IF_0_DAT_RW_LEN       (1U)\n#define SF_CTRL_SF_IF_0_DAT_RW_MSK       (((1U << SF_CTRL_SF_IF_0_DAT_RW_LEN) - 1) << SF_CTRL_SF_IF_0_DAT_RW_POS)\n#define SF_CTRL_SF_IF_0_DAT_RW_UMSK      (~(((1U << SF_CTRL_SF_IF_0_DAT_RW_LEN) - 1) << SF_CTRL_SF_IF_0_DAT_RW_POS))\n#define SF_CTRL_SF_IF_0_DAT_EN           SF_CTRL_SF_IF_0_DAT_EN\n#define SF_CTRL_SF_IF_0_DAT_EN_POS       (24U)\n#define SF_CTRL_SF_IF_0_DAT_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_0_DAT_EN_MSK       (((1U << SF_CTRL_SF_IF_0_DAT_EN_LEN) - 1) << SF_CTRL_SF_IF_0_DAT_EN_POS)\n#define SF_CTRL_SF_IF_0_DAT_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_0_DAT_EN_LEN) - 1) << SF_CTRL_SF_IF_0_DAT_EN_POS))\n#define SF_CTRL_SF_IF_0_DMY_EN           SF_CTRL_SF_IF_0_DMY_EN\n#define SF_CTRL_SF_IF_0_DMY_EN_POS       (25U)\n#define SF_CTRL_SF_IF_0_DMY_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_0_DMY_EN_MSK       (((1U << SF_CTRL_SF_IF_0_DMY_EN_LEN) - 1) << SF_CTRL_SF_IF_0_DMY_EN_POS)\n#define SF_CTRL_SF_IF_0_DMY_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_0_DMY_EN_LEN) - 1) << SF_CTRL_SF_IF_0_DMY_EN_POS))\n#define SF_CTRL_SF_IF_0_ADR_EN           SF_CTRL_SF_IF_0_ADR_EN\n#define SF_CTRL_SF_IF_0_ADR_EN_POS       (26U)\n#define SF_CTRL_SF_IF_0_ADR_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_0_ADR_EN_MSK       (((1U << SF_CTRL_SF_IF_0_ADR_EN_LEN) - 1) << SF_CTRL_SF_IF_0_ADR_EN_POS)\n#define SF_CTRL_SF_IF_0_ADR_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_0_ADR_EN_LEN) - 1) << SF_CTRL_SF_IF_0_ADR_EN_POS))\n#define SF_CTRL_SF_IF_0_CMD_EN           SF_CTRL_SF_IF_0_CMD_EN\n#define SF_CTRL_SF_IF_0_CMD_EN_POS       (27U)\n#define SF_CTRL_SF_IF_0_CMD_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_0_CMD_EN_MSK       (((1U << SF_CTRL_SF_IF_0_CMD_EN_LEN) - 1) << SF_CTRL_SF_IF_0_CMD_EN_POS)\n#define SF_CTRL_SF_IF_0_CMD_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_0_CMD_EN_LEN) - 1) << SF_CTRL_SF_IF_0_CMD_EN_POS))\n#define SF_CTRL_SF_IF_0_SPI_MODE         SF_CTRL_SF_IF_0_SPI_MODE\n#define SF_CTRL_SF_IF_0_SPI_MODE_POS     (28U)\n#define SF_CTRL_SF_IF_0_SPI_MODE_LEN     (3U)\n#define SF_CTRL_SF_IF_0_SPI_MODE_MSK     (((1U << SF_CTRL_SF_IF_0_SPI_MODE_LEN) - 1) << SF_CTRL_SF_IF_0_SPI_MODE_POS)\n#define SF_CTRL_SF_IF_0_SPI_MODE_UMSK    (~(((1U << SF_CTRL_SF_IF_0_SPI_MODE_LEN) - 1) << SF_CTRL_SF_IF_0_SPI_MODE_POS))\n#define SF_CTRL_SF_IF_0_QPI_MODE_EN      SF_CTRL_SF_IF_0_QPI_MODE_EN\n#define SF_CTRL_SF_IF_0_QPI_MODE_EN_POS  (31U)\n#define SF_CTRL_SF_IF_0_QPI_MODE_EN_LEN  (1U)\n#define SF_CTRL_SF_IF_0_QPI_MODE_EN_MSK  (((1U << SF_CTRL_SF_IF_0_QPI_MODE_EN_LEN) - 1) << SF_CTRL_SF_IF_0_QPI_MODE_EN_POS)\n#define SF_CTRL_SF_IF_0_QPI_MODE_EN_UMSK (~(((1U << SF_CTRL_SF_IF_0_QPI_MODE_EN_LEN) - 1) << SF_CTRL_SF_IF_0_QPI_MODE_EN_POS))\n\n/* 0xC : sf_if_sahb_1 */\n#define SF_CTRL_SF_IF_SAHB_1_OFFSET    (0xC)\n#define SF_CTRL_SF_IF_0_CMD_BUF_0      SF_CTRL_SF_IF_0_CMD_BUF_0\n#define SF_CTRL_SF_IF_0_CMD_BUF_0_POS  (0U)\n#define SF_CTRL_SF_IF_0_CMD_BUF_0_LEN  (32U)\n#define SF_CTRL_SF_IF_0_CMD_BUF_0_MSK  (((1U << SF_CTRL_SF_IF_0_CMD_BUF_0_LEN) - 1) << SF_CTRL_SF_IF_0_CMD_BUF_0_POS)\n#define SF_CTRL_SF_IF_0_CMD_BUF_0_UMSK (~(((1U << SF_CTRL_SF_IF_0_CMD_BUF_0_LEN) - 1) << SF_CTRL_SF_IF_0_CMD_BUF_0_POS))\n\n/* 0x10 : sf_if_sahb_2 */\n#define SF_CTRL_SF_IF_SAHB_2_OFFSET    (0x10)\n#define SF_CTRL_SF_IF_0_CMD_BUF_1      SF_CTRL_SF_IF_0_CMD_BUF_1\n#define SF_CTRL_SF_IF_0_CMD_BUF_1_POS  (0U)\n#define SF_CTRL_SF_IF_0_CMD_BUF_1_LEN  (32U)\n#define SF_CTRL_SF_IF_0_CMD_BUF_1_MSK  (((1U << SF_CTRL_SF_IF_0_CMD_BUF_1_LEN) - 1) << SF_CTRL_SF_IF_0_CMD_BUF_1_POS)\n#define SF_CTRL_SF_IF_0_CMD_BUF_1_UMSK (~(((1U << SF_CTRL_SF_IF_0_CMD_BUF_1_LEN) - 1) << SF_CTRL_SF_IF_0_CMD_BUF_1_POS))\n\n/* 0x14 : sf_if_iahb_0 */\n#define SF_CTRL_SF_IF_IAHB_0_OFFSET      (0x14)\n#define SF_CTRL_SF_IF_1_DMY_BYTE         SF_CTRL_SF_IF_1_DMY_BYTE\n#define SF_CTRL_SF_IF_1_DMY_BYTE_POS     (12U)\n#define SF_CTRL_SF_IF_1_DMY_BYTE_LEN     (5U)\n#define SF_CTRL_SF_IF_1_DMY_BYTE_MSK     (((1U << SF_CTRL_SF_IF_1_DMY_BYTE_LEN) - 1) << SF_CTRL_SF_IF_1_DMY_BYTE_POS)\n#define SF_CTRL_SF_IF_1_DMY_BYTE_UMSK    (~(((1U << SF_CTRL_SF_IF_1_DMY_BYTE_LEN) - 1) << SF_CTRL_SF_IF_1_DMY_BYTE_POS))\n#define SF_CTRL_SF_IF_1_ADR_BYTE         SF_CTRL_SF_IF_1_ADR_BYTE\n#define SF_CTRL_SF_IF_1_ADR_BYTE_POS     (17U)\n#define SF_CTRL_SF_IF_1_ADR_BYTE_LEN     (3U)\n#define SF_CTRL_SF_IF_1_ADR_BYTE_MSK     (((1U << SF_CTRL_SF_IF_1_ADR_BYTE_LEN) - 1) << SF_CTRL_SF_IF_1_ADR_BYTE_POS)\n#define SF_CTRL_SF_IF_1_ADR_BYTE_UMSK    (~(((1U << SF_CTRL_SF_IF_1_ADR_BYTE_LEN) - 1) << SF_CTRL_SF_IF_1_ADR_BYTE_POS))\n#define SF_CTRL_SF_IF_1_CMD_BYTE         SF_CTRL_SF_IF_1_CMD_BYTE\n#define SF_CTRL_SF_IF_1_CMD_BYTE_POS     (20U)\n#define SF_CTRL_SF_IF_1_CMD_BYTE_LEN     (3U)\n#define SF_CTRL_SF_IF_1_CMD_BYTE_MSK     (((1U << SF_CTRL_SF_IF_1_CMD_BYTE_LEN) - 1) << SF_CTRL_SF_IF_1_CMD_BYTE_POS)\n#define SF_CTRL_SF_IF_1_CMD_BYTE_UMSK    (~(((1U << SF_CTRL_SF_IF_1_CMD_BYTE_LEN) - 1) << SF_CTRL_SF_IF_1_CMD_BYTE_POS))\n#define SF_CTRL_SF_IF_1_DAT_RW           SF_CTRL_SF_IF_1_DAT_RW\n#define SF_CTRL_SF_IF_1_DAT_RW_POS       (23U)\n#define SF_CTRL_SF_IF_1_DAT_RW_LEN       (1U)\n#define SF_CTRL_SF_IF_1_DAT_RW_MSK       (((1U << SF_CTRL_SF_IF_1_DAT_RW_LEN) - 1) << SF_CTRL_SF_IF_1_DAT_RW_POS)\n#define SF_CTRL_SF_IF_1_DAT_RW_UMSK      (~(((1U << SF_CTRL_SF_IF_1_DAT_RW_LEN) - 1) << SF_CTRL_SF_IF_1_DAT_RW_POS))\n#define SF_CTRL_SF_IF_1_DAT_EN           SF_CTRL_SF_IF_1_DAT_EN\n#define SF_CTRL_SF_IF_1_DAT_EN_POS       (24U)\n#define SF_CTRL_SF_IF_1_DAT_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_1_DAT_EN_MSK       (((1U << SF_CTRL_SF_IF_1_DAT_EN_LEN) - 1) << SF_CTRL_SF_IF_1_DAT_EN_POS)\n#define SF_CTRL_SF_IF_1_DAT_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_1_DAT_EN_LEN) - 1) << SF_CTRL_SF_IF_1_DAT_EN_POS))\n#define SF_CTRL_SF_IF_1_DMY_EN           SF_CTRL_SF_IF_1_DMY_EN\n#define SF_CTRL_SF_IF_1_DMY_EN_POS       (25U)\n#define SF_CTRL_SF_IF_1_DMY_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_1_DMY_EN_MSK       (((1U << SF_CTRL_SF_IF_1_DMY_EN_LEN) - 1) << SF_CTRL_SF_IF_1_DMY_EN_POS)\n#define SF_CTRL_SF_IF_1_DMY_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_1_DMY_EN_LEN) - 1) << SF_CTRL_SF_IF_1_DMY_EN_POS))\n#define SF_CTRL_SF_IF_1_ADR_EN           SF_CTRL_SF_IF_1_ADR_EN\n#define SF_CTRL_SF_IF_1_ADR_EN_POS       (26U)\n#define SF_CTRL_SF_IF_1_ADR_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_1_ADR_EN_MSK       (((1U << SF_CTRL_SF_IF_1_ADR_EN_LEN) - 1) << SF_CTRL_SF_IF_1_ADR_EN_POS)\n#define SF_CTRL_SF_IF_1_ADR_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_1_ADR_EN_LEN) - 1) << SF_CTRL_SF_IF_1_ADR_EN_POS))\n#define SF_CTRL_SF_IF_1_CMD_EN           SF_CTRL_SF_IF_1_CMD_EN\n#define SF_CTRL_SF_IF_1_CMD_EN_POS       (27U)\n#define SF_CTRL_SF_IF_1_CMD_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_1_CMD_EN_MSK       (((1U << SF_CTRL_SF_IF_1_CMD_EN_LEN) - 1) << SF_CTRL_SF_IF_1_CMD_EN_POS)\n#define SF_CTRL_SF_IF_1_CMD_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_1_CMD_EN_LEN) - 1) << SF_CTRL_SF_IF_1_CMD_EN_POS))\n#define SF_CTRL_SF_IF_1_SPI_MODE         SF_CTRL_SF_IF_1_SPI_MODE\n#define SF_CTRL_SF_IF_1_SPI_MODE_POS     (28U)\n#define SF_CTRL_SF_IF_1_SPI_MODE_LEN     (3U)\n#define SF_CTRL_SF_IF_1_SPI_MODE_MSK     (((1U << SF_CTRL_SF_IF_1_SPI_MODE_LEN) - 1) << SF_CTRL_SF_IF_1_SPI_MODE_POS)\n#define SF_CTRL_SF_IF_1_SPI_MODE_UMSK    (~(((1U << SF_CTRL_SF_IF_1_SPI_MODE_LEN) - 1) << SF_CTRL_SF_IF_1_SPI_MODE_POS))\n#define SF_CTRL_SF_IF_1_QPI_MODE_EN      SF_CTRL_SF_IF_1_QPI_MODE_EN\n#define SF_CTRL_SF_IF_1_QPI_MODE_EN_POS  (31U)\n#define SF_CTRL_SF_IF_1_QPI_MODE_EN_LEN  (1U)\n#define SF_CTRL_SF_IF_1_QPI_MODE_EN_MSK  (((1U << SF_CTRL_SF_IF_1_QPI_MODE_EN_LEN) - 1) << SF_CTRL_SF_IF_1_QPI_MODE_EN_POS)\n#define SF_CTRL_SF_IF_1_QPI_MODE_EN_UMSK (~(((1U << SF_CTRL_SF_IF_1_QPI_MODE_EN_LEN) - 1) << SF_CTRL_SF_IF_1_QPI_MODE_EN_POS))\n\n/* 0x18 : sf_if_iahb_1 */\n#define SF_CTRL_SF_IF_IAHB_1_OFFSET    (0x18)\n#define SF_CTRL_SF_IF_1_CMD_BUF_0      SF_CTRL_SF_IF_1_CMD_BUF_0\n#define SF_CTRL_SF_IF_1_CMD_BUF_0_POS  (0U)\n#define SF_CTRL_SF_IF_1_CMD_BUF_0_LEN  (32U)\n#define SF_CTRL_SF_IF_1_CMD_BUF_0_MSK  (((1U << SF_CTRL_SF_IF_1_CMD_BUF_0_LEN) - 1) << SF_CTRL_SF_IF_1_CMD_BUF_0_POS)\n#define SF_CTRL_SF_IF_1_CMD_BUF_0_UMSK (~(((1U << SF_CTRL_SF_IF_1_CMD_BUF_0_LEN) - 1) << SF_CTRL_SF_IF_1_CMD_BUF_0_POS))\n\n/* 0x1C : sf_if_iahb_2 */\n#define SF_CTRL_SF_IF_IAHB_2_OFFSET    (0x1C)\n#define SF_CTRL_SF_IF_1_CMD_BUF_1      SF_CTRL_SF_IF_1_CMD_BUF_1\n#define SF_CTRL_SF_IF_1_CMD_BUF_1_POS  (0U)\n#define SF_CTRL_SF_IF_1_CMD_BUF_1_LEN  (32U)\n#define SF_CTRL_SF_IF_1_CMD_BUF_1_MSK  (((1U << SF_CTRL_SF_IF_1_CMD_BUF_1_LEN) - 1) << SF_CTRL_SF_IF_1_CMD_BUF_1_POS)\n#define SF_CTRL_SF_IF_1_CMD_BUF_1_UMSK (~(((1U << SF_CTRL_SF_IF_1_CMD_BUF_1_LEN) - 1) << SF_CTRL_SF_IF_1_CMD_BUF_1_POS))\n\n/* 0x20 : sf_if_status_0 */\n#define SF_CTRL_SF_IF_STATUS_0_OFFSET (0x20)\n#define SF_CTRL_SF_IF_STATUS_0        SF_CTRL_SF_IF_STATUS_0\n#define SF_CTRL_SF_IF_STATUS_0_POS    (0U)\n#define SF_CTRL_SF_IF_STATUS_0_LEN    (32U)\n#define SF_CTRL_SF_IF_STATUS_0_MSK    (((1U << SF_CTRL_SF_IF_STATUS_0_LEN) - 1) << SF_CTRL_SF_IF_STATUS_0_POS)\n#define SF_CTRL_SF_IF_STATUS_0_UMSK   (~(((1U << SF_CTRL_SF_IF_STATUS_0_LEN) - 1) << SF_CTRL_SF_IF_STATUS_0_POS))\n\n/* 0x24 : sf_if_status_1 */\n#define SF_CTRL_SF_IF_STATUS_1_OFFSET (0x24)\n#define SF_CTRL_SF_IF_STATUS_1        SF_CTRL_SF_IF_STATUS_1\n#define SF_CTRL_SF_IF_STATUS_1_POS    (0U)\n#define SF_CTRL_SF_IF_STATUS_1_LEN    (32U)\n#define SF_CTRL_SF_IF_STATUS_1_MSK    (((1U << SF_CTRL_SF_IF_STATUS_1_LEN) - 1) << SF_CTRL_SF_IF_STATUS_1_POS)\n#define SF_CTRL_SF_IF_STATUS_1_UMSK   (~(((1U << SF_CTRL_SF_IF_STATUS_1_LEN) - 1) << SF_CTRL_SF_IF_STATUS_1_POS))\n\n/* 0x28 : sf_aes */\n#define SF_CTRL_SF_AES_OFFSET         (0x28)\n#define SF_CTRL_SF_AES_EN             SF_CTRL_SF_AES_EN\n#define SF_CTRL_SF_AES_EN_POS         (0U)\n#define SF_CTRL_SF_AES_EN_LEN         (1U)\n#define SF_CTRL_SF_AES_EN_MSK         (((1U << SF_CTRL_SF_AES_EN_LEN) - 1) << SF_CTRL_SF_AES_EN_POS)\n#define SF_CTRL_SF_AES_EN_UMSK        (~(((1U << SF_CTRL_SF_AES_EN_LEN) - 1) << SF_CTRL_SF_AES_EN_POS))\n#define SF_CTRL_SF_AES_MODE           SF_CTRL_SF_AES_MODE\n#define SF_CTRL_SF_AES_MODE_POS       (1U)\n#define SF_CTRL_SF_AES_MODE_LEN       (2U)\n#define SF_CTRL_SF_AES_MODE_MSK       (((1U << SF_CTRL_SF_AES_MODE_LEN) - 1) << SF_CTRL_SF_AES_MODE_POS)\n#define SF_CTRL_SF_AES_MODE_UMSK      (~(((1U << SF_CTRL_SF_AES_MODE_LEN) - 1) << SF_CTRL_SF_AES_MODE_POS))\n#define SF_CTRL_SF_AES_PREF_TRIG      SF_CTRL_SF_AES_PREF_TRIG\n#define SF_CTRL_SF_AES_PREF_TRIG_POS  (3U)\n#define SF_CTRL_SF_AES_PREF_TRIG_LEN  (1U)\n#define SF_CTRL_SF_AES_PREF_TRIG_MSK  (((1U << SF_CTRL_SF_AES_PREF_TRIG_LEN) - 1) << SF_CTRL_SF_AES_PREF_TRIG_POS)\n#define SF_CTRL_SF_AES_PREF_TRIG_UMSK (~(((1U << SF_CTRL_SF_AES_PREF_TRIG_LEN) - 1) << SF_CTRL_SF_AES_PREF_TRIG_POS))\n#define SF_CTRL_SF_AES_PREF_BUSY      SF_CTRL_SF_AES_PREF_BUSY\n#define SF_CTRL_SF_AES_PREF_BUSY_POS  (4U)\n#define SF_CTRL_SF_AES_PREF_BUSY_LEN  (1U)\n#define SF_CTRL_SF_AES_PREF_BUSY_MSK  (((1U << SF_CTRL_SF_AES_PREF_BUSY_LEN) - 1) << SF_CTRL_SF_AES_PREF_BUSY_POS)\n#define SF_CTRL_SF_AES_PREF_BUSY_UMSK (~(((1U << SF_CTRL_SF_AES_PREF_BUSY_LEN) - 1) << SF_CTRL_SF_AES_PREF_BUSY_POS))\n#define SF_CTRL_SF_AES_STATUS         SF_CTRL_SF_AES_STATUS\n#define SF_CTRL_SF_AES_STATUS_POS     (5U)\n#define SF_CTRL_SF_AES_STATUS_LEN     (27U)\n#define SF_CTRL_SF_AES_STATUS_MSK     (((1U << SF_CTRL_SF_AES_STATUS_LEN) - 1) << SF_CTRL_SF_AES_STATUS_POS)\n#define SF_CTRL_SF_AES_STATUS_UMSK    (~(((1U << SF_CTRL_SF_AES_STATUS_LEN) - 1) << SF_CTRL_SF_AES_STATUS_POS))\n\n/* 0x2C : sf_ahb2sif_status */\n#define SF_CTRL_SF_AHB2SIF_STATUS_OFFSET (0x2C)\n#define SF_CTRL_SF_AHB2SIF_STATUS        SF_CTRL_SF_AHB2SIF_STATUS\n#define SF_CTRL_SF_AHB2SIF_STATUS_POS    (0U)\n#define SF_CTRL_SF_AHB2SIF_STATUS_LEN    (32U)\n#define SF_CTRL_SF_AHB2SIF_STATUS_MSK    (((1U << SF_CTRL_SF_AHB2SIF_STATUS_LEN) - 1) << SF_CTRL_SF_AHB2SIF_STATUS_POS)\n#define SF_CTRL_SF_AHB2SIF_STATUS_UMSK   (~(((1U << SF_CTRL_SF_AHB2SIF_STATUS_LEN) - 1) << SF_CTRL_SF_AHB2SIF_STATUS_POS))\n\n/* 0x30 : sf_if_io_dly_0 */\n#define SF_CTRL_SF_IF_IO_DLY_0_OFFSET   (0x30)\n#define SF_CTRL_SF_CS_DLY_SEL           SF_CTRL_SF_CS_DLY_SEL\n#define SF_CTRL_SF_CS_DLY_SEL_POS       (0U)\n#define SF_CTRL_SF_CS_DLY_SEL_LEN       (2U)\n#define SF_CTRL_SF_CS_DLY_SEL_MSK       (((1U << SF_CTRL_SF_CS_DLY_SEL_LEN) - 1) << SF_CTRL_SF_CS_DLY_SEL_POS)\n#define SF_CTRL_SF_CS_DLY_SEL_UMSK      (~(((1U << SF_CTRL_SF_CS_DLY_SEL_LEN) - 1) << SF_CTRL_SF_CS_DLY_SEL_POS))\n#define SF_CTRL_SF_CS2_DLY_SEL          SF_CTRL_SF_CS2_DLY_SEL\n#define SF_CTRL_SF_CS2_DLY_SEL_POS      (2U)\n#define SF_CTRL_SF_CS2_DLY_SEL_LEN      (2U)\n#define SF_CTRL_SF_CS2_DLY_SEL_MSK      (((1U << SF_CTRL_SF_CS2_DLY_SEL_LEN) - 1) << SF_CTRL_SF_CS2_DLY_SEL_POS)\n#define SF_CTRL_SF_CS2_DLY_SEL_UMSK     (~(((1U << SF_CTRL_SF_CS2_DLY_SEL_LEN) - 1) << SF_CTRL_SF_CS2_DLY_SEL_POS))\n#define SF_CTRL_SF_CLK_OUT_DLY_SEL      SF_CTRL_SF_CLK_OUT_DLY_SEL\n#define SF_CTRL_SF_CLK_OUT_DLY_SEL_POS  (8U)\n#define SF_CTRL_SF_CLK_OUT_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF_CLK_OUT_DLY_SEL_MSK  (((1U << SF_CTRL_SF_CLK_OUT_DLY_SEL_LEN) - 1) << SF_CTRL_SF_CLK_OUT_DLY_SEL_POS)\n#define SF_CTRL_SF_CLK_OUT_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF_CLK_OUT_DLY_SEL_LEN) - 1) << SF_CTRL_SF_CLK_OUT_DLY_SEL_POS))\n#define SF_CTRL_SF_DQS_OE_DLY_SEL       SF_CTRL_SF_DQS_OE_DLY_SEL\n#define SF_CTRL_SF_DQS_OE_DLY_SEL_POS   (26U)\n#define SF_CTRL_SF_DQS_OE_DLY_SEL_LEN   (2U)\n#define SF_CTRL_SF_DQS_OE_DLY_SEL_MSK   (((1U << SF_CTRL_SF_DQS_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF_DQS_OE_DLY_SEL_POS)\n#define SF_CTRL_SF_DQS_OE_DLY_SEL_UMSK  (~(((1U << SF_CTRL_SF_DQS_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF_DQS_OE_DLY_SEL_POS))\n#define SF_CTRL_SF_DQS_DI_DLY_SEL       SF_CTRL_SF_DQS_DI_DLY_SEL\n#define SF_CTRL_SF_DQS_DI_DLY_SEL_POS   (28U)\n#define SF_CTRL_SF_DQS_DI_DLY_SEL_LEN   (2U)\n#define SF_CTRL_SF_DQS_DI_DLY_SEL_MSK   (((1U << SF_CTRL_SF_DQS_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF_DQS_DI_DLY_SEL_POS)\n#define SF_CTRL_SF_DQS_DI_DLY_SEL_UMSK  (~(((1U << SF_CTRL_SF_DQS_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF_DQS_DI_DLY_SEL_POS))\n#define SF_CTRL_SF_DQS_DO_DLY_SEL       SF_CTRL_SF_DQS_DO_DLY_SEL\n#define SF_CTRL_SF_DQS_DO_DLY_SEL_POS   (30U)\n#define SF_CTRL_SF_DQS_DO_DLY_SEL_LEN   (2U)\n#define SF_CTRL_SF_DQS_DO_DLY_SEL_MSK   (((1U << SF_CTRL_SF_DQS_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF_DQS_DO_DLY_SEL_POS)\n#define SF_CTRL_SF_DQS_DO_DLY_SEL_UMSK  (~(((1U << SF_CTRL_SF_DQS_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF_DQS_DO_DLY_SEL_POS))\n\n/* 0x34 : sf_if_io_dly_1 */\n#define SF_CTRL_SF_IF_IO_DLY_1_OFFSET   (0x34)\n#define SF_CTRL_SF_IO_0_OE_DLY_SEL      SF_CTRL_SF_IO_0_OE_DLY_SEL\n#define SF_CTRL_SF_IO_0_OE_DLY_SEL_POS  (0U)\n#define SF_CTRL_SF_IO_0_OE_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF_IO_0_OE_DLY_SEL_MSK  (((1U << SF_CTRL_SF_IO_0_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_0_OE_DLY_SEL_POS)\n#define SF_CTRL_SF_IO_0_OE_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF_IO_0_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_0_OE_DLY_SEL_POS))\n#define SF_CTRL_SF_IO_0_DI_DLY_SEL      SF_CTRL_SF_IO_0_DI_DLY_SEL\n#define SF_CTRL_SF_IO_0_DI_DLY_SEL_POS  (8U)\n#define SF_CTRL_SF_IO_0_DI_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF_IO_0_DI_DLY_SEL_MSK  (((1U << SF_CTRL_SF_IO_0_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_0_DI_DLY_SEL_POS)\n#define SF_CTRL_SF_IO_0_DI_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF_IO_0_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_0_DI_DLY_SEL_POS))\n#define SF_CTRL_SF_IO_0_DO_DLY_SEL      SF_CTRL_SF_IO_0_DO_DLY_SEL\n#define SF_CTRL_SF_IO_0_DO_DLY_SEL_POS  (16U)\n#define SF_CTRL_SF_IO_0_DO_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF_IO_0_DO_DLY_SEL_MSK  (((1U << SF_CTRL_SF_IO_0_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_0_DO_DLY_SEL_POS)\n#define SF_CTRL_SF_IO_0_DO_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF_IO_0_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_0_DO_DLY_SEL_POS))\n\n/* 0x38 : sf_if_io_dly_2 */\n#define SF_CTRL_SF_IF_IO_DLY_2_OFFSET   (0x38)\n#define SF_CTRL_SF_IO_1_OE_DLY_SEL      SF_CTRL_SF_IO_1_OE_DLY_SEL\n#define SF_CTRL_SF_IO_1_OE_DLY_SEL_POS  (0U)\n#define SF_CTRL_SF_IO_1_OE_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF_IO_1_OE_DLY_SEL_MSK  (((1U << SF_CTRL_SF_IO_1_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_1_OE_DLY_SEL_POS)\n#define SF_CTRL_SF_IO_1_OE_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF_IO_1_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_1_OE_DLY_SEL_POS))\n#define SF_CTRL_SF_IO_1_DI_DLY_SEL      SF_CTRL_SF_IO_1_DI_DLY_SEL\n#define SF_CTRL_SF_IO_1_DI_DLY_SEL_POS  (8U)\n#define SF_CTRL_SF_IO_1_DI_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF_IO_1_DI_DLY_SEL_MSK  (((1U << SF_CTRL_SF_IO_1_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_1_DI_DLY_SEL_POS)\n#define SF_CTRL_SF_IO_1_DI_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF_IO_1_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_1_DI_DLY_SEL_POS))\n#define SF_CTRL_SF_IO_1_DO_DLY_SEL      SF_CTRL_SF_IO_1_DO_DLY_SEL\n#define SF_CTRL_SF_IO_1_DO_DLY_SEL_POS  (16U)\n#define SF_CTRL_SF_IO_1_DO_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF_IO_1_DO_DLY_SEL_MSK  (((1U << SF_CTRL_SF_IO_1_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_1_DO_DLY_SEL_POS)\n#define SF_CTRL_SF_IO_1_DO_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF_IO_1_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_1_DO_DLY_SEL_POS))\n\n/* 0x3C : sf_if_io_dly_3 */\n#define SF_CTRL_SF_IF_IO_DLY_3_OFFSET   (0x3C)\n#define SF_CTRL_SF_IO_2_OE_DLY_SEL      SF_CTRL_SF_IO_2_OE_DLY_SEL\n#define SF_CTRL_SF_IO_2_OE_DLY_SEL_POS  (0U)\n#define SF_CTRL_SF_IO_2_OE_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF_IO_2_OE_DLY_SEL_MSK  (((1U << SF_CTRL_SF_IO_2_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_2_OE_DLY_SEL_POS)\n#define SF_CTRL_SF_IO_2_OE_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF_IO_2_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_2_OE_DLY_SEL_POS))\n#define SF_CTRL_SF_IO_2_DI_DLY_SEL      SF_CTRL_SF_IO_2_DI_DLY_SEL\n#define SF_CTRL_SF_IO_2_DI_DLY_SEL_POS  (8U)\n#define SF_CTRL_SF_IO_2_DI_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF_IO_2_DI_DLY_SEL_MSK  (((1U << SF_CTRL_SF_IO_2_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_2_DI_DLY_SEL_POS)\n#define SF_CTRL_SF_IO_2_DI_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF_IO_2_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_2_DI_DLY_SEL_POS))\n#define SF_CTRL_SF_IO_2_DO_DLY_SEL      SF_CTRL_SF_IO_2_DO_DLY_SEL\n#define SF_CTRL_SF_IO_2_DO_DLY_SEL_POS  (16U)\n#define SF_CTRL_SF_IO_2_DO_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF_IO_2_DO_DLY_SEL_MSK  (((1U << SF_CTRL_SF_IO_2_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_2_DO_DLY_SEL_POS)\n#define SF_CTRL_SF_IO_2_DO_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF_IO_2_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_2_DO_DLY_SEL_POS))\n\n/* 0x40 : sf_if_io_dly_4 */\n#define SF_CTRL_SF_IF_IO_DLY_4_OFFSET   (0x40)\n#define SF_CTRL_SF_IO_3_OE_DLY_SEL      SF_CTRL_SF_IO_3_OE_DLY_SEL\n#define SF_CTRL_SF_IO_3_OE_DLY_SEL_POS  (0U)\n#define SF_CTRL_SF_IO_3_OE_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF_IO_3_OE_DLY_SEL_MSK  (((1U << SF_CTRL_SF_IO_3_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_3_OE_DLY_SEL_POS)\n#define SF_CTRL_SF_IO_3_OE_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF_IO_3_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_3_OE_DLY_SEL_POS))\n#define SF_CTRL_SF_IO_3_DI_DLY_SEL      SF_CTRL_SF_IO_3_DI_DLY_SEL\n#define SF_CTRL_SF_IO_3_DI_DLY_SEL_POS  (8U)\n#define SF_CTRL_SF_IO_3_DI_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF_IO_3_DI_DLY_SEL_MSK  (((1U << SF_CTRL_SF_IO_3_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_3_DI_DLY_SEL_POS)\n#define SF_CTRL_SF_IO_3_DI_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF_IO_3_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_3_DI_DLY_SEL_POS))\n#define SF_CTRL_SF_IO_3_DO_DLY_SEL      SF_CTRL_SF_IO_3_DO_DLY_SEL\n#define SF_CTRL_SF_IO_3_DO_DLY_SEL_POS  (16U)\n#define SF_CTRL_SF_IO_3_DO_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF_IO_3_DO_DLY_SEL_MSK  (((1U << SF_CTRL_SF_IO_3_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_3_DO_DLY_SEL_POS)\n#define SF_CTRL_SF_IO_3_DO_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF_IO_3_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF_IO_3_DO_DLY_SEL_POS))\n\n/* 0x44 : sf_reserved */\n#define SF_CTRL_SF_RESERVED_OFFSET (0x44)\n#define SF_CTRL_SF_RESERVED        SF_CTRL_SF_RESERVED\n#define SF_CTRL_SF_RESERVED_POS    (0U)\n#define SF_CTRL_SF_RESERVED_LEN    (32U)\n#define SF_CTRL_SF_RESERVED_MSK    (((1U << SF_CTRL_SF_RESERVED_LEN) - 1) << SF_CTRL_SF_RESERVED_POS)\n#define SF_CTRL_SF_RESERVED_UMSK   (~(((1U << SF_CTRL_SF_RESERVED_LEN) - 1) << SF_CTRL_SF_RESERVED_POS))\n\n/* 0x48 : sf2_if_io_dly_0 */\n#define SF_CTRL_SF2_IF_IO_DLY_0_OFFSET   (0x48)\n#define SF_CTRL_SF2_CS_DLY_SEL           SF_CTRL_SF2_CS_DLY_SEL\n#define SF_CTRL_SF2_CS_DLY_SEL_POS       (0U)\n#define SF_CTRL_SF2_CS_DLY_SEL_LEN       (2U)\n#define SF_CTRL_SF2_CS_DLY_SEL_MSK       (((1U << SF_CTRL_SF2_CS_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_CS_DLY_SEL_POS)\n#define SF_CTRL_SF2_CS_DLY_SEL_UMSK      (~(((1U << SF_CTRL_SF2_CS_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_CS_DLY_SEL_POS))\n#define SF_CTRL_SF2_CS2_DLY_SEL          SF_CTRL_SF2_CS2_DLY_SEL\n#define SF_CTRL_SF2_CS2_DLY_SEL_POS      (2U)\n#define SF_CTRL_SF2_CS2_DLY_SEL_LEN      (2U)\n#define SF_CTRL_SF2_CS2_DLY_SEL_MSK      (((1U << SF_CTRL_SF2_CS2_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_CS2_DLY_SEL_POS)\n#define SF_CTRL_SF2_CS2_DLY_SEL_UMSK     (~(((1U << SF_CTRL_SF2_CS2_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_CS2_DLY_SEL_POS))\n#define SF_CTRL_SF2_CLK_OUT_DLY_SEL      SF_CTRL_SF2_CLK_OUT_DLY_SEL\n#define SF_CTRL_SF2_CLK_OUT_DLY_SEL_POS  (8U)\n#define SF_CTRL_SF2_CLK_OUT_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF2_CLK_OUT_DLY_SEL_MSK  (((1U << SF_CTRL_SF2_CLK_OUT_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_CLK_OUT_DLY_SEL_POS)\n#define SF_CTRL_SF2_CLK_OUT_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF2_CLK_OUT_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_CLK_OUT_DLY_SEL_POS))\n#define SF_CTRL_SF2_DQS_OE_DLY_SEL       SF_CTRL_SF2_DQS_OE_DLY_SEL\n#define SF_CTRL_SF2_DQS_OE_DLY_SEL_POS   (26U)\n#define SF_CTRL_SF2_DQS_OE_DLY_SEL_LEN   (2U)\n#define SF_CTRL_SF2_DQS_OE_DLY_SEL_MSK   (((1U << SF_CTRL_SF2_DQS_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_DQS_OE_DLY_SEL_POS)\n#define SF_CTRL_SF2_DQS_OE_DLY_SEL_UMSK  (~(((1U << SF_CTRL_SF2_DQS_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_DQS_OE_DLY_SEL_POS))\n#define SF_CTRL_SF2_DQS_DI_DLY_SEL       SF_CTRL_SF2_DQS_DI_DLY_SEL\n#define SF_CTRL_SF2_DQS_DI_DLY_SEL_POS   (28U)\n#define SF_CTRL_SF2_DQS_DI_DLY_SEL_LEN   (2U)\n#define SF_CTRL_SF2_DQS_DI_DLY_SEL_MSK   (((1U << SF_CTRL_SF2_DQS_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_DQS_DI_DLY_SEL_POS)\n#define SF_CTRL_SF2_DQS_DI_DLY_SEL_UMSK  (~(((1U << SF_CTRL_SF2_DQS_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_DQS_DI_DLY_SEL_POS))\n#define SF_CTRL_SF2_DQS_DO_DLY_SEL       SF_CTRL_SF2_DQS_DO_DLY_SEL\n#define SF_CTRL_SF2_DQS_DO_DLY_SEL_POS   (30U)\n#define SF_CTRL_SF2_DQS_DO_DLY_SEL_LEN   (2U)\n#define SF_CTRL_SF2_DQS_DO_DLY_SEL_MSK   (((1U << SF_CTRL_SF2_DQS_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_DQS_DO_DLY_SEL_POS)\n#define SF_CTRL_SF2_DQS_DO_DLY_SEL_UMSK  (~(((1U << SF_CTRL_SF2_DQS_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_DQS_DO_DLY_SEL_POS))\n\n/* 0x4C : sf2_if_io_dly_1 */\n#define SF_CTRL_SF2_IF_IO_DLY_1_OFFSET   (0x4C)\n#define SF_CTRL_SF2_IO_0_OE_DLY_SEL      SF_CTRL_SF2_IO_0_OE_DLY_SEL\n#define SF_CTRL_SF2_IO_0_OE_DLY_SEL_POS  (0U)\n#define SF_CTRL_SF2_IO_0_OE_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF2_IO_0_OE_DLY_SEL_MSK  (((1U << SF_CTRL_SF2_IO_0_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_0_OE_DLY_SEL_POS)\n#define SF_CTRL_SF2_IO_0_OE_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF2_IO_0_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_0_OE_DLY_SEL_POS))\n#define SF_CTRL_SF2_IO_0_DI_DLY_SEL      SF_CTRL_SF2_IO_0_DI_DLY_SEL\n#define SF_CTRL_SF2_IO_0_DI_DLY_SEL_POS  (8U)\n#define SF_CTRL_SF2_IO_0_DI_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF2_IO_0_DI_DLY_SEL_MSK  (((1U << SF_CTRL_SF2_IO_0_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_0_DI_DLY_SEL_POS)\n#define SF_CTRL_SF2_IO_0_DI_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF2_IO_0_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_0_DI_DLY_SEL_POS))\n#define SF_CTRL_SF2_IO_0_DO_DLY_SEL      SF_CTRL_SF2_IO_0_DO_DLY_SEL\n#define SF_CTRL_SF2_IO_0_DO_DLY_SEL_POS  (16U)\n#define SF_CTRL_SF2_IO_0_DO_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF2_IO_0_DO_DLY_SEL_MSK  (((1U << SF_CTRL_SF2_IO_0_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_0_DO_DLY_SEL_POS)\n#define SF_CTRL_SF2_IO_0_DO_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF2_IO_0_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_0_DO_DLY_SEL_POS))\n\n/* 0x50 : sf2_if_io_dly_2 */\n#define SF_CTRL_SF2_IF_IO_DLY_2_OFFSET   (0x50)\n#define SF_CTRL_SF2_IO_1_OE_DLY_SEL      SF_CTRL_SF2_IO_1_OE_DLY_SEL\n#define SF_CTRL_SF2_IO_1_OE_DLY_SEL_POS  (0U)\n#define SF_CTRL_SF2_IO_1_OE_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF2_IO_1_OE_DLY_SEL_MSK  (((1U << SF_CTRL_SF2_IO_1_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_1_OE_DLY_SEL_POS)\n#define SF_CTRL_SF2_IO_1_OE_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF2_IO_1_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_1_OE_DLY_SEL_POS))\n#define SF_CTRL_SF2_IO_1_DI_DLY_SEL      SF_CTRL_SF2_IO_1_DI_DLY_SEL\n#define SF_CTRL_SF2_IO_1_DI_DLY_SEL_POS  (8U)\n#define SF_CTRL_SF2_IO_1_DI_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF2_IO_1_DI_DLY_SEL_MSK  (((1U << SF_CTRL_SF2_IO_1_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_1_DI_DLY_SEL_POS)\n#define SF_CTRL_SF2_IO_1_DI_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF2_IO_1_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_1_DI_DLY_SEL_POS))\n#define SF_CTRL_SF2_IO_1_DO_DLY_SEL      SF_CTRL_SF2_IO_1_DO_DLY_SEL\n#define SF_CTRL_SF2_IO_1_DO_DLY_SEL_POS  (16U)\n#define SF_CTRL_SF2_IO_1_DO_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF2_IO_1_DO_DLY_SEL_MSK  (((1U << SF_CTRL_SF2_IO_1_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_1_DO_DLY_SEL_POS)\n#define SF_CTRL_SF2_IO_1_DO_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF2_IO_1_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_1_DO_DLY_SEL_POS))\n\n/* 0x54 : sf2_if_io_dly_3 */\n#define SF_CTRL_SF2_IF_IO_DLY_3_OFFSET   (0x54)\n#define SF_CTRL_SF2_IO_2_OE_DLY_SEL      SF_CTRL_SF2_IO_2_OE_DLY_SEL\n#define SF_CTRL_SF2_IO_2_OE_DLY_SEL_POS  (0U)\n#define SF_CTRL_SF2_IO_2_OE_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF2_IO_2_OE_DLY_SEL_MSK  (((1U << SF_CTRL_SF2_IO_2_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_2_OE_DLY_SEL_POS)\n#define SF_CTRL_SF2_IO_2_OE_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF2_IO_2_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_2_OE_DLY_SEL_POS))\n#define SF_CTRL_SF2_IO_2_DI_DLY_SEL      SF_CTRL_SF2_IO_2_DI_DLY_SEL\n#define SF_CTRL_SF2_IO_2_DI_DLY_SEL_POS  (8U)\n#define SF_CTRL_SF2_IO_2_DI_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF2_IO_2_DI_DLY_SEL_MSK  (((1U << SF_CTRL_SF2_IO_2_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_2_DI_DLY_SEL_POS)\n#define SF_CTRL_SF2_IO_2_DI_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF2_IO_2_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_2_DI_DLY_SEL_POS))\n#define SF_CTRL_SF2_IO_2_DO_DLY_SEL      SF_CTRL_SF2_IO_2_DO_DLY_SEL\n#define SF_CTRL_SF2_IO_2_DO_DLY_SEL_POS  (16U)\n#define SF_CTRL_SF2_IO_2_DO_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF2_IO_2_DO_DLY_SEL_MSK  (((1U << SF_CTRL_SF2_IO_2_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_2_DO_DLY_SEL_POS)\n#define SF_CTRL_SF2_IO_2_DO_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF2_IO_2_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_2_DO_DLY_SEL_POS))\n\n/* 0x58 : sf2_if_io_dly_4 */\n#define SF_CTRL_SF2_IF_IO_DLY_4_OFFSET   (0x58)\n#define SF_CTRL_SF2_IO_3_OE_DLY_SEL      SF_CTRL_SF2_IO_3_OE_DLY_SEL\n#define SF_CTRL_SF2_IO_3_OE_DLY_SEL_POS  (0U)\n#define SF_CTRL_SF2_IO_3_OE_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF2_IO_3_OE_DLY_SEL_MSK  (((1U << SF_CTRL_SF2_IO_3_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_3_OE_DLY_SEL_POS)\n#define SF_CTRL_SF2_IO_3_OE_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF2_IO_3_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_3_OE_DLY_SEL_POS))\n#define SF_CTRL_SF2_IO_3_DI_DLY_SEL      SF_CTRL_SF2_IO_3_DI_DLY_SEL\n#define SF_CTRL_SF2_IO_3_DI_DLY_SEL_POS  (8U)\n#define SF_CTRL_SF2_IO_3_DI_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF2_IO_3_DI_DLY_SEL_MSK  (((1U << SF_CTRL_SF2_IO_3_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_3_DI_DLY_SEL_POS)\n#define SF_CTRL_SF2_IO_3_DI_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF2_IO_3_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_3_DI_DLY_SEL_POS))\n#define SF_CTRL_SF2_IO_3_DO_DLY_SEL      SF_CTRL_SF2_IO_3_DO_DLY_SEL\n#define SF_CTRL_SF2_IO_3_DO_DLY_SEL_POS  (16U)\n#define SF_CTRL_SF2_IO_3_DO_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF2_IO_3_DO_DLY_SEL_MSK  (((1U << SF_CTRL_SF2_IO_3_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_3_DO_DLY_SEL_POS)\n#define SF_CTRL_SF2_IO_3_DO_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF2_IO_3_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF2_IO_3_DO_DLY_SEL_POS))\n\n/* 0x5C : sf3_if_io_dly_0 */\n#define SF_CTRL_SF3_IF_IO_DLY_0_OFFSET   (0x5C)\n#define SF_CTRL_SF3_CS_DLY_SEL           SF_CTRL_SF3_CS_DLY_SEL\n#define SF_CTRL_SF3_CS_DLY_SEL_POS       (0U)\n#define SF_CTRL_SF3_CS_DLY_SEL_LEN       (2U)\n#define SF_CTRL_SF3_CS_DLY_SEL_MSK       (((1U << SF_CTRL_SF3_CS_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_CS_DLY_SEL_POS)\n#define SF_CTRL_SF3_CS_DLY_SEL_UMSK      (~(((1U << SF_CTRL_SF3_CS_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_CS_DLY_SEL_POS))\n#define SF_CTRL_SF3_CS2_DLY_SEL          SF_CTRL_SF3_CS2_DLY_SEL\n#define SF_CTRL_SF3_CS2_DLY_SEL_POS      (2U)\n#define SF_CTRL_SF3_CS2_DLY_SEL_LEN      (2U)\n#define SF_CTRL_SF3_CS2_DLY_SEL_MSK      (((1U << SF_CTRL_SF3_CS2_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_CS2_DLY_SEL_POS)\n#define SF_CTRL_SF3_CS2_DLY_SEL_UMSK     (~(((1U << SF_CTRL_SF3_CS2_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_CS2_DLY_SEL_POS))\n#define SF_CTRL_SF3_CLK_OUT_DLY_SEL      SF_CTRL_SF3_CLK_OUT_DLY_SEL\n#define SF_CTRL_SF3_CLK_OUT_DLY_SEL_POS  (8U)\n#define SF_CTRL_SF3_CLK_OUT_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF3_CLK_OUT_DLY_SEL_MSK  (((1U << SF_CTRL_SF3_CLK_OUT_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_CLK_OUT_DLY_SEL_POS)\n#define SF_CTRL_SF3_CLK_OUT_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF3_CLK_OUT_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_CLK_OUT_DLY_SEL_POS))\n#define SF_CTRL_SF3_DQS_OE_DLY_SEL       SF_CTRL_SF3_DQS_OE_DLY_SEL\n#define SF_CTRL_SF3_DQS_OE_DLY_SEL_POS   (26U)\n#define SF_CTRL_SF3_DQS_OE_DLY_SEL_LEN   (2U)\n#define SF_CTRL_SF3_DQS_OE_DLY_SEL_MSK   (((1U << SF_CTRL_SF3_DQS_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_DQS_OE_DLY_SEL_POS)\n#define SF_CTRL_SF3_DQS_OE_DLY_SEL_UMSK  (~(((1U << SF_CTRL_SF3_DQS_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_DQS_OE_DLY_SEL_POS))\n#define SF_CTRL_SF3_DQS_DI_DLY_SEL       SF_CTRL_SF3_DQS_DI_DLY_SEL\n#define SF_CTRL_SF3_DQS_DI_DLY_SEL_POS   (28U)\n#define SF_CTRL_SF3_DQS_DI_DLY_SEL_LEN   (2U)\n#define SF_CTRL_SF3_DQS_DI_DLY_SEL_MSK   (((1U << SF_CTRL_SF3_DQS_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_DQS_DI_DLY_SEL_POS)\n#define SF_CTRL_SF3_DQS_DI_DLY_SEL_UMSK  (~(((1U << SF_CTRL_SF3_DQS_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_DQS_DI_DLY_SEL_POS))\n#define SF_CTRL_SF3_DQS_DO_DLY_SEL       SF_CTRL_SF3_DQS_DO_DLY_SEL\n#define SF_CTRL_SF3_DQS_DO_DLY_SEL_POS   (30U)\n#define SF_CTRL_SF3_DQS_DO_DLY_SEL_LEN   (2U)\n#define SF_CTRL_SF3_DQS_DO_DLY_SEL_MSK   (((1U << SF_CTRL_SF3_DQS_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_DQS_DO_DLY_SEL_POS)\n#define SF_CTRL_SF3_DQS_DO_DLY_SEL_UMSK  (~(((1U << SF_CTRL_SF3_DQS_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_DQS_DO_DLY_SEL_POS))\n\n/* 0x60 : sf3_if_io_dly_1 */\n#define SF_CTRL_SF3_IF_IO_DLY_1_OFFSET   (0x60)\n#define SF_CTRL_SF3_IO_0_OE_DLY_SEL      SF_CTRL_SF3_IO_0_OE_DLY_SEL\n#define SF_CTRL_SF3_IO_0_OE_DLY_SEL_POS  (0U)\n#define SF_CTRL_SF3_IO_0_OE_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF3_IO_0_OE_DLY_SEL_MSK  (((1U << SF_CTRL_SF3_IO_0_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_0_OE_DLY_SEL_POS)\n#define SF_CTRL_SF3_IO_0_OE_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF3_IO_0_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_0_OE_DLY_SEL_POS))\n#define SF_CTRL_SF3_IO_0_DI_DLY_SEL      SF_CTRL_SF3_IO_0_DI_DLY_SEL\n#define SF_CTRL_SF3_IO_0_DI_DLY_SEL_POS  (8U)\n#define SF_CTRL_SF3_IO_0_DI_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF3_IO_0_DI_DLY_SEL_MSK  (((1U << SF_CTRL_SF3_IO_0_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_0_DI_DLY_SEL_POS)\n#define SF_CTRL_SF3_IO_0_DI_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF3_IO_0_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_0_DI_DLY_SEL_POS))\n#define SF_CTRL_SF3_IO_0_DO_DLY_SEL      SF_CTRL_SF3_IO_0_DO_DLY_SEL\n#define SF_CTRL_SF3_IO_0_DO_DLY_SEL_POS  (16U)\n#define SF_CTRL_SF3_IO_0_DO_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF3_IO_0_DO_DLY_SEL_MSK  (((1U << SF_CTRL_SF3_IO_0_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_0_DO_DLY_SEL_POS)\n#define SF_CTRL_SF3_IO_0_DO_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF3_IO_0_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_0_DO_DLY_SEL_POS))\n\n/* 0x64 : sf3_if_io_dly_2 */\n#define SF_CTRL_SF3_IF_IO_DLY_2_OFFSET   (0x64)\n#define SF_CTRL_SF3_IO_1_OE_DLY_SEL      SF_CTRL_SF3_IO_1_OE_DLY_SEL\n#define SF_CTRL_SF3_IO_1_OE_DLY_SEL_POS  (0U)\n#define SF_CTRL_SF3_IO_1_OE_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF3_IO_1_OE_DLY_SEL_MSK  (((1U << SF_CTRL_SF3_IO_1_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_1_OE_DLY_SEL_POS)\n#define SF_CTRL_SF3_IO_1_OE_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF3_IO_1_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_1_OE_DLY_SEL_POS))\n#define SF_CTRL_SF3_IO_1_DI_DLY_SEL      SF_CTRL_SF3_IO_1_DI_DLY_SEL\n#define SF_CTRL_SF3_IO_1_DI_DLY_SEL_POS  (8U)\n#define SF_CTRL_SF3_IO_1_DI_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF3_IO_1_DI_DLY_SEL_MSK  (((1U << SF_CTRL_SF3_IO_1_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_1_DI_DLY_SEL_POS)\n#define SF_CTRL_SF3_IO_1_DI_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF3_IO_1_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_1_DI_DLY_SEL_POS))\n#define SF_CTRL_SF3_IO_1_DO_DLY_SEL      SF_CTRL_SF3_IO_1_DO_DLY_SEL\n#define SF_CTRL_SF3_IO_1_DO_DLY_SEL_POS  (16U)\n#define SF_CTRL_SF3_IO_1_DO_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF3_IO_1_DO_DLY_SEL_MSK  (((1U << SF_CTRL_SF3_IO_1_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_1_DO_DLY_SEL_POS)\n#define SF_CTRL_SF3_IO_1_DO_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF3_IO_1_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_1_DO_DLY_SEL_POS))\n\n/* 0x68 : sf3_if_io_dly_3 */\n#define SF_CTRL_SF3_IF_IO_DLY_3_OFFSET   (0x68)\n#define SF_CTRL_SF3_IO_2_OE_DLY_SEL      SF_CTRL_SF3_IO_2_OE_DLY_SEL\n#define SF_CTRL_SF3_IO_2_OE_DLY_SEL_POS  (0U)\n#define SF_CTRL_SF3_IO_2_OE_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF3_IO_2_OE_DLY_SEL_MSK  (((1U << SF_CTRL_SF3_IO_2_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_2_OE_DLY_SEL_POS)\n#define SF_CTRL_SF3_IO_2_OE_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF3_IO_2_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_2_OE_DLY_SEL_POS))\n#define SF_CTRL_SF3_IO_2_DI_DLY_SEL      SF_CTRL_SF3_IO_2_DI_DLY_SEL\n#define SF_CTRL_SF3_IO_2_DI_DLY_SEL_POS  (8U)\n#define SF_CTRL_SF3_IO_2_DI_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF3_IO_2_DI_DLY_SEL_MSK  (((1U << SF_CTRL_SF3_IO_2_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_2_DI_DLY_SEL_POS)\n#define SF_CTRL_SF3_IO_2_DI_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF3_IO_2_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_2_DI_DLY_SEL_POS))\n#define SF_CTRL_SF3_IO_2_DO_DLY_SEL      SF_CTRL_SF3_IO_2_DO_DLY_SEL\n#define SF_CTRL_SF3_IO_2_DO_DLY_SEL_POS  (16U)\n#define SF_CTRL_SF3_IO_2_DO_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF3_IO_2_DO_DLY_SEL_MSK  (((1U << SF_CTRL_SF3_IO_2_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_2_DO_DLY_SEL_POS)\n#define SF_CTRL_SF3_IO_2_DO_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF3_IO_2_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_2_DO_DLY_SEL_POS))\n\n/* 0x6C : sf3_if_io_dly_4 */\n#define SF_CTRL_SF3_IF_IO_DLY_4_OFFSET   (0x6C)\n#define SF_CTRL_SF3_IO_3_OE_DLY_SEL      SF_CTRL_SF3_IO_3_OE_DLY_SEL\n#define SF_CTRL_SF3_IO_3_OE_DLY_SEL_POS  (0U)\n#define SF_CTRL_SF3_IO_3_OE_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF3_IO_3_OE_DLY_SEL_MSK  (((1U << SF_CTRL_SF3_IO_3_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_3_OE_DLY_SEL_POS)\n#define SF_CTRL_SF3_IO_3_OE_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF3_IO_3_OE_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_3_OE_DLY_SEL_POS))\n#define SF_CTRL_SF3_IO_3_DI_DLY_SEL      SF_CTRL_SF3_IO_3_DI_DLY_SEL\n#define SF_CTRL_SF3_IO_3_DI_DLY_SEL_POS  (8U)\n#define SF_CTRL_SF3_IO_3_DI_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF3_IO_3_DI_DLY_SEL_MSK  (((1U << SF_CTRL_SF3_IO_3_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_3_DI_DLY_SEL_POS)\n#define SF_CTRL_SF3_IO_3_DI_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF3_IO_3_DI_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_3_DI_DLY_SEL_POS))\n#define SF_CTRL_SF3_IO_3_DO_DLY_SEL      SF_CTRL_SF3_IO_3_DO_DLY_SEL\n#define SF_CTRL_SF3_IO_3_DO_DLY_SEL_POS  (16U)\n#define SF_CTRL_SF3_IO_3_DO_DLY_SEL_LEN  (2U)\n#define SF_CTRL_SF3_IO_3_DO_DLY_SEL_MSK  (((1U << SF_CTRL_SF3_IO_3_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_3_DO_DLY_SEL_POS)\n#define SF_CTRL_SF3_IO_3_DO_DLY_SEL_UMSK (~(((1U << SF_CTRL_SF3_IO_3_DO_DLY_SEL_LEN) - 1) << SF_CTRL_SF3_IO_3_DO_DLY_SEL_POS))\n\n/* 0x70 : sf_ctrl_2 */\n#define SF_CTRL_2_OFFSET                (0x70)\n#define SF_CTRL_SF_IF_PAD_SEL           SF_CTRL_SF_IF_PAD_SEL\n#define SF_CTRL_SF_IF_PAD_SEL_POS       (0U)\n#define SF_CTRL_SF_IF_PAD_SEL_LEN       (2U)\n#define SF_CTRL_SF_IF_PAD_SEL_MSK       (((1U << SF_CTRL_SF_IF_PAD_SEL_LEN) - 1) << SF_CTRL_SF_IF_PAD_SEL_POS)\n#define SF_CTRL_SF_IF_PAD_SEL_UMSK      (~(((1U << SF_CTRL_SF_IF_PAD_SEL_LEN) - 1) << SF_CTRL_SF_IF_PAD_SEL_POS))\n#define SF_CTRL_SF_IF_PAD_SEL_LOCK      SF_CTRL_SF_IF_PAD_SEL_LOCK\n#define SF_CTRL_SF_IF_PAD_SEL_LOCK_POS  (3U)\n#define SF_CTRL_SF_IF_PAD_SEL_LOCK_LEN  (1U)\n#define SF_CTRL_SF_IF_PAD_SEL_LOCK_MSK  (((1U << SF_CTRL_SF_IF_PAD_SEL_LOCK_LEN) - 1) << SF_CTRL_SF_IF_PAD_SEL_LOCK_POS)\n#define SF_CTRL_SF_IF_PAD_SEL_LOCK_UMSK (~(((1U << SF_CTRL_SF_IF_PAD_SEL_LOCK_LEN) - 1) << SF_CTRL_SF_IF_PAD_SEL_LOCK_POS))\n#define SF_CTRL_SF_IF_DTR_EN            SF_CTRL_SF_IF_DTR_EN\n#define SF_CTRL_SF_IF_DTR_EN_POS        (4U)\n#define SF_CTRL_SF_IF_DTR_EN_LEN        (1U)\n#define SF_CTRL_SF_IF_DTR_EN_MSK        (((1U << SF_CTRL_SF_IF_DTR_EN_LEN) - 1) << SF_CTRL_SF_IF_DTR_EN_POS)\n#define SF_CTRL_SF_IF_DTR_EN_UMSK       (~(((1U << SF_CTRL_SF_IF_DTR_EN_LEN) - 1) << SF_CTRL_SF_IF_DTR_EN_POS))\n#define SF_CTRL_SF_IF_DQS_EN            SF_CTRL_SF_IF_DQS_EN\n#define SF_CTRL_SF_IF_DQS_EN_POS        (5U)\n#define SF_CTRL_SF_IF_DQS_EN_LEN        (1U)\n#define SF_CTRL_SF_IF_DQS_EN_MSK        (((1U << SF_CTRL_SF_IF_DQS_EN_LEN) - 1) << SF_CTRL_SF_IF_DQS_EN_POS)\n#define SF_CTRL_SF_IF_DQS_EN_UMSK       (~(((1U << SF_CTRL_SF_IF_DQS_EN_LEN) - 1) << SF_CTRL_SF_IF_DQS_EN_POS))\n#define SF_CTRL_SF_IF_BK_SWAP           SF_CTRL_SF_IF_BK_SWAP\n#define SF_CTRL_SF_IF_BK_SWAP_POS       (28U)\n#define SF_CTRL_SF_IF_BK_SWAP_LEN       (1U)\n#define SF_CTRL_SF_IF_BK_SWAP_MSK       (((1U << SF_CTRL_SF_IF_BK_SWAP_LEN) - 1) << SF_CTRL_SF_IF_BK_SWAP_POS)\n#define SF_CTRL_SF_IF_BK_SWAP_UMSK      (~(((1U << SF_CTRL_SF_IF_BK_SWAP_LEN) - 1) << SF_CTRL_SF_IF_BK_SWAP_POS))\n#define SF_CTRL_SF_IF_BK2_MODE          SF_CTRL_SF_IF_BK2_MODE\n#define SF_CTRL_SF_IF_BK2_MODE_POS      (29U)\n#define SF_CTRL_SF_IF_BK2_MODE_LEN      (1U)\n#define SF_CTRL_SF_IF_BK2_MODE_MSK      (((1U << SF_CTRL_SF_IF_BK2_MODE_LEN) - 1) << SF_CTRL_SF_IF_BK2_MODE_POS)\n#define SF_CTRL_SF_IF_BK2_MODE_UMSK     (~(((1U << SF_CTRL_SF_IF_BK2_MODE_LEN) - 1) << SF_CTRL_SF_IF_BK2_MODE_POS))\n#define SF_CTRL_SF_IF_BK2_EN            SF_CTRL_SF_IF_BK2_EN\n#define SF_CTRL_SF_IF_BK2_EN_POS        (30U)\n#define SF_CTRL_SF_IF_BK2_EN_LEN        (1U)\n#define SF_CTRL_SF_IF_BK2_EN_MSK        (((1U << SF_CTRL_SF_IF_BK2_EN_LEN) - 1) << SF_CTRL_SF_IF_BK2_EN_POS)\n#define SF_CTRL_SF_IF_BK2_EN_UMSK       (~(((1U << SF_CTRL_SF_IF_BK2_EN_LEN) - 1) << SF_CTRL_SF_IF_BK2_EN_POS))\n#define SF_CTRL_SF_IF_0_BK_SEL          SF_CTRL_SF_IF_0_BK_SEL\n#define SF_CTRL_SF_IF_0_BK_SEL_POS      (31U)\n#define SF_CTRL_SF_IF_0_BK_SEL_LEN      (1U)\n#define SF_CTRL_SF_IF_0_BK_SEL_MSK      (((1U << SF_CTRL_SF_IF_0_BK_SEL_LEN) - 1) << SF_CTRL_SF_IF_0_BK_SEL_POS)\n#define SF_CTRL_SF_IF_0_BK_SEL_UMSK     (~(((1U << SF_CTRL_SF_IF_0_BK_SEL_LEN) - 1) << SF_CTRL_SF_IF_0_BK_SEL_POS))\n\n/* 0x74 : sf_ctrl_3 */\n#define SF_CTRL_3_OFFSET                (0x74)\n#define SF_CTRL_SF_CMDS_WRAP_LEN        SF_CTRL_SF_CMDS_WRAP_LEN\n#define SF_CTRL_SF_CMDS_WRAP_LEN_POS    (0U)\n#define SF_CTRL_SF_CMDS_WRAP_LEN_LEN    (4U)\n#define SF_CTRL_SF_CMDS_WRAP_LEN_MSK    (((1U << SF_CTRL_SF_CMDS_WRAP_LEN_LEN) - 1) << SF_CTRL_SF_CMDS_WRAP_LEN_POS)\n#define SF_CTRL_SF_CMDS_WRAP_LEN_UMSK   (~(((1U << SF_CTRL_SF_CMDS_WRAP_LEN_LEN) - 1) << SF_CTRL_SF_CMDS_WRAP_LEN_POS))\n#define SF_CTRL_SF_CMDS_EN              SF_CTRL_SF_CMDS_EN\n#define SF_CTRL_SF_CMDS_EN_POS          (4U)\n#define SF_CTRL_SF_CMDS_EN_LEN          (1U)\n#define SF_CTRL_SF_CMDS_EN_MSK          (((1U << SF_CTRL_SF_CMDS_EN_LEN) - 1) << SF_CTRL_SF_CMDS_EN_POS)\n#define SF_CTRL_SF_CMDS_EN_UMSK         (~(((1U << SF_CTRL_SF_CMDS_EN_LEN) - 1) << SF_CTRL_SF_CMDS_EN_POS))\n#define SF_CTRL_SF_CMDS_BT_DLY          SF_CTRL_SF_CMDS_BT_DLY\n#define SF_CTRL_SF_CMDS_BT_DLY_POS      (5U)\n#define SF_CTRL_SF_CMDS_BT_DLY_LEN      (3U)\n#define SF_CTRL_SF_CMDS_BT_DLY_MSK      (((1U << SF_CTRL_SF_CMDS_BT_DLY_LEN) - 1) << SF_CTRL_SF_CMDS_BT_DLY_POS)\n#define SF_CTRL_SF_CMDS_BT_DLY_UMSK     (~(((1U << SF_CTRL_SF_CMDS_BT_DLY_LEN) - 1) << SF_CTRL_SF_CMDS_BT_DLY_POS))\n#define SF_CTRL_SF_CMDS_BT_EN           SF_CTRL_SF_CMDS_BT_EN\n#define SF_CTRL_SF_CMDS_BT_EN_POS       (8U)\n#define SF_CTRL_SF_CMDS_BT_EN_LEN       (1U)\n#define SF_CTRL_SF_CMDS_BT_EN_MSK       (((1U << SF_CTRL_SF_CMDS_BT_EN_LEN) - 1) << SF_CTRL_SF_CMDS_BT_EN_POS)\n#define SF_CTRL_SF_CMDS_BT_EN_UMSK      (~(((1U << SF_CTRL_SF_CMDS_BT_EN_LEN) - 1) << SF_CTRL_SF_CMDS_BT_EN_POS))\n#define SF_CTRL_SF_CMDS_WRAP_Q_INI      SF_CTRL_SF_CMDS_WRAP_Q_INI\n#define SF_CTRL_SF_CMDS_WRAP_Q_INI_POS  (9U)\n#define SF_CTRL_SF_CMDS_WRAP_Q_INI_LEN  (1U)\n#define SF_CTRL_SF_CMDS_WRAP_Q_INI_MSK  (((1U << SF_CTRL_SF_CMDS_WRAP_Q_INI_LEN) - 1) << SF_CTRL_SF_CMDS_WRAP_Q_INI_POS)\n#define SF_CTRL_SF_CMDS_WRAP_Q_INI_UMSK (~(((1U << SF_CTRL_SF_CMDS_WRAP_Q_INI_LEN) - 1) << SF_CTRL_SF_CMDS_WRAP_Q_INI_POS))\n#define SF_CTRL_SF_CMDS_WRAP_MODE       SF_CTRL_SF_CMDS_WRAP_MODE\n#define SF_CTRL_SF_CMDS_WRAP_MODE_POS   (10U)\n#define SF_CTRL_SF_CMDS_WRAP_MODE_LEN   (1U)\n#define SF_CTRL_SF_CMDS_WRAP_MODE_MSK   (((1U << SF_CTRL_SF_CMDS_WRAP_MODE_LEN) - 1) << SF_CTRL_SF_CMDS_WRAP_MODE_POS)\n#define SF_CTRL_SF_CMDS_WRAP_MODE_UMSK  (~(((1U << SF_CTRL_SF_CMDS_WRAP_MODE_LEN) - 1) << SF_CTRL_SF_CMDS_WRAP_MODE_POS))\n#define SF_CTRL_SF_CMDS_WRAP_Q          SF_CTRL_SF_CMDS_WRAP_Q\n#define SF_CTRL_SF_CMDS_WRAP_Q_POS      (11U)\n#define SF_CTRL_SF_CMDS_WRAP_Q_LEN      (1U)\n#define SF_CTRL_SF_CMDS_WRAP_Q_MSK      (((1U << SF_CTRL_SF_CMDS_WRAP_Q_LEN) - 1) << SF_CTRL_SF_CMDS_WRAP_Q_POS)\n#define SF_CTRL_SF_CMDS_WRAP_Q_UMSK     (~(((1U << SF_CTRL_SF_CMDS_WRAP_Q_LEN) - 1) << SF_CTRL_SF_CMDS_WRAP_Q_POS))\n#define SF_CTRL_SF_IF_1_ACK_LAT         SF_CTRL_SF_IF_1_ACK_LAT\n#define SF_CTRL_SF_IF_1_ACK_LAT_POS     (29U)\n#define SF_CTRL_SF_IF_1_ACK_LAT_LEN     (3U)\n#define SF_CTRL_SF_IF_1_ACK_LAT_MSK     (((1U << SF_CTRL_SF_IF_1_ACK_LAT_LEN) - 1) << SF_CTRL_SF_IF_1_ACK_LAT_POS)\n#define SF_CTRL_SF_IF_1_ACK_LAT_UMSK    (~(((1U << SF_CTRL_SF_IF_1_ACK_LAT_LEN) - 1) << SF_CTRL_SF_IF_1_ACK_LAT_POS))\n\n/* 0x78 : sf_if_iahb_3 */\n#define SF_CTRL_SF_IF_IAHB_3_OFFSET      (0x78)\n#define SF_CTRL_SF_IF_2_DMY_BYTE         SF_CTRL_SF_IF_2_DMY_BYTE\n#define SF_CTRL_SF_IF_2_DMY_BYTE_POS     (12U)\n#define SF_CTRL_SF_IF_2_DMY_BYTE_LEN     (5U)\n#define SF_CTRL_SF_IF_2_DMY_BYTE_MSK     (((1U << SF_CTRL_SF_IF_2_DMY_BYTE_LEN) - 1) << SF_CTRL_SF_IF_2_DMY_BYTE_POS)\n#define SF_CTRL_SF_IF_2_DMY_BYTE_UMSK    (~(((1U << SF_CTRL_SF_IF_2_DMY_BYTE_LEN) - 1) << SF_CTRL_SF_IF_2_DMY_BYTE_POS))\n#define SF_CTRL_SF_IF_2_ADR_BYTE         SF_CTRL_SF_IF_2_ADR_BYTE\n#define SF_CTRL_SF_IF_2_ADR_BYTE_POS     (17U)\n#define SF_CTRL_SF_IF_2_ADR_BYTE_LEN     (3U)\n#define SF_CTRL_SF_IF_2_ADR_BYTE_MSK     (((1U << SF_CTRL_SF_IF_2_ADR_BYTE_LEN) - 1) << SF_CTRL_SF_IF_2_ADR_BYTE_POS)\n#define SF_CTRL_SF_IF_2_ADR_BYTE_UMSK    (~(((1U << SF_CTRL_SF_IF_2_ADR_BYTE_LEN) - 1) << SF_CTRL_SF_IF_2_ADR_BYTE_POS))\n#define SF_CTRL_SF_IF_2_CMD_BYTE         SF_CTRL_SF_IF_2_CMD_BYTE\n#define SF_CTRL_SF_IF_2_CMD_BYTE_POS     (20U)\n#define SF_CTRL_SF_IF_2_CMD_BYTE_LEN     (3U)\n#define SF_CTRL_SF_IF_2_CMD_BYTE_MSK     (((1U << SF_CTRL_SF_IF_2_CMD_BYTE_LEN) - 1) << SF_CTRL_SF_IF_2_CMD_BYTE_POS)\n#define SF_CTRL_SF_IF_2_CMD_BYTE_UMSK    (~(((1U << SF_CTRL_SF_IF_2_CMD_BYTE_LEN) - 1) << SF_CTRL_SF_IF_2_CMD_BYTE_POS))\n#define SF_CTRL_SF_IF_2_DAT_RW           SF_CTRL_SF_IF_2_DAT_RW\n#define SF_CTRL_SF_IF_2_DAT_RW_POS       (23U)\n#define SF_CTRL_SF_IF_2_DAT_RW_LEN       (1U)\n#define SF_CTRL_SF_IF_2_DAT_RW_MSK       (((1U << SF_CTRL_SF_IF_2_DAT_RW_LEN) - 1) << SF_CTRL_SF_IF_2_DAT_RW_POS)\n#define SF_CTRL_SF_IF_2_DAT_RW_UMSK      (~(((1U << SF_CTRL_SF_IF_2_DAT_RW_LEN) - 1) << SF_CTRL_SF_IF_2_DAT_RW_POS))\n#define SF_CTRL_SF_IF_2_DAT_EN           SF_CTRL_SF_IF_2_DAT_EN\n#define SF_CTRL_SF_IF_2_DAT_EN_POS       (24U)\n#define SF_CTRL_SF_IF_2_DAT_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_2_DAT_EN_MSK       (((1U << SF_CTRL_SF_IF_2_DAT_EN_LEN) - 1) << SF_CTRL_SF_IF_2_DAT_EN_POS)\n#define SF_CTRL_SF_IF_2_DAT_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_2_DAT_EN_LEN) - 1) << SF_CTRL_SF_IF_2_DAT_EN_POS))\n#define SF_CTRL_SF_IF_2_DMY_EN           SF_CTRL_SF_IF_2_DMY_EN\n#define SF_CTRL_SF_IF_2_DMY_EN_POS       (25U)\n#define SF_CTRL_SF_IF_2_DMY_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_2_DMY_EN_MSK       (((1U << SF_CTRL_SF_IF_2_DMY_EN_LEN) - 1) << SF_CTRL_SF_IF_2_DMY_EN_POS)\n#define SF_CTRL_SF_IF_2_DMY_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_2_DMY_EN_LEN) - 1) << SF_CTRL_SF_IF_2_DMY_EN_POS))\n#define SF_CTRL_SF_IF_2_ADR_EN           SF_CTRL_SF_IF_2_ADR_EN\n#define SF_CTRL_SF_IF_2_ADR_EN_POS       (26U)\n#define SF_CTRL_SF_IF_2_ADR_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_2_ADR_EN_MSK       (((1U << SF_CTRL_SF_IF_2_ADR_EN_LEN) - 1) << SF_CTRL_SF_IF_2_ADR_EN_POS)\n#define SF_CTRL_SF_IF_2_ADR_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_2_ADR_EN_LEN) - 1) << SF_CTRL_SF_IF_2_ADR_EN_POS))\n#define SF_CTRL_SF_IF_2_CMD_EN           SF_CTRL_SF_IF_2_CMD_EN\n#define SF_CTRL_SF_IF_2_CMD_EN_POS       (27U)\n#define SF_CTRL_SF_IF_2_CMD_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_2_CMD_EN_MSK       (((1U << SF_CTRL_SF_IF_2_CMD_EN_LEN) - 1) << SF_CTRL_SF_IF_2_CMD_EN_POS)\n#define SF_CTRL_SF_IF_2_CMD_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_2_CMD_EN_LEN) - 1) << SF_CTRL_SF_IF_2_CMD_EN_POS))\n#define SF_CTRL_SF_IF_2_SPI_MODE         SF_CTRL_SF_IF_2_SPI_MODE\n#define SF_CTRL_SF_IF_2_SPI_MODE_POS     (28U)\n#define SF_CTRL_SF_IF_2_SPI_MODE_LEN     (3U)\n#define SF_CTRL_SF_IF_2_SPI_MODE_MSK     (((1U << SF_CTRL_SF_IF_2_SPI_MODE_LEN) - 1) << SF_CTRL_SF_IF_2_SPI_MODE_POS)\n#define SF_CTRL_SF_IF_2_SPI_MODE_UMSK    (~(((1U << SF_CTRL_SF_IF_2_SPI_MODE_LEN) - 1) << SF_CTRL_SF_IF_2_SPI_MODE_POS))\n#define SF_CTRL_SF_IF_2_QPI_MODE_EN      SF_CTRL_SF_IF_2_QPI_MODE_EN\n#define SF_CTRL_SF_IF_2_QPI_MODE_EN_POS  (31U)\n#define SF_CTRL_SF_IF_2_QPI_MODE_EN_LEN  (1U)\n#define SF_CTRL_SF_IF_2_QPI_MODE_EN_MSK  (((1U << SF_CTRL_SF_IF_2_QPI_MODE_EN_LEN) - 1) << SF_CTRL_SF_IF_2_QPI_MODE_EN_POS)\n#define SF_CTRL_SF_IF_2_QPI_MODE_EN_UMSK (~(((1U << SF_CTRL_SF_IF_2_QPI_MODE_EN_LEN) - 1) << SF_CTRL_SF_IF_2_QPI_MODE_EN_POS))\n\n/* 0x7C : sf_if_iahb_4 */\n#define SF_CTRL_SF_IF_IAHB_4_OFFSET    (0x7C)\n#define SF_CTRL_SF_IF_2_CMD_BUF_0      SF_CTRL_SF_IF_2_CMD_BUF_0\n#define SF_CTRL_SF_IF_2_CMD_BUF_0_POS  (0U)\n#define SF_CTRL_SF_IF_2_CMD_BUF_0_LEN  (32U)\n#define SF_CTRL_SF_IF_2_CMD_BUF_0_MSK  (((1U << SF_CTRL_SF_IF_2_CMD_BUF_0_LEN) - 1) << SF_CTRL_SF_IF_2_CMD_BUF_0_POS)\n#define SF_CTRL_SF_IF_2_CMD_BUF_0_UMSK (~(((1U << SF_CTRL_SF_IF_2_CMD_BUF_0_LEN) - 1) << SF_CTRL_SF_IF_2_CMD_BUF_0_POS))\n\n/* 0x80 : sf_if_iahb_5 */\n#define SF_CTRL_SF_IF_IAHB_5_OFFSET    (0x80)\n#define SF_CTRL_SF_IF_2_CMD_BUF_1      SF_CTRL_SF_IF_2_CMD_BUF_1\n#define SF_CTRL_SF_IF_2_CMD_BUF_1_POS  (0U)\n#define SF_CTRL_SF_IF_2_CMD_BUF_1_LEN  (32U)\n#define SF_CTRL_SF_IF_2_CMD_BUF_1_MSK  (((1U << SF_CTRL_SF_IF_2_CMD_BUF_1_LEN) - 1) << SF_CTRL_SF_IF_2_CMD_BUF_1_POS)\n#define SF_CTRL_SF_IF_2_CMD_BUF_1_UMSK (~(((1U << SF_CTRL_SF_IF_2_CMD_BUF_1_LEN) - 1) << SF_CTRL_SF_IF_2_CMD_BUF_1_POS))\n\n/* 0x84 : sf_if_iahb_6 */\n#define SF_CTRL_SF_IF_IAHB_6_OFFSET      (0x84)\n#define SF_CTRL_SF_IF_3_ADR_BYTE         SF_CTRL_SF_IF_3_ADR_BYTE\n#define SF_CTRL_SF_IF_3_ADR_BYTE_POS     (17U)\n#define SF_CTRL_SF_IF_3_ADR_BYTE_LEN     (3U)\n#define SF_CTRL_SF_IF_3_ADR_BYTE_MSK     (((1U << SF_CTRL_SF_IF_3_ADR_BYTE_LEN) - 1) << SF_CTRL_SF_IF_3_ADR_BYTE_POS)\n#define SF_CTRL_SF_IF_3_ADR_BYTE_UMSK    (~(((1U << SF_CTRL_SF_IF_3_ADR_BYTE_LEN) - 1) << SF_CTRL_SF_IF_3_ADR_BYTE_POS))\n#define SF_CTRL_SF_IF_3_CMD_BYTE         SF_CTRL_SF_IF_3_CMD_BYTE\n#define SF_CTRL_SF_IF_3_CMD_BYTE_POS     (20U)\n#define SF_CTRL_SF_IF_3_CMD_BYTE_LEN     (3U)\n#define SF_CTRL_SF_IF_3_CMD_BYTE_MSK     (((1U << SF_CTRL_SF_IF_3_CMD_BYTE_LEN) - 1) << SF_CTRL_SF_IF_3_CMD_BYTE_POS)\n#define SF_CTRL_SF_IF_3_CMD_BYTE_UMSK    (~(((1U << SF_CTRL_SF_IF_3_CMD_BYTE_LEN) - 1) << SF_CTRL_SF_IF_3_CMD_BYTE_POS))\n#define SF_CTRL_SF_IF_3_ADR_EN           SF_CTRL_SF_IF_3_ADR_EN\n#define SF_CTRL_SF_IF_3_ADR_EN_POS       (26U)\n#define SF_CTRL_SF_IF_3_ADR_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_3_ADR_EN_MSK       (((1U << SF_CTRL_SF_IF_3_ADR_EN_LEN) - 1) << SF_CTRL_SF_IF_3_ADR_EN_POS)\n#define SF_CTRL_SF_IF_3_ADR_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_3_ADR_EN_LEN) - 1) << SF_CTRL_SF_IF_3_ADR_EN_POS))\n#define SF_CTRL_SF_IF_3_CMD_EN           SF_CTRL_SF_IF_3_CMD_EN\n#define SF_CTRL_SF_IF_3_CMD_EN_POS       (27U)\n#define SF_CTRL_SF_IF_3_CMD_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_3_CMD_EN_MSK       (((1U << SF_CTRL_SF_IF_3_CMD_EN_LEN) - 1) << SF_CTRL_SF_IF_3_CMD_EN_POS)\n#define SF_CTRL_SF_IF_3_CMD_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_3_CMD_EN_LEN) - 1) << SF_CTRL_SF_IF_3_CMD_EN_POS))\n#define SF_CTRL_SF_IF_3_SPI_MODE         SF_CTRL_SF_IF_3_SPI_MODE\n#define SF_CTRL_SF_IF_3_SPI_MODE_POS     (28U)\n#define SF_CTRL_SF_IF_3_SPI_MODE_LEN     (3U)\n#define SF_CTRL_SF_IF_3_SPI_MODE_MSK     (((1U << SF_CTRL_SF_IF_3_SPI_MODE_LEN) - 1) << SF_CTRL_SF_IF_3_SPI_MODE_POS)\n#define SF_CTRL_SF_IF_3_SPI_MODE_UMSK    (~(((1U << SF_CTRL_SF_IF_3_SPI_MODE_LEN) - 1) << SF_CTRL_SF_IF_3_SPI_MODE_POS))\n#define SF_CTRL_SF_IF_3_QPI_MODE_EN      SF_CTRL_SF_IF_3_QPI_MODE_EN\n#define SF_CTRL_SF_IF_3_QPI_MODE_EN_POS  (31U)\n#define SF_CTRL_SF_IF_3_QPI_MODE_EN_LEN  (1U)\n#define SF_CTRL_SF_IF_3_QPI_MODE_EN_MSK  (((1U << SF_CTRL_SF_IF_3_QPI_MODE_EN_LEN) - 1) << SF_CTRL_SF_IF_3_QPI_MODE_EN_POS)\n#define SF_CTRL_SF_IF_3_QPI_MODE_EN_UMSK (~(((1U << SF_CTRL_SF_IF_3_QPI_MODE_EN_LEN) - 1) << SF_CTRL_SF_IF_3_QPI_MODE_EN_POS))\n\n/* 0x88 : sf_if_iahb_7 */\n#define SF_CTRL_SF_IF_IAHB_7_OFFSET    (0x88)\n#define SF_CTRL_SF_IF_3_CMD_BUF_0      SF_CTRL_SF_IF_3_CMD_BUF_0\n#define SF_CTRL_SF_IF_3_CMD_BUF_0_POS  (0U)\n#define SF_CTRL_SF_IF_3_CMD_BUF_0_LEN  (32U)\n#define SF_CTRL_SF_IF_3_CMD_BUF_0_MSK  (((1U << SF_CTRL_SF_IF_3_CMD_BUF_0_LEN) - 1) << SF_CTRL_SF_IF_3_CMD_BUF_0_POS)\n#define SF_CTRL_SF_IF_3_CMD_BUF_0_UMSK (~(((1U << SF_CTRL_SF_IF_3_CMD_BUF_0_LEN) - 1) << SF_CTRL_SF_IF_3_CMD_BUF_0_POS))\n\n/* 0x8C : sf_if_iahb_8 */\n#define SF_CTRL_SF_IF_IAHB_8_OFFSET    (0x8C)\n#define SF_CTRL_SF_IF_3_CMD_BUF_1      SF_CTRL_SF_IF_3_CMD_BUF_1\n#define SF_CTRL_SF_IF_3_CMD_BUF_1_POS  (0U)\n#define SF_CTRL_SF_IF_3_CMD_BUF_1_LEN  (32U)\n#define SF_CTRL_SF_IF_3_CMD_BUF_1_MSK  (((1U << SF_CTRL_SF_IF_3_CMD_BUF_1_LEN) - 1) << SF_CTRL_SF_IF_3_CMD_BUF_1_POS)\n#define SF_CTRL_SF_IF_3_CMD_BUF_1_UMSK (~(((1U << SF_CTRL_SF_IF_3_CMD_BUF_1_LEN) - 1) << SF_CTRL_SF_IF_3_CMD_BUF_1_POS))\n\n/* 0x90 : sf_if_iahb_9 */\n#define SF_CTRL_SF_IF_IAHB_9_OFFSET      (0x90)\n#define SF_CTRL_SF_IF_4_DMY_BYTE         SF_CTRL_SF_IF_4_DMY_BYTE\n#define SF_CTRL_SF_IF_4_DMY_BYTE_POS     (12U)\n#define SF_CTRL_SF_IF_4_DMY_BYTE_LEN     (5U)\n#define SF_CTRL_SF_IF_4_DMY_BYTE_MSK     (((1U << SF_CTRL_SF_IF_4_DMY_BYTE_LEN) - 1) << SF_CTRL_SF_IF_4_DMY_BYTE_POS)\n#define SF_CTRL_SF_IF_4_DMY_BYTE_UMSK    (~(((1U << SF_CTRL_SF_IF_4_DMY_BYTE_LEN) - 1) << SF_CTRL_SF_IF_4_DMY_BYTE_POS))\n#define SF_CTRL_SF_IF_4_ADR_BYTE         SF_CTRL_SF_IF_4_ADR_BYTE\n#define SF_CTRL_SF_IF_4_ADR_BYTE_POS     (17U)\n#define SF_CTRL_SF_IF_4_ADR_BYTE_LEN     (3U)\n#define SF_CTRL_SF_IF_4_ADR_BYTE_MSK     (((1U << SF_CTRL_SF_IF_4_ADR_BYTE_LEN) - 1) << SF_CTRL_SF_IF_4_ADR_BYTE_POS)\n#define SF_CTRL_SF_IF_4_ADR_BYTE_UMSK    (~(((1U << SF_CTRL_SF_IF_4_ADR_BYTE_LEN) - 1) << SF_CTRL_SF_IF_4_ADR_BYTE_POS))\n#define SF_CTRL_SF_IF_4_CMD_BYTE         SF_CTRL_SF_IF_4_CMD_BYTE\n#define SF_CTRL_SF_IF_4_CMD_BYTE_POS     (20U)\n#define SF_CTRL_SF_IF_4_CMD_BYTE_LEN     (3U)\n#define SF_CTRL_SF_IF_4_CMD_BYTE_MSK     (((1U << SF_CTRL_SF_IF_4_CMD_BYTE_LEN) - 1) << SF_CTRL_SF_IF_4_CMD_BYTE_POS)\n#define SF_CTRL_SF_IF_4_CMD_BYTE_UMSK    (~(((1U << SF_CTRL_SF_IF_4_CMD_BYTE_LEN) - 1) << SF_CTRL_SF_IF_4_CMD_BYTE_POS))\n#define SF_CTRL_SF_IF_4_DAT_RW           SF_CTRL_SF_IF_4_DAT_RW\n#define SF_CTRL_SF_IF_4_DAT_RW_POS       (23U)\n#define SF_CTRL_SF_IF_4_DAT_RW_LEN       (1U)\n#define SF_CTRL_SF_IF_4_DAT_RW_MSK       (((1U << SF_CTRL_SF_IF_4_DAT_RW_LEN) - 1) << SF_CTRL_SF_IF_4_DAT_RW_POS)\n#define SF_CTRL_SF_IF_4_DAT_RW_UMSK      (~(((1U << SF_CTRL_SF_IF_4_DAT_RW_LEN) - 1) << SF_CTRL_SF_IF_4_DAT_RW_POS))\n#define SF_CTRL_SF_IF_4_DAT_EN           SF_CTRL_SF_IF_4_DAT_EN\n#define SF_CTRL_SF_IF_4_DAT_EN_POS       (24U)\n#define SF_CTRL_SF_IF_4_DAT_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_4_DAT_EN_MSK       (((1U << SF_CTRL_SF_IF_4_DAT_EN_LEN) - 1) << SF_CTRL_SF_IF_4_DAT_EN_POS)\n#define SF_CTRL_SF_IF_4_DAT_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_4_DAT_EN_LEN) - 1) << SF_CTRL_SF_IF_4_DAT_EN_POS))\n#define SF_CTRL_SF_IF_4_DMY_EN           SF_CTRL_SF_IF_4_DMY_EN\n#define SF_CTRL_SF_IF_4_DMY_EN_POS       (25U)\n#define SF_CTRL_SF_IF_4_DMY_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_4_DMY_EN_MSK       (((1U << SF_CTRL_SF_IF_4_DMY_EN_LEN) - 1) << SF_CTRL_SF_IF_4_DMY_EN_POS)\n#define SF_CTRL_SF_IF_4_DMY_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_4_DMY_EN_LEN) - 1) << SF_CTRL_SF_IF_4_DMY_EN_POS))\n#define SF_CTRL_SF_IF_4_ADR_EN           SF_CTRL_SF_IF_4_ADR_EN\n#define SF_CTRL_SF_IF_4_ADR_EN_POS       (26U)\n#define SF_CTRL_SF_IF_4_ADR_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_4_ADR_EN_MSK       (((1U << SF_CTRL_SF_IF_4_ADR_EN_LEN) - 1) << SF_CTRL_SF_IF_4_ADR_EN_POS)\n#define SF_CTRL_SF_IF_4_ADR_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_4_ADR_EN_LEN) - 1) << SF_CTRL_SF_IF_4_ADR_EN_POS))\n#define SF_CTRL_SF_IF_4_CMD_EN           SF_CTRL_SF_IF_4_CMD_EN\n#define SF_CTRL_SF_IF_4_CMD_EN_POS       (27U)\n#define SF_CTRL_SF_IF_4_CMD_EN_LEN       (1U)\n#define SF_CTRL_SF_IF_4_CMD_EN_MSK       (((1U << SF_CTRL_SF_IF_4_CMD_EN_LEN) - 1) << SF_CTRL_SF_IF_4_CMD_EN_POS)\n#define SF_CTRL_SF_IF_4_CMD_EN_UMSK      (~(((1U << SF_CTRL_SF_IF_4_CMD_EN_LEN) - 1) << SF_CTRL_SF_IF_4_CMD_EN_POS))\n#define SF_CTRL_SF_IF_4_SPI_MODE         SF_CTRL_SF_IF_4_SPI_MODE\n#define SF_CTRL_SF_IF_4_SPI_MODE_POS     (28U)\n#define SF_CTRL_SF_IF_4_SPI_MODE_LEN     (3U)\n#define SF_CTRL_SF_IF_4_SPI_MODE_MSK     (((1U << SF_CTRL_SF_IF_4_SPI_MODE_LEN) - 1) << SF_CTRL_SF_IF_4_SPI_MODE_POS)\n#define SF_CTRL_SF_IF_4_SPI_MODE_UMSK    (~(((1U << SF_CTRL_SF_IF_4_SPI_MODE_LEN) - 1) << SF_CTRL_SF_IF_4_SPI_MODE_POS))\n#define SF_CTRL_SF_IF_4_QPI_MODE_EN      SF_CTRL_SF_IF_4_QPI_MODE_EN\n#define SF_CTRL_SF_IF_4_QPI_MODE_EN_POS  (31U)\n#define SF_CTRL_SF_IF_4_QPI_MODE_EN_LEN  (1U)\n#define SF_CTRL_SF_IF_4_QPI_MODE_EN_MSK  (((1U << SF_CTRL_SF_IF_4_QPI_MODE_EN_LEN) - 1) << SF_CTRL_SF_IF_4_QPI_MODE_EN_POS)\n#define SF_CTRL_SF_IF_4_QPI_MODE_EN_UMSK (~(((1U << SF_CTRL_SF_IF_4_QPI_MODE_EN_LEN) - 1) << SF_CTRL_SF_IF_4_QPI_MODE_EN_POS))\n\n/* 0x94 : sf_if_iahb_10 */\n#define SF_CTRL_SF_IF_IAHB_10_OFFSET   (0x94)\n#define SF_CTRL_SF_IF_4_CMD_BUF_0      SF_CTRL_SF_IF_4_CMD_BUF_0\n#define SF_CTRL_SF_IF_4_CMD_BUF_0_POS  (0U)\n#define SF_CTRL_SF_IF_4_CMD_BUF_0_LEN  (32U)\n#define SF_CTRL_SF_IF_4_CMD_BUF_0_MSK  (((1U << SF_CTRL_SF_IF_4_CMD_BUF_0_LEN) - 1) << SF_CTRL_SF_IF_4_CMD_BUF_0_POS)\n#define SF_CTRL_SF_IF_4_CMD_BUF_0_UMSK (~(((1U << SF_CTRL_SF_IF_4_CMD_BUF_0_LEN) - 1) << SF_CTRL_SF_IF_4_CMD_BUF_0_POS))\n\n/* 0x98 : sf_if_iahb_11 */\n#define SF_CTRL_SF_IF_IAHB_11_OFFSET   (0x98)\n#define SF_CTRL_SF_IF_4_CMD_BUF_1      SF_CTRL_SF_IF_4_CMD_BUF_1\n#define SF_CTRL_SF_IF_4_CMD_BUF_1_POS  (0U)\n#define SF_CTRL_SF_IF_4_CMD_BUF_1_LEN  (32U)\n#define SF_CTRL_SF_IF_4_CMD_BUF_1_MSK  (((1U << SF_CTRL_SF_IF_4_CMD_BUF_1_LEN) - 1) << SF_CTRL_SF_IF_4_CMD_BUF_1_POS)\n#define SF_CTRL_SF_IF_4_CMD_BUF_1_UMSK (~(((1U << SF_CTRL_SF_IF_4_CMD_BUF_1_LEN) - 1) << SF_CTRL_SF_IF_4_CMD_BUF_1_POS))\n\n/* 0x9C : sf_if_iahb_12 */\n#define SF_CTRL_SF_IF_IAHB_12_OFFSET       (0x9C)\n#define SF_CTRL_SF2_CLK_SF_RX_INV_SEL      SF_CTRL_SF2_CLK_SF_RX_INV_SEL\n#define SF_CTRL_SF2_CLK_SF_RX_INV_SEL_POS  (2U)\n#define SF_CTRL_SF2_CLK_SF_RX_INV_SEL_LEN  (1U)\n#define SF_CTRL_SF2_CLK_SF_RX_INV_SEL_MSK  (((1U << SF_CTRL_SF2_CLK_SF_RX_INV_SEL_LEN) - 1) << SF_CTRL_SF2_CLK_SF_RX_INV_SEL_POS)\n#define SF_CTRL_SF2_CLK_SF_RX_INV_SEL_UMSK (~(((1U << SF_CTRL_SF2_CLK_SF_RX_INV_SEL_LEN) - 1) << SF_CTRL_SF2_CLK_SF_RX_INV_SEL_POS))\n#define SF_CTRL_SF2_CLK_SF_RX_INV_SRC      SF_CTRL_SF2_CLK_SF_RX_INV_SRC\n#define SF_CTRL_SF2_CLK_SF_RX_INV_SRC_POS  (3U)\n#define SF_CTRL_SF2_CLK_SF_RX_INV_SRC_LEN  (1U)\n#define SF_CTRL_SF2_CLK_SF_RX_INV_SRC_MSK  (((1U << SF_CTRL_SF2_CLK_SF_RX_INV_SRC_LEN) - 1) << SF_CTRL_SF2_CLK_SF_RX_INV_SRC_POS)\n#define SF_CTRL_SF2_CLK_SF_RX_INV_SRC_UMSK (~(((1U << SF_CTRL_SF2_CLK_SF_RX_INV_SRC_LEN) - 1) << SF_CTRL_SF2_CLK_SF_RX_INV_SRC_POS))\n#define SF_CTRL_SF2_CLK_OUT_INV_SEL        SF_CTRL_SF2_CLK_OUT_INV_SEL\n#define SF_CTRL_SF2_CLK_OUT_INV_SEL_POS    (4U)\n#define SF_CTRL_SF2_CLK_OUT_INV_SEL_LEN    (1U)\n#define SF_CTRL_SF2_CLK_OUT_INV_SEL_MSK    (((1U << SF_CTRL_SF2_CLK_OUT_INV_SEL_LEN) - 1) << SF_CTRL_SF2_CLK_OUT_INV_SEL_POS)\n#define SF_CTRL_SF2_CLK_OUT_INV_SEL_UMSK   (~(((1U << SF_CTRL_SF2_CLK_OUT_INV_SEL_LEN) - 1) << SF_CTRL_SF2_CLK_OUT_INV_SEL_POS))\n#define SF_CTRL_SF3_CLK_OUT_INV_SEL        SF_CTRL_SF3_CLK_OUT_INV_SEL\n#define SF_CTRL_SF3_CLK_OUT_INV_SEL_POS    (5U)\n#define SF_CTRL_SF3_CLK_OUT_INV_SEL_LEN    (1U)\n#define SF_CTRL_SF3_CLK_OUT_INV_SEL_MSK    (((1U << SF_CTRL_SF3_CLK_OUT_INV_SEL_LEN) - 1) << SF_CTRL_SF3_CLK_OUT_INV_SEL_POS)\n#define SF_CTRL_SF3_CLK_OUT_INV_SEL_UMSK   (~(((1U << SF_CTRL_SF3_CLK_OUT_INV_SEL_LEN) - 1) << SF_CTRL_SF3_CLK_OUT_INV_SEL_POS))\n#define SF_CTRL_SF2_IF_READ_DLY_N          SF_CTRL_SF2_IF_READ_DLY_N\n#define SF_CTRL_SF2_IF_READ_DLY_N_POS      (8U)\n#define SF_CTRL_SF2_IF_READ_DLY_N_LEN      (3U)\n#define SF_CTRL_SF2_IF_READ_DLY_N_MSK      (((1U << SF_CTRL_SF2_IF_READ_DLY_N_LEN) - 1) << SF_CTRL_SF2_IF_READ_DLY_N_POS)\n#define SF_CTRL_SF2_IF_READ_DLY_N_UMSK     (~(((1U << SF_CTRL_SF2_IF_READ_DLY_N_LEN) - 1) << SF_CTRL_SF2_IF_READ_DLY_N_POS))\n#define SF_CTRL_SF2_IF_READ_DLY_EN         SF_CTRL_SF2_IF_READ_DLY_EN\n#define SF_CTRL_SF2_IF_READ_DLY_EN_POS     (11U)\n#define SF_CTRL_SF2_IF_READ_DLY_EN_LEN     (1U)\n#define SF_CTRL_SF2_IF_READ_DLY_EN_MSK     (((1U << SF_CTRL_SF2_IF_READ_DLY_EN_LEN) - 1) << SF_CTRL_SF2_IF_READ_DLY_EN_POS)\n#define SF_CTRL_SF2_IF_READ_DLY_EN_UMSK    (~(((1U << SF_CTRL_SF2_IF_READ_DLY_EN_LEN) - 1) << SF_CTRL_SF2_IF_READ_DLY_EN_POS))\n#define SF_CTRL_SF2_IF_READ_DLY_SRC        SF_CTRL_SF2_IF_READ_DLY_SRC\n#define SF_CTRL_SF2_IF_READ_DLY_SRC_POS    (12U)\n#define SF_CTRL_SF2_IF_READ_DLY_SRC_LEN    (1U)\n#define SF_CTRL_SF2_IF_READ_DLY_SRC_MSK    (((1U << SF_CTRL_SF2_IF_READ_DLY_SRC_LEN) - 1) << SF_CTRL_SF2_IF_READ_DLY_SRC_POS)\n#define SF_CTRL_SF2_IF_READ_DLY_SRC_UMSK   (~(((1U << SF_CTRL_SF2_IF_READ_DLY_SRC_LEN) - 1) << SF_CTRL_SF2_IF_READ_DLY_SRC_POS))\n\n/* 0x100 : sf_ctrl_prot_en_rd */\n#define SF_CTRL_PROT_EN_RD_OFFSET         (0x100)\n#define SF_CTRL_PROT_EN_RD                SF_CTRL_PROT_EN_RD\n#define SF_CTRL_PROT_EN_RD_POS            (0U)\n#define SF_CTRL_PROT_EN_RD_LEN            (1U)\n#define SF_CTRL_PROT_EN_RD_MSK            (((1U << SF_CTRL_PROT_EN_RD_LEN) - 1) << SF_CTRL_PROT_EN_RD_POS)\n#define SF_CTRL_PROT_EN_RD_UMSK           (~(((1U << SF_CTRL_PROT_EN_RD_LEN) - 1) << SF_CTRL_PROT_EN_RD_POS))\n#define SF_CTRL_ID0_EN_RD                 SF_CTRL_ID0_EN_RD\n#define SF_CTRL_ID0_EN_RD_POS             (1U)\n#define SF_CTRL_ID0_EN_RD_LEN             (1U)\n#define SF_CTRL_ID0_EN_RD_MSK             (((1U << SF_CTRL_ID0_EN_RD_LEN) - 1) << SF_CTRL_ID0_EN_RD_POS)\n#define SF_CTRL_ID0_EN_RD_UMSK            (~(((1U << SF_CTRL_ID0_EN_RD_LEN) - 1) << SF_CTRL_ID0_EN_RD_POS))\n#define SF_CTRL_ID1_EN_RD                 SF_CTRL_ID1_EN_RD\n#define SF_CTRL_ID1_EN_RD_POS             (2U)\n#define SF_CTRL_ID1_EN_RD_LEN             (1U)\n#define SF_CTRL_ID1_EN_RD_MSK             (((1U << SF_CTRL_ID1_EN_RD_LEN) - 1) << SF_CTRL_ID1_EN_RD_POS)\n#define SF_CTRL_ID1_EN_RD_UMSK            (~(((1U << SF_CTRL_ID1_EN_RD_LEN) - 1) << SF_CTRL_ID1_EN_RD_POS))\n#define SF_CTRL_SF_IF_0_TRIG_WR_LOCK      SF_CTRL_SF_IF_0_TRIG_WR_LOCK\n#define SF_CTRL_SF_IF_0_TRIG_WR_LOCK_POS  (30U)\n#define SF_CTRL_SF_IF_0_TRIG_WR_LOCK_LEN  (1U)\n#define SF_CTRL_SF_IF_0_TRIG_WR_LOCK_MSK  (((1U << SF_CTRL_SF_IF_0_TRIG_WR_LOCK_LEN) - 1) << SF_CTRL_SF_IF_0_TRIG_WR_LOCK_POS)\n#define SF_CTRL_SF_IF_0_TRIG_WR_LOCK_UMSK (~(((1U << SF_CTRL_SF_IF_0_TRIG_WR_LOCK_LEN) - 1) << SF_CTRL_SF_IF_0_TRIG_WR_LOCK_POS))\n#define SF_CTRL_SF_DBG_DIS                SF_CTRL_SF_DBG_DIS\n#define SF_CTRL_SF_DBG_DIS_POS            (31U)\n#define SF_CTRL_SF_DBG_DIS_LEN            (1U)\n#define SF_CTRL_SF_DBG_DIS_MSK            (((1U << SF_CTRL_SF_DBG_DIS_LEN) - 1) << SF_CTRL_SF_DBG_DIS_POS)\n#define SF_CTRL_SF_DBG_DIS_UMSK           (~(((1U << SF_CTRL_SF_DBG_DIS_LEN) - 1) << SF_CTRL_SF_DBG_DIS_POS))\n\n/* 0x104 : sf_ctrl_prot_en */\n#define SF_CTRL_PROT_EN_OFFSET (0x104)\n#define SF_CTRL_PROT_EN        SF_CTRL_PROT_EN\n#define SF_CTRL_PROT_EN_POS    (0U)\n#define SF_CTRL_PROT_EN_LEN    (1U)\n#define SF_CTRL_PROT_EN_MSK    (((1U << SF_CTRL_PROT_EN_LEN) - 1) << SF_CTRL_PROT_EN_POS)\n#define SF_CTRL_PROT_EN_UMSK   (~(((1U << SF_CTRL_PROT_EN_LEN) - 1) << SF_CTRL_PROT_EN_POS))\n#define SF_CTRL_ID0_EN         SF_CTRL_ID0_EN\n#define SF_CTRL_ID0_EN_POS     (1U)\n#define SF_CTRL_ID0_EN_LEN     (1U)\n#define SF_CTRL_ID0_EN_MSK     (((1U << SF_CTRL_ID0_EN_LEN) - 1) << SF_CTRL_ID0_EN_POS)\n#define SF_CTRL_ID0_EN_UMSK    (~(((1U << SF_CTRL_ID0_EN_LEN) - 1) << SF_CTRL_ID0_EN_POS))\n#define SF_CTRL_ID1_EN         SF_CTRL_ID1_EN\n#define SF_CTRL_ID1_EN_POS     (2U)\n#define SF_CTRL_ID1_EN_LEN     (1U)\n#define SF_CTRL_ID1_EN_MSK     (((1U << SF_CTRL_ID1_EN_LEN) - 1) << SF_CTRL_ID1_EN_POS)\n#define SF_CTRL_ID1_EN_UMSK    (~(((1U << SF_CTRL_ID1_EN_LEN) - 1) << SF_CTRL_ID1_EN_POS))\n\n/* 0x200 : sf_aes_key_r0_0 */\n#define SF_CTRL_SF_AES_KEY_R0_0_OFFSET (0x200)\n#define SF_CTRL_SF_AES_KEY_R0_0        SF_CTRL_SF_AES_KEY_R0_0\n#define SF_CTRL_SF_AES_KEY_R0_0_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R0_0_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R0_0_MSK    (((1U << SF_CTRL_SF_AES_KEY_R0_0_LEN) - 1) << SF_CTRL_SF_AES_KEY_R0_0_POS)\n#define SF_CTRL_SF_AES_KEY_R0_0_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R0_0_LEN) - 1) << SF_CTRL_SF_AES_KEY_R0_0_POS))\n\n/* 0x204 : sf_aes_key_r0_1 */\n#define SF_CTRL_SF_AES_KEY_R0_1_OFFSET (0x204)\n#define SF_CTRL_SF_AES_KEY_R0_1        SF_CTRL_SF_AES_KEY_R0_1\n#define SF_CTRL_SF_AES_KEY_R0_1_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R0_1_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R0_1_MSK    (((1U << SF_CTRL_SF_AES_KEY_R0_1_LEN) - 1) << SF_CTRL_SF_AES_KEY_R0_1_POS)\n#define SF_CTRL_SF_AES_KEY_R0_1_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R0_1_LEN) - 1) << SF_CTRL_SF_AES_KEY_R0_1_POS))\n\n/* 0x208 : sf_aes_key_r0_2 */\n#define SF_CTRL_SF_AES_KEY_R0_2_OFFSET (0x208)\n#define SF_CTRL_SF_AES_KEY_R0_2        SF_CTRL_SF_AES_KEY_R0_2\n#define SF_CTRL_SF_AES_KEY_R0_2_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R0_2_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R0_2_MSK    (((1U << SF_CTRL_SF_AES_KEY_R0_2_LEN) - 1) << SF_CTRL_SF_AES_KEY_R0_2_POS)\n#define SF_CTRL_SF_AES_KEY_R0_2_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R0_2_LEN) - 1) << SF_CTRL_SF_AES_KEY_R0_2_POS))\n\n/* 0x20C : sf_aes_key_r0_3 */\n#define SF_CTRL_SF_AES_KEY_R0_3_OFFSET (0x20C)\n#define SF_CTRL_SF_AES_KEY_R0_3        SF_CTRL_SF_AES_KEY_R0_3\n#define SF_CTRL_SF_AES_KEY_R0_3_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R0_3_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R0_3_MSK    (((1U << SF_CTRL_SF_AES_KEY_R0_3_LEN) - 1) << SF_CTRL_SF_AES_KEY_R0_3_POS)\n#define SF_CTRL_SF_AES_KEY_R0_3_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R0_3_LEN) - 1) << SF_CTRL_SF_AES_KEY_R0_3_POS))\n\n/* 0x210 : sf_aes_key_r0_4 */\n#define SF_CTRL_SF_AES_KEY_R0_4_OFFSET (0x210)\n#define SF_CTRL_SF_AES_KEY_R0_4        SF_CTRL_SF_AES_KEY_R0_4\n#define SF_CTRL_SF_AES_KEY_R0_4_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R0_4_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R0_4_MSK    (((1U << SF_CTRL_SF_AES_KEY_R0_4_LEN) - 1) << SF_CTRL_SF_AES_KEY_R0_4_POS)\n#define SF_CTRL_SF_AES_KEY_R0_4_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R0_4_LEN) - 1) << SF_CTRL_SF_AES_KEY_R0_4_POS))\n\n/* 0x214 : sf_aes_key_r0_5 */\n#define SF_CTRL_SF_AES_KEY_R0_5_OFFSET (0x214)\n#define SF_CTRL_SF_AES_KEY_R0_5        SF_CTRL_SF_AES_KEY_R0_5\n#define SF_CTRL_SF_AES_KEY_R0_5_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R0_5_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R0_5_MSK    (((1U << SF_CTRL_SF_AES_KEY_R0_5_LEN) - 1) << SF_CTRL_SF_AES_KEY_R0_5_POS)\n#define SF_CTRL_SF_AES_KEY_R0_5_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R0_5_LEN) - 1) << SF_CTRL_SF_AES_KEY_R0_5_POS))\n\n/* 0x218 : sf_aes_key_r0_6 */\n#define SF_CTRL_SF_AES_KEY_R0_6_OFFSET (0x218)\n#define SF_CTRL_SF_AES_KEY_R0_6        SF_CTRL_SF_AES_KEY_R0_6\n#define SF_CTRL_SF_AES_KEY_R0_6_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R0_6_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R0_6_MSK    (((1U << SF_CTRL_SF_AES_KEY_R0_6_LEN) - 1) << SF_CTRL_SF_AES_KEY_R0_6_POS)\n#define SF_CTRL_SF_AES_KEY_R0_6_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R0_6_LEN) - 1) << SF_CTRL_SF_AES_KEY_R0_6_POS))\n\n/* 0x21C : sf_aes_key_r0_7 */\n#define SF_CTRL_SF_AES_KEY_R0_7_OFFSET (0x21C)\n#define SF_CTRL_SF_AES_KEY_R0_7        SF_CTRL_SF_AES_KEY_R0_7\n#define SF_CTRL_SF_AES_KEY_R0_7_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R0_7_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R0_7_MSK    (((1U << SF_CTRL_SF_AES_KEY_R0_7_LEN) - 1) << SF_CTRL_SF_AES_KEY_R0_7_POS)\n#define SF_CTRL_SF_AES_KEY_R0_7_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R0_7_LEN) - 1) << SF_CTRL_SF_AES_KEY_R0_7_POS))\n\n/* 0x220 : sf_aes_iv_r0_w0 */\n#define SF_CTRL_SF_AES_IV_R0_W0_OFFSET (0x220)\n#define SF_CTRL_SF_AES_IV_R0_W0        SF_CTRL_SF_AES_IV_R0_W0\n#define SF_CTRL_SF_AES_IV_R0_W0_POS    (0U)\n#define SF_CTRL_SF_AES_IV_R0_W0_LEN    (32U)\n#define SF_CTRL_SF_AES_IV_R0_W0_MSK    (((1U << SF_CTRL_SF_AES_IV_R0_W0_LEN) - 1) << SF_CTRL_SF_AES_IV_R0_W0_POS)\n#define SF_CTRL_SF_AES_IV_R0_W0_UMSK   (~(((1U << SF_CTRL_SF_AES_IV_R0_W0_LEN) - 1) << SF_CTRL_SF_AES_IV_R0_W0_POS))\n\n/* 0x224 : sf_aes_iv_r0_w1 */\n#define SF_CTRL_SF_AES_IV_R0_W1_OFFSET (0x224)\n#define SF_CTRL_SF_AES_IV_R0_W1        SF_CTRL_SF_AES_IV_R0_W1\n#define SF_CTRL_SF_AES_IV_R0_W1_POS    (0U)\n#define SF_CTRL_SF_AES_IV_R0_W1_LEN    (32U)\n#define SF_CTRL_SF_AES_IV_R0_W1_MSK    (((1U << SF_CTRL_SF_AES_IV_R0_W1_LEN) - 1) << SF_CTRL_SF_AES_IV_R0_W1_POS)\n#define SF_CTRL_SF_AES_IV_R0_W1_UMSK   (~(((1U << SF_CTRL_SF_AES_IV_R0_W1_LEN) - 1) << SF_CTRL_SF_AES_IV_R0_W1_POS))\n\n/* 0x228 : sf_aes_iv_r0_w2 */\n#define SF_CTRL_SF_AES_IV_R0_W2_OFFSET (0x228)\n#define SF_CTRL_SF_AES_IV_R0_W2        SF_CTRL_SF_AES_IV_R0_W2\n#define SF_CTRL_SF_AES_IV_R0_W2_POS    (0U)\n#define SF_CTRL_SF_AES_IV_R0_W2_LEN    (32U)\n#define SF_CTRL_SF_AES_IV_R0_W2_MSK    (((1U << SF_CTRL_SF_AES_IV_R0_W2_LEN) - 1) << SF_CTRL_SF_AES_IV_R0_W2_POS)\n#define SF_CTRL_SF_AES_IV_R0_W2_UMSK   (~(((1U << SF_CTRL_SF_AES_IV_R0_W2_LEN) - 1) << SF_CTRL_SF_AES_IV_R0_W2_POS))\n\n/* 0x22C : sf_aes_iv_r0_w3 */\n#define SF_CTRL_SF_AES_IV_R0_W3_OFFSET (0x22C)\n#define SF_CTRL_SF_AES_IV_R0_W3        SF_CTRL_SF_AES_IV_R0_W3\n#define SF_CTRL_SF_AES_IV_R0_W3_POS    (0U)\n#define SF_CTRL_SF_AES_IV_R0_W3_LEN    (32U)\n#define SF_CTRL_SF_AES_IV_R0_W3_MSK    (((1U << SF_CTRL_SF_AES_IV_R0_W3_LEN) - 1) << SF_CTRL_SF_AES_IV_R0_W3_POS)\n#define SF_CTRL_SF_AES_IV_R0_W3_UMSK   (~(((1U << SF_CTRL_SF_AES_IV_R0_W3_LEN) - 1) << SF_CTRL_SF_AES_IV_R0_W3_POS))\n\n/* 0x230 : sf_aes_cfg_r0 */\n#define SF_CTRL_SF_AES_CFG_R0_OFFSET            (0x230)\n#define SF_CTRL_SF_AES_REGION_R0_END            SF_CTRL_SF_AES_REGION_R0_END\n#define SF_CTRL_SF_AES_REGION_R0_END_POS        (0U)\n#define SF_CTRL_SF_AES_REGION_R0_END_LEN        (14U)\n#define SF_CTRL_SF_AES_REGION_R0_END_MSK        (((1U << SF_CTRL_SF_AES_REGION_R0_END_LEN) - 1) << SF_CTRL_SF_AES_REGION_R0_END_POS)\n#define SF_CTRL_SF_AES_REGION_R0_END_UMSK       (~(((1U << SF_CTRL_SF_AES_REGION_R0_END_LEN) - 1) << SF_CTRL_SF_AES_REGION_R0_END_POS))\n#define SF_CTRL_SF_AES_REGION_R0_START          SF_CTRL_SF_AES_REGION_R0_START\n#define SF_CTRL_SF_AES_REGION_R0_START_POS      (14U)\n#define SF_CTRL_SF_AES_REGION_R0_START_LEN      (14U)\n#define SF_CTRL_SF_AES_REGION_R0_START_MSK      (((1U << SF_CTRL_SF_AES_REGION_R0_START_LEN) - 1) << SF_CTRL_SF_AES_REGION_R0_START_POS)\n#define SF_CTRL_SF_AES_REGION_R0_START_UMSK     (~(((1U << SF_CTRL_SF_AES_REGION_R0_START_LEN) - 1) << SF_CTRL_SF_AES_REGION_R0_START_POS))\n#define SF_CTRL_SF_AES_REGION_R0_HW_KEY_EN      SF_CTRL_SF_AES_REGION_R0_HW_KEY_EN\n#define SF_CTRL_SF_AES_REGION_R0_HW_KEY_EN_POS  (29U)\n#define SF_CTRL_SF_AES_REGION_R0_HW_KEY_EN_LEN  (1U)\n#define SF_CTRL_SF_AES_REGION_R0_HW_KEY_EN_MSK  (((1U << SF_CTRL_SF_AES_REGION_R0_HW_KEY_EN_LEN) - 1) << SF_CTRL_SF_AES_REGION_R0_HW_KEY_EN_POS)\n#define SF_CTRL_SF_AES_REGION_R0_HW_KEY_EN_UMSK (~(((1U << SF_CTRL_SF_AES_REGION_R0_HW_KEY_EN_LEN) - 1) << SF_CTRL_SF_AES_REGION_R0_HW_KEY_EN_POS))\n#define SF_CTRL_SF_AES_REGION_R0_EN             SF_CTRL_SF_AES_REGION_R0_EN\n#define SF_CTRL_SF_AES_REGION_R0_EN_POS         (30U)\n#define SF_CTRL_SF_AES_REGION_R0_EN_LEN         (1U)\n#define SF_CTRL_SF_AES_REGION_R0_EN_MSK         (((1U << SF_CTRL_SF_AES_REGION_R0_EN_LEN) - 1) << SF_CTRL_SF_AES_REGION_R0_EN_POS)\n#define SF_CTRL_SF_AES_REGION_R0_EN_UMSK        (~(((1U << SF_CTRL_SF_AES_REGION_R0_EN_LEN) - 1) << SF_CTRL_SF_AES_REGION_R0_EN_POS))\n#define SF_CTRL_SF_AES_REGION_R0_LOCK           SF_CTRL_SF_AES_REGION_R0_LOCK\n#define SF_CTRL_SF_AES_REGION_R0_LOCK_POS       (31U)\n#define SF_CTRL_SF_AES_REGION_R0_LOCK_LEN       (1U)\n#define SF_CTRL_SF_AES_REGION_R0_LOCK_MSK       (((1U << SF_CTRL_SF_AES_REGION_R0_LOCK_LEN) - 1) << SF_CTRL_SF_AES_REGION_R0_LOCK_POS)\n#define SF_CTRL_SF_AES_REGION_R0_LOCK_UMSK      (~(((1U << SF_CTRL_SF_AES_REGION_R0_LOCK_LEN) - 1) << SF_CTRL_SF_AES_REGION_R0_LOCK_POS))\n\n/* 0x300 : sf_aes_key_r1_0 */\n#define SF_CTRL_SF_AES_KEY_R1_0_OFFSET (0x300)\n#define SF_CTRL_SF_AES_KEY_R1_0        SF_CTRL_SF_AES_KEY_R1_0\n#define SF_CTRL_SF_AES_KEY_R1_0_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R1_0_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R1_0_MSK    (((1U << SF_CTRL_SF_AES_KEY_R1_0_LEN) - 1) << SF_CTRL_SF_AES_KEY_R1_0_POS)\n#define SF_CTRL_SF_AES_KEY_R1_0_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R1_0_LEN) - 1) << SF_CTRL_SF_AES_KEY_R1_0_POS))\n\n/* 0x304 : sf_aes_key_r1_1 */\n#define SF_CTRL_SF_AES_KEY_R1_1_OFFSET (0x304)\n#define SF_CTRL_SF_AES_KEY_R1_1        SF_CTRL_SF_AES_KEY_R1_1\n#define SF_CTRL_SF_AES_KEY_R1_1_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R1_1_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R1_1_MSK    (((1U << SF_CTRL_SF_AES_KEY_R1_1_LEN) - 1) << SF_CTRL_SF_AES_KEY_R1_1_POS)\n#define SF_CTRL_SF_AES_KEY_R1_1_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R1_1_LEN) - 1) << SF_CTRL_SF_AES_KEY_R1_1_POS))\n\n/* 0x308 : sf_aes_key_r1_2 */\n#define SF_CTRL_SF_AES_KEY_R1_2_OFFSET (0x308)\n#define SF_CTRL_SF_AES_KEY_R1_2        SF_CTRL_SF_AES_KEY_R1_2\n#define SF_CTRL_SF_AES_KEY_R1_2_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R1_2_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R1_2_MSK    (((1U << SF_CTRL_SF_AES_KEY_R1_2_LEN) - 1) << SF_CTRL_SF_AES_KEY_R1_2_POS)\n#define SF_CTRL_SF_AES_KEY_R1_2_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R1_2_LEN) - 1) << SF_CTRL_SF_AES_KEY_R1_2_POS))\n\n/* 0x30C : sf_aes_key_r1_3 */\n#define SF_CTRL_SF_AES_KEY_R1_3_OFFSET (0x30C)\n#define SF_CTRL_SF_AES_KEY_R1_3        SF_CTRL_SF_AES_KEY_R1_3\n#define SF_CTRL_SF_AES_KEY_R1_3_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R1_3_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R1_3_MSK    (((1U << SF_CTRL_SF_AES_KEY_R1_3_LEN) - 1) << SF_CTRL_SF_AES_KEY_R1_3_POS)\n#define SF_CTRL_SF_AES_KEY_R1_3_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R1_3_LEN) - 1) << SF_CTRL_SF_AES_KEY_R1_3_POS))\n\n/* 0x310 : sf_aes_key_r1_4 */\n#define SF_CTRL_SF_AES_KEY_R1_4_OFFSET (0x310)\n#define SF_CTRL_SF_AES_KEY_R1_4        SF_CTRL_SF_AES_KEY_R1_4\n#define SF_CTRL_SF_AES_KEY_R1_4_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R1_4_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R1_4_MSK    (((1U << SF_CTRL_SF_AES_KEY_R1_4_LEN) - 1) << SF_CTRL_SF_AES_KEY_R1_4_POS)\n#define SF_CTRL_SF_AES_KEY_R1_4_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R1_4_LEN) - 1) << SF_CTRL_SF_AES_KEY_R1_4_POS))\n\n/* 0x314 : sf_aes_key_r1_5 */\n#define SF_CTRL_SF_AES_KEY_R1_5_OFFSET (0x314)\n#define SF_CTRL_SF_AES_KEY_R1_5        SF_CTRL_SF_AES_KEY_R1_5\n#define SF_CTRL_SF_AES_KEY_R1_5_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R1_5_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R1_5_MSK    (((1U << SF_CTRL_SF_AES_KEY_R1_5_LEN) - 1) << SF_CTRL_SF_AES_KEY_R1_5_POS)\n#define SF_CTRL_SF_AES_KEY_R1_5_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R1_5_LEN) - 1) << SF_CTRL_SF_AES_KEY_R1_5_POS))\n\n/* 0x318 : sf_aes_key_r1_6 */\n#define SF_CTRL_SF_AES_KEY_R1_6_OFFSET (0x318)\n#define SF_CTRL_SF_AES_KEY_R1_6        SF_CTRL_SF_AES_KEY_R1_6\n#define SF_CTRL_SF_AES_KEY_R1_6_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R1_6_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R1_6_MSK    (((1U << SF_CTRL_SF_AES_KEY_R1_6_LEN) - 1) << SF_CTRL_SF_AES_KEY_R1_6_POS)\n#define SF_CTRL_SF_AES_KEY_R1_6_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R1_6_LEN) - 1) << SF_CTRL_SF_AES_KEY_R1_6_POS))\n\n/* 0x31C : sf_aes_key_r1_7 */\n#define SF_CTRL_SF_AES_KEY_R1_7_OFFSET (0x31C)\n#define SF_CTRL_SF_AES_KEY_R1_7        SF_CTRL_SF_AES_KEY_R1_7\n#define SF_CTRL_SF_AES_KEY_R1_7_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R1_7_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R1_7_MSK    (((1U << SF_CTRL_SF_AES_KEY_R1_7_LEN) - 1) << SF_CTRL_SF_AES_KEY_R1_7_POS)\n#define SF_CTRL_SF_AES_KEY_R1_7_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R1_7_LEN) - 1) << SF_CTRL_SF_AES_KEY_R1_7_POS))\n\n/* 0x320 : sf_aes_iv_r1_w0 */\n#define SF_CTRL_SF_AES_IV_R1_W0_OFFSET (0x320)\n#define SF_CTRL_SF_AES_IV_R1_W0        SF_CTRL_SF_AES_IV_R1_W0\n#define SF_CTRL_SF_AES_IV_R1_W0_POS    (0U)\n#define SF_CTRL_SF_AES_IV_R1_W0_LEN    (32U)\n#define SF_CTRL_SF_AES_IV_R1_W0_MSK    (((1U << SF_CTRL_SF_AES_IV_R1_W0_LEN) - 1) << SF_CTRL_SF_AES_IV_R1_W0_POS)\n#define SF_CTRL_SF_AES_IV_R1_W0_UMSK   (~(((1U << SF_CTRL_SF_AES_IV_R1_W0_LEN) - 1) << SF_CTRL_SF_AES_IV_R1_W0_POS))\n\n/* 0x324 : sf_aes_iv_r1_w1 */\n#define SF_CTRL_SF_AES_IV_R1_W1_OFFSET (0x324)\n#define SF_CTRL_SF_AES_IV_R1_W1        SF_CTRL_SF_AES_IV_R1_W1\n#define SF_CTRL_SF_AES_IV_R1_W1_POS    (0U)\n#define SF_CTRL_SF_AES_IV_R1_W1_LEN    (32U)\n#define SF_CTRL_SF_AES_IV_R1_W1_MSK    (((1U << SF_CTRL_SF_AES_IV_R1_W1_LEN) - 1) << SF_CTRL_SF_AES_IV_R1_W1_POS)\n#define SF_CTRL_SF_AES_IV_R1_W1_UMSK   (~(((1U << SF_CTRL_SF_AES_IV_R1_W1_LEN) - 1) << SF_CTRL_SF_AES_IV_R1_W1_POS))\n\n/* 0x328 : sf_aes_iv_r1_w2 */\n#define SF_CTRL_SF_AES_IV_R1_W2_OFFSET (0x328)\n#define SF_CTRL_SF_AES_IV_R1_W2        SF_CTRL_SF_AES_IV_R1_W2\n#define SF_CTRL_SF_AES_IV_R1_W2_POS    (0U)\n#define SF_CTRL_SF_AES_IV_R1_W2_LEN    (32U)\n#define SF_CTRL_SF_AES_IV_R1_W2_MSK    (((1U << SF_CTRL_SF_AES_IV_R1_W2_LEN) - 1) << SF_CTRL_SF_AES_IV_R1_W2_POS)\n#define SF_CTRL_SF_AES_IV_R1_W2_UMSK   (~(((1U << SF_CTRL_SF_AES_IV_R1_W2_LEN) - 1) << SF_CTRL_SF_AES_IV_R1_W2_POS))\n\n/* 0x32C : sf_aes_iv_r1_w3 */\n#define SF_CTRL_SF_AES_IV_R1_W3_OFFSET (0x32C)\n#define SF_CTRL_SF_AES_IV_R1_W3        SF_CTRL_SF_AES_IV_R1_W3\n#define SF_CTRL_SF_AES_IV_R1_W3_POS    (0U)\n#define SF_CTRL_SF_AES_IV_R1_W3_LEN    (32U)\n#define SF_CTRL_SF_AES_IV_R1_W3_MSK    (((1U << SF_CTRL_SF_AES_IV_R1_W3_LEN) - 1) << SF_CTRL_SF_AES_IV_R1_W3_POS)\n#define SF_CTRL_SF_AES_IV_R1_W3_UMSK   (~(((1U << SF_CTRL_SF_AES_IV_R1_W3_LEN) - 1) << SF_CTRL_SF_AES_IV_R1_W3_POS))\n\n/* 0x330 : sf_aes_r1 */\n#define SF_CTRL_SF_AES_R1_OFFSET         (0x330)\n#define SF_CTRL_SF_AES_R1_END            SF_CTRL_SF_AES_R1_END\n#define SF_CTRL_SF_AES_R1_END_POS        (0U)\n#define SF_CTRL_SF_AES_R1_END_LEN        (14U)\n#define SF_CTRL_SF_AES_R1_END_MSK        (((1U << SF_CTRL_SF_AES_R1_END_LEN) - 1) << SF_CTRL_SF_AES_R1_END_POS)\n#define SF_CTRL_SF_AES_R1_END_UMSK       (~(((1U << SF_CTRL_SF_AES_R1_END_LEN) - 1) << SF_CTRL_SF_AES_R1_END_POS))\n#define SF_CTRL_SF_AES_R1_START          SF_CTRL_SF_AES_R1_START\n#define SF_CTRL_SF_AES_R1_START_POS      (14U)\n#define SF_CTRL_SF_AES_R1_START_LEN      (14U)\n#define SF_CTRL_SF_AES_R1_START_MSK      (((1U << SF_CTRL_SF_AES_R1_START_LEN) - 1) << SF_CTRL_SF_AES_R1_START_POS)\n#define SF_CTRL_SF_AES_R1_START_UMSK     (~(((1U << SF_CTRL_SF_AES_R1_START_LEN) - 1) << SF_CTRL_SF_AES_R1_START_POS))\n#define SF_CTRL_SF_AES_R1_HW_KEY_EN      SF_CTRL_SF_AES_R1_HW_KEY_EN\n#define SF_CTRL_SF_AES_R1_HW_KEY_EN_POS  (29U)\n#define SF_CTRL_SF_AES_R1_HW_KEY_EN_LEN  (1U)\n#define SF_CTRL_SF_AES_R1_HW_KEY_EN_MSK  (((1U << SF_CTRL_SF_AES_R1_HW_KEY_EN_LEN) - 1) << SF_CTRL_SF_AES_R1_HW_KEY_EN_POS)\n#define SF_CTRL_SF_AES_R1_HW_KEY_EN_UMSK (~(((1U << SF_CTRL_SF_AES_R1_HW_KEY_EN_LEN) - 1) << SF_CTRL_SF_AES_R1_HW_KEY_EN_POS))\n#define SF_CTRL_SF_AES_R1_EN             SF_CTRL_SF_AES_R1_EN\n#define SF_CTRL_SF_AES_R1_EN_POS         (30U)\n#define SF_CTRL_SF_AES_R1_EN_LEN         (1U)\n#define SF_CTRL_SF_AES_R1_EN_MSK         (((1U << SF_CTRL_SF_AES_R1_EN_LEN) - 1) << SF_CTRL_SF_AES_R1_EN_POS)\n#define SF_CTRL_SF_AES_R1_EN_UMSK        (~(((1U << SF_CTRL_SF_AES_R1_EN_LEN) - 1) << SF_CTRL_SF_AES_R1_EN_POS))\n#define SF_CTRL_SF_AES_R1_LOCK           SF_CTRL_SF_AES_R1_LOCK\n#define SF_CTRL_SF_AES_R1_LOCK_POS       (31U)\n#define SF_CTRL_SF_AES_R1_LOCK_LEN       (1U)\n#define SF_CTRL_SF_AES_R1_LOCK_MSK       (((1U << SF_CTRL_SF_AES_R1_LOCK_LEN) - 1) << SF_CTRL_SF_AES_R1_LOCK_POS)\n#define SF_CTRL_SF_AES_R1_LOCK_UMSK      (~(((1U << SF_CTRL_SF_AES_R1_LOCK_LEN) - 1) << SF_CTRL_SF_AES_R1_LOCK_POS))\n\n/* 0x400 : sf_aes_key_r2_0 */\n#define SF_CTRL_SF_AES_KEY_R2_0_OFFSET (0x400)\n#define SF_CTRL_SF_AES_KEY_R2_0        SF_CTRL_SF_AES_KEY_R2_0\n#define SF_CTRL_SF_AES_KEY_R2_0_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R2_0_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R2_0_MSK    (((1U << SF_CTRL_SF_AES_KEY_R2_0_LEN) - 1) << SF_CTRL_SF_AES_KEY_R2_0_POS)\n#define SF_CTRL_SF_AES_KEY_R2_0_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R2_0_LEN) - 1) << SF_CTRL_SF_AES_KEY_R2_0_POS))\n\n/* 0x404 : sf_aes_key_r2_1 */\n#define SF_CTRL_SF_AES_KEY_R2_1_OFFSET (0x404)\n#define SF_CTRL_SF_AES_KEY_R2_1        SF_CTRL_SF_AES_KEY_R2_1\n#define SF_CTRL_SF_AES_KEY_R2_1_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R2_1_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R2_1_MSK    (((1U << SF_CTRL_SF_AES_KEY_R2_1_LEN) - 1) << SF_CTRL_SF_AES_KEY_R2_1_POS)\n#define SF_CTRL_SF_AES_KEY_R2_1_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R2_1_LEN) - 1) << SF_CTRL_SF_AES_KEY_R2_1_POS))\n\n/* 0x408 : sf_aes_key_r2_2 */\n#define SF_CTRL_SF_AES_KEY_R2_2_OFFSET (0x408)\n#define SF_CTRL_SF_AES_KEY_R2_2        SF_CTRL_SF_AES_KEY_R2_2\n#define SF_CTRL_SF_AES_KEY_R2_2_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R2_2_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R2_2_MSK    (((1U << SF_CTRL_SF_AES_KEY_R2_2_LEN) - 1) << SF_CTRL_SF_AES_KEY_R2_2_POS)\n#define SF_CTRL_SF_AES_KEY_R2_2_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R2_2_LEN) - 1) << SF_CTRL_SF_AES_KEY_R2_2_POS))\n\n/* 0x40C : sf_aes_key_r2_3 */\n#define SF_CTRL_SF_AES_KEY_R2_3_OFFSET (0x40C)\n#define SF_CTRL_SF_AES_KEY_R2_3        SF_CTRL_SF_AES_KEY_R2_3\n#define SF_CTRL_SF_AES_KEY_R2_3_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R2_3_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R2_3_MSK    (((1U << SF_CTRL_SF_AES_KEY_R2_3_LEN) - 1) << SF_CTRL_SF_AES_KEY_R2_3_POS)\n#define SF_CTRL_SF_AES_KEY_R2_3_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R2_3_LEN) - 1) << SF_CTRL_SF_AES_KEY_R2_3_POS))\n\n/* 0x410 : sf_aes_key_r2_4 */\n#define SF_CTRL_SF_AES_KEY_R2_4_OFFSET (0x410)\n#define SF_CTRL_SF_AES_KEY_R2_4        SF_CTRL_SF_AES_KEY_R2_4\n#define SF_CTRL_SF_AES_KEY_R2_4_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R2_4_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R2_4_MSK    (((1U << SF_CTRL_SF_AES_KEY_R2_4_LEN) - 1) << SF_CTRL_SF_AES_KEY_R2_4_POS)\n#define SF_CTRL_SF_AES_KEY_R2_4_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R2_4_LEN) - 1) << SF_CTRL_SF_AES_KEY_R2_4_POS))\n\n/* 0x414 : sf_aes_key_r2_5 */\n#define SF_CTRL_SF_AES_KEY_R2_5_OFFSET (0x414)\n#define SF_CTRL_SF_AES_KEY_R2_5        SF_CTRL_SF_AES_KEY_R2_5\n#define SF_CTRL_SF_AES_KEY_R2_5_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R2_5_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R2_5_MSK    (((1U << SF_CTRL_SF_AES_KEY_R2_5_LEN) - 1) << SF_CTRL_SF_AES_KEY_R2_5_POS)\n#define SF_CTRL_SF_AES_KEY_R2_5_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R2_5_LEN) - 1) << SF_CTRL_SF_AES_KEY_R2_5_POS))\n\n/* 0x418 : sf_aes_key_r2_6 */\n#define SF_CTRL_SF_AES_KEY_R2_6_OFFSET (0x418)\n#define SF_CTRL_SF_AES_KEY_R2_6        SF_CTRL_SF_AES_KEY_R2_6\n#define SF_CTRL_SF_AES_KEY_R2_6_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R2_6_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R2_6_MSK    (((1U << SF_CTRL_SF_AES_KEY_R2_6_LEN) - 1) << SF_CTRL_SF_AES_KEY_R2_6_POS)\n#define SF_CTRL_SF_AES_KEY_R2_6_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R2_6_LEN) - 1) << SF_CTRL_SF_AES_KEY_R2_6_POS))\n\n/* 0x41C : sf_aes_key_r2_7 */\n#define SF_CTRL_SF_AES_KEY_R2_7_OFFSET (0x41C)\n#define SF_CTRL_SF_AES_KEY_R2_7        SF_CTRL_SF_AES_KEY_R2_7\n#define SF_CTRL_SF_AES_KEY_R2_7_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_R2_7_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_R2_7_MSK    (((1U << SF_CTRL_SF_AES_KEY_R2_7_LEN) - 1) << SF_CTRL_SF_AES_KEY_R2_7_POS)\n#define SF_CTRL_SF_AES_KEY_R2_7_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_R2_7_LEN) - 1) << SF_CTRL_SF_AES_KEY_R2_7_POS))\n\n/* 0x420 : sf_aes_iv_r2_w0 */\n#define SF_CTRL_SF_AES_IV_R2_W0_OFFSET (0x420)\n#define SF_CTRL_SF_AES_IV_R2_W0        SF_CTRL_SF_AES_IV_R2_W0\n#define SF_CTRL_SF_AES_IV_R2_W0_POS    (0U)\n#define SF_CTRL_SF_AES_IV_R2_W0_LEN    (32U)\n#define SF_CTRL_SF_AES_IV_R2_W0_MSK    (((1U << SF_CTRL_SF_AES_IV_R2_W0_LEN) - 1) << SF_CTRL_SF_AES_IV_R2_W0_POS)\n#define SF_CTRL_SF_AES_IV_R2_W0_UMSK   (~(((1U << SF_CTRL_SF_AES_IV_R2_W0_LEN) - 1) << SF_CTRL_SF_AES_IV_R2_W0_POS))\n\n/* 0x424 : sf_aes_iv_r2_w1 */\n#define SF_CTRL_SF_AES_IV_R2_W1_OFFSET (0x424)\n#define SF_CTRL_SF_AES_IV_R2_W1        SF_CTRL_SF_AES_IV_R2_W1\n#define SF_CTRL_SF_AES_IV_R2_W1_POS    (0U)\n#define SF_CTRL_SF_AES_IV_R2_W1_LEN    (32U)\n#define SF_CTRL_SF_AES_IV_R2_W1_MSK    (((1U << SF_CTRL_SF_AES_IV_R2_W1_LEN) - 1) << SF_CTRL_SF_AES_IV_R2_W1_POS)\n#define SF_CTRL_SF_AES_IV_R2_W1_UMSK   (~(((1U << SF_CTRL_SF_AES_IV_R2_W1_LEN) - 1) << SF_CTRL_SF_AES_IV_R2_W1_POS))\n\n/* 0x428 : sf_aes_iv_r2_w2 */\n#define SF_CTRL_SF_AES_IV_R2_W2_OFFSET (0x428)\n#define SF_CTRL_SF_AES_IV_R2_W2        SF_CTRL_SF_AES_IV_R2_W2\n#define SF_CTRL_SF_AES_IV_R2_W2_POS    (0U)\n#define SF_CTRL_SF_AES_IV_R2_W2_LEN    (32U)\n#define SF_CTRL_SF_AES_IV_R2_W2_MSK    (((1U << SF_CTRL_SF_AES_IV_R2_W2_LEN) - 1) << SF_CTRL_SF_AES_IV_R2_W2_POS)\n#define SF_CTRL_SF_AES_IV_R2_W2_UMSK   (~(((1U << SF_CTRL_SF_AES_IV_R2_W2_LEN) - 1) << SF_CTRL_SF_AES_IV_R2_W2_POS))\n\n/* 0x42C : sf_aes_iv_r2_w3 */\n#define SF_CTRL_SF_AES_IV_R2_W3_OFFSET (0x42C)\n#define SF_CTRL_SF_AES_IV_R2_W3        SF_CTRL_SF_AES_IV_R2_W3\n#define SF_CTRL_SF_AES_IV_R2_W3_POS    (0U)\n#define SF_CTRL_SF_AES_IV_R2_W3_LEN    (32U)\n#define SF_CTRL_SF_AES_IV_R2_W3_MSK    (((1U << SF_CTRL_SF_AES_IV_R2_W3_LEN) - 1) << SF_CTRL_SF_AES_IV_R2_W3_POS)\n#define SF_CTRL_SF_AES_IV_R2_W3_UMSK   (~(((1U << SF_CTRL_SF_AES_IV_R2_W3_LEN) - 1) << SF_CTRL_SF_AES_IV_R2_W3_POS))\n\n/* 0x430 : sf_aes_r2 */\n#define SF_CTRL_SF_AES_R2_OFFSET         (0x430)\n#define SF_CTRL_SF_AES_R2_END            SF_CTRL_SF_AES_R2_END\n#define SF_CTRL_SF_AES_R2_END_POS        (0U)\n#define SF_CTRL_SF_AES_R2_END_LEN        (14U)\n#define SF_CTRL_SF_AES_R2_END_MSK        (((1U << SF_CTRL_SF_AES_R2_END_LEN) - 1) << SF_CTRL_SF_AES_R2_END_POS)\n#define SF_CTRL_SF_AES_R2_END_UMSK       (~(((1U << SF_CTRL_SF_AES_R2_END_LEN) - 1) << SF_CTRL_SF_AES_R2_END_POS))\n#define SF_CTRL_SF_AES_R2_START          SF_CTRL_SF_AES_R2_START\n#define SF_CTRL_SF_AES_R2_START_POS      (14U)\n#define SF_CTRL_SF_AES_R2_START_LEN      (14U)\n#define SF_CTRL_SF_AES_R2_START_MSK      (((1U << SF_CTRL_SF_AES_R2_START_LEN) - 1) << SF_CTRL_SF_AES_R2_START_POS)\n#define SF_CTRL_SF_AES_R2_START_UMSK     (~(((1U << SF_CTRL_SF_AES_R2_START_LEN) - 1) << SF_CTRL_SF_AES_R2_START_POS))\n#define SF_CTRL_SF_AES_R2_HW_KEY_EN      SF_CTRL_SF_AES_R2_HW_KEY_EN\n#define SF_CTRL_SF_AES_R2_HW_KEY_EN_POS  (29U)\n#define SF_CTRL_SF_AES_R2_HW_KEY_EN_LEN  (1U)\n#define SF_CTRL_SF_AES_R2_HW_KEY_EN_MSK  (((1U << SF_CTRL_SF_AES_R2_HW_KEY_EN_LEN) - 1) << SF_CTRL_SF_AES_R2_HW_KEY_EN_POS)\n#define SF_CTRL_SF_AES_R2_HW_KEY_EN_UMSK (~(((1U << SF_CTRL_SF_AES_R2_HW_KEY_EN_LEN) - 1) << SF_CTRL_SF_AES_R2_HW_KEY_EN_POS))\n#define SF_CTRL_SF_AES_R2_EN             SF_CTRL_SF_AES_R2_EN\n#define SF_CTRL_SF_AES_R2_EN_POS         (30U)\n#define SF_CTRL_SF_AES_R2_EN_LEN         (1U)\n#define SF_CTRL_SF_AES_R2_EN_MSK         (((1U << SF_CTRL_SF_AES_R2_EN_LEN) - 1) << SF_CTRL_SF_AES_R2_EN_POS)\n#define SF_CTRL_SF_AES_R2_EN_UMSK        (~(((1U << SF_CTRL_SF_AES_R2_EN_LEN) - 1) << SF_CTRL_SF_AES_R2_EN_POS))\n#define SF_CTRL_SF_AES_R2_LOCK           SF_CTRL_SF_AES_R2_LOCK\n#define SF_CTRL_SF_AES_R2_LOCK_POS       (31U)\n#define SF_CTRL_SF_AES_R2_LOCK_LEN       (1U)\n#define SF_CTRL_SF_AES_R2_LOCK_MSK       (((1U << SF_CTRL_SF_AES_R2_LOCK_LEN) - 1) << SF_CTRL_SF_AES_R2_LOCK_POS)\n#define SF_CTRL_SF_AES_R2_LOCK_UMSK      (~(((1U << SF_CTRL_SF_AES_R2_LOCK_LEN) - 1) << SF_CTRL_SF_AES_R2_LOCK_POS))\n\n/* 0x434 : sf_id0_offset */\n#define SF_CTRL_SF_ID0_OFFSET_OFFSET (0x434)\n#define SF_CTRL_SF_ID0_OFFSET        SF_CTRL_SF_ID0_OFFSET\n#define SF_CTRL_SF_ID0_OFFSET_POS    (0U)\n#define SF_CTRL_SF_ID0_OFFSET_LEN    (24U)\n#define SF_CTRL_SF_ID0_OFFSET_MSK    (((1U << SF_CTRL_SF_ID0_OFFSET_LEN) - 1) << SF_CTRL_SF_ID0_OFFSET_POS)\n#define SF_CTRL_SF_ID0_OFFSET_UMSK   (~(((1U << SF_CTRL_SF_ID0_OFFSET_LEN) - 1) << SF_CTRL_SF_ID0_OFFSET_POS))\n\n/* 0x438 : sf_id1_offset */\n#define SF_CTRL_SF_ID1_OFFSET_OFFSET (0x438)\n#define SF_CTRL_SF_ID1_OFFSET        SF_CTRL_SF_ID1_OFFSET\n#define SF_CTRL_SF_ID1_OFFSET_POS    (0U)\n#define SF_CTRL_SF_ID1_OFFSET_LEN    (24U)\n#define SF_CTRL_SF_ID1_OFFSET_MSK    (((1U << SF_CTRL_SF_ID1_OFFSET_LEN) - 1) << SF_CTRL_SF_ID1_OFFSET_POS)\n#define SF_CTRL_SF_ID1_OFFSET_UMSK   (~(((1U << SF_CTRL_SF_ID1_OFFSET_LEN) - 1) << SF_CTRL_SF_ID1_OFFSET_POS))\n\n/* 0x43C : sf_bk2_id0_offset */\n#define SF_CTRL_SF_BK2_ID0_OFFSET_OFFSET (0x43C)\n#define SF_CTRL_SF_BK2_ID0_OFFSET        SF_CTRL_SF_BK2_ID0_OFFSET\n#define SF_CTRL_SF_BK2_ID0_OFFSET_POS    (0U)\n#define SF_CTRL_SF_BK2_ID0_OFFSET_LEN    (24U)\n#define SF_CTRL_SF_BK2_ID0_OFFSET_MSK    (((1U << SF_CTRL_SF_BK2_ID0_OFFSET_LEN) - 1) << SF_CTRL_SF_BK2_ID0_OFFSET_POS)\n#define SF_CTRL_SF_BK2_ID0_OFFSET_UMSK   (~(((1U << SF_CTRL_SF_BK2_ID0_OFFSET_LEN) - 1) << SF_CTRL_SF_BK2_ID0_OFFSET_POS))\n\n/* 0x440 : sf_bk2_id1_offset */\n#define SF_CTRL_SF_BK2_ID1_OFFSET_OFFSET (0x440)\n#define SF_CTRL_SF_BK2_ID1_OFFSET        SF_CTRL_SF_BK2_ID1_OFFSET\n#define SF_CTRL_SF_BK2_ID1_OFFSET_POS    (0U)\n#define SF_CTRL_SF_BK2_ID1_OFFSET_LEN    (24U)\n#define SF_CTRL_SF_BK2_ID1_OFFSET_MSK    (((1U << SF_CTRL_SF_BK2_ID1_OFFSET_LEN) - 1) << SF_CTRL_SF_BK2_ID1_OFFSET_POS)\n#define SF_CTRL_SF_BK2_ID1_OFFSET_UMSK   (~(((1U << SF_CTRL_SF_BK2_ID1_OFFSET_LEN) - 1) << SF_CTRL_SF_BK2_ID1_OFFSET_POS))\n\nstruct sf_ctrl_reg {\n    /* 0x0 : sf_ctrl_0 */\n    union {\n        struct\n        {\n            uint32_t reserved_0_1         : 2; /* [ 1: 0],       rsvd,        0x0 */\n            uint32_t sf_clk_sf_rx_inv_sel : 1; /* [    2],        r/w,        0x1 */\n            uint32_t sf_clk_out_gate_en   : 1; /* [    3],        r/w,        0x1 */\n            uint32_t sf_clk_out_inv_sel   : 1; /* [    4],        r/w,        0x1 */\n            uint32_t sf_clk_sahb_sram_sel : 1; /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_7         : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t sf_if_read_dly_n     : 3; /* [10: 8],        r/w,        0x0 */\n            uint32_t sf_if_read_dly_en    : 1; /* [   11],        r/w,        0x0 */\n            uint32_t reserved_12_15       : 4; /* [15:12],       rsvd,        0x0 */\n            uint32_t sf_if_int            : 1; /* [   16],          r,        0x0 */\n            uint32_t sf_if_int_clr        : 1; /* [   17],        r/w,        0x1 */\n            uint32_t sf_if_int_set        : 1; /* [   18],        r/w,        0x0 */\n            uint32_t sf_aes_dly_mode      : 1; /* [   19],        r/w,        0x0 */\n            uint32_t sf_aes_dout_endian   : 1; /* [   20],        r/w,        0x1 */\n            uint32_t sf_aes_ctr_plus_en   : 1; /* [   21],        r/w,        0x0 */\n            uint32_t sf_aes_key_endian    : 1; /* [   22],        r/w,        0x1 */\n            uint32_t sf_aes_iv_endian     : 1; /* [   23],        r/w,        0x1 */\n            uint32_t sf_id                : 8; /* [31:24],        r/w,       0x1a */\n        } BF;\n        uint32_t WORD;\n    } sf_ctrl_0;\n\n    /* 0x4 : sf_ctrl_1 */\n    union {\n        struct\n        {\n            uint32_t sf_if_sr_pat_mask  : 8; /* [ 7: 0],        r/w,        0x0 */\n            uint32_t sf_if_sr_pat       : 8; /* [15: 8],        r/w,        0x0 */\n            uint32_t sf_if_sr_int       : 1; /* [   16],          r,        0x0 */\n            uint32_t sf_if_sr_int_en    : 1; /* [   17],        r/w,        0x0 */\n            uint32_t sf_if_sr_int_set   : 1; /* [   18],        r/w,        0x0 */\n            uint32_t reserved_19        : 1; /* [   19],       rsvd,        0x0 */\n            uint32_t sf_if_0_ack_lat    : 3; /* [22:20],        r/w,        0x6 */\n            uint32_t reserved_23        : 1; /* [   23],       rsvd,        0x0 */\n            uint32_t sf_if_reg_hold     : 1; /* [   24],        r/w,        0x1 */\n            uint32_t sf_if_reg_wp       : 1; /* [   25],        r/w,        0x1 */\n            uint32_t sf_ahb2sif_stopped : 1; /* [   26],          r,        0x0 */\n            uint32_t sf_ahb2sif_stop    : 1; /* [   27],        r/w,        0x0 */\n            uint32_t sf_if_fn_sel       : 1; /* [   28],        r/w,        0x1 */\n            uint32_t sf_if_en           : 1; /* [   29],        r/w,        0x1 */\n            uint32_t sf_ahb2sif_en      : 1; /* [   30],        r/w,        0x1 */\n            uint32_t sf_ahb2sram_en     : 1; /* [   31],        r/w,        0x1 */\n        } BF;\n        uint32_t WORD;\n    } sf_ctrl_1;\n\n    /* 0x8 : sf_if_sahb_0 */\n    union {\n        struct\n        {\n            uint32_t sf_if_busy          : 1;  /* [    0],          r,        0x0 */\n            uint32_t sf_if_0_trig        : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t sf_if_0_dat_byte    : 10; /* [11: 2],        r/w,        0x0 */\n            uint32_t sf_if_0_dmy_byte    : 5;  /* [16:12],        r/w,        0x0 */\n            uint32_t sf_if_0_adr_byte    : 3;  /* [19:17],        r/w,        0x0 */\n            uint32_t sf_if_0_cmd_byte    : 3;  /* [22:20],        r/w,        0x0 */\n            uint32_t sf_if_0_dat_rw      : 1;  /* [   23],        r/w,        0x0 */\n            uint32_t sf_if_0_dat_en      : 1;  /* [   24],        r/w,        0x0 */\n            uint32_t sf_if_0_dmy_en      : 1;  /* [   25],        r/w,        0x0 */\n            uint32_t sf_if_0_adr_en      : 1;  /* [   26],        r/w,        0x0 */\n            uint32_t sf_if_0_cmd_en      : 1;  /* [   27],        r/w,        0x0 */\n            uint32_t sf_if_0_spi_mode    : 3;  /* [30:28],        r/w,        0x0 */\n            uint32_t sf_if_0_qpi_mode_en : 1;  /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_sahb_0;\n\n    /* 0xC : sf_if_sahb_1 */\n    union {\n        struct\n        {\n            uint32_t sf_if_0_cmd_buf_0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_sahb_1;\n\n    /* 0x10 : sf_if_sahb_2 */\n    union {\n        struct\n        {\n            uint32_t sf_if_0_cmd_buf_1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_sahb_2;\n\n    /* 0x14 : sf_if_iahb_0 */\n    union {\n        struct\n        {\n            uint32_t reserved_0_11       : 12; /* [11: 0],       rsvd,        0x0 */\n            uint32_t sf_if_1_dmy_byte    : 5;  /* [16:12],        r/w,        0x0 */\n            uint32_t sf_if_1_adr_byte    : 3;  /* [19:17],        r/w,        0x2 */\n            uint32_t sf_if_1_cmd_byte    : 3;  /* [22:20],        r/w,        0x0 */\n            uint32_t sf_if_1_dat_rw      : 1;  /* [   23],        r/w,        0x0 */\n            uint32_t sf_if_1_dat_en      : 1;  /* [   24],        r/w,        0x1 */\n            uint32_t sf_if_1_dmy_en      : 1;  /* [   25],        r/w,        0x0 */\n            uint32_t sf_if_1_adr_en      : 1;  /* [   26],        r/w,        0x1 */\n            uint32_t sf_if_1_cmd_en      : 1;  /* [   27],        r/w,        0x1 */\n            uint32_t sf_if_1_spi_mode    : 3;  /* [30:28],        r/w,        0x0 */\n            uint32_t sf_if_1_qpi_mode_en : 1;  /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_iahb_0;\n\n    /* 0x18 : sf_if_iahb_1 */\n    union {\n        struct\n        {\n            uint32_t sf_if_1_cmd_buf_0 : 32; /* [31: 0],        r/w,  0x3000000 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_iahb_1;\n\n    /* 0x1C : sf_if_iahb_2 */\n    union {\n        struct\n        {\n            uint32_t sf_if_1_cmd_buf_1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_iahb_2;\n\n    /* 0x20 : sf_if_status_0 */\n    union {\n        struct\n        {\n            uint32_t sf_if_status_0 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_status_0;\n\n    /* 0x24 : sf_if_status_1 */\n    union {\n        struct\n        {\n            uint32_t sf_if_status_1 : 32; /* [31: 0],          r, 0x20000000 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_status_1;\n\n    /* 0x28 : sf_aes */\n    union {\n        struct\n        {\n            uint32_t sf_aes_en        : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t sf_aes_mode      : 2;  /* [ 2: 1],        r/w,        0x0 */\n            uint32_t sf_aes_pref_trig : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t sf_aes_pref_busy : 1;  /* [    4],          r,        0x0 */\n            uint32_t sf_aes_status    : 27; /* [31: 5],          r,        0x2 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes;\n\n    /* 0x2C : sf_ahb2sif_status */\n    union {\n        struct\n        {\n            uint32_t sf_ahb2sif_status : 32; /* [31: 0],          r, 0x10000003 */\n        } BF;\n        uint32_t WORD;\n    } sf_ahb2sif_status;\n\n    /* 0x30 : sf_if_io_dly_0 */\n    union {\n        struct\n        {\n            uint32_t sf_cs_dly_sel      : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t sf_cs2_dly_sel     : 2;  /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reserved_4_7       : 4;  /* [ 7: 4],       rsvd,        0x0 */\n            uint32_t sf_clk_out_dly_sel : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reserved_10_25     : 16; /* [25:10],       rsvd,        0x0 */\n            uint32_t sf_dqs_oe_dly_sel  : 2;  /* [27:26],        r/w,        0x0 */\n            uint32_t sf_dqs_di_dly_sel  : 2;  /* [29:28],        r/w,        0x0 */\n            uint32_t sf_dqs_do_dly_sel  : 2;  /* [31:30],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_io_dly_0;\n\n    /* 0x34 : sf_if_io_dly_1 */\n    union {\n        struct\n        {\n            uint32_t sf_io_0_oe_dly_sel : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_7       : 6;  /* [ 7: 2],       rsvd,        0x0 */\n            uint32_t sf_io_0_di_dly_sel : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reserved_10_15     : 6;  /* [15:10],       rsvd,        0x0 */\n            uint32_t sf_io_0_do_dly_sel : 2;  /* [17:16],        r/w,        0x0 */\n            uint32_t reserved_18_31     : 14; /* [31:18],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_io_dly_1;\n\n    /* 0x38 : sf_if_io_dly_2 */\n    union {\n        struct\n        {\n            uint32_t sf_io_1_oe_dly_sel : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_7       : 6;  /* [ 7: 2],       rsvd,        0x0 */\n            uint32_t sf_io_1_di_dly_sel : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reserved_10_15     : 6;  /* [15:10],       rsvd,        0x0 */\n            uint32_t sf_io_1_do_dly_sel : 2;  /* [17:16],        r/w,        0x0 */\n            uint32_t reserved_18_31     : 14; /* [31:18],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_io_dly_2;\n\n    /* 0x3C : sf_if_io_dly_3 */\n    union {\n        struct\n        {\n            uint32_t sf_io_2_oe_dly_sel : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_7       : 6;  /* [ 7: 2],       rsvd,        0x0 */\n            uint32_t sf_io_2_di_dly_sel : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reserved_10_15     : 6;  /* [15:10],       rsvd,        0x0 */\n            uint32_t sf_io_2_do_dly_sel : 2;  /* [17:16],        r/w,        0x0 */\n            uint32_t reserved_18_31     : 14; /* [31:18],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_io_dly_3;\n\n    /* 0x40 : sf_if_io_dly_4 */\n    union {\n        struct\n        {\n            uint32_t sf_io_3_oe_dly_sel : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_7       : 6;  /* [ 7: 2],       rsvd,        0x0 */\n            uint32_t sf_io_3_di_dly_sel : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reserved_10_15     : 6;  /* [15:10],       rsvd,        0x0 */\n            uint32_t sf_io_3_do_dly_sel : 2;  /* [17:16],        r/w,        0x0 */\n            uint32_t reserved_18_31     : 14; /* [31:18],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_io_dly_4;\n\n    /* 0x44 : sf_reserved */\n    union {\n        struct\n        {\n            uint32_t sf_reserved : 32; /* [31: 0],        r/w,     0xffff */\n        } BF;\n        uint32_t WORD;\n    } sf_reserved;\n\n    /* 0x48 : sf2_if_io_dly_0 */\n    union {\n        struct\n        {\n            uint32_t sf2_cs_dly_sel      : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t sf2_cs2_dly_sel     : 2;  /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reserved_4_7        : 4;  /* [ 7: 4],       rsvd,        0x0 */\n            uint32_t sf2_clk_out_dly_sel : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reserved_10_25      : 16; /* [25:10],       rsvd,        0x0 */\n            uint32_t sf2_dqs_oe_dly_sel  : 2;  /* [27:26],        r/w,        0x0 */\n            uint32_t sf2_dqs_di_dly_sel  : 2;  /* [29:28],        r/w,        0x0 */\n            uint32_t sf2_dqs_do_dly_sel  : 2;  /* [31:30],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf2_if_io_dly_0;\n\n    /* 0x4C : sf2_if_io_dly_1 */\n    union {\n        struct\n        {\n            uint32_t sf2_io_0_oe_dly_sel : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_7        : 6;  /* [ 7: 2],       rsvd,        0x0 */\n            uint32_t sf2_io_0_di_dly_sel : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reserved_10_15      : 6;  /* [15:10],       rsvd,        0x0 */\n            uint32_t sf2_io_0_do_dly_sel : 2;  /* [17:16],        r/w,        0x0 */\n            uint32_t reserved_18_31      : 14; /* [31:18],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf2_if_io_dly_1;\n\n    /* 0x50 : sf2_if_io_dly_2 */\n    union {\n        struct\n        {\n            uint32_t sf2_io_1_oe_dly_sel : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_7        : 6;  /* [ 7: 2],       rsvd,        0x0 */\n            uint32_t sf2_io_1_di_dly_sel : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reserved_10_15      : 6;  /* [15:10],       rsvd,        0x0 */\n            uint32_t sf2_io_1_do_dly_sel : 2;  /* [17:16],        r/w,        0x0 */\n            uint32_t reserved_18_31      : 14; /* [31:18],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf2_if_io_dly_2;\n\n    /* 0x54 : sf2_if_io_dly_3 */\n    union {\n        struct\n        {\n            uint32_t sf2_io_2_oe_dly_sel : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_7        : 6;  /* [ 7: 2],       rsvd,        0x0 */\n            uint32_t sf2_io_2_di_dly_sel : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reserved_10_15      : 6;  /* [15:10],       rsvd,        0x0 */\n            uint32_t sf2_io_2_do_dly_sel : 2;  /* [17:16],        r/w,        0x0 */\n            uint32_t reserved_18_31      : 14; /* [31:18],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf2_if_io_dly_3;\n\n    /* 0x58 : sf2_if_io_dly_4 */\n    union {\n        struct\n        {\n            uint32_t sf2_io_3_oe_dly_sel : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_7        : 6;  /* [ 7: 2],       rsvd,        0x0 */\n            uint32_t sf2_io_3_di_dly_sel : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reserved_10_15      : 6;  /* [15:10],       rsvd,        0x0 */\n            uint32_t sf2_io_3_do_dly_sel : 2;  /* [17:16],        r/w,        0x0 */\n            uint32_t reserved_18_31      : 14; /* [31:18],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf2_if_io_dly_4;\n\n    /* 0x5C : sf3_if_io_dly_0 */\n    union {\n        struct\n        {\n            uint32_t sf3_cs_dly_sel      : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t sf3_cs2_dly_sel     : 2;  /* [ 3: 2],        r/w,        0x0 */\n            uint32_t reserved_4_7        : 4;  /* [ 7: 4],       rsvd,        0x0 */\n            uint32_t sf3_clk_out_dly_sel : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reserved_10_25      : 16; /* [25:10],       rsvd,        0x0 */\n            uint32_t sf3_dqs_oe_dly_sel  : 2;  /* [27:26],        r/w,        0x0 */\n            uint32_t sf3_dqs_di_dly_sel  : 2;  /* [29:28],        r/w,        0x0 */\n            uint32_t sf3_dqs_do_dly_sel  : 2;  /* [31:30],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf3_if_io_dly_0;\n\n    /* 0x60 : sf3_if_io_dly_1 */\n    union {\n        struct\n        {\n            uint32_t sf3_io_0_oe_dly_sel : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_7        : 6;  /* [ 7: 2],       rsvd,        0x0 */\n            uint32_t sf3_io_0_di_dly_sel : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reserved_10_15      : 6;  /* [15:10],       rsvd,        0x0 */\n            uint32_t sf3_io_0_do_dly_sel : 2;  /* [17:16],        r/w,        0x0 */\n            uint32_t reserved_18_31      : 14; /* [31:18],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf3_if_io_dly_1;\n\n    /* 0x64 : sf3_if_io_dly_2 */\n    union {\n        struct\n        {\n            uint32_t sf3_io_1_oe_dly_sel : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_7        : 6;  /* [ 7: 2],       rsvd,        0x0 */\n            uint32_t sf3_io_1_di_dly_sel : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reserved_10_15      : 6;  /* [15:10],       rsvd,        0x0 */\n            uint32_t sf3_io_1_do_dly_sel : 2;  /* [17:16],        r/w,        0x0 */\n            uint32_t reserved_18_31      : 14; /* [31:18],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf3_if_io_dly_2;\n\n    /* 0x68 : sf3_if_io_dly_3 */\n    union {\n        struct\n        {\n            uint32_t sf3_io_2_oe_dly_sel : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_7        : 6;  /* [ 7: 2],       rsvd,        0x0 */\n            uint32_t sf3_io_2_di_dly_sel : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reserved_10_15      : 6;  /* [15:10],       rsvd,        0x0 */\n            uint32_t sf3_io_2_do_dly_sel : 2;  /* [17:16],        r/w,        0x0 */\n            uint32_t reserved_18_31      : 14; /* [31:18],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf3_if_io_dly_3;\n\n    /* 0x6C : sf3_if_io_dly_4 */\n    union {\n        struct\n        {\n            uint32_t sf3_io_3_oe_dly_sel : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_7        : 6;  /* [ 7: 2],       rsvd,        0x0 */\n            uint32_t sf3_io_3_di_dly_sel : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reserved_10_15      : 6;  /* [15:10],       rsvd,        0x0 */\n            uint32_t sf3_io_3_do_dly_sel : 2;  /* [17:16],        r/w,        0x0 */\n            uint32_t reserved_18_31      : 14; /* [31:18],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf3_if_io_dly_4;\n\n    /* 0x70 : sf_ctrl_2 */\n    union {\n        struct\n        {\n            uint32_t sf_if_pad_sel      : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2         : 1;  /* [    2],       rsvd,        0x0 */\n            uint32_t sf_if_pad_sel_lock : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t sf_if_dtr_en       : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t sf_if_dqs_en       : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t reserved_6_27      : 22; /* [27: 6],       rsvd,        0x0 */\n            uint32_t sf_if_bk_swap      : 1;  /* [   28],        r/w,        0x0 */\n            uint32_t sf_if_bk2_mode     : 1;  /* [   29],        r/w,        0x0 */\n            uint32_t sf_if_bk2_en       : 1;  /* [   30],        r/w,        0x0 */\n            uint32_t sf_if_0_bk_sel     : 1;  /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_ctrl_2;\n\n    /* 0x74 : sf_ctrl_3 */\n    union {\n        struct\n        {\n            uint32_t sf_cmds_wrap_len   : 4;  /* [ 3: 0],        r/w,        0x6 */\n            uint32_t sf_cmds_en         : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t sf_cmds_bt_dly     : 3;  /* [ 7: 5],        r/w,        0x2 */\n            uint32_t sf_cmds_bt_en      : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t sf_cmds_wrap_q_ini : 1;  /* [    9],        r/w,        0x0 */\n            uint32_t sf_cmds_wrap_mode  : 1;  /* [   10],        r/w,        0x0 */\n            uint32_t sf_cmds_wrap_q     : 1;  /* [   11],          r,        0x0 */\n            uint32_t reserved_12_28     : 17; /* [28:12],       rsvd,        0x0 */\n            uint32_t sf_if_1_ack_lat    : 3;  /* [31:29],        r/w,        0x1 */\n        } BF;\n        uint32_t WORD;\n    } sf_ctrl_3;\n\n    /* 0x78 : sf_if_iahb_3 */\n    union {\n        struct\n        {\n            uint32_t reserved_0_11       : 12; /* [11: 0],       rsvd,        0x0 */\n            uint32_t sf_if_2_dmy_byte    : 5;  /* [16:12],        r/w,        0x0 */\n            uint32_t sf_if_2_adr_byte    : 3;  /* [19:17],        r/w,        0x2 */\n            uint32_t sf_if_2_cmd_byte    : 3;  /* [22:20],        r/w,        0x0 */\n            uint32_t sf_if_2_dat_rw      : 1;  /* [   23],        r/w,        0x1 */\n            uint32_t sf_if_2_dat_en      : 1;  /* [   24],        r/w,        0x1 */\n            uint32_t sf_if_2_dmy_en      : 1;  /* [   25],        r/w,        0x0 */\n            uint32_t sf_if_2_adr_en      : 1;  /* [   26],        r/w,        0x1 */\n            uint32_t sf_if_2_cmd_en      : 1;  /* [   27],        r/w,        0x1 */\n            uint32_t sf_if_2_spi_mode    : 3;  /* [30:28],        r/w,        0x0 */\n            uint32_t sf_if_2_qpi_mode_en : 1;  /* [   31],        r/w,        0x1 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_iahb_3;\n\n    /* 0x7C : sf_if_iahb_4 */\n    union {\n        struct\n        {\n            uint32_t sf_if_2_cmd_buf_0 : 32; /* [31: 0],        r/w, 0x38000000 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_iahb_4;\n\n    /* 0x80 : sf_if_iahb_5 */\n    union {\n        struct\n        {\n            uint32_t sf_if_2_cmd_buf_1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_iahb_5;\n\n    /* 0x84 : sf_if_iahb_6 */\n    union {\n        struct\n        {\n            uint32_t reserved_0_16       : 17; /* [16: 0],       rsvd,        0x0 */\n            uint32_t sf_if_3_adr_byte    : 3;  /* [19:17],        r/w,        0x0 */\n            uint32_t sf_if_3_cmd_byte    : 3;  /* [22:20],        r/w,        0x0 */\n            uint32_t reserved_23_25      : 3;  /* [25:23],       rsvd,        0x0 */\n            uint32_t sf_if_3_adr_en      : 1;  /* [   26],        r/w,        0x0 */\n            uint32_t sf_if_3_cmd_en      : 1;  /* [   27],        r/w,        0x1 */\n            uint32_t sf_if_3_spi_mode    : 3;  /* [30:28],        r/w,        0x0 */\n            uint32_t sf_if_3_qpi_mode_en : 1;  /* [   31],        r/w,        0x1 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_iahb_6;\n\n    /* 0x88 : sf_if_iahb_7 */\n    union {\n        struct\n        {\n            uint32_t sf_if_3_cmd_buf_0 : 32; /* [31: 0],        r/w, 0xc0000000L */\n        } BF;\n        uint32_t WORD;\n    } sf_if_iahb_7;\n\n    /* 0x8C : sf_if_iahb_8 */\n    union {\n        struct\n        {\n            uint32_t sf_if_3_cmd_buf_1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_iahb_8;\n\n    /* 0x90 : sf_if_iahb_9 */\n    union {\n        struct\n        {\n            uint32_t reserved_0_11       : 12; /* [11: 0],       rsvd,        0x0 */\n            uint32_t sf_if_4_dmy_byte    : 5;  /* [16:12],        r/w,        0x2 */\n            uint32_t sf_if_4_adr_byte    : 3;  /* [19:17],        r/w,        0x2 */\n            uint32_t sf_if_4_cmd_byte    : 3;  /* [22:20],        r/w,        0x0 */\n            uint32_t sf_if_4_dat_rw      : 1;  /* [   23],        r/w,        0x0 */\n            uint32_t sf_if_4_dat_en      : 1;  /* [   24],        r/w,        0x1 */\n            uint32_t sf_if_4_dmy_en      : 1;  /* [   25],        r/w,        0x1 */\n            uint32_t sf_if_4_adr_en      : 1;  /* [   26],        r/w,        0x1 */\n            uint32_t sf_if_4_cmd_en      : 1;  /* [   27],        r/w,        0x1 */\n            uint32_t sf_if_4_spi_mode    : 3;  /* [30:28],        r/w,        0x0 */\n            uint32_t sf_if_4_qpi_mode_en : 1;  /* [   31],        r/w,        0x1 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_iahb_9;\n\n    /* 0x94 : sf_if_iahb_10 */\n    union {\n        struct\n        {\n            uint32_t sf_if_4_cmd_buf_0 : 32; /* [31: 0],        r/w, 0xeb000000L */\n        } BF;\n        uint32_t WORD;\n    } sf_if_iahb_10;\n\n    /* 0x98 : sf_if_iahb_11 */\n    union {\n        struct\n        {\n            uint32_t sf_if_4_cmd_buf_1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_iahb_11;\n\n    /* 0x9C : sf_if_iahb_12 */\n    union {\n        struct\n        {\n            uint32_t reserved_0_1          : 2;  /* [ 1: 0],       rsvd,        0x0 */\n            uint32_t sf2_clk_sf_rx_inv_sel : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t sf2_clk_sf_rx_inv_src : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t sf2_clk_out_inv_sel   : 1;  /* [    4],        r/w,        0x1 */\n            uint32_t sf3_clk_out_inv_sel   : 1;  /* [    5],        r/w,        0x1 */\n            uint32_t reserved_6_7          : 2;  /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t sf2_if_read_dly_n     : 3;  /* [10: 8],        r/w,        0x0 */\n            uint32_t sf2_if_read_dly_en    : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t sf2_if_read_dly_src   : 1;  /* [   12],        r/w,        0x0 */\n            uint32_t reserved_13_31        : 19; /* [31:13],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_if_iahb_12;\n\n    /* 0xa0  reserved */\n    uint8_t RESERVED0xa0[96];\n\n    /* 0x100 : sf_ctrl_prot_en_rd */\n    union {\n        struct\n        {\n            uint32_t sf_ctrl_prot_en_rd   : 1;  /* [    0],          r,        0x1 */\n            uint32_t sf_ctrl_id0_en_rd    : 1;  /* [    1],          r,        0x1 */\n            uint32_t sf_ctrl_id1_en_rd    : 1;  /* [    2],          r,        0x1 */\n            uint32_t reserved_3_29        : 27; /* [29: 3],       rsvd,        0x0 */\n            uint32_t sf_if_0_trig_wr_lock : 1;  /* [   30],          r,        0x0 */\n            uint32_t sf_dbg_dis           : 1;  /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_ctrl_prot_en_rd;\n\n    /* 0x104 : sf_ctrl_prot_en */\n    union {\n        struct\n        {\n            uint32_t sf_ctrl_prot_en : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t sf_ctrl_id0_en  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t sf_ctrl_id1_en  : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t reserved_3_31   : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_ctrl_prot_en;\n\n    /* 0x108  reserved */\n    uint8_t RESERVED0x108[248];\n\n    /* 0x200 : sf_aes_key_r0_0 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r0_0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r0_0;\n\n    /* 0x204 : sf_aes_key_r0_1 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r0_1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r0_1;\n\n    /* 0x208 : sf_aes_key_r0_2 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r0_2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r0_2;\n\n    /* 0x20C : sf_aes_key_r0_3 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r0_3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r0_3;\n\n    /* 0x210 : sf_aes_key_r0_4 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r0_4 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r0_4;\n\n    /* 0x214 : sf_aes_key_r0_5 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r0_5 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r0_5;\n\n    /* 0x218 : sf_aes_key_r0_6 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r0_6 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r0_6;\n\n    /* 0x21C : sf_aes_key_r0_7 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r0_7 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r0_7;\n\n    /* 0x220 : sf_aes_iv_r0_w0 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_iv_r0_w0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_iv_r0_w0;\n\n    /* 0x224 : sf_aes_iv_r0_w1 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_iv_r0_w1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_iv_r0_w1;\n\n    /* 0x228 : sf_aes_iv_r0_w2 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_iv_r0_w2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_iv_r0_w2;\n\n    /* 0x22C : sf_aes_iv_r0_w3 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_iv_r0_w3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_iv_r0_w3;\n\n    /* 0x230 : sf_aes_cfg_r0 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_region_r0_end       : 14; /* [13: 0],        r/w,     0x3fff */\n            uint32_t sf_aes_region_r0_start     : 14; /* [27:14],        r/w,        0x0 */\n            uint32_t reserved_28                : 1;  /* [   28],       rsvd,        0x0 */\n            uint32_t sf_aes_region_r0_hw_key_en : 1;  /* [   29],        r/w,        0x0 */\n            uint32_t sf_aes_region_r0_en        : 1;  /* [   30],        r/w,        0x0 */\n            uint32_t sf_aes_region_r0_lock      : 1;  /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_cfg_r0;\n\n    /* 0x234  reserved */\n    uint8_t RESERVED0x234[204];\n\n    /* 0x300 : sf_aes_key_r1_0 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r1_0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r1_0;\n\n    /* 0x304 : sf_aes_key_r1_1 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r1_1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r1_1;\n\n    /* 0x308 : sf_aes_key_r1_2 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r1_2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r1_2;\n\n    /* 0x30C : sf_aes_key_r1_3 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r1_3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r1_3;\n\n    /* 0x310 : sf_aes_key_r1_4 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r1_4 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r1_4;\n\n    /* 0x314 : sf_aes_key_r1_5 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r1_5 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r1_5;\n\n    /* 0x318 : sf_aes_key_r1_6 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r1_6 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r1_6;\n\n    /* 0x31C : sf_aes_key_r1_7 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r1_7 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r1_7;\n\n    /* 0x320 : sf_aes_iv_r1_w0 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_iv_r1_w0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_iv_r1_w0;\n\n    /* 0x324 : sf_aes_iv_r1_w1 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_iv_r1_w1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_iv_r1_w1;\n\n    /* 0x328 : sf_aes_iv_r1_w2 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_iv_r1_w2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_iv_r1_w2;\n\n    /* 0x32C : sf_aes_iv_r1_w3 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_iv_r1_w3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_iv_r1_w3;\n\n    /* 0x330 : sf_aes_r1 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_r1_end       : 14; /* [13: 0],        r/w,     0x3fff */\n            uint32_t sf_aes_r1_start     : 14; /* [27:14],        r/w,        0x0 */\n            uint32_t reserved_28         : 1;  /* [   28],       rsvd,        0x0 */\n            uint32_t sf_aes_r1_hw_key_en : 1;  /* [   29],        r/w,        0x0 */\n            uint32_t sf_aes_r1_en        : 1;  /* [   30],        r/w,        0x0 */\n            uint32_t sf_aes_r1_lock      : 1;  /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_r1;\n\n    /* 0x334  reserved */\n    uint8_t RESERVED0x334[204];\n\n    /* 0x400 : sf_aes_key_r2_0 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r2_0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r2_0;\n\n    /* 0x404 : sf_aes_key_r2_1 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r2_1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r2_1;\n\n    /* 0x408 : sf_aes_key_r2_2 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r2_2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r2_2;\n\n    /* 0x40C : sf_aes_key_r2_3 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r2_3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r2_3;\n\n    /* 0x410 : sf_aes_key_r2_4 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r2_4 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r2_4;\n\n    /* 0x414 : sf_aes_key_r2_5 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r2_5 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r2_5;\n\n    /* 0x418 : sf_aes_key_r2_6 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r2_6 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r2_6;\n\n    /* 0x41C : sf_aes_key_r2_7 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_r2_7 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_r2_7;\n\n    /* 0x420 : sf_aes_iv_r2_w0 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_iv_r2_w0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_iv_r2_w0;\n\n    /* 0x424 : sf_aes_iv_r2_w1 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_iv_r2_w1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_iv_r2_w1;\n\n    /* 0x428 : sf_aes_iv_r2_w2 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_iv_r2_w2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_iv_r2_w2;\n\n    /* 0x42C : sf_aes_iv_r2_w3 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_iv_r2_w3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_iv_r2_w3;\n\n    /* 0x430 : sf_aes_r2 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_r2_end       : 14; /* [13: 0],        r/w,     0x3fff */\n            uint32_t sf_aes_r2_start     : 14; /* [27:14],        r/w,        0x0 */\n            uint32_t reserved_28         : 1;  /* [   28],       rsvd,        0x0 */\n            uint32_t sf_aes_r2_hw_key_en : 1;  /* [   29],        r/w,        0x0 */\n            uint32_t sf_aes_r2_en        : 1;  /* [   30],        r/w,        0x0 */\n            uint32_t sf_aes_r2_lock      : 1;  /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_r2;\n\n    /* 0x434 : sf_id0_offset */\n    union {\n        struct\n        {\n            uint32_t sf_id0_offset  : 24; /* [23: 0],        r/w,        0x0 */\n            uint32_t reserved_24_31 : 8;  /* [31:24],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_id0_offset;\n\n    /* 0x438 : sf_id1_offset */\n    union {\n        struct\n        {\n            uint32_t sf_id1_offset  : 24; /* [23: 0],        r/w,        0x0 */\n            uint32_t reserved_24_31 : 8;  /* [31:24],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_id1_offset;\n\n    /* 0x43C : sf_bk2_id0_offset */\n    union {\n        struct\n        {\n            uint32_t sf_bk2_id0_offset : 24; /* [23: 0],        r/w,        0x0 */\n            uint32_t reserved_24_31    : 8;  /* [31:24],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_bk2_id0_offset;\n\n    /* 0x440 : sf_bk2_id1_offset */\n    union {\n        struct\n        {\n            uint32_t sf_bk2_id1_offset : 24; /* [23: 0],        r/w,        0x0 */\n            uint32_t reserved_24_31    : 8;  /* [31:24],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_bk2_id1_offset;\n};\n\ntypedef volatile struct sf_ctrl_reg sf_ctrl_reg_t;\n\n/*Following is reg patch*/\n\n/* 0x0 : sf_aes_key_0 */\n#define SF_CTRL_SF_AES_KEY_0_OFFSET (0x0)\n#define SF_CTRL_SF_AES_KEY_0        SF_CTRL_SF_AES_KEY_0\n#define SF_CTRL_SF_AES_KEY_0_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_0_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_0_MSK    (((1U << SF_CTRL_SF_AES_KEY_0_LEN) - 1) << SF_CTRL_SF_AES_KEY_0_POS)\n#define SF_CTRL_SF_AES_KEY_0_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_0_LEN) - 1) << SF_CTRL_SF_AES_KEY_0_POS))\n\n/* 0x4 : sf_aes_key_1 */\n#define SF_CTRL_SF_AES_KEY_1_OFFSET (0x4)\n#define SF_CTRL_SF_AES_KEY_1        SF_CTRL_SF_AES_KEY_1\n#define SF_CTRL_SF_AES_KEY_1_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_1_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_1_MSK    (((1U << SF_CTRL_SF_AES_KEY_1_LEN) - 1) << SF_CTRL_SF_AES_KEY_1_POS)\n#define SF_CTRL_SF_AES_KEY_1_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_1_LEN) - 1) << SF_CTRL_SF_AES_KEY_1_POS))\n\n/* 0x8 : sf_aes_key_2 */\n#define SF_CTRL_SF_AES_KEY_2_OFFSET (0x8)\n#define SF_CTRL_SF_AES_KEY_2        SF_CTRL_SF_AES_KEY_2\n#define SF_CTRL_SF_AES_KEY_2_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_2_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_2_MSK    (((1U << SF_CTRL_SF_AES_KEY_2_LEN) - 1) << SF_CTRL_SF_AES_KEY_2_POS)\n#define SF_CTRL_SF_AES_KEY_2_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_2_LEN) - 1) << SF_CTRL_SF_AES_KEY_2_POS))\n\n/* 0xc : sf_aes_key_3 */\n#define SF_CTRL_SF_AES_KEY_3_OFFSET (0xc)\n#define SF_CTRL_SF_AES_KEY_3        SF_CTRL_SF_AES_KEY_3\n#define SF_CTRL_SF_AES_KEY_3_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_3_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_3_MSK    (((1U << SF_CTRL_SF_AES_KEY_3_LEN) - 1) << SF_CTRL_SF_AES_KEY_3_POS)\n#define SF_CTRL_SF_AES_KEY_3_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_3_LEN) - 1) << SF_CTRL_SF_AES_KEY_3_POS))\n\n/* 0x10 : sf_aes_key_4 */\n#define SF_CTRL_SF_AES_KEY_4_OFFSET (0x10)\n#define SF_CTRL_SF_AES_KEY_4        SF_CTRL_SF_AES_KEY_4\n#define SF_CTRL_SF_AES_KEY_4_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_4_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_4_MSK    (((1U << SF_CTRL_SF_AES_KEY_4_LEN) - 1) << SF_CTRL_SF_AES_KEY_4_POS)\n#define SF_CTRL_SF_AES_KEY_4_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_4_LEN) - 1) << SF_CTRL_SF_AES_KEY_4_POS))\n\n/* 0x14 : sf_aes_key_5 */\n#define SF_CTRL_SF_AES_KEY_5_OFFSET (0x14)\n#define SF_CTRL_SF_AES_KEY_5        SF_CTRL_SF_AES_KEY_5\n#define SF_CTRL_SF_AES_KEY_5_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_5_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_5_MSK    (((1U << SF_CTRL_SF_AES_KEY_5_LEN) - 1) << SF_CTRL_SF_AES_KEY_5_POS)\n#define SF_CTRL_SF_AES_KEY_5_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_5_LEN) - 1) << SF_CTRL_SF_AES_KEY_5_POS))\n\n/* 0x18 : sf_aes_key_6 */\n#define SF_CTRL_SF_AES_KEY_6_OFFSET (0x18)\n#define SF_CTRL_SF_AES_KEY_6        SF_CTRL_SF_AES_KEY_6\n#define SF_CTRL_SF_AES_KEY_6_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_6_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_6_MSK    (((1U << SF_CTRL_SF_AES_KEY_6_LEN) - 1) << SF_CTRL_SF_AES_KEY_6_POS)\n#define SF_CTRL_SF_AES_KEY_6_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_6_LEN) - 1) << SF_CTRL_SF_AES_KEY_6_POS))\n\n/* 0x1c : sf_aes_key_7 */\n#define SF_CTRL_SF_AES_KEY_7_OFFSET (0x1c)\n#define SF_CTRL_SF_AES_KEY_7        SF_CTRL_SF_AES_KEY_7\n#define SF_CTRL_SF_AES_KEY_7_POS    (0U)\n#define SF_CTRL_SF_AES_KEY_7_LEN    (32U)\n#define SF_CTRL_SF_AES_KEY_7_MSK    (((1U << SF_CTRL_SF_AES_KEY_7_LEN) - 1) << SF_CTRL_SF_AES_KEY_7_POS)\n#define SF_CTRL_SF_AES_KEY_7_UMSK   (~(((1U << SF_CTRL_SF_AES_KEY_7_LEN) - 1) << SF_CTRL_SF_AES_KEY_7_POS))\n\n/* 0x20 : sf_aes_iv_w0 */\n#define SF_CTRL_SF_AES_IV_W0_OFFSET (0x20)\n#define SF_CTRL_SF_AES_IV_W0        SF_CTRL_SF_AES_IV_W0\n#define SF_CTRL_SF_AES_IV_W0_POS    (0U)\n#define SF_CTRL_SF_AES_IV_W0_LEN    (32U)\n#define SF_CTRL_SF_AES_IV_W0_MSK    (((1U << SF_CTRL_SF_AES_IV_W0_LEN) - 1) << SF_CTRL_SF_AES_IV_W0_POS)\n#define SF_CTRL_SF_AES_IV_W0_UMSK   (~(((1U << SF_CTRL_SF_AES_IV_W0_LEN) - 1) << SF_CTRL_SF_AES_IV_W0_POS))\n\n/* 0x24 : sf_aes_iv_w1 */\n#define SF_CTRL_SF_AES_IV_W1_OFFSET (0x24)\n#define SF_CTRL_SF_AES_IV_W1        SF_CTRL_SF_AES_IV_W1\n#define SF_CTRL_SF_AES_IV_W1_POS    (0U)\n#define SF_CTRL_SF_AES_IV_W1_LEN    (32U)\n#define SF_CTRL_SF_AES_IV_W1_MSK    (((1U << SF_CTRL_SF_AES_IV_W1_LEN) - 1) << SF_CTRL_SF_AES_IV_W1_POS)\n#define SF_CTRL_SF_AES_IV_W1_UMSK   (~(((1U << SF_CTRL_SF_AES_IV_W1_LEN) - 1) << SF_CTRL_SF_AES_IV_W1_POS))\n\n/* 0x28 : sf_aes_iv_w2 */\n#define SF_CTRL_SF_AES_IV_W2_OFFSET (0x28)\n#define SF_CTRL_SF_AES_IV_W2        SF_CTRL_SF_AES_IV_W2\n#define SF_CTRL_SF_AES_IV_W2_POS    (0U)\n#define SF_CTRL_SF_AES_IV_W2_LEN    (32U)\n#define SF_CTRL_SF_AES_IV_W2_MSK    (((1U << SF_CTRL_SF_AES_IV_W2_LEN) - 1) << SF_CTRL_SF_AES_IV_W2_POS)\n#define SF_CTRL_SF_AES_IV_W2_UMSK   (~(((1U << SF_CTRL_SF_AES_IV_W2_LEN) - 1) << SF_CTRL_SF_AES_IV_W2_POS))\n\n/* 0x2c : sf_aes_iv_w3 */\n#define SF_CTRL_SF_AES_IV_W3_OFFSET (0x2c)\n#define SF_CTRL_SF_AES_IV_W3        SF_CTRL_SF_AES_IV_W3\n#define SF_CTRL_SF_AES_IV_W3_POS    (0U)\n#define SF_CTRL_SF_AES_IV_W3_LEN    (32U)\n#define SF_CTRL_SF_AES_IV_W3_MSK    (((1U << SF_CTRL_SF_AES_IV_W3_LEN) - 1) << SF_CTRL_SF_AES_IV_W3_POS)\n#define SF_CTRL_SF_AES_IV_W3_UMSK   (~(((1U << SF_CTRL_SF_AES_IV_W3_LEN) - 1) << SF_CTRL_SF_AES_IV_W3_POS))\n\n/* 0x30 : sf_aes_cfg */\n#define SF_CTRL_SF_AES_CFG_OFFSET            (0x30)\n#define SF_CTRL_SF_AES_REGION_END            SF_CTRL_SF_AES_REGION_END\n#define SF_CTRL_SF_AES_REGION_END_POS        (0U)\n#define SF_CTRL_SF_AES_REGION_END_LEN        (14U)\n#define SF_CTRL_SF_AES_REGION_END_MSK        (((1U << SF_CTRL_SF_AES_REGION_END_LEN) - 1) << SF_CTRL_SF_AES_REGION_END_POS)\n#define SF_CTRL_SF_AES_REGION_END_UMSK       (~(((1U << SF_CTRL_SF_AES_REGION_END_LEN) - 1) << SF_CTRL_SF_AES_REGION_END_POS))\n#define SF_CTRL_SF_AES_REGION_START          SF_CTRL_SF_AES_REGION_START\n#define SF_CTRL_SF_AES_REGION_START_POS      (14U)\n#define SF_CTRL_SF_AES_REGION_START_LEN      (14U)\n#define SF_CTRL_SF_AES_REGION_START_MSK      (((1U << SF_CTRL_SF_AES_REGION_START_LEN) - 1) << SF_CTRL_SF_AES_REGION_START_POS)\n#define SF_CTRL_SF_AES_REGION_START_UMSK     (~(((1U << SF_CTRL_SF_AES_REGION_START_LEN) - 1) << SF_CTRL_SF_AES_REGION_START_POS))\n#define SF_CTRL_SF_AES_REGION_HW_KEY_EN      SF_CTRL_SF_AES_REGION_HW_KEY_EN\n#define SF_CTRL_SF_AES_REGION_HW_KEY_EN_POS  (29U)\n#define SF_CTRL_SF_AES_REGION_HW_KEY_EN_LEN  (1U)\n#define SF_CTRL_SF_AES_REGION_HW_KEY_EN_MSK  (((1U << SF_CTRL_SF_AES_REGION_HW_KEY_EN_LEN) - 1) << SF_CTRL_SF_AES_REGION_HW_KEY_EN_POS)\n#define SF_CTRL_SF_AES_REGION_HW_KEY_EN_UMSK (~(((1U << SF_CTRL_SF_AES_REGION_HW_KEY_EN_LEN) - 1) << SF_CTRL_SF_AES_REGION_HW_KEY_EN_POS))\n#define SF_CTRL_SF_AES_REGION_EN             SF_CTRL_SF_AES_REGION_EN\n#define SF_CTRL_SF_AES_REGION_EN_POS         (30U)\n#define SF_CTRL_SF_AES_REGION_EN_LEN         (1U)\n#define SF_CTRL_SF_AES_REGION_EN_MSK         (((1U << SF_CTRL_SF_AES_REGION_EN_LEN) - 1) << SF_CTRL_SF_AES_REGION_EN_POS)\n#define SF_CTRL_SF_AES_REGION_EN_UMSK        (~(((1U << SF_CTRL_SF_AES_REGION_EN_LEN) - 1) << SF_CTRL_SF_AES_REGION_EN_POS))\n#define SF_CTRL_SF_AES_REGION_LOCK           SF_CTRL_SF_AES_REGION_LOCK\n#define SF_CTRL_SF_AES_REGION_LOCK_POS       (31U)\n#define SF_CTRL_SF_AES_REGION_LOCK_LEN       (1U)\n#define SF_CTRL_SF_AES_REGION_LOCK_MSK       (((1U << SF_CTRL_SF_AES_REGION_LOCK_LEN) - 1) << SF_CTRL_SF_AES_REGION_LOCK_POS)\n#define SF_CTRL_SF_AES_REGION_LOCK_UMSK      (~(((1U << SF_CTRL_SF_AES_REGION_LOCK_LEN) - 1) << SF_CTRL_SF_AES_REGION_LOCK_POS))\n\nstruct sf_ctrl_aes_region_reg {\n    /* 0x0 : sf_aes_key_0 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_0;\n\n    /* 0x4 : sf_aes_key_1 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_1;\n\n    /* 0x8 : sf_aes_key_2 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_2;\n\n    /* 0xc : sf_aes_key_3 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_3;\n\n    /* 0x10 : sf_aes_key_4 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_4 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_4;\n\n    /* 0x14 : sf_aes_key_5 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_5 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_5;\n\n    /* 0x18 : sf_aes_key_6 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_6 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_6;\n\n    /* 0x1c : sf_aes_key_7 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_key_7 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_key_7;\n\n    /* 0x20 : sf_aes_iv_w0 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_iv_w0 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_iv_w0;\n\n    /* 0x24 : sf_aes_iv_w1 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_iv_w1 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_iv_w1;\n\n    /* 0x28 : sf_aes_iv_w2 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_iv_w2 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_iv_w2;\n\n    /* 0x2c : sf_aes_iv_w3 */\n    union {\n        struct\n        {\n            uint32_t sf_aes_iv_w3 : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_iv_w3;\n\n    /* 0x30 : sf_aes_cfg */\n    union {\n        struct\n        {\n            uint32_t sf_aes_region_end       : 14; /* [13: 0],        r/w,     0x3fff */\n            uint32_t sf_aes_region_start     : 14; /* [27:14],        r/w,        0x0 */\n            uint32_t reserved_28             : 1;  /* [   28],       rsvd,        0x0 */\n            uint32_t sf_aes_region_hw_key_en : 1;  /* [   29],        r/w,        0x0 */\n            uint32_t sf_aes_region_en        : 1;  /* [   30],        r/w,        0x0 */\n            uint32_t sf_aes_region_lock      : 1;  /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sf_aes_cfg;\n};\n\ntypedef volatile struct sf_ctrl_aes_region_reg sf_ctrl_aes_region_reg_t;\n\n#define SF_CTRL_AES_REGION_OFFSET 0x200\n\n#endif /* __SF_CTRL_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/soc702_reg.svd",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\t<device schemaVersion=\"1.1\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\" xs:noNamespaceSchemaLocation=\"CMSIS-SVD_Schema_1_0.xsd\">\n\t\t<vendor>bouffalolab</vendor>\n\t\t<vendorID>bouffalolab</vendorID>\n\t\t<name>702</name>\n\t\t<series>WiFi BT</series>\n\t\t<description>high-performance, 32-bit RV32IMAFC core</description>\n\t\t<addressUnitBits>8</addressUnitBits>\n\t\t<width>32</width>\n\t\t<size>32</size>\n\t\t<resetValue>0x00000000</resetValue>\n\t\t<resetMask>0xFFFFFFFF</resetMask>\n\t\t<cpu>\n\t\t\t<name>702</name>\n\t\t\t<endian>little</endian>\n\t\t</cpu>\n\t\t<peripherals>\n\t\t\t<peripheral>\n\t\t\t\t<name>glb</name>\n\t\t\t\t<description>glb.</description>\n\t\t\t\t<baseAddress>0x40000000</baseAddress>\n\t\t\t\t<groupName>glb</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>clk_cfg0</name>\n\t\t\t\t\t\t<description>clk_cfg0.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>glb_id</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>chip_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>fclk_sw_state</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_bclk_div</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_hclk_div</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_root_clk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_pll_sel</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_bclk_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_hclk_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_fclk_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_pll_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>clk_cfg1</name>\n\t\t\t\t\t\t<description>clk_cfg1.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_cam_ref_clk_div</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_cam_ref_clk_src_sel</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_cam_ref_clk_en</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>m154_zbEn</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ble_en</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ble_clk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_i2s_0_ref_clk_oe</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_i2s0_clk_en</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_i2s_clk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_48m_div_en</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_clk_en</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>qdec_clk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>qdec_clk_div</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>clk_cfg2</name>\n\t\t\t\t\t\t<description>clk_cfg2.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dma_clk_en</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ir_clk_en</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ir_clk_div</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_clk_sel2</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_clk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_clk_en</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_clk_div</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_uart_clk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uart_clk_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uart_clk_div</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>clk_cfg3</name>\n\t\t\t\t\t\t<description>clk_cfg3.</description>\n\t\t\t\t\t\t<addressOffset>0xC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>chip_clk_out_1_sel</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>chip_clk_out_0_sel</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2c_clk_en</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2c_clk_div</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cfg_inv_eth_rx_clk</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cfg_inv_rf_test_clk_o</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spi_clk_en</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cfg_inv_eth_tx_clk</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cfg_inv_eth_ref_clk_o</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cfg_sel_eth_ref_clk_o</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spi_clk_div</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>swrst_cfg0</name>\n\t\t\t\t\t\t<description>swrst_cfg0.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s30</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s20</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s01</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s00</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>swrst_cfg1</name>\n\t\t\t\t\t\t<description>swrst_cfg1.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1ae</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1ad</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1ac</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1ab</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1aa</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1a9</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1a8</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1a7</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1a6</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1a5</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1a4</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1a3</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1a2</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1a1</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1a0</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1f</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1e</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1d</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1c</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1b</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s1a</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s19</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s18</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s17</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s16</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s15</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s14</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s13</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s12</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s11</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>swrst_s10</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>swrst_cfg2</name>\n\t\t\t\t\t\t<description>swrst_cfg2.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pka_clk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_ctrl_reset_dummy</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_ctrl_sys_reset</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_ctrl_cpu_reset</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_ctrl_pwron_rst</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>swrst_cfg3</name>\n\t\t\t\t\t\t<description>swrst_cfg3.</description>\n\t\t\t\t\t\t<addressOffset>0x1C</addressOffset>\n\t\t\t\t\t\t<fields/>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>cgen_cfg0</name>\n\t\t\t\t\t\t<description>cgen_cfg0.</description>\n\t\t\t\t\t\t<addressOffset>0x20</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cgen_m</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>cgen_cfg1</name>\n\t\t\t\t\t\t<description>cgen_cfg1.</description>\n\t\t\t\t\t\t<addressOffset>0x24</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cgen_s1a</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cgen_s1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>cgen_cfg2</name>\n\t\t\t\t\t\t<description>cgen_cfg2.</description>\n\t\t\t\t\t\t<addressOffset>0x28</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cgen_s3</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cgen_s2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>cgen_cfg3</name>\n\t\t\t\t\t\t<description>cgen_cfg3.</description>\n\t\t\t\t\t\t<addressOffset>0x2C</addressOffset>\n\t\t\t\t\t\t<fields/>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>MBIST_CTL</name>\n\t\t\t\t\t\t<description>MBIST_CTL.</description>\n\t\t\t\t\t\t<addressOffset>0x30</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_mbist_rst_n</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>em_ram_mbist_mode</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ocram_mbist_mode</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tag_mbist_mode</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hsram_cache_mbist_mode</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hsram_mem_mbist_mode</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>irom_mbist_mode</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>MBIST_STAT</name>\n\t\t\t\t\t\t<description>MBIST_STAT.</description>\n\t\t\t\t\t\t<addressOffset>0x34</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>em_ram_mbist_fail</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ocram_mbist_fail</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tag_mbist_fail</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hsram_cache_mbist_fail</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hsram_mem_mbist_fail</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>irom_mbist_fail</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>em_ram_mbist_done</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ocram_mbist_done</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tag_mbist_done</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hsram_cache_mbist_done</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hsram_mem_mbist_done</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>irom_mbist_done</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>bmx_cfg1</name>\n\t\t\t\t\t\t<description>bmx_cfg1.</description>\n\t\t\t\t\t\t<addressOffset>0x50</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_apb_cfg</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pds_apb_cfg</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hsel_option</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bmx_gating_dis</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bmx_busy_option_dis</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bmx_err_en</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bmx_arb_mode</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bmx_timeout_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>bmx_cfg2</name>\n\t\t\t\t\t\t<description>bmx_cfg2.</description>\n\t\t\t\t\t\t<addressOffset>0x54</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bmx_dbg_sel</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_w_thre_l1c</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_w_thre_bmx</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bmx_err_tz</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bmx_err_dec</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bmx_err_addr_dis</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>bmx_err_addr</name>\n\t\t\t\t\t\t<description>bmx_err_addr.</description>\n\t\t\t\t\t\t<addressOffset>0x58</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bmx_err_addr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>bmx_dbg_out</name>\n\t\t\t\t\t\t<description>bmx_dbg_out.</description>\n\t\t\t\t\t\t<addressOffset>0x5C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bmx_dbg_out</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>rsv0</name>\n\t\t\t\t\t\t<description>rsv0.</description>\n\t\t\t\t\t\t<addressOffset>0x60</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_31_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>rsv1</name>\n\t\t\t\t\t\t<description>rsv1.</description>\n\t\t\t\t\t\t<addressOffset>0x64</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_31_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>rsv2</name>\n\t\t\t\t\t\t<description>rsv2.</description>\n\t\t\t\t\t\t<addressOffset>0x68</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_31_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>rsv3</name>\n\t\t\t\t\t\t<description>rsv3.</description>\n\t\t\t\t\t\t<addressOffset>0x6C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_31_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sram_ret</name>\n\t\t\t\t\t\t<description>sram_ret.</description>\n\t\t\t\t\t\t<addressOffset>0x70</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_sram_ret</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sram_slp</name>\n\t\t\t\t\t\t<description>sram_slp.</description>\n\t\t\t\t\t\t<addressOffset>0x74</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_sram_slp</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sram_parm</name>\n\t\t\t\t\t\t<description>sram_parm.</description>\n\t\t\t\t\t\t<addressOffset>0x78</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_sram_parm</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>seam_misc</name>\n\t\t\t\t\t\t<description>seam_misc.</description>\n\t\t\t\t\t\t<addressOffset>0x7C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>em_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>glb_parm</name>\n\t\t\t\t\t\t<description>glb_parm.</description>\n\t\t\t\t\t\t<addressOffset>0x80</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pin_sel_emac_cam</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_ext_rst_smt</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_kys_drv_val</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uart_swap_set</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>p6_jtag_use_io_0_2_7</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>p5_dac_test_with_jtag</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>p4_adc_test_with_jtag</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>p3_cci_use_io_0_2_7</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>p2_dac_test_with_cci</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>p1_adc_test_with_cci</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_cci_use_jtag_pin</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_spi_0_swap</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_spi_0_master_mode</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cfg_flash_scenario</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cfg_sflash2_swap_cs_io2</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cfg_sflash2_swap_io0_io3</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>jtag_swap_set</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>PDM_CLK_CTRL</name>\n\t\t\t\t\t\t<description>PDM_CLK_CTRL.</description>\n\t\t\t\t\t\t<addressOffset>0x84</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_pdm0_clk_en</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_pdm0_clk_div</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_USE_PSRAM__IO</name>\n\t\t\t\t\t\t<description>GPIO_USE_PSRAM__IO.</description>\n\t\t\t\t\t\t<addressOffset>0x88</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cfg_gpio_use_psram_io</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>CPU_CLK_CFG</name>\n\t\t\t\t\t\t<description>CPU_CLK_CFG.</description>\n\t\t\t\t\t\t<addressOffset>0x90</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>debug_ndreset_gate</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cpu_rtc_sel</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cpu_rtc_en</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cpu_rtc_div</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPADC_32M_SRC_CTRL</name>\n\t\t\t\t\t\t<description>GPADC_32M_SRC_CTRL.</description>\n\t\t\t\t\t\t<addressOffset>0xA4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_32m_div_en</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_32m_clk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_32m_clk_div</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DIG32K_WAKEUP_CTRL</name>\n\t\t\t\t\t\t<description>DIG32K_WAKEUP_CTRL.</description>\n\t\t\t\t\t\t<addressOffset>0xA8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_en_platform_wakeup</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dig_clk_src_sel</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dig_512k_comp</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dig_512k_en</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dig_512k_div</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dig_32k_comp</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dig_32k_en</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dig_32k_div</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>WIFI_BT_COEX_CTRL</name>\n\t\t\t\t\t\t<description>WIFI_BT_COEX_CTRL.</description>\n\t\t\t\t\t\t<addressOffset>0xAC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>en_gpio_bt_coex</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>coex_bt_bw</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>coex_bt_pti</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>coex_bt_channel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>BZ_COEX_CTRL</name>\n\t\t\t\t\t\t<description>BZ_COEX_CTRL.</description>\n\t\t\t\t\t\t<addressOffset>0xB0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>coex_arb</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ble_tx_abort_dis</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ble_rx_abort_dis</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>m154_tx_abort_dis</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>m154_rx_abort_dis</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>coex_force_ch</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>coex_option</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>force_ble_win</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>force_m154_win</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>coex_pri</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bz_abort_pol</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bz_active_pol</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bz_pri_pol</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bz_pri_en</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bz_pri_thr</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>m154_rx_ignore</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ble_rx_ignore</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wlan_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>coex_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>UART_SIG_SEL_0</name>\n\t\t\t\t\t\t<description>UART_SIG_SEL_0.</description>\n\t\t\t\t\t\t<addressOffset>0xC0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uart_sig_7_sel</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uart_sig_6_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uart_sig_5_sel</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uart_sig_4_sel</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uart_sig_3_sel</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uart_sig_2_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uart_sig_1_sel</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uart_sig_0_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DBG_SEL_LL</name>\n\t\t\t\t\t\t<description>DBG_SEL_LL.</description>\n\t\t\t\t\t\t<addressOffset>0xD0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_dbg_ll_ctrl</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DBG_SEL_LH</name>\n\t\t\t\t\t\t<description>DBG_SEL_LH.</description>\n\t\t\t\t\t\t<addressOffset>0xD4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_dbg_lh_ctrl</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DBG_SEL_HL</name>\n\t\t\t\t\t\t<description>DBG_SEL_HL.</description>\n\t\t\t\t\t\t<addressOffset>0xD8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_dbg_hl_ctrl</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DBG_SEL_HH</name>\n\t\t\t\t\t\t<description>DBG_SEL_HH.</description>\n\t\t\t\t\t\t<addressOffset>0xDC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_dbg_hh_ctrl</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>debug</name>\n\t\t\t\t\t\t<description>debug.</description>\n\t\t\t\t\t\t<addressOffset>0xE0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>debug_i</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>debug_oe</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL0</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL0.</description>\n\t\t\t\t\t\t<addressOffset>0x100</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_1_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_1_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_1_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_1_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_1_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_1_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_0_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_0_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_0_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_0_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_0_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_0_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL1</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL1.</description>\n\t\t\t\t\t\t<addressOffset>0x104</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_3_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_3_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_3_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_3_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_3_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_3_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_2_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_2_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_2_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_2_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_2_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_2_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL2</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL2.</description>\n\t\t\t\t\t\t<addressOffset>0x108</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_5_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_5_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_5_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_5_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_5_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_5_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_4_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_4_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_4_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_4_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_4_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_4_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL3</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL3.</description>\n\t\t\t\t\t\t<addressOffset>0x10C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_7_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_7_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_7_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_7_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_7_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_7_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_6_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_6_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_6_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_6_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_6_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_6_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL4</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL4.</description>\n\t\t\t\t\t\t<addressOffset>0x110</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_9_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_9_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_9_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_9_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_9_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_9_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_8_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_8_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_8_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_8_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_8_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_8_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL5</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL5.</description>\n\t\t\t\t\t\t<addressOffset>0x114</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_11_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_11_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_11_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_11_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_11_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_11_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_10_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_10_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_10_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_10_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_10_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_10_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL6</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL6.</description>\n\t\t\t\t\t\t<addressOffset>0x118</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_13_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_13_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_13_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_13_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_13_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_13_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_12_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_12_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_12_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_12_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_12_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_12_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL7</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL7.</description>\n\t\t\t\t\t\t<addressOffset>0x11C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_15_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_15_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_15_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_15_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_15_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_15_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_14_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_14_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_14_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_14_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_14_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_14_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL8</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL8.</description>\n\t\t\t\t\t\t<addressOffset>0x120</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_17_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_17_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_17_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_17_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_17_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_17_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_16_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_16_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_16_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_16_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_16_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_16_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL9</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL9.</description>\n\t\t\t\t\t\t<addressOffset>0x124</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_19_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_19_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_19_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_19_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_19_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_19_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_18_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_18_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_18_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_18_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_18_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_18_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL10</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL10.</description>\n\t\t\t\t\t\t<addressOffset>0x128</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_21_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_21_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_21_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_21_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_21_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_21_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_20_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_20_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_20_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_20_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_20_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_20_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL11</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL11.</description>\n\t\t\t\t\t\t<addressOffset>0x12C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_23_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_23_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_23_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_23_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_23_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_23_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_22_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_22_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_22_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_22_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_22_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_22_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL12</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL12.</description>\n\t\t\t\t\t\t<addressOffset>0x130</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_25_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_25_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_25_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_25_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_25_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_25_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_24_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_24_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_24_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_24_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_24_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_24_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL13</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL13.</description>\n\t\t\t\t\t\t<addressOffset>0x134</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_27_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_27_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_27_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_27_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_27_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_27_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_26_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_26_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_26_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_26_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_26_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_26_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL14</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL14.</description>\n\t\t\t\t\t\t<addressOffset>0x138</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_29_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_29_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_29_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_29_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_29_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_29_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_28_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_28_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_28_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_28_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_28_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_28_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL15</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL15.</description>\n\t\t\t\t\t\t<addressOffset>0x13C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_31_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_31_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_31_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_31_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_31_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_31_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_30_func_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_30_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_30_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_30_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_30_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_30_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL16</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL16.</description>\n\t\t\t\t\t\t<addressOffset>0x140</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_33_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_33_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_33_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_33_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_33_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_32_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_32_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_32_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_32_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_32_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL17</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL17.</description>\n\t\t\t\t\t\t<addressOffset>0x144</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_35_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_35_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_35_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_35_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_35_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_34_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_34_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_34_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_34_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_34_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL18</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL18.</description>\n\t\t\t\t\t\t<addressOffset>0x148</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_37_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_37_pu</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_37_drv</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_37_smt</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_37_ie</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_36_pd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_36_pu</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_36_drv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_36_smt</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_36_ie</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL30</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL30.</description>\n\t\t\t\t\t\t<addressOffset>0x180</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_31_i</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_30_i</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_29_i</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_28_i</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_27_i</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_26_i</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_25_i</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_24_i</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_23_i</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_22_i</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_21_i</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_20_i</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_19_i</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_18_i</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_17_i</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_16_i</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_15_i</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_14_i</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_13_i</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_12_i</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_11_i</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_10_i</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_9_i</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_8_i</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_7_i</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_6_i</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_5_i</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_4_i</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_3_i</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_2_i</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_1_i</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_0_i</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL31</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL31.</description>\n\t\t\t\t\t\t<addressOffset>0x184</addressOffset>\n\t\t\t\t\t\t<fields/>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL32</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL32.</description>\n\t\t\t\t\t\t<addressOffset>0x188</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_31_o</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_30_o</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_29_o</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_28_o</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_27_o</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_26_o</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_25_o</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_24_o</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_23_o</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_22_o</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_21_o</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_20_o</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_19_o</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_18_o</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_17_o</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_16_o</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_15_o</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_14_o</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_13_o</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_12_o</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_11_o</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_10_o</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_9_o</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_8_o</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_7_o</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_6_o</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_5_o</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_4_o</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_3_o</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_2_o</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_1_o</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_0_o</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL33</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL33.</description>\n\t\t\t\t\t\t<addressOffset>0x18C</addressOffset>\n\t\t\t\t\t\t<fields/>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL34</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL34.</description>\n\t\t\t\t\t\t<addressOffset>0x190</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_31_oe</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_30_oe</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_29_oe</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_28_oe</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_27_oe</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_26_oe</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_25_oe</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_24_oe</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_23_oe</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_22_oe</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_21_oe</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_20_oe</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_19_oe</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_18_oe</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_17_oe</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_16_oe</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_15_oe</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_14_oe</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_13_oe</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_12_oe</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_11_oe</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_10_oe</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_9_oe</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_8_oe</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_7_oe</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_6_oe</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_5_oe</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_4_oe</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_3_oe</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_2_oe</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_1_oe</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_0_oe</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_CFGCTL35</name>\n\t\t\t\t\t\t<description>GPIO_CFGCTL35.</description>\n\t\t\t\t\t\t<addressOffset>0x194</addressOffset>\n\t\t\t\t\t\t<fields/>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_INT_MASK1</name>\n\t\t\t\t\t\t<description>GPIO_INT_MASK1.</description>\n\t\t\t\t\t\t<addressOffset>0x1A0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_int_mask1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_INT_STAT1</name>\n\t\t\t\t\t\t<description>GPIO_INT_STAT1.</description>\n\t\t\t\t\t\t<addressOffset>0x1A8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpio_int_stat1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_INT_CLR1</name>\n\t\t\t\t\t\t<description>GPIO_INT_CLR1.</description>\n\t\t\t\t\t\t<addressOffset>0x1B0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_int_clr1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_INT_MODE_SET1</name>\n\t\t\t\t\t\t<description>GPIO_INT_MODE_SET1.</description>\n\t\t\t\t\t\t<addressOffset>0x1C0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_int_mode_set1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_INT_MODE_SET2</name>\n\t\t\t\t\t\t<description>GPIO_INT_MODE_SET2.</description>\n\t\t\t\t\t\t<addressOffset>0x1C4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_int_mode_set2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_INT_MODE_SET3</name>\n\t\t\t\t\t\t<description>GPIO_INT_MODE_SET3.</description>\n\t\t\t\t\t\t<addressOffset>0x1C8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_int_mode_set3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_INT_MODE_SET4</name>\n\t\t\t\t\t\t<description>GPIO_INT_MODE_SET4.</description>\n\t\t\t\t\t\t<addressOffset>0x1CC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_int_mode_set4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_INT2_MASK1</name>\n\t\t\t\t\t\t<description>GPIO_INT2_MASK1.</description>\n\t\t\t\t\t\t<addressOffset>0x1D0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_int2_mask1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_INT2_STAT1</name>\n\t\t\t\t\t\t<description>GPIO_INT2_STAT1.</description>\n\t\t\t\t\t\t<addressOffset>0x1D4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpio_int2_stat1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_INT2_CLR1</name>\n\t\t\t\t\t\t<description>GPIO_INT2_CLR1.</description>\n\t\t\t\t\t\t<addressOffset>0x1D8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_int2_clr1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_INT2_MODE_SET1</name>\n\t\t\t\t\t\t<description>GPIO_INT2_MODE_SET1.</description>\n\t\t\t\t\t\t<addressOffset>0x1DC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_int2_mode_set1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_INT2_MODE_SET2</name>\n\t\t\t\t\t\t<description>GPIO_INT2_MODE_SET2.</description>\n\t\t\t\t\t\t<addressOffset>0x1E0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_int2_mode_set2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_INT2_MODE_SET3</name>\n\t\t\t\t\t\t<description>GPIO_INT2_MODE_SET3.</description>\n\t\t\t\t\t\t<addressOffset>0x1E4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_int2_mode_set3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>GPIO_INT2_MODE_SET4</name>\n\t\t\t\t\t\t<description>GPIO_INT2_MODE_SET4.</description>\n\t\t\t\t\t\t<addressOffset>0x1E8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_gpio_int2_mode_set4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>dll</name>\n\t\t\t\t\t\t<description>dll.</description>\n\t\t\t\t\t\t<addressOffset>0x200</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ppu_dll</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_dll</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_reset</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_refclk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_cp_hiz</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_cp_op_en</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_delay_sel</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_post_div</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_vctrl_force_en</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_prechg_en</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_prechg_reg</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_prechg_sel</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_vctrl_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_clk_57p6M_en</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_clk_96M_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_clk_144M_en</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_clk_288M_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dll_clk_mmdiv_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ten_dll</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dtest_en_dll_outclk</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dtest_en_dll_refclk</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>led_driver</name>\n\t\t\t\t\t\t<description>led_driver.</description>\n\t\t\t\t\t\t<addressOffset>0x224</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_leddrv</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>leddrv_out_en</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ir_rx_gpio_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>leddrv_ibias</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>led_din_polarity_sel</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>led_din_sel</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>led_din_reg</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>usb_xcvr</name>\n\t\t\t\t\t\t<description>usb_xcvr.</description>\n\t\t\t\t\t\t<addressOffset>0x228</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_rcv</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_vip</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_vim</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_bd</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_usb</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_sus</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_spd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_enum</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_data_convert</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_oeb</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_oeb_reg</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_oeb_sel</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_rout_pmos</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_rout_nmos</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_usb_ldo</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_ldo_vfb</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>usb_xcvr_config</name>\n\t\t\t\t\t\t<description>usb_xcvr_config.</description>\n\t\t\t\t\t\t<addressOffset>0x22C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_slewrate_p_rise</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_slewrate_p_fall</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_slewrate_m_rise</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_slewrate_m_fall</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_res_pullup_tune</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_usb_use_ctrl</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_str_drv</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_usb_use_xcvr</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_bd_vth</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_v_hys_p</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_v_hys_m</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpdac_ctrl</name>\n\t\t\t\t\t\t<description>gpdac_ctrl.</description>\n\t\t\t\t\t\t<addressOffset>0x308</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_reserved</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_test_sel</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_ref_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_test_en</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdacb_rstn_ana</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdaca_rstn_ana</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpdac_actrl</name>\n\t\t\t\t\t\t<description>gpdac_actrl.</description>\n\t\t\t\t\t\t<addressOffset>0x30C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_a_outmux</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_a_rng</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_ioa_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_a_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpdac_bctrl</name>\n\t\t\t\t\t\t<description>gpdac_bctrl.</description>\n\t\t\t\t\t\t<addressOffset>0x310</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_b_outmux</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_b_rng</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_iob_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_b_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpdac_data</name>\n\t\t\t\t\t\t<description>gpdac_data.</description>\n\t\t\t\t\t\t<addressOffset>0x314</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_a_data</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_b_data</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>chip_revision</name>\n\t\t\t\t\t\t<description>chip_revision.</description>\n\t\t\t\t\t\t<addressOffset>0xE00</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>chip_rev</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>tzc_glb_ctrl_0</name>\n\t\t\t\t\t\t<description>tzc_glb_ctrl_0.</description>\n\t\t\t\t\t\t<addressOffset>0xF00</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_clk_lock</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_mbist_lock</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_dbg_lock</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_bmx_lock</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_l2c_lock</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_sram_lock</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_misc_lock</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_ctrl_ungated_ap_lock</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_ctrl_sys_reset_lock</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_ctrl_cpu_reset_lock</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_ctrl_pwron_rst_lock</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s30_lock</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s01_lock</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s00_lock</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>tzc_glb_ctrl_1</name>\n\t\t\t\t\t\t<description>tzc_glb_ctrl_1.</description>\n\t\t\t\t\t\t<addressOffset>0xF04</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s1f_lock</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s1e_lock</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s1d_lock</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s1c_lock</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s1b_lock</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s1a_lock</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s19_lock</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s18_lock</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s17_lock</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s16_lock</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s15_lock</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s14_lock</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s13_lock</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s12_lock</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s11_lock</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s10_lock</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s2f_lock</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s2e_lock</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s2d_lock</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s2c_lock</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s2b_lock</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s2a_lock</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s29_lock</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s28_lock</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s27_lock</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s26_lock</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s25_lock</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s24_lock</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s23_lock</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s22_lock</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s21_lock</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_swrst_s20_lock</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>tzc_glb_ctrl_2</name>\n\t\t\t\t\t\t<description>tzc_glb_ctrl_2.</description>\n\t\t\t\t\t\t<addressOffset>0xF08</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_31_lock</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_30_lock</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_29_lock</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_28_lock</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_27_lock</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_26_lock</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_25_lock</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_24_lock</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_23_lock</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_22_lock</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_21_lock</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_20_lock</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_19_lock</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_18_lock</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_17_lock</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_16_lock</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_15_lock</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_14_lock</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_13_lock</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_12_lock</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_11_lock</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_10_lock</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_9_lock</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_8_lock</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_7_lock</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_6_lock</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_5_lock</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_4_lock</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_3_lock</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_2_lock</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_1_lock</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_0_lock</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>tzc_glb_ctrl_3</name>\n\t\t\t\t\t\t<description>tzc_glb_ctrl_3.</description>\n\t\t\t\t\t\t<addressOffset>0xF0C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_37_lock</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_36_lock</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_35_lock</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_34_lock</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_33_lock</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_glb_gpio_32_lock</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>gpip</name>\n\t\t\t\t<description>gpip.</description>\n\t\t\t\t<baseAddress>0x40002000</baseAddress>\n\t\t\t\t<groupName>gpip</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpadc_config</name>\n\t\t\t\t\t\t<description>gpadc_config.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_31_24</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_fifo_thl</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_fifo_data_count</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_fifo_rdy_mask</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_fifo_underrun_mask</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_fifo_overrun_mask</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_rdy_mask</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_fifo_underrun_clr</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_fifo_overrun_clr</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_rdy_clr</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_fifo_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_fifo_underrun</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_fifo_overrun</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_fifo_ne</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_dma_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpadc_dma_rdata</name>\n\t\t\t\t\t\t<description>gpadc_dma_rdata.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_31_26</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_dma_rdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpdac_config</name>\n\t\t\t\t\t\t<description>gpdac_config.</description>\n\t\t\t\t\t\t<addressOffset>0x40</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_31_24</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_ch_b_sel</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_ch_a_sel</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_mode</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dsm_mode</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_en2</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpdac_dma_config</name>\n\t\t\t\t\t\t<description>gpdac_dma_config.</description>\n\t\t\t\t\t\t<addressOffset>0x44</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_dma_format</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_dma_tx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpdac_dma_wdata</name>\n\t\t\t\t\t\t<description>gpdac_dma_wdata.</description>\n\t\t\t\t\t\t<addressOffset>0x48</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpdac_dma_wdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpdac_tx_fifo_status</name>\n\t\t\t\t\t\t<description>gpdac_tx_fifo_status.</description>\n\t\t\t\t\t\t<addressOffset>0x4C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TxFifoWrPtr</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TxFifoRdPtr</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_cs</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>sec_dbg</name>\n\t\t\t\t<description>sec_dbg.</description>\n\t\t\t\t<baseAddress>0x40003000</baseAddress>\n\t\t\t\t<groupName>sec_dbg</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sd_chip_id_low</name>\n\t\t\t\t\t\t<description>sd_chip_id_low.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sd_chip_id_low</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sd_chip_id_high</name>\n\t\t\t\t\t\t<description>sd_chip_id_high.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sd_chip_id_high</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sd_wifi_mac_low</name>\n\t\t\t\t\t\t<description>sd_wifi_mac_low.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sd_wifi_mac_low</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sd_wifi_mac_high</name>\n\t\t\t\t\t\t<description>sd_wifi_mac_high.</description>\n\t\t\t\t\t\t<addressOffset>0xC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sd_wifi_mac_high</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sd_dbg_pwd_low</name>\n\t\t\t\t\t\t<description>sd_dbg_pwd_low.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sd_dbg_pwd_low</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sd_dbg_pwd_high</name>\n\t\t\t\t\t\t<description>sd_dbg_pwd_high.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sd_dbg_pwd_high</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sd_status</name>\n\t\t\t\t\t\t<description>sd_status.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sd_dbg_ena</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sd_dbg_mode</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sd_dbg_pwd_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sd_dbg_cci_clk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sd_dbg_cci_read_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sd_dbg_pwd_trig</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sd_dbg_pwd_busy</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sd_dbg_reserved</name>\n\t\t\t\t\t\t<description>sd_dbg_reserved.</description>\n\t\t\t\t\t\t<addressOffset>0x1C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sd_dbg_reserved</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>sec_eng</name>\n\t\t\t\t<description>sec_eng.</description>\n\t\t\t\t<baseAddress>0x40004000</baseAddress>\n\t\t\t\t<groupName>sec_eng</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_ctrl</name>\n\t\t\t\t\t\t<description>se_sha_0_ctrl.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_msg_len</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_link_mode</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_int_mask</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_int_set_1t</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_int_clr_1t</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_int</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_sel</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_en</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_mode</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_trig_1t</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_busy</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_msa</name>\n\t\t\t\t\t\t<description>se_sha_0_msa.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_msa</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_status</name>\n\t\t\t\t\t\t<description>se_sha_0_status.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_status</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_endian</name>\n\t\t\t\t\t\t<description>se_sha_0_endian.</description>\n\t\t\t\t\t\t<addressOffset>0xC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_dout_endian</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_hash_l_0</name>\n\t\t\t\t\t\t<description>se_sha_0_hash_l_0.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_l_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_hash_l_1</name>\n\t\t\t\t\t\t<description>se_sha_0_hash_l_1.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_l_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_hash_l_2</name>\n\t\t\t\t\t\t<description>se_sha_0_hash_l_2.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_l_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_hash_l_3</name>\n\t\t\t\t\t\t<description>se_sha_0_hash_l_3.</description>\n\t\t\t\t\t\t<addressOffset>0x1C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_l_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_hash_l_4</name>\n\t\t\t\t\t\t<description>se_sha_0_hash_l_4.</description>\n\t\t\t\t\t\t<addressOffset>0x20</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_l_4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_hash_l_5</name>\n\t\t\t\t\t\t<description>se_sha_0_hash_l_5.</description>\n\t\t\t\t\t\t<addressOffset>0x24</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_l_5</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_hash_l_6</name>\n\t\t\t\t\t\t<description>se_sha_0_hash_l_6.</description>\n\t\t\t\t\t\t<addressOffset>0x28</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_l_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_hash_l_7</name>\n\t\t\t\t\t\t<description>se_sha_0_hash_l_7.</description>\n\t\t\t\t\t\t<addressOffset>0x2C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_l_7</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_hash_h_0</name>\n\t\t\t\t\t\t<description>se_sha_0_hash_h_0.</description>\n\t\t\t\t\t\t<addressOffset>0x30</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_h_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_hash_h_1</name>\n\t\t\t\t\t\t<description>se_sha_0_hash_h_1.</description>\n\t\t\t\t\t\t<addressOffset>0x34</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_h_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_hash_h_2</name>\n\t\t\t\t\t\t<description>se_sha_0_hash_h_2.</description>\n\t\t\t\t\t\t<addressOffset>0x38</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_h_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_hash_h_3</name>\n\t\t\t\t\t\t<description>se_sha_0_hash_h_3.</description>\n\t\t\t\t\t\t<addressOffset>0x3C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_h_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_hash_h_4</name>\n\t\t\t\t\t\t<description>se_sha_0_hash_h_4.</description>\n\t\t\t\t\t\t<addressOffset>0x40</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_h_4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_hash_h_5</name>\n\t\t\t\t\t\t<description>se_sha_0_hash_h_5.</description>\n\t\t\t\t\t\t<addressOffset>0x44</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_h_5</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_hash_h_6</name>\n\t\t\t\t\t\t<description>se_sha_0_hash_h_6.</description>\n\t\t\t\t\t\t<addressOffset>0x48</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_h_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_hash_h_7</name>\n\t\t\t\t\t\t<description>se_sha_0_hash_h_7.</description>\n\t\t\t\t\t\t<addressOffset>0x4C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_hash_h_7</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_link</name>\n\t\t\t\t\t\t<description>se_sha_0_link.</description>\n\t\t\t\t\t\t<addressOffset>0x50</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_0_lca</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_sha_0_ctrl_prot</name>\n\t\t\t\t\t\t<description>se_sha_0_ctrl_prot.</description>\n\t\t\t\t\t\t<addressOffset>0xFC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_id1_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_id0_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_prot_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_ctrl</name>\n\t\t\t\t\t\t<description>se_aes_0_ctrl.</description>\n\t\t\t\t\t\t<addressOffset>0x100</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_msg_len</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_link_mode</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_iv_sel</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_block_mode</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_int_mask</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_int_set_1t</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_int_clr_1t</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_int</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_hw_key_en</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_dec_key_sel</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_dec_en</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_mode</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_trig_1t</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_busy</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_msa</name>\n\t\t\t\t\t\t<description>se_aes_0_msa.</description>\n\t\t\t\t\t\t<addressOffset>0x104</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_msa</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_mda</name>\n\t\t\t\t\t\t<description>se_aes_0_mda.</description>\n\t\t\t\t\t\t<addressOffset>0x108</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_mda</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_status</name>\n\t\t\t\t\t\t<description>se_aes_0_status.</description>\n\t\t\t\t\t\t<addressOffset>0x10C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_status</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_iv_0</name>\n\t\t\t\t\t\t<description>se_aes_0_iv_0.</description>\n\t\t\t\t\t\t<addressOffset>0x110</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_iv_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_iv_1</name>\n\t\t\t\t\t\t<description>se_aes_0_iv_1.</description>\n\t\t\t\t\t\t<addressOffset>0x114</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_iv_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_iv_2</name>\n\t\t\t\t\t\t<description>se_aes_0_iv_2.</description>\n\t\t\t\t\t\t<addressOffset>0x118</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_iv_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_iv_3</name>\n\t\t\t\t\t\t<description>se_aes_0_iv_3.</description>\n\t\t\t\t\t\t<addressOffset>0x11C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_iv_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_key_0</name>\n\t\t\t\t\t\t<description>se_aes_0_key_0.</description>\n\t\t\t\t\t\t<addressOffset>0x120</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_key_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_key_1</name>\n\t\t\t\t\t\t<description>se_aes_0_key_1.</description>\n\t\t\t\t\t\t<addressOffset>0x124</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_key_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_key_2</name>\n\t\t\t\t\t\t<description>se_aes_0_key_2.</description>\n\t\t\t\t\t\t<addressOffset>0x128</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_key_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_key_3</name>\n\t\t\t\t\t\t<description>se_aes_0_key_3.</description>\n\t\t\t\t\t\t<addressOffset>0x12C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_key_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_key_4</name>\n\t\t\t\t\t\t<description>se_aes_0_key_4.</description>\n\t\t\t\t\t\t<addressOffset>0x130</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_key_4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_key_5</name>\n\t\t\t\t\t\t<description>se_aes_0_key_5.</description>\n\t\t\t\t\t\t<addressOffset>0x134</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_key_5</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_key_6</name>\n\t\t\t\t\t\t<description>se_aes_0_key_6.</description>\n\t\t\t\t\t\t<addressOffset>0x138</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_key_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_key_7</name>\n\t\t\t\t\t\t<description>se_aes_0_key_7.</description>\n\t\t\t\t\t\t<addressOffset>0x13C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_key_7</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_key_sel_0</name>\n\t\t\t\t\t\t<description>se_aes_0_key_sel_0.</description>\n\t\t\t\t\t\t<addressOffset>0x140</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_key_sel_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_key_sel_1</name>\n\t\t\t\t\t\t<description>se_aes_0_key_sel_1.</description>\n\t\t\t\t\t\t<addressOffset>0x144</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_key_sel_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_endian</name>\n\t\t\t\t\t\t<description>se_aes_0_endian.</description>\n\t\t\t\t\t\t<addressOffset>0x148</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_ctr_len</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_iv_endian</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_key_endian</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_din_endian</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_dout_endian</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_sboot</name>\n\t\t\t\t\t\t<description>se_aes_0_sboot.</description>\n\t\t\t\t\t\t<addressOffset>0x14C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_sboot_key_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_link</name>\n\t\t\t\t\t\t<description>se_aes_0_link.</description>\n\t\t\t\t\t\t<addressOffset>0x150</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_0_lca</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_aes_0_ctrl_prot</name>\n\t\t\t\t\t\t<description>se_aes_0_ctrl_prot.</description>\n\t\t\t\t\t\t<addressOffset>0x1FC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_id1_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_id0_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_prot_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_ctrl_0</name>\n\t\t\t\t\t\t<description>se_trng_0_ctrl_0.</description>\n\t\t\t\t\t\t<addressOffset>0x200</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_manual_en</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_manual_reseed</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_manual_fun_sel</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_int_mask</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_int_set_1t</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_int_clr_1t</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_int</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_ht_error</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_dout_clr_1t</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_trig_1t</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_busy</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_status</name>\n\t\t\t\t\t\t<description>se_trng_0_status.</description>\n\t\t\t\t\t\t<addressOffset>0x204</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_status</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_dout_0</name>\n\t\t\t\t\t\t<description>se_trng_0_dout_0.</description>\n\t\t\t\t\t\t<addressOffset>0x208</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_dout_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_dout_1</name>\n\t\t\t\t\t\t<description>se_trng_0_dout_1.</description>\n\t\t\t\t\t\t<addressOffset>0x20C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_dout_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_dout_2</name>\n\t\t\t\t\t\t<description>se_trng_0_dout_2.</description>\n\t\t\t\t\t\t<addressOffset>0x210</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_dout_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_dout_3</name>\n\t\t\t\t\t\t<description>se_trng_0_dout_3.</description>\n\t\t\t\t\t\t<addressOffset>0x214</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_dout_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_dout_4</name>\n\t\t\t\t\t\t<description>se_trng_0_dout_4.</description>\n\t\t\t\t\t\t<addressOffset>0x218</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_dout_4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_dout_5</name>\n\t\t\t\t\t\t<description>se_trng_0_dout_5.</description>\n\t\t\t\t\t\t<addressOffset>0x21C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_dout_5</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_dout_6</name>\n\t\t\t\t\t\t<description>se_trng_0_dout_6.</description>\n\t\t\t\t\t\t<addressOffset>0x220</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_dout_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_dout_7</name>\n\t\t\t\t\t\t<description>se_trng_0_dout_7.</description>\n\t\t\t\t\t\t<addressOffset>0x224</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_dout_7</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_test</name>\n\t\t\t\t\t\t<description>se_trng_0_test.</description>\n\t\t\t\t\t\t<addressOffset>0x228</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_ht_alarm_n</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_ht_dis</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_cp_bypass</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_cp_test_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_test_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_ctrl_1</name>\n\t\t\t\t\t\t<description>se_trng_0_ctrl_1.</description>\n\t\t\t\t\t\t<addressOffset>0x22C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_reseed_n_lsb</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_ctrl_2</name>\n\t\t\t\t\t\t<description>se_trng_0_ctrl_2.</description>\n\t\t\t\t\t\t<addressOffset>0x230</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_reseed_n_msb</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_ctrl_3</name>\n\t\t\t\t\t\t<description>se_trng_0_ctrl_3.</description>\n\t\t\t\t\t\t<addressOffset>0x234</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_rosc_en</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_ht_od_en</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_ht_apt_c</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_ht_rct_c</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_cp_ratio</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_test_out_0</name>\n\t\t\t\t\t\t<description>se_trng_0_test_out_0.</description>\n\t\t\t\t\t\t<addressOffset>0x240</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_test_out_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_test_out_1</name>\n\t\t\t\t\t\t<description>se_trng_0_test_out_1.</description>\n\t\t\t\t\t\t<addressOffset>0x244</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_test_out_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_test_out_2</name>\n\t\t\t\t\t\t<description>se_trng_0_test_out_2.</description>\n\t\t\t\t\t\t<addressOffset>0x248</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_test_out_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_test_out_3</name>\n\t\t\t\t\t\t<description>se_trng_0_test_out_3.</description>\n\t\t\t\t\t\t<addressOffset>0x24C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_0_test_out_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_trng_0_ctrl_prot</name>\n\t\t\t\t\t\t<description>se_trng_0_ctrl_prot.</description>\n\t\t\t\t\t\t<addressOffset>0x2FC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_id1_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_id0_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_prot_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_pka_0_ctrl_0</name>\n\t\t\t\t\t\t<description>se_pka_0_ctrl_0.</description>\n\t\t\t\t\t\t<addressOffset>0x300</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_0_status</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_0_status_clr_1t</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_0_ram_clr_md</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_0_endian</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_0_int_mask</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_0_int_set</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_0_int_clr_1t</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_0_int</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_0_prot_md</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_0_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_0_busy</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_0_done_clr_1t</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_0_done</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_pka_0_seed</name>\n\t\t\t\t\t\t<description>se_pka_0_seed.</description>\n\t\t\t\t\t\t<addressOffset>0x30C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_0_seed</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_pka_0_ctrl_1</name>\n\t\t\t\t\t\t<description>se_pka_0_ctrl_1.</description>\n\t\t\t\t\t\t<addressOffset>0x310</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_0_hbypass</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_0_hburst</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_pka_0_rw</name>\n\t\t\t\t\t\t<description>se_pka_0_rw.</description>\n\t\t\t\t\t\t<addressOffset>0x340</addressOffset>\n\t\t\t\t\t\t<fields/>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_pka_0_rw_burst</name>\n\t\t\t\t\t\t<description>se_pka_0_rw_burst.</description>\n\t\t\t\t\t\t<addressOffset>0x360</addressOffset>\n\t\t\t\t\t\t<fields/>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_pka_0_ctrl_prot</name>\n\t\t\t\t\t\t<description>se_pka_0_ctrl_prot.</description>\n\t\t\t\t\t\t<addressOffset>0x3FC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_id1_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_id0_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_prot_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_cdet_0_ctrl_0</name>\n\t\t\t\t\t\t<description>se_cdet_0_ctrl_0.</description>\n\t\t\t\t\t\t<addressOffset>0x400</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_cdet_0_g_loop_min</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_cdet_0_g_loop_max</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_cdet_0_status</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_cdet_0_error</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_cdet_0_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_cdet_0_ctrl_1</name>\n\t\t\t\t\t\t<description>se_cdet_0_ctrl_1.</description>\n\t\t\t\t\t\t<addressOffset>0x404</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_cdet_0_g_slp_n</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_cdet_0_t_dly_n</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_cdet_0_t_loop_n</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_cdet_0_ctrl_prot</name>\n\t\t\t\t\t\t<description>se_cdet_0_ctrl_prot.</description>\n\t\t\t\t\t\t<addressOffset>0x4FC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_cdet_id1_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_cdet_id0_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_cdet_prot_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_gmac_0_ctrl_0</name>\n\t\t\t\t\t\t<description>se_gmac_0_ctrl_0.</description>\n\t\t\t\t\t\t<addressOffset>0x500</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_0_x_endian</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_0_h_endian</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_0_t_endian</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_0_int_mask</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_0_int_set_1t</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_0_int_clr_1t</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_0_int</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_0_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_0_trig_1t</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_0_busy</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_gmac_0_lca</name>\n\t\t\t\t\t\t<description>se_gmac_0_lca.</description>\n\t\t\t\t\t\t<addressOffset>0x504</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_0_lca</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_gmac_0_status</name>\n\t\t\t\t\t\t<description>se_gmac_0_status.</description>\n\t\t\t\t\t\t<addressOffset>0x508</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_0_status</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_gmac_0_ctrl_prot</name>\n\t\t\t\t\t\t<description>se_gmac_0_ctrl_prot.</description>\n\t\t\t\t\t\t<addressOffset>0x5FC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_id1_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_id0_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_prot_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_ctrl_prot_rd</name>\n\t\t\t\t\t\t<description>se_ctrl_prot_rd.</description>\n\t\t\t\t\t\t<addressOffset>0xF00</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_dbg_dis</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_id1_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_id0_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_gmac_prot_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_cdet_id1_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_cdet_id0_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_cdet_prot_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_id1_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_id0_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_pka_prot_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_id1_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_id0_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_trng_prot_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_id1_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_id0_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_aes_prot_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_id1_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_id0_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_sha_prot_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_ctrl_reserved_0</name>\n\t\t\t\t\t\t<description>se_ctrl_reserved_0.</description>\n\t\t\t\t\t\t<addressOffset>0xF04</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_ctrl_reserved_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_ctrl_reserved_1</name>\n\t\t\t\t\t\t<description>se_ctrl_reserved_1.</description>\n\t\t\t\t\t\t<addressOffset>0xF08</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_ctrl_reserved_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>se_ctrl_reserved_2</name>\n\t\t\t\t\t\t<description>se_ctrl_reserved_2.</description>\n\t\t\t\t\t\t<addressOffset>0xF0C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>se_ctrl_reserved_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>tzc_sec</name>\n\t\t\t\t<description>tzc_sec.</description>\n\t\t\t\t<baseAddress>0x40005000</baseAddress>\n\t\t\t\t<groupName>tzc_sec</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>tzc_rom_ctrl</name>\n\t\t\t\t\t\t<description>tzc_rom_ctrl.</description>\n\t\t\t\t\t\t<addressOffset>0x40</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_sboot_done</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r1_lock</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r0_lock</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r1_lock</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r0_lock</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r1_en</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r0_en</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r1_en</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r0_en</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r1_id1_en</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r0_id1_en</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r1_id1_en</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r0_id1_en</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r1_id0_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r0_id0_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r1_id0_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r0_id0_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>tzc_rom0_r0</name>\n\t\t\t\t\t\t<description>tzc_rom0_r0.</description>\n\t\t\t\t\t\t<addressOffset>0x44</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r0_start</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r0_end</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>tzc_rom0_r1</name>\n\t\t\t\t\t\t<description>tzc_rom0_r1.</description>\n\t\t\t\t\t\t<addressOffset>0x48</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r1_start</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r1_end</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>tzc_rom1_r0</name>\n\t\t\t\t\t\t<description>tzc_rom1_r0.</description>\n\t\t\t\t\t\t<addressOffset>0x4C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r0_start</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r0_end</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>tzc_rom1_r1</name>\n\t\t\t\t\t\t<description>tzc_rom1_r1.</description>\n\t\t\t\t\t\t<addressOffset>0x50</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r1_start</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r1_end</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>tzc_nsec</name>\n\t\t\t\t<description>tzc_nsec.</description>\n\t\t\t\t<baseAddress>0x40006000</baseAddress>\n\t\t\t\t<groupName>tzc_nsec</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>tzc_rom_ctrl</name>\n\t\t\t\t\t\t<description>tzc_rom_ctrl.</description>\n\t\t\t\t\t\t<addressOffset>0x40</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_sboot_done</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r1_lock</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r0_lock</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r1_lock</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r0_lock</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r1_en</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r0_en</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r1_en</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r0_en</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r1_id1_en</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r0_id1_en</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r1_id1_en</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r0_id1_en</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r1_id0_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r0_id0_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r1_id0_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r0_id0_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>tzc_rom0_r0</name>\n\t\t\t\t\t\t<description>tzc_rom0_r0.</description>\n\t\t\t\t\t\t<addressOffset>0x44</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r0_start</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r0_end</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>tzc_rom0_r1</name>\n\t\t\t\t\t\t<description>tzc_rom0_r1.</description>\n\t\t\t\t\t\t<addressOffset>0x48</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r1_start</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom0_r1_end</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>tzc_rom1_r0</name>\n\t\t\t\t\t\t<description>tzc_rom1_r0.</description>\n\t\t\t\t\t\t<addressOffset>0x4C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r0_start</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r0_end</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>tzc_rom1_r1</name>\n\t\t\t\t\t\t<description>tzc_rom1_r1.</description>\n\t\t\t\t\t\t<addressOffset>0x50</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r1_start</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tzc_rom1_r1_end</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>ef_data_0</name>\n\t\t\t\t<description>ef_data_0.</description>\n\t\t\t\t<baseAddress>0x40007000</baseAddress>\n\t\t\t\t<groupName>ef_data_0</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_cfg_0</name>\n\t\t\t\t\t\t<description>ef_cfg_0.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_dbg_mode</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_dbg_jtag_0_dis</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_dbg_jtag_1_dis</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_efuse_dbg_dis</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_se_dbg_dis</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_cpu_rst_dbg_dis</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_cpu1_dis</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sf_dis</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_cam_dis</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_0_key_enc_en</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_wifi_dis</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_ble_dis</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sdu_dis</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sf_key_0_sel</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_boot_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_cpu0_enc_en</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_cpu1_enc_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sboot_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sboot_sign_mode</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sf_aes_mode</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_dbg_pwd_low</name>\n\t\t\t\t\t\t<description>ef_dbg_pwd_low.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_dbg_pwd_low</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_dbg_pwd_high</name>\n\t\t\t\t\t\t<description>ef_dbg_pwd_high.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_dbg_pwd_high</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_ana_trim_0</name>\n\t\t\t\t\t\t<description>ef_ana_trim_0.</description>\n\t\t\t\t\t\t<addressOffset>0xC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_ana_trim_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_sw_usage_0</name>\n\t\t\t\t\t\t<description>ef_sw_usage_0.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_usage_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_wifi_mac_low</name>\n\t\t\t\t\t\t<description>ef_wifi_mac_low.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_wifi_mac_low</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_wifi_mac_high</name>\n\t\t\t\t\t\t<description>ef_wifi_mac_high.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_wifi_mac_high</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_0_w0</name>\n\t\t\t\t\t\t<description>ef_key_slot_0_w0.</description>\n\t\t\t\t\t\t<addressOffset>0x1C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_0_w0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_0_w1</name>\n\t\t\t\t\t\t<description>ef_key_slot_0_w1.</description>\n\t\t\t\t\t\t<addressOffset>0x20</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_0_w1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_0_w2</name>\n\t\t\t\t\t\t<description>ef_key_slot_0_w2.</description>\n\t\t\t\t\t\t<addressOffset>0x24</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_0_w2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_0_w3</name>\n\t\t\t\t\t\t<description>ef_key_slot_0_w3.</description>\n\t\t\t\t\t\t<addressOffset>0x28</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_0_w3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_1_w0</name>\n\t\t\t\t\t\t<description>ef_key_slot_1_w0.</description>\n\t\t\t\t\t\t<addressOffset>0x2C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_1_w0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_1_w1</name>\n\t\t\t\t\t\t<description>ef_key_slot_1_w1.</description>\n\t\t\t\t\t\t<addressOffset>0x30</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_1_w1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_1_w2</name>\n\t\t\t\t\t\t<description>ef_key_slot_1_w2.</description>\n\t\t\t\t\t\t<addressOffset>0x34</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_1_w2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_1_w3</name>\n\t\t\t\t\t\t<description>ef_key_slot_1_w3.</description>\n\t\t\t\t\t\t<addressOffset>0x38</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_1_w3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_2_w0</name>\n\t\t\t\t\t\t<description>ef_key_slot_2_w0.</description>\n\t\t\t\t\t\t<addressOffset>0x3C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_2_w0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_2_w1</name>\n\t\t\t\t\t\t<description>ef_key_slot_2_w1.</description>\n\t\t\t\t\t\t<addressOffset>0x40</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_2_w1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_2_w2</name>\n\t\t\t\t\t\t<description>ef_key_slot_2_w2.</description>\n\t\t\t\t\t\t<addressOffset>0x44</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_2_w2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_2_w3</name>\n\t\t\t\t\t\t<description>ef_key_slot_2_w3.</description>\n\t\t\t\t\t\t<addressOffset>0x48</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_2_w3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_3_w0</name>\n\t\t\t\t\t\t<description>ef_key_slot_3_w0.</description>\n\t\t\t\t\t\t<addressOffset>0x4C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_3_w0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_3_w1</name>\n\t\t\t\t\t\t<description>ef_key_slot_3_w1.</description>\n\t\t\t\t\t\t<addressOffset>0x50</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_3_w1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_3_w2</name>\n\t\t\t\t\t\t<description>ef_key_slot_3_w2.</description>\n\t\t\t\t\t\t<addressOffset>0x54</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_3_w2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_3_w3</name>\n\t\t\t\t\t\t<description>ef_key_slot_3_w3.</description>\n\t\t\t\t\t\t<addressOffset>0x58</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_3_w3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_4_w0</name>\n\t\t\t\t\t\t<description>ef_key_slot_4_w0.</description>\n\t\t\t\t\t\t<addressOffset>0x5C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_4_w0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_4_w1</name>\n\t\t\t\t\t\t<description>ef_key_slot_4_w1.</description>\n\t\t\t\t\t\t<addressOffset>0x60</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_4_w1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_4_w2</name>\n\t\t\t\t\t\t<description>ef_key_slot_4_w2.</description>\n\t\t\t\t\t\t<addressOffset>0x64</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_4_w2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_4_w3</name>\n\t\t\t\t\t\t<description>ef_key_slot_4_w3.</description>\n\t\t\t\t\t\t<addressOffset>0x68</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_4_w3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_5_w0</name>\n\t\t\t\t\t\t<description>ef_key_slot_5_w0.</description>\n\t\t\t\t\t\t<addressOffset>0x6C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_5_w0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_5_w1</name>\n\t\t\t\t\t\t<description>ef_key_slot_5_w1.</description>\n\t\t\t\t\t\t<addressOffset>0x70</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_5_w1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_5_w2</name>\n\t\t\t\t\t\t<description>ef_key_slot_5_w2.</description>\n\t\t\t\t\t\t<addressOffset>0x74</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_5_w2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_key_slot_5_w3</name>\n\t\t\t\t\t\t<description>ef_key_slot_5_w3.</description>\n\t\t\t\t\t\t<addressOffset>0x78</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_key_slot_5_w3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_data_0_lock</name>\n\t\t\t\t\t\t<description>ef_data_0_lock.</description>\n\t\t\t\t\t\t<addressOffset>0x7C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rd_lock_key_slot_5</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rd_lock_key_slot_4</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rd_lock_key_slot_3</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rd_lock_key_slot_2</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rd_lock_key_slot_1</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rd_lock_key_slot_0</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rd_lock_dbg_pwd</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wr_lock_key_slot_5_h</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wr_lock_key_slot_4_h</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wr_lock_key_slot_3</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wr_lock_key_slot_2</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wr_lock_key_slot_1</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wr_lock_key_slot_0</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wr_lock_wifi_mac</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wr_lock_sw_usage_0</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wr_lock_dbg_pwd</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wr_lock_boot_mode</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wr_lock_key_slot_5_l</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wr_lock_key_slot_4_l</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_ana_trim_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>ef_data_1</name>\n\t\t\t\t<description>ef_data_1.</description>\n\t\t\t\t<baseAddress>0x40007000</baseAddress>\n\t\t\t\t<groupName>ef_data_1</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_6_w0</name>\n\t\t\t\t\t\t<description>reg_key_slot_6_w0.</description>\n\t\t\t\t\t\t<addressOffset>0x80</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_key_slot_6_w0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_6_w1</name>\n\t\t\t\t\t\t<description>reg_key_slot_6_w1.</description>\n\t\t\t\t\t\t<addressOffset>0x84</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_key_slot_6_w1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_6_w2</name>\n\t\t\t\t\t\t<description>reg_key_slot_6_w2.</description>\n\t\t\t\t\t\t<addressOffset>0x88</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_key_slot_6_w2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_6_w3</name>\n\t\t\t\t\t\t<description>reg_key_slot_6_w3.</description>\n\t\t\t\t\t\t<addressOffset>0x8C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_key_slot_6_w3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_7_w0</name>\n\t\t\t\t\t\t<description>reg_key_slot_7_w0.</description>\n\t\t\t\t\t\t<addressOffset>0x90</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_key_slot_7_w0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_7_w1</name>\n\t\t\t\t\t\t<description>reg_key_slot_7_w1.</description>\n\t\t\t\t\t\t<addressOffset>0x94</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_key_slot_7_w1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_7_w2</name>\n\t\t\t\t\t\t<description>reg_key_slot_7_w2.</description>\n\t\t\t\t\t\t<addressOffset>0x98</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_key_slot_7_w2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_7_w3</name>\n\t\t\t\t\t\t<description>reg_key_slot_7_w3.</description>\n\t\t\t\t\t\t<addressOffset>0x9C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_key_slot_7_w3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_8_w0</name>\n\t\t\t\t\t\t<description>reg_key_slot_8_w0.</description>\n\t\t\t\t\t\t<addressOffset>0xA0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_key_slot_8_w0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_8_w1</name>\n\t\t\t\t\t\t<description>reg_key_slot_8_w1.</description>\n\t\t\t\t\t\t<addressOffset>0xA4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_key_slot_8_w1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_8_w2</name>\n\t\t\t\t\t\t<description>reg_key_slot_8_w2.</description>\n\t\t\t\t\t\t<addressOffset>0xA8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_key_slot_8_w2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_8_w3</name>\n\t\t\t\t\t\t<description>reg_key_slot_8_w3.</description>\n\t\t\t\t\t\t<addressOffset>0xAC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_key_slot_8_w3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_9_w0</name>\n\t\t\t\t\t\t<description>reg_key_slot_9_w0.</description>\n\t\t\t\t\t\t<addressOffset>0xB0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_key_slot_9_w0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_9_w1</name>\n\t\t\t\t\t\t<description>reg_key_slot_9_w1.</description>\n\t\t\t\t\t\t<addressOffset>0xB4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_key_slot_9_w1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_9_w2</name>\n\t\t\t\t\t\t<description>reg_key_slot_9_w2.</description>\n\t\t\t\t\t\t<addressOffset>0xB8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_key_slot_9_w2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_9_w3</name>\n\t\t\t\t\t\t<description>reg_key_slot_9_w3.</description>\n\t\t\t\t\t\t<addressOffset>0xBC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_key_slot_9_w3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_10_w0</name>\n\t\t\t\t\t\t<description>reg_key_slot_10_w0.</description>\n\t\t\t\t\t\t<addressOffset>0xC0</addressOffset>\n\t\t\t\t\t\t<fields/>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_10_w1</name>\n\t\t\t\t\t\t<description>reg_key_slot_10_w1.</description>\n\t\t\t\t\t\t<addressOffset>0xC4</addressOffset>\n\t\t\t\t\t\t<fields/>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_10_w2</name>\n\t\t\t\t\t\t<description>reg_key_slot_10_w2.</description>\n\t\t\t\t\t\t<addressOffset>0xC8</addressOffset>\n\t\t\t\t\t\t<fields/>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_10_w3</name>\n\t\t\t\t\t\t<description>reg_key_slot_10_w3.</description>\n\t\t\t\t\t\t<addressOffset>0xCC</addressOffset>\n\t\t\t\t\t\t<fields/>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_11_w0</name>\n\t\t\t\t\t\t<description>reg_key_slot_11_w0.</description>\n\t\t\t\t\t\t<addressOffset>0xD0</addressOffset>\n\t\t\t\t\t\t<fields/>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_11_w1</name>\n\t\t\t\t\t\t<description>reg_key_slot_11_w1.</description>\n\t\t\t\t\t\t<addressOffset>0xD4</addressOffset>\n\t\t\t\t\t\t<fields/>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_11_w2</name>\n\t\t\t\t\t\t<description>reg_key_slot_11_w2.</description>\n\t\t\t\t\t\t<addressOffset>0xD8</addressOffset>\n\t\t\t\t\t\t<fields/>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_key_slot_11_w3</name>\n\t\t\t\t\t\t<description>reg_key_slot_11_w3.</description>\n\t\t\t\t\t\t<addressOffset>0xDC</addressOffset>\n\t\t\t\t\t\t<fields/>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>reg_data_1_lock</name>\n\t\t\t\t\t\t<description>reg_data_1_lock.</description>\n\t\t\t\t\t\t<addressOffset>0xE0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rd_lock_key_slot_9</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rd_lock_key_slot_8</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rd_lock_key_slot_7</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rd_lock_key_slot_6</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RESERVED_25_16</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wr_lock_key_slot_9</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wr_lock_key_slot_8</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wr_lock_key_slot_7</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wr_lock_key_slot_6</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RESERVED_9_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>ef_ctrl</name>\n\t\t\t\t<description>ef_ctrl.</description>\n\t\t\t\t<baseAddress>0x40007000</baseAddress>\n\t\t\t\t<groupName>ef_ctrl</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_if_ctrl_0</name>\n\t\t\t\t\t\t<description>ef_if_ctrl_0.</description>\n\t\t\t\t\t\t<addressOffset>0x800</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_prot_code_cyc</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_0_int_set</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_0_int_clr</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_0_int</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_cyc_modify_lock</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_auto_rd_en</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_clk_sahb_data_gate</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_por_dig</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_prot_code_ctrl</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_clk_sahb_data_sel</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_0_cyc_modify</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_0_manual_en</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_0_trig</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_0_rw</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_0_busy</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_0_autoload_done</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_0_autoload_p1_done</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_if_cyc_0</name>\n\t\t\t\t\t\t<description>ef_if_cyc_0.</description>\n\t\t\t\t\t\t<addressOffset>0x804</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_cyc_pd_cs_s</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_cyc_cs</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_cyc_rd_adr</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_cyc_rd_dat</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_cyc_rd_dmy</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_if_cyc_1</name>\n\t\t\t\t\t\t<description>ef_if_cyc_1.</description>\n\t\t\t\t\t\t<addressOffset>0x808</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_cyc_pd_cs_h</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_cyc_ps_cs</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_cyc_wr_adr</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_cyc_pp</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_cyc_pi</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_if_0_manual</name>\n\t\t\t\t\t\t<description>ef_if_0_manual.</description>\n\t\t\t\t\t\t<addressOffset>0x80C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_prot_code_manual</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_0_q</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_csb</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_load</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_pgenb</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_strobe</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_ps</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_pd</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_a</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_if_0_status</name>\n\t\t\t\t\t\t<description>ef_if_0_status.</description>\n\t\t\t\t\t\t<addressOffset>0x810</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_0_status</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_if_cfg_0</name>\n\t\t\t\t\t\t<description>ef_if_cfg_0.</description>\n\t\t\t\t\t\t<addressOffset>0x814</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_dbg_mode</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_dbg_jtag_0_dis</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_dbg_jtag_1_dis</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_efuse_dbg_dis</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_se_dbg_dis</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_cpu_rst_dbg_dis</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_cpu1_dis</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_sf_dis</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_cam_dis</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_0_key_enc_en</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_wifi_dis</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_ble_dis</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_sdu_dis</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_sf_key_0_sel</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_boot_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_cpu0_enc_en</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_cpu1_enc_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_sboot_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_sboot_sign_mode</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_sf_aes_mode</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_sw_cfg_0</name>\n\t\t\t\t\t\t<description>ef_sw_cfg_0.</description>\n\t\t\t\t\t\t<addressOffset>0x818</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_dbg_mode</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_dbg_jtag_0_dis</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_dbg_jtag_1_dis</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_efuse_dbg_dis</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_se_dbg_dis</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_cpu_rst_dbg_dis</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_cpu1_dis</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_sf_dis</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_cam_dis</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_0_key_enc_en</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_wifi_dis</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_ble_dis</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_sdu_dis</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_sf_key_0_sel</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_cpu0_enc_en</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_cpu1_enc_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_sboot_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_sboot_sign_mode</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_sw_sf_aes_mode</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_reserved</name>\n\t\t\t\t\t\t<description>ef_reserved.</description>\n\t\t\t\t\t\t<addressOffset>0x81C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_reserved</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_if_ana_trim_0</name>\n\t\t\t\t\t\t<description>ef_if_ana_trim_0.</description>\n\t\t\t\t\t\t<addressOffset>0x820</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_ana_trim_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_if_sw_usage_0</name>\n\t\t\t\t\t\t<description>ef_if_sw_usage_0.</description>\n\t\t\t\t\t\t<addressOffset>0x824</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_if_sw_usage_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_crc_ctrl_0</name>\n\t\t\t\t\t\t<description>ef_crc_ctrl_0.</description>\n\t\t\t\t\t\t<addressOffset>0xA00</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_slp_n</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_lock</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_int_set</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_int_clr</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_int</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_din_endian</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_dout_endian</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_dout_inv_en</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_error</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_mode</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_trig</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_busy</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_crc_ctrl_1</name>\n\t\t\t\t\t\t<description>ef_crc_ctrl_1.</description>\n\t\t\t\t\t\t<addressOffset>0xA04</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_data_0_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_crc_ctrl_2</name>\n\t\t\t\t\t\t<description>ef_crc_ctrl_2.</description>\n\t\t\t\t\t\t<addressOffset>0xA08</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_data_1_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_crc_ctrl_3</name>\n\t\t\t\t\t\t<description>ef_crc_ctrl_3.</description>\n\t\t\t\t\t\t<addressOffset>0xA0C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_iv</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_crc_ctrl_4</name>\n\t\t\t\t\t\t<description>ef_crc_ctrl_4.</description>\n\t\t\t\t\t\t<addressOffset>0xA10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_golden</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ef_crc_ctrl_5</name>\n\t\t\t\t\t\t<description>ef_crc_ctrl_5.</description>\n\t\t\t\t\t\t<addressOffset>0xA14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ef_crc_dout</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>cci</name>\n\t\t\t\t<description>cci.</description>\n\t\t\t\t<baseAddress>0x40008000</baseAddress>\n\t\t\t\t<groupName>cci</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>cci_cfg</name>\n\t\t\t\t\t\t<description>cci_cfg.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_mcci_clk_inv</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_scci_clk_inv</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cfg_cci1_pre_read</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_div_m_cci_sclk</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_m_cci_sclk_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cci_mas_hw_mode</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cci_mas_sel_cci2</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cci_slv_sel_cci2</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cci_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>cci_addr</name>\n\t\t\t\t\t\t<description>cci_addr.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>apb_cci_addr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>cci_wdata</name>\n\t\t\t\t\t\t<description>cci_wdata.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>apb_cci_wdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>cci_rdata</name>\n\t\t\t\t\t\t<description>cci_rdata.</description>\n\t\t\t\t\t\t<addressOffset>0xC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>apb_cci_rdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>cci_ctl</name>\n\t\t\t\t\t\t<description>cci_ctl.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ahb_state</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cci_read_flag</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cci_write_flag</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>l1c</name>\n\t\t\t\t<description>l1c.</description>\n\t\t\t\t<baseAddress>0x40009000</baseAddress>\n\t\t\t\t<groupName>l1c</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>l1c_config</name>\n\t\t\t\t\t\t<description>l1c_config.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reserved_31_30</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_flush_done</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_flush_en</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wrap_dis</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>early_resp_dis</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_bmx_busy_option_dis</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_bmx_timeout_en</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_bmx_arb_mode</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_bmx_err_en</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_bypass</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>irom_2t_access</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_way_dis</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_wa_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_wb_en</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_wt_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_invalid_done</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_invalid_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_cnt_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_cacheable</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>hit_cnt_lsb</name>\n\t\t\t\t\t\t<description>hit_cnt_lsb.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hit_cnt_lsb</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>hit_cnt_msb</name>\n\t\t\t\t\t\t<description>hit_cnt_msb.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hit_cnt_msb</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>miss_cnt</name>\n\t\t\t\t\t\t<description>miss_cnt.</description>\n\t\t\t\t\t\t<addressOffset>0xC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>miss_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>l1c_misc</name>\n\t\t\t\t\t\t<description>l1c_misc.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_fsm</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>l1c_bmx_err_addr_en</name>\n\t\t\t\t\t\t<description>l1c_bmx_err_addr_en.</description>\n\t\t\t\t\t\t<addressOffset>0x200</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_hsel_option</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_bmx_err_tz</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_bmx_err_dec</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_bmx_err_addr_dis</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>l1c_bmx_err_addr</name>\n\t\t\t\t\t\t<description>l1c_bmx_err_addr.</description>\n\t\t\t\t\t\t<addressOffset>0x204</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>l1c_bmx_err_addr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irom1_misr_dataout_0</name>\n\t\t\t\t\t\t<description>irom1_misr_dataout_0.</description>\n\t\t\t\t\t\t<addressOffset>0x208</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>irom1_misr_dataout_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irom1_misr_dataout_1</name>\n\t\t\t\t\t\t<description>irom1_misr_dataout_1.</description>\n\t\t\t\t\t\t<addressOffset>0x20C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>irom1_misr_dataout_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>cpu_clk_gate</name>\n\t\t\t\t\t\t<description>cpu_clk_gate.</description>\n\t\t\t\t\t\t<addressOffset>0x210</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>force_e21_clock_on_2</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>force_e21_clock_on_1</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>force_e21_clock_on_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>uart</name>\n\t\t\t\t<description>uart.</description>\n\t\t\t\t<baseAddress>0x4000A000</baseAddress>\n\t\t\t\t<groupName>uart</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>utx_config</name>\n\t\t\t\t\t\t<description>utx_config.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_len</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_bit_cnt_b</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_bit_cnt_p</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_bit_cnt_d</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_ir_inv</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_ir_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_prt_sel</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_prt_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_lin_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_frm_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_cts_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>urx_config</name>\n\t\t\t\t\t\t<description>urx_config.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_len</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_deg_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_deg_en</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_bit_cnt_d</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_ir_inv</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_ir_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_prt_sel</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_prt_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_lin_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_abr_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>uart_bit_prd</name>\n\t\t\t\t\t\t<description>uart_bit_prd.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_bit_prd</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_bit_prd</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>data_config</name>\n\t\t\t\t\t\t<description>data_config.</description>\n\t\t\t\t\t\t<addressOffset>0xC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_uart_bit_inv</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>utx_ir_position</name>\n\t\t\t\t\t\t<description>utx_ir_position.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_ir_pos_p</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_ir_pos_s</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>urx_ir_position</name>\n\t\t\t\t\t\t<description>urx_ir_position.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_ir_pos_s</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>urx_rto_timer</name>\n\t\t\t\t\t\t<description>urx_rto_timer.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_rto_value</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>uart_sw_mode</name>\n\t\t\t\t\t\t<description>uart_sw_mode.</description>\n\t\t\t\t\t\t<addressOffset>0x1C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_rts_sw_val</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_rts_sw_mode</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_txd_sw_val</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_txd_sw_mode</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>uart_int_sts</name>\n\t\t\t\t\t\t<description>UART interrupt status</description>\n\t\t\t\t\t\t<addressOffset>0x20</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>urx_lse_int</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>urx_fer_int</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>utx_fer_int</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>urx_pce_int</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>urx_rto_int</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>urx_fifo_int</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>utx_fifo_int</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>urx_end_int</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>utx_end_int</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>uart_int_mask</name>\n\t\t\t\t\t\t<description>UART interrupt mask</description>\n\t\t\t\t\t\t<addressOffset>0x24</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_lse_mask</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_fer_mask</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_fer_mask</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_pce_mask</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_rto_mask</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_fifo_mask</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_fifo_mask</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_end_mask</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_end_mask</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>uart_int_clear</name>\n\t\t\t\t\t\t<description>UART interrupt clear</description>\n\t\t\t\t\t\t<addressOffset>0x28</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_lse_clr</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_7</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_6</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_pce_clr</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_rto_clr</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_3</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_2</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_end_clr</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_end_clr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>uart_int_en</name>\n\t\t\t\t\t\t<description>UART interrupt enable</description>\n\t\t\t\t\t\t<addressOffset>0x2C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_lse_en</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_fer_en</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_fer_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_pce_en</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_rto_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_fifo_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_fifo_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_urx_end_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_utx_end_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>uart_status</name>\n\t\t\t\t\t\t<description>uart_status.</description>\n\t\t\t\t\t\t<addressOffset>0x30</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_urx_bus_busy</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_utx_bus_busy</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sts_urx_abr_prd</name>\n\t\t\t\t\t\t<description>sts_urx_abr_prd.</description>\n\t\t\t\t\t\t<addressOffset>0x34</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_urx_abr_prd_0x55</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_urx_abr_prd_start</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>uart_fifo_config_0</name>\n\t\t\t\t\t\t<description>uart_fifo_config_0.</description>\n\t\t\t\t\t\t<addressOffset>0x80</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uart_dma_rx_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uart_dma_tx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>uart_fifo_config_1</name>\n\t\t\t\t\t\t<description>uart_fifo_config_1.</description>\n\t\t\t\t\t\t<addressOffset>0x84</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_th</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_th</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>uart_fifo_wdata</name>\n\t\t\t\t\t\t<description>uart_fifo_wdata.</description>\n\t\t\t\t\t\t<addressOffset>0x88</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uart_fifo_wdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>uart_fifo_rdata</name>\n\t\t\t\t\t\t<description>uart_fifo_rdata.</description>\n\t\t\t\t\t\t<addressOffset>0x8C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uart_fifo_rdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>spi</name>\n\t\t\t\t<description>spi.</description>\n\t\t\t\t<baseAddress>0x4000A200</baseAddress>\n\t\t\t\t<groupName>spi</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>spi_config</name>\n\t\t\t\t\t\t<description>spi_config.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_deg_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_deg_en</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_m_cont_en</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_rxd_ignr_en</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_byte_inv</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_bit_inv</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_sclk_ph</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_sclk_pol</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_frame_size</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_s_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_m_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>spi_int_sts</name>\n\t\t\t\t\t\t<description>spi_int_sts.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_fer_en</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_txu_en</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_sto_en</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_rxf_en</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_txf_en</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_end_en</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_21</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_txu_clr</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_sto_clr</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_18</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_17</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_end_clr</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_fer_mask</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_txu_mask</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_sto_mask</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_rxf_mask</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_txf_mask</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_end_mask</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spi_fer_int</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spi_txu_int</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spi_sto_int</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spi_rxf_int</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spi_txf_int</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spi_end_int</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>spi_bus_busy</name>\n\t\t\t\t\t\t<description>spi_bus_busy.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_spi_bus_busy</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>spi_prd_0</name>\n\t\t\t\t\t\t<description>spi_prd_0.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_prd_d_ph_1</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_prd_d_ph_0</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_prd_p</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_prd_s</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>spi_prd_1</name>\n\t\t\t\t\t\t<description>spi_prd_1.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_prd_i</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>spi_rxd_ignr</name>\n\t\t\t\t\t\t<description>spi_rxd_ignr.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_rxd_ignr_s</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_rxd_ignr_p</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>spi_sto_value</name>\n\t\t\t\t\t\t<description>spi_sto_value.</description>\n\t\t\t\t\t\t<addressOffset>0x1C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_spi_sto_value</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>spi_fifo_config_0</name>\n\t\t\t\t\t\t<description>spi_fifo_config_0.</description>\n\t\t\t\t\t\t<addressOffset>0x80</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spi_dma_rx_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spi_dma_tx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>spi_fifo_config_1</name>\n\t\t\t\t\t\t<description>spi_fifo_config_1.</description>\n\t\t\t\t\t\t<addressOffset>0x84</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_th</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_th</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>spi_fifo_wdata</name>\n\t\t\t\t\t\t<description>spi_fifo_wdata.</description>\n\t\t\t\t\t\t<addressOffset>0x88</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spi_fifo_wdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>spi_fifo_rdata</name>\n\t\t\t\t\t\t<description>spi_fifo_rdata.</description>\n\t\t\t\t\t\t<addressOffset>0x8C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spi_fifo_rdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>i2c</name>\n\t\t\t\t<description>i2c.</description>\n\t\t\t\t<baseAddress>0x4000A300</baseAddress>\n\t\t\t\t<groupName>i2c</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2c_config</name>\n\t\t\t\t\t\t<description>i2c_config.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_deg_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_pkt_len</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_slv_addr</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_sub_addr_bc</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_sub_addr_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_scl_sync_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_deg_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_pkt_dir</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_m_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2c_int_sts</name>\n\t\t\t\t\t\t<description>i2c_int_sts.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_fer_en</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_arb_en</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_nak_en</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_rxf_en</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_txf_en</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_end_en</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_21</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_arb_clr</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_nak_clr</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_18</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_17</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_end_clr</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_fer_mask</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_arb_mask</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_nak_mask</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_rxf_mask</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_txf_mask</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_end_mask</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2c_fer_int</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2c_arb_int</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2c_nak_int</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2c_rxf_int</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2c_txf_int</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2c_end_int</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2c_sub_addr</name>\n\t\t\t\t\t\t<description>i2c_sub_addr.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_sub_addr_b3</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_sub_addr_b2</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_sub_addr_b1</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_sub_addr_b0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2c_bus_busy</name>\n\t\t\t\t\t\t<description>i2c_bus_busy.</description>\n\t\t\t\t\t\t<addressOffset>0xC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_bus_busy_clr</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_i2c_bus_busy</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2c_prd_start</name>\n\t\t\t\t\t\t<description>i2c_prd_start.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_prd_s_ph_3</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_prd_s_ph_2</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_prd_s_ph_1</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_prd_s_ph_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2c_prd_stop</name>\n\t\t\t\t\t\t<description>i2c_prd_stop.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_prd_p_ph_3</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_prd_p_ph_2</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_prd_p_ph_1</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_prd_p_ph_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2c_prd_data</name>\n\t\t\t\t\t\t<description>i2c_prd_data.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_prd_d_ph_3</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_prd_d_ph_2</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_prd_d_ph_1</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2c_prd_d_ph_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2c_fifo_config_0</name>\n\t\t\t\t\t\t<description>i2c_fifo_config_0.</description>\n\t\t\t\t\t\t<addressOffset>0x80</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2c_dma_rx_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2c_dma_tx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2c_fifo_config_1</name>\n\t\t\t\t\t\t<description>i2c_fifo_config_1.</description>\n\t\t\t\t\t\t<addressOffset>0x84</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_th</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_th</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2c_fifo_wdata</name>\n\t\t\t\t\t\t<description>i2c_fifo_wdata.</description>\n\t\t\t\t\t\t<addressOffset>0x88</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2c_fifo_wdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2c_fifo_rdata</name>\n\t\t\t\t\t\t<description>i2c_fifo_rdata.</description>\n\t\t\t\t\t\t<addressOffset>0x8C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2c_fifo_rdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>pwm</name>\n\t\t\t\t<description>pwm.</description>\n\t\t\t\t<baseAddress>0x4000A400</baseAddress>\n\t\t\t\t<groupName>pwm</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm_int_config</name>\n\t\t\t\t\t\t<description>pwm_int_config.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_int_clear</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_interrupt_sts</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm0_clkdiv</name>\n\t\t\t\t\t\t<description>pwm0_clkdiv.</description>\n\t\t\t\t\t\t<addressOffset>0x20</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_clk_div</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm0_thre1</name>\n\t\t\t\t\t\t<description>pwm0_thre1.</description>\n\t\t\t\t\t\t<addressOffset>0x24</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_thre1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm0_thre2</name>\n\t\t\t\t\t\t<description>pwm0_thre2.</description>\n\t\t\t\t\t\t<addressOffset>0x28</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_thre2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm0_period</name>\n\t\t\t\t\t\t<description>pwm0_period.</description>\n\t\t\t\t\t\t<addressOffset>0x2C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_period</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm0_config</name>\n\t\t\t\t\t\t<description>pwm0_config.</description>\n\t\t\t\t\t\t<addressOffset>0x30</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_sts_top</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_stop_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_sw_mode</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_sw_force_val</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_stop_mode</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_out_inv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_clk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm0_interrupt</name>\n\t\t\t\t\t\t<description>pwm0_interrupt.</description>\n\t\t\t\t\t\t<addressOffset>0x34</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_int_enable</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_int_period_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm1_clkdiv</name>\n\t\t\t\t\t\t<description>pwm1_clkdiv.</description>\n\t\t\t\t\t\t<addressOffset>0x40</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_clk_div</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm1_thre1</name>\n\t\t\t\t\t\t<description>pwm1_thre1.</description>\n\t\t\t\t\t\t<addressOffset>0x44</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_thre1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm1_thre2</name>\n\t\t\t\t\t\t<description>pwm1_thre2.</description>\n\t\t\t\t\t\t<addressOffset>0x48</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_thre2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm1_period</name>\n\t\t\t\t\t\t<description>pwm1_period.</description>\n\t\t\t\t\t\t<addressOffset>0x4C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_period</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm1_config</name>\n\t\t\t\t\t\t<description>pwm1_config.</description>\n\t\t\t\t\t\t<addressOffset>0x50</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_sts_top</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_stop_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_sw_mode</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_sw_force_val</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_stop_mode</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_out_inv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_clk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm1_interrupt</name>\n\t\t\t\t\t\t<description>pwm1_interrupt.</description>\n\t\t\t\t\t\t<addressOffset>0x54</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_int_enable</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_int_period_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm2_clkdiv</name>\n\t\t\t\t\t\t<description>pwm2_clkdiv.</description>\n\t\t\t\t\t\t<addressOffset>0x60</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_clk_div</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm2_thre1</name>\n\t\t\t\t\t\t<description>pwm2_thre1.</description>\n\t\t\t\t\t\t<addressOffset>0x64</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_thre1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm2_thre2</name>\n\t\t\t\t\t\t<description>pwm2_thre2.</description>\n\t\t\t\t\t\t<addressOffset>0x68</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_thre2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm2_period</name>\n\t\t\t\t\t\t<description>pwm2_period.</description>\n\t\t\t\t\t\t<addressOffset>0x6C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_period</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm2_config</name>\n\t\t\t\t\t\t<description>pwm2_config.</description>\n\t\t\t\t\t\t<addressOffset>0x70</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_sts_top</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_stop_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_sw_mode</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_sw_force_val</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_stop_mode</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_out_inv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_clk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm2_interrupt</name>\n\t\t\t\t\t\t<description>pwm2_interrupt.</description>\n\t\t\t\t\t\t<addressOffset>0x74</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_int_enable</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_int_period_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm3_clkdiv</name>\n\t\t\t\t\t\t<description>pwm3_clkdiv.</description>\n\t\t\t\t\t\t<addressOffset>0x80</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_clk_div</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm3_thre1</name>\n\t\t\t\t\t\t<description>pwm3_thre1.</description>\n\t\t\t\t\t\t<addressOffset>0x84</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_thre1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm3_thre2</name>\n\t\t\t\t\t\t<description>pwm3_thre2.</description>\n\t\t\t\t\t\t<addressOffset>0x88</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_thre2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm3_period</name>\n\t\t\t\t\t\t<description>pwm3_period.</description>\n\t\t\t\t\t\t<addressOffset>0x8C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_period</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm3_config</name>\n\t\t\t\t\t\t<description>pwm3_config.</description>\n\t\t\t\t\t\t<addressOffset>0x90</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_sts_top</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_stop_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_sw_mode</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_sw_force_val</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_stop_mode</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_out_inv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_clk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm3_interrupt</name>\n\t\t\t\t\t\t<description>pwm3_interrupt.</description>\n\t\t\t\t\t\t<addressOffset>0x94</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_int_enable</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_int_period_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm4_clkdiv</name>\n\t\t\t\t\t\t<description>pwm4_clkdiv.</description>\n\t\t\t\t\t\t<addressOffset>0xA0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_clk_div</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm4_thre1</name>\n\t\t\t\t\t\t<description>pwm4_thre1.</description>\n\t\t\t\t\t\t<addressOffset>0xA4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_thre1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm4_thre2</name>\n\t\t\t\t\t\t<description>pwm4_thre2.</description>\n\t\t\t\t\t\t<addressOffset>0xA8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_thre2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm4_period</name>\n\t\t\t\t\t\t<description>pwm4_period.</description>\n\t\t\t\t\t\t<addressOffset>0xAC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_period</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm4_config</name>\n\t\t\t\t\t\t<description>pwm4_config.</description>\n\t\t\t\t\t\t<addressOffset>0xB0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_sts_top</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_stop_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_sw_mode</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_sw_force_val</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_stop_mode</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_out_inv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_clk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pwm4_interrupt</name>\n\t\t\t\t\t\t<description>pwm4_interrupt.</description>\n\t\t\t\t\t\t<addressOffset>0xB4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_int_enable</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwm_int_period_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>timer</name>\n\t\t\t\t<description>timer.</description>\n\t\t\t\t<baseAddress>0x4000A500</baseAddress>\n\t\t\t\t<groupName>timer</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TCCR</name>\n\t\t\t\t\t\t<description>TCCR.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cs_wdt</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RESERVED_7</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cs_2</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RESERVED_4</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cs_1</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TMR2_0</name>\n\t\t\t\t\t\t<description>TMR2_0.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tmr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TMR2_1</name>\n\t\t\t\t\t\t<description>TMR2_1.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tmr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TMR2_2</name>\n\t\t\t\t\t\t<description>TMR2_2.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tmr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TMR3_0</name>\n\t\t\t\t\t\t<description>TMR3_0.</description>\n\t\t\t\t\t\t<addressOffset>0x1C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tmr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TMR3_1</name>\n\t\t\t\t\t\t<description>TMR3_1.</description>\n\t\t\t\t\t\t<addressOffset>0x20</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tmr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TMR3_2</name>\n\t\t\t\t\t\t<description>TMR3_2.</description>\n\t\t\t\t\t\t<addressOffset>0x24</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tmr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TCR2</name>\n\t\t\t\t\t\t<description>TCR2.</description>\n\t\t\t\t\t\t<addressOffset>0x2C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tcr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TCR3</name>\n\t\t\t\t\t\t<description>TCR3.</description>\n\t\t\t\t\t\t<addressOffset>0x30</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tcr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TMSR2</name>\n\t\t\t\t\t\t<description>TMSR2.</description>\n\t\t\t\t\t\t<addressOffset>0x38</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tmsr_2</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tmsr_1</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tmsr_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TMSR3</name>\n\t\t\t\t\t\t<description>TMSR3.</description>\n\t\t\t\t\t\t<addressOffset>0x3C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tmsr_2</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tmsr_1</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tmsr_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TIER2</name>\n\t\t\t\t\t\t<description>TIER2.</description>\n\t\t\t\t\t\t<addressOffset>0x44</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tier_2</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tier_1</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tier_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TIER3</name>\n\t\t\t\t\t\t<description>TIER3.</description>\n\t\t\t\t\t\t<addressOffset>0x48</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tier_2</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tier_1</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tier_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TPLVR2</name>\n\t\t\t\t\t\t<description>TPLVR2.</description>\n\t\t\t\t\t\t<addressOffset>0x50</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tplvr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TPLVR3</name>\n\t\t\t\t\t\t<description>TPLVR3.</description>\n\t\t\t\t\t\t<addressOffset>0x54</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tplvr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TPLCR2</name>\n\t\t\t\t\t\t<description>TPLCR2.</description>\n\t\t\t\t\t\t<addressOffset>0x5C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tplcr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TPLCR3</name>\n\t\t\t\t\t\t<description>TPLCR3.</description>\n\t\t\t\t\t\t<addressOffset>0x60</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tplcr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>WMER</name>\n\t\t\t\t\t\t<description>WMER.</description>\n\t\t\t\t\t\t<addressOffset>0x64</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wrie</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>we</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>WMR</name>\n\t\t\t\t\t\t<description>WMR.</description>\n\t\t\t\t\t\t<addressOffset>0x68</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wmr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>WVR</name>\n\t\t\t\t\t\t<description>WVR.</description>\n\t\t\t\t\t\t<addressOffset>0x6C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wvr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>WSR</name>\n\t\t\t\t\t\t<description>WSR.</description>\n\t\t\t\t\t\t<addressOffset>0x70</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wts</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TICR2</name>\n\t\t\t\t\t\t<description>TICR2.</description>\n\t\t\t\t\t\t<addressOffset>0x78</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tclr_2</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tclr_1</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tclr_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TICR3</name>\n\t\t\t\t\t\t<description>TICR3.</description>\n\t\t\t\t\t\t<addressOffset>0x7C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tclr_2</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tclr_1</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tclr_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>WICR</name>\n\t\t\t\t\t\t<description>WICR.</description>\n\t\t\t\t\t\t<addressOffset>0x80</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wiclr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TCER</name>\n\t\t\t\t\t\t<description>TCER.</description>\n\t\t\t\t\t\t<addressOffset>0x84</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>timer3_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>timer2_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TCMR</name>\n\t\t\t\t\t\t<description>TCMR.</description>\n\t\t\t\t\t\t<addressOffset>0x88</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>timer3_mode</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>timer2_mode</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TILR2</name>\n\t\t\t\t\t\t<description>TILR2.</description>\n\t\t\t\t\t\t<addressOffset>0x90</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tilr_2</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tilr_1</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tilr_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TILR3</name>\n\t\t\t\t\t\t<description>TILR3.</description>\n\t\t\t\t\t\t<addressOffset>0x94</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tilr_2</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tilr_1</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tilr_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>WCR</name>\n\t\t\t\t\t\t<description>WCR.</description>\n\t\t\t\t\t\t<addressOffset>0x98</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wcr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>WFAR</name>\n\t\t\t\t\t\t<description>WFAR.</description>\n\t\t\t\t\t\t<addressOffset>0x9C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wfar</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>WSAR</name>\n\t\t\t\t\t\t<description>WSAR.</description>\n\t\t\t\t\t\t<addressOffset>0xA0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wsar</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TCVWR2</name>\n\t\t\t\t\t\t<description>TCVWR2.</description>\n\t\t\t\t\t\t<addressOffset>0xA8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tcvwr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TCVWR3</name>\n\t\t\t\t\t\t<description>TCVWR3.</description>\n\t\t\t\t\t\t<addressOffset>0xAC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tcvwr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TCVSYN2</name>\n\t\t\t\t\t\t<description>TCVSYN2.</description>\n\t\t\t\t\t\t<addressOffset>0xB4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tcvsyn2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TCVSYN3</name>\n\t\t\t\t\t\t<description>TCVSYN3.</description>\n\t\t\t\t\t\t<addressOffset>0xB8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tcvsyn3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TCDR</name>\n\t\t\t\t\t\t<description>TCDR.</description>\n\t\t\t\t\t\t<addressOffset>0xBC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>wcdr</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tcdr3</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tcdr2</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>ir</name>\n\t\t\t\t<description>ir.</description>\n\t\t\t\t<baseAddress>0x4000A600</baseAddress>\n\t\t\t\t<groupName>ir</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irtx_config</name>\n\t\t\t\t\t\t<description>irtx_config.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_data_num</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_tail_hl_inv</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_tail_en</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_head_hl_inv</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_head_en</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_logic1_hl_inv</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_logic0_hl_inv</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_data_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_swm_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_mod_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_out_inv</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irtx_int_sts</name>\n\t\t\t\t\t\t<description>irtx_int_sts.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_end_en</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_end_clr</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_end_mask</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>irtx_end_int</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irtx_data_word0</name>\n\t\t\t\t\t\t<description>irtx_data_word0.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_data_word0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irtx_data_word1</name>\n\t\t\t\t\t\t<description>irtx_data_word1.</description>\n\t\t\t\t\t\t<addressOffset>0xC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_data_word1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irtx_pulse_width</name>\n\t\t\t\t\t\t<description>irtx_pulse_width.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_mod_ph1_w</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_mod_ph0_w</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_pw_unit</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irtx_pw</name>\n\t\t\t\t\t\t<description>irtx_pw.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_tail_ph1_w</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_tail_ph0_w</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_head_ph1_w</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_head_ph0_w</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_logic1_ph1_w</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_logic1_ph0_w</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_logic0_ph1_w</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_logic0_ph0_w</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irtx_swm_pw_0</name>\n\t\t\t\t\t\t<description>irtx_swm_pw_0.</description>\n\t\t\t\t\t\t<addressOffset>0x40</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_swm_pw_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irtx_swm_pw_1</name>\n\t\t\t\t\t\t<description>irtx_swm_pw_1.</description>\n\t\t\t\t\t\t<addressOffset>0x44</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_swm_pw_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irtx_swm_pw_2</name>\n\t\t\t\t\t\t<description>irtx_swm_pw_2.</description>\n\t\t\t\t\t\t<addressOffset>0x48</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_swm_pw_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irtx_swm_pw_3</name>\n\t\t\t\t\t\t<description>irtx_swm_pw_3.</description>\n\t\t\t\t\t\t<addressOffset>0x4C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_swm_pw_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irtx_swm_pw_4</name>\n\t\t\t\t\t\t<description>irtx_swm_pw_4.</description>\n\t\t\t\t\t\t<addressOffset>0x50</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_swm_pw_4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irtx_swm_pw_5</name>\n\t\t\t\t\t\t<description>irtx_swm_pw_5.</description>\n\t\t\t\t\t\t<addressOffset>0x54</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_swm_pw_5</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irtx_swm_pw_6</name>\n\t\t\t\t\t\t<description>irtx_swm_pw_6.</description>\n\t\t\t\t\t\t<addressOffset>0x58</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_swm_pw_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irtx_swm_pw_7</name>\n\t\t\t\t\t\t<description>irtx_swm_pw_7.</description>\n\t\t\t\t\t\t<addressOffset>0x5C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irtx_swm_pw_7</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irrx_config</name>\n\t\t\t\t\t\t<description>irrx_config.</description>\n\t\t\t\t\t\t<addressOffset>0x80</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irrx_deg_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irrx_deg_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irrx_mode</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irrx_in_inv</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irrx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irrx_int_sts</name>\n\t\t\t\t\t\t<description>irrx_int_sts.</description>\n\t\t\t\t\t\t<addressOffset>0x84</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irrx_end_en</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irrx_end_clr</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irrx_end_mask</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>irrx_end_int</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irrx_pw_config</name>\n\t\t\t\t\t\t<description>irrx_pw_config.</description>\n\t\t\t\t\t\t<addressOffset>0x88</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irrx_end_th</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_irrx_data_th</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irrx_data_count</name>\n\t\t\t\t\t\t<description>irrx_data_count.</description>\n\t\t\t\t\t\t<addressOffset>0x90</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_irrx_data_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irrx_data_word0</name>\n\t\t\t\t\t\t<description>irrx_data_word0.</description>\n\t\t\t\t\t\t<addressOffset>0x94</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_irrx_data_word0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irrx_data_word1</name>\n\t\t\t\t\t\t<description>irrx_data_word1.</description>\n\t\t\t\t\t\t<addressOffset>0x98</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_irrx_data_word1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irrx_swm_fifo_config_0</name>\n\t\t\t\t\t\t<description>irrx_swm_fifo_config_0.</description>\n\t\t\t\t\t\t<addressOffset>0xC0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>irrx_swm_fifo_rdata</name>\n\t\t\t\t\t\t<description>irrx_swm_fifo_rdata.</description>\n\t\t\t\t\t\t<addressOffset>0xC4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_rdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>cks</name>\n\t\t\t\t<description>cks.</description>\n\t\t\t\t<baseAddress>0x4000A700</baseAddress>\n\t\t\t\t<groupName>cks</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>cks_config</name>\n\t\t\t\t\t\t<description>cks_config.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_cks_byte_swap</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_cks_clr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>data_in</name>\n\t\t\t\t\t\t<description>data_in.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>data_in</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>cks_out</name>\n\t\t\t\t\t\t<description>cks_out.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cks_out</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>qdec</name>\n\t\t\t\t<description>qdec.</description>\n\t\t\t\t<baseAddress>0x4000A800</baseAddress>\n\t\t\t\t<groupName>qdec</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>qdec_ctrl</name>\n\t\t\t\t\t\t<description>qdec_ctrl.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>input_swap</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rpt_mode</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spl_mode</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>led_period</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rpt_period</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spl_period</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>deg_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>deg_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>led_pol</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>led_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>qdec_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>qdec_value</name>\n\t\t\t\t\t\t<description>qdec_value.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spl_val</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acc2_val</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acc1_val</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>qdec_int_en</name>\n\t\t\t\t\t\t<description>qdec_int_en.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>overflow_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dbl_rdy_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spl_rdy_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rpt_rdy_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>qdec_int_sts</name>\n\t\t\t\t\t\t<description>qdec_int_sts.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>overflow_sts</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dbl_rdy_sts</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spl_rdy_sts</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rpt_rdy_sts</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>qdec_int_clr</name>\n\t\t\t\t\t\t<description>qdec_int_clr.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>overflow_clr</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dbl_rdy_clr</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>spl_rdy_clr</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rpt_rdy_clr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>kys</name>\n\t\t\t\t<description>kys.</description>\n\t\t\t\t<baseAddress>0x4000AB00</baseAddress>\n\t\t\t\t<groupName>kys</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ks_ctrl</name>\n\t\t\t\t\t\t<description>ks_ctrl.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>col_num</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>row_num</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc_ext</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>deg_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>deg_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ghost_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ks_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ks_int_en</name>\n\t\t\t\t\t\t<description>ks_int_en.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ks_int_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ks_int_sts</name>\n\t\t\t\t\t\t<description>ks_int_sts.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>keycode_valid</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>keycode_clr</name>\n\t\t\t\t\t\t<description>keycode_clr.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>keycode_clr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>keycode_value</name>\n\t\t\t\t\t\t<description>keycode_value.</description>\n\t\t\t\t\t\t<addressOffset>0x1C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>keycode3</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>keycode2</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>keycode1</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>keycode0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>i2s</name>\n\t\t\t\t<description>i2s.</description>\n\t\t\t\t<baseAddress>0x4000AA00</baseAddress>\n\t\t\t\t<groupName>i2s</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2s_config</name>\n\t\t\t\t\t\t<description>i2s_config.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ofs_en</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ofs_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_mono_rx_ch</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_endian</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2s_mode</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_data_size</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_frame_size</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_fs_3ch_mode</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_fs_4ch_mode</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_fs_1t_mode</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_mute_mode</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_mono_mode</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2s_rxd_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2s_txd_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2s_s_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2s_m_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2s_int_sts</name>\n\t\t\t\t\t\t<description>i2s_int_sts.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2s_fer_en</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2s_rxf_en</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2s_txf_en</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2s_fer_mask</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2s_rxf_mask</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2s_txf_mask</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2s_fer_int</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2s_rxf_int</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2s_txf_int</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2s_bclk_config</name>\n\t\t\t\t\t\t<description>i2s_bclk_config.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_bclk_div_h</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_bclk_div_l</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2s_fifo_config_0</name>\n\t\t\t\t\t\t<description>i2s_fifo_config_0.</description>\n\t\t\t\t\t\t<addressOffset>0x80</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_fifo_24b_lj</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_fifo_lr_exchg</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_fifo_lr_merge</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2s_dma_rx_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2s_dma_tx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2s_fifo_config_1</name>\n\t\t\t\t\t\t<description>i2s_fifo_config_1.</description>\n\t\t\t\t\t\t<addressOffset>0x84</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_th</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_th</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2s_fifo_wdata</name>\n\t\t\t\t\t\t<description>i2s_fifo_wdata.</description>\n\t\t\t\t\t\t<addressOffset>0x88</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2s_fifo_wdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2s_fifo_rdata</name>\n\t\t\t\t\t\t<description>i2s_fifo_rdata.</description>\n\t\t\t\t\t\t<addressOffset>0x8C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>i2s_fifo_rdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>i2s_io_config</name>\n\t\t\t\t\t\t<description>i2s_io_config.</description>\n\t\t\t\t\t\t<addressOffset>0xFC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_deg_en</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_deg_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2s_bclk_inv</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2s_fs_inv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2s_rxd_inv</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_i2s_txd_inv</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>cam</name>\n\t\t\t\t<description>cam.</description>\n\t\t\t\t<baseAddress>0x4000AD00</baseAddress>\n\t\t\t\t<groupName>cam</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>dvp2axi_configue</name>\n\t\t\t\t\t\t<description>dvp2axi_configue.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_dvp_wait_cycle</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_dvp_pix_clk_cg</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_interlv_mode</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_subsample_even</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_subsample_en</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_drop_even</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_drop_en</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_hw_mode_fwrap</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_dvp_mode</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_hburst</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_line_vld_pol</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_fram_vld_pol</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_sw_mode</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_dvp_enable</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>dvp2ahb_addr_start_0</name>\n\t\t\t\t\t\t<description>dvp2ahb_addr_start_0.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_addr_start_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>dvp2ahb_mem_bcnt_0</name>\n\t\t\t\t\t\t<description>dvp2ahb_mem_bcnt_0.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_mem_burst_cnt_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>dvp2ahb_frame_bcnt_0</name>\n\t\t\t\t\t\t<description>dvp2ahb_frame_bcnt_0.</description>\n\t\t\t\t\t\t<addressOffset>0xC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_frame_burst_cnt_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>dvp2ahb_addr_start_1</name>\n\t\t\t\t\t\t<description>dvp2ahb_addr_start_1.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_addr_start_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>dvp2ahb_mem_bcnt_1</name>\n\t\t\t\t\t\t<description>dvp2ahb_mem_bcnt_1.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_mem_burst_cnt_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>dvp2ahb_frame_bcnt_1</name>\n\t\t\t\t\t\t<description>dvp2ahb_frame_bcnt_1.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_frame_burst_cnt_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>dvp_status_and_error</name>\n\t\t\t\t\t\t<description>dvp_status_and_error.</description>\n\t\t\t\t\t\t<addressOffset>0x1C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>st_bus_flsh</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>st_bus_wait</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>st_bus_func</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>st_bus_idle</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_valid_cnt_1</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_valid_cnt_0</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>st_dvp_idle</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ahb_idle_1</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ahb_idle_0</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_vcnt_int</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_hcnt_int</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_fifo_int_1</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_fifo_int_0</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_frame_int_1</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_frame_int_0</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_mem_int_1</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_mem_int_0</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_normal_int_1</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_normal_int_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>dvp_frame_fifo_pop</name>\n\t\t\t\t\t\t<description>dvp_frame_fifo_pop.</description>\n\t\t\t\t\t\t<addressOffset>0x20</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_fifo_clr_1</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_frame_clr_1</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_mem_clr_1</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_normal_clr_1</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_vcnt_clr_0</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_hcnt_clr_0</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_fifo_clr_0</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_frame_clr_0</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_mem_clr_0</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_normal_clr_0</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rfifo_pop_1</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rfifo_pop_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>snsr_control</name>\n\t\t\t\t\t\t<description>snsr_control.</description>\n\t\t\t\t\t\t<addressOffset>0x24</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_cam_pwdn</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_cam_rst</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>int_control</name>\n\t\t\t\t\t\t<description>int_control.</description>\n\t\t\t\t\t\t<addressOffset>0x28</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_frame_cnt_trgr_int</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_vcnt_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_hcnt_en</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_fifo_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_frame_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_mem_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_normal_1_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_normal_0_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>hsync_control</name>\n\t\t\t\t\t\t<description>hsync_control.</description>\n\t\t\t\t\t\t<addressOffset>0x30</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_hsync_act_start</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_hsync_act_end</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>vsync_control</name>\n\t\t\t\t\t\t<description>vsync_control.</description>\n\t\t\t\t\t\t<addressOffset>0x34</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_vsync_act_start</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_vsync_act_end</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_size_control</name>\n\t\t\t\t\t\t<description>frame_size_control.</description>\n\t\t\t\t\t\t<addressOffset>0x38</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_total_vcnt</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_total_hcnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_start_addr0_0</name>\n\t\t\t\t\t\t<description>frame_start_addr0_0.</description>\n\t\t\t\t\t\t<addressOffset>0x40</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_0_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_byte_cnt0_0</name>\n\t\t\t\t\t\t<description>frame_byte_cnt0_0.</description>\n\t\t\t\t\t\t<addressOffset>0x44</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_byte_cnt_0_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_start_addr0_1</name>\n\t\t\t\t\t\t<description>frame_start_addr0_1.</description>\n\t\t\t\t\t\t<addressOffset>0x48</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_0_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_byte_cnt0_1</name>\n\t\t\t\t\t\t<description>frame_byte_cnt0_1.</description>\n\t\t\t\t\t\t<addressOffset>0x4C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_byte_cnt_0_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_start_addr0_2</name>\n\t\t\t\t\t\t<description>frame_start_addr0_2.</description>\n\t\t\t\t\t\t<addressOffset>0x50</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_0_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_byte_cnt0_2</name>\n\t\t\t\t\t\t<description>frame_byte_cnt0_2.</description>\n\t\t\t\t\t\t<addressOffset>0x54</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_byte_cnt_0_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_start_addr0_3</name>\n\t\t\t\t\t\t<description>frame_start_addr0_3.</description>\n\t\t\t\t\t\t<addressOffset>0x58</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_0_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_byte_cnt0_3</name>\n\t\t\t\t\t\t<description>frame_byte_cnt0_3.</description>\n\t\t\t\t\t\t<addressOffset>0x5C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_byte_cnt_0_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_start_addr0_4</name>\n\t\t\t\t\t\t<description>frame_start_addr0_4.</description>\n\t\t\t\t\t\t<addressOffset>0x60</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_0_4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_byte_cnt0_4</name>\n\t\t\t\t\t\t<description>frame_byte_cnt0_4.</description>\n\t\t\t\t\t\t<addressOffset>0x64</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_byte_cnt_0_4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_start_addr0_5</name>\n\t\t\t\t\t\t<description>frame_start_addr0_5.</description>\n\t\t\t\t\t\t<addressOffset>0x68</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_0_5</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_byte_cnt0_5</name>\n\t\t\t\t\t\t<description>frame_byte_cnt0_5.</description>\n\t\t\t\t\t\t<addressOffset>0x6C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_byte_cnt_0_5</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_start_addr0_6</name>\n\t\t\t\t\t\t<description>frame_start_addr0_6.</description>\n\t\t\t\t\t\t<addressOffset>0x70</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_0_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_byte_cnt0_6</name>\n\t\t\t\t\t\t<description>frame_byte_cnt0_6.</description>\n\t\t\t\t\t\t<addressOffset>0x74</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_byte_cnt_0_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_start_addr0_7</name>\n\t\t\t\t\t\t<description>frame_start_addr0_7.</description>\n\t\t\t\t\t\t<addressOffset>0x78</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_0_7</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_byte_cnt0_7</name>\n\t\t\t\t\t\t<description>frame_byte_cnt0_7.</description>\n\t\t\t\t\t\t<addressOffset>0x7C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_byte_cnt_0_7</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_start_addr1_0</name>\n\t\t\t\t\t\t<description>frame_start_addr1_0.</description>\n\t\t\t\t\t\t<addressOffset>0x80</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_1_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_byte_cnt1_0</name>\n\t\t\t\t\t\t<description>frame_byte_cnt1_0.</description>\n\t\t\t\t\t\t<addressOffset>0x84</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_byte_cnt_1_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_start_addr1_1</name>\n\t\t\t\t\t\t<description>frame_start_addr1_1.</description>\n\t\t\t\t\t\t<addressOffset>0x88</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_1_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_byte_cnt1_1</name>\n\t\t\t\t\t\t<description>frame_byte_cnt1_1.</description>\n\t\t\t\t\t\t<addressOffset>0x8C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_byte_cnt_1_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_start_addr1_2</name>\n\t\t\t\t\t\t<description>frame_start_addr1_2.</description>\n\t\t\t\t\t\t<addressOffset>0x90</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_1_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_byte_cnt1_2</name>\n\t\t\t\t\t\t<description>frame_byte_cnt1_2.</description>\n\t\t\t\t\t\t<addressOffset>0x94</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_byte_cnt_1_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_start_addr1_3</name>\n\t\t\t\t\t\t<description>frame_start_addr1_3.</description>\n\t\t\t\t\t\t<addressOffset>0x98</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_1_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_byte_cnt1_3</name>\n\t\t\t\t\t\t<description>frame_byte_cnt1_3.</description>\n\t\t\t\t\t\t<addressOffset>0x9C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_byte_cnt_1_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_start_addr1_4</name>\n\t\t\t\t\t\t<description>frame_start_addr1_4.</description>\n\t\t\t\t\t\t<addressOffset>0xA0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_1_4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_byte_cnt1_4</name>\n\t\t\t\t\t\t<description>frame_byte_cnt1_4.</description>\n\t\t\t\t\t\t<addressOffset>0xA4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_byte_cnt_1_4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_start_addr1_5</name>\n\t\t\t\t\t\t<description>frame_start_addr1_5.</description>\n\t\t\t\t\t\t<addressOffset>0xA8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_1_5</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_byte_cnt1_5</name>\n\t\t\t\t\t\t<description>frame_byte_cnt1_5.</description>\n\t\t\t\t\t\t<addressOffset>0xAC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_byte_cnt_1_5</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_start_addr1_6</name>\n\t\t\t\t\t\t<description>frame_start_addr1_6.</description>\n\t\t\t\t\t\t<addressOffset>0xB0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_1_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_byte_cnt1_6</name>\n\t\t\t\t\t\t<description>frame_byte_cnt1_6.</description>\n\t\t\t\t\t\t<addressOffset>0xB4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_byte_cnt_1_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_start_addr1_7</name>\n\t\t\t\t\t\t<description>frame_start_addr1_7.</description>\n\t\t\t\t\t\t<addressOffset>0xB8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_1_7</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>frame_byte_cnt1_7</name>\n\t\t\t\t\t\t<description>frame_byte_cnt1_7.</description>\n\t\t\t\t\t\t<addressOffset>0xBC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_byte_cnt_1_7</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>dvp_debug</name>\n\t\t\t\t\t\t<description>dvp_debug.</description>\n\t\t\t\t\t\t<addressOffset>0xFF0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_dvp_dbg_sel</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_dvp_dbg_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>dvp_dummy_reg</name>\n\t\t\t\t\t\t<description>dvp_dummy_reg.</description>\n\t\t\t\t\t\t<addressOffset>0xFFC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RESERVED_31_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>mjpeg</name>\n\t\t\t\t<description>mjpeg.</description>\n\t\t\t\t<baseAddress>0x4000AE00</baseAddress>\n\t\t\t\t<groupName>mjpeg</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_control_1</name>\n\t\t\t\t\t\t<description>mjpeg_control_1.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_v0_order</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_y1_order</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_u0_order</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_y0_order</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_q_mode</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_yuv_mode</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_h_bust</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_reflect_dmy</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_last_hf_hblk_dmy</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_last_hf_wblk_dmy</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_wr_over_stop</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_order_u_even</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_mjpeg_bit_order</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_mjpeg_enable</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_control_2</name>\n\t\t\t\t\t\t<description>mjpeg_control_2.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_mjpeg_wait_cycle</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_uv_dvp2ahb_fsel</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_uv_dvp2ahb_lsel</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_yy_dvp2ahb_fsel</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_yy_dvp2ahb_lsel</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_mjpeg_sw_run</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_mjpeg_sw_mode</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_sw_frame</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_yy_frame_addr</name>\n\t\t\t\t\t\t<description>mjpeg_yy_frame_addr.</description>\n\t\t\t\t\t\t<addressOffset>0x08</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_yy_addr_start</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_uv_frame_addr</name>\n\t\t\t\t\t\t<description>mjpeg_uv_frame_addr.</description>\n\t\t\t\t\t\t<addressOffset>0x0C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_uv_addr_start</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_yuv_mem</name>\n\t\t\t\t\t\t<description>mjpeg_yuv_mem.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_uv_mem_hblk</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_yy_mem_hblk</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>jpeg_frame_addr</name>\n\t\t\t\t\t\t<description>jpeg_frame_addr.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_w_addr_start</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>jpeg_store_memory</name>\n\t\t\t\t\t\t<description>jpeg_store_memory.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_w_burst_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_control_3</name>\n\t\t\t\t\t\t<description>mjpeg_control_3.</description>\n\t\t\t\t\t\t<addressOffset>0x1C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_swap_int</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_swap_en</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_valid_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_idle_int</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_idle_en</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_frame_cnt_trgr_int</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ahb_idle</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>mjpeg_manf</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>mjpeg_mans</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>mjpeg_flsh</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>mjpeg_wait</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>mjpeg_func</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>mjpeg_idle</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_frame_int</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_mem_int</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_cam_int</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_normal_int</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_frame_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_mem_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_cam_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_normal_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_frame_fifo_pop</name>\n\t\t\t\t\t\t<description>mjpeg_frame_fifo_pop.</description>\n\t\t\t\t\t\t<addressOffset>0x20</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_swap_clr</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_idle_clr</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_frame_clr</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_mem_clr</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_cam_clr</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_int_normal_clr</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_w_swap_clr</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rfifo_pop</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_frame_size</name>\n\t\t\t\t\t\t<description>mjpeg_frame_size.</description>\n\t\t\t\t\t\t<addressOffset>0x24</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_frame_hblk</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_frame_wblk</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_header_byte</name>\n\t\t\t\t\t\t<description>mjpeg_header_byte.</description>\n\t\t\t\t\t\t<addressOffset>0x28</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_tail_exp</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_head_byte</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_swap_mode</name>\n\t\t\t\t\t\t<description>mjpeg_swap_mode.</description>\n\t\t\t\t\t\t<addressOffset>0x30</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_swap_fend</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_swap_fstart</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_read_swap_idx</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_swap1_full</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_swap0_full</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_w_swap_mode</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_swap_bit_cnt</name>\n\t\t\t\t\t\t<description>mjpeg_swap_bit_cnt.</description>\n\t\t\t\t\t\t<addressOffset>0x34</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_swap_end_bit_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_paket_ctrl</name>\n\t\t\t\t\t\t<description>mjpeg_paket_ctrl.</description>\n\t\t\t\t\t\t<addressOffset>0x38</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_pket_body_byte</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_jend_to_pend</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_pket_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_paket_head_tail</name>\n\t\t\t\t\t\t<description>mjpeg_paket_head_tail.</description>\n\t\t\t\t\t\t<addressOffset>0x3C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_pket_tail_byte</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_pket_head_byte</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_Y_frame_read_status_1</name>\n\t\t\t\t\t\t<description>mjpeg_Y_frame_read_status_1.</description>\n\t\t\t\t\t\t<addressOffset>0x40</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>yy_frm_hblk_r</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>yy_mem_hblk_r</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_Y_frame_read_status_2</name>\n\t\t\t\t\t\t<description>mjpeg_Y_frame_read_status_2.</description>\n\t\t\t\t\t\t<addressOffset>0x44</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>yy_frm_cnt_r</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>yy_mem_rnd_r</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>yy_wblk_r</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_Y_frame_write_status</name>\n\t\t\t\t\t\t<description>mjpeg_Y_frame_write_status.</description>\n\t\t\t\t\t\t<addressOffset>0x48</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>yy_frm_cnt_w</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>yy_mem_rnd_w</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>yy_mem_hblk_w</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_UV_frame_read_status_1</name>\n\t\t\t\t\t\t<description>mjpeg_UV_frame_read_status_1.</description>\n\t\t\t\t\t\t<addressOffset>0x4C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uv_frm_hblk_r</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uv_mem_hblk_r</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_UV_frame_read_status_2</name>\n\t\t\t\t\t\t<description>mjpeg_UV_frame_read_status_2.</description>\n\t\t\t\t\t\t<addressOffset>0x50</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uv_frm_cnt_r</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uv_mem_rnd_r</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uv_wblk_r</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_UV_frame_write_status</name>\n\t\t\t\t\t\t<description>mjpeg_UV_frame_write_status.</description>\n\t\t\t\t\t\t<addressOffset>0x54</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uv_frm_cnt_w</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uv_mem_rnd_w</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>uv_mem_hblk_w</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_start_addr0</name>\n\t\t\t\t\t\t<description>mjpeg_start_addr0.</description>\n\t\t\t\t\t\t<addressOffset>0x80</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_bit_cnt0</name>\n\t\t\t\t\t\t<description>mjpeg_bit_cnt0.</description>\n\t\t\t\t\t\t<addressOffset>0x84</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_bit_cnt_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_start_addr1</name>\n\t\t\t\t\t\t<description>mjpeg_start_addr1.</description>\n\t\t\t\t\t\t<addressOffset>0x88</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_bit_cnt1</name>\n\t\t\t\t\t\t<description>mjpeg_bit_cnt1.</description>\n\t\t\t\t\t\t<addressOffset>0x8C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_bit_cnt_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_start_addr2</name>\n\t\t\t\t\t\t<description>mjpeg_start_addr2.</description>\n\t\t\t\t\t\t<addressOffset>0x90</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_bit_cnt2</name>\n\t\t\t\t\t\t<description>mjpeg_bit_cnt2.</description>\n\t\t\t\t\t\t<addressOffset>0x94</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_bit_cnt_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_start_addr3</name>\n\t\t\t\t\t\t<description>mjpeg_start_addr3.</description>\n\t\t\t\t\t\t<addressOffset>0x98</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_bit_cnt3</name>\n\t\t\t\t\t\t<description>mjpeg_bit_cnt3.</description>\n\t\t\t\t\t\t<addressOffset>0x9C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_bit_cnt_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_start_addr4</name>\n\t\t\t\t\t\t<description>mjpeg_start_addr4.</description>\n\t\t\t\t\t\t<addressOffset>0xA0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_bit_cnt4</name>\n\t\t\t\t\t\t<description>mjpeg_bit_cnt4.</description>\n\t\t\t\t\t\t<addressOffset>0xA4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_bit_cnt_4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_start_addr5</name>\n\t\t\t\t\t\t<description>mjpeg_start_addr5.</description>\n\t\t\t\t\t\t<addressOffset>0xA8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_5</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_bit_cnt5</name>\n\t\t\t\t\t\t<description>mjpeg_bit_cnt5.</description>\n\t\t\t\t\t\t<addressOffset>0xAC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_bit_cnt_5</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_start_addr6</name>\n\t\t\t\t\t\t<description>mjpeg_start_addr6.</description>\n\t\t\t\t\t\t<addressOffset>0xB0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_bit_cnt6</name>\n\t\t\t\t\t\t<description>mjpeg_bit_cnt6.</description>\n\t\t\t\t\t\t<addressOffset>0xB4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_bit_cnt_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_start_addr7</name>\n\t\t\t\t\t\t<description>mjpeg_start_addr7.</description>\n\t\t\t\t\t\t<addressOffset>0xB8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_7</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_bit_cnt7</name>\n\t\t\t\t\t\t<description>mjpeg_bit_cnt7.</description>\n\t\t\t\t\t\t<addressOffset>0xBC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_bit_cnt_7</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_start_addr_8</name>\n\t\t\t\t\t\t<description>mjpeg_start_addr_8.</description>\n\t\t\t\t\t\t<addressOffset>0xC0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_8</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_bit_cnt_8</name>\n\t\t\t\t\t\t<description>mjpeg_bit_cnt_8.</description>\n\t\t\t\t\t\t<addressOffset>0xC4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_bit_cnt_8</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_start_addr_9</name>\n\t\t\t\t\t\t<description>mjpeg_start_addr_9.</description>\n\t\t\t\t\t\t<addressOffset>0xC8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_9</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_bit_cnt_9</name>\n\t\t\t\t\t\t<description>mjpeg_bit_cnt_9.</description>\n\t\t\t\t\t\t<addressOffset>0xCC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_bit_cnt_9</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_start_addr_a</name>\n\t\t\t\t\t\t<description>mjpeg_start_addr_a.</description>\n\t\t\t\t\t\t<addressOffset>0xD0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_a</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_bit_cnt_a</name>\n\t\t\t\t\t\t<description>mjpeg_bit_cnt_a.</description>\n\t\t\t\t\t\t<addressOffset>0xD4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_bit_cnt_a</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_start_addr_b</name>\n\t\t\t\t\t\t<description>mjpeg_start_addr_b.</description>\n\t\t\t\t\t\t<addressOffset>0xD8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_b</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_bit_cnt_b</name>\n\t\t\t\t\t\t<description>mjpeg_bit_cnt_b.</description>\n\t\t\t\t\t\t<addressOffset>0xDC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_bit_cnt_b</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_start_addr_c</name>\n\t\t\t\t\t\t<description>mjpeg_start_addr_c.</description>\n\t\t\t\t\t\t<addressOffset>0xE0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_c</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_bit_cnt_c</name>\n\t\t\t\t\t\t<description>mjpeg_bit_cnt_c.</description>\n\t\t\t\t\t\t<addressOffset>0xE4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_bit_cnt_c</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_start_addr_d</name>\n\t\t\t\t\t\t<description>mjpeg_start_addr_d.</description>\n\t\t\t\t\t\t<addressOffset>0xE8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_d</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_bit_cnt_d</name>\n\t\t\t\t\t\t<description>mjpeg_bit_cnt_d.</description>\n\t\t\t\t\t\t<addressOffset>0xEC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_bit_cnt_d</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_start_addr_e</name>\n\t\t\t\t\t\t<description>mjpeg_start_addr_e.</description>\n\t\t\t\t\t\t<addressOffset>0xF0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_e</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_bit_cnt_e</name>\n\t\t\t\t\t\t<description>mjpeg_bit_cnt_e.</description>\n\t\t\t\t\t\t<addressOffset>0xF4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_bit_cnt_e</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_start_addr_f</name>\n\t\t\t\t\t\t<description>mjpeg_start_addr_f.</description>\n\t\t\t\t\t\t<addressOffset>0xF8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_start_addr_f</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_bit_cnt_f</name>\n\t\t\t\t\t\t<description>mjpeg_bit_cnt_f.</description>\n\t\t\t\t\t\t<addressOffset>0xFC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_bit_cnt_f</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_q_mode0</name>\n\t\t\t\t\t\t<description>mjpeg_q_mode0.</description>\n\t\t\t\t\t\t<addressOffset>0x100</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_q_mode_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_q_mode1</name>\n\t\t\t\t\t\t<description>mjpeg_q_mode1.</description>\n\t\t\t\t\t\t<addressOffset>0x104</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_q_mode_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_q_mode2</name>\n\t\t\t\t\t\t<description>mjpeg_q_mode2.</description>\n\t\t\t\t\t\t<addressOffset>0x108</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_q_mode_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_q_mode3</name>\n\t\t\t\t\t\t<description>mjpeg_q_mode3.</description>\n\t\t\t\t\t\t<addressOffset>0x10C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_q_mode_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_q_mode4</name>\n\t\t\t\t\t\t<description>mjpeg_q_mode4.</description>\n\t\t\t\t\t\t<addressOffset>0x110</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_q_mode_4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_q_mode5</name>\n\t\t\t\t\t\t<description>mjpeg_q_mode5.</description>\n\t\t\t\t\t\t<addressOffset>0x114</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_q_mode_5</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_q_mode6</name>\n\t\t\t\t\t\t<description>mjpeg_q_mode6.</description>\n\t\t\t\t\t\t<addressOffset>0x118</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_q_mode_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_q_mode7</name>\n\t\t\t\t\t\t<description>mjpeg_q_mode7.</description>\n\t\t\t\t\t\t<addressOffset>0x11C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_q_mode_7</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_q_mode_8</name>\n\t\t\t\t\t\t<description>mjpeg_q_mode_8.</description>\n\t\t\t\t\t\t<addressOffset>0x120</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_q_mode_8</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_q_mode_9</name>\n\t\t\t\t\t\t<description>mjpeg_q_mode_9.</description>\n\t\t\t\t\t\t<addressOffset>0x124</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_q_mode_9</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_q_mode_a</name>\n\t\t\t\t\t\t<description>mjpeg_q_mode_a.</description>\n\t\t\t\t\t\t<addressOffset>0x128</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_q_mode_a</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_q_mode_b</name>\n\t\t\t\t\t\t<description>mjpeg_q_mode_b.</description>\n\t\t\t\t\t\t<addressOffset>0x12C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_q_mode_b</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_q_mode_c</name>\n\t\t\t\t\t\t<description>mjpeg_q_mode_c.</description>\n\t\t\t\t\t\t<addressOffset>0x130</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_q_mode_c</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_q_mode_d</name>\n\t\t\t\t\t\t<description>mjpeg_q_mode_d.</description>\n\t\t\t\t\t\t<addressOffset>0x134</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_q_mode_d</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_q_mode_e</name>\n\t\t\t\t\t\t<description>mjpeg_q_mode_e.</description>\n\t\t\t\t\t\t<addressOffset>0x138</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_q_mode_e</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_q_mode_f</name>\n\t\t\t\t\t\t<description>mjpeg_q_mode_f.</description>\n\t\t\t\t\t\t<addressOffset>0x13C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>frame_q_mode_f</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_debug</name>\n\t\t\t\t\t\t<description>mjpeg_debug.</description>\n\t\t\t\t\t\t<addressOffset>0x1F0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_mjpeg_dbg_sel</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_mjpeg_dbg_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>mjpeg_dummy_reg</name>\n\t\t\t\t\t\t<description>mjpeg_dummy_reg.</description>\n\t\t\t\t\t\t<addressOffset>0x1FC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>mjpeg_dummy_reg</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>sf_ctrl</name>\n\t\t\t\t<description>sf_ctrl.</description>\n\t\t\t\t<baseAddress>0x4000B000</baseAddress>\n\t\t\t\t<groupName>sf_ctrl</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_ctrl_0</name>\n\t\t\t\t\t\t<description>sf_ctrl_0.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_id</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_iv_endian</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_endian</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_ctr_plus_en</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_dout_endian</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_dly_mode</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_int_set</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_int_clr</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_int</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_read_dly_en</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_read_dly_n</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_clk_sahb_sram_sel</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_clk_out_inv_sel</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_clk_out_gate_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_clk_sf_rx_inv_sel</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_ctrl_1</name>\n\t\t\t\t\t\t<description>sf_ctrl_1.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_ahb2sram_en</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_ahb2sif_en</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_en</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_fn_sel</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_ahb2sif_stop</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_ahb2sif_stopped</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_reg_wp</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_reg_hold</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_ack_lat</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_sr_int_set</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_sr_int_en</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_sr_int</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_sr_pat</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_sr_pat_mask</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_sahb_0</name>\n\t\t\t\t\t\t<description>sf_if_sahb_0.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_qpi_mode_en</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_spi_mode</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_cmd_en</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_adr_en</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_dmy_en</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_dat_en</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_dat_rw  </name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_cmd_byte</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_adr_byte</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_dmy_byte</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_dat_byte</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_trig</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_busy</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_sahb_1</name>\n\t\t\t\t\t\t<description>sf_if_sahb_1.</description>\n\t\t\t\t\t\t<addressOffset>0xC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_cmd_buf_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_sahb_2</name>\n\t\t\t\t\t\t<description>sf_if_sahb_2.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_cmd_buf_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_iahb_0</name>\n\t\t\t\t\t\t<description>sf_if_iahb_0.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_1_qpi_mode_en</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_1_spi_mode</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_1_cmd_en</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_1_adr_en</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_1_dmy_en</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_1_dat_en</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_1_dat_rw  </name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_1_cmd_byte</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_1_adr_byte</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_1_dmy_byte</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_iahb_1</name>\n\t\t\t\t\t\t<description>sf_if_iahb_1.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_1_cmd_buf_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_iahb_2</name>\n\t\t\t\t\t\t<description>sf_if_iahb_2.</description>\n\t\t\t\t\t\t<addressOffset>0x1C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_1_cmd_buf_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_status_0</name>\n\t\t\t\t\t\t<description>sf_if_status_0.</description>\n\t\t\t\t\t\t<addressOffset>0x20</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_status_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_status_1</name>\n\t\t\t\t\t\t<description>sf_if_status_1.</description>\n\t\t\t\t\t\t<addressOffset>0x24</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_status_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes</name>\n\t\t\t\t\t\t<description>sf_aes.</description>\n\t\t\t\t\t\t<addressOffset>0x28</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_status</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_pref_busy</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_pref_trig</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_mode</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_ahb2sif_status</name>\n\t\t\t\t\t\t<description>sf_ahb2sif_status.</description>\n\t\t\t\t\t\t<addressOffset>0x2C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_ahb2sif_status</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_io_dly_0</name>\n\t\t\t\t\t\t<description>sf_if_io_dly_0.</description>\n\t\t\t\t\t\t<addressOffset>0x30</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_dqs_do_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_dqs_di_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_dqs_oe_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_clk_out_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_cs2_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_cs_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_io_dly_1</name>\n\t\t\t\t\t\t<description>sf_if_io_dly_1.</description>\n\t\t\t\t\t\t<addressOffset>0x34</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_io_0_do_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_io_0_di_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_io_0_oe_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_io_dly_2</name>\n\t\t\t\t\t\t<description>sf_if_io_dly_2.</description>\n\t\t\t\t\t\t<addressOffset>0x38</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_io_1_do_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_io_1_di_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_io_1_oe_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_io_dly_3</name>\n\t\t\t\t\t\t<description>sf_if_io_dly_3.</description>\n\t\t\t\t\t\t<addressOffset>0x3C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_io_2_do_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_io_2_di_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_io_2_oe_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_io_dly_4</name>\n\t\t\t\t\t\t<description>sf_if_io_dly_4.</description>\n\t\t\t\t\t\t<addressOffset>0x40</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_io_3_do_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_io_3_di_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_io_3_oe_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_reserved</name>\n\t\t\t\t\t\t<description>sf_reserved.</description>\n\t\t\t\t\t\t<addressOffset>0x44</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_reserved</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf2_if_io_dly_0</name>\n\t\t\t\t\t\t<description>sf2_if_io_dly_0.</description>\n\t\t\t\t\t\t<addressOffset>0x48</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_dqs_do_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_dqs_di_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_dqs_oe_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_clk_out_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_cs2_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_cs_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf2_if_io_dly_1</name>\n\t\t\t\t\t\t<description>sf2_if_io_dly_1.</description>\n\t\t\t\t\t\t<addressOffset>0x4C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_io_0_do_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_io_0_di_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_io_0_oe_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf2_if_io_dly_2</name>\n\t\t\t\t\t\t<description>sf2_if_io_dly_2.</description>\n\t\t\t\t\t\t<addressOffset>0x50</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_io_1_do_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_io_1_di_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_io_1_oe_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf2_if_io_dly_3</name>\n\t\t\t\t\t\t<description>sf2_if_io_dly_3.</description>\n\t\t\t\t\t\t<addressOffset>0x54</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_io_2_do_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_io_2_di_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_io_2_oe_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf2_if_io_dly_4</name>\n\t\t\t\t\t\t<description>sf2_if_io_dly_4.</description>\n\t\t\t\t\t\t<addressOffset>0x58</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_io_3_do_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_io_3_di_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_io_3_oe_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf3_if_io_dly_0</name>\n\t\t\t\t\t\t<description>sf3_if_io_dly_0.</description>\n\t\t\t\t\t\t<addressOffset>0x5C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_dqs_do_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_dqs_di_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_dqs_oe_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_clk_out_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_cs2_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_cs_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf3_if_io_dly_1</name>\n\t\t\t\t\t\t<description>sf3_if_io_dly_1.</description>\n\t\t\t\t\t\t<addressOffset>0x60</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_io_0_do_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_io_0_di_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_io_0_oe_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf3_if_io_dly_2</name>\n\t\t\t\t\t\t<description>sf3_if_io_dly_2.</description>\n\t\t\t\t\t\t<addressOffset>0x64</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_io_1_do_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_io_1_di_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_io_1_oe_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf3_if_io_dly_3</name>\n\t\t\t\t\t\t<description>sf3_if_io_dly_3.</description>\n\t\t\t\t\t\t<addressOffset>0x68</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_io_2_do_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_io_2_di_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_io_2_oe_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf3_if_io_dly_4</name>\n\t\t\t\t\t\t<description>sf3_if_io_dly_4.</description>\n\t\t\t\t\t\t<addressOffset>0x6C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_io_3_do_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_io_3_di_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_io_3_oe_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_ctrl_2</name>\n\t\t\t\t\t\t<description>sf_ctrl_2.</description>\n\t\t\t\t\t\t<addressOffset>0x70</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_bk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_bk2_en</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_bk2_mode</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_bk_swap</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_dqs_en</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_dtr_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_pad_sel_lock</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_pad_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_ctrl_3</name>\n\t\t\t\t\t\t<description>sf_ctrl_3.</description>\n\t\t\t\t\t\t<addressOffset>0x74</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_1_ack_lat</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_cmds_wrap_q</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_cmds_wrap_mode</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_cmds_wrap_q_ini</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_cmds_bt_en</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_cmds_bt_dly</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_cmds_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_cmds_wrap_len</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_iahb_3</name>\n\t\t\t\t\t\t<description>sf_if_iahb_3.</description>\n\t\t\t\t\t\t<addressOffset>0x78</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_2_qpi_mode_en</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_2_spi_mode</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_2_cmd_en</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_2_adr_en</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_2_dmy_en</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_2_dat_en</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_2_dat_rw  </name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_2_cmd_byte</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_2_adr_byte</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_2_dmy_byte</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_iahb_4</name>\n\t\t\t\t\t\t<description>sf_if_iahb_4.</description>\n\t\t\t\t\t\t<addressOffset>0x7C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_2_cmd_buf_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_iahb_5</name>\n\t\t\t\t\t\t<description>sf_if_iahb_5.</description>\n\t\t\t\t\t\t<addressOffset>0x80</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_2_cmd_buf_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_iahb_6</name>\n\t\t\t\t\t\t<description>sf_if_iahb_6.</description>\n\t\t\t\t\t\t<addressOffset>0x84</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_3_qpi_mode_en</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_3_spi_mode</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_3_cmd_en</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_3_adr_en</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_3_cmd_byte</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_3_adr_byte</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_iahb_7</name>\n\t\t\t\t\t\t<description>sf_if_iahb_7.</description>\n\t\t\t\t\t\t<addressOffset>0x88</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_3_cmd_buf_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_iahb_8</name>\n\t\t\t\t\t\t<description>sf_if_iahb_8.</description>\n\t\t\t\t\t\t<addressOffset>0x8C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_3_cmd_buf_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_iahb_9</name>\n\t\t\t\t\t\t<description>sf_if_iahb_9.</description>\n\t\t\t\t\t\t<addressOffset>0x90</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_4_qpi_mode_en</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_4_spi_mode</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_4_cmd_en</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_4_adr_en</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_4_dmy_en</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_4_dat_en</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_4_dat_rw  </name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_4_cmd_byte</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_4_adr_byte</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_4_dmy_byte</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_iahb_10</name>\n\t\t\t\t\t\t<description>sf_if_iahb_10.</description>\n\t\t\t\t\t\t<addressOffset>0x94</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_4_cmd_buf_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_iahb_11</name>\n\t\t\t\t\t\t<description>sf_if_iahb_11.</description>\n\t\t\t\t\t\t<addressOffset>0x98</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_4_cmd_buf_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_if_iahb_12</name>\n\t\t\t\t\t\t<description>sf_if_iahb_12.</description>\n\t\t\t\t\t\t<addressOffset>0x9C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_if_read_dly_src</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_if_read_dly_en</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_if_read_dly_n</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf3_clk_out_inv_sel</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_clk_out_inv_sel</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_clk_sf_rx_inv_src</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf2_clk_sf_rx_inv_sel</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_ctrl_prot_en_rd</name>\n\t\t\t\t\t\t<description>sf_ctrl_prot_en_rd.</description>\n\t\t\t\t\t\t<addressOffset>0x100</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_dbg_dis</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_if_0_trig_wr_lock</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_ctrl_id1_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_ctrl_id0_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_ctrl_prot_en_rd</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_ctrl_prot_en</name>\n\t\t\t\t\t\t<description>sf_ctrl_prot_en.</description>\n\t\t\t\t\t\t<addressOffset>0x104</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_ctrl_id1_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_ctrl_id0_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_ctrl_prot_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r0_0</name>\n\t\t\t\t\t\t<description>sf_aes_key_r0_0.</description>\n\t\t\t\t\t\t<addressOffset>0x200</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r0_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r0_1</name>\n\t\t\t\t\t\t<description>sf_aes_key_r0_1.</description>\n\t\t\t\t\t\t<addressOffset>0x204</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r0_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r0_2</name>\n\t\t\t\t\t\t<description>sf_aes_key_r0_2.</description>\n\t\t\t\t\t\t<addressOffset>0x208</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r0_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r0_3</name>\n\t\t\t\t\t\t<description>sf_aes_key_r0_3.</description>\n\t\t\t\t\t\t<addressOffset>0x20C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r0_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r0_4</name>\n\t\t\t\t\t\t<description>sf_aes_key_r0_4.</description>\n\t\t\t\t\t\t<addressOffset>0x210</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r0_4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r0_5</name>\n\t\t\t\t\t\t<description>sf_aes_key_r0_5.</description>\n\t\t\t\t\t\t<addressOffset>0x214</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r0_5</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r0_6</name>\n\t\t\t\t\t\t<description>sf_aes_key_r0_6.</description>\n\t\t\t\t\t\t<addressOffset>0x218</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r0_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r0_7</name>\n\t\t\t\t\t\t<description>sf_aes_key_r0_7.</description>\n\t\t\t\t\t\t<addressOffset>0x21C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r0_7</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_iv_r0_w0</name>\n\t\t\t\t\t\t<description>sf_aes_iv_r0_w0.</description>\n\t\t\t\t\t\t<addressOffset>0x220</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_iv_r0_w0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_iv_r0_w1</name>\n\t\t\t\t\t\t<description>sf_aes_iv_r0_w1.</description>\n\t\t\t\t\t\t<addressOffset>0x224</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_iv_r0_w1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_iv_r0_w2</name>\n\t\t\t\t\t\t<description>sf_aes_iv_r0_w2.</description>\n\t\t\t\t\t\t<addressOffset>0x228</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_iv_r0_w2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_iv_r0_w3</name>\n\t\t\t\t\t\t<description>sf_aes_iv_r0_w3.</description>\n\t\t\t\t\t\t<addressOffset>0x22C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_iv_r0_w3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_cfg_r0</name>\n\t\t\t\t\t\t<description>sf_aes_cfg_r0.</description>\n\t\t\t\t\t\t<addressOffset>0x230</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_region_r0_lock</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_region_r0_en</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_region_r0_hw_key_en</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_region_r0_start</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_region_r0_end</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r1_0</name>\n\t\t\t\t\t\t<description>sf_aes_key_r1_0.</description>\n\t\t\t\t\t\t<addressOffset>0x300</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r1_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r1_1</name>\n\t\t\t\t\t\t<description>sf_aes_key_r1_1.</description>\n\t\t\t\t\t\t<addressOffset>0x304</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r1_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r1_2</name>\n\t\t\t\t\t\t<description>sf_aes_key_r1_2.</description>\n\t\t\t\t\t\t<addressOffset>0x308</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r1_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r1_3</name>\n\t\t\t\t\t\t<description>sf_aes_key_r1_3.</description>\n\t\t\t\t\t\t<addressOffset>0x30C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r1_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r1_4</name>\n\t\t\t\t\t\t<description>sf_aes_key_r1_4.</description>\n\t\t\t\t\t\t<addressOffset>0x310</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r1_4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r1_5</name>\n\t\t\t\t\t\t<description>sf_aes_key_r1_5.</description>\n\t\t\t\t\t\t<addressOffset>0x314</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r1_5</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r1_6</name>\n\t\t\t\t\t\t<description>sf_aes_key_r1_6.</description>\n\t\t\t\t\t\t<addressOffset>0x318</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r1_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r1_7</name>\n\t\t\t\t\t\t<description>sf_aes_key_r1_7.</description>\n\t\t\t\t\t\t<addressOffset>0x31C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r1_7</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_iv_r1_w0</name>\n\t\t\t\t\t\t<description>sf_aes_iv_r1_w0.</description>\n\t\t\t\t\t\t<addressOffset>0x320</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_iv_r1_w0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_iv_r1_w1</name>\n\t\t\t\t\t\t<description>sf_aes_iv_r1_w1.</description>\n\t\t\t\t\t\t<addressOffset>0x324</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_iv_r1_w1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_iv_r1_w2</name>\n\t\t\t\t\t\t<description>sf_aes_iv_r1_w2.</description>\n\t\t\t\t\t\t<addressOffset>0x328</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_iv_r1_w2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_iv_r1_w3</name>\n\t\t\t\t\t\t<description>sf_aes_iv_r1_w3.</description>\n\t\t\t\t\t\t<addressOffset>0x32C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_iv_r1_w3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_r1</name>\n\t\t\t\t\t\t<description>sf_aes_r1.</description>\n\t\t\t\t\t\t<addressOffset>0x330</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_r1_lock</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_r1_en</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_r1_hw_key_en</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_r1_start</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_r1_end</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r2_0</name>\n\t\t\t\t\t\t<description>sf_aes_key_r2_0.</description>\n\t\t\t\t\t\t<addressOffset>0x400</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r2_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r2_1</name>\n\t\t\t\t\t\t<description>sf_aes_key_r2_1.</description>\n\t\t\t\t\t\t<addressOffset>0x404</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r2_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r2_2</name>\n\t\t\t\t\t\t<description>sf_aes_key_r2_2.</description>\n\t\t\t\t\t\t<addressOffset>0x408</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r2_2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r2_3</name>\n\t\t\t\t\t\t<description>sf_aes_key_r2_3.</description>\n\t\t\t\t\t\t<addressOffset>0x40C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r2_3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r2_4</name>\n\t\t\t\t\t\t<description>sf_aes_key_r2_4.</description>\n\t\t\t\t\t\t<addressOffset>0x410</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r2_4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r2_5</name>\n\t\t\t\t\t\t<description>sf_aes_key_r2_5.</description>\n\t\t\t\t\t\t<addressOffset>0x414</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r2_5</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r2_6</name>\n\t\t\t\t\t\t<description>sf_aes_key_r2_6.</description>\n\t\t\t\t\t\t<addressOffset>0x418</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r2_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_key_r2_7</name>\n\t\t\t\t\t\t<description>sf_aes_key_r2_7.</description>\n\t\t\t\t\t\t<addressOffset>0x41C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_key_r2_7</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_iv_r2_w0</name>\n\t\t\t\t\t\t<description>sf_aes_iv_r2_w0.</description>\n\t\t\t\t\t\t<addressOffset>0x420</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_iv_r2_w0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_iv_r2_w1</name>\n\t\t\t\t\t\t<description>sf_aes_iv_r2_w1.</description>\n\t\t\t\t\t\t<addressOffset>0x424</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_iv_r2_w1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_iv_r2_w2</name>\n\t\t\t\t\t\t<description>sf_aes_iv_r2_w2.</description>\n\t\t\t\t\t\t<addressOffset>0x428</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_iv_r2_w2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_iv_r2_w3</name>\n\t\t\t\t\t\t<description>sf_aes_iv_r2_w3.</description>\n\t\t\t\t\t\t<addressOffset>0x42C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_iv_r2_w3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_aes_r2</name>\n\t\t\t\t\t\t<description>sf_aes_r2.</description>\n\t\t\t\t\t\t<addressOffset>0x430</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_r2_lock</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_r2_en</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_r2_hw_key_en</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_r2_start</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_aes_r2_end</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_id0_offset</name>\n\t\t\t\t\t\t<description>sf_id0_offset.</description>\n\t\t\t\t\t\t<addressOffset>0x434</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_id0_offset</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_id1_offset</name>\n\t\t\t\t\t\t<description>sf_id1_offset.</description>\n\t\t\t\t\t\t<addressOffset>0x438</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_id1_offset</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_bk2_id0_offset</name>\n\t\t\t\t\t\t<description>sf_bk2_id0_offset.</description>\n\t\t\t\t\t\t<addressOffset>0x43C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_bk2_id0_offset</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>sf_bk2_id1_offset</name>\n\t\t\t\t\t\t<description>sf_bk2_id1_offset.</description>\n\t\t\t\t\t\t<addressOffset>0x440</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sf_bk2_id1_offset</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>dma</name>\n\t\t\t\t<description>dma.</description>\n\t\t\t\t<baseAddress>0x40007000</baseAddress>\n\t\t\t\t<groupName>dma</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_IntStatus</name>\n\t\t\t\t\t\t<description>DMA_IntStatus.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>IntStatus</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_IntTCStatus</name>\n\t\t\t\t\t\t<description>DMA_IntTCStatus.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>IntTCStatus</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_IntTCClear</name>\n\t\t\t\t\t\t<description>DMA_IntTCClear.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>IntTCClear</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_IntErrorStatus</name>\n\t\t\t\t\t\t<description>DMA_IntErrorStatus.</description>\n\t\t\t\t\t\t<addressOffset>0xC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>IntErrorStatus</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_IntErrClr</name>\n\t\t\t\t\t\t<description>DMA_IntErrClr.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>IntErrClr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_RawIntTCStatus</name>\n\t\t\t\t\t\t<description>DMA_RawIntTCStatus.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RawIntTCStatus</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_RawIntErrorStatus</name>\n\t\t\t\t\t\t<description>DMA_RawIntErrorStatus.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RawIntErrorStatus</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_EnbldChns</name>\n\t\t\t\t\t\t<description>DMA_EnbldChns.</description>\n\t\t\t\t\t\t<addressOffset>0x1C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>EnabledChannels</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_SoftBReq</name>\n\t\t\t\t\t\t<description>DMA_SoftBReq.</description>\n\t\t\t\t\t\t<addressOffset>0x20</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SoftBReq</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_SoftSReq</name>\n\t\t\t\t\t\t<description>DMA_SoftSReq.</description>\n\t\t\t\t\t\t<addressOffset>0x24</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SoftSReq</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_SoftLBReq</name>\n\t\t\t\t\t\t<description>DMA_SoftLBReq.</description>\n\t\t\t\t\t\t<addressOffset>0x28</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SoftLBReq</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_SoftLSReq</name>\n\t\t\t\t\t\t<description>DMA_SoftLSReq.</description>\n\t\t\t\t\t\t<addressOffset>0x2C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SoftLSReq</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_Top_Config</name>\n\t\t\t\t\t\t<description>DMA_Top_Config.</description>\n\t\t\t\t\t\t<addressOffset>0x30</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>M</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>E</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_Sync</name>\n\t\t\t\t\t\t<description>DMA_Sync.</description>\n\t\t\t\t\t\t<addressOffset>0x34</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DMA_Sync</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C0SrcAddr</name>\n\t\t\t\t\t\t<description>DMA_C0SrcAddr.</description>\n\t\t\t\t\t\t<addressOffset>0x100</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SrcAddr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C0DstAddr</name>\n\t\t\t\t\t\t<description>DMA_C0DstAddr.</description>\n\t\t\t\t\t\t<addressOffset>0x104</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DstAddr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C0LLI</name>\n\t\t\t\t\t\t<description>DMA_C0LLI.</description>\n\t\t\t\t\t\t<addressOffset>0x108</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>LLI</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C0Control</name>\n\t\t\t\t\t\t<description>DMA_C0Control.</description>\n\t\t\t\t\t\t<addressOffset>0x10C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>I</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>Prot</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DI</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SI</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SLargerD</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>fix_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DWidth</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SWidth</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dst_add_mode</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DBSize</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dst_min_mode</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SBSize</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TransferSize</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C0Config</name>\n\t\t\t\t\t\t<description>DMA_C0Config.</description>\n\t\t\t\t\t\t<addressOffset>0x110</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>LLICounter</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>H</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>A</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>L</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ITC</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>IE</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>FlowCntrl</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DstPeripheral</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SrcPeripheral</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>E</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C1SrcAddr</name>\n\t\t\t\t\t\t<description>DMA_C1SrcAddr.</description>\n\t\t\t\t\t\t<addressOffset>0x200</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SrcAddr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C1DstAddr</name>\n\t\t\t\t\t\t<description>DMA_C1DstAddr.</description>\n\t\t\t\t\t\t<addressOffset>0x204</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DstAddr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C1LLI</name>\n\t\t\t\t\t\t<description>DMA_C1LLI.</description>\n\t\t\t\t\t\t<addressOffset>0x208</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>LLI</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C1Control</name>\n\t\t\t\t\t\t<description>DMA_C1Control.</description>\n\t\t\t\t\t\t<addressOffset>0x20C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>I</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>Prot</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DI</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SI</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>fix_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DWidth</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SWidth</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dst_add_mode</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DBSize</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dst_min_mode</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SBSize</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TransferSize</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C1Config</name>\n\t\t\t\t\t\t<description>DMA_C1Config.</description>\n\t\t\t\t\t\t<addressOffset>0x210</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>H</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>A</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>L</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ITC</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>IE</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>FlowCntrl</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DstPeripheral</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SrcPeripheral</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>E</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C2SrcAddr</name>\n\t\t\t\t\t\t<description>DMA_C2SrcAddr.</description>\n\t\t\t\t\t\t<addressOffset>0x300</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SrcAddr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C2DstAddr</name>\n\t\t\t\t\t\t<description>DMA_C2DstAddr.</description>\n\t\t\t\t\t\t<addressOffset>0x304</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DstAddr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C2LLI</name>\n\t\t\t\t\t\t<description>DMA_C2LLI.</description>\n\t\t\t\t\t\t<addressOffset>0x308</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>LLI</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C2Control</name>\n\t\t\t\t\t\t<description>DMA_C2Control.</description>\n\t\t\t\t\t\t<addressOffset>0x30C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>I</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>Prot</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DI</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SI</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>fix_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DWidth</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SWidth</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dst_add_mode</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DBSize</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dst_min_mode</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SBSize</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TransferSize</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C2Config</name>\n\t\t\t\t\t\t<description>DMA_C2Config.</description>\n\t\t\t\t\t\t<addressOffset>0x310</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>H</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>A</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>L</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ITC</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>IE</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>FlowCntrl</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DstPeripheral</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SrcPeripheral</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>E</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C3SrcAddr</name>\n\t\t\t\t\t\t<description>DMA_C3SrcAddr.</description>\n\t\t\t\t\t\t<addressOffset>0x400</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SrcAddr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C3DstAddr</name>\n\t\t\t\t\t\t<description>DMA_C3DstAddr.</description>\n\t\t\t\t\t\t<addressOffset>0x404</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DstAddr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C3LLI</name>\n\t\t\t\t\t\t<description>DMA_C3LLI.</description>\n\t\t\t\t\t\t<addressOffset>0x408</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>LLI</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C3Control</name>\n\t\t\t\t\t\t<description>DMA_C3Control.</description>\n\t\t\t\t\t\t<addressOffset>0x40C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>I</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>Prot</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DI</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SI</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>fix_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DWidth</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SWidth</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dst_add_mode</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DBSize</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dst_min_mode</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SBSize</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TransferSize</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C3Config</name>\n\t\t\t\t\t\t<description>DMA_C3Config.</description>\n\t\t\t\t\t\t<addressOffset>0x410</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>H</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>A</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>L</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ITC</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>IE</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>FlowCntrl</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DstPeripheral</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SrcPeripheral</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>E</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C4SrcAddr</name>\n\t\t\t\t\t\t<description>DMA_C4SrcAddr.</description>\n\t\t\t\t\t\t<addressOffset>0x500</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SrcAddr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C4DstAddr</name>\n\t\t\t\t\t\t<description>DMA_C4DstAddr.</description>\n\t\t\t\t\t\t<addressOffset>0x504</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DstAddr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C4LLI</name>\n\t\t\t\t\t\t<description>DMA_C4LLI.</description>\n\t\t\t\t\t\t<addressOffset>0x508</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>LLI</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C4Control</name>\n\t\t\t\t\t\t<description>DMA_C4Control.</description>\n\t\t\t\t\t\t<addressOffset>0x50C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>I</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>Prot</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DI</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SI</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>fix_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DWidth</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SWidth</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dst_add_mode</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DBSize</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dst_min_mode</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SBSize</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TransferSize</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C4Config</name>\n\t\t\t\t\t\t<description>DMA_C4Config.</description>\n\t\t\t\t\t\t<addressOffset>0x510</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>H</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>A</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>L</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ITC</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>IE</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>FlowCntrl</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DstPeripheral</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SrcPeripheral</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>E</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C5SrcAddr</name>\n\t\t\t\t\t\t<description>DMA_C5SrcAddr.</description>\n\t\t\t\t\t\t<addressOffset>0x600</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SrcAddr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C5DstAddr</name>\n\t\t\t\t\t\t<description>DMA_C5DstAddr.</description>\n\t\t\t\t\t\t<addressOffset>0x604</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DstAddr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C5LLI</name>\n\t\t\t\t\t\t<description>DMA_C5LLI.</description>\n\t\t\t\t\t\t<addressOffset>0x608</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>LLI</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C5Control</name>\n\t\t\t\t\t\t<description>DMA_C5Control.</description>\n\t\t\t\t\t\t<addressOffset>0x60C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>I</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>Prot</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DI</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SI</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>fix_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DWidth</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SWidth</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dst_add_mode</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DBSize</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dst_min_mode</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SBSize</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TransferSize</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C5Config</name>\n\t\t\t\t\t\t<description>DMA_C5Config.</description>\n\t\t\t\t\t\t<addressOffset>0x610</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>H</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>A</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>L</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ITC</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>IE</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>FlowCntrl</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DstPeripheral</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SrcPeripheral</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>E</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C6SrcAddr</name>\n\t\t\t\t\t\t<description>DMA_C6SrcAddr.</description>\n\t\t\t\t\t\t<addressOffset>0x700</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SrcAddr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C6DstAddr</name>\n\t\t\t\t\t\t<description>DMA_C6DstAddr.</description>\n\t\t\t\t\t\t<addressOffset>0x704</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DstAddr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C6LLI</name>\n\t\t\t\t\t\t<description>DMA_C6LLI.</description>\n\t\t\t\t\t\t<addressOffset>0x708</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>LLI</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C6Control</name>\n\t\t\t\t\t\t<description>DMA_C6Control.</description>\n\t\t\t\t\t\t<addressOffset>0x70C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>I</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>Prot</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DI</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SI</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>fix_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DWidth</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SWidth</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dst_add_mode</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DBSize</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dst_min_mode</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SBSize</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TransferSize</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C6Config</name>\n\t\t\t\t\t\t<description>DMA_C6Config.</description>\n\t\t\t\t\t\t<addressOffset>0x710</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>H</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>A</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>L</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ITC</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>IE</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>FlowCntrl</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DstPeripheral</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SrcPeripheral</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>E</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C7SrcAddr</name>\n\t\t\t\t\t\t<description>DMA_C7SrcAddr.</description>\n\t\t\t\t\t\t<addressOffset>0x800</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SrcAddr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C7DstAddr</name>\n\t\t\t\t\t\t<description>DMA_C7DstAddr.</description>\n\t\t\t\t\t\t<addressOffset>0x804</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DstAddr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C7LLI</name>\n\t\t\t\t\t\t<description>DMA_C7LLI.</description>\n\t\t\t\t\t\t<addressOffset>0x808</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>LLI</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C7Control</name>\n\t\t\t\t\t\t<description>DMA_C7Control.</description>\n\t\t\t\t\t\t<addressOffset>0x80C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>I</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>Prot</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DI</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SI</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>fix_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DWidth</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SWidth</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dst_add_mode</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DBSize</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dst_min_mode</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SBSize</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TransferSize</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>DMA_C7Config</name>\n\t\t\t\t\t\t<description>DMA_C7Config.</description>\n\t\t\t\t\t\t<addressOffset>0x810</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>H</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>A</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>L</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ITC</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>IE</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>FlowCntrl</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>DstPeripheral</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SrcPeripheral</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>E</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>emac</name>\n\t\t\t\t<description>emac.</description>\n\t\t\t\t<baseAddress>0x4000D000</baseAddress>\n\t\t\t\t<groupName>emac</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>MODE</name>\n\t\t\t\t\t\t<description>MODE.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_23_18</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RMII_EN</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RECSMALL</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>PAD</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>HUGEN</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>CRCEN</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_12_11</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>FULLD</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_9_7</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>IFG</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>PRO</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_4</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>BRO</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>NOPRE</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TXEN</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RXEN</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>INT_SOURCE</name>\n\t\t\t\t\t\t<description>INT_SOURCE.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RXC</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TXC</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>BUSY</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RXE</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RXB</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TXE</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TXB</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>INT_MASK</name>\n\t\t\t\t\t\t<description>INT_MASK.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RXC_M</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TXC_M</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>BUSY_M</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RXE_M</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RXB_M</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TXE_M</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TXB_M</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>IPGT</name>\n\t\t\t\t\t\t<description>IPGT.</description>\n\t\t\t\t\t\t<addressOffset>0xC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>IPGT</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>PACKETLEN</name>\n\t\t\t\t\t\t<description>PACKETLEN.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>MINFL</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>MAXFL</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>COLLCONFIG</name>\n\t\t\t\t\t\t<description>COLLCONFIG.</description>\n\t\t\t\t\t\t<addressOffset>0x1C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>MAXRET</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>COLLVALID</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TX_BD_NUM</name>\n\t\t\t\t\t\t<description>TX_BD_NUM.</description>\n\t\t\t\t\t\t<addressOffset>0x20</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RXBDPTR</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TXBDPTR</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TXBDNUM</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>MIIMODE</name>\n\t\t\t\t\t\t<description>MIIMODE.</description>\n\t\t\t\t\t\t<addressOffset>0x28</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>MIINOPRE</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>CLKDIV</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>MIICOMMAND</name>\n\t\t\t\t\t\t<description>MIICOMMAND.</description>\n\t\t\t\t\t\t<addressOffset>0x2C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>WCTRLDATA</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RSTAT</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>SCANSTAT</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>MIIADDRESS</name>\n\t\t\t\t\t\t<description>MIIADDRESS.</description>\n\t\t\t\t\t\t<addressOffset>0x30</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>RGAD</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>FIAD</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>MIITX_DATA</name>\n\t\t\t\t\t\t<description>MIITX_DATA.</description>\n\t\t\t\t\t\t<addressOffset>0x34</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>CTRLDATA</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>MIIRX_DATA</name>\n\t\t\t\t\t\t<description>MIIRX_DATA.</description>\n\t\t\t\t\t\t<addressOffset>0x38</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>PRSD</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>MIISTATUS</name>\n\t\t\t\t\t\t<description>MIISTATUS.</description>\n\t\t\t\t\t\t<addressOffset>0x3C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>MIIM_BUSY</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>MIIM_LINKFAIL</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>MAC_ADDR0</name>\n\t\t\t\t\t\t<description>MAC_ADDR0.</description>\n\t\t\t\t\t\t<addressOffset>0x40</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>MAC_B2</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>MAC_B3</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>MAC_B4</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>MAC_B5</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>MAC_ADDR1</name>\n\t\t\t\t\t\t<description>MAC_ADDR1.</description>\n\t\t\t\t\t\t<addressOffset>0x44</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>MAC_B0</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>MAC_B1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HASH0_ADDR</name>\n\t\t\t\t\t\t<description>HASH0_ADDR.</description>\n\t\t\t\t\t\t<addressOffset>0x48</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>HASH0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HASH1_ADDR</name>\n\t\t\t\t\t\t<description>HASH1_ADDR.</description>\n\t\t\t\t\t\t<addressOffset>0x4C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>HASH1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>TXCTRL</name>\n\t\t\t\t\t\t<description>TXCTRL.</description>\n\t\t\t\t\t\t<addressOffset>0x50</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TXPAUSERQ</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>TXPAUSETV</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>usb</name>\n\t\t\t\t<description>usb.</description>\n\t\t\t\t<baseAddress>0x4000D800</baseAddress>\n\t\t\t\t<groupName>usb</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>usb_config</name>\n\t\t\t\t\t\t<description>usb_config.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_usb_ep0_sw_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_usb_ep0_sw_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_usb_ep0_sw_nack_out</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_usb_ep0_sw_nack_in</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_usb_ep0_sw_stall</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_usb_ep0_sw_size</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_usb_ep0_sw_addr</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_usb_ep0_sw_ctrl</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_usb_rom_dct_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_usb_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>usb_lpm_config</name>\n\t\t\t\t\t\t<description>usb_lpm_config.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_lpm</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_lpm_attr</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_lpm_resp</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_lpm_resp_upd</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_lpm_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>usb_resume_config</name>\n\t\t\t\t\t\t<description>usb_resume_config.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_res_force</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_res_trig</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_res_width</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>usb_setup_data_0</name>\n\t\t\t\t\t\t<description>usb_setup_data_0.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_setup_data_b3</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_setup_data_b2</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_setup_data_b1</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_setup_data_b0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>usb_setup_data_1</name>\n\t\t\t\t\t\t<description>usb_setup_data_1.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_setup_data_b7</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_setup_data_b6</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_setup_data_b5</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_setup_data_b4</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>usb_frame_no</name>\n\t\t\t\t\t\t<description>usb_frame_no.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_ep_no</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_pid</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_frame_no</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>usb_error</name>\n\t\t\t\t\t\t<description>usb_error.</description>\n\t\t\t\t\t\t<addressOffset>0x1C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>crc16_err</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>crc5_err</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pid_cks_err</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pid_seq_err</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ivld_ep_err</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xfer_to_err</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>utmi_rx_err</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>usb_int_en</name>\n\t\t\t\t\t\t<description>USB interrupt enable</description>\n\t\t\t\t\t\t<addressOffset>0x20</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_usb_err_en</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_sof_3ms_en</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_lpm_pkt_en</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_lpm_wkup_en</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_27_24</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep7_done_en</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep7_cmd_en</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep6_done_en</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep6_cmd_en</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep5_done_en</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep5_cmd_en</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep4_done_en</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep4_cmd_en</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep3_done_en</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep3_cmd_en</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep2_done_en</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep2_cmd_en</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep1_done_en</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep1_cmd_en</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_out_done_en</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_out_cmd_en</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_in_done_en</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_in_cmd_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_setup_done_en</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_setup_cmd_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_get_dct_cmd_en</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_vbus_tgl_en</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_usb_reset_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_sof_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>usb_int_sts</name>\n\t\t\t\t\t\t<description>USB interrupt status</description>\n\t\t\t\t\t\t<addressOffset>0x24</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_err_int</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sof_3ms_int</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>lpm_pkt_int</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>lpm_wkup_int</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_27_24</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_done_int</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_cmd_int</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_done_int</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_cmd_int</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_done_int</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_cmd_int</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_done_int</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_cmd_int</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_done_int</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_cmd_int</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_done_int</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_cmd_int</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_done_int</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_cmd_int</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_out_done_int</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_out_cmd_int</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_in_done_int</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_in_cmd_int</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_setup_done_int</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_setup_cmd_int</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>get_dct_cmd_int</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>vbus_tgl_int</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>usb_reset_int</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sof_int</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>usb_int_mask</name>\n\t\t\t\t\t\t<description>USB interrupt mask</description>\n\t\t\t\t\t\t<addressOffset>0x28</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_usb_err_mask</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_sof_3ms_mask</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_lpm_pkt_mask</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_lpm_wkup_mask</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_27_24</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep7_done_mask</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep7_cmd_mask</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep6_done_mask</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep6_cmd_mask</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep5_done_mask</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep5_cmd_mask</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep4_done_mask</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep4_cmd_mask</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep3_done_mask</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep3_cmd_mask</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep2_done_mask</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep2_cmd_mask</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep1_done_mask</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep1_cmd_mask</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_out_done_mask</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_out_cmd_mask</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_in_done_mask</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_in_cmd_mask</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_setup_done_mask</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_setup_cmd_mask</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_get_dct_cmd_mask</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_vbus_tgl_mask</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_usb_reset_mask</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_sof_mask</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>usb_int_clear</name>\n\t\t\t\t\t\t<description>USB interrupt clear</description>\n\t\t\t\t\t\t<addressOffset>0x2C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_usb_err_clr</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_sof_3ms_clr</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_lpm_pkt_clr</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_lpm_wkup_clr</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_27_24</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep7_done_clr</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep7_cmd_clr</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep6_done_clr</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep6_cmd_clr</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep5_done_clr</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep5_cmd_clr</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep4_done_clr</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep4_cmd_clr</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep3_done_clr</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep3_cmd_clr</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep2_done_clr</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep2_cmd_clr</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep1_done_clr</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep1_cmd_clr</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_out_done_clr</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_out_cmd_clr</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_in_done_clr</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_in_cmd_clr</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_setup_done_clr</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep0_setup_cmd_clr</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_get_dct_cmd_clr</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_vbus_tgl_clr</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_usb_reset_clr</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_sof_clr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep1_config</name>\n\t\t\t\t\t\t<description>ep1_config.</description>\n\t\t\t\t\t\t<addressOffset>0x40</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_ep1_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep1_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep1_nack</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep1_stall</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep1_type</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep1_dir</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep1_size</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep2_config</name>\n\t\t\t\t\t\t<description>ep2_config.</description>\n\t\t\t\t\t\t<addressOffset>0x44</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_ep2_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep2_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep2_nack</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep2_stall</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep2_type</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep2_dir</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep2_size</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep3_config</name>\n\t\t\t\t\t\t<description>ep3_config.</description>\n\t\t\t\t\t\t<addressOffset>0x48</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_ep3_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep3_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep3_nack</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep3_stall</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep3_type</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep3_dir</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep3_size</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep4_config</name>\n\t\t\t\t\t\t<description>ep4_config.</description>\n\t\t\t\t\t\t<addressOffset>0x4C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_ep4_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep4_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep4_nack</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep4_stall</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep4_type</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep4_dir</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep4_size</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep5_config</name>\n\t\t\t\t\t\t<description>ep5_config.</description>\n\t\t\t\t\t\t<addressOffset>0x50</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_ep5_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep5_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep5_nack</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep5_stall</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep5_type</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep5_dir</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep5_size</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep6_config</name>\n\t\t\t\t\t\t<description>ep6_config.</description>\n\t\t\t\t\t\t<addressOffset>0x54</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_ep6_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep6_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep6_nack</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep6_stall</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep6_type</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep6_dir</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep6_size</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep7_config</name>\n\t\t\t\t\t\t<description>ep7_config.</description>\n\t\t\t\t\t\t<addressOffset>0x58</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_ep7_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep7_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep7_nack</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep7_stall</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep7_type</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep7_dir</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_ep7_size</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep0_fifo_config</name>\n\t\t\t\t\t\t<description>ep0_fifo_config.</description>\n\t\t\t\t\t\t<addressOffset>0x100</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_rx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_rx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_tx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_tx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_rx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_tx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_dma_rx_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_dma_tx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep0_fifo_status</name>\n\t\t\t\t\t\t<description>ep0_fifo_status.</description>\n\t\t\t\t\t\t<addressOffset>0x104</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_rx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_rx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_rx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_tx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_tx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_tx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep0_tx_fifo_wdata</name>\n\t\t\t\t\t\t<description>ep0_tx_fifo_wdata.</description>\n\t\t\t\t\t\t<addressOffset>0x108</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_tx_fifo_wdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep0_rx_fifo_rdata</name>\n\t\t\t\t\t\t<description>ep0_rx_fifo_rdata.</description>\n\t\t\t\t\t\t<addressOffset>0x10C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep0_rx_fifo_rdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep1_fifo_config</name>\n\t\t\t\t\t\t<description>ep1_fifo_config.</description>\n\t\t\t\t\t\t<addressOffset>0x110</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_rx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_rx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_tx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_tx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_rx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_tx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_dma_rx_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_dma_tx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep1_fifo_status</name>\n\t\t\t\t\t\t<description>ep1_fifo_status.</description>\n\t\t\t\t\t\t<addressOffset>0x114</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_rx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_rx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_rx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_tx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_tx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_tx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep1_tx_fifo_wdata</name>\n\t\t\t\t\t\t<description>ep1_tx_fifo_wdata.</description>\n\t\t\t\t\t\t<addressOffset>0x118</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_tx_fifo_wdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep1_rx_fifo_rdata</name>\n\t\t\t\t\t\t<description>ep1_rx_fifo_rdata.</description>\n\t\t\t\t\t\t<addressOffset>0x11C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep1_rx_fifo_rdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep2_fifo_config</name>\n\t\t\t\t\t\t<description>ep2_fifo_config.</description>\n\t\t\t\t\t\t<addressOffset>0x120</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_rx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_rx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_tx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_tx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_rx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_tx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_dma_rx_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_dma_tx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep2_fifo_status</name>\n\t\t\t\t\t\t<description>ep2_fifo_status.</description>\n\t\t\t\t\t\t<addressOffset>0x124</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_rx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_rx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_rx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_tx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_tx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_tx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep2_tx_fifo_wdata</name>\n\t\t\t\t\t\t<description>ep2_tx_fifo_wdata.</description>\n\t\t\t\t\t\t<addressOffset>0x128</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_tx_fifo_wdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep2_rx_fifo_rdata</name>\n\t\t\t\t\t\t<description>ep2_rx_fifo_rdata.</description>\n\t\t\t\t\t\t<addressOffset>0x12C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep2_rx_fifo_rdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep3_fifo_config</name>\n\t\t\t\t\t\t<description>ep3_fifo_config.</description>\n\t\t\t\t\t\t<addressOffset>0x130</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_rx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_rx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_tx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_tx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_rx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_tx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_dma_rx_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_dma_tx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep3_fifo_status</name>\n\t\t\t\t\t\t<description>ep3_fifo_status.</description>\n\t\t\t\t\t\t<addressOffset>0x134</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_rx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_rx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_rx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_tx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_tx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_tx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep3_tx_fifo_wdata</name>\n\t\t\t\t\t\t<description>ep3_tx_fifo_wdata.</description>\n\t\t\t\t\t\t<addressOffset>0x138</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_tx_fifo_wdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep3_rx_fifo_rdata</name>\n\t\t\t\t\t\t<description>ep3_rx_fifo_rdata.</description>\n\t\t\t\t\t\t<addressOffset>0x13C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep3_rx_fifo_rdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep4_fifo_config</name>\n\t\t\t\t\t\t<description>ep4_fifo_config.</description>\n\t\t\t\t\t\t<addressOffset>0x140</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_rx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_rx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_tx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_tx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_rx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_tx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_dma_rx_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_dma_tx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep4_fifo_status</name>\n\t\t\t\t\t\t<description>ep4_fifo_status.</description>\n\t\t\t\t\t\t<addressOffset>0x144</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_rx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_rx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_rx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_tx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_tx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_tx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep4_tx_fifo_wdata</name>\n\t\t\t\t\t\t<description>ep4_tx_fifo_wdata.</description>\n\t\t\t\t\t\t<addressOffset>0x148</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_tx_fifo_wdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep4_rx_fifo_rdata</name>\n\t\t\t\t\t\t<description>ep4_rx_fifo_rdata.</description>\n\t\t\t\t\t\t<addressOffset>0x14C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep4_rx_fifo_rdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep5_fifo_config</name>\n\t\t\t\t\t\t<description>ep5_fifo_config.</description>\n\t\t\t\t\t\t<addressOffset>0x150</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_rx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_rx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_tx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_tx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_rx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_tx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_dma_rx_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_dma_tx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep5_fifo_status</name>\n\t\t\t\t\t\t<description>ep5_fifo_status.</description>\n\t\t\t\t\t\t<addressOffset>0x154</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_rx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_rx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_rx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_tx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_tx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_tx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep5_tx_fifo_wdata</name>\n\t\t\t\t\t\t<description>ep5_tx_fifo_wdata.</description>\n\t\t\t\t\t\t<addressOffset>0x158</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_tx_fifo_wdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep5_rx_fifo_rdata</name>\n\t\t\t\t\t\t<description>ep5_rx_fifo_rdata.</description>\n\t\t\t\t\t\t<addressOffset>0x15C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep5_rx_fifo_rdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep6_fifo_config</name>\n\t\t\t\t\t\t<description>ep6_fifo_config.</description>\n\t\t\t\t\t\t<addressOffset>0x160</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_rx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_rx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_tx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_tx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_rx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_tx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_dma_rx_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_dma_tx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep6_fifo_status</name>\n\t\t\t\t\t\t<description>ep6_fifo_status.</description>\n\t\t\t\t\t\t<addressOffset>0x164</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_rx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_rx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_rx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_tx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_tx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_tx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep6_tx_fifo_wdata</name>\n\t\t\t\t\t\t<description>ep6_tx_fifo_wdata.</description>\n\t\t\t\t\t\t<addressOffset>0x168</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_tx_fifo_wdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep6_rx_fifo_rdata</name>\n\t\t\t\t\t\t<description>ep6_rx_fifo_rdata.</description>\n\t\t\t\t\t\t<addressOffset>0x16C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep6_rx_fifo_rdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep7_fifo_config</name>\n\t\t\t\t\t\t<description>ep7_fifo_config.</description>\n\t\t\t\t\t\t<addressOffset>0x170</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_rx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_rx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_tx_fifo_underflow</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_tx_fifo_overflow</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_rx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_tx_fifo_clr</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_dma_rx_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_dma_tx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep7_fifo_status</name>\n\t\t\t\t\t\t<description>ep7_fifo_status.</description>\n\t\t\t\t\t\t<addressOffset>0x174</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_rx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_rx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_rx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_tx_fifo_full</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_tx_fifo_empty</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_tx_fifo_cnt</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep7_tx_fifo_wdata</name>\n\t\t\t\t\t\t<description>ep7_tx_fifo_wdata.</description>\n\t\t\t\t\t\t<addressOffset>0x178</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_tx_fifo_wdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ep7_rx_fifo_rdata</name>\n\t\t\t\t\t\t<description>ep7_rx_fifo_rdata.</description>\n\t\t\t\t\t\t<addressOffset>0x17C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ep7_rx_fifo_rdata</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>rsvd_0</name>\n\t\t\t\t\t\t<description>rsvd_0.</description>\n\t\t\t\t\t\t<addressOffset>0x1F0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>rsvd_1</name>\n\t\t\t\t\t\t<description>rsvd_1.</description>\n\t\t\t\t\t\t<addressOffset>0x1F4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rsvd_1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>xcvr_if_config</name>\n\t\t\t\t\t\t<description>xcvr_if_config.</description>\n\t\t\t\t\t\t<addressOffset>0x1FC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sts_vbus_det</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_xcvr_om_rx_dn</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_xcvr_om_rx_dp</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_xcvr_om_rx_d</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_xcvr_om_rx_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_xcvr_force_rx_dn</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_xcvr_force_rx_dp</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_xcvr_force_rx_d</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_xcvr_force_rx_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_xcvr_force_tx_dn</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_xcvr_force_tx_dp</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_xcvr_force_tx_oe</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_xcvr_force_tx_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>pds</name>\n\t\t\t\t<description>pds.</description>\n\t\t\t\t<baseAddress>0x4000E000</baseAddress>\n\t\t\t\t<groupName>pds</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>PDS_CTL</name>\n\t\t\t\t\t\t<description>PDS_CTL.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_ctrl_pll</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_ctrl_rf</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_ldo_vol</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_ram_clk_en</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_pd_ldo11</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_np_wfi_mask</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_ram_lp_with_clk_en</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_ldo_vsel_en</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_rc32m_off_dis</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_rst_soc_en</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_soc_enb_force_on</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_pd_xtal</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_pwr_off</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_wait_xtal_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_iso_en</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_sw_pu_flash</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_mem_stby</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_gate_clk</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_ctrl_pu_flash</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_ctrl_gpio_ie_pu_pd</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_pd_bg_sys</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_pd_dcdc18</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_wifi_pds_save_state</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_xtal_force_off</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_sleep_forever</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pds_start_ps</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>PDS_TIME1</name>\n\t\t\t\t\t\t<description>PDS_TIME1.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_sleep_duration</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>PDS_INT</name>\n\t\t\t\t\t\t<description>PDS_INT.</description>\n\t\t\t\t\t\t<addressOffset>0xC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ro_pds_wakeup_event</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_wakeup_src_en</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_int_clr</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_pll_done_int_mask</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_rf_done_int_mask</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_wake_int_mask</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pds_clr_reset_event</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pds_reset_event</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ro_pds_pll_done_int</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ro_pds_rf_done_int</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ro_pds_wake_int</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>PDS_CTL2</name>\n\t\t\t\t\t\t<description>PDS_CTL2.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_usb_gate_clk</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_bz_gate_clk</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_np_gate_clk</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_usb_mem_stby</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_bz_mem_stby</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_np_mem_stby</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_usb_pds_rst</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_bz_pds_rst</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_np_pds_rst</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_usb_iso_en</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_bz_iso_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_np_iso_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_usb_pwr_off</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_bz_pwr_off</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_np_pwr_off</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>PDS_CTL3</name>\n\t\t\t\t\t\t<description>PDS_CTL3.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_misc_iso_en</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_usb_iso_en</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_ble_iso_en</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_bz_iso_en</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_np_iso_en</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_ble_gate_clk</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_misc_gate_clk</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_ble_mem_stby</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_misc_mem_stby</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_ble_pds_rst</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_misc_pds_rst</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_ble_iso_en</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_ble_pwr_off</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_force_misc_pwr_off</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>PDS_CTL4</name>\n\t\t\t\t\t\t<description>PDS_CTL4.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_misc_dig_pwr_off</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_misc_ana_pwr_off</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_misc_gate_clk</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_misc_mem_stby</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_misc_reset</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_misc_pwr_off</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_usb_gate_clk</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_usb_mem_stby</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_usb_reset</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_usb_pwr_off</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_ble_gate_clk</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_ble_mem_stby</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_ble_reset</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_ble_pwr_off</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_bz_gate_clk</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_bz_mem_stby</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_bz_reset</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_bz_pwr_off</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_np_gate_clk</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_np_mem_stby</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_np_reset</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_np_pwr_off</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pds_stat</name>\n\t\t\t\t\t\t<description>pds_stat.</description>\n\t\t\t\t\t\t<addressOffset>0x1C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ro_pds_pll_state</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ro_pds_rf_state</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ro_pds_state</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pds_ram1</name>\n\t\t\t\t\t\t<description>pds_ram1.</description>\n\t\t\t\t\t\t<addressOffset>0x20</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_ram_pgen</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_ram_ret2n</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_ram_ret1n</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pds_gpio_set_pu_pd</name>\n\t\t\t\t\t\t<description>pds_gpio_set_pu_pd.</description>\n\t\t\t\t\t\t<addressOffset>0x30</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_gpio_28_23_pu</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_gpio_28_23_pd</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_gpio_22_17_pu</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>cr_pds_gpio_22_17_pd</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pds_gpio_int</name>\n\t\t\t\t\t\t<description>pds_gpio_int.</description>\n\t\t\t\t\t\t<addressOffset>0x40</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pds_gpio_int_select</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pds_gpio_int_mode</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pds_gpio_int_clr</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pds_gpio_int_stat</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pds_gpio_int_mask</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>rc32m_ctrl0</name>\n\t\t\t\t\t\t<description>rc32m_ctrl0.</description>\n\t\t\t\t\t\t<addressOffset>0x300</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_code_fr_ext</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_pd</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_cal_en</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_ext_code_en</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_refclk_half</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_allow_cal</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_dig_code_fr_cal</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_cal_precharge</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_cal_div</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_cal_inprogress</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_cal_done</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>rc32m_ctrl1</name>\n\t\t\t\t\t\t<description>rc32m_ctrl1.</description>\n\t\t\t\t\t\t<addressOffset>0x304</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_reserved</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_clk_force_on</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_clk_inv</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_clk_soft_rst</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_soft_rst</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32m_test_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>pu_rst_clkpll</name>\n\t\t\t\t\t\t<description>pu_rst_clkpll.</description>\n\t\t\t\t\t\t<addressOffset>0x400</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_clkpll</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_clkpll_sfreg</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_pu_cp</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_pu_pfd</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_pu_clamp_op</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_pu_fbdv</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_pu_postdiv</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_reset_refdiv</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_reset_fbdv</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_reset_postdiv</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_sdm_reset</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>clkpll_top_ctrl</name>\n\t\t\t\t\t\t<description>clkpll_top_ctrl.</description>\n\t\t\t\t\t\t<addressOffset>0x404</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_resv</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_vg11_sel</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_refclk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_xtal_rc32m_sel</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_refdiv_ratio</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_postdiv</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>clkpll_cp</name>\n\t\t\t\t\t\t<description>clkpll_cp.</description>\n\t\t\t\t\t\t<addressOffset>0x408</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_cp_opamp_en</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_cp_startup_en</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_int_frac_sw</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_icp_1u</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_icp_5u</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_sel_cp_bias</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>clkpll_rz</name>\n\t\t\t\t\t\t<description>clkpll_rz.</description>\n\t\t\t\t\t\t<addressOffset>0x40C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_rz</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_cz</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_c3</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_r4_short</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_r4</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_c4_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>clkpll_fbdv</name>\n\t\t\t\t\t\t<description>clkpll_fbdv.</description>\n\t\t\t\t\t\t<addressOffset>0x410</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_sel_fb_clk</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_sel_sample_clk</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>clkpll_vco</name>\n\t\t\t\t\t\t<description>clkpll_vco.</description>\n\t\t\t\t\t\t<addressOffset>0x414</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_shrtr</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_vco_speed</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>clkpll_sdm</name>\n\t\t\t\t\t\t<description>clkpll_sdm.</description>\n\t\t\t\t\t\t<addressOffset>0x418</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_sdm_bypass</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_sdm_flag</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_dither_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_sdmin</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>clkpll_output_en</name>\n\t\t\t\t\t\t<description>clkpll_output_en.</description>\n\t\t\t\t\t\t<addressOffset>0x41C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_en_div2_480m</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_en_32m</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_en_48m</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_en_80m</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_en_96m</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_en_120m</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_en_160m</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_en_192m</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_en_240m</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_en_480m</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>clkpll_test_enable</name>\n\t\t\t\t\t\t<description>clkpll_test_enable.</description>\n\t\t\t\t\t\t<addressOffset>0x420</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>clkpll_dc_tp_out_en</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ten_clkpll</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ten_clkpll_sfreg</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dten_clkpll_fin</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dten_clkpll_fref</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dten_clkpll_fsdm</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dten_clk32M</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dten_clk96M</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dten_clkpll_postdiv_clk</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>HBN</name>\n\t\t\t\t<description>HBN.</description>\n\t\t\t\t<baseAddress>0x4000F000</baseAddress>\n\t\t\t\t<groupName>HBN</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HBN_CTL</name>\n\t\t\t\t\t\t<description>HBN_CTL.</description>\n\t\t\t\t\t\t<addressOffset>0x0</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_state</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sram_slp</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sram_slp_option</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwr_on_option</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rtc_dly_option</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_dcdc18_aon</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_ldo11_aon_vout_sel</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_ldo11_rt_vout_sel</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_dis_pwr_off_ldo11_rt</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_dis_pwr_off_ldo11</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sw_rst</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwrdn_hbn_rtc</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pwrdn_hbn_core</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>trap_mode</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_mode</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rtc_ctl</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HBN_TIME_L</name>\n\t\t\t\t\t\t<description>HBN_TIME_L.</description>\n\t\t\t\t\t\t<addressOffset>0x4</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_time_l</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HBN_TIME_H</name>\n\t\t\t\t\t\t<description>HBN_TIME_H.</description>\n\t\t\t\t\t\t<addressOffset>0x8</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_time_h</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>RTC_TIME_L</name>\n\t\t\t\t\t\t<description>RTC_TIME_L.</description>\n\t\t\t\t\t\t<addressOffset>0xC</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rtc_time_latch_l</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>RTC_TIME_H</name>\n\t\t\t\t\t\t<description>RTC_TIME_H.</description>\n\t\t\t\t\t\t<addressOffset>0x10</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rtc_time_latch</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rtc_time_latch_h</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HBN_IRQ_MODE</name>\n\t\t\t\t\t\t<description>HBN_IRQ_MODE.</description>\n\t\t\t\t\t\t<addressOffset>0x14</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pin_wakeup_en</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pin_wakeup_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>irq_acomp1_en</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>irq_acomp0_en</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>irq_bor_en</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_en_hw_pu_pd</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>reg_aon_pad_ie_smt</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_pin_wakeup_mask</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_pin_wakeup_mode</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HBN_IRQ_STAT</name>\n\t\t\t\t\t\t<description>HBN_IRQ_STAT.</description>\n\t\t\t\t\t\t<addressOffset>0x18</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>irq_stat</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HBN_IRQ_CLR</name>\n\t\t\t\t\t\t<description>HBN_IRQ_CLR.</description>\n\t\t\t\t\t\t<addressOffset>0x1C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>irq_clr</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HBN_PIR_CFG</name>\n\t\t\t\t\t\t<description>HBN_PIR_CFG.</description>\n\t\t\t\t\t\t<addressOffset>0x20</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_nosync</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_cgen</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pir_en</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pir_dis</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pir_lpf_sel</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pir_hpf_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HBN_PIR_VTH</name>\n\t\t\t\t\t\t<description>HBN_PIR_VTH.</description>\n\t\t\t\t\t\t<addressOffset>0x24</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pir_vth</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HBN_PIR_INTERVAL</name>\n\t\t\t\t\t\t<description>HBN_PIR_INTERVAL.</description>\n\t\t\t\t\t\t<addressOffset>0x28</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pir_interval</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HBN_MISC</name>\n\t\t\t\t\t\t<description>HBN_MISC.</description>\n\t\t\t\t\t\t<addressOffset>0x2C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_flash_pulldown_aon</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_flash_pullup_aon</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>r_bor_out</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_bor</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bor_vth</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bor_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HBN_GLB</name>\n\t\t\t\t\t\t<description>HBN_GLB.</description>\n\t\t\t\t\t\t<addressOffset>0x30</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sw_ldo11_aon_vout_sel</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sw_ldo11_rt_vout_sel</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sw_ldo11soc_vout_sel_aon</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_clear_reset_event</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_reset_event</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo11_rt_iload_sel</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_pu_rc32k</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_f32k_sel</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_uart_clk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbn_root_clk_sel</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HBN_SRAM</name>\n\t\t\t\t\t\t<description>HBN_SRAM.</description>\n\t\t\t\t\t\t<addressOffset>0x34</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>retram_slp</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>retram_ret</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>retram_emaw</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>retram_ema</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HBN_RSV0</name>\n\t\t\t\t\t\t<description>HBN_RSV0.</description>\n\t\t\t\t\t\t<addressOffset>0x100</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>HBN_RSV0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HBN_RSV1</name>\n\t\t\t\t\t\t<description>HBN_RSV1.</description>\n\t\t\t\t\t\t<addressOffset>0x104</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>HBN_RSV1</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HBN_RSV2</name>\n\t\t\t\t\t\t<description>HBN_RSV2.</description>\n\t\t\t\t\t\t<addressOffset>0x108</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>HBN_RSV2</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>HBN_RSV3</name>\n\t\t\t\t\t\t<description>HBN_RSV3.</description>\n\t\t\t\t\t\t<addressOffset>0x10C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>HBN_RSV3</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>rc32k_ctrl0</name>\n\t\t\t\t\t\t<description>rc32k_ctrl0.</description>\n\t\t\t\t\t\t<addressOffset>0x200</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32k_code_fr_ext</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32k_cal_en</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32k_ext_code_en</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32k_allow_cal</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32k_vref_dly</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32k_dig_code_fr_cal</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32k_cal_precharge</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32k_cal_div</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32k_cal_inprogress</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32k_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>rc32k_cal_done</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>xtal32k</name>\n\t\t\t\t\t\t<description>xtal32k.</description>\n\t\t\t\t\t\t<addressOffset>0x204</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_xtal32k</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_xtal32k_buf</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal32k_ac_cap_short</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal32k_capbank</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal32k_inv_stre</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal32k_otf_short</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal32k_outbuf_stre</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal32k_reg</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal32k_amp_ctrl</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal32k_ext_sel</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal32k_lowv_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal32k_hiz_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t\t<peripheral>\n\t\t\t\t<name>AON</name>\n\t\t\t\t<description>AON.</description>\n\t\t\t\t<baseAddress></baseAddress>\n\t\t\t\t<groupName>AON</groupName>\n\t\t\t\t<size>32</size>\n\t\t\t\t<access>read-write</access>\n\t\t\t\t<addressBlock>\n\t\t\t\t\t<offset>0</offset>\n\t\t\t\t\t<size>0x1000</size>\n\t\t\t\t\t<usage>registers</usage>\n\t\t\t\t</addressBlock>\n\t\t\t\t<registers>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>aon</name>\n\t\t\t\t\t\t<description>aon.</description>\n\t\t\t\t\t\t<addressOffset>0x800</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sw_pu_ldo11_rt</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo11_rt_pulldown_sel</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo11_rt_pulldown</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_aon_dc_tbuf</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>aon_resv</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>aon_common</name>\n\t\t\t\t\t\t<description>aon_common.</description>\n\t\t\t\t\t\t<addressOffset>0x804</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ten_cip_misc_aon</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ten_mbg_aon</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dten_xtal_aon</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ten_xtal_aon</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ten_ldo15rf_aon</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ten_bg_sys_aon</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ten_dcdc18_1_aon</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ten_dcdc18_0_aon</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ten_ldo11soc_aon</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ten_vddcore_aon</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ten_xtal32k</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dten_xtal32k</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ten_aon</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tmux_aon</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>aon_misc</name>\n\t\t\t\t\t\t<description>aon_misc.</description>\n\t\t\t\t\t\t<addressOffset>0x808</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sw_bz_en_aon</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>sw_soc_en_aon</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>bg_sys_top</name>\n\t\t\t\t\t\t<description>bg_sys_top.</description>\n\t\t\t\t\t\t<addressOffset>0x810</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>bg_sys_start_ctrl_aon</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_bg_sys_aon</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pmip_resv</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>dcdc18_top_0</name>\n\t\t\t\t\t\t<description>dcdc18_top_0.</description>\n\t\t\t\t\t\t<addressOffset>0x814</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_rdy_aon</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_sstart_time_aon</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_osc_inhibit_t2_aon</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_slow_osc_aon</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_stop_osc_aon</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_slope_curr_sel_aon</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_osc_freq_trim_aon</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_osc_2m_mode_aon</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_vpfm_aon</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_vout_sel_aon</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>dcdc18_top_1</name>\n\t\t\t\t\t\t<description>dcdc18_top_1.</description>\n\t\t\t\t\t\t<addressOffset>0x818</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_pulldown_aon</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_en_antiring_aon</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_cfb_sel_aon</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_chf_sel_aon</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_rc_sel_aon</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_nonoverlap_td_aon</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_zvs_td_opt_aon</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_cs_delay_aon</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>dcdc18_force_cs_zvs_aon</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>ldo11soc_and_dctest</name>\n\t\t\t\t\t\t<description>ldo11soc_and_dctest.</description>\n\t\t\t\t\t\t<addressOffset>0x81C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pmip_dc_tp_out_en_aon</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_vddcore_misc_aon</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo11soc_power_good_aon</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo11soc_rdy_aon</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo11soc_cc_aon</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo11soc_vth_sel_aon</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo11soc_pulldown_sel_aon</name>\n\t\t\t\t\t\t\t\t<lsb>11</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo11soc_pulldown_aon</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo11soc_sstart_delay_aon</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo11soc_sstart_sel_aon</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_ldo11soc_aon</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>psw_irrcv</name>\n\t\t\t\t\t\t<description>psw_irrcv.</description>\n\t\t\t\t\t\t<addressOffset>0x820</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_ir_psw_aon</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>rf_top_aon</name>\n\t\t\t\t\t\t<description>rf_top_aon.</description>\n\t\t\t\t\t\t<addressOffset>0x880</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo15rf_bypass_aon</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo15rf_cc_aon</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo15rf_vout_sel_aon</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo15rf_pulldown_sel_aon</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo15rf_pulldown_aon</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo15rf_sstart_delay_aon</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>ldo15rf_sstart_sel_aon</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_xtal_aon</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_xtal_buf_aon</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_sfreg_aon</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_ldo15rf_aon</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>pu_mbg_aon</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>xtal_cfg</name>\n\t\t\t\t\t\t<description>xtal_cfg.</description>\n\t\t\t\t\t\t<addressOffset>0x884</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal_rdy_sel_aon</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal_gm_boost_aon</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal_capcode_in_aon</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal_capcode_out_aon</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal_amp_ctrl_aon</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal_sleep_aon</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal_fast_startup_aon</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal_buf_hp_aon</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal_buf_en_aon</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal_ext_sel_aon</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal_capcode_extra_aon</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal_bk_aon</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>tsen</name>\n\t\t\t\t\t\t<description>tsen.</description>\n\t\t\t\t\t\t<addressOffset>0x888</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal_rdy_int_sel_aon</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal_inn_cfg_en_aon</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>xtal_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tsen_refcode_rfcal</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>tsen_refcode_corner</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>acomp0_ctrl</name>\n\t\t\t\t\t\t<description>acomp0_ctrl.</description>\n\t\t\t\t\t\t<addressOffset>0x900</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp0_muxen</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp0_pos_sel</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp0_neg_sel</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp0_level_sel</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp0_bias_prog</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp0_hyst_selp</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp0_hyst_seln</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp0_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>acomp1_ctrl</name>\n\t\t\t\t\t\t<description>acomp1_ctrl.</description>\n\t\t\t\t\t\t<addressOffset>0x904</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp1_muxen</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp1_pos_sel</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp1_neg_sel</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp1_level_sel</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp1_bias_prog</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp1_hyst_selp</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp1_hyst_seln</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp1_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>acomp_ctrl</name>\n\t\t\t\t\t\t<description>acomp_ctrl.</description>\n\t\t\t\t\t\t<addressOffset>0x908</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp_reserved</name>\n\t\t\t\t\t\t\t\t<lsb>24</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp0_out_raw</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp1_out_raw</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp0_test_sel</name>\n\t\t\t\t\t\t\t\t<lsb>12</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp1_test_sel</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp0_test_en</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp1_test_en</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp0_rstn_ana</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>acomp1_rstn_ana</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpadc_reg_cmd</name>\n\t\t\t\t\t\t<description>gpadc_reg_cmd.</description>\n\t\t\t\t\t\t<addressOffset>0x90C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_sen_test_en</name>\n\t\t\t\t\t\t\t\t<lsb>30</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_sen_sel</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_chip_sen_pu</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_micboost_32db_en</name>\n\t\t\t\t\t\t\t\t<lsb>23</lsb>\n\t\t\t\t\t\t\t\t<msb>23</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_mic_pga2_gain</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>22</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_mic1_diff</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_mic2_diff</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_dwa_en</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_byp_micboost</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_micpga_en</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_micbias_en</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_neg_gnd</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_pos_sel</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_neg_sel</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>7</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_soft_rst</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_conv_start</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_global_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpadc_reg_config1</name>\n\t\t\t\t\t\t<description>gpadc_reg_config1.</description>\n\t\t\t\t\t\t<addressOffset>0x910</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_v18_sel</name>\n\t\t\t\t\t\t\t\t<lsb>29</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_v11_sel</name>\n\t\t\t\t\t\t\t\t<lsb>27</lsb>\n\t\t\t\t\t\t\t\t<msb>28</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_dither_en</name>\n\t\t\t\t\t\t\t\t<lsb>26</lsb>\n\t\t\t\t\t\t\t\t<msb>26</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_en</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_length</name>\n\t\t\t\t\t\t\t\t<lsb>21</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_clk_div_ratio</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>20</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_clk_ana_inv</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_lowv_det_en</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>10</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_vcm_hyst_sel</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_vcm_sel_en</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_res_sel</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_cont_conv_en</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_cal_os_en</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpadc_reg_config2</name>\n\t\t\t\t\t\t<description>gpadc_reg_config2.</description>\n\t\t\t\t\t\t<addressOffset>0x914</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_tsvbe_low</name>\n\t\t\t\t\t\t\t\t<lsb>31</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_dly_sel</name>\n\t\t\t\t\t\t\t\t<lsb>28</lsb>\n\t\t\t\t\t\t\t\t<msb>30</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_pga1_gain</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>27</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_pga2_gain</name>\n\t\t\t\t\t\t\t\t<lsb>22</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_test_sel</name>\n\t\t\t\t\t\t\t\t<lsb>19</lsb>\n\t\t\t\t\t\t\t\t<msb>21</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_test_en</name>\n\t\t\t\t\t\t\t\t<lsb>18</lsb>\n\t\t\t\t\t\t\t\t<msb>18</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_bias_sel</name>\n\t\t\t\t\t\t\t\t<lsb>17</lsb>\n\t\t\t\t\t\t\t\t<msb>17</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_chop_mode</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>16</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_pga_vcmi_en</name>\n\t\t\t\t\t\t\t\t<lsb>14</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_pga_en</name>\n\t\t\t\t\t\t\t\t<lsb>13</lsb>\n\t\t\t\t\t\t\t\t<msb>13</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_pga_os_cal</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>12</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_pga_vcm</name>\n\t\t\t\t\t\t\t\t<lsb>7</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_ts_en</name>\n\t\t\t\t\t\t\t\t<lsb>6</lsb>\n\t\t\t\t\t\t\t\t<msb>6</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_tsext_sel</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_vbat_en</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_vref_sel</name>\n\t\t\t\t\t\t\t\t<lsb>3</lsb>\n\t\t\t\t\t\t\t\t<msb>3</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_diff_mode</name>\n\t\t\t\t\t\t\t\t<lsb>2</lsb>\n\t\t\t\t\t\t\t\t<msb>2</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpadc_reg_scn_pos1</name>\n\t\t\t\t\t\t<description>adc converation sequence 1</description>\n\t\t\t\t\t\t<addressOffset>0x918</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_pos_5</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_pos_4</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_pos_3</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_pos_2</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_pos_1</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_pos_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpadc_reg_scn_pos2</name>\n\t\t\t\t\t\t<description>adc converation sequence 2</description>\n\t\t\t\t\t\t<addressOffset>0x91C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_pos_11</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_pos_10</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_pos_9</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_pos_8</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_pos_7</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_pos_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpadc_reg_scn_neg1</name>\n\t\t\t\t\t\t<description>adc converation sequence 3</description>\n\t\t\t\t\t\t<addressOffset>0x920</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_neg_5</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_neg_4</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_neg_3</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_neg_2</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_neg_1</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_neg_0</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpadc_reg_scn_neg2</name>\n\t\t\t\t\t\t<description>adc converation sequence 4</description>\n\t\t\t\t\t\t<addressOffset>0x924</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_neg_11</name>\n\t\t\t\t\t\t\t\t<lsb>25</lsb>\n\t\t\t\t\t\t\t\t<msb>29</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_neg_10</name>\n\t\t\t\t\t\t\t\t<lsb>20</lsb>\n\t\t\t\t\t\t\t\t<msb>24</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_neg_9</name>\n\t\t\t\t\t\t\t\t<lsb>15</lsb>\n\t\t\t\t\t\t\t\t<msb>19</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_neg_8</name>\n\t\t\t\t\t\t\t\t<lsb>10</lsb>\n\t\t\t\t\t\t\t\t<msb>14</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_neg_7</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_scan_neg_6</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpadc_reg_status</name>\n\t\t\t\t\t\t<description>gpadc_reg_status.</description>\n\t\t\t\t\t\t<addressOffset>0x928</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_reserved</name>\n\t\t\t\t\t\t\t\t<lsb>16</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_data_rdy</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpadc_reg_isr</name>\n\t\t\t\t\t\t<description>gpadc_reg_isr.</description>\n\t\t\t\t\t\t<addressOffset>0x92C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_pos_satur_mask</name>\n\t\t\t\t\t\t\t\t<lsb>9</lsb>\n\t\t\t\t\t\t\t\t<msb>9</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_neg_satur_mask</name>\n\t\t\t\t\t\t\t\t<lsb>8</lsb>\n\t\t\t\t\t\t\t\t<msb>8</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_pos_satur_clr</name>\n\t\t\t\t\t\t\t\t<lsb>5</lsb>\n\t\t\t\t\t\t\t\t<msb>5</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_neg_satur_clr</name>\n\t\t\t\t\t\t\t\t<lsb>4</lsb>\n\t\t\t\t\t\t\t\t<msb>4</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_pos_satur</name>\n\t\t\t\t\t\t\t\t<lsb>1</lsb>\n\t\t\t\t\t\t\t\t<msb>1</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_neg_satur</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>0</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpadc_reg_result</name>\n\t\t\t\t\t\t<description>gpadc_reg_result.</description>\n\t\t\t\t\t\t<addressOffset>0x930</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_data_out</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>25</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpadc_reg_raw_result</name>\n\t\t\t\t\t\t<description>gpadc_reg_raw_result.</description>\n\t\t\t\t\t\t<addressOffset>0x934</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_raw_data</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>11</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>gpadc_reg_define</name>\n\t\t\t\t\t\t<description>gpadc_reg_define.</description>\n\t\t\t\t\t\t<addressOffset>0x938</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>gpadc_os_cal_data</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>15</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>hbncore_resv0</name>\n\t\t\t\t\t\t<description>hbncore_resv0.</description>\n\t\t\t\t\t\t<addressOffset>0x93C</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbncore_resv0_data</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t\t<register>\n\t\t\t\t\t\t<name>hbncore_resv1</name>\n\t\t\t\t\t\t<description>hbncore_resv1.</description>\n\t\t\t\t\t\t<addressOffset>0x940</addressOffset>\n\t\t\t\t\t\t<fields>\n\t\t\t\t\t\t\t<field>\n\t\t\t\t\t\t\t\t<name>hbncore_resv1_data</name>\n\t\t\t\t\t\t\t\t<lsb>0</lsb>\n\t\t\t\t\t\t\t\t<msb>31</msb>\n\t\t\t\t\t\t\t</field>\n\t\t\t\t\t\t</fields>\n\t\t\t\t\t</register>\n\t\t\t\t</registers>\n\t\t\t</peripheral>\n\t\t</peripherals>\n\t</device>\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/spi_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    spi_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __SPI_REG_H__\n#define __SPI_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : spi_config */\n#define SPI_CONFIG_OFFSET           (0x0)\n#define SPI_CR_SPI_M_EN             SPI_CR_SPI_M_EN\n#define SPI_CR_SPI_M_EN_POS         (0U)\n#define SPI_CR_SPI_M_EN_LEN         (1U)\n#define SPI_CR_SPI_M_EN_MSK         (((1U << SPI_CR_SPI_M_EN_LEN) - 1) << SPI_CR_SPI_M_EN_POS)\n#define SPI_CR_SPI_M_EN_UMSK        (~(((1U << SPI_CR_SPI_M_EN_LEN) - 1) << SPI_CR_SPI_M_EN_POS))\n#define SPI_CR_SPI_S_EN             SPI_CR_SPI_S_EN\n#define SPI_CR_SPI_S_EN_POS         (1U)\n#define SPI_CR_SPI_S_EN_LEN         (1U)\n#define SPI_CR_SPI_S_EN_MSK         (((1U << SPI_CR_SPI_S_EN_LEN) - 1) << SPI_CR_SPI_S_EN_POS)\n#define SPI_CR_SPI_S_EN_UMSK        (~(((1U << SPI_CR_SPI_S_EN_LEN) - 1) << SPI_CR_SPI_S_EN_POS))\n#define SPI_CR_SPI_FRAME_SIZE       SPI_CR_SPI_FRAME_SIZE\n#define SPI_CR_SPI_FRAME_SIZE_POS   (2U)\n#define SPI_CR_SPI_FRAME_SIZE_LEN   (2U)\n#define SPI_CR_SPI_FRAME_SIZE_MSK   (((1U << SPI_CR_SPI_FRAME_SIZE_LEN) - 1) << SPI_CR_SPI_FRAME_SIZE_POS)\n#define SPI_CR_SPI_FRAME_SIZE_UMSK  (~(((1U << SPI_CR_SPI_FRAME_SIZE_LEN) - 1) << SPI_CR_SPI_FRAME_SIZE_POS))\n#define SPI_CR_SPI_SCLK_POL         SPI_CR_SPI_SCLK_POL\n#define SPI_CR_SPI_SCLK_POL_POS     (4U)\n#define SPI_CR_SPI_SCLK_POL_LEN     (1U)\n#define SPI_CR_SPI_SCLK_POL_MSK     (((1U << SPI_CR_SPI_SCLK_POL_LEN) - 1) << SPI_CR_SPI_SCLK_POL_POS)\n#define SPI_CR_SPI_SCLK_POL_UMSK    (~(((1U << SPI_CR_SPI_SCLK_POL_LEN) - 1) << SPI_CR_SPI_SCLK_POL_POS))\n#define SPI_CR_SPI_SCLK_PH          SPI_CR_SPI_SCLK_PH\n#define SPI_CR_SPI_SCLK_PH_POS      (5U)\n#define SPI_CR_SPI_SCLK_PH_LEN      (1U)\n#define SPI_CR_SPI_SCLK_PH_MSK      (((1U << SPI_CR_SPI_SCLK_PH_LEN) - 1) << SPI_CR_SPI_SCLK_PH_POS)\n#define SPI_CR_SPI_SCLK_PH_UMSK     (~(((1U << SPI_CR_SPI_SCLK_PH_LEN) - 1) << SPI_CR_SPI_SCLK_PH_POS))\n#define SPI_CR_SPI_BIT_INV          SPI_CR_SPI_BIT_INV\n#define SPI_CR_SPI_BIT_INV_POS      (6U)\n#define SPI_CR_SPI_BIT_INV_LEN      (1U)\n#define SPI_CR_SPI_BIT_INV_MSK      (((1U << SPI_CR_SPI_BIT_INV_LEN) - 1) << SPI_CR_SPI_BIT_INV_POS)\n#define SPI_CR_SPI_BIT_INV_UMSK     (~(((1U << SPI_CR_SPI_BIT_INV_LEN) - 1) << SPI_CR_SPI_BIT_INV_POS))\n#define SPI_CR_SPI_BYTE_INV         SPI_CR_SPI_BYTE_INV\n#define SPI_CR_SPI_BYTE_INV_POS     (7U)\n#define SPI_CR_SPI_BYTE_INV_LEN     (1U)\n#define SPI_CR_SPI_BYTE_INV_MSK     (((1U << SPI_CR_SPI_BYTE_INV_LEN) - 1) << SPI_CR_SPI_BYTE_INV_POS)\n#define SPI_CR_SPI_BYTE_INV_UMSK    (~(((1U << SPI_CR_SPI_BYTE_INV_LEN) - 1) << SPI_CR_SPI_BYTE_INV_POS))\n#define SPI_CR_SPI_RXD_IGNR_EN      SPI_CR_SPI_RXD_IGNR_EN\n#define SPI_CR_SPI_RXD_IGNR_EN_POS  (8U)\n#define SPI_CR_SPI_RXD_IGNR_EN_LEN  (1U)\n#define SPI_CR_SPI_RXD_IGNR_EN_MSK  (((1U << SPI_CR_SPI_RXD_IGNR_EN_LEN) - 1) << SPI_CR_SPI_RXD_IGNR_EN_POS)\n#define SPI_CR_SPI_RXD_IGNR_EN_UMSK (~(((1U << SPI_CR_SPI_RXD_IGNR_EN_LEN) - 1) << SPI_CR_SPI_RXD_IGNR_EN_POS))\n#define SPI_CR_SPI_M_CONT_EN        SPI_CR_SPI_M_CONT_EN\n#define SPI_CR_SPI_M_CONT_EN_POS    (9U)\n#define SPI_CR_SPI_M_CONT_EN_LEN    (1U)\n#define SPI_CR_SPI_M_CONT_EN_MSK    (((1U << SPI_CR_SPI_M_CONT_EN_LEN) - 1) << SPI_CR_SPI_M_CONT_EN_POS)\n#define SPI_CR_SPI_M_CONT_EN_UMSK   (~(((1U << SPI_CR_SPI_M_CONT_EN_LEN) - 1) << SPI_CR_SPI_M_CONT_EN_POS))\n#define SPI_CR_SPI_DEG_EN           SPI_CR_SPI_DEG_EN\n#define SPI_CR_SPI_DEG_EN_POS       (11U)\n#define SPI_CR_SPI_DEG_EN_LEN       (1U)\n#define SPI_CR_SPI_DEG_EN_MSK       (((1U << SPI_CR_SPI_DEG_EN_LEN) - 1) << SPI_CR_SPI_DEG_EN_POS)\n#define SPI_CR_SPI_DEG_EN_UMSK      (~(((1U << SPI_CR_SPI_DEG_EN_LEN) - 1) << SPI_CR_SPI_DEG_EN_POS))\n#define SPI_CR_SPI_DEG_CNT          SPI_CR_SPI_DEG_CNT\n#define SPI_CR_SPI_DEG_CNT_POS      (12U)\n#define SPI_CR_SPI_DEG_CNT_LEN      (4U)\n#define SPI_CR_SPI_DEG_CNT_MSK      (((1U << SPI_CR_SPI_DEG_CNT_LEN) - 1) << SPI_CR_SPI_DEG_CNT_POS)\n#define SPI_CR_SPI_DEG_CNT_UMSK     (~(((1U << SPI_CR_SPI_DEG_CNT_LEN) - 1) << SPI_CR_SPI_DEG_CNT_POS))\n\n/* 0x4 : spi_int_sts */\n#define SPI_INT_STS_OFFSET       (0x4)\n#define SPI_END_INT              SPI_END_INT\n#define SPI_END_INT_POS          (0U)\n#define SPI_END_INT_LEN          (1U)\n#define SPI_END_INT_MSK          (((1U << SPI_END_INT_LEN) - 1) << SPI_END_INT_POS)\n#define SPI_END_INT_UMSK         (~(((1U << SPI_END_INT_LEN) - 1) << SPI_END_INT_POS))\n#define SPI_TXF_INT              SPI_TXF_INT\n#define SPI_TXF_INT_POS          (1U)\n#define SPI_TXF_INT_LEN          (1U)\n#define SPI_TXF_INT_MSK          (((1U << SPI_TXF_INT_LEN) - 1) << SPI_TXF_INT_POS)\n#define SPI_TXF_INT_UMSK         (~(((1U << SPI_TXF_INT_LEN) - 1) << SPI_TXF_INT_POS))\n#define SPI_RXF_INT              SPI_RXF_INT\n#define SPI_RXF_INT_POS          (2U)\n#define SPI_RXF_INT_LEN          (1U)\n#define SPI_RXF_INT_MSK          (((1U << SPI_RXF_INT_LEN) - 1) << SPI_RXF_INT_POS)\n#define SPI_RXF_INT_UMSK         (~(((1U << SPI_RXF_INT_LEN) - 1) << SPI_RXF_INT_POS))\n#define SPI_STO_INT              SPI_STO_INT\n#define SPI_STO_INT_POS          (3U)\n#define SPI_STO_INT_LEN          (1U)\n#define SPI_STO_INT_MSK          (((1U << SPI_STO_INT_LEN) - 1) << SPI_STO_INT_POS)\n#define SPI_STO_INT_UMSK         (~(((1U << SPI_STO_INT_LEN) - 1) << SPI_STO_INT_POS))\n#define SPI_TXU_INT              SPI_TXU_INT\n#define SPI_TXU_INT_POS          (4U)\n#define SPI_TXU_INT_LEN          (1U)\n#define SPI_TXU_INT_MSK          (((1U << SPI_TXU_INT_LEN) - 1) << SPI_TXU_INT_POS)\n#define SPI_TXU_INT_UMSK         (~(((1U << SPI_TXU_INT_LEN) - 1) << SPI_TXU_INT_POS))\n#define SPI_FER_INT              SPI_FER_INT\n#define SPI_FER_INT_POS          (5U)\n#define SPI_FER_INT_LEN          (1U)\n#define SPI_FER_INT_MSK          (((1U << SPI_FER_INT_LEN) - 1) << SPI_FER_INT_POS)\n#define SPI_FER_INT_UMSK         (~(((1U << SPI_FER_INT_LEN) - 1) << SPI_FER_INT_POS))\n#define SPI_CR_SPI_END_MASK      SPI_CR_SPI_END_MASK\n#define SPI_CR_SPI_END_MASK_POS  (8U)\n#define SPI_CR_SPI_END_MASK_LEN  (1U)\n#define SPI_CR_SPI_END_MASK_MSK  (((1U << SPI_CR_SPI_END_MASK_LEN) - 1) << SPI_CR_SPI_END_MASK_POS)\n#define SPI_CR_SPI_END_MASK_UMSK (~(((1U << SPI_CR_SPI_END_MASK_LEN) - 1) << SPI_CR_SPI_END_MASK_POS))\n#define SPI_CR_SPI_TXF_MASK      SPI_CR_SPI_TXF_MASK\n#define SPI_CR_SPI_TXF_MASK_POS  (9U)\n#define SPI_CR_SPI_TXF_MASK_LEN  (1U)\n#define SPI_CR_SPI_TXF_MASK_MSK  (((1U << SPI_CR_SPI_TXF_MASK_LEN) - 1) << SPI_CR_SPI_TXF_MASK_POS)\n#define SPI_CR_SPI_TXF_MASK_UMSK (~(((1U << SPI_CR_SPI_TXF_MASK_LEN) - 1) << SPI_CR_SPI_TXF_MASK_POS))\n#define SPI_CR_SPI_RXF_MASK      SPI_CR_SPI_RXF_MASK\n#define SPI_CR_SPI_RXF_MASK_POS  (10U)\n#define SPI_CR_SPI_RXF_MASK_LEN  (1U)\n#define SPI_CR_SPI_RXF_MASK_MSK  (((1U << SPI_CR_SPI_RXF_MASK_LEN) - 1) << SPI_CR_SPI_RXF_MASK_POS)\n#define SPI_CR_SPI_RXF_MASK_UMSK (~(((1U << SPI_CR_SPI_RXF_MASK_LEN) - 1) << SPI_CR_SPI_RXF_MASK_POS))\n#define SPI_CR_SPI_STO_MASK      SPI_CR_SPI_STO_MASK\n#define SPI_CR_SPI_STO_MASK_POS  (11U)\n#define SPI_CR_SPI_STO_MASK_LEN  (1U)\n#define SPI_CR_SPI_STO_MASK_MSK  (((1U << SPI_CR_SPI_STO_MASK_LEN) - 1) << SPI_CR_SPI_STO_MASK_POS)\n#define SPI_CR_SPI_STO_MASK_UMSK (~(((1U << SPI_CR_SPI_STO_MASK_LEN) - 1) << SPI_CR_SPI_STO_MASK_POS))\n#define SPI_CR_SPI_TXU_MASK      SPI_CR_SPI_TXU_MASK\n#define SPI_CR_SPI_TXU_MASK_POS  (12U)\n#define SPI_CR_SPI_TXU_MASK_LEN  (1U)\n#define SPI_CR_SPI_TXU_MASK_MSK  (((1U << SPI_CR_SPI_TXU_MASK_LEN) - 1) << SPI_CR_SPI_TXU_MASK_POS)\n#define SPI_CR_SPI_TXU_MASK_UMSK (~(((1U << SPI_CR_SPI_TXU_MASK_LEN) - 1) << SPI_CR_SPI_TXU_MASK_POS))\n#define SPI_CR_SPI_FER_MASK      SPI_CR_SPI_FER_MASK\n#define SPI_CR_SPI_FER_MASK_POS  (13U)\n#define SPI_CR_SPI_FER_MASK_LEN  (1U)\n#define SPI_CR_SPI_FER_MASK_MSK  (((1U << SPI_CR_SPI_FER_MASK_LEN) - 1) << SPI_CR_SPI_FER_MASK_POS)\n#define SPI_CR_SPI_FER_MASK_UMSK (~(((1U << SPI_CR_SPI_FER_MASK_LEN) - 1) << SPI_CR_SPI_FER_MASK_POS))\n#define SPI_CR_SPI_END_CLR       SPI_CR_SPI_END_CLR\n#define SPI_CR_SPI_END_CLR_POS   (16U)\n#define SPI_CR_SPI_END_CLR_LEN   (1U)\n#define SPI_CR_SPI_END_CLR_MSK   (((1U << SPI_CR_SPI_END_CLR_LEN) - 1) << SPI_CR_SPI_END_CLR_POS)\n#define SPI_CR_SPI_END_CLR_UMSK  (~(((1U << SPI_CR_SPI_END_CLR_LEN) - 1) << SPI_CR_SPI_END_CLR_POS))\n#define SPI_CR_SPI_STO_CLR       SPI_CR_SPI_STO_CLR\n#define SPI_CR_SPI_STO_CLR_POS   (19U)\n#define SPI_CR_SPI_STO_CLR_LEN   (1U)\n#define SPI_CR_SPI_STO_CLR_MSK   (((1U << SPI_CR_SPI_STO_CLR_LEN) - 1) << SPI_CR_SPI_STO_CLR_POS)\n#define SPI_CR_SPI_STO_CLR_UMSK  (~(((1U << SPI_CR_SPI_STO_CLR_LEN) - 1) << SPI_CR_SPI_STO_CLR_POS))\n#define SPI_CR_SPI_TXU_CLR       SPI_CR_SPI_TXU_CLR\n#define SPI_CR_SPI_TXU_CLR_POS   (20U)\n#define SPI_CR_SPI_TXU_CLR_LEN   (1U)\n#define SPI_CR_SPI_TXU_CLR_MSK   (((1U << SPI_CR_SPI_TXU_CLR_LEN) - 1) << SPI_CR_SPI_TXU_CLR_POS)\n#define SPI_CR_SPI_TXU_CLR_UMSK  (~(((1U << SPI_CR_SPI_TXU_CLR_LEN) - 1) << SPI_CR_SPI_TXU_CLR_POS))\n#define SPI_CR_SPI_END_EN        SPI_CR_SPI_END_EN\n#define SPI_CR_SPI_END_EN_POS    (24U)\n#define SPI_CR_SPI_END_EN_LEN    (1U)\n#define SPI_CR_SPI_END_EN_MSK    (((1U << SPI_CR_SPI_END_EN_LEN) - 1) << SPI_CR_SPI_END_EN_POS)\n#define SPI_CR_SPI_END_EN_UMSK   (~(((1U << SPI_CR_SPI_END_EN_LEN) - 1) << SPI_CR_SPI_END_EN_POS))\n#define SPI_CR_SPI_TXF_EN        SPI_CR_SPI_TXF_EN\n#define SPI_CR_SPI_TXF_EN_POS    (25U)\n#define SPI_CR_SPI_TXF_EN_LEN    (1U)\n#define SPI_CR_SPI_TXF_EN_MSK    (((1U << SPI_CR_SPI_TXF_EN_LEN) - 1) << SPI_CR_SPI_TXF_EN_POS)\n#define SPI_CR_SPI_TXF_EN_UMSK   (~(((1U << SPI_CR_SPI_TXF_EN_LEN) - 1) << SPI_CR_SPI_TXF_EN_POS))\n#define SPI_CR_SPI_RXF_EN        SPI_CR_SPI_RXF_EN\n#define SPI_CR_SPI_RXF_EN_POS    (26U)\n#define SPI_CR_SPI_RXF_EN_LEN    (1U)\n#define SPI_CR_SPI_RXF_EN_MSK    (((1U << SPI_CR_SPI_RXF_EN_LEN) - 1) << SPI_CR_SPI_RXF_EN_POS)\n#define SPI_CR_SPI_RXF_EN_UMSK   (~(((1U << SPI_CR_SPI_RXF_EN_LEN) - 1) << SPI_CR_SPI_RXF_EN_POS))\n#define SPI_CR_SPI_STO_EN        SPI_CR_SPI_STO_EN\n#define SPI_CR_SPI_STO_EN_POS    (27U)\n#define SPI_CR_SPI_STO_EN_LEN    (1U)\n#define SPI_CR_SPI_STO_EN_MSK    (((1U << SPI_CR_SPI_STO_EN_LEN) - 1) << SPI_CR_SPI_STO_EN_POS)\n#define SPI_CR_SPI_STO_EN_UMSK   (~(((1U << SPI_CR_SPI_STO_EN_LEN) - 1) << SPI_CR_SPI_STO_EN_POS))\n#define SPI_CR_SPI_TXU_EN        SPI_CR_SPI_TXU_EN\n#define SPI_CR_SPI_TXU_EN_POS    (28U)\n#define SPI_CR_SPI_TXU_EN_LEN    (1U)\n#define SPI_CR_SPI_TXU_EN_MSK    (((1U << SPI_CR_SPI_TXU_EN_LEN) - 1) << SPI_CR_SPI_TXU_EN_POS)\n#define SPI_CR_SPI_TXU_EN_UMSK   (~(((1U << SPI_CR_SPI_TXU_EN_LEN) - 1) << SPI_CR_SPI_TXU_EN_POS))\n#define SPI_CR_SPI_FER_EN        SPI_CR_SPI_FER_EN\n#define SPI_CR_SPI_FER_EN_POS    (29U)\n#define SPI_CR_SPI_FER_EN_LEN    (1U)\n#define SPI_CR_SPI_FER_EN_MSK    (((1U << SPI_CR_SPI_FER_EN_LEN) - 1) << SPI_CR_SPI_FER_EN_POS)\n#define SPI_CR_SPI_FER_EN_UMSK   (~(((1U << SPI_CR_SPI_FER_EN_LEN) - 1) << SPI_CR_SPI_FER_EN_POS))\n\n/* 0x8 : spi_bus_busy */\n#define SPI_BUS_BUSY_OFFSET       (0x8)\n#define SPI_STS_SPI_BUS_BUSY      SPI_STS_SPI_BUS_BUSY\n#define SPI_STS_SPI_BUS_BUSY_POS  (0U)\n#define SPI_STS_SPI_BUS_BUSY_LEN  (1U)\n#define SPI_STS_SPI_BUS_BUSY_MSK  (((1U << SPI_STS_SPI_BUS_BUSY_LEN) - 1) << SPI_STS_SPI_BUS_BUSY_POS)\n#define SPI_STS_SPI_BUS_BUSY_UMSK (~(((1U << SPI_STS_SPI_BUS_BUSY_LEN) - 1) << SPI_STS_SPI_BUS_BUSY_POS))\n\n/* 0x10 : spi_prd_0 */\n#define SPI_PRD_0_OFFSET           (0x10)\n#define SPI_CR_SPI_PRD_S           SPI_CR_SPI_PRD_S\n#define SPI_CR_SPI_PRD_S_POS       (0U)\n#define SPI_CR_SPI_PRD_S_LEN       (8U)\n#define SPI_CR_SPI_PRD_S_MSK       (((1U << SPI_CR_SPI_PRD_S_LEN) - 1) << SPI_CR_SPI_PRD_S_POS)\n#define SPI_CR_SPI_PRD_S_UMSK      (~(((1U << SPI_CR_SPI_PRD_S_LEN) - 1) << SPI_CR_SPI_PRD_S_POS))\n#define SPI_CR_SPI_PRD_P           SPI_CR_SPI_PRD_P\n#define SPI_CR_SPI_PRD_P_POS       (8U)\n#define SPI_CR_SPI_PRD_P_LEN       (8U)\n#define SPI_CR_SPI_PRD_P_MSK       (((1U << SPI_CR_SPI_PRD_P_LEN) - 1) << SPI_CR_SPI_PRD_P_POS)\n#define SPI_CR_SPI_PRD_P_UMSK      (~(((1U << SPI_CR_SPI_PRD_P_LEN) - 1) << SPI_CR_SPI_PRD_P_POS))\n#define SPI_CR_SPI_PRD_D_PH_0      SPI_CR_SPI_PRD_D_PH_0\n#define SPI_CR_SPI_PRD_D_PH_0_POS  (16U)\n#define SPI_CR_SPI_PRD_D_PH_0_LEN  (8U)\n#define SPI_CR_SPI_PRD_D_PH_0_MSK  (((1U << SPI_CR_SPI_PRD_D_PH_0_LEN) - 1) << SPI_CR_SPI_PRD_D_PH_0_POS)\n#define SPI_CR_SPI_PRD_D_PH_0_UMSK (~(((1U << SPI_CR_SPI_PRD_D_PH_0_LEN) - 1) << SPI_CR_SPI_PRD_D_PH_0_POS))\n#define SPI_CR_SPI_PRD_D_PH_1      SPI_CR_SPI_PRD_D_PH_1\n#define SPI_CR_SPI_PRD_D_PH_1_POS  (24U)\n#define SPI_CR_SPI_PRD_D_PH_1_LEN  (8U)\n#define SPI_CR_SPI_PRD_D_PH_1_MSK  (((1U << SPI_CR_SPI_PRD_D_PH_1_LEN) - 1) << SPI_CR_SPI_PRD_D_PH_1_POS)\n#define SPI_CR_SPI_PRD_D_PH_1_UMSK (~(((1U << SPI_CR_SPI_PRD_D_PH_1_LEN) - 1) << SPI_CR_SPI_PRD_D_PH_1_POS))\n\n/* 0x14 : spi_prd_1 */\n#define SPI_PRD_1_OFFSET      (0x14)\n#define SPI_CR_SPI_PRD_I      SPI_CR_SPI_PRD_I\n#define SPI_CR_SPI_PRD_I_POS  (0U)\n#define SPI_CR_SPI_PRD_I_LEN  (8U)\n#define SPI_CR_SPI_PRD_I_MSK  (((1U << SPI_CR_SPI_PRD_I_LEN) - 1) << SPI_CR_SPI_PRD_I_POS)\n#define SPI_CR_SPI_PRD_I_UMSK (~(((1U << SPI_CR_SPI_PRD_I_LEN) - 1) << SPI_CR_SPI_PRD_I_POS))\n\n/* 0x18 : spi_rxd_ignr */\n#define SPI_RXD_IGNR_OFFSET        (0x18)\n#define SPI_CR_SPI_RXD_IGNR_P      SPI_CR_SPI_RXD_IGNR_P\n#define SPI_CR_SPI_RXD_IGNR_P_POS  (0U)\n#define SPI_CR_SPI_RXD_IGNR_P_LEN  (5U)\n#define SPI_CR_SPI_RXD_IGNR_P_MSK  (((1U << SPI_CR_SPI_RXD_IGNR_P_LEN) - 1) << SPI_CR_SPI_RXD_IGNR_P_POS)\n#define SPI_CR_SPI_RXD_IGNR_P_UMSK (~(((1U << SPI_CR_SPI_RXD_IGNR_P_LEN) - 1) << SPI_CR_SPI_RXD_IGNR_P_POS))\n#define SPI_CR_SPI_RXD_IGNR_S      SPI_CR_SPI_RXD_IGNR_S\n#define SPI_CR_SPI_RXD_IGNR_S_POS  (16U)\n#define SPI_CR_SPI_RXD_IGNR_S_LEN  (5U)\n#define SPI_CR_SPI_RXD_IGNR_S_MSK  (((1U << SPI_CR_SPI_RXD_IGNR_S_LEN) - 1) << SPI_CR_SPI_RXD_IGNR_S_POS)\n#define SPI_CR_SPI_RXD_IGNR_S_UMSK (~(((1U << SPI_CR_SPI_RXD_IGNR_S_LEN) - 1) << SPI_CR_SPI_RXD_IGNR_S_POS))\n\n/* 0x1C : spi_sto_value */\n#define SPI_STO_VALUE_OFFSET      (0x1C)\n#define SPI_CR_SPI_STO_VALUE      SPI_CR_SPI_STO_VALUE\n#define SPI_CR_SPI_STO_VALUE_POS  (0U)\n#define SPI_CR_SPI_STO_VALUE_LEN  (12U)\n#define SPI_CR_SPI_STO_VALUE_MSK  (((1U << SPI_CR_SPI_STO_VALUE_LEN) - 1) << SPI_CR_SPI_STO_VALUE_POS)\n#define SPI_CR_SPI_STO_VALUE_UMSK (~(((1U << SPI_CR_SPI_STO_VALUE_LEN) - 1) << SPI_CR_SPI_STO_VALUE_POS))\n\n/* 0x80 : spi_fifo_config_0 */\n#define SPI_FIFO_CONFIG_0_OFFSET   (0x80)\n#define SPI_DMA_TX_EN              SPI_DMA_TX_EN\n#define SPI_DMA_TX_EN_POS          (0U)\n#define SPI_DMA_TX_EN_LEN          (1U)\n#define SPI_DMA_TX_EN_MSK          (((1U << SPI_DMA_TX_EN_LEN) - 1) << SPI_DMA_TX_EN_POS)\n#define SPI_DMA_TX_EN_UMSK         (~(((1U << SPI_DMA_TX_EN_LEN) - 1) << SPI_DMA_TX_EN_POS))\n#define SPI_DMA_RX_EN              SPI_DMA_RX_EN\n#define SPI_DMA_RX_EN_POS          (1U)\n#define SPI_DMA_RX_EN_LEN          (1U)\n#define SPI_DMA_RX_EN_MSK          (((1U << SPI_DMA_RX_EN_LEN) - 1) << SPI_DMA_RX_EN_POS)\n#define SPI_DMA_RX_EN_UMSK         (~(((1U << SPI_DMA_RX_EN_LEN) - 1) << SPI_DMA_RX_EN_POS))\n#define SPI_TX_FIFO_CLR            SPI_TX_FIFO_CLR\n#define SPI_TX_FIFO_CLR_POS        (2U)\n#define SPI_TX_FIFO_CLR_LEN        (1U)\n#define SPI_TX_FIFO_CLR_MSK        (((1U << SPI_TX_FIFO_CLR_LEN) - 1) << SPI_TX_FIFO_CLR_POS)\n#define SPI_TX_FIFO_CLR_UMSK       (~(((1U << SPI_TX_FIFO_CLR_LEN) - 1) << SPI_TX_FIFO_CLR_POS))\n#define SPI_RX_FIFO_CLR            SPI_RX_FIFO_CLR\n#define SPI_RX_FIFO_CLR_POS        (3U)\n#define SPI_RX_FIFO_CLR_LEN        (1U)\n#define SPI_RX_FIFO_CLR_MSK        (((1U << SPI_RX_FIFO_CLR_LEN) - 1) << SPI_RX_FIFO_CLR_POS)\n#define SPI_RX_FIFO_CLR_UMSK       (~(((1U << SPI_RX_FIFO_CLR_LEN) - 1) << SPI_RX_FIFO_CLR_POS))\n#define SPI_TX_FIFO_OVERFLOW       SPI_TX_FIFO_OVERFLOW\n#define SPI_TX_FIFO_OVERFLOW_POS   (4U)\n#define SPI_TX_FIFO_OVERFLOW_LEN   (1U)\n#define SPI_TX_FIFO_OVERFLOW_MSK   (((1U << SPI_TX_FIFO_OVERFLOW_LEN) - 1) << SPI_TX_FIFO_OVERFLOW_POS)\n#define SPI_TX_FIFO_OVERFLOW_UMSK  (~(((1U << SPI_TX_FIFO_OVERFLOW_LEN) - 1) << SPI_TX_FIFO_OVERFLOW_POS))\n#define SPI_TX_FIFO_UNDERFLOW      SPI_TX_FIFO_UNDERFLOW\n#define SPI_TX_FIFO_UNDERFLOW_POS  (5U)\n#define SPI_TX_FIFO_UNDERFLOW_LEN  (1U)\n#define SPI_TX_FIFO_UNDERFLOW_MSK  (((1U << SPI_TX_FIFO_UNDERFLOW_LEN) - 1) << SPI_TX_FIFO_UNDERFLOW_POS)\n#define SPI_TX_FIFO_UNDERFLOW_UMSK (~(((1U << SPI_TX_FIFO_UNDERFLOW_LEN) - 1) << SPI_TX_FIFO_UNDERFLOW_POS))\n#define SPI_RX_FIFO_OVERFLOW       SPI_RX_FIFO_OVERFLOW\n#define SPI_RX_FIFO_OVERFLOW_POS   (6U)\n#define SPI_RX_FIFO_OVERFLOW_LEN   (1U)\n#define SPI_RX_FIFO_OVERFLOW_MSK   (((1U << SPI_RX_FIFO_OVERFLOW_LEN) - 1) << SPI_RX_FIFO_OVERFLOW_POS)\n#define SPI_RX_FIFO_OVERFLOW_UMSK  (~(((1U << SPI_RX_FIFO_OVERFLOW_LEN) - 1) << SPI_RX_FIFO_OVERFLOW_POS))\n#define SPI_RX_FIFO_UNDERFLOW      SPI_RX_FIFO_UNDERFLOW\n#define SPI_RX_FIFO_UNDERFLOW_POS  (7U)\n#define SPI_RX_FIFO_UNDERFLOW_LEN  (1U)\n#define SPI_RX_FIFO_UNDERFLOW_MSK  (((1U << SPI_RX_FIFO_UNDERFLOW_LEN) - 1) << SPI_RX_FIFO_UNDERFLOW_POS)\n#define SPI_RX_FIFO_UNDERFLOW_UMSK (~(((1U << SPI_RX_FIFO_UNDERFLOW_LEN) - 1) << SPI_RX_FIFO_UNDERFLOW_POS))\n\n/* 0x84 : spi_fifo_config_1 */\n#define SPI_FIFO_CONFIG_1_OFFSET (0x84)\n#define SPI_TX_FIFO_CNT          SPI_TX_FIFO_CNT\n#define SPI_TX_FIFO_CNT_POS      (0U)\n#define SPI_TX_FIFO_CNT_LEN      (3U)\n#define SPI_TX_FIFO_CNT_MSK      (((1U << SPI_TX_FIFO_CNT_LEN) - 1) << SPI_TX_FIFO_CNT_POS)\n#define SPI_TX_FIFO_CNT_UMSK     (~(((1U << SPI_TX_FIFO_CNT_LEN) - 1) << SPI_TX_FIFO_CNT_POS))\n#define SPI_RX_FIFO_CNT          SPI_RX_FIFO_CNT\n#define SPI_RX_FIFO_CNT_POS      (8U)\n#define SPI_RX_FIFO_CNT_LEN      (3U)\n#define SPI_RX_FIFO_CNT_MSK      (((1U << SPI_RX_FIFO_CNT_LEN) - 1) << SPI_RX_FIFO_CNT_POS)\n#define SPI_RX_FIFO_CNT_UMSK     (~(((1U << SPI_RX_FIFO_CNT_LEN) - 1) << SPI_RX_FIFO_CNT_POS))\n#define SPI_TX_FIFO_TH           SPI_TX_FIFO_TH\n#define SPI_TX_FIFO_TH_POS       (16U)\n#define SPI_TX_FIFO_TH_LEN       (2U)\n#define SPI_TX_FIFO_TH_MSK       (((1U << SPI_TX_FIFO_TH_LEN) - 1) << SPI_TX_FIFO_TH_POS)\n#define SPI_TX_FIFO_TH_UMSK      (~(((1U << SPI_TX_FIFO_TH_LEN) - 1) << SPI_TX_FIFO_TH_POS))\n#define SPI_RX_FIFO_TH           SPI_RX_FIFO_TH\n#define SPI_RX_FIFO_TH_POS       (24U)\n#define SPI_RX_FIFO_TH_LEN       (2U)\n#define SPI_RX_FIFO_TH_MSK       (((1U << SPI_RX_FIFO_TH_LEN) - 1) << SPI_RX_FIFO_TH_POS)\n#define SPI_RX_FIFO_TH_UMSK      (~(((1U << SPI_RX_FIFO_TH_LEN) - 1) << SPI_RX_FIFO_TH_POS))\n\n/* 0x88 : spi_fifo_wdata */\n#define SPI_FIFO_WDATA_OFFSET (0x88)\n#define SPI_FIFO_WDATA        SPI_FIFO_WDATA\n#define SPI_FIFO_WDATA_POS    (0U)\n#define SPI_FIFO_WDATA_LEN    (32U)\n#define SPI_FIFO_WDATA_MSK    (((1U << SPI_FIFO_WDATA_LEN) - 1) << SPI_FIFO_WDATA_POS)\n#define SPI_FIFO_WDATA_UMSK   (~(((1U << SPI_FIFO_WDATA_LEN) - 1) << SPI_FIFO_WDATA_POS))\n\n/* 0x8C : spi_fifo_rdata */\n#define SPI_FIFO_RDATA_OFFSET (0x8C)\n#define SPI_FIFO_RDATA        SPI_FIFO_RDATA\n#define SPI_FIFO_RDATA_POS    (0U)\n#define SPI_FIFO_RDATA_LEN    (32U)\n#define SPI_FIFO_RDATA_MSK    (((1U << SPI_FIFO_RDATA_LEN) - 1) << SPI_FIFO_RDATA_POS)\n#define SPI_FIFO_RDATA_UMSK   (~(((1U << SPI_FIFO_RDATA_LEN) - 1) << SPI_FIFO_RDATA_POS))\n\nstruct spi_reg {\n    /* 0x0 : spi_config */\n    union {\n        struct\n        {\n            uint32_t cr_spi_m_en        : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t cr_spi_s_en        : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t cr_spi_frame_size  : 2;  /* [ 3: 2],        r/w,        0x0 */\n            uint32_t cr_spi_sclk_pol    : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t cr_spi_sclk_ph     : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t cr_spi_bit_inv     : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t cr_spi_byte_inv    : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t cr_spi_rxd_ignr_en : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t cr_spi_m_cont_en   : 1;  /* [    9],        r/w,        0x0 */\n            uint32_t reserved_10        : 1;  /* [   10],       rsvd,        0x0 */\n            uint32_t cr_spi_deg_en      : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t cr_spi_deg_cnt     : 4;  /* [15:12],        r/w,        0x0 */\n            uint32_t reserved_16_31     : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } spi_config;\n\n    /* 0x4 : spi_int_sts */\n    union {\n        struct\n        {\n            uint32_t spi_end_int     : 1; /* [    0],          r,        0x0 */\n            uint32_t spi_txf_int     : 1; /* [    1],          r,        0x0 */\n            uint32_t spi_rxf_int     : 1; /* [    2],          r,        0x0 */\n            uint32_t spi_sto_int     : 1; /* [    3],          r,        0x0 */\n            uint32_t spi_txu_int     : 1; /* [    4],          r,        0x0 */\n            uint32_t spi_fer_int     : 1; /* [    5],          r,        0x0 */\n            uint32_t reserved_6_7    : 2; /* [ 7: 6],       rsvd,        0x0 */\n            uint32_t cr_spi_end_mask : 1; /* [    8],        r/w,        0x1 */\n            uint32_t cr_spi_txf_mask : 1; /* [    9],        r/w,        0x1 */\n            uint32_t cr_spi_rxf_mask : 1; /* [   10],        r/w,        0x1 */\n            uint32_t cr_spi_sto_mask : 1; /* [   11],        r/w,        0x1 */\n            uint32_t cr_spi_txu_mask : 1; /* [   12],        r/w,        0x1 */\n            uint32_t cr_spi_fer_mask : 1; /* [   13],        r/w,        0x1 */\n            uint32_t reserved_14_15  : 2; /* [15:14],       rsvd,        0x0 */\n            uint32_t cr_spi_end_clr  : 1; /* [   16],        w1c,        0x0 */\n            uint32_t rsvd_17         : 1; /* [   17],       rsvd,        0x0 */\n            uint32_t rsvd_18         : 1; /* [   18],       rsvd,        0x0 */\n            uint32_t cr_spi_sto_clr  : 1; /* [   19],        w1c,        0x0 */\n            uint32_t cr_spi_txu_clr  : 1; /* [   20],        w1c,        0x0 */\n            uint32_t rsvd_21         : 1; /* [   21],       rsvd,        0x0 */\n            uint32_t reserved_22_23  : 2; /* [23:22],       rsvd,        0x0 */\n            uint32_t cr_spi_end_en   : 1; /* [   24],        r/w,        0x1 */\n            uint32_t cr_spi_txf_en   : 1; /* [   25],        r/w,        0x1 */\n            uint32_t cr_spi_rxf_en   : 1; /* [   26],        r/w,        0x1 */\n            uint32_t cr_spi_sto_en   : 1; /* [   27],        r/w,        0x1 */\n            uint32_t cr_spi_txu_en   : 1; /* [   28],        r/w,        0x1 */\n            uint32_t cr_spi_fer_en   : 1; /* [   29],        r/w,        0x1 */\n            uint32_t reserved_30_31  : 2; /* [31:30],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } spi_int_sts;\n\n    /* 0x8 : spi_bus_busy */\n    union {\n        struct\n        {\n            uint32_t sts_spi_bus_busy : 1;  /* [    0],          r,        0x0 */\n            uint32_t reserved_1_31    : 31; /* [31: 1],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } spi_bus_busy;\n\n    /* 0xc  reserved */\n    uint8_t RESERVED0xc[4];\n\n    /* 0x10 : spi_prd_0 */\n    union {\n        struct\n        {\n            uint32_t cr_spi_prd_s      : 8; /* [ 7: 0],        r/w,        0xf */\n            uint32_t cr_spi_prd_p      : 8; /* [15: 8],        r/w,        0xf */\n            uint32_t cr_spi_prd_d_ph_0 : 8; /* [23:16],        r/w,        0xf */\n            uint32_t cr_spi_prd_d_ph_1 : 8; /* [31:24],        r/w,        0xf */\n        } BF;\n        uint32_t WORD;\n    } spi_prd_0;\n\n    /* 0x14 : spi_prd_1 */\n    union {\n        struct\n        {\n            uint32_t cr_spi_prd_i  : 8;  /* [ 7: 0],        r/w,        0xf */\n            uint32_t reserved_8_31 : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } spi_prd_1;\n\n    /* 0x18 : spi_rxd_ignr */\n    union {\n        struct\n        {\n            uint32_t cr_spi_rxd_ignr_p : 5;  /* [ 4: 0],        r/w,        0x0 */\n            uint32_t reserved_5_15     : 11; /* [15: 5],       rsvd,        0x0 */\n            uint32_t cr_spi_rxd_ignr_s : 5;  /* [20:16],        r/w,        0x0 */\n            uint32_t reserved_21_31    : 11; /* [31:21],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } spi_rxd_ignr;\n\n    /* 0x1C : spi_sto_value */\n    union {\n        struct\n        {\n            uint32_t cr_spi_sto_value : 12; /* [11: 0],        r/w,      0xfff */\n            uint32_t reserved_12_31   : 20; /* [31:12],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } spi_sto_value;\n\n    /* 0x20  reserved */\n    uint8_t RESERVED0x20[96];\n\n    /* 0x80 : spi_fifo_config_0 */\n    union {\n        struct\n        {\n            uint32_t spi_dma_tx_en     : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t spi_dma_rx_en     : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t tx_fifo_clr       : 1;  /* [    2],        w1c,        0x0 */\n            uint32_t rx_fifo_clr       : 1;  /* [    3],        w1c,        0x0 */\n            uint32_t tx_fifo_overflow  : 1;  /* [    4],          r,        0x0 */\n            uint32_t tx_fifo_underflow : 1;  /* [    5],          r,        0x0 */\n            uint32_t rx_fifo_overflow  : 1;  /* [    6],          r,        0x0 */\n            uint32_t rx_fifo_underflow : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } spi_fifo_config_0;\n\n    /* 0x84 : spi_fifo_config_1 */\n    union {\n        struct\n        {\n            uint32_t tx_fifo_cnt    : 3; /* [ 2: 0],          r,        0x4 */\n            uint32_t reserved_3_7   : 5; /* [ 7: 3],       rsvd,        0x0 */\n            uint32_t rx_fifo_cnt    : 3; /* [10: 8],          r,        0x0 */\n            uint32_t reserved_11_15 : 5; /* [15:11],       rsvd,        0x0 */\n            uint32_t tx_fifo_th     : 2; /* [17:16],        r/w,        0x0 */\n            uint32_t reserved_18_23 : 6; /* [23:18],       rsvd,        0x0 */\n            uint32_t rx_fifo_th     : 2; /* [25:24],        r/w,        0x0 */\n            uint32_t reserved_26_31 : 6; /* [31:26],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } spi_fifo_config_1;\n\n    /* 0x88 : spi_fifo_wdata */\n    union {\n        struct\n        {\n            uint32_t spi_fifo_wdata : 32; /* [31: 0],          w,          x */\n        } BF;\n        uint32_t WORD;\n    } spi_fifo_wdata;\n\n    /* 0x8C : spi_fifo_rdata */\n    union {\n        struct\n        {\n            uint32_t spi_fifo_rdata : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } spi_fifo_rdata;\n};\n\ntypedef volatile struct spi_reg spi_reg_t;\n\n#endif /* __SPI_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/timer_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    timer_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __TIMER_REG_H__\n#define __TIMER_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : TCCR */\n#define TIMER_TCCR_OFFSET (0x0)\n#define TIMER_CS_1        TIMER_CS_1\n#define TIMER_CS_1_POS    (2U)\n#define TIMER_CS_1_LEN    (2U)\n#define TIMER_CS_1_MSK    (((1U << TIMER_CS_1_LEN) - 1) << TIMER_CS_1_POS)\n#define TIMER_CS_1_UMSK   (~(((1U << TIMER_CS_1_LEN) - 1) << TIMER_CS_1_POS))\n#define TIMER_CS_2        TIMER_CS_2\n#define TIMER_CS_2_POS    (5U)\n#define TIMER_CS_2_LEN    (2U)\n#define TIMER_CS_2_MSK    (((1U << TIMER_CS_2_LEN) - 1) << TIMER_CS_2_POS)\n#define TIMER_CS_2_UMSK   (~(((1U << TIMER_CS_2_LEN) - 1) << TIMER_CS_2_POS))\n#define TIMER_CS_WDT      TIMER_CS_WDT\n#define TIMER_CS_WDT_POS  (8U)\n#define TIMER_CS_WDT_LEN  (2U)\n#define TIMER_CS_WDT_MSK  (((1U << TIMER_CS_WDT_LEN) - 1) << TIMER_CS_WDT_POS)\n#define TIMER_CS_WDT_UMSK (~(((1U << TIMER_CS_WDT_LEN) - 1) << TIMER_CS_WDT_POS))\n\n/* 0x10 : TMR2_0 */\n#define TIMER_TMR2_0_OFFSET (0x10)\n#define TIMER_TMR           TIMER_TMR\n#define TIMER_TMR_POS       (0U)\n#define TIMER_TMR_LEN       (32U)\n#define TIMER_TMR_MSK       (((1U << TIMER_TMR_LEN) - 1) << TIMER_TMR_POS)\n#define TIMER_TMR_UMSK      (~(((1U << TIMER_TMR_LEN) - 1) << TIMER_TMR_POS))\n\n/* 0x14 : TMR2_1 */\n#define TIMER_TMR2_1_OFFSET (0x14)\n#define TIMER_TMR           TIMER_TMR\n#define TIMER_TMR_POS       (0U)\n#define TIMER_TMR_LEN       (32U)\n#define TIMER_TMR_MSK       (((1U << TIMER_TMR_LEN) - 1) << TIMER_TMR_POS)\n#define TIMER_TMR_UMSK      (~(((1U << TIMER_TMR_LEN) - 1) << TIMER_TMR_POS))\n\n/* 0x18 : TMR2_2 */\n#define TIMER_TMR2_2_OFFSET (0x18)\n#define TIMER_TMR           TIMER_TMR\n#define TIMER_TMR_POS       (0U)\n#define TIMER_TMR_LEN       (32U)\n#define TIMER_TMR_MSK       (((1U << TIMER_TMR_LEN) - 1) << TIMER_TMR_POS)\n#define TIMER_TMR_UMSK      (~(((1U << TIMER_TMR_LEN) - 1) << TIMER_TMR_POS))\n\n/* 0x1C : TMR3_0 */\n#define TIMER_TMR3_0_OFFSET (0x1C)\n#define TIMER_TMR           TIMER_TMR\n#define TIMER_TMR_POS       (0U)\n#define TIMER_TMR_LEN       (32U)\n#define TIMER_TMR_MSK       (((1U << TIMER_TMR_LEN) - 1) << TIMER_TMR_POS)\n#define TIMER_TMR_UMSK      (~(((1U << TIMER_TMR_LEN) - 1) << TIMER_TMR_POS))\n\n/* 0x20 : TMR3_1 */\n#define TIMER_TMR3_1_OFFSET (0x20)\n#define TIMER_TMR           TIMER_TMR\n#define TIMER_TMR_POS       (0U)\n#define TIMER_TMR_LEN       (32U)\n#define TIMER_TMR_MSK       (((1U << TIMER_TMR_LEN) - 1) << TIMER_TMR_POS)\n#define TIMER_TMR_UMSK      (~(((1U << TIMER_TMR_LEN) - 1) << TIMER_TMR_POS))\n\n/* 0x24 : TMR3_2 */\n#define TIMER_TMR3_2_OFFSET (0x24)\n#define TIMER_TMR           TIMER_TMR\n#define TIMER_TMR_POS       (0U)\n#define TIMER_TMR_LEN       (32U)\n#define TIMER_TMR_MSK       (((1U << TIMER_TMR_LEN) - 1) << TIMER_TMR_POS)\n#define TIMER_TMR_UMSK      (~(((1U << TIMER_TMR_LEN) - 1) << TIMER_TMR_POS))\n\n/* 0x2C : TCR2 */\n#define TIMER_TCR2_OFFSET (0x2C)\n#define TIMER_TCR         TIMER_TCR\n#define TIMER_TCR_POS     (0U)\n#define TIMER_TCR_LEN     (32U)\n#define TIMER_TCR_MSK     (((1U << TIMER_TCR_LEN) - 1) << TIMER_TCR_POS)\n#define TIMER_TCR_UMSK    (~(((1U << TIMER_TCR_LEN) - 1) << TIMER_TCR_POS))\n\n/* 0x30 : TCR3 */\n#define TIMER_TCR3_OFFSET (0x30)\n#define TIMER_TCR         TIMER_TCR\n#define TIMER_TCR_POS     (0U)\n#define TIMER_TCR_LEN     (32U)\n#define TIMER_TCR_MSK     (((1U << TIMER_TCR_LEN) - 1) << TIMER_TCR_POS)\n#define TIMER_TCR_UMSK    (~(((1U << TIMER_TCR_LEN) - 1) << TIMER_TCR_POS))\n\n/* 0x38 : TMSR2 */\n#define TIMER_TMSR2_OFFSET (0x38)\n#define TIMER_TMSR_0       TIMER_TMSR_0\n#define TIMER_TMSR_0_POS   (0U)\n#define TIMER_TMSR_0_LEN   (1U)\n#define TIMER_TMSR_0_MSK   (((1U << TIMER_TMSR_0_LEN) - 1) << TIMER_TMSR_0_POS)\n#define TIMER_TMSR_0_UMSK  (~(((1U << TIMER_TMSR_0_LEN) - 1) << TIMER_TMSR_0_POS))\n#define TIMER_TMSR_1       TIMER_TMSR_1\n#define TIMER_TMSR_1_POS   (1U)\n#define TIMER_TMSR_1_LEN   (1U)\n#define TIMER_TMSR_1_MSK   (((1U << TIMER_TMSR_1_LEN) - 1) << TIMER_TMSR_1_POS)\n#define TIMER_TMSR_1_UMSK  (~(((1U << TIMER_TMSR_1_LEN) - 1) << TIMER_TMSR_1_POS))\n#define TIMER_TMSR_2       TIMER_TMSR_2\n#define TIMER_TMSR_2_POS   (2U)\n#define TIMER_TMSR_2_LEN   (1U)\n#define TIMER_TMSR_2_MSK   (((1U << TIMER_TMSR_2_LEN) - 1) << TIMER_TMSR_2_POS)\n#define TIMER_TMSR_2_UMSK  (~(((1U << TIMER_TMSR_2_LEN) - 1) << TIMER_TMSR_2_POS))\n\n/* 0x3C : TMSR3 */\n#define TIMER_TMSR3_OFFSET (0x3C)\n#define TIMER_TMSR_0       TIMER_TMSR_0\n#define TIMER_TMSR_0_POS   (0U)\n#define TIMER_TMSR_0_LEN   (1U)\n#define TIMER_TMSR_0_MSK   (((1U << TIMER_TMSR_0_LEN) - 1) << TIMER_TMSR_0_POS)\n#define TIMER_TMSR_0_UMSK  (~(((1U << TIMER_TMSR_0_LEN) - 1) << TIMER_TMSR_0_POS))\n#define TIMER_TMSR_1       TIMER_TMSR_1\n#define TIMER_TMSR_1_POS   (1U)\n#define TIMER_TMSR_1_LEN   (1U)\n#define TIMER_TMSR_1_MSK   (((1U << TIMER_TMSR_1_LEN) - 1) << TIMER_TMSR_1_POS)\n#define TIMER_TMSR_1_UMSK  (~(((1U << TIMER_TMSR_1_LEN) - 1) << TIMER_TMSR_1_POS))\n#define TIMER_TMSR_2       TIMER_TMSR_2\n#define TIMER_TMSR_2_POS   (2U)\n#define TIMER_TMSR_2_LEN   (1U)\n#define TIMER_TMSR_2_MSK   (((1U << TIMER_TMSR_2_LEN) - 1) << TIMER_TMSR_2_POS)\n#define TIMER_TMSR_2_UMSK  (~(((1U << TIMER_TMSR_2_LEN) - 1) << TIMER_TMSR_2_POS))\n\n/* 0x44 : TIER2 */\n#define TIMER_TIER2_OFFSET (0x44)\n#define TIMER_TIER_0       TIMER_TIER_0\n#define TIMER_TIER_0_POS   (0U)\n#define TIMER_TIER_0_LEN   (1U)\n#define TIMER_TIER_0_MSK   (((1U << TIMER_TIER_0_LEN) - 1) << TIMER_TIER_0_POS)\n#define TIMER_TIER_0_UMSK  (~(((1U << TIMER_TIER_0_LEN) - 1) << TIMER_TIER_0_POS))\n#define TIMER_TIER_1       TIMER_TIER_1\n#define TIMER_TIER_1_POS   (1U)\n#define TIMER_TIER_1_LEN   (1U)\n#define TIMER_TIER_1_MSK   (((1U << TIMER_TIER_1_LEN) - 1) << TIMER_TIER_1_POS)\n#define TIMER_TIER_1_UMSK  (~(((1U << TIMER_TIER_1_LEN) - 1) << TIMER_TIER_1_POS))\n#define TIMER_TIER_2       TIMER_TIER_2\n#define TIMER_TIER_2_POS   (2U)\n#define TIMER_TIER_2_LEN   (1U)\n#define TIMER_TIER_2_MSK   (((1U << TIMER_TIER_2_LEN) - 1) << TIMER_TIER_2_POS)\n#define TIMER_TIER_2_UMSK  (~(((1U << TIMER_TIER_2_LEN) - 1) << TIMER_TIER_2_POS))\n\n/* 0x48 : TIER3 */\n#define TIMER_TIER3_OFFSET (0x48)\n#define TIMER_TIER_0       TIMER_TIER_0\n#define TIMER_TIER_0_POS   (0U)\n#define TIMER_TIER_0_LEN   (1U)\n#define TIMER_TIER_0_MSK   (((1U << TIMER_TIER_0_LEN) - 1) << TIMER_TIER_0_POS)\n#define TIMER_TIER_0_UMSK  (~(((1U << TIMER_TIER_0_LEN) - 1) << TIMER_TIER_0_POS))\n#define TIMER_TIER_1       TIMER_TIER_1\n#define TIMER_TIER_1_POS   (1U)\n#define TIMER_TIER_1_LEN   (1U)\n#define TIMER_TIER_1_MSK   (((1U << TIMER_TIER_1_LEN) - 1) << TIMER_TIER_1_POS)\n#define TIMER_TIER_1_UMSK  (~(((1U << TIMER_TIER_1_LEN) - 1) << TIMER_TIER_1_POS))\n#define TIMER_TIER_2       TIMER_TIER_2\n#define TIMER_TIER_2_POS   (2U)\n#define TIMER_TIER_2_LEN   (1U)\n#define TIMER_TIER_2_MSK   (((1U << TIMER_TIER_2_LEN) - 1) << TIMER_TIER_2_POS)\n#define TIMER_TIER_2_UMSK  (~(((1U << TIMER_TIER_2_LEN) - 1) << TIMER_TIER_2_POS))\n\n/* 0x50 : TPLVR2 */\n#define TIMER_TPLVR2_OFFSET (0x50)\n#define TIMER_TPLVR         TIMER_TPLVR\n#define TIMER_TPLVR_POS     (0U)\n#define TIMER_TPLVR_LEN     (32U)\n#define TIMER_TPLVR_MSK     (((1U << TIMER_TPLVR_LEN) - 1) << TIMER_TPLVR_POS)\n#define TIMER_TPLVR_UMSK    (~(((1U << TIMER_TPLVR_LEN) - 1) << TIMER_TPLVR_POS))\n\n/* 0x54 : TPLVR3 */\n#define TIMER_TPLVR3_OFFSET (0x54)\n#define TIMER_TPLVR         TIMER_TPLVR\n#define TIMER_TPLVR_POS     (0U)\n#define TIMER_TPLVR_LEN     (32U)\n#define TIMER_TPLVR_MSK     (((1U << TIMER_TPLVR_LEN) - 1) << TIMER_TPLVR_POS)\n#define TIMER_TPLVR_UMSK    (~(((1U << TIMER_TPLVR_LEN) - 1) << TIMER_TPLVR_POS))\n\n/* 0x5C : TPLCR2 */\n#define TIMER_TPLCR2_OFFSET (0x5C)\n#define TIMER_TPLCR         TIMER_TPLCR\n#define TIMER_TPLCR_POS     (0U)\n#define TIMER_TPLCR_LEN     (2U)\n#define TIMER_TPLCR_MSK     (((1U << TIMER_TPLCR_LEN) - 1) << TIMER_TPLCR_POS)\n#define TIMER_TPLCR_UMSK    (~(((1U << TIMER_TPLCR_LEN) - 1) << TIMER_TPLCR_POS))\n\n/* 0x60 : TPLCR3 */\n#define TIMER_TPLCR3_OFFSET (0x60)\n#define TIMER_TPLCR         TIMER_TPLCR\n#define TIMER_TPLCR_POS     (0U)\n#define TIMER_TPLCR_LEN     (2U)\n#define TIMER_TPLCR_MSK     (((1U << TIMER_TPLCR_LEN) - 1) << TIMER_TPLCR_POS)\n#define TIMER_TPLCR_UMSK    (~(((1U << TIMER_TPLCR_LEN) - 1) << TIMER_TPLCR_POS))\n\n/* 0x64 : WMER */\n#define TIMER_WMER_OFFSET (0x64)\n#define TIMER_WE          TIMER_WE\n#define TIMER_WE_POS      (0U)\n#define TIMER_WE_LEN      (1U)\n#define TIMER_WE_MSK      (((1U << TIMER_WE_LEN) - 1) << TIMER_WE_POS)\n#define TIMER_WE_UMSK     (~(((1U << TIMER_WE_LEN) - 1) << TIMER_WE_POS))\n#define TIMER_WRIE        TIMER_WRIE\n#define TIMER_WRIE_POS    (1U)\n#define TIMER_WRIE_LEN    (1U)\n#define TIMER_WRIE_MSK    (((1U << TIMER_WRIE_LEN) - 1) << TIMER_WRIE_POS)\n#define TIMER_WRIE_UMSK   (~(((1U << TIMER_WRIE_LEN) - 1) << TIMER_WRIE_POS))\n\n/* 0x68 : WMR */\n#define TIMER_WMR_OFFSET (0x68)\n#define TIMER_WMR        TIMER_WMR\n#define TIMER_WMR_POS    (0U)\n#define TIMER_WMR_LEN    (16U)\n#define TIMER_WMR_MSK    (((1U << TIMER_WMR_LEN) - 1) << TIMER_WMR_POS)\n#define TIMER_WMR_UMSK   (~(((1U << TIMER_WMR_LEN) - 1) << TIMER_WMR_POS))\n\n/* 0x6C : WVR */\n#define TIMER_WVR_OFFSET (0x6C)\n#define TIMER_WVR        TIMER_WVR\n#define TIMER_WVR_POS    (0U)\n#define TIMER_WVR_LEN    (16U)\n#define TIMER_WVR_MSK    (((1U << TIMER_WVR_LEN) - 1) << TIMER_WVR_POS)\n#define TIMER_WVR_UMSK   (~(((1U << TIMER_WVR_LEN) - 1) << TIMER_WVR_POS))\n\n/* 0x70 : WSR */\n#define TIMER_WSR_OFFSET (0x70)\n#define TIMER_WTS        TIMER_WTS\n#define TIMER_WTS_POS    (0U)\n#define TIMER_WTS_LEN    (1U)\n#define TIMER_WTS_MSK    (((1U << TIMER_WTS_LEN) - 1) << TIMER_WTS_POS)\n#define TIMER_WTS_UMSK   (~(((1U << TIMER_WTS_LEN) - 1) << TIMER_WTS_POS))\n\n/* 0x78 : TICR2 */\n#define TIMER_TICR2_OFFSET (0x78)\n#define TIMER_TCLR_0       TIMER_TCLR_0\n#define TIMER_TCLR_0_POS   (0U)\n#define TIMER_TCLR_0_LEN   (1U)\n#define TIMER_TCLR_0_MSK   (((1U << TIMER_TCLR_0_LEN) - 1) << TIMER_TCLR_0_POS)\n#define TIMER_TCLR_0_UMSK  (~(((1U << TIMER_TCLR_0_LEN) - 1) << TIMER_TCLR_0_POS))\n#define TIMER_TCLR_1       TIMER_TCLR_1\n#define TIMER_TCLR_1_POS   (1U)\n#define TIMER_TCLR_1_LEN   (1U)\n#define TIMER_TCLR_1_MSK   (((1U << TIMER_TCLR_1_LEN) - 1) << TIMER_TCLR_1_POS)\n#define TIMER_TCLR_1_UMSK  (~(((1U << TIMER_TCLR_1_LEN) - 1) << TIMER_TCLR_1_POS))\n#define TIMER_TCLR_2       TIMER_TCLR_2\n#define TIMER_TCLR_2_POS   (2U)\n#define TIMER_TCLR_2_LEN   (1U)\n#define TIMER_TCLR_2_MSK   (((1U << TIMER_TCLR_2_LEN) - 1) << TIMER_TCLR_2_POS)\n#define TIMER_TCLR_2_UMSK  (~(((1U << TIMER_TCLR_2_LEN) - 1) << TIMER_TCLR_2_POS))\n\n/* 0x7C : TICR3 */\n#define TIMER_TICR3_OFFSET (0x7C)\n#define TIMER_TCLR_0       TIMER_TCLR_0\n#define TIMER_TCLR_0_POS   (0U)\n#define TIMER_TCLR_0_LEN   (1U)\n#define TIMER_TCLR_0_MSK   (((1U << TIMER_TCLR_0_LEN) - 1) << TIMER_TCLR_0_POS)\n#define TIMER_TCLR_0_UMSK  (~(((1U << TIMER_TCLR_0_LEN) - 1) << TIMER_TCLR_0_POS))\n#define TIMER_TCLR_1       TIMER_TCLR_1\n#define TIMER_TCLR_1_POS   (1U)\n#define TIMER_TCLR_1_LEN   (1U)\n#define TIMER_TCLR_1_MSK   (((1U << TIMER_TCLR_1_LEN) - 1) << TIMER_TCLR_1_POS)\n#define TIMER_TCLR_1_UMSK  (~(((1U << TIMER_TCLR_1_LEN) - 1) << TIMER_TCLR_1_POS))\n#define TIMER_TCLR_2       TIMER_TCLR_2\n#define TIMER_TCLR_2_POS   (2U)\n#define TIMER_TCLR_2_LEN   (1U)\n#define TIMER_TCLR_2_MSK   (((1U << TIMER_TCLR_2_LEN) - 1) << TIMER_TCLR_2_POS)\n#define TIMER_TCLR_2_UMSK  (~(((1U << TIMER_TCLR_2_LEN) - 1) << TIMER_TCLR_2_POS))\n\n/* 0x80 : WICR */\n#define TIMER_WICR_OFFSET (0x80)\n#define TIMER_WICLR       TIMER_WICLR\n#define TIMER_WICLR_POS   (0U)\n#define TIMER_WICLR_LEN   (1U)\n#define TIMER_WICLR_MSK   (((1U << TIMER_WICLR_LEN) - 1) << TIMER_WICLR_POS)\n#define TIMER_WICLR_UMSK  (~(((1U << TIMER_WICLR_LEN) - 1) << TIMER_WICLR_POS))\n\n/* 0x84 : TCER */\n#define TIMER_TCER_OFFSET (0x84)\n#define TIMER2_EN         TIMER2_EN\n#define TIMER2_EN_POS     (1U)\n#define TIMER2_EN_LEN     (1U)\n#define TIMER2_EN_MSK     (((1U << TIMER2_EN_LEN) - 1) << TIMER2_EN_POS)\n#define TIMER2_EN_UMSK    (~(((1U << TIMER2_EN_LEN) - 1) << TIMER2_EN_POS))\n#define TIMER3_EN         TIMER3_EN\n#define TIMER3_EN_POS     (2U)\n#define TIMER3_EN_LEN     (1U)\n#define TIMER3_EN_MSK     (((1U << TIMER3_EN_LEN) - 1) << TIMER3_EN_POS)\n#define TIMER3_EN_UMSK    (~(((1U << TIMER3_EN_LEN) - 1) << TIMER3_EN_POS))\n\n/* 0x88 : TCMR */\n#define TIMER_TCMR_OFFSET (0x88)\n#define TIMER2_MODE       TIMER2_MODE\n#define TIMER2_MODE_POS   (1U)\n#define TIMER2_MODE_LEN   (1U)\n#define TIMER2_MODE_MSK   (((1U << TIMER2_MODE_LEN) - 1) << TIMER2_MODE_POS)\n#define TIMER2_MODE_UMSK  (~(((1U << TIMER2_MODE_LEN) - 1) << TIMER2_MODE_POS))\n#define TIMER3_MODE       TIMER3_MODE\n#define TIMER3_MODE_POS   (2U)\n#define TIMER3_MODE_LEN   (1U)\n#define TIMER3_MODE_MSK   (((1U << TIMER3_MODE_LEN) - 1) << TIMER3_MODE_POS)\n#define TIMER3_MODE_UMSK  (~(((1U << TIMER3_MODE_LEN) - 1) << TIMER3_MODE_POS))\n\n/* 0x90 : TILR2 */\n#define TIMER_TILR2_OFFSET (0x90)\n#define TIMER_TILR_0       TIMER_TILR_0\n#define TIMER_TILR_0_POS   (0U)\n#define TIMER_TILR_0_LEN   (1U)\n#define TIMER_TILR_0_MSK   (((1U << TIMER_TILR_0_LEN) - 1) << TIMER_TILR_0_POS)\n#define TIMER_TILR_0_UMSK  (~(((1U << TIMER_TILR_0_LEN) - 1) << TIMER_TILR_0_POS))\n#define TIMER_TILR_1       TIMER_TILR_1\n#define TIMER_TILR_1_POS   (1U)\n#define TIMER_TILR_1_LEN   (1U)\n#define TIMER_TILR_1_MSK   (((1U << TIMER_TILR_1_LEN) - 1) << TIMER_TILR_1_POS)\n#define TIMER_TILR_1_UMSK  (~(((1U << TIMER_TILR_1_LEN) - 1) << TIMER_TILR_1_POS))\n#define TIMER_TILR_2       TIMER_TILR_2\n#define TIMER_TILR_2_POS   (2U)\n#define TIMER_TILR_2_LEN   (1U)\n#define TIMER_TILR_2_MSK   (((1U << TIMER_TILR_2_LEN) - 1) << TIMER_TILR_2_POS)\n#define TIMER_TILR_2_UMSK  (~(((1U << TIMER_TILR_2_LEN) - 1) << TIMER_TILR_2_POS))\n\n/* 0x94 : TILR3 */\n#define TIMER_TILR3_OFFSET (0x94)\n#define TIMER_TILR_0       TIMER_TILR_0\n#define TIMER_TILR_0_POS   (0U)\n#define TIMER_TILR_0_LEN   (1U)\n#define TIMER_TILR_0_MSK   (((1U << TIMER_TILR_0_LEN) - 1) << TIMER_TILR_0_POS)\n#define TIMER_TILR_0_UMSK  (~(((1U << TIMER_TILR_0_LEN) - 1) << TIMER_TILR_0_POS))\n#define TIMER_TILR_1       TIMER_TILR_1\n#define TIMER_TILR_1_POS   (1U)\n#define TIMER_TILR_1_LEN   (1U)\n#define TIMER_TILR_1_MSK   (((1U << TIMER_TILR_1_LEN) - 1) << TIMER_TILR_1_POS)\n#define TIMER_TILR_1_UMSK  (~(((1U << TIMER_TILR_1_LEN) - 1) << TIMER_TILR_1_POS))\n#define TIMER_TILR_2       TIMER_TILR_2\n#define TIMER_TILR_2_POS   (2U)\n#define TIMER_TILR_2_LEN   (1U)\n#define TIMER_TILR_2_MSK   (((1U << TIMER_TILR_2_LEN) - 1) << TIMER_TILR_2_POS)\n#define TIMER_TILR_2_UMSK  (~(((1U << TIMER_TILR_2_LEN) - 1) << TIMER_TILR_2_POS))\n\n/* 0x98 : WCR */\n#define TIMER_WCR_OFFSET (0x98)\n#define TIMER_WCR        TIMER_WCR\n#define TIMER_WCR_POS    (0U)\n#define TIMER_WCR_LEN    (1U)\n#define TIMER_WCR_MSK    (((1U << TIMER_WCR_LEN) - 1) << TIMER_WCR_POS)\n#define TIMER_WCR_UMSK   (~(((1U << TIMER_WCR_LEN) - 1) << TIMER_WCR_POS))\n\n/* 0x9C : WFAR */\n#define TIMER_WFAR_OFFSET (0x9C)\n#define TIMER_WFAR        TIMER_WFAR\n#define TIMER_WFAR_POS    (0U)\n#define TIMER_WFAR_LEN    (16U)\n#define TIMER_WFAR_MSK    (((1U << TIMER_WFAR_LEN) - 1) << TIMER_WFAR_POS)\n#define TIMER_WFAR_UMSK   (~(((1U << TIMER_WFAR_LEN) - 1) << TIMER_WFAR_POS))\n\n/* 0xA0 : WSAR */\n#define TIMER_WSAR_OFFSET (0xA0)\n#define TIMER_WSAR        TIMER_WSAR\n#define TIMER_WSAR_POS    (0U)\n#define TIMER_WSAR_LEN    (16U)\n#define TIMER_WSAR_MSK    (((1U << TIMER_WSAR_LEN) - 1) << TIMER_WSAR_POS)\n#define TIMER_WSAR_UMSK   (~(((1U << TIMER_WSAR_LEN) - 1) << TIMER_WSAR_POS))\n\n/* 0xA8 : TCVWR2 */\n#define TIMER_TCVWR2_OFFSET (0xA8)\n#define TIMER_TCVWR         TIMER_TCVWR\n#define TIMER_TCVWR_POS     (0U)\n#define TIMER_TCVWR_LEN     (32U)\n#define TIMER_TCVWR_MSK     (((1U << TIMER_TCVWR_LEN) - 1) << TIMER_TCVWR_POS)\n#define TIMER_TCVWR_UMSK    (~(((1U << TIMER_TCVWR_LEN) - 1) << TIMER_TCVWR_POS))\n\n/* 0xAC : TCVWR3 */\n#define TIMER_TCVWR3_OFFSET (0xAC)\n#define TIMER_TCVWR         TIMER_TCVWR\n#define TIMER_TCVWR_POS     (0U)\n#define TIMER_TCVWR_LEN     (32U)\n#define TIMER_TCVWR_MSK     (((1U << TIMER_TCVWR_LEN) - 1) << TIMER_TCVWR_POS)\n#define TIMER_TCVWR_UMSK    (~(((1U << TIMER_TCVWR_LEN) - 1) << TIMER_TCVWR_POS))\n\n/* 0xB4 : TCVSYN2 */\n#define TIMER_TCVSYN2_OFFSET (0xB4)\n#define TIMER_TCVSYN2        TIMER_TCVSYN2\n#define TIMER_TCVSYN2_POS    (0U)\n#define TIMER_TCVSYN2_LEN    (32U)\n#define TIMER_TCVSYN2_MSK    (((1U << TIMER_TCVSYN2_LEN) - 1) << TIMER_TCVSYN2_POS)\n#define TIMER_TCVSYN2_UMSK   (~(((1U << TIMER_TCVSYN2_LEN) - 1) << TIMER_TCVSYN2_POS))\n\n/* 0xB8 : TCVSYN3 */\n#define TIMER_TCVSYN3_OFFSET (0xB8)\n#define TIMER_TCVSYN3        TIMER_TCVSYN3\n#define TIMER_TCVSYN3_POS    (0U)\n#define TIMER_TCVSYN3_LEN    (32U)\n#define TIMER_TCVSYN3_MSK    (((1U << TIMER_TCVSYN3_LEN) - 1) << TIMER_TCVSYN3_POS)\n#define TIMER_TCVSYN3_UMSK   (~(((1U << TIMER_TCVSYN3_LEN) - 1) << TIMER_TCVSYN3_POS))\n\n/* 0xBC : TCDR */\n#define TIMER_TCDR_OFFSET (0xBC)\n#define TIMER_TCDR2       TIMER_TCDR2\n#define TIMER_TCDR2_POS   (8U)\n#define TIMER_TCDR2_LEN   (8U)\n#define TIMER_TCDR2_MSK   (((1U << TIMER_TCDR2_LEN) - 1) << TIMER_TCDR2_POS)\n#define TIMER_TCDR2_UMSK  (~(((1U << TIMER_TCDR2_LEN) - 1) << TIMER_TCDR2_POS))\n#define TIMER_TCDR3       TIMER_TCDR3\n#define TIMER_TCDR3_POS   (16U)\n#define TIMER_TCDR3_LEN   (8U)\n#define TIMER_TCDR3_MSK   (((1U << TIMER_TCDR3_LEN) - 1) << TIMER_TCDR3_POS)\n#define TIMER_TCDR3_UMSK  (~(((1U << TIMER_TCDR3_LEN) - 1) << TIMER_TCDR3_POS))\n#define TIMER_WCDR        TIMER_WCDR\n#define TIMER_WCDR_POS    (24U)\n#define TIMER_WCDR_LEN    (8U)\n#define TIMER_WCDR_MSK    (((1U << TIMER_WCDR_LEN) - 1) << TIMER_WCDR_POS)\n#define TIMER_WCDR_UMSK   (~(((1U << TIMER_WCDR_LEN) - 1) << TIMER_WCDR_POS))\n\nstruct timer_reg {\n    /* 0x0 : TCCR */\n    union {\n        struct\n        {\n            uint32_t reserved_0_1   : 2;  /* [ 1: 0],       rsvd,        0x0 */\n            uint32_t cs_1           : 2;  /* [ 3: 2],        r/w,        0x0 */\n            uint32_t RESERVED_4     : 1;  /* [    4],       rsvd,        0x0 */\n            uint32_t cs_2           : 2;  /* [ 6: 5],        r/w,        0x0 */\n            uint32_t RESERVED_7     : 1;  /* [    7],       rsvd,        0x0 */\n            uint32_t cs_wdt         : 2;  /* [ 9: 8],        r/w,        0x0 */\n            uint32_t reserved_10_31 : 22; /* [31:10],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TCCR;\n\n    /* 0x4  reserved */\n    uint8_t RESERVED0x4[12];\n\n    /* 0x10 : TMR2_0 */\n    union {\n        struct\n        {\n            uint32_t tmr : 32; /* [31: 0],        r/w, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } TMR2_0;\n\n    /* 0x14 : TMR2_1 */\n    union {\n        struct\n        {\n            uint32_t tmr : 32; /* [31: 0],        r/w, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } TMR2_1;\n\n    /* 0x18 : TMR2_2 */\n    union {\n        struct\n        {\n            uint32_t tmr : 32; /* [31: 0],        r/w, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } TMR2_2;\n\n    /* 0x1C : TMR3_0 */\n    union {\n        struct\n        {\n            uint32_t tmr : 32; /* [31: 0],        r/w, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } TMR3_0;\n\n    /* 0x20 : TMR3_1 */\n    union {\n        struct\n        {\n            uint32_t tmr : 32; /* [31: 0],        r/w, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } TMR3_1;\n\n    /* 0x24 : TMR3_2 */\n    union {\n        struct\n        {\n            uint32_t tmr : 32; /* [31: 0],        r/w, 0xffffffffL */\n        } BF;\n        uint32_t WORD;\n    } TMR3_2;\n\n    /* 0x28  reserved */\n    uint8_t RESERVED0x28[4];\n\n    /* 0x2C : TCR2 */\n    union {\n        struct\n        {\n            uint32_t tcr : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TCR2;\n\n    /* 0x30 : TCR3 */\n    union {\n        struct\n        {\n            uint32_t tcr : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TCR3;\n\n    /* 0x34  reserved */\n    uint8_t RESERVED0x34[4];\n\n    /* 0x38 : TMSR2 */\n    union {\n        struct\n        {\n            uint32_t tmsr_0        : 1;  /* [    0],          r,        0x0 */\n            uint32_t tmsr_1        : 1;  /* [    1],          r,        0x0 */\n            uint32_t tmsr_2        : 1;  /* [    2],          r,        0x0 */\n            uint32_t reserved_3_31 : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TMSR2;\n\n    /* 0x3C : TMSR3 */\n    union {\n        struct\n        {\n            uint32_t tmsr_0        : 1;  /* [    0],          r,        0x0 */\n            uint32_t tmsr_1        : 1;  /* [    1],          r,        0x0 */\n            uint32_t tmsr_2        : 1;  /* [    2],          r,        0x0 */\n            uint32_t reserved_3_31 : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TMSR3;\n\n    /* 0x40  reserved */\n    uint8_t RESERVED0x40[4];\n\n    /* 0x44 : TIER2 */\n    union {\n        struct\n        {\n            uint32_t tier_0        : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t tier_1        : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t tier_2        : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t reserved_3_31 : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TIER2;\n\n    /* 0x48 : TIER3 */\n    union {\n        struct\n        {\n            uint32_t tier_0        : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t tier_1        : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t tier_2        : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t reserved_3_31 : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TIER3;\n\n    /* 0x4c  reserved */\n    uint8_t RESERVED0x4c[4];\n\n    /* 0x50 : TPLVR2 */\n    union {\n        struct\n        {\n            uint32_t tplvr : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TPLVR2;\n\n    /* 0x54 : TPLVR3 */\n    union {\n        struct\n        {\n            uint32_t tplvr : 32; /* [31: 0],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TPLVR3;\n\n    /* 0x58  reserved */\n    uint8_t RESERVED0x58[4];\n\n    /* 0x5C : TPLCR2 */\n    union {\n        struct\n        {\n            uint32_t tplcr         : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_31 : 30; /* [31: 2],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TPLCR2;\n\n    /* 0x60 : TPLCR3 */\n    union {\n        struct\n        {\n            uint32_t tplcr         : 2;  /* [ 1: 0],        r/w,        0x0 */\n            uint32_t reserved_2_31 : 30; /* [31: 2],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TPLCR3;\n\n    /* 0x64 : WMER */\n    union {\n        struct\n        {\n            uint32_t we            : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t wrie          : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t reserved_2_31 : 30; /* [31: 2],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } WMER;\n\n    /* 0x68 : WMR */\n    union {\n        struct\n        {\n            uint32_t wmr            : 16; /* [15: 0],        r/w,     0xffff */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } WMR;\n\n    /* 0x6C : WVR */\n    union {\n        struct\n        {\n            uint32_t wvr            : 16; /* [15: 0],          r,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } WVR;\n\n    /* 0x70 : WSR */\n    union {\n        struct\n        {\n            uint32_t wts           : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1_31 : 31; /* [31: 1],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } WSR;\n\n    /* 0x74  reserved */\n    uint8_t RESERVED0x74[4];\n\n    /* 0x78 : TICR2 */\n    union {\n        struct\n        {\n            uint32_t tclr_0        : 1;  /* [    0],          w,        0x0 */\n            uint32_t tclr_1        : 1;  /* [    1],          w,        0x0 */\n            uint32_t tclr_2        : 1;  /* [    2],          w,        0x0 */\n            uint32_t reserved_3_31 : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TICR2;\n\n    /* 0x7C : TICR3 */\n    union {\n        struct\n        {\n            uint32_t tclr_0        : 1;  /* [    0],          w,        0x0 */\n            uint32_t tclr_1        : 1;  /* [    1],          w,        0x0 */\n            uint32_t tclr_2        : 1;  /* [    2],          w,        0x0 */\n            uint32_t reserved_3_31 : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TICR3;\n\n    /* 0x80 : WICR */\n    union {\n        struct\n        {\n            uint32_t wiclr         : 1;  /* [    0],          w,        0x0 */\n            uint32_t reserved_1_31 : 31; /* [31: 1],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } WICR;\n\n    /* 0x84 : TCER */\n    union {\n        struct\n        {\n            uint32_t reserved_0    : 1;  /* [    0],       rsvd,        0x0 */\n            uint32_t timer2_en     : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t timer3_en     : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t reserved_3_31 : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TCER;\n\n    /* 0x88 : TCMR */\n    union {\n        struct\n        {\n            uint32_t reserved_0    : 1;  /* [    0],       rsvd,        0x0 */\n            uint32_t timer2_mode   : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t timer3_mode   : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t reserved_3_31 : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TCMR;\n\n    /* 0x8c  reserved */\n    uint8_t RESERVED0x8c[4];\n\n    /* 0x90 : TILR2 */\n    union {\n        struct\n        {\n            uint32_t tilr_0        : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t tilr_1        : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t tilr_2        : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t reserved_3_31 : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TILR2;\n\n    /* 0x94 : TILR3 */\n    union {\n        struct\n        {\n            uint32_t tilr_0        : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t tilr_1        : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t tilr_2        : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t reserved_3_31 : 29; /* [31: 3],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TILR3;\n\n    /* 0x98 : WCR */\n    union {\n        struct\n        {\n            uint32_t wcr           : 1;  /* [    0],          w,        0x0 */\n            uint32_t reserved_1_31 : 31; /* [31: 1],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } WCR;\n\n    /* 0x9C : WFAR */\n    union {\n        struct\n        {\n            uint32_t wfar           : 16; /* [15: 0],          w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } WFAR;\n\n    /* 0xA0 : WSAR */\n    union {\n        struct\n        {\n            uint32_t wsar           : 16; /* [15: 0],          w,        0x0 */\n            uint32_t reserved_16_31 : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } WSAR;\n\n    /* 0xa4  reserved */\n    uint8_t RESERVED0xa4[4];\n\n    /* 0xA8 : TCVWR2 */\n    union {\n        struct\n        {\n            uint32_t tcvwr : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TCVWR2;\n\n    /* 0xAC : TCVWR3 */\n    union {\n        struct\n        {\n            uint32_t tcvwr : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TCVWR3;\n\n    /* 0xb0  reserved */\n    uint8_t RESERVED0xb0[4];\n\n    /* 0xB4 : TCVSYN2 */\n    union {\n        struct\n        {\n            uint32_t tcvsyn2 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TCVSYN2;\n\n    /* 0xB8 : TCVSYN3 */\n    union {\n        struct\n        {\n            uint32_t tcvsyn3 : 32; /* [31: 0],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TCVSYN3;\n\n    /* 0xBC : TCDR */\n    union {\n        struct\n        {\n            uint32_t reserved_0_7 : 8; /* [ 7: 0],       rsvd,        0x0 */\n            uint32_t tcdr2        : 8; /* [15: 8],        r/w,        0x0 */\n            uint32_t tcdr3        : 8; /* [23:16],        r/w,        0x0 */\n            uint32_t wcdr         : 8; /* [31:24],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } TCDR;\n};\n\ntypedef volatile struct timer_reg timer_reg_t;\n\n#endif /* __TIMER_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/tzc_sec_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    tzc_sec_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __TZC_SEC_REG_H__\n#define __TZC_SEC_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x40 : tzc_rom_ctrl */\n#define TZC_SEC_TZC_ROM_CTRL_OFFSET     (0x40)\n#define TZC_SEC_TZC_ROM0_R0_ID0_EN      TZC_SEC_TZC_ROM0_R0_ID0_EN\n#define TZC_SEC_TZC_ROM0_R0_ID0_EN_POS  (0U)\n#define TZC_SEC_TZC_ROM0_R0_ID0_EN_LEN  (1U)\n#define TZC_SEC_TZC_ROM0_R0_ID0_EN_MSK  (((1U << TZC_SEC_TZC_ROM0_R0_ID0_EN_LEN) - 1) << TZC_SEC_TZC_ROM0_R0_ID0_EN_POS)\n#define TZC_SEC_TZC_ROM0_R0_ID0_EN_UMSK (~(((1U << TZC_SEC_TZC_ROM0_R0_ID0_EN_LEN) - 1) << TZC_SEC_TZC_ROM0_R0_ID0_EN_POS))\n#define TZC_SEC_TZC_ROM0_R1_ID0_EN      TZC_SEC_TZC_ROM0_R1_ID0_EN\n#define TZC_SEC_TZC_ROM0_R1_ID0_EN_POS  (1U)\n#define TZC_SEC_TZC_ROM0_R1_ID0_EN_LEN  (1U)\n#define TZC_SEC_TZC_ROM0_R1_ID0_EN_MSK  (((1U << TZC_SEC_TZC_ROM0_R1_ID0_EN_LEN) - 1) << TZC_SEC_TZC_ROM0_R1_ID0_EN_POS)\n#define TZC_SEC_TZC_ROM0_R1_ID0_EN_UMSK (~(((1U << TZC_SEC_TZC_ROM0_R1_ID0_EN_LEN) - 1) << TZC_SEC_TZC_ROM0_R1_ID0_EN_POS))\n#define TZC_SEC_TZC_ROM1_R0_ID0_EN      TZC_SEC_TZC_ROM1_R0_ID0_EN\n#define TZC_SEC_TZC_ROM1_R0_ID0_EN_POS  (2U)\n#define TZC_SEC_TZC_ROM1_R0_ID0_EN_LEN  (1U)\n#define TZC_SEC_TZC_ROM1_R0_ID0_EN_MSK  (((1U << TZC_SEC_TZC_ROM1_R0_ID0_EN_LEN) - 1) << TZC_SEC_TZC_ROM1_R0_ID0_EN_POS)\n#define TZC_SEC_TZC_ROM1_R0_ID0_EN_UMSK (~(((1U << TZC_SEC_TZC_ROM1_R0_ID0_EN_LEN) - 1) << TZC_SEC_TZC_ROM1_R0_ID0_EN_POS))\n#define TZC_SEC_TZC_ROM1_R1_ID0_EN      TZC_SEC_TZC_ROM1_R1_ID0_EN\n#define TZC_SEC_TZC_ROM1_R1_ID0_EN_POS  (3U)\n#define TZC_SEC_TZC_ROM1_R1_ID0_EN_LEN  (1U)\n#define TZC_SEC_TZC_ROM1_R1_ID0_EN_MSK  (((1U << TZC_SEC_TZC_ROM1_R1_ID0_EN_LEN) - 1) << TZC_SEC_TZC_ROM1_R1_ID0_EN_POS)\n#define TZC_SEC_TZC_ROM1_R1_ID0_EN_UMSK (~(((1U << TZC_SEC_TZC_ROM1_R1_ID0_EN_LEN) - 1) << TZC_SEC_TZC_ROM1_R1_ID0_EN_POS))\n#define TZC_SEC_TZC_ROM0_R0_ID1_EN      TZC_SEC_TZC_ROM0_R0_ID1_EN\n#define TZC_SEC_TZC_ROM0_R0_ID1_EN_POS  (8U)\n#define TZC_SEC_TZC_ROM0_R0_ID1_EN_LEN  (1U)\n#define TZC_SEC_TZC_ROM0_R0_ID1_EN_MSK  (((1U << TZC_SEC_TZC_ROM0_R0_ID1_EN_LEN) - 1) << TZC_SEC_TZC_ROM0_R0_ID1_EN_POS)\n#define TZC_SEC_TZC_ROM0_R0_ID1_EN_UMSK (~(((1U << TZC_SEC_TZC_ROM0_R0_ID1_EN_LEN) - 1) << TZC_SEC_TZC_ROM0_R0_ID1_EN_POS))\n#define TZC_SEC_TZC_ROM0_R1_ID1_EN      TZC_SEC_TZC_ROM0_R1_ID1_EN\n#define TZC_SEC_TZC_ROM0_R1_ID1_EN_POS  (9U)\n#define TZC_SEC_TZC_ROM0_R1_ID1_EN_LEN  (1U)\n#define TZC_SEC_TZC_ROM0_R1_ID1_EN_MSK  (((1U << TZC_SEC_TZC_ROM0_R1_ID1_EN_LEN) - 1) << TZC_SEC_TZC_ROM0_R1_ID1_EN_POS)\n#define TZC_SEC_TZC_ROM0_R1_ID1_EN_UMSK (~(((1U << TZC_SEC_TZC_ROM0_R1_ID1_EN_LEN) - 1) << TZC_SEC_TZC_ROM0_R1_ID1_EN_POS))\n#define TZC_SEC_TZC_ROM1_R0_ID1_EN      TZC_SEC_TZC_ROM1_R0_ID1_EN\n#define TZC_SEC_TZC_ROM1_R0_ID1_EN_POS  (10U)\n#define TZC_SEC_TZC_ROM1_R0_ID1_EN_LEN  (1U)\n#define TZC_SEC_TZC_ROM1_R0_ID1_EN_MSK  (((1U << TZC_SEC_TZC_ROM1_R0_ID1_EN_LEN) - 1) << TZC_SEC_TZC_ROM1_R0_ID1_EN_POS)\n#define TZC_SEC_TZC_ROM1_R0_ID1_EN_UMSK (~(((1U << TZC_SEC_TZC_ROM1_R0_ID1_EN_LEN) - 1) << TZC_SEC_TZC_ROM1_R0_ID1_EN_POS))\n#define TZC_SEC_TZC_ROM1_R1_ID1_EN      TZC_SEC_TZC_ROM1_R1_ID1_EN\n#define TZC_SEC_TZC_ROM1_R1_ID1_EN_POS  (11U)\n#define TZC_SEC_TZC_ROM1_R1_ID1_EN_LEN  (1U)\n#define TZC_SEC_TZC_ROM1_R1_ID1_EN_MSK  (((1U << TZC_SEC_TZC_ROM1_R1_ID1_EN_LEN) - 1) << TZC_SEC_TZC_ROM1_R1_ID1_EN_POS)\n#define TZC_SEC_TZC_ROM1_R1_ID1_EN_UMSK (~(((1U << TZC_SEC_TZC_ROM1_R1_ID1_EN_LEN) - 1) << TZC_SEC_TZC_ROM1_R1_ID1_EN_POS))\n#define TZC_SEC_TZC_ROM0_R0_EN          TZC_SEC_TZC_ROM0_R0_EN\n#define TZC_SEC_TZC_ROM0_R0_EN_POS      (16U)\n#define TZC_SEC_TZC_ROM0_R0_EN_LEN      (1U)\n#define TZC_SEC_TZC_ROM0_R0_EN_MSK      (((1U << TZC_SEC_TZC_ROM0_R0_EN_LEN) - 1) << TZC_SEC_TZC_ROM0_R0_EN_POS)\n#define TZC_SEC_TZC_ROM0_R0_EN_UMSK     (~(((1U << TZC_SEC_TZC_ROM0_R0_EN_LEN) - 1) << TZC_SEC_TZC_ROM0_R0_EN_POS))\n#define TZC_SEC_TZC_ROM0_R1_EN          TZC_SEC_TZC_ROM0_R1_EN\n#define TZC_SEC_TZC_ROM0_R1_EN_POS      (17U)\n#define TZC_SEC_TZC_ROM0_R1_EN_LEN      (1U)\n#define TZC_SEC_TZC_ROM0_R1_EN_MSK      (((1U << TZC_SEC_TZC_ROM0_R1_EN_LEN) - 1) << TZC_SEC_TZC_ROM0_R1_EN_POS)\n#define TZC_SEC_TZC_ROM0_R1_EN_UMSK     (~(((1U << TZC_SEC_TZC_ROM0_R1_EN_LEN) - 1) << TZC_SEC_TZC_ROM0_R1_EN_POS))\n#define TZC_SEC_TZC_ROM1_R0_EN          TZC_SEC_TZC_ROM1_R0_EN\n#define TZC_SEC_TZC_ROM1_R0_EN_POS      (18U)\n#define TZC_SEC_TZC_ROM1_R0_EN_LEN      (1U)\n#define TZC_SEC_TZC_ROM1_R0_EN_MSK      (((1U << TZC_SEC_TZC_ROM1_R0_EN_LEN) - 1) << TZC_SEC_TZC_ROM1_R0_EN_POS)\n#define TZC_SEC_TZC_ROM1_R0_EN_UMSK     (~(((1U << TZC_SEC_TZC_ROM1_R0_EN_LEN) - 1) << TZC_SEC_TZC_ROM1_R0_EN_POS))\n#define TZC_SEC_TZC_ROM1_R1_EN          TZC_SEC_TZC_ROM1_R1_EN\n#define TZC_SEC_TZC_ROM1_R1_EN_POS      (19U)\n#define TZC_SEC_TZC_ROM1_R1_EN_LEN      (1U)\n#define TZC_SEC_TZC_ROM1_R1_EN_MSK      (((1U << TZC_SEC_TZC_ROM1_R1_EN_LEN) - 1) << TZC_SEC_TZC_ROM1_R1_EN_POS)\n#define TZC_SEC_TZC_ROM1_R1_EN_UMSK     (~(((1U << TZC_SEC_TZC_ROM1_R1_EN_LEN) - 1) << TZC_SEC_TZC_ROM1_R1_EN_POS))\n#define TZC_SEC_TZC_ROM0_R0_LOCK        TZC_SEC_TZC_ROM0_R0_LOCK\n#define TZC_SEC_TZC_ROM0_R0_LOCK_POS    (24U)\n#define TZC_SEC_TZC_ROM0_R0_LOCK_LEN    (1U)\n#define TZC_SEC_TZC_ROM0_R0_LOCK_MSK    (((1U << TZC_SEC_TZC_ROM0_R0_LOCK_LEN) - 1) << TZC_SEC_TZC_ROM0_R0_LOCK_POS)\n#define TZC_SEC_TZC_ROM0_R0_LOCK_UMSK   (~(((1U << TZC_SEC_TZC_ROM0_R0_LOCK_LEN) - 1) << TZC_SEC_TZC_ROM0_R0_LOCK_POS))\n#define TZC_SEC_TZC_ROM0_R1_LOCK        TZC_SEC_TZC_ROM0_R1_LOCK\n#define TZC_SEC_TZC_ROM0_R1_LOCK_POS    (25U)\n#define TZC_SEC_TZC_ROM0_R1_LOCK_LEN    (1U)\n#define TZC_SEC_TZC_ROM0_R1_LOCK_MSK    (((1U << TZC_SEC_TZC_ROM0_R1_LOCK_LEN) - 1) << TZC_SEC_TZC_ROM0_R1_LOCK_POS)\n#define TZC_SEC_TZC_ROM0_R1_LOCK_UMSK   (~(((1U << TZC_SEC_TZC_ROM0_R1_LOCK_LEN) - 1) << TZC_SEC_TZC_ROM0_R1_LOCK_POS))\n#define TZC_SEC_TZC_ROM1_R0_LOCK        TZC_SEC_TZC_ROM1_R0_LOCK\n#define TZC_SEC_TZC_ROM1_R0_LOCK_POS    (26U)\n#define TZC_SEC_TZC_ROM1_R0_LOCK_LEN    (1U)\n#define TZC_SEC_TZC_ROM1_R0_LOCK_MSK    (((1U << TZC_SEC_TZC_ROM1_R0_LOCK_LEN) - 1) << TZC_SEC_TZC_ROM1_R0_LOCK_POS)\n#define TZC_SEC_TZC_ROM1_R0_LOCK_UMSK   (~(((1U << TZC_SEC_TZC_ROM1_R0_LOCK_LEN) - 1) << TZC_SEC_TZC_ROM1_R0_LOCK_POS))\n#define TZC_SEC_TZC_ROM1_R1_LOCK        TZC_SEC_TZC_ROM1_R1_LOCK\n#define TZC_SEC_TZC_ROM1_R1_LOCK_POS    (27U)\n#define TZC_SEC_TZC_ROM1_R1_LOCK_LEN    (1U)\n#define TZC_SEC_TZC_ROM1_R1_LOCK_MSK    (((1U << TZC_SEC_TZC_ROM1_R1_LOCK_LEN) - 1) << TZC_SEC_TZC_ROM1_R1_LOCK_POS)\n#define TZC_SEC_TZC_ROM1_R1_LOCK_UMSK   (~(((1U << TZC_SEC_TZC_ROM1_R1_LOCK_LEN) - 1) << TZC_SEC_TZC_ROM1_R1_LOCK_POS))\n#define TZC_SEC_TZC_SBOOT_DONE          TZC_SEC_TZC_SBOOT_DONE\n#define TZC_SEC_TZC_SBOOT_DONE_POS      (28U)\n#define TZC_SEC_TZC_SBOOT_DONE_LEN      (4U)\n#define TZC_SEC_TZC_SBOOT_DONE_MSK      (((1U << TZC_SEC_TZC_SBOOT_DONE_LEN) - 1) << TZC_SEC_TZC_SBOOT_DONE_POS)\n#define TZC_SEC_TZC_SBOOT_DONE_UMSK     (~(((1U << TZC_SEC_TZC_SBOOT_DONE_LEN) - 1) << TZC_SEC_TZC_SBOOT_DONE_POS))\n\n/* 0x44 : tzc_rom0_r0 */\n#define TZC_SEC_TZC_ROM0_R0_OFFSET     (0x44)\n#define TZC_SEC_TZC_ROM0_R0_END        TZC_SEC_TZC_ROM0_R0_END\n#define TZC_SEC_TZC_ROM0_R0_END_POS    (0U)\n#define TZC_SEC_TZC_ROM0_R0_END_LEN    (16U)\n#define TZC_SEC_TZC_ROM0_R0_END_MSK    (((1U << TZC_SEC_TZC_ROM0_R0_END_LEN) - 1) << TZC_SEC_TZC_ROM0_R0_END_POS)\n#define TZC_SEC_TZC_ROM0_R0_END_UMSK   (~(((1U << TZC_SEC_TZC_ROM0_R0_END_LEN) - 1) << TZC_SEC_TZC_ROM0_R0_END_POS))\n#define TZC_SEC_TZC_ROM0_R0_START      TZC_SEC_TZC_ROM0_R0_START\n#define TZC_SEC_TZC_ROM0_R0_START_POS  (16U)\n#define TZC_SEC_TZC_ROM0_R0_START_LEN  (16U)\n#define TZC_SEC_TZC_ROM0_R0_START_MSK  (((1U << TZC_SEC_TZC_ROM0_R0_START_LEN) - 1) << TZC_SEC_TZC_ROM0_R0_START_POS)\n#define TZC_SEC_TZC_ROM0_R0_START_UMSK (~(((1U << TZC_SEC_TZC_ROM0_R0_START_LEN) - 1) << TZC_SEC_TZC_ROM0_R0_START_POS))\n\n/* 0x48 : tzc_rom0_r1 */\n#define TZC_SEC_TZC_ROM0_R1_OFFSET     (0x48)\n#define TZC_SEC_TZC_ROM0_R1_END        TZC_SEC_TZC_ROM0_R1_END\n#define TZC_SEC_TZC_ROM0_R1_END_POS    (0U)\n#define TZC_SEC_TZC_ROM0_R1_END_LEN    (16U)\n#define TZC_SEC_TZC_ROM0_R1_END_MSK    (((1U << TZC_SEC_TZC_ROM0_R1_END_LEN) - 1) << TZC_SEC_TZC_ROM0_R1_END_POS)\n#define TZC_SEC_TZC_ROM0_R1_END_UMSK   (~(((1U << TZC_SEC_TZC_ROM0_R1_END_LEN) - 1) << TZC_SEC_TZC_ROM0_R1_END_POS))\n#define TZC_SEC_TZC_ROM0_R1_START      TZC_SEC_TZC_ROM0_R1_START\n#define TZC_SEC_TZC_ROM0_R1_START_POS  (16U)\n#define TZC_SEC_TZC_ROM0_R1_START_LEN  (16U)\n#define TZC_SEC_TZC_ROM0_R1_START_MSK  (((1U << TZC_SEC_TZC_ROM0_R1_START_LEN) - 1) << TZC_SEC_TZC_ROM0_R1_START_POS)\n#define TZC_SEC_TZC_ROM0_R1_START_UMSK (~(((1U << TZC_SEC_TZC_ROM0_R1_START_LEN) - 1) << TZC_SEC_TZC_ROM0_R1_START_POS))\n\n/* 0x4C : tzc_rom1_r0 */\n#define TZC_SEC_TZC_ROM1_R0_OFFSET     (0x4C)\n#define TZC_SEC_TZC_ROM1_R0_END        TZC_SEC_TZC_ROM1_R0_END\n#define TZC_SEC_TZC_ROM1_R0_END_POS    (0U)\n#define TZC_SEC_TZC_ROM1_R0_END_LEN    (16U)\n#define TZC_SEC_TZC_ROM1_R0_END_MSK    (((1U << TZC_SEC_TZC_ROM1_R0_END_LEN) - 1) << TZC_SEC_TZC_ROM1_R0_END_POS)\n#define TZC_SEC_TZC_ROM1_R0_END_UMSK   (~(((1U << TZC_SEC_TZC_ROM1_R0_END_LEN) - 1) << TZC_SEC_TZC_ROM1_R0_END_POS))\n#define TZC_SEC_TZC_ROM1_R0_START      TZC_SEC_TZC_ROM1_R0_START\n#define TZC_SEC_TZC_ROM1_R0_START_POS  (16U)\n#define TZC_SEC_TZC_ROM1_R0_START_LEN  (16U)\n#define TZC_SEC_TZC_ROM1_R0_START_MSK  (((1U << TZC_SEC_TZC_ROM1_R0_START_LEN) - 1) << TZC_SEC_TZC_ROM1_R0_START_POS)\n#define TZC_SEC_TZC_ROM1_R0_START_UMSK (~(((1U << TZC_SEC_TZC_ROM1_R0_START_LEN) - 1) << TZC_SEC_TZC_ROM1_R0_START_POS))\n\n/* 0x50 : tzc_rom1_r1 */\n#define TZC_SEC_TZC_ROM1_R1_OFFSET     (0x50)\n#define TZC_SEC_TZC_ROM1_R1_END        TZC_SEC_TZC_ROM1_R1_END\n#define TZC_SEC_TZC_ROM1_R1_END_POS    (0U)\n#define TZC_SEC_TZC_ROM1_R1_END_LEN    (16U)\n#define TZC_SEC_TZC_ROM1_R1_END_MSK    (((1U << TZC_SEC_TZC_ROM1_R1_END_LEN) - 1) << TZC_SEC_TZC_ROM1_R1_END_POS)\n#define TZC_SEC_TZC_ROM1_R1_END_UMSK   (~(((1U << TZC_SEC_TZC_ROM1_R1_END_LEN) - 1) << TZC_SEC_TZC_ROM1_R1_END_POS))\n#define TZC_SEC_TZC_ROM1_R1_START      TZC_SEC_TZC_ROM1_R1_START\n#define TZC_SEC_TZC_ROM1_R1_START_POS  (16U)\n#define TZC_SEC_TZC_ROM1_R1_START_LEN  (16U)\n#define TZC_SEC_TZC_ROM1_R1_START_MSK  (((1U << TZC_SEC_TZC_ROM1_R1_START_LEN) - 1) << TZC_SEC_TZC_ROM1_R1_START_POS)\n#define TZC_SEC_TZC_ROM1_R1_START_UMSK (~(((1U << TZC_SEC_TZC_ROM1_R1_START_LEN) - 1) << TZC_SEC_TZC_ROM1_R1_START_POS))\n\nstruct tzc_sec_reg {\n    /* 0x0  reserved */\n    uint8_t RESERVED0x0[64];\n\n    /* 0x40 : tzc_rom_ctrl */\n    union {\n        struct\n        {\n            uint32_t tzc_rom0_r0_id0_en : 1; /* [    0],        r/w,        0x1 */\n            uint32_t tzc_rom0_r1_id0_en : 1; /* [    1],        r/w,        0x1 */\n            uint32_t tzc_rom1_r0_id0_en : 1; /* [    2],        r/w,        0x1 */\n            uint32_t tzc_rom1_r1_id0_en : 1; /* [    3],        r/w,        0x1 */\n            uint32_t reserved_4_7       : 4; /* [ 7: 4],       rsvd,        0x0 */\n            uint32_t tzc_rom0_r0_id1_en : 1; /* [    8],        r/w,        0x1 */\n            uint32_t tzc_rom0_r1_id1_en : 1; /* [    9],        r/w,        0x1 */\n            uint32_t tzc_rom1_r0_id1_en : 1; /* [   10],        r/w,        0x1 */\n            uint32_t tzc_rom1_r1_id1_en : 1; /* [   11],        r/w,        0x1 */\n            uint32_t reserved_12_15     : 4; /* [15:12],       rsvd,        0x0 */\n            uint32_t tzc_rom0_r0_en     : 1; /* [   16],        r/w,        0x0 */\n            uint32_t tzc_rom0_r1_en     : 1; /* [   17],        r/w,        0x0 */\n            uint32_t tzc_rom1_r0_en     : 1; /* [   18],        r/w,        0x0 */\n            uint32_t tzc_rom1_r1_en     : 1; /* [   19],        r/w,        0x0 */\n            uint32_t reserved_20_23     : 4; /* [23:20],       rsvd,        0x0 */\n            uint32_t tzc_rom0_r0_lock   : 1; /* [   24],        r/w,        0x0 */\n            uint32_t tzc_rom0_r1_lock   : 1; /* [   25],        r/w,        0x0 */\n            uint32_t tzc_rom1_r0_lock   : 1; /* [   26],        r/w,        0x0 */\n            uint32_t tzc_rom1_r1_lock   : 1; /* [   27],        r/w,        0x0 */\n            uint32_t tzc_sboot_done     : 4; /* [31:28],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } tzc_rom_ctrl;\n\n    /* 0x44 : tzc_rom0_r0 */\n    union {\n        struct\n        {\n            uint32_t tzc_rom0_r0_end   : 16; /* [15: 0],        r/w,     0xffff */\n            uint32_t tzc_rom0_r0_start : 16; /* [31:16],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } tzc_rom0_r0;\n\n    /* 0x48 : tzc_rom0_r1 */\n    union {\n        struct\n        {\n            uint32_t tzc_rom0_r1_end   : 16; /* [15: 0],        r/w,     0xffff */\n            uint32_t tzc_rom0_r1_start : 16; /* [31:16],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } tzc_rom0_r1;\n\n    /* 0x4C : tzc_rom1_r0 */\n    union {\n        struct\n        {\n            uint32_t tzc_rom1_r0_end   : 16; /* [15: 0],        r/w,     0xffff */\n            uint32_t tzc_rom1_r0_start : 16; /* [31:16],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } tzc_rom1_r0;\n\n    /* 0x50 : tzc_rom1_r1 */\n    union {\n        struct\n        {\n            uint32_t tzc_rom1_r1_end   : 16; /* [15: 0],        r/w,     0xffff */\n            uint32_t tzc_rom1_r1_start : 16; /* [31:16],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } tzc_rom1_r1;\n};\n\ntypedef volatile struct tzc_sec_reg tzc_sec_reg_t;\n\n#endif /* __TZC_SEC_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/uart_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    uart_reg.h\n  * @version V1.2\n  * @date    2020-03-30\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __UART_REG_H__\n#define __UART_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : utx_config */\n#define UART_UTX_CONFIG_OFFSET     (0x0)\n#define UART_CR_UTX_EN             UART_CR_UTX_EN\n#define UART_CR_UTX_EN_POS         (0U)\n#define UART_CR_UTX_EN_LEN         (1U)\n#define UART_CR_UTX_EN_MSK         (((1U << UART_CR_UTX_EN_LEN) - 1) << UART_CR_UTX_EN_POS)\n#define UART_CR_UTX_EN_UMSK        (~(((1U << UART_CR_UTX_EN_LEN) - 1) << UART_CR_UTX_EN_POS))\n#define UART_CR_UTX_CTS_EN         UART_CR_UTX_CTS_EN\n#define UART_CR_UTX_CTS_EN_POS     (1U)\n#define UART_CR_UTX_CTS_EN_LEN     (1U)\n#define UART_CR_UTX_CTS_EN_MSK     (((1U << UART_CR_UTX_CTS_EN_LEN) - 1) << UART_CR_UTX_CTS_EN_POS)\n#define UART_CR_UTX_CTS_EN_UMSK    (~(((1U << UART_CR_UTX_CTS_EN_LEN) - 1) << UART_CR_UTX_CTS_EN_POS))\n#define UART_CR_UTX_FRM_EN         UART_CR_UTX_FRM_EN\n#define UART_CR_UTX_FRM_EN_POS     (2U)\n#define UART_CR_UTX_FRM_EN_LEN     (1U)\n#define UART_CR_UTX_FRM_EN_MSK     (((1U << UART_CR_UTX_FRM_EN_LEN) - 1) << UART_CR_UTX_FRM_EN_POS)\n#define UART_CR_UTX_FRM_EN_UMSK    (~(((1U << UART_CR_UTX_FRM_EN_LEN) - 1) << UART_CR_UTX_FRM_EN_POS))\n#define UART_CR_UTX_LIN_EN         UART_CR_UTX_LIN_EN\n#define UART_CR_UTX_LIN_EN_POS     (3U)\n#define UART_CR_UTX_LIN_EN_LEN     (1U)\n#define UART_CR_UTX_LIN_EN_MSK     (((1U << UART_CR_UTX_LIN_EN_LEN) - 1) << UART_CR_UTX_LIN_EN_POS)\n#define UART_CR_UTX_LIN_EN_UMSK    (~(((1U << UART_CR_UTX_LIN_EN_LEN) - 1) << UART_CR_UTX_LIN_EN_POS))\n#define UART_CR_UTX_PRT_EN         UART_CR_UTX_PRT_EN\n#define UART_CR_UTX_PRT_EN_POS     (4U)\n#define UART_CR_UTX_PRT_EN_LEN     (1U)\n#define UART_CR_UTX_PRT_EN_MSK     (((1U << UART_CR_UTX_PRT_EN_LEN) - 1) << UART_CR_UTX_PRT_EN_POS)\n#define UART_CR_UTX_PRT_EN_UMSK    (~(((1U << UART_CR_UTX_PRT_EN_LEN) - 1) << UART_CR_UTX_PRT_EN_POS))\n#define UART_CR_UTX_PRT_SEL        UART_CR_UTX_PRT_SEL\n#define UART_CR_UTX_PRT_SEL_POS    (5U)\n#define UART_CR_UTX_PRT_SEL_LEN    (1U)\n#define UART_CR_UTX_PRT_SEL_MSK    (((1U << UART_CR_UTX_PRT_SEL_LEN) - 1) << UART_CR_UTX_PRT_SEL_POS)\n#define UART_CR_UTX_PRT_SEL_UMSK   (~(((1U << UART_CR_UTX_PRT_SEL_LEN) - 1) << UART_CR_UTX_PRT_SEL_POS))\n#define UART_CR_UTX_IR_EN          UART_CR_UTX_IR_EN\n#define UART_CR_UTX_IR_EN_POS      (6U)\n#define UART_CR_UTX_IR_EN_LEN      (1U)\n#define UART_CR_UTX_IR_EN_MSK      (((1U << UART_CR_UTX_IR_EN_LEN) - 1) << UART_CR_UTX_IR_EN_POS)\n#define UART_CR_UTX_IR_EN_UMSK     (~(((1U << UART_CR_UTX_IR_EN_LEN) - 1) << UART_CR_UTX_IR_EN_POS))\n#define UART_CR_UTX_IR_INV         UART_CR_UTX_IR_INV\n#define UART_CR_UTX_IR_INV_POS     (7U)\n#define UART_CR_UTX_IR_INV_LEN     (1U)\n#define UART_CR_UTX_IR_INV_MSK     (((1U << UART_CR_UTX_IR_INV_LEN) - 1) << UART_CR_UTX_IR_INV_POS)\n#define UART_CR_UTX_IR_INV_UMSK    (~(((1U << UART_CR_UTX_IR_INV_LEN) - 1) << UART_CR_UTX_IR_INV_POS))\n#define UART_CR_UTX_BIT_CNT_D      UART_CR_UTX_BIT_CNT_D\n#define UART_CR_UTX_BIT_CNT_D_POS  (8U)\n#define UART_CR_UTX_BIT_CNT_D_LEN  (3U)\n#define UART_CR_UTX_BIT_CNT_D_MSK  (((1U << UART_CR_UTX_BIT_CNT_D_LEN) - 1) << UART_CR_UTX_BIT_CNT_D_POS)\n#define UART_CR_UTX_BIT_CNT_D_UMSK (~(((1U << UART_CR_UTX_BIT_CNT_D_LEN) - 1) << UART_CR_UTX_BIT_CNT_D_POS))\n#define UART_CR_UTX_BIT_CNT_P      UART_CR_UTX_BIT_CNT_P\n#define UART_CR_UTX_BIT_CNT_P_POS  (11U)\n#define UART_CR_UTX_BIT_CNT_P_LEN  (2U)\n#define UART_CR_UTX_BIT_CNT_P_MSK  (((1U << UART_CR_UTX_BIT_CNT_P_LEN) - 1) << UART_CR_UTX_BIT_CNT_P_POS)\n#define UART_CR_UTX_BIT_CNT_P_UMSK (~(((1U << UART_CR_UTX_BIT_CNT_P_LEN) - 1) << UART_CR_UTX_BIT_CNT_P_POS))\n#define UART_CR_UTX_BIT_CNT_B      UART_CR_UTX_BIT_CNT_B\n#define UART_CR_UTX_BIT_CNT_B_POS  (13U)\n#define UART_CR_UTX_BIT_CNT_B_LEN  (3U)\n#define UART_CR_UTX_BIT_CNT_B_MSK  (((1U << UART_CR_UTX_BIT_CNT_B_LEN) - 1) << UART_CR_UTX_BIT_CNT_B_POS)\n#define UART_CR_UTX_BIT_CNT_B_UMSK (~(((1U << UART_CR_UTX_BIT_CNT_B_LEN) - 1) << UART_CR_UTX_BIT_CNT_B_POS))\n#define UART_CR_UTX_LEN            UART_CR_UTX_LEN\n#define UART_CR_UTX_LEN_POS        (16U)\n#define UART_CR_UTX_LEN_LEN        (16U)\n#define UART_CR_UTX_LEN_MSK        (((1U << UART_CR_UTX_LEN_LEN) - 1) << UART_CR_UTX_LEN_POS)\n#define UART_CR_UTX_LEN_UMSK       (~(((1U << UART_CR_UTX_LEN_LEN) - 1) << UART_CR_UTX_LEN_POS))\n\n/* 0x4 : urx_config */\n#define UART_URX_CONFIG_OFFSET     (0x4)\n#define UART_CR_URX_EN             UART_CR_URX_EN\n#define UART_CR_URX_EN_POS         (0U)\n#define UART_CR_URX_EN_LEN         (1U)\n#define UART_CR_URX_EN_MSK         (((1U << UART_CR_URX_EN_LEN) - 1) << UART_CR_URX_EN_POS)\n#define UART_CR_URX_EN_UMSK        (~(((1U << UART_CR_URX_EN_LEN) - 1) << UART_CR_URX_EN_POS))\n#define UART_CR_URX_ABR_EN         UART_CR_URX_ABR_EN\n#define UART_CR_URX_ABR_EN_POS     (1U)\n#define UART_CR_URX_ABR_EN_LEN     (1U)\n#define UART_CR_URX_ABR_EN_MSK     (((1U << UART_CR_URX_ABR_EN_LEN) - 1) << UART_CR_URX_ABR_EN_POS)\n#define UART_CR_URX_ABR_EN_UMSK    (~(((1U << UART_CR_URX_ABR_EN_LEN) - 1) << UART_CR_URX_ABR_EN_POS))\n#define UART_CR_URX_LIN_EN         UART_CR_URX_LIN_EN\n#define UART_CR_URX_LIN_EN_POS     (3U)\n#define UART_CR_URX_LIN_EN_LEN     (1U)\n#define UART_CR_URX_LIN_EN_MSK     (((1U << UART_CR_URX_LIN_EN_LEN) - 1) << UART_CR_URX_LIN_EN_POS)\n#define UART_CR_URX_LIN_EN_UMSK    (~(((1U << UART_CR_URX_LIN_EN_LEN) - 1) << UART_CR_URX_LIN_EN_POS))\n#define UART_CR_URX_PRT_EN         UART_CR_URX_PRT_EN\n#define UART_CR_URX_PRT_EN_POS     (4U)\n#define UART_CR_URX_PRT_EN_LEN     (1U)\n#define UART_CR_URX_PRT_EN_MSK     (((1U << UART_CR_URX_PRT_EN_LEN) - 1) << UART_CR_URX_PRT_EN_POS)\n#define UART_CR_URX_PRT_EN_UMSK    (~(((1U << UART_CR_URX_PRT_EN_LEN) - 1) << UART_CR_URX_PRT_EN_POS))\n#define UART_CR_URX_PRT_SEL        UART_CR_URX_PRT_SEL\n#define UART_CR_URX_PRT_SEL_POS    (5U)\n#define UART_CR_URX_PRT_SEL_LEN    (1U)\n#define UART_CR_URX_PRT_SEL_MSK    (((1U << UART_CR_URX_PRT_SEL_LEN) - 1) << UART_CR_URX_PRT_SEL_POS)\n#define UART_CR_URX_PRT_SEL_UMSK   (~(((1U << UART_CR_URX_PRT_SEL_LEN) - 1) << UART_CR_URX_PRT_SEL_POS))\n#define UART_CR_URX_IR_EN          UART_CR_URX_IR_EN\n#define UART_CR_URX_IR_EN_POS      (6U)\n#define UART_CR_URX_IR_EN_LEN      (1U)\n#define UART_CR_URX_IR_EN_MSK      (((1U << UART_CR_URX_IR_EN_LEN) - 1) << UART_CR_URX_IR_EN_POS)\n#define UART_CR_URX_IR_EN_UMSK     (~(((1U << UART_CR_URX_IR_EN_LEN) - 1) << UART_CR_URX_IR_EN_POS))\n#define UART_CR_URX_IR_INV         UART_CR_URX_IR_INV\n#define UART_CR_URX_IR_INV_POS     (7U)\n#define UART_CR_URX_IR_INV_LEN     (1U)\n#define UART_CR_URX_IR_INV_MSK     (((1U << UART_CR_URX_IR_INV_LEN) - 1) << UART_CR_URX_IR_INV_POS)\n#define UART_CR_URX_IR_INV_UMSK    (~(((1U << UART_CR_URX_IR_INV_LEN) - 1) << UART_CR_URX_IR_INV_POS))\n#define UART_CR_URX_BIT_CNT_D      UART_CR_URX_BIT_CNT_D\n#define UART_CR_URX_BIT_CNT_D_POS  (8U)\n#define UART_CR_URX_BIT_CNT_D_LEN  (3U)\n#define UART_CR_URX_BIT_CNT_D_MSK  (((1U << UART_CR_URX_BIT_CNT_D_LEN) - 1) << UART_CR_URX_BIT_CNT_D_POS)\n#define UART_CR_URX_BIT_CNT_D_UMSK (~(((1U << UART_CR_URX_BIT_CNT_D_LEN) - 1) << UART_CR_URX_BIT_CNT_D_POS))\n#define UART_CR_URX_DEG_EN         UART_CR_URX_DEG_EN\n#define UART_CR_URX_DEG_EN_POS     (11U)\n#define UART_CR_URX_DEG_EN_LEN     (1U)\n#define UART_CR_URX_DEG_EN_MSK     (((1U << UART_CR_URX_DEG_EN_LEN) - 1) << UART_CR_URX_DEG_EN_POS)\n#define UART_CR_URX_DEG_EN_UMSK    (~(((1U << UART_CR_URX_DEG_EN_LEN) - 1) << UART_CR_URX_DEG_EN_POS))\n#define UART_CR_URX_DEG_CNT        UART_CR_URX_DEG_CNT\n#define UART_CR_URX_DEG_CNT_POS    (12U)\n#define UART_CR_URX_DEG_CNT_LEN    (4U)\n#define UART_CR_URX_DEG_CNT_MSK    (((1U << UART_CR_URX_DEG_CNT_LEN) - 1) << UART_CR_URX_DEG_CNT_POS)\n#define UART_CR_URX_DEG_CNT_UMSK   (~(((1U << UART_CR_URX_DEG_CNT_LEN) - 1) << UART_CR_URX_DEG_CNT_POS))\n#define UART_CR_URX_LEN            UART_CR_URX_LEN\n#define UART_CR_URX_LEN_POS        (16U)\n#define UART_CR_URX_LEN_LEN        (16U)\n#define UART_CR_URX_LEN_MSK        (((1U << UART_CR_URX_LEN_LEN) - 1) << UART_CR_URX_LEN_POS)\n#define UART_CR_URX_LEN_UMSK       (~(((1U << UART_CR_URX_LEN_LEN) - 1) << UART_CR_URX_LEN_POS))\n\n/* 0x8 : uart_bit_prd */\n#define UART_BIT_PRD_OFFSET      (0x8)\n#define UART_CR_UTX_BIT_PRD      UART_CR_UTX_BIT_PRD\n#define UART_CR_UTX_BIT_PRD_POS  (0U)\n#define UART_CR_UTX_BIT_PRD_LEN  (16U)\n#define UART_CR_UTX_BIT_PRD_MSK  (((1U << UART_CR_UTX_BIT_PRD_LEN) - 1) << UART_CR_UTX_BIT_PRD_POS)\n#define UART_CR_UTX_BIT_PRD_UMSK (~(((1U << UART_CR_UTX_BIT_PRD_LEN) - 1) << UART_CR_UTX_BIT_PRD_POS))\n#define UART_CR_URX_BIT_PRD      UART_CR_URX_BIT_PRD\n#define UART_CR_URX_BIT_PRD_POS  (16U)\n#define UART_CR_URX_BIT_PRD_LEN  (16U)\n#define UART_CR_URX_BIT_PRD_MSK  (((1U << UART_CR_URX_BIT_PRD_LEN) - 1) << UART_CR_URX_BIT_PRD_POS)\n#define UART_CR_URX_BIT_PRD_UMSK (~(((1U << UART_CR_URX_BIT_PRD_LEN) - 1) << UART_CR_URX_BIT_PRD_POS))\n\n/* 0xC : data_config */\n#define UART_DATA_CONFIG_OFFSET   (0xC)\n#define UART_CR_UART_BIT_INV      UART_CR_UART_BIT_INV\n#define UART_CR_UART_BIT_INV_POS  (0U)\n#define UART_CR_UART_BIT_INV_LEN  (1U)\n#define UART_CR_UART_BIT_INV_MSK  (((1U << UART_CR_UART_BIT_INV_LEN) - 1) << UART_CR_UART_BIT_INV_POS)\n#define UART_CR_UART_BIT_INV_UMSK (~(((1U << UART_CR_UART_BIT_INV_LEN) - 1) << UART_CR_UART_BIT_INV_POS))\n\n/* 0x10 : utx_ir_position */\n#define UART_UTX_IR_POSITION_OFFSET (0x10)\n#define UART_CR_UTX_IR_POS_S        UART_CR_UTX_IR_POS_S\n#define UART_CR_UTX_IR_POS_S_POS    (0U)\n#define UART_CR_UTX_IR_POS_S_LEN    (16U)\n#define UART_CR_UTX_IR_POS_S_MSK    (((1U << UART_CR_UTX_IR_POS_S_LEN) - 1) << UART_CR_UTX_IR_POS_S_POS)\n#define UART_CR_UTX_IR_POS_S_UMSK   (~(((1U << UART_CR_UTX_IR_POS_S_LEN) - 1) << UART_CR_UTX_IR_POS_S_POS))\n#define UART_CR_UTX_IR_POS_P        UART_CR_UTX_IR_POS_P\n#define UART_CR_UTX_IR_POS_P_POS    (16U)\n#define UART_CR_UTX_IR_POS_P_LEN    (16U)\n#define UART_CR_UTX_IR_POS_P_MSK    (((1U << UART_CR_UTX_IR_POS_P_LEN) - 1) << UART_CR_UTX_IR_POS_P_POS)\n#define UART_CR_UTX_IR_POS_P_UMSK   (~(((1U << UART_CR_UTX_IR_POS_P_LEN) - 1) << UART_CR_UTX_IR_POS_P_POS))\n\n/* 0x14 : urx_ir_position */\n#define UART_URX_IR_POSITION_OFFSET (0x14)\n#define UART_CR_URX_IR_POS_S        UART_CR_URX_IR_POS_S\n#define UART_CR_URX_IR_POS_S_POS    (0U)\n#define UART_CR_URX_IR_POS_S_LEN    (16U)\n#define UART_CR_URX_IR_POS_S_MSK    (((1U << UART_CR_URX_IR_POS_S_LEN) - 1) << UART_CR_URX_IR_POS_S_POS)\n#define UART_CR_URX_IR_POS_S_UMSK   (~(((1U << UART_CR_URX_IR_POS_S_LEN) - 1) << UART_CR_URX_IR_POS_S_POS))\n\n/* 0x18 : urx_rto_timer */\n#define UART_URX_RTO_TIMER_OFFSET  (0x18)\n#define UART_CR_URX_RTO_VALUE      UART_CR_URX_RTO_VALUE\n#define UART_CR_URX_RTO_VALUE_POS  (0U)\n#define UART_CR_URX_RTO_VALUE_LEN  (8U)\n#define UART_CR_URX_RTO_VALUE_MSK  (((1U << UART_CR_URX_RTO_VALUE_LEN) - 1) << UART_CR_URX_RTO_VALUE_POS)\n#define UART_CR_URX_RTO_VALUE_UMSK (~(((1U << UART_CR_URX_RTO_VALUE_LEN) - 1) << UART_CR_URX_RTO_VALUE_POS))\n\n/* 0x1C : uart_sw_mode */\n#define UART_SW_MODE_OFFSET          (0x1C)\n#define UART_CR_UTX_TXD_SW_MODE      UART_CR_UTX_TXD_SW_MODE\n#define UART_CR_UTX_TXD_SW_MODE_POS  (0U)\n#define UART_CR_UTX_TXD_SW_MODE_LEN  (1U)\n#define UART_CR_UTX_TXD_SW_MODE_MSK  (((1U << UART_CR_UTX_TXD_SW_MODE_LEN) - 1) << UART_CR_UTX_TXD_SW_MODE_POS)\n#define UART_CR_UTX_TXD_SW_MODE_UMSK (~(((1U << UART_CR_UTX_TXD_SW_MODE_LEN) - 1) << UART_CR_UTX_TXD_SW_MODE_POS))\n#define UART_CR_UTX_TXD_SW_VAL       UART_CR_UTX_TXD_SW_VAL\n#define UART_CR_UTX_TXD_SW_VAL_POS   (1U)\n#define UART_CR_UTX_TXD_SW_VAL_LEN   (1U)\n#define UART_CR_UTX_TXD_SW_VAL_MSK   (((1U << UART_CR_UTX_TXD_SW_VAL_LEN) - 1) << UART_CR_UTX_TXD_SW_VAL_POS)\n#define UART_CR_UTX_TXD_SW_VAL_UMSK  (~(((1U << UART_CR_UTX_TXD_SW_VAL_LEN) - 1) << UART_CR_UTX_TXD_SW_VAL_POS))\n#define UART_CR_URX_RTS_SW_MODE      UART_CR_URX_RTS_SW_MODE\n#define UART_CR_URX_RTS_SW_MODE_POS  (2U)\n#define UART_CR_URX_RTS_SW_MODE_LEN  (1U)\n#define UART_CR_URX_RTS_SW_MODE_MSK  (((1U << UART_CR_URX_RTS_SW_MODE_LEN) - 1) << UART_CR_URX_RTS_SW_MODE_POS)\n#define UART_CR_URX_RTS_SW_MODE_UMSK (~(((1U << UART_CR_URX_RTS_SW_MODE_LEN) - 1) << UART_CR_URX_RTS_SW_MODE_POS))\n#define UART_CR_URX_RTS_SW_VAL       UART_CR_URX_RTS_SW_VAL\n#define UART_CR_URX_RTS_SW_VAL_POS   (3U)\n#define UART_CR_URX_RTS_SW_VAL_LEN   (1U)\n#define UART_CR_URX_RTS_SW_VAL_MSK   (((1U << UART_CR_URX_RTS_SW_VAL_LEN) - 1) << UART_CR_URX_RTS_SW_VAL_POS)\n#define UART_CR_URX_RTS_SW_VAL_UMSK  (~(((1U << UART_CR_URX_RTS_SW_VAL_LEN) - 1) << UART_CR_URX_RTS_SW_VAL_POS))\n\n/* 0x20 : UART interrupt status */\n#define UART_INT_STS_OFFSET    (0x20)\n#define UART_UTX_END_INT       UART_UTX_END_INT\n#define UART_UTX_END_INT_POS   (0U)\n#define UART_UTX_END_INT_LEN   (1U)\n#define UART_UTX_END_INT_MSK   (((1U << UART_UTX_END_INT_LEN) - 1) << UART_UTX_END_INT_POS)\n#define UART_UTX_END_INT_UMSK  (~(((1U << UART_UTX_END_INT_LEN) - 1) << UART_UTX_END_INT_POS))\n#define UART_URX_END_INT       UART_URX_END_INT\n#define UART_URX_END_INT_POS   (1U)\n#define UART_URX_END_INT_LEN   (1U)\n#define UART_URX_END_INT_MSK   (((1U << UART_URX_END_INT_LEN) - 1) << UART_URX_END_INT_POS)\n#define UART_URX_END_INT_UMSK  (~(((1U << UART_URX_END_INT_LEN) - 1) << UART_URX_END_INT_POS))\n#define UART_UTX_FIFO_INT      UART_UTX_FIFO_INT\n#define UART_UTX_FIFO_INT_POS  (2U)\n#define UART_UTX_FIFO_INT_LEN  (1U)\n#define UART_UTX_FIFO_INT_MSK  (((1U << UART_UTX_FIFO_INT_LEN) - 1) << UART_UTX_FIFO_INT_POS)\n#define UART_UTX_FIFO_INT_UMSK (~(((1U << UART_UTX_FIFO_INT_LEN) - 1) << UART_UTX_FIFO_INT_POS))\n#define UART_URX_FIFO_INT      UART_URX_FIFO_INT\n#define UART_URX_FIFO_INT_POS  (3U)\n#define UART_URX_FIFO_INT_LEN  (1U)\n#define UART_URX_FIFO_INT_MSK  (((1U << UART_URX_FIFO_INT_LEN) - 1) << UART_URX_FIFO_INT_POS)\n#define UART_URX_FIFO_INT_UMSK (~(((1U << UART_URX_FIFO_INT_LEN) - 1) << UART_URX_FIFO_INT_POS))\n#define UART_URX_RTO_INT       UART_URX_RTO_INT\n#define UART_URX_RTO_INT_POS   (4U)\n#define UART_URX_RTO_INT_LEN   (1U)\n#define UART_URX_RTO_INT_MSK   (((1U << UART_URX_RTO_INT_LEN) - 1) << UART_URX_RTO_INT_POS)\n#define UART_URX_RTO_INT_UMSK  (~(((1U << UART_URX_RTO_INT_LEN) - 1) << UART_URX_RTO_INT_POS))\n#define UART_URX_PCE_INT       UART_URX_PCE_INT\n#define UART_URX_PCE_INT_POS   (5U)\n#define UART_URX_PCE_INT_LEN   (1U)\n#define UART_URX_PCE_INT_MSK   (((1U << UART_URX_PCE_INT_LEN) - 1) << UART_URX_PCE_INT_POS)\n#define UART_URX_PCE_INT_UMSK  (~(((1U << UART_URX_PCE_INT_LEN) - 1) << UART_URX_PCE_INT_POS))\n#define UART_UTX_FER_INT       UART_UTX_FER_INT\n#define UART_UTX_FER_INT_POS   (6U)\n#define UART_UTX_FER_INT_LEN   (1U)\n#define UART_UTX_FER_INT_MSK   (((1U << UART_UTX_FER_INT_LEN) - 1) << UART_UTX_FER_INT_POS)\n#define UART_UTX_FER_INT_UMSK  (~(((1U << UART_UTX_FER_INT_LEN) - 1) << UART_UTX_FER_INT_POS))\n#define UART_URX_FER_INT       UART_URX_FER_INT\n#define UART_URX_FER_INT_POS   (7U)\n#define UART_URX_FER_INT_LEN   (1U)\n#define UART_URX_FER_INT_MSK   (((1U << UART_URX_FER_INT_LEN) - 1) << UART_URX_FER_INT_POS)\n#define UART_URX_FER_INT_UMSK  (~(((1U << UART_URX_FER_INT_LEN) - 1) << UART_URX_FER_INT_POS))\n#define UART_URX_LSE_INT       UART_URX_LSE_INT\n#define UART_URX_LSE_INT_POS   (8U)\n#define UART_URX_LSE_INT_LEN   (1U)\n#define UART_URX_LSE_INT_MSK   (((1U << UART_URX_LSE_INT_LEN) - 1) << UART_URX_LSE_INT_POS)\n#define UART_URX_LSE_INT_UMSK  (~(((1U << UART_URX_LSE_INT_LEN) - 1) << UART_URX_LSE_INT_POS))\n\n/* 0x24 : UART interrupt mask */\n#define UART_INT_MASK_OFFSET       (0x24)\n#define UART_CR_UTX_END_MASK       UART_CR_UTX_END_MASK\n#define UART_CR_UTX_END_MASK_POS   (0U)\n#define UART_CR_UTX_END_MASK_LEN   (1U)\n#define UART_CR_UTX_END_MASK_MSK   (((1U << UART_CR_UTX_END_MASK_LEN) - 1) << UART_CR_UTX_END_MASK_POS)\n#define UART_CR_UTX_END_MASK_UMSK  (~(((1U << UART_CR_UTX_END_MASK_LEN) - 1) << UART_CR_UTX_END_MASK_POS))\n#define UART_CR_URX_END_MASK       UART_CR_URX_END_MASK\n#define UART_CR_URX_END_MASK_POS   (1U)\n#define UART_CR_URX_END_MASK_LEN   (1U)\n#define UART_CR_URX_END_MASK_MSK   (((1U << UART_CR_URX_END_MASK_LEN) - 1) << UART_CR_URX_END_MASK_POS)\n#define UART_CR_URX_END_MASK_UMSK  (~(((1U << UART_CR_URX_END_MASK_LEN) - 1) << UART_CR_URX_END_MASK_POS))\n#define UART_CR_UTX_FIFO_MASK      UART_CR_UTX_FIFO_MASK\n#define UART_CR_UTX_FIFO_MASK_POS  (2U)\n#define UART_CR_UTX_FIFO_MASK_LEN  (1U)\n#define UART_CR_UTX_FIFO_MASK_MSK  (((1U << UART_CR_UTX_FIFO_MASK_LEN) - 1) << UART_CR_UTX_FIFO_MASK_POS)\n#define UART_CR_UTX_FIFO_MASK_UMSK (~(((1U << UART_CR_UTX_FIFO_MASK_LEN) - 1) << UART_CR_UTX_FIFO_MASK_POS))\n#define UART_CR_URX_FIFO_MASK      UART_CR_URX_FIFO_MASK\n#define UART_CR_URX_FIFO_MASK_POS  (3U)\n#define UART_CR_URX_FIFO_MASK_LEN  (1U)\n#define UART_CR_URX_FIFO_MASK_MSK  (((1U << UART_CR_URX_FIFO_MASK_LEN) - 1) << UART_CR_URX_FIFO_MASK_POS)\n#define UART_CR_URX_FIFO_MASK_UMSK (~(((1U << UART_CR_URX_FIFO_MASK_LEN) - 1) << UART_CR_URX_FIFO_MASK_POS))\n#define UART_CR_URX_RTO_MASK       UART_CR_URX_RTO_MASK\n#define UART_CR_URX_RTO_MASK_POS   (4U)\n#define UART_CR_URX_RTO_MASK_LEN   (1U)\n#define UART_CR_URX_RTO_MASK_MSK   (((1U << UART_CR_URX_RTO_MASK_LEN) - 1) << UART_CR_URX_RTO_MASK_POS)\n#define UART_CR_URX_RTO_MASK_UMSK  (~(((1U << UART_CR_URX_RTO_MASK_LEN) - 1) << UART_CR_URX_RTO_MASK_POS))\n#define UART_CR_URX_PCE_MASK       UART_CR_URX_PCE_MASK\n#define UART_CR_URX_PCE_MASK_POS   (5U)\n#define UART_CR_URX_PCE_MASK_LEN   (1U)\n#define UART_CR_URX_PCE_MASK_MSK   (((1U << UART_CR_URX_PCE_MASK_LEN) - 1) << UART_CR_URX_PCE_MASK_POS)\n#define UART_CR_URX_PCE_MASK_UMSK  (~(((1U << UART_CR_URX_PCE_MASK_LEN) - 1) << UART_CR_URX_PCE_MASK_POS))\n#define UART_CR_UTX_FER_MASK       UART_CR_UTX_FER_MASK\n#define UART_CR_UTX_FER_MASK_POS   (6U)\n#define UART_CR_UTX_FER_MASK_LEN   (1U)\n#define UART_CR_UTX_FER_MASK_MSK   (((1U << UART_CR_UTX_FER_MASK_LEN) - 1) << UART_CR_UTX_FER_MASK_POS)\n#define UART_CR_UTX_FER_MASK_UMSK  (~(((1U << UART_CR_UTX_FER_MASK_LEN) - 1) << UART_CR_UTX_FER_MASK_POS))\n#define UART_CR_URX_FER_MASK       UART_CR_URX_FER_MASK\n#define UART_CR_URX_FER_MASK_POS   (7U)\n#define UART_CR_URX_FER_MASK_LEN   (1U)\n#define UART_CR_URX_FER_MASK_MSK   (((1U << UART_CR_URX_FER_MASK_LEN) - 1) << UART_CR_URX_FER_MASK_POS)\n#define UART_CR_URX_FER_MASK_UMSK  (~(((1U << UART_CR_URX_FER_MASK_LEN) - 1) << UART_CR_URX_FER_MASK_POS))\n#define UART_CR_URX_LSE_MASK       UART_CR_URX_LSE_MASK\n#define UART_CR_URX_LSE_MASK_POS   (8U)\n#define UART_CR_URX_LSE_MASK_LEN   (1U)\n#define UART_CR_URX_LSE_MASK_MSK   (((1U << UART_CR_URX_LSE_MASK_LEN) - 1) << UART_CR_URX_LSE_MASK_POS)\n#define UART_CR_URX_LSE_MASK_UMSK  (~(((1U << UART_CR_URX_LSE_MASK_LEN) - 1) << UART_CR_URX_LSE_MASK_POS))\n\n/* 0x28 : UART interrupt clear */\n#define UART_INT_CLEAR_OFFSET    (0x28)\n#define UART_CR_UTX_END_CLR      UART_CR_UTX_END_CLR\n#define UART_CR_UTX_END_CLR_POS  (0U)\n#define UART_CR_UTX_END_CLR_LEN  (1U)\n#define UART_CR_UTX_END_CLR_MSK  (((1U << UART_CR_UTX_END_CLR_LEN) - 1) << UART_CR_UTX_END_CLR_POS)\n#define UART_CR_UTX_END_CLR_UMSK (~(((1U << UART_CR_UTX_END_CLR_LEN) - 1) << UART_CR_UTX_END_CLR_POS))\n#define UART_CR_URX_END_CLR      UART_CR_URX_END_CLR\n#define UART_CR_URX_END_CLR_POS  (1U)\n#define UART_CR_URX_END_CLR_LEN  (1U)\n#define UART_CR_URX_END_CLR_MSK  (((1U << UART_CR_URX_END_CLR_LEN) - 1) << UART_CR_URX_END_CLR_POS)\n#define UART_CR_URX_END_CLR_UMSK (~(((1U << UART_CR_URX_END_CLR_LEN) - 1) << UART_CR_URX_END_CLR_POS))\n#define UART_CR_URX_RTO_CLR      UART_CR_URX_RTO_CLR\n#define UART_CR_URX_RTO_CLR_POS  (4U)\n#define UART_CR_URX_RTO_CLR_LEN  (1U)\n#define UART_CR_URX_RTO_CLR_MSK  (((1U << UART_CR_URX_RTO_CLR_LEN) - 1) << UART_CR_URX_RTO_CLR_POS)\n#define UART_CR_URX_RTO_CLR_UMSK (~(((1U << UART_CR_URX_RTO_CLR_LEN) - 1) << UART_CR_URX_RTO_CLR_POS))\n#define UART_CR_URX_PCE_CLR      UART_CR_URX_PCE_CLR\n#define UART_CR_URX_PCE_CLR_POS  (5U)\n#define UART_CR_URX_PCE_CLR_LEN  (1U)\n#define UART_CR_URX_PCE_CLR_MSK  (((1U << UART_CR_URX_PCE_CLR_LEN) - 1) << UART_CR_URX_PCE_CLR_POS)\n#define UART_CR_URX_PCE_CLR_UMSK (~(((1U << UART_CR_URX_PCE_CLR_LEN) - 1) << UART_CR_URX_PCE_CLR_POS))\n#define UART_CR_URX_LSE_CLR      UART_CR_URX_LSE_CLR\n#define UART_CR_URX_LSE_CLR_POS  (8U)\n#define UART_CR_URX_LSE_CLR_LEN  (1U)\n#define UART_CR_URX_LSE_CLR_MSK  (((1U << UART_CR_URX_LSE_CLR_LEN) - 1) << UART_CR_URX_LSE_CLR_POS)\n#define UART_CR_URX_LSE_CLR_UMSK (~(((1U << UART_CR_URX_LSE_CLR_LEN) - 1) << UART_CR_URX_LSE_CLR_POS))\n\n/* 0x2C : UART interrupt enable */\n#define UART_INT_EN_OFFSET       (0x2C)\n#define UART_CR_UTX_END_EN       UART_CR_UTX_END_EN\n#define UART_CR_UTX_END_EN_POS   (0U)\n#define UART_CR_UTX_END_EN_LEN   (1U)\n#define UART_CR_UTX_END_EN_MSK   (((1U << UART_CR_UTX_END_EN_LEN) - 1) << UART_CR_UTX_END_EN_POS)\n#define UART_CR_UTX_END_EN_UMSK  (~(((1U << UART_CR_UTX_END_EN_LEN) - 1) << UART_CR_UTX_END_EN_POS))\n#define UART_CR_URX_END_EN       UART_CR_URX_END_EN\n#define UART_CR_URX_END_EN_POS   (1U)\n#define UART_CR_URX_END_EN_LEN   (1U)\n#define UART_CR_URX_END_EN_MSK   (((1U << UART_CR_URX_END_EN_LEN) - 1) << UART_CR_URX_END_EN_POS)\n#define UART_CR_URX_END_EN_UMSK  (~(((1U << UART_CR_URX_END_EN_LEN) - 1) << UART_CR_URX_END_EN_POS))\n#define UART_CR_UTX_FIFO_EN      UART_CR_UTX_FIFO_EN\n#define UART_CR_UTX_FIFO_EN_POS  (2U)\n#define UART_CR_UTX_FIFO_EN_LEN  (1U)\n#define UART_CR_UTX_FIFO_EN_MSK  (((1U << UART_CR_UTX_FIFO_EN_LEN) - 1) << UART_CR_UTX_FIFO_EN_POS)\n#define UART_CR_UTX_FIFO_EN_UMSK (~(((1U << UART_CR_UTX_FIFO_EN_LEN) - 1) << UART_CR_UTX_FIFO_EN_POS))\n#define UART_CR_URX_FIFO_EN      UART_CR_URX_FIFO_EN\n#define UART_CR_URX_FIFO_EN_POS  (3U)\n#define UART_CR_URX_FIFO_EN_LEN  (1U)\n#define UART_CR_URX_FIFO_EN_MSK  (((1U << UART_CR_URX_FIFO_EN_LEN) - 1) << UART_CR_URX_FIFO_EN_POS)\n#define UART_CR_URX_FIFO_EN_UMSK (~(((1U << UART_CR_URX_FIFO_EN_LEN) - 1) << UART_CR_URX_FIFO_EN_POS))\n#define UART_CR_URX_RTO_EN       UART_CR_URX_RTO_EN\n#define UART_CR_URX_RTO_EN_POS   (4U)\n#define UART_CR_URX_RTO_EN_LEN   (1U)\n#define UART_CR_URX_RTO_EN_MSK   (((1U << UART_CR_URX_RTO_EN_LEN) - 1) << UART_CR_URX_RTO_EN_POS)\n#define UART_CR_URX_RTO_EN_UMSK  (~(((1U << UART_CR_URX_RTO_EN_LEN) - 1) << UART_CR_URX_RTO_EN_POS))\n#define UART_CR_URX_PCE_EN       UART_CR_URX_PCE_EN\n#define UART_CR_URX_PCE_EN_POS   (5U)\n#define UART_CR_URX_PCE_EN_LEN   (1U)\n#define UART_CR_URX_PCE_EN_MSK   (((1U << UART_CR_URX_PCE_EN_LEN) - 1) << UART_CR_URX_PCE_EN_POS)\n#define UART_CR_URX_PCE_EN_UMSK  (~(((1U << UART_CR_URX_PCE_EN_LEN) - 1) << UART_CR_URX_PCE_EN_POS))\n#define UART_CR_UTX_FER_EN       UART_CR_UTX_FER_EN\n#define UART_CR_UTX_FER_EN_POS   (6U)\n#define UART_CR_UTX_FER_EN_LEN   (1U)\n#define UART_CR_UTX_FER_EN_MSK   (((1U << UART_CR_UTX_FER_EN_LEN) - 1) << UART_CR_UTX_FER_EN_POS)\n#define UART_CR_UTX_FER_EN_UMSK  (~(((1U << UART_CR_UTX_FER_EN_LEN) - 1) << UART_CR_UTX_FER_EN_POS))\n#define UART_CR_URX_FER_EN       UART_CR_URX_FER_EN\n#define UART_CR_URX_FER_EN_POS   (7U)\n#define UART_CR_URX_FER_EN_LEN   (1U)\n#define UART_CR_URX_FER_EN_MSK   (((1U << UART_CR_URX_FER_EN_LEN) - 1) << UART_CR_URX_FER_EN_POS)\n#define UART_CR_URX_FER_EN_UMSK  (~(((1U << UART_CR_URX_FER_EN_LEN) - 1) << UART_CR_URX_FER_EN_POS))\n#define UART_CR_URX_LSE_EN       UART_CR_URX_LSE_EN\n#define UART_CR_URX_LSE_EN_POS   (8U)\n#define UART_CR_URX_LSE_EN_LEN   (1U)\n#define UART_CR_URX_LSE_EN_MSK   (((1U << UART_CR_URX_LSE_EN_LEN) - 1) << UART_CR_URX_LSE_EN_POS)\n#define UART_CR_URX_LSE_EN_UMSK  (~(((1U << UART_CR_URX_LSE_EN_LEN) - 1) << UART_CR_URX_LSE_EN_POS))\n\n/* 0x30 : uart_status */\n#define UART_STATUS_OFFSET         (0x30)\n#define UART_STS_UTX_BUS_BUSY      UART_STS_UTX_BUS_BUSY\n#define UART_STS_UTX_BUS_BUSY_POS  (0U)\n#define UART_STS_UTX_BUS_BUSY_LEN  (1U)\n#define UART_STS_UTX_BUS_BUSY_MSK  (((1U << UART_STS_UTX_BUS_BUSY_LEN) - 1) << UART_STS_UTX_BUS_BUSY_POS)\n#define UART_STS_UTX_BUS_BUSY_UMSK (~(((1U << UART_STS_UTX_BUS_BUSY_LEN) - 1) << UART_STS_UTX_BUS_BUSY_POS))\n#define UART_STS_URX_BUS_BUSY      UART_STS_URX_BUS_BUSY\n#define UART_STS_URX_BUS_BUSY_POS  (1U)\n#define UART_STS_URX_BUS_BUSY_LEN  (1U)\n#define UART_STS_URX_BUS_BUSY_MSK  (((1U << UART_STS_URX_BUS_BUSY_LEN) - 1) << UART_STS_URX_BUS_BUSY_POS)\n#define UART_STS_URX_BUS_BUSY_UMSK (~(((1U << UART_STS_URX_BUS_BUSY_LEN) - 1) << UART_STS_URX_BUS_BUSY_POS))\n\n/* 0x34 : sts_urx_abr_prd */\n#define UART_STS_URX_ABR_PRD_OFFSET     (0x34)\n#define UART_STS_URX_ABR_PRD_START      UART_STS_URX_ABR_PRD_START\n#define UART_STS_URX_ABR_PRD_START_POS  (0U)\n#define UART_STS_URX_ABR_PRD_START_LEN  (16U)\n#define UART_STS_URX_ABR_PRD_START_MSK  (((1U << UART_STS_URX_ABR_PRD_START_LEN) - 1) << UART_STS_URX_ABR_PRD_START_POS)\n#define UART_STS_URX_ABR_PRD_START_UMSK (~(((1U << UART_STS_URX_ABR_PRD_START_LEN) - 1) << UART_STS_URX_ABR_PRD_START_POS))\n#define UART_STS_URX_ABR_PRD_0X55       UART_STS_URX_ABR_PRD_0X55\n#define UART_STS_URX_ABR_PRD_0X55_POS   (16U)\n#define UART_STS_URX_ABR_PRD_0X55_LEN   (16U)\n#define UART_STS_URX_ABR_PRD_0X55_MSK   (((1U << UART_STS_URX_ABR_PRD_0X55_LEN) - 1) << UART_STS_URX_ABR_PRD_0X55_POS)\n#define UART_STS_URX_ABR_PRD_0X55_UMSK  (~(((1U << UART_STS_URX_ABR_PRD_0X55_LEN) - 1) << UART_STS_URX_ABR_PRD_0X55_POS))\n\n/* 0x80 : uart_fifo_config_0 */\n#define UART_FIFO_CONFIG_0_OFFSET   (0x80)\n#define UART_DMA_TX_EN              UART_DMA_TX_EN\n#define UART_DMA_TX_EN_POS          (0U)\n#define UART_DMA_TX_EN_LEN          (1U)\n#define UART_DMA_TX_EN_MSK          (((1U << UART_DMA_TX_EN_LEN) - 1) << UART_DMA_TX_EN_POS)\n#define UART_DMA_TX_EN_UMSK         (~(((1U << UART_DMA_TX_EN_LEN) - 1) << UART_DMA_TX_EN_POS))\n#define UART_DMA_RX_EN              UART_DMA_RX_EN\n#define UART_DMA_RX_EN_POS          (1U)\n#define UART_DMA_RX_EN_LEN          (1U)\n#define UART_DMA_RX_EN_MSK          (((1U << UART_DMA_RX_EN_LEN) - 1) << UART_DMA_RX_EN_POS)\n#define UART_DMA_RX_EN_UMSK         (~(((1U << UART_DMA_RX_EN_LEN) - 1) << UART_DMA_RX_EN_POS))\n#define UART_TX_FIFO_CLR            UART_TX_FIFO_CLR\n#define UART_TX_FIFO_CLR_POS        (2U)\n#define UART_TX_FIFO_CLR_LEN        (1U)\n#define UART_TX_FIFO_CLR_MSK        (((1U << UART_TX_FIFO_CLR_LEN) - 1) << UART_TX_FIFO_CLR_POS)\n#define UART_TX_FIFO_CLR_UMSK       (~(((1U << UART_TX_FIFO_CLR_LEN) - 1) << UART_TX_FIFO_CLR_POS))\n#define UART_RX_FIFO_CLR            UART_RX_FIFO_CLR\n#define UART_RX_FIFO_CLR_POS        (3U)\n#define UART_RX_FIFO_CLR_LEN        (1U)\n#define UART_RX_FIFO_CLR_MSK        (((1U << UART_RX_FIFO_CLR_LEN) - 1) << UART_RX_FIFO_CLR_POS)\n#define UART_RX_FIFO_CLR_UMSK       (~(((1U << UART_RX_FIFO_CLR_LEN) - 1) << UART_RX_FIFO_CLR_POS))\n#define UART_TX_FIFO_OVERFLOW       UART_TX_FIFO_OVERFLOW\n#define UART_TX_FIFO_OVERFLOW_POS   (4U)\n#define UART_TX_FIFO_OVERFLOW_LEN   (1U)\n#define UART_TX_FIFO_OVERFLOW_MSK   (((1U << UART_TX_FIFO_OVERFLOW_LEN) - 1) << UART_TX_FIFO_OVERFLOW_POS)\n#define UART_TX_FIFO_OVERFLOW_UMSK  (~(((1U << UART_TX_FIFO_OVERFLOW_LEN) - 1) << UART_TX_FIFO_OVERFLOW_POS))\n#define UART_TX_FIFO_UNDERFLOW      UART_TX_FIFO_UNDERFLOW\n#define UART_TX_FIFO_UNDERFLOW_POS  (5U)\n#define UART_TX_FIFO_UNDERFLOW_LEN  (1U)\n#define UART_TX_FIFO_UNDERFLOW_MSK  (((1U << UART_TX_FIFO_UNDERFLOW_LEN) - 1) << UART_TX_FIFO_UNDERFLOW_POS)\n#define UART_TX_FIFO_UNDERFLOW_UMSK (~(((1U << UART_TX_FIFO_UNDERFLOW_LEN) - 1) << UART_TX_FIFO_UNDERFLOW_POS))\n#define UART_RX_FIFO_OVERFLOW       UART_RX_FIFO_OVERFLOW\n#define UART_RX_FIFO_OVERFLOW_POS   (6U)\n#define UART_RX_FIFO_OVERFLOW_LEN   (1U)\n#define UART_RX_FIFO_OVERFLOW_MSK   (((1U << UART_RX_FIFO_OVERFLOW_LEN) - 1) << UART_RX_FIFO_OVERFLOW_POS)\n#define UART_RX_FIFO_OVERFLOW_UMSK  (~(((1U << UART_RX_FIFO_OVERFLOW_LEN) - 1) << UART_RX_FIFO_OVERFLOW_POS))\n#define UART_RX_FIFO_UNDERFLOW      UART_RX_FIFO_UNDERFLOW\n#define UART_RX_FIFO_UNDERFLOW_POS  (7U)\n#define UART_RX_FIFO_UNDERFLOW_LEN  (1U)\n#define UART_RX_FIFO_UNDERFLOW_MSK  (((1U << UART_RX_FIFO_UNDERFLOW_LEN) - 1) << UART_RX_FIFO_UNDERFLOW_POS)\n#define UART_RX_FIFO_UNDERFLOW_UMSK (~(((1U << UART_RX_FIFO_UNDERFLOW_LEN) - 1) << UART_RX_FIFO_UNDERFLOW_POS))\n\n/* 0x84 : uart_fifo_config_1 */\n#define UART_FIFO_CONFIG_1_OFFSET (0x84)\n#define UART_TX_FIFO_CNT          UART_TX_FIFO_CNT\n#define UART_TX_FIFO_CNT_POS      (0U)\n#define UART_TX_FIFO_CNT_LEN      (8U)\n#define UART_TX_FIFO_CNT_MSK      (((1U << UART_TX_FIFO_CNT_LEN) - 1) << UART_TX_FIFO_CNT_POS)\n#define UART_TX_FIFO_CNT_UMSK     (~(((1U << UART_TX_FIFO_CNT_LEN) - 1) << UART_TX_FIFO_CNT_POS))\n#define UART_RX_FIFO_CNT          UART_RX_FIFO_CNT\n#define UART_RX_FIFO_CNT_POS      (8U)\n#define UART_RX_FIFO_CNT_LEN      (8U)\n#define UART_RX_FIFO_CNT_MSK      (((1U << UART_RX_FIFO_CNT_LEN) - 1) << UART_RX_FIFO_CNT_POS)\n#define UART_RX_FIFO_CNT_UMSK     (~(((1U << UART_RX_FIFO_CNT_LEN) - 1) << UART_RX_FIFO_CNT_POS))\n#define UART_TX_FIFO_TH           UART_TX_FIFO_TH\n#define UART_TX_FIFO_TH_POS       (16U)\n#define UART_TX_FIFO_TH_LEN       (7U)\n#define UART_TX_FIFO_TH_MSK       (((1U << UART_TX_FIFO_TH_LEN) - 1) << UART_TX_FIFO_TH_POS)\n#define UART_TX_FIFO_TH_UMSK      (~(((1U << UART_TX_FIFO_TH_LEN) - 1) << UART_TX_FIFO_TH_POS))\n#define UART_RX_FIFO_TH           UART_RX_FIFO_TH\n#define UART_RX_FIFO_TH_POS       (24U)\n#define UART_RX_FIFO_TH_LEN       (7U)\n#define UART_RX_FIFO_TH_MSK       (((1U << UART_RX_FIFO_TH_LEN) - 1) << UART_RX_FIFO_TH_POS)\n#define UART_RX_FIFO_TH_UMSK      (~(((1U << UART_RX_FIFO_TH_LEN) - 1) << UART_RX_FIFO_TH_POS))\n\n/* 0x88 : uart_fifo_wdata */\n#define UART_FIFO_WDATA_OFFSET (0x88)\n#define UART_FIFO_WDATA        UART_FIFO_WDATA\n#define UART_FIFO_WDATA_POS    (0U)\n#define UART_FIFO_WDATA_LEN    (8U)\n#define UART_FIFO_WDATA_MSK    (((1U << UART_FIFO_WDATA_LEN) - 1) << UART_FIFO_WDATA_POS)\n#define UART_FIFO_WDATA_UMSK   (~(((1U << UART_FIFO_WDATA_LEN) - 1) << UART_FIFO_WDATA_POS))\n\n/* 0x8C : uart_fifo_rdata */\n#define UART_FIFO_RDATA_OFFSET (0x8C)\n#define UART_FIFO_RDATA        UART_FIFO_RDATA\n#define UART_FIFO_RDATA_POS    (0U)\n#define UART_FIFO_RDATA_LEN    (8U)\n#define UART_FIFO_RDATA_MSK    (((1U << UART_FIFO_RDATA_LEN) - 1) << UART_FIFO_RDATA_POS)\n#define UART_FIFO_RDATA_UMSK   (~(((1U << UART_FIFO_RDATA_LEN) - 1) << UART_FIFO_RDATA_POS))\n\nstruct uart_reg {\n    /* 0x0 : utx_config */\n    union {\n        struct\n        {\n            uint32_t cr_utx_en        : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t cr_utx_cts_en    : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t cr_utx_frm_en    : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t cr_utx_lin_en    : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t cr_utx_prt_en    : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t cr_utx_prt_sel   : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t cr_utx_ir_en     : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t cr_utx_ir_inv    : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t cr_utx_bit_cnt_d : 3;  /* [10: 8],        r/w,        0x7 */\n            uint32_t cr_utx_bit_cnt_p : 2;  /* [12:11],        r/w,        0x1 */\n            uint32_t cr_utx_bit_cnt_b : 3;  /* [15:13],        r/w,        0x4 */\n            uint32_t cr_utx_len       : 16; /* [31:16],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } utx_config;\n\n    /* 0x4 : urx_config */\n    union {\n        struct\n        {\n            uint32_t cr_urx_en        : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t cr_urx_abr_en    : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t reserved_2       : 1;  /* [    2],       rsvd,        0x0 */\n            uint32_t cr_urx_lin_en    : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t cr_urx_prt_en    : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t cr_urx_prt_sel   : 1;  /* [    5],        r/w,        0x0 */\n            uint32_t cr_urx_ir_en     : 1;  /* [    6],        r/w,        0x0 */\n            uint32_t cr_urx_ir_inv    : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t cr_urx_bit_cnt_d : 3;  /* [10: 8],        r/w,        0x7 */\n            uint32_t cr_urx_deg_en    : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t cr_urx_deg_cnt   : 4;  /* [15:12],        r/w,        0x0 */\n            uint32_t cr_urx_len       : 16; /* [31:16],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } urx_config;\n\n    /* 0x8 : uart_bit_prd */\n    union {\n        struct\n        {\n            uint32_t cr_utx_bit_prd : 16; /* [15: 0],        r/w,       0xff */\n            uint32_t cr_urx_bit_prd : 16; /* [31:16],        r/w,       0xff */\n        } BF;\n        uint32_t WORD;\n    } uart_bit_prd;\n\n    /* 0xC : data_config */\n    union {\n        struct\n        {\n            uint32_t cr_uart_bit_inv : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1_31   : 31; /* [31: 1],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } data_config;\n\n    /* 0x10 : utx_ir_position */\n    union {\n        struct\n        {\n            uint32_t cr_utx_ir_pos_s : 16; /* [15: 0],        r/w,       0x70 */\n            uint32_t cr_utx_ir_pos_p : 16; /* [31:16],        r/w,       0x9f */\n        } BF;\n        uint32_t WORD;\n    } utx_ir_position;\n\n    /* 0x14 : urx_ir_position */\n    union {\n        struct\n        {\n            uint32_t cr_urx_ir_pos_s : 16; /* [15: 0],        r/w,       0x6f */\n            uint32_t reserved_16_31  : 16; /* [31:16],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } urx_ir_position;\n\n    /* 0x18 : urx_rto_timer */\n    union {\n        struct\n        {\n            uint32_t cr_urx_rto_value : 8;  /* [ 7: 0],        r/w,        0xf */\n            uint32_t reserved_8_31    : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } urx_rto_timer;\n\n    /* 0x1C : uart_sw_mode */\n    union {\n        struct\n        {\n            uint32_t cr_utx_txd_sw_mode : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t cr_utx_txd_sw_val  : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t cr_urx_rts_sw_mode : 1;  /* [    2],        r/w,        0x0 */\n            uint32_t cr_urx_rts_sw_val  : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t reserved_4_31      : 28; /* [31: 4],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } uart_sw_mode;\n\n    /* 0x20 : UART interrupt status */\n    union {\n        struct\n        {\n            uint32_t utx_end_int   : 1;  /* [    0],          r,        0x0 */\n            uint32_t urx_end_int   : 1;  /* [    1],          r,        0x0 */\n            uint32_t utx_fifo_int  : 1;  /* [    2],          r,        0x0 */\n            uint32_t urx_fifo_int  : 1;  /* [    3],          r,        0x0 */\n            uint32_t urx_rto_int   : 1;  /* [    4],          r,        0x0 */\n            uint32_t urx_pce_int   : 1;  /* [    5],          r,        0x0 */\n            uint32_t utx_fer_int   : 1;  /* [    6],          r,        0x0 */\n            uint32_t urx_fer_int   : 1;  /* [    7],          r,        0x0 */\n            uint32_t urx_lse_int   : 1;  /* [    8],          r,        0x0 */\n            uint32_t reserved_9_31 : 23; /* [31: 9],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } uart_int_sts;\n\n    /* 0x24 : UART interrupt mask */\n    union {\n        struct\n        {\n            uint32_t cr_utx_end_mask  : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t cr_urx_end_mask  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t cr_utx_fifo_mask : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t cr_urx_fifo_mask : 1;  /* [    3],        r/w,        0x1 */\n            uint32_t cr_urx_rto_mask  : 1;  /* [    4],        r/w,        0x1 */\n            uint32_t cr_urx_pce_mask  : 1;  /* [    5],        r/w,        0x1 */\n            uint32_t cr_utx_fer_mask  : 1;  /* [    6],        r/w,        0x1 */\n            uint32_t cr_urx_fer_mask  : 1;  /* [    7],        r/w,        0x1 */\n            uint32_t cr_urx_lse_mask  : 1;  /* [    8],        r/w,        0x1 */\n            uint32_t reserved_9_31    : 23; /* [31: 9],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } uart_int_mask;\n\n    /* 0x28 : UART interrupt clear */\n    union {\n        struct\n        {\n            uint32_t cr_utx_end_clr : 1;  /* [    0],        w1c,        0x0 */\n            uint32_t cr_urx_end_clr : 1;  /* [    1],        w1c,        0x0 */\n            uint32_t rsvd_2         : 1;  /* [    2],       rsvd,        0x0 */\n            uint32_t rsvd_3         : 1;  /* [    3],       rsvd,        0x0 */\n            uint32_t cr_urx_rto_clr : 1;  /* [    4],        w1c,        0x0 */\n            uint32_t cr_urx_pce_clr : 1;  /* [    5],        w1c,        0x0 */\n            uint32_t rsvd_6         : 1;  /* [    6],       rsvd,        0x0 */\n            uint32_t rsvd_7         : 1;  /* [    7],       rsvd,        0x0 */\n            uint32_t cr_urx_lse_clr : 1;  /* [    8],        w1c,        0x0 */\n            uint32_t reserved_9_31  : 23; /* [31: 9],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } uart_int_clear;\n\n    /* 0x2C : UART interrupt enable */\n    union {\n        struct\n        {\n            uint32_t cr_utx_end_en  : 1;  /* [    0],        r/w,        0x1 */\n            uint32_t cr_urx_end_en  : 1;  /* [    1],        r/w,        0x1 */\n            uint32_t cr_utx_fifo_en : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t cr_urx_fifo_en : 1;  /* [    3],        r/w,        0x1 */\n            uint32_t cr_urx_rto_en  : 1;  /* [    4],        r/w,        0x1 */\n            uint32_t cr_urx_pce_en  : 1;  /* [    5],        r/w,        0x1 */\n            uint32_t cr_utx_fer_en  : 1;  /* [    6],        r/w,        0x1 */\n            uint32_t cr_urx_fer_en  : 1;  /* [    7],        r/w,        0x1 */\n            uint32_t cr_urx_lse_en  : 1;  /* [    8],        r/w,        0x1 */\n            uint32_t reserved_9_31  : 23; /* [31: 9],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } uart_int_en;\n\n    /* 0x30 : uart_status */\n    union {\n        struct\n        {\n            uint32_t sts_utx_bus_busy : 1;  /* [    0],          r,        0x0 */\n            uint32_t sts_urx_bus_busy : 1;  /* [    1],          r,        0x0 */\n            uint32_t reserved_2_31    : 30; /* [31: 2],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } uart_status;\n\n    /* 0x34 : sts_urx_abr_prd */\n    union {\n        struct\n        {\n            uint32_t sts_urx_abr_prd_start : 16; /* [15: 0],          r,        0x0 */\n            uint32_t sts_urx_abr_prd_0x55  : 16; /* [31:16],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } sts_urx_abr_prd;\n\n    /* 0x38  reserved */\n    uint8_t RESERVED0x38[72];\n\n    /* 0x80 : uart_fifo_config_0 */\n    union {\n        struct\n        {\n            uint32_t uart_dma_tx_en    : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t uart_dma_rx_en    : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t tx_fifo_clr       : 1;  /* [    2],        w1c,        0x0 */\n            uint32_t rx_fifo_clr       : 1;  /* [    3],        w1c,        0x0 */\n            uint32_t tx_fifo_overflow  : 1;  /* [    4],          r,        0x0 */\n            uint32_t tx_fifo_underflow : 1;  /* [    5],          r,        0x0 */\n            uint32_t rx_fifo_overflow  : 1;  /* [    6],          r,        0x0 */\n            uint32_t rx_fifo_underflow : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } uart_fifo_config_0;\n\n    /* 0x84 : uart_fifo_config_1 */\n    union {\n        struct\n        {\n            uint32_t tx_fifo_cnt : 8; /* [ 7: 0],          r,       0x80 */\n            uint32_t rx_fifo_cnt : 8; /* [15: 8],          r,        0x0 */\n            uint32_t tx_fifo_th  : 7; /* [22:16],        r/w,        0x0 */\n            uint32_t reserved_23 : 1; /* [   23],       rsvd,        0x0 */\n            uint32_t rx_fifo_th  : 7; /* [30:24],        r/w,        0x0 */\n            uint32_t reserved_31 : 1; /* [   31],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } uart_fifo_config_1;\n\n    /* 0x88 : uart_fifo_wdata */\n    union {\n        struct\n        {\n            uint32_t uart_fifo_wdata : 8;  /* [ 7: 0],          w,          x */\n            uint32_t reserved_8_31   : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } uart_fifo_wdata;\n\n    /* 0x8C : uart_fifo_rdata */\n    union {\n        struct\n        {\n            uint32_t uart_fifo_rdata : 8;  /* [ 7: 0],          r,        0x0 */\n            uint32_t reserved_8_31   : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } uart_fifo_rdata;\n};\n\ntypedef volatile struct uart_reg uart_reg_t;\n\n#endif /* __UART_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/regs/usb_reg.h",
    "content": "/**\n  ******************************************************************************\n  * @file    usb_reg.h\n  * @version V1.2\n  * @date    2020-09-04\n  * @brief   This file is the description of.IP register\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __USB_REG_H__\n#define __USB_REG_H__\n\n#include \"bl702.h\"\n\n/* 0x0 : usb_config */\n#define USB_CONFIG_OFFSET               (0x0)\n#define USB_CR_USB_EN                   USB_CR_USB_EN\n#define USB_CR_USB_EN_POS               (0U)\n#define USB_CR_USB_EN_LEN               (1U)\n#define USB_CR_USB_EN_MSK               (((1U << USB_CR_USB_EN_LEN) - 1) << USB_CR_USB_EN_POS)\n#define USB_CR_USB_EN_UMSK              (~(((1U << USB_CR_USB_EN_LEN) - 1) << USB_CR_USB_EN_POS))\n#define USB_CR_USB_ROM_DCT_EN           USB_CR_USB_ROM_DCT_EN\n#define USB_CR_USB_ROM_DCT_EN_POS       (4U)\n#define USB_CR_USB_ROM_DCT_EN_LEN       (1U)\n#define USB_CR_USB_ROM_DCT_EN_MSK       (((1U << USB_CR_USB_ROM_DCT_EN_LEN) - 1) << USB_CR_USB_ROM_DCT_EN_POS)\n#define USB_CR_USB_ROM_DCT_EN_UMSK      (~(((1U << USB_CR_USB_ROM_DCT_EN_LEN) - 1) << USB_CR_USB_ROM_DCT_EN_POS))\n#define USB_CR_USB_EP0_SW_CTRL          USB_CR_USB_EP0_SW_CTRL\n#define USB_CR_USB_EP0_SW_CTRL_POS      (8U)\n#define USB_CR_USB_EP0_SW_CTRL_LEN      (1U)\n#define USB_CR_USB_EP0_SW_CTRL_MSK      (((1U << USB_CR_USB_EP0_SW_CTRL_LEN) - 1) << USB_CR_USB_EP0_SW_CTRL_POS)\n#define USB_CR_USB_EP0_SW_CTRL_UMSK     (~(((1U << USB_CR_USB_EP0_SW_CTRL_LEN) - 1) << USB_CR_USB_EP0_SW_CTRL_POS))\n#define USB_CR_USB_EP0_SW_ADDR          USB_CR_USB_EP0_SW_ADDR\n#define USB_CR_USB_EP0_SW_ADDR_POS      (9U)\n#define USB_CR_USB_EP0_SW_ADDR_LEN      (7U)\n#define USB_CR_USB_EP0_SW_ADDR_MSK      (((1U << USB_CR_USB_EP0_SW_ADDR_LEN) - 1) << USB_CR_USB_EP0_SW_ADDR_POS)\n#define USB_CR_USB_EP0_SW_ADDR_UMSK     (~(((1U << USB_CR_USB_EP0_SW_ADDR_LEN) - 1) << USB_CR_USB_EP0_SW_ADDR_POS))\n#define USB_CR_USB_EP0_SW_SIZE          USB_CR_USB_EP0_SW_SIZE\n#define USB_CR_USB_EP0_SW_SIZE_POS      (16U)\n#define USB_CR_USB_EP0_SW_SIZE_LEN      (8U)\n#define USB_CR_USB_EP0_SW_SIZE_MSK      (((1U << USB_CR_USB_EP0_SW_SIZE_LEN) - 1) << USB_CR_USB_EP0_SW_SIZE_POS)\n#define USB_CR_USB_EP0_SW_SIZE_UMSK     (~(((1U << USB_CR_USB_EP0_SW_SIZE_LEN) - 1) << USB_CR_USB_EP0_SW_SIZE_POS))\n#define USB_CR_USB_EP0_SW_STALL         USB_CR_USB_EP0_SW_STALL\n#define USB_CR_USB_EP0_SW_STALL_POS     (24U)\n#define USB_CR_USB_EP0_SW_STALL_LEN     (1U)\n#define USB_CR_USB_EP0_SW_STALL_MSK     (((1U << USB_CR_USB_EP0_SW_STALL_LEN) - 1) << USB_CR_USB_EP0_SW_STALL_POS)\n#define USB_CR_USB_EP0_SW_STALL_UMSK    (~(((1U << USB_CR_USB_EP0_SW_STALL_LEN) - 1) << USB_CR_USB_EP0_SW_STALL_POS))\n#define USB_CR_USB_EP0_SW_NACK_IN       USB_CR_USB_EP0_SW_NACK_IN\n#define USB_CR_USB_EP0_SW_NACK_IN_POS   (25U)\n#define USB_CR_USB_EP0_SW_NACK_IN_LEN   (1U)\n#define USB_CR_USB_EP0_SW_NACK_IN_MSK   (((1U << USB_CR_USB_EP0_SW_NACK_IN_LEN) - 1) << USB_CR_USB_EP0_SW_NACK_IN_POS)\n#define USB_CR_USB_EP0_SW_NACK_IN_UMSK  (~(((1U << USB_CR_USB_EP0_SW_NACK_IN_LEN) - 1) << USB_CR_USB_EP0_SW_NACK_IN_POS))\n#define USB_CR_USB_EP0_SW_NACK_OUT      USB_CR_USB_EP0_SW_NACK_OUT\n#define USB_CR_USB_EP0_SW_NACK_OUT_POS  (26U)\n#define USB_CR_USB_EP0_SW_NACK_OUT_LEN  (1U)\n#define USB_CR_USB_EP0_SW_NACK_OUT_MSK  (((1U << USB_CR_USB_EP0_SW_NACK_OUT_LEN) - 1) << USB_CR_USB_EP0_SW_NACK_OUT_POS)\n#define USB_CR_USB_EP0_SW_NACK_OUT_UMSK (~(((1U << USB_CR_USB_EP0_SW_NACK_OUT_LEN) - 1) << USB_CR_USB_EP0_SW_NACK_OUT_POS))\n#define USB_CR_USB_EP0_SW_RDY           USB_CR_USB_EP0_SW_RDY\n#define USB_CR_USB_EP0_SW_RDY_POS       (27U)\n#define USB_CR_USB_EP0_SW_RDY_LEN       (1U)\n#define USB_CR_USB_EP0_SW_RDY_MSK       (((1U << USB_CR_USB_EP0_SW_RDY_LEN) - 1) << USB_CR_USB_EP0_SW_RDY_POS)\n#define USB_CR_USB_EP0_SW_RDY_UMSK      (~(((1U << USB_CR_USB_EP0_SW_RDY_LEN) - 1) << USB_CR_USB_EP0_SW_RDY_POS))\n#define USB_STS_USB_EP0_SW_RDY          USB_STS_USB_EP0_SW_RDY\n#define USB_STS_USB_EP0_SW_RDY_POS      (28U)\n#define USB_STS_USB_EP0_SW_RDY_LEN      (1U)\n#define USB_STS_USB_EP0_SW_RDY_MSK      (((1U << USB_STS_USB_EP0_SW_RDY_LEN) - 1) << USB_STS_USB_EP0_SW_RDY_POS)\n#define USB_STS_USB_EP0_SW_RDY_UMSK     (~(((1U << USB_STS_USB_EP0_SW_RDY_LEN) - 1) << USB_STS_USB_EP0_SW_RDY_POS))\n\n/* 0x4 : usb_lpm_config */\n#define USB_LPM_CONFIG_OFFSET    (0x4)\n#define USB_CR_LPM_EN            USB_CR_LPM_EN\n#define USB_CR_LPM_EN_POS        (0U)\n#define USB_CR_LPM_EN_LEN        (1U)\n#define USB_CR_LPM_EN_MSK        (((1U << USB_CR_LPM_EN_LEN) - 1) << USB_CR_LPM_EN_POS)\n#define USB_CR_LPM_EN_UMSK       (~(((1U << USB_CR_LPM_EN_LEN) - 1) << USB_CR_LPM_EN_POS))\n#define USB_CR_LPM_RESP_UPD      USB_CR_LPM_RESP_UPD\n#define USB_CR_LPM_RESP_UPD_POS  (1U)\n#define USB_CR_LPM_RESP_UPD_LEN  (1U)\n#define USB_CR_LPM_RESP_UPD_MSK  (((1U << USB_CR_LPM_RESP_UPD_LEN) - 1) << USB_CR_LPM_RESP_UPD_POS)\n#define USB_CR_LPM_RESP_UPD_UMSK (~(((1U << USB_CR_LPM_RESP_UPD_LEN) - 1) << USB_CR_LPM_RESP_UPD_POS))\n#define USB_CR_LPM_RESP          USB_CR_LPM_RESP\n#define USB_CR_LPM_RESP_POS      (2U)\n#define USB_CR_LPM_RESP_LEN      (2U)\n#define USB_CR_LPM_RESP_MSK      (((1U << USB_CR_LPM_RESP_LEN) - 1) << USB_CR_LPM_RESP_POS)\n#define USB_CR_LPM_RESP_UMSK     (~(((1U << USB_CR_LPM_RESP_LEN) - 1) << USB_CR_LPM_RESP_POS))\n#define USB_STS_LPM_ATTR         USB_STS_LPM_ATTR\n#define USB_STS_LPM_ATTR_POS     (20U)\n#define USB_STS_LPM_ATTR_LEN     (11U)\n#define USB_STS_LPM_ATTR_MSK     (((1U << USB_STS_LPM_ATTR_LEN) - 1) << USB_STS_LPM_ATTR_POS)\n#define USB_STS_LPM_ATTR_UMSK    (~(((1U << USB_STS_LPM_ATTR_LEN) - 1) << USB_STS_LPM_ATTR_POS))\n#define USB_STS_LPM              USB_STS_LPM\n#define USB_STS_LPM_POS          (31U)\n#define USB_STS_LPM_LEN          (1U)\n#define USB_STS_LPM_MSK          (((1U << USB_STS_LPM_LEN) - 1) << USB_STS_LPM_POS)\n#define USB_STS_LPM_UMSK         (~(((1U << USB_STS_LPM_LEN) - 1) << USB_STS_LPM_POS))\n\n/* 0x8 : usb_resume_config */\n#define USB_RESUME_CONFIG_OFFSET (0x8)\n#define USB_CR_RES_WIDTH         USB_CR_RES_WIDTH\n#define USB_CR_RES_WIDTH_POS     (0U)\n#define USB_CR_RES_WIDTH_LEN     (11U)\n#define USB_CR_RES_WIDTH_MSK     (((1U << USB_CR_RES_WIDTH_LEN) - 1) << USB_CR_RES_WIDTH_POS)\n#define USB_CR_RES_WIDTH_UMSK    (~(((1U << USB_CR_RES_WIDTH_LEN) - 1) << USB_CR_RES_WIDTH_POS))\n#define USB_CR_RES_TRIG          USB_CR_RES_TRIG\n#define USB_CR_RES_TRIG_POS      (12U)\n#define USB_CR_RES_TRIG_LEN      (1U)\n#define USB_CR_RES_TRIG_MSK      (((1U << USB_CR_RES_TRIG_LEN) - 1) << USB_CR_RES_TRIG_POS)\n#define USB_CR_RES_TRIG_UMSK     (~(((1U << USB_CR_RES_TRIG_LEN) - 1) << USB_CR_RES_TRIG_POS))\n#define USB_CR_RES_FORCE         USB_CR_RES_FORCE\n#define USB_CR_RES_FORCE_POS     (31U)\n#define USB_CR_RES_FORCE_LEN     (1U)\n#define USB_CR_RES_FORCE_MSK     (((1U << USB_CR_RES_FORCE_LEN) - 1) << USB_CR_RES_FORCE_POS)\n#define USB_CR_RES_FORCE_UMSK    (~(((1U << USB_CR_RES_FORCE_LEN) - 1) << USB_CR_RES_FORCE_POS))\n\n/* 0x10 : usb_setup_data_0 */\n#define USB_SETUP_DATA_0_OFFSET    (0x10)\n#define USB_STS_SETUP_DATA_B0      USB_STS_SETUP_DATA_B0\n#define USB_STS_SETUP_DATA_B0_POS  (0U)\n#define USB_STS_SETUP_DATA_B0_LEN  (8U)\n#define USB_STS_SETUP_DATA_B0_MSK  (((1U << USB_STS_SETUP_DATA_B0_LEN) - 1) << USB_STS_SETUP_DATA_B0_POS)\n#define USB_STS_SETUP_DATA_B0_UMSK (~(((1U << USB_STS_SETUP_DATA_B0_LEN) - 1) << USB_STS_SETUP_DATA_B0_POS))\n#define USB_STS_SETUP_DATA_B1      USB_STS_SETUP_DATA_B1\n#define USB_STS_SETUP_DATA_B1_POS  (8U)\n#define USB_STS_SETUP_DATA_B1_LEN  (8U)\n#define USB_STS_SETUP_DATA_B1_MSK  (((1U << USB_STS_SETUP_DATA_B1_LEN) - 1) << USB_STS_SETUP_DATA_B1_POS)\n#define USB_STS_SETUP_DATA_B1_UMSK (~(((1U << USB_STS_SETUP_DATA_B1_LEN) - 1) << USB_STS_SETUP_DATA_B1_POS))\n#define USB_STS_SETUP_DATA_B2      USB_STS_SETUP_DATA_B2\n#define USB_STS_SETUP_DATA_B2_POS  (16U)\n#define USB_STS_SETUP_DATA_B2_LEN  (8U)\n#define USB_STS_SETUP_DATA_B2_MSK  (((1U << USB_STS_SETUP_DATA_B2_LEN) - 1) << USB_STS_SETUP_DATA_B2_POS)\n#define USB_STS_SETUP_DATA_B2_UMSK (~(((1U << USB_STS_SETUP_DATA_B2_LEN) - 1) << USB_STS_SETUP_DATA_B2_POS))\n#define USB_STS_SETUP_DATA_B3      USB_STS_SETUP_DATA_B3\n#define USB_STS_SETUP_DATA_B3_POS  (24U)\n#define USB_STS_SETUP_DATA_B3_LEN  (8U)\n#define USB_STS_SETUP_DATA_B3_MSK  (((1U << USB_STS_SETUP_DATA_B3_LEN) - 1) << USB_STS_SETUP_DATA_B3_POS)\n#define USB_STS_SETUP_DATA_B3_UMSK (~(((1U << USB_STS_SETUP_DATA_B3_LEN) - 1) << USB_STS_SETUP_DATA_B3_POS))\n\n/* 0x14 : usb_setup_data_1 */\n#define USB_SETUP_DATA_1_OFFSET    (0x14)\n#define USB_STS_SETUP_DATA_B4      USB_STS_SETUP_DATA_B4\n#define USB_STS_SETUP_DATA_B4_POS  (0U)\n#define USB_STS_SETUP_DATA_B4_LEN  (8U)\n#define USB_STS_SETUP_DATA_B4_MSK  (((1U << USB_STS_SETUP_DATA_B4_LEN) - 1) << USB_STS_SETUP_DATA_B4_POS)\n#define USB_STS_SETUP_DATA_B4_UMSK (~(((1U << USB_STS_SETUP_DATA_B4_LEN) - 1) << USB_STS_SETUP_DATA_B4_POS))\n#define USB_STS_SETUP_DATA_B5      USB_STS_SETUP_DATA_B5\n#define USB_STS_SETUP_DATA_B5_POS  (8U)\n#define USB_STS_SETUP_DATA_B5_LEN  (8U)\n#define USB_STS_SETUP_DATA_B5_MSK  (((1U << USB_STS_SETUP_DATA_B5_LEN) - 1) << USB_STS_SETUP_DATA_B5_POS)\n#define USB_STS_SETUP_DATA_B5_UMSK (~(((1U << USB_STS_SETUP_DATA_B5_LEN) - 1) << USB_STS_SETUP_DATA_B5_POS))\n#define USB_STS_SETUP_DATA_B6      USB_STS_SETUP_DATA_B6\n#define USB_STS_SETUP_DATA_B6_POS  (16U)\n#define USB_STS_SETUP_DATA_B6_LEN  (8U)\n#define USB_STS_SETUP_DATA_B6_MSK  (((1U << USB_STS_SETUP_DATA_B6_LEN) - 1) << USB_STS_SETUP_DATA_B6_POS)\n#define USB_STS_SETUP_DATA_B6_UMSK (~(((1U << USB_STS_SETUP_DATA_B6_LEN) - 1) << USB_STS_SETUP_DATA_B6_POS))\n#define USB_STS_SETUP_DATA_B7      USB_STS_SETUP_DATA_B7\n#define USB_STS_SETUP_DATA_B7_POS  (24U)\n#define USB_STS_SETUP_DATA_B7_LEN  (8U)\n#define USB_STS_SETUP_DATA_B7_MSK  (((1U << USB_STS_SETUP_DATA_B7_LEN) - 1) << USB_STS_SETUP_DATA_B7_POS)\n#define USB_STS_SETUP_DATA_B7_UMSK (~(((1U << USB_STS_SETUP_DATA_B7_LEN) - 1) << USB_STS_SETUP_DATA_B7_POS))\n\n/* 0x18 : usb_frame_no */\n#define USB_FRAME_NO_OFFSET   (0x18)\n#define USB_STS_FRAME_NO      USB_STS_FRAME_NO\n#define USB_STS_FRAME_NO_POS  (0U)\n#define USB_STS_FRAME_NO_LEN  (11U)\n#define USB_STS_FRAME_NO_MSK  (((1U << USB_STS_FRAME_NO_LEN) - 1) << USB_STS_FRAME_NO_POS)\n#define USB_STS_FRAME_NO_UMSK (~(((1U << USB_STS_FRAME_NO_LEN) - 1) << USB_STS_FRAME_NO_POS))\n#define USB_STS_PID           USB_STS_PID\n#define USB_STS_PID_POS       (12U)\n#define USB_STS_PID_LEN       (4U)\n#define USB_STS_PID_MSK       (((1U << USB_STS_PID_LEN) - 1) << USB_STS_PID_POS)\n#define USB_STS_PID_UMSK      (~(((1U << USB_STS_PID_LEN) - 1) << USB_STS_PID_POS))\n#define USB_STS_EP_NO         USB_STS_EP_NO\n#define USB_STS_EP_NO_POS     (16U)\n#define USB_STS_EP_NO_LEN     (4U)\n#define USB_STS_EP_NO_MSK     (((1U << USB_STS_EP_NO_LEN) - 1) << USB_STS_EP_NO_POS)\n#define USB_STS_EP_NO_UMSK    (~(((1U << USB_STS_EP_NO_LEN) - 1) << USB_STS_EP_NO_POS))\n\n/* 0x1C : usb_error */\n#define USB_ERROR_OFFSET     (0x1C)\n#define USB_UTMI_RX_ERR      USB_UTMI_RX_ERR\n#define USB_UTMI_RX_ERR_POS  (0U)\n#define USB_UTMI_RX_ERR_LEN  (1U)\n#define USB_UTMI_RX_ERR_MSK  (((1U << USB_UTMI_RX_ERR_LEN) - 1) << USB_UTMI_RX_ERR_POS)\n#define USB_UTMI_RX_ERR_UMSK (~(((1U << USB_UTMI_RX_ERR_LEN) - 1) << USB_UTMI_RX_ERR_POS))\n#define USB_XFER_TO_ERR      USB_XFER_TO_ERR\n#define USB_XFER_TO_ERR_POS  (1U)\n#define USB_XFER_TO_ERR_LEN  (1U)\n#define USB_XFER_TO_ERR_MSK  (((1U << USB_XFER_TO_ERR_LEN) - 1) << USB_XFER_TO_ERR_POS)\n#define USB_XFER_TO_ERR_UMSK (~(((1U << USB_XFER_TO_ERR_LEN) - 1) << USB_XFER_TO_ERR_POS))\n#define USB_IVLD_EP_ERR      USB_IVLD_EP_ERR\n#define USB_IVLD_EP_ERR_POS  (2U)\n#define USB_IVLD_EP_ERR_LEN  (1U)\n#define USB_IVLD_EP_ERR_MSK  (((1U << USB_IVLD_EP_ERR_LEN) - 1) << USB_IVLD_EP_ERR_POS)\n#define USB_IVLD_EP_ERR_UMSK (~(((1U << USB_IVLD_EP_ERR_LEN) - 1) << USB_IVLD_EP_ERR_POS))\n#define USB_PID_SEQ_ERR      USB_PID_SEQ_ERR\n#define USB_PID_SEQ_ERR_POS  (3U)\n#define USB_PID_SEQ_ERR_LEN  (1U)\n#define USB_PID_SEQ_ERR_MSK  (((1U << USB_PID_SEQ_ERR_LEN) - 1) << USB_PID_SEQ_ERR_POS)\n#define USB_PID_SEQ_ERR_UMSK (~(((1U << USB_PID_SEQ_ERR_LEN) - 1) << USB_PID_SEQ_ERR_POS))\n#define USB_PID_CKS_ERR      USB_PID_CKS_ERR\n#define USB_PID_CKS_ERR_POS  (4U)\n#define USB_PID_CKS_ERR_LEN  (1U)\n#define USB_PID_CKS_ERR_MSK  (((1U << USB_PID_CKS_ERR_LEN) - 1) << USB_PID_CKS_ERR_POS)\n#define USB_PID_CKS_ERR_UMSK (~(((1U << USB_PID_CKS_ERR_LEN) - 1) << USB_PID_CKS_ERR_POS))\n#define USB_CRC5_ERR         USB_CRC5_ERR\n#define USB_CRC5_ERR_POS     (5U)\n#define USB_CRC5_ERR_LEN     (1U)\n#define USB_CRC5_ERR_MSK     (((1U << USB_CRC5_ERR_LEN) - 1) << USB_CRC5_ERR_POS)\n#define USB_CRC5_ERR_UMSK    (~(((1U << USB_CRC5_ERR_LEN) - 1) << USB_CRC5_ERR_POS))\n#define USB_CRC16_ERR        USB_CRC16_ERR\n#define USB_CRC16_ERR_POS    (6U)\n#define USB_CRC16_ERR_LEN    (1U)\n#define USB_CRC16_ERR_MSK    (((1U << USB_CRC16_ERR_LEN) - 1) << USB_CRC16_ERR_POS)\n#define USB_CRC16_ERR_UMSK   (~(((1U << USB_CRC16_ERR_LEN) - 1) << USB_CRC16_ERR_POS))\n\n/* 0x20 : USB interrupt enable */\n#define USB_INT_EN_OFFSET             (0x20)\n#define USB_CR_SOF_EN                 USB_CR_SOF_EN\n#define USB_CR_SOF_EN_POS             (0U)\n#define USB_CR_SOF_EN_LEN             (1U)\n#define USB_CR_SOF_EN_MSK             (((1U << USB_CR_SOF_EN_LEN) - 1) << USB_CR_SOF_EN_POS)\n#define USB_CR_SOF_EN_UMSK            (~(((1U << USB_CR_SOF_EN_LEN) - 1) << USB_CR_SOF_EN_POS))\n#define USB_CR_USB_RESET_EN           USB_CR_USB_RESET_EN\n#define USB_CR_USB_RESET_EN_POS       (1U)\n#define USB_CR_USB_RESET_EN_LEN       (1U)\n#define USB_CR_USB_RESET_EN_MSK       (((1U << USB_CR_USB_RESET_EN_LEN) - 1) << USB_CR_USB_RESET_EN_POS)\n#define USB_CR_USB_RESET_EN_UMSK      (~(((1U << USB_CR_USB_RESET_EN_LEN) - 1) << USB_CR_USB_RESET_EN_POS))\n#define USB_CR_VBUS_TGL_EN            USB_CR_VBUS_TGL_EN\n#define USB_CR_VBUS_TGL_EN_POS        (2U)\n#define USB_CR_VBUS_TGL_EN_LEN        (1U)\n#define USB_CR_VBUS_TGL_EN_MSK        (((1U << USB_CR_VBUS_TGL_EN_LEN) - 1) << USB_CR_VBUS_TGL_EN_POS)\n#define USB_CR_VBUS_TGL_EN_UMSK       (~(((1U << USB_CR_VBUS_TGL_EN_LEN) - 1) << USB_CR_VBUS_TGL_EN_POS))\n#define USB_CR_GET_DCT_CMD_EN         USB_CR_GET_DCT_CMD_EN\n#define USB_CR_GET_DCT_CMD_EN_POS     (3U)\n#define USB_CR_GET_DCT_CMD_EN_LEN     (1U)\n#define USB_CR_GET_DCT_CMD_EN_MSK     (((1U << USB_CR_GET_DCT_CMD_EN_LEN) - 1) << USB_CR_GET_DCT_CMD_EN_POS)\n#define USB_CR_GET_DCT_CMD_EN_UMSK    (~(((1U << USB_CR_GET_DCT_CMD_EN_LEN) - 1) << USB_CR_GET_DCT_CMD_EN_POS))\n#define USB_CR_EP0_SETUP_CMD_EN       USB_CR_EP0_SETUP_CMD_EN\n#define USB_CR_EP0_SETUP_CMD_EN_POS   (4U)\n#define USB_CR_EP0_SETUP_CMD_EN_LEN   (1U)\n#define USB_CR_EP0_SETUP_CMD_EN_MSK   (((1U << USB_CR_EP0_SETUP_CMD_EN_LEN) - 1) << USB_CR_EP0_SETUP_CMD_EN_POS)\n#define USB_CR_EP0_SETUP_CMD_EN_UMSK  (~(((1U << USB_CR_EP0_SETUP_CMD_EN_LEN) - 1) << USB_CR_EP0_SETUP_CMD_EN_POS))\n#define USB_CR_EP0_SETUP_DONE_EN      USB_CR_EP0_SETUP_DONE_EN\n#define USB_CR_EP0_SETUP_DONE_EN_POS  (5U)\n#define USB_CR_EP0_SETUP_DONE_EN_LEN  (1U)\n#define USB_CR_EP0_SETUP_DONE_EN_MSK  (((1U << USB_CR_EP0_SETUP_DONE_EN_LEN) - 1) << USB_CR_EP0_SETUP_DONE_EN_POS)\n#define USB_CR_EP0_SETUP_DONE_EN_UMSK (~(((1U << USB_CR_EP0_SETUP_DONE_EN_LEN) - 1) << USB_CR_EP0_SETUP_DONE_EN_POS))\n#define USB_CR_EP0_IN_CMD_EN          USB_CR_EP0_IN_CMD_EN\n#define USB_CR_EP0_IN_CMD_EN_POS      (6U)\n#define USB_CR_EP0_IN_CMD_EN_LEN      (1U)\n#define USB_CR_EP0_IN_CMD_EN_MSK      (((1U << USB_CR_EP0_IN_CMD_EN_LEN) - 1) << USB_CR_EP0_IN_CMD_EN_POS)\n#define USB_CR_EP0_IN_CMD_EN_UMSK     (~(((1U << USB_CR_EP0_IN_CMD_EN_LEN) - 1) << USB_CR_EP0_IN_CMD_EN_POS))\n#define USB_CR_EP0_IN_DONE_EN         USB_CR_EP0_IN_DONE_EN\n#define USB_CR_EP0_IN_DONE_EN_POS     (7U)\n#define USB_CR_EP0_IN_DONE_EN_LEN     (1U)\n#define USB_CR_EP0_IN_DONE_EN_MSK     (((1U << USB_CR_EP0_IN_DONE_EN_LEN) - 1) << USB_CR_EP0_IN_DONE_EN_POS)\n#define USB_CR_EP0_IN_DONE_EN_UMSK    (~(((1U << USB_CR_EP0_IN_DONE_EN_LEN) - 1) << USB_CR_EP0_IN_DONE_EN_POS))\n#define USB_CR_EP0_OUT_CMD_EN         USB_CR_EP0_OUT_CMD_EN\n#define USB_CR_EP0_OUT_CMD_EN_POS     (8U)\n#define USB_CR_EP0_OUT_CMD_EN_LEN     (1U)\n#define USB_CR_EP0_OUT_CMD_EN_MSK     (((1U << USB_CR_EP0_OUT_CMD_EN_LEN) - 1) << USB_CR_EP0_OUT_CMD_EN_POS)\n#define USB_CR_EP0_OUT_CMD_EN_UMSK    (~(((1U << USB_CR_EP0_OUT_CMD_EN_LEN) - 1) << USB_CR_EP0_OUT_CMD_EN_POS))\n#define USB_CR_EP0_OUT_DONE_EN        USB_CR_EP0_OUT_DONE_EN\n#define USB_CR_EP0_OUT_DONE_EN_POS    (9U)\n#define USB_CR_EP0_OUT_DONE_EN_LEN    (1U)\n#define USB_CR_EP0_OUT_DONE_EN_MSK    (((1U << USB_CR_EP0_OUT_DONE_EN_LEN) - 1) << USB_CR_EP0_OUT_DONE_EN_POS)\n#define USB_CR_EP0_OUT_DONE_EN_UMSK   (~(((1U << USB_CR_EP0_OUT_DONE_EN_LEN) - 1) << USB_CR_EP0_OUT_DONE_EN_POS))\n#define USB_CR_EP1_CMD_EN             USB_CR_EP1_CMD_EN\n#define USB_CR_EP1_CMD_EN_POS         (10U)\n#define USB_CR_EP1_CMD_EN_LEN         (1U)\n#define USB_CR_EP1_CMD_EN_MSK         (((1U << USB_CR_EP1_CMD_EN_LEN) - 1) << USB_CR_EP1_CMD_EN_POS)\n#define USB_CR_EP1_CMD_EN_UMSK        (~(((1U << USB_CR_EP1_CMD_EN_LEN) - 1) << USB_CR_EP1_CMD_EN_POS))\n#define USB_CR_EP1_DONE_EN            USB_CR_EP1_DONE_EN\n#define USB_CR_EP1_DONE_EN_POS        (11U)\n#define USB_CR_EP1_DONE_EN_LEN        (1U)\n#define USB_CR_EP1_DONE_EN_MSK        (((1U << USB_CR_EP1_DONE_EN_LEN) - 1) << USB_CR_EP1_DONE_EN_POS)\n#define USB_CR_EP1_DONE_EN_UMSK       (~(((1U << USB_CR_EP1_DONE_EN_LEN) - 1) << USB_CR_EP1_DONE_EN_POS))\n#define USB_CR_EP2_CMD_EN             USB_CR_EP2_CMD_EN\n#define USB_CR_EP2_CMD_EN_POS         (12U)\n#define USB_CR_EP2_CMD_EN_LEN         (1U)\n#define USB_CR_EP2_CMD_EN_MSK         (((1U << USB_CR_EP2_CMD_EN_LEN) - 1) << USB_CR_EP2_CMD_EN_POS)\n#define USB_CR_EP2_CMD_EN_UMSK        (~(((1U << USB_CR_EP2_CMD_EN_LEN) - 1) << USB_CR_EP2_CMD_EN_POS))\n#define USB_CR_EP2_DONE_EN            USB_CR_EP2_DONE_EN\n#define USB_CR_EP2_DONE_EN_POS        (13U)\n#define USB_CR_EP2_DONE_EN_LEN        (1U)\n#define USB_CR_EP2_DONE_EN_MSK        (((1U << USB_CR_EP2_DONE_EN_LEN) - 1) << USB_CR_EP2_DONE_EN_POS)\n#define USB_CR_EP2_DONE_EN_UMSK       (~(((1U << USB_CR_EP2_DONE_EN_LEN) - 1) << USB_CR_EP2_DONE_EN_POS))\n#define USB_CR_EP3_CMD_EN             USB_CR_EP3_CMD_EN\n#define USB_CR_EP3_CMD_EN_POS         (14U)\n#define USB_CR_EP3_CMD_EN_LEN         (1U)\n#define USB_CR_EP3_CMD_EN_MSK         (((1U << USB_CR_EP3_CMD_EN_LEN) - 1) << USB_CR_EP3_CMD_EN_POS)\n#define USB_CR_EP3_CMD_EN_UMSK        (~(((1U << USB_CR_EP3_CMD_EN_LEN) - 1) << USB_CR_EP3_CMD_EN_POS))\n#define USB_CR_EP3_DONE_EN            USB_CR_EP3_DONE_EN\n#define USB_CR_EP3_DONE_EN_POS        (15U)\n#define USB_CR_EP3_DONE_EN_LEN        (1U)\n#define USB_CR_EP3_DONE_EN_MSK        (((1U << USB_CR_EP3_DONE_EN_LEN) - 1) << USB_CR_EP3_DONE_EN_POS)\n#define USB_CR_EP3_DONE_EN_UMSK       (~(((1U << USB_CR_EP3_DONE_EN_LEN) - 1) << USB_CR_EP3_DONE_EN_POS))\n#define USB_CR_EP4_CMD_EN             USB_CR_EP4_CMD_EN\n#define USB_CR_EP4_CMD_EN_POS         (16U)\n#define USB_CR_EP4_CMD_EN_LEN         (1U)\n#define USB_CR_EP4_CMD_EN_MSK         (((1U << USB_CR_EP4_CMD_EN_LEN) - 1) << USB_CR_EP4_CMD_EN_POS)\n#define USB_CR_EP4_CMD_EN_UMSK        (~(((1U << USB_CR_EP4_CMD_EN_LEN) - 1) << USB_CR_EP4_CMD_EN_POS))\n#define USB_CR_EP4_DONE_EN            USB_CR_EP4_DONE_EN\n#define USB_CR_EP4_DONE_EN_POS        (17U)\n#define USB_CR_EP4_DONE_EN_LEN        (1U)\n#define USB_CR_EP4_DONE_EN_MSK        (((1U << USB_CR_EP4_DONE_EN_LEN) - 1) << USB_CR_EP4_DONE_EN_POS)\n#define USB_CR_EP4_DONE_EN_UMSK       (~(((1U << USB_CR_EP4_DONE_EN_LEN) - 1) << USB_CR_EP4_DONE_EN_POS))\n#define USB_CR_EP5_CMD_EN             USB_CR_EP5_CMD_EN\n#define USB_CR_EP5_CMD_EN_POS         (18U)\n#define USB_CR_EP5_CMD_EN_LEN         (1U)\n#define USB_CR_EP5_CMD_EN_MSK         (((1U << USB_CR_EP5_CMD_EN_LEN) - 1) << USB_CR_EP5_CMD_EN_POS)\n#define USB_CR_EP5_CMD_EN_UMSK        (~(((1U << USB_CR_EP5_CMD_EN_LEN) - 1) << USB_CR_EP5_CMD_EN_POS))\n#define USB_CR_EP5_DONE_EN            USB_CR_EP5_DONE_EN\n#define USB_CR_EP5_DONE_EN_POS        (19U)\n#define USB_CR_EP5_DONE_EN_LEN        (1U)\n#define USB_CR_EP5_DONE_EN_MSK        (((1U << USB_CR_EP5_DONE_EN_LEN) - 1) << USB_CR_EP5_DONE_EN_POS)\n#define USB_CR_EP5_DONE_EN_UMSK       (~(((1U << USB_CR_EP5_DONE_EN_LEN) - 1) << USB_CR_EP5_DONE_EN_POS))\n#define USB_CR_EP6_CMD_EN             USB_CR_EP6_CMD_EN\n#define USB_CR_EP6_CMD_EN_POS         (20U)\n#define USB_CR_EP6_CMD_EN_LEN         (1U)\n#define USB_CR_EP6_CMD_EN_MSK         (((1U << USB_CR_EP6_CMD_EN_LEN) - 1) << USB_CR_EP6_CMD_EN_POS)\n#define USB_CR_EP6_CMD_EN_UMSK        (~(((1U << USB_CR_EP6_CMD_EN_LEN) - 1) << USB_CR_EP6_CMD_EN_POS))\n#define USB_CR_EP6_DONE_EN            USB_CR_EP6_DONE_EN\n#define USB_CR_EP6_DONE_EN_POS        (21U)\n#define USB_CR_EP6_DONE_EN_LEN        (1U)\n#define USB_CR_EP6_DONE_EN_MSK        (((1U << USB_CR_EP6_DONE_EN_LEN) - 1) << USB_CR_EP6_DONE_EN_POS)\n#define USB_CR_EP6_DONE_EN_UMSK       (~(((1U << USB_CR_EP6_DONE_EN_LEN) - 1) << USB_CR_EP6_DONE_EN_POS))\n#define USB_CR_EP7_CMD_EN             USB_CR_EP7_CMD_EN\n#define USB_CR_EP7_CMD_EN_POS         (22U)\n#define USB_CR_EP7_CMD_EN_LEN         (1U)\n#define USB_CR_EP7_CMD_EN_MSK         (((1U << USB_CR_EP7_CMD_EN_LEN) - 1) << USB_CR_EP7_CMD_EN_POS)\n#define USB_CR_EP7_CMD_EN_UMSK        (~(((1U << USB_CR_EP7_CMD_EN_LEN) - 1) << USB_CR_EP7_CMD_EN_POS))\n#define USB_CR_EP7_DONE_EN            USB_CR_EP7_DONE_EN\n#define USB_CR_EP7_DONE_EN_POS        (23U)\n#define USB_CR_EP7_DONE_EN_LEN        (1U)\n#define USB_CR_EP7_DONE_EN_MSK        (((1U << USB_CR_EP7_DONE_EN_LEN) - 1) << USB_CR_EP7_DONE_EN_POS)\n#define USB_CR_EP7_DONE_EN_UMSK       (~(((1U << USB_CR_EP7_DONE_EN_LEN) - 1) << USB_CR_EP7_DONE_EN_POS))\n#define USB_CR_USB_REND_EN            USB_CR_USB_REND_EN\n#define USB_CR_USB_REND_EN_POS        (27U)\n#define USB_CR_USB_REND_EN_LEN        (1U)\n#define USB_CR_USB_REND_EN_MSK        (((1U << USB_CR_USB_REND_EN_LEN) - 1) << USB_CR_USB_REND_EN_POS)\n#define USB_CR_USB_REND_EN_UMSK       (~(((1U << USB_CR_USB_REND_EN_LEN) - 1) << USB_CR_USB_REND_EN_POS))\n#define USB_CR_LPM_WKUP_EN            USB_CR_LPM_WKUP_EN\n#define USB_CR_LPM_WKUP_EN_POS        (28U)\n#define USB_CR_LPM_WKUP_EN_LEN        (1U)\n#define USB_CR_LPM_WKUP_EN_MSK        (((1U << USB_CR_LPM_WKUP_EN_LEN) - 1) << USB_CR_LPM_WKUP_EN_POS)\n#define USB_CR_LPM_WKUP_EN_UMSK       (~(((1U << USB_CR_LPM_WKUP_EN_LEN) - 1) << USB_CR_LPM_WKUP_EN_POS))\n#define USB_CR_LPM_PKT_EN             USB_CR_LPM_PKT_EN\n#define USB_CR_LPM_PKT_EN_POS         (29U)\n#define USB_CR_LPM_PKT_EN_LEN         (1U)\n#define USB_CR_LPM_PKT_EN_MSK         (((1U << USB_CR_LPM_PKT_EN_LEN) - 1) << USB_CR_LPM_PKT_EN_POS)\n#define USB_CR_LPM_PKT_EN_UMSK        (~(((1U << USB_CR_LPM_PKT_EN_LEN) - 1) << USB_CR_LPM_PKT_EN_POS))\n#define USB_CR_SOF_3MS_EN             USB_CR_SOF_3MS_EN\n#define USB_CR_SOF_3MS_EN_POS         (30U)\n#define USB_CR_SOF_3MS_EN_LEN         (1U)\n#define USB_CR_SOF_3MS_EN_MSK         (((1U << USB_CR_SOF_3MS_EN_LEN) - 1) << USB_CR_SOF_3MS_EN_POS)\n#define USB_CR_SOF_3MS_EN_UMSK        (~(((1U << USB_CR_SOF_3MS_EN_LEN) - 1) << USB_CR_SOF_3MS_EN_POS))\n#define USB_CR_USB_ERR_EN             USB_CR_USB_ERR_EN\n#define USB_CR_USB_ERR_EN_POS         (31U)\n#define USB_CR_USB_ERR_EN_LEN         (1U)\n#define USB_CR_USB_ERR_EN_MSK         (((1U << USB_CR_USB_ERR_EN_LEN) - 1) << USB_CR_USB_ERR_EN_POS)\n#define USB_CR_USB_ERR_EN_UMSK        (~(((1U << USB_CR_USB_ERR_EN_LEN) - 1) << USB_CR_USB_ERR_EN_POS))\n\n/* 0x24 : USB interrupt status */\n#define USB_INT_STS_OFFSET          (0x24)\n#define USB_SOF_INT                 USB_SOF_INT\n#define USB_SOF_INT_POS             (0U)\n#define USB_SOF_INT_LEN             (1U)\n#define USB_SOF_INT_MSK             (((1U << USB_SOF_INT_LEN) - 1) << USB_SOF_INT_POS)\n#define USB_SOF_INT_UMSK            (~(((1U << USB_SOF_INT_LEN) - 1) << USB_SOF_INT_POS))\n#define USB_RESET_INT               USB_RESET_INT\n#define USB_RESET_INT_POS           (1U)\n#define USB_RESET_INT_LEN           (1U)\n#define USB_RESET_INT_MSK           (((1U << USB_RESET_INT_LEN) - 1) << USB_RESET_INT_POS)\n#define USB_RESET_INT_UMSK          (~(((1U << USB_RESET_INT_LEN) - 1) << USB_RESET_INT_POS))\n#define USB_VBUS_TGL_INT            USB_VBUS_TGL_INT\n#define USB_VBUS_TGL_INT_POS        (2U)\n#define USB_VBUS_TGL_INT_LEN        (1U)\n#define USB_VBUS_TGL_INT_MSK        (((1U << USB_VBUS_TGL_INT_LEN) - 1) << USB_VBUS_TGL_INT_POS)\n#define USB_VBUS_TGL_INT_UMSK       (~(((1U << USB_VBUS_TGL_INT_LEN) - 1) << USB_VBUS_TGL_INT_POS))\n#define USB_GET_DCT_CMD_INT         USB_GET_DCT_CMD_INT\n#define USB_GET_DCT_CMD_INT_POS     (3U)\n#define USB_GET_DCT_CMD_INT_LEN     (1U)\n#define USB_GET_DCT_CMD_INT_MSK     (((1U << USB_GET_DCT_CMD_INT_LEN) - 1) << USB_GET_DCT_CMD_INT_POS)\n#define USB_GET_DCT_CMD_INT_UMSK    (~(((1U << USB_GET_DCT_CMD_INT_LEN) - 1) << USB_GET_DCT_CMD_INT_POS))\n#define USB_EP0_SETUP_CMD_INT       USB_EP0_SETUP_CMD_INT\n#define USB_EP0_SETUP_CMD_INT_POS   (4U)\n#define USB_EP0_SETUP_CMD_INT_LEN   (1U)\n#define USB_EP0_SETUP_CMD_INT_MSK   (((1U << USB_EP0_SETUP_CMD_INT_LEN) - 1) << USB_EP0_SETUP_CMD_INT_POS)\n#define USB_EP0_SETUP_CMD_INT_UMSK  (~(((1U << USB_EP0_SETUP_CMD_INT_LEN) - 1) << USB_EP0_SETUP_CMD_INT_POS))\n#define USB_EP0_SETUP_DONE_INT      USB_EP0_SETUP_DONE_INT\n#define USB_EP0_SETUP_DONE_INT_POS  (5U)\n#define USB_EP0_SETUP_DONE_INT_LEN  (1U)\n#define USB_EP0_SETUP_DONE_INT_MSK  (((1U << USB_EP0_SETUP_DONE_INT_LEN) - 1) << USB_EP0_SETUP_DONE_INT_POS)\n#define USB_EP0_SETUP_DONE_INT_UMSK (~(((1U << USB_EP0_SETUP_DONE_INT_LEN) - 1) << USB_EP0_SETUP_DONE_INT_POS))\n#define USB_EP0_IN_CMD_INT          USB_EP0_IN_CMD_INT\n#define USB_EP0_IN_CMD_INT_POS      (6U)\n#define USB_EP0_IN_CMD_INT_LEN      (1U)\n#define USB_EP0_IN_CMD_INT_MSK      (((1U << USB_EP0_IN_CMD_INT_LEN) - 1) << USB_EP0_IN_CMD_INT_POS)\n#define USB_EP0_IN_CMD_INT_UMSK     (~(((1U << USB_EP0_IN_CMD_INT_LEN) - 1) << USB_EP0_IN_CMD_INT_POS))\n#define USB_EP0_IN_DONE_INT         USB_EP0_IN_DONE_INT\n#define USB_EP0_IN_DONE_INT_POS     (7U)\n#define USB_EP0_IN_DONE_INT_LEN     (1U)\n#define USB_EP0_IN_DONE_INT_MSK     (((1U << USB_EP0_IN_DONE_INT_LEN) - 1) << USB_EP0_IN_DONE_INT_POS)\n#define USB_EP0_IN_DONE_INT_UMSK    (~(((1U << USB_EP0_IN_DONE_INT_LEN) - 1) << USB_EP0_IN_DONE_INT_POS))\n#define USB_EP0_OUT_CMD_INT         USB_EP0_OUT_CMD_INT\n#define USB_EP0_OUT_CMD_INT_POS     (8U)\n#define USB_EP0_OUT_CMD_INT_LEN     (1U)\n#define USB_EP0_OUT_CMD_INT_MSK     (((1U << USB_EP0_OUT_CMD_INT_LEN) - 1) << USB_EP0_OUT_CMD_INT_POS)\n#define USB_EP0_OUT_CMD_INT_UMSK    (~(((1U << USB_EP0_OUT_CMD_INT_LEN) - 1) << USB_EP0_OUT_CMD_INT_POS))\n#define USB_EP0_OUT_DONE_INT        USB_EP0_OUT_DONE_INT\n#define USB_EP0_OUT_DONE_INT_POS    (9U)\n#define USB_EP0_OUT_DONE_INT_LEN    (1U)\n#define USB_EP0_OUT_DONE_INT_MSK    (((1U << USB_EP0_OUT_DONE_INT_LEN) - 1) << USB_EP0_OUT_DONE_INT_POS)\n#define USB_EP0_OUT_DONE_INT_UMSK   (~(((1U << USB_EP0_OUT_DONE_INT_LEN) - 1) << USB_EP0_OUT_DONE_INT_POS))\n#define USB_EP1_CMD_INT             USB_EP1_CMD_INT\n#define USB_EP1_CMD_INT_POS         (10U)\n#define USB_EP1_CMD_INT_LEN         (1U)\n#define USB_EP1_CMD_INT_MSK         (((1U << USB_EP1_CMD_INT_LEN) - 1) << USB_EP1_CMD_INT_POS)\n#define USB_EP1_CMD_INT_UMSK        (~(((1U << USB_EP1_CMD_INT_LEN) - 1) << USB_EP1_CMD_INT_POS))\n#define USB_EP1_DONE_INT            USB_EP1_DONE_INT\n#define USB_EP1_DONE_INT_POS        (11U)\n#define USB_EP1_DONE_INT_LEN        (1U)\n#define USB_EP1_DONE_INT_MSK        (((1U << USB_EP1_DONE_INT_LEN) - 1) << USB_EP1_DONE_INT_POS)\n#define USB_EP1_DONE_INT_UMSK       (~(((1U << USB_EP1_DONE_INT_LEN) - 1) << USB_EP1_DONE_INT_POS))\n#define USB_EP2_CMD_INT             USB_EP2_CMD_INT\n#define USB_EP2_CMD_INT_POS         (12U)\n#define USB_EP2_CMD_INT_LEN         (1U)\n#define USB_EP2_CMD_INT_MSK         (((1U << USB_EP2_CMD_INT_LEN) - 1) << USB_EP2_CMD_INT_POS)\n#define USB_EP2_CMD_INT_UMSK        (~(((1U << USB_EP2_CMD_INT_LEN) - 1) << USB_EP2_CMD_INT_POS))\n#define USB_EP2_DONE_INT            USB_EP2_DONE_INT\n#define USB_EP2_DONE_INT_POS        (13U)\n#define USB_EP2_DONE_INT_LEN        (1U)\n#define USB_EP2_DONE_INT_MSK        (((1U << USB_EP2_DONE_INT_LEN) - 1) << USB_EP2_DONE_INT_POS)\n#define USB_EP2_DONE_INT_UMSK       (~(((1U << USB_EP2_DONE_INT_LEN) - 1) << USB_EP2_DONE_INT_POS))\n#define USB_EP3_CMD_INT             USB_EP3_CMD_INT\n#define USB_EP3_CMD_INT_POS         (14U)\n#define USB_EP3_CMD_INT_LEN         (1U)\n#define USB_EP3_CMD_INT_MSK         (((1U << USB_EP3_CMD_INT_LEN) - 1) << USB_EP3_CMD_INT_POS)\n#define USB_EP3_CMD_INT_UMSK        (~(((1U << USB_EP3_CMD_INT_LEN) - 1) << USB_EP3_CMD_INT_POS))\n#define USB_EP3_DONE_INT            USB_EP3_DONE_INT\n#define USB_EP3_DONE_INT_POS        (15U)\n#define USB_EP3_DONE_INT_LEN        (1U)\n#define USB_EP3_DONE_INT_MSK        (((1U << USB_EP3_DONE_INT_LEN) - 1) << USB_EP3_DONE_INT_POS)\n#define USB_EP3_DONE_INT_UMSK       (~(((1U << USB_EP3_DONE_INT_LEN) - 1) << USB_EP3_DONE_INT_POS))\n#define USB_EP4_CMD_INT             USB_EP4_CMD_INT\n#define USB_EP4_CMD_INT_POS         (16U)\n#define USB_EP4_CMD_INT_LEN         (1U)\n#define USB_EP4_CMD_INT_MSK         (((1U << USB_EP4_CMD_INT_LEN) - 1) << USB_EP4_CMD_INT_POS)\n#define USB_EP4_CMD_INT_UMSK        (~(((1U << USB_EP4_CMD_INT_LEN) - 1) << USB_EP4_CMD_INT_POS))\n#define USB_EP4_DONE_INT            USB_EP4_DONE_INT\n#define USB_EP4_DONE_INT_POS        (17U)\n#define USB_EP4_DONE_INT_LEN        (1U)\n#define USB_EP4_DONE_INT_MSK        (((1U << USB_EP4_DONE_INT_LEN) - 1) << USB_EP4_DONE_INT_POS)\n#define USB_EP4_DONE_INT_UMSK       (~(((1U << USB_EP4_DONE_INT_LEN) - 1) << USB_EP4_DONE_INT_POS))\n#define USB_EP5_CMD_INT             USB_EP5_CMD_INT\n#define USB_EP5_CMD_INT_POS         (18U)\n#define USB_EP5_CMD_INT_LEN         (1U)\n#define USB_EP5_CMD_INT_MSK         (((1U << USB_EP5_CMD_INT_LEN) - 1) << USB_EP5_CMD_INT_POS)\n#define USB_EP5_CMD_INT_UMSK        (~(((1U << USB_EP5_CMD_INT_LEN) - 1) << USB_EP5_CMD_INT_POS))\n#define USB_EP5_DONE_INT            USB_EP5_DONE_INT\n#define USB_EP5_DONE_INT_POS        (19U)\n#define USB_EP5_DONE_INT_LEN        (1U)\n#define USB_EP5_DONE_INT_MSK        (((1U << USB_EP5_DONE_INT_LEN) - 1) << USB_EP5_DONE_INT_POS)\n#define USB_EP5_DONE_INT_UMSK       (~(((1U << USB_EP5_DONE_INT_LEN) - 1) << USB_EP5_DONE_INT_POS))\n#define USB_EP6_CMD_INT             USB_EP6_CMD_INT\n#define USB_EP6_CMD_INT_POS         (20U)\n#define USB_EP6_CMD_INT_LEN         (1U)\n#define USB_EP6_CMD_INT_MSK         (((1U << USB_EP6_CMD_INT_LEN) - 1) << USB_EP6_CMD_INT_POS)\n#define USB_EP6_CMD_INT_UMSK        (~(((1U << USB_EP6_CMD_INT_LEN) - 1) << USB_EP6_CMD_INT_POS))\n#define USB_EP6_DONE_INT            USB_EP6_DONE_INT\n#define USB_EP6_DONE_INT_POS        (21U)\n#define USB_EP6_DONE_INT_LEN        (1U)\n#define USB_EP6_DONE_INT_MSK        (((1U << USB_EP6_DONE_INT_LEN) - 1) << USB_EP6_DONE_INT_POS)\n#define USB_EP6_DONE_INT_UMSK       (~(((1U << USB_EP6_DONE_INT_LEN) - 1) << USB_EP6_DONE_INT_POS))\n#define USB_EP7_CMD_INT             USB_EP7_CMD_INT\n#define USB_EP7_CMD_INT_POS         (22U)\n#define USB_EP7_CMD_INT_LEN         (1U)\n#define USB_EP7_CMD_INT_MSK         (((1U << USB_EP7_CMD_INT_LEN) - 1) << USB_EP7_CMD_INT_POS)\n#define USB_EP7_CMD_INT_UMSK        (~(((1U << USB_EP7_CMD_INT_LEN) - 1) << USB_EP7_CMD_INT_POS))\n#define USB_EP7_DONE_INT            USB_EP7_DONE_INT\n#define USB_EP7_DONE_INT_POS        (23U)\n#define USB_EP7_DONE_INT_LEN        (1U)\n#define USB_EP7_DONE_INT_MSK        (((1U << USB_EP7_DONE_INT_LEN) - 1) << USB_EP7_DONE_INT_POS)\n#define USB_EP7_DONE_INT_UMSK       (~(((1U << USB_EP7_DONE_INT_LEN) - 1) << USB_EP7_DONE_INT_POS))\n#define USB_REND_INT                USB_REND_INT\n#define USB_REND_INT_POS            (27U)\n#define USB_REND_INT_LEN            (1U)\n#define USB_REND_INT_MSK            (((1U << USB_REND_INT_LEN) - 1) << USB_REND_INT_POS)\n#define USB_REND_INT_UMSK           (~(((1U << USB_REND_INT_LEN) - 1) << USB_REND_INT_POS))\n#define USB_LPM_WKUP_INT            USB_LPM_WKUP_INT\n#define USB_LPM_WKUP_INT_POS        (28U)\n#define USB_LPM_WKUP_INT_LEN        (1U)\n#define USB_LPM_WKUP_INT_MSK        (((1U << USB_LPM_WKUP_INT_LEN) - 1) << USB_LPM_WKUP_INT_POS)\n#define USB_LPM_WKUP_INT_UMSK       (~(((1U << USB_LPM_WKUP_INT_LEN) - 1) << USB_LPM_WKUP_INT_POS))\n#define USB_LPM_PKT_INT             USB_LPM_PKT_INT\n#define USB_LPM_PKT_INT_POS         (29U)\n#define USB_LPM_PKT_INT_LEN         (1U)\n#define USB_LPM_PKT_INT_MSK         (((1U << USB_LPM_PKT_INT_LEN) - 1) << USB_LPM_PKT_INT_POS)\n#define USB_LPM_PKT_INT_UMSK        (~(((1U << USB_LPM_PKT_INT_LEN) - 1) << USB_LPM_PKT_INT_POS))\n#define USB_SOF_3MS_INT             USB_SOF_3MS_INT\n#define USB_SOF_3MS_INT_POS         (30U)\n#define USB_SOF_3MS_INT_LEN         (1U)\n#define USB_SOF_3MS_INT_MSK         (((1U << USB_SOF_3MS_INT_LEN) - 1) << USB_SOF_3MS_INT_POS)\n#define USB_SOF_3MS_INT_UMSK        (~(((1U << USB_SOF_3MS_INT_LEN) - 1) << USB_SOF_3MS_INT_POS))\n#define USB_ERR_INT                 USB_ERR_INT\n#define USB_ERR_INT_POS             (31U)\n#define USB_ERR_INT_LEN             (1U)\n#define USB_ERR_INT_MSK             (((1U << USB_ERR_INT_LEN) - 1) << USB_ERR_INT_POS)\n#define USB_ERR_INT_UMSK            (~(((1U << USB_ERR_INT_LEN) - 1) << USB_ERR_INT_POS))\n\n/* 0x28 : USB interrupt mask */\n#define USB_INT_MASK_OFFSET             (0x28)\n#define USB_CR_SOF_MASK                 USB_CR_SOF_MASK\n#define USB_CR_SOF_MASK_POS             (0U)\n#define USB_CR_SOF_MASK_LEN             (1U)\n#define USB_CR_SOF_MASK_MSK             (((1U << USB_CR_SOF_MASK_LEN) - 1) << USB_CR_SOF_MASK_POS)\n#define USB_CR_SOF_MASK_UMSK            (~(((1U << USB_CR_SOF_MASK_LEN) - 1) << USB_CR_SOF_MASK_POS))\n#define USB_CR_USB_RESET_MASK           USB_CR_USB_RESET_MASK\n#define USB_CR_USB_RESET_MASK_POS       (1U)\n#define USB_CR_USB_RESET_MASK_LEN       (1U)\n#define USB_CR_USB_RESET_MASK_MSK       (((1U << USB_CR_USB_RESET_MASK_LEN) - 1) << USB_CR_USB_RESET_MASK_POS)\n#define USB_CR_USB_RESET_MASK_UMSK      (~(((1U << USB_CR_USB_RESET_MASK_LEN) - 1) << USB_CR_USB_RESET_MASK_POS))\n#define USB_CR_VBUS_TGL_MASK            USB_CR_VBUS_TGL_MASK\n#define USB_CR_VBUS_TGL_MASK_POS        (2U)\n#define USB_CR_VBUS_TGL_MASK_LEN        (1U)\n#define USB_CR_VBUS_TGL_MASK_MSK        (((1U << USB_CR_VBUS_TGL_MASK_LEN) - 1) << USB_CR_VBUS_TGL_MASK_POS)\n#define USB_CR_VBUS_TGL_MASK_UMSK       (~(((1U << USB_CR_VBUS_TGL_MASK_LEN) - 1) << USB_CR_VBUS_TGL_MASK_POS))\n#define USB_CR_GET_DCT_CMD_MASK         USB_CR_GET_DCT_CMD_MASK\n#define USB_CR_GET_DCT_CMD_MASK_POS     (3U)\n#define USB_CR_GET_DCT_CMD_MASK_LEN     (1U)\n#define USB_CR_GET_DCT_CMD_MASK_MSK     (((1U << USB_CR_GET_DCT_CMD_MASK_LEN) - 1) << USB_CR_GET_DCT_CMD_MASK_POS)\n#define USB_CR_GET_DCT_CMD_MASK_UMSK    (~(((1U << USB_CR_GET_DCT_CMD_MASK_LEN) - 1) << USB_CR_GET_DCT_CMD_MASK_POS))\n#define USB_CR_EP0_SETUP_CMD_MASK       USB_CR_EP0_SETUP_CMD_MASK\n#define USB_CR_EP0_SETUP_CMD_MASK_POS   (4U)\n#define USB_CR_EP0_SETUP_CMD_MASK_LEN   (1U)\n#define USB_CR_EP0_SETUP_CMD_MASK_MSK   (((1U << USB_CR_EP0_SETUP_CMD_MASK_LEN) - 1) << USB_CR_EP0_SETUP_CMD_MASK_POS)\n#define USB_CR_EP0_SETUP_CMD_MASK_UMSK  (~(((1U << USB_CR_EP0_SETUP_CMD_MASK_LEN) - 1) << USB_CR_EP0_SETUP_CMD_MASK_POS))\n#define USB_CR_EP0_SETUP_DONE_MASK      USB_CR_EP0_SETUP_DONE_MASK\n#define USB_CR_EP0_SETUP_DONE_MASK_POS  (5U)\n#define USB_CR_EP0_SETUP_DONE_MASK_LEN  (1U)\n#define USB_CR_EP0_SETUP_DONE_MASK_MSK  (((1U << USB_CR_EP0_SETUP_DONE_MASK_LEN) - 1) << USB_CR_EP0_SETUP_DONE_MASK_POS)\n#define USB_CR_EP0_SETUP_DONE_MASK_UMSK (~(((1U << USB_CR_EP0_SETUP_DONE_MASK_LEN) - 1) << USB_CR_EP0_SETUP_DONE_MASK_POS))\n#define USB_CR_EP0_IN_CMD_MASK          USB_CR_EP0_IN_CMD_MASK\n#define USB_CR_EP0_IN_CMD_MASK_POS      (6U)\n#define USB_CR_EP0_IN_CMD_MASK_LEN      (1U)\n#define USB_CR_EP0_IN_CMD_MASK_MSK      (((1U << USB_CR_EP0_IN_CMD_MASK_LEN) - 1) << USB_CR_EP0_IN_CMD_MASK_POS)\n#define USB_CR_EP0_IN_CMD_MASK_UMSK     (~(((1U << USB_CR_EP0_IN_CMD_MASK_LEN) - 1) << USB_CR_EP0_IN_CMD_MASK_POS))\n#define USB_CR_EP0_IN_DONE_MASK         USB_CR_EP0_IN_DONE_MASK\n#define USB_CR_EP0_IN_DONE_MASK_POS     (7U)\n#define USB_CR_EP0_IN_DONE_MASK_LEN     (1U)\n#define USB_CR_EP0_IN_DONE_MASK_MSK     (((1U << USB_CR_EP0_IN_DONE_MASK_LEN) - 1) << USB_CR_EP0_IN_DONE_MASK_POS)\n#define USB_CR_EP0_IN_DONE_MASK_UMSK    (~(((1U << USB_CR_EP0_IN_DONE_MASK_LEN) - 1) << USB_CR_EP0_IN_DONE_MASK_POS))\n#define USB_CR_EP0_OUT_CMD_MASK         USB_CR_EP0_OUT_CMD_MASK\n#define USB_CR_EP0_OUT_CMD_MASK_POS     (8U)\n#define USB_CR_EP0_OUT_CMD_MASK_LEN     (1U)\n#define USB_CR_EP0_OUT_CMD_MASK_MSK     (((1U << USB_CR_EP0_OUT_CMD_MASK_LEN) - 1) << USB_CR_EP0_OUT_CMD_MASK_POS)\n#define USB_CR_EP0_OUT_CMD_MASK_UMSK    (~(((1U << USB_CR_EP0_OUT_CMD_MASK_LEN) - 1) << USB_CR_EP0_OUT_CMD_MASK_POS))\n#define USB_CR_EP0_OUT_DONE_MASK        USB_CR_EP0_OUT_DONE_MASK\n#define USB_CR_EP0_OUT_DONE_MASK_POS    (9U)\n#define USB_CR_EP0_OUT_DONE_MASK_LEN    (1U)\n#define USB_CR_EP0_OUT_DONE_MASK_MSK    (((1U << USB_CR_EP0_OUT_DONE_MASK_LEN) - 1) << USB_CR_EP0_OUT_DONE_MASK_POS)\n#define USB_CR_EP0_OUT_DONE_MASK_UMSK   (~(((1U << USB_CR_EP0_OUT_DONE_MASK_LEN) - 1) << USB_CR_EP0_OUT_DONE_MASK_POS))\n#define USB_CR_EP1_CMD_MASK             USB_CR_EP1_CMD_MASK\n#define USB_CR_EP1_CMD_MASK_POS         (10U)\n#define USB_CR_EP1_CMD_MASK_LEN         (1U)\n#define USB_CR_EP1_CMD_MASK_MSK         (((1U << USB_CR_EP1_CMD_MASK_LEN) - 1) << USB_CR_EP1_CMD_MASK_POS)\n#define USB_CR_EP1_CMD_MASK_UMSK        (~(((1U << USB_CR_EP1_CMD_MASK_LEN) - 1) << USB_CR_EP1_CMD_MASK_POS))\n#define USB_CR_EP1_DONE_MASK            USB_CR_EP1_DONE_MASK\n#define USB_CR_EP1_DONE_MASK_POS        (11U)\n#define USB_CR_EP1_DONE_MASK_LEN        (1U)\n#define USB_CR_EP1_DONE_MASK_MSK        (((1U << USB_CR_EP1_DONE_MASK_LEN) - 1) << USB_CR_EP1_DONE_MASK_POS)\n#define USB_CR_EP1_DONE_MASK_UMSK       (~(((1U << USB_CR_EP1_DONE_MASK_LEN) - 1) << USB_CR_EP1_DONE_MASK_POS))\n#define USB_CR_EP2_CMD_MASK             USB_CR_EP2_CMD_MASK\n#define USB_CR_EP2_CMD_MASK_POS         (12U)\n#define USB_CR_EP2_CMD_MASK_LEN         (1U)\n#define USB_CR_EP2_CMD_MASK_MSK         (((1U << USB_CR_EP2_CMD_MASK_LEN) - 1) << USB_CR_EP2_CMD_MASK_POS)\n#define USB_CR_EP2_CMD_MASK_UMSK        (~(((1U << USB_CR_EP2_CMD_MASK_LEN) - 1) << USB_CR_EP2_CMD_MASK_POS))\n#define USB_CR_EP2_DONE_MASK            USB_CR_EP2_DONE_MASK\n#define USB_CR_EP2_DONE_MASK_POS        (13U)\n#define USB_CR_EP2_DONE_MASK_LEN        (1U)\n#define USB_CR_EP2_DONE_MASK_MSK        (((1U << USB_CR_EP2_DONE_MASK_LEN) - 1) << USB_CR_EP2_DONE_MASK_POS)\n#define USB_CR_EP2_DONE_MASK_UMSK       (~(((1U << USB_CR_EP2_DONE_MASK_LEN) - 1) << USB_CR_EP2_DONE_MASK_POS))\n#define USB_CR_EP3_CMD_MASK             USB_CR_EP3_CMD_MASK\n#define USB_CR_EP3_CMD_MASK_POS         (14U)\n#define USB_CR_EP3_CMD_MASK_LEN         (1U)\n#define USB_CR_EP3_CMD_MASK_MSK         (((1U << USB_CR_EP3_CMD_MASK_LEN) - 1) << USB_CR_EP3_CMD_MASK_POS)\n#define USB_CR_EP3_CMD_MASK_UMSK        (~(((1U << USB_CR_EP3_CMD_MASK_LEN) - 1) << USB_CR_EP3_CMD_MASK_POS))\n#define USB_CR_EP3_DONE_MASK            USB_CR_EP3_DONE_MASK\n#define USB_CR_EP3_DONE_MASK_POS        (15U)\n#define USB_CR_EP3_DONE_MASK_LEN        (1U)\n#define USB_CR_EP3_DONE_MASK_MSK        (((1U << USB_CR_EP3_DONE_MASK_LEN) - 1) << USB_CR_EP3_DONE_MASK_POS)\n#define USB_CR_EP3_DONE_MASK_UMSK       (~(((1U << USB_CR_EP3_DONE_MASK_LEN) - 1) << USB_CR_EP3_DONE_MASK_POS))\n#define USB_CR_EP4_CMD_MASK             USB_CR_EP4_CMD_MASK\n#define USB_CR_EP4_CMD_MASK_POS         (16U)\n#define USB_CR_EP4_CMD_MASK_LEN         (1U)\n#define USB_CR_EP4_CMD_MASK_MSK         (((1U << USB_CR_EP4_CMD_MASK_LEN) - 1) << USB_CR_EP4_CMD_MASK_POS)\n#define USB_CR_EP4_CMD_MASK_UMSK        (~(((1U << USB_CR_EP4_CMD_MASK_LEN) - 1) << USB_CR_EP4_CMD_MASK_POS))\n#define USB_CR_EP4_DONE_MASK            USB_CR_EP4_DONE_MASK\n#define USB_CR_EP4_DONE_MASK_POS        (17U)\n#define USB_CR_EP4_DONE_MASK_LEN        (1U)\n#define USB_CR_EP4_DONE_MASK_MSK        (((1U << USB_CR_EP4_DONE_MASK_LEN) - 1) << USB_CR_EP4_DONE_MASK_POS)\n#define USB_CR_EP4_DONE_MASK_UMSK       (~(((1U << USB_CR_EP4_DONE_MASK_LEN) - 1) << USB_CR_EP4_DONE_MASK_POS))\n#define USB_CR_EP5_CMD_MASK             USB_CR_EP5_CMD_MASK\n#define USB_CR_EP5_CMD_MASK_POS         (18U)\n#define USB_CR_EP5_CMD_MASK_LEN         (1U)\n#define USB_CR_EP5_CMD_MASK_MSK         (((1U << USB_CR_EP5_CMD_MASK_LEN) - 1) << USB_CR_EP5_CMD_MASK_POS)\n#define USB_CR_EP5_CMD_MASK_UMSK        (~(((1U << USB_CR_EP5_CMD_MASK_LEN) - 1) << USB_CR_EP5_CMD_MASK_POS))\n#define USB_CR_EP5_DONE_MASK            USB_CR_EP5_DONE_MASK\n#define USB_CR_EP5_DONE_MASK_POS        (19U)\n#define USB_CR_EP5_DONE_MASK_LEN        (1U)\n#define USB_CR_EP5_DONE_MASK_MSK        (((1U << USB_CR_EP5_DONE_MASK_LEN) - 1) << USB_CR_EP5_DONE_MASK_POS)\n#define USB_CR_EP5_DONE_MASK_UMSK       (~(((1U << USB_CR_EP5_DONE_MASK_LEN) - 1) << USB_CR_EP5_DONE_MASK_POS))\n#define USB_CR_EP6_CMD_MASK             USB_CR_EP6_CMD_MASK\n#define USB_CR_EP6_CMD_MASK_POS         (20U)\n#define USB_CR_EP6_CMD_MASK_LEN         (1U)\n#define USB_CR_EP6_CMD_MASK_MSK         (((1U << USB_CR_EP6_CMD_MASK_LEN) - 1) << USB_CR_EP6_CMD_MASK_POS)\n#define USB_CR_EP6_CMD_MASK_UMSK        (~(((1U << USB_CR_EP6_CMD_MASK_LEN) - 1) << USB_CR_EP6_CMD_MASK_POS))\n#define USB_CR_EP6_DONE_MASK            USB_CR_EP6_DONE_MASK\n#define USB_CR_EP6_DONE_MASK_POS        (21U)\n#define USB_CR_EP6_DONE_MASK_LEN        (1U)\n#define USB_CR_EP6_DONE_MASK_MSK        (((1U << USB_CR_EP6_DONE_MASK_LEN) - 1) << USB_CR_EP6_DONE_MASK_POS)\n#define USB_CR_EP6_DONE_MASK_UMSK       (~(((1U << USB_CR_EP6_DONE_MASK_LEN) - 1) << USB_CR_EP6_DONE_MASK_POS))\n#define USB_CR_EP7_CMD_MASK             USB_CR_EP7_CMD_MASK\n#define USB_CR_EP7_CMD_MASK_POS         (22U)\n#define USB_CR_EP7_CMD_MASK_LEN         (1U)\n#define USB_CR_EP7_CMD_MASK_MSK         (((1U << USB_CR_EP7_CMD_MASK_LEN) - 1) << USB_CR_EP7_CMD_MASK_POS)\n#define USB_CR_EP7_CMD_MASK_UMSK        (~(((1U << USB_CR_EP7_CMD_MASK_LEN) - 1) << USB_CR_EP7_CMD_MASK_POS))\n#define USB_CR_EP7_DONE_MASK            USB_CR_EP7_DONE_MASK\n#define USB_CR_EP7_DONE_MASK_POS        (23U)\n#define USB_CR_EP7_DONE_MASK_LEN        (1U)\n#define USB_CR_EP7_DONE_MASK_MSK        (((1U << USB_CR_EP7_DONE_MASK_LEN) - 1) << USB_CR_EP7_DONE_MASK_POS)\n#define USB_CR_EP7_DONE_MASK_UMSK       (~(((1U << USB_CR_EP7_DONE_MASK_LEN) - 1) << USB_CR_EP7_DONE_MASK_POS))\n#define USB_CR_USB_REND_MASK            USB_CR_USB_REND_MASK\n#define USB_CR_USB_REND_MASK_POS        (27U)\n#define USB_CR_USB_REND_MASK_LEN        (1U)\n#define USB_CR_USB_REND_MASK_MSK        (((1U << USB_CR_USB_REND_MASK_LEN) - 1) << USB_CR_USB_REND_MASK_POS)\n#define USB_CR_USB_REND_MASK_UMSK       (~(((1U << USB_CR_USB_REND_MASK_LEN) - 1) << USB_CR_USB_REND_MASK_POS))\n#define USB_CR_LPM_WKUP_MASK            USB_CR_LPM_WKUP_MASK\n#define USB_CR_LPM_WKUP_MASK_POS        (28U)\n#define USB_CR_LPM_WKUP_MASK_LEN        (1U)\n#define USB_CR_LPM_WKUP_MASK_MSK        (((1U << USB_CR_LPM_WKUP_MASK_LEN) - 1) << USB_CR_LPM_WKUP_MASK_POS)\n#define USB_CR_LPM_WKUP_MASK_UMSK       (~(((1U << USB_CR_LPM_WKUP_MASK_LEN) - 1) << USB_CR_LPM_WKUP_MASK_POS))\n#define USB_CR_LPM_PKT_MASK             USB_CR_LPM_PKT_MASK\n#define USB_CR_LPM_PKT_MASK_POS         (29U)\n#define USB_CR_LPM_PKT_MASK_LEN         (1U)\n#define USB_CR_LPM_PKT_MASK_MSK         (((1U << USB_CR_LPM_PKT_MASK_LEN) - 1) << USB_CR_LPM_PKT_MASK_POS)\n#define USB_CR_LPM_PKT_MASK_UMSK        (~(((1U << USB_CR_LPM_PKT_MASK_LEN) - 1) << USB_CR_LPM_PKT_MASK_POS))\n#define USB_CR_SOF_3MS_MASK             USB_CR_SOF_3MS_MASK\n#define USB_CR_SOF_3MS_MASK_POS         (30U)\n#define USB_CR_SOF_3MS_MASK_LEN         (1U)\n#define USB_CR_SOF_3MS_MASK_MSK         (((1U << USB_CR_SOF_3MS_MASK_LEN) - 1) << USB_CR_SOF_3MS_MASK_POS)\n#define USB_CR_SOF_3MS_MASK_UMSK        (~(((1U << USB_CR_SOF_3MS_MASK_LEN) - 1) << USB_CR_SOF_3MS_MASK_POS))\n#define USB_CR_USB_ERR_MASK             USB_CR_USB_ERR_MASK\n#define USB_CR_USB_ERR_MASK_POS         (31U)\n#define USB_CR_USB_ERR_MASK_LEN         (1U)\n#define USB_CR_USB_ERR_MASK_MSK         (((1U << USB_CR_USB_ERR_MASK_LEN) - 1) << USB_CR_USB_ERR_MASK_POS)\n#define USB_CR_USB_ERR_MASK_UMSK        (~(((1U << USB_CR_USB_ERR_MASK_LEN) - 1) << USB_CR_USB_ERR_MASK_POS))\n\n/* 0x2C : USB interrupt clear */\n#define USB_INT_CLEAR_OFFSET           (0x2C)\n#define USB_CR_SOF_CLR                 USB_CR_SOF_CLR\n#define USB_CR_SOF_CLR_POS             (0U)\n#define USB_CR_SOF_CLR_LEN             (1U)\n#define USB_CR_SOF_CLR_MSK             (((1U << USB_CR_SOF_CLR_LEN) - 1) << USB_CR_SOF_CLR_POS)\n#define USB_CR_SOF_CLR_UMSK            (~(((1U << USB_CR_SOF_CLR_LEN) - 1) << USB_CR_SOF_CLR_POS))\n#define USB_CR_USB_RESET_CLR           USB_CR_USB_RESET_CLR\n#define USB_CR_USB_RESET_CLR_POS       (1U)\n#define USB_CR_USB_RESET_CLR_LEN       (1U)\n#define USB_CR_USB_RESET_CLR_MSK       (((1U << USB_CR_USB_RESET_CLR_LEN) - 1) << USB_CR_USB_RESET_CLR_POS)\n#define USB_CR_USB_RESET_CLR_UMSK      (~(((1U << USB_CR_USB_RESET_CLR_LEN) - 1) << USB_CR_USB_RESET_CLR_POS))\n#define USB_CR_VBUS_TGL_CLR            USB_CR_VBUS_TGL_CLR\n#define USB_CR_VBUS_TGL_CLR_POS        (2U)\n#define USB_CR_VBUS_TGL_CLR_LEN        (1U)\n#define USB_CR_VBUS_TGL_CLR_MSK        (((1U << USB_CR_VBUS_TGL_CLR_LEN) - 1) << USB_CR_VBUS_TGL_CLR_POS)\n#define USB_CR_VBUS_TGL_CLR_UMSK       (~(((1U << USB_CR_VBUS_TGL_CLR_LEN) - 1) << USB_CR_VBUS_TGL_CLR_POS))\n#define USB_CR_GET_DCT_CMD_CLR         USB_CR_GET_DCT_CMD_CLR\n#define USB_CR_GET_DCT_CMD_CLR_POS     (3U)\n#define USB_CR_GET_DCT_CMD_CLR_LEN     (1U)\n#define USB_CR_GET_DCT_CMD_CLR_MSK     (((1U << USB_CR_GET_DCT_CMD_CLR_LEN) - 1) << USB_CR_GET_DCT_CMD_CLR_POS)\n#define USB_CR_GET_DCT_CMD_CLR_UMSK    (~(((1U << USB_CR_GET_DCT_CMD_CLR_LEN) - 1) << USB_CR_GET_DCT_CMD_CLR_POS))\n#define USB_CR_EP0_SETUP_CMD_CLR       USB_CR_EP0_SETUP_CMD_CLR\n#define USB_CR_EP0_SETUP_CMD_CLR_POS   (4U)\n#define USB_CR_EP0_SETUP_CMD_CLR_LEN   (1U)\n#define USB_CR_EP0_SETUP_CMD_CLR_MSK   (((1U << USB_CR_EP0_SETUP_CMD_CLR_LEN) - 1) << USB_CR_EP0_SETUP_CMD_CLR_POS)\n#define USB_CR_EP0_SETUP_CMD_CLR_UMSK  (~(((1U << USB_CR_EP0_SETUP_CMD_CLR_LEN) - 1) << USB_CR_EP0_SETUP_CMD_CLR_POS))\n#define USB_CR_EP0_SETUP_DONE_CLR      USB_CR_EP0_SETUP_DONE_CLR\n#define USB_CR_EP0_SETUP_DONE_CLR_POS  (5U)\n#define USB_CR_EP0_SETUP_DONE_CLR_LEN  (1U)\n#define USB_CR_EP0_SETUP_DONE_CLR_MSK  (((1U << USB_CR_EP0_SETUP_DONE_CLR_LEN) - 1) << USB_CR_EP0_SETUP_DONE_CLR_POS)\n#define USB_CR_EP0_SETUP_DONE_CLR_UMSK (~(((1U << USB_CR_EP0_SETUP_DONE_CLR_LEN) - 1) << USB_CR_EP0_SETUP_DONE_CLR_POS))\n#define USB_CR_EP0_IN_CMD_CLR          USB_CR_EP0_IN_CMD_CLR\n#define USB_CR_EP0_IN_CMD_CLR_POS      (6U)\n#define USB_CR_EP0_IN_CMD_CLR_LEN      (1U)\n#define USB_CR_EP0_IN_CMD_CLR_MSK      (((1U << USB_CR_EP0_IN_CMD_CLR_LEN) - 1) << USB_CR_EP0_IN_CMD_CLR_POS)\n#define USB_CR_EP0_IN_CMD_CLR_UMSK     (~(((1U << USB_CR_EP0_IN_CMD_CLR_LEN) - 1) << USB_CR_EP0_IN_CMD_CLR_POS))\n#define USB_CR_EP0_IN_DONE_CLR         USB_CR_EP0_IN_DONE_CLR\n#define USB_CR_EP0_IN_DONE_CLR_POS     (7U)\n#define USB_CR_EP0_IN_DONE_CLR_LEN     (1U)\n#define USB_CR_EP0_IN_DONE_CLR_MSK     (((1U << USB_CR_EP0_IN_DONE_CLR_LEN) - 1) << USB_CR_EP0_IN_DONE_CLR_POS)\n#define USB_CR_EP0_IN_DONE_CLR_UMSK    (~(((1U << USB_CR_EP0_IN_DONE_CLR_LEN) - 1) << USB_CR_EP0_IN_DONE_CLR_POS))\n#define USB_CR_EP0_OUT_CMD_CLR         USB_CR_EP0_OUT_CMD_CLR\n#define USB_CR_EP0_OUT_CMD_CLR_POS     (8U)\n#define USB_CR_EP0_OUT_CMD_CLR_LEN     (1U)\n#define USB_CR_EP0_OUT_CMD_CLR_MSK     (((1U << USB_CR_EP0_OUT_CMD_CLR_LEN) - 1) << USB_CR_EP0_OUT_CMD_CLR_POS)\n#define USB_CR_EP0_OUT_CMD_CLR_UMSK    (~(((1U << USB_CR_EP0_OUT_CMD_CLR_LEN) - 1) << USB_CR_EP0_OUT_CMD_CLR_POS))\n#define USB_CR_EP0_OUT_DONE_CLR        USB_CR_EP0_OUT_DONE_CLR\n#define USB_CR_EP0_OUT_DONE_CLR_POS    (9U)\n#define USB_CR_EP0_OUT_DONE_CLR_LEN    (1U)\n#define USB_CR_EP0_OUT_DONE_CLR_MSK    (((1U << USB_CR_EP0_OUT_DONE_CLR_LEN) - 1) << USB_CR_EP0_OUT_DONE_CLR_POS)\n#define USB_CR_EP0_OUT_DONE_CLR_UMSK   (~(((1U << USB_CR_EP0_OUT_DONE_CLR_LEN) - 1) << USB_CR_EP0_OUT_DONE_CLR_POS))\n#define USB_CR_EP1_CMD_CLR             USB_CR_EP1_CMD_CLR\n#define USB_CR_EP1_CMD_CLR_POS         (10U)\n#define USB_CR_EP1_CMD_CLR_LEN         (1U)\n#define USB_CR_EP1_CMD_CLR_MSK         (((1U << USB_CR_EP1_CMD_CLR_LEN) - 1) << USB_CR_EP1_CMD_CLR_POS)\n#define USB_CR_EP1_CMD_CLR_UMSK        (~(((1U << USB_CR_EP1_CMD_CLR_LEN) - 1) << USB_CR_EP1_CMD_CLR_POS))\n#define USB_CR_EP1_DONE_CLR            USB_CR_EP1_DONE_CLR\n#define USB_CR_EP1_DONE_CLR_POS        (11U)\n#define USB_CR_EP1_DONE_CLR_LEN        (1U)\n#define USB_CR_EP1_DONE_CLR_MSK        (((1U << USB_CR_EP1_DONE_CLR_LEN) - 1) << USB_CR_EP1_DONE_CLR_POS)\n#define USB_CR_EP1_DONE_CLR_UMSK       (~(((1U << USB_CR_EP1_DONE_CLR_LEN) - 1) << USB_CR_EP1_DONE_CLR_POS))\n#define USB_CR_EP2_CMD_CLR             USB_CR_EP2_CMD_CLR\n#define USB_CR_EP2_CMD_CLR_POS         (12U)\n#define USB_CR_EP2_CMD_CLR_LEN         (1U)\n#define USB_CR_EP2_CMD_CLR_MSK         (((1U << USB_CR_EP2_CMD_CLR_LEN) - 1) << USB_CR_EP2_CMD_CLR_POS)\n#define USB_CR_EP2_CMD_CLR_UMSK        (~(((1U << USB_CR_EP2_CMD_CLR_LEN) - 1) << USB_CR_EP2_CMD_CLR_POS))\n#define USB_CR_EP2_DONE_CLR            USB_CR_EP2_DONE_CLR\n#define USB_CR_EP2_DONE_CLR_POS        (13U)\n#define USB_CR_EP2_DONE_CLR_LEN        (1U)\n#define USB_CR_EP2_DONE_CLR_MSK        (((1U << USB_CR_EP2_DONE_CLR_LEN) - 1) << USB_CR_EP2_DONE_CLR_POS)\n#define USB_CR_EP2_DONE_CLR_UMSK       (~(((1U << USB_CR_EP2_DONE_CLR_LEN) - 1) << USB_CR_EP2_DONE_CLR_POS))\n#define USB_CR_EP3_CMD_CLR             USB_CR_EP3_CMD_CLR\n#define USB_CR_EP3_CMD_CLR_POS         (14U)\n#define USB_CR_EP3_CMD_CLR_LEN         (1U)\n#define USB_CR_EP3_CMD_CLR_MSK         (((1U << USB_CR_EP3_CMD_CLR_LEN) - 1) << USB_CR_EP3_CMD_CLR_POS)\n#define USB_CR_EP3_CMD_CLR_UMSK        (~(((1U << USB_CR_EP3_CMD_CLR_LEN) - 1) << USB_CR_EP3_CMD_CLR_POS))\n#define USB_CR_EP3_DONE_CLR            USB_CR_EP3_DONE_CLR\n#define USB_CR_EP3_DONE_CLR_POS        (15U)\n#define USB_CR_EP3_DONE_CLR_LEN        (1U)\n#define USB_CR_EP3_DONE_CLR_MSK        (((1U << USB_CR_EP3_DONE_CLR_LEN) - 1) << USB_CR_EP3_DONE_CLR_POS)\n#define USB_CR_EP3_DONE_CLR_UMSK       (~(((1U << USB_CR_EP3_DONE_CLR_LEN) - 1) << USB_CR_EP3_DONE_CLR_POS))\n#define USB_CR_EP4_CMD_CLR             USB_CR_EP4_CMD_CLR\n#define USB_CR_EP4_CMD_CLR_POS         (16U)\n#define USB_CR_EP4_CMD_CLR_LEN         (1U)\n#define USB_CR_EP4_CMD_CLR_MSK         (((1U << USB_CR_EP4_CMD_CLR_LEN) - 1) << USB_CR_EP4_CMD_CLR_POS)\n#define USB_CR_EP4_CMD_CLR_UMSK        (~(((1U << USB_CR_EP4_CMD_CLR_LEN) - 1) << USB_CR_EP4_CMD_CLR_POS))\n#define USB_CR_EP4_DONE_CLR            USB_CR_EP4_DONE_CLR\n#define USB_CR_EP4_DONE_CLR_POS        (17U)\n#define USB_CR_EP4_DONE_CLR_LEN        (1U)\n#define USB_CR_EP4_DONE_CLR_MSK        (((1U << USB_CR_EP4_DONE_CLR_LEN) - 1) << USB_CR_EP4_DONE_CLR_POS)\n#define USB_CR_EP4_DONE_CLR_UMSK       (~(((1U << USB_CR_EP4_DONE_CLR_LEN) - 1) << USB_CR_EP4_DONE_CLR_POS))\n#define USB_CR_EP5_CMD_CLR             USB_CR_EP5_CMD_CLR\n#define USB_CR_EP5_CMD_CLR_POS         (18U)\n#define USB_CR_EP5_CMD_CLR_LEN         (1U)\n#define USB_CR_EP5_CMD_CLR_MSK         (((1U << USB_CR_EP5_CMD_CLR_LEN) - 1) << USB_CR_EP5_CMD_CLR_POS)\n#define USB_CR_EP5_CMD_CLR_UMSK        (~(((1U << USB_CR_EP5_CMD_CLR_LEN) - 1) << USB_CR_EP5_CMD_CLR_POS))\n#define USB_CR_EP5_DONE_CLR            USB_CR_EP5_DONE_CLR\n#define USB_CR_EP5_DONE_CLR_POS        (19U)\n#define USB_CR_EP5_DONE_CLR_LEN        (1U)\n#define USB_CR_EP5_DONE_CLR_MSK        (((1U << USB_CR_EP5_DONE_CLR_LEN) - 1) << USB_CR_EP5_DONE_CLR_POS)\n#define USB_CR_EP5_DONE_CLR_UMSK       (~(((1U << USB_CR_EP5_DONE_CLR_LEN) - 1) << USB_CR_EP5_DONE_CLR_POS))\n#define USB_CR_EP6_CMD_CLR             USB_CR_EP6_CMD_CLR\n#define USB_CR_EP6_CMD_CLR_POS         (20U)\n#define USB_CR_EP6_CMD_CLR_LEN         (1U)\n#define USB_CR_EP6_CMD_CLR_MSK         (((1U << USB_CR_EP6_CMD_CLR_LEN) - 1) << USB_CR_EP6_CMD_CLR_POS)\n#define USB_CR_EP6_CMD_CLR_UMSK        (~(((1U << USB_CR_EP6_CMD_CLR_LEN) - 1) << USB_CR_EP6_CMD_CLR_POS))\n#define USB_CR_EP6_DONE_CLR            USB_CR_EP6_DONE_CLR\n#define USB_CR_EP6_DONE_CLR_POS        (21U)\n#define USB_CR_EP6_DONE_CLR_LEN        (1U)\n#define USB_CR_EP6_DONE_CLR_MSK        (((1U << USB_CR_EP6_DONE_CLR_LEN) - 1) << USB_CR_EP6_DONE_CLR_POS)\n#define USB_CR_EP6_DONE_CLR_UMSK       (~(((1U << USB_CR_EP6_DONE_CLR_LEN) - 1) << USB_CR_EP6_DONE_CLR_POS))\n#define USB_CR_EP7_CMD_CLR             USB_CR_EP7_CMD_CLR\n#define USB_CR_EP7_CMD_CLR_POS         (22U)\n#define USB_CR_EP7_CMD_CLR_LEN         (1U)\n#define USB_CR_EP7_CMD_CLR_MSK         (((1U << USB_CR_EP7_CMD_CLR_LEN) - 1) << USB_CR_EP7_CMD_CLR_POS)\n#define USB_CR_EP7_CMD_CLR_UMSK        (~(((1U << USB_CR_EP7_CMD_CLR_LEN) - 1) << USB_CR_EP7_CMD_CLR_POS))\n#define USB_CR_EP7_DONE_CLR            USB_CR_EP7_DONE_CLR\n#define USB_CR_EP7_DONE_CLR_POS        (23U)\n#define USB_CR_EP7_DONE_CLR_LEN        (1U)\n#define USB_CR_EP7_DONE_CLR_MSK        (((1U << USB_CR_EP7_DONE_CLR_LEN) - 1) << USB_CR_EP7_DONE_CLR_POS)\n#define USB_CR_EP7_DONE_CLR_UMSK       (~(((1U << USB_CR_EP7_DONE_CLR_LEN) - 1) << USB_CR_EP7_DONE_CLR_POS))\n#define USB_CR_USB_REND_CLR            USB_CR_USB_REND_CLR\n#define USB_CR_USB_REND_CLR_POS        (27U)\n#define USB_CR_USB_REND_CLR_LEN        (1U)\n#define USB_CR_USB_REND_CLR_MSK        (((1U << USB_CR_USB_REND_CLR_LEN) - 1) << USB_CR_USB_REND_CLR_POS)\n#define USB_CR_USB_REND_CLR_UMSK       (~(((1U << USB_CR_USB_REND_CLR_LEN) - 1) << USB_CR_USB_REND_CLR_POS))\n#define USB_CR_LPM_WKUP_CLR            USB_CR_LPM_WKUP_CLR\n#define USB_CR_LPM_WKUP_CLR_POS        (28U)\n#define USB_CR_LPM_WKUP_CLR_LEN        (1U)\n#define USB_CR_LPM_WKUP_CLR_MSK        (((1U << USB_CR_LPM_WKUP_CLR_LEN) - 1) << USB_CR_LPM_WKUP_CLR_POS)\n#define USB_CR_LPM_WKUP_CLR_UMSK       (~(((1U << USB_CR_LPM_WKUP_CLR_LEN) - 1) << USB_CR_LPM_WKUP_CLR_POS))\n#define USB_CR_LPM_PKT_CLR             USB_CR_LPM_PKT_CLR\n#define USB_CR_LPM_PKT_CLR_POS         (29U)\n#define USB_CR_LPM_PKT_CLR_LEN         (1U)\n#define USB_CR_LPM_PKT_CLR_MSK         (((1U << USB_CR_LPM_PKT_CLR_LEN) - 1) << USB_CR_LPM_PKT_CLR_POS)\n#define USB_CR_LPM_PKT_CLR_UMSK        (~(((1U << USB_CR_LPM_PKT_CLR_LEN) - 1) << USB_CR_LPM_PKT_CLR_POS))\n#define USB_CR_SOF_3MS_CLR             USB_CR_SOF_3MS_CLR\n#define USB_CR_SOF_3MS_CLR_POS         (30U)\n#define USB_CR_SOF_3MS_CLR_LEN         (1U)\n#define USB_CR_SOF_3MS_CLR_MSK         (((1U << USB_CR_SOF_3MS_CLR_LEN) - 1) << USB_CR_SOF_3MS_CLR_POS)\n#define USB_CR_SOF_3MS_CLR_UMSK        (~(((1U << USB_CR_SOF_3MS_CLR_LEN) - 1) << USB_CR_SOF_3MS_CLR_POS))\n#define USB_CR_USB_ERR_CLR             USB_CR_USB_ERR_CLR\n#define USB_CR_USB_ERR_CLR_POS         (31U)\n#define USB_CR_USB_ERR_CLR_LEN         (1U)\n#define USB_CR_USB_ERR_CLR_MSK         (((1U << USB_CR_USB_ERR_CLR_LEN) - 1) << USB_CR_USB_ERR_CLR_POS)\n#define USB_CR_USB_ERR_CLR_UMSK        (~(((1U << USB_CR_USB_ERR_CLR_LEN) - 1) << USB_CR_USB_ERR_CLR_POS))\n\n/* 0x40 : ep1_config */\n#define USB_EP1_CONFIG_OFFSET (0x40)\n#define USB_CR_EP1_SIZE       USB_CR_EP1_SIZE\n#define USB_CR_EP1_SIZE_POS   (0U)\n#define USB_CR_EP1_SIZE_LEN   (11U)\n#define USB_CR_EP1_SIZE_MSK   (((1U << USB_CR_EP1_SIZE_LEN) - 1) << USB_CR_EP1_SIZE_POS)\n#define USB_CR_EP1_SIZE_UMSK  (~(((1U << USB_CR_EP1_SIZE_LEN) - 1) << USB_CR_EP1_SIZE_POS))\n#define USB_CR_EP1_DIR        USB_CR_EP1_DIR\n#define USB_CR_EP1_DIR_POS    (11U)\n#define USB_CR_EP1_DIR_LEN    (2U)\n#define USB_CR_EP1_DIR_MSK    (((1U << USB_CR_EP1_DIR_LEN) - 1) << USB_CR_EP1_DIR_POS)\n#define USB_CR_EP1_DIR_UMSK   (~(((1U << USB_CR_EP1_DIR_LEN) - 1) << USB_CR_EP1_DIR_POS))\n#define USB_CR_EP1_TYPE       USB_CR_EP1_TYPE\n#define USB_CR_EP1_TYPE_POS   (13U)\n#define USB_CR_EP1_TYPE_LEN   (3U)\n#define USB_CR_EP1_TYPE_MSK   (((1U << USB_CR_EP1_TYPE_LEN) - 1) << USB_CR_EP1_TYPE_POS)\n#define USB_CR_EP1_TYPE_UMSK  (~(((1U << USB_CR_EP1_TYPE_LEN) - 1) << USB_CR_EP1_TYPE_POS))\n#define USB_CR_EP1_STALL      USB_CR_EP1_STALL\n#define USB_CR_EP1_STALL_POS  (16U)\n#define USB_CR_EP1_STALL_LEN  (1U)\n#define USB_CR_EP1_STALL_MSK  (((1U << USB_CR_EP1_STALL_LEN) - 1) << USB_CR_EP1_STALL_POS)\n#define USB_CR_EP1_STALL_UMSK (~(((1U << USB_CR_EP1_STALL_LEN) - 1) << USB_CR_EP1_STALL_POS))\n#define USB_CR_EP1_NACK       USB_CR_EP1_NACK\n#define USB_CR_EP1_NACK_POS   (17U)\n#define USB_CR_EP1_NACK_LEN   (1U)\n#define USB_CR_EP1_NACK_MSK   (((1U << USB_CR_EP1_NACK_LEN) - 1) << USB_CR_EP1_NACK_POS)\n#define USB_CR_EP1_NACK_UMSK  (~(((1U << USB_CR_EP1_NACK_LEN) - 1) << USB_CR_EP1_NACK_POS))\n#define USB_CR_EP1_RDY        USB_CR_EP1_RDY\n#define USB_CR_EP1_RDY_POS    (18U)\n#define USB_CR_EP1_RDY_LEN    (1U)\n#define USB_CR_EP1_RDY_MSK    (((1U << USB_CR_EP1_RDY_LEN) - 1) << USB_CR_EP1_RDY_POS)\n#define USB_CR_EP1_RDY_UMSK   (~(((1U << USB_CR_EP1_RDY_LEN) - 1) << USB_CR_EP1_RDY_POS))\n#define USB_STS_EP1_RDY       USB_STS_EP1_RDY\n#define USB_STS_EP1_RDY_POS   (19U)\n#define USB_STS_EP1_RDY_LEN   (1U)\n#define USB_STS_EP1_RDY_MSK   (((1U << USB_STS_EP1_RDY_LEN) - 1) << USB_STS_EP1_RDY_POS)\n#define USB_STS_EP1_RDY_UMSK  (~(((1U << USB_STS_EP1_RDY_LEN) - 1) << USB_STS_EP1_RDY_POS))\n\n/* 0x44 : ep2_config */\n#define USB_EP2_CONFIG_OFFSET (0x44)\n#define USB_CR_EP2_SIZE       USB_CR_EP2_SIZE\n#define USB_CR_EP2_SIZE_POS   (0U)\n#define USB_CR_EP2_SIZE_LEN   (11U)\n#define USB_CR_EP2_SIZE_MSK   (((1U << USB_CR_EP2_SIZE_LEN) - 1) << USB_CR_EP2_SIZE_POS)\n#define USB_CR_EP2_SIZE_UMSK  (~(((1U << USB_CR_EP2_SIZE_LEN) - 1) << USB_CR_EP2_SIZE_POS))\n#define USB_CR_EP2_DIR        USB_CR_EP2_DIR\n#define USB_CR_EP2_DIR_POS    (11U)\n#define USB_CR_EP2_DIR_LEN    (2U)\n#define USB_CR_EP2_DIR_MSK    (((1U << USB_CR_EP2_DIR_LEN) - 1) << USB_CR_EP2_DIR_POS)\n#define USB_CR_EP2_DIR_UMSK   (~(((1U << USB_CR_EP2_DIR_LEN) - 1) << USB_CR_EP2_DIR_POS))\n#define USB_CR_EP2_TYPE       USB_CR_EP2_TYPE\n#define USB_CR_EP2_TYPE_POS   (13U)\n#define USB_CR_EP2_TYPE_LEN   (3U)\n#define USB_CR_EP2_TYPE_MSK   (((1U << USB_CR_EP2_TYPE_LEN) - 1) << USB_CR_EP2_TYPE_POS)\n#define USB_CR_EP2_TYPE_UMSK  (~(((1U << USB_CR_EP2_TYPE_LEN) - 1) << USB_CR_EP2_TYPE_POS))\n#define USB_CR_EP2_STALL      USB_CR_EP2_STALL\n#define USB_CR_EP2_STALL_POS  (16U)\n#define USB_CR_EP2_STALL_LEN  (1U)\n#define USB_CR_EP2_STALL_MSK  (((1U << USB_CR_EP2_STALL_LEN) - 1) << USB_CR_EP2_STALL_POS)\n#define USB_CR_EP2_STALL_UMSK (~(((1U << USB_CR_EP2_STALL_LEN) - 1) << USB_CR_EP2_STALL_POS))\n#define USB_CR_EP2_NACK       USB_CR_EP2_NACK\n#define USB_CR_EP2_NACK_POS   (17U)\n#define USB_CR_EP2_NACK_LEN   (1U)\n#define USB_CR_EP2_NACK_MSK   (((1U << USB_CR_EP2_NACK_LEN) - 1) << USB_CR_EP2_NACK_POS)\n#define USB_CR_EP2_NACK_UMSK  (~(((1U << USB_CR_EP2_NACK_LEN) - 1) << USB_CR_EP2_NACK_POS))\n#define USB_CR_EP2_RDY        USB_CR_EP2_RDY\n#define USB_CR_EP2_RDY_POS    (18U)\n#define USB_CR_EP2_RDY_LEN    (1U)\n#define USB_CR_EP2_RDY_MSK    (((1U << USB_CR_EP2_RDY_LEN) - 1) << USB_CR_EP2_RDY_POS)\n#define USB_CR_EP2_RDY_UMSK   (~(((1U << USB_CR_EP2_RDY_LEN) - 1) << USB_CR_EP2_RDY_POS))\n#define USB_STS_EP2_RDY       USB_STS_EP2_RDY\n#define USB_STS_EP2_RDY_POS   (19U)\n#define USB_STS_EP2_RDY_LEN   (1U)\n#define USB_STS_EP2_RDY_MSK   (((1U << USB_STS_EP2_RDY_LEN) - 1) << USB_STS_EP2_RDY_POS)\n#define USB_STS_EP2_RDY_UMSK  (~(((1U << USB_STS_EP2_RDY_LEN) - 1) << USB_STS_EP2_RDY_POS))\n\n/* 0x48 : ep3_config */\n#define USB_EP3_CONFIG_OFFSET (0x48)\n#define USB_CR_EP3_SIZE       USB_CR_EP3_SIZE\n#define USB_CR_EP3_SIZE_POS   (0U)\n#define USB_CR_EP3_SIZE_LEN   (11U)\n#define USB_CR_EP3_SIZE_MSK   (((1U << USB_CR_EP3_SIZE_LEN) - 1) << USB_CR_EP3_SIZE_POS)\n#define USB_CR_EP3_SIZE_UMSK  (~(((1U << USB_CR_EP3_SIZE_LEN) - 1) << USB_CR_EP3_SIZE_POS))\n#define USB_CR_EP3_DIR        USB_CR_EP3_DIR\n#define USB_CR_EP3_DIR_POS    (11U)\n#define USB_CR_EP3_DIR_LEN    (2U)\n#define USB_CR_EP3_DIR_MSK    (((1U << USB_CR_EP3_DIR_LEN) - 1) << USB_CR_EP3_DIR_POS)\n#define USB_CR_EP3_DIR_UMSK   (~(((1U << USB_CR_EP3_DIR_LEN) - 1) << USB_CR_EP3_DIR_POS))\n#define USB_CR_EP3_TYPE       USB_CR_EP3_TYPE\n#define USB_CR_EP3_TYPE_POS   (13U)\n#define USB_CR_EP3_TYPE_LEN   (3U)\n#define USB_CR_EP3_TYPE_MSK   (((1U << USB_CR_EP3_TYPE_LEN) - 1) << USB_CR_EP3_TYPE_POS)\n#define USB_CR_EP3_TYPE_UMSK  (~(((1U << USB_CR_EP3_TYPE_LEN) - 1) << USB_CR_EP3_TYPE_POS))\n#define USB_CR_EP3_STALL      USB_CR_EP3_STALL\n#define USB_CR_EP3_STALL_POS  (16U)\n#define USB_CR_EP3_STALL_LEN  (1U)\n#define USB_CR_EP3_STALL_MSK  (((1U << USB_CR_EP3_STALL_LEN) - 1) << USB_CR_EP3_STALL_POS)\n#define USB_CR_EP3_STALL_UMSK (~(((1U << USB_CR_EP3_STALL_LEN) - 1) << USB_CR_EP3_STALL_POS))\n#define USB_CR_EP3_NACK       USB_CR_EP3_NACK\n#define USB_CR_EP3_NACK_POS   (17U)\n#define USB_CR_EP3_NACK_LEN   (1U)\n#define USB_CR_EP3_NACK_MSK   (((1U << USB_CR_EP3_NACK_LEN) - 1) << USB_CR_EP3_NACK_POS)\n#define USB_CR_EP3_NACK_UMSK  (~(((1U << USB_CR_EP3_NACK_LEN) - 1) << USB_CR_EP3_NACK_POS))\n#define USB_CR_EP3_RDY        USB_CR_EP3_RDY\n#define USB_CR_EP3_RDY_POS    (18U)\n#define USB_CR_EP3_RDY_LEN    (1U)\n#define USB_CR_EP3_RDY_MSK    (((1U << USB_CR_EP3_RDY_LEN) - 1) << USB_CR_EP3_RDY_POS)\n#define USB_CR_EP3_RDY_UMSK   (~(((1U << USB_CR_EP3_RDY_LEN) - 1) << USB_CR_EP3_RDY_POS))\n#define USB_STS_EP3_RDY       USB_STS_EP3_RDY\n#define USB_STS_EP3_RDY_POS   (19U)\n#define USB_STS_EP3_RDY_LEN   (1U)\n#define USB_STS_EP3_RDY_MSK   (((1U << USB_STS_EP3_RDY_LEN) - 1) << USB_STS_EP3_RDY_POS)\n#define USB_STS_EP3_RDY_UMSK  (~(((1U << USB_STS_EP3_RDY_LEN) - 1) << USB_STS_EP3_RDY_POS))\n\n/* 0x4C : ep4_config */\n#define USB_EP4_CONFIG_OFFSET (0x4C)\n#define USB_CR_EP4_SIZE       USB_CR_EP4_SIZE\n#define USB_CR_EP4_SIZE_POS   (0U)\n#define USB_CR_EP4_SIZE_LEN   (11U)\n#define USB_CR_EP4_SIZE_MSK   (((1U << USB_CR_EP4_SIZE_LEN) - 1) << USB_CR_EP4_SIZE_POS)\n#define USB_CR_EP4_SIZE_UMSK  (~(((1U << USB_CR_EP4_SIZE_LEN) - 1) << USB_CR_EP4_SIZE_POS))\n#define USB_CR_EP4_DIR        USB_CR_EP4_DIR\n#define USB_CR_EP4_DIR_POS    (11U)\n#define USB_CR_EP4_DIR_LEN    (2U)\n#define USB_CR_EP4_DIR_MSK    (((1U << USB_CR_EP4_DIR_LEN) - 1) << USB_CR_EP4_DIR_POS)\n#define USB_CR_EP4_DIR_UMSK   (~(((1U << USB_CR_EP4_DIR_LEN) - 1) << USB_CR_EP4_DIR_POS))\n#define USB_CR_EP4_TYPE       USB_CR_EP4_TYPE\n#define USB_CR_EP4_TYPE_POS   (13U)\n#define USB_CR_EP4_TYPE_LEN   (3U)\n#define USB_CR_EP4_TYPE_MSK   (((1U << USB_CR_EP4_TYPE_LEN) - 1) << USB_CR_EP4_TYPE_POS)\n#define USB_CR_EP4_TYPE_UMSK  (~(((1U << USB_CR_EP4_TYPE_LEN) - 1) << USB_CR_EP4_TYPE_POS))\n#define USB_CR_EP4_STALL      USB_CR_EP4_STALL\n#define USB_CR_EP4_STALL_POS  (16U)\n#define USB_CR_EP4_STALL_LEN  (1U)\n#define USB_CR_EP4_STALL_MSK  (((1U << USB_CR_EP4_STALL_LEN) - 1) << USB_CR_EP4_STALL_POS)\n#define USB_CR_EP4_STALL_UMSK (~(((1U << USB_CR_EP4_STALL_LEN) - 1) << USB_CR_EP4_STALL_POS))\n#define USB_CR_EP4_NACK       USB_CR_EP4_NACK\n#define USB_CR_EP4_NACK_POS   (17U)\n#define USB_CR_EP4_NACK_LEN   (1U)\n#define USB_CR_EP4_NACK_MSK   (((1U << USB_CR_EP4_NACK_LEN) - 1) << USB_CR_EP4_NACK_POS)\n#define USB_CR_EP4_NACK_UMSK  (~(((1U << USB_CR_EP4_NACK_LEN) - 1) << USB_CR_EP4_NACK_POS))\n#define USB_CR_EP4_RDY        USB_CR_EP4_RDY\n#define USB_CR_EP4_RDY_POS    (18U)\n#define USB_CR_EP4_RDY_LEN    (1U)\n#define USB_CR_EP4_RDY_MSK    (((1U << USB_CR_EP4_RDY_LEN) - 1) << USB_CR_EP4_RDY_POS)\n#define USB_CR_EP4_RDY_UMSK   (~(((1U << USB_CR_EP4_RDY_LEN) - 1) << USB_CR_EP4_RDY_POS))\n#define USB_STS_EP4_RDY       USB_STS_EP4_RDY\n#define USB_STS_EP4_RDY_POS   (19U)\n#define USB_STS_EP4_RDY_LEN   (1U)\n#define USB_STS_EP4_RDY_MSK   (((1U << USB_STS_EP4_RDY_LEN) - 1) << USB_STS_EP4_RDY_POS)\n#define USB_STS_EP4_RDY_UMSK  (~(((1U << USB_STS_EP4_RDY_LEN) - 1) << USB_STS_EP4_RDY_POS))\n\n/* 0x50 : ep5_config */\n#define USB_EP5_CONFIG_OFFSET (0x50)\n#define USB_CR_EP5_SIZE       USB_CR_EP5_SIZE\n#define USB_CR_EP5_SIZE_POS   (0U)\n#define USB_CR_EP5_SIZE_LEN   (11U)\n#define USB_CR_EP5_SIZE_MSK   (((1U << USB_CR_EP5_SIZE_LEN) - 1) << USB_CR_EP5_SIZE_POS)\n#define USB_CR_EP5_SIZE_UMSK  (~(((1U << USB_CR_EP5_SIZE_LEN) - 1) << USB_CR_EP5_SIZE_POS))\n#define USB_CR_EP5_DIR        USB_CR_EP5_DIR\n#define USB_CR_EP5_DIR_POS    (11U)\n#define USB_CR_EP5_DIR_LEN    (2U)\n#define USB_CR_EP5_DIR_MSK    (((1U << USB_CR_EP5_DIR_LEN) - 1) << USB_CR_EP5_DIR_POS)\n#define USB_CR_EP5_DIR_UMSK   (~(((1U << USB_CR_EP5_DIR_LEN) - 1) << USB_CR_EP5_DIR_POS))\n#define USB_CR_EP5_TYPE       USB_CR_EP5_TYPE\n#define USB_CR_EP5_TYPE_POS   (13U)\n#define USB_CR_EP5_TYPE_LEN   (3U)\n#define USB_CR_EP5_TYPE_MSK   (((1U << USB_CR_EP5_TYPE_LEN) - 1) << USB_CR_EP5_TYPE_POS)\n#define USB_CR_EP5_TYPE_UMSK  (~(((1U << USB_CR_EP5_TYPE_LEN) - 1) << USB_CR_EP5_TYPE_POS))\n#define USB_CR_EP5_STALL      USB_CR_EP5_STALL\n#define USB_CR_EP5_STALL_POS  (16U)\n#define USB_CR_EP5_STALL_LEN  (1U)\n#define USB_CR_EP5_STALL_MSK  (((1U << USB_CR_EP5_STALL_LEN) - 1) << USB_CR_EP5_STALL_POS)\n#define USB_CR_EP5_STALL_UMSK (~(((1U << USB_CR_EP5_STALL_LEN) - 1) << USB_CR_EP5_STALL_POS))\n#define USB_CR_EP5_NACK       USB_CR_EP5_NACK\n#define USB_CR_EP5_NACK_POS   (17U)\n#define USB_CR_EP5_NACK_LEN   (1U)\n#define USB_CR_EP5_NACK_MSK   (((1U << USB_CR_EP5_NACK_LEN) - 1) << USB_CR_EP5_NACK_POS)\n#define USB_CR_EP5_NACK_UMSK  (~(((1U << USB_CR_EP5_NACK_LEN) - 1) << USB_CR_EP5_NACK_POS))\n#define USB_CR_EP5_RDY        USB_CR_EP5_RDY\n#define USB_CR_EP5_RDY_POS    (18U)\n#define USB_CR_EP5_RDY_LEN    (1U)\n#define USB_CR_EP5_RDY_MSK    (((1U << USB_CR_EP5_RDY_LEN) - 1) << USB_CR_EP5_RDY_POS)\n#define USB_CR_EP5_RDY_UMSK   (~(((1U << USB_CR_EP5_RDY_LEN) - 1) << USB_CR_EP5_RDY_POS))\n#define USB_STS_EP5_RDY       USB_STS_EP5_RDY\n#define USB_STS_EP5_RDY_POS   (19U)\n#define USB_STS_EP5_RDY_LEN   (1U)\n#define USB_STS_EP5_RDY_MSK   (((1U << USB_STS_EP5_RDY_LEN) - 1) << USB_STS_EP5_RDY_POS)\n#define USB_STS_EP5_RDY_UMSK  (~(((1U << USB_STS_EP5_RDY_LEN) - 1) << USB_STS_EP5_RDY_POS))\n\n/* 0x54 : ep6_config */\n#define USB_EP6_CONFIG_OFFSET (0x54)\n#define USB_CR_EP6_SIZE       USB_CR_EP6_SIZE\n#define USB_CR_EP6_SIZE_POS   (0U)\n#define USB_CR_EP6_SIZE_LEN   (11U)\n#define USB_CR_EP6_SIZE_MSK   (((1U << USB_CR_EP6_SIZE_LEN) - 1) << USB_CR_EP6_SIZE_POS)\n#define USB_CR_EP6_SIZE_UMSK  (~(((1U << USB_CR_EP6_SIZE_LEN) - 1) << USB_CR_EP6_SIZE_POS))\n#define USB_CR_EP6_DIR        USB_CR_EP6_DIR\n#define USB_CR_EP6_DIR_POS    (11U)\n#define USB_CR_EP6_DIR_LEN    (2U)\n#define USB_CR_EP6_DIR_MSK    (((1U << USB_CR_EP6_DIR_LEN) - 1) << USB_CR_EP6_DIR_POS)\n#define USB_CR_EP6_DIR_UMSK   (~(((1U << USB_CR_EP6_DIR_LEN) - 1) << USB_CR_EP6_DIR_POS))\n#define USB_CR_EP6_TYPE       USB_CR_EP6_TYPE\n#define USB_CR_EP6_TYPE_POS   (13U)\n#define USB_CR_EP6_TYPE_LEN   (3U)\n#define USB_CR_EP6_TYPE_MSK   (((1U << USB_CR_EP6_TYPE_LEN) - 1) << USB_CR_EP6_TYPE_POS)\n#define USB_CR_EP6_TYPE_UMSK  (~(((1U << USB_CR_EP6_TYPE_LEN) - 1) << USB_CR_EP6_TYPE_POS))\n#define USB_CR_EP6_STALL      USB_CR_EP6_STALL\n#define USB_CR_EP6_STALL_POS  (16U)\n#define USB_CR_EP6_STALL_LEN  (1U)\n#define USB_CR_EP6_STALL_MSK  (((1U << USB_CR_EP6_STALL_LEN) - 1) << USB_CR_EP6_STALL_POS)\n#define USB_CR_EP6_STALL_UMSK (~(((1U << USB_CR_EP6_STALL_LEN) - 1) << USB_CR_EP6_STALL_POS))\n#define USB_CR_EP6_NACK       USB_CR_EP6_NACK\n#define USB_CR_EP6_NACK_POS   (17U)\n#define USB_CR_EP6_NACK_LEN   (1U)\n#define USB_CR_EP6_NACK_MSK   (((1U << USB_CR_EP6_NACK_LEN) - 1) << USB_CR_EP6_NACK_POS)\n#define USB_CR_EP6_NACK_UMSK  (~(((1U << USB_CR_EP6_NACK_LEN) - 1) << USB_CR_EP6_NACK_POS))\n#define USB_CR_EP6_RDY        USB_CR_EP6_RDY\n#define USB_CR_EP6_RDY_POS    (18U)\n#define USB_CR_EP6_RDY_LEN    (1U)\n#define USB_CR_EP6_RDY_MSK    (((1U << USB_CR_EP6_RDY_LEN) - 1) << USB_CR_EP6_RDY_POS)\n#define USB_CR_EP6_RDY_UMSK   (~(((1U << USB_CR_EP6_RDY_LEN) - 1) << USB_CR_EP6_RDY_POS))\n#define USB_STS_EP6_RDY       USB_STS_EP6_RDY\n#define USB_STS_EP6_RDY_POS   (19U)\n#define USB_STS_EP6_RDY_LEN   (1U)\n#define USB_STS_EP6_RDY_MSK   (((1U << USB_STS_EP6_RDY_LEN) - 1) << USB_STS_EP6_RDY_POS)\n#define USB_STS_EP6_RDY_UMSK  (~(((1U << USB_STS_EP6_RDY_LEN) - 1) << USB_STS_EP6_RDY_POS))\n\n/* 0x58 : ep7_config */\n#define USB_EP7_CONFIG_OFFSET (0x58)\n#define USB_CR_EP7_SIZE       USB_CR_EP7_SIZE\n#define USB_CR_EP7_SIZE_POS   (0U)\n#define USB_CR_EP7_SIZE_LEN   (11U)\n#define USB_CR_EP7_SIZE_MSK   (((1U << USB_CR_EP7_SIZE_LEN) - 1) << USB_CR_EP7_SIZE_POS)\n#define USB_CR_EP7_SIZE_UMSK  (~(((1U << USB_CR_EP7_SIZE_LEN) - 1) << USB_CR_EP7_SIZE_POS))\n#define USB_CR_EP7_DIR        USB_CR_EP7_DIR\n#define USB_CR_EP7_DIR_POS    (11U)\n#define USB_CR_EP7_DIR_LEN    (2U)\n#define USB_CR_EP7_DIR_MSK    (((1U << USB_CR_EP7_DIR_LEN) - 1) << USB_CR_EP7_DIR_POS)\n#define USB_CR_EP7_DIR_UMSK   (~(((1U << USB_CR_EP7_DIR_LEN) - 1) << USB_CR_EP7_DIR_POS))\n#define USB_CR_EP7_TYPE       USB_CR_EP7_TYPE\n#define USB_CR_EP7_TYPE_POS   (13U)\n#define USB_CR_EP7_TYPE_LEN   (3U)\n#define USB_CR_EP7_TYPE_MSK   (((1U << USB_CR_EP7_TYPE_LEN) - 1) << USB_CR_EP7_TYPE_POS)\n#define USB_CR_EP7_TYPE_UMSK  (~(((1U << USB_CR_EP7_TYPE_LEN) - 1) << USB_CR_EP7_TYPE_POS))\n#define USB_CR_EP7_STALL      USB_CR_EP7_STALL\n#define USB_CR_EP7_STALL_POS  (16U)\n#define USB_CR_EP7_STALL_LEN  (1U)\n#define USB_CR_EP7_STALL_MSK  (((1U << USB_CR_EP7_STALL_LEN) - 1) << USB_CR_EP7_STALL_POS)\n#define USB_CR_EP7_STALL_UMSK (~(((1U << USB_CR_EP7_STALL_LEN) - 1) << USB_CR_EP7_STALL_POS))\n#define USB_CR_EP7_NACK       USB_CR_EP7_NACK\n#define USB_CR_EP7_NACK_POS   (17U)\n#define USB_CR_EP7_NACK_LEN   (1U)\n#define USB_CR_EP7_NACK_MSK   (((1U << USB_CR_EP7_NACK_LEN) - 1) << USB_CR_EP7_NACK_POS)\n#define USB_CR_EP7_NACK_UMSK  (~(((1U << USB_CR_EP7_NACK_LEN) - 1) << USB_CR_EP7_NACK_POS))\n#define USB_CR_EP7_RDY        USB_CR_EP7_RDY\n#define USB_CR_EP7_RDY_POS    (18U)\n#define USB_CR_EP7_RDY_LEN    (1U)\n#define USB_CR_EP7_RDY_MSK    (((1U << USB_CR_EP7_RDY_LEN) - 1) << USB_CR_EP7_RDY_POS)\n#define USB_CR_EP7_RDY_UMSK   (~(((1U << USB_CR_EP7_RDY_LEN) - 1) << USB_CR_EP7_RDY_POS))\n#define USB_STS_EP7_RDY       USB_STS_EP7_RDY\n#define USB_STS_EP7_RDY_POS   (19U)\n#define USB_STS_EP7_RDY_LEN   (1U)\n#define USB_STS_EP7_RDY_MSK   (((1U << USB_STS_EP7_RDY_LEN) - 1) << USB_STS_EP7_RDY_POS)\n#define USB_STS_EP7_RDY_UMSK  (~(((1U << USB_STS_EP7_RDY_LEN) - 1) << USB_STS_EP7_RDY_POS))\n\n/* 0x100 : ep0_fifo_config */\n#define USB_EP0_FIFO_CONFIG_OFFSET     (0x100)\n#define USB_EP0_DMA_TX_EN              USB_EP0_DMA_TX_EN\n#define USB_EP0_DMA_TX_EN_POS          (0U)\n#define USB_EP0_DMA_TX_EN_LEN          (1U)\n#define USB_EP0_DMA_TX_EN_MSK          (((1U << USB_EP0_DMA_TX_EN_LEN) - 1) << USB_EP0_DMA_TX_EN_POS)\n#define USB_EP0_DMA_TX_EN_UMSK         (~(((1U << USB_EP0_DMA_TX_EN_LEN) - 1) << USB_EP0_DMA_TX_EN_POS))\n#define USB_EP0_DMA_RX_EN              USB_EP0_DMA_RX_EN\n#define USB_EP0_DMA_RX_EN_POS          (1U)\n#define USB_EP0_DMA_RX_EN_LEN          (1U)\n#define USB_EP0_DMA_RX_EN_MSK          (((1U << USB_EP0_DMA_RX_EN_LEN) - 1) << USB_EP0_DMA_RX_EN_POS)\n#define USB_EP0_DMA_RX_EN_UMSK         (~(((1U << USB_EP0_DMA_RX_EN_LEN) - 1) << USB_EP0_DMA_RX_EN_POS))\n#define USB_EP0_TX_FIFO_CLR            USB_EP0_TX_FIFO_CLR\n#define USB_EP0_TX_FIFO_CLR_POS        (2U)\n#define USB_EP0_TX_FIFO_CLR_LEN        (1U)\n#define USB_EP0_TX_FIFO_CLR_MSK        (((1U << USB_EP0_TX_FIFO_CLR_LEN) - 1) << USB_EP0_TX_FIFO_CLR_POS)\n#define USB_EP0_TX_FIFO_CLR_UMSK       (~(((1U << USB_EP0_TX_FIFO_CLR_LEN) - 1) << USB_EP0_TX_FIFO_CLR_POS))\n#define USB_EP0_RX_FIFO_CLR            USB_EP0_RX_FIFO_CLR\n#define USB_EP0_RX_FIFO_CLR_POS        (3U)\n#define USB_EP0_RX_FIFO_CLR_LEN        (1U)\n#define USB_EP0_RX_FIFO_CLR_MSK        (((1U << USB_EP0_RX_FIFO_CLR_LEN) - 1) << USB_EP0_RX_FIFO_CLR_POS)\n#define USB_EP0_RX_FIFO_CLR_UMSK       (~(((1U << USB_EP0_RX_FIFO_CLR_LEN) - 1) << USB_EP0_RX_FIFO_CLR_POS))\n#define USB_EP0_TX_FIFO_OVERFLOW       USB_EP0_TX_FIFO_OVERFLOW\n#define USB_EP0_TX_FIFO_OVERFLOW_POS   (4U)\n#define USB_EP0_TX_FIFO_OVERFLOW_LEN   (1U)\n#define USB_EP0_TX_FIFO_OVERFLOW_MSK   (((1U << USB_EP0_TX_FIFO_OVERFLOW_LEN) - 1) << USB_EP0_TX_FIFO_OVERFLOW_POS)\n#define USB_EP0_TX_FIFO_OVERFLOW_UMSK  (~(((1U << USB_EP0_TX_FIFO_OVERFLOW_LEN) - 1) << USB_EP0_TX_FIFO_OVERFLOW_POS))\n#define USB_EP0_TX_FIFO_UNDERFLOW      USB_EP0_TX_FIFO_UNDERFLOW\n#define USB_EP0_TX_FIFO_UNDERFLOW_POS  (5U)\n#define USB_EP0_TX_FIFO_UNDERFLOW_LEN  (1U)\n#define USB_EP0_TX_FIFO_UNDERFLOW_MSK  (((1U << USB_EP0_TX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP0_TX_FIFO_UNDERFLOW_POS)\n#define USB_EP0_TX_FIFO_UNDERFLOW_UMSK (~(((1U << USB_EP0_TX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP0_TX_FIFO_UNDERFLOW_POS))\n#define USB_EP0_RX_FIFO_OVERFLOW       USB_EP0_RX_FIFO_OVERFLOW\n#define USB_EP0_RX_FIFO_OVERFLOW_POS   (6U)\n#define USB_EP0_RX_FIFO_OVERFLOW_LEN   (1U)\n#define USB_EP0_RX_FIFO_OVERFLOW_MSK   (((1U << USB_EP0_RX_FIFO_OVERFLOW_LEN) - 1) << USB_EP0_RX_FIFO_OVERFLOW_POS)\n#define USB_EP0_RX_FIFO_OVERFLOW_UMSK  (~(((1U << USB_EP0_RX_FIFO_OVERFLOW_LEN) - 1) << USB_EP0_RX_FIFO_OVERFLOW_POS))\n#define USB_EP0_RX_FIFO_UNDERFLOW      USB_EP0_RX_FIFO_UNDERFLOW\n#define USB_EP0_RX_FIFO_UNDERFLOW_POS  (7U)\n#define USB_EP0_RX_FIFO_UNDERFLOW_LEN  (1U)\n#define USB_EP0_RX_FIFO_UNDERFLOW_MSK  (((1U << USB_EP0_RX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP0_RX_FIFO_UNDERFLOW_POS)\n#define USB_EP0_RX_FIFO_UNDERFLOW_UMSK (~(((1U << USB_EP0_RX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP0_RX_FIFO_UNDERFLOW_POS))\n\n/* 0x104 : ep0_fifo_status */\n#define USB_EP0_FIFO_STATUS_OFFSET (0x104)\n#define USB_EP0_TX_FIFO_CNT        USB_EP0_TX_FIFO_CNT\n#define USB_EP0_TX_FIFO_CNT_POS    (0U)\n#define USB_EP0_TX_FIFO_CNT_LEN    (7U)\n#define USB_EP0_TX_FIFO_CNT_MSK    (((1U << USB_EP0_TX_FIFO_CNT_LEN) - 1) << USB_EP0_TX_FIFO_CNT_POS)\n#define USB_EP0_TX_FIFO_CNT_UMSK   (~(((1U << USB_EP0_TX_FIFO_CNT_LEN) - 1) << USB_EP0_TX_FIFO_CNT_POS))\n#define USB_EP0_TX_FIFO_EMPTY      USB_EP0_TX_FIFO_EMPTY\n#define USB_EP0_TX_FIFO_EMPTY_POS  (14U)\n#define USB_EP0_TX_FIFO_EMPTY_LEN  (1U)\n#define USB_EP0_TX_FIFO_EMPTY_MSK  (((1U << USB_EP0_TX_FIFO_EMPTY_LEN) - 1) << USB_EP0_TX_FIFO_EMPTY_POS)\n#define USB_EP0_TX_FIFO_EMPTY_UMSK (~(((1U << USB_EP0_TX_FIFO_EMPTY_LEN) - 1) << USB_EP0_TX_FIFO_EMPTY_POS))\n#define USB_EP0_TX_FIFO_FULL       USB_EP0_TX_FIFO_FULL\n#define USB_EP0_TX_FIFO_FULL_POS   (15U)\n#define USB_EP0_TX_FIFO_FULL_LEN   (1U)\n#define USB_EP0_TX_FIFO_FULL_MSK   (((1U << USB_EP0_TX_FIFO_FULL_LEN) - 1) << USB_EP0_TX_FIFO_FULL_POS)\n#define USB_EP0_TX_FIFO_FULL_UMSK  (~(((1U << USB_EP0_TX_FIFO_FULL_LEN) - 1) << USB_EP0_TX_FIFO_FULL_POS))\n#define USB_EP0_RX_FIFO_CNT        USB_EP0_RX_FIFO_CNT\n#define USB_EP0_RX_FIFO_CNT_POS    (16U)\n#define USB_EP0_RX_FIFO_CNT_LEN    (7U)\n#define USB_EP0_RX_FIFO_CNT_MSK    (((1U << USB_EP0_RX_FIFO_CNT_LEN) - 1) << USB_EP0_RX_FIFO_CNT_POS)\n#define USB_EP0_RX_FIFO_CNT_UMSK   (~(((1U << USB_EP0_RX_FIFO_CNT_LEN) - 1) << USB_EP0_RX_FIFO_CNT_POS))\n#define USB_EP0_RX_FIFO_EMPTY      USB_EP0_RX_FIFO_EMPTY\n#define USB_EP0_RX_FIFO_EMPTY_POS  (30U)\n#define USB_EP0_RX_FIFO_EMPTY_LEN  (1U)\n#define USB_EP0_RX_FIFO_EMPTY_MSK  (((1U << USB_EP0_RX_FIFO_EMPTY_LEN) - 1) << USB_EP0_RX_FIFO_EMPTY_POS)\n#define USB_EP0_RX_FIFO_EMPTY_UMSK (~(((1U << USB_EP0_RX_FIFO_EMPTY_LEN) - 1) << USB_EP0_RX_FIFO_EMPTY_POS))\n#define USB_EP0_RX_FIFO_FULL       USB_EP0_RX_FIFO_FULL\n#define USB_EP0_RX_FIFO_FULL_POS   (31U)\n#define USB_EP0_RX_FIFO_FULL_LEN   (1U)\n#define USB_EP0_RX_FIFO_FULL_MSK   (((1U << USB_EP0_RX_FIFO_FULL_LEN) - 1) << USB_EP0_RX_FIFO_FULL_POS)\n#define USB_EP0_RX_FIFO_FULL_UMSK  (~(((1U << USB_EP0_RX_FIFO_FULL_LEN) - 1) << USB_EP0_RX_FIFO_FULL_POS))\n\n/* 0x108 : ep0_tx_fifo_wdata */\n#define USB_EP0_TX_FIFO_WDATA_OFFSET (0x108)\n#define USB_EP0_TX_FIFO_WDATA        USB_EP0_TX_FIFO_WDATA\n#define USB_EP0_TX_FIFO_WDATA_POS    (0U)\n#define USB_EP0_TX_FIFO_WDATA_LEN    (8U)\n#define USB_EP0_TX_FIFO_WDATA_MSK    (((1U << USB_EP0_TX_FIFO_WDATA_LEN) - 1) << USB_EP0_TX_FIFO_WDATA_POS)\n#define USB_EP0_TX_FIFO_WDATA_UMSK   (~(((1U << USB_EP0_TX_FIFO_WDATA_LEN) - 1) << USB_EP0_TX_FIFO_WDATA_POS))\n\n/* 0x10C : ep0_rx_fifo_rdata */\n#define USB_EP0_RX_FIFO_RDATA_OFFSET (0x10C)\n#define USB_EP0_RX_FIFO_RDATA        USB_EP0_RX_FIFO_RDATA\n#define USB_EP0_RX_FIFO_RDATA_POS    (0U)\n#define USB_EP0_RX_FIFO_RDATA_LEN    (8U)\n#define USB_EP0_RX_FIFO_RDATA_MSK    (((1U << USB_EP0_RX_FIFO_RDATA_LEN) - 1) << USB_EP0_RX_FIFO_RDATA_POS)\n#define USB_EP0_RX_FIFO_RDATA_UMSK   (~(((1U << USB_EP0_RX_FIFO_RDATA_LEN) - 1) << USB_EP0_RX_FIFO_RDATA_POS))\n\n/* 0x110 : ep1_fifo_config */\n#define USB_EP1_FIFO_CONFIG_OFFSET     (0x110)\n#define USB_EP1_DMA_TX_EN              USB_EP1_DMA_TX_EN\n#define USB_EP1_DMA_TX_EN_POS          (0U)\n#define USB_EP1_DMA_TX_EN_LEN          (1U)\n#define USB_EP1_DMA_TX_EN_MSK          (((1U << USB_EP1_DMA_TX_EN_LEN) - 1) << USB_EP1_DMA_TX_EN_POS)\n#define USB_EP1_DMA_TX_EN_UMSK         (~(((1U << USB_EP1_DMA_TX_EN_LEN) - 1) << USB_EP1_DMA_TX_EN_POS))\n#define USB_EP1_DMA_RX_EN              USB_EP1_DMA_RX_EN\n#define USB_EP1_DMA_RX_EN_POS          (1U)\n#define USB_EP1_DMA_RX_EN_LEN          (1U)\n#define USB_EP1_DMA_RX_EN_MSK          (((1U << USB_EP1_DMA_RX_EN_LEN) - 1) << USB_EP1_DMA_RX_EN_POS)\n#define USB_EP1_DMA_RX_EN_UMSK         (~(((1U << USB_EP1_DMA_RX_EN_LEN) - 1) << USB_EP1_DMA_RX_EN_POS))\n#define USB_EP1_TX_FIFO_CLR            USB_EP1_TX_FIFO_CLR\n#define USB_EP1_TX_FIFO_CLR_POS        (2U)\n#define USB_EP1_TX_FIFO_CLR_LEN        (1U)\n#define USB_EP1_TX_FIFO_CLR_MSK        (((1U << USB_EP1_TX_FIFO_CLR_LEN) - 1) << USB_EP1_TX_FIFO_CLR_POS)\n#define USB_EP1_TX_FIFO_CLR_UMSK       (~(((1U << USB_EP1_TX_FIFO_CLR_LEN) - 1) << USB_EP1_TX_FIFO_CLR_POS))\n#define USB_EP1_RX_FIFO_CLR            USB_EP1_RX_FIFO_CLR\n#define USB_EP1_RX_FIFO_CLR_POS        (3U)\n#define USB_EP1_RX_FIFO_CLR_LEN        (1U)\n#define USB_EP1_RX_FIFO_CLR_MSK        (((1U << USB_EP1_RX_FIFO_CLR_LEN) - 1) << USB_EP1_RX_FIFO_CLR_POS)\n#define USB_EP1_RX_FIFO_CLR_UMSK       (~(((1U << USB_EP1_RX_FIFO_CLR_LEN) - 1) << USB_EP1_RX_FIFO_CLR_POS))\n#define USB_EP1_TX_FIFO_OVERFLOW       USB_EP1_TX_FIFO_OVERFLOW\n#define USB_EP1_TX_FIFO_OVERFLOW_POS   (4U)\n#define USB_EP1_TX_FIFO_OVERFLOW_LEN   (1U)\n#define USB_EP1_TX_FIFO_OVERFLOW_MSK   (((1U << USB_EP1_TX_FIFO_OVERFLOW_LEN) - 1) << USB_EP1_TX_FIFO_OVERFLOW_POS)\n#define USB_EP1_TX_FIFO_OVERFLOW_UMSK  (~(((1U << USB_EP1_TX_FIFO_OVERFLOW_LEN) - 1) << USB_EP1_TX_FIFO_OVERFLOW_POS))\n#define USB_EP1_TX_FIFO_UNDERFLOW      USB_EP1_TX_FIFO_UNDERFLOW\n#define USB_EP1_TX_FIFO_UNDERFLOW_POS  (5U)\n#define USB_EP1_TX_FIFO_UNDERFLOW_LEN  (1U)\n#define USB_EP1_TX_FIFO_UNDERFLOW_MSK  (((1U << USB_EP1_TX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP1_TX_FIFO_UNDERFLOW_POS)\n#define USB_EP1_TX_FIFO_UNDERFLOW_UMSK (~(((1U << USB_EP1_TX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP1_TX_FIFO_UNDERFLOW_POS))\n#define USB_EP1_RX_FIFO_OVERFLOW       USB_EP1_RX_FIFO_OVERFLOW\n#define USB_EP1_RX_FIFO_OVERFLOW_POS   (6U)\n#define USB_EP1_RX_FIFO_OVERFLOW_LEN   (1U)\n#define USB_EP1_RX_FIFO_OVERFLOW_MSK   (((1U << USB_EP1_RX_FIFO_OVERFLOW_LEN) - 1) << USB_EP1_RX_FIFO_OVERFLOW_POS)\n#define USB_EP1_RX_FIFO_OVERFLOW_UMSK  (~(((1U << USB_EP1_RX_FIFO_OVERFLOW_LEN) - 1) << USB_EP1_RX_FIFO_OVERFLOW_POS))\n#define USB_EP1_RX_FIFO_UNDERFLOW      USB_EP1_RX_FIFO_UNDERFLOW\n#define USB_EP1_RX_FIFO_UNDERFLOW_POS  (7U)\n#define USB_EP1_RX_FIFO_UNDERFLOW_LEN  (1U)\n#define USB_EP1_RX_FIFO_UNDERFLOW_MSK  (((1U << USB_EP1_RX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP1_RX_FIFO_UNDERFLOW_POS)\n#define USB_EP1_RX_FIFO_UNDERFLOW_UMSK (~(((1U << USB_EP1_RX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP1_RX_FIFO_UNDERFLOW_POS))\n\n/* 0x114 : ep1_fifo_status */\n#define USB_EP1_FIFO_STATUS_OFFSET (0x114)\n#define USB_EP1_TX_FIFO_CNT        USB_EP1_TX_FIFO_CNT\n#define USB_EP1_TX_FIFO_CNT_POS    (0U)\n#define USB_EP1_TX_FIFO_CNT_LEN    (7U)\n#define USB_EP1_TX_FIFO_CNT_MSK    (((1U << USB_EP1_TX_FIFO_CNT_LEN) - 1) << USB_EP1_TX_FIFO_CNT_POS)\n#define USB_EP1_TX_FIFO_CNT_UMSK   (~(((1U << USB_EP1_TX_FIFO_CNT_LEN) - 1) << USB_EP1_TX_FIFO_CNT_POS))\n#define USB_EP1_TX_FIFO_EMPTY      USB_EP1_TX_FIFO_EMPTY\n#define USB_EP1_TX_FIFO_EMPTY_POS  (14U)\n#define USB_EP1_TX_FIFO_EMPTY_LEN  (1U)\n#define USB_EP1_TX_FIFO_EMPTY_MSK  (((1U << USB_EP1_TX_FIFO_EMPTY_LEN) - 1) << USB_EP1_TX_FIFO_EMPTY_POS)\n#define USB_EP1_TX_FIFO_EMPTY_UMSK (~(((1U << USB_EP1_TX_FIFO_EMPTY_LEN) - 1) << USB_EP1_TX_FIFO_EMPTY_POS))\n#define USB_EP1_TX_FIFO_FULL       USB_EP1_TX_FIFO_FULL\n#define USB_EP1_TX_FIFO_FULL_POS   (15U)\n#define USB_EP1_TX_FIFO_FULL_LEN   (1U)\n#define USB_EP1_TX_FIFO_FULL_MSK   (((1U << USB_EP1_TX_FIFO_FULL_LEN) - 1) << USB_EP1_TX_FIFO_FULL_POS)\n#define USB_EP1_TX_FIFO_FULL_UMSK  (~(((1U << USB_EP1_TX_FIFO_FULL_LEN) - 1) << USB_EP1_TX_FIFO_FULL_POS))\n#define USB_EP1_RX_FIFO_CNT        USB_EP1_RX_FIFO_CNT\n#define USB_EP1_RX_FIFO_CNT_POS    (16U)\n#define USB_EP1_RX_FIFO_CNT_LEN    (7U)\n#define USB_EP1_RX_FIFO_CNT_MSK    (((1U << USB_EP1_RX_FIFO_CNT_LEN) - 1) << USB_EP1_RX_FIFO_CNT_POS)\n#define USB_EP1_RX_FIFO_CNT_UMSK   (~(((1U << USB_EP1_RX_FIFO_CNT_LEN) - 1) << USB_EP1_RX_FIFO_CNT_POS))\n#define USB_EP1_RX_FIFO_EMPTY      USB_EP1_RX_FIFO_EMPTY\n#define USB_EP1_RX_FIFO_EMPTY_POS  (30U)\n#define USB_EP1_RX_FIFO_EMPTY_LEN  (1U)\n#define USB_EP1_RX_FIFO_EMPTY_MSK  (((1U << USB_EP1_RX_FIFO_EMPTY_LEN) - 1) << USB_EP1_RX_FIFO_EMPTY_POS)\n#define USB_EP1_RX_FIFO_EMPTY_UMSK (~(((1U << USB_EP1_RX_FIFO_EMPTY_LEN) - 1) << USB_EP1_RX_FIFO_EMPTY_POS))\n#define USB_EP1_RX_FIFO_FULL       USB_EP1_RX_FIFO_FULL\n#define USB_EP1_RX_FIFO_FULL_POS   (31U)\n#define USB_EP1_RX_FIFO_FULL_LEN   (1U)\n#define USB_EP1_RX_FIFO_FULL_MSK   (((1U << USB_EP1_RX_FIFO_FULL_LEN) - 1) << USB_EP1_RX_FIFO_FULL_POS)\n#define USB_EP1_RX_FIFO_FULL_UMSK  (~(((1U << USB_EP1_RX_FIFO_FULL_LEN) - 1) << USB_EP1_RX_FIFO_FULL_POS))\n\n/* 0x118 : ep1_tx_fifo_wdata */\n#define USB_EP1_TX_FIFO_WDATA_OFFSET (0x118)\n#define USB_EP1_TX_FIFO_WDATA        USB_EP1_TX_FIFO_WDATA\n#define USB_EP1_TX_FIFO_WDATA_POS    (0U)\n#define USB_EP1_TX_FIFO_WDATA_LEN    (8U)\n#define USB_EP1_TX_FIFO_WDATA_MSK    (((1U << USB_EP1_TX_FIFO_WDATA_LEN) - 1) << USB_EP1_TX_FIFO_WDATA_POS)\n#define USB_EP1_TX_FIFO_WDATA_UMSK   (~(((1U << USB_EP1_TX_FIFO_WDATA_LEN) - 1) << USB_EP1_TX_FIFO_WDATA_POS))\n\n/* 0x11C : ep1_rx_fifo_rdata */\n#define USB_EP1_RX_FIFO_RDATA_OFFSET (0x11C)\n#define USB_EP1_RX_FIFO_RDATA        USB_EP1_RX_FIFO_RDATA\n#define USB_EP1_RX_FIFO_RDATA_POS    (0U)\n#define USB_EP1_RX_FIFO_RDATA_LEN    (8U)\n#define USB_EP1_RX_FIFO_RDATA_MSK    (((1U << USB_EP1_RX_FIFO_RDATA_LEN) - 1) << USB_EP1_RX_FIFO_RDATA_POS)\n#define USB_EP1_RX_FIFO_RDATA_UMSK   (~(((1U << USB_EP1_RX_FIFO_RDATA_LEN) - 1) << USB_EP1_RX_FIFO_RDATA_POS))\n\n/* 0x120 : ep2_fifo_config */\n#define USB_EP2_FIFO_CONFIG_OFFSET     (0x120)\n#define USB_EP2_DMA_TX_EN              USB_EP2_DMA_TX_EN\n#define USB_EP2_DMA_TX_EN_POS          (0U)\n#define USB_EP2_DMA_TX_EN_LEN          (1U)\n#define USB_EP2_DMA_TX_EN_MSK          (((1U << USB_EP2_DMA_TX_EN_LEN) - 1) << USB_EP2_DMA_TX_EN_POS)\n#define USB_EP2_DMA_TX_EN_UMSK         (~(((1U << USB_EP2_DMA_TX_EN_LEN) - 1) << USB_EP2_DMA_TX_EN_POS))\n#define USB_EP2_DMA_RX_EN              USB_EP2_DMA_RX_EN\n#define USB_EP2_DMA_RX_EN_POS          (1U)\n#define USB_EP2_DMA_RX_EN_LEN          (1U)\n#define USB_EP2_DMA_RX_EN_MSK          (((1U << USB_EP2_DMA_RX_EN_LEN) - 1) << USB_EP2_DMA_RX_EN_POS)\n#define USB_EP2_DMA_RX_EN_UMSK         (~(((1U << USB_EP2_DMA_RX_EN_LEN) - 1) << USB_EP2_DMA_RX_EN_POS))\n#define USB_EP2_TX_FIFO_CLR            USB_EP2_TX_FIFO_CLR\n#define USB_EP2_TX_FIFO_CLR_POS        (2U)\n#define USB_EP2_TX_FIFO_CLR_LEN        (1U)\n#define USB_EP2_TX_FIFO_CLR_MSK        (((1U << USB_EP2_TX_FIFO_CLR_LEN) - 1) << USB_EP2_TX_FIFO_CLR_POS)\n#define USB_EP2_TX_FIFO_CLR_UMSK       (~(((1U << USB_EP2_TX_FIFO_CLR_LEN) - 1) << USB_EP2_TX_FIFO_CLR_POS))\n#define USB_EP2_RX_FIFO_CLR            USB_EP2_RX_FIFO_CLR\n#define USB_EP2_RX_FIFO_CLR_POS        (3U)\n#define USB_EP2_RX_FIFO_CLR_LEN        (1U)\n#define USB_EP2_RX_FIFO_CLR_MSK        (((1U << USB_EP2_RX_FIFO_CLR_LEN) - 1) << USB_EP2_RX_FIFO_CLR_POS)\n#define USB_EP2_RX_FIFO_CLR_UMSK       (~(((1U << USB_EP2_RX_FIFO_CLR_LEN) - 1) << USB_EP2_RX_FIFO_CLR_POS))\n#define USB_EP2_TX_FIFO_OVERFLOW       USB_EP2_TX_FIFO_OVERFLOW\n#define USB_EP2_TX_FIFO_OVERFLOW_POS   (4U)\n#define USB_EP2_TX_FIFO_OVERFLOW_LEN   (1U)\n#define USB_EP2_TX_FIFO_OVERFLOW_MSK   (((1U << USB_EP2_TX_FIFO_OVERFLOW_LEN) - 1) << USB_EP2_TX_FIFO_OVERFLOW_POS)\n#define USB_EP2_TX_FIFO_OVERFLOW_UMSK  (~(((1U << USB_EP2_TX_FIFO_OVERFLOW_LEN) - 1) << USB_EP2_TX_FIFO_OVERFLOW_POS))\n#define USB_EP2_TX_FIFO_UNDERFLOW      USB_EP2_TX_FIFO_UNDERFLOW\n#define USB_EP2_TX_FIFO_UNDERFLOW_POS  (5U)\n#define USB_EP2_TX_FIFO_UNDERFLOW_LEN  (1U)\n#define USB_EP2_TX_FIFO_UNDERFLOW_MSK  (((1U << USB_EP2_TX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP2_TX_FIFO_UNDERFLOW_POS)\n#define USB_EP2_TX_FIFO_UNDERFLOW_UMSK (~(((1U << USB_EP2_TX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP2_TX_FIFO_UNDERFLOW_POS))\n#define USB_EP2_RX_FIFO_OVERFLOW       USB_EP2_RX_FIFO_OVERFLOW\n#define USB_EP2_RX_FIFO_OVERFLOW_POS   (6U)\n#define USB_EP2_RX_FIFO_OVERFLOW_LEN   (1U)\n#define USB_EP2_RX_FIFO_OVERFLOW_MSK   (((1U << USB_EP2_RX_FIFO_OVERFLOW_LEN) - 1) << USB_EP2_RX_FIFO_OVERFLOW_POS)\n#define USB_EP2_RX_FIFO_OVERFLOW_UMSK  (~(((1U << USB_EP2_RX_FIFO_OVERFLOW_LEN) - 1) << USB_EP2_RX_FIFO_OVERFLOW_POS))\n#define USB_EP2_RX_FIFO_UNDERFLOW      USB_EP2_RX_FIFO_UNDERFLOW\n#define USB_EP2_RX_FIFO_UNDERFLOW_POS  (7U)\n#define USB_EP2_RX_FIFO_UNDERFLOW_LEN  (1U)\n#define USB_EP2_RX_FIFO_UNDERFLOW_MSK  (((1U << USB_EP2_RX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP2_RX_FIFO_UNDERFLOW_POS)\n#define USB_EP2_RX_FIFO_UNDERFLOW_UMSK (~(((1U << USB_EP2_RX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP2_RX_FIFO_UNDERFLOW_POS))\n\n/* 0x124 : ep2_fifo_status */\n#define USB_EP2_FIFO_STATUS_OFFSET (0x124)\n#define USB_EP2_TX_FIFO_CNT        USB_EP2_TX_FIFO_CNT\n#define USB_EP2_TX_FIFO_CNT_POS    (0U)\n#define USB_EP2_TX_FIFO_CNT_LEN    (7U)\n#define USB_EP2_TX_FIFO_CNT_MSK    (((1U << USB_EP2_TX_FIFO_CNT_LEN) - 1) << USB_EP2_TX_FIFO_CNT_POS)\n#define USB_EP2_TX_FIFO_CNT_UMSK   (~(((1U << USB_EP2_TX_FIFO_CNT_LEN) - 1) << USB_EP2_TX_FIFO_CNT_POS))\n#define USB_EP2_TX_FIFO_EMPTY      USB_EP2_TX_FIFO_EMPTY\n#define USB_EP2_TX_FIFO_EMPTY_POS  (14U)\n#define USB_EP2_TX_FIFO_EMPTY_LEN  (1U)\n#define USB_EP2_TX_FIFO_EMPTY_MSK  (((1U << USB_EP2_TX_FIFO_EMPTY_LEN) - 1) << USB_EP2_TX_FIFO_EMPTY_POS)\n#define USB_EP2_TX_FIFO_EMPTY_UMSK (~(((1U << USB_EP2_TX_FIFO_EMPTY_LEN) - 1) << USB_EP2_TX_FIFO_EMPTY_POS))\n#define USB_EP2_TX_FIFO_FULL       USB_EP2_TX_FIFO_FULL\n#define USB_EP2_TX_FIFO_FULL_POS   (15U)\n#define USB_EP2_TX_FIFO_FULL_LEN   (1U)\n#define USB_EP2_TX_FIFO_FULL_MSK   (((1U << USB_EP2_TX_FIFO_FULL_LEN) - 1) << USB_EP2_TX_FIFO_FULL_POS)\n#define USB_EP2_TX_FIFO_FULL_UMSK  (~(((1U << USB_EP2_TX_FIFO_FULL_LEN) - 1) << USB_EP2_TX_FIFO_FULL_POS))\n#define USB_EP2_RX_FIFO_CNT        USB_EP2_RX_FIFO_CNT\n#define USB_EP2_RX_FIFO_CNT_POS    (16U)\n#define USB_EP2_RX_FIFO_CNT_LEN    (7U)\n#define USB_EP2_RX_FIFO_CNT_MSK    (((1U << USB_EP2_RX_FIFO_CNT_LEN) - 1) << USB_EP2_RX_FIFO_CNT_POS)\n#define USB_EP2_RX_FIFO_CNT_UMSK   (~(((1U << USB_EP2_RX_FIFO_CNT_LEN) - 1) << USB_EP2_RX_FIFO_CNT_POS))\n#define USB_EP2_RX_FIFO_EMPTY      USB_EP2_RX_FIFO_EMPTY\n#define USB_EP2_RX_FIFO_EMPTY_POS  (30U)\n#define USB_EP2_RX_FIFO_EMPTY_LEN  (1U)\n#define USB_EP2_RX_FIFO_EMPTY_MSK  (((1U << USB_EP2_RX_FIFO_EMPTY_LEN) - 1) << USB_EP2_RX_FIFO_EMPTY_POS)\n#define USB_EP2_RX_FIFO_EMPTY_UMSK (~(((1U << USB_EP2_RX_FIFO_EMPTY_LEN) - 1) << USB_EP2_RX_FIFO_EMPTY_POS))\n#define USB_EP2_RX_FIFO_FULL       USB_EP2_RX_FIFO_FULL\n#define USB_EP2_RX_FIFO_FULL_POS   (31U)\n#define USB_EP2_RX_FIFO_FULL_LEN   (1U)\n#define USB_EP2_RX_FIFO_FULL_MSK   (((1U << USB_EP2_RX_FIFO_FULL_LEN) - 1) << USB_EP2_RX_FIFO_FULL_POS)\n#define USB_EP2_RX_FIFO_FULL_UMSK  (~(((1U << USB_EP2_RX_FIFO_FULL_LEN) - 1) << USB_EP2_RX_FIFO_FULL_POS))\n\n/* 0x128 : ep2_tx_fifo_wdata */\n#define USB_EP2_TX_FIFO_WDATA_OFFSET (0x128)\n#define USB_EP2_TX_FIFO_WDATA        USB_EP2_TX_FIFO_WDATA\n#define USB_EP2_TX_FIFO_WDATA_POS    (0U)\n#define USB_EP2_TX_FIFO_WDATA_LEN    (8U)\n#define USB_EP2_TX_FIFO_WDATA_MSK    (((1U << USB_EP2_TX_FIFO_WDATA_LEN) - 1) << USB_EP2_TX_FIFO_WDATA_POS)\n#define USB_EP2_TX_FIFO_WDATA_UMSK   (~(((1U << USB_EP2_TX_FIFO_WDATA_LEN) - 1) << USB_EP2_TX_FIFO_WDATA_POS))\n\n/* 0x12C : ep2_rx_fifo_rdata */\n#define USB_EP2_RX_FIFO_RDATA_OFFSET (0x12C)\n#define USB_EP2_RX_FIFO_RDATA        USB_EP2_RX_FIFO_RDATA\n#define USB_EP2_RX_FIFO_RDATA_POS    (0U)\n#define USB_EP2_RX_FIFO_RDATA_LEN    (8U)\n#define USB_EP2_RX_FIFO_RDATA_MSK    (((1U << USB_EP2_RX_FIFO_RDATA_LEN) - 1) << USB_EP2_RX_FIFO_RDATA_POS)\n#define USB_EP2_RX_FIFO_RDATA_UMSK   (~(((1U << USB_EP2_RX_FIFO_RDATA_LEN) - 1) << USB_EP2_RX_FIFO_RDATA_POS))\n\n/* 0x130 : ep3_fifo_config */\n#define USB_EP3_FIFO_CONFIG_OFFSET     (0x130)\n#define USB_EP3_DMA_TX_EN              USB_EP3_DMA_TX_EN\n#define USB_EP3_DMA_TX_EN_POS          (0U)\n#define USB_EP3_DMA_TX_EN_LEN          (1U)\n#define USB_EP3_DMA_TX_EN_MSK          (((1U << USB_EP3_DMA_TX_EN_LEN) - 1) << USB_EP3_DMA_TX_EN_POS)\n#define USB_EP3_DMA_TX_EN_UMSK         (~(((1U << USB_EP3_DMA_TX_EN_LEN) - 1) << USB_EP3_DMA_TX_EN_POS))\n#define USB_EP3_DMA_RX_EN              USB_EP3_DMA_RX_EN\n#define USB_EP3_DMA_RX_EN_POS          (1U)\n#define USB_EP3_DMA_RX_EN_LEN          (1U)\n#define USB_EP3_DMA_RX_EN_MSK          (((1U << USB_EP3_DMA_RX_EN_LEN) - 1) << USB_EP3_DMA_RX_EN_POS)\n#define USB_EP3_DMA_RX_EN_UMSK         (~(((1U << USB_EP3_DMA_RX_EN_LEN) - 1) << USB_EP3_DMA_RX_EN_POS))\n#define USB_EP3_TX_FIFO_CLR            USB_EP3_TX_FIFO_CLR\n#define USB_EP3_TX_FIFO_CLR_POS        (2U)\n#define USB_EP3_TX_FIFO_CLR_LEN        (1U)\n#define USB_EP3_TX_FIFO_CLR_MSK        (((1U << USB_EP3_TX_FIFO_CLR_LEN) - 1) << USB_EP3_TX_FIFO_CLR_POS)\n#define USB_EP3_TX_FIFO_CLR_UMSK       (~(((1U << USB_EP3_TX_FIFO_CLR_LEN) - 1) << USB_EP3_TX_FIFO_CLR_POS))\n#define USB_EP3_RX_FIFO_CLR            USB_EP3_RX_FIFO_CLR\n#define USB_EP3_RX_FIFO_CLR_POS        (3U)\n#define USB_EP3_RX_FIFO_CLR_LEN        (1U)\n#define USB_EP3_RX_FIFO_CLR_MSK        (((1U << USB_EP3_RX_FIFO_CLR_LEN) - 1) << USB_EP3_RX_FIFO_CLR_POS)\n#define USB_EP3_RX_FIFO_CLR_UMSK       (~(((1U << USB_EP3_RX_FIFO_CLR_LEN) - 1) << USB_EP3_RX_FIFO_CLR_POS))\n#define USB_EP3_TX_FIFO_OVERFLOW       USB_EP3_TX_FIFO_OVERFLOW\n#define USB_EP3_TX_FIFO_OVERFLOW_POS   (4U)\n#define USB_EP3_TX_FIFO_OVERFLOW_LEN   (1U)\n#define USB_EP3_TX_FIFO_OVERFLOW_MSK   (((1U << USB_EP3_TX_FIFO_OVERFLOW_LEN) - 1) << USB_EP3_TX_FIFO_OVERFLOW_POS)\n#define USB_EP3_TX_FIFO_OVERFLOW_UMSK  (~(((1U << USB_EP3_TX_FIFO_OVERFLOW_LEN) - 1) << USB_EP3_TX_FIFO_OVERFLOW_POS))\n#define USB_EP3_TX_FIFO_UNDERFLOW      USB_EP3_TX_FIFO_UNDERFLOW\n#define USB_EP3_TX_FIFO_UNDERFLOW_POS  (5U)\n#define USB_EP3_TX_FIFO_UNDERFLOW_LEN  (1U)\n#define USB_EP3_TX_FIFO_UNDERFLOW_MSK  (((1U << USB_EP3_TX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP3_TX_FIFO_UNDERFLOW_POS)\n#define USB_EP3_TX_FIFO_UNDERFLOW_UMSK (~(((1U << USB_EP3_TX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP3_TX_FIFO_UNDERFLOW_POS))\n#define USB_EP3_RX_FIFO_OVERFLOW       USB_EP3_RX_FIFO_OVERFLOW\n#define USB_EP3_RX_FIFO_OVERFLOW_POS   (6U)\n#define USB_EP3_RX_FIFO_OVERFLOW_LEN   (1U)\n#define USB_EP3_RX_FIFO_OVERFLOW_MSK   (((1U << USB_EP3_RX_FIFO_OVERFLOW_LEN) - 1) << USB_EP3_RX_FIFO_OVERFLOW_POS)\n#define USB_EP3_RX_FIFO_OVERFLOW_UMSK  (~(((1U << USB_EP3_RX_FIFO_OVERFLOW_LEN) - 1) << USB_EP3_RX_FIFO_OVERFLOW_POS))\n#define USB_EP3_RX_FIFO_UNDERFLOW      USB_EP3_RX_FIFO_UNDERFLOW\n#define USB_EP3_RX_FIFO_UNDERFLOW_POS  (7U)\n#define USB_EP3_RX_FIFO_UNDERFLOW_LEN  (1U)\n#define USB_EP3_RX_FIFO_UNDERFLOW_MSK  (((1U << USB_EP3_RX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP3_RX_FIFO_UNDERFLOW_POS)\n#define USB_EP3_RX_FIFO_UNDERFLOW_UMSK (~(((1U << USB_EP3_RX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP3_RX_FIFO_UNDERFLOW_POS))\n\n/* 0x134 : ep3_fifo_status */\n#define USB_EP3_FIFO_STATUS_OFFSET (0x134)\n#define USB_EP3_TX_FIFO_CNT        USB_EP3_TX_FIFO_CNT\n#define USB_EP3_TX_FIFO_CNT_POS    (0U)\n#define USB_EP3_TX_FIFO_CNT_LEN    (7U)\n#define USB_EP3_TX_FIFO_CNT_MSK    (((1U << USB_EP3_TX_FIFO_CNT_LEN) - 1) << USB_EP3_TX_FIFO_CNT_POS)\n#define USB_EP3_TX_FIFO_CNT_UMSK   (~(((1U << USB_EP3_TX_FIFO_CNT_LEN) - 1) << USB_EP3_TX_FIFO_CNT_POS))\n#define USB_EP3_TX_FIFO_EMPTY      USB_EP3_TX_FIFO_EMPTY\n#define USB_EP3_TX_FIFO_EMPTY_POS  (14U)\n#define USB_EP3_TX_FIFO_EMPTY_LEN  (1U)\n#define USB_EP3_TX_FIFO_EMPTY_MSK  (((1U << USB_EP3_TX_FIFO_EMPTY_LEN) - 1) << USB_EP3_TX_FIFO_EMPTY_POS)\n#define USB_EP3_TX_FIFO_EMPTY_UMSK (~(((1U << USB_EP3_TX_FIFO_EMPTY_LEN) - 1) << USB_EP3_TX_FIFO_EMPTY_POS))\n#define USB_EP3_TX_FIFO_FULL       USB_EP3_TX_FIFO_FULL\n#define USB_EP3_TX_FIFO_FULL_POS   (15U)\n#define USB_EP3_TX_FIFO_FULL_LEN   (1U)\n#define USB_EP3_TX_FIFO_FULL_MSK   (((1U << USB_EP3_TX_FIFO_FULL_LEN) - 1) << USB_EP3_TX_FIFO_FULL_POS)\n#define USB_EP3_TX_FIFO_FULL_UMSK  (~(((1U << USB_EP3_TX_FIFO_FULL_LEN) - 1) << USB_EP3_TX_FIFO_FULL_POS))\n#define USB_EP3_RX_FIFO_CNT        USB_EP3_RX_FIFO_CNT\n#define USB_EP3_RX_FIFO_CNT_POS    (16U)\n#define USB_EP3_RX_FIFO_CNT_LEN    (7U)\n#define USB_EP3_RX_FIFO_CNT_MSK    (((1U << USB_EP3_RX_FIFO_CNT_LEN) - 1) << USB_EP3_RX_FIFO_CNT_POS)\n#define USB_EP3_RX_FIFO_CNT_UMSK   (~(((1U << USB_EP3_RX_FIFO_CNT_LEN) - 1) << USB_EP3_RX_FIFO_CNT_POS))\n#define USB_EP3_RX_FIFO_EMPTY      USB_EP3_RX_FIFO_EMPTY\n#define USB_EP3_RX_FIFO_EMPTY_POS  (30U)\n#define USB_EP3_RX_FIFO_EMPTY_LEN  (1U)\n#define USB_EP3_RX_FIFO_EMPTY_MSK  (((1U << USB_EP3_RX_FIFO_EMPTY_LEN) - 1) << USB_EP3_RX_FIFO_EMPTY_POS)\n#define USB_EP3_RX_FIFO_EMPTY_UMSK (~(((1U << USB_EP3_RX_FIFO_EMPTY_LEN) - 1) << USB_EP3_RX_FIFO_EMPTY_POS))\n#define USB_EP3_RX_FIFO_FULL       USB_EP3_RX_FIFO_FULL\n#define USB_EP3_RX_FIFO_FULL_POS   (31U)\n#define USB_EP3_RX_FIFO_FULL_LEN   (1U)\n#define USB_EP3_RX_FIFO_FULL_MSK   (((1U << USB_EP3_RX_FIFO_FULL_LEN) - 1) << USB_EP3_RX_FIFO_FULL_POS)\n#define USB_EP3_RX_FIFO_FULL_UMSK  (~(((1U << USB_EP3_RX_FIFO_FULL_LEN) - 1) << USB_EP3_RX_FIFO_FULL_POS))\n\n/* 0x138 : ep3_tx_fifo_wdata */\n#define USB_EP3_TX_FIFO_WDATA_OFFSET (0x138)\n#define USB_EP3_TX_FIFO_WDATA        USB_EP3_TX_FIFO_WDATA\n#define USB_EP3_TX_FIFO_WDATA_POS    (0U)\n#define USB_EP3_TX_FIFO_WDATA_LEN    (8U)\n#define USB_EP3_TX_FIFO_WDATA_MSK    (((1U << USB_EP3_TX_FIFO_WDATA_LEN) - 1) << USB_EP3_TX_FIFO_WDATA_POS)\n#define USB_EP3_TX_FIFO_WDATA_UMSK   (~(((1U << USB_EP3_TX_FIFO_WDATA_LEN) - 1) << USB_EP3_TX_FIFO_WDATA_POS))\n\n/* 0x13C : ep3_rx_fifo_rdata */\n#define USB_EP3_RX_FIFO_RDATA_OFFSET (0x13C)\n#define USB_EP3_RX_FIFO_RDATA        USB_EP3_RX_FIFO_RDATA\n#define USB_EP3_RX_FIFO_RDATA_POS    (0U)\n#define USB_EP3_RX_FIFO_RDATA_LEN    (8U)\n#define USB_EP3_RX_FIFO_RDATA_MSK    (((1U << USB_EP3_RX_FIFO_RDATA_LEN) - 1) << USB_EP3_RX_FIFO_RDATA_POS)\n#define USB_EP3_RX_FIFO_RDATA_UMSK   (~(((1U << USB_EP3_RX_FIFO_RDATA_LEN) - 1) << USB_EP3_RX_FIFO_RDATA_POS))\n\n/* 0x140 : ep4_fifo_config */\n#define USB_EP4_FIFO_CONFIG_OFFSET     (0x140)\n#define USB_EP4_DMA_TX_EN              USB_EP4_DMA_TX_EN\n#define USB_EP4_DMA_TX_EN_POS          (0U)\n#define USB_EP4_DMA_TX_EN_LEN          (1U)\n#define USB_EP4_DMA_TX_EN_MSK          (((1U << USB_EP4_DMA_TX_EN_LEN) - 1) << USB_EP4_DMA_TX_EN_POS)\n#define USB_EP4_DMA_TX_EN_UMSK         (~(((1U << USB_EP4_DMA_TX_EN_LEN) - 1) << USB_EP4_DMA_TX_EN_POS))\n#define USB_EP4_DMA_RX_EN              USB_EP4_DMA_RX_EN\n#define USB_EP4_DMA_RX_EN_POS          (1U)\n#define USB_EP4_DMA_RX_EN_LEN          (1U)\n#define USB_EP4_DMA_RX_EN_MSK          (((1U << USB_EP4_DMA_RX_EN_LEN) - 1) << USB_EP4_DMA_RX_EN_POS)\n#define USB_EP4_DMA_RX_EN_UMSK         (~(((1U << USB_EP4_DMA_RX_EN_LEN) - 1) << USB_EP4_DMA_RX_EN_POS))\n#define USB_EP4_TX_FIFO_CLR            USB_EP4_TX_FIFO_CLR\n#define USB_EP4_TX_FIFO_CLR_POS        (2U)\n#define USB_EP4_TX_FIFO_CLR_LEN        (1U)\n#define USB_EP4_TX_FIFO_CLR_MSK        (((1U << USB_EP4_TX_FIFO_CLR_LEN) - 1) << USB_EP4_TX_FIFO_CLR_POS)\n#define USB_EP4_TX_FIFO_CLR_UMSK       (~(((1U << USB_EP4_TX_FIFO_CLR_LEN) - 1) << USB_EP4_TX_FIFO_CLR_POS))\n#define USB_EP4_RX_FIFO_CLR            USB_EP4_RX_FIFO_CLR\n#define USB_EP4_RX_FIFO_CLR_POS        (3U)\n#define USB_EP4_RX_FIFO_CLR_LEN        (1U)\n#define USB_EP4_RX_FIFO_CLR_MSK        (((1U << USB_EP4_RX_FIFO_CLR_LEN) - 1) << USB_EP4_RX_FIFO_CLR_POS)\n#define USB_EP4_RX_FIFO_CLR_UMSK       (~(((1U << USB_EP4_RX_FIFO_CLR_LEN) - 1) << USB_EP4_RX_FIFO_CLR_POS))\n#define USB_EP4_TX_FIFO_OVERFLOW       USB_EP4_TX_FIFO_OVERFLOW\n#define USB_EP4_TX_FIFO_OVERFLOW_POS   (4U)\n#define USB_EP4_TX_FIFO_OVERFLOW_LEN   (1U)\n#define USB_EP4_TX_FIFO_OVERFLOW_MSK   (((1U << USB_EP4_TX_FIFO_OVERFLOW_LEN) - 1) << USB_EP4_TX_FIFO_OVERFLOW_POS)\n#define USB_EP4_TX_FIFO_OVERFLOW_UMSK  (~(((1U << USB_EP4_TX_FIFO_OVERFLOW_LEN) - 1) << USB_EP4_TX_FIFO_OVERFLOW_POS))\n#define USB_EP4_TX_FIFO_UNDERFLOW      USB_EP4_TX_FIFO_UNDERFLOW\n#define USB_EP4_TX_FIFO_UNDERFLOW_POS  (5U)\n#define USB_EP4_TX_FIFO_UNDERFLOW_LEN  (1U)\n#define USB_EP4_TX_FIFO_UNDERFLOW_MSK  (((1U << USB_EP4_TX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP4_TX_FIFO_UNDERFLOW_POS)\n#define USB_EP4_TX_FIFO_UNDERFLOW_UMSK (~(((1U << USB_EP4_TX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP4_TX_FIFO_UNDERFLOW_POS))\n#define USB_EP4_RX_FIFO_OVERFLOW       USB_EP4_RX_FIFO_OVERFLOW\n#define USB_EP4_RX_FIFO_OVERFLOW_POS   (6U)\n#define USB_EP4_RX_FIFO_OVERFLOW_LEN   (1U)\n#define USB_EP4_RX_FIFO_OVERFLOW_MSK   (((1U << USB_EP4_RX_FIFO_OVERFLOW_LEN) - 1) << USB_EP4_RX_FIFO_OVERFLOW_POS)\n#define USB_EP4_RX_FIFO_OVERFLOW_UMSK  (~(((1U << USB_EP4_RX_FIFO_OVERFLOW_LEN) - 1) << USB_EP4_RX_FIFO_OVERFLOW_POS))\n#define USB_EP4_RX_FIFO_UNDERFLOW      USB_EP4_RX_FIFO_UNDERFLOW\n#define USB_EP4_RX_FIFO_UNDERFLOW_POS  (7U)\n#define USB_EP4_RX_FIFO_UNDERFLOW_LEN  (1U)\n#define USB_EP4_RX_FIFO_UNDERFLOW_MSK  (((1U << USB_EP4_RX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP4_RX_FIFO_UNDERFLOW_POS)\n#define USB_EP4_RX_FIFO_UNDERFLOW_UMSK (~(((1U << USB_EP4_RX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP4_RX_FIFO_UNDERFLOW_POS))\n\n/* 0x144 : ep4_fifo_status */\n#define USB_EP4_FIFO_STATUS_OFFSET (0x144)\n#define USB_EP4_TX_FIFO_CNT        USB_EP4_TX_FIFO_CNT\n#define USB_EP4_TX_FIFO_CNT_POS    (0U)\n#define USB_EP4_TX_FIFO_CNT_LEN    (7U)\n#define USB_EP4_TX_FIFO_CNT_MSK    (((1U << USB_EP4_TX_FIFO_CNT_LEN) - 1) << USB_EP4_TX_FIFO_CNT_POS)\n#define USB_EP4_TX_FIFO_CNT_UMSK   (~(((1U << USB_EP4_TX_FIFO_CNT_LEN) - 1) << USB_EP4_TX_FIFO_CNT_POS))\n#define USB_EP4_TX_FIFO_EMPTY      USB_EP4_TX_FIFO_EMPTY\n#define USB_EP4_TX_FIFO_EMPTY_POS  (14U)\n#define USB_EP4_TX_FIFO_EMPTY_LEN  (1U)\n#define USB_EP4_TX_FIFO_EMPTY_MSK  (((1U << USB_EP4_TX_FIFO_EMPTY_LEN) - 1) << USB_EP4_TX_FIFO_EMPTY_POS)\n#define USB_EP4_TX_FIFO_EMPTY_UMSK (~(((1U << USB_EP4_TX_FIFO_EMPTY_LEN) - 1) << USB_EP4_TX_FIFO_EMPTY_POS))\n#define USB_EP4_TX_FIFO_FULL       USB_EP4_TX_FIFO_FULL\n#define USB_EP4_TX_FIFO_FULL_POS   (15U)\n#define USB_EP4_TX_FIFO_FULL_LEN   (1U)\n#define USB_EP4_TX_FIFO_FULL_MSK   (((1U << USB_EP4_TX_FIFO_FULL_LEN) - 1) << USB_EP4_TX_FIFO_FULL_POS)\n#define USB_EP4_TX_FIFO_FULL_UMSK  (~(((1U << USB_EP4_TX_FIFO_FULL_LEN) - 1) << USB_EP4_TX_FIFO_FULL_POS))\n#define USB_EP4_RX_FIFO_CNT        USB_EP4_RX_FIFO_CNT\n#define USB_EP4_RX_FIFO_CNT_POS    (16U)\n#define USB_EP4_RX_FIFO_CNT_LEN    (7U)\n#define USB_EP4_RX_FIFO_CNT_MSK    (((1U << USB_EP4_RX_FIFO_CNT_LEN) - 1) << USB_EP4_RX_FIFO_CNT_POS)\n#define USB_EP4_RX_FIFO_CNT_UMSK   (~(((1U << USB_EP4_RX_FIFO_CNT_LEN) - 1) << USB_EP4_RX_FIFO_CNT_POS))\n#define USB_EP4_RX_FIFO_EMPTY      USB_EP4_RX_FIFO_EMPTY\n#define USB_EP4_RX_FIFO_EMPTY_POS  (30U)\n#define USB_EP4_RX_FIFO_EMPTY_LEN  (1U)\n#define USB_EP4_RX_FIFO_EMPTY_MSK  (((1U << USB_EP4_RX_FIFO_EMPTY_LEN) - 1) << USB_EP4_RX_FIFO_EMPTY_POS)\n#define USB_EP4_RX_FIFO_EMPTY_UMSK (~(((1U << USB_EP4_RX_FIFO_EMPTY_LEN) - 1) << USB_EP4_RX_FIFO_EMPTY_POS))\n#define USB_EP4_RX_FIFO_FULL       USB_EP4_RX_FIFO_FULL\n#define USB_EP4_RX_FIFO_FULL_POS   (31U)\n#define USB_EP4_RX_FIFO_FULL_LEN   (1U)\n#define USB_EP4_RX_FIFO_FULL_MSK   (((1U << USB_EP4_RX_FIFO_FULL_LEN) - 1) << USB_EP4_RX_FIFO_FULL_POS)\n#define USB_EP4_RX_FIFO_FULL_UMSK  (~(((1U << USB_EP4_RX_FIFO_FULL_LEN) - 1) << USB_EP4_RX_FIFO_FULL_POS))\n\n/* 0x148 : ep4_tx_fifo_wdata */\n#define USB_EP4_TX_FIFO_WDATA_OFFSET (0x148)\n#define USB_EP4_TX_FIFO_WDATA        USB_EP4_TX_FIFO_WDATA\n#define USB_EP4_TX_FIFO_WDATA_POS    (0U)\n#define USB_EP4_TX_FIFO_WDATA_LEN    (8U)\n#define USB_EP4_TX_FIFO_WDATA_MSK    (((1U << USB_EP4_TX_FIFO_WDATA_LEN) - 1) << USB_EP4_TX_FIFO_WDATA_POS)\n#define USB_EP4_TX_FIFO_WDATA_UMSK   (~(((1U << USB_EP4_TX_FIFO_WDATA_LEN) - 1) << USB_EP4_TX_FIFO_WDATA_POS))\n\n/* 0x14C : ep4_rx_fifo_rdata */\n#define USB_EP4_RX_FIFO_RDATA_OFFSET (0x14C)\n#define USB_EP4_RX_FIFO_RDATA        USB_EP4_RX_FIFO_RDATA\n#define USB_EP4_RX_FIFO_RDATA_POS    (0U)\n#define USB_EP4_RX_FIFO_RDATA_LEN    (8U)\n#define USB_EP4_RX_FIFO_RDATA_MSK    (((1U << USB_EP4_RX_FIFO_RDATA_LEN) - 1) << USB_EP4_RX_FIFO_RDATA_POS)\n#define USB_EP4_RX_FIFO_RDATA_UMSK   (~(((1U << USB_EP4_RX_FIFO_RDATA_LEN) - 1) << USB_EP4_RX_FIFO_RDATA_POS))\n\n/* 0x150 : ep5_fifo_config */\n#define USB_EP5_FIFO_CONFIG_OFFSET     (0x150)\n#define USB_EP5_DMA_TX_EN              USB_EP5_DMA_TX_EN\n#define USB_EP5_DMA_TX_EN_POS          (0U)\n#define USB_EP5_DMA_TX_EN_LEN          (1U)\n#define USB_EP5_DMA_TX_EN_MSK          (((1U << USB_EP5_DMA_TX_EN_LEN) - 1) << USB_EP5_DMA_TX_EN_POS)\n#define USB_EP5_DMA_TX_EN_UMSK         (~(((1U << USB_EP5_DMA_TX_EN_LEN) - 1) << USB_EP5_DMA_TX_EN_POS))\n#define USB_EP5_DMA_RX_EN              USB_EP5_DMA_RX_EN\n#define USB_EP5_DMA_RX_EN_POS          (1U)\n#define USB_EP5_DMA_RX_EN_LEN          (1U)\n#define USB_EP5_DMA_RX_EN_MSK          (((1U << USB_EP5_DMA_RX_EN_LEN) - 1) << USB_EP5_DMA_RX_EN_POS)\n#define USB_EP5_DMA_RX_EN_UMSK         (~(((1U << USB_EP5_DMA_RX_EN_LEN) - 1) << USB_EP5_DMA_RX_EN_POS))\n#define USB_EP5_TX_FIFO_CLR            USB_EP5_TX_FIFO_CLR\n#define USB_EP5_TX_FIFO_CLR_POS        (2U)\n#define USB_EP5_TX_FIFO_CLR_LEN        (1U)\n#define USB_EP5_TX_FIFO_CLR_MSK        (((1U << USB_EP5_TX_FIFO_CLR_LEN) - 1) << USB_EP5_TX_FIFO_CLR_POS)\n#define USB_EP5_TX_FIFO_CLR_UMSK       (~(((1U << USB_EP5_TX_FIFO_CLR_LEN) - 1) << USB_EP5_TX_FIFO_CLR_POS))\n#define USB_EP5_RX_FIFO_CLR            USB_EP5_RX_FIFO_CLR\n#define USB_EP5_RX_FIFO_CLR_POS        (3U)\n#define USB_EP5_RX_FIFO_CLR_LEN        (1U)\n#define USB_EP5_RX_FIFO_CLR_MSK        (((1U << USB_EP5_RX_FIFO_CLR_LEN) - 1) << USB_EP5_RX_FIFO_CLR_POS)\n#define USB_EP5_RX_FIFO_CLR_UMSK       (~(((1U << USB_EP5_RX_FIFO_CLR_LEN) - 1) << USB_EP5_RX_FIFO_CLR_POS))\n#define USB_EP5_TX_FIFO_OVERFLOW       USB_EP5_TX_FIFO_OVERFLOW\n#define USB_EP5_TX_FIFO_OVERFLOW_POS   (4U)\n#define USB_EP5_TX_FIFO_OVERFLOW_LEN   (1U)\n#define USB_EP5_TX_FIFO_OVERFLOW_MSK   (((1U << USB_EP5_TX_FIFO_OVERFLOW_LEN) - 1) << USB_EP5_TX_FIFO_OVERFLOW_POS)\n#define USB_EP5_TX_FIFO_OVERFLOW_UMSK  (~(((1U << USB_EP5_TX_FIFO_OVERFLOW_LEN) - 1) << USB_EP5_TX_FIFO_OVERFLOW_POS))\n#define USB_EP5_TX_FIFO_UNDERFLOW      USB_EP5_TX_FIFO_UNDERFLOW\n#define USB_EP5_TX_FIFO_UNDERFLOW_POS  (5U)\n#define USB_EP5_TX_FIFO_UNDERFLOW_LEN  (1U)\n#define USB_EP5_TX_FIFO_UNDERFLOW_MSK  (((1U << USB_EP5_TX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP5_TX_FIFO_UNDERFLOW_POS)\n#define USB_EP5_TX_FIFO_UNDERFLOW_UMSK (~(((1U << USB_EP5_TX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP5_TX_FIFO_UNDERFLOW_POS))\n#define USB_EP5_RX_FIFO_OVERFLOW       USB_EP5_RX_FIFO_OVERFLOW\n#define USB_EP5_RX_FIFO_OVERFLOW_POS   (6U)\n#define USB_EP5_RX_FIFO_OVERFLOW_LEN   (1U)\n#define USB_EP5_RX_FIFO_OVERFLOW_MSK   (((1U << USB_EP5_RX_FIFO_OVERFLOW_LEN) - 1) << USB_EP5_RX_FIFO_OVERFLOW_POS)\n#define USB_EP5_RX_FIFO_OVERFLOW_UMSK  (~(((1U << USB_EP5_RX_FIFO_OVERFLOW_LEN) - 1) << USB_EP5_RX_FIFO_OVERFLOW_POS))\n#define USB_EP5_RX_FIFO_UNDERFLOW      USB_EP5_RX_FIFO_UNDERFLOW\n#define USB_EP5_RX_FIFO_UNDERFLOW_POS  (7U)\n#define USB_EP5_RX_FIFO_UNDERFLOW_LEN  (1U)\n#define USB_EP5_RX_FIFO_UNDERFLOW_MSK  (((1U << USB_EP5_RX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP5_RX_FIFO_UNDERFLOW_POS)\n#define USB_EP5_RX_FIFO_UNDERFLOW_UMSK (~(((1U << USB_EP5_RX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP5_RX_FIFO_UNDERFLOW_POS))\n\n/* 0x154 : ep5_fifo_status */\n#define USB_EP5_FIFO_STATUS_OFFSET (0x154)\n#define USB_EP5_TX_FIFO_CNT        USB_EP5_TX_FIFO_CNT\n#define USB_EP5_TX_FIFO_CNT_POS    (0U)\n#define USB_EP5_TX_FIFO_CNT_LEN    (7U)\n#define USB_EP5_TX_FIFO_CNT_MSK    (((1U << USB_EP5_TX_FIFO_CNT_LEN) - 1) << USB_EP5_TX_FIFO_CNT_POS)\n#define USB_EP5_TX_FIFO_CNT_UMSK   (~(((1U << USB_EP5_TX_FIFO_CNT_LEN) - 1) << USB_EP5_TX_FIFO_CNT_POS))\n#define USB_EP5_TX_FIFO_EMPTY      USB_EP5_TX_FIFO_EMPTY\n#define USB_EP5_TX_FIFO_EMPTY_POS  (14U)\n#define USB_EP5_TX_FIFO_EMPTY_LEN  (1U)\n#define USB_EP5_TX_FIFO_EMPTY_MSK  (((1U << USB_EP5_TX_FIFO_EMPTY_LEN) - 1) << USB_EP5_TX_FIFO_EMPTY_POS)\n#define USB_EP5_TX_FIFO_EMPTY_UMSK (~(((1U << USB_EP5_TX_FIFO_EMPTY_LEN) - 1) << USB_EP5_TX_FIFO_EMPTY_POS))\n#define USB_EP5_TX_FIFO_FULL       USB_EP5_TX_FIFO_FULL\n#define USB_EP5_TX_FIFO_FULL_POS   (15U)\n#define USB_EP5_TX_FIFO_FULL_LEN   (1U)\n#define USB_EP5_TX_FIFO_FULL_MSK   (((1U << USB_EP5_TX_FIFO_FULL_LEN) - 1) << USB_EP5_TX_FIFO_FULL_POS)\n#define USB_EP5_TX_FIFO_FULL_UMSK  (~(((1U << USB_EP5_TX_FIFO_FULL_LEN) - 1) << USB_EP5_TX_FIFO_FULL_POS))\n#define USB_EP5_RX_FIFO_CNT        USB_EP5_RX_FIFO_CNT\n#define USB_EP5_RX_FIFO_CNT_POS    (16U)\n#define USB_EP5_RX_FIFO_CNT_LEN    (7U)\n#define USB_EP5_RX_FIFO_CNT_MSK    (((1U << USB_EP5_RX_FIFO_CNT_LEN) - 1) << USB_EP5_RX_FIFO_CNT_POS)\n#define USB_EP5_RX_FIFO_CNT_UMSK   (~(((1U << USB_EP5_RX_FIFO_CNT_LEN) - 1) << USB_EP5_RX_FIFO_CNT_POS))\n#define USB_EP5_RX_FIFO_EMPTY      USB_EP5_RX_FIFO_EMPTY\n#define USB_EP5_RX_FIFO_EMPTY_POS  (30U)\n#define USB_EP5_RX_FIFO_EMPTY_LEN  (1U)\n#define USB_EP5_RX_FIFO_EMPTY_MSK  (((1U << USB_EP5_RX_FIFO_EMPTY_LEN) - 1) << USB_EP5_RX_FIFO_EMPTY_POS)\n#define USB_EP5_RX_FIFO_EMPTY_UMSK (~(((1U << USB_EP5_RX_FIFO_EMPTY_LEN) - 1) << USB_EP5_RX_FIFO_EMPTY_POS))\n#define USB_EP5_RX_FIFO_FULL       USB_EP5_RX_FIFO_FULL\n#define USB_EP5_RX_FIFO_FULL_POS   (31U)\n#define USB_EP5_RX_FIFO_FULL_LEN   (1U)\n#define USB_EP5_RX_FIFO_FULL_MSK   (((1U << USB_EP5_RX_FIFO_FULL_LEN) - 1) << USB_EP5_RX_FIFO_FULL_POS)\n#define USB_EP5_RX_FIFO_FULL_UMSK  (~(((1U << USB_EP5_RX_FIFO_FULL_LEN) - 1) << USB_EP5_RX_FIFO_FULL_POS))\n\n/* 0x158 : ep5_tx_fifo_wdata */\n#define USB_EP5_TX_FIFO_WDATA_OFFSET (0x158)\n#define USB_EP5_TX_FIFO_WDATA        USB_EP5_TX_FIFO_WDATA\n#define USB_EP5_TX_FIFO_WDATA_POS    (0U)\n#define USB_EP5_TX_FIFO_WDATA_LEN    (8U)\n#define USB_EP5_TX_FIFO_WDATA_MSK    (((1U << USB_EP5_TX_FIFO_WDATA_LEN) - 1) << USB_EP5_TX_FIFO_WDATA_POS)\n#define USB_EP5_TX_FIFO_WDATA_UMSK   (~(((1U << USB_EP5_TX_FIFO_WDATA_LEN) - 1) << USB_EP5_TX_FIFO_WDATA_POS))\n\n/* 0x15C : ep5_rx_fifo_rdata */\n#define USB_EP5_RX_FIFO_RDATA_OFFSET (0x15C)\n#define USB_EP5_RX_FIFO_RDATA        USB_EP5_RX_FIFO_RDATA\n#define USB_EP5_RX_FIFO_RDATA_POS    (0U)\n#define USB_EP5_RX_FIFO_RDATA_LEN    (8U)\n#define USB_EP5_RX_FIFO_RDATA_MSK    (((1U << USB_EP5_RX_FIFO_RDATA_LEN) - 1) << USB_EP5_RX_FIFO_RDATA_POS)\n#define USB_EP5_RX_FIFO_RDATA_UMSK   (~(((1U << USB_EP5_RX_FIFO_RDATA_LEN) - 1) << USB_EP5_RX_FIFO_RDATA_POS))\n\n/* 0x160 : ep6_fifo_config */\n#define USB_EP6_FIFO_CONFIG_OFFSET     (0x160)\n#define USB_EP6_DMA_TX_EN              USB_EP6_DMA_TX_EN\n#define USB_EP6_DMA_TX_EN_POS          (0U)\n#define USB_EP6_DMA_TX_EN_LEN          (1U)\n#define USB_EP6_DMA_TX_EN_MSK          (((1U << USB_EP6_DMA_TX_EN_LEN) - 1) << USB_EP6_DMA_TX_EN_POS)\n#define USB_EP6_DMA_TX_EN_UMSK         (~(((1U << USB_EP6_DMA_TX_EN_LEN) - 1) << USB_EP6_DMA_TX_EN_POS))\n#define USB_EP6_DMA_RX_EN              USB_EP6_DMA_RX_EN\n#define USB_EP6_DMA_RX_EN_POS          (1U)\n#define USB_EP6_DMA_RX_EN_LEN          (1U)\n#define USB_EP6_DMA_RX_EN_MSK          (((1U << USB_EP6_DMA_RX_EN_LEN) - 1) << USB_EP6_DMA_RX_EN_POS)\n#define USB_EP6_DMA_RX_EN_UMSK         (~(((1U << USB_EP6_DMA_RX_EN_LEN) - 1) << USB_EP6_DMA_RX_EN_POS))\n#define USB_EP6_TX_FIFO_CLR            USB_EP6_TX_FIFO_CLR\n#define USB_EP6_TX_FIFO_CLR_POS        (2U)\n#define USB_EP6_TX_FIFO_CLR_LEN        (1U)\n#define USB_EP6_TX_FIFO_CLR_MSK        (((1U << USB_EP6_TX_FIFO_CLR_LEN) - 1) << USB_EP6_TX_FIFO_CLR_POS)\n#define USB_EP6_TX_FIFO_CLR_UMSK       (~(((1U << USB_EP6_TX_FIFO_CLR_LEN) - 1) << USB_EP6_TX_FIFO_CLR_POS))\n#define USB_EP6_RX_FIFO_CLR            USB_EP6_RX_FIFO_CLR\n#define USB_EP6_RX_FIFO_CLR_POS        (3U)\n#define USB_EP6_RX_FIFO_CLR_LEN        (1U)\n#define USB_EP6_RX_FIFO_CLR_MSK        (((1U << USB_EP6_RX_FIFO_CLR_LEN) - 1) << USB_EP6_RX_FIFO_CLR_POS)\n#define USB_EP6_RX_FIFO_CLR_UMSK       (~(((1U << USB_EP6_RX_FIFO_CLR_LEN) - 1) << USB_EP6_RX_FIFO_CLR_POS))\n#define USB_EP6_TX_FIFO_OVERFLOW       USB_EP6_TX_FIFO_OVERFLOW\n#define USB_EP6_TX_FIFO_OVERFLOW_POS   (4U)\n#define USB_EP6_TX_FIFO_OVERFLOW_LEN   (1U)\n#define USB_EP6_TX_FIFO_OVERFLOW_MSK   (((1U << USB_EP6_TX_FIFO_OVERFLOW_LEN) - 1) << USB_EP6_TX_FIFO_OVERFLOW_POS)\n#define USB_EP6_TX_FIFO_OVERFLOW_UMSK  (~(((1U << USB_EP6_TX_FIFO_OVERFLOW_LEN) - 1) << USB_EP6_TX_FIFO_OVERFLOW_POS))\n#define USB_EP6_TX_FIFO_UNDERFLOW      USB_EP6_TX_FIFO_UNDERFLOW\n#define USB_EP6_TX_FIFO_UNDERFLOW_POS  (5U)\n#define USB_EP6_TX_FIFO_UNDERFLOW_LEN  (1U)\n#define USB_EP6_TX_FIFO_UNDERFLOW_MSK  (((1U << USB_EP6_TX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP6_TX_FIFO_UNDERFLOW_POS)\n#define USB_EP6_TX_FIFO_UNDERFLOW_UMSK (~(((1U << USB_EP6_TX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP6_TX_FIFO_UNDERFLOW_POS))\n#define USB_EP6_RX_FIFO_OVERFLOW       USB_EP6_RX_FIFO_OVERFLOW\n#define USB_EP6_RX_FIFO_OVERFLOW_POS   (6U)\n#define USB_EP6_RX_FIFO_OVERFLOW_LEN   (1U)\n#define USB_EP6_RX_FIFO_OVERFLOW_MSK   (((1U << USB_EP6_RX_FIFO_OVERFLOW_LEN) - 1) << USB_EP6_RX_FIFO_OVERFLOW_POS)\n#define USB_EP6_RX_FIFO_OVERFLOW_UMSK  (~(((1U << USB_EP6_RX_FIFO_OVERFLOW_LEN) - 1) << USB_EP6_RX_FIFO_OVERFLOW_POS))\n#define USB_EP6_RX_FIFO_UNDERFLOW      USB_EP6_RX_FIFO_UNDERFLOW\n#define USB_EP6_RX_FIFO_UNDERFLOW_POS  (7U)\n#define USB_EP6_RX_FIFO_UNDERFLOW_LEN  (1U)\n#define USB_EP6_RX_FIFO_UNDERFLOW_MSK  (((1U << USB_EP6_RX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP6_RX_FIFO_UNDERFLOW_POS)\n#define USB_EP6_RX_FIFO_UNDERFLOW_UMSK (~(((1U << USB_EP6_RX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP6_RX_FIFO_UNDERFLOW_POS))\n\n/* 0x164 : ep6_fifo_status */\n#define USB_EP6_FIFO_STATUS_OFFSET (0x164)\n#define USB_EP6_TX_FIFO_CNT        USB_EP6_TX_FIFO_CNT\n#define USB_EP6_TX_FIFO_CNT_POS    (0U)\n#define USB_EP6_TX_FIFO_CNT_LEN    (7U)\n#define USB_EP6_TX_FIFO_CNT_MSK    (((1U << USB_EP6_TX_FIFO_CNT_LEN) - 1) << USB_EP6_TX_FIFO_CNT_POS)\n#define USB_EP6_TX_FIFO_CNT_UMSK   (~(((1U << USB_EP6_TX_FIFO_CNT_LEN) - 1) << USB_EP6_TX_FIFO_CNT_POS))\n#define USB_EP6_TX_FIFO_EMPTY      USB_EP6_TX_FIFO_EMPTY\n#define USB_EP6_TX_FIFO_EMPTY_POS  (14U)\n#define USB_EP6_TX_FIFO_EMPTY_LEN  (1U)\n#define USB_EP6_TX_FIFO_EMPTY_MSK  (((1U << USB_EP6_TX_FIFO_EMPTY_LEN) - 1) << USB_EP6_TX_FIFO_EMPTY_POS)\n#define USB_EP6_TX_FIFO_EMPTY_UMSK (~(((1U << USB_EP6_TX_FIFO_EMPTY_LEN) - 1) << USB_EP6_TX_FIFO_EMPTY_POS))\n#define USB_EP6_TX_FIFO_FULL       USB_EP6_TX_FIFO_FULL\n#define USB_EP6_TX_FIFO_FULL_POS   (15U)\n#define USB_EP6_TX_FIFO_FULL_LEN   (1U)\n#define USB_EP6_TX_FIFO_FULL_MSK   (((1U << USB_EP6_TX_FIFO_FULL_LEN) - 1) << USB_EP6_TX_FIFO_FULL_POS)\n#define USB_EP6_TX_FIFO_FULL_UMSK  (~(((1U << USB_EP6_TX_FIFO_FULL_LEN) - 1) << USB_EP6_TX_FIFO_FULL_POS))\n#define USB_EP6_RX_FIFO_CNT        USB_EP6_RX_FIFO_CNT\n#define USB_EP6_RX_FIFO_CNT_POS    (16U)\n#define USB_EP6_RX_FIFO_CNT_LEN    (7U)\n#define USB_EP6_RX_FIFO_CNT_MSK    (((1U << USB_EP6_RX_FIFO_CNT_LEN) - 1) << USB_EP6_RX_FIFO_CNT_POS)\n#define USB_EP6_RX_FIFO_CNT_UMSK   (~(((1U << USB_EP6_RX_FIFO_CNT_LEN) - 1) << USB_EP6_RX_FIFO_CNT_POS))\n#define USB_EP6_RX_FIFO_EMPTY      USB_EP6_RX_FIFO_EMPTY\n#define USB_EP6_RX_FIFO_EMPTY_POS  (30U)\n#define USB_EP6_RX_FIFO_EMPTY_LEN  (1U)\n#define USB_EP6_RX_FIFO_EMPTY_MSK  (((1U << USB_EP6_RX_FIFO_EMPTY_LEN) - 1) << USB_EP6_RX_FIFO_EMPTY_POS)\n#define USB_EP6_RX_FIFO_EMPTY_UMSK (~(((1U << USB_EP6_RX_FIFO_EMPTY_LEN) - 1) << USB_EP6_RX_FIFO_EMPTY_POS))\n#define USB_EP6_RX_FIFO_FULL       USB_EP6_RX_FIFO_FULL\n#define USB_EP6_RX_FIFO_FULL_POS   (31U)\n#define USB_EP6_RX_FIFO_FULL_LEN   (1U)\n#define USB_EP6_RX_FIFO_FULL_MSK   (((1U << USB_EP6_RX_FIFO_FULL_LEN) - 1) << USB_EP6_RX_FIFO_FULL_POS)\n#define USB_EP6_RX_FIFO_FULL_UMSK  (~(((1U << USB_EP6_RX_FIFO_FULL_LEN) - 1) << USB_EP6_RX_FIFO_FULL_POS))\n\n/* 0x168 : ep6_tx_fifo_wdata */\n#define USB_EP6_TX_FIFO_WDATA_OFFSET (0x168)\n#define USB_EP6_TX_FIFO_WDATA        USB_EP6_TX_FIFO_WDATA\n#define USB_EP6_TX_FIFO_WDATA_POS    (0U)\n#define USB_EP6_TX_FIFO_WDATA_LEN    (8U)\n#define USB_EP6_TX_FIFO_WDATA_MSK    (((1U << USB_EP6_TX_FIFO_WDATA_LEN) - 1) << USB_EP6_TX_FIFO_WDATA_POS)\n#define USB_EP6_TX_FIFO_WDATA_UMSK   (~(((1U << USB_EP6_TX_FIFO_WDATA_LEN) - 1) << USB_EP6_TX_FIFO_WDATA_POS))\n\n/* 0x16C : ep6_rx_fifo_rdata */\n#define USB_EP6_RX_FIFO_RDATA_OFFSET (0x16C)\n#define USB_EP6_RX_FIFO_RDATA        USB_EP6_RX_FIFO_RDATA\n#define USB_EP6_RX_FIFO_RDATA_POS    (0U)\n#define USB_EP6_RX_FIFO_RDATA_LEN    (8U)\n#define USB_EP6_RX_FIFO_RDATA_MSK    (((1U << USB_EP6_RX_FIFO_RDATA_LEN) - 1) << USB_EP6_RX_FIFO_RDATA_POS)\n#define USB_EP6_RX_FIFO_RDATA_UMSK   (~(((1U << USB_EP6_RX_FIFO_RDATA_LEN) - 1) << USB_EP6_RX_FIFO_RDATA_POS))\n\n/* 0x170 : ep7_fifo_config */\n#define USB_EP7_FIFO_CONFIG_OFFSET     (0x170)\n#define USB_EP7_DMA_TX_EN              USB_EP7_DMA_TX_EN\n#define USB_EP7_DMA_TX_EN_POS          (0U)\n#define USB_EP7_DMA_TX_EN_LEN          (1U)\n#define USB_EP7_DMA_TX_EN_MSK          (((1U << USB_EP7_DMA_TX_EN_LEN) - 1) << USB_EP7_DMA_TX_EN_POS)\n#define USB_EP7_DMA_TX_EN_UMSK         (~(((1U << USB_EP7_DMA_TX_EN_LEN) - 1) << USB_EP7_DMA_TX_EN_POS))\n#define USB_EP7_DMA_RX_EN              USB_EP7_DMA_RX_EN\n#define USB_EP7_DMA_RX_EN_POS          (1U)\n#define USB_EP7_DMA_RX_EN_LEN          (1U)\n#define USB_EP7_DMA_RX_EN_MSK          (((1U << USB_EP7_DMA_RX_EN_LEN) - 1) << USB_EP7_DMA_RX_EN_POS)\n#define USB_EP7_DMA_RX_EN_UMSK         (~(((1U << USB_EP7_DMA_RX_EN_LEN) - 1) << USB_EP7_DMA_RX_EN_POS))\n#define USB_EP7_TX_FIFO_CLR            USB_EP7_TX_FIFO_CLR\n#define USB_EP7_TX_FIFO_CLR_POS        (2U)\n#define USB_EP7_TX_FIFO_CLR_LEN        (1U)\n#define USB_EP7_TX_FIFO_CLR_MSK        (((1U << USB_EP7_TX_FIFO_CLR_LEN) - 1) << USB_EP7_TX_FIFO_CLR_POS)\n#define USB_EP7_TX_FIFO_CLR_UMSK       (~(((1U << USB_EP7_TX_FIFO_CLR_LEN) - 1) << USB_EP7_TX_FIFO_CLR_POS))\n#define USB_EP7_RX_FIFO_CLR            USB_EP7_RX_FIFO_CLR\n#define USB_EP7_RX_FIFO_CLR_POS        (3U)\n#define USB_EP7_RX_FIFO_CLR_LEN        (1U)\n#define USB_EP7_RX_FIFO_CLR_MSK        (((1U << USB_EP7_RX_FIFO_CLR_LEN) - 1) << USB_EP7_RX_FIFO_CLR_POS)\n#define USB_EP7_RX_FIFO_CLR_UMSK       (~(((1U << USB_EP7_RX_FIFO_CLR_LEN) - 1) << USB_EP7_RX_FIFO_CLR_POS))\n#define USB_EP7_TX_FIFO_OVERFLOW       USB_EP7_TX_FIFO_OVERFLOW\n#define USB_EP7_TX_FIFO_OVERFLOW_POS   (4U)\n#define USB_EP7_TX_FIFO_OVERFLOW_LEN   (1U)\n#define USB_EP7_TX_FIFO_OVERFLOW_MSK   (((1U << USB_EP7_TX_FIFO_OVERFLOW_LEN) - 1) << USB_EP7_TX_FIFO_OVERFLOW_POS)\n#define USB_EP7_TX_FIFO_OVERFLOW_UMSK  (~(((1U << USB_EP7_TX_FIFO_OVERFLOW_LEN) - 1) << USB_EP7_TX_FIFO_OVERFLOW_POS))\n#define USB_EP7_TX_FIFO_UNDERFLOW      USB_EP7_TX_FIFO_UNDERFLOW\n#define USB_EP7_TX_FIFO_UNDERFLOW_POS  (5U)\n#define USB_EP7_TX_FIFO_UNDERFLOW_LEN  (1U)\n#define USB_EP7_TX_FIFO_UNDERFLOW_MSK  (((1U << USB_EP7_TX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP7_TX_FIFO_UNDERFLOW_POS)\n#define USB_EP7_TX_FIFO_UNDERFLOW_UMSK (~(((1U << USB_EP7_TX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP7_TX_FIFO_UNDERFLOW_POS))\n#define USB_EP7_RX_FIFO_OVERFLOW       USB_EP7_RX_FIFO_OVERFLOW\n#define USB_EP7_RX_FIFO_OVERFLOW_POS   (6U)\n#define USB_EP7_RX_FIFO_OVERFLOW_LEN   (1U)\n#define USB_EP7_RX_FIFO_OVERFLOW_MSK   (((1U << USB_EP7_RX_FIFO_OVERFLOW_LEN) - 1) << USB_EP7_RX_FIFO_OVERFLOW_POS)\n#define USB_EP7_RX_FIFO_OVERFLOW_UMSK  (~(((1U << USB_EP7_RX_FIFO_OVERFLOW_LEN) - 1) << USB_EP7_RX_FIFO_OVERFLOW_POS))\n#define USB_EP7_RX_FIFO_UNDERFLOW      USB_EP7_RX_FIFO_UNDERFLOW\n#define USB_EP7_RX_FIFO_UNDERFLOW_POS  (7U)\n#define USB_EP7_RX_FIFO_UNDERFLOW_LEN  (1U)\n#define USB_EP7_RX_FIFO_UNDERFLOW_MSK  (((1U << USB_EP7_RX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP7_RX_FIFO_UNDERFLOW_POS)\n#define USB_EP7_RX_FIFO_UNDERFLOW_UMSK (~(((1U << USB_EP7_RX_FIFO_UNDERFLOW_LEN) - 1) << USB_EP7_RX_FIFO_UNDERFLOW_POS))\n\n/* 0x174 : ep7_fifo_status */\n#define USB_EP7_FIFO_STATUS_OFFSET (0x174)\n#define USB_EP7_TX_FIFO_CNT        USB_EP7_TX_FIFO_CNT\n#define USB_EP7_TX_FIFO_CNT_POS    (0U)\n#define USB_EP7_TX_FIFO_CNT_LEN    (7U)\n#define USB_EP7_TX_FIFO_CNT_MSK    (((1U << USB_EP7_TX_FIFO_CNT_LEN) - 1) << USB_EP7_TX_FIFO_CNT_POS)\n#define USB_EP7_TX_FIFO_CNT_UMSK   (~(((1U << USB_EP7_TX_FIFO_CNT_LEN) - 1) << USB_EP7_TX_FIFO_CNT_POS))\n#define USB_EP7_TX_FIFO_EMPTY      USB_EP7_TX_FIFO_EMPTY\n#define USB_EP7_TX_FIFO_EMPTY_POS  (14U)\n#define USB_EP7_TX_FIFO_EMPTY_LEN  (1U)\n#define USB_EP7_TX_FIFO_EMPTY_MSK  (((1U << USB_EP7_TX_FIFO_EMPTY_LEN) - 1) << USB_EP7_TX_FIFO_EMPTY_POS)\n#define USB_EP7_TX_FIFO_EMPTY_UMSK (~(((1U << USB_EP7_TX_FIFO_EMPTY_LEN) - 1) << USB_EP7_TX_FIFO_EMPTY_POS))\n#define USB_EP7_TX_FIFO_FULL       USB_EP7_TX_FIFO_FULL\n#define USB_EP7_TX_FIFO_FULL_POS   (15U)\n#define USB_EP7_TX_FIFO_FULL_LEN   (1U)\n#define USB_EP7_TX_FIFO_FULL_MSK   (((1U << USB_EP7_TX_FIFO_FULL_LEN) - 1) << USB_EP7_TX_FIFO_FULL_POS)\n#define USB_EP7_TX_FIFO_FULL_UMSK  (~(((1U << USB_EP7_TX_FIFO_FULL_LEN) - 1) << USB_EP7_TX_FIFO_FULL_POS))\n#define USB_EP7_RX_FIFO_CNT        USB_EP7_RX_FIFO_CNT\n#define USB_EP7_RX_FIFO_CNT_POS    (16U)\n#define USB_EP7_RX_FIFO_CNT_LEN    (7U)\n#define USB_EP7_RX_FIFO_CNT_MSK    (((1U << USB_EP7_RX_FIFO_CNT_LEN) - 1) << USB_EP7_RX_FIFO_CNT_POS)\n#define USB_EP7_RX_FIFO_CNT_UMSK   (~(((1U << USB_EP7_RX_FIFO_CNT_LEN) - 1) << USB_EP7_RX_FIFO_CNT_POS))\n#define USB_EP7_RX_FIFO_EMPTY      USB_EP7_RX_FIFO_EMPTY\n#define USB_EP7_RX_FIFO_EMPTY_POS  (30U)\n#define USB_EP7_RX_FIFO_EMPTY_LEN  (1U)\n#define USB_EP7_RX_FIFO_EMPTY_MSK  (((1U << USB_EP7_RX_FIFO_EMPTY_LEN) - 1) << USB_EP7_RX_FIFO_EMPTY_POS)\n#define USB_EP7_RX_FIFO_EMPTY_UMSK (~(((1U << USB_EP7_RX_FIFO_EMPTY_LEN) - 1) << USB_EP7_RX_FIFO_EMPTY_POS))\n#define USB_EP7_RX_FIFO_FULL       USB_EP7_RX_FIFO_FULL\n#define USB_EP7_RX_FIFO_FULL_POS   (31U)\n#define USB_EP7_RX_FIFO_FULL_LEN   (1U)\n#define USB_EP7_RX_FIFO_FULL_MSK   (((1U << USB_EP7_RX_FIFO_FULL_LEN) - 1) << USB_EP7_RX_FIFO_FULL_POS)\n#define USB_EP7_RX_FIFO_FULL_UMSK  (~(((1U << USB_EP7_RX_FIFO_FULL_LEN) - 1) << USB_EP7_RX_FIFO_FULL_POS))\n\n/* 0x178 : ep7_tx_fifo_wdata */\n#define USB_EP7_TX_FIFO_WDATA_OFFSET (0x178)\n#define USB_EP7_TX_FIFO_WDATA        USB_EP7_TX_FIFO_WDATA\n#define USB_EP7_TX_FIFO_WDATA_POS    (0U)\n#define USB_EP7_TX_FIFO_WDATA_LEN    (8U)\n#define USB_EP7_TX_FIFO_WDATA_MSK    (((1U << USB_EP7_TX_FIFO_WDATA_LEN) - 1) << USB_EP7_TX_FIFO_WDATA_POS)\n#define USB_EP7_TX_FIFO_WDATA_UMSK   (~(((1U << USB_EP7_TX_FIFO_WDATA_LEN) - 1) << USB_EP7_TX_FIFO_WDATA_POS))\n\n/* 0x17C : ep7_rx_fifo_rdata */\n#define USB_EP7_RX_FIFO_RDATA_OFFSET (0x17C)\n#define USB_EP7_RX_FIFO_RDATA        USB_EP7_RX_FIFO_RDATA\n#define USB_EP7_RX_FIFO_RDATA_POS    (0U)\n#define USB_EP7_RX_FIFO_RDATA_LEN    (8U)\n#define USB_EP7_RX_FIFO_RDATA_MSK    (((1U << USB_EP7_RX_FIFO_RDATA_LEN) - 1) << USB_EP7_RX_FIFO_RDATA_POS)\n#define USB_EP7_RX_FIFO_RDATA_UMSK   (~(((1U << USB_EP7_RX_FIFO_RDATA_LEN) - 1) << USB_EP7_RX_FIFO_RDATA_POS))\n\n/* 0x1F0 : rsvd_0 */\n#define USB_RSVD_0_OFFSET (0x1F0)\n\n/* 0x1F4 : rsvd_1 */\n#define USB_RSVD_1_OFFSET (0x1F4)\n\n/* 0x1FC : xcvr_if_config */\n#define USB_XCVR_IF_CONFIG_OFFSET    (0x1FC)\n#define USB_CR_XCVR_FORCE_TX_EN      USB_CR_XCVR_FORCE_TX_EN\n#define USB_CR_XCVR_FORCE_TX_EN_POS  (0U)\n#define USB_CR_XCVR_FORCE_TX_EN_LEN  (1U)\n#define USB_CR_XCVR_FORCE_TX_EN_MSK  (((1U << USB_CR_XCVR_FORCE_TX_EN_LEN) - 1) << USB_CR_XCVR_FORCE_TX_EN_POS)\n#define USB_CR_XCVR_FORCE_TX_EN_UMSK (~(((1U << USB_CR_XCVR_FORCE_TX_EN_LEN) - 1) << USB_CR_XCVR_FORCE_TX_EN_POS))\n#define USB_CR_XCVR_FORCE_TX_OE      USB_CR_XCVR_FORCE_TX_OE\n#define USB_CR_XCVR_FORCE_TX_OE_POS  (1U)\n#define USB_CR_XCVR_FORCE_TX_OE_LEN  (1U)\n#define USB_CR_XCVR_FORCE_TX_OE_MSK  (((1U << USB_CR_XCVR_FORCE_TX_OE_LEN) - 1) << USB_CR_XCVR_FORCE_TX_OE_POS)\n#define USB_CR_XCVR_FORCE_TX_OE_UMSK (~(((1U << USB_CR_XCVR_FORCE_TX_OE_LEN) - 1) << USB_CR_XCVR_FORCE_TX_OE_POS))\n#define USB_CR_XCVR_FORCE_TX_DP      USB_CR_XCVR_FORCE_TX_DP\n#define USB_CR_XCVR_FORCE_TX_DP_POS  (2U)\n#define USB_CR_XCVR_FORCE_TX_DP_LEN  (1U)\n#define USB_CR_XCVR_FORCE_TX_DP_MSK  (((1U << USB_CR_XCVR_FORCE_TX_DP_LEN) - 1) << USB_CR_XCVR_FORCE_TX_DP_POS)\n#define USB_CR_XCVR_FORCE_TX_DP_UMSK (~(((1U << USB_CR_XCVR_FORCE_TX_DP_LEN) - 1) << USB_CR_XCVR_FORCE_TX_DP_POS))\n#define USB_CR_XCVR_FORCE_TX_DN      USB_CR_XCVR_FORCE_TX_DN\n#define USB_CR_XCVR_FORCE_TX_DN_POS  (3U)\n#define USB_CR_XCVR_FORCE_TX_DN_LEN  (1U)\n#define USB_CR_XCVR_FORCE_TX_DN_MSK  (((1U << USB_CR_XCVR_FORCE_TX_DN_LEN) - 1) << USB_CR_XCVR_FORCE_TX_DN_POS)\n#define USB_CR_XCVR_FORCE_TX_DN_UMSK (~(((1U << USB_CR_XCVR_FORCE_TX_DN_LEN) - 1) << USB_CR_XCVR_FORCE_TX_DN_POS))\n#define USB_CR_XCVR_FORCE_RX_EN      USB_CR_XCVR_FORCE_RX_EN\n#define USB_CR_XCVR_FORCE_RX_EN_POS  (4U)\n#define USB_CR_XCVR_FORCE_RX_EN_LEN  (1U)\n#define USB_CR_XCVR_FORCE_RX_EN_MSK  (((1U << USB_CR_XCVR_FORCE_RX_EN_LEN) - 1) << USB_CR_XCVR_FORCE_RX_EN_POS)\n#define USB_CR_XCVR_FORCE_RX_EN_UMSK (~(((1U << USB_CR_XCVR_FORCE_RX_EN_LEN) - 1) << USB_CR_XCVR_FORCE_RX_EN_POS))\n#define USB_CR_XCVR_FORCE_RX_D       USB_CR_XCVR_FORCE_RX_D\n#define USB_CR_XCVR_FORCE_RX_D_POS   (5U)\n#define USB_CR_XCVR_FORCE_RX_D_LEN   (1U)\n#define USB_CR_XCVR_FORCE_RX_D_MSK   (((1U << USB_CR_XCVR_FORCE_RX_D_LEN) - 1) << USB_CR_XCVR_FORCE_RX_D_POS)\n#define USB_CR_XCVR_FORCE_RX_D_UMSK  (~(((1U << USB_CR_XCVR_FORCE_RX_D_LEN) - 1) << USB_CR_XCVR_FORCE_RX_D_POS))\n#define USB_CR_XCVR_FORCE_RX_DP      USB_CR_XCVR_FORCE_RX_DP\n#define USB_CR_XCVR_FORCE_RX_DP_POS  (6U)\n#define USB_CR_XCVR_FORCE_RX_DP_LEN  (1U)\n#define USB_CR_XCVR_FORCE_RX_DP_MSK  (((1U << USB_CR_XCVR_FORCE_RX_DP_LEN) - 1) << USB_CR_XCVR_FORCE_RX_DP_POS)\n#define USB_CR_XCVR_FORCE_RX_DP_UMSK (~(((1U << USB_CR_XCVR_FORCE_RX_DP_LEN) - 1) << USB_CR_XCVR_FORCE_RX_DP_POS))\n#define USB_CR_XCVR_FORCE_RX_DN      USB_CR_XCVR_FORCE_RX_DN\n#define USB_CR_XCVR_FORCE_RX_DN_POS  (7U)\n#define USB_CR_XCVR_FORCE_RX_DN_LEN  (1U)\n#define USB_CR_XCVR_FORCE_RX_DN_MSK  (((1U << USB_CR_XCVR_FORCE_RX_DN_LEN) - 1) << USB_CR_XCVR_FORCE_RX_DN_POS)\n#define USB_CR_XCVR_FORCE_RX_DN_UMSK (~(((1U << USB_CR_XCVR_FORCE_RX_DN_LEN) - 1) << USB_CR_XCVR_FORCE_RX_DN_POS))\n#define USB_CR_XCVR_OM_RX_SEL        USB_CR_XCVR_OM_RX_SEL\n#define USB_CR_XCVR_OM_RX_SEL_POS    (8U)\n#define USB_CR_XCVR_OM_RX_SEL_LEN    (1U)\n#define USB_CR_XCVR_OM_RX_SEL_MSK    (((1U << USB_CR_XCVR_OM_RX_SEL_LEN) - 1) << USB_CR_XCVR_OM_RX_SEL_POS)\n#define USB_CR_XCVR_OM_RX_SEL_UMSK   (~(((1U << USB_CR_XCVR_OM_RX_SEL_LEN) - 1) << USB_CR_XCVR_OM_RX_SEL_POS))\n#define USB_CR_XCVR_OM_RX_D          USB_CR_XCVR_OM_RX_D\n#define USB_CR_XCVR_OM_RX_D_POS      (9U)\n#define USB_CR_XCVR_OM_RX_D_LEN      (1U)\n#define USB_CR_XCVR_OM_RX_D_MSK      (((1U << USB_CR_XCVR_OM_RX_D_LEN) - 1) << USB_CR_XCVR_OM_RX_D_POS)\n#define USB_CR_XCVR_OM_RX_D_UMSK     (~(((1U << USB_CR_XCVR_OM_RX_D_LEN) - 1) << USB_CR_XCVR_OM_RX_D_POS))\n#define USB_CR_XCVR_OM_RX_DP         USB_CR_XCVR_OM_RX_DP\n#define USB_CR_XCVR_OM_RX_DP_POS     (10U)\n#define USB_CR_XCVR_OM_RX_DP_LEN     (1U)\n#define USB_CR_XCVR_OM_RX_DP_MSK     (((1U << USB_CR_XCVR_OM_RX_DP_LEN) - 1) << USB_CR_XCVR_OM_RX_DP_POS)\n#define USB_CR_XCVR_OM_RX_DP_UMSK    (~(((1U << USB_CR_XCVR_OM_RX_DP_LEN) - 1) << USB_CR_XCVR_OM_RX_DP_POS))\n#define USB_CR_XCVR_OM_RX_DN         USB_CR_XCVR_OM_RX_DN\n#define USB_CR_XCVR_OM_RX_DN_POS     (11U)\n#define USB_CR_XCVR_OM_RX_DN_LEN     (1U)\n#define USB_CR_XCVR_OM_RX_DN_MSK     (((1U << USB_CR_XCVR_OM_RX_DN_LEN) - 1) << USB_CR_XCVR_OM_RX_DN_POS)\n#define USB_CR_XCVR_OM_RX_DN_UMSK    (~(((1U << USB_CR_XCVR_OM_RX_DN_LEN) - 1) << USB_CR_XCVR_OM_RX_DN_POS))\n#define USB_STS_VBUS_DET             USB_STS_VBUS_DET\n#define USB_STS_VBUS_DET_POS         (31U)\n#define USB_STS_VBUS_DET_LEN         (1U)\n#define USB_STS_VBUS_DET_MSK         (((1U << USB_STS_VBUS_DET_LEN) - 1) << USB_STS_VBUS_DET_POS)\n#define USB_STS_VBUS_DET_UMSK        (~(((1U << USB_STS_VBUS_DET_LEN) - 1) << USB_STS_VBUS_DET_POS))\n\nstruct usb_reg {\n    /* 0x0 : usb_config */\n    union {\n        struct\n        {\n            uint32_t cr_usb_en              : 1; /* [    0],        r/w,        0x0 */\n            uint32_t reserved_1_3           : 3; /* [ 3: 1],       rsvd,        0x0 */\n            uint32_t cr_usb_rom_dct_en      : 1; /* [    4],        r/w,        0x1 */\n            uint32_t reserved_5_7           : 3; /* [ 7: 5],       rsvd,        0x0 */\n            uint32_t cr_usb_ep0_sw_ctrl     : 1; /* [    8],        r/w,        0x0 */\n            uint32_t cr_usb_ep0_sw_addr     : 7; /* [15: 9],        r/w,        0x0 */\n            uint32_t cr_usb_ep0_sw_size     : 8; /* [23:16],        r/w,        0x0 */\n            uint32_t cr_usb_ep0_sw_stall    : 1; /* [   24],        w1c,        0x0 */\n            uint32_t cr_usb_ep0_sw_nack_in  : 1; /* [   25],        r/w,        0x1 */\n            uint32_t cr_usb_ep0_sw_nack_out : 1; /* [   26],        r/w,        0x0 */\n            uint32_t cr_usb_ep0_sw_rdy      : 1; /* [   27],        w1c,        0x0 */\n            uint32_t sts_usb_ep0_sw_rdy     : 1; /* [   28],          r,        0x0 */\n            uint32_t reserved_29_31         : 3; /* [31:29],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } usb_config;\n\n    /* 0x4 : usb_lpm_config */\n    union {\n        struct\n        {\n            uint32_t cr_lpm_en       : 1;  /* [    0],        w1c,        0x0 */\n            uint32_t cr_lpm_resp_upd : 1;  /* [    1],        w1c,        0x0 */\n            uint32_t cr_lpm_resp     : 2;  /* [ 3: 2],        r/w,        0x2 */\n            uint32_t reserved_4_19   : 16; /* [19: 4],       rsvd,        0x0 */\n            uint32_t sts_lpm_attr    : 11; /* [30:20],          r,        0x0 */\n            uint32_t sts_lpm         : 1;  /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } usb_lpm_config;\n\n    /* 0x8 : usb_resume_config */\n    union {\n        struct\n        {\n            uint32_t cr_res_width   : 11; /* [10: 0],        r/w,       0x1a */\n            uint32_t reserved_11    : 1;  /* [   11],       rsvd,        0x0 */\n            uint32_t cr_res_trig    : 1;  /* [   12],        w1c,        0x0 */\n            uint32_t reserved_13_30 : 18; /* [30:13],       rsvd,        0x0 */\n            uint32_t cr_res_force   : 1;  /* [   31],        r/w,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } usb_resume_config;\n\n    /* 0xc  reserved */\n    uint8_t RESERVED0xc[4];\n\n    /* 0x10 : usb_setup_data_0 */\n    union {\n        struct\n        {\n            uint32_t sts_setup_data_b0 : 8; /* [ 7: 0],          r,        0x0 */\n            uint32_t sts_setup_data_b1 : 8; /* [15: 8],          r,        0x0 */\n            uint32_t sts_setup_data_b2 : 8; /* [23:16],          r,        0x0 */\n            uint32_t sts_setup_data_b3 : 8; /* [31:24],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } usb_setup_data_0;\n\n    /* 0x14 : usb_setup_data_1 */\n    union {\n        struct\n        {\n            uint32_t sts_setup_data_b4 : 8; /* [ 7: 0],          r,        0x0 */\n            uint32_t sts_setup_data_b5 : 8; /* [15: 8],          r,        0x0 */\n            uint32_t sts_setup_data_b6 : 8; /* [23:16],          r,        0x0 */\n            uint32_t sts_setup_data_b7 : 8; /* [31:24],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } usb_setup_data_1;\n\n    /* 0x18 : usb_frame_no */\n    union {\n        struct\n        {\n            uint32_t sts_frame_no   : 11; /* [10: 0],          r,        0x0 */\n            uint32_t reserved_11    : 1;  /* [   11],       rsvd,        0x0 */\n            uint32_t sts_pid        : 4;  /* [15:12],          r,        0x0 */\n            uint32_t sts_ep_no      : 4;  /* [19:16],          r,        0x0 */\n            uint32_t reserved_20_31 : 12; /* [31:20],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } usb_frame_no;\n\n    /* 0x1C : usb_error */\n    union {\n        struct\n        {\n            uint32_t utmi_rx_err   : 1;  /* [    0],          r,        0x0 */\n            uint32_t xfer_to_err   : 1;  /* [    1],          r,        0x0 */\n            uint32_t ivld_ep_err   : 1;  /* [    2],          r,        0x0 */\n            uint32_t pid_seq_err   : 1;  /* [    3],          r,        0x0 */\n            uint32_t pid_cks_err   : 1;  /* [    4],          r,        0x0 */\n            uint32_t crc5_err      : 1;  /* [    5],          r,        0x0 */\n            uint32_t crc16_err     : 1;  /* [    6],          r,        0x0 */\n            uint32_t reserved_7_31 : 25; /* [31: 7],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } usb_error;\n\n    /* 0x20 : USB interrupt enable */\n    union {\n        struct\n        {\n            uint32_t cr_sof_en            : 1; /* [    0],        r/w,        0x1 */\n            uint32_t cr_usb_reset_en      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t cr_vbus_tgl_en       : 1; /* [    2],        r/w,        0x1 */\n            uint32_t cr_get_dct_cmd_en    : 1; /* [    3],        r/w,        0x1 */\n            uint32_t cr_ep0_setup_cmd_en  : 1; /* [    4],        r/w,        0x1 */\n            uint32_t cr_ep0_setup_done_en : 1; /* [    5],        r/w,        0x1 */\n            uint32_t cr_ep0_in_cmd_en     : 1; /* [    6],        r/w,        0x1 */\n            uint32_t cr_ep0_in_done_en    : 1; /* [    7],        r/w,        0x1 */\n            uint32_t cr_ep0_out_cmd_en    : 1; /* [    8],        r/w,        0x1 */\n            uint32_t cr_ep0_out_done_en   : 1; /* [    9],        r/w,        0x1 */\n            uint32_t cr_ep1_cmd_en        : 1; /* [   10],        r/w,        0x1 */\n            uint32_t cr_ep1_done_en       : 1; /* [   11],        r/w,        0x1 */\n            uint32_t cr_ep2_cmd_en        : 1; /* [   12],        r/w,        0x1 */\n            uint32_t cr_ep2_done_en       : 1; /* [   13],        r/w,        0x1 */\n            uint32_t cr_ep3_cmd_en        : 1; /* [   14],        r/w,        0x1 */\n            uint32_t cr_ep3_done_en       : 1; /* [   15],        r/w,        0x1 */\n            uint32_t cr_ep4_cmd_en        : 1; /* [   16],        r/w,        0x1 */\n            uint32_t cr_ep4_done_en       : 1; /* [   17],        r/w,        0x1 */\n            uint32_t cr_ep5_cmd_en        : 1; /* [   18],        r/w,        0x1 */\n            uint32_t cr_ep5_done_en       : 1; /* [   19],        r/w,        0x1 */\n            uint32_t cr_ep6_cmd_en        : 1; /* [   20],        r/w,        0x1 */\n            uint32_t cr_ep6_done_en       : 1; /* [   21],        r/w,        0x1 */\n            uint32_t cr_ep7_cmd_en        : 1; /* [   22],        r/w,        0x1 */\n            uint32_t cr_ep7_done_en       : 1; /* [   23],        r/w,        0x1 */\n            uint32_t rsvd_26_24           : 3; /* [26:24],       rsvd,        0x0 */\n            uint32_t cr_usb_rend_en       : 1; /* [   27],        r/w,        0x0 */\n            uint32_t cr_lpm_wkup_en       : 1; /* [   28],        r/w,        0x0 */\n            uint32_t cr_lpm_pkt_en        : 1; /* [   29],        r/w,        0x0 */\n            uint32_t cr_sof_3ms_en        : 1; /* [   30],        r/w,        0x0 */\n            uint32_t cr_usb_err_en        : 1; /* [   31],        r/w,        0x1 */\n        } BF;\n        uint32_t WORD;\n    } usb_int_en;\n\n    /* 0x24 : USB interrupt status */\n    union {\n        struct\n        {\n            uint32_t sof_int            : 1; /* [    0],          r,        0x0 */\n            uint32_t usb_reset_int      : 1; /* [    1],          r,        0x0 */\n            uint32_t vbus_tgl_int       : 1; /* [    2],          r,        0x0 */\n            uint32_t get_dct_cmd_int    : 1; /* [    3],          r,        0x0 */\n            uint32_t ep0_setup_cmd_int  : 1; /* [    4],          r,        0x0 */\n            uint32_t ep0_setup_done_int : 1; /* [    5],          r,        0x0 */\n            uint32_t ep0_in_cmd_int     : 1; /* [    6],          r,        0x0 */\n            uint32_t ep0_in_done_int    : 1; /* [    7],          r,        0x0 */\n            uint32_t ep0_out_cmd_int    : 1; /* [    8],          r,        0x0 */\n            uint32_t ep0_out_done_int   : 1; /* [    9],          r,        0x0 */\n            uint32_t ep1_cmd_int        : 1; /* [   10],          r,        0x0 */\n            uint32_t ep1_done_int       : 1; /* [   11],          r,        0x0 */\n            uint32_t ep2_cmd_int        : 1; /* [   12],          r,        0x0 */\n            uint32_t ep2_done_int       : 1; /* [   13],          r,        0x0 */\n            uint32_t ep3_cmd_int        : 1; /* [   14],          r,        0x0 */\n            uint32_t ep3_done_int       : 1; /* [   15],          r,        0x0 */\n            uint32_t ep4_cmd_int        : 1; /* [   16],          r,        0x0 */\n            uint32_t ep4_done_int       : 1; /* [   17],          r,        0x0 */\n            uint32_t ep5_cmd_int        : 1; /* [   18],          r,        0x0 */\n            uint32_t ep5_done_int       : 1; /* [   19],          r,        0x0 */\n            uint32_t ep6_cmd_int        : 1; /* [   20],          r,        0x0 */\n            uint32_t ep6_done_int       : 1; /* [   21],          r,        0x0 */\n            uint32_t ep7_cmd_int        : 1; /* [   22],          r,        0x0 */\n            uint32_t ep7_done_int       : 1; /* [   23],          r,        0x0 */\n            uint32_t rsvd_26_24         : 3; /* [26:24],       rsvd,        0x0 */\n            uint32_t usb_rend_int       : 1; /* [   27],          r,        0x0 */\n            uint32_t lpm_wkup_int       : 1; /* [   28],          r,        0x0 */\n            uint32_t lpm_pkt_int        : 1; /* [   29],          r,        0x0 */\n            uint32_t sof_3ms_int        : 1; /* [   30],          r,        0x0 */\n            uint32_t usb_err_int        : 1; /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } usb_int_sts;\n\n    /* 0x28 : USB interrupt mask */\n    union {\n        struct\n        {\n            uint32_t cr_sof_mask            : 1; /* [    0],        r/w,        0x1 */\n            uint32_t cr_usb_reset_mask      : 1; /* [    1],        r/w,        0x1 */\n            uint32_t cr_vbus_tgl_mask       : 1; /* [    2],        r/w,        0x1 */\n            uint32_t cr_get_dct_cmd_mask    : 1; /* [    3],        r/w,        0x1 */\n            uint32_t cr_ep0_setup_cmd_mask  : 1; /* [    4],        r/w,        0x1 */\n            uint32_t cr_ep0_setup_done_mask : 1; /* [    5],        r/w,        0x1 */\n            uint32_t cr_ep0_in_cmd_mask     : 1; /* [    6],        r/w,        0x1 */\n            uint32_t cr_ep0_in_done_mask    : 1; /* [    7],        r/w,        0x1 */\n            uint32_t cr_ep0_out_cmd_mask    : 1; /* [    8],        r/w,        0x1 */\n            uint32_t cr_ep0_out_done_mask   : 1; /* [    9],        r/w,        0x1 */\n            uint32_t cr_ep1_cmd_mask        : 1; /* [   10],        r/w,        0x1 */\n            uint32_t cr_ep1_done_mask       : 1; /* [   11],        r/w,        0x1 */\n            uint32_t cr_ep2_cmd_mask        : 1; /* [   12],        r/w,        0x1 */\n            uint32_t cr_ep2_done_mask       : 1; /* [   13],        r/w,        0x1 */\n            uint32_t cr_ep3_cmd_mask        : 1; /* [   14],        r/w,        0x1 */\n            uint32_t cr_ep3_done_mask       : 1; /* [   15],        r/w,        0x1 */\n            uint32_t cr_ep4_cmd_mask        : 1; /* [   16],        r/w,        0x1 */\n            uint32_t cr_ep4_done_mask       : 1; /* [   17],        r/w,        0x1 */\n            uint32_t cr_ep5_cmd_mask        : 1; /* [   18],        r/w,        0x1 */\n            uint32_t cr_ep5_done_mask       : 1; /* [   19],        r/w,        0x1 */\n            uint32_t cr_ep6_cmd_mask        : 1; /* [   20],        r/w,        0x1 */\n            uint32_t cr_ep6_done_mask       : 1; /* [   21],        r/w,        0x1 */\n            uint32_t cr_ep7_cmd_mask        : 1; /* [   22],        r/w,        0x1 */\n            uint32_t cr_ep7_done_mask       : 1; /* [   23],        r/w,        0x1 */\n            uint32_t rsvd_26_24             : 3; /* [26:24],       rsvd,        0x0 */\n            uint32_t cr_usb_rend_mask       : 1; /* [   27],        r/w,        0x1 */\n            uint32_t cr_lpm_wkup_mask       : 1; /* [   28],        r/w,        0x1 */\n            uint32_t cr_lpm_pkt_mask        : 1; /* [   29],        r/w,        0x1 */\n            uint32_t cr_sof_3ms_mask        : 1; /* [   30],        r/w,        0x1 */\n            uint32_t cr_usb_err_mask        : 1; /* [   31],        r/w,        0x1 */\n        } BF;\n        uint32_t WORD;\n    } usb_int_mask;\n\n    /* 0x2C : USB interrupt clear */\n    union {\n        struct\n        {\n            uint32_t cr_sof_clr            : 1; /* [    0],        w1c,        0x0 */\n            uint32_t cr_usb_reset_clr      : 1; /* [    1],        w1c,        0x0 */\n            uint32_t cr_vbus_tgl_clr       : 1; /* [    2],        w1c,        0x0 */\n            uint32_t cr_get_dct_cmd_clr    : 1; /* [    3],        w1c,        0x0 */\n            uint32_t cr_ep0_setup_cmd_clr  : 1; /* [    4],        w1c,        0x0 */\n            uint32_t cr_ep0_setup_done_clr : 1; /* [    5],        w1c,        0x0 */\n            uint32_t cr_ep0_in_cmd_clr     : 1; /* [    6],        w1c,        0x0 */\n            uint32_t cr_ep0_in_done_clr    : 1; /* [    7],        w1c,        0x0 */\n            uint32_t cr_ep0_out_cmd_clr    : 1; /* [    8],        w1c,        0x0 */\n            uint32_t cr_ep0_out_done_clr   : 1; /* [    9],        w1c,        0x0 */\n            uint32_t cr_ep1_cmd_clr        : 1; /* [   10],        w1c,        0x0 */\n            uint32_t cr_ep1_done_clr       : 1; /* [   11],        w1c,        0x0 */\n            uint32_t cr_ep2_cmd_clr        : 1; /* [   12],        w1c,        0x0 */\n            uint32_t cr_ep2_done_clr       : 1; /* [   13],        w1c,        0x0 */\n            uint32_t cr_ep3_cmd_clr        : 1; /* [   14],        w1c,        0x0 */\n            uint32_t cr_ep3_done_clr       : 1; /* [   15],        w1c,        0x0 */\n            uint32_t cr_ep4_cmd_clr        : 1; /* [   16],        w1c,        0x0 */\n            uint32_t cr_ep4_done_clr       : 1; /* [   17],        w1c,        0x0 */\n            uint32_t cr_ep5_cmd_clr        : 1; /* [   18],        w1c,        0x0 */\n            uint32_t cr_ep5_done_clr       : 1; /* [   19],        w1c,        0x0 */\n            uint32_t cr_ep6_cmd_clr        : 1; /* [   20],        w1c,        0x0 */\n            uint32_t cr_ep6_done_clr       : 1; /* [   21],        w1c,        0x0 */\n            uint32_t cr_ep7_cmd_clr        : 1; /* [   22],        w1c,        0x0 */\n            uint32_t cr_ep7_done_clr       : 1; /* [   23],        w1c,        0x0 */\n            uint32_t rsvd_26_24            : 3; /* [26:24],       rsvd,        0x0 */\n            uint32_t cr_usb_rend_clr       : 1; /* [   27],        w1c,        0x0 */\n            uint32_t cr_lpm_wkup_clr       : 1; /* [   28],        w1c,        0x0 */\n            uint32_t cr_lpm_pkt_clr        : 1; /* [   29],        w1c,        0x0 */\n            uint32_t cr_sof_3ms_clr        : 1; /* [   30],        w1c,        0x0 */\n            uint32_t cr_usb_err_clr        : 1; /* [   31],        w1c,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } usb_int_clear;\n\n    /* 0x30  reserved */\n    uint8_t RESERVED0x30[16];\n\n    /* 0x40 : ep1_config */\n    union {\n        struct\n        {\n            uint32_t cr_ep1_size    : 11; /* [10: 0],        r/w,       0x40 */\n            uint32_t cr_ep1_dir     : 2;  /* [12:11],        r/w,        0x1 */\n            uint32_t cr_ep1_type    : 3;  /* [15:13],        r/w,        0x4 */\n            uint32_t cr_ep1_stall   : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t cr_ep1_nack    : 1;  /* [   17],        r/w,        0x1 */\n            uint32_t cr_ep1_rdy     : 1;  /* [   18],        w1c,        0x0 */\n            uint32_t sts_ep1_rdy    : 1;  /* [   19],          r,        0x0 */\n            uint32_t reserved_20_31 : 12; /* [31:20],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep1_config;\n\n    /* 0x44 : ep2_config */\n    union {\n        struct\n        {\n            uint32_t cr_ep2_size    : 11; /* [10: 0],        r/w,       0x40 */\n            uint32_t cr_ep2_dir     : 2;  /* [12:11],        r/w,        0x1 */\n            uint32_t cr_ep2_type    : 3;  /* [15:13],        r/w,        0x4 */\n            uint32_t cr_ep2_stall   : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t cr_ep2_nack    : 1;  /* [   17],        r/w,        0x1 */\n            uint32_t cr_ep2_rdy     : 1;  /* [   18],        w1c,        0x0 */\n            uint32_t sts_ep2_rdy    : 1;  /* [   19],          r,        0x0 */\n            uint32_t reserved_20_31 : 12; /* [31:20],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep2_config;\n\n    /* 0x48 : ep3_config */\n    union {\n        struct\n        {\n            uint32_t cr_ep3_size    : 11; /* [10: 0],        r/w,       0x40 */\n            uint32_t cr_ep3_dir     : 2;  /* [12:11],        r/w,        0x1 */\n            uint32_t cr_ep3_type    : 3;  /* [15:13],        r/w,        0x4 */\n            uint32_t cr_ep3_stall   : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t cr_ep3_nack    : 1;  /* [   17],        r/w,        0x1 */\n            uint32_t cr_ep3_rdy     : 1;  /* [   18],        w1c,        0x0 */\n            uint32_t sts_ep3_rdy    : 1;  /* [   19],          r,        0x0 */\n            uint32_t reserved_20_31 : 12; /* [31:20],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep3_config;\n\n    /* 0x4C : ep4_config */\n    union {\n        struct\n        {\n            uint32_t cr_ep4_size    : 11; /* [10: 0],        r/w,       0x40 */\n            uint32_t cr_ep4_dir     : 2;  /* [12:11],        r/w,        0x1 */\n            uint32_t cr_ep4_type    : 3;  /* [15:13],        r/w,        0x4 */\n            uint32_t cr_ep4_stall   : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t cr_ep4_nack    : 1;  /* [   17],        r/w,        0x1 */\n            uint32_t cr_ep4_rdy     : 1;  /* [   18],        w1c,        0x0 */\n            uint32_t sts_ep4_rdy    : 1;  /* [   19],          r,        0x0 */\n            uint32_t reserved_20_31 : 12; /* [31:20],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep4_config;\n\n    /* 0x50 : ep5_config */\n    union {\n        struct\n        {\n            uint32_t cr_ep5_size    : 11; /* [10: 0],        r/w,       0x40 */\n            uint32_t cr_ep5_dir     : 2;  /* [12:11],        r/w,        0x1 */\n            uint32_t cr_ep5_type    : 3;  /* [15:13],        r/w,        0x4 */\n            uint32_t cr_ep5_stall   : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t cr_ep5_nack    : 1;  /* [   17],        r/w,        0x1 */\n            uint32_t cr_ep5_rdy     : 1;  /* [   18],        w1c,        0x0 */\n            uint32_t sts_ep5_rdy    : 1;  /* [   19],          r,        0x0 */\n            uint32_t reserved_20_31 : 12; /* [31:20],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep5_config;\n\n    /* 0x54 : ep6_config */\n    union {\n        struct\n        {\n            uint32_t cr_ep6_size    : 11; /* [10: 0],        r/w,       0x40 */\n            uint32_t cr_ep6_dir     : 2;  /* [12:11],        r/w,        0x1 */\n            uint32_t cr_ep6_type    : 3;  /* [15:13],        r/w,        0x4 */\n            uint32_t cr_ep6_stall   : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t cr_ep6_nack    : 1;  /* [   17],        r/w,        0x1 */\n            uint32_t cr_ep6_rdy     : 1;  /* [   18],        w1c,        0x0 */\n            uint32_t sts_ep6_rdy    : 1;  /* [   19],          r,        0x0 */\n            uint32_t reserved_20_31 : 12; /* [31:20],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep6_config;\n\n    /* 0x58 : ep7_config */\n    union {\n        struct\n        {\n            uint32_t cr_ep7_size    : 11; /* [10: 0],        r/w,       0x40 */\n            uint32_t cr_ep7_dir     : 2;  /* [12:11],        r/w,        0x1 */\n            uint32_t cr_ep7_type    : 3;  /* [15:13],        r/w,        0x4 */\n            uint32_t cr_ep7_stall   : 1;  /* [   16],        r/w,        0x0 */\n            uint32_t cr_ep7_nack    : 1;  /* [   17],        r/w,        0x1 */\n            uint32_t cr_ep7_rdy     : 1;  /* [   18],        w1c,        0x0 */\n            uint32_t sts_ep7_rdy    : 1;  /* [   19],          r,        0x0 */\n            uint32_t reserved_20_31 : 12; /* [31:20],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep7_config;\n\n    /* 0x5c  reserved */\n    uint8_t RESERVED0x5c[164];\n\n    /* 0x100 : ep0_fifo_config */\n    union {\n        struct\n        {\n            uint32_t ep0_dma_tx_en         : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t ep0_dma_rx_en         : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t ep0_tx_fifo_clr       : 1;  /* [    2],        w1c,        0x0 */\n            uint32_t ep0_rx_fifo_clr       : 1;  /* [    3],        w1c,        0x0 */\n            uint32_t ep0_tx_fifo_overflow  : 1;  /* [    4],          r,        0x0 */\n            uint32_t ep0_tx_fifo_underflow : 1;  /* [    5],          r,        0x0 */\n            uint32_t ep0_rx_fifo_overflow  : 1;  /* [    6],          r,        0x0 */\n            uint32_t ep0_rx_fifo_underflow : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31         : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep0_fifo_config;\n\n    /* 0x104 : ep0_fifo_status */\n    union {\n        struct\n        {\n            uint32_t ep0_tx_fifo_cnt   : 7; /* [ 6: 0],          r,       0x40 */\n            uint32_t reserved_7_13     : 7; /* [13: 7],       rsvd,        0x0 */\n            uint32_t ep0_tx_fifo_empty : 1; /* [   14],          r,        0x1 */\n            uint32_t ep0_tx_fifo_full  : 1; /* [   15],          r,        0x0 */\n            uint32_t ep0_rx_fifo_cnt   : 7; /* [22:16],          r,        0x0 */\n            uint32_t reserved_23_29    : 7; /* [29:23],       rsvd,        0x0 */\n            uint32_t ep0_rx_fifo_empty : 1; /* [   30],          r,        0x1 */\n            uint32_t ep0_rx_fifo_full  : 1; /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep0_fifo_status;\n\n    /* 0x108 : ep0_tx_fifo_wdata */\n    union {\n        struct\n        {\n            uint32_t ep0_tx_fifo_wdata : 8;  /* [ 7: 0],          w,          x */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep0_tx_fifo_wdata;\n\n    /* 0x10C : ep0_rx_fifo_rdata */\n    union {\n        struct\n        {\n            uint32_t ep0_rx_fifo_rdata : 8;  /* [ 7: 0],          r,        0x0 */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep0_rx_fifo_rdata;\n\n    /* 0x110 : ep1_fifo_config */\n    union {\n        struct\n        {\n            uint32_t ep1_dma_tx_en         : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t ep1_dma_rx_en         : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t ep1_tx_fifo_clr       : 1;  /* [    2],        w1c,        0x0 */\n            uint32_t ep1_rx_fifo_clr       : 1;  /* [    3],        w1c,        0x0 */\n            uint32_t ep1_tx_fifo_overflow  : 1;  /* [    4],          r,        0x0 */\n            uint32_t ep1_tx_fifo_underflow : 1;  /* [    5],          r,        0x0 */\n            uint32_t ep1_rx_fifo_overflow  : 1;  /* [    6],          r,        0x0 */\n            uint32_t ep1_rx_fifo_underflow : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31         : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep1_fifo_config;\n\n    /* 0x114 : ep1_fifo_status */\n    union {\n        struct\n        {\n            uint32_t ep1_tx_fifo_cnt   : 7; /* [ 6: 0],          r,       0x40 */\n            uint32_t reserved_7_13     : 7; /* [13: 7],       rsvd,        0x0 */\n            uint32_t ep1_tx_fifo_empty : 1; /* [   14],          r,        0x1 */\n            uint32_t ep1_tx_fifo_full  : 1; /* [   15],          r,        0x0 */\n            uint32_t ep1_rx_fifo_cnt   : 7; /* [22:16],          r,        0x0 */\n            uint32_t reserved_23_29    : 7; /* [29:23],       rsvd,        0x0 */\n            uint32_t ep1_rx_fifo_empty : 1; /* [   30],          r,        0x1 */\n            uint32_t ep1_rx_fifo_full  : 1; /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep1_fifo_status;\n\n    /* 0x118 : ep1_tx_fifo_wdata */\n    union {\n        struct\n        {\n            uint32_t ep1_tx_fifo_wdata : 8;  /* [ 7: 0],          w,          x */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep1_tx_fifo_wdata;\n\n    /* 0x11C : ep1_rx_fifo_rdata */\n    union {\n        struct\n        {\n            uint32_t ep1_rx_fifo_rdata : 8;  /* [ 7: 0],          r,        0x0 */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep1_rx_fifo_rdata;\n\n    /* 0x120 : ep2_fifo_config */\n    union {\n        struct\n        {\n            uint32_t ep2_dma_tx_en         : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t ep2_dma_rx_en         : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t ep2_tx_fifo_clr       : 1;  /* [    2],        w1c,        0x0 */\n            uint32_t ep2_rx_fifo_clr       : 1;  /* [    3],        w1c,        0x0 */\n            uint32_t ep2_tx_fifo_overflow  : 1;  /* [    4],          r,        0x0 */\n            uint32_t ep2_tx_fifo_underflow : 1;  /* [    5],          r,        0x0 */\n            uint32_t ep2_rx_fifo_overflow  : 1;  /* [    6],          r,        0x0 */\n            uint32_t ep2_rx_fifo_underflow : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31         : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep2_fifo_config;\n\n    /* 0x124 : ep2_fifo_status */\n    union {\n        struct\n        {\n            uint32_t ep2_tx_fifo_cnt   : 7; /* [ 6: 0],          r,       0x40 */\n            uint32_t reserved_7_13     : 7; /* [13: 7],       rsvd,        0x0 */\n            uint32_t ep2_tx_fifo_empty : 1; /* [   14],          r,        0x1 */\n            uint32_t ep2_tx_fifo_full  : 1; /* [   15],          r,        0x0 */\n            uint32_t ep2_rx_fifo_cnt   : 7; /* [22:16],          r,        0x0 */\n            uint32_t reserved_23_29    : 7; /* [29:23],       rsvd,        0x0 */\n            uint32_t ep2_rx_fifo_empty : 1; /* [   30],          r,        0x1 */\n            uint32_t ep2_rx_fifo_full  : 1; /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep2_fifo_status;\n\n    /* 0x128 : ep2_tx_fifo_wdata */\n    union {\n        struct\n        {\n            uint32_t ep2_tx_fifo_wdata : 8;  /* [ 7: 0],          w,          x */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep2_tx_fifo_wdata;\n\n    /* 0x12C : ep2_rx_fifo_rdata */\n    union {\n        struct\n        {\n            uint32_t ep2_rx_fifo_rdata : 8;  /* [ 7: 0],          r,        0x0 */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep2_rx_fifo_rdata;\n\n    /* 0x130 : ep3_fifo_config */\n    union {\n        struct\n        {\n            uint32_t ep3_dma_tx_en         : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t ep3_dma_rx_en         : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t ep3_tx_fifo_clr       : 1;  /* [    2],        w1c,        0x0 */\n            uint32_t ep3_rx_fifo_clr       : 1;  /* [    3],        w1c,        0x0 */\n            uint32_t ep3_tx_fifo_overflow  : 1;  /* [    4],          r,        0x0 */\n            uint32_t ep3_tx_fifo_underflow : 1;  /* [    5],          r,        0x0 */\n            uint32_t ep3_rx_fifo_overflow  : 1;  /* [    6],          r,        0x0 */\n            uint32_t ep3_rx_fifo_underflow : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31         : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep3_fifo_config;\n\n    /* 0x134 : ep3_fifo_status */\n    union {\n        struct\n        {\n            uint32_t ep3_tx_fifo_cnt   : 7; /* [ 6: 0],          r,       0x40 */\n            uint32_t reserved_7_13     : 7; /* [13: 7],       rsvd,        0x0 */\n            uint32_t ep3_tx_fifo_empty : 1; /* [   14],          r,        0x1 */\n            uint32_t ep3_tx_fifo_full  : 1; /* [   15],          r,        0x0 */\n            uint32_t ep3_rx_fifo_cnt   : 7; /* [22:16],          r,        0x0 */\n            uint32_t reserved_23_29    : 7; /* [29:23],       rsvd,        0x0 */\n            uint32_t ep3_rx_fifo_empty : 1; /* [   30],          r,        0x1 */\n            uint32_t ep3_rx_fifo_full  : 1; /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep3_fifo_status;\n\n    /* 0x138 : ep3_tx_fifo_wdata */\n    union {\n        struct\n        {\n            uint32_t ep3_tx_fifo_wdata : 8;  /* [ 7: 0],          w,          x */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep3_tx_fifo_wdata;\n\n    /* 0x13C : ep3_rx_fifo_rdata */\n    union {\n        struct\n        {\n            uint32_t ep3_rx_fifo_rdata : 8;  /* [ 7: 0],          r,        0x0 */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep3_rx_fifo_rdata;\n\n    /* 0x140 : ep4_fifo_config */\n    union {\n        struct\n        {\n            uint32_t ep4_dma_tx_en         : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t ep4_dma_rx_en         : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t ep4_tx_fifo_clr       : 1;  /* [    2],        w1c,        0x0 */\n            uint32_t ep4_rx_fifo_clr       : 1;  /* [    3],        w1c,        0x0 */\n            uint32_t ep4_tx_fifo_overflow  : 1;  /* [    4],          r,        0x0 */\n            uint32_t ep4_tx_fifo_underflow : 1;  /* [    5],          r,        0x0 */\n            uint32_t ep4_rx_fifo_overflow  : 1;  /* [    6],          r,        0x0 */\n            uint32_t ep4_rx_fifo_underflow : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31         : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep4_fifo_config;\n\n    /* 0x144 : ep4_fifo_status */\n    union {\n        struct\n        {\n            uint32_t ep4_tx_fifo_cnt   : 7; /* [ 6: 0],          r,       0x40 */\n            uint32_t reserved_7_13     : 7; /* [13: 7],       rsvd,        0x0 */\n            uint32_t ep4_tx_fifo_empty : 1; /* [   14],          r,        0x1 */\n            uint32_t ep4_tx_fifo_full  : 1; /* [   15],          r,        0x0 */\n            uint32_t ep4_rx_fifo_cnt   : 7; /* [22:16],          r,        0x0 */\n            uint32_t reserved_23_29    : 7; /* [29:23],       rsvd,        0x0 */\n            uint32_t ep4_rx_fifo_empty : 1; /* [   30],          r,        0x1 */\n            uint32_t ep4_rx_fifo_full  : 1; /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep4_fifo_status;\n\n    /* 0x148 : ep4_tx_fifo_wdata */\n    union {\n        struct\n        {\n            uint32_t ep4_tx_fifo_wdata : 8;  /* [ 7: 0],          w,          x */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep4_tx_fifo_wdata;\n\n    /* 0x14C : ep4_rx_fifo_rdata */\n    union {\n        struct\n        {\n            uint32_t ep4_rx_fifo_rdata : 8;  /* [ 7: 0],          r,        0x0 */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep4_rx_fifo_rdata;\n\n    /* 0x150 : ep5_fifo_config */\n    union {\n        struct\n        {\n            uint32_t ep5_dma_tx_en         : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t ep5_dma_rx_en         : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t ep5_tx_fifo_clr       : 1;  /* [    2],        w1c,        0x0 */\n            uint32_t ep5_rx_fifo_clr       : 1;  /* [    3],        w1c,        0x0 */\n            uint32_t ep5_tx_fifo_overflow  : 1;  /* [    4],          r,        0x0 */\n            uint32_t ep5_tx_fifo_underflow : 1;  /* [    5],          r,        0x0 */\n            uint32_t ep5_rx_fifo_overflow  : 1;  /* [    6],          r,        0x0 */\n            uint32_t ep5_rx_fifo_underflow : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31         : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep5_fifo_config;\n\n    /* 0x154 : ep5_fifo_status */\n    union {\n        struct\n        {\n            uint32_t ep5_tx_fifo_cnt   : 7; /* [ 6: 0],          r,       0x40 */\n            uint32_t reserved_7_13     : 7; /* [13: 7],       rsvd,        0x0 */\n            uint32_t ep5_tx_fifo_empty : 1; /* [   14],          r,        0x1 */\n            uint32_t ep5_tx_fifo_full  : 1; /* [   15],          r,        0x0 */\n            uint32_t ep5_rx_fifo_cnt   : 7; /* [22:16],          r,        0x0 */\n            uint32_t reserved_23_29    : 7; /* [29:23],       rsvd,        0x0 */\n            uint32_t ep5_rx_fifo_empty : 1; /* [   30],          r,        0x1 */\n            uint32_t ep5_rx_fifo_full  : 1; /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep5_fifo_status;\n\n    /* 0x158 : ep5_tx_fifo_wdata */\n    union {\n        struct\n        {\n            uint32_t ep5_tx_fifo_wdata : 8;  /* [ 7: 0],          w,          x */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep5_tx_fifo_wdata;\n\n    /* 0x15C : ep5_rx_fifo_rdata */\n    union {\n        struct\n        {\n            uint32_t ep5_rx_fifo_rdata : 8;  /* [ 7: 0],          r,        0x0 */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep5_rx_fifo_rdata;\n\n    /* 0x160 : ep6_fifo_config */\n    union {\n        struct\n        {\n            uint32_t ep6_dma_tx_en         : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t ep6_dma_rx_en         : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t ep6_tx_fifo_clr       : 1;  /* [    2],        w1c,        0x0 */\n            uint32_t ep6_rx_fifo_clr       : 1;  /* [    3],        w1c,        0x0 */\n            uint32_t ep6_tx_fifo_overflow  : 1;  /* [    4],          r,        0x0 */\n            uint32_t ep6_tx_fifo_underflow : 1;  /* [    5],          r,        0x0 */\n            uint32_t ep6_rx_fifo_overflow  : 1;  /* [    6],          r,        0x0 */\n            uint32_t ep6_rx_fifo_underflow : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31         : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep6_fifo_config;\n\n    /* 0x164 : ep6_fifo_status */\n    union {\n        struct\n        {\n            uint32_t ep6_tx_fifo_cnt   : 7; /* [ 6: 0],          r,       0x40 */\n            uint32_t reserved_7_13     : 7; /* [13: 7],       rsvd,        0x0 */\n            uint32_t ep6_tx_fifo_empty : 1; /* [   14],          r,        0x1 */\n            uint32_t ep6_tx_fifo_full  : 1; /* [   15],          r,        0x0 */\n            uint32_t ep6_rx_fifo_cnt   : 7; /* [22:16],          r,        0x0 */\n            uint32_t reserved_23_29    : 7; /* [29:23],       rsvd,        0x0 */\n            uint32_t ep6_rx_fifo_empty : 1; /* [   30],          r,        0x1 */\n            uint32_t ep6_rx_fifo_full  : 1; /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep6_fifo_status;\n\n    /* 0x168 : ep6_tx_fifo_wdata */\n    union {\n        struct\n        {\n            uint32_t ep6_tx_fifo_wdata : 8;  /* [ 7: 0],          w,          x */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep6_tx_fifo_wdata;\n\n    /* 0x16C : ep6_rx_fifo_rdata */\n    union {\n        struct\n        {\n            uint32_t ep6_rx_fifo_rdata : 8;  /* [ 7: 0],          r,        0x0 */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep6_rx_fifo_rdata;\n\n    /* 0x170 : ep7_fifo_config */\n    union {\n        struct\n        {\n            uint32_t ep7_dma_tx_en         : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t ep7_dma_rx_en         : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t ep7_tx_fifo_clr       : 1;  /* [    2],        w1c,        0x0 */\n            uint32_t ep7_rx_fifo_clr       : 1;  /* [    3],        w1c,        0x0 */\n            uint32_t ep7_tx_fifo_overflow  : 1;  /* [    4],          r,        0x0 */\n            uint32_t ep7_tx_fifo_underflow : 1;  /* [    5],          r,        0x0 */\n            uint32_t ep7_rx_fifo_overflow  : 1;  /* [    6],          r,        0x0 */\n            uint32_t ep7_rx_fifo_underflow : 1;  /* [    7],          r,        0x0 */\n            uint32_t reserved_8_31         : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep7_fifo_config;\n\n    /* 0x174 : ep7_fifo_status */\n    union {\n        struct\n        {\n            uint32_t ep7_tx_fifo_cnt   : 7; /* [ 6: 0],          r,       0x40 */\n            uint32_t reserved_7_13     : 7; /* [13: 7],       rsvd,        0x0 */\n            uint32_t ep7_tx_fifo_empty : 1; /* [   14],          r,        0x1 */\n            uint32_t ep7_tx_fifo_full  : 1; /* [   15],          r,        0x0 */\n            uint32_t ep7_rx_fifo_cnt   : 7; /* [22:16],          r,        0x0 */\n            uint32_t reserved_23_29    : 7; /* [29:23],       rsvd,        0x0 */\n            uint32_t ep7_rx_fifo_empty : 1; /* [   30],          r,        0x1 */\n            uint32_t ep7_rx_fifo_full  : 1; /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep7_fifo_status;\n\n    /* 0x178 : ep7_tx_fifo_wdata */\n    union {\n        struct\n        {\n            uint32_t ep7_tx_fifo_wdata : 8;  /* [ 7: 0],          w,          x */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep7_tx_fifo_wdata;\n\n    /* 0x17C : ep7_rx_fifo_rdata */\n    union {\n        struct\n        {\n            uint32_t ep7_rx_fifo_rdata : 8;  /* [ 7: 0],          r,        0x0 */\n            uint32_t reserved_8_31     : 24; /* [31: 8],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } ep7_rx_fifo_rdata;\n\n    /* 0x180  reserved */\n    uint8_t RESERVED0x180[112];\n\n    /* 0x1F0 : rsvd_0 */\n    union {\n        struct\n        {\n            uint32_t rsvd_0 : 32; /* [31: 0],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } rsvd_0;\n\n    /* 0x1F4 : rsvd_1 */\n    union {\n        struct\n        {\n            uint32_t rsvd_1 : 32; /* [31: 0],       rsvd,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } rsvd_1;\n\n    /* 0x1f8  reserved */\n    uint8_t RESERVED0x1f8[4];\n\n    /* 0x1FC : xcvr_if_config */\n    union {\n        struct\n        {\n            uint32_t cr_xcvr_force_tx_en : 1;  /* [    0],        r/w,        0x0 */\n            uint32_t cr_xcvr_force_tx_oe : 1;  /* [    1],        r/w,        0x0 */\n            uint32_t cr_xcvr_force_tx_dp : 1;  /* [    2],        r/w,        0x1 */\n            uint32_t cr_xcvr_force_tx_dn : 1;  /* [    3],        r/w,        0x0 */\n            uint32_t cr_xcvr_force_rx_en : 1;  /* [    4],        r/w,        0x0 */\n            uint32_t cr_xcvr_force_rx_d  : 1;  /* [    5],        r/w,        0x1 */\n            uint32_t cr_xcvr_force_rx_dp : 1;  /* [    6],        r/w,        0x1 */\n            uint32_t cr_xcvr_force_rx_dn : 1;  /* [    7],        r/w,        0x0 */\n            uint32_t cr_xcvr_om_rx_sel   : 1;  /* [    8],        r/w,        0x0 */\n            uint32_t cr_xcvr_om_rx_d     : 1;  /* [    9],        r/w,        0x1 */\n            uint32_t cr_xcvr_om_rx_dp    : 1;  /* [   10],        r/w,        0x1 */\n            uint32_t cr_xcvr_om_rx_dn    : 1;  /* [   11],        r/w,        0x0 */\n            uint32_t reserved_12_30      : 19; /* [30:12],       rsvd,        0x0 */\n            uint32_t sts_vbus_det        : 1;  /* [   31],          r,        0x0 */\n        } BF;\n        uint32_t WORD;\n    } xcvr_if_config;\n};\n\ntypedef volatile struct usb_reg usb_reg_t;\n\n#endif /* __USB_REG_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/risc-v/Core/Include/clic.h",
    "content": "// See LICENSE for license details.\n\n#ifndef _SIFIVE_CLIC_H\n#define _SIFIVE_CLIC_H\n\n#define CLIC_CTRL_ADDR  0x02000000UL\n#define CLIC_HART0_ADDR 0x02800000UL\n\n#define CLIC_MSIP          0x0000\n#define CLIC_MSIP_size     0x4\n#define CLIC_MTIMECMP      0x4000\n#define CLIC_MTIMECMP_size 0x8\n#define CLIC_MTIME         0xBFF8\n#define CLIC_MTIME_size    0x8\n\n#define CLIC_INTIP  0x000\n#define CLIC_INTIE  0x400\n#define CLIC_INTCFG 0x800\n#define CLIC_CFG    0xc00\n\n#endif /* _SIFIVE_CLIC_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/risc-v/Core/Include/riscv_bits.h",
    "content": "// See LICENSE for license details.\n#ifndef _RISCV_BITS_H\n#define _RISCV_BITS_H\n\n#define likely(x)   __builtin_expect((x), 1)\n#define unlikely(x) __builtin_expect((x), 0)\n\n#define ROUNDUP(a, b)   ((((a)-1) / (b) + 1) * (b))\n#define ROUNDDOWN(a, b) ((a) / (b) * (b))\n\n#define MAX(a, b)        ((a) > (b) ? (a) : (b))\n#define MIN(a, b)        ((a) < (b) ? (a) : (b))\n#define CLAMP(a, lo, hi) MIN(MAX(a, lo), hi)\n\n#define EXTRACT_FIELD(val, which)          (((val) & (which)) / ((which) & ~((which)-1)))\n#define INSERT_FIELD(val, which, fieldval) (((val) & ~(which)) | ((fieldval) * ((which) & ~((which)-1))))\n\n#define STR(x)  XSTR(x)\n#define XSTR(x) #x\n\n#if __riscv_xlen == 64\n#define SLL32        sllw\n#define STORE        sd\n#define LOAD         ld\n#define LWU          lwu\n#define LOG_REGBYTES 3\n#else\n#define SLL32        sll\n#define STORE        sw\n#define LOAD         lw\n#define LWU          lw\n#define LOG_REGBYTES 2\n#endif\n#define REGBYTES (1 << LOG_REGBYTES)\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/risc-v/Core/Include/riscv_const.h",
    "content": "// See LICENSE for license details.\n/* Derived from <linux/const.h> */\n\n#ifndef _RISCV_CONST_H\n#define _RISCV_CONST_H\n\n#ifdef __ASSEMBLER__\n#define _AC(X, Y) X\n#define _AT(T, X) X\n#else\n#define _AC(X, Y) (X##Y)\n#define _AT(T, X) ((T)(X))\n#endif /* !__ASSEMBLER__*/\n\n#define _BITUL(x)  (_AC(1, UL) << (x))\n#define _BITULL(x) (_AC(1, ULL) << (x))\n\n#endif /* _NUCLEI_CONST_H */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/risc-v/Core/Include/riscv_encoding.h",
    "content": "// See LICENSE for license details.\n\n#ifndef RISCV_CSR_ENCODING_H\n#define RISCV_CSR_ENCODING_H\n\n#define MSTATUS_UIE  0x00000001\n#define MSTATUS_SIE  0x00000002\n#define MSTATUS_HIE  0x00000004\n#define MSTATUS_MIE  0x00000008\n#define MSTATUS_UPIE 0x00000010\n#define MSTATUS_SPIE 0x00000020\n#define MSTATUS_HPIE 0x00000040\n#define MSTATUS_MPIE 0x00000080\n#define MSTATUS_SPP  0x00000100\n#define MSTATUS_MPP  0x00001800\n#define MSTATUS_FS   0x00006000\n#define MSTATUS_XS   0x00018000\n#define MSTATUS_MPRV 0x00020000\n#define MSTATUS_PUM  0x00040000\n#define MSTATUS_MXR  0x00080000\n#define MSTATUS_VM   0x1F000000\n#define MSTATUS32_SD 0x80000000\n#define MSTATUS64_SD 0x8000000000000000\n\n#define SSTATUS_UIE  0x00000001\n#define SSTATUS_SIE  0x00000002\n#define SSTATUS_UPIE 0x00000010\n#define SSTATUS_SPIE 0x00000020\n#define SSTATUS_SPP  0x00000100\n#define SSTATUS_FS   0x00006000\n#define SSTATUS_XS   0x00018000\n#define SSTATUS_PUM  0x00040000\n#define SSTATUS32_SD 0x80000000\n#define SSTATUS64_SD 0x8000000000000000\n\n#define DCSR_XDEBUGVER (3U << 30)\n#define DCSR_NDRESET   (1 << 29)\n#define DCSR_FULLRESET (1 << 28)\n#define DCSR_EBREAKM   (1 << 15)\n#define DCSR_EBREAKH   (1 << 14)\n#define DCSR_EBREAKS   (1 << 13)\n#define DCSR_EBREAKU   (1 << 12)\n#define DCSR_STOPCYCLE (1 << 10)\n#define DCSR_STOPTIME  (1 << 9)\n#define DCSR_CAUSE     (7 << 6)\n#define DCSR_DEBUGINT  (1 << 5)\n#define DCSR_HALT      (1 << 3)\n#define DCSR_STEP      (1 << 2)\n#define DCSR_PRV       (3 << 0)\n\n#define DCSR_CAUSE_NONE     0\n#define DCSR_CAUSE_SWBP     1\n#define DCSR_CAUSE_HWBP     2\n#define DCSR_CAUSE_DEBUGINT 3\n#define DCSR_CAUSE_STEP     4\n#define DCSR_CAUSE_HALT     5\n\n#define MCONTROL_TYPE(xlen)    (0xfULL << ((xlen)-4))\n#define MCONTROL_DMODE(xlen)   (1ULL << ((xlen)-5))\n#define MCONTROL_MASKMAX(xlen) (0x3fULL << ((xlen)-11))\n\n#define MCONTROL_SELECT  (1 << 19)\n#define MCONTROL_TIMING  (1 << 18)\n#define MCONTROL_ACTION  (0x3f << 12)\n#define MCONTROL_CHAIN   (1 << 11)\n#define MCONTROL_MATCH   (0xf << 7)\n#define MCONTROL_M       (1 << 6)\n#define MCONTROL_H       (1 << 5)\n#define MCONTROL_S       (1 << 4)\n#define MCONTROL_U       (1 << 3)\n#define MCONTROL_EXECUTE (1 << 2)\n#define MCONTROL_STORE   (1 << 1)\n#define MCONTROL_LOAD    (1 << 0)\n\n#define MCONTROL_TYPE_NONE  0\n#define MCONTROL_TYPE_MATCH 2\n\n#define MCONTROL_ACTION_DEBUG_EXCEPTION 0\n#define MCONTROL_ACTION_DEBUG_MODE      1\n#define MCONTROL_ACTION_TRACE_START     2\n#define MCONTROL_ACTION_TRACE_STOP      3\n#define MCONTROL_ACTION_TRACE_EMIT      4\n\n#define MCONTROL_MATCH_EQUAL     0\n#define MCONTROL_MATCH_NAPOT     1\n#define MCONTROL_MATCH_GE        2\n#define MCONTROL_MATCH_LT        3\n#define MCONTROL_MATCH_MASK_LOW  4\n#define MCONTROL_MATCH_MASK_HIGH 5\n\n#define MIP_SSIP (1 << IRQ_S_SOFT)\n#define MIP_HSIP (1 << IRQ_H_SOFT)\n#define MIP_MSIP (1 << IRQ_M_SOFT)\n#define MIP_STIP (1 << IRQ_S_TIMER)\n#define MIP_HTIP (1 << IRQ_H_TIMER)\n#define MIP_MTIP (1 << IRQ_M_TIMER)\n#define MIP_SEIP (1 << IRQ_S_EXT)\n#define MIP_HEIP (1 << IRQ_H_EXT)\n#define MIP_MEIP (1 << IRQ_M_EXT)\n\n#define MIE_SSIE MIP_SSIP\n#define MIE_HSIE MIP_HSIP\n#define MIE_MSIE MIP_MSIP\n#define MIE_STIE MIP_STIP\n#define MIE_HTIE MIP_HTIP\n#define MIE_MTIE MIP_MTIP\n#define MIE_SEIE MIP_SEIP\n#define MIE_HEIE MIP_HEIP\n#define MIE_MEIE MIP_MEIP\n\n#define SIP_SSIP MIP_SSIP\n#define SIP_STIP MIP_STIP\n\n#define PRV_U 0\n#define PRV_S 1\n#define PRV_H 2\n#define PRV_M 3\n\n#define VM_MBARE 0\n#define VM_MBB   1\n#define VM_MBBID 2\n#define VM_SV32  8\n#define VM_SV39  9\n#define VM_SV48  10\n\n#define IRQ_S_SOFT  1\n#define IRQ_H_SOFT  2\n#define IRQ_M_SOFT  3\n#define IRQ_S_TIMER 5\n#define IRQ_H_TIMER 6\n#define IRQ_M_TIMER 7\n#define IRQ_S_EXT   9\n#define IRQ_H_EXT   10\n#define IRQ_M_EXT   11\n#define IRQ_COP     12\n#define IRQ_HOST    13\n\n#define DEFAULT_RSTVEC     0x00001000\n#define DEFAULT_NMIVEC     0x00001004\n#define DEFAULT_MTVEC      0x00001010\n#define CONFIG_STRING_ADDR 0x0000100C\n#define EXT_IO_BASE        0x40000000\n#define DRAM_BASE          0x80000000\n\n// page table entry (PTE) fields\n#define PTE_V    0x001 // Valid\n#define PTE_R    0x002 // Read\n#define PTE_W    0x004 // Write\n#define PTE_X    0x008 // Execute\n#define PTE_U    0x010 // User\n#define PTE_G    0x020 // Global\n#define PTE_A    0x040 // Accessed\n#define PTE_D    0x080 // Dirty\n#define PTE_SOFT 0x300 // Reserved for Software\n\n#define PTE_PPN_SHIFT 10\n\n#define PTE_TABLE(PTE) (((PTE) & (PTE_V | PTE_R | PTE_W | PTE_X)) == PTE_V)\n\n#ifdef __riscv\n\n#ifdef __riscv64\n#define MSTATUS_SD         MSTATUS64_SD\n#define SSTATUS_SD         SSTATUS64_SD\n#define RISCV_PGLEVEL_BITS 9\n#else\n#define MSTATUS_SD         MSTATUS32_SD\n#define SSTATUS_SD         SSTATUS32_SD\n#define RISCV_PGLEVEL_BITS 10\n#endif\n#define RISCV_PGSHIFT 12\n#define RISCV_PGSIZE  (1 << RISCV_PGSHIFT)\n\n#ifndef __ASSEMBLER__\n\n#ifdef __GNUC__\n\n#define asm __asm\n\n#define read_fpu(reg) ({ unsigned long __tmp; \\\n        asm volatile (\"fmv.x.w %0, \" #reg : \"=r\"(__tmp)); \\\n        __tmp; })\n\n#define write_fpu(reg, val) ({ \\\n        if (__builtin_constant_p(val) && (unsigned long)(val) < 32) \\\n            asm volatile (\"fmv.w.x \" #reg \", %0\" :: \"i\"(val)); \\\n        else \\\n            asm volatile (\"fmv.w.x \" #reg \", %0\" :: \"r\"(val)); })\n\n#define read_csr(reg) ({ unsigned long __tmp; \\\n        asm volatile (\"csrr %0, \" #reg : \"=r\"(__tmp)); \\\n        __tmp; })\n\n#define write_csr(reg, val) ({ \\\n        if (__builtin_constant_p(val) && (unsigned long)(val) < 32) \\\n            asm volatile (\"csrw \" #reg \", %0\" :: \"i\"(val)); \\\n        else \\\n            asm volatile (\"csrw \" #reg \", %0\" :: \"r\"(val)); })\n\n#define swap_csr(reg, val) ({ unsigned long __tmp; \\\n        if (__builtin_constant_p(val) && (unsigned long)(val) < 32) \\\n            asm volatile (\"csrrw %0, \" #reg \", %1\" : \"=r\"(__tmp) : \"i\"(val)); \\\n        else \\\n            asm volatile (\"csrrw %0, \" #reg \", %1\" : \"=r\"(__tmp) : \"r\"(val)); \\\n        __tmp; })\n\n#define set_csr(reg, bit) ({ unsigned long __tmp; \\\n        if (__builtin_constant_p(bit) && (unsigned long)(bit) < 32) \\\n            asm volatile (\"csrrs %0, \" #reg \", %1\" : \"=r\"(__tmp) : \"i\"(bit)); \\\n        else \\\n            asm volatile (\"csrrs %0, \" #reg \", %1\" : \"=r\"(__tmp) : \"r\"(bit)); \\\n        __tmp; })\n\n#define clear_csr(reg, bit) ({ unsigned long __tmp; \\\n        if (__builtin_constant_p(bit) && (unsigned long)(bit) < 32) \\\n            asm volatile (\"csrrc %0, \" #reg \", %1\" : \"=r\"(__tmp) : \"i\"(bit)); \\\n        else \\\n            asm volatile (\"csrrc %0, \" #reg \", %1\" : \"=r\"(__tmp) : \"r\"(bit)); \\\n        __tmp; })\n\n#define rdtime()    read_csr(time)\n#define rdcycle()   read_csr(cycle)\n#define rdinstret() read_csr(instret)\n#define get_pc() read_csr(mepc)\n\n#endif\n\n#endif\n\n#endif\n\n#endif\n/* Automatically generated by parse-opcodes */\n#ifndef RISCV_ENCODING_H\n#define RISCV_ENCODING_H\n#define MATCH_BEQ                0x63\n#define MASK_BEQ                 0x707f\n#define MATCH_BNE                0x1063\n#define MASK_BNE                 0x707f\n#define MATCH_BLT                0x4063\n#define MASK_BLT                 0x707f\n#define MATCH_BGE                0x5063\n#define MASK_BGE                 0x707f\n#define MATCH_BLTU               0x6063\n#define MASK_BLTU                0x707f\n#define MATCH_BGEU               0x7063\n#define MASK_BGEU                0x707f\n#define MATCH_JALR               0x67\n#define MASK_JALR                0x707f\n#define MATCH_JAL                0x6f\n#define MASK_JAL                 0x7f\n#define MATCH_LUI                0x37\n#define MASK_LUI                 0x7f\n#define MATCH_AUIPC              0x17\n#define MASK_AUIPC               0x7f\n#define MATCH_ADDI               0x13\n#define MASK_ADDI                0x707f\n#define MATCH_SLLI               0x1013\n#define MASK_SLLI                0xfc00707f\n#define MATCH_SLTI               0x2013\n#define MASK_SLTI                0x707f\n#define MATCH_SLTIU              0x3013\n#define MASK_SLTIU               0x707f\n#define MATCH_XORI               0x4013\n#define MASK_XORI                0x707f\n#define MATCH_SRLI               0x5013\n#define MASK_SRLI                0xfc00707f\n#define MATCH_SRAI               0x40005013\n#define MASK_SRAI                0xfc00707f\n#define MATCH_ORI                0x6013\n#define MASK_ORI                 0x707f\n#define MATCH_ANDI               0x7013\n#define MASK_ANDI                0x707f\n#define MATCH_ADD                0x33\n#define MASK_ADD                 0xfe00707f\n#define MATCH_SUB                0x40000033\n#define MASK_SUB                 0xfe00707f\n#define MATCH_SLL                0x1033\n#define MASK_SLL                 0xfe00707f\n#define MATCH_SLT                0x2033\n#define MASK_SLT                 0xfe00707f\n#define MATCH_SLTU               0x3033\n#define MASK_SLTU                0xfe00707f\n#define MATCH_XOR                0x4033\n#define MASK_XOR                 0xfe00707f\n#define MATCH_SRL                0x5033\n#define MASK_SRL                 0xfe00707f\n#define MATCH_SRA                0x40005033\n#define MASK_SRA                 0xfe00707f\n#define MATCH_OR                 0x6033\n#define MASK_OR                  0xfe00707f\n#define MATCH_AND                0x7033\n#define MASK_AND                 0xfe00707f\n#define MATCH_ADDIW              0x1b\n#define MASK_ADDIW               0x707f\n#define MATCH_SLLIW              0x101b\n#define MASK_SLLIW               0xfe00707f\n#define MATCH_SRLIW              0x501b\n#define MASK_SRLIW               0xfe00707f\n#define MATCH_SRAIW              0x4000501b\n#define MASK_SRAIW               0xfe00707f\n#define MATCH_ADDW               0x3b\n#define MASK_ADDW                0xfe00707f\n#define MATCH_SUBW               0x4000003b\n#define MASK_SUBW                0xfe00707f\n#define MATCH_SLLW               0x103b\n#define MASK_SLLW                0xfe00707f\n#define MATCH_SRLW               0x503b\n#define MASK_SRLW                0xfe00707f\n#define MATCH_SRAW               0x4000503b\n#define MASK_SRAW                0xfe00707f\n#define MATCH_LB                 0x3\n#define MASK_LB                  0x707f\n#define MATCH_LH                 0x1003\n#define MASK_LH                  0x707f\n#define MATCH_LW                 0x2003\n#define MASK_LW                  0x707f\n#define MATCH_LD                 0x3003\n#define MASK_LD                  0x707f\n#define MATCH_LBU                0x4003\n#define MASK_LBU                 0x707f\n#define MATCH_LHU                0x5003\n#define MASK_LHU                 0x707f\n#define MATCH_LWU                0x6003\n#define MASK_LWU                 0x707f\n#define MATCH_SB                 0x23\n#define MASK_SB                  0x707f\n#define MATCH_SH                 0x1023\n#define MASK_SH                  0x707f\n#define MATCH_SW                 0x2023\n#define MASK_SW                  0x707f\n#define MATCH_SD                 0x3023\n#define MASK_SD                  0x707f\n#define MATCH_FENCE              0xf\n#define MASK_FENCE               0x707f\n#define MATCH_FENCE_I            0x100f\n#define MASK_FENCE_I             0x707f\n#define MATCH_MUL                0x2000033\n#define MASK_MUL                 0xfe00707f\n#define MATCH_MULH               0x2001033\n#define MASK_MULH                0xfe00707f\n#define MATCH_MULHSU             0x2002033\n#define MASK_MULHSU              0xfe00707f\n#define MATCH_MULHU              0x2003033\n#define MASK_MULHU               0xfe00707f\n#define MATCH_DIV                0x2004033\n#define MASK_DIV                 0xfe00707f\n#define MATCH_DIVU               0x2005033\n#define MASK_DIVU                0xfe00707f\n#define MATCH_REM                0x2006033\n#define MASK_REM                 0xfe00707f\n#define MATCH_REMU               0x2007033\n#define MASK_REMU                0xfe00707f\n#define MATCH_MULW               0x200003b\n#define MASK_MULW                0xfe00707f\n#define MATCH_DIVW               0x200403b\n#define MASK_DIVW                0xfe00707f\n#define MATCH_DIVUW              0x200503b\n#define MASK_DIVUW               0xfe00707f\n#define MATCH_REMW               0x200603b\n#define MASK_REMW                0xfe00707f\n#define MATCH_REMUW              0x200703b\n#define MASK_REMUW               0xfe00707f\n#define MATCH_AMOADD_W           0x202f\n#define MASK_AMOADD_W            0xf800707f\n#define MATCH_AMOXOR_W           0x2000202f\n#define MASK_AMOXOR_W            0xf800707f\n#define MATCH_AMOOR_W            0x4000202f\n#define MASK_AMOOR_W             0xf800707f\n#define MATCH_AMOAND_W           0x6000202f\n#define MASK_AMOAND_W            0xf800707f\n#define MATCH_AMOMIN_W           0x8000202f\n#define MASK_AMOMIN_W            0xf800707f\n#define MATCH_AMOMAX_W           0xa000202f\n#define MASK_AMOMAX_W            0xf800707f\n#define MATCH_AMOMINU_W          0xc000202f\n#define MASK_AMOMINU_W           0xf800707f\n#define MATCH_AMOMAXU_W          0xe000202f\n#define MASK_AMOMAXU_W           0xf800707f\n#define MATCH_AMOSWAP_W          0x800202f\n#define MASK_AMOSWAP_W           0xf800707f\n#define MATCH_LR_W               0x1000202f\n#define MASK_LR_W                0xf9f0707f\n#define MATCH_SC_W               0x1800202f\n#define MASK_SC_W                0xf800707f\n#define MATCH_AMOADD_D           0x302f\n#define MASK_AMOADD_D            0xf800707f\n#define MATCH_AMOXOR_D           0x2000302f\n#define MASK_AMOXOR_D            0xf800707f\n#define MATCH_AMOOR_D            0x4000302f\n#define MASK_AMOOR_D             0xf800707f\n#define MATCH_AMOAND_D           0x6000302f\n#define MASK_AMOAND_D            0xf800707f\n#define MATCH_AMOMIN_D           0x8000302f\n#define MASK_AMOMIN_D            0xf800707f\n#define MATCH_AMOMAX_D           0xa000302f\n#define MASK_AMOMAX_D            0xf800707f\n#define MATCH_AMOMINU_D          0xc000302f\n#define MASK_AMOMINU_D           0xf800707f\n#define MATCH_AMOMAXU_D          0xe000302f\n#define MASK_AMOMAXU_D           0xf800707f\n#define MATCH_AMOSWAP_D          0x800302f\n#define MASK_AMOSWAP_D           0xf800707f\n#define MATCH_LR_D               0x1000302f\n#define MASK_LR_D                0xf9f0707f\n#define MATCH_SC_D               0x1800302f\n#define MASK_SC_D                0xf800707f\n#define MATCH_ECALL              0x73\n#define MASK_ECALL               0xffffffff\n#define MATCH_EBREAK             0x100073\n#define MASK_EBREAK              0xffffffff\n#define MATCH_URET               0x200073\n#define MASK_URET                0xffffffff\n#define MATCH_SRET               0x10200073\n#define MASK_SRET                0xffffffff\n#define MATCH_HRET               0x20200073\n#define MASK_HRET                0xffffffff\n#define MATCH_MRET               0x30200073\n#define MASK_MRET                0xffffffff\n#define MATCH_DRET               0x7b200073\n#define MASK_DRET                0xffffffff\n#define MATCH_SFENCE_VM          0x10400073\n#define MASK_SFENCE_VM           0xfff07fff\n#define MATCH_WFI                0x10500073\n#define MASK_WFI                 0xffffffff\n#define MATCH_CSRRW              0x1073\n#define MASK_CSRRW               0x707f\n#define MATCH_CSRRS              0x2073\n#define MASK_CSRRS               0x707f\n#define MATCH_CSRRC              0x3073\n#define MASK_CSRRC               0x707f\n#define MATCH_CSRRWI             0x5073\n#define MASK_CSRRWI              0x707f\n#define MATCH_CSRRSI             0x6073\n#define MASK_CSRRSI              0x707f\n#define MATCH_CSRRCI             0x7073\n#define MASK_CSRRCI              0x707f\n#define MATCH_FADD_S             0x53\n#define MASK_FADD_S              0xfe00007f\n#define MATCH_FSUB_S             0x8000053\n#define MASK_FSUB_S              0xfe00007f\n#define MATCH_FMUL_S             0x10000053\n#define MASK_FMUL_S              0xfe00007f\n#define MATCH_FDIV_S             0x18000053\n#define MASK_FDIV_S              0xfe00007f\n#define MATCH_FSGNJ_S            0x20000053\n#define MASK_FSGNJ_S             0xfe00707f\n#define MATCH_FSGNJN_S           0x20001053\n#define MASK_FSGNJN_S            0xfe00707f\n#define MATCH_FSGNJX_S           0x20002053\n#define MASK_FSGNJX_S            0xfe00707f\n#define MATCH_FMIN_S             0x28000053\n#define MASK_FMIN_S              0xfe00707f\n#define MATCH_FMAX_S             0x28001053\n#define MASK_FMAX_S              0xfe00707f\n#define MATCH_FSQRT_S            0x58000053\n#define MASK_FSQRT_S             0xfff0007f\n#define MATCH_FADD_D             0x2000053\n#define MASK_FADD_D              0xfe00007f\n#define MATCH_FSUB_D             0xa000053\n#define MASK_FSUB_D              0xfe00007f\n#define MATCH_FMUL_D             0x12000053\n#define MASK_FMUL_D              0xfe00007f\n#define MATCH_FDIV_D             0x1a000053\n#define MASK_FDIV_D              0xfe00007f\n#define MATCH_FSGNJ_D            0x22000053\n#define MASK_FSGNJ_D             0xfe00707f\n#define MATCH_FSGNJN_D           0x22001053\n#define MASK_FSGNJN_D            0xfe00707f\n#define MATCH_FSGNJX_D           0x22002053\n#define MASK_FSGNJX_D            0xfe00707f\n#define MATCH_FMIN_D             0x2a000053\n#define MASK_FMIN_D              0xfe00707f\n#define MATCH_FMAX_D             0x2a001053\n#define MASK_FMAX_D              0xfe00707f\n#define MATCH_FCVT_S_D           0x40100053\n#define MASK_FCVT_S_D            0xfff0007f\n#define MATCH_FCVT_D_S           0x42000053\n#define MASK_FCVT_D_S            0xfff0007f\n#define MATCH_FSQRT_D            0x5a000053\n#define MASK_FSQRT_D             0xfff0007f\n#define MATCH_FLE_S              0xa0000053\n#define MASK_FLE_S               0xfe00707f\n#define MATCH_FLT_S              0xa0001053\n#define MASK_FLT_S               0xfe00707f\n#define MATCH_FEQ_S              0xa0002053\n#define MASK_FEQ_S               0xfe00707f\n#define MATCH_FLE_D              0xa2000053\n#define MASK_FLE_D               0xfe00707f\n#define MATCH_FLT_D              0xa2001053\n#define MASK_FLT_D               0xfe00707f\n#define MATCH_FEQ_D              0xa2002053\n#define MASK_FEQ_D               0xfe00707f\n#define MATCH_FCVT_W_S           0xc0000053\n#define MASK_FCVT_W_S            0xfff0007f\n#define MATCH_FCVT_WU_S          0xc0100053\n#define MASK_FCVT_WU_S           0xfff0007f\n#define MATCH_FCVT_L_S           0xc0200053\n#define MASK_FCVT_L_S            0xfff0007f\n#define MATCH_FCVT_LU_S          0xc0300053\n#define MASK_FCVT_LU_S           0xfff0007f\n#define MATCH_FMV_X_S            0xe0000053\n#define MASK_FMV_X_S             0xfff0707f\n#define MATCH_FCLASS_S           0xe0001053\n#define MASK_FCLASS_S            0xfff0707f\n#define MATCH_FCVT_W_D           0xc2000053\n#define MASK_FCVT_W_D            0xfff0007f\n#define MATCH_FCVT_WU_D          0xc2100053\n#define MASK_FCVT_WU_D           0xfff0007f\n#define MATCH_FCVT_L_D           0xc2200053\n#define MASK_FCVT_L_D            0xfff0007f\n#define MATCH_FCVT_LU_D          0xc2300053\n#define MASK_FCVT_LU_D           0xfff0007f\n#define MATCH_FMV_X_D            0xe2000053\n#define MASK_FMV_X_D             0xfff0707f\n#define MATCH_FCLASS_D           0xe2001053\n#define MASK_FCLASS_D            0xfff0707f\n#define MATCH_FCVT_S_W           0xd0000053\n#define MASK_FCVT_S_W            0xfff0007f\n#define MATCH_FCVT_S_WU          0xd0100053\n#define MASK_FCVT_S_WU           0xfff0007f\n#define MATCH_FCVT_S_L           0xd0200053\n#define MASK_FCVT_S_L            0xfff0007f\n#define MATCH_FCVT_S_LU          0xd0300053\n#define MASK_FCVT_S_LU           0xfff0007f\n#define MATCH_FMV_S_X            0xf0000053\n#define MASK_FMV_S_X             0xfff0707f\n#define MATCH_FCVT_D_W           0xd2000053\n#define MASK_FCVT_D_W            0xfff0007f\n#define MATCH_FCVT_D_WU          0xd2100053\n#define MASK_FCVT_D_WU           0xfff0007f\n#define MATCH_FCVT_D_L           0xd2200053\n#define MASK_FCVT_D_L            0xfff0007f\n#define MATCH_FCVT_D_LU          0xd2300053\n#define MASK_FCVT_D_LU           0xfff0007f\n#define MATCH_FMV_D_X            0xf2000053\n#define MASK_FMV_D_X             0xfff0707f\n#define MATCH_FLW                0x2007\n#define MASK_FLW                 0x707f\n#define MATCH_FLD                0x3007\n#define MASK_FLD                 0x707f\n#define MATCH_FSW                0x2027\n#define MASK_FSW                 0x707f\n#define MATCH_FSD                0x3027\n#define MASK_FSD                 0x707f\n#define MATCH_FMADD_S            0x43\n#define MASK_FMADD_S             0x600007f\n#define MATCH_FMSUB_S            0x47\n#define MASK_FMSUB_S             0x600007f\n#define MATCH_FNMSUB_S           0x4b\n#define MASK_FNMSUB_S            0x600007f\n#define MATCH_FNMADD_S           0x4f\n#define MASK_FNMADD_S            0x600007f\n#define MATCH_FMADD_D            0x2000043\n#define MASK_FMADD_D             0x600007f\n#define MATCH_FMSUB_D            0x2000047\n#define MASK_FMSUB_D             0x600007f\n#define MATCH_FNMSUB_D           0x200004b\n#define MASK_FNMSUB_D            0x600007f\n#define MATCH_FNMADD_D           0x200004f\n#define MASK_FNMADD_D            0x600007f\n#define MATCH_C_NOP              0x1\n#define MASK_C_NOP               0xffff\n#define MATCH_C_ADDI16SP         0x6101\n#define MASK_C_ADDI16SP          0xef83\n#define MATCH_C_JR               0x8002\n#define MASK_C_JR                0xf07f\n#define MATCH_C_JALR             0x9002\n#define MASK_C_JALR              0xf07f\n#define MATCH_C_EBREAK           0x9002\n#define MASK_C_EBREAK            0xffff\n#define MATCH_C_LD               0x6000\n#define MASK_C_LD                0xe003\n#define MATCH_C_SD               0xe000\n#define MASK_C_SD                0xe003\n#define MATCH_C_ADDIW            0x2001\n#define MASK_C_ADDIW             0xe003\n#define MATCH_C_LDSP             0x6002\n#define MASK_C_LDSP              0xe003\n#define MATCH_C_SDSP             0xe002\n#define MASK_C_SDSP              0xe003\n#define MATCH_C_ADDI4SPN         0x0\n#define MASK_C_ADDI4SPN          0xe003\n#define MATCH_C_FLD              0x2000\n#define MASK_C_FLD               0xe003\n#define MATCH_C_LW               0x4000\n#define MASK_C_LW                0xe003\n#define MATCH_C_FLW              0x6000\n#define MASK_C_FLW               0xe003\n#define MATCH_C_FSD              0xa000\n#define MASK_C_FSD               0xe003\n#define MATCH_C_SW               0xc000\n#define MASK_C_SW                0xe003\n#define MATCH_C_FSW              0xe000\n#define MASK_C_FSW               0xe003\n#define MATCH_C_ADDI             0x1\n#define MASK_C_ADDI              0xe003\n#define MATCH_C_JAL              0x2001\n#define MASK_C_JAL               0xe003\n#define MATCH_C_LI               0x4001\n#define MASK_C_LI                0xe003\n#define MATCH_C_LUI              0x6001\n#define MASK_C_LUI               0xe003\n#define MATCH_C_SRLI             0x8001\n#define MASK_C_SRLI              0xec03\n#define MATCH_C_SRAI             0x8401\n#define MASK_C_SRAI              0xec03\n#define MATCH_C_ANDI             0x8801\n#define MASK_C_ANDI              0xec03\n#define MATCH_C_SUB              0x8c01\n#define MASK_C_SUB               0xfc63\n#define MATCH_C_XOR              0x8c21\n#define MASK_C_XOR               0xfc63\n#define MATCH_C_OR               0x8c41\n#define MASK_C_OR                0xfc63\n#define MATCH_C_AND              0x8c61\n#define MASK_C_AND               0xfc63\n#define MATCH_C_SUBW             0x9c01\n#define MASK_C_SUBW              0xfc63\n#define MATCH_C_ADDW             0x9c21\n#define MASK_C_ADDW              0xfc63\n#define MATCH_C_J                0xa001\n#define MASK_C_J                 0xe003\n#define MATCH_C_BEQZ             0xc001\n#define MASK_C_BEQZ              0xe003\n#define MATCH_C_BNEZ             0xe001\n#define MASK_C_BNEZ              0xe003\n#define MATCH_C_SLLI             0x2\n#define MASK_C_SLLI              0xe003\n#define MATCH_C_FLDSP            0x2002\n#define MASK_C_FLDSP             0xe003\n#define MATCH_C_LWSP             0x4002\n#define MASK_C_LWSP              0xe003\n#define MATCH_C_FLWSP            0x6002\n#define MASK_C_FLWSP             0xe003\n#define MATCH_C_MV               0x8002\n#define MASK_C_MV                0xf003\n#define MATCH_C_ADD              0x9002\n#define MASK_C_ADD               0xf003\n#define MATCH_C_FSDSP            0xa002\n#define MASK_C_FSDSP             0xe003\n#define MATCH_C_SWSP             0xc002\n#define MASK_C_SWSP              0xe003\n#define MATCH_C_FSWSP            0xe002\n#define MASK_C_FSWSP             0xe003\n#define MATCH_CUSTOM0            0xb\n#define MASK_CUSTOM0             0x707f\n#define MATCH_CUSTOM0_RS1        0x200b\n#define MASK_CUSTOM0_RS1         0x707f\n#define MATCH_CUSTOM0_RS1_RS2    0x300b\n#define MASK_CUSTOM0_RS1_RS2     0x707f\n#define MATCH_CUSTOM0_RD         0x400b\n#define MASK_CUSTOM0_RD          0x707f\n#define MATCH_CUSTOM0_RD_RS1     0x600b\n#define MASK_CUSTOM0_RD_RS1      0x707f\n#define MATCH_CUSTOM0_RD_RS1_RS2 0x700b\n#define MASK_CUSTOM0_RD_RS1_RS2  0x707f\n#define MATCH_CUSTOM1            0x2b\n#define MASK_CUSTOM1             0x707f\n#define MATCH_CUSTOM1_RS1        0x202b\n#define MASK_CUSTOM1_RS1         0x707f\n#define MATCH_CUSTOM1_RS1_RS2    0x302b\n#define MASK_CUSTOM1_RS1_RS2     0x707f\n#define MATCH_CUSTOM1_RD         0x402b\n#define MASK_CUSTOM1_RD          0x707f\n#define MATCH_CUSTOM1_RD_RS1     0x602b\n#define MASK_CUSTOM1_RD_RS1      0x707f\n#define MATCH_CUSTOM1_RD_RS1_RS2 0x702b\n#define MASK_CUSTOM1_RD_RS1_RS2  0x707f\n#define MATCH_CUSTOM2            0x5b\n#define MASK_CUSTOM2             0x707f\n#define MATCH_CUSTOM2_RS1        0x205b\n#define MASK_CUSTOM2_RS1         0x707f\n#define MATCH_CUSTOM2_RS1_RS2    0x305b\n#define MASK_CUSTOM2_RS1_RS2     0x707f\n#define MATCH_CUSTOM2_RD         0x405b\n#define MASK_CUSTOM2_RD          0x707f\n#define MATCH_CUSTOM2_RD_RS1     0x605b\n#define MASK_CUSTOM2_RD_RS1      0x707f\n#define MATCH_CUSTOM2_RD_RS1_RS2 0x705b\n#define MASK_CUSTOM2_RD_RS1_RS2  0x707f\n#define MATCH_CUSTOM3            0x7b\n#define MASK_CUSTOM3             0x707f\n#define MATCH_CUSTOM3_RS1        0x207b\n#define MASK_CUSTOM3_RS1         0x707f\n#define MATCH_CUSTOM3_RS1_RS2    0x307b\n#define MASK_CUSTOM3_RS1_RS2     0x707f\n#define MATCH_CUSTOM3_RD         0x407b\n#define MASK_CUSTOM3_RD          0x707f\n#define MATCH_CUSTOM3_RD_RS1     0x607b\n#define MASK_CUSTOM3_RD_RS1      0x707f\n#define MATCH_CUSTOM3_RD_RS1_RS2 0x707b\n#define MASK_CUSTOM3_RD_RS1_RS2  0x707f\n#define CSR_FFLAGS               0x1\n#define CSR_FRM                  0x2\n#define CSR_FCSR                 0x3\n#define CSR_CYCLE                0xc00\n#define CSR_TIME                 0xc01\n#define CSR_INSTRET              0xc02\n#define CSR_HPMCOUNTER3          0xc03\n#define CSR_HPMCOUNTER4          0xc04\n#define CSR_HPMCOUNTER5          0xc05\n#define CSR_HPMCOUNTER6          0xc06\n#define CSR_HPMCOUNTER7          0xc07\n#define CSR_HPMCOUNTER8          0xc08\n#define CSR_HPMCOUNTER9          0xc09\n#define CSR_HPMCOUNTER10         0xc0a\n#define CSR_HPMCOUNTER11         0xc0b\n#define CSR_HPMCOUNTER12         0xc0c\n#define CSR_HPMCOUNTER13         0xc0d\n#define CSR_HPMCOUNTER14         0xc0e\n#define CSR_HPMCOUNTER15         0xc0f\n#define CSR_HPMCOUNTER16         0xc10\n#define CSR_HPMCOUNTER17         0xc11\n#define CSR_HPMCOUNTER18         0xc12\n#define CSR_HPMCOUNTER19         0xc13\n#define CSR_HPMCOUNTER20         0xc14\n#define CSR_HPMCOUNTER21         0xc15\n#define CSR_HPMCOUNTER22         0xc16\n#define CSR_HPMCOUNTER23         0xc17\n#define CSR_HPMCOUNTER24         0xc18\n#define CSR_HPMCOUNTER25         0xc19\n#define CSR_HPMCOUNTER26         0xc1a\n#define CSR_HPMCOUNTER27         0xc1b\n#define CSR_HPMCOUNTER28         0xc1c\n#define CSR_HPMCOUNTER29         0xc1d\n#define CSR_HPMCOUNTER30         0xc1e\n#define CSR_HPMCOUNTER31         0xc1f\n#define CSR_SSTATUS              0x100\n#define CSR_SIE                  0x104\n#define CSR_STVEC                0x105\n#define CSR_SSCRATCH             0x140\n#define CSR_SEPC                 0x141\n#define CSR_SCAUSE               0x142\n#define CSR_SBADADDR             0x143\n#define CSR_SIP                  0x144\n#define CSR_SPTBR                0x180\n#define CSR_MSTATUS              0x300\n#define CSR_MISA                 0x301\n#define CSR_MEDELEG              0x302\n#define CSR_MIDELEG              0x303\n#define CSR_MIE                  0x304\n#define CSR_MTVEC                0x305\n#define CSR_MCOUNTEREN           0x306\n#define CSR_MSCRATCH             0x340\n#define CSR_MEPC                 0x341\n#define CSR_MCAUSE               0x342\n#define CSR_MBADADDR             0x343\n#define CSR_MIP                  0x344\n#define CSR_TSELECT              0x7a0\n#define CSR_TDATA1               0x7a1\n#define CSR_TDATA2               0x7a2\n#define CSR_TDATA3               0x7a3\n#define CSR_DCSR                 0x7b0\n#define CSR_DPC                  0x7b1\n#define CSR_DSCRATCH             0x7b2\n#define CSR_MCYCLE               0xb00\n#define CSR_MINSTRET             0xb02\n#define CSR_MHPMCOUNTER3         0xb03\n#define CSR_MHPMCOUNTER4         0xb04\n#define CSR_MHPMCOUNTER5         0xb05\n#define CSR_MHPMCOUNTER6         0xb06\n#define CSR_MHPMCOUNTER7         0xb07\n#define CSR_MHPMCOUNTER8         0xb08\n#define CSR_MHPMCOUNTER9         0xb09\n#define CSR_MHPMCOUNTER10        0xb0a\n#define CSR_MHPMCOUNTER11        0xb0b\n#define CSR_MHPMCOUNTER12        0xb0c\n#define CSR_MHPMCOUNTER13        0xb0d\n#define CSR_MHPMCOUNTER14        0xb0e\n#define CSR_MHPMCOUNTER15        0xb0f\n#define CSR_MHPMCOUNTER16        0xb10\n#define CSR_MHPMCOUNTER17        0xb11\n#define CSR_MHPMCOUNTER18        0xb12\n#define CSR_MHPMCOUNTER19        0xb13\n#define CSR_MHPMCOUNTER20        0xb14\n#define CSR_MHPMCOUNTER21        0xb15\n#define CSR_MHPMCOUNTER22        0xb16\n#define CSR_MHPMCOUNTER23        0xb17\n#define CSR_MHPMCOUNTER24        0xb18\n#define CSR_MHPMCOUNTER25        0xb19\n#define CSR_MHPMCOUNTER26        0xb1a\n#define CSR_MHPMCOUNTER27        0xb1b\n#define CSR_MHPMCOUNTER28        0xb1c\n#define CSR_MHPMCOUNTER29        0xb1d\n#define CSR_MHPMCOUNTER30        0xb1e\n#define CSR_MHPMCOUNTER31        0xb1f\n#define CSR_MUCOUNTEREN          0x320\n#define CSR_MSCOUNTEREN          0x321\n#define CSR_MHPMEVENT3           0x323\n#define CSR_MHPMEVENT4           0x324\n#define CSR_MHPMEVENT5           0x325\n#define CSR_MHPMEVENT6           0x326\n#define CSR_MHPMEVENT7           0x327\n#define CSR_MHPMEVENT8           0x328\n#define CSR_MHPMEVENT9           0x329\n#define CSR_MHPMEVENT10          0x32a\n#define CSR_MHPMEVENT11          0x32b\n#define CSR_MHPMEVENT12          0x32c\n#define CSR_MHPMEVENT13          0x32d\n#define CSR_MHPMEVENT14          0x32e\n#define CSR_MHPMEVENT15          0x32f\n#define CSR_MHPMEVENT16          0x330\n#define CSR_MHPMEVENT17          0x331\n#define CSR_MHPMEVENT18          0x332\n#define CSR_MHPMEVENT19          0x333\n#define CSR_MHPMEVENT20          0x334\n#define CSR_MHPMEVENT21          0x335\n#define CSR_MHPMEVENT22          0x336\n#define CSR_MHPMEVENT23          0x337\n#define CSR_MHPMEVENT24          0x338\n#define CSR_MHPMEVENT25          0x339\n#define CSR_MHPMEVENT26          0x33a\n#define CSR_MHPMEVENT27          0x33b\n#define CSR_MHPMEVENT28          0x33c\n#define CSR_MHPMEVENT29          0x33d\n#define CSR_MHPMEVENT30          0x33e\n#define CSR_MHPMEVENT31          0x33f\n#define CSR_MVENDORID            0xf11\n#define CSR_MARCHID              0xf12\n#define CSR_MIMPID               0xf13\n#define CSR_MHARTID              0xf14\n#define CSR_CYCLEH               0xc80\n#define CSR_TIMEH                0xc81\n#define CSR_INSTRETH             0xc82\n#define CSR_HPMCOUNTER3H         0xc83\n#define CSR_HPMCOUNTER4H         0xc84\n#define CSR_HPMCOUNTER5H         0xc85\n#define CSR_HPMCOUNTER6H         0xc86\n#define CSR_HPMCOUNTER7H         0xc87\n#define CSR_HPMCOUNTER8H         0xc88\n#define CSR_HPMCOUNTER9H         0xc89\n#define CSR_HPMCOUNTER10H        0xc8a\n#define CSR_HPMCOUNTER11H        0xc8b\n#define CSR_HPMCOUNTER12H        0xc8c\n#define CSR_HPMCOUNTER13H        0xc8d\n#define CSR_HPMCOUNTER14H        0xc8e\n#define CSR_HPMCOUNTER15H        0xc8f\n#define CSR_HPMCOUNTER16H        0xc90\n#define CSR_HPMCOUNTER17H        0xc91\n#define CSR_HPMCOUNTER18H        0xc92\n#define CSR_HPMCOUNTER19H        0xc93\n#define CSR_HPMCOUNTER20H        0xc94\n#define CSR_HPMCOUNTER21H        0xc95\n#define CSR_HPMCOUNTER22H        0xc96\n#define CSR_HPMCOUNTER23H        0xc97\n#define CSR_HPMCOUNTER24H        0xc98\n#define CSR_HPMCOUNTER25H        0xc99\n#define CSR_HPMCOUNTER26H        0xc9a\n#define CSR_HPMCOUNTER27H        0xc9b\n#define CSR_HPMCOUNTER28H        0xc9c\n#define CSR_HPMCOUNTER29H        0xc9d\n#define CSR_HPMCOUNTER30H        0xc9e\n#define CSR_HPMCOUNTER31H        0xc9f\n#define CSR_MCYCLEH              0xb80\n#define CSR_MINSTRETH            0xb82\n#define CSR_MHPMCOUNTER3H        0xb83\n#define CSR_MHPMCOUNTER4H        0xb84\n#define CSR_MHPMCOUNTER5H        0xb85\n#define CSR_MHPMCOUNTER6H        0xb86\n#define CSR_MHPMCOUNTER7H        0xb87\n#define CSR_MHPMCOUNTER8H        0xb88\n#define CSR_MHPMCOUNTER9H        0xb89\n#define CSR_MHPMCOUNTER10H       0xb8a\n#define CSR_MHPMCOUNTER11H       0xb8b\n#define CSR_MHPMCOUNTER12H       0xb8c\n#define CSR_MHPMCOUNTER13H       0xb8d\n#define CSR_MHPMCOUNTER14H       0xb8e\n#define CSR_MHPMCOUNTER15H       0xb8f\n#define CSR_MHPMCOUNTER16H       0xb90\n#define CSR_MHPMCOUNTER17H       0xb91\n#define CSR_MHPMCOUNTER18H       0xb92\n#define CSR_MHPMCOUNTER19H       0xb93\n#define CSR_MHPMCOUNTER20H       0xb94\n#define CSR_MHPMCOUNTER21H       0xb95\n#define CSR_MHPMCOUNTER22H       0xb96\n#define CSR_MHPMCOUNTER23H       0xb97\n#define CSR_MHPMCOUNTER24H       0xb98\n#define CSR_MHPMCOUNTER25H       0xb99\n#define CSR_MHPMCOUNTER26H       0xb9a\n#define CSR_MHPMCOUNTER27H       0xb9b\n#define CSR_MHPMCOUNTER28H       0xb9c\n#define CSR_MHPMCOUNTER29H       0xb9d\n#define CSR_MHPMCOUNTER30H       0xb9e\n#define CSR_MHPMCOUNTER31H       0xb9f\n\n#define CSR_MTVT  0x307\n#define CSR_MNXTI 0x345\n\n#define CSR_MCOUNTINHIBIT 0x320\n\n#define CSR_MNVEC 0x7C3\n\n#define CSR_MTVT2      0x7EC\n#define CSR_JALMNXTI   0x7ED\n#define CSR_PUSHMCAUSE 0x7EE\n#define CSR_PUSHMEPC   0x7EF\n#define CSR_PUSHMSUBM  0x7EB\n\n#define CSR_WFE        0x810\n#define CSR_SLEEPVALUE 0x811\n#define CSR_TXEVT      0x812\n\n#define CSR_MMISC_CTL 0x7d0\n#define CSR_MSUBM     0x7c4\n\n#define CAUSE_MISALIGNED_FETCH    0x0\n#define CAUSE_FAULT_FETCH         0x1\n#define CAUSE_ILLEGAL_INSTRUCTION 0x2\n#define CAUSE_BREAKPOINT          0x3\n#define CAUSE_MISALIGNED_LOAD     0x4\n#define CAUSE_FAULT_LOAD          0x5\n#define CAUSE_MISALIGNED_STORE    0x6\n#define CAUSE_FAULT_STORE         0x7\n#define CAUSE_USER_ECALL          0x8\n#define CAUSE_SUPERVISOR_ECALL    0x9\n#define CAUSE_HYPERVISOR_ECALL    0xa\n#define CAUSE_MACHINE_ECALL       0xb\n#endif\n#ifdef DECLARE_INSN\nDECLARE_INSN(beq, MATCH_BEQ, MASK_BEQ)\nDECLARE_INSN(bne, MATCH_BNE, MASK_BNE)\nDECLARE_INSN(blt, MATCH_BLT, MASK_BLT)\nDECLARE_INSN(bge, MATCH_BGE, MASK_BGE)\nDECLARE_INSN(bltu, MATCH_BLTU, MASK_BLTU)\nDECLARE_INSN(bgeu, MATCH_BGEU, MASK_BGEU)\nDECLARE_INSN(jalr, MATCH_JALR, MASK_JALR)\nDECLARE_INSN(jal, MATCH_JAL, MASK_JAL)\nDECLARE_INSN(lui, MATCH_LUI, MASK_LUI)\nDECLARE_INSN(auipc, MATCH_AUIPC, MASK_AUIPC)\nDECLARE_INSN(addi, MATCH_ADDI, MASK_ADDI)\nDECLARE_INSN(slli, MATCH_SLLI, MASK_SLLI)\nDECLARE_INSN(slti, MATCH_SLTI, MASK_SLTI)\nDECLARE_INSN(sltiu, MATCH_SLTIU, MASK_SLTIU)\nDECLARE_INSN(xori, MATCH_XORI, MASK_XORI)\nDECLARE_INSN(srli, MATCH_SRLI, MASK_SRLI)\nDECLARE_INSN(srai, MATCH_SRAI, MASK_SRAI)\nDECLARE_INSN(ori, MATCH_ORI, MASK_ORI)\nDECLARE_INSN(andi, MATCH_ANDI, MASK_ANDI)\nDECLARE_INSN(add, MATCH_ADD, MASK_ADD)\nDECLARE_INSN(sub, MATCH_SUB, MASK_SUB)\nDECLARE_INSN(sll, MATCH_SLL, MASK_SLL)\nDECLARE_INSN(slt, MATCH_SLT, MASK_SLT)\nDECLARE_INSN(sltu, MATCH_SLTU, MASK_SLTU)\nDECLARE_INSN(xor, MATCH_XOR, MASK_XOR)\nDECLARE_INSN(srl, MATCH_SRL, MASK_SRL)\nDECLARE_INSN(sra, MATCH_SRA, MASK_SRA)\nDECLARE_INSN(or, MATCH_OR, MASK_OR)\nDECLARE_INSN(and, MATCH_AND, MASK_AND)\nDECLARE_INSN(addiw, MATCH_ADDIW, MASK_ADDIW)\nDECLARE_INSN(slliw, MATCH_SLLIW, MASK_SLLIW)\nDECLARE_INSN(srliw, MATCH_SRLIW, MASK_SRLIW)\nDECLARE_INSN(sraiw, MATCH_SRAIW, MASK_SRAIW)\nDECLARE_INSN(addw, MATCH_ADDW, MASK_ADDW)\nDECLARE_INSN(subw, MATCH_SUBW, MASK_SUBW)\nDECLARE_INSN(sllw, MATCH_SLLW, MASK_SLLW)\nDECLARE_INSN(srlw, MATCH_SRLW, MASK_SRLW)\nDECLARE_INSN(sraw, MATCH_SRAW, MASK_SRAW)\nDECLARE_INSN(lb, MATCH_LB, MASK_LB)\nDECLARE_INSN(lh, MATCH_LH, MASK_LH)\nDECLARE_INSN(lw, MATCH_LW, MASK_LW)\nDECLARE_INSN(ld, MATCH_LD, MASK_LD)\nDECLARE_INSN(lbu, MATCH_LBU, MASK_LBU)\nDECLARE_INSN(lhu, MATCH_LHU, MASK_LHU)\nDECLARE_INSN(lwu, MATCH_LWU, MASK_LWU)\nDECLARE_INSN(sb, MATCH_SB, MASK_SB)\nDECLARE_INSN(sh, MATCH_SH, MASK_SH)\nDECLARE_INSN(sw, MATCH_SW, MASK_SW)\nDECLARE_INSN(sd, MATCH_SD, MASK_SD)\nDECLARE_INSN(fence, MATCH_FENCE, MASK_FENCE)\nDECLARE_INSN(fence_i, MATCH_FENCE_I, MASK_FENCE_I)\nDECLARE_INSN(mul, MATCH_MUL, MASK_MUL)\nDECLARE_INSN(mulh, MATCH_MULH, MASK_MULH)\nDECLARE_INSN(mulhsu, MATCH_MULHSU, MASK_MULHSU)\nDECLARE_INSN(mulhu, MATCH_MULHU, MASK_MULHU)\nDECLARE_INSN(div, MATCH_DIV, MASK_DIV)\nDECLARE_INSN(divu, MATCH_DIVU, MASK_DIVU)\nDECLARE_INSN(rem, MATCH_REM, MASK_REM)\nDECLARE_INSN(remu, MATCH_REMU, MASK_REMU)\nDECLARE_INSN(mulw, MATCH_MULW, MASK_MULW)\nDECLARE_INSN(divw, MATCH_DIVW, MASK_DIVW)\nDECLARE_INSN(divuw, MATCH_DIVUW, MASK_DIVUW)\nDECLARE_INSN(remw, MATCH_REMW, MASK_REMW)\nDECLARE_INSN(remuw, MATCH_REMUW, MASK_REMUW)\nDECLARE_INSN(amoadd_w, MATCH_AMOADD_W, MASK_AMOADD_W)\nDECLARE_INSN(amoxor_w, MATCH_AMOXOR_W, MASK_AMOXOR_W)\nDECLARE_INSN(amoor_w, MATCH_AMOOR_W, MASK_AMOOR_W)\nDECLARE_INSN(amoand_w, MATCH_AMOAND_W, MASK_AMOAND_W)\nDECLARE_INSN(amomin_w, MATCH_AMOMIN_W, MASK_AMOMIN_W)\nDECLARE_INSN(amomax_w, MATCH_AMOMAX_W, MASK_AMOMAX_W)\nDECLARE_INSN(amominu_w, MATCH_AMOMINU_W, MASK_AMOMINU_W)\nDECLARE_INSN(amomaxu_w, MATCH_AMOMAXU_W, MASK_AMOMAXU_W)\nDECLARE_INSN(amoswap_w, MATCH_AMOSWAP_W, MASK_AMOSWAP_W)\nDECLARE_INSN(lr_w, MATCH_LR_W, MASK_LR_W)\nDECLARE_INSN(sc_w, MATCH_SC_W, MASK_SC_W)\nDECLARE_INSN(amoadd_d, MATCH_AMOADD_D, MASK_AMOADD_D)\nDECLARE_INSN(amoxor_d, MATCH_AMOXOR_D, MASK_AMOXOR_D)\nDECLARE_INSN(amoor_d, MATCH_AMOOR_D, MASK_AMOOR_D)\nDECLARE_INSN(amoand_d, MATCH_AMOAND_D, MASK_AMOAND_D)\nDECLARE_INSN(amomin_d, MATCH_AMOMIN_D, MASK_AMOMIN_D)\nDECLARE_INSN(amomax_d, MATCH_AMOMAX_D, MASK_AMOMAX_D)\nDECLARE_INSN(amominu_d, MATCH_AMOMINU_D, MASK_AMOMINU_D)\nDECLARE_INSN(amomaxu_d, MATCH_AMOMAXU_D, MASK_AMOMAXU_D)\nDECLARE_INSN(amoswap_d, MATCH_AMOSWAP_D, MASK_AMOSWAP_D)\nDECLARE_INSN(lr_d, MATCH_LR_D, MASK_LR_D)\nDECLARE_INSN(sc_d, MATCH_SC_D, MASK_SC_D)\nDECLARE_INSN(ecall, MATCH_ECALL, MASK_ECALL)\nDECLARE_INSN(ebreak, MATCH_EBREAK, MASK_EBREAK)\nDECLARE_INSN(uret, MATCH_URET, MASK_URET)\nDECLARE_INSN(sret, MATCH_SRET, MASK_SRET)\nDECLARE_INSN(hret, MATCH_HRET, MASK_HRET)\nDECLARE_INSN(mret, MATCH_MRET, MASK_MRET)\nDECLARE_INSN(dret, MATCH_DRET, MASK_DRET)\nDECLARE_INSN(sfence_vm, MATCH_SFENCE_VM, MASK_SFENCE_VM)\nDECLARE_INSN(wfi, MATCH_WFI, MASK_WFI)\nDECLARE_INSN(csrrw, MATCH_CSRRW, MASK_CSRRW)\nDECLARE_INSN(csrrs, MATCH_CSRRS, MASK_CSRRS)\nDECLARE_INSN(csrrc, MATCH_CSRRC, MASK_CSRRC)\nDECLARE_INSN(csrrwi, MATCH_CSRRWI, MASK_CSRRWI)\nDECLARE_INSN(csrrsi, MATCH_CSRRSI, MASK_CSRRSI)\nDECLARE_INSN(csrrci, MATCH_CSRRCI, MASK_CSRRCI)\nDECLARE_INSN(fadd_s, MATCH_FADD_S, MASK_FADD_S)\nDECLARE_INSN(fsub_s, MATCH_FSUB_S, MASK_FSUB_S)\nDECLARE_INSN(fmul_s, MATCH_FMUL_S, MASK_FMUL_S)\nDECLARE_INSN(fdiv_s, MATCH_FDIV_S, MASK_FDIV_S)\nDECLARE_INSN(fsgnj_s, MATCH_FSGNJ_S, MASK_FSGNJ_S)\nDECLARE_INSN(fsgnjn_s, MATCH_FSGNJN_S, MASK_FSGNJN_S)\nDECLARE_INSN(fsgnjx_s, MATCH_FSGNJX_S, MASK_FSGNJX_S)\nDECLARE_INSN(fmin_s, MATCH_FMIN_S, MASK_FMIN_S)\nDECLARE_INSN(fmax_s, MATCH_FMAX_S, MASK_FMAX_S)\nDECLARE_INSN(fsqrt_s, MATCH_FSQRT_S, MASK_FSQRT_S)\nDECLARE_INSN(fadd_d, MATCH_FADD_D, MASK_FADD_D)\nDECLARE_INSN(fsub_d, MATCH_FSUB_D, MASK_FSUB_D)\nDECLARE_INSN(fmul_d, MATCH_FMUL_D, MASK_FMUL_D)\nDECLARE_INSN(fdiv_d, MATCH_FDIV_D, MASK_FDIV_D)\nDECLARE_INSN(fsgnj_d, MATCH_FSGNJ_D, MASK_FSGNJ_D)\nDECLARE_INSN(fsgnjn_d, MATCH_FSGNJN_D, MASK_FSGNJN_D)\nDECLARE_INSN(fsgnjx_d, MATCH_FSGNJX_D, MASK_FSGNJX_D)\nDECLARE_INSN(fmin_d, MATCH_FMIN_D, MASK_FMIN_D)\nDECLARE_INSN(fmax_d, MATCH_FMAX_D, MASK_FMAX_D)\nDECLARE_INSN(fcvt_s_d, MATCH_FCVT_S_D, MASK_FCVT_S_D)\nDECLARE_INSN(fcvt_d_s, MATCH_FCVT_D_S, MASK_FCVT_D_S)\nDECLARE_INSN(fsqrt_d, MATCH_FSQRT_D, MASK_FSQRT_D)\nDECLARE_INSN(fle_s, MATCH_FLE_S, MASK_FLE_S)\nDECLARE_INSN(flt_s, MATCH_FLT_S, MASK_FLT_S)\nDECLARE_INSN(feq_s, MATCH_FEQ_S, MASK_FEQ_S)\nDECLARE_INSN(fle_d, MATCH_FLE_D, MASK_FLE_D)\nDECLARE_INSN(flt_d, MATCH_FLT_D, MASK_FLT_D)\nDECLARE_INSN(feq_d, MATCH_FEQ_D, MASK_FEQ_D)\nDECLARE_INSN(fcvt_w_s, MATCH_FCVT_W_S, MASK_FCVT_W_S)\nDECLARE_INSN(fcvt_wu_s, MATCH_FCVT_WU_S, MASK_FCVT_WU_S)\nDECLARE_INSN(fcvt_l_s, MATCH_FCVT_L_S, MASK_FCVT_L_S)\nDECLARE_INSN(fcvt_lu_s, MATCH_FCVT_LU_S, MASK_FCVT_LU_S)\nDECLARE_INSN(fmv_x_s, MATCH_FMV_X_S, MASK_FMV_X_S)\nDECLARE_INSN(fclass_s, MATCH_FCLASS_S, MASK_FCLASS_S)\nDECLARE_INSN(fcvt_w_d, MATCH_FCVT_W_D, MASK_FCVT_W_D)\nDECLARE_INSN(fcvt_wu_d, MATCH_FCVT_WU_D, MASK_FCVT_WU_D)\nDECLARE_INSN(fcvt_l_d, MATCH_FCVT_L_D, MASK_FCVT_L_D)\nDECLARE_INSN(fcvt_lu_d, MATCH_FCVT_LU_D, MASK_FCVT_LU_D)\nDECLARE_INSN(fmv_x_d, MATCH_FMV_X_D, MASK_FMV_X_D)\nDECLARE_INSN(fclass_d, MATCH_FCLASS_D, MASK_FCLASS_D)\nDECLARE_INSN(fcvt_s_w, MATCH_FCVT_S_W, MASK_FCVT_S_W)\nDECLARE_INSN(fcvt_s_wu, MATCH_FCVT_S_WU, MASK_FCVT_S_WU)\nDECLARE_INSN(fcvt_s_l, MATCH_FCVT_S_L, MASK_FCVT_S_L)\nDECLARE_INSN(fcvt_s_lu, MATCH_FCVT_S_LU, MASK_FCVT_S_LU)\nDECLARE_INSN(fmv_s_x, MATCH_FMV_S_X, MASK_FMV_S_X)\nDECLARE_INSN(fcvt_d_w, MATCH_FCVT_D_W, MASK_FCVT_D_W)\nDECLARE_INSN(fcvt_d_wu, MATCH_FCVT_D_WU, MASK_FCVT_D_WU)\nDECLARE_INSN(fcvt_d_l, MATCH_FCVT_D_L, MASK_FCVT_D_L)\nDECLARE_INSN(fcvt_d_lu, MATCH_FCVT_D_LU, MASK_FCVT_D_LU)\nDECLARE_INSN(fmv_d_x, MATCH_FMV_D_X, MASK_FMV_D_X)\nDECLARE_INSN(flw, MATCH_FLW, MASK_FLW)\nDECLARE_INSN(fld, MATCH_FLD, MASK_FLD)\nDECLARE_INSN(fsw, MATCH_FSW, MASK_FSW)\nDECLARE_INSN(fsd, MATCH_FSD, MASK_FSD)\nDECLARE_INSN(fmadd_s, MATCH_FMADD_S, MASK_FMADD_S)\nDECLARE_INSN(fmsub_s, MATCH_FMSUB_S, MASK_FMSUB_S)\nDECLARE_INSN(fnmsub_s, MATCH_FNMSUB_S, MASK_FNMSUB_S)\nDECLARE_INSN(fnmadd_s, MATCH_FNMADD_S, MASK_FNMADD_S)\nDECLARE_INSN(fmadd_d, MATCH_FMADD_D, MASK_FMADD_D)\nDECLARE_INSN(fmsub_d, MATCH_FMSUB_D, MASK_FMSUB_D)\nDECLARE_INSN(fnmsub_d, MATCH_FNMSUB_D, MASK_FNMSUB_D)\nDECLARE_INSN(fnmadd_d, MATCH_FNMADD_D, MASK_FNMADD_D)\nDECLARE_INSN(c_nop, MATCH_C_NOP, MASK_C_NOP)\nDECLARE_INSN(c_addi16sp, MATCH_C_ADDI16SP, MASK_C_ADDI16SP)\nDECLARE_INSN(c_jr, MATCH_C_JR, MASK_C_JR)\nDECLARE_INSN(c_jalr, MATCH_C_JALR, MASK_C_JALR)\nDECLARE_INSN(c_ebreak, MATCH_C_EBREAK, MASK_C_EBREAK)\nDECLARE_INSN(c_ld, MATCH_C_LD, MASK_C_LD)\nDECLARE_INSN(c_sd, MATCH_C_SD, MASK_C_SD)\nDECLARE_INSN(c_addiw, MATCH_C_ADDIW, MASK_C_ADDIW)\nDECLARE_INSN(c_ldsp, MATCH_C_LDSP, MASK_C_LDSP)\nDECLARE_INSN(c_sdsp, MATCH_C_SDSP, MASK_C_SDSP)\nDECLARE_INSN(c_addi4spn, MATCH_C_ADDI4SPN, MASK_C_ADDI4SPN)\nDECLARE_INSN(c_fld, MATCH_C_FLD, MASK_C_FLD)\nDECLARE_INSN(c_lw, MATCH_C_LW, MASK_C_LW)\nDECLARE_INSN(c_flw, MATCH_C_FLW, MASK_C_FLW)\nDECLARE_INSN(c_fsd, MATCH_C_FSD, MASK_C_FSD)\nDECLARE_INSN(c_sw, MATCH_C_SW, MASK_C_SW)\nDECLARE_INSN(c_fsw, MATCH_C_FSW, MASK_C_FSW)\nDECLARE_INSN(c_addi, MATCH_C_ADDI, MASK_C_ADDI)\nDECLARE_INSN(c_jal, MATCH_C_JAL, MASK_C_JAL)\nDECLARE_INSN(c_li, MATCH_C_LI, MASK_C_LI)\nDECLARE_INSN(c_lui, MATCH_C_LUI, MASK_C_LUI)\nDECLARE_INSN(c_srli, MATCH_C_SRLI, MASK_C_SRLI)\nDECLARE_INSN(c_srai, MATCH_C_SRAI, MASK_C_SRAI)\nDECLARE_INSN(c_andi, MATCH_C_ANDI, MASK_C_ANDI)\nDECLARE_INSN(c_sub, MATCH_C_SUB, MASK_C_SUB)\nDECLARE_INSN(c_xor, MATCH_C_XOR, MASK_C_XOR)\nDECLARE_INSN(c_or, MATCH_C_OR, MASK_C_OR)\nDECLARE_INSN(c_and, MATCH_C_AND, MASK_C_AND)\nDECLARE_INSN(c_subw, MATCH_C_SUBW, MASK_C_SUBW)\nDECLARE_INSN(c_addw, MATCH_C_ADDW, MASK_C_ADDW)\nDECLARE_INSN(c_j, MATCH_C_J, MASK_C_J)\nDECLARE_INSN(c_beqz, MATCH_C_BEQZ, MASK_C_BEQZ)\nDECLARE_INSN(c_bnez, MATCH_C_BNEZ, MASK_C_BNEZ)\nDECLARE_INSN(c_slli, MATCH_C_SLLI, MASK_C_SLLI)\nDECLARE_INSN(c_fldsp, MATCH_C_FLDSP, MASK_C_FLDSP)\nDECLARE_INSN(c_lwsp, MATCH_C_LWSP, MASK_C_LWSP)\nDECLARE_INSN(c_flwsp, MATCH_C_FLWSP, MASK_C_FLWSP)\nDECLARE_INSN(c_mv, MATCH_C_MV, MASK_C_MV)\nDECLARE_INSN(c_add, MATCH_C_ADD, MASK_C_ADD)\nDECLARE_INSN(c_fsdsp, MATCH_C_FSDSP, MASK_C_FSDSP)\nDECLARE_INSN(c_swsp, MATCH_C_SWSP, MASK_C_SWSP)\nDECLARE_INSN(c_fswsp, MATCH_C_FSWSP, MASK_C_FSWSP)\nDECLARE_INSN(custom0, MATCH_CUSTOM0, MASK_CUSTOM0)\nDECLARE_INSN(custom0_rs1, MATCH_CUSTOM0_RS1, MASK_CUSTOM0_RS1)\nDECLARE_INSN(custom0_rs1_rs2, MATCH_CUSTOM0_RS1_RS2, MASK_CUSTOM0_RS1_RS2)\nDECLARE_INSN(custom0_rd, MATCH_CUSTOM0_RD, MASK_CUSTOM0_RD)\nDECLARE_INSN(custom0_rd_rs1, MATCH_CUSTOM0_RD_RS1, MASK_CUSTOM0_RD_RS1)\nDECLARE_INSN(custom0_rd_rs1_rs2, MATCH_CUSTOM0_RD_RS1_RS2,\n             MASK_CUSTOM0_RD_RS1_RS2)\nDECLARE_INSN(custom1, MATCH_CUSTOM1, MASK_CUSTOM1)\nDECLARE_INSN(custom1_rs1, MATCH_CUSTOM1_RS1, MASK_CUSTOM1_RS1)\nDECLARE_INSN(custom1_rs1_rs2, MATCH_CUSTOM1_RS1_RS2, MASK_CUSTOM1_RS1_RS2)\nDECLARE_INSN(custom1_rd, MATCH_CUSTOM1_RD, MASK_CUSTOM1_RD)\nDECLARE_INSN(custom1_rd_rs1, MATCH_CUSTOM1_RD_RS1, MASK_CUSTOM1_RD_RS1)\nDECLARE_INSN(custom1_rd_rs1_rs2, MATCH_CUSTOM1_RD_RS1_RS2,\n             MASK_CUSTOM1_RD_RS1_RS2)\nDECLARE_INSN(custom2, MATCH_CUSTOM2, MASK_CUSTOM2)\nDECLARE_INSN(custom2_rs1, MATCH_CUSTOM2_RS1, MASK_CUSTOM2_RS1)\nDECLARE_INSN(custom2_rs1_rs2, MATCH_CUSTOM2_RS1_RS2, MASK_CUSTOM2_RS1_RS2)\nDECLARE_INSN(custom2_rd, MATCH_CUSTOM2_RD, MASK_CUSTOM2_RD)\nDECLARE_INSN(custom2_rd_rs1, MATCH_CUSTOM2_RD_RS1, MASK_CUSTOM2_RD_RS1)\nDECLARE_INSN(custom2_rd_rs1_rs2, MATCH_CUSTOM2_RD_RS1_RS2,\n             MASK_CUSTOM2_RD_RS1_RS2)\nDECLARE_INSN(custom3, MATCH_CUSTOM3, MASK_CUSTOM3)\nDECLARE_INSN(custom3_rs1, MATCH_CUSTOM3_RS1, MASK_CUSTOM3_RS1)\nDECLARE_INSN(custom3_rs1_rs2, MATCH_CUSTOM3_RS1_RS2, MASK_CUSTOM3_RS1_RS2)\nDECLARE_INSN(custom3_rd, MATCH_CUSTOM3_RD, MASK_CUSTOM3_RD)\nDECLARE_INSN(custom3_rd_rs1, MATCH_CUSTOM3_RD_RS1, MASK_CUSTOM3_RD_RS1)\nDECLARE_INSN(custom3_rd_rs1_rs2, MATCH_CUSTOM3_RD_RS1_RS2,\n             MASK_CUSTOM3_RD_RS1_RS2)\n#endif\n#ifdef DECLARE_CSR\nDECLARE_CSR(fflags, CSR_FFLAGS)\nDECLARE_CSR(frm, CSR_FRM)\nDECLARE_CSR(fcsr, CSR_FCSR)\nDECLARE_CSR(cycle, CSR_CYCLE)\nDECLARE_CSR(time, CSR_TIME)\nDECLARE_CSR(instret, CSR_INSTRET)\nDECLARE_CSR(hpmcounter3, CSR_HPMCOUNTER3)\nDECLARE_CSR(hpmcounter4, CSR_HPMCOUNTER4)\nDECLARE_CSR(hpmcounter5, CSR_HPMCOUNTER5)\nDECLARE_CSR(hpmcounter6, CSR_HPMCOUNTER6)\nDECLARE_CSR(hpmcounter7, CSR_HPMCOUNTER7)\nDECLARE_CSR(hpmcounter8, CSR_HPMCOUNTER8)\nDECLARE_CSR(hpmcounter9, CSR_HPMCOUNTER9)\nDECLARE_CSR(hpmcounter10, CSR_HPMCOUNTER10)\nDECLARE_CSR(hpmcounter11, CSR_HPMCOUNTER11)\nDECLARE_CSR(hpmcounter12, CSR_HPMCOUNTER12)\nDECLARE_CSR(hpmcounter13, CSR_HPMCOUNTER13)\nDECLARE_CSR(hpmcounter14, CSR_HPMCOUNTER14)\nDECLARE_CSR(hpmcounter15, CSR_HPMCOUNTER15)\nDECLARE_CSR(hpmcounter16, CSR_HPMCOUNTER16)\nDECLARE_CSR(hpmcounter17, CSR_HPMCOUNTER17)\nDECLARE_CSR(hpmcounter18, CSR_HPMCOUNTER18)\nDECLARE_CSR(hpmcounter19, CSR_HPMCOUNTER19)\nDECLARE_CSR(hpmcounter20, CSR_HPMCOUNTER20)\nDECLARE_CSR(hpmcounter21, CSR_HPMCOUNTER21)\nDECLARE_CSR(hpmcounter22, CSR_HPMCOUNTER22)\nDECLARE_CSR(hpmcounter23, CSR_HPMCOUNTER23)\nDECLARE_CSR(hpmcounter24, CSR_HPMCOUNTER24)\nDECLARE_CSR(hpmcounter25, CSR_HPMCOUNTER25)\nDECLARE_CSR(hpmcounter26, CSR_HPMCOUNTER26)\nDECLARE_CSR(hpmcounter27, CSR_HPMCOUNTER27)\nDECLARE_CSR(hpmcounter28, CSR_HPMCOUNTER28)\nDECLARE_CSR(hpmcounter29, CSR_HPMCOUNTER29)\nDECLARE_CSR(hpmcounter30, CSR_HPMCOUNTER30)\nDECLARE_CSR(hpmcounter31, CSR_HPMCOUNTER31)\nDECLARE_CSR(sstatus, CSR_SSTATUS)\nDECLARE_CSR(sie, CSR_SIE)\nDECLARE_CSR(stvec, CSR_STVEC)\nDECLARE_CSR(sscratch, CSR_SSCRATCH)\nDECLARE_CSR(sepc, CSR_SEPC)\nDECLARE_CSR(scause, CSR_SCAUSE)\nDECLARE_CSR(sbadaddr, CSR_SBADADDR)\nDECLARE_CSR(sip, CSR_SIP)\nDECLARE_CSR(sptbr, CSR_SPTBR)\nDECLARE_CSR(mstatus, CSR_MSTATUS)\nDECLARE_CSR(misa, CSR_MISA)\nDECLARE_CSR(medeleg, CSR_MEDELEG)\nDECLARE_CSR(mideleg, CSR_MIDELEG)\nDECLARE_CSR(mie, CSR_MIE)\nDECLARE_CSR(mtvec, CSR_MTVEC)\nDECLARE_CSR(mscratch, CSR_MSCRATCH)\nDECLARE_CSR(mepc, CSR_MEPC)\nDECLARE_CSR(mcause, CSR_MCAUSE)\nDECLARE_CSR(mbadaddr, CSR_MBADADDR)\nDECLARE_CSR(mip, CSR_MIP)\nDECLARE_CSR(tselect, CSR_TSELECT)\nDECLARE_CSR(tdata1, CSR_TDATA1)\nDECLARE_CSR(tdata2, CSR_TDATA2)\nDECLARE_CSR(tdata3, CSR_TDATA3)\nDECLARE_CSR(dcsr, CSR_DCSR)\nDECLARE_CSR(dpc, CSR_DPC)\nDECLARE_CSR(dscratch, CSR_DSCRATCH)\nDECLARE_CSR(mcycle, CSR_MCYCLE)\nDECLARE_CSR(minstret, CSR_MINSTRET)\nDECLARE_CSR(mhpmcounter3, CSR_MHPMCOUNTER3)\nDECLARE_CSR(mhpmcounter4, CSR_MHPMCOUNTER4)\nDECLARE_CSR(mhpmcounter5, CSR_MHPMCOUNTER5)\nDECLARE_CSR(mhpmcounter6, CSR_MHPMCOUNTER6)\nDECLARE_CSR(mhpmcounter7, CSR_MHPMCOUNTER7)\nDECLARE_CSR(mhpmcounter8, CSR_MHPMCOUNTER8)\nDECLARE_CSR(mhpmcounter9, CSR_MHPMCOUNTER9)\nDECLARE_CSR(mhpmcounter10, CSR_MHPMCOUNTER10)\nDECLARE_CSR(mhpmcounter11, CSR_MHPMCOUNTER11)\nDECLARE_CSR(mhpmcounter12, CSR_MHPMCOUNTER12)\nDECLARE_CSR(mhpmcounter13, CSR_MHPMCOUNTER13)\nDECLARE_CSR(mhpmcounter14, CSR_MHPMCOUNTER14)\nDECLARE_CSR(mhpmcounter15, CSR_MHPMCOUNTER15)\nDECLARE_CSR(mhpmcounter16, CSR_MHPMCOUNTER16)\nDECLARE_CSR(mhpmcounter17, CSR_MHPMCOUNTER17)\nDECLARE_CSR(mhpmcounter18, CSR_MHPMCOUNTER18)\nDECLARE_CSR(mhpmcounter19, CSR_MHPMCOUNTER19)\nDECLARE_CSR(mhpmcounter20, CSR_MHPMCOUNTER20)\nDECLARE_CSR(mhpmcounter21, CSR_MHPMCOUNTER21)\nDECLARE_CSR(mhpmcounter22, CSR_MHPMCOUNTER22)\nDECLARE_CSR(mhpmcounter23, CSR_MHPMCOUNTER23)\nDECLARE_CSR(mhpmcounter24, CSR_MHPMCOUNTER24)\nDECLARE_CSR(mhpmcounter25, CSR_MHPMCOUNTER25)\nDECLARE_CSR(mhpmcounter26, CSR_MHPMCOUNTER26)\nDECLARE_CSR(mhpmcounter27, CSR_MHPMCOUNTER27)\nDECLARE_CSR(mhpmcounter28, CSR_MHPMCOUNTER28)\nDECLARE_CSR(mhpmcounter29, CSR_MHPMCOUNTER29)\nDECLARE_CSR(mhpmcounter30, CSR_MHPMCOUNTER30)\nDECLARE_CSR(mhpmcounter31, CSR_MHPMCOUNTER31)\nDECLARE_CSR(mucounteren, CSR_MUCOUNTEREN)\nDECLARE_CSR(mscounteren, CSR_MSCOUNTEREN)\nDECLARE_CSR(mhpmevent3, CSR_MHPMEVENT3)\nDECLARE_CSR(mhpmevent4, CSR_MHPMEVENT4)\nDECLARE_CSR(mhpmevent5, CSR_MHPMEVENT5)\nDECLARE_CSR(mhpmevent6, CSR_MHPMEVENT6)\nDECLARE_CSR(mhpmevent7, CSR_MHPMEVENT7)\nDECLARE_CSR(mhpmevent8, CSR_MHPMEVENT8)\nDECLARE_CSR(mhpmevent9, CSR_MHPMEVENT9)\nDECLARE_CSR(mhpmevent10, CSR_MHPMEVENT10)\nDECLARE_CSR(mhpmevent11, CSR_MHPMEVENT11)\nDECLARE_CSR(mhpmevent12, CSR_MHPMEVENT12)\nDECLARE_CSR(mhpmevent13, CSR_MHPMEVENT13)\nDECLARE_CSR(mhpmevent14, CSR_MHPMEVENT14)\nDECLARE_CSR(mhpmevent15, CSR_MHPMEVENT15)\nDECLARE_CSR(mhpmevent16, CSR_MHPMEVENT16)\nDECLARE_CSR(mhpmevent17, CSR_MHPMEVENT17)\nDECLARE_CSR(mhpmevent18, CSR_MHPMEVENT18)\nDECLARE_CSR(mhpmevent19, CSR_MHPMEVENT19)\nDECLARE_CSR(mhpmevent20, CSR_MHPMEVENT20)\nDECLARE_CSR(mhpmevent21, CSR_MHPMEVENT21)\nDECLARE_CSR(mhpmevent22, CSR_MHPMEVENT22)\nDECLARE_CSR(mhpmevent23, CSR_MHPMEVENT23)\nDECLARE_CSR(mhpmevent24, CSR_MHPMEVENT24)\nDECLARE_CSR(mhpmevent25, CSR_MHPMEVENT25)\nDECLARE_CSR(mhpmevent26, CSR_MHPMEVENT26)\nDECLARE_CSR(mhpmevent27, CSR_MHPMEVENT27)\nDECLARE_CSR(mhpmevent28, CSR_MHPMEVENT28)\nDECLARE_CSR(mhpmevent29, CSR_MHPMEVENT29)\nDECLARE_CSR(mhpmevent30, CSR_MHPMEVENT30)\nDECLARE_CSR(mhpmevent31, CSR_MHPMEVENT31)\nDECLARE_CSR(mvendorid, CSR_MVENDORID)\nDECLARE_CSR(marchid, CSR_MARCHID)\nDECLARE_CSR(mimpid, CSR_MIMPID)\nDECLARE_CSR(mhartid, CSR_MHARTID)\nDECLARE_CSR(cycleh, CSR_CYCLEH)\nDECLARE_CSR(timeh, CSR_TIMEH)\nDECLARE_CSR(instreth, CSR_INSTRETH)\nDECLARE_CSR(hpmcounter3h, CSR_HPMCOUNTER3H)\nDECLARE_CSR(hpmcounter4h, CSR_HPMCOUNTER4H)\nDECLARE_CSR(hpmcounter5h, CSR_HPMCOUNTER5H)\nDECLARE_CSR(hpmcounter6h, CSR_HPMCOUNTER6H)\nDECLARE_CSR(hpmcounter7h, CSR_HPMCOUNTER7H)\nDECLARE_CSR(hpmcounter8h, CSR_HPMCOUNTER8H)\nDECLARE_CSR(hpmcounter9h, CSR_HPMCOUNTER9H)\nDECLARE_CSR(hpmcounter10h, CSR_HPMCOUNTER10H)\nDECLARE_CSR(hpmcounter11h, CSR_HPMCOUNTER11H)\nDECLARE_CSR(hpmcounter12h, CSR_HPMCOUNTER12H)\nDECLARE_CSR(hpmcounter13h, CSR_HPMCOUNTER13H)\nDECLARE_CSR(hpmcounter14h, CSR_HPMCOUNTER14H)\nDECLARE_CSR(hpmcounter15h, CSR_HPMCOUNTER15H)\nDECLARE_CSR(hpmcounter16h, CSR_HPMCOUNTER16H)\nDECLARE_CSR(hpmcounter17h, CSR_HPMCOUNTER17H)\nDECLARE_CSR(hpmcounter18h, CSR_HPMCOUNTER18H)\nDECLARE_CSR(hpmcounter19h, CSR_HPMCOUNTER19H)\nDECLARE_CSR(hpmcounter20h, CSR_HPMCOUNTER20H)\nDECLARE_CSR(hpmcounter21h, CSR_HPMCOUNTER21H)\nDECLARE_CSR(hpmcounter22h, CSR_HPMCOUNTER22H)\nDECLARE_CSR(hpmcounter23h, CSR_HPMCOUNTER23H)\nDECLARE_CSR(hpmcounter24h, CSR_HPMCOUNTER24H)\nDECLARE_CSR(hpmcounter25h, CSR_HPMCOUNTER25H)\nDECLARE_CSR(hpmcounter26h, CSR_HPMCOUNTER26H)\nDECLARE_CSR(hpmcounter27h, CSR_HPMCOUNTER27H)\nDECLARE_CSR(hpmcounter28h, CSR_HPMCOUNTER28H)\nDECLARE_CSR(hpmcounter29h, CSR_HPMCOUNTER29H)\nDECLARE_CSR(hpmcounter30h, CSR_HPMCOUNTER30H)\nDECLARE_CSR(hpmcounter31h, CSR_HPMCOUNTER31H)\nDECLARE_CSR(mcycleh, CSR_MCYCLEH)\nDECLARE_CSR(minstreth, CSR_MINSTRETH)\nDECLARE_CSR(mhpmcounter3h, CSR_MHPMCOUNTER3H)\nDECLARE_CSR(mhpmcounter4h, CSR_MHPMCOUNTER4H)\nDECLARE_CSR(mhpmcounter5h, CSR_MHPMCOUNTER5H)\nDECLARE_CSR(mhpmcounter6h, CSR_MHPMCOUNTER6H)\nDECLARE_CSR(mhpmcounter7h, CSR_MHPMCOUNTER7H)\nDECLARE_CSR(mhpmcounter8h, CSR_MHPMCOUNTER8H)\nDECLARE_CSR(mhpmcounter9h, CSR_MHPMCOUNTER9H)\nDECLARE_CSR(mhpmcounter10h, CSR_MHPMCOUNTER10H)\nDECLARE_CSR(mhpmcounter11h, CSR_MHPMCOUNTER11H)\nDECLARE_CSR(mhpmcounter12h, CSR_MHPMCOUNTER12H)\nDECLARE_CSR(mhpmcounter13h, CSR_MHPMCOUNTER13H)\nDECLARE_CSR(mhpmcounter14h, CSR_MHPMCOUNTER14H)\nDECLARE_CSR(mhpmcounter15h, CSR_MHPMCOUNTER15H)\nDECLARE_CSR(mhpmcounter16h, CSR_MHPMCOUNTER16H)\nDECLARE_CSR(mhpmcounter17h, CSR_MHPMCOUNTER17H)\nDECLARE_CSR(mhpmcounter18h, CSR_MHPMCOUNTER18H)\nDECLARE_CSR(mhpmcounter19h, CSR_MHPMCOUNTER19H)\nDECLARE_CSR(mhpmcounter20h, CSR_MHPMCOUNTER20H)\nDECLARE_CSR(mhpmcounter21h, CSR_MHPMCOUNTER21H)\nDECLARE_CSR(mhpmcounter22h, CSR_MHPMCOUNTER22H)\nDECLARE_CSR(mhpmcounter23h, CSR_MHPMCOUNTER23H)\nDECLARE_CSR(mhpmcounter24h, CSR_MHPMCOUNTER24H)\nDECLARE_CSR(mhpmcounter25h, CSR_MHPMCOUNTER25H)\nDECLARE_CSR(mhpmcounter26h, CSR_MHPMCOUNTER26H)\nDECLARE_CSR(mhpmcounter27h, CSR_MHPMCOUNTER27H)\nDECLARE_CSR(mhpmcounter28h, CSR_MHPMCOUNTER28H)\nDECLARE_CSR(mhpmcounter29h, CSR_MHPMCOUNTER29H)\nDECLARE_CSR(mhpmcounter30h, CSR_MHPMCOUNTER30H)\nDECLARE_CSR(mhpmcounter31h, CSR_MHPMCOUNTER31H)\n#endif\n#ifdef DECLARE_CAUSE\nDECLARE_CAUSE(\"misaligned fetch\", CAUSE_MISALIGNED_FETCH)\nDECLARE_CAUSE(\"fault fetch\", CAUSE_FAULT_FETCH)\nDECLARE_CAUSE(\"illegal instruction\", CAUSE_ILLEGAL_INSTRUCTION)\nDECLARE_CAUSE(\"breakpoint\", CAUSE_BREAKPOINT)\nDECLARE_CAUSE(\"misaligned load\", CAUSE_MISALIGNED_LOAD)\nDECLARE_CAUSE(\"fault load\", CAUSE_FAULT_LOAD)\nDECLARE_CAUSE(\"misaligned store\", CAUSE_MISALIGNED_STORE)\nDECLARE_CAUSE(\"fault store\", CAUSE_FAULT_STORE)\nDECLARE_CAUSE(\"user_ecall\", CAUSE_USER_ECALL)\nDECLARE_CAUSE(\"supervisor_ecall\", CAUSE_SUPERVISOR_ECALL)\nDECLARE_CAUSE(\"hypervisor_ecall\", CAUSE_HYPERVISOR_ECALL)\nDECLARE_CAUSE(\"machine_ecall\", CAUSE_MACHINE_ECALL)\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/startup/GCC/entry.S",
    "content": "/* Copyright 2018 SiFive, Inc */\n/* SPDX-License-Identifier: Apache-2.0 */\n#include \"risc-v/Core/Include/riscv_encoding.h\"\n\n/* This code executes before _start, which is contained inside the C library.\n * In embedded systems we want to ensure that _enter, which contains the first\n * code to be executed, can be loaded at a specific address.  To enable this\n * feature we provide the '.text.metal.init.enter' section, which is\n * defined to have the first address being where execution should start. */\n.section .text.metal.init.enter\n.global _enter\n_enter:\n    .cfi_startproc\n\n    /* Inform the debugger that there is nowhere to backtrace past _enter. */\n    .cfi_undefined ra\n\n    /* The absolute first thing that must happen is configuring the global\n     * pointer register, which must be done with relaxation disabled because\n     * it's not valid to obtain the address of any symbol without GP\n     * configured.  The C environment might go ahead and do this again, but\n     * that's safe as it's a fixed register. */\n.option push\n.option norelax\n    la gp, __global_pointer$\n.option pop\n\n    /* Disable global interrupt */\n    /*clear_csr(mstatus, MSTATUS_MIE);*/\n    csrci mstatus,8\n\n    /* Set up a simple trap vector to catch anything that goes wrong early in\n     * the boot process. */\n    la t0, Trap_Handler_Stub\n    /* enable CLIC Vectored mode */\n    ori\tt0,t0,3\n    csrw mtvec, t0\n    /* enable chicken bit if core is bullet series*/\n    la t0, __metal_chicken_bit\n    beqz t0, 1f\n    csrwi 0x7C1, 0\n1:\n\n    /* There may be pre-initialization routines inside the MBI code that run in\n     * C, so here we set up a C environment.  First we set up a stack pointer,\n     * which is left as a weak reference in order to allow initialization\n     * routines that do not need a stack to be set up to transparently be\n     * called. */\n    .weak __StackTop\n    la sp, __StackTop\n\n    /* Intial the mtvt, MUST BE 64 bytes aligned*/\n    .weak __Vectors\n    la t0, __Vectors\n    // From drivers/bl702_driver/risc-v/Core/Include/riscv_encoding.h\n    csrw CSR_MTVT, t0\n\n#ifdef __riscv_float_abi_single\n    /* deal with FP */\n    /* Is F extension present? */\n    csrr t0, misa\n    andi t0, t0, (1 << ('F' - 'A'))\n    beqz t0, 1f\n    /* If so, enable it */\n    li t0, MSTATUS_FS\n    csrs mstatus, t0\n    fssr x0\n1:\n#endif\n\n    /* Check for an initialization routine and call it if one exists, otherwise\n     * just skip over the call entirely.   Note that __metal_initialize isn't\n     * actually a full C function, as it doesn't end up with the .bss or .data\n     * segments having been initialized.  This is done to avoid putting a\n     * burden on systems that can be initialized without having a C environment\n     * set up. */\n    call SystemInit\n\n    /* start load code to itcm like. */\n    call start_load\n    // Register at exit cleanup (not required for embedded)\n    // la a0, __libc_fini_array\n    // call atexit\n    /* Call C/C++ constructor start up code */\n    call __libc_init_array\n\n\n    jal System_Post_Init\n\n    /* At this point we can enter the C runtime's startup file.  The arguments\n     * to this function are designed to match those provided to the SEE, just\n     * so we don't have to write another ABI. */\n    \n    //Sets argv,argc to 0/null\n    csrr a0, mhartid\n    li a1, 0\n    li a2, 0\n    call main\n\n    csrci mstatus, (1 << 3)\n\n__exit:\n    j __exit\n\n    .cfi_endproc\n\n/* For sanity's sake we set up an early trap vector that just does nothing.  If\n * you end up here then there's a bug in the early boot code somewhere. */\n.weak Trap_Handler_Stub\n.section .text.metal.init.trapvec\n.align 2\nTrap_Handler_Stub:\n    .cfi_startproc\n    csrr t0, mcause\n    csrr t1, mepc\n    csrr t2, mtval\n    j Trap_Handler_Stub\n    .cfi_endproc\n\n/* The GCC port might not emit a __register_frame_info symbol, which eventually\n * results in a weak undefined reference that eventually causes crash when it\n * is dereference early in boot.  We really shouldn't need to put this here,\n * but to deal with what I think is probably a bug in the linker script I'm\n * going to leave this in for now.  At least it's fairly cheap :) */\n.weak __register_frame_info\n.global __register_frame_info\n.section .text.metal.init.__register_frame_info\n__register_frame_info:\n    .cfi_startproc\n    ret\n    .cfi_endproc\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/startup/GCC/start_load.c",
    "content": "/**\n * @file start_load.c\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n\n#include \"bl702.h\"\n#include <stdint.h>\n\n#define __STARTUP_CLEAR_BSS 1\n\n/*----------------------------------------------------------------------------\n  Linker generated Symbols\n *----------------------------------------------------------------------------*/\nextern uint32_t __itcm_load_addr;\nextern uint32_t __dtcm_load_addr;\nextern uint32_t __system_ram_load_addr;\nextern uint32_t __ram_load_addr;\n\nextern uint32_t __text_code_start__;\nextern uint32_t __text_code_end__;\nextern uint32_t __tcm_code_start__;\nextern uint32_t __tcm_code_end__;\nextern uint32_t __tcm_data_start__;\nextern uint32_t __tcm_data_end__;\nextern uint32_t __system_ram_data_start__;\nextern uint32_t __system_ram_data_end__;\nextern uint32_t __ram_data_start__;\nextern uint32_t __ram_data_end__;\nextern uint32_t __bss_start__;\nextern uint32_t __bss_end__;\nextern uint32_t __noinit_data_start__;\nextern uint32_t __noinit_data_end__;\n\nextern uint32_t __StackTop;\nextern uint32_t __StackLimit;\nextern uint32_t __HeapBase;\nextern uint32_t __HeapLimit;\n\n// extern uint32_t __copy_table_start__;\n// extern uint32_t __copy_table_end__;\n// extern uint32_t __zero_table_start__;\n// extern uint32_t __zero_table_end__;\n\nvoid start_load(void) {\n  uint32_t *pSrc, *pDest;\n  uint32_t *pTable __attribute__((unused));\n\n  /* Copy ITCM code */\n  pSrc  = &__itcm_load_addr;\n  pDest = &__tcm_code_start__;\n\n  for (; pDest < &__tcm_code_end__;) {\n    *pDest++ = *pSrc++;\n  }\n\n  /* Copy DTCM code */\n  pSrc  = &__dtcm_load_addr;\n  pDest = &__tcm_data_start__;\n\n  for (; pDest < &__tcm_data_end__;) {\n    *pDest++ = *pSrc++;\n  }\n\n  /* BF Add system RAM data copy */\n  pSrc  = &__system_ram_load_addr;\n  pDest = &__system_ram_data_start__;\n\n  for (; pDest < &__system_ram_data_end__;) {\n    *pDest++ = *pSrc++;\n  }\n\n  /* BF Add OCARAM data copy */\n  pSrc  = &__ram_load_addr;\n  pDest = &__ram_data_start__;\n\n  for (; pDest < &__ram_data_end__;) {\n    *pDest++ = *pSrc++;\n  }\n\n  // #ifdef __STARTUP_CLEAR_BSS\n  /*  Single BSS section scheme.\n   *\n   *  The BSS section is specified by following symbols\n   *    __bss_start__: start of the BSS section.\n   *    __bss_end__: end of the BSS section.\n   *\n   *  Both addresses must be aligned to 4 bytes boundary.\n   */\n  pDest = &__bss_start__;\n\n  for (; pDest < &__bss_end__;) {\n    *pDest++ = 0ul;\n  }\n\n  // #endif\n}"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/startup/drv_mmheap.c",
    "content": "/**\r\n * @file drv_mmheap.c\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n\r\n#include \"drv_mmheap.h\"\r\n\r\n#define MEM_MANAGE_ALIGNMENT_BYTE_DEFAULT 8\r\n#define MEM_MANAGE_BITS_PER_BYTE          8\r\n#define MEM_MANAGE_MEM_STRUCT_SIZE        mmheap_align_up(sizeof(struct heap_node), MEM_MANAGE_ALIGNMENT_BYTE_DEFAULT)\r\n#define MEM_MANAGE_MINUM_MEM_SIZE         (MEM_MANAGE_MEM_STRUCT_SIZE << 1)\r\n#define MEM_MANAGE_ALLOCA_LABAL           ((size_t)((size_t)1 << (sizeof(size_t) * MEM_MANAGE_BITS_PER_BYTE - 1)))\r\n\r\nstatic inline size_t mmheap_align_down(size_t data, size_t align_byte) { return data & ~(align_byte - 1); }\r\n\r\nstatic inline size_t mmheap_align_up(size_t data, size_t align_byte) { return (data + align_byte - 1) & ~(align_byte - 1); }\r\n\r\nstatic inline struct heap_node *mmheap_addr_sub(const void *addr) { return (struct heap_node *)((const uint8_t *)addr - MEM_MANAGE_MEM_STRUCT_SIZE); }\r\n\r\nstatic inline void *mmheap_addr_add(const struct heap_node *mem_node) { return (void *)((const uint8_t *)mem_node + MEM_MANAGE_MEM_STRUCT_SIZE); }\r\n\r\n/**\r\n * @brief mmheap_insert_node_to_freelist\r\n *\r\n * @param pRoot\r\n * @param pNode\r\n */\r\nstatic inline void mmheap_insert_node_to_freelist(struct heap_info *pRoot, struct heap_node *pNode) {\r\n  struct heap_node *pPriv_Node;\r\n  struct heap_node *pNext_Node;\r\n  /*Find the node with an address similar to pNode*/\r\n  for (pPriv_Node = pRoot->pStart; pPriv_Node->next_node < pNode; pPriv_Node = pPriv_Node->next_node) {\r\n  }\r\n\r\n  pNext_Node = pPriv_Node->next_node;\r\n  /*Try to merge the pNode with the previous block*/\r\n  if ((uint8_t *)mmheap_addr_add(pPriv_Node) + pPriv_Node->mem_size == (uint8_t *)pNode) {\r\n    if (pPriv_Node != pRoot->pStart) { /*can merge if not start block*/\r\n      pPriv_Node->mem_size += MEM_MANAGE_MEM_STRUCT_SIZE + pNode->mem_size;\r\n      pNode = pPriv_Node;\r\n    } else {\r\n      /*The latter is not merged if it is a Start block to avoid wasting memory*/\r\n      pRoot->pStart->next_node = pNode;\r\n    }\r\n  } else {\r\n    /*Insert directly into the free single-chain table when merging is not possible*/\r\n    pPriv_Node->next_node = pNode;\r\n  }\r\n  /*Try to merge the pNode with the next block*/\r\n  if ((uint8_t *)mmheap_addr_add(pNode) + pNode->mem_size == (uint8_t *)pNext_Node) {\r\n    if (pNext_Node != pRoot->pEnd) {\r\n      pNode->mem_size += MEM_MANAGE_MEM_STRUCT_SIZE + pNext_Node->mem_size;\r\n      pNode->next_node = pNext_Node->next_node;\r\n    } else {\r\n      pNode->next_node = pRoot->pEnd;\r\n    }\r\n  } else {\r\n    /*Insert directly into the free single-chain table when merging is not possible*/\r\n    pNode->next_node = pNext_Node;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief mmheap_get_state\r\n *\r\n * @param pRoot\r\n * @param pState\r\n */\r\nvoid mmheap_get_state(struct heap_info *pRoot, struct heap_state *pState) {\r\n  MMHEAP_ASSERT(pRoot->pStart != NULL);\r\n  MMHEAP_ASSERT(pRoot->pEnd != NULL);\r\n  pState->max_node_size = pRoot->pStart->next_node->mem_size;\r\n  pState->min_node_size = pRoot->pStart->next_node->mem_size;\r\n  pState->remain_size   = 0;\r\n  pState->free_node_num = 0;\r\n  MMHEAP_LOCK();\r\n  for (struct heap_node *pNode = pRoot->pStart->next_node; pNode->next_node != NULL; pNode = pNode->next_node) {\r\n    pState->remain_size += pNode->mem_size;\r\n    pState->free_node_num++;\r\n    if (pNode->mem_size > pState->max_node_size) {\r\n      pState->max_node_size = pNode->mem_size;\r\n    }\r\n    if (pNode->mem_size < pState->min_node_size) {\r\n      pState->min_node_size = pNode->mem_size;\r\n    }\r\n  }\r\n  MMHEAP_UNLOCK();\r\n}\r\n/**\r\n * @brief mmheap_align_alloc\r\n *\r\n * @param pRoot\r\n * @param align_size\r\n * @param want_size\r\n * @return void*\r\n */\r\nvoid *mmheap_align_alloc(struct heap_info *pRoot, size_t align_size, size_t want_size) {\r\n  void             *pReturn = NULL;\r\n  struct heap_node *pPriv_Node, *pNow_Node;\r\n\r\n  MMHEAP_ASSERT(pRoot->pStart != NULL);\r\n  MMHEAP_ASSERT(pRoot->pEnd != NULL);\r\n\r\n  if (want_size == 0) {\r\n    return NULL;\r\n  }\r\n\r\n  if ((want_size & MEM_MANAGE_ALLOCA_LABAL) != 0) {\r\n    MMHEAP_MALLOC_FAIL();\r\n    return NULL;\r\n  }\r\n\r\n  if (align_size & (align_size - 1)) {\r\n    MMHEAP_MALLOC_FAIL();\r\n    return NULL;\r\n  }\r\n\r\n  MMHEAP_LOCK();\r\n  if (want_size < MEM_MANAGE_MINUM_MEM_SIZE) {\r\n    want_size = MEM_MANAGE_MINUM_MEM_SIZE;\r\n  }\r\n  if (align_size < MEM_MANAGE_ALIGNMENT_BYTE_DEFAULT) {\r\n    align_size = MEM_MANAGE_ALIGNMENT_BYTE_DEFAULT;\r\n  }\r\n\r\n  want_size = mmheap_align_up(want_size, MEM_MANAGE_ALIGNMENT_BYTE_DEFAULT);\r\n\r\n  pPriv_Node = pRoot->pStart;\r\n  pNow_Node  = pRoot->pStart->next_node;\r\n\r\n  while (pNow_Node->next_node != NULL) {\r\n    if (pNow_Node->mem_size >= want_size + MEM_MANAGE_MEM_STRUCT_SIZE) {\r\n      size_t use_align_size;\r\n      size_t new_size;\r\n      pReturn        = (void *)mmheap_align_up((size_t)mmheap_addr_add(pNow_Node), align_size); /*Calculate the aligned address*/\r\n      use_align_size = (uint8_t *)pReturn - (uint8_t *)mmheap_addr_add(pNow_Node);              /*Calculate the memory consumed by the alignment*/\r\n      if (use_align_size != 0) {                                                                /*if Memory misalignment*/\r\n        if (use_align_size < MEM_MANAGE_MINUM_MEM_SIZE + MEM_MANAGE_MEM_STRUCT_SIZE) {          /*The unaligned value is too small*/\r\n          pReturn        = (void *)mmheap_align_up((size_t)mmheap_addr_add(pNow_Node) + MEM_MANAGE_MINUM_MEM_SIZE + MEM_MANAGE_MEM_STRUCT_SIZE, align_size);\r\n          use_align_size = (uint8_t *)pReturn - (uint8_t *)mmheap_addr_add(pNow_Node);\r\n        }\r\n        if (use_align_size <= pNow_Node->mem_size) {\r\n          new_size = pNow_Node->mem_size - use_align_size; /*Calculate the remaining memory size by removing the memory consumed by alignment*/\r\n          if (new_size >= want_size) {                     /*Meet the conditions for distribution*/\r\n            struct heap_node *pNew_Node = mmheap_addr_sub(pReturn);\r\n            pNow_Node->mem_size -= new_size + MEM_MANAGE_MEM_STRUCT_SIZE; /*Split Node*/\r\n            pNew_Node->mem_size  = new_size;                              /*The new node is also not in the free chain and does not need to be discharged from the free chain*/\r\n            pNew_Node->next_node = NULL;\r\n            pNow_Node            = pNew_Node;\r\n            break;\r\n          }\r\n        }\r\n      } else { /*Memory is directly aligned*/\r\n        pPriv_Node->next_node = pNow_Node->next_node;\r\n        pNow_Node->next_node  = NULL;\r\n        break;\r\n      }\r\n    }\r\n    pPriv_Node = pNow_Node;\r\n    pNow_Node  = pNow_Node->next_node;\r\n  }\r\n\r\n  if (pNow_Node == pRoot->pEnd) {\r\n    MMHEAP_UNLOCK();\r\n    MMHEAP_MALLOC_FAIL();\r\n    return NULL;\r\n  }\r\n\r\n  if (pNow_Node->mem_size >= MEM_MANAGE_MINUM_MEM_SIZE + MEM_MANAGE_MEM_STRUCT_SIZE + want_size) {         /*Node memory is still available*/\r\n    struct heap_node *pNew_Node = (struct heap_node *)((uint8_t *)mmheap_addr_add(pNow_Node) + want_size); /*Calculate the address of the node that will be moved into the free chain table*/\r\n    pNew_Node->mem_size         = pNow_Node->mem_size - want_size - MEM_MANAGE_MEM_STRUCT_SIZE;\r\n    pNew_Node->next_node        = NULL;\r\n    pNow_Node->mem_size         = want_size;\r\n    mmheap_insert_node_to_freelist(pRoot, pNew_Node);\r\n  }\r\n  pNow_Node->mem_size |= MEM_MANAGE_ALLOCA_LABAL;\r\n  MMHEAP_UNLOCK();\r\n  return pReturn;\r\n}\r\n/**\r\n * @brief mmheap_alloc\r\n *\r\n * @param pRoot\r\n * @param want_size\r\n * @return void*\r\n */\r\nvoid *mmheap_alloc(struct heap_info *pRoot, size_t want_size) { return mmheap_align_alloc(pRoot, MEM_MANAGE_ALIGNMENT_BYTE_DEFAULT, want_size); }\r\n/**\r\n * @brief mmheap_realloc\r\n *\r\n * @param pRoot\r\n * @param src_addr\r\n * @param want_size\r\n * @return void*\r\n */\r\nvoid *mmheap_realloc(struct heap_info *pRoot, void *src_addr, size_t want_size) {\r\n  void             *pReturn = NULL;\r\n  struct heap_node *pNext_Node, *pPriv_Node;\r\n  struct heap_node *pSrc_Node;\r\n  MMHEAP_ASSERT(pRoot->pStart != NULL);\r\n  MMHEAP_ASSERT(pRoot->pEnd != NULL);\r\n  if (src_addr == NULL) {\r\n    return mmheap_align_alloc(pRoot, MEM_MANAGE_ALIGNMENT_BYTE_DEFAULT, want_size);\r\n  }\r\n  if (want_size == 0) {\r\n    mmheap_free(pRoot, src_addr);\r\n    return NULL;\r\n  }\r\n\r\n  MMHEAP_LOCK();\r\n  if ((want_size & MEM_MANAGE_ALLOCA_LABAL) != 0) {\r\n    MMHEAP_UNLOCK();\r\n    MMHEAP_MALLOC_FAIL();\r\n    return NULL;\r\n  }\r\n\r\n  pSrc_Node = mmheap_addr_sub(src_addr);\r\n\r\n  if ((pSrc_Node->mem_size & MEM_MANAGE_ALLOCA_LABAL) == 0) {\r\n    MMHEAP_UNLOCK();\r\n    MMHEAP_ASSERT((pSrc_Node->mem_size & MEM_MANAGE_ALLOCA_LABAL) != 0);\r\n    MMHEAP_MALLOC_FAIL();\r\n    return NULL;\r\n  }\r\n\r\n  pSrc_Node->mem_size &= ~MEM_MANAGE_ALLOCA_LABAL;\r\n  if (pSrc_Node->mem_size >= want_size) {\r\n    pSrc_Node->mem_size |= MEM_MANAGE_ALLOCA_LABAL;\r\n    pReturn = src_addr;\r\n    MMHEAP_UNLOCK();\r\n    return pReturn;\r\n  }\r\n  /*Start looking in the free list for blocks similar to this block*/\r\n  for (pPriv_Node = pRoot->pStart; pPriv_Node->next_node < pSrc_Node; pPriv_Node = pPriv_Node->next_node) {\r\n  }\r\n  pNext_Node = pPriv_Node->next_node;\r\n\r\n  if (pNext_Node != pRoot->pEnd && ((uint8_t *)src_addr + pSrc_Node->mem_size == (uint8_t *)pNext_Node) && (pSrc_Node->mem_size + pNext_Node->mem_size + MEM_MANAGE_MEM_STRUCT_SIZE >= want_size)) {\r\n    /*Meet next node non-end, memory contiguous, enough memory left*/\r\n    pReturn               = src_addr;\r\n    pPriv_Node->next_node = pNext_Node->next_node;\r\n    pSrc_Node->mem_size += MEM_MANAGE_MEM_STRUCT_SIZE + pNext_Node->mem_size;\r\n    want_size = mmheap_align_up(want_size, MEM_MANAGE_ALIGNMENT_BYTE_DEFAULT);\r\n    if (pSrc_Node->mem_size >= MEM_MANAGE_MINUM_MEM_SIZE + MEM_MANAGE_MEM_STRUCT_SIZE + want_size) { /*Removing the remaining space allocated is enough to open new blocks*/\r\n      struct heap_node *pNew_Node = (struct heap_node *)((uint8_t *)mmheap_addr_add(pSrc_Node) + want_size);\r\n      pNew_Node->next_node        = NULL;\r\n      pNew_Node->mem_size         = pSrc_Node->mem_size - want_size - MEM_MANAGE_MEM_STRUCT_SIZE;\r\n      pSrc_Node->mem_size         = want_size;\r\n      mmheap_insert_node_to_freelist(pRoot, pNew_Node);\r\n    }\r\n    pSrc_Node->mem_size |= MEM_MANAGE_ALLOCA_LABAL;\r\n    MMHEAP_UNLOCK();\r\n  } else {\r\n    MMHEAP_UNLOCK();\r\n    pReturn = mmheap_align_alloc(pRoot, MEM_MANAGE_ALIGNMENT_BYTE_DEFAULT, want_size);\r\n    if (pReturn == NULL) {\r\n      pSrc_Node->mem_size |= MEM_MANAGE_ALLOCA_LABAL;\r\n      MMHEAP_MALLOC_FAIL();\r\n      return NULL;\r\n    }\r\n    MMHEAP_LOCK();\r\n    memcpy(pReturn, src_addr, pSrc_Node->mem_size);\r\n    pSrc_Node->mem_size |= MEM_MANAGE_ALLOCA_LABAL;\r\n    MMHEAP_UNLOCK();\r\n    mmheap_free(pRoot, src_addr);\r\n  }\r\n  return pReturn;\r\n}\r\n/**\r\n * @brief\r\n *\r\n * @param pRoot\r\n * @param num\r\n * @param size\r\n * @return void*\r\n */\r\nvoid *mmheap_calloc(struct heap_info *pRoot, size_t num, size_t size) {\r\n  void *pReturn = NULL;\r\n\r\n  pReturn = (void *)mmheap_alloc(pRoot, size * num);\r\n\r\n  if (pReturn) {\r\n    memset(pReturn, 0, num * size);\r\n  }\r\n\r\n  return pReturn;\r\n}\r\n/**\r\n * @brief mmheap_free\r\n *\r\n * @param pRoot\r\n * @param addr\r\n */\r\nvoid mmheap_free(struct heap_info *pRoot, void *addr) {\r\n  struct heap_node *pFree_Node;\r\n  MMHEAP_ASSERT(pRoot->pStart != NULL);\r\n  MMHEAP_ASSERT(pRoot->pEnd != NULL);\r\n  MMHEAP_LOCK();\r\n  if (addr == NULL) {\r\n    MMHEAP_UNLOCK();\r\n    return;\r\n  }\r\n  pFree_Node = mmheap_addr_sub(addr);\r\n\r\n  if ((pFree_Node->mem_size & MEM_MANAGE_ALLOCA_LABAL) == 0) {\r\n    MMHEAP_UNLOCK();\r\n    MMHEAP_ASSERT((pFree_Node->mem_size & MEM_MANAGE_ALLOCA_LABAL) != 0);\r\n    return;\r\n  }\r\n\r\n  if (pFree_Node->next_node != NULL) {\r\n    MMHEAP_UNLOCK();\r\n    MMHEAP_ASSERT(pFree_Node->next_node == NULL);\r\n    return;\r\n  }\r\n  pFree_Node->mem_size &= ~MEM_MANAGE_ALLOCA_LABAL;\r\n  mmheap_insert_node_to_freelist(pRoot, pFree_Node);\r\n  MMHEAP_UNLOCK();\r\n}\r\n/**\r\n * @brief mmheap_init\r\n *\r\n * @param pRoot\r\n * @param pRegion\r\n */\r\nvoid mmheap_init(struct heap_info *pRoot, const struct heap_region *pRegion) {\r\n  struct heap_node *align_addr;\r\n  size_t            align_size;\r\n  struct heap_node *pPriv_node = NULL;\r\n\r\n  pRoot->total_size = 0;\r\n  pRoot->pEnd       = NULL;\r\n  pRoot->pStart     = NULL;\r\n\r\n  for (; pRegion->addr != NULL; pRegion++) {\r\n    align_addr = (struct heap_node *)mmheap_align_up((size_t)pRegion->addr, MEM_MANAGE_ALIGNMENT_BYTE_DEFAULT); /*Calculate the aligned address*/\r\n    if ((uint8_t *)align_addr > pRegion->mem_size + (uint8_t *)pRegion->addr) {                                 /*Alignment consumes more memory than the memory area*/\r\n      continue;\r\n    }\r\n    align_size = pRegion->mem_size - ((uint8_t *)align_addr - (uint8_t *)pRegion->addr); /*Calculate the size of memory left after alignment*/\r\n    if (align_size < MEM_MANAGE_MINUM_MEM_SIZE + MEM_MANAGE_MEM_STRUCT_SIZE) {           /*if Aligning the remaining memory is too small*/\r\n      continue;\r\n    }\r\n    align_size -= MEM_MANAGE_MEM_STRUCT_SIZE; /*Find the size of the memory block after removing the table header*/\r\n    align_addr->mem_size  = align_size;\r\n    align_addr->next_node = NULL;\r\n    if (pRoot->pStart == NULL) {\r\n      pRoot->pStart = align_addr;                                                                               /*set current addr for start*/\r\n      if (align_size >= MEM_MANAGE_MINUM_MEM_SIZE + MEM_MANAGE_MEM_STRUCT_SIZE) {                               /*If the remaining blocks are large enough*/\r\n        align_size -= MEM_MANAGE_MEM_STRUCT_SIZE;                                                               /*Remove the next block of table headers remaining memory size*/\r\n        align_addr               = (struct heap_node *)((uint8_t *)pRoot->pStart + MEM_MANAGE_MEM_STRUCT_SIZE); // the next block addr\r\n        align_addr->mem_size     = align_size;\r\n        align_addr->next_node    = NULL;\r\n        pRoot->pStart->mem_size  = 0;\r\n        pRoot->pStart->next_node = align_addr;\r\n        pRoot->total_size        = align_addr->mem_size;\r\n      } else { /*The memory is too small, and the address of the current memory block is recorded as start*/\r\n        pRoot->total_size       = 0;\r\n        pRoot->pStart->mem_size = 0;\r\n      }\r\n    } else {\r\n      pPriv_node->next_node = align_addr;\r\n      pRoot->total_size += align_size;\r\n    }\r\n    pPriv_node = align_addr;\r\n  }\r\n  // At this point, pPriv_node is the last block, then place the end of the table at the end of the block, find the address to place the end block, end block is only convenient for traversal, so as\r\n  // small as possible, assigned to MEM_MANAGE_MEM_STRUCT_SIZE\r\n  align_addr = (struct heap_node *)mmheap_align_down((size_t)mmheap_addr_add(pPriv_node) + pPriv_node->mem_size - MEM_MANAGE_MEM_STRUCT_SIZE, MEM_MANAGE_ALIGNMENT_BYTE_DEFAULT);\r\n  align_size = (uint8_t *)align_addr - (uint8_t *)mmheap_addr_add(pPriv_node); /*Find the remaining size of the previous block after the end block is allocated*/\r\n  if (align_size >= MEM_MANAGE_MINUM_MEM_SIZE) {\r\n    pRoot->total_size -= pPriv_node->mem_size - align_size; /*Removing memory consumed by allocating end blocks*/\r\n    pRoot->pEnd           = align_addr;                     /*Update the address at the end of the list*/\r\n    pPriv_node->next_node = align_addr;\r\n    pPriv_node->mem_size  = align_size;\r\n    align_addr->next_node = NULL;\r\n    align_addr->mem_size  = 0; /*The end block is not involved in memory allocation, so a direct 0 is sufficient*/\r\n  } else {                     /*The last block is too small, directly as the end block*/\r\n    pRoot->pEnd = pPriv_node;\r\n    pRoot->total_size -= pPriv_node->mem_size;\r\n  }\r\n  MMHEAP_ASSERT(pRoot->pStart != NULL);\r\n  MMHEAP_ASSERT(pRoot->pEnd != NULL);\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/startup/drv_mmheap.h",
    "content": "/**\r\n * @file drv_mmheap.h\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n#ifndef __DRV_MMHEAP_H\r\n#define __DRV_MMHEAP_H\r\n\r\n#include <stdint.h>\r\n#include <stdio.h>\r\n#include <string.h>\r\n\r\n#ifndef MMHEAP_LOCK\r\n#define MMHEAP_LOCK()\r\n#endif\r\n\r\n#ifndef MMHEAP_UNLOCK\r\n#define MMHEAP_UNLOCK()\r\n#endif\r\n\r\n#ifndef MMHEAP_ASSERT\r\n#define MMHEAP_ASSERT(A) \\\r\n    if (!(A))            \\\r\n    printf(\"mmheap malloc error:drv_mmheap,%d\\r\\n\", __LINE__)\r\n\r\n#endif\r\n\r\n#ifndef MMHEAP_MALLOC_FAIL\r\n#define MMHEAP_MALLOC_FAIL() printf(\"mmheap malloc fail:drv_mmheap,%d\\r\\n\", __LINE__)\r\n#endif\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\nstruct heap_region {\r\n    void *addr;\r\n    size_t mem_size;\r\n};\r\n\r\nstruct heap_node {\r\n    struct heap_node *next_node;\r\n    size_t mem_size;\r\n};\r\n\r\nstruct heap_info {\r\n    struct heap_node *pStart;\r\n    struct heap_node *pEnd;\r\n    size_t total_size;\r\n};\r\n\r\nstruct heap_state {\r\n    size_t remain_size;\r\n    size_t free_node_num;\r\n    size_t max_node_size;\r\n    size_t min_node_size;\r\n};\r\n\r\nvoid mmheap_init(struct heap_info *pRoot, const struct heap_region *pRigon);\r\n/**\r\n * @brief Alloc start address aligned memory from the heap.\r\n * Alloc aligned address and specified size memory from the heap.\r\n *\r\n * @attention\r\n *\r\n * @param[in]   pRoot    heap info.\r\n * @param[in]   align_size   address align mask of the memory.\r\n * @param[in]   want_size    size of the memory.\r\n *\r\n * @return  the pointer to the allocated memory.\r\n */\r\nvoid *mmheap_align_alloc(struct heap_info *pRoot, size_t align_size, size_t want_size);\r\n/**\r\n * @brief Alloc memory.\r\n * Allocate size bytes and returns a pointer to the allocated memory.\r\n *\r\n * @attention size should no bigger than MMHEAP_BLK_SIZE_MAX.\r\n *\r\n * @param[in]   pRoot    heap info.\r\n * @param[in]   want_size    size of the memory.\r\n *\r\n * @return  the pointer to the allocated memory.\r\n */\r\nvoid *mmheap_alloc(struct heap_info *pRoot, size_t want_size);\r\n/**\r\n * @brief Realloc memory from the heap.\r\n * Change the size of the memory block pointed to by ptr to size bytes.\r\n *\r\n * @attention\r\n * <ul>\r\n * <li> if ptr is NULL, then the call is equivalent to mmheap_alloc(size), for all values of size.\r\n * <li> if ptr is if size is equal to zero, and ptr is not NULL, then the call is equivalent to mmheap_free(ptr).\r\n * </ul>\r\n *\r\n * @param[in]   pRoot    heap info.\r\n * @param[in]   src_addr     old pointer to the memory space.\r\n * @param[in]   want_size    new size of the memory space.\r\n *\r\n * @return  the new pointer to the allocated memory.\r\n */\r\nvoid *mmheap_realloc(struct heap_info *pRoot, void *src_addr, size_t want_size);\r\n/**\r\n * @brief Cealloc memory from the heap.\r\n * Change the size of the memory block pointed to by ptr to size bytes.\r\n *\r\n * @attention\r\n * <ul>\r\n * <li> if ptr is NULL, then the call is equivalent to mmheap_alloc(size), for all values of size.\r\n * <li> if ptr is if size is equal to zero, and ptr is not NULL, then the call is equivalent to mmheap_free(ptr).\r\n * </ul>\r\n *\r\n * @param[in]   pRoot    heap info.\r\n * @param[in]   num     size number.\r\n * @param[in]   size    new size of the memory space.\r\n *\r\n * @return  the new pointer to the allocated memory.\r\n */\r\nvoid *mmheap_calloc(struct heap_info *pRoot, size_t num, size_t size);\r\n/**\r\n * @brief Free the memory.\r\n * Free the memory space pointed to by ptr, which must have been returned by a previous call to mmheap_alloc(), mmheap_aligned_alloc(), or mmheap_realloc().\r\n *\r\n * @attention\r\n *\r\n * @param[in]   pRoot    heap info.\r\n * @param[in]   addr     pointer to the memory.\r\n *\r\n * @return  None.\r\n */\r\nvoid mmheap_free(struct heap_info *pRoot, void *addr);\r\n/**\r\n * @brief get mmheap state\r\n *\r\n * @param pRoot heap info.\r\n * @param pState heap state\r\n */\r\nvoid mmheap_get_state(struct heap_info *pRoot, struct heap_state *pState);\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/startup/interrupt.c",
    "content": "/**\n * @file interrupt.c\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#include \"bflb_platform.h\"\n#include \"bl702_common.h\"\n#include \"risc-v/Core/Include/clic.h\"\n#include \"risc-v/Core/Include/riscv_encoding.h\"\n\npFunc __Interrupt_Handlers[IRQn_LAST] = {0};\n\nvoid Interrupt_Handler_Stub(void);\n\nvoid clic_msip_handler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid clic_mtimer_handler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid clic_mext_handler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid clic_csoft_handler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid BMX_ERR_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid BMX_TO_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid L1C_BMX_ERR_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid L1C_BMX_TO_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid SEC_BMX_ERR_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid RF_TOP_INT0_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid RF_TOP_INT1_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid DMA_BMX_ERR_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid SEC_GMAC_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid SEC_CDET_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid SEC_PKA_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid SEC_TRNG_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid SEC_AES_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid SEC_SHA_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid DMA_ALL_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid MJPEG_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid CAM_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid I2S_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid IRTX_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid IRRX_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid USB_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid EMAC_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid SF_CTRL_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid GPADC_DMA_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid EFUSE_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid SPI_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid UART0_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid UART1_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid I2C_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid PWM_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid TIMER_CH0_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid TIMER_CH1_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid TIMER_WDT_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid KYS_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid QDEC0_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid QDEC1_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid QDEC2_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid GPIO_INT0_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid TOUCH_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid M154_REQ_ENH_ACK_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid M154_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid M154_AES_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid PDS_WAKEUP_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid HBN_OUT0_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid HBN_OUT1_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid BOR_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid WIFI_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid BZ_PHY_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid BLE_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid MAC_TXRX_TIMER_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid MAC_TXRX_MISC_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid MAC_RX_TRG_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid MAC_TX_TRG_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid MAC_GEN_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid MAC_PORT_TRG_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\nvoid WIFI_IPC_PUBLIC_IRQHandler_Wrapper(void) __attribute__((weak, alias(\"Interrupt_Handler_Stub\")));\n\nconst pFunc __Vectors[] __attribute__((section(\".init\"), aligned(64))) = {\n    0,                           /*         */\n    0,                           /*         */\n    0,                           /*         */\n    clic_msip_handler_Wrapper,   /* 3       */\n    0,                           /*         */\n    0,                           /*         */\n    0,                           /*         */\n    clic_mtimer_handler_Wrapper, /* 7       */\n    (pFunc)0x00000001,           /*         */\n    0,                           /*         */\n    (pFunc)0x00000102,\n    /*         */                        // disable log as default\n    clic_mext_handler_Wrapper,           /* 11      */\n    clic_csoft_handler_Wrapper,          /* 12      */\n    0,                                   /*         */\n    0,                                   /*         */\n    0,                                   /*         */\n    BMX_ERR_IRQHandler_Wrapper,          /* 16 +  0 */\n    BMX_TO_IRQHandler_Wrapper,           /* 16 +  1 */\n    L1C_BMX_ERR_IRQHandler_Wrapper,      /* 16 +  2 */\n    L1C_BMX_TO_IRQHandler_Wrapper,       /* 16 +  3 */\n    SEC_BMX_ERR_IRQHandler_Wrapper,      /* 16 +  4 */\n    RF_TOP_INT0_IRQHandler_Wrapper,      /* 16 +  5 */\n    RF_TOP_INT1_IRQHandler_Wrapper,      /* 16 +  6 */\n    0,                                   /* 16 +  7 */\n    DMA_BMX_ERR_IRQHandler_Wrapper,      /* 16 +  8 */\n    SEC_GMAC_IRQHandler_Wrapper,         /* 16 +  9 */\n    SEC_CDET_IRQHandler_Wrapper,         /* 16 + 10 */\n    SEC_PKA_IRQHandler_Wrapper,          /* 16 + 11 */\n    SEC_TRNG_IRQHandler_Wrapper,         /* 16 + 12 */\n    SEC_AES_IRQHandler_Wrapper,          /* 16 + 13 */\n    SEC_SHA_IRQHandler_Wrapper,          /* 16 + 14 */\n    DMA_ALL_IRQHandler_Wrapper,          /* 16 + 15 */\n    MJPEG_IRQHandler_Wrapper,            /* 16 + 16 */\n    CAM_IRQHandler_Wrapper,              /* 16 + 17 */\n    I2S_IRQHandler_Wrapper,              /* 16 + 18 */\n    IRTX_IRQHandler_Wrapper,             /* 16 + 19 */\n    IRRX_IRQHandler_Wrapper,             /* 16 + 20 */\n    USB_IRQHandler_Wrapper,              /* 16 + 21 */\n    EMAC_IRQHandler_Wrapper,             /* 16 + 22 */\n    SF_CTRL_IRQHandler_Wrapper,          /* 16 + 23 */\n    0,                                   /* 16 + 24 */\n    GPADC_DMA_IRQHandler_Wrapper,        /* 16 + 25 */\n    EFUSE_IRQHandler_Wrapper,            /* 16 + 26 */\n    SPI_IRQHandler_Wrapper,              /* 16 + 27 */\n    0,                                   /* 16 + 28 */\n    UART0_IRQHandler_Wrapper,            /* 16 + 29 */\n    UART1_IRQHandler_Wrapper,            /* 16 + 30 */\n    0,                                   /* 16 + 31 */\n    I2C_IRQHandler_Wrapper,              /* 16 + 32 */\n    0,                                   /* 16 + 33 */\n    PWM_IRQHandler_Wrapper,              /* 16 + 34 */\n    0,                                   /* 16 + 35 */\n    TIMER_CH0_IRQHandler_Wrapper,        /* 16 + 36 */\n    TIMER_CH1_IRQHandler_Wrapper,        /* 16 + 37 */\n    TIMER_WDT_IRQHandler_Wrapper,        /* 16 + 38 */\n    KYS_IRQHandler_Wrapper,              /* 16 + 39 */\n    QDEC0_IRQHandler_Wrapper,            /* 16 + 40 */\n    QDEC1_IRQHandler_Wrapper,            /* 16 + 41 */\n    QDEC2_IRQHandler_Wrapper,            /* 16 + 42 */\n    0,                                   /* 16 + 43 */\n    GPIO_INT0_IRQHandler_Wrapper,        /* 16 + 44 */\n    TOUCH_IRQHandler_Wrapper,            /* 16 + 45 */\n    0,                                   /* 16 + 46 */\n    M154_REQ_ENH_ACK_IRQHandler_Wrapper, /* 16 + 47 */\n    M154_IRQHandler_Wrapper,             /* 16 + 48 */\n    M154_AES_IRQHandler_Wrapper,         /* 16 + 49 */\n    PDS_WAKEUP_IRQHandler_Wrapper,       /* 16 + 50 */\n    HBN_OUT0_IRQHandler_Wrapper,         /* 16 + 51 */\n    HBN_OUT1_IRQHandler_Wrapper,         /* 16 + 52 */\n    BOR_IRQHandler_Wrapper,              /* 16 + 53 */\n    WIFI_IRQHandler_Wrapper,             /* 16 + 54 */\n    BZ_PHY_IRQHandler_Wrapper,           /* 16 + 55 */\n    BLE_IRQHandler_Wrapper,              /* 16 + 56 */\n    MAC_TXRX_TIMER_IRQHandler_Wrapper,   /* 16 + 57 */\n    MAC_TXRX_MISC_IRQHandler_Wrapper,    /* 16 + 58 */\n    MAC_RX_TRG_IRQHandler_Wrapper,       /* 16 + 59 */\n    MAC_TX_TRG_IRQHandler_Wrapper,       /* 16 + 60 */\n    MAC_GEN_IRQHandler_Wrapper,          /* 16 + 61 */\n    MAC_PORT_TRG_IRQHandler_Wrapper,     /* 16 + 62 */\n    WIFI_IPC_PUBLIC_IRQHandler_Wrapper,  /* 16 + 63 */\n};\n\n#include \"riscv_encoding.h\"\nvoid vAssertCalled(void) {\n  MSG((char *)\"vAssertCalled\\r\\n\");\n  unsigned long epc;\n  epc = get_pc();\n  MSG(\"mepc:0x%08x\\r\\n\", (uint32_t)epc);\n\n  //   PWM_Channel_Disable(PWM_Channel);\n  //   gpio_set_mode(PWM_Out_Pin, GPIO_INPUT_PD_MODE);\n\n  while (1) {\n  }\n}\n\nvoid Trap_Handler(void) {\n  unsigned long cause;\n  unsigned long epc;\n  unsigned long tval;\n  uint8_t       isecall = 0;\n\n  MSG(\"Trap_Handler\\r\\n\");\n\n  cause = read_csr(mcause);\n  MSG(\"mcause=%08x\\r\\n\", (uint32_t)cause);\n  epc = get_pc();\n  MSG(\"mepc:%08x\\r\\n\", (uint32_t)epc);\n  tval = read_csr(mtval);\n  MSG(\"mtval:%08x\\r\\n\", (uint32_t)tval);\n\n  cause = (cause & 0x3ff);\n\n  switch (cause) {\n  case 1:\n    MSG(\"Instruction access fault\\r\\n\");\n    break;\n\n  case 2:\n    MSG(\"Illegal instruction\\r\\n\");\n    break;\n\n  case 3:\n    MSG(\"Breakpoint\\r\\n\");\n    break;\n\n  case 4:\n    MSG(\"Load address misaligned\\r\\n\");\n    break;\n\n  case 5:\n    MSG(\"Load access fault\\r\\n\");\n    break;\n\n  case 6:\n    MSG(\"Store/AMO address misaligned\\r\\n\");\n    break;\n\n  case 7:\n    MSG(\"Store/AMO access fault\\r\\n\");\n    break;\n\n  case 8:\n    MSG(\"Environment call from U-mode\\r\\n\");\n    epc += 4;\n    write_csr(mepc, epc);\n    break;\n\n  case 11:\n    MSG(\"Environment call from M-mode\\r\\n\");\n    epc += 4;\n    write_csr(mepc, epc);\n    isecall = 1;\n    break;\n\n  default:\n    MSG(\"Cause num=%d\\r\\n\", (uint32_t)cause);\n    epc += 4;\n    write_csr(mepc, epc);\n    break;\n  }\n\n  if (!isecall) {\n    while (1) {\n    }\n  }\n}\n\nvoid Interrupt_Handler(void) {\n  pFunc             interruptFun;\n  uint32_t          num    = 0;\n  volatile uint32_t ulMEPC = 0UL, ulMCAUSE = 0UL;\n\n  /* Store a few register values that might be useful when determining why this\n  function was called. */\n  __asm volatile(\"csrr %0, mepc\" : \"=r\"(ulMEPC));\n  __asm volatile(\"csrr %0, mcause\" : \"=r\"(ulMCAUSE));\n\n  if ((ulMCAUSE & 0x80000000) == 0) {\n    /*Exception*/\n    MSG(\"Exception should not be here\\r\\n\");\n  } else {\n    num = ulMCAUSE & 0x3FF;\n\n    if (num < IRQn_LAST) {\n      interruptFun = __Interrupt_Handlers[num];\n\n      if (NULL != interruptFun) {\n        interruptFun();\n      } else {\n        MSG(\"Interrupt num:%d IRQHandler not installed\\r\\n\", (unsigned int)num);\n\n        if (num >= IRQ_NUM_BASE) {\n          MSG(\"Peripheral Interrupt num:%d \\r\\n\", (unsigned int)num - IRQ_NUM_BASE);\n        }\n\n        while (1) {\n        }\n      }\n    } else {\n      MSG(\"Unexpected interrupt num:%d\\r\\n\", (unsigned int)num);\n    }\n  }\n}\n\nvoid handle_trap(void) {\n#define MCAUSE_INT_MASK  0x80000000 // [31]=1 interrupt, else exception\n#define MCAUSE_CODE_MASK 0x7FFFFFFF // low bits show code\n\n  unsigned long mcause_value = read_csr(mcause);\n  if (mcause_value & MCAUSE_INT_MASK) {\n    // Branch to interrupt handler here\n    Interrupt_Handler();\n  } else {\n    // Branch to exception handle\n    Trap_Handler();\n  }\n}\n\nvoid __IRQ_ALIGN64 Trap_Handler_Stub(void) { Trap_Handler(); }\n\nvoid __IRQ Interrupt_Handler_Stub(void) { Interrupt_Handler(); }\n\nvoid FreeRTOS_Interrupt_Handler(void) { Interrupt_Handler(); }\n\nvoid Interrupt_Handler_Register(IRQn_Type irq, pFunc interruptFun) {\n  if (irq < IRQn_LAST) {\n    __Interrupt_Handlers[irq] = interruptFun;\n  }\n}\n\nvoid System_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) {}\n\nvoid clic_enable_interrupt(uint32_t source) { *(volatile uint8_t *)(CLIC_HART0_ADDR + CLIC_INTIE + source) = 1; }\n\nvoid clic_disable_interrupt(uint32_t source) { *(volatile uint8_t *)(CLIC_HART0_ADDR + CLIC_INTIE + source) = 0; }\n\nvoid clic_clear_pending(uint32_t source) { *(volatile uint8_t *)(CLIC_HART0_ADDR + CLIC_INTIP + source) = 0; }\n\nvoid clic_set_pending(uint32_t source) { *(volatile uint8_t *)(CLIC_HART0_ADDR + CLIC_INTIP + source) = 1; }\n\nvoid clic_set_intcfg(uint32_t source, uint32_t intcfg) { *(volatile uint8_t *)(CLIC_HART0_ADDR + CLIC_INTCFG + source) = intcfg; }\n\nuint8_t clic_get_intcfg(uint32_t source) { return *(volatile uint8_t *)(CLIC_HART0_ADDR + CLIC_INTCFG + source); }\n\nvoid clic_set_cliccfg(uint32_t cfg) { *(volatile uint8_t *)(CLIC_HART0_ADDR + CLIC_CFG) = cfg; }\n\nuint8_t clic_get_cliccfg(void) { return *(volatile uint8_t *)(CLIC_HART0_ADDR + CLIC_CFG); }"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/startup/system_bl702.c",
    "content": "/**\n * @file system_bl702.c\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n#include \"bl702.h\"\n#include \"bl702_glb.h\"\n#include \"bl702_hbn.h\"\n#include \"risc-v/Core/Include/clic.h\"\n\n#ifdef BFLB_EFLASH_LOADER\n#include \"bl702_usb.h\"\nvoid USB_DoNothing_IRQHandler(void) {\n  /* clear all USB int sts */\n  USB_Clr_IntStatus(32);\n}\n#endif\n\n/*----------------------------------------------------------------------------\n  Define clocks\n *----------------------------------------------------------------------------*/\n#define SYSTEM_CLOCK (32000000UL)\n\n/*----------------------------------------------------------------------------\n  Vector Table\n *----------------------------------------------------------------------------*/\n#define VECT_TAB_OFFSET                                                                                                                                                                                \\\n  0x00 /*!< Vector Table base offset field.                                                                                                                                                            \\\n             This value must be a multiple of 0x200. */\n\n/*----------------------------------------------------------------------------\n  System initialization function\n *----------------------------------------------------------------------------*/\n\nvoid system_bor_init(void) {\n  HBN_BOR_CFG_Type borCfg = {0 /* pu_bor */, 0 /* irq_bor_en */, 1 /* bor_vth */, 0 /* bor_sel */};\n  HBN_Set_BOR_Cfg(&borCfg);\n}\n\nvoid SystemInit(void) {\n  uint32_t *p;\n  uint32_t  i               = 0;\n  uint32_t  tmpVal          = 0;\n  uint8_t   flashCfg        = 0;\n  uint8_t   psramCfg        = 0;\n  uint8_t   isInternalFlash = 0;\n  uint8_t   isInternalPsram = 0;\n\n  /* global IRQ disable */\n  __disable_irq();\n\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_INT);\n  tmpVal |= (1 << 8);      /*mask pds wakeup*/\n  tmpVal |= (1 << 10);     /*mask rf done*/\n  tmpVal |= (1 << 11);     /*mask pll done*/\n  tmpVal &= ~(0xff << 16); /*mask all pds wakeup source int*/\n  BL_WR_REG(PDS_BASE, PDS_INT, tmpVal);\n\n  /* GLB_Set_EM_Sel(GLB_EM_0KB); */\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_SEAM_MISC);\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_EM_SEL, GLB_EM_0KB);\n  BL_WR_REG(GLB_BASE, GLB_SEAM_MISC, tmpVal);\n\n  /* Restore default setting*/\n  /* GLB_UART_Sig_Swap_Set(UART_SIG_SWAP_NONE); */\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_PARM);\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_UART_SWAP_SET, UART_SIG_SWAP_NONE);\n  BL_WR_REG(GLB_BASE, GLB_PARM, tmpVal);\n\n  /* fix 57.6M */\n  if (SystemCoreClockGet() == 57 * 6000 * 1000) {\n    SystemCoreClockSet(57.6 * 1000 * 1000)\n  }\n\n  /* CLear all interrupt */\n  p = (uint32_t *)(CLIC_HART0_ADDR + CLIC_INTIE);\n\n  for (i = 0; i < (IRQn_LAST + 3) / 4; i++) {\n    p[i] = 0;\n  }\n\n  p = (uint32_t *)(CLIC_HART0_ADDR + CLIC_INTIP);\n\n  for (i = 0; i < (IRQn_LAST + 3) / 4; i++) {\n    p[i] = 0;\n  }\n\n  /* SF io select from efuse value */\n  tmpVal   = BL_RD_WORD(0x40007074);\n  flashCfg = ((tmpVal >> 26) & 7);\n  psramCfg = ((tmpVal >> 24) & 3);\n  if (flashCfg == 1 || flashCfg == 2) {\n    isInternalFlash = 1;\n  } else {\n    isInternalFlash = 0;\n  }\n  if (psramCfg == 1) {\n    isInternalPsram = 1;\n  } else {\n    isInternalPsram = 0;\n  }\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO);\n  if (isInternalFlash == 1 && isInternalPsram == 0) {\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_CFG_GPIO_USE_PSRAM_IO, 0x3f);\n  } else {\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_CFG_GPIO_USE_PSRAM_IO, 0x00);\n  }\n  BL_WR_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO, tmpVal);\n\n#ifdef BFLB_EFLASH_LOADER\n  Interrupt_Handler_Register(USB_IRQn, USB_DoNothing_IRQHandler);\n#endif\n  /* init bor for all platform */\n  system_bor_init();\n  /* global IRQ enable */\n  __enable_irq();\n}\n\nvoid System_Post_Init(void) {\n  PDS_Trim_RC32M();\n  HBN_Trim_RC32K();\n}"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/startup/system_bl702.h",
    "content": "/**\n * @file system_bl702.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n\n#ifndef __SYSTEM_BL702_H__\n#define __SYSTEM_BL702_H__\n\n/**\n *  @brief PLL Clock type definition\n */\n\nextern uint32_t SystemCoreClock;\ntypedef void (*pFunc)(void);\n\n#define CPU_Interrupt_Enable        clic_enable_interrupt\n#define CPU_Interrupt_Disable       clic_disable_interrupt\n#define CPU_Interrupt_Pending_Clear clic_clear_pending\n\nextern void SystemCoreClockUpdate(void);\nextern void SystemInit(void);\nvoid clic_enable_interrupt(uint32_t source);\nvoid clic_disable_interrupt(uint32_t source);\nvoid clic_clear_pending(uint32_t source);\nvoid Interrupt_Handler_Register(IRQn_Type irq, pFunc interruptFun);\nvoid System_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_acomp.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_acomp.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_ACOMP_H__\r\n#define __BL702_ACOMP_H__\r\n\r\n#include \"aon_reg.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  ACOMP\r\n *  @{\r\n */\r\n\r\n/** @defgroup  ACOMP_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief Analog compare id type definition\r\n */\r\ntypedef enum {\r\n    AON_ACOMP0_ID, /*!< Analog compare 0 */\r\n    AON_ACOMP1_ID, /*!< Analog compare 1 */\r\n} AON_ACOMP_ID_Type;\r\n\r\n/**\r\n *  @brief Analog compare level type definition\r\n */\r\ntypedef enum {\r\n    AON_ACOMP_LEVEL_FACTOR_0P25, /*!< Analog compare level scaling factor 0.25 */\r\n    AON_ACOMP_LEVEL_FACTOR_0P5,  /*!< Analog compare level scaling factor 0.5 */\r\n    AON_ACOMP_LEVEL_FACTOR_0P75, /*!< Analog compare level scaling factor 0.75 */\r\n    AON_ACOMP_LEVEL_FACTOR_1,    /*!< Analog compare level scaling factor 1 */\r\n} AON_ACOMP_Level_Factor_Type;\r\n\r\n/**\r\n *  @brief Analog compare channel type definition\r\n */\r\ntypedef enum {\r\n    AON_ACOMP_CHAN_ADC0,              /*!< Analog compare channel,ADC input channel 0 */\r\n    AON_ACOMP_CHAN_ADC1,              /*!< Analog compare channel,ADC input channel 1 */\r\n    AON_ACOMP_CHAN_ADC2,              /*!< Analog compare channel,ADC input channel 2 */\r\n    AON_ACOMP_CHAN_ADC3,              /*!< Analog compare channel,ADC input channel 3 */\r\n    AON_ACOMP_CHAN_ADC4,              /*!< Analog compare channel,ADC input channel 4 */\r\n    AON_ACOMP_CHAN_ADC5,              /*!< Analog compare channel,ADC input channel 5 */\r\n    AON_ACOMP_CHAN_ADC6,              /*!< Analog compare channel,ADC input channel 6 */\r\n    AON_ACOMP_CHAN_ADC7,              /*!< Analog compare channel,ADC input channel 7 */\r\n    AON_ACOMP_CHAN_DACA,              /*!< Analog compare channel,DAC output channel A */\r\n    AON_ACOMP_CHAN_DACB,              /*!< Analog compare channel,DAC output channel B */\r\n    AON_ACOMP_CHAN_VREF_1P2V,         /*!< Analog compare channel,1.2V ref voltage */\r\n    AON_ACOMP_CHAN_0P375VBAT_NOT_IMP, /*!< Analog compare channel,6/16Vbat */\r\n    AON_ACOMP_CHAN_0P25VBAT,          /*!< Analog compare channel,4/16Vbat */\r\n    AON_ACOMP_CHAN_0P1875VBAT,        /*!< Analog compare channel,3/16Vbat */\r\n    AON_ACOMP_CHAN_0P3125VBAT,        /*!< Analog compare channel,5/16Vbat */\r\n    AON_ACOMP_CHAN_VSS,               /*!< Analog compare channel,vss */\r\n} AON_ACOMP_Chan_Type;\r\n\r\n/**\r\n *  @brief Analog compare bias current control type definition\r\n */\r\ntypedef enum {\r\n    AON_ACOMP_BIAS_POWER_MODE1, /*!< Analog compare power mode 1,slow response mode */\r\n    AON_ACOMP_BIAS_POWER_MODE2, /*!< Analog compare power mode 2,medium response mode */\r\n    AON_ACOMP_BIAS_POWER_MODE3, /*!< Analog compare power mode 3,fast response mode */\r\n    AON_ACOMP_BIAS_POWER_NONE,  /*!< Analog compare power mode none */\r\n} AON_ACOMP_Bias_Prog_Type;\r\n\r\n/**\r\n *  @brief Analog compare hysteresis voltage type definition\r\n */\r\ntypedef enum {\r\n    AON_ACOMP_HYSTERESIS_VOLT_NONE, /*!< Analog compare hysteresis voltage none */\r\n    AON_ACOMP_HYSTERESIS_VOLT_10MV, /*!< Analog compare hysteresis voltage 10mv */\r\n    AON_ACOMP_HYSTERESIS_VOLT_20MV, /*!< Analog compare hysteresis voltage 20mv */\r\n    AON_ACOMP_HYSTERESIS_VOLT_30MV, /*!< Analog compare hysteresis voltage 30mv */\r\n    AON_ACOMP_HYSTERESIS_VOLT_40MV, /*!< Analog compare hysteresis voltage 40mv */\r\n    AON_ACOMP_HYSTERESIS_VOLT_50MV, /*!< Analog compare hysteresis voltage 50mv */\r\n    AON_ACOMP_HYSTERESIS_VOLT_60MV, /*!< Analog compare hysteresis voltage 60mv */\r\n    AON_ACOMP_HYSTERESIS_VOLT_70MV, /*!< Analog compare hysteresis voltage 70mv */\r\n} AON_ACOMP_Hysteresis_Volt_Type;\r\n\r\n/**\r\n *  @brief AON ACOMP configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type muxEn;                                /*!< ACOMP mux enable */\r\n    uint8_t posChanSel;                               /*!< ACOMP positive channel select */\r\n    uint8_t negChanSel;                               /*!< ACOMP negtive channel select */\r\n    AON_ACOMP_Level_Factor_Type levelFactor;          /*!< ACOMP level select factor */\r\n    AON_ACOMP_Bias_Prog_Type biasProg;                /*!< ACOMP bias current control */\r\n    AON_ACOMP_Hysteresis_Volt_Type hysteresisPosVolt; /*!< ACOMP hysteresis voltage for positive */\r\n    AON_ACOMP_Hysteresis_Volt_Type hysteresisNegVolt; /*!< ACOMP hysteresis voltage for negtive */\r\n} AON_ACOMP_CFG_Type;\r\n\r\n/*@} end of group ACOMP_Public_Types */\r\n\r\n/** @defgroup  ACOMP_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  AON_ACOMP_ID_TYPE\r\n *  @{\r\n */\r\n#define IS_AON_ACOMP_ID_TYPE(type) (((type) == AON_ACOMP0_ID) || \\\r\n                                    ((type) == AON_ACOMP1_ID))\r\n\r\n/** @defgroup  AON_ACOMP_LEVEL_FACTOR_TYPE\r\n *  @{\r\n */\r\n#define IS_AON_ACOMP_LEVEL_FACTOR_TYPE(type) (((type) == AON_ACOMP_LEVEL_FACTOR_0P25) || \\\r\n                                              ((type) == AON_ACOMP_LEVEL_FACTOR_0P5) ||  \\\r\n                                              ((type) == AON_ACOMP_LEVEL_FACTOR_0P75) || \\\r\n                                              ((type) == AON_ACOMP_LEVEL_FACTOR_1))\r\n\r\n/** @defgroup  AON_ACOMP_CHAN_TYPE\r\n *  @{\r\n */\r\n#define IS_AON_ACOMP_CHAN_TYPE(type) (((type) == AON_ACOMP_CHAN_ADC0) ||              \\\r\n                                      ((type) == AON_ACOMP_CHAN_ADC1) ||              \\\r\n                                      ((type) == AON_ACOMP_CHAN_ADC2) ||              \\\r\n                                      ((type) == AON_ACOMP_CHAN_ADC3) ||              \\\r\n                                      ((type) == AON_ACOMP_CHAN_ADC4) ||              \\\r\n                                      ((type) == AON_ACOMP_CHAN_ADC5) ||              \\\r\n                                      ((type) == AON_ACOMP_CHAN_ADC6) ||              \\\r\n                                      ((type) == AON_ACOMP_CHAN_ADC7) ||              \\\r\n                                      ((type) == AON_ACOMP_CHAN_DACA) ||              \\\r\n                                      ((type) == AON_ACOMP_CHAN_DACB) ||              \\\r\n                                      ((type) == AON_ACOMP_CHAN_VREF_1P2V) ||         \\\r\n                                      ((type) == AON_ACOMP_CHAN_0P375VBAT_NOT_IMP) || \\\r\n                                      ((type) == AON_ACOMP_CHAN_0P25VBAT) ||          \\\r\n                                      ((type) == AON_ACOMP_CHAN_0P1875VBAT) ||        \\\r\n                                      ((type) == AON_ACOMP_CHAN_0P3125VBAT) ||        \\\r\n                                      ((type) == AON_ACOMP_CHAN_VSS))\r\n\r\n/** @defgroup  AON_ACOMP_BIAS_PROG_TYPE\r\n *  @{\r\n */\r\n#define IS_AON_ACOMP_BIAS_PROG_TYPE(type) (((type) == AON_ACOMP_BIAS_POWER_MODE1) || \\\r\n                                           ((type) == AON_ACOMP_BIAS_POWER_MODE2) || \\\r\n                                           ((type) == AON_ACOMP_BIAS_POWER_MODE3) || \\\r\n                                           ((type) == AON_ACOMP_BIAS_POWER_NONE))\r\n\r\n/** @defgroup  AON_ACOMP_HYSTERESIS_VOLT_TYPE\r\n *  @{\r\n */\r\n#define IS_AON_ACOMP_HYSTERESIS_VOLT_TYPE(type) (((type) == AON_ACOMP_HYSTERESIS_VOLT_NONE) || \\\r\n                                                 ((type) == AON_ACOMP_HYSTERESIS_VOLT_10MV) || \\\r\n                                                 ((type) == AON_ACOMP_HYSTERESIS_VOLT_20MV) || \\\r\n                                                 ((type) == AON_ACOMP_HYSTERESIS_VOLT_30MV) || \\\r\n                                                 ((type) == AON_ACOMP_HYSTERESIS_VOLT_40MV) || \\\r\n                                                 ((type) == AON_ACOMP_HYSTERESIS_VOLT_50MV) || \\\r\n                                                 ((type) == AON_ACOMP_HYSTERESIS_VOLT_60MV) || \\\r\n                                                 ((type) == AON_ACOMP_HYSTERESIS_VOLT_70MV))\r\n\r\n/*@} end of group ACOMP_Public_Constants */\r\n\r\n/** @defgroup  ACOMP_Public_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group ACOMP_Public_Macros */\r\n\r\n/** @defgroup  ACOMP_Public_Functions\r\n *  @{\r\n */\r\nvoid AON_ACOMP_Init(AON_ACOMP_ID_Type acompNo, AON_ACOMP_CFG_Type *cfg);\r\nvoid AON_ACOMP_Enable(AON_ACOMP_ID_Type acompNo);\r\nBL_Sts_Type AON_ACOMP_Get_Result(AON_ACOMP_ID_Type acompNo);\r\n\r\n/*@} end of group ACOMP_Public_Functions */\r\n\r\n/*@} end of group ACOMP */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_ACOMP_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_adc.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_adc.h\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver header file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n#ifndef __BL702_ADC_H__\r\n#define __BL702_ADC_H__\r\n\r\n#include \"aon_reg.h\"\r\n#include \"bl702_common.h\"\r\n#include \"gpip_reg.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  ADC\r\n *  @{\r\n */\r\n\r\n/** @defgroup  ADC_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief ADC channel type definition\r\n */\r\ntypedef enum {\r\n  ADC_CHAN0,          /*!< ADC channel 0 */\r\n  ADC_CHAN1,          /*!< ADC channel 1 */\r\n  ADC_CHAN2,          /*!< ADC channel 2 */\r\n  ADC_CHAN3,          /*!< ADC channel 3 */\r\n  ADC_CHAN4,          /*!< ADC channel 4 */\r\n  ADC_CHAN5,          /*!< ADC channel 5 */\r\n  ADC_CHAN6,          /*!< ADC channel 6 */\r\n  ADC_CHAN7,          /*!< ADC channel 7 */\r\n  ADC_CHAN8,          /*!< ADC channel 8 */\r\n  ADC_CHAN9,          /*!< ADC channel 9 */\r\n  ADC_CHAN10,         /*!< ADC channel 10 */\r\n  ADC_CHAN11,         /*!< ADC channel 11 */\r\n  ADC_CHAN_DAC_OUTA,  /*!< DACA, ADC channel 12 */\r\n  ADC_CHAN_DAC_OUTB,  /*!< DACB, ADC channel 13 */\r\n  ADC_CHAN_TSEN_P,    /*!< TSenp, ADC channel 14 */\r\n  ADC_CHAN_TSEN_N,    /*!< TSenn, ADC channel 15 */\r\n  ADC_CHAN_VREF,      /*!< Vref, ADC channel 16 */\r\n  ADC_CHAN_DCTEST,    /*!< DCTest, ADC channel 17 */\r\n  ADC_CHAN_VABT_HALF, /*!< VBAT/2, ADC channel 18 */\r\n  ADC_CHAN_SENP3,     /*!< SenVP3, ADC channel 19 */\r\n  ADC_CHAN_SENP2,     /*!< SenVP2, ADC channel 20 */\r\n  ADC_CHAN_SENP1,     /*!< SenVP1, ADC channel 21 */\r\n  ADC_CHAN_SENP0,     /*!< SenVP0, ADC channel 22 */\r\n  ADC_CHAN_GND,       /*!< GND, ADC channel 23 */\r\n} ADC_Chan_Type;\r\n\r\n/**\r\n *  @brief ADC V18 selection type definition\r\n */\r\ntypedef enum {\r\n  ADC_V18_SEL_1P62V, /*!< V18 select 1.62V */\r\n  ADC_V18_SEL_1P72V, /*!< V18 select 1.72V */\r\n  ADC_V18_SEL_1P82V, /*!< V18 select 1.82V */\r\n  ADC_V18_SEL_1P92V, /*!< V18 select 1.92V */\r\n} ADC_V18_SEL_Type;\r\n\r\n/**\r\n *  @brief ADC V11 selection type definition\r\n */\r\ntypedef enum {\r\n  ADC_V11_SEL_1P0V,  /*!< V11 select 1.0V */\r\n  ADC_V11_SEL_1P1V,  /*!< V11 select 1.1V */\r\n  ADC_V11_SEL_1P18V, /*!< V11 select 1.18V */\r\n  ADC_V11_SEL_1P26V, /*!< V11 select 1.26V */\r\n} ADC_V11_SEL_Type;\r\n\r\n/**\r\n *  @brief ADC clock type definition\r\n */\r\ntypedef enum {\r\n  ADC_CLK_DIV_1,  /*!< ADC clock:on 32M clock is 32M */\r\n  ADC_CLK_DIV_4,  /*!< ADC clock:on 32M clock is 8M */\r\n  ADC_CLK_DIV_8,  /*!< ADC clock:on 32M clock is 4M */\r\n  ADC_CLK_DIV_12, /*!< ADC clock:on 32M clock is 2.666M */\r\n  ADC_CLK_DIV_16, /*!< ADC clock:on 32M clock is 2M */\r\n  ADC_CLK_DIV_20, /*!< ADC clock:on 32M clock is 1.6M */\r\n  ADC_CLK_DIV_24, /*!< ADC clock:on 32M clock is 1.333M */\r\n  ADC_CLK_DIV_32, /*!< ADC clock:on 32M clock is 1M */\r\n} ADC_CLK_Type;\r\n\r\n/**\r\n *  @brief ADC conversion speed type definition\r\n */\r\ntypedef enum {\r\n  ADC_DELAY_SEL_0, /*!< Select delay 0 */\r\n  ADC_DELAY_SEL_1, /*!< Select delay 1 */\r\n  ADC_DELAY_SEL_2, /*!< Select delay 2 */\r\n  ADC_DELAY_SEL_3, /*!< Select delay 3 */\r\n  ADC_DELAY_SEL_4, /*!< Select delay 4, not recommend */\r\n  ADC_DELAY_SEL_5, /*!< Select delay 5, not recommend */\r\n  ADC_DELAY_SEL_6, /*!< Select delay 6, not recommend */\r\n  ADC_DELAY_SEL_7, /*!< Select delay 7, not recommend */\r\n} ADC_DELAY_SEL_Type;\r\n\r\n/**\r\n *  @brief ADC PGA gain type definition\r\n */\r\ntypedef enum {\r\n  ADC_PGA_GAIN_NONE, /*!< No PGA gain */\r\n  ADC_PGA_GAIN_1,    /*!< PGA gain 1 */\r\n  ADC_PGA_GAIN_2,    /*!< PGA gain 2 */\r\n  ADC_PGA_GAIN_4,    /*!< PGA gain 4 */\r\n  ADC_PGA_GAIN_8,    /*!< PGA gain 8 */\r\n  ADC_PGA_GAIN_16,   /*!< PGA gain 16 */\r\n  ADC_PGA_GAIN_32,   /*!< PGA gain 32 */\r\n} ADC_PGA_GAIN_Type;\r\n\r\n/**\r\n *  @brief ADC analog portion low power mode selection type definition\r\n */\r\ntypedef enum {\r\n  ADC_BIAS_SEL_MAIN_BANDGAP, /*!< ADC current from main bandgap */\r\n  ADC_BIAS_SEL_AON_BANDGAP,  /*!< ADC current from aon bandgap for HBN mode */\r\n} ADC_BIAS_SEL_Type;\r\n\r\n/**\r\n *  @brief ADC chop mode type definition\r\n */\r\ntypedef enum {\r\n  ADC_CHOP_MOD_ALL_OFF,       /*!< all off */\r\n  ADC_CHOP_MOD_AZ_ON,         /*!< Vref AZ on */\r\n  ADC_CHOP_MOD_AZ_PGA_ON,     /*!< Vref AZ and PGA chop on */\r\n  ADC_CHOP_MOD_AZ_PGA_RPC_ON, /*!< Vref AZ and PGA chop+RPC on */\r\n} ADC_CHOP_MOD_Type;\r\n\r\n/**\r\n *  @brief ADC audio PGA output common mode control type definition\r\n */\r\ntypedef enum {\r\n  ADC_PGA_VCM_1V,   /*!< ADC VCM=1V */\r\n  ADC_PGA_VCM_1P2V, /*!< ADC VCM=1.2V */\r\n  ADC_PGA_VCM_1P4V, /*!< ADC VCM=1.4V */\r\n  ADC_PGA_VCM_1P6V, /*!< ADC VCM=1.6V */\r\n} ADC_PGA_VCM_Type;\r\n\r\n/**\r\n *  @brief ADC tsen diode mode type definition\r\n */\r\ntypedef enum {\r\n  ADC_TSEN_MOD_INTERNAL_DIODE, /*!< Internal diode mode */\r\n  ADC_TSEN_MOD_EXTERNAL_DIODE, /*!< External diode mode */\r\n} ADC_TSEN_MOD_Type;\r\n\r\n/**\r\n *  @brief ADC voltage reference type definition\r\n */\r\ntypedef enum {\r\n  ADC_VREF_3P2V, /*!< ADC select 3.2V as reference voltage */\r\n  ADC_VREF_2P0V, /*!< ADC select 2V as reference voltage */\r\n} ADC_VREF_Type;\r\n\r\n/**\r\n *  @brief ADC signal input type definition\r\n */\r\ntypedef enum {\r\n  ADC_INPUT_SINGLE_END, /*!< ADC signal is single end */\r\n  ADC_INPUT_DIFF,       /*!< ADC signal is differential */\r\n} ADC_SIG_INPUT_Type;\r\n\r\n/**\r\n *  @brief ADC data width type definition\r\n */\r\ntypedef enum {\r\n  ADC_DATA_WIDTH_12,                  /*!< ADC 12 bits */\r\n  ADC_DATA_WIDTH_14_WITH_16_AVERAGE,  /*!< ADC 14 bits,and the value is average of 16 converts */\r\n  ADC_DATA_WIDTH_14_WITH_64_AVERAGE,  /*!< ADC 14 bits,and the value is average of 64 converts */\r\n  ADC_DATA_WIDTH_16_WITH_128_AVERAGE, /*!< ADC 16 bits,and the value is average of 128 converts */\r\n  ADC_DATA_WIDTH_16_WITH_256_AVERAGE, /*!< ADC 16 bits,and the value is average of 256 converts */\r\n} ADC_Data_Width_Type;\r\n\r\n/**\r\n *  @brief ADC micboost 32db type definition\r\n */\r\ntypedef enum {\r\n  ADC_MICBOOST_DB_16DB, /*!< MIC boost 16db */\r\n  ADC_MICBOOST_DB_32DB, /*!< MIC boost 32db */\r\n} ADC_MICBOOST_DB_Type;\r\n\r\n/**\r\n *  @brief ADC pga2 gain type definition\r\n */\r\ntypedef enum {\r\n  ADC_PGA2_GAIN_0DB,  /*!< MIC pga2 gain 0db */\r\n  ADC_PGA2_GAIN_6DB,  /*!< MIC pga2 gain 6db */\r\n  ADC_PGA2_GAIN_N6DB, /*!< MIC pga2 gain -6db */\r\n  ADC_PGA2_GAIN_12DB, /*!< MIC pga2 gain 12db */\r\n} ADC_PGA2_GAIN_Type;\r\n\r\n/**\r\n *  @brief ADC mic mode type definition\r\n */\r\ntypedef enum {\r\n  ADC_MIC_MODE_SINGLE, /*!< MIC single mode */\r\n  ADC_MIC_MODE_DIFF,   /*!< MIC diff mode */\r\n} ADC_MIC_MODE_Type;\r\n\r\n/**\r\n *  @brief ADC mic type definition\r\n */\r\ntypedef struct {\r\n  ADC_MICBOOST_DB_Type micboostDb;       /*!< MIC boost db */\r\n  ADC_PGA2_GAIN_Type   micPga2Gain;      /*!< MIC pga2 gain */\r\n  ADC_MIC_MODE_Type    mic1Mode;         /*!< MIC1 single or diff */\r\n  ADC_MIC_MODE_Type    mic2Mode;         /*!< MIC2 single or diff */\r\n  BL_Fun_Type          dwaEn;            /*!< Improve dynamic performance */\r\n  BL_Fun_Type          micboostBypassEn; /*!< MIC boost amp bypass enable or disable */\r\n  BL_Fun_Type          micPgaEn;         /*!< MIC pga enable or disable */\r\n  BL_Fun_Type          micBiasEn;        /*!< MIC bias enable or disable */\r\n} ADC_MIC_Type;\r\n\r\n/**\r\n *  @brief ADC configuration type definition\r\n */\r\ntypedef struct {\r\n  ADC_V18_SEL_Type    v18Sel;         /*!< ADC 1.8V select */\r\n  ADC_V11_SEL_Type    v11Sel;         /*!< ADC 1.1V select */\r\n  ADC_CLK_Type        clkDiv;         /*!< Clock divider */\r\n  ADC_PGA_GAIN_Type   gain1;          /*!< PGA gain 1 */\r\n  ADC_PGA_GAIN_Type   gain2;          /*!< PGA gain 2 */\r\n  ADC_CHOP_MOD_Type   chopMode;       /*!< ADC chop mode select */\r\n  ADC_BIAS_SEL_Type   biasSel;        /*!< ADC current form main bandgap or aon bandgap */\r\n  ADC_PGA_VCM_Type    vcm;            /*!< ADC VCM value */\r\n  ADC_VREF_Type       vref;           /*!< ADC voltage reference */\r\n  ADC_SIG_INPUT_Type  inputMode;      /*!< ADC input signal type */\r\n  ADC_Data_Width_Type resWidth;       /*!< ADC resolution and oversample rate */\r\n  BL_Fun_Type         offsetCalibEn;  /*!< Offset calibration enable */\r\n  int16_t             offsetCalibVal; /*!< Offset calibration value */\r\n} ADC_CFG_Type;\r\n\r\n/**\r\n *  @brief ADC configuration type definition\r\n */\r\ntypedef struct {\r\n  int8_t   posChan; /*!< Positive channel */\r\n  int8_t   negChan; /*!< Negative channel */\r\n  uint32_t value;   /*!< ADC value */\r\n  // float    volt;    /*!< ADC voltage result */\r\n} ADC_Result_Type;\r\n\r\n/**\r\n *  @brief ADC FIFO threshold type definition\r\n */\r\ntypedef enum {\r\n  ADC_FIFO_THRESHOLD_1,  /*!< ADC FIFO threshold is 1 */\r\n  ADC_FIFO_THRESHOLD_4,  /*!< ADC FIFO threshold is 4 */\r\n  ADC_FIFO_THRESHOLD_8,  /*!< ADC FIFO threshold is 8 */\r\n  ADC_FIFO_THRESHOLD_16, /*!< ADC FIFO threshold is 16 */\r\n} ADC_FIFO_Threshold_Type;\r\n\r\n/**\r\n *  @brief ADC interrupt type definition\r\n */\r\ntypedef enum {\r\n  ADC_INT_POS_SATURATION, /*!< ADC positive channel saturation */\r\n  ADC_INT_NEG_SATURATION, /*!< ADC negative channel saturation */\r\n  ADC_INT_FIFO_UNDERRUN,  /*!< ADC FIFO underrun interrupt */\r\n  ADC_INT_FIFO_OVERRUN,   /*!< ADC FIFO overrun interrupt */\r\n  ADC_INT_ADC_READY,      /*!< ADC data ready interrupt */\r\n  ADC_INT_FIFO_READY,     /*!< ADC FIFO count upper to threhold interrupt */\r\n  ADC_INT_ALL,            /*!< ADC all the interrupt */\r\n} ADC_INT_Type;\r\n\r\n/**\r\n *  @brief ADC FIFO configuration structure type definition\r\n */\r\ntypedef struct {\r\n  ADC_FIFO_Threshold_Type fifoThreshold; /*!< ADC FIFO threshold */\r\n  BL_Fun_Type             dmaEn;         /*!< ADC DMA enable */\r\n} ADC_FIFO_Cfg_Type;\r\n\r\n/**\r\n *  @brief ADC REG GAIN CAL\r\n */\r\ntypedef struct {\r\n  BL_Fun_Type adcGainCoeffEnable; /*!< ADC_Gain_Coeff enable */\r\n  uint16_t    adcgainCoeffVal;    /*!< ADC_Gain_Coeff value */\r\n  float       coe;                /*!< ADC_Gain_Coeff result */\r\n} ADC_Gain_Coeff_Type;\r\n\r\n/*@} end of group ADC_Public_Types */\r\n\r\n/** @defgroup  ADC_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  ADC_CHAN_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_CHAN_TYPE(type)                                                                                                                                                                         \\\r\n  (((type) == ADC_CHAN0) || ((type) == ADC_CHAN1) || ((type) == ADC_CHAN2) || ((type) == ADC_CHAN3) || ((type) == ADC_CHAN4) || ((type) == ADC_CHAN5) || ((type) == ADC_CHAN6) ||                      \\\r\n   ((type) == ADC_CHAN7) || ((type) == ADC_CHAN8) || ((type) == ADC_CHAN9) || ((type) == ADC_CHAN10) || ((type) == ADC_CHAN11) || ((type) == ADC_CHAN_DAC_OUTA) || ((type) == ADC_CHAN_DAC_OUTB) ||    \\\r\n   ((type) == ADC_CHAN_TSEN_P) || ((type) == ADC_CHAN_TSEN_N) || ((type) == ADC_CHAN_VREF) || ((type) == ADC_CHAN_DCTEST) || ((type) == ADC_CHAN_VABT_HALF) || ((type) == ADC_CHAN_SENP3) ||           \\\r\n   ((type) == ADC_CHAN_SENP2) || ((type) == ADC_CHAN_SENP1) || ((type) == ADC_CHAN_SENP0) || ((type) == ADC_CHAN_GND))\r\n\r\n/** @defgroup  ADC_V18_SEL_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_V18_SEL_TYPE(type) (((type) == ADC_V18_SEL_1P62V) || ((type) == ADC_V18_SEL_1P72V) || ((type) == ADC_V18_SEL_1P82V) || ((type) == ADC_V18_SEL_1P92V))\r\n\r\n/** @defgroup  ADC_V11_SEL_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_V11_SEL_TYPE(type) (((type) == ADC_V11_SEL_1P0V) || ((type) == ADC_V11_SEL_1P1V) || ((type) == ADC_V11_SEL_1P18V) || ((type) == ADC_V11_SEL_1P26V))\r\n\r\n/** @defgroup  ADC_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_CLK_TYPE(type)                                                                                                                                                                          \\\r\n  (((type) == ADC_CLK_DIV_1) || ((type) == ADC_CLK_DIV_4) || ((type) == ADC_CLK_DIV_8) || ((type) == ADC_CLK_DIV_12) || ((type) == ADC_CLK_DIV_16) || ((type) == ADC_CLK_DIV_20) ||                    \\\r\n   ((type) == ADC_CLK_DIV_24) || ((type) == ADC_CLK_DIV_32))\r\n\r\n/** @defgroup  ADC_DELAY_SEL_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_DELAY_SEL_TYPE(type)                                                                                                                                                                    \\\r\n  (((type) == ADC_DELAY_SEL_0) || ((type) == ADC_DELAY_SEL_1) || ((type) == ADC_DELAY_SEL_2) || ((type) == ADC_DELAY_SEL_3) || ((type) == ADC_DELAY_SEL_4) || ((type) == ADC_DELAY_SEL_5) ||           \\\r\n   ((type) == ADC_DELAY_SEL_6) || ((type) == ADC_DELAY_SEL_7))\r\n\r\n/** @defgroup  ADC_PGA_GAIN_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_PGA_GAIN_TYPE(type)                                                                                                                                                                     \\\r\n  (((type) == ADC_PGA_GAIN_NONE) || ((type) == ADC_PGA_GAIN_1) || ((type) == ADC_PGA_GAIN_2) || ((type) == ADC_PGA_GAIN_4) || ((type) == ADC_PGA_GAIN_8) || ((type) == ADC_PGA_GAIN_16) ||             \\\r\n   ((type) == ADC_PGA_GAIN_32))\r\n\r\n/** @defgroup  ADC_BIAS_SEL_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_BIAS_SEL_TYPE(type) (((type) == ADC_BIAS_SEL_MAIN_BANDGAP) || ((type) == ADC_BIAS_SEL_AON_BANDGAP))\r\n\r\n/** @defgroup  ADC_CHOP_MOD_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_CHOP_MOD_TYPE(type) (((type) == ADC_CHOP_MOD_ALL_OFF) || ((type) == ADC_CHOP_MOD_AZ_ON) || ((type) == ADC_CHOP_MOD_AZ_PGA_ON) || ((type) == ADC_CHOP_MOD_AZ_PGA_RPC_ON))\r\n\r\n/** @defgroup  ADC_PGA_VCM_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_PGA_VCM_TYPE(type) (((type) == ADC_PGA_VCM_1V) || ((type) == ADC_PGA_VCM_1P2V) || ((type) == ADC_PGA_VCM_1P4V) || ((type) == ADC_PGA_VCM_1P6V))\r\n\r\n/** @defgroup  ADC_TSEN_MOD_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_TSEN_MOD_TYPE(type) (((type) == ADC_TSEN_MOD_INTERNAL_DIODE) || ((type) == ADC_TSEN_MOD_EXTERNAL_DIODE))\r\n\r\n/** @defgroup  ADC_VREF_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_VREF_TYPE(type) (((type) == ADC_VREF_3P3V) || ((type) == ADC_VREF_2V))\r\n\r\n/** @defgroup  ADC_SIG_INPUT_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_SIG_INPUT_TYPE(type) (((type) == ADC_INPUT_SINGLE_END) || ((type) == ADC_INPUT_DIFF))\r\n\r\n/** @defgroup  ADC_DATA_WIDTH_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_DATA_WIDTH_TYPE(type)                                                                                                                                                                   \\\r\n  (((type) == ADC_DATA_WIDTH_12) || ((type) == ADC_DATA_WIDTH_14_WITH_16_AVERAGE) || ((type) == ADC_DATA_WIDTH_14_WITH_64_AVERAGE) || ((type) == ADC_DATA_WIDTH_16_WITH_128_AVERAGE) ||                \\\r\n   ((type) == ADC_DATA_WIDTH_16_WITH_256_AVERAGE))\r\n\r\n/** @defgroup  ADC_MICBOOST_DB_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_MICBOOST_DB_TYPE(type) (((type) == ADC_MICBOOST_DB_16DB) || ((type) == ADC_MICBOOST_DB_32DB))\r\n\r\n/** @defgroup  ADC_PGA2_GAIN_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_PGA2_GAIN_TYPE(type) (((type) == ADC_PGA2_GAIN_0DB) || ((type) == ADC_PGA2_GAIN_6DB) || ((type) == ADC_PGA2_GAIN_N6DB) || ((type) == ADC_PGA2_GAIN_12DB))\r\n\r\n/** @defgroup  ADC_MIC_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_MIC_MODE_TYPE(type) (((type) == ADC_MIC_MODE_SINGLE) || ((type) == ADC_MIC_MODE_DIFF))\r\n\r\n/** @defgroup  ADC_FIFO_THRESHOLD_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_FIFO_THRESHOLD_TYPE(type) (((type) == ADC_FIFO_THRESHOLD_1) || ((type) == ADC_FIFO_THRESHOLD_4) || ((type) == ADC_FIFO_THRESHOLD_8) || ((type) == ADC_FIFO_THRESHOLD_16))\r\n\r\n/** @defgroup  ADC_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_ADC_INT_TYPE(type)                                                                                                                                                                          \\\r\n  (((type) == ADC_INT_POS_SATURATION) || ((type) == ADC_INT_NEG_SATURATION) || ((type) == ADC_INT_FIFO_UNDERRUN) || ((type) == ADC_INT_FIFO_OVERRUN) || ((type) == ADC_INT_ADC_READY) ||               \\\r\n   ((type) == ADC_INT_FIFO_READY) || ((type) == ADC_INT_ALL))\r\n\r\n/*@} end of group ADC_Public_Constants */\r\n\r\n/** @defgroup  ADC_Public_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group ADC_Public_Macros */\r\n\r\n/** @defgroup  ADC_Public_Functions\r\n *  @{\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid GPADC_DMA_IRQHandler(void);\r\n#endif\r\nvoid         ADC_Vbat_Enable(void);\r\nvoid         ADC_Vbat_Disable(void);\r\nvoid         ADC_Reset(void);\r\nvoid         ADC_Enable(void);\r\nvoid         ADC_Disable(void);\r\nvoid         ADC_Init(ADC_CFG_Type *cfg);\r\nvoid         ADC_Channel_Config(ADC_Chan_Type posCh, ADC_Chan_Type negCh, BL_Fun_Type contEn);\r\nvoid         ADC_Scan_Channel_Config(const ADC_Chan_Type posChList[], const ADC_Chan_Type negChList[], uint8_t scanLength, BL_Fun_Type contEn);\r\nvoid         ADC_Start(void);\r\nvoid         ADC_Stop(void);\r\nvoid         ADC_FIFO_Cfg(ADC_FIFO_Cfg_Type *fifoCfg);\r\nuint8_t      ADC_Get_FIFO_Count(void);\r\nBL_Sts_Type  ADC_FIFO_Is_Empty(void);\r\nBL_Sts_Type  ADC_FIFO_Is_Full(void);\r\nvoid         ADC_FIFO_Clear(void);\r\nuint32_t     ADC_Read_FIFO(void);\r\nvoid         ADC_Parse_Result(uint32_t *orgVal, uint32_t len, ADC_Result_Type *result);\r\nvoid         ADC_IntClr(ADC_INT_Type intType);\r\nBL_Mask_Type ADC_IntGetMask(ADC_INT_Type intType);\r\nBL_Sts_Type  ADC_GetIntStatus(ADC_INT_Type intType);\r\nvoid         ADC_Int_Callback_Install(ADC_INT_Type intType, intCallback_Type *cbFun);\r\nvoid         ADC_IntMask(ADC_INT_Type intType, BL_Mask_Type intMask);\r\nvoid         ADC_SET_TSVBE_LOW(void);\r\nvoid         ADC_SET_TSVBE_HIGH(void);\r\nvoid         ADC_Tsen_Init(ADC_TSEN_MOD_Type tsenMod);\r\nvoid         ADC_Tsen_Enable(void);\r\nvoid         ADC_Tsen_Disable(void);\r\nvoid         ADC_PGA_Config(uint8_t pga_vcmi_enable, uint8_t pga_os_cal);\r\nBL_Err_Type  ADC_Mic_Init(ADC_MIC_Type *adc_mic_config);\r\nvoid         ADC_MIC_Bias_Disable(void);\r\nvoid         ADC_MIC_Bias_Enable(void);\r\nBL_Err_Type  ADC_Trim_TSEN(uint16_t *tsen_offset);\r\nBL_Err_Type  ADC_Gain_Trim(void);\r\nuint32_t     ADC_Cal_Reg_Coeff_Value(uint32_t raw_reg);\r\nfloat        TSEN_Get_Temp(uint32_t tsen_offset);\r\n\r\n/*@} end of group ADC_Public_Functions */\r\n\r\n/*@} end of group ADC */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_ADC_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_aon.h",
    "content": "/**\n  ******************************************************************************\n  * @file    bl702_aon.h\n  * @version V1.0\n  * @date\n  * @brief   This file is the standard driver header file\n  ******************************************************************************\n  * @attention\n  *\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\n  *\n  * Redistribution and use in source and binary forms, with or without modification,\n  * are permitted provided that the following conditions are met:\n  *   1. Redistributions of source code must retain the above copyright notice,\n  *      this list of conditions and the following disclaimer.\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n  *      this list of conditions and the following disclaimer in the documentation\n  *      and/or other materials provided with the distribution.\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n  *      may be used to endorse or promote products derived from this software\n  *      without specific prior written permission.\n  *\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n  *\n  ******************************************************************************\n  */\n#ifndef __BL702_AON_H__\n#define __BL702_AON_H__\n\n#include \"aon_reg.h\"\n#include \"glb_reg.h\"\n#include \"hbn_reg.h\"\n#include \"pds_reg.h\"\n#include \"bl702_ef_ctrl.h\"\n#include \"bl702_common.h\"\n\n/** @addtogroup  BL702_Peripheral_Driver\n *  @{\n */\n\n/** @addtogroup  AON\n *  @{\n */\n\n/** @defgroup  AON_Public_Types\n *  @{\n */\n\n/*@} end of group AON_Public_Types */\n\n/** @defgroup  AON_Public_Constants\n *  @{\n */\n\n/*@} end of group AON_Public_Constants */\n\n/** @defgroup  AON_Public_Macros\n *  @{\n */\n\n/*@} end of group AON_Public_Macros */\n\n/** @defgroup  AON_Public_Functions\n *  @{\n */\n/*----------*/\nBL_Err_Type AON_Power_On_MBG(void);\nBL_Err_Type AON_Power_Off_MBG(void);\n/*----------*/\nBL_Err_Type AON_Power_On_XTAL(void);\nBL_Err_Type AON_Set_Xtal_CapCode(uint8_t capIn, uint8_t capOut);\nuint8_t AON_Get_Xtal_CapCode(void);\nBL_Err_Type AON_Set_Xtal_CapCode_Extra(uint8_t extra);\nBL_Err_Type AON_Power_Off_XTAL(void);\n/*----------*/\nBL_Err_Type AON_Power_On_BG(void);\nBL_Err_Type AON_Power_Off_BG(void);\n/*----------*/\nBL_Err_Type AON_Power_On_LDO11_SOC(void);\nBL_Err_Type AON_Power_Off_LDO11_SOC(void);\n/*----------*/\nBL_Err_Type AON_Power_On_LDO15_RF(void);\nBL_Err_Type AON_Power_Off_LDO15_RF(void);\n/*----------*/\nBL_Err_Type AON_Power_On_SFReg(void);\nBL_Err_Type AON_Power_Off_SFReg(void);\n/*----------*/\nBL_Err_Type AON_LowPower_Enter_PDS0(void);\nBL_Err_Type AON_LowPower_Exit_PDS0(void);\n/*----------*/\nBL_Err_Type AON_Set_LDO11_SOC_Sstart_Delay(uint8_t delay);\n/*----------*/\nBL_Err_Type AON_Set_DCDC18_Top_0(uint8_t voutSel, uint8_t vpfm);\nBL_Err_Type AON_Set_Xtal_Cfg(uint8_t gmBoost, uint8_t ampCtrl, uint8_t fastStartup);\n/*----------*/\n\n/*@} end of group AON_Public_Functions */\n\n/*@} end of group AON */\n\n/*@} end of group BL702_Peripheral_Driver */\n\n#endif /* __BL702_AON_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_cam.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_cam.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_CAM_H__\r\n#define __BL702_CAM_H__\r\n\r\n#include \"cam_reg.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  CAM\r\n *  @{\r\n */\r\n\r\n/** @defgroup  CAM_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief CAM AHB burst type definition\r\n */\r\ntypedef enum {\r\n    CAM_BURST_TYPE_SINGLE, /*!< Camera AHB burst type:single */\r\n    CAM_BURST_TYPE_INCR4,  /*!< Camera AHB burst type:incrementing 4 */\r\n    CAM_BURST_TYPE_INCR8,  /*!< Camera AHB burst type:incrementing 8 */\r\n    CAM_BURST_TYPE_INCR16, /*!< Camera AHB burst type:incrementing 16 */\r\n} CAM_Burst_Type;\r\n\r\n/**\r\n *  @brief CAM software mode type definition\r\n */\r\ntypedef enum {\r\n    CAM_SW_MODE_AUTO,   /*!< CAM auto mode with mjpeg */\r\n    CAM_SW_MODE_MANUAL, /*!< CAM manual mode(software mode) */\r\n} CAM_SW_Mode_Type;\r\n\r\n/**\r\n *  @brief CAM frame mode type definition\r\n */\r\ntypedef enum {\r\n    CAM_PLANAR_MODE,     /*!< CAM planar mode(YYYY.../UVUV...) */\r\n    CAM_INTERLEAVE_MODE, /*!< CAM interleave mode(YUYVYUYV...) */\r\n} CAM_Frame_Mode_Type;\r\n\r\n/**\r\n *  @brief CAM YUV mode type definition\r\n */\r\ntypedef enum {\r\n    CAM_YUV422,      /*!< CAM YUV422 mode */\r\n    CAM_YUV420_EVEN, /*!< CAM YUV420 mode(raw data:YUYV YUYV..., processed data:YUYV YY...) which dropped odd pix data in\r\n                                                 odd rows */\r\n    CAM_YUV420_ODD,  /*!< CAM YUV420 mode(raw data:UYVY UYVY..., processed data:UYVY YY...) which dropped even pix data\r\n                                                 in odd rows */\r\n    CAM_YUV400_EVEN, /*!< CAM YUV400 mode(raw data:YUYV YUYV..., processed data:YY YY...) which dropped odd pix data */\r\n    CAM_YUV400_ODD,  /*!< CAM YUV400 mode(raw data:UYVY UYVY..., processed data:YY YY...) which dropped even pix data */\r\n} CAM_YUV_Mode_Type;\r\n\r\n/**\r\n *  @brief CAM line active polarity type definition\r\n */\r\ntypedef enum {\r\n    CAM_LINE_ACTIVE_POLARITY_LOW,  /*!< CAM line active polarity low */\r\n    CAM_LINE_ACTIVE_POLARITY_HIGH, /*!< CAM line active polarity high */\r\n} CAM_Line_Active_Pol;\r\n\r\n/**\r\n *  @brief CAM frame active polarity type definition\r\n */\r\ntypedef enum {\r\n    CAM_FRAME_ACTIVE_POLARITY_LOW,  /*!< CAM frame active polarity low */\r\n    CAM_FRAME_ACTIVE_POLARITY_HIGH, /*!< CAM frame active polarity high */\r\n} CAM_Frame_Active_Pol;\r\n\r\n/**\r\n *  @brief CAM sensor mode type definition\r\n */\r\ntypedef enum {\r\n    CAM_SENSOR_MODE_V_AND_H, /*!< CAM sensor type v and h */\r\n    CAM_SENSOR_MODE_V_OR_H,  /*!< CAM sensor type v  or h */\r\n    CAM_SENSOR_MODE_V,       /*!< CAM sensor type v */\r\n    CAM_SENSOR_MODE_H,       /*!< CAM sensor type h */\r\n} CAM_Sensor_Mode_Type;\r\n\r\n/**\r\n *  @brief CAM interrupt type definition\r\n */\r\ntypedef enum {\r\n    CAM_INT_NORMAL_0,           /*!< Interleave mode: normal write interrupt,     planar mode:even byte normal write interrupt */\r\n    CAM_INT_NORMAL_1,           /*!< Interleave mode: no use,                     planar mode:odd byte normal write interrupt */\r\n    CAM_INT_MEMORY_OVERWRITE_0, /*!< Interleave mode: memory overwrite interrupt, planar mode:even byte memory overwrite interrupt */\r\n    CAM_INT_MEMORY_OVERWRITE_1, /*!< Interleave mode: no use,                     planar mode:odd byte memory overwrite interrupt */\r\n    CAM_INT_FRAME_OVERWRITE_0,  /*!< Interleave mode: frame overwrite interrupt,  planar mode:even byte frame overwrite interrupt */\r\n    CAM_INT_FRAME_OVERWRITE_1,  /*!< Interleave mode: no use,                     planar mode:odd byte frame overwrite interrupt */\r\n    CAM_INT_FIFO_OVERWRITE_0,   /*!< Interleave mode: fifo overwrite interrupt,   planar mode:even byte fifo overwrite interrupt */\r\n    CAM_INT_FIFO_OVERWRITE_1,   /*!< Interleave mode: no use,                     planar mode:odd byte fifo overwrite interrupt */\r\n    CAM_INT_VSYNC_CNT_ERROR,    /*!< Vsync valid line count non-match interrupt */\r\n    CAM_INT_HSYNC_CNT_ERROR,    /*!< Hsync valid pixel count non-match interrupt */\r\n    CAM_INT_ALL,                /*!< All of interrupt */\r\n} CAM_INT_Type;\r\n\r\n/**\r\n *  @brief CAM configuration strcut definition\r\n */\r\ntypedef struct\r\n{\r\n    CAM_SW_Mode_Type swMode;            /*!< Software mode */\r\n    uint8_t swIntCnt;                   /*!< Set frame count to issue interrupt at software mode */\r\n    CAM_Frame_Mode_Type frameMode;      /*!< Frame mode */\r\n    CAM_YUV_Mode_Type yuvMode;          /*!< YUV mode */\r\n    CAM_Frame_Active_Pol framePol;      /*!< Frame polarity */\r\n    CAM_Line_Active_Pol linePol;        /*!< Line polarity */\r\n    CAM_Burst_Type burstType;           /*!< AHB burst type */\r\n    CAM_Sensor_Mode_Type camSensorMode; /*!< CAM sensor mode */\r\n    uint8_t waitCount;                  /*!< cycles in FSM wait mode, default value:0x40 */\r\n    uint32_t memStart0;                 /*!< Interleave mode:data start address,   planar mode:even byte start address */\r\n    uint32_t memSize0;                  /*!< Interleave mode:memory size in burst, planar mode:even byte memory size in burst */\r\n    uint32_t frameSize0;                /*!< Interleave mode:frame size in burst,  planar mode:even byte frame size in burst */\r\n    uint32_t memStart1;                 /*!< Interleave mode:no use,               planar mode:odd byte start address */\r\n    uint32_t memSize1;                  /*!< Interleave mode:no use,               planar mode:odd byte memory size in burst */\r\n    uint32_t frameSize1;                /*!< Interleave mode:no use,               planar mode:odd byte frame size in burst */\r\n} CAM_CFG_Type;\r\n\r\n/**\r\n *  @brief CAM interleave mode frame information strcut definition\r\n */\r\ntypedef struct\r\n{\r\n    uint8_t validFrames;    /*!< Valid frames */\r\n    uint32_t curFrameAddr;  /*!< Current frame address */\r\n    uint32_t curFrameBytes; /*!< Current frame bytes */\r\n    uint32_t status;        /*!< CAM module status */\r\n} CAM_Interleave_Frame_Info;\r\n\r\n/**\r\n *  @brief CAM planar mode frame information strcut definition\r\n */\r\ntypedef struct\r\n{\r\n    uint8_t validFrames0;    /*!< Even byte frame counts in memory */\r\n    uint8_t validFrames1;    /*!< Odd byte frame counts in memory */\r\n    uint32_t curFrameAddr0;  /*!< Current even frame address */\r\n    uint32_t curFrameAddr1;  /*!< Current odd frame address */\r\n    uint32_t curFrameBytes0; /*!< Current even frame bytes */\r\n    uint32_t curFrameBytes1; /*!< Current odd frame bytes */\r\n    uint32_t status;         /*!< CAM module status */\r\n} CAM_Planar_Frame_Info;\r\n\r\n/*@} end of group CAM_Public_Types */\r\n\r\n/** @defgroup  CAM_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  CAM_BURST_TYPE\r\n *  @{\r\n */\r\n#define IS_CAM_BURST_TYPE(type) (((type) == CAM_BURST_TYPE_SINGLE) || \\\r\n                                 ((type) == CAM_BURST_TYPE_INCR4) ||  \\\r\n                                 ((type) == CAM_BURST_TYPE_INCR8) ||  \\\r\n                                 ((type) == CAM_BURST_TYPE_INCR16))\r\n\r\n/** @defgroup  CAM_SW_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_CAM_SW_MODE_TYPE(type) (((type) == CAM_SW_MODE_AUTO) || \\\r\n                                   ((type) == CAM_SW_MODE_MANUAL))\r\n\r\n/** @defgroup  CAM_FRAME_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_CAM_FRAME_MODE_TYPE(type) (((type) == CAM_PLANAR_MODE) || \\\r\n                                      ((type) == CAM_INTERLEAVE_MODE))\r\n\r\n/** @defgroup  CAM_YUV_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_CAM_YUV_MODE_TYPE(type) (((type) == CAM_YUV422) ||      \\\r\n                                    ((type) == CAM_YUV420_EVEN) || \\\r\n                                    ((type) == CAM_YUV420_ODD) ||  \\\r\n                                    ((type) == CAM_YUV400_EVEN) || \\\r\n                                    ((type) == CAM_YUV400_ODD))\r\n\r\n/** @defgroup  CAM_LINE_ACTIVE_POL\r\n *  @{\r\n */\r\n#define IS_CAM_LINE_ACTIVE_POL(type) (((type) == CAM_LINE_ACTIVE_POLARITY_LOW) || \\\r\n                                      ((type) == CAM_LINE_ACTIVE_POLARITY_HIGH))\r\n\r\n/** @defgroup  CAM_FRAME_ACTIVE_POL\r\n *  @{\r\n */\r\n#define IS_CAM_FRAME_ACTIVE_POL(type) (((type) == CAM_FRAME_ACTIVE_POLARITY_LOW) || \\\r\n                                       ((type) == CAM_FRAME_ACTIVE_POLARITY_HIGH))\r\n\r\n/** @defgroup  CAM_SENSOR_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_CAM_SENSOR_MODE_TYPE(type) (((type) == CAM_SENSOR_MODE_V_AND_H) || \\\r\n                                       ((type) == CAM_SENSOR_MODE_V_OR_H) ||  \\\r\n                                       ((type) == CAM_SENSOR_MODE_V) ||       \\\r\n                                       ((type) == CAM_SENSOR_MODE_H))\r\n\r\n/** @defgroup  CAM_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_CAM_INT_TYPE(type) (((type) == CAM_INT_NORMAL_0) ||           \\\r\n                               ((type) == CAM_INT_NORMAL_1) ||           \\\r\n                               ((type) == CAM_INT_MEMORY_OVERWRITE_0) || \\\r\n                               ((type) == CAM_INT_MEMORY_OVERWRITE_1) || \\\r\n                               ((type) == CAM_INT_FRAME_OVERWRITE_0) ||  \\\r\n                               ((type) == CAM_INT_FRAME_OVERWRITE_1) ||  \\\r\n                               ((type) == CAM_INT_FIFO_OVERWRITE_0) ||   \\\r\n                               ((type) == CAM_INT_FIFO_OVERWRITE_1) ||   \\\r\n                               ((type) == CAM_INT_VSYNC_CNT_ERROR) ||    \\\r\n                               ((type) == CAM_INT_HSYNC_CNT_ERROR) ||    \\\r\n                               ((type) == CAM_INT_ALL))\r\n\r\n/*@} end of group CAM_Public_Constants */\r\n\r\n/** @defgroup  CAM_Public_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group CAM_Public_Macros */\r\n\r\n/** @defgroup  CAM_Public_Functions\r\n *  @{\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid CAM_IRQHandler(void);\r\n#endif\r\nvoid CAM_Init(CAM_CFG_Type *cfg);\r\nvoid CAM_Deinit(void);\r\nvoid CAM_Enable(void);\r\nvoid CAM_Disable(void);\r\nvoid CAM_Clock_Gate(BL_Fun_Type enable);\r\nvoid CAM_Hsync_Crop(uint16_t start, uint16_t end);\r\nvoid CAM_Vsync_Crop(uint16_t start, uint16_t end);\r\nvoid CAM_Set_Hsync_Total_Count(uint16_t count);\r\nvoid CAM_Set_Vsync_Total_Count(uint16_t count);\r\nvoid CAM_Interleave_Get_Frame_Info(CAM_Interleave_Frame_Info *info);\r\nvoid CAM_Planar_Get_Frame_Info(CAM_Planar_Frame_Info *info);\r\nuint8_t CAM_Get_Frame_Count_0(void);\r\nuint8_t CAM_Get_Frame_Count_1(void);\r\nvoid CAM_Interleave_Pop_Frame(void);\r\nvoid CAM_Planar_Pop_Frame(void);\r\nvoid CAM_IntMask(CAM_INT_Type intType, BL_Mask_Type intMask);\r\nvoid CAM_IntClr(CAM_INT_Type intType);\r\nvoid CAM_Int_Callback_Install(CAM_INT_Type intType, intCallback_Type *cbFun);\r\nvoid CAM_HW_Mode_Wrap(BL_Fun_Type enable);\r\n\r\n/*@} end of group CAM_Public_Functions */\r\n\r\n/*@} end of group CAM */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_CAM_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_clock.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_clock.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_CLOCK_H__\r\n#define __BL702_CLOCK_H__\r\n\r\n#include \"glb_reg.h\"\r\n#include \"bl702_hbn.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  CLOCK\r\n *  @{\r\n */\r\n\r\n/** @defgroup  CLOCK_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief System clock type definition\r\n */\r\ntypedef enum {\r\n    BL_SYSTEM_CLOCK_FCLK, /*!< Fast clock/CPU clock */\r\n    BL_SYSTEM_CLOCK_BCLK, /*!< BUS clock */\r\n    BL_SYSTEM_CLOCK_F32K, /*!< F32K clock */\r\n    BL_SYSTEM_CLOCK_XCLK, /*!< XCLK:RC32M or XTAL */\r\n    BL_SYSTEM_CLOCK_XTAL, /*!< XTAL clock */\r\n    BL_SYSTEM_CLOCK_MAX,  /*!< MAX type of system clock */\r\n} BL_System_Clock_Type;\r\n\r\n/**\r\n *  @brief SOC clock config type\r\n */\r\ntypedef struct\r\n{\r\n    uint16_t systemClock[BL_SYSTEM_CLOCK_MAX];   /*!< System lock value */\r\n    uint16_t peripheralClock[BL_AHB_SLAVE1_MAX]; /*!< Pewripherals clock value */\r\n    uint32_t i2sClock;                           /*!< I2S clock */\r\n} Clock_Cfg_Type;\r\n\r\n/*@} end of group CLOCK_Public_Types */\r\n\r\n/** @defgroup  CLOCK_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  BL_SYSTEM_CLOCK_TYPE\r\n *  @{\r\n */\r\n#define IS_BL_SYSTEM_CLOCK_TYPE(type) (((type) == BL_SYSTEM_CLOCK_FCLK) || \\\r\n                                       ((type) == BL_SYSTEM_CLOCK_BCLK) || \\\r\n                                       ((type) == BL_SYSTEM_CLOCK_F32K) || \\\r\n                                       ((type) == BL_SYSTEM_CLOCK_XCLK) || \\\r\n                                       ((type) == BL_SYSTEM_CLOCK_XTAL) || \\\r\n                                       ((type) == BL_SYSTEM_CLOCK_MAX))\r\n\r\n/*@} end of group CLOCK_Public_Constants */\r\n\r\n/** @defgroup  CLOCK_Public_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group CLOCK_Public_Macros */\r\n\r\n/** @defgroup  CLOCK_Public_Functions\r\n *  @{\r\n */\r\nvoid Clock_System_Clock_Set(BL_System_Clock_Type type, uint32_t clock);\r\nvoid Clock_Peripheral_Clock_Set(BL_AHB_Slave1_Type type, uint32_t clock);\r\nuint32_t Clock_System_Clock_Get(BL_System_Clock_Type type);\r\nuint32_t Clock_Peripheral_Clock_Get(BL_AHB_Slave1_Type type);\r\n\r\n/*@} end of group CLOCK_Public_Functions */\r\n\r\n/*@} end of group CLOCK */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_CLOCK_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_common.h",
    "content": "#ifndef __BL702_COMMON_H__\n#define __BL702_COMMON_H__\n\n#include \"bl702.h\"\n#include \"misc.h\"\n\n#ifndef __NOP\n#define __NOP() __ASM volatile(\"nop\") /* This implementation generates debug information */\n#endif\n#ifndef __WFI\n#define __WFI() __ASM volatile(\"wfi\") /* This implementation generates debug information */\n#endif\n#ifndef __WFE\n#define __WFE() __ASM volatile(\"wfe\") /* This implementation generates debug information */\n#endif\n#ifndef __SEV\n#define __SEV() __ASM volatile(\"sev\") /* This implementation generates debug information */\n#endif\n#ifndef __set_MSP\n#define __set_MSP(msp) __ASM volatile(\"add sp, x0, %0\" ::\"r\"(msp))\n#endif\n\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __REV(uint32_t value) {\n  // return __builtin_bswap32(value);\n  uint32_t res = 0;\n\n  res = (value << 24) | (value >> 24);\n  res &= 0xFF0000FF; /* only for sure */\n  res |= ((value >> 8) & 0x0000FF00) | ((value << 8) & 0x00FF0000);\n\n  return res;\n}\n\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __REV16(uint32_t value) { return __builtin_bswap16(value); }\n\n/**\n  \\brief   Enable IRQ Interrupts\n  \\details Enables IRQ interrupts by setting the IE-bit in the PSR.\n           Can only be executed in Privileged modes.\n */\n__ALWAYS_STATIC_INLINE void __enable_irq(void) { __ASM volatile(\"csrs mstatus, 8\"); }\n\n/**\n  \\brief   Disable IRQ Interrupts\n  \\details Disables IRQ interrupts by clearing the IE-bit in the PSR.\n  Can only be executed in Privileged modes.\n */\n__ALWAYS_STATIC_INLINE void __disable_irq(void) { __ASM volatile(\"csrc mstatus, 8\"); }\n\n/** @defgroup  COMMON_Public_Constants\n *  @{\n */\n\n/** @defgroup DRIVER_INT_PERIPH\n *  @{\n */\n#define IS_INT_PERIPH(INT_PERIPH) ((INT_PERIPH) < IRQn_LAST)\n\n/*@} end of group DRIVER_INT_PERIPH */\n\n/** @defgroup DRIVER_INT_MASK\n *  @{\n */\n#define IS_BL_MASK_TYPE(type) (((type) == MASK) || ((type) == UNMASK))\n\n/*@} end of group COMMON_Public_Constants */\n\n/*@} end of group DRIVER_Public_Macro */\n#define BL702_MemCpy      arch_memcpy\n#define BL702_MemSet      arch_memset\n#define BL702_MemCmp      arch_memcmp\n#define BL702_MemCpy4     arch_memcpy4\n#define BL702_MemCpy_Fast arch_memcpy_fast\n#define BL702_MemSet4     arch_memset4\n\n#define arch_delay_us BL702_Delay_US\n#define arch_delay_ms BL702_Delay_MS\n\nvoid BL702_Delay_US(uint32_t cnt);\nvoid BL702_Delay_MS(uint32_t cnt);\nvoid ASM_Delay_Us(uint32_t core, uint32_t cnt);\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_dac.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_dac.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_DAC_H__\r\n#define __BL702_DAC_H__\r\n\r\n#include \"aon_reg.h\"\r\n#include \"glb_reg.h\"\r\n#include \"gpip_reg.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  DAC\r\n *  @{\r\n */\r\n\r\n/** @defgroup  DAC_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief DAC reference voltage definition\r\n */\r\ntypedef enum {\r\n    GLB_DAC_REF_SEL_INTERNAL, /*!< DAC reference select internal */\r\n    GLB_DAC_REF_SEL_EXTERNAL, /*!< DAC reference select external */\r\n} GLB_DAC_Ref_Sel_Type;\r\n\r\n/**\r\n *  @brief DAC reference voltage definition\r\n */\r\ntypedef enum {\r\n    GLB_DAC_Output_Volt_0P2_1,       /*!< DAC output voltage is 0.2-1V */\r\n    GLB_DAC_Output_Volt_0P225_1P425, /*!< DAC output voltage is 0.225-1.425V */\r\n    GLB_DAC_Output_Volt_RESEVED,     /*!< DAC output voltage is 0.225-1.425V */\r\n    GLB_DAC_Output_Volt_0P2_1P8,     /*!< DAC output voltage is 0.2-1.8V */\r\n} GLB_DAC_Output_Volt_Range_Type;\r\n\r\n/**\r\n *  @brief DAC channel type definition\r\n */\r\ntypedef enum {\r\n    GLB_DAC_CHAN0,    /*!< DAC channel 0 */\r\n    GLB_DAC_CHAN1,    /*!< DAC channel 1 */\r\n    GLB_DAC_CHAN2,    /*!< DAC channel 2 */\r\n    GLB_DAC_CHAN3,    /*!< DAC channel 3 */\r\n    GLB_DAC_CHAN4,    /*!< DAC channel 4 */\r\n    GLB_DAC_CHAN5,    /*!< DAC channel 5 */\r\n    GLB_DAC_CHAN6,    /*!< DAC channel 6 */\r\n    GLB_DAC_CHAN7,    /*!< DAC channel 7 */\r\n    GLB_DAC_CHAN_ALL, /*!< DAC channel all */\r\n} GLB_DAC_Chan_Type;\r\n\r\n/**\r\n *  @brief DAC channel configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type chanEn;                      /*!< Enable this channel or not */\r\n    BL_Fun_Type outputEn;                    /*!< Output this channel result to PAD */\r\n    GLB_DAC_Chan_Type outMux;                /*!< DAC output mux,NOT implement yet,DAC use fixed GPIO9 and GPIO10 */\r\n    GLB_DAC_Output_Volt_Range_Type outRange; /*!< DAC output voltage range */\r\n} GLB_DAC_Chan_Cfg_Type;\r\n\r\n/**\r\n *  @brief DAC configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    GLB_DAC_Ref_Sel_Type refSel; /*!< DAC reference voltage select */\r\n    BL_Fun_Type resetChanA;      /*!< Reset DAC channel A */\r\n    BL_Fun_Type resetChanB;      /*!< Reset DAC channel B */\r\n} GLB_DAC_Cfg_Type;\r\n\r\n/**\r\n *  @brief DAC channel B source selection type definition\r\n */\r\ntypedef enum {\r\n    GPIP_DAC_ChanB_SRC_REG,             /*!< select Reg as source of DAC channel B */\r\n    GPIP_DAC_ChanB_SRC_DMA,             /*!< select DMA as source of DAC channel B */\r\n    GPIP_DAC_ChanB_SRC_DMA_WITH_FILTER, /*!< select DMA with Filter as source of DAC channel B */\r\n    GPIP_DAC_ChanB_SRC_SIN_GEN,         /*!< select Sin Gen as source of DAC channel B */\r\n    GPIP_DAC_ChanB_SRC_A,               /*!< select channel A as source of DAC channel B */\r\n    GPIP_DAC_ChanB_SRC_INVERSE_A,       /*!< select inverse of channel A as source of DAC channel B */\r\n} GPIP_DAC_ChanB_SRC_Type;\r\n\r\n/**\r\n *  @brief DAC channel A source selection type definition\r\n */\r\ntypedef enum {\r\n    GPIP_DAC_ChanA_SRC_REG,             /*!< select Reg as source of DAC channel A */\r\n    GPIP_DAC_ChanA_SRC_DMA,             /*!< select DMA as source of DAC channel A */\r\n    GPIP_DAC_ChanA_SRC_DMA_WITH_FILTER, /*!< select DMA with Filter as source of DAC channel A */\r\n    GPIP_DAC_ChanA_SRC_SIN_GEN,         /*!< select Sin Gen as source of DAC channel A */\r\n} GPIP_DAC_ChanA_SRC_Type;\r\n\r\n/**\r\n *  @brief DAC clock divider type definition\r\n */\r\ntypedef enum {\r\n    DAC_CLK_DIV_16,      /*!< ADC clock:on 32M clock is 2M */\r\n    DAC_CLK_DIV_32,      /*!< ADC clock:on 32M clock is 1M */\r\n    DAC_CLK_DIV_RESERVE, /*!< reserved */\r\n    DAC_CLK_DIV_64,      /*!< ADC clock:on 32M clock is 0.5M */\r\n    DAC_CLK_DIV_1,       /*!< ADC clock:on 32M clock is 32M */\r\n} DAC_CLK_Type;\r\n\r\n/**\r\n *  @brief DAC DMA TX format selection type definition\r\n */\r\ntypedef enum {\r\n    GPIP_DAC_DMA_FORMAT_0, /*!< {A0},{A1},{A2},... */\r\n    GPIP_DAC_DMA_FORMAT_1, /*!< {B0,A0},{B1,A1},{B2,A2},... */\r\n    GPIP_DAC_DMA_FORMAT_2, /*!< {A1,A0},{A3,A2},{A5,A4},... */\r\n} GPIP_DAC_DMA_TX_FORMAT_Type;\r\n\r\n/**\r\n *  @brief AON and GPIP DAC configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    GLB_DAC_Ref_Sel_Type refSel;        /*!< DAC reference voltage select */\r\n    BL_Fun_Type resetChanA;             /*!< Reset DAC channel A */\r\n    BL_Fun_Type resetChanB;             /*!< Reset DAC channel B */\r\n    DAC_CLK_Type div;                   /*!< DAC clock div */\r\n    BL_Fun_Type dmaEn;                  /*!< DAC DMA transfer enable */\r\n    GPIP_DAC_DMA_TX_FORMAT_Type dmaFmt; /*!< DAC DMA TX format selection */\r\n} GLB_GPIP_DAC_Cfg_Type;\r\n\r\n/**\r\n *  @brief AON and GPIP DAC channel A configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type chanCovtEn;      /*!< Enable this channel conversion or not */\r\n    BL_Fun_Type outputEn;        /*!< Output this channel result to PAD */\r\n    BL_Fun_Type chanEn;          /*!< Enable this channel or not */\r\n    GPIP_DAC_ChanA_SRC_Type src; /*!< DAC channel A source */\r\n} GLB_GPIP_DAC_ChanA_Cfg_Type;\r\n\r\n/**\r\n *  @brief AON and GPIP DAC channel B configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type chanCovtEn;      /*!< Enable this channel conversion or not */\r\n    BL_Fun_Type outputEn;        /*!< Output this channel result to PAD */\r\n    BL_Fun_Type chanEn;          /*!< Enable this channel or not */\r\n    GPIP_DAC_ChanB_SRC_Type src; /*!< DAC channel B source */\r\n} GLB_GPIP_DAC_ChanB_Cfg_Type;\r\n\r\n/*@} end of group DAC_Public_Types */\r\n\r\n/** @defgroup  DAC_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  GLB_DAC_REF_SEL_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_DAC_REF_SEL_TYPE(type) (((type) == GLB_DAC_REF_SEL_INTERNAL) || \\\r\n                                       ((type) == GLB_DAC_REF_SEL_EXTERNAL))\r\n\r\n/** @defgroup  GLB_DAC_OUTPUT_VOLT_RANGE_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_DAC_OUTPUT_VOLT_RANGE_TYPE(type) (((type) == GLB_DAC_Output_Volt_0P2_1) ||       \\\r\n                                                 ((type) == GLB_DAC_Output_Volt_0P225_1P425) || \\\r\n                                                 ((type) == GLB_DAC_Output_Volt_RESEVED) ||     \\\r\n                                                 ((type) == GLB_DAC_Output_Volt_0P2_1P8))\r\n\r\n/** @defgroup  GLB_DAC_CHAN_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_DAC_CHAN_TYPE(type) (((type) == GLB_DAC_CHAN0) || \\\r\n                                    ((type) == GLB_DAC_CHAN1) || \\\r\n                                    ((type) == GLB_DAC_CHAN2) || \\\r\n                                    ((type) == GLB_DAC_CHAN3) || \\\r\n                                    ((type) == GLB_DAC_CHAN4) || \\\r\n                                    ((type) == GLB_DAC_CHAN5) || \\\r\n                                    ((type) == GLB_DAC_CHAN6) || \\\r\n                                    ((type) == GLB_DAC_CHAN7) || \\\r\n                                    ((type) == GLB_DAC_CHAN_ALL))\r\n\r\n/** @defgroup  GPIP_DAC_CHANB_SRC_TYPE\r\n *  @{\r\n */\r\n#define IS_GPIP_DAC_CHANB_SRC_TYPE(type) (((type) == GPIP_DAC_ChanB_SRC_REG) ||             \\\r\n                                          ((type) == GPIP_DAC_ChanB_SRC_DMA) ||             \\\r\n                                          ((type) == GPIP_DAC_ChanB_SRC_DMA_WITH_FILTER) || \\\r\n                                          ((type) == GPIP_DAC_ChanB_SRC_SIN_GEN) ||         \\\r\n                                          ((type) == GPIP_DAC_ChanB_SRC_A) ||               \\\r\n                                          ((type) == GPIP_DAC_ChanB_SRC_INVERSE_A))\r\n\r\n/** @defgroup  GPIP_DAC_CHANA_SRC_TYPE\r\n *  @{\r\n */\r\n#define IS_GPIP_DAC_CHANA_SRC_TYPE(type) (((type) == GPIP_DAC_ChanA_SRC_REG) ||             \\\r\n                                          ((type) == GPIP_DAC_ChanA_SRC_DMA) ||             \\\r\n                                          ((type) == GPIP_DAC_ChanA_SRC_DMA_WITH_FILTER) || \\\r\n                                          ((type) == GPIP_DAC_ChanA_SRC_SIN_GEN))\r\n\r\n/** @defgroup  DAC_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_DAC_CLK_TYPE(type) (((type) == DAC_CLK_DIV_16) ||      \\\r\n                               ((type) == DAC_CLK_DIV_32) ||      \\\r\n                               ((type) == DAC_CLK_DIV_RESERVE) || \\\r\n                               ((type) == DAC_CLK_DIV_64) ||      \\\r\n                               ((type) == DAC_CLK_DIV_1))\r\n\r\n/** @defgroup  GPIP_DAC_DMA_TX_FORMAT_TYPE\r\n *  @{\r\n */\r\n#define IS_GPIP_DAC_DMA_TX_FORMAT_TYPE(type) (((type) == GPIP_DAC_DMA_FORMAT_0) || \\\r\n                                              ((type) == GPIP_DAC_DMA_FORMAT_1) || \\\r\n                                              ((type) == GPIP_DAC_DMA_FORMAT_2))\r\n\r\n/*@} end of group DAC_Public_Constants */\r\n\r\n/** @defgroup  DAC_Public_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group DAC_Public_Macros */\r\n\r\n/** @defgroup  DAC_Public_Functions\r\n *  @{\r\n */\r\nvoid GLB_DAC_Init(GLB_DAC_Cfg_Type *cfg);\r\nvoid GLB_DAC_Set_ChanA_Config(GLB_DAC_Chan_Cfg_Type *cfg);\r\nvoid GLB_DAC_Set_ChanB_Config(GLB_DAC_Chan_Cfg_Type *cfg);\r\nvoid GPIP_Set_DAC_ChanB_SRC_SEL(GPIP_DAC_ChanB_SRC_Type src);\r\nvoid GPIP_Set_DAC_ChanA_SRC_SEL(GPIP_DAC_ChanA_SRC_Type src);\r\nvoid GPIP_DAC_ChanB_Enable(void);\r\nvoid GPIP_DAC_ChanB_Disable(void);\r\nvoid GPIP_DAC_ChanA_Enable(void);\r\nvoid GPIP_DAC_ChanA_Disable(void);\r\nvoid GPIP_Set_DAC_DMA_TX_FORMAT_SEL(GPIP_DAC_DMA_TX_FORMAT_Type fmt);\r\nvoid GPIP_Set_DAC_DMA_TX_Enable(void);\r\nvoid GPIP_Set_DAC_DMA_TX_Disable(void);\r\nvoid GPIP_DAC_DMA_WriteData(uint32_t data);\r\nBL_Err_Type GLB_GPIP_DAC_Init(GLB_GPIP_DAC_Cfg_Type *cfg);\r\nvoid GLB_GPIP_DAC_Set_ChanA_Config(GLB_GPIP_DAC_ChanA_Cfg_Type *cfg);\r\nvoid GLB_GPIP_DAC_Set_ChanB_Config(GLB_GPIP_DAC_ChanB_Cfg_Type *cfg);\r\nvoid GLB_DAC_Set_ChanA_Value(uint16_t val);\r\nvoid GLB_DAC_Set_ChanB_Value(uint16_t val);\r\n\r\n/*@} end of group DAC_Public_Functions */\r\n\r\n/*@} end of group DAC */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_DAC_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_dma.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_dma.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_DMA_H__\r\n#define __BL702_DMA_H__\r\n\r\n#include \"dma_reg.h\"\r\n#include \"bl702_common.h\"\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  DMA\r\n *  @{\r\n */\r\n\r\n/** @defgroup  DMA_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief DMA endian type definition\r\n */\r\ntypedef enum {\r\n    DMA_LITTLE_ENDIAN = 0, /*!< DMA use little endian */\r\n    DMA_BIG_ENDIAN,        /*!< DMA use big endian */\r\n} DMA_Endian_Type;\r\n\r\n/**\r\n *  @brief DMA synchronization logic  type definition\r\n */\r\ntypedef enum {\r\n    DMA_SYNC_LOGIC_ENABLE = 0, /*!< DMA synchronization logic enable */\r\n    DMA_SYNC_LOGIC_DISABLE,    /*!< DMA synchronization logic disable */\r\n} DMA_Sync_Logic_Type;\r\n\r\n/**\r\n *  @brief DMA transfer width type definition\r\n */\r\ntypedef enum {\r\n    DMA_TRNS_WIDTH_8BITS = 0, /*!< DMA transfer width:8 bits */\r\n    DMA_TRNS_WIDTH_16BITS,    /*!< DMA transfer width:16 bits */\r\n    DMA_TRNS_WIDTH_32BITS,    /*!< DMA transfer width:32 bits */\r\n} DMA_Trans_Width_Type;\r\n\r\n/**\r\n *  @brief DMA transfer direction type definition\r\n */\r\ntypedef enum {\r\n    DMA_TRNS_M2M = 0, /*!< DMA transfer tyep:memory to memory */\r\n    DMA_TRNS_M2P,     /*!< DMA transfer tyep:memory to peripheral */\r\n    DMA_TRNS_P2M,     /*!< DMA transfer tyep:peripheral to memory */\r\n    DMA_TRNS_P2P,     /*!< DMA transfer tyep:peripheral to peripheral */\r\n} DMA_Trans_Dir_Type;\r\n\r\n/**\r\n *  @brief DMA burst size type definition\r\n */\r\ntypedef enum {\r\n    DMA_BURST_SIZE_1 = 0, /*!< DMA transfer width:8 bits */\r\n    DMA_BURST_SIZE_4,     /*!< DMA transfer width:16 bits */\r\n    DMA_BURST_SIZE_8,     /*!< DMA transfer width:32 bits */\r\n    DMA_BURST_SIZE_16,    /*!< DMA transfer width:64 bits */\r\n} DMA_Burst_Size_Type;\r\n\r\n/**\r\n *  @brief DMA destination peripheral type definition\r\n */\r\ntypedef enum {\r\n    DMA_REQ_UART0_RX = 0, /*!< DMA request peripheral:UART0 RX */\r\n    DMA_REQ_UART0_TX,     /*!< DMA request peripheral:UART0 TX */\r\n    DMA_REQ_UART1_RX,     /*!< DMA request peripheral:UART1 RX */\r\n    DMA_REQ_UART1_TX,     /*!< DMA request peripheral:UART1 TX */\r\n    DMA_REQ_I2C_RX = 6,   /*!< DMA request peripheral:I2C RX */\r\n    DMA_REQ_I2C_TX,       /*!< DMA request peripheral:I2C TX */\r\n    DMA_REQ_SPI_RX = 10,  /*!< DMA request peripheral:SPI RX */\r\n    DMA_REQ_SPI_TX,       /*!< DMA request peripheral:SPI TX */\r\n    DMA_REQ_I2S_RX = 20,  /*!< DMA request peripheral:SPI RX */\r\n    DMA_REQ_I2S_TX,       /*!< DMA request peripheral:SPI TX */\r\n    DMA_REQ_GPADC0 = 22,  /*!< DMA request peripheral:GPADC0 */\r\n    DMA_REQ_GPADC1,       /*!< DMA request peripheral:GPADC1 */\r\n    DMA_REQ_NONE = 0,     /*!< DMA request peripheral:None */\r\n} DMA_Periph_Req_Type;\r\n\r\n/**\r\n *  @brief DMA channel type definition\r\n */\r\ntypedef enum {\r\n    DMA_CH0 = 0, /*!< DMA channel 0 */\r\n    DMA_CH1,     /*!< DMA channel 1 */\r\n    DMA_CH2,     /*!< DMA channel 2 */\r\n    DMA_CH3,     /*!< DMA channel 3 */\r\n    DMA_CH4,     /*!< DMA channel 4 */\r\n    DMA_CH5,     /*!< DMA channel 5 */\r\n    DMA_CH6,     /*!< DMA channel 6 */\r\n    DMA_CH7,     /*!< DMA channel 7 */\r\n    DMA_CH_MAX,  /*!<  */\r\n} DMA_Chan_Type;\r\n\r\n/**\r\n *  @brief DMA LLI Structure PING-PONG\r\n */\r\ntypedef enum {\r\n    PING_INDEX = 0, /*!< PING INDEX */\r\n    PONG_INDEX,     /*!< PONG INDEX */\r\n} DMA_LLI_PP_Index_Type;\r\n\r\n/**\r\n *  @brief DMA interrupt type definition\r\n */\r\ntypedef enum {\r\n    DMA_INT_TCOMPLETED = 0, /*!< DMA completed interrupt */\r\n    DMA_INT_ERR,            /*!< DMA error interrupt */\r\n    DMA_INT_ALL,            /*!< All the interrupt */\r\n} DMA_INT_Type;\r\n\r\n/**\r\n *  @brief DMA Configuration Structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    DMA_Endian_Type endian;        /*!< DMA endian type */\r\n    DMA_Sync_Logic_Type syncLogic; /*!< DMA synchronization logic */\r\n} DMA_Cfg_Type;\r\n\r\n/**\r\n *  @brief DMA channel Configuration Structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint32_t srcDmaAddr;                 /*!< Source address of DMA transfer */\r\n    uint32_t destDmaAddr;                /*!< Destination address of DMA transfer */\r\n    uint32_t transfLength;               /*!< Transfer length, 0~4095, this is burst count */\r\n    DMA_Trans_Dir_Type dir;              /*!< Transfer dir control. 0: Memory to Memory, 1: Memory to peripheral, 2: Peripheral to memory */\r\n    DMA_Chan_Type ch;                    /*!< Channel select 0-7 */\r\n    DMA_Trans_Width_Type srcTransfWidth; /*!< Transfer width. 0: 8  bits, 1: 16  bits, 2: 32  bits */\r\n    DMA_Trans_Width_Type dstTransfWidth; /*!< Transfer width. 0: 8  bits, 1: 16  bits, 2: 32  bits */\r\n    DMA_Burst_Size_Type srcBurstSize;    /*!< Number of data items for burst transaction length. Each item width is as same as tansfer width.\r\n                                                 0: 1 item, 1: 4 items, 2: 8 items, 3: 16 items */\r\n    DMA_Burst_Size_Type dstBurstSize;    /*!< Number of data items for burst transaction length. Each item width is as same as tansfer width.\r\n                                                 0: 1 item, 1: 4 items, 2: 8 items, 3: 16 items */\r\n    BL_Fun_Type dstAddMode;              /*!<  */\r\n    BL_Fun_Type dstMinMode;              /*!<  */\r\n    uint8_t fixCnt;                      /*!<  */\r\n    uint8_t srcAddrInc;                  /*!< Source address increment. 0: No change, 1: Increment */\r\n    uint8_t destAddrInc;                 /*!< Destination address increment. 0: No change, 1: Increment */\r\n    DMA_Periph_Req_Type srcPeriph;       /*!< Source peripheral select */\r\n    DMA_Periph_Req_Type dstPeriph;       /*!< Destination peripheral select */\r\n} DMA_Channel_Cfg_Type;\r\n\r\n\r\n/**\r\n *  @brief DMA LLI configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    DMA_Trans_Dir_Type dir;        /*!< Transfer dir control. 0: Memory to Memory, 1: Memory to peripheral, 2: Peripheral to memory */\r\n    DMA_Periph_Req_Type srcPeriph; /*!< Source peripheral select */\r\n    DMA_Periph_Req_Type dstPeriph; /*!< Destination peripheral select */\r\n} DMA_LLI_Cfg_Type;\r\n\r\n\r\n/*@} end of group DMA_Public_Types */\r\n\r\n/** @defgroup  DMA_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  DMA_ENDIAN_TYPE\r\n *  @{\r\n */\r\n#define IS_DMA_ENDIAN_TYPE(type) (((type) == DMA_LITTLE_ENDIAN) || \\\r\n                                  ((type) == DMA_BIG_ENDIAN))\r\n\r\n/** @defgroup  DMA_SYNC_LOGIC_TYPE\r\n *  @{\r\n */\r\n#define IS_DMA_SYNC_LOGIC_TYPE(type) (((type) == DMA_SYNC_LOGIC_ENABLE) || \\\r\n                                      ((type) == DMA_SYNC_LOGIC_DISABLE))\r\n\r\n/** @defgroup  DMA_TRANS_WIDTH_TYPE\r\n *  @{\r\n */\r\n#define IS_DMA_TRANS_WIDTH_TYPE(type) (((type) == DMA_TRNS_WIDTH_8BITS) ||  \\\r\n                                       ((type) == DMA_TRNS_WIDTH_16BITS) || \\\r\n                                       ((type) == DMA_TRNS_WIDTH_32BITS))\r\n\r\n/** @defgroup  DMA_TRANS_DIR_TYPE\r\n *  @{\r\n */\r\n#define IS_DMA_TRANS_DIR_TYPE(type) (((type) == DMA_TRNS_M2M) || \\\r\n                                     ((type) == DMA_TRNS_M2P) || \\\r\n                                     ((type) == DMA_TRNS_P2M) || \\\r\n                                     ((type) == DMA_TRNS_P2P))\r\n\r\n/** @defgroup  DMA_BURST_SIZE_TYPE\r\n *  @{\r\n */\r\n#define IS_DMA_BURST_SIZE_TYPE(type) (((type) == DMA_BURST_SIZE_1) || \\\r\n                                      ((type) == DMA_BURST_SIZE_4) || \\\r\n                                      ((type) == DMA_BURST_SIZE_8) || \\\r\n                                      ((type) == DMA_BURST_SIZE_16))\r\n\r\n/** @defgroup  DMA_PERIPH_REQ_TYPE\r\n *  @{\r\n */\r\n#define IS_DMA_PERIPH_REQ_TYPE(type) (((type) == DMA_REQ_UART0_RX) || \\\r\n                                      ((type) == DMA_REQ_UART0_TX) || \\\r\n                                      ((type) == DMA_REQ_UART1_RX) || \\\r\n                                      ((type) == DMA_REQ_UART1_TX) || \\\r\n                                      ((type) == DMA_REQ_I2C_RX) ||   \\\r\n                                      ((type) == DMA_REQ_I2C_TX) ||   \\\r\n                                      ((type) == DMA_REQ_SPI_RX) ||   \\\r\n                                      ((type) == DMA_REQ_SPI_TX) ||   \\\r\n                                      ((type) == DMA_REQ_I2S_RX) ||   \\\r\n                                      ((type) == DMA_REQ_I2S_TX) ||   \\\r\n                                      ((type) == DMA_REQ_GPADC0) ||   \\\r\n                                      ((type) == DMA_REQ_GPADC1) ||   \\\r\n                                      ((type) == DMA_REQ_NONE))\r\n\r\n/** @defgroup  DMA_CHAN_TYPE\r\n *  @{\r\n */\r\n#define IS_DMA_CHAN_TYPE(type) (((type) == DMA_CH0) || \\\r\n                                ((type) == DMA_CH1) || \\\r\n                                ((type) == DMA_CH2) || \\\r\n                                ((type) == DMA_CH3) || \\\r\n                                ((type) == DMA_CH4) || \\\r\n                                ((type) == DMA_CH5) || \\\r\n                                ((type) == DMA_CH6) || \\\r\n                                ((type) == DMA_CH7) || \\\r\n                                ((type) == DMA_CH_MAX))\r\n\r\n/** @defgroup  DMA_LLI_PP_INDEX_TYPE\r\n *  @{\r\n */\r\n#define IS_DMA_LLI_PP_INDEX_TYPE(type) (((type) == PING_INDEX) || \\\r\n                                        ((type) == PONG_INDEX))\r\n\r\n/** @defgroup  DMA_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_DMA_INT_TYPE(type) (((type) == DMA_INT_TCOMPLETED) || \\\r\n                               ((type) == DMA_INT_ERR) ||        \\\r\n                               ((type) == DMA_INT_ALL))\r\n\r\n/*@} end of group DMA_Public_Constants */\r\n\r\n/** @defgroup  DMA_Public_Macros\r\n *  @{\r\n */\r\n#define DMA_PINC_ENABLE  1\r\n#define DMA_PINC_DISABLE 0\r\n#define DMA_MINC_ENABLE  1\r\n#define DMA_MINC_DISABLE 0\r\n\r\n/*@} end of group DMA_Public_Macros */\r\n\r\n/** @defgroup  DMA_Public_Functions\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief DMA Functions\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid DMA_ALL_IRQHandler(void);\r\n#endif\r\nvoid DMA_Enable(void);\r\nvoid DMA_Disable(void);\r\nvoid DMA_Channel_Init(DMA_Channel_Cfg_Type *chCfg);\r\nvoid DMA_Channel_Update_SrcMemcfg(uint8_t ch, uint32_t memAddr, uint32_t len);\r\nvoid DMA_Channel_Update_DstMemcfg(uint8_t ch, uint32_t memAddr, uint32_t len);\r\nuint32_t DMA_Channel_TranferSize(uint8_t ch);\r\nBL_Sts_Type DMA_Channel_Is_Busy(uint8_t ch);\r\nvoid DMA_Channel_Enable(uint8_t ch);\r\nvoid DMA_Channel_Disable(uint8_t ch);\r\nvoid DMA_LLI_Init(uint8_t ch, DMA_LLI_Cfg_Type *lliCfg);\r\nvoid DMA_LLI_Update(uint8_t ch, uint32_t LLI);\r\nvoid DMA_IntMask(uint8_t ch, DMA_INT_Type intType, BL_Mask_Type intMask);\r\nvoid DMA_Int_Callback_Install(DMA_Chan_Type dmaChan, DMA_INT_Type intType, intCallback_Type *cbFun);\r\n\r\n/*@} end of group DMA_Public_Functions */\r\n\r\n/*@} end of group DMA */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif /* __cplusplus */\r\n\r\n#endif /* __BL702_DMA_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_ef_ctrl.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_ef_ctrl.h\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver header file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n#ifndef __BL702_EF_CTRL_H__\r\n#define __BL702_EF_CTRL_H__\r\n\r\n#include \"bl702_common.h\"\r\n#include \"ef_ctrl_reg.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  EF_CTRL\r\n *  @{\r\n */\r\n\r\n/** @defgroup  EF_CTRL_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief Efuse Ctrl key slot type definition\r\n */\r\ntypedef enum {\r\n  EF_CTRL_KEY_SLOT0, /*!< key slot 0 */\r\n  EF_CTRL_KEY_SLOT1, /*!< key slot 1 */\r\n  EF_CTRL_KEY_SLOT2, /*!< key slot 2 */\r\n  EF_CTRL_KEY_SLOT3, /*!< key slot 3 */\r\n  EF_CTRL_KEY_SLOT4, /*!< key slot 4 */\r\n  EF_CTRL_KEY_SLOT5, /*!< key slot 5 */\r\n  EF_CTRL_KEY_MAX,   /*!<  */\r\n} EF_Ctrl_Key_Type;\r\n\r\n/**\r\n *  @brief Efuse Ctrl sign type definition\r\n */\r\ntypedef enum {\r\n  EF_CTRL_SIGN_NONE, /*!< no sign */\r\n  EF_CTRL_SIGN_RSA,  /*!< use RSA to sign */\r\n  EF_CTRL_SIGN_ECC,  /*!< use ECC to sign */\r\n} EF_Ctrl_Sign_Type;\r\n\r\n/**\r\n *  @brief Efuse Ctrl flash AES type definition\r\n */\r\ntypedef enum {\r\n  EF_CTRL_SF_AES_NONE, /*!< No AES */\r\n  EF_CTRL_SF_AES_128,  /*!< AES 128 */\r\n  EF_CTRL_SF_AES_192,  /*!< AES 192 */\r\n  EF_CTRL_SF_AES_256,  /*!< AES 256 */\r\n} EF_Ctrl_SF_AES_Type;\r\n\r\n/**\r\n *  @brief Efuse Ctrl Dbg type definition\r\n */\r\ntypedef enum {\r\n  EF_CTRL_DBG_OPEN = 0,  /*!< Open debug */\r\n  EF_CTRL_DBG_PASSWORD,  /*!< Open debug with password */\r\n  EF_CTRL_DBG_CLOSE = 4, /*!< Close debug */\r\n} EF_Ctrl_Dbg_Mode_Type;\r\n\r\n/**\r\n *  @brief Efuse Ctrl clock type definition\r\n */\r\ntypedef enum {\r\n  EF_CTRL_EF_CLK,   /*!< Select efuse clock */\r\n  EF_CTRL_SAHB_CLK, /*!< Select SAHB clock */\r\n} EF_Ctrl_CLK_Type;\r\n\r\n/**\r\n *  @brief Efuse Ctrl clock type definition\r\n */\r\ntypedef enum {\r\n  EF_CTRL_PARA_DFT,    /*!< Select default cyc parameter */\r\n  EF_CTRL_PARA_MANUAL, /*!< Select manual cyc parameter */\r\n} EF_Ctrl_CYC_PARA_Type;\r\n\r\n/**\r\n *  @brief Efuse Ctrl clock type definition\r\n */\r\ntypedef enum {\r\n  EF_CTRL_OP_MODE_AUTO,   /*!< Select efuse program auto mode */\r\n  EF_CTRL_OP_MODE_MANUAL, /*!< Select efuse program manual mode */\r\n} EF_Ctrl_OP_MODE_Type;\r\n\r\n/**\r\n *  @brief Efuse Ctrl secure configuration structure type definition\r\n */\r\ntypedef struct {\r\n  EF_Ctrl_Dbg_Mode_Type ef_dbg_mode;       /*!< Efuse debug mode */\r\n  uint8_t               ef_dbg_jtag_0_dis; /*!< Jtag debug disable config value */\r\n  uint8_t               ef_sboot_en;       /*!< Secure boot enable config value */\r\n} EF_Ctrl_Sec_Param_Type;\r\n\r\n/**\r\n *  @brief Efuse analog RC32M trim type definition\r\n */\r\ntypedef struct {\r\n  uint32_t trimRc32mCodeFrExt : 8;       /*!< Efuse analog trim:trim_rc32m_code_fr_ext */\r\n  uint32_t trimRc32mCodeFrExtParity : 1; /*!< Efuse analog trim:trim_rc32m_ext_code_en_parity */\r\n  uint32_t trimRc32mExtCodeEn : 1;       /*!< Efuse analog trim:trim_rc32m_ext_code_en */\r\n  uint32_t reserved : 22;                /*!< Efuse analog trim:reserved */\r\n} Efuse_Ana_RC32M_Trim_Type;\r\n\r\n/**\r\n *  @brief Efuse analog RC32K trim type definition\r\n */\r\ntypedef struct {\r\n  uint32_t trimRc32kCodeFrExt : 10;      /*!< Efuse analog trim:trim_rc32k_code_fr_ext */\r\n  uint32_t trimRc32kCodeFrExtParity : 1; /*!< Efuse analog trim:trim_rc32k_code_fr_ext_parity */\r\n  uint32_t trimRc32kExtCodeEn : 1;       /*!< Efuse analog trim:trim_rc32k_ext_code_en */\r\n  uint32_t reserved : 20;                /*!< Efuse analog trim:reserved */\r\n} Efuse_Ana_RC32K_Trim_Type;\r\n\r\n/**\r\n *  @brief Efuse analog TSEN trim type definition\r\n */\r\ntypedef struct {\r\n  uint32_t tsenRefcodeCorner : 12;       /*!< TSEN refcode */\r\n  uint32_t tsenRefcodeCornerParity : 1;  /*!< TSEN refcode parity */\r\n  uint32_t tsenRefcodeCornerEn : 1;      /*!< TSEN refcode enable */\r\n  uint32_t tsenRefcodeCornerVersion : 1; /*!< TSEN ATE Version */\r\n  uint32_t reserved : 18;                /*!< TSEN analog trim:reserved */\r\n} Efuse_TSEN_Refcode_Corner_Type;\r\n\r\n/**\r\n *  @brief Efuse analog ADC Gain trim type definition\r\n */\r\ntypedef struct {\r\n  uint32_t adcGainCoeff : 12;      /*!< ADC gain coeff */\r\n  uint32_t adcGainCoeffParity : 1; /*!< ADC gain coeff parity */\r\n  uint32_t adcGainCoeffEn : 1;     /*!< ADC gain coeff enable */\r\n  uint32_t reserved : 18;          /*!< ADC gain coeff:reserved */\r\n} Efuse_ADC_Gain_Coeff_Type;\r\n\r\n/**\r\n *  @brief Efuse analog device info type definition\r\n */\r\ntypedef struct {\r\n  uint32_t rsvd_21_0 : 22;  /*!< Reserved */\r\n  uint32_t sf_swap_cfg : 2; /*!< 0:swap none, 1:swap SF2_CS & SF2_IO2, 2:swap SF2_IO0 & SF2_IO3, 3:swap both */\r\n  uint32_t psram_cfg : 2;   /*!< 0:no psram, 1:2MB psram, 2:external psram, 3:reserved */\r\n  uint32_t flash_cfg : 3;   /*!< 0:external flash SF2, 1:0.5MB flash, 2:1MB flash, 3:external flash SF1 */\r\n  uint32_t rsvd_29 : 1;     /*!< Reserved */\r\n  uint32_t pkg_info : 2;    /*!< 0:QFN32, 1:QFN40, 2:QFN48, 3:reserved */\r\n} Efuse_Device_Info_Type;\r\n\r\n/**\r\n *  @brief Efuse Capcode type definition\r\n */\r\ntypedef struct {\r\n  uint32_t capCode : 6; /*!< Cap code value */\r\n  uint32_t parity : 1;  /*!< Parity of capcode */\r\n  uint32_t en : 1;      /*!< Enable status */\r\n  uint32_t rsvd : 24;   /*!< Reserved */\r\n} Efuse_Capcode_Info_Type;\r\n\r\n/*@} end of group EF_CTRL_Public_Types */\r\n\r\n/** @defgroup  EF_CTRL_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  EF_CTRL_KEY_TYPE\r\n *  @{\r\n */\r\n#define IS_EF_CTRL_KEY_TYPE(type)                                                                                                                                                                     \\\r\n  (((type) == EF_CTRL_KEY_SLOT0) || ((type) == EF_CTRL_KEY_SLOT1) || ((type) == EF_CTRL_KEY_SLOT2) || ((type) == EF_CTRL_KEY_SLOT3) || ((type) == EF_CTRL_KEY_SLOT4) || ((type) == EF_CTRL_KEY_SLOT5) \\\r\n   || ((type) == EF_CTRL_KEY_MAX))\r\n\r\n/** @defgroup  EF_CTRL_SIGN_TYPE\r\n *  @{\r\n */\r\n#define IS_EF_CTRL_SIGN_TYPE(type) (((type) == EF_CTRL_SIGN_NONE) || ((type) == EF_CTRL_SIGN_RSA) || ((type) == EF_CTRL_SIGN_ECC))\r\n\r\n/** @defgroup  EF_CTRL_SF_AES_TYPE\r\n *  @{\r\n */\r\n#define IS_EF_CTRL_SF_AES_TYPE(type) (((type) == EF_CTRL_SF_AES_NONE) || ((type) == EF_CTRL_SF_AES_128) || ((type) == EF_CTRL_SF_AES_192) || ((type) == EF_CTRL_SF_AES_256))\r\n\r\n/** @defgroup  EF_CTRL_DBG_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_EF_CTRL_DBG_MODE_TYPE(type) (((type) == EF_CTRL_DBG_OPEN) || ((type) == EF_CTRL_DBG_PASSWORD) || ((type) == EF_CTRL_DBG_CLOSE))\r\n\r\n/** @defgroup  EF_CTRL_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_EF_CTRL_CLK_TYPE(type) (((type) == EF_CTRL_EF_CLK) || ((type) == EF_CTRL_SAHB_CLK))\r\n\r\n/** @defgroup  EF_CTRL_CYC_PARA_TYPE\r\n *  @{\r\n */\r\n#define IS_EF_CTRL_CYC_PARA_TYPE(type) (((type) == EF_CTRL_PARA_DFT) || ((type) == EF_CTRL_PARA_MANUAL))\r\n\r\n/** @defgroup  EF_CTRL_OP_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_EF_CTRL_OP_MODE_TYPE(type) (((type) == EF_CTRL_OP_MODE_AUTO) || ((type) == EF_CTRL_OP_MODE_MANUAL))\r\n\r\n/*@} end of group EF_CTRL_Public_Constants */\r\n\r\n/** @defgroup  EF_CTRL_Public_Macros\r\n *  @{\r\n */\r\n#define EF_CTRL_EFUSE_R0_SIZE 128\r\n\r\n/*@} end of group EF_CTRL_Public_Macros */\r\n\r\n/** @defgroup  EF_CTRL_Public_Functions\r\n *  @{\r\n */\r\nvoid        EF_Ctrl_Load_Efuse_R0(void);\r\nBL_Sts_Type EF_Ctrl_Busy(void);\r\nBL_Sts_Type EF_Ctrl_AutoLoad_Done(void);\r\nvoid        EF_Ctrl_Write_Dbg_Pwd(uint32_t passWdLow, uint32_t passWdHigh, uint8_t program);\r\nvoid        EF_Ctrl_Read_Dbg_Pwd(uint32_t *passWdLow, uint32_t *passWdHigh);\r\nvoid        EF_Ctrl_Readlock_Dbg_Pwd(uint8_t program);\r\nvoid        EF_Ctrl_Writelock_Dbg_Pwd(uint8_t program);\r\nvoid        EF_Ctrl_Write_Secure_Cfg(EF_Ctrl_Sec_Param_Type *cfg, uint8_t program);\r\nvoid        EF_Ctrl_Read_Secure_Cfg(EF_Ctrl_Sec_Param_Type *cfg);\r\nvoid        EF_Ctrl_Write_Secure_Boot(EF_Ctrl_Sign_Type sign[1], EF_Ctrl_SF_AES_Type aes[1], uint8_t program);\r\nvoid        EF_Ctrl_Read_Secure_Boot(EF_Ctrl_Sign_Type sign[1], EF_Ctrl_SF_AES_Type aes[1]);\r\nvoid        EF_Ctrl_Read_CPU_Cfg(uint8_t *apDisabled, uint8_t *npDisabled, uint8_t *npCpuType);\r\nuint8_t     EF_Ctrl_Get_Trim_Parity(uint32_t val, uint8_t len);\r\nvoid        EF_Ctrl_Write_Ana_Trim(uint32_t index, uint32_t trim, uint8_t program);\r\nvoid        EF_Ctrl_Read_Ana_Trim(uint32_t index, uint32_t *trim);\r\nvoid        EF_Ctrl_Read_RC32M_Trim(Efuse_Ana_RC32M_Trim_Type *trim);\r\nvoid        EF_Ctrl_Read_RC32K_Trim(Efuse_Ana_RC32K_Trim_Type *trim);\r\nvoid        EF_Ctrl_Read_TSEN_Trim(Efuse_TSEN_Refcode_Corner_Type *trim);\r\nvoid        EF_Ctrl_Read_ADC_Gain_Trim(Efuse_ADC_Gain_Coeff_Type *trim);\r\nvoid        EF_Ctrl_Write_Sw_Usage(uint32_t index, uint32_t usage, uint8_t program);\r\nvoid        EF_Ctrl_Read_Sw_Usage(uint32_t index, uint32_t *usage);\r\nvoid        EF_Ctrl_Writelock_Sw_Usage(uint32_t index, uint8_t program);\r\nvoid        EF_Ctrl_Write_MAC_Address(uint8_t mac[6], uint8_t program);\r\nBL_Err_Type EF_Ctrl_Read_MAC_Address(uint8_t mac[8]);\r\nBL_Err_Type EF_Ctrl_Read_MAC_Address_Raw(uint8_t mac[7]);\r\nvoid        EF_Ctrl_Writelock_MAC_Address(uint8_t program);\r\nuint8_t     EF_Ctrl_Is_MAC_Address_Slot_Empty(uint8_t slot, uint8_t reload);\r\nBL_Err_Type EF_Ctrl_Write_MAC_Address_Opt(uint8_t slot, uint8_t mac[8], uint8_t program);\r\nBL_Err_Type EF_Ctrl_Read_MAC_Address_Opt(uint8_t slot, uint8_t mac[8], uint8_t reload);\r\nBL_Err_Type EF_Ctrl_Read_Chip_ID(uint8_t id[8]);\r\n/*----------*/\r\nBL_Err_Type EF_Ctrl_Get_Chip_PIDVID(uint16_t pid[1], uint16_t vid[1]);\r\nuint32_t    EF_Ctrl_Get_Key_Slot_w0();\r\nuint32_t    EF_Ctrl_Get_Key_Slot_w1();\r\nBL_Err_Type EF_Ctrl_Get_Customer_PIDVID(uint16_t pid[1], uint16_t vid[1]);\r\n/*----------*/\r\nvoid        EF_Ctrl_Read_Device_Info(Efuse_Device_Info_Type *deviceInfo);\r\nuint8_t     EF_Ctrl_Is_CapCode_Empty(uint8_t slot, uint8_t reload);\r\nBL_Err_Type EF_Ctrl_Write_CapCode_Opt(uint8_t slot, uint8_t code, uint8_t program);\r\nBL_Err_Type EF_Ctrl_Read_CapCode_Opt(uint8_t slot, uint8_t *code, uint8_t reload);\r\nuint8_t     EF_Ctrl_Is_PowerOffset_Slot_Empty(uint8_t slot, uint8_t reload);\r\nBL_Err_Type EF_Ctrl_Write_PowerOffset_Opt(uint8_t slot, int8_t pwrOffset[2], uint8_t program);\r\nBL_Err_Type EF_Ctrl_Read_PowerOffset_Opt(uint8_t slot, int8_t pwrOffset[2], uint8_t reload);\r\nvoid        EF_Ctrl_Write_AES_Key(uint8_t index, uint32_t *keyData, uint32_t len, uint8_t program);\r\nvoid        EF_Ctrl_Read_AES_Key(uint8_t index, uint32_t *keyData, uint32_t len);\r\nvoid        EF_Ctrl_Writelock_AES_Key(uint8_t index, uint8_t program);\r\nvoid        EF_Ctrl_Readlock_AES_Key(uint8_t index, uint8_t program);\r\nvoid        EF_Ctrl_Program_Direct_R0(uint32_t index, uint32_t *data, uint32_t len);\r\nvoid        EF_Ctrl_Read_Direct_R0(uint32_t index, uint32_t *data, uint32_t len);\r\nvoid        EF_Ctrl_Program_Direct(uint32_t index, uint32_t *data, uint32_t len);\r\nvoid        EF_Ctrl_Read_Direct(uint32_t index, uint32_t *data, uint32_t len);\r\nvoid        EF_Ctrl_Clear(uint32_t index, uint32_t len);\r\nvoid        EF_Ctrl_Crc_Enable(void);\r\nBL_Sts_Type EF_Ctrl_Crc_Is_Busy(void);\r\nvoid        EF_Ctrl_Crc_Set_Golden(uint32_t goldenValue);\r\nBL_Err_Type EF_Ctrl_Crc_Result(void);\r\nvoid        EF_Ctrl_Sw_AHB_Clk_0(void);\r\n\r\n/*@} end of group EF_CTRL_Public_Functions */\r\n\r\n/*@} end of group EF_CTRL */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_EF_CTRL_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_emac.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_emac.h\r\n  * @version V1.2\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2018 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_EMAC_H__\r\n#define __BL702_EMAC_H__\r\n\r\n#include \"emac_reg.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  EMAC\r\n *  @{\r\n */\r\n\r\n/** @defgroup  EMAC_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief EMAC half/full-duplex type definition\r\n */\r\ntypedef enum {\r\n    EMAC_MODE_HALFDUPLEX, /*!< ETH half-duplex */\r\n    EMAC_MODE_FULLDUPLEX, /*!< ETH full-duplex */\r\n} EMAC_Duplex_Type;\r\n\r\n/**\r\n *  @brief EMAC speed type definition\r\n */\r\ntypedef enum {\r\n    EMAC_SPEED_10M,  /*!< ETH speed 10M */\r\n    EMAC_SPEED_100M, /*!< ETH speed 100M */\r\n} EMAC_Speed_Type;\r\n\r\n/**\r\n *  @brief EMAC interrupt type definition\r\n */\r\ntypedef enum {\r\n    EMAC_INT_TX_DONE = 0x01,  /*!< Transmit one frame done */\r\n    EMAC_INT_TX_ERROR = 0x02, /*!< Transmit error occur */\r\n    EMAC_INT_RX_DONE = 0x04,  /*!< Receive one frame done */\r\n    EMAC_INT_RX_ERROR = 0x08, /*!< Receive error occur */\r\n    EMAC_INT_RX_BUSY = 0x10,  /*!< Receive busy due to no free RX buffer Descripter */\r\n    EMAC_INT_TX_CTRL = 0x20,  /*!< Transmit control frame */\r\n    EMAC_INT_RX_CTRL = 0x40,  /*!< Receive control frame */\r\n    EMAC_INT_ALL = 0x7F,      /*!<  */\r\n} EMAC_INT_Type;\r\n\r\n/**\r\n *  @brief EMAC interrupt Index\r\n */\r\ntypedef enum {\r\n    EMAC_INT_TX_DONE_IDX = 0x0,  /*!< Transmit one frame done */\r\n    EMAC_INT_TX_ERROR_IDX = 0x1, /*!< Transmit error occur */\r\n    EMAC_INT_RX_DONE_IDX = 0x2,  /*!< Receive one frame done */\r\n    EMAC_INT_RX_ERROR_IDX = 0x3, /*!< Receive error occur */\r\n    EMAC_INT_RX_BUSY_IDX = 0x4,  /*!< Receive busy due to no free RX buffer Descripter */\r\n    EMAC_INT_TX_CTRL_IDX = 0x5,  /*!< Transmit control frame */\r\n    EMAC_INT_RX_CTRL_IDX = 0x6,  /*!< Receive control frame */\r\n    EMAC_INT_CNT,                /*!< EMAC INT source count */\r\n} EMAC_INT_Index;\r\n\r\n/**\r\n *  @brief EMAC configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type recvSmallFrame;     /*!< Receive small frmae or not */\r\n    BL_Fun_Type recvHugeFrame;      /*!< Receive huge frmae(>64K bytes) or not */\r\n    BL_Fun_Type padEnable;          /*!< Enable padding for frame which is less than MINFL or not */\r\n    BL_Fun_Type crcEnable;          /*!< Enable hardware CRC or not */\r\n    BL_Fun_Type noPreamble;         /*!< Enable preamble or not */\r\n    BL_Fun_Type recvBroadCast;      /*!< Receive broadcast frame or not */\r\n    BL_Fun_Type interFrameGapCheck; /*!< Check inter frame gap or not */\r\n    BL_Fun_Type miiNoPreamble;      /*!< Enable MII interface preamble or not */\r\n    uint8_t miiClkDiv;              /*!< MII interface clock divider from bus clock */\r\n    uint8_t maxTxRetry;             /*!< Maximum tx retry count */\r\n    uint16_t interFrameGapValue;    /*!< Inter frame gap vaule in clock cycles(default 24),which equals 9.6 us for 10 Mbps and 0.96 us\r\n                                                 for 100 Mbps mode */\r\n    uint16_t minFrameLen;           /*!< Minimum frame length */\r\n    uint16_t maxFrameLen;           /*!< Maximum frame length */\r\n    uint16_t collisionValid;        /*!< Collision valid value */\r\n    uint8_t macAddr[6];             /*!< MAC Address */\r\n} EMAC_CFG_Type;\r\n\r\n/**\r\n *  @brief EMAC TX DMA description type definition\r\n */\r\n/**\r\n * Note: Always write DWORD1 (buffer addr) first then DWORD0 for racing concern.\r\n */\r\ntypedef struct\r\n{\r\n    uint32_t C_S_L;  /*!< Buffer Descriptors(BD) control,status,length */\r\n    uint32_t Buffer; /*!< BD buffer address */\r\n} EMAC_BD_Desc_Type;\r\n\r\n/**\r\n *  @brief EMAC Handle type definition\r\n */\r\ntypedef struct\r\n{\r\n    EMAC_BD_Desc_Type *bd; /*!< Tx descriptor header pointer */\r\n    uint8_t txIndexEMAC;   /*!< TX index: EMAC */\r\n    uint8_t txIndexCPU;    /*!< TX index: CPU/SW */\r\n    uint8_t txBuffLimit;   /*!< TX index max */\r\n    uint8_t rsv0;\r\n    uint8_t rxIndexEMAC; /*!< RX index: EMAC */\r\n    uint8_t rxIndexCPU;  /*!< RX index: CPU/SW */\r\n    uint8_t rxBuffLimit; /*!< RX index max */\r\n    uint8_t rsv1;\r\n} EMAC_Handle_Type;\r\n\r\n/*@} end of group EMAC_Public_Types */\r\n\r\n/** @defgroup  EMAC_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  EMAC_DUPLEX_TYPE\r\n *  @{\r\n */\r\n#define IS_EMAC_DUPLEX_TYPE(type) (((type) == EMAC_MODE_HALFDUPLEX) || \\\r\n                                   ((type) == EMAC_MODE_FULLDUPLEX))\r\n\r\n/** @defgroup  EMAC_SPEED_TYPE\r\n *  @{\r\n */\r\n#define IS_EMAC_SPEED_TYPE(type) (((type) == EMAC_SPEED_10M) || \\\r\n                                  ((type) == EMAC_SPEED_100M))\r\n\r\n/** @defgroup  EMAC_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_EMAC_INT_TYPE(type) (((type) == EMAC_INT_TX_DONE) ||  \\\r\n                                ((type) == EMAC_INT_TX_ERROR) || \\\r\n                                ((type) == EMAC_INT_RX_DONE) ||  \\\r\n                                ((type) == EMAC_INT_RX_ERROR) || \\\r\n                                ((type) == EMAC_INT_RX_BUSY) ||  \\\r\n                                ((type) == EMAC_INT_TX_CTRL) ||  \\\r\n                                ((type) == EMAC_INT_RX_CTRL) ||  \\\r\n                                ((type) == EMAC_INT_ALL))\r\n\r\n/** @defgroup  EMAC_INT_INDEX\r\n *  @{\r\n */\r\n#define IS_EMAC_INT_INDEX(type) (((type) == EMAC_INT_TX_DONE_IDX) ||  \\\r\n                                 ((type) == EMAC_INT_TX_ERROR_IDX) || \\\r\n                                 ((type) == EMAC_INT_RX_DONE_IDX) ||  \\\r\n                                 ((type) == EMAC_INT_RX_ERROR_IDX) || \\\r\n                                 ((type) == EMAC_INT_RX_BUSY_IDX) ||  \\\r\n                                 ((type) == EMAC_INT_TX_CTRL_IDX) ||  \\\r\n                                 ((type) == EMAC_INT_RX_CTRL_IDX) ||  \\\r\n                                 ((type) == EMAC_INT_CNT))\r\n\r\n/*@} end of group EMAC_Public_Constants */\r\n\r\n/** @defgroup  EMAC_Public_Macros\r\n *  @{\r\n */\r\n#define BD_TX_CS_POS   (0) /*!< Carrier Sense Lost */\r\n#define BD_TX_CS_LEN   (1)\r\n#define BD_TX_DF_POS   (1) /*!< Defer Indication */\r\n#define BD_TX_DF_LEN   (1)\r\n#define BD_TX_LC_POS   (2) /*!< Late Collision */\r\n#define BD_TX_LC_LEN   (1)\r\n#define BD_TX_RL_POS   (3) /*!< Retransmission Limit */\r\n#define BD_TX_RL_LEN   (1)\r\n#define BD_TX_RTRY_POS (4) /*!< Retry Count */\r\n#define BD_TX_RTRY_LEN (4)\r\n#define BD_TX_UR_POS   (8) /*!< Underrun */\r\n#define BD_TX_UR_LEN   (1)\r\n#define BD_TX_EOF_POS  (10) /*!< EOF */\r\n#define BD_TX_EOF_LEN  (1)\r\n#define BD_TX_CRC_POS  (11) /*!< CRC Enable */\r\n#define BD_TX_CRC_LEN  (1)\r\n#define BD_TX_PAD_POS  (12) /*!< PAD enable */\r\n#define BD_TX_PAD_LEN  (1)\r\n#define BD_TX_WR_POS   (13) /*!< Wrap */\r\n#define BD_TX_WR_LEN   (1)\r\n#define BD_TX_IRQ_POS  (14) /*!< Interrupt Request Enable */\r\n#define BD_TX_IRQ_LEN  (1)\r\n#define BD_TX_RD_POS   (15) /*!< The data buffer is ready for transmission or is currently being transmitted. You are not allowed to change it */\r\n#define BD_TX_RD_LEN   (1)\r\n#define BD_TX_LEN_POS  (16) /*!< TX Data buffer length */\r\n#define BD_TX_LEN_LEN  (16)\r\n\r\n#define BD_RX_LC_POS  (0) /*!< Late Collision */\r\n#define BD_RX_LC_LEN  (1)\r\n#define BD_RX_CRC_POS (1) /*!< RX CRC Error */\r\n#define BD_RX_CRC_LEN (1)\r\n#define BD_RX_SF_POS  (2) /*!< Short Frame */\r\n#define BD_RX_SF_LEN  (1)\r\n#define BD_RX_TL_POS  (3) /*!< Too Long */\r\n#define BD_RX_TL_LEN  (1)\r\n#define BD_RX_DN_POS  (4) /*!< Dribble Nibble */\r\n#define BD_RX_DN_LEN  (1)\r\n#define BD_RX_RE_POS  (5) /*!< Receive Error */\r\n#define BD_RX_RE_LEN  (1)\r\n#define BD_RX_OR_POS  (6) /*!< Overrun */\r\n#define BD_RX_OR_LEN  (1)\r\n#define BD_RX_M_POS   (7) /*!< Miss */\r\n#define BD_RX_M_LEN   (1)\r\n#define BD_RX_CF_POS  (8) /*!< Control Frame Received */\r\n#define BD_RX_CF_LEN  (1)\r\n#define BD_RX_WR_POS  (13) /*!< Wrap */\r\n#define BD_RX_WR_LEN  (1)\r\n#define BD_RX_IRQ_POS (14) /*!< Interrupt Request Enable */\r\n#define BD_RX_IRQ_LEN (1)\r\n#define BD_RX_E_POS   (15) /*!< The data buffer is empty (and ready for receiving data) or currently receiving data */\r\n#define BD_RX_E_LEN   (1)\r\n#define BD_RX_LEN_POS (16) /*!< RX Data buffer length */\r\n#define BD_RX_LEN_LEN (16)\r\n\r\n#define EMAC_BD_FIELD_MSK(field)  (((1U << BD_##field##_LEN) - 1) << BD_##field##_POS)\r\n#define EMAC_BD_FIELD_UMSK(field) (~(((1U << BD_##field##_LEN) - 1) << BD_##field##_POS))\r\n/* DMA Descriptor offset */\r\n#define EMAC_DMA_DESC_OFFSET 0x400\r\n\r\n/* ETH packet size */\r\n// ETH     | Header | Extra | VLAN tag | Payload   | CRC |\r\n// Size    | 14     | 2     | 4        | 46 ~ 1500 | 4   |\r\n#define ETH_MAX_PACKET_SIZE          ((uint32_t)1524U) /*!< ETH_HEADER + ETH_EXTRA + ETH_VLAN_TAG + ETH_MAX_ETH_PAYLOAD + ETH_CRC */\r\n#define ETH_HEADER_SZIE              ((uint32_t)14U) /*!< 6 byte Dest addr, 6 byte Src addr, 2 byte length/type */\r\n#define ETH_CRC_SIZE                 ((uint32_t)4U) /*!< Ethernet CRC */\r\n#define ETH_EXTRA_SIZE               ((uint32_t)2U) /*!< Extra bytes in some cases */\r\n#define ETH_VLAN_TAG_SIZE            ((uint32_t)4U) /*!< optional 802.1q VLAN Tag */\r\n#define ETH_MIN_ETH_PAYLOAD_SIZE     ((uint32_t)46U) /*!< Minimum Ethernet payload size */\r\n#define ETH_MAX_ETH_PAYLOAD_SIZE     ((uint32_t)1500U) /*!< Maximum Ethernet payload size */\r\n#define ETH_JUMBO_FRAME_PAYLOAD_SIZE ((uint32_t)9000U) /*!< Jumbo frame payload size */\r\n\r\n/*@} end of group EMAC_Public_Macros */\r\n\r\n/** @defgroup  EMAC_Public_Functions\r\n *  @{\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid EMAC_IRQHandler(void);\r\n#endif\r\nBL_Err_Type EMAC_Init(EMAC_CFG_Type *cfg);\r\nBL_Err_Type EMAC_DeInit(void);\r\nBL_Err_Type EMAC_DMADescListInit(EMAC_Handle_Type *handle, uint8_t *txBuff, uint32_t txBuffCount,\r\n                                 uint8_t *rxBuff, uint32_t rxBuffCount);\r\nBL_Err_Type EMAC_DMATxDescGet(EMAC_Handle_Type *handle, EMAC_BD_Desc_Type **txDMADesc);\r\nBL_Err_Type EMAC_StartTx(EMAC_Handle_Type *handle, EMAC_BD_Desc_Type *txDMADesc, uint32_t len);\r\nBL_Err_Type EMAC_Enable(void);\r\nBL_Err_Type EMAC_Disable(void);\r\nBL_Err_Type EMAC_IntMask(EMAC_INT_Type intType, BL_Mask_Type intMask);\r\nBL_Sts_Type EMAC_GetIntStatus(EMAC_INT_Type intType);\r\nBL_Err_Type EMAC_ClrIntStatus(EMAC_INT_Type intType);\r\nBL_Err_Type EMAC_Int_Callback_Install(EMAC_INT_Index intIdx, intCallback_Type *cbFun);\r\nBL_Err_Type EMAC_TxPauseReq(uint16_t timeCount);\r\nBL_Err_Type EMAC_SetHash(uint32_t hash0, uint32_t hash1);\r\nBL_Err_Type EMAC_Phy_Read(uint16_t phyReg, uint16_t *regValue);\r\nBL_Err_Type EMAC_Phy_Write(uint16_t phyReg, uint16_t regValue);\r\n\r\nBL_Err_Type EMAC_Enable_TX(void);\r\nBL_Err_Type EMAC_Disable_TX(void);\r\nBL_Err_Type EMAC_Enable_RX(void);\r\nBL_Err_Type EMAC_Disable_RX(void);\r\n\r\nvoid EMAC_Phy_SetAddress(uint16_t phyAddress);\r\nvoid EMAC_Phy_Set_Full_Duplex(uint8_t fullDuplex);\r\n\r\n/*@} end of group EMAC_Public_Functions */\r\n\r\n/*@} end of group EMAC */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_EMAC_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_glb.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_glb.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_GLB_H__\r\n#define __BL702_GLB_H__\r\n\r\n#include \"glb_reg.h\"\r\n#include \"pds_reg.h\"\r\n#include \"bl702_gpio.h\"\r\n#include \"bl702_l1c.h\"\r\n#include \"bl702_hbn.h\"\r\n#include \"bl702_sf_ctrl.h\"\r\n#include \"bl702_sf_cfg.h\"\r\n#include \"bl702_aon.h\"\r\n#include \"bl702_ef_ctrl.h\"\r\n#include \"bl702_pds.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  GLB\r\n *  @{\r\n */\r\n\r\n/** @defgroup  GLB_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief GLB root clock type definition\r\n */\r\ntypedef enum {\r\n    GLB_ROOT_CLK_RC32M, /*!< root clock select RC32M */\r\n    GLB_ROOT_CLK_XTAL,  /*!< root clock select XTAL */\r\n    GLB_ROOT_CLK_DLL,   /*!< root clock select DLL others, PLL120M not recommend */\r\n} GLB_ROOT_CLK_Type;\r\n\r\n/**\r\n *  @brief GLB system clock type definition\r\n */\r\ntypedef enum {\r\n    GLB_SYS_CLK_RC32M,    /*!< use RC32M as system clock frequency */\r\n    GLB_SYS_CLK_XTAL,     /*!< use XTAL as system clock */\r\n    GLB_SYS_CLK_DLL57P6M, /*!< use DLL output 57.6M as system clock */\r\n    GLB_SYS_CLK_DLL96M,   /*!< use DLL output 96M as system clock */\r\n    GLB_SYS_CLK_DLL144M,  /*!< use DLL output 144M as system clock, PLL120M not recommend */\r\n} GLB_SYS_CLK_Type;\r\n\r\n/**\r\n *  @brief GLB CAM clock type definition\r\n */\r\ntypedef enum {\r\n    GLB_CAM_CLK_XCLK,   /*!< Select XCLK as CAM clock */\r\n    GLB_CAM_CLK_DLL96M, /*!< Select DLL96M as CAM clock */\r\n} GLB_CAM_CLK_Type;\r\n\r\n/**\r\n *  @brief GLB I2S output ref clock type definition\r\n */\r\ntypedef enum {\r\n    GLB_I2S_OUT_REF_CLK_NONE, /*!< no output reference clock on I2S_0 ref_clock port */\r\n    GLB_I2S_OUT_REF_CLK_SRC,  /*!< output reference clock on I2S_0 ref_clock port */\r\n} GLB_I2S_OUT_REF_CLK_Type;\r\n\r\n/**\r\n *  @brief GLB qdec clock type definition\r\n */\r\ntypedef enum {\r\n    GLB_QDEC_CLK_XCLK, /*!< Select XCLK as QDEC clock */\r\n    GLB_QDEC_CLK_F32K, /*!< Select f32k as QDEC clock (PDS mode) */\r\n} GLB_QDEC_CLK_Type;\r\n\r\n/**\r\n *  @brief GLB DMA clock ID type definition\r\n */\r\ntypedef enum {\r\n    GLB_DMA_CLK_DMA0_CH0, /*!< DMA clock ID:channel 0 */\r\n    GLB_DMA_CLK_DMA0_CH1, /*!< DMA clock ID:channel 1 */\r\n    GLB_DMA_CLK_DMA0_CH2, /*!< DMA clock ID:channel 2 */\r\n    GLB_DMA_CLK_DMA0_CH3, /*!< DMA clock ID:channel 3 */\r\n    GLB_DMA_CLK_DMA0_CH4, /*!< DMA clock ID:channel 4 */\r\n    GLB_DMA_CLK_DMA0_CH5, /*!< DMA clock ID:channel 5 */\r\n    GLB_DMA_CLK_DMA0_CH6, /*!< DMA clock ID:channel 6 */\r\n    GLB_DMA_CLK_DMA0_CH7, /*!< DMA clock ID:channel 7 */\r\n} GLB_DMA_CLK_ID_Type;\r\n\r\n/**\r\n *  @brief GLB clock source type definition\r\n */\r\ntypedef enum {\r\n    GLB_IR_CLK_SRC_XCLK, /*!< IR clock source select XCLK */\r\n} GLB_IR_CLK_SRC_Type;\r\n\r\n/**\r\n *  @brief GLB flash clock type definition\r\n */\r\ntypedef enum {\r\n    GLB_SFLASH_CLK_144M,  /*!< Select 144M as flash clock */\r\n    GLB_SFLASH_CLK_XCLK,  /*!< Select XCLK as flash clock */\r\n    GLB_SFLASH_CLK_57P6M, /*!< Select 57.6M as flash clock */\r\n    GLB_SFLASH_CLK_72M,   /*!< Select 72M as flash clock */\r\n    GLB_SFLASH_CLK_BCLK,  /*!< Select BCLK as flash clock */\r\n    GLB_SFLASH_CLK_96M,   /*!< Select 96M as flash clock */\r\n} GLB_SFLASH_CLK_Type;\r\n\r\n/**\r\n *  @brief GLB chip clock out type definition\r\n */\r\ntypedef enum {\r\n    GLB_CHIP_CLK_OUT_NONE,          /*!< no chip clock out */\r\n    GLB_CHIP_CLK_OUT_I2S_REF_CLK,   /*!< i2s_ref_clk out */\r\n    GLB_CHIP_CLK_OUT_AUDIO_PLL_CLK, /*!< audio_pll_clk out */\r\n    GLB_CHIP_CLK_OUT_XTAL_SOC_32M,  /*!< clk_xtal_soc_32M */\r\n} GLB_CHIP_CLK_OUT_Type;\r\n\r\n/**\r\n *  @brief GLB eth ref clock out type definition\r\n */\r\ntypedef enum {\r\n    GLB_ETH_REF_CLK_OUT_OUTSIDE_50M, /*!< select outside 50MHz RMII ref clock */\r\n    GLB_ETH_REF_CLK_OUT_INSIDE_50M,  /*!< select inside 50MHz RMII ref clock */\r\n} GLB_ETH_REF_CLK_OUT_Type;\r\n\r\n/**\r\n *  @brief GLB SPI pad action type definition\r\n */\r\ntypedef enum {\r\n    GLB_SPI_PAD_ACT_AS_SLAVE,  /*!< SPI pad act as slave */\r\n    GLB_SPI_PAD_ACT_AS_MASTER, /*!< SPI pad act as master */\r\n} GLB_SPI_PAD_ACT_AS_Type;\r\n\r\n/**\r\n *  @brief GLB PKA clock type definition\r\n */\r\ntypedef enum {\r\n    GLB_PKA_CLK_HCLK,   /*!< Select HCLK as PKA clock */\r\n    GLB_PKA_CLK_DLL96M, /*!< Select DLL 96M as PKA clock */\r\n} GLB_PKA_CLK_Type;\r\n\r\n/**\r\n *  @brief BMX arb mode type definition\r\n */\r\ntypedef enum {\r\n    BMX_ARB_FIX,         /*!< 0->fix */\r\n    BMX_ARB_ROUND_ROBIN, /*!< 2->round-robin */\r\n    BMX_ARB_RANDOM,      /*!< 3->random */\r\n} BMX_ARB_Type;\r\n\r\n/**\r\n *  @brief BMX configuration structure type definition\r\n */\r\ntypedef struct {\r\n    uint8_t timeoutEn;   /*!< Bus timeout enable: detect slave no reaponse in 1024 cycles */\r\n    BL_Fun_Type errEn;   /*!< Bus error response enable */\r\n    BMX_ARB_Type arbMod; /*!< 0->fix, 2->round-robin, 3->random */\r\n} BMX_Cfg_Type;\r\n\r\n/**\r\n *  @brief BMX bus err type definition\r\n */\r\ntypedef enum {\r\n    BMX_BUS_ERR_TRUSTZONE_DECODE, /*!< Bus trustzone decode error */\r\n    BMX_BUS_ERR_ADDR_DECODE,      /*!< Bus addr decode error */\r\n} BMX_BUS_ERR_Type;\r\n\r\n/**\r\n *  @brief BMX bus err interrupt type definition\r\n */\r\ntypedef enum {\r\n    BMX_ERR_INT_ERR, /*!< BMX bus err interrupt */\r\n    BMX_ERR_INT_ALL, /*!< BMX bus err interrupt max num */\r\n} BMX_ERR_INT_Type;\r\n\r\n/**\r\n *  @brief BMX time out interrupt type definition\r\n */\r\ntypedef enum {\r\n    BMX_TO_INT_TIMEOUT, /*!< BMX timeout interrupt */\r\n    BMX_TO_INT_ALL,     /*!< BMX timeout interrupt max num */\r\n} BMX_TO_INT_Type;\r\n\r\n/**\r\n *  @brief GLB EM type definition\r\n */\r\ntypedef enum {\r\n    GLB_EM_0KB = 0x0,  /*!< 0x0 --> 0KB */\r\n    GLB_EM_8KB = 0x3,  /*!< 0x3 --> 8KB */\r\n    GLB_EM_16KB = 0xF, /*!< 0xF --> 16KB */\r\n} GLB_EM_Type;\r\n\r\n/**\r\n *  @brief GLB EMAC and CAM pin type definition\r\n */\r\ntypedef enum {\r\n    GLB_EMAC_CAM_PIN_EMAC, /*!< select pin as emac */\r\n    GLB_EMAC_CAM_PIN_CAM,  /*!< select pin as cam */\r\n} GLB_EMAC_CAM_PIN_Type;\r\n\r\n/**\r\n *  @brief GLB RTC clock type definition\r\n */\r\ntypedef enum {\r\n    GLB_MTIMER_CLK_BCLK, /*!< BUS clock */\r\n    GLB_MTIMER_CLK_32K,  /*!< 32KHz */\r\n} GLB_MTIMER_CLK_Type;\r\n\r\n/**\r\n *  @brief GLB ADC clock type definition\r\n */\r\ntypedef enum {\r\n    GLB_ADC_CLK_AUDIO_PLL, /*!< use Audio PLL as ADC clock */\r\n    GLB_ADC_CLK_XCLK,      /*!< use XCLK as ADC clock */\r\n} GLB_ADC_CLK_Type;\r\n\r\n/**\r\n *  @brief GLB DAC clock type definition\r\n */\r\ntypedef enum {\r\n    GLB_DAC_CLK_PLL_32M,   /*!< select PLL 32M as DAC clock source */\r\n    GLB_DAC_CLK_XCLK,      /*!< select XCLK as DAC clock source */\r\n    GLB_DAC_CLK_AUDIO_PLL, /*!< select Audio PLL as DAC clock source */\r\n} GLB_DAC_CLK_Type;\r\n\r\n/**\r\n *  @brief GLB DIG clock source select type definition\r\n */\r\ntypedef enum {\r\n    GLB_DIG_CLK_PLL_32M,   /*!< select PLL 32M as DIG clock source */\r\n    GLB_DIG_CLK_XCLK,      /*!< select XCLK as DIG clock source */\r\n    GLB_DIG_CLK_AUDIO_PLL, /*!< select Audio PLL as DIG clock source */\r\n} GLB_DIG_CLK_Type;\r\n\r\n/**\r\n *  @brief GLB BT bandwidth type definition\r\n */\r\ntypedef enum {\r\n    GLB_BT_BANDWIDTH_1M, /*!< BT bandwidth 1MHz */\r\n    GLB_BT_BANDWIDTH_2M, /*!< BT bandwidth 2MHz */\r\n} GLB_BT_BANDWIDTH_Type;\r\n\r\n/**\r\n *  @brief GLB UART signal type definition\r\n */\r\ntypedef enum {\r\n    GLB_UART_SIG_0, /*!< UART signal 0 */\r\n    GLB_UART_SIG_1, /*!< UART signal 1 */\r\n    GLB_UART_SIG_2, /*!< UART signal 2 */\r\n    GLB_UART_SIG_3, /*!< UART signal 3 */\r\n    GLB_UART_SIG_4, /*!< UART signal 4 */\r\n    GLB_UART_SIG_5, /*!< UART signal 5 */\r\n    GLB_UART_SIG_6, /*!< UART signal 6 */\r\n    GLB_UART_SIG_7, /*!< UART signal 7 */\r\n} GLB_UART_SIG_Type;\r\n\r\n/**\r\n *  @brief GLB UART signal  function type definition\r\n */\r\ntypedef enum {\r\n    GLB_UART_SIG_FUN_UART0_RTS, /*!< UART funtion: UART 0 RTS */\r\n    GLB_UART_SIG_FUN_UART0_CTS, /*!< UART funtion: UART 0 CTS */\r\n    GLB_UART_SIG_FUN_UART0_TXD, /*!< UART funtion: UART 0 TXD */\r\n    GLB_UART_SIG_FUN_UART0_RXD, /*!< UART funtion: UART 0 RXD */\r\n    GLB_UART_SIG_FUN_UART1_RTS, /*!< UART funtion: UART 1 RTS */\r\n    GLB_UART_SIG_FUN_UART1_CTS, /*!< UART funtion: UART 1 CTS */\r\n    GLB_UART_SIG_FUN_UART1_TXD, /*!< UART funtion: UART 1 TXD */\r\n    GLB_UART_SIG_FUN_UART1_RXD, /*!< UART funtion: UART 1 RXD */\r\n} GLB_UART_SIG_FUN_Type;\r\n\r\n/**\r\n *  @brief GLB DLL output clock type definition\r\n */\r\ntypedef enum {\r\n    GLB_DLL_CLK_57P6M, /*!< DLL output 57P6M clock */\r\n    GLB_DLL_CLK_96M,   /*!< DLL output 96M clock */\r\n    GLB_DLL_CLK_144M,  /*!< DLL output 144M clock */\r\n    GLB_DLL_CLK_288M,  /*!< DLL output 288M clock */\r\n    GLB_DLL_CLK_MMDIV, /*!< DLL output mmdiv clock */\r\n} GLB_DLL_CLK_Type;\r\n\r\n/**\r\n *  @brief GLB GPIO interrupt trigger mode type definition\r\n */\r\ntypedef enum {\r\n    GLB_GPIO_INT_TRIG_NEG_PULSE, /*!< GPIO negedge pulse trigger interrupt */\r\n    GLB_GPIO_INT_TRIG_POS_PULSE, /*!< GPIO posedge pulse trigger interrupt */\r\n    GLB_GPIO_INT_TRIG_NEG_LEVEL, /*!< GPIO negedge level trigger interrupt (32k 3T) */\r\n    GLB_GPIO_INT_TRIG_POS_LEVEL, /*!< GPIO posedge level trigger interrupt (32k 3T) */\r\n} GLB_GPIO_INT_TRIG_Type;\r\n\r\n/**\r\n *  @brief GLB GPIO interrupt control mode type definition\r\n */\r\ntypedef enum {\r\n    GLB_GPIO_INT_CONTROL_SYNC,  /*!< GPIO interrupt sync mode */\r\n    GLB_GPIO_INT_CONTROL_ASYNC, /*!< GPIO interrupt async mode */\r\n} GLB_GPIO_INT_CONTROL_Type;\r\n\r\n/**\r\n *  @brief PLL XTAL type definition\r\n */\r\ntypedef enum {\r\n    GLB_DLL_XTAL_NONE,  /*!< XTAL is none */\r\n    GLB_DLL_XTAL_32M,   /*!< XTAL is 32M */\r\n    GLB_DLL_XTAL_RC32M, /*!< XTAL is RC32M */\r\n} GLB_DLL_XTAL_Type;\r\n\r\ntypedef enum {\r\n    GLB_AHB_CLOCK_IP_CPU,\r\n    GLB_AHB_CLOCK_IP_SDU,\r\n    GLB_AHB_CLOCK_IP_SEC,\r\n    GLB_AHB_CLOCK_IP_DMA_0,\r\n    GLB_AHB_CLOCK_IP_DMA_1,\r\n    GLB_AHB_CLOCK_IP_DMA_2,\r\n    GLB_AHB_CLOCK_IP_CCI,\r\n    GLB_AHB_CLOCK_IP_RF_TOP,\r\n    GLB_AHB_CLOCK_IP_GPIP,\r\n    GLB_AHB_CLOCK_IP_TZC,\r\n    GLB_AHB_CLOCK_IP_EF_CTRL,\r\n    GLB_AHB_CLOCK_IP_SF_CTRL,\r\n    GLB_AHB_CLOCK_IP_EMAC,\r\n    GLB_AHB_CLOCK_IP_UART0,\r\n    GLB_AHB_CLOCK_IP_UART1,\r\n    GLB_AHB_CLOCK_IP_UART2,\r\n    GLB_AHB_CLOCK_IP_UART3,\r\n    GLB_AHB_CLOCK_IP_UART4,\r\n    GLB_AHB_CLOCK_IP_SPI,\r\n    GLB_AHB_CLOCK_IP_I2C,\r\n    GLB_AHB_CLOCK_IP_PWM,\r\n    GLB_AHB_CLOCK_IP_TIMER,\r\n    GLB_AHB_CLOCK_IP_IR,\r\n    GLB_AHB_CLOCK_IP_CHECKSUM,\r\n    GLB_AHB_CLOCK_IP_QDEC,\r\n    GLB_AHB_CLOCK_IP_KYS,\r\n    GLB_AHB_CLOCK_IP_I2S,\r\n    GLB_AHB_CLOCK_IP_USB11,\r\n    GLB_AHB_CLOCK_IP_CAM,\r\n    GLB_AHB_CLOCK_IP_MJPEG,\r\n    GLB_AHB_CLOCK_IP_BT_BLE_NORMAL,\r\n    GLB_AHB_CLOCK_IP_BT_BLE_LP,\r\n    GLB_AHB_CLOCK_IP_ZB_NORMAL,\r\n    GLB_AHB_CLOCK_IP_ZB_LP,\r\n    GLB_AHB_CLOCK_IP_WIFI_NORMAL,\r\n    GLB_AHB_CLOCK_IP_WIFI_LP,\r\n    GLB_AHB_CLOCK_IP_BT_BLE_2_NORMAL,\r\n    GLB_AHB_CLOCK_IP_BT_BLE_2_LP,\r\n    GLB_AHB_CLOCK_IP_EMI_MISC,\r\n    GLB_AHB_CLOCK_IP_PSRAM0_CTRL,\r\n    GLB_AHB_CLOCK_IP_PSRAM1_CTRL,\r\n    GLB_AHB_CLOCK_IP_USB20,\r\n    GLB_AHB_CLOCK_IP_MIX2,\r\n    GLB_AHB_CLOCK_IP_AUDIO,\r\n    GLB_AHB_CLOCK_IP_SDH,\r\n} GLB_AHB_CLOCK_IP_Type;\r\n\r\n/*@} end of group GLB_Public_Types */\r\n\r\n/** @defgroup  GLB_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  GLB_ROOT_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_ROOT_CLK_TYPE(type) (((type) == GLB_ROOT_CLK_RC32M) || \\\r\n                                    ((type) == GLB_ROOT_CLK_XTAL) ||  \\\r\n                                    ((type) == GLB_ROOT_CLK_DLL))\r\n\r\n/** @defgroup  GLB_SYS_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_SYS_CLK_TYPE(type) (((type) == GLB_SYS_CLK_RC32M) ||    \\\r\n                                   ((type) == GLB_SYS_CLK_XTAL) ||     \\\r\n                                   ((type) == GLB_SYS_CLK_DLL57P6M) || \\\r\n                                   ((type) == GLB_SYS_CLK_DLL96M) ||   \\\r\n                                   ((type) == GLB_SYS_CLK_DLL144M))\r\n\r\n/** @defgroup  GLB_CAM_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_CAM_CLK_TYPE(type) (((type) == GLB_CAM_CLK_XCLK) || \\\r\n                                   ((type) == GLB_CAM_CLK_DLL96M))\r\n\r\n/** @defgroup  GLB_I2S_OUT_REF_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_I2S_OUT_REF_CLK_TYPE(type) (((type) == GLB_I2S_OUT_REF_CLK_NONE) || \\\r\n                                           ((type) == GLB_I2S_OUT_REF_CLK_SRC))\r\n\r\n/** @defgroup  GLB_QDEC_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_QDEC_CLK_TYPE(type) (((type) == GLB_QDEC_CLK_XCLK) || \\\r\n                                    ((type) == GLB_QDEC_CLK_F32K))\r\n\r\n/** @defgroup  GLB_DMA_CLK_ID_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_DMA_CLK_ID_TYPE(type) (((type) == GLB_DMA_CLK_DMA0_CH0) || \\\r\n                                      ((type) == GLB_DMA_CLK_DMA0_CH1) || \\\r\n                                      ((type) == GLB_DMA_CLK_DMA0_CH2) || \\\r\n                                      ((type) == GLB_DMA_CLK_DMA0_CH3) || \\\r\n                                      ((type) == GLB_DMA_CLK_DMA0_CH4) || \\\r\n                                      ((type) == GLB_DMA_CLK_DMA0_CH5) || \\\r\n                                      ((type) == GLB_DMA_CLK_DMA0_CH6) || \\\r\n                                      ((type) == GLB_DMA_CLK_DMA0_CH7))\r\n\r\n/** @defgroup  GLB_IR_CLK_SRC_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_IR_CLK_SRC_TYPE(type) (((type) == GLB_IR_CLK_SRC_XCLK))\r\n\r\n/** @defgroup  GLB_SFLASH_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_SFLASH_CLK_TYPE(type) (((type) == GLB_SFLASH_CLK_144M) ||  \\\r\n                                      ((type) == GLB_SFLASH_CLK_XCLK) ||  \\\r\n                                      ((type) == GLB_SFLASH_CLK_57P6M) || \\\r\n                                      ((type) == GLB_SFLASH_CLK_72M) ||   \\\r\n                                      ((type) == GLB_SFLASH_CLK_BCLK) ||  \\\r\n                                      ((type) == GLB_SFLASH_CLK_96M))\r\n\r\n/** @defgroup  GLB_CHIP_CLK_OUT_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_CHIP_CLK_OUT_TYPE(type) (((type) == GLB_CHIP_CLK_OUT_NONE) ||          \\\r\n                                        ((type) == GLB_CHIP_CLK_OUT_I2S_REF_CLK) ||   \\\r\n                                        ((type) == GLB_CHIP_CLK_OUT_AUDIO_PLL_CLK) || \\\r\n                                        ((type) == GLB_CHIP_CLK_OUT_XTAL_SOC_32M))\r\n\r\n/** @defgroup  GLB_ETH_REF_CLK_OUT_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_ETH_REF_CLK_OUT_TYPE(type) (((type) == GLB_ETH_REF_CLK_OUT_OUTSIDE_50M) || \\\r\n                                           ((type) == GLB_ETH_REF_CLK_OUT_INSIDE_50M))\r\n\r\n/** @defgroup  GLB_SPI_PAD_ACT_AS_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_SPI_PAD_ACT_AS_TYPE(type) (((type) == GLB_SPI_PAD_ACT_AS_SLAVE) || \\\r\n                                          ((type) == GLB_SPI_PAD_ACT_AS_MASTER))\r\n\r\n/** @defgroup  GLB_PKA_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_PKA_CLK_TYPE(type) (((type) == GLB_PKA_CLK_HCLK) || \\\r\n                                   ((type) == GLB_PKA_CLK_DLL96M))\r\n\r\n/** @defgroup  BMX_ARB_TYPE\r\n *  @{\r\n */\r\n#define IS_BMX_ARB_TYPE(type) (((type) == BMX_ARB_FIX) ||         \\\r\n                               ((type) == BMX_ARB_ROUND_ROBIN) || \\\r\n                               ((type) == BMX_ARB_RANDOM))\r\n\r\n/** @defgroup  BMX_BUS_ERR_TYPE\r\n *  @{\r\n */\r\n#define IS_BMX_BUS_ERR_TYPE(type) (((type) == BMX_BUS_ERR_TRUSTZONE_DECODE) || \\\r\n                                   ((type) == BMX_BUS_ERR_ADDR_DECODE))\r\n\r\n/** @defgroup  BMX_ERR_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_BMX_ERR_INT_TYPE(type) (((type) == BMX_ERR_INT_ERR) || \\\r\n                                   ((type) == BMX_ERR_INT_ALL))\r\n\r\n/** @defgroup  BMX_TO_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_BMX_TO_INT_TYPE(type) (((type) == BMX_TO_INT_TIMEOUT) || \\\r\n                                  ((type) == BMX_TO_INT_ALL))\r\n\r\n/** @defgroup  GLB_EM_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_EM_TYPE(type) (((type) == GLB_EM_0KB) || \\\r\n                              ((type) == GLB_EM_8KB) || \\\r\n                              ((type) == GLB_EM_16KB))\r\n\r\n/** @defgroup  GLB_EMAC_CAM_PIN_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_EMAC_CAM_PIN_TYPE(type) (((type) == GLB_EMAC_CAM_PIN_EMAC) || \\\r\n                                        ((type) == GLB_EMAC_CAM_PIN_CAM))\r\n\r\n/** @defgroup  GLB_MTIMER_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_MTIMER_CLK_TYPE(type) (((type) == GLB_MTIMER_CLK_BCLK) || \\\r\n                                      ((type) == GLB_MTIMER_CLK_32K))\r\n\r\n/** @defgroup  GLB_ADC_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_ADC_CLK_TYPE(type) (((type) == GLB_ADC_CLK_AUDIO_PLL) || \\\r\n                                   ((type) == GLB_ADC_CLK_XCLK))\r\n\r\n/** @defgroup  GLB_DAC_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_DAC_CLK_TYPE(type) (((type) == GLB_DAC_CLK_PLL_32M) || \\\r\n                                   ((type) == GLB_DAC_CLK_XCLK) ||    \\\r\n                                   ((type) == GLB_DAC_CLK_AUDIO_PLL))\r\n\r\n/** @defgroup  GLB_DIG_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_DIG_CLK_TYPE(type) (((type) == GLB_DIG_CLK_PLL_32M) || \\\r\n                                   ((type) == GLB_DIG_CLK_XCLK) ||    \\\r\n                                   ((type) == GLB_DIG_CLK_AUDIO_PLL))\r\n\r\n/** @defgroup  GLB_BT_BANDWIDTH_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_BT_BANDWIDTH_TYPE(type) (((type) == GLB_BT_BANDWIDTH_1M) || \\\r\n                                        ((type) == GLB_BT_BANDWIDTH_2M))\r\n\r\n/** @defgroup  GLB_UART_SIG_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_UART_SIG_TYPE(type) (((type) == GLB_UART_SIG_0) || \\\r\n                                    ((type) == GLB_UART_SIG_1) || \\\r\n                                    ((type) == GLB_UART_SIG_2) || \\\r\n                                    ((type) == GLB_UART_SIG_3) || \\\r\n                                    ((type) == GLB_UART_SIG_4) || \\\r\n                                    ((type) == GLB_UART_SIG_5) || \\\r\n                                    ((type) == GLB_UART_SIG_6) || \\\r\n                                    ((type) == GLB_UART_SIG_7))\r\n\r\n/** @defgroup  GLB_UART_SIG_FUN_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_UART_SIG_FUN_TYPE(type) (((type) == GLB_UART_SIG_FUN_UART0_RTS) || \\\r\n                                        ((type) == GLB_UART_SIG_FUN_UART0_CTS) || \\\r\n                                        ((type) == GLB_UART_SIG_FUN_UART0_TXD) || \\\r\n                                        ((type) == GLB_UART_SIG_FUN_UART0_RXD) || \\\r\n                                        ((type) == GLB_UART_SIG_FUN_UART1_RTS) || \\\r\n                                        ((type) == GLB_UART_SIG_FUN_UART1_CTS) || \\\r\n                                        ((type) == GLB_UART_SIG_FUN_UART1_TXD) || \\\r\n                                        ((type) == GLB_UART_SIG_FUN_UART1_RXD))\r\n\r\n/** @defgroup  GLB_DLL_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_DLL_CLK_TYPE(type) (((type) == GLB_DLL_CLK_57P6M) || \\\r\n                                   ((type) == GLB_DLL_CLK_96M) ||   \\\r\n                                   ((type) == GLB_DLL_CLK_144M) ||  \\\r\n                                   ((type) == GLB_DLL_CLK_288M) ||  \\\r\n                                   ((type) == GLB_DLL_CLK_MMDIV))\r\n\r\n/** @defgroup  GLB_GPIO_INT_TRIG_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_GPIO_INT_TRIG_TYPE(type) (((type) == GLB_GPIO_INT_TRIG_NEG_PULSE) || \\\r\n                                         ((type) == GLB_GPIO_INT_TRIG_POS_PULSE) || \\\r\n                                         ((type) == GLB_GPIO_INT_TRIG_NEG_LEVEL) || \\\r\n                                         ((type) == GLB_GPIO_INT_TRIG_POS_LEVEL))\r\n\r\n/** @defgroup  GLB_GPIO_INT_CONTROL_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_GPIO_INT_CONTROL_TYPE(type) (((type) == GLB_GPIO_INT_CONTROL_SYNC) || \\\r\n                                            ((type) == GLB_GPIO_INT_CONTROL_ASYNC))\r\n\r\n/** @defgroup  GLB_DLL_XTAL_TYPE\r\n *  @{\r\n */\r\n#define IS_GLB_DLL_XTAL_TYPE(type) (((type) == GLB_DLL_XTAL_NONE) || \\\r\n                                    ((type) == GLB_DLL_XTAL_32M) ||  \\\r\n                                    ((type) == GLB_DLL_XTAL_RC32M))\r\n\r\n/*@} end of group GLB_Public_Constants */\r\n\r\n/** @defgroup  GLB_Public_Macros\r\n *  @{\r\n */\r\n#define UART_SIG_SWAP_GPIO0_GPIO7   0x01 /* GPIO0-7   uart_sig[0:7] -> uart_sig[4:7], uart_sig[0:3] */\r\n#define UART_SIG_SWAP_GPIO8_GPIO15  0x02 /* GPIO8-15  uart_sig[0:7] -> uart_sig[4:7], uart_sig[0:3] */\r\n#define UART_SIG_SWAP_GPIO16_GPIO22 0x04 /* GPIO16-22 uart_sig[0:7] -> uart_sig[4:7], uart_sig[0:3] */\r\n#define UART_SIG_SWAP_NONE          0x00 /* GPIO0-22  uart_sig[0:7] <- uart_sig[4:7], uart_sig[0:3] */\r\n#define JTAG_SIG_SWAP_GPIO0_GPIO3   0x01 /* GPIO0-3   E21_TMS/E21_TDI/E21_TCK/E21_TDO -> E21_TCK/E21_TDO/E21_TMS/E21_TDI */\r\n#define JTAG_SIG_SWAP_GPIO4_GPIO7   0x02 /* GPIO4-7   E21_TMS/E21_TDI/E21_TCK/E21_TDO -> E21_TCK/E21_TDO/E21_TMS/E21_TDI */\r\n#define JTAG_SIG_SWAP_GPIO8_GPIO11  0x04 /* GPIO8-11  E21_TMS/E21_TDI/E21_TCK/E21_TDO -> E21_TCK/E21_TDO/E21_TMS/E21_TDI */\r\n#define JTAG_SIG_SWAP_GPIO12_GPIO15 0x08 /* GPIO12-15 E21_TMS/E21_TDI/E21_TCK/E21_TDO -> E21_TCK/E21_TDO/E21_TMS/E21_TDI */\r\n#define JTAG_SIG_SWAP_GPIO16_GPIO19 0x10 /* GPIO16-19 E21_TMS/E21_TDI/E21_TCK/E21_TDO -> E21_TCK/E21_TDO/E21_TMS/E21_TDI */\r\n#define JTAG_SIG_SWAP_GPIO20_GPIO22 0x20 /* GPIO20-22 E21_TMS/E21_TDI/E21_TCK/E21_TDO -> E21_TCK/E21_TDO/E21_TMS/E21_TDI */\r\n#define JTAG_SIG_SWAP_NONE          0x00 /* GPIO0-22  E21_TMS/E21_TDI/E21_TCK/E21_TDO <- E21_TCK/E21_TDO/E21_TMS/E21_TDI */\r\n\r\n#define GLB_AHB_CLOCK_CPU             (0x0000000000000001UL)\r\n#define GLB_AHB_CLOCK_SDU             (0x0000000000000002UL)\r\n#define GLB_AHB_CLOCK_SEC             (0x0000000000000004UL)\r\n#define GLB_AHB_CLOCK_DMA_0           (0x0000000000000008UL)\r\n#define GLB_AHB_CLOCK_DMA_1           (0x0000000000000010UL)\r\n#define GLB_AHB_CLOCK_DMA_2           (0x0000000000000020UL)\r\n#define GLB_AHB_CLOCK_CCI             (0x0000000000000040UL)\r\n#define GLB_AHB_CLOCK_RF_TOP          (0x0000000000000080UL)\r\n#define GLB_AHB_CLOCK_GPIP            (0x0000000000000100UL)\r\n#define GLB_AHB_CLOCK_TZC             (0x0000000000000200UL)\r\n#define GLB_AHB_CLOCK_EF_CTRL         (0x0000000000000400UL)\r\n#define GLB_AHB_CLOCK_SF_CTRL         (0x0000000000000800UL)\r\n#define GLB_AHB_CLOCK_EMAC            (0x0000000000001000UL)\r\n#define GLB_AHB_CLOCK_UART0           (0x0000000000002000UL)\r\n#define GLB_AHB_CLOCK_UART1           (0x0000000000004000UL)\r\n#define GLB_AHB_CLOCK_UART2           (0x0000000000008000UL)\r\n#define GLB_AHB_CLOCK_UART3           (0x0000000000010000UL)\r\n#define GLB_AHB_CLOCK_UART4           (0x0000000000020000UL)\r\n#define GLB_AHB_CLOCK_SPI             (0x0000000000040000UL)\r\n#define GLB_AHB_CLOCK_I2C             (0x0000000000080000UL)\r\n#define GLB_AHB_CLOCK_PWM             (0x0000000000100000UL)\r\n#define GLB_AHB_CLOCK_TIMER           (0x0000000000200000UL)\r\n#define GLB_AHB_CLOCK_IR              (0x0000000000400000UL)\r\n#define GLB_AHB_CLOCK_CHECKSUM        (0x0000000000800000UL)\r\n#define GLB_AHB_CLOCK_QDEC            (0x0000000001000000UL)\r\n#define GLB_AHB_CLOCK_KYS             (0x0000000002000000UL)\r\n#define GLB_AHB_CLOCK_I2S             (0x0000000004000000UL)\r\n#define GLB_AHB_CLOCK_USB11           (0x0000000008000000UL)\r\n#define GLB_AHB_CLOCK_CAM             (0x0000000010000000UL)\r\n#define GLB_AHB_CLOCK_MJPEG           (0x0000000020000000UL)\r\n#define GLB_AHB_CLOCK_BT_BLE_NORMAL   (0x0000000040000000UL)\r\n#define GLB_AHB_CLOCK_BT_BLE_LP       (0x0000000080000000UL)\r\n#define GLB_AHB_CLOCK_ZB_NORMAL       (0x0000000100000000UL)\r\n#define GLB_AHB_CLOCK_ZB_LP           (0x0000000200000000UL)\r\n#define GLB_AHB_CLOCK_WIFI_NORMAL     (0x0000000400000000UL)\r\n#define GLB_AHB_CLOCK_WIFI_LP         (0x0000000800000000UL)\r\n#define GLB_AHB_CLOCK_BT_BLE_2_NORMAL (0x0000001000000000UL)\r\n#define GLB_AHB_CLOCK_BT_BLE_2_LP     (0x0000002000000000UL)\r\n#define GLB_AHB_CLOCK_EMI_MISC        (0x0000004000000000UL)\r\n#define GLB_AHB_CLOCK_PSRAM0_CTRL     (0x0000008000000000UL)\r\n#define GLB_AHB_CLOCK_PSRAM1_CTRL     (0x0000010000000000UL)\r\n#define GLB_AHB_CLOCK_USB20           (0x0000020000000000UL)\r\n#define GLB_AHB_CLOCK_MIX2            (0x0000040000000000UL)\r\n#define GLB_AHB_CLOCK_AUDIO           (0x0000080000000000UL)\r\n#define GLB_AHB_CLOCK_SDH             (0x0000100000000000UL)\r\n\r\n/*@} end of group GLB_Public_Macros */\r\n\r\n/** @defgroup  GLB_Public_Functions\r\n *  @{\r\n */\r\n/*----------*/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid BMX_ERR_IRQHandler(void);\r\nvoid BMX_TO_IRQHandler(void);\r\nvoid GPIO_INT0_IRQHandler(void);\r\n#endif\r\n/*----------*/\r\nGLB_ROOT_CLK_Type GLB_Get_Root_CLK_Sel(void);\r\nBL_Err_Type GLB_Set_System_CLK_Div(uint8_t hclkDiv, uint8_t bclkDiv);\r\nuint8_t GLB_Get_BCLK_Div(void);\r\nuint8_t GLB_Get_HCLK_Div(void);\r\nBL_Err_Type Update_SystemCoreClockWith_XTAL(GLB_DLL_XTAL_Type xtalType);\r\nBL_Err_Type GLB_Set_System_CLK(GLB_DLL_XTAL_Type xtalType, GLB_SYS_CLK_Type clkFreq);\r\nBL_Err_Type System_Core_Clock_Update_From_RC32M(void);\r\n/*----------*/\r\nBL_Err_Type GLB_Set_CAM_CLK(uint8_t enable, GLB_CAM_CLK_Type clkSel, uint8_t div);\r\nBL_Err_Type GLB_Set_MAC154_ZIGBEE_CLK(uint8_t enable);\r\nBL_Err_Type GLB_Set_BLE_CLK(uint8_t enable);\r\nBL_Err_Type GLB_Set_I2S_CLK(uint8_t enable, GLB_I2S_OUT_REF_CLK_Type outRef);\r\nBL_Err_Type GLB_Set_USB_CLK(uint8_t enable);\r\nBL_Err_Type GLB_Set_QDEC_CLK(GLB_QDEC_CLK_Type clkSel, uint8_t div);\r\n/*----------*/\r\nBL_Err_Type GLB_Set_DMA_CLK(uint8_t enable, GLB_DMA_CLK_ID_Type clk);\r\nBL_Err_Type GLB_Set_IR_CLK(uint8_t enable, GLB_IR_CLK_SRC_Type clkSel, uint8_t div);\r\nBL_Err_Type GLB_Set_SF_CLK(uint8_t enable, GLB_SFLASH_CLK_Type clkSel, uint8_t div);\r\nBL_Err_Type GLB_Set_UART_CLK(uint8_t enable, HBN_UART_CLK_Type clkSel, uint8_t div);\r\n/*----------*/\r\nBL_Err_Type GLB_Set_Chip_Out_0_CLK_Sel(GLB_CHIP_CLK_OUT_Type clkSel);\r\nBL_Err_Type GLB_Set_Chip_Out_1_CLK_Sel(GLB_CHIP_CLK_OUT_Type clkSel);\r\nBL_Err_Type GLB_Set_I2C_CLK(uint8_t enable, uint8_t div);\r\nBL_Err_Type GLB_Invert_ETH_RX_CLK(uint8_t enable);\r\nBL_Err_Type GLB_Invert_RF_TEST_O_CLK(uint8_t enable);\r\nBL_Err_Type GLB_Set_SPI_CLK(uint8_t enable, uint8_t div);\r\nBL_Err_Type GLB_Invert_ETH_TX_CLK(uint8_t enable);\r\nBL_Err_Type GLB_Invert_ETH_REF_O_CLK(uint8_t enable);\r\nBL_Err_Type GLB_Set_ETH_REF_O_CLK_Sel(GLB_ETH_REF_CLK_OUT_Type clkSel);\r\n/*----------*/\r\nBL_Err_Type GLB_Set_PKA_CLK_Sel(GLB_PKA_CLK_Type clkSel);\r\nBL_Err_Type GLB_SW_System_Reset(void);\r\nBL_Err_Type GLB_SW_CPU_Reset(void);\r\nBL_Err_Type GLB_SW_POR_Reset(void);\r\nBL_Err_Type GLB_AHB_Slave1_Reset(BL_AHB_Slave1_Type slave1);\r\nBL_Err_Type GLB_AHB_Slave1_Clock_Gate(uint8_t enable, BL_AHB_Slave1_Type slave1);\r\nuint64_t GLB_PER_Clock_Gate_Status_Get(void);\r\nBL_Err_Type GLB_PER_Clock_Gate(uint64_t ips);\r\nBL_Err_Type GLB_PER_Clock_UnGate(uint64_t ips);\r\n/*----------*/\r\nBL_Err_Type GLB_BMX_Init(BMX_Cfg_Type *BmxCfg);\r\nBL_Err_Type GLB_BMX_Addr_Monitor_Enable(void);\r\nBL_Err_Type GLB_BMX_Addr_Monitor_Disable(void);\r\nBL_Err_Type GLB_BMX_BusErrResponse_Enable(void);\r\nBL_Err_Type GLB_BMX_BusErrResponse_Disable(void);\r\nBL_Sts_Type GLB_BMX_Get_Status(BMX_BUS_ERR_Type errType);\r\nuint32_t GLB_BMX_Get_Err_Addr(void);\r\nBL_Err_Type BMX_ERR_INT_Callback_Install(BMX_ERR_INT_Type intType, intCallback_Type *cbFun);\r\nBL_Err_Type BMX_TIMEOUT_INT_Callback_Install(BMX_TO_INT_Type intType, intCallback_Type *cbFun);\r\n/*----------*/\r\nBL_Err_Type GLB_Set_SRAM_RET(uint32_t value);\r\nuint32_t GLB_Get_SRAM_RET(void);\r\nBL_Err_Type GLB_Set_SRAM_SLP(uint32_t value);\r\nuint32_t GLB_Get_SRAM_SLP(void);\r\nBL_Err_Type GLB_Set_SRAM_PARM(uint32_t value);\r\nuint32_t GLB_Get_SRAM_PARM(void);\r\n/*----------*/\r\nBL_Err_Type GLB_Set_EM_Sel(GLB_EM_Type emType);\r\n/*----------*/\r\nBL_Err_Type GLB_SWAP_EMAC_CAM_Pin(GLB_EMAC_CAM_PIN_Type pinType);\r\nBL_Err_Type GLB_Set_Ext_Rst_Smt(uint8_t enable);\r\nBL_Err_Type GLB_Set_Kys_Drv_Col(uint8_t enable);\r\nBL_Err_Type GLB_UART_Sig_Swap_Set(uint8_t swapSel);\r\nBL_Err_Type GLB_JTAG_Sig_Swap_Set(uint8_t swapSel);\r\nBL_Err_Type GLB_CCI_Use_IO_0_1_2_7(uint8_t enable);\r\nBL_Err_Type GLB_CCI_Use_Jtag_Pin(uint8_t enable);\r\nBL_Err_Type GLB_Swap_SPI_0_MOSI_With_MISO(BL_Fun_Type newState);\r\nBL_Err_Type GLB_Set_SPI_0_ACT_MOD_Sel(GLB_SPI_PAD_ACT_AS_Type mod);\r\nBL_Err_Type GLB_Select_Internal_Flash(void);\r\nBL_Err_Type GLB_Select_External_Flash(void);\r\nBL_Err_Type GLB_Deswap_Flash_Pin(void);\r\nBL_Err_Type GLB_Swap_Flash_CS_IO2_Pin();\r\nBL_Err_Type GLB_Swap_Flash_IO0_IO3_Pin();\r\nBL_Err_Type GLB_Swap_Flash_Pin(void);\r\nBL_Err_Type GLB_Select_Internal_PSram(void);\r\n/*----------*/\r\nBL_Err_Type GLB_Set_PDM_CLK(uint8_t enable, uint8_t div);\r\n/*----------*/\r\nBL_Err_Type GLB_Set_MTimer_CLK(uint8_t enable, GLB_MTIMER_CLK_Type clkSel, uint32_t div);\r\n/*----------*/\r\nBL_Err_Type GLB_Set_ADC_CLK(uint8_t enable, GLB_ADC_CLK_Type clkSel, uint8_t div);\r\nBL_Err_Type GLB_Set_DAC_CLK(uint8_t enable, GLB_DAC_CLK_Type clkSel, uint8_t div);\r\n/*----------*/\r\nBL_Err_Type GLB_Set_DIG_CLK_Sel(GLB_DIG_CLK_Type clkSel);\r\nBL_Err_Type GLB_Set_DIG_512K_CLK(uint8_t enable, uint8_t compensation, uint8_t div);\r\nBL_Err_Type GLB_Set_DIG_32K_CLK(uint8_t enable, uint8_t compensation, uint8_t div);\r\n/*----------*/\r\nBL_Err_Type GLB_Set_BT_Coex_Signal(uint8_t enable, GLB_BT_BANDWIDTH_Type bandWidth,\r\n                                   uint8_t pti, uint8_t channel);\r\n/*----------*/\r\nBL_Err_Type GLB_UART_Fun_Sel(GLB_UART_SIG_Type sig, GLB_UART_SIG_FUN_Type fun);\r\n/*----------*/\r\nBL_Err_Type GLB_Power_Off_DLL(void);\r\nBL_Err_Type GLB_Power_On_DLL(GLB_DLL_XTAL_Type xtalType);\r\nBL_Err_Type GLB_Enable_DLL_All_Clks(void);\r\nBL_Err_Type GLB_Enable_DLL_Clk(GLB_DLL_CLK_Type dllClk);\r\nBL_Err_Type GLB_Disable_DLL_All_Clks(void);\r\nBL_Err_Type GLB_Disable_DLL_Clk(GLB_DLL_CLK_Type dllClk);\r\n/*----------*/\r\nBL_Err_Type GLB_IR_RX_GPIO_Sel(GLB_GPIO_Type gpio);\r\nBL_Err_Type GLB_IR_LED_Driver_Enable(void);\r\nBL_Err_Type GLB_IR_LED_Driver_Disable(void);\r\nBL_Err_Type GLB_IR_LED_Driver_Output_Enable(GLB_GPIO_Type gpio);\r\nBL_Err_Type GLB_IR_LED_Driver_Output_Disable(GLB_GPIO_Type gpio);\r\nBL_Err_Type GLB_IR_LED_Driver_Ibias(uint8_t ibias);\r\n/*----------*/\r\nBL_Err_Type GLB_GPIO_Init(GLB_GPIO_Cfg_Type *cfg);\r\nBL_Err_Type GLB_GPIO_Func_Init(GLB_GPIO_FUNC_Type gpioFun, GLB_GPIO_Type *pinList, uint8_t cnt);\r\nBL_Err_Type GLB_GPIO_INPUT_Enable(GLB_GPIO_Type gpioPin);\r\nBL_Err_Type GLB_GPIO_INPUT_Disable(GLB_GPIO_Type gpioPin);\r\nBL_Err_Type GLB_GPIO_OUTPUT_Enable(GLB_GPIO_Type gpioPin);\r\nBL_Err_Type GLB_GPIO_OUTPUT_Disable(GLB_GPIO_Type gpioPin);\r\nBL_Err_Type GLB_GPIO_Set_HZ(GLB_GPIO_Type gpioPin);\r\nBL_Err_Type GLB_Set_Flash_Pad_HZ(void);\r\nBL_Err_Type GLB_Set_Psram_Pad_HZ(void);\r\nuint8_t GLB_GPIO_Get_Fun(GLB_GPIO_Type gpioPin);\r\nBL_Err_Type GLB_GPIO_Write(GLB_GPIO_Type gpioPin, uint32_t val);\r\nuint32_t GLB_GPIO_Read(GLB_GPIO_Type gpioPin);\r\nBL_Err_Type GLB_GPIO_IntMask(GLB_GPIO_Type gpioPin, BL_Mask_Type intMask);\r\nBL_Err_Type GLB_GPIO_IntClear(GLB_GPIO_Type gpioPin, BL_Sts_Type intClear);\r\nBL_Sts_Type GLB_Get_GPIO_IntStatus(GLB_GPIO_Type gpioPin);\r\nBL_Err_Type GLB_Set_GPIO_IntMod(GLB_GPIO_Type gpioPin, GLB_GPIO_INT_CONTROL_Type intCtlMod,\r\n                                GLB_GPIO_INT_TRIG_Type intTrgMod);\r\nGLB_GPIO_INT_CONTROL_Type GLB_Get_GPIO_IntCtlMod(GLB_GPIO_Type gpioPin);\r\nBL_Err_Type GLB_GPIO_Int2Mask(GLB_GPIO_Type gpioPin, BL_Mask_Type intMask);\r\nBL_Err_Type GLB_GPIO_Int2Clear(GLB_GPIO_Type gpioPin, BL_Sts_Type intClear);\r\nBL_Sts_Type GLB_Get_GPIO_Int2Status(GLB_GPIO_Type gpioPin);\r\nBL_Err_Type GLB_Set_GPIO_Int2Mod(GLB_GPIO_Type gpioPin, GLB_GPIO_INT_CONTROL_Type intCtlMod,\r\n                                 GLB_GPIO_INT_TRIG_Type intTrgMod);\r\nGLB_GPIO_INT_CONTROL_Type GLB_Get_GPIO_Int2CtlMod(GLB_GPIO_Type gpioPin);\r\nBL_Err_Type GLB_GPIO_INT0_IRQHandler_Install(void);\r\nBL_Err_Type GLB_GPIO_INT0_Callback_Install(GLB_GPIO_Type gpioPin, intCallback_Type *cbFun);\r\nBL_Err_Type GLB_GPIO_INT0_Callback_Install2(GLB_GPIO_Type gpioPin, intCallback_Type *cbFun);\r\n/*----------*/;\r\n\r\n/*@} end of group GLB_Public_Functions */\r\n\r\n/*@} end of group GLB */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_GLB_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_gpio.h",
    "content": "/**\n\n  ******************************************************************************\n\n  * @file    bl702_gpio.h\n\n  * @version V1.2\n\n  * @date    2020-09-04\n\n  * @brief   This file is the description of.IP register\n\n  ******************************************************************************\n\n  * @attention\n\n  *\n\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\n\n  *\n\n  * Redistribution and use in source and binary forms, with or without modification,\n\n  * are permitted provided that the following conditions are met:\n\n  *   1. Redistributions of source code must retain the above copyright notice,\n\n  *      this list of conditions and the following disclaimer.\n\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\n\n  *      this list of conditions and the following disclaimer in the documentation\n\n  *      and/or other materials provided with the distribution.\n\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n\n  *      may be used to endorse or promote products derived from this software\n\n  *      without specific prior written permission.\n\n  *\n\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n  *\n\n  ******************************************************************************\n\n  */\n\n#ifndef __BL702_GPIO_H__\n#define __BL702_GPIO_H__\n\ntypedef enum {\n  GLB_GPIO_PIN_0 = 0,\n  GLB_GPIO_PIN_1,\n  GLB_GPIO_PIN_2,\n  GLB_GPIO_PIN_3,\n  GLB_GPIO_PIN_4,\n  GLB_GPIO_PIN_5,\n  GLB_GPIO_PIN_6,\n  GLB_GPIO_PIN_7,\n  GLB_GPIO_PIN_8,\n  GLB_GPIO_PIN_9,\n  GLB_GPIO_PIN_10,\n  GLB_GPIO_PIN_11,\n  GLB_GPIO_PIN_12,\n  GLB_GPIO_PIN_13,\n  GLB_GPIO_PIN_14,\n  GLB_GPIO_PIN_15,\n  GLB_GPIO_PIN_16,\n  GLB_GPIO_PIN_17,\n  GLB_GPIO_PIN_18,\n  GLB_GPIO_PIN_19,\n  GLB_GPIO_PIN_20,\n  GLB_GPIO_PIN_21,\n  GLB_GPIO_PIN_22,\n  GLB_GPIO_PIN_23,\n  GLB_GPIO_PIN_24,\n  GLB_GPIO_PIN_25,\n  GLB_GPIO_PIN_26,\n  GLB_GPIO_PIN_27,\n  GLB_GPIO_PIN_28,\n  GLB_GPIO_PIN_29,\n  GLB_GPIO_PIN_30,\n  GLB_GPIO_PIN_31,\n  GLB_GPIO_PIN_MAX,\n} GLB_GPIO_Type;\n\n#define GPIO_MODE_INPUT  ((uint32_t)0x00000000U) /*!< Input Floating Mode                   */\n#define GPIO_MODE_OUTPUT ((uint32_t)0x00000001U) /*!< Output Push Pull Mode                 */\n#define GPIO_MODE_AF     ((uint32_t)0x00000002U) /*!< Alternate function                    */\n#define GPIO_MODE_ANALOG ((uint32_t)0x00000003U) /*!< Analog function                       */\n#define GPIO_PULL_UP     ((uint32_t)0x00000000U) /*!< GPIO pull up                          */\n#define GPIO_PULL_DOWN   ((uint32_t)0x00000001U) /*!< GPIO pull down                        */\n#define GPIO_PULL_NONE   ((uint32_t)0x00000002U) /*!< GPIO no pull up or down               */\n\ntypedef enum {\n  GPIO_FUN_CLK_OUT                = 0,\n  GPIO_FUN_BT_COEXIST             = 1,\n  GPIO_FUN_FLASH_PSRAM            = 2,\n  GPIO_FUN_QSPI                   = 2,\n  GPIO_FUN_I2S                    = 3,\n  GPIO_FUN_SPI                    = 4,\n  GPIO_FUN_I2C                    = 6,\n  GPIO_FUN_UART                   = 7,\n  GPIO_FUN_PWM                    = 8,\n  GPIO_FUN_CAM                    = 9,\n  GPIO_FUN_ANALOG                 = 10,\n  GPIO_FUN_GPIO                   = 11,\n  GPIO_FUN_RF_TEST                = 12,\n  GPIO_FUN_SCAN                   = 13,\n  GPIO_FUN_E21_JTAG               = 14,\n  GPIO_FUN_DEBUG                  = 15,\n  GPIO_FUN_EXTERNAL_PA            = 16,\n  GPIO_FUN_USB_TRANCEIVER         = 17,\n  GPIO_FUN_USB_CONTROLLER         = 18,\n  GPIO_FUN_ETHER_MAC              = 19,\n  GPIO_FUN_EMAC                   = 19,\n  GPIO_FUN_QDEC                   = 20,\n  GPIO_FUN_KEY_SCAN_IN            = 21,\n  GPIO_FUN_KEY_SCAN_ROW           = 21,\n  GPIO_FUN_KEY_SCAN_DRIVE         = 22,\n  GPIO_FUN_KEY_SCAN_COL           = 22,\n  GPIO_FUN_CAM_MISC               = 23,\n  GPIO_FUN_USB                    = 0xD0,\n  GPIO_FUN_DAC                    = 0xD1,\n  GPIO_FUN_ADC                    = 0xD2,\n  GPIO_FUN_QDEC_LED               = 0xD3,\n  GPIO_FUN_GPIO_OUTPUT_UP         = 0xE0,\n  GPIO_FUN_GPIO_OUTPUT_DOWN       = 0xE1,\n  GPIO_FUN_GPIO_OUTPUT_NONE       = 0xE2,\n  GPIO_FUN_GPIO_INPUT_UP          = 0xE3,\n  GPIO_FUN_GPIO_INPUT_DOWN        = 0xE4,\n  GPIO_FUN_GPIO_INPUT_NONE        = 0xE5,\n  GPIO_FUN_GPIO_EXTI_RISING_EDGE  = 0xE6,\n  GPIO_FUN_GPIO_EXTI_FALLING_EDGE = 0xE7,\n  GPIO_FUN_GPIO_EXTI_HIGH_LEVEL   = 0xE8,\n  GPIO_FUN_GPIO_EXTI_LOW_LEVEL    = 0xE9,\n  GPIO_FUN_UART0_RTS              = 0xF0,\n  GPIO_FUN_UART0_CTS              = 0xF1,\n  GPIO_FUN_UART0_TX               = 0xF2,\n  GPIO_FUN_UART0_RX               = 0xF3,\n  GPIO_FUN_UART1_RTS              = 0xF4,\n  GPIO_FUN_UART1_CTS              = 0xF5,\n  GPIO_FUN_UART1_TX               = 0xF6,\n  GPIO_FUN_UART1_RX               = 0xF7,\n  GPIO_FUN_WAKEUP                 = 0xFE,\n  GPIO_FUN_UNUSED                 = 0xFF\n} GLB_GPIO_FUNC_Type;\n\ntypedef struct {\n  uint8_t gpioPin;\n  uint8_t gpioFun;\n  uint8_t gpioMode;\n  uint8_t pullType;\n  uint8_t drive;\n  uint8_t smtCtrl; // Schmitt trigger\n} GLB_GPIO_Cfg_Type;\n\n/* GPIO0 function definition */\n#define GPIO0_FUN_CLK_OUT_0             0\n#define GPIO0_FUN_BT_ABORT              1\n#define GPIO0_FUN_UNUSED2               2\n#define GPIO0_FUN_I2S0_BCLK             3\n#define GPIO0_FUN_SPI_0_MOSI_SPI_0_MISO 4\n#define GPIO0_FUN_I2C0_SCL              6\n#define GPIO0_FUN_UART_SIG0_UART_SIG4   7\n#define GPIO0_FUN_PWM_CH0               8\n#define GPIO0_FUN_PIX_CLK               9\n#define GPIO0_FUN_UNUSED10              10\n#define GPIO0_FUN_REG_GPIO_0            11\n#define GPIO0_FUN_UNUSED12              12\n#define GPIO0_FUN_SCAN_IN_0             13\n#define GPIO0_FUN_E21_TMS_E21_TCK       14\n#define GPIO0_FUN_S_CCI_CLK             15\n#define GPIO0_FUN_FEM_GPIO_0            16\n#define GPIO0_FUN_USB_TX_DN_USB_RX_DN   17\n#define GPIO0_FUN_USB_SUS               18\n#define GPIO0_FUN_MII_REF_CLK           19\n#define GPIO0_FUN_QDEC0_A               20\n#define GPIO0_FUN_ROW_I_0               21\n#define GPIO0_FUN_COL_O_0               22\n#define GPIO0_FUN_CAM_PWRDN             23\n/* GPIO1 function definition */\n#define GPIO1_FUN_CLK_OUT_1             0\n#define GPIO1_FUN_BT_ACTIVE             1\n#define GPIO1_FUN_UNUSED2               2\n#define GPIO1_FUN_I2S0_FS               3\n#define GPIO1_FUN_SPI_0_MISO_SPI_0_MOSI 4\n#define GPIO1_FUN_I2C0_SDA              6\n#define GPIO1_FUN_UART_SIG1_UART_SIG5   7\n#define GPIO1_FUN_PWM_CH1               8\n#define GPIO1_FUN_FRAME_VLD             9\n#define GPIO1_FUN_UNUSED10              10\n#define GPIO1_FUN_REG_GPIO_1            11\n#define GPIO1_FUN_UNUSED12              12\n#define GPIO1_FUN_SCAN_IN_1             13\n#define GPIO1_FUN_E21_TDI_E21_TDO       14\n#define GPIO1_FUN_S_CCI_CS              15\n#define GPIO1_FUN_FEM_GPIO_1            16\n#define GPIO1_FUN_USB_TX_OE             17\n#define GPIO1_FUN_USB_ENUM              18\n#define GPIO1_FUN_MII_TXD_0             19\n#define GPIO1_FUN_QDEC0_B               20\n#define GPIO1_FUN_ROW_I_1               21\n#define GPIO1_FUN_COL_O_1               22\n#define GPIO1_FUN_CAM_REF_CLK           23\n/* GPIO2 function definition */\n#define GPIO2_FUN_CLK_OUT_0           0\n#define GPIO2_FUN_BT_PRI              1\n#define GPIO2_FUN_UNUSED2             2\n#define GPIO2_FUN_I2S0_DIO_I2S0_DO    3\n#define GPIO2_FUN_SPI_0_SS            4\n#define GPIO2_FUN_I2C0_SCL            6\n#define GPIO2_FUN_UART_SIG2_UART_SIG6 7\n#define GPIO2_FUN_PWM_CH2             8\n#define GPIO2_FUN_LINE_VLD            9\n#define GPIO2_FUN_UNUSED10            10\n#define GPIO2_FUN_REG_GPIO_2          11\n#define GPIO2_FUN_UNUSED12            12\n#define GPIO2_FUN_SCAN_IN_2           13\n#define GPIO2_FUN_E21_TCK_E21_TMS     14\n#define GPIO2_FUN_S_CCI_DATA_0        15\n#define GPIO2_FUN_FEM_GPIO_2          16\n#define GPIO2_FUN_USB_TX_DP_USB_RX_DP 17\n#define GPIO2_FUN_USB_OEB             18\n#define GPIO2_FUN_MII_TXD_1           19\n#define GPIO2_FUN_QDEC0_LED           20\n#define GPIO2_FUN_ROW_I_2             21\n#define GPIO2_FUN_COL_O_2             22\n#define GPIO2_FUN_CAM_RESET           23\n/* GPIO3 function definition */\n#define GPIO3_FUN_CLK_OUT_1           0\n#define GPIO3_FUN_BT_ABORT            1\n#define GPIO3_FUN_UNUSED2             2\n#define GPIO3_FUN_I2S0_RCLK_O_I2S0_DI 3\n#define GPIO3_FUN_SPI_0_SCLK          4\n#define GPIO3_FUN_I2C0_SDA            6\n#define GPIO3_FUN_UART_SIG3_UART_SIG7 7\n#define GPIO3_FUN_PWM_CH3             8\n#define GPIO3_FUN_PIX_DAT0            9\n#define GPIO3_FUN_UNUSED10            10\n#define GPIO3_FUN_REG_GPIO_3          11\n#define GPIO3_FUN_RF_TEST_0           12\n#define GPIO3_FUN_UNUSED13            13\n#define GPIO3_FUN_E21_TDO_E21_TDI     14\n#define GPIO3_FUN_DEBUG_0             15\n#define GPIO3_FUN_FEM_GPIO_3          16\n#define GPIO3_FUN_USB_SUS_EXT         17\n#define GPIO3_FUN_VOP                 18\n#define GPIO3_FUN_UNUSED19            19\n#define GPIO3_FUN_QDEC1_A             20\n#define GPIO3_FUN_ROW_I_3             21\n#define GPIO3_FUN_COL_O_3             22\n#define GPIO3_FUN_CAM_PWRDN           23\n/* GPIO4 function definition */\n#define GPIO4_FUN_CLK_OUT_0             0\n#define GPIO4_FUN_BT_ACTIVE             1\n#define GPIO4_FUN_UNUSED2               2\n#define GPIO4_FUN_I2S0_BCLK             3\n#define GPIO4_FUN_SPI_0_MOSI_SPI_0_MISO 4\n#define GPIO4_FUN_I2C0_SCL              6\n#define GPIO4_FUN_UART_SIG4_UART_SIG0   7\n#define GPIO4_FUN_PWM_CH4               8\n#define GPIO4_FUN_PIX_DAT1              9\n#define GPIO4_FUN_UNUSED10              10\n#define GPIO4_FUN_REG_GPIO_4            11\n#define GPIO4_FUN_RF_TEST_1             12\n#define GPIO4_FUN_UNUSED13              13\n#define GPIO4_FUN_E21_TMS_E21_TCK       14\n#define GPIO4_FUN_DEBUG_1               15\n#define GPIO4_FUN_FEM_GPIO_4            16\n#define GPIO4_FUN_USB_ENUM_EXT          17\n#define GPIO4_FUN_VOM                   18\n#define GPIO4_FUN_UNUSED19              19\n#define GPIO4_FUN_QDEC1_B               20\n#define GPIO4_FUN_ROW_I_4               21\n#define GPIO4_FUN_COL_O_4               22\n#define GPIO4_FUN_CAM_REF_CLK           23\n/* GPIO5 function definition */\n#define GPIO5_FUN_CLK_OUT_1             0\n#define GPIO5_FUN_BT_PRI                1\n#define GPIO5_FUN_UNUSED2               2\n#define GPIO5_FUN_I2S0_FS               3\n#define GPIO5_FUN_SPI_0_MISO_SPI_0_MOSI 4\n#define GPIO5_FUN_I2C0_SDA              6\n#define GPIO5_FUN_UART_SIG5_UART_SIG1   7\n#define GPIO5_FUN_PWM_CH0               8\n#define GPIO5_FUN_PIX_DAT2              9\n#define GPIO5_FUN_UNUSED10              10\n#define GPIO5_FUN_REG_GPIO_5            11\n#define GPIO5_FUN_RF_TEST_2             12\n#define GPIO5_FUN_UNUSED13              13\n#define GPIO5_FUN_E21_TDI_E21_TDO       14\n#define GPIO5_FUN_DEBUG_2               15\n#define GPIO5_FUN_FEM_GPIO_0            16\n#define GPIO5_FUN_USB_TX_DN_USB_RX_DN   17\n#define GPIO5_FUN_BD                    18\n#define GPIO5_FUN_UNUSED19              19\n#define GPIO5_FUN_QDEC1_LED             20\n#define GPIO5_FUN_ROW_I_5               21\n#define GPIO5_FUN_COL_O_5               22\n#define GPIO5_FUN_CAM_RESET             23\n/* GPIO6 function definition */\n#define GPIO6_FUN_CLK_OUT_0           0\n#define GPIO6_FUN_BT_ABORT            1\n#define GPIO6_FUN_UNUSED2             2\n#define GPIO6_FUN_I2S0_DIO_I2S0_DO    3\n#define GPIO6_FUN_SPI_0_SS            4\n#define GPIO6_FUN_I2C0_SCL            6\n#define GPIO6_FUN_UART_SIG6_UART_SIG2 7\n#define GPIO6_FUN_PWM_CH1             8\n#define GPIO6_FUN_PIX_DAT3            9\n#define GPIO6_FUN_UNUSED10            10\n#define GPIO6_FUN_REG_GPIO_6          11\n#define GPIO6_FUN_RF_TEST_3           12\n#define GPIO6_FUN_UNUSED13            13\n#define GPIO6_FUN_E21_TCK_E21_TMS     14\n#define GPIO6_FUN_DEBUG_3             15\n#define GPIO6_FUN_FEM_GPIO_1          16\n#define GPIO6_FUN_USB_TX_OE           17\n#define GPIO6_FUN_VIP                 18\n#define GPIO6_FUN_UNUSED19            19\n#define GPIO6_FUN_QDEC2_A             20\n#define GPIO6_FUN_ROW_I_6             21\n#define GPIO6_FUN_COL_O_6             22\n#define GPIO6_FUN_CAM_PWRDN           23\n/* GPIO7 function definition */\n#define GPIO7_FUN_CLK_OUT_1                       0\n#define GPIO7_FUN_BT_ACTIVE                       1\n#define GPIO7_FUN_UNUSED2                         2\n#define GPIO7_FUN_I2S0_RCLK_O_I2S0_DI             3\n#define GPIO7_FUN_SPI_0_SCLK                      4\n#define GPIO7_FUN_I2C0_SDA                        6\n#define GPIO7_FUN_UART_SIG7_UART_SIG3             7\n#define GPIO7_FUN_PWM_CH2                         8\n#define GPIO7_FUN_UNUSED9                         9\n#define GPIO7_FUN_USB_DP_GPIP_CH_6_GPDAC_VREF_EXT 10\n#define GPIO7_FUN_REG_GPIO_7                      11\n#define GPIO7_FUN_UNUSED12                        12\n#define GPIO7_FUN_SCAN_RSTB                       13\n#define GPIO7_FUN_E21_TDO_E21_TDI                 14\n#define GPIO7_FUN_S_CCI_DATA_1                    15\n#define GPIO7_FUN_FEM_GPIO_2                      16\n#define GPIO7_FUN_USB_TX_DP_USB_RX_DP             17\n#define GPIO7_FUN_VIM                             18\n#define GPIO7_FUN_MII_RXD_0                       19\n#define GPIO7_FUN_QDEC2_B                         20\n#define GPIO7_FUN_ROW_I_7                         21\n#define GPIO7_FUN_COL_O_7                         22\n#define GPIO7_FUN_CAM_REF_CLK                     23\n/* GPIO8 function definition */\n#define GPIO8_FUN_CLK_OUT_0             0\n#define GPIO8_FUN_BT_PRI                1\n#define GPIO8_FUN_UNUSED2               2\n#define GPIO8_FUN_I2S0_BCLK             3\n#define GPIO8_FUN_SPI_0_MOSI_SPI_0_MISO 4\n#define GPIO8_FUN_I2C0_SCL              6\n#define GPIO8_FUN_UART_SIG0_UART_SIG4   7\n#define GPIO8_FUN_PWM_CH3               8\n#define GPIO8_FUN_UNUSED9               9\n#define GPIO8_FUN_USB_DM_GPIP_CH_0      10\n#define GPIO8_FUN_REG_GPIO_8            11\n#define GPIO8_FUN_RF_TEST_4             12\n#define GPIO8_FUN_SCAN_CLK              13\n#define GPIO8_FUN_E21_TMS_E21_TCK       14\n#define GPIO8_FUN_DEBUG_4               15\n#define GPIO8_FUN_FEM_GPIO_3            16\n#define GPIO8_FUN_USB_SUS_EXT           17\n#define GPIO8_FUN_RCV                   18\n#define GPIO8_FUN_MII_RXD_1             19\n#define GPIO8_FUN_QDEC2_LED             20\n#define GPIO8_FUN_ROW_I_0               21\n#define GPIO8_FUN_COL_O_8               22\n#define GPIO8_FUN_CAM_RESET             23\n/* GPIO9 function definition */\n#define GPIO9_FUN_CLK_OUT_1                         0\n#define GPIO9_FUN_BT_ABORT                          1\n#define GPIO9_FUN_UNUSED2                           2\n#define GPIO9_FUN_I2S0_FS                           3\n#define GPIO9_FUN_SPI_0_MISO_SPI_0_MOSI             4\n#define GPIO9_FUN_I2C0_SDA                          6\n#define GPIO9_FUN_UART_SIG1_UART_SIG5               7\n#define GPIO9_FUN_PWM_CH4                           8\n#define GPIO9_FUN_UNUSED9                           9\n#define GPIO9_FUN_PMIP_DC_TP_CLKPLL_DC_TP_GPIP_CH_7 10\n#define GPIO9_FUN_REG_GPIO_9                        11\n#define GPIO9_FUN_RF_TEST_5                         12\n#define GPIO9_FUN_SCAN_EN                           13\n#define GPIO9_FUN_E21_TDI_E21_TDO                   14\n#define GPIO9_FUN_DEBUG_5                           15\n#define GPIO9_FUN_FEM_GPIO_4                        16\n#define GPIO9_FUN_USB_ENUM_EXT                      17\n#define GPIO9_FUN_USB_SUS                           18\n#define GPIO9_FUN_UNUSED19                          19\n#define GPIO9_FUN_QDEC0_A                           20\n#define GPIO9_FUN_ROW_I_1                           21\n#define GPIO9_FUN_COL_O_9                           22\n#define GPIO9_FUN_CAM_PWRDN                         23\n/* GPIO10 function definition */\n#define GPIO10_FUN_CLK_OUT_0           0\n#define GPIO10_FUN_BT_ACTIVE           1\n#define GPIO10_FUN_UNUSED2             2\n#define GPIO10_FUN_I2S0_DIO_I2S0_DO    3\n#define GPIO10_FUN_SPI_0_SS            4\n#define GPIO10_FUN_I2C0_SCL            6\n#define GPIO10_FUN_UART_SIG2_UART_SIG6 7\n#define GPIO10_FUN_PWM_CH0             8\n#define GPIO10_FUN_UNUSED9             9\n#define GPIO10_FUN_MICBIAS             10\n#define GPIO10_FUN_REG_GPIO_10         11\n#define GPIO10_FUN_RF_TEST_6           12\n#define GPIO10_FUN_UNUSED13            13\n#define GPIO10_FUN_E21_TCK_E21_TMS     14\n#define GPIO10_FUN_DEBUG_6             15\n#define GPIO10_FUN_FEM_GPIO_0          16\n#define GPIO10_FUN_USB_TX_DN_USB_RX_DN 17\n#define GPIO10_FUN_USB_ENUM            18\n#define GPIO10_FUN_UNUSED19            19\n#define GPIO10_FUN_QDEC0_B             20\n#define GPIO10_FUN_ROW_I_2             21\n#define GPIO10_FUN_COL_O_10            22\n#define GPIO10_FUN_CAM_REF_CLK         23\n/* GPIO11 function definition */\n#define GPIO11_FUN_CLK_OUT_1           0\n#define GPIO11_FUN_BT_PRI              1\n#define GPIO11_FUN_UNUSED2             2\n#define GPIO11_FUN_I2S0_RCLK_O_I2S0_DI 3\n#define GPIO11_FUN_SPI_0_SCLK          4\n#define GPIO11_FUN_I2C0_SDA            6\n#define GPIO11_FUN_UART_SIG3_UART_SIG7 7\n#define GPIO11_FUN_PWM_CH1             8\n#define GPIO11_FUN_UNUSED9             9\n#define GPIO11_FUN_GPIP_CH_3           10\n#define GPIO11_FUN_REG_GPIO_11         11\n#define GPIO11_FUN_RF_TEST_7           12\n#define GPIO11_FUN_UNUSED13            13\n#define GPIO11_FUN_E21_TDO_E21_TDI     14\n#define GPIO11_FUN_DEBUG_7             15\n#define GPIO11_FUN_FEM_GPIO_1          16\n#define GPIO11_FUN_USB_TX_OE           17\n#define GPIO11_FUN_USB_OEB             18\n#define GPIO11_FUN_UNUSED19            19\n#define GPIO11_FUN_QDEC0_LED           20\n#define GPIO11_FUN_ROW_I_3             21\n#define GPIO11_FUN_COL_O_11            22\n#define GPIO11_FUN_CAM_RESET           23\n/* GPIO12 function definition */\n#define GPIO12_FUN_CLK_OUT_0             0\n#define GPIO12_FUN_BT_ABORT              1\n#define GPIO12_FUN_UNUSED2               2\n#define GPIO12_FUN_I2S0_BCLK             3\n#define GPIO12_FUN_SPI_0_MOSI_SPI_0_MISO 4\n#define GPIO12_FUN_I2C0_SCL              6\n#define GPIO12_FUN_UART_SIG4_UART_SIG0   7\n#define GPIO12_FUN_PWM_CH2               8\n#define GPIO12_FUN_PIX_DAT4              9\n#define GPIO12_FUN_GPIP_CH_4             10\n#define GPIO12_FUN_REG_GPIO_12           11\n#define GPIO12_FUN_RF_TEST_8             12\n#define GPIO12_FUN_UNUSED13              13\n#define GPIO12_FUN_E21_TMS_E21_TCK       14\n#define GPIO12_FUN_DEBUG_8               15\n#define GPIO12_FUN_FEM_GPIO_2            16\n#define GPIO12_FUN_USB_TX_DP_USB_RX_DP   17\n#define GPIO12_FUN_VOP                   18\n#define GPIO12_FUN_UNUSED19              19\n#define GPIO12_FUN_QDEC1_A               20\n#define GPIO12_FUN_ROW_I_4               21\n#define GPIO12_FUN_COL_O_12              22\n#define GPIO12_FUN_CAM_PWRDN             23\n/* GPIO13 function definition */\n#define GPIO13_FUN_CLK_OUT_1             0\n#define GPIO13_FUN_BT_ACTIVE             1\n#define GPIO13_FUN_UNUSED2               2\n#define GPIO13_FUN_I2S0_FS               3\n#define GPIO13_FUN_SPI_0_MISO_SPI_0_MOSI 4\n#define GPIO13_FUN_I2C0_SDA              6\n#define GPIO13_FUN_UART_SIG5_UART_SIG1   7\n#define GPIO13_FUN_PWM_CH3               8\n#define GPIO13_FUN_UNUSED9               9\n#define GPIO13_FUN_UNUSED10              10\n#define GPIO13_FUN_REG_GPIO_13           11\n#define GPIO13_FUN_UNUSED12              12\n#define GPIO13_FUN_UNUSED13              13\n#define GPIO13_FUN_E21_TDI_E21_TDO       14\n#define GPIO13_FUN_DEBUG_9               15\n#define GPIO13_FUN_FEM_GPIO_3            16\n#define GPIO13_FUN_USB_SUS_EXT           17\n#define GPIO13_FUN_VOM                   18\n#define GPIO13_FUN_UNUSED19              19\n#define GPIO13_FUN_QDEC1_B               20\n#define GPIO13_FUN_ROW_I_5               21\n#define GPIO13_FUN_COL_O_13              22\n#define GPIO13_FUN_CAM_REF_CLK           23\n/* GPIO14 function definition */\n#define GPIO14_FUN_CLK_OUT_0             0\n#define GPIO14_FUN_BT_PRI                1\n#define GPIO14_FUN_UNUSED2               2\n#define GPIO14_FUN_I2S0_DIO_I2S0_DO      3\n#define GPIO14_FUN_SPI_0_SS              4\n#define GPIO14_FUN_I2C0_SCL              6\n#define GPIO14_FUN_UART_SIG6_UART_SIG2   7\n#define GPIO14_FUN_PWM_CH4               8\n#define GPIO14_FUN_UNUSED9               9\n#define GPIO14_FUN_GPIP_CH_5_ATEST_OUT_0 10\n#define GPIO14_FUN_REG_GPIO_14           11\n#define GPIO14_FUN_RF_TEST_9             12\n#define GPIO14_FUN_SCAN_OUT_0            13\n#define GPIO14_FUN_E21_TCK_E21_TMS       14\n#define GPIO14_FUN_DEBUG_10              15\n#define GPIO14_FUN_FEM_GPIO_4            16\n#define GPIO14_FUN_USB_ENUM_EXT          17\n#define GPIO14_FUN_BD                    18\n#define GPIO14_FUN_UNUSED19              19\n#define GPIO14_FUN_QDEC1_LED             20\n#define GPIO14_FUN_ROW_I_6               21\n#define GPIO14_FUN_COL_O_14              22\n#define GPIO14_FUN_CAM_RESET             23\n/* GPIO15 function definition */\n#define GPIO15_FUN_CLK_OUT_1             0\n#define GPIO15_FUN_BT_ABORT              1\n#define GPIO15_FUN_UNUSED2               2\n#define GPIO15_FUN_I2S0_RCLK_O_I2S0_DI   3\n#define GPIO15_FUN_SPI_0_SCLK            4\n#define GPIO15_FUN_I2C0_SDA              6\n#define GPIO15_FUN_UART_SIG7_UART_SIG3   7\n#define GPIO15_FUN_PWM_CH0               8\n#define GPIO15_FUN_UNUSED9               9\n#define GPIO15_FUN_GPIP_CH_1_ATEST_OUT_1 10\n#define GPIO15_FUN_REG_GPIO_15           11\n#define GPIO15_FUN_RF_TEST_10            12\n#define GPIO15_FUN_SCAN_OUT_1            13\n#define GPIO15_FUN_E21_TDO_E21_TDI       14\n#define GPIO15_FUN_DEBUG_11              15\n#define GPIO15_FUN_FEM_GPIO_0            16\n#define GPIO15_FUN_USB_TX_DN_USB_RX_DN   17\n#define GPIO15_FUN_VIP                   18\n#define GPIO15_FUN_UNUSED19              19\n#define GPIO15_FUN_QDEC2_A               20\n#define GPIO15_FUN_ROW_I_7               21\n#define GPIO15_FUN_COL_O_15              22\n#define GPIO15_FUN_CAM_PWRDN             23\n/* GPIO16 function definition */\n#define GPIO16_FUN_CLK_OUT_0             0\n#define GPIO16_FUN_BT_ACTIVE             1\n#define GPIO16_FUN_UNUSED2               2\n#define GPIO16_FUN_I2S0_BCLK             3\n#define GPIO16_FUN_SPI_0_MOSI_SPI_0_MISO 4\n#define GPIO16_FUN_I2C0_SCL              6\n#define GPIO16_FUN_UART_SIG0_UART_SIG4   7\n#define GPIO16_FUN_PWM_CH1               8\n#define GPIO16_FUN_UNUSED9               9\n#define GPIO16_FUN_UNUSED10              10\n#define GPIO16_FUN_REG_GPIO_16           11\n#define GPIO16_FUN_RF_TEST_11            12\n#define GPIO16_FUN_UNUSED13              13\n#define GPIO16_FUN_E21_TMS_E21_TCK       14\n#define GPIO16_FUN_DEBUG_12              15\n#define GPIO16_FUN_FEM_GPIO_1            16\n#define GPIO16_FUN_USB_TX_OE             17\n#define GPIO16_FUN_VIM                   18\n#define GPIO16_FUN_UNUSED19              19\n#define GPIO16_FUN_QDEC2_B               20\n#define GPIO16_FUN_ROW_I_0               21\n#define GPIO16_FUN_COL_O_16              22\n#define GPIO16_FUN_CAM_REF_CLK           23\n/* GPIO17 function definition */\n#define GPIO17_FUN_CLK_OUT_1             0\n#define GPIO17_FUN_BT_PRI                1\n#define GPIO17_FUN_SF_IO_0_SF2_CS2       2\n#define GPIO17_FUN_I2S0_FS               3\n#define GPIO17_FUN_SPI_0_MISO_SPI_0_MOSI 4\n#define GPIO17_FUN_I2C0_SDA              6\n#define GPIO17_FUN_UART_SIG1_UART_SIG5   7\n#define GPIO17_FUN_PWM_CH2               8\n#define GPIO17_FUN_PIX_DAT4              9\n#define GPIO17_FUN_GPIP_CH_2_PSW_IRRCV   10\n#define GPIO17_FUN_REG_GPIO_17           11\n#define GPIO17_FUN_RF_TEST_12            12\n#define GPIO17_FUN_SCAN_OUT_2            13\n#define GPIO17_FUN_E21_TDI_E21_TDO       14\n#define GPIO17_FUN_DEBUG_13              15\n#define GPIO17_FUN_FEM_GPIO_2            16\n#define GPIO17_FUN_USB_TX_DP_USB_RX_DP   17\n#define GPIO17_FUN_RCV                   18\n#define GPIO17_FUN_UNUSED19              19\n#define GPIO17_FUN_QDEC2_LED             20\n#define GPIO17_FUN_ROW_I_1               21\n#define GPIO17_FUN_COL_O_17              22\n#define GPIO17_FUN_CAM_RESET             23\n/* GPIO18 function definition */\n#define GPIO18_FUN_CLK_OUT_0           0\n#define GPIO18_FUN_BT_ABORT            1\n#define GPIO18_FUN_SF_IO_1             2\n#define GPIO18_FUN_I2S0_DIO_I2S0_DO    3\n#define GPIO18_FUN_SPI_0_SS            4\n#define GPIO18_FUN_I2C0_SCL            6\n#define GPIO18_FUN_UART_SIG2_UART_SIG6 7\n#define GPIO18_FUN_PWM_CH3             8\n#define GPIO18_FUN_PIX_DAT5            9\n#define GPIO18_FUN_GPIP_CH_8           10\n#define GPIO18_FUN_REG_GPIO_18         11\n#define GPIO18_FUN_RF_TEST_13          12\n#define GPIO18_FUN_UNUSED13            13\n#define GPIO18_FUN_E21_TCK_E21_TMS     14\n#define GPIO18_FUN_M_CCI_CLK_DEBUG_14  15\n#define GPIO18_FUN_FEM_GPIO_3          16\n#define GPIO18_FUN_USB_SUS_EXT         17\n#define GPIO18_FUN_USB_SUS             18\n#define GPIO18_FUN_RMII_MDC            19\n#define GPIO18_FUN_QDEC0_A             20\n#define GPIO18_FUN_ROW_I_2             21\n#define GPIO18_FUN_COL_O_18            22\n#define GPIO18_FUN_CAM_PWRDN           23\n/* GPIO19 function definition */\n#define GPIO19_FUN_CLK_OUT_1           0\n#define GPIO19_FUN_BT_ACTIVE           1\n#define GPIO19_FUN_SF_CS               2\n#define GPIO19_FUN_I2S0_RCLK_O_I2S0_DI 3\n#define GPIO19_FUN_SPI_0_SCLK          4\n#define GPIO19_FUN_I2C0_SDA            6\n#define GPIO19_FUN_UART_SIG3_UART_SIG7 7\n#define GPIO19_FUN_PWM_CH4             8\n#define GPIO19_FUN_PIX_DAT6            9\n#define GPIO19_FUN_GPIP_CH_9           10\n#define GPIO19_FUN_REG_GPIO_19         11\n#define GPIO19_FUN_RF_TEST_14          12\n#define GPIO19_FUN_UNUSED13            13\n#define GPIO19_FUN_E21_TDO_E21_TDI     14\n#define GPIO19_FUN_M_CCI_CS_DEBUG_15   15\n#define GPIO19_FUN_FEM_GPIO_4          16\n#define GPIO19_FUN_USB_ENUM_EXT        17\n#define GPIO19_FUN_USB_ENUM            18\n#define GPIO19_FUN_RMII_MDIO           19\n#define GPIO19_FUN_QDEC0_B             20\n#define GPIO19_FUN_ROW_I_3             21\n#define GPIO19_FUN_COL_O_19            22\n#define GPIO19_FUN_CAM_REF_CLK         23\n/* GPIO20 function definition */\n#define GPIO20_FUN_CLK_OUT_0             0\n#define GPIO20_FUN_BT_PRI                1\n#define GPIO20_FUN_SF_IO_3               2\n#define GPIO20_FUN_I2S0_BCLK             3\n#define GPIO20_FUN_SPI_0_MOSI_SPI_0_MISO 4\n#define GPIO20_FUN_I2C0_SCL              6\n#define GPIO20_FUN_UART_SIG4_UART_SIG0   7\n#define GPIO20_FUN_PWM_CH0               8\n#define GPIO20_FUN_PIX_DAT7              9\n#define GPIO20_FUN_GPIP_CH_10            10\n#define GPIO20_FUN_REG_GPIO_20           11\n#define GPIO20_FUN_RF_TEST_15            12\n#define GPIO20_FUN_UNUSED13              13\n#define GPIO20_FUN_E21_TMS_E21_TCK       14\n#define GPIO20_FUN_M_CCI_DI_DEBUG_16     15\n#define GPIO20_FUN_FEM_GPIO_0            16\n#define GPIO20_FUN_USB_TX_DN_USB_RX_DN   17\n#define GPIO20_FUN_USB_OEB               18\n#define GPIO20_FUN_RMII_RXERR            19\n#define GPIO20_FUN_QDEC0_LED             20\n#define GPIO20_FUN_ROW_I_4               21\n#define GPIO20_FUN_COL_O_0               22\n#define GPIO20_FUN_CAM_RESET             23\n/* GPIO21 function definition */\n#define GPIO21_FUN_CLK_OUT_1             0\n#define GPIO21_FUN_BT_ABORT              1\n#define GPIO21_FUN_SF_CLK                2\n#define GPIO21_FUN_I2S0_FS               3\n#define GPIO21_FUN_SPI_0_MISO_SPI_0_MOSI 4\n#define GPIO21_FUN_I2C0_SDA              6\n#define GPIO21_FUN_UART_SIG5_UART_SIG1   7\n#define GPIO21_FUN_PWM_CH1               8\n#define GPIO21_FUN_UNUSED9               9\n#define GPIO21_FUN_GPIP_CH_11            10\n#define GPIO21_FUN_REG_GPIO_21           11\n#define GPIO21_FUN_RF_TEST_16            12\n#define GPIO21_FUN_UNUSED13              13\n#define GPIO21_FUN_E21_TDI_E21_TDO       14\n#define GPIO21_FUN_M_CCI_DO_DEBUG_17     15\n#define GPIO21_FUN_FEM_GPIO_1            16\n#define GPIO21_FUN_USB_TX_OE             17\n#define GPIO21_FUN_VOP                   18\n#define GPIO21_FUN_RMII_TX_EN            19\n#define GPIO21_FUN_QDEC1_A               20\n#define GPIO21_FUN_ROW_I_5               21\n#define GPIO21_FUN_COL_O_1               22\n#define GPIO21_FUN_CAM_PWRDN             23\n/* GPIO22 function definition */\n#define GPIO22_FUN_CLK_OUT_0           0\n#define GPIO22_FUN_BT_ACTIVE           1\n#define GPIO22_FUN_SF_IO_2             2\n#define GPIO22_FUN_I2S0_DIO_I2S0_DO    3\n#define GPIO22_FUN_SPI_0_SS            4\n#define GPIO22_FUN_I2C0_SCL            6\n#define GPIO22_FUN_UART_SIG6_UART_SIG2 7\n#define GPIO22_FUN_PWM_CH2             8\n#define GPIO22_FUN_UNUSED9             9\n#define GPIO22_FUN_LEDDRV_0            10\n#define GPIO22_FUN_REG_GPIO_22         11\n#define GPIO22_FUN_RF_TEST_17          12\n#define GPIO22_FUN_UNUSED13            13\n#define GPIO22_FUN_E21_TCK_E21_TMS     14\n#define GPIO22_FUN_DEBUG_18            15\n#define GPIO22_FUN_FEM_GPIO_2          16\n#define GPIO22_FUN_USB_TX_DP_USB_RX_DP 17\n#define GPIO22_FUN_VOM                 18\n#define GPIO22_FUN_RMII_RX_DV          19\n#define GPIO22_FUN_QDEC1_B             20\n#define GPIO22_FUN_ROW_I_6             21\n#define GPIO22_FUN_COL_O_2             22\n#define GPIO22_FUN_CAM_REF_CLK         23\n/* GPIO23 function definition */\n#define GPIO23_FUN_CLK_OUT_1                 0\n#define GPIO23_FUN_BT_PRI                    1\n#define GPIO23_FUN_SF2_IO_2_SF3_CS2          2\n#define GPIO23_FUN_I2S0_RCLK_O_I2S0_DI       3\n#define GPIO23_FUN_SPI_0_SCLK                4\n#define GPIO23_FUN_I2C0_SDA                  6\n#define GPIO23_FUN_UART_SIG7_UART_SIG3       7\n#define GPIO23_FUN_PWM_CH3                   8\n#define GPIO23_FUN_PIX_DAT4                  9\n#define GPIO23_FUN_LEDDRV_1_FLASH_PULL_OUT_0 10\n#define GPIO23_FUN_REG_GPIO_23               11\n#define GPIO23_FUN_RF_TEST_18                12\n#define GPIO23_FUN_UNUSED13                  13\n#define GPIO23_FUN_E21_TDO_E21_TDI           14\n#define GPIO23_FUN_DEBUG_19                  15\n#define GPIO23_FUN_FEM_GPIO_3                16\n#define GPIO23_FUN_USB_SUS_EXT               17\n#define GPIO23_FUN_BD                        18\n#define GPIO23_FUN_UNUSED19                  19\n#define GPIO23_FUN_QDEC1_LED                 20\n#define GPIO23_FUN_ROW_I_7                   21\n#define GPIO23_FUN_COL_O_3                   22\n#define GPIO23_FUN_CAM_RESET                 23\n/* GPIO24 function definition */\n#define GPIO24_FUN_CLK_OUT_0             0\n#define GPIO24_FUN_BT_ABORT              1\n#define GPIO24_FUN_SF2_IO_1              2\n#define GPIO24_FUN_I2S0_BCLK             3\n#define GPIO24_FUN_SPI_0_MOSI_SPI_0_MISO 4\n#define GPIO24_FUN_I2C0_SCL              6\n#define GPIO24_FUN_UART_SIG0_UART_SIG4   7\n#define GPIO24_FUN_PWM_CH4               8\n#define GPIO24_FUN_PIX_DAT5              9\n#define GPIO24_FUN_FLASH_PULL_OUT_1      10\n#define GPIO24_FUN_REG_GPIO_24           11\n#define GPIO24_FUN_RF_TEST_19            12\n#define GPIO24_FUN_UNUSED13              13\n#define GPIO24_FUN_E21_TMS_E21_TCK       14\n#define GPIO24_FUN_DEBUG_20              15\n#define GPIO24_FUN_FEM_GPIO_4            16\n#define GPIO24_FUN_USB_ENUM_EXT          17\n#define GPIO24_FUN_VIP                   18\n#define GPIO24_FUN_RMII_MDC              19\n#define GPIO24_FUN_QDEC2_A               20\n#define GPIO24_FUN_ROW_I_0               21\n#define GPIO24_FUN_COL_O_4               22\n#define GPIO24_FUN_CAM_PWRDN             23\n/* GPIO25 function definition */\n#define GPIO25_FUN_CLK_OUT_1             0\n#define GPIO25_FUN_BT_ACTIVE             1\n#define GPIO25_FUN_SF2_CS                2\n#define GPIO25_FUN_I2S0_FS               3\n#define GPIO25_FUN_SPI_0_MISO_SPI_0_MOSI 4\n#define GPIO25_FUN_I2C0_SDA              6\n#define GPIO25_FUN_UART_SIG1_UART_SIG5   7\n#define GPIO25_FUN_PWM_CH0               8\n#define GPIO25_FUN_PIX_DAT6              9\n#define GPIO25_FUN_FLASH_PULL_OUT_2      10\n#define GPIO25_FUN_REG_GPIO_25           11\n#define GPIO25_FUN_RF_TEST_20            12\n#define GPIO25_FUN_UNUSED13              13\n#define GPIO25_FUN_E21_TDI_E21_TDO       14\n#define GPIO25_FUN_DEBUG_21              15\n#define GPIO25_FUN_FEM_GPIO_0            16\n#define GPIO25_FUN_USB_TX_DN_USB_RX_DN   17\n#define GPIO25_FUN_VIM                   18\n#define GPIO25_FUN_RMII_MDIO             19\n#define GPIO25_FUN_QDEC2_B               20\n#define GPIO25_FUN_ROW_I_1               21\n#define GPIO25_FUN_COL_O_5               22\n#define GPIO25_FUN_CAM_REF_CLK           23\n/* GPIO26 function definition */\n#define GPIO26_FUN_CLK_OUT_0           0\n#define GPIO26_FUN_BT_PRI              1\n#define GPIO26_FUN_SF2_IO_3            2\n#define GPIO26_FUN_I2S0_DIO_I2S0_DO    3\n#define GPIO26_FUN_SPI_0_SS            4\n#define GPIO26_FUN_I2C0_SCL            6\n#define GPIO26_FUN_UART_SIG2_UART_SIG6 7\n#define GPIO26_FUN_PWM_CH1             8\n#define GPIO26_FUN_PIX_DAT7            9\n#define GPIO26_FUN_FLASH_PULL_OUT_3    10\n#define GPIO26_FUN_REG_GPIO_26         11\n#define GPIO26_FUN_RF_TEST_21          12\n#define GPIO26_FUN_UNUSED13            13\n#define GPIO26_FUN_E21_TCK_E21_TMS     14\n#define GPIO26_FUN_DEBUG_22            15\n#define GPIO26_FUN_FEM_GPIO_1          16\n#define GPIO26_FUN_USB_TX_OE           17\n#define GPIO26_FUN_RCV                 18\n#define GPIO26_FUN_RMII_RXERR          19\n#define GPIO26_FUN_QDEC2_LED           20\n#define GPIO26_FUN_ROW_I_2             21\n#define GPIO26_FUN_COL_O_6             22\n#define GPIO26_FUN_CAM_RESET           23\n/* GPIO27 function definition */\n#define GPIO27_FUN_CLK_OUT_1           0\n#define GPIO27_FUN_BT_ABORT            1\n#define GPIO27_FUN_SF2_CLK             2\n#define GPIO27_FUN_I2S0_RCLK_O_I2S0_DI 3\n#define GPIO27_FUN_SPI_0_SCLK          4\n#define GPIO27_FUN_I2C0_SDA            6\n#define GPIO27_FUN_UART_SIG3_UART_SIG7 7\n#define GPIO27_FUN_PWM_CH2             8\n#define GPIO27_FUN_UNUSED9             9\n#define GPIO27_FUN_FLASH_PULL_OUT_4    10\n#define GPIO27_FUN_REG_GPIO_27         11\n#define GPIO27_FUN_RF_TEST_22          12\n#define GPIO27_FUN_UNUSED13            13\n#define GPIO27_FUN_E21_TDO_E21_TDI     14\n#define GPIO27_FUN_DEBUG_23            15\n#define GPIO27_FUN_FEM_GPIO_2          16\n#define GPIO27_FUN_USB_TX_DP_USB_RX_DP 17\n#define GPIO27_FUN_USB_SUS             18\n#define GPIO27_FUN_RMII_TX_EN          19\n#define GPIO27_FUN_QDEC0_A             20\n#define GPIO27_FUN_ROW_I_3             21\n#define GPIO27_FUN_COL_O_7             22\n#define GPIO27_FUN_CAM_PWRDN           23\n/* GPIO28 function definition */\n#define GPIO28_FUN_CLK_OUT_0             0\n#define GPIO28_FUN_BT_ACTIVE             1\n#define GPIO28_FUN_SF2_IO_0              2\n#define GPIO28_FUN_I2S0_BCLK             3\n#define GPIO28_FUN_SPI_0_MOSI_SPI_0_MISO 4\n#define GPIO28_FUN_I2C0_SCL              6\n#define GPIO28_FUN_UART_SIG4_UART_SIG0   7\n#define GPIO28_FUN_PWM_CH3               8\n#define GPIO28_FUN_PIX_DAT4              9\n#define GPIO28_FUN_FLASH_PULL_OUT_5      10\n#define GPIO28_FUN_REG_GPIO_28           11\n#define GPIO28_FUN_RF_TEST_23            12\n#define GPIO28_FUN_UNUSED13              13\n#define GPIO28_FUN_E21_TMS_E21_TCK       14\n#define GPIO28_FUN_DEBUG_24              15\n#define GPIO28_FUN_FEM_GPIO_3            16\n#define GPIO28_FUN_USB_SUS_EXT           17\n#define GPIO28_FUN_USB_ENUM              18\n#define GPIO28_FUN_RMII_RX_DV            19\n#define GPIO28_FUN_QDEC0_B               20\n#define GPIO28_FUN_ROW_I_4               21\n#define GPIO28_FUN_COL_O_8               22\n#define GPIO28_FUN_CAM_REF_CLK           23\n/* GPIO29 function definition */\n#define GPIO29_FUN_CLK_OUT_1             0\n#define GPIO29_FUN_BT_PRI                1\n#define GPIO29_FUN_UNUSED2               2\n#define GPIO29_FUN_I2S0_FS               3\n#define GPIO29_FUN_SPI_0_MISO_SPI_0_MOSI 4\n#define GPIO29_FUN_I2C0_SDA              6\n#define GPIO29_FUN_UART_SIG5_UART_SIG1   7\n#define GPIO29_FUN_PWM_CH4               8\n#define GPIO29_FUN_PIX_DAT5              9\n#define GPIO29_FUN_UNUSED10              10\n#define GPIO29_FUN_REG_GPIO_29           11\n#define GPIO29_FUN_RF_TEST_24            12\n#define GPIO29_FUN_UNUSED13              13\n#define GPIO29_FUN_E21_TDI_E21_TDO       14\n#define GPIO29_FUN_DEBUG_25              15\n#define GPIO29_FUN_FEM_GPIO_4            16\n#define GPIO29_FUN_USB_ENUM_EXT          17\n#define GPIO29_FUN_USB_OEB               18\n#define GPIO29_FUN_UNUSED19              19\n#define GPIO29_FUN_QDEC0_LED             20\n#define GPIO29_FUN_ROW_I_5               21\n#define GPIO29_FUN_COL_O_9               22\n#define GPIO29_FUN_CAM_RESET             23\n/* GPIO30 function definition */\n#define GPIO30_FUN_CLK_OUT_0           0\n#define GPIO30_FUN_BT_ABORT            1\n#define GPIO30_FUN_UNUSED2             2\n#define GPIO30_FUN_I2S0_DIO_I2S0_DO    3\n#define GPIO30_FUN_SPI_0_SS            4\n#define GPIO30_FUN_I2C0_SCL            6\n#define GPIO30_FUN_UART_SIG6_UART_SIG2 7\n#define GPIO30_FUN_PWM_CH0             8\n#define GPIO30_FUN_PIX_DAT6            9\n#define GPIO30_FUN_UNUSED10            10\n#define GPIO30_FUN_REG_GPIO_30         11\n#define GPIO30_FUN_RF_TEST_25          12\n#define GPIO30_FUN_UNUSED13            13\n#define GPIO30_FUN_E21_TCK_E21_TMS     14\n#define GPIO30_FUN_DEBUG_26            15\n#define GPIO30_FUN_FEM_GPIO_0          16\n#define GPIO30_FUN_USB_TX_DN_USB_RX_DN 17\n#define GPIO30_FUN_VOP                 18\n#define GPIO30_FUN_UNUSED19            19\n#define GPIO30_FUN_QDEC1_A             20\n#define GPIO30_FUN_ROW_I_6             21\n#define GPIO30_FUN_COL_O_10            22\n#define GPIO30_FUN_CAM_PWRDN           23\n/* GPIO31 function definition */\n#define GPIO31_FUN_CLK_OUT_1           0\n#define GPIO31_FUN_BT_ACTIVE           1\n#define GPIO31_FUN_UNUSED2             2\n#define GPIO31_FUN_I2S0_RCLK_O_I2S0_DI 3\n#define GPIO31_FUN_SPI_0_SCLK          4\n#define GPIO31_FUN_I2C0_SDA            6\n#define GPIO31_FUN_UART_SIG7_UART_SIG3 7\n#define GPIO31_FUN_PWM_CH1             8\n#define GPIO31_FUN_PIX_DAT7            9\n#define GPIO31_FUN_UNUSED10            10\n#define GPIO31_FUN_REG_GPIO_31         11\n#define GPIO31_FUN_RF_TEST_26          12\n#define GPIO31_FUN_UNUSED13            13\n#define GPIO31_FUN_E21_TDO_E21_TDI     14\n#define GPIO31_FUN_DEBUG_27            15\n#define GPIO31_FUN_FEM_GPIO_1          16\n#define GPIO31_FUN_USB_TX_OE           17\n#define GPIO31_FUN_VOM                 18\n#define GPIO31_FUN_UNUSED19            19\n#define GPIO31_FUN_QDEC1_B             20\n#define GPIO31_FUN_ROW_I_7             21\n#define GPIO31_FUN_COL_O_11            22\n#define GPIO31_FUN_CAM_REF_CLK         23\n\n#endif /*__BL702_GPIO_H__ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_hbn.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_hbn.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_HBN_H__\r\n#define __BL702_HBN_H__\r\n\r\n#include \"hbn_reg.h\"\r\n#include \"bl702_aon.h\"\r\n#include \"bl702_sflash.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  HBN\r\n *  @{\r\n */\r\n\r\n/** @defgroup  HBN_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief HBN PIR interrupt configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type lowIntEn;  /*!< Low will trigger interrupt */\r\n    BL_Fun_Type highIntEn; /*!< High will trigger interrupt */\r\n} HBN_PIR_INT_CFG_Type;\r\n\r\n/**\r\n *  @brief HBN PIR low pass filter type definition\r\n */\r\ntypedef enum {\r\n    HBN_PIR_LPF_DIV1, /*!< HBN PIR lpf div 1 */\r\n    HBN_PIR_LPF_DIV2, /*!< HBN PIR lpf div 2 */\r\n} HBN_PIR_LPF_Type;\r\n\r\n/**\r\n *  @brief HBN PIR high pass filter type definition\r\n */\r\ntypedef enum {\r\n    HBN_PIR_HPF_METHOD0, /*!< HBN PIR hpf calc method 0, 1-z^-1 */\r\n    HBN_PIR_HPF_METHOD1, /*!< HBN PIR hpf calc method 1, 1-z^-2 */\r\n    HBN_PIR_HPF_METHOD2, /*!< HBN PIR hpf calc method 2, 1-z^-3 */\r\n} HBN_PIR_HPF_Type;\r\n\r\n/**\r\n *  @brief HBN BOR threshold type definition\r\n */\r\ntypedef enum {\r\n    HBN_BOR_THRES_2P0V, /*!< BOR threshold 2.0V */\r\n    HBN_BOR_THRES_2P4V, /*!< BOR threshold 2.4V */\r\n} HBN_BOR_THRES_Type;\r\n\r\n/**\r\n *  @brief HBN BOR mode type definition\r\n */\r\ntypedef enum {\r\n    HBN_BOR_MODE_POR_INDEPENDENT, /*!< POR is independent of BOR */\r\n    HBN_BOR_MODE_POR_RELEVANT,    /*!< POR is relevant to BOR */\r\n} HBN_BOR_MODE_Type;\r\n\r\n/**\r\n *  @brief HBN 32K clock type definition\r\n */\r\ntypedef enum {\r\n    HBN_32K_RC = 0,  /*!< HBN use rc 32k */\r\n    HBN_32K_XTAL,    /*!< HBN use xtal 32k */\r\n    HBN_32K_DIG = 3, /*!< HBN use dig 32k */\r\n} HBN_32K_CLK_Type;\r\n\r\n/**\r\n *  @brief HBN xclk clock type definition\r\n */\r\ntypedef enum {\r\n    HBN_XCLK_CLK_RC32M, /*!< use RC32M as xclk clock */\r\n    HBN_XCLK_CLK_XTAL,  /*!< use XTAL as xclk clock */\r\n} HBN_XCLK_CLK_Type;\r\n\r\n/**\r\n *  @brief HBN root clock type definition\r\n */\r\ntypedef enum {\r\n    HBN_ROOT_CLK_RC32M, /*!< use RC32M as root clock */\r\n    HBN_ROOT_CLK_XTAL,  /*!< use XTAL as root clock */\r\n    HBN_ROOT_CLK_DLL,   /*!< use DLL as root clock */\r\n} HBN_ROOT_CLK_Type;\r\n\r\n/**\r\n *  @brief HBN UART clock type definition\r\n */\r\ntypedef enum {\r\n    HBN_UART_CLK_FCLK = 0, /*!< Select FCLK as UART clock */\r\n    HBN_UART_CLK_96M,      /*!< Select 96M as UART clock */\r\n} HBN_UART_CLK_Type;\r\n\r\n/**\r\n *  @brief HBN RTC interrupt delay type definition\r\n */\r\ntypedef enum {\r\n    HBN_RTC_INT_DELAY_32T = 0, /*!< HBN RTC interrupt delay 32T */\r\n    HBN_RTC_INT_DELAY_0T = 1,  /*!< HBN RTC interrupt delay 0T */\r\n} HBN_RTC_INT_Delay_Type;\r\n\r\n/**\r\n *  @brief HBN interrupt type definition\r\n */\r\ntypedef enum {\r\n    HBN_INT_GPIO9 = 0,   /*!< HBN interrupt type: GPIO9 */\r\n    HBN_INT_GPIO10 = 1,  /*!< HBN interrupt type: GPIO10 */\r\n    HBN_INT_GPIO11 = 2,  /*!< HBN interrupt type: GPIO11 */\r\n    HBN_INT_GPIO12 = 3,  /*!< HBN interrupt type: GPIO12 */\r\n    HBN_INT_GPIO13 = 4,  /*!< HBN interrupt type: GPIO13 */\r\n    HBN_INT_RTC = 16,    /*!< HBN interrupt type: RTC */\r\n    HBN_INT_PIR,         /*!< HBN interrupt type: PIR */\r\n    HBN_INT_BOR,         /*!< HBN interrupt type: BOR */\r\n    HBN_INT_ACOMP0 = 20, /*!< HBN interrupt type: ACOMP0 */\r\n    HBN_INT_ACOMP1 = 22, /*!< HBN interrupt type: ACOMP1 */\r\n} HBN_INT_Type;\r\n\r\n/**\r\n *  @brief HBN acomp interrupt type definition\r\n */\r\ntypedef enum {\r\n    HBN_ACOMP_INT_EDGE_POSEDGE = 0, /*!< HBN acomp interrupt edge posedge */\r\n    HBN_ACOMP_INT_EDGE_NEGEDGE = 1, /*!< HBN acomp interrupt edge negedge */\r\n} HBN_ACOMP_INT_EDGE_Type;\r\n\r\n/**\r\n *  @brief HBN reset event type definition\r\n */\r\ntypedef enum {\r\n    HBN_RST_EVENT_POR_OUT,   /*!< por_out event */\r\n    HBN_RST_EVENT_EXT_RST_N, /*!< ext_rst_n event */\r\n    HBN_RST_EVENT_SW_RST,    /*!< sw_rst event */\r\n    HBN_RST_EVENT_PWR_RST_N, /*!< pwr_rst_n event */\r\n    HBN_RST_EVENT_BOR_OUT,   /*!< bor_out_ event */\r\n} HBN_RST_EVENT_Type;\r\n\r\n/**\r\n *  @brief HBN GPIO interrupt trigger type definition\r\n */\r\ntypedef enum {\r\n    HBN_GPIO_INT_TRIGGER_SYNC_FALLING_EDGE,  /*!< HBN GPIO INT trigger type: sync falling edge trigger */\r\n    HBN_GPIO_INT_TRIGGER_SYNC_RISING_EDGE,   /*!< HBN GPIO INT trigger type: sync rising edge trigger */\r\n    HBN_GPIO_INT_TRIGGER_SYNC_LOW_LEVEL,     /*!< HBN GPIO INT trigger type: sync low level trigger */\r\n    HBN_GPIO_INT_TRIGGER_SYNC_HIGH_LEVEL,    /*!< HBN GPIO INT trigger type: sync high level trigger */\r\n    HBN_GPIO_INT_TRIGGER_ASYNC_FALLING_EDGE, /*!< HBN GPIO INT trigger type: async falling edge trigger */\r\n    HBN_GPIO_INT_TRIGGER_ASYNC_RISING_EDGE,  /*!< HBN GPIO INT trigger type: async rising edge trigger */\r\n    HBN_GPIO_INT_TRIGGER_ASYNC_LOW_LEVEL,    /*!< HBN GPIO INT trigger type: async low level trigger */\r\n    HBN_GPIO_INT_TRIGGER_ASYNC_HIGH_LEVEL,   /*!< HBN GPIO INT trigger type: async high level trigger */\r\n} HBN_GPIO_INT_Trigger_Type;\r\n\r\n/**\r\n *  @brief HBN OUT0 interrupt type definition\r\n */\r\ntypedef enum {\r\n    HBN_OUT0_INT_GPIO9 = 0,  /*!< HBN out 0 interrupt type: GPIO9 */\r\n    HBN_OUT0_INT_GPIO10 = 1, /*!< HBN out 0 interrupt type: GPIO10 */\r\n    HBN_OUT0_INT_GPIO11 = 2, /*!< HBN out 0 interrupt type: GPIO11 */\r\n    HBN_OUT0_INT_GPIO12 = 3, /*!< HBN out 0 interrupt type: GPIO12 */\r\n    HBN_OUT0_INT_GPIO13 = 4, /*!< HBN out 0 interrupt type: GPIO13 */\r\n    HBN_OUT0_INT_RTC,        /*!< HBN out 0 interrupt type: RTC */\r\n    HBN_OUT0_MAX,            /*!< HBN out 0 max num */\r\n} HBN_OUT0_INT_Type;\r\n\r\n/**\r\n *  @brief HBN OUT0 interrupt type definition\r\n */\r\ntypedef enum {\r\n    HBN_OUT1_INT_PIR,    /*!< HBN out 1 interrupt type: PIR */\r\n    HBN_OUT1_INT_BOR,    /*!< HBN out 1 interrupt type: BOR */\r\n    HBN_OUT1_INT_ACOMP0, /*!< HBN out 1 interrupt type: ACOMP0 */\r\n    HBN_OUT1_INT_ACOMP1, /*!< HBN out 1 interrupt type: ACOMP1 */\r\n    HBN_OUT1_MAX,        /*!< HBN out 1 max num */\r\n} HBN_OUT1_INT_Type;\r\n\r\n/**\r\n *  @brief HBN LDO level type definition\r\n */\r\ntypedef enum {\r\n    HBN_LDO_LEVEL_0P60V = 0,  /*!< HBN LDO voltage 0.60V */\r\n    HBN_LDO_LEVEL_0P65V = 1,  /*!< HBN LDO voltage 0.65V */\r\n    HBN_LDO_LEVEL_0P70V = 2,  /*!< HBN LDO voltage 0.70V */\r\n    HBN_LDO_LEVEL_0P75V = 3,  /*!< HBN LDO voltage 0.75V */\r\n    HBN_LDO_LEVEL_0P80V = 4,  /*!< HBN LDO voltage 0.80V */\r\n    HBN_LDO_LEVEL_0P85V = 5,  /*!< HBN LDO voltage 0.85V */\r\n    HBN_LDO_LEVEL_0P90V = 6,  /*!< HBN LDO voltage 0.90V */\r\n    HBN_LDO_LEVEL_0P95V = 7,  /*!< HBN LDO voltage 0.95V */\r\n    HBN_LDO_LEVEL_1P00V = 8,  /*!< HBN LDO voltage 1.00V */\r\n    HBN_LDO_LEVEL_1P05V = 9,  /*!< HBN LDO voltage 1.05V */\r\n    HBN_LDO_LEVEL_1P10V = 10, /*!< HBN LDO voltage 1.10V */\r\n    HBN_LDO_LEVEL_1P15V = 11, /*!< HBN LDO voltage 1.15V */\r\n    HBN_LDO_LEVEL_1P20V = 12, /*!< HBN LDO voltage 1.20V */\r\n    HBN_LDO_LEVEL_1P25V = 13, /*!< HBN LDO voltage 1.25V */\r\n    HBN_LDO_LEVEL_1P30V = 14, /*!< HBN LDO voltage 1.30V */\r\n    HBN_LDO_LEVEL_1P35V = 15, /*!< HBN LDO voltage 1.35V */\r\n} HBN_LDO_LEVEL_Type;\r\n\r\n/**\r\n *  @brief HBN LDO11RT drive strength type definition\r\n */\r\ntypedef enum {\r\n    HBN_LDO11RT_DRIVE_STRENGTH_5_50UA = 0,   /*!< HBN LDO11RT drive strength 0: 5uA to 50uA */\r\n    HBN_LDO11RT_DRIVE_STRENGTH_10_100UA = 1, /*!< HBN LDO11RT drive strength 1: 10uA to 100uA */\r\n    HBN_LDO11RT_DRIVE_STRENGTH_15_150UA = 2, /*!< HBN LDO11RT drive strength 2: 15uA to 150uA */\r\n    HBN_LDO11RT_DRIVE_STRENGTH_25_250UA = 3, /*!< HBN LDO11RT drive strength 3: 25uA to 250uA */\r\n} HBN_LDO11RT_DRIVE_STRENGTH_Type;\r\n\r\n/**\r\n *  @brief HBN level type definition\r\n */\r\ntypedef enum {\r\n    HBN_LEVEL_0, /*!< HBN pd_core */\r\n    HBN_LEVEL_1, /*!< HBN pd_aon_hbncore + pd_core */\r\n    HBN_LEVEL_2, /*!< HBN pd_aon_hbncore + pd_core */\r\n    HBN_LEVEL_3, /*!< HBN pd_aon_hbnrtc + pd_aon_hbncore + pd_core */\r\n} HBN_LEVEL_Type;\r\n\r\n/**\r\n *  @brief HBN BOR configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint8_t enableBor;      /*!< Enable BOR or not */\r\n    uint8_t enableBorInt;   /*!< Enable BOR interrupt or not */\r\n    uint8_t borThreshold;   /*!< BOR threshold */\r\n    uint8_t enablePorInBor; /*!< Enable POR when BOR occure or not */\r\n} HBN_BOR_CFG_Type;\r\n\r\n/**\r\n *  @brief HBN APP configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint8_t useXtal32k;                     /*!< Whether use xtal 32K as 32K clock source,otherwise use rc32k */\r\n    uint32_t sleepTime;                     /*!< HBN sleep time */\r\n    uint8_t gpioWakeupSrc;                  /*!< GPIO Wakeup source */\r\n    HBN_GPIO_INT_Trigger_Type gpioTrigType; /*!< GPIO Triger type */\r\n    SPI_Flash_Cfg_Type *flashCfg;           /*!< Flash config pointer, used when power down flash */\r\n    uint8_t flashPinCfg;                    /*!< 0 ext flash 23-28, 1 internal flash 23-28, 2 internal flash 23-28, 3 ext flash 17-22 */\r\n    HBN_LEVEL_Type hbnLevel;                /*!< HBN level */\r\n    HBN_LDO_LEVEL_Type ldoLevel;            /*!< LDO level */\r\n} HBN_APP_CFG_Type;\r\n\r\n/*@} end of group HBN_Public_Types */\r\n\r\n/** @defgroup  HBN_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  HBN_PIR_LPF_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_PIR_LPF_TYPE(type) (((type) == HBN_PIR_LPF_DIV1) || \\\r\n                                   ((type) == HBN_PIR_LPF_DIV2))\r\n\r\n/** @defgroup  HBN_PIR_HPF_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_PIR_HPF_TYPE(type) (((type) == HBN_PIR_HPF_METHOD0) || \\\r\n                                   ((type) == HBN_PIR_HPF_METHOD1) || \\\r\n                                   ((type) == HBN_PIR_HPF_METHOD2))\r\n\r\n/** @defgroup  HBN_BOR_THRES_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_BOR_THRES_TYPE(type) (((type) == HBN_BOR_THRES_2P0V) || \\\r\n                                     ((type) == HBN_BOR_THRES_2P4V))\r\n\r\n/** @defgroup  HBN_BOR_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_BOR_MODE_TYPE(type) (((type) == HBN_BOR_MODE_POR_INDEPENDENT) || \\\r\n                                    ((type) == HBN_BOR_MODE_POR_RELEVANT))\r\n\r\n/** @defgroup  HBN_32K_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_32K_CLK_TYPE(type) (((type) == HBN_32K_RC) ||   \\\r\n                                   ((type) == HBN_32K_XTAL) || \\\r\n                                   ((type) == HBN_32K_DIG))\r\n\r\n/** @defgroup  HBN_XCLK_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_XCLK_CLK_TYPE(type) (((type) == HBN_XCLK_CLK_RC32M) || \\\r\n                                    ((type) == HBN_XCLK_CLK_XTAL))\r\n\r\n/** @defgroup  HBN_ROOT_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_ROOT_CLK_TYPE(type) (((type) == HBN_ROOT_CLK_RC32M) || \\\r\n                                    ((type) == HBN_ROOT_CLK_XTAL) ||  \\\r\n                                    ((type) == HBN_ROOT_CLK_DLL))\r\n\r\n/** @defgroup  HBN_UART_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_UART_CLK_TYPE(type) (((type) == HBN_UART_CLK_FCLK) || \\\r\n                                    ((type) == HBN_UART_CLK_96M))\r\n\r\n/** @defgroup  HBN_RTC_INT_DELAY_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_RTC_INT_DELAY_TYPE(type) (((type) == HBN_RTC_INT_DELAY_32T) || \\\r\n                                         ((type) == HBN_RTC_INT_DELAY_0T))\r\n\r\n/** @defgroup  HBN_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_INT_TYPE(type) (((type) == HBN_INT_GPIO9) ||  \\\r\n                               ((type) == HBN_INT_GPIO10) || \\\r\n                               ((type) == HBN_INT_GPIO11) || \\\r\n                               ((type) == HBN_INT_GPIO12) || \\\r\n                               ((type) == HBN_INT_GPIO13) || \\\r\n                               ((type) == HBN_INT_RTC) ||    \\\r\n                               ((type) == HBN_INT_PIR) ||    \\\r\n                               ((type) == HBN_INT_BOR) ||    \\\r\n                               ((type) == HBN_INT_ACOMP0) || \\\r\n                               ((type) == HBN_INT_ACOMP1))\r\n\r\n/** @defgroup  HBN_ACOMP_INT_EDGE_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_ACOMP_INT_EDGE_TYPE(type) (((type) == HBN_ACOMP_INT_EDGE_POSEDGE) || \\\r\n                                          ((type) == HBN_ACOMP_INT_EDGE_NEGEDGE))\r\n\r\n/** @defgroup  HBN_RST_EVENT_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_RST_EVENT_TYPE(type) (((type) == HBN_RST_EVENT_POR_OUT) ||   \\\r\n                                     ((type) == HBN_RST_EVENT_EXT_RST_N) || \\\r\n                                     ((type) == HBN_RST_EVENT_SW_RST) ||    \\\r\n                                     ((type) == HBN_RST_EVENT_PWR_RST_N) || \\\r\n                                     ((type) == HBN_RST_EVENT_BOR_OUT))\r\n\r\n/** @defgroup  HBN_GPIO_INT_TRIGGER_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_GPIO_INT_TRIGGER_TYPE(type) (((type) == HBN_GPIO_INT_TRIGGER_SYNC_FALLING_EDGE) ||  \\\r\n                                            ((type) == HBN_GPIO_INT_TRIGGER_SYNC_RISING_EDGE) ||   \\\r\n                                            ((type) == HBN_GPIO_INT_TRIGGER_SYNC_LOW_LEVEL) ||     \\\r\n                                            ((type) == HBN_GPIO_INT_TRIGGER_SYNC_HIGH_LEVEL) ||    \\\r\n                                            ((type) == HBN_GPIO_INT_TRIGGER_ASYNC_FALLING_EDGE) || \\\r\n                                            ((type) == HBN_GPIO_INT_TRIGGER_ASYNC_RISING_EDGE) ||  \\\r\n                                            ((type) == HBN_GPIO_INT_TRIGGER_ASYNC_LOW_LEVEL) ||    \\\r\n                                            ((type) == HBN_GPIO_INT_TRIGGER_ASYNC_HIGH_LEVEL))\r\n\r\n/** @defgroup  HBN_OUT0_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_OUT0_INT_TYPE(type) (((type) == HBN_OUT0_INT_GPIO9) ||  \\\r\n                                    ((type) == HBN_OUT0_INT_GPIO10) || \\\r\n                                    ((type) == HBN_OUT0_INT_GPIO11) || \\\r\n                                    ((type) == HBN_OUT0_INT_GPIO12) || \\\r\n                                    ((type) == HBN_OUT0_INT_GPIO13) || \\\r\n                                    ((type) == HBN_OUT0_INT_RTC) ||    \\\r\n                                    ((type) == HBN_OUT0_MAX))\r\n\r\n/** @defgroup  HBN_OUT1_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_OUT1_INT_TYPE(type) (((type) == HBN_OUT1_INT_PIR) ||    \\\r\n                                    ((type) == HBN_OUT1_INT_BOR) ||    \\\r\n                                    ((type) == HBN_OUT1_INT_ACOMP0) || \\\r\n                                    ((type) == HBN_OUT1_INT_ACOMP1) || \\\r\n                                    ((type) == HBN_OUT1_MAX))\r\n\r\n/** @defgroup  HBN_LDO_LEVEL_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_LDO_LEVEL_TYPE(type) (((type) == HBN_LDO_LEVEL_0P60V) || \\\r\n                                     ((type) == HBN_LDO_LEVEL_0P65V) || \\\r\n                                     ((type) == HBN_LDO_LEVEL_0P70V) || \\\r\n                                     ((type) == HBN_LDO_LEVEL_0P75V) || \\\r\n                                     ((type) == HBN_LDO_LEVEL_0P80V) || \\\r\n                                     ((type) == HBN_LDO_LEVEL_0P85V) || \\\r\n                                     ((type) == HBN_LDO_LEVEL_0P90V) || \\\r\n                                     ((type) == HBN_LDO_LEVEL_0P95V) || \\\r\n                                     ((type) == HBN_LDO_LEVEL_1P00V) || \\\r\n                                     ((type) == HBN_LDO_LEVEL_1P05V) || \\\r\n                                     ((type) == HBN_LDO_LEVEL_1P10V) || \\\r\n                                     ((type) == HBN_LDO_LEVEL_1P15V) || \\\r\n                                     ((type) == HBN_LDO_LEVEL_1P20V) || \\\r\n                                     ((type) == HBN_LDO_LEVEL_1P25V) || \\\r\n                                     ((type) == HBN_LDO_LEVEL_1P30V) || \\\r\n                                     ((type) == HBN_LDO_LEVEL_1P35V))\r\n\r\n/** @defgroup  HBN_LDO11RT_DRIVE_STRENGTH_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_LDO11RT_DRIVE_STRENGTH_TYPE(type) (((type) == HBN_LDO11RT_DRIVE_STRENGTH_5_50UA) ||   \\\r\n                                                  ((type) == HBN_LDO11RT_DRIVE_STRENGTH_10_100UA) || \\\r\n                                                  ((type) == HBN_LDO11RT_DRIVE_STRENGTH_15_150UA) || \\\r\n                                                  ((type) == HBN_LDO11RT_DRIVE_STRENGTH_25_250UA))\r\n\r\n/** @defgroup  HBN_LEVEL_TYPE\r\n *  @{\r\n */\r\n#define IS_HBN_LEVEL_TYPE(type) (((type) == HBN_LEVEL_0) || \\\r\n                                 ((type) == HBN_LEVEL_1) || \\\r\n                                 ((type) == HBN_LEVEL_2) || \\\r\n                                 ((type) == HBN_LEVEL_3))\r\n\r\n/*@} end of group HBN_Public_Constants */\r\n\r\n/** @defgroup  HBN_Public_Macros\r\n *  @{\r\n */\r\n#define HBN_RAM_SIZE           (4 * 1024)\r\n#define HBN_RTC_COMP_BIT0_39   0x01\r\n#define HBN_RTC_COMP_BIT0_23   0x02\r\n#define HBN_RTC_COMP_BIT13_39  0x04\r\n#define HBN_STATUS_ENTER_FLAG  0x4e424845\r\n#define HBN_STATUS_WAKEUP_FLAG 0x4e424857\r\n#define HBN_WAKEUP_GPIO_NONE   0x00\r\n#define HBN_WAKEUP_GPIO_9      0x01\r\n#define HBN_WAKEUP_GPIO_10     0x02\r\n#define HBN_WAKEUP_GPIO_11     0x04\r\n#define HBN_WAKEUP_GPIO_12     0x08\r\n#define HBN_WAKEUP_GPIO_13     0x10\r\n#define HBN_WAKEUP_GPIO_ALL    0x1E\r\n\r\n/*@} end of group HBN_Public_Macros */\r\n\r\n/** @defgroup  HBN_Public_Functions\r\n *  @{\r\n */\r\n/*----------*/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid HBN_OUT0_IRQHandler(void);\r\nvoid HBN_OUT1_IRQHandler(void);\r\n#endif\r\n/*----------*/\r\nvoid HBN_Mode_Enter(HBN_APP_CFG_Type *cfg);\r\nvoid HBN_Power_Down_Flash(SPI_Flash_Cfg_Type *flashCfg);\r\nvoid HBN_Enable_Ext(uint8_t aGPIOIeCfg, HBN_LDO_LEVEL_Type ldoLevel, HBN_LEVEL_Type hbnLevel);\r\nBL_Err_Type HBN_Reset(void);\r\nBL_Err_Type HBN_App_Reset(uint8_t npXtalType, uint8_t bclkDiv, uint8_t apXtalType, uint8_t fclkDiv);\r\nBL_Err_Type HBN_Disable(void);\r\n/*----------*/\r\nBL_Err_Type HBN_PIR_Enable(void);\r\nBL_Err_Type HBN_PIR_Disable(void);\r\nBL_Err_Type HBN_PIR_INT_Config(HBN_PIR_INT_CFG_Type *pirIntCfg);\r\nBL_Err_Type HBN_PIR_LPF_Sel(HBN_PIR_LPF_Type lpf);\r\nBL_Err_Type HBN_PIR_HPF_Sel(HBN_PIR_HPF_Type hpf);\r\nBL_Err_Type HBN_Set_PIR_Threshold(uint16_t threshold);\r\nuint16_t HBN_Get_PIR_Threshold(void);\r\nBL_Err_Type HBN_Set_PIR_Interval(uint16_t interval);\r\nuint16_t HBN_Get_PIR_Interval(void);\r\n/*----------*/\r\nBL_Sts_Type HBN_Get_BOR_OUT_State(void);\r\nBL_Err_Type HBN_Set_BOR_Config(uint8_t enable, HBN_BOR_THRES_Type threshold, HBN_BOR_MODE_Type mode);\r\n/*----------*/\r\nBL_Err_Type HBN_Set_Ldo11_Aon_Vout(HBN_LDO_LEVEL_Type ldoLevel);\r\nBL_Err_Type HBN_Set_Ldo11_Rt_Vout(HBN_LDO_LEVEL_Type ldoLevel);\r\nBL_Err_Type HBN_Set_Ldo11_Soc_Vout(HBN_LDO_LEVEL_Type ldoLevel);\r\nBL_Err_Type HBN_Set_Ldo11_All_Vout(HBN_LDO_LEVEL_Type ldoLevel);\r\nBL_Err_Type HBN_Set_Ldo11rt_Drive_Strength(HBN_LDO11RT_DRIVE_STRENGTH_Type strength);\r\n/*----------*/\r\nBL_Err_Type HBN_32K_Sel(HBN_32K_CLK_Type clkType);\r\nBL_Err_Type HBN_Set_UART_CLK_Sel(HBN_UART_CLK_Type clkSel);\r\nBL_Err_Type HBN_Set_XCLK_CLK_Sel(HBN_XCLK_CLK_Type xClk);\r\nBL_Err_Type HBN_Set_ROOT_CLK_Sel(HBN_ROOT_CLK_Type rootClk);\r\n/*----------*/\r\nBL_Err_Type HBN_Set_HRAM_slp(void);\r\nBL_Err_Type HBN_Set_HRAM_Ret(void);\r\n/*----------*/\r\nuint32_t HBN_Get_Status_Flag(void);\r\nBL_Err_Type HBN_Set_Status_Flag(uint32_t flag);\r\nuint32_t HBN_Get_Wakeup_Addr(void);\r\nBL_Err_Type HBN_Set_Wakeup_Addr(uint32_t addr);\r\n/*----------*/\r\nBL_Err_Type HBN_Clear_RTC_Counter(void);\r\nBL_Err_Type HBN_Enable_RTC_Counter(void);\r\nBL_Err_Type HBN_Set_RTC_Timer(HBN_RTC_INT_Delay_Type delay, uint32_t compValLow, uint32_t compValHigh, uint8_t compMode);\r\nBL_Err_Type HBN_Get_RTC_Timer_Val(uint32_t *valLow, uint32_t *valHigh);\r\nBL_Err_Type HBN_Clear_RTC_INT(void);\r\n/*----------*/\r\nBL_Err_Type HBN_GPIO_INT_Enable(HBN_GPIO_INT_Trigger_Type gpioIntTrigType);\r\nBL_Err_Type HBN_GPIO_INT_Disable(void);\r\nBL_Sts_Type HBN_Get_INT_State(HBN_INT_Type irqType);\r\nuint8_t HBN_Get_Pin_Wakeup_Mode(void);\r\nBL_Err_Type HBN_Clear_IRQ(HBN_INT_Type irqType);\r\nBL_Err_Type HBN_Hw_Pu_Pd_Cfg(uint8_t enable);\r\nBL_Err_Type HBN_Aon_Pad_IeSmt_Cfg(uint8_t padCfg);\r\nBL_Err_Type HBN_Pin_WakeUp_Mask(uint8_t maskVal);\r\n/*----------*/\r\nBL_Err_Type HBN_Enable_AComp0_IRQ(HBN_ACOMP_INT_EDGE_Type edge);\r\nBL_Err_Type HBN_Disable_AComp0_IRQ(HBN_ACOMP_INT_EDGE_Type edge);\r\nBL_Err_Type HBN_Enable_AComp1_IRQ(HBN_ACOMP_INT_EDGE_Type edge);\r\nBL_Err_Type HBN_Disable_AComp1_IRQ(HBN_ACOMP_INT_EDGE_Type edge);\r\n/*----------*/\r\nBL_Err_Type HBN_Enable_BOR_IRQ(void);\r\nBL_Err_Type HBN_Disable_BOR_IRQ(void);\r\n/*----------*/\r\nBL_Sts_Type HBN_Get_Reset_Event(HBN_RST_EVENT_Type event);\r\nBL_Err_Type HBN_Clear_Reset_Event(void);\r\n/*----------*/\r\nBL_Err_Type HBN_Out0_IRQHandler_Install(void);\r\nBL_Err_Type HBN_Out0_Callback_Install(HBN_OUT0_INT_Type intType, intCallback_Type *cbFun);\r\nBL_Err_Type HBN_Out1_IRQHandler_Install(void);\r\nBL_Err_Type HBN_Out1_Callback_Install(HBN_OUT1_INT_Type intType, intCallback_Type *cbFun);\r\n/*----------*/\r\nBL_Err_Type HBN_GPIO_Dbg_Pull_Cfg(BL_Fun_Type pupdEn, BL_Fun_Type dlyEn,\r\n                                  uint8_t dlySec, HBN_INT_Type gpioIrq, BL_Mask_Type gpioMask);\r\n/*----------*/\r\nBL_Err_Type HBN_Power_On_Xtal_32K(void);\r\nBL_Err_Type HBN_Power_Off_Xtal_32K(void);\r\nBL_Err_Type HBN_Power_On_RC32K(void);\r\nBL_Err_Type HBN_Power_Off_RC32K(void);\r\nBL_Err_Type HBN_Trim_RC32K(void);\r\nBL_Err_Type HBN_Set_Pad_23_28_Pullnone(void);\r\nBL_Err_Type HBN_Set_Pad_23_28_Pullup(void);\r\nBL_Err_Type HBN_Set_Pad_23_28_Pulldown(void);\r\nBL_Err_Type HBN_Set_Pad_23_28_ActiveIE(void);\r\nBL_Err_Type HBN_Set_BOR_Cfg(HBN_BOR_CFG_Type *cfg);\r\n/*----------*/\r\nvoid HBN_Enable(uint8_t aGPIOIeCfg, HBN_LDO_LEVEL_Type ldoLevel, HBN_LEVEL_Type hbnLevel);\r\n/*----------*/;\r\n\r\n/*@} end of group HBN_Public_Functions */\r\n\r\n/*@} end of group HBN */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_HBN_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_i2c.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_i2c.h\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver header file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n#ifndef __BL702_I2C_H__\r\n#define __BL702_I2C_H__\r\n\r\n#include \"bl702_common.h\"\r\n#include \"i2c_reg.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  I2C\r\n *  @{\r\n */\r\n\r\n/** @defgroup  I2C_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief I2C No. type definition\r\n */\r\ntypedef enum {\r\n  I2C0_ID = 0, /*!< I2C0 define */\r\n  I2C_ID_MAX,  /*!< I2C max define */\r\n} I2C_ID_Type;\r\n\r\n/**\r\n *  @brief I2C read/write type definition\r\n */\r\ntypedef enum {\r\n  I2C_WRITE = 0, /*!< I2C write direction */\r\n  I2C_READ,      /*!< I2C read direction */\r\n} I2C_Direction_Type;\r\n\r\n/**\r\n *  @brief I2C interrupt type definition\r\n */\r\ntypedef enum {\r\n  I2C_TRANS_END_INT,     /*!< I2C transfer end interrupt */\r\n  I2C_TX_FIFO_READY_INT, /*!< I2C TX fifo ready interrupt */\r\n  I2C_RX_FIFO_READY_INT, /*!< I2C RX fifo ready interrupt */\r\n  I2C_NACK_RECV_INT,     /*!< I2C nack received interrupt */\r\n  I2C_ARB_LOST_INT,      /*!< I2C arbitration lost interrupt */\r\n  I2C_FIFO_ERR_INT,      /*!< I2C TX/RX FIFO error interrupt */\r\n  I2C_INT_ALL,           /*!< I2C interrupt all type */\r\n} I2C_INT_Type;\r\n\r\n/**\r\n *  @brief I2S start condition phase structure type definition\r\n */\r\ntypedef struct {\r\n  uint8_t len0; /*!< Length of START condition phase 0 */\r\n  uint8_t len1; /*!< Length of START condition phase 1 */\r\n  uint8_t len2; /*!< Length of START condition phase 2 */\r\n  uint8_t len3; /*!< Length of START condition phase 3 */\r\n} I2C_Start_Condition_Phase_Type;\r\n\r\n/**\r\n *  @brief I2S stop condition phase structure type definition\r\n */\r\ntypedef struct {\r\n  uint8_t len0; /*!< Length of STOP condition phase 0 */\r\n  uint8_t len1; /*!< Length of STOP condition phase 1 */\r\n  uint8_t len2; /*!< Length of STOP condition phase 2 */\r\n  uint8_t len3; /*!< Length of STOP condition phase 3 */\r\n} I2C_Stop_Condition_Phase_Type;\r\n\r\n/**\r\n *  @brief I2S data phase structure type definition\r\n */\r\ntypedef struct {\r\n  uint8_t len0; /*!< Length of DATA phase 0 */\r\n  uint8_t len1; /*!< Length of DATA phase 1 */\r\n  uint8_t len2; /*!< Length of DATA phase 2 */\r\n  uint8_t len3; /*!< Length of DATA phase 3 */\r\n} I2C_Data_Phase_Type;\r\n\r\n/**\r\n *  @brief I2S transfer structure type definition\r\n */\r\ntypedef struct {\r\n  uint8_t     slaveAddr;     /*!< I2C slave address */\r\n  BL_Fun_Type stopEveryByte; /*!< I2C all data byte with stop bit */\r\n  uint8_t     subAddrSize;   /*!< Specifies the size of I2C sub address section */\r\n  uint32_t    subAddr;       /*!< I2C sub address */\r\n  uint16_t    dataSize;      /*!< Specifies the size of I2C data section */\r\n  uint8_t    *data;          /*!< Specifies the pointer of I2C R/W data */\r\n} I2C_Transfer_Cfg;\r\n\r\n/*@} end of group I2C_Public_Types */\r\n\r\n/** @defgroup  I2C_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  I2C_ID_TYPE\r\n *  @{\r\n */\r\n#define IS_I2C_ID_TYPE(type) (((type) == I2C0_ID) || ((type) == I2C_ID_MAX))\r\n\r\n/** @defgroup  I2C_DIRECTION_TYPE\r\n *  @{\r\n */\r\n#define IS_I2C_DIRECTION_TYPE(type) (((type) == I2C_WRITE) || ((type) == I2C_READ))\r\n\r\n/** @defgroup  I2C_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_I2C_INT_TYPE(type)                                                                                                                                                                          \\\r\n  (((type) == I2C_TRANS_END_INT) || ((type) == I2C_TX_FIFO_READY_INT) || ((type) == I2C_RX_FIFO_READY_INT) || ((type) == I2C_NACK_RECV_INT) || ((type) == I2C_ARB_LOST_INT) ||                         \\\r\n   ((type) == I2C_FIFO_ERR_INT) || ((type) == I2C_INT_ALL))\r\n\r\n/*@} end of group I2C_Public_Constants */\r\n\r\n/** @defgroup  I2C_Public_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group I2C_Public_Macros */\r\n\r\n/** @defgroup  I2C_Public_Functions\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief I2C Functions\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid I2C_IRQHandler(void);\r\n#endif\r\nvoid        I2C_SendWord(I2C_ID_Type i2cNo, uint32_t data);\r\nuint32_t    I2C_RecieveWord(I2C_ID_Type i2cNo);\r\nvoid        I2C_Enable(I2C_ID_Type i2cNo);\r\nvoid        I2C_Disable(I2C_ID_Type i2cNo);\r\nBL_Err_Type I2C_SetDeglitchCount(I2C_ID_Type i2cNo, uint8_t cnt);\r\nBL_Err_Type I2C_Reset(I2C_ID_Type i2cNo);\r\nuint8_t     I2C_GetTXFIFOAvailable();\r\nuint8_t     I2C_GetRXFIFOAvailable();\r\nvoid        I2C_DMATxEnable();\r\nvoid        I2C_DMATxDisable();\r\nvoid        I2C_SetPrd(I2C_ID_Type i2cNo, uint8_t phase);\r\nvoid        I2C_ClockSet(I2C_ID_Type i2cNo, uint32_t clk);\r\nvoid        I2C_SetSclSync(I2C_ID_Type i2cNo, uint8_t enable);\r\nvoid        I2C_Init(I2C_ID_Type i2cNo, I2C_Direction_Type direct, I2C_Transfer_Cfg *cfg);\r\nBL_Sts_Type I2C_IsBusy(I2C_ID_Type i2cNo);\r\nBL_Sts_Type I2C_TransferEndStatus(I2C_ID_Type i2cNo);\r\nBL_Err_Type I2C_MasterSendBlocking(I2C_ID_Type i2cNo, I2C_Transfer_Cfg *cfg);\r\nBL_Err_Type I2C_MasterReceiveBlocking(I2C_ID_Type i2cNo, I2C_Transfer_Cfg *cfg);\r\nvoid        I2C_IntMask(I2C_ID_Type i2cNo, I2C_INT_Type intType, BL_Mask_Type intMask);\r\nvoid        I2C_Int_Callback_Install(I2C_ID_Type i2cNo, I2C_INT_Type intType, intCallback_Type *cbFun);\r\n\r\n/*@} end of group I2C_Public_Functions */\r\n\r\n/*@} end of group I2C */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_I2C_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_i2c_gpio_sim.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_i2c_gpio_sim.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_I2C_GPIO_SIM_H__\r\n#define __BL702_I2C_GPIO_SIM_H__\r\n\r\n#include \"bl702_glb.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  I2C_GPIO_SIM\r\n *  @{\r\n */\r\n\r\n/** @defgroup  I2C_GPIO_SIM_Public_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group I2C_GPIO_SIM_Public_Types */\r\n\r\n/** @defgroup  I2C_GPIO_SIM_Public_Functions\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief I2C Functions\r\n */\r\nvoid I2C_GPIO_Sim_Init(GLB_GPIO_Type sclGPIOPin, GLB_GPIO_Type sdaGPIOPin);\r\nint I2C_Start(void);\r\nvoid I2C_Stop(void);\r\nuint8_t I2C_GetAck(void);\r\nvoid I2C_SendByte(uint8_t Data);\r\nuint8_t I2C_ReadByte(uint8_t ack);\r\nint SCCB_Init(GLB_GPIO_Type sclGPIOPin, GLB_GPIO_Type sdaGPIOPin);\r\nint SCCB_Write(uint8_t slave_addr, uint8_t *data, uint32_t wrsize);\r\nint SCCB_Read(uint8_t slave_addr, uint8_t *data, uint32_t rdsize);\r\n\r\n/*@} end of group I2C_GPIO_SIM_Public_Functions */\r\n\r\n/*@} end of group I2C_GPIO_SIM */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_I2C_GPIO_SIM_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_i2s.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_i2s.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_I2S_H__\r\n#define __BL702_I2S_H__\r\n\r\n#include \"i2s_reg.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  I2S\r\n *  @{\r\n */\r\n\r\n/** @defgroup  I2S_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief I2S mode type definition\r\n */\r\ntypedef enum {\r\n    I2S_MODE_I2S_LEFT,  /*!< Left-Justified Mode */\r\n    I2S_MODE_I2S_RIGHT, /*!< Right-Justified Mode */\r\n    I2S_MODE_I2S_DSP,   /*!< DSP Mode */\r\n} I2S_Mode_Type;\r\n\r\n/**\r\n *  @brief I2S role type definition\r\n */\r\ntypedef enum {\r\n    I2S_ROLE_MASTER = 0, /*!< I2S as master */\r\n    I2S_ROLE_SLAVE = 1,  /*!< I2S as slave */\r\n} I2S_Role_Type;\r\n\r\n/**\r\n *  @brief I2S data size type definition\r\n */\r\ntypedef enum {\r\n    I2S_SIZE_DATA_8 = 0, /*!< I2S data size 8 bits */\r\n    I2S_SIZE_DATA_16,    /*!< I2S data size 16 bits */\r\n    I2S_SIZE_DATA_24,    /*!< I2S data size 24 bits */\r\n    I2S_SIZE_DATA_32,    /*!< I2S data size 32 bits */\r\n} I2S_Data_Size_Type;\r\n\r\n/**\r\n *  @brief I2S frame size type definition\r\n */\r\ntypedef enum {\r\n    I2S_SIZE_FRAME_8 = 0, /*!< I2S frame size 8 bits */\r\n    I2S_SIZE_FRAME_16,    /*!< I2S frame size 16 bits */\r\n    I2S_SIZE_FRAME_24,    /*!< I2S frame size 24 bits */\r\n    I2S_SIZE_FRAME_32,    /*!< I2S frame size 32 bits */\r\n} I2S_Frame_Size_Type;\r\n\r\n/**\r\n *  @brief I2S endian data type definition\r\n */\r\ntypedef enum {\r\n    I2S_DATA_ENDIAN_MSB = 0, /*!< I2S use MSB first */\r\n    I2S_DATA_ENDIAN_LSB,     /*!< I2S use LSB first */\r\n} I2S_Endian_Type;\r\n\r\n/**\r\n *  @brief I2S frame select mode type definition\r\n */\r\ntypedef enum {\r\n    I2S_FS_MODE_EVEN = 0, /*!< I2S frame is even */\r\n    I2S_FS_MODE_1T,       /*!< I2S frame is only 1T high */\r\n} I2S_Fs_Mode_Type;\r\n\r\n/**\r\n *  @brief I2S rx mono mode channel select type definition\r\n */\r\ntypedef enum {\r\n    I2S_RX_MONO_MODE_LEFT_CHANNEL,  /*!< I2S rx mono mode left channel */\r\n    I2S_RX_MONO_MODE_RIGHT_CHANNEL, /*!< I2S rx mono mode right channel */\r\n} I2S_Mono_Mode_Channel;\r\n\r\n/**\r\n *  @brief I2S frame channel mode type definition\r\n */\r\ntypedef enum {\r\n    I2S_FS_CHANNELS_2 = 0, /*!< I2S frame is for 2 channels */\r\n    I2S_FS_CHANNELS_3,     /*!< I2S frame is for 3 channels */\r\n    I2S_FS_CHANNELS_4,     /*!< I2S frame is for 4 channels */\r\n} I2S_Fs_Channel_Type;\r\n\r\n/**\r\n *  @brief I2S mono control definition\r\n */\r\ntypedef enum {\r\n    I2S_MONO_CONTROL_STEREO = 0, /*!< I2S output stereo */\r\n    I2S_MONO_CONTROL_MONO,       /*!< I2S output mono */\r\n} I2S_MonoControl_Type;\r\n\r\n/**\r\n *  @brief I2S fifo 24-bit data align type definition\r\n */\r\ntypedef enum {\r\n    I2S_FIFO_24_RIGHT_JUSTIFIED = 0, /*!< I2S fifo:[31:24]0x00,[23:0]24bit_data */\r\n    I2S_FIFO_24_LEFT_JUSTIFIED,      /*!< I2S fifo:[31:8]24bit_data,[7:0]0x00 */\r\n} I2S_FIFO_24_Justified_Type;\r\n\r\n/**\r\n *  @brief I2S configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    I2S_Endian_Type endianType;            /*!< I2S endian configuration */\r\n    I2S_Mode_Type modeType;                /*!< I2S mode configuration */\r\n    uint32_t audioFreqHz;                  /*!< I2S audio pll output frequency in Hz */\r\n    uint32_t sampleFreqHz;                 /*!< I2S sample data frequency in Hz */\r\n    BL_Fun_Type bclkInvert;                /*!< I2S bclk invert configuration */\r\n    I2S_Frame_Size_Type frameSize;         /*!< I2S frame size configuration */\r\n    BL_Fun_Type fsInvert;                  /*!< I2S frame select invert configuration */\r\n    I2S_Fs_Mode_Type fsMode;               /*!< I2S frame mode configuration */\r\n    I2S_Fs_Channel_Type fsChannel;         /*!< I2S frame channels configuration */\r\n    uint32_t dataOffset;                   /*!< I2S data output offset configuration */\r\n    I2S_Data_Size_Type dataSize;           /*!< I2S data size configuration */\r\n    BL_Fun_Type monoMode;                  /*!< I2S enable mono mode,when this mode enable,lRMerge must be disabled */\r\n    I2S_Mono_Mode_Channel monoModeChannel; /*!< I2S mono mode channel configuration */\r\n} I2S_CFG_Type;\r\n\r\n/**\r\n *  @brief I2S FIFO configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type lRMerge;           /*!< I2S FIFO contains both left and right channel data in one entry */\r\n    BL_Fun_Type frameDataExchange; /*!< I2S exchange left and right channel data in one entry */\r\n    BL_Fun_Type txfifoDmaEnable;   /*!< Enable or disable I2S tx fifo dma function. */\r\n    BL_Fun_Type rxfifoDmaEnable;   /*!< Enable or disable I2S rx fifo dma function. */\r\n    uint8_t rxFifoLevel;           /*!< I2S receive fifo interrupt trigger level. only valid when fifo mode enabled. */\r\n    uint8_t txFifoLevel;           /*!< I2S transmit fifo interrupt trigger level. only valid when fifo mode enabled. */\r\n} I2S_FifoCfg_Type;\r\n\r\n/**\r\n *  @brief I2S IO configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type deglitchEn;  /*!< Enable or disable deglitch(for all the input pins) */\r\n    uint8_t deglitchCnt;     /*!< Deglitch cycle count(unit:cycle of I2S kernel clock) */\r\n    BL_Fun_Type inverseBCLK; /*!< Enable or disable inverse BCLK signal */\r\n    BL_Fun_Type inverseFS;   /*!< Enable or disable inverse FS signal */\r\n    BL_Fun_Type inverseRX;   /*!< Enable or disable inverse RX signal */\r\n    BL_Fun_Type inverseTX;   /*!< Enable or disable inverse TX signal */\r\n} I2S_IOCfg_Type;\r\n\r\n/*@} end of group I2S_Public_Types */\r\n\r\n/** @defgroup  I2S_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  I2S_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_I2S_MODE_TYPE(type) (((type) == I2S_MODE_I2S_LEFT) ||  \\\r\n                                ((type) == I2S_MODE_I2S_RIGHT) || \\\r\n                                ((type) == I2S_MODE_I2S_DSP))\r\n\r\n/** @defgroup  I2S_ROLE_TYPE\r\n *  @{\r\n */\r\n#define IS_I2S_ROLE_TYPE(type) (((type) == I2S_ROLE_MASTER) || \\\r\n                                ((type) == I2S_ROLE_SLAVE))\r\n\r\n/** @defgroup  I2S_DATA_SIZE_TYPE\r\n *  @{\r\n */\r\n#define IS_I2S_DATA_SIZE_TYPE(type) (((type) == I2S_SIZE_DATA_8) ||  \\\r\n                                     ((type) == I2S_SIZE_DATA_16) || \\\r\n                                     ((type) == I2S_SIZE_DATA_24) || \\\r\n                                     ((type) == I2S_SIZE_DATA_32))\r\n\r\n/** @defgroup  I2S_FRAME_SIZE_TYPE\r\n *  @{\r\n */\r\n#define IS_I2S_FRAME_SIZE_TYPE(type) (((type) == I2S_SIZE_FRAME_8) ||  \\\r\n                                      ((type) == I2S_SIZE_FRAME_16) || \\\r\n                                      ((type) == I2S_SIZE_FRAME_24) || \\\r\n                                      ((type) == I2S_SIZE_FRAME_32))\r\n\r\n/** @defgroup  I2S_ENDIAN_TYPE\r\n *  @{\r\n */\r\n#define IS_I2S_ENDIAN_TYPE(type) (((type) == I2S_DATA_ENDIAN_MSB) || \\\r\n                                  ((type) == I2S_DATA_ENDIAN_LSB))\r\n\r\n/** @defgroup  I2S_FS_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_I2S_FS_MODE_TYPE(type) (((type) == I2S_FS_MODE_EVEN) || \\\r\n                                   ((type) == I2S_FS_MODE_1T))\r\n\r\n/** @defgroup  I2S_MONO_MODE_CHANNEL\r\n *  @{\r\n */\r\n#define IS_I2S_MONO_MODE_CHANNEL(type) (((type) == I2S_RX_MONO_MODE_LEFT_CHANNEL) || \\\r\n                                        ((type) == I2S_RX_MONO_MODE_RIGHT_CHANNEL))\r\n\r\n/** @defgroup  I2S_FS_CHANNEL_TYPE\r\n *  @{\r\n */\r\n#define IS_I2S_FS_CHANNEL_TYPE(type) (((type) == I2S_FS_CHANNELS_2) || \\\r\n                                      ((type) == I2S_FS_CHANNELS_3) || \\\r\n                                      ((type) == I2S_FS_CHANNELS_4))\r\n\r\n/** @defgroup  I2S_MONOCONTROL_TYPE\r\n *  @{\r\n */\r\n#define IS_I2S_MONOCONTROL_TYPE(type) (((type) == I2S_MONO_CONTROL_STEREO) || \\\r\n                                       ((type) == I2S_MONO_CONTROL_MONO))\r\n\r\n/** @defgroup  I2S_FIFO_24_JUSTIFIED_TYPE\r\n *  @{\r\n */\r\n#define IS_I2S_FIFO_24_JUSTIFIED_TYPE(type) (((type) == I2S_FIFO_24_RIGHT_JUSTIFIED) || \\\r\n                                             ((type) == I2S_FIFO_24_LEFT_JUSTIFIED))\r\n\r\n/*@} end of group I2S_Public_Constants */\r\n\r\n/** @defgroup  I2S_Public_Macros\r\n *  @{\r\n */\r\n#define I2S_TX_FIFO_SIZE 16\r\n#define I2S_RX_FIFO_SIZE 16\r\n\r\n/*@} end of group I2S_Public_Macros */\r\n\r\n/** @defgroup  I2S_Public_Functions\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief I2S Functions\r\n */\r\nvoid I2S_SetBclkPeriod(I2S_CFG_Type *i2sCfg);\r\nvoid I2S_Init(I2S_CFG_Type *i2sCfg);\r\nvoid I2S_FifoConfig(I2S_FifoCfg_Type *fifoCfg);\r\nvoid I2S_IOConfig(I2S_IOCfg_Type *ioCfg);\r\nvoid I2S_Enable(I2S_Role_Type roleType);\r\nvoid I2S_Disable(void);\r\nuint32_t I2S_Read(void);\r\nvoid I2S_Write(uint32_t data);\r\nvoid I2S_Mute(BL_Fun_Type enabled);\r\nvoid I2S_SetFifoJustified(I2S_FIFO_24_Justified_Type justType);\r\nuint32_t I2S_GetTxFIFO_AvlCnt(void);\r\nuint32_t I2S_GetRxFIFO_AvlCnt(void);\r\nvoid I2S_Flush(void);\r\n\r\n/*@} end of group I2S_Public_Functions */\r\n\r\n/*@} end of group I2S */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_I2S_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_ir.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_ir.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_IR_H__\r\n#define __BL702_IR_H__\r\n\r\n#include \"ir_reg.h\"\r\n#include \"bl702_common.h\"\r\n#include \"bl702_hbn.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  IR\r\n *  @{\r\n */\r\n\r\n/** @defgroup  IR_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief IR direction type definition\r\n */\r\ntypedef enum {\r\n    IR_TX,   /*!< IR TX direction */\r\n    IR_RX,   /*!< IR RX direction */\r\n    IR_TXRX, /*!< IR TX and RX direction */\r\n} IR_Direction_Type;\r\n\r\n/**\r\n *  @brief IR word type definition\r\n */\r\ntypedef enum {\r\n    IR_WORD_0, /*!< IR data word 0 */\r\n    IR_WORD_1, /*!< IR data word 1 */\r\n} IR_Word_Type;\r\n\r\n/**\r\n *  @brief IR RX mode type definition\r\n */\r\ntypedef enum {\r\n    IR_RX_NEC, /*!< IR RX NEC mode */\r\n    IR_RX_RC5, /*!< IR RX RC5 mode */\r\n    IR_RX_SWM, /*!< IR RX software pulse-width detection mode */\r\n} IR_RxMode_Type;\r\n\r\n/**\r\n *  @brief IR interrupt type definition\r\n */\r\ntypedef enum {\r\n    IR_INT_TX,  /*!< IR TX transfer end interrupt */\r\n    IR_INT_RX,  /*!< IR RX transfer end interrupt */\r\n    IR_INT_ALL, /*!< IR all interrupt */\r\n} IR_INT_Type;\r\n\r\n/**\r\n *  @brief IR fifo underflow or overflow type definition\r\n */\r\ntypedef enum {\r\n    IR_RX_FIFO_UNDERFLOW, /*!< Underflow flag of rx fifo */\r\n    IR_RX_FIFO_OVERFLOW,  /*!< Overflow flag of rx fifo */\r\n} IR_FifoStatus_Type;\r\n\r\n/**\r\n *  @brief IR TX configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint8_t dataBits;               /*!< Bit count of data phase */\r\n    BL_Fun_Type tailPulseInverse;   /*!< Enable or disable signal of tail pulse inverse (don't care if SWM is enabled) */\r\n    BL_Fun_Type tailPulse;          /*!< Enable or disable signal of tail pulse (don't care if SWM is enabled) */\r\n    BL_Fun_Type headPulseInverse;   /*!< Enable or disable signal of head pulse inverse (don't care if SWM is enabled) */\r\n    BL_Fun_Type headPulse;          /*!< Enable or disable signal of head pulse (don't care if SWM is enabled) */\r\n    BL_Fun_Type logic1PulseInverse; /*!< Enable or disable signal of logic 1 pulse inverse (don't care if SWM is enabled) */\r\n    BL_Fun_Type logic0PulseInverse; /*!< Enable or disable signal of logic 0 pulse inverse (don't care if SWM is enabled) */\r\n    BL_Fun_Type dataPulse;          /*!< Enable or disable signal of data pulse (don't care if SWM is enabled) */\r\n    BL_Fun_Type outputModulation;   /*!< Enable or disable signal of output modulation */\r\n    BL_Fun_Type outputInverse;      /*!< Enable or disable signal of output inverse,0:output stays at low during idle state,1:stay at high */\r\n} IR_TxCfg_Type;\r\n\r\n/**\r\n *  @brief IR TX pulse width configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint8_t logic0PulseWidth_1; /*!< Pulse width of logic 0 pulse phase 1 (don't care if SWM is enabled) */\r\n    uint8_t logic0PulseWidth_0; /*!< Pulse width of logic 0 pulse phase 0 (don't care if SWM is enabled) */\r\n    uint8_t logic1PulseWidth_1; /*!< Pulse width of logic 1 pulse phase 1 (don't care if SWM is enabled) */\r\n    uint8_t logic1PulseWidth_0; /*!< Pulse width of logic 1 pulse phase 0 (don't care if SWM is enabled) */\r\n    uint8_t headPulseWidth_1;   /*!< Pulse width of head pulse phase 1 (don't care if SWM is enabled) */\r\n    uint8_t headPulseWidth_0;   /*!< Pulse width of head pulse phase 0 (don't care if SWM is enabled) */\r\n    uint8_t tailPulseWidth_1;   /*!< Pulse width of tail pulse phase 1 (don't care if SWM is enabled) */\r\n    uint8_t tailPulseWidth_0;   /*!< Pulse width of tail pulse phase 0 (don't care if SWM is enabled) */\r\n    uint8_t moduWidth_1;        /*!< Modulation phase 1 width */\r\n    uint8_t moduWidth_0;        /*!< Modulation phase 0 width */\r\n    uint16_t pulseWidthUnit;    /*!< Pulse width unit */\r\n} IR_TxPulseWidthCfg_Type;\r\n\r\n/**\r\n *  @brief IR TX software mode pulse width(multiples of pulse width unit) configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint32_t swmData0; /*!< SWM pulse width data   0~7,multiples of pulse width unit,each pulse is represented by 4-bit */\r\n    uint32_t swmData1; /*!< SWM pulse width data  8~15,multiples of pulse width unit,each pulse is represented by 4-bit */\r\n    uint32_t swmData2; /*!< SWM pulse width data 16~23,multiples of pulse width unit,each pulse is represented by 4-bit */\r\n    uint32_t swmData3; /*!< SWM pulse width data 24~31,multiples of pulse width unit,each pulse is represented by 4-bit */\r\n    uint32_t swmData4; /*!< SWM pulse width data 32~39,multiples of pulse width unit,each pulse is represented by 4-bit */\r\n    uint32_t swmData5; /*!< SWM pulse width data 40~47,multiples of pulse width unit,each pulse is represented by 4-bit */\r\n    uint32_t swmData6; /*!< SWM pulse width data 48~55,multiples of pulse width unit,each pulse is represented by 4-bit */\r\n    uint32_t swmData7; /*!< SWM pulse width data 56~63,multiples of pulse width unit,each pulse is represented by 4-bit */\r\n} IR_TxSWMPulseWidthCfg_Type;\r\n\r\n/**\r\n *  @brief IR RX configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    IR_RxMode_Type rxMode;    /*!< Set ir rx mode */\r\n    BL_Fun_Type inputInverse; /*!< Enable or disable signal of input inverse */\r\n    uint16_t endThreshold;    /*!< Pulse width threshold to trigger end condition */\r\n    uint16_t dataThreshold;   /*!< Pulse width threshold for logic 0/1 detection (don't care if SWM is enabled) */\r\n    BL_Fun_Type rxDeglitch;   /*!< Enable or disable signal of rx input de-glitch function */\r\n    uint8_t DeglitchCnt;      /*!< De-glitch function cycle count */\r\n} IR_RxCfg_Type;\r\n\r\n/*@} end of group IR_Public_Types */\r\n\r\n/** @defgroup  IR_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  IR_DIRECTION_TYPE\r\n *  @{\r\n */\r\n#define IS_IR_DIRECTION_TYPE(type) (((type) == IR_TX) || \\\r\n                                    ((type) == IR_RX) || \\\r\n                                    ((type) == IR_TXRX))\r\n\r\n/** @defgroup  IR_WORD_TYPE\r\n *  @{\r\n */\r\n#define IS_IR_WORD_TYPE(type) (((type) == IR_WORD_0) || \\\r\n                               ((type) == IR_WORD_1))\r\n\r\n/** @defgroup  IR_RXMODE_TYPE\r\n *  @{\r\n */\r\n#define IS_IR_RXMODE_TYPE(type) (((type) == IR_RX_NEC) || \\\r\n                                 ((type) == IR_RX_RC5) || \\\r\n                                 ((type) == IR_RX_SWM))\r\n\r\n/** @defgroup  IR_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_IR_INT_TYPE(type) (((type) == IR_INT_TX) || \\\r\n                              ((type) == IR_INT_RX) || \\\r\n                              ((type) == IR_INT_ALL))\r\n\r\n/** @defgroup  IR_FIFOSTATUS_TYPE\r\n *  @{\r\n */\r\n#define IS_IR_FIFOSTATUS_TYPE(type) (((type) == IR_RX_FIFO_UNDERFLOW) || \\\r\n                                     ((type) == IR_RX_FIFO_OVERFLOW))\r\n\r\n/*@} end of group IR_Public_Constants */\r\n\r\n/** @defgroup  IR_Public_Macros\r\n *  @{\r\n */\r\n#define IR_RX_FIFO_SIZE 64\r\n\r\n/*@} end of group IR_Public_Macros */\r\n\r\n/** @defgroup  IR_Public_Functions\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief IR Functions\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid IRRX_IRQHandler(void);\r\nvoid IRTX_IRQHandler(void);\r\n#endif\r\nBL_Err_Type IR_TxInit(IR_TxCfg_Type *irTxCfg);\r\nBL_Err_Type IR_TxPulseWidthConfig(IR_TxPulseWidthCfg_Type *irTxPulseWidthCfg);\r\nBL_Err_Type IR_TxSWMPulseWidthConfig(IR_TxSWMPulseWidthCfg_Type *irTxSWMPulseWidthCfg);\r\nBL_Err_Type IR_RxInit(IR_RxCfg_Type *irRxCfg);\r\nBL_Err_Type IR_DeInit(void);\r\nBL_Err_Type IR_Enable(IR_Direction_Type direct);\r\nBL_Err_Type IR_Disable(IR_Direction_Type direct);\r\nBL_Err_Type IR_TxSWM(BL_Fun_Type txSWM);\r\nBL_Err_Type IR_RxFIFOClear(void);\r\nBL_Err_Type IR_SendData(IR_Word_Type irWord, uint32_t data);\r\nBL_Err_Type IR_SWMSendData(uint16_t *data, uint8_t length);\r\nBL_Err_Type IR_SendCommand(uint32_t word1, uint32_t word0);\r\nBL_Err_Type IR_SWMSendCommand(uint16_t *data, uint8_t length);\r\nBL_Err_Type IR_SendNEC(uint8_t address, uint8_t command);\r\nBL_Err_Type IR_IntMask(IR_INT_Type intType, BL_Mask_Type intMask);\r\nBL_Err_Type IR_ClrIntStatus(IR_INT_Type intType);\r\nBL_Err_Type IR_Int_Callback_Install(IR_INT_Type intType, intCallback_Type *cbFun);\r\nBL_Sts_Type IR_GetIntStatus(IR_INT_Type intType);\r\nBL_Sts_Type IR_GetRxFIFOStatus(IR_FifoStatus_Type fifoSts);\r\nuint32_t IR_ReceiveData(IR_Word_Type irWord);\r\nuint8_t IR_SWMReceiveData(uint16_t *data, uint8_t length);\r\nBL_Err_Type IR_ReceiveNEC(uint8_t *address, uint8_t *command);\r\nuint8_t IR_GetRxDataBitCount(void);\r\nuint8_t IR_GetRxFIFOCount(void);\r\nIR_RxMode_Type IR_LearnToInit(uint32_t *data, uint8_t *length);\r\nBL_Err_Type IR_LearnToSend(IR_RxMode_Type mode, uint32_t *data, uint8_t length);\r\nuint8_t IR_LearnToReceive(IR_RxMode_Type mode, uint32_t *data);\r\nBL_Err_Type IR_LEDInit(HBN_XCLK_CLK_Type clk, uint8_t div, uint8_t unit, uint8_t code0H, uint8_t code0L, uint8_t code1H,\r\n                       uint8_t code1L);\r\nBL_Err_Type IR_LEDSend(uint32_t data);\r\n\r\n/*@} end of group IR_Public_Functions */\r\n\r\n/*@} end of group IR */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_IR_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_kys.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_kys.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_KYS_H__\r\n#define __BL702_KYS_H__\r\n\r\n#include \"kys_reg.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  KYS\r\n *  @{\r\n */\r\n\r\n/** @defgroup  KYS_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief KYS keycode type definition\r\n */\r\ntypedef enum {\r\n    KYS_KEYCODE_0, /*!< KYS keycode 0 */\r\n    KYS_KEYCODE_1, /*!< KYS keycode 1 */\r\n    KYS_KEYCODE_2, /*!< KYS keycode 2 */\r\n    KYS_KEYCODE_3, /*!< KYS keycode 3 */\r\n} KYS_Keycode_Type;\r\n\r\n/**\r\n *  @brief KYS configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint8_t col;            /*!< Col of keyboard,max:20 */\r\n    uint8_t row;            /*!< Row of keyboard,max:8 */\r\n    uint8_t idleDuration;   /*!< Idle duration between column scans */\r\n    BL_Fun_Type ghostEn;    /*!< Enable or disable ghost key event detection */\r\n    BL_Fun_Type deglitchEn; /*!< Enable or disable deglitch function */\r\n    uint8_t deglitchCnt;    /*!< Deglitch count */\r\n} KYS_CFG_Type;\r\n\r\n/*@} end of group KYS_Public_Types */\r\n\r\n/** @defgroup  KYS_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  KYS_KEYCODE_TYPE\r\n *  @{\r\n */\r\n#define IS_KYS_KEYCODE_TYPE(type) (((type) == KYS_KEYCODE_0) || \\\r\n                                   ((type) == KYS_KEYCODE_1) || \\\r\n                                   ((type) == KYS_KEYCODE_2) || \\\r\n                                   ((type) == KYS_KEYCODE_3))\r\n\r\n/*@} end of group KYS_Public_Constants */\r\n\r\n/** @defgroup  KYS_Public_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group KYS_Public_Macros */\r\n\r\n/** @defgroup  KYS_Public_Functions\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief UART Functions\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid KYS_IRQHandler(void);\r\n#endif\r\nBL_Err_Type KYS_Init(KYS_CFG_Type *kysCfg);\r\nBL_Err_Type KYS_Enable(void);\r\nBL_Err_Type KYS_Disable(void);\r\nBL_Err_Type KYS_IntMask(BL_Mask_Type intMask);\r\nBL_Err_Type KYS_IntClear(void);\r\nBL_Err_Type KYS_Int_Callback_Install(intCallback_Type *cbFun);\r\nuint8_t KYS_GetIntStatus(void);\r\nuint8_t KYS_GetKeycode(KYS_Keycode_Type keycode, uint8_t *col, uint8_t *row);\r\n\r\n/*@} end of group KYS_Public_Functions */\r\n\r\n/*@} end of group KYS */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_KYS_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_l1c.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_l1c.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_L1C_H__\r\n#define __BL702_L1C_H__\r\n\r\n#include \"l1c_reg.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  L1C\r\n *  @{\r\n */\r\n\r\n/** @defgroup  L1C_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief L1C configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type wrapDis;  /*!< wrap disable */\r\n    BL_Fun_Type bypassEn; /*!< bypass cache enable */\r\n    uint8_t wayDis;       /*!< Disable part of cache ways & used as ITCM */\r\n    BL_Fun_Type cntEn;    /*!< l1c count enable */\r\n} L1C_CACHE_Cfg_Type;\r\n\r\n/**\r\n *  @brief L1C BMX arb mode type definition\r\n */\r\ntypedef enum {\r\n    L1C_BMX_ARB_FIX,         /*!< 0->fix */\r\n    L1C_BMX_ARB_ROUND_ROBIN, /*!< 2->round-robin */\r\n    L1C_BMX_ARB_RANDOM,      /*!< 3->random */\r\n} L1C_BMX_ARB_Type;\r\n\r\n/**\r\n *  @brief L1C BMX configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint8_t timeoutEn;       /*!< Bus timeout enable: detect slave no reaponse in 1024 cycles */\r\n    BL_Fun_Type errEn;       /*!< Bus error response enable */\r\n    L1C_BMX_ARB_Type arbMod; /*!< 0->fix, 2->round-robin, 3->random */\r\n} L1C_BMX_Cfg_Type;\r\n\r\n/**\r\n *  @brief L1C BMX bus err type definition\r\n */\r\ntypedef enum {\r\n    L1C_BMX_BUS_ERR_TRUSTZONE_DECODE, /*!< Bus trustzone decode error */\r\n    L1C_BMX_BUS_ERR_ADDR_DECODE,      /*!< Bus addr decode error */\r\n} L1C_BMX_BUS_ERR_Type;\r\n\r\n/**\r\n *  @brief L1C BMX bus err interrupt type definition\r\n */\r\ntypedef enum {\r\n    L1C_BMX_ERR_INT_ERR, /*!< L1C BMX bus err interrupt */\r\n    L1C_BMX_ERR_INT_ALL, /*!< L1C BMX bus err interrupt max num */\r\n} L1C_BMX_ERR_INT_Type;\r\n\r\n/**\r\n *  @brief L1C BMX time out interrupt type definition\r\n */\r\ntypedef enum {\r\n    L1C_BMX_TO_INT_TIMEOUT, /*!< L1C_BMX timeout interrupt */\r\n    L1C_BMX_TO_INT_ALL,     /*!< L1C_BMX timeout interrupt max num */\r\n} L1C_BMX_TO_INT_Type;\r\n\r\n/*@} end of group L1C_Public_Types */\r\n\r\n/** @defgroup  L1C_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  L1C_BMX_ARB_TYPE\r\n *  @{\r\n */\r\n#define IS_L1C_BMX_ARB_TYPE(type) (((type) == L1C_BMX_ARB_FIX) ||         \\\r\n                                   ((type) == L1C_BMX_ARB_ROUND_ROBIN) || \\\r\n                                   ((type) == L1C_BMX_ARB_RANDOM))\r\n\r\n/** @defgroup  L1C_BMX_BUS_ERR_TYPE\r\n *  @{\r\n */\r\n#define IS_L1C_BMX_BUS_ERR_TYPE(type) (((type) == L1C_BMX_BUS_ERR_TRUSTZONE_DECODE) || \\\r\n                                       ((type) == L1C_BMX_BUS_ERR_ADDR_DECODE))\r\n\r\n/** @defgroup  L1C_BMX_ERR_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_L1C_BMX_ERR_INT_TYPE(type) (((type) == L1C_BMX_ERR_INT_ERR) || \\\r\n                                       ((type) == L1C_BMX_ERR_INT_ALL))\r\n\r\n/** @defgroup  L1C_BMX_TO_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_L1C_BMX_TO_INT_TYPE(type) (((type) == L1C_BMX_TO_INT_TIMEOUT) || \\\r\n                                      ((type) == L1C_BMX_TO_INT_ALL))\r\n\r\n/*@} end of group L1C_Public_Constants */\r\n\r\n/** @defgroup  L1C_Public_Macros\r\n *  @{\r\n */\r\n#define L1C_WAY_DISABLE_NONE  0x00\r\n#define L1C_WAY_DISABLE_ONE   0x01\r\n#define L1C_WAY_DISABLE_TWO   0x03\r\n#define L1C_WAY_DISABLE_THREE 0x07\r\n#define L1C_WAY_DISABLE_ALL   0x0F\r\n#define L1C_WAY_DISABLE_USER  0xFF\r\n#if 1\r\n/*NP config address */\r\n#define L1C_CONF_REG        (L1C_BASE + 0x00)\r\n#define L1C_HIT_CNT_LSB_REG (L1C_BASE + 0x04)\r\n#define L1C_HIT_CNT_MSB_REG (L1C_BASE + 0x08)\r\n#define L1C_MISS_CNT_REG    (L1C_BASE + 0x0C)\r\n/* Get miss and hit count */\r\n#define L1C_Get_Miss_Cnt()    BL702_REG_RD(L1C_MISS_CNT_REG)\r\n#define L1C_Get_Hit_Cnt_LSB() BL702_REG_RD(L1C_HIT_CNT_LSB_REG)\r\n#define L1C_Get_Hit_Cnt_MSB() BL702_REG_RD(L1C_HIT_CNT_MSB_REG)\r\n#endif\r\n\r\n/*@} end of group L1C_Public_Macros */\r\n\r\n/** @defgroup  L1C_Public_Functions\r\n *  @{\r\n */\r\n/*----------*/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid L1C_BMX_ERR_IRQHandler(void);\r\nvoid L1C_BMX_TO_IRQHandler(void);\r\n#endif\r\n/*----------*/\r\nBL_Err_Type L1C_Cache_Enable_Set(uint8_t wayDisable);\r\nvoid L1C_Cache_Write_Set(BL_Fun_Type wtEn, BL_Fun_Type wbEn, BL_Fun_Type waEn);\r\nBL_Err_Type L1C_Cache_Flush(uint8_t wayDisable);\r\nBL_Err_Type L1C_Cache_Flush_Ext(void);\r\nvoid L1C_Cache_Hit_Count_Get(uint32_t *hitCountLow, uint32_t *hitCountHigh);\r\nuint32_t L1C_Cache_Miss_Count_Get(void);\r\nvoid L1C_Cache_Read_Disable(void);\r\n/*----------*/\r\nBL_Err_Type L1C_Set_Wrap(BL_Fun_Type wrap);\r\nBL_Err_Type L1C_Set_Way_Disable(uint8_t disableVal);\r\nBL_Err_Type L1C_IROM_2T_Access_Set(uint8_t enable);\r\n/*----------*/\r\nBL_Err_Type L1C_BMX_Init(L1C_BMX_Cfg_Type *l1cBmxCfg);\r\nBL_Err_Type L1C_BMX_Addr_Monitor_Enable(void);\r\nBL_Err_Type L1C_BMX_Addr_Monitor_Disable(void);\r\nBL_Err_Type L1C_BMX_BusErrResponse_Enable(void);\r\nBL_Err_Type L1C_BMX_BusErrResponse_Disable(void);\r\nBL_Sts_Type L1C_BMX_Get_Status(L1C_BMX_BUS_ERR_Type errType);\r\nuint32_t L1C_BMX_Get_Err_Addr(void);\r\nBL_Err_Type L1C_BMX_ERR_INT_Callback_Install(L1C_BMX_ERR_INT_Type intType, intCallback_Type *cbFun);\r\nBL_Err_Type L1C_BMX_TIMEOUT_INT_Callback_Install(L1C_BMX_TO_INT_Type intType,\r\n                                                 intCallback_Type *cbFun);\r\n/*----------*/;\r\n\r\n/*@} end of group L1C_Public_Functions */\r\n\r\n/*@} end of group L1C */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_L1C_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_mjpeg.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_mjpeg.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_MJPEG_H__\r\n#define __BL702_MJPEG_H__\r\n\r\n#include \"mjpeg_reg.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  MJPEG\r\n *  @{\r\n */\r\n\r\n/** @defgroup  MJPEG_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief MJPEG YUV format definition\r\n */\r\ntypedef enum {\r\n    MJPEG_YUV420,            /*!< MJPEG YUV420 planar mode */\r\n    MJPEG_YUV400,            /*!< MJPEG YUV400 grey scale mode */\r\n    MJPEG_YUV422_PLANAR,     /*!< MJPEG YUV422 planar mode */\r\n    MJPEG_YUV422_INTERLEAVE, /*!< MJPEG YUV422 interleave mode */\r\n} MJPEG_YUV_Mode_Type;\r\n\r\n/**\r\n *  @brief MJPEG burst type definition\r\n */\r\ntypedef enum {\r\n    MJPEG_BURST_SINGLE, /*!< MJPEG burst single */\r\n    MJPEG_BURST_INCR4,  /*!< MJPEG burst incr4 */\r\n    MJPEG_BURST_INCR8,  /*!< MJPEG burst incr8 */\r\n    MJPEG_BURST_INCR16, /*!< MJPEG burst incr16 */\r\n} MJPEG_Burst_Type;\r\n\r\n/**\r\n *  @brief MJPEG swap mode block definition\r\n */\r\ntypedef enum {\r\n    MJPEG_BLOCK_0, /*!< Memory block 0 */\r\n    MJPEG_BLOCK_1, /*!< Memory block 1 */\r\n} MJPEG_Swap_Block_Type;\r\n\r\n/**\r\n *  @brief MJPEG interrupt type definition\r\n */\r\ntypedef enum {\r\n    MJPEG_INT_NORMAL,          /*!< MJPEG normal write interrupt */\r\n    MJPEG_INT_CAM_OVERWRITE,   /*!< MJPEG camera overwrite interrupt */\r\n    MJPEG_INT_MEM_OVERWRITE,   /*!< MJPEG memory overwrite interrupt */\r\n    MJPEG_INT_FRAME_OVERWRITE, /*!< MJPEG frame overwrite interrupt */\r\n    MJPEG_INT_BACK_IDLE,       /*!< MJPEG back idle interrupt */\r\n    MJPEG_INT_SWAP,            /*!< MJPEG swap memory block interrupt */\r\n    MJPEG_INT_ALL,             /*!< MJPEG all interrupt type */\r\n} MJPEG_INT_Type;\r\n\r\n/**\r\n *  @brief MJPEG configuration strcut definition\r\n */\r\ntypedef struct\r\n{\r\n    MJPEG_Burst_Type burst;      /*!< MJPEG burst type */\r\n    uint8_t quality;             /*!< MJPEG quantization selection, 1-75:Q table selection, others:Q100(lossless) */\r\n    MJPEG_YUV_Mode_Type yuv;     /*!< MJPEG control YUV mode */\r\n    uint16_t waitCount;          /*!< Cycle count in wait state, default value:0x400 */\r\n    uint32_t bufferMjpeg;        /*!< MJPEG buffer addr */\r\n    uint32_t sizeMjpeg;          /*!< MJPEG buffer size */\r\n    uint32_t bufferCamYY;        /*!< CAM buffer address of Y frame */\r\n    uint32_t sizeCamYY;          /*!< CAM buffer size of Y frame */\r\n    uint32_t bufferCamUV;        /*!< CAM buffer address of UV frame */\r\n    uint32_t sizeCamUV;          /*!< CAM buffer size of UV frame */\r\n    uint16_t resolutionX;        /*!< CAM RESOLUTION X */\r\n    uint16_t resolutionY;        /*!< CAM RESOLUTION Y */\r\n    BL_Fun_Type bitOrderEnable;  /*!< MJPEG bitstream order adjustment */\r\n    BL_Fun_Type evenOrderEnable; /*!< Enable:U is even byte of UV frame and V is odd byte of UV frame */\r\n    BL_Fun_Type swapModeEnable;  /*!< Enable or disable write swap mode */\r\n    BL_Fun_Type overStopEnable;  /*!< Enable:if camera overwrite error occur,mjpeg will stop fetch data */\r\n    BL_Fun_Type reflectDmy;      /*!< UV dummy with relect */\r\n    BL_Fun_Type verticalDmy;     /*!< MJPEG last half vertical block with dummy data 0x80 */\r\n    BL_Fun_Type horizationalDmy; /*!< MJPEG last half horizational block with dummy data 0x80 */\r\n} MJPEG_CFG_Type;\r\n\r\n/**\r\n *  @brief MJPEG packet configuration strcut definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type packetEnable; /*!< Enable or disable packet mode */\r\n    BL_Fun_Type endToTail;    /*!< Enable or disable jpeg end jump to packet tail */\r\n    uint16_t frameHead;       /*!< Preserve head memory space for each frame */\r\n    BL_Fun_Type frameTail;    /*!< Enable:auto fill tail 0xFF and 0xD9 */\r\n    uint16_t packetHead;      /*!< Packet head byte count */\r\n    uint16_t packetBody;      /*!< Packet body byte count */\r\n    uint16_t packetTail;      /*!< Packet tail byte count */\r\n} MJPEG_Packet_Type;\r\n\r\n/**\r\n *  @brief MJPEG frame information strcut definition\r\n */\r\ntypedef struct\r\n{\r\n    uint8_t validFrames;    /*!< Valid frames */\r\n    uint32_t curFrameAddr;  /*!< Current frame address */\r\n    uint32_t curFrameBytes; /*!< Current frame bytes */\r\n    uint8_t curFrameQ;      /*!< Current frame Q mode */\r\n    uint32_t status;        /*!< MJPEG module status */\r\n} MJPEG_Frame_Info;\r\n\r\n/*@} end of group MJPEG_Public_Types */\r\n\r\n/** @defgroup  MJPEG_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  MJPEG_YUV_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_MJPEG_YUV_MODE_TYPE(type) (((type) == MJPEG_YUV420) ||        \\\r\n                                      ((type) == MJPEG_YUV400) ||        \\\r\n                                      ((type) == MJPEG_YUV422_PLANAR) || \\\r\n                                      ((type) == MJPEG_YUV422_INTERLEAVE))\r\n\r\n/** @defgroup  MJPEG_BURST_TYPE\r\n *  @{\r\n */\r\n#define IS_MJPEG_BURST_TYPE(type) (((type) == MJPEG_BURST_SINGLE) || \\\r\n                                   ((type) == MJPEG_BURST_INCR4) ||  \\\r\n                                   ((type) == MJPEG_BURST_INCR8) ||  \\\r\n                                   ((type) == MJPEG_BURST_INCR16))\r\n\r\n/** @defgroup  MJPEG_SWAP_BLOCK_TYPE\r\n *  @{\r\n */\r\n#define IS_MJPEG_SWAP_BLOCK_TYPE(type) (((type) == MJPEG_BLOCK_0) || \\\r\n                                        ((type) == MJPEG_BLOCK_1))\r\n\r\n/** @defgroup  MJPEG_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_MJPEG_INT_TYPE(type) (((type) == MJPEG_INT_NORMAL) ||          \\\r\n                                 ((type) == MJPEG_INT_CAM_OVERWRITE) ||   \\\r\n                                 ((type) == MJPEG_INT_MEM_OVERWRITE) ||   \\\r\n                                 ((type) == MJPEG_INT_FRAME_OVERWRITE) || \\\r\n                                 ((type) == MJPEG_INT_BACK_IDLE) ||       \\\r\n                                 ((type) == MJPEG_INT_SWAP) ||            \\\r\n                                 ((type) == MJPEG_INT_ALL))\r\n\r\n/*@} end of group MJPEG_Public_Constants */\r\n\r\n/** @defgroup  MJPEG_Public_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group MJPEG_Public_Macros */\r\n\r\n/** @defgroup  MJPEG_Public_Functions\r\n *  @{\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid MJPEG_IRQHandler(void);\r\n#endif\r\nvoid MJPEG_Init(MJPEG_CFG_Type *cfg);\r\nvoid MJPEG_Packet_Config(MJPEG_Packet_Type *cfg);\r\nvoid MJPEG_Set_YUYV_Order_Interleave(uint8_t y0, uint8_t u0, uint8_t y1, uint8_t v0);\r\nvoid MJPEG_Set_YUYV_Order_Planar(uint8_t yy, uint8_t uv);\r\nvoid MJPEG_Deinit(void);\r\nvoid MJPEG_Enable(void);\r\nvoid MJPEG_Disable(void);\r\nvoid MJPEG_SW_Enable(uint8_t count);\r\nvoid MJPEG_SW_Run(void);\r\nvoid MJPEG_Get_Frame_Info(MJPEG_Frame_Info *info);\r\nuint8_t MJPEG_Get_Frame_Count(void);\r\nvoid MJPEG_Pop_Frame(void);\r\nvoid MJPEG_Current_Block_Clear(void);\r\nMJPEG_Swap_Block_Type MJPEG_Get_Current_Block(void);\r\nBL_Sts_Type MJPEG_Block_Is_Full(MJPEG_Swap_Block_Type block);\r\nBL_Sts_Type MJPEG_Current_Block_Is_Start(void);\r\nBL_Sts_Type MJPEG_Current_Block_Is_End(void);\r\nuint32_t MJPEG_Get_Remain_Bit(void);\r\nvoid MJPEG_Set_Frame_Threshold(uint8_t count);\r\nvoid MJPEG_IntMask(MJPEG_INT_Type intType, BL_Mask_Type intMask);\r\nvoid MJPEG_IntClr(MJPEG_INT_Type intType);\r\nvoid MJPEG_Int_Callback_Install(MJPEG_INT_Type intType, intCallback_Type *cbFun);\r\n\r\n/*@} end of group MJPEG_Public_Functions */\r\n\r\n/*@} end of group MJPEG */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_MJPEG_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_nf_cfg.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_nf_cfg.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_NF_CFG_H__\r\n#define __BL702_NF_CFG_H__\r\n\r\n#include \"string.h\"\r\n#include \"bl702_nflash.h\"\r\n#include \"bl702_sf_ctrl.h\"\r\n\r\n/** @defgroup  NF_CFG_Public_Functions\r\n *  @{\r\n */\r\nuint32_t NF_Cfg_Flash_Identify(uint8_t callFromFlash, uint32_t autoScan, uint32_t flashPinCfg, uint8_t restoreDefault, Nand_Flash_Cfg_Type *pFlashCfg);\r\n\r\n#endif /* __BL702_NF_CFG_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_nflash.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_nflah.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_NFLAH_H__\r\n#define __BL702_NFLAH_H__\r\n\r\n#include \"bl702_common.h\"\r\n#include \"bl702_sf_ctrl.h\"\r\n\r\n/** @addtogroup  BL602_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SFLAH\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SFLAH_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief Serial flash configuration structure type definition\r\n */\r\n/*@} end of group SFLAH_Public_Types */\r\n\r\n/** @defgroup  SFLAH_Public_Constants\r\n *  @{\r\n */\r\n\r\n/*@} end of group SFLAH_Public_Constants */\r\n\r\n/** @defgroup  SFLAH_Public_Macros\r\n *  @{\r\n */\r\n#define BFLB_NAND_FLASH_BLK_DATA_SIZE   (128 * 1024)\r\n#define BFLB_NAND_FLASH_BLK_TOTAL_SIZE  ((128 + 4) * 1024)\r\n#define BFLB_NAND_FLASH_PAGE_SIZE       (2048)\r\n#define BFLB_NAND_FLASH_PAGE_TOTAL_SIZE (2048 + 64)\r\n#define BFLB_NAND_FLASH_PAGES_PER_BLOCK (64)\r\n#define BFLB_NAND_FLASH_CMD_INVALID     (0xff)\r\n#define DISK_SECTOR_SIZE                (512)\r\ntypedef unsigned char BYTE;\r\ntypedef unsigned long DWORD;\r\ntypedef unsigned int UINT;\r\ntypedef BYTE DSTATUS;\r\ntypedef enum {\r\n    RES_OK = 0, /* 0: Successful */\r\n    RES_ERROR,  /* 1: R/W Error */\r\n    RES_WRPRT,  /* 2: Write Protected */\r\n    RES_NOTRDY, /* 3: Not Ready */\r\n    RES_PARERR  /* 4: Invalid Parameter */\r\n} DRESULT;\r\n\r\ntypedef enum {\r\n    READ_DATA_FROM_CACHE = 0,       //date:2048 bytes in each page\r\n    READ_SPARE_DATA_FROM_CACHE = 1, //spare date:64 bytes in each page\r\n} BL_Nand_Flash_READ_DATE_TYPE;\r\n\r\ntypedef struct\r\n{\r\n    uint8_t ioMode;               /*!< Serail flash interface mode,bit0-3:IF mode,bit4:unwrap */\r\n    uint8_t cReadSupport;         /*!< Support continuous read mode,bit0:continuous read mode support,bit1:read mode cfg */\r\n    uint8_t clkDelay;             /*!< SPI clock delay,bit0-3:delay,bit4-6:pad delay */\r\n    uint8_t clkInvert;            /*!< SPI clock phase invert,bit0:clck invert,bit1:rx invert,bit2-4:pad delay,bit5-7:pad delay */\r\n    uint8_t resetEnCmd;           /*!< Flash enable reset command */\r\n    uint8_t resetCmd;             /*!< Flash reset command */\r\n    uint8_t resetCreadCmd;        /*!< Flash reset continuous read command */\r\n    uint8_t resetCreadCmdSize;    /*!< Flash reset continuous read command size */\r\n    uint8_t jedecIdCmd;           /*!< JEDEC ID command */\r\n    uint8_t jedecIdCmdDmyClk;     /*!< JEDEC ID command dummy clock */\r\n    uint8_t qpiJedecIdCmd;        /*!< QPI JEDEC ID comamnd */\r\n    uint8_t qpiJedecIdCmdDmyClk;  /*!< QPI JEDEC ID command dummy clock */\r\n    uint8_t sectorSize;           /*!< *1024bytes */\r\n    uint8_t mid;                  /*!< Manufacturer ID */\r\n    uint16_t pageSize;            /*!< Page size */\r\n    uint8_t chipEraseCmd;         /*!< Chip erase cmd */\r\n    uint8_t sectorEraseCmd;       /*!< Sector erase command */\r\n    uint8_t blk128EraseCmd;       /*!< Block 128K erase command */\r\n    uint8_t writeEnableCmd;       /*!< Need before every erase or program */\r\n    uint8_t programLoadCmd;       /*!< Program Load cmd */\r\n    uint8_t qprogramLoadCmd;      /*!< Program Load cmd x4*/\r\n    uint8_t pageProgramCmd;       /*!< Page program cmd */\r\n    uint8_t qpageProgramCmd;      /*!< QIO page program cmd */\r\n    uint8_t qppAddrMode;          /*!< QIO page program address mode */\r\n    uint8_t pageReadToCacheCmd;   /*!< Page read comamnd */\r\n    uint8_t getFeaturesCmd;       /*!< GET FEATURES command to read the status */\r\n    uint8_t setFeaturesCmd;       /*!< SET FEATURES command to read the status */\r\n    uint8_t readFromCacheCmd;     /*!< Read from cache command */\r\n    uint8_t fastReadCmd;          /*!< Fast read command */\r\n    uint8_t frDmyClk;             /*!< Fast read command dummy clock */\r\n    uint8_t qpiFastReadCmd;       /*!< QPI fast read command */\r\n    uint8_t qpiFrDmyClk;          /*!< QPI fast read command dummy clock */\r\n    uint8_t fastReadDoCmd;        /*!< Fast read dual output command */\r\n    uint8_t frDoDmyClk;           /*!< Fast read dual output command dummy clock */\r\n    uint8_t fastReadDioCmd;       /*!< Fast read dual io comamnd */\r\n    uint8_t frDioDmyClk;          /*!< Fast read dual io command dummy clock */\r\n    uint8_t fastReadQoCmd;        /*!< Fast read quad output comamnd */\r\n    uint8_t frQoDmyClk;           /*!< Fast read quad output comamnd dummy clock */\r\n    uint8_t fastReadQioCmd;       /*!< Fast read quad io comamnd */\r\n    uint8_t frQioDmyClk;          /*!< Fast read quad io comamnd dummy clock */\r\n    uint8_t qpiFastReadQioCmd;    /*!< QPI fast read quad io comamnd */\r\n    uint8_t qpiFrQioDmyClk;       /*!< QPI fast read QIO dummy clock */\r\n    uint8_t qpiPageProgramCmd;    /*!< QPI program command */\r\n    uint8_t writeVregEnableCmd;   /*!< Enable write reg */\r\n    uint8_t wrEnableIndex;        /*!< Write enable register index */\r\n    uint8_t qeIndex;              /*!< Quad mode enable register index */\r\n    uint8_t busyIndex;            /*!< Busy status register index */\r\n    uint8_t wrEnableBit;          /*!< Write enable bit pos */\r\n    uint8_t qeBit;                /*!< Quad enable bit pos */\r\n    uint8_t busyBit;              /*!< Busy status bit pos */\r\n    uint8_t wrEnableWriteRegLen;  /*!< Register length of write enable */\r\n    uint8_t wrEnableReadRegLen;   /*!< Register length of write enable status */\r\n    uint8_t qeWriteRegLen;        /*!< Register length of contain quad enable */\r\n    uint8_t qeReadRegLen;         /*!< Register length of contain quad enable status */\r\n    uint8_t releasePowerDown;     /*!< Release power down command */\r\n    uint8_t busyReadRegLen;       /*!< Register length of contain busy status */\r\n    uint8_t readRegCmd[4];        /*!< Read register command buffer */\r\n    uint8_t writeRegCmd[4];       /*!< Write register command buffer */\r\n    uint8_t enterQpi;             /*!< Enter qpi command */\r\n    uint8_t exitQpi;              /*!< Exit qpi command */\r\n    uint8_t cReadMode;            /*!< Config data for continuous read mode */\r\n    uint8_t cRExit;               /*!< Config data for exit continuous read mode */\r\n    uint8_t burstWrapCmd;         /*!< Enable burst wrap command */\r\n    uint8_t burstWrapCmdDmyClk;   /*!< Enable burst wrap command dummy clock */\r\n    uint8_t burstWrapDataMode;    /*!< Data and address mode for this command */\r\n    uint8_t burstWrapData;        /*!< Data to enable burst wrap */\r\n    uint8_t deBurstWrapCmd;       /*!< Disable burst wrap command */\r\n    uint8_t deBurstWrapCmdDmyClk; /*!< Disable burst wrap command dummy clock */\r\n    uint8_t deBurstWrapDataMode;  /*!< Data and address mode for this command */\r\n    uint8_t deBurstWrapData;      /*!< Data to disable burst wrap */\r\n    uint16_t timeEsector;         /*!< 4K erase time */\r\n    uint16_t timeE132k;           /*!< 132K erase time */\r\n    uint16_t timePagePgm;         /*!< Page program time */\r\n    uint16_t timeCe;              /*!< Chip erase time in ms */\r\n    uint8_t pdDelay;              /*!< Release power down command delay time for wake up */\r\n    uint8_t qeData;               /*!< QE set data */\r\n} __attribute__((packed)) Nand_Flash_Cfg_Type;\r\n\r\n//BL_Nand_Flash_Program_Bit_Err_Type ATTR_TCM_SECTION NFlash_Pass(uint8_t errorCode, BL_Nand_Flash_OP_Type opType);\r\nBL_Err_Type NFlash_GetJedecId(Nand_Flash_Cfg_Type *flashCfg, uint8_t *data);\r\nBL_Err_Type ATTR_TCM_SECTION NFlash_Erase(Nand_Flash_Cfg_Type *flashCfg, uint32_t startAddr, uint32_t endAddr);\r\nBL_Err_Type ATTR_TCM_SECTION NFlash_Blk128_Erase(Nand_Flash_Cfg_Type *flashCfg, uint32_t blockNum);\r\nBL_Err_Type ATTR_TCM_SECTION NFlash_Write_Enable(Nand_Flash_Cfg_Type *flashCfg);\r\nBL_Err_Type ATTR_TCM_SECTION NFlash_Read(Nand_Flash_Cfg_Type *flashCfg, uint32_t addr, uint8_t *data, uint32_t len);\r\nBL_Err_Type ATTR_TCM_SECTION NFlash_Program(Nand_Flash_Cfg_Type *flashCfg, uint32_t addr, const uint8_t *data, uint32_t len);\r\nBL_Err_Type ATTR_TCM_SECTION NFlash_Page_Read_To_Cache(Nand_Flash_Cfg_Type *flashCfg, uint32_t absolutePageNum);\r\nBL_Err_Type ATTR_TCM_SECTION NFlash_Get_Feature(Nand_Flash_Cfg_Type *flashCfg, uint8_t *data, uint8_t cmdType);\r\nBL_Err_Type ATTR_TCM_SECTION NFlash_Read_From_Cache(Nand_Flash_Cfg_Type *flashCfg, uint32_t addr, uint8_t *data, uint32_t len, uint8_t readType);\r\nBL_Err_Type ATTR_TCM_SECTION NFlash_Program_Execute(Nand_Flash_Cfg_Type *flashCfg, uint32_t addr);\r\nBL_Err_Type ATTR_TCM_SECTION NFlash_Set_Feature(Nand_Flash_Cfg_Type *flashCfg);\r\nBL_Err_Type ATTR_TCM_SECTION NFlash_Program_Load(Nand_Flash_Cfg_Type *flashCfg, uint32_t addr, const uint8_t *data, uint32_t len);\r\nBL_Err_Type ATTR_TCM_SECTION NFlash_Check_Bad_Block(Nand_Flash_Cfg_Type *flashCfg, uint32_t blockNum, uint8_t *data, uint32_t len);\r\nDRESULT ff_disk_read(BYTE pdrv, BYTE *buff, DWORD sector, UINT count);\r\nDRESULT ff_disk_write(BYTE pdrv, const BYTE *buff, DWORD sector, UINT count);\r\nDSTATUS ff_disk_initialize(BYTE pdrv);\r\n\r\n/*@} end of group SFLAH_Public_Functions */\r\n\r\n/*@} end of group SFLAH */\r\n\r\n/*@} end of group BL602_Peripheral_Driver */\r\n\r\n#endif /* __BL602_SFLAH_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_pds.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_pds.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_PDS_H__\r\n#define __BL702_PDS_H__\r\n\r\n#include \"pds_reg.h\"\r\n#include \"bl702_ef_ctrl.h\"\r\n#include \"bl702_aon.h\"\r\n#include \"bl702_hbn.h\"\r\n#include \"bl702_sflash.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  PDS\r\n *  @{\r\n */\r\n\r\n/** @defgroup  PDS_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief PDS LDO level type definition\r\n */\r\ntypedef enum {\r\n    PDS_LDO_LEVEL_0P60V = 0,  /*!< PDS LDO voltage 0.60V */\r\n    PDS_LDO_LEVEL_0P65V = 1,  /*!< PDS LDO voltage 0.65V */\r\n    PDS_LDO_LEVEL_0P70V = 2,  /*!< PDS LDO voltage 0.70V */\r\n    PDS_LDO_LEVEL_0P75V = 3,  /*!< PDS LDO voltage 0.75V */\r\n    PDS_LDO_LEVEL_0P80V = 4,  /*!< PDS LDO voltage 0.80V */\r\n    PDS_LDO_LEVEL_0P85V = 5,  /*!< PDS LDO voltage 0.85V */\r\n    PDS_LDO_LEVEL_0P90V = 6,  /*!< PDS LDO voltage 0.90V */\r\n    PDS_LDO_LEVEL_0P95V = 7,  /*!< PDS LDO voltage 0.95V */\r\n    PDS_LDO_LEVEL_1P00V = 8,  /*!< PDS LDO voltage 1.00V */\r\n    PDS_LDO_LEVEL_1P05V = 9,  /*!< PDS LDO voltage 1.05V */\r\n    PDS_LDO_LEVEL_1P10V = 10, /*!< PDS LDO voltage 1.10V */\r\n    PDS_LDO_LEVEL_1P15V = 11, /*!< PDS LDO voltage 1.15V */\r\n    PDS_LDO_LEVEL_1P20V = 12, /*!< PDS LDO voltage 1.20V */\r\n    PDS_LDO_LEVEL_1P25V = 13, /*!< PDS LDO voltage 1.25V */\r\n    PDS_LDO_LEVEL_1P30V = 14, /*!< PDS LDO voltage 1.30V */\r\n    PDS_LDO_LEVEL_1P35V = 15, /*!< PDS LDO voltage 1.35V */\r\n} PDS_LDO_LEVEL_Type;\r\n\r\n/**\r\n *  @brief PDS RAM configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint32_t PDS_RAM_CFG_0KB_16KB_CPU_RAM_RET1N  : 1;  /*!< [0] 0~16KB cpu_ram RET1N */\r\n    uint32_t PDS_RAM_CFG_16KB_32KB_CPU_RAM_RET1N : 1;  /*!< [1] 16~32KB cpu_ram RET1N */\r\n    uint32_t PDS_RAM_CFG_32KB_48KB_CPU_RAM_RET1N : 1;  /*!< [2] 32~48KB cpu_ram RET1N */\r\n    uint32_t PDS_RAM_CFG_48KB_64KB_CPU_RAM_RET1N : 1;  /*!< [3] 48~64KB cpu_ram RET1N */\r\n    uint32_t PDS_RAM_CFG_0KB_16KB_CPU_RAM_RET2N  : 1;  /*!< [4] 0~16KB cpu_ram RET2N */\r\n    uint32_t PDS_RAM_CFG_16KB_32KB_CPU_RAM_RET2N : 1;  /*!< [5] 16~32KB cpu_ram RET2N */\r\n    uint32_t PDS_RAM_CFG_32KB_48KB_CPU_RAM_RET2N : 1;  /*!< [6] 32~48KB cpu_ram RET2N */\r\n    uint32_t PDS_RAM_CFG_48KB_64KB_CPU_RAM_RET2N : 1;  /*!< [7] 48~64KB cpu_ram RET2N */\r\n    uint32_t PDS_RAM_CFG_0KB_16KB_CPU_RAM_PGEN   : 1;  /*!< [8] 0~16KB cpu_ram PGEN */\r\n    uint32_t PDS_RAM_CFG_16KB_32KB_CPU_RAM_PGEN  : 1;  /*!< [9] 16~32KB cpu_ram PGEN */\r\n    uint32_t PDS_RAM_CFG_32KB_48KB_CPU_RAM_PGEN  : 1;  /*!< [10] 32~48KB cpu_ram PGEN */\r\n    uint32_t PDS_RAM_CFG_48KB_64KB_CPU_RAM_PGEN  : 1;  /*!< [11] 48~64KB cpu_ram PGEN */\r\n    uint32_t PDS_RAM_CFG_RSV                     : 20; /*!< [31:12]reserve */\r\n} PDS_RAM_CFG_Type;\r\n\r\n/**\r\n *  @brief PDS PAD pin configuration type definition\r\n */\r\ntypedef enum {\r\n    PDS_PAD_PIN_GPIO_17, /*!< PAD GPIO 17 */\r\n    PDS_PAD_PIN_GPIO_18, /*!< PAD GPIO 18 */\r\n    PDS_PAD_PIN_GPIO_19, /*!< PAD GPIO 19 */\r\n    PDS_PAD_PIN_GPIO_20, /*!< PAD GPIO 20 */\r\n    PDS_PAD_PIN_GPIO_21, /*!< PAD GPIO 21 */\r\n    PDS_PAD_PIN_GPIO_22, /*!< PAD GPIO 22 */\r\n    PDS_PAD_PIN_GPIO_23, /*!< PAD GPIO 23 */\r\n    PDS_PAD_PIN_GPIO_24, /*!< PAD GPIO 24 */\r\n    PDS_PAD_PIN_GPIO_25, /*!< PAD GPIO 25 */\r\n    PDS_PAD_PIN_GPIO_26, /*!< PAD GPIO 26 */\r\n    PDS_PAD_PIN_GPIO_27, /*!< PAD GPIO 27 */\r\n    PDS_PAD_PIN_GPIO_28, /*!< PAD GPIO 28 */\r\n} PDS_PAD_PIN_Type;\r\n\r\n/**\r\n *  @brief PDS PAD configuration type definition\r\n */\r\ntypedef enum {\r\n    PDS_PAD_CFG_PULL_NONE, /*!< no PD/PU/IE on PAD */\r\n    PDS_PAD_CFG_PULL_DOWN, /*!< Pulldown PAD */\r\n    PDS_PAD_CFG_PULL_UP,   /*!< Pullup PAD */\r\n    PDS_PAD_CFG_ACTIVE_IE, /*!< Active IE */\r\n} PDS_PAD_CFG_Type;\r\n\r\n/**\r\n *  @brief PDS configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint32_t pdsStart                : 1; /*!< [0]PDS Start */\r\n    uint32_t sleepForever            : 1; /*!< [1]PDS sleep forever */\r\n    uint32_t xtalForceOff            : 1; /*!< [2]Power off xtal force */\r\n    uint32_t saveWifiState           : 1; /*!< [3]Save WIFI State Before Enter PDS */\r\n    uint32_t dcdc18Off               : 1; /*!< [4]power down dcdc18 during PDS */\r\n    uint32_t bgSysOff                : 1; /*!< [5]power down bg_sys during PDS */\r\n    uint32_t gpioIePuPd              : 1; /*!< [6]allow PDS Control the GPIO IE/PU/PD at Sleep Mode */\r\n    uint32_t puFlash                 : 1; /*!< [7]turn off Flash Power During PDS */\r\n    uint32_t clkOff                  : 1; /*!< [8]gate clock during PDS (each pwr domain has its own control) */\r\n    uint32_t memStby                 : 1; /*!< [9]mem_stby during PDS (each power domain can has its own control) */\r\n    uint32_t swPuFlash               : 1; /*!< [10]SW Turn on Flash */\r\n    uint32_t isolation               : 1; /*!< [11]Isolation during PDS (each power domain can has its own control) */\r\n    uint32_t waitXtalRdy             : 1; /*!< [12]wait XTAL Ready during before PDS Interrupt */\r\n    uint32_t pdsPwrOff               : 1; /*!< [13]Power off during PDS (each power domain can has its own control) */\r\n    uint32_t xtalOff                 : 1; /*!< [14]xtal power down during PDS */\r\n    uint32_t socEnbForceOn           : 1; /*!< [15]pds_soc_enb always active */\r\n    uint32_t pdsRstSocEn             : 1; /*!< [16]pds_rst controlled by PDS */\r\n    uint32_t pdsRC32mOn              : 1; /*!< [17]RC32M always on or RC32M on/off controlled by PDS state */\r\n    uint32_t pdsLdoVselEn            : 1; /*!< [18]PDS \"SLEEP\" control LDO voltage enable */\r\n    uint32_t pdsRamLowPowerWithClkEn : 1; /*!< [19]Control SRAM Low Power with CLK (Sync) */\r\n    uint32_t reserved20              : 1; /*!< [20]Reserved */\r\n    uint32_t cpu0WfiMask             : 1; /*!< [21]pds start condition mask np_wfi */\r\n    uint32_t ldo11Off                : 1; /*!< [22]power down ldo11 during PDS */\r\n    uint32_t pdsForceRamClkEn        : 1; /*!< [23]Force SRAM CLK Enable */\r\n    uint32_t pdsLdoVol               : 4; /*!< [27:24]LDO voltage value in PDS mode */\r\n    uint32_t pdsCtlRfSel             : 2; /*!< [29:28]select the way RF controlled by PDS */\r\n    uint32_t pdsCtlPllSel            : 2; /*!< [31:30]select the way PLL controlled by PDS */\r\n} PDS_CFG_Type;\r\n\r\n/**\r\n *  @brief PDS configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint32_t pdsStart                : 1; /*!< [0]PDS Start */\r\n    uint32_t sleepForever            : 1; /*!< [1]PDS sleep forever */\r\n    uint32_t xtalForceOff            : 1; /*!< [2]Power off xtal force */\r\n    uint32_t saveWifiState           : 1; /*!< [3]Save WIFI State Before Enter PDS */\r\n    uint32_t dcdc18Off               : 1; /*!< [4]power down dcdc18 during PDS */\r\n    uint32_t bgSysOff                : 1; /*!< [5]power down bg_sys during PDS */\r\n    uint32_t gpioIePuPd              : 1; /*!< [6]allow PDS Control the GPIO IE/PU/PD at Sleep Mode */\r\n    uint32_t puFlash                 : 1; /*!< [7]turn off Flash Power During PDS */\r\n    uint32_t clkOff                  : 1; /*!< [8]gate clock during PDS (each pwr domain has its own control) */\r\n    uint32_t memStby                 : 1; /*!< [9]mem_stby during PDS (each power domain can has its own control) */\r\n    uint32_t swPuFlash               : 1; /*!< [10]SW Turn on Flash */\r\n    uint32_t isolation               : 1; /*!< [11]Isolation during PDS (each power domain can has its own control) */\r\n    uint32_t waitXtalRdy             : 1; /*!< [12]wait XTAL Ready during before PDS Interrupt */\r\n    uint32_t pdsPwrOff               : 1; /*!< [13]Power off during PDS (each power domain can has its own control) */\r\n    uint32_t xtalOff                 : 1; /*!< [14]xtal power down during PDS */\r\n    uint32_t socEnbForceOn           : 1; /*!< [15]pds_soc_enb always active */\r\n    uint32_t pdsRstSocEn             : 1; /*!< [16]pds_rst controlled by PDS */\r\n    uint32_t pdsRC32mOn              : 1; /*!< [17]RC32M always on or RC32M on/off controlled by PDS state */\r\n    uint32_t pdsLdoVselEn            : 1; /*!< [18]PDS \"SLEEP\" control LDO voltage enable */\r\n    uint32_t pdsRamLowPowerWithClkEn : 1; /*!< [19]Control SRAM Low Power with CLK (Sync) */\r\n    uint32_t reserved20              : 1; /*!< [20]Reserved */\r\n    uint32_t cpu0WfiMask             : 1; /*!< [21]pds start condition mask np_wfi */\r\n    uint32_t ldo11Off                : 1; /*!< [22]power down ldo11 during PDS */\r\n    uint32_t pdsForceRamClkEn        : 1; /*!< [23]Force SRAM CLK Enable */\r\n    uint32_t pdsLdoVol               : 4; /*!< [27:24]LDO voltage value in PDS mode */\r\n    uint32_t pdsCtlRfSel             : 2; /*!< [29:28]select the way RF controlled by PDS */\r\n    uint32_t pdsCtlPllSel            : 2; /*!< [31:30]select the way PLL controlled by PDS */\r\n} PDS_CTL_Type;\r\n\r\n/**\r\n *  @brief PDS force configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint32_t forceCpuPwrOff  : 1;  /*!< [0]manual force NP power off */\r\n    uint32_t rsv1            : 1;  /*!< [1]reserve */\r\n    uint32_t forceBzPwrOff   : 1;  /*!< [2]manual force BZ power off */\r\n    uint32_t forceUsbPwrOff  : 1;  /*!< [3]manual force USB power off */\r\n    uint32_t forceCpuIsoEn   : 1;  /*!< [4]manual force NP isolation */\r\n    uint32_t rsv5            : 1;  /*!< [5]reserve */\r\n    uint32_t forceBzIsoEn    : 1;  /*!< [6]manual force BZ isolation */\r\n    uint32_t forceUsbIsoEn   : 1;  /*!< [7]manual force USB isolation */\r\n    uint32_t forceCpuPdsRst  : 1;  /*!< [8]manual force NP pds reset */\r\n    uint32_t rsv9            : 1;  /*!< [9]reserve */\r\n    uint32_t forceBzPdsRst   : 1;  /*!< [10]manual force BZ pds reset */\r\n    uint32_t forceUsbPdsRst  : 1;  /*!< [11]manual force USB pds reset */\r\n    uint32_t forceCpuMemStby : 1;  /*!< [12]manual force NP memory sleep */\r\n    uint32_t rsv13           : 1;  /*!< [13]reserve */\r\n    uint32_t forceBzMemStby  : 1;  /*!< [14]manual force BZ memory sleep */\r\n    uint32_t forceUsbMemStby : 1;  /*!< [15]manual force USB memory sleep */\r\n    uint32_t forceCpuGateClk : 1;  /*!< [16]manual force NP clock gated */\r\n    uint32_t rsv17           : 1;  /*!< [17]reserve */\r\n    uint32_t forceBzGateClk  : 1;  /*!< [18]manual force BZ clock gated */\r\n    uint32_t forceUsbGateClk : 1;  /*!< [19]manual force USB clock gated */\r\n    uint32_t rsv20_31        : 12; /*!< [31:20]reserve */\r\n} PDS_CTL2_Type;\r\n\r\n/**\r\n *  @brief PDS force configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint32_t rsv0             : 1; /*!< [0]reserve */\r\n    uint32_t forceMiscPwrOff  : 1; /*!< [1]manual force MISC pwr_off */\r\n    uint32_t forceBlePwrOff   : 1; /*!< [2]manual force BZ_BLE pwr_off */\r\n    uint32_t rsv3_4           : 2; /*!< [4:3]reserve */\r\n    uint32_t forceBleIsoEn    : 1; /*!< [5]manual force BZ_BLE iso_en */\r\n    uint32_t rsv6             : 1; /*!< [6]reserve */\r\n    uint32_t forceMiscPdsRst  : 1; /*!< [7]manual force MISC pds_rst */\r\n    uint32_t forceBlePdsRst   : 1; /*!< [8]manual force BZ_BLE pds_rst */\r\n    uint32_t rsv9             : 1; /*!< [9]reserve */\r\n    uint32_t forceMiscMemStby : 1; /*!< [10]manual force MISC mem_stby */\r\n    uint32_t forceBleMemStby  : 1; /*!< [11]manual force BZ_BLE mem_stby */\r\n    uint32_t rsv12            : 1; /*!< [12]reserve */\r\n    uint32_t forceMiscGateClk : 1; /*!< [13]manual force MISC gate_clk */\r\n    uint32_t forceBleGateClk  : 1; /*!< [14]manual force BZ_BLE gate_clk */\r\n    uint32_t rsv15_23         : 9; /*!< [23:15]reserve */\r\n    uint32_t CpuIsoEn         : 1; /*!< [24]make NP isolated at PDS Sleep state */\r\n    uint32_t rsv25_26         : 2; /*!< [26:25]reserve */\r\n    uint32_t BzIsoEn          : 1; /*!< [27]make BZ isolated at PDS Sleep state */\r\n    uint32_t BleIsoEn         : 1; /*!< [28]make Ble isolated at PDS Sleep state */\r\n    uint32_t UsbIsoEn         : 1; /*!< [29]make USB isolated at PDS Sleep state */\r\n    uint32_t MiscIsoEn        : 1; /*!< [30]make misc isolated at PDS Sleep state */\r\n    uint32_t rsv31            : 1; /*!< [31]reserve */\r\n} PDS_CTL3_Type;\r\n\r\n/**\r\n *  @brief PDS force configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint32_t cpuPwrOff     : 1; /*!< [0] */\r\n    uint32_t cpuRst        : 1; /*!< [1] */\r\n    uint32_t cpuMemStby    : 1; /*!< [2] */\r\n    uint32_t cpuGateClk    : 1; /*!< [3] */\r\n    uint32_t rsv4_11       : 8; /*!< [11:4]reserve */\r\n    uint32_t BzPwrOff      : 1; /*!< [12] */\r\n    uint32_t BzRst         : 1; /*!< [13] */\r\n    uint32_t BzMemStby     : 1; /*!< [14] */\r\n    uint32_t BzGateClk     : 1; /*!< [15] */\r\n    uint32_t BlePwrOff     : 1; /*!< [16] */\r\n    uint32_t BleRst        : 1; /*!< [17] */\r\n    uint32_t BleMemStby    : 1; /*!< [18] */\r\n    uint32_t BleGateClk    : 1; /*!< [19] */\r\n    uint32_t UsbPwrOff     : 1; /*!< [20] */\r\n    uint32_t UsbRst        : 1; /*!< [21] */\r\n    uint32_t UsbMemStby    : 1; /*!< [22] */\r\n    uint32_t UsbGateClk    : 1; /*!< [23] */\r\n    uint32_t MiscPwrOff    : 1; /*!< [24] */\r\n    uint32_t MiscRst       : 1; /*!< [25] */\r\n    uint32_t MiscMemStby   : 1; /*!< [26] */\r\n    uint32_t MiscGateClk   : 1; /*!< [27] */\r\n    uint32_t rsv28_29      : 2; /*!< [29:28]reserve */\r\n    uint32_t MiscAnaPwrOff : 1; /*!< [30] */\r\n    uint32_t MiscDigPwrOff : 1; /*!< [31] */\r\n} PDS_CTL4_Type;\r\n\r\n/**\r\n *  @brief PDS default level configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    PDS_CTL_Type pdsCtl;   /*!< PDS_CTL configuration */\r\n    PDS_CTL2_Type pdsCtl2; /*!< PDS_CTL2 configuration */\r\n    PDS_CTL3_Type pdsCtl3; /*!< PDS_CTL3 configuration */\r\n    PDS_CTL4_Type pdsCtl4; /*!< PDS_CTL4 configuration */\r\n} PDS_DEFAULT_LV_CFG_Type;\r\n\r\n/**\r\n *  @brief PDS interrupt type definition\r\n */\r\ntypedef enum {\r\n    PDS_INT_WAKEUP = 0,    /*!< PDS wakeup interrupt(assert bit while wakeup, include PDS_Timer/...) */\r\n    PDS_INT_RF_DONE,       /*!< PDS RF done interrupt */\r\n    PDS_INT_PLL_DONE,      /*!< PDS PLL done interrupt */\r\n    PDS_INT_PDS_SLEEP_CNT, /*!< wakeup trigger by pds_sleep_cnt=0 */\r\n    PDS_INT_HBN_IRQ_OUT0,  /*!< wakeup trigger by hbn_irq_out[0] */\r\n    PDS_INT_HBN_IRQ_OUT1,  /*!< wakeup trigger by hbn_irq_out[1] */\r\n    PDS_INT_GPIO_IRQ,      /*!< wakeup trigger by gpio_irq */\r\n    PDS_INT_IRRX,          /*!< wakeup trigger by irrx_int */\r\n    PDS_INT_BLE_SLP_IRQ,   /*!< wakeup trigger by ble_slp_irq */\r\n    PDS_INT_USB_WKUP,      /*!< wakeup trigger by usb_wkup */\r\n    PDS_INT_KYS_QDEC,      /*!< wakeup trigger by kys_int or qdec */\r\n    PDS_INT_MAX,           /*!< PDS int max number */\r\n} PDS_INT_Type;\r\n\r\n/**\r\n *  @brief PDS vddcore GPIO interrupt type definition\r\n */\r\ntypedef enum {\r\n    PDS_VDDCORE_GPIO_SRC_GPIO_0, /*!< PDS VDDCORE GPIO0 as PDS interrupt source */\r\n    PDS_VDDCORE_GPIO_SRC_GPIO_1, /*!< PDS VDDCORE GPIO1 as PDS interrupt source */\r\n    PDS_VDDCORE_GPIO_SRC_GPIO_2, /*!< PDS VDDCORE GPIO2 as PDS interrupt source */\r\n    PDS_VDDCORE_GPIO_SRC_GPIO_3, /*!< PDS VDDCORE GPIO3 as PDS interrupt source */\r\n    PDS_VDDCORE_GPIO_SRC_GPIO_4, /*!< PDS VDDCORE GPIO4 as PDS interrupt source */\r\n    PDS_VDDCORE_GPIO_SRC_GPIO_5, /*!< PDS VDDCORE GPIO5 as PDS interrupt source */\r\n    PDS_VDDCORE_GPIO_SRC_GPIO_6, /*!< PDS VDDCORE GPIO6 as PDS interrupt source */\r\n    PDS_VDDCORE_GPIO_SRC_GPIO_7, /*!< PDS VDDCORE GPIO7 as PDS interrupt source */\r\n} PDS_VDDCORE_GPIO_SRC_Type;\r\n\r\n/**\r\n *  @brief PDS reset event type definition\r\n */\r\ntypedef enum {\r\n    PDS_RST_EVENT_BUS_RST,        /*!< hreset_n (Bus Reset) */\r\n    PDS_RST_EVENT_HBN_PWR_ON_RST, /*!< pwr_rst_n (hbn power on reset) */\r\n    PDS_RST_EVENT_PDS_RST,        /*!< pds_rst_n (pds reset) */\r\n    PDS_RST_EVENT_MAX,            /*!< PDS rst event max number */\r\n} PDS_RST_EVENT_Type;\r\n\r\n/**\r\n *  @brief PDS PLL status type definition\r\n */\r\ntypedef enum {\r\n    PDS_PLL_STS_OFF = 0,   /*!< 2'b00 */\r\n    PDS_PLL_STS_SFREG = 1, /*!< 2'b01 */\r\n    PDS_PLL_STS_PU = 2,    /*!< 2'b10 */\r\n    PDS_PLL_STS_RDY = 3,   /*!< 2'b11 */\r\n} PDS_PLL_STS_Type;\r\n\r\n/**\r\n *  @brief PDS RF status type definition\r\n */\r\ntypedef enum {\r\n    PDS_RF_STS_OFF = 0,        /*!< 4'b0000 */\r\n    PDS_RF_STS_PU_MBG = 1,     /*!< 4'b0001 */\r\n    PDS_RF_STS_PU_LDO15RF = 3, /*!< 4'b0011 */\r\n    PDS_RF_STS_PU_SFREG = 7,   /*!< 4'b0111 */\r\n    PDS_RF_STS_BZ_EN_AON = 15, /*!< 4'b1111 */\r\n} PDS_RF_STS_Type;\r\n\r\n/**\r\n *  @brief PDS status type definition\r\n */\r\ntypedef enum {\r\n    PDS_STS_IDLE = 0,            /*!< 4'b0000 */\r\n    PDS_STS_ECG = 8,             /*!< 4'b1000 */\r\n    PDS_STS_ERST = 12,           /*!< 4'b1100 */\r\n    PDS_STS_EISO = 15,           /*!< 4'b1111 */\r\n    PDS_STS_POFF = 7,            /*!< 4'b0111 */\r\n    PDS_STS_PRE_BGON = 3,        /*!< 4'b0011 */\r\n    PDS_STS_PRE_BGON1 = 1,       /*!< 4'b0001 */\r\n    PDS_STS_BGON = 5,            /*!< 4'b0101 */\r\n    PDS_STS_CLK_SW_32M = 4,      /*!< 4'b0100 */\r\n    PDS_STS_PON_DCDC = 6,        /*!< 4'b0110 */\r\n    PDS_STS_PON_LDO11_MISC = 14, /*!< 4'b1110 */\r\n    PDS_STS_PON = 10,            /*!< 4'b1010 */\r\n    PDS_STS_DISO = 2,            /*!< 4'b0010 */\r\n    PDS_STS_DCG = 13,            /*!< 4'b1101 */\r\n    PDS_STS_DRST = 11,           /*!< 4'b1011 */\r\n    PDS_STS_WAIT_EFUSE = 9,      /*!< 4'b1001 */\r\n} PDS_STS_Type;\r\n\r\n/**\r\n *  @brief PLL XTAL type definition\r\n */\r\ntypedef enum {\r\n    PDS_PLL_XTAL_NONE,  /*!< XTAL is none */\r\n    PDS_PLL_XTAL_32M,   /*!< XTAL is 32M */\r\n    PDS_PLL_XTAL_RC32M, /*!< XTAL is RC32M */\r\n} PDS_PLL_XTAL_Type;\r\n\r\n/**\r\n *  @brief PLL output clock type definition\r\n */\r\ntypedef enum {\r\n    PDS_PLL_CLK_480M, /*!< PLL output clock:480M */\r\n    PDS_PLL_CLK_240M, /*!< PLL output clock:240M */\r\n    PDS_PLL_CLK_192M, /*!< PLL output clock:192M */\r\n    PDS_PLL_CLK_160M, /*!< PLL output clock:160M */\r\n    PDS_PLL_CLK_120M, /*!< PLL output clock:120M */\r\n    PDS_PLL_CLK_96M,  /*!< PLL output clock:96M */\r\n    PDS_PLL_CLK_80M,  /*!< PLL output clock:80M */\r\n    PDS_PLL_CLK_48M,  /*!< PLL output clock:48M */\r\n    PDS_PLL_CLK_32M,  /*!< PLL output clock:32M */\r\n} PDS_PLL_CLK_Type;\r\n\r\n/**\r\n *  @brief PDS level 0-7 mode HBN GPIO interrupt trigger type definition\r\n */\r\ntypedef enum {\r\n    PDS_AON_GPIO_INT_TRIGGER_SYNC_FALLING_EDGE,  /*!< PDS level 0-7 mode HBN GPIO INT trigger type: sync falling edge trigger */\r\n    PDS_AON_GPIO_INT_TRIGGER_SYNC_RISING_EDGE,   /*!< PDS level 0-7 mode HBN GPIO INT trigger type: sync rising edge trigger */\r\n    PDS_AON_GPIO_INT_TRIGGER_SYNC_LOW_LEVEL,     /*!< PDS level 0-7 mode HBN GPIO INT trigger type: sync low level trigger */\r\n    PDS_AON_GPIO_INT_TRIGGER_SYNC_HIGH_LEVEL,    /*!< PDS level 0-7 mode HBN GPIO INT trigger type: sync high level trigger */\r\n    PDS_AON_GPIO_INT_TRIGGER_ASYNC_FALLING_EDGE, /*!< PDS level 0-7 mode HBN GPIO INT trigger type: async falling edge trigger */\r\n    PDS_AON_GPIO_INT_TRIGGER_ASYNC_RISING_EDGE,  /*!< PDS level 0-7 mode HBN GPIO INT trigger type: async rising edge trigger */\r\n    PDS_AON_GPIO_INT_TRIGGER_ASYNC_LOW_LEVEL,    /*!< PDS level 0-7 mode HBN GPIO INT trigger type: async low level trigger */\r\n    PDS_AON_GPIO_INT_TRIGGER_ASYNC_HIGH_LEVEL,   /*!< PDS level 0-7 mode HBN GPIO INT trigger type: async high level trigger */\r\n} PDS_AON_GPIO_INT_Trigger_Type;\r\n\r\n/**\r\n *  @brief PDS APP configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint8_t pdsLevel;                                 /*!< PDS level */\r\n    uint8_t turnOffXtal32m;                           /*!< Wheather turn off XTAL32M */\r\n    uint8_t turnOffDll;                               /*!< Wheather turn off DLL */\r\n    uint8_t turnOffRF;                                /*!< Wheather turn off RF */\r\n    uint8_t useXtal32k;                               /*!< Wheather use xtal 32K as 32K clock source,otherwise use rc32k */\r\n    uint8_t pdsAonGpioWakeupSrc;                      /*!< PDS level 0-7,31 mode aon GPIO Wakeup source(HBN wakeup pin) */\r\n    PDS_AON_GPIO_INT_Trigger_Type pdsAonGpioTrigType; /*!< PDS level 0-7,31 mode aon GPIO Triger type(HBN wakeup pin) */\r\n    uint8_t powerDownFlash;                           /*!< Whether power down flash */\r\n    uint8_t pdsHoldGpio;                              /*!< Whether pds hold gpio level */\r\n    uint8_t turnOffFlashPad;                          /*!< Whether turn off flash pad(GPIO17-GPIO22, GPIO23-GPIO28) */\r\n    uint8_t flashPinCfg;                              /*!< 0 ext flash 23-28, 1 internal flash 23-28, 2 internal flash 23-28, 3 ext flash 17-22 */\r\n    uint8_t turnoffPLL;                               /*!< Whether trun off PLL */\r\n    uint8_t xtalType;                                 /*!< XTal type, used when user choose turn off PLL, PDS will turn on when exit PDS mode */\r\n    uint8_t flashContRead;                            /*!< Whether enable flash continue read */\r\n    uint32_t sleepTime;                               /*!< PDS sleep time */\r\n    SPI_Flash_Cfg_Type *flashCfg;                     /*!< Flash config pointer, used when power down flash */\r\n    HBN_LDO_LEVEL_Type ldoLevel;                      /*!< LDO level */\r\n    void (*preCbFun)(void);                           /*!< Pre callback function */\r\n    void (*postCbFun)(void);                          /*!< Post callback function */\r\n} PDS_APP_CFG_Type;\r\n\r\n/**\r\n *  @brief PDS LDO voltage type definition\r\n */\r\ntypedef enum {\r\n    PDS_LDO_VOLTAGE_0P60V, /*!< PDS LDO voltage 0.60V */\r\n    PDS_LDO_VOLTAGE_0P65V, /*!< PDS LDO voltage 0.65V */\r\n    PDS_LDO_VOLTAGE_0P70V, /*!< PDS LDO voltage 0.70V */\r\n    PDS_LDO_VOLTAGE_0P75V, /*!< PDS LDO voltage 0.75V */\r\n    PDS_LDO_VOLTAGE_0P80V, /*!< PDS LDO voltage 0.80V */\r\n    PDS_LDO_VOLTAGE_0P85V, /*!< PDS LDO voltage 0.85V */\r\n    PDS_LDO_VOLTAGE_0P90V, /*!< PDS LDO voltage 0.9V */\r\n    PDS_LDO_VOLTAGE_0P95V, /*!< PDS LDO voltage 0.95V */\r\n    PDS_LDO_VOLTAGE_1P00V, /*!< PDS LDO voltage 1.0V */\r\n    PDS_LDO_VOLTAGE_1P05V, /*!< PDS LDO voltage 1.05V */\r\n    PDS_LDO_VOLTAGE_1P10V, /*!< PDS LDO voltage 1.1V */\r\n    PDS_LDO_VOLTAGE_1P15V, /*!< PDS LDO voltage 1.15V */\r\n    PDS_LDO_VOLTAGE_1P20V, /*!< PDS LDO voltage 1.2V */\r\n    PDS_LDO_VOLTAGE_1P25V, /*!< PDS LDO voltage 1.25V */\r\n    PDS_LDO_VOLTAGE_1P30V, /*!< PDS LDO voltage 1.3V */\r\n    PDS_LDO_VOLTAGE_1P35V, /*!< PDS LDO voltage 1.35V */\r\n} PDS_LDO_VOLTAGE_Type;\r\n\r\n/**\r\n *  @brief PDS auto power down configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type mbgPower;      /*!< PDS auto [31] MBG power */\r\n    BL_Fun_Type ldo18rfPower;  /*!< PDS auto [30] LDO18RF power */\r\n    BL_Fun_Type sfregPower;    /*!< PDS auto [29] SF_REG power */\r\n    BL_Fun_Type pllPower;      /*!< PDS auto [28] PLL power */\r\n    BL_Fun_Type cpu0Power;     /*!< PDS auto [19] NP power */\r\n    BL_Fun_Type rc32mPower;    /*!< PDS auto [17] RC32M power */\r\n    BL_Fun_Type xtalPower;     /*!< PDS auto [14] XTAL power */\r\n    BL_Fun_Type allPower;      /*!< PDS auto [13] all power */\r\n    BL_Fun_Type isoPower;      /*!< PDS auto [11] ISO power */\r\n    BL_Fun_Type bzPower;       /*!< PDS auto [10] BZ power */\r\n    BL_Fun_Type sramDisStanby; /*!< PDS auto [9] SRAM memory stanby disable */\r\n    BL_Fun_Type cgPower;       /*!< PDS auto [8] CG power */\r\n    BL_Fun_Type cpu1Power;     /*!< PDS auto [7] AP power */\r\n    BL_Fun_Type usbPower;      /*!< PDS auto [3] USB power */\r\n} PDS_AUTO_POWER_DOWN_CFG_Type;\r\n\r\n/**\r\n *  @brief PDS auto configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    PDS_LDO_VOLTAGE_Type vddcoreVol; /*!< PDS auto [27:24] VDDCORE voltage, reference 0x4001F80C[27:24], recommended 0xA */\r\n    BL_Fun_Type vddcoreVolEn;        /*!< PDS auto [18] VDDCORE voltage enable bit */\r\n    BL_Fun_Type cpu0NotNeedWFI;      /*!< PDS auto [21] NP not need WFI to get in PDS mode */\r\n    BL_Fun_Type cpu1NotNeedWFI;      /*!< PDS auto [20] AP not need WFI to get in PDS mode */\r\n    BL_Fun_Type busReset;            /*!< PDS auto [16] bus reset bit, reset after wake up from PDS mode */\r\n    BL_Fun_Type disIrqWakeUp;        /*!< PDS auto [15] disable IRQ request to wake up from PDS mode, except PDS counter IRQ */\r\n    BL_Fun_Type powerOffXtalForever; /*!< PDS auto [2] power off xtal after get in PDS mode, and never power on xtal after wake up */\r\n    BL_Fun_Type sleepForever;        /*!< PDS auto [1] sleep forever after get in PDS mode, need reset system to restart */\r\n} PDS_AUTO_NORMAL_CFG_Type;\r\n\r\n/**\r\n *  @brief PDS force type definition\r\n */\r\ntypedef enum {\r\n    PDS_FORCE_NP,  /*!< PDS force NP */\r\n    PDS_FORCE_RSV, /*!< rsv */\r\n    PDS_FORCE_BZ,  /*!< PDS force BZ */\r\n    PDS_FORCE_USB, /*!< PDS force USB */\r\n} PDS_FORCE_Type;\r\n\r\n/**\r\n *  @brief PDS force type definition\r\n */\r\ntypedef enum {\r\n    AUDIO_PLL_12288000_HZ, /*!< PDS AUDIO PLL SET AS 12.288MHZ */\r\n    AUDIO_PLL_11289600_HZ, /*!< PDS AUDIO PLL SET AS 11.2896HZ */\r\n    AUDIO_PLL_5644800_HZ,  /*!< PDS AUDIO PLL SET AS 2.822400HZ */\r\n    AUDIO_PLL_24576000_HZ, /*!< PDS AUDIO PLL SET AS 24.576000MHZ */\r\n    AUDIO_PLL_24000000_HZ, /*!< PDS AUDIO PLL SET AS 24.000000MHZ */\r\n} PDS_AUDIO_PLL_Type;\r\n\r\n/*@} end of group PDS_Public_Types */\r\n\r\n/** @defgroup  PDS_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  PDS_LDO_LEVEL_TYPE\r\n *  @{\r\n */\r\n#define IS_PDS_LDO_LEVEL_TYPE(type) (((type) == PDS_LDO_LEVEL_0P60V) || \\\r\n                                     ((type) == PDS_LDO_LEVEL_0P65V) || \\\r\n                                     ((type) == PDS_LDO_LEVEL_0P70V) || \\\r\n                                     ((type) == PDS_LDO_LEVEL_0P75V) || \\\r\n                                     ((type) == PDS_LDO_LEVEL_0P80V) || \\\r\n                                     ((type) == PDS_LDO_LEVEL_0P85V) || \\\r\n                                     ((type) == PDS_LDO_LEVEL_0P90V) || \\\r\n                                     ((type) == PDS_LDO_LEVEL_0P95V) || \\\r\n                                     ((type) == PDS_LDO_LEVEL_1P00V) || \\\r\n                                     ((type) == PDS_LDO_LEVEL_1P05V) || \\\r\n                                     ((type) == PDS_LDO_LEVEL_1P10V) || \\\r\n                                     ((type) == PDS_LDO_LEVEL_1P15V) || \\\r\n                                     ((type) == PDS_LDO_LEVEL_1P20V) || \\\r\n                                     ((type) == PDS_LDO_LEVEL_1P25V) || \\\r\n                                     ((type) == PDS_LDO_LEVEL_1P30V) || \\\r\n                                     ((type) == PDS_LDO_LEVEL_1P35V))\r\n\r\n/** @defgroup  PDS_PAD_PIN_TYPE\r\n *  @{\r\n */\r\n#define IS_PDS_PAD_PIN_TYPE(type) (((type) == PDS_PAD_PIN_GPIO_17) || \\\r\n                                   ((type) == PDS_PAD_PIN_GPIO_18) || \\\r\n                                   ((type) == PDS_PAD_PIN_GPIO_19) || \\\r\n                                   ((type) == PDS_PAD_PIN_GPIO_20) || \\\r\n                                   ((type) == PDS_PAD_PIN_GPIO_21) || \\\r\n                                   ((type) == PDS_PAD_PIN_GPIO_22) || \\\r\n                                   ((type) == PDS_PAD_PIN_GPIO_23) || \\\r\n                                   ((type) == PDS_PAD_PIN_GPIO_24) || \\\r\n                                   ((type) == PDS_PAD_PIN_GPIO_25) || \\\r\n                                   ((type) == PDS_PAD_PIN_GPIO_26) || \\\r\n                                   ((type) == PDS_PAD_PIN_GPIO_27) || \\\r\n                                   ((type) == PDS_PAD_PIN_GPIO_28))\r\n\r\n/** @defgroup  PDS_PAD_CFG_TYPE\r\n *  @{\r\n */\r\n#define IS_PDS_PAD_CFG_TYPE(type) (((type) == PDS_PAD_CFG_PULL_NONE) || \\\r\n                                   ((type) == PDS_PAD_CFG_PULL_DOWN) || \\\r\n                                   ((type) == PDS_PAD_CFG_PULL_UP) ||   \\\r\n                                   ((type) == PDS_PAD_CFG_ACTIVE_IE))\r\n\r\n/** @defgroup  PDS_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_PDS_INT_TYPE(type) (((type) == PDS_INT_WAKEUP) ||        \\\r\n                               ((type) == PDS_INT_RF_DONE) ||       \\\r\n                               ((type) == PDS_INT_PLL_DONE) ||      \\\r\n                               ((type) == PDS_INT_PDS_SLEEP_CNT) || \\\r\n                               ((type) == PDS_INT_HBN_IRQ_OUT0) ||  \\\r\n                               ((type) == PDS_INT_HBN_IRQ_OUT1) ||  \\\r\n                               ((type) == PDS_INT_GPIO_IRQ) ||      \\\r\n                               ((type) == PDS_INT_IRRX) ||          \\\r\n                               ((type) == PDS_INT_BLE_SLP_IRQ) ||   \\\r\n                               ((type) == PDS_INT_USB_WKUP) ||      \\\r\n                               ((type) == PDS_INT_KYS_QDEC) ||      \\\r\n                               ((type) == PDS_INT_MAX))\r\n\r\n/** @defgroup  PDS_VDDCORE_GPIO_SRC_TYPE\r\n *  @{\r\n */\r\n#define IS_PDS_VDDCORE_GPIO_SRC_TYPE(type) (((type) == PDS_VDDCORE_GPIO_SRC_GPIO_0) || \\\r\n                                            ((type) == PDS_VDDCORE_GPIO_SRC_GPIO_1) || \\\r\n                                            ((type) == PDS_VDDCORE_GPIO_SRC_GPIO_2) || \\\r\n                                            ((type) == PDS_VDDCORE_GPIO_SRC_GPIO_3) || \\\r\n                                            ((type) == PDS_VDDCORE_GPIO_SRC_GPIO_4) || \\\r\n                                            ((type) == PDS_VDDCORE_GPIO_SRC_GPIO_5) || \\\r\n                                            ((type) == PDS_VDDCORE_GPIO_SRC_GPIO_6) || \\\r\n                                            ((type) == PDS_VDDCORE_GPIO_SRC_GPIO_7))\r\n\r\n/** @defgroup  PDS_RST_EVENT_TYPE\r\n *  @{\r\n */\r\n#define IS_PDS_RST_EVENT_TYPE(type) (((type) == PDS_RST_EVENT_BUS_RST) ||        \\\r\n                                     ((type) == PDS_RST_EVENT_HBN_PWR_ON_RST) || \\\r\n                                     ((type) == PDS_RST_EVENT_PDS_RST) ||        \\\r\n                                     ((type) == PDS_RST_EVENT_MAX))\r\n\r\n/** @defgroup  PDS_PLL_STS_TYPE\r\n *  @{\r\n */\r\n#define IS_PDS_PLL_STS_TYPE(type) (((type) == PDS_PLL_STS_OFF) ||   \\\r\n                                   ((type) == PDS_PLL_STS_SFREG) || \\\r\n                                   ((type) == PDS_PLL_STS_PU) ||    \\\r\n                                   ((type) == PDS_PLL_STS_RDY))\r\n\r\n/** @defgroup  PDS_RF_STS_TYPE\r\n *  @{\r\n */\r\n#define IS_PDS_RF_STS_TYPE(type) (((type) == PDS_RF_STS_OFF) ||        \\\r\n                                  ((type) == PDS_RF_STS_PU_MBG) ||     \\\r\n                                  ((type) == PDS_RF_STS_PU_LDO15RF) || \\\r\n                                  ((type) == PDS_RF_STS_PU_SFREG) ||   \\\r\n                                  ((type) == PDS_RF_STS_BZ_EN_AON))\r\n\r\n/** @defgroup  PDS_STS_TYPE\r\n *  @{\r\n */\r\n#define IS_PDS_STS_TYPE(type) (((type) == PDS_STS_IDLE) ||           \\\r\n                               ((type) == PDS_STS_ECG) ||            \\\r\n                               ((type) == PDS_STS_ERST) ||           \\\r\n                               ((type) == PDS_STS_EISO) ||           \\\r\n                               ((type) == PDS_STS_POFF) ||           \\\r\n                               ((type) == PDS_STS_PRE_BGON) ||       \\\r\n                               ((type) == PDS_STS_PRE_BGON1) ||      \\\r\n                               ((type) == PDS_STS_BGON) ||           \\\r\n                               ((type) == PDS_STS_CLK_SW_32M) ||     \\\r\n                               ((type) == PDS_STS_PON_DCDC) ||       \\\r\n                               ((type) == PDS_STS_PON_LDO11_MISC) || \\\r\n                               ((type) == PDS_STS_PON) ||            \\\r\n                               ((type) == PDS_STS_DISO) ||           \\\r\n                               ((type) == PDS_STS_DCG) ||            \\\r\n                               ((type) == PDS_STS_DRST) ||           \\\r\n                               ((type) == PDS_STS_WAIT_EFUSE))\r\n\r\n/** @defgroup  PDS_PLL_XTAL_TYPE\r\n *  @{\r\n */\r\n#define IS_PDS_PLL_XTAL_TYPE(type) (((type) == PDS_PLL_XTAL_NONE) || \\\r\n                                    ((type) == PDS_PLL_XTAL_32M) ||  \\\r\n                                    ((type) == PDS_PLL_XTAL_RC32M))\r\n\r\n/** @defgroup  PDS_PLL_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_PDS_PLL_CLK_TYPE(type) (((type) == PDS_PLL_CLK_480M) || \\\r\n                                   ((type) == PDS_PLL_CLK_240M) || \\\r\n                                   ((type) == PDS_PLL_CLK_192M) || \\\r\n                                   ((type) == PDS_PLL_CLK_160M) || \\\r\n                                   ((type) == PDS_PLL_CLK_120M) || \\\r\n                                   ((type) == PDS_PLL_CLK_96M) ||  \\\r\n                                   ((type) == PDS_PLL_CLK_80M) ||  \\\r\n                                   ((type) == PDS_PLL_CLK_48M) ||  \\\r\n                                   ((type) == PDS_PLL_CLK_32M))\r\n\r\n/** @defgroup  PDS_AON_GPIO_INT_TRIGGER_TYPE\r\n *  @{\r\n */\r\n#define IS_PDS_AON_GPIO_INT_TRIGGER_TYPE(type) (((type) == PDS_AON_GPIO_INT_TRIGGER_SYNC_FALLING_EDGE) ||  \\\r\n                                                ((type) == PDS_AON_GPIO_INT_TRIGGER_SYNC_RISING_EDGE) ||   \\\r\n                                                ((type) == PDS_AON_GPIO_INT_TRIGGER_SYNC_LOW_LEVEL) ||     \\\r\n                                                ((type) == PDS_AON_GPIO_INT_TRIGGER_SYNC_HIGH_LEVEL) ||    \\\r\n                                                ((type) == PDS_AON_GPIO_INT_TRIGGER_ASYNC_FALLING_EDGE) || \\\r\n                                                ((type) == PDS_AON_GPIO_INT_TRIGGER_ASYNC_RISING_EDGE) ||  \\\r\n                                                ((type) == PDS_AON_GPIO_INT_TRIGGER_ASYNC_LOW_LEVEL) ||    \\\r\n                                                ((type) == PDS_AON_GPIO_INT_TRIGGER_ASYNC_HIGH_LEVEL))\r\n\r\n/** @defgroup  PDS_LDO_VOLTAGE_TYPE\r\n *  @{\r\n */\r\n#define IS_PDS_LDO_VOLTAGE_TYPE(type) (((type) == PDS_LDO_VOLTAGE_0P60V) || \\\r\n                                       ((type) == PDS_LDO_VOLTAGE_0P65V) || \\\r\n                                       ((type) == PDS_LDO_VOLTAGE_0P70V) || \\\r\n                                       ((type) == PDS_LDO_VOLTAGE_0P75V) || \\\r\n                                       ((type) == PDS_LDO_VOLTAGE_0P80V) || \\\r\n                                       ((type) == PDS_LDO_VOLTAGE_0P85V) || \\\r\n                                       ((type) == PDS_LDO_VOLTAGE_0P90V) || \\\r\n                                       ((type) == PDS_LDO_VOLTAGE_0P95V) || \\\r\n                                       ((type) == PDS_LDO_VOLTAGE_1P00V) || \\\r\n                                       ((type) == PDS_LDO_VOLTAGE_1P05V) || \\\r\n                                       ((type) == PDS_LDO_VOLTAGE_1P10V) || \\\r\n                                       ((type) == PDS_LDO_VOLTAGE_1P15V) || \\\r\n                                       ((type) == PDS_LDO_VOLTAGE_1P20V) || \\\r\n                                       ((type) == PDS_LDO_VOLTAGE_1P25V) || \\\r\n                                       ((type) == PDS_LDO_VOLTAGE_1P30V) || \\\r\n                                       ((type) == PDS_LDO_VOLTAGE_1P35V))\r\n\r\n/** @defgroup  PDS_FORCE_TYPE\r\n *  @{\r\n */\r\n#define IS_PDS_FORCE_TYPE(type) (((type) == PDS_FORCE_NP) ||  \\\r\n                                 ((type) == PDS_FORCE_RSV) || \\\r\n                                 ((type) == PDS_FORCE_BZ) ||  \\\r\n                                 ((type) == PDS_FORCE_USB))\r\n\r\n/** @defgroup  PDS_AUDIO_PLL_TYPE\r\n *  @{\r\n */\r\n#define IS_PDS_AUDIO_PLL_TYPE(type) (((type) == AUDIO_PLL_12288000_HZ) || \\\r\n                                     ((type) == AUDIO_PLL_11289600_HZ) || \\\r\n                                     ((type) == AUDIO_PLL_5644800_HZ))\r\n\r\n/*@} end of group PDS_Public_Constants */\r\n\r\n/** @defgroup  PDS_Public_Macros\r\n *  @{\r\n */\r\n#define PDS_LDO_MIN_PU_CNT        (25) /* LDO need 25 cycles to power up */\r\n#define PDS_WARMUP_CNT            (38) /* LDO hw warmup compensation latency cycles */\r\n#define PDS_WARMUP_LATENCY_CNT    (38) /* LDO hw warmup compensation latency cycles */\r\n#define PDS_FORCE_PWR_OFF_OFFSET  (0)\r\n#define PDS_FORCE_ISO_EN_OFFSET   (4)\r\n#define PDS_FORCE_PDS_RST_OFFSET  (8)\r\n#define PDS_FORCE_MEM_STBY_OFFSET (12)\r\n#define PDS_FORCE_GATE_CLK_OFFSET (16)\r\n#define PDS_INT_MASK_BIT_OFFSET   (8)\r\n#define PDS_AON_WAKEUP_GPIO_NONE  (0x00)\r\n#define PDS_AON_WAKEUP_GPIO_9     (0x01)\r\n#define PDS_AON_WAKEUP_GPIO_10    (0x02)\r\n#define PDS_AON_WAKEUP_GPIO_11    (0x04)\r\n#define PDS_AON_WAKEUP_GPIO_12    (0x08)\r\n#define PDS_AON_WAKEUP_GPIO_13    (0x10)\r\n#define PDS_AON_WAKEUP_GPIO_ALL   (0x1E)\r\n\r\n/*@} end of group PDS_Public_Macros */\r\n\r\n/** @defgroup  PDS_Public_Functions\r\n *  @{\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid PDS_WAKEUP_IRQHandler(void);\r\n#endif\r\n/*----------*/\r\nBL_Err_Type PDS_RAM_Config(PDS_RAM_CFG_Type *ramCfg);\r\nBL_Err_Type PDS_Set_Pad_Config(PDS_PAD_PIN_Type pin, PDS_PAD_CFG_Type cfg);\r\n/*----------*/\r\nBL_Err_Type PDS_App_Enable(PDS_CTL_Type *cfg, PDS_CTL4_Type *cfg4, uint32_t pdsSleepCnt);\r\nBL_Err_Type PDS_Force_Config(PDS_CTL2_Type *cfg2, PDS_CTL3_Type *cfg3);\r\nBL_Err_Type PDS_Default_Level_Config(PDS_DEFAULT_LV_CFG_Type *defaultLvCfg, uint32_t pdsSleepCnt);\r\n/*----------*/\r\nBL_Err_Type PDS_IntEn(PDS_INT_Type intType, BL_Fun_Type enable);\r\nBL_Err_Type PDS_IntMask(PDS_INT_Type intType, BL_Mask_Type intMask);\r\nBL_Sts_Type PDS_Get_IntStatus(PDS_INT_Type intType);\r\nBL_Err_Type PDS_IntClear(void);\r\nPDS_PLL_STS_Type PDS_Get_PdsPllStstus(void);\r\nPDS_RF_STS_Type PDS_Get_PdsRfStstus(void);\r\nPDS_STS_Type PDS_Get_PdsStstus(void);\r\n/*----------*/\r\nBL_Err_Type PDS_Clear_Reset_Event(void);\r\nBL_Sts_Type PDS_Get_Reset_Event(PDS_RST_EVENT_Type event);\r\n/*----------*/\r\nBL_Err_Type PDS_Set_Vddcore_GPIO_IntCfg(PDS_VDDCORE_GPIO_SRC_Type src,\r\n                                        PDS_AON_GPIO_INT_Trigger_Type mode);\r\nBL_Err_Type PDS_Set_Vddcore_GPIO_IntMask(BL_Mask_Type intMask);\r\nBL_Sts_Type PDS_Get_Vddcore_GPIO_IntStatus(void);\r\nBL_Err_Type PDS_Set_Vddcore_GPIO_IntClear(void);\r\n/*----------*/\r\nBL_Err_Type PDS_WAKEUP_IRQHandler_Install(void);\r\nBL_Err_Type PDS_Int_Callback_Install(PDS_INT_Type intType, intCallback_Type *cbFun);\r\n/*----------*/\r\nBL_Err_Type PDS_Trim_RC32M(void);\r\nBL_Err_Type PDS_Select_RC32M_As_PLL_Ref(void);\r\nBL_Err_Type PDS_Select_XTAL_As_PLL_Ref(void);\r\nBL_Err_Type PDS_Power_On_PLL(PDS_PLL_XTAL_Type xtalType);\r\nBL_Err_Type PDS_Enable_PLL_All_Clks(void);\r\nBL_Err_Type PDS_Enable_PLL_Clk(PDS_PLL_CLK_Type pllClk);\r\nBL_Err_Type PDS_Disable_PLL_All_Clks(void);\r\nBL_Err_Type PDS_Disable_PLL_Clk(PDS_PLL_CLK_Type pllClk);\r\nBL_Err_Type PDS_Power_Off_PLL(void);\r\nBL_Err_Type PDS_Set_Audio_PLL_Freq(PDS_AUDIO_PLL_Type audioPLLFreq);\r\n/*----------*/\r\nvoid PDS_Reset(void);\r\nvoid PDS_Enable(PDS_CFG_Type *cfg, uint32_t pdsSleepCnt);\r\nvoid PDS_Auto_Time_Config(uint32_t sleepDuration);\r\nvoid PDS_Auto_Enable(PDS_AUTO_POWER_DOWN_CFG_Type *powerCfg, PDS_AUTO_NORMAL_CFG_Type *normalCfg, BL_Fun_Type enable);\r\nvoid PDS_Manual_Force_Turn_Off(PDS_FORCE_Type domain);\r\nvoid PDS_Manual_Force_Turn_On(PDS_FORCE_Type domain);\r\n/*----------*/\r\nBL_Err_Type PDS_Set_Clkpll_Top_Ctrl(uint8_t vg11Sel);\r\n/*----------*/\r\n\r\n/*@} end of group PDS_Public_Functions */\r\n\r\n/*@} end of group PDS */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_PDS_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_psram.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_psram.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_PSRAM_H__\r\n#define __BL702_PSRAM_H__\r\n\r\n#include \"sf_ctrl_reg.h\"\r\n#include \"bl702_common.h\"\r\n#include \"bl702_sf_ctrl.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  PSRAM\r\n *  @{\r\n */\r\n\r\n/** @defgroup  PSRAM_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief Psram drive strength type definition\r\n */\r\ntypedef enum {\r\n    PSRAM_DRIVE_STRENGTH_50_OHMS,  /*!< Drive strength 50 ohms(default) */\r\n    PSRAM_DRIVE_STRENGTH_100_OHMS, /*!< Drive strength 100 ohms */\r\n    PSRAM_DRIVE_STRENGTH_200_OHMS, /*!< Drive strength 200 ohms */\r\n} PSRAM_Drive_Strength;\r\n\r\n/**\r\n *  @brief Psram burst length size type definition\r\n */\r\ntypedef enum {\r\n    PSRAM_BURST_LENGTH_16_BYTES,  /*!< Burst Length 16 bytes */\r\n    PSRAM_BURST_LENGTH_32_BYTES,  /*!< Burst Length 32 bytes */\r\n    PSRAM_BURST_LENGTH_64_BYTES,  /*!< Burst Length 64 bytes */\r\n    PSRAM_BURST_LENGTH_512_BYTES, /*!< Burst Length 512 bytes(default) */\r\n} PSRAM_Burst_Length;\r\n\r\n/**\r\n *  @brief Psram ctrl mode type definition\r\n */\r\ntypedef enum {\r\n    PSRAM_SPI_CTRL_MODE, /*!< Psram SPI ctrl mode */\r\n    PSRAM_QPI_CTRL_MODE, /*!< Psram QPI ctrl mode */\r\n} PSRAM_Ctrl_Mode;\r\n\r\n/**\r\n *  @brief Psram ctrl configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint8_t readIdCmd;                  /*!< Read ID command */\r\n    uint8_t readIdDmyClk;               /*!< Read ID command dummy clock */\r\n    uint8_t burstToggleCmd;             /*!< Burst toggle length command */\r\n    uint8_t resetEnableCmd;             /*!< Psram reset enable command */\r\n    uint8_t resetCmd;                   /*!< Psram reset command */\r\n    uint8_t enterQuadModeCmd;           /*!< Psram enter quad mode command */\r\n    uint8_t exitQuadModeCmd;            /*!< Psram exit quad mode command */\r\n    uint8_t readRegCmd;                 /*!< Read register command */\r\n    uint8_t readRegDmyClk;              /*!< Read register command dummy clock */\r\n    uint8_t writeRegCmd;                /*!< Write register command */\r\n    uint8_t readCmd;                    /*!< Psram read command */\r\n    uint8_t readDmyClk;                 /*!< Psram read command dummy clock */\r\n    uint8_t fReadCmd;                   /*!< Psram fast read command */\r\n    uint8_t fReadDmyClk;                /*!< Psram fast read command dummy clock */\r\n    uint8_t fReadQuadCmd;               /*!< Psram fast read quad command */\r\n    uint8_t fReadQuadDmyClk;            /*!< Psram fast read quad command dummy clock */\r\n    uint8_t writeCmd;                   /*!< Psram write command */\r\n    uint8_t quadWriteCmd;               /*!< Psram quad write command */\r\n    uint16_t pageSize;                  /*!< Psram page size */\r\n    PSRAM_Ctrl_Mode ctrlMode;           /*!< Psram ctrl mode */\r\n    PSRAM_Drive_Strength driveStrength; /*!< Psram drive strength */\r\n    PSRAM_Burst_Length burstLength;     /*!< Psram burst length size */\r\n} SPI_Psram_Cfg_Type;\r\n\r\n/*@} end of group PSRAM_Public_Types */\r\n\r\n/** @defgroup  PSRAM_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  PSRAM_DRIVE_STRENGTH\r\n *  @{\r\n */\r\n#define IS_PSRAM_DRIVE_STRENGTH(type) (((type) == PSRAM_DRIVE_STRENGTH_50_OHMS) ||  \\\r\n                                       ((type) == PSRAM_DRIVE_STRENGTH_100_OHMS) || \\\r\n                                       ((type) == PSRAM_DRIVE_STRENGTH_200_OHMS))\r\n\r\n/** @defgroup  PSRAM_BURST_LENGTH\r\n *  @{\r\n */\r\n#define IS_PSRAM_BURST_LENGTH(type) (((type) == PSRAM_BURST_LENGTH_16_BYTES) || \\\r\n                                     ((type) == PSRAM_BURST_LENGTH_32_BYTES) || \\\r\n                                     ((type) == PSRAM_BURST_LENGTH_64_BYTES) || \\\r\n                                     ((type) == PSRAM_BURST_LENGTH_512_BYTES))\r\n\r\n/** @defgroup  PSRAM_CTRL_MODE\r\n *  @{\r\n */\r\n#define IS_PSRAM_CTRL_MODE(type) (((type) == PSRAM_SPI_CTRL_MODE) || \\\r\n                                  ((type) == PSRAM_QPI_CTRL_MODE))\r\n\r\n/*@} end of group PSRAM_Public_Constants */\r\n\r\n/** @defgroup  PSRAM_Public_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group PSRAM_Public_Macros */\r\n\r\n/** @defgroup  PSRAM_Public_Functions\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief PSRAM Functions\r\n */\r\nvoid Psram_Init(SPI_Psram_Cfg_Type *psramCfg, SF_Ctrl_Cmds_Cfg *cmdsCfg, SF_Ctrl_Psram_Cfg *sfCtrlPsramCfg);\r\nvoid Psram_ReadReg(SPI_Psram_Cfg_Type *psramCfg, uint8_t *regValue);\r\nvoid Psram_WriteReg(SPI_Psram_Cfg_Type *psramCfg, uint8_t *regValue);\r\nBL_Err_Type Psram_SetDriveStrength(SPI_Psram_Cfg_Type *psramCfg);\r\nBL_Err_Type Psram_SetBurstWrap(SPI_Psram_Cfg_Type *psramCfg);\r\nvoid Psram_ReadId(SPI_Psram_Cfg_Type *psramCfg, uint8_t *data);\r\nBL_Err_Type Psram_EnterQuadMode(SPI_Psram_Cfg_Type *psramCfg);\r\nBL_Err_Type Psram_ExitQuadMode(SPI_Psram_Cfg_Type *psramCfg);\r\nBL_Err_Type Psram_ToggleBurstLength(SPI_Psram_Cfg_Type *psramCfg, PSRAM_Ctrl_Mode ctrlMode);\r\nBL_Err_Type Psram_SoftwareReset(SPI_Psram_Cfg_Type *psramCfg, PSRAM_Ctrl_Mode ctrlMode);\r\nBL_Err_Type Psram_Set_IDbus_Cfg(SPI_Psram_Cfg_Type *psramCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint32_t len);\r\nBL_Err_Type Psram_Cache_Write_Set(SPI_Psram_Cfg_Type *psramCfg, SF_Ctrl_IO_Type ioMode, BL_Fun_Type wtEn,\r\n                                  BL_Fun_Type wbEn, BL_Fun_Type waEn);\r\nBL_Err_Type Psram_Write(SPI_Psram_Cfg_Type *psramCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t *data, uint32_t len);\r\nBL_Err_Type Psram_Read(SPI_Psram_Cfg_Type *psramCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t *data, uint32_t len);\r\n\r\n/*@} end of group PSRAM_Public_Functions */\r\n\r\n/*@} end of group PSRAM */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_PSRAM_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_pwm.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_pwm.h\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver header file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n#ifndef __BL702_PWM_H__\r\n#define __BL702_PWM_H__\r\n\r\n#include \"bl702_common.h\"\r\n#include \"pwm_reg.h\"\r\n\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  PWM\r\n *  @{\r\n */\r\n\r\n/** @defgroup  PWM_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief PWM No. type definition\r\n */\r\ntypedef enum {\r\n  PWM_CH0 = 0, /*!< PWM Channel 0 define */\r\n  PWM_CH1,     /*!< PWM Channel 1 define */\r\n  PWM_CH2,     /*!< PWM Channel 2 define */\r\n  PWM_CH3,     /*!< PWM Channel 3 define */\r\n  PWM_CH4,     /*!< PWM Channel 4 define */\r\n  PWM_CH_MAX,  /*!<  */\r\n} PWM_CH_ID_Type;\r\n\r\n/**\r\n *  @brief PWM Clock definition\r\n */\r\ntypedef enum {\r\n  PWM_CLK_XCLK = 0, /*!< PWM Clock source :XTAL CLK */\r\n  PWM_CLK_BCLK,     /*!< PWM Clock source :Bus CLK */\r\n  PWM_CLK_32K,      /*!< PWM Clock source :32K CLK */\r\n} PWM_Clk_Type;\r\n\r\n/**\r\n *  @brief PWM Stop Mode definition\r\n */\r\ntypedef enum {\r\n  PWM_STOP_ABRUPT = 0, /*!< PWM stop abrupt select define */\r\n  PWM_STOP_GRACEFUL,   /*!< PWM stop graceful select define */\r\n} PWM_Stop_Mode_Type;\r\n\r\n/**\r\n *  @brief PWM mode type def\r\n */\r\ntypedef enum {\r\n  PWM_POL_NORMAL = 0, /*!< PWM normal polarity mode define */\r\n  PWM_POL_INVERT,     /*!< PWM invert polarity mode define */\r\n} PWM_Polarity_Type;\r\n\r\n/**\r\n *  @brief PWM interrupt type def\r\n */\r\ntypedef enum {\r\n  PWM_INT_PULSE_CNT = 0, /*!< PWM Pulse count interrupt define */\r\n  PWM_INT_ALL,           /*!<  */\r\n} PWM_INT_Type;\r\n\r\n/**\r\n *  @brief PWM configuration structure type definition\r\n */\r\ntypedef struct {\r\n  PWM_CH_ID_Type     ch;          /*!< PWM channel */\r\n  PWM_Clk_Type       clk;         /*!< PWM Clock */\r\n  PWM_Stop_Mode_Type stopMode;    /*!< PWM Stop Mode */\r\n  PWM_Polarity_Type  pol;         /*!< PWM mode type */\r\n  uint16_t           clkDiv;      /*!< PWM clkDiv num */\r\n  uint16_t           period;      /*!< PWM period set */\r\n  uint16_t           threshold1;  /*!< PWM threshold1 num */\r\n  uint16_t           threshold2;  /*!< PWM threshold2 num */\r\n  uint16_t           intPulseCnt; /*!< PWM interrupt pulse count */\r\n} PWM_CH_CFG_Type;\r\n\r\n/*@} end of group PWM_Public_Types */\r\n\r\n/** @defgroup  PWM_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  PWM_CH_ID_TYPE\r\n *  @{\r\n */\r\n#define IS_PWM_CH_ID_TYPE(type) (((type) == PWM_CH0) || ((type) == PWM_CH1) || ((type) == PWM_CH2) || ((type) == PWM_CH3) || ((type) == PWM_CH4) || ((type) == PWM_CH_MAX))\r\n\r\n/** @defgroup  PWM_CLK_TYPE\r\n *  @{\r\n */\r\n#define IS_PWM_CLK_TYPE(type) (((type) == PWM_CLK_XCLK) || ((type) == PWM_CLK_BCLK) || ((type) == PWM_CLK_32K))\r\n\r\n/** @defgroup  PWM_STOP_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_PWM_STOP_MODE_TYPE(type) (((type) == PWM_STOP_ABRUPT) || ((type) == PWM_STOP_GRACEFUL))\r\n\r\n/** @defgroup  PWM_POLARITY_TYPE\r\n *  @{\r\n */\r\n#define IS_PWM_POLARITY_TYPE(type) (((type) == PWM_POL_NORMAL) || ((type) == PWM_POL_INVERT))\r\n\r\n/** @defgroup  PWM_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_PWM_INT_TYPE(type) (((type) == PWM_INT_PULSE_CNT) || ((type) == PWM_INT_ALL))\r\n\r\n/*@} end of group PWM_Public_Constants */\r\n\r\n/** @defgroup  PWM_Public_Macros\r\n *  @{\r\n */\r\n#define IS_PWM_CH(CH) ((CH) < PWM_CH_MAX)\r\n\r\n/*@} end of group PWM_Public_Macros */\r\n\r\n/** @defgroup  PWM_Public_Functions\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief PWM Functions\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid PWM_IRQHandler(void);\r\n#endif\r\nBL_Err_Type PWM_Channel_Init(PWM_CH_CFG_Type *chCfg);\r\nvoid        PWM_Channel_Update(PWM_CH_ID_Type ch, uint16_t period, uint16_t threshold1, uint16_t threshold2);\r\nvoid        PWM_Channel_Set_Div(PWM_CH_ID_Type ch, uint16_t div);\r\nvoid        PWM_Channel_Set_Threshold1(PWM_CH_ID_Type ch, uint16_t threshold1);\r\nvoid        PWM_Channel_Set_Threshold2(PWM_CH_ID_Type ch, uint16_t threshold2);\r\nvoid        PWM_Channel_Set_Period(PWM_CH_ID_Type ch, uint16_t period);\r\nvoid        PWM_Channel_Get(PWM_CH_ID_Type ch, uint16_t *period, uint16_t *threshold1, uint16_t *threshold2);\r\nvoid        PWM_IntMask(PWM_CH_ID_Type ch, PWM_INT_Type intType, BL_Mask_Type intMask);\r\nvoid        PWM_Channel_Enable(PWM_CH_ID_Type ch);\r\nuint8_t     PWM_Channel_Is_Enabled(PWM_CH_ID_Type ch);\r\nvoid        PWM_Channel_Disable(PWM_CH_ID_Type ch);\r\nvoid        PWM_SW_Mode(PWM_CH_ID_Type ch, BL_Fun_Type enable);\r\nvoid        PWM_SW_Force_Value(PWM_CH_ID_Type ch, uint8_t value);\r\nvoid        PWM_Int_Callback_Install(PWM_CH_ID_Type ch, uint32_t intType, intCallback_Type *cbFun);\r\nBL_Err_Type PWM_Smart_Configure(PWM_CH_ID_Type ch, uint32_t frequency, uint8_t dutyCycle);\r\n\r\n/*@} end of group PWM_Public_Functions */\r\n\r\n/*@} end of group PWM */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_PWM_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_qdec.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_qdec.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_QDEC_H__\r\n#define __BL702_QDEC_H__\r\n\r\n#include \"qdec_reg.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  QDEC\r\n *  @{\r\n */\r\n\r\n/** @defgroup  QDEC_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief QDEC port type definition\r\n */\r\ntypedef enum {\r\n    QDEC0_ID,    /*!< QDEC0 port define */\r\n    QDEC1_ID,    /*!< QDEC1 port define */\r\n    QDEC2_ID,    /*!< QDEC2 port define */\r\n    QDEC_ID_MAX, /*!< QDEC MAX ID define */\r\n} QDEC_ID_Type;\r\n\r\n/**\r\n *  @brief QDEC sample work mode type definition\r\n */\r\ntypedef enum {\r\n    QDEC_SAMPLE_SINGLE_MOD,   /*!< Stop sample if rpt_rdy */\r\n    QDEC_SAMPLE_CONTINUE_MOD, /*!< Continue sample */\r\n} QDEC_SAMPLE_MODE_Type;\r\n\r\n/**\r\n *  @brief QDEC sample period type definition\r\n */\r\ntypedef enum {\r\n    QDEC_SAMPLE_PERIOD_32US,  /*!< 32  us at clock 1MHz */\r\n    QDEC_SAMPLE_PERIOD_64US,  /*!< 64  us at clock 1MHz */\r\n    QDEC_SAMPLE_PERIOD_128US, /*!< 128 us at clock 1MHz */\r\n    QDEC_SAMPLE_PERIOD_256US, /*!< 256 us at clock 1MHz */\r\n    QDEC_SAMPLE_PERIOD_512US, /*!< 512 us at clock 1MHz */\r\n    QDEC_SAMPLE_PERIOD_1MS,   /*!< 1   ms at clock 1MHz */\r\n    QDEC_SAMPLE_PERIOD_2MS,   /*!< 2   ms at clock 1MHz */\r\n    QDEC_SAMPLE_PERIOD_4MS,   /*!< 4   ms at clock 1MHz */\r\n    QDEC_SAMPLE_PERIOD_8MS,   /*!< 8   ms at clock 1MHz */\r\n    QDEC_SAMPLE_PERIOD_16MS,  /*!< 16  ms at clock 1MHz */\r\n    QDEC_SAMPLE_PERIOD_32MS,  /*!< 32  ms at clock 1MHz */\r\n    QDEC_SAMPLE_PERIOD_65MS,  /*!< 65  ms at clock 1MHz */\r\n    QDEC_SAMPLE_PERIOD_131MS, /*!< 131 ms at clock 1MHz */\r\n} QDEC_SAMPLE_PERIOD_Type;\r\n\r\n/**\r\n *  @brief QDEC report work mode type definition\r\n */\r\ntypedef enum {\r\n    QDEC_REPORT_SAMPLE_CHANGE_MOD, /*!< Count time only if sample change */\r\n    QDEC_REPORT_TIME_MOD,          /*!< Continue time */\r\n} QDEC_REPORT_MODE_Type;\r\n\r\n/**\r\n *  @brief QDEC sample config structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    QDEC_SAMPLE_MODE_Type sampleMod;      /*!< Sample work mode */\r\n    QDEC_SAMPLE_PERIOD_Type samplePeriod; /*!< Sample period time */\r\n} QDEC_SAMPLE_Type;\r\n\r\n/**\r\n *  @brief QDEC report config structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    QDEC_REPORT_MODE_Type reportMod; /*!< Report work mode */\r\n    uint16_t reportPeriod;           /*!< RPT_US report period in [us/report] = SP * RP */\r\n} QDEC_REPORT_Type;\r\n\r\n/**\r\n *  @brief QDEC acc work mode type definition\r\n */\r\ntypedef enum {\r\n    QDEC_ACC_STOP_SAMPLE_IF_OVERFLOW, /*!< Stop accumulate if overflow */\r\n    QDEC_ACC_CONTINUE_ACCUMULATE,     /*!< Continue accumulate */\r\n} QDEC_ACC_MODE_Type;\r\n\r\n/**\r\n *  @brief QDEC led config structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type ledEn;   /*!< LED enable */\r\n    BL_Fun_Type ledSwap; /*!< LED on/off polarity swap */\r\n    uint16_t ledPeriod;  /*!< Period in us the LED is switched on prior to sampling */\r\n} QDEC_LED_Type;\r\n\r\n/**\r\n *  @brief QDEC deglitch config structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type deglitchEn;   /*!< deglitch enable */\r\n    uint8_t deglitchStrength; /*!< deglitch strength */\r\n} QDEC_DEGLITCH_Type;\r\n\r\n/**\r\n *  @brief QDEC config structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    QDEC_SAMPLE_Type sampleCfg;     /*!< QDEC sample config structure */\r\n    QDEC_REPORT_Type reportCfg;     /*!< QDEC report config structure */\r\n    QDEC_ACC_MODE_Type accMod;      /*!< QDEC acc mode config */\r\n    QDEC_LED_Type ledCfg;           /*!< QDEC led config structure */\r\n    QDEC_DEGLITCH_Type deglitchCfg; /*!< QDEC deglitch config structure */\r\n} QDEC_CFG_Type;\r\n\r\n/**\r\n *  @brief QDEC direction type definition\r\n */\r\ntypedef enum {\r\n    QDEC_DIRECTION_NO_CHANGE,         /*!< Direction of last change no change */\r\n    QDEC_DIRECTION_CLOCKWISE,         /*!< Direction of last change clockwise */\r\n    QDEC_DIRECTION_COUNTER_CLOCKWISE, /*!< Direction of last change counter-clockwise */\r\n    QDEC_DIRECTION_ERROR,             /*!< Direction of last change error */\r\n} QDEC_DIRECTION_Type;\r\n\r\n/**\r\n *  @brief QDEC interrupt type definition\r\n */\r\ntypedef enum {\r\n    QDEC_INT_REPORT,   /*!< report interrupt */\r\n    QDEC_INT_SAMPLE,   /*!< sample interrupt */\r\n    QDEC_INT_ERROR,    /*!< error interrupt */\r\n    QDEC_INT_OVERFLOW, /*!< ACC1 and ACC2 overflow interrupt */\r\n    QDEC_INT_ALL,      /*!< interrupt max num */\r\n} QDEC_INT_Type;\r\n\r\n/*@} end of group QDEC_Public_Types */\r\n\r\n/** @defgroup  QDEC_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  QDEC_ID_TYPE\r\n *  @{\r\n */\r\n#define IS_QDEC_ID_TYPE(type) (((type) == QDEC0_ID) || \\\r\n                               ((type) == QDEC1_ID) || \\\r\n                               ((type) == QDEC2_ID) || \\\r\n                               ((type) == QDEC_ID_MAX))\r\n\r\n/** @defgroup  QDEC_SAMPLE_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_QDEC_SAMPLE_MODE_TYPE(type) (((type) == QDEC_SAMPLE_SINGLE_MOD) || \\\r\n                                        ((type) == QDEC_SAMPLE_CONTINUE_MOD))\r\n\r\n/** @defgroup  QDEC_SAMPLE_PERIOD_TYPE\r\n *  @{\r\n */\r\n#define IS_QDEC_SAMPLE_PERIOD_TYPE(type) (((type) == QDEC_SAMPLE_PERIOD_32US) ||  \\\r\n                                          ((type) == QDEC_SAMPLE_PERIOD_64US) ||  \\\r\n                                          ((type) == QDEC_SAMPLE_PERIOD_128US) || \\\r\n                                          ((type) == QDEC_SAMPLE_PERIOD_256US) || \\\r\n                                          ((type) == QDEC_SAMPLE_PERIOD_512US) || \\\r\n                                          ((type) == QDEC_SAMPLE_PERIOD_1MS) ||   \\\r\n                                          ((type) == QDEC_SAMPLE_PERIOD_2MS) ||   \\\r\n                                          ((type) == QDEC_SAMPLE_PERIOD_4MS) ||   \\\r\n                                          ((type) == QDEC_SAMPLE_PERIOD_8MS) ||   \\\r\n                                          ((type) == QDEC_SAMPLE_PERIOD_16MS) ||  \\\r\n                                          ((type) == QDEC_SAMPLE_PERIOD_32MS) ||  \\\r\n                                          ((type) == QDEC_SAMPLE_PERIOD_65MS) ||  \\\r\n                                          ((type) == QDEC_SAMPLE_PERIOD_131MS))\r\n\r\n/** @defgroup  QDEC_REPORT_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_QDEC_REPORT_MODE_TYPE(type) (((type) == QDEC_REPORT_SAMPLE_CHANGE_MOD) || \\\r\n                                        ((type) == QDEC_REPORT_TIME_MOD))\r\n\r\n/** @defgroup  QDEC_ACC_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_QDEC_ACC_MODE_TYPE(type) (((type) == QDEC_ACC_STOP_SAMPLE_IF_OVERFLOW) || \\\r\n                                     ((type) == QDEC_ACC_CONTINUE_ACCUMULATE))\r\n\r\n/** @defgroup  QDEC_DIRECTION_TYPE\r\n *  @{\r\n */\r\n#define IS_QDEC_DIRECTION_TYPE(type) (((type) == QDEC_DIRECTION_NO_CHANGE) ||         \\\r\n                                      ((type) == QDEC_DIRECTION_CLOCKWISE) ||         \\\r\n                                      ((type) == QDEC_DIRECTION_COUNTER_CLOCKWISE) || \\\r\n                                      ((type) == QDEC_DIRECTION_ERROR))\r\n\r\n/** @defgroup  QDEC_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_QDEC_INT_TYPE(type) (((type) == QDEC_INT_REPORT) ||   \\\r\n                                ((type) == QDEC_INT_SAMPLE) ||   \\\r\n                                ((type) == QDEC_INT_ERROR) ||    \\\r\n                                ((type) == QDEC_INT_OVERFLOW) || \\\r\n                                ((type) == QDEC_INT_ALL))\r\n\r\n/*@} end of group QDEC_Public_Constants */\r\n\r\n/** @defgroup  QDEC_Public_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group QDEC_Public_Macros */\r\n\r\n/** @defgroup  QDEC_Public_Functions\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief QDEC Functions\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid QDEC0_IRQHandler(void);\r\nvoid QDEC1_IRQHandler(void);\r\nvoid QDEC2_IRQHandler(void);\r\n#endif\r\nvoid QDEC_Init(QDEC_ID_Type qdecId, QDEC_CFG_Type *qdecCfg);\r\nvoid QDEC_DeInit(QDEC_ID_Type qdecId);\r\nvoid QDEC_Enable(QDEC_ID_Type qdecId);\r\nvoid QDEC_Disable(QDEC_ID_Type qdecId);\r\nvoid QDEC_SetIntMask(QDEC_ID_Type qdecId, QDEC_INT_Type intType, BL_Mask_Type intMask);\r\nBL_Mask_Type QDEC_GetIntMask(QDEC_ID_Type qdecId, QDEC_INT_Type intType);\r\nvoid QDEC_Int_Callback_Install(QDEC_ID_Type qdecId, QDEC_INT_Type intType, intCallback_Type *cbFun);\r\nBL_Sts_Type QDEC_Get_Int_Status(QDEC_ID_Type qdecId, QDEC_INT_Type intType);\r\nvoid QDEC_Clr_Int_Status(QDEC_ID_Type qdecId, QDEC_INT_Type intType);\r\nQDEC_DIRECTION_Type QDEC_Get_Sample_Direction(QDEC_ID_Type qdecId);\r\nuint8_t QDEC_Get_Err_Cnt(QDEC_ID_Type qdecId);\r\nuint16_t QDEC_Get_Sample_Val(QDEC_ID_Type qdecId);\r\nvoid QDEC_IntHandler(QDEC_ID_Type qdecId, QDEC_INT_Type intType);\r\n\r\n/*@} end of group QDEC_Public_Functions */\r\n\r\n/*@} end of group QDEC */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_QDEC_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_romdriver.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_romdriver.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_ROMDRIVER_H__\r\n#define __BL702_ROMDRIVER_H__\r\n\r\n#include \"bl702_common.h\"\r\n#include \"bl702_aon.h\"\r\n#include \"bl702_glb.h\"\r\n#include \"bl702_hbn.h\"\r\n#include \"bl702_xip_sflash.h\"\r\n#include \"bl702_sflash.h\"\r\n#include \"bl702_sf_ctrl.h\"\r\n#include \"bl702_psram.h\"\r\n#include \"softcrc.h\"\r\n\r\n#define ROMAPI_INDEX_SECT_SIZE (0x800)\r\n#define ROMAPI_INDEX_MAX       (ROMAPI_INDEX_SECT_SIZE / 4 - 1)\r\n\r\ntypedef enum {\r\n    ROM_API_INDEX_REV = 0,\r\n\r\n    ROM_API_INDEX_FUNC_START = 4,\r\n\r\n    ROM_API_INDEX_AON_Power_On_MBG = ROM_API_INDEX_FUNC_START,\r\n    ROM_API_INDEX_AON_Power_Off_MBG,\r\n    ROM_API_INDEX_AON_Power_On_XTAL,\r\n    ROM_API_INDEX_AON_Set_Xtal_CapCode,\r\n    ROM_API_INDEX_AON_Power_Off_XTAL,\r\n\r\n    ROM_API_INDEX_ASM_Delay_Us,\r\n    ROM_API_INDEX_BL702_Delay_US,\r\n    ROM_API_INDEX_BL702_Delay_MS,\r\n    ROM_API_INDEX_BL702_MemCpy,\r\n    ROM_API_INDEX_BL702_MemCpy4,\r\n    ROM_API_INDEX_BL702_MemCpy_Fast,\r\n    ROM_API_INDEX_ARCH_MemCpy_Fast,\r\n    ROM_API_INDEX_BL702_MemSet,\r\n    ROM_API_INDEX_BL702_MemSet4,\r\n    ROM_API_INDEX_BL702_MemCmp,\r\n    ROM_API_INDEX_BFLB_Soft_CRC32,\r\n\r\n    ROM_API_INDEX_GLB_Get_Root_CLK_Sel,\r\n    ROM_API_INDEX_GLB_Set_System_CLK_Div,\r\n    ROM_API_INDEX_GLB_Get_BCLK_Div,\r\n    ROM_API_INDEX_GLB_Get_HCLK_Div,\r\n    ROM_API_INDEX_Update_SystemCoreClockWith_XTAL,\r\n    ROM_API_INDEX_GLB_Set_System_CLK,\r\n    ROM_API_INDEX_System_Core_Clock_Update_From_RC32M,\r\n    ROM_API_INDEX_GLB_Set_SF_CLK,\r\n    ROM_API_INDEX_GLB_Power_Off_DLL,\r\n    ROM_API_INDEX_GLB_Power_On_DLL,\r\n    ROM_API_INDEX_GLB_Enable_DLL_All_Clks,\r\n    ROM_API_INDEX_GLB_Enable_DLL_Clk,\r\n    ROM_API_INDEX_GLB_Disable_DLL_All_Clks,\r\n    ROM_API_INDEX_GLB_Disable_DLL_Clk,\r\n    ROM_API_INDEX_GLB_SW_System_Reset,\r\n    ROM_API_INDEX_GLB_SW_CPU_Reset,\r\n    ROM_API_INDEX_GLB_SW_POR_Reset,\r\n    ROM_API_INDEX_GLB_Select_Internal_Flash,\r\n    ROM_API_INDEX_GLB_Swap_Flash_Pin,\r\n    ROM_API_INDEX_GLB_Swap_Flash_CS_IO2_Pin,\r\n    ROM_API_INDEX_GLB_Swap_Flash_IO0_IO3_Pin,\r\n    ROM_API_INDEX_GLB_Select_Internal_PSram,\r\n    ROM_API_INDEX_GLB_GPIO_Init,\r\n    ROM_API_INDEX_GLB_GPIO_OUTPUT_Enable,\r\n    ROM_API_INDEX_GLB_GPIO_OUTPUT_Disable,\r\n    ROM_API_INDEX_GLB_GPIO_Set_HZ,\r\n    ROM_API_INDEX_GLB_Deswap_Flash_Pin,\r\n    ROM_API_INDEX_GLB_Select_External_Flash,\r\n    ROM_API_INDEX_GLB_GPIO_Get_Fun,\r\n\r\n    ROM_API_INDEX_EF_Ctrl_Busy,\r\n    ROM_API_INDEX_EF_Ctrl_Sw_AHB_Clk_0,\r\n    ROM_API_INDEX_EF_Ctrl_Load_Efuse_R0,\r\n    ROM_API_INDEX_EF_Ctrl_Clear,\r\n    ROM_API_INDEX_EF_Ctrl_Get_Trim_Parity,\r\n    ROM_API_INDEX_EF_Ctrl_Read_RC32K_Trim,\r\n    ROM_API_INDEX_EF_Ctrl_Read_RC32M_Trim,\r\n\r\n    ROM_API_INDEX_PDS_Trim_RC32M,\r\n    ROM_API_INDEX_PDS_Select_RC32M_As_PLL_Ref,\r\n    ROM_API_INDEX_PDS_Select_XTAL_As_PLL_Ref,\r\n    ROM_API_INDEX_PDS_Power_On_PLL,\r\n    ROM_API_INDEX_PDS_Enable_PLL_All_Clks,\r\n    ROM_API_INDEX_PDS_Disable_PLL_All_Clks,\r\n    ROM_API_INDEX_PDS_Enable_PLL_Clk,\r\n    ROM_API_INDEX_PDS_Disable_PLL_Clk,\r\n    ROM_API_INDEX_PDS_Power_Off_PLL,\r\n    ROM_API_INDEX_PDS_Reset,\r\n    ROM_API_INDEX_PDS_Enable,\r\n    ROM_API_INDEX_PDS_Auto_Time_Config,\r\n    ROM_API_INDEX_PDS_Auto_Enable,\r\n    ROM_API_INDEX_PDS_Manual_Force_Turn_Off,\r\n    ROM_API_INDEX_PDS_Manual_Force_Turn_On,\r\n\r\n    ROM_API_INDEX_HBN_Enable,\r\n    ROM_API_INDEX_HBN_Reset,\r\n    ROM_API_INDEX_HBN_GPIO_Dbg_Pull_Cfg,\r\n    ROM_API_INDEX_HBN_Trim_RC32K,\r\n    ROM_API_INDEX_HBN_Set_ROOT_CLK_Sel,\r\n\r\n    ROM_API_INDEX_XIP_SFlash_State_Save,\r\n    ROM_API_INDEX_XIP_SFlash_State_Restore,\r\n    ROM_API_INDEX_XIP_SFlash_Erase_Need_Lock,\r\n    ROM_API_INDEX_XIP_SFlash_Write_Need_Lock,\r\n    ROM_API_INDEX_XIP_SFlash_Read_Need_Lock,\r\n    ROM_API_INDEX_XIP_SFlash_GetJedecId_Need_Lock,\r\n    ROM_API_INDEX_XIP_SFlash_GetDeviceId_Need_Lock,\r\n    ROM_API_INDEX_XIP_SFlash_GetUniqueId_Need_Lock,\r\n    ROM_API_INDEX_XIP_SFlash_Read_Via_Cache_Need_Lock,\r\n    ROM_API_INDEX_XIP_SFlash_Read_With_Lock,\r\n    ROM_API_INDEX_XIP_SFlash_Write_With_Lock,\r\n    ROM_API_INDEX_XIP_SFlash_Erase_With_Lock,\r\n\r\n    ROM_API_INDEX_SFlash_Init,\r\n    ROM_API_INDEX_SFlash_SetSPIMode,\r\n    ROM_API_INDEX_SFlash_Read_Reg,\r\n    ROM_API_INDEX_SFlash_Write_Reg,\r\n    ROM_API_INDEX_SFlash_Read_Reg_With_Cmd,\r\n    ROM_API_INDEX_SFlash_Write_Reg_With_Cmd,\r\n    ROM_API_INDEX_SFlash_Busy,\r\n    ROM_API_INDEX_SFlash_Write_Enable,\r\n    ROM_API_INDEX_SFlash_Qspi_Enable,\r\n    ROM_API_INDEX_SFlash_Volatile_Reg_Write_Enable,\r\n    ROM_API_INDEX_SFlash_Chip_Erase,\r\n    ROM_API_INDEX_SFlash_Sector_Erase,\r\n    ROM_API_INDEX_SFlash_Blk32_Erase,\r\n    ROM_API_INDEX_SFlash_Blk64_Erase,\r\n    ROM_API_INDEX_SFlash_Erase,\r\n    ROM_API_INDEX_SFlash_Program,\r\n    ROM_API_INDEX_SFlash_GetUniqueId,\r\n    ROM_API_INDEX_SFlash_GetJedecId,\r\n    ROM_API_INDEX_SFlash_GetDeviceId,\r\n    ROM_API_INDEX_SFlash_Powerdown,\r\n    ROM_API_INDEX_SFlash_Releae_Powerdown,\r\n    ROM_API_INDEX_SFlash_Restore_From_Powerdown,\r\n    ROM_API_INDEX_SFlash_SetBurstWrap,\r\n    ROM_API_INDEX_SFlash_DisableBurstWrap,\r\n    ROM_API_INDEX_SFlash_Software_Reset,\r\n    ROM_API_INDEX_SFlash_Reset_Continue_Read,\r\n    ROM_API_INDEX_SFlash_Set_IDbus_Cfg,\r\n    ROM_API_INDEX_SFlash_IDbus_Read_Enable,\r\n    ROM_API_INDEX_SFlash_Cache_Read_Enable,\r\n    ROM_API_INDEX_SFlash_Cache_Read_Disable,\r\n    ROM_API_INDEX_SFlash_Read,\r\n\r\n    ROM_API_INDEX_L1C_Cache_Enable_Set,\r\n    ROM_API_INDEX_L1C_Cache_Write_Set,\r\n    ROM_API_INDEX_L1C_Cache_Flush,\r\n    ROM_API_INDEX_L1C_Cache_Hit_Count_Get,\r\n    ROM_API_INDEX_L1C_Cache_Miss_Count_Get,\r\n    ROM_API_INDEX_L1C_Cache_Read_Disable,\r\n    ROM_API_INDEX_L1C_Set_Wrap,\r\n    ROM_API_INDEX_L1C_Set_Way_Disable,\r\n    ROM_API_INDEX_L1C_IROM_2T_Access_Set,\r\n\r\n    ROM_API_INDEX_SF_Ctrl_Enable,\r\n    ROM_API_INDEX_SF_Ctrl_Psram_Init,\r\n    ROM_API_INDEX_SF_Ctrl_Get_Clock_Delay,\r\n    ROM_API_INDEX_SF_Ctrl_Set_Clock_Delay,\r\n    ROM_API_INDEX_SF_Ctrl_Cmds_Set,\r\n    ROM_API_INDEX_SF_Ctrl_Set_Owner,\r\n    ROM_API_INDEX_SF_Ctrl_Disable,\r\n    ROM_API_INDEX_SF_Ctrl_Select_Pad,\r\n    ROM_API_INDEX_SF_Ctrl_Select_Bank,\r\n    ROM_API_INDEX_SF_Ctrl_AES_Enable_BE,\r\n    ROM_API_INDEX_SF_Ctrl_AES_Enable_LE,\r\n    ROM_API_INDEX_SF_Ctrl_AES_Set_Region,\r\n    ROM_API_INDEX_SF_Ctrl_AES_Set_Key,\r\n    ROM_API_INDEX_SF_Ctrl_AES_Set_Key_BE,\r\n    ROM_API_INDEX_SF_Ctrl_AES_Set_IV,\r\n    ROM_API_INDEX_SF_Ctrl_AES_Set_IV_BE,\r\n    ROM_API_INDEX_SF_Ctrl_AES_Enable,\r\n    ROM_API_INDEX_SF_Ctrl_AES_Disable,\r\n    ROM_API_INDEX_SF_Ctrl_Is_AES_Enable,\r\n    ROM_API_INDEX_SF_Ctrl_Set_Flash_Image_Offset,\r\n    ROM_API_INDEX_SF_Ctrl_Get_Flash_Image_Offset,\r\n    ROM_API_INDEX_SF_Ctrl_Select_Clock,\r\n    ROM_API_INDEX_SF_Ctrl_SendCmd,\r\n    ROM_API_INDEX_SF_Ctrl_Flash_Read_Icache_Set,\r\n    ROM_API_INDEX_SF_Ctrl_Psram_Write_Icache_Set,\r\n    ROM_API_INDEX_SF_Ctrl_Psram_Read_Icache_Set,\r\n    ROM_API_INDEX_SF_Ctrl_GetBusyState,\r\n    ROM_API_INDEX_SF_Cfg_Deinit_Ext_Flash_Gpio,\r\n    ROM_API_INDEX_SF_Cfg_Init_Ext_Flash_Gpio,\r\n    ROM_API_INDEX_SF_Cfg_Get_Flash_Cfg_Need_Lock,\r\n    ROM_API_INDEX_SF_Cfg_Init_Flash_Gpio,\r\n    ROM_API_INDEX_SF_Cfg_Flash_Identify,\r\n\r\n    ROM_API_INDEX_Psram_Init,\r\n    ROM_API_INDEX_Psram_ReadReg,\r\n    ROM_API_INDEX_Psram_WriteReg,\r\n    ROM_API_INDEX_Psram_SetDriveStrength,\r\n    ROM_API_INDEX_Psram_SetBurstWrap,\r\n    ROM_API_INDEX_Psram_ReadId,\r\n    ROM_API_INDEX_Psram_EnterQuadMode,\r\n    ROM_API_INDEX_Psram_ExitQuadMode,\r\n    ROM_API_INDEX_Psram_ToggleBurstLength,\r\n    ROM_API_INDEX_Psram_SoftwareReset,\r\n    ROM_API_INDEX_Psram_Set_IDbus_Cfg,\r\n    ROM_API_INDEX_Psram_Cache_Write_Set,\r\n    ROM_API_INDEX_Psram_Write,\r\n    ROM_API_INDEX_Psram_Read,\r\n\r\n    ROM_API_INDEX_FUNC_LAST = ROM_API_INDEX_Psram_Read,\r\n\r\n    ROM_API_INDEX_FUNC_INVALID_START,\r\n\r\n    ROM_API_INDEX_FUNC_LAST_ENTRY = ROMAPI_INDEX_MAX\r\n} ROM_API_INDEX_e;\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  ROMDRIVER\r\n *  @{\r\n */\r\n\r\n/** @defgroup  ROMDRIVER_Public_Types\r\n *  @{\r\n */\r\n#define ROM_APITABLE ((uint32_t *)0x21018800)\r\n\r\n#define RomDriver_AON_Power_On_MBG \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_AON_Power_On_MBG])\r\n#define RomDriver_AON_Power_Off_MBG \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_AON_Power_Off_MBG])\r\n#define RomDriver_AON_Power_On_XTAL \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_AON_Power_On_XTAL])\r\n#define RomDriver_AON_Set_Xtal_CapCode \\\r\n    ((BL_Err_Type(*)(uint8_t capIn, uint8_t capOut))ROM_APITABLE[ROM_API_INDEX_AON_Set_Xtal_CapCode])\r\n#define RomDriver_AON_Power_Off_XTAL \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_AON_Power_Off_XTAL])\r\n\r\n#define RomDriver_ASM_Delay_Us \\\r\n    ((void (*)(uint32_t core, uint32_t cnt))ROM_APITABLE[ROM_API_INDEX_ASM_Delay_Us])\r\n#define RomDriver_BL702_Delay_US \\\r\n    ((void (*)(uint32_t cnt))ROM_APITABLE[ROM_API_INDEX_BL702_Delay_US])\r\n#define RomDriver_BL702_Delay_MS \\\r\n    ((void (*)(uint32_t cnt))ROM_APITABLE[ROM_API_INDEX_BL702_Delay_MS])\r\n#define RomDriver_BL702_MemCpy \\\r\n    ((void *(*)(void *dst, const void *src, uint32_t n))ROM_APITABLE[ROM_API_INDEX_BL702_MemCpy])\r\n#define RomDriver_BL702_MemCpy4 \\\r\n    ((uint32_t * (*)(uint32_t * dst, const uint32_t *src, uint32_t n)) ROM_APITABLE[ROM_API_INDEX_BL702_MemCpy4])\r\n#define RomDriver_BL702_MemCpy_Fast \\\r\n    ((void *(*)(void *pdst, const void *psrc, uint32_t n))ROM_APITABLE[ROM_API_INDEX_BL702_MemCpy_Fast])\r\n#define RomDriver_ARCH_MemCpy_Fast \\\r\n    ((void *(*)(void *pdst, const void *psrc, uint32_t n))ROM_APITABLE[ROM_API_INDEX_ARCH_MemCpy_Fast])\r\n#define RomDriver_BL702_MemSet \\\r\n    ((void *(*)(void *s, uint8_t c, uint32_t n))ROM_APITABLE[ROM_API_INDEX_BL702_MemSet])\r\n#define RomDriver_BL702_MemSet4 \\\r\n    ((uint32_t * (*)(uint32_t * dst, const uint32_t val, uint32_t n)) ROM_APITABLE[ROM_API_INDEX_BL702_MemSet4])\r\n#define RomDriver_BL702_MemCmp \\\r\n    ((int (*)(const void *s1, const void *s2, uint32_t n))ROM_APITABLE[ROM_API_INDEX_BL702_MemCmp])\r\n#define RomDriver_BFLB_Soft_CRC32 \\\r\n    ((uint32_t(*)(void *dataIn, uint32_t len))ROM_APITABLE[ROM_API_INDEX_BFLB_Soft_CRC32])\r\n\r\n#define RomDriver_GLB_Get_Root_CLK_Sel \\\r\n    ((GLB_ROOT_CLK_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_GLB_Get_Root_CLK_Sel])\r\n#define RomDriver_GLB_Set_System_CLK_Div \\\r\n    ((BL_Err_Type(*)(uint8_t hclkDiv, uint8_t bclkDiv))ROM_APITABLE[ROM_API_INDEX_GLB_Set_System_CLK_Div])\r\n#define RomDriver_GLB_Get_BCLK_Div \\\r\n    ((uint8_t(*)(void))ROM_APITABLE[ROM_API_INDEX_GLB_Get_BCLK_Div])\r\n#define RomDriver_GLB_Get_HCLK_Div \\\r\n    ((uint8_t(*)(void))ROM_APITABLE[ROM_API_INDEX_GLB_Get_HCLK_Div])\r\n#define RomDriver_Update_SystemCoreClockWith_XTAL \\\r\n    ((BL_Err_Type(*)(GLB_DLL_XTAL_Type xtalType))ROM_APITABLE[ROM_API_INDEX_Update_SystemCoreClockWith_XTAL])\r\n#define RomDriver_GLB_Set_System_CLK \\\r\n    ((BL_Err_Type(*)(GLB_DLL_XTAL_Type xtalType, GLB_SYS_CLK_Type clkFreq))ROM_APITABLE[ROM_API_INDEX_GLB_Set_System_CLK])\r\n#define RomDriver_System_Core_Clock_Update_From_RC32M \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_System_Core_Clock_Update_From_RC32M])\r\n#define RomDriver_GLB_Set_SF_CLK \\\r\n    ((BL_Err_Type(*)(uint8_t enable, GLB_SFLASH_CLK_Type clkSel, uint8_t div))ROM_APITABLE[ROM_API_INDEX_GLB_Set_SF_CLK])\r\n#define RomDriver_GLB_Power_Off_DLL \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_GLB_Power_Off_DLL])\r\n#define RomDriver_GLB_Power_On_DLL \\\r\n    ((BL_Err_Type(*)(GLB_DLL_XTAL_Type xtalType))ROM_APITABLE[ROM_API_INDEX_GLB_Power_On_DLL])\r\n#define RomDriver_GLB_Enable_DLL_All_Clks \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_GLB_Enable_DLL_All_Clks])\r\n#define RomDriver_GLB_Enable_DLL_Clk \\\r\n    ((BL_Err_Type(*)(GLB_DLL_CLK_Type dllClk))ROM_APITABLE[ROM_API_INDEX_GLB_Enable_DLL_Clk])\r\n#define RomDriver_GLB_Disable_DLL_All_Clks \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_GLB_Disable_DLL_All_Clks])\r\n#define RomDriver_GLB_Disable_DLL_Clk \\\r\n    ((BL_Err_Type(*)(GLB_DLL_CLK_Type dllClk))ROM_APITABLE[ROM_API_INDEX_GLB_Disable_DLL_Clk])\r\n#define RomDriver_GLB_SW_System_Reset \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_GLB_SW_System_Reset])\r\n#define RomDriver_GLB_SW_CPU_Reset \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_GLB_SW_CPU_Reset])\r\n#define RomDriver_GLB_SW_POR_Reset \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_GLB_SW_POR_Reset])\r\n#define RomDriver_GLB_Select_Internal_Flash \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_GLB_Select_Internal_Flash])\r\n#define RomDriver_GLB_Swap_Flash_Pin \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_GLB_Swap_Flash_Pin])\r\n#define RomDriver_GLB_Swap_Flash_CS_IO2_Pin \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_GLB_Swap_Flash_CS_IO2_Pin])\r\n#define RomDriver_GLB_Swap_Flash_IO0_IO3_Pin \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_GLB_Swap_Flash_IO0_IO3_Pin])\r\n#define RomDriver_GLB_Select_Internal_PSram \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_GLB_Select_Internal_PSram])\r\n#define RomDriver_GLB_GPIO_Init \\\r\n    ((BL_Err_Type(*)(GLB_GPIO_Cfg_Type * cfg)) ROM_APITABLE[ROM_API_INDEX_GLB_GPIO_Init])\r\n#define RomDriver_GLB_GPIO_OUTPUT_Enable \\\r\n    ((BL_Err_Type(*)(GLB_GPIO_Type gpioPin))ROM_APITABLE[ROM_API_INDEX_GLB_GPIO_OUTPUT_Enable])\r\n#define RomDriver_GLB_GPIO_OUTPUT_Disable \\\r\n    ((BL_Err_Type(*)(GLB_GPIO_Type gpioPin))ROM_APITABLE[ROM_API_INDEX_GLB_GPIO_OUTPUT_Disable])\r\n#define RomDriver_GLB_GPIO_Set_HZ \\\r\n    ((BL_Err_Type(*)(GLB_GPIO_Type gpioPin))ROM_APITABLE[ROM_API_INDEX_GLB_GPIO_Set_HZ])\r\n#define RomDriver_GLB_Deswap_Flash_Pin \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_GLB_Deswap_Flash_Pin])\r\n#define RomDriver_GLB_Select_External_Flash \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_GLB_Select_External_Flash])\r\n#define RomDriver_GLB_GPIO_Get_Fun \\\r\n    ((uint8_t(*)(GLB_GPIO_Type gpioPin))ROM_APITABLE[ROM_API_INDEX_GLB_GPIO_Get_Fun])\r\n\r\n#define RomDriver_EF_Ctrl_Busy \\\r\n    ((BL_Sts_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_EF_Ctrl_Busy])\r\n#define RomDriver_EF_Ctrl_Sw_AHB_Clk_0 \\\r\n    ((void (*)(void))ROM_APITABLE[ROM_API_INDEX_EF_Ctrl_Sw_AHB_Clk_0])\r\n#define RomDriver_EF_Ctrl_Load_Efuse_R0 \\\r\n    ((void (*)(void))ROM_APITABLE[ROM_API_INDEX_EF_Ctrl_Load_Efuse_R0])\r\n#define RomDriver_EF_Ctrl_Clear \\\r\n    ((void (*)(uint32_t index, uint32_t len))ROM_APITABLE[ROM_API_INDEX_EF_Ctrl_Clear])\r\n#define RomDriver_EF_Ctrl_Get_Trim_Parity \\\r\n    ((uint8_t(*)(uint32_t val, uint8_t len))ROM_APITABLE[ROM_API_INDEX_EF_Ctrl_Get_Trim_Parity])\r\n#define RomDriver_EF_Ctrl_Read_RC32K_Trim \\\r\n    ((void (*)(Efuse_Ana_RC32K_Trim_Type * trim)) ROM_APITABLE[ROM_API_INDEX_EF_Ctrl_Read_RC32K_Trim])\r\n#define RomDriver_EF_Ctrl_Read_RC32M_Trim \\\r\n    ((void (*)(Efuse_Ana_RC32M_Trim_Type * trim)) ROM_APITABLE[ROM_API_INDEX_EF_Ctrl_Read_RC32M_Trim])\r\n\r\n#define RomDriver_PDS_Trim_RC32M \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_PDS_Trim_RC32M])\r\n#define RomDriver_PDS_Select_RC32M_As_PLL_Ref \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_PDS_Select_RC32M_As_PLL_Ref])\r\n#define RomDriver_PDS_Select_XTAL_As_PLL_Ref \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_PDS_Select_XTAL_As_PLL_Ref])\r\n#define RomDriver_PDS_Power_On_PLL \\\r\n    ((BL_Err_Type(*)(PDS_PLL_XTAL_Type xtalType))ROM_APITABLE[ROM_API_INDEX_PDS_Power_On_PLL])\r\n#define RomDriver_PDS_Enable_PLL_All_Clks \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_PDS_Enable_PLL_All_Clks])\r\n#define RomDriver_PDS_Disable_PLL_All_Clks \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_PDS_Disable_PLL_All_Clks])\r\n#define RomDriver_PDS_Enable_PLL_Clk \\\r\n    ((BL_Err_Type(*)(PDS_PLL_CLK_Type pllClk))ROM_APITABLE[ROM_API_INDEX_PDS_Enable_PLL_Clk])\r\n#define RomDriver_PDS_Disable_PLL_Clk \\\r\n    ((BL_Err_Type(*)(PDS_PLL_CLK_Type pllClk))ROM_APITABLE[ROM_API_INDEX_PDS_Disable_PLL_Clk])\r\n#define RomDriver_PDS_Power_Off_PLL \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_PDS_Power_Off_PLL])\r\n#define RomDriver_PDS_Reset \\\r\n    ((void (*)(void))ROM_APITABLE[ROM_API_INDEX_PDS_Reset])\r\n#define RomDriver_PDS_Enable \\\r\n    ((void (*)(PDS_CFG_Type * cfg, uint32_t pdsSleepCnt)) ROM_APITABLE[ROM_API_INDEX_PDS_Enable])\r\n#define RomDriver_PDS_Auto_Time_Config \\\r\n    ((void (*)(uint32_t sleepDuration))ROM_APITABLE[ROM_API_INDEX_PDS_Auto_Time_Config])\r\n#define RomDriver_PDS_Auto_Enable \\\r\n    ((void (*)(PDS_AUTO_POWER_DOWN_CFG_Type * powerCfg, PDS_AUTO_NORMAL_CFG_Type * normalCfg, BL_Fun_Type enable)) ROM_APITABLE[ROM_API_INDEX_PDS_Auto_Enable])\r\n#define RomDriver_PDS_Manual_Force_Turn_Off \\\r\n    ((void (*)(PDS_FORCE_Type domain))ROM_APITABLE[ROM_API_INDEX_PDS_Manual_Force_Turn_Off])\r\n#define RomDriver_PDS_Manual_Force_Turn_On \\\r\n    ((void (*)(PDS_FORCE_Type domain))ROM_APITABLE[ROM_API_INDEX_PDS_Manual_Force_Turn_On])\r\n\r\n#define RomDriver_HBN_Enable \\\r\n    ((void (*)(uint8_t aGPIOIeCfg, HBN_LDO_LEVEL_Type ldoLevel, HBN_LEVEL_Type hbnLevel))ROM_APITABLE[ROM_API_INDEX_HBN_Enable])\r\n#define RomDriver_HBN_Reset \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_HBN_Reset])\r\n#define RomDriver_HBN_GPIO_Dbg_Pull_Cfg \\\r\n    ((BL_Err_Type(*)(BL_Fun_Type pupdEn, BL_Fun_Type dlyEn, uint8_t dlySec, HBN_INT_Type gpioIrq, BL_Mask_Type gpioMask))ROM_APITABLE[ROM_API_INDEX_HBN_GPIO_Dbg_Pull_Cfg])\r\n#define RomDriver_HBN_Trim_RC32K \\\r\n    ((BL_Err_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_HBN_Trim_RC32K])\r\n#define RomDriver_HBN_Set_ROOT_CLK_Sel \\\r\n    ((BL_Err_Type(*)(HBN_ROOT_CLK_Type rootClk))ROM_APITABLE[ROM_API_INDEX_HBN_Set_ROOT_CLK_Sel])\r\n\r\n#define RomDriver_XIP_SFlash_State_Save \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * pFlashCfg, uint32_t * offset)) ROM_APITABLE[ROM_API_INDEX_XIP_SFlash_State_Save])\r\n#define RomDriver_XIP_SFlash_State_Restore \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t offset)) ROM_APITABLE[ROM_API_INDEX_XIP_SFlash_State_Restore])\r\n#define RomDriver_XIP_SFlash_Erase_Need_Lock \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t startaddr, uint32_t endaddr)) ROM_APITABLE[ROM_API_INDEX_XIP_SFlash_Erase_Need_Lock])\r\n#define RomDriver_XIP_SFlash_Write_Need_Lock \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t * data, uint32_t len)) ROM_APITABLE[ROM_API_INDEX_XIP_SFlash_Write_Need_Lock])\r\n#define RomDriver_XIP_SFlash_Read_Need_Lock \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t * data, uint32_t len)) ROM_APITABLE[ROM_API_INDEX_XIP_SFlash_Read_Need_Lock])\r\n#define RomDriver_XIP_SFlash_GetJedecId_Need_Lock \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * pFlashCfg, SF_Ctrl_IO_Type ioMode, uint8_t * data)) ROM_APITABLE[ROM_API_INDEX_XIP_SFlash_GetJedecId_Need_Lock])\r\n#define RomDriver_XIP_SFlash_GetDeviceId_Need_Lock \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * pFlashCfg, SF_Ctrl_IO_Type ioMode, uint8_t * data)) ROM_APITABLE[ROM_API_INDEX_XIP_SFlash_GetDeviceId_Need_Lock])\r\n#define RomDriver_XIP_SFlash_GetUniqueId_Need_Lock \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * pFlashCfg, SF_Ctrl_IO_Type ioMode, uint8_t * data, uint8_t idLen)) ROM_APITABLE[ROM_API_INDEX_XIP_SFlash_GetUniqueId_Need_Lock])\r\n#define RomDriver_XIP_SFlash_Read_Via_Cache_Need_Lock \\\r\n    ((BL_Err_Type(*)(uint32_t addr, uint8_t * data, uint32_t len)) ROM_APITABLE[ROM_API_INDEX_XIP_SFlash_Read_Via_Cache_Need_Lock])\r\n#define RomDriver_XIP_SFlash_Read_With_Lock \\\r\n    ((int (*)(SPI_Flash_Cfg_Type * pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t * dst, int len)) ROM_APITABLE[ROM_API_INDEX_XIP_SFlash_Read_With_Lock])\r\n#define RomDriver_XIP_SFlash_Write_With_Lock \\\r\n    ((int (*)(SPI_Flash_Cfg_Type * pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t * src, int len)) ROM_APITABLE[ROM_API_INDEX_XIP_SFlash_Write_With_Lock])\r\n#define RomDriver_XIP_SFlash_Erase_With_Lock \\\r\n    ((int (*)(SPI_Flash_Cfg_Type * pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, int len)) ROM_APITABLE[ROM_API_INDEX_XIP_SFlash_Erase_With_Lock])\r\n\r\n#define RomDriver_SFlash_Init \\\r\n    ((void (*)(const SF_Ctrl_Cfg_Type *pSfCtrlCfg))ROM_APITABLE[ROM_API_INDEX_SFlash_Init])\r\n#define RomDriver_SFlash_SetSPIMode \\\r\n    ((BL_Err_Type(*)(SF_Ctrl_Mode_Type mode))ROM_APITABLE[ROM_API_INDEX_SFlash_SetSPIMode])\r\n#define RomDriver_SFlash_Read_Reg \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg, uint8_t regIndex, uint8_t * regValue, uint8_t regLen)) ROM_APITABLE[ROM_API_INDEX_SFlash_Read_Reg])\r\n#define RomDriver_SFlash_Write_Reg \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg, uint8_t regIndex, uint8_t * regValue, uint8_t regLen)) ROM_APITABLE[ROM_API_INDEX_SFlash_Write_Reg])\r\n#define RomDriver_SFlash_Read_Reg_With_Cmd \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg, uint8_t readRegCmd, uint8_t * regValue, uint8_t regLen)) ROM_APITABLE[ROM_API_INDEX_SFlash_Read_Reg_With_Cmd])\r\n#define RomDriver_SFlash_Write_Reg_With_Cmd \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg, uint8_t writeRegCmd, uint8_t * regValue, uint8_t regLen)) ROM_APITABLE[ROM_API_INDEX_SFlash_Write_Reg_With_Cmd])\r\n#define RomDriver_SFlash_Busy \\\r\n    ((BL_Sts_Type(*)(SPI_Flash_Cfg_Type * flashCfg)) ROM_APITABLE[ROM_API_INDEX_SFlash_Busy])\r\n#define RomDriver_SFlash_Write_Enable \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg)) ROM_APITABLE[ROM_API_INDEX_SFlash_Write_Enable])\r\n#define RomDriver_SFlash_Qspi_Enable \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg)) ROM_APITABLE[ROM_API_INDEX_SFlash_Qspi_Enable])\r\n#define RomDriver_SFlash_Volatile_Reg_Write_Enable \\\r\n    ((void (*)(SPI_Flash_Cfg_Type * flashCfg)) ROM_APITABLE[ROM_API_INDEX_SFlash_Volatile_Reg_Write_Enable])\r\n#define RomDriver_SFlash_Chip_Erase \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg)) ROM_APITABLE[ROM_API_INDEX_SFlash_Chip_Erase])\r\n#define RomDriver_SFlash_Sector_Erase \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg, uint32_t secNum)) ROM_APITABLE[ROM_API_INDEX_SFlash_Sector_Erase])\r\n#define RomDriver_SFlash_Blk32_Erase \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg, uint32_t blkNum)) ROM_APITABLE[ROM_API_INDEX_SFlash_Blk32_Erase])\r\n#define RomDriver_SFlash_Blk64_Erase \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg, uint32_t blkNum)) ROM_APITABLE[ROM_API_INDEX_SFlash_Blk64_Erase])\r\n#define RomDriver_SFlash_Erase \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg, uint32_t startaddr, uint32_t endaddr)) ROM_APITABLE[ROM_API_INDEX_SFlash_Erase])\r\n#define RomDriver_SFlash_Program \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t * data, uint32_t len)) ROM_APITABLE[ROM_API_INDEX_SFlash_Program])\r\n#define RomDriver_SFlash_GetUniqueId \\\r\n    ((void (*)(uint8_t * data, uint8_t idLen)) ROM_APITABLE[ROM_API_INDEX_SFlash_GetUniqueId])\r\n#define RomDriver_SFlash_GetJedecId \\\r\n    ((void (*)(SPI_Flash_Cfg_Type * flashCfg, uint8_t * data)) ROM_APITABLE[ROM_API_INDEX_SFlash_GetJedecId])\r\n#define RomDriver_SFlash_GetDeviceId \\\r\n    ((void (*)(uint8_t * data)) ROM_APITABLE[ROM_API_INDEX_SFlash_GetDeviceId])\r\n#define RomDriver_SFlash_Powerdown \\\r\n    ((void (*)(void))ROM_APITABLE[ROM_API_INDEX_SFlash_Powerdown])\r\n#define RomDriver_SFlash_Releae_Powerdown \\\r\n    ((void (*)(SPI_Flash_Cfg_Type * flashCfg)) ROM_APITABLE[ROM_API_INDEX_SFlash_Releae_Powerdown])\r\n#define RomDriver_SFlash_Restore_From_Powerdown \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * pFlashCfg, uint8_t flashContRead)) ROM_APITABLE[ROM_API_INDEX_SFlash_Restore_From_Powerdown])\r\n#define RomDriver_SFlash_SetBurstWrap \\\r\n    ((void (*)(SPI_Flash_Cfg_Type * flashCfg)) ROM_APITABLE[ROM_API_INDEX_SFlash_SetBurstWrap])\r\n#define RomDriver_SFlash_DisableBurstWrap \\\r\n    ((void (*)(SPI_Flash_Cfg_Type * flashCfg)) ROM_APITABLE[ROM_API_INDEX_SFlash_DisableBurstWrap])\r\n#define RomDriver_SFlash_Software_Reset \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg)) ROM_APITABLE[ROM_API_INDEX_SFlash_Software_Reset])\r\n#define RomDriver_SFlash_Reset_Continue_Read \\\r\n    ((void (*)(SPI_Flash_Cfg_Type * flashCfg)) ROM_APITABLE[ROM_API_INDEX_SFlash_Reset_Continue_Read])\r\n#define RomDriver_SFlash_Set_IDbus_Cfg \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg, SF_Ctrl_IO_Type ioMode, uint8_t contRead, uint32_t addr, uint32_t len)) ROM_APITABLE[ROM_API_INDEX_SFlash_Set_IDbus_Cfg])\r\n#define RomDriver_SFlash_IDbus_Read_Enable \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg, SF_Ctrl_IO_Type ioMode, uint8_t contRead)) ROM_APITABLE[ROM_API_INDEX_SFlash_IDbus_Read_Enable])\r\n#define RomDriver_SFlash_Cache_Read_Enable \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg, SF_Ctrl_IO_Type ioMode, uint8_t contRead, uint8_t wayDisable)) ROM_APITABLE[ROM_API_INDEX_SFlash_Cache_Read_Enable])\r\n#define RomDriver_SFlash_Cache_Read_Disable \\\r\n    ((void (*)(void))ROM_APITABLE[ROM_API_INDEX_SFlash_Cache_Read_Disable])\r\n#define RomDriver_SFlash_Read \\\r\n    ((BL_Err_Type(*)(SPI_Flash_Cfg_Type * flashCfg, SF_Ctrl_IO_Type ioMode, uint8_t contRead, uint32_t addr, uint8_t * data, uint32_t len)) ROM_APITABLE[ROM_API_INDEX_SFlash_Read])\r\n\r\n#define RomDriver_L1C_Cache_Enable_Set \\\r\n    ((BL_Err_Type(*)(uint8_t wayDisable))ROM_APITABLE[ROM_API_INDEX_L1C_Cache_Enable_Set])\r\n#define RomDriver_L1C_Cache_Write_Set \\\r\n    ((void (*)(BL_Fun_Type wtEn, BL_Fun_Type wbEn, BL_Fun_Type waEn))ROM_APITABLE[ROM_API_INDEX_L1C_Cache_Write_Set])\r\n#define RomDriver_L1C_Cache_Flush \\\r\n    ((BL_Err_Type(*)(uint8_t wayDisable))ROM_APITABLE[ROM_API_INDEX_L1C_Cache_Flush])\r\n#define RomDriver_L1C_Cache_Hit_Count_Get \\\r\n    ((void (*)(uint32_t * hitCountLow, uint32_t * hitCountHigh)) ROM_APITABLE[ROM_API_INDEX_L1C_Cache_Hit_Count_Get])\r\n#define RomDriver_L1C_Cache_Miss_Count_Get \\\r\n    ((uint32_t(*)(void))ROM_APITABLE[ROM_API_INDEX_L1C_Cache_Miss_Count_Get])\r\n#define RomDriver_L1C_Cache_Read_Disable \\\r\n    ((void (*)(void))ROM_APITABLE[ROM_API_INDEX_L1C_Cache_Read_Disable])\r\n#define RomDriver_L1C_Set_Wrap \\\r\n    ((BL_Err_Type(*)(BL_Fun_Type wrap))ROM_APITABLE[ROM_API_INDEX_L1C_Set_Wrap])\r\n#define RomDriver_L1C_Set_Way_Disable \\\r\n    ((BL_Err_Type(*)(uint8_t disableVal))ROM_APITABLE[ROM_API_INDEX_L1C_Set_Way_Disable])\r\n#define RomDriver_L1C_IROM_2T_Access_Set \\\r\n    ((BL_Err_Type(*)(uint8_t enable))ROM_APITABLE[ROM_API_INDEX_L1C_IROM_2T_Access_Set])\r\n\r\n#define RomDriver_SF_Ctrl_Enable \\\r\n    ((void (*)(const SF_Ctrl_Cfg_Type *cfg))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_Enable])\r\n#define RomDriver_SF_Ctrl_Psram_Init \\\r\n    ((void (*)(SF_Ctrl_Psram_Cfg * sfCtrlPsramCfg)) ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_Psram_Init])\r\n#define RomDriver_SF_Ctrl_Get_Clock_Delay \\\r\n    ((uint8_t(*)(void))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_Get_Clock_Delay])\r\n#define RomDriver_SF_Ctrl_Set_Clock_Delay \\\r\n    ((void (*)(uint8_t delay))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_Set_Clock_Delay])\r\n#define RomDriver_SF_Ctrl_Cmds_Set \\\r\n    ((void (*)(SF_Ctrl_Cmds_Cfg * cmdsCfg)) ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_Cmds_Set])\r\n#define RomDriver_SF_Ctrl_Set_Owner \\\r\n    ((void (*)(SF_Ctrl_Owner_Type owner))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_Set_Owner])\r\n#define RomDriver_SF_Ctrl_Disable \\\r\n    ((void (*)(void))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_Disable])\r\n#define RomDriver_SF_Ctrl_Select_Pad \\\r\n    ((void (*)(SF_Ctrl_Pad_Select sel))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_Select_Pad])\r\n#define RomDriver_SF_Ctrl_Select_Bank \\\r\n    ((void (*)(SF_Ctrl_Select sel))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_Select_Bank])\r\n#define RomDriver_SF_Ctrl_AES_Enable_BE \\\r\n    ((void (*)(void))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_AES_Enable_BE])\r\n#define RomDriver_SF_Ctrl_AES_Enable_LE \\\r\n    ((void (*)(void))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_AES_Enable_LE])\r\n#define RomDriver_SF_Ctrl_AES_Set_Region \\\r\n    ((void (*)(uint8_t region, uint8_t enable, uint8_t hwKey, uint32_t startAddr, uint32_t endAddr, uint8_t locked))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_AES_Set_Region])\r\n#define RomDriver_SF_Ctrl_AES_Set_Key \\\r\n    ((void (*)(uint8_t region, uint8_t * key, SF_Ctrl_AES_Key_Type keyType)) ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_AES_Set_Key])\r\n#define RomDriver_SF_Ctrl_AES_Set_Key_BE \\\r\n    ((void (*)(uint8_t region, uint8_t * key, SF_Ctrl_AES_Key_Type keyType)) ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_AES_Set_Key_BE])\r\n#define RomDriver_SF_Ctrl_AES_Set_IV \\\r\n    ((void (*)(uint8_t region, uint8_t * iv, uint32_t addrOffset)) ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_AES_Set_IV])\r\n#define RomDriver_SF_Ctrl_AES_Set_IV_BE \\\r\n    ((void (*)(uint8_t region, uint8_t * iv, uint32_t addrOffset)) ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_AES_Set_IV_BE])\r\n#define RomDriver_SF_Ctrl_AES_Enable \\\r\n    ((void (*)(void))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_AES_Enable])\r\n#define RomDriver_SF_Ctrl_AES_Disable \\\r\n    ((void (*)(void))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_AES_Disable])\r\n#define RomDriver_SF_Ctrl_Is_AES_Enable \\\r\n    ((uint8_t(*)(void))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_Is_AES_Enable])\r\n#define RomDriver_SF_Ctrl_Set_Flash_Image_Offset \\\r\n    ((void (*)(uint32_t addrOffset))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_Set_Flash_Image_Offset])\r\n#define RomDriver_SF_Ctrl_Get_Flash_Image_Offset \\\r\n    ((uint32_t(*)(void))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_Get_Flash_Image_Offset])\r\n#define RomDriver_SF_Ctrl_Select_Clock \\\r\n    ((void (*)(SF_Ctrl_Sahb_Type sahbType))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_Select_Clock])\r\n#define RomDriver_SF_Ctrl_SendCmd \\\r\n    ((void (*)(SF_Ctrl_Cmd_Cfg_Type * cfg)) ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_SendCmd])\r\n#define RomDriver_SF_Ctrl_Flash_Read_Icache_Set \\\r\n    ((void (*)(SF_Ctrl_Cmd_Cfg_Type * cfg, uint8_t cmdValid)) ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_Flash_Read_Icache_Set])\r\n#define RomDriver_SF_Ctrl_Psram_Write_Icache_Set \\\r\n    ((void (*)(SF_Ctrl_Cmd_Cfg_Type * cfg, uint8_t cmdValid)) ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_Psram_Write_Icache_Set])\r\n#define RomDriver_SF_Ctrl_Psram_Read_Icache_Set \\\r\n    ((void (*)(SF_Ctrl_Cmd_Cfg_Type * cfg, uint8_t cmdValid)) ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_Psram_Read_Icache_Set])\r\n#define RomDriver_SF_Ctrl_GetBusyState \\\r\n    ((BL_Sts_Type(*)(void))ROM_APITABLE[ROM_API_INDEX_SF_Ctrl_GetBusyState])\r\n#define RomDriver_SF_Cfg_Deinit_Ext_Flash_Gpio \\\r\n    ((void (*)(uint8_t extFlashPin))ROM_APITABLE[ROM_API_INDEX_SF_Cfg_Deinit_Ext_Flash_Gpio])\r\n#define RomDriver_SF_Cfg_Init_Ext_Flash_Gpio \\\r\n    ((void (*)(uint8_t extFlashPin))ROM_APITABLE[ROM_API_INDEX_SF_Cfg_Init_Ext_Flash_Gpio])\r\n#define RomDriver_SF_Cfg_Get_Flash_Cfg_Need_Lock \\\r\n    ((BL_Err_Type(*)(uint32_t flashID, SPI_Flash_Cfg_Type * pFlashCfg)) ROM_APITABLE[ROM_API_INDEX_SF_Cfg_Get_Flash_Cfg_Need_Lock])\r\n#define RomDriver_SF_Cfg_Init_Flash_Gpio \\\r\n    ((void (*)(uint8_t flashPinCfg, uint8_t restoreDefault))ROM_APITABLE[ROM_API_INDEX_SF_Cfg_Init_Flash_Gpio])\r\n#define RomDriver_SF_Cfg_Flash_Identify \\\r\n    ((uint32_t(*)(uint8_t callFromFlash, uint32_t autoScan, uint32_t flashPinCfg, uint8_t restoreDefault, SPI_Flash_Cfg_Type * pFlashCfg)) ROM_APITABLE[ROM_API_INDEX_SF_Cfg_Flash_Identify])\r\n\r\n#define RomDriver_Psram_Init \\\r\n    ((void (*)(SPI_Psram_Cfg_Type * psramCfg, SF_Ctrl_Cmds_Cfg * cmdsCfg, SF_Ctrl_Psram_Cfg * sfCtrlPsramCfg)) ROM_APITABLE[ROM_API_INDEX_Psram_Init])\r\n#define RomDriver_Psram_ReadReg \\\r\n    ((void (*)(SPI_Psram_Cfg_Type * psramCfg, uint8_t * regValue)) ROM_APITABLE[ROM_API_INDEX_Psram_ReadReg])\r\n#define RomDriver_Psram_WriteReg \\\r\n    ((void (*)(SPI_Psram_Cfg_Type * psramCfg, uint8_t * regValue)) ROM_APITABLE[ROM_API_INDEX_Psram_WriteReg])\r\n#define RomDriver_Psram_SetDriveStrength \\\r\n    ((BL_Err_Type(*)(SPI_Psram_Cfg_Type * psramCfg)) ROM_APITABLE[ROM_API_INDEX_Psram_SetDriveStrength])\r\n#define RomDriver_Psram_SetBurstWrap \\\r\n    ((BL_Err_Type(*)(SPI_Psram_Cfg_Type * psramCfg)) ROM_APITABLE[ROM_API_INDEX_Psram_SetBurstWrap])\r\n#define RomDriver_Psram_ReadId \\\r\n    ((void (*)(SPI_Psram_Cfg_Type * psramCfg, uint8_t * data)) ROM_APITABLE[ROM_API_INDEX_Psram_ReadId])\r\n#define RomDriver_Psram_EnterQuadMode \\\r\n    ((BL_Err_Type(*)(SPI_Psram_Cfg_Type * psramCfg)) ROM_APITABLE[ROM_API_INDEX_Psram_EnterQuadMode])\r\n#define RomDriver_Psram_ExitQuadMode \\\r\n    ((BL_Err_Type(*)(SPI_Psram_Cfg_Type * psramCfg)) ROM_APITABLE[ROM_API_INDEX_Psram_ExitQuadMode])\r\n#define RomDriver_Psram_ToggleBurstLength \\\r\n    ((BL_Err_Type(*)(SPI_Psram_Cfg_Type * psramCfg, PSRAM_Ctrl_Mode ctrlMode)) ROM_APITABLE[ROM_API_INDEX_Psram_ToggleBurstLength])\r\n#define RomDriver_Psram_SoftwareReset \\\r\n    ((BL_Err_Type(*)(SPI_Psram_Cfg_Type * psramCfg, PSRAM_Ctrl_Mode ctrlMode)) ROM_APITABLE[ROM_API_INDEX_Psram_SoftwareReset])\r\n#define RomDriver_Psram_Set_IDbus_Cfg \\\r\n    ((BL_Err_Type(*)(SPI_Psram_Cfg_Type * psramCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint32_t len)) ROM_APITABLE[ROM_API_INDEX_Psram_Set_IDbus_Cfg])\r\n#define RomDriver_Psram_Cache_Write_Set \\\r\n    ((BL_Err_Type(*)(SPI_Psram_Cfg_Type * psramCfg, SF_Ctrl_IO_Type ioMode, BL_Fun_Type wtEn, BL_Fun_Type wbEn, BL_Fun_Type waEn)) ROM_APITABLE[ROM_API_INDEX_Psram_Cache_Write_Set])\r\n#define RomDriver_Psram_Write \\\r\n    ((BL_Err_Type(*)(SPI_Psram_Cfg_Type * psramCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t * data, uint32_t len)) ROM_APITABLE[ROM_API_INDEX_Psram_Write])\r\n#define RomDriver_Psram_Read \\\r\n    ((BL_Err_Type(*)(SPI_Psram_Cfg_Type * psramCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t * data, uint32_t len)) ROM_APITABLE[ROM_API_INDEX_Psram_Read])\r\n/*@} end of group ROMDRIVER_Public_Types */\r\n\r\n/** @defgroup  ROMDRIVER_Public_Constants\r\n *  @{\r\n */\r\n\r\n/*@} end of group ROMDRIVER_Public_Constants */\r\n\r\n/** @defgroup  ROMDRIVER_Public_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group ROMDRIVER_Public_Macros */\r\n\r\n/** @defgroup  ROMDRIVER_Public_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group ROMDRIVER_Public_Functions */\r\n\r\n/*@} end of group ROMDRIVER */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_ROMDRIVER_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_sec_dbg.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_sec_dbg.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_SEC_DBG_H__\r\n#define __BL702_SEC_DBG_H__\r\n\r\n#include \"sec_dbg_reg.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SEC_DBG\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SEC_DBG_Public_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group SEC_DBG_Public_Types */\r\n\r\n/** @defgroup  SEC_DBG_Public_Constants\r\n *  @{\r\n */\r\n\r\n/*@} end of group SEC_DBG_Public_Constants */\r\n\r\n/** @defgroup  SEC_DBG_Public_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group SEC_DBG_Public_Macros */\r\n\r\n/** @defgroup  SEC_DBG_Public_Functions\r\n *  @{\r\n */\r\nvoid Sec_Dbg_Read_Chip_ID(uint8_t id[8]);\r\nvoid Sec_Dbg_Read_WiFi_MAC(uint8_t macAddr[6]);\r\nuint32_t Sec_Dbg_Read_Dbg_Mode(void);\r\nuint32_t Sec_Dbg_Read_Dbg_Enable(void);\r\n\r\n/*@} end of group SEC_DBG_Public_Functions */\r\n\r\n/*@} end of group SEC_DBG */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_SEC_DBG_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_sec_eng.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_sec_eng.h\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver header file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n#ifndef __BL702_SEC_ENG_H__\r\n#define __BL702_SEC_ENG_H__\r\n\r\n#include \"bl702_common.h\"\r\n#include \"sec_eng_reg.h\"\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SEC_ENG\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SEC_ENG_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief AES port type definition\r\n */\r\ntypedef enum {\r\n  SEC_ENG_AES_ID0, /*!< AES0 port define */\r\n} SEC_ENG_AES_ID_Type;\r\n\r\n/**\r\n *  @brief SHA port type definition\r\n */\r\ntypedef enum {\r\n  SEC_ENG_SHA_ID0, /*!< SHA0 port define */\r\n} SEC_ENG_SHA_ID_Type;\r\n\r\n/**\r\n *  @brief SHA type definition\r\n */\r\ntypedef enum {\r\n  SEC_ENG_SHA256,    /*!< SHA type:SHA256 */\r\n  SEC_ENG_SHA224,    /*!< SHA type:SHA224 */\r\n  SEC_ENG_SHA1,      /*!< SHA type:SHA1 */\r\n  SEC_ENG_SHA1_RSVD, /*!< SHA type:SHA1 */\r\n} SEC_ENG_SHA_Type;\r\n\r\n/**\r\n *  @brief AES type definition\r\n */\r\ntypedef enum {\r\n  SEC_ENG_AES_ECB, /*!< AES mode type:ECB */\r\n  SEC_ENG_AES_CTR, /*!< AES mode type:CTR */\r\n  SEC_ENG_AES_CBC, /*!< AES mode type:CBC */\r\n} SEC_ENG_AES_Type;\r\n\r\n/**\r\n *  @brief AES KEY type definition\r\n */\r\ntypedef enum {\r\n  SEC_ENG_AES_KEY_128BITS,        /*!< AES KEY type:128 bits */\r\n  SEC_ENG_AES_KEY_256BITS,        /*!< AES KEY type:256 bits */\r\n  SEC_ENG_AES_KEY_192BITS,        /*!< AES KEY type:192 bits */\r\n  SEC_ENG_AES_DOUBLE_KEY_128BITS, /*!< AES double KEY type:128 bits */\r\n} SEC_ENG_AES_Key_Type;\r\n\r\n/**\r\n *  @brief AES CTR mode counter type definition\r\n */\r\ntypedef enum {\r\n  SEC_ENG_AES_COUNTER_BYTE_4, /*!< AES CTR mode counter type:4 bytes */\r\n  SEC_ENG_AES_COUNTER_BYTE_1, /*!< AES CTR mode counter type:1 byte */\r\n  SEC_ENG_AES_COUNTER_BYTE_2, /*!< AES CTR mode counter type:2 bytes */\r\n  SEC_ENG_AES_COUNTER_BYTE_3, /*!< AES CTR mode counter type:3 bytes */\r\n} SEC_ENG_AES_Counter_Type;\r\n\r\n/**\r\n *  @brief AES use new or old value type definition\r\n */\r\ntypedef enum {\r\n  SEC_ENG_AES_USE_NEW, /*!< Use new value */\r\n  SEC_ENG_AES_USE_OLD, /*!< Use old value same as last one */\r\n} SEC_ENG_AES_ValueUsed_Type;\r\n\r\n/**\r\n *  @brief AES KEY source type definition\r\n */\r\ntypedef enum {\r\n  SEC_ENG_AES_KEY_SW, /*!< AES KEY from software */\r\n  SEC_ENG_AES_KEY_HW, /*!< AES KEY from hardware */\r\n} SEC_ENG_AES_Key_Src_Type;\r\n\r\n/**\r\n *  @brief AES KEY source type definition\r\n */\r\ntypedef enum {\r\n  SEC_ENG_AES_ENCRYPTION, /*!< AES encryption */\r\n  SEC_ENG_AES_DECRYPTION, /*!< AES decryption */\r\n} SEC_ENG_AES_EnDec_Type;\r\n\r\n/**\r\n *  @brief AES PKA register size type definition\r\n */\r\ntypedef enum {\r\n  SEC_ENG_PKA_REG_SIZE_8 = 1, /*!< Register size is  8 Bytes */\r\n  SEC_ENG_PKA_REG_SIZE_16,    /*!< Register size is  16 Bytes */\r\n  SEC_ENG_PKA_REG_SIZE_32,    /*!< Register size is  32 Bytes */\r\n  SEC_ENG_PKA_REG_SIZE_64,    /*!< Register size is  64 Bytes */\r\n  SEC_ENG_PKA_REG_SIZE_96,    /*!< Register size is  96 Bytes */\r\n  SEC_ENG_PKA_REG_SIZE_128,   /*!< Register size is  128 Bytes */\r\n  SEC_ENG_PKA_REG_SIZE_192,   /*!< Register size is  192 Bytes */\r\n  SEC_ENG_PKA_REG_SIZE_256,   /*!< Register size is  256 Bytes */\r\n  SEC_ENG_PKA_REG_SIZE_384,   /*!< Register size is  384 Bytes */\r\n  SEC_ENG_PKA_REG_SIZE_512,   /*!< Register size is  512 Bytes */\r\n} SEC_ENG_PKA_REG_SIZE_Type;\r\n\r\n/**\r\n *  @brief AES PKA register size type definition\r\n */\r\ntypedef enum {\r\n  SEC_ENG_PKA_OP_PPSEL,                /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_MOD2N         = 0x11, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_LDIV2N        = 0x12, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_LMUL2N        = 0x13, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_LDIV          = 0x14, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_LSQR          = 0x15, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_LMUL          = 0x16, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_LSUB          = 0x17, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_LADD          = 0x18, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_LCMP          = 0x19, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_MDIV2         = 0x21, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_MINV          = 0x22, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_MEXP          = 0x23, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_MSQR          = 0x24, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_MMUL          = 0x25, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_MREM          = 0x26, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_MSUB          = 0x27, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_MADD          = 0x28, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_RESIZE        = 0x31, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_MOVDAT        = 0x32, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_NLIR          = 0x33, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_SLIR          = 0x34, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_CLIR          = 0x35, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_CFLIRI_BUFFER = 0x36, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_CTLIRI_PLD    = 0x37, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_CFLIR_BUFFER  = 0x38, /*!< PKA operation type */\r\n  SEC_ENG_PKA_OP_CTLIR_PLD     = 0x39, /*!< PKA operation type */\r\n} SEC_ENG_PKA_OP_Type;\r\n\r\n/**\r\n *  @brief Sec Eng Interrupt Type Def\r\n */\r\ntypedef enum {\r\n  SEC_ENG_INT_TRNG, /*!< Sec Eng Trng Interrupt Type */\r\n  SEC_ENG_INT_AES,  /*!< Sec Eng Aes Interrupt Type */\r\n  SEC_ENG_INT_SHA,  /*!< Sec Eng Sha Interrupt Type */\r\n  SEC_ENG_INT_PKA,  /*!< Sec Eng Pka Interrupt Type */\r\n  SEC_ENG_INT_CDET, /*!< Sec Eng Cdet Interrupt Type */\r\n  SEC_ENG_INT_GMAC, /*!< Sec Eng Gmac Interrupt Type */\r\n  SEC_ENG_INT_ALL,  /*!< Sec Eng All Interrupt Types */\r\n} SEC_ENG_INT_Type;\r\n\r\n/**\r\n *  @brief SEC_ENG SHA context\r\n */\r\ntypedef struct {\r\n  uint32_t  total[2];   /*!< Number of bytes processed */\r\n  uint32_t *shaBuf;     /*!< Data not processed but in this temp buffer */\r\n  uint32_t *shaPadding; /*!< Padding data */\r\n  uint8_t   shaFeed;    /*!< Sha has feed data */\r\n} SEC_Eng_SHA256_Ctx;\r\n\r\n/**\r\n *  @brief SEC_ENG SHA link mode context\r\n */\r\ntypedef struct {\r\n  uint32_t  total[2];   /*!< Number of bytes processed */\r\n  uint32_t *shaBuf;     /*!< Data not processed but in this temp buffer */\r\n  uint32_t *shaPadding; /*!< Padding data */\r\n  uint32_t  linkAddr;   /*!< Link configure address */\r\n} SEC_Eng_SHA256_Link_Ctx;\r\n\r\n/**\r\n *  @brief SEC_ENG AES context\r\n */\r\ntypedef struct {\r\n  uint8_t          aesFeed; /*!< AES has feed data */\r\n  SEC_ENG_AES_Type mode;    /*!< AES mode */\r\n} SEC_Eng_AES_Ctx;\r\n\r\n/**\r\n *  @brief SEC_ENG SHA link config structure type definition\r\n */\r\ntypedef struct {\r\n  uint32_t : 2;            /*!< [1:0]reserved */\r\n  uint32_t shaMode : 3;    /*!< [4:2]Sha-256/sha-224/sha-1/sha-1 */\r\n  uint32_t : 1;            /*!< [5]reserved */\r\n  uint32_t shaHashSel : 1; /*!< [6]New hash or accumulate last hash */\r\n  uint32_t : 2;            /*!< [8:7]reserved */\r\n  uint32_t shaIntClr : 1;  /*!< [9]Clear interrupt */\r\n  uint32_t shaIntSet : 1;  /*!< [10]Set interrupt */\r\n  uint32_t : 5;            /*!< [15:11]reserved */\r\n  uint32_t shaMsgLen : 16; /*!< [31:16]Number of 512-bit block */\r\n  uint32_t shaSrcAddr;     /*!< Message source address */\r\n  uint32_t result[8];      /*!< Result of SHA */\r\n} __attribute__((aligned(4))) SEC_Eng_SHA_Link_Config_Type;\r\n\r\n/**\r\n *  @brief SEC_ENG AES link config structure type definition\r\n */\r\ntypedef struct {\r\n  uint32_t : 3;              /*!< [2:0]Reserved */\r\n  uint32_t aesMode : 2;      /*!< [4:3]128-bit/256-bit/192-bit/128-bit-double key mode select */\r\n  uint32_t aesDecEn : 1;     /*!< [5]Encode or decode */\r\n  uint32_t aesDecKeySel : 1; /*!< [6]Use new key or use same key as last one */\r\n  uint32_t aesHwKeyEn : 1;   /*!< [7]Enable or disable using hardware hey */\r\n  uint32_t : 1;              /*!< [8]Reserved */\r\n  uint32_t aesIntClr : 1;    /*!< [9]Clear interrupt */\r\n  uint32_t aesIntSet : 1;    /*!< [10]Set interrupt */\r\n  uint32_t : 1;              /*!< [11]Reserved */\r\n  uint32_t aesBlockMode : 2; /*!< [13:12]ECB/CTR/CBC mode select */\r\n  uint32_t aesIVSel : 1;     /*!< [14]Use new iv or use same iv as last one */\r\n  uint32_t : 1;              /*!< [15]Reserved */\r\n  uint32_t aesMsgLen : 16;   /*!< [31:16]Number of 128-bit block */\r\n  uint32_t aesSrcAddr;       /*!< Message source address */\r\n  uint32_t aesDstAddr;       /*!< Message destination address */\r\n  uint32_t aesIV0;           /*!< Big endian initial vector(MSB) */\r\n  uint32_t aesIV1;           /*!< Big endian initial vector */\r\n  uint32_t aesIV2;           /*!< Big endian initial vector */\r\n  uint32_t aesIV3;           /*!< Big endian initial vector(LSB)(CTR mode:counter initial value) */\r\n  uint32_t aesKey0;          /*!< Big endian aes key(aes-128/256 key MSB) */\r\n  uint32_t aesKey1;          /*!< Big endian aes key */\r\n  uint32_t aesKey2;          /*!< Big endian aes key */\r\n  uint32_t aesKey3;          /*!< Big endian aes key(aes-128 key LSB) */\r\n  uint32_t aesKey4;          /*!< Big endian aes key */\r\n  uint32_t aesKey5;          /*!< Big endian aes key */\r\n  uint32_t aesKey6;          /*!< Big endian aes key */\r\n  uint32_t aesKey7;          /*!< Big endian aes key(aes-256 key LSB) */\r\n} __attribute__((aligned(4))) SEC_Eng_AES_Link_Config_Type;\r\n\r\n/**\r\n *  @brief SEC_ENG GMAC link config structure type definition\r\n */\r\ntypedef struct {\r\n  uint32_t : 9;             /*!< [8:0]reserved */\r\n  uint32_t gmacIntClr : 1;  /*!< [9]Clear interrupt */\r\n  uint32_t gmacIntSet : 1;  /*!< [10]Set interrupt */\r\n  uint32_t : 5;             /*!< [15:11]reserved */\r\n  uint32_t gmacMsgLen : 16; /*!< [31:16]Number of 128-bit block */\r\n  uint32_t gmacSrcAddr;     /*!< Message source address */\r\n  uint32_t gmacKey0;        /*!< GMAC key */\r\n  uint32_t gmacKey1;        /*!< GMAC key */\r\n  uint32_t gmacKey2;        /*!< GMAC key */\r\n  uint32_t gmacKey3;        /*!< GMAC key */\r\n  uint32_t result[4];       /*!< Result of GMAC */\r\n  uint32_t dummy;           /*!< Not use,trigger GMAC will clear this value */\r\n} __attribute__((aligned(4))) SEC_Eng_GMAC_Link_Config_Type;\r\n\r\n/**\r\n *  @brief SEC_ENG PKA status type definition\r\n */\r\ntypedef struct {\r\n  uint16_t primeFail : 1;   /*!< [0]Prime fail */\r\n  uint16_t errUnknown : 1;  /*!< [1]Err unknown opc */\r\n  uint16_t errOverflow : 1; /*!< [2]Err opq overflow */\r\n  uint16_t errSrc2 : 1;     /*!< [3]Err invalid src2 */\r\n  uint16_t errSrc1 : 1;     /*!< [4]Err invalid src1 */\r\n  uint16_t errSrc0 : 1;     /*!< [5]Err invalid src0 */\r\n  uint16_t errDiv0 : 1;     /*!< [6]Err div by 0 */\r\n  uint16_t errFull : 1;     /*!< [7]Err cam full */\r\n  uint16_t lastOpc : 1;     /*!< [8]Last opc */\r\n  uint16_t opqFull : 1;     /*!< [9]Opq full */\r\n  uint16_t cmdIndex : 5;    /*!< [14:10]Cmd err index */\r\n  uint16_t errCmd : 1;      /*!< [15]Err cmd */\r\n} SEC_Eng_PKA_Status_Type;\r\n\r\n/*@} end of group SEC_ENG_Public_Types */\r\n\r\n/** @defgroup  SEC_ENG_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SEC_ENG_AES_ID_TYPE\r\n *  @{\r\n */\r\n#define IS_SEC_ENG_AES_ID_TYPE(type) (((type) == SEC_ENG_AES_ID0))\r\n\r\n/** @defgroup  SEC_ENG_SHA_ID_TYPE\r\n *  @{\r\n */\r\n#define IS_SEC_ENG_SHA_ID_TYPE(type) (((type) == SEC_ENG_SHA_ID0))\r\n\r\n/** @defgroup  SEC_ENG_SHA_TYPE\r\n *  @{\r\n */\r\n#define IS_SEC_ENG_SHA_TYPE(type) (((type) == SEC_ENG_SHA256) || ((type) == SEC_ENG_SHA224) || ((type) == SEC_ENG_SHA1) || ((type) == SEC_ENG_SHA1_RSVD))\r\n\r\n/** @defgroup  SEC_ENG_AES_TYPE\r\n *  @{\r\n */\r\n#define IS_SEC_ENG_AES_TYPE(type) (((type) == SEC_ENG_AES_ECB) || ((type) == SEC_ENG_AES_CTR) || ((type) == SEC_ENG_AES_CBC))\r\n\r\n/** @defgroup  SEC_ENG_AES_KEY_TYPE\r\n *  @{\r\n */\r\n#define IS_SEC_ENG_AES_KEY_TYPE(type) (((type) == SEC_ENG_AES_KEY_128BITS) || ((type) == SEC_ENG_AES_KEY_256BITS) || ((type) == SEC_ENG_AES_KEY_192BITS) || ((type) == SEC_ENG_AES_DOUBLE_KEY_128BITS))\r\n\r\n/** @defgroup  SEC_ENG_AES_COUNTER_TYPE\r\n *  @{\r\n */\r\n#define IS_SEC_ENG_AES_COUNTER_TYPE(type) \\\r\n  (((type) == SEC_ENG_AES_COUNTER_BYTE_4) || ((type) == SEC_ENG_AES_COUNTER_BYTE_1) || ((type) == SEC_ENG_AES_COUNTER_BYTE_2) || ((type) == SEC_ENG_AES_COUNTER_BYTE_3))\r\n\r\n/** @defgroup  SEC_ENG_AES_VALUEUSED_TYPE\r\n *  @{\r\n */\r\n#define IS_SEC_ENG_AES_VALUEUSED_TYPE(type) (((type) == SEC_ENG_AES_USE_NEW) || ((type) == SEC_ENG_AES_USE_OLD))\r\n\r\n/** @defgroup  SEC_ENG_AES_KEY_SRC_TYPE\r\n *  @{\r\n */\r\n#define IS_SEC_ENG_AES_KEY_SRC_TYPE(type) (((type) == SEC_ENG_AES_KEY_SW) || ((type) == SEC_ENG_AES_KEY_HW))\r\n\r\n/** @defgroup  SEC_ENG_AES_ENDEC_TYPE\r\n *  @{\r\n */\r\n#define IS_SEC_ENG_AES_ENDEC_TYPE(type) (((type) == SEC_ENG_AES_ENCRYPTION) || ((type) == SEC_ENG_AES_DECRYPTION))\r\n\r\n/** @defgroup  SEC_ENG_PKA_REG_SIZE_TYPE\r\n *  @{\r\n */\r\n#define IS_SEC_ENG_PKA_REG_SIZE_TYPE(type)                                                                                                                                                        \\\r\n  (((type) == SEC_ENG_PKA_REG_SIZE_8) || ((type) == SEC_ENG_PKA_REG_SIZE_16) || ((type) == SEC_ENG_PKA_REG_SIZE_32) || ((type) == SEC_ENG_PKA_REG_SIZE_64) || ((type) == SEC_ENG_PKA_REG_SIZE_96) \\\r\n   || ((type) == SEC_ENG_PKA_REG_SIZE_128) || ((type) == SEC_ENG_PKA_REG_SIZE_192) || ((type) == SEC_ENG_PKA_REG_SIZE_256) || ((type) == SEC_ENG_PKA_REG_SIZE_384)                                \\\r\n   || ((type) == SEC_ENG_PKA_REG_SIZE_512))\r\n\r\n/** @defgroup  SEC_ENG_PKA_OP_TYPE\r\n *  @{\r\n */\r\n#define IS_SEC_ENG_PKA_OP_TYPE(type)                                                                                                                                                             \\\r\n  (((type) == SEC_ENG_PKA_OP_PPSEL) || ((type) == SEC_ENG_PKA_OP_MOD2N) || ((type) == SEC_ENG_PKA_OP_LDIV2N) || ((type) == SEC_ENG_PKA_OP_LMUL2N) || ((type) == SEC_ENG_PKA_OP_LDIV)             \\\r\n   || ((type) == SEC_ENG_PKA_OP_LSQR) || ((type) == SEC_ENG_PKA_OP_LMUL) || ((type) == SEC_ENG_PKA_OP_LSUB) || ((type) == SEC_ENG_PKA_OP_LADD) || ((type) == SEC_ENG_PKA_OP_LCMP)                \\\r\n   || ((type) == SEC_ENG_PKA_OP_MDIV2) || ((type) == SEC_ENG_PKA_OP_MINV) || ((type) == SEC_ENG_PKA_OP_MEXP) || ((type) == SEC_ENG_PKA_OP_MSQR) || ((type) == SEC_ENG_PKA_OP_MMUL)               \\\r\n   || ((type) == SEC_ENG_PKA_OP_MREM) || ((type) == SEC_ENG_PKA_OP_MSUB) || ((type) == SEC_ENG_PKA_OP_MADD) || ((type) == SEC_ENG_PKA_OP_RESIZE) || ((type) == SEC_ENG_PKA_OP_MOVDAT)            \\\r\n   || ((type) == SEC_ENG_PKA_OP_NLIR) || ((type) == SEC_ENG_PKA_OP_SLIR) || ((type) == SEC_ENG_PKA_OP_CLIR) || ((type) == SEC_ENG_PKA_OP_CFLIRI_BUFFER) || ((type) == SEC_ENG_PKA_OP_CTLIRI_PLD) \\\r\n   || ((type) == SEC_ENG_PKA_OP_CFLIR_BUFFER) || ((type) == SEC_ENG_PKA_OP_CTLIR_PLD))\r\n\r\n/** @defgroup  SEC_ENG_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_SEC_ENG_INT_TYPE(type)                                                                                                                                                            \\\r\n  (((type) == SEC_ENG_INT_TRNG) || ((type) == SEC_ENG_INT_AES) || ((type) == SEC_ENG_INT_SHA) || ((type) == SEC_ENG_INT_PKA) || ((type) == SEC_ENG_INT_CDET) || ((type) == SEC_ENG_INT_GMAC) \\\r\n   || ((type) == SEC_ENG_INT_ALL))\r\n\r\n/*@} end of group SEC_ENG_Public_Constants */\r\n\r\n/** @defgroup  SEC_ENG_Public_Macros\r\n *  @{\r\n */\r\n#define SEC_ENG_PKA_STATUS_LAST_OPC_OFFSET 24\r\n#define SEC_ENG_PKA_STATUS_LAST_OPC_MASK   0x01000000\r\n\r\n/*@} end of group SEC_ENG_Public_Macros */\r\n\r\n/** @defgroup  SEC_ENG_Public_Functions\r\n *  @{\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid SEC_GMAC_IRQHandler(void);\r\nvoid SEC_CDET_IRQHandler(void);\r\nvoid SEC_TRNG_IRQHandler(void);\r\nvoid SEC_PKA_IRQHandler(void);\r\nvoid SEC_AES_IRQHandler(void);\r\nvoid SEC_SHA_IRQHandler(void);\r\n#endif\r\nvoid        Sec_Eng_SHA256_Init(SEC_Eng_SHA256_Ctx *shaCtx, SEC_ENG_SHA_ID_Type shaNo, SEC_ENG_SHA_Type type, uint32_t shaTmpBuf[16], uint32_t padding[16]);\r\nvoid        Sec_Eng_SHA_Start(SEC_ENG_SHA_ID_Type shaNo);\r\nBL_Err_Type Sec_Eng_SHA256_Update(SEC_Eng_SHA256_Ctx *shaCtx, SEC_ENG_SHA_ID_Type shaNo, const uint8_t *input, uint32_t len);\r\nBL_Err_Type Sec_Eng_SHA256_Finish(SEC_Eng_SHA256_Ctx *shaCtx, SEC_ENG_SHA_ID_Type shaNo, uint8_t *hash);\r\nvoid        Sec_Eng_SHA_Enable_Link(SEC_ENG_SHA_ID_Type shaNo);\r\nvoid        Sec_Eng_SHA_Disable_Link(SEC_ENG_SHA_ID_Type shaNo);\r\nvoid        Sec_Eng_SHA256_Link_Init(SEC_Eng_SHA256_Link_Ctx *shaCtx, SEC_ENG_SHA_ID_Type shaNo, uint32_t linkAddr, uint32_t shaTmpBuf[16], uint32_t padding[16]);\r\nBL_Err_Type Sec_Eng_SHA256_Link_Update(SEC_Eng_SHA256_Link_Ctx *shaCtx, SEC_ENG_SHA_ID_Type shaNo, const uint8_t *input, uint32_t len);\r\nBL_Err_Type Sec_Eng_SHA256_Link_Finish(SEC_Eng_SHA256_Link_Ctx *shaCtx, SEC_ENG_SHA_ID_Type shaNo, uint8_t *hash);\r\nBL_Err_Type Sec_Eng_AES_Init(SEC_Eng_AES_Ctx *aesCtx, SEC_ENG_AES_ID_Type aesNo, SEC_ENG_AES_Type aesType, SEC_ENG_AES_Key_Type keyType, SEC_ENG_AES_EnDec_Type enDecType);\r\nvoid        Sec_Eng_AES_Enable_LE(SEC_ENG_AES_ID_Type aesNo);\r\nvoid        Sec_Eng_AES_Enable_BE(SEC_ENG_AES_ID_Type aesNo);\r\nvoid        Sec_Eng_AES_Enable_Link(SEC_ENG_AES_ID_Type aesNo);\r\nvoid        Sec_Eng_AES_Disable_Link(SEC_ENG_AES_ID_Type aesNo);\r\nBL_Err_Type Sec_Eng_AES_Link_Work(SEC_ENG_AES_ID_Type aesNo, uint32_t linkAddr, const uint8_t *in, uint32_t len, uint8_t *out);\r\nvoid        Sec_Eng_AES_Set_Hw_Key_Src(SEC_ENG_AES_ID_Type aesNo, uint8_t src);\r\nvoid        Sec_Eng_AES_Set_Key_IV(SEC_ENG_AES_ID_Type aesNo, SEC_ENG_AES_Key_Src_Type keySrc, const uint8_t *key, const uint8_t *iv);\r\nvoid        Sec_Eng_AES_Set_Key_IV_BE(SEC_ENG_AES_ID_Type aesNo, SEC_ENG_AES_Key_Src_Type keySrc, const uint8_t *key, const uint8_t *iv);\r\nvoid        Sec_Eng_AES_Set_Counter_Byte(SEC_ENG_AES_ID_Type aesNo, SEC_ENG_AES_Counter_Type counterType);\r\nBL_Err_Type Sec_Eng_AES_Crypt(SEC_Eng_AES_Ctx *aesCtx, SEC_ENG_AES_ID_Type aesNo, const uint8_t *in, uint32_t len, uint8_t *out);\r\nBL_Err_Type Sec_Eng_AES_Finish(SEC_ENG_AES_ID_Type aesNo);\r\nBL_Err_Type Sec_Eng_Trng_Enable(void);\r\nvoid        Sec_Eng_Trng_Int_Enable(void);\r\nvoid        Sec_Eng_Trng_Int_Disable(void);\r\nBL_Err_Type Sec_Eng_Trng_Read(uint8_t data[32]);\r\nBL_Err_Type Sec_Eng_Trng_Get_Random(uint8_t *data, uint32_t len);\r\nvoid        Sec_Eng_Trng_Int_Read_Trigger(void);\r\nvoid        Sec_Eng_Trng_Int_Read(uint8_t data[32]);\r\nvoid        Sec_Eng_Trng_Disable(void);\r\nvoid        Sec_Eng_PKA_Reset(void);\r\nvoid        Sec_Eng_PKA_BigEndian_Enable(void);\r\nvoid        Sec_Eng_PKA_LittleEndian_Enable(void);\r\nvoid        Sec_Eng_PKA_GetStatus(SEC_Eng_PKA_Status_Type *status);\r\nvoid        Sec_Eng_PKA_Write_Data(SEC_ENG_PKA_REG_SIZE_Type regType, uint8_t regIndex, const uint32_t *data, uint16_t size, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_Read_Data(SEC_ENG_PKA_REG_SIZE_Type regType, uint8_t regIdx, uint32_t *result, uint8_t retSize);\r\nvoid        Sec_Eng_PKA_CREG(SEC_ENG_PKA_REG_SIZE_Type dRegType, uint8_t dRegIdx, uint8_t size, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_Write_Immediate(SEC_ENG_PKA_REG_SIZE_Type regType, uint8_t regIndex, uint32_t data, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_NREG(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_Move_Data(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_RESIZE(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_MADD(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s1RegType, uint8_t s1RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_MSUB(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s1RegType, uint8_t s1RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_MREM(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_MMUL(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s1RegType, uint8_t s1RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_MSQR(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_MEXP(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s1RegType, uint8_t s1RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_MINV(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_MINV(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_LCMP(uint8_t *cout, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s1RegType, uint8_t s1RegIdx);\r\nvoid        Sec_Eng_PKA_LADD(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s1RegType, uint8_t s1RegIdx, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_LSUB(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s1RegType, uint8_t s1RegIdx, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_LMUL(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s1RegType, uint8_t s1RegIdx, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_LSQR(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_LDIV(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_LMUL2N(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint16_t bit_shift, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_LDIV2N(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint16_t bit_shift, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_LMOD2N(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint16_t bit_shift, uint8_t lastOp);\r\nvoid        Sec_Eng_PKA_GF2Mont(uint8_t dRegType, uint8_t dRegIdx, uint8_t sRegType, uint8_t sRegIdx, uint32_t size, uint8_t tRegType, uint8_t tRegIdx, uint8_t pRegType, uint8_t pRegIdx);\r\nvoid        Sec_Eng_PKA_Mont2GF(uint8_t dRegType, uint8_t dRegIdx, uint8_t aRegType, uint8_t aRegIdx, uint8_t invrRegType, uint8_t invrRegIdx, uint8_t tRegType, uint8_t tRegIdx, uint8_t pRegType,\r\n                                uint8_t pRegIdx);\r\nvoid        Sec_Eng_GMAC_Enable_LE(void);\r\nvoid        Sec_Eng_GMAC_Enable_BE(void);\r\nvoid        Sec_Eng_GMAC_Enable_Link(void);\r\nvoid        Sec_Eng_GMAC_Disable_Link(void);\r\nBL_Err_Type Sec_Eng_GMAC_Link_Work(uint32_t linkAddr, const uint8_t *in, uint32_t len, uint8_t *out);\r\nvoid        SEC_Eng_IntMask(SEC_ENG_INT_Type intType, BL_Mask_Type intMask);\r\nvoid        SEC_Eng_ClrIntStatus(SEC_ENG_INT_Type intType);\r\nvoid        SEC_Eng_Int_Callback_Install(SEC_ENG_INT_Type intType, intCallback_Type *cbFun);\r\nBL_Sts_Type SEC_Eng_GetIntStatus(SEC_ENG_INT_Type intType);\r\n/*----------*/\r\nvoid SEC_Eng_Turn_On_Sec_Ring(void);\r\nvoid SEC_Eng_Turn_Off_Sec_Ring(void);\r\n/*----------*/;\r\n\r\n/*@} end of group SEC_ENG_Public_Functions */\r\n\r\n/*@} end of group SEC_ENG */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_SEC_ENG_H__ */\r\n#ifdef __cplusplus\r\n}\r\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_sf_cfg.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_sf_cfg.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_SF_CFG_H__\r\n#define __BL702_SF_CFG_H__\r\n\r\n#include \"string.h\"\r\n#include \"bl702_sflash.h\"\r\n#include \"bl702_sf_ctrl.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SF_CFG\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SF_CFG_Public_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group SF_CFG_Public_Types */\r\n\r\n/** @defgroup  SF_CFG_Public_Constants\r\n *  @{\r\n */\r\n\r\n/*@} end of group SF_CFG_Public_Constants */\r\n\r\n/** @defgroup  SF_CFG_Public_Macros\r\n *  @{\r\n */\r\n/* Flash option 0 */\r\n/* Flash CLK */\r\n#define BFLB_EXTFLASH_CLK0_GPIO GLB_GPIO_PIN_21\r\n/* FLASH CS */\r\n#define BFLB_EXTFLASH_CS0_GPIO GLB_GPIO_PIN_19\r\n/* FLASH DATA */\r\n#define BFLB_EXTFLASH_DATA00_GPIO GLB_GPIO_PIN_17\r\n#define BFLB_EXTFLASH_DATA10_GPIO GLB_GPIO_PIN_18\r\n#define BFLB_EXTFLASH_DATA20_GPIO GLB_GPIO_PIN_22\r\n#define BFLB_EXTFLASH_DATA30_GPIO GLB_GPIO_PIN_20\r\n/* Flash option 1 */\r\n/* Flash CLK */\r\n#define BFLB_EXTFLASH_CLK1_GPIO GLB_GPIO_PIN_27\r\n/* FLASH CS */\r\n#define BFLB_EXTFLASH_CS1_GPIO GLB_GPIO_PIN_25\r\n/* FLASH DATA */\r\n#define BFLB_EXTFLASH_DATA01_GPIO GLB_GPIO_PIN_28\r\n#define BFLB_EXTFLASH_DATA11_GPIO GLB_GPIO_PIN_24\r\n#define BFLB_EXTFLASH_DATA21_GPIO GLB_GPIO_PIN_23\r\n#define BFLB_EXTFLASH_DATA31_GPIO GLB_GPIO_PIN_26\r\n/* Flash option 2 */\r\n/* Flash CLK */\r\n#define BFLB_EXTFLASH_CLK2_GPIO 38\r\n/* FLASH CS */\r\n#define BFLB_EXTFLASH_CS2_GPIO 38\r\n/* FLASH DATA */\r\n#define BFLB_EXTFLASH_DATA02_GPIO 38\r\n#define BFLB_EXTFLASH_DATA12_GPIO 38\r\n#define BFLB_EXTFLASH_DATA22_GPIO 38\r\n#define BFLB_EXTFLASH_DATA32_GPIO 38\r\n#define BFLB_FLASH_CFG_SF2_EXT_23_28 0\r\n#define BFLB_FLASH_CFG_SF2_INT_512K  1\r\n#define BFLB_FLASH_CFG_SF2_INT_1M    2\r\n#define BFLB_FLASH_CFG_SF1_EXT_17_22 3\r\n#define BFLB_SF2_SWAP_NONE           0\r\n#define BFLB_SF2_SWAP_CS_IO2         1\r\n#define BFLB_SF2_SWAP_IO0_IO3        2\r\n#define BFLB_SF2_SWAP_BOTH           3\r\n#define BFLB_FLASH_ID_VALID_FLAG     0x80000000\r\n#define BFLB_FLASH_ID_VALID_MASK     0x7FFFFFFF\r\n\r\n/*@} end of group SF_CFG_Public_Macros */\r\n\r\n/** @defgroup  SF_CFG_Public_Functions\r\n *  @{\r\n */\r\nBL_Err_Type SF_Cfg_Get_Flash_Cfg_Need_Lock(uint32_t flashID, SPI_Flash_Cfg_Type *pFlashCfg);\r\nvoid SF_Cfg_Init_Flash_Gpio(uint8_t flashPinCfg, uint8_t restoreDefault);\r\nuint32_t SF_Cfg_Flash_Identify(uint8_t callFromFlash, uint32_t autoScan, uint32_t flashPinCfg, uint8_t restoreDefault,\r\n                               SPI_Flash_Cfg_Type *pFlashCfg);\r\nvoid SF_Cfg_Init_Ext_Flash_Gpio(uint8_t extFlashPin);\r\nvoid SF_Cfg_Deinit_Ext_Flash_Gpio(uint8_t extFlashPin);\r\n\r\n/*@} end of group SF_CFG_Public_Functions */\r\n\r\n/*@} end of group SF_CFG */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_SF_CFG_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_sf_cfg_ext.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_sf_cfg_ext.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_SF_CFG_EXT_H__\r\n#define __BL702_SF_CFG_EXT_H__\r\n\r\n#include \"string.h\"\r\n#include \"bl702_sflash.h\"\r\n#include \"bl702_sf_ctrl.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SF_CFG_EXT\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SF_CFG_EXT_Public_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group SF_CFG_EXT_Public_Types */\r\n\r\n/** @defgroup  SF_CFG_EXT_Public_Constants\r\n *  @{\r\n */\r\n\r\n/*@} end of group SF_CFG_EXT_Public_Constants */\r\n\r\n/** @defgroup  SF_CFG_EXT_Public_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group SF_CFG_EXT_Public_Macros */\r\n\r\n/** @defgroup  SF_CFG_EXT_Public_Functions\r\n *  @{\r\n */\r\nvoid SF_Cfg_Init_Internal_Flash_Gpio(void);\r\nBL_Err_Type SF_Cfg_Get_Flash_Cfg_Need_Lock_Ext(uint32_t flashID, SPI_Flash_Cfg_Type *pFlashCfg);\r\nuint32_t SF_Cfg_Flash_Identify_Ext(uint8_t callFromFlash, uint32_t autoScan, uint32_t flashPinCfg,\r\n                                   uint8_t restoreDefault, SPI_Flash_Cfg_Type *pFlashCfg);\r\n\r\n/*@} end of group SF_CFG_EXT_Public_Functions */\r\n\r\n/*@} end of group SF_CFG_EXT */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_SF_CFG_EXT_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_sf_ctrl.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_sf_ctrl.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_SF_CTRL_H__\r\n#define __BL702_SF_CTRL_H__\r\n\r\n#include \"sf_ctrl_reg.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SF_CTRL\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SF_CTRL_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief Serial flash pad select type definition\r\n */\r\ntypedef enum {\r\n    SF_CTRL_PAD_SEL_SF1,               /*!< SF Ctrl pad select sf1, flash use GPIO 17-22, no psram */\r\n    SF_CTRL_PAD_SEL_SF2,               /*!< SF Ctrl pad select sf2, flash use GPIO 23-28, no psram, embedded flash */\r\n    SF_CTRL_PAD_SEL_SF3,               /*!< SF Ctrl pad select sf3, flash use GPIO 32-37, no psram */\r\n    SF_CTRL_PAD_SEL_DUAL_BANK_SF1_SF2, /*!< SF Ctrl pad select sf1 and sf2, flash use GPIO 17-22, psram use GPIO 23-28 */\r\n    SF_CTRL_PAD_SEL_DUAL_BANK_SF2_SF3, /*!< SF Ctrl pad select sf2 and sf3, flash use GPIO 23-28, psram use GPIO 32-37 */\r\n    SF_CTRL_PAD_SEL_DUAL_BANK_SF3_SF1, /*!< SF Ctrl pad select sf3 and sf1, flash use GPIO 32-37, psram use GPIO 17-22 */\r\n    SF_CTRL_PAD_SEL_DUAL_CS_SF2,       /*!< SF Ctrl pad select sf2, flash/psram use GPIO 23-28, psram use GPIO 17 as CS2 */\r\n    SF_CTRL_PAD_SEL_DUAL_CS_SF3,       /*!< SF Ctrl pad select sf3, flash/psram use GPIO 32-37, psram use GPIO 23 as CS2 */\r\n} SF_Ctrl_Pad_Select;\r\n\r\n/**\r\n *  @brief Serial flash system bus control type definition\r\n */\r\ntypedef enum {\r\n    SF_CTRL_SEL_FLASH, /*!< SF Ctrl system bus control flash */\r\n    SF_CTRL_SEL_PSRAM, /*!< SF Ctrl system bus control psram */\r\n} SF_Ctrl_Select;\r\n\r\n/**\r\n *  @brief Serail flash controller wrap mode len type definition\r\n */\r\ntypedef enum {\r\n    SF_CTRL_WRAP_LEN_8,    /*!< SF Ctrl wrap length: 8 */\r\n    SF_CTRL_WRAP_LEN_16,   /*!< SF Ctrl wrap length: 16 */\r\n    SF_CTRL_WRAP_LEN_32,   /*!< SF Ctrl wrap length: 32 */\r\n    SF_CTRL_WRAP_LEN_64,   /*!< SF Ctrl wrap length: 64 */\r\n    SF_CTRL_WRAP_LEN_128,  /*!< SF Ctrl wrap length: 128 */\r\n    SF_CTRL_WRAP_LEN_256,  /*!< SF Ctrl wrap length: 256 */\r\n    SF_CTRL_WRAP_LEN_512,  /*!< SF Ctrl wrap length: 512 */\r\n    SF_CTRL_WRAP_LEN_1024, /*!< SF Ctrl wrap length: 1024 */\r\n    SF_CTRL_WRAP_LEN_2048, /*!< SF Ctrl wrap length: 2048 */\r\n    SF_CTRL_WRAP_LEN_4096, /*!< SF Ctrl wrap length: 4096 */\r\n} SF_Ctrl_Wrap_Len_Type;\r\n\r\n/**\r\n *  @brief Serial flash controller owner type definition\r\n */\r\ntypedef enum {\r\n    SF_CTRL_OWNER_SAHB, /*!< System AHB bus control serial flash controller */\r\n    SF_CTRL_OWNER_IAHB, /*!< I-Code AHB bus control serial flash controller */\r\n} SF_Ctrl_Owner_Type;\r\n\r\n/**\r\n *  @brief Serial flash controller select clock type definition\r\n */\r\ntypedef enum {\r\n    SF_CTRL_SAHB_CLOCK,  /*!< Serial flash controller select default sahb clock */\r\n    SF_CTRL_FLASH_CLOCK, /*!< Serial flash controller select flash clock */\r\n} SF_Ctrl_Sahb_Type;\r\n\r\n/**\r\n *  @brief Serial flash controller owner type definition\r\n */\r\ntypedef enum {\r\n    HIGH_SPEED_MODE_CLOCK,  /*!< Serial flash controller high speed mode clk_ahb>clk_sf */\r\n    REMOVE_CLOCK_CONSTRAIN, /*!< Serial flash controller remove clock constrain */\r\n} SF_Ctrl_Ahb2sif_Type;\r\n\r\n/**\r\n *  @brief Read and write type definition\r\n */\r\ntypedef enum {\r\n    SF_CTRL_READ,  /*!< Serail flash read command flag */\r\n    SF_CTRL_WRITE, /*!< Serail flash write command flag */\r\n} SF_Ctrl_RW_Type;\r\n\r\n/**\r\n *  @brief Serail flash interface IO type definition\r\n */\r\ntypedef enum {\r\n    SF_CTRL_NIO_MODE, /*!< Normal IO mode define */\r\n    SF_CTRL_DO_MODE,  /*!< Dual Output mode define */\r\n    SF_CTRL_QO_MODE,  /*!< Quad Output mode define */\r\n    SF_CTRL_DIO_MODE, /*!< Dual IO mode define */\r\n    SF_CTRL_QIO_MODE, /*!< Quad IO mode define */\r\n} SF_Ctrl_IO_Type;\r\n\r\n/**\r\n *  @brief Serail flash controller interface mode type definition\r\n */\r\ntypedef enum {\r\n    SF_CTRL_SPI_MODE, /*!< SPI mode define */\r\n    SF_CTRL_QPI_MODE, /*!< QPI mode define */\r\n} SF_Ctrl_Mode_Type;\r\n\r\n/**\r\n *  @brief Serail flash controller command mode type definition\r\n */\r\ntypedef enum {\r\n    SF_CTRL_CMD_1_LINE,  /*!< Command in one line mode */\r\n    SF_CTRL_CMD_4_LINES, /*!< Command in four lines mode */\r\n} SF_Ctrl_Cmd_Mode_Type;\r\n\r\n/**\r\n *  @brief Serail flash controller address mode type definition\r\n */\r\ntypedef enum {\r\n    SF_CTRL_ADDR_1_LINE,  /*!< Address in one line mode */\r\n    SF_CTRL_ADDR_2_LINES, /*!< Address in two lines mode */\r\n    SF_CTRL_ADDR_4_LINES, /*!< Address in four lines mode */\r\n} SF_Ctrl_Addr_Mode_Type;\r\n\r\n/**\r\n *  @brief Serail flash controller dummy mode type definition\r\n */\r\ntypedef enum {\r\n    SF_CTRL_DUMMY_1_LINE,  /*!< Dummy in one line mode */\r\n    SF_CTRL_DUMMY_2_LINES, /*!< Dummy in two lines mode */\r\n    SF_CTRL_DUMMY_4_LINES, /*!< Dummy in four lines mode */\r\n} SF_Ctrl_Dmy_Mode_Type;\r\n\r\n/**\r\n *  @brief Serail flash controller data mode type definition\r\n */\r\ntypedef enum {\r\n    SF_CTRL_DATA_1_LINE,  /*!< Data in one line mode */\r\n    SF_CTRL_DATA_2_LINES, /*!< Data in two lines mode */\r\n    SF_CTRL_DATA_4_LINES, /*!< Data in four lines mode */\r\n} SF_Ctrl_Data_Mode_Type;\r\n\r\n/**\r\n *  @brief Serail flash controller AES type definition\r\n */\r\ntypedef enum {\r\n    SF_CTRL_AES_128BITS,            /*!< Serail flash AES key 128 bits length */\r\n    SF_CTRL_AES_256BITS,            /*!< Serail flash AES key 256 bits length */\r\n    SF_CTRL_AES_192BITS,            /*!< Serail flash AES key 192 bits length */\r\n    SF_CTRL_AES_128BITS_DOUBLE_KEY, /*!< Serail flash AES key 128 bits length double key */\r\n} SF_Ctrl_AES_Key_Type;\r\n\r\n/**\r\n *  @brief Serail flash controller configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    SF_Ctrl_Owner_Type owner;         /*!< Sflash interface bus owner */\r\n    SF_Ctrl_Sahb_Type sahbClock;      /*!< Sflash clock sahb sram select */\r\n    SF_Ctrl_Ahb2sif_Type ahb2sifMode; /*!< Sflash ahb2sif mode */\r\n    uint8_t clkDelay;                 /*!< Clock count for read due to pad delay */\r\n    uint8_t clkInvert;                /*!< Clock invert */\r\n    uint8_t rxClkInvert;              /*!< RX clock invert */\r\n    uint8_t doDelay;                  /*!< Data out delay */\r\n    uint8_t diDelay;                  /*!< Data in delay */\r\n    uint8_t oeDelay;                  /*!< Output enable delay */\r\n} SF_Ctrl_Cfg_Type;\r\n\r\n/**\r\n *  @brief SF Ctrl psram controller configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    SF_Ctrl_Owner_Type owner;        /*!< Psram interface bus owner */\r\n    SF_Ctrl_Pad_Select padSel;       /*!< SF Ctrl pad select */\r\n    SF_Ctrl_Select bankSel;          /*!< SF Ctrl bank select */\r\n    BL_Fun_Type psramRxClkInvertSrc; /*!< Select psram rx clock invert source */\r\n    BL_Fun_Type psramRxClkInvertSel; /*!< Select inveted psram rx clock */\r\n    BL_Fun_Type psramDelaySrc;       /*!< Select psram read delay source */\r\n    uint8_t psramClkDelay;           /*!< Psram read delay cycle = n + 1 */\r\n} SF_Ctrl_Psram_Cfg;\r\n\r\n/**\r\n *  @brief SF Ctrl cmds configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type cmdsEn;            /*!< SF Ctrl cmds enable */\r\n    BL_Fun_Type burstToggleEn;     /*!< SF Ctrl burst toggle mode enable */\r\n    BL_Fun_Type wrapModeEn;        /*!< SF Ctrl wrap mode cmd enable */\r\n    SF_Ctrl_Wrap_Len_Type wrapLen; /*!< SF Ctrl wrap length */\r\n} SF_Ctrl_Cmds_Cfg;\r\n\r\n/**\r\n *  @brief Serail flash command configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint8_t rwFlag;                  /*!< Read write flag */\r\n    SF_Ctrl_Cmd_Mode_Type cmdMode;   /*!< Command mode */\r\n    SF_Ctrl_Addr_Mode_Type addrMode; /*!< Address mode */\r\n    uint8_t addrSize;                /*!< Address size */\r\n    uint8_t dummyClks;               /*!< Dummy clocks */\r\n    SF_Ctrl_Dmy_Mode_Type dummyMode; /*!< Dummy mode */\r\n    SF_Ctrl_Data_Mode_Type dataMode; /*!< Data mode */\r\n    uint8_t rsv[1];                  /*!<  */\r\n    uint32_t nbData;                 /*!< Transfer number of bytes */\r\n    uint32_t cmdBuf[2];              /*!< Command buffer */\r\n} SF_Ctrl_Cmd_Cfg_Type;\r\n\r\n/*@} end of group SF_CTRL_Public_Types */\r\n\r\n/** @defgroup  SF_CTRL_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SF_CTRL_PAD_SELECT\r\n *  @{\r\n */\r\n#define IS_SF_CTRL_PAD_SELECT(type) (((type) == SF_CTRL_PAD_SEL_SF1) ||               \\\r\n                                     ((type) == SF_CTRL_PAD_SEL_SF2) ||               \\\r\n                                     ((type) == SF_CTRL_PAD_SEL_SF3) ||               \\\r\n                                     ((type) == SF_CTRL_PAD_SEL_DUAL_BANK_SF1_SF2) || \\\r\n                                     ((type) == SF_CTRL_PAD_SEL_DUAL_BANK_SF2_SF3) || \\\r\n                                     ((type) == SF_CTRL_PAD_SEL_DUAL_BANK_SF3_SF1) || \\\r\n                                     ((type) == SF_CTRL_PAD_SEL_DUAL_CS_SF2) ||       \\\r\n                                     ((type) == SF_CTRL_PAD_SEL_DUAL_CS_SF3))\r\n\r\n/** @defgroup  SF_CTRL_SELECT\r\n *  @{\r\n */\r\n#define IS_SF_CTRL_SELECT(type) (((type) == SF_CTRL_SEL_FLASH) || \\\r\n                                 ((type) == SF_CTRL_SEL_PSRAM))\r\n\r\n/** @defgroup  SF_CTRL_WRAP_LEN_TYPE\r\n *  @{\r\n */\r\n#define IS_SF_CTRL_WRAP_LEN_TYPE(type) (((type) == SF_CTRL_WRAP_LEN_8) ||    \\\r\n                                        ((type) == SF_CTRL_WRAP_LEN_16) ||   \\\r\n                                        ((type) == SF_CTRL_WRAP_LEN_32) ||   \\\r\n                                        ((type) == SF_CTRL_WRAP_LEN_64) ||   \\\r\n                                        ((type) == SF_CTRL_WRAP_LEN_128) ||  \\\r\n                                        ((type) == SF_CTRL_WRAP_LEN_256) ||  \\\r\n                                        ((type) == SF_CTRL_WRAP_LEN_512) ||  \\\r\n                                        ((type) == SF_CTRL_WRAP_LEN_1024) || \\\r\n                                        ((type) == SF_CTRL_WRAP_LEN_2048) || \\\r\n                                        ((type) == SF_CTRL_WRAP_LEN_4096))\r\n\r\n/** @defgroup  SF_CTRL_OWNER_TYPE\r\n *  @{\r\n */\r\n#define IS_SF_CTRL_OWNER_TYPE(type) (((type) == SF_CTRL_OWNER_SAHB) || \\\r\n                                     ((type) == SF_CTRL_OWNER_IAHB))\r\n\r\n/** @defgroup  SF_CTRL_SAHB_TYPE\r\n *  @{\r\n */\r\n#define IS_SF_CTRL_SAHB_TYPE(type) (((type) == SF_CTRL_SAHB_CLOCK) || \\\r\n                                    ((type) == SF_CTRL_FLASH_CLOCK))\r\n\r\n/** @defgroup  SF_CTRL_AHB2SIF_TYPE\r\n *  @{\r\n */\r\n#define IS_SF_CTRL_AHB2SIF_TYPE(type) (((type) == HIGH_SPEED_MODE_CLOCK) || \\\r\n                                       ((type) == REMOVE_CLOCK_CONSTRAIN))\r\n\r\n/** @defgroup  SF_CTRL_RW_TYPE\r\n *  @{\r\n */\r\n#define IS_SF_CTRL_RW_TYPE(type) (((type) == SF_CTRL_READ) || \\\r\n                                  ((type) == SF_CTRL_WRITE))\r\n\r\n/** @defgroup  SF_CTRL_IO_TYPE\r\n *  @{\r\n */\r\n#define IS_SF_CTRL_IO_TYPE(type) (((type) == SF_CTRL_NIO_MODE) || \\\r\n                                  ((type) == SF_CTRL_DO_MODE) ||  \\\r\n                                  ((type) == SF_CTRL_QO_MODE) ||  \\\r\n                                  ((type) == SF_CTRL_DIO_MODE) || \\\r\n                                  ((type) == SF_CTRL_QIO_MODE))\r\n\r\n/** @defgroup  SF_CTRL_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_SF_CTRL_MODE_TYPE(type) (((type) == SF_CTRL_SPI_MODE) || \\\r\n                                    ((type) == SF_CTRL_QPI_MODE))\r\n\r\n/** @defgroup  SF_CTRL_CMD_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_SF_CTRL_CMD_MODE_TYPE(type) (((type) == SF_CTRL_CMD_1_LINE) || \\\r\n                                        ((type) == SF_CTRL_CMD_4_LINES))\r\n\r\n/** @defgroup  SF_CTRL_ADDR_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_SF_CTRL_ADDR_MODE_TYPE(type) (((type) == SF_CTRL_ADDR_1_LINE) ||  \\\r\n                                         ((type) == SF_CTRL_ADDR_2_LINES) || \\\r\n                                         ((type) == SF_CTRL_ADDR_4_LINES))\r\n\r\n/** @defgroup  SF_CTRL_DMY_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_SF_CTRL_DMY_MODE_TYPE(type) (((type) == SF_CTRL_DUMMY_1_LINE) ||  \\\r\n                                        ((type) == SF_CTRL_DUMMY_2_LINES) || \\\r\n                                        ((type) == SF_CTRL_DUMMY_4_LINES))\r\n\r\n/** @defgroup  SF_CTRL_DATA_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_SF_CTRL_DATA_MODE_TYPE(type) (((type) == SF_CTRL_DATA_1_LINE) ||  \\\r\n                                         ((type) == SF_CTRL_DATA_2_LINES) || \\\r\n                                         ((type) == SF_CTRL_DATA_4_LINES))\r\n\r\n/** @defgroup  SF_CTRL_AES_KEY_TYPE\r\n *  @{\r\n */\r\n#define IS_SF_CTRL_AES_KEY_TYPE(type) (((type) == SF_CTRL_AES_128BITS) || \\\r\n                                       ((type) == SF_CTRL_AES_256BITS) || \\\r\n                                       ((type) == SF_CTRL_AES_192BITS) || \\\r\n                                       ((type) == SF_CTRL_AES_128BITS_DOUBLE_KEY))\r\n\r\n/*@} end of group SF_CTRL_Public_Constants */\r\n\r\n/** @defgroup  SF_CTRL_Public_Macros\r\n *  @{\r\n */\r\n#define SF_CTRL_NO_ADDRESS  0xFFFFFFFF\r\n#define FLASH_CTRL_BUF_SIZE 256\r\n\r\n/*@} end of group SF_CTRL_Public_Macros */\r\n\r\n/** @defgroup  SF_CTRL_Public_Functions\r\n *  @{\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid SF_Ctrl_IRQHandler(void);\r\n#endif\r\nvoid SF_Ctrl_Enable(const SF_Ctrl_Cfg_Type *cfg);\r\nvoid SF_Ctrl_Psram_Init(SF_Ctrl_Psram_Cfg *psramCfg);\r\nuint8_t SF_Ctrl_Get_Clock_Delay(void);\r\nvoid SF_Ctrl_Set_Clock_Delay(uint8_t delay);\r\nvoid SF_Ctrl_Cmds_Set(SF_Ctrl_Cmds_Cfg *cmdsCfg);\r\nvoid SF_Ctrl_Select_Pad(SF_Ctrl_Pad_Select sel);\r\nvoid SF_Ctrl_Select_Bank(SF_Ctrl_Select sel);\r\nvoid SF_Ctrl_Set_Owner(SF_Ctrl_Owner_Type owner);\r\nvoid SF_Ctrl_Disable(void);\r\nvoid SF_Ctrl_AES_Enable_BE(void);\r\nvoid SF_Ctrl_AES_Enable_LE(void);\r\nvoid SF_Ctrl_AES_Set_Region(uint8_t region, uint8_t enable, uint8_t hwKey, uint32_t startAddr,\r\n                            uint32_t endAddr,\r\n                            uint8_t locked);\r\nvoid SF_Ctrl_AES_Set_Key(uint8_t region, uint8_t *key, SF_Ctrl_AES_Key_Type keyType);\r\nvoid SF_Ctrl_AES_Set_Key_BE(uint8_t region, uint8_t *key, SF_Ctrl_AES_Key_Type keyType);\r\nvoid SF_Ctrl_AES_Set_IV(uint8_t region, uint8_t *iv, uint32_t addrOffset);\r\nvoid SF_Ctrl_AES_Set_IV_BE(uint8_t region, uint8_t *iv, uint32_t addrOffset);\r\nvoid SF_Ctrl_AES_Enable(void);\r\nvoid SF_Ctrl_AES_Disable(void);\r\nuint8_t SF_Ctrl_Is_AES_Enable(void);\r\nvoid SF_Ctrl_Set_Flash_Image_Offset(uint32_t addrOffset);\r\nuint32_t SF_Ctrl_Get_Flash_Image_Offset(void);\r\nvoid SF_Ctrl_Select_Clock(SF_Ctrl_Sahb_Type sahbType);\r\nvoid SF_Ctrl_SendCmd(SF_Ctrl_Cmd_Cfg_Type *cfg);\r\nvoid SF_Ctrl_Flash_Read_Icache_Set(SF_Ctrl_Cmd_Cfg_Type *cfg, uint8_t cmdValid);\r\nvoid SF_Ctrl_Psram_Write_Icache_Set(SF_Ctrl_Cmd_Cfg_Type *cfg, uint8_t cmdValid);\r\nvoid SF_Ctrl_Psram_Read_Icache_Set(SF_Ctrl_Cmd_Cfg_Type *cfg, uint8_t cmdValid);\r\nBL_Sts_Type SF_Ctrl_GetBusyState(void);\r\n\r\n/*@} end of group SF_CTRL_Public_Functions */\r\n\r\n/*@} end of group SF_CTRL */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_SF_CTRL_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_sflash.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_sflah.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_SFLAH_H__\r\n#define __BL702_SFLAH_H__\r\n\r\n#include \"bl702_common.h\"\r\n#include \"bl702_sf_ctrl.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SFLAH\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SFLAH_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief Serial flash configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint8_t ioMode;               /*!< Serail flash interface mode,bit0-3:IF mode,bit4:unwrap */\r\n    uint8_t cReadSupport;         /*!< Support continuous read mode,bit0:continuous read mode support,bit1:read mode cfg */\r\n    uint8_t clkDelay;             /*!< SPI clock delay,bit0-3:delay,bit4-6:pad delay */\r\n    uint8_t clkInvert;            /*!< SPI clock phase invert,bit0:clck invert,bit1:rx invert,bit2-4:pad delay,bit5-7:pad delay */\r\n    uint8_t resetEnCmd;           /*!< Flash enable reset command */\r\n    uint8_t resetCmd;             /*!< Flash reset command */\r\n    uint8_t resetCreadCmd;        /*!< Flash reset continuous read command */\r\n    uint8_t resetCreadCmdSize;    /*!< Flash reset continuous read command size */\r\n    uint8_t jedecIdCmd;           /*!< JEDEC ID command */\r\n    uint8_t jedecIdCmdDmyClk;     /*!< JEDEC ID command dummy clock */\r\n    uint8_t qpiJedecIdCmd;        /*!< QPI JEDEC ID comamnd */\r\n    uint8_t qpiJedecIdCmdDmyClk;  /*!< QPI JEDEC ID command dummy clock */\r\n    uint8_t sectorSize;           /*!< *1024bytes */\r\n    uint8_t mid;                  /*!< Manufacturer ID */\r\n    uint16_t pageSize;            /*!< Page size */\r\n    uint8_t chipEraseCmd;         /*!< Chip erase cmd */\r\n    uint8_t sectorEraseCmd;       /*!< Sector erase command */\r\n    uint8_t blk32EraseCmd;        /*!< Block 32K erase command,some Micron not support */\r\n    uint8_t blk64EraseCmd;        /*!< Block 64K erase command */\r\n    uint8_t writeEnableCmd;       /*!< Need before every erase or program */\r\n    uint8_t pageProgramCmd;       /*!< Page program cmd */\r\n    uint8_t qpageProgramCmd;      /*!< QIO page program cmd */\r\n    uint8_t qppAddrMode;          /*!< QIO page program address mode */\r\n    uint8_t fastReadCmd;          /*!< Fast read command */\r\n    uint8_t frDmyClk;             /*!< Fast read command dummy clock */\r\n    uint8_t qpiFastReadCmd;       /*!< QPI fast read command */\r\n    uint8_t qpiFrDmyClk;          /*!< QPI fast read command dummy clock */\r\n    uint8_t fastReadDoCmd;        /*!< Fast read dual output command */\r\n    uint8_t frDoDmyClk;           /*!< Fast read dual output command dummy clock */\r\n    uint8_t fastReadDioCmd;       /*!< Fast read dual io comamnd */\r\n    uint8_t frDioDmyClk;          /*!< Fast read dual io command dummy clock */\r\n    uint8_t fastReadQoCmd;        /*!< Fast read quad output comamnd */\r\n    uint8_t frQoDmyClk;           /*!< Fast read quad output comamnd dummy clock */\r\n    uint8_t fastReadQioCmd;       /*!< Fast read quad io comamnd */\r\n    uint8_t frQioDmyClk;          /*!< Fast read quad io comamnd dummy clock */\r\n    uint8_t qpiFastReadQioCmd;    /*!< QPI fast read quad io comamnd */\r\n    uint8_t qpiFrQioDmyClk;       /*!< QPI fast read QIO dummy clock */\r\n    uint8_t qpiPageProgramCmd;    /*!< QPI program command */\r\n    uint8_t writeVregEnableCmd;   /*!< Enable write reg */\r\n    uint8_t wrEnableIndex;        /*!< Write enable register index */\r\n    uint8_t qeIndex;              /*!< Quad mode enable register index */\r\n    uint8_t busyIndex;            /*!< Busy status register index */\r\n    uint8_t wrEnableBit;          /*!< Write enable bit pos */\r\n    uint8_t qeBit;                /*!< Quad enable bit pos */\r\n    uint8_t busyBit;              /*!< Busy status bit pos */\r\n    uint8_t wrEnableWriteRegLen;  /*!< Register length of write enable */\r\n    uint8_t wrEnableReadRegLen;   /*!< Register length of write enable status */\r\n    uint8_t qeWriteRegLen;        /*!< Register length of contain quad enable */\r\n    uint8_t qeReadRegLen;         /*!< Register length of contain quad enable status */\r\n    uint8_t releasePowerDown;     /*!< Release power down command */\r\n    uint8_t busyReadRegLen;       /*!< Register length of contain busy status */\r\n    uint8_t readRegCmd[4];        /*!< Read register command buffer */\r\n    uint8_t writeRegCmd[4];       /*!< Write register command buffer */\r\n    uint8_t enterQpi;             /*!< Enter qpi command */\r\n    uint8_t exitQpi;              /*!< Exit qpi command */\r\n    uint8_t cReadMode;            /*!< Config data for continuous read mode */\r\n    uint8_t cRExit;               /*!< Config data for exit continuous read mode */\r\n    uint8_t burstWrapCmd;         /*!< Enable burst wrap command */\r\n    uint8_t burstWrapCmdDmyClk;   /*!< Enable burst wrap command dummy clock */\r\n    uint8_t burstWrapDataMode;    /*!< Data and address mode for this command */\r\n    uint8_t burstWrapData;        /*!< Data to enable burst wrap */\r\n    uint8_t deBurstWrapCmd;       /*!< Disable burst wrap command */\r\n    uint8_t deBurstWrapCmdDmyClk; /*!< Disable burst wrap command dummy clock */\r\n    uint8_t deBurstWrapDataMode;  /*!< Data and address mode for this command */\r\n    uint8_t deBurstWrapData;      /*!< Data to disable burst wrap */\r\n    uint16_t timeEsector;         /*!< 4K erase time */\r\n    uint16_t timeE32k;            /*!< 32K erase time */\r\n    uint16_t timeE64k;            /*!< 64K erase time */\r\n    uint16_t timePagePgm;         /*!< Page program time */\r\n    uint16_t timeCe;              /*!< Chip erase time in ms */\r\n    uint8_t pdDelay;              /*!< Release power down command delay time for wake up */\r\n    uint8_t qeData;               /*!< QE set data */\r\n} __attribute__((packed)) SPI_Flash_Cfg_Type;\r\n\r\n/*@} end of group SFLAH_Public_Types */\r\n\r\n/** @defgroup  SFLAH_Public_Constants\r\n *  @{\r\n */\r\n\r\n/*@} end of group SFLAH_Public_Constants */\r\n\r\n/** @defgroup  SFLAH_Public_Macros\r\n *  @{\r\n */\r\n#define BFLB_SPIFLASH_BLK32K_SIZE (32 * 1024)\r\n#define BFLB_SPIFLASH_BLK64K_SIZE (64 * 1024)\r\n#define BFLB_SPIFLASH_CMD_INVALID 0xff\r\n\r\n/*@} end of group SFLAH_Public_Macros */\r\n\r\n/** @defgroup  SFLAH_Public_Functions\r\n *  @{\r\n */\r\nvoid SFlash_Init(const SF_Ctrl_Cfg_Type *sfCtrlCfg);\r\nBL_Err_Type SFlash_SetSPIMode(SF_Ctrl_Mode_Type mode);\r\nBL_Err_Type SFlash_Read_Reg(SPI_Flash_Cfg_Type *flashCfg, uint8_t regIndex, uint8_t *regValue, uint8_t regLen);\r\nBL_Err_Type SFlash_Write_Reg(SPI_Flash_Cfg_Type *flashCfg, uint8_t regIndex, uint8_t *regValue, uint8_t regLen);\r\nBL_Err_Type SFlash_Read_Reg_With_Cmd(SPI_Flash_Cfg_Type *flashCfg, uint8_t readRegCmd, uint8_t *regValue,\r\n                                     uint8_t regLen);\r\nBL_Err_Type SFlash_Write_Reg_With_Cmd(SPI_Flash_Cfg_Type *flashCfg, uint8_t writeRegCmd, uint8_t *regValue,\r\n                                      uint8_t regLen);\r\nBL_Sts_Type SFlash_Busy(SPI_Flash_Cfg_Type *flashCfg);\r\nBL_Err_Type SFlash_Write_Enable(SPI_Flash_Cfg_Type *flashCfg);\r\nBL_Err_Type SFlash_Qspi_Enable(SPI_Flash_Cfg_Type *flashCfg);\r\nvoid SFlash_Volatile_Reg_Write_Enable(SPI_Flash_Cfg_Type *flashCfg);\r\nBL_Err_Type SFlash_Chip_Erase(SPI_Flash_Cfg_Type *flashCfg);\r\nBL_Err_Type SFlash_Sector_Erase(SPI_Flash_Cfg_Type *flashCfg, uint32_t secNum);\r\nBL_Err_Type SFlash_Blk32_Erase(SPI_Flash_Cfg_Type *flashCfg, uint32_t blkNum);\r\nBL_Err_Type SFlash_Blk64_Erase(SPI_Flash_Cfg_Type *flashCfg, uint32_t blkNum);\r\nBL_Err_Type SFlash_Erase(SPI_Flash_Cfg_Type *flashCfg, uint32_t startaddr, uint32_t endaddr);\r\nBL_Err_Type SFlash_Program(SPI_Flash_Cfg_Type *flashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t *data, uint32_t len);\r\nvoid SFlash_GetUniqueId(uint8_t *data, uint8_t idLen);\r\nvoid SFlash_GetJedecId(SPI_Flash_Cfg_Type *flashCfg, uint8_t *data);\r\nvoid SFlash_GetDeviceId(uint8_t *data);\r\nvoid SFlash_Powerdown(void);\r\nvoid SFlash_Releae_Powerdown(SPI_Flash_Cfg_Type *flashCfg);\r\nBL_Err_Type SFlash_Restore_From_Powerdown(SPI_Flash_Cfg_Type *pFlashCfg, uint8_t flashContRead);\r\nvoid SFlash_SetBurstWrap(SPI_Flash_Cfg_Type *flashCfg);\r\nvoid SFlash_DisableBurstWrap(SPI_Flash_Cfg_Type *flashCfg);\r\nBL_Err_Type SFlash_Software_Reset(SPI_Flash_Cfg_Type *flashCfg);\r\nvoid SFlash_Reset_Continue_Read(SPI_Flash_Cfg_Type *flashCfg);\r\nBL_Err_Type SFlash_Set_IDbus_Cfg(SPI_Flash_Cfg_Type *flashCfg, SF_Ctrl_IO_Type ioMode, uint8_t contRead, uint32_t addr,\r\n                                 uint32_t len);\r\nBL_Err_Type SFlash_IDbus_Read_Enable(SPI_Flash_Cfg_Type *flashCfg, SF_Ctrl_IO_Type ioMode, uint8_t contRead);\r\nBL_Err_Type SFlash_Cache_Read_Enable(SPI_Flash_Cfg_Type *flashCfg, SF_Ctrl_IO_Type ioMode, uint8_t contRead,\r\n                                     uint8_t wayDisable);\r\nvoid SFlash_Cache_Read_Disable(void);\r\nBL_Err_Type SFlash_Restore_From_Powerdown(SPI_Flash_Cfg_Type *pFlashCfg, uint8_t flashContRead);\r\nBL_Err_Type SFlash_Read(SPI_Flash_Cfg_Type *flashCfg, SF_Ctrl_IO_Type ioMode, uint8_t contRead, uint32_t addr, uint8_t *data,\r\n                        uint32_t len);\r\n\r\n/*@} end of group SFLAH_Public_Functions */\r\n\r\n/*@} end of group SFLAH */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_SFLAH_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_sflash_ext.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_sflah_ext.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_SFLAH_EXT_H__\r\n#define __BL702_SFLAH_EXT_H__\r\n\r\n#include \"bl702_sflash.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SFLAH_EXT\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SFLAH_EXT_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief Serail flash protect KH25V40 type definition\r\n */\r\ntypedef enum {\r\n    SFLASH_KH25V40_PROTECT_NONE,          /*!< SFlash no protect KH25V40 */\r\n    SFLASH_KH25V40_PROTECT_448KTO512K,    /*!< SFlash protect KH25V40 448K to 512K */\r\n    SFLASH_KH25V40_PROTECT_384KTO512K,    /*!< SFlash protect KH25V40 384K to 512K */\r\n    SFLASH_KH25V40_PROTECT_256KTO512K,    /*!< SFlash protect KH25V40 256K to 512K */\r\n    SFLASH_KH25V40_PROTECT_ALL,           /*!< SFlash protect KH25V40 0K to 512K */\r\n} SFlash_Protect_Kh25v40_Type;\r\n\r\n/*@} end of group SFLAH_EXT_Public_Types */\r\n\r\n/** @defgroup  SFLAH_EXT_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SFLASH_PROTECT_KH25V40_TYPE\r\n *  @{\r\n */\r\n#define IS_SFLASH_PROTECT_KH25V40_TYPE(type) (((type) == SFLASH_KH25V40_PROTECT_NONE) || \\\r\n                                              ((type) == SFLASH_KH25V40_PROTECT_448KTO512K) ||  \\\r\n                                              ((type) == SFLASH_KH25V40_PROTECT_384KTO512K) ||  \\\r\n                                              ((type) == SFLASH_KH25V40_PROTECT_256KTO512K) || \\\r\n                                              ((type) == SFLASH_KH25V40_PROTECT_ALL))\r\n\r\n/*@} end of group SFLAH_EXT_Public_Constants */\r\n\r\n/** @defgroup  SFLAH_EXT_Public_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group SFLAH_EXT_Public_Macros */\r\n\r\n/** @defgroup  SFLAH_EXT_Public_Functions\r\n *  @{\r\n */\r\nBL_Err_Type SFlash_KH25V40_Write_Protect(SPI_Flash_Cfg_Type *flashCfg, SFlash_Protect_Kh25v40_Type protect);\r\nBL_Err_Type SFlash_Read_Reg_With_Cmd(SPI_Flash_Cfg_Type *flashCfg, uint8_t readRegCmd, uint8_t *regValue,\r\n                                     uint8_t regLen);\r\nBL_Err_Type SFlash_Write_Reg_With_Cmd(SPI_Flash_Cfg_Type *flashCfg, uint8_t writeRegCmd, uint8_t *regValue,\r\n                                      uint8_t regLen);\r\nBL_Err_Type SFlash_Clear_Status_Register(SPI_Flash_Cfg_Type *pFlashCfg);\r\n\r\n/*@} end of group SFLAH_EXT_Public_Functions */\r\n\r\n/*@} end of group SFLAH_EXT */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_SFLAH_EXT_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_spi.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_spi.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_SPI_H__\r\n#define __BL702_SPI_H__\r\n\r\n#include \"spi_reg.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SPI\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SPI_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief SPI No. type definition\r\n */\r\ntypedef enum {\r\n    SPI_ID_0,   /*!< SPI0 port define */\r\n    SPI_ID_MAX, /*!< SPI MAX ID define */\r\n} SPI_ID_Type;\r\n\r\n/**\r\n *  @brief SPI byte inverse type definition\r\n */\r\ntypedef enum {\r\n    SPI_BYTE_INVERSE_BYTE0_FIRST, /*!< SPI byte 0 is sent out first */\r\n    SPI_BYTE_INVERSE_BYTE3_FIRST, /*!< SPI byte 3 is sent out first */\r\n} SPI_BYTE_INVERSE_Type;\r\n\r\n/**\r\n *  @brief SPI bit inverse type definition\r\n */\r\ntypedef enum {\r\n    SPI_BIT_INVERSE_MSB_FIRST, /*!< SPI each byte is sent out MSB first */\r\n    SPI_BIT_INVERSE_LSB_FIRST, /*!< SPI each byte is sent out LSB first */\r\n} SPI_BIT_INVERSE_Type;\r\n\r\n/**\r\n *  @brief SPI clock phase inverse type definition\r\n */\r\ntypedef enum {\r\n    SPI_CLK_PHASE_INVERSE_0, /*!< SPI clock phase inverse 0 */\r\n    SPI_CLK_PHASE_INVERSE_1, /*!< SPI clock phase inverse 1 */\r\n} SPI_CLK_PHASE_INVERSE_Type;\r\n\r\n/**\r\n *  @brief SPI clock polarity type definition\r\n */\r\ntypedef enum {\r\n    SPI_CLK_POLARITY_LOW,  /*!< SPI clock output low at IDLE state */\r\n    SPI_CLK_POLARITY_HIGH, /*!< SPI clock output high at IDLE state */\r\n} SPI_CLK_POLARITY_Type;\r\n\r\n/**\r\n *  @brief SPI frame size(also the valid width for each fifo entry) type definition\r\n */\r\ntypedef enum {\r\n    SPI_FRAME_SIZE_8,  /*!< SPI frame size 8 bit */\r\n    SPI_FRAME_SIZE_16, /*!< SPI frame size 16 bit */\r\n    SPI_FRAME_SIZE_24, /*!< SPI frame size 24 bit */\r\n    SPI_FRAME_SIZE_32, /*!< SPI frame size 32 bit */\r\n} SPI_FrameSize_Type;\r\n\r\n/**\r\n *  @brief SPI work mode select type definition\r\n */\r\ntypedef enum {\r\n    SPI_WORK_MODE_SLAVE,  /*!< SPI work at slave mode */\r\n    SPI_WORK_MODE_MASTER, /*!< SPI work at master mode */\r\n} SPI_WORK_MODE_Type;\r\n\r\n/**\r\n *  @brief SPI enable or disable timeout judgment definition\r\n */\r\ntypedef enum {\r\n    SPI_TIMEOUT_DISABLE, /*!< SPI disable timeout judgment */\r\n    SPI_TIMEOUT_ENABLE,  /*!< SPI enable timeout judgment */\r\n} SPI_Timeout_Type;\r\n\r\n/**\r\n *  @brief SPI fifo overflow/underflow flag type definition\r\n */\r\ntypedef enum {\r\n    SPI_FIFO_TX_OVERFLOW,  /*!< SPI tx fifo overflow flag */\r\n    SPI_FIFO_TX_UNDERFLOW, /*!< SPI tx fifo underflow flag */\r\n    SPI_FIFO_RX_OVERFLOW,  /*!< SPI rx fifo overflow flag */\r\n    SPI_FIFO_RX_UNDERFLOW, /*!< SPI rx fifo underflow flag */\r\n} SPI_FifoStatus_Type;\r\n\r\n/**\r\n *  @brief SPI interrupt type definition\r\n */\r\ntypedef enum {\r\n    SPI_INT_END,            /*!< SPI transfer end interrupt,shared by both master and slave mode */\r\n    SPI_INT_TX_FIFO_REQ,    /*!< SPI tx fifo ready interrupt(tx fifo count > tx fifo threshold) */\r\n    SPI_INT_RX_FIFO_REQ,    /*!< SPI rx fifo ready interrupt(rx fifo count > rx fifo threshold) */\r\n    SPI_INT_SLAVE_TIMEOUT,  /*!< SPI slave mode transfer time-out interrupt,triggered when spi bus is idle for the given value */\r\n    SPI_INT_SLAVE_UNDERRUN, /*!< SPI slave mode tx underrun error interrupt,triggered when tx is not ready during transfer */\r\n    SPI_INT_FIFO_ERROR,     /*!< SPI tx/rx fifo error interrupt(overflow/underflow) */\r\n    SPI_INT_ALL,            /*!< All the interrupt */\r\n} SPI_INT_Type;\r\n\r\n/**\r\n *  @brief SPI configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type deglitchEnable;             /*!< Enable or disable de-glitch function */\r\n    BL_Fun_Type continuousEnable;           /*!< Enable or disable master continuous transfer mode,enable:SS will stay asserted if next data is valid */\r\n    SPI_BYTE_INVERSE_Type byteSequence;     /*!< The byte is sent first in SPI transfer */\r\n    SPI_BIT_INVERSE_Type bitSequence;       /*!< The bit is sent first in SPI transfer */\r\n    SPI_CLK_PHASE_INVERSE_Type clkPhaseInv; /*!< Inverse SPI clock phase */\r\n    SPI_CLK_POLARITY_Type clkPolarity;      /*!< SPI clock plarity */\r\n    SPI_FrameSize_Type frameSize;           /*!< SPI frame size(also the valid width for each fifo entry) */\r\n} SPI_CFG_Type;\r\n\r\n/**\r\n *  @brief SPI configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint8_t startLen;      /*!< Length of start condition */\r\n    uint8_t stopLen;       /*!< Length of stop condition */\r\n    uint8_t dataPhase0Len; /*!< Length of data phase 0,affecting clock */\r\n    uint8_t dataPhase1Len; /*!< Length of data phase 1,affecting clock */\r\n    uint8_t intervalLen;   /*!< Length of interval between frame */\r\n} SPI_ClockCfg_Type;\r\n\r\n/**\r\n *  @brief SPI DMA configuration type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint8_t txFifoThreshold;     /*!< SPI tx FIFO threshold */\r\n    uint8_t rxFifoThreshold;     /*!< SPI rx FIFO threshold */\r\n    BL_Fun_Type txFifoDmaEnable; /*!< Enable or disable tx dma req/ack interface */\r\n    BL_Fun_Type rxFifoDmaEnable; /*!< Enable or disable rx dma req/ack interface */\r\n} SPI_FifoCfg_Type;\r\n\r\n/*@} end of group SPI_Public_Types */\r\n\r\n/** @defgroup  SPI_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SPI_ID_TYPE\r\n *  @{\r\n */\r\n#define IS_SPI_ID_TYPE(type) (((type) == SPI_ID_0) || \\\r\n                              ((type) == SPI_ID_MAX))\r\n\r\n/** @defgroup  SPI_BYTE_INVERSE_TYPE\r\n *  @{\r\n */\r\n#define IS_SPI_BYTE_INVERSE_TYPE(type) (((type) == SPI_BYTE_INVERSE_BYTE0_FIRST) || \\\r\n                                        ((type) == SPI_BYTE_INVERSE_BYTE3_FIRST))\r\n\r\n/** @defgroup  SPI_BIT_INVERSE_TYPE\r\n *  @{\r\n */\r\n#define IS_SPI_BIT_INVERSE_TYPE(type) (((type) == SPI_BIT_INVERSE_MSB_FIRST) || \\\r\n                                       ((type) == SPI_BIT_INVERSE_LSB_FIRST))\r\n\r\n/** @defgroup  SPI_CLK_PHASE_INVERSE_TYPE\r\n *  @{\r\n */\r\n#define IS_SPI_CLK_PHASE_INVERSE_TYPE(type) (((type) == SPI_CLK_PHASE_INVERSE_0) || \\\r\n                                             ((type) == SPI_CLK_PHASE_INVERSE_1))\r\n\r\n/** @defgroup  SPI_CLK_POLARITY_TYPE\r\n *  @{\r\n */\r\n#define IS_SPI_CLK_POLARITY_TYPE(type) (((type) == SPI_CLK_POLARITY_LOW) || \\\r\n                                        ((type) == SPI_CLK_POLARITY_HIGH))\r\n\r\n/** @defgroup  SPI_FRAMESIZE_TYPE\r\n *  @{\r\n */\r\n#define IS_SPI_FRAMESIZE_TYPE(type) (((type) == SPI_FRAME_SIZE_8) ||  \\\r\n                                     ((type) == SPI_FRAME_SIZE_16) || \\\r\n                                     ((type) == SPI_FRAME_SIZE_24) || \\\r\n                                     ((type) == SPI_FRAME_SIZE_32))\r\n\r\n/** @defgroup  SPI_WORK_MODE_TYPE\r\n *  @{\r\n */\r\n#define IS_SPI_WORK_MODE_TYPE(type) (((type) == SPI_WORK_MODE_SLAVE) || \\\r\n                                     ((type) == SPI_WORK_MODE_MASTER))\r\n\r\n/** @defgroup  SPI_TIMEOUT_TYPE\r\n *  @{\r\n */\r\n#define IS_SPI_TIMEOUT_TYPE(type) (((type) == SPI_TIMEOUT_DISABLE) || \\\r\n                                   ((type) == SPI_TIMEOUT_ENABLE))\r\n\r\n/** @defgroup  SPI_FIFOSTATUS_TYPE\r\n *  @{\r\n */\r\n#define IS_SPI_FIFOSTATUS_TYPE(type) (((type) == SPI_FIFO_TX_OVERFLOW) ||  \\\r\n                                      ((type) == SPI_FIFO_TX_UNDERFLOW) || \\\r\n                                      ((type) == SPI_FIFO_RX_OVERFLOW) ||  \\\r\n                                      ((type) == SPI_FIFO_RX_UNDERFLOW))\r\n\r\n/** @defgroup  SPI_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_SPI_INT_TYPE(type) (((type) == SPI_INT_END) ||            \\\r\n                               ((type) == SPI_INT_TX_FIFO_REQ) ||    \\\r\n                               ((type) == SPI_INT_RX_FIFO_REQ) ||    \\\r\n                               ((type) == SPI_INT_SLAVE_TIMEOUT) ||  \\\r\n                               ((type) == SPI_INT_SLAVE_UNDERRUN) || \\\r\n                               ((type) == SPI_INT_FIFO_ERROR) ||     \\\r\n                               ((type) == SPI_INT_ALL))\r\n\r\n/*@} end of group SPI_Public_Constants */\r\n\r\n/** @defgroup  SPI_Public_Macros\r\n *  @{\r\n */\r\n#define SPI_RX_FIFO_SIZE 4\r\n#define SPI_TX_FIFO_SIZE 4\r\n\r\n/*@} end of group SPI_Public_Macros */\r\n\r\n/** @defgroup  SPI_Public_Functions\r\n *  @{\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid SPI_IRQHandler(void);\r\n#endif\r\nBL_Err_Type SPI_Init(SPI_ID_Type spiNo, SPI_CFG_Type *spiCfg);\r\nBL_Err_Type SPI_DeInit(SPI_ID_Type spiNo);\r\nBL_Err_Type SPI_SetClock(SPI_ID_Type spiNo, uint32_t clk);\r\nBL_Err_Type SPI_ClockConfig(SPI_ID_Type spiNo, SPI_ClockCfg_Type *clockCfg);\r\nBL_Err_Type SPI_FifoConfig(SPI_ID_Type spiNo, SPI_FifoCfg_Type *fifoCfg);\r\nBL_Err_Type SPI_Enable(SPI_ID_Type spiNo, SPI_WORK_MODE_Type modeType);\r\nBL_Err_Type SPI_Disable(SPI_ID_Type spiNo, SPI_WORK_MODE_Type modeType);\r\nBL_Err_Type SPI_SetTimeOutValue(SPI_ID_Type spiNo, uint16_t value);\r\nBL_Err_Type SPI_SetDeglitchCount(SPI_ID_Type spiNo, uint8_t cnt);\r\nBL_Err_Type SPI_RxIgnoreEnable(SPI_ID_Type spiNo, uint8_t startPoint, uint8_t stopPoint);\r\nBL_Err_Type SPI_RxIgnoreDisable(SPI_ID_Type spiNo);\r\nBL_Err_Type SPI_ClrTxFifo(SPI_ID_Type spiNo);\r\nBL_Err_Type SPI_ClrRxFifo(SPI_ID_Type spiNo);\r\nBL_Err_Type SPI_ClrIntStatus(SPI_ID_Type spiNo, SPI_INT_Type intType);\r\nBL_Err_Type SPI_IntMask(SPI_ID_Type spiNo, SPI_INT_Type intType, BL_Mask_Type intMask);\r\nBL_Err_Type SPI_Int_Callback_Install(SPI_ID_Type spiNo, SPI_INT_Type intType, intCallback_Type *cbFun);\r\nBL_Err_Type SPI_SendData(SPI_ID_Type spiNo, uint32_t data);\r\nBL_Err_Type SPI_Send_8bits(SPI_ID_Type spiNo, uint8_t *buff, uint32_t length, SPI_Timeout_Type timeoutType);\r\nBL_Err_Type SPI_Send_16bits(SPI_ID_Type spiNo, uint16_t *buff, uint32_t length, SPI_Timeout_Type timeoutType);\r\nBL_Err_Type SPI_Send_24bits(SPI_ID_Type spiNo, uint32_t *buff, uint32_t length, SPI_Timeout_Type timeoutType);\r\nBL_Err_Type SPI_Send_32bits(SPI_ID_Type spiNo, uint32_t *buff, uint32_t length, SPI_Timeout_Type timeoutType);\r\nBL_Err_Type SPI_Recv_8bits(SPI_ID_Type spiNo, uint8_t *buff, uint32_t length, SPI_Timeout_Type timeoutType);\r\nBL_Err_Type SPI_Recv_16bits(SPI_ID_Type spiNo, uint16_t *buff, uint32_t length, SPI_Timeout_Type timeoutType);\r\nBL_Err_Type SPI_Recv_24bits(SPI_ID_Type spiNo, uint32_t *buff, uint32_t length, SPI_Timeout_Type timeoutType);\r\nBL_Err_Type SPI_Recv_32bits(SPI_ID_Type spiNo, uint32_t *buff, uint32_t length, SPI_Timeout_Type timeoutType);\r\nBL_Err_Type SPI_SendRecv_8bits(SPI_ID_Type spiNo, uint8_t *sendBuff, uint8_t *recvBuff, uint32_t length,\r\n                               SPI_Timeout_Type timeoutType);\r\nBL_Err_Type SPI_SendRecv_16bits(SPI_ID_Type spiNo, uint16_t *sendBuff, uint16_t *recvBuff, uint32_t length,\r\n                                SPI_Timeout_Type timeoutType);\r\nBL_Err_Type SPI_SendRecv_24bits(SPI_ID_Type spiNo, uint32_t *sendBuff, uint32_t *recvBuff, uint32_t length,\r\n                                SPI_Timeout_Type timeoutType);\r\nBL_Err_Type SPI_SendRecv_32bits(SPI_ID_Type spiNo, uint32_t *sendBuff, uint32_t *recvBuff, uint32_t length,\r\n                                SPI_Timeout_Type timeoutType);\r\nuint32_t SPI_ReceiveData(SPI_ID_Type spiNo);\r\nuint8_t SPI_GetTxFifoCount(SPI_ID_Type spiNo);\r\nuint8_t SPI_GetRxFifoCount(SPI_ID_Type spiNo);\r\nBL_Sts_Type SPI_GetIntStatus(SPI_ID_Type spiNo, SPI_INT_Type intType);\r\nBL_Sts_Type SPI_GetFifoStatus(SPI_ID_Type spiNo, SPI_FifoStatus_Type fifoSts);\r\nBL_Sts_Type SPI_GetBusyStatus(SPI_ID_Type spiNo);\r\n\r\n/*@} end of group SPI_Public_Functions */\r\n\r\n/*@} end of group SPI */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_SPI_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_timer.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_timer.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_TIMER_H__\r\n#define __BL702_TIMER_H__\r\n\r\n#include \"timer_reg.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  TIMER\r\n *  @{\r\n */\r\n\r\n/** @defgroup  TIMER_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief TIMER channel type definition\r\n */\r\ntypedef enum {\r\n    TIMER_CH0,    /*!< TIMER channel 0 port define */\r\n    TIMER_CH1,    /*!< TIMER channel 1 port define */\r\n    TIMER_CH_MAX, /*!<  */\r\n} TIMER_Chan_Type;\r\n\r\n/**\r\n *  @brief TIMER clock source type definition\r\n */\r\ntypedef enum {\r\n    TIMER_CLKSRC_FCLK, /*!< TIMER clock source :System CLK */\r\n    TIMER_CLKSRC_32K,  /*!< TIMER clock source :32K CLK */\r\n    TIMER_CLKSRC_1K,   /*!< TIMER clock source :1K CLK,Only for Timer not for Watchdog */\r\n    TIMER_CLKSRC_XTAL, /*!< TIMER clock source :XTAL CLK */\r\n} TIMER_ClkSrc_Type;\r\n\r\n/**\r\n *  @brief TIMER match compare ID type definition\r\n */\r\ntypedef enum {\r\n    TIMER_COMP_ID_0, /*!< TIMER match compare ID 0 define */\r\n    TIMER_COMP_ID_1, /*!< TIMER match compare ID 1 define */\r\n    TIMER_COMP_ID_2, /*!< TIMER match compare ID 2 define */\r\n} TIMER_Comp_ID_Type;\r\n\r\n/**\r\n *  @brief TIMER preload source type definition\r\n */\r\ntypedef enum {\r\n    TIMER_PRELOAD_TRIG_NONE,  /*!< TIMER no preload source, just free run */\r\n    TIMER_PRELOAD_TRIG_COMP0, /*!< TIMER count register preload triggered by comparator 0 */\r\n    TIMER_PRELOAD_TRIG_COMP1, /*!< TIMER count register preload triggered by comparator 1 */\r\n    TIMER_PRELOAD_TRIG_COMP2, /*!< TIMER count register preload triggered by comparator 2 */\r\n} TIMER_PreLoad_Trig_Type;\r\n\r\n/**\r\n *  @brief TIMER count register run mode type definition\r\n */\r\ntypedef enum {\r\n    TIMER_COUNT_PRELOAD, /*!< TIMER count register preload from comparator register */\r\n    TIMER_COUNT_FREERUN, /*!< TIMER count register free run */\r\n} TIMER_CountMode_Type;\r\n\r\n/**\r\n *  @brief TIMER interrupt type definition\r\n */\r\ntypedef enum {\r\n    TIMER_INT_COMP_0, /*!< Comparator 0 match cause interrupt */\r\n    TIMER_INT_COMP_1, /*!< Comparator 1 match cause interrupt */\r\n    TIMER_INT_COMP_2, /*!< Comparator 2 match cause interrupt */\r\n    TIMER_INT_ALL,    /*!<  */\r\n} TIMER_INT_Type;\r\n\r\n/**\r\n *  @brief Watchdog timer interrupt type definition\r\n */\r\ntypedef enum {\r\n    WDT_INT,     /*!< Comparator 0 match cause interrupt */\r\n    WDT_INT_ALL, /*!<  */\r\n} WDT_INT_Type;\r\n\r\n/**\r\n *  @brief TIMER configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    TIMER_Chan_Type timerCh;           /*!< Timer channel */\r\n    TIMER_ClkSrc_Type clkSrc;          /*!< Timer clock source */\r\n    TIMER_PreLoad_Trig_Type plTrigSrc; /*!< Timer count register preload trigger source slelect */\r\n    TIMER_CountMode_Type countMode;    /*!< Timer count mode */\r\n    uint8_t clockDivision;             /*!< Timer clock divison value */\r\n    uint32_t matchVal0;                /*!< Timer match 0 value 0 */\r\n    uint32_t matchVal1;                /*!< Timer match 1 value 0 */\r\n    uint32_t matchVal2;                /*!< Timer match 2 value 0 */\r\n    uint32_t preLoadVal;               /*!< Timer preload value */\r\n} TIMER_CFG_Type;\r\n\r\n/*@} end of group TIMER_Public_Types */\r\n\r\n/** @defgroup  TIMER_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  TIMER_CHAN_TYPE\r\n *  @{\r\n */\r\n#define IS_TIMER_CHAN_TYPE(type) (((type) == TIMER_CH0) || \\\r\n                                  ((type) == TIMER_CH1) || \\\r\n                                  ((type) == TIMER_CH_MAX))\r\n\r\n/** @defgroup  TIMER_CLKSRC_TYPE\r\n *  @{\r\n */\r\n#define IS_TIMER_CLKSRC_TYPE(type) (((type) == TIMER_CLKSRC_FCLK) || \\\r\n                                    ((type) == TIMER_CLKSRC_32K) ||  \\\r\n                                    ((type) == TIMER_CLKSRC_1K) ||   \\\r\n                                    ((type) == TIMER_CLKSRC_XTAL))\r\n\r\n/** @defgroup  TIMER_COMP_ID_TYPE\r\n *  @{\r\n */\r\n#define IS_TIMER_COMP_ID_TYPE(type) (((type) == TIMER_COMP_ID_0) || \\\r\n                                     ((type) == TIMER_COMP_ID_1) || \\\r\n                                     ((type) == TIMER_COMP_ID_2))\r\n\r\n/** @defgroup  TIMER_PRELOAD_TRIG_TYPE\r\n *  @{\r\n */\r\n#define IS_TIMER_PRELOAD_TRIG_TYPE(type) (((type) == TIMER_PRELOAD_TRIG_NONE) ||  \\\r\n                                          ((type) == TIMER_PRELOAD_TRIG_COMP0) || \\\r\n                                          ((type) == TIMER_PRELOAD_TRIG_COMP1) || \\\r\n                                          ((type) == TIMER_PRELOAD_TRIG_COMP2))\r\n\r\n/** @defgroup  TIMER_COUNTMODE_TYPE\r\n *  @{\r\n */\r\n#define IS_TIMER_COUNTMODE_TYPE(type) (((type) == TIMER_COUNT_PRELOAD) || \\\r\n                                       ((type) == TIMER_COUNT_FREERUN))\r\n\r\n/** @defgroup  TIMER_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_TIMER_INT_TYPE(type) (((type) == TIMER_INT_COMP_0) || \\\r\n                                 ((type) == TIMER_INT_COMP_1) || \\\r\n                                 ((type) == TIMER_INT_COMP_2) || \\\r\n                                 ((type) == TIMER_INT_ALL))\r\n\r\n/** @defgroup  WDT_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_WDT_INT_TYPE(type) (((type) == WDT_INT) || \\\r\n                               ((type) == WDT_INT_ALL))\r\n\r\n/*@} end of group TIMER_Public_Constants */\r\n\r\n/** @defgroup  TIMER_Public_Macros\r\n *  @{\r\n */\r\n#define WDT_ENABLE_ACCESS()                                                                                            \\\r\n    {                                                                                                                  \\\r\n        BL_WR_REG(TIMER_BASE, TIMER_WFAR, BL_SET_REG_BITS_VAL(BL_RD_REG(TIMER_BASE, TIMER_WFAR), TIMER_WFAR, 0xBABA)); \\\r\n        BL_WR_REG(TIMER_BASE, TIMER_WSAR, BL_SET_REG_BITS_VAL(BL_RD_REG(TIMER_BASE, TIMER_WSAR), TIMER_WSAR, 0xEB10)); \\\r\n    }\r\n\r\n/*@} end of group TIMER_Public_Macros */\r\n\r\n/** @defgroup  TIMER_Public_Functions\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief UART Functions\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid TIMER_CH0_IRQHandler(void);\r\nvoid TIMER_CH1_IRQHandler(void);\r\nvoid TIMER_WDT_IRQHandler(void);\r\n#endif\r\nBL_Err_Type TIMER_Init(TIMER_CFG_Type *timerCfg);\r\nuint32_t TIMER_GetCompValue(TIMER_Chan_Type timerCh, TIMER_Comp_ID_Type cmpNo);\r\nvoid TIMER_SetCompValue(TIMER_Chan_Type timerCh, TIMER_Comp_ID_Type cmpNo, uint32_t val);\r\nuint32_t TIMER_GetCounterValue(TIMER_Chan_Type timerCh);\r\nBL_Sts_Type TIMER_GetMatchStatus(TIMER_Chan_Type timerCh, TIMER_Comp_ID_Type cmpNo);\r\nuint32_t TIMER_GetPreloadValue(TIMER_Chan_Type timerCh);\r\nvoid TIMER_SetPreloadValue(TIMER_Chan_Type timerCh, uint32_t val);\r\nvoid TIMER_SetPreloadSrc(TIMER_Chan_Type timerCh, TIMER_PreLoad_Trig_Type plSrc);\r\nvoid TIMER_SetCountMode(TIMER_Chan_Type timerCh, TIMER_CountMode_Type countMode);\r\nvoid TIMER_ClearIntStatus(TIMER_Chan_Type timerCh, TIMER_Comp_ID_Type cmpNo);\r\nvoid TIMER_Enable(TIMER_Chan_Type timerCh);\r\nvoid TIMER_Disable(TIMER_Chan_Type timerCh);\r\nvoid TIMER_IntMask(TIMER_Chan_Type timerCh, TIMER_INT_Type intType, BL_Mask_Type intMask);\r\nvoid WDT_Set_Clock(TIMER_ClkSrc_Type clkSrc, uint8_t div);\r\nuint16_t WDT_GetMatchValue(void);\r\nvoid WDT_SetCompValue(uint16_t val);\r\nuint16_t WDT_GetCounterValue(void);\r\nvoid WDT_ResetCounterValue(void);\r\nBL_Sts_Type WDT_GetResetStatus(void);\r\nvoid WDT_ClearResetStatus(void);\r\nvoid WDT_Enable(void);\r\nvoid WDT_Disable(void);\r\nvoid WDT_IntMask(WDT_INT_Type intType, BL_Mask_Type intMask);\r\nvoid Timer_Int_Callback_Install(TIMER_Chan_Type timerChan, TIMER_INT_Type intType, intCallback_Type *cbFun);\r\nvoid WDT_Int_Callback_Install(WDT_INT_Type wdtInt, intCallback_Type *cbFun);\r\n\r\n/*@} end of group TIMER_Public_Functions */\r\n\r\n/*@} end of group TIMER */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_TIMER_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_uart.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_uart.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_UART_H__\r\n#define __BL702_UART_H__\r\n\r\n#include \"uart_reg.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  UART\r\n *  @{\r\n */\r\n\r\n/** @defgroup  UART_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief UART port type definition\r\n */\r\ntypedef enum {\r\n    UART0_ID,    /*!< UART0 port define */\r\n    UART1_ID,    /*!< UART1 port define */\r\n    UART_ID_MAX, /*!< UART MAX ID define */\r\n} UART_ID_Type;\r\n\r\n/**\r\n *  @brief UART direction type definition\r\n */\r\ntypedef enum {\r\n    UART_TX,   /*!< UART TX Direction */\r\n    UART_RX,   /*!< UART RX Direction */\r\n    UART_TXRX, /*!< UART TX and RX Direction */\r\n} UART_Direction_Type;\r\n\r\n/**\r\n *  @brief UART parity type definition\r\n */\r\ntypedef enum {\r\n    UART_PARITY_NONE, /*!< UART parity none define */\r\n    UART_PARITY_ODD,  /*!< UART parity odd define */\r\n    UART_PARITY_EVEN, /*!< UART parity even define */\r\n} UART_Parity_Type;\r\n\r\n/**\r\n *  @brief UART data bits type definiton\r\n */\r\ntypedef enum {\r\n    UART_DATABITS_5, /*!< UART data bits length:5 bits */\r\n    UART_DATABITS_6, /*!< UART data bits length:6 bits */\r\n    UART_DATABITS_7, /*!< UART data bits length:7 bits */\r\n    UART_DATABITS_8, /*!< UART data bits length:8 bits */\r\n} UART_DataBits_Type;\r\n\r\n/**\r\n *  @brief UART stop bits type definiton\r\n */\r\ntypedef enum {\r\n    UART_STOPBITS_0_5, /*!< UART data stop bits length:0.5 bits */\r\n    UART_STOPBITS_1,   /*!< UART data stop bits length:1 bits */\r\n    UART_STOPBITS_1_5, /*!< UART data stop bits length:1.5 bits */\r\n    UART_STOPBITS_2,   /*!< UART data stop bits length:2 bits */\r\n} UART_StopBits_Type;\r\n\r\n/**\r\n *  @brief UART each data byte is send out LSB-first or MSB-first type definiton\r\n */\r\ntypedef enum {\r\n    UART_LSB_FIRST, /*!< UART each byte is send out LSB-first */\r\n    UART_MSB_FIRST, /*!< UART each byte is send out MSB-first */\r\n} UART_ByteBitInverse_Type;\r\n\r\n/**\r\n *  @brief UART auto baudrate detection using codeword 0x55 or start bit definiton\r\n */\r\ntypedef enum {\r\n    UART_AUTOBAUD_0X55,     /*!< UART auto baudrate detection using codeword 0x55 */\r\n    UART_AUTOBAUD_STARTBIT, /*!< UART auto baudrate detection using start bit */\r\n} UART_AutoBaudDetection_Type;\r\n\r\n/**\r\n *  @brief UART interrupt type definition\r\n */\r\ntypedef enum {\r\n    UART_INT_TX_END,      /*!< UART tx transfer end interrupt */\r\n    UART_INT_RX_END,      /*!< UART rx transfer end interrupt */\r\n    UART_INT_TX_FIFO_REQ, /*!< UART tx fifo interrupt when tx fifo count reaches,auto clear */\r\n    UART_INT_RX_FIFO_REQ, /*!< UART rx fifo interrupt when rx fifo count reaches,auto clear */\r\n    UART_INT_RTO,         /*!< UART rx time-out interrupt */\r\n    UART_INT_PCE,         /*!< UART rx parity check error interrupt */\r\n    UART_INT_TX_FER,      /*!< UART tx fifo overflow/underflow error interrupt */\r\n    UART_INT_RX_FER,      /*!< UART rx fifo overflow/underflow error interrupt */\r\n    UART_INT_LSE,         /*!< UART rx lin mode sync field error interrupt */\r\n    UART_INT_ALL,         /*!< All the interrupt */\r\n} UART_INT_Type;\r\n\r\n/**\r\n *  @brief UART overflow or underflow type definition\r\n */\r\ntypedef enum {\r\n    UART_TX_OVERFLOW,  /*!< UART tx fifo overflow */\r\n    UART_TX_UNDERFLOW, /*!< UART tx fifo underflow */\r\n    UART_RX_OVERFLOW,  /*!< UART rx fifo overflow */\r\n    UART_RX_UNDERFLOW, /*!< UART rx fifo underflow */\r\n} UART_Overflow_Type;\r\n\r\n/**\r\n *  @brief UART configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint32_t uartClk;                        /*!< Uart module clock */\r\n    uint32_t baudRate;                       /*!< Uart baudrate */\r\n    UART_DataBits_Type dataBits;             /*!< Uart frame length of data bit */\r\n    UART_StopBits_Type stopBits;             /*!< Uart frame length of stop bit */\r\n    UART_Parity_Type parity;                 /*!< Uart parity check type */\r\n    BL_Fun_Type ctsFlowControl;              /*!< Enable or disable tx CTS flow control */\r\n    BL_Fun_Type rxDeglitch;                  /*!< Enable or disable rx input de-glitch function */\r\n    BL_Fun_Type rtsSoftwareControl;          /*!< Enable or disable rx RTS output SW control mode */\r\n    BL_Fun_Type txSoftwareControl;           /*!< Enable or disable tx output SW control mode */\r\n    BL_Fun_Type txLinMode;                   /*!< Enable or disable tx LIN mode,LIN header will be sent before sending data */\r\n    BL_Fun_Type rxLinMode;                   /*!< Enable or disable rx LIN mode,LIN header will be required and checked before receiving data */\r\n    uint8_t txBreakBitCnt;                   /*!< Uart tx break bit count,additional 8 bit times will be added since LIN break field requires at\r\n                                                 least 13 bit times */\r\n    UART_ByteBitInverse_Type byteBitInverse; /*!< Uart each data byte is send out LSB-first or MSB-first */\r\n} UART_CFG_Type;\r\n\r\n/**\r\n *  @brief UART FIFO configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint8_t txFifoDmaThreshold;  /*!< TX FIFO threshold, dma tx request will not be asserted if tx fifo count is less than this value */\r\n    uint8_t rxFifoDmaThreshold;  /*!< RX FIFO threshold, dma rx request will not be asserted if rx fifo count is less than this value */\r\n    BL_Fun_Type txFifoDmaEnable; /*!< Enable or disable tx dma req/ack interface */\r\n    BL_Fun_Type rxFifoDmaEnable; /*!< Enable or disable rx dma req/ack interface */\r\n} UART_FifoCfg_Type;\r\n\r\n/**\r\n *  @brief UART infrared configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type txIrEnable;  /*!< Enable or disable uart tx ir mode */\r\n    BL_Fun_Type rxIrEnable;  /*!< Enable or disable uart rx ir mode */\r\n    BL_Fun_Type txIrInverse; /*!< Enable or disable inverse signal of uart tx output in ir mode */\r\n    BL_Fun_Type rxIrInverse; /*!< Enable or disable inverse signal of uart rx input in ir mode */\r\n    uint16_t txIrPulseStart; /*!< Set start position of uart tx ir pulse */\r\n    uint16_t txIrPulseStop;  /*!< Set stop position of uart tx ir pulse */\r\n    uint16_t rxIrPulseStart; /*!< Set start position of uart rx pulse recovered from ir signal */\r\n} UART_IrCfg_Type;\r\n\r\n/*@} end of group UART_Public_Types */\r\n\r\n/** @defgroup  UART_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  UART_ID_TYPE\r\n *  @{\r\n */\r\n#define IS_UART_ID_TYPE(type) (((type) == UART0_ID) || \\\r\n                               ((type) == UART1_ID) || \\\r\n                               ((type) == UART_ID_MAX))\r\n\r\n/** @defgroup  UART_DIRECTION_TYPE\r\n *  @{\r\n */\r\n#define IS_UART_DIRECTION_TYPE(type) (((type) == UART_TX) || \\\r\n                                      ((type) == UART_RX) || \\\r\n                                      ((type) == UART_TXRX))\r\n\r\n/** @defgroup  UART_PARITY_TYPE\r\n *  @{\r\n */\r\n#define IS_UART_PARITY_TYPE(type) (((type) == UART_PARITY_NONE) || \\\r\n                                   ((type) == UART_PARITY_ODD) ||  \\\r\n                                   ((type) == UART_PARITY_EVEN))\r\n\r\n/** @defgroup  UART_DATABITS_TYPE\r\n *  @{\r\n */\r\n#define IS_UART_DATABITS_TYPE(type) (((type) == UART_DATABITS_5) || \\\r\n                                     ((type) == UART_DATABITS_6) || \\\r\n                                     ((type) == UART_DATABITS_7) || \\\r\n                                     ((type) == UART_DATABITS_8))\r\n\r\n/** @defgroup  UART_STOPBITS_TYPE\r\n *  @{\r\n */\r\n#define IS_UART_STOPBITS_TYPE(type) (((type) == UART_STOPBITS_1) ||   \\\r\n                                     ((type) == UART_STOPBITS_1_5) || \\\r\n                                     ((type) == UART_STOPBITS_2))\r\n\r\n/** @defgroup  UART_BYTEBITINVERSE_TYPE\r\n *  @{\r\n */\r\n#define IS_UART_BYTEBITINVERSE_TYPE(type) (((type) == UART_LSB_FIRST) || \\\r\n                                           ((type) == UART_MSB_FIRST))\r\n\r\n/** @defgroup  UART_AUTOBAUDDETECTION_TYPE\r\n *  @{\r\n */\r\n#define IS_UART_AUTOBAUDDETECTION_TYPE(type) (((type) == UART_AUTOBAUD_0X55) || \\\r\n                                              ((type) == UART_AUTOBAUD_STARTBIT))\r\n\r\n/** @defgroup  UART_INT_TYPE\r\n *  @{\r\n */\r\n#define IS_UART_INT_TYPE(type) (((type) == UART_INT_TX_END) ||      \\\r\n                                ((type) == UART_INT_RX_END) ||      \\\r\n                                ((type) == UART_INT_TX_FIFO_REQ) || \\\r\n                                ((type) == UART_INT_RX_FIFO_REQ) || \\\r\n                                ((type) == UART_INT_RTO) ||         \\\r\n                                ((type) == UART_INT_PCE) ||         \\\r\n                                ((type) == UART_INT_TX_FER) ||      \\\r\n                                ((type) == UART_INT_RX_FER) ||      \\\r\n                                ((type) == UART_INT_LSE) ||         \\\r\n                                ((type) == UART_INT_ALL))\r\n\r\n/** @defgroup  UART_OVERFLOW_TYPE\r\n *  @{\r\n */\r\n#define IS_UART_OVERFLOW_TYPE(type) (((type) == UART_TX_OVERFLOW) ||  \\\r\n                                     ((type) == UART_TX_UNDERFLOW) || \\\r\n                                     ((type) == UART_RX_OVERFLOW) ||  \\\r\n                                     ((type) == UART_RX_UNDERFLOW))\r\n\r\n/*@} end of group UART_Public_Constants */\r\n\r\n/** @defgroup  UART_Public_Macros\r\n *  @{\r\n */\r\n#define UART_RX_FIFO_SIZE         128\r\n#define UART_TX_FIFO_SIZE         128\r\n#define UART_DEFAULT_RECV_TIMEOUT 80\r\n\r\n/*@} end of group UART_Public_Macros */\r\n\r\n/** @defgroup  UART_Public_Functions\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief UART Functions\r\n */\r\n#if (!defined BFLB_USE_HAL_DRIVER) || (defined BFLB_EFLASH_LOADER)\r\nvoid UART0_IRQHandler(void);\r\nvoid UART1_IRQHandler(void);\r\n#endif\r\nBL_Err_Type UART_Init(UART_ID_Type uartId, UART_CFG_Type *uartCfg);\r\nBL_Err_Type UART_DeInit(UART_ID_Type uartId);\r\nBL_Err_Type UART_FifoConfig(UART_ID_Type uartId, UART_FifoCfg_Type *fifoCfg);\r\nBL_Err_Type UART_IrConfig(UART_ID_Type uartId, UART_IrCfg_Type *irCfg);\r\nBL_Err_Type UART_Enable(UART_ID_Type uartId, UART_Direction_Type direct);\r\nBL_Err_Type UART_Disable(UART_ID_Type uartId, UART_Direction_Type direct);\r\nBL_Err_Type UART_SetTxDataLength(UART_ID_Type uartId, uint16_t length);\r\nBL_Err_Type UART_SetRxDataLength(UART_ID_Type uartId, uint16_t length);\r\nBL_Err_Type UART_SetRxTimeoutValue(UART_ID_Type uartId, uint8_t time);\r\nBL_Err_Type UART_SetDeglitchCount(UART_ID_Type uartId, uint8_t deglitchCnt);\r\nBL_Err_Type UART_ApplyAbrResult(UART_ID_Type uartId, UART_AutoBaudDetection_Type autoBaudDet);\r\nBL_Err_Type UART_SetRtsValue(UART_ID_Type uartId);\r\nBL_Err_Type UART_ClrRtsValue(UART_ID_Type uartId);\r\nBL_Err_Type UART_SetTxValue(UART_ID_Type uartId);\r\nBL_Err_Type UART_ClrTxValue(UART_ID_Type uartId);\r\nBL_Err_Type UART_TxFreeRun(UART_ID_Type uartId, BL_Fun_Type txFreeRun);\r\nBL_Err_Type UART_AutoBaudDetection(UART_ID_Type uartId, BL_Fun_Type autoBaud);\r\nBL_Err_Type UART_TxFifoClear(UART_ID_Type uartId);\r\nBL_Err_Type UART_RxFifoClear(UART_ID_Type uartId);\r\nBL_Err_Type UART_IntMask(UART_ID_Type uartId, UART_INT_Type intType, BL_Mask_Type intMask);\r\nBL_Err_Type UART_IntClear(UART_ID_Type uartId, UART_INT_Type intType);\r\nBL_Err_Type UART_Int_Callback_Install(UART_ID_Type uartId, UART_INT_Type intType, intCallback_Type *cbFun);\r\nBL_Err_Type UART_SendData(UART_ID_Type uartId, uint8_t *data, uint32_t len);\r\nBL_Err_Type UART_SendDataBlock(UART_ID_Type uartId, uint8_t *data, uint32_t len);\r\nuint32_t UART_ReceiveData(UART_ID_Type uartId, uint8_t *data, uint32_t maxLen);\r\nuint16_t UART_GetAutoBaudCount(UART_ID_Type uartId, UART_AutoBaudDetection_Type autoBaudDet);\r\nuint8_t UART_GetTxFifoCount(UART_ID_Type uartId);\r\nuint8_t UART_GetRxFifoCount(UART_ID_Type uartId);\r\nBL_Sts_Type UART_GetIntStatus(UART_ID_Type uartId, UART_INT_Type intType);\r\nBL_Sts_Type UART_GetTxBusBusyStatus(UART_ID_Type uartId);\r\nBL_Sts_Type UART_GetRxBusBusyStatus(UART_ID_Type uartId);\r\nBL_Sts_Type UART_GetOverflowStatus(UART_ID_Type uartId, UART_Overflow_Type overflow);\r\n\r\n/*@} end of group UART_Public_Functions */\r\n\r\n/*@} end of group UART */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_UART_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_usb.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_usb.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_USB_H__\r\n#define __BL702_USB_H__\r\n\r\n#include \"usb_reg.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  USB\r\n *  @{\r\n */\r\n\r\n/** @defgroup  USB_Public_Types\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief USB end point ID\r\n */\r\ntypedef enum {\r\n    EP_ID0 = 0, /*!< USB end point 0 */\r\n    EP_ID1,     /*!< USB end point 1 */\r\n    EP_ID2,     /*!< USB end point 2 */\r\n    EP_ID3,     /*!< USB end point 3 */\r\n    EP_ID4,     /*!< USB end point 4 */\r\n    EP_ID5,     /*!< USB end point 5 */\r\n    EP_ID6,     /*!< USB end point 6 */\r\n    EP_ID7,     /*!< USB end point 7 */\r\n} USB_EP_ID;\r\n\r\n/**\r\n *  @brief USB end point type\r\n */\r\ntypedef enum {\r\n    EP_INT = 0,  /*!< interrupt transfer ep */\r\n    EP_ISO = 2,  /*!< isochronous transfer ep */\r\n    EP_BULK = 4, /*!< bulk transfer ep */\r\n    EP_CTRL = 5, /*!< control transfer ep */\r\n} EP_XFER_Type;\r\n\r\n/**\r\n *  @brief USB end point transfer directions\r\n */\r\ntypedef enum {\r\n    EP_DISABLED = 0, /*!< end point disabled */\r\n    EP_IN = 1,       /*!< IN end point,device to host */\r\n    EP_OUT = 2,      /*!< OUT end point ,host to device */\r\n} EP_XFER_DIR;\r\n\r\ntypedef enum {\r\n    USB_INT_SOF = 0,\r\n    USB_INT_RESET,\r\n    USB_INT_VBUS_TGL,\r\n    USB_INT_GET_DCT_CMD,\r\n    USB_INT_EP0_SETUP_CMD,\r\n    USB_INT_EP0_SETUP_DONE,\r\n    USB_INT_EP0_IN_CMD,\r\n    USB_INT_EP0_IN_DONE,\r\n    USB_INT_EP0_OUT_CMD,\r\n    USB_INT_EP0_OUT_DONE,\r\n    USB_INT_EP1_CMD,\r\n    USB_INT_EP1_DONE,\r\n    USB_INT_EP2_CMD,\r\n    USB_INT_EP2_DONE,\r\n    USB_INT_EP3_CMD,\r\n    USB_INT_EP3_DONE,\r\n    USB_INT_EP4_CMD,\r\n    USB_INT_EP4_DONE,\r\n    USB_INT_EP5_CMD,\r\n    USB_INT_EP5_DONE,\r\n    USB_INT_EP6_CMD,\r\n    USB_INT_EP6_DONE,\r\n    USB_INT_EP7_CMD,\r\n    USB_INT_EP7_DONE,\r\n    USB_INT_RESET_END = 27,\r\n    USB_INT_LPM_WAKEUP = 28,\r\n    USB_INT_LPM_PACKET = 29,\r\n    USB_INT_LOST_SOF_3_TIMES = 30,\r\n    USB_INT_ERROR = 31,\r\n    USB_INT_ALL = 32, /* special */\r\n} USB_INT_Type;\r\n\r\ntypedef enum {\r\n    USB_FIFO_EMPTY = 0,\r\n    USB_FIFO_FULL,\r\n} USB_FIFO_STATUS_Type;\r\n\r\ntypedef enum {\r\n    USB_FIFO_ERROR_OVERFLOW = 0,\r\n    USB_FIFO_ERROR_UNDERFLOW,\r\n} USB_FIFO_ERROR_FLAG_Type;\r\n\r\ntypedef enum {\r\n    USB_EP_STATUS_ACK = 0,\r\n    USB_EP_STATUS_NACK,\r\n    USB_EP_STATUS_STALL,\r\n    USB_EP_STATUS_NSTALL,\r\n} USB_EP_STATUS_Type;\r\n\r\ntypedef enum {\r\n    USB_LPM_DEFAULT_RESP_ACK = 0,\r\n    USB_LPM_DEFAULT_RESP_NACK,\r\n    USB_LPM_DEFAULT_RESP_STALL,\r\n    USB_LPM_DEFAULT_RESP_NYET,\r\n} USB_LPM_DEFAULT_RESP_Type;\r\n\r\ntypedef enum {\r\n    USB_ERROR_UTMI_RX = 0,\r\n    USB_ERROR_XFER_TO,\r\n    USB_ERROR_IVLD_EP,\r\n    USB_ERROR_PID_SEQ,\r\n    USB_ERROR_PID_CKS,\r\n    USB_ERROR_CRC5,\r\n    USB_ERROR_CRC16,\r\n} USB_ERROR_Type;\r\n\r\n/**\r\n *  @brief USB configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    BL_Fun_Type EnumOutEn;             /*!< EP0 IN direction enable or disable */\r\n    BL_Fun_Type EnumInEn;              /*!< EP0 OUT direction enable or disable */\r\n    uint8_t EnumMaxPacketSize;         /*!< EP0 max packet size, only valid when SoftwareCtrl is set */\r\n    uint8_t DeviceAddress;             /*!< Device(EP0) address, only valid when SoftwareCtrl is set */\r\n    BL_Fun_Type SoftwareCtrl;          /*!< EP0 software control enable */\r\n    BL_Fun_Type RomBaseDescriptorUsed; /*!< Enable signal of ROM-based descriptors (don't care if SoftwareCtrl is set) */\r\n} USB_Config_Type;\r\n\r\n/**\r\n *  @brief end point configuration structure type definition\r\n */\r\ntypedef struct\r\n{\r\n    uint16_t EPMaxPacketSize; /*!< Endpoint max packet size */\r\n    EP_XFER_DIR dir;          /*!< Endpoint direction */\r\n    EP_XFER_Type type;        /*!< Endpoint type */\r\n} EP_Config_Type;\r\n\r\ntypedef struct\r\n{\r\n    uint32_t cr_ep_size     : 9;\r\n    uint32_t cr_ep_dir      : 2;\r\n    uint32_t cr_ep_type     : 3;\r\n    uint32_t cr_ep_stall    : 1;\r\n    uint32_t cr_ep_nack     : 1;\r\n    uint32_t cr_ep_rdy      : 1;\r\n    uint32_t reserved_17_31 : 15;\r\n} usb_reg_epx_config_t;\r\n\r\ntypedef struct\r\n{\r\n    uint32_t ep_dma_tx_en         : 1;\r\n    uint32_t ep_dma_rx_en         : 1;\r\n    uint32_t ep_tx_fifo_clr       : 1;\r\n    uint32_t ep_rx_fifo_clr       : 1;\r\n    uint32_t ep_tx_fifo_overflow  : 1;\r\n    uint32_t ep_tx_fifo_underflow : 1;\r\n    uint32_t ep_rx_fifo_overflow  : 1;\r\n    uint32_t ep_rx_fifo_underflow : 1;\r\n    uint32_t reserved_8_31        : 24;\r\n} usb_reg_epx_fifo_config_t;\r\n\r\ntypedef struct\r\n{\r\n    uint32_t ep_tx_fifo_cnt   : 7;\r\n    uint32_t reserved_7_13    : 7;\r\n    uint32_t ep_tx_fifo_empty : 1;\r\n    uint32_t ep_tx_fifo_full  : 1;\r\n    uint32_t ep_rx_fifo_cnt   : 7;\r\n    uint32_t reserved_23_29   : 7;\r\n    uint32_t ep_rx_fifo_empty : 1;\r\n    uint32_t ep_rx_fifo_full  : 1;\r\n} usb_reg_epx_fifo_status_t;\r\n\r\ntypedef struct\r\n{\r\n    uint32_t fifo          : 8;\r\n    uint32_t reserved_8_31 : 24;\r\n} usb_reg_epx_fifo_t;\r\n\r\n/*@} end of group USB_Public_Types */\r\n\r\n/** @defgroup  USB_Public_Constants\r\n *  @{\r\n */\r\n\r\n/** @defgroup  USB_EP_ID\r\n *  @{\r\n */\r\n#define IS_USB_EP_ID(type) (((type) == EP_ID0) || \\\r\n                            ((type) == EP_ID1) || \\\r\n                            ((type) == EP_ID2) || \\\r\n                            ((type) == EP_ID3) || \\\r\n                            ((type) == EP_ID4) || \\\r\n                            ((type) == EP_ID5) || \\\r\n                            ((type) == EP_ID6) || \\\r\n                            ((type) == EP_ID7))\r\n\r\n/** @defgroup  EP_XFER_TYPE\r\n *  @{\r\n */\r\n#define IS_EP_XFER_TYPE(type) (((type) == EP_INT) ||  \\\r\n                               ((type) == EP_ISO) ||  \\\r\n                               ((type) == EP_CTRL) || \\\r\n                               ((type) == EP_BULK))\r\n\r\n/** @defgroup  EP_XFER_DIR\r\n *  @{\r\n */\r\n#define IS_EP_XFER_DIR(type) (((type) == EP_DISABLED) || \\\r\n                              ((type) == EP_IN) ||       \\\r\n                              ((type) == EP_OUT))\r\n\r\n/*@} end of group USB_Public_Constants */\r\n\r\n/** @defgroup  USB_Public_Macros\r\n *  @{\r\n */\r\n#define USB_INT_TYPE_SOF              0x00000001\r\n#define USB_INT_TYPE_RESET            0x00000002\r\n#define USB_INT_TYPE_GET_DCT_CMD      0x00000008\r\n#define USB_INT_TYPE_EP0_SETUP_CMD    0x00000010\r\n#define USB_INT_TYPE_EP0_SETUP_DONE   0x00000020\r\n#define USB_INT_TYPE_EP0_IN_CMD       0x00000040\r\n#define USB_INT_TYPE_EP0_IN_DONE      0x00000080\r\n#define USB_INT_TYPE_EP0_OUT_CMD      0x00000100\r\n#define USB_INT_TYPE_EP0_OUT_DONE     0x00000200\r\n#define USB_INT_TYPE_EP1_CMD          0x00000400\r\n#define USB_INT_TYPE_EP1_DONE         0x00000800\r\n#define USB_INT_TYPE_EP2_CMD          0x00001000\r\n#define USB_INT_TYPE_EP2_DONE         0x00002000\r\n#define USB_INT_TYPE_EP3_CMD          0x00004000\r\n#define USB_INT_TYPE_EP3_DONE         0x00008000\r\n#define USB_INT_TYPE_EP4_CMD          0x00010000\r\n#define USB_INT_TYPE_EP4_DONE         0x00020000\r\n#define USB_INT_TYPE_EP5_CMD          0x00040000\r\n#define USB_INT_TYPE_EP5_DONE         0x00080000\r\n#define USB_INT_TYPE_EP6_CMD          0x00100000\r\n#define USB_INT_TYPE_EP6_DONE         0x00200000\r\n#define USB_INT_TYPE_EP7_CMD          0x00400000\r\n#define USB_INT_TYPE_EP7_DONE         0x00800000\r\n#define USB_INT_TYPE_RESET_END        0x08000000\r\n#define USB_INT_TYPE_LPM_WAKEUP       0x10000000\r\n#define USB_INT_TYPE_LPM_PACKET       0x20000000\r\n#define USB_INT_TYPE_LOST_SOF_3_TIMES 0x40000000\r\n#define USB_INT_TYPE_ERROR            0x80000000\r\n#define USB_INT_TYPE_ALL              (USB_INT_TYPE_SOF | \\\r\n                          USB_INT_TYPE_RESET |            \\\r\n                          USB_INT_TYPE_GET_DCT_CMD |      \\\r\n                          USB_INT_TYPE_EP0_SETUP_CMD |    \\\r\n                          USB_INT_TYPE_EP0_SETUP_DONE |   \\\r\n                          USB_INT_TYPE_EP0_IN_CMD |       \\\r\n                          USB_INT_TYPE_EP0_IN_DONE |      \\\r\n                          USB_INT_TYPE_EP0_OUT_CMD |      \\\r\n                          USB_INT_TYPE_EP0_OUT_DONE |     \\\r\n                          USB_INT_TYPE_EP1_CMD |          \\\r\n                          USB_INT_TYPE_EP1_DONE |         \\\r\n                          USB_INT_TYPE_EP2_CMD |          \\\r\n                          USB_INT_TYPE_EP2_DONE |         \\\r\n                          USB_INT_TYPE_EP3_CMD |          \\\r\n                          USB_INT_TYPE_EP3_DONE |         \\\r\n                          USB_INT_TYPE_EP4_CMD |          \\\r\n                          USB_INT_TYPE_EP4_DONE |         \\\r\n                          USB_INT_TYPE_EP5_CMD |          \\\r\n                          USB_INT_TYPE_EP5_DONE |         \\\r\n                          USB_INT_TYPE_EP6_CMD |          \\\r\n                          USB_INT_TYPE_EP6_DONE |         \\\r\n                          USB_INT_TYPE_EP7_CMD |          \\\r\n                          USB_INT_TYPE_EP7_DONE |         \\\r\n                          USB_INT_TYPE_RESET_END |        \\\r\n                          USB_INT_TYPE_LPM_WAKEUP |       \\\r\n                          USB_INT_TYPE_LPM_PACKET |       \\\r\n                          USB_INT_TYPE_LOST_SOF_3_TIMES | \\\r\n                          USB_INT_TYPE_ERROR)\r\n\r\n#define USB_EP_TX_FIFO_EMPTY    0x00004000\r\n#define USB_EP_TX_FIFO_FULL     0x00008000\r\n#define USB_EP_RX_FIFO_EMPTY    0x40000000\r\n#define USB_EP_RX_FIFO_FULL     0x80000000\r\n#define USB_EP_FIFO_STATUS_MASK (USB_EP_TX_FIFO_EMPTY | \\\r\n                                 USB_EP_TX_FIFO_FULL |  \\\r\n                                 USB_EP_RX_FIFO_EMPTY | \\\r\n                                 USB_EP_RX_FIFO_FULL)\r\n#define USB_EP_TX_FIFO_OVERFLOW  0x00000010\r\n#define USB_EP_TX_FIFO_UNDERFLOW 0x00000020\r\n#define USB_EP_RX_FIFO_OVERFLOW  0x00000040\r\n#define USB_EP_RX_FIFO_UNDERLOW  0x00000080\r\n#define USB_EP_FIFO_ERROR_MASK   (USB_EP_TX_FIFO_OVERFLOW | \\\r\n                                USB_EP_TX_FIFO_UNDERFLOW |  \\\r\n                                USB_EP_RX_FIFO_OVERFLOW |   \\\r\n                                USB_EP_RX_FIFO_UNDERLOW)\r\n\r\n#define EP_ID_MAX 8\r\n\r\n/*@} end of group USB_Public_Macros */\r\n\r\n/** @defgroup  USB_Public_Functions\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief USB Functions\r\n */\r\n\r\n/*----------*/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid USB_IRQHandler(void);\r\n#endif\r\n/*----------*/\r\nBL_Err_Type USB_Enable(void);\r\nBL_Err_Type USB_Disable(void);\r\nBL_Err_Type USB_Set_Config(BL_Fun_Type enable, USB_Config_Type *usbCfg);\r\nBL_Err_Type USB_Set_Device_Addr(uint8_t addr);\r\nuint8_t USB_Get_Device_Addr(void);\r\n/*----------*/\r\nBL_Err_Type USB_Set_EPx_Xfer_Size(USB_EP_ID epId, uint8_t size);\r\nBL_Err_Type USB_Set_EPx_IN_Busy(USB_EP_ID epId);\r\nBL_Err_Type USB_Set_EPx_IN_Stall(USB_EP_ID epId);\r\nBL_Err_Type USB_Set_EPx_OUT_Busy(USB_EP_ID epId);\r\nBL_Err_Type USB_Set_EPx_OUT_Stall(USB_EP_ID epId);\r\nBL_Err_Type USB_Set_EPx_Rdy(USB_EP_ID epId);\r\nBL_Sts_Type USB_Is_EPx_RDY_Free(USB_EP_ID epId);\r\nBL_Err_Type USB_Set_EPx_STALL(USB_EP_ID epId);\r\nBL_Err_Type USB_Clr_EPx_STALL(USB_EP_ID epId);\r\nBL_Err_Type USB_Set_EPx_Busy(USB_EP_ID epId);\r\nBL_Err_Type USB_Set_EPx_Status(USB_EP_ID epId, USB_EP_STATUS_Type sts);\r\nUSB_EP_STATUS_Type USB_Get_EPx_Status(USB_EP_ID epId);\r\n/*----------*/\r\nBL_Err_Type USB_IntEn(USB_INT_Type intType, uint8_t enable);\r\nBL_Err_Type USB_IntMask(USB_INT_Type intType, BL_Mask_Type intMask);\r\nBL_Sts_Type USB_Get_IntStatus(USB_INT_Type intType);\r\nBL_Err_Type USB_Clr_IntStatus(USB_INT_Type intType);\r\nBL_Err_Type USB_Clr_EPx_IntStatus(USB_EP_ID epId);\r\n/*----------*/\r\nuint16_t USB_Get_Frame_Num(void);\r\n/*----------*/\r\nBL_Err_Type USB_Set_EPx_Config(USB_EP_ID epId, EP_Config_Type *epCfg);\r\nBL_Err_Type USB_Set_EPx_Type(USB_EP_ID epId, EP_XFER_Type type);\r\nEP_XFER_Type USB_Get_EPx_Type(USB_EP_ID epId);\r\nBL_Err_Type USB_Set_EPx_Dir(USB_EP_ID epId, EP_XFER_DIR dir);\r\nEP_XFER_DIR USB_Get_EPx_Dir(USB_EP_ID epId);\r\nBL_Err_Type USB_Set_EPx_Size(USB_EP_ID epId, uint32_t size);\r\n/*----------*/\r\nBL_Sts_Type USB_Get_EPx_TX_FIFO_Errors(USB_EP_ID epId, USB_FIFO_ERROR_FLAG_Type errFlag);\r\nBL_Sts_Type USB_Get_EPx_RX_FIFO_Errors(USB_EP_ID epId, USB_FIFO_ERROR_FLAG_Type errFlag);\r\nBL_Err_Type USB_Clr_EPx_TX_FIFO_Errors(USB_EP_ID epId);\r\nBL_Err_Type USB_Clr_EPx_RX_FIFO_Errors(USB_EP_ID epId);\r\n/*----------*/\r\nBL_Err_Type USB_EPx_Write_Data_To_FIFO(USB_EP_ID epId, uint8_t *pData, uint16_t len);\r\nBL_Err_Type USB_EPx_Read_Data_From_FIFO(USB_EP_ID epId, uint8_t *pBuff, uint16_t len);\r\n/*----------*/\r\nBL_Err_Type USB_Set_EPx_TX_DMA_Interface_Config(USB_EP_ID epId, BL_Fun_Type newState);\r\nBL_Err_Type USB_Set_EPx_RX_DMA_Interface_Config(USB_EP_ID epId, BL_Fun_Type newState);\r\nBL_Err_Type USB_EPx_Write_Data_To_FIFO_DMA(USB_EP_ID epId, uint8_t *pData, uint16_t len);\r\nBL_Err_Type USB_EPx_Read_Data_From_FIFO_DMA(USB_EP_ID epId, uint8_t *pBuff, uint16_t len);\r\n/*----------*/\r\nuint16_t USB_Get_EPx_TX_FIFO_CNT(USB_EP_ID epId);\r\nuint16_t USB_Get_EPx_RX_FIFO_CNT(USB_EP_ID epId);\r\nBL_Sts_Type USB_Get_EPx_TX_FIFO_Status(USB_EP_ID epId, USB_FIFO_STATUS_Type sts);\r\nBL_Sts_Type USB_Get_EPx_RX_FIFO_Status(USB_EP_ID epId, USB_FIFO_STATUS_Type sts);\r\n/*----------*/\r\nBL_Err_Type USB_Set_Internal_PullUp_Config(BL_Fun_Type newState);\r\n/*----------*/\r\nBL_Sts_Type USB_Get_LPM_Status(void);\r\nuint16_t USB_Get_LPM_Packet_Attr(void);\r\nBL_Err_Type USB_Set_LPM_Default_Response(USB_LPM_DEFAULT_RESP_Type defaultResp);\r\nBL_Err_Type USB_LPM_Enable(void);\r\nBL_Err_Type USB_LPM_Disable(void);\r\n/*----------*/\r\nBL_Err_Type USB_Device_Output_K_State(uint16_t stateWidth);\r\n/*----------*/\r\nuint8_t USB_Get_Current_Packet_PID(void);\r\nuint8_t USB_Get_Current_Packet_EP(void);\r\n/*----------*/\r\nBL_Sts_Type USB_Get_Error_Status(USB_ERROR_Type err);\r\nBL_Err_Type USB_Clr_Error_Status(USB_ERROR_Type err);\r\n/*----------*/\r\n\r\n/*@} end of group USB_Public_Functions */\r\n\r\n/*@} end of group USB */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_USB_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_xip_sflash.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_xip_sflash.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_XIP_SFLASH_H__\r\n#define __BL702_XIP_SFLASH_H__\r\n\r\n#include \"bl702_common.h\"\r\n#include \"bl702_sflash.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  XIP_SFLASH\r\n *  @{\r\n */\r\n\r\n/** @defgroup  XIP_SFLASH_Public_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group XIP_SFLASH_Public_Types */\r\n\r\n/** @defgroup  XIP_SFLASH_Public_Constants\r\n *  @{\r\n */\r\n\r\n/*@} end of group XIP_SFLASH_Public_Constants */\r\n\r\n/** @defgroup  XIP_SFLASH_Public_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group XIP_SFLASH_Public_Macros */\r\n\r\n/** @defgroup  XIP_SFLASH_Public_Functions\r\n *  @{\r\n */\r\nvoid XIP_SFlash_Opt_Enter(void);\r\nvoid XIP_SFlash_Opt_Exit(void);\r\nBL_Err_Type XIP_SFlash_State_Save(SPI_Flash_Cfg_Type *pFlashCfg, uint32_t *offset);\r\nBL_Err_Type XIP_SFlash_State_Restore(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t offset);\r\nBL_Err_Type XIP_SFlash_Erase_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode,\r\n                                       uint32_t startaddr, uint32_t endaddr);\r\nBL_Err_Type XIP_SFlash_Write_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr,\r\n                                       uint8_t *data, uint32_t len);\r\nBL_Err_Type XIP_SFlash_Read_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr,\r\n                                      uint8_t *data, uint32_t len);\r\nBL_Err_Type XIP_SFlash_GetJedecId_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode,\r\n                                            uint8_t *data);\r\nBL_Err_Type XIP_SFlash_GetDeviceId_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode,\r\n                                             uint8_t *data);\r\nBL_Err_Type XIP_SFlash_GetUniqueId_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode,\r\n                                             uint8_t *data, uint8_t idLen);\r\nBL_Err_Type XIP_SFlash_Read_Via_Cache_Need_Lock(uint32_t addr, uint8_t *data, uint32_t len);\r\n\r\n/*@} end of group XIP_SFLASH_Public_Functions */\r\n\r\n/*@} end of group XIP_SFLASH */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_XIP_SFLASH_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_xip_sflash_ext.h",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    bl702_xip_sflash_ext.h\r\n  * @version V1.0\r\n  * @date\r\n  * @brief   This file is the standard driver header file\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n#ifndef __BL702_XIP_SFLASH_EXT_H__\r\n#define __BL702_XIP_SFLASH_EXT_H__\r\n\r\n#include \"bl702_common.h\"\r\n#include \"bl702_sflash.h\"\r\n#include \"bl702_xip_sflash.h\"\r\n#include \"bl702_sflash.h\"\r\n#include \"bl702_sflash_ext.h\"\r\n#include \"bl702_sf_cfg.h\"\r\n#include \"bl702_sf_cfg_ext.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  XIP_SFLASH\r\n *  @{\r\n */\r\n\r\n/** @defgroup  XIP_SFLASH_EXT_Public_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group XIP_SFLASH_EXT_Public_Types */\r\n\r\n/** @defgroup  XIP_SFLASH_EXT_Public_Constants\r\n *  @{\r\n */\r\n\r\n/*@} end of group XIP_SFLASH_EXT_Public_Constants */\r\n\r\n/** @defgroup  XIP_SFLASH_EXT_Public_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group XIP_SFLASH_EXT_Public_Macros */\r\n\r\n/** @defgroup  XIP_SFLASH_EXT_Public_Functions\r\n *  @{\r\n */\r\n\r\nBL_Err_Type XIP_SFlash_KH25V40_Write_Protect_Need_Lock(SPI_Flash_Cfg_Type *flashCfg, SFlash_Protect_Kh25v40_Type protect);\r\nBL_Err_Type XIP_SFlash_Clear_Status_Register_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg);\r\n\r\n/*@} end of group XIP_SFLASH_EXT_Public_Functions */\r\n\r\n/*@} end of group XIP_SFLASH */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n\r\n#endif /* __BL702_XIP_SFLASH_EXT_H__ */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_acomp.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_acomp.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_acomp.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  ACOMP\r\n *  @{\r\n */\r\n\r\n/** @defgroup  ACOMP_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group ACOMP_Private_Macros */\r\n\r\n/** @defgroup  ACOMP_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group ACOMP_Private_Types */\r\n\r\n/** @defgroup  ACOMP_Private_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group ACOMP_Private_Variables */\r\n\r\n/** @defgroup  ACOMP_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group ACOMP_Global_Variables */\r\n\r\n/** @defgroup  ACOMP_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group ACOMP_Private_Fun_Declaration */\r\n\r\n/** @defgroup  ACOMP_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group ACOMP_Private_Functions */\r\n\r\n/** @defgroup  ACOMP_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Analog compare init\r\n                                                                                *\r\n                                                                                * @param  acompNo: Compare ID\r\n                                                                                * @param  cfg: Compare consideration pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid AON_ACOMP_Init(AON_ACOMP_ID_Type acompNo, AON_ACOMP_CFG_Type *cfg) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_AON_ACOMP_ID_TYPE(acompNo));\r\n\r\n  if (acompNo == AON_ACOMP0_ID) {\r\n    /* Disable ACOMP first */\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_ACOMP0_CTRL);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, AON_ACOMP0_EN);\r\n    tmpVal = BL_WR_REG(AON_BASE, AON_ACOMP0_CTRL, tmpVal);\r\n\r\n    /* Set ACOMP config */\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_ACOMP0_MUXEN, cfg->muxEn);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_ACOMP0_POS_SEL, cfg->posChanSel);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_ACOMP0_NEG_SEL, cfg->negChanSel);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_ACOMP0_LEVEL_SEL, cfg->levelFactor);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_ACOMP0_BIAS_PROG, cfg->biasProg);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_ACOMP0_HYST_SELP, cfg->hysteresisPosVolt);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_ACOMP0_HYST_SELN, cfg->hysteresisNegVolt);\r\n\r\n    tmpVal = BL_WR_REG(AON_BASE, AON_ACOMP0_CTRL, tmpVal);\r\n\r\n  } else {\r\n    /* Disable ACOMP first */\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_ACOMP1_CTRL);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, AON_ACOMP1_EN);\r\n    tmpVal = BL_WR_REG(AON_BASE, AON_ACOMP1_CTRL, tmpVal);\r\n\r\n    /* Set ACOMP config */\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_ACOMP1_MUXEN, cfg->muxEn);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_ACOMP1_POS_SEL, cfg->posChanSel);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_ACOMP1_NEG_SEL, cfg->negChanSel);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_ACOMP1_LEVEL_SEL, cfg->levelFactor);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_ACOMP1_BIAS_PROG, cfg->biasProg);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_ACOMP1_HYST_SELP, cfg->hysteresisPosVolt);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_ACOMP1_HYST_SELN, cfg->hysteresisNegVolt);\r\n\r\n    tmpVal = BL_WR_REG(AON_BASE, AON_ACOMP1_CTRL, tmpVal);\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Analog compare enable\r\n                                                                                *\r\n                                                                                * @param  acompNo: Compare ID\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid AON_ACOMP_Enable(AON_ACOMP_ID_Type acompNo) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_AON_ACOMP_ID_TYPE(acompNo));\r\n\r\n  if (acompNo == AON_ACOMP0_ID) {\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_ACOMP0_CTRL);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, AON_ACOMP0_EN);\r\n    tmpVal = BL_WR_REG(AON_BASE, AON_ACOMP0_CTRL, tmpVal);\r\n  } else {\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_ACOMP1_CTRL);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, AON_ACOMP1_EN);\r\n    tmpVal = BL_WR_REG(AON_BASE, AON_ACOMP1_CTRL, tmpVal);\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Analog compare enable\r\n                                                                                *\r\n                                                                                * @param  acompNo: Compare ID\r\n                                                                                *\r\n                                                                                * @return SET or RESET\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type AON_ACOMP_Get_Result(AON_ACOMP_ID_Type acompNo) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_AON_ACOMP_ID_TYPE(acompNo));\r\n\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_ACOMP_CTRL);\r\n\r\n  /* Disable ACOMP first */\r\n  if (acompNo == AON_ACOMP0_ID) {\r\n    if (BL_IS_REG_BIT_SET(tmpVal, AON_ACOMP0_OUT_RAW)) {\r\n      return SET;\r\n    } else {\r\n      return RESET;\r\n    }\r\n  } else {\r\n    if (BL_IS_REG_BIT_SET(tmpVal, AON_ACOMP1_OUT_RAW)) {\r\n      return SET;\r\n    } else {\r\n      return RESET;\r\n    }\r\n  }\r\n}\r\n\r\n/*@} end of group ACOMP_Public_Functions */\r\n\r\n/*@} end of group ACOMP */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_adc.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_adc.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_adc.h\"\r\n#include \"bl702_ef_ctrl.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  ADC\r\n *  @{\r\n */\r\n\r\n/** @defgroup  ADC_Private_Macros\r\n *  @{\r\n */\r\n#undef MSG\r\n#define MSG(...)\r\n#define AON_CLK_SET_DUMMY_WAIT                                                                                                                                                                         \\\r\n  {                                                                                                                                                                                                    \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n  }\r\n#define ADC_RESTART_DUMMY_WAIT BL702_Delay_US(100)\r\n\r\n/*@} end of group ADC_Private_Macros */\r\n\r\n/** @defgroup  ADC_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group ADC_Private_Types */\r\n\r\n/** @defgroup  ADC_Private_Variables\r\n *  @{\r\n */\r\nstatic intCallback_Type *adcIntCbfArra[ADC_INT_ALL] = {NULL};\r\nADC_Gain_Coeff_Type      adcGainCoeffCal            = {\r\n                    .adcGainCoeffEnable = DISABLE,\r\n                    .adcgainCoeffVal    = 0,\r\n                    .coe                = 1,\r\n};\r\n\r\n/*@} end of group ADC_Private_Variables */\r\n\r\n/** @defgroup  ADC_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group ADC_Global_Variables */\r\n\r\n/** @defgroup  ADC_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group ADC_Private_Fun_Declaration */\r\n\r\n/** @defgroup  ADC_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group ADC_Private_Functions */\r\n\r\n/** @defgroup  ADC_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  Software reset the whole ADC\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_Reset(void) {\r\n  uint32_t regCmd;\r\n\r\n  /* reset ADC */\r\n  regCmd = BL_RD_REG(AON_BASE, AON_GPADC_REG_CMD);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CMD, BL_SET_REG_BIT(regCmd, AON_GPADC_SOFT_RST));\r\n  AON_CLK_SET_DUMMY_WAIT;\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CMD, BL_CLR_REG_BIT(regCmd, AON_GPADC_SOFT_RST));\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC glable enable\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CMD);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_GLOBAL_EN);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CMD, tmpVal);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC glable disable\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CMD);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_GLOBAL_EN);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CMD, tmpVal);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC normal mode init\r\n *\r\n * @param  cfg: ADC normal mode configuration\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_Init(ADC_CFG_Type *cfg) {\r\n  uint32_t regCfg1;\r\n  uint32_t regCfg2;\r\n  uint32_t regCalib;\r\n\r\n  CHECK_PARAM(IS_ADC_V18_SEL_TYPE(cfg->v18Sel));\r\n  CHECK_PARAM(IS_ADC_V11_SEL_TYPE(cfg->v11Sel));\r\n  CHECK_PARAM(IS_ADC_CLK_TYPE(cfg->clkDiv));\r\n  CHECK_PARAM(IS_ADC_PGA_GAIN_TYPE(cfg->gain1));\r\n  CHECK_PARAM(IS_ADC_PGA_GAIN_TYPE(cfg->gain2));\r\n  CHECK_PARAM(IS_ADC_CHOP_MOD_TYPE(cfg->chopMode));\r\n  CHECK_PARAM(IS_ADC_BIAS_SEL_TYPE(cfg->biasSel));\r\n  CHECK_PARAM(IS_ADC_PGA_VCM_TYPE(cfg->vcm));\r\n  CHECK_PARAM(IS_ADC_VREF_TYPE(cfg->vref));\r\n  CHECK_PARAM(IS_ADC_SIG_INPUT_TYPE(cfg->inputMode));\r\n  CHECK_PARAM(IS_ADC_DATA_WIDTH_TYPE(cfg->resWidth));\r\n\r\n  /* config 1 */\r\n  regCfg1 = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG1);\r\n  regCfg1 = BL_SET_REG_BITS_VAL(regCfg1, AON_GPADC_V18_SEL, cfg->v18Sel);\r\n  regCfg1 = BL_SET_REG_BITS_VAL(regCfg1, AON_GPADC_V11_SEL, cfg->v11Sel);\r\n  regCfg1 = BL_CLR_REG_BIT(regCfg1, AON_GPADC_DITHER_EN);\r\n  regCfg1 = BL_CLR_REG_BIT(regCfg1, AON_GPADC_SCAN_EN);\r\n  regCfg1 = BL_SET_REG_BITS_VAL(regCfg1, AON_GPADC_SCAN_LENGTH, 0);\r\n  regCfg1 = BL_SET_REG_BITS_VAL(regCfg1, AON_GPADC_CLK_DIV_RATIO, cfg->clkDiv);\r\n  regCfg1 = BL_CLR_REG_BIT(regCfg1, AON_GPADC_CLK_ANA_INV);\r\n  regCfg1 = BL_SET_REG_BITS_VAL(regCfg1, AON_GPADC_CAL_OS_EN, cfg->offsetCalibEn);\r\n  regCfg1 = BL_SET_REG_BITS_VAL(regCfg1, AON_GPADC_RES_SEL, cfg->resWidth);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CONFIG1, regCfg1);\r\n  AON_CLK_SET_DUMMY_WAIT;\r\n\r\n  /* config 2 */\r\n  regCfg2 = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG2);\r\n  regCfg2 = BL_SET_REG_BITS_VAL(regCfg2, AON_GPADC_DLY_SEL, 0x02);\r\n  regCfg2 = BL_SET_REG_BITS_VAL(regCfg2, AON_GPADC_PGA1_GAIN, cfg->gain1);\r\n  regCfg2 = BL_SET_REG_BITS_VAL(regCfg2, AON_GPADC_PGA2_GAIN, cfg->gain2);\r\n  regCfg2 = BL_SET_REG_BITS_VAL(regCfg2, AON_GPADC_BIAS_SEL, cfg->biasSel);\r\n  regCfg2 = BL_SET_REG_BITS_VAL(regCfg2, AON_GPADC_CHOP_MODE, cfg->chopMode);\r\n  /* pga_vcmi_en is for mic */\r\n  regCfg2 = BL_CLR_REG_BIT(regCfg2, AON_GPADC_PGA_VCMI_EN);\r\n\r\n  if ((cfg->gain1 != ADC_PGA_GAIN_NONE) || (cfg->gain2 != ADC_PGA_GAIN_NONE)) {\r\n    regCfg2 = BL_SET_REG_BIT(regCfg2, AON_GPADC_PGA_EN);\r\n  } else {\r\n    regCfg2 = BL_CLR_REG_BIT(regCfg2, AON_GPADC_PGA_EN);\r\n  }\r\n\r\n  /* pga_os_cal is for mic */\r\n  regCfg2 = BL_SET_REG_BITS_VAL(regCfg2, AON_GPADC_PGA_OS_CAL, 8);\r\n  regCfg2 = BL_SET_REG_BITS_VAL(regCfg2, AON_GPADC_PGA_VCM, cfg->vcm);\r\n  regCfg2 = BL_SET_REG_BITS_VAL(regCfg2, AON_GPADC_VREF_SEL, cfg->vref);\r\n  regCfg2 = BL_SET_REG_BITS_VAL(regCfg2, AON_GPADC_DIFF_MODE, cfg->inputMode);\r\n\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CONFIG2, regCfg2);\r\n\r\n  /* calibration offset */\r\n  regCalib = BL_RD_REG(AON_BASE, AON_GPADC_REG_DEFINE);\r\n  regCalib = BL_SET_REG_BITS_VAL(regCalib, AON_GPADC_OS_CAL_DATA, cfg->offsetCalibVal);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_DEFINE, regCalib);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(GPADC_DMA_IRQn, GPADC_DMA_IRQHandler);\r\n#endif\r\n\r\n  ADC_Gain_Trim();\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC normal mode channel config\r\n *\r\n * @param  posCh: ADC pos channel type\r\n * @param  negCh: ADC neg channel type\r\n * @param  contEn: ENABLE or DISABLE continuous mode\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_Channel_Config(ADC_Chan_Type posCh, ADC_Chan_Type negCh, BL_Fun_Type contEn) {\r\n  uint32_t regCmd;\r\n  uint32_t regCfg1;\r\n\r\n  CHECK_PARAM(IS_AON_ADC_CHAN_TYPE(posCh));\r\n  CHECK_PARAM(IS_AON_ADC_CHAN_TYPE(negCh));\r\n\r\n  /* set channel */\r\n  regCmd = BL_RD_REG(AON_BASE, AON_GPADC_REG_CMD);\r\n  regCmd = BL_SET_REG_BITS_VAL(regCmd, AON_GPADC_POS_SEL, posCh);\r\n  regCmd = BL_SET_REG_BITS_VAL(regCmd, AON_GPADC_NEG_SEL, negCh);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CMD, regCmd);\r\n\r\n  /* set continuous mode */\r\n  regCfg1 = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG1);\r\n  regCfg1 = BL_SET_REG_BITS_VAL(regCfg1, AON_GPADC_CONT_CONV_EN, contEn);\r\n  regCfg1 = BL_CLR_REG_BIT(regCfg1, AON_GPADC_SCAN_EN);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CONFIG1, regCfg1);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC scan mode channel config\r\n *\r\n * @param  posChList[]: ADC pos channel list type\r\n * @param  negChList[]: ADC neg channel list type\r\n * @param  scanLength: ADC scan length\r\n * @param  contEn: ENABLE or DISABLE continuous mode\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_Scan_Channel_Config(const ADC_Chan_Type posChList[], const ADC_Chan_Type negChList[], uint8_t scanLength, BL_Fun_Type contEn) {\r\n  uint32_t tmpVal, i;\r\n  uint32_t dealLen;\r\n\r\n  CHECK_PARAM((scanLength < 13));\r\n\r\n  /* Deal with the first 6 */\r\n  dealLen = 6;\r\n\r\n  if (scanLength < dealLen) {\r\n    dealLen = scanLength;\r\n  }\r\n\r\n  /* Set first 6 scan channels */\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_SCN_POS1);\r\n\r\n  for (i = 0; i < dealLen; i++) {\r\n    tmpVal = tmpVal & (~(0x1F << (i * 5)));\r\n    tmpVal |= (posChList[i] << (i * 5));\r\n  }\r\n\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_SCN_POS1, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_SCN_NEG1);\r\n\r\n  for (i = 0; i < dealLen; i++) {\r\n    tmpVal = tmpVal & (~(0x1F << (i * 5)));\r\n    tmpVal |= (negChList[i] << (i * 5));\r\n  }\r\n\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_SCN_NEG1, tmpVal);\r\n\r\n  /* Set the left channels */\r\n  if (scanLength > dealLen) {\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_SCN_POS2);\r\n\r\n    for (i = 0; i < scanLength - dealLen; i++) {\r\n      tmpVal = tmpVal & (~(0x1F << (i * 5)));\r\n      tmpVal |= (posChList[i + dealLen] << (i * 5));\r\n    }\r\n\r\n    BL_WR_REG(AON_BASE, AON_GPADC_REG_SCN_POS2, tmpVal);\r\n\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_SCN_NEG2);\r\n\r\n    for (i = 0; i < scanLength - dealLen; i++) {\r\n      tmpVal = tmpVal & (~(0x1F << (i * 5)));\r\n      tmpVal |= (negChList[i + dealLen] << (i * 5));\r\n    }\r\n\r\n    BL_WR_REG(AON_BASE, AON_GPADC_REG_SCN_NEG2, tmpVal);\r\n  }\r\n\r\n  /* Scan mode */\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_GPADC_SCAN_LENGTH, scanLength - 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_GPADC_CONT_CONV_EN, contEn);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_CLK_ANA_INV);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_SCAN_EN);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CONFIG1, tmpVal);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC normal mode convert start\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_Start(void) {\r\n  uint32_t regCmd;\r\n\r\n  /* disable convert start */\r\n  regCmd = BL_RD_REG(AON_BASE, AON_GPADC_REG_CMD);\r\n  regCmd = BL_CLR_REG_BIT(regCmd, AON_GPADC_CONV_START);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CMD, regCmd);\r\n\r\n  ADC_RESTART_DUMMY_WAIT;\r\n\r\n  /* enable convert start */\r\n  regCmd = BL_RD_REG(AON_BASE, AON_GPADC_REG_CMD);\r\n  regCmd = BL_SET_REG_BIT(regCmd, AON_GPADC_CONV_START);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CMD, regCmd);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC normal mode convert stop\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_Stop(void) {\r\n  uint32_t regCmd;\r\n\r\n  /* disable convert start */\r\n  regCmd = BL_RD_REG(AON_BASE, AON_GPADC_REG_CMD);\r\n  regCmd = BL_CLR_REG_BIT(regCmd, AON_GPADC_CONV_START);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CMD, regCmd);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC FIFO configuration\r\n *\r\n * @param  fifoCfg: ADC FIFO confifuration pointer\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_FIFO_Cfg(ADC_FIFO_Cfg_Type *fifoCfg) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_GPIP_ADC_FIFO_THRESHOLD_TYPE(fifoCfg->fifoThreshold));\r\n\r\n  /*\r\n   *  DMA enable : ,When the fifo data is exceeded to fifoThreshold DMA request will occur\r\n   *  DMA disable : fifoThreshold determine how many data will raise FIFO ready interrupt\r\n   */\r\n\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GPIP_GPADC_FIFO_THL, fifoCfg->fifoThreshold);\r\n\r\n  /* Enable DMA */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GPIP_GPADC_DMA_EN, fifoCfg->dmaEn);\r\n\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n  /* clear fifo by SET GPIP_GPADC_FIFO_CLR bit*/\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_FIFO_CLR);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC get DMA FIFO data count\r\n *\r\n * @param  None\r\n *\r\n * @return data count in FIFO\r\n *\r\n *******************************************************************************/\r\nuint8_t ADC_Get_FIFO_Count(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n\r\n  return BL_GET_REG_BITS_VAL(tmpVal, GPIP_GPADC_FIFO_DATA_COUNT);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC get DMA FIFO full status\r\n *\r\n * @param  None\r\n *\r\n * @return SET or RESET\r\n *\r\n *******************************************************************************/\r\nBL_Sts_Type ADC_FIFO_Is_Full(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, GPIP_GPADC_FIFO_FULL)) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC get DMA FIFO empty status\r\n *\r\n * @param  None\r\n *\r\n * @return SET or RESET\r\n *\r\n *******************************************************************************/\r\nBL_Sts_Type ADC_FIFO_Is_Empty(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, GPIP_GPADC_FIFO_NE)) {\r\n    return RESET;\r\n  } else {\r\n    return SET;\r\n  }\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC read DMA FIFO data\r\n *\r\n * @param  None\r\n *\r\n * @return ADC result if return 0 that means this is error data,user should ignore this data.\r\n *\r\n *******************************************************************************/\r\nuint32_t ADC_Read_FIFO(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_DMA_RDATA);\r\n\r\n  return (tmpVal);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC parse result\r\n *\r\n * @param  orgVal: Original A to D value\r\n * @param  len: Original AD vaule count\r\n * @param  result: Final Result array pointer\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_Parse_Result(uint32_t *orgVal, uint32_t len, ADC_Result_Type *result) {\r\n  uint8_t             neg     = 0;\r\n  uint32_t            tmpVal1 = 0, tmpVal2 = 0;\r\n  ADC_Data_Width_Type dataType;\r\n  ADC_SIG_INPUT_Type  sigType;\r\n  uint32_t            i = 0;\r\n\r\n  float coe = 1.0;\r\n\r\n  if (adcGainCoeffCal.adcGainCoeffEnable) {\r\n    coe = adcGainCoeffCal.coe;\r\n  }\r\n\r\n  tmpVal1  = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG1);\r\n  tmpVal2  = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG2);\r\n  dataType = BL_GET_REG_BITS_VAL(tmpVal1, AON_GPADC_RES_SEL);\r\n  sigType  = BL_GET_REG_BITS_VAL(tmpVal2, AON_GPADC_DIFF_MODE);\r\n\r\n  if (sigType == ADC_INPUT_SINGLE_END) {\r\n    for (i = 0; i < len; i++) {\r\n      result[i].posChan = orgVal[i] >> 21;\r\n      result[i].negChan = -1;\r\n      uint32_t sample   = 0;\r\n      if (dataType == ADC_DATA_WIDTH_12) {\r\n        sample = ((orgVal[i] & 0xffff) >> 4);\r\n      } else if ((dataType == ADC_DATA_WIDTH_14_WITH_16_AVERAGE) || (dataType == ADC_DATA_WIDTH_14_WITH_64_AVERAGE)) {\r\n        sample = ((orgVal[i] & 0xffff) >> 2);\r\n      } else if ((dataType == ADC_DATA_WIDTH_16_WITH_128_AVERAGE) || (dataType == ADC_DATA_WIDTH_16_WITH_256_AVERAGE)) {\r\n        sample = (orgVal[i] & 0xffff);\r\n      }\r\n\r\n      result[i].value = (unsigned int)(sample / coe);\r\n\r\n      // Saturate at 16 bits\r\n      if (result[i].value > 0xFFFF) {\r\n        result[i].value = 0xFFFF;\r\n      }\r\n    }\r\n  }\r\n  // else {\r\n  //   for (i = 0; i < len; i++) {\r\n  //     neg               = 0;\r\n  //     result[i].posChan = orgVal[i] >> 21;\r\n  //     result[i].negChan = (orgVal[i] >> 16) & 0x1F;\r\n\r\n  //     if (orgVal[i] & 0x8000) {\r\n  //       orgVal[i] = ~orgVal[i];\r\n  //       orgVal[i] += 1;\r\n  //       neg = 1;\r\n  //     }\r\n\r\n  //     if (dataType == ADC_DATA_WIDTH_12) {\r\n  //       result[i].value = (unsigned int)(((orgVal[i] & 0xffff) >> 4) / coe);\r\n  //     } else if ((dataType == ADC_DATA_WIDTH_14_WITH_16_AVERAGE) || (dataType == ADC_DATA_WIDTH_14_WITH_64_AVERAGE)) {\r\n  //       result[i].value = (unsigned int)(((orgVal[i] & 0xffff) >> 2) / coe);\r\n  //     } else if ((dataType == ADC_DATA_WIDTH_16_WITH_128_AVERAGE) || (dataType == ADC_DATA_WIDTH_16_WITH_256_AVERAGE)) {\r\n  //       result[i].value = (unsigned int)((orgVal[i] & 0xffff) / coe);\r\n  //     }\r\n  //     // Saturate at 16 bits\r\n  //     if (result[i].value > 0xFFFF) {\r\n  //       result[i].value = 0xFFFF;\r\n  //     }\r\n  //   }\r\n  // }\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC mask or unmask certain or all interrupt\r\n *\r\n * @param  intType: interrupt type\r\n * @param  intMask: mask or unmask\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nBL_Mask_Type ADC_IntGetMask(ADC_INT_Type intType) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_GPIP_ADC_INT_TYPE(intType));\r\n  CHECK_PARAM(IS_BL_MASK_TYPE(intMask));\r\n\r\n  switch (intType) {\r\n  case ADC_INT_POS_SATURATION:\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_ISR);\r\n    return BL_IS_REG_BIT_SET(tmpVal, AON_GPADC_POS_SATUR_MASK);\r\n    break;\r\n\r\n  case ADC_INT_NEG_SATURATION:\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_ISR);\r\n    return BL_IS_REG_BIT_SET(tmpVal, AON_GPADC_NEG_SATUR_MASK);\r\n    break;\r\n\r\n  case ADC_INT_FIFO_UNDERRUN:\r\n    tmpVal = BL_RD_REG(AON_BASE, GPIP_GPADC_CONFIG);\r\n    return BL_IS_REG_BIT_SET(tmpVal, GPIP_GPADC_FIFO_UNDERRUN_MASK);\r\n    break;\r\n\r\n  case ADC_INT_FIFO_OVERRUN:\r\n    tmpVal = BL_RD_REG(AON_BASE, GPIP_GPADC_CONFIG);\r\n    return BL_IS_REG_BIT_SET(tmpVal, GPIP_GPADC_FIFO_OVERRUN_MASK);\r\n    break;\r\n\r\n  case ADC_INT_ADC_READY:\r\n    tmpVal = BL_RD_REG(AON_BASE, GPIP_GPADC_CONFIG);\r\n    return BL_IS_REG_BIT_SET(tmpVal, GPIP_GPADC_RDY_MASK);\r\n    break;\r\n\r\n  case ADC_INT_FIFO_READY:\r\n    tmpVal = BL_RD_REG(AON_BASE, GPIP_GPADC_CONFIG);\r\n    return BL_IS_REG_BIT_SET(tmpVal, GPIP_GPADC_FIFO_RDY_MASK);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n  return 0;\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC mask or unmask certain or all interrupt\r\n *\r\n * @param  intType: interrupt type\r\n * @param  intMask: mask or unmask\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_IntMask(ADC_INT_Type intType, BL_Mask_Type intMask) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_GPIP_ADC_INT_TYPE(intType));\r\n  CHECK_PARAM(IS_BL_MASK_TYPE(intMask));\r\n\r\n  switch (intType) {\r\n  case ADC_INT_POS_SATURATION:\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_ISR);\r\n\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_POS_SATUR_MASK);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_POS_SATUR_MASK);\r\n    }\r\n\r\n    BL_WR_REG(AON_BASE, AON_GPADC_REG_ISR, tmpVal);\r\n    break;\r\n\r\n  case ADC_INT_NEG_SATURATION:\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_ISR);\r\n\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_NEG_SATUR_MASK);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_NEG_SATUR_MASK);\r\n    }\r\n\r\n    BL_WR_REG(AON_BASE, AON_GPADC_REG_ISR, tmpVal);\r\n    break;\r\n\r\n  case ADC_INT_FIFO_UNDERRUN:\r\n    tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_FIFO_UNDERRUN_MASK);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_FIFO_UNDERRUN_MASK);\r\n    }\r\n\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case ADC_INT_FIFO_OVERRUN:\r\n    tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_FIFO_OVERRUN_MASK);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_FIFO_OVERRUN_MASK);\r\n    }\r\n\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case ADC_INT_ADC_READY:\r\n    tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_RDY_MASK);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_RDY_MASK);\r\n    }\r\n\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case ADC_INT_FIFO_READY:\r\n    tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_FIFO_RDY_MASK);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_FIFO_RDY_MASK);\r\n    }\r\n\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case ADC_INT_ALL:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_RD_REG(GPIP_BASE, AON_GPADC_REG_ISR);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_POS_SATUR_MASK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_NEG_SATUR_MASK);\r\n      BL_WR_REG(AON_BASE, AON_GPADC_REG_ISR, tmpVal);\r\n\r\n      tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_FIFO_UNDERRUN_MASK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_FIFO_OVERRUN_MASK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_RDY_MASK);\r\n      BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_RD_REG(GPIP_BASE, AON_GPADC_REG_ISR);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_POS_SATUR_MASK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_NEG_SATUR_MASK);\r\n      BL_WR_REG(AON_BASE, AON_GPADC_REG_ISR, tmpVal);\r\n\r\n      tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_FIFO_OVERRUN_MASK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_FIFO_UNDERRUN_MASK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_RDY_MASK);\r\n      BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n    }\r\n\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC clear certain or all interrupt\r\n *\r\n * @param  intType: interrupt type\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_IntClr(ADC_INT_Type intType) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_GPIP_ADC_INT_TYPE(intType));\r\n\r\n  switch (intType) {\r\n  case ADC_INT_POS_SATURATION:\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_ISR);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_POS_SATUR_CLR);\r\n    BL_WR_REG(AON_BASE, AON_GPADC_REG_ISR, tmpVal);\r\n\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_POS_SATUR_CLR);\r\n    BL_WR_REG(AON_BASE, AON_GPADC_REG_ISR, tmpVal);\r\n\r\n    /*Manual reset*/\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_ISR);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_POS_SATUR_CLR);\r\n    BL_WR_REG(AON_BASE, AON_GPADC_REG_ISR, tmpVal);\r\n\r\n    break;\r\n\r\n  case ADC_INT_NEG_SATURATION:\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_ISR);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_NEG_SATUR_CLR);\r\n    BL_WR_REG(AON_BASE, AON_GPADC_REG_ISR, tmpVal);\r\n\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_NEG_SATUR_CLR);\r\n    BL_WR_REG(AON_BASE, AON_GPADC_REG_ISR, tmpVal);\r\n\r\n    /*Manual reset*/\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_ISR);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_NEG_SATUR_CLR);\r\n    BL_WR_REG(AON_BASE, AON_GPADC_REG_ISR, tmpVal);\r\n\r\n    break;\r\n\r\n  case ADC_INT_FIFO_UNDERRUN:\r\n    tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_FIFO_UNDERRUN_CLR);\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_FIFO_UNDERRUN_CLR);\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n    /*Manual reset*/\r\n    tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_FIFO_UNDERRUN_CLR);\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n    break;\r\n\r\n  case ADC_INT_FIFO_OVERRUN:\r\n    tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_FIFO_OVERRUN_CLR);\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_FIFO_OVERRUN_CLR);\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n    /*Manual reset*/\r\n    tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_FIFO_OVERRUN_CLR);\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n    break;\r\n\r\n  case ADC_INT_ADC_READY:\r\n    tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_RDY_CLR);\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_RDY_CLR);\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n    /*Manual reset*/\r\n    tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_RDY_CLR);\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n    break;\r\n\r\n  case ADC_INT_FIFO_READY:\r\n    tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_FIFO_RDY);\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_FIFO_RDY);\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n    /*Manual reset*/\r\n    tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_FIFO_RDY);\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n    break;\r\n\r\n  case ADC_INT_ALL:\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_ISR);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_POS_SATUR_CLR);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_NEG_SATUR_CLR);\r\n    BL_WR_REG(AON_BASE, AON_GPADC_REG_ISR, tmpVal);\r\n\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_POS_SATUR_CLR);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_NEG_SATUR_CLR);\r\n    BL_WR_REG(AON_BASE, AON_GPADC_REG_ISR, tmpVal);\r\n\r\n    /*Manual reset*/\r\n    tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_ISR);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_POS_SATUR_CLR);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_NEG_SATUR_CLR);\r\n    BL_WR_REG(AON_BASE, AON_GPADC_REG_ISR, tmpVal);\r\n\r\n    tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_FIFO_UNDERRUN_CLR);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_FIFO_OVERRUN_CLR);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_RDY_CLR);\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_FIFO_UNDERRUN_CLR);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_FIFO_OVERRUN_CLR);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_RDY_CLR);\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n    /*Manual reset*/\r\n    tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_FIFO_UNDERRUN_CLR);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_FIFO_OVERRUN_CLR);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPADC_RDY_CLR);\r\n    BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC get interrupt status\r\n *\r\n * @param  intType: interrupt type\r\n *\r\n * @return SET or RESET\r\n *\r\n *******************************************************************************/\r\nBL_Sts_Type ADC_GetIntStatus(ADC_INT_Type intType) {\r\n  uint32_t    tmpVal;\r\n  BL_Sts_Type bitStatus = RESET;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_GPIP_ADC_INT_TYPE(intType));\r\n\r\n  switch (intType) {\r\n  case ADC_INT_POS_SATURATION:\r\n    tmpVal    = BL_RD_REG(AON_BASE, AON_GPADC_REG_ISR);\r\n    bitStatus = (BL_IS_REG_BIT_SET(tmpVal, AON_GPADC_POS_SATUR)) ? SET : RESET;\r\n    break;\r\n\r\n  case ADC_INT_NEG_SATURATION:\r\n    tmpVal    = BL_RD_REG(AON_BASE, AON_GPADC_REG_ISR);\r\n    bitStatus = (BL_IS_REG_BIT_SET(tmpVal, AON_GPADC_NEG_SATUR)) ? SET : RESET;\r\n    break;\r\n\r\n  case ADC_INT_FIFO_UNDERRUN:\r\n    tmpVal    = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n    bitStatus = (BL_IS_REG_BIT_SET(tmpVal, GPIP_GPADC_FIFO_UNDERRUN)) ? SET : RESET;\r\n    break;\r\n\r\n  case ADC_INT_FIFO_OVERRUN:\r\n    tmpVal    = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n    bitStatus = (BL_IS_REG_BIT_SET(tmpVal, GPIP_GPADC_FIFO_OVERRUN)) ? SET : RESET;\r\n    break;\r\n\r\n  case ADC_INT_ADC_READY:\r\n    tmpVal    = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n    bitStatus = (BL_IS_REG_BIT_SET(tmpVal, GPIP_GPADC_RDY)) ? SET : RESET;\r\n    break;\r\n\r\n  case ADC_INT_FIFO_READY:\r\n    tmpVal    = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n    bitStatus = (BL_IS_REG_BIT_SET(tmpVal, GPIP_GPADC_FIFO_RDY)) ? SET : RESET;\r\n    break;\r\n\r\n  case ADC_INT_ALL:\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return bitStatus;\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC install interrupt callback\r\n *\r\n * @param  intType: ADC interrupt type\r\n * @param  cbFun: ADC interrupt callback\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_Int_Callback_Install(ADC_INT_Type intType, intCallback_Type *cbFun) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_GPIP_ADC_INT_TYPE(intType));\r\n\r\n  adcIntCbfArra[intType] = cbFun;\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC DMA interrupt handler\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid GPADC_DMA_IRQHandler(void) {\r\n  if (ADC_GetIntStatus(ADC_INT_POS_SATURATION) == SET) {\r\n    ADC_IntClr(ADC_INT_POS_SATURATION);\r\n\r\n    if (adcIntCbfArra[ADC_INT_POS_SATURATION] != NULL) {\r\n      adcIntCbfArra[ADC_INT_POS_SATURATION]();\r\n    }\r\n  }\r\n\r\n  if (ADC_GetIntStatus(ADC_INT_NEG_SATURATION) == SET) {\r\n    ADC_IntClr(ADC_INT_NEG_SATURATION);\r\n\r\n    if (adcIntCbfArra[ADC_INT_NEG_SATURATION] != NULL) {\r\n      adcIntCbfArra[ADC_INT_NEG_SATURATION]();\r\n    }\r\n  }\r\n\r\n  if (ADC_GetIntStatus(ADC_INT_FIFO_UNDERRUN) == SET) {\r\n    ADC_IntClr(ADC_INT_FIFO_UNDERRUN);\r\n\r\n    if (adcIntCbfArra[ADC_INT_FIFO_UNDERRUN] != NULL) {\r\n      adcIntCbfArra[ADC_INT_FIFO_UNDERRUN]();\r\n    }\r\n  }\r\n\r\n  if (ADC_GetIntStatus(ADC_INT_FIFO_OVERRUN) == SET) {\r\n    ADC_IntClr(ADC_INT_FIFO_OVERRUN);\r\n\r\n    if (adcIntCbfArra[ADC_INT_FIFO_OVERRUN] != NULL) {\r\n      adcIntCbfArra[ADC_INT_FIFO_OVERRUN]();\r\n    }\r\n  }\r\n\r\n  if (ADC_GetIntStatus(ADC_INT_FIFO_READY) == SET) {\r\n    ADC_IntClr(ADC_INT_FIFO_READY);\r\n\r\n    if (adcIntCbfArra[ADC_INT_FIFO_READY] != NULL) {\r\n      adcIntCbfArra[ADC_INT_FIFO_READY]();\r\n    }\r\n  }\r\n\r\n  if (ADC_GetIntStatus(ADC_INT_FIFO_READY) == SET) {\r\n    ADC_IntClr(ADC_INT_FIFO_READY);\r\n\r\n    if (adcIntCbfArra[ADC_INT_FIFO_READY] != NULL) {\r\n      adcIntCbfArra[ADC_INT_FIFO_READY]();\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC VBAT enable\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_Vbat_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG2);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_VBAT_EN);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CONFIG2, tmpVal);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC VBAT disable\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_Vbat_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG2);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_VBAT_EN);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CONFIG2, tmpVal);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC TSEN Config\r\n *\r\n * @param  tsenMod: None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_Tsen_Init(ADC_TSEN_MOD_Type tsenMod) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_AON_ADC_TSEN_MOD_TYPE(type));\r\n\r\n  /* config gpadc_reg_cmd */\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CMD);\r\n  /* enable sensor dc test mux*/\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_SEN_TEST_EN);\r\n  /*selected sen output current channel*/\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_GPADC_SEN_SEL, 0);\r\n  /* enable chip sensor*/\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_CHIP_SEN_PU);\r\n  /*dwa_en */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_GPADC_DWA_EN, 1);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CMD, tmpVal);\r\n\r\n  /* config 2 */\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG2);\r\n  /*tsvbe low=0*/\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_TSVBE_LOW);\r\n  /*dly_sel=2*/\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_GPADC_DLY_SEL, 2);\r\n  /*test_sel=0*/\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_GPADC_TEST_SEL, 0);\r\n  /*test_en=0*/\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_TEST_EN);\r\n  /*ts_en*/\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_TS_EN);\r\n  /*select tsen ext or inner*/\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_GPADC_TSEXT_SEL, tsenMod);\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_GPADC_PGA_VCM, 2);\r\n  /*pga vcmi enable*/\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_PGA_VCMI_EN);\r\n  /*0:512uS;1:16mS;2:32mS;3:64mS*/\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_GPADC_PGA_OS_CAL, 0);\r\n\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CONFIG2, tmpVal);\r\n\r\n  /* config 3 */\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG1);\r\n  /* set gpadc_dither_en */\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_DITHER_EN);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CONFIG1, tmpVal);\r\n\r\n  /* set 4000F90C[19](gpadc_mic2_diff) = 1\r\n   * debug advise form Ran\r\n   * 2020.08.26\r\n   */\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CMD);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_GPADC_MIC2_DIFF, 1);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CMD, tmpVal);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC TSEN Enable\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_Tsen_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG2);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_TS_EN);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CONFIG2, tmpVal);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC TSEN Disable\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_Tsen_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG2);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_TS_EN);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CONFIG2, tmpVal);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC Clear fifo\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_FIFO_Clear(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* clear fifo by SET GPIP_GPADC_FIFO_CLR bit*/\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_FIFO_CLR);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  config pga\r\n *\r\n * @param  pga_vcmi_enable: enable or not vcmi\r\n * @param  pga_os_cal: pga os cal value\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_PGA_Config(uint8_t pga_vcmi_enable, uint8_t pga_os_cal) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG2);\r\n\r\n  if (pga_vcmi_enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_PGA_VCMI_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_PGA_VCMI_EN);\r\n  }\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_GPADC_PGA_OS_CAL, pga_os_cal);\r\n\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CONFIG2, tmpVal);\r\n}\r\n/****************************************************************************/\r\n/**\r\n * @brief  TSEN_Get_V_Error\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nuint32_t TSEN_Get_V_Error(void) {\r\n  uint32_t        v0 = 0, v1 = 0;\r\n  uint32_t        v_error = 0;\r\n  uint32_t        regVal  = 0;\r\n  ADC_Result_Type result;\r\n  uint32_t        tmpVal;\r\n  uint8_t         gainCalEnabled = 0;\r\n\r\n  /* clear fifo by SET GPIP_GPADC_FIFO_CLR bit*/\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_FIFO_CLR);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n  ADC_SET_TSVBE_LOW();\r\n\r\n  ADC_Start();\r\n\r\n  while (ADC_Get_FIFO_Count() == 0)\r\n    ;\r\n\r\n  regVal                             = ADC_Read_FIFO();\r\n  gainCalEnabled                     = adcGainCoeffCal.adcGainCoeffEnable;\r\n  adcGainCoeffCal.adcGainCoeffEnable = 0;\r\n  ADC_Parse_Result(&regVal, 1, &result);\r\n  adcGainCoeffCal.adcGainCoeffEnable = gainCalEnabled;\r\n  v0                                 = result.value;\r\n\r\n  /* clear fifo by SET GPIP_GPADC_FIFO_CLR bit*/\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_FIFO_CLR);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n  ADC_SET_TSVBE_HIGH();\r\n\r\n  ADC_Start();\r\n\r\n  while (ADC_Get_FIFO_Count() == 0)\r\n    ;\r\n\r\n  regVal                             = ADC_Read_FIFO();\r\n  gainCalEnabled                     = adcGainCoeffCal.adcGainCoeffEnable;\r\n  adcGainCoeffCal.adcGainCoeffEnable = 0;\r\n  ADC_Parse_Result(&regVal, 1, &result);\r\n  adcGainCoeffCal.adcGainCoeffEnable = gainCalEnabled;\r\n  v1                                 = result.value;\r\n\r\n  v_error = v0 - v1;\r\n\r\n  return v_error;\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  Trim TSEN\r\n *\r\n * @param  tsen_offset: None\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type ATTR_CLOCK_SECTION ADC_Trim_TSEN(uint16_t *tsen_offset) {\r\n  Efuse_TSEN_Refcode_Corner_Type trim;\r\n\r\n  EF_Ctrl_Read_TSEN_Trim(&trim);\r\n  if (trim.tsenRefcodeCornerEn) {\r\n    if (trim.tsenRefcodeCornerParity == EF_Ctrl_Get_Trim_Parity(trim.tsenRefcodeCorner, 12)) {\r\n      *tsen_offset = trim.tsenRefcodeCorner;\r\n\r\n      return SUCCESS;\r\n    }\r\n  }\r\n\r\n  return ERROR;\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  SET ADC TSEN TSVBE LOW/HIGH\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_SET_TSVBE_LOW(void) {\r\n  uint32_t tmpVal;\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG2);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_TSVBE_LOW);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CONFIG2, tmpVal);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  SET ADC TSEN TSVBE LOW/HIGH\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_SET_TSVBE_HIGH(void) {\r\n  uint32_t tmpVal;\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG2);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_TSVBE_LOW);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CONFIG2, tmpVal);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  SET ADC TSEN TSVBE LOW/HIGH\r\n *\r\n * @param  tsen_offset: tsen_offset form efuse trim data\r\n *\r\n * @return tempture\r\n *\r\n *******************************************************************************/\r\nfloat TSEN_Get_Temp(uint32_t tsen_offset) {\r\n  uint32_t        v0 = 0, v1 = 0;\r\n  float           temp   = 0;\r\n  uint32_t        regVal = 0;\r\n  ADC_Result_Type result;\r\n  uint32_t        tmpVal;\r\n  uint8_t         gainCalEnabled = 0;\r\n\r\n  /* clear fifo by SET GPIP_GPADC_FIFO_CLR bit*/\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_FIFO_CLR);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n  ADC_SET_TSVBE_LOW();\r\n\r\n  ADC_Start();\r\n\r\n  while (ADC_Get_FIFO_Count() == 0)\r\n    ;\r\n\r\n  regVal = ADC_Read_FIFO();\r\n\r\n  gainCalEnabled                     = adcGainCoeffCal.adcGainCoeffEnable;\r\n  adcGainCoeffCal.adcGainCoeffEnable = 0;\r\n  ADC_Parse_Result(&regVal, 1, &result);\r\n  adcGainCoeffCal.adcGainCoeffEnable = gainCalEnabled;\r\n  v0                                 = result.value;\r\n\r\n  /* clear fifo by SET GPIP_GPADC_FIFO_CLR bit*/\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPADC_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPADC_FIFO_CLR);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPADC_CONFIG, tmpVal);\r\n\r\n  ADC_SET_TSVBE_HIGH();\r\n\r\n  ADC_Start();\r\n\r\n  while (ADC_Get_FIFO_Count() == 0)\r\n    ;\r\n\r\n  regVal                             = ADC_Read_FIFO();\r\n  gainCalEnabled                     = adcGainCoeffCal.adcGainCoeffEnable;\r\n  adcGainCoeffCal.adcGainCoeffEnable = 0;\r\n  ADC_Parse_Result(&regVal, 1, &result);\r\n  adcGainCoeffCal.adcGainCoeffEnable = gainCalEnabled;\r\n  v1                                 = result.value;\r\n\r\n  if (v0 > v1) {\r\n    temp = (((float)v0 - (float)v1) - (float)tsen_offset) / 7.753;\r\n  } else {\r\n    temp = (((float)v1 - (float)v0) - (float)tsen_offset) / 7.753;\r\n  }\r\n\r\n  return temp;\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC MIC Config\r\n *\r\n * @param  adc_mic_config: adc_mic_config\r\n *\r\n * @return success or not\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type ADC_Mic_Init(ADC_MIC_Type *adc_mic_config) {\r\n  uint32_t tmpVal1 = 0, tmpVal2 = 0;\r\n\r\n  CHECK_PARAM(IS_ADC_MICBOOST_DB_Type(adc_mic_config->micboostDb));\r\n  CHECK_PARAM(IS_PGA2_GAIN_Type(adc_mic_config->micPga2Gain));\r\n  CHECK_PARAM(IS_ADC_MIC_MODE_Type(adc_mic_config->mic1Mode));\r\n  CHECK_PARAM(IS_ADC_MIC_MODE_Type(adc_mic_config->mic2Mode));\r\n  CHECK_PARAM(IS_BL_Fun_Type(adc_mic_config->dwaEn));\r\n  CHECK_PARAM(IS_BL_Fun_Type(adc_mic_config->micboostBypassEn));\r\n  CHECK_PARAM(IS_BL_Fun_Type(adc_mic_config->micPgaEn));\r\n  CHECK_PARAM(IS_BL_Fun_Type(adc_mic_config->micBiasEn));\r\n\r\n  tmpVal2 = BL_RD_REG(AON_BASE, AON_GPADC_REG_CONFIG2);\r\n\r\n  tmpVal1 = BL_RD_REG(AON_BASE, AON_GPADC_REG_CMD);\r\n  tmpVal1 = BL_SET_REG_BITS_VAL(tmpVal1, AON_GPADC_MICBOOST_32DB_EN, adc_mic_config->micboostDb);\r\n  tmpVal1 = BL_SET_REG_BITS_VAL(tmpVal1, AON_GPADC_MIC_PGA2_GAIN, adc_mic_config->micPga2Gain);\r\n  tmpVal1 = BL_SET_REG_BITS_VAL(tmpVal1, AON_GPADC_MIC1_DIFF, adc_mic_config->mic1Mode);\r\n  tmpVal1 = BL_SET_REG_BITS_VAL(tmpVal1, AON_GPADC_MIC2_DIFF, adc_mic_config->mic2Mode);\r\n  tmpVal1 = BL_SET_REG_BITS_VAL(tmpVal1, AON_GPADC_DWA_EN, adc_mic_config->dwaEn);\r\n  tmpVal1 = BL_SET_REG_BITS_VAL(tmpVal1, AON_GPADC_BYP_MICBOOST, adc_mic_config->micboostBypassEn);\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal2, AON_GPADC_PGA_EN) && adc_mic_config->micPgaEn == ENABLE) {\r\n    /* 0x4000F914[13] and 0x4000F90c[15] Cannot be both Enable*/\r\n    return ERROR;\r\n  } else {\r\n    tmpVal1 = BL_SET_REG_BITS_VAL(tmpVal1, AON_GPADC_MICPGA_EN, adc_mic_config->micPgaEn);\r\n  }\r\n\r\n  tmpVal1 = BL_SET_REG_BITS_VAL(tmpVal1, AON_GPADC_MICBIAS_EN, adc_mic_config->micBiasEn);\r\n\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CMD, tmpVal1);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC MIC bias control\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_MIC_Bias_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CMD);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_GPADC_MICBIAS_EN);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CMD, tmpVal);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  ADC MIC bias control\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ADC_MIC_Bias_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(AON_BASE, AON_GPADC_REG_CMD);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_GPADC_MICBIAS_EN);\r\n  BL_WR_REG(AON_BASE, AON_GPADC_REG_CMD, tmpVal);\r\n}\r\n\r\n/****************************************************************************/\r\n/**\r\n * @brief  Trim ADC Gain\r\n *\r\n * @param  None\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type ATTR_CLOCK_SECTION ADC_Gain_Trim(void) {\r\n  Efuse_ADC_Gain_Coeff_Type trim;\r\n  uint32_t                  tmp;\r\n\r\n  EF_Ctrl_Read_ADC_Gain_Trim(&trim);\r\n\r\n  if (trim.adcGainCoeffEn) {\r\n    if (trim.adcGainCoeffParity == EF_Ctrl_Get_Trim_Parity(trim.adcGainCoeff, 12)) {\r\n      adcGainCoeffCal.adcGainCoeffEnable = ENABLE;\r\n      adcGainCoeffCal.adcgainCoeffVal    = trim.adcGainCoeff;\r\n      tmp                                = adcGainCoeffCal.adcgainCoeffVal;\r\n\r\n      if (tmp & 0x800) {\r\n        tmp = ~tmp;\r\n        tmp += 1;\r\n        tmp = tmp & 0xfff;\r\n        // printf(\"val==%08x\\r\\n\",(unsigned int)tmp);\r\n        adcGainCoeffCal.coe = (1.0 + ((float)tmp / 2048.0));\r\n        // printf(\"coe==%0f\\r\\n\",adcGainCoeffCal.coe);\r\n      } else {\r\n        adcGainCoeffCal.coe = (1.0 - ((float)tmp / 2048.0));\r\n        // printf(\"coe==%0f\\r\\n\",adcGainCoeffCal.coe);\r\n      }\r\n\r\n      return SUCCESS;\r\n    }\r\n  }\r\n\r\n  return ERROR;\r\n}\r\n\r\n/*@} end of group ADC_Public_Functions */\r\n\r\n/*@} end of group ADC */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_aon.c",
    "content": "/**\n ******************************************************************************\n * @file    bl702_aon.c\n * @version V1.0\n * @date\n * @brief   This file is the standard driver c file\n ******************************************************************************\n * @attention\n *\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n *   1. Redistributions of source code must retain the above copyright notice,\n *      this list of conditions and the following disclaimer.\n *   2. Redistributions in binary form must reproduce the above copyright notice,\n *      this list of conditions and the following disclaimer in the documentation\n *      and/or other materials provided with the distribution.\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n *      may be used to endorse or promote products derived from this software\n *      without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n ******************************************************************************\n */\n\n#include \"bl702_aon.h\"\n\n/** @addtogroup  BL702_Peripheral_Driver\n *  @{\n */\n\n/** @addtogroup  AON\n *  @{\n */\n\n/** @defgroup  AON_Private_Macros\n *  @{\n */\n#define AON_CLK_SET_DUMMY_WAIT                                                                                                                                                                         \\\n  {                                                                                                                                                                                                    \\\n    __NOP();                                                                                                                                                                                           \\\n    __NOP();                                                                                                                                                                                           \\\n    __NOP();                                                                                                                                                                                           \\\n    __NOP();                                                                                                                                                                                           \\\n    __NOP();                                                                                                                                                                                           \\\n    __NOP();                                                                                                                                                                                           \\\n    __NOP();                                                                                                                                                                                           \\\n    __NOP();                                                                                                                                                                                           \\\n  }\n\n/*@} end of group AON_Private_Macros */\n\n/** @defgroup  AON_Private_Types\n *  @{\n */\n\n/*@} end of group AON_Private_Types */\n\n/** @defgroup  AON_Private_Variables\n *  @{\n */\n\n/*@} end of group AON_Private_Variables */\n\n/** @defgroup  AON_Global_Variables\n *  @{\n */\n\n/*@} end of group AON_Global_Variables */\n\n/** @defgroup  AON_Private_Fun_Declaration\n *  @{\n */\n\n/*@} end of group AON_Private_Fun_Declaration */\n\n/** @defgroup  AON_Private_Functions\n *  @{\n */\n\n/*@} end of group AON_Private_Functions */\n\n/** @defgroup  AON_Public_Functions\n *  @{\n */\n\n/****************************************************************************/ /**\n                                                                                * @brief  Power on MXX band gap\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\n#ifndef BFLB_USE_ROM_DRIVER\n__WEAK BL_Err_Type ATTR_CLOCK_SECTION AON_Power_On_MBG(void) {\n  uint32_t tmpVal = 0;\n\n  /* Power up RF for PLL to work */\n  tmpVal = BL_RD_REG(AON_BASE, AON_RF_TOP_AON);\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_PU_MBG_AON);\n  BL_WR_REG(AON_BASE, AON_RF_TOP_AON, tmpVal);\n\n  BL702_Delay_US(55);\n\n  return SUCCESS;\n}\n#endif\n\n/****************************************************************************/ /**\n                                                                                * @brief  Power off MXX band gap\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\n#ifndef BFLB_USE_ROM_DRIVER\n__WEAK BL_Err_Type ATTR_CLOCK_SECTION AON_Power_Off_MBG(void) {\n  uint32_t tmpVal = 0;\n\n  /* Power OFF */\n  tmpVal = BL_RD_REG(AON_BASE, AON_RF_TOP_AON);\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_PU_MBG_AON);\n  BL_WR_REG(AON_BASE, AON_RF_TOP_AON, tmpVal);\n\n  return SUCCESS;\n}\n#endif\n\n/****************************************************************************/ /**\n                                                                                * @brief  Power on XTAL\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\n#ifndef BFLB_USE_ROM_DRIVER\n__WEAK BL_Err_Type ATTR_CLOCK_SECTION AON_Power_On_XTAL(void) {\n  uint32_t tmpVal  = 0;\n  uint32_t timeOut = 0;\n\n  tmpVal = BL_RD_REG(AON_BASE, AON_RF_TOP_AON);\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_PU_XTAL_AON);\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_PU_XTAL_BUF_AON);\n  BL_WR_REG(AON_BASE, AON_RF_TOP_AON, tmpVal);\n\n  /* Polling for ready */\n  do {\n    BL702_Delay_US(10);\n    timeOut++;\n    tmpVal = BL_RD_REG(AON_BASE, AON_TSEN);\n  } while (!BL_IS_REG_BIT_SET(tmpVal, AON_XTAL_RDY) && timeOut < 120);\n\n  if (timeOut >= 120) {\n    return TIMEOUT;\n  }\n\n  return SUCCESS;\n}\n#endif\n\n/****************************************************************************/ /**\n                                                                                * @brief  Set XTAL cap code\n                                                                                *\n                                                                                * @param  capIn: Cap code in\n                                                                                * @param  capOut: Cap code out\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\n#ifndef BFLB_USE_ROM_DRIVER\n__WEAK BL_Err_Type ATTR_CLOCK_SECTION AON_Set_Xtal_CapCode(uint8_t capIn, uint8_t capOut) {\n  uint32_t tmpVal = 0;\n\n  tmpVal = BL_RD_REG(AON_BASE, AON_XTAL_CFG);\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_XTAL_CAPCODE_IN_AON, capIn);\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_XTAL_CAPCODE_OUT_AON, capOut);\n  BL_WR_REG(AON_BASE, AON_XTAL_CFG, tmpVal);\n\n  BL702_Delay_US(100);\n\n  return SUCCESS;\n}\n#endif\n\n/****************************************************************************/ /**\n                                                                                * @brief  Get XTAL cap code\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return Cap code\n                                                                                *\n                                                                                *******************************************************************************/\nuint8_t ATTR_CLOCK_SECTION AON_Get_Xtal_CapCode(void) {\n  uint32_t tmpVal = 0;\n\n  tmpVal = BL_RD_REG(AON_BASE, AON_XTAL_CFG);\n\n  return BL_GET_REG_BITS_VAL(tmpVal, AON_XTAL_CAPCODE_IN_AON);\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Set XTAL cap code\n                                                                                *\n                                                                                * @param  extra: cap cpde extra aon\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type ATTR_CLOCK_SECTION AON_Set_Xtal_CapCode_Extra(uint8_t extra) {\n  uint32_t tmpVal = 0;\n\n  tmpVal = BL_RD_REG(AON_BASE, AON_XTAL_CFG);\n  if (extra) {\n    tmpVal = BL_SET_REG_BIT(tmpVal, AON_XTAL_CAPCODE_EXTRA_AON);\n  } else {\n    tmpVal = BL_CLR_REG_BIT(tmpVal, AON_XTAL_CAPCODE_EXTRA_AON);\n  }\n  BL_WR_REG(AON_BASE, AON_XTAL_CFG, tmpVal);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Power off XTAL\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\n#ifndef BFLB_USE_ROM_DRIVER\n__WEAK BL_Err_Type ATTR_CLOCK_SECTION AON_Power_Off_XTAL(void) {\n  uint32_t tmpVal = 0;\n\n  tmpVal = BL_RD_REG(AON_BASE, AON_RF_TOP_AON);\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_PU_XTAL_AON);\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_PU_XTAL_BUF_AON);\n  BL_WR_REG(AON_BASE, AON_RF_TOP_AON, tmpVal);\n\n  return SUCCESS;\n}\n#endif\n\n/****************************************************************************/ /**\n                                                                                * @brief  Power on bandgap system\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type ATTR_TCM_SECTION AON_Power_On_BG(void) {\n  uint32_t tmpVal = 0;\n\n  /* power up RF for PLL to work */\n  tmpVal = BL_RD_REG(AON_BASE, AON_BG_SYS_TOP);\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_PU_BG_SYS_AON);\n  BL_WR_REG(AON_BASE, AON_BG_SYS_TOP, tmpVal);\n\n  BL702_Delay_US(55);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Power off bandgap system\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type ATTR_TCM_SECTION AON_Power_Off_BG(void) {\n  uint32_t tmpVal = 0;\n\n  /* power up RF for PLL to work */\n  tmpVal = BL_RD_REG(AON_BASE, AON_BG_SYS_TOP);\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_PU_BG_SYS_AON);\n  BL_WR_REG(AON_BASE, AON_BG_SYS_TOP, tmpVal);\n\n  BL702_Delay_US(55);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Power on LDO11\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type ATTR_TCM_SECTION AON_Power_On_LDO11_SOC(void) {\n  uint32_t tmpVal = 0;\n\n  tmpVal = BL_RD_REG(AON_BASE, AON_LDO11SOC_AND_DCTEST);\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_PU_LDO11SOC_AON);\n  BL_WR_REG(AON_BASE, AON_LDO11SOC_AND_DCTEST, tmpVal);\n\n  BL702_Delay_US(55);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Power off LDO11\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type ATTR_TCM_SECTION AON_Power_Off_LDO11_SOC(void) {\n  uint32_t tmpVal = 0;\n\n  tmpVal = BL_RD_REG(AON_BASE, AON_LDO11SOC_AND_DCTEST);\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_PU_LDO11SOC_AON);\n  BL_WR_REG(AON_BASE, AON_LDO11SOC_AND_DCTEST, tmpVal);\n\n  BL702_Delay_US(55);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Power on LDO15_RF\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type ATTR_TCM_SECTION AON_Power_On_LDO15_RF(void) {\n  uint32_t tmpVal = 0;\n\n  /* ldo15rf power on */\n  tmpVal = BL_RD_REG(AON_BASE, AON_RF_TOP_AON);\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_PU_LDO15RF_AON);\n  BL_WR_REG(AON_BASE, AON_RF_TOP_AON, tmpVal);\n\n  BL702_Delay_US(90);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Power off LDO15_RF\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type ATTR_TCM_SECTION AON_Power_Off_LDO15_RF(void) {\n  uint32_t tmpVal = 0;\n\n  /* ldo15rf power off */\n  tmpVal = BL_RD_REG(AON_BASE, AON_RF_TOP_AON);\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_PU_LDO15RF_AON);\n  BL_WR_REG(AON_BASE, AON_RF_TOP_AON, tmpVal);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  power on source follow regular\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type ATTR_TCM_SECTION AON_Power_On_SFReg(void) {\n  uint32_t tmpVal = 0;\n\n  /* power on sfreg */\n  tmpVal = BL_RD_REG(AON_BASE, AON_RF_TOP_AON);\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_PU_SFREG_AON);\n  BL_WR_REG(AON_BASE, AON_RF_TOP_AON, tmpVal);\n\n  BL702_Delay_US(10);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  power off source follow regular\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type ATTR_TCM_SECTION AON_Power_Off_SFReg(void) {\n  uint32_t tmpVal = 0;\n\n  /* power off sfreg */\n  tmpVal = BL_RD_REG(AON_BASE, AON_RF_TOP_AON);\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_PU_SFREG_AON);\n  BL_WR_REG(AON_BASE, AON_RF_TOP_AON, tmpVal);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Power off the power can be shut down in PDS0\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type ATTR_TCM_SECTION AON_LowPower_Enter_PDS0(void) {\n  uint32_t tmpVal = 0;\n\n  /* power off bz */\n  tmpVal = BL_RD_REG(AON_BASE, AON_MISC);\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_SW_BZ_EN_AON);\n  BL_WR_REG(AON_BASE, AON_MISC, tmpVal);\n\n  tmpVal = BL_RD_REG(AON_BASE, AON_RF_TOP_AON);\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_PU_SFREG_AON);\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_PU_LDO15RF_AON);\n  tmpVal = BL_CLR_REG_BIT(tmpVal, AON_PU_MBG_AON);\n  BL_WR_REG(AON_BASE, AON_RF_TOP_AON, tmpVal);\n\n  /* gating Clock, no more use */\n  // tmpVal=BL_RD_REG(GLB_BASE,GLB_CGEN_CFG0);\n  // tmpVal=tmpVal&(~(1<<6));\n  // tmpVal=tmpVal&(~(1<<7));\n  // BL_WR_REG(GLB_BASE,GLB_CGEN_CFG0,tmpVal);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Power on the power powered down in PDS0\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type ATTR_TCM_SECTION AON_LowPower_Exit_PDS0(void) {\n  uint32_t tmpVal = 0;\n\n  tmpVal = BL_RD_REG(AON_BASE, AON_RF_TOP_AON);\n\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_PU_MBG_AON);\n  BL_WR_REG(AON_BASE, AON_RF_TOP_AON, tmpVal);\n\n  BL702_Delay_US(20);\n\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_PU_LDO15RF_AON);\n  BL_WR_REG(AON_BASE, AON_RF_TOP_AON, tmpVal);\n\n  BL702_Delay_US(60);\n\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_PU_SFREG_AON);\n  BL_WR_REG(AON_BASE, AON_RF_TOP_AON, tmpVal);\n\n  BL702_Delay_US(20);\n\n  /* power on bz */\n  tmpVal = BL_RD_REG(AON_BASE, AON_MISC);\n  tmpVal = BL_SET_REG_BIT(tmpVal, AON_SW_BZ_EN_AON);\n  BL_WR_REG(AON_BASE, AON_MISC, tmpVal);\n\n  /* ungating Clock, no more use */\n  // tmpVal=BL_RD_REG(GLB_BASE,GLB_CGEN_CFG0);\n  // tmpVal=tmpVal|((1<<6));\n  // tmpVal=tmpVal|((1<<7));\n  // BL_WR_REG(GLB_BASE,GLB_CGEN_CFG0,tmpVal);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Power on the power powered down in PDS0\n                                                                                *\n                                                                                * @param  delay: None\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type ATTR_TCM_SECTION AON_Set_LDO11_SOC_Sstart_Delay(uint8_t delay) {\n  uint32_t tmpVal = 0;\n\n  CHECK_PARAM((delay <= 0x3));\n\n  /* config ldo11soc_sstart_delay_aon */\n  tmpVal = BL_RD_REG(AON_BASE, AON_LDO11SOC_AND_DCTEST);\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_LDO11SOC_SSTART_DELAY_AON, delay);\n  BL_WR_REG(AON_BASE, AON_LDO11SOC_AND_DCTEST, tmpVal);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief\n                                                                                *\n                                                                                * @param\n                                                                                *\n                                                                                * @return\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type AON_Set_DCDC18_Top_0(uint8_t voutSel, uint8_t vpfm) {\n  uint32_t tmpVal = 0;\n\n  tmpVal = BL_RD_REG(AON_BASE, AON_DCDC18_TOP_0);\n  // dcdc18_vout_sel_aon, 1.425V*1.05=1.5V\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_DCDC18_VOUT_SEL_AON, voutSel);\n  // dcdc18_vpfm_aon\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_DCDC18_VPFM_AON, vpfm);\n  BL_WR_REG(AON_BASE, AON_DCDC18_TOP_0, tmpVal);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief\n                                                                                *\n                                                                                * @param\n                                                                                *\n                                                                                * @return\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type AON_Set_Xtal_Cfg(uint8_t gmBoost, uint8_t ampCtrl, uint8_t fastStartup) {\n  uint32_t tmpVal = 0;\n\n  tmpVal = BL_RD_REG(AON_BASE, AON_XTAL_CFG);\n  // xtal_gm_boost\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_XTAL_GM_BOOST_AON, gmBoost);\n  // xtal_amp_ctrl\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_XTAL_AMP_CTRL_AON, ampCtrl);\n  // xtal_fast_startup\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, AON_XTAL_FAST_STARTUP_AON, fastStartup);\n  BL_WR_REG(AON_BASE, AON_XTAL_CFG, tmpVal);\n\n  return SUCCESS;\n}\n\n/*@} end of group AON_Public_Functions */\n\n/*@} end of group AON */\n\n/*@} end of group BL702_Peripheral_Driver */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_cam.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_cam.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_cam.h\"\r\n#include \"bl702.h\"\r\n#include \"bl702_glb.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  CAM\r\n *  @{\r\n */\r\n\r\n/** @defgroup  CAM_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group CAM_Private_Macros */\r\n\r\n/** @defgroup  CAM_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group CAM_Private_Types */\r\n\r\n/** @defgroup  CAM_Private_Variables\r\n *  @{\r\n */\r\nstatic intCallback_Type *camIntCbfArra[CAM_INT_ALL] = {NULL};\r\n\r\n/*@} end of group CAM_Private_Variables */\r\n\r\n/** @defgroup  CAM_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group CAM_Global_Variables */\r\n\r\n/** @defgroup  CAM_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group CAM_Private_Fun_Declaration */\r\n\r\n/** @defgroup  CAM_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group CAM_Private_Functions */\r\n\r\n/** @defgroup  CAM_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Camera module init\r\n                                                                                *\r\n                                                                                * @param  cfg: Camera configuration structure pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_Init(CAM_CFG_Type *cfg) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_CAM_SW_MODE_TYPE(cfg->swMode));\r\n  CHECK_PARAM(IS_CAM_FRAME_MODE_TYPE(cfg->frameMode));\r\n  CHECK_PARAM(IS_CAM_YUV_MODE_TYPE(cfg->yuvMode));\r\n  CHECK_PARAM(IS_CAM_FRAME_ACTIVE_POL(cfg->framePol));\r\n  CHECK_PARAM(IS_CAM_LINE_ACTIVE_POL(cfg->linePol));\r\n  CHECK_PARAM(IS_CAM_BURST_TYPE(cfg->burstType));\r\n  CHECK_PARAM(IS_CAM_SENSOR_MODE_TYPE(cfg->camSensorMode));\r\n\r\n  /* Disable clock gate */\r\n  GLB_AHB_Slave1_Clock_Gate(DISABLE, BL_AHB_SLAVE1_CAM);\r\n\r\n  /* Set camera configuration */\r\n  tmpVal = BL_RD_REG(CAM_BASE, CAM_DVP2AXI_CONFIGUE);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_DVP_ENABLE);\r\n  BL_WR_REG(CAM_BASE, CAM_DVP2AXI_CONFIGUE, tmpVal);\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, CAM_REG_SW_MODE, cfg->swMode);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, CAM_REG_INTERLV_MODE, cfg->frameMode);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, CAM_REG_FRAM_VLD_POL, cfg->framePol);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, CAM_REG_LINE_VLD_POL, cfg->linePol);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, CAM_REG_HBURST, cfg->burstType);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, CAM_REG_DVP_MODE, cfg->camSensorMode);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, CAM_REG_DVP_WAIT_CYCLE, cfg->waitCount);\r\n\r\n  switch (cfg->yuvMode) {\r\n  case CAM_YUV422:\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_DROP_EN);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_SUBSAMPLE_EN);\r\n    break;\r\n\r\n  case CAM_YUV420_EVEN:\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_DROP_EN);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_SUBSAMPLE_EN);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_SUBSAMPLE_EVEN);\r\n    break;\r\n\r\n  case CAM_YUV420_ODD:\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_DROP_EN);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_SUBSAMPLE_EN);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_SUBSAMPLE_EVEN);\r\n    break;\r\n\r\n  case CAM_YUV400_EVEN:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_DROP_EN);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_DROP_EVEN);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_SUBSAMPLE_EN);\r\n    break;\r\n\r\n  case CAM_YUV400_ODD:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_DROP_EN);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_DROP_EVEN);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_SUBSAMPLE_EN);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  BL_WR_REG(CAM_BASE, CAM_DVP2AXI_CONFIGUE, tmpVal);\r\n\r\n  /* Set frame count to issue interrupt at sw mode */\r\n  tmpVal = BL_RD_REG(CAM_BASE, CAM_INT_CONTROL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, CAM_REG_FRAME_CNT_TRGR_INT, cfg->swIntCnt);\r\n  BL_WR_REG(CAM_BASE, CAM_INT_CONTROL, tmpVal);\r\n\r\n  /* Set camera memory start address, memory size and frame size in burst */\r\n  BL_WR_REG(CAM_BASE, CAM_DVP2AHB_ADDR_START_0, cfg->memStart0 & 0xFFFFFFF0);\r\n\r\n  if (cfg->burstType == CAM_BURST_TYPE_SINGLE) {\r\n    BL_WR_REG(CAM_BASE, CAM_DVP2AHB_MEM_BCNT_0, cfg->memSize0 / 4);\r\n    BL_WR_REG(CAM_BASE, CAM_DVP2AHB_FRAME_BCNT_0, cfg->frameSize0 / 4);\r\n  } else if (cfg->burstType == CAM_BURST_TYPE_INCR4) {\r\n    BL_WR_REG(CAM_BASE, CAM_DVP2AHB_MEM_BCNT_0, cfg->memSize0 / 16);\r\n    BL_WR_REG(CAM_BASE, CAM_DVP2AHB_FRAME_BCNT_0, cfg->frameSize0 / 16);\r\n  } else if (cfg->burstType == CAM_BURST_TYPE_INCR8) {\r\n    BL_WR_REG(CAM_BASE, CAM_DVP2AHB_MEM_BCNT_0, cfg->memSize0 / 32);\r\n    BL_WR_REG(CAM_BASE, CAM_DVP2AHB_FRAME_BCNT_0, cfg->frameSize0 / 32);\r\n  } else if (cfg->burstType == CAM_BURST_TYPE_INCR16) {\r\n    BL_WR_REG(CAM_BASE, CAM_DVP2AHB_MEM_BCNT_0, cfg->memSize0 / 64);\r\n    BL_WR_REG(CAM_BASE, CAM_DVP2AHB_FRAME_BCNT_0, cfg->frameSize0 / 64);\r\n  }\r\n\r\n  if (!cfg->frameMode) {\r\n    BL_WR_REG(CAM_BASE, CAM_DVP2AHB_ADDR_START_1, cfg->memStart1 & 0xFFFFFFF0);\r\n\r\n    if (cfg->burstType == CAM_BURST_TYPE_SINGLE) {\r\n      BL_WR_REG(CAM_BASE, CAM_DVP2AHB_MEM_BCNT_1, cfg->memSize1 / 4);\r\n      BL_WR_REG(CAM_BASE, CAM_DVP2AHB_FRAME_BCNT_1, cfg->frameSize1 / 4);\r\n    } else if (cfg->burstType == CAM_BURST_TYPE_INCR4) {\r\n      BL_WR_REG(CAM_BASE, CAM_DVP2AHB_MEM_BCNT_1, cfg->memSize1 / 16);\r\n      BL_WR_REG(CAM_BASE, CAM_DVP2AHB_FRAME_BCNT_1, cfg->frameSize1 / 16);\r\n    } else if (cfg->burstType == CAM_BURST_TYPE_INCR8) {\r\n      BL_WR_REG(CAM_BASE, CAM_DVP2AHB_MEM_BCNT_1, cfg->memSize1 / 32);\r\n      BL_WR_REG(CAM_BASE, CAM_DVP2AHB_FRAME_BCNT_1, cfg->frameSize1 / 32);\r\n    } else if (cfg->burstType == CAM_BURST_TYPE_INCR16) {\r\n      BL_WR_REG(CAM_BASE, CAM_DVP2AHB_MEM_BCNT_1, cfg->memSize1 / 64);\r\n      BL_WR_REG(CAM_BASE, CAM_DVP2AHB_FRAME_BCNT_1, cfg->frameSize1 / 64);\r\n    }\r\n  }\r\n\r\n  /* Clear interrupt */\r\n  BL_WR_REG(CAM_BASE, CAM_DVP_FRAME_FIFO_POP, 0xFFFF0);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(CAM_IRQn, CAM_IRQHandler);\r\n#endif\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Deinit camera module\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_Deinit(void) {\r\n  // GLB_AHB_Slave1_Reset(BL_AHB_SLAVE1_CAM);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable camera module\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Enable camera module */\r\n  tmpVal = BL_RD_REG(CAM_BASE, CAM_DVP2AXI_CONFIGUE);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_DVP_ENABLE);\r\n  BL_WR_REG(CAM_BASE, CAM_DVP2AXI_CONFIGUE, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable camera module\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Disable camera module */\r\n  tmpVal = BL_RD_REG(CAM_BASE, CAM_DVP2AXI_CONFIGUE);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_DVP_ENABLE);\r\n  BL_WR_REG(CAM_BASE, CAM_DVP2AXI_CONFIGUE, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Camera clock gate function\r\n                                                                                *\r\n                                                                                * @param  enable: Enable or disable\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_Clock_Gate(BL_Fun_Type enable) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(CAM_BASE, CAM_DVP2AXI_CONFIGUE);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, CAM_REG_DVP_PIX_CLK_CG, enable);\r\n  BL_WR_REG(CAM_BASE, CAM_DVP2AXI_CONFIGUE, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Camera hsync crop function\r\n                                                                                *\r\n                                                                                * @param  start: Valid hsync start count\r\n                                                                                * @param  end: Valid hsync end count\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_Hsync_Crop(uint16_t start, uint16_t end) { BL_WR_REG(CAM_BASE, CAM_HSYNC_CONTROL, (start << 16) + end); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Camera vsync crop function\r\n                                                                                *\r\n                                                                                * @param  start: Valid vsync start count\r\n                                                                                * @param  end: Valid vsync end count\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_Vsync_Crop(uint16_t start, uint16_t end) { BL_WR_REG(CAM_BASE, CAM_VSYNC_CONTROL, (start << 16) + end); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Camera set total valid pix count in a line function\r\n                                                                                *\r\n                                                                                * @param  count: Count value\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_Set_Hsync_Total_Count(uint16_t count) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(CAM_BASE, CAM_FRAME_SIZE_CONTROL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, CAM_REG_TOTAL_HCNT, count);\r\n  BL_WR_REG(CAM_BASE, CAM_FRAME_SIZE_CONTROL, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Camera set total valid line count in a frame function\r\n                                                                                *\r\n                                                                                * @param  count: Count value\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_Set_Vsync_Total_Count(uint16_t count) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(CAM_BASE, CAM_FRAME_SIZE_CONTROL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, CAM_REG_TOTAL_VCNT, count);\r\n  BL_WR_REG(CAM_BASE, CAM_FRAME_SIZE_CONTROL, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get one camera frame in interleave mode\r\n                                                                                *\r\n                                                                                * @param  info: Interleave mode camera frame infomation pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_Interleave_Get_Frame_Info(CAM_Interleave_Frame_Info *info) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(CAM_BASE, CAM_DVP_STATUS_AND_ERROR);\r\n\r\n  info->validFrames   = BL_GET_REG_BITS_VAL(tmpVal, CAM_FRAME_VALID_CNT_0);\r\n  info->curFrameAddr  = BL_RD_REG(CAM_BASE, CAM_FRAME_START_ADDR0_0);\r\n  info->curFrameBytes = BL_RD_REG(CAM_BASE, CAM_FRAME_BYTE_CNT0_0);\r\n  info->status        = tmpVal;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get one camera frame in planar mode\r\n                                                                                *\r\n                                                                                * @param  info: Planar mode camera frame infomation pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_Planar_Get_Frame_Info(CAM_Planar_Frame_Info *info) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(CAM_BASE, CAM_DVP_STATUS_AND_ERROR);\r\n\r\n  info->validFrames0   = BL_GET_REG_BITS_VAL(tmpVal, CAM_FRAME_VALID_CNT_0);\r\n  info->validFrames1   = BL_GET_REG_BITS_VAL(tmpVal, CAM_FRAME_VALID_CNT_1);\r\n  info->curFrameAddr0  = BL_RD_REG(CAM_BASE, CAM_FRAME_START_ADDR0_0);\r\n  info->curFrameAddr1  = BL_RD_REG(CAM_BASE, CAM_FRAME_START_ADDR1_0);\r\n  info->curFrameBytes0 = BL_RD_REG(CAM_BASE, CAM_FRAME_BYTE_CNT0_0);\r\n  info->curFrameBytes1 = BL_RD_REG(CAM_BASE, CAM_FRAME_BYTE_CNT1_0);\r\n  info->status         = tmpVal;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get available count 0 of frames\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return Frames count\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint8_t CAM_Get_Frame_Count_0(void) { return BL_GET_REG_BITS_VAL(BL_RD_REG(CAM_BASE, CAM_DVP_STATUS_AND_ERROR), CAM_FRAME_VALID_CNT_0); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get available count 1 of frames\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return Frames count\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint8_t CAM_Get_Frame_Count_1(void) { return BL_GET_REG_BITS_VAL(BL_RD_REG(CAM_BASE, CAM_DVP_STATUS_AND_ERROR), CAM_FRAME_VALID_CNT_1); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Pop one camera frame in interleave mode\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_Interleave_Pop_Frame(void) {\r\n  /* Pop one frame */\r\n  BL_WR_REG(CAM_BASE, CAM_DVP_FRAME_FIFO_POP, 1);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Pop one camera frame in planar mode\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_Planar_Pop_Frame(void) {\r\n  /* Pop one frame */\r\n  BL_WR_REG(CAM_BASE, CAM_DVP_FRAME_FIFO_POP, 3);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  CAMERA Enable Disable Interrupt\r\n                                                                                *\r\n                                                                                * @param  intType: CAMERA Interrupt Type\r\n                                                                                * @param  intMask: Enable or Disable\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_IntMask(CAM_INT_Type intType, BL_Mask_Type intMask) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_CAM_INT_TYPE(intType));\r\n  CHECK_PARAM(IS_BL_MASK_TYPE(intMask));\r\n\r\n  tmpVal = BL_RD_REG(CAM_BASE, CAM_INT_CONTROL);\r\n\r\n  switch (intType) {\r\n  case CAM_INT_NORMAL_0:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_NORMAL_0_EN);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_INT_NORMAL_0_EN);\r\n    }\r\n\r\n    break;\r\n\r\n  case CAM_INT_NORMAL_1:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_NORMAL_1_EN);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_INT_NORMAL_1_EN);\r\n    }\r\n\r\n    break;\r\n\r\n  case CAM_INT_MEMORY_OVERWRITE_0:\r\n  case CAM_INT_MEMORY_OVERWRITE_1:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_MEM_EN);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_INT_MEM_EN);\r\n    }\r\n\r\n    break;\r\n\r\n  case CAM_INT_FRAME_OVERWRITE_0:\r\n  case CAM_INT_FRAME_OVERWRITE_1:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_FRAME_EN);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_INT_FRAME_EN);\r\n    }\r\n\r\n    break;\r\n\r\n  case CAM_INT_FIFO_OVERWRITE_0:\r\n  case CAM_INT_FIFO_OVERWRITE_1:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_FIFO_EN);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_INT_FIFO_EN);\r\n    }\r\n\r\n    break;\r\n\r\n  case CAM_INT_VSYNC_CNT_ERROR:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_VCNT_EN);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_INT_VCNT_EN);\r\n    }\r\n\r\n    break;\r\n\r\n  case CAM_INT_HSYNC_CNT_ERROR:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_HCNT_EN);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, CAM_REG_INT_HCNT_EN);\r\n    }\r\n\r\n    break;\r\n\r\n  case CAM_INT_ALL:\r\n    if (intMask == UNMASK) {\r\n      /* Enable all interrupt */\r\n      tmpVal |= 0x7F;\r\n    } else {\r\n      /* Disable all interrupt */\r\n      tmpVal &= 0xFFFFFF80;\r\n    }\r\n\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  BL_WR_REG(CAM_BASE, CAM_INT_CONTROL, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  CAMERA Interrupt Clear\r\n                                                                                *\r\n                                                                                * @param  intType: CAMERA Interrupt Type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_IntClr(CAM_INT_Type intType) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(CAM_BASE, CAM_DVP_FRAME_FIFO_POP);\r\n\r\n  switch (intType) {\r\n  case CAM_INT_NORMAL_0:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_NORMAL_CLR_0);\r\n    break;\r\n\r\n  case CAM_INT_NORMAL_1:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_NORMAL_CLR_1);\r\n    break;\r\n\r\n  case CAM_INT_MEMORY_OVERWRITE_0:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_MEM_CLR_0);\r\n    break;\r\n\r\n  case CAM_INT_MEMORY_OVERWRITE_1:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_MEM_CLR_1);\r\n    break;\r\n\r\n  case CAM_INT_FRAME_OVERWRITE_0:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_FRAME_CLR_0);\r\n    break;\r\n\r\n  case CAM_INT_FRAME_OVERWRITE_1:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_FRAME_CLR_1);\r\n    break;\r\n\r\n  case CAM_INT_FIFO_OVERWRITE_0:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_FIFO_CLR_0);\r\n    break;\r\n\r\n  case CAM_INT_FIFO_OVERWRITE_1:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_FIFO_CLR_1);\r\n    break;\r\n\r\n  case CAM_INT_VSYNC_CNT_ERROR:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_VCNT_CLR_0);\r\n    break;\r\n\r\n  case CAM_INT_HSYNC_CNT_ERROR:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, CAM_REG_INT_HCNT_CLR_0);\r\n    break;\r\n\r\n  case CAM_INT_ALL:\r\n    tmpVal = 0xFFFF0;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  BL_WR_REG(CAM_BASE, CAM_DVP_FRAME_FIFO_POP, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Install camera interrupt callback function\r\n                                                                                *\r\n                                                                                * @param  intType: CAMERA interrupt type\r\n                                                                                * @param  cbFun: Pointer to interrupt callback function. The type should be void (*fn)(void)\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_Int_Callback_Install(CAM_INT_Type intType, intCallback_Type *cbFun) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_CAM_INT_TYPE(intType));\r\n\r\n  camIntCbfArra[intType] = cbFun;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  CAM hardware mode with frame start address wrap to memory address start function enable or disable\r\n                                                                                *\r\n                                                                                * @param  enable: Enable or disable\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid CAM_HW_Mode_Wrap(BL_Fun_Type enable) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(CAM_BASE, CAM_DVP2AXI_CONFIGUE);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, CAM_REG_HW_MODE_FWRAP, enable);\r\n  BL_WR_REG(CAM_BASE, CAM_DVP2AXI_CONFIGUE, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Camera interrupt handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid CAM_IRQHandler(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(CAM_BASE, CAM_DVP_STATUS_AND_ERROR);\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, CAM_STS_NORMAL_INT_0)) {\r\n    CAM_IntClr(CAM_INT_NORMAL_0);\r\n\r\n    if (camIntCbfArra[CAM_INT_NORMAL_0] != NULL) {\r\n      /* call the callback function */\r\n      camIntCbfArra[CAM_INT_NORMAL_0]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, CAM_STS_NORMAL_INT_1)) {\r\n    CAM_IntClr(CAM_INT_NORMAL_1);\r\n\r\n    if (camIntCbfArra[CAM_INT_NORMAL_1] != NULL) {\r\n      /* call the callback function */\r\n      camIntCbfArra[CAM_INT_NORMAL_1]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, CAM_STS_MEM_INT_0)) {\r\n    CAM_IntClr(CAM_INT_MEMORY_OVERWRITE_0);\r\n\r\n    if (camIntCbfArra[CAM_INT_MEMORY_OVERWRITE_0] != NULL) {\r\n      /* call the callback function */\r\n      camIntCbfArra[CAM_INT_MEMORY_OVERWRITE_0]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, CAM_STS_MEM_INT_1)) {\r\n    CAM_IntClr(CAM_INT_MEMORY_OVERWRITE_1);\r\n\r\n    if (camIntCbfArra[CAM_INT_MEMORY_OVERWRITE_1] != NULL) {\r\n      /* call the callback function */\r\n      camIntCbfArra[CAM_INT_MEMORY_OVERWRITE_1]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, CAM_STS_FRAME_INT_0)) {\r\n    CAM_IntClr(CAM_INT_FRAME_OVERWRITE_0);\r\n\r\n    if (camIntCbfArra[CAM_INT_FRAME_OVERWRITE_0] != NULL) {\r\n      /* call the callback function */\r\n      camIntCbfArra[CAM_INT_FRAME_OVERWRITE_0]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, CAM_STS_FRAME_INT_1)) {\r\n    CAM_IntClr(CAM_INT_FRAME_OVERWRITE_1);\r\n\r\n    if (camIntCbfArra[CAM_INT_FRAME_OVERWRITE_1] != NULL) {\r\n      /* call the callback function */\r\n      camIntCbfArra[CAM_INT_FRAME_OVERWRITE_1]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, CAM_STS_FIFO_INT_0)) {\r\n    CAM_IntClr(CAM_INT_FIFO_OVERWRITE_0);\r\n\r\n    if (camIntCbfArra[CAM_INT_FIFO_OVERWRITE_0] != NULL) {\r\n      /* call the callback function */\r\n      camIntCbfArra[CAM_INT_FIFO_OVERWRITE_0]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, CAM_STS_FIFO_INT_1)) {\r\n    CAM_IntClr(CAM_INT_FIFO_OVERWRITE_1);\r\n\r\n    if (camIntCbfArra[CAM_INT_FIFO_OVERWRITE_1] != NULL) {\r\n      /* call the callback function */\r\n      camIntCbfArra[CAM_INT_FIFO_OVERWRITE_1]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, CAM_STS_HCNT_INT)) {\r\n    CAM_IntClr(CAM_INT_HSYNC_CNT_ERROR);\r\n\r\n    if (camIntCbfArra[CAM_INT_HSYNC_CNT_ERROR] != NULL) {\r\n      /* call the callback function */\r\n      camIntCbfArra[CAM_INT_HSYNC_CNT_ERROR]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, CAM_STS_VCNT_INT)) {\r\n    CAM_IntClr(CAM_INT_VSYNC_CNT_ERROR);\r\n\r\n    if (camIntCbfArra[CAM_INT_VSYNC_CNT_ERROR] != NULL) {\r\n      /* call the callback function */\r\n      camIntCbfArra[CAM_INT_VSYNC_CNT_ERROR]();\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/*@} end of group CAM_Public_Functions */\r\n\r\n/*@} end of group CAM */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_clock.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_clock.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_clock.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  CLOCK\r\n *  @{\r\n */\r\n\r\n/** @defgroup  CLOCK_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group CLOCK_Private_Macros */\r\n\r\n/** @defgroup  CLOCK_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group CLOCK_Private_Types */\r\n\r\n/** @defgroup  CLOCK_Private_Variables\r\n *  @{\r\n */\r\nstatic Clock_Cfg_Type clkCfg;\r\n\r\n/*@} end of group CLOCK_Private_Variables */\r\n\r\n/** @defgroup  CLOCK_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group CLOCK_Global_Variables */\r\n\r\n/** @defgroup  CLOCK_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group CLOCK_Private_Fun_Declaration */\r\n\r\n/** @defgroup  CLOCK_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group CLOCK_Private_Functions */\r\n\r\n/** @defgroup  CLOCK_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set System Clock\r\n                                                                                *\r\n                                                                                * @param  type: System clock type\r\n                                                                                * @param  clock: System clock value\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Clock_System_Clock_Set(BL_System_Clock_Type type, uint32_t clock) {\r\n  if (type < BL_SYSTEM_CLOCK_MAX) {\r\n    clkCfg.systemClock[type] = clock / 1000000;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set Peripheral Clock\r\n                                                                                *\r\n                                                                                * @param  type: Peripheral clock type\r\n                                                                                * @param  clock: Peripheral clock value\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Clock_Peripheral_Clock_Set(BL_AHB_Slave1_Type type, uint32_t clock) {\r\n  if (type < BL_AHB_SLAVE1_MAX) {\r\n    if (type == BL_AHB_SLAVE1_I2S) {\r\n      clkCfg.i2sClock = clock;\r\n    } else {\r\n      clkCfg.peripheralClock[type] = clock / 1000000;\r\n    }\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get System Clock\r\n                                                                                *\r\n                                                                                * @param  type: System clock type\r\n                                                                                *\r\n                                                                                * @return System clock value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t Clock_System_Clock_Get(BL_System_Clock_Type type) {\r\n  if (type < BL_SYSTEM_CLOCK_MAX) {\r\n    return clkCfg.systemClock[type] * 1000000;\r\n  }\r\n\r\n  return 0;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get Peripheral Clock\r\n                                                                                *\r\n                                                                                * @param  type: Peripheral clock type\r\n                                                                                *\r\n                                                                                * @return Peripheral clock value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t Clock_Peripheral_Clock_Get(BL_AHB_Slave1_Type type) {\r\n  if (type < BL_AHB_SLAVE1_MAX) {\r\n    if (type == BL_AHB_SLAVE1_I2S) {\r\n      return clkCfg.i2sClock;\r\n    } else {\r\n      return clkCfg.peripheralClock[type] * 1000000;\r\n    }\r\n  }\r\n\r\n  return 0;\r\n}\r\n\r\n/*@} end of group CLOCK_Public_Functions */\r\n\r\n/*@} end of group CLOCK */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_common.c",
    "content": "/**\n ******************************************************************************\n * @file    bl702_common.c\n * @version V1.0\n * @date\n * @brief   This file is the standard driver c file\n ******************************************************************************\n * @attention\n *\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n *   1. Redistributions of source code must retain the above copyright notice,\n *      this list of conditions and the following disclaimer.\n *   2. Redistributions in binary form must reproduce the above copyright notice,\n *      this list of conditions and the following disclaimer in the documentation\n *      and/or other materials provided with the distribution.\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n *      may be used to endorse or promote products derived from this software\n *      without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n ******************************************************************************\n */\n#include \"bl702_common.h\"\n#include \"l1c_reg.h\"\n\n/** @addtogroup  BL702_Periph_Driver\n *  @{\n */\n\n/****************************************************************************/ /**\n                                                                                * @brief      delay us\n                                                                                *\n                                                                                * @param[in]  core:  systemcoreclock\n                                                                                *\n                                                                                * @param[in]  cnt:  delay cnt us\n                                                                                *\n                                                                                * @return none\n                                                                                *\n                                                                                *******************************************************************************/\n#ifndef BFLB_USE_ROM_DRIVER\n#ifdef ARCH_ARM\n#ifndef __GNUC__\n__WEAK\n__ASM void ATTR_TCM_SECTION ASM_Delay_Us(uint32_t core, uint32_t cnt){\n    lsrs r0, #0x10 muls r0, r1, r0 mov r2, r0 lsrs r2, #0x04 lsrs r2, #0x03 cmp r2, #0x01 beq end cmp r2, #0x00 beq end loop mov r0, r0 mov r0, r0 mov r0, r0 mov r0, r0 mov r0, r0 subs r2, r2,\n# 0x01 cmp r2, #0x00 bne loop end bx lr\n}\n#else\n__WEAK\nvoid ATTR_TCM_SECTION ASM_Delay_Us(uint32_t core, uint32_t cnt) {\n  __asm__ __volatile__(\"lsr r0,#0x10\\n\\t\"\n                       \"mul r0,r1,r0\\n\\t\"\n                       \"mov r2,r0\\n\\t\"\n                       \"lsr r2,#0x04\\n\\t\"\n                       \"lsr r2,#0x03\\n\\t\"\n                       \"cmp r2,#0x01\\n\\t\"\n                       \"beq end\\n\\t\"\n                       \"cmp r2,#0x00\\n\\t\"\n                       \"beq end\\n\"\n                       \"loop :\"\n                       \"mov r0,r0\\n\\t\"\n                       \"mov r0,r0\\n\\t\"\n                       \"mov r0,r0\\n\\t\"\n                       \"mov r0,r0\\n\\t\"\n                       \"mov r0,r0\\n\\t\"\n                       \"sub r2,r2,#0x01\\n\\t\"\n                       \"cmp r2,#0x00\\n\\t\"\n                       \"bne loop\\n\"\n                       \"end :\"\n                       \"mov r0,r0\\n\\t\");\n}\n#endif\n#endif\n#ifdef ARCH_RISCV\n__WEAK void ATTR_TCM_SECTION ASM_Delay_Us(uint32_t core, uint32_t cnt) {\n  uint32_t codeAddress = 0;\n  uint32_t divVal      = 40;\n\n  codeAddress = (uint32_t)&ASM_Delay_Us;\n\n  /* 1M=100K*10, so multiple is 10 */\n  /* loop function take 4 instructions, so instructionNum is 4 */\n  /* if codeAddress locate at IROM space and irom_2t_access is 1, then irom2TAccess=2, else irom2TAccess=1 */\n  /* divVal = multiple*instructionNum*irom2TAccess */\n  if (((codeAddress & (0xF << 24)) >> 24) == 0x01) {\n    /* IROM space */\n    if (BL_GET_REG_BITS_VAL(BL_RD_REG(L1C_BASE, L1C_CONFIG), L1C_IROM_2T_ACCESS)) {\n      /* instruction 2T */\n      divVal = 80;\n    }\n  }\n\n  __asm__ __volatile__(\".align 4\\n\\t\"\n                       \"lw       a4,%1\\n\\t\"\n                       \"lui   a5,0x18\\n\\t\"\n                       \"addi  a5,a5,1696\\n\\t\"\n                       \"divu  a5,a4,a5\\n\\t\"\n                       \"sw       a5,%1\\n\\t\"\n                       \"lw       a4,%1\\n\\t\"\n                       \"lw       a5,%0\\n\\t\"\n                       \"mul   a5,a4,a5\\n\\t\"\n                       \"sw       a5,%1\\n\\t\"\n                       \"lw       a4,%1\\n\\t\"\n                       \"lw       a5,%2\\n\\t\"\n                       \"divu  a5,a4,a5\\n\\t\"\n                       \"sw    a5,%1\\n\\t\"\n                       \"lw    a5,%1\\n\\t\"\n                       \"li    a4,0x1\\n\\t\"\n                       \"beq   a5,zero,end\\n\\t\"\n                       \"beq   a5,a4,end\\n\\t\"\n                       \"nop\\n\\t\"\n                       \"nop\\n\\t\"\n                       \".align 4\\n\\t\"\n                       \"loop  :\\n\"\n                       \"addi  a4,a5,-1\\n\\t\"\n                       \"mv    a5,a4\\n\\t\"\n                       \"bnez  a5,loop\\n\\t\"\n                       \"nop\\n\\t\"\n                       \"end   :\\n\\t\"\n                       \"nop\\n\"\n                       :                                  /* output */\n                       : \"m\"(cnt), \"m\"(core), \"m\"(divVal) /* input */\n                       : \"t1\", \"a4\", \"a5\"                 /* destruct description */\n  );\n}\n#endif\n#endif\n\n/****************************************************************************/ /**\n                                                                                * @brief      delay us\n                                                                                *\n                                                                                * @param[in]  cnt:  delay cnt us\n                                                                                *\n                                                                                * @return none\n                                                                                *\n                                                                                *******************************************************************************/\n#ifndef BFLB_USE_ROM_DRIVER\n__WEAK\nvoid ATTR_TCM_SECTION BL702_Delay_US(uint32_t cnt) { ASM_Delay_Us(SystemCoreClockGet(), cnt); }\n#endif\n/****************************************************************************/ /**\n                                                                                * @brief      delay ms\n                                                                                *\n                                                                                * @param[in]  cnt:  delay cnt ms\n                                                                                *\n                                                                                * @return none\n                                                                                *\n                                                                                *******************************************************************************/\n#ifndef BFLB_USE_ROM_DRIVER\n__WEAK\nvoid ATTR_TCM_SECTION BL702_Delay_MS(uint32_t cnt) {\n  uint32_t i     = 0;\n  uint32_t count = 0;\n\n  if (cnt >= 1024) {\n    /* delay (n*1024) ms */\n    count = 1024;\n\n    for (i = 0; i < (cnt / 1024); i++) {\n      BL702_Delay_US(1024 * 1000);\n    }\n  }\n\n  if (cnt & 0x3FF) {\n    /* delay (1-1023)ms */\n    count = cnt & 0x3FF;\n    BL702_Delay_US(count * 1000);\n  }\n\n  // BL702_Delay_US(((cnt<<10)-(cnt<<4)-(cnt<<3)));\n}\n#endif\n\n/*\nchar *_sbrk(int incr)\n{}\n*/\n/*@} end of group DRIVER_Public_Functions */\n\n/*@} end of group DRIVER_COMMON */\n\n/*@} end of group BL702_Periph_Driver */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_dac.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_dac.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_dac.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  DAC\r\n *  @{\r\n */\r\n\r\n/** @defgroup  DAC_Private_Macros\r\n *  @{\r\n */\r\n#define GPIP_CLK_SET_DUMMY_WAIT                                                                                                                                                                        \\\r\n  {                                                                                                                                                                                                    \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n  }\r\n\r\n/*@} end of group DAC_Private_Macros */\r\n\r\n/** @defgroup  DAC_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group DAC_Private_Types */\r\n\r\n/** @defgroup  DAC_Private_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group DAC_Private_Variables */\r\n\r\n/** @defgroup  DAC_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group DAC_Global_Variables */\r\n\r\n/** @defgroup  DAC_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group DAC_Private_Fun_Declaration */\r\n\r\n/** @defgroup  DAC_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group DAC_Private_Functions */\r\n\r\n/** @defgroup  DAC_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  DAC initialization\r\n                                                                                *\r\n                                                                                * @param  cfg: DAC configuration pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GLB_DAC_Init(GLB_DAC_Cfg_Type *cfg) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_GLB_DAC_REF_SEL_TYPE(cfg->refSel));\r\n\r\n  /* Set DAC config */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPDAC_CTRL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_GPDAC_REF_SEL, cfg->refSel);\r\n\r\n  if (ENABLE == cfg->resetChanA) {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_GPDACA_RSTN_ANA);\r\n    tmpVal = BL_WR_REG(GLB_BASE, GLB_GPDAC_CTRL, tmpVal);\r\n    __NOP();\r\n    __NOP();\r\n    __NOP();\r\n    __NOP();\r\n  }\r\n\r\n  if (ENABLE == cfg->resetChanB) {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_GPDACB_RSTN_ANA);\r\n    tmpVal = BL_WR_REG(GLB_BASE, GLB_GPDAC_CTRL, tmpVal);\r\n    __NOP();\r\n    __NOP();\r\n    __NOP();\r\n    __NOP();\r\n  }\r\n\r\n  /* Clear reset */\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_GPDACA_RSTN_ANA);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_GPDACB_RSTN_ANA);\r\n  tmpVal = BL_WR_REG(GLB_BASE, GLB_GPDAC_CTRL, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  DAC channel A initialization\r\n                                                                                *\r\n                                                                                * @param  cfg: DAC channel configuration pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GLB_DAC_Set_ChanA_Config(GLB_DAC_Chan_Cfg_Type *cfg) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_GLB_DAC_CHAN_TYPE(cfg->outMux));\r\n\r\n  /* Set channel A config */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPDAC_ACTRL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_GPDAC_A_OUTMUX, cfg->outMux);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_GPDAC_IOA_EN, cfg->outputEn);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_GPDAC_A_EN, cfg->chanEn);\r\n\r\n  tmpVal = BL_WR_REG(GLB_BASE, GLB_GPDAC_ACTRL, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  DAC channel B initialization\r\n                                                                                *\r\n                                                                                * @param  cfg: DAC channel configuration pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GLB_DAC_Set_ChanB_Config(GLB_DAC_Chan_Cfg_Type *cfg) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_GLB_DAC_CHAN_TYPE(cfg->outMux));\r\n\r\n  /* Set channel A config */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPDAC_BCTRL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_GPDAC_B_OUTMUX, cfg->outMux);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_GPDAC_IOB_EN, cfg->outputEn);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_GPDAC_B_EN, cfg->chanEn);\r\n\r\n  tmpVal = BL_WR_REG(GLB_BASE, GLB_GPDAC_BCTRL, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Select DAC channel B source\r\n                                                                                *\r\n                                                                                * @param  src: DAC channel B source selection type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GPIP_Set_DAC_ChanB_SRC_SEL(GPIP_DAC_ChanB_SRC_Type src) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_GPIP_DAC_CHANB_SRC_TYPE(src));\r\n\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPDAC_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GPIP_GPDAC_CH_B_SEL, src);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPDAC_CONFIG, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Select DAC channel A source\r\n                                                                                *\r\n                                                                                * @param  src: DAC channel A source selection type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GPIP_Set_DAC_ChanA_SRC_SEL(GPIP_DAC_ChanA_SRC_Type src) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_GPIP_DAC_CHANA_SRC_TYPE(src));\r\n\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPDAC_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GPIP_GPDAC_CH_A_SEL, src);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPDAC_CONFIG, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable DAC channel B\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GPIP_DAC_ChanB_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPDAC_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPDAC_EN2);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPDAC_CONFIG, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable DAC channel B\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GPIP_DAC_ChanB_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPDAC_CONFIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPDAC_EN2);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPDAC_CONFIG, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable DAC channel A\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GPIP_DAC_ChanA_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPDAC_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPDAC_EN);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPDAC_CONFIG, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable DAC channel A\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GPIP_DAC_ChanA_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPDAC_CONFIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPDAC_EN);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPDAC_CONFIG, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Select DAC DMA TX format\r\n                                                                                *\r\n                                                                                * @param  fmt: DAC DMA TX format selection type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GPIP_Set_DAC_DMA_TX_FORMAT_SEL(GPIP_DAC_DMA_TX_FORMAT_Type fmt) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_GPIP_DAC_DMA_TX_FORMAT_TYPE(fmt));\r\n\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPDAC_DMA_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GPIP_GPDAC_DMA_FORMAT, fmt);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPDAC_DMA_CONFIG, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable DAC DMA TX\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GPIP_Set_DAC_DMA_TX_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPDAC_DMA_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GPIP_GPDAC_DMA_TX_EN);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPDAC_DMA_CONFIG, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable DAC DMA TX\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GPIP_Set_DAC_DMA_TX_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPDAC_DMA_CONFIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GPIP_GPDAC_DMA_TX_EN);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPDAC_DMA_CONFIG, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable DAC DMA TX\r\n                                                                                *\r\n                                                                                * @param  data: The data to be send\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GPIP_DAC_DMA_WriteData(uint32_t data) { BL_WR_REG(GPIP_BASE, GPIP_GPDAC_DMA_WDATA, data); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  AON and GPIP DAC config\r\n                                                                                *\r\n                                                                                * @param  cfg: AON and GPIP DAC configuration\r\n                                                                                *\r\n                                                                                * @return config success or not\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_GPIP_DAC_Init(GLB_GPIP_DAC_Cfg_Type *cfg) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_GLB_DAC_REF_SEL_TYPE(cfg->refSel));\r\n  CHECK_PARAM(IS_GPIP_DAC_MOD_TYPE(cfg->div));\r\n  CHECK_PARAM(IS_GPIP_DAC_DMA_TX_FORMAT_TYPE(cfg->dmaFmt));\r\n\r\n  /* AON Set DAC config */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPDAC_CTRL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_GPDAC_REF_SEL, cfg->refSel);\r\n\r\n  if (ENABLE == cfg->resetChanA) {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_GPDACA_RSTN_ANA);\r\n    tmpVal = BL_WR_REG(GLB_BASE, GLB_GPDAC_CTRL, tmpVal);\r\n    __NOP();\r\n    __NOP();\r\n    __NOP();\r\n    __NOP();\r\n  }\r\n\r\n  if (ENABLE == cfg->resetChanB) {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_GPDACB_RSTN_ANA);\r\n    tmpVal = BL_WR_REG(GLB_BASE, GLB_GPDAC_CTRL, tmpVal);\r\n    __NOP();\r\n    __NOP();\r\n    __NOP();\r\n    __NOP();\r\n  }\r\n\r\n  /* AON Clear reset */\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_GPDACA_RSTN_ANA);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_GPDACB_RSTN_ANA);\r\n  tmpVal = BL_WR_REG(GLB_BASE, GLB_GPDAC_CTRL, tmpVal);\r\n\r\n  /* GPIP Set DAC config */\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPDAC_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GPIP_GPDAC_MODE, cfg->div);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPDAC_CONFIG, tmpVal);\r\n\r\n  /* GPIP Set DMA config */\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPDAC_DMA_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GPIP_GPDAC_DMA_TX_EN, cfg->dmaEn);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GPIP_GPDAC_DMA_FORMAT, cfg->dmaFmt);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPDAC_DMA_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  AON and GPIP DAC channel A config\r\n                                                                                *\r\n                                                                                * @param  cfg: AON and GPIP DAC channel A configuration\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GLB_GPIP_DAC_Set_ChanA_Config(GLB_GPIP_DAC_ChanA_Cfg_Type *cfg) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_GPIP_DAC_CHANA_SRC_TYPE(cfg->src));\r\n\r\n  /* GPIP select source */\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPDAC_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GPIP_GPDAC_CH_A_SEL, cfg->src);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPDAC_CONFIG, tmpVal);\r\n\r\n  /* GPIP enable or disable channel */\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPDAC_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GPIP_GPDAC_EN, cfg->chanEn);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPDAC_CONFIG, tmpVal);\r\n\r\n  /* AON enable or disable channel */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPDAC_ACTRL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_GPDAC_IOA_EN, cfg->outputEn);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_GPDAC_A_EN, cfg->chanCovtEn);\r\n  tmpVal = BL_WR_REG(GLB_BASE, GLB_GPDAC_ACTRL, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  AON and GPIP DAC channel B config\r\n                                                                                *\r\n                                                                                * @param  cfg: AON and GPIP DAC channel B configuration\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GLB_GPIP_DAC_Set_ChanB_Config(GLB_GPIP_DAC_ChanB_Cfg_Type *cfg) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_GPIP_DAC_CHANB_SRC_TYPE(cfg->src));\r\n\r\n  /* GPIP select source */\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPDAC_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GPIP_GPDAC_CH_B_SEL, cfg->src);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPDAC_CONFIG, tmpVal);\r\n\r\n  /* GPIP enable or disable channel */\r\n  tmpVal = BL_RD_REG(GPIP_BASE, GPIP_GPDAC_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GPIP_GPDAC_EN2, cfg->chanEn);\r\n  BL_WR_REG(GPIP_BASE, GPIP_GPDAC_CONFIG, tmpVal);\r\n\r\n  /* AON enable or disable channel */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPDAC_BCTRL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_GPDAC_IOB_EN, cfg->outputEn);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_GPDAC_B_EN, cfg->chanCovtEn);\r\n  tmpVal = BL_WR_REG(GLB_BASE, GLB_GPDAC_BCTRL, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  DAC channel A set value\r\n                                                                                *\r\n                                                                                * @param  val: DAC value\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GLB_DAC_Set_ChanA_Value(uint16_t val) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPDAC_DATA);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_GPDAC_A_DATA, val);\r\n  tmpVal = BL_WR_REG(GLB_BASE, GLB_GPDAC_DATA, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  DAC channel B set value\r\n                                                                                *\r\n                                                                                * @param  val: DAC value\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid GLB_DAC_Set_ChanB_Value(uint16_t val) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPDAC_DATA);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_GPDAC_B_DATA, val);\r\n  tmpVal = BL_WR_REG(GLB_BASE, GLB_GPDAC_DATA, tmpVal);\r\n}\r\n\r\n/*@} end of group DAC_Public_Functions */\r\n\r\n/*@} end of group DAC */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_dma.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_dma.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_dma.h\"\r\n#include \"bl702.h\"\r\n#include \"bl702_glb.h\"\r\n#include \"string.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  DMA\r\n *  @{\r\n */\r\n\r\n/** @defgroup  DMA_Private_Macros\r\n *  @{\r\n */\r\n#define DMA_CHANNEL_OFFSET  0x100\r\n#define DMA_Get_Channel(ch) (DMA_BASE + DMA_CHANNEL_OFFSET + (ch) * 0x100)\r\nstatic intCallback_Type *dmaIntCbfArra[DMA_CH_MAX][DMA_INT_ALL] = {\r\n    {NULL, NULL},\r\n    {NULL, NULL},\r\n    {NULL, NULL},\r\n    {NULL, NULL}\r\n};\r\n// static DMA_LLI_Ctrl_Type PingPongListArra[DMA_CH_MAX][2];\r\n\r\n/*@} end of group DMA_Private_Macros */\r\n\r\n/** @defgroup  DMA_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group DMA_Private_Types */\r\n\r\n/** @defgroup  DMA_Private_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group DMA_Private_Variables */\r\n\r\n/** @defgroup  DMA_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group DMA_Global_Variables */\r\n\r\n/** @defgroup  DMA_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group DMA_Private_Fun_Declaration */\r\n\r\n/** @defgroup  DMA_Private_Functions\r\n *  @{\r\n */\r\n\r\n/**\r\n * @brief  DMA interrupt handler\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid DMA_ALL_IRQHandler(void) {\r\n  uint32_t tmpVal;\r\n  uint32_t intClr;\r\n  uint8_t  ch;\r\n  /* Get DMA register */\r\n  uint32_t DMAChs = DMA_BASE;\r\n\r\n  for (ch = 0; ch < DMA_CH_MAX; ch++) {\r\n    tmpVal = BL_RD_REG(DMAChs, DMA_INTTCSTATUS);\r\n\r\n    if ((BL_GET_REG_BITS_VAL(tmpVal, DMA_INTTCSTATUS) & (1 << ch)) != 0) {\r\n      /* Clear interrupt */\r\n      tmpVal = BL_RD_REG(DMAChs, DMA_INTTCCLEAR);\r\n      intClr = BL_GET_REG_BITS_VAL(tmpVal, DMA_INTTCCLEAR);\r\n      intClr |= (1 << ch);\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_INTTCCLEAR, intClr);\r\n      BL_WR_REG(DMAChs, DMA_INTTCCLEAR, tmpVal);\r\n\r\n      if (dmaIntCbfArra[ch][DMA_INT_TCOMPLETED] != NULL) {\r\n        /* Call the callback function */\r\n        dmaIntCbfArra[ch][DMA_INT_TCOMPLETED]();\r\n      }\r\n    }\r\n  }\r\n\r\n  for (ch = 0; ch < DMA_CH_MAX; ch++) {\r\n    tmpVal = BL_RD_REG(DMAChs, DMA_INTERRORSTATUS);\r\n\r\n    if ((BL_GET_REG_BITS_VAL(tmpVal, DMA_INTERRORSTATUS) & (1 << ch)) != 0) {\r\n      /*Clear interrupt */\r\n      tmpVal = BL_RD_REG(DMAChs, DMA_INTERRCLR);\r\n      intClr = BL_GET_REG_BITS_VAL(tmpVal, DMA_INTERRCLR);\r\n      intClr |= (1 << ch);\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_INTERRCLR, intClr);\r\n      BL_WR_REG(DMAChs, DMA_INTERRCLR, tmpVal);\r\n\r\n      if (dmaIntCbfArra[ch][DMA_INT_ERR] != NULL) {\r\n        /* Call the callback function */\r\n        dmaIntCbfArra[ch][DMA_INT_ERR]();\r\n      }\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/*@} end of group DMA_Private_Functions */\r\n\r\n/** @defgroup  DMA_Public_Functions\r\n *  @{\r\n */\r\n\r\n/**\r\n * @brief  DMA enable\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid DMA_Enable(void) {\r\n  uint32_t tmpVal;\r\n  /* Get DMA register */\r\n  uint32_t DMAChs = DMA_BASE;\r\n\r\n  tmpVal = BL_RD_REG(DMAChs, DMA_TOP_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, DMA_E);\r\n  BL_WR_REG(DMAChs, DMA_TOP_CONFIG, tmpVal);\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(DMA_ALL_IRQn, DMA_ALL_IRQHandler);\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief  DMA disable\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid DMA_Disable(void) {\r\n  uint32_t tmpVal;\r\n  /* Get DMA register */\r\n  uint32_t DMAChs = DMA_BASE;\r\n\r\n  tmpVal = BL_RD_REG(DMAChs, DMA_TOP_CONFIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, DMA_E);\r\n  BL_WR_REG(DMAChs, DMA_TOP_CONFIG, tmpVal);\r\n}\r\n\r\n/**\r\n * @brief  DMA channel init\r\n *\r\n * @param  chCfg: DMA configuration\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid DMA_Channel_Init(DMA_Channel_Cfg_Type *chCfg) {\r\n  uint32_t tmpVal;\r\n  /* Get channel register */\r\n  uint32_t DMAChs = DMA_Get_Channel(chCfg->ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_DMA_CHAN_TYPE(chCfg->ch));\r\n  CHECK_PARAM(IS_DMA_TRANS_WIDTH_TYPE(chCfg->srcTransfWidth));\r\n  CHECK_PARAM(IS_DMA_TRANS_WIDTH_TYPE(chCfg->dstTransfWidth));\r\n  CHECK_PARAM(IS_DMA_BURST_SIZE_TYPE(chCfg->srcBurstSize));\r\n  CHECK_PARAM(IS_DMA_BURST_SIZE_TYPE(chCfg->dstBurstSize));\r\n  CHECK_PARAM(IS_DMA_TRANS_DIR_TYPE(chCfg->dir));\r\n  CHECK_PARAM(IS_DMA_PERIPH_REQ_TYPE(chCfg->dstPeriph));\r\n  CHECK_PARAM(IS_DMA_PERIPH_REQ_TYPE(chCfg->srcPeriph));\r\n\r\n  /* Disable clock gate */\r\n  // Turns on clock\r\n  GLB_AHB_Slave1_Clock_Gate(DISABLE, BL_AHB_SLAVE1_DMA);\r\n\r\n  /* Config channel config */\r\n  BL_WR_REG(DMAChs, DMA_SRCADDR, chCfg->srcDmaAddr);\r\n  BL_WR_REG(DMAChs, DMA_DSTADDR, chCfg->destDmaAddr);\r\n\r\n  tmpVal = BL_RD_REG(DMAChs, DMA_CONTROL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_TRANSFERSIZE, chCfg->transfLength);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_SWIDTH, chCfg->srcTransfWidth);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_DWIDTH, chCfg->dstTransfWidth);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_SBSIZE, chCfg->srcBurstSize);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_DBSIZE, chCfg->dstBurstSize);\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_DST_ADD_MODE, chCfg->dstAddMode);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_DST_MIN_MODE, chCfg->dstMinMode);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_FIX_CNT, chCfg->fixCnt);\r\n\r\n  /* FIXME: how to deal with SLargerD */\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, DMA_SLARGERD); // Reserved bit 25\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_SI, chCfg->srcAddrInc);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_DI, chCfg->destAddrInc);\r\n  BL_WR_REG(DMAChs, DMA_CONTROL, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(DMAChs, DMA_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_FLOWCNTRL, chCfg->dir);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_DSTPERIPHERAL, chCfg->dstPeriph);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_SRCPERIPHERAL, chCfg->srcPeriph);\r\n  BL_WR_REG(DMAChs, DMA_CONFIG, tmpVal);\r\n  // Clear interrupts\r\n  *((uint32_t *)0x4000c008) = 1 << (chCfg->ch); // Clear transfer complete\r\n  *((uint32_t *)0x4000c010) = 1 << (chCfg->ch); // Clear Error\r\n}\r\n\r\n/**\r\n * @brief  DMA channel update source memory address and len\r\n *\r\n * @param  ch: DMA channel\r\n * @param  memAddr: source memoty address\r\n * @param  len: source memory data length\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid DMA_Channel_Update_SrcMemcfg(uint8_t ch, uint32_t memAddr, uint32_t len) {\r\n  uint32_t tmpVal;\r\n  /* Get channel register */\r\n  uint32_t DMAChs = DMA_Get_Channel(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_DMA_CHAN_TYPE(ch));\r\n\r\n  /* config channel config*/\r\n  BL_WR_REG(DMAChs, DMA_SRCADDR, memAddr);\r\n  tmpVal = BL_RD_REG(DMAChs, DMA_CONTROL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_TRANSFERSIZE, len);\r\n  BL_WR_REG(DMAChs, DMA_CONTROL, tmpVal);\r\n}\r\n\r\n/**\r\n * @brief  DMA channel update destination memory address and len\r\n *\r\n * @param  ch: DMA channel\r\n * @param  memAddr: destination memoty address\r\n * @param  len: destination memory data length\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid DMA_Channel_Update_DstMemcfg(uint8_t ch, uint32_t memAddr, uint32_t len) {\r\n  uint32_t tmpVal;\r\n  /* Get channel register */\r\n  uint32_t DMAChs = DMA_Get_Channel(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_DMA_CHAN_TYPE(ch));\r\n\r\n  /* config channel config*/\r\n  BL_WR_REG(DMAChs, DMA_DSTADDR, memAddr);\r\n  tmpVal = BL_RD_REG(DMAChs, DMA_CONTROL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_TRANSFERSIZE, len);\r\n  BL_WR_REG(DMAChs, DMA_CONTROL, tmpVal);\r\n}\r\n\r\n/**\r\n * @brief  Get DMA channel tranfersize\r\n *\r\n * @param  ch: DMA channel\r\n *\r\n * @return tranfersize size\r\n *\r\n *******************************************************************************/\r\nuint32_t DMA_Channel_TranferSize(uint8_t ch) {\r\n  /* Get channel register */\r\n  uint32_t DMAChs = DMA_Get_Channel(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_DMA_CHAN_TYPE(ch));\r\n\r\n  return BL_GET_REG_BITS_VAL(BL_RD_REG(DMAChs, DMA_CONTROL), DMA_TRANSFERSIZE);\r\n}\r\n\r\n/**\r\n * @brief  Get DMA channel busy status\r\n *\r\n * @param  ch: DMA channel\r\n *\r\n * @return SET or RESET\r\n *\r\n *******************************************************************************/\r\nBL_Sts_Type DMA_Channel_Is_Busy(uint8_t ch) {\r\n  /* Get channel register */\r\n  uint32_t DMAChs = DMA_Get_Channel(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_DMA_CHAN_TYPE(ch));\r\n\r\n  return BL_IS_REG_BIT_SET(BL_RD_REG(DMAChs, DMA_CONFIG), DMA_E) == 1 ? SET : RESET;\r\n}\r\n\r\n/**\r\n * @brief  DMA enable\r\n *\r\n * @param  ch: DMA channel number\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid DMA_Channel_Enable(uint8_t ch) {\r\n  uint32_t tmpVal;\r\n  /* Get channel register */\r\n  uint32_t DMAChs = DMA_Get_Channel(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_DMA_CHAN_TYPE(ch));\r\n\r\n  tmpVal = BL_RD_REG(DMAChs, DMA_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, DMA_E);\r\n  BL_WR_REG(DMAChs, DMA_CONFIG, tmpVal);\r\n}\r\n\r\n/**\r\n * @brief  DMA disable\r\n *\r\n * @param  ch: DMA channel number\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid DMA_Channel_Disable(uint8_t ch) {\r\n  uint32_t tmpVal;\r\n  /* Get channel register */\r\n  uint32_t DMAChs = DMA_Get_Channel(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_DMA_CHAN_TYPE(ch));\r\n\r\n  tmpVal = BL_RD_REG(DMAChs, DMA_CONFIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, DMA_E);\r\n  BL_WR_REG(DMAChs, DMA_CONFIG, tmpVal);\r\n}\r\n\r\n/**\r\n * @brief  DMA init LLI transfer\r\n *\r\n * @param  ch: DMA channel number\r\n * @param  lliCfg: LLI configuration\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid DMA_LLI_Init(uint8_t ch, DMA_LLI_Cfg_Type *lliCfg) {\r\n  uint32_t tmpVal;\r\n  /* Get channel register */\r\n  uint32_t DMAChs = DMA_Get_Channel(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_DMA_CHAN_TYPE(ch));\r\n  CHECK_PARAM(IS_DMA_TRANS_DIR_TYPE(lliCfg->dir));\r\n  CHECK_PARAM(IS_DMA_PERIPH_REQ_TYPE(lliCfg->dstPeriph));\r\n  CHECK_PARAM(IS_DMA_PERIPH_REQ_TYPE(lliCfg->srcPeriph));\r\n\r\n  /* Disable clock gate */\r\n  GLB_AHB_Slave1_Clock_Gate(DISABLE, BL_AHB_SLAVE1_DMA);\r\n\r\n  tmpVal = BL_RD_REG(DMAChs, DMA_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_FLOWCNTRL, lliCfg->dir);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_DSTPERIPHERAL, lliCfg->dstPeriph);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_SRCPERIPHERAL, lliCfg->srcPeriph);\r\n  BL_WR_REG(DMAChs, DMA_CONFIG, tmpVal);\r\n}\r\n\r\n/**\r\n * @brief  DMA channel update LLI\r\n *\r\n * @param  ch: DMA channel number\r\n * @param  LLI: LLI addr\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid DMA_LLI_Update(uint8_t ch, uint32_t LLI) {\r\n  /* Get channel register */\r\n  uint32_t DMAChs = DMA_Get_Channel(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_DMA_CHAN_TYPE(ch));\r\n\r\n  /* Config channel config */\r\n  // BL_WR_REG(DMAChs, DMA_LLI, LLI);\r\n  BL702_MemCpy4((uint32_t *)DMAChs, (uint32_t *)LLI, 4);\r\n}\r\n\r\n/**\r\n * @brief  Mask/Unmask the DMA interrupt\r\n *\r\n * @param  ch: DMA channel number\r\n * @param  intType: Specifies the interrupt type\r\n * @param  intMask: Enable/Disable Specified interrupt type\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid DMA_IntMask(uint8_t ch, DMA_INT_Type intType, BL_Mask_Type intMask) {\r\n  uint32_t tmpVal;\r\n  /* Get channel register */\r\n  uint32_t DMAChs = DMA_Get_Channel(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_DMA_CHAN_TYPE(ch));\r\n  CHECK_PARAM(IS_DMA_INT_TYPE(intType));\r\n\r\n  switch (intType) {\r\n  case DMA_INT_TCOMPLETED:\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(BL_RD_REG(DMAChs, DMA_CONFIG), DMA_ITC);\r\n      BL_WR_REG(DMAChs, DMA_CONFIG, tmpVal);\r\n      tmpVal = BL_SET_REG_BIT(BL_RD_REG(DMAChs, DMA_CONTROL), DMA_I);\r\n      BL_WR_REG(DMAChs, DMA_CONTROL, tmpVal);\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(BL_RD_REG(DMAChs, DMA_CONFIG), DMA_ITC);\r\n      BL_WR_REG(DMAChs, DMA_CONFIG, tmpVal);\r\n      tmpVal = BL_CLR_REG_BIT(BL_RD_REG(DMAChs, DMA_CONTROL), DMA_I);\r\n      BL_WR_REG(DMAChs, DMA_CONTROL, tmpVal);\r\n    }\r\n\r\n    break;\r\n\r\n  case DMA_INT_ERR:\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(BL_RD_REG(DMAChs, DMA_CONFIG), DMA_IE);\r\n      BL_WR_REG(DMAChs, DMA_CONFIG, tmpVal);\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(BL_RD_REG(DMAChs, DMA_CONFIG), DMA_IE);\r\n      BL_WR_REG(DMAChs, DMA_CONFIG, tmpVal);\r\n    }\r\n\r\n    break;\r\n\r\n  case DMA_INT_ALL:\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      tmpVal = BL_RD_REG(DMAChs, DMA_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, DMA_ITC);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, DMA_IE);\r\n      BL_WR_REG(DMAChs, DMA_CONFIG, tmpVal);\r\n      tmpVal = BL_RD_REG(DMAChs, DMA_CONTROL);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, DMA_I);\r\n      BL_WR_REG(DMAChs, DMA_CONTROL, tmpVal);\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      tmpVal = BL_RD_REG(DMAChs, DMA_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, DMA_ITC);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, DMA_IE);\r\n      BL_WR_REG(DMAChs, DMA_CONFIG, tmpVal);\r\n      tmpVal = BL_RD_REG(DMAChs, DMA_CONTROL);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, DMA_I);\r\n      BL_WR_REG(DMAChs, DMA_CONTROL, tmpVal);\r\n    }\r\n\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Install DMA interrupt callback function\r\n *\r\n * @param  dmaChan: DMA Channel type\r\n * @param  intType: DMA interrupt type\r\n * @param  cbFun: Pointer to interrupt callback function. The type should be void (*fn)(void)\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid DMA_Int_Callback_Install(DMA_Chan_Type dmaChan, DMA_INT_Type intType, intCallback_Type *cbFun) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_DMA_CHAN_TYPE(dmaChan));\r\n  CHECK_PARAM(IS_DMA_INT_TYPE(intType));\r\n\r\n  dmaIntCbfArra[dmaChan][intType] = cbFun;\r\n}\r\n\r\n/*@} end of group DMA_Public_Functions */\r\n\r\n/*@} end of group DMA */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_ef_ctrl.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_sec_ef_ctrl.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_ef_ctrl.h\"\r\n#include \"ef_data_0_reg.h\"\r\n#include \"string.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SEC_EF_CTRL\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SEC_EF_CTRL_Private_Macros\r\n *  @{\r\n */\r\n#define EF_CTRL_EFUSE_CYCLE_PROTECT (0xbf << 24)\r\n#define EF_CTRL_EFUSE_CTRL_PROTECT  (0xbf << 8)\r\n#define EF_CTRL_DFT_TIMEOUT_VAL     (160 * 1000)\r\n#ifndef BOOTROM\r\n#define EF_CTRL_LOAD_BEFORE_READ_R0 EF_Ctrl_Load_Efuse_R0()\r\n#else\r\n#define EF_CTRL_LOAD_BEFORE_READ_R0\r\n#endif\r\n#define EF_CTRL_DATA0_CLEAR EF_Ctrl_Clear(0, EF_CTRL_EFUSE_R0_SIZE / 4)\r\n\r\n/*@} end of group SEC_EF_CTRL_Private_Macros */\r\n\r\n/** @defgroup  SEC_EF_CTRL_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group SEC_EF_CTRL_Private_Types */\r\n\r\n/** @defgroup  SEC_EF_CTRL_Private_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group SEC_EF_CTRL_Private_Variables */\r\n\r\n/** @defgroup  SEC_EF_CTRL_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group SEC_EF_CTRL_Global_Variables */\r\n\r\n/** @defgroup  SEC_EF_CTRL_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group SEC_EF_CTRL_Private_Fun_Declaration */\r\n\r\n/** @defgroup  SEC_EF_CTRL_Private_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************\r\n * @brief  Switch efuse region 0 control to AHB clock\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\n/* static */ void ATTR_TCM_SECTION EF_Ctrl_Sw_AHB_Clk_0(void) {\r\n  uint32_t tmpVal;\r\n  uint32_t timeout = EF_CTRL_DFT_TIMEOUT_VAL;\r\n\r\n  while (EF_Ctrl_Busy() == SET) {\r\n    timeout--;\r\n\r\n    if (timeout == 0) {\r\n      break;\r\n    }\r\n  }\r\n\r\n  tmpVal = (EF_CTRL_EFUSE_CTRL_PROTECT) | (EF_CTRL_OP_MODE_AUTO << EF_CTRL_EF_IF_0_MANUAL_EN_POS) | (EF_CTRL_PARA_DFT << EF_CTRL_EF_IF_0_CYC_MODIFY_POS) |\r\n           (EF_CTRL_SAHB_CLK << EF_CTRL_EF_CLK_SAHB_DATA_SEL_POS) | (1 << EF_CTRL_EF_IF_AUTO_RD_EN_POS) | (0 << EF_CTRL_EF_IF_POR_DIG_POS) | (1 << EF_CTRL_EF_IF_0_INT_CLR_POS) |\r\n           (0 << EF_CTRL_EF_IF_0_RW_POS) | (0 << EF_CTRL_EF_IF_0_TRIG_POS);\r\n\r\n  BL_WR_REG(EF_CTRL_BASE, EF_CTRL_EF_IF_CTRL_0, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************\r\n * @brief  Program efuse region 0\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nstatic void EF_Ctrl_Program_Efuse_0(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Select auto mode and select ef clock */\r\n  tmpVal = (EF_CTRL_EFUSE_CTRL_PROTECT) | (EF_CTRL_OP_MODE_AUTO << EF_CTRL_EF_IF_0_MANUAL_EN_POS) | (EF_CTRL_PARA_DFT << EF_CTRL_EF_IF_0_CYC_MODIFY_POS) |\r\n           (EF_CTRL_EF_CLK << EF_CTRL_EF_CLK_SAHB_DATA_SEL_POS) | (1 << EF_CTRL_EF_IF_AUTO_RD_EN_POS) | (0 << EF_CTRL_EF_IF_POR_DIG_POS) | (1 << EF_CTRL_EF_IF_0_INT_CLR_POS) |\r\n           (0 << EF_CTRL_EF_IF_0_RW_POS) | (0 << EF_CTRL_EF_IF_0_TRIG_POS);\r\n  BL_WR_REG(EF_CTRL_BASE, EF_CTRL_EF_IF_CTRL_0, tmpVal);\r\n\r\n  /* Program */\r\n  tmpVal = (EF_CTRL_EFUSE_CTRL_PROTECT) | (EF_CTRL_OP_MODE_AUTO << EF_CTRL_EF_IF_0_MANUAL_EN_POS) | (EF_CTRL_PARA_DFT << EF_CTRL_EF_IF_0_CYC_MODIFY_POS) |\r\n           (EF_CTRL_EF_CLK << EF_CTRL_EF_CLK_SAHB_DATA_SEL_POS) | (1 << EF_CTRL_EF_IF_AUTO_RD_EN_POS) | (1 << EF_CTRL_EF_IF_POR_DIG_POS) | (1 << EF_CTRL_EF_IF_0_INT_CLR_POS) |\r\n           (1 << EF_CTRL_EF_IF_0_RW_POS) | (0 << EF_CTRL_EF_IF_0_TRIG_POS);\r\n  BL_WR_REG(EF_CTRL_BASE, EF_CTRL_EF_IF_CTRL_0, tmpVal);\r\n\r\n  /* Add delay for POR to be stable */\r\n  BL702_Delay_US(4);\r\n\r\n  /* Trigger */\r\n  tmpVal = (EF_CTRL_EFUSE_CTRL_PROTECT) | (EF_CTRL_OP_MODE_AUTO << EF_CTRL_EF_IF_0_MANUAL_EN_POS) | (EF_CTRL_PARA_DFT << EF_CTRL_EF_IF_0_CYC_MODIFY_POS) |\r\n           (EF_CTRL_EF_CLK << EF_CTRL_EF_CLK_SAHB_DATA_SEL_POS) | (1 << EF_CTRL_EF_IF_AUTO_RD_EN_POS) | (1 << EF_CTRL_EF_IF_POR_DIG_POS) | (1 << EF_CTRL_EF_IF_0_INT_CLR_POS) |\r\n           (1 << EF_CTRL_EF_IF_0_RW_POS) | (1 << EF_CTRL_EF_IF_0_TRIG_POS);\r\n  BL_WR_REG(EF_CTRL_BASE, EF_CTRL_EF_IF_CTRL_0, tmpVal);\r\n}\r\n\r\n/*@} end of group SEC_EF_CTRL_Private_Functions */\r\n\r\n/** @defgroup  SEC_EF_CTRL_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************\r\n * @brief  Load efuse region 0\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION EF_Ctrl_Load_Efuse_R0(void) {\r\n  uint32_t tmpVal;\r\n  uint32_t timeout = EF_CTRL_DFT_TIMEOUT_VAL;\r\n\r\n  EF_CTRL_DATA0_CLEAR;\r\n\r\n  /* Trigger read */\r\n  tmpVal = (EF_CTRL_EFUSE_CTRL_PROTECT) | (EF_CTRL_OP_MODE_AUTO << EF_CTRL_EF_IF_0_MANUAL_EN_POS) | (EF_CTRL_PARA_DFT << EF_CTRL_EF_IF_0_CYC_MODIFY_POS) |\r\n           (EF_CTRL_EF_CLK << EF_CTRL_EF_CLK_SAHB_DATA_SEL_POS) | (1 << EF_CTRL_EF_IF_AUTO_RD_EN_POS) | (0 << EF_CTRL_EF_IF_POR_DIG_POS) | (1 << EF_CTRL_EF_IF_0_INT_CLR_POS) |\r\n           (0 << EF_CTRL_EF_IF_0_RW_POS) | (0 << EF_CTRL_EF_IF_0_TRIG_POS);\r\n  BL_WR_REG(EF_CTRL_BASE, EF_CTRL_EF_IF_CTRL_0, tmpVal);\r\n\r\n  tmpVal = (EF_CTRL_EFUSE_CTRL_PROTECT) | (EF_CTRL_OP_MODE_AUTO << EF_CTRL_EF_IF_0_MANUAL_EN_POS) | (EF_CTRL_PARA_DFT << EF_CTRL_EF_IF_0_CYC_MODIFY_POS) |\r\n           (EF_CTRL_EF_CLK << EF_CTRL_EF_CLK_SAHB_DATA_SEL_POS) | (1 << EF_CTRL_EF_IF_AUTO_RD_EN_POS) | (0 << EF_CTRL_EF_IF_POR_DIG_POS) | (1 << EF_CTRL_EF_IF_0_INT_CLR_POS) |\r\n           (0 << EF_CTRL_EF_IF_0_RW_POS) | (1 << EF_CTRL_EF_IF_0_TRIG_POS);\r\n  BL_WR_REG(EF_CTRL_BASE, EF_CTRL_EF_IF_CTRL_0, tmpVal);\r\n\r\n  BL702_Delay_US(10);\r\n\r\n  /* Wait for efuse control idle*/\r\n  do {\r\n    tmpVal = BL_RD_REG(EF_CTRL_BASE, EF_CTRL_EF_IF_CTRL_0);\r\n    timeout--;\r\n\r\n    if (timeout == 0) {\r\n      break;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, EF_CTRL_EF_IF_0_BUSY) ||\r\n\r\n           (!BL_IS_REG_BIT_SET(tmpVal, EF_CTRL_EF_IF_0_AUTOLOAD_DONE)));\r\n\r\n  /* Switch to AHB clock */\r\n  tmpVal = (EF_CTRL_EFUSE_CTRL_PROTECT) | (EF_CTRL_OP_MODE_AUTO << EF_CTRL_EF_IF_0_MANUAL_EN_POS) | (EF_CTRL_PARA_DFT << EF_CTRL_EF_IF_0_CYC_MODIFY_POS) |\r\n           (EF_CTRL_SAHB_CLK << EF_CTRL_EF_CLK_SAHB_DATA_SEL_POS) | (1 << EF_CTRL_EF_IF_AUTO_RD_EN_POS) | (0 << EF_CTRL_EF_IF_POR_DIG_POS) | (1 << EF_CTRL_EF_IF_0_INT_CLR_POS) |\r\n           (0 << EF_CTRL_EF_IF_0_RW_POS) | (0 << EF_CTRL_EF_IF_0_TRIG_POS);\r\n  BL_WR_REG(EF_CTRL_BASE, EF_CTRL_EF_IF_CTRL_0, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************\r\n * @brief  Check efuse busy status\r\n *\r\n * @param  None\r\n *\r\n * @return SET or RESET\r\n *\r\n *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Sts_Type ATTR_TCM_SECTION EF_Ctrl_Busy(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(EF_CTRL_BASE, EF_CTRL_EF_IF_CTRL_0);\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, EF_CTRL_EF_IF_0_BUSY)) {\r\n    return SET;\r\n  }\r\n\r\n  return RESET;\r\n}\r\n#endif\r\n\r\n/****************************************************************************\r\n * @brief  Check efuse whether finish loading\r\n *\r\n * @param  None\r\n *\r\n * @return SET or RESET\r\n *\r\n *******************************************************************************/\r\nBL_Sts_Type EF_Ctrl_AutoLoad_Done(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(EF_CTRL_BASE, EF_CTRL_EF_IF_CTRL_0);\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, EF_CTRL_EF_IF_0_AUTOLOAD_DONE)) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse write debug password\r\n *\r\n * @param  passWdLow: password low 32 bits\r\n * @param  passWdHigh: password high 32 bits\r\n * @param  program: program to efuse entity or not\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Write_Dbg_Pwd(uint32_t passWdLow, uint32_t passWdHigh, uint8_t program) {\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_DBG_PWD_LOW, passWdLow);\r\n  BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_DBG_PWD_HIGH, passWdHigh);\r\n\r\n  if (program) {\r\n    EF_Ctrl_Program_Efuse_0();\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read debug password\r\n *\r\n * @param  passWdLow: password low 32 bits pointer to store value\r\n * @param  passWdHigh: password high 32 bits pointer to store value\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Read_Dbg_Pwd(uint32_t *passWdLow, uint32_t *passWdHigh) {\r\n  /* Trigger read data from efuse */\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  *passWdLow  = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_DBG_PWD_LOW);\r\n  *passWdHigh = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_DBG_PWD_HIGH);\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse lock reading for passwd\r\n *\r\n * @param  program: program to efuse entity or not\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Readlock_Dbg_Pwd(uint8_t program) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_LOCK);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, EF_DATA_0_RD_LOCK_DBG_PWD);\r\n  BL_WR_REG(EF_DATA_BASE, EF_DATA_0_LOCK, tmpVal);\r\n\r\n  if (program) {\r\n    EF_Ctrl_Program_Efuse_0();\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse lock writing for passwd\r\n *\r\n * @param  program: program to efuse entity or not\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Writelock_Dbg_Pwd(uint8_t program) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_LOCK);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, EF_DATA_0_WR_LOCK_DBG_PWD);\r\n  BL_WR_REG(EF_DATA_BASE, EF_DATA_0_LOCK, tmpVal);\r\n\r\n  if (program) {\r\n    EF_Ctrl_Program_Efuse_0();\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read security configuration\r\n *\r\n * @param  cfg: security configuration pointer\r\n * @param  program: program to efuse entity or not\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Write_Secure_Cfg(EF_Ctrl_Sec_Param_Type *cfg, uint8_t program) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_CFG_0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EF_DATA_0_EF_DBG_MODE, cfg->ef_dbg_mode);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EF_DATA_0_EF_DBG_JTAG_0_DIS, cfg->ef_dbg_jtag_0_dis);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EF_DATA_0_EF_SBOOT_EN, cfg->ef_sboot_en);\r\n  BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_CFG_0, tmpVal);\r\n\r\n  if (program) {\r\n    EF_Ctrl_Program_Efuse_0();\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read security configuration\r\n *\r\n * @param  cfg: security configuration pointer\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Read_Secure_Cfg(EF_Ctrl_Sec_Param_Type *cfg) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Trigger read data from efuse */\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_CFG_0);\r\n\r\n  cfg->ef_dbg_mode       = (EF_Ctrl_Dbg_Mode_Type)BL_GET_REG_BITS_VAL(tmpVal, EF_DATA_0_EF_DBG_MODE);\r\n  cfg->ef_dbg_jtag_0_dis = BL_GET_REG_BITS_VAL(tmpVal, EF_DATA_0_EF_DBG_JTAG_0_DIS);\r\n  cfg->ef_sboot_en       = BL_GET_REG_BITS_VAL(tmpVal, EF_DATA_0_EF_SBOOT_EN);\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse write security boot configuration\r\n *\r\n * @param  sign[1]: Sign configuration pointer\r\n * @param  aes[1]: AES configuration pointer\r\n * @param  program: program to efuse entity or not\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Write_Secure_Boot(EF_Ctrl_Sign_Type sign[1], EF_Ctrl_SF_AES_Type aes[1], uint8_t program) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_CFG_0);\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EF_DATA_0_EF_SBOOT_SIGN_MODE, sign[0]);\r\n\r\n  if (aes[0] != EF_CTRL_SF_AES_NONE) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EF_DATA_0_EF_SF_AES_MODE, aes[0]);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EF_DATA_0_EF_CPU0_ENC_EN, 1);\r\n  }\r\n\r\n  BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_CFG_0, tmpVal);\r\n\r\n  if (program) {\r\n    EF_Ctrl_Program_Efuse_0();\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse write security boot configuration\r\n *\r\n * @param  sign[1]: Sign configuration pointer\r\n * @param  aes[1]: AES configuration pointer\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Read_Secure_Boot(EF_Ctrl_Sign_Type sign[1], EF_Ctrl_SF_AES_Type aes[1]) {\r\n  uint32_t tmpVal;\r\n  uint32_t tmpVal2;\r\n\r\n  /* Trigger read data from efuse */\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_CFG_0);\r\n\r\n  tmpVal2 = BL_GET_REG_BITS_VAL(tmpVal, EF_DATA_0_EF_SBOOT_SIGN_MODE);\r\n  sign[0] = (EF_Ctrl_Sign_Type)(tmpVal2 & 0x01);\r\n\r\n  tmpVal2 = BL_GET_REG_BITS_VAL(tmpVal, EF_DATA_0_EF_CPU0_ENC_EN);\r\n\r\n  if (tmpVal2) {\r\n    aes[0] = (EF_Ctrl_SF_AES_Type)BL_GET_REG_BITS_VAL(tmpVal, EF_DATA_0_EF_SF_AES_MODE);\r\n  } else {\r\n    aes[0] = EF_CTRL_SF_AES_NONE;\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Analog Trim parity calculate\r\n *\r\n * @param  val: Value of efuse trim data\r\n * @param  len: Length of bit to calculate\r\n *\r\n * @return Parity bit value\r\n *\r\n *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nuint8_t ATTR_CLOCK_SECTION EF_Ctrl_Get_Trim_Parity(uint32_t val, uint8_t len) {\r\n  uint8_t cnt = 0;\r\n  uint8_t i   = 0;\r\n\r\n  for (i = 0; i < len; i++) {\r\n    if (val & (1 << i)) {\r\n      cnt++;\r\n    }\r\n  }\r\n\r\n  return cnt & 0x01;\r\n}\r\n#endif\r\n\r\n/****************************************************************************\r\n * @brief  Efuse write analog trim\r\n *\r\n * @param  index: index of analog trim\r\n * @param  trim: trim value\r\n * @param  program: program to efuse entity or not\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Write_Ana_Trim(uint32_t index, uint32_t trim, uint8_t program) {\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  if (index == 0) {\r\n    BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_ANA_TRIM_0, trim);\r\n  }\r\n\r\n  if (program) {\r\n    EF_Ctrl_Program_Efuse_0();\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read analog trim\r\n *\r\n * @param  index: index of analog trim\r\n * @param  trim: trim value\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Read_Ana_Trim(uint32_t index, uint32_t *trim) {\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  if (index == 0) {\r\n    *trim = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_ANA_TRIM_0);\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read RC32M trim\r\n *\r\n * @param  trim: Trim data pointer\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_CLOCK_SECTION EF_Ctrl_Read_RC32M_Trim(Efuse_Ana_RC32M_Trim_Type *trim) {\r\n  uint32_t tmpVal = 0;\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  tmpVal                         = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_ANA_TRIM_0);\r\n  trim->trimRc32mCodeFrExt       = (tmpVal >> 10) & 0xff;\r\n  trim->trimRc32mCodeFrExtParity = (tmpVal >> 18) & 0x01;\r\n  trim->trimRc32mExtCodeEn       = (tmpVal >> 19) & 0x01;\r\n}\r\n#endif\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read RC32K trim\r\n *\r\n * @param  trim: Trim data pointer\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_CLOCK_SECTION EF_Ctrl_Read_RC32K_Trim(Efuse_Ana_RC32K_Trim_Type *trim) {\r\n  uint32_t tmpVal = 0;\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  tmpVal                         = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_ANA_TRIM_0);\r\n  trim->trimRc32kCodeFrExt       = (tmpVal >> 20) & 0x3ff;\r\n  trim->trimRc32kCodeFrExtParity = (tmpVal >> 30) & 0x01;\r\n  trim->trimRc32kExtCodeEn       = (tmpVal >> 31) & 0x01;\r\n}\r\n#endif\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read TSEN trim\r\n *\r\n * @param  trim: Trim data pointer\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ATTR_CLOCK_SECTION EF_Ctrl_Read_TSEN_Trim(Efuse_TSEN_Refcode_Corner_Type *trim) {\r\n  uint32_t tmpVal = 0;\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  tmpVal                    = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W3);\r\n  trim->tsenRefcodeCornerEn = tmpVal & 0x01;\r\n\r\n  tmpVal                        = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_LOCK);\r\n  trim->tsenRefcodeCorner       = tmpVal & 0xfff;\r\n  trim->tsenRefcodeCornerParity = (tmpVal >> 12) & 0x01;\r\n\r\n  trim->tsenRefcodeCornerVersion = 0;\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read ADC Gain trim\r\n *\r\n * @param  trim: Trim data pointer\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid ATTR_CLOCK_SECTION EF_Ctrl_Read_ADC_Gain_Trim(Efuse_ADC_Gain_Coeff_Type *trim) {\r\n  uint32_t tmpVal = 0;\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  tmpVal                   = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W3);\r\n  trim->adcGainCoeff       = (tmpVal >> 1) & 0xfff;\r\n  trim->adcGainCoeffParity = (tmpVal >> 13) & 0x01;\r\n  trim->adcGainCoeffEn     = (tmpVal >> 14) & 0x01;\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse write software usage\r\n *\r\n * @param  index: index of software usage\r\n * @param  usage: usage value\r\n * @param  program: program to efuse entity or not\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Write_Sw_Usage(uint32_t index, uint32_t usage, uint8_t program) {\r\n  /* switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  if (index == 0) {\r\n    BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_SW_USAGE_0, usage);\r\n  }\r\n\r\n  if (program) {\r\n    EF_Ctrl_Program_Efuse_0();\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read software usage\r\n *\r\n * @param  index: index of software usage\r\n * @param  usage: usage value\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Read_Sw_Usage(uint32_t index, uint32_t *usage) {\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  if (index == 0) {\r\n    *usage = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_SW_USAGE_0);\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read software usage\r\n *\r\n * @param  index: index of software usage\r\n * @param  program: usage value\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Writelock_Sw_Usage(uint32_t index, uint8_t program) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_LOCK);\r\n\r\n  if (index == 0) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, EF_DATA_0_WR_LOCK_SW_USAGE_0);\r\n  }\r\n\r\n  BL_WR_REG(EF_DATA_BASE, EF_DATA_0_LOCK, tmpVal);\r\n\r\n  if (program) {\r\n    EF_Ctrl_Program_Efuse_0();\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse write MAC address\r\n *\r\n * @param  mac[6]: MAC address buffer\r\n * @param  program: program to efuse entity or not\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Write_MAC_Address(uint8_t mac[6], uint8_t program) {\r\n  uint8_t *maclow  = (uint8_t *)mac;\r\n  uint8_t *machigh = (uint8_t *)(mac + 4);\r\n  uint32_t tmpVal;\r\n\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  /* The low 32 bits */\r\n  BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_WIFI_MAC_LOW, BL_RDWD_FRM_BYTEP(maclow));\r\n  /* The high 16 bits */\r\n  tmpVal = machigh[0] + (machigh[1] << 8);\r\n  BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_WIFI_MAC_HIGH, tmpVal);\r\n\r\n  if (program) {\r\n    EF_Ctrl_Program_Efuse_0();\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse Ctrl get zero bit count\r\n *\r\n * @param  val: Value to count\r\n *\r\n * @return Zero bit count\r\n *\r\n *******************************************************************************/\r\nstatic uint32_t EF_Ctrl_Get_Byte_Zero_Cnt(uint8_t val) {\r\n  uint32_t cnt = 0;\r\n  uint32_t i   = 0;\r\n\r\n  for (i = 0; i < 8; i++) {\r\n    if ((val & (1 << i)) == 0) {\r\n      cnt += 1;\r\n    }\r\n  }\r\n\r\n  return cnt;\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read MAC address\r\n *\r\n * @param  mac[8]: MAC address buffer\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type EF_Ctrl_Read_MAC_Address(uint8_t mac[8]) {\r\n  uint8_t *maclow  = (uint8_t *)mac;\r\n  uint8_t *machigh = (uint8_t *)(mac + 4);\r\n  uint32_t tmpVal;\r\n  uint32_t i   = 0;\r\n  uint32_t cnt = 0;\r\n\r\n  /* Trigger read data from efuse */\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_WIFI_MAC_LOW);\r\n  BL_WRWD_TO_BYTEP(maclow, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_WIFI_MAC_HIGH);\r\n  BL_WRWD_TO_BYTEP(machigh, tmpVal);\r\n\r\n  /* Get original parity */\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W2);\r\n\r\n  /* Check parity */\r\n  for (i = 0; i < 8; i++) {\r\n    cnt += EF_Ctrl_Get_Byte_Zero_Cnt(mac[i]);\r\n  }\r\n\r\n  if ((cnt & 0x3f) == (tmpVal & 0x3f)) {\r\n    return SUCCESS;\r\n  } else {\r\n    return ERROR;\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read MAC address\r\n *\r\n * @param  mac[7]: MAC address buffer\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type EF_Ctrl_Read_MAC_Address_Raw(uint8_t mac[7]) {\r\n  uint8_t *maclow  = (uint8_t *)mac;\r\n  uint8_t *machigh = (uint8_t *)(mac + 4);\r\n  uint32_t tmpVal;\r\n\r\n  /* Trigger read data from efuse */\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_WIFI_MAC_LOW);\r\n  BL_WRWD_TO_BYTEP(maclow, tmpVal);\r\n\r\n  tmpVal     = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_WIFI_MAC_HIGH);\r\n  machigh[0] = tmpVal & 0xff;\r\n  machigh[1] = (tmpVal >> 8) & 0xff;\r\n  machigh[2] = (tmpVal >> 16) & 0xff;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse lock writing for MAC address\r\n *\r\n * @param  program: program to efuse entity or not\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Writelock_MAC_Address(uint8_t program) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_LOCK);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, EF_DATA_0_WR_LOCK_WIFI_MAC);\r\n  BL_WR_REG(EF_DATA_BASE, EF_DATA_0_LOCK, tmpVal);\r\n\r\n  if (program) {\r\n    EF_Ctrl_Program_Efuse_0();\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Whether a value bits is all zero\r\n *\r\n * @param  val: value to check\r\n * @param  start: start bit\r\n * @param  len: total length of bits to check\r\n *\r\n * @return 1 for all bits zero 0 for others\r\n *\r\n *******************************************************************************/\r\nuint8_t EF_Ctrl_Is_All_Bits_Zero(uint32_t val, uint8_t start, uint8_t len) {\r\n  uint32_t mask = 0;\r\n\r\n  val = (val >> start);\r\n\r\n  if (len >= 32) {\r\n    mask = 0xffffffff;\r\n  } else {\r\n    mask = (1 << len) - 1;\r\n  }\r\n\r\n  if ((val & mask) == 0) {\r\n    return 1;\r\n  } else {\r\n    return 0;\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Whether MAC address slot is empty\r\n *\r\n * @param  slot: MAC address slot\r\n * @param  reload: whether  reload to check\r\n *\r\n * @return 0 for all slots full,1 for others\r\n *\r\n *******************************************************************************/\r\nuint8_t EF_Ctrl_Is_MAC_Address_Slot_Empty(uint8_t slot, uint8_t reload) {\r\n  uint32_t tmp1 = 0xffffffff, tmp2 = 0xffffffff;\r\n  uint32_t part1Empty = 0, part2Empty = 0;\r\n\r\n  if (slot == 0) {\r\n    /* Switch to AHB clock */\r\n    EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n    if (reload) {\r\n      EF_CTRL_LOAD_BEFORE_READ_R0;\r\n    }\r\n\r\n    tmp1 = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_WIFI_MAC_LOW);\r\n    tmp2 = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_WIFI_MAC_HIGH);\r\n  } else if (slot == 1) {\r\n    /* Switch to AHB clock */\r\n    EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n    if (reload) {\r\n      EF_CTRL_LOAD_BEFORE_READ_R0;\r\n    }\r\n\r\n    tmp1 = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W0);\r\n    tmp2 = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W1);\r\n  } else if (slot == 2) {\r\n    /* Switch to AHB clock */\r\n    EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n    if (reload) {\r\n      EF_CTRL_LOAD_BEFORE_READ_R0;\r\n    }\r\n\r\n    tmp1 = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_DBG_PWD_LOW);\r\n    tmp2 = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_DBG_PWD_HIGH);\r\n  }\r\n\r\n  part1Empty = (EF_Ctrl_Is_All_Bits_Zero(tmp1, 0, 32));\r\n  part2Empty = (EF_Ctrl_Is_All_Bits_Zero(tmp2, 0, 22));\r\n\r\n  return (part1Empty && part2Empty);\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse write optional MAC address\r\n *\r\n * @param  slot: MAC address slot\r\n * @param  mac[8]: MAC address buffer\r\n * @param  program: Whether program\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type EF_Ctrl_Write_MAC_Address_Opt(uint8_t slot, uint8_t mac[8], uint8_t program) {\r\n  uint8_t *maclow  = (uint8_t *)mac;\r\n  uint8_t *machigh = (uint8_t *)(mac + 4);\r\n  uint32_t tmpVal  = 0;\r\n  uint32_t i       = 0;\r\n  uint32_t cnt     = 0;\r\n\r\n  if (slot >= 3) {\r\n    return ERROR;\r\n  }\r\n\r\n  if (slot == 2) {\r\n    /* Switch to AHB clock */\r\n    EF_Ctrl_Sw_AHB_Clk_0();\r\n  } else {\r\n    /* Switch to AHB clock */\r\n    EF_Ctrl_Sw_AHB_Clk_0();\r\n  }\r\n\r\n  /* The low 32 bits */\r\n  if (slot == 0) {\r\n    BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_WIFI_MAC_LOW, BL_RDWD_FRM_BYTEP(maclow));\r\n  } else if (slot == 1) {\r\n    BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W0, BL_RDWD_FRM_BYTEP(maclow));\r\n  } else if (slot == 2) {\r\n    BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_DBG_PWD_LOW, BL_RDWD_FRM_BYTEP(maclow));\r\n  }\r\n\r\n  /* The high 32 bits */\r\n  if (slot == 0) {\r\n    BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_WIFI_MAC_HIGH, BL_RDWD_FRM_BYTEP(machigh));\r\n  } else if (slot == 1) {\r\n    BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W1, BL_RDWD_FRM_BYTEP(machigh));\r\n  } else if (slot == 2) {\r\n    BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_DBG_PWD_HIGH, BL_RDWD_FRM_BYTEP(machigh));\r\n  }\r\n\r\n  cnt = 0;\r\n  for (i = 0; i < 8; i++) {\r\n    cnt += EF_Ctrl_Get_Byte_Zero_Cnt(mac[i]);\r\n  }\r\n  cnt &= 0x3f;\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W2);\r\n  if (slot == 0) {\r\n    tmpVal |= (cnt << 0);\r\n  } else if (slot == 1) {\r\n    tmpVal |= (cnt << 6);\r\n  } else if (slot == 2) {\r\n    tmpVal |= (cnt << 12);\r\n  }\r\n  BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W2, tmpVal);\r\n\r\n  if (program) {\r\n    if (slot == 2) {\r\n      EF_Ctrl_Program_Efuse_0();\r\n    } else {\r\n      EF_Ctrl_Program_Efuse_0();\r\n    }\r\n  }\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read optional MAC address\r\n *\r\n * @param  slot: MAC address slot\r\n * @param  mac[8]: MAC address buffer\r\n * @param  reload: Whether reload\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type EF_Ctrl_Read_MAC_Address_Opt(uint8_t slot, uint8_t mac[8], uint8_t reload) {\r\n  uint8_t *maclow  = (uint8_t *)mac;\r\n  uint8_t *machigh = (uint8_t *)(mac + 4);\r\n  uint32_t tmpVal  = 0;\r\n  uint32_t i       = 0;\r\n  uint32_t cnt     = 0;\r\n  uint32_t crc     = 0;\r\n\r\n  if (slot >= 3) {\r\n    return ERROR;\r\n  }\r\n\r\n  /* Trigger read data from efuse */\r\n  if (reload) {\r\n    if (slot == 2) {\r\n      EF_CTRL_LOAD_BEFORE_READ_R0;\r\n    } else {\r\n      EF_CTRL_LOAD_BEFORE_READ_R0;\r\n    }\r\n  }\r\n\r\n  if (slot == 0) {\r\n    tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_WIFI_MAC_LOW);\r\n  } else if (slot == 1) {\r\n    tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W0);\r\n  } else if (slot == 2) {\r\n    tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_DBG_PWD_LOW);\r\n  }\r\n  BL_WRWD_TO_BYTEP(maclow, tmpVal);\r\n\r\n  if (slot == 0) {\r\n    tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_WIFI_MAC_HIGH);\r\n  } else if (slot == 1) {\r\n    tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W1);\r\n  } else if (slot == 2) {\r\n    tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_DBG_PWD_HIGH);\r\n  }\r\n  BL_WRWD_TO_BYTEP(machigh, tmpVal);\r\n\r\n  /* Get original parity */\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W2);\r\n  if (slot == 0) {\r\n    crc = ((tmpVal >> 0) & 0x3f);\r\n  } else if (slot == 1) {\r\n    crc = ((tmpVal >> 6) & 0x3f);\r\n  } else if (slot == 2) {\r\n    crc = ((tmpVal >> 12) & 0x3f);\r\n  }\r\n\r\n  /* Check parity */\r\n  for (i = 0; i < 8; i++) {\r\n    cnt += EF_Ctrl_Get_Byte_Zero_Cnt(mac[i]);\r\n  }\r\n  if ((cnt & 0x3f) == crc) {\r\n    return SUCCESS;\r\n  } else {\r\n    return ERROR;\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read chip ID\r\n *\r\n * @param  chipID[8]: Chip ID buffer\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type EF_Ctrl_Read_Chip_ID(uint8_t chipID[8]) { return EF_Ctrl_Read_MAC_Address(chipID); }\r\n\r\n/****************************************************************************\r\n * @brief  Efuse get chip PID&&VID\r\n *\r\n * @param  pid[1]: Chip PID\r\n * @param  vid[1]: Chip VID\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type EF_Ctrl_Get_Chip_PIDVID(uint16_t pid[1], uint16_t vid[1]) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Trigger read data from efuse */\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_4_W3);\r\n  pid[0] = (uint16_t)(tmpVal & 0xFFFF);\r\n  vid[0] = (uint16_t)(tmpVal >> 16);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nuint32_t EF_Ctrl_Get_Key_Slot_w0() {\r\n\r\n  /* Trigger read data from efuse */\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  return BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_4_W0);\r\n}\r\nuint32_t EF_Ctrl_Get_Key_Slot_w1() {\r\n\r\n  /* Trigger read data from efuse */\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  return BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_4_W1);\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse get customer PID&&VID\r\n *\r\n * @param  pid[1]: Customer PID\r\n * @param  vid[1]: Customer VID\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type EF_Ctrl_Get_Customer_PIDVID(uint16_t pid[1], uint16_t vid[1]) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Trigger read data from efuse */\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_4_W2);\r\n  pid[0] = (uint16_t)(tmpVal & 0xFFFF);\r\n  vid[0] = (uint16_t)(tmpVal >> 16);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read device info\r\n *\r\n * @param  deviceInfo: Device info pointer\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Read_Device_Info(Efuse_Device_Info_Type *deviceInfo) {\r\n  uint32_t  tmpVal;\r\n  uint32_t *p = (uint32_t *)deviceInfo;\r\n\r\n  /* Trigger read data from efuse */\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W2);\r\n  *p     = tmpVal;\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Whether Capcode is empty\r\n *\r\n * @param  slot: Cap code slot\r\n * @param  reload: Whether reload\r\n *\r\n * @return 0 for all slots full,1 for others\r\n *\r\n *******************************************************************************/\r\nuint8_t EF_Ctrl_Is_CapCode_Empty(uint8_t slot, uint8_t reload) {\r\n  uint32_t tmp = 0xffffffff;\r\n\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  if (reload) {\r\n    EF_CTRL_LOAD_BEFORE_READ_R0;\r\n  }\r\n\r\n  if (slot == 0) {\r\n    tmp = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W3);\r\n    return (EF_Ctrl_Is_All_Bits_Zero(tmp, 25, 7));\r\n  } else if (slot == 1) {\r\n    tmp = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_3_W3);\r\n    return (EF_Ctrl_Is_All_Bits_Zero(tmp, 9, 7));\r\n  } else if (slot == 2) {\r\n    tmp = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_3_W3);\r\n    return (EF_Ctrl_Is_All_Bits_Zero(tmp, 25, 7));\r\n  } else {\r\n    return 0;\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse write Cap code\r\n *\r\n * @param  slot: Cap code slot\r\n * @param  code: Cap code value\r\n * @param  program: Whether program\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type EF_Ctrl_Write_CapCode_Opt(uint8_t slot, uint8_t code, uint8_t program) {\r\n  uint32_t tmp;\r\n  uint8_t  trim;\r\n\r\n  if (slot >= 3) {\r\n    return ERROR;\r\n  }\r\n\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  trim = (code << 1);\r\n  trim |= (1 << 0);\r\n\r\n  if (slot == 0) {\r\n    tmp = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W3);\r\n    BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W3, tmp | (trim << 25));\r\n  } else if (slot == 1) {\r\n    tmp = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_3_W3);\r\n    BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_3_W3, tmp | (trim << 9));\r\n  } else if (slot == 2) {\r\n    tmp = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_3_W3);\r\n    BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_3_W3, tmp | (trim << 25));\r\n  }\r\n\r\n  if (program) {\r\n    EF_Ctrl_Program_Efuse_0();\r\n  }\r\n  while (SET == EF_Ctrl_Busy())\r\n    ;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read Cap code\r\n *\r\n * @param  slot: Cap code slot\r\n * @param  code: Cap code pointer\r\n * @param  reload: Whether reload\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type EF_Ctrl_Read_CapCode_Opt(uint8_t slot, uint8_t *code, uint8_t reload) {\r\n  uint32_t tmp;\r\n  uint8_t  trim = 0;\r\n\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  if (reload) {\r\n    EF_CTRL_LOAD_BEFORE_READ_R0;\r\n  }\r\n\r\n  if (slot == 0) {\r\n    tmp  = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W3);\r\n    trim = (tmp >> 25) & 0x7f;\r\n  } else if (slot == 1) {\r\n    tmp  = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_3_W3);\r\n    trim = (tmp >> 9) & 0x7f;\r\n  } else if (slot == 2) {\r\n    tmp  = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_3_W3);\r\n    trim = (tmp >> 25) & 0x7f;\r\n  }\r\n\r\n  if (trim & 0x01) {\r\n    *code = trim >> 1;\r\n    return SUCCESS;\r\n  }\r\n  return ERROR;\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Whether power offset slot is empty\r\n *\r\n * @param  slot: Power offset code slot\r\n * @param  reload: Whether reload\r\n *\r\n * @return 0 for all slots full,1 for others\r\n *\r\n *******************************************************************************/\r\nuint8_t EF_Ctrl_Is_PowerOffset_Slot_Empty(uint8_t slot, uint8_t reload) {\r\n  uint32_t tmp1       = 0xffffffff;\r\n  uint32_t part1Empty = 0, part2Empty = 0;\r\n\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  if (reload) {\r\n    EF_CTRL_LOAD_BEFORE_READ_R0;\r\n  }\r\n\r\n  if (slot == 0) {\r\n    tmp1       = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W3);\r\n    part1Empty = (EF_Ctrl_Is_All_Bits_Zero(tmp1, 16, 9));\r\n    part2Empty = 1;\r\n  } else if (slot == 1) {\r\n    tmp1       = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_3_W3);\r\n    part1Empty = (EF_Ctrl_Is_All_Bits_Zero(tmp1, 0, 9));\r\n    part2Empty = 1;\r\n  } else if (slot == 2) {\r\n    tmp1       = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_3_W3);\r\n    part1Empty = (EF_Ctrl_Is_All_Bits_Zero(tmp1, 16, 9));\r\n    part2Empty = 1;\r\n  }\r\n\r\n  return (part1Empty && part2Empty);\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse write power offset\r\n *\r\n * @param  slot: Power offset slot\r\n * @param  pwrOffset[2]: Power offset value array\r\n * @param  program: Whether program\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type EF_Ctrl_Write_PowerOffset_Opt(uint8_t slot, int8_t pwrOffset[2], uint8_t program) {\r\n  uint32_t tmp   = 0;\r\n  uint32_t k     = 0;\r\n  uint32_t Value = 0;\r\n\r\n  if (slot >= 3) {\r\n    return ERROR;\r\n  }\r\n\r\n  for (k = 0; k < 2; k++) {\r\n    /* Use 4 bits as signed value */\r\n    if (pwrOffset[k] > 7) {\r\n      pwrOffset[k] = 7;\r\n    }\r\n    if (pwrOffset[k] < -8) {\r\n      pwrOffset[k] = -8;\r\n    }\r\n    Value += (uint32_t)(pwrOffset[k] & 0x0f) << (k * 4);\r\n  }\r\n\r\n  if (slot == 0) {\r\n    tmp = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W3);\r\n    tmp |= (Value << 17);\r\n    tmp |= (1 << 16);\r\n    BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W3, tmp);\r\n  } else if (slot == 1) {\r\n    tmp = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_3_W3);\r\n    tmp |= (Value << 1);\r\n    tmp |= (1 << 0);\r\n    BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_3_W3, tmp);\r\n  } else if (slot == 2) {\r\n    tmp = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_3_W3);\r\n    tmp |= (Value << 17);\r\n    tmp |= (1 << 16);\r\n    BL_WR_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_3_W3, tmp);\r\n  }\r\n\r\n  if (program) {\r\n    EF_Ctrl_Program_Efuse_0();\r\n  }\r\n\r\n  while (SET == EF_Ctrl_Busy())\r\n    ;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read poweroffset value\r\n *\r\n * @param  slot: Power offset slot\r\n * @param  pwrOffset[2]: Power offset array\r\n * @param  reload: Whether reload\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type EF_Ctrl_Read_PowerOffset_Opt(uint8_t slot, int8_t pwrOffset[2], uint8_t reload) {\r\n  uint32_t pwrOffsetValue = 0;\r\n  uint32_t tmp            = 0, k;\r\n  uint8_t  en             = 0;\r\n\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  if (reload) {\r\n    EF_CTRL_LOAD_BEFORE_READ_R0;\r\n  }\r\n\r\n  if (slot == 0) {\r\n    tmp            = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_5_W3);\r\n    en             = (tmp >> 16) & 0x01;\r\n    pwrOffsetValue = (tmp >> 17) & 0xff;\r\n  } else if (slot == 1) {\r\n    tmp            = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_3_W3);\r\n    en             = (tmp >> 0) & 0x01;\r\n    pwrOffsetValue = (tmp >> 1) & 0xff;\r\n  } else if (slot == 2) {\r\n    tmp            = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_EF_KEY_SLOT_3_W3);\r\n    en             = (tmp >> 16) & 0x01;\r\n    pwrOffsetValue = (tmp >> 17) & 0xff;\r\n  }\r\n\r\n  if (en) {\r\n    for (k = 0; k < 2; k++) {\r\n      tmp = (pwrOffsetValue >> (k * 4)) & 0x0f;\r\n      if (tmp >= 8) {\r\n        pwrOffset[k] = tmp - 16;\r\n      } else {\r\n        pwrOffset[k] = tmp;\r\n      }\r\n    }\r\n    return SUCCESS;\r\n  }\r\n  return ERROR;\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse write AES key\r\n *\r\n * @param  index: index of key slot\r\n * @param  keyData: key data buffer\r\n * @param  len: key data length in words\r\n * @param  program: program to efuse entity or not\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Write_AES_Key(uint8_t index, uint32_t *keyData, uint32_t len, uint8_t program) {\r\n  uint32_t *pAESKeyStart0 = (uint32_t *)(EF_DATA_BASE + 0x1C);\r\n\r\n  if (index > 5) {\r\n    return;\r\n  }\r\n\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  /* Every key is 4 words len*/\r\n  BL702_MemCpy4(pAESKeyStart0 + index * 4, keyData, len);\r\n\r\n  if (program) {\r\n    EF_Ctrl_Program_Efuse_0();\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse read AES key from specified region and index\r\n *\r\n * @param  index: index of key slot\r\n * @param  keyData: key data buffer\r\n * @param  len: key data length in words\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Read_AES_Key(uint8_t index, uint32_t *keyData, uint32_t len) {\r\n  uint32_t *pAESKeyStart0 = (uint32_t *)(EF_DATA_BASE + 0x1C);\r\n\r\n  if (index > 5) {\r\n    return;\r\n  }\r\n\r\n  /* Trigger read data from efuse*/\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  /* Every key is 4 words len*/\r\n  BL702_MemCpy4(keyData, pAESKeyStart0 + index * 4, len);\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse lock writing for aes key\r\n *\r\n * @param  index: index of key slot\r\n * @param  program: program to efuse entity or not\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Writelock_AES_Key(uint8_t index, uint8_t program) {\r\n  uint32_t tmpVal;\r\n\r\n  if (index > 5) {\r\n    return;\r\n  }\r\n\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_LOCK);\r\n\r\n  if (index <= 3) {\r\n    tmpVal |= (1 << (index + 19));\r\n  } else {\r\n    tmpVal |= (1 << (index + 19));\r\n    tmpVal |= (1 << (index - 4 + 13));\r\n  }\r\n\r\n  BL_WR_REG(EF_DATA_BASE, EF_DATA_0_LOCK, tmpVal);\r\n\r\n  if (program) {\r\n    EF_Ctrl_Program_Efuse_0();\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Efuse lock reading for aes key\r\n *\r\n * @param  index: index of key slot\r\n * @param  program: program to efuse entity or not\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Readlock_AES_Key(uint8_t index, uint8_t program) {\r\n  uint32_t tmpVal;\r\n\r\n  if (index > 5) {\r\n    return;\r\n  }\r\n\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_DATA_0_LOCK);\r\n  tmpVal |= (1 << (index + 26));\r\n  BL_WR_REG(EF_DATA_BASE, EF_DATA_0_LOCK, tmpVal);\r\n\r\n  if (program) {\r\n    EF_Ctrl_Program_Efuse_0();\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Program data to efuse region 0\r\n *\r\n * @param  index: index of efuse in word\r\n * @param  data: data buffer\r\n * @param  len: data length\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Program_Direct_R0(uint32_t index, uint32_t *data, uint32_t len) {\r\n  uint32_t *pEfuseStart0 = (uint32_t *)(EF_DATA_BASE + 0x00);\r\n\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  /* Add delay for CLK to be stable */\r\n  BL702_Delay_US(4);\r\n\r\n  BL702_MemCpy4(pEfuseStart0 + index, data, len);\r\n\r\n  EF_Ctrl_Program_Efuse_0();\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Read data from efuse region 0\r\n *\r\n * @param  index: index of efuse in word\r\n * @param  data: data buffer\r\n * @param  len: data length\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Read_Direct_R0(uint32_t index, uint32_t *data, uint32_t len) {\r\n  uint32_t *pEfuseStart0 = (uint32_t *)(EF_DATA_BASE + 0x00);\r\n\r\n  EF_CTRL_LOAD_BEFORE_READ_R0;\r\n\r\n  BL702_MemCpy4(data, pEfuseStart0 + index, len);\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Clear efuse data register\r\n *\r\n * @param  index: index of efuse in word\r\n * @param  len: data length\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION EF_Ctrl_Clear(uint32_t index, uint32_t len) {\r\n  uint32_t *pEfuseStart0 = (uint32_t *)(EF_DATA_BASE + 0x00);\r\n  uint32_t  i            = 0;\r\n\r\n  /* Switch to AHB clock */\r\n  EF_Ctrl_Sw_AHB_Clk_0();\r\n\r\n  /* Clear data */\r\n  for (i = 0; i < len; i++) {\r\n    pEfuseStart0[index + i] = 0;\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************\r\n * @brief  efuse ctrl crc enable\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Crc_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_CTRL_EF_CRC_CTRL_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, EF_CTRL_EF_CRC_TRIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, EF_CTRL_EF_CRC_MODE);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, EF_CTRL_EF_CRC_DOUT_INV_EN);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, EF_CTRL_EF_CRC_DOUT_ENDIAN);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, EF_CTRL_EF_CRC_DIN_ENDIAN);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, EF_CTRL_EF_CRC_INT_CLR);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, EF_CTRL_EF_CRC_INT_SET);\r\n  BL_WR_REG(EF_DATA_BASE, EF_CTRL_EF_CRC_CTRL_0, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_CTRL_EF_CRC_CTRL_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, EF_CTRL_EF_CRC_EN);\r\n  BL_WR_REG(EF_DATA_BASE, EF_CTRL_EF_CRC_CTRL_0, tmpVal);\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  efuse ctrl get crc busy status\r\n *\r\n * @param  None\r\n *\r\n * @return DISABLE or ENABLE\r\n *\r\n *******************************************************************************/\r\nBL_Sts_Type EF_Ctrl_Crc_Is_Busy(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_CTRL_EF_CRC_CTRL_0);\r\n  return (BL_Sts_Type)BL_IS_REG_BIT_SET(tmpVal, EF_CTRL_EF_CRC_BUSY);\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  efuse ctrl set golden value\r\n *\r\n * @param  goldenValue: Crc golden value\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid EF_Ctrl_Crc_Set_Golden(uint32_t goldenValue) { BL_WR_REG(EF_DATA_BASE, EF_CTRL_EF_CRC_CTRL_4, goldenValue); }\r\n\r\n/****************************************************************************\r\n * @brief  efuse ctrl get crc result\r\n *\r\n * @param  None\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type EF_Ctrl_Crc_Result(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(EF_DATA_BASE, EF_CTRL_EF_CRC_CTRL_0);\r\n  return (BL_Err_Type)BL_IS_REG_BIT_SET(tmpVal, EF_CTRL_EF_CRC_ERROR);\r\n}\r\n\r\n/*@} end of group SEC_EF_CTRL_Public_Functions */\r\n\r\n/*@} end of group SEC_EF_CTRL */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_emac.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_emac.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_emac.h\"\r\n#include \"bl702.h\"\r\n#include \"bl702_glb.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  EMAC\r\n *  @{\r\n */\r\n\r\n/** @defgroup  EMAC_Private_Macros\r\n *  @{\r\n */\r\n#define PHY_MAX_RETRY (0x3F0)\r\n\r\n/*@} end of group EMAC_Private_Macros */\r\n\r\n/** @defgroup  EMAC_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group EMAC_Private_Types */\r\n\r\n/** @defgroup  EMAC_Private_Variables\r\n *  @{\r\n */\r\nstatic intCallback_Type *emacIntCbfArra[EMAC_INT_CNT] = {NULL};\r\n\r\n/*@} end of group EMAC_Private_Variables */\r\n\r\n/** @defgroup  EMAC_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group EMAC_Global_Variables */\r\n\r\n/** @defgroup  EMAC_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group EMAC_Private_Fun_Declaration */\r\n\r\n/** @defgroup  EMAC_Private_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set MAC Address\r\n                                                                                *\r\n                                                                                * @param  macAddr[6]: MAC address buffer array\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic void EMAC_SetMACAddress(uint8_t macAddr[6]) {\r\n  BL_WR_REG(EMAC_BASE, EMAC_MAC_ADDR1, (macAddr[0] << 8) | macAddr[1]);\r\n  BL_WR_REG(EMAC_BASE, EMAC_MAC_ADDR0, (macAddr[2] << 24) | (macAddr[3] << 16) | (macAddr[4] << 8) | (macAddr[5] << 0));\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set PHY Address\r\n                                                                                *\r\n                                                                                * @param  phyAddress: Phy address\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid EMAC_Phy_SetAddress(uint16_t phyAddress) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Set Phy Address */\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_MIIADDRESS);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_FIAD, phyAddress);\r\n  BL_WR_REG(EMAC_BASE, EMAC_MIIADDRESS, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set PHY Address\r\n                                                                                *\r\n                                                                                * @param  phyAddress: Phy address\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid EMAC_Phy_Set_Full_Duplex(uint8_t fullDuplex) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Set MAC duplex config */\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_MODE);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_FULLD, fullDuplex);\r\n  BL_WR_REG(EMAC_BASE, EMAC_MODE, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Read PHY register\r\n                                                                                *\r\n                                                                                * @param  phyReg: PHY register\r\n                                                                                * @param  regValue: PHY register value pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_Phy_Read(uint16_t phyReg, uint16_t *regValue) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Set Register Address */\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_MIIADDRESS);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_RGAD, phyReg);\r\n  BL_WR_REG(EMAC_BASE, EMAC_MIIADDRESS, tmpVal);\r\n\r\n  /* Trigger read */\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_MIICOMMAND);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, EMAC_RSTAT);\r\n  BL_WR_REG(EMAC_BASE, EMAC_MIICOMMAND, tmpVal);\r\n\r\n  BL_DRV_DUMMY;\r\n\r\n  do {\r\n    tmpVal = BL_RD_REG(EMAC_BASE, EMAC_MIISTATUS);\r\n    BL702_Delay_US(16);\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, EMAC_MIIM_BUSY));\r\n\r\n  *regValue = BL_RD_REG(EMAC_BASE, EMAC_MIIRX_DATA);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Write PHY register\r\n                                                                                *\r\n                                                                                * @param  phyReg: PHY register\r\n                                                                                * @param  regValue: PHY register value\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_Phy_Write(uint16_t phyReg, uint16_t regValue) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Set Register Address */\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_MIIADDRESS);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_RGAD, phyReg);\r\n  BL_WR_REG(EMAC_BASE, EMAC_MIIADDRESS, tmpVal);\r\n\r\n  /* Set Write data */\r\n  BL_WR_REG(EMAC_BASE, EMAC_MIITX_DATA, regValue);\r\n\r\n  /* Trigger write */\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_MIICOMMAND);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, EMAC_WCTRLDATA);\r\n  BL_WR_REG(EMAC_BASE, EMAC_MIICOMMAND, tmpVal);\r\n\r\n  BL_DRV_DUMMY;\r\n\r\n  do {\r\n    tmpVal = BL_RD_REG(EMAC_BASE, EMAC_MIISTATUS);\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, EMAC_MIIM_BUSY));\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/*@} end of group EMAC_Private_Functions */\r\n\r\n/** @defgroup  EMAC_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Initialize EMAC module\r\n                                                                                *\r\n                                                                                * @param  cfg: EMAC configuration pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_Init(EMAC_CFG_Type *cfg) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Disable clock gate */\r\n  GLB_AHB_Slave1_Clock_Gate(DISABLE, BL_AHB_SLAVE1_EMAC);\r\n\r\n  /* Set MAC config */\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_MODE);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_RMII_EN, 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_RECSMALL, cfg->recvSmallFrame);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_PAD, cfg->padEnable);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_HUGEN, cfg->recvHugeFrame);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_CRCEN, cfg->crcEnable);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_NOPRE, cfg->noPreamble);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_BRO, cfg->recvBroadCast);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_PRO, ENABLE);\r\n  // tmpVal |= (1 << 7); /* local loopback in emac */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_IFG, cfg->interFrameGapCheck);\r\n  BL_WR_REG(EMAC_BASE, EMAC_MODE, tmpVal);\r\n\r\n  /* Set inter frame gap value */\r\n  BL_WR_REG(EMAC_BASE, EMAC_IPGT, cfg->interFrameGapValue);\r\n\r\n  /* Set MII interface */\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_MIIMODE);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_MIINOPRE, cfg->miiNoPreamble);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_CLKDIV, cfg->miiClkDiv);\r\n  BL_WR_REG(EMAC_BASE, EMAC_MIIMODE, tmpVal);\r\n\r\n  /* Set collision */\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_COLLCONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_MAXRET, cfg->maxTxRetry);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_COLLVALID, cfg->collisionValid);\r\n  BL_WR_REG(EMAC_BASE, EMAC_COLLCONFIG, tmpVal);\r\n\r\n  /* Set frame length */\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_PACKETLEN);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_MINFL, cfg->minFrameLen);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, EMAC_MAXFL, cfg->maxFrameLen);\r\n  BL_WR_REG(EMAC_BASE, EMAC_PACKETLEN, tmpVal);\r\n\r\n  EMAC_SetMACAddress(cfg->macAddr);\r\n\r\n  void EMAC_IRQHandler(void);\r\n  Interrupt_Handler_Register(EMAC_IRQn, EMAC_IRQHandler);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  DeInitialize EMAC module\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_DeInit(void) {\r\n  EMAC_Disable();\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Initialize EMAC TX RX MDA buffer\r\n                                                                                *\r\n                                                                                * @param  handle: EMAC handle pointer\r\n                                                                                * @param  txBuff: TX buffer\r\n                                                                                * @param  txBuffCount: TX buffer count\r\n                                                                                * @param  rxBuff: RX buffer\r\n                                                                                * @param  rxBuffCount: RX buffer count\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_DMADescListInit(EMAC_Handle_Type *handle, uint8_t *txBuff, uint32_t txBuffCount, uint8_t *rxBuff, uint32_t rxBuffCount) {\r\n  uint32_t i = 0;\r\n\r\n  /* Set the Ethernet handler env */\r\n  handle->bd          = (EMAC_BD_Desc_Type *)(EMAC_BASE + EMAC_DMA_DESC_OFFSET);\r\n  handle->txIndexEMAC = 0;\r\n  handle->txIndexCPU  = 0;\r\n  handle->txBuffLimit = txBuffCount - 1;\r\n  /* The receive descriptors' address starts right after the last transmit BD. */\r\n  handle->rxIndexEMAC = txBuffCount;\r\n  handle->rxIndexCPU  = txBuffCount;\r\n  handle->rxBuffLimit = txBuffCount + rxBuffCount - 1;\r\n\r\n  /* Fill each DMARxDesc descriptor with the right values */\r\n  for (i = 0; i < txBuffCount; i++) {\r\n    /* Get the pointer on the ith member of the Tx Desc list */\r\n    handle->bd[i].Buffer = (NULL == txBuff) ? 0 : (uint32_t)(txBuff + (ETH_MAX_PACKET_SIZE * i));\r\n    handle->bd[i].C_S_L  = 0;\r\n  }\r\n\r\n  /* For the last TX DMA Descriptor, it should be wrap back */\r\n  handle->bd[handle->txBuffLimit].C_S_L |= EMAC_BD_FIELD_MSK(TX_WR);\r\n\r\n  for (i = txBuffCount; i < (txBuffCount + rxBuffCount); i++) {\r\n    /* Get the pointer on the ith member of the Rx Desc list */\r\n    handle->bd[i].Buffer = (NULL == rxBuff) ? 0 : (uint32_t)(rxBuff + (ETH_MAX_PACKET_SIZE * (i - txBuffCount)));\r\n    handle->bd[i].C_S_L  = (ETH_MAX_PACKET_SIZE << 16) | EMAC_BD_FIELD_MSK(RX_IRQ) | EMAC_BD_FIELD_MSK(RX_E);\r\n  }\r\n\r\n  /* For the last RX DMA Descriptor, it should be wrap back */\r\n  handle->bd[handle->rxBuffLimit].C_S_L |= EMAC_BD_FIELD_MSK(RX_WR);\r\n\r\n  /* For the TX DMA Descriptor, it will wrap to 0 according to EMAC_TX_BD_NUM*/\r\n  BL_WR_REG(EMAC_BASE, EMAC_TX_BD_NUM, txBuffCount);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get TX MDA buffer descripter for data to send\r\n                                                                                *\r\n                                                                                * @param  handle: EMAC handle pointer\r\n                                                                                * @param  txDMADesc: TX DMA descriptor pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_DMATxDescGet(EMAC_Handle_Type *handle, EMAC_BD_Desc_Type **txDMADesc) { return SUCCESS; }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Start TX\r\n                                                                                *\r\n                                                                                * @param  handle: EMAC handle pointer\r\n                                                                                * @param  txDMADesc: TX DMA descriptor pointer\r\n                                                                                * @param  len: len\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_StartTx(EMAC_Handle_Type *handle, EMAC_BD_Desc_Type *txDMADesc, uint32_t len) { return SUCCESS; }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable EMAC module\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Enable EMAC */\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_MODE);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, EMAC_TXEN);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, EMAC_RXEN);\r\n  BL_WR_REG(EMAC_BASE, EMAC_MODE, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  EMAC_Enable_TX\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_Enable_TX(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Enable EMAC */\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_MODE);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, EMAC_TXEN);\r\n  BL_WR_REG(EMAC_BASE, EMAC_MODE, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  EMAC_Disable_TX\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_Disable_TX(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Enable EMAC */\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_MODE);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, EMAC_TXEN);\r\n  BL_WR_REG(EMAC_BASE, EMAC_MODE, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  EMAC_Enable_RX\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_Enable_RX(void) {\r\n  uint32_t tmpval;\r\n\r\n  /* Enable EMAC TX*/\r\n  tmpval = BL_RD_REG(EMAC_BASE, EMAC_MODE);\r\n  tmpval = BL_SET_REG_BIT(tmpval, EMAC_RXEN);\r\n  BL_WR_REG(EMAC_BASE, EMAC_MODE, tmpval);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  EMAC_Disable_RX\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_Disable_RX(void) {\r\n  uint32_t tmpval;\r\n\r\n  /* Disable EMAC RX*/\r\n  tmpval = BL_RD_REG(EMAC_BASE, EMAC_MODE);\r\n  tmpval = BL_CLR_REG_BIT(tmpval, EMAC_RXEN);\r\n  BL_WR_REG(EMAC_BASE, EMAC_MODE, tmpval);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable EMAC module\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Enable EMAC */\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_MODE);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, EMAC_TXEN);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, EMAC_RXEN);\r\n  BL_WR_REG(EMAC_BASE, EMAC_MODE, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  EMAC mask or unmask certain or all interrupt\r\n                                                                                *\r\n                                                                                * @param  intType: EMAC interrupt type\r\n                                                                                * @param  intMask: EMAC interrupt mask value( MASK:disbale interrupt,UNMASK:enable interrupt )\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_IntMask(EMAC_INT_Type intType, BL_Mask_Type intMask) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_BL_MASK_TYPE(intMask));\r\n\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_INT_MASK);\r\n\r\n  /* Mask or unmask certain or all interrupt */\r\n  if (MASK == intMask) {\r\n    tmpVal |= intType;\r\n  } else {\r\n    tmpVal &= (~intType);\r\n  }\r\n\r\n  /* Write back */\r\n  BL_WR_REG(EMAC_BASE, EMAC_INT_MASK, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get EMAC interrupt status\r\n                                                                                *\r\n                                                                                * @param  intType: EMAC interrupt type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type EMAC_GetIntStatus(EMAC_INT_Type intType) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_EMAC_INT_TYPE(intType));\r\n\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_INT_SOURCE);\r\n\r\n  return (tmpVal & intType) ? SET : RESET;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Clear EMAC interrupt\r\n                                                                                *\r\n                                                                                * @param  intType: EMAC interrupt type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_ClrIntStatus(EMAC_INT_Type intType) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_EMAC_INT_TYPE(intType));\r\n\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_INT_SOURCE);\r\n\r\n  BL_WR_REG(EMAC_BASE, EMAC_INT_SOURCE, tmpVal | intType);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  EMAC_Int_Callback_Install\r\n                                                                                *\r\n                                                                                * @param  intIdx: EMAC_INT_Index\r\n                                                                                * @param  cbFun: call back\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_Int_Callback_Install(EMAC_INT_Index intIdx, intCallback_Type *cbFun) {\r\n  /* Check the parameters */\r\n\r\n  emacIntCbfArra[intIdx] = cbFun;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  EMAC_IRQHandler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid EMAC_IRQHandler(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(EMAC_BASE, EMAC_INT_MASK);\r\n\r\n  if (SET == EMAC_GetIntStatus(EMAC_INT_TX_DONE) && !BL_IS_REG_BIT_SET(tmpVal, EMAC_TXB_M)) {\r\n    EMAC_ClrIntStatus(EMAC_INT_TX_DONE);\r\n\r\n    if (emacIntCbfArra[EMAC_INT_TX_DONE_IDX]) {\r\n      emacIntCbfArra[EMAC_INT_TX_DONE_IDX]();\r\n    }\r\n  }\r\n\r\n  if (SET == EMAC_GetIntStatus(EMAC_INT_TX_ERROR) && !BL_IS_REG_BIT_SET(tmpVal, EMAC_TXE_M)) {\r\n    EMAC_ClrIntStatus(EMAC_INT_TX_ERROR);\r\n\r\n    if (emacIntCbfArra[EMAC_INT_TX_ERROR_IDX]) {\r\n      emacIntCbfArra[EMAC_INT_TX_ERROR_IDX]();\r\n    }\r\n  }\r\n\r\n  if (SET == EMAC_GetIntStatus(EMAC_INT_RX_DONE) && !BL_IS_REG_BIT_SET(tmpVal, EMAC_RXB_M)) {\r\n    EMAC_ClrIntStatus(EMAC_INT_RX_DONE);\r\n\r\n    if (emacIntCbfArra[EMAC_INT_RX_DONE_IDX]) {\r\n      emacIntCbfArra[EMAC_INT_RX_DONE_IDX]();\r\n    }\r\n  }\r\n\r\n  if (SET == EMAC_GetIntStatus(EMAC_INT_RX_ERROR) && !BL_IS_REG_BIT_SET(tmpVal, EMAC_RXE_M)) {\r\n    EMAC_ClrIntStatus(EMAC_INT_RX_ERROR);\r\n\r\n    if (emacIntCbfArra[EMAC_INT_RX_ERROR_IDX]) {\r\n      emacIntCbfArra[EMAC_INT_RX_ERROR_IDX]();\r\n    }\r\n  }\r\n\r\n  if (SET == EMAC_GetIntStatus(EMAC_INT_RX_BUSY) && !BL_IS_REG_BIT_SET(tmpVal, EMAC_BUSY_M)) {\r\n    EMAC_ClrIntStatus(EMAC_INT_RX_BUSY);\r\n\r\n    if (emacIntCbfArra[EMAC_INT_RX_BUSY_IDX]) {\r\n      emacIntCbfArra[EMAC_INT_RX_BUSY_IDX]();\r\n    }\r\n  }\r\n\r\n  if (SET == EMAC_GetIntStatus(EMAC_INT_TX_CTRL) && !BL_IS_REG_BIT_SET(tmpVal, EMAC_TXC_M)) {\r\n    EMAC_ClrIntStatus(EMAC_INT_TX_CTRL);\r\n\r\n    if (emacIntCbfArra[EMAC_INT_TX_CTRL_IDX]) {\r\n      emacIntCbfArra[EMAC_INT_TX_CTRL_IDX]();\r\n    }\r\n  }\r\n\r\n  if (SET == EMAC_GetIntStatus(EMAC_INT_RX_CTRL) && !BL_IS_REG_BIT_SET(tmpVal, EMAC_RXC_M)) {\r\n    EMAC_ClrIntStatus(EMAC_INT_RX_CTRL);\r\n\r\n    if (emacIntCbfArra[EMAC_INT_RX_CTRL_IDX]) {\r\n      emacIntCbfArra[EMAC_INT_RX_CTRL_IDX]();\r\n    }\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Request to pause TX\r\n                                                                                *\r\n                                                                                * @param  timeCount: Pause time count\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_TxPauseReq(uint16_t timeCount) {\r\n  BL_WR_REG(EMAC_BASE, EMAC_TXCTRL, (1 << 16) | timeCount);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set hash value\r\n                                                                                *\r\n                                                                                * @param  hash0: Hash value one\r\n                                                                                * @param  hash1: Hash value two\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type EMAC_SetHash(uint32_t hash0, uint32_t hash1) {\r\n  BL_WR_REG(EMAC_BASE, EMAC_HASH0_ADDR, hash0);\r\n\r\n  BL_WR_REG(EMAC_BASE, EMAC_HASH1_ADDR, hash1);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/*@} end of group EMAC_Public_Functions */\r\n\r\n/*@} end of group EMAC */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_glb.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_glb.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_glb.h\"\r\n#include \"bl702_hbn.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  GLB\r\n *  @{\r\n */\r\n\r\n/** @defgroup  GLB_Private_Macros\r\n *  @{\r\n */\r\n#define GLB_CLK_SET_DUMMY_WAIT                                                                                                                                                                         \\\r\n  {                                                                                                                                                                                                    \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n  }\r\n#define GLB_GPIO_Get_Reg(pin)       (glb_gpio_reg_t *)(GLB_BASE + GLB_GPIO_OFFSET + (pin / 2) * 4)\r\n#define GLB_GPIO_INT0_NUM           (32)\r\n#define GLB_REG_BCLK_DIS_TRUE       (*(volatile uint32_t *)(0x40000FFC) = (0x00000001))\r\n#define GLB_REG_BCLK_DIS_FALSE      (*(volatile uint32_t *)(0x40000FFC) = (0x00000000))\r\n#define GLB_GPIO_INT0_CLEAR_TIMEOUT (32)\r\n\r\n/*@} end of group GLB_Private_Macros */\r\n\r\n/** @defgroup  GLB_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group GLB_Private_Types */\r\n\r\n/** @defgroup  GLB_Private_Variables\r\n *  @{\r\n */\r\nstatic intCallback_Type *glbBmxErrIntCbfArra[BMX_ERR_INT_ALL]   = {NULL};\r\nstatic intCallback_Type *glbBmxToIntCbfArra[BMX_TO_INT_ALL]     = {NULL};\r\nstatic intCallback_Type *glbGpioInt0CbfArra[GLB_GPIO_INT0_NUM]  = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\r\n                                                                   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};\r\nstatic intCallback_Type *glbGpioInt0CbfArra2[GLB_GPIO_INT0_NUM] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\r\n                                                                   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};\r\n\r\n/*@} end of group GLB_Private_Variables */\r\n\r\n/** @defgroup  GLB_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group GLB_Global_Variables */\r\n\r\n/** @defgroup  GLB_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group GLB_Private_Fun_Declaration */\r\n\r\n/** @defgroup  GLB_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group GLB_Private_Functions */\r\n\r\n/** @defgroup  GLB_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get root clock selection\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return root clock selection\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nGLB_ROOT_CLK_Type ATTR_CLOCK_SECTION GLB_Get_Root_CLK_Sel(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG0);\r\n\r\n  switch (BL_GET_REG_BITS_VAL(tmpVal, GLB_HBN_ROOT_CLK_SEL)) {\r\n  case 0:\r\n    return GLB_ROOT_CLK_RC32M;\r\n  case 1:\r\n    return GLB_ROOT_CLK_XTAL;\r\n  case 2:\r\n  case 3:\r\n    return GLB_ROOT_CLK_DLL;\r\n  default:\r\n    return GLB_ROOT_CLK_RC32M;\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set System clock divider\r\n                                                                                *\r\n                                                                                * @param  hclkDiv: HCLK divider\r\n                                                                                * @param  bclkDiv: BCLK divider\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_CLOCK_SECTION GLB_Set_System_CLK_Div(uint8_t hclkDiv, uint8_t bclkDiv) {\r\n  /***********************************************************************************/\r\n  /*                                 NOTE                                            */\r\n  /* \"GLB_REG_BCLK_DIS_TRUE + GLB_REG_BCLK_DIS_FALSE\" will stop bclk a little while. */\r\n  /* OCRAM use bclk as source clock. Pay attention to risks when using this API.     */\r\n  /***********************************************************************************/\r\n  uint32_t tmpVal;\r\n\r\n  /* recommend: fclk<=160MHz, bclk<=80MHz */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_HCLK_DIV, hclkDiv);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_BCLK_DIV, bclkDiv);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG0, tmpVal);\r\n  GLB_REG_BCLK_DIS_TRUE;\r\n  GLB_REG_BCLK_DIS_FALSE;\r\n  // SystemCoreClockSet(SystemCoreClockGet() / ((uint16_t)hclkDiv + 1));\r\n  GLB_CLK_SET_DUMMY_WAIT;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_HCLK_EN);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_BCLK_EN);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG0, tmpVal);\r\n  GLB_CLK_SET_DUMMY_WAIT;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get Bus clock divider\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return Clock Divider\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nuint8_t ATTR_CLOCK_SECTION GLB_Get_BCLK_Div(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG0);\r\n\r\n  return BL_GET_REG_BITS_VAL(tmpVal, GLB_REG_BCLK_DIV);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get CPU clock divider\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return Clock Divider\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nuint8_t ATTR_CLOCK_SECTION GLB_Get_HCLK_Div(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG0);\r\n\r\n  return BL_GET_REG_BITS_VAL(tmpVal, GLB_REG_HCLK_DIV);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  update SystemCoreClock value\r\n                                                                                *\r\n                                                                                * @param  xtalType: XTAL frequency type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION Update_SystemCoreClockWith_XTAL(GLB_DLL_XTAL_Type xtalType) {\r\n  CHECK_PARAM(IS_GLB_DLL_XTAL_TYPE(xtalType));\r\n\r\n  switch (xtalType) {\r\n  case GLB_DLL_XTAL_NONE:\r\n    break;\r\n  case GLB_DLL_XTAL_32M:\r\n    SystemCoreClockSet(32000000);\r\n    break;\r\n  case GLB_DLL_XTAL_RC32M:\r\n    SystemCoreClockSet(32000000);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set System clock\r\n                                                                                *\r\n                                                                                * @param  xtalType: XTAL frequency type\r\n                                                                                * @param  clkFreq: clock frequency selection\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION GLB_Set_System_CLK(GLB_DLL_XTAL_Type xtalType, GLB_SYS_CLK_Type clkFreq) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_GLB_DLL_XTAL_TYPE(xtalType));\r\n  CHECK_PARAM(IS_GLB_SYS_CLK_TYPE(clkFreq));\r\n\r\n  /* reg_bclk_en = reg_hclk_en = reg_fclk_en = 1, cannot be zero */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_BCLK_EN);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_HCLK_EN);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_FCLK_EN);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG0, tmpVal);\r\n\r\n  /* Before config XTAL and DLL ,make sure root clk is from RC32M */\r\n  HBN_Set_ROOT_CLK_Sel(HBN_ROOT_CLK_RC32M);\r\n  GLB_Set_System_CLK_Div(0, 0);\r\n  SystemCoreClockSet(32 * 1000 * 1000);\r\n\r\n  if (xtalType == GLB_DLL_XTAL_NONE) {\r\n    if (clkFreq == GLB_SYS_CLK_RC32M) {\r\n      return SUCCESS;\r\n    } else {\r\n      return ERROR;\r\n    }\r\n  }\r\n\r\n  if (xtalType != GLB_DLL_XTAL_RC32M) {\r\n    /* power on xtal first */\r\n    AON_Power_On_XTAL();\r\n  }\r\n\r\n  /* Bl702 make PLL Setting out of RF, so following setting can be removed*/\r\n  // AON_Power_On_MBG();\r\n  // AON_Power_On_LDO15_RF();\r\n\r\n  /* always power up PLL and enable all PLL clock output */\r\n  // PDS_Power_On_PLL((PDS_PLL_XTAL_Type)xtalType);\r\n  // BL702_Delay_US(55);\r\n  // PDS_Enable_PLL_All_Clks();\r\n\r\n  /* always power up DLL and enable all DLL clock output */\r\n  GLB_Power_Off_DLL();\r\n  GLB_Power_On_DLL(xtalType);\r\n  GLB_Enable_DLL_All_Clks();\r\n\r\n  /* reg_pll_en = 1, cannot be zero */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_PLL_EN);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG0, tmpVal);\r\n\r\n  /* select pll output clock before select root clock */\r\n  if (clkFreq >= GLB_SYS_CLK_DLL57P6M) {\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_PLL_SEL, clkFreq - GLB_SYS_CLK_DLL57P6M);\r\n    BL_WR_REG(GLB_BASE, GLB_CLK_CFG0, tmpVal);\r\n  }\r\n  /* select root clock */\r\n  switch (clkFreq) {\r\n  case GLB_SYS_CLK_RC32M:\r\n    break;\r\n  case GLB_SYS_CLK_XTAL:\r\n    HBN_Set_ROOT_CLK_Sel(HBN_ROOT_CLK_XTAL);\r\n    Update_SystemCoreClockWith_XTAL(xtalType);\r\n    break;\r\n  case GLB_SYS_CLK_DLL57P6M:\r\n    HBN_Set_ROOT_CLK_Sel(HBN_ROOT_CLK_DLL);\r\n    SystemCoreClockSet(57 * 6000 * 1000);\r\n    break;\r\n  case GLB_SYS_CLK_DLL96M:\r\n    L1C_IROM_2T_Access_Set(ENABLE);\r\n    GLB_Set_System_CLK_Div(0, 1);\r\n    HBN_Set_ROOT_CLK_Sel(HBN_ROOT_CLK_DLL);\r\n    SystemCoreClockSet(96 * 1000 * 1000);\r\n    break;\r\n  case GLB_SYS_CLK_DLL144M:\r\n    L1C_IROM_2T_Access_Set(ENABLE);\r\n    GLB_Set_System_CLK_Div(0, 1);\r\n    HBN_Set_ROOT_CLK_Sel(HBN_ROOT_CLK_DLL);\r\n    SystemCoreClockSet(144 * 1000 * 1000);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n\r\n  GLB_CLK_SET_DUMMY_WAIT;\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  This is demo for user that use RC32M as default bootup clock instead of DLL,when APP is\r\n                                                                                *         started, this function can be called to set DLL to 160M\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION System_Core_Clock_Update_From_RC32M(void) {\r\n  SF_Ctrl_Cfg_Type sfCtrlCfg = {\r\n      .owner       = SF_CTRL_OWNER_IAHB,\r\n      .clkDelay    = 1,\r\n      .clkInvert   = 1,\r\n      .rxClkInvert = 1,\r\n      .doDelay     = 0,\r\n      .diDelay     = 0,\r\n      .oeDelay     = 0,\r\n  };\r\n  /* Use RC32M as DLL ref source to set up DLL to 144M */\r\n  GLB_Set_System_CLK(GLB_DLL_XTAL_RC32M, GLB_SYS_CLK_DLL144M);\r\n  /* Flash controller also need changes since system (bus) clock changed */\r\n  SF_Ctrl_Enable(&sfCtrlCfg);\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set CAM clock\r\n                                                                                *\r\n                                                                                * @param  enable: Enable or disable CAM clock\r\n                                                                                * @param  clkSel: CAM clock type\r\n                                                                                * @param  div: clock divider\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_CAM_CLK(uint8_t enable, GLB_CAM_CLK_Type clkSel, uint8_t div) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM(IS_GLB_CAM_CLK_TYPE(clkSel));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_CAM_REF_CLK_SRC_SEL, clkSel);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_CAM_REF_CLK_DIV, div);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG1, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG1);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_CAM_REF_CLK_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_CAM_REF_CLK_EN);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG1, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set mac154 and zigbee clock\r\n                                                                                *\r\n                                                                                * @param  enable: Enable or disable mac154 and zigbee clock\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_MAC154_ZIGBEE_CLK(uint8_t enable) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG1);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_M154_ZBEN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_M154_ZBEN);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG1, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set BLE clock\r\n                                                                                *\r\n                                                                                * @param  enable: Enable or disable BLE clock\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_BLE_CLK(uint8_t enable) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG1);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_BLE_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_BLE_EN);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG1, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set I2S clock\r\n                                                                                *\r\n                                                                                * @param  enable: Enable or disable I2S clock\r\n                                                                                * @param  outRef: I2S output ref clock type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_I2S_CLK(uint8_t enable, GLB_I2S_OUT_REF_CLK_Type outRef) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM(IS_GLB_I2S_OUT_REF_CLK_TYPE(outRef));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_I2S_0_REF_CLK_OE, outRef);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG1, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG1);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_I2S0_CLK_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_I2S0_CLK_EN);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG1, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set USB clock\r\n                                                                                *\r\n                                                                                * @param  enable: Enable or disable USB clock\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_USB_CLK(uint8_t enable) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_48M_DIV_EN, 1);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG1, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG1);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_USB_CLK_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_USB_CLK_EN);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG1, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set QDEC clock\r\n                                                                                *\r\n                                                                                * @param  clkSel: QDEC clock type\r\n                                                                                * @param  div: clock divider\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_QDEC_CLK(GLB_QDEC_CLK_Type clkSel, uint8_t div) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM(IS_GLB_QDEC_CLK_TYPE(clkSel));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_QDEC_CLK_SEL, clkSel);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_QDEC_CLK_DIV, div);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG1, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set DMA clock\r\n                                                                                *\r\n                                                                                * @param  enable: Enable or disable DMA clock\r\n                                                                                * @param  clk: DMA ID type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_DMA_CLK(uint8_t enable, GLB_DMA_CLK_ID_Type clk) {\r\n  uint32_t tmpVal;\r\n  uint32_t tmpVal2;\r\n\r\n  tmpVal  = BL_RD_REG(GLB_BASE, GLB_CLK_CFG2);\r\n  tmpVal2 = BL_GET_REG_BITS_VAL(tmpVal, GLB_DMA_CLK_EN);\r\n  if (enable) {\r\n    tmpVal2 |= (1 << clk);\r\n  } else {\r\n    tmpVal2 &= (~(1 << clk));\r\n  }\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DMA_CLK_EN, tmpVal2);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG2, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set IR clock divider\r\n                                                                                *\r\n                                                                                * @param  enable: enable or disable IR clock\r\n                                                                                * @param  clkSel: IR clock type\r\n                                                                                * @param  div: divider\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_IR_CLK(uint8_t enable, GLB_IR_CLK_SRC_Type clkSel, uint8_t div) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM(IS_GLB_IR_CLK_SRC_TYPE(clkSel));\r\n  CHECK_PARAM((div <= 0x3F));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG2);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_IR_CLK_DIV, div);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG2, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG2);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_IR_CLK_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_IR_CLK_EN);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG2, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set sflash clock\r\n                                                                                *\r\n                                                                                * @param  enable: Enable or disable sflash clock\r\n                                                                                * @param  clkSel: sflash clock type\r\n                                                                                * @param  div: clock divider\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION GLB_Set_SF_CLK(uint8_t enable, GLB_SFLASH_CLK_Type clkSel, uint8_t div) {\r\n  uint32_t         tmpVal = 0;\r\n  GLB_DLL_CLK_Type clk;\r\n\r\n  CHECK_PARAM(IS_GLB_SFLASH_CLK_TYPE(clkSel));\r\n  CHECK_PARAM((div <= 0x7));\r\n\r\n  /* disable SFLASH clock first */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG2);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_SF_CLK_EN);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG2, tmpVal);\r\n\r\n  /* Select flash clock, all Flash CLKs are divied by DLL_288M */\r\n  clk = GLB_DLL_CLK_288M;\r\n  GLB_Enable_DLL_Clk(clk);\r\n  /* clock divider */\r\n  /* Select flash clock, all Flash CLKs are divied by DLL_288M */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG2);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_SF_CLK_DIV, div);\r\n  switch (clkSel) {\r\n  case GLB_SFLASH_CLK_144M:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_SF_CLK_SEL, 0x0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_SF_CLK_SEL2, 0x0);\r\n    break;\r\n  case GLB_SFLASH_CLK_XCLK:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_SF_CLK_SEL, 0x0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_SF_CLK_SEL2, 0x1);\r\n    break;\r\n  case GLB_SFLASH_CLK_57P6M:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_SF_CLK_SEL, 0x0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_SF_CLK_SEL2, 0x3);\r\n    break;\r\n  case GLB_SFLASH_CLK_72M:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_SF_CLK_SEL, 0x1);\r\n    break;\r\n  case GLB_SFLASH_CLK_BCLK:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_SF_CLK_SEL, 0x2);\r\n    break;\r\n  case GLB_SFLASH_CLK_96M:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_SF_CLK_SEL, 0x3);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG2, tmpVal);\r\n\r\n  /* enable or disable flash clock */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG2);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_SF_CLK_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_SF_CLK_EN);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG2, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set UART clock\r\n                                                                                *\r\n                                                                                * @param  enable: Enable or disable UART clock\r\n                                                                                * @param  clkSel: UART clock type\r\n                                                                                * @param  div: clock divider\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_UART_CLK(uint8_t enable, HBN_UART_CLK_Type clkSel, uint8_t div) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM((div <= 0x7));\r\n  CHECK_PARAM(IS_HBN_UART_CLK_TYPE(clkSel));\r\n\r\n  /* disable UART clock first */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG2);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_UART_CLK_EN);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG2, tmpVal);\r\n\r\n  /* Set div */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG2);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_UART_CLK_DIV, div);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG2, tmpVal);\r\n\r\n  /* Select clock source for uart */\r\n  HBN_Set_UART_CLK_Sel(clkSel);\r\n\r\n  /* Set enable or disable */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG2);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_UART_CLK_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_UART_CLK_EN);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG2, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  select chip clock out 0 type\r\n                                                                                *\r\n                                                                                * @param  clkSel: chip clock out type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_Chip_Out_0_CLK_Sel(GLB_CHIP_CLK_OUT_Type clkSel) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM(IS_GLB_CHIP_CLK_OUT_TYPE(clkSel));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG3);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_CHIP_CLK_OUT_0_SEL, clkSel);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG3, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  select chip clock out 1 type\r\n                                                                                *\r\n                                                                                * @param  clkSel: chip clock out type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_Chip_Out_1_CLK_Sel(GLB_CHIP_CLK_OUT_Type clkSel) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM(IS_GLB_CHIP_CLK_OUT_TYPE(clkSel));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG3);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_CHIP_CLK_OUT_1_SEL, clkSel);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG3, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set I2C clock\r\n                                                                                *\r\n                                                                                * @param  enable: Enable or disable I2C clock\r\n                                                                                * @param  div: clock divider\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_I2C_CLK(uint8_t enable, uint8_t div) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG3);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_I2C_CLK_DIV, div);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG3, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG3);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_I2C_CLK_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_I2C_CLK_EN);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG3, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  invert eth rx clock\r\n                                                                                *\r\n                                                                                * @param  enable: invert or not invert\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Invert_ETH_RX_CLK(uint8_t enable) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG3);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_CFG_INV_ETH_RX_CLK);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_CFG_INV_ETH_RX_CLK);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG3, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  invert rf test clock out\r\n                                                                                *\r\n                                                                                * @param  enable: invert or not invert\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Invert_RF_TEST_O_CLK(uint8_t enable) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG3);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_CFG_INV_RF_TEST_CLK_O);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_CFG_INV_RF_TEST_CLK_O);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG3, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set SPI clock\r\n                                                                                *\r\n                                                                                * @param  enable: Enable or disable SPI clock\r\n                                                                                * @param  div: clock divider\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_SPI_CLK(uint8_t enable, uint8_t div) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM((div <= 0x1F));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG3);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_SPI_CLK_DIV, div);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG3, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG3);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_SPI_CLK_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_SPI_CLK_EN);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG3, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  invert eth tx clock\r\n                                                                                *\r\n                                                                                * @param  enable: invert or not invert\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Invert_ETH_TX_CLK(uint8_t enable) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG3);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_CFG_INV_ETH_TX_CLK);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_CFG_INV_ETH_TX_CLK);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG3, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  invert eth ref clock out\r\n                                                                                *\r\n                                                                                * @param  enable: invert or not invert\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Invert_ETH_REF_O_CLK(uint8_t enable) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG3);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_CFG_INV_ETH_REF_CLK_O);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_CFG_INV_ETH_REF_CLK_O);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG3, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  select eth ref clock out\r\n                                                                                *\r\n                                                                                * @param  clkSel: eth ref clock type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_ETH_REF_O_CLK_Sel(GLB_ETH_REF_CLK_OUT_Type clkSel) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG3);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_CFG_SEL_ETH_REF_CLK_O, clkSel);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG3, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  select PKA clock source\r\n                                                                                *\r\n                                                                                * @param  clkSel: PKA clock selection\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_CLOCK_SECTION GLB_Set_PKA_CLK_Sel(GLB_PKA_CLK_Type clkSel) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM(IS_GLB_PKA_CLK_TYPE(clkSel));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_SWRST_CFG2);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_PKA_CLK_SEL, clkSel);\r\n  BL_WR_REG(GLB_BASE, GLB_SWRST_CFG2, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Software system reset\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION GLB_SW_System_Reset(void) {\r\n  /***********************************************************************************/\r\n  /*                                 NOTE                                            */\r\n  /* \"GLB_REG_BCLK_DIS_TRUE + GLB_REG_BCLK_DIS_FALSE\" will stop bclk a little while. */\r\n  /* OCRAM use bclk as source clock. Pay attention to risks when using this API.     */\r\n  /***********************************************************************************/\r\n  uint32_t tmpVal;\r\n\r\n  /* Swicth clock to 32M as default */\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_ROOT_CLK_SEL, 0);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n  GLB_CLK_SET_DUMMY_WAIT;\r\n\r\n  /* HCLK is RC32M , so BCLK/HCLK no need divider */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_BCLK_DIV, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_HCLK_DIV, 0);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG0, tmpVal);\r\n  GLB_REG_BCLK_DIS_TRUE;\r\n  GLB_REG_BCLK_DIS_FALSE;\r\n  GLB_CLK_SET_DUMMY_WAIT;\r\n\r\n  /* Do reset */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_SWRST_CFG2);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_CTRL_SYS_RESET);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_CTRL_CPU_RESET);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_CTRL_PWRON_RST);\r\n  BL_WR_REG(GLB_BASE, GLB_SWRST_CFG2, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_SWRST_CFG2);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_CTRL_SYS_RESET);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_CTRL_CPU_RESET);\r\n  // tmpVal=BL_CLR_REG_BIT(tmpVal,GLB_REG_CTRL_PWRON_RST);\r\n  BL_WR_REG(GLB_BASE, GLB_SWRST_CFG2, tmpVal);\r\n\r\n  /* waiting for reset */\r\n  while (1) {\r\n    BL702_Delay_US(10);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Software CPU reset\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION GLB_SW_CPU_Reset(void) {\r\n  /***********************************************************************************/\r\n  /*                                 NOTE                                            */\r\n  /* \"GLB_REG_BCLK_DIS_TRUE + GLB_REG_BCLK_DIS_FALSE\" will stop bclk a little while. */\r\n  /* OCRAM use bclk as source clock. Pay attention to risks when using this API.     */\r\n  /***********************************************************************************/\r\n  uint32_t tmpVal;\r\n\r\n  /* Swicth clock to 32M as default */\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_ROOT_CLK_SEL, 0);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n  GLB_CLK_SET_DUMMY_WAIT;\r\n\r\n  /* HCLK is RC32M , so BCLK/HCLK no need divider */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_BCLK_DIV, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_HCLK_DIV, 0);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG0, tmpVal);\r\n  GLB_REG_BCLK_DIS_TRUE;\r\n  GLB_REG_BCLK_DIS_FALSE;\r\n  GLB_CLK_SET_DUMMY_WAIT;\r\n\r\n  /* Do reset */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_SWRST_CFG2);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_CTRL_SYS_RESET);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_CTRL_CPU_RESET);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_CTRL_PWRON_RST);\r\n  BL_WR_REG(GLB_BASE, GLB_SWRST_CFG2, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_SWRST_CFG2);\r\n  // tmpVal=BL_CLR_REG_BIT(tmpVal,GLB_REG_CTRL_SYS_RESET);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_CTRL_CPU_RESET);\r\n  // tmpVal=BL_CLR_REG_BIT(tmpVal,GLB_REG_CTRL_PWRON_RST);\r\n  BL_WR_REG(GLB_BASE, GLB_SWRST_CFG2, tmpVal);\r\n\r\n  /* waiting for reset */\r\n  while (1) {\r\n    BL702_Delay_US(10);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Software power on reset\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION GLB_SW_POR_Reset(void) {\r\n  /***********************************************************************************/\r\n  /*                                 NOTE                                            */\r\n  /* \"GLB_REG_BCLK_DIS_TRUE + GLB_REG_BCLK_DIS_FALSE\" will stop bclk a little while. */\r\n  /* OCRAM use bclk as source clock. Pay attention to risks when using this API.     */\r\n  /***********************************************************************************/\r\n  uint32_t tmpVal;\r\n\r\n  /* Swicth clock to 32M as default */\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_ROOT_CLK_SEL, 0);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n  GLB_CLK_SET_DUMMY_WAIT;\r\n\r\n  /* HCLK is RC32M , so BCLK/HCLK no need divider */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CLK_CFG0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_BCLK_DIV, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_HCLK_DIV, 0);\r\n  BL_WR_REG(GLB_BASE, GLB_CLK_CFG0, tmpVal);\r\n  GLB_REG_BCLK_DIS_TRUE;\r\n  GLB_REG_BCLK_DIS_FALSE;\r\n  GLB_CLK_SET_DUMMY_WAIT;\r\n\r\n  /* Do reset */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_SWRST_CFG2);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_CTRL_SYS_RESET);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_CTRL_CPU_RESET);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_CTRL_PWRON_RST);\r\n  BL_WR_REG(GLB_BASE, GLB_SWRST_CFG2, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_SWRST_CFG2);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_CTRL_SYS_RESET);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_CTRL_CPU_RESET);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_CTRL_PWRON_RST);\r\n  BL_WR_REG(GLB_BASE, GLB_SWRST_CFG2, tmpVal);\r\n\r\n  /* waiting for reset */\r\n  while (1) {\r\n    BL702_Delay_US(10);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Reset slave 1\r\n                                                                                *\r\n                                                                                * @param  slave1: slave num\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_AHB_Slave1_Reset(BL_AHB_Slave1_Type slave1) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_SWRST_CFG1);\r\n  tmpVal &= (~(1 << slave1));\r\n  BL_WR_REG(GLB_BASE, GLB_SWRST_CFG1, tmpVal);\r\n  BL_DRV_DUMMY;\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_SWRST_CFG1);\r\n  tmpVal |= (1 << slave1);\r\n  BL_WR_REG(GLB_BASE, GLB_SWRST_CFG1, tmpVal);\r\n  BL_DRV_DUMMY;\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_SWRST_CFG1);\r\n  tmpVal &= (~(1 << slave1));\r\n  BL_WR_REG(GLB_BASE, GLB_SWRST_CFG1, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  clock gate\r\n                                                                                *\r\n                                                                                * @param  enable: ENABLE or DISABLE\r\n                                                                                * @param  slave1: AHB slaveClk type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_AHB_Slave1_Clock_Gate(uint8_t enable, BL_AHB_Slave1_Type slave1) {\r\n  /* gate QDEC <=> gate QDEC0 + QDEC1 +QDEC2 + I2S */\r\n  /* gate I2S  <=> gate I2S + QDEC2                */\r\n\r\n  uint32_t tmpVal = 0;\r\n\r\n  if ((BL_AHB_SLAVE1_GLB == slave1) || (BL_AHB_SLAVE1_TZ2 == slave1) || (BL_AHB_SLAVE1_CCI == slave1) || (BL_AHB_SLAVE1_L1C == slave1) || (BL_AHB_SLAVE1_PDS_HBN_AON_HBNRAM == slave1)) {\r\n    /* not support */\r\n    return ERROR;\r\n  }\r\n\r\n  /* gate QDEC and I2S */\r\n  if (BL_AHB_SLAVE1_QDEC == slave1) {\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG1);\r\n    if (enable) {\r\n      /* clear bit means clock gate */\r\n      tmpVal &= (~(1 << 0x18));\r\n      tmpVal &= (~(1 << 0x19));\r\n      tmpVal &= (~(1 << 0x1A));\r\n    } else {\r\n      /* set bit means clock pass */\r\n      tmpVal |= (1 << 0x18);\r\n      tmpVal |= (1 << 0x19);\r\n      tmpVal |= (1 << 0x1A);\r\n    }\r\n    BL_WR_REG(GLB_BASE, GLB_CGEN_CFG1, tmpVal);\r\n    return SUCCESS;\r\n  }\r\n\r\n  /* gate KYS */\r\n  if (BL_AHB_SLAVE1_KYS == slave1) {\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG1);\r\n    if (enable) {\r\n      /* clear bit means clock gate */\r\n      tmpVal &= (~(1 << 0x1B));\r\n    } else {\r\n      /* set bit means clock pass */\r\n      tmpVal |= (1 << 0x1B);\r\n    }\r\n    BL_WR_REG(GLB_BASE, GLB_CGEN_CFG1, tmpVal);\r\n    return SUCCESS;\r\n  }\r\n\r\n  /* gate I2S and QDEC2 */\r\n  if (BL_AHB_SLAVE1_I2S == slave1) {\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG1);\r\n    if (enable) {\r\n      /* clear bit means clock gate */\r\n      tmpVal &= (~(1 << 0x1A));\r\n    } else {\r\n      /* set bit means clock pass */\r\n      tmpVal |= (1 << 0x1A);\r\n    }\r\n    BL_WR_REG(GLB_BASE, GLB_CGEN_CFG1, tmpVal);\r\n    return SUCCESS;\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG1);\r\n  if (enable) {\r\n    /* clear bit means clock gate */\r\n    tmpVal &= (~(1 << slave1));\r\n  } else {\r\n    /* set bit means clock pass */\r\n    tmpVal |= (1 << slave1);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CGEN_CFG1, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get IPs clock gate value\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return clock gate value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint64_t GLB_PER_Clock_Gate_Status_Get(void) {\r\n  /* api request from cjy */\r\n\r\n  uint32_t tmpValCfg0 = 0;\r\n  uint32_t tmpValCfg1 = 0;\r\n  uint32_t tmpValCfg2 = 0;\r\n  uint32_t targetBit  = 0;\r\n  uint64_t targetVal  = 0;\r\n\r\n  tmpValCfg0 = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG0);\r\n  tmpValCfg1 = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG1);\r\n  tmpValCfg2 = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG2);\r\n  for (uint8_t i = 0; i < 64; i++) {\r\n    targetBit = 0;\r\n    switch (i) {\r\n    case GLB_AHB_CLOCK_IP_CPU:\r\n      targetBit = tmpValCfg0 & (1 << 0);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_SDU:\r\n      targetBit = tmpValCfg0 & (1 << 1);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_SEC:\r\n      targetBit = (tmpValCfg0 & (1 << 2)) && (tmpValCfg1 & (1 << 3)) && (tmpValCfg1 & (1 << 4));\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_DMA_0:\r\n      targetBit = (tmpValCfg0 & (1 << 3)) && (tmpValCfg1 & (1 << 12));\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_DMA_1:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_DMA_2:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_CCI:\r\n      targetBit = tmpValCfg0 & (1 << 4);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_RF_TOP:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_GPIP:\r\n      targetBit = tmpValCfg1 & (1 << 2);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_TZC:\r\n      targetBit = tmpValCfg1 & (1 << 5);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_EF_CTRL:\r\n      targetBit = tmpValCfg1 & (1 << 7);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_SF_CTRL:\r\n      targetBit = tmpValCfg1 & (1 << 11);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_EMAC:\r\n      targetBit = tmpValCfg1 & (1 << 13);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_UART0:\r\n      targetBit = tmpValCfg1 & (1 << 16);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_UART1:\r\n      targetBit = tmpValCfg1 & (1 << 17);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_UART2:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_UART3:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_UART4:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_SPI:\r\n      targetBit = tmpValCfg1 & (1 << 18);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_I2C:\r\n      targetBit = tmpValCfg1 & (1 << 19);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_PWM:\r\n      targetBit = tmpValCfg1 & (1 << 20);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_TIMER:\r\n      targetBit = tmpValCfg1 & (1 << 21);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_IR:\r\n      targetBit = tmpValCfg1 & (1 << 22);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_CHECKSUM:\r\n      targetBit = tmpValCfg1 & (1 << 23);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_QDEC:\r\n      targetBit = (tmpValCfg1 & (1 << 24)) && (tmpValCfg1 & (1 << 25)) && (tmpValCfg1 & (1 << 26));\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_KYS:\r\n      targetBit = tmpValCfg1 & (1 << 27);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_I2S:\r\n      targetBit = tmpValCfg1 & (1 << 26);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_USB11:\r\n      targetBit = tmpValCfg1 & (1 << 28);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_CAM:\r\n      targetBit = tmpValCfg1 & (1 << 29);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_MJPEG:\r\n      targetBit = tmpValCfg1 & (1 << 30);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_BT_BLE_NORMAL:\r\n      targetBit = (tmpValCfg2 & (1 << 0)) && (tmpValCfg2 & (1 << 4));\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_BT_BLE_LP:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_ZB_NORMAL:\r\n      targetBit = tmpValCfg2 & (1 << 0);\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_ZB_LP:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_WIFI_NORMAL:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_WIFI_LP:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_BT_BLE_2_NORMAL:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_BT_BLE_2_LP:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_EMI_MISC:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_PSRAM0_CTRL:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_PSRAM1_CTRL:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_USB20:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_MIX2:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_AUDIO:\r\n      break;\r\n    case GLB_AHB_CLOCK_IP_SDH:\r\n      break;\r\n    default:\r\n      break;\r\n    }\r\n    if (!targetBit) {\r\n      targetVal |= ((uint64_t)1 << i);\r\n    }\r\n  }\r\n\r\n  return targetVal;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get first 1 from u64, then clear it\r\n                                                                                *\r\n                                                                                * @param  val: target value\r\n                                                                                * @param  bit: first 1 in bit\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic BL_Err_Type GLB_Get_And_Clr_First_Set_From_U64(uint64_t *val, uint32_t *bit) {\r\n  if (!*val) {\r\n    return ERROR;\r\n  }\r\n\r\n  for (uint8_t i = 0; i < 64; i++) {\r\n    if ((*val) & ((uint64_t)1 << i)) {\r\n      *bit = i;\r\n      (*val) &= ~((uint64_t)1 << i);\r\n      break;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  hold IPs clock\r\n                                                                                *\r\n                                                                                * @param  ips: GLB_AHB_CLOCK_IP_xxx | GLB_AHB_CLOCK_IP_xxx | ......\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_PER_Clock_Gate(uint64_t ips) {\r\n  /* api request from cjy */\r\n\r\n  uint32_t tmpValCfg0 = 0;\r\n  uint32_t tmpValCfg1 = 0;\r\n  uint32_t tmpValCfg2 = 0;\r\n  uint32_t bitfield   = 0;\r\n\r\n  tmpValCfg0 = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG0);\r\n  tmpValCfg1 = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG1);\r\n  tmpValCfg2 = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG2);\r\n  while (ips) {\r\n    if (SUCCESS == GLB_Get_And_Clr_First_Set_From_U64(&ips, &bitfield)) {\r\n      switch (bitfield) {\r\n      case GLB_AHB_CLOCK_IP_CPU:\r\n        tmpValCfg0 &= ~(1 << 0);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_SDU:\r\n        tmpValCfg0 &= ~(1 << 1);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_SEC:\r\n        tmpValCfg0 &= ~(1 << 2);\r\n        tmpValCfg1 &= ~(1 << 3);\r\n        tmpValCfg1 &= ~(1 << 4);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_DMA_0:\r\n        tmpValCfg0 &= ~(1 << 3);\r\n        tmpValCfg1 &= ~(1 << 12);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_DMA_1:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_DMA_2:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_CCI:\r\n        tmpValCfg0 &= ~(1 << 4);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_RF_TOP:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_GPIP:\r\n        tmpValCfg1 &= ~(1 << 2);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_TZC:\r\n        tmpValCfg1 &= ~(1 << 5);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_EF_CTRL:\r\n        tmpValCfg1 &= ~(1 << 7);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_SF_CTRL:\r\n        tmpValCfg1 &= ~(1 << 11);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_EMAC:\r\n        tmpValCfg1 &= ~(1 << 13);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_UART0:\r\n        tmpValCfg1 &= ~(1 << 16);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_UART1:\r\n        tmpValCfg1 &= ~(1 << 17);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_UART2:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_UART3:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_UART4:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_SPI:\r\n        tmpValCfg1 &= ~(1 << 18);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_I2C:\r\n        tmpValCfg1 &= ~(1 << 19);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_PWM:\r\n        tmpValCfg1 &= ~(1 << 20);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_TIMER:\r\n        tmpValCfg1 &= ~(1 << 21);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_IR:\r\n        tmpValCfg1 &= ~(1 << 22);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_CHECKSUM:\r\n        tmpValCfg1 &= ~(1 << 23);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_QDEC:\r\n        tmpValCfg1 &= ~(1 << 24);\r\n        tmpValCfg1 &= ~(1 << 25);\r\n        tmpValCfg1 &= ~(1 << 26);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_KYS:\r\n        tmpValCfg1 &= ~(1 << 27);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_I2S:\r\n        tmpValCfg1 &= ~(1 << 26);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_USB11:\r\n        tmpValCfg1 &= ~(1 << 28);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_CAM:\r\n        tmpValCfg1 &= ~(1 << 29);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_MJPEG:\r\n        tmpValCfg1 &= ~(1 << 30);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_BT_BLE_NORMAL:\r\n        tmpValCfg2 &= ~(1 << 0);\r\n        tmpValCfg2 &= ~(1 << 4);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_BT_BLE_LP:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_ZB_NORMAL:\r\n        tmpValCfg2 &= ~(1 << 0);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_ZB_LP:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_WIFI_NORMAL:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_WIFI_LP:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_BT_BLE_2_NORMAL:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_BT_BLE_2_LP:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_EMI_MISC:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_PSRAM0_CTRL:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_PSRAM1_CTRL:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_USB20:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_MIX2:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_AUDIO:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_SDH:\r\n        break;\r\n      default:\r\n        break;\r\n      }\r\n    }\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CGEN_CFG0, tmpValCfg0);\r\n  BL_WR_REG(GLB_BASE, GLB_CGEN_CFG1, tmpValCfg1);\r\n  BL_WR_REG(GLB_BASE, GLB_CGEN_CFG2, tmpValCfg2);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  release IPs clock\r\n                                                                                *\r\n                                                                                * @param  ips: GLB_AHB_CLOCK_IP_xxx | GLB_AHB_CLOCK_IP_xxx | ......\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_PER_Clock_UnGate(uint64_t ips) {\r\n  /* api request from cjy */\r\n\r\n  uint32_t tmpValCfg0 = 0;\r\n  uint32_t tmpValCfg1 = 0;\r\n  uint32_t tmpValCfg2 = 0;\r\n  uint32_t bitfield   = 0;\r\n\r\n  tmpValCfg0 = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG0);\r\n  tmpValCfg1 = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG1);\r\n  tmpValCfg2 = BL_RD_REG(GLB_BASE, GLB_CGEN_CFG2);\r\n  while (ips) {\r\n    if (SUCCESS == GLB_Get_And_Clr_First_Set_From_U64(&ips, &bitfield)) {\r\n      switch (bitfield) {\r\n      case GLB_AHB_CLOCK_IP_CPU:\r\n        tmpValCfg0 |= (1 << 0);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_SDU:\r\n        tmpValCfg0 |= (1 << 1);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_SEC:\r\n        tmpValCfg0 |= (1 << 2);\r\n        tmpValCfg1 |= (1 << 3);\r\n        tmpValCfg1 |= (1 << 4);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_DMA_0:\r\n        tmpValCfg0 |= (1 << 3);\r\n        tmpValCfg1 |= (1 << 12);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_DMA_1:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_DMA_2:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_CCI:\r\n        tmpValCfg0 |= (1 << 4);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_RF_TOP:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_GPIP:\r\n        tmpValCfg1 |= (1 << 2);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_TZC:\r\n        tmpValCfg1 |= (1 << 5);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_EF_CTRL:\r\n        tmpValCfg1 |= (1 << 7);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_SF_CTRL:\r\n        tmpValCfg1 |= (1 << 11);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_EMAC:\r\n        tmpValCfg1 |= (1 << 13);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_UART0:\r\n        tmpValCfg1 |= (1 << 16);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_UART1:\r\n        tmpValCfg1 |= (1 << 17);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_UART2:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_UART3:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_UART4:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_SPI:\r\n        tmpValCfg1 |= (1 << 18);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_I2C:\r\n        tmpValCfg1 |= (1 << 19);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_PWM:\r\n        tmpValCfg1 |= (1 << 20);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_TIMER:\r\n        tmpValCfg1 |= (1 << 21);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_IR:\r\n        tmpValCfg1 |= (1 << 22);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_CHECKSUM:\r\n        tmpValCfg1 |= (1 << 23);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_QDEC:\r\n        tmpValCfg1 |= (1 << 24);\r\n        tmpValCfg1 |= (1 << 25);\r\n        tmpValCfg1 |= (1 << 26);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_KYS:\r\n        tmpValCfg1 |= (1 << 27);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_I2S:\r\n        tmpValCfg1 |= (1 << 26);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_USB11:\r\n        tmpValCfg1 |= (1 << 28);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_CAM:\r\n        tmpValCfg1 |= (1 << 29);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_MJPEG:\r\n        tmpValCfg1 |= (1 << 30);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_BT_BLE_NORMAL:\r\n        tmpValCfg2 |= (1 << 0);\r\n        tmpValCfg2 |= (1 << 4);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_BT_BLE_LP:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_ZB_NORMAL:\r\n        tmpValCfg2 |= (1 << 0);\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_ZB_LP:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_WIFI_NORMAL:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_WIFI_LP:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_BT_BLE_2_NORMAL:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_BT_BLE_2_LP:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_EMI_MISC:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_PSRAM0_CTRL:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_PSRAM1_CTRL:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_USB20:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_MIX2:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_AUDIO:\r\n        break;\r\n      case GLB_AHB_CLOCK_IP_SDH:\r\n        break;\r\n      default:\r\n        break;\r\n      }\r\n    }\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CGEN_CFG0, tmpValCfg0);\r\n  BL_WR_REG(GLB_BASE, GLB_CGEN_CFG1, tmpValCfg1);\r\n  BL_WR_REG(GLB_BASE, GLB_CGEN_CFG2, tmpValCfg2);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  BMX init\r\n                                                                                *\r\n                                                                                * @param  BmxCfg: BMX config\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_BMX_Init(BMX_Cfg_Type *BmxCfg) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM((BmxCfg->timeoutEn) <= 0xF);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_BMX_CFG1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_BMX_TIMEOUT_EN, BmxCfg->timeoutEn);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_BMX_ERR_EN, BmxCfg->errEn);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_BMX_ARB_MODE, BmxCfg->arbMod);\r\n  BL_WR_REG(GLB_BASE, GLB_BMX_CFG1, tmpVal);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(BMX_ERR_IRQn, BMX_ERR_IRQHandler);\r\n  Interrupt_Handler_Register(BMX_TO_IRQn, BMX_TO_IRQHandler);\r\n#endif\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  BMX address monitor enable\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_BMX_Addr_Monitor_Enable(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_BMX_CFG2);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_BMX_ERR_ADDR_DIS);\r\n  BL_WR_REG(GLB_BASE, GLB_BMX_CFG2, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  BMX address monitor disable\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_BMX_Addr_Monitor_Disable(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_BMX_CFG2);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_BMX_ERR_ADDR_DIS);\r\n  BL_WR_REG(GLB_BASE, GLB_BMX_CFG2, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  BMX bus error response enable\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_BMX_BusErrResponse_Enable(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_BMX_CFG1);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_BMX_ERR_EN);\r\n  BL_WR_REG(GLB_BASE, GLB_BMX_CFG1, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  BMX bus error response disable\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_BMX_BusErrResponse_Disable(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_BMX_CFG1);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_BMX_ERR_EN);\r\n  BL_WR_REG(GLB_BASE, GLB_BMX_CFG1, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get BMX error status\r\n                                                                                *\r\n                                                                                * @param  errType: BMX error status type\r\n                                                                                *\r\n                                                                                * @return SET or RESET\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type GLB_BMX_Get_Status(BMX_BUS_ERR_Type errType) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM(IS_BMX_BUS_ERR_TYPE(errType));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_BMX_CFG2);\r\n  if (errType == BMX_BUS_ERR_TRUSTZONE_DECODE) {\r\n    return BL_GET_REG_BITS_VAL(tmpVal, GLB_BMX_ERR_TZ) ? SET : RESET;\r\n  } else {\r\n    return BL_GET_REG_BITS_VAL(tmpVal, GLB_BMX_ERR_DEC) ? SET : RESET;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get BMX error address\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return NP BMX error address\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t GLB_BMX_Get_Err_Addr(void) { return BL_RD_REG(GLB_BASE, GLB_BMX_ERR_ADDR); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  BMX error interrupt callback install\r\n                                                                                *\r\n                                                                                * @param  intType: BMX error interrupt type\r\n                                                                                * @param  cbFun: callback\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type BMX_ERR_INT_Callback_Install(BMX_ERR_INT_Type intType, intCallback_Type *cbFun) {\r\n  CHECK_PARAM(IS_BMX_ERR_INT_TYPE(intType));\r\n\r\n  glbBmxErrIntCbfArra[intType] = cbFun;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  BMX ERR interrupt IRQ handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid BMX_ERR_IRQHandler(void) {\r\n  BMX_ERR_INT_Type intType;\r\n\r\n  for (intType = BMX_ERR_INT_ERR; intType < BMX_ERR_INT_ALL; intType++) {\r\n    if (glbBmxErrIntCbfArra[intType] != NULL) {\r\n      glbBmxErrIntCbfArra[intType]();\r\n    }\r\n  }\r\n\r\n  while (1) {\r\n    // MSG(\"BMX_ERR_IRQHandler\\r\\n\");\r\n    BL702_Delay_MS(1000);\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  BMX timeout interrupt callback install\r\n                                                                                *\r\n                                                                                * @param  intType: BMX timeout interrupt type\r\n                                                                                * @param  cbFun: callback\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type BMX_TIMEOUT_INT_Callback_Install(BMX_TO_INT_Type intType, intCallback_Type *cbFun) {\r\n  CHECK_PARAM(IS_BMX_TO_INT_TYPE(intType));\r\n\r\n  glbBmxToIntCbfArra[intType] = cbFun;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  BMX Time Out interrupt IRQ handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid BMX_TO_IRQHandler(void) {\r\n  BMX_TO_INT_Type intType;\r\n\r\n  for (intType = BMX_TO_INT_TIMEOUT; intType < BMX_TO_INT_ALL; intType++) {\r\n    if (glbBmxToIntCbfArra[intType] != NULL) {\r\n      glbBmxToIntCbfArra[intType]();\r\n    }\r\n  }\r\n\r\n  while (1) {\r\n    // MSG(\"BMX_TO_IRQHandler\\r\\n\");\r\n    BL702_Delay_MS(1000);\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set sram_ret value\r\n                                                                                *\r\n                                                                                * @param  value: value\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_SRAM_RET(uint32_t value) {\r\n  BL_WR_REG(GLB_BASE, GLB_SRAM_RET, value);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get sram_ret value\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t GLB_Get_SRAM_RET(void) { return BL_RD_REG(GLB_BASE, GLB_SRAM_RET); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set sram_slp value\r\n                                                                                *\r\n                                                                                * @param  value: value\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_SRAM_SLP(uint32_t value) {\r\n  BL_WR_REG(GLB_BASE, GLB_SRAM_SLP, value);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get sram_slp value\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t GLB_Get_SRAM_SLP(void) { return BL_RD_REG(GLB_BASE, GLB_SRAM_SLP); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set sram_param value\r\n                                                                                *\r\n                                                                                * @param  value: value\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_SRAM_PARM(uint32_t value) {\r\n  BL_WR_REG(GLB_BASE, GLB_SRAM_PARM, value);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get sram_parm value\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t GLB_Get_SRAM_PARM(void) { return BL_RD_REG(GLB_BASE, GLB_SRAM_PARM); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  select EM type\r\n                                                                                *\r\n                                                                                * @param  emType: EM type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_EM_Sel(GLB_EM_Type emType) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM(IS_GLB_EM_TYPE(emType));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_SEAM_MISC);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_EM_SEL, emType);\r\n  BL_WR_REG(GLB_BASE, GLB_SEAM_MISC, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  select pin as EMAC or CAM\r\n                                                                                *\r\n                                                                                * @param  pinType: pin type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_SWAP_EMAC_CAM_Pin(GLB_EMAC_CAM_PIN_Type pinType) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM(IS_GLB_EMAC_CAM_PIN_TYPE(pinType));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_PARM);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_PIN_SEL_EMAC_CAM, pinType);\r\n  BL_WR_REG(GLB_BASE, GLB_PARM, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  EXT_RST PAD SMT\r\n                                                                                *\r\n                                                                                * @param  enable: ENABLE or DISABLE\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_Ext_Rst_Smt(uint8_t enable) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_PARM);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_EXT_RST_SMT);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_EXT_RST_SMT);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_PARM, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Key Scan Column Drive\r\n                                                                                *\r\n                                                                                * @param  enable: ENABLE or DISABLE\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_Kys_Drv_Col(uint8_t enable) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_PARM);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_KYS_DRV_VAL);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_KYS_DRV_VAL);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_PARM, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  swap UART gpio pins sig function\r\n                                                                                *\r\n                                                                                * @param  swapSel: UART swap set gpio pins selection\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_UART_Sig_Swap_Set(uint8_t swapSel) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM((swapSel <= 0xF));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_PARM);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_UART_SWAP_SET, swapSel);\r\n  BL_WR_REG(GLB_BASE, GLB_PARM, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  swap JTAG gpio pins function\r\n                                                                                *\r\n                                                                                * @param  swapSel: ENABLE or DISABLE\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_JTAG_Sig_Swap_Set(uint8_t swapSel) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM((swapSel <= 0xFF));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_PARM);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_JTAG_SWAP_SET, swapSel);\r\n  BL_WR_REG(GLB_BASE, GLB_PARM, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  CCI use GPIO 0 1 2 7\r\n                                                                                *\r\n                                                                                * @param  enable: ENABLE or DISABLE\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_CCI_Use_IO_0_1_2_7(uint8_t enable) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_PARM);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_P3_CCI_USE_IO_0_2_7);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_P3_CCI_USE_IO_0_2_7);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_PARM, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  CCI use JTAG pin\r\n                                                                                *\r\n                                                                                * @param  enable: ENABLE or DISABLE\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_CCI_Use_Jtag_Pin(uint8_t enable) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_PARM);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_CCI_USE_JTAG_PIN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_CCI_USE_JTAG_PIN);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_PARM, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  swap SPI0 MOSI with MISO\r\n                                                                                *\r\n                                                                                * @param  newState: ENABLE or DISABLE\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Swap_SPI_0_MOSI_With_MISO(BL_Fun_Type newState) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_PARM);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_SPI_0_SWAP, newState);\r\n  BL_WR_REG(GLB_BASE, GLB_PARM, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Select SPI_0 act mode\r\n                                                                                *\r\n                                                                                * @param  mod: SPI work mode\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_SPI_0_ACT_MOD_Sel(GLB_SPI_PAD_ACT_AS_Type mod) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_GLB_SPI_PAD_ACT_AS_TYPE(mod));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_PARM);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_SPI_0_MASTER_MODE, mod);\r\n  BL_WR_REG(GLB_BASE, GLB_PARM, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  use internal flash\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION GLB_Select_Internal_Flash(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_CFG_GPIO_USE_PSRAM_IO, 0x3f);\r\n  BL_WR_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  use external flash\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION GLB_Select_External_Flash(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_CFG_GPIO_USE_PSRAM_IO, 0x00);\r\n  BL_WR_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Deswap internal flash pin\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION GLB_Deswap_Flash_Pin(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_PARM);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_CFG_SFLASH2_SWAP_CS_IO2);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_CFG_SFLASH2_SWAP_IO0_IO3);\r\n  BL_WR_REG(GLB_BASE, GLB_PARM, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Swap internal flash CS and IO2 pin\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION GLB_Swap_Flash_CS_IO2_Pin(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_PARM);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_CFG_SFLASH2_SWAP_CS_IO2);\r\n  BL_WR_REG(GLB_BASE, GLB_PARM, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Swap internal flash IO3 and IO0 pin\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION GLB_Swap_Flash_IO0_IO3_Pin(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_PARM);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_CFG_SFLASH2_SWAP_IO0_IO3);\r\n  BL_WR_REG(GLB_BASE, GLB_PARM, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Swap internal flash IO3 and IO0 pin\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION GLB_Swap_Flash_Pin(void) {\r\n  /*To be removed*/\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Select internal psram\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION GLB_Select_Internal_PSram(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_CFG_GPIO_USE_PSRAM_IO, 0x00);\r\n  BL_WR_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set PDM clock\r\n                                                                                *\r\n                                                                                * @param  enable: Enable or disable PDM clock\r\n                                                                                * @param  div: clock divider\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_PDM_CLK(uint8_t enable, uint8_t div) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_PDM_CLK_CTRL);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_PDM0_CLK_EN);\r\n  BL_WR_REG(GLB_BASE, GLB_PDM_CLK_CTRL, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_PDM_CLK_CTRL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_PDM0_CLK_DIV, div);\r\n  BL_WR_REG(GLB_BASE, GLB_PDM_CLK_CTRL, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_PDM_CLK_CTRL);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_PDM0_CLK_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_PDM0_CLK_EN);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_PDM_CLK_CTRL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set MTimer clock\r\n                                                                                *\r\n                                                                                * @param  enable: enable or disable MTimer clock\r\n                                                                                * @param  clkSel: clock selection\r\n                                                                                * @param  div: divider\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_MTimer_CLK(uint8_t enable, GLB_MTIMER_CLK_Type clkSel, uint32_t div) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_GLB_MTIMER_CLK_TYPE(clkSel));\r\n  CHECK_PARAM((div <= 0x1FFFF));\r\n\r\n  /* disable MTimer clock first */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CPU_CLK_CFG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_CPU_RTC_EN);\r\n  BL_WR_REG(GLB_BASE, GLB_CPU_CLK_CFG, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CPU_CLK_CFG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_CPU_RTC_SEL, clkSel);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_CPU_RTC_DIV, div);\r\n  BL_WR_REG(GLB_BASE, GLB_CPU_CLK_CFG, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_CPU_CLK_CFG);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_CPU_RTC_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_CPU_RTC_EN);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_CPU_CLK_CFG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set ADC clock\r\n                                                                                *\r\n                                                                                * @param  enable: enable or disable ADC clock\r\n                                                                                * @param  clkSel: ADC clock selection\r\n                                                                                * @param  div: divider\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_ADC_CLK(uint8_t enable, GLB_ADC_CLK_Type clkSel, uint8_t div) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_GLB_ADC_CLK_TYPE(clkSel));\r\n\r\n  /* disable ADC clock first */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPADC_32M_SRC_CTRL);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_GPADC_32M_DIV_EN);\r\n  BL_WR_REG(GLB_BASE, GLB_GPADC_32M_SRC_CTRL, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPADC_32M_SRC_CTRL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_GPADC_32M_CLK_DIV, div);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_GPADC_32M_CLK_SEL, clkSel);\r\n  BL_WR_REG(GLB_BASE, GLB_GPADC_32M_SRC_CTRL, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPADC_32M_SRC_CTRL);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_GPADC_32M_DIV_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_GPADC_32M_DIV_EN);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_GPADC_32M_SRC_CTRL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set DAC clock\r\n                                                                                *\r\n                                                                                * @param  enable: enable frequency divider or not\r\n                                                                                * @param  clkSel: ADC clock selection\r\n                                                                                * @param  div: src divider\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_DAC_CLK(uint8_t enable, GLB_DAC_CLK_Type clkSel, uint8_t div) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_GLB_DAC_CLK_TYPE(clkSel));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_DIG_512K_EN);\r\n  BL_WR_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL, tmpVal);\r\n\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_DIG_512K_COMP);\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DIG_CLK_SRC_SEL, clkSel);\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DIG_512K_DIV, div);\r\n\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_DIG_512K_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_DIG_512K_EN);\r\n  }\r\n\r\n  BL_WR_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  select DIG clock source\r\n                                                                                *\r\n                                                                                * @param  clkSel: DIG clock selection\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_DIG_CLK_Sel(GLB_DIG_CLK_Type clkSel) {\r\n  uint32_t tmpVal;\r\n  uint32_t dig512kEn;\r\n  uint32_t dig32kEn;\r\n\r\n  /* disable DIG512K and DIG32K clock first */\r\n  tmpVal    = BL_RD_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL);\r\n  dig512kEn = BL_GET_REG_BITS_VAL(tmpVal, GLB_DIG_512K_EN);\r\n  dig32kEn  = BL_GET_REG_BITS_VAL(tmpVal, GLB_DIG_32K_EN);\r\n  tmpVal    = BL_CLR_REG_BIT(tmpVal, GLB_DIG_512K_EN);\r\n  tmpVal    = BL_CLR_REG_BIT(tmpVal, GLB_DIG_32K_EN);\r\n  BL_WR_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DIG_CLK_SRC_SEL, clkSel);\r\n  BL_WR_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL, tmpVal);\r\n\r\n  /* repristinate DIG512K and DIG32K clock */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DIG_512K_EN, dig512kEn);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DIG_32K_EN, dig32kEn);\r\n  BL_WR_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set DIG 512K clock\r\n                                                                                *\r\n                                                                                * @param  enable: enable or disable DIG 512K clock\r\n                                                                                * @param  compensation: enable or disable DIG 512K clock compensation\r\n                                                                                * @param  div: divider\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_DIG_512K_CLK(uint8_t enable, uint8_t compensation, uint8_t div) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL);\r\n  if (compensation) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_DIG_512K_COMP);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_DIG_512K_COMP);\r\n  }\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DIG_512K_DIV, div);\r\n  BL_WR_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_DIG_512K_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_DIG_512K_EN);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set DIG 32K clock\r\n                                                                                *\r\n                                                                                * @param  enable: enable or disable DIG 32K clock\r\n                                                                                * @param  compensation: enable or disable DIG 32K clock compensation\r\n                                                                                * @param  div: divider\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_DIG_32K_CLK(uint8_t enable, uint8_t compensation, uint8_t div) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL);\r\n  if (compensation) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_DIG_32K_COMP);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_DIG_32K_COMP);\r\n  }\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DIG_32K_DIV, div);\r\n  BL_WR_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_DIG_32K_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_DIG_32K_EN);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_DIG32K_WAKEUP_CTRL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set BT coex signal\r\n                                                                                *\r\n                                                                                * @param  enable: ENABLE or DISABLE, if enable, the AP JTAG will be replaced by BT Coex Signal\r\n                                                                                * @param  bandWidth: BT Bandwidth\r\n                                                                                * @param  pti: BT Packet Traffic Information\r\n                                                                                * @param  channel: BT Channel\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_BT_Coex_Signal(uint8_t enable, GLB_BT_BANDWIDTH_Type bandWidth, uint8_t pti, uint8_t channel) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM(IS_GLB_BT_BANDWIDTH_TYPE(bandWidth));\r\n  CHECK_PARAM((pti <= 0xF));\r\n  CHECK_PARAM((channel <= 78));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_WIFI_BT_COEX_CTRL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_COEX_BT_BW, bandWidth);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_COEX_BT_PTI, pti);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_COEX_BT_CHANNEL, channel);\r\n  BL_WR_REG(GLB_BASE, GLB_WIFI_BT_COEX_CTRL, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_WIFI_BT_COEX_CTRL);\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_EN_GPIO_BT_COEX, 1);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_EN_GPIO_BT_COEX, 0);\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_WIFI_BT_COEX_CTRL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Select UART signal function\r\n                                                                                *\r\n                                                                                * @param  sig: UART signal\r\n                                                                                * @param  fun: UART function\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_UART_Fun_Sel(GLB_UART_SIG_Type sig, GLB_UART_SIG_FUN_Type fun) {\r\n  uint32_t sig_pos = 0;\r\n  uint32_t tmpVal  = 0;\r\n\r\n  CHECK_PARAM(IS_GLB_UART_SIG_TYPE(sig));\r\n  CHECK_PARAM(IS_GLB_UART_SIG_FUN_TYPE(fun));\r\n\r\n  tmpVal  = BL_RD_REG(GLB_BASE, GLB_UART_SIG_SEL_0);\r\n  sig_pos = (sig * 4);\r\n  /* Clear original val */\r\n  tmpVal &= (~(0xf << sig_pos));\r\n  /* Set new value */\r\n  tmpVal |= (fun << sig_pos);\r\n  BL_WR_REG(GLB_BASE, GLB_UART_SIG_SEL_0, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  power off DLL\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION GLB_Power_Off_DLL(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* GLB->dll.BF.ppu_dll = 0;   */\r\n  /* GLB->dll.BF.pu_dll = 0;    */\r\n  /* GLB->dll.BF.dll_reset = 1; */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DLL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_PPU_DLL, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_PU_DLL, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_RESET, 1);\r\n  BL_WR_REG(GLB_BASE, GLB_DLL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  power on DLL\r\n                                                                                *\r\n                                                                                * @param  xtalType: DLL xtal type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION GLB_Power_On_DLL(GLB_DLL_XTAL_Type xtalType) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM(IS_GLB_DLL_XTAL_TYPE(xtalType));\r\n\r\n  /* GLB->dll.BF.dll_refclk_sel = XXX; */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DLL);\r\n  switch (xtalType) {\r\n  case GLB_DLL_XTAL_NONE:\r\n    return ERROR;\r\n  case GLB_DLL_XTAL_32M:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_REFCLK_SEL, 0);\r\n    break;\r\n  case GLB_DLL_XTAL_RC32M:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_REFCLK_SEL, 1);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_DLL, tmpVal);\r\n\r\n  /* GLB->dll.BF.dll_prechg_sel = 1;   */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DLL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_PRECHG_SEL, 1);\r\n  BL_WR_REG(GLB_BASE, GLB_DLL, tmpVal);\r\n\r\n  /* GLB->dll.BF.ppu_dll = 1;   */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DLL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_PPU_DLL, 1);\r\n  BL_WR_REG(GLB_BASE, GLB_DLL, tmpVal);\r\n\r\n  BL702_Delay_US(2);\r\n\r\n  /* GLB->dll.BF.pu_dll = 1; */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DLL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_PU_DLL, 1);\r\n  BL_WR_REG(GLB_BASE, GLB_DLL, tmpVal);\r\n\r\n  BL702_Delay_US(2);\r\n\r\n  /* GLB->dll.BF.dll_reset = 0; */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DLL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_RESET, 0);\r\n  BL_WR_REG(GLB_BASE, GLB_DLL, tmpVal);\r\n\r\n  /* delay for settling */\r\n  BL702_Delay_US(5);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  enable all DLL output clock\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION GLB_Enable_DLL_All_Clks(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* GLB->dll.WORD = GLB->dll.WORD | 0x000000f8; include 288m and mmdiv */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DLL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_57P6M_EN, 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_96M_EN, 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_144M_EN, 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_288M_EN, 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_MMDIV_EN, 1);\r\n  BL_WR_REG(GLB_BASE, GLB_DLL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  enable one of DLL output clock\r\n                                                                                *\r\n                                                                                * @param  dllClk: None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION GLB_Enable_DLL_Clk(GLB_DLL_CLK_Type dllClk) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM(IS_GLB_DLL_CLK_TYPE(dllClk));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DLL);\r\n  switch (dllClk) {\r\n  case GLB_DLL_CLK_57P6M:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_57P6M_EN, 1);\r\n    break;\r\n  case GLB_DLL_CLK_96M:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_96M_EN, 1);\r\n    break;\r\n  case GLB_DLL_CLK_144M:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_144M_EN, 1);\r\n    break;\r\n  case GLB_DLL_CLK_288M:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_288M_EN, 1);\r\n    break;\r\n  case GLB_DLL_CLK_MMDIV:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_MMDIV_EN, 1);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_DLL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  disable all DLL output clock\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION GLB_Disable_DLL_All_Clks(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* GLB->dll.WORD = GLB->dll.WORD & ~0x000000f8; */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DLL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_57P6M_EN, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_96M_EN, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_144M_EN, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_288M_EN, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_MMDIV_EN, 0);\r\n  BL_WR_REG(GLB_BASE, GLB_DLL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  disable one of DLL output clock\r\n                                                                                *\r\n                                                                                * @param  dllClk: None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION GLB_Disable_DLL_Clk(GLB_DLL_CLK_Type dllClk) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM(IS_GLB_DLL_CLK_TYPE(dllClk));\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_DLL);\r\n  switch (dllClk) {\r\n  case GLB_DLL_CLK_57P6M:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_57P6M_EN, 0);\r\n    break;\r\n  case GLB_DLL_CLK_96M:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_96M_EN, 0);\r\n    break;\r\n  case GLB_DLL_CLK_144M:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_144M_EN, 0);\r\n    break;\r\n  case GLB_DLL_CLK_288M:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_288M_EN, 0);\r\n    break;\r\n  case GLB_DLL_CLK_MMDIV:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_DLL_CLK_MMDIV_EN, 0);\r\n    break;\r\n  default:\r\n    break;\r\n  }\r\n  BL_WR_REG(GLB_BASE, GLB_DLL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Select ir rx gpio (gpio17~gpio31)\r\n                                                                                *\r\n                                                                                * @param  gpio: IR gpio selected\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_IR_RX_GPIO_Sel(GLB_GPIO_Type gpio) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* Select gpio between gpio17 and gpio31 */\r\n  if (gpio > 16 && gpio < 32) {\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_LED_DRIVER);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_IR_RX_GPIO_SEL, gpio - 16);\r\n    BL_WR_REG(GLB_BASE, GLB_LED_DRIVER, tmpVal);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable ir led driver\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_IR_LED_Driver_Enable(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* Enable led driver */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_LED_DRIVER);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, GLB_PU_LEDDRV);\r\n  BL_WR_REG(GLB_BASE, GLB_LED_DRIVER, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable ir led driver\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_IR_LED_Driver_Disable(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* Disable led driver */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_LED_DRIVER);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_PU_LEDDRV);\r\n  BL_WR_REG(GLB_BASE, GLB_LED_DRIVER, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable ir led driver gpio output(gpio 22 or 23)\r\n                                                                                *\r\n                                                                                * @param  gpio: IR gpio selected\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_IR_LED_Driver_Output_Enable(GLB_GPIO_Type gpio) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (gpio == GLB_GPIO_PIN_22) {\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_LED_DRIVER);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_LEDDRV_OUT_EN, BL_GET_REG_BITS_VAL(tmpVal, GLB_LEDDRV_OUT_EN) | 1);\r\n    BL_WR_REG(GLB_BASE, GLB_LED_DRIVER, tmpVal);\r\n  } else if (gpio == GLB_GPIO_PIN_23) {\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_LED_DRIVER);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_LEDDRV_OUT_EN, BL_GET_REG_BITS_VAL(tmpVal, GLB_LEDDRV_OUT_EN) | 2);\r\n    BL_WR_REG(GLB_BASE, GLB_LED_DRIVER, tmpVal);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable ir led driver gpio output(gpio 22 or 23)\r\n                                                                                *\r\n                                                                                * @param  gpio: IR gpio selected\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_IR_LED_Driver_Output_Disable(GLB_GPIO_Type gpio) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (gpio == GLB_GPIO_PIN_22) {\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_LED_DRIVER);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_LEDDRV_OUT_EN, BL_GET_REG_BITS_VAL(tmpVal, GLB_LEDDRV_OUT_EN) & ~1);\r\n    BL_WR_REG(GLB_BASE, GLB_LED_DRIVER, tmpVal);\r\n  } else if (gpio == GLB_GPIO_PIN_23) {\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_LED_DRIVER);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_LEDDRV_OUT_EN, BL_GET_REG_BITS_VAL(tmpVal, GLB_LEDDRV_OUT_EN) & ~2);\r\n    BL_WR_REG(GLB_BASE, GLB_LED_DRIVER, tmpVal);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set ir led driver ibias\r\n                                                                                *\r\n                                                                                * @param  ibias: Ibias value,0x0:0mA~0xf:120mA,8mA/step\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_IR_LED_Driver_Ibias(uint8_t ibias) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* Set driver ibias */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_LED_DRIVER);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_LEDDRV_IBIAS, ibias & 0xF);\r\n  BL_WR_REG(GLB_BASE, GLB_LED_DRIVER, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  GPIO initialization\r\n                                                                                *\r\n                                                                                * @param  cfg: GPIO configuration\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION GLB_GPIO_Init(GLB_GPIO_Cfg_Type *cfg) {\r\n  uint8_t   gpioPin = cfg->gpioPin;\r\n  uint8_t   realPin;\r\n  uint32_t *pOut;\r\n  uint32_t  pos;\r\n  uint32_t  tmpOut;\r\n  uint32_t  tmpVal;\r\n\r\n  /* drive strength(drive) = 0  <=>  8.0mA  @ 3.3V */\r\n  /* drive strength(drive) = 1  <=>  9.6mA  @ 3.3V */\r\n  /* drive strength(drive) = 2  <=>  11.2mA @ 3.3V */\r\n  /* drive strength(drive) = 3  <=>  12.8mA @ 3.3V */\r\n\r\n  pOut   = (uint32_t *)(GLB_BASE + GLB_GPIO_OUTPUT_EN_OFFSET + ((gpioPin >> 5) << 2));\r\n  pos    = gpioPin % 32;\r\n  tmpOut = *pOut;\r\n\r\n  /* Disable output anyway*/\r\n  tmpOut &= (~(1 << pos));\r\n  *pOut = tmpOut;\r\n\r\n  realPin = gpioPin;\r\n  /* sf pad use exclusive ie/pd/pu/drive/smtctrl */\r\n  if (gpioPin >= 23 && gpioPin <= 28) {\r\n    if ((BL_RD_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO) & (1 << (gpioPin - 23))) > 0) {\r\n      realPin += 9;\r\n    }\r\n  }\r\n  tmpVal = BL_RD_WORD(GLB_BASE + GLB_GPIO_OFFSET + realPin / 2 * 4);\r\n  if (realPin % 2 == 0) {\r\n    if (cfg->gpioMode != GPIO_MODE_ANALOG) {\r\n      /* not analog mode */\r\n\r\n      /* Set input or output */\r\n      if (cfg->gpioMode == GPIO_MODE_OUTPUT) {\r\n        tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_GPIO_0_IE);\r\n        tmpOut |= (1 << pos);\r\n      } else {\r\n        tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_GPIO_0_IE);\r\n      }\r\n\r\n      /* Set pull up or down */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_GPIO_0_PU);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_GPIO_0_PD);\r\n      if (cfg->pullType == GPIO_PULL_UP) {\r\n        tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_GPIO_0_PU);\r\n      } else if (cfg->pullType == GPIO_PULL_DOWN) {\r\n        tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_GPIO_0_PD);\r\n      }\r\n    } else {\r\n      /* analog mode */\r\n\r\n      /* clear ie && oe */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_GPIO_0_IE);\r\n      tmpOut &= ~(1 << pos);\r\n\r\n      /* clear pu && pd */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_GPIO_0_PU);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_GPIO_0_PD);\r\n    }\r\n\r\n    /* set drive && smt && func */\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_GPIO_0_DRV, cfg->drive);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_GPIO_0_SMT, cfg->smtCtrl);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_GPIO_0_FUNC_SEL, cfg->gpioFun);\r\n  } else {\r\n    if (cfg->gpioMode != GPIO_MODE_ANALOG) {\r\n      /* not analog mode */\r\n\r\n      /* Set input or output */\r\n      if (cfg->gpioMode == GPIO_MODE_OUTPUT) {\r\n        tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_GPIO_1_IE);\r\n        tmpOut |= (1 << pos);\r\n      } else {\r\n        tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_GPIO_1_IE);\r\n      }\r\n\r\n      /* Set pull up or down */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_GPIO_1_PU);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_GPIO_1_PD);\r\n      if (cfg->pullType == GPIO_PULL_UP) {\r\n        tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_GPIO_1_PU);\r\n      } else if (cfg->pullType == GPIO_PULL_DOWN) {\r\n        tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_GPIO_1_PD);\r\n      }\r\n    } else {\r\n      /* analog mode */\r\n\r\n      /* clear ie && oe */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_GPIO_1_IE);\r\n      tmpOut &= ~(1 << pos);\r\n\r\n      /* clear pu && pd */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_GPIO_1_PU);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_GPIO_1_PD);\r\n    }\r\n\r\n    /* set drive && smt && func */\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_GPIO_1_DRV, cfg->drive);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_GPIO_1_SMT, cfg->smtCtrl);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_GPIO_1_FUNC_SEL, cfg->gpioFun);\r\n  }\r\n  BL_WR_WORD(GLB_BASE + GLB_GPIO_OFFSET + realPin / 2 * 4, tmpVal);\r\n\r\n  *pOut = tmpOut;\r\n\r\n  /* always on pads IE control (in HBN) */\r\n  if (gpioPin >= 9 && gpioPin <= 13) {\r\n    tmpVal               = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n    uint32_t aonPadIeSmt = BL_GET_REG_BITS_VAL(tmpVal, HBN_REG_AON_PAD_IE_SMT);\r\n\r\n    if (cfg->gpioMode != GPIO_MODE_ANALOG) {\r\n      /* not analog mode */\r\n\r\n      if (cfg->gpioMode == GPIO_MODE_OUTPUT) {\r\n        aonPadIeSmt &= ~(1 << (gpioPin - 9));\r\n      } else {\r\n        aonPadIeSmt |= (1 << (gpioPin - 9));\r\n      }\r\n    } else {\r\n      /* analog mode */\r\n\r\n      /* clear aon pad ie */\r\n      aonPadIeSmt &= ~(1 << (gpioPin - 9));\r\n    }\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_REG_AON_PAD_IE_SMT, aonPadIeSmt);\r\n    BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n  }\r\n\r\n  if (gpioPin >= 23 && gpioPin <= 28) {\r\n    if ((BL_RD_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO) & (1 << (gpioPin - 23))) > 0) {\r\n      tmpVal = BL_RD_WORD(GLB_BASE + GLB_GPIO_OFFSET + gpioPin / 2 * 4);\r\n      if (gpioPin % 2 == 0) {\r\n        tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_GPIO_0_FUNC_SEL, cfg->gpioFun);\r\n      } else {\r\n        tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_REG_GPIO_1_FUNC_SEL, cfg->gpioFun);\r\n      }\r\n      BL_WR_WORD(GLB_BASE + GLB_GPIO_OFFSET + gpioPin / 2 * 4, tmpVal);\r\n\r\n      /* sf pad use GPIO23-GPIO28 pinmux&&outputEn */\r\n      pOut   = (uint32_t *)(GLB_BASE + GLB_GPIO_OUTPUT_EN_OFFSET + ((gpioPin >> 5) << 2));\r\n      pos    = gpioPin % 32;\r\n      tmpOut = *pOut;\r\n      /* Disable output anyway*/\r\n      tmpOut &= (~(1 << pos));\r\n      *pOut = tmpOut;\r\n      if (cfg->gpioMode != GPIO_MODE_ANALOG) {\r\n        /* not analog mode */\r\n\r\n        if (cfg->gpioMode == GPIO_MODE_OUTPUT) {\r\n          tmpOut |= (1 << pos);\r\n        }\r\n      }\r\n      *pOut = tmpOut;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  init GPIO function in pin list\r\n                                                                                *\r\n                                                                                * @param  gpioFun: GPIO pin function\r\n                                                                                * @param  pinList: GPIO pin list\r\n                                                                                * @param  cnt: GPIO pin count\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_GPIO_Func_Init(GLB_GPIO_FUNC_Type gpioFun, GLB_GPIO_Type *pinList, uint8_t cnt) {\r\n  GLB_GPIO_Cfg_Type gpioCfg = {.gpioPin = GLB_GPIO_PIN_0, .gpioFun = (uint8_t)gpioFun, .gpioMode = GPIO_MODE_AF, .pullType = GPIO_PULL_UP, .drive = 3, .smtCtrl = 1};\r\n\r\n  if (gpioFun == GPIO_FUN_ANALOG) {\r\n    gpioCfg.gpioMode = GPIO_MODE_ANALOG;\r\n  }\r\n\r\n  for (uint8_t i = 0; i < cnt; i++) {\r\n    gpioCfg.gpioPin = pinList[i];\r\n    GLB_GPIO_Init(&gpioCfg);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  GPIO set input function enable\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO pin\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION GLB_GPIO_INPUT_Enable(GLB_GPIO_Type gpioPin) {\r\n  uint32_t tmpVal;\r\n  uint32_t pinOffset;\r\n  uint32_t aonPadIeSmt;\r\n\r\n  pinOffset = (gpioPin >> 1) << 2;\r\n  tmpVal    = *(uint32_t *)(GLB_BASE + GLB_GPIO_OFFSET + pinOffset);\r\n  if (gpioPin % 2 == 0) {\r\n    /* [0] is ie */\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_GPIO_0_IE);\r\n  } else {\r\n    /* [16] is ie */\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, GLB_REG_GPIO_1_IE);\r\n  }\r\n  *(uint32_t *)(GLB_BASE + GLB_GPIO_OFFSET + pinOffset) = tmpVal;\r\n\r\n  /* always on pads IE control (in HBN) */\r\n  if (gpioPin >= 9 && gpioPin <= 13) {\r\n    tmpVal      = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n    aonPadIeSmt = BL_GET_REG_BITS_VAL(tmpVal, HBN_REG_AON_PAD_IE_SMT);\r\n    aonPadIeSmt |= (1 << (gpioPin - 9));\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_REG_AON_PAD_IE_SMT, aonPadIeSmt);\r\n    BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  GPIO set input function disable\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO pin\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION GLB_GPIO_INPUT_Disable(GLB_GPIO_Type gpioPin) {\r\n  uint32_t tmpVal;\r\n  uint32_t pinOffset;\r\n  uint32_t aonPadIeSmt;\r\n\r\n  pinOffset = (gpioPin >> 1) << 2;\r\n  tmpVal    = *(uint32_t *)(GLB_BASE + GLB_GPIO_OFFSET + pinOffset);\r\n  if (gpioPin % 2 == 0) {\r\n    /* [0] is ie */\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_GPIO_0_IE);\r\n  } else {\r\n    /* [16] is ie */\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_REG_GPIO_1_IE);\r\n  }\r\n  *(uint32_t *)(GLB_BASE + GLB_GPIO_OFFSET + pinOffset) = tmpVal;\r\n\r\n  /* always on pads IE control (in HBN) */\r\n  if (gpioPin >= 9 && gpioPin <= 13) {\r\n    tmpVal      = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n    aonPadIeSmt = BL_GET_REG_BITS_VAL(tmpVal, HBN_REG_AON_PAD_IE_SMT);\r\n    aonPadIeSmt &= ~(1 << (gpioPin - 9));\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_REG_AON_PAD_IE_SMT, aonPadIeSmt);\r\n    BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  GPIO set output function enable\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO pin\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION GLB_GPIO_OUTPUT_Enable(GLB_GPIO_Type gpioPin) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_CFGCTL34);\r\n  tmpVal = tmpVal | (1 << gpioPin);\r\n  BL_WR_REG(GLB_BASE, GLB_GPIO_CFGCTL34, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  GPIO set output function disable\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO pin\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION GLB_GPIO_OUTPUT_Disable(GLB_GPIO_Type gpioPin) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_CFGCTL34);\r\n  tmpVal = tmpVal & ~(1 << gpioPin);\r\n  BL_WR_REG(GLB_BASE, GLB_GPIO_CFGCTL34, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  GPIO set High-Z\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO pin\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION GLB_GPIO_Set_HZ(GLB_GPIO_Type gpioPin) {\r\n  uint32_t *pOut;\r\n  uint32_t  pos;\r\n  uint32_t  tmpOut;\r\n  uint32_t  tmpVal;\r\n  uint32_t  aonPadIeSmt;\r\n  uint8_t   realPin;\r\n\r\n  /* always on pads IE control (in HBN) */\r\n  if (gpioPin >= 9 && gpioPin <= 13) {\r\n    tmpVal      = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n    aonPadIeSmt = BL_GET_REG_BITS_VAL(tmpVal, HBN_REG_AON_PAD_IE_SMT);\r\n    aonPadIeSmt &= ~(1 << (gpioPin - 9));\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_REG_AON_PAD_IE_SMT, aonPadIeSmt);\r\n    BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n  }\r\n\r\n  realPin = gpioPin;\r\n  /* sf pad use exclusive ie/pd/pu/drive/smtctrl */\r\n  if (gpioPin >= 23 && gpioPin <= 28) {\r\n    if ((BL_RD_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO) & (1 << (gpioPin - 23))) > 0) {\r\n      realPin += 9;\r\n    }\r\n  }\r\n  tmpVal = BL_RD_WORD(GLB_BASE + GLB_GPIO_OFFSET + realPin / 2 * 4);\r\n\r\n  /* pu=0, pd=0, ie=0 */\r\n  if (realPin % 2 == 0) {\r\n    tmpVal = (tmpVal & 0xffffff00);\r\n  } else {\r\n    tmpVal = (tmpVal & 0xff00ffff);\r\n  }\r\n\r\n  BL_WR_WORD(GLB_BASE + GLB_GPIO_OFFSET + realPin / 2 * 4, tmpVal);\r\n\r\n  pOut   = (uint32_t *)(GLB_BASE + GLB_GPIO_OUTPUT_EN_OFFSET + ((gpioPin >> 5) << 2));\r\n  pos    = gpioPin % 32;\r\n  tmpOut = *pOut;\r\n\r\n  /* Disable output anyway*/\r\n  tmpOut &= (~(1 << pos));\r\n  *pOut = tmpOut;\r\n\r\n  tmpVal = BL_RD_WORD(GLB_BASE + GLB_GPIO_OFFSET + gpioPin / 2 * 4);\r\n\r\n  /* func_sel=swgpio */\r\n  if (gpioPin % 2 == 0) {\r\n    tmpVal = (tmpVal & 0xffff00ff);\r\n    tmpVal |= 0x0B00;\r\n  } else {\r\n    tmpVal = (tmpVal & 0x00ffffff);\r\n    tmpVal |= (0x0B00 << 16);\r\n  }\r\n\r\n  BL_WR_WORD(GLB_BASE + GLB_GPIO_OFFSET + gpioPin / 2 * 4, tmpVal);\r\n\r\n  /* Disable output anyway*/\r\n  *pOut = tmpOut;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type ATTR_TCM_SECTION GLB_Set_Flash_Pad_HZ(void) {\r\n  uint32_t tmpVal;\r\n  uint32_t offset;\r\n\r\n  if (BL_RD_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO) != 0x00) {\r\n    return ERROR;\r\n  }\r\n\r\n  for (offset = 23; offset <= 28; offset++) {\r\n    tmpVal = BL_RD_WORD(GLB_BASE + GLB_GPIO_OFFSET + offset / 2 * 4);\r\n    /* pu=0, pd=0, ie=0 */\r\n    if (offset % 2 == 0) {\r\n      tmpVal = (tmpVal & 0xffffff00);\r\n    } else {\r\n      tmpVal = (tmpVal & 0xff00ffff);\r\n    }\r\n    BL_WR_WORD(GLB_BASE + GLB_GPIO_OFFSET + offset / 2 * 4, tmpVal);\r\n\r\n    tmpVal = BL_RD_WORD(GLB_BASE + GLB_GPIO_OFFSET + offset / 2 * 4);\r\n    /* func_sel=swgpio */\r\n    if (offset % 2 == 0) {\r\n      tmpVal = (tmpVal & 0xffff00ff);\r\n      tmpVal |= 0x0B00;\r\n    } else {\r\n      tmpVal = (tmpVal & 0x00ffffff);\r\n      tmpVal |= (0x0B00 << 16);\r\n    }\r\n    BL_WR_WORD(GLB_BASE + GLB_GPIO_OFFSET + offset / 2 * 4, tmpVal);\r\n  }\r\n\r\n  tmpVal = BL_RD_WORD(GLB_BASE + GLB_GPIO_OUTPUT_EN_OFFSET);\r\n  tmpVal &= 0xE07FFFFF;\r\n  BL_WR_WORD(GLB_BASE + GLB_GPIO_OUTPUT_EN_OFFSET, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type ATTR_TCM_SECTION GLB_Set_Psram_Pad_HZ(void) {\r\n  uint32_t tmpVal;\r\n  uint32_t offset;\r\n\r\n  if (BL_RD_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO) != 0x3F) {\r\n    return ERROR;\r\n  }\r\n\r\n  for (offset = 32; offset <= 37; offset++) {\r\n    tmpVal = BL_RD_WORD(GLB_BASE + GLB_GPIO_OFFSET + offset / 2 * 4);\r\n    /* pu=0, pd=0, ie=0 */\r\n    if (offset % 2 == 0) {\r\n      tmpVal = (tmpVal & 0xffffff00);\r\n    } else {\r\n      tmpVal = (tmpVal & 0xff00ffff);\r\n    }\r\n    BL_WR_WORD(GLB_BASE + GLB_GPIO_OFFSET + offset / 2 * 4, tmpVal);\r\n\r\n    tmpVal = BL_RD_WORD(GLB_BASE + GLB_GPIO_OFFSET + (offset - 9) / 2 * 4);\r\n    /* func_sel=swgpio */\r\n    if ((offset - 9) % 2 == 0) {\r\n      tmpVal = (tmpVal & 0xffff00ff);\r\n      tmpVal |= 0x0B00;\r\n    } else {\r\n      tmpVal = (tmpVal & 0x00ffffff);\r\n      tmpVal |= (0x0B00 << 16);\r\n    }\r\n    BL_WR_WORD(GLB_BASE + GLB_GPIO_OFFSET + (offset - 9) / 2 * 4, tmpVal);\r\n  }\r\n\r\n  tmpVal = BL_RD_WORD(GLB_BASE + GLB_GPIO_OUTPUT_EN_OFFSET);\r\n  tmpVal &= 0xE07FFFFF;\r\n  BL_WR_WORD(GLB_BASE + GLB_GPIO_OUTPUT_EN_OFFSET, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get GPIO function\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO type\r\n                                                                                *\r\n                                                                                * @return GPIO function\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nuint8_t ATTR_TCM_SECTION GLB_GPIO_Get_Fun(GLB_GPIO_Type gpioPin) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_WORD(GLB_BASE + GLB_GPIO_OFFSET + gpioPin / 2 * 4);\r\n\r\n  if (gpioPin % 2 == 0) {\r\n    return BL_GET_REG_BITS_VAL(tmpVal, GLB_REG_GPIO_0_FUNC_SEL);\r\n  } else {\r\n    return BL_GET_REG_BITS_VAL(tmpVal, GLB_REG_GPIO_1_FUNC_SEL);\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Write GPIO\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO type\r\n                                                                                * @param  val: GPIO value\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_GPIO_Write(GLB_GPIO_Type gpioPin, uint32_t val) {\r\n  uint32_t *pOut = (uint32_t *)(GLB_BASE + GLB_GPIO_OUTPUT_OFFSET + ((gpioPin >> 5) << 2));\r\n  uint32_t  pos  = gpioPin % 32;\r\n  uint32_t  tmpOut;\r\n\r\n  tmpOut = *pOut;\r\n  if (val > 0) {\r\n    tmpOut |= (1 << pos);\r\n  } else {\r\n    tmpOut &= (~(1 << pos));\r\n  }\r\n  *pOut = tmpOut;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Read GPIO\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO type\r\n                                                                                *\r\n                                                                                * @return GPIO value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t GLB_GPIO_Read(GLB_GPIO_Type gpioPin) {\r\n  uint32_t *p   = (uint32_t *)(GLB_BASE + GLB_GPIO_INPUT_OFFSET + ((gpioPin >> 5) << 2));\r\n  uint32_t  pos = gpioPin % 32;\r\n\r\n  if ((*p) & (1 << pos)) {\r\n    return 1;\r\n  } else {\r\n    return 0;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set GLB GPIO interrupt mask\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO type\r\n                                                                                * @param  intMask: GPIO interrupt MASK or UNMASK\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_GPIO_IntMask(GLB_GPIO_Type gpioPin, BL_Mask_Type intMask) {\r\n  uint32_t tmpVal;\r\n\r\n  if (gpioPin < 32) {\r\n    /* GPIO0 ~ GPIO31 */\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_INT_MASK1);\r\n    if (intMask == MASK) {\r\n      tmpVal = tmpVal | (1 << gpioPin);\r\n    } else {\r\n      tmpVal = tmpVal & ~(1 << gpioPin);\r\n    }\r\n    BL_WR_REG(GLB_BASE, GLB_GPIO_INT_MASK1, tmpVal);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set GLB GPIO interrupt mask\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO type\r\n                                                                                * @param  intClear: GPIO interrupt clear or unclear\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_GPIO_IntClear(GLB_GPIO_Type gpioPin, BL_Sts_Type intClear) {\r\n  uint32_t tmpVal;\r\n\r\n  if (gpioPin < 32) {\r\n    /* GPIO0 ~ GPIO31 */\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_INT_CLR1);\r\n    if (intClear == SET) {\r\n      tmpVal = tmpVal | (1 << gpioPin);\r\n    } else {\r\n      tmpVal = tmpVal & ~(1 << gpioPin);\r\n    }\r\n    BL_WR_REG(GLB_BASE, GLB_GPIO_INT_CLR1, tmpVal);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get GLB GPIO interrrupt status\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO type\r\n                                                                                *\r\n                                                                                * @return SET or RESET\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type GLB_Get_GPIO_IntStatus(GLB_GPIO_Type gpioPin) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (gpioPin < 32) {\r\n    /* GPIO0 ~ GPIO31 */\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_INT_STAT1);\r\n  }\r\n\r\n  return (tmpVal & (1 << gpioPin)) ? SET : RESET;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set GLB GPIO interrupt mode\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO type\r\n                                                                                * @param  intCtlMod: GPIO interrupt control mode\r\n                                                                                * @param  intTrgMod: GPIO interrupt trigger mode\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_GPIO_IntMod(GLB_GPIO_Type gpioPin, GLB_GPIO_INT_CONTROL_Type intCtlMod, GLB_GPIO_INT_TRIG_Type intTrgMod) {\r\n  uint32_t tmpVal;\r\n  uint32_t tmpGpioPin;\r\n\r\n  CHECK_PARAM(IS_GLB_GPIO_INT_CONTROL_TYPE(intCtlMod));\r\n  CHECK_PARAM(IS_GLB_GPIO_INT_TRIG_TYPE(intTrgMod));\r\n\r\n  if (gpioPin < GLB_GPIO_PIN_10) {\r\n    /* GPIO0 ~ GPIO9 */\r\n    tmpVal     = BL_RD_REG(GLB_BASE, GLB_GPIO_INT_MODE_SET1);\r\n    tmpGpioPin = gpioPin;\r\n    tmpVal     = (tmpVal & ~(0x7 << (3 * tmpGpioPin))) | (((intCtlMod << 2) | intTrgMod) << (3 * tmpGpioPin));\r\n    BL_WR_REG(GLB_BASE, GLB_GPIO_INT_MODE_SET1, tmpVal);\r\n  } else if (gpioPin < GLB_GPIO_PIN_20) {\r\n    /* GPIO10 ~ GPIO19 */\r\n    tmpVal     = BL_RD_REG(GLB_BASE, GLB_GPIO_INT_MODE_SET2);\r\n    tmpGpioPin = gpioPin - GLB_GPIO_PIN_10;\r\n    tmpVal     = (tmpVal & ~(0x7 << (3 * tmpGpioPin))) | (((intCtlMod << 2) | intTrgMod) << (3 * tmpGpioPin));\r\n    BL_WR_REG(GLB_BASE, GLB_GPIO_INT_MODE_SET2, tmpVal);\r\n  } else if (gpioPin < GLB_GPIO_PIN_30) {\r\n    /* GPIO20 ~ GPIO29 */\r\n    tmpVal     = BL_RD_REG(GLB_BASE, GLB_GPIO_INT_MODE_SET3);\r\n    tmpGpioPin = gpioPin - GLB_GPIO_PIN_20;\r\n    tmpVal     = (tmpVal & ~(0x7 << (3 * tmpGpioPin))) | (((intCtlMod << 2) | intTrgMod) << (3 * tmpGpioPin));\r\n    BL_WR_REG(GLB_BASE, GLB_GPIO_INT_MODE_SET3, tmpVal);\r\n  } else {\r\n    /* GPIO30 ~ GPIO31 not recommend */\r\n    tmpVal     = BL_RD_REG(GLB_BASE, GLB_GPIO_INT_MODE_SET4);\r\n    tmpGpioPin = gpioPin - GLB_GPIO_PIN_30;\r\n    tmpVal     = (tmpVal & ~(0x7 << (3 * tmpGpioPin))) | (((intCtlMod << 2) | intTrgMod) << (3 * tmpGpioPin));\r\n    BL_WR_REG(GLB_BASE, GLB_GPIO_INT_MODE_SET4, tmpVal);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get GPIO interrupt control mode\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO pin type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nGLB_GPIO_INT_CONTROL_Type GLB_Get_GPIO_IntCtlMod(GLB_GPIO_Type gpioPin) {\r\n  uint32_t tmpVal;\r\n  uint32_t bitVal;\r\n\r\n  if (gpioPin < GLB_GPIO_PIN_10) {\r\n    /* GPIO0 - GPIO9 */\r\n    bitVal = gpioPin - 0;\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_INT_MODE_SET1);\r\n    tmpVal = (tmpVal & (0x7 << (bitVal * 3))) >> (bitVal * 3);\r\n    return (tmpVal >> 2) ? GLB_GPIO_INT_CONTROL_ASYNC : GLB_GPIO_INT_CONTROL_SYNC;\r\n  } else if ((gpioPin > GLB_GPIO_PIN_9) && (gpioPin < GLB_GPIO_PIN_20)) {\r\n    /* GPIO10 - GPIO19 */\r\n    bitVal = gpioPin - 10;\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_INT_MODE_SET2);\r\n    tmpVal = (tmpVal & (0x7 << (bitVal * 3))) >> (bitVal * 3);\r\n    return (tmpVal >> 2) ? GLB_GPIO_INT_CONTROL_ASYNC : GLB_GPIO_INT_CONTROL_SYNC;\r\n  } else if ((gpioPin > GLB_GPIO_PIN_19) && (gpioPin < GLB_GPIO_PIN_30)) {\r\n    /* GPIO20 - GPIO29 */\r\n    bitVal = gpioPin - 20;\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_INT_MODE_SET3);\r\n    tmpVal = (tmpVal & (0x7 << (bitVal * 3))) >> (bitVal * 3);\r\n    return (tmpVal >> 2) ? GLB_GPIO_INT_CONTROL_ASYNC : GLB_GPIO_INT_CONTROL_SYNC;\r\n  } else {\r\n    /* GPIO30 ~ GPIO31 not recommend */\r\n    bitVal = gpioPin - 30;\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_INT_MODE_SET4);\r\n    tmpVal = (tmpVal & (0x7 << (bitVal * 3))) >> (bitVal * 3);\r\n    return (tmpVal >> 2) ? GLB_GPIO_INT_CONTROL_ASYNC : GLB_GPIO_INT_CONTROL_SYNC;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set GLB GPIO interrupt mask 2\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO type\r\n                                                                                * @param  intMask: GPIO interrupt MASK or UNMASK\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_GPIO_Int2Mask(GLB_GPIO_Type gpioPin, BL_Mask_Type intMask) {\r\n  uint32_t tmpVal;\r\n\r\n  if (gpioPin < 32) {\r\n    /* GPIO0 ~ GPIO31 */\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_INT2_MASK1);\r\n    if (intMask == MASK) {\r\n      tmpVal = tmpVal | (1 << gpioPin);\r\n    } else {\r\n      tmpVal = tmpVal & ~(1 << gpioPin);\r\n    }\r\n    BL_WR_REG(GLB_BASE, GLB_GPIO_INT2_MASK1, tmpVal);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set GLB GPIO interrupt mask 2\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO type\r\n                                                                                * @param  intClear: GPIO interrupt clear or unclear\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_GPIO_Int2Clear(GLB_GPIO_Type gpioPin, BL_Sts_Type intClear) {\r\n  uint32_t tmpVal;\r\n\r\n  if (gpioPin < 32) {\r\n    /* GPIO0 ~ GPIO31 */\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_INT2_CLR1);\r\n    if (intClear == SET) {\r\n      tmpVal = tmpVal | (1 << gpioPin);\r\n    } else {\r\n      tmpVal = tmpVal & ~(1 << gpioPin);\r\n    }\r\n    BL_WR_REG(GLB_BASE, GLB_GPIO_INT2_CLR1, tmpVal);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get GLB GPIO interrrupt status 2\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO type\r\n                                                                                *\r\n                                                                                * @return SET or RESET\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type GLB_Get_GPIO_Int2Status(GLB_GPIO_Type gpioPin) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (gpioPin < 32) {\r\n    /* GPIO0 ~ GPIO31 */\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_INT2_STAT1);\r\n  }\r\n\r\n  return (tmpVal & (1 << gpioPin)) ? SET : RESET;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set GLB GPIO interrupt mode 2\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO type\r\n                                                                                * @param  intCtlMod: GPIO interrupt control mode\r\n                                                                                * @param  intTrgMod: GPIO interrupt trigger mode\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_Set_GPIO_Int2Mod(GLB_GPIO_Type gpioPin, GLB_GPIO_INT_CONTROL_Type intCtlMod, GLB_GPIO_INT_TRIG_Type intTrgMod) {\r\n  uint32_t tmpVal;\r\n  uint32_t tmpGpioPin;\r\n\r\n  CHECK_PARAM(IS_GLB_GPIO_INT_CONTROL_TYPE(intCtlMod));\r\n  CHECK_PARAM(IS_GLB_GPIO_INT_TRIG_TYPE(intTrgMod));\r\n\r\n  if (gpioPin < GLB_GPIO_PIN_10) {\r\n    /* GPIO0 ~ GPIO9 */\r\n    tmpVal     = BL_RD_REG(GLB_BASE, GLB_GPIO_INT2_MODE_SET1);\r\n    tmpGpioPin = gpioPin;\r\n    tmpVal     = (tmpVal & ~(0x7 << (3 * tmpGpioPin))) | (((intCtlMod << 2) | intTrgMod) << (3 * tmpGpioPin));\r\n    BL_WR_REG(GLB_BASE, GLB_GPIO_INT2_MODE_SET1, tmpVal);\r\n  } else if (gpioPin < GLB_GPIO_PIN_20) {\r\n    /* GPIO10 ~ GPIO19 */\r\n    tmpVal     = BL_RD_REG(GLB_BASE, GLB_GPIO_INT2_MODE_SET2);\r\n    tmpGpioPin = gpioPin - GLB_GPIO_PIN_10;\r\n    tmpVal     = (tmpVal & ~(0x7 << (3 * tmpGpioPin))) | (((intCtlMod << 2) | intTrgMod) << (3 * tmpGpioPin));\r\n    BL_WR_REG(GLB_BASE, GLB_GPIO_INT2_MODE_SET2, tmpVal);\r\n  } else if (gpioPin < GLB_GPIO_PIN_30) {\r\n    /* GPIO20 ~ GPIO29 */\r\n    tmpVal     = BL_RD_REG(GLB_BASE, GLB_GPIO_INT2_MODE_SET3);\r\n    tmpGpioPin = gpioPin - GLB_GPIO_PIN_20;\r\n    tmpVal     = (tmpVal & ~(0x7 << (3 * tmpGpioPin))) | (((intCtlMod << 2) | intTrgMod) << (3 * tmpGpioPin));\r\n    BL_WR_REG(GLB_BASE, GLB_GPIO_INT2_MODE_SET3, tmpVal);\r\n  } else {\r\n    /* GPIO30 ~ GPIO31 not recommend */\r\n    tmpVal     = BL_RD_REG(GLB_BASE, GLB_GPIO_INT2_MODE_SET4);\r\n    tmpGpioPin = gpioPin - GLB_GPIO_PIN_30;\r\n    tmpVal     = (tmpVal & ~(0x7 << (3 * tmpGpioPin))) | (((intCtlMod << 2) | intTrgMod) << (3 * tmpGpioPin));\r\n    BL_WR_REG(GLB_BASE, GLB_GPIO_INT2_MODE_SET4, tmpVal);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get GPIO interrupt control mode 2\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO pin type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nGLB_GPIO_INT_CONTROL_Type GLB_Get_GPIO_Int2CtlMod(GLB_GPIO_Type gpioPin) {\r\n  uint32_t tmpVal;\r\n  uint32_t bitVal;\r\n\r\n  if (gpioPin < GLB_GPIO_PIN_10) {\r\n    /* GPIO0 - GPIO9 */\r\n    bitVal = gpioPin - 0;\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_INT2_MODE_SET1);\r\n    tmpVal = (tmpVal & (0x7 << (bitVal * 3))) >> (bitVal * 3);\r\n    return (tmpVal >> 2) ? GLB_GPIO_INT_CONTROL_ASYNC : GLB_GPIO_INT_CONTROL_SYNC;\r\n  } else if ((gpioPin > GLB_GPIO_PIN_9) && (gpioPin < GLB_GPIO_PIN_20)) {\r\n    /* GPIO10 - GPIO19 */\r\n    bitVal = gpioPin - 10;\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_INT2_MODE_SET2);\r\n    tmpVal = (tmpVal & (0x7 << (bitVal * 3))) >> (bitVal * 3);\r\n    return (tmpVal >> 2) ? GLB_GPIO_INT_CONTROL_ASYNC : GLB_GPIO_INT_CONTROL_SYNC;\r\n  } else if ((gpioPin > GLB_GPIO_PIN_19) && (gpioPin < GLB_GPIO_PIN_30)) {\r\n    /* GPIO20 - GPIO29 */\r\n    bitVal = gpioPin - 20;\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_INT2_MODE_SET3);\r\n    tmpVal = (tmpVal & (0x7 << (bitVal * 3))) >> (bitVal * 3);\r\n    return (tmpVal >> 2) ? GLB_GPIO_INT_CONTROL_ASYNC : GLB_GPIO_INT_CONTROL_SYNC;\r\n  } else {\r\n    /* GPIO30 ~ GPIO31 not recommend */\r\n    bitVal = gpioPin - 30;\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_INT2_MODE_SET4);\r\n    tmpVal = (tmpVal & (0x7 << (bitVal * 3))) >> (bitVal * 3);\r\n    return (tmpVal >> 2) ? GLB_GPIO_INT_CONTROL_ASYNC : GLB_GPIO_INT_CONTROL_SYNC;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  GPIO INT0 IRQHandler install\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_GPIO_INT0_IRQHandler_Install(void) {\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(GPIO_INT0_IRQn, GPIO_INT0_IRQHandler);\r\n#endif\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  GPIO interrupt IRQ handler callback install\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO pin type\r\n                                                                                * @param  cbFun: callback function\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_GPIO_INT0_Callback_Install(GLB_GPIO_Type gpioPin, intCallback_Type *cbFun) {\r\n  if (gpioPin < 32) {\r\n    glbGpioInt0CbfArra[gpioPin] = cbFun;\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  GPIO interrupt IRQ handler callback install2\r\n                                                                                *\r\n                                                                                * @param  gpioPin: GPIO pin type\r\n                                                                                * @param  cbFun: callback function\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type GLB_GPIO_INT0_Callback_Install2(GLB_GPIO_Type gpioPin, intCallback_Type *cbFun) {\r\n  if (gpioPin < 32) {\r\n    glbGpioInt0CbfArra2[gpioPin] = cbFun;\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  GPIO interrupt IRQ handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid GPIO_INT0_IRQHandler(void) {\r\n  GLB_GPIO_Type gpioPin;\r\n  uint32_t      timeOut = 0;\r\n\r\n  for (gpioPin = GLB_GPIO_PIN_0; gpioPin <= GLB_GPIO_PIN_31; gpioPin++) {\r\n    if (SET == GLB_Get_GPIO_IntStatus(gpioPin)) {\r\n      GLB_GPIO_IntClear(gpioPin, SET);\r\n\r\n      /* timeout check */\r\n      timeOut = GLB_GPIO_INT0_CLEAR_TIMEOUT;\r\n      do {\r\n        timeOut--;\r\n      } while ((SET == GLB_Get_GPIO_IntStatus(gpioPin)) && timeOut);\r\n      if (!timeOut) {\r\n        // MSG(\"WARNING: Clear GPIO interrupt status fail.\\r\\n\");\r\n      }\r\n\r\n      /* if timeOut==0, GPIO interrupt status not cleared */\r\n      GLB_GPIO_IntClear(gpioPin, RESET);\r\n\r\n      if (glbGpioInt0CbfArra[gpioPin] != NULL) {\r\n        /* Call the callback function */\r\n        glbGpioInt0CbfArra[gpioPin]();\r\n      }\r\n    }\r\n    if (SET == GLB_Get_GPIO_Int2Status(gpioPin)) {\r\n      GLB_GPIO_Int2Clear(gpioPin, SET);\r\n\r\n      /* timeout check */\r\n      timeOut = GLB_GPIO_INT0_CLEAR_TIMEOUT;\r\n      do {\r\n        timeOut--;\r\n      } while ((SET == GLB_Get_GPIO_Int2Status(gpioPin)) && timeOut);\r\n      if (!timeOut) {\r\n        // MSG(\"WARNING: Clear GPIO interrupt status fail.\\r\\n\");\r\n      }\r\n\r\n      /* if timeOut==0, GPIO interrupt status not cleared */\r\n      GLB_GPIO_Int2Clear(gpioPin, RESET);\r\n\r\n      if (glbGpioInt0CbfArra2[gpioPin] != NULL) {\r\n        /* Call the callback function */\r\n        glbGpioInt0CbfArra2[gpioPin]();\r\n      }\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/*@} end of group GLB_Public_Functions */\r\n\r\n/*@} end of group GLB */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_hbn.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_hbn.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_hbn.h\"\r\n#include \"bl702_glb.h\"\r\n#include \"bl702_xip_sflash.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  HBN\r\n *  @{\r\n */\r\n\r\n/** @defgroup  HBN_Private_Macros\r\n *  @{\r\n */\r\n#define HBN_CLK_SET_DUMMY_WAIT                                                                                                                                                                         \\\r\n  {                                                                                                                                                                                                    \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n    __NOP();                                                                                                                                                                                           \\\r\n  }\r\n\r\n/*@} end of group HBN_Private_Macros */\r\n\r\n/** @defgroup  HBN_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group HBN_Private_Types */\r\n\r\n/** @defgroup  HBN_Private_Variables\r\n *  @{\r\n */\r\nstatic intCallback_Type *hbnInt0CbfArra[HBN_OUT0_MAX] = {NULL, NULL, NULL, NULL, NULL, NULL};\r\nstatic intCallback_Type *hbnInt1CbfArra[HBN_OUT1_MAX] = {NULL, NULL, NULL, NULL};\r\n\r\n/*@} end of group HBN_Private_Variables */\r\n\r\n/** @defgroup  HBN_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group HBN_Global_Variables */\r\n\r\n/** @defgroup  HBN_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group HBN_Private_Fun_Declaration */\r\n\r\n/** @defgroup  HBN_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group HBN_Private_Functions */\r\n\r\n/** @defgroup  HBN_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enter HBN\r\n                                                                                *\r\n                                                                                * @param  cfg: HBN APP Config\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid ATTR_TCM_SECTION HBN_Mode_Enter(HBN_APP_CFG_Type *cfg) {\r\n  uint32_t valLow = 0, valHigh = 0;\r\n  uint64_t val;\r\n\r\n  /* work clock select */\r\n  if (cfg->useXtal32k) {\r\n    HBN_32K_Sel(HBN_32K_XTAL);\r\n  } else {\r\n    HBN_32K_Sel(HBN_32K_RC);\r\n    HBN_Power_Off_Xtal_32K();\r\n  }\r\n\r\n  /* turn off RC32K during HBN */\r\n  if ((cfg->hbnLevel) >= HBN_LEVEL_2) {\r\n    HBN_Power_Off_RC32K();\r\n  } else {\r\n    HBN_Power_On_RC32K();\r\n  }\r\n\r\n  /* clear aon pad interrupt before config them */\r\n  HBN_Clear_IRQ(HBN_INT_GPIO9);\r\n  HBN_Clear_IRQ(HBN_INT_GPIO10);\r\n  HBN_Clear_IRQ(HBN_INT_GPIO11);\r\n  HBN_Clear_IRQ(HBN_INT_GPIO12);\r\n  HBN_Clear_IRQ(HBN_INT_GPIO13);\r\n\r\n  /* always disable HBN pin pull up/down to reduce PDS/HBN current, 0x4000F014[16]=0 */\r\n  HBN_Hw_Pu_Pd_Cfg(DISABLE);\r\n\r\n  HBN_Pin_WakeUp_Mask(~(cfg->gpioWakeupSrc));\r\n\r\n  if (cfg->gpioWakeupSrc != 0) {\r\n    HBN_Aon_Pad_IeSmt_Cfg(cfg->gpioWakeupSrc);\r\n    HBN_GPIO_INT_Enable(cfg->gpioTrigType);\r\n  } else {\r\n    HBN_Aon_Pad_IeSmt_Cfg(0);\r\n  }\r\n\r\n  /* HBN RTC config and enable */\r\n  if (cfg->sleepTime != 0) {\r\n    // set rtc enable flag\r\n    BL_WR_WORD(0x40010FFC, 0x1);\r\n\r\n    HBN_Clear_RTC_Counter();\r\n    HBN_Get_RTC_Timer_Val(&valLow, &valHigh);\r\n    val = valLow + ((uint64_t)valHigh << 32);\r\n    val += cfg->sleepTime;\r\n    HBN_Set_RTC_Timer(HBN_RTC_INT_DELAY_0T, val & 0xffffffff, val >> 32, HBN_RTC_COMP_BIT0_39);\r\n    HBN_Enable_RTC_Counter();\r\n  }\r\n\r\n  HBN_Power_Down_Flash(cfg->flashCfg);\r\n\r\n  switch (cfg->flashPinCfg) {\r\n  case 0:\r\n    HBN_Set_Pad_23_28_Pullup();\r\n    break;\r\n\r\n  case 1:\r\n    /* need do nothing */\r\n    break;\r\n\r\n  case 2:\r\n    /* need do nothing */\r\n    break;\r\n\r\n  case 3:\r\n    /* can do nothing */\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  GLB_Set_System_CLK(GLB_DLL_XTAL_NONE, GLB_SYS_CLK_RC32M);\r\n\r\n  /* power off xtal */\r\n  AON_Power_Off_XTAL();\r\n\r\n  HBN_Enable_Ext(cfg->gpioWakeupSrc, cfg->ldoLevel, cfg->hbnLevel);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  power down and switch clock\r\n                                                                                *\r\n                                                                                * @param  flashCfg: None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid ATTR_TCM_SECTION HBN_Power_Down_Flash(SPI_Flash_Cfg_Type *flashCfg) {\r\n  SPI_Flash_Cfg_Type bhFlashCfg;\r\n\r\n  if (flashCfg == NULL) {\r\n    /* fix this some time */\r\n    /* SFlash_Cache_Flush(); */\r\n    XIP_SFlash_Read_Via_Cache_Need_Lock(BL702_FLASH_XIP_BASE + 8 + 4, (uint8_t *)(&bhFlashCfg), sizeof(SPI_Flash_Cfg_Type));\r\n    /* fix this some time */\r\n    /* SFlash_Cache_Flush(); */\r\n\r\n    SF_Ctrl_Set_Owner(SF_CTRL_OWNER_SAHB);\r\n    SFlash_Reset_Continue_Read(&bhFlashCfg);\r\n  } else {\r\n    SF_Ctrl_Set_Owner(SF_CTRL_OWNER_SAHB);\r\n    SFlash_Reset_Continue_Read(flashCfg);\r\n  }\r\n\r\n  SFlash_Powerdown();\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable HBN mode\r\n                                                                                *\r\n                                                                                * @param  aGPIOIeCfg: AON GPIO IE config,Bit0->GPIO18. Bit(s) of Wakeup GPIO(s) must not be set to\r\n                                                                                *                     0(s),say when use GPIO7 as wake up pin,aGPIOIeCfg should be 0x01.\r\n                                                                                * @param  ldoLevel: LDO volatge level\r\n                                                                                * @param  hbnLevel: HBN work level\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid ATTR_TCM_SECTION HBN_Enable_Ext(uint8_t aGPIOIeCfg, HBN_LDO_LEVEL_Type ldoLevel, HBN_LEVEL_Type hbnLevel) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_HBN_LDO_LEVEL_TYPE(ldoLevel));\r\n  CHECK_PARAM(IS_HBN_LEVEL_TYPE(hbnLevel));\r\n\r\n  /* Setting from guide */\r\n  /* RAM Retion, no longer use */\r\n  /* BL_WR_REG(HBN_BASE,HBN_SRAM,0x24); */\r\n\r\n  /* AON GPIO IE */\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_REG_AON_PAD_IE_SMT, aGPIOIeCfg);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_REG_EN_HW_PU_PD);\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n\r\n  /* HBN mode LDO level */\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_LDO11_AON_VOUT_SEL, ldoLevel);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_LDO11_RT_VOUT_SEL, ldoLevel);\r\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal);\r\n\r\n  /* Select RC32M */\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_ROOT_CLK_SEL, 0);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n\r\n  /* Set HBN flag */\r\n  BL_WR_REG(HBN_BASE, HBN_RSV0, HBN_STATUS_ENTER_FLAG);\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\r\n\r\n  /* Set HBN level, (HBN_PWRDN_HBN_RAM not use) */\r\n  switch (hbnLevel) {\r\n  case HBN_LEVEL_0:\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PWRDN_HBN_CORE);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PWRDN_HBN_RTC);\r\n    break;\r\n\r\n  case HBN_LEVEL_1:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PWRDN_HBN_CORE);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PWRDN_HBN_RTC);\r\n    break;\r\n\r\n  case HBN_LEVEL_2:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PWRDN_HBN_CORE);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PWRDN_HBN_RTC);\r\n    break;\r\n\r\n  case HBN_LEVEL_3:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PWRDN_HBN_CORE);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PWRDN_HBN_RTC);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Set power on option:0 for por reset twice for robust 1 for reset only once*/\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PWR_ON_OPTION);\r\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal);\r\n\r\n  /* Enable HBN mode */\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_MODE);\r\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal);\r\n\r\n  while (1) {\r\n    BL702_Delay_MS(1000);\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Reset HBN mode\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION HBN_Reset(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\r\n  /* Reset HBN mode */\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_SW_RST);\r\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal);\r\n\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_SW_RST);\r\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal);\r\n\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_SW_RST);\r\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  reset HBN by software\r\n                                                                                *\r\n                                                                                * @param  npXtalType: NP clock type\r\n                                                                                * @param  bclkDiv: NP clock div\r\n                                                                                * @param  apXtalType: AP clock type\r\n                                                                                * @param  fclkDiv: AP clock div\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_App_Reset(uint8_t npXtalType, uint8_t bclkDiv, uint8_t apXtalType, uint8_t fclkDiv) {\r\n  uint32_t tmp[12];\r\n\r\n  tmp[0]  = BL_RD_REG(HBN_BASE, HBN_CTL);\r\n  tmp[1]  = BL_RD_REG(HBN_BASE, HBN_TIME_L);\r\n  tmp[2]  = BL_RD_REG(HBN_BASE, HBN_TIME_H);\r\n  tmp[3]  = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n  tmp[4]  = BL_RD_REG(HBN_BASE, HBN_IRQ_CLR);\r\n  tmp[5]  = BL_RD_REG(HBN_BASE, HBN_PIR_CFG);\r\n  tmp[6]  = BL_RD_REG(HBN_BASE, HBN_PIR_VTH);\r\n  tmp[7]  = BL_RD_REG(HBN_BASE, HBN_PIR_INTERVAL);\r\n  tmp[8]  = BL_RD_REG(HBN_BASE, HBN_SRAM);\r\n  tmp[9]  = BL_RD_REG(HBN_BASE, HBN_RSV0);\r\n  tmp[10] = BL_RD_REG(HBN_BASE, HBN_RSV1);\r\n  tmp[11] = BL_RD_REG(HBN_BASE, HBN_RSV2);\r\n  /* DO HBN reset */\r\n  HBN_Reset();\r\n  /* HBN need 3 32k cyclce to recovery */\r\n  BL702_Delay_US(100);\r\n  /* Recover HBN value */\r\n  BL_WR_REG(HBN_BASE, HBN_TIME_L, tmp[1]);\r\n  BL_WR_REG(HBN_BASE, HBN_TIME_H, tmp[2]);\r\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmp[0]);\r\n\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmp[3]);\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_CLR, tmp[4]);\r\n  BL_WR_REG(HBN_BASE, HBN_PIR_CFG, tmp[5]);\r\n  BL_WR_REG(HBN_BASE, HBN_PIR_VTH, tmp[6]);\r\n  BL_WR_REG(HBN_BASE, HBN_PIR_INTERVAL, tmp[7]);\r\n  BL_WR_REG(HBN_BASE, HBN_SRAM, tmp[8]);\r\n  BL_WR_REG(HBN_BASE, HBN_RSV0, tmp[9]);\r\n  BL_WR_REG(HBN_BASE, HBN_RSV1, tmp[10]);\r\n  BL_WR_REG(HBN_BASE, HBN_RSV2, tmp[11]);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable HBN mode\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\r\n  /* Disable HBN mode */\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_MODE);\r\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable HBN PIR\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_PIR_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_PIR_CFG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PIR_EN);\r\n  BL_WR_REG(HBN_BASE, HBN_PIR_CFG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable HBN PIR\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_PIR_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_PIR_CFG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PIR_EN);\r\n  BL_WR_REG(HBN_BASE, HBN_PIR_CFG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Config HBN PIR interrupt\r\n                                                                                *\r\n                                                                                * @param  pirIntCfg: HBN PIR interrupt configuration\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_PIR_INT_Config(HBN_PIR_INT_CFG_Type *pirIntCfg) {\r\n  uint32_t tmpVal;\r\n  uint32_t bit4   = 0;\r\n  uint32_t bit5   = 0;\r\n  uint32_t bitVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_PIR_CFG);\r\n\r\n  /* low trigger interrupt */\r\n  if (pirIntCfg->lowIntEn == ENABLE) {\r\n    bit5 = 0;\r\n  } else {\r\n    bit5 = 1;\r\n  }\r\n\r\n  /* high trigger interrupt */\r\n  if (pirIntCfg->highIntEn == ENABLE) {\r\n    bit4 = 0;\r\n  } else {\r\n    bit4 = 1;\r\n  }\r\n\r\n  bitVal = bit4 | (bit5 << 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_PIR_DIS, bitVal);\r\n  BL_WR_REG(HBN_BASE, HBN_PIR_CFG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Select HBN PIR low pass filter\r\n                                                                                *\r\n                                                                                * @param  lpf: HBN PIR low pass filter selection\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_PIR_LPF_Sel(HBN_PIR_LPF_Type lpf) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_HBN_PIR_LPF_TYPE(lpf));\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_PIR_CFG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_PIR_LPF_SEL, lpf);\r\n  BL_WR_REG(HBN_BASE, HBN_PIR_CFG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Select HBN PIR high pass filter\r\n                                                                                *\r\n                                                                                * @param  hpf: HBN PIR high pass filter selection\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_PIR_HPF_Sel(HBN_PIR_HPF_Type hpf) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_HBN_PIR_HPF_TYPE(hpf));\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_PIR_CFG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_PIR_HPF_SEL, hpf);\r\n  BL_WR_REG(HBN_BASE, HBN_PIR_CFG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set HBN PIR threshold value\r\n                                                                                *\r\n                                                                                * @param  threshold: HBN PIR threshold value\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Set_PIR_Threshold(uint16_t threshold) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM((threshold <= 0x3FFF));\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_PIR_VTH);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_PIR_VTH, threshold);\r\n  BL_WR_REG(HBN_BASE, HBN_PIR_VTH, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get HBN PIR threshold value\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return HBN PIR threshold value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint16_t HBN_Get_PIR_Threshold(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_PIR_VTH);\r\n\r\n  return BL_GET_REG_BITS_VAL(tmpVal, HBN_PIR_VTH);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set HBN PIR interval value\r\n                                                                                *\r\n                                                                                * @param  interval: HBN PIR interval value\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Set_PIR_Interval(uint16_t interval) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM((interval <= 0xFFF));\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_PIR_INTERVAL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_PIR_INTERVAL, interval);\r\n  BL_WR_REG(HBN_BASE, HBN_PIR_INTERVAL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get HBN PIR interval value\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return HBN PIR interval value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint16_t HBN_Get_PIR_Interval(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_PIR_INTERVAL);\r\n\r\n  return BL_GET_REG_BITS_VAL(tmpVal, HBN_PIR_INTERVAL);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get HBN bor out state\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SET or RESET\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type HBN_Get_BOR_OUT_State(void) { return BL_GET_REG_BITS_VAL(BL_RD_REG(HBN_BASE, HBN_MISC), HBN_R_BOR_OUT) ? SET : RESET; }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set HBN bor config\r\n                                                                                *\r\n                                                                                * @param  enable: ENABLE or DISABLE, if enable, Power up Brown Out Reset\r\n                                                                                * @param  threshold: bor threshold\r\n                                                                                * @param  mode: bor work mode with por\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Set_BOR_Config(uint8_t enable, HBN_BOR_THRES_Type threshold, HBN_BOR_MODE_Type mode) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_HBN_BOR_THRES_TYPE(threshold));\r\n  CHECK_PARAM(IS_HBN_BOR_MODE_TYPE(mode));\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_MISC);\r\n\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_PU_BOR, 1);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_PU_BOR, 0);\r\n  }\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_BOR_VTH, threshold);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_BOR_SEL, mode);\r\n  BL_WR_REG(HBN_BASE, HBN_MISC, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN set ldo11aon voltage out\r\n                                                                                *\r\n                                                                                * @param  ldoLevel: LDO volatge level\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION HBN_Set_Ldo11_Aon_Vout(HBN_LDO_LEVEL_Type ldoLevel) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_HBN_LDO_LEVEL_TYPE(ldoLevel));\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_SW_LDO11_AON_VOUT_SEL, ldoLevel);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN set ldo11rt voltage out\r\n                                                                                *\r\n                                                                                * @param  ldoLevel: LDO volatge level\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION HBN_Set_Ldo11_Rt_Vout(HBN_LDO_LEVEL_Type ldoLevel) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_HBN_LDO_LEVEL_TYPE(ldoLevel));\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_SW_LDO11_RT_VOUT_SEL, ldoLevel);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN set ldo11soc voltage out\r\n                                                                                *\r\n                                                                                * @param  ldoLevel: LDO volatge level\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION HBN_Set_Ldo11_Soc_Vout(HBN_LDO_LEVEL_Type ldoLevel) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_HBN_LDO_LEVEL_TYPE(ldoLevel));\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_SW_LDO11SOC_VOUT_SEL_AON, ldoLevel);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN set ldo11 all voltage out\r\n                                                                                *\r\n                                                                                * @param  ldoLevel: LDO volatge level\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION HBN_Set_Ldo11_All_Vout(HBN_LDO_LEVEL_Type ldoLevel) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_HBN_LDO_LEVEL_TYPE(ldoLevel));\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_SW_LDO11_AON_VOUT_SEL, ldoLevel);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_SW_LDO11_RT_VOUT_SEL, ldoLevel);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_SW_LDO11SOC_VOUT_SEL_AON, ldoLevel);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN set ldo11rt drive strength\r\n                                                                                *\r\n                                                                                * @param  strength: ldo11rt drive strength\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION HBN_Set_Ldo11rt_Drive_Strength(HBN_LDO11RT_DRIVE_STRENGTH_Type strength) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_HBN_LDO11RT_DRIVE_STRENGTH_TYPE(strength));\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_LDO11_RT_ILOAD_SEL, strength);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN select 32K\r\n                                                                                *\r\n                                                                                * @param  clkType: HBN 32k clock type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_CLOCK_SECTION HBN_32K_Sel(HBN_32K_CLK_Type clkType) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_HBN_32K_CLK_TYPE(clkType));\r\n\r\n  HBN_Trim_RC32K();\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_F32K_SEL, clkType);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Select uart clock source\r\n                                                                                *\r\n                                                                                * @param  clkSel: uart clock type selection\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Set_UART_CLK_Sel(HBN_UART_CLK_Type clkSel) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_HBN_UART_CLK_TYPE(clkSel));\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_UART_CLK_SEL, clkSel);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Select xclk clock source\r\n                                                                                *\r\n                                                                                * @param  xClk: xclk clock type selection\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Set_XCLK_CLK_Sel(HBN_XCLK_CLK_Type xClk) {\r\n  uint32_t tmpVal;\r\n  uint32_t tmpVal2;\r\n\r\n  CHECK_PARAM(IS_HBN_XCLK_CLK_TYPE(xClk));\r\n\r\n  tmpVal  = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal2 = BL_GET_REG_BITS_VAL(tmpVal, HBN_ROOT_CLK_SEL);\r\n\r\n  switch (xClk) {\r\n  case HBN_XCLK_CLK_RC32M:\r\n    tmpVal2 &= (~(1 << 0));\r\n    break;\r\n\r\n  case HBN_XCLK_CLK_XTAL:\r\n    tmpVal2 |= (1 << 0);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_ROOT_CLK_SEL, tmpVal2);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n  HBN_CLK_SET_DUMMY_WAIT;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Select root clk source\r\n                                                                                *\r\n                                                                                * @param  rootClk: root clock type selection\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION HBN_Set_ROOT_CLK_Sel(HBN_ROOT_CLK_Type rootClk) {\r\n  uint32_t tmpVal;\r\n  uint32_t tmpVal2;\r\n\r\n  CHECK_PARAM(IS_HBN_ROOT_CLK_TYPE(rootClk));\r\n\r\n  tmpVal  = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal2 = BL_GET_REG_BITS_VAL(tmpVal, HBN_ROOT_CLK_SEL);\r\n\r\n  switch (rootClk) {\r\n  case HBN_ROOT_CLK_RC32M:\r\n    tmpVal2 = 0x0;\r\n    break;\r\n\r\n  case HBN_ROOT_CLK_XTAL:\r\n    tmpVal2 = 0x1;\r\n    break;\r\n\r\n  case HBN_ROOT_CLK_DLL:\r\n    tmpVal2 |= (1 << 1);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_ROOT_CLK_SEL, tmpVal2);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n  HBN_CLK_SET_DUMMY_WAIT;\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set HBN_RAM sleep mode\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Set_HRAM_slp(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_SRAM);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_RETRAM_SLP);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_RETRAM_RET);\r\n  BL_WR_REG(HBN_BASE, HBN_SRAM, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set HBN_RAM retension mode\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Set_HRAM_Ret(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_SRAM);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_RETRAM_SLP);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_RETRAM_RET);\r\n  BL_WR_REG(HBN_BASE, HBN_SRAM, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Power on XTAL 32K\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_CLOCK_SECTION HBN_Power_On_Xtal_32K(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_XTAL32K);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PU_XTAL32K);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PU_XTAL32K_BUF);\r\n  BL_WR_REG(HBN_BASE, HBN_XTAL32K, tmpVal);\r\n\r\n  /* Delay >1s */\r\n  BL702_Delay_US(1100);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Power off XTAL 32K\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_CLOCK_SECTION HBN_Power_Off_Xtal_32K(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_XTAL32K);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PU_XTAL32K);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PU_XTAL32K_BUF);\r\n  BL_WR_REG(HBN_BASE, HBN_XTAL32K, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Power on RC32K\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_CLOCK_SECTION HBN_Power_On_RC32K(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PU_RC32K);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n\r\n  /* Delay >800us */\r\n  BL702_Delay_US(880);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Power off RC3K\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_CLOCK_SECTION HBN_Power_Off_RC32K(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PU_RC32K);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Trim RC32K\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION HBN_Trim_RC32K(void) {\r\n  Efuse_Ana_RC32K_Trim_Type trim;\r\n  int32_t                   tmpVal = 0;\r\n\r\n  EF_Ctrl_Read_RC32K_Trim(&trim);\r\n\r\n  if (trim.trimRc32kExtCodeEn) {\r\n    if (trim.trimRc32kCodeFrExtParity == EF_Ctrl_Get_Trim_Parity(trim.trimRc32kCodeFrExt, 10)) {\r\n      tmpVal = BL_RD_REG(HBN_BASE, HBN_RC32K_CTRL0);\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_RC32K_CODE_FR_EXT, trim.trimRc32kCodeFrExt);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, HBN_RC32K_EXT_CODE_EN);\r\n      BL_WR_REG(HBN_BASE, HBN_RC32K_CTRL0, tmpVal);\r\n      BL702_Delay_US(2);\r\n      return SUCCESS;\r\n    }\r\n  }\r\n\r\n  return ERROR;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get HBN status flag\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return HBN status flag value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t HBN_Get_Status_Flag(void) { return BL_RD_REG(HBN_BASE, HBN_RSV0); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set HBN status flag\r\n                                                                                *\r\n                                                                                * @param  flag: Status Flag\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Set_Status_Flag(uint32_t flag) {\r\n  BL_WR_REG(HBN_BASE, HBN_RSV0, flag);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get HBN wakeup address\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return HBN wakeup address\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t HBN_Get_Wakeup_Addr(void) { return BL_RD_REG(HBN_BASE, HBN_RSV1); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set HBN wakeup address\r\n                                                                                *\r\n                                                                                * @param  addr: HBN wakeup address\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Set_Wakeup_Addr(uint32_t addr) {\r\n  BL_WR_REG(HBN_BASE, HBN_RSV1, addr);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN clear RTC timer counter\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Clear_RTC_Counter(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\r\n  /* Clear RTC control bit0 */\r\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal & 0xfffffffe);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN clear RTC timer counter\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Enable_RTC_Counter(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\r\n  /* Set RTC control bit0 */\r\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal | 0x01);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN set RTC timer configuration\r\n                                                                                *\r\n                                                                                * @param  delay: RTC interrupt delay 32 clocks\r\n                                                                                * @param  compValLow: RTC interrupt commpare value low 32 bits\r\n                                                                                * @param  compValHigh: RTC interrupt commpare value high 32 bits\r\n                                                                                * @param  compMode: RTC interrupt commpare\r\n                                                                                *                   mode:HBN_RTC_COMP_BIT0_39,HBN_RTC_COMP_BIT0_23,HBN_RTC_COMP_BIT13_39\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Set_RTC_Timer(HBN_RTC_INT_Delay_Type delay, uint32_t compValLow, uint32_t compValHigh, uint8_t compMode) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_HBN_RTC_INT_DELAY_TYPE(delay));\r\n\r\n  BL_WR_REG(HBN_BASE, HBN_TIME_L, compValLow);\r\n  BL_WR_REG(HBN_BASE, HBN_TIME_H, compValHigh & 0xff);\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\r\n  /* Set interrupt delay option */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_RTC_DLY_OPTION, delay);\r\n  /* Set RTC compare mode */\r\n  tmpVal |= (compMode << 1);\r\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN get RTC async timer count value\r\n                                                                                *\r\n                                                                                * @param  valLow: RTC count value pointer for low 32 bits\r\n                                                                                * @param  valHigh: RTC count value pointer for high 8 bits\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic BL_Err_Type HBN_Get_RTC_Timer_Async_Val(uint32_t *valLow, uint32_t *valHigh) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Tigger RTC val read */\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_RTC_TIME_H);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_RTC_TIME_LATCH);\r\n  BL_WR_REG(HBN_BASE, HBN_RTC_TIME_H, tmpVal);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_RTC_TIME_LATCH);\r\n  BL_WR_REG(HBN_BASE, HBN_RTC_TIME_H, tmpVal);\r\n\r\n  /* Read RTC val */\r\n  *valLow  = BL_RD_REG(HBN_BASE, HBN_RTC_TIME_L);\r\n  *valHigh = (BL_RD_REG(HBN_BASE, HBN_RTC_TIME_H) & 0xff);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN get RTC timer count value\r\n                                                                                *\r\n                                                                                * @param  valLow: RTC count value pointer for low 32 bits\r\n                                                                                * @param  valHigh: RTC count value pointer for high 8 bits\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Get_RTC_Timer_Val(uint32_t *valLow, uint32_t *valHigh) {\r\n  uint32_t tmpValLow, tmpValHigh, tmpValLow1, tmpValHigh1;\r\n  uint64_t val, val1;\r\n\r\n  do {\r\n    HBN_Get_RTC_Timer_Async_Val(&tmpValLow, &tmpValHigh);\r\n    val = ((uint64_t)tmpValHigh << 32) | ((uint64_t)tmpValLow);\r\n    HBN_Get_RTC_Timer_Async_Val(&tmpValLow1, &tmpValHigh1);\r\n    val1 = ((uint64_t)tmpValHigh1 << 32) | ((uint64_t)tmpValLow1);\r\n  } while (val1 < val);\r\n\r\n  *valLow  = tmpValLow1;\r\n  *valHigh = tmpValHigh1;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN clear RTC timer interrupt,this function must be called to clear delayed rtc IRQ\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Clear_RTC_INT(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\r\n  /* Clear RTC commpare:bit1-3 for clearing Delayed RTC IRQ */\r\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal & 0xfffffff1);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN enable GPIO interrupt\r\n                                                                                *\r\n                                                                                * @param  gpioIntTrigType: HBN GPIO interrupt trigger type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_GPIO_INT_Enable(HBN_GPIO_INT_Trigger_Type gpioIntTrigType) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_HBN_GPIO_INT_TRIGGER_TYPE(gpioIntTrigType));\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_PIN_WAKEUP_MODE, gpioIntTrigType);\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN disable GPIO interrupt\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_GPIO_INT_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_PIN_WAKEUP_MASK, 0);\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN get interrupt status\r\n                                                                                *\r\n                                                                                * @param  irqType: HBN interrupt type\r\n                                                                                *\r\n                                                                                * @return SET or RESET\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type HBN_Get_INT_State(HBN_INT_Type irqType) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_IRQ_STAT);\r\n\r\n  if (tmpVal & (1 << irqType)) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN get pin wakeup mode value\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return HBN pin wakeup mode value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint8_t HBN_Get_Pin_Wakeup_Mode(void) { return BL_GET_REG_BITS_VAL(BL_RD_REG(HBN_BASE, HBN_IRQ_MODE), HBN_PIN_WAKEUP_MODE); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN clear interrupt status\r\n                                                                                *\r\n                                                                                * @param  irqType: HBN interrupt type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Clear_IRQ(HBN_INT_Type irqType) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_HBN_INT_TYPE(irqType));\r\n\r\n  /* set clear bit */\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_IRQ_CLR);\r\n  tmpVal |= (1 << irqType);\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_CLR, tmpVal);\r\n\r\n  /* unset clear bit */\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_IRQ_CLR);\r\n  tmpVal &= (~(1 << irqType));\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_CLR, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN hardware pullup or pulldown configuration\r\n                                                                                *\r\n                                                                                * @param  enable: ENABLE or DISABLE\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION HBN_Hw_Pu_Pd_Cfg(uint8_t enable) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, HBN_REG_EN_HW_PU_PD);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_REG_EN_HW_PU_PD);\r\n  }\r\n\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN Config AON pad input and SMT\r\n                                                                                *\r\n                                                                                * @param  padCfg: AON pad config\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Aon_Pad_IeSmt_Cfg(uint8_t padCfg) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_REG_AON_PAD_IE_SMT, padCfg);\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN wakeup pin mask configuration\r\n                                                                                *\r\n                                                                                * @param  maskVal: mask value\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION HBN_Pin_WakeUp_Mask(uint8_t maskVal) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_PIN_WAKEUP_MASK, maskVal);\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN enable ACOMP0 interrupt\r\n                                                                                *\r\n                                                                                * @param  edge: HBN acomp interrupt edge type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Enable_AComp0_IRQ(HBN_ACOMP_INT_EDGE_Type edge) {\r\n  uint32_t tmpVal;\r\n  uint32_t tmpVal2;\r\n\r\n  CHECK_PARAM(IS_HBN_ACOMP_INT_EDGE_TYPE(edge));\r\n\r\n  tmpVal  = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n  tmpVal2 = BL_GET_REG_BITS_VAL(tmpVal, HBN_IRQ_ACOMP0_EN);\r\n  tmpVal2 = tmpVal2 | (1 << edge);\r\n  tmpVal  = BL_SET_REG_BITS_VAL(tmpVal, HBN_IRQ_ACOMP0_EN, tmpVal2);\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN disable ACOMP0 interrupt\r\n                                                                                *\r\n                                                                                * @param  edge: HBN acomp interrupt edge type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Disable_AComp0_IRQ(HBN_ACOMP_INT_EDGE_Type edge) {\r\n  uint32_t tmpVal;\r\n  uint32_t tmpVal2;\r\n\r\n  CHECK_PARAM(IS_HBN_ACOMP_INT_EDGE_TYPE(edge));\r\n\r\n  tmpVal  = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n  tmpVal2 = BL_GET_REG_BITS_VAL(tmpVal, HBN_IRQ_ACOMP0_EN);\r\n  tmpVal2 = tmpVal2 & (~(1 << edge));\r\n  tmpVal  = BL_SET_REG_BITS_VAL(tmpVal, HBN_IRQ_ACOMP0_EN, tmpVal2);\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN enable ACOMP1 interrupt\r\n                                                                                *\r\n                                                                                * @param  edge: HBN acomp interrupt edge type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Enable_AComp1_IRQ(HBN_ACOMP_INT_EDGE_Type edge) {\r\n  uint32_t tmpVal;\r\n  uint32_t tmpVal2;\r\n\r\n  CHECK_PARAM(IS_HBN_ACOMP_INT_EDGE_TYPE(edge));\r\n\r\n  tmpVal  = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n  tmpVal2 = BL_GET_REG_BITS_VAL(tmpVal, HBN_IRQ_ACOMP1_EN);\r\n  tmpVal2 = tmpVal2 | (1 << edge);\r\n  tmpVal  = BL_SET_REG_BITS_VAL(tmpVal, HBN_IRQ_ACOMP1_EN, tmpVal2);\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN disable ACOMP1 interrupt\r\n                                                                                *\r\n                                                                                * @param  edge: HBN acomp interrupt edge type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Disable_AComp1_IRQ(HBN_ACOMP_INT_EDGE_Type edge) {\r\n  uint32_t tmpVal;\r\n  uint32_t tmpVal2;\r\n\r\n  CHECK_PARAM(IS_HBN_ACOMP_INT_EDGE_TYPE(edge));\r\n\r\n  tmpVal  = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n  tmpVal2 = BL_GET_REG_BITS_VAL(tmpVal, HBN_IRQ_ACOMP1_EN);\r\n  tmpVal2 = tmpVal2 & (~(1 << edge));\r\n  tmpVal  = BL_SET_REG_BITS_VAL(tmpVal, HBN_IRQ_ACOMP1_EN, tmpVal2);\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN enable BOR interrupt\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Enable_BOR_IRQ(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_IRQ_BOR_EN);\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN disable BOR interrupt\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Disable_BOR_IRQ(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_IRQ_BOR_EN);\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get HBN reset event status\r\n                                                                                *\r\n                                                                                * @param  event: HBN reset event type\r\n                                                                                *\r\n                                                                                * @return SET or RESET\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type HBN_Get_Reset_Event(HBN_RST_EVENT_Type event) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_GET_REG_BITS_VAL(tmpVal, HBN_RESET_EVENT);\r\n\r\n  return (tmpVal & (1 << event)) ? SET : RESET;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  clear HBN reset event status\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Clear_Reset_Event(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_CLEAR_RESET_EVENT);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_CLEAR_RESET_EVENT);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_CLEAR_RESET_EVENT);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN out0 install interrupt callback\r\n                                                                                *\r\n                                                                                * @param  intType: HBN out0 interrupt type\r\n                                                                                * @param  cbFun: HBN out0 interrupt callback\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Out0_Callback_Install(HBN_OUT0_INT_Type intType, intCallback_Type *cbFun) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_HBN_OUT0_INT_TYPE(intType));\r\n\r\n  hbnInt0CbfArra[intType] = cbFun;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN out1 install interrupt callback\r\n                                                                                *\r\n                                                                                * @param  intType: HBN out1 interrupt type\r\n                                                                                * @param  cbFun: HBN out1 interrupt callback\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Out1_Callback_Install(HBN_OUT1_INT_Type intType, intCallback_Type *cbFun) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_HBN_OUT1_INT_TYPE(intType));\r\n\r\n  hbnInt1CbfArra[intType] = cbFun;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN GPIO debug pull config\r\n                                                                                *\r\n                                                                                * @param  pupdEn: Enable or disable GPIO pull down and pull up\r\n                                                                                * @param  dlyEn: Enable or disable GPIO wakeup delay function\r\n                                                                                * @param  dlySec: GPIO wakeup delay sec 1 to 7\r\n                                                                                * @param  gpioIrq: HBN GPIO num\r\n                                                                                * @param  gpioMask: HBN GPIO MASK or UNMASK\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION HBN_GPIO_Dbg_Pull_Cfg(BL_Fun_Type pupdEn, BL_Fun_Type dlyEn, uint8_t dlySec, HBN_INT_Type gpioIrq, BL_Mask_Type gpioMask) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(((dlySec >= 1) && (dlySec <= 7)));\r\n  CHECK_PARAM((gpioIrq >= HBN_INT_GPIO9) && (gpioIrq <= HBN_INT_GPIO13));\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_PIN_WAKEUP_EN, dlyEn);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_PIN_WAKEUP_SEL, dlySec);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_REG_EN_HW_PU_PD, pupdEn);\r\n\r\n  if (gpioMask != UNMASK) {\r\n    tmpVal = tmpVal | (1 << (gpioIrq + 8));\r\n  } else {\r\n    tmpVal = tmpVal & ~(1 << (gpioIrq + 8));\r\n  }\r\n\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set pad 23-28 pull none\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION HBN_Set_Pad_23_28_Pullnone(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_MISC);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_FLASH_PULLDOWN_AON, 0x00);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_FLASH_PULLUP_AON, 0x00);\r\n  BL_WR_REG(HBN_BASE, HBN_MISC, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set pad 23-28 pull up\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION HBN_Set_Pad_23_28_Pullup(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /********************************************/\r\n  /* GPIO28 is bootpin, so leave it pull none */\r\n  /********************************************/\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_MISC);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_FLASH_PULLDOWN_AON, 0x00);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_FLASH_PULLUP_AON, 0x1F);\r\n  BL_WR_REG(HBN_BASE, HBN_MISC, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set pad 23-28 pull down\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION HBN_Set_Pad_23_28_Pulldown(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /********************************************/\r\n  /* GPIO28 is bootpin, so leave it pull none */\r\n  /********************************************/\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_MISC);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_FLASH_PULLDOWN_AON, 0x1F);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_FLASH_PULLUP_AON, 0x00);\r\n  BL_WR_REG(HBN_BASE, HBN_MISC, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set pad 23-28 active ie\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION HBN_Set_Pad_23_28_ActiveIE(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /********************************************/\r\n  /* GPIO28 is bootpin, so leave it pull none */\r\n  /********************************************/\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_MISC);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_FLASH_PULLDOWN_AON, 0x1F);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_FLASH_PULLUP_AON, 0x1F);\r\n  BL_WR_REG(HBN_BASE, HBN_MISC, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set BOR config\r\n                                                                                *\r\n                                                                                * @param  cfg: Enable or disable\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Set_BOR_Cfg(HBN_BOR_CFG_Type *cfg) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (cfg->enableBorInt) {\r\n    HBN_Enable_BOR_IRQ();\r\n  } else {\r\n    HBN_Disable_BOR_IRQ();\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_MISC);\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_BOR_VTH, cfg->borThreshold);\r\n\r\n  if (cfg->enablePorInBor) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, HBN_BOR_SEL);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_BOR_SEL);\r\n  }\r\n\r\n  if (cfg->enableBor) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PU_BOR);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PU_BOR);\r\n  }\r\n\r\n  BL_WR_REG(HBN_BASE, HBN_MISC, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN OUT0 interrupt handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid HBN_OUT0_IRQHandler(void) {\r\n  if (SET == HBN_Get_INT_State(HBN_INT_GPIO9)) {\r\n    HBN_Clear_IRQ(HBN_INT_GPIO9);\r\n\r\n    if (hbnInt0CbfArra[HBN_OUT0_INT_GPIO9] != NULL) {\r\n      hbnInt0CbfArra[HBN_OUT0_INT_GPIO9]();\r\n    }\r\n  }\r\n\r\n  if (SET == HBN_Get_INT_State(HBN_INT_GPIO10)) {\r\n    HBN_Clear_IRQ(HBN_INT_GPIO10);\r\n\r\n    if (hbnInt0CbfArra[HBN_OUT0_INT_GPIO10] != NULL) {\r\n      hbnInt0CbfArra[HBN_OUT0_INT_GPIO10]();\r\n    }\r\n  }\r\n\r\n  if (SET == HBN_Get_INT_State(HBN_INT_GPIO11)) {\r\n    HBN_Clear_IRQ(HBN_INT_GPIO11);\r\n\r\n    if (hbnInt0CbfArra[HBN_OUT0_INT_GPIO11] != NULL) {\r\n      hbnInt0CbfArra[HBN_OUT0_INT_GPIO11]();\r\n    }\r\n  }\r\n\r\n  if (SET == HBN_Get_INT_State(HBN_INT_GPIO12)) {\r\n    HBN_Clear_IRQ(HBN_INT_GPIO12);\r\n\r\n    if (hbnInt0CbfArra[HBN_OUT0_INT_GPIO12] != NULL) {\r\n      hbnInt0CbfArra[HBN_OUT0_INT_GPIO12]();\r\n    }\r\n  }\r\n\r\n  if (SET == HBN_Get_INT_State(HBN_INT_GPIO13)) {\r\n    HBN_Clear_IRQ(HBN_INT_GPIO13);\r\n\r\n    if (hbnInt0CbfArra[HBN_OUT0_INT_GPIO13] != NULL) {\r\n      hbnInt0CbfArra[HBN_OUT0_INT_GPIO13]();\r\n    }\r\n  }\r\n\r\n  if (SET == HBN_Get_INT_State(HBN_INT_RTC)) {\r\n    HBN_Clear_IRQ(HBN_INT_RTC);\r\n    HBN_Clear_RTC_INT();\r\n\r\n    if (hbnInt0CbfArra[HBN_OUT0_INT_RTC] != NULL) {\r\n      hbnInt0CbfArra[HBN_OUT0_INT_RTC]();\r\n    }\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN OUT1 interrupt handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid HBN_OUT1_IRQHandler(void) {\r\n  /* PIR */\r\n  if (SET == HBN_Get_INT_State(HBN_INT_PIR)) {\r\n    HBN_Clear_IRQ(HBN_INT_PIR);\r\n\r\n    if (hbnInt1CbfArra[HBN_OUT1_INT_PIR] != NULL) {\r\n      hbnInt1CbfArra[HBN_OUT1_INT_PIR]();\r\n    }\r\n  }\r\n\r\n  /* BOR */\r\n  if (SET == HBN_Get_INT_State(HBN_INT_BOR)) {\r\n    HBN_Clear_IRQ(HBN_INT_BOR);\r\n\r\n    if (hbnInt1CbfArra[HBN_OUT1_INT_BOR] != NULL) {\r\n      hbnInt1CbfArra[HBN_OUT1_INT_BOR]();\r\n    }\r\n  }\r\n\r\n  /* ACOMP0 */\r\n  if (SET == HBN_Get_INT_State(HBN_INT_ACOMP0)) {\r\n    HBN_Clear_IRQ(HBN_INT_ACOMP0);\r\n\r\n    if (hbnInt1CbfArra[HBN_OUT1_INT_ACOMP0] != NULL) {\r\n      hbnInt1CbfArra[HBN_OUT1_INT_ACOMP0]();\r\n    }\r\n  }\r\n\r\n  /* ACOMP1 */\r\n  if (SET == HBN_Get_INT_State(HBN_INT_ACOMP1)) {\r\n    HBN_Clear_IRQ(HBN_INT_ACOMP1);\r\n\r\n    if (hbnInt1CbfArra[HBN_OUT1_INT_ACOMP1] != NULL) {\r\n      hbnInt1CbfArra[HBN_OUT1_INT_ACOMP1]();\r\n    }\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable HBN mode\r\n                                                                                *\r\n                                                                                * @param  aGPIOIeCfg: AON GPIO IE config,Bit0->GPIO18. Bit(s) of Wakeup GPIO(s) must not be set to\r\n                                                                                *                     0(s),say when use GPIO7 as wake up pin,aGPIOIeCfg should be 0x01.\r\n                                                                                * @param  ldoLevel: LDO volatge level\r\n                                                                                * @param  hbnLevel: HBN work level\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid ATTR_TCM_SECTION HBN_Enable(uint8_t aGPIOIeCfg, HBN_LDO_LEVEL_Type ldoLevel, HBN_LEVEL_Type hbnLevel) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_HBN_LDO_LEVEL_TYPE(ldoLevel));\r\n  CHECK_PARAM(IS_HBN_LEVEL_TYPE(hbnLevel));\r\n\r\n  /* Setting from guide */\r\n  /* RAM Retion */\r\n  BL_WR_REG(HBN_BASE, HBN_SRAM, 0x24);\r\n  /* AON GPIO IE */\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_REG_AON_PAD_IE_SMT, aGPIOIeCfg);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_REG_EN_HW_PU_PD);\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n  ///* Power off 1.8V */\r\n  // tmpVal=BL_RD_REG(AON_BASE,AON_PMIP);\r\n  // tmpVal=BL_CLR_REG_BIT(tmpVal,AON_PU_TOPLDO11_SOC);\r\n  // tmpVal=BL_CLR_REG_BIT(tmpVal,AON_PU_TOPLDO18_RF);\r\n  // tmpVal=BL_CLR_REG_BIT(tmpVal,AON_PU_TOPLDO18_IO);\r\n  ///* SOC11 enum is not the same as VDD11*/\r\n  // tmpVal=BL_SET_REG_BITS_VAL(tmpVal,AON_TOPLDO11_SOC_VOUT_SEL,ldoLevel-1);\r\n  // BL_WR_REG(AON_BASE,AON_PMIP,tmpVal);\r\n  //\r\n  ///* Set RT voltage */\r\n  // tmpVal=BL_RD_REG(AON_BASE,AON);\r\n  // tmpVal=BL_CLR_REG_BIT(tmpVal,AON_TOPLDO18_IO_SW3);\r\n  // tmpVal=BL_CLR_REG_BIT(tmpVal,AON_TOPLDO18_IO_SW2);\r\n  // tmpVal=BL_CLR_REG_BIT(tmpVal,AON_TOPLDO18_IO_SW1);\r\n  // tmpVal=BL_CLR_REG_BIT(tmpVal,AON_TOPLDO18_IO_BYPASS);\r\n  // tmpVal=BL_CLR_REG_BIT(tmpVal,AON_PU_LDO18_AON);\r\n  ///* RT11 enum is not the same as VDD11*/\r\n  // tmpVal=BL_SET_REG_BITS_VAL(tmpVal,AON_TOPLDO11_RT_VOUT_SEL,ldoLevel-1);\r\n  // tmpVal=BL_SET_REG_BITS_VAL(tmpVal,AON_VDD11_SEL,ldoLevel);\r\n  // BL_WR_REG(AON_BASE,AON,tmpVal);\r\n\r\n  /* Select RC32M */\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_GLB);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_ROOT_CLK_SEL, 0);\r\n  BL_WR_REG(HBN_BASE, HBN_GLB, tmpVal);\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n\r\n  /* Set HBN flag */\r\n  BL_WR_REG(HBN_BASE, HBN_RSV0, HBN_STATUS_ENTER_FLAG);\r\n\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\r\n\r\n  /* Set HBN level, (HBN_PWRDN_HBN_RAM not use) */\r\n  switch (hbnLevel) {\r\n  case HBN_LEVEL_0:\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PWRDN_HBN_CORE);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PWRDN_HBN_RTC);\r\n    break;\r\n\r\n  case HBN_LEVEL_1:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PWRDN_HBN_CORE);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PWRDN_HBN_RTC);\r\n    break;\r\n\r\n  case HBN_LEVEL_2:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PWRDN_HBN_CORE);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PWRDN_HBN_RTC);\r\n    break;\r\n\r\n  case HBN_LEVEL_3:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PWRDN_HBN_CORE);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, HBN_PWRDN_HBN_RTC);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Set power on option:0 for por reset twice for robust 1 for reset only once*/\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_PWR_ON_OPTION);\r\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal);\r\n\r\n  /* Enable HBN mode */\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_CTL);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, HBN_MODE);\r\n  BL_WR_REG(HBN_BASE, HBN_CTL, tmpVal);\r\n\r\n  while (1) {\r\n    BL702_Delay_MS(1000);\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN out0 IRQHandler install\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Out0_IRQHandler_Install(void) {\r\n  Interrupt_Handler_Register(HBN_OUT0_IRQn, HBN_OUT0_IRQHandler);\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  HBN out1 IRQHandler install\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type HBN_Out1_IRQHandler_Install(void) {\r\n  Interrupt_Handler_Register(HBN_OUT1_IRQn, HBN_OUT1_IRQHandler);\r\n  return SUCCESS;\r\n}\r\n\r\n/*@} end of group HBN_Public_Functions */\r\n\r\n/*@} end of group HBN */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_i2c.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_i2c.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_i2c.h\"\r\n#include \"bflb_platform.h\"\r\n#include \"bl702_glb.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  I2C\r\n *  @{\r\n */\r\n\r\n/** @defgroup  I2C_Private_Macros\r\n *  @{\r\n */\r\n#define I2C_FIFO_STATUS_TIMEOUT (160 * 1000 * 2)\r\n#define PUT_UINT32_LE(n, b, i)                                                                                                                                                                         \\\r\n  {                                                                                                                                                                                                    \\\r\n    (b)[(i)]     = (uint8_t)((n));                                                                                                                                                                     \\\r\n    (b)[(i) + 1] = (uint8_t)((n) >> 8);                                                                                                                                                                \\\r\n    (b)[(i) + 2] = (uint8_t)((n) >> 16);                                                                                                                                                               \\\r\n    (b)[(i) + 3] = (uint8_t)((n) >> 24);                                                                                                                                                               \\\r\n  }\r\n\r\n/*@} end of group I2C_Private_Macros */\r\n\r\n/** @defgroup  I2C_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group I2C_Private_Types */\r\n\r\n/** @defgroup  I2C_Private_Variables\r\n *  @{\r\n */\r\nintCallback_Type *i2cIntCbfArra[I2C_ID_MAX][I2C_INT_ALL] = {{NULL}};\r\n\r\n/*@} end of group I2C_Private_Variables */\r\n\r\n/** @defgroup  I2C_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group I2C_Global_Variables */\r\n\r\n/** @defgroup  I2C_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group I2C_Private_Fun_Declaration */\r\n\r\n/** @defgroup  I2C_Private_Functions\r\n *  @{\r\n */\r\n\r\n/**\r\n * @brief  I2C interrupt handler\r\n *\r\n * @param  i2cNo: I2C ID type\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nstatic void I2C_IntHandler(I2C_ID_Type i2cNo) {\r\n  uint32_t tmpVal;\r\n  uint32_t I2Cx = I2C_BASE;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_INT_STS);\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, I2C_END_INT)) {\r\n    if (i2cIntCbfArra[i2cNo][I2C_TRANS_END_INT] != NULL) {\r\n      /* Call the callback function */\r\n      i2cIntCbfArra[i2cNo][I2C_TRANS_END_INT]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, I2C_TXF_INT)) {\r\n    if (i2cIntCbfArra[i2cNo][I2C_TX_FIFO_READY_INT] != NULL) {\r\n      /* Call the callback function */\r\n      i2cIntCbfArra[i2cNo][I2C_TX_FIFO_READY_INT]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, I2C_RXF_INT)) {\r\n    if (i2cIntCbfArra[i2cNo][I2C_RX_FIFO_READY_INT] != NULL) {\r\n      /* Call the callback function */\r\n      i2cIntCbfArra[i2cNo][I2C_RX_FIFO_READY_INT]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, I2C_NAK_INT)) {\r\n    if (i2cIntCbfArra[i2cNo][I2C_NACK_RECV_INT] != NULL) {\r\n      /* Call the callback function */\r\n      i2cIntCbfArra[i2cNo][I2C_NACK_RECV_INT]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, I2C_ARB_INT)) {\r\n    if (i2cIntCbfArra[i2cNo][I2C_ARB_LOST_INT] != NULL) {\r\n      /* Call the callback function */\r\n      i2cIntCbfArra[i2cNo][I2C_ARB_LOST_INT]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, I2C_FER_INT)) {\r\n    if (i2cIntCbfArra[i2cNo][I2C_FIFO_ERR_INT] != NULL) {\r\n      /* Call the callback function */\r\n      i2cIntCbfArra[i2cNo][I2C_FIFO_ERR_INT]();\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/*@} end of group I2C_Private_Functions */\r\n\r\n/** @defgroup  I2C_Public_Functions\r\n *  @{\r\n */\r\n\r\n/**\r\n * @brief  I2C write word data\r\n *\r\n * @param  i2cNo: I2C ID type\r\n * @param  data: Data word\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid I2C_SendWord(I2C_ID_Type i2cNo, uint32_t data) {\r\n  uint32_t I2Cx = I2C_BASE;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n  BL_WR_REG(I2Cx, I2C_FIFO_WDATA, data);\r\n}\r\n\r\n/**\r\n * @brief  I2C read word data\r\n *\r\n * @param  i2cNo: I2C ID type\r\n *\r\n * @return word data\r\n *\r\n *******************************************************************************/\r\nuint32_t I2C_RecieveWord(I2C_ID_Type i2cNo) {\r\n  uint32_t I2Cx = I2C_BASE;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n  return BL_RD_REG(I2Cx, I2C_FIFO_RDATA);\r\n}\r\n\r\n/**\r\n * @brief  I2C enable\r\n *\r\n * @param  i2cNo: I2C ID type\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid I2C_Enable(I2C_ID_Type i2cNo) {\r\n  uint32_t tmpVal;\r\n  uint32_t I2Cx = I2C_BASE;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n\r\n  // Set the M_EN bit\r\n\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_M_EN);\r\n  BL_WR_REG(I2Cx, I2C_CONFIG, tmpVal);\r\n}\r\n\r\nuint8_t I2C_GetTXFIFOAvailable() {\r\n\r\n  volatile uint32_t tmpVal;\r\n  uint32_t          I2Cx = I2C_BASE;\r\n\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_1);\r\n  return tmpVal & 0b11; // Lowest two bits\r\n}\r\n\r\nuint8_t I2C_GetRXFIFOAvailable() {\r\n\r\n  volatile uint32_t tmpVal;\r\n  uint32_t          I2Cx = I2C_BASE;\r\n\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_1);\r\n  return (tmpVal >> 8) & 0b11; // Lowest two bits of byte 2\r\n}\r\n\r\nvoid I2C_DMATxEnable() {\r\n  uint32_t tmpVal;\r\n  uint32_t I2Cx = I2C_BASE;\r\n\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, I2C_DMA_TX_EN);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, I2C_TX_FIFO_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, I2C_RX_FIFO_CLR);\r\n\r\n  // tmpVal = BL_SET_REG_BIT(tmpVal, I2C_DMA_RX_EN);\r\n\r\n  BL_WR_REG(I2Cx, I2C_FIFO_CONFIG_0, tmpVal);\r\n\r\n  // Ensure fifo setpoint is as we expect\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_1);\r\n  tmpVal &= I2C_TX_FIFO_CNT_UMSK;\r\n  tmpVal |= 1;\r\n\r\n  BL_WR_REG(I2Cx, I2C_FIFO_CONFIG_1, tmpVal);\r\n}\r\nvoid I2C_DMATxDisable() {\r\n  uint32_t tmpVal;\r\n  uint32_t I2Cx = I2C_BASE;\r\n\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_0);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_DMA_TX_EN);\r\n  // tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_DMA_RX_EN);\r\n  BL_WR_REG(I2Cx, I2C_FIFO_CONFIG_0, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_1);\r\n  tmpVal &= I2C_TX_FIFO_CNT_UMSK;\r\n  tmpVal |= 1;\r\n\r\n  BL_WR_REG(I2Cx, I2C_FIFO_CONFIG_1, tmpVal);\r\n}\r\n\r\n/**\r\n * @brief  I2C disable\r\n *\r\n * @param  i2cNo: I2C ID type\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid I2C_Disable(I2C_ID_Type i2cNo) {\r\n  uint32_t tmpVal;\r\n  uint32_t I2Cx = I2C_BASE;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_CONFIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_M_EN);\r\n  BL_WR_REG(I2Cx, I2C_CONFIG, tmpVal);\r\n\r\n  /* Clear I2C fifo */\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, I2C_TX_FIFO_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, I2C_RX_FIFO_CLR);\r\n  BL_WR_REG(I2Cx, I2C_FIFO_CONFIG_0, tmpVal);\r\n\r\n  /* Clear I2C interrupt status */\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_INT_STS);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_END_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_NAK_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_ARB_CLR);\r\n  BL_WR_REG(I2Cx, I2C_INT_STS, tmpVal);\r\n}\r\n\r\n/**\r\n * @brief  I2C set global reset function\r\n *\r\n * @param  i2cNo: I2C ID type\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type I2C_Reset(I2C_ID_Type i2cNo) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n\r\n  GLB_AHB_Slave1_Reset(BL_AHB_SLAVE1_I2C);\r\n  return SUCCESS;\r\n}\r\n\r\n/**\r\n * @brief  I2C init function\r\n *\r\n * @param  i2cNo: I2C ID type\r\n * @param  direct: I2C read or write direct\r\n * @param  cfg: I2C transfer config struct\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid I2C_Init(I2C_ID_Type i2cNo, I2C_Direction_Type direct, I2C_Transfer_Cfg *cfg) {\r\n  uint32_t tmpVal;\r\n  uint32_t I2Cx = I2C_BASE;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n\r\n  /* Disable clock gate */\r\n  GLB_AHB_Slave1_Clock_Gate(DISABLE, BL_AHB_SLAVE1_I2C);\r\n\r\n  /* I2C write config */\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_CONFIG);\r\n\r\n  if (direct == I2C_WRITE) {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_PKT_DIR);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_PKT_DIR);\r\n  }\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_SLV_ADDR, cfg->slaveAddr);\r\n\r\n  if (cfg->subAddrSize > 0) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_SUB_ADDR_EN);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_SUB_ADDR_BC, cfg->subAddrSize - 1);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_SUB_ADDR_EN);\r\n  }\r\n\r\n  // Packet length <=256 bytes per transaction\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_PKT_LEN, cfg->dataSize - 1);\r\n  BL_WR_REG(I2Cx, I2C_CONFIG, tmpVal);\r\n\r\n  /* Set sub address */\r\n  BL_WR_REG(I2Cx, I2C_SUB_ADDR, cfg->subAddr);\r\n\r\n  Interrupt_Handler_Register(I2C_IRQn, I2C_IRQHandler);\r\n}\r\n\r\n/**\r\n * @brief  Set de-glitch function cycle count value\r\n *\r\n * @param  i2cNo: I2C ID type\r\n * @param  cnt: De-glitch function cycle count\r\n *\r\n * @return SUCCESS\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type I2C_SetDeglitchCount(I2C_ID_Type i2cNo, uint8_t cnt) {\r\n  uint32_t tmpVal;\r\n  uint32_t I2Cx = I2C_BASE;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_CONFIG);\r\n\r\n  if (cnt > 0) {\r\n    /* enable de-glitch function */\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_DEG_EN);\r\n  } else if (cnt == 0) {\r\n    /* disable de-glitch function */\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_DEG_EN);\r\n  } else {\r\n    return ERROR;\r\n  }\r\n\r\n  /* Set count value */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_DEG_CNT, cnt);\r\n  BL_WR_REG(I2Cx, I2C_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/**\r\n * @brief  Set i2c prd\r\n *\r\n * @param  i2cNo: I2C ID type\r\n * @param  phase: I2C phase value\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid I2C_SetPrd(I2C_ID_Type i2cNo, uint8_t phase) {\r\n  uint32_t tmpVal;\r\n  uint32_t I2Cx = I2C_BASE;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n\r\n  // phase_cycles = (32000000 / phase / 4) - 1;\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_PRD_START);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_PRD_S_PH_0, phase);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_PRD_S_PH_1, phase);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_PRD_S_PH_2, phase);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_PRD_S_PH_3, phase);\r\n  BL_WR_REG(I2Cx, I2C_PRD_START, tmpVal);\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_PRD_STOP);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_PRD_P_PH_0, phase);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_PRD_P_PH_1, phase);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_PRD_P_PH_2, phase);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_PRD_P_PH_3, phase);\r\n  BL_WR_REG(I2Cx, I2C_PRD_STOP, tmpVal);\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_PRD_DATA);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_PRD_D_PH_0, phase);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_PRD_D_PH_1, phase);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_PRD_D_PH_2, phase);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_PRD_D_PH_3, phase);\r\n  BL_WR_REG(I2Cx, I2C_PRD_DATA, tmpVal);\r\n}\r\n\r\n/**\r\n * @brief  I2C set scl output clock\r\n *\r\n * @param  i2cNo: I2C ID type\r\n * @param  clk: Clock set\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid I2C_ClockSet(I2C_ID_Type i2cNo, uint32_t clk) {\r\n  uint8_t bclkDiv = 0;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n\r\n  bclkDiv = GLB_Get_BCLK_Div();\r\n\r\n  if (clk >= 100000) {\r\n    GLB_Set_I2C_CLK(1, 0);\r\n    I2C_SetPrd(i2cNo, (SystemCoreClockGet() / (bclkDiv + 1)) / (clk * 4) - 1);\r\n  } else if (clk >= 8000) {\r\n    GLB_Set_I2C_CLK(1, 9);\r\n    I2C_SetPrd(i2cNo, ((SystemCoreClockGet() / (bclkDiv + 1)) / 10) / (clk * 4) - 1);\r\n  } else if (clk >= 800) {\r\n    GLB_Set_I2C_CLK(1, 99);\r\n    I2C_SetPrd(i2cNo, ((SystemCoreClockGet() / (bclkDiv + 1)) / 100) / (clk * 4) - 1);\r\n  } else {\r\n    GLB_Set_I2C_CLK(1, 255);\r\n    I2C_SetPrd(i2cNo, ((SystemCoreClockGet() / (bclkDiv + 1)) / 256) / (clk * 4) - 1);\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  I2C set scl sync\r\n *\r\n * @param  i2cNo: I2C ID type\r\n * @param  enable: Enable or disable I2C scl sync\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid I2C_SetSclSync(I2C_ID_Type i2cNo, uint8_t enable) {\r\n  uint32_t tmpVal;\r\n  uint32_t I2Cx = I2C_BASE;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_CONFIG);\r\n\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_SCL_SYNC_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_SCL_SYNC_EN);\r\n  }\r\n\r\n  BL_WR_REG(I2Cx, I2C_CONFIG, tmpVal);\r\n}\r\n\r\n/**\r\n * @brief  Get i2c busy state\r\n *\r\n * @param  i2cNo: I2C ID type\r\n *\r\n * @return RESET or SET\r\n *\r\n *******************************************************************************/\r\nBL_Sts_Type I2C_IsBusy(I2C_ID_Type i2cNo) {\r\n  uint32_t tmpVal;\r\n  uint32_t I2Cx = I2C_BASE;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_BUS_BUSY);\r\n  return ((BL_IS_REG_BIT_SET(tmpVal, I2C_STS_I2C_BUS_BUSY)) ? SET : RESET);\r\n}\r\n\r\n/**\r\n * @brief  Get i2c transfer end state\r\n *\r\n * @param  i2cNo: I2C ID type\r\n *\r\n * @return RESET or SET\r\n *\r\n *******************************************************************************/\r\nBL_Sts_Type I2C_TransferEndStatus(I2C_ID_Type i2cNo) {\r\n  uint32_t tmpVal;\r\n  uint32_t I2Cx = I2C_BASE;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_INT_STS);\r\n  return ((BL_IS_REG_BIT_SET(tmpVal, I2C_END_INT)) ? SET : RESET);\r\n}\r\n\r\n/**\r\n * @brief  I2C master write block data\r\n *\r\n * @param  i2cNo: I2C ID type\r\n * @param  cfg: I2C transfer config struct\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type I2C_MasterSendBlocking(I2C_ID_Type i2cNo, I2C_Transfer_Cfg *cfg) {\r\n  uint8_t  i;\r\n  uint32_t timeOut = 0;\r\n  uint32_t temp    = 0;\r\n  uint32_t I2Cx    = I2C_BASE;\r\n  I2C_IntMask(I2C0_ID, I2C_TRANS_END_INT, UNMASK); // This function needs to be able to use the irq status bits\r\n  I2C_IntMask(I2C0_ID, I2C_NACK_RECV_INT, UNMASK); // This function needs to be able to use the irq status bits\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n\r\n  I2C_Disable(i2cNo);\r\n  I2C_Init(i2cNo, I2C_WRITE, cfg);\r\n  I2C_Enable(i2cNo);\r\n\r\n  /* Set I2C write data */\r\n  for (i = 0; i < cfg->dataSize; i++) {\r\n    temp += (cfg->data[i] << ((i % 4) * 8));\r\n\r\n    if ((i + 1) % 4 == 0) {\r\n      timeOut = I2C_FIFO_STATUS_TIMEOUT;\r\n\r\n      while (BL_GET_REG_BITS_VAL(BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_1), I2C_TX_FIFO_CNT) == 0) {\r\n        timeOut--;\r\n\r\n        if (timeOut == 0) {\r\n          I2C_Disable(i2cNo);\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n\r\n      BL_WR_REG(I2Cx, I2C_FIFO_WDATA, temp);\r\n      temp = 0;\r\n    }\r\n  }\r\n\r\n  if ((cfg->dataSize % 4) != 0) {\r\n    timeOut = I2C_FIFO_STATUS_TIMEOUT;\r\n\r\n    while (BL_GET_REG_BITS_VAL(BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_1), I2C_TX_FIFO_CNT) == 0) {\r\n      timeOut--;\r\n\r\n      if (timeOut == 0) {\r\n        I2C_Disable(i2cNo);\r\n        return TIMEOUT;\r\n      }\r\n    }\r\n\r\n    BL_WR_REG(I2Cx, I2C_FIFO_WDATA, temp);\r\n  }\r\n\r\n  timeOut = I2C_FIFO_STATUS_TIMEOUT;\r\n\r\n  while (I2C_IsBusy(i2cNo) || !I2C_TransferEndStatus(i2cNo)) {\r\n    timeOut--;\r\n\r\n    if (timeOut == 0) {\r\n      I2C_Disable(i2cNo);\r\n      return TIMEOUT;\r\n    }\r\n  }\r\n\r\n  I2C_Disable(i2cNo);\r\n  return SUCCESS;\r\n}\r\n\r\n/**\r\n * @brief  I2C master read block data\r\n *\r\n * @param  i2cNo: I2C ID type\r\n * @param  cfg: I2C transfer config struct\r\n *\r\n * @return SUCCESS or ERROR\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type I2C_MasterReceiveBlocking(I2C_ID_Type i2cNo, I2C_Transfer_Cfg *cfg) {\r\n  uint8_t  i       = 0;\r\n  uint32_t timeOut = 0;\r\n  uint32_t temp    = 0;\r\n  uint32_t I2Cx    = I2C_BASE;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n\r\n  I2C_Disable(i2cNo);\r\n  I2C_Init(i2cNo, I2C_READ, cfg);\r\n  I2C_Enable(i2cNo);\r\n  I2C_IntMask(I2C0_ID, I2C_TRANS_END_INT, UNMASK); // This function needs to be able to use the irq status bits\r\n  I2C_IntMask(I2C0_ID, I2C_NACK_RECV_INT, UNMASK); // This function needs to be able to use the irq status bits\r\n\r\n  timeOut = I2C_FIFO_STATUS_TIMEOUT;\r\n  if (cfg->dataSize == 0 && cfg->subAddrSize == 0) {\r\n    while (BL_RD_REG(I2C_BASE, I2C_BUS_BUSY)) {\r\n      timeOut--;\r\n\r\n      if (timeOut == 0) {\r\n        I2C_Disable(i2cNo);\r\n        return TIMEOUT;\r\n      }\r\n    }\r\n\r\n    temp = BL_RD_REG(I2C_BASE, I2C_INT_STS); // TODO this sucks as a workaround\r\n    if (BL_IS_REG_BIT_SET(temp, I2C_NAK_INT)) {\r\n      temp = BL_RD_REG(I2C_BASE, I2C_BUS_BUSY);\r\n      I2C_Disable(i2cNo);\r\n      return TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Read I2C data */\r\n  while (cfg->dataSize - i >= 4) {\r\n    timeOut = I2C_FIFO_STATUS_TIMEOUT;\r\n\r\n    while (BL_GET_REG_BITS_VAL(BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_1), I2C_RX_FIFO_CNT) == 0) {\r\n      timeOut--;\r\n\r\n      if (timeOut == 0) {\r\n        I2C_Disable(i2cNo);\r\n        return TIMEOUT;\r\n      }\r\n    }\r\n\r\n    temp = BL_RD_REG(I2Cx, I2C_FIFO_RDATA);\r\n    PUT_UINT32_LE(temp, cfg->data, i);\r\n    i += 4;\r\n  }\r\n\r\n  if (i < cfg->dataSize) {\r\n    timeOut = I2C_FIFO_STATUS_TIMEOUT;\r\n\r\n    while (BL_GET_REG_BITS_VAL(BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_1), I2C_RX_FIFO_CNT) == 0) {\r\n      timeOut--;\r\n\r\n      if (timeOut == 0) {\r\n        I2C_Disable(i2cNo);\r\n        return TIMEOUT;\r\n      }\r\n    }\r\n\r\n    temp = BL_RD_REG(I2Cx, I2C_FIFO_RDATA);\r\n\r\n    while (i < cfg->dataSize) {\r\n      cfg->data[i] = (temp & 0xff);\r\n      temp         = (temp >> 8);\r\n      i++;\r\n    }\r\n  }\r\n\r\n  timeOut = I2C_FIFO_STATUS_TIMEOUT;\r\n\r\n  while (I2C_IsBusy(i2cNo) || !I2C_TransferEndStatus(i2cNo)) {\r\n    timeOut--;\r\n\r\n    if (timeOut == 0) {\r\n      I2C_Disable(i2cNo);\r\n      return TIMEOUT;\r\n    }\r\n  }\r\n\r\n  I2C_Disable(i2cNo);\r\n  return SUCCESS;\r\n}\r\n\r\n/**\r\n * @brief  Mask/Unmask the I2C interrupt\r\n *\r\n * @param  i2cNo: I2C ID type\r\n * @param  intType: Specifies the interrupt type\r\n * @param  intMask: Enable/Disable Specified interrupt type\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid I2C_IntMask(I2C_ID_Type i2cNo, I2C_INT_Type intType, BL_Mask_Type intMask) {\r\n  uint32_t tmpVal;\r\n  uint32_t I2Cx = I2C_BASE;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n  CHECK_PARAM(IS_I2C_INT_TYPE(intType));\r\n  CHECK_PARAM(IS_BL_MASK_TYPE(intMask));\r\n\r\n  tmpVal = BL_RD_REG(I2Cx, I2C_INT_STS);\r\n\r\n  switch (intType) {\r\n  case I2C_TRANS_END_INT:\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_END_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_END_MASK);\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_END_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_END_MASK);\r\n    }\r\n\r\n    break;\r\n\r\n  case I2C_TX_FIFO_READY_INT:\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_TXF_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_TXF_MASK);\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_TXF_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_TXF_MASK);\r\n    }\r\n\r\n    break;\r\n\r\n  case I2C_RX_FIFO_READY_INT:\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_RXF_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_RXF_MASK);\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_RXF_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_RXF_MASK);\r\n    }\r\n\r\n    break;\r\n\r\n  case I2C_NACK_RECV_INT:\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_NAK_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_NAK_MASK);\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_NAK_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_NAK_MASK);\r\n    }\r\n\r\n    break;\r\n\r\n  case I2C_ARB_LOST_INT:\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_ARB_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_ARB_MASK);\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_ARB_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_ARB_MASK);\r\n    }\r\n\r\n    break;\r\n\r\n  case I2C_FIFO_ERR_INT:\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_FER_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_FER_MASK);\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_FER_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_FER_MASK);\r\n    }\r\n\r\n    break;\r\n\r\n  case I2C_INT_ALL:\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_END_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_TXF_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_RXF_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_NAK_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_ARB_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_FER_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_END_MASK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_TXF_MASK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_RXF_MASK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_NAK_MASK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_ARB_MASK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_FER_MASK);\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_END_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_TXF_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_RXF_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_NAK_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_ARB_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_FER_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_END_MASK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_TXF_MASK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_RXF_MASK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_NAK_MASK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_ARB_MASK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_FER_MASK);\r\n    }\r\n\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  BL_WR_REG(I2Cx, I2C_INT_STS, tmpVal);\r\n}\r\n\r\n/**\r\n * @brief  Install I2C interrupt callback function\r\n *\r\n * @param  i2cNo: I2C ID type\r\n * @param  intType: Specifies the interrupt type\r\n * @param  cbFun: Pointer to interrupt callback function. The type should be void (*fn)(void)\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid I2C_Int_Callback_Install(I2C_ID_Type i2cNo, I2C_INT_Type intType, intCallback_Type *cbFun) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));\r\n  CHECK_PARAM(IS_I2C_INT_TYPE(intType));\r\n\r\n  i2cIntCbfArra[i2cNo][intType] = cbFun;\r\n}\r\n#endif\r\n\r\n/**\r\n * @brief  I2C IRQ handler\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid I2C_IRQHandler(void) { I2C_IntHandler(I2C0_ID); }\r\n#endif\r\n\r\n/*@} end of group I2C_Public_Functions */\r\n\r\n/*@} end of group I2C */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_i2c_gpio_sim.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_i2c_gpio_sim.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_glb.h\"\r\n#include \"bl702_gpio.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  I2C_GPIO_SIM\r\n *  @{\r\n */\r\n\r\n/** @defgroup  I2C_GPIO_SIM_Private_Macros\r\n *  @{\r\n */\r\n#define SCL_H           GLB_GPIO_Write(sclPin, 1)\r\n#define SCL_L           GLB_GPIO_Write(sclPin, 0)\r\n#define SDA_H           GLB_GPIO_Write(sdaPin, 1)\r\n#define SDA_L           GLB_GPIO_Write(sdaPin, 0)\r\n#define SDA_read        GLB_GPIO_Read(sdaPin)\r\n#define I2C_Delay_US(a) BL702_Delay_US(a)\r\n#define I2C_Delay_Const I2C_Delay_US(2)\r\n\r\n/*@} end of group I2C_GPIO_SIM_Private_Macros */\r\n\r\n/** @defgroup  I2C_GPIO_SIM_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group I2C_GPIO_SIM_Private_Types */\r\n\r\n/** @defgroup  I2C_GPIO_SIM_Private_Variables\r\n *  @{\r\n */\r\nstatic GLB_GPIO_Type sclPin;\r\nstatic GLB_GPIO_Type sdaPin;\r\nstatic uint8_t       sda_out = 0;\r\n\r\n/*@} end of group I2C_GPIO_SIM_Private_Variables */\r\n\r\n/** @defgroup  I2C_GPIO_SIM_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group I2C_GPIO_SIM_Global_Variables */\r\n\r\n/** @defgroup  I2C_GPIO_SIM_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group I2C_GPIO_SIM_Private_Fun_Declaration */\r\n\r\n/** @defgroup  I2C_GPIO_SIM_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group I2C_GPIO_SIM_Private_Functions */\r\n\r\n/** @defgroup  I2C_GPIO_SIM_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2C GPIO init function\r\n                                                                                *\r\n                                                                                * @param  sclGPIOPin: I2C SCL GPIO pin\r\n                                                                                * @param  sdaGPIOPin: I2C SDA GPIO pin\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid I2C_GPIO_Sim_Init(GLB_GPIO_Type sclGPIOPin, GLB_GPIO_Type sdaGPIOPin) {\r\n  GLB_GPIO_Cfg_Type cfg;\r\n  uint8_t           gpiopins[2];\r\n  uint8_t           gpiofuns[2];\r\n  size_t            i;\r\n\r\n  sclPin = sclGPIOPin;\r\n  sdaPin = sdaGPIOPin;\r\n\r\n  cfg.pullType = GPIO_PULL_UP;\r\n  cfg.drive    = 1;\r\n  cfg.smtCtrl  = 1;\r\n  cfg.gpioMode = GPIO_MODE_OUTPUT;\r\n\r\n  gpiopins[0] = sclPin;\r\n  gpiopins[1] = sdaPin;\r\n  gpiofuns[0] = 11;\r\n  gpiofuns[1] = 11;\r\n\r\n  for (i = 0; i < sizeof(gpiopins) / sizeof(gpiopins[0]); i++) {\r\n    cfg.gpioPin = gpiopins[i];\r\n    cfg.gpioFun = gpiofuns[i];\r\n    GLB_GPIO_Init(&cfg);\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2C SDA out function\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic void I2C_SDA_OUT(void) {\r\n  GLB_GPIO_Cfg_Type cfg;\r\n\r\n  if (sda_out == 1) {\r\n    return;\r\n  }\r\n\r\n  cfg.pullType = GPIO_PULL_UP;\r\n  cfg.drive    = 1;\r\n  cfg.smtCtrl  = 1;\r\n  cfg.gpioMode = GPIO_MODE_OUTPUT;\r\n  cfg.gpioPin  = sdaPin;\r\n  cfg.gpioFun  = 11;\r\n\r\n  GLB_GPIO_Init(&cfg);\r\n\r\n  sda_out = 1;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2C SDA in function\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic void I2C_SDA_IN(void) {\r\n  GLB_GPIO_Cfg_Type cfg;\r\n\r\n  if (sda_out == 0) {\r\n    return;\r\n  }\r\n\r\n  cfg.pullType = GPIO_PULL_UP;\r\n  cfg.drive    = 1;\r\n  cfg.smtCtrl  = 1;\r\n  cfg.gpioMode = GPIO_MODE_INPUT;\r\n  cfg.gpioPin  = sdaPin;\r\n  cfg.gpioFun  = 11;\r\n\r\n  GLB_GPIO_Init(&cfg);\r\n\r\n  sda_out = 0;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2C start function\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid I2C_Start(void) {\r\n  I2C_SDA_OUT();\r\n  SDA_H;\r\n  I2C_Delay_Const;\r\n  SCL_H;\r\n  I2C_Delay_Const;\r\n  SDA_L;\r\n  I2C_Delay_Const;\r\n  SCL_L;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2C stop function\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid I2C_Stop(void) {\r\n  I2C_SDA_OUT();\r\n  SCL_L;\r\n  I2C_Delay_Const;\r\n  SDA_L;\r\n  I2C_Delay_Const;\r\n  SCL_H;\r\n  I2C_Delay_Const;\r\n  SDA_H;\r\n  I2C_Delay_Const;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2C ack function\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic void I2C_Ack(void) {\r\n  SCL_L;\r\n  I2C_Delay_Const;\r\n  I2C_SDA_OUT();\r\n  SDA_L;\r\n  I2C_Delay_Const;\r\n  SCL_H;\r\n  I2C_Delay_Const;\r\n  SCL_L;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2C no ack function\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic void I2C_NoAck(void) {\r\n  SCL_L;\r\n  I2C_Delay_Const;\r\n  I2C_SDA_OUT();\r\n  SDA_H;\r\n  I2C_Delay_Const;\r\n  SCL_H;\r\n  I2C_Delay_Const;\r\n  SCL_L;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2C get ack function\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint8_t I2C_GetAck(void) {\r\n  uint8_t time = 0;\r\n\r\n  I2C_Delay_Const;\r\n  I2C_SDA_IN();\r\n\r\n  I2C_Delay_Const;\r\n  SCL_H;\r\n  I2C_Delay_Const;\r\n\r\n  while (SDA_read) {\r\n    time++;\r\n\r\n    if (time > 25) {\r\n      SCL_L;\r\n      return 0;\r\n    }\r\n  }\r\n\r\n  SCL_L;\r\n\r\n  return 1;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2C send byte function\r\n                                                                                *\r\n                                                                                * @param  Data: send data\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid I2C_SendByte(uint8_t Data) {\r\n  uint8_t cnt;\r\n\r\n  I2C_SDA_OUT();\r\n\r\n  for (cnt = 0; cnt < 8; cnt++) {\r\n    SCL_L;\r\n    I2C_Delay_Const;\r\n\r\n    if (Data & 0x80) {\r\n      SDA_H;\r\n    } else {\r\n      SDA_L;\r\n    }\r\n\r\n    Data <<= 1;\r\n    I2C_Delay_Const;\r\n    SCL_H;\r\n    I2C_Delay_Const;\r\n  }\r\n\r\n  SCL_L;\r\n\r\n  I2C_Delay_Const;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2C read byte function\r\n                                                                                *\r\n                                                                                * @param  ack: i2c ack byte\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint8_t I2C_ReadByte(uint8_t ack) {\r\n  uint8_t cnt;\r\n  uint8_t data = 0;\r\n\r\n  I2C_SDA_IN();\r\n\r\n  for (cnt = 0; cnt < 8; cnt++) {\r\n    SCL_L;\r\n    I2C_Delay_Const;\r\n\r\n    SCL_H;\r\n    I2C_Delay_Const;\r\n    data <<= 1;\r\n\r\n    if (SDA_read) {\r\n      data |= 0x01;\r\n    }\r\n  }\r\n\r\n  if (ack == 1) {\r\n    I2C_Ack();\r\n  } else {\r\n    I2C_NoAck();\r\n  }\r\n\r\n  return data;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SCCB init function\r\n                                                                                *\r\n                                                                                * @param  sclGPIOPin: I2C SCL GPIO pin\r\n                                                                                * @param  sdaGPIOPin: I2C SDA GPIO pin\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nint SCCB_Init(GLB_GPIO_Type sclGPIOPin, GLB_GPIO_Type sdaGPIOPin) {\r\n  I2C_GPIO_Sim_Init(sclGPIOPin, sdaGPIOPin);\r\n  return 0;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SCCB write function\r\n                                                                                *\r\n                                                                                * @param  slave_addr: salve addr\r\n                                                                                * @param  data: write data\r\n                                                                                * @param  wrsize: write data len\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nint SCCB_Write(uint8_t slave_addr, uint8_t *data, uint32_t wrsize) {\r\n  uint32_t i = 0;\r\n\r\n  I2C_Start();\r\n\r\n  I2C_SendByte((slave_addr << 1) | 0);\r\n\r\n  if (!I2C_GetAck()) {\r\n    I2C_Stop();\r\n    return -1;\r\n  }\r\n\r\n  for (i = 0; i < wrsize; i++) {\r\n    I2C_SendByte(data[i]);\r\n\r\n    if (!I2C_GetAck()) {\r\n      I2C_Stop();\r\n      return -1;\r\n    }\r\n  }\r\n\r\n  I2C_Stop();\r\n\r\n  return 0;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SCCB read function\r\n                                                                                *\r\n                                                                                * @param  slave_addr: salve addr\r\n                                                                                * @param  data: read data\r\n                                                                                * @param  rdsize: read data len\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nint SCCB_Read(uint8_t slave_addr, uint8_t *data, uint32_t rdsize) {\r\n  uint32_t i = 0;\r\n\r\n  if (0 == rdsize) {\r\n    return -1;\r\n  }\r\n\r\n  I2C_Start();\r\n\r\n  I2C_SendByte((slave_addr << 1) | 1);\r\n\r\n  if (!I2C_GetAck()) {\r\n    I2C_Stop();\r\n    return -1;\r\n  }\r\n\r\n  for (i = 0; i < rdsize - 1; i++) {\r\n    data[i] = I2C_ReadByte(1);\r\n  }\r\n\r\n  data[i] = I2C_ReadByte(0);\r\n\r\n  I2C_Stop();\r\n\r\n  return 0;\r\n}\r\n\r\n/*@} end of group I2C_GPIO_SIM_Public_Functions */\r\n\r\n/*@} end of group I2C_GPIO_SIM */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_i2s.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_i2s.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_i2s.h\"\r\n#include \"bl702_glb.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  I2S\r\n *  @{\r\n */\r\n\r\n/** @defgroup  I2S_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group I2S_Private_Macros */\r\n\r\n/** @defgroup  I2S_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group I2S_Private_Types */\r\n\r\n/** @defgroup  I2S_Private_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group I2S_Private_Variables */\r\n\r\n/** @defgroup  I2S_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group I2S_Global_Variables */\r\n\r\n/** @defgroup  I2S_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group I2S_Private_Fun_Declaration */\r\n\r\n/** @defgroup  I2S_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group I2S_Private_Functions */\r\n\r\n/** @defgroup  I2S_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2S BCLK config\r\n                                                                                *\r\n                                                                                * @param  i2sCfg: I2S configuration pointer\r\n                                                                                *\r\n                                                                                * @return NONE\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid I2S_SetBclkPeriod(I2S_CFG_Type *i2sCfg) {\r\n  uint32_t overSampleRate;\r\n  uint32_t bclkDivCnt;\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_I2S_FRAME_SIZE_TYPE(i2sCfg->frameSize));\r\n\r\n  overSampleRate = i2sCfg->audioFreqHz / i2sCfg->sampleFreqHz;\r\n\r\n  switch (i2sCfg->frameSize) {\r\n  case I2S_SIZE_FRAME_8:\r\n    bclkDivCnt = overSampleRate / 16;\r\n    break;\r\n\r\n  case I2S_SIZE_FRAME_16:\r\n    bclkDivCnt = overSampleRate / 32;\r\n    break;\r\n\r\n  case I2S_SIZE_FRAME_24:\r\n    bclkDivCnt = overSampleRate / 48;\r\n    break;\r\n\r\n  case I2S_SIZE_FRAME_32:\r\n    bclkDivCnt = overSampleRate / 64;\r\n    break;\r\n\r\n  default:\r\n    bclkDivCnt = overSampleRate / 16;\r\n    break;\r\n  }\r\n\r\n  bclkDivCnt = (bclkDivCnt / 2) - 1;\r\n\r\n  tmpVal = (bclkDivCnt << 16) | bclkDivCnt;\r\n  BL_WR_REG(I2S_BASE, I2S_BCLK_CONFIG, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2S configuration\r\n                                                                                *\r\n                                                                                * @param  i2sCfg: I2S configuration pointer\r\n                                                                                *\r\n                                                                                * @return NONE\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid I2S_Init(I2S_CFG_Type *i2sCfg) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2S_ENDIAN_TYPE(i2sCfg->endianType));\r\n  CHECK_PARAM(IS_I2S_MODE_TYPE(i2sCfg->modeType));\r\n  CHECK_PARAM(IS_I2S_FRAME_SIZE_TYPE(i2sCfg->frameSize));\r\n  CHECK_PARAM(IS_I2S_FS_MODE_TYPE(i2sCfg->fsMode));\r\n  CHECK_PARAM(IS_I2S_FS_CHANNEL_TYPE(i2sCfg->fsChannel));\r\n  CHECK_PARAM(IS_I2S_DATA_SIZE_TYPE(i2sCfg->dataSize));\r\n  CHECK_PARAM(IS_I2S_MONO_MODE_CHANNEL(i2sCfg->monoModeChannel));\r\n\r\n  /* Disable clock gate */\r\n  GLB_AHB_Slave1_Clock_Gate(DISABLE, BL_AHB_SLAVE1_I2S);\r\n\r\n  tmpVal = BL_RD_REG(I2S_BASE, I2S_CONFIG);\r\n\r\n  /* Set data endian*/\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_ENDIAN, i2sCfg->endianType);\r\n\r\n  /* Set I2S mode */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_I2S_MODE, i2sCfg->modeType);\r\n\r\n  /* Set BCLK invert */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_I2S_BCLK_INV, i2sCfg->bclkInvert);\r\n\r\n  /* Set FS size */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_FRAME_SIZE, i2sCfg->frameSize);\r\n\r\n  /* Set FS invert */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_I2S_FS_INV, i2sCfg->fsInvert);\r\n\r\n  /* Set FS mode */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_FS_1T_MODE, i2sCfg->fsMode);\r\n\r\n  /* Set FS channel mode */\r\n\r\n  switch (i2sCfg->fsChannel) {\r\n  case I2S_FS_CHANNELS_2:\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, I2S_CR_FS_3CH_MODE);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, I2S_CR_FS_4CH_MODE);\r\n    break;\r\n\r\n  case I2S_FS_CHANNELS_3:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, I2S_CR_FS_3CH_MODE);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, I2S_CR_FS_4CH_MODE);\r\n    break;\r\n\r\n  case I2S_FS_CHANNELS_4:\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, I2S_CR_FS_3CH_MODE);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, I2S_CR_FS_4CH_MODE);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Set Data size */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_DATA_SIZE, i2sCfg->dataSize);\r\n\r\n  /* Set Data offset */\r\n  if (i2sCfg->dataOffset != 0) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, I2S_CR_OFS_EN);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_OFS_CNT, i2sCfg->dataOffset - 1);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, I2S_CR_OFS_EN);\r\n  }\r\n\r\n  /* Set mono mode */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_MONO_MODE, i2sCfg->monoMode);\r\n\r\n  /* Set rx mono mode channel left or right */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_MONO_RX_CH, i2sCfg->monoModeChannel);\r\n\r\n  /* Clear mute mode */\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, I2S_CR_MUTE_MODE);\r\n\r\n  BL_WR_REG(I2S_BASE, I2S_CONFIG, tmpVal);\r\n\r\n  I2S_SetBclkPeriod(i2sCfg);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2S configure FIFO function\r\n                                                                                *\r\n                                                                                * @param  fifoCfg: FIFO configuration structure pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid I2S_FifoConfig(I2S_FifoCfg_Type *fifoCfg) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(I2S_BASE, I2S_FIFO_CONFIG_0);\r\n  /* Set packed mode */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_FIFO_LR_MERGE, fifoCfg->lRMerge);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_FIFO_LR_EXCHG, fifoCfg->frameDataExchange);\r\n  /* Clear tx and rx FIFO signal */\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, I2S_TX_FIFO_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, I2S_RX_FIFO_CLR);\r\n\r\n  /* Set DMA config */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_DMA_TX_EN, fifoCfg->txfifoDmaEnable);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_DMA_RX_EN, fifoCfg->rxfifoDmaEnable);\r\n\r\n  BL_WR_REG(I2S_BASE, I2S_FIFO_CONFIG_0, tmpVal);\r\n\r\n  /* Set CLR signal to 0*/\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, I2S_TX_FIFO_CLR);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, I2S_RX_FIFO_CLR);\r\n  BL_WR_REG(I2S_BASE, I2S_FIFO_CONFIG_0, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(I2S_BASE, I2S_FIFO_CONFIG_1);\r\n  /* Set TX and RX FIFO threshold */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_TX_FIFO_TH, fifoCfg->txFifoLevel);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_RX_FIFO_TH, fifoCfg->rxFifoLevel);\r\n\r\n  BL_WR_REG(I2S_BASE, I2S_FIFO_CONFIG_1, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2S configure IO function\r\n                                                                                *\r\n                                                                                * @param  ioCfg: IO configuration structure pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid I2S_IOConfig(I2S_IOCfg_Type *ioCfg) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(I2S_BASE, I2S_IO_CONFIG);\r\n  /* Enable or disable deglitch */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_DEG_EN, ioCfg->deglitchEn);\r\n\r\n  /* Set deglitch cycle count */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_DEG_CNT, ioCfg->deglitchCnt);\r\n\r\n  /* Enable or disable inverse BCLK signal */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_I2S_BCLK_INV, ioCfg->inverseBCLK);\r\n\r\n  /* Enable or disable inverse FS signal */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_I2S_FS_INV, ioCfg->inverseFS);\r\n\r\n  /* Enable or disable inverse RX signal */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_I2S_RXD_INV, ioCfg->inverseRX);\r\n\r\n  /* Enable or disable inverse TX signal */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_I2S_TXD_INV, ioCfg->inverseTX);\r\n\r\n  BL_WR_REG(I2S_BASE, I2S_IO_CONFIG, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable I2S\r\n                                                                                *\r\n                                                                                * @param  roleType: I2S master or slave\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid I2S_Enable(I2S_Role_Type roleType) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2S_ROLE_TYPE(roleType));\r\n\r\n  tmpVal = BL_RD_REG(I2S_BASE, I2S_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, I2S_CR_I2S_TXD_EN);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, I2S_CR_I2S_RXD_EN);\r\n\r\n  /* Set role type */\r\n  if (I2S_ROLE_MASTER == roleType) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, I2S_CR_I2S_M_EN);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, I2S_CR_I2S_S_EN);\r\n  } else if (I2S_ROLE_SLAVE == roleType) {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, I2S_CR_I2S_M_EN);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, I2S_CR_I2S_S_EN);\r\n  }\r\n\r\n  BL_WR_REG(I2S_BASE, I2S_CONFIG, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable I2S\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid I2S_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(I2S_BASE, I2S_CONFIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, I2S_CR_I2S_TXD_EN);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, I2S_CR_I2S_RXD_EN);\r\n\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, I2S_CR_I2S_M_EN);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, I2S_CR_I2S_S_EN);\r\n  BL_WR_REG(I2S_BASE, I2S_CONFIG, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2S read data\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return Data read\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t I2S_Read(void) {\r\n  while (0 == BL_GET_REG_BITS_VAL(BL_RD_REG(I2S_BASE, I2S_FIFO_CONFIG_1), I2S_RX_FIFO_CNT)) {\r\n  };\r\n\r\n  return BL_RD_REG(I2S_BASE, I2S_FIFO_RDATA);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2S write data\r\n                                                                                *\r\n                                                                                * @param  data: write data\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid I2S_Write(uint32_t data) {\r\n  while (0 == BL_GET_REG_BITS_VAL(BL_RD_REG(I2S_BASE, I2S_FIFO_CONFIG_1), I2S_TX_FIFO_CNT)) {\r\n  };\r\n\r\n  BL_WR_REG(I2S_BASE, I2S_FIFO_WDATA, data);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2S set mute\r\n                                                                                *\r\n                                                                                * @param  enabled: mute enabled or not\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid I2S_Mute(BL_Fun_Type enabled) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(I2S_BASE, I2S_CONFIG);\r\n\r\n  if (enabled ? 1 : 0) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, I2S_CR_MUTE_MODE);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, I2S_CR_MUTE_MODE);\r\n  }\r\n\r\n  BL_WR_REG(I2S_BASE, I2S_CONFIG, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2S set 24-bit data align mode in fifo\r\n                                                                                *\r\n                                                                                * @param  justType: Align mode\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid I2S_SetFifoJustified(I2S_FIFO_24_Justified_Type justType) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_I2S_FIFO_24_JUSTIFIED_TYPE(justType));\r\n\r\n  tmpVal = BL_RD_REG(I2S_BASE, I2S_FIFO_CONFIG_0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2S_CR_FIFO_24B_LJ, justType);\r\n  BL_WR_REG(I2S_BASE, I2S_FIFO_CONFIG_0, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2S flush\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return data count in TX FIFO\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t I2S_GetTxFIFO_AvlCnt(void) { return BL_GET_REG_BITS_VAL(BL_RD_REG(I2S_BASE, I2S_FIFO_CONFIG_1), I2S_TX_FIFO_CNT); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2S flush\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return data count in RX FIFO\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t I2S_GetRxFIFO_AvlCnt(void) { return BL_GET_REG_BITS_VAL(BL_RD_REG(I2S_BASE, I2S_FIFO_CONFIG_1), I2S_RX_FIFO_CNT); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  I2S flush\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid I2S_Flush(void) {\r\n  while (I2S_TX_FIFO_SIZE != I2S_GetTxFIFO_AvlCnt())\r\n    ;\r\n}\r\n\r\n/*@} end of group I2S_Public_Functions */\r\n\r\n/*@} end of group I2S */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_ir.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_ir.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_ir.h\"\r\n#include \"bl702_glb.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  IR\r\n *  @{\r\n */\r\n\r\n/** @defgroup  IR_Private_Macros\r\n *  @{\r\n */\r\n#define NEC_HEAD_H_MIN          17000\r\n#define NEC_HEAD_H_MAX          19000\r\n#define NEC_HEAD_L_MIN          8400\r\n#define NEC_HEAD_L_MAX          9600\r\n#define NEC_BIT0_H_MIN          525\r\n#define NEC_BIT0_H_MAX          1725\r\n#define RC5_ONE_PLUSE_MIN       1175\r\n#define RC5_ONE_PLUSE_MAX       2375\r\n#define RC5_TWO_PLUSE_MIN       2955\r\n#define RC5_TWO_PLUSE_MAX       4155\r\n#define IR_TX_INT_TIMEOUT_COUNT (100 * 160 * 1000)\r\n#define IR_RX_INT_TIMEOUT_COUNT (100 * 160 * 1000)\r\n\r\n/*@} end of group IR_Private_Macros */\r\n\r\n/** @defgroup  IR_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group IR_Private_Types */\r\n\r\n/** @defgroup  IR_Private_Variables\r\n *  @{\r\n */\r\nstatic intCallback_Type *irIntCbfArra[IR_INT_ALL] = {NULL, NULL};\r\n\r\n/*@} end of group IR_Private_Variables */\r\n\r\n/** @defgroup  IR_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group IR_Global_Variables */\r\n\r\n/** @defgroup  IR_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group IR_Private_Fun_Declaration */\r\n\r\n/** @defgroup  IR_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group IR_Private_Functions */\r\n\r\n/** @defgroup  IR_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR RX IRQ handler function\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid IRRX_IRQHandler(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(IR_BASE, IRRX_INT_STS);\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, IRRX_END_INT) && !BL_IS_REG_BIT_SET(tmpVal, IR_CR_IRRX_END_MASK)) {\r\n    BL_WR_REG(IR_BASE, IRRX_INT_STS, BL_SET_REG_BIT(tmpVal, IR_CR_IRRX_END_CLR));\r\n\r\n    if (irIntCbfArra[IR_INT_RX] != NULL) {\r\n      irIntCbfArra[IR_INT_RX]();\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR TX IRQ handler function\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid IRTX_IRQHandler(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(IR_BASE, IRTX_INT_STS);\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, IRTX_END_INT) && !BL_IS_REG_BIT_SET(tmpVal, IR_CR_IRTX_END_MASK)) {\r\n    BL_WR_REG(IR_BASE, IRTX_INT_STS, BL_SET_REG_BIT(tmpVal, IR_CR_IRTX_END_CLR));\r\n\r\n    if (irIntCbfArra[IR_INT_TX] != NULL) {\r\n      irIntCbfArra[IR_INT_TX]();\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR tx initialization function\r\n                                                                                *\r\n                                                                                * @param  irTxCfg: IR tx configuration structure pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_TxInit(IR_TxCfg_Type *irTxCfg) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Disable clock gate */\r\n  GLB_AHB_Slave1_Clock_Gate(DISABLE, BL_AHB_SLAVE1_IRR);\r\n\r\n  tmpVal = BL_RD_REG(IR_BASE, IRTX_CONFIG);\r\n  /* Set data bit */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRTX_DATA_NUM, irTxCfg->dataBits - 1);\r\n  /* Set tail pulse */\r\n  ENABLE == irTxCfg->tailPulseInverse ? (tmpVal = BL_SET_REG_BIT(tmpVal, IR_CR_IRTX_TAIL_HL_INV)) : (tmpVal = BL_CLR_REG_BIT(tmpVal, IR_CR_IRTX_TAIL_HL_INV));\r\n  ENABLE == irTxCfg->tailPulse ? (tmpVal = BL_SET_REG_BIT(tmpVal, IR_CR_IRTX_TAIL_EN)) : (tmpVal = BL_CLR_REG_BIT(tmpVal, IR_CR_IRTX_TAIL_EN));\r\n  /* Set head pulse */\r\n  ENABLE == irTxCfg->headPulseInverse ? (tmpVal = BL_SET_REG_BIT(tmpVal, IR_CR_IRTX_HEAD_HL_INV)) : (tmpVal = BL_CLR_REG_BIT(tmpVal, IR_CR_IRTX_HEAD_HL_INV));\r\n  ENABLE == irTxCfg->headPulse ? (tmpVal = BL_SET_REG_BIT(tmpVal, IR_CR_IRTX_HEAD_EN)) : (tmpVal = BL_CLR_REG_BIT(tmpVal, IR_CR_IRTX_HEAD_EN));\r\n  /* Enable or disable logic 1 and 0 pulse inverse */\r\n  ENABLE == irTxCfg->logic1PulseInverse ? (tmpVal = BL_SET_REG_BIT(tmpVal, IR_CR_IRTX_LOGIC1_HL_INV)) : (tmpVal = BL_CLR_REG_BIT(tmpVal, IR_CR_IRTX_LOGIC1_HL_INV));\r\n  ENABLE == irTxCfg->logic0PulseInverse ? (tmpVal = BL_SET_REG_BIT(tmpVal, IR_CR_IRTX_LOGIC0_HL_INV)) : (tmpVal = BL_CLR_REG_BIT(tmpVal, IR_CR_IRTX_LOGIC0_HL_INV));\r\n  /* Enable or disable data pulse */\r\n  ENABLE == irTxCfg->dataPulse ? (tmpVal = BL_SET_REG_BIT(tmpVal, IR_CR_IRTX_DATA_EN)) : (tmpVal = BL_CLR_REG_BIT(tmpVal, IR_CR_IRTX_DATA_EN));\r\n  /* Enable or disable output modulation */\r\n  ENABLE == irTxCfg->outputModulation ? (tmpVal = BL_SET_REG_BIT(tmpVal, IR_CR_IRTX_MOD_EN)) : (tmpVal = BL_CLR_REG_BIT(tmpVal, IR_CR_IRTX_MOD_EN));\r\n  /* Enable or disable output inverse */\r\n  ENABLE == irTxCfg->outputInverse ? (tmpVal = BL_SET_REG_BIT(tmpVal, IR_CR_IRTX_OUT_INV)) : (tmpVal = BL_CLR_REG_BIT(tmpVal, IR_CR_IRTX_OUT_INV));\r\n\r\n  /* Write back */\r\n  BL_WR_REG(IR_BASE, IRTX_CONFIG, tmpVal);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(IRTX_IRQn, IRTX_IRQHandler);\r\n#endif\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR tx pulse width configure function\r\n                                                                                *\r\n                                                                                * @param  irTxPulseWidthCfg: IR tx pulse width configuration structure pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_TxPulseWidthConfig(IR_TxPulseWidthCfg_Type *irTxPulseWidthCfg) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(IR_BASE, IRTX_PW);\r\n  /* Set logic 0 pulse phase 0 width */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRTX_LOGIC0_PH0_W, irTxPulseWidthCfg->logic0PulseWidth_0 - 1);\r\n  /* Set logic 0 pulse phase 1 width */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRTX_LOGIC0_PH1_W, irTxPulseWidthCfg->logic0PulseWidth_1 - 1);\r\n  /* Set logic 1 pulse phase 0 width */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRTX_LOGIC1_PH0_W, irTxPulseWidthCfg->logic1PulseWidth_0 - 1);\r\n  /* Set logic 1 pulse phase 1 width */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRTX_LOGIC1_PH1_W, irTxPulseWidthCfg->logic1PulseWidth_1 - 1);\r\n  /* Set head pulse phase 0 width */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRTX_HEAD_PH0_W, irTxPulseWidthCfg->headPulseWidth_0 - 1);\r\n  /* Set head pulse phase 1 width */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRTX_HEAD_PH1_W, irTxPulseWidthCfg->headPulseWidth_1 - 1);\r\n  /* Set tail pulse phase 0 width */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRTX_TAIL_PH0_W, irTxPulseWidthCfg->tailPulseWidth_0 - 1);\r\n  /* Set tail pulse phase 1 width */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRTX_TAIL_PH1_W, irTxPulseWidthCfg->tailPulseWidth_1 - 1);\r\n  BL_WR_REG(IR_BASE, IRTX_PW, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(IR_BASE, IRTX_PULSE_WIDTH);\r\n  /* Set modulation phase 0 width */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRTX_MOD_PH0_W, irTxPulseWidthCfg->moduWidth_0 - 1);\r\n  /* Set modulation phase 1 width */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRTX_MOD_PH1_W, irTxPulseWidthCfg->moduWidth_1 - 1);\r\n  /* Set pulse width unit */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRTX_PW_UNIT, irTxPulseWidthCfg->pulseWidthUnit - 1);\r\n  BL_WR_REG(IR_BASE, IRTX_PULSE_WIDTH, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR tx software mode pulse width(multiples of pulse width unit) configure function\r\n                                                                                *\r\n                                                                                * @param  irTxSWMPulseWidthCfg: IR tx software mode pulse width configuration structure pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_TxSWMPulseWidthConfig(IR_TxSWMPulseWidthCfg_Type *irTxSWMPulseWidthCfg) {\r\n  /* Set swm pulse width,multiples of pulse width unit */\r\n  BL_WR_REG(IR_BASE, IRTX_SWM_PW_0, irTxSWMPulseWidthCfg->swmData0);\r\n  BL_WR_REG(IR_BASE, IRTX_SWM_PW_1, irTxSWMPulseWidthCfg->swmData1);\r\n  BL_WR_REG(IR_BASE, IRTX_SWM_PW_2, irTxSWMPulseWidthCfg->swmData2);\r\n  BL_WR_REG(IR_BASE, IRTX_SWM_PW_3, irTxSWMPulseWidthCfg->swmData3);\r\n  BL_WR_REG(IR_BASE, IRTX_SWM_PW_4, irTxSWMPulseWidthCfg->swmData4);\r\n  BL_WR_REG(IR_BASE, IRTX_SWM_PW_5, irTxSWMPulseWidthCfg->swmData5);\r\n  BL_WR_REG(IR_BASE, IRTX_SWM_PW_6, irTxSWMPulseWidthCfg->swmData6);\r\n  BL_WR_REG(IR_BASE, IRTX_SWM_PW_7, irTxSWMPulseWidthCfg->swmData7);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR rx initialization function\r\n                                                                                *\r\n                                                                                * @param  irRxCfg: IR rx configuration structure pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_RxInit(IR_RxCfg_Type *irRxCfg) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_IR_RXMODE_TYPE(irRxCfg->rxMode));\r\n\r\n  /* Disable clock gate */\r\n  GLB_AHB_Slave1_Clock_Gate(DISABLE, BL_AHB_SLAVE1_IRR);\r\n\r\n  tmpVal = BL_RD_REG(IR_BASE, IRRX_CONFIG);\r\n\r\n  /* Set rx mode */\r\n  switch (irRxCfg->rxMode) {\r\n  case IR_RX_NEC:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRRX_MODE, 0x0);\r\n    break;\r\n\r\n  case IR_RX_RC5:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRRX_MODE, 0x1);\r\n    break;\r\n\r\n  case IR_RX_SWM:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRRX_MODE, 0x2);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable or disable input inverse */\r\n  ENABLE == irRxCfg->inputInverse ? (tmpVal = BL_SET_REG_BIT(tmpVal, IR_CR_IRRX_IN_INV)) : (tmpVal = BL_CLR_REG_BIT(tmpVal, IR_CR_IRRX_IN_INV));\r\n  /* Enable or disable rx input de-glitch function */\r\n  ENABLE == irRxCfg->rxDeglitch ? (tmpVal = BL_SET_REG_BIT(tmpVal, IR_CR_IRRX_DEG_EN)) : (tmpVal = BL_CLR_REG_BIT(tmpVal, IR_CR_IRRX_DEG_EN));\r\n  /* Set de-glitch function cycle count */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRRX_DEG_CNT, irRxCfg->DeglitchCnt);\r\n  /* Write back */\r\n  BL_WR_REG(IR_BASE, IRRX_CONFIG, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(IR_BASE, IRRX_PW_CONFIG);\r\n  /* Set pulse width threshold to trigger end condition */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRRX_END_TH, irRxCfg->endThreshold - 1);\r\n  /* Set pulse width threshold for logic0/1 detection */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRRX_DATA_TH, irRxCfg->dataThreshold - 1);\r\n  /* Write back */\r\n  BL_WR_REG(IR_BASE, IRRX_PW_CONFIG, tmpVal);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(IRRX_IRQn, IRRX_IRQHandler);\r\n#endif\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR set default value of all registers function\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_DeInit(void) {\r\n  GLB_AHB_Slave1_Reset(BL_AHB_SLAVE1_IRR);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR enable function\r\n                                                                                *\r\n                                                                                * @param  direct: IR direction type\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_Enable(IR_Direction_Type direct) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_IR_DIRECTION_TYPE(direct));\r\n\r\n  if (direct == IR_TX || direct == IR_TXRX) {\r\n    /* Enable ir tx unit */\r\n    tmpVal = BL_RD_REG(IR_BASE, IRTX_CONFIG);\r\n    BL_WR_REG(IR_BASE, IRTX_CONFIG, BL_SET_REG_BIT(tmpVal, IR_CR_IRTX_EN));\r\n  }\r\n\r\n  if (direct == IR_RX || direct == IR_TXRX) {\r\n    /* Enable ir rx unit */\r\n    tmpVal = BL_RD_REG(IR_BASE, IRRX_CONFIG);\r\n    BL_WR_REG(IR_BASE, IRRX_CONFIG, BL_SET_REG_BIT(tmpVal, IR_CR_IRRX_EN));\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR disable function\r\n                                                                                *\r\n                                                                                * @param  direct: IR direction type\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_Disable(IR_Direction_Type direct) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_IR_DIRECTION_TYPE(direct));\r\n\r\n  if (direct == IR_TX || direct == IR_TXRX) {\r\n    /* Disable ir tx unit */\r\n    tmpVal = BL_RD_REG(IR_BASE, IRTX_CONFIG);\r\n    BL_WR_REG(IR_BASE, IRTX_CONFIG, BL_CLR_REG_BIT(tmpVal, IR_CR_IRTX_EN));\r\n  }\r\n\r\n  if (direct == IR_RX || direct == IR_TXRX) {\r\n    /* Disable ir rx unit */\r\n    tmpVal = BL_RD_REG(IR_BASE, IRRX_CONFIG);\r\n    BL_WR_REG(IR_BASE, IRRX_CONFIG, BL_CLR_REG_BIT(tmpVal, IR_CR_IRRX_EN));\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR tx software mode enable or disable function\r\n                                                                                *\r\n                                                                                * @param  txSWM: Enable or disable\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_TxSWM(BL_Fun_Type txSWM) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Enable or disable tx swm */\r\n  tmpVal = BL_RD_REG(IR_BASE, IRTX_CONFIG);\r\n\r\n  if (ENABLE == txSWM) {\r\n    BL_WR_REG(IR_BASE, IRTX_CONFIG, BL_SET_REG_BIT(tmpVal, IR_CR_IRTX_SWM_EN));\r\n  } else {\r\n    BL_WR_REG(IR_BASE, IRTX_CONFIG, BL_CLR_REG_BIT(tmpVal, IR_CR_IRTX_SWM_EN));\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR clear rx fifo function\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_RxFIFOClear(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Clear rx fifo */\r\n  tmpVal = BL_RD_REG(IR_BASE, IRRX_SWM_FIFO_CONFIG_0);\r\n  BL_WR_REG(IR_BASE, IRRX_SWM_FIFO_CONFIG_0, BL_SET_REG_BIT(tmpVal, IR_RX_FIFO_CLR));\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR send data function\r\n                                                                                *\r\n                                                                                * @param  irWord: IR tx data word 0 or 1\r\n                                                                                * @param  data: data to send\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_SendData(IR_Word_Type irWord, uint32_t data) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_IR_WORD_TYPE(irWord));\r\n\r\n  /* Write word 0 or word 1 */\r\n  if (IR_WORD_0 == irWord) {\r\n    BL_WR_REG(IR_BASE, IRTX_DATA_WORD0, data);\r\n  } else {\r\n    BL_WR_REG(IR_BASE, IRTX_DATA_WORD1, data);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR software mode send pulse width data function\r\n                                                                                *\r\n                                                                                * @param  data: data to send\r\n                                                                                * @param  length: Length of send buffer\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_SWMSendData(uint16_t *data, uint8_t length) {\r\n  uint8_t  i = 0, j = 0;\r\n  uint16_t minData = data[0];\r\n  uint32_t tmpVal;\r\n  uint32_t pwVal = 0;\r\n  uint32_t count = (length + 7) / 8;\r\n\r\n  /* Search for min value */\r\n  for (i = 1; i < length; i++) {\r\n    if (minData > data[i] && data[i] != 0) {\r\n      minData = data[i];\r\n    }\r\n  }\r\n\r\n  /* Set pulse width unit */\r\n  tmpVal = BL_RD_REG(IR_BASE, IRTX_PULSE_WIDTH);\r\n  BL_WR_REG(IR_BASE, IRTX_PULSE_WIDTH, BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRTX_PW_UNIT, minData));\r\n\r\n  /* Set tx SWM pulse width data as multiples of pulse width unit */\r\n  for (i = 0; i < count; i++) {\r\n    pwVal = 0;\r\n\r\n    if (i < count - 1) {\r\n      for (j = 0; j < 8; j++) {\r\n        tmpVal = ((2 * data[j + i * 8] + minData) / (2 * minData) - 1) & 0xf;\r\n        pwVal |= tmpVal << (4 * j);\r\n      }\r\n\r\n      *(volatile uint32_t *)(IR_BASE + IRTX_SWM_PW_0_OFFSET + i * 4) = pwVal;\r\n    } else {\r\n      for (j = 0; j < length % 8; j++) {\r\n        tmpVal = ((2 * data[j + i * 8] + minData) / (2 * minData) - 1) & 0xf;\r\n        pwVal |= tmpVal << (4 * j);\r\n      }\r\n\r\n      *(volatile uint32_t *)(IR_BASE + IRTX_SWM_PW_0_OFFSET + i * 4) = pwVal;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR send command function\r\n                                                                                *\r\n                                                                                * @param  word1: IR send data word 1\r\n                                                                                * @param  word0: IR send data word 0\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_SendCommand(uint32_t word1, uint32_t word0) {\r\n  uint32_t timeoutCnt = IR_TX_INT_TIMEOUT_COUNT;\r\n\r\n  /* Write data */\r\n  IR_SendData(IR_WORD_1, word1);\r\n  IR_SendData(IR_WORD_0, word0);\r\n\r\n  /* Mask tx interrupt */\r\n  IR_IntMask(IR_INT_TX, MASK);\r\n\r\n  /* Clear tx interrupt */\r\n  IR_ClrIntStatus(IR_INT_TX);\r\n\r\n  /* Enable ir tx */\r\n  IR_Enable(IR_TX);\r\n\r\n  /* Wait for tx interrupt */\r\n  while (SET != IR_GetIntStatus(IR_INT_TX)) {\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      IR_Disable(IR_TX);\r\n\r\n      return TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Disable ir tx */\r\n  IR_Disable(IR_TX);\r\n\r\n  /* Clear tx interrupt */\r\n  IR_ClrIntStatus(IR_INT_TX);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR send command in software mode function\r\n                                                                                *\r\n                                                                                * @param  data: IR fifo data to send\r\n                                                                                * @param  length: Length of data\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_SWMSendCommand(uint16_t *data, uint8_t length) {\r\n  uint32_t timeoutCnt = IR_TX_INT_TIMEOUT_COUNT;\r\n\r\n  /* Write fifo */\r\n  IR_SWMSendData(data, length);\r\n\r\n  /* Mask tx interrupt */\r\n  IR_IntMask(IR_INT_TX, MASK);\r\n\r\n  /* Clear tx interrupt */\r\n  IR_ClrIntStatus(IR_INT_TX);\r\n\r\n  /* Enable ir tx */\r\n  IR_Enable(IR_TX);\r\n\r\n  /* Wait for tx interrupt */\r\n  while (SET != IR_GetIntStatus(IR_INT_TX)) {\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      IR_Disable(IR_TX);\r\n\r\n      return TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Disable ir tx */\r\n  IR_Disable(IR_TX);\r\n\r\n  /* Clear tx interrupt */\r\n  IR_ClrIntStatus(IR_INT_TX);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR send in NEC protocol\r\n                                                                                *\r\n                                                                                * @param  address: Address\r\n                                                                                * @param  command: Command\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_SendNEC(uint8_t address, uint8_t command) {\r\n  uint32_t tmpVal = ((~command & 0xff) << 24) + (command << 16) + ((~address & 0xff) << 8) + address;\r\n\r\n  IR_SendCommand(0, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR interrupt mask or unmask function\r\n                                                                                *\r\n                                                                                * @param  intType: IR interrupt type\r\n                                                                                * @param  intMask: Mask or unmask\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_IntMask(IR_INT_Type intType, BL_Mask_Type intMask) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_IR_INT_TYPE(intType));\r\n\r\n  if (intType == IR_INT_TX || intType == IR_INT_ALL) {\r\n    /* Mask or unmask tx interrupt */\r\n    tmpVal = BL_RD_REG(IR_BASE, IRTX_INT_STS);\r\n    BL_WR_REG(IR_BASE, IRTX_INT_STS, BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRTX_END_MASK, intMask));\r\n  }\r\n\r\n  if (intType == IR_INT_RX || intType == IR_INT_ALL) {\r\n    /* Mask or unmask rx interrupt */\r\n    tmpVal = BL_RD_REG(IR_BASE, IRRX_INT_STS);\r\n    BL_WR_REG(IR_BASE, IRRX_INT_STS, BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRRX_END_MASK, intMask));\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Clear ir interrupt function\r\n                                                                                *\r\n                                                                                * @param  intType: IR interrupt type\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_ClrIntStatus(IR_INT_Type intType) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_IR_INT_TYPE(intType));\r\n\r\n  if (intType == IR_INT_TX || intType == IR_INT_ALL) {\r\n    /* Clear tx interrupt */\r\n    tmpVal = BL_RD_REG(IR_BASE, IRTX_INT_STS);\r\n    BL_WR_REG(IR_BASE, IRTX_INT_STS, BL_SET_REG_BIT(tmpVal, IR_CR_IRTX_END_CLR));\r\n  }\r\n\r\n  if (intType == IR_INT_RX || intType == IR_INT_ALL) {\r\n    /* Clear rx interrupt */\r\n    tmpVal = BL_RD_REG(IR_BASE, IRRX_INT_STS);\r\n    BL_WR_REG(IR_BASE, IRRX_INT_STS, BL_SET_REG_BIT(tmpVal, IR_CR_IRRX_END_CLR));\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR install interrupt callback function\r\n                                                                                *\r\n                                                                                * @param  intType: IR interrupt type\r\n                                                                                * @param  cbFun: Pointer to interrupt callback function. The type should be void (*fn)(void)\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_Int_Callback_Install(IR_INT_Type intType, intCallback_Type *cbFun) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_IR_INT_TYPE(intType));\r\n\r\n  irIntCbfArra[intType] = cbFun;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR get interrupt status function\r\n                                                                                *\r\n                                                                                * @param  intType: IR int type\r\n                                                                                *\r\n                                                                                * @return IR tx or rx interrupt status\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type IR_GetIntStatus(IR_INT_Type intType) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_IR_INT_TYPE(intType));\r\n\r\n  /* Read tx or rx interrupt status */\r\n  if (IR_INT_TX == intType) {\r\n    tmpVal = BL_RD_REG(IR_BASE, IRTX_INT_STS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, IRTX_END_INT);\r\n  } else if (IR_INT_RX == intType) {\r\n    tmpVal = BL_RD_REG(IR_BASE, IRRX_INT_STS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, IRRX_END_INT);\r\n  }\r\n\r\n  if (tmpVal) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR get rx fifo underflow or overflow status function\r\n                                                                                *\r\n                                                                                * @param  fifoSts: IR fifo status type\r\n                                                                                *\r\n                                                                                * @return IR rx fifo status\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type IR_GetRxFIFOStatus(IR_FifoStatus_Type fifoSts) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_IR_FIFOSTATUS_TYPE(fifoSts));\r\n\r\n  /* Read rx fifo status */\r\n  tmpVal = BL_RD_REG(IR_BASE, IRRX_SWM_FIFO_CONFIG_0);\r\n\r\n  if (fifoSts == IR_RX_FIFO_UNDERFLOW) {\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, IR_RX_FIFO_UNDERFLOW);\r\n  } else {\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, IR_RX_FIFO_OVERFLOW);\r\n  }\r\n\r\n  if (tmpVal) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR receive data function\r\n                                                                                *\r\n                                                                                * @param  irWord: IR rx data word 0 or 1\r\n                                                                                *\r\n                                                                                * @return Data received\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t IR_ReceiveData(IR_Word_Type irWord) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_IR_WORD_TYPE(irWord));\r\n\r\n  /* Read word 0 or word 1 */\r\n  if (IR_WORD_0 == irWord) {\r\n    tmpVal = BL_RD_REG(IR_BASE, IRRX_DATA_WORD0);\r\n  } else {\r\n    tmpVal = BL_RD_REG(IR_BASE, IRRX_DATA_WORD1);\r\n  }\r\n\r\n  return tmpVal;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR software mode receive pulse width data function\r\n                                                                                *\r\n                                                                                * @param  data: Data received\r\n                                                                                * @param  length: Max length of receive buffer\r\n                                                                                *\r\n                                                                                * @return Length of datas received\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint8_t IR_SWMReceiveData(uint16_t *data, uint8_t length) {\r\n  uint8_t rxLen = 0;\r\n\r\n  while (rxLen < length && IR_GetRxFIFOCount() > 0) {\r\n    /* Read data */\r\n    data[rxLen++] = BL_RD_REG(IR_BASE, IRRX_SWM_FIFO_RDATA) & 0xffff;\r\n  }\r\n\r\n  return rxLen;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR receive in NEC protocol\r\n                                                                                *\r\n                                                                                * @param  address: Address\r\n                                                                                * @param  command: Command\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_ReceiveNEC(uint8_t *address, uint8_t *command) {\r\n  uint32_t tmpVal = IR_ReceiveData(IR_WORD_0);\r\n\r\n  *address = tmpVal & 0xff;\r\n  *command = (tmpVal >> 16) & 0xff;\r\n\r\n  if ((~(*address) & 0xff) != ((tmpVal >> 8) & 0xff) || (~(*command) & 0xff) != ((tmpVal >> 24) & 0xff)) {\r\n    return ERROR;\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR get rx data bit count function\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return IR rx data bit count\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint8_t IR_GetRxDataBitCount(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Read rx data bit count */\r\n  tmpVal = BL_RD_REG(IR_BASE, IRRX_DATA_COUNT);\r\n  tmpVal = BL_GET_REG_BITS_VAL(tmpVal, IR_STS_IRRX_DATA_CNT);\r\n\r\n  return tmpVal;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR get rx fifo count function\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return IR rx fifo available count\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint8_t IR_GetRxFIFOCount(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Read rx fifo count */\r\n  tmpVal = BL_RD_REG(IR_BASE, IRRX_SWM_FIFO_CONFIG_0);\r\n  tmpVal = BL_GET_REG_BITS_VAL(tmpVal, IR_RX_FIFO_CNT);\r\n\r\n  return tmpVal;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR learning to set rx and tx mode function\r\n                                                                                *\r\n                                                                                * @param  data: Buffer to save data\r\n                                                                                * @param  length: Length of data\r\n                                                                                *\r\n                                                                                * @return Protocol type\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nIR_RxMode_Type IR_LearnToInit(uint32_t *data, uint8_t *length) {\r\n  uint32_t tmpVal;\r\n  uint32_t timeoutCnt = IR_RX_INT_TIMEOUT_COUNT;\r\n\r\n  /* Disable clock gate */\r\n  GLB_AHB_Slave1_Clock_Gate(DISABLE, BL_AHB_SLAVE1_IRR);\r\n\r\n  /* Disable rx,set rx in software mode and enable rx input inverse */\r\n  tmpVal = BL_RD_REG(IR_BASE, IRRX_CONFIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, IR_CR_IRRX_EN);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRRX_MODE, 0x2);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, IR_CR_IRRX_IN_INV);\r\n  BL_WR_REG(IR_BASE, IRRX_CONFIG, tmpVal);\r\n  /* Set pulse width threshold to trigger end condition */\r\n  tmpVal = BL_RD_REG(IR_BASE, IRRX_PW_CONFIG);\r\n  BL_WR_REG(IR_BASE, IRRX_PW_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRRX_END_TH, 19999));\r\n\r\n  /* Clear and mask rx interrupt */\r\n  tmpVal = BL_RD_REG(IR_BASE, IRRX_INT_STS);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, IR_CR_IRRX_END_MASK);\r\n  BL_WR_REG(IR_BASE, IRRX_INT_STS, BL_SET_REG_BIT(tmpVal, IR_CR_IRRX_END_CLR));\r\n\r\n  /* Enable rx */\r\n  tmpVal = BL_RD_REG(IR_BASE, IRRX_CONFIG);\r\n  BL_WR_REG(IR_BASE, IRRX_CONFIG, BL_SET_REG_BIT(tmpVal, IR_CR_IRRX_EN));\r\n\r\n  /* Wait for rx interrupt */\r\n  while (SET != IR_GetIntStatus(IR_INT_RX)) {\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      IR_Disable(IR_RX);\r\n\r\n      return IR_RX_SWM;\r\n    }\r\n  }\r\n\r\n  /* Disable rx */\r\n  tmpVal = BL_RD_REG(IR_BASE, IRRX_CONFIG);\r\n  BL_WR_REG(IR_BASE, IRRX_CONFIG, BL_CLR_REG_BIT(tmpVal, IR_CR_IRRX_EN));\r\n\r\n  /* Clear rx interrupt */\r\n  tmpVal = BL_RD_REG(IR_BASE, IRRX_INT_STS);\r\n  BL_WR_REG(IR_BASE, IRRX_INT_STS, BL_SET_REG_BIT(tmpVal, IR_CR_IRRX_END_CLR));\r\n\r\n  /*Receive data */\r\n  *length = IR_GetRxFIFOCount();\r\n  *length = IR_SWMReceiveData((uint16_t *)data, *length);\r\n\r\n  /* Judge protocol type */\r\n  if (NEC_HEAD_H_MIN < (data[0] & 0xffff) && (data[0] & 0xffff) < NEC_HEAD_H_MAX && NEC_HEAD_L_MIN < (data[0] >> 16) && (data[0] >> 16) < NEC_HEAD_L_MAX && NEC_BIT0_H_MIN < (data[1] & 0xffff) &&\r\n      (data[1] & 0xffff) < NEC_BIT0_H_MAX) {\r\n    /* Set rx in NEC mode */\r\n    tmpVal = BL_RD_REG(IR_BASE, IRRX_CONFIG);\r\n    BL_WR_REG(IR_BASE, IRRX_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRRX_MODE, 0x0));\r\n    /* Set pulse width threshold to trigger end condition and pulse width threshold for logic0/1 detection */\r\n    BL_WR_REG(IR_BASE, IRRX_PW_CONFIG, 0x23270d47);\r\n    /* Set tx in NEC mode */\r\n    /* Tx configure */\r\n    BL_WR_REG(IR_BASE, IRTX_CONFIG, 0x1f514);\r\n    /* Set logic 0,logic 1,head and tail pulse width */\r\n    BL_WR_REG(IR_BASE, IRTX_PW, 0x7f2000);\r\n    /* Set modulation phase width and pulse width unit */\r\n    BL_WR_REG(IR_BASE, IRTX_PULSE_WIDTH, 0x22110464);\r\n\r\n    return IR_RX_NEC;\r\n  } else if (RC5_ONE_PLUSE_MIN < (data[0] & 0xffff) && (data[0] & 0xffff) < RC5_ONE_PLUSE_MAX &&\r\n             ((RC5_ONE_PLUSE_MIN < (data[0] >> 16) && (data[0] >> 16) < RC5_ONE_PLUSE_MAX) || (RC5_TWO_PLUSE_MIN < (data[0] >> 16) && (data[0] >> 16) < RC5_TWO_PLUSE_MAX)) &&\r\n             ((RC5_ONE_PLUSE_MIN < (data[1] & 0xffff) && (data[1] & 0xffff) < RC5_ONE_PLUSE_MAX) || (RC5_TWO_PLUSE_MIN < (data[1] & 0xffff) && (data[1] & 0xffff) < RC5_TWO_PLUSE_MAX))) {\r\n    /* Set rx in RC-5 mode */\r\n    tmpVal = BL_RD_REG(IR_BASE, IRRX_CONFIG);\r\n    BL_WR_REG(IR_BASE, IRRX_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRRX_MODE, 0x1));\r\n    /* Set pulse width threshold to trigger end condition and pulse width threshold for logic0/1 detection */\r\n    BL_WR_REG(IR_BASE, IRRX_PW_CONFIG, 0x13870a6a);\r\n    /* Set tx in RC-5 mode */\r\n    /* Tx configure */\r\n    BL_WR_REG(IR_BASE, IRTX_CONFIG, 0xc134);\r\n    /* Set logic 0,logic 1,head and tail pulse width */\r\n    BL_WR_REG(IR_BASE, IRTX_PW, 0);\r\n    /* Set modulation phase width and pulse width unit */\r\n    BL_WR_REG(IR_BASE, IRTX_PULSE_WIDTH, 0x221106f1);\r\n\r\n    return IR_RX_RC5;\r\n  } else if ((data[0] >> 16) != 0) {\r\n    /* Set tx in software mode */\r\n    /* Tx configure */\r\n    BL_WR_REG(IR_BASE, IRTX_CONFIG, *length << 12 | 0xc);\r\n    /* Set modulation phase width */\r\n    BL_WR_REG(IR_BASE, IRTX_PULSE_WIDTH, 0x22110000);\r\n\r\n    return IR_RX_SWM;\r\n  } else {\r\n    tmpVal = BL_RD_REG(IR_BASE, IRRX_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, IR_CR_IRRX_MODE);\r\n\r\n    if (tmpVal == 0) {\r\n      return IR_RX_NEC;\r\n    } else if (tmpVal == 1) {\r\n      return IR_RX_RC5;\r\n    } else {\r\n      return IR_RX_SWM;\r\n    }\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR receive data according to mode which is learned function\r\n                                                                                *\r\n                                                                                * @param  mode: Protocol type\r\n                                                                                * @param  data: Buffer to save data\r\n                                                                                *\r\n                                                                                * @return Length of data\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint8_t IR_LearnToReceive(IR_RxMode_Type mode, uint32_t *data) {\r\n  uint8_t  length     = 0;\r\n  uint32_t timeoutCnt = IR_RX_INT_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_IR_RXMODE_TYPE(mode));\r\n\r\n  /* Disable ir rx */\r\n  IR_Disable(IR_RX);\r\n\r\n  /* Clear and mask rx interrupt */\r\n  IR_ClrIntStatus(IR_INT_RX);\r\n  IR_IntMask(IR_INT_RX, MASK);\r\n\r\n  /* Enable ir rx */\r\n  IR_Enable(IR_RX);\r\n\r\n  /* Wait for rx interrupt */\r\n  while (SET != IR_GetIntStatus(IR_INT_RX)) {\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      IR_Disable(IR_RX);\r\n\r\n      return TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Disable ir rx */\r\n  IR_Disable(IR_RX);\r\n\r\n  /* Clear rx interrupt */\r\n  IR_ClrIntStatus(IR_INT_RX);\r\n\r\n  /* Receive data according to mode */\r\n  if (mode == IR_RX_NEC || mode == IR_RX_RC5) {\r\n    /* Get data bit count */\r\n    length  = IR_GetRxDataBitCount();\r\n    data[0] = IR_ReceiveData(IR_WORD_0);\r\n  } else {\r\n    /* Get fifo count */\r\n    length = IR_GetRxFIFOCount();\r\n    length = IR_SWMReceiveData((uint16_t *)data, length);\r\n  }\r\n\r\n  return length;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR send data according to mode which is learned function\r\n                                                                                *\r\n                                                                                * @param  mode: Protocol type\r\n                                                                                * @param  data: Buffer of data to send\r\n                                                                                * @param  length: Length of data\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_LearnToSend(IR_RxMode_Type mode, uint32_t *data, uint8_t length) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_IR_RXMODE_TYPE(mode));\r\n\r\n  /* Set send length */\r\n  tmpVal = BL_RD_REG(IR_BASE, IRTX_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, IR_CR_IRTX_DATA_NUM, length - 1);\r\n  BL_WR_REG(IR_BASE, IRTX_CONFIG, tmpVal);\r\n\r\n  if (mode == IR_RX_NEC || mode == IR_RX_RC5) {\r\n    IR_SendCommand(0, data[0]);\r\n  } else {\r\n    IR_SWMSendCommand((uint16_t *)data, length);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR init to control led function\r\n                                                                                *\r\n                                                                                * @param  clk: Clock source\r\n                                                                                * @param  div: Clock division(1~64)\r\n                                                                                * @param  unit: Pulse width unit(multiples of clock pulse width, 1~4096)\r\n                                                                                * @param  code0H: code 0 high level time(multiples of pulse width unit, 1~16)\r\n                                                                                * @param  code0L: code 0 low level time(multiples of pulse width unit, 1~16)\r\n                                                                                * @param  code1H: code 1 high level time(multiples of pulse width unit, 1~16)\r\n                                                                                * @param  code1L: code 1 low level time(multiples of pulse width unit, 1~16)\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_LEDInit(HBN_XCLK_CLK_Type clk, uint8_t div, uint8_t unit, uint8_t code0H, uint8_t code0L, uint8_t code1H, uint8_t code1L) {\r\n  IR_TxCfg_Type txCfg = {\r\n      24,      /* 24-bit data */\r\n      DISABLE, /* Disable signal of tail pulse inverse */\r\n      DISABLE, /* Disable signal of tail pulse */\r\n      DISABLE, /* Disable signal of head pulse inverse */\r\n      DISABLE, /* Disable signal of head pulse */\r\n      DISABLE, /* Disable signal of logic 1 pulse inverse */\r\n      DISABLE, /* Disable signal of logic 0 pulse inverse */\r\n      ENABLE,  /* Enable signal of data pulse */\r\n      DISABLE, /* Disable signal of output modulation */\r\n      ENABLE   /* Enable signal of output inverse */\r\n  };\r\n\r\n  IR_TxPulseWidthCfg_Type txPWCfg = {\r\n      code0L, /* Pulse width of logic 0 pulse phase 1 */\r\n      code0H, /* Pulse width of logic 0 pulse phase 0 */\r\n      code1L, /* Pulse width of logic 1 pulse phase 1 */\r\n      code1H, /* Pulse width of logic 1 pulse phase 0 */\r\n      1,      /* Pulse width of head pulse phase 1 */\r\n      1,      /* Pulse width of head pulse phase 0 */\r\n      1,      /* Pulse width of tail pulse phase 1 */\r\n      1,      /* Pulse width of tail pulse phase 0 */\r\n      1,      /* Modulation phase 1 width */\r\n      1,      /* Modulation phase 0 width */\r\n      unit    /* Pulse width unit */\r\n  };\r\n\r\n  HBN_Set_XCLK_CLK_Sel(clk);\r\n  GLB_Set_IR_CLK(ENABLE, GLB_IR_CLK_SRC_XCLK, div - 1);\r\n\r\n  /* Disable ir before config */\r\n  IR_Disable(IR_TXRX);\r\n\r\n  /* IR tx init */\r\n  IR_TxInit(&txCfg);\r\n  IR_TxPulseWidthConfig(&txPWCfg);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  IR send 24-bit data to control led function\r\n                                                                                *\r\n                                                                                * @param  data: Data to send(24-bit)\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type IR_LEDSend(uint32_t data) {\r\n  /* Change MSB_first to LSB_first */\r\n  data = ((data >> 1) & 0x55555555) | ((data << 1) & 0xaaaaaaaa);\r\n  data = ((data >> 2) & 0x33333333) | ((data << 2) & 0xcccccccc);\r\n  data = ((data >> 4) & 0x0f0f0f0f) | ((data << 4) & 0xf0f0f0f0);\r\n  data = ((data >> 16) & 0xff) | (data & 0xff00) | ((data << 16) & 0xff0000);\r\n  IR_SendCommand(0, data);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/*@} end of group IR_Public_Functions */\r\n\r\n/*@} end of group IR */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_kys.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_kys.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_kys.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  KYS\r\n *  @{\r\n */\r\n\r\n/** @defgroup  KYS_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group KYS_Private_Macros */\r\n\r\n/** @defgroup  KYS_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group KYS_Private_Types */\r\n\r\n/** @defgroup  KYS_Private_Variables\r\n *  @{\r\n */\r\nstatic intCallback_Type *KYSIntCbfArra[1] = {NULL};\r\n\r\n/*@} end of group KYS_Private_Variables */\r\n\r\n/** @defgroup  KYS_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group KYS_Global_Variables */\r\n\r\n/** @defgroup  KYS_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group KYS_Private_Fun_Declaration */\r\n\r\n/** @defgroup  KYS_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group KYS_Private_Functions */\r\n\r\n/** @defgroup  KYS_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  KYS interrupt handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid KYS_IRQHandler(void) {\r\n  if (KYSIntCbfArra[0] != NULL) {\r\n    KYSIntCbfArra[0]();\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  KYS initialization function\r\n                                                                                *\r\n                                                                                * @param  kysCfg: KYS configuration structure pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type KYS_Init(KYS_CFG_Type *kysCfg) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(KYS_BASE, KYS_KS_CTRL);\r\n  /* Set col and row */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, KYS_COL_NUM, kysCfg->col - 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, KYS_ROW_NUM, kysCfg->row - 1);\r\n\r\n  /* Set idle duration between column scans */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, KYS_RC_EXT, kysCfg->idleDuration);\r\n\r\n  /* Enable or disable ghost key event detection */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, KYS_GHOST_EN, kysCfg->ghostEn);\r\n\r\n  /* Enable or disable deglitch function */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, KYS_DEG_EN, kysCfg->deglitchEn);\r\n\r\n  /* Set deglitch count */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, KYS_DEG_CNT, kysCfg->deglitchCnt);\r\n\r\n  /* Write back */\r\n  BL_WR_REG(KYS_BASE, KYS_KS_CTRL, tmpVal);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(KYS_IRQn, KYS_IRQHandler);\r\n#endif\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable KYS\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type KYS_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(KYS_BASE, KYS_KS_CTRL);\r\n  BL_WR_REG(KYS_BASE, KYS_KS_CTRL, BL_SET_REG_BIT(tmpVal, KYS_KS_EN));\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable KYS\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type KYS_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(KYS_BASE, KYS_KS_CTRL);\r\n  BL_WR_REG(KYS_BASE, KYS_KS_CTRL, BL_CLR_REG_BIT(tmpVal, KYS_KS_EN));\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  KYS mask or unmask interrupt\r\n                                                                                *\r\n                                                                                * @param  intMask: KYS interrupt mask value( MASK:disbale interrupt,UNMASK:enable interrupt )\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type KYS_IntMask(BL_Mask_Type intMask) {\r\n  if (MASK == intMask) {\r\n    BL_WR_REG(KYS_BASE, KYS_KS_INT_EN, 0);\r\n  } else {\r\n    BL_WR_REG(KYS_BASE, KYS_KS_INT_EN, 1);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  KYS clear interrupt\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type KYS_IntClear(void) {\r\n  BL_WR_REG(KYS_BASE, KYS_KEYCODE_CLR, 0xf);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Install KYS interrupt callback function\r\n                                                                                *\r\n                                                                                * @param  cbFun: Pointer to interrupt callback function. The type should be void (*fn)(void)\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type KYS_Int_Callback_Install(intCallback_Type *cbFun) {\r\n  KYSIntCbfArra[0] = cbFun;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  KYS get interrupt status\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return Status of interrupt\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint8_t KYS_GetIntStatus(void) { return BL_RD_REG(KYS_BASE, KYS_KS_INT_STS) & 0xf; }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  KYS get keycode value\r\n                                                                                *\r\n                                                                                * @param  keycode: KYS keycode type\r\n                                                                                * @param  col: Col of key\r\n                                                                                * @param  row: Row of key\r\n                                                                                *\r\n                                                                                * @return Keycode value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint8_t KYS_GetKeycode(KYS_Keycode_Type keycode, uint8_t *col, uint8_t *row) {\r\n  uint32_t tmpVal;\r\n  uint8_t  keyValue;\r\n\r\n  /* Get keycode value */\r\n  keyValue = BL_RD_REG(KYS_BASE, KYS_KEYCODE_VALUE) >> (8 * keycode) & 0xff;\r\n\r\n  /* Get total row number of keyboard */\r\n  tmpVal = BL_RD_REG(KYS_BASE, KYS_KS_CTRL);\r\n  tmpVal = BL_GET_REG_BITS_VAL(tmpVal, KYS_ROW_NUM);\r\n\r\n  /* Calculate col and row of the key */\r\n  *col = keyValue / (tmpVal + 1);\r\n  *row = keyValue % (tmpVal + 1);\r\n\r\n  return keyValue;\r\n}\r\n\r\n/*@} end of group KYS_Public_Functions */\r\n\r\n/*@} end of group KYS */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_l1c.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_l1c.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_l1c.h\"\r\n#include \"bl702_common.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  L1C\r\n *  @{\r\n */\r\n\r\n/** @defgroup  L1C_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group L1C_Private_Macros */\r\n\r\n/** @defgroup  L1C_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group L1C_Private_Types */\r\n\r\n/** @defgroup  L1C_Private_Variables\r\n *  @{\r\n */\r\nstatic intCallback_Type *l1cBmxErrIntCbfArra[L1C_BMX_ERR_INT_ALL] = {NULL};\r\nstatic intCallback_Type *l1cBmxToIntCbfArra[L1C_BMX_TO_INT_ALL]   = {NULL};\r\n\r\n/*@} end of group L1C_Private_Variables */\r\n\r\n/** @defgroup  L1C_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group L1C_Global_Variables */\r\n\r\n/** @defgroup  L1C_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group L1C_Private_Fun_Declaration */\r\n\r\n/** @defgroup  L1C_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group L1C_Private_Functions */\r\n\r\n/** @defgroup  L1C_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable cache\r\n                                                                                *\r\n                                                                                * @param  wayDisable: cache way disable config\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION L1C_Cache_Enable_Set(uint8_t wayDisable) {\r\n  L1C_Cache_Flush(wayDisable);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  L1C cache write set\r\n                                                                                *\r\n                                                                                * @param  wtEn: L1C write through enable\r\n                                                                                * @param  wbEn: L1C write back enable\r\n                                                                                * @param  waEn: L1C write allocate enable\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION L1C_Cache_Write_Set(BL_Fun_Type wtEn, BL_Fun_Type wbEn, BL_Fun_Type waEn) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(L1C_BASE, L1C_CONFIG);\r\n\r\n  if (wtEn) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, L1C_WT_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_WT_EN);\r\n  }\r\n\r\n  if (wbEn) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, L1C_WB_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_WB_EN);\r\n  }\r\n\r\n  if (waEn) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, L1C_WA_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_WA_EN);\r\n  }\r\n\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Flush cache\r\n                                                                                *\r\n                                                                                * @param  wayDisable: cache way disable config\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION L1C_Cache_Flush(uint8_t wayDisable) {\r\n  uint32_t tmpVal;\r\n  uint32_t cnt           = 0;\r\n  uint8_t  finWayDisable = 0;\r\n\r\n  tmpVal        = BL_RD_REG(L1C_BASE, L1C_CONFIG);\r\n  tmpVal        = BL_CLR_REG_BIT(tmpVal, L1C_CACHEABLE);\r\n  tmpVal        = BL_SET_REG_BIT(tmpVal, L1C_BYPASS);\r\n  tmpVal        = BL_CLR_REG_BIT(tmpVal, L1C_WAY_DIS);\r\n  tmpVal        = BL_CLR_REG_BIT(tmpVal, L1C_CNT_EN);\r\n  finWayDisable = BL_GET_REG_BITS_VAL(tmpVal, L1C_WAY_DIS);\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n\r\n  /*Set Tag RAM to zero */\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_INVALID_EN);\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n  /* Left space for hardware change status*/\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, L1C_INVALID_EN);\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n  /* Left space for hardware change status*/\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n\r\n  /* Polling for invalid done */\r\n  do {\r\n    BL702_Delay_US(1);\r\n    cnt++;\r\n    tmpVal = BL_RD_REG(L1C_BASE, L1C_CONFIG);\r\n  } while (!BL_IS_REG_BIT_SET(tmpVal, L1C_INVALID_DONE) && cnt < 100);\r\n\r\n  /* data flush */\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_FLUSH_EN);\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n  /* Left space for hardware change status*/\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, L1C_FLUSH_EN);\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n  /* Left space for hardware change status*/\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n\r\n  /* Polling for flush done */\r\n  do {\r\n    BL702_Delay_US(1);\r\n    cnt++;\r\n    tmpVal = BL_RD_REG(L1C_BASE, L1C_CONFIG);\r\n  } while (!BL_IS_REG_BIT_SET(tmpVal, L1C_FLUSH_DONE) && cnt < 100);\r\n\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_FLUSH_EN);\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, L1C_BYPASS);\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_BYPASS);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, L1C_CNT_EN);\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n\r\n  if (wayDisable != 0xff) {\r\n    finWayDisable = wayDisable;\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(L1C_BASE, L1C_CONFIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_WAY_DIS);\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n\r\n  tmpVal |= (finWayDisable << L1C_WAY_DIS_POS);\r\n\r\n  /* If way disable is 0x0f, cacheable can't be set */\r\n  if (finWayDisable != 0x0f) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, L1C_CACHEABLE);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_CACHEABLE);\r\n  }\r\n\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Flush cache external api\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION L1C_Cache_Flush_Ext(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Disable early respone */\r\n  tmpVal = BL_RD_REG(L1C_BASE, L1C_CONFIG);\r\n  L1C_Cache_Flush((tmpVal >> L1C_WAY_DIS_POS) & 0xf);\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get cache hit count\r\n                                                                                *\r\n                                                                                * @param  hitCountLow: hit count low 32 bits pointer\r\n                                                                                * @param  hitCountHigh: hit count high 32 bits pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION L1C_Cache_Hit_Count_Get(uint32_t *hitCountLow, uint32_t *hitCountHigh) {\r\n  *hitCountLow  = BL_RD_REG(L1C_BASE, L1C_HIT_CNT_LSB);\r\n  *hitCountHigh = BL_RD_REG(L1C_BASE, L1C_HIT_CNT_MSB);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get cache miss count\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return Cache miss count\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nuint32_t ATTR_TCM_SECTION L1C_Cache_Miss_Count_Get(void) { return BL_RD_REG(L1C_BASE, L1C_MISS_CNT); }\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable read from flash or psram with cache\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION L1C_Cache_Read_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(L1C_BASE, L1C_CONFIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_CACHEABLE);\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  wrap set\r\n                                                                                *\r\n                                                                                * @param  wrap: ENABLE or DISABLE\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION L1C_Set_Wrap(BL_Fun_Type wrap) {\r\n  uint32_t tmpVal  = 0;\r\n  uint8_t  cacheEn = 0;\r\n\r\n  tmpVal  = BL_RD_REG(L1C_BASE, L1C_CONFIG);\r\n  cacheEn = BL_IS_REG_BIT_SET(L1C_BASE, L1C_CACHEABLE);\r\n\r\n  if (cacheEn != 0) {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_CACHEABLE);\r\n    BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(L1C_BASE, L1C_CONFIG);\r\n\r\n  if (wrap == ENABLE) {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_WRAP_DIS);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, L1C_WRAP_DIS);\r\n  }\r\n\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n\r\n  if (cacheEn != 0) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, L1C_CACHEABLE);\r\n    BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  cache way disable set\r\n                                                                                *\r\n                                                                                * @param  disableVal: cache way disable value\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION L1C_Set_Way_Disable(uint8_t disableVal) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(L1C_BASE, L1C_CONFIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_CACHEABLE);\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(L1C_BASE, L1C_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, L1C_WAY_DIS, disableVal);\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n\r\n  if (disableVal != 0x0f) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, L1C_CACHEABLE);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_CACHEABLE);\r\n  }\r\n\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set for ROM 2T access if CPU freq >120MHz\r\n                                                                                *\r\n                                                                                * @param  enable: ENABLE or DISABLE\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION L1C_IROM_2T_Access_Set(uint8_t enable) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(L1C_BASE, L1C_CONFIG);\r\n\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, L1C_IROM_2T_ACCESS);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_IROM_2T_ACCESS);\r\n  }\r\n\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  L1C BMX init\r\n                                                                                *\r\n                                                                                * @param  l1cBmxCfg: L1C BMX config\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type L1C_BMX_Init(L1C_BMX_Cfg_Type *l1cBmxCfg) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM((l1cBmxCfg->timeoutEn) <= 0xF);\r\n\r\n  tmpVal = BL_RD_REG(L1C_BASE, L1C_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, L1C_BMX_TIMEOUT_EN, l1cBmxCfg->timeoutEn);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, L1C_BMX_ERR_EN, l1cBmxCfg->errEn);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, L1C_BMX_ARB_MODE, l1cBmxCfg->arbMod);\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(L1C_BMX_ERR_IRQn, L1C_BMX_ERR_IRQHandler);\r\n  Interrupt_Handler_Register(L1C_BMX_TO_IRQn, L1C_BMX_TO_IRQHandler);\r\n#endif\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  L1C BMX address monitor enable\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type L1C_BMX_Addr_Monitor_Enable(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(L1C_BASE, L1C_BMX_ERR_ADDR_EN);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_BMX_ERR_ADDR_DIS);\r\n  BL_WR_REG(L1C_BASE, L1C_BMX_ERR_ADDR_EN, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  L1C BMX address monitor disable\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type L1C_BMX_Addr_Monitor_Disable(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(L1C_BASE, L1C_BMX_ERR_ADDR_EN);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, L1C_BMX_ERR_ADDR_DIS);\r\n  BL_WR_REG(L1C_BASE, L1C_BMX_ERR_ADDR_EN, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  L1C BMX bus error response enable\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type L1C_BMX_BusErrResponse_Enable(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(L1C_BASE, L1C_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, L1C_BMX_ERR_EN);\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  L1C BMX bus error response disable\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type L1C_BMX_BusErrResponse_Disable(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(L1C_BASE, L1C_CONFIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, L1C_BMX_ERR_EN);\r\n  BL_WR_REG(L1C_BASE, L1C_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get L1C BMX error status\r\n                                                                                *\r\n                                                                                * @param  errType: L1C BMX error status type\r\n                                                                                *\r\n                                                                                * @return SET or RESET\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type L1C_BMX_Get_Status(L1C_BMX_BUS_ERR_Type errType) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM(IS_L1C_BMX_BUS_ERR_TYPE(errType));\r\n\r\n  tmpVal = BL_RD_REG(L1C_BASE, L1C_BMX_ERR_ADDR_EN);\r\n\r\n  if (errType == L1C_BMX_BUS_ERR_TRUSTZONE_DECODE) {\r\n    return BL_GET_REG_BITS_VAL(tmpVal, L1C_BMX_ERR_TZ) ? SET : RESET;\r\n  } else {\r\n    return BL_GET_REG_BITS_VAL(tmpVal, L1C_BMX_ERR_DEC) ? SET : RESET;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get L1C BMX error address\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return NP L1C BMX error address\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t L1C_BMX_Get_Err_Addr(void) { return BL_RD_REG(L1C_BASE, L1C_BMX_ERR_ADDR); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  L1C BMX error interrupt callback install\r\n                                                                                *\r\n                                                                                * @param  intType: L1C BMX error interrupt type\r\n                                                                                * @param  cbFun: callback\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type L1C_BMX_ERR_INT_Callback_Install(L1C_BMX_ERR_INT_Type intType, intCallback_Type *cbFun) {\r\n  CHECK_PARAM(IS_L1C_BMX_ERR_INT_TYPE(intType));\r\n\r\n  l1cBmxErrIntCbfArra[intType] = cbFun;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  L1C BMX ERR interrupt IRQ handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid L1C_BMX_ERR_IRQHandler(void) {\r\n  L1C_BMX_ERR_INT_Type intType;\r\n\r\n  for (intType = L1C_BMX_ERR_INT_ERR; intType < L1C_BMX_ERR_INT_ALL; intType++) {\r\n    if (l1cBmxErrIntCbfArra[intType] != NULL) {\r\n      l1cBmxErrIntCbfArra[intType]();\r\n    }\r\n  }\r\n\r\n  while (1) {\r\n    // MSG(\"L1C_BMX_ERR_IRQHandler\\r\\n\");\r\n    BL702_Delay_MS(1000);\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  L1C BMX timeout interrupt callback install\r\n                                                                                *\r\n                                                                                * @param  intType: L1C BMX timeout interrupt type\r\n                                                                                * @param  cbFun: callback\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type L1C_BMX_TIMEOUT_INT_Callback_Install(L1C_BMX_TO_INT_Type intType, intCallback_Type *cbFun) {\r\n  CHECK_PARAM(IS_L1C_BMX_TO_INT_TYPE(intType));\r\n\r\n  l1cBmxToIntCbfArra[intType] = cbFun;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  L1C BMX Time Out interrupt IRQ handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid L1C_BMX_TO_IRQHandler(void) {\r\n  L1C_BMX_TO_INT_Type intType;\r\n\r\n  for (intType = L1C_BMX_TO_INT_TIMEOUT; intType < L1C_BMX_TO_INT_ALL; intType++) {\r\n    if (l1cBmxToIntCbfArra[intType] != NULL) {\r\n      l1cBmxToIntCbfArra[intType]();\r\n    }\r\n  }\r\n\r\n  while (1) {\r\n    // MSG(\"L1C_BMX_TO_IRQHandler\\r\\n\");\r\n    BL702_Delay_MS(1000);\r\n  }\r\n}\r\n#endif\r\n\r\n/*@} end of group L1C_Public_Functions */\r\n\r\n/*@} end of group L1C */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_mjpeg.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_mjpeg.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_mjpeg.h\"\r\n#include \"bl702.h\"\r\n#include \"bl702_glb.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  MJPEG\r\n *  @{\r\n */\r\n\r\n/** @defgroup  MJPEG_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group MJPEG_Private_Macros */\r\n\r\n/** @defgroup  MJPEG_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group MJPEG_Private_Types */\r\n\r\n/** @defgroup  MJPEG_Private_Variables\r\n *  @{\r\n */\r\nstatic intCallback_Type *mjpegIntCbfArra[MJPEG_INT_ALL] = {NULL};\r\n\r\n/*@} end of group MJPEG_Private_Variables */\r\n\r\n/** @defgroup  MJPEG_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group MJPEG_Global_Variables */\r\n\r\n/** @defgroup  MJPEG_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group MJPEG_Private_Fun_Declaration */\r\n\r\n/** @defgroup  MJPEG_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group MJPEG_Private_Functions */\r\n\r\n/** @defgroup  MJPEG_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Mjpeg module init\r\n                                                                                *\r\n                                                                                * @param  cfg: Mjpeg configuration structure pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid MJPEG_Init(MJPEG_CFG_Type *cfg) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Disable clock gate */\r\n  GLB_AHB_Slave1_Clock_Gate(DISABLE, BL_AHB_SLAVE1_MJPEG);\r\n\r\n  /* disable mjpeg */\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_CONTROL_1);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, MJPEG_REG_MJPEG_ENABLE);\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_CONTROL_1, tmpVal);\r\n\r\n  /* basic stuff */\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_CONTROL_1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_YUV_MODE, cfg->yuv);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_Q_MODE, cfg->quality);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_H_BUST, cfg->burst);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_MJPEG_BIT_ORDER, cfg->bitOrderEnable);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_ORDER_U_EVEN, cfg->evenOrderEnable);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_WR_OVER_STOP, cfg->overStopEnable);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_REFLECT_DMY, cfg->reflectDmy);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_LAST_HF_HBLK_DMY, cfg->verticalDmy);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_LAST_HF_WBLK_DMY, cfg->horizationalDmy);\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_CONTROL_1, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_CONTROL_2);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_MJPEG_WAIT_CYCLE, cfg->waitCount);\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_CONTROL_2, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_FRAME_SIZE);\r\n\r\n  switch (cfg->yuv) {\r\n  case MJPEG_YUV422_INTERLEAVE:\r\n  case MJPEG_YUV422_PLANAR:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_FRAME_WBLK, (cfg->resolutionX + 15) >> 4);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_FRAME_HBLK, (cfg->resolutionY + 7) >> 3);\r\n    break;\r\n\r\n  case MJPEG_YUV420:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_FRAME_WBLK, (cfg->resolutionX + 15) >> 4);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_FRAME_HBLK, (cfg->resolutionY + 15) >> 4);\r\n    break;\r\n\r\n  case MJPEG_YUV400:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_FRAME_WBLK, (cfg->resolutionX + 7) >> 3);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_FRAME_HBLK, (cfg->resolutionY + 7) >> 3);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_FRAME_SIZE, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_SWAP_MODE);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_W_SWAP_MODE, cfg->swapModeEnable);\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_SWAP_MODE, tmpVal);\r\n\r\n  /*align buffer to 16 bytes boundary, should be kept the same as CAM module*/\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_YY_FRAME_ADDR, (cfg->bufferCamYY & 0xFFFFFFF0));\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_UV_FRAME_ADDR, (cfg->bufferCamUV & 0xFFFFFFF0));\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_YUV_MEM, (cfg->sizeCamUV << 16) + cfg->sizeCamYY);\r\n\r\n  /*align buffer to 16 bytes boundary*/\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_JPEG_FRAME_ADDR, (cfg->bufferMjpeg & 0xFFFFFFF0));\r\n  /*align buffer size in unit of 64 bytes */\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_JPEG_STORE_MEMORY, cfg->sizeMjpeg >> 6);\r\n\r\n  /* Clear interrupt */\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_FRAME_FIFO_POP, 0x3F00);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(MJPEG_IRQn, MJPEG_IRQHandler);\r\n#endif\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Mjpeg packet mode configure\r\n                                                                                *\r\n                                                                                * @param  cfg: Packet configuration\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid MJPEG_Packet_Config(MJPEG_Packet_Type *cfg) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_PAKET_CTRL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_PKET_EN, cfg->packetEnable);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_JEND_TO_PEND, cfg->endToTail);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_PKET_BODY_BYTE, cfg->packetBody);\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_PAKET_CTRL, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_HEADER_BYTE);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_HEAD_BYTE, cfg->frameHead);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_TAIL_EXP, cfg->frameTail);\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_HEADER_BYTE, tmpVal);\r\n\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_PAKET_HEAD_TAIL, (cfg->packetTail << 16) + cfg->packetHead);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Mjpeg set YUYV order, only work in interleave mode\r\n                                                                                *\r\n                                                                                * @param  y0: Y0 order\r\n                                                                                * @param  u0: U0 order\r\n                                                                                * @param  y1: Y1 order\r\n                                                                                * @param  v0: V0 order\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid MJPEG_Set_YUYV_Order_Interleave(uint8_t y0, uint8_t u0, uint8_t y1, uint8_t v0) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_CONTROL_1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_Y0_ORDER, y0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_U0_ORDER, u0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_Y1_ORDER, y1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_V0_ORDER, v0);\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_CONTROL_1, tmpVal);\r\n\r\n  MJPEG_Set_YUYV_Order_Planar(0, 1);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Mjpeg set YY/UV order, only work in planar mode\r\n                                                                                *\r\n                                                                                * @param  yy: YY order\r\n                                                                                * @param  uv: UV order\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid MJPEG_Set_YUYV_Order_Planar(uint8_t yy, uint8_t uv) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_CONTROL_2);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_YY_DVP2AHB_LSEL, yy);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_YY_DVP2AHB_FSEL, yy);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_UV_DVP2AHB_LSEL, uv);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_UV_DVP2AHB_FSEL, uv);\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_CONTROL_2, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Deinit mjpeg module\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid MJPEG_Deinit(void) {\r\n  // GLB_AHB_Slave2_Reset(BL_AHB_SLAVE2_MJPEG);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable mjpeg module\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid MJPEG_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Enable mjpeg module */\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_CONTROL_1);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_MJPEG_ENABLE);\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_CONTROL_1, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable mjpeg module\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid MJPEG_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Disable mjpeg module */\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_CONTROL_1);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, MJPEG_REG_MJPEG_ENABLE);\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_CONTROL_1, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable&disable mjpeg software mode and set frame count\r\n                                                                                *\r\n                                                                                * @param  count: Frame count\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid MJPEG_SW_Enable(uint8_t count) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_CONTROL_2);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_SW_FRAME, count);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_MJPEG_SW_MODE);\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_CONTROL_2, tmpVal);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, MJPEG_REG_MJPEG_SW_MODE);\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_CONTROL_2, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  MJPEG software mode run, software mode enable first\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid MJPEG_SW_Run(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_CONTROL_2);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_MJPEG_SW_RUN);\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_CONTROL_2, tmpVal);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, MJPEG_REG_MJPEG_SW_RUN);\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_CONTROL_2, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get one mjpeg frame\r\n                                                                                *\r\n                                                                                * @param  info: Mjpeg frame infomation pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid MJPEG_Get_Frame_Info(MJPEG_Frame_Info *info) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_CONTROL_3);\r\n\r\n  info->validFrames   = BL_GET_REG_BITS_VAL(tmpVal, MJPEG_FRAME_VALID_CNT);\r\n  info->curFrameAddr  = BL_RD_REG(MJPEG_BASE, MJPEG_START_ADDR0);\r\n  info->curFrameBytes = (BL_RD_REG(MJPEG_BASE, MJPEG_BIT_CNT0) + 7) >> 3;\r\n  info->curFrameQ     = BL_RD_REG(MJPEG_BASE, MJPEG_Q_MODE0) & 0x3f;\r\n  info->status        = tmpVal;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get available count of frames\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return Frames count\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint8_t MJPEG_Get_Frame_Count(void) { return BL_GET_REG_BITS_VAL(BL_RD_REG(MJPEG_BASE, MJPEG_CONTROL_3), MJPEG_FRAME_VALID_CNT); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Pop one mjpeg frame\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid MJPEG_Pop_Frame(void) { BL_WR_REG(MJPEG_BASE, MJPEG_FRAME_FIFO_POP, 1); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Free current read memory block\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid MJPEG_Current_Block_Clear(void) { BL_WR_REG(MJPEG_BASE, MJPEG_FRAME_FIFO_POP, 0x2); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Current read memory block index\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return Block number\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nMJPEG_Swap_Block_Type MJPEG_Get_Current_Block(void) { return BL_GET_REG_BITS_VAL(BL_RD_REG(MJPEG_BASE, MJPEG_SWAP_MODE), MJPEG_STS_READ_SWAP_IDX); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get block status, full or not full\r\n                                                                                *\r\n                                                                                * @param  block: Block number\r\n                                                                                *\r\n                                                                                * @return Block status\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type MJPEG_Block_Is_Full(MJPEG_Swap_Block_Type block) {\r\n  CHECK_PARAM(IS_MJPEG_SWAP_BLOCK_TYPE(block));\r\n\r\n  if (MJPEG_BLOCK_0 == block) {\r\n    return BL_GET_REG_BITS_VAL(BL_RD_REG(MJPEG_BASE, MJPEG_SWAP_MODE), MJPEG_STS_SWAP0_FULL);\r\n  } else {\r\n    return BL_GET_REG_BITS_VAL(BL_RD_REG(MJPEG_BASE, MJPEG_SWAP_MODE), MJPEG_STS_SWAP1_FULL);\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Current read memory block is frame start\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return Set or reset\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type MJPEG_Current_Block_Is_Start(void) { return BL_GET_REG_BITS_VAL(BL_RD_REG(MJPEG_BASE, MJPEG_SWAP_MODE), MJPEG_STS_SWAP_FSTART); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Current read memory block is frame end\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return Set or reset\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type MJPEG_Current_Block_Is_End(void) { return BL_GET_REG_BITS_VAL(BL_RD_REG(MJPEG_BASE, MJPEG_SWAP_MODE), MJPEG_STS_SWAP_FEND); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get frame remain bit count in last block, only valid when current read memory block is\r\n                                                                                *         frame end\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return Bit count\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t MJPEG_Get_Remain_Bit(void) { return BL_RD_REG(MJPEG_BASE, MJPEG_SWAP_BIT_CNT); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set frame threshold to issue normal interrupt\r\n                                                                                *\r\n                                                                                * @param  count: Frame threshold\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid MJPEG_Set_Frame_Threshold(uint8_t count) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_CONTROL_3);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, MJPEG_REG_FRAME_CNT_TRGR_INT, count);\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_CONTROL_3, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  MJPEG Enable Disable Interrupt\r\n                                                                                *\r\n                                                                                * @param  intType: MJPEG Interrupt Type\r\n                                                                                * @param  intMask: Enable or Disable\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid MJPEG_IntMask(MJPEG_INT_Type intType, BL_Mask_Type intMask) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_MJPEG_INT_TYPE(intType));\r\n  CHECK_PARAM(IS_BL_MASK_TYPE(intMask));\r\n\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_CONTROL_3);\r\n\r\n  switch (intType) {\r\n  case MJPEG_INT_NORMAL:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_NORMAL_EN);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, MJPEG_REG_INT_NORMAL_EN);\r\n    }\r\n\r\n    break;\r\n\r\n  case MJPEG_INT_CAM_OVERWRITE:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_CAM_EN);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, MJPEG_REG_INT_CAM_EN);\r\n    }\r\n\r\n    break;\r\n\r\n  case MJPEG_INT_MEM_OVERWRITE:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_MEM_EN);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, MJPEG_REG_INT_MEM_EN);\r\n    }\r\n\r\n    break;\r\n\r\n  case MJPEG_INT_FRAME_OVERWRITE:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_FRAME_EN);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, MJPEG_REG_INT_FRAME_EN);\r\n    }\r\n\r\n    break;\r\n\r\n  case MJPEG_INT_BACK_IDLE:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_IDLE_EN);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, MJPEG_REG_INT_IDLE_EN);\r\n    }\r\n\r\n    break;\r\n\r\n  case MJPEG_INT_SWAP:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_SWAP_EN);\r\n    } else {\r\n      /* Disable this interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, MJPEG_REG_INT_SWAP_EN);\r\n    }\r\n\r\n    break;\r\n\r\n  case MJPEG_INT_ALL:\r\n    if (intMask == UNMASK) {\r\n      /* Enable all interrupt */\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_NORMAL_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_CAM_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_MEM_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_FRAME_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_IDLE_EN);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_SWAP_EN);\r\n    } else {\r\n      /* Disable all interrupt */\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, MJPEG_REG_INT_NORMAL_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, MJPEG_REG_INT_CAM_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, MJPEG_REG_INT_MEM_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, MJPEG_REG_INT_FRAME_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, MJPEG_REG_INT_IDLE_EN);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, MJPEG_REG_INT_SWAP_EN);\r\n    }\r\n\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_CONTROL_3, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  MJPEG Interrupt Clear\r\n                                                                                *\r\n                                                                                * @param  intType: MJPEG Interrupt Type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid MJPEG_IntClr(MJPEG_INT_Type intType) {\r\n  uint32_t tmpVal;\r\n\r\n  CHECK_PARAM(IS_MJPEG_INT_TYPE(intType));\r\n\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_FRAME_FIFO_POP);\r\n\r\n  switch (intType) {\r\n  case MJPEG_INT_NORMAL:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_NORMAL_CLR);\r\n    break;\r\n\r\n  case MJPEG_INT_CAM_OVERWRITE:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_CAM_CLR);\r\n    break;\r\n\r\n  case MJPEG_INT_MEM_OVERWRITE:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_MEM_CLR);\r\n    break;\r\n\r\n  case MJPEG_INT_FRAME_OVERWRITE:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_FRAME_CLR);\r\n    break;\r\n\r\n  case MJPEG_INT_BACK_IDLE:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_IDLE_CLR);\r\n    break;\r\n\r\n  case MJPEG_INT_SWAP:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, MJPEG_REG_INT_SWAP_CLR);\r\n    break;\r\n\r\n  case MJPEG_INT_ALL:\r\n    tmpVal = 0x3F00;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  BL_WR_REG(MJPEG_BASE, MJPEG_FRAME_FIFO_POP, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Install mjpeg interrupt callback function\r\n                                                                                *\r\n                                                                                * @param  intType: MJPEG interrupt type\r\n                                                                                * @param  cbFun: Pointer to interrupt callback function. The type should be void (*fn)(void)\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid MJPEG_Int_Callback_Install(MJPEG_INT_Type intType, intCallback_Type *cbFun) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_MJPEG_INT_TYPE(intType));\r\n\r\n  mjpegIntCbfArra[intType] = cbFun;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Mjpeg interrupt handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid MJPEG_IRQHandler(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(MJPEG_BASE, MJPEG_CONTROL_3);\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, MJPEG_STS_NORMAL_INT)) {\r\n    BL_WR_REG(MJPEG_BASE, MJPEG_FRAME_FIFO_POP, 0x100);\r\n\r\n    if (mjpegIntCbfArra[MJPEG_INT_NORMAL] != NULL) {\r\n      /* call the callback function */\r\n      mjpegIntCbfArra[MJPEG_INT_NORMAL]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, MJPEG_STS_CAM_INT)) {\r\n    BL_WR_REG(MJPEG_BASE, MJPEG_FRAME_FIFO_POP, 0x200);\r\n\r\n    if (mjpegIntCbfArra[MJPEG_INT_CAM_OVERWRITE] != NULL) {\r\n      /* call the callback function */\r\n      mjpegIntCbfArra[MJPEG_INT_CAM_OVERWRITE]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, MJPEG_STS_MEM_INT)) {\r\n    BL_WR_REG(MJPEG_BASE, MJPEG_FRAME_FIFO_POP, 0x400);\r\n\r\n    if (mjpegIntCbfArra[MJPEG_INT_MEM_OVERWRITE] != NULL) {\r\n      /* call the callback function */\r\n      mjpegIntCbfArra[MJPEG_INT_MEM_OVERWRITE]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, MJPEG_STS_FRAME_INT)) {\r\n    BL_WR_REG(MJPEG_BASE, MJPEG_FRAME_FIFO_POP, 0x800);\r\n\r\n    if (mjpegIntCbfArra[MJPEG_INT_FRAME_OVERWRITE] != NULL) {\r\n      /* call the callback function */\r\n      mjpegIntCbfArra[MJPEG_INT_FRAME_OVERWRITE]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, MJPEG_STS_IDLE_INT)) {\r\n    BL_WR_REG(MJPEG_BASE, MJPEG_FRAME_FIFO_POP, 0x1000);\r\n\r\n    if (mjpegIntCbfArra[MJPEG_INT_BACK_IDLE] != NULL) {\r\n      /* call the callback function */\r\n      mjpegIntCbfArra[MJPEG_INT_BACK_IDLE]();\r\n    }\r\n  }\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, MJPEG_STS_SWAP_INT)) {\r\n    BL_WR_REG(MJPEG_BASE, MJPEG_FRAME_FIFO_POP, 0x2000);\r\n\r\n    if (mjpegIntCbfArra[MJPEG_INT_SWAP] != NULL) {\r\n      /* call the callback function */\r\n      mjpegIntCbfArra[MJPEG_INT_SWAP]();\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/*@} end of group MJPEG_Public_Functions */\r\n\r\n/*@} end of group MJPEG */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_pds.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_pds.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_pds.h\"\r\n#include \"bl702.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  PDS\r\n *  @{\r\n */\r\n\r\n/** @defgroup  PDS_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group PDS_Private_Macros */\r\n\r\n/** @defgroup  PDS_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group PDS_Private_Types */\r\n\r\n/** @defgroup  PDS_Private_Variables\r\n *  @{\r\n */\r\nstatic intCallback_Type *pdsIntCbfArra[PDS_INT_MAX][1] = {{NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}};\r\n\r\n/*@} end of group PDS_Private_Variables */\r\n\r\n/** @defgroup  PDS_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group PDS_Global_Variables */\r\n\r\n/** @defgroup  PDS_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group PDS_Private_Fun_Declaration */\r\n\r\n/** @defgroup  PDS_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group PDS_Private_Functions */\r\n\r\n/** @defgroup  PDS_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  power down sleep ram configure\r\n                                                                                *\r\n                                                                                * @param  ramCfg: power down sleep force ram configuration\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION PDS_RAM_Config(PDS_RAM_CFG_Type *ramCfg) {\r\n  if (NULL == ramCfg) {\r\n    return ERROR;\r\n  }\r\n\r\n  /* PDS_RAM1 config */\r\n  BL_WR_REG(PDS_BASE, PDS_RAM1, *(uint32_t *)ramCfg);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  power down sleep set pad configure\r\n                                                                                *\r\n                                                                                * @param  pin: power down sleep pad num\r\n                                                                                * @param  cfg: power down sleep pad type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION PDS_Set_Pad_Config(PDS_PAD_PIN_Type pin, PDS_PAD_CFG_Type cfg) {\r\n  uint32_t tmpVal = 0;\r\n  uint32_t tmpPu  = 0;\r\n  uint32_t tmpPd  = 0;\r\n\r\n  if (pin < PDS_PAD_PIN_GPIO_23) {\r\n    /* GPIO17 - GPIO22 */\r\n    tmpVal = BL_RD_REG(PDS_BASE, PDS_GPIO_SET_PU_PD);\r\n\r\n    switch (cfg) {\r\n    case PDS_PAD_CFG_PULL_NONE:\r\n      tmpPd = BL_GET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_22_17_PD) & ~(1 << pin);\r\n      tmpPu = BL_GET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_22_17_PU) & ~(1 << pin);\r\n      break;\r\n\r\n    case PDS_PAD_CFG_PULL_DOWN:\r\n      tmpPd = BL_GET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_22_17_PD) | (1 << pin);\r\n      tmpPu = BL_GET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_22_17_PU) & ~(1 << pin);\r\n      break;\r\n\r\n    case PDS_PAD_CFG_PULL_UP:\r\n      tmpPd = BL_GET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_22_17_PD) & ~(1 << pin);\r\n      tmpPu = BL_GET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_22_17_PU) | (1 << pin);\r\n      break;\r\n\r\n    case PDS_PAD_CFG_ACTIVE_IE:\r\n      tmpPd = BL_GET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_22_17_PD) | (1 << pin);\r\n      tmpPu = BL_GET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_22_17_PU) | (1 << pin);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_22_17_PD, tmpPd);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_22_17_PU, tmpPu);\r\n    BL_WR_REG(PDS_BASE, PDS_GPIO_SET_PU_PD, tmpVal);\r\n  } else {\r\n    /* GPIO23 - GPIO28 */\r\n    tmpVal = BL_RD_REG(PDS_BASE, PDS_GPIO_SET_PU_PD);\r\n\r\n    switch (cfg) {\r\n    case PDS_PAD_CFG_PULL_NONE:\r\n      tmpPd = BL_GET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_28_23_PD) & ~(1 << (pin - PDS_PAD_PIN_GPIO_23));\r\n      tmpPu = BL_GET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_28_23_PU) & ~(1 << (pin - PDS_PAD_PIN_GPIO_23));\r\n      break;\r\n\r\n    case PDS_PAD_CFG_PULL_DOWN:\r\n      tmpPd = BL_GET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_28_23_PD) | (1 << (pin - PDS_PAD_PIN_GPIO_23));\r\n      tmpPu = BL_GET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_28_23_PU) & ~(1 << (pin - PDS_PAD_PIN_GPIO_23));\r\n      break;\r\n\r\n    case PDS_PAD_CFG_PULL_UP:\r\n      tmpPd = BL_GET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_28_23_PD) & ~(1 << (pin - PDS_PAD_PIN_GPIO_23));\r\n      tmpPu = BL_GET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_28_23_PU) | (1 << (pin - PDS_PAD_PIN_GPIO_23));\r\n      break;\r\n\r\n    case PDS_PAD_CFG_ACTIVE_IE:\r\n      tmpPd = BL_GET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_28_23_PD) | (1 << (pin - PDS_PAD_PIN_GPIO_23));\r\n      tmpPu = BL_GET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_28_23_PU) | (1 << (pin - PDS_PAD_PIN_GPIO_23));\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_28_23_PD, tmpPd);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CR_PDS_GPIO_28_23_PU, tmpPu);\r\n    BL_WR_REG(PDS_BASE, PDS_GPIO_SET_PU_PD, tmpVal);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable power down sleep\r\n                                                                                *\r\n                                                                                * @param  cfg: power down sleep configuration 1\r\n                                                                                * @param  cfg4: power down sleep configuration 2\r\n                                                                                * @param  pdsSleepCnt: power down sleep count cycle\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION PDS_App_Enable(PDS_CTL_Type *cfg, PDS_CTL4_Type *cfg4, uint32_t pdsSleepCnt) {\r\n  /* PDS sleep time 0 <=> sleep forever */\r\n  /* PDS sleep time 1~PDS_WARMUP_LATENCY_CNT <=> error */\r\n  /* PDS sleep time >PDS_WARMUP_LATENCY_CNT <=> correct */\r\n  if (!pdsSleepCnt) {\r\n    cfg->sleepForever = 0;\r\n  } else if ((pdsSleepCnt) && (pdsSleepCnt <= PDS_WARMUP_LATENCY_CNT)) {\r\n    return ERROR;\r\n  } else {\r\n    BL_WR_REG(PDS_BASE, PDS_TIME1, pdsSleepCnt - PDS_WARMUP_LATENCY_CNT);\r\n  }\r\n\r\n  /* PDS_CTL4 config */\r\n  BL_WR_REG(PDS_BASE, PDS_CTL4, *(uint32_t *)cfg4);\r\n\r\n  /* PDS_CTL config */\r\n  if (cfg->pdsStart) {\r\n    BL_WR_REG(PDS_BASE, PDS_CTL, (*(uint32_t *)cfg & ~(1 << 0)));\r\n    BL_WR_REG(PDS_BASE, PDS_CTL, (*(uint32_t *)cfg | (1 << 0)));\r\n  } else {\r\n    BL_WR_REG(PDS_BASE, PDS_CTL, *(uint32_t *)cfg);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  power down sleep force configure\r\n                                                                                *\r\n                                                                                * @param  cfg2: power down sleep force configuration 1\r\n                                                                                * @param  cfg3: power down sleep force configuration 2\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION PDS_Force_Config(PDS_CTL2_Type *cfg2, PDS_CTL3_Type *cfg3) {\r\n  /* PDS_CTL2 config */\r\n  BL_WR_REG(PDS_BASE, PDS_CTL2, *(uint32_t *)cfg2);\r\n\r\n  /* PDS_CTL3 config */\r\n  BL_WR_REG(PDS_BASE, PDS_CTL3, *(uint32_t *)cfg3);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  power down sleep force configure\r\n                                                                                *\r\n                                                                                * @param  defaultLvCfg: power down sleep default level configuration\r\n                                                                                * @param  pdsSleepCnt: power down sleep time count\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION PDS_Default_Level_Config(PDS_DEFAULT_LV_CFG_Type *defaultLvCfg, uint32_t pdsSleepCnt) {\r\n  PDS_Force_Config((PDS_CTL2_Type *)&(defaultLvCfg->pdsCtl2), (PDS_CTL3_Type *)&(defaultLvCfg->pdsCtl3));\r\n  PDS_App_Enable((PDS_CTL_Type *)&(defaultLvCfg->pdsCtl), (PDS_CTL4_Type *)&(defaultLvCfg->pdsCtl4), pdsSleepCnt);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  power down sleep int enable\r\n                                                                                *\r\n                                                                                * @param  intType: PDS int type\r\n                                                                                * @param  enable: ENABLE or DISABLE\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type PDS_IntEn(PDS_INT_Type intType, BL_Fun_Type enable) {\r\n  uint32_t offset = 0;\r\n  uint32_t tmpVal = 0;\r\n\r\n  if ((intType < PDS_INT_PDS_SLEEP_CNT) || (intType > PDS_INT_KYS_QDEC)) {\r\n    return ERROR;\r\n  }\r\n\r\n  switch (intType) {\r\n  case PDS_INT_WAKEUP:\r\n  case PDS_INT_RF_DONE:\r\n  case PDS_INT_PLL_DONE:\r\n    return ERROR;\r\n\r\n  case PDS_INT_PDS_SLEEP_CNT:\r\n    offset = 16;\r\n    break;\r\n\r\n  case PDS_INT_HBN_IRQ_OUT0:\r\n    offset = 17;\r\n    break;\r\n\r\n  case PDS_INT_HBN_IRQ_OUT1:\r\n    offset = 18;\r\n    break;\r\n\r\n  case PDS_INT_GPIO_IRQ:\r\n    offset = 19;\r\n    break;\r\n\r\n  case PDS_INT_IRRX:\r\n    offset = 20;\r\n    break;\r\n\r\n  case PDS_INT_BLE_SLP_IRQ:\r\n    offset = 21;\r\n    break;\r\n\r\n  case PDS_INT_USB_WKUP:\r\n    offset = 22;\r\n    break;\r\n\r\n  case PDS_INT_KYS_QDEC:\r\n    offset = 23;\r\n    break;\r\n\r\n  case PDS_INT_MAX:\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_INT);\r\n\r\n  if (enable) {\r\n    tmpVal = tmpVal | (1 << offset);\r\n  } else {\r\n    tmpVal = tmpVal & ~(1 << offset);\r\n  }\r\n\r\n  BL_WR_REG(PDS_BASE, PDS_INT, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  power down sleep int mask\r\n                                                                                *\r\n                                                                                * @param  intType: PDS int type\r\n                                                                                * @param  intMask: MASK or UNMASK\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type PDS_IntMask(PDS_INT_Type intType, BL_Mask_Type intMask) {\r\n  uint32_t offset = 0;\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (intType > PDS_INT_PLL_DONE) {\r\n    return ERROR;\r\n  }\r\n\r\n  switch (intType) {\r\n  case PDS_INT_WAKEUP:\r\n    offset = 8;\r\n    break;\r\n\r\n  case PDS_INT_RF_DONE:\r\n    offset = 10;\r\n    break;\r\n\r\n  case PDS_INT_PLL_DONE:\r\n    offset = 11;\r\n    break;\r\n\r\n  case PDS_INT_PDS_SLEEP_CNT:\r\n  case PDS_INT_HBN_IRQ_OUT0:\r\n  case PDS_INT_HBN_IRQ_OUT1:\r\n  case PDS_INT_GPIO_IRQ:\r\n  case PDS_INT_IRRX:\r\n  case PDS_INT_BLE_SLP_IRQ:\r\n  case PDS_INT_USB_WKUP:\r\n  case PDS_INT_KYS_QDEC:\r\n  case PDS_INT_MAX:\r\n  default:\r\n    return ERROR;\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_INT);\r\n\r\n  if (intMask != UNMASK) {\r\n    tmpVal = tmpVal | (1 << offset);\r\n  } else {\r\n    tmpVal = tmpVal & ~(1 << offset);\r\n  }\r\n\r\n  BL_WR_REG(PDS_BASE, PDS_INT, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get power down sleep int status\r\n                                                                                *\r\n                                                                                * @param  intType: PDS int type\r\n                                                                                *\r\n                                                                                * @return SET or RESET\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type PDS_Get_IntStatus(PDS_INT_Type intType) {\r\n  uint32_t offset = 0;\r\n\r\n  switch (intType) {\r\n  case PDS_INT_WAKEUP:\r\n    offset = 0;\r\n    break;\r\n\r\n  case PDS_INT_RF_DONE:\r\n    offset = 2;\r\n    break;\r\n\r\n  case PDS_INT_PLL_DONE:\r\n    offset = 3;\r\n    break;\r\n\r\n  case PDS_INT_PDS_SLEEP_CNT:\r\n    offset = 24;\r\n    break;\r\n\r\n  case PDS_INT_HBN_IRQ_OUT0:\r\n    offset = 25;\r\n    break;\r\n\r\n  case PDS_INT_HBN_IRQ_OUT1:\r\n    offset = 26;\r\n    break;\r\n\r\n  case PDS_INT_GPIO_IRQ:\r\n    offset = 27;\r\n    break;\r\n\r\n  case PDS_INT_IRRX:\r\n    offset = 28;\r\n    break;\r\n\r\n  case PDS_INT_BLE_SLP_IRQ:\r\n    offset = 29;\r\n    break;\r\n\r\n  case PDS_INT_USB_WKUP:\r\n    offset = 30;\r\n    break;\r\n\r\n  case PDS_INT_KYS_QDEC:\r\n    offset = 31;\r\n    break;\r\n\r\n  case PDS_INT_MAX:\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return (BL_RD_REG(PDS_BASE, PDS_INT) & (1 << offset)) ? SET : RESET;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  clear power down sleep int status\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type PDS_IntClear(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_INT);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_CR_PDS_INT_CLR);\r\n  BL_WR_REG(PDS_BASE, PDS_INT, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_INT);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, PDS_CR_PDS_INT_CLR);\r\n  BL_WR_REG(PDS_BASE, PDS_INT, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_INT);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_CR_PDS_INT_CLR);\r\n  BL_WR_REG(PDS_BASE, PDS_INT, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get power down sleep PLL status\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return PDS PLL status\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nPDS_PLL_STS_Type PDS_Get_PdsPllStstus(void) { return (PDS_PLL_STS_Type)BL_GET_REG_BITS_VAL(BL_RD_REG(PDS_BASE, PDS_STAT), PDS_RO_PDS_PLL_STATE); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get power down sleep RF status\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return PDS RF status\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nPDS_RF_STS_Type PDS_Get_PdsRfStstus(void) { return (PDS_RF_STS_Type)BL_GET_REG_BITS_VAL(BL_RD_REG(PDS_BASE, PDS_STAT), PDS_RO_PDS_RF_STATE); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get power down sleep status\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return PDS status\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nPDS_STS_Type PDS_Get_PdsStstus(void) { return (PDS_STS_Type)BL_GET_REG_BITS_VAL(BL_RD_REG(PDS_BASE, PDS_STAT), PDS_RO_PDS_STATE); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  power down sleep clear reset event\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type PDS_Clear_Reset_Event(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_INT);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_CLR_RESET_EVENT);\r\n  BL_WR_REG(PDS_BASE, PDS_INT, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_INT);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, PDS_CLR_RESET_EVENT);\r\n  BL_WR_REG(PDS_BASE, PDS_INT, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_INT);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_CLR_RESET_EVENT);\r\n  BL_WR_REG(PDS_BASE, PDS_INT, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get power down sleep reset event\r\n                                                                                *\r\n                                                                                * @param  event: power down sleep reset event\r\n                                                                                *\r\n                                                                                * @return SET or RESET\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type PDS_Get_Reset_Event(PDS_RST_EVENT_Type event) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_INT);\r\n  tmpVal = BL_GET_REG_BITS_VAL(tmpVal, PDS_RESET_EVENT);\r\n\r\n  return (tmpVal & (1 << event)) ? SET : RESET;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set power down sleep VDDCORE gpio interrupt config\r\n                                                                                *\r\n                                                                                * @param  src: PDS VDDCORE src pin num\r\n                                                                                * @param  mode: PDS VDDCORE src pin interrupt type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type PDS_Set_Vddcore_GPIO_IntCfg(PDS_VDDCORE_GPIO_SRC_Type src, PDS_AON_GPIO_INT_Trigger_Type mode) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM(IS_PDS_VDDCORE_GPIO_SRC_TYPE(src));\r\n  CHECK_PARAM(IS_PDS_AON_GPIO_INT_Trigger_TYPE(mode));\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_GPIO_INT);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_GPIO_INT_SELECT, src);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_GPIO_INT_MODE, mode);\r\n  BL_WR_REG(PDS_BASE, PDS_GPIO_INT, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set power down sleep VDDCORE gpio interrupt mask\r\n                                                                                *\r\n                                                                                * @param  intMask: None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type PDS_Set_Vddcore_GPIO_IntMask(BL_Mask_Type intMask) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_GPIO_INT);\r\n\r\n  if (intMask != UNMASK) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, PDS_GPIO_INT_MASK);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_GPIO_INT_MASK);\r\n  }\r\n\r\n  BL_WR_REG(PDS_BASE, PDS_GPIO_INT, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set power down sleep VDDCORE gpio interrupt mask\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type PDS_Get_Vddcore_GPIO_IntStatus(void) { return BL_GET_REG_BITS_VAL(BL_RD_REG(PDS_BASE, PDS_GPIO_INT), PDS_GPIO_INT_STAT) ? SET : RESET; }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set power down sleep VDDCORE gpio interrupt mask\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type PDS_Set_Vddcore_GPIO_IntClear(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_GPIO_INT);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_GPIO_INT_CLR);\r\n  BL_WR_REG(PDS_BASE, PDS_GPIO_INT, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_GPIO_INT);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, PDS_GPIO_INT_CLR);\r\n  BL_WR_REG(PDS_BASE, PDS_GPIO_INT, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_GPIO_INT);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_GPIO_INT_CLR);\r\n  BL_WR_REG(PDS_BASE, PDS_GPIO_INT, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Install PDS interrupt callback function\r\n                                                                                *\r\n                                                                                * @param  intType: PDS int type\r\n                                                                                * @param  cbFun: cbFun: Pointer to interrupt callback function. The type should be void (*fn)(void)\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type PDS_Int_Callback_Install(PDS_INT_Type intType, intCallback_Type *cbFun) {\r\n  pdsIntCbfArra[intType][0] = cbFun;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Trim RC32M\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION PDS_Trim_RC32M(void) {\r\n  Efuse_Ana_RC32M_Trim_Type trim;\r\n  int32_t                   tmpVal = 0;\r\n\r\n  EF_Ctrl_Read_RC32M_Trim(&trim);\r\n\r\n  if (trim.trimRc32mExtCodeEn) {\r\n    if (trim.trimRc32mCodeFrExtParity == EF_Ctrl_Get_Trim_Parity(trim.trimRc32mCodeFrExt, 8)) {\r\n      tmpVal = BL_RD_REG(PDS_BASE, PDS_RC32M_CTRL0);\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_RC32M_CODE_FR_EXT, trim.trimRc32mCodeFrExt);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, PDS_RC32M_EXT_CODE_EN);\r\n      BL_WR_REG(PDS_BASE, PDS_RC32M_CTRL0, tmpVal);\r\n      BL702_Delay_US(2);\r\n      return SUCCESS;\r\n    }\r\n  }\r\n\r\n  return ERROR;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Select RC32M as PLL ref source\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION PDS_Select_RC32M_As_PLL_Ref(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CLKPLL_TOP_CTRL);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, PDS_CLKPLL_XTAL_RC32M_SEL);\r\n  BL_WR_REG(PDS_BASE, PDS_CLKPLL_TOP_CTRL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Select XTAL as PLL ref source\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION PDS_Select_XTAL_As_PLL_Ref(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CLKPLL_TOP_CTRL);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_CLKPLL_XTAL_RC32M_SEL);\r\n  BL_WR_REG(PDS_BASE, PDS_CLKPLL_TOP_CTRL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Power on PLL\r\n                                                                                *\r\n                                                                                * @param  xtalType: xtal type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION PDS_Power_On_PLL(PDS_PLL_XTAL_Type xtalType) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* Check parameter*/\r\n  CHECK_PARAM(IS_PDS_PLL_XTAL_TYPE(xtalType));\r\n\r\n  /**************************/\r\n  /* select PLL XTAL source */\r\n  /**************************/\r\n\r\n  if ((xtalType == PDS_PLL_XTAL_RC32M) || (xtalType == PDS_PLL_XTAL_NONE)) {\r\n    PDS_Trim_RC32M();\r\n    PDS_Select_RC32M_As_PLL_Ref();\r\n  } else {\r\n    PDS_Select_XTAL_As_PLL_Ref();\r\n  }\r\n\r\n  /*******************************************/\r\n  /* PLL power down first, not indispensable */\r\n  /*******************************************/\r\n  /* power off PLL first, this step is not indispensable */\r\n  PDS_Power_Off_PLL();\r\n\r\n  /********************/\r\n  /* PLL param config */\r\n  /********************/\r\n\r\n  /* clkpll_icp_1u */\r\n  /* clkpll_icp_5u */\r\n  /* clkpll_int_frac_sw */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CLKPLL_CP);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_ICP_1U, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_ICP_5U, 2);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_INT_FRAC_SW, 0);\r\n  BL_WR_REG(PDS_BASE, PDS_CLKPLL_CP, tmpVal);\r\n\r\n  /* clkpll_c3 */\r\n  /* clkpll_cz */\r\n  /* clkpll_rz */\r\n  /* clkpll_r4 */\r\n  /* clkpll_r4_short */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CLKPLL_RZ);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_C3, 3);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_CZ, 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_RZ, 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_R4_SHORT, 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_R4, 2);\r\n  BL_WR_REG(PDS_BASE, PDS_CLKPLL_RZ, tmpVal);\r\n\r\n  /* clkpll_refdiv_ratio */\r\n  /* clkpll_postdiv */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CLKPLL_TOP_CTRL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_POSTDIV, 0x14);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_REFDIV_RATIO, 2);\r\n  BL_WR_REG(PDS_BASE, PDS_CLKPLL_TOP_CTRL, tmpVal);\r\n\r\n  /* clkpll_sdmin */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CLKPLL_SDM);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_SDMIN, 0x3C0000);\r\n  BL_WR_REG(PDS_BASE, PDS_CLKPLL_SDM, tmpVal);\r\n\r\n  /* clkpll_sel_fb_clk */\r\n  /* clkpll_sel_sample_clk can be 0/1, default is 1 */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CLKPLL_FBDV);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_SEL_FB_CLK, 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_SEL_SAMPLE_CLK, 1);\r\n  BL_WR_REG(PDS_BASE, PDS_CLKPLL_FBDV, tmpVal);\r\n\r\n  /*************************/\r\n  /* PLL power up sequence */\r\n  /*************************/\r\n\r\n  /* pu_clkpll_sfreg=1 */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_PU_RST_CLKPLL);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, PDS_PU_CLKPLL_SFREG);\r\n  BL_WR_REG(PDS_BASE, PDS_PU_RST_CLKPLL, tmpVal);\r\n\r\n  BL702_Delay_US(5);\r\n\r\n  /* pu_clkpll=1 */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_PU_RST_CLKPLL);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, PDS_PU_CLKPLL);\r\n  BL_WR_REG(PDS_BASE, PDS_PU_RST_CLKPLL, tmpVal);\r\n\r\n  /* clkpll_pu_cp=1 */\r\n  /* clkpll_pu_pfd=1 */\r\n  /* clkpll_pu_fbdv=1 */\r\n  /* clkpll_pu_postdiv=1 */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_PU_RST_CLKPLL);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, PDS_CLKPLL_PU_CP);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, PDS_CLKPLL_PU_PFD);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, PDS_CLKPLL_PU_FBDV);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, PDS_CLKPLL_PU_POSTDIV);\r\n  BL_WR_REG(PDS_BASE, PDS_PU_RST_CLKPLL, tmpVal);\r\n\r\n  BL702_Delay_US(5);\r\n\r\n  /* clkpll_sdm_reset=1 */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_PU_RST_CLKPLL);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, PDS_CLKPLL_SDM_RESET);\r\n  BL_WR_REG(PDS_BASE, PDS_PU_RST_CLKPLL, tmpVal);\r\n  BL702_Delay_US(1);\r\n  /* clkpll_reset_fbdv=1 */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_PU_RST_CLKPLL);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, PDS_CLKPLL_RESET_FBDV);\r\n  BL_WR_REG(PDS_BASE, PDS_PU_RST_CLKPLL, tmpVal);\r\n  BL702_Delay_US(2);\r\n  /* clkpll_reset_fbdv=0 */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_PU_RST_CLKPLL);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_CLKPLL_RESET_FBDV);\r\n  BL_WR_REG(PDS_BASE, PDS_PU_RST_CLKPLL, tmpVal);\r\n  BL702_Delay_US(1);\r\n  /* clkpll_sdm_reset=0 */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_PU_RST_CLKPLL);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_CLKPLL_SDM_RESET);\r\n  BL_WR_REG(PDS_BASE, PDS_PU_RST_CLKPLL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n/** PLL output config **/\r\n/*\r\n[8]    1'h0    r/w    clkpll_en_32m\r\n[7]    1'h0    r/w    clkpll_en_48m\r\n[6]    1'h0    r/w    clkpll_en_80m\r\n[5]    1'h0    r/w    clkpll_en_96m\r\n[4]    1'h0    r/w    clkpll_en_120m\r\n[3]    1'h0    r/w    clkpll_en_160m\r\n[2]    1'h0    r/w    clkpll_en_192m\r\n[1]    1'h0    r/w    clkpll_en_240m\r\n[0]    1'h0    r/w    clkpll_en_480m\r\n*/\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable all PLL clock\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION PDS_Enable_PLL_All_Clks(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CLKPLL_OUTPUT_EN);\r\n  tmpVal |= 0x1FF;\r\n  BL_WR_REG(PDS_BASE, PDS_CLKPLL_OUTPUT_EN, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable all PLL clock\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION PDS_Disable_PLL_All_Clks(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CLKPLL_OUTPUT_EN);\r\n  tmpVal &= (~0x1FF);\r\n  BL_WR_REG(PDS_BASE, PDS_CLKPLL_OUTPUT_EN, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable PLL clock\r\n                                                                                *\r\n                                                                                * @param  pllClk: PLL clock type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION PDS_Enable_PLL_Clk(PDS_PLL_CLK_Type pllClk) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* Check parameter*/\r\n  CHECK_PARAM(IS_PDS_PLL_CLK_TYPE(pllClk));\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CLKPLL_OUTPUT_EN);\r\n  tmpVal |= (1 << pllClk);\r\n  BL_WR_REG(PDS_BASE, PDS_CLKPLL_OUTPUT_EN, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable PLL clock\r\n                                                                                *\r\n                                                                                * @param  pllClk: PLL clock type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION PDS_Disable_PLL_Clk(PDS_PLL_CLK_Type pllClk) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* Check parameter*/\r\n  CHECK_PARAM(IS_PDS_PLL_CLK_TYPE(pllClk));\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CLKPLL_OUTPUT_EN);\r\n  tmpVal &= (~(1 << pllClk));\r\n  BL_WR_REG(PDS_BASE, PDS_CLKPLL_OUTPUT_EN, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Power off PLL\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION PDS_Power_Off_PLL(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* pu_clkpll_sfreg=0 */\r\n  /* pu_clkpll=0 */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_PU_RST_CLKPLL);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_PU_CLKPLL_SFREG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_PU_CLKPLL);\r\n  BL_WR_REG(PDS_BASE, PDS_PU_RST_CLKPLL, tmpVal);\r\n\r\n  /* clkpll_pu_cp=0 */\r\n  /* clkpll_pu_pfd=0 */\r\n  /* clkpll_pu_fbdv=0 */\r\n  /* clkpll_pu_postdiv=0 */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_PU_RST_CLKPLL);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_CLKPLL_PU_CP);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_CLKPLL_PU_PFD);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_CLKPLL_PU_FBDV);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_CLKPLL_PU_POSTDIV);\r\n  BL_WR_REG(PDS_BASE, PDS_PU_RST_CLKPLL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set Audio PLL clock\r\n                                                                                *\r\n                                                                                * @param  audioPLLFreq: Audio PLL sel frequency , have two vaild input 12.288 or 11.289 MHZ\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n__WEAK\r\nBL_Err_Type ATTR_CLOCK_SECTION PDS_Set_Audio_PLL_Freq(PDS_AUDIO_PLL_Type audioPLLFreq) {\r\n  uint32_t sdmin_table[] = {0x374BC6, 0x32CCED, 0x32CCED, 0x6E978D, 0x6C0000};\r\n  uint32_t tmpVal        = 0;\r\n\r\n  CHECK_PARAM(IS_PDS_AUDIO_PLL_TYPE(audioPLLFreq));\r\n\r\n  /*set PDS_CLKPLL_REFDIV_RATIO as 0x2 */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CLKPLL_TOP_CTRL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_REFDIV_RATIO, 0x2);\r\n  BL_WR_REG(PDS_BASE, PDS_CLKPLL_TOP_CTRL, tmpVal);\r\n\r\n  /*set clkpll_sdmin as sdmin*/\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CLKPLL_SDM);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_SDMIN, (uint32_t)sdmin_table[audioPLLFreq % (sizeof(sdmin_table) / sizeof(sdmin_table[0]))]);\r\n\r\n  BL_WR_REG(PDS_BASE, PDS_CLKPLL_SDM, tmpVal);\r\n\r\n  /*reset pll */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_PU_RST_CLKPLL);\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_PU_CLKPLL_SFREG, 1);\r\n  BL_WR_REG(PDS_BASE, PDS_PU_RST_CLKPLL, tmpVal);\r\n\r\n  BL702_Delay_MS(10);\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_PU_CLKPLL, 1);\r\n  BL_WR_REG(PDS_BASE, PDS_PU_RST_CLKPLL, tmpVal);\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_RESET_FBDV, 1);\r\n  BL_WR_REG(PDS_BASE, PDS_PU_RST_CLKPLL, tmpVal);\r\n\r\n  BL702_Delay_MS(10);\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_RESET_FBDV, 0);\r\n  BL_WR_REG(PDS_BASE, PDS_PU_RST_CLKPLL, tmpVal);\r\n\r\n  /*set div for audio pll */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CLKPLL_TOP_CTRL);\r\n\r\n  if (audioPLLFreq != AUDIO_PLL_5644800_HZ) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_POSTDIV, 36);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_POSTDIV, 72);\r\n  }\r\n\r\n  BL_WR_REG(PDS_BASE, PDS_CLKPLL_TOP_CTRL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PDS software reset\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION PDS_Reset(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal                  = *(uint32_t *)0x40000010;\r\n  tmpVal                  = tmpVal | (1 << 14);\r\n  *(uint32_t *)0x40000010 = tmpVal;\r\n\r\n  tmpVal                  = *(uint32_t *)0x40000010;\r\n  tmpVal                  = tmpVal & ~(1 << 14);\r\n  *(uint32_t *)0x40000010 = tmpVal;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable power down sleep\r\n                                                                                *\r\n                                                                                * @param  cfg: power down sleep configuration 1\r\n                                                                                * @param  pdsSleepCnt: power down sleep count cycle\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION PDS_Enable(PDS_CFG_Type *cfg, uint32_t pdsSleepCnt) {\r\n  uint32_t *p = (uint32_t *)cfg;\r\n\r\n  if (pdsSleepCnt - PDS_WARMUP_CNT <= 0) {\r\n    return;\r\n  }\r\n\r\n  BL_WR_REG(PDS_BASE, PDS_TIME1, pdsSleepCnt - PDS_WARMUP_CNT);\r\n\r\n  /* Set PDS control register  */\r\n  BL_WR_REG(PDS_BASE, PDS_CTL, *p);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PDS Auto mode wake up counter config\r\n                                                                                *\r\n                                                                                * @param  sleepDuration: sleep time, total pds = sleep_duration + max_warmup_cnt (32K clock cycles),\r\n                                                                                *                        recommend maxWarmCnt*N+2\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION PDS_Auto_Time_Config(uint32_t sleepDuration) {\r\n  /* PDS_TIME1 */\r\n  BL_WR_REG(PDS_BASE, PDS_TIME1, sleepDuration);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PDS Auto mode config and enable\r\n                                                                                *\r\n                                                                                * @param  powerCfg: PDS Auto mode power domain config\r\n                                                                                * @param  normalCfg: PDS Auto mode power normal config\r\n                                                                                * @param  enable: PDS Auto mode Enable or Disable\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION PDS_Auto_Enable(PDS_AUTO_POWER_DOWN_CFG_Type *powerCfg, PDS_AUTO_NORMAL_CFG_Type *normalCfg, BL_Fun_Type enable) {\r\n  uint32_t pdsCtl = 0;\r\n\r\n  CHECK_PARAM(IS_PDS_LDO_VOLTAGE_TYPE(normalCfg->vddcoreVol));\r\n\r\n  /* power config */\r\n  pdsCtl |= (powerCfg->mbgPower << 31) | (powerCfg->ldo18rfPower << 30) | (powerCfg->sfregPower << 29) | (powerCfg->pllPower << 28) | (powerCfg->cpu0Power << 19) | (powerCfg->rc32mPower << 17) |\r\n            (powerCfg->xtalPower << 14) | (powerCfg->allPower << 13) | (powerCfg->isoPower << 11) | (powerCfg->bzPower << 10) | (powerCfg->sramDisStanby << 9) | (powerCfg->cgPower << 8) |\r\n            (powerCfg->cpu1Power << 7) | (powerCfg->usbPower << 3);\r\n  pdsCtl = BL_SET_REG_BITS_VAL(pdsCtl, PDS_CR_PDS_LDO_VOL, normalCfg->vddcoreVol);\r\n  pdsCtl |= (normalCfg->vddcoreVolEn << 18) | (normalCfg->cpu0NotNeedWFI << 21) | (normalCfg->cpu1NotNeedWFI << 20) | (normalCfg->busReset << 16) | (normalCfg->disIrqWakeUp << 15) |\r\n            (normalCfg->powerOffXtalForever << 2) | (normalCfg->sleepForever << 1);\r\n  BL_WR_REG(PDS_BASE, PDS_CTL, pdsCtl);\r\n\r\n  pdsCtl = BL_RD_REG(PDS_BASE, PDS_CTL);\r\n\r\n  if (enable) {\r\n    pdsCtl |= (1 << 0);\r\n  } else {\r\n    pdsCtl &= ~(1 << 0);\r\n  }\r\n\r\n  BL_WR_REG(PDS_BASE, PDS_CTL, pdsCtl);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PDS force turn off XXX domain\r\n                                                                                *\r\n                                                                                * @param  domain: PDS domain\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION PDS_Manual_Force_Turn_Off(PDS_FORCE_Type domain) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* memory sleep */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CTL2);\r\n  tmpVal |= 1 << (domain + PDS_FORCE_MEM_STBY_OFFSET);\r\n  BL_WR_REG(PDS_BASE, PDS_CTL2, tmpVal);\r\n\r\n  /* gate clock */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CTL2);\r\n  tmpVal |= 1 << (domain + PDS_FORCE_GATE_CLK_OFFSET);\r\n  BL_WR_REG(PDS_BASE, PDS_CTL2, tmpVal);\r\n\r\n  /* pds reset */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CTL2);\r\n  tmpVal |= 1 << (domain + PDS_FORCE_PDS_RST_OFFSET);\r\n  BL_WR_REG(PDS_BASE, PDS_CTL2, tmpVal);\r\n\r\n  /* isolation on */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CTL2);\r\n  tmpVal |= 1 << (domain + PDS_FORCE_ISO_EN_OFFSET);\r\n  BL_WR_REG(PDS_BASE, PDS_CTL2, tmpVal);\r\n\r\n  /* power off */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CTL2);\r\n  tmpVal |= 1 << (domain + PDS_FORCE_PWR_OFF_OFFSET);\r\n  BL_WR_REG(PDS_BASE, PDS_CTL2, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PDS force turn on XXX domain\r\n                                                                                *\r\n                                                                                * @param  domain: PDS domain\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION PDS_Manual_Force_Turn_On(PDS_FORCE_Type domain) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* power on */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CTL2);\r\n  tmpVal &= ~(1 << (domain + PDS_FORCE_PWR_OFF_OFFSET));\r\n  BL_WR_REG(PDS_BASE, PDS_CTL2, tmpVal);\r\n\r\n  /* isolation off */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CTL2);\r\n  tmpVal &= ~(1 << (domain + PDS_FORCE_ISO_EN_OFFSET));\r\n  BL_WR_REG(PDS_BASE, PDS_CTL2, tmpVal);\r\n\r\n  /* pds de_reset */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CTL2);\r\n  tmpVal &= ~(1 << (domain + PDS_FORCE_PDS_RST_OFFSET));\r\n  BL_WR_REG(PDS_BASE, PDS_CTL2, tmpVal);\r\n\r\n  /* memory active */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CTL2);\r\n  tmpVal &= ~(1 << (domain + PDS_FORCE_MEM_STBY_OFFSET));\r\n  BL_WR_REG(PDS_BASE, PDS_CTL2, tmpVal);\r\n\r\n  /* clock on */\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CTL2);\r\n  tmpVal &= ~(1 << (domain + PDS_FORCE_GATE_CLK_OFFSET));\r\n  BL_WR_REG(PDS_BASE, PDS_CTL2, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Power down sleep wake up interrupt handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid PDS_WAKEUP_IRQHandler(void) {\r\n  for (PDS_INT_Type intType = PDS_INT_WAKEUP; intType < PDS_INT_MAX; intType++) {\r\n    if (PDS_Get_IntStatus(intType) && (pdsIntCbfArra[intType][0] != NULL)) {\r\n      pdsIntCbfArra[intType][0]();\r\n    }\r\n  }\r\n  PDS_Set_Vddcore_GPIO_IntClear();\r\n  PDS_IntClear();\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PDS wakeup IRQHandler install\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type PDS_WAKEUP_IRQHandler_Install(void) {\r\n  Interrupt_Handler_Register(PDS_WAKEUP_IRQn, PDS_WAKEUP_IRQHandler);\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief\r\n                                                                                *\r\n                                                                                * @param\r\n                                                                                *\r\n                                                                                * @return\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type PDS_Set_Clkpll_Top_Ctrl(uint8_t vg11Sel) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(PDS_BASE, PDS_CLKPLL_TOP_CTRL);\r\n  // clkpll_vg11_sel\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_CLKPLL_VG11_SEL, vg11Sel);\r\n  BL_WR_REG(PDS_BASE, PDS_CLKPLL_TOP_CTRL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/*@} end of group PDS_Public_Functions */\r\n\r\n/*@} end of group PDS */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_psram.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_psram.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_psram.h\"\r\n#include \"bl702_l1c.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  PSRAM\r\n *  @{\r\n */\r\n\r\n/** @defgroup  PSRAM_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group PSRAM_Private_Macros */\r\n\r\n/** @defgroup  PSRAM_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group PSRAM_Private_Types */\r\n\r\n/** @defgroup  PSRAM_Private_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group PSRAM_Private_Variables */\r\n\r\n/** @defgroup  PSRAM_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group PSRAM_Global_Variables */\r\n\r\n/** @defgroup  PSRAM_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group PSRAM_Private_Fun_Declaration */\r\n\r\n/** @defgroup  PSRAM_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group PSRAM_Private_Functions */\r\n\r\n/** @defgroup  PSRAM_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Init serial psram control interface\r\n                                                                                *\r\n                                                                                * @param  psramCfg: Serial psram parameter configuration pointer\r\n                                                                                * @param  cmdsCfg: Serial Serial Flash controller configuration pointer\r\n                                                                                * @param  sfCtrlPsramCfg: Serial psram controller configuration pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n// #ifndef BFLB_USE_ROM_DRIVER\r\n//__WEAK\r\nvoid ATTR_TCM_SECTION Psram_Init(SPI_Psram_Cfg_Type *psramCfg, SF_Ctrl_Cmds_Cfg *cmdsCfg, SF_Ctrl_Psram_Cfg *sfCtrlPsramCfg) {\r\n  SF_Ctrl_Psram_Init(sfCtrlPsramCfg);\r\n  SF_Ctrl_Cmds_Set(cmdsCfg);\r\n\r\n  Psram_SetDriveStrength(psramCfg);\r\n  Psram_SetBurstWrap(psramCfg);\r\n}\r\n// #endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Read psram register\r\n                                                                                *\r\n                                                                                * @param  psramCfg: Serial psram parameter configuration pointer\r\n                                                                                * @param  regValue: Register value pointer to store data\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION Psram_ReadReg(SPI_Psram_Cfg_Type *psramCfg, uint8_t *regValue) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PSRAM_CTRL_MODE(psramCfg->ctrlMode));\r\n\r\n  uint8_t *const       psramCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  SF_Ctrl_Cmd_Cfg_Type psramCmd;\r\n\r\n  if (((uint32_t)&psramCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&psramCmd, 0, sizeof(psramCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&psramCmd, 0, sizeof(psramCmd));\r\n  }\r\n\r\n  if (psramCfg->ctrlMode == PSRAM_QPI_CTRL_MODE) {\r\n    psramCmd.cmdMode  = SF_CTRL_CMD_4_LINES;\r\n    psramCmd.addrMode = SF_CTRL_ADDR_4_LINES;\r\n    psramCmd.dataMode = SF_CTRL_DATA_4_LINES;\r\n  }\r\n\r\n  psramCmd.cmdBuf[0] = (psramCfg->readRegCmd) << 24;\r\n  psramCmd.rwFlag    = SF_CTRL_READ;\r\n  psramCmd.addrSize  = 3;\r\n  psramCmd.dummyClks = psramCfg->readRegDmyClk;\r\n  psramCmd.nbData    = 1;\r\n\r\n  SF_Ctrl_SendCmd(&psramCmd);\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n  }\r\n\r\n  BL702_MemCpy(regValue, psramCtrlBuf, 1);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Write psram register\r\n                                                                                *\r\n                                                                                * @param  psramCfg: Serial psram parameter configuration pointer\r\n                                                                                * @param  regValue: Register value pointer storing data\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION Psram_WriteReg(SPI_Psram_Cfg_Type *psramCfg, uint8_t *regValue) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PSRAM_CTRL_MODE(psramCfg->ctrlMode));\r\n\r\n  uint8_t *const       psramCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  SF_Ctrl_Cmd_Cfg_Type psramCmd;\r\n\r\n  if (((uint32_t)&psramCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&psramCmd, 0, sizeof(psramCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&psramCmd, 0, sizeof(psramCmd));\r\n  }\r\n\r\n  BL702_MemCpy(psramCtrlBuf, regValue, 1);\r\n\r\n  if (psramCfg->ctrlMode == PSRAM_QPI_CTRL_MODE) {\r\n    psramCmd.cmdMode  = SF_CTRL_CMD_4_LINES;\r\n    psramCmd.addrMode = SF_CTRL_ADDR_4_LINES;\r\n    psramCmd.dataMode = SF_CTRL_DATA_4_LINES;\r\n  }\r\n\r\n  psramCmd.cmdBuf[0] = (psramCfg->writeRegCmd) << 24;\r\n  psramCmd.rwFlag    = SF_CTRL_WRITE;\r\n  psramCmd.addrSize  = 3;\r\n  psramCmd.nbData    = 1;\r\n\r\n  SF_Ctrl_SendCmd(&psramCmd);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set psram driver strength\r\n                                                                                *\r\n                                                                                * @param  psramCfg: Serial psram parameter configuration pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION Psram_SetDriveStrength(SPI_Psram_Cfg_Type *psramCfg) {\r\n  uint32_t stat = 0;\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PSRAM_DRIVE_STRENGTH(psramCfg->driveStrength));\r\n\r\n  Psram_ReadReg(psramCfg, (uint8_t *)&stat);\r\n\r\n  if ((stat & 0x3) == psramCfg->driveStrength) {\r\n    return SUCCESS;\r\n  }\r\n\r\n  stat &= (~0x3);\r\n  stat |= psramCfg->driveStrength;\r\n\r\n  Psram_WriteReg(psramCfg, (uint8_t *)&stat);\r\n  /* Wait for write done */\r\n\r\n  Psram_ReadReg(psramCfg, (uint8_t *)&stat);\r\n\r\n  if ((stat & 0x3) == psramCfg->driveStrength) {\r\n    return SUCCESS;\r\n  }\r\n\r\n  return ERROR;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set psram burst wrap size\r\n                                                                                *\r\n                                                                                * @param  psramCfg: Serial psram parameter configuration pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION Psram_SetBurstWrap(SPI_Psram_Cfg_Type *psramCfg) {\r\n  uint32_t stat = 0;\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PSRAM_BURST_LENGTH(psramCfg->burstLength));\r\n\r\n  Psram_ReadReg(psramCfg, (uint8_t *)&stat);\r\n\r\n  if (((stat >> 5) & 0x3) == psramCfg->burstLength) {\r\n    return SUCCESS;\r\n  }\r\n\r\n  stat &= (~(0x3 << 5));\r\n  stat |= (psramCfg->burstLength << 5);\r\n\r\n  Psram_WriteReg(psramCfg, (uint8_t *)&stat);\r\n  /* Wait for write done */\r\n\r\n  Psram_ReadReg(psramCfg, (uint8_t *)&stat);\r\n\r\n  if (((stat >> 5) & 0x3) == psramCfg->burstLength) {\r\n    return SUCCESS;\r\n  }\r\n\r\n  return ERROR;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get psram ID\r\n                                                                                *\r\n                                                                                * @param  psramCfg: Serial psram parameter configuration pointer\r\n                                                                                * @param  data: Data pointer to store read data\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION Psram_ReadId(SPI_Psram_Cfg_Type *psramCfg, uint8_t *data) {\r\n  uint8_t *const       psramCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  SF_Ctrl_Cmd_Cfg_Type psramCmd;\r\n\r\n  if (((uint32_t)&psramCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&psramCmd, 0, sizeof(psramCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&psramCmd, 0, sizeof(psramCmd));\r\n  }\r\n\r\n  psramCmd.cmdBuf[0] = (psramCfg->readIdCmd) << 24;\r\n  psramCmd.rwFlag    = SF_CTRL_READ;\r\n  psramCmd.addrSize  = 3;\r\n  psramCmd.dummyClks = psramCfg->readIdDmyClk;\r\n  psramCmd.nbData    = 8;\r\n\r\n  SF_Ctrl_SendCmd(&psramCmd);\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n  }\r\n\r\n  BL702_MemCpy(data, psramCtrlBuf, 8);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Psram enter quad mode\r\n                                                                                *\r\n                                                                                * @param  psramCfg: Serial psram parameter configuration pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION Psram_EnterQuadMode(SPI_Psram_Cfg_Type *psramCfg) {\r\n  SF_Ctrl_Cmd_Cfg_Type psramCmd;\r\n\r\n  if (((uint32_t)&psramCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&psramCmd, 0, sizeof(psramCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&psramCmd, 0, sizeof(psramCmd));\r\n  }\r\n\r\n  psramCmd.cmdBuf[0] = (psramCfg->enterQuadModeCmd) << 24;\r\n  psramCmd.rwFlag    = SF_CTRL_READ;\r\n\r\n  SF_Ctrl_SendCmd(&psramCmd);\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Psram exit quad mode\r\n                                                                                *\r\n                                                                                * @param  psramCfg: Serial psram parameter configuration pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION Psram_ExitQuadMode(SPI_Psram_Cfg_Type *psramCfg) {\r\n  SF_Ctrl_Cmd_Cfg_Type psramCmd;\r\n\r\n  if (((uint32_t)&psramCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&psramCmd, 0, sizeof(psramCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&psramCmd, 0, sizeof(psramCmd));\r\n  }\r\n\r\n  psramCmd.cmdMode  = SF_CTRL_CMD_4_LINES;\r\n  psramCmd.addrMode = SF_CTRL_ADDR_4_LINES;\r\n  psramCmd.dataMode = SF_CTRL_DATA_4_LINES;\r\n\r\n  psramCmd.cmdBuf[0] = (psramCfg->exitQuadModeCmd) << 24;\r\n  psramCmd.rwFlag    = SF_CTRL_READ;\r\n\r\n  SF_Ctrl_SendCmd(&psramCmd);\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Psram toggle burst length\r\n                                                                                *\r\n                                                                                * @param  psramCfg: Serial psram parameter configuration pointer\r\n                                                                                * @param  ctrlMode: Psram ctrl mode type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION Psram_ToggleBurstLength(SPI_Psram_Cfg_Type *psramCfg, PSRAM_Ctrl_Mode ctrlMode) {\r\n  SF_Ctrl_Cmd_Cfg_Type psramCmd;\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PSRAM_CTRL_MODE(ctrlMode));\r\n\r\n  if (((uint32_t)&psramCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&psramCmd, 0, sizeof(psramCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&psramCmd, 0, sizeof(psramCmd));\r\n  }\r\n\r\n  if (ctrlMode == PSRAM_QPI_CTRL_MODE) {\r\n    psramCmd.cmdMode  = SF_CTRL_CMD_4_LINES;\r\n    psramCmd.addrMode = SF_CTRL_ADDR_4_LINES;\r\n    psramCmd.dataMode = SF_CTRL_DATA_4_LINES;\r\n  }\r\n\r\n  psramCmd.cmdBuf[0] = (psramCfg->burstToggleCmd) << 24;\r\n  psramCmd.rwFlag    = SF_CTRL_READ;\r\n\r\n  SF_Ctrl_SendCmd(&psramCmd);\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Psram software reset\r\n                                                                                *\r\n                                                                                * @param  psramCfg: Serial psram parameter configuration pointer\r\n                                                                                * @param  ctrlMode: Psram ctrl mode type\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION Psram_SoftwareReset(SPI_Psram_Cfg_Type *psramCfg, PSRAM_Ctrl_Mode ctrlMode) {\r\n  SF_Ctrl_Cmd_Cfg_Type psramCmd;\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PSRAM_CTRL_MODE(ctrlMode));\r\n\r\n  if (((uint32_t)&psramCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&psramCmd, 0, sizeof(psramCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&psramCmd, 0, sizeof(psramCmd));\r\n  }\r\n\r\n  if (ctrlMode == PSRAM_QPI_CTRL_MODE) {\r\n    psramCmd.cmdMode  = SF_CTRL_CMD_4_LINES;\r\n    psramCmd.addrMode = SF_CTRL_ADDR_4_LINES;\r\n    psramCmd.dataMode = SF_CTRL_DATA_4_LINES;\r\n  }\r\n\r\n  /* Reset enable */\r\n  psramCmd.cmdBuf[0] = (psramCfg->resetEnableCmd) << 24;\r\n  /* rwFlag don't care */\r\n  psramCmd.rwFlag = SF_CTRL_READ;\r\n  /* Wait for write done */\r\n\r\n  SF_Ctrl_SendCmd(&psramCmd);\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n  }\r\n\r\n  /* Reset */\r\n  psramCmd.cmdBuf[0] = (psramCfg->resetCmd) << 24;\r\n  /* rwFlag don't care */\r\n  psramCmd.rwFlag = SF_CTRL_READ;\r\n  SF_Ctrl_SendCmd(&psramCmd);\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n  }\r\n\r\n  BL702_Delay_US(50);\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Psram set IDbus config\r\n                                                                                *\r\n                                                                                * @param  psramCfg: Serial psram parameter configuration pointer\r\n                                                                                * @param  ioMode: Psram ctrl mode type\r\n                                                                                * @param  addr: Address to read/write\r\n                                                                                * @param  len: Data length to read/write\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION Psram_Set_IDbus_Cfg(SPI_Psram_Cfg_Type *psramCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint32_t len) {\r\n  uint8_t              cmd, dummyClks;\r\n  SF_Ctrl_Cmd_Cfg_Type psramCmd;\r\n  uint8_t              cmdValid = 1;\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SF_CTRL_IO_TYPE(ioMode));\r\n\r\n  SF_Ctrl_Set_Owner(SF_CTRL_OWNER_IAHB);\r\n\r\n  /* read mode cache set */\r\n  if (((uint32_t)&psramCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&psramCmd, 0, sizeof(psramCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&psramCmd, 0, sizeof(psramCmd));\r\n  }\r\n\r\n  if (SF_CTRL_NIO_MODE == ioMode) {\r\n    cmd       = psramCfg->fReadCmd;\r\n    dummyClks = psramCfg->fReadDmyClk;\r\n  } else if (SF_CTRL_QIO_MODE == ioMode) {\r\n    psramCmd.addrMode = SF_CTRL_ADDR_4_LINES;\r\n    psramCmd.dataMode = SF_CTRL_DATA_4_LINES;\r\n    cmd               = psramCfg->fReadQuadCmd;\r\n    dummyClks         = psramCfg->fReadQuadDmyClk;\r\n  } else {\r\n    return ERROR;\r\n  }\r\n\r\n  /* prepare command */\r\n  psramCmd.rwFlag    = SF_CTRL_READ;\r\n  psramCmd.addrSize  = 3;\r\n  psramCmd.cmdBuf[0] = (cmd << 24) | addr;\r\n  psramCmd.dummyClks = dummyClks;\r\n  psramCmd.nbData    = len;\r\n  SF_Ctrl_Psram_Read_Icache_Set(&psramCmd, cmdValid);\r\n\r\n  /* write mode cache set */\r\n  if (((uint32_t)&psramCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&psramCmd, 0, sizeof(psramCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&psramCmd, 0, sizeof(psramCmd));\r\n  }\r\n\r\n  if (SF_CTRL_NIO_MODE == ioMode) {\r\n    cmd = psramCfg->writeCmd;\r\n  } else if (SF_CTRL_QIO_MODE == ioMode) {\r\n    psramCmd.addrMode = SF_CTRL_ADDR_4_LINES;\r\n    psramCmd.dataMode = SF_CTRL_DATA_4_LINES;\r\n    cmd               = psramCfg->quadWriteCmd;\r\n  } else {\r\n    return ERROR;\r\n  }\r\n\r\n  dummyClks = 0;\r\n\r\n  /* prepare command */\r\n  psramCmd.rwFlag    = SF_CTRL_WRITE;\r\n  psramCmd.addrSize  = 3;\r\n  psramCmd.cmdBuf[0] = (cmd << 24) | addr;\r\n  psramCmd.dummyClks = dummyClks;\r\n  psramCmd.nbData    = len;\r\n  SF_Ctrl_Psram_Write_Icache_Set(&psramCmd, cmdValid);\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set cache write to psram with cache\r\n                                                                                *\r\n                                                                                * @param  psramCfg: Serial psram parameter configuration pointer\r\n                                                                                * @param  ioMode: Psram controller interface mode\r\n                                                                                * @param  wtEn: Psram cache write through enable\r\n                                                                                * @param  wbEn: Psram cache write back enable\r\n                                                                                * @param  waEn: Psram cache write allocate enable\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION Psram_Cache_Write_Set(SPI_Psram_Cfg_Type *psramCfg, SF_Ctrl_IO_Type ioMode, BL_Fun_Type wtEn, BL_Fun_Type wbEn, BL_Fun_Type waEn) {\r\n  BL_Err_Type stat;\r\n\r\n  /* Cache now only support 32 bytes read */\r\n  stat = Psram_Set_IDbus_Cfg(psramCfg, ioMode, 0, 32);\r\n\r\n  if (SUCCESS != stat) {\r\n    return stat;\r\n  }\r\n\r\n  L1C_Cache_Write_Set(wtEn, wbEn, waEn);\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Write psram one region\r\n                                                                                *\r\n                                                                                * @param  psramCfg: Serial psram parameter configuration pointer\r\n                                                                                * @param  ioMode: Write mode: SPI mode or QPI mode\r\n                                                                                * @param  addr: Start address to be write\r\n                                                                                * @param  data: Data pointer to be write\r\n                                                                                * @param  len: Data length to be write\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION Psram_Write(SPI_Psram_Cfg_Type *psramCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t *data, uint32_t len) {\r\n  uint8_t *const       psramCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  uint32_t             i = 0, curLen = 0;\r\n  uint32_t             burstLen = 512;\r\n  uint8_t              cmd;\r\n  SF_Ctrl_Cmd_Cfg_Type psramCmd;\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SF_CTRL_IO_TYPE(ioMode));\r\n\r\n  if (((uint32_t)&psramCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&psramCmd, 0, sizeof(psramCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&psramCmd, 0, sizeof(psramCmd));\r\n  }\r\n\r\n  if (SF_CTRL_NIO_MODE == ioMode) {\r\n    cmd = psramCfg->writeCmd;\r\n  } else if (SF_CTRL_QIO_MODE == ioMode) {\r\n    psramCmd.addrMode = SF_CTRL_ADDR_4_LINES;\r\n    psramCmd.dataMode = SF_CTRL_DATA_4_LINES;\r\n    cmd               = psramCfg->quadWriteCmd;\r\n  } else {\r\n    return ERROR;\r\n  }\r\n\r\n  /* Prepare command */\r\n  psramCmd.rwFlag   = SF_CTRL_WRITE;\r\n  psramCmd.addrSize = 3;\r\n\r\n  if (psramCfg->burstLength == PSRAM_BURST_LENGTH_16_BYTES) {\r\n    burstLen = 16;\r\n  } else if (psramCfg->burstLength == PSRAM_BURST_LENGTH_32_BYTES) {\r\n    burstLen = 32;\r\n  } else if (psramCfg->burstLength == PSRAM_BURST_LENGTH_64_BYTES) {\r\n    burstLen = 64;\r\n  } else if (psramCfg->burstLength == PSRAM_BURST_LENGTH_512_BYTES) {\r\n    burstLen = 512;\r\n  }\r\n\r\n  for (i = 0; i < len;) {\r\n    /* Get current programmed length within page size */\r\n    curLen = burstLen - addr % burstLen;\r\n\r\n    if (curLen > len - i) {\r\n      curLen = len - i;\r\n    }\r\n\r\n    /* Prepare command */\r\n    BL702_MemCpy_Fast(psramCtrlBuf, data, curLen);\r\n    psramCmd.cmdBuf[0] = (cmd << 24) | (addr);\r\n    psramCmd.nbData    = curLen;\r\n\r\n    SF_Ctrl_SendCmd(&psramCmd);\r\n\r\n    /* Adjust address and programmed length */\r\n    addr += curLen;\r\n    i += curLen;\r\n    data += curLen;\r\n\r\n    /* Wait for write done */\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Read data from psram\r\n                                                                                *\r\n                                                                                * @param  psramCfg: Serial psram parameter configuration pointer\r\n                                                                                * @param  ioMode: IoMode: psram controller interface mode\r\n                                                                                * @param  addr: Psram read start address\r\n                                                                                * @param  data: Data pointer to store data read from psram\r\n                                                                                * @param  len: Data length to read\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION Psram_Read(SPI_Psram_Cfg_Type *psramCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t *data, uint32_t len) {\r\n  uint8_t *const       psramCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  uint32_t             curLen, i;\r\n  uint32_t             burstLen = 512;\r\n  uint8_t              cmd, dummyClks;\r\n  SF_Ctrl_Cmd_Cfg_Type psramCmd;\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SF_CTRL_IO_TYPE(ioMode));\r\n\r\n  if (((uint32_t)&psramCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&psramCmd, 0, sizeof(psramCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&psramCmd, 0, sizeof(psramCmd));\r\n  }\r\n\r\n  if (SF_CTRL_NIO_MODE == ioMode) {\r\n    cmd       = psramCfg->fReadCmd;\r\n    dummyClks = psramCfg->fReadDmyClk;\r\n  } else if (SF_CTRL_QIO_MODE == ioMode) {\r\n    psramCmd.addrMode = SF_CTRL_ADDR_4_LINES;\r\n    psramCmd.dataMode = SF_CTRL_DATA_4_LINES;\r\n    cmd               = psramCfg->fReadQuadCmd;\r\n    dummyClks         = psramCfg->fReadQuadDmyClk;\r\n  } else {\r\n    return ERROR;\r\n  }\r\n\r\n  /* Prepare command */\r\n  psramCmd.rwFlag    = SF_CTRL_READ;\r\n  psramCmd.addrSize  = 3;\r\n  psramCmd.dummyClks = dummyClks;\r\n\r\n  if (psramCfg->burstLength == PSRAM_BURST_LENGTH_16_BYTES) {\r\n    burstLen = 16;\r\n  } else if (psramCfg->burstLength == PSRAM_BURST_LENGTH_32_BYTES) {\r\n    burstLen = 32;\r\n  } else if (psramCfg->burstLength == PSRAM_BURST_LENGTH_64_BYTES) {\r\n    burstLen = 64;\r\n  } else if (psramCfg->burstLength == PSRAM_BURST_LENGTH_512_BYTES) {\r\n    burstLen = 512;\r\n  }\r\n\r\n  /* Read data */\r\n  for (i = 0; i < len;) {\r\n    /* Prepare command */\r\n    psramCmd.cmdBuf[0] = (cmd << 24) | (addr);\r\n    curLen             = burstLen - addr % burstLen;\r\n\r\n    if (curLen > len - i) {\r\n      curLen = len - i;\r\n    }\r\n\r\n    if (curLen >= FLASH_CTRL_BUF_SIZE) {\r\n      curLen          = FLASH_CTRL_BUF_SIZE;\r\n      psramCmd.nbData = curLen;\r\n    } else {\r\n      /* Make sf_ctrl word read */\r\n      psramCmd.nbData = ((curLen + 3) >> 2) << 2;\r\n    }\r\n\r\n    SF_Ctrl_SendCmd(&psramCmd);\r\n\r\n    while (SET == SF_Ctrl_GetBusyState()) {\r\n    }\r\n\r\n    BL702_MemCpy_Fast(data, psramCtrlBuf, curLen);\r\n\r\n    addr += curLen;\r\n    i += curLen;\r\n    data += curLen;\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/*@} end of group PSRAM_Public_Functions */\r\n\r\n/*@} end of group PSRAM */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_pwm.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_pwm.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_pwm.h\"\r\n#include \"bl702_glb.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  PWM\r\n *  @{\r\n */\r\n\r\n/** @defgroup  PWM_Private_Macros\r\n *  @{\r\n */\r\n#define PWM_Get_Channel_Reg(ch) (PWM_BASE + PWM_CHANNEL_OFFSET + (ch) * 0x20)\r\n#define PWM_INT_TIMEOUT_COUNT   (160 * 1000)\r\n#define PWM_STOP_TIMEOUT_COUNT  (160 * 1000)\r\n\r\n/*@} end of group PWM_Private_Macros */\r\n\r\n/** @defgroup  PWM_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group PWM_Private_Types */\r\n\r\n/** @defgroup  PWM_Private_Variables\r\n *  @{\r\n */\r\n\r\n/**\r\n *  @brief PWM interrupt callback function address array\r\n */\r\nstatic intCallback_Type *PWMIntCbfArra[PWM_CH_MAX][PWM_INT_ALL] = {{NULL}};\r\n\r\n/*@} end of group PWM_Private_Variables */\r\n\r\n/** @defgroup  PWM_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group PWM_Global_Variables */\r\n\r\n/** @defgroup  PWM_Private_Fun_Declaration\r\n *  @{\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nstatic BL_Err_Type PWM_IntHandler(IRQn_Type intPeriph);\r\n#endif\r\n\r\n/*@} end of group PWM_Private_Fun_Declaration */\r\n\r\n/** @defgroup  PWM_Private_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************\r\n * @brief  PWM interrupt handle\r\n *\r\n * @param  intPeriph: Select the peripheral, such as PWM0_IRQn\r\n *\r\n * @return SUCCESS\r\n *\r\n *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nstatic BL_Err_Type PWM_IntHandler(IRQn_Type intPeriph) {\r\n  uint32_t i;\r\n  uint32_t tmpVal;\r\n  uint32_t timeoutCnt = PWM_INT_TIMEOUT_COUNT;\r\n  /* Get channel register */\r\n  uint32_t PWMx = PWM_BASE;\r\n\r\n  for (i = 0; i < PWM_CH_MAX; i++) {\r\n    tmpVal = BL_RD_REG(PWMx, PWM_INT_CONFIG);\r\n\r\n    if ((BL_GET_REG_BITS_VAL(tmpVal, PWM_INTERRUPT_STS) & (1 << i)) != 0) {\r\n      /* Clear interrupt */\r\n      tmpVal |= (1 << (i + PWM_INT_CLEAR_POS));\r\n      BL_WR_REG(PWMx, PWM_INT_CONFIG, tmpVal);\r\n\r\n      /* FIXME: we need set pwm_int_clear to 0 by software and\r\n         before this,we must make sure pwm_interrupt_sts is 0*/\r\n      do {\r\n        tmpVal = BL_RD_REG(PWMx, PWM_INT_CONFIG);\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          break;\r\n        }\r\n      } while (BL_GET_REG_BITS_VAL(tmpVal, PWM_INTERRUPT_STS) & (1 << i));\r\n\r\n      tmpVal &= (~(1 << (i + PWM_INT_CLEAR_POS)));\r\n      BL_WR_REG(PWMx, PWM_INT_CONFIG, tmpVal);\r\n\r\n      if (PWMIntCbfArra[i][PWM_INT_PULSE_CNT] != NULL) {\r\n        /* Call the callback function */\r\n        PWMIntCbfArra[i][PWM_INT_PULSE_CNT]();\r\n      }\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/*@} end of group PWM_Private_Functions */\r\n\r\n/** @defgroup  PWM_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************\r\n * @brief  PWM channel init\r\n *\r\n * @param  chCfg: PWM configuration\r\n *\r\n * @return SUCCESS\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type PWM_Channel_Init(PWM_CH_CFG_Type *chCfg) {\r\n  uint32_t tmpVal;\r\n  uint32_t timeoutCnt = PWM_STOP_TIMEOUT_COUNT;\r\n  /* Get channel register */\r\n  uint32_t PWMx = PWM_Get_Channel_Reg(chCfg->ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PWM_CH_ID_TYPE(chCfg->ch));\r\n  CHECK_PARAM(IS_PWM_CLK_TYPE(chCfg->clk));\r\n  CHECK_PARAM(IS_PWM_POLARITY_TYPE(chCfg->pol));\r\n  CHECK_PARAM(IS_PWM_STOP_MODE_TYPE(chCfg->stopMode));\r\n\r\n  /* Disable clock gate */\r\n  GLB_AHB_Slave1_Clock_Gate(DISABLE, BL_AHB_SLAVE1_PWM);\r\n\r\n  /* Config pwm clock and polarity */\r\n  tmpVal = BL_RD_REG(PWMx, PWM_CONFIG);\r\n  BL_WR_REG(PWMx, PWM_CONFIG, BL_SET_REG_BIT(tmpVal, PWM_STOP_EN));\r\n\r\n  while (!BL_IS_REG_BIT_SET(BL_RD_REG(PWMx, PWM_CONFIG), PWM_STS_TOP)) {\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(PWMx, PWM_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PWM_REG_CLK_SEL, chCfg->clk);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PWM_OUT_INV, chCfg->pol);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PWM_STOP_MODE, chCfg->stopMode);\r\n  BL_WR_REG(PWMx, PWM_CONFIG, tmpVal);\r\n\r\n  /* Config pwm division */\r\n  BL_WR_REG(PWMx, PWM_CLKDIV, chCfg->clkDiv);\r\n\r\n  /* Config pwm period and duty */\r\n  BL_WR_REG(PWMx, PWM_THRE1, chCfg->threshold1);\r\n  BL_WR_REG(PWMx, PWM_THRE2, chCfg->threshold2);\r\n  BL_WR_REG(PWMx, PWM_PERIOD, chCfg->period);\r\n\r\n  /* Config interrupt pulse count */\r\n  tmpVal = BL_RD_REG(PWMx, PWM_INTERRUPT);\r\n  BL_WR_REG(PWMx, PWM_INTERRUPT, BL_SET_REG_BITS_VAL(tmpVal, PWM_INT_PERIOD_CNT, chCfg->intPulseCnt));\r\n  // PWM_IntMask(chCfg->ch, PWM_INT_PULSE_CNT, chCfg->intPulseCnt != 0 ? UNMASK : MASK);\r\n  CPU_Interrupt_Disable(PWM_IRQn);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  PWM channel update source memory address and len\r\n *\r\n * @param  ch: PWM channel\r\n * @param  period: period\r\n * @param  threshold1: threshold1\r\n * @param  threshold2: threshold2\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid PWM_Channel_Update(PWM_CH_ID_Type ch, uint16_t period, uint16_t threshold1, uint16_t threshold2) {\r\n  /* Get channel register */\r\n  uint32_t PWMx = PWM_Get_Channel_Reg(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PWM_CH_ID_TYPE(ch));\r\n\r\n  /* Config pwm period and duty */\r\n  BL_WR_REG(PWMx, PWM_THRE1, threshold1);\r\n  BL_WR_REG(PWMx, PWM_THRE2, threshold2);\r\n  BL_WR_REG(PWMx, PWM_PERIOD, period);\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  PWM channel update clock divider\r\n *\r\n * @param  ch: PWM channel\r\n * @param  div: Clock divider\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid PWM_Channel_Set_Div(PWM_CH_ID_Type ch, uint16_t div) {\r\n  /* Get channel register */\r\n  uint32_t PWMx = PWM_Get_Channel_Reg(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PWM_CH_ID_TYPE(ch));\r\n\r\n  BL_WR_REG(PWMx, PWM_CLKDIV, div);\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  PWM channel update threshold1\r\n *\r\n * @param  ch: PWM channel\r\n * @param  threshold1: threshold1\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid PWM_Channel_Set_Threshold1(PWM_CH_ID_Type ch, uint16_t threshold1) {\r\n  /* Get channel register */\r\n  uint32_t PWMx = PWM_Get_Channel_Reg(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PWM_CH_ID_TYPE(ch));\r\n\r\n  /* Config pwm period and duty */\r\n  BL_WR_REG(PWMx, PWM_THRE1, threshold1);\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  PWM channel update threshold2\r\n *\r\n * @param  ch: PWM channel\r\n * @param  threshold2: threshold2\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid PWM_Channel_Set_Threshold2(PWM_CH_ID_Type ch, uint16_t threshold2) {\r\n  /* Get channel register */\r\n  uint32_t PWMx = PWM_Get_Channel_Reg(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PWM_CH_ID_TYPE(ch));\r\n\r\n  /* Config pwm period and duty */\r\n  BL_WR_REG(PWMx, PWM_THRE2, threshold2);\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  PWM channel update period\r\n *\r\n * @param  ch: PWM channel\r\n * @param  period: period\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid PWM_Channel_Set_Period(PWM_CH_ID_Type ch, uint16_t period) {\r\n  /* Get channel register */\r\n  uint32_t PWMx = PWM_Get_Channel_Reg(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PWM_CH_ID_TYPE(ch));\r\n\r\n  /* Config pwm period and duty */\r\n  BL_WR_REG(PWMx, PWM_PERIOD, period);\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  PWM get configuration\r\n *\r\n * @param  ch: PWM channel\r\n * @param  period: period pointer\r\n * @param  threshold1: threshold1 pointer\r\n * @param  threshold2: threshold2 pointer\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid PWM_Channel_Get(PWM_CH_ID_Type ch, uint16_t *period, uint16_t *threshold1, uint16_t *threshold2) {\r\n  uint32_t tmpVal;\r\n  /* Get channel register */\r\n  uint32_t PWMx = PWM_Get_Channel_Reg(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PWM_CH_ID_TYPE(ch));\r\n\r\n  /* get pwm period and duty */\r\n  tmpVal      = BL_RD_REG(PWMx, PWM_THRE1);\r\n  *threshold1 = BL_GET_REG_BITS_VAL(tmpVal, PWM_THRE1);\r\n  tmpVal      = BL_RD_REG(PWMx, PWM_THRE2);\r\n  *threshold2 = BL_GET_REG_BITS_VAL(tmpVal, PWM_THRE2);\r\n  tmpVal      = BL_RD_REG(PWMx, PWM_PERIOD);\r\n  *period     = BL_GET_REG_BITS_VAL(tmpVal, PWM_PERIOD);\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  PWM enable\r\n *\r\n * @param  ch: PWM channel number\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid PWM_Channel_Enable(PWM_CH_ID_Type ch) {\r\n  uint32_t tmpVal;\r\n  /* Get channel register */\r\n  uint32_t PWMx = PWM_Get_Channel_Reg(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PWM_CH_ID_TYPE(ch));\r\n\r\n  /* Config pwm clock to enable pwm */\r\n  tmpVal = BL_RD_REG(PWMx, PWM_CONFIG);\r\n  BL_WR_REG(PWMx, PWM_CONFIG, BL_CLR_REG_BIT(tmpVal, PWM_STOP_EN));\r\n}\r\nuint8_t PWM_Channel_Is_Enabled(PWM_CH_ID_Type ch) {\r\n  uint32_t tmpVal;\r\n  /* Get channel register */\r\n  uint32_t PWMx = PWM_Get_Channel_Reg(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PWM_CH_ID_TYPE(ch));\r\n\r\n  /* Config pwm clock to enable pwm */\r\n  tmpVal = BL_RD_REG(PWMx, PWM_CONFIG);\r\n  return BL_GET_REG_BITS_VAL(tmpVal, PWM_STOP_EN) == 0;\r\n}\r\n/****************************************************************************\r\n * @brief  PWM disable\r\n *\r\n * @param  ch: PWM channel number\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid PWM_Channel_Disable(PWM_CH_ID_Type ch) {\r\n  uint32_t tmpVal;\r\n  /* Get channel register */\r\n  uint32_t PWMx = PWM_Get_Channel_Reg(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PWM_CH_ID_TYPE(ch));\r\n\r\n  /* Config pwm clock to disable pwm */\r\n  tmpVal = BL_RD_REG(PWMx, PWM_CONFIG);\r\n  BL_WR_REG(PWMx, PWM_CONFIG, BL_SET_REG_BIT(tmpVal, PWM_STOP_EN));\r\n  PWM_IntMask(ch, PWM_INT_PULSE_CNT, MASK);\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  PWM channel software mode enable or disable\r\n *\r\n * @param  ch: PWM channel number\r\n * @param  enable: Enable or disable\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid PWM_SW_Mode(PWM_CH_ID_Type ch, BL_Fun_Type enable) {\r\n  uint32_t tmpVal;\r\n  /* Get channel register */\r\n  uint32_t PWMx = PWM_Get_Channel_Reg(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PWM_CH_ID_TYPE(ch));\r\n\r\n  tmpVal = BL_RD_REG(PWMx, PWM_CONFIG);\r\n  BL_WR_REG(PWMx, PWM_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, PWM_SW_MODE, enable));\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  PWM channel force output high or low\r\n *\r\n * @param  ch: PWM channel number\r\n * @param  value: Output value\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid PWM_SW_Force_Value(PWM_CH_ID_Type ch, uint8_t value) {\r\n  uint32_t tmpVal;\r\n  /* Get channel register */\r\n  uint32_t PWMx = PWM_Get_Channel_Reg(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PWM_CH_ID_TYPE(ch));\r\n\r\n  tmpVal = BL_RD_REG(PWMx, PWM_CONFIG);\r\n  BL_WR_REG(PWMx, PWM_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, PWM_SW_FORCE_VAL, value));\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  PWM channel force output high\r\n *\r\n * @param  ch: PWM channel number\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid PWM_Channel_Fource_Output(PWM_CH_ID_Type ch) {\r\n  uint32_t tmpVal;\r\n  /* Get channel register */\r\n  uint32_t PWMx = PWM_Get_Channel_Reg(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PWM_CH_ID_TYPE(ch));\r\n\r\n  tmpVal = BL_RD_REG(PWMx, PWM_CONFIG);\r\n  BL_WR_REG(PWMx, PWM_CONFIG, BL_SET_REG_BIT(tmpVal, PWM_SW_MODE));\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Mask/Unmask the PWM interrupt\r\n *\r\n * @param  ch: PWM channel number\r\n * @param  intType: Specifies the interrupt type\r\n * @param  intMask: Enable/Disable Specified interrupt type\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid PWM_IntMask(PWM_CH_ID_Type ch, PWM_INT_Type intType, BL_Mask_Type intMask) {\r\n  uint32_t tmpVal;\r\n  /* Get channel register */\r\n  uint32_t PWMx = PWM_Get_Channel_Reg(ch);\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_PWM_CH_ID_TYPE(ch));\r\n  CHECK_PARAM(IS_PWM_INT_TYPE(intType));\r\n\r\n  tmpVal = BL_RD_REG(PWMx, PWM_INTERRUPT);\r\n\r\n  switch (intType) {\r\n  case PWM_INT_PULSE_CNT:\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      BL_WR_REG(PWMx, PWM_INTERRUPT, BL_SET_REG_BIT(tmpVal, PWM_INT_ENABLE));\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      BL_WR_REG(PWMx, PWM_INTERRUPT, BL_CLR_REG_BIT(tmpVal, PWM_INT_ENABLE));\r\n    }\r\n\r\n    break;\r\n\r\n  case PWM_INT_ALL:\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      BL_WR_REG(PWMx, PWM_INTERRUPT, BL_SET_REG_BIT(tmpVal, PWM_INT_ENABLE));\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      BL_WR_REG(PWMx, PWM_INTERRUPT, BL_CLR_REG_BIT(tmpVal, PWM_INT_ENABLE));\r\n    }\r\n\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  Install PWM interrupt callback function\r\n *\r\n * @param  ch: PWM channel number\r\n * @param  intType: PWM interrupt type\r\n * @param  cbFun: Pointer to interrupt callback function. The type should be void (*fn)(void)\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\nvoid PWM_Int_Callback_Install(PWM_CH_ID_Type ch, uint32_t intType, intCallback_Type *cbFun) { PWMIntCbfArra[ch][intType] = cbFun; }\r\n\r\n/****************************************************************************\r\n * @brief  PWM smart configure according to frequency and duty cycle function\r\n *\r\n * @param  ch: PWM channel number\r\n * @param  frequency: PWM frequency\r\n * @param  dutyCycle: PWM duty cycle\r\n *\r\n * @return SUCCESS or TIMEOUT\r\n *\r\n *******************************************************************************/\r\nBL_Err_Type PWM_Smart_Configure(PWM_CH_ID_Type ch, uint32_t frequency, uint8_t dutyCycle) {\r\n  uint32_t tmpVal;\r\n  uint16_t clkDiv, period, threshold2;\r\n  uint32_t timeoutCnt = PWM_STOP_TIMEOUT_COUNT;\r\n  /* Get channel register */\r\n  uint32_t PWMx = PWM_Get_Channel_Reg(ch);\r\n\r\n  if (frequency <= 32) {\r\n    clkDiv     = 500;\r\n    period     = 64000 / frequency;\r\n    threshold2 = 640 * dutyCycle / frequency;\r\n  } else if (frequency <= 62) {\r\n    clkDiv     = 16;\r\n    period     = 2000000 / frequency;\r\n    threshold2 = 20000 * dutyCycle / frequency;\r\n  } else if (frequency <= 124) {\r\n    clkDiv     = 8;\r\n    period     = 4000000 / frequency;\r\n    threshold2 = 40000 * dutyCycle / frequency;\r\n  } else if (frequency <= 246) {\r\n    clkDiv     = 4;\r\n    period     = 8000000 / frequency;\r\n    threshold2 = 80000 * dutyCycle / frequency;\r\n  } else if (frequency <= 490) {\r\n    clkDiv     = 2;\r\n    period     = 16000000 / frequency;\r\n    threshold2 = 160000 * dutyCycle / frequency;\r\n  } else {\r\n    clkDiv     = 1;\r\n    period     = 32000000 / frequency;\r\n    threshold2 = 320000 * dutyCycle / frequency;\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(PWMx, PWM_CONFIG);\r\n  if (BL_GET_REG_BITS_VAL(tmpVal, PWM_REG_CLK_SEL) != PWM_CLK_XCLK) {\r\n    BL_WR_REG(PWMx, PWM_CONFIG, BL_SET_REG_BIT(tmpVal, PWM_STOP_EN));\r\n    while (!BL_IS_REG_BIT_SET(BL_RD_REG(PWMx, PWM_CONFIG), PWM_STS_TOP)) {\r\n      timeoutCnt--;\r\n      if (timeoutCnt == 0) {\r\n        return TIMEOUT;\r\n      }\r\n    }\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PWM_REG_CLK_SEL, PWM_CLK_XCLK);\r\n  }\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PWM_OUT_INV, PWM_POL_NORMAL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PWM_STOP_MODE, PWM_STOP_GRACEFUL);\r\n  BL_WR_REG(PWMx, PWM_CONFIG, tmpVal);\r\n\r\n  /* Config pwm division */\r\n  BL_WR_REG(PWMx, PWM_CLKDIV, clkDiv);\r\n\r\n  /* Config pwm period and duty */\r\n  BL_WR_REG(PWMx, PWM_PERIOD, period);\r\n  BL_WR_REG(PWMx, PWM_THRE1, 0);\r\n  BL_WR_REG(PWMx, PWM_THRE2, threshold2);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************\r\n * @brief  PWM interrupt function\r\n *\r\n * @param  None\r\n *\r\n * @return None\r\n *\r\n *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid PWM_IRQHandler(void) { PWM_IntHandler(PWM_IRQn); }\r\n#endif\r\n\r\n/*@} end of group PWM_Public_Functions */\r\n\r\n/*@} end of group PWM */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_qdec.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_qdec.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_qdec.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  QDEC\r\n *  @{\r\n */\r\n\r\n/** @defgroup  QDEC_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group QDEC_Private_Macros */\r\n\r\n/** @defgroup  QDEC_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group QDEC_Private_Types */\r\n\r\n/** @defgroup  QDEC_Private_Variables\r\n *  @{\r\n */\r\nstatic const uint32_t    qdecAddr[QDEC_ID_MAX]                     = {QDEC0_BASE, QDEC1_BASE, QDEC2_BASE};\r\nstatic intCallback_Type *qdecIntCbfArra[QDEC_ID_MAX][QDEC_INT_ALL] = {\r\n    {NULL, NULL, NULL, NULL},\r\n    {NULL, NULL, NULL, NULL},\r\n    {NULL, NULL, NULL, NULL}\r\n};\r\n\r\n/*@} end of group QDEC_Private_Variables */\r\n\r\n/** @defgroup  QDEC_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group QDEC_Global_Variables */\r\n\r\n/** @defgroup  QDEC_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group QDEC_Private_Fun_Declaration */\r\n\r\n/** @defgroup  QDEC_Private_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  QDEC init\r\n                                                                                *\r\n                                                                                * @param  qdecId: QDEC ID\r\n                                                                                * @param  qdecCfg: QDEC config\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid QDEC_Init(QDEC_ID_Type qdecId, QDEC_CFG_Type *qdecCfg) {\r\n  uint32_t tmpVal = 0;\r\n  uint32_t QDECx  = qdecAddr[qdecId];\r\n\r\n  CHECK_PARAM(IS_QDEC_SAMPLE_MODE_TYPE(qdecCfg->sampleCfg.sampleMod));\r\n  CHECK_PARAM(IS_QDEC_SAMPLE_PERIOD_TYPE(qdecCfg->sampleCfg.samplePeriod));\r\n  CHECK_PARAM(IS_QDEC_REPORT_MODE_TYPE(qdecCfg->reportCfg.reportMod));\r\n  CHECK_PARAM((qdecCfg->ledCfg.ledPeriod) <= 0x1FF);\r\n  CHECK_PARAM((qdecCfg->deglitchCfg.deglitchStrength) <= 0xF);\r\n\r\n  /* qdec_ctrl */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_CTRL0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_SPL_PERIOD, qdecCfg->sampleCfg.samplePeriod);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_RPT_PERIOD, qdecCfg->reportCfg.reportPeriod);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_LED_EN, qdecCfg->ledCfg.ledEn);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_LED_POL, qdecCfg->ledCfg.ledSwap);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_DEG_EN, qdecCfg->deglitchCfg.deglitchEn);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_DEG_CNT, qdecCfg->deglitchCfg.deglitchStrength);\r\n  BL_WR_REG(QDECx, QDEC0_CTRL0, tmpVal);\r\n\r\n  /* qdec_ctrl1 */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_CTRL1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_SPL_MODE, qdecCfg->sampleCfg.sampleMod);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_RPT_MODE, qdecCfg->reportCfg.reportMod);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_LED_PERIOD, qdecCfg->ledCfg.ledPeriod);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_ACC_MODE, qdecCfg->accMod);\r\n  BL_WR_REG(QDECx, QDEC0_CTRL1, tmpVal);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(QDEC0_IRQn, QDEC0_IRQHandler);\r\n  Interrupt_Handler_Register(QDEC1_IRQn, QDEC1_IRQHandler);\r\n  Interrupt_Handler_Register(QDEC2_IRQn, QDEC2_IRQHandler);\r\n#endif\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  QDEC deinit\r\n                                                                                *\r\n                                                                                * @param  qdecId: QDEC ID\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid QDEC_DeInit(QDEC_ID_Type qdecId) {\r\n  uint32_t tmpVal = 0;\r\n  uint32_t QDECx  = qdecAddr[qdecId];\r\n\r\n  /* deconfig qdec */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_CTRL0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_RPT_PERIOD, 10);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_SPL_PERIOD, 2);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_DEG_CNT, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_DEG_EN, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_LED_POL, 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_LED_EN, 0);\r\n  BL_WR_REG(QDECx, QDEC0_CTRL0, tmpVal);\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_CTRL1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_LED_PERIOD, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_INPUT_SWAP, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_RPT_MODE, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_SPL_MODE, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_ACC_MODE, 1);\r\n  BL_WR_REG(QDECx, QDEC0_CTRL1, tmpVal);\r\n\r\n  /* enable qdec */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_CTRL0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_EN, 1);\r\n  BL_WR_REG(QDECx, QDEC0_CTRL0, tmpVal);\r\n\r\n  /* deconfig interrupt */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_INT_EN);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_OVERFLOW_EN, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_DBL_RDY_EN, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_SPL_RDY_EN, 0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_RPT_RDY_EN, 1);\r\n  BL_WR_REG(QDECx, QDEC0_INT_EN, tmpVal);\r\n\r\n  /* clear status */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_INT_CLR);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_OVERFLOW_CLR, 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_DBL_RDY_CLR, 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_SPL_RDY_CLR, 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_RPT_RDY_CLR, 1);\r\n  BL_WR_REG(QDECx, QDEC0_INT_STS, tmpVal);\r\n\r\n  /* clear value */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_VALUE);\r\n\r\n  /* disable qdec */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_CTRL0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_EN, 0);\r\n  BL_WR_REG(QDECx, QDEC0_CTRL0, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  QDEC enable\r\n                                                                                *\r\n                                                                                * @param  qdecId: QDEC ID\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid QDEC_Enable(QDEC_ID_Type qdecId) {\r\n  uint32_t tmpVal = 0;\r\n  uint32_t QDECx  = qdecAddr[qdecId];\r\n\r\n  /* qdec_ctrl */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_CTRL0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, QDEC_EN);\r\n  BL_WR_REG(QDECx, QDEC0_CTRL0, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  QDEC disable\r\n                                                                                *\r\n                                                                                * @param  qdecId: QDEC ID\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid QDEC_Disable(QDEC_ID_Type qdecId) {\r\n  uint32_t tmpVal = 0;\r\n  uint32_t QDECx  = qdecAddr[qdecId];\r\n\r\n  /* qdec_ctrl */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_CTRL0);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, QDEC_EN);\r\n  BL_WR_REG(QDECx, QDEC0_CTRL0, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  set QDEC interrupt mask\r\n                                                                                *\r\n                                                                                * @param  qdecId: QDEC ID\r\n                                                                                * @param  intType: QDEC interrupt type\r\n                                                                                * @param  intMask: MASK or UNMASK\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid QDEC_SetIntMask(QDEC_ID_Type qdecId, QDEC_INT_Type intType, BL_Mask_Type intMask) {\r\n  uint32_t tmpVal = 0;\r\n  uint32_t QDECx  = qdecAddr[qdecId];\r\n\r\n  CHECK_PARAM(IS_QDEC_INT_TYPE(intType));\r\n\r\n  /* qdec_int_en */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_INT_EN);\r\n\r\n  switch (intType) {\r\n  case QDEC_INT_REPORT:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_RPT_RDY_EN, (intMask ? 0 : 1));\r\n    break;\r\n\r\n  case QDEC_INT_SAMPLE:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_SPL_RDY_EN, (intMask ? 0 : 1));\r\n    break;\r\n\r\n  case QDEC_INT_ERROR:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_DBL_RDY_EN, (intMask ? 0 : 1));\r\n    break;\r\n\r\n  case QDEC_INT_OVERFLOW:\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, QDEC_OVERFLOW_EN, (intMask ? 0 : 1));\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  BL_WR_REG(QDECx, QDEC0_INT_EN, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  get QDEC interrupt mask\r\n                                                                                *\r\n                                                                                * @param  qdecId: QDEC ID\r\n                                                                                * @param  intType: QDEC interrupt type\r\n                                                                                *\r\n                                                                                * @return MASK or UNMASK\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Mask_Type QDEC_GetIntMask(QDEC_ID_Type qdecId, QDEC_INT_Type intType) {\r\n  uint32_t tmpVal = 0;\r\n  uint32_t QDECx  = qdecAddr[qdecId];\r\n\r\n  CHECK_PARAM(IS_QDEC_INT_TYPE(intType));\r\n\r\n  /* qdec_int_en */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_INT_EN);\r\n\r\n  switch (intType) {\r\n  case QDEC_INT_REPORT:\r\n    return BL_GET_REG_BITS_VAL(tmpVal, QDEC_RPT_RDY_EN) ? UNMASK : MASK;\r\n\r\n  case QDEC_INT_SAMPLE:\r\n    return BL_GET_REG_BITS_VAL(tmpVal, QDEC_SPL_RDY_EN) ? UNMASK : MASK;\r\n\r\n  case QDEC_INT_ERROR:\r\n    return BL_GET_REG_BITS_VAL(tmpVal, QDEC_DBL_RDY_EN) ? UNMASK : MASK;\r\n\r\n  case QDEC_INT_OVERFLOW:\r\n    return BL_GET_REG_BITS_VAL(tmpVal, QDEC_OVERFLOW_EN) ? UNMASK : MASK;\r\n\r\n  default:\r\n    return UNMASK;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  QDEC interrupt callback install\r\n                                                                                *\r\n                                                                                * @param  qdecId: QDEC ID\r\n                                                                                * @param  intType: QDEC interrupt type\r\n                                                                                * @param  cbFun: interrupt callback\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid QDEC_Int_Callback_Install(QDEC_ID_Type qdecId, QDEC_INT_Type intType, intCallback_Type *cbFun) { qdecIntCbfArra[qdecId][intType] = cbFun; }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  QDEC get interrupt status\r\n                                                                                *\r\n                                                                                * @param  qdecId: QDEC ID\r\n                                                                                * @param  intType: QDEC interrupt type\r\n                                                                                *\r\n                                                                                * @return SET or RESET\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type QDEC_Get_Int_Status(QDEC_ID_Type qdecId, QDEC_INT_Type intType) {\r\n  uint32_t tmpVal = 0;\r\n  uint32_t QDECx  = qdecAddr[qdecId];\r\n\r\n  CHECK_PARAM(IS_QDEC_INT_TYPE(intType));\r\n\r\n  /* qdec_int_sts */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_INT_STS);\r\n\r\n  switch (intType) {\r\n  case QDEC_INT_REPORT:\r\n    return BL_GET_REG_BITS_VAL(tmpVal, QDEC_RPT_RDY_STS) ? SET : RESET;\r\n\r\n  case QDEC_INT_SAMPLE:\r\n    return BL_GET_REG_BITS_VAL(tmpVal, QDEC_SPL_RDY_STS) ? SET : RESET;\r\n\r\n  case QDEC_INT_ERROR:\r\n    return BL_GET_REG_BITS_VAL(tmpVal, QDEC_DBL_RDY_STS) ? SET : RESET;\r\n\r\n  case QDEC_INT_OVERFLOW:\r\n    return BL_GET_REG_BITS_VAL(tmpVal, QDEC_OVERFLOW_STS) ? SET : RESET;\r\n\r\n  default:\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  QDEC clear interrupt status\r\n                                                                                *\r\n                                                                                * @param  qdecId: QDEC ID\r\n                                                                                * @param  intType: QDEC interrupt type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid QDEC_Clr_Int_Status(QDEC_ID_Type qdecId, QDEC_INT_Type intType) {\r\n  uint32_t tmpVal = 0;\r\n  uint32_t QDECx  = qdecAddr[qdecId];\r\n\r\n  CHECK_PARAM(IS_QDEC_INT_TYPE(intType));\r\n\r\n  /* qdec_int_clr */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_INT_CLR);\r\n\r\n  switch (intType) {\r\n  case QDEC_INT_REPORT:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, QDEC_RPT_RDY_CLR);\r\n    break;\r\n\r\n  case QDEC_INT_SAMPLE:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, QDEC_SPL_RDY_CLR);\r\n    break;\r\n\r\n  case QDEC_INT_ERROR:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, QDEC_DBL_RDY_CLR);\r\n    break;\r\n\r\n  case QDEC_INT_OVERFLOW:\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, QDEC_OVERFLOW_CLR);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  BL_WR_REG(QDECx, QDEC0_INT_CLR, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  QDEC get sample direction\r\n                                                                                *\r\n                                                                                * @param  qdecId: QDEC ID\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nQDEC_DIRECTION_Type QDEC_Get_Sample_Direction(QDEC_ID_Type qdecId) {\r\n  uint32_t tmpVal = 0;\r\n  uint32_t QDECx  = qdecAddr[qdecId];\r\n\r\n  /* qdec_value */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_VALUE);\r\n\r\n  return (QDEC_DIRECTION_Type)BL_GET_REG_BITS_VAL(tmpVal, QDEC_SPL_VAL);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  QDEC get error count\r\n                                                                                *\r\n                                                                                * @param  qdecId: QDEC ID\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint8_t QDEC_Get_Err_Cnt(QDEC_ID_Type qdecId) {\r\n  uint32_t tmpVal = 0;\r\n  uint32_t QDECx  = qdecAddr[qdecId];\r\n\r\n  /* qdec_value */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_VALUE);\r\n\r\n  return BL_GET_REG_BITS_VAL(tmpVal, QDEC_ACC2_VAL);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  QDEC get sample value\r\n                                                                                *\r\n                                                                                * @param  qdecId: QDEC ID\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint16_t QDEC_Get_Sample_Val(QDEC_ID_Type qdecId) {\r\n  uint32_t tmpVal = 0;\r\n  uint32_t QDECx  = qdecAddr[qdecId];\r\n\r\n  /* qdec_value */\r\n  tmpVal = BL_RD_REG(QDECx, QDEC0_VALUE);\r\n\r\n  return BL_GET_REG_BITS_VAL(tmpVal, QDEC_ACC1_VAL);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  QDEC interrupt handler\r\n                                                                                *\r\n                                                                                * @param  qdecId: QDEC ID\r\n                                                                                * @param  intType: QDEC interrupt type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid QDEC_IntHandler(QDEC_ID_Type qdecId, QDEC_INT_Type intType) {\r\n  if (SET == QDEC_Get_Int_Status(qdecId, intType)) {\r\n    QDEC_Clr_Int_Status(qdecId, intType);\r\n\r\n    if (qdecIntCbfArra[qdecId][intType] != NULL) {\r\n      qdecIntCbfArra[qdecId][intType]();\r\n    }\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  QDEC0 interrupt handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid QDEC0_IRQHandler(void) {\r\n  QDEC_INT_Type intType;\r\n\r\n  for (intType = QDEC_INT_REPORT; intType < QDEC_INT_ALL; intType++) {\r\n    if (UNMASK == QDEC_GetIntMask(QDEC0_ID, intType)) {\r\n      QDEC_IntHandler(QDEC0_ID, intType);\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  QDEC1 interrupt handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid QDEC1_IRQHandler(void) {\r\n  QDEC_INT_Type intType;\r\n\r\n  for (intType = QDEC_INT_REPORT; intType < QDEC_INT_ALL; intType++) {\r\n    if (UNMASK == QDEC_GetIntMask(QDEC1_ID, intType)) {\r\n      QDEC_IntHandler(QDEC1_ID, intType);\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  QDEC2 interrupt handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid QDEC2_IRQHandler(void) {\r\n  QDEC_INT_Type intType;\r\n\r\n  for (intType = QDEC_INT_REPORT; intType < QDEC_INT_ALL; intType++) {\r\n    if (UNMASK == QDEC_GetIntMask(QDEC2_ID, intType)) {\r\n      QDEC_IntHandler(QDEC2_ID, intType);\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/*@} end of group QDEC_Private_Functions */\r\n\r\n/*@} end of group QDEC */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_romapi.c",
    "content": "#include \"bl702_romdriver.h\"\r\n\r\n/******************************************************************************/\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type AON_Power_On_MBG(void) { return RomDriver_AON_Power_On_MBG(); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type AON_Power_Off_MBG(void) { return RomDriver_AON_Power_Off_MBG(); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type AON_Power_On_XTAL(void) { return RomDriver_AON_Power_On_XTAL(); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type AON_Set_Xtal_CapCode(uint8_t capIn, uint8_t capOut) { return RomDriver_AON_Set_Xtal_CapCode(capIn, capOut); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type AON_Power_Off_XTAL(void) { return RomDriver_AON_Power_Off_XTAL(); }\r\n/******************************************************************************/\r\n\r\n/******************************************************************************/\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void ASM_Delay_Us(uint32_t core, uint32_t cnt) { RomDriver_ASM_Delay_Us(core, cnt); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void BL702_Delay_US(uint32_t cnt) { RomDriver_BL702_Delay_US(cnt); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void BL702_Delay_MS(uint32_t cnt) { RomDriver_BL702_Delay_MS(cnt); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void *BL702_MemCpy(void *dst, const void *src, uint32_t n) { return RomDriver_BL702_MemCpy(dst, src, n); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION uint32_t *BL702_MemCpy4(uint32_t *dst, const uint32_t *src, uint32_t n) { return RomDriver_BL702_MemCpy4(dst, src, n); }\r\n\r\n// __ALWAYS_INLINE ATTR_TCM_SECTION\r\n// void* BL702_MemCpy_Fast(void *pdst, const void *psrc, uint32_t n) {\r\n//     return RomDriver_BL702_MemCpy_Fast(pdst, psrc, n);\r\n// }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void *ARCH_MemCpy_Fast(void *pdst, const void *psrc, uint32_t n) { return RomDriver_ARCH_MemCpy_Fast(pdst, psrc, n); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void *BL702_MemSet(void *s, uint8_t c, uint32_t n) { return RomDriver_BL702_MemSet(s, c, n); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION uint32_t *BL702_MemSet4(uint32_t *dst, const uint32_t val, uint32_t n) { return RomDriver_BL702_MemSet4(dst, val, n); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION int BL702_MemCmp(const void *s1, const void *s2, uint32_t n) { return RomDriver_BL702_MemCmp(s1, s2, n); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION uint32_t BFLB_Soft_CRC32(void *dataIn, uint32_t len) { return RomDriver_BFLB_Soft_CRC32(dataIn, len); }\r\n/******************************************************************************/\r\n\r\n/******************************************************************************/\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION GLB_ROOT_CLK_Type GLB_Get_Root_CLK_Sel(void) { return RomDriver_GLB_Get_Root_CLK_Sel(); }\r\n#if 0\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION\r\n    BL_Err_Type\r\n    GLB_Set_System_CLK_Div(uint8_t hclkDiv, uint8_t bclkDiv)\r\n{\r\n    return RomDriver_GLB_Set_System_CLK_Div(hclkDiv, bclkDiv);\r\n}\r\n#endif\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION uint8_t GLB_Get_BCLK_Div(void) { return RomDriver_GLB_Get_BCLK_Div(); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION uint8_t GLB_Get_HCLK_Div(void) { return RomDriver_GLB_Get_HCLK_Div(); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type Update_SystemCoreClockWith_XTAL(GLB_DLL_XTAL_Type xtalType) { return RomDriver_Update_SystemCoreClockWith_XTAL(xtalType); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type GLB_Set_System_CLK(GLB_DLL_XTAL_Type xtalType, GLB_SYS_CLK_Type clkFreq) { return RomDriver_GLB_Set_System_CLK(xtalType, clkFreq); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type System_Core_Clock_Update_From_RC32M(void) { return RomDriver_System_Core_Clock_Update_From_RC32M(); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type GLB_Set_SF_CLK(uint8_t enable, GLB_SFLASH_CLK_Type clkSel, uint8_t div) { return RomDriver_GLB_Set_SF_CLK(enable, clkSel, div); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type GLB_Power_Off_DLL(void) { return RomDriver_GLB_Power_Off_DLL(); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type GLB_Power_On_DLL(GLB_DLL_XTAL_Type xtalType) { return RomDriver_GLB_Power_On_DLL(xtalType); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type GLB_Enable_DLL_All_Clks(void) { return RomDriver_GLB_Enable_DLL_All_Clks(); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type GLB_Enable_DLL_Clk(GLB_DLL_CLK_Type dllClk) { return RomDriver_GLB_Enable_DLL_Clk(dllClk); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type GLB_Disable_DLL_All_Clks(void) { return RomDriver_GLB_Disable_DLL_All_Clks(); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type GLB_Disable_DLL_Clk(GLB_DLL_CLK_Type dllClk) { return RomDriver_GLB_Disable_DLL_Clk(dllClk); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type GLB_SW_System_Reset(void) { return RomDriver_GLB_SW_System_Reset(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type GLB_SW_CPU_Reset(void) { return RomDriver_GLB_SW_CPU_Reset(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type GLB_SW_POR_Reset(void) { return RomDriver_GLB_SW_POR_Reset(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type GLB_Select_Internal_Flash(void) { return RomDriver_GLB_Select_Internal_Flash(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type GLB_Swap_Flash_Pin(void) { return RomDriver_GLB_Swap_Flash_Pin(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type GLB_Swap_Flash_CS_IO2_Pin(void) { return RomDriver_GLB_Swap_Flash_CS_IO2_Pin(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type GLB_Swap_Flash_IO0_IO3_Pin(void) { return RomDriver_GLB_Swap_Flash_IO0_IO3_Pin(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type GLB_Select_Internal_PSram(void) { return RomDriver_GLB_Select_Internal_PSram(); }\r\n\r\n/* aon pads GPIO9~GPIO13 IE controlled by HBN reg_aon_pad_ie_smt, abandon romdriver for this reason */\r\n#if 0\r\n__ALWAYS_INLINE ATTR_TCM_SECTION\r\nBL_Err_Type GLB_GPIO_Init(GLB_GPIO_Cfg_Type *cfg)\r\n{\r\n    return RomDriver_GLB_GPIO_Init(cfg);\r\n}\r\n#endif\r\n\r\n#if 0\r\n__ALWAYS_INLINE ATTR_TCM_SECTION\r\nBL_Err_Type GLB_GPIO_OUTPUT_Enable(GLB_GPIO_Type gpioPin)\r\n{\r\n    return RomDriver_GLB_GPIO_OUTPUT_Enable(gpioPin);\r\n}\r\n#endif\r\n\r\n#if 0\r\n__ALWAYS_INLINE ATTR_TCM_SECTION\r\nBL_Err_Type GLB_GPIO_OUTPUT_Disable(GLB_GPIO_Type gpioPin)\r\n{\r\n    return RomDriver_GLB_GPIO_OUTPUT_Disable(gpioPin);\r\n}\r\n#endif\r\n\r\n/* aon pads GPIO9~GPIO13 IE controlled by HBN reg_aon_pad_ie_smt, abandon romdriver for this reason */\r\n#if 0\r\n__ALWAYS_INLINE ATTR_TCM_SECTION\r\nBL_Err_Type GLB_GPIO_Set_HZ(GLB_GPIO_Type gpioPin)\r\n{\r\n    return RomDriver_GLB_GPIO_Set_HZ(gpioPin);\r\n}\r\n#endif\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type GLB_Deswap_Flash_Pin(void) { return RomDriver_GLB_Deswap_Flash_Pin(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type GLB_Select_External_Flash(void) { return RomDriver_GLB_Select_External_Flash(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION uint8_t GLB_GPIO_Get_Fun(GLB_GPIO_Type gpioPin) { return RomDriver_GLB_GPIO_Get_Fun(gpioPin); }\r\n/******************************************************************************/\r\n\r\n/******************************************************************************/\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Sts_Type EF_Ctrl_Busy(void) { return RomDriver_EF_Ctrl_Busy(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void EF_Ctrl_Sw_AHB_Clk_0(void) { RomDriver_EF_Ctrl_Sw_AHB_Clk_0(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void EF_Ctrl_Load_Efuse_R0(void) { RomDriver_EF_Ctrl_Load_Efuse_R0(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void EF_Ctrl_Clear(uint32_t index, uint32_t len) { RomDriver_EF_Ctrl_Clear(index, len); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION uint8_t EF_Ctrl_Get_Trim_Parity(uint32_t val, uint8_t len) { return RomDriver_EF_Ctrl_Get_Trim_Parity(val, len); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION void EF_Ctrl_Read_RC32K_Trim(Efuse_Ana_RC32K_Trim_Type *trim) { RomDriver_EF_Ctrl_Read_RC32K_Trim(trim); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION void EF_Ctrl_Read_RC32M_Trim(Efuse_Ana_RC32M_Trim_Type *trim) { RomDriver_EF_Ctrl_Read_RC32M_Trim(trim); }\r\n/******************************************************************************/\r\n\r\n/******************************************************************************/\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type PDS_Trim_RC32M(void) { return RomDriver_PDS_Trim_RC32M(); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type PDS_Select_RC32M_As_PLL_Ref(void) { return RomDriver_PDS_Select_RC32M_As_PLL_Ref(); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type PDS_Select_XTAL_As_PLL_Ref(void) { return RomDriver_PDS_Select_XTAL_As_PLL_Ref(); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type PDS_Power_On_PLL(PDS_PLL_XTAL_Type xtalType) { return RomDriver_PDS_Power_On_PLL(xtalType); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type PDS_Enable_PLL_All_Clks(void) { return RomDriver_PDS_Enable_PLL_All_Clks(); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type PDS_Disable_PLL_All_Clks(void) { return RomDriver_PDS_Disable_PLL_All_Clks(); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type PDS_Enable_PLL_Clk(PDS_PLL_CLK_Type pllClk) { return RomDriver_PDS_Enable_PLL_Clk(pllClk); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type PDS_Disable_PLL_Clk(PDS_PLL_CLK_Type pllClk) { return RomDriver_PDS_Disable_PLL_Clk(pllClk); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type PDS_Power_Off_PLL(void) { return RomDriver_PDS_Power_Off_PLL(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void PDS_Reset(void) { RomDriver_PDS_Reset(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void PDS_Enable(PDS_CFG_Type *cfg, uint32_t pdsSleepCnt) { RomDriver_PDS_Enable(cfg, pdsSleepCnt); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void PDS_Auto_Time_Config(uint32_t sleepDuration) { RomDriver_PDS_Auto_Time_Config(sleepDuration); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void PDS_Auto_Enable(PDS_AUTO_POWER_DOWN_CFG_Type *powerCfg, PDS_AUTO_NORMAL_CFG_Type *normalCfg, BL_Fun_Type enable) {\r\n  RomDriver_PDS_Auto_Enable(powerCfg, normalCfg, enable);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void PDS_Manual_Force_Turn_Off(PDS_FORCE_Type domain) { RomDriver_PDS_Manual_Force_Turn_Off(domain); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void PDS_Manual_Force_Turn_On(PDS_FORCE_Type domain) { RomDriver_PDS_Manual_Force_Turn_On(domain); }\r\n/******************************************************************************/\r\n\r\n/******************************************************************************/\r\n#if 0\r\n__ALWAYS_INLINE ATTR_TCM_SECTION\r\nvoid HBN_Enable(uint8_t aGPIOIeCfg, HBN_LDO_LEVEL_Type ldoLevel, HBN_LEVEL_Type hbnLevel)\r\n{\r\n    RomDriver_HBN_Enable(aGPIOIeCfg, ldoLevel, hbnLevel);\r\n}\r\n#endif\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type HBN_Reset(void) { return RomDriver_HBN_Reset(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type HBN_GPIO_Dbg_Pull_Cfg(BL_Fun_Type pupdEn, BL_Fun_Type dlyEn, uint8_t dlySec, HBN_INT_Type gpioIrq, BL_Mask_Type gpioMask) {\r\n  return RomDriver_HBN_GPIO_Dbg_Pull_Cfg(pupdEn, dlyEn, dlySec, gpioIrq, gpioMask);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type HBN_Trim_RC32K(void) { return RomDriver_HBN_Trim_RC32K(); }\r\n\r\n__ALWAYS_INLINE ATTR_CLOCK_SECTION BL_Err_Type HBN_Set_ROOT_CLK_Sel(HBN_ROOT_CLK_Type rootClk) { return RomDriver_HBN_Set_ROOT_CLK_Sel(rootClk); }\r\n/******************************************************************************/\r\n\r\n/******************************************************************************/\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type XIP_SFlash_State_Save(SPI_Flash_Cfg_Type *pFlashCfg, uint32_t *offset) { return RomDriver_XIP_SFlash_State_Save(pFlashCfg, offset); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type XIP_SFlash_State_Restore(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t offset) {\r\n  return RomDriver_XIP_SFlash_State_Restore(pFlashCfg, ioMode, offset);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type XIP_SFlash_Erase_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t startaddr, uint32_t endaddr) {\r\n  return RomDriver_XIP_SFlash_Erase_Need_Lock(pFlashCfg, ioMode, startaddr, endaddr);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type XIP_SFlash_Write_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t *data, uint32_t len) {\r\n  return RomDriver_XIP_SFlash_Write_Need_Lock(pFlashCfg, ioMode, addr, data, len);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type XIP_SFlash_Read_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t *data, uint32_t len) {\r\n  return RomDriver_XIP_SFlash_Read_Need_Lock(pFlashCfg, ioMode, addr, data, len);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type XIP_SFlash_GetJedecId_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint8_t *data) {\r\n  return RomDriver_XIP_SFlash_GetJedecId_Need_Lock(pFlashCfg, ioMode, data);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type XIP_SFlash_GetDeviceId_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint8_t *data) {\r\n  return RomDriver_XIP_SFlash_GetDeviceId_Need_Lock(pFlashCfg, ioMode, data);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type XIP_SFlash_GetUniqueId_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint8_t *data, uint8_t idLen) {\r\n  return RomDriver_XIP_SFlash_GetUniqueId_Need_Lock(pFlashCfg, ioMode, data, idLen);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type XIP_SFlash_Read_Via_Cache_Need_Lock(uint32_t addr, uint8_t *data, uint32_t len) { return RomDriver_XIP_SFlash_Read_Via_Cache_Need_Lock(addr, data, len); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION int XIP_SFlash_Read_With_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t *dst, int len) {\r\n  return RomDriver_XIP_SFlash_Read_With_Lock(pFlashCfg, ioMode, addr, dst, len);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION int XIP_SFlash_Write_With_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t *src, int len) {\r\n  return RomDriver_XIP_SFlash_Write_With_Lock(pFlashCfg, ioMode, addr, src, len);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION int XIP_SFlash_Erase_With_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, int len) {\r\n  return RomDriver_XIP_SFlash_Erase_With_Lock(pFlashCfg, ioMode, addr, len);\r\n}\r\n/******************************************************************************/\r\n\r\n/******************************************************************************/\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SFlash_Init(const SF_Ctrl_Cfg_Type *pSfCtrlCfg) { RomDriver_SFlash_Init(pSfCtrlCfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_SetSPIMode(SF_Ctrl_Mode_Type mode) { return RomDriver_SFlash_SetSPIMode(mode); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Read_Reg(SPI_Flash_Cfg_Type *flashCfg, uint8_t regIndex, uint8_t *regValue, uint8_t regLen) {\r\n  return RomDriver_SFlash_Read_Reg(flashCfg, regIndex, regValue, regLen);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Write_Reg(SPI_Flash_Cfg_Type *flashCfg, uint8_t regIndex, uint8_t *regValue, uint8_t regLen) {\r\n  return RomDriver_SFlash_Write_Reg(flashCfg, regIndex, regValue, regLen);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Read_Reg_With_Cmd(SPI_Flash_Cfg_Type *flashCfg, uint8_t readRegCmd, uint8_t *regValue, uint8_t regLen) {\r\n  return RomDriver_SFlash_Read_Reg_With_Cmd(flashCfg, readRegCmd, regValue, regLen);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Write_Reg_With_Cmd(SPI_Flash_Cfg_Type *flashCfg, uint8_t writeRegCmd, uint8_t *regValue, uint8_t regLen) {\r\n  return RomDriver_SFlash_Write_Reg_With_Cmd(flashCfg, writeRegCmd, regValue, regLen);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Sts_Type SFlash_Busy(SPI_Flash_Cfg_Type *flashCfg) { return RomDriver_SFlash_Busy(flashCfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Write_Enable(SPI_Flash_Cfg_Type *flashCfg) { return RomDriver_SFlash_Write_Enable(flashCfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Qspi_Enable(SPI_Flash_Cfg_Type *flashCfg) { return RomDriver_SFlash_Qspi_Enable(flashCfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SFlash_Volatile_Reg_Write_Enable(SPI_Flash_Cfg_Type *flashCfg) { RomDriver_SFlash_Volatile_Reg_Write_Enable(flashCfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Chip_Erase(SPI_Flash_Cfg_Type *flashCfg) { return RomDriver_SFlash_Chip_Erase(flashCfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Sector_Erase(SPI_Flash_Cfg_Type *flashCfg, uint32_t secNum) { return RomDriver_SFlash_Sector_Erase(flashCfg, secNum); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Blk32_Erase(SPI_Flash_Cfg_Type *flashCfg, uint32_t blkNum) { return RomDriver_SFlash_Blk32_Erase(flashCfg, blkNum); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Blk64_Erase(SPI_Flash_Cfg_Type *flashCfg, uint32_t blkNum) { return RomDriver_SFlash_Blk64_Erase(flashCfg, blkNum); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Erase(SPI_Flash_Cfg_Type *flashCfg, uint32_t startaddr, uint32_t endaddr) { return RomDriver_SFlash_Erase(flashCfg, startaddr, endaddr); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Program(SPI_Flash_Cfg_Type *flashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t *data, uint32_t len) {\r\n  return RomDriver_SFlash_Program(flashCfg, ioMode, addr, data, len);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SFlash_GetUniqueId(uint8_t *data, uint8_t idLen) { RomDriver_SFlash_GetUniqueId(data, idLen); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SFlash_GetJedecId(SPI_Flash_Cfg_Type *flashCfg, uint8_t *data) { RomDriver_SFlash_GetJedecId(flashCfg, data); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SFlash_GetDeviceId(uint8_t *data) { RomDriver_SFlash_GetDeviceId(data); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SFlash_Powerdown(void) { RomDriver_SFlash_Powerdown(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SFlash_Releae_Powerdown(SPI_Flash_Cfg_Type *flashCfg) { RomDriver_SFlash_Releae_Powerdown(flashCfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Restore_From_Powerdown(SPI_Flash_Cfg_Type *pFlashCfg, uint8_t flashContRead) {\r\n  return RomDriver_SFlash_Restore_From_Powerdown(pFlashCfg, flashContRead);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SFlash_SetBurstWrap(SPI_Flash_Cfg_Type *flashCfg) { RomDriver_SFlash_SetBurstWrap(flashCfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SFlash_DisableBurstWrap(SPI_Flash_Cfg_Type *flashCfg) { RomDriver_SFlash_DisableBurstWrap(flashCfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Software_Reset(SPI_Flash_Cfg_Type *flashCfg) { return RomDriver_SFlash_Software_Reset(flashCfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SFlash_Reset_Continue_Read(SPI_Flash_Cfg_Type *flashCfg) { return RomDriver_SFlash_Reset_Continue_Read(flashCfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Set_IDbus_Cfg(SPI_Flash_Cfg_Type *flashCfg, SF_Ctrl_IO_Type ioMode, uint8_t contRead, uint32_t addr, uint32_t len) {\r\n  return RomDriver_SFlash_Set_IDbus_Cfg(flashCfg, ioMode, contRead, addr, len);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_IDbus_Read_Enable(SPI_Flash_Cfg_Type *flashCfg, SF_Ctrl_IO_Type ioMode, uint8_t contRead) {\r\n  return RomDriver_SFlash_IDbus_Read_Enable(flashCfg, ioMode, contRead);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Cache_Read_Enable(SPI_Flash_Cfg_Type *flashCfg, SF_Ctrl_IO_Type ioMode, uint8_t contRead, uint8_t wayDisable) {\r\n  return RomDriver_SFlash_Cache_Read_Enable(flashCfg, ioMode, contRead, wayDisable);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SFlash_Cache_Read_Disable(void) { RomDriver_SFlash_Cache_Read_Disable(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SFlash_Read(SPI_Flash_Cfg_Type *flashCfg, SF_Ctrl_IO_Type ioMode, uint8_t contRead, uint32_t addr, uint8_t *data, uint32_t len) {\r\n  return RomDriver_SFlash_Read(flashCfg, ioMode, contRead, addr, data, len);\r\n}\r\n/******************************************************************************/\r\n\r\n/******************************************************************************/\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type L1C_Cache_Enable_Set(uint8_t wayDisable) { return RomDriver_L1C_Cache_Enable_Set(wayDisable); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void L1C_Cache_Write_Set(BL_Fun_Type wtEn, BL_Fun_Type wbEn, BL_Fun_Type waEn) { RomDriver_L1C_Cache_Write_Set(wtEn, wbEn, waEn); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type L1C_Cache_Flush(uint8_t wayDisable) { return RomDriver_L1C_Cache_Flush(wayDisable); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void L1C_Cache_Hit_Count_Get(uint32_t *hitCountLow, uint32_t *hitCountHigh) { RomDriver_L1C_Cache_Hit_Count_Get(hitCountLow, hitCountHigh); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION uint32_t L1C_Cache_Miss_Count_Get(void) { return RomDriver_L1C_Cache_Miss_Count_Get(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void L1C_Cache_Read_Disable(void) { RomDriver_L1C_Cache_Read_Disable(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type L1C_Set_Wrap(BL_Fun_Type wrap) { return RomDriver_L1C_Set_Wrap(wrap); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type L1C_Set_Way_Disable(uint8_t disableVal) { return RomDriver_L1C_Set_Way_Disable(disableVal); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type L1C_IROM_2T_Access_Set(uint8_t enable) { return RomDriver_L1C_IROM_2T_Access_Set(enable); }\r\n/******************************************************************************/\r\n\r\n/******************************************************************************/\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_Enable(const SF_Ctrl_Cfg_Type *cfg) { RomDriver_SF_Ctrl_Enable(cfg); }\r\n\r\n#if 0\r\n__ALWAYS_INLINE ATTR_TCM_SECTION\r\nvoid SF_Ctrl_Psram_Init(SF_Ctrl_Psram_Cfg *sfCtrlPsramCfg)\r\n{\r\n    RomDriver_SF_Ctrl_Psram_Init(sfCtrlPsramCfg);\r\n}\r\n#endif\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION uint8_t SF_Ctrl_Get_Clock_Delay(void) { return RomDriver_SF_Ctrl_Get_Clock_Delay(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_Set_Clock_Delay(uint8_t delay) { RomDriver_SF_Ctrl_Set_Clock_Delay(delay); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_Cmds_Set(SF_Ctrl_Cmds_Cfg *cmdsCfg) { RomDriver_SF_Ctrl_Cmds_Set(cmdsCfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_Set_Owner(SF_Ctrl_Owner_Type owner) { RomDriver_SF_Ctrl_Set_Owner(owner); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_Disable(void) { RomDriver_SF_Ctrl_Disable(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_Select_Pad(SF_Ctrl_Pad_Select sel) { RomDriver_SF_Ctrl_Select_Pad(sel); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_Select_Bank(SF_Ctrl_Select sel) { RomDriver_SF_Ctrl_Select_Bank(sel); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_AES_Enable_BE(void) { RomDriver_SF_Ctrl_AES_Enable_BE(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_AES_Enable_LE(void) { RomDriver_SF_Ctrl_AES_Enable_LE(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_AES_Set_Region(uint8_t region, uint8_t enable, uint8_t hwKey, uint32_t startAddr, uint32_t endAddr, uint8_t locked) {\r\n  RomDriver_SF_Ctrl_AES_Set_Region(region, enable, hwKey, startAddr, endAddr, locked);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_AES_Set_Key(uint8_t region, uint8_t *key, SF_Ctrl_AES_Key_Type keyType) { RomDriver_SF_Ctrl_AES_Set_Key(region, key, keyType); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_AES_Set_Key_BE(uint8_t region, uint8_t *key, SF_Ctrl_AES_Key_Type keyType) { RomDriver_SF_Ctrl_AES_Set_Key_BE(region, key, keyType); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_AES_Set_IV(uint8_t region, uint8_t *iv, uint32_t addrOffset) { RomDriver_SF_Ctrl_AES_Set_IV(region, iv, addrOffset); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_AES_Set_IV_BE(uint8_t region, uint8_t *iv, uint32_t addrOffset) { RomDriver_SF_Ctrl_AES_Set_IV_BE(region, iv, addrOffset); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_AES_Enable(void) { RomDriver_SF_Ctrl_AES_Enable(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_AES_Disable(void) { RomDriver_SF_Ctrl_AES_Disable(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION uint8_t SF_Ctrl_Is_AES_Enable(void) { return RomDriver_SF_Ctrl_Is_AES_Enable(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_Set_Flash_Image_Offset(uint32_t addrOffset) { RomDriver_SF_Ctrl_Set_Flash_Image_Offset(addrOffset); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION uint32_t SF_Ctrl_Get_Flash_Image_Offset(void) { return RomDriver_SF_Ctrl_Get_Flash_Image_Offset(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_Select_Clock(SF_Ctrl_Sahb_Type sahbType) { RomDriver_SF_Ctrl_Select_Clock(sahbType); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_SendCmd(SF_Ctrl_Cmd_Cfg_Type *cfg) { RomDriver_SF_Ctrl_SendCmd(cfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_Flash_Read_Icache_Set(SF_Ctrl_Cmd_Cfg_Type *cfg, uint8_t cmdValid) { RomDriver_SF_Ctrl_Flash_Read_Icache_Set(cfg, cmdValid); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_Psram_Write_Icache_Set(SF_Ctrl_Cmd_Cfg_Type *cfg, uint8_t cmdValid) { RomDriver_SF_Ctrl_Psram_Write_Icache_Set(cfg, cmdValid); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Ctrl_Psram_Read_Icache_Set(SF_Ctrl_Cmd_Cfg_Type *cfg, uint8_t cmdValid) { RomDriver_SF_Ctrl_Psram_Read_Icache_Set(cfg, cmdValid); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Sts_Type SF_Ctrl_GetBusyState(void) { return RomDriver_SF_Ctrl_GetBusyState(); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Cfg_Deinit_Ext_Flash_Gpio(uint8_t extFlashPin) { RomDriver_SF_Cfg_Deinit_Ext_Flash_Gpio(extFlashPin); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void SF_Cfg_Init_Ext_Flash_Gpio(uint8_t extFlashPin) { RomDriver_SF_Cfg_Init_Ext_Flash_Gpio(extFlashPin); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type SF_Cfg_Get_Flash_Cfg_Need_Lock(uint32_t flashID, SPI_Flash_Cfg_Type *pFlashCfg) { return RomDriver_SF_Cfg_Get_Flash_Cfg_Need_Lock(flashID, pFlashCfg); }\r\n\r\n#if 0\r\n__ALWAYS_INLINE ATTR_TCM_SECTION\r\nvoid SF_Cfg_Init_Flash_Gpio(uint8_t flashPinCfg, uint8_t restoreDefault)\r\n{\r\n    RomDriver_SF_Cfg_Init_Flash_Gpio(flashPinCfg, restoreDefault);\r\n}\r\n#endif\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION uint32_t SF_Cfg_Flash_Identify(uint8_t callFromFlash, uint32_t autoScan, uint32_t flashPinCfg, uint8_t restoreDefault, SPI_Flash_Cfg_Type *pFlashCfg) {\r\n  return RomDriver_SF_Cfg_Flash_Identify(callFromFlash, autoScan, flashPinCfg, restoreDefault, pFlashCfg);\r\n}\r\n/******************************************************************************/\r\n\r\n/******************************************************************************/\r\n#if 0\r\n__ALWAYS_INLINE ATTR_TCM_SECTION\r\nvoid Psram_Init(SPI_Psram_Cfg_Type *psramCfg, SF_Ctrl_Cmds_Cfg *cmdsCfg, SF_Ctrl_Psram_Cfg *sfCtrlPsramCfg)\r\n{\r\n    RomDriver_Psram_Init(psramCfg, cmdsCfg, sfCtrlPsramCfg);\r\n}\r\n#endif\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void Psram_ReadReg(SPI_Psram_Cfg_Type *psramCfg, uint8_t *regValue) { RomDriver_Psram_ReadReg(psramCfg, regValue); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void Psram_WriteReg(SPI_Psram_Cfg_Type *psramCfg, uint8_t *regValue) { RomDriver_Psram_WriteReg(psramCfg, regValue); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type Psram_SetDriveStrength(SPI_Psram_Cfg_Type *psramCfg) { return RomDriver_Psram_SetDriveStrength(psramCfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type Psram_SetBurstWrap(SPI_Psram_Cfg_Type *psramCfg) { return RomDriver_Psram_SetBurstWrap(psramCfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION void Psram_ReadId(SPI_Psram_Cfg_Type *psramCfg, uint8_t *data) { RomDriver_Psram_ReadId(psramCfg, data); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type Psram_EnterQuadMode(SPI_Psram_Cfg_Type *psramCfg) { return RomDriver_Psram_EnterQuadMode(psramCfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type Psram_ExitQuadMode(SPI_Psram_Cfg_Type *psramCfg) { return RomDriver_Psram_ExitQuadMode(psramCfg); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type Psram_ToggleBurstLength(SPI_Psram_Cfg_Type *psramCfg, PSRAM_Ctrl_Mode ctrlMode) { return RomDriver_Psram_ToggleBurstLength(psramCfg, ctrlMode); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type Psram_SoftwareReset(SPI_Psram_Cfg_Type *psramCfg, PSRAM_Ctrl_Mode ctrlMode) { return RomDriver_Psram_SoftwareReset(psramCfg, ctrlMode); }\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type Psram_Set_IDbus_Cfg(SPI_Psram_Cfg_Type *psramCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint32_t len) {\r\n  return RomDriver_Psram_Set_IDbus_Cfg(psramCfg, ioMode, addr, len);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type Psram_Cache_Write_Set(SPI_Psram_Cfg_Type *psramCfg, SF_Ctrl_IO_Type ioMode, BL_Fun_Type wtEn, BL_Fun_Type wbEn, BL_Fun_Type waEn) {\r\n  return RomDriver_Psram_Cache_Write_Set(psramCfg, ioMode, wtEn, wbEn, waEn);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type Psram_Write(SPI_Psram_Cfg_Type *psramCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t *data, uint32_t len) {\r\n  return RomDriver_Psram_Write(psramCfg, ioMode, addr, data, len);\r\n}\r\n\r\n__ALWAYS_INLINE ATTR_TCM_SECTION BL_Err_Type Psram_Read(SPI_Psram_Cfg_Type *psramCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t *data, uint32_t len) {\r\n  return RomDriver_Psram_Read(psramCfg, ioMode, addr, data, len);\r\n}\r\n/******************************************************************************/\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_romdriver.c",
    "content": "#include \"bl702_romdriver.h\"\r\n#include <string.h>\r\n\r\n/** @addtogroup  BL702_Periph_Driver\r\n *  @{\r\n */\r\n\r\n/** @defgroup ROMDRIVER\r\n *  @brief ROMDRIVER common functions\r\n *  @{\r\n */\r\n\r\n/** @defgroup ROMDRIVER_Private_Type\r\n *  @{\r\n */\r\nuint32_t const romDriverTable[] = {\r\n    0x07020001,\r\n    0x00000000,\r\n    0x00000000,\r\n    0x00000000,\r\n\r\n    [ROM_API_INDEX_AON_Power_On_MBG]     = (uint32_t)AON_Power_On_MBG,\r\n    [ROM_API_INDEX_AON_Power_Off_MBG]    = (uint32_t)AON_Power_Off_MBG,\r\n    [ROM_API_INDEX_AON_Power_On_XTAL]    = (uint32_t)AON_Power_On_XTAL,\r\n    [ROM_API_INDEX_AON_Set_Xtal_CapCode] = (uint32_t)AON_Set_Xtal_CapCode,\r\n    [ROM_API_INDEX_AON_Power_Off_XTAL]   = (uint32_t)AON_Power_Off_XTAL,\r\n\r\n    [ROM_API_INDEX_ASM_Delay_Us]      = (uint32_t)ASM_Delay_Us,\r\n    [ROM_API_INDEX_BL702_Delay_US]    = (uint32_t)BL702_Delay_US,\r\n    [ROM_API_INDEX_BL702_Delay_MS]    = (uint32_t)BL702_Delay_MS,\r\n    [ROM_API_INDEX_BL702_MemCpy]      = (uint32_t)BL702_MemCpy,\r\n    [ROM_API_INDEX_BL702_MemCpy4]     = (uint32_t)BL702_MemCpy4,\r\n    [ROM_API_INDEX_BL702_MemCpy_Fast] = (uint32_t)BL702_MemCpy_Fast,\r\n    [ROM_API_INDEX_ARCH_MemCpy_Fast]  = (uint32_t)ARCH_MemCpy_Fast,\r\n    [ROM_API_INDEX_BL702_MemSet]      = (uint32_t)BL702_MemSet,\r\n    [ROM_API_INDEX_BL702_MemSet4]     = (uint32_t)BL702_MemSet4,\r\n    [ROM_API_INDEX_BL702_MemCmp]      = (uint32_t)BL702_MemCmp,\r\n    [ROM_API_INDEX_BFLB_Soft_CRC32]   = (uint32_t)BFLB_Soft_CRC32,\r\n\r\n    [ROM_API_INDEX_GLB_Get_Root_CLK_Sel]                = (uint32_t)GLB_Get_Root_CLK_Sel,\r\n    [ROM_API_INDEX_GLB_Set_System_CLK_Div]              = (uint32_t)GLB_Set_System_CLK_Div,\r\n    [ROM_API_INDEX_GLB_Get_BCLK_Div]                    = (uint32_t)GLB_Get_BCLK_Div,\r\n    [ROM_API_INDEX_GLB_Get_HCLK_Div]                    = (uint32_t)GLB_Get_HCLK_Div,\r\n    [ROM_API_INDEX_Update_SystemCoreClockWith_XTAL]     = (uint32_t)Update_SystemCoreClockWith_XTAL,\r\n    [ROM_API_INDEX_GLB_Set_System_CLK]                  = (uint32_t)GLB_Set_System_CLK,\r\n    [ROM_API_INDEX_System_Core_Clock_Update_From_RC32M] = (uint32_t)System_Core_Clock_Update_From_RC32M,\r\n    [ROM_API_INDEX_GLB_Set_SF_CLK]                      = (uint32_t)GLB_Set_SF_CLK,\r\n    [ROM_API_INDEX_GLB_Power_Off_DLL]                   = (uint32_t)GLB_Power_Off_DLL,\r\n    [ROM_API_INDEX_GLB_Power_On_DLL]                    = (uint32_t)GLB_Power_On_DLL,\r\n    [ROM_API_INDEX_GLB_Enable_DLL_All_Clks]             = (uint32_t)GLB_Enable_DLL_All_Clks,\r\n    [ROM_API_INDEX_GLB_Enable_DLL_Clk]                  = (uint32_t)GLB_Enable_DLL_Clk,\r\n    [ROM_API_INDEX_GLB_Disable_DLL_All_Clks]            = (uint32_t)GLB_Disable_DLL_All_Clks,\r\n    [ROM_API_INDEX_GLB_Disable_DLL_Clk]                 = (uint32_t)GLB_Disable_DLL_Clk,\r\n    [ROM_API_INDEX_GLB_SW_System_Reset]                 = (uint32_t)GLB_SW_System_Reset,\r\n    [ROM_API_INDEX_GLB_SW_CPU_Reset]                    = (uint32_t)GLB_SW_CPU_Reset,\r\n    [ROM_API_INDEX_GLB_SW_POR_Reset]                    = (uint32_t)GLB_SW_POR_Reset,\r\n    [ROM_API_INDEX_GLB_Select_Internal_Flash]           = (uint32_t)GLB_Select_Internal_Flash,\r\n    [ROM_API_INDEX_GLB_Swap_Flash_Pin]                  = (uint32_t)GLB_Swap_Flash_Pin,\r\n    [ROM_API_INDEX_GLB_Swap_Flash_CS_IO2_Pin]           = (uint32_t)GLB_Swap_Flash_CS_IO2_Pin,\r\n    [ROM_API_INDEX_GLB_Swap_Flash_IO0_IO3_Pin]          = (uint32_t)GLB_Swap_Flash_IO0_IO3_Pin,\r\n    [ROM_API_INDEX_GLB_Select_Internal_PSram]           = (uint32_t)GLB_Select_Internal_PSram,\r\n    [ROM_API_INDEX_GLB_GPIO_Init]                       = (uint32_t)GLB_GPIO_Init,\r\n    [ROM_API_INDEX_GLB_GPIO_OUTPUT_Enable]              = (uint32_t)GLB_GPIO_OUTPUT_Enable,\r\n    [ROM_API_INDEX_GLB_GPIO_OUTPUT_Disable]             = (uint32_t)GLB_GPIO_OUTPUT_Disable,\r\n    [ROM_API_INDEX_GLB_GPIO_Set_HZ]                     = (uint32_t)GLB_GPIO_Set_HZ,\r\n    [ROM_API_INDEX_GLB_Deswap_Flash_Pin]                = (uint32_t)GLB_Deswap_Flash_Pin,\r\n    [ROM_API_INDEX_GLB_Select_External_Flash]           = (uint32_t)GLB_Select_External_Flash,\r\n    [ROM_API_INDEX_GLB_GPIO_Get_Fun]                    = (uint32_t)GLB_GPIO_Get_Fun,\r\n\r\n    [ROM_API_INDEX_EF_Ctrl_Busy]            = (uint32_t)EF_Ctrl_Busy,\r\n    [ROM_API_INDEX_EF_Ctrl_Sw_AHB_Clk_0]    = (uint32_t)EF_Ctrl_Sw_AHB_Clk_0,\r\n    [ROM_API_INDEX_EF_Ctrl_Load_Efuse_R0]   = (uint32_t)EF_Ctrl_Load_Efuse_R0,\r\n    [ROM_API_INDEX_EF_Ctrl_Clear]           = (uint32_t)EF_Ctrl_Clear,\r\n    [ROM_API_INDEX_EF_Ctrl_Get_Trim_Parity] = (uint32_t)EF_Ctrl_Get_Trim_Parity,\r\n    [ROM_API_INDEX_EF_Ctrl_Read_RC32K_Trim] = (uint32_t)EF_Ctrl_Read_RC32K_Trim,\r\n    [ROM_API_INDEX_EF_Ctrl_Read_RC32M_Trim] = (uint32_t)EF_Ctrl_Read_RC32M_Trim,\r\n\r\n    [ROM_API_INDEX_PDS_Trim_RC32M]              = (uint32_t)PDS_Trim_RC32M,\r\n    [ROM_API_INDEX_PDS_Select_RC32M_As_PLL_Ref] = (uint32_t)PDS_Select_RC32M_As_PLL_Ref,\r\n    [ROM_API_INDEX_PDS_Select_XTAL_As_PLL_Ref]  = (uint32_t)PDS_Select_XTAL_As_PLL_Ref,\r\n    [ROM_API_INDEX_PDS_Power_On_PLL]            = (uint32_t)PDS_Power_On_PLL,\r\n    [ROM_API_INDEX_PDS_Enable_PLL_All_Clks]     = (uint32_t)PDS_Enable_PLL_All_Clks,\r\n    [ROM_API_INDEX_PDS_Disable_PLL_All_Clks]    = (uint32_t)PDS_Disable_PLL_All_Clks,\r\n    [ROM_API_INDEX_PDS_Enable_PLL_Clk]          = (uint32_t)PDS_Enable_PLL_Clk,\r\n    [ROM_API_INDEX_PDS_Disable_PLL_Clk]         = (uint32_t)PDS_Disable_PLL_Clk,\r\n    [ROM_API_INDEX_PDS_Power_Off_PLL]           = (uint32_t)PDS_Power_Off_PLL,\r\n    [ROM_API_INDEX_PDS_Reset]                   = (uint32_t)PDS_Reset,\r\n    [ROM_API_INDEX_PDS_Enable]                  = (uint32_t)PDS_Enable,\r\n    [ROM_API_INDEX_PDS_Auto_Time_Config]        = (uint32_t)PDS_Auto_Time_Config,\r\n    [ROM_API_INDEX_PDS_Auto_Enable]             = (uint32_t)PDS_Auto_Enable,\r\n    [ROM_API_INDEX_PDS_Manual_Force_Turn_Off]   = (uint32_t)PDS_Manual_Force_Turn_Off,\r\n    [ROM_API_INDEX_PDS_Manual_Force_Turn_On]    = (uint32_t)PDS_Manual_Force_Turn_On,\r\n\r\n    [ROM_API_INDEX_HBN_Enable]            = (uint32_t)HBN_Enable,\r\n    [ROM_API_INDEX_HBN_Reset]             = (uint32_t)HBN_Reset,\r\n    [ROM_API_INDEX_HBN_GPIO_Dbg_Pull_Cfg] = (uint32_t)HBN_GPIO_Dbg_Pull_Cfg,\r\n    [ROM_API_INDEX_HBN_Trim_RC32K]        = (uint32_t)HBN_Trim_RC32K,\r\n    [ROM_API_INDEX_HBN_Set_ROOT_CLK_Sel]  = (uint32_t)HBN_Set_ROOT_CLK_Sel,\r\n\r\n    [ROM_API_INDEX_XIP_SFlash_State_Save]               = (uint32_t)XIP_SFlash_State_Save,\r\n    [ROM_API_INDEX_XIP_SFlash_State_Restore]            = (uint32_t)XIP_SFlash_State_Restore,\r\n    [ROM_API_INDEX_XIP_SFlash_Erase_Need_Lock]          = (uint32_t)XIP_SFlash_Erase_Need_Lock,\r\n    [ROM_API_INDEX_XIP_SFlash_Write_Need_Lock]          = (uint32_t)XIP_SFlash_Write_Need_Lock,\r\n    [ROM_API_INDEX_XIP_SFlash_Read_Need_Lock]           = (uint32_t)XIP_SFlash_Read_Need_Lock,\r\n    [ROM_API_INDEX_XIP_SFlash_GetJedecId_Need_Lock]     = (uint32_t)XIP_SFlash_GetJedecId_Need_Lock,\r\n    [ROM_API_INDEX_XIP_SFlash_GetDeviceId_Need_Lock]    = (uint32_t)XIP_SFlash_GetDeviceId_Need_Lock,\r\n    [ROM_API_INDEX_XIP_SFlash_GetUniqueId_Need_Lock]    = (uint32_t)XIP_SFlash_GetUniqueId_Need_Lock,\r\n    [ROM_API_INDEX_XIP_SFlash_Read_Via_Cache_Need_Lock] = (uint32_t)XIP_SFlash_Read_Via_Cache_Need_Lock,\r\n    // [ROM_API_INDEX_XIP_SFlash_Read_With_Lock] = (uint32_t)XIP_SFlash_Read_With_Lock,\r\n    // [ROM_API_INDEX_XIP_SFlash_Write_With_Lock] = (uint32_t)XIP_SFlash_Write_With_Lock,\r\n    // [ROM_API_INDEX_XIP_SFlash_Erase_With_Lock] = (uint32_t)XIP_SFlash_Erase_With_Lock,\r\n\r\n    [ROM_API_INDEX_SFlash_Init]                      = (uint32_t)SFlash_Init,\r\n    [ROM_API_INDEX_SFlash_SetSPIMode]                = (uint32_t)SFlash_SetSPIMode,\r\n    [ROM_API_INDEX_SFlash_Read_Reg]                  = (uint32_t)SFlash_Read_Reg,\r\n    [ROM_API_INDEX_SFlash_Write_Reg]                 = (uint32_t)SFlash_Write_Reg,\r\n    [ROM_API_INDEX_SFlash_Read_Reg_With_Cmd]         = (uint32_t)SFlash_Read_Reg_With_Cmd,\r\n    [ROM_API_INDEX_SFlash_Write_Reg_With_Cmd]        = (uint32_t)SFlash_Write_Reg_With_Cmd,\r\n    [ROM_API_INDEX_SFlash_Busy]                      = (uint32_t)SFlash_Busy,\r\n    [ROM_API_INDEX_SFlash_Write_Enable]              = (uint32_t)SFlash_Write_Enable,\r\n    [ROM_API_INDEX_SFlash_Qspi_Enable]               = (uint32_t)SFlash_Qspi_Enable,\r\n    [ROM_API_INDEX_SFlash_Volatile_Reg_Write_Enable] = (uint32_t)SFlash_Volatile_Reg_Write_Enable,\r\n    [ROM_API_INDEX_SFlash_Chip_Erase]                = (uint32_t)SFlash_Chip_Erase,\r\n    [ROM_API_INDEX_SFlash_Sector_Erase]              = (uint32_t)SFlash_Sector_Erase,\r\n    [ROM_API_INDEX_SFlash_Blk32_Erase]               = (uint32_t)SFlash_Blk32_Erase,\r\n    [ROM_API_INDEX_SFlash_Blk64_Erase]               = (uint32_t)SFlash_Blk64_Erase,\r\n    [ROM_API_INDEX_SFlash_Erase]                     = (uint32_t)SFlash_Erase,\r\n    [ROM_API_INDEX_SFlash_Program]                   = (uint32_t)SFlash_Program,\r\n    [ROM_API_INDEX_SFlash_GetUniqueId]               = (uint32_t)SFlash_GetUniqueId,\r\n    [ROM_API_INDEX_SFlash_GetJedecId]                = (uint32_t)SFlash_GetJedecId,\r\n    [ROM_API_INDEX_SFlash_GetDeviceId]               = (uint32_t)SFlash_GetDeviceId,\r\n    [ROM_API_INDEX_SFlash_Powerdown]                 = (uint32_t)SFlash_Powerdown,\r\n    [ROM_API_INDEX_SFlash_Releae_Powerdown]          = (uint32_t)SFlash_Releae_Powerdown,\r\n    [ROM_API_INDEX_SFlash_Restore_From_Powerdown]    = (uint32_t)SFlash_Restore_From_Powerdown,\r\n    [ROM_API_INDEX_SFlash_SetBurstWrap]              = (uint32_t)SFlash_SetBurstWrap,\r\n    [ROM_API_INDEX_SFlash_DisableBurstWrap]          = (uint32_t)SFlash_DisableBurstWrap,\r\n    [ROM_API_INDEX_SFlash_Software_Reset]            = (uint32_t)SFlash_Software_Reset,\r\n    [ROM_API_INDEX_SFlash_Reset_Continue_Read]       = (uint32_t)SFlash_Reset_Continue_Read,\r\n    [ROM_API_INDEX_SFlash_Set_IDbus_Cfg]             = (uint32_t)SFlash_Set_IDbus_Cfg,\r\n    [ROM_API_INDEX_SFlash_IDbus_Read_Enable]         = (uint32_t)SFlash_IDbus_Read_Enable,\r\n    [ROM_API_INDEX_SFlash_Cache_Read_Enable]         = (uint32_t)SFlash_Cache_Read_Enable,\r\n    [ROM_API_INDEX_SFlash_Cache_Read_Disable]        = (uint32_t)SFlash_Cache_Read_Disable,\r\n    [ROM_API_INDEX_SFlash_Read]                      = (uint32_t)SFlash_Read,\r\n\r\n    [ROM_API_INDEX_L1C_Cache_Enable_Set]     = (uint32_t)L1C_Cache_Enable_Set,\r\n    [ROM_API_INDEX_L1C_Cache_Write_Set]      = (uint32_t)L1C_Cache_Write_Set,\r\n    [ROM_API_INDEX_L1C_Cache_Flush]          = (uint32_t)L1C_Cache_Flush,\r\n    [ROM_API_INDEX_L1C_Cache_Hit_Count_Get]  = (uint32_t)L1C_Cache_Hit_Count_Get,\r\n    [ROM_API_INDEX_L1C_Cache_Miss_Count_Get] = (uint32_t)L1C_Cache_Miss_Count_Get,\r\n    [ROM_API_INDEX_L1C_Cache_Read_Disable]   = (uint32_t)L1C_Cache_Read_Disable,\r\n    [ROM_API_INDEX_L1C_Set_Wrap]             = (uint32_t)L1C_Set_Wrap,\r\n    [ROM_API_INDEX_L1C_Set_Way_Disable]      = (uint32_t)L1C_Set_Way_Disable,\r\n    [ROM_API_INDEX_L1C_IROM_2T_Access_Set]   = (uint32_t)L1C_IROM_2T_Access_Set,\r\n\r\n    [ROM_API_INDEX_SF_Ctrl_Enable]                 = (uint32_t)SF_Ctrl_Enable,\r\n    [ROM_API_INDEX_SF_Ctrl_Psram_Init]             = (uint32_t)SF_Ctrl_Psram_Init,\r\n    [ROM_API_INDEX_SF_Ctrl_Get_Clock_Delay]        = (uint32_t)SF_Ctrl_Get_Clock_Delay,\r\n    [ROM_API_INDEX_SF_Ctrl_Set_Clock_Delay]        = (uint32_t)SF_Ctrl_Set_Clock_Delay,\r\n    [ROM_API_INDEX_SF_Ctrl_Cmds_Set]               = (uint32_t)SF_Ctrl_Cmds_Set,\r\n    [ROM_API_INDEX_SF_Ctrl_Set_Owner]              = (uint32_t)SF_Ctrl_Set_Owner,\r\n    [ROM_API_INDEX_SF_Ctrl_Disable]                = (uint32_t)SF_Ctrl_Disable,\r\n    [ROM_API_INDEX_SF_Ctrl_Select_Pad]             = (uint32_t)SF_Ctrl_Select_Pad,\r\n    [ROM_API_INDEX_SF_Ctrl_Select_Bank]            = (uint32_t)SF_Ctrl_Select_Bank,\r\n    [ROM_API_INDEX_SF_Ctrl_AES_Enable_BE]          = (uint32_t)SF_Ctrl_AES_Enable_BE,\r\n    [ROM_API_INDEX_SF_Ctrl_AES_Enable_LE]          = (uint32_t)SF_Ctrl_AES_Enable_LE,\r\n    [ROM_API_INDEX_SF_Ctrl_AES_Set_Region]         = (uint32_t)SF_Ctrl_AES_Set_Region,\r\n    [ROM_API_INDEX_SF_Ctrl_AES_Set_Key]            = (uint32_t)SF_Ctrl_AES_Set_Key,\r\n    [ROM_API_INDEX_SF_Ctrl_AES_Set_Key_BE]         = (uint32_t)SF_Ctrl_AES_Set_Key_BE,\r\n    [ROM_API_INDEX_SF_Ctrl_AES_Set_IV]             = (uint32_t)SF_Ctrl_AES_Set_IV,\r\n    [ROM_API_INDEX_SF_Ctrl_AES_Set_IV_BE]          = (uint32_t)SF_Ctrl_AES_Set_IV_BE,\r\n    [ROM_API_INDEX_SF_Ctrl_AES_Enable]             = (uint32_t)SF_Ctrl_AES_Enable,\r\n    [ROM_API_INDEX_SF_Ctrl_AES_Disable]            = (uint32_t)SF_Ctrl_AES_Disable,\r\n    [ROM_API_INDEX_SF_Ctrl_Is_AES_Enable]          = (uint32_t)SF_Ctrl_Is_AES_Enable,\r\n    [ROM_API_INDEX_SF_Ctrl_Set_Flash_Image_Offset] = (uint32_t)SF_Ctrl_Set_Flash_Image_Offset,\r\n    [ROM_API_INDEX_SF_Ctrl_Get_Flash_Image_Offset] = (uint32_t)SF_Ctrl_Get_Flash_Image_Offset,\r\n    [ROM_API_INDEX_SF_Ctrl_Select_Clock]           = (uint32_t)SF_Ctrl_Select_Clock,\r\n    [ROM_API_INDEX_SF_Ctrl_SendCmd]                = (uint32_t)SF_Ctrl_SendCmd,\r\n    [ROM_API_INDEX_SF_Ctrl_Flash_Read_Icache_Set]  = (uint32_t)SF_Ctrl_Flash_Read_Icache_Set,\r\n    [ROM_API_INDEX_SF_Ctrl_Psram_Write_Icache_Set] = (uint32_t)SF_Ctrl_Psram_Write_Icache_Set,\r\n    [ROM_API_INDEX_SF_Ctrl_Psram_Read_Icache_Set]  = (uint32_t)SF_Ctrl_Psram_Read_Icache_Set,\r\n    [ROM_API_INDEX_SF_Ctrl_GetBusyState]           = (uint32_t)SF_Ctrl_GetBusyState,\r\n    [ROM_API_INDEX_SF_Cfg_Deinit_Ext_Flash_Gpio]   = (uint32_t)SF_Cfg_Deinit_Ext_Flash_Gpio,\r\n    [ROM_API_INDEX_SF_Cfg_Init_Ext_Flash_Gpio]     = (uint32_t)SF_Cfg_Init_Ext_Flash_Gpio,\r\n    [ROM_API_INDEX_SF_Cfg_Get_Flash_Cfg_Need_Lock] = (uint32_t)SF_Cfg_Get_Flash_Cfg_Need_Lock,\r\n    [ROM_API_INDEX_SF_Cfg_Init_Flash_Gpio]         = (uint32_t)SF_Cfg_Init_Flash_Gpio,\r\n    [ROM_API_INDEX_SF_Cfg_Flash_Identify]          = (uint32_t)SF_Cfg_Flash_Identify,\r\n\r\n    [ROM_API_INDEX_Psram_Init]              = (uint32_t)Psram_Init,\r\n    [ROM_API_INDEX_Psram_ReadReg]           = (uint32_t)Psram_ReadReg,\r\n    [ROM_API_INDEX_Psram_WriteReg]          = (uint32_t)Psram_WriteReg,\r\n    [ROM_API_INDEX_Psram_SetDriveStrength]  = (uint32_t)Psram_SetDriveStrength,\r\n    [ROM_API_INDEX_Psram_SetBurstWrap]      = (uint32_t)Psram_SetBurstWrap,\r\n    [ROM_API_INDEX_Psram_ReadId]            = (uint32_t)Psram_ReadId,\r\n    [ROM_API_INDEX_Psram_EnterQuadMode]     = (uint32_t)Psram_EnterQuadMode,\r\n    [ROM_API_INDEX_Psram_ExitQuadMode]      = (uint32_t)Psram_ExitQuadMode,\r\n    [ROM_API_INDEX_Psram_ToggleBurstLength] = (uint32_t)Psram_ToggleBurstLength,\r\n    [ROM_API_INDEX_Psram_SoftwareReset]     = (uint32_t)Psram_SoftwareReset,\r\n    [ROM_API_INDEX_Psram_Set_IDbus_Cfg]     = (uint32_t)Psram_Set_IDbus_Cfg,\r\n    [ROM_API_INDEX_Psram_Cache_Write_Set]   = (uint32_t)Psram_Cache_Write_Set,\r\n    [ROM_API_INDEX_Psram_Write]             = (uint32_t)Psram_Write,\r\n    [ROM_API_INDEX_Psram_Read]              = (uint32_t)Psram_Read,\r\n\r\n    [ROM_API_INDEX_FUNC_INVALID_START... ROM_API_INDEX_FUNC_LAST_ENTRY] = 0xdeedbeef,\r\n};\r\n\r\n/*@} end of group ROMDRIVER_Private_Type*/\r\n\r\n/** @defgroup ROMDRIVER_Private_Defines\r\n *  @{\r\n */\r\n\r\n/*@} end of group ROMDRIVER_Private_Defines */\r\n\r\n/** @defgroup ROMDRIVER_Private_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group ROMDRIVER_Private_Variables */\r\n\r\n/** @defgroup ROMDRIVER_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group ROMDRIVER_Global_Variables */\r\n\r\n/** @defgroup ROMDRIVER_Private_FunctionDeclaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group ROMDRIVER_Private_FunctionDeclaration */\r\n\r\n/** @defgroup ROMDRIVER_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group ROMDRIVER_Private_Functions */\r\n\r\n/** @defgroup ROMDRIVER_Public_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group ROMDRIVER_Public_Functions */\r\n\r\n/*@} end of group ROMDRIVER_COMMON */\r\n\r\n/*@} end of group BL702_Periph_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_sec_dbg.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_sec_dbg.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_sec_dbg.h\"\r\n#include \"string.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SEC_DBG\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SEC_DBG_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group SEC_DBG_Private_Macros */\r\n\r\n/** @defgroup  SEC_DBG_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group SEC_DBG_Private_Types */\r\n\r\n/** @defgroup  SEC_DBG_Private_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group SEC_DBG_Private_Variables */\r\n\r\n/** @defgroup  SEC_DBG_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group SEC_DBG_Global_Variables */\r\n\r\n/** @defgroup  SEC_DBG_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group SEC_DBG_Private_Fun_Declaration */\r\n\r\n/** @defgroup  SEC_DBG_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Sec Dbg read chip ID\r\n                                                                                *\r\n                                                                                * @param  id[8]: chip ID buffer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Dbg_Read_Chip_ID(uint8_t id[8]) {\r\n  uint32_t idLow, idHigh;\r\n\r\n  idLow = BL_RD_REG(SEC_DBG_BASE, SEC_DBG_SD_CHIP_ID_LOW);\r\n  BL_WRWD_TO_BYTEP(id, idLow);\r\n\r\n  idHigh = BL_RD_REG(SEC_DBG_BASE, SEC_DBG_SD_CHIP_ID_HIGH);\r\n  BL_WRWD_TO_BYTEP((id + 4), idHigh);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Sec Dbg read MAC address\r\n                                                                                *\r\n                                                                                * @param  macAddr[6]: MAC address buffer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Dbg_Read_WiFi_MAC(uint8_t macAddr[6]) {\r\n  uint32_t macLow, macHigh;\r\n\r\n  macLow = BL_RD_REG(SEC_DBG_BASE, SEC_DBG_SD_WIFI_MAC_LOW);\r\n  BL_WRWD_TO_BYTEP(macAddr, macLow);\r\n\r\n  macHigh    = BL_RD_REG(SEC_DBG_BASE, SEC_DBG_SD_WIFI_MAC_HIGH);\r\n  macAddr[4] = (macHigh >> 0) & 0xff;\r\n  macAddr[5] = (macHigh >> 8) & 0xff;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Sec Dbg read debug mode\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return debug mode status\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t Sec_Dbg_Read_Dbg_Mode(void) { return BL_GET_REG_BITS_VAL(BL_RD_REG(SEC_DBG_BASE, SEC_DBG_SD_STATUS), SEC_DBG_SD_DBG_MODE); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Sec Dbg read debug enable status\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return enable status\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t Sec_Dbg_Read_Dbg_Enable(void) { return BL_GET_REG_BITS_VAL(BL_RD_REG(SEC_DBG_BASE, SEC_DBG_SD_STATUS), SEC_DBG_SD_DBG_ENA); }\r\n\r\n/*@} end of group SEC_DBG_Public_Functions */\r\n\r\n/*@} end of group SEC_DBG */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_sec_eng.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_sec_eng.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_sec_eng.h\"\r\n#include \"string.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SEC_ENG\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SEC_ENG_Private_Macros\r\n *  @{\r\n */\r\n#define PUT_UINT32_BE(n, b, i)                                                                                                                                                                         \\\r\n  {                                                                                                                                                                                                    \\\r\n    (b)[(i)]     = (uint8_t)((n) >> 24);                                                                                                                                                               \\\r\n    (b)[(i) + 1] = (uint8_t)((n) >> 16);                                                                                                                                                               \\\r\n    (b)[(i) + 2] = (uint8_t)((n) >> 8);                                                                                                                                                                \\\r\n    (b)[(i) + 3] = (uint8_t)((n));                                                                                                                                                                     \\\r\n  }\r\n#define PUT_UINT64_BE(n, b, i)                                                                                                                                                                         \\\r\n  {                                                                                                                                                                                                    \\\r\n    (b)[(i)]     = (uint8_t)((n) >> 56);                                                                                                                                                               \\\r\n    (b)[(i) + 1] = (uint8_t)((n) >> 48);                                                                                                                                                               \\\r\n    (b)[(i) + 2] = (uint8_t)((n) >> 40);                                                                                                                                                               \\\r\n    (b)[(i) + 3] = (uint8_t)((n) >> 32);                                                                                                                                                               \\\r\n    (b)[(i) + 4] = (uint8_t)((n) >> 24);                                                                                                                                                               \\\r\n    (b)[(i) + 5] = (uint8_t)((n) >> 16);                                                                                                                                                               \\\r\n    (b)[(i) + 6] = (uint8_t)((n) >> 8);                                                                                                                                                                \\\r\n    (b)[(i) + 7] = (uint8_t)((n));                                                                                                                                                                     \\\r\n  }\r\n#define SEC_ENG_SHA_BUSY_TIMEOUT_COUNT  (100 * 160 * 1000)\r\n#define SEC_ENG_AES_BUSY_TIMEOUT_COUNT  (100 * 160 * 1000)\r\n#define SEC_ENG_TRNG_BUSY_TIMEOUT_COUNT (100 * 160 * 1000)\r\n#define SEC_ENG_PKA_INT_TIMEOUT_COUNT   (100 * 160 * 1000)\r\n#define SEC_ENG_GMAC_BUSY_TIMEOUT_COUNT (100 * 160 * 1000)\r\n\r\n/*@} end of group SEC_ENG_Private_Macros */\r\n\r\n/** @defgroup  SEC_ENG_Private_Types\r\n *  @{\r\n */\r\nstruct pka0_pld_cfg {\r\n  union {\r\n    struct {\r\n      uint32_t size        : 12; /*[11: 0],       r/w,        0x0 */\r\n      uint32_t d_reg_index : 8;  /*[19:12],        r/w,        0x0 */\r\n      uint32_t d_reg_type  : 4;  /*[23:20],        r/w,        0x0 */\r\n      uint32_t op          : 7;  /*[30:24],        r/w,        0x0 */\r\n      uint32_t last_op     : 1;  /*[31:31],        r/w,        0x0 */\r\n    } BF;\r\n    uint32_t WORD;\r\n  } value;\r\n};\r\n\r\nstruct pka0_pldi_cfg {\r\n  union {\r\n    struct {\r\n      uint32_t rsvd        : 12; /*[11: 0],       r/w,        0x0 */\r\n      uint32_t d_reg_index : 8;  /*[19:12],        r/w,        0x0 */\r\n      uint32_t d_reg_type  : 4;  /*[23:20],        r/w,        0x0 */\r\n      uint32_t op          : 7;  /*[30:24],        r/w,        0x0 */\r\n      uint32_t last_op     : 1;  /*[31:31],        r/w,        0x0 */\r\n    } BF;\r\n    uint32_t WORD;\r\n  } value;\r\n};\r\n\r\nstruct pka0_common_op_first_cfg {\r\n  union {\r\n    struct {\r\n      uint32_t s0_reg_idx  : 8; /*[7: 0],       r/w,        0x0 */\r\n      uint32_t s0_reg_type : 4; /*[11:8],       r/w,        0x0 */\r\n      uint32_t d_reg_idx   : 8; /*[19:12],      r/w,        0x0 */\r\n      uint32_t d_reg_type  : 4; /*[23:20],      r/w,        0x0 */\r\n      uint32_t op          : 7; /*[30:24],      r/w,        0x0 */\r\n      uint32_t last_op     : 1; /*[31:31],      r/w,        0x0 */\r\n    } BF;\r\n    uint32_t WORD;\r\n  } value;\r\n};\r\n\r\nstruct pka0_common_op_snd_cfg_S1_only {\r\n  union {\r\n    struct {\r\n      uint32_t reserved_0_11  : 12; /*[11: 0],       rsvd,       0x0 */\r\n      uint32_t s1_reg_idx     : 8;  /*[19:12],       r/w,        0x0 */\r\n      uint32_t s1_reg_type    : 4;  /*[23:20],       r/w,        0x0 */\r\n      uint32_t reserved_24_31 : 8;  /*[31:24],       rsvd,       0x0 */\r\n    } BF;\r\n    uint32_t WORD;\r\n  } value;\r\n};\r\n\r\nstruct pka0_common_op_snd_cfg_S2_only {\r\n  union {\r\n    struct {\r\n      uint32_t s2_reg_idx     : 8;  /*[7 : 0],       r/w,        0x0 */\r\n      uint32_t s2_reg_type    : 4;  /*[11: 8],       r/w,        0x0 */\r\n      uint32_t reserved_12_31 : 20; /*[31:12],       rsvd,       0x0 */\r\n    } BF;\r\n    uint32_t WORD;\r\n  } value;\r\n};\r\n\r\nstruct pka0_common_op_snd_cfg_S1_S2 {\r\n  union {\r\n    struct {\r\n      uint32_t s2_reg_idx     : 8; /*[7 : 0],       r/w,        0x0 */\r\n      uint32_t s2_reg_type    : 4; /*[11: 8],       r/w,        0x0 */\r\n      uint32_t s1_reg_idx     : 8; /*[19:12],       r/w,        0x0 */\r\n      uint32_t s1_reg_type    : 4; /*[23:20],       r/w,        0x0 */\r\n      uint32_t reserved_24_31 : 8; /*[31:24],       rsvd,       0x0 */\r\n    } BF;\r\n    uint32_t WORD;\r\n  } value;\r\n};\r\n\r\nstruct pka0_bit_shift_op_cfg {\r\n  union {\r\n    struct {\r\n      uint32_t bit_shift      : 15; /*[14: 0],       r/w,        0x0 */\r\n      uint32_t reserved_24_31 : 17; /*[31:15],       rsvd,        0x0 */\r\n    } BF;\r\n    uint32_t WORD;\r\n  } value;\r\n};\r\n\r\n/*@} end of group SEC_ENG_Private_Types */\r\n\r\n/** @defgroup  SEC_ENG_Private_Variables\r\n *  @{\r\n */\r\nstatic intCallback_Type *secEngIntCbfArra[SEC_ENG_INT_ALL] = {NULL};\r\n\r\n/*@} end of group SEC_ENG_Private_Variables */\r\n\r\n/** @defgroup  SEC_ENG_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group SEC_ENG_Global_Variables */\r\n\r\n/** @defgroup  SEC_ENG_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group SEC_ENG_Private_Fun_Declaration */\r\n\r\n/** @defgroup  SEC_ENG_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SHA256 initialization function\r\n                                                                                *\r\n                                                                                * @param  shaCtx: SHA256 context pointer\r\n                                                                                * @param  shaNo: SHA ID type\r\n                                                                                * @param  shaType: SHA type\r\n                                                                                * @param  shaTmpBuf[16]: SHA temp buffer for store data that is less than 64 bytes\r\n                                                                                * @param  padding[16]: SHA padding buffer for store padding data\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_SHA256_Init(SEC_Eng_SHA256_Ctx *shaCtx, SEC_ENG_SHA_ID_Type shaNo, SEC_ENG_SHA_Type shaType, uint32_t shaTmpBuf[16], uint32_t padding[16]) {\r\n  uint32_t SHAx = SEC_ENG_BASE + SEC_ENG_SHA_OFFSET;\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_SHA_ID_TYPE(shaNo));\r\n  CHECK_PARAM(IS_SEC_ENG_SHA_TYPE(shaType));\r\n\r\n  /* Deal SHA control register to set SHA mode */\r\n  tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_CTRL);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_SHA_MODE, shaType);\r\n  BL_WR_REG(SHAx, SEC_ENG_SE_SHA_CTRL, tmpVal);\r\n\r\n  /* Clear context */\r\n  memset(shaCtx, 0, sizeof(SEC_Eng_SHA256_Ctx));\r\n\r\n  /* Init temp buffer and padding buffer */\r\n  shaCtx->shaBuf     = shaTmpBuf;\r\n  shaCtx->shaPadding = padding;\r\n  BL702_MemSet(shaCtx->shaPadding, 0, 64);\r\n  BL702_MemSet(shaCtx->shaPadding, 0x80, 1);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(SEC_SHA_IRQn, SEC_SHA_IRQHandler);\r\n#endif\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SHA start function\r\n                                                                                *\r\n                                                                                * @param  shaNo: SHA ID type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_SHA_Start(SEC_ENG_SHA_ID_Type shaNo) {\r\n  uint32_t SHAx = SEC_ENG_BASE + SEC_ENG_SHA_OFFSET;\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_SHA_ID_TYPE(shaNo));\r\n\r\n  /* Set SHA enable */\r\n  tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_CTRL);\r\n\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_SHA_EN);\r\n  /* Hash sel 0 for new start */\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_SHA_HASH_SEL);\r\n\r\n  BL_WR_REG(SHAx, SEC_ENG_SE_SHA_CTRL, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SHA256 update input data function\r\n                                                                                *\r\n                                                                                * @param  shaCtx: SHA256 context pointer\r\n                                                                                * @param  shaNo: SHA ID type\r\n                                                                                * @param  input: SHA input data pointer, and the address should be word align\r\n                                                                                * @param  len: SHA input data length\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type Sec_Eng_SHA256_Update(SEC_Eng_SHA256_Ctx *shaCtx, SEC_ENG_SHA_ID_Type shaNo, const uint8_t *input, uint32_t len) {\r\n  uint32_t SHAx = SEC_ENG_BASE + SEC_ENG_SHA_OFFSET;\r\n  uint32_t tmpVal;\r\n  uint32_t fill;\r\n  uint32_t left;\r\n  uint32_t timeoutCnt = SEC_ENG_SHA_BUSY_TIMEOUT_COUNT;\r\n\r\n  if (len == 0) {\r\n    return SUCCESS;\r\n  }\r\n\r\n  do {\r\n    tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_CTRL);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_SHA_BUSY));\r\n\r\n  /* SHA need set se_sha_sel to 1 to keep the last SHA state */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_SHA_HASH_SEL, shaCtx->shaFeed);\r\n\r\n  left = shaCtx->total[0] & 0x3F;\r\n  fill = 64 - left;\r\n\r\n  shaCtx->total[0] += (uint32_t)len;\r\n  shaCtx->total[0] &= 0xFFFFFFFF;\r\n\r\n  if (shaCtx->total[0] < (uint32_t)len) {\r\n    shaCtx->total[1]++;\r\n  }\r\n\r\n  if (left && len >= fill) {\r\n    BL702_MemCpy_Fast((void *)((uint8_t *)shaCtx->shaBuf + left), input, fill);\r\n    /* Set data source address */\r\n    BL_WR_REG(SHAx, SEC_ENG_SE_SHA_MSA, (uint32_t)shaCtx->shaBuf);\r\n\r\n    /* Set data length */\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_SHA_MSG_LEN, 1);\r\n    BL_WR_REG(SHAx, SEC_ENG_SE_SHA_CTRL, tmpVal);\r\n    /* Trigger */\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_SHA_TRIG_1T);\r\n    BL_WR_REG(SHAx, SEC_ENG_SE_SHA_CTRL, tmpVal);\r\n\r\n    shaCtx->shaFeed = 1;\r\n    input += fill;\r\n    len -= fill;\r\n    left = 0;\r\n  }\r\n\r\n  fill = len / 64;\r\n  len  = len % 64;\r\n\r\n  if (fill > 0) {\r\n    /* Wait finished */\r\n    timeoutCnt = SEC_ENG_SHA_BUSY_TIMEOUT_COUNT;\r\n\r\n    do {\r\n      tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_CTRL);\r\n      timeoutCnt--;\r\n\r\n      if (timeoutCnt == 0) {\r\n        return TIMEOUT;\r\n      }\r\n    } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_SHA_BUSY));\r\n\r\n    /* SHA need set se_sha_sel to 1 to keep the last sha state */\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_SHA_HASH_SEL, shaCtx->shaFeed);\r\n\r\n    /* Fill data */\r\n    BL_WR_REG(SHAx, SEC_ENG_SE_SHA_MSA, (uint32_t)input);\r\n\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_SHA_MSG_LEN, fill);\r\n    BL_WR_REG(SHAx, SEC_ENG_SE_SHA_CTRL, tmpVal);\r\n\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_SHA_TRIG_1T);\r\n    BL_WR_REG(SHAx, SEC_ENG_SE_SHA_CTRL, tmpVal);\r\n\r\n    input += (fill * 64);\r\n    shaCtx->shaFeed = 1;\r\n  }\r\n\r\n  if (len > 0) {\r\n    /* Wait finished */\r\n    timeoutCnt = SEC_ENG_SHA_BUSY_TIMEOUT_COUNT;\r\n\r\n    do {\r\n      tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_CTRL);\r\n      timeoutCnt--;\r\n\r\n      if (timeoutCnt == 0) {\r\n        return TIMEOUT;\r\n      }\r\n    } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_SHA_BUSY));\r\n\r\n    /* Copy left data into temp buffer */\r\n    BL702_MemCpy_Fast((void *)((uint8_t *)shaCtx->shaBuf + left), input, len);\r\n  }\r\n\r\n  /* Wait finished */\r\n  timeoutCnt = SEC_ENG_SHA_BUSY_TIMEOUT_COUNT;\r\n\r\n  do {\r\n    tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_CTRL);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_SHA_BUSY));\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SHA256 finish to get output function\r\n                                                                                *\r\n                                                                                * @param  shaCtx: SHA256 context pointer\r\n                                                                                * @param  shaNo: SHA ID type\r\n                                                                                * @param  hash: SHA output data of SHA result\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type Sec_Eng_SHA256_Finish(SEC_Eng_SHA256_Ctx *shaCtx, SEC_ENG_SHA_ID_Type shaNo, uint8_t *hash) {\r\n  uint32_t last, padn;\r\n  uint32_t high, low;\r\n  uint8_t  shaMode;\r\n  uint8_t  msgLen[8];\r\n  uint8_t *p    = (uint8_t *)hash;\r\n  uint32_t SHAx = SEC_ENG_BASE + SEC_ENG_SHA_OFFSET;\r\n  uint32_t tmpVal;\r\n  uint32_t timeoutCnt = SEC_ENG_SHA_BUSY_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_SHA_ID_TYPE(shaNo));\r\n\r\n  /* Wait finished */\r\n  do {\r\n    tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_CTRL);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_SHA_BUSY));\r\n\r\n  high = (shaCtx->total[0] >> 29) | (shaCtx->total[1] << 3);\r\n  low  = (shaCtx->total[0] << 3);\r\n\r\n  PUT_UINT32_BE(high, msgLen, 0);\r\n  PUT_UINT32_BE(low, msgLen, 4);\r\n\r\n  last = shaCtx->total[0] & 0x3F;\r\n  padn = (last < 56) ? (56 - last) : (120 - last);\r\n\r\n  Sec_Eng_SHA256_Update(shaCtx, shaNo, (uint8_t *)shaCtx->shaPadding, padn);\r\n\r\n  /* Wait for  shaPadding idle */\r\n  timeoutCnt = SEC_ENG_SHA_BUSY_TIMEOUT_COUNT;\r\n\r\n  do {\r\n    tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_CTRL);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_SHA_BUSY));\r\n\r\n  BL702_MemCpy_Fast(shaCtx->shaPadding, msgLen, 8);\r\n  Sec_Eng_SHA256_Update(shaCtx, shaNo, (uint8_t *)shaCtx->shaPadding, 8);\r\n\r\n  /* Wait finished */\r\n  timeoutCnt = SEC_ENG_SHA_BUSY_TIMEOUT_COUNT;\r\n\r\n  do {\r\n    tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_CTRL);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_SHA_BUSY));\r\n\r\n  tmpVal  = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_CTRL);\r\n  shaMode = (SEC_ENG_SHA_Type)BL_GET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_SHA_MODE);\r\n  /* Copy SHA value */\r\n  tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_HASH_L_0);\r\n  *p++   = (tmpVal & 0xff);\r\n  *p++   = ((tmpVal >> 8) & 0xff);\r\n  *p++   = ((tmpVal >> 16) & 0xff);\r\n  *p++   = ((tmpVal >> 24) & 0xff);\r\n  tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_HASH_L_1);\r\n  *p++   = (tmpVal & 0xff);\r\n  *p++   = ((tmpVal >> 8) & 0xff);\r\n  *p++   = ((tmpVal >> 16) & 0xff);\r\n  *p++   = ((tmpVal >> 24) & 0xff);\r\n  tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_HASH_L_2);\r\n  *p++   = (tmpVal & 0xff);\r\n  *p++   = ((tmpVal >> 8) & 0xff);\r\n  *p++   = ((tmpVal >> 16) & 0xff);\r\n  *p++   = ((tmpVal >> 24) & 0xff);\r\n  tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_HASH_L_3);\r\n  *p++   = (tmpVal & 0xff);\r\n  *p++   = ((tmpVal >> 8) & 0xff);\r\n  *p++   = ((tmpVal >> 16) & 0xff);\r\n  *p++   = ((tmpVal >> 24) & 0xff);\r\n  tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_HASH_L_4);\r\n  *p++   = (tmpVal & 0xff);\r\n  *p++   = ((tmpVal >> 8) & 0xff);\r\n  *p++   = ((tmpVal >> 16) & 0xff);\r\n  *p++   = ((tmpVal >> 24) & 0xff);\r\n\r\n  if (shaMode == SEC_ENG_SHA224 || shaMode == SEC_ENG_SHA256) {\r\n    tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_HASH_L_5);\r\n    *p++   = (tmpVal & 0xff);\r\n    *p++   = ((tmpVal >> 8) & 0xff);\r\n    *p++   = ((tmpVal >> 16) & 0xff);\r\n    *p++   = ((tmpVal >> 24) & 0xff);\r\n    tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_HASH_L_6);\r\n    *p++   = (tmpVal & 0xff);\r\n    *p++   = ((tmpVal >> 8) & 0xff);\r\n    *p++   = ((tmpVal >> 16) & 0xff);\r\n    *p++   = ((tmpVal >> 24) & 0xff);\r\n\r\n    if (shaMode == SEC_ENG_SHA256) {\r\n      tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_HASH_L_7);\r\n      *p++   = (tmpVal & 0xff);\r\n      *p++   = ((tmpVal >> 8) & 0xff);\r\n      *p++   = ((tmpVal >> 16) & 0xff);\r\n      *p++   = ((tmpVal >> 24) & 0xff);\r\n    }\r\n  }\r\n\r\n  /* Disable SHA engine*/\r\n  tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_CTRL);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_SHA_HASH_SEL);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_SHA_EN);\r\n  BL_WR_REG(SHAx, SEC_ENG_SE_SHA_CTRL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SHA enable link mode and set link config address\r\n                                                                                *\r\n                                                                                * @param  shaNo: SHA ID type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_SHA_Enable_Link(SEC_ENG_SHA_ID_Type shaNo) {\r\n  uint32_t SHAx = SEC_ENG_BASE;\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_SHA_ID_TYPE(shaNo));\r\n\r\n  /* Enable sha and enable link mode */\r\n  tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_0_CTRL);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_SHA_0_EN);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_SHA_0_LINK_MODE);\r\n  BL_WR_REG(SHAx, SEC_ENG_SE_SHA_0_CTRL, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SHA disable link mode\r\n                                                                                *\r\n                                                                                * @param  shaNo: SHA ID type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_SHA_Disable_Link(SEC_ENG_SHA_ID_Type shaNo) {\r\n  uint32_t SHAx = SEC_ENG_BASE;\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_SHA_ID_TYPE(shaNo));\r\n\r\n  /* Disable sha and disable link mode */\r\n  tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_0_CTRL);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_SHA_0_LINK_MODE);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_SHA_0_EN);\r\n  BL_WR_REG(SHAx, SEC_ENG_SE_SHA_0_CTRL, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SHA256 link mode initialization function\r\n                                                                                *\r\n                                                                                * @param  shaCtx: SHA256 link mode context pointer\r\n                                                                                * @param  shaNo: SHA ID type\r\n                                                                                * @param  linkAddr: SHA link configure address\r\n                                                                                * @param  shaTmpBuf[16]: SHA temp buffer for store data that is less than 64 bytes\r\n                                                                                * @param  padding[16]: SHA padding buffer for store padding data\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_SHA256_Link_Init(SEC_Eng_SHA256_Link_Ctx *shaCtx, SEC_ENG_SHA_ID_Type shaNo, uint32_t linkAddr, uint32_t shaTmpBuf[16], uint32_t padding[16]) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_SHA_ID_TYPE(shaNo));\r\n\r\n  /* Clear context */\r\n  memset(shaCtx, 0, sizeof(SEC_Eng_SHA256_Link_Ctx));\r\n\r\n  /* Init temp buffer,padding buffer and link address */\r\n  shaCtx->shaBuf     = shaTmpBuf;\r\n  shaCtx->shaPadding = padding;\r\n  BL702_MemSet(shaCtx->shaPadding, 0, 64);\r\n  BL702_MemSet(shaCtx->shaPadding, 0x80, 1);\r\n  shaCtx->linkAddr = linkAddr;\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(SEC_SHA_IRQn, SEC_SHA_IRQHandler);\r\n#endif\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SHA256 link mode update input data function\r\n                                                                                *\r\n                                                                                * @param  shaCtx: SHA256 link mode context pointer\r\n                                                                                * @param  shaNo: SHA ID type\r\n                                                                                * @param  input: SHA input data pointer, and the address should be word align\r\n                                                                                * @param  len: SHA input data length\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type Sec_Eng_SHA256_Link_Update(SEC_Eng_SHA256_Link_Ctx *shaCtx, SEC_ENG_SHA_ID_Type shaNo, const uint8_t *input, uint32_t len) {\r\n  uint32_t SHAx = SEC_ENG_BASE;\r\n  uint32_t tmpVal;\r\n  uint32_t fill;\r\n  uint32_t left;\r\n  uint32_t timeoutCnt = SEC_ENG_SHA_BUSY_TIMEOUT_COUNT;\r\n\r\n  if (len == 0) {\r\n    return SUCCESS;\r\n  }\r\n\r\n  do {\r\n    tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_0_CTRL);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_SHA_0_BUSY));\r\n\r\n  /* Set link address */\r\n  BL_WR_REG(SHAx, SEC_ENG_SE_SHA_0_LINK, shaCtx->linkAddr);\r\n\r\n  left = shaCtx->total[0] & 0x3F;\r\n  fill = 64 - left;\r\n\r\n  shaCtx->total[0] += (uint32_t)len;\r\n  shaCtx->total[0] &= 0xFFFFFFFF;\r\n\r\n  if (shaCtx->total[0] < (uint32_t)len) {\r\n    shaCtx->total[1]++;\r\n  }\r\n\r\n  if (left && len >= fill) {\r\n    BL702_MemCpy_Fast((void *)((uint8_t *)shaCtx->shaBuf + left), input, fill);\r\n    /* Set data source address */\r\n    *(uint32_t *)(shaCtx->linkAddr + 4) = (uint32_t)shaCtx->shaBuf;\r\n\r\n    /* Set data length */\r\n    *((uint16_t *)shaCtx->linkAddr + 1) = 1;\r\n    /* Trigger */\r\n    tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_0_CTRL);\r\n    BL_WR_REG(SHAx, SEC_ENG_SE_SHA_0_CTRL, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_SHA_0_TRIG_1T));\r\n\r\n    /* Choose accumulating last hash in the next time */\r\n    *((uint32_t *)shaCtx->linkAddr) |= 0x40;\r\n    input += fill;\r\n    len -= fill;\r\n    left = 0;\r\n  }\r\n\r\n  fill = len / 64;\r\n  len  = len % 64;\r\n\r\n  if (fill > 0) {\r\n    /* Wait finished */\r\n    timeoutCnt = SEC_ENG_SHA_BUSY_TIMEOUT_COUNT;\r\n\r\n    do {\r\n      tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_0_CTRL);\r\n      timeoutCnt--;\r\n\r\n      if (timeoutCnt == 0) {\r\n        return TIMEOUT;\r\n      }\r\n    } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_SHA_0_BUSY));\r\n\r\n    /* Fill data */\r\n    *(uint32_t *)(shaCtx->linkAddr + 4) = (uint32_t)input;\r\n    *((uint16_t *)shaCtx->linkAddr + 1) = fill;\r\n\r\n    /* Trigger */\r\n    tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_0_CTRL);\r\n    BL_WR_REG(SHAx, SEC_ENG_SE_SHA_0_CTRL, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_SHA_0_TRIG_1T));\r\n\r\n    input += (fill * 64);\r\n    /* Choose accumulating last hash in the next time */\r\n    *((uint32_t *)shaCtx->linkAddr) |= 0x40;\r\n  }\r\n\r\n  if (len > 0) {\r\n    /* Wait finished */\r\n    timeoutCnt = SEC_ENG_SHA_BUSY_TIMEOUT_COUNT;\r\n\r\n    do {\r\n      tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_0_CTRL);\r\n      timeoutCnt--;\r\n\r\n      if (timeoutCnt == 0) {\r\n        return TIMEOUT;\r\n      }\r\n    } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_SHA_0_BUSY));\r\n\r\n    /* Copy left data into temp buffer */\r\n    BL702_MemCpy_Fast((void *)((uint8_t *)shaCtx->shaBuf + left), input, len);\r\n  }\r\n\r\n  /* Wait finished */\r\n  timeoutCnt = SEC_ENG_SHA_BUSY_TIMEOUT_COUNT;\r\n\r\n  do {\r\n    tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_0_CTRL);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_SHA_0_BUSY));\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SHA256 link mode finish to get output function\r\n                                                                                *\r\n                                                                                * @param  shaCtx: SHA256 link mode context pointer\r\n                                                                                * @param  shaNo: SHA ID type\r\n                                                                                * @param  hash: SHA output data of SHA result\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type Sec_Eng_SHA256_Link_Finish(SEC_Eng_SHA256_Link_Ctx *shaCtx, SEC_ENG_SHA_ID_Type shaNo, uint8_t *hash) {\r\n  uint32_t last, padn;\r\n  uint32_t high, low;\r\n  uint8_t  msgLen[8];\r\n  uint32_t SHAx = SEC_ENG_BASE;\r\n  uint32_t tmpVal;\r\n  uint32_t shaMode    = (*(uint32_t *)shaCtx->linkAddr) >> 2 & 0x7;\r\n  uint32_t timeoutCnt = SEC_ENG_SHA_BUSY_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_SHA_ID_TYPE(shaNo));\r\n\r\n  /* Wait finished */\r\n  do {\r\n    tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_0_CTRL);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_SHA_0_BUSY));\r\n\r\n  /* Set link address */\r\n  BL_WR_REG(SHAx, SEC_ENG_SE_SHA_0_LINK, shaCtx->linkAddr);\r\n\r\n  high = (shaCtx->total[0] >> 29) | (shaCtx->total[1] << 3);\r\n  low  = (shaCtx->total[0] << 3);\r\n\r\n  PUT_UINT32_BE(high, msgLen, 0);\r\n  PUT_UINT32_BE(low, msgLen, 4);\r\n\r\n  last = shaCtx->total[0] & 0x3F;\r\n  padn = (last < 56) ? (56 - last) : (120 - last);\r\n\r\n  Sec_Eng_SHA256_Link_Update(shaCtx, shaNo, (uint8_t *)shaCtx->shaPadding, padn);\r\n\r\n  /* Wait for shaPadding idle */\r\n  timeoutCnt = SEC_ENG_SHA_BUSY_TIMEOUT_COUNT;\r\n\r\n  do {\r\n    tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_0_CTRL);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_SHA_0_BUSY));\r\n\r\n  Sec_Eng_SHA256_Link_Update(shaCtx, shaNo, msgLen, 8);\r\n\r\n  /* Wait finished */\r\n  timeoutCnt = SEC_ENG_SHA_BUSY_TIMEOUT_COUNT;\r\n\r\n  do {\r\n    tmpVal = BL_RD_REG(SHAx, SEC_ENG_SE_SHA_0_CTRL);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_SHA_0_BUSY));\r\n\r\n  /* Get result according to SHA mode,result is placed in (link address + offset:8) */\r\n  switch (shaMode) {\r\n  case 0:\r\n    BL702_MemCpy_Fast(hash, (uint8_t *)(shaCtx->linkAddr + 8), 32);\r\n    break;\r\n\r\n  case 1:\r\n    BL702_MemCpy_Fast(hash, (uint8_t *)(shaCtx->linkAddr + 8), 28);\r\n    break;\r\n\r\n  case 2:\r\n    BL702_MemCpy_Fast(hash, (uint8_t *)(shaCtx->linkAddr + 8), 20);\r\n    break;\r\n\r\n  case 3:\r\n    BL702_MemCpy_Fast(hash, (uint8_t *)(shaCtx->linkAddr + 8), 20);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Choose new hash in the next time */\r\n  *((uint32_t *)shaCtx->linkAddr) &= ~0x40;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  AES initialization function\r\n                                                                                *\r\n                                                                                * @param  aesCtx: AES context pointer\r\n                                                                                * @param  aesNo: AES ID type\r\n                                                                                * @param  aesType: AES type:ECB,CTR,CBC\r\n                                                                                * @param  keyType: AES key type:128,256,192\r\n                                                                                * @param  enDecType: AES encryption or decryption\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type Sec_Eng_AES_Init(SEC_Eng_AES_Ctx *aesCtx, SEC_ENG_AES_ID_Type aesNo, SEC_ENG_AES_Type aesType, SEC_ENG_AES_Key_Type keyType, SEC_ENG_AES_EnDec_Type enDecType) {\r\n  uint32_t AESx = SEC_ENG_BASE + SEC_ENG_AES_OFFSET;\r\n  uint32_t tmpVal;\r\n  uint32_t timeoutCnt = SEC_ENG_AES_BUSY_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_AES_ID_TYPE(aesNo));\r\n  CHECK_PARAM(IS_SEC_ENG_AES_TYPE(aesType));\r\n  CHECK_PARAM(IS_SEC_ENG_AES_KEY_TYPE(keyType));\r\n  CHECK_PARAM(IS_SEC_ENG_AES_ENDEC_TYPE(enDecType));\r\n\r\n  /* Wait finished */\r\n  do {\r\n    tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_CTRL);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_AES_BUSY));\r\n\r\n  /* Set AES mode type*/\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_BLOCK_MODE, aesType);\r\n\r\n  /* Set AES key type */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_MODE, keyType);\r\n\r\n  /* Set AES encryption or decryption */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_DEC_EN, enDecType);\r\n\r\n  /* Clear dec_key_sel to select new key */\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_AES_DEC_KEY_SEL);\r\n\r\n  /* Clear aes iv sel to select new iv */\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_AES_IV_SEL);\r\n\r\n  /* Clear AES interrupt */\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_AES_INT_CLR_1T);\r\n\r\n  /* Enable AES */\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_AES_EN);\r\n\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_CTRL, tmpVal);\r\n\r\n  /* Clear AES context */\r\n  memset(aesCtx, 0, sizeof(SEC_Eng_AES_Ctx));\r\n\r\n  /* Enable ID0 Access for HW Key */\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_AES_0_CTRL_PROT, 0x03);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(SEC_AES_IRQn, SEC_AES_IRQHandler);\r\n#endif\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  AES enable function,set AES bigendian\r\n                                                                                *\r\n                                                                                * @param  aesNo: AES ID type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_AES_Enable_BE(SEC_ENG_AES_ID_Type aesNo) {\r\n  uint32_t AESx = SEC_ENG_BASE + SEC_ENG_AES_OFFSET;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_AES_ID_TYPE(aesNo));\r\n\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_ENDIAN, 0x0f);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(SEC_AES_IRQn, SEC_AES_IRQHandler);\r\n#endif\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  AES enable function,set AES littleendian\r\n                                                                                *\r\n                                                                                * @param  aesNo: AES ID type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_AES_Enable_LE(SEC_ENG_AES_ID_Type aesNo) {\r\n  uint32_t AESx = SEC_ENG_BASE + SEC_ENG_AES_OFFSET;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_AES_ID_TYPE(aesNo));\r\n\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_ENDIAN, 0x00);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(SEC_AES_IRQn, SEC_AES_IRQHandler);\r\n#endif\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  AES enable link mode\r\n                                                                                *\r\n                                                                                * @param  aesNo: AES ID type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_AES_Enable_Link(SEC_ENG_AES_ID_Type aesNo) {\r\n  uint32_t AESx = SEC_ENG_BASE;\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_AES_ID_TYPE(aesNo));\r\n\r\n  /* Enable aes link mode */\r\n  tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_0_CTRL);\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_0_CTRL, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_AES_0_LINK_MODE));\r\n\r\n  /* Enable ID0 Access for HW Key */\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_AES_0_CTRL_PROT, 0x03);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  AES disable link mode\r\n                                                                                *\r\n                                                                                * @param  aesNo: AES ID type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_AES_Disable_Link(SEC_ENG_AES_ID_Type aesNo) {\r\n  uint32_t AESx = SEC_ENG_BASE;\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_AES_ID_TYPE(aesNo));\r\n\r\n  /* Disable aes link mode */\r\n  tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_0_CTRL);\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_0_CTRL, BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_AES_0_LINK_MODE));\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  AES work in link mode\r\n                                                                                *\r\n                                                                                * @param  aesNo: AES ID type\r\n                                                                                * @param  linkAddr: Address of config structure in link mode\r\n                                                                                * @param  in: AES input data buffer to deal with\r\n                                                                                * @param  len: AES input data length\r\n                                                                                * @param  out: AES output data buffer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type Sec_Eng_AES_Link_Work(SEC_ENG_AES_ID_Type aesNo, uint32_t linkAddr, const uint8_t *in, uint32_t len, uint8_t *out) {\r\n  uint32_t AESx = SEC_ENG_BASE;\r\n  uint32_t tmpVal;\r\n  uint32_t timeoutCnt = SEC_ENG_AES_BUSY_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_AES_ID_TYPE(aesNo));\r\n\r\n  /* Link address should word align */\r\n  if ((linkAddr & 0x03) != 0 || len % 16 != 0) {\r\n    return ERROR;\r\n  }\r\n\r\n  /* Wait finished */\r\n  do {\r\n    tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_0_CTRL);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_AES_0_BUSY));\r\n\r\n  /* Set link address */\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_0_LINK, linkAddr);\r\n\r\n  /* Change source buffer address and destination buffer address */\r\n  *(uint32_t *)(linkAddr + 4) = (uint32_t)in;\r\n  *(uint32_t *)(linkAddr + 8) = (uint32_t)out;\r\n\r\n  /* Set data length */\r\n  *((uint16_t *)linkAddr + 1) = len / 16;\r\n\r\n  /* Enable aes */\r\n  tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_0_CTRL);\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_0_CTRL, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_AES_0_EN));\r\n\r\n  /* Start aes engine and wait finishing */\r\n  tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_0_CTRL);\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_0_CTRL, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_AES_0_TRIG_1T));\r\n  __NOP();\r\n  __NOP();\r\n  timeoutCnt = SEC_ENG_AES_BUSY_TIMEOUT_COUNT;\r\n\r\n  do {\r\n    tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_0_CTRL);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_AES_0_BUSY));\r\n\r\n  /* Disable aes */\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_0_CTRL, BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_AES_0_EN));\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  AES set hardware key source:efuse region for CPU0  or region efuse for CPU1\r\n                                                                                *\r\n                                                                                * @param  aesNo: AES ID type\r\n                                                                                * @param  src: AES key source type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_AES_Set_Hw_Key_Src(SEC_ENG_AES_ID_Type aesNo, uint8_t src) {\r\n  uint32_t AESx = SEC_ENG_BASE + SEC_ENG_AES_OFFSET;\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_AES_ID_TYPE(aesNo));\r\n\r\n  tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_SBOOT);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_SBOOT_KEY_SEL, src);\r\n\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_SBOOT, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  AES set KEY and IV\r\n                                                                                *\r\n                                                                                * @param  aesNo: AES ID type\r\n                                                                                * @param  keySrc: AES KEY type:SEC_ENG_AES_KEY_HW or SEC_ENG_AES_KEY_SW\r\n                                                                                * @param  key: AES KEY pointer\r\n                                                                                * @param  iv: AES IV pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_AES_Set_Key_IV(SEC_ENG_AES_ID_Type aesNo, SEC_ENG_AES_Key_Src_Type keySrc, const uint8_t *key, const uint8_t *iv) {\r\n  uint32_t AESx = SEC_ENG_BASE + SEC_ENG_AES_OFFSET;\r\n  uint32_t tmpVal;\r\n  uint32_t keyType;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_AES_ID_TYPE(aesNo));\r\n  CHECK_PARAM(IS_SEC_ENG_AES_KEY_SRC_TYPE(keySrc));\r\n\r\n  /* Set IV */\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_IV_3, __REV(BL_RDWD_FRM_BYTEP(iv)));\r\n  iv += 4;\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_IV_2, __REV(BL_RDWD_FRM_BYTEP(iv)));\r\n  iv += 4;\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_IV_1, __REV(BL_RDWD_FRM_BYTEP(iv)));\r\n  iv += 4;\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_IV_0, __REV(BL_RDWD_FRM_BYTEP(iv)));\r\n  iv += 4;\r\n\r\n  /* Select hardware key */\r\n  if (keySrc == SEC_ENG_AES_KEY_HW) {\r\n    tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_CTRL);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_HW_KEY_EN, SEC_ENG_AES_KEY_HW);\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_CTRL, tmpVal);\r\n\r\n    tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_KEY_SEL_0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_KEY_SEL_0, *key);\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_SEL_0, tmpVal);\r\n\r\n    tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_KEY_SEL_1);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_KEY_SEL_1, *key);\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_SEL_1, tmpVal);\r\n\r\n    return;\r\n  }\r\n\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_7, __REV(BL_RDWD_FRM_BYTEP(key)));\r\n  key += 4;\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_6, __REV(BL_RDWD_FRM_BYTEP(key)));\r\n  key += 4;\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_5, __REV(BL_RDWD_FRM_BYTEP(key)));\r\n  key += 4;\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_4, __REV(BL_RDWD_FRM_BYTEP(key)));\r\n  key += 4;\r\n\r\n  tmpVal  = BL_RD_REG(AESx, SEC_ENG_SE_AES_CTRL);\r\n  keyType = BL_GET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_MODE);\r\n\r\n  if (keyType == (uint32_t)SEC_ENG_AES_KEY_192BITS) {\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_3, __REV(BL_RDWD_FRM_BYTEP(key)));\r\n    key += 4;\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_2, __REV(BL_RDWD_FRM_BYTEP(key)));\r\n    key += 4;\r\n  } else if (keyType == (uint32_t)SEC_ENG_AES_KEY_256BITS || keyType == (uint32_t)SEC_ENG_AES_DOUBLE_KEY_128BITS) {\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_3, __REV(BL_RDWD_FRM_BYTEP(key)));\r\n    key += 4;\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_2, __REV(BL_RDWD_FRM_BYTEP(key)));\r\n    key += 4;\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_1, __REV(BL_RDWD_FRM_BYTEP(key)));\r\n    key += 4;\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_0, __REV(BL_RDWD_FRM_BYTEP(key)));\r\n    key += 4;\r\n  }\r\n\r\n  /* Select software key */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_HW_KEY_EN, SEC_ENG_AES_KEY_SW);\r\n\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_CTRL, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  AES set KEY and IV with bigendian\r\n                                                                                *\r\n                                                                                * @param  aesNo: AES ID type\r\n                                                                                * @param  keySrc: AES KEY type:SEC_ENG_AES_KEY_HW or SEC_ENG_AES_KEY_SW\r\n                                                                                * @param  key: AES KEY pointer\r\n                                                                                * @param  iv: AES IV pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_AES_Set_Key_IV_BE(SEC_ENG_AES_ID_Type aesNo, SEC_ENG_AES_Key_Src_Type keySrc, const uint8_t *key, const uint8_t *iv) {\r\n  uint32_t AESx = SEC_ENG_BASE + SEC_ENG_AES_OFFSET;\r\n  uint32_t tmpVal;\r\n  uint32_t keyType;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_AES_ID_TYPE(aesNo));\r\n  CHECK_PARAM(IS_SEC_ENG_AES_KEY_SRC_TYPE(keySrc));\r\n\r\n  /* Set IV */\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_IV_0, BL_RDWD_FRM_BYTEP(iv));\r\n  iv += 4;\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_IV_1, BL_RDWD_FRM_BYTEP(iv));\r\n  iv += 4;\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_IV_2, BL_RDWD_FRM_BYTEP(iv));\r\n  iv += 4;\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_IV_3, BL_RDWD_FRM_BYTEP(iv));\r\n  iv += 4;\r\n\r\n  /* Select hardware key */\r\n  if (keySrc == SEC_ENG_AES_KEY_HW) {\r\n    tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_CTRL);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_HW_KEY_EN, SEC_ENG_AES_KEY_HW);\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_CTRL, tmpVal);\r\n\r\n    tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_KEY_SEL_0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_KEY_SEL_0, *key);\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_SEL_0, tmpVal);\r\n\r\n    tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_KEY_SEL_1);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_KEY_SEL_1, *key);\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_SEL_1, tmpVal);\r\n\r\n    return;\r\n  }\r\n\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_0, BL_RDWD_FRM_BYTEP(key));\r\n  key += 4;\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_1, BL_RDWD_FRM_BYTEP(key));\r\n  key += 4;\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_2, BL_RDWD_FRM_BYTEP(key));\r\n  key += 4;\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_3, BL_RDWD_FRM_BYTEP(key));\r\n  key += 4;\r\n\r\n  tmpVal  = BL_RD_REG(AESx, SEC_ENG_SE_AES_CTRL);\r\n  keyType = BL_GET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_MODE);\r\n\r\n  if (keyType == (uint32_t)SEC_ENG_AES_KEY_192BITS) {\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_4, BL_RDWD_FRM_BYTEP(key));\r\n    key += 4;\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_5, BL_RDWD_FRM_BYTEP(key));\r\n    key += 4;\r\n  } else if (keyType == (uint32_t)SEC_ENG_AES_KEY_256BITS || keyType == (uint32_t)SEC_ENG_AES_DOUBLE_KEY_128BITS) {\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_4, BL_RDWD_FRM_BYTEP(key));\r\n    key += 4;\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_5, BL_RDWD_FRM_BYTEP(key));\r\n    key += 4;\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_6, BL_RDWD_FRM_BYTEP(key));\r\n    key += 4;\r\n    BL_WR_REG(AESx, SEC_ENG_SE_AES_KEY_7, BL_RDWD_FRM_BYTEP(key));\r\n    key += 4;\r\n  }\r\n\r\n  /* Select software key */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_HW_KEY_EN, SEC_ENG_AES_KEY_SW);\r\n\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_CTRL, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  AES set counter byte type in CTR mode\r\n                                                                                *\r\n                                                                                * @param  aesNo: AES ID type\r\n                                                                                * @param  counterType: AES counter type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_AES_Set_Counter_Byte(SEC_ENG_AES_ID_Type aesNo, SEC_ENG_AES_Counter_Type counterType) {\r\n  uint32_t AESx = SEC_ENG_BASE;\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_AES_ID_TYPE(aesNo));\r\n  CHECK_PARAM(IS_SEC_ENG_AES_COUNTER_TYPE(counterType));\r\n\r\n  /* Set counter type */\r\n  tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_0_ENDIAN);\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_0_ENDIAN, BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_0_CTR_LEN, counterType));\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  AES encrypt or decrypt input data\r\n                                                                                *\r\n                                                                                * @param  aesCtx: AES context pointer\r\n                                                                                * @param  aesNo: AES ID type\r\n                                                                                * @param  in: AES input data buffer to deal with\r\n                                                                                * @param  len: AES input data length\r\n                                                                                * @param  out: AES output data buffer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type Sec_Eng_AES_Crypt(SEC_Eng_AES_Ctx *aesCtx, SEC_ENG_AES_ID_Type aesNo, const uint8_t *in, uint32_t len, uint8_t *out) {\r\n  uint32_t AESx = SEC_ENG_BASE + SEC_ENG_AES_OFFSET;\r\n  uint32_t tmpVal;\r\n  uint32_t timeoutCnt = SEC_ENG_AES_BUSY_TIMEOUT_COUNT;\r\n\r\n  if (len % 16 != 0) {\r\n    return ERROR;\r\n  }\r\n\r\n  /* Wait finished */\r\n  do {\r\n    tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_CTRL);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_AES_BUSY));\r\n\r\n  /* Clear trigger */\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_AES_TRIG_1T);\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_CTRL, tmpVal);\r\n\r\n  /* Set input and output address */\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_MSA, (uint32_t)in);\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_MDA, (uint32_t)out);\r\n\r\n  /* Set message length */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_MSG_LEN, len / 16);\r\n\r\n  if (aesCtx->mode == SEC_ENG_AES_CTR) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_AES_DEC_KEY_SEL);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_AES_DEC_KEY_SEL);\r\n  }\r\n\r\n  /* Set IV sel:0 for new, 1 for last */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_AES_IV_SEL, aesCtx->aesFeed);\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_CTRL, tmpVal);\r\n\r\n  /* Trigger AES Engine */\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_AES_TRIG_1T);\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_CTRL, tmpVal);\r\n\r\n  /* Wait finished */\r\n  timeoutCnt = SEC_ENG_AES_BUSY_TIMEOUT_COUNT;\r\n\r\n  do {\r\n    tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_CTRL);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_AES_BUSY));\r\n\r\n  aesCtx->aesFeed = 1;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  AES finish function, clean register\r\n                                                                                *\r\n                                                                                * @param  aesNo: AES ID type\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type Sec_Eng_AES_Finish(SEC_ENG_AES_ID_Type aesNo) {\r\n  uint32_t AESx = SEC_ENG_BASE + SEC_ENG_AES_OFFSET;\r\n  uint32_t tmpVal;\r\n  uint32_t timeoutCnt = SEC_ENG_AES_BUSY_TIMEOUT_COUNT;\r\n\r\n  /* Wait finished */\r\n  do {\r\n    tmpVal = BL_RD_REG(AESx, SEC_ENG_SE_AES_CTRL);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_AES_BUSY));\r\n\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_AES_EN);\r\n\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_AES_DEC_KEY_SEL);\r\n\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_AES_IV_SEL);\r\n\r\n  BL_WR_REG(AESx, SEC_ENG_SE_AES_CTRL, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TRNG enable TRNG interrupt\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type Sec_Eng_Trng_Enable(void) {\r\n  uint32_t TRNGx = SEC_ENG_BASE + SEC_ENG_TRNG_OFFSET;\r\n  uint32_t tmpVal;\r\n  uint32_t timeoutCnt = SEC_ENG_TRNG_BUSY_TIMEOUT_COUNT;\r\n\r\n  tmpVal = BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0);\r\n\r\n  /* FIXME:default reseed number is 0x1ff, to verify, use 0xa to speed up */\r\n  // tmpVal=BL_SET_REG_BITS_VAL(tmpVal,SEC_ENG_SE_TRNG_RESEED_N,0x1ff);\r\n\r\n  /* No interrupt as default */\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_EN);\r\n  BL_WR_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0, tmpVal);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_INT_CLR_1T);\r\n  BL_WR_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0, tmpVal);\r\n  /* busy will be set to 1 after trigger, the gap is 1T */\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n\r\n  do {\r\n    tmpVal = BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_TRNG_BUSY));\r\n\r\n  /* Clear trng interrupt */\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_INT_CLR_1T);\r\n  BL_WR_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0, tmpVal);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(SEC_TRNG_IRQn, SEC_TRNG_IRQHandler);\r\n#endif\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TRNG enable TRNG interrupt\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_Trng_Int_Enable(void) {\r\n  uint32_t TRNGx = SEC_ENG_BASE + SEC_ENG_TRNG_OFFSET;\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0);\r\n\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_INT_MASK);\r\n\r\n  BL_WR_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TRNG disable TRNG interrupt\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_Trng_Int_Disable(void) {\r\n  uint32_t TRNGx = SEC_ENG_BASE + SEC_ENG_TRNG_OFFSET;\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0);\r\n\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_INT_MASK);\r\n\r\n  BL_WR_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TRNG get random data out\r\n                                                                                *\r\n                                                                                * @param  data[32]: TRNG output data\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type Sec_Eng_Trng_Read(uint8_t data[32]) {\r\n  uint8_t *p     = (uint8_t *)data;\r\n  uint32_t TRNGx = SEC_ENG_BASE + SEC_ENG_TRNG_OFFSET;\r\n  uint32_t tmpVal;\r\n  uint32_t timeoutCnt = SEC_ENG_TRNG_BUSY_TIMEOUT_COUNT;\r\n\r\n  tmpVal = BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0);\r\n\r\n  /* Trigger */\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_TRIG_1T);\r\n  BL_WR_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0, tmpVal);\r\n\r\n  /* busy will be set to 1 after trigger, the gap is 1T */\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n  __NOP();\r\n\r\n  do {\r\n    tmpVal = BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_TRNG_BUSY));\r\n\r\n  /* copy trng value */\r\n  BL_WRWD_TO_BYTEP(p, BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_DOUT_0));\r\n  p += 4;\r\n  BL_WRWD_TO_BYTEP(p, BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_DOUT_1));\r\n  p += 4;\r\n  BL_WRWD_TO_BYTEP(p, BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_DOUT_2));\r\n  p += 4;\r\n  BL_WRWD_TO_BYTEP(p, BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_DOUT_3));\r\n  p += 4;\r\n  BL_WRWD_TO_BYTEP(p, BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_DOUT_4));\r\n  p += 4;\r\n  BL_WRWD_TO_BYTEP(p, BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_DOUT_5));\r\n  p += 4;\r\n  BL_WRWD_TO_BYTEP(p, BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_DOUT_6));\r\n  p += 4;\r\n  BL_WRWD_TO_BYTEP(p, BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_DOUT_7));\r\n  p += 4;\r\n\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_TRIG_1T);\r\n  BL_WR_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0, tmpVal);\r\n\r\n  /* Clear data */\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_DOUT_CLR_1T);\r\n  BL_WR_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0, tmpVal);\r\n\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_DOUT_CLR_1T);\r\n  BL_WR_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TRNG get random data out\r\n                                                                                *\r\n                                                                                * @param  data: TRNG output data buffer\r\n                                                                                *\r\n                                                                                * @param  len: total length to get in bytes\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type Sec_Eng_Trng_Get_Random(uint8_t *data, uint32_t len) {\r\n  uint8_t  tmpBuf[32];\r\n  uint32_t readLen = 0;\r\n  uint32_t i = 0, cnt = 0;\r\n\r\n  while (readLen < len) {\r\n    if (Sec_Eng_Trng_Read(tmpBuf) != SUCCESS) {\r\n      return -1;\r\n    }\r\n\r\n    cnt = len - readLen;\r\n\r\n    if (cnt > sizeof(tmpBuf)) {\r\n      cnt = sizeof(tmpBuf);\r\n    }\r\n\r\n    for (i = 0; i < cnt; i++) {\r\n      data[readLen + i] = tmpBuf[i];\r\n    }\r\n\r\n    readLen += cnt;\r\n  }\r\n\r\n  return 0;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TRNG Interrupt Read Trigger\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_Trng_Int_Read_Trigger(void) {\r\n  uint32_t TRNGx = SEC_ENG_BASE + SEC_ENG_TRNG_OFFSET;\r\n  uint32_t tmpVal;\r\n\r\n  Sec_Eng_Trng_Int_Enable();\r\n\r\n  tmpVal = BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0);\r\n  /* Trigger */\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_TRIG_1T);\r\n  BL_WR_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TRNG get random data out with Interrupt\r\n                                                                                *\r\n                                                                                * @param  data[32]: TRNG output data\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_Trng_Int_Read(uint8_t data[32]) {\r\n  uint8_t *p     = (uint8_t *)data;\r\n  uint32_t TRNGx = SEC_ENG_BASE + SEC_ENG_TRNG_OFFSET;\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0);\r\n\r\n  /* copy trng value */\r\n  BL_WRWD_TO_BYTEP(p, BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_DOUT_0));\r\n  p += 4;\r\n  BL_WRWD_TO_BYTEP(p, BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_DOUT_1));\r\n  p += 4;\r\n  BL_WRWD_TO_BYTEP(p, BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_DOUT_2));\r\n  p += 4;\r\n  BL_WRWD_TO_BYTEP(p, BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_DOUT_3));\r\n  p += 4;\r\n  BL_WRWD_TO_BYTEP(p, BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_DOUT_4));\r\n  p += 4;\r\n  BL_WRWD_TO_BYTEP(p, BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_DOUT_5));\r\n  p += 4;\r\n  BL_WRWD_TO_BYTEP(p, BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_DOUT_6));\r\n  p += 4;\r\n  BL_WRWD_TO_BYTEP(p, BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_DOUT_7));\r\n  p += 4;\r\n\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_TRIG_1T);\r\n  BL_WR_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0, tmpVal);\r\n\r\n  /* Clear data */\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_DOUT_CLR_1T);\r\n  BL_WR_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0, tmpVal);\r\n\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_DOUT_CLR_1T);\r\n  BL_WR_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable TRNG\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_Trng_Disable(void) {\r\n  uint32_t TRNGx = SEC_ENG_BASE + SEC_ENG_TRNG_OFFSET;\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0);\r\n\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_EN);\r\n  // tmpVal=BL_CLR_REG_BIT(tmpVal,SEC_ENG_SE_TRNG_RESEED_N);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_INT_CLR_1T);\r\n\r\n  BL_WR_REG(TRNGx, SEC_ENG_SE_TRNG_CTRL_0, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA Reset\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_Reset(void) {\r\n  uint8_t val;\r\n\r\n  // Disable sec engine\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0, 0);\r\n\r\n  // Enable sec engine\r\n  val = 1 << 3;\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0, val);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA Enable big endian\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_BigEndian_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_PKA_0_ENDIAN);\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0, tmpVal);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(SEC_PKA_IRQn, SEC_PKA_IRQHandler);\r\n#endif\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA Enable little endian\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_LittleEndian_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_PKA_0_ENDIAN);\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0, tmpVal);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(SEC_PKA_IRQn, SEC_PKA_IRQHandler);\r\n#endif\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA get status function\r\n                                                                                *\r\n                                                                                * @param  status: Structure pointer of PKA status type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_GetStatus(SEC_Eng_PKA_Status_Type *status) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal              = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0);\r\n  *(uint16_t *)status = (uint16_t)BL_GET_REG_BITS_VAL(tmpVal, SEC_ENG_SE_PKA_0_STATUS);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA clear interrupt\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_Clear_Int(void) {\r\n  uint32_t ctrl;\r\n\r\n  ctrl = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0);\r\n  ctrl = BL_SET_REG_BIT(ctrl, SEC_ENG_SE_PKA_0_INT_CLR_1T);\r\n\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0, ctrl);\r\n\r\n  ctrl = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0);\r\n  ctrl = BL_CLR_REG_BIT(ctrl, SEC_ENG_SE_PKA_0_INT_CLR_1T);\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0, ctrl);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA get Register size according to Register type\r\n                                                                                *\r\n                                                                                * @param  reg_type: PKA Register type\r\n                                                                                *\r\n                                                                                * @return Register size\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic uint16_t Sec_Eng_PKA_Get_Reg_Size(SEC_ENG_PKA_REG_SIZE_Type reg_type) {\r\n  switch (reg_type) {\r\n  case SEC_ENG_PKA_REG_SIZE_8:\r\n    return 8;\r\n\r\n  case SEC_ENG_PKA_REG_SIZE_16:\r\n    return 16;\r\n\r\n  case SEC_ENG_PKA_REG_SIZE_32:\r\n    return 32;\r\n\r\n  case SEC_ENG_PKA_REG_SIZE_64:\r\n    return 64;\r\n\r\n  case SEC_ENG_PKA_REG_SIZE_96:\r\n    return 96;\r\n\r\n  case SEC_ENG_PKA_REG_SIZE_128:\r\n    return 128;\r\n\r\n  case SEC_ENG_PKA_REG_SIZE_192:\r\n    return 192;\r\n\r\n  case SEC_ENG_PKA_REG_SIZE_256:\r\n    return 256;\r\n\r\n  case SEC_ENG_PKA_REG_SIZE_384:\r\n    return 384;\r\n\r\n  case SEC_ENG_PKA_REG_SIZE_512:\r\n    return 512;\r\n\r\n  default:\r\n    return 0;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA set pre-load register configuration\r\n                                                                                *\r\n                                                                                * @param  size: Data size in word to write\r\n                                                                                * @param  regIndex: Register index\r\n                                                                                * @param  regType: Register type\r\n                                                                                * @param  op: PKA operation\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic void Sec_Eng_PKA_Write_Pld_Cfg(uint16_t size, uint8_t regIndex, SEC_ENG_PKA_REG_SIZE_Type regType, SEC_ENG_PKA_OP_Type op, uint8_t lastOp) {\r\n  struct pka0_pld_cfg cfg;\r\n\r\n  cfg.value.BF.size        = size;\r\n  cfg.value.BF.d_reg_index = regIndex;\r\n  cfg.value.BF.d_reg_type  = regType;\r\n  cfg.value.BF.op          = op;\r\n  cfg.value.BF.last_op     = lastOp;\r\n\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, cfg.value.WORD);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA write common operation first configuration\r\n                                                                                *\r\n                                                                                * @param  s0RegIndex: Register index\r\n                                                                                * @param  s0RegType: Register type\r\n                                                                                * @param  dRegIndex: Result Register index\r\n                                                                                * @param  dRegType: Result Register type\r\n                                                                                * @param  op: PKA operation\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic void Sec_Eng_PKA_Write_Common_OP_First_Cfg(uint8_t s0RegIndex, uint8_t s0RegType, uint8_t dRegIndex, uint8_t dRegType, uint8_t op, uint8_t lastOp) {\r\n  struct pka0_common_op_first_cfg cfg;\r\n\r\n  cfg.value.BF.s0_reg_idx  = s0RegIndex;\r\n  cfg.value.BF.s0_reg_type = s0RegType;\r\n\r\n  if (op != SEC_ENG_PKA_OP_LCMP) {\r\n    cfg.value.BF.d_reg_idx  = dRegIndex;\r\n    cfg.value.BF.d_reg_type = dRegType;\r\n  }\r\n\r\n  cfg.value.BF.op      = op;\r\n  cfg.value.BF.last_op = lastOp;\r\n\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, cfg.value.WORD);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA write common operation second configuration1\r\n                                                                                *\r\n                                                                                * @param  s1RegIndex: Register index\r\n                                                                                * @param  s1RegType: Register type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic void Sec_Eng_PKA_Write_Common_OP_Snd_Cfg_S1(uint8_t s1RegIndex, uint8_t s1RegType) {\r\n  struct pka0_common_op_snd_cfg_S1_only cfg;\r\n\r\n  cfg.value.BF.s1_reg_idx  = s1RegIndex;\r\n  cfg.value.BF.s1_reg_type = s1RegType;\r\n\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, cfg.value.WORD);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA write common operation second configuration2\r\n                                                                                *\r\n                                                                                * @param  s2RegIndex: Register index\r\n                                                                                * @param  s2RegType: Register type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic void Sec_Eng_PKA_Write_Common_OP_Snd_Cfg_S2(uint8_t s2RegIndex, uint8_t s2RegType) {\r\n  struct pka0_common_op_snd_cfg_S2_only cfg;\r\n\r\n  cfg.value.BF.s2_reg_idx  = s2RegIndex;\r\n  cfg.value.BF.s2_reg_type = s2RegType;\r\n\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, cfg.value.WORD);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA write common operation second configuration1 and configuration 2\r\n                                                                                *\r\n                                                                                * @param  s1RegIndex: Configuration 1 Register index\r\n                                                                                * @param  s1RegType: Configuration 1 Register type\r\n                                                                                * @param  s2RegIndex: Configuration 2 Register index\r\n                                                                                * @param  s2RegType: Configuration 3 Register type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic void Sec_Eng_PKA_Write_Common_OP_Snd_Cfg_S1_S2(uint8_t s1RegIndex, uint8_t s1RegType, uint8_t s2RegIndex, uint8_t s2RegType) {\r\n  struct pka0_common_op_snd_cfg_S1_S2 cfg;\r\n\r\n  cfg.value.BF.s1_reg_idx  = s1RegIndex;\r\n  cfg.value.BF.s1_reg_type = s1RegType;\r\n  cfg.value.BF.s2_reg_idx  = s2RegIndex;\r\n  cfg.value.BF.s2_reg_type = s2RegType;\r\n\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, cfg.value.WORD);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA wait for complete interrupt\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic BL_Err_Type Sec_Eng_PKA_Wait_ISR(void) {\r\n  uint32_t pka0_ctrl;\r\n  uint32_t timeoutCnt = SEC_ENG_PKA_INT_TIMEOUT_COUNT;\r\n\r\n  do {\r\n    pka0_ctrl = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (!BL_GET_REG_BITS_VAL(pka0_ctrl, SEC_ENG_SE_PKA_0_INT));\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA read block data from register\r\n                                                                                *\r\n                                                                                * @param  dest: Pointer to buffer address\r\n                                                                                * @param  src: Pointer to register address\r\n                                                                                * @param  len: Data len in word\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifdef ARCH_ARM\r\n#ifndef __GNUC__\r\n__ASM void Sec_Eng_PKA_Read_Block(uint32_t *dest, const uint32_t *src, uint32_t len) {\r\n  PUSH{R3 - R6, LR} Start0 CMP R2, #4 BLT Finish0 LDR R3, [R1] LDR R4, [R1] LDR R5, [R1] LDR R6, [R1] STMIA R0 !, {R3 - R6} SUBS R2, R2, #4 B Start0 Finish0 POP { R3 - R6, PC }\r\n}\r\n#else\r\nvoid Sec_Eng_PKA_Read_Block(uint32_t *dest, const uint32_t *src, uint32_t len) {\r\n  __asm__ __volatile__(\"push {r3-r6,lr}\\n\\t\"\r\n                       \"Start0 :\"\r\n                       \"cmp   r2,#4\\n\\t\"\r\n                       \"blt   Finish0\\n\\t\"\r\n                       \"ldr   r3,[r1]\\n\\t\"\r\n                       \"ldr   r4,[r1]\\n\\t\"\r\n                       \"ldr   r5,[r1]\\n\\t\"\r\n                       \"ldr   r6,[r1]\\n\\t\"\r\n                       \"stmia r0!,{r3-r6}\\n\\t\"\r\n                       \"sub   r2,r2,#4\\n\\t\"\r\n                       \"b     Start0\\n\\t\"\r\n                       \"Finish0 :\"\r\n                       \"pop   {r3-r6,pc}\\n\\t\");\r\n}\r\n#endif\r\n#endif\r\n#ifdef ARCH_RISCV\r\nvoid Sec_Eng_PKA_Read_Block(uint32_t *dest, const uint32_t *src, uint32_t len) {\r\n  uint32_t wrLen = len - len % 4;\r\n  uint32_t i;\r\n\r\n  for (i = 0; i < wrLen; i++) {\r\n    dest[i] = *src;\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA Write block data to register\r\n                                                                                *\r\n                                                                                * @param  dest: Pointer to register address\r\n                                                                                * @param  src: Pointer to buffer address\r\n                                                                                * @param  len: Data len in word\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifdef ARCH_ARM\r\n#ifndef __GNUC__\r\n__ASM void Sec_Eng_PKA_Write_Block(uint32_t *dest, const uint32_t *src, uint32_t len) {\r\n  PUSH{R3 - R6, LR} Start1 CMP R2, #4 BLT Finish1 LDMIA R1 !, {R3 - R6} STR R3, [R0] STR R4, [R0] STR R5, [R0] STR R6, [R0] SUBS R2, R2, #4 B Start1 Finish1 POP { R3 - R6, PC }\r\n}\r\n#else\r\nvoid Sec_Eng_PKA_Write_Block(uint32_t *dest, const uint32_t *src, uint32_t len) {\r\n  __asm__ __volatile__(\"push {r3-r6,lr}\\n\\t\"\r\n                       \"Start1 :\"\r\n                       \"cmp   r2,#4\\n\\t\"\r\n                       \"blt   Finish1\\n\\t\"\r\n                       \"ldmia r1!,{r3-r6}\\n\\t\"\r\n                       \"str   r3,[r0]\\n\\t\"\r\n                       \"str   r4,[r0]\\n\\t\"\r\n                       \"str   r5,[r0]\\n\\t\"\r\n                       \"str   r6,[r0]\\n\\t\"\r\n                       \"sub   r2,r2,#4\\n\\t\"\r\n                       \"b     Start1\\n\\t\"\r\n                       \"Finish1 :\"\r\n                       \"pop   {r3-r6,pc}\\n\\t\");\r\n}\r\n#endif\r\n#endif\r\n#ifdef ARCH_RISCV\r\nvoid Sec_Eng_PKA_Write_Block(uint32_t *dest, const uint32_t *src, uint32_t len) {\r\n  uint32_t wrLen = len - len % 4;\r\n  uint32_t i;\r\n\r\n  for (i = 0; i < wrLen; i++) {\r\n    *dest = src[i];\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA get result\r\n                                                                                *\r\n                                                                                * @param  result: Pointer to store result\r\n                                                                                * @param  retSize: Result length in word\r\n                                                                                * @param  regLen: register length in byte\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic void Sec_Eng_PKA_Get_Result(uint32_t *result, uint8_t retSize, uint16_t regLen) {\r\n  uint32_t ret_data = 0x00;\r\n  int      index    = 0x00;\r\n\r\n  /* Wait for the result */\r\n  Sec_Eng_PKA_Wait_ISR();\r\n  Sec_Eng_PKA_Clear_Int();\r\n  Sec_Eng_PKA_Read_Block(result, (uint32_t *)(SEC_ENG_BASE + SEC_ENG_SE_PKA_0_RW_OFFSET), retSize);\r\n  index = retSize - (retSize % 4);\r\n\r\n  while (index < retSize) {\r\n    ret_data      = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW);\r\n    result[index] = ret_data;\r\n    index++;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA load data to register\r\n                                                                                *\r\n                                                                                * @param  regType: Register type\r\n                                                                                * @param  regIndex: Register index\r\n                                                                                * @param  data: Data buffer\r\n                                                                                * @param  size: Data length in word\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_Write_Data(SEC_ENG_PKA_REG_SIZE_Type regType, uint8_t regIndex, const uint32_t *data, uint16_t size, uint8_t lastOp) {\r\n  int      index  = 0x00;\r\n  uint16_t regLen = Sec_Eng_PKA_Get_Reg_Size(regType);\r\n\r\n  Sec_Eng_PKA_Write_Pld_Cfg(size, regIndex, regType, SEC_ENG_PKA_OP_CTLIR_PLD, lastOp);\r\n\r\n  if (size > regLen / 4) {\r\n    size = regLen / 4;\r\n  }\r\n\r\n  Sec_Eng_PKA_Write_Block((uint32_t *)(SEC_ENG_BASE + SEC_ENG_SE_PKA_0_RW_OFFSET), data, size);\r\n  index = size - (size % 4);\r\n\r\n  while (index < size) {\r\n    BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, data[index]);\r\n    index++;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA read data from register\r\n                                                                                *\r\n                                                                                * @param  regType: Register type\r\n                                                                                * @param  regIdx: Register index\r\n                                                                                * @param  result: Data buffer\r\n                                                                                * @param  retSize: Data length in word\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_Read_Data(SEC_ENG_PKA_REG_SIZE_Type regType, uint8_t regIdx, uint32_t *result, uint8_t retSize) {\r\n  uint16_t regSize;\r\n  uint32_t dummyData = 0;\r\n\r\n  regSize = Sec_Eng_PKA_Get_Reg_Size(regType);\r\n\r\n  if (retSize > regSize / 4) {\r\n    result = NULL;\r\n    return;\r\n  }\r\n\r\n  Sec_Eng_PKA_Write_Pld_Cfg(retSize, regIdx, regType, SEC_ENG_PKA_OP_CFLIR_BUFFER, 1);\r\n\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, dummyData);\r\n\r\n  Sec_Eng_PKA_Get_Result(result, retSize, regSize);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA clear register\r\n                                                                                *\r\n                                                                                * @param  dRegType: Register type\r\n                                                                                * @param  dRegIdx: Register index\r\n                                                                                * @param  size: Data length in word\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_CREG(SEC_ENG_PKA_REG_SIZE_Type dRegType, uint8_t dRegIdx, uint8_t size, uint8_t lastOp) {\r\n  uint32_t dummyData = 0;\r\n\r\n  Sec_Eng_PKA_Write_Pld_Cfg(size, dRegIdx, dRegType, SEC_ENG_PKA_OP_CLIR, lastOp);\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, dummyData);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA load data to register\r\n                                                                                *\r\n                                                                                * @param  regType: regType: Register type\r\n                                                                                * @param  regIndex: regIndex: Register index\r\n                                                                                * @param  data: data: Data buffer\r\n                                                                                * @param  lastOp: size: Data length in word\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_Write_Immediate(SEC_ENG_PKA_REG_SIZE_Type regType, uint8_t regIndex, uint32_t data, uint8_t lastOp) {\r\n  struct pka0_pldi_cfg cfg;\r\n\r\n  cfg.value.BF.rsvd        = 0;\r\n  cfg.value.BF.d_reg_index = regIndex;\r\n  cfg.value.BF.d_reg_type  = regType;\r\n  cfg.value.BF.op          = SEC_ENG_PKA_OP_SLIR;\r\n  cfg.value.BF.last_op     = lastOp;\r\n\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, cfg.value.WORD);\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, data);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA negative source data:D = (1 << SIZE{S0})-S0\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source Register type\r\n                                                                                * @param  s0RegIdx: Source Register index\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_NREG(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t lastOp) {\r\n  uint32_t dummyData = 0;\r\n\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_NLIR, lastOp);\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, dummyData);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA move data:D = S0\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source Register type\r\n                                                                                * @param  s0RegIdx: Source Register index\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_Move_Data(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t lastOp) {\r\n  uint32_t dummyData = 0;\r\n\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_MOVDAT, lastOp);\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, dummyData);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA resize data:D = S0, D.Size = S0.Size\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source Register type\r\n                                                                                * @param  s0RegIdx: Source Register index\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_RESIZE(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t lastOp) {\r\n  uint32_t dummyData = 0;\r\n\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_RESIZE, lastOp);\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, dummyData);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA mod add:D = (S0 + S1) mod S2\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source 0 Register type\r\n                                                                                * @param  s0RegIdx: Source 0 Register index\r\n                                                                                * @param  s1RegType: Source 1 Register type\r\n                                                                                * @param  s1RegIdx: Source 1 Register index\r\n                                                                                * @param  s2RegType: Source 2 Register type\r\n                                                                                * @param  s2RegIdx: Source 2 Register index\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_MADD(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s1RegType, uint8_t s1RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp) {\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_MADD, lastOp);\r\n  Sec_Eng_PKA_Write_Common_OP_Snd_Cfg_S1_S2(s1RegIdx, s1RegType, s2RegIdx, s2RegType);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA mod sub:D = (S0 - S1) mod S2\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source 0 Register type\r\n                                                                                * @param  s0RegIdx: Source 0 Register index\r\n                                                                                * @param  s1RegType: Source 1 Register type\r\n                                                                                * @param  s1RegIdx: Source 1 Register index\r\n                                                                                * @param  s2RegType: Source 2 Register type\r\n                                                                                * @param  s2RegIdx: Source 2 Register index\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_MSUB(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s1RegType, uint8_t s1RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp) {\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_MSUB, lastOp);\r\n  Sec_Eng_PKA_Write_Common_OP_Snd_Cfg_S1_S2(s1RegIdx, s1RegType, s2RegIdx, s2RegType);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA mod :D = S0 mod S2\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source 0 Register type\r\n                                                                                * @param  s0RegIdx: Source 0 Register index\r\n                                                                                * @param  s2RegType: Source 2 Register type\r\n                                                                                * @param  s2RegIdx: Source 2 Register index\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_MREM(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp) {\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_MREM, lastOp);\r\n  Sec_Eng_PKA_Write_Common_OP_Snd_Cfg_S2(s2RegIdx, s2RegType);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA mod mul:D = (S0 * S1) mod S2\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source 0 Register type\r\n                                                                                * @param  s0RegIdx: Source 0 Register index\r\n                                                                                * @param  s1RegType: Source 1 Register type\r\n                                                                                * @param  s1RegIdx: Source 1 Register index\r\n                                                                                * @param  s2RegType: Source 2 Register type\r\n                                                                                * @param  s2RegIdx: Source 2 Register index\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_MMUL(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s1RegType, uint8_t s1RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp) {\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_MMUL, lastOp);\r\n  Sec_Eng_PKA_Write_Common_OP_Snd_Cfg_S1_S2(s1RegIdx, s1RegType, s2RegIdx, s2RegType);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA mod sqr:D = (S0 ^ 2) mod S2\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source 0 Register type\r\n                                                                                * @param  s0RegIdx: Source 0 Register index\r\n                                                                                * @param  s2RegType: Source 2 Register type\r\n                                                                                * @param  s2RegIdx: Source 2 Register index\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_MSQR(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp) {\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_MSQR, lastOp);\r\n  Sec_Eng_PKA_Write_Common_OP_Snd_Cfg_S2(s2RegIdx, s2RegType);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA mod exp:D = (S0 ^ S1) mod S2\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source 0 Register type\r\n                                                                                * @param  s0RegIdx: Source 0 Register index\r\n                                                                                * @param  s1RegType: Source 1 Register type\r\n                                                                                * @param  s1RegIdx: Source 1 Register index\r\n                                                                                * @param  s2RegType: Source 2 Register type\r\n                                                                                * @param  s2RegIdx: Source 2 Register index\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_MEXP(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s1RegType, uint8_t s1RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp) {\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_MEXP, lastOp);\r\n  Sec_Eng_PKA_Write_Common_OP_Snd_Cfg_S1_S2(s1RegIdx, s1RegType, s2RegIdx, s2RegType);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA mod exp:D = (S0 ^ (S2-2) ) mod S2\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source 0 Register type\r\n                                                                                * @param  s0RegIdx: Source 0 Register index\r\n                                                                                * @param  s2RegType: Source 2 Register type\r\n                                                                                * @param  s2RegIdx: Source 2 Register index\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_MINV(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp) {\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_MINV, lastOp);\r\n  Sec_Eng_PKA_Write_Common_OP_Snd_Cfg_S2(s2RegIdx, s2RegType);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA Report COUT to 1 when S0 < S1\r\n                                                                                *\r\n                                                                                * @param  cout: Compare result\r\n                                                                                * @param  s0RegType: Source 0 Register type\r\n                                                                                * @param  s0RegIdx: Source 0 Register index\r\n                                                                                * @param  s1RegType: Source 1 Register type\r\n                                                                                * @param  s1RegIdx: Source 1 Register index\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_LCMP(uint8_t *cout, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s1RegType, uint8_t s1RegIdx) {\r\n  uint32_t pka0_ctrl = 0x00;\r\n\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, 0, 0, SEC_ENG_PKA_OP_LCMP, 1);\r\n  Sec_Eng_PKA_Write_Common_OP_Snd_Cfg_S1(s1RegIdx, s1RegType);\r\n\r\n  Sec_Eng_PKA_Wait_ISR();\r\n  Sec_Eng_PKA_Clear_Int();\r\n  pka0_ctrl = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0);\r\n\r\n  *cout = (pka0_ctrl & SEC_ENG_PKA_STATUS_LAST_OPC_MASK) >> SEC_ENG_PKA_STATUS_LAST_OPC_OFFSET;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA add:D = S0 + S1\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source 0 Register type\r\n                                                                                * @param  s0RegIdx: Source 0 Register index\r\n                                                                                * @param  s1RegType: Source 1 Register type\r\n                                                                                * @param  s1RegIdx: Source 1 Register index\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_LADD(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s1RegType, uint8_t s1RegIdx, uint8_t lastOp) {\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_LADD, lastOp);\r\n  Sec_Eng_PKA_Write_Common_OP_Snd_Cfg_S1(s1RegIdx, s1RegType);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA sub:D = S0 - S1\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source 0 Register type\r\n                                                                                * @param  s0RegIdx: Source 0 Register index\r\n                                                                                * @param  s1RegType: Source 1 Register type\r\n                                                                                * @param  s1RegIdx: Source 1 Register index\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_LSUB(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s1RegType, uint8_t s1RegIdx, uint8_t lastOp) {\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_LSUB, lastOp);\r\n  Sec_Eng_PKA_Write_Common_OP_Snd_Cfg_S1(s1RegIdx, s1RegType);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA mul:D = S0 * S1\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source 0 Register type\r\n                                                                                * @param  s0RegIdx: Source 0 Register index\r\n                                                                                * @param  s1RegType: Source 1 Register type\r\n                                                                                * @param  s1RegIdx: Source 1 Register index\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_LMUL(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s1RegType, uint8_t s1RegIdx, uint8_t lastOp) {\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_LMUL, lastOp);\r\n  Sec_Eng_PKA_Write_Common_OP_Snd_Cfg_S1(s1RegIdx, s1RegType);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA sqr:D = S0^2\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source 0 Register type\r\n                                                                                * @param  s0RegIdx: Source 0 Register index\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_LSQR(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t lastOp) {\r\n  uint32_t dummyData = 0;\r\n\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_LSQR, lastOp);\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, dummyData);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA div:D = S0 / S2\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source 0 Register type\r\n                                                                                * @param  s0RegIdx: Source 0 Register index\r\n                                                                                * @param  s2RegType: Source 2 Register type\r\n                                                                                * @param  s2RegIdx: Source 2 Register index\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_LDIV(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint8_t s2RegType, uint8_t s2RegIdx, uint8_t lastOp) {\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_LDIV, lastOp);\r\n  Sec_Eng_PKA_Write_Common_OP_Snd_Cfg_S2(s2RegIdx, s2RegType);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA shift:D = S0 << BIT SHIFT\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source 0 Register type\r\n                                                                                * @param  s0RegIdx: Source 0 Register index\r\n                                                                                * @param  bit_shift: Bits to shift\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_LMUL2N(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint16_t bit_shift, uint8_t lastOp) {\r\n  struct pka0_bit_shift_op_cfg cfg;\r\n\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_LMUL2N, 0);\r\n\r\n  cfg.value.BF.bit_shift = bit_shift;\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, cfg.value.WORD);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA shift:D = S0 >> BIT SHIFT\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source 0 Register type\r\n                                                                                * @param  s0RegIdx: Source 0 Register index\r\n                                                                                * @param  bit_shift: Bits to shift\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_LDIV2N(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint16_t bit_shift, uint8_t lastOp) {\r\n  struct pka0_bit_shift_op_cfg cfg;\r\n\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_LDIV2N, 0);\r\n\r\n  cfg.value.BF.bit_shift = bit_shift;\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, cfg.value.WORD);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA mod 2N:D = S0 % ((1 << BIT SHIFT)-1)\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  s0RegType: Source 0 Register type\r\n                                                                                * @param  s0RegIdx: Source 0 Register index\r\n                                                                                * @param  bit_shift: Bits to shift\r\n                                                                                * @param  lastOp: Last operation\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_LMOD2N(uint8_t dRegType, uint8_t dRegIdx, uint8_t s0RegType, uint8_t s0RegIdx, uint16_t bit_shift, uint8_t lastOp) {\r\n  struct pka0_bit_shift_op_cfg cfg;\r\n\r\n  Sec_Eng_PKA_Write_Common_OP_First_Cfg(s0RegIdx, s0RegType, dRegIdx, dRegType, SEC_ENG_PKA_OP_MOD2N, lastOp);\r\n\r\n  cfg.value.BF.bit_shift = bit_shift;\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_RW, cfg.value.WORD);\r\n\r\n  if (lastOp) {\r\n    Sec_Eng_PKA_Wait_ISR();\r\n    Sec_Eng_PKA_Clear_Int();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA GF to Mont  filed 2N:d = (a<<size) % p\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  sRegType: Source Register type\r\n                                                                                * @param  sRegIdx: Source Register index\r\n                                                                                * @param  size: Bits to shift\r\n                                                                                * @param  tRegType: Temp Register type\r\n                                                                                * @param  tRegIdx: Temp Register index\r\n                                                                                * @param  pRegType: Mod P Register type\r\n                                                                                * @param  pRegIdx: Mod P Register index\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_GF2Mont(uint8_t dRegType, uint8_t dRegIdx, uint8_t sRegType, uint8_t sRegIdx, uint32_t size, uint8_t tRegType, uint8_t tRegIdx, uint8_t pRegType, uint8_t pRegIdx) {\r\n  Sec_Eng_PKA_LMUL2N(tRegType, tRegIdx, sRegType, sRegIdx, size, 0);\r\n  Sec_Eng_PKA_MREM(dRegType, dRegIdx, tRegType, tRegIdx, pRegType, pRegIdx, 1);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  PKA GF to Mont  filed 2N:d = (a * inv_r) % p\r\n                                                                                *\r\n                                                                                * @param  dRegType: Destination Register type\r\n                                                                                * @param  dRegIdx: Destination Register index\r\n                                                                                * @param  aRegType: Source Register type\r\n                                                                                * @param  aRegIdx: Source Register index\r\n                                                                                * @param  invrRegType: Invert R Register type\r\n                                                                                * @param  invrRegIdx: Invert R Register index\r\n                                                                                * @param  tRegType: Temp Register type\r\n                                                                                * @param  tRegIdx: Temp Register index\r\n                                                                                * @param  pRegType: Mod P Register type\r\n                                                                                * @param  pRegIdx: Mod P Register index\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_PKA_Mont2GF(uint8_t dRegType, uint8_t dRegIdx, uint8_t aRegType, uint8_t aRegIdx, uint8_t invrRegType, uint8_t invrRegIdx, uint8_t tRegType, uint8_t tRegIdx, uint8_t pRegType,\r\n                         uint8_t pRegIdx) {\r\n  Sec_Eng_PKA_LMUL(tRegType, tRegIdx, aRegType, aRegIdx, invrRegType, invrRegIdx, 0);\r\n  Sec_Eng_PKA_MREM(dRegType, dRegIdx, tRegType, tRegIdx, pRegType, pRegIdx, 1);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set gmac little endian\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_GMAC_Enable_LE(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_GMAC_0_T_ENDIAN);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_GMAC_0_H_ENDIAN);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_GMAC_0_X_ENDIAN);\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0, tmpVal);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(SEC_GMAC_IRQn, SEC_GMAC_IRQHandler);\r\n#endif\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set gmac big endian\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_GMAC_Enable_BE(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_GMAC_0_T_ENDIAN);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_GMAC_0_H_ENDIAN);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_GMAC_0_X_ENDIAN);\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0, tmpVal);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(SEC_GMAC_IRQn, SEC_GMAC_IRQHandler);\r\n#endif\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  GMAC enable link mode\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_GMAC_Enable_Link(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Enable gmac link mode */\r\n  tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0);\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_GMAC_0_EN));\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  GMAC disable link mode\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Sec_Eng_GMAC_Disable_Link(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Disable gmac link mode */\r\n  tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0);\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0, BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_GMAC_0_EN));\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  GMAC work in link mode\r\n                                                                                *\r\n                                                                                * @param  linkAddr: Address of config structure in link mode\r\n                                                                                * @param  in: GMAC input data buffer to deal with\r\n                                                                                * @param  len: GMAC input data length\r\n                                                                                * @param  out: GMAC output data buffer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type Sec_Eng_GMAC_Link_Work(uint32_t linkAddr, const uint8_t *in, uint32_t len, uint8_t *out) {\r\n  uint32_t GMACx = SEC_ENG_BASE;\r\n  uint32_t tmpVal;\r\n  uint32_t timeoutCnt = SEC_ENG_GMAC_BUSY_TIMEOUT_COUNT;\r\n\r\n  /* Link address should word align */\r\n  if ((linkAddr & 0x03) != 0 || len % 16 != 0) {\r\n    return ERROR;\r\n  }\r\n\r\n  /* Wait finished */\r\n  do {\r\n    tmpVal = BL_RD_REG(GMACx, SEC_ENG_SE_GMAC_0_CTRL_0);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_GMAC_0_BUSY));\r\n\r\n  /* Set link address */\r\n  BL_WR_REG(GMACx, SEC_ENG_SE_GMAC_0_LCA, linkAddr);\r\n\r\n  /* Change source buffer address */\r\n  *(uint32_t *)(linkAddr + 4) = (uint32_t)in;\r\n\r\n  /* Set data length */\r\n  *((uint16_t *)linkAddr + 1) = len / 16;\r\n\r\n  /* Start gmac engine and wait finishing */\r\n  tmpVal = BL_RD_REG(GMACx, SEC_ENG_SE_GMAC_0_CTRL_0);\r\n  BL_WR_REG(GMACx, SEC_ENG_SE_GMAC_0_CTRL_0, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_GMAC_0_TRIG_1T));\r\n  timeoutCnt = SEC_ENG_GMAC_BUSY_TIMEOUT_COUNT;\r\n\r\n  do {\r\n    tmpVal = BL_RD_REG(GMACx, SEC_ENG_SE_GMAC_0_CTRL_0);\r\n    timeoutCnt--;\r\n\r\n    if (timeoutCnt == 0) {\r\n      return TIMEOUT;\r\n    }\r\n  } while (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_GMAC_0_BUSY));\r\n\r\n  /* Get result */\r\n  BL702_MemCpy_Fast(out, (uint8_t *)(linkAddr + 0x18), 16);\r\n\r\n  return SUCCESS;\r\n}\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Sec Eng Interrupt Handler\r\n                                                                                *\r\n                                                                                * @param  intType: IRQ Type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nstatic void SEC_Eng_IntHandler(SEC_ENG_INT_Type intType) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_INT_TYPE(intType));\r\n\r\n  switch (intType) {\r\n  case SEC_ENG_INT_TRNG:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_TRNG_0_CTRL_0);\r\n\r\n    if (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_TRNG_0_INT)) {\r\n      /* Clear interrupt */\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_TRNG_0_CTRL_0, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_0_INT_CLR_1T));\r\n\r\n      /* Call the callback function */\r\n      if (secEngIntCbfArra[SEC_ENG_INT_TRNG] != NULL) {\r\n        secEngIntCbfArra[SEC_ENG_INT_TRNG]();\r\n      }\r\n    }\r\n\r\n    break;\r\n\r\n  case SEC_ENG_INT_AES:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_AES_0_CTRL);\r\n\r\n    if (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_AES_0_INT)) {\r\n      /* Clear interrupt */\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_AES_0_CTRL, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_AES_0_INT_CLR_1T));\r\n\r\n      /* Call the callback function */\r\n      if (secEngIntCbfArra[SEC_ENG_INT_AES] != NULL) {\r\n        secEngIntCbfArra[SEC_ENG_INT_AES]();\r\n      }\r\n    }\r\n\r\n    break;\r\n\r\n  case SEC_ENG_INT_SHA:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_SHA_0_CTRL);\r\n\r\n    if (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_SHA_0_INT)) {\r\n      /* Clear interrupt */\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_SHA_0_CTRL, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_SHA_0_INT_CLR_1T));\r\n\r\n      /* Call the callback function */\r\n      if (secEngIntCbfArra[SEC_ENG_INT_SHA] != NULL) {\r\n        secEngIntCbfArra[SEC_ENG_INT_SHA]();\r\n      }\r\n    }\r\n\r\n    break;\r\n\r\n  case SEC_ENG_INT_PKA:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0);\r\n\r\n    if (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_PKA_0_INT)) {\r\n      /* Clear interrupt */\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_PKA_0_INT_CLR_1T));\r\n\r\n      /* Call the callback function */\r\n      if (secEngIntCbfArra[SEC_ENG_INT_PKA] != NULL) {\r\n        secEngIntCbfArra[SEC_ENG_INT_PKA]();\r\n      }\r\n    }\r\n\r\n    break;\r\n\r\n  case SEC_ENG_INT_CDET:\r\n\r\n    /* Call the callback function */\r\n    if (secEngIntCbfArra[SEC_ENG_INT_CDET] != NULL) {\r\n      secEngIntCbfArra[SEC_ENG_INT_CDET]();\r\n    }\r\n\r\n    break;\r\n\r\n  case SEC_ENG_INT_GMAC:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0);\r\n\r\n    if (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_GMAC_0_INT)) {\r\n      /* Clear interrupt */\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_GMAC_0_INT_CLR_1T));\r\n\r\n      /* Call the callback function */\r\n      if (secEngIntCbfArra[SEC_ENG_INT_GMAC] != NULL) {\r\n        secEngIntCbfArra[SEC_ENG_INT_GMAC]();\r\n      }\r\n    }\r\n\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Sec Eng Interrupt Mask or Unmask\r\n                                                                                *\r\n                                                                                * @param  intType: Sec Eng Interrupt Type\r\n                                                                                * @param  intMask: MASK or UNMASK\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid SEC_Eng_IntMask(SEC_ENG_INT_Type intType, BL_Mask_Type intMask) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_INT_TYPE(intType));\r\n\r\n  switch (intType) {\r\n  case SEC_ENG_INT_TRNG:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_TRNG_0_CTRL_0);\r\n\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_TRNG_0_CTRL_0, BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_0_INT_MASK));\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_TRNG_0_CTRL_0, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_0_INT_MASK));\r\n    }\r\n\r\n    break;\r\n\r\n  case SEC_ENG_INT_AES:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_AES_0_CTRL);\r\n\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_AES_0_CTRL, BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_AES_0_INT_MASK));\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_AES_0_CTRL, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_AES_0_INT_MASK));\r\n    }\r\n\r\n    break;\r\n\r\n  case SEC_ENG_INT_SHA:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_SHA_0_CTRL);\r\n\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_SHA_0_CTRL, BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_SHA_0_INT_MASK));\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_SHA_0_CTRL, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_SHA_0_INT_MASK));\r\n    }\r\n\r\n    break;\r\n\r\n  case SEC_ENG_INT_PKA:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0);\r\n\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0, BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_PKA_0_INT_MASK));\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_PKA_0_INT_MASK));\r\n    }\r\n\r\n    break;\r\n\r\n  case SEC_ENG_INT_CDET:\r\n    break;\r\n\r\n  case SEC_ENG_INT_GMAC:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0);\r\n\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0, BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_GMAC_0_INT_MASK));\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_GMAC_0_INT_MASK));\r\n    }\r\n\r\n    break;\r\n\r\n  case SEC_ENG_INT_ALL:\r\n    if (intMask == UNMASK) {\r\n      /* UNMASK(Enable) this interrupt */\r\n      tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_TRNG_0_CTRL_0);\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_TRNG_0_CTRL_0, BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_0_INT_MASK));\r\n      tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_AES_0_CTRL);\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_AES_0_CTRL, BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_AES_0_INT_MASK));\r\n      tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_SHA_0_CTRL);\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_SHA_0_CTRL, BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_SHA_0_INT_MASK));\r\n      tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0);\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0, BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_PKA_0_INT_MASK));\r\n      tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0);\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0, BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_GMAC_0_INT_MASK));\r\n    } else {\r\n      /* MASK(Disable) this interrupt */\r\n      tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_TRNG_0_CTRL_0);\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_TRNG_0_CTRL_0, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_0_INT_MASK));\r\n      tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_AES_0_CTRL);\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_AES_0_CTRL, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_AES_0_INT_MASK));\r\n      tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_SHA_0_CTRL);\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_SHA_0_CTRL, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_SHA_0_INT_MASK));\r\n      tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0);\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_PKA_0_INT_MASK));\r\n      tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0);\r\n      BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_GMAC_0_INT_MASK));\r\n    }\r\n\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Sec Eng Interrupt clear\r\n                                                                                *\r\n                                                                                * @param  intType: Sec Eng Interrupt Type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid SEC_Eng_ClrIntStatus(SEC_ENG_INT_Type intType) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_INT_TYPE(intType));\r\n\r\n  switch (intType) {\r\n  case SEC_ENG_INT_AES:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_AES_0_CTRL);\r\n    BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_AES_0_CTRL, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_AES_0_INT_CLR_1T));\r\n    break;\r\n\r\n  case SEC_ENG_INT_SHA:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_SHA_0_CTRL);\r\n    BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_SHA_0_CTRL, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_SHA_0_INT_CLR_1T));\r\n    break;\r\n\r\n  case SEC_ENG_INT_TRNG:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_TRNG_0_CTRL_0);\r\n    BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_TRNG_0_CTRL_0, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_0_INT_CLR_1T));\r\n    break;\r\n\r\n  case SEC_ENG_INT_PKA:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0);\r\n    BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_PKA_0_INT_CLR_1T));\r\n    break;\r\n\r\n  case SEC_ENG_INT_CDET:\r\n    break;\r\n\r\n  case SEC_ENG_INT_GMAC:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0);\r\n    BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0, BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_GMAC_0_INT_CLR_1T));\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Sec Eng Interrupt callback function install\r\n                                                                                *\r\n                                                                                * @param  intType: Sec Eng Interrupt Type\r\n                                                                                * @param  cbFun: Pointer to interrupt callback function. The type should be void (*fn)(void)\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid SEC_Eng_Int_Callback_Install(SEC_ENG_INT_Type intType, intCallback_Type *cbFun) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_INT_TYPE(intType));\r\n\r\n  secEngIntCbfArra[intType] = cbFun;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Sec Eng get interrupt status\r\n                                                                                *\r\n                                                                                * @param  intType: Sec Eng Interrupt Type\r\n                                                                                *\r\n                                                                                * @return status of interrupt\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type SEC_Eng_GetIntStatus(SEC_ENG_INT_Type intType) {\r\n  uint32_t    tmpVal;\r\n  BL_Sts_Type status = RESET;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SEC_ENG_INT_TYPE(intType));\r\n\r\n  switch (intType) {\r\n  case SEC_ENG_INT_AES:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_AES_0_CTRL);\r\n\r\n    if (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_AES_0_INT)) {\r\n      status = SET;\r\n    }\r\n\r\n    break;\r\n\r\n  case SEC_ENG_INT_SHA:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_SHA_0_CTRL);\r\n\r\n    if (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_SHA_0_INT)) {\r\n      status = SET;\r\n    }\r\n\r\n    break;\r\n\r\n  case SEC_ENG_INT_TRNG:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_TRNG_0_CTRL_0);\r\n\r\n    if (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_TRNG_0_INT)) {\r\n      status = SET;\r\n    }\r\n\r\n    break;\r\n\r\n  case SEC_ENG_INT_PKA:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_PKA_0_CTRL_0);\r\n\r\n    if (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_PKA_0_INT)) {\r\n      status = SET;\r\n    }\r\n\r\n    break;\r\n\r\n  case SEC_ENG_INT_CDET:\r\n    break;\r\n\r\n  case SEC_ENG_INT_GMAC:\r\n    tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_GMAC_0_CTRL_0);\r\n\r\n    if (BL_IS_REG_BIT_SET(tmpVal, SEC_ENG_SE_GMAC_0_INT)) {\r\n      status = SET;\r\n    }\r\n\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return status;\r\n}\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Sec Eng Trng IRQ Handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid SEC_TRNG_IRQHandler(void) { SEC_Eng_IntHandler(SEC_ENG_INT_TRNG); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Sec Eng Pka IRQ Handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid SEC_PKA_IRQHandler(void) { SEC_Eng_IntHandler(SEC_ENG_INT_PKA); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Sec Eng Aes IRQ Handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid SEC_AES_IRQHandler(void) { SEC_Eng_IntHandler(SEC_ENG_INT_AES); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Sec Eng Sha IRQ Handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid SEC_SHA_IRQHandler(void) { SEC_Eng_IntHandler(SEC_ENG_INT_SHA); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Sec Eng Cdet IRQ Handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid SEC_CDET_IRQHandler(void) { SEC_Eng_IntHandler(SEC_ENG_INT_CDET); }\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Sec Eng Gmac IRQ Handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid SEC_GMAC_IRQHandler(void) { SEC_Eng_IntHandler(SEC_ENG_INT_GMAC); }\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  turn on sec ring\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid ATTR_TCM_SECTION SEC_Eng_Turn_On_Sec_Ring(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* Turn-on Sec Ring Oscillation */\r\n  tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_TRNG_0_CTRL_3);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_0_ROSC_EN);\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_TRNG_0_CTRL_3, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  turn off sec ring\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid ATTR_TCM_SECTION SEC_Eng_Turn_Off_Sec_Ring(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* Turn-off Sec Ring Oscillation */\r\n  tmpVal = BL_RD_REG(SEC_ENG_BASE, SEC_ENG_SE_TRNG_0_CTRL_3);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SEC_ENG_SE_TRNG_0_ROSC_EN);\r\n  BL_WR_REG(SEC_ENG_BASE, SEC_ENG_SE_TRNG_0_CTRL_3, tmpVal);\r\n}\r\n\r\n/*@} end of group SEC_ENG_Public_Functions */\r\n\r\n/*@} end of group SEC_ENG */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_sf_cfg.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_sf_cfg.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_sf_cfg.h\"\r\n#include \"bl702_glb.h\"\r\n#include \"bl702_xip_sflash.h\"\r\n#include \"softcrc.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SF_CFG\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SF_CFG_Private_Macros\r\n *  @{\r\n */\r\n#define BFLB_FLASH_CFG_MAGIC \"FCFG\"\r\n\r\n/*@} end of group SF_CFG_Private_Macros */\r\n\r\n/** @defgroup  SF_CFG_Private_Types\r\n *  @{\r\n */\r\n#ifndef BFLB_USE_ROM_DRIVER\r\ntypedef struct {\r\n  uint32_t                  jedecID;\r\n  char                     *name;\r\n  const SPI_Flash_Cfg_Type *cfg;\r\n} Flash_Info_t;\r\n#endif\r\n\r\n/*@} end of group SF_CFG_Private_Types */\r\n\r\n/** @defgroup  SF_CFG_Private_Variables\r\n *  @{\r\n */\r\n#ifndef BFLB_USE_ROM_DRIVER\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Winb_80DV = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0xef,\r\n\r\n    .deBurstWrapCmd       = 0x77,\r\n    .deBurstWrapCmdDmyClk = 0x3,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .deBurstWrapData      = 0xF0,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 1,\r\n    .qeBit         = 0x01,\r\n    .qeWriteRegLen = 0x02,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x01,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 0,\r\n    .cReadMode      = 0xFF,\r\n\r\n    .burstWrapCmd       = 0x77,\r\n    .burstWrapCmdDmyClk = 0x3,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .burstWrapData      = 0x40,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x32,\r\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\r\n\r\n    .ioMode    = SF_CTRL_QIO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3d,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 300,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 3,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Winb_16DV = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0xef,\r\n\r\n    .deBurstWrapCmd       = 0x77,\r\n    .deBurstWrapCmdDmyClk = 0x3,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .deBurstWrapData      = 0xF0,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 1,\r\n    .qeBit         = 0x01,\r\n    .qeWriteRegLen = 0x02, /*Q08BV,Q16DV: 0x02.Q32FW,Q32FV: 0x01 */\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x01,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 1,\r\n    .cReadMode      = 0x20,\r\n\r\n    .burstWrapCmd       = 0x77,\r\n    .burstWrapCmdDmyClk = 0x3,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .burstWrapData      = 0x40,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x32,\r\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\r\n\r\n    .ioMode    = SF_CTRL_QIO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3d,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 300,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 3,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Winb_80EW_16FW_32JW_32FW_32FV = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0xef,\r\n\r\n    .deBurstWrapCmd       = 0x77,\r\n    .deBurstWrapCmdDmyClk = 0x3,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .deBurstWrapData      = 0xF0,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 1,\r\n    .qeBit         = 0x01,\r\n    .qeWriteRegLen = 0x01,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x31,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 1,\r\n    .cReadMode      = 0x20,\r\n\r\n    .burstWrapCmd       = 0x77,\r\n    .burstWrapCmdDmyClk = 0x3,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .burstWrapData      = 0x40,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x32,\r\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\r\n\r\n    .ioMode    = SF_CTRL_QIO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3f,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 400,\r\n    .timeE32k    = 1600,\r\n    .timeE64k    = 2000,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 3,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Issi = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0x9d,\r\n\r\n    .deBurstWrapCmd       = 0xC0,\r\n    .deBurstWrapCmdDmyClk = 0x00,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_1_LINE,\r\n    .deBurstWrapData      = 0x00,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 0,\r\n    .qeBit         = 0x06,\r\n    .qeWriteRegLen = 0x01,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x31,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 1,\r\n    .cReadMode      = 0xA0,\r\n\r\n    .burstWrapCmd       = 0xC0,\r\n    .burstWrapCmdDmyClk = 0x00,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_1_LINE,\r\n    .burstWrapData      = 0x06,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x32,\r\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\r\n\r\n    .ioMode    = SF_CTRL_QIO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3f,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 300,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 5,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Gd_Md_40D = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0x51,\r\n\r\n    .deBurstWrapCmd       = 0x77,\r\n    .deBurstWrapCmdDmyClk = 0x3,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .deBurstWrapData      = 0xF0,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 1,\r\n    .qeBit         = 0x01,\r\n    .qeWriteRegLen = 0x02,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x01,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 0,\r\n    .cReadMode      = 0xA0,\r\n\r\n    .burstWrapCmd       = 0x77,\r\n    .burstWrapCmdDmyClk = 0x3,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .burstWrapData      = 0x40,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x32,\r\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\r\n\r\n    .ioMode    = SF_CTRL_DO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3f,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 300,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 20,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Gd_LQ08C_LE16C_LQ32D_WQ32E = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0xc8,\r\n\r\n    .deBurstWrapCmd       = 0x77,\r\n    .deBurstWrapCmdDmyClk = 0x3,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .deBurstWrapData      = 0xF0,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 1,\r\n    .qeBit         = 0x01,\r\n    .qeWriteRegLen = 0x02,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x01,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 1,\r\n    .cReadMode      = 0x20,\r\n\r\n    .burstWrapCmd       = 0x77,\r\n    .burstWrapCmdDmyClk = 0x3,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .burstWrapData      = 0x40,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x32,\r\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\r\n\r\n    .ioMode    = SF_CTRL_QIO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3f,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 300,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 20,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Gd_Q80E_Q16E = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0xc8,\r\n\r\n    .deBurstWrapCmd       = 0x77,\r\n    .deBurstWrapCmdDmyClk = 0x3,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .deBurstWrapData      = 0xF0,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 1,\r\n    .qeBit         = 0x01,\r\n    .qeWriteRegLen = 0x02,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x01,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 1,\r\n    .cReadMode      = 0xA0,\r\n\r\n    .burstWrapCmd       = 0x77,\r\n    .burstWrapCmdDmyClk = 0x3,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .burstWrapData      = 0x40,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x32,\r\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\r\n\r\n    .ioMode    = SF_CTRL_QIO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3f,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 300,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 20,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Gd_WQ80E_WQ16E = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0xc8,\r\n\r\n    .deBurstWrapCmd       = 0x77,\r\n    .deBurstWrapCmdDmyClk = 0x3,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .deBurstWrapData      = 0xF0,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 1,\r\n    .qeBit         = 0x01,\r\n    .qeWriteRegLen = 0x02,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x01,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 32 / 8,\r\n    .cReadSupport   = 1,\r\n    .cReadMode      = 0xA0,\r\n\r\n    .burstWrapCmd       = 0x77,\r\n    .burstWrapCmdDmyClk = 0x3,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .burstWrapData      = 0x40,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x32,\r\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\r\n\r\n    .ioMode    = SF_CTRL_QIO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3f,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 8 / 8,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 300,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 20,\r\n    .qeData      = 0x12,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Gd_Q32C = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0xc8,\r\n\r\n    .deBurstWrapCmd       = 0x77,\r\n    .deBurstWrapCmdDmyClk = 0x3,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .deBurstWrapData      = 0xF0,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 1,\r\n    .qeBit         = 0x01,\r\n    .qeWriteRegLen = 0x01,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x31,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 1,\r\n    .cReadMode      = 0x20,\r\n\r\n    .burstWrapCmd       = 0x77,\r\n    .burstWrapCmdDmyClk = 0x3,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .burstWrapData      = 0x40,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x32,\r\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\r\n\r\n    .ioMode    = SF_CTRL_QIO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3f,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 300,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 20,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Mxic = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0xC2,\r\n\r\n    .deBurstWrapCmd       = 0xC0,\r\n    .deBurstWrapCmdDmyClk = 0x00,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_1_LINE,\r\n    .deBurstWrapData      = 0x10,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 0,\r\n    .qeBit         = 0x06,\r\n    .qeWriteRegLen = 0x02,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x01,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 1,\r\n    .cReadMode      = 0xA5,\r\n\r\n    .burstWrapCmd       = 0xC0,\r\n    .burstWrapCmdDmyClk = 0x00,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_1_LINE,\r\n    .burstWrapData      = 0x02,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x38,\r\n    .qppAddrMode     = SF_CTRL_ADDR_4_LINES,\r\n\r\n    .ioMode    = SF_CTRL_QIO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3f,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 300,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 45,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Mxic_1635F = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0xC2,\r\n\r\n    .deBurstWrapCmd       = 0xC0,\r\n    .deBurstWrapCmdDmyClk = 0x00,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_1_LINE,\r\n    .deBurstWrapData      = 0x10,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 0,\r\n    .qeBit         = 0x06,\r\n    .qeWriteRegLen = 0x01,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x01,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 1,\r\n    .cReadMode      = 0xA5,\r\n\r\n    .burstWrapCmd       = 0xC0,\r\n    .burstWrapCmdDmyClk = 0x00,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_1_LINE,\r\n    .burstWrapData      = 0x02,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x38,\r\n    .qppAddrMode     = SF_CTRL_ADDR_4_LINES,\r\n\r\n    .ioMode    = SF_CTRL_QIO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3f,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 300,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 45,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Xtx40 = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0x0B,\r\n\r\n    .deBurstWrapCmd       = 0x77,\r\n    .deBurstWrapCmdDmyClk = 0x3,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .deBurstWrapData      = 0xF0,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 0x01,\r\n    .qeBit         = 0x01,\r\n    .qeWriteRegLen = 0x02,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x01,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 1,\r\n    .cReadMode      = 0x20,\r\n\r\n    .burstWrapCmd       = 0x77,\r\n    .burstWrapCmdDmyClk = 0x3,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .burstWrapData      = 0x40,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x32,\r\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\r\n\r\n    .ioMode    = SF_CTRL_DIO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3f,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 6000,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 20,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Xtx = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0x0B,\r\n\r\n    .deBurstWrapCmd       = 0x77,\r\n    .deBurstWrapCmdDmyClk = 0x3,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .deBurstWrapData      = 0xF0,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 0x01,\r\n    .qeBit         = 0x01,\r\n    .qeWriteRegLen = 0x02,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x01,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 1,\r\n    .cReadMode      = 0x20,\r\n\r\n    .burstWrapCmd       = 0x77,\r\n    .burstWrapCmdDmyClk = 0x3,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .burstWrapData      = 0x40,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x32,\r\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\r\n\r\n    .ioMode    = SF_CTRL_QIO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3f,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 6000,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 20,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Puya_Q80L_Q80H_Q16H = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0x85,\r\n\r\n    .deBurstWrapCmd       = 0x77,\r\n    .deBurstWrapCmdDmyClk = 0x3,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .deBurstWrapData      = 0xF0,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 0x01,\r\n    .qeBit         = 0x01,\r\n    .qeWriteRegLen = 0x02,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x01,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 1,\r\n    .cReadMode      = 0x20,\r\n\r\n    .burstWrapCmd       = 0x77,\r\n    .burstWrapCmdDmyClk = 0x3,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .burstWrapData      = 0x40,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x32,\r\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\r\n\r\n    .ioMode    = SF_CTRL_QIO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3d,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 300,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 8,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Puya_Q32H = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0x85,\r\n\r\n    .deBurstWrapCmd       = 0x77,\r\n    .deBurstWrapCmdDmyClk = 0x3,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .deBurstWrapData      = 0xF0,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 0x01,\r\n    .qeBit         = 0x01,\r\n    .qeWriteRegLen = 0x01,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x31,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 1,\r\n    .cReadMode      = 0x20,\r\n\r\n    .burstWrapCmd       = 0x77,\r\n    .burstWrapCmdDmyClk = 0x3,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .burstWrapData      = 0x40,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x32,\r\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\r\n\r\n    .ioMode    = SF_CTRL_QIO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3f,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 300,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 8,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Boya40 = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0x68,\r\n\r\n    .deBurstWrapCmd       = 0x77,\r\n    .deBurstWrapCmdDmyClk = 0x3,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .deBurstWrapData      = 0xF0,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 1,\r\n    .qeBit         = 0x01,\r\n    .qeWriteRegLen = 0x02,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x01,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 0,\r\n    .cReadMode      = 0xA0,\r\n\r\n    .burstWrapCmd       = 0x77,\r\n    .burstWrapCmdDmyClk = 0x3,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .burstWrapData      = 0x40,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x32,\r\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\r\n\r\n    .ioMode    = SF_CTRL_DO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3f,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 300,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 20,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Boya = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0x68,\r\n\r\n    .deBurstWrapCmd       = 0x77,\r\n    .deBurstWrapCmdDmyClk = 0x3,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .deBurstWrapData      = 0xF0,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 0x01,\r\n    .qeBit         = 0x01,\r\n    .qeWriteRegLen = 0x01,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x31,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 1,\r\n    .cReadMode      = 0x20,\r\n\r\n    .burstWrapCmd       = 0x77,\r\n    .burstWrapCmdDmyClk = 0x3,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .burstWrapData      = 0x40,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x32,\r\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\r\n\r\n    .ioMode    = SF_CTRL_QIO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3f,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 300,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 20,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_FT_VQ80 = {\r\n    .resetCreadCmd     = 0xff,\r\n    .resetCreadCmdSize = 3,\r\n    .mid               = 0xef,\r\n\r\n    .deBurstWrapCmd       = 0x77,\r\n    .deBurstWrapCmdDmyClk = 0x3,\r\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .deBurstWrapData      = 0xF0,\r\n\r\n    /*reg*/\r\n    .writeEnableCmd     = 0x06,\r\n    .wrEnableIndex      = 0x00,\r\n    .wrEnableBit        = 0x01,\r\n    .wrEnableReadRegLen = 0x01,\r\n\r\n    .qeIndex       = 1,\r\n    .qeBit         = 0x01,\r\n    .qeWriteRegLen = 0x01,\r\n    .qeReadRegLen  = 0x1,\r\n\r\n    .busyIndex        = 0,\r\n    .busyBit          = 0x00,\r\n    .busyReadRegLen   = 0x1,\r\n    .releasePowerDown = 0xab,\r\n\r\n    .readRegCmd[0]  = 0x05,\r\n    .readRegCmd[1]  = 0x35,\r\n    .writeRegCmd[0] = 0x01,\r\n    .writeRegCmd[1] = 0x31,\r\n\r\n    .fastReadQioCmd = 0xeb,\r\n    .frQioDmyClk    = 16 / 8,\r\n    .cReadSupport   = 1,\r\n    .cReadMode      = 0x20,\r\n\r\n    .burstWrapCmd       = 0x77,\r\n    .burstWrapCmdDmyClk = 0x3,\r\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\r\n    .burstWrapData      = 0x40,\r\n    /*erase*/\r\n    .chipEraseCmd   = 0xc7,\r\n    .sectorEraseCmd = 0x20,\r\n    .blk32EraseCmd  = 0x52,\r\n    .blk64EraseCmd  = 0xd8,\r\n    /*write*/\r\n    .pageProgramCmd  = 0x02,\r\n    .qpageProgramCmd = 0x32,\r\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\r\n\r\n    .ioMode    = SF_CTRL_QIO_MODE,\r\n    .clkDelay  = 1,\r\n    .clkInvert = 0x3f,\r\n\r\n    .resetEnCmd          = 0x66,\r\n    .resetCmd            = 0x99,\r\n    .cRExit              = 0xff,\r\n    .wrEnableWriteRegLen = 0x00,\r\n\r\n    /*id*/\r\n    .jedecIdCmd          = 0x9f,\r\n    .jedecIdCmdDmyClk    = 0,\r\n    .qpiJedecIdCmd       = 0x9f,\r\n    .qpiJedecIdCmdDmyClk = 0x00,\r\n    .sectorSize          = 4,\r\n    .pageSize            = 256,\r\n\r\n    /*read*/\r\n    .fastReadCmd    = 0x0b,\r\n    .frDmyClk       = 8 / 8,\r\n    .qpiFastReadCmd = 0x0b,\r\n    .qpiFrDmyClk    = 8 / 8,\r\n    .fastReadDoCmd  = 0x3b,\r\n    .frDoDmyClk     = 8 / 8,\r\n    .fastReadDioCmd = 0xbb,\r\n    .frDioDmyClk    = 0,\r\n    .fastReadQoCmd  = 0x6b,\r\n    .frQoDmyClk     = 8 / 8,\r\n\r\n    .qpiFastReadQioCmd  = 0xeb,\r\n    .qpiFrQioDmyClk     = 16 / 8,\r\n    .qpiPageProgramCmd  = 0x02,\r\n    .writeVregEnableCmd = 0x50,\r\n\r\n    /* qpi mode */\r\n    .enterQpi = 0x38,\r\n    .exitQpi  = 0xff,\r\n\r\n    /*AC*/\r\n    .timeEsector = 300,\r\n    .timeE32k    = 1200,\r\n    .timeE64k    = 1200,\r\n    .timePagePgm = 5,\r\n    .timeCe      = 20 * 1000,\r\n    .pdDelay     = 8,\r\n    .qeData      = 0,\r\n};\r\n\r\nstatic const ATTR_TCM_CONST_SECTION Flash_Info_t flashInfos[] = {\r\n    {\r\n     .jedecID = 0x1440ef,\r\n     .name    = \"Winb_80DV_08_33\",\r\n     .cfg     = &flashCfg_Winb_80DV,\r\n     },\r\n    {\r\n     .jedecID = 0x1540ef,\r\n     .name    = \"Winb_16DV_16_33\",\r\n     .cfg     = &flashCfg_Winb_16DV,\r\n     },\r\n    {\r\n     .jedecID = 0x1640ef,\r\n     .name    = \"Winb_32FV_32_33\",\r\n     .cfg     = &flashCfg_Winb_80EW_16FW_32JW_32FW_32FV,\r\n     },\r\n    {\r\n     .jedecID = 0x1460ef,\r\n     .name    = \"Winb_80EW_08_18\",\r\n     .cfg     = &flashCfg_Winb_80EW_16FW_32JW_32FW_32FV,\r\n     },\r\n    {\r\n     .jedecID = 0x1560ef,\r\n     .name    = \"Winb_16FW_16_18\",\r\n     .cfg     = &flashCfg_Winb_80EW_16FW_32JW_32FW_32FV,\r\n     },\r\n    {\r\n     .jedecID = 0x1660ef,\r\n     .name    = \"Winb_32FW_32_18\",\r\n     .cfg     = &flashCfg_Winb_80EW_16FW_32JW_32FW_32FV,\r\n     },\r\n    {\r\n     .jedecID = 0x1860ef,\r\n     .name    = \"Winb_128FW_128_18\",\r\n     .cfg     = &flashCfg_Winb_80EW_16FW_32JW_32FW_32FV,\r\n     },\r\n    {\r\n     .jedecID = 0x1680ef,\r\n     .name    = \"Winb_32JW_32_18\",\r\n     .cfg     = &flashCfg_Winb_80EW_16FW_32JW_32FW_32FV,\r\n     },\r\n    {\r\n     .jedecID = 0x13605e,\r\n     .name    = \"Zbit_04_33\",\r\n     .cfg     = &flashCfg_Winb_80EW_16FW_32JW_32FW_32FV,\r\n     },\r\n    {\r\n     .jedecID = 0x14605e,\r\n     .name    = \"Zbit_08_33\",\r\n     .cfg     = &flashCfg_Winb_80EW_16FW_32JW_32FW_32FV,\r\n     },\r\n    {\r\n     .jedecID = 0x14609d,\r\n     .name    = \"ISSI_08_33\",\r\n     .cfg     = &flashCfg_Issi,\r\n     },\r\n    {\r\n     .jedecID = 0x15609d,\r\n     .name    = \"ISSI_16_33\",\r\n     .cfg     = &flashCfg_Issi,\r\n     },\r\n    {\r\n     .jedecID = 0x16609d,\r\n     .name    = \"ISSI_32_33\",\r\n     .cfg     = &flashCfg_Issi,\r\n     },\r\n    {\r\n     .jedecID = 0x14709d,\r\n     .name    = \"ISSI_08_18\",\r\n     .cfg     = &flashCfg_Issi,\r\n     },\r\n    {\r\n     .jedecID = 0x15709d,\r\n     .name    = \"ISSI_16_18\",\r\n     .cfg     = &flashCfg_Issi,\r\n     },\r\n    {\r\n     .jedecID = 0x16709d,\r\n     .name    = \"ISSI_32_18\",\r\n     .cfg     = &flashCfg_Issi,\r\n     },\r\n    {\r\n     .jedecID = 0x134051,\r\n     .name    = \"GD_MD04D_04_33\",\r\n     .cfg     = &flashCfg_Gd_Md_40D,\r\n     },\r\n    {\r\n     .jedecID = 0x1440C8,\r\n     .name    = \"GD_Q08E_08_33\",\r\n     .cfg     = &flashCfg_Gd_Q80E_Q16E,\r\n     },\r\n    {\r\n     .jedecID = 0x1540C8,\r\n     .name    = \"GD_Q16E_16_33\",\r\n     .cfg     = &flashCfg_Gd_Q80E_Q16E,\r\n     },\r\n    {\r\n     .jedecID = 0x1640C8,\r\n     .name    = \"GD_Q32C_32_33\",\r\n     .cfg     = &flashCfg_Gd_Q32C,\r\n     },\r\n    {\r\n     .jedecID = 0x1460C8,\r\n     .name    = \"GD_LQ08C_08_18\",\r\n     .cfg     = &flashCfg_Gd_LQ08C_LE16C_LQ32D_WQ32E,\r\n     },\r\n    {\r\n     .jedecID = 0x1560C8,\r\n     .name    = \"GD_LE16C_16_18\",\r\n     .cfg     = &flashCfg_Gd_LQ08C_LE16C_LQ32D_WQ32E,\r\n     },\r\n    {\r\n     .jedecID = 0x1660C8,\r\n     .name    = \"GD_LQ32D_32_18\",\r\n     .cfg     = &flashCfg_Gd_LQ08C_LE16C_LQ32D_WQ32E,\r\n     },\r\n    {\r\n     .jedecID = 0x1465C8,\r\n     .name    = \"GD_WQ80E_80_33\",\r\n     .cfg     = &flashCfg_Gd_WQ80E_WQ16E,\r\n     },\r\n    {\r\n     .jedecID = 0x1565C8,\r\n     .name    = \"GD_WQ16E_16_33\",\r\n     .cfg     = &flashCfg_Gd_WQ80E_WQ16E,\r\n     },\r\n    {\r\n     .jedecID = 0x1665C8,\r\n     .name    = \"GD_WQ32E_32_33\",\r\n     .cfg     = &flashCfg_Gd_LQ08C_LE16C_LQ32D_WQ32E,\r\n     },\r\n    {\r\n     .jedecID = 0x3425C2,\r\n     .name    = \"MX_25V80_08_18\",\r\n     .cfg     = &flashCfg_Mxic,\r\n     },\r\n    {\r\n     .jedecID = 0x3525C2,\r\n     .name    = \"MX_25U16_35_18\",\r\n     .cfg     = &flashCfg_Mxic_1635F,\r\n     },\r\n    {\r\n     .jedecID = 0x3625C2,\r\n     .name    = \"MX_25V32_32_18\",\r\n     .cfg     = &flashCfg_Mxic,\r\n     },\r\n    {\r\n     .jedecID = 0x13400B,\r\n     .name    = \"XT_25F04D_04_33\",\r\n     .cfg     = &flashCfg_Xtx40,\r\n     },\r\n    {\r\n     .jedecID = 0x15400B,\r\n     .name    = \"XT_25F16B_16_33\",\r\n     .cfg     = &flashCfg_Xtx,\r\n     },\r\n    {\r\n     .jedecID = 0x16400B,\r\n     .name    = \"XT_25F32B_32_33\",\r\n     .cfg     = &flashCfg_Xtx,\r\n     },\r\n    {\r\n     .jedecID = 0x14600B,\r\n     .name    = \"XT_25Q80B_08_18\",\r\n     .cfg     = &flashCfg_Xtx,\r\n     },\r\n    {\r\n     .jedecID = 0x16600B,\r\n     .name    = \"XT_25Q32B_32_18\",\r\n     .cfg     = &flashCfg_Xtx,\r\n     },\r\n    {\r\n     .jedecID = 0x146085,\r\n     .name    = \"Puya_Q80L/H_08_18/33\",\r\n     .cfg     = &flashCfg_Puya_Q80L_Q80H_Q16H,\r\n     },\r\n    {\r\n     .jedecID = 0x156085,\r\n     .name    = \"Puya_Q16H_16_33\",\r\n     .cfg     = &flashCfg_Puya_Q80L_Q80H_Q16H,\r\n     },\r\n    {\r\n     .jedecID = 0x166085,\r\n     .name    = \"Puya_Q32H_32_33\",\r\n     .cfg     = &flashCfg_Puya_Q32H,\r\n     },\r\n    {\r\n     .jedecID = 0x134068,\r\n     .name    = \"Boya_Q04B_04_33\",\r\n     .cfg     = &flashCfg_Boya40,\r\n     },\r\n    {\r\n     .jedecID = 0x144068,\r\n     .name    = \"Boya_Q08B_08_33\",\r\n     .cfg     = &flashCfg_Boya,\r\n     },\r\n    {\r\n     .jedecID = 0x154068,\r\n     .name    = \"Boya_Q16B_16_33\",\r\n     .cfg     = &flashCfg_Boya,\r\n     },\r\n    {\r\n     .jedecID = 0x164068,\r\n     .name    = \"Boya_Q32B_32_33\",\r\n     .cfg     = &flashCfg_Boya,\r\n     },\r\n    {\r\n     .jedecID = 0x174068,\r\n     .name    = \"Boya_Q64A_64_33\",\r\n     .cfg     = &flashCfg_Boya,\r\n     },\r\n    {\r\n     .jedecID = 0x184068,\r\n     .name    = \"Boya_Q128A_128_33\",\r\n     .cfg     = &flashCfg_Boya,\r\n     },\r\n    {\r\n     .jedecID = 0x14605E,\r\n     .name    = \"FT_VQ80\",\r\n     .cfg     = &flashCfg_FT_VQ80,\r\n     }\r\n};\r\n#endif\r\n\r\n/*@} end of group SF_CFG_Private_Variables */\r\n\r\n/** @defgroup  SF_CFG_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group SF_CFG_Global_Variables */\r\n\r\n/** @defgroup  SF_CFG_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group SF_CFG_Private_Fun_Declaration */\r\n\r\n/** @defgroup  SF_CFG_Private_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Init external flash GPIO according to flash GPIO config\r\n                                                                                *\r\n                                                                                * @param  extFlashPin: Flash GPIO config\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\n/* static */ void ATTR_TCM_SECTION SF_Cfg_Init_Ext_Flash_Gpio(uint8_t extFlashPin) {\r\n  GLB_GPIO_Cfg_Type cfg;\r\n  uint8_t           gpiopins[6];\r\n  uint8_t           i = 0;\r\n\r\n  cfg.gpioMode = GPIO_MODE_AF;\r\n  cfg.pullType = GPIO_PULL_UP;\r\n  cfg.drive    = 1;\r\n  cfg.smtCtrl  = 1;\r\n  cfg.gpioFun  = GPIO_FUN_FLASH_PSRAM;\r\n\r\n  if (extFlashPin == 0) {\r\n    gpiopins[0] = BFLB_EXTFLASH_CLK0_GPIO;\r\n    gpiopins[1] = BFLB_EXTFLASH_CS0_GPIO;\r\n    gpiopins[2] = BFLB_EXTFLASH_DATA00_GPIO;\r\n    gpiopins[3] = BFLB_EXTFLASH_DATA10_GPIO;\r\n    gpiopins[4] = BFLB_EXTFLASH_DATA20_GPIO;\r\n    gpiopins[5] = BFLB_EXTFLASH_DATA30_GPIO;\r\n  } else if (extFlashPin == 1) {\r\n    gpiopins[0] = BFLB_EXTFLASH_CLK1_GPIO;\r\n    gpiopins[1] = BFLB_EXTFLASH_CS1_GPIO;\r\n    gpiopins[2] = BFLB_EXTFLASH_DATA01_GPIO;\r\n    gpiopins[3] = BFLB_EXTFLASH_DATA11_GPIO;\r\n    gpiopins[4] = BFLB_EXTFLASH_DATA21_GPIO;\r\n    gpiopins[5] = BFLB_EXTFLASH_DATA31_GPIO;\r\n  } else {\r\n    gpiopins[0] = BFLB_EXTFLASH_CLK2_GPIO;\r\n    gpiopins[1] = BFLB_EXTFLASH_CS2_GPIO;\r\n    gpiopins[2] = BFLB_EXTFLASH_DATA02_GPIO;\r\n    gpiopins[3] = BFLB_EXTFLASH_DATA12_GPIO;\r\n    gpiopins[4] = BFLB_EXTFLASH_DATA22_GPIO;\r\n    gpiopins[5] = BFLB_EXTFLASH_DATA32_GPIO;\r\n  }\r\n\r\n  for (i = 0; i < sizeof(gpiopins); i++) {\r\n    cfg.gpioPin = gpiopins[i];\r\n\r\n    if (i == 0 || i == 1) {\r\n      /*flash clk and cs is output*/\r\n      cfg.gpioMode = GPIO_MODE_OUTPUT;\r\n    } else {\r\n      /*data are bidir*/\r\n      cfg.gpioMode = GPIO_MODE_AF;\r\n    }\r\n\r\n    GLB_GPIO_Init(&cfg);\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Deinit external flash GPIO according to flash GPIO config\r\n                                                                                *\r\n                                                                                * @param  extFlashPin: Flash GPIO config\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\n/* static */ void ATTR_TCM_SECTION SF_Cfg_Deinit_Ext_Flash_Gpio(uint8_t extFlashPin) {\r\n  GLB_GPIO_Cfg_Type cfg;\r\n  uint8_t           gpiopins[6];\r\n  uint8_t           i = 0;\r\n\r\n  cfg.gpioMode = GPIO_MODE_INPUT;\r\n  cfg.pullType = GPIO_PULL_UP;\r\n  cfg.drive    = 1;\r\n  cfg.smtCtrl  = 1;\r\n  cfg.gpioFun  = GPIO_FUN_GPIO;\r\n\r\n  if (extFlashPin == 0) {\r\n    gpiopins[0] = BFLB_EXTFLASH_CLK0_GPIO;\r\n    gpiopins[1] = BFLB_EXTFLASH_CS0_GPIO;\r\n    gpiopins[2] = BFLB_EXTFLASH_DATA00_GPIO;\r\n    gpiopins[3] = BFLB_EXTFLASH_DATA10_GPIO;\r\n    gpiopins[4] = BFLB_EXTFLASH_DATA20_GPIO;\r\n    gpiopins[5] = BFLB_EXTFLASH_DATA30_GPIO;\r\n\r\n  } else if (extFlashPin == 1) {\r\n    gpiopins[0] = BFLB_EXTFLASH_CLK1_GPIO;\r\n    gpiopins[1] = BFLB_EXTFLASH_CS1_GPIO;\r\n    gpiopins[2] = BFLB_EXTFLASH_DATA01_GPIO;\r\n    gpiopins[3] = BFLB_EXTFLASH_DATA11_GPIO;\r\n    gpiopins[4] = BFLB_EXTFLASH_DATA21_GPIO;\r\n    gpiopins[5] = BFLB_EXTFLASH_DATA31_GPIO;\r\n  } else {\r\n    gpiopins[0] = BFLB_EXTFLASH_CLK2_GPIO;\r\n    gpiopins[1] = BFLB_EXTFLASH_CS2_GPIO;\r\n    gpiopins[2] = BFLB_EXTFLASH_DATA02_GPIO;\r\n    gpiopins[3] = BFLB_EXTFLASH_DATA12_GPIO;\r\n    gpiopins[4] = BFLB_EXTFLASH_DATA22_GPIO;\r\n    gpiopins[5] = BFLB_EXTFLASH_DATA32_GPIO;\r\n  }\r\n\r\n  for (i = 0; i < sizeof(gpiopins); i++) {\r\n    cfg.gpioPin = gpiopins[i];\r\n    GLB_GPIO_Init(&cfg);\r\n  }\r\n}\r\n#endif\r\n\r\n/*@} end of group SF_CFG_Private_Functions */\r\n\r\n/** @defgroup  SF_CFG_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get flash config according to flash ID\r\n                                                                                *\r\n                                                                                * @param  flashID: Flash ID\r\n                                                                                * @param  pFlashCfg: Flash config pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SF_Cfg_Get_Flash_Cfg_Need_Lock(uint32_t flashID, SPI_Flash_Cfg_Type *pFlashCfg) {\r\n  uint32_t i;\r\n  uint8_t  buf[sizeof(SPI_Flash_Cfg_Type) + 8];\r\n  uint32_t crc, *pCrc;\r\n  uint32_t xipOffset;\r\n\r\n  if (flashID == 0) {\r\n    xipOffset = SF_Ctrl_Get_Flash_Image_Offset();\r\n    SF_Ctrl_Set_Flash_Image_Offset(0);\r\n    XIP_SFlash_Read_Via_Cache_Need_Lock(8 + BL702_FLASH_XIP_BASE, buf, sizeof(SPI_Flash_Cfg_Type) + 8);\r\n    SF_Ctrl_Set_Flash_Image_Offset(xipOffset);\r\n\r\n    if (BL702_MemCmp(buf, BFLB_FLASH_CFG_MAGIC, 4) == 0) {\r\n      crc  = BFLB_Soft_CRC32((uint8_t *)buf + 4, sizeof(SPI_Flash_Cfg_Type));\r\n      pCrc = (uint32_t *)(buf + 4 + sizeof(SPI_Flash_Cfg_Type));\r\n\r\n      if (*pCrc == crc) {\r\n        BL702_MemCpy_Fast(pFlashCfg, (uint8_t *)buf + 4, sizeof(SPI_Flash_Cfg_Type));\r\n        return SUCCESS;\r\n      }\r\n    }\r\n  } else {\r\n    for (i = 0; i < sizeof(flashInfos) / sizeof(flashInfos[0]); i++) {\r\n      if (flashInfos[i].jedecID == flashID) {\r\n        BL702_MemCpy_Fast(pFlashCfg, flashInfos[i].cfg, sizeof(SPI_Flash_Cfg_Type));\r\n        return SUCCESS;\r\n      }\r\n    }\r\n  }\r\n\r\n  return ERROR;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Init flash GPIO according to flash Pin config\r\n                                                                                *\r\n                                                                                * @param  flashPinCfg: Specify flash Pin config\r\n                                                                                * @param  restoreDefault: Wether to restore default setting\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Cfg_Init_Flash_Gpio(uint8_t flashPinCfg, uint8_t restoreDefault) {\r\n  uint8_t  flashCfg;\r\n  uint8_t  swapCfg;\r\n  uint32_t tmpVal;\r\n\r\n  flashCfg = (flashPinCfg >> 2) & 0x03;\r\n  swapCfg  = flashPinCfg & 0x03;\r\n\r\n  if (restoreDefault) {\r\n    /* Set Default first */\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO);\r\n\r\n    if (BL_GET_REG_BITS_VAL(tmpVal, GLB_CFG_GPIO_USE_PSRAM_IO) == 0x00) {\r\n      SF_Cfg_Init_Ext_Flash_Gpio(1);\r\n    }\r\n\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_PARM);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_CFG_SFLASH2_SWAP_CS_IO2);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_CFG_SFLASH2_SWAP_IO0_IO3);\r\n    BL_WR_REG(GLB_BASE, GLB_PARM, tmpVal);\r\n\r\n    SF_Ctrl_Select_Pad(SF_CTRL_PAD_SEL_SF2);\r\n\r\n    /* Default is set, so return */\r\n    if (flashCfg == BFLB_FLASH_CFG_SF2_EXT_23_28 && swapCfg == BFLB_SF2_SWAP_NONE) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  if (flashCfg == BFLB_FLASH_CFG_SF1_EXT_17_22) {\r\n    SF_Cfg_Init_Ext_Flash_Gpio(0);\r\n    SF_Ctrl_Select_Pad(SF_CTRL_PAD_SEL_SF1);\r\n  } else {\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_GPIO_USE_PSRAM__IO);\r\n\r\n    if (BL_GET_REG_BITS_VAL(tmpVal, GLB_CFG_GPIO_USE_PSRAM_IO) == 0x00) {\r\n      SF_Cfg_Init_Ext_Flash_Gpio(1);\r\n    }\r\n\r\n    tmpVal = BL_RD_REG(GLB_BASE, GLB_PARM);\r\n\r\n    if (swapCfg == BFLB_SF2_SWAP_NONE) {\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_CFG_SFLASH2_SWAP_CS_IO2);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_CFG_SFLASH2_SWAP_IO0_IO3);\r\n    } else if (swapCfg == BFLB_SF2_SWAP_CS_IO2) {\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, GLB_CFG_SFLASH2_SWAP_CS_IO2);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_CFG_SFLASH2_SWAP_IO0_IO3);\r\n    } else if (swapCfg == BFLB_SF2_SWAP_IO0_IO3) {\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, GLB_CFG_SFLASH2_SWAP_CS_IO2);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, GLB_CFG_SFLASH2_SWAP_IO0_IO3);\r\n    } else {\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, GLB_CFG_SFLASH2_SWAP_CS_IO2);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, GLB_CFG_SFLASH2_SWAP_IO0_IO3);\r\n    }\r\n\r\n    BL_WR_REG(GLB_BASE, GLB_PARM, tmpVal);\r\n\r\n    SF_Ctrl_Select_Pad(SF_CTRL_PAD_SEL_SF2);\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Identify one flash\r\n                                                                                *\r\n                                                                                * @param  callFromFlash: code run at flash or ram\r\n                                                                                * @param  autoScan: Auto scan all GPIO pin\r\n                                                                                * @param  flashPinCfg: Specify flash GPIO config, not auto scan\r\n                                                                                * @param  restoreDefault: Wether restore default flash GPIO config\r\n                                                                                * @param  pFlashCfg: Flash config pointer\r\n                                                                                *\r\n                                                                                * @return Flash ID\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nuint32_t ATTR_TCM_SECTION SF_Cfg_Flash_Identify(uint8_t callFromFlash, uint32_t autoScan, uint32_t flashPinCfg, uint8_t restoreDefault, SPI_Flash_Cfg_Type *pFlashCfg) {\r\n  uint32_t    jdecId = 0;\r\n  uint32_t    i      = 0;\r\n  uint32_t    offset;\r\n  BL_Err_Type stat;\r\n\r\n  BL702_MemCpy_Fast(pFlashCfg, &flashCfg_Gd_Q80E_Q16E, sizeof(SPI_Flash_Cfg_Type));\r\n\r\n  if (callFromFlash == 1) {\r\n    stat = XIP_SFlash_State_Save(pFlashCfg, &offset);\r\n\r\n    if (stat != SUCCESS) {\r\n      SF_Ctrl_Set_Owner(SF_CTRL_OWNER_IAHB);\r\n      return 0;\r\n    }\r\n  }\r\n\r\n  if (autoScan) {\r\n    flashPinCfg = 0;\r\n\r\n    do {\r\n      if (flashPinCfg > 0x0f) {\r\n        jdecId = 0;\r\n        break;\r\n      }\r\n\r\n      SF_Cfg_Init_Flash_Gpio(flashPinCfg, restoreDefault);\r\n      SFlash_Releae_Powerdown(pFlashCfg);\r\n      SFlash_Reset_Continue_Read(pFlashCfg);\r\n      SFlash_DisableBurstWrap(pFlashCfg);\r\n      jdecId = 0;\r\n      SFlash_GetJedecId(pFlashCfg, (uint8_t *)&jdecId);\r\n      SFlash_DisableBurstWrap(pFlashCfg);\r\n      jdecId = jdecId & 0xffffff;\r\n      flashPinCfg++;\r\n    } while ((jdecId & 0x00ffff) == 0 || (jdecId & 0xffff00) == 0 || (jdecId & 0x00ffff) == 0xffff || (jdecId & 0xffff00) == 0xffff00);\r\n  } else {\r\n    /* select media gpio */\r\n    SF_Cfg_Init_Flash_Gpio(flashPinCfg, restoreDefault);\r\n    SFlash_Releae_Powerdown(pFlashCfg);\r\n    SFlash_Reset_Continue_Read(pFlashCfg);\r\n    SFlash_DisableBurstWrap(pFlashCfg);\r\n    SFlash_GetJedecId(pFlashCfg, (uint8_t *)&jdecId);\r\n    SFlash_DisableBurstWrap(pFlashCfg);\r\n    jdecId = jdecId & 0xffffff;\r\n  }\r\n\r\n  for (i = 0; i < sizeof(flashInfos) / sizeof(flashInfos[0]); i++) {\r\n    if (flashInfos[i].jedecID == jdecId) {\r\n      BL702_MemCpy_Fast(pFlashCfg, flashInfos[i].cfg, sizeof(SPI_Flash_Cfg_Type));\r\n      break;\r\n    }\r\n  }\r\n\r\n  if (i == sizeof(flashInfos) / sizeof(flashInfos[0])) {\r\n    if (callFromFlash == 1) {\r\n      XIP_SFlash_State_Restore(pFlashCfg, pFlashCfg->ioMode, offset);\r\n    }\r\n\r\n    return jdecId;\r\n  } else {\r\n    if (callFromFlash == 1) {\r\n      XIP_SFlash_State_Restore(pFlashCfg, pFlashCfg->ioMode, offset);\r\n    }\r\n\r\n    return (jdecId | BFLB_FLASH_ID_VALID_FLAG);\r\n  }\r\n}\r\n#endif\r\n\r\n/*@} end of group SF_CFG_Public_Functions */\r\n\r\n/*@} end of group SF_CFG */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_sf_cfg_ext.c",
    "content": "/**\n ******************************************************************************\n * @file    bl702_sf_cfg_ext.c\n * @version V1.0\n * @date\n * @brief   This file is the standard driver c file\n ******************************************************************************\n * @attention\n *\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n *   1. Redistributions of source code must retain the above copyright notice,\n *      this list of conditions and the following disclaimer.\n *   2. Redistributions in binary form must reproduce the above copyright notice,\n *      this list of conditions and the following disclaimer in the documentation\n *      and/or other materials provided with the distribution.\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n *      may be used to endorse or promote products derived from this software\n *      without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n ******************************************************************************\n */\n\n#include \"bl702_sf_cfg_ext.h\"\n#include \"bl702_glb.h\"\n#include \"bl702_romdriver.h\"\n#include \"bl702_sf_cfg.h\"\n#include \"bl702_xip_sflash.h\"\n\n/** @addtogroup  BL702_Peripheral_Driver\n *  @{\n */\n\n/** @addtogroup  SF_CFG_EXT\n *  @{\n */\n\n/** @defgroup  SF_CFG_EXT_Private_Macros\n *  @{\n */\n#define BFLB_FLASH_CFG_MAGIC \"FCFG\"\n\n/*@} end of group SF_CFG_EXT_Private_Macros */\n\n/** @defgroup  SF_CFG_EXT_Private_Types\n *  @{\n */\ntypedef struct {\n  uint32_t                  jedecID;\n  char                     *name;\n  const SPI_Flash_Cfg_Type *cfg;\n} Flash_Info_t;\n\n/*@} end of group SF_CFG_EXT_Private_Types */\n\n/** @defgroup  SF_CFG_EXT_Private_Variables\n *  @{\n */\n\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Gd_Md_40D = {\n    .resetCreadCmd     = 0xff,\n    .resetCreadCmdSize = 3,\n    .mid               = 0x51,\n\n    .deBurstWrapCmd       = 0x77,\n    .deBurstWrapCmdDmyClk = 0x3,\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\n    .deBurstWrapData      = 0xF0,\n\n    /*reg*/\n    .writeEnableCmd     = 0x06,\n    .wrEnableIndex      = 0x00,\n    .wrEnableBit        = 0x01,\n    .wrEnableReadRegLen = 0x01,\n\n    .qeIndex       = 1,\n    .qeBit         = 0x01,\n    .qeWriteRegLen = 0x02,\n    .qeReadRegLen  = 0x1,\n\n    .busyIndex        = 0,\n    .busyBit          = 0x00,\n    .busyReadRegLen   = 0x1,\n    .releasePowerDown = 0xab,\n\n    .readRegCmd[0]  = 0x05,\n    .readRegCmd[1]  = 0x35,\n    .writeRegCmd[0] = 0x01,\n    .writeRegCmd[1] = 0x01,\n\n    .fastReadQioCmd = 0xeb,\n    .frQioDmyClk    = 16 / 8,\n    .cReadSupport   = 0,\n    .cReadMode      = 0xA0,\n\n    .burstWrapCmd       = 0x77,\n    .burstWrapCmdDmyClk = 0x3,\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\n    .burstWrapData      = 0x40,\n    /*erase*/\n    .chipEraseCmd   = 0xc7,\n    .sectorEraseCmd = 0x20,\n    .blk32EraseCmd  = 0x52,\n    .blk64EraseCmd  = 0xd8,\n    /*write*/\n    .pageProgramCmd  = 0x02,\n    .qpageProgramCmd = 0x32,\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\n\n    .ioMode    = 0x11,\n    .clkDelay  = 1,\n    .clkInvert = 0x3f,\n\n    .resetEnCmd          = 0x66,\n    .resetCmd            = 0x99,\n    .cRExit              = 0xff,\n    .wrEnableWriteRegLen = 0x00,\n\n    /*id*/\n    .jedecIdCmd          = 0x9f,\n    .jedecIdCmdDmyClk    = 0,\n    .qpiJedecIdCmd       = 0x9f,\n    .qpiJedecIdCmdDmyClk = 0x00,\n    .sectorSize          = 4,\n    .pageSize            = 256,\n\n    /*read*/\n    .fastReadCmd    = 0x0b,\n    .frDmyClk       = 8 / 8,\n    .qpiFastReadCmd = 0x0b,\n    .qpiFrDmyClk    = 8 / 8,\n    .fastReadDoCmd  = 0x3b,\n    .frDoDmyClk     = 8 / 8,\n    .fastReadDioCmd = 0xbb,\n    .frDioDmyClk    = 0,\n    .fastReadQoCmd  = 0x6b,\n    .frQoDmyClk     = 8 / 8,\n\n    .qpiFastReadQioCmd  = 0xeb,\n    .qpiFrQioDmyClk     = 16 / 8,\n    .qpiPageProgramCmd  = 0x02,\n    .writeVregEnableCmd = 0x50,\n\n    /* qpi mode */\n    .enterQpi = 0x38,\n    .exitQpi  = 0xff,\n\n    /*AC*/\n    .timeEsector = 300,\n    .timeE32k    = 1200,\n    .timeE64k    = 1200,\n    .timePagePgm = 5,\n    .timeCe      = 20 * 1000,\n    .pdDelay     = 20,\n    .qeData      = 0,\n};\n\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_MX_KH25 = {\n    .resetCreadCmd     = 0xff,\n    .resetCreadCmdSize = 3,\n    .mid               = 0xc2,\n\n    .deBurstWrapCmd       = 0x77,\n    .deBurstWrapCmdDmyClk = 0x3,\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\n    .deBurstWrapData      = 0xF0,\n\n    /*reg*/\n    .writeEnableCmd     = 0x06,\n    .wrEnableIndex      = 0x00,\n    .wrEnableBit        = 0x01,\n    .wrEnableReadRegLen = 0x01,\n\n    .qeIndex       = 1,\n    .qeBit         = 0x01,\n    .qeWriteRegLen = 0x01,\n    .qeReadRegLen  = 0x1,\n\n    .busyIndex        = 0,\n    .busyBit          = 0x00,\n    .busyReadRegLen   = 0x1,\n    .releasePowerDown = 0xab,\n\n    .readRegCmd[0]  = 0x05,\n    .readRegCmd[1]  = 0x00,\n    .writeRegCmd[0] = 0x01,\n    .writeRegCmd[1] = 0x00,\n\n    .fastReadQioCmd = 0xeb,\n    .frQioDmyClk    = 16 / 8,\n    .cReadSupport   = 0,\n    .cReadMode      = 0x20,\n\n    .burstWrapCmd       = 0x77,\n    .burstWrapCmdDmyClk = 0x3,\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\n    .burstWrapData      = 0x40,\n    /*erase*/\n    .chipEraseCmd   = 0xc7,\n    .sectorEraseCmd = 0x20,\n    .blk32EraseCmd  = 0x52,\n    .blk64EraseCmd  = 0xd8,\n    /*write*/\n    .pageProgramCmd  = 0x02,\n    .qpageProgramCmd = 0x32,\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\n\n    .ioMode    = 0x11,\n    .clkDelay  = 1,\n    .clkInvert = 0x01,\n\n    .resetEnCmd          = 0x66,\n    .resetCmd            = 0x99,\n    .cRExit              = 0xff,\n    .wrEnableWriteRegLen = 0x00,\n\n    /*id*/\n    .jedecIdCmd          = 0x9f,\n    .jedecIdCmdDmyClk    = 0,\n    .qpiJedecIdCmd       = 0x9f,\n    .qpiJedecIdCmdDmyClk = 0x00,\n    .sectorSize          = 4,\n    .pageSize            = 256,\n\n    /*read*/\n    .fastReadCmd    = 0x0b,\n    .frDmyClk       = 8 / 8,\n    .qpiFastReadCmd = 0x0b,\n    .qpiFrDmyClk    = 8 / 8,\n    .fastReadDoCmd  = 0x3b,\n    .frDoDmyClk     = 8 / 8,\n    .fastReadDioCmd = 0xbb,\n    .frDioDmyClk    = 0,\n    .fastReadQoCmd  = 0x6b,\n    .frQoDmyClk     = 8 / 8,\n\n    .qpiFastReadQioCmd  = 0xeb,\n    .qpiFrQioDmyClk     = 16 / 8,\n    .qpiPageProgramCmd  = 0x02,\n    .writeVregEnableCmd = 0x50,\n\n    /* qpi mode */\n    .enterQpi = 0x38,\n    .exitQpi  = 0xff,\n\n    /*AC*/\n    .timeEsector = 300,\n    .timeE32k    = 1200,\n    .timeE64k    = 1200,\n    .timePagePgm = 5,\n    .timeCe      = 33000,\n    .pdDelay     = 20,\n    .qeData      = 0,\n};\n\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_FM_Q80 = {\n    .resetCreadCmd     = 0xff,\n    .resetCreadCmdSize = 3,\n    .mid               = 0xc8,\n\n    .deBurstWrapCmd       = 0x77,\n    .deBurstWrapCmdDmyClk = 0x3,\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\n    .deBurstWrapData      = 0xF0,\n\n    /*reg*/\n    .writeEnableCmd     = 0x06,\n    .wrEnableIndex      = 0x00,\n    .wrEnableBit        = 0x01,\n    .wrEnableReadRegLen = 0x01,\n\n    .qeIndex       = 1,\n    .qeBit         = 0x01,\n    .qeWriteRegLen = 0x02,\n    .qeReadRegLen  = 0x1,\n\n    .busyIndex        = 0,\n    .busyBit          = 0x00,\n    .busyReadRegLen   = 0x1,\n    .releasePowerDown = 0xab,\n\n    .readRegCmd[0]  = 0x05,\n    .readRegCmd[1]  = 0x35,\n    .writeRegCmd[0] = 0x01,\n    .writeRegCmd[1] = 0x01,\n\n    .fastReadQioCmd = 0xeb,\n    .frQioDmyClk    = 16 / 8,\n    .cReadSupport   = 1,\n    .cReadMode      = 0xA0,\n\n    .burstWrapCmd       = 0x77,\n    .burstWrapCmdDmyClk = 0x3,\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\n    .burstWrapData      = 0x40,\n    /*erase*/\n    .chipEraseCmd   = 0xc7,\n    .sectorEraseCmd = 0x20,\n    .blk32EraseCmd  = 0x52,\n    .blk64EraseCmd  = 0xd8,\n    /*write*/\n    .pageProgramCmd  = 0x02,\n    .qpageProgramCmd = 0x32,\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\n\n    .ioMode    = SF_CTRL_QIO_MODE,\n    .clkDelay  = 1,\n    .clkInvert = 0x01,\n\n    .resetEnCmd          = 0x66,\n    .resetCmd            = 0x99,\n    .cRExit              = 0xff,\n    .wrEnableWriteRegLen = 0x00,\n\n    /*id*/\n    .jedecIdCmd          = 0x9f,\n    .jedecIdCmdDmyClk    = 0,\n    .qpiJedecIdCmd       = 0x9f,\n    .qpiJedecIdCmdDmyClk = 0x00,\n    .sectorSize          = 4,\n    .pageSize            = 256,\n\n    /*read*/\n    .fastReadCmd    = 0x0b,\n    .frDmyClk       = 8 / 8,\n    .qpiFastReadCmd = 0x0b,\n    .qpiFrDmyClk    = 8 / 8,\n    .fastReadDoCmd  = 0x3b,\n    .frDoDmyClk     = 8 / 8,\n    .fastReadDioCmd = 0xbb,\n    .frDioDmyClk    = 0,\n    .fastReadQoCmd  = 0x6b,\n    .frQoDmyClk     = 8 / 8,\n\n    .qpiFastReadQioCmd  = 0xeb,\n    .qpiFrQioDmyClk     = 16 / 8,\n    .qpiPageProgramCmd  = 0x02,\n    .writeVregEnableCmd = 0x50,\n\n    /* qpi mode */\n    .enterQpi = 0x38,\n    .exitQpi  = 0xff,\n\n    /*AC*/\n    .timeEsector = 300,\n    .timeE32k    = 1200,\n    .timeE64k    = 1200,\n    .timePagePgm = 5,\n    .timeCe      = 33000,\n    .pdDelay     = 20,\n    .qeData      = 0,\n};\n\nstatic const ATTR_TCM_CONST_SECTION SPI_Flash_Cfg_Type flashCfg_Winb_16JV = {\n    .resetCreadCmd     = 0xff,\n    .resetCreadCmdSize = 3,\n    .mid               = 0xef,\n\n    .deBurstWrapCmd       = 0x77,\n    .deBurstWrapCmdDmyClk = 0x3,\n    .deBurstWrapDataMode  = SF_CTRL_DATA_4_LINES,\n    .deBurstWrapData      = 0xF0,\n\n    /*reg*/\n    .writeEnableCmd     = 0x06,\n    .wrEnableIndex      = 0x00,\n    .wrEnableBit        = 0x01,\n    .wrEnableReadRegLen = 0x01,\n\n    .qeIndex       = 1,\n    .qeBit         = 0x01,\n    .qeWriteRegLen = 0x01,\n    .qeReadRegLen  = 0x1,\n\n    .busyIndex        = 0,\n    .busyBit          = 0x00,\n    .busyReadRegLen   = 0x1,\n    .releasePowerDown = 0xab,\n\n    .readRegCmd[0]  = 0x05,\n    .readRegCmd[1]  = 0x35,\n    .writeRegCmd[0] = 0x01,\n    .writeRegCmd[1] = 0x31,\n\n    .fastReadQioCmd = 0xeb,\n    .frQioDmyClk    = 16 / 8,\n    .cReadSupport   = 1,\n    .cReadMode      = 0x20,\n\n    .burstWrapCmd       = 0x77,\n    .burstWrapCmdDmyClk = 0x3,\n    .burstWrapDataMode  = SF_CTRL_DATA_4_LINES,\n    .burstWrapData      = 0x40,\n    /*erase*/\n    .chipEraseCmd   = 0xc7,\n    .sectorEraseCmd = 0x20,\n    .blk32EraseCmd  = 0x52,\n    .blk64EraseCmd  = 0xd8,\n    /*write*/\n    .pageProgramCmd  = 0x02,\n    .qpageProgramCmd = 0x32,\n    .qppAddrMode     = SF_CTRL_ADDR_1_LINE,\n\n    .ioMode    = SF_CTRL_QIO_MODE,\n    .clkDelay  = 1,\n    .clkInvert = 0x01,\n\n    .resetEnCmd          = 0x66,\n    .resetCmd            = 0x99,\n    .cRExit              = 0xff,\n    .wrEnableWriteRegLen = 0x00,\n\n    /*id*/\n    .jedecIdCmd          = 0x9f,\n    .jedecIdCmdDmyClk    = 0,\n    .qpiJedecIdCmd       = 0x9f,\n    .qpiJedecIdCmdDmyClk = 0x00,\n    .sectorSize          = 4,\n    .pageSize            = 256,\n\n    /*read*/\n    .fastReadCmd    = 0x0b,\n    .frDmyClk       = 8 / 8,\n    .qpiFastReadCmd = 0x0b,\n    .qpiFrDmyClk    = 8 / 8,\n    .fastReadDoCmd  = 0x3b,\n    .frDoDmyClk     = 8 / 8,\n    .fastReadDioCmd = 0xbb,\n    .frDioDmyClk    = 0,\n    .fastReadQoCmd  = 0x6b,\n    .frQoDmyClk     = 8 / 8,\n\n    .qpiFastReadQioCmd  = 0xeb,\n    .qpiFrQioDmyClk     = 16 / 8,\n    .qpiPageProgramCmd  = 0x02,\n    .writeVregEnableCmd = 0x50,\n\n    /* qpi mode */\n    .enterQpi = 0x38,\n    .exitQpi  = 0xff,\n\n    /*AC*/\n    .timeEsector = 400,\n    .timeE32k    = 1600,\n    .timeE64k    = 2000,\n    .timePagePgm = 5,\n    .timeCe      = 33000,\n    .pdDelay     = 3,\n    .qeData      = 0,\n};\n\nstatic const ATTR_TCM_CONST_SECTION Flash_Info_t flashInfos[] = {\n    {\n     .jedecID = 0x134051,\n     .name    = \"GD_MD04D_04_33\",\n     .cfg     = &flashCfg_Gd_Md_40D,\n     },\n    {\n     .jedecID = 0x1320c2,\n     .name    = \"MX_KH40_04_33\",\n     .cfg     = &flashCfg_MX_KH25,\n     },\n    {\n     .jedecID = 0x1420c2,\n     .name    = \"MX_KH80_08_33\",\n     .cfg     = &flashCfg_MX_KH25,\n     },\n    {\n     .jedecID = 0x1520c2,\n     .name    = \"MX_KH16_16_33\",\n     .cfg     = &flashCfg_MX_KH25,\n     },\n    {\n     .jedecID = 0x1440A1,\n     .name    = \"FM_25Q80_80_33\",\n     .cfg     = &flashCfg_FM_Q80,\n     },\n    {\n     .jedecID = 0x1570EF,\n     .name    = \"Winb_16JV_16_33\",\n     .cfg     = &flashCfg_Winb_16JV,\n     },\n    {\n     .jedecID = 0x1870EF,\n     .name    = \"Winb_128JV_128_33\",\n     .cfg     = &flashCfg_Winb_16JV,\n     },\n    {\n     .jedecID = 0x15605E,\n     .name    = \"ZB_VQ16_16_33\",\n     .cfg     = &flashCfg_Winb_16JV,\n     },\n    {\n     .jedecID = 0x144020,\n     .name    = \"XM_25QH80_80_33\",\n     .cfg     = &flashCfg_Winb_16JV,\n     },\n    {\n     .jedecID = 0x154020,\n     .name    = \"XM_25QH16_16_33\",\n     .cfg     = &flashCfg_Winb_16JV,\n     },\n    {\n     .jedecID = 0x164020,\n     .name    = \"XM_25QH32_32_33\",\n     .cfg     = &flashCfg_Winb_16JV,\n     },\n    {\n     .jedecID = 0x174020,\n     .name    = \"XM_25QH64_64_33\",\n     .cfg     = &flashCfg_Winb_16JV,\n     },\n    {\n     .jedecID = 0x13325E,\n     .name    = \"ZB_D40B_80_33\",\n     .cfg     = &flashCfg_MX_KH25,\n     },\n    {\n     .jedecID = 0x14325E,\n     .name    = \"ZB_D80B_80_33\",\n     .cfg     = &flashCfg_MX_KH25,\n     },\n    {\n     .jedecID = 0x15405E,\n     .name    = \"ZB_25Q16B_15_33\",\n     .cfg     = &flashCfg_Winb_16JV,\n     },\n    {\n     .jedecID = 0x16405E,\n     .name    = \"ZB_25Q32B_16_33\",\n     .cfg     = &flashCfg_Winb_16JV,\n     },\n    {\n     .jedecID = 0x1560EB,\n     .name    = \"TH_25Q16HB_16_33\",\n     .cfg     = &flashCfg_FM_Q80,\n     },\n    {\n     .jedecID = 0x15345E,\n     .name    = \"ZB_25Q16A_15_33\",\n     .cfg     = &flashCfg_Winb_16JV,\n     },\n};\n\n/*@} end of group SF_CFG_EXT_Private_Variables */\n\n/** @defgroup  SF_CFG_EXT_Global_Variables\n *  @{\n */\n\n/*@} end of group SF_CFG_EXT_Global_Variables */\n\n/** @defgroup  SF_CFG_EXT_Private_Fun_Declaration\n *  @{\n */\n\n/*@} end of group SF_CFG_EXT_Private_Fun_Declaration */\n\n/** @defgroup  SF_CFG_EXT_Public_Functions\n *  @{\n */\n\n/****************************************************************************/ /**\n                                                                                * @brief  Init internal flash GPIO\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return None\n                                                                                *\n                                                                                *******************************************************************************/\nvoid ATTR_TCM_SECTION SF_Cfg_Init_Internal_Flash_Gpio(void) {\n  GLB_GPIO_Cfg_Type gpioCfg = {\n      .gpioPin  = GLB_GPIO_PIN_0,\n      .gpioFun  = GPIO_FUN_GPIO,\n      .gpioMode = GPIO_MODE_INPUT,\n      .pullType = GPIO_PULL_NONE,\n      .drive    = 0,\n      .smtCtrl  = 1,\n  };\n\n  /* Turn on Flash pad, GPIO23 - GPIO28 */\n  for (uint32_t pin = 23; pin < 29; pin++) {\n    gpioCfg.gpioPin = pin;\n\n    if (pin == 25) {\n      gpioCfg.pullType = GPIO_PULL_DOWN;\n    } else {\n      gpioCfg.pullType = GPIO_PULL_NONE;\n    }\n\n    GLB_GPIO_Init(&gpioCfg);\n  }\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Get flash config according to flash ID\n                                                                                *\n                                                                                * @param  flashID: Flash ID\n                                                                                * @param  pFlashCfg: Flash config pointer\n                                                                                *\n                                                                                * @return SUCCESS or ERROR\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type ATTR_TCM_SECTION SF_Cfg_Get_Flash_Cfg_Need_Lock_Ext(uint32_t flashID, SPI_Flash_Cfg_Type *pFlashCfg) {\n  uint32_t i;\n  uint8_t  buf[sizeof(SPI_Flash_Cfg_Type) + 8];\n  uint32_t crc, *pCrc;\n  char     flashCfgMagic[] = \"FCFG\";\n\n  if (flashID == 0) {\n    XIP_SFlash_Read_Via_Cache_Need_Lock(8 + BL702_FLASH_XIP_BASE, buf, sizeof(SPI_Flash_Cfg_Type) + 8);\n\n    if (BL702_MemCmp(buf, flashCfgMagic, 4) == 0) {\n      crc  = BFLB_Soft_CRC32((uint8_t *)buf + 4, sizeof(SPI_Flash_Cfg_Type));\n      pCrc = (uint32_t *)(buf + 4 + sizeof(SPI_Flash_Cfg_Type));\n\n      if (*pCrc == crc) {\n        BL702_MemCpy_Fast(pFlashCfg, (uint8_t *)buf + 4, sizeof(SPI_Flash_Cfg_Type));\n        return SUCCESS;\n      }\n    }\n  } else {\n    if (SF_Cfg_Get_Flash_Cfg_Need_Lock(flashID, pFlashCfg) == SUCCESS) {\n      /* 0x134051 flash cfg is wrong in rom, find again */\n      if ((flashID & 0xFFFFFF) != 0x134051) {\n        return SUCCESS;\n      }\n    }\n\n    for (i = 0; i < sizeof(flashInfos) / sizeof(flashInfos[0]); i++) {\n      if (flashInfos[i].jedecID == flashID) {\n        BL702_MemCpy_Fast(pFlashCfg, flashInfos[i].cfg, sizeof(SPI_Flash_Cfg_Type));\n        return SUCCESS;\n      }\n    }\n  }\n\n  return ERROR;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Identify one flash\n                                                                                *\n                                                                                * @param  callFromFlash: code run at flash or ram\n                                                                                * @param  autoScan: Auto scan all GPIO pin\n                                                                                * @param  flashPinCfg: Specify flash GPIO config, not auto scan\n                                                                                * @param  restoreDefault: Wether restore default flash GPIO config\n                                                                                * @param  pFlashCfg: Flash config pointer\n                                                                                *\n                                                                                * @return Flash ID\n                                                                                *\n                                                                                *******************************************************************************/\nuint32_t ATTR_TCM_SECTION SF_Cfg_Flash_Identify_Ext(uint8_t callFromFlash, uint32_t autoScan, uint32_t flashPinCfg, uint8_t restoreDefault, SPI_Flash_Cfg_Type *pFlashCfg) {\n  uint32_t jdecId = 0;\n  uint32_t i      = 0;\n  uint32_t ret    = 0;\n\n  ret = SF_Cfg_Flash_Identify(callFromFlash, autoScan, flashPinCfg, restoreDefault, pFlashCfg);\n\n  if ((ret & BFLB_FLASH_ID_VALID_FLAG) != 0) {\n    /* 0x134051 flash cfg is wrong in rom, find again */\n    if ((ret & 0xFFFFFF) != 0x134051) {\n      return ret;\n    }\n  }\n\n  jdecId = (ret & 0xffffff);\n\n  for (i = 0; i < sizeof(flashInfos) / sizeof(flashInfos[0]); i++) {\n    if (flashInfos[i].jedecID == jdecId) {\n      BL702_MemCpy_Fast(pFlashCfg, flashInfos[i].cfg, sizeof(SPI_Flash_Cfg_Type));\n      break;\n    }\n  }\n\n  if (i == sizeof(flashInfos) / sizeof(flashInfos[0])) {\n    return jdecId;\n  } else {\n    return (jdecId | BFLB_FLASH_ID_VALID_FLAG);\n  }\n}\n\n/*@} end of group SF_CFG_EXT_Public_Functions */\n\n/*@} end of group SF_CFG_EXT */\n\n/*@} end of group BL702_Peripheral_Driver */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_sf_ctrl.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_sf_ctrl.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_sf_ctrl.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SF_CTRL\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SF_CTRL_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group SF_CTRL_Private_Macros */\r\n\r\n/** @defgroup  SF_CTRL_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group SF_CTRL_Private_Types */\r\n\r\n/** @defgroup  SF_CTRL_Private_Variables\r\n *  @{\r\n */\r\n#define SF_CTRL_BUSY_STATE_TIMEOUT      (5 * 160 * 1000)\r\n#define SF_Ctrl_Get_AES_Region(addr, r) (addr + SF_CTRL_AES_REGION_OFFSET + (r) * 0x100)\r\n\r\n/*@} end of group SF_CTRL_Private_Variables */\r\n\r\n/** @defgroup  SF_CTRL_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group SF_CTRL_Global_Variables */\r\n\r\n/** @defgroup  SF_CTRL_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group SF_CTRL_Private_Fun_Declaration */\r\n\r\n/** @defgroup  SF_CTRL_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group SF_CTRL_Private_Functions */\r\n\r\n/** @defgroup  SF_CTRL_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable serail flash controller\r\n                                                                                *\r\n                                                                                * @param  cfg: serial flash controller config\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_Enable(const SF_Ctrl_Cfg_Type *cfg) {\r\n  uint32_t tmpVal  = 0;\r\n  uint32_t timeOut = 0;\r\n\r\n  if (cfg == NULL) {\r\n    return;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SF_CTRL_OWNER_TYPE(cfg->owner));\r\n\r\n  timeOut = SF_CTRL_BUSY_STATE_TIMEOUT;\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n    timeOut--;\r\n\r\n    if (timeOut == 0) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_0);\r\n\r\n  if (cfg->clkDelay > 0) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_IF_READ_DLY_EN);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_READ_DLY_N, cfg->clkDelay - 1);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_IF_READ_DLY_EN);\r\n  }\r\n\r\n  /* Serail out inverted, so sf ctrl send on negative edge */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_CLK_OUT_INV_SEL, cfg->clkInvert);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_CLK_SF_RX_INV_SEL, cfg->rxClkInvert);\r\n\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_0, tmpVal);\r\n\r\n  /* Set do di and oe delay */\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IO_DLY_1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IO_0_DO_DLY_SEL, cfg->doDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IO_0_DI_DLY_SEL, cfg->diDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IO_0_OE_DLY_SEL, cfg->oeDelay);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IO_DLY_1, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IO_DLY_2);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IO_1_DO_DLY_SEL, cfg->doDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IO_1_DI_DLY_SEL, cfg->diDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IO_1_OE_DLY_SEL, cfg->oeDelay);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IO_DLY_2, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IO_DLY_3);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IO_2_DO_DLY_SEL, cfg->doDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IO_2_DI_DLY_SEL, cfg->diDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IO_2_OE_DLY_SEL, cfg->oeDelay);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IO_DLY_3, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IO_DLY_4);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IO_3_DO_DLY_SEL, cfg->doDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IO_3_DI_DLY_SEL, cfg->diDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IO_3_OE_DLY_SEL, cfg->oeDelay);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IO_DLY_4, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF2_IF_IO_DLY_1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF2_IO_0_DO_DLY_SEL, cfg->doDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF2_IO_0_DI_DLY_SEL, cfg->diDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF2_IO_0_OE_DLY_SEL, cfg->oeDelay);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF2_IF_IO_DLY_1, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF2_IF_IO_DLY_2);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF2_IO_1_DO_DLY_SEL, cfg->doDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF2_IO_1_DI_DLY_SEL, cfg->diDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF2_IO_1_OE_DLY_SEL, cfg->oeDelay);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF2_IF_IO_DLY_2, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF2_IF_IO_DLY_3);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF2_IO_2_DO_DLY_SEL, cfg->doDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF2_IO_2_DI_DLY_SEL, cfg->diDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF2_IO_2_OE_DLY_SEL, cfg->oeDelay);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF2_IF_IO_DLY_3, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF2_IF_IO_DLY_4);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF2_IO_3_DO_DLY_SEL, cfg->doDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF2_IO_3_DI_DLY_SEL, cfg->diDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF2_IO_3_OE_DLY_SEL, cfg->oeDelay);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF2_IF_IO_DLY_4, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF3_IF_IO_DLY_1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF3_IO_0_DO_DLY_SEL, cfg->doDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF3_IO_0_DI_DLY_SEL, cfg->diDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF3_IO_0_OE_DLY_SEL, cfg->oeDelay);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF3_IF_IO_DLY_1, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF3_IF_IO_DLY_2);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF3_IO_1_DO_DLY_SEL, cfg->doDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF3_IO_1_DI_DLY_SEL, cfg->diDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF3_IO_1_OE_DLY_SEL, cfg->oeDelay);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF3_IF_IO_DLY_2, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF3_IF_IO_DLY_3);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF3_IO_2_DO_DLY_SEL, cfg->doDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF3_IO_2_DI_DLY_SEL, cfg->diDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF3_IO_2_OE_DLY_SEL, cfg->oeDelay);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF3_IF_IO_DLY_3, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF3_IF_IO_DLY_4);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF3_IO_3_DO_DLY_SEL, cfg->doDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF3_IO_3_DI_DLY_SEL, cfg->diDelay);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF3_IO_3_OE_DLY_SEL, cfg->oeDelay);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF3_IF_IO_DLY_4, tmpVal);\r\n\r\n  /* Enable AHB access sram buffer and enable sf interface */\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_1);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_AHB2SRAM_EN);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_IF_EN);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_1, tmpVal);\r\n\r\n  SF_Ctrl_Set_Owner(cfg->owner);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable serail psram controller\r\n                                                                                *\r\n                                                                                * @param  sfCtrlPsramCfg: serial psram controller config\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n// #ifndef BFLB_USE_ROM_DRIVER\r\n//__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_Psram_Init(SF_Ctrl_Psram_Cfg *sfCtrlPsramCfg) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  SF_Ctrl_Select_Pad(sfCtrlPsramCfg->padSel);\r\n  SF_Ctrl_Select_Bank(sfCtrlPsramCfg->bankSel);\r\n\r\n  /* Select psram clock delay */\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IAHB_12);\r\n\r\n  if (sfCtrlPsramCfg->psramRxClkInvertSrc) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF2_CLK_SF_RX_INV_SRC);\r\n\r\n    if (sfCtrlPsramCfg->psramRxClkInvertSel) {\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF2_CLK_SF_RX_INV_SEL);\r\n    } else {\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF2_CLK_SF_RX_INV_SEL);\r\n    }\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF2_CLK_SF_RX_INV_SRC);\r\n  }\r\n\r\n  if (sfCtrlPsramCfg->psramDelaySrc) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF2_IF_READ_DLY_SRC);\r\n\r\n    if (sfCtrlPsramCfg->psramClkDelay > 0) {\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF2_IF_READ_DLY_EN);\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF2_IF_READ_DLY_N, sfCtrlPsramCfg->psramClkDelay - 1);\r\n    } else {\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF2_IF_READ_DLY_EN);\r\n    }\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF2_IF_READ_DLY_SRC);\r\n  }\r\n\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IAHB_12, tmpVal);\r\n\r\n  /* Enable AHB access sram buffer and enable sf interface */\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_1);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_AHB2SRAM_EN);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_IF_EN);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_1, tmpVal);\r\n\r\n  SF_Ctrl_Set_Owner(sfCtrlPsramCfg->owner);\r\n}\r\n// #endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get flash controller clock delay value\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return Clock delay value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nuint8_t ATTR_TCM_SECTION SF_Ctrl_Get_Clock_Delay(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_0);\r\n\r\n  if (BL_GET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_READ_DLY_EN) == 0) {\r\n    return 0;\r\n  } else {\r\n    return BL_GET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_READ_DLY_N) + 1;\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set flash controller clock delay value\r\n                                                                                *\r\n                                                                                * @param  delay: Clock delay value\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_Set_Clock_Delay(uint8_t delay) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_0);\r\n\r\n  if (delay > 0) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_IF_READ_DLY_EN);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_READ_DLY_N, delay - 1);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_IF_READ_DLY_EN);\r\n  }\r\n\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_0, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SF Ctrl set cmds config\r\n                                                                                *\r\n                                                                                * @param  cmdsCfg: SF Ctrl cmds config\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_Cmds_Set(SF_Ctrl_Cmds_Cfg *cmdsCfg) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SF_CTRL_WRAP_LEN_TYPE(cmdsCfg->wrapLen));\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_3);\r\n\r\n  if (cmdsCfg->cmdsEn) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_CMDS_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_CMDS_EN);\r\n  }\r\n\r\n  if (cmdsCfg->burstToggleEn) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_CMDS_BT_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_CMDS_BT_EN);\r\n  }\r\n\r\n  if (cmdsCfg->wrapModeEn) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_CMDS_WRAP_MODE);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_CMDS_WRAP_MODE);\r\n  }\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_CMDS_WRAP_LEN, cmdsCfg->wrapLen);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_3, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SF Ctrl pad select\r\n                                                                                *\r\n                                                                                * @param  sel: pad select type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_Select_Pad(SF_Ctrl_Pad_Select sel) {\r\n  /* TODO: sf_if_bk_swap */\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SF_CTRL_PAD_SELECT(sel));\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_2);\r\n\r\n  if (sel <= SF_CTRL_PAD_SEL_SF3) {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_IF_BK2_EN);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_PAD_SEL, sel);\r\n  } else if (sel >= SF_CTRL_PAD_SEL_DUAL_BANK_SF1_SF2 && sel <= SF_CTRL_PAD_SEL_DUAL_BANK_SF3_SF1) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_IF_BK2_EN);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_IF_BK2_MODE);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_PAD_SEL, sel - SF_CTRL_PAD_SEL_DUAL_BANK_SF1_SF2);\r\n  } else if (sel == SF_CTRL_PAD_SEL_DUAL_CS_SF2) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_IF_BK2_EN);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_IF_BK2_MODE);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_PAD_SEL, 1);\r\n  } else if (sel == SF_CTRL_PAD_SEL_DUAL_CS_SF3) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_IF_BK2_EN);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_IF_BK2_MODE);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_PAD_SEL, 2);\r\n  }\r\n\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_2, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SF Ctrl bank select\r\n                                                                                *\r\n                                                                                * @param  sel: bank select type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_Select_Bank(SF_Ctrl_Select sel) {\r\n  /* TODO: sf_if_bk_swap */\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SF_CTRL_SELECT(sel));\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_2);\r\n\r\n  if (sel == SF_CTRL_SEL_FLASH) {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_IF_0_BK_SEL);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_IF_0_BK_SEL);\r\n  }\r\n\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_2, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set flash controller owner:I/D AHB or system AHB\r\n                                                                                *\r\n                                                                                * @param  owner: owner type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_Set_Owner(SF_Ctrl_Owner_Type owner) {\r\n  uint32_t tmpVal  = 0;\r\n  uint32_t timeOut = 0;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SF_CTRL_OWNER_TYPE(owner));\r\n\r\n  timeOut = SF_CTRL_BUSY_STATE_TIMEOUT;\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n    timeOut--;\r\n\r\n    if (timeOut == 0) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_1);\r\n\r\n  /* Set owner */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_FN_SEL, owner);\r\n\r\n  /* Set iahb to flash interface */\r\n  if (owner == SF_CTRL_OWNER_IAHB) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_AHB2SIF_EN);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_AHB2SIF_EN);\r\n  }\r\n\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_1, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable flash controller\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_1);\r\n\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_IF_EN);\r\n\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_1, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable flash controller AES with big indian\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_AES_Enable_BE(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_0);\r\n\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_AES_KEY_ENDIAN);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_AES_IV_ENDIAN);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_AES_DOUT_ENDIAN);\r\n\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_0, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable flash controller AES with little indian\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_AES_Enable_LE(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_0);\r\n\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_AES_KEY_ENDIAN);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_AES_IV_ENDIAN);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_AES_DOUT_ENDIAN);\r\n\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_0, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Serial flash controller set AES region\r\n                                                                                *\r\n                                                                                * @param  region: region number\r\n                                                                                * @param  enable: enable or not\r\n                                                                                * @param  hwKey: hardware key or software key\r\n                                                                                * @param  startAddr: region start address\r\n                                                                                * @param  endAddr: region end address\r\n                                                                                * @param  locked: lock this region or not\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_AES_Set_Region(uint8_t region, uint8_t enable, uint8_t hwKey, uint32_t startAddr, uint32_t endAddr, uint8_t locked) {\r\n  /* Do flash key eco*/\r\n  uint32_t regionRegBase = SF_Ctrl_Get_AES_Region(SF_CTRL_BASE, region);\r\n  uint32_t tmpVal;\r\n\r\n  if (!hwKey) {\r\n    regionRegBase = SF_Ctrl_Get_AES_Region(SF_CTRL_BASE, region);\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(regionRegBase, SF_CTRL_SF_AES_CFG);\r\n\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_AES_REGION_HW_KEY_EN, hwKey);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_AES_REGION_START, startAddr / 1024);\r\n  /* sf_aes_end =1 means 1,11,1111,1111 */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_AES_REGION_END, endAddr / 1024);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_AES_REGION_EN, enable);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_AES_REGION_LOCK, locked);\r\n\r\n  BL_WR_REG(regionRegBase, SF_CTRL_SF_AES_CFG, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Serial flash controller set AES key\r\n                                                                                *\r\n                                                                                * @param  region: region number\r\n                                                                                * @param  key: key data pointer\r\n                                                                                * @param  keyType: flash controller AES key type:128 bits,192 bits or 256 bits\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_AES_Set_Key(uint8_t region, uint8_t *key, SF_Ctrl_AES_Key_Type keyType) {\r\n  /* Do flash key eco*/\r\n  uint32_t regionRegBase = SF_Ctrl_Get_AES_Region(SF_CTRL_BASE, region);\r\n  uint32_t tmpVal, i = 0;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SF_CTRL_AES_KEY_TYPE(keyType));\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_AES);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_AES_MODE, keyType);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_AES, tmpVal);\r\n\r\n  if (NULL != key) {\r\n    if (keyType == SF_CTRL_AES_128BITS) {\r\n      i = 4;\r\n      /*\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_7,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_6,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_5,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_4,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      */\r\n    } else if (keyType == SF_CTRL_AES_256BITS) {\r\n      i = 8;\r\n      /*\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_7,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_6,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_5,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_4,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_3,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_2,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_1,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_0,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      */\r\n    } else if (keyType == SF_CTRL_AES_192BITS) {\r\n      i = 6;\r\n      /*\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_7,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_6,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_5,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_4,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_3,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_2,__REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key+=4;\r\n      */\r\n    }\r\n\r\n    tmpVal = SF_CTRL_SF_AES_KEY_7_OFFSET;\r\n\r\n    while (i--) {\r\n      BL_WR_WORD(regionRegBase + tmpVal, __REV(BL_RDWD_FRM_BYTEP(key)));\r\n      key += 4;\r\n      tmpVal -= 4;\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Serial flash controller set AES key with big endian\r\n                                                                                *\r\n                                                                                * @param  region: region number\r\n                                                                                * @param  key: key data pointer\r\n                                                                                * @param  keyType: flash controller AES key type:128 bits,192 bits or 256 bits\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_AES_Set_Key_BE(uint8_t region, uint8_t *key, SF_Ctrl_AES_Key_Type keyType) {\r\n  /* Do flash key eco*/\r\n  uint32_t regionRegBase = SF_Ctrl_Get_AES_Region(SF_CTRL_BASE, region);\r\n  uint32_t tmpVal, i = 0;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SF_CTRL_AES_KEY_TYPE(keyType));\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_AES);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_AES_MODE, keyType);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_AES, tmpVal);\r\n\r\n  if (NULL != key) {\r\n    if (keyType == SF_CTRL_AES_128BITS) {\r\n      i = 4;\r\n      /*\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_0,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_1,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_2,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_3,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      */\r\n    } else if (keyType == SF_CTRL_AES_256BITS) {\r\n      i = 8;\r\n      /*\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_0,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_1,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_2,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_3,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_4,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_5,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_6,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_7,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      */\r\n    } else if (keyType == SF_CTRL_AES_192BITS) {\r\n      i = 6;\r\n      /*\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_0,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_1,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_2,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_3,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_4,BL_RDWD_FRM_BYTEP(key));\r\n      key+=4;\r\n      BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_KEY_5,BL_RDWD_FRM_BYTEP(key));\r\n      */\r\n    }\r\n\r\n    tmpVal = SF_CTRL_SF_AES_KEY_0_OFFSET;\r\n\r\n    while (i--) {\r\n      BL_WR_WORD(regionRegBase + tmpVal, BL_RDWD_FRM_BYTEP(key));\r\n      key += 4;\r\n      tmpVal += 4;\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Serial flash controller set AES iv\r\n                                                                                *\r\n                                                                                * @param  region: region number\r\n                                                                                * @param  iv: iv data pointer\r\n                                                                                * @param  addrOffset: flash address offset\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_AES_Set_IV(uint8_t region, uint8_t *iv, uint32_t addrOffset) {\r\n  /* Do flash key eco*/\r\n  uint32_t regionRegBase = SF_Ctrl_Get_AES_Region(SF_CTRL_BASE, region);\r\n  uint32_t tmpVal, i = 3;\r\n\r\n  if (iv != NULL) {\r\n    tmpVal = SF_CTRL_SF_AES_IV_W3_OFFSET;\r\n\r\n    while (i--) {\r\n      BL_WR_WORD(regionRegBase + tmpVal, __REV(BL_RDWD_FRM_BYTEP(iv)));\r\n      iv += 4;\r\n      tmpVal -= 4;\r\n    }\r\n\r\n    /*\r\n    BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_IV_W3,__REV(BL_RDWD_FRM_BYTEP(iv)));\r\n    iv+=4;\r\n    BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_IV_W2,__REV(BL_RDWD_FRM_BYTEP(iv)));\r\n    iv+=4;\r\n    BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_IV_W1,__REV(BL_RDWD_FRM_BYTEP(iv)));\r\n    iv+=4;\r\n    */\r\n    BL_WR_REG(regionRegBase, SF_CTRL_SF_AES_IV_W0, addrOffset);\r\n    iv += 4;\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Serial flash controller set AES iv with big endian\r\n                                                                                *\r\n                                                                                * @param  region: region number\r\n                                                                                * @param  iv: iv data pointer\r\n                                                                                * @param  addrOffset: flash address offset\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_AES_Set_IV_BE(uint8_t region, uint8_t *iv, uint32_t addrOffset) {\r\n  /* Do flash key eco*/\r\n  uint32_t regionRegBase = SF_Ctrl_Get_AES_Region(SF_CTRL_BASE, region);\r\n  uint32_t tmpVal, i = 3;\r\n\r\n  if (iv != NULL) {\r\n    tmpVal = SF_CTRL_SF_AES_IV_W0_OFFSET;\r\n\r\n    while (i--) {\r\n      BL_WR_WORD(regionRegBase + tmpVal, BL_RDWD_FRM_BYTEP(iv));\r\n      iv += 4;\r\n      tmpVal += 4;\r\n    }\r\n\r\n    /*\r\n    BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_IV_W0,BL_RDWD_FRM_BYTEP(iv));\r\n    iv+=4;\r\n    BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_IV_W1,BL_RDWD_FRM_BYTEP(iv));\r\n    iv+=4;\r\n    BL_WR_REG(regionRegBase,SF_CTRL_SF_AES_IV_W2,BL_RDWD_FRM_BYTEP(iv));\r\n    iv+=4;\r\n    */\r\n    BL_WR_REG(regionRegBase, SF_CTRL_SF_AES_IV_W3, __REV(addrOffset));\r\n    iv += 4;\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable serial flash controller AES\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_AES_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_AES);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_AES_EN);\r\n\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_AES, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable serial flash controller AES\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_AES_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_AES);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_AES_EN);\r\n\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_AES, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Check is serial flash controller AES enable\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return Wether AES is enable\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nuint8_t ATTR_TCM_SECTION SF_Ctrl_Is_AES_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_AES);\r\n  return BL_IS_REG_BIT_SET(tmpVal, SF_CTRL_SF_AES_EN);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set flash image offset\r\n                                                                                *\r\n                                                                                * @param  addrOffset: Address offset value\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_Set_Flash_Image_Offset(uint32_t addrOffset) { BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_ID0_OFFSET, addrOffset); }\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get flash image offset\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return :Address offset value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nuint32_t ATTR_TCM_SECTION SF_Ctrl_Get_Flash_Image_Offset(void) { return BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_ID0_OFFSET); }\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SF controller send one command\r\n                                                                                *\r\n                                                                                * @param  sahbType: Serial flash controller clock sahb sram select\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_Select_Clock(SF_Ctrl_Sahb_Type sahbType) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_0);\r\n\r\n  if (sahbType == SF_CTRL_SAHB_CLOCK) {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_CLK_SAHB_SRAM_SEL);\r\n  } else if (sahbType == SF_CTRL_FLASH_CLOCK) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_CLK_SAHB_SRAM_SEL);\r\n  }\r\n\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_0, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SF controller send one command\r\n                                                                                *\r\n                                                                                * @param  cfg: Serial flash controller command configuration pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_SendCmd(SF_Ctrl_Cmd_Cfg_Type *cfg) {\r\n  uint32_t tmpVal  = 0;\r\n  uint32_t timeOut = 0;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SF_CTRL_CMD_MODE_TYPE(cfg->cmdMode));\r\n  CHECK_PARAM(IS_SF_CTRL_ADDR_MODE_TYPE(cfg->addrMode));\r\n  CHECK_PARAM(IS_SF_CTRL_DMY_MODE_TYPE(cfg->dummyMode));\r\n  CHECK_PARAM(IS_SF_CTRL_DATA_MODE_TYPE(cfg->dataMode));\r\n\r\n  timeOut = SF_CTRL_BUSY_STATE_TIMEOUT;\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n    timeOut--;\r\n\r\n    if (timeOut == 0) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_1);\r\n\r\n  if (BL_GET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_FN_SEL) != SF_CTRL_OWNER_SAHB) {\r\n    return;\r\n  }\r\n\r\n  /* Clear trigger */\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_SAHB_0);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_IF_0_TRIG);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_SAHB_0, tmpVal);\r\n\r\n  /* Copy command buffer */\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_SAHB_1, cfg->cmdBuf[0]);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_SAHB_2, cfg->cmdBuf[1]);\r\n\r\n  /* Configure SPI and IO mode*/\r\n  if (SF_CTRL_CMD_1_LINE == cfg->cmdMode) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_0_QPI_MODE_EN, SF_CTRL_SPI_MODE);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_0_QPI_MODE_EN, SF_CTRL_QPI_MODE);\r\n  }\r\n\r\n  if (SF_CTRL_ADDR_1_LINE == cfg->addrMode) {\r\n    if (SF_CTRL_DATA_1_LINE == cfg->dataMode) {\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_0_SPI_MODE, SF_CTRL_NIO_MODE);\r\n    } else if (SF_CTRL_DATA_2_LINES == cfg->dataMode) {\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_0_SPI_MODE, SF_CTRL_DO_MODE);\r\n    } else if (SF_CTRL_DATA_4_LINES == cfg->dataMode) {\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_0_SPI_MODE, SF_CTRL_QO_MODE);\r\n    }\r\n  } else if (SF_CTRL_ADDR_2_LINES == cfg->addrMode) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_0_SPI_MODE, SF_CTRL_DIO_MODE);\r\n  } else if (SF_CTRL_ADDR_4_LINES == cfg->addrMode) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_0_SPI_MODE, SF_CTRL_QIO_MODE);\r\n  }\r\n\r\n  /* Configure cmd */\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_IF_0_CMD_EN);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_0_CMD_BYTE, 0);\r\n\r\n  /* Configure address */\r\n  if (cfg->addrSize != 0) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_IF_0_ADR_EN);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_0_ADR_BYTE, cfg->addrSize - 1);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_IF_0_ADR_EN);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_0_ADR_BYTE, 0);\r\n  }\r\n\r\n  /* Configure dummy */\r\n  if (cfg->dummyClks != 0) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_IF_0_DMY_EN);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_0_DMY_BYTE, cfg->dummyClks - 1);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_IF_0_DMY_EN);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_0_DMY_BYTE, 0);\r\n  }\r\n\r\n  /* Configure data */\r\n  if (cfg->nbData != 0) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_IF_0_DAT_EN);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_0_DAT_BYTE, cfg->nbData - 1);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SF_CTRL_SF_IF_0_DAT_EN);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_0_DAT_BYTE, 0);\r\n  }\r\n\r\n  /* Set read write flag */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_0_DAT_RW, cfg->rwFlag);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_SAHB_0, tmpVal);\r\n\r\n  // switch sf_clk_sahb_sram_sel = 1\r\n  SF_Ctrl_Select_Clock(SF_CTRL_FLASH_CLOCK);\r\n  /* Trigger */\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SF_CTRL_SF_IF_0_TRIG);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_SAHB_0, tmpVal);\r\n\r\n  timeOut = SF_CTRL_BUSY_STATE_TIMEOUT;\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n    timeOut--;\r\n\r\n    if (timeOut == 0) {\r\n      SF_Ctrl_Select_Clock(SF_CTRL_SAHB_CLOCK);\r\n      return;\r\n    }\r\n  }\r\n\r\n  // switch sf_clk_sahb_sram_sel = 0\r\n  SF_Ctrl_Select_Clock(SF_CTRL_SAHB_CLOCK);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Config SF controller for flash I/D cache read\r\n                                                                                *\r\n                                                                                * @param  cfg: Serial flash controller command configuration pointer\r\n                                                                                * @param  cmdValid: command valid or not, for continous read, cache may need no command\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_Flash_Read_Icache_Set(SF_Ctrl_Cmd_Cfg_Type *cfg, uint8_t cmdValid) {\r\n  uint32_t tmpVal  = 0;\r\n  uint32_t timeOut = 0;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SF_CTRL_CMD_MODE_TYPE(cfg->cmdMode));\r\n  CHECK_PARAM(IS_SF_CTRL_ADDR_MODE_TYPE(cfg->addrMode));\r\n  CHECK_PARAM(IS_SF_CTRL_DMY_MODE_TYPE(cfg->dummyMode));\r\n  CHECK_PARAM(IS_SF_CTRL_DATA_MODE_TYPE(cfg->dataMode));\r\n\r\n  timeOut = SF_CTRL_BUSY_STATE_TIMEOUT;\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n    timeOut--;\r\n\r\n    if (timeOut == 0) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_1);\r\n\r\n  if (BL_GET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_FN_SEL) != SF_CTRL_OWNER_IAHB) {\r\n    return;\r\n  }\r\n\r\n  /* Copy command buffer */\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IAHB_1, cfg->cmdBuf[0]);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IAHB_2, cfg->cmdBuf[1]);\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IAHB_0);\r\n\r\n  /* Configure SPI and IO mode*/\r\n  if (SF_CTRL_CMD_1_LINE == cfg->cmdMode) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_QPI_MODE_EN, SF_CTRL_SPI_MODE);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_QPI_MODE_EN, SF_CTRL_QPI_MODE);\r\n  }\r\n\r\n  if (SF_CTRL_ADDR_1_LINE == cfg->addrMode) {\r\n    if (SF_CTRL_DATA_1_LINE == cfg->dataMode) {\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_SPI_MODE, SF_CTRL_NIO_MODE);\r\n    } else if (SF_CTRL_DATA_2_LINES == cfg->dataMode) {\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_SPI_MODE, SF_CTRL_DO_MODE);\r\n    } else if (SF_CTRL_DATA_4_LINES == cfg->dataMode) {\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_SPI_MODE, SF_CTRL_QO_MODE);\r\n    }\r\n  } else if (SF_CTRL_ADDR_2_LINES == cfg->addrMode) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_SPI_MODE, SF_CTRL_DIO_MODE);\r\n  } else if (SF_CTRL_ADDR_4_LINES == cfg->addrMode) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_SPI_MODE, SF_CTRL_QIO_MODE);\r\n  }\r\n\r\n  if (cmdValid) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_CMD_EN, 1);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_CMD_BYTE, 0);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_CMD_EN, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_CMD_BYTE, 0);\r\n  }\r\n\r\n  /* Configure address */\r\n  if (cfg->addrSize != 0) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_ADR_EN, 1);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_ADR_BYTE, cfg->addrSize - 1);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_ADR_EN, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_ADR_BYTE, 0);\r\n  }\r\n\r\n  /* configure dummy */\r\n  if (cfg->dummyClks != 0) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_DMY_EN, 1);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_DMY_BYTE, cfg->dummyClks - 1);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_DMY_EN, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_DMY_BYTE, 0);\r\n  }\r\n\r\n  /* Configure data */\r\n  if (cfg->nbData != 0) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_DAT_EN, 1);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_DAT_EN, 0);\r\n  }\r\n\r\n  /* Set read write flag */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_DAT_RW, cfg->rwFlag);\r\n\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IAHB_0, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Config psram controller for psram I/D cache write\r\n                                                                                *\r\n                                                                                * @param  cfg: Serial flash controller command configuration pointer\r\n                                                                                * @param  cmdValid: command valid or not, cache may need no command\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_Psram_Write_Icache_Set(SF_Ctrl_Cmd_Cfg_Type *cfg, uint8_t cmdValid) {\r\n  uint32_t tmpVal  = 0;\r\n  uint32_t timeOut = 0;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SF_CTRL_CMD_MODE_TYPE(cfg->cmdMode));\r\n  CHECK_PARAM(IS_SF_CTRL_ADDR_MODE_TYPE(cfg->addrMode));\r\n  CHECK_PARAM(IS_SF_CTRL_DMY_MODE_TYPE(cfg->dummyMode));\r\n  CHECK_PARAM(IS_SF_CTRL_DATA_MODE_TYPE(cfg->dataMode));\r\n\r\n  timeOut = SF_CTRL_BUSY_STATE_TIMEOUT;\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n    timeOut--;\r\n\r\n    if (timeOut == 0) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_1);\r\n\r\n  if (BL_GET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_FN_SEL) != SF_CTRL_OWNER_IAHB) {\r\n    return;\r\n  }\r\n\r\n  /* Copy command buffer */\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IAHB_4, cfg->cmdBuf[0]);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IAHB_5, cfg->cmdBuf[1]);\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IAHB_3);\r\n\r\n  /* Configure SPI and IO mode*/\r\n  if (SF_CTRL_CMD_1_LINE == cfg->cmdMode) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_QPI_MODE_EN, SF_CTRL_SPI_MODE);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_QPI_MODE_EN, SF_CTRL_QPI_MODE);\r\n  }\r\n\r\n  if (SF_CTRL_ADDR_1_LINE == cfg->addrMode) {\r\n    if (SF_CTRL_DATA_1_LINE == cfg->dataMode) {\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_SPI_MODE, SF_CTRL_NIO_MODE);\r\n    } else if (SF_CTRL_DATA_2_LINES == cfg->dataMode) {\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_SPI_MODE, SF_CTRL_DO_MODE);\r\n    } else if (SF_CTRL_DATA_4_LINES == cfg->dataMode) {\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_SPI_MODE, SF_CTRL_QO_MODE);\r\n    }\r\n  } else if (SF_CTRL_ADDR_2_LINES == cfg->addrMode) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_SPI_MODE, SF_CTRL_DIO_MODE);\r\n  } else if (SF_CTRL_ADDR_4_LINES == cfg->addrMode) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_SPI_MODE, SF_CTRL_QIO_MODE);\r\n  }\r\n\r\n  if (cmdValid) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_CMD_EN, 1);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_CMD_BYTE, 0);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_CMD_EN, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_CMD_BYTE, 0);\r\n  }\r\n\r\n  /* Configure address */\r\n  if (cfg->addrSize != 0) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_ADR_EN, 1);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_ADR_BYTE, cfg->addrSize - 1);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_ADR_EN, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_ADR_BYTE, 0);\r\n  }\r\n\r\n  /* configure dummy */\r\n  if (cfg->dummyClks != 0) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_DMY_EN, 1);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_DMY_BYTE, cfg->dummyClks - 1);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_DMY_EN, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_DMY_BYTE, 0);\r\n  }\r\n\r\n  /* Configure data */\r\n  if (cfg->nbData != 0) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_DAT_EN, 1);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_DAT_EN, 0);\r\n  }\r\n\r\n  /* Set read write flag */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_2_DAT_RW, cfg->rwFlag);\r\n\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IAHB_3, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Config psram controller for psram I/D cache read\r\n                                                                                *\r\n                                                                                * @param  cfg: Serial flash controller command configuration pointer\r\n                                                                                * @param  cmdValid: command valid or not, for continous read, cache may need no command\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SF_Ctrl_Psram_Read_Icache_Set(SF_Ctrl_Cmd_Cfg_Type *cfg, uint8_t cmdValid) {\r\n  uint32_t tmpVal  = 0;\r\n  uint32_t timeOut = 0;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SF_CTRL_CMD_MODE_TYPE(cfg->cmdMode));\r\n  CHECK_PARAM(IS_SF_CTRL_ADDR_MODE_TYPE(cfg->addrMode));\r\n  CHECK_PARAM(IS_SF_CTRL_DMY_MODE_TYPE(cfg->dummyMode));\r\n  CHECK_PARAM(IS_SF_CTRL_DATA_MODE_TYPE(cfg->dataMode));\r\n\r\n  timeOut = SF_CTRL_BUSY_STATE_TIMEOUT;\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n    timeOut--;\r\n\r\n    if (timeOut == 0) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_1);\r\n\r\n  if (BL_GET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_FN_SEL) != SF_CTRL_OWNER_IAHB) {\r\n    return;\r\n  }\r\n\r\n  /* Copy command buffer */\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IAHB_10, cfg->cmdBuf[0]);\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IAHB_11, cfg->cmdBuf[1]);\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IAHB_9);\r\n\r\n  /* Configure SPI and IO mode*/\r\n  if (SF_CTRL_CMD_1_LINE == cfg->cmdMode) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_QPI_MODE_EN, SF_CTRL_SPI_MODE);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_QPI_MODE_EN, SF_CTRL_QPI_MODE);\r\n  }\r\n\r\n  if (SF_CTRL_ADDR_1_LINE == cfg->addrMode) {\r\n    if (SF_CTRL_DATA_1_LINE == cfg->dataMode) {\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_SPI_MODE, SF_CTRL_NIO_MODE);\r\n    } else if (SF_CTRL_DATA_2_LINES == cfg->dataMode) {\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_SPI_MODE, SF_CTRL_DO_MODE);\r\n    } else if (SF_CTRL_DATA_4_LINES == cfg->dataMode) {\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_SPI_MODE, SF_CTRL_QO_MODE);\r\n    }\r\n  } else if (SF_CTRL_ADDR_2_LINES == cfg->addrMode) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_SPI_MODE, SF_CTRL_DIO_MODE);\r\n  } else if (SF_CTRL_ADDR_4_LINES == cfg->addrMode) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_SPI_MODE, SF_CTRL_QIO_MODE);\r\n  }\r\n\r\n  if (cmdValid) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_CMD_EN, 1);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_CMD_BYTE, 0);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_CMD_EN, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_CMD_BYTE, 0);\r\n  }\r\n\r\n  /* Configure address */\r\n  if (cfg->addrSize != 0) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_ADR_EN, 1);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_ADR_BYTE, cfg->addrSize - 1);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_ADR_EN, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_ADR_BYTE, 0);\r\n  }\r\n\r\n  /* configure dummy */\r\n  if (cfg->dummyClks != 0) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_DMY_EN, 1);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_DMY_BYTE, cfg->dummyClks - 1);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_DMY_EN, 0);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_DMY_BYTE, 0);\r\n  }\r\n\r\n  /* Configure data */\r\n  if (cfg->nbData != 0) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_DAT_EN, 1);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_DAT_EN, 0);\r\n  }\r\n\r\n  /* Set read write flag */\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SF_CTRL_SF_IF_1_DAT_RW, cfg->rwFlag);\r\n\r\n  BL_WR_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_IAHB_9, tmpVal);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get SF Ctrl busy state\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SET  for SF ctrl busy or RESET for SF ctrl not busy\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Sts_Type ATTR_TCM_SECTION SF_Ctrl_GetBusyState(void) {\r\n  uint32_t tmpVal;\r\n\r\n  tmpVal = BL_RD_REG(SF_CTRL_BASE, SF_CTRL_SF_IF_SAHB_0);\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, SF_CTRL_SF_IF_BUSY)) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SF Controller interrupt handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid SF_Ctrl_IRQHandler(void) { /* TODO: Not implemented */ }\r\n#endif\r\n\r\n/*@} end of group SF_CTRL_Public_Functions */\r\n\r\n/*@} end of group SF_CTRL */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_sflash.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_sflash.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_sflash.h\"\r\n#include \"bl702_l1c.h\"\r\n#include \"bl702_sf_ctrl.h\"\r\n#include \"string.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SFLASH\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SFLASH_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group SFLASH_Private_Macros */\r\n\r\n/** @defgroup  SFLASH_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group SFLASH_Private_Types */\r\n\r\n/** @defgroup  SFLASH_Private_Variables\r\n *  @{\r\n */\r\n#define SFCTRL_BUSY_STATE_TIMEOUT (5 * 160 * 1000)\r\n\r\n/*@} end of group SFLASH_Private_Variables */\r\n\r\n/** @defgroup  SFLASH_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group SFLASH_Global_Variables */\r\n\r\n/** @defgroup  SFLASH_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group SFLASH_Private_Fun_Declaration */\r\n\r\n/** @defgroup  SFLASH_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group SFLASH_Private_Functions */\r\n\r\n/** @defgroup  SFLASH_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Init serial flash control interface\r\n                                                                                *\r\n                                                                                * @param  pSfCtrlCfg: Serial flash controller configuration pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SFlash_Init(const SF_Ctrl_Cfg_Type *pSfCtrlCfg) { SF_Ctrl_Enable(pSfCtrlCfg); }\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set serial flash control interface SPI or QPI mode\r\n                                                                                *\r\n                                                                                * @param  mode: Serial flash interface mode\r\n                                                                                *\r\n                                                                                * @return BFLB_RET:SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_SetSPIMode(SF_Ctrl_Mode_Type mode) {\r\n  BL_Err_Type stat = SUCCESS;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SF_CTRL_MODE_TYPE(mode));\r\n\r\n  return stat;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Read flash register\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  regIndex: register index\r\n                                                                                * @param  regValue: register value pointer to store data\r\n                                                                                * @param  regLen: register value length\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Read_Reg(SPI_Flash_Cfg_Type *flashCfg, uint8_t regIndex, uint8_t *regValue, uint8_t regLen) {\r\n  uint8_t *const       flashCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n  uint32_t             cnt = 0;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  flashCmd.cmdBuf[0] = (flashCfg->readRegCmd[regIndex]) << 24;\r\n  flashCmd.rwFlag    = SF_CTRL_READ;\r\n  flashCmd.nbData    = regLen;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n    BL702_Delay_US(1);\r\n    cnt++;\r\n\r\n    if (cnt > 1000) {\r\n      return ERROR;\r\n    }\r\n  }\r\n\r\n  BL702_MemCpy(regValue, flashCtrlBuf, regLen);\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Write flash register\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  regIndex: register index\r\n                                                                                * @param  regValue: register value pointer storing data\r\n                                                                                * @param  regLen: register value length\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Write_Reg(SPI_Flash_Cfg_Type *flashCfg, uint8_t regIndex, uint8_t *regValue, uint8_t regLen) {\r\n  uint8_t *const       flashCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  uint32_t             cnt          = 0;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  BL702_MemCpy(flashCtrlBuf, regValue, regLen);\r\n\r\n  flashCmd.cmdBuf[0] = (flashCfg->writeRegCmd[regIndex]) << 24;\r\n  flashCmd.rwFlag    = SF_CTRL_WRITE;\r\n  flashCmd.nbData    = regLen;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  /* take 40ms for tw(write status register) as default */\r\n  while (SET == SFlash_Busy(flashCfg)) {\r\n    BL702_Delay_US(100);\r\n    cnt++;\r\n\r\n    if (cnt > 400) {\r\n      return ERROR;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Read flash register with read command\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  readRegCmd: read command\r\n                                                                                * @param  regValue: register value pointer to store data\r\n                                                                                * @param  regLen: register value length\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Read_Reg_With_Cmd(SPI_Flash_Cfg_Type *flashCfg, uint8_t readRegCmd, uint8_t *regValue, uint8_t regLen) {\r\n  uint8_t *const       flashCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n  uint32_t             cnt = 0;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  flashCmd.cmdBuf[0] = readRegCmd << 24;\r\n  flashCmd.rwFlag    = SF_CTRL_READ;\r\n  flashCmd.nbData    = regLen;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n    BL702_Delay_US(1);\r\n    cnt++;\r\n\r\n    if (cnt > 1000) {\r\n      return ERROR;\r\n    }\r\n  }\r\n\r\n  BL702_MemCpy(regValue, flashCtrlBuf, regLen);\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Write flash register with write command\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  writeRegCmd: write command\r\n                                                                                * @param  regValue: register value pointer storing data\r\n                                                                                * @param  regLen: register value length\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Write_Reg_With_Cmd(SPI_Flash_Cfg_Type *flashCfg, uint8_t writeRegCmd, uint8_t *regValue, uint8_t regLen) {\r\n  uint8_t *const       flashCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  uint32_t             cnt          = 0;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  BL702_MemCpy(flashCtrlBuf, regValue, regLen);\r\n\r\n  flashCmd.cmdBuf[0] = writeRegCmd << 24;\r\n  flashCmd.rwFlag    = SF_CTRL_WRITE;\r\n  flashCmd.nbData    = regLen;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  /* take 40ms for tw(write status register) as default */\r\n  while (SET == SFlash_Busy(flashCfg)) {\r\n    BL702_Delay_US(100);\r\n    cnt++;\r\n\r\n    if (cnt > 400) {\r\n      return ERROR;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Check flash busy status\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                *\r\n                                                                                * @return SET for busy or RESET for not busy\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Sts_Type ATTR_TCM_SECTION SFlash_Busy(SPI_Flash_Cfg_Type *flashCfg) {\r\n  uint32_t stat = 0;\r\n  SFlash_Read_Reg(flashCfg, flashCfg->busyIndex, (uint8_t *)&stat, flashCfg->busyReadRegLen);\r\n\r\n  if ((stat & (1 << flashCfg->busyBit)) == 0) {\r\n    return RESET;\r\n  }\r\n\r\n  return SET;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable flash write function\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Write_Enable(SPI_Flash_Cfg_Type *flashCfg) {\r\n  uint32_t             stat = 0;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  /* Write enable*/\r\n  flashCmd.cmdBuf[0] = (flashCfg->writeEnableCmd) << 24;\r\n  /* rwFlag don't care */\r\n  flashCmd.rwFlag = SF_CTRL_READ;\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  SFlash_Read_Reg(flashCfg, flashCfg->wrEnableIndex, (uint8_t *)&stat, flashCfg->wrEnableReadRegLen);\r\n\r\n  if ((stat & (1 << flashCfg->wrEnableBit)) != 0) {\r\n    return SUCCESS;\r\n  }\r\n\r\n  return ERROR;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable flash flash controller QSPI interface\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Qspi_Enable(SPI_Flash_Cfg_Type *flashCfg) {\r\n  uint32_t stat = 0, ret;\r\n\r\n  if (flashCfg->qeReadRegLen == 0) {\r\n    ret = SFlash_Write_Enable(flashCfg);\r\n\r\n    if (SUCCESS != ret) {\r\n      return ERROR;\r\n    }\r\n\r\n    SFlash_Write_Reg(flashCfg, flashCfg->qeIndex, (uint8_t *)&stat, flashCfg->qeWriteRegLen);\r\n    return SUCCESS;\r\n  }\r\n\r\n  SFlash_Read_Reg(flashCfg, flashCfg->qeIndex, (uint8_t *)&stat, flashCfg->qeReadRegLen);\r\n\r\n  if (flashCfg->qeData == 0) {\r\n    if ((stat & (1 << flashCfg->qeBit)) != 0) {\r\n      return SUCCESS;\r\n    }\r\n  } else {\r\n    if (((stat >> (flashCfg->qeBit & 0x08)) & 0xff) == flashCfg->qeData) {\r\n      return SUCCESS;\r\n    }\r\n  }\r\n\r\n  if (flashCfg->qeWriteRegLen != 1) {\r\n    /* This is  read r0,read r1 write r0,r1 case*/\r\n    SFlash_Read_Reg(flashCfg, 0, (uint8_t *)&stat, 1);\r\n    SFlash_Read_Reg(flashCfg, 1, ((uint8_t *)&stat) + 1, 1);\r\n\r\n    if (flashCfg->qeData == 0) {\r\n      stat |= (1 << (flashCfg->qeBit + 8 * flashCfg->qeIndex));\r\n    } else {\r\n      stat = stat & (~(0xff << (8 * flashCfg->qeIndex)));\r\n      stat |= (flashCfg->qeData << (8 * flashCfg->qeIndex));\r\n    }\r\n  } else {\r\n    if (flashCfg->qeData == 0) {\r\n      stat |= (1 << (flashCfg->qeBit % 8));\r\n    } else {\r\n      stat = flashCfg->qeData;\r\n    }\r\n  }\r\n\r\n  ret = SFlash_Write_Enable(flashCfg);\r\n\r\n  if (SUCCESS != ret) {\r\n    return ERROR;\r\n  }\r\n\r\n  SFlash_Write_Reg(flashCfg, flashCfg->qeIndex, (uint8_t *)&stat, flashCfg->qeWriteRegLen);\r\n  SFlash_Read_Reg(flashCfg, flashCfg->qeIndex, (uint8_t *)&stat, flashCfg->qeReadRegLen);\r\n\r\n  if (flashCfg->qeData == 0) {\r\n    if ((stat & (1 << flashCfg->qeBit)) != 0) {\r\n      return SUCCESS;\r\n    }\r\n  } else {\r\n    if (((stat >> (flashCfg->qeBit & 0x08)) & 0xff) == flashCfg->qeData) {\r\n      return SUCCESS;\r\n    }\r\n  }\r\n\r\n  return ERROR;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable flash volatile register write enable\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SFlash_Volatile_Reg_Write_Enable(SPI_Flash_Cfg_Type *flashCfg) {\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  flashCmd.cmdBuf[0] = (flashCfg->writeVregEnableCmd) << 24;\r\n  flashCmd.rwFlag    = SF_CTRL_WRITE;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Erase flash whole chip\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Chip_Erase(SPI_Flash_Cfg_Type *flashCfg) {\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n  uint32_t             cnt  = 0;\r\n  BL_Err_Type          stat = SFlash_Write_Enable(flashCfg);\r\n\r\n  if (stat != SUCCESS) {\r\n    return stat;\r\n  }\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  flashCmd.cmdBuf[0] = (flashCfg->chipEraseCmd) << 24;\r\n  /* rwFlag don't care */\r\n  flashCmd.rwFlag = SF_CTRL_READ;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  while (SET == SFlash_Busy(flashCfg)) {\r\n    BL702_Delay_US(500);\r\n    cnt++;\r\n\r\n    if (cnt > flashCfg->timeCe * 3) {\r\n      return ERROR;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Erase flash one sector\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  secNum: flash sector number\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Sector_Erase(SPI_Flash_Cfg_Type *flashCfg, uint32_t secNum) {\r\n  uint32_t             cnt = 0;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n\r\n  BL_Err_Type stat = SFlash_Write_Enable(flashCfg);\r\n\r\n  if (stat != SUCCESS) {\r\n    return stat;\r\n  }\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  flashCmd.cmdBuf[0] = (flashCfg->sectorEraseCmd << 24) | (flashCfg->sectorSize * 1024 * secNum);\r\n  /* rwFlag don't care */\r\n  flashCmd.rwFlag   = SF_CTRL_READ;\r\n  flashCmd.addrSize = 3;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  while (SET == SFlash_Busy(flashCfg)) {\r\n    BL702_Delay_US(500);\r\n    cnt++;\r\n\r\n    if (cnt > flashCfg->timeEsector * 3) {\r\n      return ERROR;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Erase flash one 32K block\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  blkNum: flash 32K block number\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Blk32_Erase(SPI_Flash_Cfg_Type *flashCfg, uint32_t blkNum) {\r\n  uint32_t             cnt = 0;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n  BL_Err_Type          stat = SFlash_Write_Enable(flashCfg);\r\n\r\n  if (stat != SUCCESS) {\r\n    return stat;\r\n  }\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  flashCmd.cmdBuf[0] = (flashCfg->blk32EraseCmd << 24) | (BFLB_SPIFLASH_BLK32K_SIZE * blkNum);\r\n  /* rwFlag don't care */\r\n  flashCmd.rwFlag   = SF_CTRL_READ;\r\n  flashCmd.addrSize = 3;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  while (SET == SFlash_Busy(flashCfg)) {\r\n    BL702_Delay_US(500);\r\n    cnt++;\r\n\r\n    if (cnt > flashCfg->timeE32k * 3) {\r\n      return ERROR;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Erase flash one 64K block\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  blkNum: flash 64K block number\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Blk64_Erase(SPI_Flash_Cfg_Type *flashCfg, uint32_t blkNum) {\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n  uint32_t             cnt  = 0;\r\n  BL_Err_Type          stat = SFlash_Write_Enable(flashCfg);\r\n\r\n  if (stat != SUCCESS) {\r\n    return stat;\r\n  }\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  flashCmd.cmdBuf[0] = (flashCfg->blk64EraseCmd << 24) | (BFLB_SPIFLASH_BLK64K_SIZE * blkNum);\r\n  /* rwFlag don't care */\r\n  flashCmd.rwFlag   = SF_CTRL_READ;\r\n  flashCmd.addrSize = 3;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  while (SET == SFlash_Busy(flashCfg)) {\r\n    BL702_Delay_US(500);\r\n    cnt++;\r\n\r\n    if (cnt > flashCfg->timeE64k * 3) {\r\n      return ERROR;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Erase flash one region\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  startaddr: start address to erase\r\n                                                                                * @param  endaddr: end address(include this address) to erase\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Erase(SPI_Flash_Cfg_Type *flashCfg, uint32_t startaddr, uint32_t endaddr) {\r\n  uint32_t    len      = 0;\r\n  uint32_t    eraseLen = 0;\r\n  BL_Err_Type ret      = SUCCESS;\r\n\r\n  while (startaddr <= endaddr) {\r\n    len = endaddr - startaddr + 1;\r\n\r\n    if (flashCfg->blk64EraseCmd != BFLB_SPIFLASH_CMD_INVALID && (startaddr & (BFLB_SPIFLASH_BLK64K_SIZE - 1)) == 0 && len > (uint32_t)(BFLB_SPIFLASH_BLK64K_SIZE - flashCfg->sectorSize * 1024)) {\r\n      /* 64K margin address,and length > 64K-sector size, erase one first */\r\n      ret      = SFlash_Blk64_Erase(flashCfg, startaddr / BFLB_SPIFLASH_BLK64K_SIZE);\r\n      eraseLen = BFLB_SPIFLASH_BLK64K_SIZE;\r\n    } else if (flashCfg->blk32EraseCmd != BFLB_SPIFLASH_CMD_INVALID && (startaddr & (BFLB_SPIFLASH_BLK32K_SIZE - 1)) == 0 &&\r\n               len > (uint32_t)(BFLB_SPIFLASH_BLK32K_SIZE - flashCfg->sectorSize * 1024)) {\r\n      /* 32K margin address,and length > 32K-sector size, erase one first */\r\n      ret      = SFlash_Blk32_Erase(flashCfg, startaddr / BFLB_SPIFLASH_BLK32K_SIZE);\r\n      eraseLen = BFLB_SPIFLASH_BLK32K_SIZE;\r\n    } else {\r\n      /* Sector erase */\r\n      startaddr = ((startaddr) & (~(flashCfg->sectorSize * 1024 - 1)));\r\n      ret       = SFlash_Sector_Erase(flashCfg, startaddr / flashCfg->sectorSize / 1024);\r\n      eraseLen  = flashCfg->sectorSize * 1024;\r\n    }\r\n\r\n    startaddr += eraseLen;\r\n\r\n    if (ret != SUCCESS) {\r\n      return ERROR;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Program flash one region\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  ioMode: progran mode:SPI mode or QPI mode\r\n                                                                                * @param  addr: start address to be programed\r\n                                                                                * @param  data: data pointer to be programed\r\n                                                                                * @param  len: data length to be programed\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Program(SPI_Flash_Cfg_Type *flashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t *data, uint32_t len) {\r\n  uint8_t *const       flashCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  uint32_t             i = 0, curLen = 0;\r\n  uint32_t             cnt = 0;\r\n  BL_Err_Type          stat;\r\n  uint8_t              cmd;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  if (SF_CTRL_NIO_MODE == ioMode || SF_CTRL_DO_MODE == ioMode || SF_CTRL_DIO_MODE == ioMode) {\r\n    cmd = flashCfg->pageProgramCmd;\r\n  } else if (SF_CTRL_QIO_MODE == ioMode || SF_CTRL_QO_MODE == ioMode) {\r\n    flashCmd.addrMode = (SF_Ctrl_Addr_Mode_Type)flashCfg->qppAddrMode;\r\n    flashCmd.dataMode = SF_CTRL_DATA_4_LINES;\r\n    cmd               = flashCfg->qpageProgramCmd;\r\n  } else {\r\n    return ERROR;\r\n  }\r\n\r\n  /* Prepare command */\r\n  flashCmd.rwFlag   = SF_CTRL_WRITE;\r\n  flashCmd.addrSize = 3;\r\n\r\n  for (i = 0; i < len;) {\r\n    /* Write enable is needed for every program */\r\n    stat = SFlash_Write_Enable(flashCfg);\r\n\r\n    if (stat != SUCCESS) {\r\n      return stat;\r\n    }\r\n\r\n    /* Get current programmed length within page size */\r\n    curLen = flashCfg->pageSize - addr % flashCfg->pageSize;\r\n\r\n    if (curLen > len - i) {\r\n      curLen = len - i;\r\n    }\r\n\r\n    /* Prepare command */\r\n    BL702_MemCpy_Fast(flashCtrlBuf, data, curLen);\r\n    flashCmd.cmdBuf[0] = (cmd << 24) | (addr);\r\n    flashCmd.nbData    = curLen;\r\n\r\n    SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n    /* Adjust address and programmed length */\r\n    addr += curLen;\r\n    i += curLen;\r\n    data += curLen;\r\n\r\n    /* Wait for write done */\r\n    cnt = 0;\r\n\r\n    while (SET == SFlash_Busy(flashCfg)) {\r\n      BL702_Delay_US(100);\r\n      cnt++;\r\n\r\n      if (cnt > flashCfg->timePagePgm * 20) {\r\n        return ERROR;\r\n      }\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get flash unique ID\r\n                                                                                *\r\n                                                                                * @param  data: data pointer to store read data\r\n                                                                                * @param  idLen: unique ID len\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SFlash_GetUniqueId(uint8_t *data, uint8_t idLen) {\r\n  uint8_t *const       flashCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  uint8_t              cmd, dummyClks;\r\n  uint32_t             timeOut = 0;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  dummyClks          = 4;\r\n  cmd                = 0x4B;\r\n  flashCmd.cmdBuf[0] = (cmd << 24);\r\n  flashCmd.rwFlag    = SF_CTRL_READ;\r\n  flashCmd.dummyClks = dummyClks;\r\n  flashCmd.nbData    = idLen;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  timeOut = SFCTRL_BUSY_STATE_TIMEOUT;\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n    timeOut--;\r\n\r\n    if (timeOut == 0) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  BL702_MemCpy(data, flashCtrlBuf, idLen);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get flash jedec ID\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  data: data pointer to store read data\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SFlash_GetJedecId(SPI_Flash_Cfg_Type *flashCfg, uint8_t *data) {\r\n  uint8_t *const       flashCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  uint8_t              cmd, dummyClks;\r\n  uint32_t             timeOut = 0;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  dummyClks          = flashCfg->jedecIdCmdDmyClk;\r\n  cmd                = flashCfg->jedecIdCmd;\r\n  flashCmd.cmdBuf[0] = (cmd << 24);\r\n  flashCmd.rwFlag    = SF_CTRL_READ;\r\n  flashCmd.dummyClks = dummyClks;\r\n  flashCmd.nbData    = 3;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  timeOut = SFCTRL_BUSY_STATE_TIMEOUT;\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n    timeOut--;\r\n\r\n    if (timeOut == 0) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  BL702_MemCpy(data, flashCtrlBuf, 3);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get flash device ID\r\n                                                                                *\r\n                                                                                * @param  data: data pointer to store read data\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SFlash_GetDeviceId(uint8_t *data) {\r\n  uint8_t *const       flashCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  uint8_t              cmd, dummyClks;\r\n  uint32_t             timeOut = 0;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n  uint32_t             addr     = 0x00000001;\r\n  uint8_t              readMode = 0xFF;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  flashCmd.addrMode  = SF_CTRL_ADDR_4_LINES;\r\n  flashCmd.dataMode  = SF_CTRL_DATA_4_LINES;\r\n  dummyClks          = 2;\r\n  cmd                = 0x94;\r\n  flashCmd.cmdBuf[0] = (cmd << 24) | (addr);\r\n  flashCmd.cmdBuf[1] = (readMode << 24);\r\n  flashCmd.rwFlag    = SF_CTRL_READ;\r\n  flashCmd.addrSize  = 4;\r\n  flashCmd.dummyClks = dummyClks;\r\n  flashCmd.nbData    = 2;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  timeOut = SFCTRL_BUSY_STATE_TIMEOUT;\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n    timeOut--;\r\n\r\n    if (timeOut == 0) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  BL702_MemCpy(data, flashCtrlBuf, 2);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set flash power down\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SFlash_Powerdown(void) {\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n  uint8_t              cmd     = 0;\r\n  uint32_t             timeOut = 0;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  cmd                = 0xB9;\r\n  flashCmd.cmdBuf[0] = (cmd << 24);\r\n  flashCmd.rwFlag    = SF_CTRL_WRITE;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  timeOut = SFCTRL_BUSY_STATE_TIMEOUT;\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n    timeOut--;\r\n\r\n    if (timeOut == 0) {\r\n      return;\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Release flash power down for wake up\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SFlash_Releae_Powerdown(SPI_Flash_Cfg_Type *flashCfg) {\r\n  uint8_t  cmd;\r\n  uint32_t timeOut = 0;\r\n\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  cmd                = flashCfg->releasePowerDown;\r\n  flashCmd.cmdBuf[0] = (cmd << 24);\r\n  flashCmd.rwFlag    = SF_CTRL_WRITE;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  timeOut = SFCTRL_BUSY_STATE_TIMEOUT;\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n    timeOut--;\r\n\r\n    if (timeOut == 0) {\r\n      return;\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Sflash restore from power down\r\n                                                                                *\r\n                                                                                * @param  pFlashCfg: Flash configuration pointer\r\n                                                                                * @param  flashContRead: Whether enable continuous read\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Restore_From_Powerdown(SPI_Flash_Cfg_Type *pFlashCfg, uint8_t flashContRead) {\r\n  BL_Err_Type stat   = SUCCESS;\r\n  uint32_t    jdecId = 0;\r\n  uint8_t     tmp[8];\r\n  uint8_t     ioMode = pFlashCfg->ioMode & 0xf;\r\n\r\n  /* Wake flash up from power down */\r\n  SFlash_Releae_Powerdown(pFlashCfg);\r\n  BL702_Delay_US(120);\r\n\r\n  SFlash_GetJedecId(pFlashCfg, (uint8_t *)&jdecId);\r\n\r\n  if (SF_CTRL_QO_MODE == ioMode || SF_CTRL_QIO_MODE == ioMode) {\r\n    SFlash_Qspi_Enable(pFlashCfg);\r\n  }\r\n\r\n  if (((pFlashCfg->ioMode >> 4) & 0x01) == 1) {\r\n    /* unwrap */\r\n    L1C_Set_Wrap(DISABLE);\r\n  } else {\r\n    /* burst wrap */\r\n    L1C_Set_Wrap(ENABLE);\r\n    /* For command that is setting register instead of send command, we need write enable */\r\n    SFlash_Write_Enable(pFlashCfg);\r\n    SFlash_SetBurstWrap(pFlashCfg);\r\n  }\r\n\r\n  if (flashContRead) {\r\n    stat = SFlash_Read(pFlashCfg, ioMode, 1, 0x00000000, (uint8_t *)tmp, sizeof(tmp));\r\n    SF_Ctrl_Set_Owner(SF_CTRL_OWNER_IAHB);\r\n  } else {\r\n    stat = SFlash_Set_IDbus_Cfg(pFlashCfg, ioMode, 0, 0, 32);\r\n  }\r\n\r\n  return stat;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set flash burst wrap config\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SFlash_SetBurstWrap(SPI_Flash_Cfg_Type *flashCfg) {\r\n  uint8_t *const       flashCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  uint8_t              cmd, dummyClks;\r\n  uint32_t             wrapData;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n\r\n  if (((flashCfg->ioMode >> 4) & 0x01) == 1) {\r\n    /* Disable burst wrap ,just return */\r\n    return;\r\n  }\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  flashCmd.addrMode = (SF_Ctrl_Addr_Mode_Type)flashCfg->burstWrapDataMode;\r\n  flashCmd.dataMode = (SF_Ctrl_Data_Mode_Type)flashCfg->burstWrapDataMode;\r\n  dummyClks         = flashCfg->burstWrapCmdDmyClk;\r\n  cmd               = flashCfg->burstWrapCmd;\r\n  wrapData          = flashCfg->burstWrapData;\r\n  BL702_MemCpy4((uint32_t *)flashCtrlBuf, &wrapData, 4);\r\n  flashCmd.cmdBuf[0] = (cmd << 24);\r\n  flashCmd.rwFlag    = SF_CTRL_WRITE;\r\n  flashCmd.dummyClks = dummyClks;\r\n  flashCmd.nbData    = 1;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable flash burst wrap config\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SFlash_DisableBurstWrap(SPI_Flash_Cfg_Type *flashCfg) {\r\n  uint8_t *const       flashCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  uint8_t              cmd, dummyClks;\r\n  uint32_t             wrapData;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  flashCmd.addrMode = (SF_Ctrl_Addr_Mode_Type)flashCfg->deBurstWrapDataMode;\r\n  flashCmd.dataMode = (SF_Ctrl_Data_Mode_Type)flashCfg->deBurstWrapDataMode;\r\n  dummyClks         = flashCfg->deBurstWrapCmdDmyClk;\r\n  cmd               = flashCfg->deBurstWrapCmd;\r\n  wrapData          = flashCfg->deBurstWrapData;\r\n  BL702_MemCpy4((uint32_t *)flashCtrlBuf, &wrapData, 4);\r\n  flashCmd.cmdBuf[0] = (cmd << 24);\r\n  flashCmd.rwFlag    = SF_CTRL_WRITE;\r\n  flashCmd.dummyClks = dummyClks;\r\n  flashCmd.nbData    = 1;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Software reset flash\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Software_Reset(SPI_Flash_Cfg_Type *flashCfg) {\r\n  uint16_t             cnt = 0;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  /* Reset enable */\r\n  flashCmd.cmdBuf[0] = (flashCfg->resetEnCmd) << 24;\r\n  /* rwFlag don't care */\r\n  flashCmd.rwFlag = SF_CTRL_READ;\r\n\r\n  /* Wait for write done */\r\n  while (SET == SFlash_Busy(flashCfg)) {\r\n    BL702_Delay_US(100);\r\n    cnt++;\r\n\r\n    if (cnt > 20) {\r\n      return ERROR;\r\n    }\r\n  }\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  /* Reset */\r\n  flashCmd.cmdBuf[0] = (flashCfg->resetCmd) << 24;\r\n  /* rwFlag don't care */\r\n  flashCmd.rwFlag = SF_CTRL_READ;\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  BL702_Delay_US(50);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Reset flash continous read mode\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SFlash_Reset_Continue_Read(SPI_Flash_Cfg_Type *flashCfg) {\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  /* Reset continous read */\r\n  BL702_MemSet(&flashCmd.cmdBuf[0], flashCfg->resetCreadCmd, 4);\r\n  /* rwFlag don't care */\r\n  flashCmd.rwFlag   = SF_CTRL_READ;\r\n  flashCmd.addrSize = flashCfg->resetCreadCmdSize;\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set I/D bus read flash configuration in flash controller\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  ioMode: flash controller interface mode\r\n                                                                                * @param  contRead: Wether enable cont read mode\r\n                                                                                * @param  addr: address to read/write\r\n                                                                                * @param  len: data length to read/write\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Set_IDbus_Cfg(SPI_Flash_Cfg_Type *flashCfg, SF_Ctrl_IO_Type ioMode, uint8_t contRead, uint32_t addr, uint32_t len) {\r\n  uint8_t              cmd, dummyClks;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n  uint8_t              cmdValid      = 1;\r\n  uint8_t              noReadModeCfg = 0;\r\n  uint8_t              cReadSupport  = 0;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  SF_Ctrl_Set_Owner(SF_CTRL_OWNER_IAHB);\r\n\r\n  if (SF_CTRL_NIO_MODE == ioMode) {\r\n    cmd       = flashCfg->fastReadCmd;\r\n    dummyClks = flashCfg->frDmyClk;\r\n  } else if (SF_CTRL_DO_MODE == ioMode) {\r\n    flashCmd.dataMode = SF_CTRL_DATA_2_LINES;\r\n    cmd               = flashCfg->fastReadDoCmd;\r\n    dummyClks         = flashCfg->frDoDmyClk;\r\n  } else if (SF_CTRL_DIO_MODE == ioMode) {\r\n    flashCmd.addrMode = SF_CTRL_ADDR_2_LINES;\r\n    flashCmd.dataMode = SF_CTRL_DATA_2_LINES;\r\n    cmd               = flashCfg->fastReadDioCmd;\r\n    dummyClks         = flashCfg->frDioDmyClk;\r\n  } else if (SF_CTRL_QO_MODE == ioMode) {\r\n    flashCmd.dataMode = SF_CTRL_DATA_4_LINES;\r\n    cmd               = flashCfg->fastReadQoCmd;\r\n    dummyClks         = flashCfg->frQoDmyClk;\r\n  } else if (SF_CTRL_QIO_MODE == ioMode) {\r\n    flashCmd.addrMode = SF_CTRL_ADDR_4_LINES;\r\n    flashCmd.dataMode = SF_CTRL_DATA_4_LINES;\r\n    cmd               = flashCfg->fastReadQioCmd;\r\n    dummyClks         = flashCfg->frQioDmyClk;\r\n  } else {\r\n    return ERROR;\r\n  }\r\n\r\n  /*prepare command**/\r\n  flashCmd.rwFlag    = SF_CTRL_READ;\r\n  flashCmd.addrSize  = 3;\r\n  flashCmd.cmdBuf[0] = (cmd << 24) | addr;\r\n\r\n  if (SF_CTRL_QIO_MODE == ioMode || SF_CTRL_DIO_MODE == ioMode) {\r\n    noReadModeCfg = flashCfg->cReadSupport & 0x02;\r\n    cReadSupport  = flashCfg->cReadSupport & 0x01;\r\n\r\n    if (noReadModeCfg == 0) {\r\n      /* Read mode must be set*/\r\n      if (cReadSupport == 0) {\r\n        /* Not support cont read,but we still need set read mode(winbond 80dv)*/\r\n        flashCmd.cmdBuf[1] = (flashCfg->cReadMode << 24);\r\n      } else {\r\n        /* Flash support cont read, setting depend on user parameter */\r\n        if (contRead) {\r\n          flashCmd.cmdBuf[0] = (addr << 8) | flashCfg->cReadMode;\r\n          cmdValid           = 0;\r\n        } else {\r\n          flashCmd.cmdBuf[1] = ((!flashCfg->cReadMode) << 24);\r\n        }\r\n      }\r\n\r\n      flashCmd.addrSize++;\r\n    }\r\n  }\r\n\r\n  flashCmd.dummyClks = dummyClks;\r\n  flashCmd.nbData    = len;\r\n  SF_Ctrl_Flash_Read_Icache_Set(&flashCmd, cmdValid);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable I/D bus read from flash\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  ioMode: flash controller interface mode\r\n                                                                                * @param  contRead: Wether enable cont read mode\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_IDbus_Read_Enable(SPI_Flash_Cfg_Type *flashCfg, SF_Ctrl_IO_Type ioMode, uint8_t contRead) {\r\n  BL_Err_Type stat;\r\n\r\n  stat = SFlash_Set_IDbus_Cfg(flashCfg, ioMode, contRead, 0, 4);\r\n\r\n  if (SUCCESS != stat) {\r\n    return stat;\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable cache read from flash with cache\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  ioMode: flash controller interface mode\r\n                                                                                * @param  contRead: Wether enable cont read mode\r\n                                                                                * @param  wayDisable: cache way disable config\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Cache_Read_Enable(SPI_Flash_Cfg_Type *flashCfg, SF_Ctrl_IO_Type ioMode, uint8_t contRead, uint8_t wayDisable) {\r\n  BL_Err_Type stat;\r\n\r\n  /* Cache now only support 32 bytes read */\r\n  stat = SFlash_Set_IDbus_Cfg(flashCfg, ioMode, contRead, 0, 32);\r\n\r\n  if (SUCCESS != stat) {\r\n    return stat;\r\n  }\r\n\r\n  return L1C_Cache_Enable_Set(wayDisable);\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable read from flash with cache\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nvoid ATTR_TCM_SECTION SFlash_Cache_Read_Disable(void) { L1C_Cache_Read_Disable(); }\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Read data from flash\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  ioMode: flash controller interface mode\r\n                                                                                * @param  contRead: Wether enable cont read mode\r\n                                                                                * @param  addr: flash read start address\r\n                                                                                * @param  data: data pointer to store data read from flash\r\n                                                                                * @param  len: data length to read\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Read(SPI_Flash_Cfg_Type *flashCfg, SF_Ctrl_IO_Type ioMode, uint8_t contRead, uint32_t addr, uint8_t *data, uint32_t len) {\r\n  uint8_t *const       flashCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  uint32_t             curLen, i;\r\n  uint8_t              cmd, dummyClks;\r\n  uint32_t             timeOut = 0;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n  uint8_t              noReadModeCfg = 0;\r\n  uint8_t              cReadSupport  = 0;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  if (SF_CTRL_NIO_MODE == ioMode) {\r\n    cmd       = flashCfg->fastReadCmd;\r\n    dummyClks = flashCfg->frDmyClk;\r\n  } else if (SF_CTRL_DO_MODE == ioMode) {\r\n    flashCmd.dataMode = SF_CTRL_DATA_2_LINES;\r\n    cmd               = flashCfg->fastReadDoCmd;\r\n    dummyClks         = flashCfg->frDoDmyClk;\r\n  } else if (SF_CTRL_DIO_MODE == ioMode) {\r\n    flashCmd.addrMode = SF_CTRL_ADDR_2_LINES;\r\n    flashCmd.dataMode = SF_CTRL_DATA_2_LINES;\r\n    cmd               = flashCfg->fastReadDioCmd;\r\n    dummyClks         = flashCfg->frDioDmyClk;\r\n  } else if (SF_CTRL_QO_MODE == ioMode) {\r\n    flashCmd.dataMode = SF_CTRL_DATA_4_LINES;\r\n    cmd               = flashCfg->fastReadQoCmd;\r\n    dummyClks         = flashCfg->frQoDmyClk;\r\n  } else if (SF_CTRL_QIO_MODE == ioMode) {\r\n    flashCmd.addrMode = SF_CTRL_ADDR_4_LINES;\r\n    flashCmd.dataMode = SF_CTRL_DATA_4_LINES;\r\n    cmd               = flashCfg->fastReadQioCmd;\r\n    dummyClks         = flashCfg->frQioDmyClk;\r\n  } else {\r\n    return ERROR;\r\n  }\r\n\r\n  /* Prepare command */\r\n  flashCmd.rwFlag   = SF_CTRL_READ;\r\n  flashCmd.addrSize = 3;\r\n\r\n  if (SF_CTRL_QIO_MODE == ioMode || SF_CTRL_DIO_MODE == ioMode) {\r\n    noReadModeCfg = flashCfg->cReadSupport & 0x02;\r\n    cReadSupport  = flashCfg->cReadSupport & 0x01;\r\n\r\n    if (noReadModeCfg == 0) {\r\n      /* Read mode must be set*/\r\n      if (cReadSupport == 0) {\r\n        /* Not support cont read,but we still need set read mode(winbond 80dv)*/\r\n        flashCmd.cmdBuf[1] = (flashCfg->cReadMode << 24);\r\n      } else {\r\n        /* Flash support cont read, setting depend on user parameter */\r\n        if (contRead) {\r\n          flashCmd.cmdBuf[1] = (flashCfg->cReadMode << 24);\r\n        } else {\r\n          flashCmd.cmdBuf[1] = ((!flashCfg->cReadMode) << 24);\r\n        }\r\n      }\r\n\r\n      flashCmd.addrSize++;\r\n    }\r\n  }\r\n\r\n  flashCmd.dummyClks = dummyClks;\r\n\r\n  /* Read data */\r\n  for (i = 0; i < len;) {\r\n    /* Prepare command */\r\n    flashCmd.cmdBuf[0] = (cmd << 24) | (addr);\r\n    curLen             = len - i;\r\n\r\n    if (curLen >= FLASH_CTRL_BUF_SIZE) {\r\n      curLen          = FLASH_CTRL_BUF_SIZE;\r\n      flashCmd.nbData = curLen;\r\n    } else {\r\n      /* Make sf_ctrl word read */\r\n      flashCmd.nbData = ((curLen + 3) >> 2) << 2;\r\n    }\r\n\r\n    SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n    timeOut = SFCTRL_BUSY_STATE_TIMEOUT;\r\n\r\n    while (SET == SF_Ctrl_GetBusyState()) {\r\n      timeOut--;\r\n\r\n      if (timeOut == 0) {\r\n        return TIMEOUT;\r\n      }\r\n    }\r\n\r\n    BL702_MemCpy_Fast(data, flashCtrlBuf, curLen);\r\n\r\n    addr += curLen;\r\n    i += curLen;\r\n    data += curLen;\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/*@} end of group SFLASH_Public_Functions */\r\n\r\n/*@} end of group SFLASH */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_sflash_ext.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_sflash_ext.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_sflash_ext.h\"\r\n#include \"bl702_sf_ctrl.h\"\r\n#include \"l1c_reg.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SFLASH_EXT\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SFLASH_EXT_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group SFLASH_EXT_Private_Macros */\r\n\r\n/** @defgroup  SFLASH_EXT_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group SFLASH_EXT_Private_Types */\r\n\r\n/** @defgroup  SFLASH_EXT_Private_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group SFLASH_EXT_Private_Variables */\r\n\r\n/** @defgroup  SFLASH_EXT_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group SFLASH_EXT_Global_Variables */\r\n\r\n/** @defgroup  SFLASH_EXT_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group SFLASH_EXT_Private_Fun_Declaration */\r\n\r\n/** @defgroup  SFLASH_EXT_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group SFLASH_EXT_Private_Functions */\r\n\r\n/** @defgroup  SFLASH_EXT_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  KH25V40 flash write protect set\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  protect: protect area\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_KH25V40_Write_Protect(SPI_Flash_Cfg_Type *flashCfg, SFlash_Protect_Kh25v40_Type protect) {\r\n  uint32_t stat = 0, ret;\r\n\r\n  SFlash_Read_Reg(flashCfg, 0, (uint8_t *)&stat, 1);\r\n  if (((stat >> 2) & 0xf) == protect) {\r\n    return SUCCESS;\r\n  }\r\n\r\n  stat |= ((protect << 2) & 0xff);\r\n\r\n  ret = SFlash_Write_Enable(flashCfg);\r\n  if (SUCCESS != ret) {\r\n    return ERROR;\r\n  }\r\n\r\n  SFlash_Write_Reg(flashCfg, 0, (uint8_t *)&stat, 1);\r\n  SFlash_Read_Reg(flashCfg, 0, (uint8_t *)&stat, 1);\r\n  if (((stat >> 2) & 0xf) == protect) {\r\n    return SUCCESS;\r\n  }\r\n\r\n  return ERROR;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Read flash register with read command\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  readRegCmd: read command\r\n                                                                                * @param  regValue: register value pointer to store data\r\n                                                                                * @param  regLen: register value length\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Read_Reg_With_Cmd(SPI_Flash_Cfg_Type *flashCfg, uint8_t readRegCmd, uint8_t *regValue, uint8_t regLen) {\r\n  uint8_t *const       flashCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n  uint32_t             cnt = 0;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  flashCmd.cmdBuf[0] = readRegCmd << 24;\r\n  flashCmd.rwFlag    = SF_CTRL_READ;\r\n  flashCmd.nbData    = regLen;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  while (SET == SF_Ctrl_GetBusyState()) {\r\n    BL702_Delay_US(1);\r\n    cnt++;\r\n\r\n    if (cnt > 1000) {\r\n      return ERROR;\r\n    }\r\n  }\r\n\r\n  BL702_MemCpy(regValue, flashCtrlBuf, regLen);\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Write flash register with write command\r\n                                                                                *\r\n                                                                                * @param  flashCfg: Serial flash parameter configuration pointer\r\n                                                                                * @param  writeRegCmd: write command\r\n                                                                                * @param  regValue: register value pointer storing data\r\n                                                                                * @param  regLen: register value length\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Write_Reg_With_Cmd(SPI_Flash_Cfg_Type *flashCfg, uint8_t writeRegCmd, uint8_t *regValue, uint8_t regLen) {\r\n  uint8_t *const       flashCtrlBuf = (uint8_t *)SF_CTRL_BUF_BASE;\r\n  uint32_t             cnt          = 0;\r\n  SF_Ctrl_Cmd_Cfg_Type flashCmd;\r\n\r\n  if (((uint32_t)&flashCmd) % 4 == 0) {\r\n    BL702_MemSet4((uint32_t *)&flashCmd, 0, sizeof(flashCmd) / 4);\r\n  } else {\r\n    BL702_MemSet(&flashCmd, 0, sizeof(flashCmd));\r\n  }\r\n\r\n  BL702_MemCpy(flashCtrlBuf, regValue, regLen);\r\n\r\n  flashCmd.cmdBuf[0] = writeRegCmd << 24;\r\n  flashCmd.rwFlag    = SF_CTRL_WRITE;\r\n  flashCmd.nbData    = regLen;\r\n\r\n  SF_Ctrl_SendCmd(&flashCmd);\r\n\r\n  /* take 40ms for tw(write status register) as default */\r\n  while (SET == SFlash_Busy(flashCfg)) {\r\n    BL702_Delay_US(100);\r\n    cnt++;\r\n\r\n    if (cnt > 400) {\r\n      return ERROR;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Clear flash status register\r\n                                                                                *\r\n                                                                                * @param  pFlashCfg: Flash configuration pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type ATTR_TCM_SECTION SFlash_Clear_Status_Register(SPI_Flash_Cfg_Type *pFlashCfg) {\r\n  uint32_t ret           = 0;\r\n  uint32_t qeValue       = 0;\r\n  uint32_t regValue      = 0;\r\n  uint32_t readValue     = 0;\r\n  uint8_t  readRegValue0 = 0;\r\n  uint8_t  readRegValue1 = 0;\r\n\r\n  if ((pFlashCfg->ioMode & 0xf) == SF_CTRL_QO_MODE || (pFlashCfg->ioMode & 0xf) == SF_CTRL_QIO_MODE) {\r\n    qeValue = 1;\r\n  }\r\n\r\n  SFlash_Read_Reg(pFlashCfg, 0, (uint8_t *)&readRegValue0, 1);\r\n  SFlash_Read_Reg(pFlashCfg, 1, (uint8_t *)&readRegValue1, 1);\r\n  readValue = (readRegValue0 | (readRegValue1 << 8));\r\n  if ((readValue & (~((1 << (pFlashCfg->qeIndex * 8 + pFlashCfg->qeBit)) | (1 << (pFlashCfg->busyIndex * 8 + pFlashCfg->busyBit)) | (1 << (pFlashCfg->wrEnableIndex * 8 + pFlashCfg->wrEnableBit))))) ==\r\n      0) {\r\n    return SUCCESS;\r\n  }\r\n\r\n  ret = SFlash_Write_Enable(pFlashCfg);\r\n  if (SUCCESS != ret) {\r\n    return ERROR;\r\n  }\r\n  if (pFlashCfg->qeWriteRegLen == 2) {\r\n    regValue = (qeValue << (pFlashCfg->qeIndex * 8 + pFlashCfg->qeBit));\r\n    SFlash_Write_Reg(pFlashCfg, 0, (uint8_t *)&regValue, 2);\r\n  } else {\r\n    if (pFlashCfg->qeIndex == 0) {\r\n      regValue = (qeValue << pFlashCfg->qeBit);\r\n    } else {\r\n      regValue = 0;\r\n    }\r\n    SFlash_Write_Reg(pFlashCfg, 0, (uint8_t *)&regValue, 1);\r\n    ret = SFlash_Write_Enable(pFlashCfg);\r\n    if (SUCCESS != ret) {\r\n      return ERROR;\r\n    }\r\n    if (pFlashCfg->qeIndex == 1) {\r\n      regValue = (qeValue << pFlashCfg->qeBit);\r\n    } else {\r\n      regValue = 0;\r\n    }\r\n    SFlash_Write_Reg(pFlashCfg, 1, (uint8_t *)&regValue, 1);\r\n  }\r\n  return SUCCESS;\r\n}\r\n\r\n/*@} end of group SFLASH_EXT_Public_Functions */\r\n\r\n/*@} end of group SFLASH_EXT */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_spi.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_spi.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_spi.h\"\r\n#include \"bl702_glb.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  SPI\r\n *  @{\r\n */\r\n\r\n/** @defgroup  SPI_Private_Macros\r\n *  @{\r\n */\r\n#define SPI_TX_TIMEOUT_COUNT (160 * 1000)\r\n#define SPI_RX_TIMEOUT_COUNT (160 * 1000)\r\n\r\n/*@} end of group SPI_Private_Macros */\r\n\r\n/** @defgroup  SPI_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group SPI_Private_Types */\r\n\r\n/** @defgroup  SPI_Private_Variables\r\n *  @{\r\n */\r\nstatic const uint32_t    spiAddr[SPI_ID_MAX]                    = {SPI_BASE};\r\nstatic intCallback_Type *spiIntCbfArra[SPI_ID_MAX][SPI_INT_ALL] = {{NULL}};\r\n\r\n/*@} end of group SPI_Private_Variables */\r\n\r\n/** @defgroup  SPI_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group SPI_Global_Variables */\r\n\r\n/** @defgroup  SPI_Private_Fun_Declaration\r\n *  @{\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nstatic void SPI_IntHandler(SPI_ID_Type spiNo);\r\n#endif\r\n\r\n/*@} end of group SPI_Private_Fun_Declaration */\r\n\r\n/** @defgroup  SPI_Private_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI interrupt common handler function\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nstatic void SPI_IntHandler(SPI_ID_Type spiNo) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n\r\n  tmpVal = BL_RD_REG(SPIx, SPI_INT_STS);\r\n\r\n  /* Transfer end interrupt,shared by both master and slave mode */\r\n  if (BL_IS_REG_BIT_SET(tmpVal, SPI_END_INT) && !BL_IS_REG_BIT_SET(tmpVal, SPI_CR_SPI_END_MASK)) {\r\n    BL_WR_REG(SPIx, SPI_INT_STS, BL_SET_REG_BIT(tmpVal, SPI_CR_SPI_END_CLR));\r\n\r\n    if (spiIntCbfArra[spiNo][SPI_INT_END] != NULL) {\r\n      spiIntCbfArra[spiNo][SPI_INT_END]();\r\n    }\r\n  }\r\n\r\n  /* TX fifo ready interrupt(fifo count > fifo threshold) */\r\n  if (BL_IS_REG_BIT_SET(tmpVal, SPI_TXF_INT) && !BL_IS_REG_BIT_SET(tmpVal, SPI_CR_SPI_TXF_MASK)) {\r\n    if (spiIntCbfArra[spiNo][SPI_INT_TX_FIFO_REQ] != NULL) {\r\n      spiIntCbfArra[spiNo][SPI_INT_TX_FIFO_REQ]();\r\n    }\r\n  }\r\n\r\n  /*  RX fifo ready interrupt(fifo count > fifo threshold) */\r\n  if (BL_IS_REG_BIT_SET(tmpVal, SPI_RXF_INT) && !BL_IS_REG_BIT_SET(tmpVal, SPI_CR_SPI_RXF_MASK)) {\r\n    if (spiIntCbfArra[spiNo][SPI_INT_RX_FIFO_REQ] != NULL) {\r\n      spiIntCbfArra[spiNo][SPI_INT_RX_FIFO_REQ]();\r\n    }\r\n  }\r\n\r\n  /* Slave mode transfer time-out interrupt,triggered when bus is idle for the given value */\r\n  if (BL_IS_REG_BIT_SET(tmpVal, SPI_STO_INT) && !BL_IS_REG_BIT_SET(tmpVal, SPI_CR_SPI_STO_MASK)) {\r\n    BL_WR_REG(SPIx, SPI_INT_STS, BL_SET_REG_BIT(tmpVal, SPI_CR_SPI_STO_CLR));\r\n\r\n    if (spiIntCbfArra[spiNo][SPI_INT_SLAVE_TIMEOUT] != NULL) {\r\n      spiIntCbfArra[spiNo][SPI_INT_SLAVE_TIMEOUT]();\r\n    }\r\n  }\r\n\r\n  /* Slave mode tx underrun error interrupt,trigged when tx is not ready during transfer */\r\n  if (BL_IS_REG_BIT_SET(tmpVal, SPI_TXU_INT) && !BL_IS_REG_BIT_SET(tmpVal, SPI_CR_SPI_TXU_MASK)) {\r\n    BL_WR_REG(SPIx, SPI_INT_STS, BL_SET_REG_BIT(tmpVal, SPI_CR_SPI_TXU_CLR));\r\n\r\n    if (spiIntCbfArra[spiNo][SPI_INT_SLAVE_UNDERRUN] != NULL) {\r\n      spiIntCbfArra[spiNo][SPI_INT_SLAVE_UNDERRUN]();\r\n    }\r\n  }\r\n\r\n  /* TX/RX fifo overflow/underflow interrupt */\r\n  if (BL_IS_REG_BIT_SET(tmpVal, SPI_FER_INT) && !BL_IS_REG_BIT_SET(tmpVal, SPI_CR_SPI_FER_MASK)) {\r\n    if (spiIntCbfArra[spiNo][SPI_INT_FIFO_ERROR] != NULL) {\r\n      spiIntCbfArra[spiNo][SPI_INT_FIFO_ERROR]();\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/*@} end of group SPI_Private_Functions */\r\n\r\n/** @defgroup  SPI_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI initialization function\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  spiCfg: SPI configuration structure pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_Init(SPI_ID_Type spiNo, SPI_CFG_Type *spiCfg) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_WORK_MODE_TYPE(spiCfg->mod));\r\n  CHECK_PARAM(IS_SPI_BYTE_INVERSE_TYPE(spiCfg->byteSequence));\r\n  CHECK_PARAM(IS_SPI_BIT_INVERSE_TYPE(spiCfg->bitSequence));\r\n  CHECK_PARAM(IS_SPI_CLK_PHASE_INVERSE_TYPE(spiCfg->clkPhaseInv));\r\n  CHECK_PARAM(IS_SPI_CLK_POLARITY_TYPE(spiCfg->clkPolarity));\r\n\r\n  /* Disable clock gate */\r\n  GLB_AHB_Slave1_Clock_Gate(DISABLE, BL_AHB_SLAVE1_SPI);\r\n\r\n  /* spi config */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_DEG_EN, spiCfg->deglitchEnable);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_M_CONT_EN, spiCfg->continuousEnable);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_BYTE_INV, spiCfg->byteSequence);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_BIT_INV, spiCfg->bitSequence);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_SCLK_PH, (spiCfg->clkPhaseInv + 1) & 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_SCLK_POL, spiCfg->clkPolarity);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_FRAME_SIZE, spiCfg->frameSize);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, tmpVal);\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(SPI_IRQn, SPI_IRQHandler);\r\n#endif\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI set default value of all registers function\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_DeInit(SPI_ID_Type spiNo) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n\r\n  if (SPI_ID_0 == spiNo) {\r\n    GLB_AHB_Slave1_Reset(BL_AHB_SLAVE1_SPI);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Length of data phase1/0,start/stop condition and interval between frame initialization\r\n                                                                                *         function\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  clockCfg: Clock configuration structure pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_ClockConfig(SPI_ID_Type spiNo, SPI_ClockCfg_Type *clockCfg) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n\r\n  /* Configure length of data phase1/0 and start/stop condition */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_PRD_0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_PRD_S, clockCfg->startLen - 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_PRD_P, clockCfg->stopLen - 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_PRD_D_PH_0, clockCfg->dataPhase0Len - 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_PRD_D_PH_1, clockCfg->dataPhase1Len - 1);\r\n  BL_WR_REG(SPIx, SPI_PRD_0, tmpVal);\r\n\r\n  /* Configure length of interval between frame */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_PRD_1);\r\n  BL_WR_REG(SPIx, SPI_PRD_1, BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_PRD_I, clockCfg->intervalLen - 1));\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI configure fifo function\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  fifoCfg: FIFO configuration structure pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_FifoConfig(SPI_ID_Type spiNo, SPI_FifoCfg_Type *fifoCfg) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n\r\n  /* Set fifo threshold value */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_TX_FIFO_TH, fifoCfg->txFifoThreshold);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_RX_FIFO_TH, fifoCfg->rxFifoThreshold);\r\n  BL_WR_REG(SPIx, SPI_FIFO_CONFIG_1, tmpVal);\r\n\r\n  /* Enable or disable dma function */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_DMA_TX_EN, fifoCfg->txFifoDmaEnable);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_DMA_RX_EN, fifoCfg->rxFifoDmaEnable);\r\n  BL_WR_REG(SPIx, SPI_FIFO_CONFIG_0, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set SPI SCK Clcok\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  clk: Clk\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_SetClock(SPI_ID_Type spiNo, uint32_t clk) {\r\n  uint32_t glb_div = 1, spi_div = 1;\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  if (clk > 36000000) {\r\n    clk     = 36000000;\r\n    glb_div = 1;\r\n    spi_div = 1;\r\n  } else if (clk > 140625) {\r\n    glb_div = 1;\r\n    spi_div = 36000000 / clk;\r\n  } else if (clk > 70312) {\r\n    glb_div = 2;\r\n    spi_div = 18000000 / clk;\r\n  } else if (clk > 35156) {\r\n    glb_div = 4;\r\n    spi_div = 9000000 / clk;\r\n  } else if (clk > 4394) {\r\n    glb_div = 32;\r\n    spi_div = 1125000 / clk;\r\n  } else {\r\n    glb_div = 32;\r\n    spi_div = 256;\r\n  }\r\n\r\n  /* Configure length of data phase1/0 and start/stop condition */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_PRD_0);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_PRD_S, spi_div - 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_PRD_P, spi_div - 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_PRD_D_PH_0, spi_div - 1);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_PRD_D_PH_1, spi_div - 1);\r\n  BL_WR_REG(SPIx, SPI_PRD_0, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(SPIx, SPI_PRD_1);\r\n  BL_WR_REG(SPIx, SPI_PRD_1, BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_PRD_I, spi_div - 1));\r\n\r\n  GLB_Set_SPI_CLK(ENABLE, glb_div - 1);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable spi transfer\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  modeType: Master or slave mode select\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_Enable(SPI_ID_Type spiNo, SPI_WORK_MODE_Type modeType) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_WORK_MODE_TYPE(modeType));\r\n\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n\r\n  if (modeType != SPI_WORK_MODE_SLAVE) {\r\n    /* master mode */\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_S_EN);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SPI_CR_SPI_M_EN);\r\n  } else {\r\n    /* slave mode */\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_M_EN);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, SPI_CR_SPI_S_EN);\r\n  }\r\n\r\n  BL_WR_REG(SPIx, SPI_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable spi transfer\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  modeType: Master or slave mode select\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_Disable(SPI_ID_Type spiNo, SPI_WORK_MODE_Type modeType) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_WORK_MODE_TYPE(modeType));\r\n\r\n  /* close master and slave */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_M_EN);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_S_EN);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set time-out value to trigger interrupt when spi bus is idle for the given value\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  value: Time value\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_SetTimeOutValue(SPI_ID_Type spiNo, uint16_t value) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n\r\n  /* Set time-out value */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_STO_VALUE);\r\n  BL_WR_REG(SPIx, SPI_STO_VALUE, BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_STO_VALUE, value - 1));\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Set de-glitch function cycle count value\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  cnt: De-glitch function cycle count\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_SetDeglitchCount(SPI_ID_Type spiNo, uint8_t cnt) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n\r\n  /* Set count value */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_DEG_CNT, cnt);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Enable rx data ignore function and set start/stop point\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  startPoint: Start point\r\n                                                                                * @param  stopPoint: Stop point\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_RxIgnoreEnable(SPI_ID_Type spiNo, uint8_t startPoint, uint8_t stopPoint) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n\r\n  /* Enable rx ignore function */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_SET_REG_BIT(tmpVal, SPI_CR_SPI_RXD_IGNR_EN));\r\n\r\n  /* Set start and stop point */\r\n  tmpVal = startPoint << SPI_CR_SPI_RXD_IGNR_S_POS | stopPoint;\r\n  BL_WR_REG(SPIx, SPI_RXD_IGNR, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Disable rx data ignore function\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_RxIgnoreDisable(SPI_ID_Type spiNo) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n\r\n  /* Disable rx ignore function */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_RXD_IGNR_EN));\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Clear tx fifo and tx fifo overflow/underflow status\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_ClrTxFifo(SPI_ID_Type spiNo) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n\r\n  /* Clear tx fifo */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_0);\r\n  BL_WR_REG(SPIx, SPI_FIFO_CONFIG_0, BL_SET_REG_BIT(tmpVal, SPI_TX_FIFO_CLR));\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Clear rx fifo and rx fifo overflow/underflow status\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_ClrRxFifo(SPI_ID_Type spiNo) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n\r\n  /* Clear rx fifo */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_0);\r\n  BL_WR_REG(SPIx, SPI_FIFO_CONFIG_0, BL_SET_REG_BIT(tmpVal, SPI_RX_FIFO_CLR));\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Clear spi interrupt status\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  intType: SPI interrupt type\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_ClrIntStatus(SPI_ID_Type spiNo, SPI_INT_Type intType) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n\r\n  /* Clear certain or all interrupt */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_INT_STS);\r\n\r\n  if (SPI_INT_ALL == intType) {\r\n    tmpVal |= 0x1f << SPI_CR_SPI_END_CLR_POS;\r\n  } else {\r\n    tmpVal |= 1 << (intType + SPI_CR_SPI_END_CLR_POS);\r\n  }\r\n\r\n  BL_WR_REG(SPIx, SPI_INT_STS, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI mask or unmask certain or all interrupt\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  intType: SPI interrupt type\r\n                                                                                * @param  intMask: SPI interrupt mask value( MASK:disbale interrupt,UNMASK:enable interrupt )\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_IntMask(SPI_ID_Type spiNo, SPI_INT_Type intType, BL_Mask_Type intMask) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_INT_TYPE(intType));\r\n  CHECK_PARAM(IS_BL_MASK_TYPE(intMask));\r\n\r\n  tmpVal = BL_RD_REG(SPIx, SPI_INT_STS);\r\n\r\n  /* Mask or unmask certain or all interrupt */\r\n  if (SPI_INT_ALL == intType) {\r\n    if (MASK == intMask) {\r\n      tmpVal |= 0x3f << SPI_CR_SPI_END_MASK_POS;\r\n    } else {\r\n      tmpVal &= ~(0x3f << SPI_CR_SPI_END_MASK_POS);\r\n    }\r\n  } else {\r\n    if (MASK == intMask) {\r\n      tmpVal |= 1 << (intType + SPI_CR_SPI_END_MASK_POS);\r\n    } else {\r\n      tmpVal &= ~(1 << (intType + SPI_CR_SPI_END_MASK_POS));\r\n    }\r\n  }\r\n\r\n  /* Write back */\r\n  BL_WR_REG(SPIx, SPI_INT_STS, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Install spi interrupt callback function\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  intType: SPI interrupt type\r\n                                                                                * @param  cbFun: Pointer to interrupt callback function. The type should be void (*fn)(void)\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_Int_Callback_Install(SPI_ID_Type spiNo, SPI_INT_Type intType, intCallback_Type *cbFun) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_INT_TYPE(intType));\r\n\r\n  spiIntCbfArra[spiNo][intType] = cbFun;\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI write data to tx fifo\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  data: Data to write\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_SendData(SPI_ID_Type spiNo, uint32_t data) {\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n\r\n  /* Write tx fifo */\r\n  BL_WR_REG(SPIx, SPI_FIFO_WDATA, data);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI send 8-bit datas\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  buff: Buffer of datas\r\n                                                                                * @param  length: Length of buffer\r\n                                                                                * @param  timeoutType: Enable or disable timeout judgment\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_Send_8bits(SPI_ID_Type spiNo, uint8_t *buff, uint32_t length, SPI_Timeout_Type timeoutType) {\r\n  uint32_t tmpVal;\r\n  uint32_t txLen = 0;\r\n  uint32_t rData;\r\n  uint32_t SPIx       = spiAddr[spiNo];\r\n  uint32_t timeoutCnt = SPI_TX_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_TIMEOUT_TYPE(timeoutType));\r\n\r\n  /* Set valid width for each fifo entry */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_FRAME_SIZE, 0));\r\n\r\n  /* Disable rx ignore */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_RXD_IGNR_EN));\r\n\r\n  /* Clear tx and rx fifo */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_TX_FIFO_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_RX_FIFO_CLR);\r\n  BL_WR_REG(SPIx, SPI_FIFO_CONFIG_0, tmpVal);\r\n\r\n  /* Fill tx fifo */\r\n  tmpVal = length <= (SPI_TX_FIFO_SIZE) ? length : SPI_TX_FIFO_SIZE;\r\n\r\n  for (txLen = 0; txLen < tmpVal; txLen++) {\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, (uint32_t)buff[txLen]);\r\n  }\r\n\r\n  /* Wait receive data and send the rest of the data */\r\n  for (; txLen < length; txLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    rData |= BL_RD_REG(SPIx, SPI_FIFO_RDATA);\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, (uint32_t)buff[txLen]);\r\n  }\r\n\r\n  /* Wait receive the rest of the data */\r\n  for (txLen = 0; txLen < tmpVal; txLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    rData |= BL_RD_REG(SPIx, SPI_FIFO_RDATA);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI send 16-bit datas\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  buff: Buffer of datas\r\n                                                                                * @param  length: Length of buffer\r\n                                                                                * @param  timeoutType: Enable or disable timeout judgment\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_Send_16bits(SPI_ID_Type spiNo, uint16_t *buff, uint32_t length, SPI_Timeout_Type timeoutType) {\r\n  uint32_t tmpVal;\r\n  uint32_t txLen = 0;\r\n  uint32_t rData;\r\n  uint32_t SPIx       = spiAddr[spiNo];\r\n  uint32_t timeoutCnt = SPI_TX_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_TIMEOUT_TYPE(timeoutType));\r\n\r\n  /* Set valid width for each fifo entry */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_FRAME_SIZE, 1));\r\n\r\n  /* Disable rx ignore */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_RXD_IGNR_EN));\r\n\r\n  /* Clear tx and rx fifo */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_TX_FIFO_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_RX_FIFO_CLR);\r\n  BL_WR_REG(SPIx, SPI_FIFO_CONFIG_0, tmpVal);\r\n\r\n  /* Fill tx fifo */\r\n  tmpVal = length <= (SPI_TX_FIFO_SIZE) ? length : SPI_TX_FIFO_SIZE;\r\n\r\n  for (txLen = 0; txLen < tmpVal; txLen++) {\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, (uint32_t)buff[txLen]);\r\n  }\r\n\r\n  /* Wait receive data and send the rest of the data */\r\n  for (; txLen < length; txLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    rData |= BL_RD_REG(SPIx, SPI_FIFO_RDATA);\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, (uint32_t)buff[txLen]);\r\n  }\r\n\r\n  /* Wait receive the rest of the data */\r\n  for (txLen = 0; txLen < tmpVal; txLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    rData |= BL_RD_REG(SPIx, SPI_FIFO_RDATA);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI send 24-bit datas\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  buff: Buffer of datas\r\n                                                                                * @param  length: Length of buffer\r\n                                                                                * @param  timeoutType: Enable or disable timeout judgment\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_Send_24bits(SPI_ID_Type spiNo, uint32_t *buff, uint32_t length, SPI_Timeout_Type timeoutType) {\r\n  uint32_t tmpVal;\r\n  uint32_t txLen = 0;\r\n  uint32_t rData;\r\n  uint32_t SPIx       = spiAddr[spiNo];\r\n  uint32_t timeoutCnt = SPI_TX_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_TIMEOUT_TYPE(timeoutType));\r\n\r\n  /* Set valid width for each fifo entry */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_FRAME_SIZE, 2));\r\n\r\n  /* Disable rx ignore */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_RXD_IGNR_EN));\r\n\r\n  /* Clear tx and rx fifo */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_TX_FIFO_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_RX_FIFO_CLR);\r\n  BL_WR_REG(SPIx, SPI_FIFO_CONFIG_0, tmpVal);\r\n\r\n  /* Fill tx fifo */\r\n  tmpVal = length <= (SPI_TX_FIFO_SIZE) ? length : SPI_TX_FIFO_SIZE;\r\n\r\n  for (txLen = 0; txLen < tmpVal; txLen++) {\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, buff[txLen]);\r\n  }\r\n\r\n  /* Wait receive data and send the rest of the data */\r\n  for (; txLen < length; txLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    rData |= BL_RD_REG(SPIx, SPI_FIFO_RDATA);\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, buff[txLen]);\r\n  }\r\n\r\n  /* Wait receive the rest of the data */\r\n  for (txLen = 0; txLen < tmpVal; txLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    rData |= BL_RD_REG(SPIx, SPI_FIFO_RDATA);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI send 32-bit datas\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  buff: Buffer of datas\r\n                                                                                * @param  length: Length of buffer\r\n                                                                                * @param  timeoutType: Enable or disable timeout judgment\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_Send_32bits(SPI_ID_Type spiNo, uint32_t *buff, uint32_t length, SPI_Timeout_Type timeoutType) {\r\n  uint32_t tmpVal;\r\n  uint32_t txLen = 0;\r\n  uint32_t rData;\r\n  uint32_t SPIx       = spiAddr[spiNo];\r\n  uint32_t timeoutCnt = SPI_TX_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_TIMEOUT_TYPE(timeoutType));\r\n\r\n  /* Set valid width for each fifo entry */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_FRAME_SIZE, 3));\r\n\r\n  /* Disable rx ignore */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_RXD_IGNR_EN));\r\n\r\n  /* Clear tx and rx fifo */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_TX_FIFO_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_RX_FIFO_CLR);\r\n  BL_WR_REG(SPIx, SPI_FIFO_CONFIG_0, tmpVal);\r\n\r\n  /* Fill tx fifo */\r\n  tmpVal = length <= (SPI_TX_FIFO_SIZE) ? length : SPI_TX_FIFO_SIZE;\r\n\r\n  for (txLen = 0; txLen < tmpVal; txLen++) {\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, buff[txLen]);\r\n  }\r\n\r\n  /* Wait receive data and send the rest of the data */\r\n  for (; txLen < length; txLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    rData |= BL_RD_REG(SPIx, SPI_FIFO_RDATA);\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, buff[txLen]);\r\n  }\r\n\r\n  /* Wait receive the rest of the data */\r\n  for (txLen = 0; txLen < tmpVal; txLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    rData |= BL_RD_REG(SPIx, SPI_FIFO_RDATA);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI receive 8-bit datas\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  buff: Buffer of datas\r\n                                                                                * @param  length: Length of buffer\r\n                                                                                * @param  timeoutType: Enable or disable timeout judgment\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_Recv_8bits(SPI_ID_Type spiNo, uint8_t *buff, uint32_t length, SPI_Timeout_Type timeoutType) {\r\n  uint32_t tmpVal;\r\n  uint32_t rxLen      = 0;\r\n  uint32_t SPIx       = spiAddr[spiNo];\r\n  uint32_t timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_TIMEOUT_TYPE(timeoutType));\r\n\r\n  /* Set valid width for each fifo entry */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_FRAME_SIZE, 0));\r\n\r\n  /* Disable rx ignore */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_RXD_IGNR_EN));\r\n\r\n  /* Clear tx and rx fifo */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_TX_FIFO_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_RX_FIFO_CLR);\r\n  BL_WR_REG(SPIx, SPI_FIFO_CONFIG_0, tmpVal);\r\n\r\n  /* Fill tx fifo with 0 */\r\n  tmpVal = length <= (SPI_TX_FIFO_SIZE) ? length : SPI_TX_FIFO_SIZE;\r\n\r\n  for (rxLen = 0; rxLen < tmpVal; rxLen++) {\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, 0);\r\n  }\r\n\r\n  /* Wait receive data and send the rest of the data 0 */\r\n  for (rxLen = 0; rxLen < length - tmpVal; rxLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    buff[rxLen] = (uint8_t)(BL_RD_REG(SPIx, SPI_FIFO_RDATA) & 0xff);\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, 0);\r\n  }\r\n\r\n  /* Wait receive the rest of the data */\r\n  for (; rxLen < length; rxLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    buff[rxLen] = (uint8_t)(BL_RD_REG(SPIx, SPI_FIFO_RDATA) & 0xff);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI receive 16-bit datas\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  buff: Buffer of datas\r\n                                                                                * @param  length: Length of buffer\r\n                                                                                * @param  timeoutType: Enable or disable timeout judgment\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_Recv_16bits(SPI_ID_Type spiNo, uint16_t *buff, uint32_t length, SPI_Timeout_Type timeoutType) {\r\n  uint32_t tmpVal;\r\n  uint32_t rxLen      = 0;\r\n  uint32_t SPIx       = spiAddr[spiNo];\r\n  uint32_t timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_TIMEOUT_TYPE(timeoutType));\r\n\r\n  /* Set valid width for each fifo entry */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_FRAME_SIZE, 1));\r\n\r\n  /* Disable rx ignore */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_RXD_IGNR_EN));\r\n\r\n  /* Clear tx and rx fifo */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_TX_FIFO_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_RX_FIFO_CLR);\r\n  BL_WR_REG(SPIx, SPI_FIFO_CONFIG_0, tmpVal);\r\n\r\n  /* Fill tx fifo with 0 */\r\n  tmpVal = length <= (SPI_TX_FIFO_SIZE) ? length : SPI_TX_FIFO_SIZE;\r\n\r\n  for (rxLen = 0; rxLen < tmpVal; rxLen++) {\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, 0);\r\n  }\r\n\r\n  /* Wait receive data and send the rest of the data 0 */\r\n  for (rxLen = 0; rxLen < length - tmpVal; rxLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    buff[rxLen++] = (uint16_t)(BL_RD_REG(SPIx, SPI_FIFO_RDATA) & 0xffff);\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, 0);\r\n  }\r\n\r\n  /* Wait receive the rest of the data */\r\n  for (; rxLen < length; rxLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    buff[rxLen++] = (uint16_t)(BL_RD_REG(SPIx, SPI_FIFO_RDATA) & 0xffff);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI receive 24-bit datas\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  buff: Buffer of datas\r\n                                                                                * @param  length: Length of buffer\r\n                                                                                * @param  timeoutType: Enable or disable timeout judgment\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_Recv_24bits(SPI_ID_Type spiNo, uint32_t *buff, uint32_t length, SPI_Timeout_Type timeoutType) {\r\n  uint32_t tmpVal;\r\n  uint32_t rxLen      = 0;\r\n  uint32_t SPIx       = spiAddr[spiNo];\r\n  uint32_t timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_TIMEOUT_TYPE(timeoutType));\r\n\r\n  /* Set valid width for each fifo entry */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_FRAME_SIZE, 2));\r\n\r\n  /* Disable rx ignore */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_RXD_IGNR_EN));\r\n\r\n  /* Clear tx and rx fifo */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_TX_FIFO_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_RX_FIFO_CLR);\r\n  BL_WR_REG(SPIx, SPI_FIFO_CONFIG_0, tmpVal);\r\n\r\n  /* Fill tx fifo with 0 */\r\n  tmpVal = length <= (SPI_TX_FIFO_SIZE) ? length : SPI_TX_FIFO_SIZE;\r\n\r\n  for (rxLen = 0; rxLen < tmpVal; rxLen++) {\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, 0);\r\n  }\r\n\r\n  /* Wait receive data and send the rest of the data 0 */\r\n  for (rxLen = 0; rxLen < length - tmpVal; rxLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    buff[rxLen++] = BL_RD_REG(SPIx, SPI_FIFO_RDATA) & 0xffffff;\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, 0);\r\n  }\r\n\r\n  /* Wait receive the rest of the data */\r\n  for (; rxLen < length; rxLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    buff[rxLen++] = BL_RD_REG(SPIx, SPI_FIFO_RDATA) & 0xffffff;\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI receive 32-bit datas\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  buff: Buffer of datas\r\n                                                                                * @param  length: Length of buffer\r\n                                                                                * @param  timeoutType: Enable or disable timeout judgment\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_Recv_32bits(SPI_ID_Type spiNo, uint32_t *buff, uint32_t length, SPI_Timeout_Type timeoutType) {\r\n  uint32_t tmpVal;\r\n  uint32_t rxLen      = 0;\r\n  uint32_t SPIx       = spiAddr[spiNo];\r\n  uint32_t timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_TIMEOUT_TYPE(timeoutType));\r\n\r\n  /* Set valid width for each fifo entry */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_FRAME_SIZE, 3));\r\n\r\n  /* Disable rx ignore */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_RXD_IGNR_EN));\r\n\r\n  /* Clear tx and rx fifo */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_TX_FIFO_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_RX_FIFO_CLR);\r\n  BL_WR_REG(SPIx, SPI_FIFO_CONFIG_0, tmpVal);\r\n\r\n  /* Fill tx fifo with 0 */\r\n  tmpVal = length <= (SPI_TX_FIFO_SIZE) ? length : SPI_TX_FIFO_SIZE;\r\n\r\n  for (rxLen = 0; rxLen < tmpVal; rxLen++) {\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, 0);\r\n  }\r\n\r\n  /* Wait receive data and send the rest of the data 0 */\r\n  for (rxLen = 0; rxLen < length - tmpVal; rxLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    buff[rxLen++] = BL_RD_REG(SPIx, SPI_FIFO_RDATA);\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, 0);\r\n  }\r\n\r\n  /* Wait receive the rest of the data */\r\n  for (; rxLen < length; rxLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    buff[rxLen++] = BL_RD_REG(SPIx, SPI_FIFO_RDATA);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI send and receive 8-bit datas at the same time\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  sendBuff: Buffer of datas to send\r\n                                                                                * @param  recvBuff: Buffer of datas received\r\n                                                                                * @param  length: Length of buffer\r\n                                                                                * @param  timeoutType: Enable or disable timeout judgment\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_SendRecv_8bits(SPI_ID_Type spiNo, uint8_t *sendBuff, uint8_t *recvBuff, uint32_t length, SPI_Timeout_Type timeoutType) {\r\n  uint32_t tmpVal;\r\n  uint32_t txLen      = 0;\r\n  uint32_t SPIx       = spiAddr[spiNo];\r\n  uint32_t timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_TIMEOUT_TYPE(timeoutType));\r\n\r\n  /* Set valid width for each fifo entry */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_FRAME_SIZE, 0));\r\n\r\n  /* Disable rx ignore */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_RXD_IGNR_EN));\r\n\r\n  /* Clear tx and rx fifo */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_TX_FIFO_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_RX_FIFO_CLR);\r\n  BL_WR_REG(SPIx, SPI_FIFO_CONFIG_0, tmpVal);\r\n\r\n  /* Fill tx fifo */\r\n  tmpVal = length <= (SPI_TX_FIFO_SIZE) ? length : SPI_TX_FIFO_SIZE;\r\n\r\n  for (txLen = 0; txLen < tmpVal; txLen++) {\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, (uint32_t)sendBuff[txLen]);\r\n  }\r\n\r\n  /* Wait receive data and send the rest of the data */\r\n  for (; txLen < length; txLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    recvBuff[txLen - tmpVal] = (uint8_t)(BL_RD_REG(SPIx, SPI_FIFO_RDATA) & 0xff);\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, (uint32_t)sendBuff[txLen]);\r\n  }\r\n\r\n  /* Wait receive the rest of the data */\r\n  for (txLen = 0; txLen < tmpVal; txLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    recvBuff[length - tmpVal + txLen] = (uint8_t)(BL_RD_REG(SPIx, SPI_FIFO_RDATA) & 0xff);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI send and receive 16-bit datas at the same time\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  sendBuff: Buffer of datas to send\r\n                                                                                * @param  recvBuff: Buffer of datas received\r\n                                                                                * @param  length: Length of buffer\r\n                                                                                * @param  timeoutType: Enable or disable timeout judgment\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_SendRecv_16bits(SPI_ID_Type spiNo, uint16_t *sendBuff, uint16_t *recvBuff, uint32_t length, SPI_Timeout_Type timeoutType) {\r\n  uint32_t tmpVal;\r\n  uint32_t txLen      = 0;\r\n  uint32_t SPIx       = spiAddr[spiNo];\r\n  uint32_t timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_TIMEOUT_TYPE(timeoutType));\r\n\r\n  /* Set valid width for each fifo entry */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_FRAME_SIZE, 1));\r\n\r\n  /* Disable rx ignore */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_RXD_IGNR_EN));\r\n\r\n  /* Clear tx and rx fifo */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_TX_FIFO_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_RX_FIFO_CLR);\r\n  BL_WR_REG(SPIx, SPI_FIFO_CONFIG_0, tmpVal);\r\n\r\n  /* Fill tx fifo */\r\n  tmpVal = length <= (SPI_TX_FIFO_SIZE) ? length : SPI_TX_FIFO_SIZE;\r\n\r\n  for (txLen = 0; txLen < tmpVal; txLen++) {\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, (uint32_t)sendBuff[txLen]);\r\n  }\r\n\r\n  /* Wait receive data and send the rest of the data */\r\n  for (; txLen < length; txLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    recvBuff[txLen - tmpVal] = (uint16_t)(BL_RD_REG(SPIx, SPI_FIFO_RDATA) & 0xffff);\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, (uint32_t)sendBuff[txLen]);\r\n  }\r\n\r\n  /* Wait receive the rest of the data */\r\n  for (txLen = 0; txLen < tmpVal; txLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    recvBuff[length - tmpVal + txLen] = (uint16_t)(BL_RD_REG(SPIx, SPI_FIFO_RDATA) & 0xffff);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI send and receive 24-bit datas at the same time\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  sendBuff: Buffer of datas to send\r\n                                                                                * @param  recvBuff: Buffer of datas received\r\n                                                                                * @param  length: Length of buffer\r\n                                                                                * @param  timeoutType: Enable or disable timeout judgment\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_SendRecv_24bits(SPI_ID_Type spiNo, uint32_t *sendBuff, uint32_t *recvBuff, uint32_t length, SPI_Timeout_Type timeoutType) {\r\n  uint32_t tmpVal;\r\n  uint32_t txLen      = 0;\r\n  uint32_t SPIx       = spiAddr[spiNo];\r\n  uint32_t timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_TIMEOUT_TYPE(timeoutType));\r\n\r\n  /* Set valid width for each fifo entry */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_FRAME_SIZE, 2));\r\n\r\n  /* Disable rx ignore */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_RXD_IGNR_EN));\r\n\r\n  /* Clear tx and rx fifo */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_TX_FIFO_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_RX_FIFO_CLR);\r\n  BL_WR_REG(SPIx, SPI_FIFO_CONFIG_0, tmpVal);\r\n\r\n  /* Fill tx fifo */\r\n  tmpVal = length <= (SPI_TX_FIFO_SIZE) ? length : SPI_TX_FIFO_SIZE;\r\n\r\n  for (txLen = 0; txLen < tmpVal; txLen++) {\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, sendBuff[txLen]);\r\n  }\r\n\r\n  /* Wait receive data and send the rest of the data */\r\n  for (; txLen < length; txLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    recvBuff[txLen - tmpVal] = BL_RD_REG(SPIx, SPI_FIFO_RDATA) & 0xffffff;\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, sendBuff[txLen]);\r\n  }\r\n\r\n  /* Wait receive the rest of the data */\r\n  for (txLen = 0; txLen < tmpVal; txLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    recvBuff[length - tmpVal + txLen] = BL_RD_REG(SPIx, SPI_FIFO_RDATA) & 0xffffff;\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI send and receive 32-bit datas at the same time\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  sendBuff: Buffer of datas to send\r\n                                                                                * @param  recvBuff: Buffer of datas received\r\n                                                                                * @param  length: Length of buffer\r\n                                                                                * @param  timeoutType: Enable or disable timeout judgment\r\n                                                                                *\r\n                                                                                * @return SUCCESS\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type SPI_SendRecv_32bits(SPI_ID_Type spiNo, uint32_t *sendBuff, uint32_t *recvBuff, uint32_t length, SPI_Timeout_Type timeoutType) {\r\n  uint32_t tmpVal;\r\n  uint32_t txLen      = 0;\r\n  uint32_t SPIx       = spiAddr[spiNo];\r\n  uint32_t timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_TIMEOUT_TYPE(timeoutType));\r\n\r\n  /* Set valid width for each fifo entry */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, SPI_CR_SPI_FRAME_SIZE, 3));\r\n\r\n  /* Disable rx ignore */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_CONFIG);\r\n  BL_WR_REG(SPIx, SPI_CONFIG, BL_CLR_REG_BIT(tmpVal, SPI_CR_SPI_RXD_IGNR_EN));\r\n\r\n  /* Clear tx and rx fifo */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_0);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_TX_FIFO_CLR);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, SPI_RX_FIFO_CLR);\r\n  BL_WR_REG(SPIx, SPI_FIFO_CONFIG_0, tmpVal);\r\n\r\n  /* Fill tx fifo */\r\n  tmpVal = length <= (SPI_TX_FIFO_SIZE) ? length : SPI_TX_FIFO_SIZE;\r\n\r\n  for (txLen = 0; txLen < tmpVal; txLen++) {\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, sendBuff[txLen]);\r\n  }\r\n\r\n  /* Wait receive data and send the rest of the data */\r\n  for (; txLen < length; txLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    recvBuff[txLen - tmpVal] = BL_RD_REG(SPIx, SPI_FIFO_RDATA);\r\n    BL_WR_REG(SPIx, SPI_FIFO_WDATA, sendBuff[txLen]);\r\n  }\r\n\r\n  /* Wait receive the rest of the data */\r\n  for (txLen = 0; txLen < tmpVal; txLen++) {\r\n    timeoutCnt = SPI_RX_TIMEOUT_COUNT;\r\n\r\n    while (SPI_GetRxFifoCount(spiNo) == 0) {\r\n      if (timeoutType) {\r\n        timeoutCnt--;\r\n\r\n        if (timeoutCnt == 0) {\r\n          return TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    recvBuff[length - tmpVal + txLen] = BL_RD_REG(SPIx, SPI_FIFO_RDATA);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI read data from rx fifo\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                *\r\n                                                                                * @return Data readed\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t SPI_ReceiveData(SPI_ID_Type spiNo) {\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n\r\n  return BL_RD_REG(SPIx, SPI_FIFO_RDATA);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get tx fifo available count value function\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                *\r\n                                                                                * @return Count value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint8_t SPI_GetTxFifoCount(SPI_ID_Type spiNo) {\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n\r\n  /* Get count value */\r\n  return BL_GET_REG_BITS_VAL(BL_RD_REG(SPIx, SPI_FIFO_CONFIG_1), SPI_TX_FIFO_CNT);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get rx fifo available count value function\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                *\r\n                                                                                * @return Count value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint8_t SPI_GetRxFifoCount(SPI_ID_Type spiNo) {\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n\r\n  /* Get count value */\r\n  return BL_GET_REG_BITS_VAL(BL_RD_REG(SPIx, SPI_FIFO_CONFIG_1), SPI_RX_FIFO_CNT);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get spi interrupt status\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  intType: SPI interrupt type\r\n                                                                                *\r\n                                                                                * @return Status of interrupt\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type SPI_GetIntStatus(SPI_ID_Type spiNo, SPI_INT_Type intType) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_INT_TYPE(intType));\r\n\r\n  /* Get certain or all interrupt status */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_INT_STS);\r\n\r\n  if (SPI_INT_ALL == intType) {\r\n    if ((tmpVal & 0x3f) != 0) {\r\n      return SET;\r\n    } else {\r\n      return RESET;\r\n    }\r\n  } else {\r\n    if ((tmpVal & (1U << intType)) != 0) {\r\n      return SET;\r\n    } else {\r\n      return RESET;\r\n    }\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get indicator of spi bus busy\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                *\r\n                                                                                * @return Status of spi bus\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type SPI_GetBusyStatus(SPI_ID_Type spiNo) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n\r\n  /* Get bus busy status */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_BUS_BUSY);\r\n\r\n  if (BL_IS_REG_BIT_SET(tmpVal, SPI_STS_SPI_BUS_BUSY)) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get tx/rx fifo overflow or underflow status\r\n                                                                                *\r\n                                                                                * @param  spiNo: SPI ID type\r\n                                                                                * @param  fifoSts: Select tx/rx overflow or underflow\r\n                                                                                *\r\n                                                                                * @return Status of tx/rx fifo\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type SPI_GetFifoStatus(SPI_ID_Type spiNo, SPI_FifoStatus_Type fifoSts) {\r\n  uint32_t tmpVal;\r\n  uint32_t SPIx = spiAddr[spiNo];\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_SPI_ID_TYPE(spiNo));\r\n  CHECK_PARAM(IS_SPI_FIFOSTATUS_TYPE(fifoSts));\r\n\r\n  /* Get tx/rx fifo overflow or underflow status */\r\n  tmpVal = BL_RD_REG(SPIx, SPI_FIFO_CONFIG_0);\r\n\r\n  if ((tmpVal & (1U << (fifoSts + SPI_TX_FIFO_OVERFLOW_POS))) != 0) {\r\n    return SET;\r\n  } else {\r\n    return RESET;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  SPI interrupt handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid SPI_IRQHandler(void) { SPI_IntHandler(SPI_ID_0); }\r\n#endif\r\n\r\n/*@} end of group SPI_Public_Functions */\r\n\r\n/*@} end of group SPI */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_timer.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_timer.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_timer.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  TIMER\r\n *  @{\r\n */\r\n\r\n/** @defgroup  TIMER_Private_Macros\r\n *  @{\r\n */\r\n#define TIMER_MAX_MATCH 3\r\n\r\n/*@} end of group TIMER_Private_Macros */\r\n\r\n/** @defgroup  TIMER_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group TIMER_Private_Types */\r\n\r\n/** @defgroup  TIMER_Private_Variables\r\n *  @{\r\n */\r\nintCallback_Type *timerIntCbfArra[3][TIMER_INT_ALL] = {\r\n    {NULL, NULL, NULL},\r\n    {NULL, NULL, NULL},\r\n    {NULL, NULL, NULL}\r\n};\r\n\r\n/*@} end of group TIMER_Private_Variables */\r\n\r\n/** @defgroup  TIMER_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group TIMER_Global_Variables */\r\n\r\n/** @defgroup  TIMER_Private_Fun_Declaration\r\n *  @{\r\n */\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nstatic void TIMER_IntHandler(IRQn_Type irqNo, TIMER_Chan_Type timerCh);\r\n#endif\r\n\r\n/*@} end of group TIMER_Private_Fun_Declaration */\r\n\r\n/** @defgroup  TIMER_Private_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER interrupt common handler function\r\n                                                                                *\r\n                                                                                * @param  irqNo: Interrupt ID type\r\n                                                                                * @param  timerCh: TIMER channel type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid TIMER_IntHandler(IRQn_Type irqNo, TIMER_Chan_Type timerCh) {\r\n  uint32_t intId;\r\n  uint32_t tmpVal;\r\n  uint32_t tmpAddr;\r\n\r\n  intId   = BL_RD_WORD(TIMER_BASE + TIMER_TMSR2_OFFSET + 4 * timerCh);\r\n  tmpAddr = TIMER_BASE + TIMER_TICR2_OFFSET + 4 * timerCh;\r\n  tmpVal  = BL_RD_WORD(tmpAddr);\r\n\r\n  /* Comparator 0 match interrupt */\r\n  if (BL_IS_REG_BIT_SET(intId, TIMER_TMSR_0)) {\r\n    BL_WR_WORD(tmpAddr, BL_SET_REG_BIT(tmpVal, TIMER_TCLR_0));\r\n\r\n    if (timerIntCbfArra[irqNo - TIMER_CH0_IRQn][TIMER_INT_COMP_0] != NULL) {\r\n      /* Call the callback function */\r\n      timerIntCbfArra[irqNo - TIMER_CH0_IRQn][TIMER_INT_COMP_0]();\r\n    }\r\n  }\r\n\r\n  /* Comparator 1 match interrupt */\r\n  if (BL_IS_REG_BIT_SET(intId, TIMER_TMSR_1)) {\r\n    BL_WR_WORD(tmpAddr, BL_SET_REG_BIT(tmpVal, TIMER_TCLR_1));\r\n\r\n    if (timerIntCbfArra[irqNo - TIMER_CH0_IRQn][TIMER_INT_COMP_1] != NULL) {\r\n      /* Call the callback function */\r\n      timerIntCbfArra[irqNo - TIMER_CH0_IRQn][TIMER_INT_COMP_1]();\r\n    }\r\n  }\r\n\r\n  /* Comparator 2 match interrupt */\r\n  if (BL_IS_REG_BIT_SET(intId, TIMER_TMSR_2)) {\r\n    BL_WR_WORD(tmpAddr, BL_SET_REG_BIT(tmpVal, TIMER_TCLR_2));\r\n\r\n    if (timerIntCbfArra[irqNo - TIMER_CH0_IRQn][TIMER_INT_COMP_2] != NULL) {\r\n      /* Call the callback function */\r\n      timerIntCbfArra[irqNo - TIMER_CH0_IRQn][TIMER_INT_COMP_2]();\r\n    }\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get the specified channel and match comparator value\r\n                                                                                *\r\n                                                                                * @param  timerCh: TIMER channel type\r\n                                                                                * @param  cmpNo: TIMER comparator ID type\r\n                                                                                *\r\n                                                                                * @return Match comapre register value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t TIMER_GetCompValue(TIMER_Chan_Type timerCh, TIMER_Comp_ID_Type cmpNo) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_TIMER_CHAN_TYPE(timerCh));\r\n  CHECK_PARAM(IS_TIMER_COMP_ID_TYPE(cmpNo));\r\n\r\n  tmpVal = BL_RD_WORD(TIMER_BASE + TIMER_TMR2_0_OFFSET + 4 * (TIMER_MAX_MATCH * timerCh + cmpNo));\r\n  return tmpVal;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER set specified channel and comparator compare value\r\n                                                                                *\r\n                                                                                * @param  timerCh: TIMER channel type\r\n                                                                                * @param  cmpNo: TIMER comparator ID type\r\n                                                                                * @param  val: TIMER match comapre register value\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid TIMER_SetCompValue(TIMER_Chan_Type timerCh, TIMER_Comp_ID_Type cmpNo, uint32_t val) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_TIMER_CHAN_TYPE(timerCh));\r\n  CHECK_PARAM(IS_TIMER_COMP_ID_TYPE(cmpNo));\r\n\r\n  BL_WR_WORD(TIMER_BASE + TIMER_TMR2_0_OFFSET + 4 * (TIMER_MAX_MATCH * timerCh + cmpNo), val);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER get the specified channel count value\r\n                                                                                *\r\n                                                                                * @param  timerCh: TIMER channel type\r\n                                                                                *\r\n                                                                                * @return TIMER count register value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t TIMER_GetCounterValue(TIMER_Chan_Type timerCh) {\r\n  uint32_t tmpVal;\r\n  uint32_t tmpAddr;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_TIMER_CHAN_TYPE(timerCh));\r\n\r\n  /* TO avoid risk of reading, don't read TCVWR directly*/\r\n  /* request for read*/\r\n  tmpAddr = TIMER_BASE + TIMER_TCVWR2_OFFSET + 4 * timerCh;\r\n  BL_WR_WORD(tmpAddr, 1);\r\n\r\n  /* Need wait */\r\n  tmpVal = BL_RD_WORD(tmpAddr);\r\n  tmpVal = BL_RD_WORD(tmpAddr);\r\n  tmpVal = BL_RD_WORD(tmpAddr);\r\n\r\n  return tmpVal;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER get specified channel and comparator match status\r\n                                                                                *\r\n                                                                                * @param  timerCh: TIMER channel type\r\n                                                                                * @param  cmpNo: TIMER comparator ID type\r\n                                                                                *\r\n                                                                                * @return SET or RESET\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type TIMER_GetMatchStatus(TIMER_Chan_Type timerCh, TIMER_Comp_ID_Type cmpNo) {\r\n  uint32_t    tmpVal;\r\n  BL_Sts_Type bitStatus = RESET;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_TIMER_CHAN_TYPE(timerCh));\r\n  CHECK_PARAM(IS_TIMER_COMP_ID_TYPE(cmpNo));\r\n\r\n  tmpVal = BL_RD_WORD(TIMER_BASE + TIMER_TMSR2_OFFSET + 4 * timerCh);\r\n\r\n  switch (cmpNo) {\r\n  case TIMER_COMP_ID_0:\r\n    bitStatus = BL_IS_REG_BIT_SET(tmpVal, TIMER_TMSR_0) ? SET : RESET;\r\n    break;\r\n\r\n  case TIMER_COMP_ID_1:\r\n    bitStatus = BL_IS_REG_BIT_SET(tmpVal, TIMER_TMSR_1) ? SET : RESET;\r\n    break;\r\n\r\n  case TIMER_COMP_ID_2:\r\n    bitStatus = BL_IS_REG_BIT_SET(tmpVal, TIMER_TMSR_2) ? SET : RESET;\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return bitStatus;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER get specified channel preload value\r\n                                                                                *\r\n                                                                                * @param  timerCh: TIMER channel type\r\n                                                                                *\r\n                                                                                * @return Preload register value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint32_t TIMER_GetPreloadValue(TIMER_Chan_Type timerCh) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_TIMER_CHAN_TYPE(timerCh));\r\n\r\n  return BL_RD_WORD(TIMER_BASE + TIMER_TPLVR2_OFFSET + 4 * timerCh);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER set preload register low 32bits value\r\n                                                                                *\r\n                                                                                * @param  timerCh: TIMER channel type\r\n                                                                                * @param  val: Preload register low 32bits value\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid TIMER_SetPreloadValue(TIMER_Chan_Type timerCh, uint32_t val) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_TIMER_CHAN_TYPE(timerCh));\r\n\r\n  BL_WR_WORD(TIMER_BASE + TIMER_TPLVR2_OFFSET + 4 * timerCh, val);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER set preload trigger source,COMP0,COMP1,COMP2 or None\r\n                                                                                *\r\n                                                                                * @param  timerCh: TIMER channel type\r\n                                                                                * @param  plSrc: TIMER preload source type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid TIMER_SetPreloadTrigSrc(TIMER_Chan_Type timerCh, TIMER_PreLoad_Trig_Type plSrc) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_TIMER_CHAN_TYPE(timerCh));\r\n  CHECK_PARAM(IS_TIMER_PRELOAD_TRIG_TYPE(plSrc));\r\n\r\n  BL_WR_WORD(TIMER_BASE + TIMER_TPLCR2_OFFSET + 4 * timerCh, plSrc);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER set count mode:preload or free run\r\n                                                                                *\r\n                                                                                * @param  timerCh: TIMER channel type\r\n                                                                                * @param  countMode: TIMER count mode: TIMER_COUNT_PRELOAD or TIMER_COUNT_FREERUN\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid TIMER_SetCountMode(TIMER_Chan_Type timerCh, TIMER_CountMode_Type countMode) {\r\n  uint32_t tmpval;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_TIMER_CHAN_TYPE(timerCh));\r\n  CHECK_PARAM(IS_TIMER_COUNTMODE_TYPE(countMode));\r\n\r\n  tmpval = BL_RD_WORD(TIMER_BASE + TIMER_TCMR_OFFSET);\r\n  tmpval &= (~(1 << (timerCh + 1)));\r\n  tmpval |= (countMode << (timerCh + 1));\r\n\r\n  BL_WR_WORD(TIMER_BASE + TIMER_TCMR_OFFSET, tmpval);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER clear interrupt status\r\n                                                                                *\r\n                                                                                * @param  timerCh: TIMER channel type\r\n                                                                                * @param  cmpNo: TIMER macth comparator ID type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid TIMER_ClearIntStatus(TIMER_Chan_Type timerCh, TIMER_Comp_ID_Type cmpNo) {\r\n  uint32_t tmpAddr;\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_TIMER_CHAN_TYPE(timerCh));\r\n  CHECK_PARAM(IS_TIMER_COMP_ID_TYPE(cmpNo));\r\n\r\n  tmpAddr = TIMER_BASE + TIMER_TICR2_OFFSET + 4 * timerCh;\r\n\r\n  tmpVal = BL_RD_WORD(tmpAddr);\r\n  tmpVal |= (1 << cmpNo);\r\n\r\n  BL_WR_WORD(tmpAddr, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER initialization function\r\n                                                                                *\r\n                                                                                * @param  timerCfg: TIMER configuration structure pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Err_Type TIMER_Init(TIMER_CFG_Type *timerCfg) {\r\n  TIMER_Chan_Type timerCh = timerCfg->timerCh;\r\n  uint32_t        tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_TIMER_CLKSRC_TYPE(timerCfg->clkSrc));\r\n  CHECK_PARAM(IS_TIMER_CHAN_TYPE(timerCfg->timerCh));\r\n  CHECK_PARAM(IS_TIMER_PRELOAD_TRIG_TYPE(timerCfg->plTrigSrc));\r\n  CHECK_PARAM(IS_TIMER_COUNTMODE_TYPE(timerCfg->countMode));\r\n\r\n  /* Configure timer clock source */\r\n  tmpVal = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n\r\n  if (timerCh == TIMER_CH0) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, TIMER_CS_1, timerCfg->clkSrc);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, TIMER_CS_2, timerCfg->clkSrc);\r\n  }\r\n\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCCR, tmpVal);\r\n\r\n  /* Configure timer clock division */\r\n  tmpVal = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n\r\n  if (timerCh == TIMER_CH0) {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, TIMER_TCDR2, timerCfg->clockDivision);\r\n  } else {\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, TIMER_TCDR3, timerCfg->clockDivision);\r\n  }\r\n\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCDR, tmpVal);\r\n\r\n  /* Configure timer count mode: preload or free run */\r\n  TIMER_SetCountMode(timerCh, timerCfg->countMode);\r\n\r\n  /* Configure timer preload trigger src */\r\n  TIMER_SetPreloadTrigSrc(timerCh, timerCfg->plTrigSrc);\r\n\r\n  if (timerCfg->countMode == TIMER_COUNT_PRELOAD) {\r\n    /* Configure timer preload value */\r\n    TIMER_SetPreloadValue(timerCh, timerCfg->preLoadVal);\r\n\r\n    /* Configure match compare values */\r\n    if (timerCfg->matchVal0 > 1 + timerCfg->preLoadVal) {\r\n      TIMER_SetCompValue(timerCh, TIMER_COMP_ID_0, timerCfg->matchVal0 - 2);\r\n    } else {\r\n      TIMER_SetCompValue(timerCh, TIMER_COMP_ID_0, timerCfg->matchVal0);\r\n    }\r\n\r\n    if (timerCfg->matchVal1 > 1 + timerCfg->preLoadVal) {\r\n      TIMER_SetCompValue(timerCh, TIMER_COMP_ID_1, timerCfg->matchVal1 - 2);\r\n    } else {\r\n      TIMER_SetCompValue(timerCh, TIMER_COMP_ID_1, timerCfg->matchVal1);\r\n    }\r\n\r\n    if (timerCfg->matchVal2 > 1 + timerCfg->preLoadVal) {\r\n      TIMER_SetCompValue(timerCh, TIMER_COMP_ID_2, timerCfg->matchVal2 - 2);\r\n    } else {\r\n      TIMER_SetCompValue(timerCh, TIMER_COMP_ID_2, timerCfg->matchVal2);\r\n    }\r\n  } else {\r\n    /* Configure match compare values */\r\n    if (timerCfg->matchVal0 > 1) {\r\n      TIMER_SetCompValue(timerCh, TIMER_COMP_ID_0, timerCfg->matchVal0 - 2);\r\n    } else {\r\n      TIMER_SetCompValue(timerCh, TIMER_COMP_ID_0, timerCfg->matchVal0);\r\n    }\r\n\r\n    if (timerCfg->matchVal1 > 1) {\r\n      TIMER_SetCompValue(timerCh, TIMER_COMP_ID_1, timerCfg->matchVal1 - 2);\r\n    } else {\r\n      TIMER_SetCompValue(timerCh, TIMER_COMP_ID_1, timerCfg->matchVal1);\r\n    }\r\n\r\n    if (timerCfg->matchVal2 > 1) {\r\n      TIMER_SetCompValue(timerCh, TIMER_COMP_ID_2, timerCfg->matchVal2 - 2);\r\n    } else {\r\n      TIMER_SetCompValue(timerCh, TIMER_COMP_ID_2, timerCfg->matchVal2);\r\n    }\r\n  }\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(TIMER_CH0_IRQn, TIMER_CH0_IRQHandler);\r\n  Interrupt_Handler_Register(TIMER_CH1_IRQn, TIMER_CH1_IRQHandler);\r\n#endif\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER enable one channel function\r\n                                                                                *\r\n                                                                                * @param  timerCh: TIMER channel type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid TIMER_Enable(TIMER_Chan_Type timerCh) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_TIMER_CHAN_TYPE(timerCh));\r\n\r\n  tmpVal = BL_RD_REG(TIMER_BASE, TIMER_TCER);\r\n  tmpVal |= (1 << (timerCh + 1));\r\n\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCER, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER disable one channel function\r\n                                                                                *\r\n                                                                                * @param  timerCh: TIMER channel type\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid TIMER_Disable(TIMER_Chan_Type timerCh) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_TIMER_CHAN_TYPE(timerCh));\r\n\r\n  tmpVal = BL_RD_REG(TIMER_BASE, TIMER_TCER);\r\n  tmpVal &= (~(1 << (timerCh + 1)));\r\n\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCER, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER mask or unmask certain or all interrupt\r\n                                                                                *\r\n                                                                                * @param  timerCh: TIMER channel type\r\n                                                                                * @param  intType: TIMER interrupt type\r\n                                                                                * @param  intMask: TIMER interrupt mask value:MASK:disbale interrupt.UNMASK:enable interrupt\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid TIMER_IntMask(TIMER_Chan_Type timerCh, TIMER_INT_Type intType, BL_Mask_Type intMask) {\r\n  uint32_t tmpAddr;\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_TIMER_CHAN_TYPE(timerCh));\r\n  CHECK_PARAM(IS_TIMER_INT_TYPE(intType));\r\n  CHECK_PARAM(IS_BL_MASK_TYPE(intMask));\r\n\r\n  tmpAddr = TIMER_BASE + TIMER_TIER2_OFFSET + 4 * timerCh;\r\n  tmpVal  = BL_RD_WORD(tmpAddr);\r\n\r\n  switch (intType) {\r\n  case TIMER_INT_COMP_0:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      BL_WR_WORD(tmpAddr, BL_SET_REG_BIT(tmpVal, TIMER_TIER_0));\r\n    } else {\r\n      /* Disable this interrupt */\r\n      BL_WR_WORD(tmpAddr, BL_CLR_REG_BIT(tmpVal, TIMER_TIER_0));\r\n    }\r\n\r\n    break;\r\n\r\n  case TIMER_INT_COMP_1:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      BL_WR_WORD(tmpAddr, BL_SET_REG_BIT(tmpVal, TIMER_TIER_1));\r\n    } else {\r\n      /* Disable this interrupt */\r\n      BL_WR_WORD(tmpAddr, BL_CLR_REG_BIT(tmpVal, TIMER_TIER_1));\r\n    }\r\n\r\n    break;\r\n\r\n  case TIMER_INT_COMP_2:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      BL_WR_WORD(tmpAddr, BL_SET_REG_BIT(tmpVal, TIMER_TIER_2));\r\n    } else {\r\n      /* Disable this interrupt */\r\n      BL_WR_WORD(tmpAddr, BL_CLR_REG_BIT(tmpVal, TIMER_TIER_2));\r\n    }\r\n\r\n    break;\r\n\r\n  case TIMER_INT_ALL:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      BL_WR_WORD(tmpAddr, BL_SET_REG_BIT(tmpVal, TIMER_TIER_0));\r\n      BL_WR_WORD(tmpAddr, BL_SET_REG_BIT(tmpVal, TIMER_TIER_1));\r\n      BL_WR_WORD(tmpAddr, BL_SET_REG_BIT(tmpVal, TIMER_TIER_2));\r\n    } else {\r\n      /* Disable this interrupt */\r\n      BL_WR_WORD(tmpAddr, BL_CLR_REG_BIT(tmpVal, TIMER_TIER_0));\r\n      BL_WR_WORD(tmpAddr, BL_CLR_REG_BIT(tmpVal, TIMER_TIER_1));\r\n      BL_WR_WORD(tmpAddr, BL_CLR_REG_BIT(tmpVal, TIMER_TIER_2));\r\n    }\r\n\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER set watchdog clock source and clock division\r\n                                                                                *\r\n                                                                                * @param  clkSrc: Watchdog timer clock source type\r\n                                                                                * @param  div: Watchdog timer clock division value\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid WDT_Set_Clock(TIMER_ClkSrc_Type clkSrc, uint8_t div) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_TIMER_CLKSRC_TYPE(clkSrc));\r\n\r\n  /* Configure watchdog timer clock source */\r\n  tmpVal = BL_RD_REG(TIMER_BASE, TIMER_TCCR);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, TIMER_CS_WDT, clkSrc);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCCR, tmpVal);\r\n\r\n  /* Configure watchdog timer clock divison */\r\n  tmpVal = BL_RD_REG(TIMER_BASE, TIMER_TCDR);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, TIMER_WCDR, div);\r\n  BL_WR_REG(TIMER_BASE, TIMER_TCDR, tmpVal);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER get watchdog match compare value\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return Watchdog match comapre register value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint16_t WDT_GetMatchValue(void) {\r\n  uint32_t tmpVal;\r\n\r\n  WDT_ENABLE_ACCESS();\r\n\r\n  /* Get watchdog timer match register value */\r\n  tmpVal = BL_RD_REG(TIMER_BASE, TIMER_WMR);\r\n\r\n  return tmpVal;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER set watchdog match compare value\r\n                                                                                *\r\n                                                                                * @param  val: Watchdog match compare value\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid WDT_SetCompValue(uint16_t val) {\r\n  WDT_ENABLE_ACCESS();\r\n\r\n  /* Set watchdog timer match register value */\r\n  BL_WR_REG(TIMER_BASE, TIMER_WMR, val);\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER get watchdog count register value\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return Watchdog count register value\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nuint16_t WDT_GetCounterValue(void) {\r\n  uint32_t tmpVal;\r\n\r\n  WDT_ENABLE_ACCESS();\r\n\r\n  /* Get watchdog timer count register value */\r\n  tmpVal = BL_RD_REG(TIMER_BASE, TIMER_WVR);\r\n\r\n  return tmpVal;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER reset watchdog count register value\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid WDT_ResetCounterValue(void) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Reset watchdog timer count register value */\r\n  WDT_ENABLE_ACCESS();\r\n\r\n  tmpVal = BL_RD_REG(TIMER_BASE, TIMER_WCR);\r\n\r\n  /* Set watchdog counter reset register bit0 to 1 */\r\n  BL_WR_REG(TIMER_BASE, TIMER_WCR, BL_SET_REG_BIT(tmpVal, TIMER_WCR));\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER get watchdog reset status\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return SET or RESET\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nBL_Sts_Type WDT_GetResetStatus(void) {\r\n  uint32_t tmpVal;\r\n\r\n  WDT_ENABLE_ACCESS();\r\n\r\n  /* Get watchdog status register */\r\n  tmpVal = BL_RD_REG(TIMER_BASE, TIMER_WSR);\r\n\r\n  return (BL_IS_REG_BIT_SET(tmpVal, TIMER_WTS)) ? SET : RESET;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER clear watchdog reset status\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid WDT_ClearResetStatus(void) {\r\n  uint32_t tmpVal;\r\n\r\n  WDT_ENABLE_ACCESS();\r\n\r\n  tmpVal = BL_RD_REG(TIMER_BASE, TIMER_WSR);\r\n\r\n  /* Set watchdog status register */\r\n  BL_WR_REG(TIMER_BASE, TIMER_WSR, BL_CLR_REG_BIT(tmpVal, TIMER_WTS));\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER enable watchdog function\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid WDT_Enable(void) {\r\n  uint32_t tmpVal;\r\n\r\n#ifndef BFLB_USE_HAL_DRIVER\r\n  Interrupt_Handler_Register(TIMER_WDT_IRQn, TIMER_WDT_IRQHandler);\r\n#endif\r\n\r\n  WDT_ENABLE_ACCESS();\r\n\r\n  tmpVal = BL_RD_REG(TIMER_BASE, TIMER_WMER);\r\n\r\n  BL_WR_REG(TIMER_BASE, TIMER_WMER, BL_SET_REG_BIT(tmpVal, TIMER_WE));\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Watchdog timer disable function\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid WDT_Disable(void) {\r\n  uint32_t tmpVal;\r\n\r\n  WDT_ENABLE_ACCESS();\r\n\r\n  tmpVal = BL_RD_REG(TIMER_BASE, TIMER_WMER);\r\n\r\n  BL_WR_REG(TIMER_BASE, TIMER_WMER, BL_CLR_REG_BIT(tmpVal, TIMER_WE));\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Watchdog timer mask or unmask certain or all interrupt\r\n                                                                                *\r\n                                                                                * @param  intType: Watchdog interrupt type\r\n                                                                                * @param  intMask: Watchdog interrupt mask value:MASK:disbale interrupt.UNMASK:enable interrupt\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid WDT_IntMask(WDT_INT_Type intType, BL_Mask_Type intMask) {\r\n  uint32_t tmpVal;\r\n\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_WDT_INT_TYPE(intType));\r\n  CHECK_PARAM(IS_BL_MASK_TYPE(intMask));\r\n\r\n  WDT_ENABLE_ACCESS();\r\n\r\n  /* Deal with watchdog match/interrupt enable register,\r\n    WRIE:watchdog reset/interrupt enable */\r\n  tmpVal = BL_RD_REG(TIMER_BASE, TIMER_WMER);\r\n\r\n  switch (intType) {\r\n  case WDT_INT:\r\n    if (intMask == UNMASK) {\r\n      /* Enable this interrupt */\r\n      /* 0 means generates a watchdog interrupt,\r\n         a watchdog timer reset is not generated*/\r\n      BL_WR_REG(TIMER_BASE, TIMER_WMER, BL_CLR_REG_BIT(tmpVal, TIMER_WRIE));\r\n    } else {\r\n      /* Disable this interrupt */\r\n      /* 1 means generates a watchdog timer reset,\r\n         a watchdog  interrupt is not generated*/\r\n      BL_WR_REG(TIMER_BASE, TIMER_WMER, BL_SET_REG_BIT(tmpVal, TIMER_WRIE));\r\n    }\r\n\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER channel 0 interrupt handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid TIMER_CH0_IRQHandler(void) { TIMER_IntHandler(TIMER_CH0_IRQn, TIMER_CH0); }\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER channel 1 interrupt handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid TIMER_CH1_IRQHandler(void) { TIMER_IntHandler(TIMER_CH1_IRQn, TIMER_CH1); }\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER watchdog interrupt handler\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_HAL_DRIVER\r\nvoid TIMER_WDT_IRQHandler(void) {\r\n  uint32_t tmpVal;\r\n\r\n  WDT_ENABLE_ACCESS();\r\n\r\n  tmpVal = BL_RD_REG(TIMER_BASE, TIMER_WICR);\r\n  BL_WR_REG(TIMER_BASE, TIMER_WICR, BL_SET_REG_BIT(tmpVal, TIMER_WICLR));\r\n\r\n  if (timerIntCbfArra[TIMER_WDT_IRQn - TIMER_CH0_IRQn][WDT_INT] != NULL) {\r\n    /* Call the callback function */\r\n    timerIntCbfArra[TIMER_WDT_IRQn - TIMER_CH0_IRQn][WDT_INT]();\r\n  }\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  TIMER install interrupt callback\r\n                                                                                *\r\n                                                                                * @param  timerChan: TIMER channel type\r\n                                                                                * @param  intType: TIMER interrupt type\r\n                                                                                * @param  cbFun: Pointer to interrupt callback function. The type should be void (*fn)(void)\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid Timer_Int_Callback_Install(TIMER_Chan_Type timerChan, TIMER_INT_Type intType, intCallback_Type *cbFun) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_TIMER_CHAN_TYPE(timerChan));\r\n  CHECK_PARAM(IS_TIMER_INT_TYPE(intType));\r\n\r\n  timerIntCbfArra[timerChan][intType] = cbFun;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Watchdog install interrupt callback\r\n                                                                                *\r\n                                                                                * @param  wdtInt: Watchdog interrupt type\r\n                                                                                * @param  cbFun: Pointer to interrupt callback function. The type should be void (*fn)(void)\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid WDT_Int_Callback_Install(WDT_INT_Type wdtInt, intCallback_Type *cbFun) {\r\n  /* Check the parameters */\r\n  CHECK_PARAM(IS_WDT_INT_TYPE(wdtInt));\r\n\r\n  timerIntCbfArra[2][wdtInt] = cbFun;\r\n}\r\n\r\n/*@} end of group TIMER_Private_Functions */\r\n\r\n/*@} end of group TIMER */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_uart.c",
    "content": "/**\n ******************************************************************************\n * @file    bl702_uart.c\n * @version V1.0\n * @date\n * @brief   This file is the standard driver c file\n ******************************************************************************\n * @attention\n *\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n *   1. Redistributions of source code must retain the above copyright notice,\n *      this list of conditions and the following disclaimer.\n *   2. Redistributions in binary form must reproduce the above copyright notice,\n *      this list of conditions and the following disclaimer in the documentation\n *      and/or other materials provided with the distribution.\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\n *      may be used to endorse or promote products derived from this software\n *      without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n ******************************************************************************\n */\n\n#include \"bl702_uart.h\"\n#include \"bl702_glb.h\"\n\n/** @addtogroup  BL702_Peripheral_Driver\n *  @{\n */\n\n/** @addtogroup  UART\n *  @{\n */\n\n/** @defgroup  UART_Private_Macros\n *  @{\n */\n#define UART_TX_TIMEOUT_COUNT (160 * 1000)\n\n/*@} end of group UART_Private_Macros */\n\n/** @defgroup  UART_Private_Types\n *  @{\n */\n\n/*@} end of group UART_Private_Types */\n\n/** @defgroup  UART_Private_Variables\n *  @{\n */\nstatic const uint32_t    uartAddr[2]                     = {UART0_BASE, UART1_BASE};\nstatic intCallback_Type *uartIntCbfArra[2][UART_INT_ALL] = {{NULL}, {NULL}};\n\n/*@} end of group UART_Private_Variables */\n\n/** @defgroup  UART_Global_Variables\n *  @{\n */\n\n/*@} end of group UART_Global_Variables */\n\n/** @defgroup  UART_Private_Fun_Declaration\n *  @{\n */\n#ifndef BFLB_USE_HAL_DRIVER\nstatic void UART_IntHandler(UART_ID_Type uartId);\n#endif\n\n/*@} end of group UART_Private_Fun_Declaration */\n\n/** @defgroup  UART_Private_Functions\n *  @{\n */\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART interrupt common handler function\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                *\n                                                                                * @return None\n                                                                                *\n                                                                                *******************************************************************************/\n#ifndef BFLB_USE_HAL_DRIVER\nstatic void UART_IntHandler(UART_ID_Type uartId) {\n  uint32_t tmpVal  = 0;\n  uint32_t maskVal = 0;\n  uint32_t UARTx   = uartAddr[uartId];\n\n  tmpVal  = BL_RD_REG(UARTx, UART_INT_STS);\n  maskVal = BL_RD_REG(UARTx, UART_INT_MASK);\n\n  /* Length of uart tx data transfer arrived interrupt */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_UTX_END_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_UTX_END_MASK)) {\n    BL_WR_REG(UARTx, UART_INT_CLEAR, 0x1);\n\n    if (uartIntCbfArra[uartId][UART_INT_TX_END] != NULL) {\n      uartIntCbfArra[uartId][UART_INT_TX_END]();\n    }\n  }\n\n  /* Length of uart rx data transfer arrived interrupt */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_URX_END_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_URX_END_MASK)) {\n    BL_WR_REG(UARTx, UART_INT_CLEAR, 0x2);\n\n    if (uartIntCbfArra[uartId][UART_INT_RX_END] != NULL) {\n      uartIntCbfArra[uartId][UART_INT_RX_END]();\n    }\n  }\n\n  /* Tx fifo ready interrupt,auto-cleared when data is pushed */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_UTX_FIFO_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_UTX_FIFO_MASK)) {\n    if (uartIntCbfArra[uartId][UART_INT_TX_FIFO_REQ] != NULL) {\n      uartIntCbfArra[uartId][UART_INT_TX_FIFO_REQ]();\n    }\n  }\n\n  /* Rx fifo ready interrupt,auto-cleared when data is popped */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_URX_FIFO_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_URX_FIFO_MASK)) {\n    if (uartIntCbfArra[uartId][UART_INT_RX_FIFO_REQ] != NULL) {\n      uartIntCbfArra[uartId][UART_INT_RX_FIFO_REQ]();\n    }\n  }\n\n  /* Rx time-out interrupt */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_URX_RTO_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_URX_RTO_MASK)) {\n    BL_WR_REG(UARTx, UART_INT_CLEAR, 0x10);\n\n    if (uartIntCbfArra[uartId][UART_INT_RTO] != NULL) {\n      uartIntCbfArra[uartId][UART_INT_RTO]();\n    }\n  }\n\n  /* Rx parity check error interrupt */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_URX_PCE_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_URX_PCE_MASK)) {\n    BL_WR_REG(UARTx, UART_INT_CLEAR, 0x20);\n\n    if (uartIntCbfArra[uartId][UART_INT_PCE] != NULL) {\n      uartIntCbfArra[uartId][UART_INT_PCE]();\n    }\n  }\n\n  /* Tx fifo overflow/underflow error interrupt */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_UTX_FER_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_UTX_FER_MASK)) {\n    if (uartIntCbfArra[uartId][UART_INT_TX_FER] != NULL) {\n      uartIntCbfArra[uartId][UART_INT_TX_FER]();\n    }\n  }\n\n  /* Rx fifo overflow/underflow error interrupt */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_URX_FER_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_URX_FER_MASK)) {\n    if (uartIntCbfArra[uartId][UART_INT_RX_FER] != NULL) {\n      uartIntCbfArra[uartId][UART_INT_RX_FER]();\n    }\n  }\n\n  /* Rx lin mode sync field error interrupt */\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_URX_LSE_INT) && !BL_IS_REG_BIT_SET(maskVal, UART_CR_URX_LSE_MASK)) {\n    BL_WR_REG(UARTx, UART_INT_CLEAR, 0x100);\n\n    if (uartIntCbfArra[uartId][UART_INT_LSE] != NULL) {\n      uartIntCbfArra[uartId][UART_INT_LSE]();\n    }\n  }\n}\n#endif\n\n/*@} end of group UART_Private_Functions */\n\n/** @defgroup  UART_Public_Functions\n *  @{\n */\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART initialization function\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  uartCfg: UART configuration structure pointer\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_Init(UART_ID_Type uartId, UART_CFG_Type *uartCfg) {\n  uint32_t tmpValTxCfg     = 0;\n  uint32_t tmpValRxCfg     = 0;\n  uint32_t fraction        = 0;\n  uint32_t baudRateDivisor = 0;\n  uint32_t UARTx           = uartAddr[uartId];\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n  CHECK_PARAM(IS_UART_PARITY_TYPE(uartCfg->parity));\n  CHECK_PARAM(IS_UART_DATABITS_TYPE(uartCfg->dataBits));\n  CHECK_PARAM(IS_UART_STOPBITS_TYPE(uartCfg->stopBits));\n  CHECK_PARAM(IS_UART_BYTEBITINVERSE_TYPE(uartCfg->byteBitInverse));\n\n  /* Cal the baud rate divisor */\n  fraction        = uartCfg->uartClk * 10 / uartCfg->baudRate % 10;\n  baudRateDivisor = uartCfg->uartClk / uartCfg->baudRate;\n\n  if (fraction >= 5) {\n    ++baudRateDivisor;\n  }\n\n  /* Set the baud rate register value */\n  BL_WR_REG(UARTx, UART_BIT_PRD, ((baudRateDivisor - 1) << 0x10) | ((baudRateDivisor - 1) & 0xFFFF));\n\n  /* Configure parity type */\n  tmpValTxCfg = BL_RD_REG(UARTx, UART_UTX_CONFIG);\n  tmpValRxCfg = BL_RD_REG(UARTx, UART_URX_CONFIG);\n\n  switch (uartCfg->parity) {\n  case UART_PARITY_NONE:\n    tmpValTxCfg = BL_CLR_REG_BIT(tmpValTxCfg, UART_CR_UTX_PRT_EN);\n    tmpValRxCfg = BL_CLR_REG_BIT(tmpValRxCfg, UART_CR_URX_PRT_EN);\n    break;\n\n  case UART_PARITY_ODD:\n    tmpValTxCfg = BL_SET_REG_BIT(tmpValTxCfg, UART_CR_UTX_PRT_EN);\n    tmpValTxCfg = BL_SET_REG_BIT(tmpValTxCfg, UART_CR_UTX_PRT_SEL);\n    tmpValRxCfg = BL_SET_REG_BIT(tmpValRxCfg, UART_CR_URX_PRT_EN);\n    tmpValRxCfg = BL_SET_REG_BIT(tmpValRxCfg, UART_CR_URX_PRT_SEL);\n    break;\n\n  case UART_PARITY_EVEN:\n    tmpValTxCfg = BL_SET_REG_BIT(tmpValTxCfg, UART_CR_UTX_PRT_EN);\n    tmpValTxCfg = BL_CLR_REG_BIT(tmpValTxCfg, UART_CR_UTX_PRT_SEL);\n    tmpValRxCfg = BL_SET_REG_BIT(tmpValRxCfg, UART_CR_URX_PRT_EN);\n    tmpValRxCfg = BL_CLR_REG_BIT(tmpValRxCfg, UART_CR_URX_PRT_SEL);\n    break;\n\n  default:\n    break;\n  }\n\n  /* Configure data bits */\n  tmpValTxCfg = BL_SET_REG_BITS_VAL(tmpValTxCfg, UART_CR_UTX_BIT_CNT_D, (uartCfg->dataBits + 4));\n  tmpValRxCfg = BL_SET_REG_BITS_VAL(tmpValRxCfg, UART_CR_URX_BIT_CNT_D, (uartCfg->dataBits + 4));\n\n  /* Configure tx stop bits */\n  tmpValTxCfg = BL_SET_REG_BITS_VAL(tmpValTxCfg, UART_CR_UTX_BIT_CNT_P, uartCfg->stopBits);\n\n  /* Configure tx cts flow control function */\n  tmpValTxCfg = BL_SET_REG_BITS_VAL(tmpValTxCfg, UART_CR_UTX_CTS_EN, uartCfg->ctsFlowControl);\n\n  /* Configure rx input de-glitch function */\n  tmpValRxCfg = BL_SET_REG_BITS_VAL(tmpValRxCfg, UART_CR_URX_DEG_EN, uartCfg->rxDeglitch);\n\n  /* Configure tx lin mode function */\n  tmpValTxCfg = BL_SET_REG_BITS_VAL(tmpValTxCfg, UART_CR_UTX_LIN_EN, uartCfg->txLinMode);\n\n  /* Configure rx lin mode function */\n  tmpValRxCfg = BL_SET_REG_BITS_VAL(tmpValRxCfg, UART_CR_URX_LIN_EN, uartCfg->rxLinMode);\n\n  /* Set tx break bit count for lin protocol */\n  tmpValTxCfg = BL_SET_REG_BITS_VAL(tmpValTxCfg, UART_CR_UTX_BIT_CNT_B, uartCfg->txBreakBitCnt);\n\n  /* Write back */\n  BL_WR_REG(UARTx, UART_UTX_CONFIG, tmpValTxCfg);\n  BL_WR_REG(UARTx, UART_URX_CONFIG, tmpValRxCfg);\n\n  /* Configure LSB-first or MSB-first */\n  tmpValTxCfg = BL_RD_REG(UARTx, UART_DATA_CONFIG);\n\n  if (UART_MSB_FIRST == uartCfg->byteBitInverse) {\n    tmpValTxCfg = BL_SET_REG_BIT(tmpValTxCfg, UART_CR_UART_BIT_INV);\n  } else {\n    tmpValTxCfg = BL_CLR_REG_BIT(tmpValTxCfg, UART_CR_UART_BIT_INV);\n  }\n\n  BL_WR_REG(UARTx, UART_DATA_CONFIG, tmpValTxCfg);\n\n  tmpValTxCfg = BL_RD_REG(UARTx, UART_SW_MODE);\n  /* Configure rx rts output SW control mode */\n  tmpValTxCfg = BL_SET_REG_BITS_VAL(tmpValTxCfg, UART_CR_URX_RTS_SW_MODE, uartCfg->rtsSoftwareControl);\n  /* Configure tx output SW control mode */\n  tmpValTxCfg = BL_SET_REG_BITS_VAL(tmpValTxCfg, UART_CR_UTX_TXD_SW_MODE, uartCfg->txSoftwareControl);\n  BL_WR_REG(UARTx, UART_SW_MODE, tmpValTxCfg);\n\n#ifndef BFLB_USE_HAL_DRIVER\n  Interrupt_Handler_Register(UART0_IRQn, UART0_IRQHandler);\n  Interrupt_Handler_Register(UART1_IRQn, UART1_IRQHandler);\n#endif\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART set default value of all registers function\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_DeInit(UART_ID_Type uartId) {\n  if (UART0_ID == uartId) {\n    GLB_AHB_Slave1_Reset(BL_AHB_SLAVE1_UART0);\n  } else if (UART1_ID == uartId) {\n    GLB_AHB_Slave1_Reset(BL_AHB_SLAVE1_UART1);\n  }\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART configure fifo function\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  fifoCfg: FIFO configuration structure pointer\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_FifoConfig(UART_ID_Type uartId, UART_FifoCfg_Type *fifoCfg) {\n  uint32_t tmpVal = 0;\n  uint32_t UARTx  = uartAddr[uartId];\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Deal with uart fifo configure register */\n  tmpVal = BL_RD_REG(UARTx, UART_FIFO_CONFIG_1);\n  /* Configure dma tx fifo threshold */\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, UART_TX_FIFO_TH, fifoCfg->txFifoDmaThreshold);\n  /* Configure dma rx fifo threshold */\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, UART_RX_FIFO_TH, fifoCfg->rxFifoDmaThreshold);\n  /* Write back */\n  BL_WR_REG(UARTx, UART_FIFO_CONFIG_1, tmpVal);\n\n  /* Enable or disable uart fifo dma function */\n  tmpVal = BL_RD_REG(UARTx, UART_FIFO_CONFIG_0);\n\n  if (ENABLE == fifoCfg->txFifoDmaEnable) {\n    tmpVal = BL_SET_REG_BIT(tmpVal, UART_DMA_TX_EN);\n  } else {\n    tmpVal = BL_CLR_REG_BIT(tmpVal, UART_DMA_TX_EN);\n  }\n\n  if (ENABLE == fifoCfg->rxFifoDmaEnable) {\n    tmpVal = BL_SET_REG_BIT(tmpVal, UART_DMA_RX_EN);\n  } else {\n    tmpVal = BL_CLR_REG_BIT(tmpVal, UART_DMA_RX_EN);\n  }\n\n  BL_WR_REG(UARTx, UART_FIFO_CONFIG_0, tmpVal);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART configure infra function\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  irCfg: IR configuration structure pointer\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_IrConfig(UART_ID_Type uartId, UART_IrCfg_Type *irCfg) {\n  uint32_t tmpVal = 0;\n  uint32_t UARTx  = uartAddr[uartId];\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Configure tx ir mode */\n  tmpVal = BL_RD_REG(UARTx, UART_UTX_CONFIG);\n\n  if (ENABLE == irCfg->txIrEnable) {\n    tmpVal = BL_SET_REG_BIT(tmpVal, UART_CR_UTX_IR_EN);\n  } else {\n    tmpVal = BL_CLR_REG_BIT(tmpVal, UART_CR_UTX_IR_EN);\n  }\n\n  if (ENABLE == irCfg->txIrInverse) {\n    tmpVal = BL_SET_REG_BIT(tmpVal, UART_CR_UTX_IR_INV);\n  } else {\n    tmpVal = BL_CLR_REG_BIT(tmpVal, UART_CR_UTX_IR_INV);\n  }\n\n  BL_WR_REG(UARTx, UART_UTX_CONFIG, tmpVal);\n\n  /* Configure rx ir mode */\n  tmpVal = BL_RD_REG(UARTx, UART_URX_CONFIG);\n\n  if (ENABLE == irCfg->rxIrEnable) {\n    tmpVal = BL_SET_REG_BIT(tmpVal, UART_CR_URX_IR_EN);\n  } else {\n    tmpVal = BL_CLR_REG_BIT(tmpVal, UART_CR_URX_IR_EN);\n  }\n\n  if (ENABLE == irCfg->rxIrInverse) {\n    tmpVal = BL_SET_REG_BIT(tmpVal, UART_CR_URX_IR_INV);\n  } else {\n    tmpVal = BL_CLR_REG_BIT(tmpVal, UART_CR_URX_IR_INV);\n  }\n\n  BL_WR_REG(UARTx, UART_URX_CONFIG, tmpVal);\n\n  /* Configure tx ir pulse start and stop position */\n  BL_WR_REG(UARTx, UART_UTX_IR_POSITION, irCfg->txIrPulseStop << 0x10 | irCfg->txIrPulseStart);\n\n  /* Configure rx ir pulse start position */\n  BL_WR_REG(UARTx, UART_URX_IR_POSITION, irCfg->rxIrPulseStart);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Enable UART\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  direct: UART direction type\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_Enable(UART_ID_Type uartId, UART_Direction_Type direct) {\n  uint32_t tmpVal = 0;\n  uint32_t UARTx  = uartAddr[uartId];\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n  CHECK_PARAM(IS_UART_DIRECTION_TYPE(direct));\n\n  if (direct == UART_TX || direct == UART_TXRX) {\n    /* Enable UART tx unit */\n    tmpVal = BL_RD_REG(UARTx, UART_UTX_CONFIG);\n    BL_WR_REG(UARTx, UART_UTX_CONFIG, BL_SET_REG_BIT(tmpVal, UART_CR_UTX_EN));\n  }\n\n  if (direct == UART_RX || direct == UART_TXRX) {\n    /* Enable UART rx unit */\n    tmpVal = BL_RD_REG(UARTx, UART_URX_CONFIG);\n    BL_WR_REG(UARTx, UART_URX_CONFIG, BL_SET_REG_BIT(tmpVal, UART_CR_URX_EN));\n  }\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Disable UART\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  direct: UART direction type\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_Disable(UART_ID_Type uartId, UART_Direction_Type direct) {\n  uint32_t tmpVal = 0;\n  uint32_t UARTx  = uartAddr[uartId];\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n  CHECK_PARAM(IS_UART_DIRECTION_TYPE(direct));\n\n  if (direct == UART_TX || direct == UART_TXRX) {\n    /* Disable UART tx unit */\n    tmpVal = BL_RD_REG(UARTx, UART_UTX_CONFIG);\n    BL_WR_REG(UARTx, UART_UTX_CONFIG, BL_CLR_REG_BIT(tmpVal, UART_CR_UTX_EN));\n  }\n\n  if (direct == UART_RX || direct == UART_TXRX) {\n    /* Disable UART rx unit */\n    tmpVal = BL_RD_REG(UARTx, UART_URX_CONFIG);\n    BL_WR_REG(UARTx, UART_URX_CONFIG, BL_CLR_REG_BIT(tmpVal, UART_CR_URX_EN));\n  }\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART set length of tx data transfer,tx end interrupt will assert when this length is\n                                                                                *         reached\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  length: Length of data (unit:character/byte)\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_SetTxDataLength(UART_ID_Type uartId, uint16_t length) {\n  uint32_t tmpVal = 0;\n  uint32_t UARTx  = uartAddr[uartId];\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Set length */\n  tmpVal = BL_RD_REG(UARTx, UART_UTX_CONFIG);\n  BL_WR_REG(UARTx, UART_UTX_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, UART_CR_UTX_LEN, length - 1));\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART set length of rx data transfer,rx end interrupt will assert when this length is\n                                                                                *         reached\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  length: Length of data (unit:character/byte)\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_SetRxDataLength(UART_ID_Type uartId, uint16_t length) {\n  uint32_t tmpVal = 0;\n  uint32_t UARTx  = uartAddr[uartId];\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Set length */\n  tmpVal = BL_RD_REG(UARTx, UART_URX_CONFIG);\n  BL_WR_REG(UARTx, UART_URX_CONFIG, BL_SET_REG_BITS_VAL(tmpVal, UART_CR_URX_LEN, length - 1));\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART set rx time-out value for triggering RTO interrupt\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  time: Time-out value (unit:bit time)\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_SetRxTimeoutValue(UART_ID_Type uartId, uint8_t time) {\n  uint32_t UARTx = uartAddr[uartId];\n  uint32_t tmpVal;\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Set time-out value */\n  tmpVal = BL_RD_REG(UARTx, UART_URX_RTO_TIMER);\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, UART_CR_URX_RTO_VALUE, time - 1);\n  BL_WR_REG(UARTx, UART_URX_RTO_TIMER, tmpVal);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART set de-glitch function cycle count value\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  deglitchCnt: De-glitch function cycle count\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_SetDeglitchCount(UART_ID_Type uartId, uint8_t deglitchCnt) {\n  uint32_t UARTx = uartAddr[uartId];\n  uint32_t tmpVal;\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Set count value */\n  tmpVal = BL_RD_REG(UARTx, UART_URX_CONFIG);\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, UART_CR_URX_DEG_CNT, deglitchCnt);\n  BL_WR_REG(UARTx, UART_URX_CONFIG, tmpVal);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART set tx and rx baudrate according to auto baudrate detection value\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  autoBaudDet: Choose detection value using codeword 0x55 or start bit\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_ApplyAbrResult(UART_ID_Type uartId, UART_AutoBaudDetection_Type autoBaudDet) {\n  uint32_t UARTx = uartAddr[uartId];\n  uint16_t tmpVal;\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Get detection value */\n  tmpVal = UART_GetAutoBaudCount(uartId, autoBaudDet);\n\n  /* Set tx baudrate */\n  BL_WR_REG(UARTx, UART_BIT_PRD, tmpVal << 0x10 | tmpVal);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART set rx rts output software control value\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_SetRtsValue(UART_ID_Type uartId) {\n  uint32_t UARTx = uartAddr[uartId];\n  uint32_t tmpVal;\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Rts set 1*/\n  tmpVal = BL_RD_REG(UARTx, UART_SW_MODE);\n  BL_WR_REG(UARTx, UART_SW_MODE, BL_SET_REG_BIT(tmpVal, UART_CR_URX_RTS_SW_VAL));\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART clear rx rts output software control value\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_ClrRtsValue(UART_ID_Type uartId) {\n  uint32_t UARTx = uartAddr[uartId];\n  uint32_t tmpVal;\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Rts clear 0 */\n  tmpVal = BL_RD_REG(UARTx, UART_SW_MODE);\n  BL_WR_REG(UARTx, UART_SW_MODE, BL_CLR_REG_BIT(tmpVal, UART_CR_URX_RTS_SW_VAL));\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART set tx output software control value\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_SetTxValue(UART_ID_Type uartId) {\n  uint32_t UARTx = uartAddr[uartId];\n  uint32_t tmpVal;\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Tx set 1*/\n  tmpVal = BL_RD_REG(UARTx, UART_SW_MODE);\n  BL_WR_REG(UARTx, UART_SW_MODE, BL_SET_REG_BIT(tmpVal, UART_CR_UTX_TXD_SW_VAL));\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART clear tx output software control value\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_ClrTxValue(UART_ID_Type uartId) {\n  uint32_t UARTx = uartAddr[uartId];\n  uint32_t tmpVal;\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Rts clear 0 */\n  tmpVal = BL_RD_REG(UARTx, UART_SW_MODE);\n  BL_WR_REG(UARTx, UART_SW_MODE, BL_CLR_REG_BIT(tmpVal, UART_CR_UTX_TXD_SW_VAL));\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART configure tx free run mode function\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  txFreeRun: Enable or disable tx free run mode\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_TxFreeRun(UART_ID_Type uartId, BL_Fun_Type txFreeRun) {\n  uint32_t tmpVal = 0;\n  uint32_t UARTx  = uartAddr[uartId];\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Enable or disable tx free run mode */\n  tmpVal = BL_RD_REG(UARTx, UART_UTX_CONFIG);\n\n  if (ENABLE == txFreeRun) {\n    BL_WR_REG(UARTx, UART_UTX_CONFIG, BL_SET_REG_BIT(tmpVal, UART_CR_UTX_FRM_EN));\n  } else {\n    BL_WR_REG(UARTx, UART_UTX_CONFIG, BL_CLR_REG_BIT(tmpVal, UART_CR_UTX_FRM_EN));\n  }\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART configure auto baud rate detection function\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  autoBaud: Enable or disable auto function\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_AutoBaudDetection(UART_ID_Type uartId, BL_Fun_Type autoBaud) {\n  uint32_t tmpVal = 0;\n  uint32_t UARTx  = uartAddr[uartId];\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Enable or disable auto baud rate detection function */\n  tmpVal = BL_RD_REG(UARTx, UART_URX_CONFIG);\n\n  if (ENABLE == autoBaud) {\n    BL_WR_REG(UARTx, UART_URX_CONFIG, BL_SET_REG_BIT(tmpVal, UART_CR_URX_ABR_EN));\n  } else {\n    BL_WR_REG(UARTx, UART_URX_CONFIG, BL_CLR_REG_BIT(tmpVal, UART_CR_URX_ABR_EN));\n  }\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART tx fifo clear\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_TxFifoClear(UART_ID_Type uartId) {\n  uint32_t tmpVal = 0;\n  uint32_t UARTx  = uartAddr[uartId];\n\n  /* Check the parameter */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Clear tx fifo */\n  tmpVal = BL_RD_REG(UARTx, UART_FIFO_CONFIG_0);\n  BL_WR_REG(UARTx, UART_FIFO_CONFIG_0, BL_SET_REG_BIT(tmpVal, UART_TX_FIFO_CLR));\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART rx fifo clear\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_RxFifoClear(UART_ID_Type uartId) {\n  uint32_t tmpVal = 0;\n  uint32_t UARTx  = uartAddr[uartId];\n\n  /* Check the parameter */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Clear rx fifo */\n  tmpVal = BL_RD_REG(UARTx, UART_FIFO_CONFIG_0);\n  BL_WR_REG(UARTx, UART_FIFO_CONFIG_0, BL_SET_REG_BIT(tmpVal, UART_RX_FIFO_CLR));\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART mask or unmask certain or all interrupt\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  intType: UART interrupt type\n                                                                                * @param  intMask: UART interrupt mask value( MASK:disbale interrupt,UNMASK:enable interrupt )\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_IntMask(UART_ID_Type uartId, UART_INT_Type intType, BL_Mask_Type intMask) {\n  uint32_t tmpVal;\n  uint32_t UARTx = uartAddr[uartId];\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n  CHECK_PARAM(IS_UART_INT_TYPE(intType));\n  CHECK_PARAM(IS_BL_MASK_TYPE(intMask));\n\n  tmpVal = BL_RD_REG(UARTx, UART_INT_MASK);\n\n  /* Mask or unmask certain or all interrupt */\n  if (UART_INT_ALL == intType) {\n    if (MASK == intMask) {\n      tmpVal |= 0x1ff;\n    } else {\n      tmpVal &= 0;\n    }\n  } else {\n    if (MASK == intMask) {\n      tmpVal |= 1 << intType;\n    } else {\n      tmpVal &= ~(1 << intType);\n    }\n  }\n\n  /* Write back */\n  BL_WR_REG(UARTx, UART_INT_MASK, tmpVal);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART clear certain or all interrupt\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  intType: UART interrupt type\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_IntClear(UART_ID_Type uartId, UART_INT_Type intType) {\n  uint32_t tmpVal;\n  uint32_t UARTx = uartAddr[uartId];\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n  CHECK_PARAM(IS_UART_INT_TYPE(intType));\n\n  tmpVal = BL_RD_REG(UARTx, UART_INT_CLEAR);\n\n  /* Clear certain or all interrupt */\n  if (UART_INT_ALL == intType) {\n    tmpVal |= 0x1ff;\n  } else {\n    tmpVal |= 1 << intType;\n  }\n\n  /* Write back */\n  BL_WR_REG(UARTx, UART_INT_CLEAR, tmpVal);\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Install uart interrupt callback function\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  intType: UART interrupt type\n                                                                                * @param  cbFun: Pointer to interrupt callback function. The type should be void (*fn)(void)\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_Int_Callback_Install(UART_ID_Type uartId, UART_INT_Type intType, intCallback_Type *cbFun) {\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n  CHECK_PARAM(IS_UART_INT_TYPE(intType));\n\n  uartIntCbfArra[uartId][intType] = cbFun;\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART send data to tx fifo\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  data: The data to be send\n                                                                                * @param  len: The length of the send buffer\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_SendData(UART_ID_Type uartId, uint8_t *data, uint32_t len) {\n  uint32_t txLen      = 0;\n  uint32_t UARTx      = uartAddr[uartId];\n  uint32_t timeoutCnt = UART_TX_TIMEOUT_COUNT;\n\n  /* Check the parameter */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Send data */\n  while (txLen < len) {\n    if (UART_GetTxFifoCount(uartId) > 0) {\n      BL_WR_BYTE(UARTx + UART_FIFO_WDATA_OFFSET, data[txLen++]);\n      timeoutCnt = UART_TX_TIMEOUT_COUNT;\n    } else {\n      timeoutCnt--;\n\n      if (timeoutCnt == 0) {\n        return TIMEOUT;\n      }\n    }\n  }\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART send data to tx fifo in block mode\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  data: The data to be send\n                                                                                * @param  len: The length of the send buffer\n                                                                                *\n                                                                                * @return SUCCESS\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Err_Type UART_SendDataBlock(UART_ID_Type uartId, uint8_t *data, uint32_t len) {\n  uint32_t txLen      = 0;\n  uint32_t UARTx      = uartAddr[uartId];\n  uint32_t timeoutCnt = UART_TX_TIMEOUT_COUNT;\n\n  /* Check the parameter */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Send data */\n  while (txLen < len) {\n    if (UART_GetTxFifoCount(uartId) > 0) {\n      BL_WR_BYTE(UARTx + UART_FIFO_WDATA_OFFSET, data[txLen++]);\n      timeoutCnt = UART_TX_TIMEOUT_COUNT;\n    } else {\n      timeoutCnt--;\n\n      if (timeoutCnt == 0) {\n        return TIMEOUT;\n      }\n    }\n  }\n\n  while (UART_GetTxBusBusyStatus(uartId) == SET) {\n  }\n\n  return SUCCESS;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART receive data from rx fifo\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  data: The receive data buffer\n                                                                                * @param  maxLen: The max length of the buffer\n                                                                                *\n                                                                                * @return The length of the received buffer\n                                                                                *\n                                                                                *******************************************************************************/\nuint32_t UART_ReceiveData(UART_ID_Type uartId, uint8_t *data, uint32_t maxLen) {\n  uint32_t rxLen = 0;\n  uint32_t UARTx = uartAddr[uartId];\n\n  /* Check the parameter */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Receive data */\n  while (rxLen < maxLen && UART_GetRxFifoCount(uartId) > 0) {\n    data[rxLen++] = BL_RD_BYTE(UARTx + UART_FIFO_RDATA_OFFSET);\n  }\n\n  return rxLen;\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART get auto baud count value\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  autoBaudDet: Detection using codeword 0x55 or start bit\n                                                                                *\n                                                                                * @return Bit period of auto baudrate detection\n                                                                                *\n                                                                                *******************************************************************************/\nuint16_t UART_GetAutoBaudCount(UART_ID_Type uartId, UART_AutoBaudDetection_Type autoBaudDet) {\n  uint32_t UARTx = uartAddr[uartId];\n\n  /* Check the parameter */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n  CHECK_PARAM(IS_UART_AUTOBAUDDETECTION_TYPE(autoBaudDet));\n\n  /* Select 0x55 or start bit detection value */\n  if (UART_AUTOBAUD_0X55 == autoBaudDet) {\n    return BL_RD_REG(UARTx, UART_STS_URX_ABR_PRD) >> 0x10 & 0xffff;\n  } else {\n    return BL_RD_REG(UARTx, UART_STS_URX_ABR_PRD) & 0xffff;\n  }\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART get tx fifo unoccupied count value\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                *\n                                                                                * @return Tx fifo unoccupied count value\n                                                                                *\n                                                                                *******************************************************************************/\nuint8_t UART_GetTxFifoCount(UART_ID_Type uartId) {\n  uint32_t UARTx = uartAddr[uartId];\n\n  /* Check the parameter */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  return BL_GET_REG_BITS_VAL(BL_RD_REG(UARTx, UART_FIFO_CONFIG_1), UART_TX_FIFO_CNT);\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART get rx fifo occupied count value\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                *\n                                                                                * @return Rx fifo occupied count value\n                                                                                *\n                                                                                *******************************************************************************/\nuint8_t UART_GetRxFifoCount(UART_ID_Type uartId) {\n  uint32_t UARTx = uartAddr[uartId];\n\n  /* Check the parameter */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  return BL_GET_REG_BITS_VAL(BL_RD_REG(UARTx, UART_FIFO_CONFIG_1), UART_RX_FIFO_CNT);\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Get uart interrupt status\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  intType: UART interrupt type\n                                                                                *\n                                                                                * @return Status of interrupt\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Sts_Type UART_GetIntStatus(UART_ID_Type uartId, UART_INT_Type intType) {\n  uint32_t tmpVal;\n  uint32_t UARTx = uartAddr[uartId];\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n  CHECK_PARAM(IS_UART_INT_TYPE(intType));\n\n  /* Get certain or all interrupt status */\n  tmpVal = BL_RD_REG(UARTx, UART_INT_STS);\n\n  if (UART_INT_ALL == intType) {\n    if ((tmpVal & 0x1ff) != 0) {\n      return SET;\n    } else {\n      return RESET;\n    }\n  } else {\n    if ((tmpVal & (1U << intType)) != 0) {\n      return SET;\n    } else {\n      return RESET;\n    }\n  }\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Get indicator of uart tx bus busy\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                *\n                                                                                * @return Status of tx bus\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Sts_Type UART_GetTxBusBusyStatus(UART_ID_Type uartId) {\n  uint32_t tmpVal;\n  uint32_t UARTx = uartAddr[uartId];\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Get tx bus busy status */\n  tmpVal = BL_RD_REG(UARTx, UART_STATUS);\n\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_STS_UTX_BUS_BUSY)) {\n    return SET;\n  } else {\n    return RESET;\n  }\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Get indicator of uart rx bus busy\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                *\n                                                                                * @return Status of rx bus\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Sts_Type UART_GetRxBusBusyStatus(UART_ID_Type uartId) {\n  uint32_t tmpVal;\n  uint32_t UARTx = uartAddr[uartId];\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n\n  /* Get rx bus busy status */\n  tmpVal = BL_RD_REG(UARTx, UART_STATUS);\n\n  if (BL_IS_REG_BIT_SET(tmpVal, UART_STS_URX_BUS_BUSY)) {\n    return SET;\n  } else {\n    return RESET;\n  }\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  Get tx/rx fifo overflow or underflow status\n                                                                                *\n                                                                                * @param  uartId: UART ID type\n                                                                                * @param  overflow: Select tx/rx overflow or underflow\n                                                                                *\n                                                                                * @return Status of tx/rx fifo\n                                                                                *\n                                                                                *******************************************************************************/\nBL_Sts_Type UART_GetOverflowStatus(UART_ID_Type uartId, UART_Overflow_Type overflow) {\n  uint32_t tmpVal;\n  uint32_t UARTx = uartAddr[uartId];\n\n  /* Check the parameters */\n  CHECK_PARAM(IS_UART_ID_TYPE(uartId));\n  CHECK_PARAM(IS_UART_OVERFLOW_TYPE(overflow));\n\n  /* Get tx/rx fifo overflow or underflow status */\n  tmpVal = BL_RD_REG(UARTx, UART_FIFO_CONFIG_0);\n\n  if ((tmpVal & (1U << (overflow + 4))) != 0) {\n    return SET;\n  } else {\n    return RESET;\n  }\n}\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART0 interrupt handler\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return None\n                                                                                *\n                                                                                *******************************************************************************/\n#ifndef BFLB_USE_HAL_DRIVER\nvoid UART0_IRQHandler(void) { UART_IntHandler(UART0_ID); }\n#endif\n\n/****************************************************************************/ /**\n                                                                                * @brief  UART1 interrupt handler\n                                                                                *\n                                                                                * @param  None\n                                                                                *\n                                                                                * @return None\n                                                                                *\n                                                                                *******************************************************************************/\n#ifndef BFLB_USE_HAL_DRIVER\nvoid UART1_IRQHandler(void) { UART_IntHandler(UART1_ID); }\n#endif\n\n/*@} end of group UART_Public_Functions */\n\n/*@} end of group UART */\n\n/*@} end of group BL702_Peripheral_Driver */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_usb.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl70x_usb.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2019 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_usb.h\"\r\n#include \"bl702_common.h\"\r\n#include \"bl702_glb.h\"\r\n\r\n/** @addtogroup  BL70X_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  USB\r\n *  @{\r\n */\r\n\r\n/** @defgroup  USB_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group USB_Private_Macros */\r\n\r\n/** @defgroup  USB_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group USB_Private_Types */\r\n\r\n/** @defgroup  USB_Private_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group USB_Private_Variables */\r\n\r\n/** @defgroup  USB_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group USB_Global_Variables */\r\n\r\n/** @defgroup  USB_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group USB_Private_Fun_Declaration */\r\n\r\n/** @defgroup  USB_Private_Functions\r\n *  @{\r\n */\r\n\r\n/*@} end of group USB_Private_Functions */\r\n\r\n/** @defgroup  USB_Public_Functions\r\n *  @{\r\n */\r\n\r\nBL_Err_Type USB_Enable(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_USB_EN);\r\n  BL_WR_REG(USB_BASE, USB_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Disable(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_USB_EN);\r\n  BL_WR_REG(USB_BASE, USB_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Set_Config(BL_Fun_Type enable, USB_Config_Type *usbCfg) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* disable USB first */\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_USB_EN);\r\n  BL_WR_REG(USB_BASE, USB_CONFIG, tmpVal);\r\n\r\n  /* USB config */\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n\r\n  if (usbCfg->SoftwareCtrl == ENABLE) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_CTRL);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_USB_EP0_SW_ADDR, usbCfg->DeviceAddress);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_USB_EP0_SW_SIZE, usbCfg->EnumMaxPacketSize);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_USB_EP0_SW_NACK_IN, usbCfg->EnumInEn);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_USB_EP0_SW_NACK_OUT, usbCfg->EnumOutEn);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_USB_ROM_DCT_EN, usbCfg->RomBaseDescriptorUsed);\r\n  } else {\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_CTRL);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_USB_ROM_DCT_EN, usbCfg->RomBaseDescriptorUsed);\r\n  }\r\n\r\n  BL_WR_REG(USB_BASE, USB_CONFIG, tmpVal);\r\n\r\n  /* enable/disable USB */\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n\r\n  if (enable) {\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_USB_EN);\r\n  }\r\n\r\n  BL_WR_REG(USB_BASE, USB_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Set_Device_Addr(uint8_t addr) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_USB_EP0_SW_ADDR, addr);\r\n  BL_WR_REG(USB_BASE, USB_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nuint8_t USB_Get_Device_Addr(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n\r\n  return BL_GET_REG_BITS_VAL(tmpVal, USB_CR_USB_EP0_SW_ADDR);\r\n}\r\n\r\nBL_Err_Type USB_Set_EPx_Xfer_Size(USB_EP_ID epId, uint8_t size) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (epId == EP_ID0) {\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_USB_EP0_SW_SIZE, size);\r\n    BL_WR_REG(USB_BASE, USB_CONFIG, tmpVal);\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP1_SIZE, size);\r\n      BL_WR_REG(USB_BASE, USB_EP1_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP2_SIZE, size);\r\n      BL_WR_REG(USB_BASE, USB_EP2_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP3_SIZE, size);\r\n      BL_WR_REG(USB_BASE, USB_EP3_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP4_SIZE, size);\r\n      BL_WR_REG(USB_BASE, USB_EP4_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP5_SIZE, size);\r\n      BL_WR_REG(USB_BASE, USB_EP5_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP6_SIZE, size);\r\n      BL_WR_REG(USB_BASE, USB_EP6_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n      tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP7_SIZE, size);\r\n      BL_WR_REG(USB_BASE, USB_EP7_CONFIG, tmpVal);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Set_EPx_IN_Busy(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (epId == EP_ID0) {\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_NACK_IN);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_STALL);\r\n    BL_WR_REG(USB_BASE, USB_CONFIG, tmpVal);\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP1_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP1_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP1_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP2_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP2_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP2_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP3_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP3_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP3_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP4_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP4_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP4_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP5_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP5_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP5_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP6_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP6_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP6_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP7_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP7_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP7_CONFIG, tmpVal);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Set_EPx_IN_Stall(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (epId == EP_ID0) {\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_NACK_OUT);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_NACK_IN);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_STALL);\r\n    BL_WR_REG(USB_BASE, USB_CONFIG, tmpVal);\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP1_NACK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP1_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP1_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP2_NACK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP2_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP2_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP3_NACK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP3_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP3_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP4_NACK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP4_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP4_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP5_NACK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP5_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP5_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP6_NACK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP6_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP6_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP7_NACK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP7_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP7_CONFIG, tmpVal);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Set_EPx_OUT_Busy(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (epId == EP_ID0) {\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_NACK_OUT);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_STALL);\r\n    BL_WR_REG(USB_BASE, USB_CONFIG, tmpVal);\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP1_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP1_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP1_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP2_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP2_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP2_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP3_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP3_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP3_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP4_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP4_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP4_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP5_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP5_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP5_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP6_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP6_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP6_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP7_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP7_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP7_CONFIG, tmpVal);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Set_EPx_OUT_Stall(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (epId == EP_ID0) {\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_NACK_OUT);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_NACK_IN);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_STALL);\r\n    BL_WR_REG(USB_BASE, USB_CONFIG, tmpVal);\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP1_NACK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP1_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP1_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP2_NACK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP2_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP2_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP3_NACK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP3_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP3_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP4_NACK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP4_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP4_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP5_NACK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP5_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP5_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP6_NACK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP6_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP6_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP7_NACK);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP7_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP7_CONFIG, tmpVal);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Set_EPx_Rdy(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (epId == EP_ID0) {\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_RDY);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_NACK_OUT);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_NACK_IN);\r\n    tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_STALL);\r\n    BL_WR_REG(USB_BASE, USB_CONFIG, tmpVal);\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP1_RDY);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP1_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP1_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP1_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP2_RDY);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP2_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP2_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP2_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP3_RDY);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP3_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP3_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP3_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP4_RDY);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP4_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP4_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP4_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP5_RDY);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP5_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP5_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP5_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP6_RDY);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP6_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP6_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP6_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP7_RDY);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP7_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP7_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP7_CONFIG, tmpVal);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Sts_Type USB_Is_EPx_RDY_Free(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (epId == EP_ID0) {\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_STS_USB_EP0_SW_RDY);\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_STS_EP1_RDY);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_STS_EP2_RDY);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_STS_EP3_RDY);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_STS_EP4_RDY);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_STS_EP5_RDY);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_STS_EP6_RDY);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_STS_EP7_RDY);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n\r\n  return tmpVal ? RESET : SET;\r\n}\r\n\r\nBL_Err_Type USB_Set_EPx_STALL(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (epId == EP_ID0) {\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_STALL);\r\n    BL_WR_REG(USB_BASE, USB_CONFIG, tmpVal);\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP1_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP1_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP2_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP2_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP3_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP3_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP4_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP4_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP5_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP5_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP6_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP6_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP7_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP7_CONFIG, tmpVal);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Clr_EPx_STALL(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (epId == EP_ID0) {\r\n    return SUCCESS;\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP1_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP1_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP2_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP2_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP3_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP3_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP4_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP4_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP5_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP5_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP6_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP6_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP7_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP7_CONFIG, tmpVal);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Set_EPx_Busy(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (epId == EP_ID0) {\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_NACK_IN);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_USB_EP0_SW_NACK_OUT);\r\n    BL_WR_REG(USB_BASE, USB_CONFIG, tmpVal);\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP1_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP1_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP1_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP2_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP2_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP2_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP3_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP3_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP3_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP4_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP4_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP4_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP5_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP5_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP5_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP6_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP6_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP6_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_EP7_NACK);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_EP7_STALL);\r\n      BL_WR_REG(USB_BASE, USB_EP7_CONFIG, tmpVal);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Set_EPx_Status(USB_EP_ID epId, USB_EP_STATUS_Type sts) {\r\n  switch (sts) {\r\n  case USB_EP_STATUS_ACK:\r\n    USB_Set_EPx_Rdy(epId);\r\n    break;\r\n\r\n  case USB_EP_STATUS_NACK:\r\n    USB_Set_EPx_Busy(epId);\r\n    break;\r\n\r\n  case USB_EP_STATUS_STALL:\r\n    USB_Set_EPx_STALL(epId);\r\n    break;\r\n\r\n  case USB_EP_STATUS_NSTALL:\r\n    USB_Clr_EPx_STALL(epId);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nUSB_EP_STATUS_Type USB_Get_EPx_Status(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (epId == EP_ID0) {\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n\r\n    switch ((tmpVal >> 24) & 0x7) {\r\n    case 0:\r\n      return USB_EP_STATUS_ACK;\r\n\r\n    case 1:\r\n      return USB_EP_STATUS_STALL;\r\n\r\n    case 2:\r\n    case 4:\r\n    case 6:\r\n      return USB_EP_STATUS_NACK;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n      break;\r\n\r\n    default:\r\n      tmpVal = 0;\r\n      break;\r\n    }\r\n\r\n    switch ((tmpVal >> 14) & 0x3) {\r\n    case 0:\r\n      return USB_EP_STATUS_ACK;\r\n\r\n    case 1:\r\n      return USB_EP_STATUS_STALL;\r\n\r\n    case 2:\r\n      return USB_EP_STATUS_NACK;\r\n\r\n    case 3:\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n\r\n  return USB_EP_STATUS_NSTALL;\r\n}\r\n\r\nBL_Err_Type USB_IntEn(USB_INT_Type intType, uint8_t enable) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (USB_INT_ALL == intType) {\r\n    if (enable) {\r\n      BL_WR_REG(USB_BASE, USB_INT_EN, USB_INT_TYPE_ALL);\r\n    } else {\r\n      BL_WR_REG(USB_BASE, USB_INT_EN, ~USB_INT_TYPE_ALL);\r\n    }\r\n\r\n    return SUCCESS;\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_INT_EN);\r\n\r\n  if (enable) {\r\n    tmpVal |= (1 << intType);\r\n  } else {\r\n    tmpVal &= ~(1 << intType);\r\n  }\r\n\r\n  BL_WR_REG(USB_BASE, USB_INT_EN, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_IntMask(USB_INT_Type intType, BL_Mask_Type intMask) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (USB_INT_ALL == intType) {\r\n    if (intMask != UNMASK) {\r\n      BL_WR_REG(USB_BASE, USB_INT_MASK, USB_INT_TYPE_ALL);\r\n    } else {\r\n      BL_WR_REG(USB_BASE, USB_INT_MASK, ~USB_INT_TYPE_ALL);\r\n    }\r\n\r\n    return SUCCESS;\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_INT_MASK);\r\n\r\n  if (intMask != UNMASK) {\r\n    tmpVal |= (1 << intType);\r\n  } else {\r\n    tmpVal &= ~(1 << intType);\r\n  }\r\n\r\n  BL_WR_REG(USB_BASE, USB_INT_MASK, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Sts_Type USB_Get_IntStatus(USB_INT_Type intType) {\r\n  if (USB_INT_ALL == intType) {\r\n    return BL_RD_REG(USB_BASE, USB_INT_STS) ? SET : RESET;\r\n  }\r\n\r\n  return ((BL_RD_REG(USB_BASE, USB_INT_STS) & (1 << intType))) ? SET : RESET;\r\n}\r\n\r\nBL_Err_Type USB_Clr_IntStatus(USB_INT_Type intType) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (USB_INT_ALL == intType) {\r\n    BL_WR_REG(USB_BASE, USB_INT_CLEAR, USB_INT_TYPE_ALL);\r\n\r\n    return SUCCESS;\r\n  }\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_INT_CLEAR);\r\n  tmpVal |= (1 << intType);\r\n  BL_WR_REG(USB_BASE, USB_INT_CLEAR, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Clr_EPx_IntStatus(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_INT_CLEAR);\r\n\r\n  if (epId == EP_ID0) {\r\n    tmpVal |= (0x3F << 4);\r\n  } else {\r\n    tmpVal |= (0x3 << (epId * 2 + 8));\r\n  }\r\n\r\n  BL_WR_REG(USB_BASE, USB_INT_CLEAR, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nuint16_t USB_Get_Frame_Num(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_FRAME_NO);\r\n\r\n  return tmpVal & 0x7ff;\r\n}\r\n\r\nBL_Err_Type USB_Set_EPx_Config(USB_EP_ID epId, EP_Config_Type *epCfg) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (epId == EP_ID0) {\r\n    return ERROR;\r\n  }\r\n\r\n  switch (epId) {\r\n  case EP_ID1:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP1_TYPE, epCfg->type);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP1_DIR, epCfg->dir);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP1_SIZE, epCfg->EPMaxPacketSize);\r\n    BL_WR_REG(USB_BASE, USB_EP1_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID2:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP2_TYPE, epCfg->type);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP2_DIR, epCfg->dir);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP2_SIZE, epCfg->EPMaxPacketSize);\r\n    BL_WR_REG(USB_BASE, USB_EP2_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID3:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP3_TYPE, epCfg->type);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP3_DIR, epCfg->dir);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP3_SIZE, epCfg->EPMaxPacketSize);\r\n    BL_WR_REG(USB_BASE, USB_EP3_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID4:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP4_TYPE, epCfg->type);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP4_DIR, epCfg->dir);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP4_SIZE, epCfg->EPMaxPacketSize);\r\n    BL_WR_REG(USB_BASE, USB_EP4_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID5:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP5_TYPE, epCfg->type);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP5_DIR, epCfg->dir);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP5_SIZE, epCfg->EPMaxPacketSize);\r\n    BL_WR_REG(USB_BASE, USB_EP5_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID6:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP6_TYPE, epCfg->type);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP6_DIR, epCfg->dir);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP6_SIZE, epCfg->EPMaxPacketSize);\r\n    BL_WR_REG(USB_BASE, USB_EP6_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID7:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP7_TYPE, epCfg->type);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP7_DIR, epCfg->dir);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP7_SIZE, epCfg->EPMaxPacketSize);\r\n    BL_WR_REG(USB_BASE, USB_EP7_CONFIG, tmpVal);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Set_EPx_Type(USB_EP_ID epId, EP_XFER_Type type) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (epId == EP_ID0) {\r\n    return ERROR;\r\n  }\r\n\r\n  switch (epId) {\r\n  case EP_ID1:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP1_TYPE, type);\r\n    BL_WR_REG(USB_BASE, USB_EP1_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID2:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP2_TYPE, type);\r\n    BL_WR_REG(USB_BASE, USB_EP2_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID3:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP3_TYPE, type);\r\n    BL_WR_REG(USB_BASE, USB_EP3_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID4:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP4_TYPE, type);\r\n    BL_WR_REG(USB_BASE, USB_EP4_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID5:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP5_TYPE, type);\r\n    BL_WR_REG(USB_BASE, USB_EP5_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID6:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP6_TYPE, type);\r\n    BL_WR_REG(USB_BASE, USB_EP6_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID7:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP7_TYPE, type);\r\n    BL_WR_REG(USB_BASE, USB_EP7_CONFIG, tmpVal);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nEP_XFER_Type USB_Get_EPx_Type(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (epId == EP_ID0) {\r\n    return EP_CTRL;\r\n  }\r\n\r\n  switch (epId) {\r\n  case EP_ID1:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_CR_EP1_TYPE);\r\n    break;\r\n\r\n  case EP_ID2:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_CR_EP2_TYPE);\r\n    break;\r\n\r\n  case EP_ID3:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_CR_EP3_TYPE);\r\n    break;\r\n\r\n  case EP_ID4:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_CR_EP4_TYPE);\r\n    break;\r\n\r\n  case EP_ID5:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_CR_EP5_TYPE);\r\n    break;\r\n\r\n  case EP_ID6:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_CR_EP6_TYPE);\r\n    break;\r\n\r\n  case EP_ID7:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_CR_EP7_TYPE);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return (EP_XFER_Type)tmpVal;\r\n}\r\n\r\nBL_Err_Type USB_Set_EPx_Dir(USB_EP_ID epId, EP_XFER_DIR dir) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (epId == EP_ID0) {\r\n    return ERROR;\r\n  }\r\n\r\n  switch (epId) {\r\n  case EP_ID1:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP1_DIR, dir);\r\n    BL_WR_REG(USB_BASE, USB_EP1_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID2:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP2_DIR, dir);\r\n    BL_WR_REG(USB_BASE, USB_EP2_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID3:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP3_DIR, dir);\r\n    BL_WR_REG(USB_BASE, USB_EP3_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID4:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP4_DIR, dir);\r\n    BL_WR_REG(USB_BASE, USB_EP4_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID5:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP5_DIR, dir);\r\n    BL_WR_REG(USB_BASE, USB_EP5_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID6:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP6_DIR, dir);\r\n    BL_WR_REG(USB_BASE, USB_EP6_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID7:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP7_DIR, dir);\r\n    BL_WR_REG(USB_BASE, USB_EP7_CONFIG, tmpVal);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nEP_XFER_DIR USB_Get_EPx_Dir(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (epId == EP_ID0) {\r\n    return EP_DISABLED;\r\n  }\r\n\r\n  switch (epId) {\r\n  case EP_ID1:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_CR_EP1_DIR);\r\n    break;\r\n\r\n  case EP_ID2:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_CR_EP2_DIR);\r\n    break;\r\n\r\n  case EP_ID3:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_CR_EP3_DIR);\r\n    break;\r\n\r\n  case EP_ID4:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_CR_EP4_DIR);\r\n    break;\r\n\r\n  case EP_ID5:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_CR_EP5_DIR);\r\n    break;\r\n\r\n  case EP_ID6:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_CR_EP6_DIR);\r\n    break;\r\n\r\n  case EP_ID7:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_CR_EP7_DIR);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return (EP_XFER_DIR)tmpVal;\r\n}\r\n\r\nBL_Err_Type USB_Set_EPx_Size(USB_EP_ID epId, uint32_t size) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  switch (epId) {\r\n  case EP_ID0:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_USB_EP0_SW_SIZE, size);\r\n    BL_WR_REG(USB_BASE, USB_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID1:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP1_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP1_SIZE, size);\r\n    BL_WR_REG(USB_BASE, USB_EP1_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID2:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP2_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP2_SIZE, size);\r\n    BL_WR_REG(USB_BASE, USB_EP2_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID3:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP3_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP3_SIZE, size);\r\n    BL_WR_REG(USB_BASE, USB_EP3_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID4:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP4_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP4_SIZE, size);\r\n    BL_WR_REG(USB_BASE, USB_EP4_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID5:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP5_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP5_SIZE, size);\r\n    BL_WR_REG(USB_BASE, USB_EP5_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID6:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP6_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP6_SIZE, size);\r\n    BL_WR_REG(USB_BASE, USB_EP6_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID7:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP7_CONFIG);\r\n    tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_EP7_SIZE, size);\r\n    BL_WR_REG(USB_BASE, USB_EP7_CONFIG, tmpVal);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Sts_Type USB_Get_EPx_TX_FIFO_Errors(USB_EP_ID epId, USB_FIFO_ERROR_FLAG_Type errFlag) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (errFlag == USB_FIFO_ERROR_OVERFLOW) {\r\n    switch (epId) {\r\n    case EP_ID0:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP0_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP0_TX_FIFO_OVERFLOW);\r\n      break;\r\n\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP1_TX_FIFO_OVERFLOW);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP2_TX_FIFO_OVERFLOW);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP3_TX_FIFO_OVERFLOW);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP4_TX_FIFO_OVERFLOW);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP5_TX_FIFO_OVERFLOW);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP6_TX_FIFO_OVERFLOW);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP7_TX_FIFO_OVERFLOW);\r\n      break;\r\n\r\n    default:\r\n      tmpVal = 0;\r\n      break;\r\n    }\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID0:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP0_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP0_TX_FIFO_UNDERFLOW);\r\n      break;\r\n\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP1_TX_FIFO_UNDERFLOW);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP2_TX_FIFO_UNDERFLOW);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP3_TX_FIFO_UNDERFLOW);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP4_TX_FIFO_UNDERFLOW);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP5_TX_FIFO_UNDERFLOW);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP6_TX_FIFO_UNDERFLOW);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP7_TX_FIFO_UNDERFLOW);\r\n      break;\r\n\r\n    default:\r\n      tmpVal = 0;\r\n      break;\r\n    }\r\n  }\r\n\r\n  return tmpVal ? SET : RESET;\r\n}\r\n\r\nBL_Sts_Type USB_Get_EPx_RX_FIFO_Errors(USB_EP_ID epId, USB_FIFO_ERROR_FLAG_Type errFlag) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (errFlag == USB_FIFO_ERROR_OVERFLOW) {\r\n    switch (epId) {\r\n    case EP_ID0:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP0_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP0_RX_FIFO_OVERFLOW);\r\n      break;\r\n\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP1_RX_FIFO_OVERFLOW);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP2_RX_FIFO_OVERFLOW);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP3_RX_FIFO_OVERFLOW);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP4_RX_FIFO_OVERFLOW);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP5_RX_FIFO_OVERFLOW);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP6_RX_FIFO_OVERFLOW);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP7_RX_FIFO_OVERFLOW);\r\n      break;\r\n\r\n    default:\r\n      tmpVal = 0;\r\n      break;\r\n    }\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID0:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP0_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP0_RX_FIFO_UNDERFLOW);\r\n      break;\r\n\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP1_RX_FIFO_UNDERFLOW);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP2_RX_FIFO_UNDERFLOW);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP3_RX_FIFO_UNDERFLOW);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP4_RX_FIFO_UNDERFLOW);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP5_RX_FIFO_UNDERFLOW);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP6_RX_FIFO_UNDERFLOW);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_FIFO_CONFIG);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP7_RX_FIFO_UNDERFLOW);\r\n      break;\r\n\r\n    default:\r\n      tmpVal = 0;\r\n      break;\r\n    }\r\n  }\r\n\r\n  return tmpVal ? SET : RESET;\r\n}\r\n\r\nBL_Err_Type USB_Clr_EPx_TX_FIFO_Errors(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  switch (epId) {\r\n  case EP_ID0:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP0_FIFO_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP0_TX_FIFO_CLR);\r\n    BL_WR_REG(USB_BASE, USB_EP0_FIFO_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID1:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP1_FIFO_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP1_TX_FIFO_CLR);\r\n    BL_WR_REG(USB_BASE, USB_EP1_FIFO_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID2:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP2_FIFO_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP2_TX_FIFO_CLR);\r\n    BL_WR_REG(USB_BASE, USB_EP2_FIFO_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID3:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP3_FIFO_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP3_TX_FIFO_CLR);\r\n    BL_WR_REG(USB_BASE, USB_EP3_FIFO_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID4:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP4_FIFO_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP4_TX_FIFO_CLR);\r\n    BL_WR_REG(USB_BASE, USB_EP4_FIFO_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID5:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP5_FIFO_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP5_TX_FIFO_CLR);\r\n    BL_WR_REG(USB_BASE, USB_EP5_FIFO_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID6:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP6_FIFO_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP6_TX_FIFO_CLR);\r\n    BL_WR_REG(USB_BASE, USB_EP6_FIFO_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID7:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP7_FIFO_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP7_TX_FIFO_CLR);\r\n    BL_WR_REG(USB_BASE, USB_EP7_FIFO_CONFIG, tmpVal);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Clr_EPx_RX_FIFO_Errors(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  switch (epId) {\r\n  case EP_ID0:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP0_FIFO_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP0_RX_FIFO_CLR);\r\n    BL_WR_REG(USB_BASE, USB_EP0_FIFO_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID1:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP1_FIFO_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP1_RX_FIFO_CLR);\r\n    BL_WR_REG(USB_BASE, USB_EP1_FIFO_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID2:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP2_FIFO_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP2_RX_FIFO_CLR);\r\n    BL_WR_REG(USB_BASE, USB_EP2_FIFO_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID3:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP3_FIFO_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP3_RX_FIFO_CLR);\r\n    BL_WR_REG(USB_BASE, USB_EP3_FIFO_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID4:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP4_FIFO_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP4_RX_FIFO_CLR);\r\n    BL_WR_REG(USB_BASE, USB_EP4_FIFO_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID5:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP5_FIFO_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP5_RX_FIFO_CLR);\r\n    BL_WR_REG(USB_BASE, USB_EP5_FIFO_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID6:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP6_FIFO_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP6_RX_FIFO_CLR);\r\n    BL_WR_REG(USB_BASE, USB_EP6_FIFO_CONFIG, tmpVal);\r\n    break;\r\n\r\n  case EP_ID7:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP7_FIFO_CONFIG);\r\n    tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP7_RX_FIFO_CLR);\r\n    BL_WR_REG(USB_BASE, USB_EP7_FIFO_CONFIG, tmpVal);\r\n    break;\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_EPx_Write_Data_To_FIFO(USB_EP_ID epId, uint8_t *pData, uint16_t len) {\r\n  uint32_t timeout = 0x00FFFFFF;\r\n\r\n  while ((!USB_Is_EPx_RDY_Free(epId)) && timeout) {\r\n    timeout--;\r\n  }\r\n\r\n  if (!timeout) {\r\n    return ERROR;\r\n  }\r\n\r\n  if (len == 1) {\r\n    USB_Set_EPx_Xfer_Size(EP_ID0, 1);\r\n  } else {\r\n    USB_Set_EPx_Xfer_Size(EP_ID0, 64);\r\n  }\r\n\r\n  for (uint16_t i = 0; i < len; i++) {\r\n    switch (epId) {\r\n    case EP_ID0:\r\n      BL_WR_REG(USB_BASE, USB_EP0_TX_FIFO_WDATA, pData[i]);\r\n      break;\r\n\r\n    case EP_ID1:\r\n      BL_WR_REG(USB_BASE, USB_EP1_TX_FIFO_WDATA, pData[i]);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      BL_WR_REG(USB_BASE, USB_EP2_TX_FIFO_WDATA, pData[i]);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      BL_WR_REG(USB_BASE, USB_EP3_TX_FIFO_WDATA, pData[i]);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      BL_WR_REG(USB_BASE, USB_EP4_TX_FIFO_WDATA, pData[i]);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      BL_WR_REG(USB_BASE, USB_EP5_TX_FIFO_WDATA, pData[i]);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      BL_WR_REG(USB_BASE, USB_EP6_TX_FIFO_WDATA, pData[i]);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      BL_WR_REG(USB_BASE, USB_EP7_TX_FIFO_WDATA, pData[i]);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_EPx_Read_Data_From_FIFO(USB_EP_ID epId, uint8_t *pBuff, uint16_t len) {\r\n  for (uint16_t i = 0; i < len; i++) {\r\n    switch (epId) {\r\n    case EP_ID0:\r\n      pBuff[i] = (uint8_t)BL_RD_REG(USB_BASE, USB_EP0_RX_FIFO_RDATA);\r\n      break;\r\n\r\n    case EP_ID1:\r\n      pBuff[i] = (uint8_t)BL_RD_REG(USB_BASE, USB_EP1_RX_FIFO_RDATA);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      pBuff[i] = (uint8_t)BL_RD_REG(USB_BASE, USB_EP2_RX_FIFO_RDATA);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      pBuff[i] = (uint8_t)BL_RD_REG(USB_BASE, USB_EP3_RX_FIFO_RDATA);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      pBuff[i] = (uint8_t)BL_RD_REG(USB_BASE, USB_EP4_RX_FIFO_RDATA);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      pBuff[i] = (uint8_t)BL_RD_REG(USB_BASE, USB_EP5_RX_FIFO_RDATA);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      pBuff[i] = (uint8_t)BL_RD_REG(USB_BASE, USB_EP6_RX_FIFO_RDATA);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      pBuff[i] = (uint8_t)BL_RD_REG(USB_BASE, USB_EP7_RX_FIFO_RDATA);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Set_EPx_TX_DMA_Interface_Config(USB_EP_ID epId, BL_Fun_Type newState) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (newState == ENABLE) {\r\n    switch (epId) {\r\n    case EP_ID0:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP0_FIFO_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP0_DMA_TX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP0_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_FIFO_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP1_DMA_TX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP1_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_FIFO_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP2_DMA_TX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP2_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_FIFO_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP3_DMA_TX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP3_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_FIFO_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP4_DMA_TX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP4_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_FIFO_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP5_DMA_TX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP5_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_FIFO_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP6_DMA_TX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP6_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_FIFO_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP7_DMA_TX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP7_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID0:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP0_FIFO_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_EP0_DMA_TX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP0_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_FIFO_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_EP1_DMA_TX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP1_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_FIFO_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_EP2_DMA_TX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP2_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_FIFO_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_EP3_DMA_TX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP3_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_FIFO_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_EP4_DMA_TX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP4_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_FIFO_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_EP5_DMA_TX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP5_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_FIFO_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_EP6_DMA_TX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP6_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_FIFO_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_EP7_DMA_TX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP7_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Set_EPx_RX_DMA_Interface_Config(USB_EP_ID epId, BL_Fun_Type newState) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (newState == ENABLE) {\r\n    switch (epId) {\r\n    case EP_ID0:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP0_FIFO_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP0_DMA_RX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP0_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_FIFO_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP1_DMA_RX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP1_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_FIFO_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP2_DMA_RX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP2_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_FIFO_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP3_DMA_RX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP3_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_FIFO_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP4_DMA_RX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP4_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_FIFO_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP5_DMA_RX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP5_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_FIFO_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP6_DMA_RX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP6_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_FIFO_CONFIG);\r\n      tmpVal = BL_SET_REG_BIT(tmpVal, USB_EP7_DMA_RX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP7_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID0:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP0_FIFO_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_EP0_DMA_RX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP0_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_FIFO_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_EP1_DMA_RX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP1_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_FIFO_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_EP2_DMA_RX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP2_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_FIFO_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_EP3_DMA_RX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP3_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_FIFO_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_EP4_DMA_RX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP4_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_FIFO_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_EP5_DMA_RX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP5_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_FIFO_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_EP6_DMA_RX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP6_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_FIFO_CONFIG);\r\n      tmpVal = BL_CLR_REG_BIT(tmpVal, USB_EP7_DMA_RX_EN);\r\n      BL_WR_REG(USB_BASE, USB_EP7_FIFO_CONFIG, tmpVal);\r\n      break;\r\n\r\n    default:\r\n      break;\r\n    }\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_EPx_Write_Data_To_FIFO_DMA(USB_EP_ID epId, uint8_t *pData, uint16_t len) {\r\n  /* not yet implemented */\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_EPx_Read_Data_From_FIFO_DMA(USB_EP_ID epId, uint8_t *pBuff, uint16_t len) {\r\n  /* not yet implemented */\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nuint16_t USB_Get_EPx_TX_FIFO_CNT(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  switch (epId) {\r\n  case EP_ID0:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP0_FIFO_STATUS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP0_TX_FIFO_CNT);\r\n    break;\r\n\r\n  case EP_ID1:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP1_FIFO_STATUS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP1_TX_FIFO_CNT);\r\n    break;\r\n\r\n  case EP_ID2:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP2_FIFO_STATUS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP2_TX_FIFO_CNT);\r\n    break;\r\n\r\n  case EP_ID3:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP3_FIFO_STATUS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP3_TX_FIFO_CNT);\r\n    break;\r\n\r\n  case EP_ID4:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP4_FIFO_STATUS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP4_TX_FIFO_CNT);\r\n    break;\r\n\r\n  case EP_ID5:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP5_FIFO_STATUS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP5_TX_FIFO_CNT);\r\n    break;\r\n\r\n  case EP_ID6:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP6_FIFO_STATUS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP6_TX_FIFO_CNT);\r\n    break;\r\n\r\n  case EP_ID7:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP7_FIFO_STATUS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP7_TX_FIFO_CNT);\r\n    break;\r\n\r\n  default:\r\n    tmpVal = 0;\r\n    break;\r\n  }\r\n\r\n  return tmpVal;\r\n}\r\n\r\nuint16_t USB_Get_EPx_RX_FIFO_CNT(USB_EP_ID epId) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  switch (epId) {\r\n  case EP_ID0:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP0_FIFO_STATUS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP0_RX_FIFO_CNT);\r\n    break;\r\n\r\n  case EP_ID1:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP1_FIFO_STATUS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP1_RX_FIFO_CNT);\r\n    break;\r\n\r\n  case EP_ID2:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP2_FIFO_STATUS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP2_RX_FIFO_CNT);\r\n    break;\r\n\r\n  case EP_ID3:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP3_FIFO_STATUS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP3_RX_FIFO_CNT);\r\n    break;\r\n\r\n  case EP_ID4:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP4_FIFO_STATUS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP4_RX_FIFO_CNT);\r\n    break;\r\n\r\n  case EP_ID5:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP5_FIFO_STATUS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP5_RX_FIFO_CNT);\r\n    break;\r\n\r\n  case EP_ID6:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP6_FIFO_STATUS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP6_RX_FIFO_CNT);\r\n    break;\r\n\r\n  case EP_ID7:\r\n    tmpVal = BL_RD_REG(USB_BASE, USB_EP7_FIFO_STATUS);\r\n    tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP7_RX_FIFO_CNT);\r\n    break;\r\n\r\n  default:\r\n    tmpVal = 0;\r\n    break;\r\n  }\r\n\r\n  return tmpVal;\r\n}\r\n\r\nBL_Sts_Type USB_Get_EPx_TX_FIFO_Status(USB_EP_ID epId, USB_FIFO_STATUS_Type sts) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (sts == USB_FIFO_EMPTY) {\r\n    switch (epId) {\r\n    case EP_ID0:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP0_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP0_TX_FIFO_EMPTY);\r\n      break;\r\n\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP1_TX_FIFO_EMPTY);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP2_TX_FIFO_EMPTY);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP3_TX_FIFO_EMPTY);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP4_TX_FIFO_EMPTY);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP5_TX_FIFO_EMPTY);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP6_TX_FIFO_EMPTY);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP7_TX_FIFO_EMPTY);\r\n      break;\r\n\r\n    default:\r\n      tmpVal = 0;\r\n      break;\r\n    }\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID0:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP0_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP0_TX_FIFO_FULL);\r\n      break;\r\n\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP1_TX_FIFO_FULL);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP2_TX_FIFO_FULL);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP3_TX_FIFO_FULL);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP4_TX_FIFO_FULL);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP5_TX_FIFO_FULL);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP6_TX_FIFO_FULL);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP7_TX_FIFO_FULL);\r\n      break;\r\n\r\n    default:\r\n      tmpVal = 0;\r\n      break;\r\n    }\r\n  }\r\n\r\n  return tmpVal ? SET : RESET;\r\n}\r\n\r\nBL_Sts_Type USB_Get_EPx_RX_FIFO_Status(USB_EP_ID epId, USB_FIFO_STATUS_Type sts) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  if (sts == USB_FIFO_EMPTY) {\r\n    switch (epId) {\r\n    case EP_ID0:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP0_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP0_RX_FIFO_EMPTY);\r\n      break;\r\n\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP1_RX_FIFO_EMPTY);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP2_RX_FIFO_EMPTY);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP3_RX_FIFO_EMPTY);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP4_RX_FIFO_EMPTY);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP5_RX_FIFO_EMPTY);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP6_RX_FIFO_EMPTY);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP7_RX_FIFO_EMPTY);\r\n      break;\r\n\r\n    default:\r\n      tmpVal = 0;\r\n      break;\r\n    }\r\n  } else {\r\n    switch (epId) {\r\n    case EP_ID0:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP0_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP0_RX_FIFO_FULL);\r\n      break;\r\n\r\n    case EP_ID1:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP1_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP1_RX_FIFO_FULL);\r\n      break;\r\n\r\n    case EP_ID2:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP2_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP2_RX_FIFO_FULL);\r\n      break;\r\n\r\n    case EP_ID3:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP3_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP3_RX_FIFO_FULL);\r\n      break;\r\n\r\n    case EP_ID4:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP4_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP4_RX_FIFO_FULL);\r\n      break;\r\n\r\n    case EP_ID5:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP5_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP5_RX_FIFO_FULL);\r\n      break;\r\n\r\n    case EP_ID6:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP6_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP6_RX_FIFO_FULL);\r\n      break;\r\n\r\n    case EP_ID7:\r\n      tmpVal = BL_RD_REG(USB_BASE, USB_EP7_FIFO_STATUS);\r\n      tmpVal = BL_GET_REG_BITS_VAL(tmpVal, USB_EP7_RX_FIFO_FULL);\r\n      break;\r\n\r\n    default:\r\n      tmpVal = 0;\r\n      break;\r\n    }\r\n  }\r\n\r\n  return tmpVal ? SET : RESET;\r\n}\r\n\r\nBL_Err_Type USB_Set_Internal_PullUp_Config(BL_Fun_Type newState) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  /* recommended: fclk<=160MHz, bclk<=80MHz */\r\n  tmpVal = BL_RD_REG(GLB_BASE, GLB_USB_XCVR);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, GLB_USB_ENUM, newState);\r\n  BL_WR_REG(GLB_BASE, GLB_USB_XCVR, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Sts_Type USB_Get_LPM_Status(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_LPM_CONFIG);\r\n\r\n  return BL_GET_REG_BITS_VAL(tmpVal, USB_STS_LPM) ? SET : RESET;\r\n}\r\n\r\nuint16_t USB_Get_LPM_Packet_Attr(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_LPM_CONFIG);\r\n\r\n  return BL_GET_REG_BITS_VAL(tmpVal, USB_STS_LPM_ATTR);\r\n}\r\n\r\nBL_Err_Type USB_Set_LPM_Default_Response(USB_LPM_DEFAULT_RESP_Type defaultResp) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_LPM_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_LPM_RESP, defaultResp);\r\n  BL_WR_REG(USB_BASE, USB_LPM_CONFIG, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_LPM_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_LPM_RESP_UPD);\r\n  BL_WR_REG(USB_BASE, USB_LPM_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_LPM_Enable(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_LPM_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_LPM_EN);\r\n  BL_WR_REG(USB_BASE, USB_LPM_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_LPM_Disable(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_LPM_CONFIG);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, USB_CR_LPM_EN);\r\n  BL_WR_REG(USB_BASE, USB_LPM_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Device_Output_K_State(uint16_t stateWidth) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  CHECK_PARAM((stateWidth <= 0x7FF));\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_RESUME_CONFIG);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, USB_CR_RES_WIDTH, stateWidth);\r\n  BL_WR_REG(USB_BASE, USB_RESUME_CONFIG, tmpVal);\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_RESUME_CONFIG);\r\n  tmpVal = BL_SET_REG_BIT(tmpVal, USB_CR_RES_TRIG);\r\n  BL_WR_REG(USB_BASE, USB_RESUME_CONFIG, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nuint8_t USB_Get_Current_Packet_PID(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_FRAME_NO);\r\n\r\n  return BL_GET_REG_BITS_VAL(tmpVal, USB_STS_PID);\r\n}\r\n\r\nuint8_t USB_Get_Current_Packet_EP(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_FRAME_NO);\r\n\r\n  return BL_GET_REG_BITS_VAL(tmpVal, USB_STS_EP_NO);\r\n}\r\n\r\nBL_Sts_Type USB_Get_Error_Status(USB_ERROR_Type err) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_ERROR);\r\n\r\n  return tmpVal & (1 << err) ? SET : RESET;\r\n}\r\n\r\nBL_Err_Type USB_Clr_Error_Status(USB_ERROR_Type err) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_INT_CLEAR);\r\n  tmpVal |= (1 << USB_INT_ERROR);\r\n  BL_WR_REG(USB_BASE, USB_INT_CLEAR, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\nBL_Err_Type USB_Clr_RstEndIntStatus(void) {\r\n  uint32_t tmpVal = 0;\r\n\r\n  tmpVal = BL_RD_REG(USB_BASE, USB_INT_CLEAR);\r\n  tmpVal |= (1 << 27);\r\n  BL_WR_REG(USB_BASE, USB_INT_CLEAR, tmpVal);\r\n\r\n  return SUCCESS;\r\n}\r\n\r\n/*@} end of group USB_Public_Functions */\r\n\r\n/*@} end of group USB */\r\n\r\n/*@} end of group BL70X_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_xip_sflash.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_xip_sflash.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_xip_sflash.h\"\r\n#include \"string.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  XIP_SFLASH\r\n *  @{\r\n */\r\n\r\n/** @defgroup  XIP_SFLASH_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group XIP_SFLASH_Private_Macros */\r\n\r\n/** @defgroup  XIP_SFLASH_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group XIP_SFLASH_Private_Types */\r\n\r\n/** @defgroup  XIP_SFLASH_Private_Variables\r\n *  @{\r\n */\r\nstatic uint8_t aesEnable;\r\n\r\n/*@} end of group XIP_SFLASH_Private_Variables */\r\n\r\n/** @defgroup  XIP_SFLASH_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group XIP_SFLASH_Global_Variables */\r\n\r\n/** @defgroup  XIP_SFLASH_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group XIP_SFLASH_Private_Fun_Declaration */\r\n\r\n/** @defgroup  XIP_SFLASH_Private_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  XIP SFlash option save\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid ATTR_TCM_SECTION XIP_SFlash_Opt_Enter(void) {\r\n  aesEnable = SF_Ctrl_Is_AES_Enable();\r\n\r\n  if (aesEnable) {\r\n    SF_Ctrl_AES_Disable();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  XIP SFlash option restore\r\n                                                                                *\r\n                                                                                * @param  None\r\n                                                                                *\r\n                                                                                * @return None\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\nvoid ATTR_TCM_SECTION XIP_SFlash_Opt_Exit(void) {\r\n  if (aesEnable) {\r\n    SF_Ctrl_AES_Enable();\r\n  }\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Save flash controller state\r\n                                                                                *\r\n                                                                                * @param  pFlashCfg: Flash config pointer\r\n                                                                                * @param  offset: CPU XIP flash offset pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION XIP_SFlash_State_Save(SPI_Flash_Cfg_Type *pFlashCfg, uint32_t *offset) {\r\n  /* XIP_SFlash_Delay */\r\n  volatile uint32_t i = 32 * 2;\r\n\r\n  while (i--)\r\n    ;\r\n\r\n  SF_Ctrl_Set_Owner(SF_CTRL_OWNER_SAHB);\r\n  /* Exit form continous read for accepting command */\r\n  SFlash_Reset_Continue_Read(pFlashCfg);\r\n  /* Send software reset command(80bv has no this command)to deburst wrap for ISSI like */\r\n  SFlash_Software_Reset(pFlashCfg);\r\n  /* For disable command that is setting register instaed of send command, we need write enable */\r\n  SFlash_DisableBurstWrap(pFlashCfg);\r\n  /* Enable QE again in case reset command make it reset */\r\n  SFlash_Qspi_Enable(pFlashCfg);\r\n  /* Deburst again to make sure */\r\n  SFlash_DisableBurstWrap(pFlashCfg);\r\n\r\n  /* Clear offset setting*/\r\n  *offset = SF_Ctrl_Get_Flash_Image_Offset();\r\n  SF_Ctrl_Set_Flash_Image_Offset(0);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Restore flash controller state\r\n                                                                                *\r\n                                                                                * @param  pFlashCfg: Flash config pointer\r\n                                                                                * @param  ioMode: flash controller interface mode\r\n                                                                                * @param  offset: CPU XIP flash offset\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION XIP_SFlash_State_Restore(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t offset) {\r\n  uint32_t tmp[1];\r\n\r\n  SF_Ctrl_Set_Flash_Image_Offset(offset);\r\n\r\n  SFlash_SetBurstWrap(pFlashCfg);\r\n  SFlash_Read(pFlashCfg, ioMode, 1, 0x0, (uint8_t *)tmp, sizeof(tmp));\r\n  SFlash_Set_IDbus_Cfg(pFlashCfg, ioMode, 1, 0, 32);\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/*@} end of group XIP_SFLASH_Private_Functions */\r\n\r\n/** @defgroup  XIP_SFLASH_Public_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Erase flash one region\r\n                                                                                *\r\n                                                                                * @param  pFlashCfg: Flash config pointer\r\n                                                                                * @param  ioMode: flash controller interface mode\r\n                                                                                * @param  startaddr: start address to erase\r\n                                                                                * @param  endaddr: end address(include this address) to erase\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION XIP_SFlash_Erase_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t startaddr, uint32_t endaddr) {\r\n  BL_Err_Type stat;\r\n  uint32_t    offset;\r\n\r\n  stat = XIP_SFlash_State_Save(pFlashCfg, &offset);\r\n\r\n  if (stat != SUCCESS) {\r\n    SFlash_Set_IDbus_Cfg(pFlashCfg, ioMode, 1, 0, 32);\r\n  } else {\r\n    stat = SFlash_Erase(pFlashCfg, startaddr, endaddr);\r\n    XIP_SFlash_State_Restore(pFlashCfg, ioMode, offset);\r\n  }\r\n\r\n  return stat;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Program flash one region\r\n                                                                                *\r\n                                                                                * @param  pFlashCfg: Flash config pointer\r\n                                                                                * @param  ioMode: flash controller interface mode\r\n                                                                                * @param  addr: start address to be programed\r\n                                                                                * @param  data: data pointer to be programed\r\n                                                                                * @param  len: data length to be programed\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION XIP_SFlash_Write_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t *data, uint32_t len) {\r\n  BL_Err_Type stat;\r\n  uint32_t    offset;\r\n\r\n  stat = XIP_SFlash_State_Save(pFlashCfg, &offset);\r\n\r\n  if (stat != SUCCESS) {\r\n    SFlash_Set_IDbus_Cfg(pFlashCfg, ioMode, 1, 0, 32);\r\n  } else {\r\n    stat = SFlash_Program(pFlashCfg, ioMode, addr, data, len);\r\n    XIP_SFlash_State_Restore(pFlashCfg, ioMode, offset);\r\n  }\r\n\r\n  return stat;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Read data from flash\r\n                                                                                *\r\n                                                                                * @param  pFlashCfg: Flash config pointer\r\n                                                                                * @param  ioMode: flash controller interface mode\r\n                                                                                * @param  addr: flash read start address\r\n                                                                                * @param  data: data pointer to store data read from flash\r\n                                                                                * @param  len: data length to read\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION XIP_SFlash_Read_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint32_t addr, uint8_t *data, uint32_t len) {\r\n  BL_Err_Type stat;\r\n  uint32_t    offset;\r\n\r\n  stat = XIP_SFlash_State_Save(pFlashCfg, &offset);\r\n\r\n  if (stat != SUCCESS) {\r\n    SFlash_Set_IDbus_Cfg(pFlashCfg, ioMode, 1, 0, 32);\r\n  } else {\r\n    stat = SFlash_Read(pFlashCfg, ioMode, 0, addr, data, len);\r\n    XIP_SFlash_State_Restore(pFlashCfg, ioMode, offset);\r\n  }\r\n\r\n  return stat;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get Flash Jedec ID\r\n                                                                                *\r\n                                                                                * @param  pFlashCfg: Flash config pointer\r\n                                                                                * @param  ioMode: flash controller interface mode\r\n                                                                                * @param  data: data pointer to store Jedec ID Read from flash\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION XIP_SFlash_GetJedecId_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint8_t *data) {\r\n  BL_Err_Type stat;\r\n  uint32_t    offset;\r\n\r\n  stat = XIP_SFlash_State_Save(pFlashCfg, &offset);\r\n\r\n  if (stat != SUCCESS) {\r\n    SFlash_Set_IDbus_Cfg(pFlashCfg, ioMode, 1, 0, 32);\r\n  } else {\r\n    SFlash_GetJedecId(pFlashCfg, data);\r\n    XIP_SFlash_State_Restore(pFlashCfg, ioMode, offset);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get Flash Device ID\r\n                                                                                *\r\n                                                                                * @param  pFlashCfg: Flash config pointer\r\n                                                                                * @param  ioMode: flash controller interface mode\r\n                                                                                * @param  data: data pointer to store Device ID Read from flash\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION XIP_SFlash_GetDeviceId_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint8_t *data) {\r\n  BL_Err_Type stat;\r\n  uint32_t    offset;\r\n\r\n  stat = XIP_SFlash_State_Save(pFlashCfg, &offset);\r\n\r\n  if (stat != SUCCESS) {\r\n    SFlash_Set_IDbus_Cfg(pFlashCfg, ioMode, 1, 0, 32);\r\n  } else {\r\n    SFlash_GetDeviceId(data);\r\n    XIP_SFlash_State_Restore(pFlashCfg, ioMode, offset);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Get Flash Unique ID\r\n                                                                                *\r\n                                                                                * @param  pFlashCfg: Flash config pointer\r\n                                                                                * @param  ioMode: flash controller interface mode\r\n                                                                                * @param  data: data pointer to store Device ID Read from flash\r\n                                                                                * @param  idLen: Unique id len\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION XIP_SFlash_GetUniqueId_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SF_Ctrl_IO_Type ioMode, uint8_t *data, uint8_t idLen) {\r\n  BL_Err_Type stat;\r\n  uint32_t    offset;\r\n\r\n  stat = XIP_SFlash_State_Save(pFlashCfg, &offset);\r\n\r\n  if (stat != SUCCESS) {\r\n    SFlash_Set_IDbus_Cfg(pFlashCfg, ioMode, 1, 0, 32);\r\n  } else {\r\n    SFlash_GetUniqueId(data, idLen);\r\n    XIP_SFlash_State_Restore(pFlashCfg, ioMode, offset);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Read data from flash via XIP\r\n                                                                                *\r\n                                                                                * @param  addr: flash read start address\r\n                                                                                * @param  data: data pointer to store data read from flash\r\n                                                                                * @param  len: data length to read\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n#ifndef BFLB_USE_ROM_DRIVER\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION XIP_SFlash_Read_Via_Cache_Need_Lock(uint32_t addr, uint8_t *data, uint32_t len) {\r\n  uint32_t offset;\r\n\r\n  if (addr >= BL702_FLASH_XIP_BASE && addr < BL702_FLASH_XIP_END) {\r\n    offset = SF_Ctrl_Get_Flash_Image_Offset();\r\n    SF_Ctrl_Set_Flash_Image_Offset(0);\r\n    /* Flash read */\r\n    BL702_MemCpy_Fast(data, (void *)(addr - SF_Ctrl_Get_Flash_Image_Offset()), len);\r\n    SF_Ctrl_Set_Flash_Image_Offset(offset);\r\n  }\r\n\r\n  return SUCCESS;\r\n}\r\n#endif\r\n\r\n/*@} end of group XIP_SFLASH_Public_Functions */\r\n\r\n/*@} end of group XIP_SFLASH */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/std_drv/src/bl702_xip_sflash_ext.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    bl702_xip_sflash_ext.c\r\n * @version V1.0\r\n * @date\r\n * @brief   This file is the standard driver c file\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of Bouffalo Lab nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"bl702_xip_sflash_ext.h\"\r\n#include \"string.h\"\r\n\r\n/** @addtogroup  BL702_Peripheral_Driver\r\n *  @{\r\n */\r\n\r\n/** @addtogroup  XIP_SFLASH\r\n *  @{\r\n */\r\n\r\n/** @defgroup  XIP_SFLASH_EXT_Private_Macros\r\n *  @{\r\n */\r\n\r\n/*@} end of group XIP_SFLASH_EXT_Private_Macros */\r\n\r\n/** @defgroup  XIP_SFLASH_EXT_Private_Types\r\n *  @{\r\n */\r\n\r\n/*@} end of group XIP_SFLASH_EXT_Private_Types */\r\n\r\n/** @defgroup  XIP_SFLASH_EXT_Private_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group XIP_SFLASH_EXT_Private_Variables */\r\n\r\n/** @defgroup  XIP_SFLASH_EXT_Global_Variables\r\n *  @{\r\n */\r\n\r\n/*@} end of group XIP_SFLASH_EXT_Global_Variables */\r\n\r\n/** @defgroup  XIP_SFLASH_EXT_Private_Fun_Declaration\r\n *  @{\r\n */\r\n\r\n/*@} end of group XIP_SFLASH_EXT_Private_Fun_Declaration */\r\n\r\n/** @defgroup  XIP_SFLASH_EXT_Private_Functions\r\n *  @{\r\n */\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  XIP KH25V40 flash write protect set\r\n                                                                                *\r\n                                                                                * @param  pFlashCfg: Flash config pointer\r\n                                                                                * @param  protect: protect area\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION XIP_SFlash_KH25V40_Write_Protect_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg, SFlash_Protect_Kh25v40_Type protect) {\r\n  BL_Err_Type     stat;\r\n  uint32_t        offset;\r\n  SF_Ctrl_IO_Type ioMode = (SF_Ctrl_IO_Type)pFlashCfg->ioMode & 0xf;\r\n\r\n  stat = XIP_SFlash_State_Save(pFlashCfg, &offset);\r\n  if (stat != SUCCESS) {\r\n    SFlash_Set_IDbus_Cfg(pFlashCfg, ioMode, 1, 0, 32);\r\n  } else {\r\n    stat = SFlash_KH25V40_Write_Protect(pFlashCfg, protect);\r\n    XIP_SFlash_State_Restore(pFlashCfg, ioMode, offset);\r\n  }\r\n\r\n  return stat;\r\n}\r\n\r\n/****************************************************************************/ /**\r\n                                                                                * @brief  Clear flash status register need lock\r\n                                                                                *\r\n                                                                                * @param  pFlashCfg: Flash config pointer\r\n                                                                                *\r\n                                                                                * @return SUCCESS or ERROR\r\n                                                                                *\r\n                                                                                *******************************************************************************/\r\n__WEAK\r\nBL_Err_Type ATTR_TCM_SECTION XIP_SFlash_Clear_Status_Register_Need_Lock(SPI_Flash_Cfg_Type *pFlashCfg) {\r\n  BL_Err_Type     stat;\r\n  uint32_t        offset;\r\n  SF_Ctrl_IO_Type ioMode = (SF_Ctrl_IO_Type)pFlashCfg->ioMode & 0xf;\r\n\r\n  stat = XIP_SFlash_State_Save(pFlashCfg, &offset);\r\n  if (stat != SUCCESS) {\r\n    SFlash_Set_IDbus_Cfg(pFlashCfg, ioMode, 1, 0, 32);\r\n  } else {\r\n    stat = SFlash_Clear_Status_Register(pFlashCfg);\r\n    XIP_SFlash_State_Restore(pFlashCfg, ioMode, offset);\r\n  }\r\n\r\n  return stat;\r\n}\r\n\r\n/*@} end of group XIP_SFLASH_EXT_Public_Functions */\r\n\r\n/*@} end of group XIP_SFLASH_EXT */\r\n\r\n/*@} end of group BL702_Peripheral_Driver */\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/ble.c",
    "content": "#include \"ble.h\"\n#include \"BSP.h\"\n#include \"bflb_platform.h\"\n#include \"bl702_glb.h\"\n#include \"ble_characteristics.h\"\n#include \"ble_peripheral.h\"\n#include \"bluetooth.h\"\n#include \"conn.h\"\n#include \"gatt.h\"\n#include \"hal_clock.h\"\n#include \"hci_core.h\"\n#include \"log.h\"\n#include \"uuid.h\"\n#include <FreeRTOS.h>\n#include <errno.h>\n#include <stdbool.h>\n#include <stdlib.h>\n#include <task.h>\n\nvoid ble_stack_start(void) {\n  MSG(\"BLE Starting\\n\");\n  GLB_Set_EM_Sel(GLB_EM_8KB);\n  ble_controller_init(configMAX_PRIORITIES - 1);\n\n  // Initialize BLE Host stack\n  hci_driver_init();\n\n  bt_enable(bt_enable_cb);\n  MSG(\"BLE Starting...Done\\n\");\n}\n\n/* configSUPPORT_STATIC_ALLOCATION and configUSE_TIMERS are both set to 1, so the\napplication must provide an implementation of vApplicationGetTimerTaskMemory()\nto provide the memory that is used by the Timer service task. */\nvoid vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize) {\n  /* If the buffers to be provided to the Timer task are declared inside this\n  function then they must be declared static - otherwise they will be allocated on\n  the stack and so not exists after this function exits. */\n  static StaticTask_t xTimerTaskTCB;\n  static StackType_t  uxTimerTaskStack[configTIMER_TASK_STACK_DEPTH];\n\n  /* Pass out a pointer to the StaticTask_t structure in which the Timer\n  task's state will be stored. */\n  *ppxTimerTaskTCBBuffer = &xTimerTaskTCB;\n\n  /* Pass out the array that will be used as the Timer task's stack. */\n  *ppxTimerTaskStackBuffer = uxTimerTaskStack;\n\n  /* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer.\n  Note that, as the array is necessarily of type StackType_t,\n  configTIMER_TASK_STACK_DEPTH is specified in words, not bytes. */\n  *pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;\n}\n\nvoid vApplicationMallocFailedHook(void) {\n  MSG(\"vApplicationMallocFailedHook\\r\\n\");\n\n  while (1) {\n    ;\n  }\n}\n\nvoid user_vAssertCalled(void) {\n\n  MSG(\"user_vAssertCalled\\r\\n\");\n\n  while (1) {\n    ;\n  }\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/ble.h",
    "content": "#ifndef PINECILV2_BLE_H_\n#define PINECILV2_BLE_H_\n\n/*\n * BLE Interface for the Pinecil V2\n *\n * Exposes:\n * - Live Measurements\n * - Device Settings Names\n * - Device Settings Values\n */\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n// Spawns the BLE stack tasks and makes the device available to be connected to via BLE.\nvoid ble_stack_start(void);\n\n#ifdef __cplusplus\n};\n#endif\n\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/ble_characteristics.h",
    "content": "#ifndef BLE_CHARACTERISTICS_H_\n#define BLE_CHARACTERISTICS_H_\n\n#include \"ble_config.h\"\n\n/*\n\n Pinecil exposes two main services; Status and settings\n\n Status:\n - Current setpoint temperature\n - Current live tip temperature\n - Current DC Input\n - Current Handle cold junction temperature\n - Current power level (aka pwm level)\n\n Settings:\n - One entry for every setting in the unit\n*/\n\n// d85efab4-168e-4a71-affd-33e27f9bc533\n#define BT_UUID_SVC_LIVE_DATA BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xd85ef000, 0x168e, 0x4a71, 0xAA55, 0x33e27f9bc533))\n// f6d75f91-5a10-4eba-a233-47d3f26a907f\n#define BT_UUID_SVC_SETTINGS_DATA BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d80000, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n// 9eae1adb-9d0d-48c5-a6e7-ae93f0ea37b0\n#define BT_UUID_SVC_BULK_DATA BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x9eae1000, 0x9d0d, 0x48c5, 0xAA55, 0x33e27f9bc533))\n\n#define BT_UUID_CHAR_BLE_LIVE_LIVE_TEMP     BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xd85ef001, 0x168e, 0x4a71, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_SETPOINT_TEMP BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xd85ef002, 0x168e, 0x4a71, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_DC_INPUT      BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xd85ef003, 0x168e, 0x4a71, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_HANDLE_TEMP   BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xd85ef004, 0x168e, 0x4a71, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_POWER_LEVEL   BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xd85ef005, 0x168e, 0x4a71, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_POWER_SRC     BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xd85ef006, 0x168e, 0x4a71, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_TIP_RES       BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xd85ef007, 0x168e, 0x4a71, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_UPTIME        BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xd85ef008, 0x168e, 0x4a71, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_MOVEMENT      BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xd85ef009, 0x168e, 0x4a71, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_MAX_TEMP      BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xd85ef00A, 0x168e, 0x4a71, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_RAW_TIP       BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xd85ef00B, 0x168e, 0x4a71, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_HALL_SENSOR   BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xd85ef00C, 0x168e, 0x4a71, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_OP_MODE       BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xd85ef00D, 0x168e, 0x4a71, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_EST_WATTS     BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xd85ef00E, 0x168e, 0x4a71, 0xAA55, 0x33e27f9bc533))\n\n// Bulk data that returns non-fixed sized objects\n#define BT_UUID_CHAR_BLE_LIVE_BULK_LIVE_DATA BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x9eae1001, 0x9d0d, 0x48c5, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_ACCEL_NAME     BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x9eae1002, 0x9d0d, 0x48c5, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_BUILD          BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x9eae1003, 0x9d0d, 0x48c5, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_DEV_SN         BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x9eae1004, 0x9d0d, 0x48c5, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_LIVE_DEV_ID         BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0x9eae1005, 0x9d0d, 0x48c5, 0xAA55, 0x33e27f9bc533))\n\n// Settings\n\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_SAVE  BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d7FFFF, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_RESET BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d7FFFE, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_0     BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70000, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_1     BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70001, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_2     BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70002, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_3     BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70003, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_4     BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70004, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_5     BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70005, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_6     BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70006, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_7     BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70007, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_8     BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70008, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_9     BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70009, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_10    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d7000a, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_11    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d7000b, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_12    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d7000c, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_13    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d7000d, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_14    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d7000e, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_15    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d7000f, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_16    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70010, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_17    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70011, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_18    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70012, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_19    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70013, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_20    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70014, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_21    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70015, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_22    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70016, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_23    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70017, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_24    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70018, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_25    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70019, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_26    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d7001a, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_27    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d7001b, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_28    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d7001c, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_29    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d7001d, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_30    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d7001e, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_31    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d7001f, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_32    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70020, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_33    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70021, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_34    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70022, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_35    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70023, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_36    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70024, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_37    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70025, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_38    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70026, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_53    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70035, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_54    BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70036, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/ble_handlers.cpp",
    "content": "\n\n#include <FreeRTOS.h>\n#include <errno.h>\n#include <stdbool.h>\n#include <stdlib.h>\n#include <task.h>\n\n#include \"types.h\"\n\n#include \"BSP.h\"\n#include \"TipThermoModel.h\"\n#include \"ble_peripheral.h\"\n#include \"bluetooth.h\"\n#include \"configuration.h\"\n#include \"conn.h\"\n#include \"gatt.h\"\n#include \"hal_clock.h\"\n#include \"hci_core.h\"\n#include \"log.h\"\n#include \"uuid.h\"\n\n#include \"../../version.h\"\n#include \"OLED.hpp\"\n#include \"OperatingModes.h\"\n#include \"USBPD.h\"\n#include \"ble_characteristics.h\"\n#include \"ble_handlers.h\"\n#include \"pd.h\"\n#include \"power.hpp\"\n#ifdef POW_PD\n#include \"USBPD.h\"\n#include \"pd.h\"\n#endif\n\nextern TickType_t    lastMovementTime;\nextern OperatingMode currentOperatingMode;\n\nint ble_char_read_status_callback(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  if (attr == NULL || attr->uuid == NULL) {\n    return 0;\n  }\n  // Decode the uuid\n  // Byte 12 has the lowest part of the first UUID chunk\n  uint16_t uuid_value = ((struct bt_uuid_128 *)attr->uuid)->val[12];\n  uint32_t temp       = 0;\n  switch (uuid_value) {\n  case 1: // Live temp\n  {\n    temp = TipThermoModel::getTipInC();\n    memcpy(buf, &temp, sizeof(temp));\n    return sizeof(temp);\n  } break;\n  case 2: // Setpoint temp\n    temp = getSettingValue(SettingsOptions::SolderingTemp);\n    memcpy(buf, &temp, sizeof(temp));\n    return sizeof(temp);\n    break;\n  case 3: // DC Input\n    temp = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0);\n    memcpy(buf, &temp, sizeof(temp));\n    return sizeof(temp);\n    break;\n  case 4: // Handle temp\n    temp = getHandleTemperature(0);\n    memcpy(buf, &temp, sizeof(temp));\n    return sizeof(temp);\n    break;\n  case 5: // power level\n    // return current PWM level\n    temp = X10WattsToPWM(x10WattHistory.average());\n    memcpy(buf, &temp, sizeof(temp));\n    return sizeof(temp);\n    break;\n  case 6: // power src\n    // Todo return enum for current power source\n    temp = getPowerSrc();\n    memcpy(buf, &temp, sizeof(temp));\n    return sizeof(temp);\n    break;\n  case 7:\n    // Tip resistance\n    temp = getTipResistanceX10();\n    memcpy(buf, &temp, sizeof(temp));\n    return sizeof(temp);\n    break;\n  case 8:\n    // uptime\n    temp = xTaskGetTickCount() / TICKS_100MS;\n    memcpy(buf, &temp, sizeof(temp));\n    return sizeof(temp);\n    break;\n  case 9:\n    // movement\n    temp = lastMovementTime / TICKS_100MS;\n    memcpy(buf, &temp, sizeof(temp));\n    return sizeof(temp);\n\n    break;\n  case 10:\n    // max temp\n    temp = TipThermoModel::getTipMaxInC();\n    memcpy(buf, &temp, sizeof(temp));\n    return sizeof(temp);\n    break;\n  case 11:\n    // raw tip\n    temp = TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0), true);\n    memcpy(buf, &temp, sizeof(temp));\n    return sizeof(temp);\n    break;\n  case 12:\n    // hall sensor\n    {\n      int16_t hallEffectStrength = getRawHallEffect();\n      if (hallEffectStrength < 0) {\n        hallEffectStrength = -hallEffectStrength;\n      }\n      temp = hallEffectStrength;\n      memcpy(buf, &temp, sizeof(temp));\n      return sizeof(temp);\n    }\n    break;\n  case 13:\n    // Operating mode\n    temp = (uint32_t)currentOperatingMode;\n    memcpy(buf, &temp, sizeof(temp));\n    return sizeof(temp);\n    break;\n  case 14:\n    // Estimated watts\n    temp = x10WattHistory.average();\n    memcpy(buf, &temp, sizeof(temp));\n    return sizeof(temp);\n    break;\n  default:\n    break;\n  }\n  MSG((char *)\"Unhandled attr read %d | %d\\n\", (uint32_t)attr->uuid, uuid_value);\n  return 0;\n}\n\nint ble_char_read_bulk_value_callback(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  if (attr == NULL || attr->uuid == NULL) {\n    return 0;\n  }\n  // Byte 12 has the lowest part of the first UUID chunk\n  uint16_t uuid_value = ((struct bt_uuid_128 *)attr->uuid)->val[12];\n  // Bulk is the non-const size service\n  switch (uuid_value) {\n  case 1:\n    // Bulk data\n    {\n      uint32_t bulkData[] = {\n          (uint32_t)TipThermoModel::getTipInC(),                               // 0  - Current temp\n          getSettingValue(SettingsOptions::SolderingTemp),                     // 1  - Setpoint\n          getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0), // 2  - Input voltage\n          getHandleTemperature(0),                                             // 3  - Handle X10 Temp in C\n          X10WattsToPWM(x10WattHistory.average()),                             // 4  - Power as PWM level\n          getPowerSrc(),                                                       // 5  - power src\n          getTipResistanceX10(),                                               // 6  - Tip resistance\n          xTaskGetTickCount() / TICKS_100MS,                                   // 7  - uptime in deciseconds\n          lastMovementTime / TICKS_100MS,                                      // 8  - last movement time (deciseconds)\n          (uint32_t)TipThermoModel::getTipMaxInC(),                            // 9  - max temp\n          TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0), true),        // 10 - Raw tip in μV\n          (uint32_t)abs(getRawHallEffect()),                                   // 11 - hall sensor\n          (uint32_t)currentOperatingMode,                                      // 12 - Operating mode\n          x10WattHistory.average(),                                            // 13 - Estimated Wattage *10\n      };\n      int lenToCopy = sizeof(bulkData) - offset;\n      if (lenToCopy > len) {\n        lenToCopy = len;\n      }\n      if (lenToCopy < 0) {\n        lenToCopy = 0;\n      }\n      memcpy(buf, ((uint8_t *)bulkData) + offset, lenToCopy);\n      return lenToCopy;\n    }\n\n    break;\n  case 2:\n    // Accelerometer name\n    // TODO: Need to store non-encoded version\n    break;\n  case 3:\n    // FW Version\n    memcpy(buf, &BUILD_VERSION, sizeof(BUILD_VERSION) - 1);\n    return sizeof(BUILD_VERSION) - 1;\n  case 4:\n    // Device serial number.\n    // Serial number is the ID burned by manufacturer.\n    // In case of Pinecil V2, device SN = device MAC.\n    {\n      uint64_t sn = getDeviceID();\n      memcpy(buf, &sn, sizeof(sn));\n      return sizeof(sn);\n    }\n    break;\n  case 5:\n    // Device ID [https://github.com/Ralim/IronOS/issues/1609].\n    // ID is a unique key Pine burns at the factory and records in their db.\n    {\n      uint32_t id = getDeviceValidation();\n      memcpy(buf, &id, sizeof(id));\n      return sizeof(id);\n    }\n  default:\n    break;\n  }\n  return 0;\n}\nint ble_char_read_setting_value_callback(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset) {\n  if (attr == NULL || attr->uuid == NULL) {\n    return 0;\n  }\n  // Byte 12 has the lowest part of the first UUID chunk\n  uint16_t uuid_value = ((struct bt_uuid_128 *)attr->uuid)->val[12];\n  uint16_t temp       = 0xFFFF;\n  if (uuid_value <= SettingsOptions::SettingsOptionsLength) {\n    temp = getSettingValue((SettingsOptions)(uuid_value));\n    memcpy(buf, &temp, sizeof(temp));\n    return sizeof(temp);\n  } else {\n    memcpy(buf, &temp, sizeof(temp));\n    return sizeof(temp);\n  }\n\n  MSG((char *)\"Unhandled attr read %d | %d\\n\", (uint32_t)attr->uuid, uuid_value);\n  return 0;\n}\n\nint ble_char_write_setting_value_callback(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, u16_t len, u16_t offset, u8_t flags) {\n\n  if (flags & BT_GATT_WRITE_FLAG_PREPARE) {\n    // Don't use prepare write data, execute write will upload data again.\n    BT_WARN((char *)\"recv prepare write request\\n\");\n    return 0;\n  }\n  if (attr == NULL || attr->uuid == NULL) {\n    return 0;\n  }\n\n  if (flags & BT_GATT_WRITE_FLAG_CMD) {\n    // Use write command data.\n    BT_WARN((char *)\"recv write command\\n\");\n  } else {\n    // Use write request / execute write data.\n    BT_WARN((char *)\"recv write request / exce write\\n\");\n  }\n  uint8_t uuid_value = ((struct bt_uuid_128 *)attr->uuid)->val[12];\n  if (len == 2) {\n    uint16_t new_value = 0;\n    memcpy(&new_value, buf, sizeof(new_value));\n    if (uuid_value == 0xFF) {\n      if (new_value == 1) {\n        saveSettings();\n        return len;\n      }\n    } else if (uuid_value == 0xFE) {\n      if (new_value == 1) {\n        resetSettings();\n        return len;\n      }\n    } else if (uuid_value < SettingsOptions::SettingsOptionsLength) {\n      setSettingValue((SettingsOptions)(uuid_value), new_value);\n      switch (uuid_value) {\n      case SettingsOptions::OLEDInversion:\n        OLED::setInverseDisplay(getSettingValue(SettingsOptions::OLEDInversion));\n        break;\n      case SettingsOptions::OLEDBrightness:\n        OLED::setBrightness(getSettingValue(SettingsOptions::OLEDBrightness));\n        break;\n      case SettingsOptions::OrientationMode:\n        OLED::setRotation(getSettingValue(SettingsOptions::OrientationMode) & 1);\n        break;\n      default:\n        break;\n      }\n      return len;\n    }\n  }\n  MSG((char *)\"Unhandled attr write %d | %d\\n\", (uint32_t)attr->uuid, uuid_value);\n  return 0;\n}\n\nuint32_t getPowerSrc() {\n  int sourceNumber = 0;\n  if (getIsPoweredByDCIN()) {\n    sourceNumber = 0;\n  } else {\n    // We are not powered via DC, so want to display the appropriate state for PD or QC\n    bool poweredbyPD        = false;\n    bool pdHasVBUSConnected = false;\n#ifdef POW_PD\n    if (USBPowerDelivery::fusbPresent()) {\n      // We are PD capable\n      if (USBPowerDelivery::negotiationComplete()) {\n        // We are powered via PD\n        poweredbyPD = true;\n#ifdef VBUS_MOD_TEST\n        pdHasVBUSConnected = USBPowerDelivery::isVBUSConnected();\n#endif\n      }\n    }\n#endif\n    if (poweredbyPD) {\n\n      if (pdHasVBUSConnected) {\n        sourceNumber = 2;\n      } else {\n        sourceNumber = 3;\n      }\n    } else {\n      sourceNumber = 1;\n    }\n  }\n  return sourceNumber;\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/ble_handlers.h",
    "content": "#ifndef BLE_HANDLERS_H_\n#define BLE_HANDLERS_H_\n\n#include \"conn_internal.h\"\n#include \"types.h\"\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nint ble_char_read_status_callback(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset);\nint ble_char_read_setting_value_callback(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset);\nint ble_char_read_bulk_value_callback(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, u16_t len, u16_t offset);\n\nint ble_char_write_setting_value_callback(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, u16_t len, u16_t offset, u8_t flags);\n\nuint32_t getPowerSrc();\n\n#ifdef __cplusplus\n};\n#endif\n\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/ble_peripheral.c",
    "content": "/****************************************************************************\nFILE NAME\n    ble_peripheral_tp_server.c\n\nDESCRIPTION\n    test profile demo\n\nNOTES\n*/\n/****************************************************************************/\n\n#include <FreeRTOS.h>\n#include <errno.h>\n#include <stdbool.h>\n#include <stdlib.h>\n#include <task.h>\n\n#include \"types.h\"\n\n#include \"ble_peripheral.h\"\n#include \"bluetooth.h\"\n#include \"conn.h\"\n#include \"gatt.h\"\n#include \"hal_clock.h\"\n#include \"hci_core.h\"\n#include \"log.h\"\n#include \"uuid.h\"\n\n#include \"BSP.h\"\n#include \"ble_characteristics.h\"\n#include \"ble_handlers.h\"\nbool pds_start;\n\nstatic void          ble_device_connected(struct bt_conn *conn, u8_t err);\nstatic void          ble_device_disconnected(struct bt_conn *conn, u8_t reason);\nstatic void          ble_connection_param_changed(struct bt_conn *conn, u16_t interval, u16_t latency, u16_t timeout);\nstruct bt_gatt_attr *get_attr(u8_t index);\n\nstatic struct bt_conn                *ble_tp_conn;\nstatic struct bt_gatt_exchange_params exchg_mtu;\nstatic TaskHandle_t                   ble_tp_task_h;\nstatic int                            tx_mtu_size     = 20;\nstatic u8_t                           created_tp_task = 0;\n\nstatic struct bt_conn_cb ble_tp_conn_callbacks = {\n    .connected        = ble_device_connected,\n    .disconnected     = ble_device_disconnected,\n    .le_param_updated = ble_connection_param_changed,\n};\n\n/*************************************************************************\nNAME\n    ble_tx_mtu_change_callback\n*/\nstatic void ble_tx_mtu_change_callback(struct bt_conn *conn, u8_t err, struct bt_gatt_exchange_params *params) {\n  if (!err) {\n    tx_mtu_size = bt_gatt_get_mtu(ble_tp_conn);\n    BT_WARN(\"ble tp echange mtu size success, mtu size: %d\\n\", tx_mtu_size);\n  } else {\n    BT_WARN(\"ble tp echange mtu size failure, err: %d\\n\", err);\n  }\n}\n/*************************************************************************\nNAME\n    ble_device_connected\n*/\nstatic void ble_device_connected(struct bt_conn *conn, u8_t err) {\n  int tx_octets = 0x00fb;\n  int tx_time   = 0x0848;\n  int ret       = -1;\n\n  if (err) {\n    return;\n  }\n\n  BT_INFO(\"BLE connected\");\n  ble_tp_conn = conn;\n  pds_start   = false;\n\n  // set data length after connected.\n  ret = bt_le_set_data_len(ble_tp_conn, tx_octets, tx_time);\n\n  if (!ret) {\n    BT_INFO(\"ble tp set data length success\\n\");\n  } else {\n    BT_WARN(\"ble tp set data length failure, err: %d\\n\", ret);\n  }\n\n  // exchange mtu size after connected.\n  exchg_mtu.func = ble_tx_mtu_change_callback;\n  ret            = bt_gatt_exchange_mtu(ble_tp_conn, &exchg_mtu);\n\n  if (!ret) {\n    BT_INFO(\"ble tp exchange mtu size pending\\n\");\n  } else {\n    BT_WARN(\"ble tp exchange mtu size failure, err: %d\\n\", ret);\n  }\n}\n\n/*************************************************************************\nNAME\n    ble_device_disconnected\n*/\nstatic void ble_device_disconnected(struct bt_conn *conn, u8_t reason) {\n  BT_WARN(\"Tp disconnected\");\n\n  if (created_tp_task) {\n    BT_WARN(\"Delete throughput tx task\\n\");\n    vTaskDelete(ble_tp_task_h);\n    created_tp_task = 0;\n  }\n\n  ble_tp_conn = NULL;\n  extern int ble_start_adv(void);\n  ble_start_adv();\n  pds_start = true;\n}\n\n/*************************************************************************\nNAME\n    ble_connection_param_changed\n*/\n\nstatic void ble_connection_param_changed(struct bt_conn *conn, u16_t interval, u16_t latency, u16_t timeout) {\n  BT_INFO(\"LE conn param updated: int 0x%04x lat %d to %d \\r\\n\", interval, latency, timeout);\n}\n\n/*************************************************************************\nNAME\n    ble_tp_ind_ccc_changed\n*/\nstatic void ble_tp_ind_ccc_changed(const struct bt_gatt_attr *attr, u16_t value) {\n  int  err     = -1;\n  char data[9] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09};\n\n  if (value == BT_GATT_CCC_INDICATE) {\n    err = bl_tp_send_indicate(ble_tp_conn, get_attr(BT_CHAR_BLE_TP_IND_ATTR_VAL_INDEX), data, 9);\n    BT_WARN(\"ble tp send indicate: %d\\n\", err);\n  }\n}\n\n/*************************************************************************\n *  DEFINE : attrs\n */\nstatic struct bt_gatt_attr ble_attrs_declaration[] = {\n    BT_GATT_PRIMARY_SERVICE(BT_UUID_SVC_LIVE_DATA),\n\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_LIVE_TEMP, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_status_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_SETPOINT_TEMP, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_status_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_DC_INPUT, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_status_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_HANDLE_TEMP, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_status_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_POWER_LEVEL, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_status_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_POWER_SRC, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_status_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_TIP_RES, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_status_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_UPTIME, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_status_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_MOVEMENT, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_status_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_MAX_TEMP, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_status_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_RAW_TIP, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_status_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_HALL_SENSOR, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_status_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_OP_MODE, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_status_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_EST_WATTS, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_status_callback, NULL, NULL),\n\n    BT_GATT_PRIMARY_SERVICE(BT_UUID_SVC_BULK_DATA),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_BULK_LIVE_DATA, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_bulk_value_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_ACCEL_NAME, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_bulk_value_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_BUILD, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_bulk_value_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_DEV_SN, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_bulk_value_callback, NULL, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_LIVE_DEV_ID, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, ble_char_read_bulk_value_callback, NULL, NULL),\n\n    BT_GATT_PRIMARY_SERVICE(BT_UUID_SVC_SETTINGS_DATA),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_0, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_1, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_2, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_3, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_4, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_5, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_6, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_7, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_8, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_9, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_10, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_11, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_12, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_13, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_14, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_15, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_16, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_17, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_18, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_19, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_20, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_21, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_22, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_23, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_24, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_25, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_26, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_27, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_28, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_29, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_30, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_31, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_32, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_33, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_34, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_35, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_36, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_37, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_38, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_53, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_54, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n\n    /* Save & reset */\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_SAVE, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n\n    BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_RESET, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,\n                           ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),\n\n};\n\n/*************************************************************************\nNAME\n    get_attr\n*/\nstruct bt_gatt_attr *get_attr(u8_t index) { return &ble_attrs_declaration[index]; }\n\nstatic struct bt_gatt_service ble_tp_server = BT_GATT_SERVICE(ble_attrs_declaration);\n\n// Start advertising with expected default values\nint ble_start_adv(void) {\n  MSG(\"BLE Starting advertising\\n\");\n  struct bt_le_adv_param adv_param = {\n      // options:3, connectable undirected, adv one time\n      .options      = 3,\n      .interval_min = BT_GAP_ADV_FAST_INT_MIN_3,\n      .interval_max = BT_GAP_ADV_FAST_INT_MAX_3,\n  };\n  char     nameBuffer[16];\n  uint32_t scratch = getDeviceID() & 0xFFFFFFFF;\n  scratch ^= (getDeviceID() >> 32) & 0xFFFFFFFF;\n  int nameLen = snprintf(nameBuffer, 16, \"Pinecil-%08X\", (int)scratch);\n\n  // scan and response data must each stay < 31 bytes\n  struct bt_data adv_data[2] = {BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_NO_BREDR | BT_LE_AD_GENERAL)), BT_DATA(BT_DATA_NAME_COMPLETE, nameBuffer, nameLen)};\n\n  struct bt_data scan_response_data[1] = {BT_DATA(BT_DATA_UUID128_SOME, ((struct bt_uuid_128 *)BT_UUID_SVC_BULK_DATA)->val, 16)};\n\n  return bt_le_adv_start(&adv_param, adv_data, ARRAY_SIZE(adv_data), scan_response_data, ARRAY_SIZE(scan_response_data));\n}\n\n// Callback that the ble stack will call once it has been kicked off running\n// We use this to register the handlers (as we know its now ready for them) + start advertising to the world\nvoid bt_enable_cb(int err) {\n  bt_conn_cb_register(&ble_tp_conn_callbacks);\n  bt_gatt_service_register(&ble_tp_server);\n\n  ble_start_adv();\n}\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/ble_peripheral.h",
    "content": "/****************************************************************************\nFILE NAME\n    ble_peripheral_tp_server.h\n\nDESCRIPTION\nNOTES\n*/\n/****************************************************************************/\n\n#ifndef _BLE_TP_SVC_H_\n#define _BLE_TP_SVC_H_\n\n#include <zephyr/types.h>\n#include \"ble_config.h\"\n\n// read value handle offset 2\n#define BT_CHAR_BLE_TP_RD_ATTR_VAL_INDEX (2)\n// write value handle offset 4\n#define BT_CHAR_BLE_TP_WR_ATTR_VAL_INDEX (4)\n// indicate value handle offset 6\n#define BT_CHAR_BLE_TP_IND_ATTR_VAL_INDEX (6)\n// notity value handle offset 9\n#define BT_CHAR_BLE_TP_NOT_ATTR_VAL_INDEX (9)\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nvoid                 ble_tp_init();\nvoid                 bt_enable_cb(int err);\nstruct bt_gatt_attr *get_attr(u8_t index);\n\n#ifdef __cplusplus\n};\n#endif\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/board.c",
    "content": "/**\r\n * @file board.c\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n\r\n#include \"bflb_platform.h\"\r\n#include \"bl702_config.h\"\r\n#include \"bl702_glb.h\"\r\n#include \"hal_gpio.h\"\r\n\r\nstruct pin_mux_cfg {\r\n  uint8_t  pin;\r\n  uint16_t func;\r\n};\r\n\r\nstatic const struct pin_mux_cfg af_pin_table[] = {\r\n#ifdef CONFIG_GPIO0_FUNC\r\n    { .pin = GPIO_PIN_0,  .func = CONFIG_GPIO0_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO1_FUNC\r\n    { .pin = GPIO_PIN_1,  .func = CONFIG_GPIO1_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO2_FUNC\r\n    { .pin = GPIO_PIN_2,  .func = CONFIG_GPIO2_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO3_FUNC\r\n    { .pin = GPIO_PIN_3,  .func = CONFIG_GPIO3_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO4_FUNC\r\n    { .pin = GPIO_PIN_4,  .func = CONFIG_GPIO4_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO5_FUNC\r\n    { .pin = GPIO_PIN_5,  .func = CONFIG_GPIO5_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO6_FUNC\r\n    { .pin = GPIO_PIN_6,  .func = CONFIG_GPIO6_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO7_FUNC\r\n    { .pin = GPIO_PIN_7,  .func = CONFIG_GPIO7_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO8_FUNC\r\n    { .pin = GPIO_PIN_8,  .func = CONFIG_GPIO8_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO9_FUNC\r\n    { .pin = GPIO_PIN_9,  .func = CONFIG_GPIO9_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO10_FUNC\r\n    {.pin = GPIO_PIN_10, .func = CONFIG_GPIO10_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO11_FUNC\r\n    {.pin = GPIO_PIN_11, .func = CONFIG_GPIO11_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO12_FUNC\r\n    {.pin = GPIO_PIN_12, .func = CONFIG_GPIO12_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO13_FUNC\r\n    {.pin = GPIO_PIN_13, .func = CONFIG_GPIO13_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO14_FUNC\r\n    {.pin = GPIO_PIN_14, .func = CONFIG_GPIO14_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO15_FUNC\r\n    {.pin = GPIO_PIN_15, .func = CONFIG_GPIO15_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO16_FUNC\r\n    {.pin = GPIO_PIN_16, .func = CONFIG_GPIO16_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO17_FUNC\r\n    {.pin = GPIO_PIN_17, .func = CONFIG_GPIO17_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO18_FUNC\r\n    {.pin = GPIO_PIN_18, .func = CONFIG_GPIO18_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO19_FUNC\r\n    {.pin = GPIO_PIN_19, .func = CONFIG_GPIO19_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO20_FUNC\r\n    {.pin = GPIO_PIN_20, .func = CONFIG_GPIO20_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO21_FUNC\r\n    {.pin = GPIO_PIN_21, .func = CONFIG_GPIO21_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO22_FUNC\r\n    {.pin = GPIO_PIN_22, .func = CONFIG_GPIO22_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO23_FUNC\r\n    {.pin = GPIO_PIN_23, .func = CONFIG_GPIO23_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO24_FUNC\r\n    {.pin = GPIO_PIN_24, .func = CONFIG_GPIO24_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO25_FUNC\r\n    {.pin = GPIO_PIN_25, .func = CONFIG_GPIO25_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO26_FUNC\r\n    {.pin = GPIO_PIN_26, .func = CONFIG_GPIO26_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO27_FUNC\r\n    {.pin = GPIO_PIN_27, .func = CONFIG_GPIO27_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO28_FUNC\r\n    {.pin = GPIO_PIN_28, .func = CONFIG_GPIO28_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO29_FUNC\r\n    {.pin = GPIO_PIN_29, .func = CONFIG_GPIO29_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO30_FUNC\r\n    {.pin = GPIO_PIN_30, .func = CONFIG_GPIO30_FUNC},\r\n#endif\r\n#ifdef CONFIG_GPIO31_FUNC\r\n    {.pin = GPIO_PIN_31, .func = CONFIG_GPIO31_FUNC},\r\n#endif\r\n};\r\n\r\nstatic void board_pin_mux_init(void) {\r\n  GLB_GPIO_Cfg_Type gpio_cfg;\r\n  uint32_t          tmpVal;\r\n  gpio_cfg.drive        = 2;\r\n  gpio_cfg.smtCtrl      = 1;\r\n  uint8_t hbn_gpio_mask = 0x1f;\r\n  uint8_t hbn_aon_ie    = 0;\r\n\r\n  for (uint32_t i = 0; i < sizeof(af_pin_table) / sizeof(af_pin_table[0]); i++) {\r\n    gpio_cfg.gpioMode = GPIO_MODE_AF;\r\n    gpio_cfg.pullType = GPIO_PULL_UP;\r\n    gpio_cfg.gpioPin  = af_pin_table[i].pin;\r\n    gpio_cfg.gpioFun  = af_pin_table[i].func;\r\n\r\n    /*if using gpio9-gpio12 and func is not analog and output ,should set reg_aon_pad_ie_smt corresponding bit = 1*/\r\n    if ((af_pin_table[i].pin > GPIO_PIN_8) && (af_pin_table[i].pin < GPIO_PIN_13)) {\r\n      if ((af_pin_table[i].func != 10) && ((af_pin_table[i].func < GPIO_FUN_GPIO_OUTPUT_UP) || (af_pin_table[i].func > GPIO_FUN_GPIO_OUTPUT_NONE))) {\r\n        hbn_aon_ie |= (1 << (af_pin_table[i].pin - 9));\r\n      }\r\n    }\r\n\r\n    /*if reset state*/\r\n    if (af_pin_table[i].func == GPIO_FUN_UNUSED) {\r\n      continue;\r\n    } else if (af_pin_table[i].func == GPIO_FUN_WAKEUP) {\r\n      /*if hbn or pds gpio wakeup func*/\r\n      if (af_pin_table[i].pin < GPIO_PIN_8) {\r\n        /*enable pds gpio wakeup and irq unmask*/\r\n        tmpVal = BL_RD_REG(PDS_BASE, PDS_GPIO_INT);\r\n        tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_GPIO_INT_SELECT, af_pin_table[i].pin);\r\n        tmpVal = BL_SET_REG_BITS_VAL(tmpVal, PDS_GPIO_INT_MODE, PDS_AON_GPIO_INT_TRIGGER_ASYNC_FALLING_EDGE);\r\n        tmpVal = BL_CLR_REG_BIT(tmpVal, PDS_GPIO_INT_MASK);\r\n        BL_WR_REG(PDS_BASE, PDS_GPIO_INT, tmpVal);\r\n      } else if ((af_pin_table[i].pin > GPIO_PIN_8) && (af_pin_table[i].pin < GPIO_PIN_13)) {\r\n        hbn_gpio_mask &= ~(1 << (af_pin_table[i].pin - 9));\r\n      }\r\n      continue;\r\n    } else if ((af_pin_table[i].func == GPIO_FUN_USB) || (af_pin_table[i].func == GPIO_FUN_DAC) || (af_pin_table[i].func == GPIO_FUN_ADC)) {\r\n      /*if analog func , for usb、adc、dac*/\r\n      gpio_cfg.gpioFun  = GPIO_FUN_ANALOG;\r\n      gpio_cfg.gpioMode = GPIO_MODE_ANALOG;\r\n      gpio_cfg.pullType = GPIO_PULL_NONE;\r\n    } else if ((af_pin_table[i].func & 0xF0) == 0xF0) {\r\n      /*if uart func*/\r\n      gpio_cfg.gpioFun  = GPIO_FUN_UART;\r\n      uint8_t uart_func = af_pin_table[i].func & 0x07;\r\n      uint8_t uart_sig  = gpio_cfg.gpioPin % 8;\r\n      /*link to one uart sig*/\r\n      GLB_UART_Fun_Sel((GLB_UART_SIG_Type)uart_sig, (GLB_UART_SIG_FUN_Type)uart_func);\r\n      GLB_UART_Fun_Sel((GLB_UART_SIG_Type)uart_func, (GLB_UART_SIG_FUN_Type)uart_sig);\r\n    } else if (af_pin_table[i].func == GPIO_FUN_PWM) {\r\n      /*if pwm func*/\r\n      gpio_cfg.pullType = GPIO_PULL_DOWN;\r\n    } else if (af_pin_table[i].func == GPIO_FUN_QDEC) {\r\n      /* if qdec a/b */\r\n      gpio_cfg.pullType = GPIO_PULL_NONE;\r\n      gpio_cfg.gpioMode = GPIO_MODE_INPUT;\r\n      gpio_cfg.gpioFun  = GPIO_FUN_QDEC;\r\n    } else if (af_pin_table[i].func == GPIO_FUN_QDEC_LED) {\r\n      /* if qdec led */\r\n      gpio_cfg.pullType = GPIO_PULL_NONE;\r\n      gpio_cfg.gpioMode = GPIO_MODE_OUTPUT;\r\n      gpio_cfg.gpioFun  = GPIO_FUN_QDEC;\r\n    } else if (af_pin_table[i].func == GPIO_FUN_CLK_OUT) {\r\n      if (af_pin_table[i].pin % 2) {\r\n        /*odd gpio output clock*/\r\n        GLB_Set_Chip_Out_1_CLK_Sel(GLB_CHIP_CLK_OUT_I2S_REF_CLK);\r\n      } else {\r\n        /*even gpio output clock*/\r\n        GLB_Set_Chip_Out_0_CLK_Sel(GLB_CHIP_CLK_OUT_I2S_REF_CLK);\r\n      }\r\n    } else if ((af_pin_table[i].func == GPIO_FUN_GPIO_INPUT_UP) || (af_pin_table[i].func == GPIO_FUN_GPIO_EXTI_FALLING_EDGE) || (af_pin_table[i].func == GPIO_FUN_GPIO_EXTI_LOW_LEVEL)) {\r\n      /*if common gpio func,include input、output and exti*/\r\n      gpio_cfg.gpioFun  = GPIO_FUN_GPIO;\r\n      gpio_cfg.gpioMode = GPIO_MODE_INPUT;\r\n      gpio_cfg.pullType = GPIO_PULL_UP;\r\n\r\n      if (af_pin_table[i].func == GPIO_FUN_GPIO_EXTI_FALLING_EDGE) {\r\n        GLB_Set_GPIO_IntMod(af_pin_table[i].pin, GLB_GPIO_INT_CONTROL_ASYNC, GLB_GPIO_INT_TRIG_NEG_PULSE);\r\n      } else if (af_pin_table[i].func == GPIO_FUN_GPIO_EXTI_LOW_LEVEL) {\r\n        GLB_Set_GPIO_IntMod(af_pin_table[i].pin, GLB_GPIO_INT_CONTROL_ASYNC, GLB_GPIO_INT_TRIG_NEG_LEVEL);\r\n      }\r\n    } else if ((af_pin_table[i].func == GPIO_FUN_GPIO_INPUT_DOWN) || (af_pin_table[i].func == GPIO_FUN_GPIO_EXTI_RISING_EDGE) || (af_pin_table[i].func == GPIO_FUN_GPIO_EXTI_HIGH_LEVEL)) {\r\n      gpio_cfg.gpioFun  = GPIO_FUN_GPIO;\r\n      gpio_cfg.gpioMode = GPIO_MODE_INPUT;\r\n      gpio_cfg.pullType = GPIO_PULL_DOWN;\r\n\r\n      if (af_pin_table[i].func == GPIO_FUN_GPIO_EXTI_RISING_EDGE) {\r\n        GLB_Set_GPIO_IntMod(af_pin_table[i].pin, GLB_GPIO_INT_CONTROL_ASYNC, GLB_GPIO_INT_TRIG_POS_PULSE);\r\n      } else if (af_pin_table[i].func == GPIO_FUN_GPIO_EXTI_HIGH_LEVEL) {\r\n        GLB_Set_GPIO_IntMod(af_pin_table[i].pin, GLB_GPIO_INT_CONTROL_ASYNC, GLB_GPIO_INT_TRIG_POS_LEVEL);\r\n      }\r\n    } else if (af_pin_table[i].func == GPIO_FUN_GPIO_INPUT_NONE) {\r\n      gpio_cfg.gpioFun  = GPIO_FUN_GPIO;\r\n      gpio_cfg.gpioMode = GPIO_MODE_INPUT;\r\n      gpio_cfg.pullType = GPIO_PULL_NONE;\r\n    } else if (af_pin_table[i].func == GPIO_FUN_GPIO_OUTPUT_UP) {\r\n      gpio_cfg.gpioFun  = GPIO_FUN_GPIO;\r\n      gpio_cfg.gpioMode = GPIO_MODE_OUTPUT;\r\n      gpio_cfg.pullType = GPIO_PULL_UP;\r\n    } else if (af_pin_table[i].func == GPIO_FUN_GPIO_OUTPUT_DOWN) {\r\n      gpio_cfg.gpioFun  = GPIO_FUN_GPIO;\r\n      gpio_cfg.gpioMode = GPIO_MODE_OUTPUT;\r\n      gpio_cfg.pullType = GPIO_PULL_DOWN;\r\n    } else if (af_pin_table[i].func == GPIO_FUN_GPIO_OUTPUT_NONE) {\r\n      gpio_cfg.gpioFun  = GPIO_FUN_GPIO;\r\n      gpio_cfg.gpioMode = GPIO_MODE_OUTPUT;\r\n      gpio_cfg.pullType = GPIO_PULL_NONE;\r\n    }\r\n    GLB_GPIO_Init(&gpio_cfg);\r\n  }\r\n\r\n  /*disable unused reg_aon_pad_ie_smt bits and hbn_pin_wakeup_mask bits*/\r\n  tmpVal = BL_RD_REG(HBN_BASE, HBN_IRQ_MODE);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_PIN_WAKEUP_MASK, hbn_gpio_mask);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_REG_AON_PAD_IE_SMT, hbn_aon_ie);\r\n  tmpVal = BL_CLR_REG_BIT(tmpVal, HBN_REG_EN_HW_PU_PD);\r\n  tmpVal = BL_SET_REG_BITS_VAL(tmpVal, HBN_PIN_WAKEUP_MODE, HBN_GPIO_INT_TRIGGER_ASYNC_FALLING_EDGE);\r\n  BL_WR_REG(HBN_BASE, HBN_IRQ_MODE, tmpVal);\r\n}\r\n\r\nstatic void board_clock_init(void) {\r\n  system_clock_init();\r\n  peripheral_clock_init();\r\n}\r\n\r\nvoid board_init(void) {\r\n  board_clock_init();\r\n  board_pin_mux_init();\r\n}"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/clock_config.h",
    "content": "/**\r\n * @file clock_config.h\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n\r\n#ifndef _CLOCK_CONFIG_H\r\n#define _CLOCK_CONFIG_H\r\n\r\n#define XTAL_TYPE                  EXTERNAL_XTAL_32M\r\n#define XTAL_32K_TYPE              INTERNAL_RC_32K\r\n#define BSP_ROOT_CLOCK_SOURCE      ROOT_CLOCK_SOURCE_PLL_144M\r\n#define BSP_AUDIO_PLL_CLOCK_SOURCE ROOT_CLOCK_SOURCE_AUPLL_24000000_HZ\r\n\r\n#define BSP_FCLK_DIV 0\r\n#define BSP_BCLK_DIV 1\r\n\r\n#define BSP_UART_CLOCK_SOURCE   ROOT_CLOCK_SOURCE_PLL_96M\r\n#define BSP_UART_CLOCK_DIV      0\r\n#define BSP_I2C_CLOCK_SOURCE    ROOT_CLOCK_SOURCE_BCLK\r\n#define BSP_I2C_CLOCK_DIV       0\r\n#define BSP_SPI_CLOCK_SOURCE    ROOT_CLOCK_SOURCE_BCLK\r\n#define BSP_SPI_CLOCK_DIV       0\r\n#define BSP_TIMER0_CLOCK_SOURCE ROOT_CLOCK_SOURCE_32K_CLK\r\n#define BSP_TIMER0_CLOCK_DIV    22\r\n#define BSP_TIMER1_CLOCK_SOURCE ROOT_CLOCK_SOURCE_32K_CLK\r\n#define BSP_TIMER1_CLOCK_DIV    31\r\n#define BSP_WDT_CLOCK_SOURCE    ROOT_CLOCK_SOURCE_32K_CLK\r\n#define BSP_WDT_CLOCK_DIV       32\r\n#define BSP_PWM_CLOCK_SOURCE    ROOT_CLOCK_SOURCE_XCLK\r\n#define BSP_PWM_CLOCK_DIV       22\r\n#define BSP_IR_CLOCK_SOURCE     ROOT_CLOCK_SOURCE_XCLK\r\n#define BSP_IR_CLOCK_DIV        0\r\n\r\n#define BSP_ADC_CLOCK_SOURCE ROOT_CLOCK_SOURCE_XCLK\r\n#define BSP_ADC_CLOCK_DIV    16\r\n\r\n#define BSP_DAC_CLOCK_SOURCE ROOT_CLOCK_SOURCE_AUPLL_24000000_HZ\r\n#define BSP_DAC_CLOCK_DIV    2\r\n\r\n#define BSP_CAM_CLOCK_SOURCE ROOT_CLOCK_SOURCE_PLL_96M\r\n#define BSP_CAM_CLOCK_DIV    3\r\n\r\n#define BSP_QDEC_KEYSCAN_CLOCK_SOURCE ROOT_CLOCK_SOURCE_XCLK\r\n#define BSP_QDEC_KEYSCAN_CLOCK_DIV    31\r\n\r\n#endif"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/configuration.h",
    "content": "#ifndef CONFIGURATION_H_\n#define CONFIGURATION_H_\n#include <stdint.h>\n/**\n * Configuration.h\n * Define here your default pre settings for Pinecilv2\n *\n */\n\n//===========================================================================\n//============================= Default Settings ============================\n//===========================================================================\n/**\n * Default soldering temp is 320.0 C\n * Temperature the iron sleeps at - default 150.0 C\n */\n\n#define SLEEP_TEMP         150 // Default sleep temperature\n#define BOOST_TEMP         420 // Default boost temp.\n#define BOOST_MODE_ENABLED 1   // 0: Disable 1: Enable\n\n/**\n * Blink the temperature on the cooling screen when its > 50C\n */\n#define COOLING_TEMP_BLINK 0 // 0: Disable 1: Enable\n\n/**\n * How many seconds/minutes we wait until going to sleep/shutdown.\n * Values -> SLEEP_TIME * 10; i.e. 5*10 = 50 Seconds!\n */\n#define SLEEP_TIME    5  // x10 Seconds\n#define SHUTDOWN_TIME 10 // Minutes\n\n/**\n * Auto start off for safety.\n * Pissible values are:\n *  0 - none\n *  1 - Soldering Temperature\n *  2 - Sleep Temperature\n *  3 - Sleep Off Temperature\n */\n#define AUTO_START_MODE 0 // Default to none\n\n/**\n * Locking Mode\n * When in soldering mode a long press on both keys toggle the lock of the buttons\n * Possible values are:\n *  0 - Desactivated\n *  1 - Lock except boost\n *  2 - Full lock\n */\n#define LOCKING_MODE 0 // Default to desactivated for safety\n\n/**\n * OLED Orientation\n *\n */\n#define ORIENTATION_MODE           2 // 0: Right 1:Left 2:Automatic - Default Automatic\n#define MAX_ORIENTATION_MODE       2 // Up to auto\n#define REVERSE_BUTTON_TEMP_CHANGE 0 // 0:Default 1:Reverse - Reverse the plus and minus button assigment for temperature change\n\n/**\n * OLED Brightness\n *\n */\n#define MIN_BRIGHTNESS     1   // Min OLED brightness selectable\n#define MAX_BRIGHTNESS     101 // Max OLED brightness selectable\n#define BRIGHTNESS_STEP    25  // OLED brightness increment\n#define DEFAULT_BRIGHTNESS 26  // default OLED brightness\n\n/**\n * Temp change settings\n */\n#define TEMP_CHANGE_SHORT_STEP     1  // Default temp change short step +1\n#define TEMP_CHANGE_LONG_STEP      10 // Default temp change long step +10\n#define TEMP_CHANGE_SHORT_STEP_MAX 50 // Temp change short step MAX value\n#define TEMP_CHANGE_LONG_STEP_MAX  90 // Temp change long step MAX value\n\n/* Power pulse for keeping power banks awake*/\n\n#define POWER_PULSE_INCREMENT    1\n#define POWER_PULSE_MAX          100 // x10 max watts\n#define POWER_PULSE_WAIT_MAX     9   // 9*2.5s = 22.5 seconds\n#define POWER_PULSE_DURATION_MAX 9   // 9*250ms = 2.25 seconds\n\n#ifdef MODEL_Pinecilv2\n#define POWER_PULSE_DEFAULT 0\n#else\n#define POWER_PULSE_DEFAULT 5\n#endif                                 /* Pinecil */\n#define POWER_PULSE_WAIT_DEFAULT     4 // Default rate of the power pulse: 4*2500 = 10000 ms = 10 s\n#define POWER_PULSE_DURATION_DEFAULT 1 // Default duration of the power pulse: 1*250 = 250 ms\n\n/**\n * OLED Orientation Sensitivity on Automatic mode!\n * Motion Sensitivity <0=Off 1=Least Sensitive 9=Most Sensitive>\n */\n#define SENSITIVITY 7 // Default 7\n\n/**\n * Detailed soldering screen\n * Detailed idle screen (off for first time users)\n */\n#define DETAILED_SOLDERING 0 // 0: Disable 1: Enable - Default 0\n#define DETAILED_IDLE      0 // 0: Disable 1: Enable - Default 0\n\n#define THERMAL_RUNAWAY_TIME_SEC 20\n#define THERMAL_RUNAWAY_TEMP_C   3\n\n#define CUT_OUT_SETTING          0  // default to no cut-off voltage\n#define RECOM_VOL_CELL           33 // Minimum voltage per cell (Recommended 3.3V (33))\n#define TEMPERATURE_INF          0  // default to 0\n#define DESCRIPTION_SCROLL_SPEED 0  // 0: Slow 1: Fast - default to slow\n#define ANIMATION_LOOP           1  // 0: off 1: on\n#define ANIMATION_SPEED          settingOffSpeed_t::MEDIUM\n\n#define OP_AMP_Rf_Pinecil  680 * 1000 // 680  Kilo-ohms -> From schematic, R1\n#define OP_AMP_Rin_Pinecil 2370       // 2.37 Kilo-ohms -> From schematic, R2\n\n#define OP_AMP_GAIN_STAGE_PINECIL (1 + (OP_AMP_Rf_Pinecil / OP_AMP_Rin_Pinecil))\n\n#if defined(MODEL_Pinecilv2) == 0\n#error \"No model defined!\"\n#endif\n\n#ifdef MODEL_Pinecilv2\n#define ADC_VDD_MV                 3200                      // ADC max reading millivolts\n#define ADC_MAX_READING            ((1 << 16) >> 1)          // Maximum reading of the adc\n#define SOLDERING_TEMP             320                       // Default soldering temp is 320.0 °C\n#define VOLTAGE_DIV                630                       // 600 - Default divider from schematic\n#define CALIBRATION_OFFSET         900                       // 900 - Default adc offset in uV\n#define MIN_CALIBRATION_OFFSET     100                       // Min value for calibration\n#define PID_POWER_LIMIT            120                       // Sets the max pwm power limit\n#define POWER_LIMIT                0                         // 0 watts default limit\n#define MAX_POWER_LIMIT            120                       // Sets the max power limit\n#define POWER_LIMIT_STEPS          5                         //\n#define OP_AMP_GAIN_STAGE          OP_AMP_GAIN_STAGE_PINECIL // Uses TS100 resistors\n#define TEMP_uV_LOOKUP_HAKKO                                 // Use Hakko lookup table\n#define USB_PD_VMAX                28                        // Maximum voltage for PD to negotiate\n#define PID_TIM_HZ                 (10)                      // Tick rate of the PID loop\n#define MAX_TEMP_C                 450                       // Max soldering temp selectable °C\n#define MAX_TEMP_F                 850                       // Max soldering temp selectable °F\n#define MIN_TEMP_C                 10                        // Min soldering temp selectable °C\n#define MIN_TEMP_F                 50                        // Min soldering temp selectable °F\n#define MIN_BOOST_TEMP_C           250                       // The min settable temp for boost mode °C\n#define MIN_BOOST_TEMP_F           480                       // The min settable temp for boost mode °F\n#define DEVICE_HAS_VALIDATION_CODE                           // We have 2 digit validations\n#define POW_PD                     1                         // Supported features\n#define USB_PD_EPR_WATTAGE         140                       // USB PD EPR Wattage\n#define POW_PD_EXT                 0                         // Future-proof macro for other models with other PD modes\n#define POW_QC                     1                         // Supported features\n#define POW_DC                     1                         // Supported features\n#define POW_QC_20V                 1                         // Supported features\n#define POW_EPR                    1\n#define ENABLE_QC2                 1\n#define MAG_SLEEP_SUPPORT          1\n#define TIP_TYPE_SUPPORT           1 // Support for tips of different types, i.e. resistance\n#define AUTO_TIP_SELECTION         1 // Can auto-select the tip\n#define TIPTYPE_T12                1 // Can manually pick a T12 tip\n#define DEVICE_HAS_VALIDATION_SUPPORT\n#define OLED_96x16 1\n#define TEMP_NTC\n#define ACCEL_BMA\n#define ACCEL_SC7\n#define HALL_SENSOR\n#define HALL_SI7210\n#define DEBUG_UART_OUTPUT\n#define HAS_POWER_DEBUG_MENU\n#define HARDWARE_MAX_WATTAGE_X10  750\n#define BLE_ENABLED                   // We have a BLE stack\n#define NEEDS_VBUS_PROBE          0   // No vbus probe, its not connected in pcb\n#define CANT_DIRECT_READ_SETTINGS     // We cant memcpy settings due to flash cache\n#define TIP_CONTROL_PID               // We use PID rather than integrator\n#define TIP_PID_KP                40  // Reasonable compromise for most tips so far\n#define TIP_PID_KI                6   // About as high for stability across tips\n#define TIP_PID_KD                200 // Helps dampen smaller tips; ~= nothing for larger tips\n#define FILTER_DISPLAYED_TIP_TEMP 8   // Filtering for GUI display\n\n#endif /* Pinecilv2 */\n\n#define FLASH_PAGE_SIZE (1024) // Read pages\n// Erase is 4 or 8 k size, so we pad these apart for now\n// If we ever get low on flash, will need better solution\n#define FLASH_LOGOADDR      (0x23000000 + (1016 * FLASH_PAGE_SIZE))\n#define SETTINGS_START_PAGE (1023 * FLASH_PAGE_SIZE) // Hal auto offsets base addr\n\n#endif /* CONFIGURATION_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/crc32.h",
    "content": "#pragma once\n\n#include <stdint.h>\n\n#define DEFAULT_POLY 0x973afb51\n\ntemplate <uint32_t polynomial = DEFAULT_POLY> struct CRC32Table {\n  constexpr CRC32Table() : table() {\n    for (uint32_t i = 0; i < 256; i++) {\n      uint32_t c = i;\n      for (auto j = 0; j < 8; j++) {\n        if (c & 1) {\n          c = polynomial ^ (c >> 1);\n        } else {\n          c >>= 1;\n        }\n      }\n      table[i] = c;\n    }\n  }\n  uint32_t table[256];\n  uint32_t computeCRC32(uint32_t initial, const uint8_t *buf, int len) {\n    uint32_t c = initial ^ 0xFFFFFFFF;\n    for (auto i = 0; i < len; ++i) {\n      c = table[(c ^ buf[i]) & 0xFF] ^ (c >> 8);\n    }\n    return c ^ 0xFFFFFFFF;\n  }\n};\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/flash.c",
    "content": "/*\r\n * flash.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"BSP.h\"\r\n#include \"BSP_Flash.h\"\r\n#include \"hal_flash.h\"\r\n#include \"string.h\"\r\n\r\nvoid flash_save_buffer(const uint8_t *buffer, const uint16_t length) {\r\n  BL_Err_Type err = flash_erase(SETTINGS_START_PAGE, FLASH_PAGE_SIZE);\r\n  err             = flash_write(SETTINGS_START_PAGE, buffer, length);\r\n}\r\n\r\nvoid flash_read_buffer(uint8_t *buffer, const uint16_t length) { flash_read(SETTINGS_START_PAGE, buffer, length); }\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/fusb_user.cpp",
    "content": "#include \"configuration.h\"\n#ifdef POW_PD\n#include \"BSP.h\"\n#include \"I2C_Wrapper.hpp\"\n#include \"Setup.h\"\n\n/*\n * Read multiple bytes from the FUSB302B\n *\n * cfg: The FUSB302B to communicate with\n * addr: The memory address from which to read\n * size: The number of bytes to read\n * buf: The buffer into which data will be read\n */\nbool fusb_read_buf(const uint8_t deviceAddr, const uint8_t registerAdd, const uint8_t size, uint8_t *buf) { return FRToSI2C::Mem_Read(deviceAddr, registerAdd, buf, size); }\n\n/*\n * Write multiple bytes to the FUSB302B\n *\n * cfg: The FUSB302B to communicate with\n * addr: The memory address to which we will write\n * size: The number of bytes to write\n * buf: The buffer to write\n */\nbool fusb_write_buf(const uint8_t deviceAddr, const uint8_t registerAdd, const uint8_t size, uint8_t *buf) { return FRToSI2C::Mem_Write(deviceAddr, registerAdd, (uint8_t *)buf, size); }\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/peripheral_config.h",
    "content": "/**\n * @file peripheral_config.h\n * @brief\n *\n * Copyright (c) 2021 Bouffalolab team\n *\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.  The\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance with the\n * License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\n * License for the specific language governing permissions and limitations\n * under the License.\n *\n */\n\n#ifndef _PERIPHERAL_CONFIG_H_\n#define _PERIPHERAL_CONFIG_H_\n\n/* PERIPHERAL USING LIST */\n#define BSP_USING_ADC0\n// #define BSP_USING_DAC0\n#define BSP_USING_UART0\n// #define BSP_USING_UART1\n// #define BSP_USING_SPI0\n#define BSP_USING_I2C0\n// #define BSP_USING_I2S0\n// #define BSP_USING_PWM_CH0\n#define BSP_USING_PWM_CH1\n// #define BSP_USING_PWM_CH2\n// #define BSP_USING_PWM_CH3\n// #define BSP_USING_PWM_CH4\n#define BSP_USING_TIMER0\n#define BSP_USING_TIMER1\n#define BSP_USING_WDT\n// #define BSP_USING_KEYSCAN\n// #define BSP_USING_QDEC0\n// #define BSP_USING_QDEC1\n// #define BSP_USING_QDEC2\n// #define BSP_USING_USB\n/* ----------------------*/\n\n/* PERIPHERAL With DMA LIST */\n\n#define BSP_USING_DMA0_CH0\n#define BSP_USING_DMA0_CH1\n#define BSP_USING_DMA0_CH2\n#define BSP_USING_DMA0_CH3\n#define BSP_USING_DMA0_CH4\n#define BSP_USING_DMA0_CH5\n#define BSP_USING_DMA0_CH6\n#define BSP_USING_DMA0_CH7\n\n/* PERIPHERAL CONFIG */\n#if defined(BSP_USING_ADC0)\n#ifndef ADC0_CONFIG\n#define ADC0_CONFIG                                                                                                                                                      \\\n  {                                                                                                                                                                      \\\n    .clk_div = ADC_CLOCK_DIV_32, .vref = ADC_VREF_3V2, .continuous_conv_mode = DISABLE, .differential_mode = DISABLE, .data_width = ADC_DATA_WIDTH_16B_WITH_256_AVERAGE, \\\n    .fifo_threshold = ADC_FIFO_THRESHOLD_8BYTE, .gain = ADC_GAIN_1                                                                                                       \\\n  }\n#endif\n#endif\n\n#if defined(BSP_USING_DAC0)\n#ifndef DAC_CONFIG\n#define DAC_CONFIG \\\n  { .channels = DAC_CHANNEL_0, .sample_freq = DAC_SAMPLE_FREQ_500KHZ, .vref = DAC_VREF_INTERNAL, }\n#endif\n#endif\n\n#if defined(BSP_USING_UART0)\n#ifndef UART0_CONFIG\n#define UART0_CONFIG \\\n  { .id = 0, .baudrate = 2000000, .databits = UART_DATA_LEN_8, .stopbits = UART_STOP_ONE, .parity = UART_PAR_NONE, .fifo_threshold = 0, }\n#endif\n#endif\n\n#if defined(BSP_USING_PWM_CH0)\n#ifndef PWM_CH0_CONFIG\n#define PWM_CH0_CONFIG \\\n  { .ch = 0, .polarity_invert_mode = DISABLE, .period = 0, .threshold_low = 0, .threshold_high = 0, .it_pulse_count = 0, }\n#endif\n#endif\n\n#if defined(BSP_USING_PWM_CH1)\n#ifndef PWM_CH1_CONFIG\n#define PWM_CH1_CONFIG \\\n  { .ch = 1, .polarity_invert_mode = DISABLE, .period = 100, .threshold_low = 0, .threshold_high = 0, .it_pulse_count = 0, }\n#endif\n#endif\n\n#if defined(BSP_USING_PWM_CH2)\n#ifndef PWM_CH2_CONFIG\n#define PWM_CH2_CONFIG \\\n  { .ch = 2, .polarity_invert_mode = DISABLE, .period = 0, .threshold_low = 0, .threshold_high = 0, .it_pulse_count = 0, }\n#endif\n#endif\n\n#if defined(BSP_USING_PWM_CH3)\n#ifndef PWM_CH3_CONFIG\n#define PWM_CH3_CONFIG \\\n  { .ch = 3, .polarity_invert_mode = DISABLE, .period = 0, .threshold_low = 0, .threshold_high = 0, .it_pulse_count = 0, }\n#endif\n#endif\n\n#if defined(BSP_USING_PWM_CH4)\n#ifndef PWM_CH4_CONFIG\n#define PWM_CH4_CONFIG \\\n  { .ch = 4, .polarity_invert_mode = DISABLE, .period = 0, .threshold_low = 0, .threshold_high = 0, .it_pulse_count = 0, }\n#endif\n#endif\n\n#if defined(BSP_USING_DMA0_CH0)\n#ifndef DMA0_CH0_CONFIG\n#define DMA0_CH0_CONFIG                                                                                                                                                                            \\\n  {                                                                                                                                                                                                \\\n    .id = 0, .ch = 0, .direction = DMA_MEMORY_TO_MEMORY, .transfer_mode = DMA_LLI_ONCE_MODE, .src_req = DMA_REQUEST_NONE, .dst_req = DMA_REQUEST_NONE, .src_addr_inc = DMA_ADDR_INCREMENT_ENABLE,  \\\n    .dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, .src_burst_size = DMA_BURST_SIZE_4, .dst_burst_size = DMA_BURST_SIZE_4, .src_width = DMA_TRANSFER_WIDTH_32BIT, .dst_width = DMA_TRANSFER_WIDTH_32BIT, \\\n  }\n#endif\n#endif\n\n#if defined(BSP_USING_DMA0_CH1)\n#ifndef DMA0_CH1_CONFIG\n#define DMA0_CH1_CONFIG                                                                                                                                                                            \\\n  {                                                                                                                                                                                                \\\n    .id = 0, .ch = 1, .direction = DMA_MEMORY_TO_MEMORY, .transfer_mode = DMA_LLI_ONCE_MODE, .src_req = DMA_REQUEST_NONE, .dst_req = DMA_REQUEST_NONE, .src_addr_inc = DMA_ADDR_INCREMENT_ENABLE,  \\\n    .dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, .src_burst_size = DMA_BURST_SIZE_4, .dst_burst_size = DMA_BURST_SIZE_4, .src_width = DMA_TRANSFER_WIDTH_16BIT, .dst_width = DMA_TRANSFER_WIDTH_16BIT, \\\n  }\n#endif\n#endif\n\n#if defined(BSP_USING_DMA0_CH2)\n#ifndef DMA0_CH2_CONFIG\n#define DMA0_CH2_CONFIG                                                                                                                                                                               \\\n  {                                                                                                                                                                                                   \\\n    .id = 0, .ch = 2, .direction = DMA_MEMORY_TO_PERIPH, .transfer_mode = DMA_LLI_ONCE_MODE, .src_req = DMA_REQUEST_NONE, .dst_req = DMA_REQUEST_UART1_TX, .src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \\\n    .dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE, .src_burst_size = DMA_BURST_SIZE_1, .dst_burst_size = DMA_BURST_SIZE_1, .src_width = DMA_TRANSFER_WIDTH_8BIT, .dst_width = DMA_TRANSFER_WIDTH_8BIT,     \\\n  }\n#endif\n#endif\n\n#if defined(BSP_USING_DMA0_CH3)\n#ifndef DMA0_CH3_CONFIG\n#define DMA0_CH3_CONFIG                                                                                                                                                                              \\\n  {                                                                                                                                                                                                  \\\n    .id = 0, .ch = 3, .direction = DMA_MEMORY_TO_PERIPH, .transfer_mode = DMA_LLI_ONCE_MODE, .src_req = DMA_REQUEST_NONE, .dst_req = DMA_REQUEST_SPI0_TX, .src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \\\n    .dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE, .src_burst_size = DMA_BURST_SIZE_1, .dst_burst_size = DMA_BURST_SIZE_1, .src_width = DMA_TRANSFER_WIDTH_8BIT, .dst_width = DMA_TRANSFER_WIDTH_8BIT,    \\\n  }\n#endif\n#endif\n\n#if defined(BSP_USING_DMA0_CH4)\n#ifndef DMA0_CH4_CONFIG\n#define DMA0_CH4_CONFIG                                                                                                                                                                               \\\n  {                                                                                                                                                                                                   \\\n    .id = 0, .ch = 4, .direction = DMA_PERIPH_TO_MEMORY, .transfer_mode = DMA_LLI_ONCE_MODE, .src_req = DMA_REQUEST_SPI0_RX, .dst_req = DMA_REQUEST_NONE, .src_addr_inc = DMA_ADDR_INCREMENT_DISABLE, \\\n    .dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, .src_burst_size = DMA_BURST_SIZE_1, .dst_burst_size = DMA_BURST_SIZE_1, .src_width = DMA_TRANSFER_WIDTH_8BIT, .dst_width = DMA_TRANSFER_WIDTH_8BIT,      \\\n  }\n#endif\n#endif\n\n#if defined(BSP_USING_DMA0_CH5)\n#ifndef DMA0_CH5_CONFIG\n#define DMA0_CH5_CONFIG                                                                                                                                                                              \\\n  {                                                                                                                                                                                                  \\\n    .id = 0, .ch = 5, .direction = DMA_MEMORY_TO_PERIPH, .transfer_mode = DMA_LLI_CYCLE_MODE, .src_req = DMA_REQUEST_NONE, .dst_req = DMA_REQUEST_I2S_TX, .src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \\\n    .dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE, .src_burst_size = DMA_BURST_SIZE_1, .dst_burst_size = DMA_BURST_SIZE_1, .src_width = DMA_TRANSFER_WIDTH_16BIT, .dst_width = DMA_TRANSFER_WIDTH_16BIT,  \\\n  }\n#endif\n#endif\n\n#if defined(BSP_USING_DMA0_CH6)\n#ifndef DMA0_CH6_CONFIG\n#define DMA0_CH6_CONFIG                                                                                                                                                                              \\\n  {                                                                                                                                                                                                  \\\n    .id = 0, .ch = 6, .direction = DMA_MEMORY_TO_PERIPH, .transfer_mode = DMA_LLI_CYCLE_MODE, .src_req = DMA_REQUEST_NONE, .dst_req = DMA_REQUEST_I2S_TX, .src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \\\n    .dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE, .src_burst_size = DMA_BURST_SIZE_1, .dst_burst_size = DMA_BURST_SIZE_1, .src_width = DMA_TRANSFER_WIDTH_16BIT, .dst_width = DMA_TRANSFER_WIDTH_16BIT,  \\\n  }\n#endif\n#endif\n\n#if defined(BSP_USING_DMA0_CH7)\n#ifndef DMA0_CH7_CONFIG\n#define DMA0_CH7_CONFIG                                                                                                                                                                            \\\n  {                                                                                                                                                                                                \\\n    .id = 0, .ch = 7, .direction = DMA_MEMORY_TO_MEMORY, .transfer_mode = DMA_LLI_ONCE_MODE, .src_req = DMA_REQUEST_NONE, .dst_req = DMA_REQUEST_NONE, .src_addr_inc = DMA_ADDR_INCREMENT_ENABLE,  \\\n    .dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, .src_burst_size = DMA_BURST_SIZE_1, .dst_burst_size = DMA_BURST_SIZE_1, .src_width = DMA_TRANSFER_WIDTH_32BIT, .dst_width = DMA_TRANSFER_WIDTH_32BIT, \\\n  }\n#endif\n#endif\n\n#if defined(BSP_USING_I2C0)\n#ifndef I2C0_CONFIG\n#define I2C0_CONFIG \\\n  { .id = 0, .mode = I2C_HW_MODE, .phase = 15, }\n#endif\n#endif\n\n#if defined(BSP_USING_TIMER0)\n#ifndef TIMER0_CONFIG\n#define TIMER0_CONFIG \\\n  { .id = 0, .cnt_mode = TIMER_CNT_PRELOAD, .trigger = TIMER_PRELOAD_TRIGGER_COMP2, .reload = 0, .timeout1 = 1000000, .timeout2 = 2000000, .timeout3 = 3000000, }\n#endif\n#endif\n\n#if defined(BSP_USING_TIMER1)\n#ifndef TIMER1_CONFIG\n#define TIMER1_CONFIG \\\n  { .id = 1, .cnt_mode = TIMER_CNT_PRELOAD, .trigger = TIMER_PRELOAD_TRIGGER_COMP0, .reload = 0, .timeout1 = 1000000, .timeout2 = 2000000, .timeout3 = 3000000, }\n#endif\n#endif\n\n#if defined(BSP_USING_WDT)\n#ifndef WDT_CONFIG\n#define WDT_CONFIG \\\n  { .id = 0, .wdt_timeout = 6000, }\n#endif\n#endif\n\n#if defined(BSP_USING_KEYSCAN)\n#ifndef KEYSCAN_CONFIG\n#define KEYSCAN_CONFIG \\\n  { .col_num = COL_NUM_4, .row_num = ROW_NUM_4, .deglitch_count = 0, }\n#endif\n#endif\n\n#if defined(BSP_USING_QDEC0)\n#ifndef QDEC0_CONFIG\n#define QDEC0_CONFIG                                                                                                                                                                                 \\\n  {                                                                                                                                                                                                  \\\n    .id = 0, .acc_mode = QDEC_ACC_CONTINUE_ACCUMULATE, .sample_mode = QDEC_SAMPLE_SINGLE_MOD, .sample_period = QDEC_SAMPLE_PERIOD_256US, .report_mode = QDEC_REPORT_TIME_MOD, .report_period = 2000, \\\n    .led_en = ENABLE, .led_swap = DISABLE, .led_period = 7, .deglitch_en = DISABLE, .deglitch_strength = 0x0,                                                                                        \\\n  }\n#endif\n#endif\n\n#if defined(BSP_USING_QDEC1)\n#ifndef QDEC1_CONFIG\n#define QDEC1_CONFIG                                                                                                                                                                                 \\\n  {                                                                                                                                                                                                  \\\n    .id = 1, .acc_mode = QDEC_ACC_CONTINUE_ACCUMULATE, .sample_mode = QDEC_SAMPLE_SINGLE_MOD, .sample_period = QDEC_SAMPLE_PERIOD_256US, .report_mode = QDEC_REPORT_TIME_MOD, .report_period = 2000, \\\n    .led_en = ENABLE, .led_swap = DISABLE, .led_period = 7, .deglitch_en = DISABLE, .deglitch_strength = 0x0,                                                                                        \\\n  }\n#endif\n#endif\n\n#if defined(BSP_USING_QDEC2)\n#ifndef QDEC2_CONFIG\n#define QDEC2_CONFIG                                                                                                                                                                                 \\\n  {                                                                                                                                                                                                  \\\n    .id = 2, .acc_mode = QDEC_ACC_CONTINUE_ACCUMULATE, .sample_mode = QDEC_SAMPLE_SINGLE_MOD, .sample_period = QDEC_SAMPLE_PERIOD_256US, .report_mode = QDEC_REPORT_TIME_MOD, .report_period = 2000, \\\n    .led_en = ENABLE, .led_swap = DISABLE, .led_period = 7, .deglitch_en = DISABLE, .deglitch_strength = 0x0,                                                                                        \\\n  }\n#endif\n#endif\n\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/pinmux_config.h",
    "content": "/**\r\n * @file pinmux_config.h\r\n * @brief\r\n *\r\n * Copyright (c) 2021 Bouffalolab team\r\n *\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.  The\r\n * ASF licenses this file to you under the Apache License, Version 2.0 (the\r\n * \"License\"); you may not use this file except in compliance with the\r\n * License.  You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n */\r\n#ifndef _PINMUX_CONFIG_H\r\n#define _PINMUX_CONFIG_H\r\n\r\n// <q> GPIO0 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio0 function\r\n#define CONFIG_GPIO0_FUNC GPIO_FUN_E21_JTAG\r\n\r\n// <q> GPIO1 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_CTS//GPIO_FUN_UART1_CTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio1 function\r\n#define CONFIG_GPIO1_FUNC GPIO_FUN_E21_JTAG\r\n\r\n// <q> GPIO2 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_TX//GPIO_FUN_UART1_TX//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio2 function\r\n#define CONFIG_GPIO2_FUNC GPIO_FUN_E21_JTAG\r\n\r\n// <q> GPIO3 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_RX//GPIO_FUN_UART1_RX//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio3 function\r\n#define CONFIG_GPIO3_FUNC GPIO_FUN_GPIO_OUTPUT_NONE\r\n\r\n// <q> GPIO4 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio4 function\r\n#define CONFIG_GPIO4_FUNC GPIO_FUN_GPIO_INPUT_NONE\r\n\r\n// <q> GPIO5 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_CTS//GPIO_FUN_UART1_CTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio5 function\r\n#define CONFIG_GPIO5_FUNC GPIO_FUN_GPIO_INPUT_NONE\r\n\r\n// <q> GPIO6 <2> [GPIO_FUN_UNUSED//GPIO_FUN_CLK_OUT//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_TX//GPIO_FUN_UART1_TX//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio6 function\r\n#define CONFIG_GPIO6_FUNC GPIO_FUN_GPIO_INPUT_NONE\r\n\r\n// <q> GPIO7 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RX//GPIO_FUN_UART1_RX//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio7 function\r\n#define CONFIG_GPIO7_FUNC GPIO_FUN_USB\r\n\r\n// <q> GPIO8 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio8 function\r\n#define CONFIG_GPIO8_FUNC GPIO_FUN_USB\r\n\r\n// <q> GPIO9 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio9 function\r\n#define CONFIG_GPIO9_FUNC GPIO_FUN_E21_JTAG\r\n\r\n// <q> GPIO10 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio10 function\r\n#define CONFIG_GPIO10_FUNC GPIO_FUN_I2C\r\n\r\n// <q> GPIO11 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio11 function\r\n#define CONFIG_GPIO11_FUNC GPIO_FUN_I2C\r\n\r\n// <q> GPIO12 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio12 function\r\n#define CONFIG_GPIO12_FUNC GPIO_FUN_GPIO_INPUT_NONE\r\n\r\n// <q> GPIO13 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio13 function\r\n#define CONFIG_GPIO13_FUNC GPIO_FUN_UNUSED\r\n\r\n// <q> GPIO14 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio14 function\r\n#define CONFIG_GPIO14_FUNC GPIO_FUN_GPIO_INPUT_NONE\r\n\r\n// <q> GPIO15 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio15 function\r\n#define CONFIG_GPIO15_FUNC GPIO_FUN_SPI\r\n\r\n// <q> GPIO16 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio16 function\r\n#define CONFIG_GPIO16_FUNC GPIO_FUN_GPIO_EXTI_LOW_LEVEL\r\n\r\n// <q> GPIO17 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio17 function\r\n#define CONFIG_GPIO17_FUNC GPIO_FUN_ADC\r\n\r\n// <q> GPIO18 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio18 function\r\n#define CONFIG_GPIO18_FUNC GPIO_FUN_ADC\r\n\r\n// <q> GPIO19 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio19 function\r\n#define CONFIG_GPIO19_FUNC GPIO_FUN_ADC\r\n\r\n// <q> GPIO20 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio20 function\r\n#define CONFIG_GPIO20_FUNC GPIO_FUN_ADC\r\n\r\n// <q> GPIO21 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio21 function\r\n#define CONFIG_GPIO21_FUNC GPIO21_FUN_PWM_CH1\r\n\r\n// <q> GPIO22 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio22 function\r\n#define CONFIG_GPIO22_FUNC GPIO_FUN_UART0_TX\r\n\r\n// <q> GPIO23 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio23 function\r\n#define CONFIG_GPIO23_FUNC GPIO_FUN_UART0_RX\r\n\r\n// <q> GPIO24 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio24 function\r\n#define CONFIG_GPIO24_FUNC GPIO_FUN_GPIO_INPUT_NONE\r\n\r\n// <q> GPIO25 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio25 function\r\n#define CONFIG_GPIO25_FUNC GPIO_FUN_GPIO_INPUT_NONE\r\n\r\n// <q> GPIO26 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio26 function\r\n#define CONFIG_GPIO26_FUNC GPIO_FUN_GPIO_INPUT_NONE\r\n\r\n// <q> GPIO27 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio27 function\r\n#define CONFIG_GPIO27_FUNC GPIO_FUN_GPIO_INPUT_NONE\r\n\r\n// <q> GPIO28 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio28 function\r\n#define CONFIG_GPIO28_FUNC GPIO_FUN_GPIO_INPUT_NONE\r\n\r\n// <q> GPIO29 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio29 function\r\n#define CONFIG_GPIO29_FUNC GPIO_FUN_GPIO_EXTI_LOW_LEVEL\r\n\r\n// <q> GPIO30 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio30 function\r\n#define CONFIG_GPIO30_FUNC GPIO_FUN_GPIO_EXTI_LOW_LEVEL\r\n\r\n// <q> GPIO31 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio31 function\r\n#define CONFIG_GPIO31_FUNC GPIO_FUN_GPIO_EXTI_LOW_LEVEL\r\n\r\n// <q> GPIO32 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio32 function\r\n#define CONFIG_GPIO32_FUNC GPIO_FUN_UNUSED\r\n\r\n// <q> GPIO33 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio33 function\r\n#define CONFIG_GPIO33_FUNC GPIO_FUN_UNUSED\r\n\r\n// <q> GPIO34 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio34 function\r\n#define CONFIG_GPIO34_FUNC GPIO_FUN_UNUSED\r\n\r\n// <q> GPIO35 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio35 function\r\n#define CONFIG_GPIO35_FUNC GPIO_FUN_UNUSED\r\n\r\n// <q> GPIO36 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio36 function\r\n#define CONFIG_GPIO36_FUNC GPIO_FUN_UNUSED\r\n\r\n// <q> GPIO37 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_USB//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]\r\n// <i> config gpio37 function\r\n#define CONFIG_GPIO37_FUNC GPIO_FUN_UNUSED\r\n\r\n#endif\r\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/postRTOS.cpp",
    "content": "#include \"BSP.h\"\n#include \"FreeRTOS.h\"\n#include \"I2C_Wrapper.hpp\"\n#include \"QC3.h\"\n#include \"Settings.h\"\n#include \"Si7210.h\"\n#include \"ble.h\"\n#include \"cmsis_os.h\"\n#include \"main.hpp\"\n#include \"power.hpp\"\n#include \"stdlib.h\"\n#include \"task.h\"\nbool hall_effect_present = false;\n\nvoid postRToSInit() {\n  // Any after RTos setup\n#ifdef HALL_SI7210\n  if (Si7210::detect()) {\n    hall_effect_present = Si7210::init();\n  }\n#endif\n\n  if (getSettingValue(SettingsOptions::BluetoothLE)) {\n    ble_stack_start();\n  }\n}\nint16_t getRawHallEffect() {\n  if (hall_effect_present) {\n    return Si7210::read();\n  }\n  return 0;\n}\n\nbool getHallSensorFitted() { return hall_effect_present; }\n"
  },
  {
    "path": "source/Core/BSP/Pinecilv2/preRTOS.cpp",
    "content": "/*\r\n * preRTOS.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"BSP.h\"\r\n#include \"Pins.h\"\r\n#include \"Setup.h\"\r\n#include \"bflb_platform.h\"\r\n#include \"hal_gpio.h\"\r\n#include <I2C_Wrapper.hpp>\r\n\r\nvoid preRToSInit() {\r\n  // Normal system bringup -- GPIO etc\r\n  bflb_platform_init(0);\r\n\r\n  hardware_init();\r\n  gpio_write(OLED_RESET_Pin, 0);\r\n  delay_ms(10);\r\n  gpio_write(OLED_RESET_Pin, 1);\r\n  BSPInit();\r\n  FRToSI2C::FRToSInit();\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/BSP.cpp",
    "content": "// BSP mapping functions\r\n\r\n#include \"BSP.h\"\r\n#include \"BootLogo.h\"\r\n#include \"FS2711.hpp\"\r\n#include \"HUB238.hpp\"\r\n#include \"I2C_Wrapper.hpp\"\r\n#include \"Pins.h\"\r\n#include \"Settings.h\"\r\n#include \"Setup.h\"\r\n#include \"TipThermoModel.h\"\r\n#include \"configuration.h\"\r\n#include \"history.hpp\"\r\n#include \"main.hpp\"\r\n#include <IRQ.h>\r\n\r\nvolatile uint16_t    PWMSafetyTimer   = 0;\r\nvolatile uint8_t     pendingPWM       = 0;\r\nconst uint16_t       powerPWM         = 255;\r\nstatic const uint8_t holdoffTicks     = 15; // delay of 8 ish ms\r\nstatic const uint8_t tempMeasureTicks = 15;\r\n\r\nuint16_t totalPWM = powerPWM + tempMeasureTicks + holdoffTicks; // htim2.Init.Period, the full PWM cycle\r\n\r\nvoid resetWatchdog() { HAL_IWDG_Refresh(&hiwdg); }\r\n// Lookup table for the NTC\r\n// We dont know exact specs, but it loooks to be roughly a 10K B=4000 NTC\r\n// Stored as ADCReading,Temp in degC\r\nstatic const uint16_t NTCHandleLookup[] = {\r\n    // ADC Reading , Temp in C\r\n    23931, 0,  //\r\n    23210, 2,  //\r\n    22466, 4,  //\r\n    21703, 6,  //\r\n    20924, 8,  //\r\n    20135, 10, //\r\n    19338, 12, //\r\n    18538, 14, //\r\n    17738, 16, //\r\n    16943, 18, //\r\n    16156, 20, //\r\n    15381, 22, //\r\n    14621, 24, //\r\n    13878, 26, //\r\n    13155, 28, //\r\n    12455, 30, //\r\n    11778, 32, //\r\n    11126, 34, //\r\n    10501, 36, //\r\n    9902,  38, //\r\n    9330,  40, //\r\n    8786,  42, //\r\n    8269,  44, //\r\n};\r\n\r\nuint16_t getHandleTemperature(uint8_t sample) {\r\n#ifdef TMP36_ADC1_CHANNEL\r\n  int32_t result = getADCHandleTemp(sample);\r\n  // S60 uses 10k NTC resistor\r\n  // For now not doing interpolation\r\n  for (uint32_t i = 0; i < (sizeof(NTCHandleLookup) / (2 * sizeof(uint16_t))); i++) {\r\n    if (result > NTCHandleLookup[(i * 2) + 0]) {\r\n      return NTCHandleLookup[(i * 2) + 1] * 10;\r\n    }\r\n  }\r\n  return 45 * 10;\r\n#else\r\n  return 0; // Not implemented\r\n#endif\r\n}\r\n\r\nuint16_t getInputVoltageX10(uint16_t divisor, uint8_t sample) {\r\n  // ADC maximum is 32767 == 3.3V at input == 28.05V at VIN\r\n  // Therefore we can divide down from there\r\n  // Multiplying ADC max by 4 for additional calibration options,\r\n  // ideal term is 467\r\n  uint32_t res = getADCVin(sample);\r\n  res *= 4;\r\n  res /= divisor;\r\n  return res;\r\n}\r\n\r\nstatic void switchToFastPWM(void) {\r\n  // 20Hz\r\n  totalPWM             = powerPWM + tempMeasureTicks + holdoffTicks;\r\n  htim2.Instance->ARR  = totalPWM;\r\n  htim2.Instance->CCR1 = powerPWM + holdoffTicks;\r\n  htim2.Instance->CCR4 = powerPWM;\r\n  htim2.Instance->PSC  = 1500;\r\n}\r\n\r\nvoid setTipPWM(const uint8_t pulse, const bool shouldUseFastModePWM) {\r\n  PWMSafetyTimer = 20; // This is decremented in the handler for PWM so that the tip pwm is\r\n                       // disabled if the PID task is not scheduled often enough.\r\n  pendingPWM = pulse;\r\n}\r\n// These are called by the HAL after the corresponding events from the system\r\n// timers.\r\n\r\nvoid HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {\r\n  // Period has elapsed\r\n  if (htim->Instance == TIM2) {\r\n    // we want to turn on the output again\r\n    PWMSafetyTimer--;\r\n    // We decrement this safety value so that lockups in the\r\n    // scheduler will not cause the PWM to become locked in an\r\n    // active driving state.\r\n    // While we could assume this could never happen, its a small price for\r\n    // increased safety\r\n    if (PWMSafetyTimer == 0) {\r\n      htim4.Instance->CCR3 = 0;\r\n    } else {\r\n      htim4.Instance->CCR3 = pendingPWM / 4;\r\n    }\r\n  } else if (htim->Instance == TIM1) {\r\n    // STM uses this for internal functions as a counter for timeouts\r\n    HAL_IncTick();\r\n  }\r\n}\r\n\r\nvoid HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) {\r\n  // This was a when the PWM for the output has timed out\r\n  if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_4) {\r\n    // HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_3);\r\n    htim4.Instance->CCR3 = 0;\r\n  }\r\n}\r\n\r\nvoid unstick_I2C() {\r\n#ifdef SCL_Pin\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  int              timeout     = 100;\r\n  int              timeout_cnt = 0;\r\n\r\n  // 1. Clear PE bit.\r\n  hi2c1.Instance->CR1 &= ~(0x0001);\r\n  /**I2C1 GPIO Configuration\r\n   PB6     ------> I2C1_SCL\r\n   PB7     ------> I2C1_SDA\r\n   */\r\n  //  2. Configure the SCL and SDA I/Os as General Purpose Output Open-Drain, High level (Write 1 to GPIOx_ODR).\r\n  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_OD;\r\n  GPIO_InitStruct.Pull  = GPIO_PULLUP;\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;\r\n\r\n  GPIO_InitStruct.Pin = SCL_Pin;\r\n  HAL_GPIO_Init(SCL_GPIO_Port, &GPIO_InitStruct);\r\n  HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_SET);\r\n\r\n  GPIO_InitStruct.Pin = SDA_Pin;\r\n  HAL_GPIO_Init(SDA_GPIO_Port, &GPIO_InitStruct);\r\n  HAL_GPIO_WritePin(SDA_GPIO_Port, SDA_Pin, GPIO_PIN_SET);\r\n\r\n  while (GPIO_PIN_SET != HAL_GPIO_ReadPin(SDA_GPIO_Port, SDA_Pin)) {\r\n    // Move clock to release I2C\r\n    HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_RESET);\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_SET);\r\n\r\n    timeout_cnt++;\r\n    if (timeout_cnt > timeout) {\r\n      return;\r\n    }\r\n  }\r\n\r\n  // 12. Configure the SCL and SDA I/Os as Alternate function Open-Drain.\r\n  GPIO_InitStruct.Mode  = GPIO_MODE_AF_OD;\r\n  GPIO_InitStruct.Pull  = GPIO_PULLUP;\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;\r\n\r\n  GPIO_InitStruct.Pin = SCL_Pin;\r\n  HAL_GPIO_Init(SCL_GPIO_Port, &GPIO_InitStruct);\r\n\r\n  GPIO_InitStruct.Pin = SDA_Pin;\r\n  HAL_GPIO_Init(SDA_GPIO_Port, &GPIO_InitStruct);\r\n\r\n  HAL_GPIO_WritePin(SCL_GPIO_Port, SCL_Pin, GPIO_PIN_SET);\r\n  HAL_GPIO_WritePin(SDA_GPIO_Port, SDA_Pin, GPIO_PIN_SET);\r\n\r\n  // 13. Set SWRST bit in I2Cx_CR1 register.\r\n  hi2c1.Instance->CR1 |= 0x8000;\r\n\r\n  asm(\"nop\");\r\n\r\n  // 14. Clear SWRST bit in I2Cx_CR1 register.\r\n  hi2c1.Instance->CR1 &= ~0x8000;\r\n\r\n  asm(\"nop\");\r\n\r\n  // 15. Enable the I2C peripheral by setting the PE bit in I2Cx_CR1 register\r\n  hi2c1.Instance->CR1 |= 0x0001;\r\n\r\n  // Call initialization function.\r\n  HAL_I2C_Init(&hi2c1);\r\n#endif\r\n}\r\n\r\nuint8_t getButtonA() { return HAL_GPIO_ReadPin(KEY_A_GPIO_Port, KEY_A_Pin) == GPIO_PIN_RESET ? 1 : 0; }\r\nuint8_t getButtonB() { return HAL_GPIO_ReadPin(KEY_B_GPIO_Port, KEY_B_Pin) == GPIO_PIN_RESET ? 1 : 0; }\r\n\r\nvoid BSPInit(void) { switchToFastPWM(); }\r\n\r\nvoid reboot() { NVIC_SystemReset(); }\r\n\r\nvoid delay_ms(uint16_t count) { HAL_Delay(count); }\r\n\r\nbool isTipDisconnected() {\r\n\r\n  uint16_t tipDisconnectedThres = TipThermoModel::getTipMaxInC() - 5;\r\n  uint32_t tipTemp              = TipThermoModel::getTipInC();\r\n  return tipTemp > tipDisconnectedThres;\r\n}\r\n\r\nvoid    setStatusLED(const enum StatusLED state) {}\r\nuint8_t preStartChecks() {\r\n#if POW_PD_EXT == 1\r\n  if (!hub238_has_run_selection() && (xTaskGetTickCount() < TICKS_SECOND * 5)) {\r\n    return 0;\r\n  }\r\n  // We check if we are in a \"Limited\" mode; where we have to run the PWM really fast\r\n  // Where as if we are on 9V for example, the tip resistance is enough\r\n  uint16_t voltage     = hub238_source_voltage();\r\n  uint16_t currentx100 = hub238_source_currentX100();\r\n#endif\r\n#if POW_PD_EXT == 2\r\n  if (!FS2711::has_run_selection() && (xTaskGetTickCount() < TICKS_SECOND * 5)) {\r\n    return 0;\r\n  }\r\n  uint16_t voltage     = FS2711::source_voltage();\r\n  uint16_t currentx100 = FS2711::source_currentx100();\r\n#endif\r\n\r\n  uint16_t thresholdResistancex10 = ((voltage * 1000) / currentx100) + 5;\r\n\r\n  if (getTipResistanceX10() <= thresholdResistancex10) {\r\n    // We are limited by resistance, not our current limiting, we can slow down PWM to avoid audible noise\r\n    htim4.Instance->PSC = 50; // 10 -> 500 removes audible noise\r\n  }\r\n\r\n  return 1; // We are done now\r\n}\r\nuint64_t getDeviceID() {\r\n  //\r\n  return HAL_GetUIDw0() | ((uint64_t)HAL_GetUIDw1() << 32);\r\n}\r\n\r\nuint8_t getTipResistanceX10() {\r\n#ifdef COPPER_HEATER_COIL\r\n\r\n  // TODO\r\n  //! Warning, must never return 0.\r\n  TemperatureType_t measuredTemperature = TipThermoModel::getTipInC(false);\r\n  if (measuredTemperature < 25) {\r\n    return 50; // Start assuming under spec to soft-start\r\n  }\r\n\r\n  // Assuming a temperature rise of 0.00393 per deg c over 20C\r\n\r\n  uint32_t scaler = 393 * (measuredTemperature - 20);\r\n\r\n  return TIP_RESISTANCE + ((TIP_RESISTANCE * scaler) / 100000);\r\n#else\r\n  uint8_t user_selected_tip = getUserSelectedTipResistance();\r\n  if (user_selected_tip == 0) {\r\n    return TIP_RESISTANCE; // Auto mode\r\n  }\r\n  return user_selected_tip;\r\n#endif\r\n}\r\nbool    isTipShorted() { return false; }\r\nuint8_t preStartChecksDone() { return 1; }\r\n\r\nuint16_t getTipThermalMass() { return TIP_THERMAL_MASS; }\r\nuint16_t getTipInertia() { return TIP_THERMAL_INERTIA; }\r\n\r\nvoid setBuzzer(bool on) {}\r\n\r\nvoid showBootLogo(void) { BootLogo::handleShowingLogo((uint8_t *)FLASH_LOGOADDR); }\r\n\r\n#ifdef CUSTOM_MAX_TEMP_C\r\nTemperatureType_t getCustomTipMaxInC() { return MAX_TEMP_C; }\r\n#endif\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/FreeRTOSConfig.h",
    "content": "/*\r\n FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd.\r\n All rights reserved\r\n\r\n VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.\r\n\r\n This file is part of the FreeRTOS distribution.\r\n\r\n FreeRTOS is free software; you can redistribute it and/or modify it under\r\n the terms of the GNU General Public License (version 2) as published by the\r\n Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.\r\n\r\n ***************************************************************************\r\n >>!   NOTE: The modification to the GPL is included to allow you to     !<<\r\n >>!   distribute a combined work that includes FreeRTOS without being   !<<\r\n >>!   obliged to provide the source code for proprietary components     !<<\r\n >>!   outside of the FreeRTOS kernel.                                   !<<\r\n ***************************************************************************\r\n\r\n FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY\r\n WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\r\n FOR A PARTICULAR PURPOSE.  Full license text is available on the following\r\n link: http://www.freertos.org/a00114.html\r\n\r\n ***************************************************************************\r\n *                                                                       *\r\n *    FreeRTOS provides completely free yet professionally developed,    *\r\n *    robust, strictly quality controlled, supported, and cross          *\r\n *    platform software that is more than just the market leader, it     *\r\n *    is the industry's de facto standard.                               *\r\n *                                                                       *\r\n *    Help yourself get started quickly while simultaneously helping     *\r\n *    to support the FreeRTOS project by purchasing a FreeRTOS           *\r\n *    tutorial book, reference manual, or both:                          *\r\n *    http://www.FreeRTOS.org/Documentation                              *\r\n *                                                                       *\r\n ***************************************************************************\r\n\r\n http://www.FreeRTOS.org/FAQHelp.html - Having a problem?  Start by reading\r\n the FAQ page \"My application does not run, what could be wrong?\".  Have you\r\n defined configASSERT()?\r\n\r\n http://www.FreeRTOS.org/support - In return for receiving this top quality\r\n embedded software for free we request you assist our global community by\r\n participating in the support forum.\r\n\r\n http://www.FreeRTOS.org/training - Investing in training allows your team to\r\n be as productive as possible as early as possible.  Now you can receive\r\n FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers\r\n Ltd, and the world's leading authority on the world's leading RTOS.\r\n\r\n http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,\r\n including FreeRTOS+Trace - an indispensable productivity tool, a DOS\r\n compatible FAT file system, and our tiny thread aware UDP/IP stack.\r\n\r\n http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate.\r\n Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS.\r\n\r\n http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High\r\n Integrity Systems ltd. to sell under the OpenRTOS brand.  Low cost OpenRTOS\r\n licenses offer ticketed support, indemnification and commercial middleware.\r\n\r\n http://www.SafeRTOS.com - High Integrity Systems also provide a safety\r\n engineered and independently SIL3 certified version for use in safety and\r\n mission critical applications that require provable dependability.\r\n\r\n 1 tab == 4 spaces!\r\n */\r\n\r\n#ifndef FREERTOS_CONFIG_H\r\n#define FREERTOS_CONFIG_H\r\n\r\n/*-----------------------------------------------------------\r\n * Application specific definitions.\r\n *\r\n * These definitions should be adjusted for your particular hardware and\r\n * application requirements.\r\n *\r\n * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE\r\n * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r\n *\r\n * See http://www.freertos.org/a00110.html.\r\n *----------------------------------------------------------*/\r\n\r\n/* USER CODE BEGIN Includes */\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n/* USER CODE END Includes */\r\n\r\n/* Ensure stdint is only used by the compiler, and not the assembler. */\r\n#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)\r\n#include <stdint.h>\r\nextern uint32_t SystemCoreClock;\r\n#endif\r\n\r\n#define configUSE_PREEMPTION                    1\r\n#define configSUPPORT_STATIC_ALLOCATION         1\r\n#define configSUPPORT_DYNAMIC_ALLOCATION        0\r\n#define configUSE_IDLE_HOOK                     1\r\n#define configUSE_TICK_HOOK                     0\r\n#define configCPU_CLOCK_HZ                      (SystemCoreClock)\r\n#define configTICK_RATE_HZ                      (1000)\r\n#define configMAX_PRIORITIES                    (7)\r\n#define configMINIMAL_STACK_SIZE                ((uint16_t)256)\r\n#define configTOTAL_HEAP_SIZE                   ((size_t)1024 * 14) /*Currently use about 9000*/\r\n#define configMAX_TASK_NAME_LEN                 (32)\r\n#define configUSE_MUTEXES                       1\r\n#define configQUEUE_REGISTRY_SIZE               8\r\n#define configUSE_TIMERS                        0\r\n#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1\r\n#define configCHECK_FOR_STACK_OVERFLOW          2 /*Bump this to 2 during development and bug hunting*/\r\n#define configTICK_TYPE_WIDTH_IN_BITS           TICK_TYPE_WIDTH_32_BITS\r\n\r\n/* Co-routine definitions. */\r\n#define configUSE_CO_ROUTINES           0\r\n#define configMAX_CO_ROUTINE_PRIORITIES (2)\r\n\r\n/* Set the following definitions to 1 to include the API function, or zero\r\n to exclude the API function. */\r\n#define INCLUDE_vTaskPrioritySet            1\r\n#define INCLUDE_uxTaskPriorityGet           0\r\n#define INCLUDE_vTaskDelete                 0\r\n#define INCLUDE_vTaskCleanUpResources       0\r\n#define INCLUDE_vTaskSuspend                0\r\n#define INCLUDE_vTaskDelayUntil             1\r\n#define INCLUDE_vTaskDelay                  1\r\n#define INCLUDE_xTaskGetSchedulerState      1\r\n#define INCLUDE_uxTaskGetStackHighWaterMark 1\r\n\r\n/* Cortex-M specific definitions. */\r\n#ifdef __NVIC_PRIO_BITS\r\n/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */\r\n#define configPRIO_BITS __NVIC_PRIO_BITS\r\n#else\r\n#define configPRIO_BITS 4\r\n#endif\r\n\r\n/* The lowest interrupt priority that can be used in a call to a \"set priority\"\r\n function. */\r\n#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15\r\n\r\n/* The highest interrupt priority that can be used by any interrupt service\r\n routine that makes calls to interrupt safe FreeRTOS API functions.  DO NOT CALL\r\n INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER\r\n PRIORITY THAN THIS! (higher priorities are lower numeric values. */\r\n#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5\r\n\r\n/* Interrupt priorities used by the kernel port layer itself.  These are generic\r\n to all Cortex-M ports, and do not rely on any particular library functions. */\r\n#define configKERNEL_INTERRUPT_PRIORITY (configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))\r\n/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!\r\n See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */\r\n#define configMAX_SYSCALL_INTERRUPT_PRIORITY (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))\r\n\r\n/* Normal assert() semantics without relying on the provision of an assert.h\r\n header file. */\r\n/* USER CODE BEGIN 1 */\r\n#define configASSERT(x)                                                                                                                                                                                \\\r\n  if ((x) == 0) {                                                                                                                                                                                      \\\r\n    taskDISABLE_INTERRUPTS();                                                                                                                                                                          \\\r\n    for (;;)                                                                                                                                                                                           \\\r\n      ;                                                                                                                                                                                                \\\r\n  }\r\n/* USER CODE END 1 */\r\n\r\n/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS\r\n standard names. */\r\n#define vPortSVCHandler    SVC_Handler\r\n#define xPortPendSVHandler PendSV_Handler\r\n\r\n#if configUSE_TIMERS\r\n#define configTIMER_TASK_PRIORITY    2\r\n#define configTIMER_QUEUE_LENGTH     8\r\n#define configTIMER_TASK_STACK_DEPTH (512 / 4)\r\n#endif\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n#endif /* FREERTOS_CONFIG_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/IRQ.cpp",
    "content": "/*\r\n * IRQ.c\r\n *\r\n *  Created on: 30 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"IRQ.h\"\r\n#include \"Pins.h\"\r\n#include \"configuration.h\"\r\n\r\n/*\r\n * Catch the IRQ that says that the conversion is done on the temperature\r\n * readings coming in Once these have come in we can unblock the PID so that it\r\n * runs again\r\n */\r\nvoid HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc) {\r\n  BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r\n  if (hadc == &hadc1) {\r\n    if (pidTaskNotification) {\r\n      vTaskNotifyGiveFromISR(pidTaskNotification, &xHigherPriorityTaskWoken);\r\n      portYIELD_FROM_ISR(xHigherPriorityTaskWoken);\r\n    }\r\n  }\r\n}\r\n\r\nextern osThreadId POWTaskHandle;\r\n\r\nvoid HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {\r\n  (void)GPIO_Pin;\r\n  // Notify POW thread that an irq occured\r\n  if (POWTaskHandle != nullptr) {\r\n    BaseType_t xHigherPriorityTaskWoken = pdFALSE;\r\n    xTaskNotifyFromISR(POWTaskHandle, 1, eSetBits, &xHigherPriorityTaskWoken);\r\n    /* Force a context switch if xHigherPriorityTaskWoken is now set to pdTRUE.\r\n    The macro used to do this is dependent on the port and may be called\r\n    portEND_SWITCHING_ISR. */\r\n    portYIELD_FROM_ISR(xHigherPriorityTaskWoken);\r\n  }\r\n}\r\n\r\n// No FUSB302 support\r\nbool getFUS302IRQLow() { return false; }"
  },
  {
    "path": "source/Core/BSP/Sequre/IRQ.h",
    "content": "/*\r\n * Irqs.h\r\n *\r\n *  Created on: 30 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_MINIWARE_IRQ_H_\r\n#define BSP_MINIWARE_IRQ_H_\r\n\r\n#include \"BSP.h\"\r\n#include \"I2C_Wrapper.hpp\"\r\n#include \"Setup.h\"\r\n#include \"main.hpp\"\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\nvoid HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc);\r\nvoid HAL_GPIO_EXTI_Callback(uint16_t);\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n#endif /* BSP_MINIWARE_IRQ_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Pins.h",
    "content": "/*\r\n * Pins.h\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_MINIWARE_PINS_H_\r\n#define BSP_MINIWARE_PINS_H_\r\n#include \"configuration.h\"\r\n\r\n#ifdef MODEL_S60\r\n\r\n#define KEY_B_Pin             GPIO_PIN_1\r\n#define KEY_B_GPIO_Port       GPIOB\r\n#define TMP36_INPUT_Pin       GPIO_PIN_5\r\n#define TMP36_INPUT_GPIO_Port GPIOA\r\n#define TMP36_ADC1_CHANNEL    ADC_CHANNEL_5\r\n#define TMP36_ADC2_CHANNEL    ADC_CHANNEL_5\r\n#define TIP_TEMP_Pin          GPIO_PIN_0\r\n#define TIP_TEMP_GPIO_Port    GPIOA\r\n#define TIP_TEMP_ADC1_CHANNEL ADC_CHANNEL_0\r\n#define TIP_TEMP_ADC2_CHANNEL ADC_CHANNEL_0\r\n#define VIN_Pin               GPIO_PIN_4\r\n#define VIN_GPIO_Port         GPIOA\r\n#define VIN_ADC1_CHANNEL      ADC_CHANNEL_4\r\n#define VIN_ADC2_CHANNEL      ADC_CHANNEL_4\r\n#define KEY_A_Pin             GPIO_PIN_0\r\n#define KEY_A_GPIO_Port       GPIOB\r\n#define PWM_Out_Pin           GPIO_PIN_8\r\n#define PWM_Out_GPIO_Port     GPIOB\r\n#define PWM_Out_CHANNEL       TIM_CHANNEL_3 // Timer 4; channel 3\r\n#define SCL2_Pin              GPIO_PIN_6\r\n#define SCL2_GPIO_Port        GPIOB\r\n#define SDA2_Pin              GPIO_PIN_7\r\n#define SDA2_GPIO_Port        GPIOB\r\n// Pin gets pulled high on movement\r\n#define MOVEMENT_Pin       GPIO_PIN_3\r\n#define MOVEMENT_GPIO_Port GPIOA\r\n\r\n#endif\r\n\r\n#ifdef MODEL_S60P\r\n\r\n#define KEY_B_Pin             GPIO_PIN_1\r\n#define KEY_B_GPIO_Port       GPIOB\r\n#define TMP36_INPUT_Pin       GPIO_PIN_5\r\n#define TMP36_INPUT_GPIO_Port GPIOA\r\n#define TMP36_ADC1_CHANNEL    ADC_CHANNEL_5\r\n#define TMP36_ADC2_CHANNEL    ADC_CHANNEL_5\r\n#define TIP_TEMP_Pin          GPIO_PIN_0\r\n#define TIP_TEMP_GPIO_Port    GPIOA\r\n#define TIP_TEMP_ADC1_CHANNEL ADC_CHANNEL_0\r\n#define TIP_TEMP_ADC2_CHANNEL ADC_CHANNEL_0\r\n#define VIN_Pin               GPIO_PIN_4\r\n#define VIN_GPIO_Port         GPIOA\r\n#define VIN_ADC1_CHANNEL      ADC_CHANNEL_4\r\n#define VIN_ADC2_CHANNEL      ADC_CHANNEL_4\r\n#define KEY_A_Pin             GPIO_PIN_0\r\n#define KEY_A_GPIO_Port       GPIOB\r\n#define PWM_Out_Pin           GPIO_PIN_8\r\n#define PWM_Out_GPIO_Port     GPIOB\r\n#define PWM_Out_CHANNEL       TIM_CHANNEL_3 // Timer 4; channel 3\r\n#define SCL2_Pin              GPIO_PIN_6\r\n#define SCL2_GPIO_Port        GPIOB\r\n#define SDA2_Pin              GPIO_PIN_7\r\n#define SDA2_GPIO_Port        GPIOB\r\n// Pin gets pulled high on movement\r\n#define MOVEMENT_Pin       GPIO_PIN_3\r\n#define MOVEMENT_GPIO_Port GPIOA\r\n\r\n#endif // MODEL_S60P\r\n\r\n#ifdef MODEL_T55\r\n\r\n#define KEY_A_Pin       GPIO_PIN_1\r\n#define KEY_A_GPIO_Port GPIOB\r\n// No cold junction compensation as its a PT1000\r\n#define TIP_TEMP_Pin          GPIO_PIN_5\r\n#define TIP_TEMP_GPIO_Port    GPIOA\r\n#define TIP_TEMP_ADC1_CHANNEL ADC_CHANNEL_5\r\n#define TIP_TEMP_ADC2_CHANNEL ADC_CHANNEL_5\r\n\r\n#define VIN_Pin          GPIO_PIN_4\r\n#define VIN_GPIO_Port    GPIOA\r\n#define VIN_ADC1_CHANNEL ADC_CHANNEL_4\r\n#define VIN_ADC2_CHANNEL ADC_CHANNEL_4\r\n#define KEY_B_Pin        GPIO_PIN_0\r\n#define KEY_B_GPIO_Port  GPIOB\r\n\r\n#define PWM_Out_Pin       GPIO_PIN_8\r\n#define PWM_Out_GPIO_Port GPIOB\r\n#define PWM_Out_CHANNEL   TIM_CHANNEL_3 // Timer 4; channel 3\r\n#define SCL2_Pin          GPIO_PIN_6\r\n#define SCL2_GPIO_Port    GPIOB\r\n#define SDA2_Pin          GPIO_PIN_7\r\n#define SDA2_GPIO_Port    GPIOB\r\n\r\n#endif // MODEL_T55\r\n\r\n#endif /* BSP_MINIWARE_PINS_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Power.cpp",
    "content": "#include \"BSP.h\"\n#include \"BSP_Power.h\"\n#include \"Pins.h\"\n#include \"QC3.h\"\n#include \"Settings.h\"\n#include \"USBPD.h\"\n#include \"configuration.h\"\n\nvoid power_check() {\n#ifdef POW_PD\n  // Cant start QC until either PD works or fails\n  if (!USBPowerDelivery::negotiationComplete()) {\n    return;\n  }\n  if (USBPowerDelivery::negotiationHasWorked()) {\n    return; // We are using PD\n  }\n#endif\n#ifdef POW_QC\n  QC_resync();\n#endif\n}\n\nbool getIsPoweredByDCIN() { return false; }\n"
  },
  {
    "path": "source/Core/BSP/Sequre/README.md",
    "content": "# BSP section for STM32F103 based Miniware products\r\n\r\nThis folder contains the hardware abstractions required for the TS100, TS80 and probably TS80P soldering irons.\r\n\r\n## Main abstractions\r\n\r\n* Hardware Init\r\n* -> Should contain all bootstrap to bring the hardware up to an operating point\r\n* -> Two functions are required, a pre and post FreeRToS call\r\n* I2C read/write\r\n* Set PWM for the tip\r\n* Links between IRQ's on the system and the calls in the rest of the firmware\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Setup.cpp",
    "content": "/*\n * Setup.c\n *\n *  Created on: 29Aug.,2017\n *      Author: Ben V. Brown\n */\n#include \"Setup.h\"\n#include \"BSP.h\"\n#include \"Pins.h\"\n#include \"history.hpp\"\n#include <stdint.h>\n#include <string.h>\nADC_HandleTypeDef hadc1;\nADC_HandleTypeDef hadc2;\nDMA_HandleTypeDef hdma_adc1;\n\nIWDG_HandleTypeDef hiwdg;\nTIM_HandleTypeDef  htim4; // Tip control\nTIM_HandleTypeDef  htim2; // ADC Scheduling\n#define ADC_FILTER_LEN 4\n#define ADC_SAMPLES    16\nuint16_t ADCReadings[ADC_SAMPLES]; // Used to store the adc readings for the handle cold junction temp\n\n// Functions\nstatic void SystemClock_Config(void);\nstatic void MX_ADC1_Init(void);\nstatic void MX_IWDG_Init(void);\nstatic void MX_TIM4_Init(void); // Tip control\nstatic void MX_TIM2_Init(void); // ADC Scheduling\nstatic void MX_DMA_Init(void);\nstatic void MX_GPIO_Init(void);\nstatic void MX_ADC2_Init(void);\nvoid        Setup_HAL() {\n  __HAL_RCC_I2C1_CLK_DISABLE();\n  __HAL_RCC_GPIOD_CLK_DISABLE();\n  __HAL_RCC_GPIOA_CLK_DISABLE();\n  __HAL_RCC_GPIOB_CLK_DISABLE();\n  SystemClock_Config();\n\n  // These are not shared so no harm enabling\n  __HAL_AFIO_REMAP_SWJ_NOJTAG();\n  MX_GPIO_Init();\n  MX_DMA_Init();\n  MX_ADC1_Init();\n  MX_ADC2_Init();\n\n  MX_TIM4_Init();\n  MX_TIM2_Init();\n  MX_IWDG_Init();\n  HAL_ADC_Start_DMA(&hadc1, (uint32_t *)ADCReadings, (ADC_SAMPLES)); // start DMA of normal readings\n  HAL_ADCEx_InjectedStart(&hadc1);                                   // enable injected readings\n  HAL_ADCEx_InjectedStart(&hadc2);                                   // enable injected readings\n\n// Setup movement pin\n#ifdef MOVEMENT_Pin\n  {\n    GPIO_InitTypeDef GPIO_InitStruct;\n    GPIO_InitStruct.Pin   = MOVEMENT_Pin;\n    GPIO_InitStruct.Mode  = GPIO_MODE_INPUT;\n    GPIO_InitStruct.Pull  = GPIO_PULLDOWN;\n    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;\n    HAL_GPIO_Init(MOVEMENT_GPIO_Port, &GPIO_InitStruct);\n  }\n#endif\n}\n\nuint16_t getADCHandleTemp(uint8_t sample) {\n#ifdef TMP36_ADC1_CHANNEL\n  static history<uint16_t, ADC_FILTER_LEN> filter = {{0}, 0, 0};\n  if (sample) {\n    uint32_t sum = 0;\n    for (uint8_t i = 0; i < ADC_SAMPLES; i++) {\n      sum += ADCReadings[i];\n    }\n    filter.update(sum);\n  }\n  return filter.average() >> 1;\n#else\n  return 0;\n#endif\n}\n\nuint16_t getADCVin(uint8_t sample) {\n  static history<uint16_t, ADC_FILTER_LEN> filter = {{0}, 0, 0};\n  if (sample) {\n    uint16_t latestADC = 0;\n\n    latestADC += hadc2.Instance->JDR1;\n    latestADC += hadc2.Instance->JDR2;\n    latestADC += hadc2.Instance->JDR3;\n    latestADC += hadc2.Instance->JDR4;\n    latestADC <<= 3;\n    filter.update(latestADC);\n  }\n  return filter.average();\n}\n// Returns either average or instant value. When sample is set the samples from the injected ADC are copied to the filter and then the raw reading is returned\nuint16_t getTipRawTemp(uint8_t sample) {\n  static history<uint16_t, ADC_FILTER_LEN> filter = {{0}, 0, 0};\n  if (sample) {\n    uint16_t latestADC = 0;\n\n    latestADC += hadc1.Instance->JDR1;\n    latestADC += hadc1.Instance->JDR2;\n    latestADC += hadc1.Instance->JDR3;\n    latestADC += hadc1.Instance->JDR4;\n    latestADC <<= 1;\n    filter.update(latestADC);\n    return latestADC;\n  }\n  return filter.average();\n}\n/** System Clock Configuration\n */\nvoid SystemClock_Config(void) {\n  RCC_OscInitTypeDef       RCC_OscInitStruct;\n  RCC_ClkInitTypeDef       RCC_ClkInitStruct;\n  RCC_PeriphCLKInitTypeDef PeriphClkInit;\n\n  /**Initializes the CPU, AHB and APB busses clocks\n   */\n  RCC_OscInitStruct.OscillatorType      = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSI;\n  RCC_OscInitStruct.HSIState            = RCC_HSI_ON;\n  RCC_OscInitStruct.HSICalibrationValue = 16;\n  RCC_OscInitStruct.LSIState            = RCC_LSI_ON;\n  RCC_OscInitStruct.PLL.PLLState        = RCC_PLL_ON;\n  RCC_OscInitStruct.PLL.PLLSource       = RCC_PLLSOURCE_HSI_DIV2;\n  RCC_OscInitStruct.PLL.PLLMUL          = RCC_PLL_MUL16; // 64MHz\n  HAL_RCC_OscConfig(&RCC_OscInitStruct);\n\n  /**Initializes the CPU, AHB and APB busses clocks\n   */\n  RCC_ClkInitStruct.ClockType      = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;\n  RCC_ClkInitStruct.SYSCLKSource   = RCC_SYSCLKSOURCE_PLLCLK;\n  RCC_ClkInitStruct.AHBCLKDivider  = RCC_SYSCLK_DIV1;\n  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV16; // TIM\n                                                     // 2,3,4,5,6,7,12,13,14\n  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;  // 64 mhz to some peripherals and adc\n\n  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);\n\n  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;\n  PeriphClkInit.AdcClockSelection    = RCC_ADCPCLK2_DIV6; // 6 or 8 are the only non overclocked options\n  HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);\n\n  /**Configure the Systick interrupt time\n   */\n  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);\n\n  /**Configure the Systick\n   */\n  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);\n\n  /* SysTick_IRQn interrupt configuration */\n  HAL_NVIC_SetPriority(SysTick_IRQn, 15, 0);\n}\n\n/* ADC1 init function */\nstatic void MX_ADC1_Init(void) {\n\n  ADC_ChannelConfTypeDef   sConfig;\n  ADC_InjectionConfTypeDef sConfigInjected;\n  /**Common config\n   */\n  hadc1.Instance                   = ADC1;\n  hadc1.Init.ScanConvMode          = ADC_SCAN_ENABLE;\n  hadc1.Init.ContinuousConvMode    = ENABLE;\n  hadc1.Init.DiscontinuousConvMode = DISABLE;\n  hadc1.Init.ExternalTrigConv      = ADC_SOFTWARE_START;\n  hadc1.Init.DataAlign             = ADC_DATAALIGN_RIGHT;\n  hadc1.Init.NbrOfConversion       = 1;\n  HAL_ADC_Init(&hadc1);\n\n/**Configure Regular Channel\n */\n#ifdef TMP36_ADC1_CHANNEL\n  sConfig.Channel      = TMP36_ADC1_CHANNEL;\n  sConfig.Rank         = ADC_REGULAR_RANK_1;\n  sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;\n  HAL_ADC_ConfigChannel(&hadc1, &sConfig);\n#else\n  sConfig.Channel      = VIN_ADC1_CHANNEL; // Filler\n  sConfig.Rank         = ADC_REGULAR_RANK_1;\n  sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;\n  HAL_ADC_ConfigChannel(&hadc1, &sConfig);\n#endif\n  /**Configure Injected Channel\n   */\n  // F in = 10.66 MHz\n  /*\n   * Injected time is 1 delay clock + (12 adc cycles*4)+4*sampletime =~217\n   * clocks = 0.2ms Charge time is 0.016 uS ideally So Sampling time must be >=\n   * 0.016uS 1/10.66MHz is 0.09uS, so 1 CLK is *should* be enough\n   * */\n  sConfigInjected.InjectedChannel               = TIP_TEMP_ADC1_CHANNEL;\n  sConfigInjected.InjectedRank                  = 1;\n  sConfigInjected.InjectedNbrOfConversion       = 4;\n  sConfigInjected.InjectedSamplingTime          = ADC_SAMPLETIME_28CYCLES_5;\n  sConfigInjected.ExternalTrigInjecConv         = ADC_EXTERNALTRIGINJECCONV_T2_TRGO;\n  sConfigInjected.AutoInjectedConv              = DISABLE;\n  sConfigInjected.InjectedDiscontinuousConvMode = DISABLE;\n  sConfigInjected.InjectedOffset                = 0;\n\n  HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected);\n  sConfigInjected.InjectedRank = 2;\n  HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected);\n  sConfigInjected.InjectedRank = 3;\n  HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected);\n  sConfigInjected.InjectedRank = 4;\n  HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected);\n  SET_BIT(hadc1.Instance->CR1, (ADC_CR1_JEOCIE)); // Enable end of injected conv irq\n  // Run ADC internal calibration\n  while (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK) {\n    ;\n  }\n}\n\n/* ADC2 init function */\nstatic void MX_ADC2_Init(void) {\n  ADC_InjectionConfTypeDef sConfigInjected;\n\n  /**Common config\n   */\n  hadc2.Instance                   = ADC2;\n  hadc2.Init.ScanConvMode          = ADC_SCAN_DISABLE;\n  hadc2.Init.ContinuousConvMode    = ENABLE;\n  hadc2.Init.DiscontinuousConvMode = DISABLE;\n  hadc2.Init.ExternalTrigConv      = ADC_SOFTWARE_START;\n  hadc2.Init.DataAlign             = ADC_DATAALIGN_RIGHT;\n  hadc2.Init.NbrOfConversion       = 0;\n  HAL_ADC_Init(&hadc2);\n\n  /**Configure Injected Channel\n   */\n  sConfigInjected.InjectedChannel               = VIN_ADC2_CHANNEL;\n  sConfigInjected.InjectedRank                  = ADC_INJECTED_RANK_1;\n  sConfigInjected.InjectedNbrOfConversion       = 4;\n  sConfigInjected.InjectedSamplingTime          = ADC_SAMPLETIME_28CYCLES_5;\n  sConfigInjected.ExternalTrigInjecConv         = ADC_EXTERNALTRIGINJECCONV_T2_TRGO;\n  sConfigInjected.AutoInjectedConv              = DISABLE;\n  sConfigInjected.InjectedDiscontinuousConvMode = DISABLE;\n  sConfigInjected.InjectedOffset                = 0;\n  HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected);\n  sConfigInjected.InjectedRank = ADC_INJECTED_RANK_2;\n  HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected);\n  sConfigInjected.InjectedRank = ADC_INJECTED_RANK_3;\n  HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected);\n  sConfigInjected.InjectedRank = ADC_INJECTED_RANK_4;\n  HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected);\n\n  // Run ADC internal calibration\n  while (HAL_ADCEx_Calibration_Start(&hadc2) != HAL_OK) {\n    ;\n  }\n}\n\n/* IWDG init function */\nstatic void MX_IWDG_Init(void) {\n  hiwdg.Instance       = IWDG;\n  hiwdg.Init.Prescaler = IWDG_PRESCALER_256;\n  hiwdg.Init.Reload    = 2048;\n#ifndef SWD_ENABLE\n  HAL_IWDG_Init(&hiwdg);\n#endif\n}\n\nstatic void MX_TIM4_Init(void) {\n  /*\n   * On Sequre devies we run the output PWM as fast as possible due to the low tip resistance + no inductor for filtering.\n   * So we run it as fast as we can and hope that the caps filter out the current spikes.\n   * */\n  TIM_ClockConfigTypeDef  sClockSourceConfig;\n  TIM_MasterConfigTypeDef sMasterConfig;\n  TIM_OC_InitTypeDef      sConfigOC;\n  memset(&sConfigOC, 0, sizeof(sConfigOC));\n\n  htim4.Instance = TIM4;\n  // dummy value, will be reconfigured by BSPInit()\n  htim4.Init.Prescaler = 10; // 2 MHz timer clock/10 = 200 kHz tick rate\n\n  htim4.Init.CounterMode = TIM_COUNTERMODE_UP;\n  htim4.Init.Period      = 64;\n\n  htim4.Init.ClockDivision     = TIM_CLOCKDIVISION_DIV1; // 8 MHz (x2 APB1) before divide\n  htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;\n  htim4.Init.RepetitionCounter = 0;\n  HAL_TIM_Base_Init(&htim4);\n\n  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;\n  HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig);\n  HAL_TIM_PWM_Init(&htim4);\n  HAL_TIM_OC_Init(&htim4);\n\n  sConfigOC.OCMode = TIM_OCMODE_PWM1;\n\n  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;\n  sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;\n  sConfigOC.Pulse      = 0; // default to entirely off\n  HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, PWM_Out_CHANNEL);\n\n  GPIO_InitTypeDef GPIO_InitStruct;\n  GPIO_InitStruct.Pin   = PWM_Out_Pin;\n  GPIO_InitStruct.Mode  = GPIO_MODE_AF_PP;\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // We would like sharp rising edges\n  HAL_GPIO_Init(PWM_Out_GPIO_Port, &GPIO_InitStruct);\n\n  // HAL_NVIC_SetPriority(TIM4_IRQn, 15, 0);\n  // HAL_NVIC_EnableIRQ(TIM4_IRQn);\n\n  HAL_TIM_Base_Start(&htim4);\n  HAL_TIM_PWM_Start(&htim4, PWM_Out_CHANNEL);\n}\n///////////////////\nstatic void MX_TIM2_Init(void) {\n  /*\n   * We use the channel 1 to trigger the ADC at end of PWM period\n   * And we use the channel 4 as the PWM modulation source using Interrupts\n   * */\n  TIM_ClockConfigTypeDef  sClockSourceConfig;\n  TIM_MasterConfigTypeDef sMasterConfig;\n  TIM_OC_InitTypeDef      sConfigOC;\n  memset(&sConfigOC, 0, sizeof(sConfigOC));\n  memset(&sClockSourceConfig, 0, sizeof(sClockSourceConfig));\n  memset(&sMasterConfig, 0, sizeof(sMasterConfig));\n\n  // Timer 2 is fairly slow as its being used to run the PWM and trigger the ADC\n  // in the PWM off time.\n  htim2.Instance = TIM2;\n  // dummy value, will be reconfigured by BSPInit()\n  htim2.Init.Prescaler = 2000; // 2 MHz timer clock/2000 = 1 kHz tick rate\n\n  // pwm out is 10k from tim3, we want to run our PWM at around 10hz or slower on the output stage\n  // These values give a rate of around 3.5 Hz for \"fast\" mode and 1.84 Hz for \"slow\"\n  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;\n  // dummy value, will be reconfigured by BSPInit()\n  htim2.Init.Period = powerPWM + 14 * 2;\n\n  htim2.Init.ClockDivision     = TIM_CLOCKDIVISION_DIV4; // 8 MHz (x2 APB1) before divide\n  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;\n  htim2.Init.RepetitionCounter = 0;\n  HAL_TIM_Base_Init(&htim2);\n\n  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;\n  HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig);\n\n  HAL_TIM_PWM_Init(&htim2);\n  HAL_TIM_OC_Init(&htim2);\n\n  sMasterConfig.MasterOutputTrigger = TIM_TRGO_OC1;\n  sMasterConfig.MasterSlaveMode     = TIM_MASTERSLAVEMODE_DISABLE;\n  HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);\n\n  sConfigOC.OCMode = TIM_OCMODE_PWM1;\n  // dummy value, will be reconfigured by BSPInit() in the BSP.cpp\n  sConfigOC.Pulse = powerPWM + 14; // 13 -> Delay of 7 ms\n  // 255 is the largest time period of the drive signal, and then offset ADC sample to be a bit delayed after this\n  /*\n   * It takes 4 milliseconds for output to be stable after PWM turns off.\n   * Assume ADC samples in 0.5ms\n   * We need to set this to 100% + 4.5ms\n   * */\n  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;\n  sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;\n  HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1); // ADC Triggers\n\n  sConfigOC.Pulse = powerPWM; // Power PWM cycle time\n\n  HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4); // Output triggers\n\n  HAL_TIM_Base_Start_IT(&htim2);\n  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);\n  HAL_TIM_PWM_Start_IT(&htim2, TIM_CHANNEL_4);\n\n  HAL_NVIC_SetPriority(TIM2_IRQn, 15, 0);\n  HAL_NVIC_EnableIRQ(TIM2_IRQn);\n}\n/**\n * Enable DMA controller clock\n */\nstatic void MX_DMA_Init(void) {\n  /* DMA controller clock enable */\n  __HAL_RCC_DMA1_CLK_ENABLE();\n\n  /* DMA interrupt init */\n  /* DMA1_Channel1_IRQn interrupt configuration */\n  HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 5, 0);\n  HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);\n  /* DMA1_Channel6_IRQn interrupt configuration */\n  HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 5, 0);\n  HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn);\n  /* DMA1_Channel7_IRQn interrupt configuration */\n  HAL_NVIC_SetPriority(DMA1_Channel7_IRQn, 5, 0);\n  HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn);\n}\n\n/** Configure pins as\n * Analog\n * Input\n * Output\n * EVENT_OUT\n * EXTI\n * Free pins are configured automatically as Analog\n PB0   ------> ADCx_IN8\n PB1   ------> ADCx_IN9\n */\nstatic void MX_GPIO_Init(void) {\n  GPIO_InitTypeDef GPIO_InitStruct;\n\n  /* GPIO Ports Clock Enable */\n  __HAL_RCC_GPIOD_CLK_ENABLE();\n  __HAL_RCC_GPIOA_CLK_ENABLE();\n  __HAL_RCC_GPIOB_CLK_ENABLE();\n\n  /*Configure peripheral I/O remapping */\n  __HAL_AFIO_REMAP_PD01_ENABLE();\n  //^ remap XTAL so that pins can be analog (all input buffers off).\n  // reduces power consumption\n\n  /*\n   * Configure All pins as analog by default\n   */\n  GPIO_InitStruct.Pin  = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_15;\n  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;\n  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);\n  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 |\n                        GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;\n  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);\n\n  /*Configure GPIO pins : KEY_B_Pin KEY_A_Pin */\n  GPIO_InitStruct.Pin  = KEY_B_Pin | KEY_A_Pin;\n  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;\n  GPIO_InitStruct.Pull = GPIO_PULLUP;\n  HAL_GPIO_Init(KEY_B_GPIO_Port, &GPIO_InitStruct);\n}\n#ifdef USE_FULL_ASSERT\nvoid assert_failed(uint8_t *file, uint32_t line) { asm(\"bkpt\"); }\n#endif\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Setup.h",
    "content": "/*\r\n * Setup.h\r\n *\r\n *  Created on: 29Aug.,2017\r\n *      Author: Ben V. Brown\r\n */\r\n\r\n#ifndef SETUP_H_\r\n#define SETUP_H_\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n#include \"stm32f1xx_hal.h\"\r\n\r\nextern ADC_HandleTypeDef hadc1;\r\nextern ADC_HandleTypeDef hadc2;\r\nextern DMA_HandleTypeDef hdma_adc1;\r\n\r\nextern IWDG_HandleTypeDef hiwdg;\r\n\r\nextern TIM_HandleTypeDef htim4;\r\nextern TIM_HandleTypeDef htim2;\r\nvoid                     Setup_HAL();\r\nuint16_t                 getADCHandleTemp(uint8_t sample);\r\nuint16_t                 getADCVin(uint8_t sample);\r\nvoid                     HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); // Since the hal header file does not define this one\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* SETUP_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Software_I2C.h",
    "content": "/*\r\n * Software_I2C.h\r\n *\r\n *  Created on: 25 Jul 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_MINIWARE_SOFTWARE_I2C_H_\r\n#define BSP_MINIWARE_SOFTWARE_I2C_H_\r\n#include \"BSP.h\"\r\n#include \"configuration.h\"\r\n#include \"stm32f1xx_hal.h\"\r\n#ifdef I2C_SOFT_BUS_2\r\n\r\n#define SOFT_SCL2_HIGH() HAL_GPIO_WritePin(SCL2_GPIO_Port, SCL2_Pin, GPIO_PIN_SET)\r\n#define SOFT_SCL2_LOW()  HAL_GPIO_WritePin(SCL2_GPIO_Port, SCL2_Pin, GPIO_PIN_RESET)\r\n#define SOFT_SDA2_HIGH() HAL_GPIO_WritePin(SDA2_GPIO_Port, SDA2_Pin, GPIO_PIN_SET)\r\n#define SOFT_SDA2_LOW()  HAL_GPIO_WritePin(SDA2_GPIO_Port, SDA2_Pin, GPIO_PIN_RESET)\r\n#define SOFT_SDA2_READ() (HAL_GPIO_ReadPin(SDA2_GPIO_Port, SDA2_Pin) == GPIO_PIN_SET ? 1 : 0)\r\n#define SOFT_SCL2_READ() (HAL_GPIO_ReadPin(SCL2_GPIO_Port, SCL2_Pin) == GPIO_PIN_SET ? 1 : 0)\r\n// clang-format off\r\n#define SOFT_I2C_DELAY()              \\\r\n  {                                   \\\r\n    for (int xx = 0; xx < 12; xx++) { \\\r\n      asm(\"nop\");                     \\\r\n    }                                 \\\r\n  }\r\n// clang-format on\r\n\r\n#endif\r\n// 40 ~= 100kHz; 15 gives around 250kHz or so which is fast _and_ stable\r\n\r\n#endif /* BSP_MINIWARE_SOFTWARE_I2C_H_ */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Startup/startup_stm32f103t8ux.S",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file      startup_stm32.s\r\n  * @author    Ac6\r\n  * @version   V1.0.0\r\n  * @date      12-June-2014\r\n  ******************************************************************************\r\n  */\r\n\r\n  .syntax unified\r\n  .cpu cortex-m3\r\n  .thumb\r\n\r\n.global\tg_pfnVectors\r\n.global\tDefault_Handler\r\n\r\n/* start address for the initialization values of the .data section.\r\ndefined in linker script */\r\n.word\t_sidata\r\n/* start address for the .data section. defined in linker script */\r\n.word\t_sdata\r\n/* end address for the .data section. defined in linker script */\r\n.word\t_edata\r\n/* start address for the .bss section. defined in linker script */\r\n.word\t_sbss\r\n/* end address for the .bss section. defined in linker script */\r\n.word\t_ebss\r\n\r\n.equ  BootRAM,        0xF1E0F85F\r\n/**\r\n * @brief  This is the code that gets called when the processor first\r\n *          starts execution following a reset event. Only the absolutely\r\n *          necessary set is performed, after which the application\r\n *          supplied main() routine is called.\r\n * @param  None\r\n * @retval : None\r\n*/\r\n\r\n    .section\t.text.Reset_Handler\r\n\t.weak\tReset_Handler\r\n\t.type\tReset_Handler, %function\r\nReset_Handler:\r\n\r\n/* Copy the data segment initializers from flash to SRAM */\r\n  movs\tr1, #0\r\n  b\tLoopCopyDataInit\r\n\r\nCopyDataInit:\r\n\tldr\tr3, =_sidata\r\n\tldr\tr3, [r3, r1]\r\n\tstr\tr3, [r0, r1]\r\n\tadds\tr1, r1, #4\r\n\r\nLoopCopyDataInit:\r\n\tldr\tr0, =_sdata\r\n\tldr\tr3, =_edata\r\n\tadds\tr2, r0, r1\r\n\tcmp\tr2, r3\r\n\tbcc\tCopyDataInit\r\n\tldr\tr2, =_sbss\r\n\tb\tLoopFillZerobss\r\n/* Zero fill the bss segment. */\r\nFillZerobss:\r\n\tmovs r3, #0\r\n \tstr  r3, [r2]\r\n\tadds r2, r2, #4\r\n\r\nLoopFillZerobss:\r\n\tldr\tr3, = _ebss\r\n\tcmp\tr2, r3\r\n\tbcc\tFillZerobss\r\n\r\n/* Call the clock system intitialization function.*/\r\n    bl  SystemInit\r\n/* Call static constructors */\r\n    bl __libc_init_array\r\n/* Call the application's entry point.*/\r\n\tbl\tmain\r\n\r\nLoopForever:\r\n    b LoopForever\r\n\r\n.size\tReset_Handler, .-Reset_Handler\r\n\r\n/**\r\n * @brief  This is the code that gets called when the processor receives an\r\n *         unexpected interrupt.  This simply enters an infinite loop, preserving\r\n *         the system state for examination by a debugger.\r\n *\r\n * @param  None\r\n * @retval : None\r\n*/\r\n    .section\t.text.Default_Handler,\"ax\",%progbits\r\nDefault_Handler:\r\nInfinite_Loop:\r\n\tb\tInfinite_Loop\r\n\t.size\tDefault_Handler, .-Default_Handler\r\n/******************************************************************************\r\n*\r\n* The minimal vector table for a Cortex-M.  Note that the proper constructs\r\n* must be placed on this to ensure that it ends up at physical address\r\n* 0x0000.0000.\r\n*\r\n******************************************************************************/\r\n \t.section\t.isr_vector,\"a\",%progbits\r\n\t.type\tg_pfnVectors, %object\r\n\t.size\tg_pfnVectors, .-g_pfnVectors\r\n\r\ng_pfnVectors:\r\n\t.word _estack\r\n  .word Reset_Handler\r\n  .word NMI_Handler\r\n  .word HardFault_Handler\r\n  .word MemManage_Handler\r\n  .word BusFault_Handler\r\n  .word UsageFault_Handler\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word SVC_Handler\r\n  .word DebugMon_Handler\r\n  .word 0\r\n  .word PendSV_Handler\r\n  .word SysTick_Handler\r\n  .word WWDG_IRQHandler\r\n  .word PVD_IRQHandler\r\n  .word TAMPER_IRQHandler\r\n  .word RTC_IRQHandler\r\n  .word FLASH_IRQHandler\r\n  .word RCC_IRQHandler\r\n  .word EXTI0_IRQHandler\r\n  .word EXTI1_IRQHandler\r\n  .word EXTI2_IRQHandler\r\n  .word EXTI3_IRQHandler\r\n  .word EXTI4_IRQHandler\r\n  .word DMA1_Channel1_IRQHandler\r\n  .word DMA1_Channel2_IRQHandler\r\n  .word DMA1_Channel3_IRQHandler\r\n  .word DMA1_Channel4_IRQHandler\r\n  .word DMA1_Channel5_IRQHandler\r\n  .word DMA1_Channel6_IRQHandler\r\n  .word DMA1_Channel7_IRQHandler\r\n  .word ADC1_2_IRQHandler\r\n  .word USB_HP_CAN1_TX_IRQHandler\r\n  .word USB_LP_CAN1_RX0_IRQHandler\r\n  .word CAN1_RX1_IRQHandler\r\n  .word CAN1_SCE_IRQHandler\r\n  .word EXTI9_5_IRQHandler\r\n  .word TIM1_BRK_IRQHandler\r\n  .word TIM1_UP_IRQHandler\r\n  .word TIM1_TRG_COM_IRQHandler\r\n  .word TIM1_CC_IRQHandler\r\n  .word TIM2_IRQHandler\r\n  .word TIM3_IRQHandler\r\n  .word TIM4_IRQHandler\r\n  .word I2C1_EV_IRQHandler\r\n  .word I2C1_ER_IRQHandler\r\n  .word I2C2_EV_IRQHandler\r\n  .word I2C2_ER_IRQHandler\r\n  .word SPI1_IRQHandler\r\n  .word SPI2_IRQHandler\r\n  .word USART1_IRQHandler\r\n  .word USART2_IRQHandler\r\n  .word USART3_IRQHandler\r\n  .word EXTI15_10_IRQHandler\r\n  .word RTC_Alarm_IRQHandler\r\n  .word USBWakeUp_IRQHandler\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word 0\r\n  .word BootRAM          /* @0x108. This is for boot in RAM mode for\r\n                            STM32F10x Medium Density devices. */\r\n\r\n/*******************************************************************************\r\n*\r\n* Provide weak aliases for each Exception handler to the Default_Handler.\r\n* As they are weak aliases, any function with the same name will override\r\n* this definition.\r\n*\r\n*******************************************************************************/\r\n\r\n  \t.weak NMI_Handler\r\n  .thumb_set NMI_Handler,Default_Handler\r\n\r\n  .weak HardFault_Handler\r\n  .thumb_set HardFault_Handler,Default_Handler\r\n\r\n  .weak MemManage_Handler\r\n  .thumb_set MemManage_Handler,Default_Handler\r\n\r\n  .weak BusFault_Handler\r\n  .thumb_set BusFault_Handler,Default_Handler\r\n\r\n  .weak UsageFault_Handler\r\n  .thumb_set UsageFault_Handler,Default_Handler\r\n\r\n  .weak SVC_Handler\r\n  .thumb_set SVC_Handler,Default_Handler\r\n\r\n  .weak DebugMon_Handler\r\n  .thumb_set DebugMon_Handler,Default_Handler\r\n\r\n  .weak PendSV_Handler\r\n  .thumb_set PendSV_Handler,Default_Handler\r\n\r\n  .weak SysTick_Handler\r\n  .thumb_set SysTick_Handler,Default_Handler\r\n\r\n  .weak WWDG_IRQHandler\r\n  .thumb_set WWDG_IRQHandler,Default_Handler\r\n\r\n  .weak PVD_IRQHandler\r\n  .thumb_set PVD_IRQHandler,Default_Handler\r\n\r\n  .weak TAMPER_IRQHandler\r\n  .thumb_set TAMPER_IRQHandler,Default_Handler\r\n\r\n  .weak RTC_IRQHandler\r\n  .thumb_set RTC_IRQHandler,Default_Handler\r\n\r\n  .weak FLASH_IRQHandler\r\n  .thumb_set FLASH_IRQHandler,Default_Handler\r\n\r\n  .weak RCC_IRQHandler\r\n  .thumb_set RCC_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI0_IRQHandler\r\n  .thumb_set EXTI0_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI1_IRQHandler\r\n  .thumb_set EXTI1_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI2_IRQHandler\r\n  .thumb_set EXTI2_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI3_IRQHandler\r\n  .thumb_set EXTI3_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI4_IRQHandler\r\n  .thumb_set EXTI4_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel1_IRQHandler\r\n  .thumb_set DMA1_Channel1_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel2_IRQHandler\r\n  .thumb_set DMA1_Channel2_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel3_IRQHandler\r\n  .thumb_set DMA1_Channel3_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel4_IRQHandler\r\n  .thumb_set DMA1_Channel4_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel5_IRQHandler\r\n  .thumb_set DMA1_Channel5_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel6_IRQHandler\r\n  .thumb_set DMA1_Channel6_IRQHandler,Default_Handler\r\n\r\n  .weak DMA1_Channel7_IRQHandler\r\n  .thumb_set DMA1_Channel7_IRQHandler,Default_Handler\r\n\r\n  .weak ADC1_2_IRQHandler\r\n  .thumb_set ADC1_2_IRQHandler,Default_Handler\r\n\r\n  .weak USB_HP_CAN1_TX_IRQHandler\r\n  .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler\r\n\r\n  .weak USB_LP_CAN1_RX0_IRQHandler\r\n  .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler\r\n\r\n  .weak CAN1_RX1_IRQHandler\r\n  .thumb_set CAN1_RX1_IRQHandler,Default_Handler\r\n\r\n  .weak CAN1_SCE_IRQHandler\r\n  .thumb_set CAN1_SCE_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI9_5_IRQHandler\r\n  .thumb_set EXTI9_5_IRQHandler,Default_Handler\r\n\r\n  .weak TIM1_BRK_IRQHandler\r\n  .thumb_set TIM1_BRK_IRQHandler,Default_Handler\r\n\r\n  .weak TIM1_UP_IRQHandler\r\n  .thumb_set TIM1_UP_IRQHandler,Default_Handler\r\n\r\n  .weak TIM1_TRG_COM_IRQHandler\r\n  .thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler\r\n\r\n  .weak TIM1_CC_IRQHandler\r\n  .thumb_set TIM1_CC_IRQHandler,Default_Handler\r\n\r\n  .weak TIM2_IRQHandler\r\n  .thumb_set TIM2_IRQHandler,Default_Handler\r\n\r\n  .weak TIM3_IRQHandler\r\n  .thumb_set TIM3_IRQHandler,Default_Handler\r\n\r\n  .weak TIM4_IRQHandler\r\n  .thumb_set TIM4_IRQHandler,Default_Handler\r\n\r\n  .weak I2C1_EV_IRQHandler\r\n  .thumb_set I2C1_EV_IRQHandler,Default_Handler\r\n\r\n  .weak I2C1_ER_IRQHandler\r\n  .thumb_set I2C1_ER_IRQHandler,Default_Handler\r\n\r\n  .weak I2C2_EV_IRQHandler\r\n  .thumb_set I2C2_EV_IRQHandler,Default_Handler\r\n\r\n  .weak I2C2_ER_IRQHandler\r\n  .thumb_set I2C2_ER_IRQHandler,Default_Handler\r\n\r\n  .weak SPI1_IRQHandler\r\n  .thumb_set SPI1_IRQHandler,Default_Handler\r\n\r\n  .weak SPI2_IRQHandler\r\n  .thumb_set SPI2_IRQHandler,Default_Handler\r\n\r\n  .weak USART1_IRQHandler\r\n  .thumb_set USART1_IRQHandler,Default_Handler\r\n\r\n  .weak USART2_IRQHandler\r\n  .thumb_set USART2_IRQHandler,Default_Handler\r\n\r\n  .weak USART3_IRQHandler\r\n  .thumb_set USART3_IRQHandler,Default_Handler\r\n\r\n  .weak EXTI15_10_IRQHandler\r\n  .thumb_set EXTI15_10_IRQHandler,Default_Handler\r\n\r\n  .weak RTC_Alarm_IRQHandler\r\n  .thumb_set RTC_Alarm_IRQHandler,Default_Handler\r\n\r\n  .weak USBWakeUp_IRQHandler\r\n  .thumb_set USBWakeUp_IRQHandler,Default_Handler\r\n\r\n\r\n/************************ (C) COPYRIGHT Ac6 *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/ThermoModel.cpp",
    "content": "/*\r\n * ThermoModel.cpp\r\n *\r\n *  Created on: 1 May 2021\r\n *      Author: Ralim\r\n */\r\n#include \"TipThermoModel.h\"\r\n#include \"Utils.hpp\"\r\n#include \"configuration.h\"\r\n\r\n#ifdef TEMP_uV_LOOKUP_PT1000\r\n// Use https://br.flukecal.com/pt100-table-generator to make table for resistance to temp\r\nconst int32_t ohmsToDegC[] = {\r\n    //\r\n    //  Resistance (ohms x10)\tTemperature (Celsius)\r\n\r\n    10000, 0,   //\r\n    10390, 10,  //\r\n    10779, 20,  //\r\n    11167, 30,  //\r\n    11554, 40,  //\r\n    11940, 50,  //\r\n    12324, 60,  //\r\n    12708, 70,  //\r\n    13090, 80,  //\r\n    13471, 90,  //\r\n    13851, 100, //\r\n    14229, 110, //\r\n    14607, 120, //\r\n    14983, 130, //\r\n    15358, 140, //\r\n    15733, 150, //\r\n    16105, 160, //\r\n    16477, 170, //\r\n    16848, 180, //\r\n    17217, 190, //\r\n    17586, 200, //\r\n    17953, 210, //\r\n    18319, 220, //\r\n    18684, 230, //\r\n    19047, 240, //\r\n    19410, 250, //\r\n    19771, 260, //\r\n    20131, 270, //\r\n    20490, 280, //\r\n    20848, 290, //\r\n    21205, 300, //\r\n    21561, 310, //\r\n    21915, 320, //\r\n    22268, 330, //\r\n    22621, 340, //\r\n    22972, 350, //\r\n    23321, 360, //\r\n    23670, 370, //\r\n    24018, 380, //\r\n    24364, 390, //\r\n    24709, 400, //\r\n    25053, 410, //\r\n    25396, 420, //\r\n    25738, 430, //\r\n    26078, 440, //\r\n    26418, 450, //\r\n    26756, 460, //\r\n    27093, 470, //\r\n    27429, 480, //\r\n    27764, 490, //\r\n    28098, 500, //\r\n\r\n};\r\n\r\nTemperatureType_t TipThermoModel::convertuVToDegC(uint32_t tipuVDelta) {\r\n\r\n  // 3.3V -> 1K ->(ADC) <- PT1000 <- GND\r\n  // PT100 = (adc*r1)/(3.3V-adc)\r\n  uint32_t reading_mv     = tipuVDelta / 1000;\r\n  uint32_t resistance_x10 = (reading_mv * 10000) / (3300 - reading_mv);\r\n\r\n  return Utils::InterpolateLookupTable(ohmsToDegC, sizeof(ohmsToDegC) / (2 * sizeof(int32_t)), resistance_x10);\r\n}\r\n\r\n#endif // TEMP_uV_LOOKUP_PT1000\r\n\r\n#ifdef TEMP_uV_LOOKUP_S60\r\nTemperatureType_t TipThermoModel::convertuVToDegC(uint32_t tipuVDelta) { return (tipuVDelta * 50) / 485; }\r\n#endif // TEMP_uV_LOOKUP_S60\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f103xb.h\r\n * @author  MCD Application Team\r\n * @version V4.2.0\r\n * @date    31-March-2017\r\n * @brief   CMSIS Cortex-M3 Device Peripheral Access Layer Header File.\r\n *          This file contains all the peripheral register's definitions, bits\r\n *          definitions and memory mapping for STM32F1xx devices.\r\n *\r\n *          This file contains:\r\n *           - Data structures and the address mapping for all peripherals\r\n *           - Peripheral's registers declarations and bits definition\r\n *           - Macros to access peripherals registers hardware\r\n *\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/** @addtogroup CMSIS\r\n * @{\r\n */\r\n\r\n/** @addtogroup stm32f103xb\r\n * @{\r\n */\r\n\r\n#ifndef __STM32F103xB_H\r\n#define __STM32F103xB_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/** @addtogroup Configuration_section_for_CMSIS\r\n * @{\r\n */\r\n/**\r\n * @brief Configuration of the Cortex-M3 Processor and Core Peripherals\r\n */\r\n#define __CM3_REV              0x0200U /*!< Core Revision r2p0                           */\r\n#define __MPU_PRESENT          0U      /*!< Other STM32 devices does not provide an MPU  */\r\n#define __NVIC_PRIO_BITS       4U      /*!< STM32 uses 4 Bits for the Priority Levels    */\r\n#define __Vendor_SysTickConfig 0U      /*!< Set to 1 if different SysTick Config is used */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Peripheral_interrupt_number_definition\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief STM32F10x Interrupt Number Definition, according to the selected device\r\n *        in @ref Library_configuration_section\r\n */\r\n\r\n/*!< Interrupt Number Definition */\r\ntypedef enum {\r\n  /******  Cortex-M3 Processor Exceptions Numbers ***************************************************/\r\n  NonMaskableInt_IRQn   = -14, /*!< 2 Non Maskable Interrupt                             */\r\n  HardFault_IRQn        = -13, /*!< 3 Cortex-M3 Hard Fault Interrupt                     */\r\n  MemoryManagement_IRQn = -12, /*!< 4 Cortex-M3 Memory Management Interrupt              */\r\n  BusFault_IRQn         = -11, /*!< 5 Cortex-M3 Bus Fault Interrupt                      */\r\n  UsageFault_IRQn       = -10, /*!< 6 Cortex-M3 Usage Fault Interrupt                    */\r\n  SVCall_IRQn           = -5,  /*!< 11 Cortex-M3 SV Call Interrupt                       */\r\n  DebugMonitor_IRQn     = -4,  /*!< 12 Cortex-M3 Debug Monitor Interrupt                 */\r\n  PendSV_IRQn           = -2,  /*!< 14 Cortex-M3 Pend SV Interrupt                       */\r\n  SysTick_IRQn          = -1,  /*!< 15 Cortex-M3 System Tick Interrupt                   */\r\n\r\n  /******  STM32 specific Interrupt Numbers *********************************************************/\r\n  WWDG_IRQn            = 0,  /*!< Window WatchDog Interrupt                            */\r\n  PVD_IRQn             = 1,  /*!< PVD through EXTI Line detection Interrupt            */\r\n  TAMPER_IRQn          = 2,  /*!< Tamper Interrupt                                     */\r\n  RTC_IRQn             = 3,  /*!< RTC global Interrupt                                 */\r\n  FLASH_IRQn           = 4,  /*!< FLASH global Interrupt                               */\r\n  RCC_IRQn             = 5,  /*!< RCC global Interrupt                                 */\r\n  EXTI0_IRQn           = 6,  /*!< EXTI Line0 Interrupt                                 */\r\n  EXTI1_IRQn           = 7,  /*!< EXTI Line1 Interrupt                                 */\r\n  EXTI2_IRQn           = 8,  /*!< EXTI Line2 Interrupt                                 */\r\n  EXTI3_IRQn           = 9,  /*!< EXTI Line3 Interrupt                                 */\r\n  EXTI4_IRQn           = 10, /*!< EXTI Line4 Interrupt                                 */\r\n  DMA1_Channel1_IRQn   = 11, /*!< DMA1 Channel 1 global Interrupt                      */\r\n  DMA1_Channel2_IRQn   = 12, /*!< DMA1 Channel 2 global Interrupt                      */\r\n  DMA1_Channel3_IRQn   = 13, /*!< DMA1 Channel 3 global Interrupt                      */\r\n  DMA1_Channel4_IRQn   = 14, /*!< DMA1 Channel 4 global Interrupt                      */\r\n  DMA1_Channel5_IRQn   = 15, /*!< DMA1 Channel 5 global Interrupt                      */\r\n  DMA1_Channel6_IRQn   = 16, /*!< DMA1 Channel 6 global Interrupt                      */\r\n  DMA1_Channel7_IRQn   = 17, /*!< DMA1 Channel 7 global Interrupt                      */\r\n  ADC1_2_IRQn          = 18, /*!< ADC1 and ADC2 global Interrupt                       */\r\n  USB_HP_CAN1_TX_IRQn  = 19, /*!< USB Device High Priority or CAN1 TX Interrupts       */\r\n  USB_LP_CAN1_RX0_IRQn = 20, /*!< USB Device Low Priority or CAN1 RX0 Interrupts       */\r\n  CAN1_RX1_IRQn        = 21, /*!< CAN1 RX1 Interrupt                                   */\r\n  CAN1_SCE_IRQn        = 22, /*!< CAN1 SCE Interrupt                                   */\r\n  EXTI9_5_IRQn         = 23, /*!< External Line[9:5] Interrupts                        */\r\n  TIM1_BRK_IRQn        = 24, /*!< TIM1 Break Interrupt                                 */\r\n  TIM1_UP_IRQn         = 25, /*!< TIM1 Update Interrupt                                */\r\n  TIM1_TRG_COM_IRQn    = 26, /*!< TIM1 Trigger and Commutation Interrupt               */\r\n  TIM1_CC_IRQn         = 27, /*!< TIM1 Capture Compare Interrupt                       */\r\n  TIM2_IRQn            = 28, /*!< TIM2 global Interrupt                                */\r\n  TIM3_IRQn            = 29, /*!< TIM3 global Interrupt                                */\r\n  TIM4_IRQn            = 30, /*!< TIM4 global Interrupt                                */\r\n  I2C1_EV_IRQn         = 31, /*!< I2C1 Event Interrupt                                 */\r\n  I2C1_ER_IRQn         = 32, /*!< I2C1 Error Interrupt                                 */\r\n  I2C2_EV_IRQn         = 33, /*!< I2C2 Event Interrupt                                 */\r\n  I2C2_ER_IRQn         = 34, /*!< I2C2 Error Interrupt                                 */\r\n  SPI1_IRQn            = 35, /*!< SPI1 global Interrupt                                */\r\n  SPI2_IRQn            = 36, /*!< SPI2 global Interrupt                                */\r\n  USART1_IRQn          = 37, /*!< USART1 global Interrupt                              */\r\n  USART2_IRQn          = 38, /*!< USART2 global Interrupt                              */\r\n  USART3_IRQn          = 39, /*!< USART3 global Interrupt                              */\r\n  EXTI15_10_IRQn       = 40, /*!< External Line[15:10] Interrupts                      */\r\n  RTC_Alarm_IRQn       = 41, /*!< RTC Alarm through EXTI Line Interrupt                */\r\n  USBWakeUp_IRQn       = 42, /*!< USB Device WakeUp from suspend through EXTI Line Interrupt */\r\n} IRQn_Type;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#include \"core_cm3.h\"\r\n#include \"system_stm32f1xx.h\"\r\n#include <stdint.h>\r\n\r\n/** @addtogroup Peripheral_registers_structures\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief Analog to Digital Converter\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t SR;\r\n  __IO uint32_t CR1;\r\n  __IO uint32_t CR2;\r\n  __IO uint32_t SMPR1;\r\n  __IO uint32_t SMPR2;\r\n  __IO uint32_t JOFR1;\r\n  __IO uint32_t JOFR2;\r\n  __IO uint32_t JOFR3;\r\n  __IO uint32_t JOFR4;\r\n  __IO uint32_t HTR;\r\n  __IO uint32_t LTR;\r\n  __IO uint32_t SQR1;\r\n  __IO uint32_t SQR2;\r\n  __IO uint32_t SQR3;\r\n  __IO uint32_t JSQR;\r\n  __IO uint32_t JDR1;\r\n  __IO uint32_t JDR2;\r\n  __IO uint32_t JDR3;\r\n  __IO uint32_t JDR4;\r\n  __IO uint32_t DR;\r\n} ADC_TypeDef;\r\n\r\ntypedef struct {\r\n  __IO uint32_t SR;  /*!< ADC status register,    used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address         */\r\n  __IO uint32_t CR1; /*!< ADC control register 1, used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address + 0x04  */\r\n  __IO uint32_t CR2; /*!< ADC control register 2, used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address + 0x08  */\r\n  uint32_t      RESERVED[16];\r\n  __IO uint32_t DR; /*!< ADC data register,      used for ADC multimode (bits common to several ADC instances). Address offset: ADC1 base address + 0x4C  */\r\n} ADC_Common_TypeDef;\r\n\r\n/**\r\n * @brief Backup Registers\r\n */\r\n\r\ntypedef struct {\r\n  uint32_t      RESERVED0;\r\n  __IO uint32_t DR1;\r\n  __IO uint32_t DR2;\r\n  __IO uint32_t DR3;\r\n  __IO uint32_t DR4;\r\n  __IO uint32_t DR5;\r\n  __IO uint32_t DR6;\r\n  __IO uint32_t DR7;\r\n  __IO uint32_t DR8;\r\n  __IO uint32_t DR9;\r\n  __IO uint32_t DR10;\r\n  __IO uint32_t RTCCR;\r\n  __IO uint32_t CR;\r\n  __IO uint32_t CSR;\r\n} BKP_TypeDef;\r\n\r\n/**\r\n * @brief Controller Area Network TxMailBox\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t TIR;\r\n  __IO uint32_t TDTR;\r\n  __IO uint32_t TDLR;\r\n  __IO uint32_t TDHR;\r\n} CAN_TxMailBox_TypeDef;\r\n\r\n/**\r\n * @brief Controller Area Network FIFOMailBox\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t RIR;\r\n  __IO uint32_t RDTR;\r\n  __IO uint32_t RDLR;\r\n  __IO uint32_t RDHR;\r\n} CAN_FIFOMailBox_TypeDef;\r\n\r\n/**\r\n * @brief Controller Area Network FilterRegister\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t FR1;\r\n  __IO uint32_t FR2;\r\n} CAN_FilterRegister_TypeDef;\r\n\r\n/**\r\n * @brief Controller Area Network\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t              MCR;\r\n  __IO uint32_t              MSR;\r\n  __IO uint32_t              TSR;\r\n  __IO uint32_t              RF0R;\r\n  __IO uint32_t              RF1R;\r\n  __IO uint32_t              IER;\r\n  __IO uint32_t              ESR;\r\n  __IO uint32_t              BTR;\r\n  uint32_t                   RESERVED0[88];\r\n  CAN_TxMailBox_TypeDef      sTxMailBox[3];\r\n  CAN_FIFOMailBox_TypeDef    sFIFOMailBox[2];\r\n  uint32_t                   RESERVED1[12];\r\n  __IO uint32_t              FMR;\r\n  __IO uint32_t              FM1R;\r\n  uint32_t                   RESERVED2;\r\n  __IO uint32_t              FS1R;\r\n  uint32_t                   RESERVED3;\r\n  __IO uint32_t              FFA1R;\r\n  uint32_t                   RESERVED4;\r\n  __IO uint32_t              FA1R;\r\n  uint32_t                   RESERVED5[8];\r\n  CAN_FilterRegister_TypeDef sFilterRegister[14];\r\n} CAN_TypeDef;\r\n\r\n/**\r\n * @brief CRC calculation unit\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t DR;        /*!< CRC Data register,                           Address offset: 0x00 */\r\n  __IO uint8_t  IDR;       /*!< CRC Independent data register,               Address offset: 0x04 */\r\n  uint8_t       RESERVED0; /*!< Reserved,                                    Address offset: 0x05 */\r\n  uint16_t      RESERVED1; /*!< Reserved,                                    Address offset: 0x06 */\r\n  __IO uint32_t CR;        /*!< CRC Control register,                        Address offset: 0x08 */\r\n} CRC_TypeDef;\r\n\r\n/**\r\n * @brief Debug MCU\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t IDCODE;\r\n  __IO uint32_t CR;\r\n} DBGMCU_TypeDef;\r\n\r\n/**\r\n * @brief DMA Controller\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CCR;\r\n  __IO uint32_t CNDTR;\r\n  __IO uint32_t CPAR;\r\n  __IO uint32_t CMAR;\r\n} DMA_Channel_TypeDef;\r\n\r\ntypedef struct {\r\n  __IO uint32_t ISR;\r\n  __IO uint32_t IFCR;\r\n} DMA_TypeDef;\r\n\r\n/**\r\n * @brief External Interrupt/Event Controller\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t IMR;\r\n  __IO uint32_t EMR;\r\n  __IO uint32_t RTSR;\r\n  __IO uint32_t FTSR;\r\n  __IO uint32_t SWIER;\r\n  __IO uint32_t PR;\r\n} EXTI_TypeDef;\r\n\r\n/**\r\n * @brief FLASH Registers\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t ACR;\r\n  __IO uint32_t KEYR;\r\n  __IO uint32_t OPTKEYR;\r\n  __IO uint32_t SR;\r\n  __IO uint32_t CR;\r\n  __IO uint32_t AR;\r\n  __IO uint32_t RESERVED;\r\n  __IO uint32_t OBR;\r\n  __IO uint32_t WRPR;\r\n} FLASH_TypeDef;\r\n\r\n/**\r\n * @brief Option Bytes Registers\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint16_t RDP;\r\n  __IO uint16_t USER;\r\n  __IO uint16_t Data0;\r\n  __IO uint16_t Data1;\r\n  __IO uint16_t WRP0;\r\n  __IO uint16_t WRP1;\r\n  __IO uint16_t WRP2;\r\n  __IO uint16_t WRP3;\r\n} OB_TypeDef;\r\n\r\n/**\r\n * @brief General Purpose I/O\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CRL;\r\n  __IO uint32_t CRH;\r\n  __IO uint32_t IDR;\r\n  __IO uint32_t ODR;\r\n  __IO uint32_t BSRR;\r\n  __IO uint32_t BRR;\r\n  __IO uint32_t LCKR;\r\n} GPIO_TypeDef;\r\n\r\n/**\r\n * @brief Alternate Function I/O\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t EVCR;\r\n  __IO uint32_t MAPR;\r\n  __IO uint32_t EXTICR[4];\r\n  uint32_t      RESERVED0;\r\n  __IO uint32_t MAPR2;\r\n} AFIO_TypeDef;\r\n/**\r\n * @brief Inter Integrated Circuit Interface\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CR1;\r\n  __IO uint32_t CR2;\r\n  __IO uint32_t OAR1;\r\n  __IO uint32_t OAR2;\r\n  __IO uint32_t DR;\r\n  __IO uint32_t SR1;\r\n  __IO uint32_t SR2;\r\n  __IO uint32_t CCR;\r\n  __IO uint32_t TRISE;\r\n} I2C_TypeDef;\r\n\r\n/**\r\n * @brief Independent WATCHDOG\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t KR;  /*!< Key register,                                Address offset: 0x00 */\r\n  __IO uint32_t PR;  /*!< Prescaler register,                          Address offset: 0x04 */\r\n  __IO uint32_t RLR; /*!< Reload register,                             Address offset: 0x08 */\r\n  __IO uint32_t SR;  /*!< Status register,                             Address offset: 0x0C */\r\n} IWDG_TypeDef;\r\n\r\n/**\r\n * @brief Power Control\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CR;\r\n  __IO uint32_t CSR;\r\n} PWR_TypeDef;\r\n\r\n/**\r\n * @brief Reset and Clock Control\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CR;\r\n  __IO uint32_t CFGR;\r\n  __IO uint32_t CIR;\r\n  __IO uint32_t APB2RSTR;\r\n  __IO uint32_t APB1RSTR;\r\n  __IO uint32_t AHBENR;\r\n  __IO uint32_t APB2ENR;\r\n  __IO uint32_t APB1ENR;\r\n  __IO uint32_t BDCR;\r\n  __IO uint32_t CSR;\r\n\r\n} RCC_TypeDef;\r\n\r\n/**\r\n * @brief Real-Time Clock\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CRH;\r\n  __IO uint32_t CRL;\r\n  __IO uint32_t PRLH;\r\n  __IO uint32_t PRLL;\r\n  __IO uint32_t DIVH;\r\n  __IO uint32_t DIVL;\r\n  __IO uint32_t CNTH;\r\n  __IO uint32_t CNTL;\r\n  __IO uint32_t ALRH;\r\n  __IO uint32_t ALRL;\r\n} RTC_TypeDef;\r\n\r\n/**\r\n * @brief SD host Interface\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t POWER;\r\n  __IO uint32_t CLKCR;\r\n  __IO uint32_t ARG;\r\n  __IO uint32_t CMD;\r\n  __I uint32_t  RESPCMD;\r\n  __I uint32_t  RESP1;\r\n  __I uint32_t  RESP2;\r\n  __I uint32_t  RESP3;\r\n  __I uint32_t  RESP4;\r\n  __IO uint32_t DTIMER;\r\n  __IO uint32_t DLEN;\r\n  __IO uint32_t DCTRL;\r\n  __I uint32_t  DCOUNT;\r\n  __I uint32_t  STA;\r\n  __IO uint32_t ICR;\r\n  __IO uint32_t MASK;\r\n  uint32_t      RESERVED0[2];\r\n  __I uint32_t  FIFOCNT;\r\n  uint32_t      RESERVED1[13];\r\n  __IO uint32_t FIFO;\r\n} SDIO_TypeDef;\r\n\r\n/**\r\n * @brief Serial Peripheral Interface\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CR1;\r\n  __IO uint32_t CR2;\r\n  __IO uint32_t SR;\r\n  __IO uint32_t DR;\r\n  __IO uint32_t CRCPR;\r\n  __IO uint32_t RXCRCR;\r\n  __IO uint32_t TXCRCR;\r\n  __IO uint32_t I2SCFGR;\r\n} SPI_TypeDef;\r\n\r\n/**\r\n * @brief TIM Timers\r\n */\r\ntypedef struct {\r\n  __IO uint32_t CR1;   /*!< TIM control register 1,                      Address offset: 0x00 */\r\n  __IO uint32_t CR2;   /*!< TIM control register 2,                      Address offset: 0x04 */\r\n  __IO uint32_t SMCR;  /*!< TIM slave Mode Control register,             Address offset: 0x08 */\r\n  __IO uint32_t DIER;  /*!< TIM DMA/interrupt enable register,           Address offset: 0x0C */\r\n  __IO uint32_t SR;    /*!< TIM status register,                         Address offset: 0x10 */\r\n  __IO uint32_t EGR;   /*!< TIM event generation register,               Address offset: 0x14 */\r\n  __IO uint32_t CCMR1; /*!< TIM  capture/compare mode register 1,        Address offset: 0x18 */\r\n  __IO uint32_t CCMR2; /*!< TIM  capture/compare mode register 2,        Address offset: 0x1C */\r\n  __IO uint32_t CCER;  /*!< TIM capture/compare enable register,         Address offset: 0x20 */\r\n  __IO uint32_t CNT;   /*!< TIM counter register,                        Address offset: 0x24 */\r\n  __IO uint32_t PSC;   /*!< TIM prescaler register,                      Address offset: 0x28 */\r\n  __IO uint32_t ARR;   /*!< TIM auto-reload register,                    Address offset: 0x2C */\r\n  __IO uint32_t RCR;   /*!< TIM  repetition counter register,            Address offset: 0x30 */\r\n  __IO uint32_t CCR1;  /*!< TIM capture/compare register 1,              Address offset: 0x34 */\r\n  __IO uint32_t CCR2;  /*!< TIM capture/compare register 2,              Address offset: 0x38 */\r\n  __IO uint32_t CCR3;  /*!< TIM capture/compare register 3,              Address offset: 0x3C */\r\n  __IO uint32_t CCR4;  /*!< TIM capture/compare register 4,              Address offset: 0x40 */\r\n  __IO uint32_t BDTR;  /*!< TIM break and dead-time register,            Address offset: 0x44 */\r\n  __IO uint32_t DCR;   /*!< TIM DMA control register,                    Address offset: 0x48 */\r\n  __IO uint32_t DMAR;  /*!< TIM DMA address for full transfer register,  Address offset: 0x4C */\r\n  __IO uint32_t OR;    /*!< TIM option register,                         Address offset: 0x50 */\r\n} TIM_TypeDef;\r\n\r\n/**\r\n * @brief Universal Synchronous Asynchronous Receiver Transmitter\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t SR;   /*!< USART Status register,                   Address offset: 0x00 */\r\n  __IO uint32_t DR;   /*!< USART Data register,                     Address offset: 0x04 */\r\n  __IO uint32_t BRR;  /*!< USART Baud rate register,                Address offset: 0x08 */\r\n  __IO uint32_t CR1;  /*!< USART Control register 1,                Address offset: 0x0C */\r\n  __IO uint32_t CR2;  /*!< USART Control register 2,                Address offset: 0x10 */\r\n  __IO uint32_t CR3;  /*!< USART Control register 3,                Address offset: 0x14 */\r\n  __IO uint32_t GTPR; /*!< USART Guard time and prescaler register, Address offset: 0x18 */\r\n} USART_TypeDef;\r\n\r\n/**\r\n * @brief Universal Serial Bus Full Speed Device\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint16_t EP0R;          /*!< USB Endpoint 0 register,                   Address offset: 0x00 */\r\n  __IO uint16_t RESERVED0;     /*!< Reserved */\r\n  __IO uint16_t EP1R;          /*!< USB Endpoint 1 register,                   Address offset: 0x04 */\r\n  __IO uint16_t RESERVED1;     /*!< Reserved */\r\n  __IO uint16_t EP2R;          /*!< USB Endpoint 2 register,                   Address offset: 0x08 */\r\n  __IO uint16_t RESERVED2;     /*!< Reserved */\r\n  __IO uint16_t EP3R;          /*!< USB Endpoint 3 register,                   Address offset: 0x0C */\r\n  __IO uint16_t RESERVED3;     /*!< Reserved */\r\n  __IO uint16_t EP4R;          /*!< USB Endpoint 4 register,                   Address offset: 0x10 */\r\n  __IO uint16_t RESERVED4;     /*!< Reserved */\r\n  __IO uint16_t EP5R;          /*!< USB Endpoint 5 register,                   Address offset: 0x14 */\r\n  __IO uint16_t RESERVED5;     /*!< Reserved */\r\n  __IO uint16_t EP6R;          /*!< USB Endpoint 6 register,                   Address offset: 0x18 */\r\n  __IO uint16_t RESERVED6;     /*!< Reserved */\r\n  __IO uint16_t EP7R;          /*!< USB Endpoint 7 register,                   Address offset: 0x1C */\r\n  __IO uint16_t RESERVED7[17]; /*!< Reserved */\r\n  __IO uint16_t CNTR;          /*!< Control register,                          Address offset: 0x40 */\r\n  __IO uint16_t RESERVED8;     /*!< Reserved */\r\n  __IO uint16_t ISTR;          /*!< Interrupt status register,                 Address offset: 0x44 */\r\n  __IO uint16_t RESERVED9;     /*!< Reserved */\r\n  __IO uint16_t FNR;           /*!< Frame number register,                     Address offset: 0x48 */\r\n  __IO uint16_t RESERVEDA;     /*!< Reserved */\r\n  __IO uint16_t DADDR;         /*!< Device address register,                   Address offset: 0x4C */\r\n  __IO uint16_t RESERVEDB;     /*!< Reserved */\r\n  __IO uint16_t BTABLE;        /*!< Buffer Table address register,             Address offset: 0x50 */\r\n  __IO uint16_t RESERVEDC;     /*!< Reserved */\r\n} USB_TypeDef;\r\n\r\n/**\r\n * @brief Window WATCHDOG\r\n */\r\n\r\ntypedef struct {\r\n  __IO uint32_t CR;  /*!< WWDG Control register,       Address offset: 0x00 */\r\n  __IO uint32_t CFR; /*!< WWDG Configuration register, Address offset: 0x04 */\r\n  __IO uint32_t SR;  /*!< WWDG Status register,        Address offset: 0x08 */\r\n} WWDG_TypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Peripheral_memory_map\r\n * @{\r\n */\r\n\r\n#define FLASH_BASE      0x08000000U /*!< FLASH base address in the alias region */\r\n#define FLASH_BANK1_END 0x0801FFFFU /*!< FLASH END address of bank1 */\r\n#define SRAM_BASE       0x20000000U /*!< SRAM base address in the alias region */\r\n#define PERIPH_BASE     0x40000000U /*!< Peripheral base address in the alias region */\r\n\r\n#define SRAM_BB_BASE   0x22000000U /*!< SRAM base address in the bit-band region */\r\n#define PERIPH_BB_BASE 0x42000000U /*!< Peripheral base address in the bit-band region */\r\n\r\n/*!< Peripheral memory map */\r\n#define APB1PERIPH_BASE PERIPH_BASE\r\n#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000U)\r\n#define AHBPERIPH_BASE  (PERIPH_BASE + 0x00020000U)\r\n\r\n#define TIM2_BASE   (APB1PERIPH_BASE + 0x00000000U)\r\n#define TIM3_BASE   (APB1PERIPH_BASE + 0x00000400U)\r\n#define TIM4_BASE   (APB1PERIPH_BASE + 0x00000800U)\r\n#define RTC_BASE    (APB1PERIPH_BASE + 0x00002800U)\r\n#define WWDG_BASE   (APB1PERIPH_BASE + 0x00002C00U)\r\n#define IWDG_BASE   (APB1PERIPH_BASE + 0x00003000U)\r\n#define SPI2_BASE   (APB1PERIPH_BASE + 0x00003800U)\r\n#define USART2_BASE (APB1PERIPH_BASE + 0x00004400U)\r\n#define USART3_BASE (APB1PERIPH_BASE + 0x00004800U)\r\n#define I2C1_BASE   (APB1PERIPH_BASE + 0x00005400U)\r\n#define I2C2_BASE   (APB1PERIPH_BASE + 0x5800)\r\n#define CAN1_BASE   (APB1PERIPH_BASE + 0x00006400U)\r\n#define BKP_BASE    (APB1PERIPH_BASE + 0x00006C00U)\r\n#define PWR_BASE    (APB1PERIPH_BASE + 0x00007000U)\r\n#define AFIO_BASE   (APB2PERIPH_BASE + 0x00000000U)\r\n#define EXTI_BASE   (APB2PERIPH_BASE + 0x00000400U)\r\n#define GPIOA_BASE  (APB2PERIPH_BASE + 0x00000800U)\r\n#define GPIOB_BASE  (APB2PERIPH_BASE + 0x00000C00U)\r\n#define GPIOC_BASE  (APB2PERIPH_BASE + 0x00001000U)\r\n#define GPIOD_BASE  (APB2PERIPH_BASE + 0x00001400U)\r\n#define GPIOE_BASE  (APB2PERIPH_BASE + 0x00001800U)\r\n#define ADC1_BASE   (APB2PERIPH_BASE + 0x00002400U)\r\n#define ADC2_BASE   (APB2PERIPH_BASE + 0x00002800U)\r\n#define TIM1_BASE   (APB2PERIPH_BASE + 0x00002C00U)\r\n#define SPI1_BASE   (APB2PERIPH_BASE + 0x00003000U)\r\n#define USART1_BASE (APB2PERIPH_BASE + 0x00003800U)\r\n\r\n#define SDIO_BASE (PERIPH_BASE + 0x00018000U)\r\n\r\n#define DMA1_BASE          (AHBPERIPH_BASE + 0x00000000U)\r\n#define DMA1_Channel1_BASE (AHBPERIPH_BASE + 0x00000008U)\r\n#define DMA1_Channel2_BASE (AHBPERIPH_BASE + 0x0000001CU)\r\n#define DMA1_Channel3_BASE (AHBPERIPH_BASE + 0x00000030U)\r\n#define DMA1_Channel4_BASE (AHBPERIPH_BASE + 0x00000044U)\r\n#define DMA1_Channel5_BASE (AHBPERIPH_BASE + 0x00000058U)\r\n#define DMA1_Channel6_BASE (AHBPERIPH_BASE + 0x0000006CU)\r\n#define DMA1_Channel7_BASE (AHBPERIPH_BASE + 0x00000080U)\r\n#define RCC_BASE           (AHBPERIPH_BASE + 0x00001000U)\r\n#define CRC_BASE           (AHBPERIPH_BASE + 0x00003000U)\r\n\r\n#define FLASH_R_BASE   (AHBPERIPH_BASE + 0x00002000U) /*!< Flash registers base address */\r\n#define FLASHSIZE_BASE 0x1FFFF7E0U                    /*!< FLASH Size register base address */\r\n#define UID_BASE       0x1FFFF7E8U                    /*!< Unique device ID register base address */\r\n#define OB_BASE        0x1FFFF800U                    /*!< Flash Option Bytes base address */\r\n\r\n#define DBGMCU_BASE 0xE0042000U /*!< Debug MCU registers base address */\r\n\r\n/* USB device FS */\r\n#define USB_BASE    (APB1PERIPH_BASE + 0x00005C00U) /*!< USB_IP Peripheral Registers base address */\r\n#define USB_PMAADDR (APB1PERIPH_BASE + 0x00006000U) /*!< USB_IP Packet Memory Area base address */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Peripheral_declaration\r\n * @{\r\n */\r\n\r\n#define TIM2          ((TIM_TypeDef *)TIM2_BASE)\r\n#define TIM3          ((TIM_TypeDef *)TIM3_BASE)\r\n#define TIM4          ((TIM_TypeDef *)TIM4_BASE)\r\n#define RTC           ((RTC_TypeDef *)RTC_BASE)\r\n#define WWDG          ((WWDG_TypeDef *)WWDG_BASE)\r\n#define IWDG          ((IWDG_TypeDef *)IWDG_BASE)\r\n#define SPI2          ((SPI_TypeDef *)SPI2_BASE)\r\n#define USART2        ((USART_TypeDef *)USART2_BASE)\r\n#define USART3        ((USART_TypeDef *)USART3_BASE)\r\n#define I2C1          ((I2C_TypeDef *)I2C1_BASE)\r\n#define I2C2          ((I2C_TypeDef *)I2C2_BASE)\r\n#define USB           ((USB_TypeDef *)USB_BASE)\r\n#define CAN1          ((CAN_TypeDef *)CAN1_BASE)\r\n#define BKP           ((BKP_TypeDef *)BKP_BASE)\r\n#define PWR           ((PWR_TypeDef *)PWR_BASE)\r\n#define AFIO          ((AFIO_TypeDef *)AFIO_BASE)\r\n#define EXTI          ((EXTI_TypeDef *)EXTI_BASE)\r\n#define GPIOA         ((GPIO_TypeDef *)GPIOA_BASE)\r\n#define GPIOB         ((GPIO_TypeDef *)GPIOB_BASE)\r\n#define GPIOC         ((GPIO_TypeDef *)GPIOC_BASE)\r\n#define GPIOD         ((GPIO_TypeDef *)GPIOD_BASE)\r\n#define GPIOE         ((GPIO_TypeDef *)GPIOE_BASE)\r\n#define ADC1          ((ADC_TypeDef *)ADC1_BASE)\r\n#define ADC2          ((ADC_TypeDef *)ADC2_BASE)\r\n#define ADC12_COMMON  ((ADC_Common_TypeDef *)ADC1_BASE)\r\n#define TIM1          ((TIM_TypeDef *)TIM1_BASE)\r\n#define SPI1          ((SPI_TypeDef *)SPI1_BASE)\r\n#define USART1        ((USART_TypeDef *)USART1_BASE)\r\n#define SDIO          ((SDIO_TypeDef *)SDIO_BASE)\r\n#define DMA1          ((DMA_TypeDef *)DMA1_BASE)\r\n#define DMA1_Channel1 ((DMA_Channel_TypeDef *)DMA1_Channel1_BASE)\r\n#define DMA1_Channel2 ((DMA_Channel_TypeDef *)DMA1_Channel2_BASE)\r\n#define DMA1_Channel3 ((DMA_Channel_TypeDef *)DMA1_Channel3_BASE)\r\n#define DMA1_Channel4 ((DMA_Channel_TypeDef *)DMA1_Channel4_BASE)\r\n#define DMA1_Channel5 ((DMA_Channel_TypeDef *)DMA1_Channel5_BASE)\r\n#define DMA1_Channel6 ((DMA_Channel_TypeDef *)DMA1_Channel6_BASE)\r\n#define DMA1_Channel7 ((DMA_Channel_TypeDef *)DMA1_Channel7_BASE)\r\n#define RCC           ((RCC_TypeDef *)RCC_BASE)\r\n#define CRC           ((CRC_TypeDef *)CRC_BASE)\r\n#define FLASH         ((FLASH_TypeDef *)FLASH_R_BASE)\r\n#define OB            ((OB_TypeDef *)OB_BASE)\r\n#define DBGMCU        ((DBGMCU_TypeDef *)DBGMCU_BASE)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Exported_constants\r\n * @{\r\n */\r\n\r\n/** @addtogroup Peripheral_Registers_Bits_Definition\r\n * @{\r\n */\r\n\r\n/******************************************************************************/\r\n/*                         Peripheral Registers_Bits_Definition               */\r\n/******************************************************************************/\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                       CRC calculation unit (CRC)                           */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for CRC_DR register  *********************/\r\n#define CRC_DR_DR_Pos (0U)\r\n#define CRC_DR_DR_Msk (0xFFFFFFFFU << CRC_DR_DR_Pos) /*!< 0xFFFFFFFF */\r\n#define CRC_DR_DR     CRC_DR_DR_Msk                  /*!< Data register bits */\r\n\r\n/*******************  Bit definition for CRC_IDR register  ********************/\r\n#define CRC_IDR_IDR_Pos (0U)\r\n#define CRC_IDR_IDR_Msk (0xFFU << CRC_IDR_IDR_Pos) /*!< 0x000000FF */\r\n#define CRC_IDR_IDR     CRC_IDR_IDR_Msk            /*!< General-purpose 8-bit data register bits */\r\n\r\n/********************  Bit definition for CRC_CR register  ********************/\r\n#define CRC_CR_RESET_Pos (0U)\r\n#define CRC_CR_RESET_Msk (0x1U << CRC_CR_RESET_Pos) /*!< 0x00000001 */\r\n#define CRC_CR_RESET     CRC_CR_RESET_Msk           /*!< RESET bit */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                             Power Control                                  */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/********************  Bit definition for PWR_CR register  ********************/\r\n#define PWR_CR_LPDS_Pos (0U)\r\n#define PWR_CR_LPDS_Msk (0x1U << PWR_CR_LPDS_Pos) /*!< 0x00000001 */\r\n#define PWR_CR_LPDS     PWR_CR_LPDS_Msk           /*!< Low-Power Deepsleep */\r\n#define PWR_CR_PDDS_Pos (1U)\r\n#define PWR_CR_PDDS_Msk (0x1U << PWR_CR_PDDS_Pos) /*!< 0x00000002 */\r\n#define PWR_CR_PDDS     PWR_CR_PDDS_Msk           /*!< Power Down Deepsleep */\r\n#define PWR_CR_CWUF_Pos (2U)\r\n#define PWR_CR_CWUF_Msk (0x1U << PWR_CR_CWUF_Pos) /*!< 0x00000004 */\r\n#define PWR_CR_CWUF     PWR_CR_CWUF_Msk           /*!< Clear Wakeup Flag */\r\n#define PWR_CR_CSBF_Pos (3U)\r\n#define PWR_CR_CSBF_Msk (0x1U << PWR_CR_CSBF_Pos) /*!< 0x00000008 */\r\n#define PWR_CR_CSBF     PWR_CR_CSBF_Msk           /*!< Clear Standby Flag */\r\n#define PWR_CR_PVDE_Pos (4U)\r\n#define PWR_CR_PVDE_Msk (0x1U << PWR_CR_PVDE_Pos) /*!< 0x00000010 */\r\n#define PWR_CR_PVDE     PWR_CR_PVDE_Msk           /*!< Power Voltage Detector Enable */\r\n\r\n#define PWR_CR_PLS_Pos (5U)\r\n#define PWR_CR_PLS_Msk (0x7U << PWR_CR_PLS_Pos) /*!< 0x000000E0 */\r\n#define PWR_CR_PLS     PWR_CR_PLS_Msk           /*!< PLS[2:0] bits (PVD Level Selection) */\r\n#define PWR_CR_PLS_0   (0x1U << PWR_CR_PLS_Pos) /*!< 0x00000020 */\r\n#define PWR_CR_PLS_1   (0x2U << PWR_CR_PLS_Pos) /*!< 0x00000040 */\r\n#define PWR_CR_PLS_2   (0x4U << PWR_CR_PLS_Pos) /*!< 0x00000080 */\r\n\r\n/*!< PVD level configuration */\r\n#define PWR_CR_PLS_LEV0 0x00000000U /*!< PVD level 2.2V */\r\n#define PWR_CR_PLS_LEV1 0x00000020U /*!< PVD level 2.3V */\r\n#define PWR_CR_PLS_LEV2 0x00000040U /*!< PVD level 2.4V */\r\n#define PWR_CR_PLS_LEV3 0x00000060U /*!< PVD level 2.5V */\r\n#define PWR_CR_PLS_LEV4 0x00000080U /*!< PVD level 2.6V */\r\n#define PWR_CR_PLS_LEV5 0x000000A0U /*!< PVD level 2.7V */\r\n#define PWR_CR_PLS_LEV6 0x000000C0U /*!< PVD level 2.8V */\r\n#define PWR_CR_PLS_LEV7 0x000000E0U /*!< PVD level 2.9V */\r\n\r\n/* Legacy defines */\r\n#define PWR_CR_PLS_2V2 PWR_CR_PLS_LEV0\r\n#define PWR_CR_PLS_2V3 PWR_CR_PLS_LEV1\r\n#define PWR_CR_PLS_2V4 PWR_CR_PLS_LEV2\r\n#define PWR_CR_PLS_2V5 PWR_CR_PLS_LEV3\r\n#define PWR_CR_PLS_2V6 PWR_CR_PLS_LEV4\r\n#define PWR_CR_PLS_2V7 PWR_CR_PLS_LEV5\r\n#define PWR_CR_PLS_2V8 PWR_CR_PLS_LEV6\r\n#define PWR_CR_PLS_2V9 PWR_CR_PLS_LEV7\r\n\r\n#define PWR_CR_DBP_Pos (8U)\r\n#define PWR_CR_DBP_Msk (0x1U << PWR_CR_DBP_Pos) /*!< 0x00000100 */\r\n#define PWR_CR_DBP     PWR_CR_DBP_Msk           /*!< Disable Backup Domain write protection */\r\n\r\n/*******************  Bit definition for PWR_CSR register  ********************/\r\n#define PWR_CSR_WUF_Pos  (0U)\r\n#define PWR_CSR_WUF_Msk  (0x1U << PWR_CSR_WUF_Pos) /*!< 0x00000001 */\r\n#define PWR_CSR_WUF      PWR_CSR_WUF_Msk           /*!< Wakeup Flag */\r\n#define PWR_CSR_SBF_Pos  (1U)\r\n#define PWR_CSR_SBF_Msk  (0x1U << PWR_CSR_SBF_Pos) /*!< 0x00000002 */\r\n#define PWR_CSR_SBF      PWR_CSR_SBF_Msk           /*!< Standby Flag */\r\n#define PWR_CSR_PVDO_Pos (2U)\r\n#define PWR_CSR_PVDO_Msk (0x1U << PWR_CSR_PVDO_Pos) /*!< 0x00000004 */\r\n#define PWR_CSR_PVDO     PWR_CSR_PVDO_Msk           /*!< PVD Output */\r\n#define PWR_CSR_EWUP_Pos (8U)\r\n#define PWR_CSR_EWUP_Msk (0x1U << PWR_CSR_EWUP_Pos) /*!< 0x00000100 */\r\n#define PWR_CSR_EWUP     PWR_CSR_EWUP_Msk           /*!< Enable WKUP pin */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                            Backup registers                                */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for BKP_DR1 register  ********************/\r\n#define BKP_DR1_D_Pos (0U)\r\n#define BKP_DR1_D_Msk (0xFFFFU << BKP_DR1_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR1_D     BKP_DR1_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR2 register  ********************/\r\n#define BKP_DR2_D_Pos (0U)\r\n#define BKP_DR2_D_Msk (0xFFFFU << BKP_DR2_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR2_D     BKP_DR2_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR3 register  ********************/\r\n#define BKP_DR3_D_Pos (0U)\r\n#define BKP_DR3_D_Msk (0xFFFFU << BKP_DR3_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR3_D     BKP_DR3_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR4 register  ********************/\r\n#define BKP_DR4_D_Pos (0U)\r\n#define BKP_DR4_D_Msk (0xFFFFU << BKP_DR4_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR4_D     BKP_DR4_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR5 register  ********************/\r\n#define BKP_DR5_D_Pos (0U)\r\n#define BKP_DR5_D_Msk (0xFFFFU << BKP_DR5_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR5_D     BKP_DR5_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR6 register  ********************/\r\n#define BKP_DR6_D_Pos (0U)\r\n#define BKP_DR6_D_Msk (0xFFFFU << BKP_DR6_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR6_D     BKP_DR6_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR7 register  ********************/\r\n#define BKP_DR7_D_Pos (0U)\r\n#define BKP_DR7_D_Msk (0xFFFFU << BKP_DR7_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR7_D     BKP_DR7_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR8 register  ********************/\r\n#define BKP_DR8_D_Pos (0U)\r\n#define BKP_DR8_D_Msk (0xFFFFU << BKP_DR8_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR8_D     BKP_DR8_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR9 register  ********************/\r\n#define BKP_DR9_D_Pos (0U)\r\n#define BKP_DR9_D_Msk (0xFFFFU << BKP_DR9_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR9_D     BKP_DR9_D_Msk              /*!< Backup data */\r\n\r\n/*******************  Bit definition for BKP_DR10 register  *******************/\r\n#define BKP_DR10_D_Pos (0U)\r\n#define BKP_DR10_D_Msk (0xFFFFU << BKP_DR10_D_Pos) /*!< 0x0000FFFF */\r\n#define BKP_DR10_D     BKP_DR10_D_Msk              /*!< Backup data */\r\n\r\n#define RTC_BKP_NUMBER 10\r\n\r\n/******************  Bit definition for BKP_RTCCR register  *******************/\r\n#define BKP_RTCCR_CAL_Pos  (0U)\r\n#define BKP_RTCCR_CAL_Msk  (0x7FU << BKP_RTCCR_CAL_Pos) /*!< 0x0000007F */\r\n#define BKP_RTCCR_CAL      BKP_RTCCR_CAL_Msk            /*!< Calibration value */\r\n#define BKP_RTCCR_CCO_Pos  (7U)\r\n#define BKP_RTCCR_CCO_Msk  (0x1U << BKP_RTCCR_CCO_Pos) /*!< 0x00000080 */\r\n#define BKP_RTCCR_CCO      BKP_RTCCR_CCO_Msk           /*!< Calibration Clock Output */\r\n#define BKP_RTCCR_ASOE_Pos (8U)\r\n#define BKP_RTCCR_ASOE_Msk (0x1U << BKP_RTCCR_ASOE_Pos) /*!< 0x00000100 */\r\n#define BKP_RTCCR_ASOE     BKP_RTCCR_ASOE_Msk           /*!< Alarm or Second Output Enable */\r\n#define BKP_RTCCR_ASOS_Pos (9U)\r\n#define BKP_RTCCR_ASOS_Msk (0x1U << BKP_RTCCR_ASOS_Pos) /*!< 0x00000200 */\r\n#define BKP_RTCCR_ASOS     BKP_RTCCR_ASOS_Msk           /*!< Alarm or Second Output Selection */\r\n\r\n/********************  Bit definition for BKP_CR register  ********************/\r\n#define BKP_CR_TPE_Pos  (0U)\r\n#define BKP_CR_TPE_Msk  (0x1U << BKP_CR_TPE_Pos) /*!< 0x00000001 */\r\n#define BKP_CR_TPE      BKP_CR_TPE_Msk           /*!< TAMPER pin enable */\r\n#define BKP_CR_TPAL_Pos (1U)\r\n#define BKP_CR_TPAL_Msk (0x1U << BKP_CR_TPAL_Pos) /*!< 0x00000002 */\r\n#define BKP_CR_TPAL     BKP_CR_TPAL_Msk           /*!< TAMPER pin active level */\r\n\r\n/*******************  Bit definition for BKP_CSR register  ********************/\r\n#define BKP_CSR_CTE_Pos  (0U)\r\n#define BKP_CSR_CTE_Msk  (0x1U << BKP_CSR_CTE_Pos) /*!< 0x00000001 */\r\n#define BKP_CSR_CTE      BKP_CSR_CTE_Msk           /*!< Clear Tamper event */\r\n#define BKP_CSR_CTI_Pos  (1U)\r\n#define BKP_CSR_CTI_Msk  (0x1U << BKP_CSR_CTI_Pos) /*!< 0x00000002 */\r\n#define BKP_CSR_CTI      BKP_CSR_CTI_Msk           /*!< Clear Tamper Interrupt */\r\n#define BKP_CSR_TPIE_Pos (2U)\r\n#define BKP_CSR_TPIE_Msk (0x1U << BKP_CSR_TPIE_Pos) /*!< 0x00000004 */\r\n#define BKP_CSR_TPIE     BKP_CSR_TPIE_Msk           /*!< TAMPER Pin interrupt enable */\r\n#define BKP_CSR_TEF_Pos  (8U)\r\n#define BKP_CSR_TEF_Msk  (0x1U << BKP_CSR_TEF_Pos) /*!< 0x00000100 */\r\n#define BKP_CSR_TEF      BKP_CSR_TEF_Msk           /*!< Tamper Event Flag */\r\n#define BKP_CSR_TIF_Pos  (9U)\r\n#define BKP_CSR_TIF_Msk  (0x1U << BKP_CSR_TIF_Pos) /*!< 0x00000200 */\r\n#define BKP_CSR_TIF      BKP_CSR_TIF_Msk           /*!< Tamper Interrupt Flag */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                         Reset and Clock Control                            */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/********************  Bit definition for RCC_CR register  ********************/\r\n#define RCC_CR_HSION_Pos   (0U)\r\n#define RCC_CR_HSION_Msk   (0x1U << RCC_CR_HSION_Pos) /*!< 0x00000001 */\r\n#define RCC_CR_HSION       RCC_CR_HSION_Msk           /*!< Internal High Speed clock enable */\r\n#define RCC_CR_HSIRDY_Pos  (1U)\r\n#define RCC_CR_HSIRDY_Msk  (0x1U << RCC_CR_HSIRDY_Pos) /*!< 0x00000002 */\r\n#define RCC_CR_HSIRDY      RCC_CR_HSIRDY_Msk           /*!< Internal High Speed clock ready flag */\r\n#define RCC_CR_HSITRIM_Pos (3U)\r\n#define RCC_CR_HSITRIM_Msk (0x1FU << RCC_CR_HSITRIM_Pos) /*!< 0x000000F8 */\r\n#define RCC_CR_HSITRIM     RCC_CR_HSITRIM_Msk            /*!< Internal High Speed clock trimming */\r\n#define RCC_CR_HSICAL_Pos  (8U)\r\n#define RCC_CR_HSICAL_Msk  (0xFFU << RCC_CR_HSICAL_Pos) /*!< 0x0000FF00 */\r\n#define RCC_CR_HSICAL      RCC_CR_HSICAL_Msk            /*!< Internal High Speed clock Calibration */\r\n#define RCC_CR_HSEON_Pos   (16U)\r\n#define RCC_CR_HSEON_Msk   (0x1U << RCC_CR_HSEON_Pos) /*!< 0x00010000 */\r\n#define RCC_CR_HSEON       RCC_CR_HSEON_Msk           /*!< External High Speed clock enable */\r\n#define RCC_CR_HSERDY_Pos  (17U)\r\n#define RCC_CR_HSERDY_Msk  (0x1U << RCC_CR_HSERDY_Pos) /*!< 0x00020000 */\r\n#define RCC_CR_HSERDY      RCC_CR_HSERDY_Msk           /*!< External High Speed clock ready flag */\r\n#define RCC_CR_HSEBYP_Pos  (18U)\r\n#define RCC_CR_HSEBYP_Msk  (0x1U << RCC_CR_HSEBYP_Pos) /*!< 0x00040000 */\r\n#define RCC_CR_HSEBYP      RCC_CR_HSEBYP_Msk           /*!< External High Speed clock Bypass */\r\n#define RCC_CR_CSSON_Pos   (19U)\r\n#define RCC_CR_CSSON_Msk   (0x1U << RCC_CR_CSSON_Pos) /*!< 0x00080000 */\r\n#define RCC_CR_CSSON       RCC_CR_CSSON_Msk           /*!< Clock Security System enable */\r\n#define RCC_CR_PLLON_Pos   (24U)\r\n#define RCC_CR_PLLON_Msk   (0x1U << RCC_CR_PLLON_Pos) /*!< 0x01000000 */\r\n#define RCC_CR_PLLON       RCC_CR_PLLON_Msk           /*!< PLL enable */\r\n#define RCC_CR_PLLRDY_Pos  (25U)\r\n#define RCC_CR_PLLRDY_Msk  (0x1U << RCC_CR_PLLRDY_Pos) /*!< 0x02000000 */\r\n#define RCC_CR_PLLRDY      RCC_CR_PLLRDY_Msk           /*!< PLL clock ready flag */\r\n\r\n/*******************  Bit definition for RCC_CFGR register  *******************/\r\n/*!< SW configuration */\r\n#define RCC_CFGR_SW_Pos (0U)\r\n#define RCC_CFGR_SW_Msk (0x3U << RCC_CFGR_SW_Pos) /*!< 0x00000003 */\r\n#define RCC_CFGR_SW     RCC_CFGR_SW_Msk           /*!< SW[1:0] bits (System clock Switch) */\r\n#define RCC_CFGR_SW_0   (0x1U << RCC_CFGR_SW_Pos) /*!< 0x00000001 */\r\n#define RCC_CFGR_SW_1   (0x2U << RCC_CFGR_SW_Pos) /*!< 0x00000002 */\r\n\r\n#define RCC_CFGR_SW_HSI 0x00000000U /*!< HSI selected as system clock */\r\n#define RCC_CFGR_SW_HSE 0x00000001U /*!< HSE selected as system clock */\r\n#define RCC_CFGR_SW_PLL 0x00000002U /*!< PLL selected as system clock */\r\n\r\n/*!< SWS configuration */\r\n#define RCC_CFGR_SWS_Pos (2U)\r\n#define RCC_CFGR_SWS_Msk (0x3U << RCC_CFGR_SWS_Pos) /*!< 0x0000000C */\r\n#define RCC_CFGR_SWS     RCC_CFGR_SWS_Msk           /*!< SWS[1:0] bits (System Clock Switch Status) */\r\n#define RCC_CFGR_SWS_0   (0x1U << RCC_CFGR_SWS_Pos) /*!< 0x00000004 */\r\n#define RCC_CFGR_SWS_1   (0x2U << RCC_CFGR_SWS_Pos) /*!< 0x00000008 */\r\n\r\n#define RCC_CFGR_SWS_HSI 0x00000000U /*!< HSI oscillator used as system clock */\r\n#define RCC_CFGR_SWS_HSE 0x00000004U /*!< HSE oscillator used as system clock */\r\n#define RCC_CFGR_SWS_PLL 0x00000008U /*!< PLL used as system clock */\r\n\r\n/*!< HPRE configuration */\r\n#define RCC_CFGR_HPRE_Pos (4U)\r\n#define RCC_CFGR_HPRE_Msk (0xFU << RCC_CFGR_HPRE_Pos) /*!< 0x000000F0 */\r\n#define RCC_CFGR_HPRE     RCC_CFGR_HPRE_Msk           /*!< HPRE[3:0] bits (AHB prescaler) */\r\n#define RCC_CFGR_HPRE_0   (0x1U << RCC_CFGR_HPRE_Pos) /*!< 0x00000010 */\r\n#define RCC_CFGR_HPRE_1   (0x2U << RCC_CFGR_HPRE_Pos) /*!< 0x00000020 */\r\n#define RCC_CFGR_HPRE_2   (0x4U << RCC_CFGR_HPRE_Pos) /*!< 0x00000040 */\r\n#define RCC_CFGR_HPRE_3   (0x8U << RCC_CFGR_HPRE_Pos) /*!< 0x00000080 */\r\n\r\n#define RCC_CFGR_HPRE_DIV1   0x00000000U /*!< SYSCLK not divided */\r\n#define RCC_CFGR_HPRE_DIV2   0x00000080U /*!< SYSCLK divided by 2 */\r\n#define RCC_CFGR_HPRE_DIV4   0x00000090U /*!< SYSCLK divided by 4 */\r\n#define RCC_CFGR_HPRE_DIV8   0x000000A0U /*!< SYSCLK divided by 8 */\r\n#define RCC_CFGR_HPRE_DIV16  0x000000B0U /*!< SYSCLK divided by 16 */\r\n#define RCC_CFGR_HPRE_DIV64  0x000000C0U /*!< SYSCLK divided by 64 */\r\n#define RCC_CFGR_HPRE_DIV128 0x000000D0U /*!< SYSCLK divided by 128 */\r\n#define RCC_CFGR_HPRE_DIV256 0x000000E0U /*!< SYSCLK divided by 256 */\r\n#define RCC_CFGR_HPRE_DIV512 0x000000F0U /*!< SYSCLK divided by 512 */\r\n\r\n/*!< PPRE1 configuration */\r\n#define RCC_CFGR_PPRE1_Pos (8U)\r\n#define RCC_CFGR_PPRE1_Msk (0x7U << RCC_CFGR_PPRE1_Pos) /*!< 0x00000700 */\r\n#define RCC_CFGR_PPRE1     RCC_CFGR_PPRE1_Msk           /*!< PRE1[2:0] bits (APB1 prescaler) */\r\n#define RCC_CFGR_PPRE1_0   (0x1U << RCC_CFGR_PPRE1_Pos) /*!< 0x00000100 */\r\n#define RCC_CFGR_PPRE1_1   (0x2U << RCC_CFGR_PPRE1_Pos) /*!< 0x00000200 */\r\n#define RCC_CFGR_PPRE1_2   (0x4U << RCC_CFGR_PPRE1_Pos) /*!< 0x00000400 */\r\n\r\n#define RCC_CFGR_PPRE1_DIV1  0x00000000U /*!< HCLK not divided */\r\n#define RCC_CFGR_PPRE1_DIV2  0x00000400U /*!< HCLK divided by 2 */\r\n#define RCC_CFGR_PPRE1_DIV4  0x00000500U /*!< HCLK divided by 4 */\r\n#define RCC_CFGR_PPRE1_DIV8  0x00000600U /*!< HCLK divided by 8 */\r\n#define RCC_CFGR_PPRE1_DIV16 0x00000700U /*!< HCLK divided by 16 */\r\n\r\n/*!< PPRE2 configuration */\r\n#define RCC_CFGR_PPRE2_Pos (11U)\r\n#define RCC_CFGR_PPRE2_Msk (0x7U << RCC_CFGR_PPRE2_Pos) /*!< 0x00003800 */\r\n#define RCC_CFGR_PPRE2     RCC_CFGR_PPRE2_Msk           /*!< PRE2[2:0] bits (APB2 prescaler) */\r\n#define RCC_CFGR_PPRE2_0   (0x1U << RCC_CFGR_PPRE2_Pos) /*!< 0x00000800 */\r\n#define RCC_CFGR_PPRE2_1   (0x2U << RCC_CFGR_PPRE2_Pos) /*!< 0x00001000 */\r\n#define RCC_CFGR_PPRE2_2   (0x4U << RCC_CFGR_PPRE2_Pos) /*!< 0x00002000 */\r\n\r\n#define RCC_CFGR_PPRE2_DIV1  0x00000000U /*!< HCLK not divided */\r\n#define RCC_CFGR_PPRE2_DIV2  0x00002000U /*!< HCLK divided by 2 */\r\n#define RCC_CFGR_PPRE2_DIV4  0x00002800U /*!< HCLK divided by 4 */\r\n#define RCC_CFGR_PPRE2_DIV8  0x00003000U /*!< HCLK divided by 8 */\r\n#define RCC_CFGR_PPRE2_DIV16 0x00003800U /*!< HCLK divided by 16 */\r\n\r\n/*!< ADCPPRE configuration */\r\n#define RCC_CFGR_ADCPRE_Pos (14U)\r\n#define RCC_CFGR_ADCPRE_Msk (0x3U << RCC_CFGR_ADCPRE_Pos) /*!< 0x0000C000 */\r\n#define RCC_CFGR_ADCPRE     RCC_CFGR_ADCPRE_Msk           /*!< ADCPRE[1:0] bits (ADC prescaler) */\r\n#define RCC_CFGR_ADCPRE_0   (0x1U << RCC_CFGR_ADCPRE_Pos) /*!< 0x00004000 */\r\n#define RCC_CFGR_ADCPRE_1   (0x2U << RCC_CFGR_ADCPRE_Pos) /*!< 0x00008000 */\r\n\r\n#define RCC_CFGR_ADCPRE_DIV2 0x00000000U /*!< PCLK2 divided by 2 */\r\n#define RCC_CFGR_ADCPRE_DIV4 0x00004000U /*!< PCLK2 divided by 4 */\r\n#define RCC_CFGR_ADCPRE_DIV6 0x00008000U /*!< PCLK2 divided by 6 */\r\n#define RCC_CFGR_ADCPRE_DIV8 0x0000C000U /*!< PCLK2 divided by 8 */\r\n\r\n#define RCC_CFGR_PLLSRC_Pos (16U)\r\n#define RCC_CFGR_PLLSRC_Msk (0x1U << RCC_CFGR_PLLSRC_Pos) /*!< 0x00010000 */\r\n#define RCC_CFGR_PLLSRC     RCC_CFGR_PLLSRC_Msk           /*!< PLL entry clock source */\r\n\r\n#define RCC_CFGR_PLLXTPRE_Pos (17U)\r\n#define RCC_CFGR_PLLXTPRE_Msk (0x1U << RCC_CFGR_PLLXTPRE_Pos) /*!< 0x00020000 */\r\n#define RCC_CFGR_PLLXTPRE     RCC_CFGR_PLLXTPRE_Msk           /*!< HSE divider for PLL entry */\r\n\r\n/*!< PLLMUL configuration */\r\n#define RCC_CFGR_PLLMULL_Pos (18U)\r\n#define RCC_CFGR_PLLMULL_Msk (0xFU << RCC_CFGR_PLLMULL_Pos) /*!< 0x003C0000 */\r\n#define RCC_CFGR_PLLMULL     RCC_CFGR_PLLMULL_Msk           /*!< PLLMUL[3:0] bits (PLL multiplication factor) */\r\n#define RCC_CFGR_PLLMULL_0   (0x1U << RCC_CFGR_PLLMULL_Pos) /*!< 0x00040000 */\r\n#define RCC_CFGR_PLLMULL_1   (0x2U << RCC_CFGR_PLLMULL_Pos) /*!< 0x00080000 */\r\n#define RCC_CFGR_PLLMULL_2   (0x4U << RCC_CFGR_PLLMULL_Pos) /*!< 0x00100000 */\r\n#define RCC_CFGR_PLLMULL_3   (0x8U << RCC_CFGR_PLLMULL_Pos) /*!< 0x00200000 */\r\n\r\n#define RCC_CFGR_PLLXTPRE_HSE      0x00000000U /*!< HSE clock not divided for PLL entry */\r\n#define RCC_CFGR_PLLXTPRE_HSE_DIV2 0x00020000U /*!< HSE clock divided by 2 for PLL entry */\r\n\r\n#define RCC_CFGR_PLLMULL2      0x00000000U /*!< PLL input clock*2 */\r\n#define RCC_CFGR_PLLMULL3_Pos  (18U)\r\n#define RCC_CFGR_PLLMULL3_Msk  (0x1U << RCC_CFGR_PLLMULL3_Pos) /*!< 0x00040000 */\r\n#define RCC_CFGR_PLLMULL3      RCC_CFGR_PLLMULL3_Msk           /*!< PLL input clock*3 */\r\n#define RCC_CFGR_PLLMULL4_Pos  (19U)\r\n#define RCC_CFGR_PLLMULL4_Msk  (0x1U << RCC_CFGR_PLLMULL4_Pos) /*!< 0x00080000 */\r\n#define RCC_CFGR_PLLMULL4      RCC_CFGR_PLLMULL4_Msk           /*!< PLL input clock*4 */\r\n#define RCC_CFGR_PLLMULL5_Pos  (18U)\r\n#define RCC_CFGR_PLLMULL5_Msk  (0x3U << RCC_CFGR_PLLMULL5_Pos) /*!< 0x000C0000 */\r\n#define RCC_CFGR_PLLMULL5      RCC_CFGR_PLLMULL5_Msk           /*!< PLL input clock*5 */\r\n#define RCC_CFGR_PLLMULL6_Pos  (20U)\r\n#define RCC_CFGR_PLLMULL6_Msk  (0x1U << RCC_CFGR_PLLMULL6_Pos) /*!< 0x00100000 */\r\n#define RCC_CFGR_PLLMULL6      RCC_CFGR_PLLMULL6_Msk           /*!< PLL input clock*6 */\r\n#define RCC_CFGR_PLLMULL7_Pos  (18U)\r\n#define RCC_CFGR_PLLMULL7_Msk  (0x5U << RCC_CFGR_PLLMULL7_Pos) /*!< 0x00140000 */\r\n#define RCC_CFGR_PLLMULL7      RCC_CFGR_PLLMULL7_Msk           /*!< PLL input clock*7 */\r\n#define RCC_CFGR_PLLMULL8_Pos  (19U)\r\n#define RCC_CFGR_PLLMULL8_Msk  (0x3U << RCC_CFGR_PLLMULL8_Pos) /*!< 0x00180000 */\r\n#define RCC_CFGR_PLLMULL8      RCC_CFGR_PLLMULL8_Msk           /*!< PLL input clock*8 */\r\n#define RCC_CFGR_PLLMULL9_Pos  (18U)\r\n#define RCC_CFGR_PLLMULL9_Msk  (0x7U << RCC_CFGR_PLLMULL9_Pos) /*!< 0x001C0000 */\r\n#define RCC_CFGR_PLLMULL9      RCC_CFGR_PLLMULL9_Msk           /*!< PLL input clock*9 */\r\n#define RCC_CFGR_PLLMULL10_Pos (21U)\r\n#define RCC_CFGR_PLLMULL10_Msk (0x1U << RCC_CFGR_PLLMULL10_Pos) /*!< 0x00200000 */\r\n#define RCC_CFGR_PLLMULL10     RCC_CFGR_PLLMULL10_Msk           /*!< PLL input clock10 */\r\n#define RCC_CFGR_PLLMULL11_Pos (18U)\r\n#define RCC_CFGR_PLLMULL11_Msk (0x9U << RCC_CFGR_PLLMULL11_Pos) /*!< 0x00240000 */\r\n#define RCC_CFGR_PLLMULL11     RCC_CFGR_PLLMULL11_Msk           /*!< PLL input clock*11 */\r\n#define RCC_CFGR_PLLMULL12_Pos (19U)\r\n#define RCC_CFGR_PLLMULL12_Msk (0x5U << RCC_CFGR_PLLMULL12_Pos) /*!< 0x00280000 */\r\n#define RCC_CFGR_PLLMULL12     RCC_CFGR_PLLMULL12_Msk           /*!< PLL input clock*12 */\r\n#define RCC_CFGR_PLLMULL13_Pos (18U)\r\n#define RCC_CFGR_PLLMULL13_Msk (0xBU << RCC_CFGR_PLLMULL13_Pos) /*!< 0x002C0000 */\r\n#define RCC_CFGR_PLLMULL13     RCC_CFGR_PLLMULL13_Msk           /*!< PLL input clock*13 */\r\n#define RCC_CFGR_PLLMULL14_Pos (20U)\r\n#define RCC_CFGR_PLLMULL14_Msk (0x3U << RCC_CFGR_PLLMULL14_Pos) /*!< 0x00300000 */\r\n#define RCC_CFGR_PLLMULL14     RCC_CFGR_PLLMULL14_Msk           /*!< PLL input clock*14 */\r\n#define RCC_CFGR_PLLMULL15_Pos (18U)\r\n#define RCC_CFGR_PLLMULL15_Msk (0xDU << RCC_CFGR_PLLMULL15_Pos) /*!< 0x00340000 */\r\n#define RCC_CFGR_PLLMULL15     RCC_CFGR_PLLMULL15_Msk           /*!< PLL input clock*15 */\r\n#define RCC_CFGR_PLLMULL16_Pos (19U)\r\n#define RCC_CFGR_PLLMULL16_Msk (0x7U << RCC_CFGR_PLLMULL16_Pos) /*!< 0x00380000 */\r\n#define RCC_CFGR_PLLMULL16     RCC_CFGR_PLLMULL16_Msk           /*!< PLL input clock*16 */\r\n#define RCC_CFGR_USBPRE_Pos    (22U)\r\n#define RCC_CFGR_USBPRE_Msk    (0x1U << RCC_CFGR_USBPRE_Pos) /*!< 0x00400000 */\r\n#define RCC_CFGR_USBPRE        RCC_CFGR_USBPRE_Msk           /*!< USB Device prescaler */\r\n\r\n/*!< MCO configuration */\r\n#define RCC_CFGR_MCO_Pos (24U)\r\n#define RCC_CFGR_MCO_Msk (0x7U << RCC_CFGR_MCO_Pos) /*!< 0x07000000 */\r\n#define RCC_CFGR_MCO     RCC_CFGR_MCO_Msk           /*!< MCO[2:0] bits (Microcontroller Clock Output) */\r\n#define RCC_CFGR_MCO_0   (0x1U << RCC_CFGR_MCO_Pos) /*!< 0x01000000 */\r\n#define RCC_CFGR_MCO_1   (0x2U << RCC_CFGR_MCO_Pos) /*!< 0x02000000 */\r\n#define RCC_CFGR_MCO_2   (0x4U << RCC_CFGR_MCO_Pos) /*!< 0x04000000 */\r\n\r\n#define RCC_CFGR_MCO_NOCLOCK     0x00000000U /*!< No clock */\r\n#define RCC_CFGR_MCO_SYSCLK      0x04000000U /*!< System clock selected as MCO source */\r\n#define RCC_CFGR_MCO_HSI         0x05000000U /*!< HSI clock selected as MCO source */\r\n#define RCC_CFGR_MCO_HSE         0x06000000U /*!< HSE clock selected as MCO source  */\r\n#define RCC_CFGR_MCO_PLLCLK_DIV2 0x07000000U /*!< PLL clock divided by 2 selected as MCO source */\r\n\r\n/* Reference defines */\r\n#define RCC_CFGR_MCOSEL          RCC_CFGR_MCO\r\n#define RCC_CFGR_MCOSEL_0        RCC_CFGR_MCO_0\r\n#define RCC_CFGR_MCOSEL_1        RCC_CFGR_MCO_1\r\n#define RCC_CFGR_MCOSEL_2        RCC_CFGR_MCO_2\r\n#define RCC_CFGR_MCOSEL_NOCLOCK  RCC_CFGR_MCO_NOCLOCK\r\n#define RCC_CFGR_MCOSEL_SYSCLK   RCC_CFGR_MCO_SYSCLK\r\n#define RCC_CFGR_MCOSEL_HSI      RCC_CFGR_MCO_HSI\r\n#define RCC_CFGR_MCOSEL_HSE      RCC_CFGR_MCO_HSE\r\n#define RCC_CFGR_MCOSEL_PLL_DIV2 RCC_CFGR_MCO_PLLCLK_DIV2\r\n\r\n/*!<******************  Bit definition for RCC_CIR register  ********************/\r\n#define RCC_CIR_LSIRDYF_Pos  (0U)\r\n#define RCC_CIR_LSIRDYF_Msk  (0x1U << RCC_CIR_LSIRDYF_Pos) /*!< 0x00000001 */\r\n#define RCC_CIR_LSIRDYF      RCC_CIR_LSIRDYF_Msk           /*!< LSI Ready Interrupt flag */\r\n#define RCC_CIR_LSERDYF_Pos  (1U)\r\n#define RCC_CIR_LSERDYF_Msk  (0x1U << RCC_CIR_LSERDYF_Pos) /*!< 0x00000002 */\r\n#define RCC_CIR_LSERDYF      RCC_CIR_LSERDYF_Msk           /*!< LSE Ready Interrupt flag */\r\n#define RCC_CIR_HSIRDYF_Pos  (2U)\r\n#define RCC_CIR_HSIRDYF_Msk  (0x1U << RCC_CIR_HSIRDYF_Pos) /*!< 0x00000004 */\r\n#define RCC_CIR_HSIRDYF      RCC_CIR_HSIRDYF_Msk           /*!< HSI Ready Interrupt flag */\r\n#define RCC_CIR_HSERDYF_Pos  (3U)\r\n#define RCC_CIR_HSERDYF_Msk  (0x1U << RCC_CIR_HSERDYF_Pos) /*!< 0x00000008 */\r\n#define RCC_CIR_HSERDYF      RCC_CIR_HSERDYF_Msk           /*!< HSE Ready Interrupt flag */\r\n#define RCC_CIR_PLLRDYF_Pos  (4U)\r\n#define RCC_CIR_PLLRDYF_Msk  (0x1U << RCC_CIR_PLLRDYF_Pos) /*!< 0x00000010 */\r\n#define RCC_CIR_PLLRDYF      RCC_CIR_PLLRDYF_Msk           /*!< PLL Ready Interrupt flag */\r\n#define RCC_CIR_CSSF_Pos     (7U)\r\n#define RCC_CIR_CSSF_Msk     (0x1U << RCC_CIR_CSSF_Pos) /*!< 0x00000080 */\r\n#define RCC_CIR_CSSF         RCC_CIR_CSSF_Msk           /*!< Clock Security System Interrupt flag */\r\n#define RCC_CIR_LSIRDYIE_Pos (8U)\r\n#define RCC_CIR_LSIRDYIE_Msk (0x1U << RCC_CIR_LSIRDYIE_Pos) /*!< 0x00000100 */\r\n#define RCC_CIR_LSIRDYIE     RCC_CIR_LSIRDYIE_Msk           /*!< LSI Ready Interrupt Enable */\r\n#define RCC_CIR_LSERDYIE_Pos (9U)\r\n#define RCC_CIR_LSERDYIE_Msk (0x1U << RCC_CIR_LSERDYIE_Pos) /*!< 0x00000200 */\r\n#define RCC_CIR_LSERDYIE     RCC_CIR_LSERDYIE_Msk           /*!< LSE Ready Interrupt Enable */\r\n#define RCC_CIR_HSIRDYIE_Pos (10U)\r\n#define RCC_CIR_HSIRDYIE_Msk (0x1U << RCC_CIR_HSIRDYIE_Pos) /*!< 0x00000400 */\r\n#define RCC_CIR_HSIRDYIE     RCC_CIR_HSIRDYIE_Msk           /*!< HSI Ready Interrupt Enable */\r\n#define RCC_CIR_HSERDYIE_Pos (11U)\r\n#define RCC_CIR_HSERDYIE_Msk (0x1U << RCC_CIR_HSERDYIE_Pos) /*!< 0x00000800 */\r\n#define RCC_CIR_HSERDYIE     RCC_CIR_HSERDYIE_Msk           /*!< HSE Ready Interrupt Enable */\r\n#define RCC_CIR_PLLRDYIE_Pos (12U)\r\n#define RCC_CIR_PLLRDYIE_Msk (0x1U << RCC_CIR_PLLRDYIE_Pos) /*!< 0x00001000 */\r\n#define RCC_CIR_PLLRDYIE     RCC_CIR_PLLRDYIE_Msk           /*!< PLL Ready Interrupt Enable */\r\n#define RCC_CIR_LSIRDYC_Pos  (16U)\r\n#define RCC_CIR_LSIRDYC_Msk  (0x1U << RCC_CIR_LSIRDYC_Pos) /*!< 0x00010000 */\r\n#define RCC_CIR_LSIRDYC      RCC_CIR_LSIRDYC_Msk           /*!< LSI Ready Interrupt Clear */\r\n#define RCC_CIR_LSERDYC_Pos  (17U)\r\n#define RCC_CIR_LSERDYC_Msk  (0x1U << RCC_CIR_LSERDYC_Pos) /*!< 0x00020000 */\r\n#define RCC_CIR_LSERDYC      RCC_CIR_LSERDYC_Msk           /*!< LSE Ready Interrupt Clear */\r\n#define RCC_CIR_HSIRDYC_Pos  (18U)\r\n#define RCC_CIR_HSIRDYC_Msk  (0x1U << RCC_CIR_HSIRDYC_Pos) /*!< 0x00040000 */\r\n#define RCC_CIR_HSIRDYC      RCC_CIR_HSIRDYC_Msk           /*!< HSI Ready Interrupt Clear */\r\n#define RCC_CIR_HSERDYC_Pos  (19U)\r\n#define RCC_CIR_HSERDYC_Msk  (0x1U << RCC_CIR_HSERDYC_Pos) /*!< 0x00080000 */\r\n#define RCC_CIR_HSERDYC      RCC_CIR_HSERDYC_Msk           /*!< HSE Ready Interrupt Clear */\r\n#define RCC_CIR_PLLRDYC_Pos  (20U)\r\n#define RCC_CIR_PLLRDYC_Msk  (0x1U << RCC_CIR_PLLRDYC_Pos) /*!< 0x00100000 */\r\n#define RCC_CIR_PLLRDYC      RCC_CIR_PLLRDYC_Msk           /*!< PLL Ready Interrupt Clear */\r\n#define RCC_CIR_CSSC_Pos     (23U)\r\n#define RCC_CIR_CSSC_Msk     (0x1U << RCC_CIR_CSSC_Pos) /*!< 0x00800000 */\r\n#define RCC_CIR_CSSC         RCC_CIR_CSSC_Msk           /*!< Clock Security System Interrupt Clear */\r\n\r\n/*****************  Bit definition for RCC_APB2RSTR register  *****************/\r\n#define RCC_APB2RSTR_AFIORST_Pos (0U)\r\n#define RCC_APB2RSTR_AFIORST_Msk (0x1U << RCC_APB2RSTR_AFIORST_Pos) /*!< 0x00000001 */\r\n#define RCC_APB2RSTR_AFIORST     RCC_APB2RSTR_AFIORST_Msk           /*!< Alternate Function I/O reset */\r\n#define RCC_APB2RSTR_IOPARST_Pos (2U)\r\n#define RCC_APB2RSTR_IOPARST_Msk (0x1U << RCC_APB2RSTR_IOPARST_Pos) /*!< 0x00000004 */\r\n#define RCC_APB2RSTR_IOPARST     RCC_APB2RSTR_IOPARST_Msk           /*!< I/O port A reset */\r\n#define RCC_APB2RSTR_IOPBRST_Pos (3U)\r\n#define RCC_APB2RSTR_IOPBRST_Msk (0x1U << RCC_APB2RSTR_IOPBRST_Pos) /*!< 0x00000008 */\r\n#define RCC_APB2RSTR_IOPBRST     RCC_APB2RSTR_IOPBRST_Msk           /*!< I/O port B reset */\r\n#define RCC_APB2RSTR_IOPCRST_Pos (4U)\r\n#define RCC_APB2RSTR_IOPCRST_Msk (0x1U << RCC_APB2RSTR_IOPCRST_Pos) /*!< 0x00000010 */\r\n#define RCC_APB2RSTR_IOPCRST     RCC_APB2RSTR_IOPCRST_Msk           /*!< I/O port C reset */\r\n#define RCC_APB2RSTR_IOPDRST_Pos (5U)\r\n#define RCC_APB2RSTR_IOPDRST_Msk (0x1U << RCC_APB2RSTR_IOPDRST_Pos) /*!< 0x00000020 */\r\n#define RCC_APB2RSTR_IOPDRST     RCC_APB2RSTR_IOPDRST_Msk           /*!< I/O port D reset */\r\n#define RCC_APB2RSTR_ADC1RST_Pos (9U)\r\n#define RCC_APB2RSTR_ADC1RST_Msk (0x1U << RCC_APB2RSTR_ADC1RST_Pos) /*!< 0x00000200 */\r\n#define RCC_APB2RSTR_ADC1RST     RCC_APB2RSTR_ADC1RST_Msk           /*!< ADC 1 interface reset */\r\n\r\n#define RCC_APB2RSTR_ADC2RST_Pos (10U)\r\n#define RCC_APB2RSTR_ADC2RST_Msk (0x1U << RCC_APB2RSTR_ADC2RST_Pos) /*!< 0x00000400 */\r\n#define RCC_APB2RSTR_ADC2RST     RCC_APB2RSTR_ADC2RST_Msk           /*!< ADC 2 interface reset */\r\n\r\n#define RCC_APB2RSTR_TIM1RST_Pos   (11U)\r\n#define RCC_APB2RSTR_TIM1RST_Msk   (0x1U << RCC_APB2RSTR_TIM1RST_Pos) /*!< 0x00000800 */\r\n#define RCC_APB2RSTR_TIM1RST       RCC_APB2RSTR_TIM1RST_Msk           /*!< TIM1 Timer reset */\r\n#define RCC_APB2RSTR_SPI1RST_Pos   (12U)\r\n#define RCC_APB2RSTR_SPI1RST_Msk   (0x1U << RCC_APB2RSTR_SPI1RST_Pos) /*!< 0x00001000 */\r\n#define RCC_APB2RSTR_SPI1RST       RCC_APB2RSTR_SPI1RST_Msk           /*!< SPI 1 reset */\r\n#define RCC_APB2RSTR_USART1RST_Pos (14U)\r\n#define RCC_APB2RSTR_USART1RST_Msk (0x1U << RCC_APB2RSTR_USART1RST_Pos) /*!< 0x00004000 */\r\n#define RCC_APB2RSTR_USART1RST     RCC_APB2RSTR_USART1RST_Msk           /*!< USART1 reset */\r\n\r\n#define RCC_APB2RSTR_IOPERST_Pos (6U)\r\n#define RCC_APB2RSTR_IOPERST_Msk (0x1U << RCC_APB2RSTR_IOPERST_Pos) /*!< 0x00000040 */\r\n#define RCC_APB2RSTR_IOPERST     RCC_APB2RSTR_IOPERST_Msk           /*!< I/O port E reset */\r\n\r\n/*****************  Bit definition for RCC_APB1RSTR register  *****************/\r\n#define RCC_APB1RSTR_TIM2RST_Pos   (0U)\r\n#define RCC_APB1RSTR_TIM2RST_Msk   (0x1U << RCC_APB1RSTR_TIM2RST_Pos) /*!< 0x00000001 */\r\n#define RCC_APB1RSTR_TIM2RST       RCC_APB1RSTR_TIM2RST_Msk           /*!< Timer 2 reset */\r\n#define RCC_APB1RSTR_TIM3RST_Pos   (1U)\r\n#define RCC_APB1RSTR_TIM3RST_Msk   (0x1U << RCC_APB1RSTR_TIM3RST_Pos) /*!< 0x00000002 */\r\n#define RCC_APB1RSTR_TIM3RST       RCC_APB1RSTR_TIM3RST_Msk           /*!< Timer 3 reset */\r\n#define RCC_APB1RSTR_WWDGRST_Pos   (11U)\r\n#define RCC_APB1RSTR_WWDGRST_Msk   (0x1U << RCC_APB1RSTR_WWDGRST_Pos) /*!< 0x00000800 */\r\n#define RCC_APB1RSTR_WWDGRST       RCC_APB1RSTR_WWDGRST_Msk           /*!< Window Watchdog reset */\r\n#define RCC_APB1RSTR_USART2RST_Pos (17U)\r\n#define RCC_APB1RSTR_USART2RST_Msk (0x1U << RCC_APB1RSTR_USART2RST_Pos) /*!< 0x00020000 */\r\n#define RCC_APB1RSTR_USART2RST     RCC_APB1RSTR_USART2RST_Msk           /*!< USART 2 reset */\r\n#define RCC_APB1RSTR_I2C1RST_Pos   (21U)\r\n#define RCC_APB1RSTR_I2C1RST_Msk   (0x1U << RCC_APB1RSTR_I2C1RST_Pos) /*!< 0x00200000 */\r\n#define RCC_APB1RSTR_I2C1RST       RCC_APB1RSTR_I2C1RST_Msk           /*!< I2C 1 reset */\r\n\r\n#define RCC_APB1RSTR_CAN1RST_Pos (25U)\r\n#define RCC_APB1RSTR_CAN1RST_Msk (0x1U << RCC_APB1RSTR_CAN1RST_Pos) /*!< 0x02000000 */\r\n#define RCC_APB1RSTR_CAN1RST     RCC_APB1RSTR_CAN1RST_Msk           /*!< CAN1 reset */\r\n\r\n#define RCC_APB1RSTR_BKPRST_Pos (27U)\r\n#define RCC_APB1RSTR_BKPRST_Msk (0x1U << RCC_APB1RSTR_BKPRST_Pos) /*!< 0x08000000 */\r\n#define RCC_APB1RSTR_BKPRST     RCC_APB1RSTR_BKPRST_Msk           /*!< Backup interface reset */\r\n#define RCC_APB1RSTR_PWRRST_Pos (28U)\r\n#define RCC_APB1RSTR_PWRRST_Msk (0x1U << RCC_APB1RSTR_PWRRST_Pos) /*!< 0x10000000 */\r\n#define RCC_APB1RSTR_PWRRST     RCC_APB1RSTR_PWRRST_Msk           /*!< Power interface reset */\r\n\r\n#define RCC_APB1RSTR_TIM4RST_Pos   (2U)\r\n#define RCC_APB1RSTR_TIM4RST_Msk   (0x1U << RCC_APB1RSTR_TIM4RST_Pos) /*!< 0x00000004 */\r\n#define RCC_APB1RSTR_TIM4RST       RCC_APB1RSTR_TIM4RST_Msk           /*!< Timer 4 reset */\r\n#define RCC_APB1RSTR_SPI2RST_Pos   (14U)\r\n#define RCC_APB1RSTR_SPI2RST_Msk   (0x1U << RCC_APB1RSTR_SPI2RST_Pos) /*!< 0x00004000 */\r\n#define RCC_APB1RSTR_SPI2RST       RCC_APB1RSTR_SPI2RST_Msk           /*!< SPI 2 reset */\r\n#define RCC_APB1RSTR_USART3RST_Pos (18U)\r\n#define RCC_APB1RSTR_USART3RST_Msk (0x1U << RCC_APB1RSTR_USART3RST_Pos) /*!< 0x00040000 */\r\n#define RCC_APB1RSTR_USART3RST     RCC_APB1RSTR_USART3RST_Msk           /*!< USART 3 reset */\r\n#define RCC_APB1RSTR_I2C2RST_Pos   (22U)\r\n#define RCC_APB1RSTR_I2C2RST_Msk   (0x1U << RCC_APB1RSTR_I2C2RST_Pos) /*!< 0x00400000 */\r\n#define RCC_APB1RSTR_I2C2RST       RCC_APB1RSTR_I2C2RST_Msk           /*!< I2C 2 reset */\r\n\r\n#define RCC_APB1RSTR_USBRST_Pos (23U)\r\n#define RCC_APB1RSTR_USBRST_Msk (0x1U << RCC_APB1RSTR_USBRST_Pos) /*!< 0x00800000 */\r\n#define RCC_APB1RSTR_USBRST     RCC_APB1RSTR_USBRST_Msk           /*!< USB Device reset */\r\n\r\n/******************  Bit definition for RCC_AHBENR register  ******************/\r\n#define RCC_AHBENR_DMA1EN_Pos  (0U)\r\n#define RCC_AHBENR_DMA1EN_Msk  (0x1U << RCC_AHBENR_DMA1EN_Pos) /*!< 0x00000001 */\r\n#define RCC_AHBENR_DMA1EN      RCC_AHBENR_DMA1EN_Msk           /*!< DMA1 clock enable */\r\n#define RCC_AHBENR_SRAMEN_Pos  (2U)\r\n#define RCC_AHBENR_SRAMEN_Msk  (0x1U << RCC_AHBENR_SRAMEN_Pos) /*!< 0x00000004 */\r\n#define RCC_AHBENR_SRAMEN      RCC_AHBENR_SRAMEN_Msk           /*!< SRAM interface clock enable */\r\n#define RCC_AHBENR_FLITFEN_Pos (4U)\r\n#define RCC_AHBENR_FLITFEN_Msk (0x1U << RCC_AHBENR_FLITFEN_Pos) /*!< 0x00000010 */\r\n#define RCC_AHBENR_FLITFEN     RCC_AHBENR_FLITFEN_Msk           /*!< FLITF clock enable */\r\n#define RCC_AHBENR_CRCEN_Pos   (6U)\r\n#define RCC_AHBENR_CRCEN_Msk   (0x1U << RCC_AHBENR_CRCEN_Pos) /*!< 0x00000040 */\r\n#define RCC_AHBENR_CRCEN       RCC_AHBENR_CRCEN_Msk           /*!< CRC clock enable */\r\n\r\n/******************  Bit definition for RCC_APB2ENR register  *****************/\r\n#define RCC_APB2ENR_AFIOEN_Pos (0U)\r\n#define RCC_APB2ENR_AFIOEN_Msk (0x1U << RCC_APB2ENR_AFIOEN_Pos) /*!< 0x00000001 */\r\n#define RCC_APB2ENR_AFIOEN     RCC_APB2ENR_AFIOEN_Msk           /*!< Alternate Function I/O clock enable */\r\n#define RCC_APB2ENR_IOPAEN_Pos (2U)\r\n#define RCC_APB2ENR_IOPAEN_Msk (0x1U << RCC_APB2ENR_IOPAEN_Pos) /*!< 0x00000004 */\r\n#define RCC_APB2ENR_IOPAEN     RCC_APB2ENR_IOPAEN_Msk           /*!< I/O port A clock enable */\r\n#define RCC_APB2ENR_IOPBEN_Pos (3U)\r\n#define RCC_APB2ENR_IOPBEN_Msk (0x1U << RCC_APB2ENR_IOPBEN_Pos) /*!< 0x00000008 */\r\n#define RCC_APB2ENR_IOPBEN     RCC_APB2ENR_IOPBEN_Msk           /*!< I/O port B clock enable */\r\n#define RCC_APB2ENR_IOPCEN_Pos (4U)\r\n#define RCC_APB2ENR_IOPCEN_Msk (0x1U << RCC_APB2ENR_IOPCEN_Pos) /*!< 0x00000010 */\r\n#define RCC_APB2ENR_IOPCEN     RCC_APB2ENR_IOPCEN_Msk           /*!< I/O port C clock enable */\r\n#define RCC_APB2ENR_IOPDEN_Pos (5U)\r\n#define RCC_APB2ENR_IOPDEN_Msk (0x1U << RCC_APB2ENR_IOPDEN_Pos) /*!< 0x00000020 */\r\n#define RCC_APB2ENR_IOPDEN     RCC_APB2ENR_IOPDEN_Msk           /*!< I/O port D clock enable */\r\n#define RCC_APB2ENR_ADC1EN_Pos (9U)\r\n#define RCC_APB2ENR_ADC1EN_Msk (0x1U << RCC_APB2ENR_ADC1EN_Pos) /*!< 0x00000200 */\r\n#define RCC_APB2ENR_ADC1EN     RCC_APB2ENR_ADC1EN_Msk           /*!< ADC 1 interface clock enable */\r\n\r\n#define RCC_APB2ENR_ADC2EN_Pos (10U)\r\n#define RCC_APB2ENR_ADC2EN_Msk (0x1U << RCC_APB2ENR_ADC2EN_Pos) /*!< 0x00000400 */\r\n#define RCC_APB2ENR_ADC2EN     RCC_APB2ENR_ADC2EN_Msk           /*!< ADC 2 interface clock enable */\r\n\r\n#define RCC_APB2ENR_TIM1EN_Pos   (11U)\r\n#define RCC_APB2ENR_TIM1EN_Msk   (0x1U << RCC_APB2ENR_TIM1EN_Pos) /*!< 0x00000800 */\r\n#define RCC_APB2ENR_TIM1EN       RCC_APB2ENR_TIM1EN_Msk           /*!< TIM1 Timer clock enable */\r\n#define RCC_APB2ENR_SPI1EN_Pos   (12U)\r\n#define RCC_APB2ENR_SPI1EN_Msk   (0x1U << RCC_APB2ENR_SPI1EN_Pos) /*!< 0x00001000 */\r\n#define RCC_APB2ENR_SPI1EN       RCC_APB2ENR_SPI1EN_Msk           /*!< SPI 1 clock enable */\r\n#define RCC_APB2ENR_USART1EN_Pos (14U)\r\n#define RCC_APB2ENR_USART1EN_Msk (0x1U << RCC_APB2ENR_USART1EN_Pos) /*!< 0x00004000 */\r\n#define RCC_APB2ENR_USART1EN     RCC_APB2ENR_USART1EN_Msk           /*!< USART1 clock enable */\r\n\r\n#define RCC_APB2ENR_IOPEEN_Pos (6U)\r\n#define RCC_APB2ENR_IOPEEN_Msk (0x1U << RCC_APB2ENR_IOPEEN_Pos) /*!< 0x00000040 */\r\n#define RCC_APB2ENR_IOPEEN     RCC_APB2ENR_IOPEEN_Msk           /*!< I/O port E clock enable */\r\n\r\n/*****************  Bit definition for RCC_APB1ENR register  ******************/\r\n#define RCC_APB1ENR_TIM2EN_Pos   (0U)\r\n#define RCC_APB1ENR_TIM2EN_Msk   (0x1U << RCC_APB1ENR_TIM2EN_Pos) /*!< 0x00000001 */\r\n#define RCC_APB1ENR_TIM2EN       RCC_APB1ENR_TIM2EN_Msk           /*!< Timer 2 clock enabled*/\r\n#define RCC_APB1ENR_TIM3EN_Pos   (1U)\r\n#define RCC_APB1ENR_TIM3EN_Msk   (0x1U << RCC_APB1ENR_TIM3EN_Pos) /*!< 0x00000002 */\r\n#define RCC_APB1ENR_TIM3EN       RCC_APB1ENR_TIM3EN_Msk           /*!< Timer 3 clock enable */\r\n#define RCC_APB1ENR_WWDGEN_Pos   (11U)\r\n#define RCC_APB1ENR_WWDGEN_Msk   (0x1U << RCC_APB1ENR_WWDGEN_Pos) /*!< 0x00000800 */\r\n#define RCC_APB1ENR_WWDGEN       RCC_APB1ENR_WWDGEN_Msk           /*!< Window Watchdog clock enable */\r\n#define RCC_APB1ENR_USART2EN_Pos (17U)\r\n#define RCC_APB1ENR_USART2EN_Msk (0x1U << RCC_APB1ENR_USART2EN_Pos) /*!< 0x00020000 */\r\n#define RCC_APB1ENR_USART2EN     RCC_APB1ENR_USART2EN_Msk           /*!< USART 2 clock enable */\r\n#define RCC_APB1ENR_I2C1EN_Pos   (21U)\r\n#define RCC_APB1ENR_I2C1EN_Msk   (0x1U << RCC_APB1ENR_I2C1EN_Pos) /*!< 0x00200000 */\r\n#define RCC_APB1ENR_I2C1EN       RCC_APB1ENR_I2C1EN_Msk           /*!< I2C 1 clock enable */\r\n\r\n#define RCC_APB1ENR_CAN1EN_Pos (25U)\r\n#define RCC_APB1ENR_CAN1EN_Msk (0x1U << RCC_APB1ENR_CAN1EN_Pos) /*!< 0x02000000 */\r\n#define RCC_APB1ENR_CAN1EN     RCC_APB1ENR_CAN1EN_Msk           /*!< CAN1 clock enable */\r\n\r\n#define RCC_APB1ENR_BKPEN_Pos (27U)\r\n#define RCC_APB1ENR_BKPEN_Msk (0x1U << RCC_APB1ENR_BKPEN_Pos) /*!< 0x08000000 */\r\n#define RCC_APB1ENR_BKPEN     RCC_APB1ENR_BKPEN_Msk           /*!< Backup interface clock enable */\r\n#define RCC_APB1ENR_PWREN_Pos (28U)\r\n#define RCC_APB1ENR_PWREN_Msk (0x1U << RCC_APB1ENR_PWREN_Pos) /*!< 0x10000000 */\r\n#define RCC_APB1ENR_PWREN     RCC_APB1ENR_PWREN_Msk           /*!< Power interface clock enable */\r\n\r\n#define RCC_APB1ENR_TIM4EN_Pos   (2U)\r\n#define RCC_APB1ENR_TIM4EN_Msk   (0x1U << RCC_APB1ENR_TIM4EN_Pos) /*!< 0x00000004 */\r\n#define RCC_APB1ENR_TIM4EN       RCC_APB1ENR_TIM4EN_Msk           /*!< Timer 4 clock enable */\r\n#define RCC_APB1ENR_SPI2EN_Pos   (14U)\r\n#define RCC_APB1ENR_SPI2EN_Msk   (0x1U << RCC_APB1ENR_SPI2EN_Pos) /*!< 0x00004000 */\r\n#define RCC_APB1ENR_SPI2EN       RCC_APB1ENR_SPI2EN_Msk           /*!< SPI 2 clock enable */\r\n#define RCC_APB1ENR_USART3EN_Pos (18U)\r\n#define RCC_APB1ENR_USART3EN_Msk (0x1U << RCC_APB1ENR_USART3EN_Pos) /*!< 0x00040000 */\r\n#define RCC_APB1ENR_USART3EN     RCC_APB1ENR_USART3EN_Msk           /*!< USART 3 clock enable */\r\n#define RCC_APB1ENR_I2C2EN_Pos   (22U)\r\n#define RCC_APB1ENR_I2C2EN_Msk   (0x1U << RCC_APB1ENR_I2C2EN_Pos) /*!< 0x00400000 */\r\n#define RCC_APB1ENR_I2C2EN       RCC_APB1ENR_I2C2EN_Msk           /*!< I2C 2 clock enable */\r\n\r\n#define RCC_APB1ENR_USBEN_Pos (23U)\r\n#define RCC_APB1ENR_USBEN_Msk (0x1U << RCC_APB1ENR_USBEN_Pos) /*!< 0x00800000 */\r\n#define RCC_APB1ENR_USBEN     RCC_APB1ENR_USBEN_Msk           /*!< USB Device clock enable */\r\n\r\n/*******************  Bit definition for RCC_BDCR register  *******************/\r\n#define RCC_BDCR_LSEON_Pos  (0U)\r\n#define RCC_BDCR_LSEON_Msk  (0x1U << RCC_BDCR_LSEON_Pos) /*!< 0x00000001 */\r\n#define RCC_BDCR_LSEON      RCC_BDCR_LSEON_Msk           /*!< External Low Speed oscillator enable */\r\n#define RCC_BDCR_LSERDY_Pos (1U)\r\n#define RCC_BDCR_LSERDY_Msk (0x1U << RCC_BDCR_LSERDY_Pos) /*!< 0x00000002 */\r\n#define RCC_BDCR_LSERDY     RCC_BDCR_LSERDY_Msk           /*!< External Low Speed oscillator Ready */\r\n#define RCC_BDCR_LSEBYP_Pos (2U)\r\n#define RCC_BDCR_LSEBYP_Msk (0x1U << RCC_BDCR_LSEBYP_Pos) /*!< 0x00000004 */\r\n#define RCC_BDCR_LSEBYP     RCC_BDCR_LSEBYP_Msk           /*!< External Low Speed oscillator Bypass */\r\n\r\n#define RCC_BDCR_RTCSEL_Pos (8U)\r\n#define RCC_BDCR_RTCSEL_Msk (0x3U << RCC_BDCR_RTCSEL_Pos) /*!< 0x00000300 */\r\n#define RCC_BDCR_RTCSEL     RCC_BDCR_RTCSEL_Msk           /*!< RTCSEL[1:0] bits (RTC clock source selection) */\r\n#define RCC_BDCR_RTCSEL_0   (0x1U << RCC_BDCR_RTCSEL_Pos) /*!< 0x00000100 */\r\n#define RCC_BDCR_RTCSEL_1   (0x2U << RCC_BDCR_RTCSEL_Pos) /*!< 0x00000200 */\r\n\r\n/*!< RTC congiguration */\r\n#define RCC_BDCR_RTCSEL_NOCLOCK 0x00000000U /*!< No clock */\r\n#define RCC_BDCR_RTCSEL_LSE     0x00000100U /*!< LSE oscillator clock used as RTC clock */\r\n#define RCC_BDCR_RTCSEL_LSI     0x00000200U /*!< LSI oscillator clock used as RTC clock */\r\n#define RCC_BDCR_RTCSEL_HSE     0x00000300U /*!< HSE oscillator clock divided by 128 used as RTC clock */\r\n\r\n#define RCC_BDCR_RTCEN_Pos (15U)\r\n#define RCC_BDCR_RTCEN_Msk (0x1U << RCC_BDCR_RTCEN_Pos) /*!< 0x00008000 */\r\n#define RCC_BDCR_RTCEN     RCC_BDCR_RTCEN_Msk           /*!< RTC clock enable */\r\n#define RCC_BDCR_BDRST_Pos (16U)\r\n#define RCC_BDCR_BDRST_Msk (0x1U << RCC_BDCR_BDRST_Pos) /*!< 0x00010000 */\r\n#define RCC_BDCR_BDRST     RCC_BDCR_BDRST_Msk           /*!< Backup domain software reset  */\r\n\r\n/*******************  Bit definition for RCC_CSR register  ********************/\r\n#define RCC_CSR_LSION_Pos    (0U)\r\n#define RCC_CSR_LSION_Msk    (0x1U << RCC_CSR_LSION_Pos) /*!< 0x00000001 */\r\n#define RCC_CSR_LSION        RCC_CSR_LSION_Msk           /*!< Internal Low Speed oscillator enable */\r\n#define RCC_CSR_LSIRDY_Pos   (1U)\r\n#define RCC_CSR_LSIRDY_Msk   (0x1U << RCC_CSR_LSIRDY_Pos) /*!< 0x00000002 */\r\n#define RCC_CSR_LSIRDY       RCC_CSR_LSIRDY_Msk           /*!< Internal Low Speed oscillator Ready */\r\n#define RCC_CSR_RMVF_Pos     (24U)\r\n#define RCC_CSR_RMVF_Msk     (0x1U << RCC_CSR_RMVF_Pos) /*!< 0x01000000 */\r\n#define RCC_CSR_RMVF         RCC_CSR_RMVF_Msk           /*!< Remove reset flag */\r\n#define RCC_CSR_PINRSTF_Pos  (26U)\r\n#define RCC_CSR_PINRSTF_Msk  (0x1U << RCC_CSR_PINRSTF_Pos) /*!< 0x04000000 */\r\n#define RCC_CSR_PINRSTF      RCC_CSR_PINRSTF_Msk           /*!< PIN reset flag */\r\n#define RCC_CSR_PORRSTF_Pos  (27U)\r\n#define RCC_CSR_PORRSTF_Msk  (0x1U << RCC_CSR_PORRSTF_Pos) /*!< 0x08000000 */\r\n#define RCC_CSR_PORRSTF      RCC_CSR_PORRSTF_Msk           /*!< POR/PDR reset flag */\r\n#define RCC_CSR_SFTRSTF_Pos  (28U)\r\n#define RCC_CSR_SFTRSTF_Msk  (0x1U << RCC_CSR_SFTRSTF_Pos) /*!< 0x10000000 */\r\n#define RCC_CSR_SFTRSTF      RCC_CSR_SFTRSTF_Msk           /*!< Software Reset flag */\r\n#define RCC_CSR_IWDGRSTF_Pos (29U)\r\n#define RCC_CSR_IWDGRSTF_Msk (0x1U << RCC_CSR_IWDGRSTF_Pos) /*!< 0x20000000 */\r\n#define RCC_CSR_IWDGRSTF     RCC_CSR_IWDGRSTF_Msk           /*!< Independent Watchdog reset flag */\r\n#define RCC_CSR_WWDGRSTF_Pos (30U)\r\n#define RCC_CSR_WWDGRSTF_Msk (0x1U << RCC_CSR_WWDGRSTF_Pos) /*!< 0x40000000 */\r\n#define RCC_CSR_WWDGRSTF     RCC_CSR_WWDGRSTF_Msk           /*!< Window watchdog reset flag */\r\n#define RCC_CSR_LPWRRSTF_Pos (31U)\r\n#define RCC_CSR_LPWRRSTF_Msk (0x1U << RCC_CSR_LPWRRSTF_Pos) /*!< 0x80000000 */\r\n#define RCC_CSR_LPWRRSTF     RCC_CSR_LPWRRSTF_Msk           /*!< Low-Power reset flag */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                General Purpose and Alternate Function I/O                  */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for GPIO_CRL register  *******************/\r\n#define GPIO_CRL_MODE_Pos (0U)\r\n#define GPIO_CRL_MODE_Msk (0x33333333U << GPIO_CRL_MODE_Pos) /*!< 0x33333333 */\r\n#define GPIO_CRL_MODE     GPIO_CRL_MODE_Msk                  /*!< Port x mode bits */\r\n\r\n#define GPIO_CRL_MODE0_Pos (0U)\r\n#define GPIO_CRL_MODE0_Msk (0x3U << GPIO_CRL_MODE0_Pos) /*!< 0x00000003 */\r\n#define GPIO_CRL_MODE0     GPIO_CRL_MODE0_Msk           /*!< MODE0[1:0] bits (Port x mode bits, pin 0) */\r\n#define GPIO_CRL_MODE0_0   (0x1U << GPIO_CRL_MODE0_Pos) /*!< 0x00000001 */\r\n#define GPIO_CRL_MODE0_1   (0x2U << GPIO_CRL_MODE0_Pos) /*!< 0x00000002 */\r\n\r\n#define GPIO_CRL_MODE1_Pos (4U)\r\n#define GPIO_CRL_MODE1_Msk (0x3U << GPIO_CRL_MODE1_Pos) /*!< 0x00000030 */\r\n#define GPIO_CRL_MODE1     GPIO_CRL_MODE1_Msk           /*!< MODE1[1:0] bits (Port x mode bits, pin 1) */\r\n#define GPIO_CRL_MODE1_0   (0x1U << GPIO_CRL_MODE1_Pos) /*!< 0x00000010 */\r\n#define GPIO_CRL_MODE1_1   (0x2U << GPIO_CRL_MODE1_Pos) /*!< 0x00000020 */\r\n\r\n#define GPIO_CRL_MODE2_Pos (8U)\r\n#define GPIO_CRL_MODE2_Msk (0x3U << GPIO_CRL_MODE2_Pos) /*!< 0x00000300 */\r\n#define GPIO_CRL_MODE2     GPIO_CRL_MODE2_Msk           /*!< MODE2[1:0] bits (Port x mode bits, pin 2) */\r\n#define GPIO_CRL_MODE2_0   (0x1U << GPIO_CRL_MODE2_Pos) /*!< 0x00000100 */\r\n#define GPIO_CRL_MODE2_1   (0x2U << GPIO_CRL_MODE2_Pos) /*!< 0x00000200 */\r\n\r\n#define GPIO_CRL_MODE3_Pos (12U)\r\n#define GPIO_CRL_MODE3_Msk (0x3U << GPIO_CRL_MODE3_Pos) /*!< 0x00003000 */\r\n#define GPIO_CRL_MODE3     GPIO_CRL_MODE3_Msk           /*!< MODE3[1:0] bits (Port x mode bits, pin 3) */\r\n#define GPIO_CRL_MODE3_0   (0x1U << GPIO_CRL_MODE3_Pos) /*!< 0x00001000 */\r\n#define GPIO_CRL_MODE3_1   (0x2U << GPIO_CRL_MODE3_Pos) /*!< 0x00002000 */\r\n\r\n#define GPIO_CRL_MODE4_Pos (16U)\r\n#define GPIO_CRL_MODE4_Msk (0x3U << GPIO_CRL_MODE4_Pos) /*!< 0x00030000 */\r\n#define GPIO_CRL_MODE4     GPIO_CRL_MODE4_Msk           /*!< MODE4[1:0] bits (Port x mode bits, pin 4) */\r\n#define GPIO_CRL_MODE4_0   (0x1U << GPIO_CRL_MODE4_Pos) /*!< 0x00010000 */\r\n#define GPIO_CRL_MODE4_1   (0x2U << GPIO_CRL_MODE4_Pos) /*!< 0x00020000 */\r\n\r\n#define GPIO_CRL_MODE5_Pos (20U)\r\n#define GPIO_CRL_MODE5_Msk (0x3U << GPIO_CRL_MODE5_Pos) /*!< 0x00300000 */\r\n#define GPIO_CRL_MODE5     GPIO_CRL_MODE5_Msk           /*!< MODE5[1:0] bits (Port x mode bits, pin 5) */\r\n#define GPIO_CRL_MODE5_0   (0x1U << GPIO_CRL_MODE5_Pos) /*!< 0x00100000 */\r\n#define GPIO_CRL_MODE5_1   (0x2U << GPIO_CRL_MODE5_Pos) /*!< 0x00200000 */\r\n\r\n#define GPIO_CRL_MODE6_Pos (24U)\r\n#define GPIO_CRL_MODE6_Msk (0x3U << GPIO_CRL_MODE6_Pos) /*!< 0x03000000 */\r\n#define GPIO_CRL_MODE6     GPIO_CRL_MODE6_Msk           /*!< MODE6[1:0] bits (Port x mode bits, pin 6) */\r\n#define GPIO_CRL_MODE6_0   (0x1U << GPIO_CRL_MODE6_Pos) /*!< 0x01000000 */\r\n#define GPIO_CRL_MODE6_1   (0x2U << GPIO_CRL_MODE6_Pos) /*!< 0x02000000 */\r\n\r\n#define GPIO_CRL_MODE7_Pos (28U)\r\n#define GPIO_CRL_MODE7_Msk (0x3U << GPIO_CRL_MODE7_Pos) /*!< 0x30000000 */\r\n#define GPIO_CRL_MODE7     GPIO_CRL_MODE7_Msk           /*!< MODE7[1:0] bits (Port x mode bits, pin 7) */\r\n#define GPIO_CRL_MODE7_0   (0x1U << GPIO_CRL_MODE7_Pos) /*!< 0x10000000 */\r\n#define GPIO_CRL_MODE7_1   (0x2U << GPIO_CRL_MODE7_Pos) /*!< 0x20000000 */\r\n\r\n#define GPIO_CRL_CNF_Pos (2U)\r\n#define GPIO_CRL_CNF_Msk (0x33333333U << GPIO_CRL_CNF_Pos) /*!< 0xCCCCCCCC */\r\n#define GPIO_CRL_CNF     GPIO_CRL_CNF_Msk                  /*!< Port x configuration bits */\r\n\r\n#define GPIO_CRL_CNF0_Pos (2U)\r\n#define GPIO_CRL_CNF0_Msk (0x3U << GPIO_CRL_CNF0_Pos) /*!< 0x0000000C */\r\n#define GPIO_CRL_CNF0     GPIO_CRL_CNF0_Msk           /*!< CNF0[1:0] bits (Port x configuration bits, pin 0) */\r\n#define GPIO_CRL_CNF0_0   (0x1U << GPIO_CRL_CNF0_Pos) /*!< 0x00000004 */\r\n#define GPIO_CRL_CNF0_1   (0x2U << GPIO_CRL_CNF0_Pos) /*!< 0x00000008 */\r\n\r\n#define GPIO_CRL_CNF1_Pos (6U)\r\n#define GPIO_CRL_CNF1_Msk (0x3U << GPIO_CRL_CNF1_Pos) /*!< 0x000000C0 */\r\n#define GPIO_CRL_CNF1     GPIO_CRL_CNF1_Msk           /*!< CNF1[1:0] bits (Port x configuration bits, pin 1) */\r\n#define GPIO_CRL_CNF1_0   (0x1U << GPIO_CRL_CNF1_Pos) /*!< 0x00000040 */\r\n#define GPIO_CRL_CNF1_1   (0x2U << GPIO_CRL_CNF1_Pos) /*!< 0x00000080 */\r\n\r\n#define GPIO_CRL_CNF2_Pos (10U)\r\n#define GPIO_CRL_CNF2_Msk (0x3U << GPIO_CRL_CNF2_Pos) /*!< 0x00000C00 */\r\n#define GPIO_CRL_CNF2     GPIO_CRL_CNF2_Msk           /*!< CNF2[1:0] bits (Port x configuration bits, pin 2) */\r\n#define GPIO_CRL_CNF2_0   (0x1U << GPIO_CRL_CNF2_Pos) /*!< 0x00000400 */\r\n#define GPIO_CRL_CNF2_1   (0x2U << GPIO_CRL_CNF2_Pos) /*!< 0x00000800 */\r\n\r\n#define GPIO_CRL_CNF3_Pos (14U)\r\n#define GPIO_CRL_CNF3_Msk (0x3U << GPIO_CRL_CNF3_Pos) /*!< 0x0000C000 */\r\n#define GPIO_CRL_CNF3     GPIO_CRL_CNF3_Msk           /*!< CNF3[1:0] bits (Port x configuration bits, pin 3) */\r\n#define GPIO_CRL_CNF3_0   (0x1U << GPIO_CRL_CNF3_Pos) /*!< 0x00004000 */\r\n#define GPIO_CRL_CNF3_1   (0x2U << GPIO_CRL_CNF3_Pos) /*!< 0x00008000 */\r\n\r\n#define GPIO_CRL_CNF4_Pos (18U)\r\n#define GPIO_CRL_CNF4_Msk (0x3U << GPIO_CRL_CNF4_Pos) /*!< 0x000C0000 */\r\n#define GPIO_CRL_CNF4     GPIO_CRL_CNF4_Msk           /*!< CNF4[1:0] bits (Port x configuration bits, pin 4) */\r\n#define GPIO_CRL_CNF4_0   (0x1U << GPIO_CRL_CNF4_Pos) /*!< 0x00040000 */\r\n#define GPIO_CRL_CNF4_1   (0x2U << GPIO_CRL_CNF4_Pos) /*!< 0x00080000 */\r\n\r\n#define GPIO_CRL_CNF5_Pos (22U)\r\n#define GPIO_CRL_CNF5_Msk (0x3U << GPIO_CRL_CNF5_Pos) /*!< 0x00C00000 */\r\n#define GPIO_CRL_CNF5     GPIO_CRL_CNF5_Msk           /*!< CNF5[1:0] bits (Port x configuration bits, pin 5) */\r\n#define GPIO_CRL_CNF5_0   (0x1U << GPIO_CRL_CNF5_Pos) /*!< 0x00400000 */\r\n#define GPIO_CRL_CNF5_1   (0x2U << GPIO_CRL_CNF5_Pos) /*!< 0x00800000 */\r\n\r\n#define GPIO_CRL_CNF6_Pos (26U)\r\n#define GPIO_CRL_CNF6_Msk (0x3U << GPIO_CRL_CNF6_Pos) /*!< 0x0C000000 */\r\n#define GPIO_CRL_CNF6     GPIO_CRL_CNF6_Msk           /*!< CNF6[1:0] bits (Port x configuration bits, pin 6) */\r\n#define GPIO_CRL_CNF6_0   (0x1U << GPIO_CRL_CNF6_Pos) /*!< 0x04000000 */\r\n#define GPIO_CRL_CNF6_1   (0x2U << GPIO_CRL_CNF6_Pos) /*!< 0x08000000 */\r\n\r\n#define GPIO_CRL_CNF7_Pos (30U)\r\n#define GPIO_CRL_CNF7_Msk (0x3U << GPIO_CRL_CNF7_Pos) /*!< 0xC0000000 */\r\n#define GPIO_CRL_CNF7     GPIO_CRL_CNF7_Msk           /*!< CNF7[1:0] bits (Port x configuration bits, pin 7) */\r\n#define GPIO_CRL_CNF7_0   (0x1U << GPIO_CRL_CNF7_Pos) /*!< 0x40000000 */\r\n#define GPIO_CRL_CNF7_1   (0x2U << GPIO_CRL_CNF7_Pos) /*!< 0x80000000 */\r\n\r\n/*******************  Bit definition for GPIO_CRH register  *******************/\r\n#define GPIO_CRH_MODE_Pos (0U)\r\n#define GPIO_CRH_MODE_Msk (0x33333333U << GPIO_CRH_MODE_Pos) /*!< 0x33333333 */\r\n#define GPIO_CRH_MODE     GPIO_CRH_MODE_Msk                  /*!< Port x mode bits */\r\n\r\n#define GPIO_CRH_MODE8_Pos (0U)\r\n#define GPIO_CRH_MODE8_Msk (0x3U << GPIO_CRH_MODE8_Pos) /*!< 0x00000003 */\r\n#define GPIO_CRH_MODE8     GPIO_CRH_MODE8_Msk           /*!< MODE8[1:0] bits (Port x mode bits, pin 8) */\r\n#define GPIO_CRH_MODE8_0   (0x1U << GPIO_CRH_MODE8_Pos) /*!< 0x00000001 */\r\n#define GPIO_CRH_MODE8_1   (0x2U << GPIO_CRH_MODE8_Pos) /*!< 0x00000002 */\r\n\r\n#define GPIO_CRH_MODE9_Pos (4U)\r\n#define GPIO_CRH_MODE9_Msk (0x3U << GPIO_CRH_MODE9_Pos) /*!< 0x00000030 */\r\n#define GPIO_CRH_MODE9     GPIO_CRH_MODE9_Msk           /*!< MODE9[1:0] bits (Port x mode bits, pin 9) */\r\n#define GPIO_CRH_MODE9_0   (0x1U << GPIO_CRH_MODE9_Pos) /*!< 0x00000010 */\r\n#define GPIO_CRH_MODE9_1   (0x2U << GPIO_CRH_MODE9_Pos) /*!< 0x00000020 */\r\n\r\n#define GPIO_CRH_MODE10_Pos (8U)\r\n#define GPIO_CRH_MODE10_Msk (0x3U << GPIO_CRH_MODE10_Pos) /*!< 0x00000300 */\r\n#define GPIO_CRH_MODE10     GPIO_CRH_MODE10_Msk           /*!< MODE10[1:0] bits (Port x mode bits, pin 10) */\r\n#define GPIO_CRH_MODE10_0   (0x1U << GPIO_CRH_MODE10_Pos) /*!< 0x00000100 */\r\n#define GPIO_CRH_MODE10_1   (0x2U << GPIO_CRH_MODE10_Pos) /*!< 0x00000200 */\r\n\r\n#define GPIO_CRH_MODE11_Pos (12U)\r\n#define GPIO_CRH_MODE11_Msk (0x3U << GPIO_CRH_MODE11_Pos) /*!< 0x00003000 */\r\n#define GPIO_CRH_MODE11     GPIO_CRH_MODE11_Msk           /*!< MODE11[1:0] bits (Port x mode bits, pin 11) */\r\n#define GPIO_CRH_MODE11_0   (0x1U << GPIO_CRH_MODE11_Pos) /*!< 0x00001000 */\r\n#define GPIO_CRH_MODE11_1   (0x2U << GPIO_CRH_MODE11_Pos) /*!< 0x00002000 */\r\n\r\n#define GPIO_CRH_MODE12_Pos (16U)\r\n#define GPIO_CRH_MODE12_Msk (0x3U << GPIO_CRH_MODE12_Pos) /*!< 0x00030000 */\r\n#define GPIO_CRH_MODE12     GPIO_CRH_MODE12_Msk           /*!< MODE12[1:0] bits (Port x mode bits, pin 12) */\r\n#define GPIO_CRH_MODE12_0   (0x1U << GPIO_CRH_MODE12_Pos) /*!< 0x00010000 */\r\n#define GPIO_CRH_MODE12_1   (0x2U << GPIO_CRH_MODE12_Pos) /*!< 0x00020000 */\r\n\r\n#define GPIO_CRH_MODE13_Pos (20U)\r\n#define GPIO_CRH_MODE13_Msk (0x3U << GPIO_CRH_MODE13_Pos) /*!< 0x00300000 */\r\n#define GPIO_CRH_MODE13     GPIO_CRH_MODE13_Msk           /*!< MODE13[1:0] bits (Port x mode bits, pin 13) */\r\n#define GPIO_CRH_MODE13_0   (0x1U << GPIO_CRH_MODE13_Pos) /*!< 0x00100000 */\r\n#define GPIO_CRH_MODE13_1   (0x2U << GPIO_CRH_MODE13_Pos) /*!< 0x00200000 */\r\n\r\n#define GPIO_CRH_MODE14_Pos (24U)\r\n#define GPIO_CRH_MODE14_Msk (0x3U << GPIO_CRH_MODE14_Pos) /*!< 0x03000000 */\r\n#define GPIO_CRH_MODE14     GPIO_CRH_MODE14_Msk           /*!< MODE14[1:0] bits (Port x mode bits, pin 14) */\r\n#define GPIO_CRH_MODE14_0   (0x1U << GPIO_CRH_MODE14_Pos) /*!< 0x01000000 */\r\n#define GPIO_CRH_MODE14_1   (0x2U << GPIO_CRH_MODE14_Pos) /*!< 0x02000000 */\r\n\r\n#define GPIO_CRH_MODE15_Pos (28U)\r\n#define GPIO_CRH_MODE15_Msk (0x3U << GPIO_CRH_MODE15_Pos) /*!< 0x30000000 */\r\n#define GPIO_CRH_MODE15     GPIO_CRH_MODE15_Msk           /*!< MODE15[1:0] bits (Port x mode bits, pin 15) */\r\n#define GPIO_CRH_MODE15_0   (0x1U << GPIO_CRH_MODE15_Pos) /*!< 0x10000000 */\r\n#define GPIO_CRH_MODE15_1   (0x2U << GPIO_CRH_MODE15_Pos) /*!< 0x20000000 */\r\n\r\n#define GPIO_CRH_CNF_Pos (2U)\r\n#define GPIO_CRH_CNF_Msk (0x33333333U << GPIO_CRH_CNF_Pos) /*!< 0xCCCCCCCC */\r\n#define GPIO_CRH_CNF     GPIO_CRH_CNF_Msk                  /*!< Port x configuration bits */\r\n\r\n#define GPIO_CRH_CNF8_Pos (2U)\r\n#define GPIO_CRH_CNF8_Msk (0x3U << GPIO_CRH_CNF8_Pos) /*!< 0x0000000C */\r\n#define GPIO_CRH_CNF8     GPIO_CRH_CNF8_Msk           /*!< CNF8[1:0] bits (Port x configuration bits, pin 8) */\r\n#define GPIO_CRH_CNF8_0   (0x1U << GPIO_CRH_CNF8_Pos) /*!< 0x00000004 */\r\n#define GPIO_CRH_CNF8_1   (0x2U << GPIO_CRH_CNF8_Pos) /*!< 0x00000008 */\r\n\r\n#define GPIO_CRH_CNF9_Pos (6U)\r\n#define GPIO_CRH_CNF9_Msk (0x3U << GPIO_CRH_CNF9_Pos) /*!< 0x000000C0 */\r\n#define GPIO_CRH_CNF9     GPIO_CRH_CNF9_Msk           /*!< CNF9[1:0] bits (Port x configuration bits, pin 9) */\r\n#define GPIO_CRH_CNF9_0   (0x1U << GPIO_CRH_CNF9_Pos) /*!< 0x00000040 */\r\n#define GPIO_CRH_CNF9_1   (0x2U << GPIO_CRH_CNF9_Pos) /*!< 0x00000080 */\r\n\r\n#define GPIO_CRH_CNF10_Pos (10U)\r\n#define GPIO_CRH_CNF10_Msk (0x3U << GPIO_CRH_CNF10_Pos) /*!< 0x00000C00 */\r\n#define GPIO_CRH_CNF10     GPIO_CRH_CNF10_Msk           /*!< CNF10[1:0] bits (Port x configuration bits, pin 10) */\r\n#define GPIO_CRH_CNF10_0   (0x1U << GPIO_CRH_CNF10_Pos) /*!< 0x00000400 */\r\n#define GPIO_CRH_CNF10_1   (0x2U << GPIO_CRH_CNF10_Pos) /*!< 0x00000800 */\r\n\r\n#define GPIO_CRH_CNF11_Pos (14U)\r\n#define GPIO_CRH_CNF11_Msk (0x3U << GPIO_CRH_CNF11_Pos) /*!< 0x0000C000 */\r\n#define GPIO_CRH_CNF11     GPIO_CRH_CNF11_Msk           /*!< CNF11[1:0] bits (Port x configuration bits, pin 11) */\r\n#define GPIO_CRH_CNF11_0   (0x1U << GPIO_CRH_CNF11_Pos) /*!< 0x00004000 */\r\n#define GPIO_CRH_CNF11_1   (0x2U << GPIO_CRH_CNF11_Pos) /*!< 0x00008000 */\r\n\r\n#define GPIO_CRH_CNF12_Pos (18U)\r\n#define GPIO_CRH_CNF12_Msk (0x3U << GPIO_CRH_CNF12_Pos) /*!< 0x000C0000 */\r\n#define GPIO_CRH_CNF12     GPIO_CRH_CNF12_Msk           /*!< CNF12[1:0] bits (Port x configuration bits, pin 12) */\r\n#define GPIO_CRH_CNF12_0   (0x1U << GPIO_CRH_CNF12_Pos) /*!< 0x00040000 */\r\n#define GPIO_CRH_CNF12_1   (0x2U << GPIO_CRH_CNF12_Pos) /*!< 0x00080000 */\r\n\r\n#define GPIO_CRH_CNF13_Pos (22U)\r\n#define GPIO_CRH_CNF13_Msk (0x3U << GPIO_CRH_CNF13_Pos) /*!< 0x00C00000 */\r\n#define GPIO_CRH_CNF13     GPIO_CRH_CNF13_Msk           /*!< CNF13[1:0] bits (Port x configuration bits, pin 13) */\r\n#define GPIO_CRH_CNF13_0   (0x1U << GPIO_CRH_CNF13_Pos) /*!< 0x00400000 */\r\n#define GPIO_CRH_CNF13_1   (0x2U << GPIO_CRH_CNF13_Pos) /*!< 0x00800000 */\r\n\r\n#define GPIO_CRH_CNF14_Pos (26U)\r\n#define GPIO_CRH_CNF14_Msk (0x3U << GPIO_CRH_CNF14_Pos) /*!< 0x0C000000 */\r\n#define GPIO_CRH_CNF14     GPIO_CRH_CNF14_Msk           /*!< CNF14[1:0] bits (Port x configuration bits, pin 14) */\r\n#define GPIO_CRH_CNF14_0   (0x1U << GPIO_CRH_CNF14_Pos) /*!< 0x04000000 */\r\n#define GPIO_CRH_CNF14_1   (0x2U << GPIO_CRH_CNF14_Pos) /*!< 0x08000000 */\r\n\r\n#define GPIO_CRH_CNF15_Pos (30U)\r\n#define GPIO_CRH_CNF15_Msk (0x3U << GPIO_CRH_CNF15_Pos) /*!< 0xC0000000 */\r\n#define GPIO_CRH_CNF15     GPIO_CRH_CNF15_Msk           /*!< CNF15[1:0] bits (Port x configuration bits, pin 15) */\r\n#define GPIO_CRH_CNF15_0   (0x1U << GPIO_CRH_CNF15_Pos) /*!< 0x40000000 */\r\n#define GPIO_CRH_CNF15_1   (0x2U << GPIO_CRH_CNF15_Pos) /*!< 0x80000000 */\r\n\r\n/*!<******************  Bit definition for GPIO_IDR register  *******************/\r\n#define GPIO_IDR_IDR0_Pos  (0U)\r\n#define GPIO_IDR_IDR0_Msk  (0x1U << GPIO_IDR_IDR0_Pos) /*!< 0x00000001 */\r\n#define GPIO_IDR_IDR0      GPIO_IDR_IDR0_Msk           /*!< Port input data, bit 0 */\r\n#define GPIO_IDR_IDR1_Pos  (1U)\r\n#define GPIO_IDR_IDR1_Msk  (0x1U << GPIO_IDR_IDR1_Pos) /*!< 0x00000002 */\r\n#define GPIO_IDR_IDR1      GPIO_IDR_IDR1_Msk           /*!< Port input data, bit 1 */\r\n#define GPIO_IDR_IDR2_Pos  (2U)\r\n#define GPIO_IDR_IDR2_Msk  (0x1U << GPIO_IDR_IDR2_Pos) /*!< 0x00000004 */\r\n#define GPIO_IDR_IDR2      GPIO_IDR_IDR2_Msk           /*!< Port input data, bit 2 */\r\n#define GPIO_IDR_IDR3_Pos  (3U)\r\n#define GPIO_IDR_IDR3_Msk  (0x1U << GPIO_IDR_IDR3_Pos) /*!< 0x00000008 */\r\n#define GPIO_IDR_IDR3      GPIO_IDR_IDR3_Msk           /*!< Port input data, bit 3 */\r\n#define GPIO_IDR_IDR4_Pos  (4U)\r\n#define GPIO_IDR_IDR4_Msk  (0x1U << GPIO_IDR_IDR4_Pos) /*!< 0x00000010 */\r\n#define GPIO_IDR_IDR4      GPIO_IDR_IDR4_Msk           /*!< Port input data, bit 4 */\r\n#define GPIO_IDR_IDR5_Pos  (5U)\r\n#define GPIO_IDR_IDR5_Msk  (0x1U << GPIO_IDR_IDR5_Pos) /*!< 0x00000020 */\r\n#define GPIO_IDR_IDR5      GPIO_IDR_IDR5_Msk           /*!< Port input data, bit 5 */\r\n#define GPIO_IDR_IDR6_Pos  (6U)\r\n#define GPIO_IDR_IDR6_Msk  (0x1U << GPIO_IDR_IDR6_Pos) /*!< 0x00000040 */\r\n#define GPIO_IDR_IDR6      GPIO_IDR_IDR6_Msk           /*!< Port input data, bit 6 */\r\n#define GPIO_IDR_IDR7_Pos  (7U)\r\n#define GPIO_IDR_IDR7_Msk  (0x1U << GPIO_IDR_IDR7_Pos) /*!< 0x00000080 */\r\n#define GPIO_IDR_IDR7      GPIO_IDR_IDR7_Msk           /*!< Port input data, bit 7 */\r\n#define GPIO_IDR_IDR8_Pos  (8U)\r\n#define GPIO_IDR_IDR8_Msk  (0x1U << GPIO_IDR_IDR8_Pos) /*!< 0x00000100 */\r\n#define GPIO_IDR_IDR8      GPIO_IDR_IDR8_Msk           /*!< Port input data, bit 8 */\r\n#define GPIO_IDR_IDR9_Pos  (9U)\r\n#define GPIO_IDR_IDR9_Msk  (0x1U << GPIO_IDR_IDR9_Pos) /*!< 0x00000200 */\r\n#define GPIO_IDR_IDR9      GPIO_IDR_IDR9_Msk           /*!< Port input data, bit 9 */\r\n#define GPIO_IDR_IDR10_Pos (10U)\r\n#define GPIO_IDR_IDR10_Msk (0x1U << GPIO_IDR_IDR10_Pos) /*!< 0x00000400 */\r\n#define GPIO_IDR_IDR10     GPIO_IDR_IDR10_Msk           /*!< Port input data, bit 10 */\r\n#define GPIO_IDR_IDR11_Pos (11U)\r\n#define GPIO_IDR_IDR11_Msk (0x1U << GPIO_IDR_IDR11_Pos) /*!< 0x00000800 */\r\n#define GPIO_IDR_IDR11     GPIO_IDR_IDR11_Msk           /*!< Port input data, bit 11 */\r\n#define GPIO_IDR_IDR12_Pos (12U)\r\n#define GPIO_IDR_IDR12_Msk (0x1U << GPIO_IDR_IDR12_Pos) /*!< 0x00001000 */\r\n#define GPIO_IDR_IDR12     GPIO_IDR_IDR12_Msk           /*!< Port input data, bit 12 */\r\n#define GPIO_IDR_IDR13_Pos (13U)\r\n#define GPIO_IDR_IDR13_Msk (0x1U << GPIO_IDR_IDR13_Pos) /*!< 0x00002000 */\r\n#define GPIO_IDR_IDR13     GPIO_IDR_IDR13_Msk           /*!< Port input data, bit 13 */\r\n#define GPIO_IDR_IDR14_Pos (14U)\r\n#define GPIO_IDR_IDR14_Msk (0x1U << GPIO_IDR_IDR14_Pos) /*!< 0x00004000 */\r\n#define GPIO_IDR_IDR14     GPIO_IDR_IDR14_Msk           /*!< Port input data, bit 14 */\r\n#define GPIO_IDR_IDR15_Pos (15U)\r\n#define GPIO_IDR_IDR15_Msk (0x1U << GPIO_IDR_IDR15_Pos) /*!< 0x00008000 */\r\n#define GPIO_IDR_IDR15     GPIO_IDR_IDR15_Msk           /*!< Port input data, bit 15 */\r\n\r\n/*******************  Bit definition for GPIO_ODR register  *******************/\r\n#define GPIO_ODR_ODR0_Pos  (0U)\r\n#define GPIO_ODR_ODR0_Msk  (0x1U << GPIO_ODR_ODR0_Pos) /*!< 0x00000001 */\r\n#define GPIO_ODR_ODR0      GPIO_ODR_ODR0_Msk           /*!< Port output data, bit 0 */\r\n#define GPIO_ODR_ODR1_Pos  (1U)\r\n#define GPIO_ODR_ODR1_Msk  (0x1U << GPIO_ODR_ODR1_Pos) /*!< 0x00000002 */\r\n#define GPIO_ODR_ODR1      GPIO_ODR_ODR1_Msk           /*!< Port output data, bit 1 */\r\n#define GPIO_ODR_ODR2_Pos  (2U)\r\n#define GPIO_ODR_ODR2_Msk  (0x1U << GPIO_ODR_ODR2_Pos) /*!< 0x00000004 */\r\n#define GPIO_ODR_ODR2      GPIO_ODR_ODR2_Msk           /*!< Port output data, bit 2 */\r\n#define GPIO_ODR_ODR3_Pos  (3U)\r\n#define GPIO_ODR_ODR3_Msk  (0x1U << GPIO_ODR_ODR3_Pos) /*!< 0x00000008 */\r\n#define GPIO_ODR_ODR3      GPIO_ODR_ODR3_Msk           /*!< Port output data, bit 3 */\r\n#define GPIO_ODR_ODR4_Pos  (4U)\r\n#define GPIO_ODR_ODR4_Msk  (0x1U << GPIO_ODR_ODR4_Pos) /*!< 0x00000010 */\r\n#define GPIO_ODR_ODR4      GPIO_ODR_ODR4_Msk           /*!< Port output data, bit 4 */\r\n#define GPIO_ODR_ODR5_Pos  (5U)\r\n#define GPIO_ODR_ODR5_Msk  (0x1U << GPIO_ODR_ODR5_Pos) /*!< 0x00000020 */\r\n#define GPIO_ODR_ODR5      GPIO_ODR_ODR5_Msk           /*!< Port output data, bit 5 */\r\n#define GPIO_ODR_ODR6_Pos  (6U)\r\n#define GPIO_ODR_ODR6_Msk  (0x1U << GPIO_ODR_ODR6_Pos) /*!< 0x00000040 */\r\n#define GPIO_ODR_ODR6      GPIO_ODR_ODR6_Msk           /*!< Port output data, bit 6 */\r\n#define GPIO_ODR_ODR7_Pos  (7U)\r\n#define GPIO_ODR_ODR7_Msk  (0x1U << GPIO_ODR_ODR7_Pos) /*!< 0x00000080 */\r\n#define GPIO_ODR_ODR7      GPIO_ODR_ODR7_Msk           /*!< Port output data, bit 7 */\r\n#define GPIO_ODR_ODR8_Pos  (8U)\r\n#define GPIO_ODR_ODR8_Msk  (0x1U << GPIO_ODR_ODR8_Pos) /*!< 0x00000100 */\r\n#define GPIO_ODR_ODR8      GPIO_ODR_ODR8_Msk           /*!< Port output data, bit 8 */\r\n#define GPIO_ODR_ODR9_Pos  (9U)\r\n#define GPIO_ODR_ODR9_Msk  (0x1U << GPIO_ODR_ODR9_Pos) /*!< 0x00000200 */\r\n#define GPIO_ODR_ODR9      GPIO_ODR_ODR9_Msk           /*!< Port output data, bit 9 */\r\n#define GPIO_ODR_ODR10_Pos (10U)\r\n#define GPIO_ODR_ODR10_Msk (0x1U << GPIO_ODR_ODR10_Pos) /*!< 0x00000400 */\r\n#define GPIO_ODR_ODR10     GPIO_ODR_ODR10_Msk           /*!< Port output data, bit 10 */\r\n#define GPIO_ODR_ODR11_Pos (11U)\r\n#define GPIO_ODR_ODR11_Msk (0x1U << GPIO_ODR_ODR11_Pos) /*!< 0x00000800 */\r\n#define GPIO_ODR_ODR11     GPIO_ODR_ODR11_Msk           /*!< Port output data, bit 11 */\r\n#define GPIO_ODR_ODR12_Pos (12U)\r\n#define GPIO_ODR_ODR12_Msk (0x1U << GPIO_ODR_ODR12_Pos) /*!< 0x00001000 */\r\n#define GPIO_ODR_ODR12     GPIO_ODR_ODR12_Msk           /*!< Port output data, bit 12 */\r\n#define GPIO_ODR_ODR13_Pos (13U)\r\n#define GPIO_ODR_ODR13_Msk (0x1U << GPIO_ODR_ODR13_Pos) /*!< 0x00002000 */\r\n#define GPIO_ODR_ODR13     GPIO_ODR_ODR13_Msk           /*!< Port output data, bit 13 */\r\n#define GPIO_ODR_ODR14_Pos (14U)\r\n#define GPIO_ODR_ODR14_Msk (0x1U << GPIO_ODR_ODR14_Pos) /*!< 0x00004000 */\r\n#define GPIO_ODR_ODR14     GPIO_ODR_ODR14_Msk           /*!< Port output data, bit 14 */\r\n#define GPIO_ODR_ODR15_Pos (15U)\r\n#define GPIO_ODR_ODR15_Msk (0x1U << GPIO_ODR_ODR15_Pos) /*!< 0x00008000 */\r\n#define GPIO_ODR_ODR15     GPIO_ODR_ODR15_Msk           /*!< Port output data, bit 15 */\r\n\r\n/******************  Bit definition for GPIO_BSRR register  *******************/\r\n#define GPIO_BSRR_BS0_Pos  (0U)\r\n#define GPIO_BSRR_BS0_Msk  (0x1U << GPIO_BSRR_BS0_Pos) /*!< 0x00000001 */\r\n#define GPIO_BSRR_BS0      GPIO_BSRR_BS0_Msk           /*!< Port x Set bit 0 */\r\n#define GPIO_BSRR_BS1_Pos  (1U)\r\n#define GPIO_BSRR_BS1_Msk  (0x1U << GPIO_BSRR_BS1_Pos) /*!< 0x00000002 */\r\n#define GPIO_BSRR_BS1      GPIO_BSRR_BS1_Msk           /*!< Port x Set bit 1 */\r\n#define GPIO_BSRR_BS2_Pos  (2U)\r\n#define GPIO_BSRR_BS2_Msk  (0x1U << GPIO_BSRR_BS2_Pos) /*!< 0x00000004 */\r\n#define GPIO_BSRR_BS2      GPIO_BSRR_BS2_Msk           /*!< Port x Set bit 2 */\r\n#define GPIO_BSRR_BS3_Pos  (3U)\r\n#define GPIO_BSRR_BS3_Msk  (0x1U << GPIO_BSRR_BS3_Pos) /*!< 0x00000008 */\r\n#define GPIO_BSRR_BS3      GPIO_BSRR_BS3_Msk           /*!< Port x Set bit 3 */\r\n#define GPIO_BSRR_BS4_Pos  (4U)\r\n#define GPIO_BSRR_BS4_Msk  (0x1U << GPIO_BSRR_BS4_Pos) /*!< 0x00000010 */\r\n#define GPIO_BSRR_BS4      GPIO_BSRR_BS4_Msk           /*!< Port x Set bit 4 */\r\n#define GPIO_BSRR_BS5_Pos  (5U)\r\n#define GPIO_BSRR_BS5_Msk  (0x1U << GPIO_BSRR_BS5_Pos) /*!< 0x00000020 */\r\n#define GPIO_BSRR_BS5      GPIO_BSRR_BS5_Msk           /*!< Port x Set bit 5 */\r\n#define GPIO_BSRR_BS6_Pos  (6U)\r\n#define GPIO_BSRR_BS6_Msk  (0x1U << GPIO_BSRR_BS6_Pos) /*!< 0x00000040 */\r\n#define GPIO_BSRR_BS6      GPIO_BSRR_BS6_Msk           /*!< Port x Set bit 6 */\r\n#define GPIO_BSRR_BS7_Pos  (7U)\r\n#define GPIO_BSRR_BS7_Msk  (0x1U << GPIO_BSRR_BS7_Pos) /*!< 0x00000080 */\r\n#define GPIO_BSRR_BS7      GPIO_BSRR_BS7_Msk           /*!< Port x Set bit 7 */\r\n#define GPIO_BSRR_BS8_Pos  (8U)\r\n#define GPIO_BSRR_BS8_Msk  (0x1U << GPIO_BSRR_BS8_Pos) /*!< 0x00000100 */\r\n#define GPIO_BSRR_BS8      GPIO_BSRR_BS8_Msk           /*!< Port x Set bit 8 */\r\n#define GPIO_BSRR_BS9_Pos  (9U)\r\n#define GPIO_BSRR_BS9_Msk  (0x1U << GPIO_BSRR_BS9_Pos) /*!< 0x00000200 */\r\n#define GPIO_BSRR_BS9      GPIO_BSRR_BS9_Msk           /*!< Port x Set bit 9 */\r\n#define GPIO_BSRR_BS10_Pos (10U)\r\n#define GPIO_BSRR_BS10_Msk (0x1U << GPIO_BSRR_BS10_Pos) /*!< 0x00000400 */\r\n#define GPIO_BSRR_BS10     GPIO_BSRR_BS10_Msk           /*!< Port x Set bit 10 */\r\n#define GPIO_BSRR_BS11_Pos (11U)\r\n#define GPIO_BSRR_BS11_Msk (0x1U << GPIO_BSRR_BS11_Pos) /*!< 0x00000800 */\r\n#define GPIO_BSRR_BS11     GPIO_BSRR_BS11_Msk           /*!< Port x Set bit 11 */\r\n#define GPIO_BSRR_BS12_Pos (12U)\r\n#define GPIO_BSRR_BS12_Msk (0x1U << GPIO_BSRR_BS12_Pos) /*!< 0x00001000 */\r\n#define GPIO_BSRR_BS12     GPIO_BSRR_BS12_Msk           /*!< Port x Set bit 12 */\r\n#define GPIO_BSRR_BS13_Pos (13U)\r\n#define GPIO_BSRR_BS13_Msk (0x1U << GPIO_BSRR_BS13_Pos) /*!< 0x00002000 */\r\n#define GPIO_BSRR_BS13     GPIO_BSRR_BS13_Msk           /*!< Port x Set bit 13 */\r\n#define GPIO_BSRR_BS14_Pos (14U)\r\n#define GPIO_BSRR_BS14_Msk (0x1U << GPIO_BSRR_BS14_Pos) /*!< 0x00004000 */\r\n#define GPIO_BSRR_BS14     GPIO_BSRR_BS14_Msk           /*!< Port x Set bit 14 */\r\n#define GPIO_BSRR_BS15_Pos (15U)\r\n#define GPIO_BSRR_BS15_Msk (0x1U << GPIO_BSRR_BS15_Pos) /*!< 0x00008000 */\r\n#define GPIO_BSRR_BS15     GPIO_BSRR_BS15_Msk           /*!< Port x Set bit 15 */\r\n\r\n#define GPIO_BSRR_BR0_Pos  (16U)\r\n#define GPIO_BSRR_BR0_Msk  (0x1U << GPIO_BSRR_BR0_Pos) /*!< 0x00010000 */\r\n#define GPIO_BSRR_BR0      GPIO_BSRR_BR0_Msk           /*!< Port x Reset bit 0 */\r\n#define GPIO_BSRR_BR1_Pos  (17U)\r\n#define GPIO_BSRR_BR1_Msk  (0x1U << GPIO_BSRR_BR1_Pos) /*!< 0x00020000 */\r\n#define GPIO_BSRR_BR1      GPIO_BSRR_BR1_Msk           /*!< Port x Reset bit 1 */\r\n#define GPIO_BSRR_BR2_Pos  (18U)\r\n#define GPIO_BSRR_BR2_Msk  (0x1U << GPIO_BSRR_BR2_Pos) /*!< 0x00040000 */\r\n#define GPIO_BSRR_BR2      GPIO_BSRR_BR2_Msk           /*!< Port x Reset bit 2 */\r\n#define GPIO_BSRR_BR3_Pos  (19U)\r\n#define GPIO_BSRR_BR3_Msk  (0x1U << GPIO_BSRR_BR3_Pos) /*!< 0x00080000 */\r\n#define GPIO_BSRR_BR3      GPIO_BSRR_BR3_Msk           /*!< Port x Reset bit 3 */\r\n#define GPIO_BSRR_BR4_Pos  (20U)\r\n#define GPIO_BSRR_BR4_Msk  (0x1U << GPIO_BSRR_BR4_Pos) /*!< 0x00100000 */\r\n#define GPIO_BSRR_BR4      GPIO_BSRR_BR4_Msk           /*!< Port x Reset bit 4 */\r\n#define GPIO_BSRR_BR5_Pos  (21U)\r\n#define GPIO_BSRR_BR5_Msk  (0x1U << GPIO_BSRR_BR5_Pos) /*!< 0x00200000 */\r\n#define GPIO_BSRR_BR5      GPIO_BSRR_BR5_Msk           /*!< Port x Reset bit 5 */\r\n#define GPIO_BSRR_BR6_Pos  (22U)\r\n#define GPIO_BSRR_BR6_Msk  (0x1U << GPIO_BSRR_BR6_Pos) /*!< 0x00400000 */\r\n#define GPIO_BSRR_BR6      GPIO_BSRR_BR6_Msk           /*!< Port x Reset bit 6 */\r\n#define GPIO_BSRR_BR7_Pos  (23U)\r\n#define GPIO_BSRR_BR7_Msk  (0x1U << GPIO_BSRR_BR7_Pos) /*!< 0x00800000 */\r\n#define GPIO_BSRR_BR7      GPIO_BSRR_BR7_Msk           /*!< Port x Reset bit 7 */\r\n#define GPIO_BSRR_BR8_Pos  (24U)\r\n#define GPIO_BSRR_BR8_Msk  (0x1U << GPIO_BSRR_BR8_Pos) /*!< 0x01000000 */\r\n#define GPIO_BSRR_BR8      GPIO_BSRR_BR8_Msk           /*!< Port x Reset bit 8 */\r\n#define GPIO_BSRR_BR9_Pos  (25U)\r\n#define GPIO_BSRR_BR9_Msk  (0x1U << GPIO_BSRR_BR9_Pos) /*!< 0x02000000 */\r\n#define GPIO_BSRR_BR9      GPIO_BSRR_BR9_Msk           /*!< Port x Reset bit 9 */\r\n#define GPIO_BSRR_BR10_Pos (26U)\r\n#define GPIO_BSRR_BR10_Msk (0x1U << GPIO_BSRR_BR10_Pos) /*!< 0x04000000 */\r\n#define GPIO_BSRR_BR10     GPIO_BSRR_BR10_Msk           /*!< Port x Reset bit 10 */\r\n#define GPIO_BSRR_BR11_Pos (27U)\r\n#define GPIO_BSRR_BR11_Msk (0x1U << GPIO_BSRR_BR11_Pos) /*!< 0x08000000 */\r\n#define GPIO_BSRR_BR11     GPIO_BSRR_BR11_Msk           /*!< Port x Reset bit 11 */\r\n#define GPIO_BSRR_BR12_Pos (28U)\r\n#define GPIO_BSRR_BR12_Msk (0x1U << GPIO_BSRR_BR12_Pos) /*!< 0x10000000 */\r\n#define GPIO_BSRR_BR12     GPIO_BSRR_BR12_Msk           /*!< Port x Reset bit 12 */\r\n#define GPIO_BSRR_BR13_Pos (29U)\r\n#define GPIO_BSRR_BR13_Msk (0x1U << GPIO_BSRR_BR13_Pos) /*!< 0x20000000 */\r\n#define GPIO_BSRR_BR13     GPIO_BSRR_BR13_Msk           /*!< Port x Reset bit 13 */\r\n#define GPIO_BSRR_BR14_Pos (30U)\r\n#define GPIO_BSRR_BR14_Msk (0x1U << GPIO_BSRR_BR14_Pos) /*!< 0x40000000 */\r\n#define GPIO_BSRR_BR14     GPIO_BSRR_BR14_Msk           /*!< Port x Reset bit 14 */\r\n#define GPIO_BSRR_BR15_Pos (31U)\r\n#define GPIO_BSRR_BR15_Msk (0x1U << GPIO_BSRR_BR15_Pos) /*!< 0x80000000 */\r\n#define GPIO_BSRR_BR15     GPIO_BSRR_BR15_Msk           /*!< Port x Reset bit 15 */\r\n\r\n/*******************  Bit definition for GPIO_BRR register  *******************/\r\n#define GPIO_BRR_BR0_Pos  (0U)\r\n#define GPIO_BRR_BR0_Msk  (0x1U << GPIO_BRR_BR0_Pos) /*!< 0x00000001 */\r\n#define GPIO_BRR_BR0      GPIO_BRR_BR0_Msk           /*!< Port x Reset bit 0 */\r\n#define GPIO_BRR_BR1_Pos  (1U)\r\n#define GPIO_BRR_BR1_Msk  (0x1U << GPIO_BRR_BR1_Pos) /*!< 0x00000002 */\r\n#define GPIO_BRR_BR1      GPIO_BRR_BR1_Msk           /*!< Port x Reset bit 1 */\r\n#define GPIO_BRR_BR2_Pos  (2U)\r\n#define GPIO_BRR_BR2_Msk  (0x1U << GPIO_BRR_BR2_Pos) /*!< 0x00000004 */\r\n#define GPIO_BRR_BR2      GPIO_BRR_BR2_Msk           /*!< Port x Reset bit 2 */\r\n#define GPIO_BRR_BR3_Pos  (3U)\r\n#define GPIO_BRR_BR3_Msk  (0x1U << GPIO_BRR_BR3_Pos) /*!< 0x00000008 */\r\n#define GPIO_BRR_BR3      GPIO_BRR_BR3_Msk           /*!< Port x Reset bit 3 */\r\n#define GPIO_BRR_BR4_Pos  (4U)\r\n#define GPIO_BRR_BR4_Msk  (0x1U << GPIO_BRR_BR4_Pos) /*!< 0x00000010 */\r\n#define GPIO_BRR_BR4      GPIO_BRR_BR4_Msk           /*!< Port x Reset bit 4 */\r\n#define GPIO_BRR_BR5_Pos  (5U)\r\n#define GPIO_BRR_BR5_Msk  (0x1U << GPIO_BRR_BR5_Pos) /*!< 0x00000020 */\r\n#define GPIO_BRR_BR5      GPIO_BRR_BR5_Msk           /*!< Port x Reset bit 5 */\r\n#define GPIO_BRR_BR6_Pos  (6U)\r\n#define GPIO_BRR_BR6_Msk  (0x1U << GPIO_BRR_BR6_Pos) /*!< 0x00000040 */\r\n#define GPIO_BRR_BR6      GPIO_BRR_BR6_Msk           /*!< Port x Reset bit 6 */\r\n#define GPIO_BRR_BR7_Pos  (7U)\r\n#define GPIO_BRR_BR7_Msk  (0x1U << GPIO_BRR_BR7_Pos) /*!< 0x00000080 */\r\n#define GPIO_BRR_BR7      GPIO_BRR_BR7_Msk           /*!< Port x Reset bit 7 */\r\n#define GPIO_BRR_BR8_Pos  (8U)\r\n#define GPIO_BRR_BR8_Msk  (0x1U << GPIO_BRR_BR8_Pos) /*!< 0x00000100 */\r\n#define GPIO_BRR_BR8      GPIO_BRR_BR8_Msk           /*!< Port x Reset bit 8 */\r\n#define GPIO_BRR_BR9_Pos  (9U)\r\n#define GPIO_BRR_BR9_Msk  (0x1U << GPIO_BRR_BR9_Pos) /*!< 0x00000200 */\r\n#define GPIO_BRR_BR9      GPIO_BRR_BR9_Msk           /*!< Port x Reset bit 9 */\r\n#define GPIO_BRR_BR10_Pos (10U)\r\n#define GPIO_BRR_BR10_Msk (0x1U << GPIO_BRR_BR10_Pos) /*!< 0x00000400 */\r\n#define GPIO_BRR_BR10     GPIO_BRR_BR10_Msk           /*!< Port x Reset bit 10 */\r\n#define GPIO_BRR_BR11_Pos (11U)\r\n#define GPIO_BRR_BR11_Msk (0x1U << GPIO_BRR_BR11_Pos) /*!< 0x00000800 */\r\n#define GPIO_BRR_BR11     GPIO_BRR_BR11_Msk           /*!< Port x Reset bit 11 */\r\n#define GPIO_BRR_BR12_Pos (12U)\r\n#define GPIO_BRR_BR12_Msk (0x1U << GPIO_BRR_BR12_Pos) /*!< 0x00001000 */\r\n#define GPIO_BRR_BR12     GPIO_BRR_BR12_Msk           /*!< Port x Reset bit 12 */\r\n#define GPIO_BRR_BR13_Pos (13U)\r\n#define GPIO_BRR_BR13_Msk (0x1U << GPIO_BRR_BR13_Pos) /*!< 0x00002000 */\r\n#define GPIO_BRR_BR13     GPIO_BRR_BR13_Msk           /*!< Port x Reset bit 13 */\r\n#define GPIO_BRR_BR14_Pos (14U)\r\n#define GPIO_BRR_BR14_Msk (0x1U << GPIO_BRR_BR14_Pos) /*!< 0x00004000 */\r\n#define GPIO_BRR_BR14     GPIO_BRR_BR14_Msk           /*!< Port x Reset bit 14 */\r\n#define GPIO_BRR_BR15_Pos (15U)\r\n#define GPIO_BRR_BR15_Msk (0x1U << GPIO_BRR_BR15_Pos) /*!< 0x00008000 */\r\n#define GPIO_BRR_BR15     GPIO_BRR_BR15_Msk           /*!< Port x Reset bit 15 */\r\n\r\n/******************  Bit definition for GPIO_LCKR register  *******************/\r\n#define GPIO_LCKR_LCK0_Pos  (0U)\r\n#define GPIO_LCKR_LCK0_Msk  (0x1U << GPIO_LCKR_LCK0_Pos) /*!< 0x00000001 */\r\n#define GPIO_LCKR_LCK0      GPIO_LCKR_LCK0_Msk           /*!< Port x Lock bit 0 */\r\n#define GPIO_LCKR_LCK1_Pos  (1U)\r\n#define GPIO_LCKR_LCK1_Msk  (0x1U << GPIO_LCKR_LCK1_Pos) /*!< 0x00000002 */\r\n#define GPIO_LCKR_LCK1      GPIO_LCKR_LCK1_Msk           /*!< Port x Lock bit 1 */\r\n#define GPIO_LCKR_LCK2_Pos  (2U)\r\n#define GPIO_LCKR_LCK2_Msk  (0x1U << GPIO_LCKR_LCK2_Pos) /*!< 0x00000004 */\r\n#define GPIO_LCKR_LCK2      GPIO_LCKR_LCK2_Msk           /*!< Port x Lock bit 2 */\r\n#define GPIO_LCKR_LCK3_Pos  (3U)\r\n#define GPIO_LCKR_LCK3_Msk  (0x1U << GPIO_LCKR_LCK3_Pos) /*!< 0x00000008 */\r\n#define GPIO_LCKR_LCK3      GPIO_LCKR_LCK3_Msk           /*!< Port x Lock bit 3 */\r\n#define GPIO_LCKR_LCK4_Pos  (4U)\r\n#define GPIO_LCKR_LCK4_Msk  (0x1U << GPIO_LCKR_LCK4_Pos) /*!< 0x00000010 */\r\n#define GPIO_LCKR_LCK4      GPIO_LCKR_LCK4_Msk           /*!< Port x Lock bit 4 */\r\n#define GPIO_LCKR_LCK5_Pos  (5U)\r\n#define GPIO_LCKR_LCK5_Msk  (0x1U << GPIO_LCKR_LCK5_Pos) /*!< 0x00000020 */\r\n#define GPIO_LCKR_LCK5      GPIO_LCKR_LCK5_Msk           /*!< Port x Lock bit 5 */\r\n#define GPIO_LCKR_LCK6_Pos  (6U)\r\n#define GPIO_LCKR_LCK6_Msk  (0x1U << GPIO_LCKR_LCK6_Pos) /*!< 0x00000040 */\r\n#define GPIO_LCKR_LCK6      GPIO_LCKR_LCK6_Msk           /*!< Port x Lock bit 6 */\r\n#define GPIO_LCKR_LCK7_Pos  (7U)\r\n#define GPIO_LCKR_LCK7_Msk  (0x1U << GPIO_LCKR_LCK7_Pos) /*!< 0x00000080 */\r\n#define GPIO_LCKR_LCK7      GPIO_LCKR_LCK7_Msk           /*!< Port x Lock bit 7 */\r\n#define GPIO_LCKR_LCK8_Pos  (8U)\r\n#define GPIO_LCKR_LCK8_Msk  (0x1U << GPIO_LCKR_LCK8_Pos) /*!< 0x00000100 */\r\n#define GPIO_LCKR_LCK8      GPIO_LCKR_LCK8_Msk           /*!< Port x Lock bit 8 */\r\n#define GPIO_LCKR_LCK9_Pos  (9U)\r\n#define GPIO_LCKR_LCK9_Msk  (0x1U << GPIO_LCKR_LCK9_Pos) /*!< 0x00000200 */\r\n#define GPIO_LCKR_LCK9      GPIO_LCKR_LCK9_Msk           /*!< Port x Lock bit 9 */\r\n#define GPIO_LCKR_LCK10_Pos (10U)\r\n#define GPIO_LCKR_LCK10_Msk (0x1U << GPIO_LCKR_LCK10_Pos) /*!< 0x00000400 */\r\n#define GPIO_LCKR_LCK10     GPIO_LCKR_LCK10_Msk           /*!< Port x Lock bit 10 */\r\n#define GPIO_LCKR_LCK11_Pos (11U)\r\n#define GPIO_LCKR_LCK11_Msk (0x1U << GPIO_LCKR_LCK11_Pos) /*!< 0x00000800 */\r\n#define GPIO_LCKR_LCK11     GPIO_LCKR_LCK11_Msk           /*!< Port x Lock bit 11 */\r\n#define GPIO_LCKR_LCK12_Pos (12U)\r\n#define GPIO_LCKR_LCK12_Msk (0x1U << GPIO_LCKR_LCK12_Pos) /*!< 0x00001000 */\r\n#define GPIO_LCKR_LCK12     GPIO_LCKR_LCK12_Msk           /*!< Port x Lock bit 12 */\r\n#define GPIO_LCKR_LCK13_Pos (13U)\r\n#define GPIO_LCKR_LCK13_Msk (0x1U << GPIO_LCKR_LCK13_Pos) /*!< 0x00002000 */\r\n#define GPIO_LCKR_LCK13     GPIO_LCKR_LCK13_Msk           /*!< Port x Lock bit 13 */\r\n#define GPIO_LCKR_LCK14_Pos (14U)\r\n#define GPIO_LCKR_LCK14_Msk (0x1U << GPIO_LCKR_LCK14_Pos) /*!< 0x00004000 */\r\n#define GPIO_LCKR_LCK14     GPIO_LCKR_LCK14_Msk           /*!< Port x Lock bit 14 */\r\n#define GPIO_LCKR_LCK15_Pos (15U)\r\n#define GPIO_LCKR_LCK15_Msk (0x1U << GPIO_LCKR_LCK15_Pos) /*!< 0x00008000 */\r\n#define GPIO_LCKR_LCK15     GPIO_LCKR_LCK15_Msk           /*!< Port x Lock bit 15 */\r\n#define GPIO_LCKR_LCKK_Pos  (16U)\r\n#define GPIO_LCKR_LCKK_Msk  (0x1U << GPIO_LCKR_LCKK_Pos) /*!< 0x00010000 */\r\n#define GPIO_LCKR_LCKK      GPIO_LCKR_LCKK_Msk           /*!< Lock key */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/******************  Bit definition for AFIO_EVCR register  *******************/\r\n#define AFIO_EVCR_PIN_Pos (0U)\r\n#define AFIO_EVCR_PIN_Msk (0xFU << AFIO_EVCR_PIN_Pos) /*!< 0x0000000F */\r\n#define AFIO_EVCR_PIN     AFIO_EVCR_PIN_Msk           /*!< PIN[3:0] bits (Pin selection) */\r\n#define AFIO_EVCR_PIN_0   (0x1U << AFIO_EVCR_PIN_Pos) /*!< 0x00000001 */\r\n#define AFIO_EVCR_PIN_1   (0x2U << AFIO_EVCR_PIN_Pos) /*!< 0x00000002 */\r\n#define AFIO_EVCR_PIN_2   (0x4U << AFIO_EVCR_PIN_Pos) /*!< 0x00000004 */\r\n#define AFIO_EVCR_PIN_3   (0x8U << AFIO_EVCR_PIN_Pos) /*!< 0x00000008 */\r\n\r\n/*!< PIN configuration */\r\n#define AFIO_EVCR_PIN_PX0      0x00000000U /*!< Pin 0 selected */\r\n#define AFIO_EVCR_PIN_PX1_Pos  (0U)\r\n#define AFIO_EVCR_PIN_PX1_Msk  (0x1U << AFIO_EVCR_PIN_PX1_Pos) /*!< 0x00000001 */\r\n#define AFIO_EVCR_PIN_PX1      AFIO_EVCR_PIN_PX1_Msk           /*!< Pin 1 selected */\r\n#define AFIO_EVCR_PIN_PX2_Pos  (1U)\r\n#define AFIO_EVCR_PIN_PX2_Msk  (0x1U << AFIO_EVCR_PIN_PX2_Pos) /*!< 0x00000002 */\r\n#define AFIO_EVCR_PIN_PX2      AFIO_EVCR_PIN_PX2_Msk           /*!< Pin 2 selected */\r\n#define AFIO_EVCR_PIN_PX3_Pos  (0U)\r\n#define AFIO_EVCR_PIN_PX3_Msk  (0x3U << AFIO_EVCR_PIN_PX3_Pos) /*!< 0x00000003 */\r\n#define AFIO_EVCR_PIN_PX3      AFIO_EVCR_PIN_PX3_Msk           /*!< Pin 3 selected */\r\n#define AFIO_EVCR_PIN_PX4_Pos  (2U)\r\n#define AFIO_EVCR_PIN_PX4_Msk  (0x1U << AFIO_EVCR_PIN_PX4_Pos) /*!< 0x00000004 */\r\n#define AFIO_EVCR_PIN_PX4      AFIO_EVCR_PIN_PX4_Msk           /*!< Pin 4 selected */\r\n#define AFIO_EVCR_PIN_PX5_Pos  (0U)\r\n#define AFIO_EVCR_PIN_PX5_Msk  (0x5U << AFIO_EVCR_PIN_PX5_Pos) /*!< 0x00000005 */\r\n#define AFIO_EVCR_PIN_PX5      AFIO_EVCR_PIN_PX5_Msk           /*!< Pin 5 selected */\r\n#define AFIO_EVCR_PIN_PX6_Pos  (1U)\r\n#define AFIO_EVCR_PIN_PX6_Msk  (0x3U << AFIO_EVCR_PIN_PX6_Pos) /*!< 0x00000006 */\r\n#define AFIO_EVCR_PIN_PX6      AFIO_EVCR_PIN_PX6_Msk           /*!< Pin 6 selected */\r\n#define AFIO_EVCR_PIN_PX7_Pos  (0U)\r\n#define AFIO_EVCR_PIN_PX7_Msk  (0x7U << AFIO_EVCR_PIN_PX7_Pos) /*!< 0x00000007 */\r\n#define AFIO_EVCR_PIN_PX7      AFIO_EVCR_PIN_PX7_Msk           /*!< Pin 7 selected */\r\n#define AFIO_EVCR_PIN_PX8_Pos  (3U)\r\n#define AFIO_EVCR_PIN_PX8_Msk  (0x1U << AFIO_EVCR_PIN_PX8_Pos) /*!< 0x00000008 */\r\n#define AFIO_EVCR_PIN_PX8      AFIO_EVCR_PIN_PX8_Msk           /*!< Pin 8 selected */\r\n#define AFIO_EVCR_PIN_PX9_Pos  (0U)\r\n#define AFIO_EVCR_PIN_PX9_Msk  (0x9U << AFIO_EVCR_PIN_PX9_Pos) /*!< 0x00000009 */\r\n#define AFIO_EVCR_PIN_PX9      AFIO_EVCR_PIN_PX9_Msk           /*!< Pin 9 selected */\r\n#define AFIO_EVCR_PIN_PX10_Pos (1U)\r\n#define AFIO_EVCR_PIN_PX10_Msk (0x5U << AFIO_EVCR_PIN_PX10_Pos) /*!< 0x0000000A */\r\n#define AFIO_EVCR_PIN_PX10     AFIO_EVCR_PIN_PX10_Msk           /*!< Pin 10 selected */\r\n#define AFIO_EVCR_PIN_PX11_Pos (0U)\r\n#define AFIO_EVCR_PIN_PX11_Msk (0xBU << AFIO_EVCR_PIN_PX11_Pos) /*!< 0x0000000B */\r\n#define AFIO_EVCR_PIN_PX11     AFIO_EVCR_PIN_PX11_Msk           /*!< Pin 11 selected */\r\n#define AFIO_EVCR_PIN_PX12_Pos (2U)\r\n#define AFIO_EVCR_PIN_PX12_Msk (0x3U << AFIO_EVCR_PIN_PX12_Pos) /*!< 0x0000000C */\r\n#define AFIO_EVCR_PIN_PX12     AFIO_EVCR_PIN_PX12_Msk           /*!< Pin 12 selected */\r\n#define AFIO_EVCR_PIN_PX13_Pos (0U)\r\n#define AFIO_EVCR_PIN_PX13_Msk (0xDU << AFIO_EVCR_PIN_PX13_Pos) /*!< 0x0000000D */\r\n#define AFIO_EVCR_PIN_PX13     AFIO_EVCR_PIN_PX13_Msk           /*!< Pin 13 selected */\r\n#define AFIO_EVCR_PIN_PX14_Pos (1U)\r\n#define AFIO_EVCR_PIN_PX14_Msk (0x7U << AFIO_EVCR_PIN_PX14_Pos) /*!< 0x0000000E */\r\n#define AFIO_EVCR_PIN_PX14     AFIO_EVCR_PIN_PX14_Msk           /*!< Pin 14 selected */\r\n#define AFIO_EVCR_PIN_PX15_Pos (0U)\r\n#define AFIO_EVCR_PIN_PX15_Msk (0xFU << AFIO_EVCR_PIN_PX15_Pos) /*!< 0x0000000F */\r\n#define AFIO_EVCR_PIN_PX15     AFIO_EVCR_PIN_PX15_Msk           /*!< Pin 15 selected */\r\n\r\n#define AFIO_EVCR_PORT_Pos (4U)\r\n#define AFIO_EVCR_PORT_Msk (0x7U << AFIO_EVCR_PORT_Pos) /*!< 0x00000070 */\r\n#define AFIO_EVCR_PORT     AFIO_EVCR_PORT_Msk           /*!< PORT[2:0] bits (Port selection) */\r\n#define AFIO_EVCR_PORT_0   (0x1U << AFIO_EVCR_PORT_Pos) /*!< 0x00000010 */\r\n#define AFIO_EVCR_PORT_1   (0x2U << AFIO_EVCR_PORT_Pos) /*!< 0x00000020 */\r\n#define AFIO_EVCR_PORT_2   (0x4U << AFIO_EVCR_PORT_Pos) /*!< 0x00000040 */\r\n\r\n/*!< PORT configuration */\r\n#define AFIO_EVCR_PORT_PA     0x00000000 /*!< Port A selected */\r\n#define AFIO_EVCR_PORT_PB_Pos (4U)\r\n#define AFIO_EVCR_PORT_PB_Msk (0x1U << AFIO_EVCR_PORT_PB_Pos) /*!< 0x00000010 */\r\n#define AFIO_EVCR_PORT_PB     AFIO_EVCR_PORT_PB_Msk           /*!< Port B selected */\r\n#define AFIO_EVCR_PORT_PC_Pos (5U)\r\n#define AFIO_EVCR_PORT_PC_Msk (0x1U << AFIO_EVCR_PORT_PC_Pos) /*!< 0x00000020 */\r\n#define AFIO_EVCR_PORT_PC     AFIO_EVCR_PORT_PC_Msk           /*!< Port C selected */\r\n#define AFIO_EVCR_PORT_PD_Pos (4U)\r\n#define AFIO_EVCR_PORT_PD_Msk (0x3U << AFIO_EVCR_PORT_PD_Pos) /*!< 0x00000030 */\r\n#define AFIO_EVCR_PORT_PD     AFIO_EVCR_PORT_PD_Msk           /*!< Port D selected */\r\n#define AFIO_EVCR_PORT_PE_Pos (6U)\r\n#define AFIO_EVCR_PORT_PE_Msk (0x1U << AFIO_EVCR_PORT_PE_Pos) /*!< 0x00000040 */\r\n#define AFIO_EVCR_PORT_PE     AFIO_EVCR_PORT_PE_Msk           /*!< Port E selected */\r\n\r\n#define AFIO_EVCR_EVOE_Pos (7U)\r\n#define AFIO_EVCR_EVOE_Msk (0x1U << AFIO_EVCR_EVOE_Pos) /*!< 0x00000080 */\r\n#define AFIO_EVCR_EVOE     AFIO_EVCR_EVOE_Msk           /*!< Event Output Enable */\r\n\r\n/******************  Bit definition for AFIO_MAPR register  *******************/\r\n#define AFIO_MAPR_SPI1_REMAP_Pos   (0U)\r\n#define AFIO_MAPR_SPI1_REMAP_Msk   (0x1U << AFIO_MAPR_SPI1_REMAP_Pos) /*!< 0x00000001 */\r\n#define AFIO_MAPR_SPI1_REMAP       AFIO_MAPR_SPI1_REMAP_Msk           /*!< SPI1 remapping */\r\n#define AFIO_MAPR_I2C1_REMAP_Pos   (1U)\r\n#define AFIO_MAPR_I2C1_REMAP_Msk   (0x1U << AFIO_MAPR_I2C1_REMAP_Pos) /*!< 0x00000002 */\r\n#define AFIO_MAPR_I2C1_REMAP       AFIO_MAPR_I2C1_REMAP_Msk           /*!< I2C1 remapping */\r\n#define AFIO_MAPR_USART1_REMAP_Pos (2U)\r\n#define AFIO_MAPR_USART1_REMAP_Msk (0x1U << AFIO_MAPR_USART1_REMAP_Pos) /*!< 0x00000004 */\r\n#define AFIO_MAPR_USART1_REMAP     AFIO_MAPR_USART1_REMAP_Msk           /*!< USART1 remapping */\r\n#define AFIO_MAPR_USART2_REMAP_Pos (3U)\r\n#define AFIO_MAPR_USART2_REMAP_Msk (0x1U << AFIO_MAPR_USART2_REMAP_Pos) /*!< 0x00000008 */\r\n#define AFIO_MAPR_USART2_REMAP     AFIO_MAPR_USART2_REMAP_Msk           /*!< USART2 remapping */\r\n\r\n#define AFIO_MAPR_USART3_REMAP_Pos (4U)\r\n#define AFIO_MAPR_USART3_REMAP_Msk (0x3U << AFIO_MAPR_USART3_REMAP_Pos) /*!< 0x00000030 */\r\n#define AFIO_MAPR_USART3_REMAP     AFIO_MAPR_USART3_REMAP_Msk           /*!< USART3_REMAP[1:0] bits (USART3 remapping) */\r\n#define AFIO_MAPR_USART3_REMAP_0   (0x1U << AFIO_MAPR_USART3_REMAP_Pos) /*!< 0x00000010 */\r\n#define AFIO_MAPR_USART3_REMAP_1   (0x2U << AFIO_MAPR_USART3_REMAP_Pos) /*!< 0x00000020 */\r\n\r\n/* USART3_REMAP configuration */\r\n#define AFIO_MAPR_USART3_REMAP_NOREMAP          0x00000000U /*!< No remap (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14) */\r\n#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Pos (4U)\r\n#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Msk (0x1U << AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Pos) /*!< 0x00000010 */\r\n#define AFIO_MAPR_USART3_REMAP_PARTIALREMAP     AFIO_MAPR_USART3_REMAP_PARTIALREMAP_Msk           /*!< Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14) */\r\n#define AFIO_MAPR_USART3_REMAP_FULLREMAP_Pos    (4U)\r\n#define AFIO_MAPR_USART3_REMAP_FULLREMAP_Msk    (0x3U << AFIO_MAPR_USART3_REMAP_FULLREMAP_Pos) /*!< 0x00000030 */\r\n#define AFIO_MAPR_USART3_REMAP_FULLREMAP        AFIO_MAPR_USART3_REMAP_FULLREMAP_Msk           /*!< Full remap (TX/PD8, RX/PD9, CK/PD10, CTS/PD11, RTS/PD12) */\r\n\r\n#define AFIO_MAPR_TIM1_REMAP_Pos (6U)\r\n#define AFIO_MAPR_TIM1_REMAP_Msk (0x3U << AFIO_MAPR_TIM1_REMAP_Pos) /*!< 0x000000C0 */\r\n#define AFIO_MAPR_TIM1_REMAP     AFIO_MAPR_TIM1_REMAP_Msk           /*!< TIM1_REMAP[1:0] bits (TIM1 remapping) */\r\n#define AFIO_MAPR_TIM1_REMAP_0   (0x1U << AFIO_MAPR_TIM1_REMAP_Pos) /*!< 0x00000040 */\r\n#define AFIO_MAPR_TIM1_REMAP_1   (0x2U << AFIO_MAPR_TIM1_REMAP_Pos) /*!< 0x00000080 */\r\n\r\n/*!< TIM1_REMAP configuration */\r\n#define AFIO_MAPR_TIM1_REMAP_NOREMAP          0x00000000U /*!< No remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PB12, CH1N/PB13, CH2N/PB14, CH3N/PB15) */\r\n#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Pos (6U)\r\n#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Msk (0x1U << AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Pos) /*!< 0x00000040 */\r\n#define AFIO_MAPR_TIM1_REMAP_PARTIALREMAP     AFIO_MAPR_TIM1_REMAP_PARTIALREMAP_Msk /*!< Partial remap (ETR/PA12, CH1/PA8, CH2/PA9, CH3/PA10, CH4/PA11, BKIN/PA6, CH1N/PA7, CH2N/PB0, CH3N/PB1) */\r\n#define AFIO_MAPR_TIM1_REMAP_FULLREMAP_Pos    (6U)\r\n#define AFIO_MAPR_TIM1_REMAP_FULLREMAP_Msk    (0x3U << AFIO_MAPR_TIM1_REMAP_FULLREMAP_Pos) /*!< 0x000000C0 */\r\n#define AFIO_MAPR_TIM1_REMAP_FULLREMAP        AFIO_MAPR_TIM1_REMAP_FULLREMAP_Msk /*!< Full remap (ETR/PE7, CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8, CH2N/PE10, CH3N/PE12) */\r\n\r\n#define AFIO_MAPR_TIM2_REMAP_Pos (8U)\r\n#define AFIO_MAPR_TIM2_REMAP_Msk (0x3U << AFIO_MAPR_TIM2_REMAP_Pos) /*!< 0x00000300 */\r\n#define AFIO_MAPR_TIM2_REMAP     AFIO_MAPR_TIM2_REMAP_Msk           /*!< TIM2_REMAP[1:0] bits (TIM2 remapping) */\r\n#define AFIO_MAPR_TIM2_REMAP_0   (0x1U << AFIO_MAPR_TIM2_REMAP_Pos) /*!< 0x00000100 */\r\n#define AFIO_MAPR_TIM2_REMAP_1   (0x2U << AFIO_MAPR_TIM2_REMAP_Pos) /*!< 0x00000200 */\r\n\r\n/*!< TIM2_REMAP configuration */\r\n#define AFIO_MAPR_TIM2_REMAP_NOREMAP           0x00000000U /*!< No remap (CH1/ETR/PA0, CH2/PA1, CH3/PA2, CH4/PA3) */\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Pos (8U)\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Msk (0x1U << AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Pos) /*!< 0x00000100 */\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1     AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1_Msk           /*!< Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2, CH4/PA3) */\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Pos (9U)\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Msk (0x1U << AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Pos) /*!< 0x00000200 */\r\n#define AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2     AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2_Msk           /*!< Partial remap (CH1/ETR/PA0, CH2/PA1, CH3/PB10, CH4/PB11) */\r\n#define AFIO_MAPR_TIM2_REMAP_FULLREMAP_Pos     (8U)\r\n#define AFIO_MAPR_TIM2_REMAP_FULLREMAP_Msk     (0x3U << AFIO_MAPR_TIM2_REMAP_FULLREMAP_Pos) /*!< 0x00000300 */\r\n#define AFIO_MAPR_TIM2_REMAP_FULLREMAP         AFIO_MAPR_TIM2_REMAP_FULLREMAP_Msk           /*!< Full remap (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11) */\r\n\r\n#define AFIO_MAPR_TIM3_REMAP_Pos (10U)\r\n#define AFIO_MAPR_TIM3_REMAP_Msk (0x3U << AFIO_MAPR_TIM3_REMAP_Pos) /*!< 0x00000C00 */\r\n#define AFIO_MAPR_TIM3_REMAP     AFIO_MAPR_TIM3_REMAP_Msk           /*!< TIM3_REMAP[1:0] bits (TIM3 remapping) */\r\n#define AFIO_MAPR_TIM3_REMAP_0   (0x1U << AFIO_MAPR_TIM3_REMAP_Pos) /*!< 0x00000400 */\r\n#define AFIO_MAPR_TIM3_REMAP_1   (0x2U << AFIO_MAPR_TIM3_REMAP_Pos) /*!< 0x00000800 */\r\n\r\n/*!< TIM3_REMAP configuration */\r\n#define AFIO_MAPR_TIM3_REMAP_NOREMAP          0x00000000U /*!< No remap (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1) */\r\n#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Pos (11U)\r\n#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Msk (0x1U << AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Pos) /*!< 0x00000800 */\r\n#define AFIO_MAPR_TIM3_REMAP_PARTIALREMAP     AFIO_MAPR_TIM3_REMAP_PARTIALREMAP_Msk           /*!< Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1) */\r\n#define AFIO_MAPR_TIM3_REMAP_FULLREMAP_Pos    (10U)\r\n#define AFIO_MAPR_TIM3_REMAP_FULLREMAP_Msk    (0x3U << AFIO_MAPR_TIM3_REMAP_FULLREMAP_Pos) /*!< 0x00000C00 */\r\n#define AFIO_MAPR_TIM3_REMAP_FULLREMAP        AFIO_MAPR_TIM3_REMAP_FULLREMAP_Msk           /*!< Full remap (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9) */\r\n\r\n#define AFIO_MAPR_TIM4_REMAP_Pos (12U)\r\n#define AFIO_MAPR_TIM4_REMAP_Msk (0x1U << AFIO_MAPR_TIM4_REMAP_Pos) /*!< 0x00001000 */\r\n#define AFIO_MAPR_TIM4_REMAP     AFIO_MAPR_TIM4_REMAP_Msk           /*!< TIM4_REMAP bit (TIM4 remapping) */\r\n\r\n#define AFIO_MAPR_CAN_REMAP_Pos (13U)\r\n#define AFIO_MAPR_CAN_REMAP_Msk (0x3U << AFIO_MAPR_CAN_REMAP_Pos) /*!< 0x00006000 */\r\n#define AFIO_MAPR_CAN_REMAP     AFIO_MAPR_CAN_REMAP_Msk           /*!< CAN_REMAP[1:0] bits (CAN Alternate function remapping) */\r\n#define AFIO_MAPR_CAN_REMAP_0   (0x1U << AFIO_MAPR_CAN_REMAP_Pos) /*!< 0x00002000 */\r\n#define AFIO_MAPR_CAN_REMAP_1   (0x2U << AFIO_MAPR_CAN_REMAP_Pos) /*!< 0x00004000 */\r\n\r\n/*!< CAN_REMAP configuration */\r\n#define AFIO_MAPR_CAN_REMAP_REMAP1     0x00000000U /*!< CANRX mapped to PA11, CANTX mapped to PA12 */\r\n#define AFIO_MAPR_CAN_REMAP_REMAP2_Pos (14U)\r\n#define AFIO_MAPR_CAN_REMAP_REMAP2_Msk (0x1U << AFIO_MAPR_CAN_REMAP_REMAP2_Pos) /*!< 0x00004000 */\r\n#define AFIO_MAPR_CAN_REMAP_REMAP2     AFIO_MAPR_CAN_REMAP_REMAP2_Msk           /*!< CANRX mapped to PB8, CANTX mapped to PB9 */\r\n#define AFIO_MAPR_CAN_REMAP_REMAP3_Pos (13U)\r\n#define AFIO_MAPR_CAN_REMAP_REMAP3_Msk (0x3U << AFIO_MAPR_CAN_REMAP_REMAP3_Pos) /*!< 0x00006000 */\r\n#define AFIO_MAPR_CAN_REMAP_REMAP3     AFIO_MAPR_CAN_REMAP_REMAP3_Msk           /*!< CANRX mapped to PD0, CANTX mapped to PD1 */\r\n\r\n#define AFIO_MAPR_PD01_REMAP_Pos (15U)\r\n#define AFIO_MAPR_PD01_REMAP_Msk (0x1U << AFIO_MAPR_PD01_REMAP_Pos) /*!< 0x00008000 */\r\n#define AFIO_MAPR_PD01_REMAP     AFIO_MAPR_PD01_REMAP_Msk           /*!< Port D0/Port D1 mapping on OSC_IN/OSC_OUT */\r\n\r\n/*!< SWJ_CFG configuration */\r\n#define AFIO_MAPR_SWJ_CFG_Pos (24U)\r\n#define AFIO_MAPR_SWJ_CFG_Msk (0x7U << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x07000000 */\r\n#define AFIO_MAPR_SWJ_CFG     AFIO_MAPR_SWJ_CFG_Msk           /*!< SWJ_CFG[2:0] bits (Serial Wire JTAG configuration) */\r\n#define AFIO_MAPR_SWJ_CFG_0   (0x1U << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x01000000 */\r\n#define AFIO_MAPR_SWJ_CFG_1   (0x2U << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x02000000 */\r\n#define AFIO_MAPR_SWJ_CFG_2   (0x4U << AFIO_MAPR_SWJ_CFG_Pos) /*!< 0x04000000 */\r\n\r\n#define AFIO_MAPR_SWJ_CFG_RESET           0x00000000U /*!< Full SWJ (JTAG-DP + SW-DP) : Reset State */\r\n#define AFIO_MAPR_SWJ_CFG_NOJNTRST_Pos    (24U)\r\n#define AFIO_MAPR_SWJ_CFG_NOJNTRST_Msk    (0x1U << AFIO_MAPR_SWJ_CFG_NOJNTRST_Pos) /*!< 0x01000000 */\r\n#define AFIO_MAPR_SWJ_CFG_NOJNTRST        AFIO_MAPR_SWJ_CFG_NOJNTRST_Msk           /*!< Full SWJ (JTAG-DP + SW-DP) but without JNTRST */\r\n#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Pos (25U)\r\n#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Msk (0x1U << AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Pos) /*!< 0x02000000 */\r\n#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE     AFIO_MAPR_SWJ_CFG_JTAGDISABLE_Msk           /*!< JTAG-DP Disabled and SW-DP Enabled */\r\n#define AFIO_MAPR_SWJ_CFG_DISABLE_Pos     (26U)\r\n#define AFIO_MAPR_SWJ_CFG_DISABLE_Msk     (0x1U << AFIO_MAPR_SWJ_CFG_DISABLE_Pos) /*!< 0x04000000 */\r\n#define AFIO_MAPR_SWJ_CFG_DISABLE         AFIO_MAPR_SWJ_CFG_DISABLE_Msk           /*!< JTAG-DP Disabled and SW-DP Disabled */\r\n\r\n/*****************  Bit definition for AFIO_EXTICR1 register  *****************/\r\n#define AFIO_EXTICR1_EXTI0_Pos (0U)\r\n#define AFIO_EXTICR1_EXTI0_Msk (0xFU << AFIO_EXTICR1_EXTI0_Pos) /*!< 0x0000000F */\r\n#define AFIO_EXTICR1_EXTI0     AFIO_EXTICR1_EXTI0_Msk           /*!< EXTI 0 configuration */\r\n#define AFIO_EXTICR1_EXTI1_Pos (4U)\r\n#define AFIO_EXTICR1_EXTI1_Msk (0xFU << AFIO_EXTICR1_EXTI1_Pos) /*!< 0x000000F0 */\r\n#define AFIO_EXTICR1_EXTI1     AFIO_EXTICR1_EXTI1_Msk           /*!< EXTI 1 configuration */\r\n#define AFIO_EXTICR1_EXTI2_Pos (8U)\r\n#define AFIO_EXTICR1_EXTI2_Msk (0xFU << AFIO_EXTICR1_EXTI2_Pos) /*!< 0x00000F00 */\r\n#define AFIO_EXTICR1_EXTI2     AFIO_EXTICR1_EXTI2_Msk           /*!< EXTI 2 configuration */\r\n#define AFIO_EXTICR1_EXTI3_Pos (12U)\r\n#define AFIO_EXTICR1_EXTI3_Msk (0xFU << AFIO_EXTICR1_EXTI3_Pos) /*!< 0x0000F000 */\r\n#define AFIO_EXTICR1_EXTI3     AFIO_EXTICR1_EXTI3_Msk           /*!< EXTI 3 configuration */\r\n\r\n/*!< EXTI0 configuration */\r\n#define AFIO_EXTICR1_EXTI0_PA     0x00000000U /*!< PA[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PB_Pos (0U)\r\n#define AFIO_EXTICR1_EXTI0_PB_Msk (0x1U << AFIO_EXTICR1_EXTI0_PB_Pos) /*!< 0x00000001 */\r\n#define AFIO_EXTICR1_EXTI0_PB     AFIO_EXTICR1_EXTI0_PB_Msk           /*!< PB[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PC_Pos (1U)\r\n#define AFIO_EXTICR1_EXTI0_PC_Msk (0x1U << AFIO_EXTICR1_EXTI0_PC_Pos) /*!< 0x00000002 */\r\n#define AFIO_EXTICR1_EXTI0_PC     AFIO_EXTICR1_EXTI0_PC_Msk           /*!< PC[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PD_Pos (0U)\r\n#define AFIO_EXTICR1_EXTI0_PD_Msk (0x3U << AFIO_EXTICR1_EXTI0_PD_Pos) /*!< 0x00000003 */\r\n#define AFIO_EXTICR1_EXTI0_PD     AFIO_EXTICR1_EXTI0_PD_Msk           /*!< PD[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PE_Pos (2U)\r\n#define AFIO_EXTICR1_EXTI0_PE_Msk (0x1U << AFIO_EXTICR1_EXTI0_PE_Pos) /*!< 0x00000004 */\r\n#define AFIO_EXTICR1_EXTI0_PE     AFIO_EXTICR1_EXTI0_PE_Msk           /*!< PE[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PF_Pos (0U)\r\n#define AFIO_EXTICR1_EXTI0_PF_Msk (0x5U << AFIO_EXTICR1_EXTI0_PF_Pos) /*!< 0x00000005 */\r\n#define AFIO_EXTICR1_EXTI0_PF     AFIO_EXTICR1_EXTI0_PF_Msk           /*!< PF[0] pin */\r\n#define AFIO_EXTICR1_EXTI0_PG_Pos (1U)\r\n#define AFIO_EXTICR1_EXTI0_PG_Msk (0x3U << AFIO_EXTICR1_EXTI0_PG_Pos) /*!< 0x00000006 */\r\n#define AFIO_EXTICR1_EXTI0_PG     AFIO_EXTICR1_EXTI0_PG_Msk           /*!< PG[0] pin */\r\n\r\n/*!< EXTI1 configuration */\r\n#define AFIO_EXTICR1_EXTI1_PA     0x00000000U /*!< PA[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PB_Pos (4U)\r\n#define AFIO_EXTICR1_EXTI1_PB_Msk (0x1U << AFIO_EXTICR1_EXTI1_PB_Pos) /*!< 0x00000010 */\r\n#define AFIO_EXTICR1_EXTI1_PB     AFIO_EXTICR1_EXTI1_PB_Msk           /*!< PB[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PC_Pos (5U)\r\n#define AFIO_EXTICR1_EXTI1_PC_Msk (0x1U << AFIO_EXTICR1_EXTI1_PC_Pos) /*!< 0x00000020 */\r\n#define AFIO_EXTICR1_EXTI1_PC     AFIO_EXTICR1_EXTI1_PC_Msk           /*!< PC[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PD_Pos (4U)\r\n#define AFIO_EXTICR1_EXTI1_PD_Msk (0x3U << AFIO_EXTICR1_EXTI1_PD_Pos) /*!< 0x00000030 */\r\n#define AFIO_EXTICR1_EXTI1_PD     AFIO_EXTICR1_EXTI1_PD_Msk           /*!< PD[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PE_Pos (6U)\r\n#define AFIO_EXTICR1_EXTI1_PE_Msk (0x1U << AFIO_EXTICR1_EXTI1_PE_Pos) /*!< 0x00000040 */\r\n#define AFIO_EXTICR1_EXTI1_PE     AFIO_EXTICR1_EXTI1_PE_Msk           /*!< PE[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PF_Pos (4U)\r\n#define AFIO_EXTICR1_EXTI1_PF_Msk (0x5U << AFIO_EXTICR1_EXTI1_PF_Pos) /*!< 0x00000050 */\r\n#define AFIO_EXTICR1_EXTI1_PF     AFIO_EXTICR1_EXTI1_PF_Msk           /*!< PF[1] pin */\r\n#define AFIO_EXTICR1_EXTI1_PG_Pos (5U)\r\n#define AFIO_EXTICR1_EXTI1_PG_Msk (0x3U << AFIO_EXTICR1_EXTI1_PG_Pos) /*!< 0x00000060 */\r\n#define AFIO_EXTICR1_EXTI1_PG     AFIO_EXTICR1_EXTI1_PG_Msk           /*!< PG[1] pin */\r\n\r\n/*!< EXTI2 configuration */\r\n#define AFIO_EXTICR1_EXTI2_PA     0x00000000U /*!< PA[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PB_Pos (8U)\r\n#define AFIO_EXTICR1_EXTI2_PB_Msk (0x1U << AFIO_EXTICR1_EXTI2_PB_Pos) /*!< 0x00000100 */\r\n#define AFIO_EXTICR1_EXTI2_PB     AFIO_EXTICR1_EXTI2_PB_Msk           /*!< PB[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PC_Pos (9U)\r\n#define AFIO_EXTICR1_EXTI2_PC_Msk (0x1U << AFIO_EXTICR1_EXTI2_PC_Pos) /*!< 0x00000200 */\r\n#define AFIO_EXTICR1_EXTI2_PC     AFIO_EXTICR1_EXTI2_PC_Msk           /*!< PC[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PD_Pos (8U)\r\n#define AFIO_EXTICR1_EXTI2_PD_Msk (0x3U << AFIO_EXTICR1_EXTI2_PD_Pos) /*!< 0x00000300 */\r\n#define AFIO_EXTICR1_EXTI2_PD     AFIO_EXTICR1_EXTI2_PD_Msk           /*!< PD[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PE_Pos (10U)\r\n#define AFIO_EXTICR1_EXTI2_PE_Msk (0x1U << AFIO_EXTICR1_EXTI2_PE_Pos) /*!< 0x00000400 */\r\n#define AFIO_EXTICR1_EXTI2_PE     AFIO_EXTICR1_EXTI2_PE_Msk           /*!< PE[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PF_Pos (8U)\r\n#define AFIO_EXTICR1_EXTI2_PF_Msk (0x5U << AFIO_EXTICR1_EXTI2_PF_Pos) /*!< 0x00000500 */\r\n#define AFIO_EXTICR1_EXTI2_PF     AFIO_EXTICR1_EXTI2_PF_Msk           /*!< PF[2] pin */\r\n#define AFIO_EXTICR1_EXTI2_PG_Pos (9U)\r\n#define AFIO_EXTICR1_EXTI2_PG_Msk (0x3U << AFIO_EXTICR1_EXTI2_PG_Pos) /*!< 0x00000600 */\r\n#define AFIO_EXTICR1_EXTI2_PG     AFIO_EXTICR1_EXTI2_PG_Msk           /*!< PG[2] pin */\r\n\r\n/*!< EXTI3 configuration */\r\n#define AFIO_EXTICR1_EXTI3_PA     0x00000000U /*!< PA[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PB_Pos (12U)\r\n#define AFIO_EXTICR1_EXTI3_PB_Msk (0x1U << AFIO_EXTICR1_EXTI3_PB_Pos) /*!< 0x00001000 */\r\n#define AFIO_EXTICR1_EXTI3_PB     AFIO_EXTICR1_EXTI3_PB_Msk           /*!< PB[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PC_Pos (13U)\r\n#define AFIO_EXTICR1_EXTI3_PC_Msk (0x1U << AFIO_EXTICR1_EXTI3_PC_Pos) /*!< 0x00002000 */\r\n#define AFIO_EXTICR1_EXTI3_PC     AFIO_EXTICR1_EXTI3_PC_Msk           /*!< PC[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PD_Pos (12U)\r\n#define AFIO_EXTICR1_EXTI3_PD_Msk (0x3U << AFIO_EXTICR1_EXTI3_PD_Pos) /*!< 0x00003000 */\r\n#define AFIO_EXTICR1_EXTI3_PD     AFIO_EXTICR1_EXTI3_PD_Msk           /*!< PD[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PE_Pos (14U)\r\n#define AFIO_EXTICR1_EXTI3_PE_Msk (0x1U << AFIO_EXTICR1_EXTI3_PE_Pos) /*!< 0x00004000 */\r\n#define AFIO_EXTICR1_EXTI3_PE     AFIO_EXTICR1_EXTI3_PE_Msk           /*!< PE[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PF_Pos (12U)\r\n#define AFIO_EXTICR1_EXTI3_PF_Msk (0x5U << AFIO_EXTICR1_EXTI3_PF_Pos) /*!< 0x00005000 */\r\n#define AFIO_EXTICR1_EXTI3_PF     AFIO_EXTICR1_EXTI3_PF_Msk           /*!< PF[3] pin */\r\n#define AFIO_EXTICR1_EXTI3_PG_Pos (13U)\r\n#define AFIO_EXTICR1_EXTI3_PG_Msk (0x3U << AFIO_EXTICR1_EXTI3_PG_Pos) /*!< 0x00006000 */\r\n#define AFIO_EXTICR1_EXTI3_PG     AFIO_EXTICR1_EXTI3_PG_Msk           /*!< PG[3] pin */\r\n\r\n/*****************  Bit definition for AFIO_EXTICR2 register  *****************/\r\n#define AFIO_EXTICR2_EXTI4_Pos (0U)\r\n#define AFIO_EXTICR2_EXTI4_Msk (0xFU << AFIO_EXTICR2_EXTI4_Pos) /*!< 0x0000000F */\r\n#define AFIO_EXTICR2_EXTI4     AFIO_EXTICR2_EXTI4_Msk           /*!< EXTI 4 configuration */\r\n#define AFIO_EXTICR2_EXTI5_Pos (4U)\r\n#define AFIO_EXTICR2_EXTI5_Msk (0xFU << AFIO_EXTICR2_EXTI5_Pos) /*!< 0x000000F0 */\r\n#define AFIO_EXTICR2_EXTI5     AFIO_EXTICR2_EXTI5_Msk           /*!< EXTI 5 configuration */\r\n#define AFIO_EXTICR2_EXTI6_Pos (8U)\r\n#define AFIO_EXTICR2_EXTI6_Msk (0xFU << AFIO_EXTICR2_EXTI6_Pos) /*!< 0x00000F00 */\r\n#define AFIO_EXTICR2_EXTI6     AFIO_EXTICR2_EXTI6_Msk           /*!< EXTI 6 configuration */\r\n#define AFIO_EXTICR2_EXTI7_Pos (12U)\r\n#define AFIO_EXTICR2_EXTI7_Msk (0xFU << AFIO_EXTICR2_EXTI7_Pos) /*!< 0x0000F000 */\r\n#define AFIO_EXTICR2_EXTI7     AFIO_EXTICR2_EXTI7_Msk           /*!< EXTI 7 configuration */\r\n\r\n/*!< EXTI4 configuration */\r\n#define AFIO_EXTICR2_EXTI4_PA     0x00000000U /*!< PA[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PB_Pos (0U)\r\n#define AFIO_EXTICR2_EXTI4_PB_Msk (0x1U << AFIO_EXTICR2_EXTI4_PB_Pos) /*!< 0x00000001 */\r\n#define AFIO_EXTICR2_EXTI4_PB     AFIO_EXTICR2_EXTI4_PB_Msk           /*!< PB[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PC_Pos (1U)\r\n#define AFIO_EXTICR2_EXTI4_PC_Msk (0x1U << AFIO_EXTICR2_EXTI4_PC_Pos) /*!< 0x00000002 */\r\n#define AFIO_EXTICR2_EXTI4_PC     AFIO_EXTICR2_EXTI4_PC_Msk           /*!< PC[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PD_Pos (0U)\r\n#define AFIO_EXTICR2_EXTI4_PD_Msk (0x3U << AFIO_EXTICR2_EXTI4_PD_Pos) /*!< 0x00000003 */\r\n#define AFIO_EXTICR2_EXTI4_PD     AFIO_EXTICR2_EXTI4_PD_Msk           /*!< PD[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PE_Pos (2U)\r\n#define AFIO_EXTICR2_EXTI4_PE_Msk (0x1U << AFIO_EXTICR2_EXTI4_PE_Pos) /*!< 0x00000004 */\r\n#define AFIO_EXTICR2_EXTI4_PE     AFIO_EXTICR2_EXTI4_PE_Msk           /*!< PE[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PF_Pos (0U)\r\n#define AFIO_EXTICR2_EXTI4_PF_Msk (0x5U << AFIO_EXTICR2_EXTI4_PF_Pos) /*!< 0x00000005 */\r\n#define AFIO_EXTICR2_EXTI4_PF     AFIO_EXTICR2_EXTI4_PF_Msk           /*!< PF[4] pin */\r\n#define AFIO_EXTICR2_EXTI4_PG_Pos (1U)\r\n#define AFIO_EXTICR2_EXTI4_PG_Msk (0x3U << AFIO_EXTICR2_EXTI4_PG_Pos) /*!< 0x00000006 */\r\n#define AFIO_EXTICR2_EXTI4_PG     AFIO_EXTICR2_EXTI4_PG_Msk           /*!< PG[4] pin */\r\n\r\n/* EXTI5 configuration */\r\n#define AFIO_EXTICR2_EXTI5_PA     0x00000000U /*!< PA[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PB_Pos (4U)\r\n#define AFIO_EXTICR2_EXTI5_PB_Msk (0x1U << AFIO_EXTICR2_EXTI5_PB_Pos) /*!< 0x00000010 */\r\n#define AFIO_EXTICR2_EXTI5_PB     AFIO_EXTICR2_EXTI5_PB_Msk           /*!< PB[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PC_Pos (5U)\r\n#define AFIO_EXTICR2_EXTI5_PC_Msk (0x1U << AFIO_EXTICR2_EXTI5_PC_Pos) /*!< 0x00000020 */\r\n#define AFIO_EXTICR2_EXTI5_PC     AFIO_EXTICR2_EXTI5_PC_Msk           /*!< PC[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PD_Pos (4U)\r\n#define AFIO_EXTICR2_EXTI5_PD_Msk (0x3U << AFIO_EXTICR2_EXTI5_PD_Pos) /*!< 0x00000030 */\r\n#define AFIO_EXTICR2_EXTI5_PD     AFIO_EXTICR2_EXTI5_PD_Msk           /*!< PD[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PE_Pos (6U)\r\n#define AFIO_EXTICR2_EXTI5_PE_Msk (0x1U << AFIO_EXTICR2_EXTI5_PE_Pos) /*!< 0x00000040 */\r\n#define AFIO_EXTICR2_EXTI5_PE     AFIO_EXTICR2_EXTI5_PE_Msk           /*!< PE[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PF_Pos (4U)\r\n#define AFIO_EXTICR2_EXTI5_PF_Msk (0x5U << AFIO_EXTICR2_EXTI5_PF_Pos) /*!< 0x00000050 */\r\n#define AFIO_EXTICR2_EXTI5_PF     AFIO_EXTICR2_EXTI5_PF_Msk           /*!< PF[5] pin */\r\n#define AFIO_EXTICR2_EXTI5_PG_Pos (5U)\r\n#define AFIO_EXTICR2_EXTI5_PG_Msk (0x3U << AFIO_EXTICR2_EXTI5_PG_Pos) /*!< 0x00000060 */\r\n#define AFIO_EXTICR2_EXTI5_PG     AFIO_EXTICR2_EXTI5_PG_Msk           /*!< PG[5] pin */\r\n\r\n/*!< EXTI6 configuration */\r\n#define AFIO_EXTICR2_EXTI6_PA     0x00000000U /*!< PA[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PB_Pos (8U)\r\n#define AFIO_EXTICR2_EXTI6_PB_Msk (0x1U << AFIO_EXTICR2_EXTI6_PB_Pos) /*!< 0x00000100 */\r\n#define AFIO_EXTICR2_EXTI6_PB     AFIO_EXTICR2_EXTI6_PB_Msk           /*!< PB[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PC_Pos (9U)\r\n#define AFIO_EXTICR2_EXTI6_PC_Msk (0x1U << AFIO_EXTICR2_EXTI6_PC_Pos) /*!< 0x00000200 */\r\n#define AFIO_EXTICR2_EXTI6_PC     AFIO_EXTICR2_EXTI6_PC_Msk           /*!< PC[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PD_Pos (8U)\r\n#define AFIO_EXTICR2_EXTI6_PD_Msk (0x3U << AFIO_EXTICR2_EXTI6_PD_Pos) /*!< 0x00000300 */\r\n#define AFIO_EXTICR2_EXTI6_PD     AFIO_EXTICR2_EXTI6_PD_Msk           /*!< PD[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PE_Pos (10U)\r\n#define AFIO_EXTICR2_EXTI6_PE_Msk (0x1U << AFIO_EXTICR2_EXTI6_PE_Pos) /*!< 0x00000400 */\r\n#define AFIO_EXTICR2_EXTI6_PE     AFIO_EXTICR2_EXTI6_PE_Msk           /*!< PE[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PF_Pos (8U)\r\n#define AFIO_EXTICR2_EXTI6_PF_Msk (0x5U << AFIO_EXTICR2_EXTI6_PF_Pos) /*!< 0x00000500 */\r\n#define AFIO_EXTICR2_EXTI6_PF     AFIO_EXTICR2_EXTI6_PF_Msk           /*!< PF[6] pin */\r\n#define AFIO_EXTICR2_EXTI6_PG_Pos (9U)\r\n#define AFIO_EXTICR2_EXTI6_PG_Msk (0x3U << AFIO_EXTICR2_EXTI6_PG_Pos) /*!< 0x00000600 */\r\n#define AFIO_EXTICR2_EXTI6_PG     AFIO_EXTICR2_EXTI6_PG_Msk           /*!< PG[6] pin */\r\n\r\n/*!< EXTI7 configuration */\r\n#define AFIO_EXTICR2_EXTI7_PA     0x00000000U /*!< PA[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PB_Pos (12U)\r\n#define AFIO_EXTICR2_EXTI7_PB_Msk (0x1U << AFIO_EXTICR2_EXTI7_PB_Pos) /*!< 0x00001000 */\r\n#define AFIO_EXTICR2_EXTI7_PB     AFIO_EXTICR2_EXTI7_PB_Msk           /*!< PB[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PC_Pos (13U)\r\n#define AFIO_EXTICR2_EXTI7_PC_Msk (0x1U << AFIO_EXTICR2_EXTI7_PC_Pos) /*!< 0x00002000 */\r\n#define AFIO_EXTICR2_EXTI7_PC     AFIO_EXTICR2_EXTI7_PC_Msk           /*!< PC[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PD_Pos (12U)\r\n#define AFIO_EXTICR2_EXTI7_PD_Msk (0x3U << AFIO_EXTICR2_EXTI7_PD_Pos) /*!< 0x00003000 */\r\n#define AFIO_EXTICR2_EXTI7_PD     AFIO_EXTICR2_EXTI7_PD_Msk           /*!< PD[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PE_Pos (14U)\r\n#define AFIO_EXTICR2_EXTI7_PE_Msk (0x1U << AFIO_EXTICR2_EXTI7_PE_Pos) /*!< 0x00004000 */\r\n#define AFIO_EXTICR2_EXTI7_PE     AFIO_EXTICR2_EXTI7_PE_Msk           /*!< PE[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PF_Pos (12U)\r\n#define AFIO_EXTICR2_EXTI7_PF_Msk (0x5U << AFIO_EXTICR2_EXTI7_PF_Pos) /*!< 0x00005000 */\r\n#define AFIO_EXTICR2_EXTI7_PF     AFIO_EXTICR2_EXTI7_PF_Msk           /*!< PF[7] pin */\r\n#define AFIO_EXTICR2_EXTI7_PG_Pos (13U)\r\n#define AFIO_EXTICR2_EXTI7_PG_Msk (0x3U << AFIO_EXTICR2_EXTI7_PG_Pos) /*!< 0x00006000 */\r\n#define AFIO_EXTICR2_EXTI7_PG     AFIO_EXTICR2_EXTI7_PG_Msk           /*!< PG[7] pin */\r\n\r\n/*****************  Bit definition for AFIO_EXTICR3 register  *****************/\r\n#define AFIO_EXTICR3_EXTI8_Pos  (0U)\r\n#define AFIO_EXTICR3_EXTI8_Msk  (0xFU << AFIO_EXTICR3_EXTI8_Pos) /*!< 0x0000000F */\r\n#define AFIO_EXTICR3_EXTI8      AFIO_EXTICR3_EXTI8_Msk           /*!< EXTI 8 configuration */\r\n#define AFIO_EXTICR3_EXTI9_Pos  (4U)\r\n#define AFIO_EXTICR3_EXTI9_Msk  (0xFU << AFIO_EXTICR3_EXTI9_Pos) /*!< 0x000000F0 */\r\n#define AFIO_EXTICR3_EXTI9      AFIO_EXTICR3_EXTI9_Msk           /*!< EXTI 9 configuration */\r\n#define AFIO_EXTICR3_EXTI10_Pos (8U)\r\n#define AFIO_EXTICR3_EXTI10_Msk (0xFU << AFIO_EXTICR3_EXTI10_Pos) /*!< 0x00000F00 */\r\n#define AFIO_EXTICR3_EXTI10     AFIO_EXTICR3_EXTI10_Msk           /*!< EXTI 10 configuration */\r\n#define AFIO_EXTICR3_EXTI11_Pos (12U)\r\n#define AFIO_EXTICR3_EXTI11_Msk (0xFU << AFIO_EXTICR3_EXTI11_Pos) /*!< 0x0000F000 */\r\n#define AFIO_EXTICR3_EXTI11     AFIO_EXTICR3_EXTI11_Msk           /*!< EXTI 11 configuration */\r\n\r\n/*!< EXTI8 configuration */\r\n#define AFIO_EXTICR3_EXTI8_PA     0x00000000U /*!< PA[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PB_Pos (0U)\r\n#define AFIO_EXTICR3_EXTI8_PB_Msk (0x1U << AFIO_EXTICR3_EXTI8_PB_Pos) /*!< 0x00000001 */\r\n#define AFIO_EXTICR3_EXTI8_PB     AFIO_EXTICR3_EXTI8_PB_Msk           /*!< PB[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PC_Pos (1U)\r\n#define AFIO_EXTICR3_EXTI8_PC_Msk (0x1U << AFIO_EXTICR3_EXTI8_PC_Pos) /*!< 0x00000002 */\r\n#define AFIO_EXTICR3_EXTI8_PC     AFIO_EXTICR3_EXTI8_PC_Msk           /*!< PC[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PD_Pos (0U)\r\n#define AFIO_EXTICR3_EXTI8_PD_Msk (0x3U << AFIO_EXTICR3_EXTI8_PD_Pos) /*!< 0x00000003 */\r\n#define AFIO_EXTICR3_EXTI8_PD     AFIO_EXTICR3_EXTI8_PD_Msk           /*!< PD[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PE_Pos (2U)\r\n#define AFIO_EXTICR3_EXTI8_PE_Msk (0x1U << AFIO_EXTICR3_EXTI8_PE_Pos) /*!< 0x00000004 */\r\n#define AFIO_EXTICR3_EXTI8_PE     AFIO_EXTICR3_EXTI8_PE_Msk           /*!< PE[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PF_Pos (0U)\r\n#define AFIO_EXTICR3_EXTI8_PF_Msk (0x5U << AFIO_EXTICR3_EXTI8_PF_Pos) /*!< 0x00000005 */\r\n#define AFIO_EXTICR3_EXTI8_PF     AFIO_EXTICR3_EXTI8_PF_Msk           /*!< PF[8] pin */\r\n#define AFIO_EXTICR3_EXTI8_PG_Pos (1U)\r\n#define AFIO_EXTICR3_EXTI8_PG_Msk (0x3U << AFIO_EXTICR3_EXTI8_PG_Pos) /*!< 0x00000006 */\r\n#define AFIO_EXTICR3_EXTI8_PG     AFIO_EXTICR3_EXTI8_PG_Msk           /*!< PG[8] pin */\r\n\r\n/*!< EXTI9 configuration */\r\n#define AFIO_EXTICR3_EXTI9_PA     0x00000000U /*!< PA[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PB_Pos (4U)\r\n#define AFIO_EXTICR3_EXTI9_PB_Msk (0x1U << AFIO_EXTICR3_EXTI9_PB_Pos) /*!< 0x00000010 */\r\n#define AFIO_EXTICR3_EXTI9_PB     AFIO_EXTICR3_EXTI9_PB_Msk           /*!< PB[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PC_Pos (5U)\r\n#define AFIO_EXTICR3_EXTI9_PC_Msk (0x1U << AFIO_EXTICR3_EXTI9_PC_Pos) /*!< 0x00000020 */\r\n#define AFIO_EXTICR3_EXTI9_PC     AFIO_EXTICR3_EXTI9_PC_Msk           /*!< PC[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PD_Pos (4U)\r\n#define AFIO_EXTICR3_EXTI9_PD_Msk (0x3U << AFIO_EXTICR3_EXTI9_PD_Pos) /*!< 0x00000030 */\r\n#define AFIO_EXTICR3_EXTI9_PD     AFIO_EXTICR3_EXTI9_PD_Msk           /*!< PD[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PE_Pos (6U)\r\n#define AFIO_EXTICR3_EXTI9_PE_Msk (0x1U << AFIO_EXTICR3_EXTI9_PE_Pos) /*!< 0x00000040 */\r\n#define AFIO_EXTICR3_EXTI9_PE     AFIO_EXTICR3_EXTI9_PE_Msk           /*!< PE[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PF_Pos (4U)\r\n#define AFIO_EXTICR3_EXTI9_PF_Msk (0x5U << AFIO_EXTICR3_EXTI9_PF_Pos) /*!< 0x00000050 */\r\n#define AFIO_EXTICR3_EXTI9_PF     AFIO_EXTICR3_EXTI9_PF_Msk           /*!< PF[9] pin */\r\n#define AFIO_EXTICR3_EXTI9_PG_Pos (5U)\r\n#define AFIO_EXTICR3_EXTI9_PG_Msk (0x3U << AFIO_EXTICR3_EXTI9_PG_Pos) /*!< 0x00000060 */\r\n#define AFIO_EXTICR3_EXTI9_PG     AFIO_EXTICR3_EXTI9_PG_Msk           /*!< PG[9] pin */\r\n\r\n/*!< EXTI10 configuration */\r\n#define AFIO_EXTICR3_EXTI10_PA     0x00000000U /*!< PA[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PB_Pos (8U)\r\n#define AFIO_EXTICR3_EXTI10_PB_Msk (0x1U << AFIO_EXTICR3_EXTI10_PB_Pos) /*!< 0x00000100 */\r\n#define AFIO_EXTICR3_EXTI10_PB     AFIO_EXTICR3_EXTI10_PB_Msk           /*!< PB[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PC_Pos (9U)\r\n#define AFIO_EXTICR3_EXTI10_PC_Msk (0x1U << AFIO_EXTICR3_EXTI10_PC_Pos) /*!< 0x00000200 */\r\n#define AFIO_EXTICR3_EXTI10_PC     AFIO_EXTICR3_EXTI10_PC_Msk           /*!< PC[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PD_Pos (8U)\r\n#define AFIO_EXTICR3_EXTI10_PD_Msk (0x3U << AFIO_EXTICR3_EXTI10_PD_Pos) /*!< 0x00000300 */\r\n#define AFIO_EXTICR3_EXTI10_PD     AFIO_EXTICR3_EXTI10_PD_Msk           /*!< PD[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PE_Pos (10U)\r\n#define AFIO_EXTICR3_EXTI10_PE_Msk (0x1U << AFIO_EXTICR3_EXTI10_PE_Pos) /*!< 0x00000400 */\r\n#define AFIO_EXTICR3_EXTI10_PE     AFIO_EXTICR3_EXTI10_PE_Msk           /*!< PE[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PF_Pos (8U)\r\n#define AFIO_EXTICR3_EXTI10_PF_Msk (0x5U << AFIO_EXTICR3_EXTI10_PF_Pos) /*!< 0x00000500 */\r\n#define AFIO_EXTICR3_EXTI10_PF     AFIO_EXTICR3_EXTI10_PF_Msk           /*!< PF[10] pin */\r\n#define AFIO_EXTICR3_EXTI10_PG_Pos (9U)\r\n#define AFIO_EXTICR3_EXTI10_PG_Msk (0x3U << AFIO_EXTICR3_EXTI10_PG_Pos) /*!< 0x00000600 */\r\n#define AFIO_EXTICR3_EXTI10_PG     AFIO_EXTICR3_EXTI10_PG_Msk           /*!< PG[10] pin */\r\n\r\n/*!< EXTI11 configuration */\r\n#define AFIO_EXTICR3_EXTI11_PA     0x00000000U /*!< PA[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PB_Pos (12U)\r\n#define AFIO_EXTICR3_EXTI11_PB_Msk (0x1U << AFIO_EXTICR3_EXTI11_PB_Pos) /*!< 0x00001000 */\r\n#define AFIO_EXTICR3_EXTI11_PB     AFIO_EXTICR3_EXTI11_PB_Msk           /*!< PB[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PC_Pos (13U)\r\n#define AFIO_EXTICR3_EXTI11_PC_Msk (0x1U << AFIO_EXTICR3_EXTI11_PC_Pos) /*!< 0x00002000 */\r\n#define AFIO_EXTICR3_EXTI11_PC     AFIO_EXTICR3_EXTI11_PC_Msk           /*!< PC[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PD_Pos (12U)\r\n#define AFIO_EXTICR3_EXTI11_PD_Msk (0x3U << AFIO_EXTICR3_EXTI11_PD_Pos) /*!< 0x00003000 */\r\n#define AFIO_EXTICR3_EXTI11_PD     AFIO_EXTICR3_EXTI11_PD_Msk           /*!< PD[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PE_Pos (14U)\r\n#define AFIO_EXTICR3_EXTI11_PE_Msk (0x1U << AFIO_EXTICR3_EXTI11_PE_Pos) /*!< 0x00004000 */\r\n#define AFIO_EXTICR3_EXTI11_PE     AFIO_EXTICR3_EXTI11_PE_Msk           /*!< PE[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PF_Pos (12U)\r\n#define AFIO_EXTICR3_EXTI11_PF_Msk (0x5U << AFIO_EXTICR3_EXTI11_PF_Pos) /*!< 0x00005000 */\r\n#define AFIO_EXTICR3_EXTI11_PF     AFIO_EXTICR3_EXTI11_PF_Msk           /*!< PF[11] pin */\r\n#define AFIO_EXTICR3_EXTI11_PG_Pos (13U)\r\n#define AFIO_EXTICR3_EXTI11_PG_Msk (0x3U << AFIO_EXTICR3_EXTI11_PG_Pos) /*!< 0x00006000 */\r\n#define AFIO_EXTICR3_EXTI11_PG     AFIO_EXTICR3_EXTI11_PG_Msk           /*!< PG[11] pin */\r\n\r\n/*****************  Bit definition for AFIO_EXTICR4 register  *****************/\r\n#define AFIO_EXTICR4_EXTI12_Pos (0U)\r\n#define AFIO_EXTICR4_EXTI12_Msk (0xFU << AFIO_EXTICR4_EXTI12_Pos) /*!< 0x0000000F */\r\n#define AFIO_EXTICR4_EXTI12     AFIO_EXTICR4_EXTI12_Msk           /*!< EXTI 12 configuration */\r\n#define AFIO_EXTICR4_EXTI13_Pos (4U)\r\n#define AFIO_EXTICR4_EXTI13_Msk (0xFU << AFIO_EXTICR4_EXTI13_Pos) /*!< 0x000000F0 */\r\n#define AFIO_EXTICR4_EXTI13     AFIO_EXTICR4_EXTI13_Msk           /*!< EXTI 13 configuration */\r\n#define AFIO_EXTICR4_EXTI14_Pos (8U)\r\n#define AFIO_EXTICR4_EXTI14_Msk (0xFU << AFIO_EXTICR4_EXTI14_Pos) /*!< 0x00000F00 */\r\n#define AFIO_EXTICR4_EXTI14     AFIO_EXTICR4_EXTI14_Msk           /*!< EXTI 14 configuration */\r\n#define AFIO_EXTICR4_EXTI15_Pos (12U)\r\n#define AFIO_EXTICR4_EXTI15_Msk (0xFU << AFIO_EXTICR4_EXTI15_Pos) /*!< 0x0000F000 */\r\n#define AFIO_EXTICR4_EXTI15     AFIO_EXTICR4_EXTI15_Msk           /*!< EXTI 15 configuration */\r\n\r\n/* EXTI12 configuration */\r\n#define AFIO_EXTICR4_EXTI12_PA     0x00000000U /*!< PA[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PB_Pos (0U)\r\n#define AFIO_EXTICR4_EXTI12_PB_Msk (0x1U << AFIO_EXTICR4_EXTI12_PB_Pos) /*!< 0x00000001 */\r\n#define AFIO_EXTICR4_EXTI12_PB     AFIO_EXTICR4_EXTI12_PB_Msk           /*!< PB[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PC_Pos (1U)\r\n#define AFIO_EXTICR4_EXTI12_PC_Msk (0x1U << AFIO_EXTICR4_EXTI12_PC_Pos) /*!< 0x00000002 */\r\n#define AFIO_EXTICR4_EXTI12_PC     AFIO_EXTICR4_EXTI12_PC_Msk           /*!< PC[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PD_Pos (0U)\r\n#define AFIO_EXTICR4_EXTI12_PD_Msk (0x3U << AFIO_EXTICR4_EXTI12_PD_Pos) /*!< 0x00000003 */\r\n#define AFIO_EXTICR4_EXTI12_PD     AFIO_EXTICR4_EXTI12_PD_Msk           /*!< PD[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PE_Pos (2U)\r\n#define AFIO_EXTICR4_EXTI12_PE_Msk (0x1U << AFIO_EXTICR4_EXTI12_PE_Pos) /*!< 0x00000004 */\r\n#define AFIO_EXTICR4_EXTI12_PE     AFIO_EXTICR4_EXTI12_PE_Msk           /*!< PE[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PF_Pos (0U)\r\n#define AFIO_EXTICR4_EXTI12_PF_Msk (0x5U << AFIO_EXTICR4_EXTI12_PF_Pos) /*!< 0x00000005 */\r\n#define AFIO_EXTICR4_EXTI12_PF     AFIO_EXTICR4_EXTI12_PF_Msk           /*!< PF[12] pin */\r\n#define AFIO_EXTICR4_EXTI12_PG_Pos (1U)\r\n#define AFIO_EXTICR4_EXTI12_PG_Msk (0x3U << AFIO_EXTICR4_EXTI12_PG_Pos) /*!< 0x00000006 */\r\n#define AFIO_EXTICR4_EXTI12_PG     AFIO_EXTICR4_EXTI12_PG_Msk           /*!< PG[12] pin */\r\n\r\n/* EXTI13 configuration */\r\n#define AFIO_EXTICR4_EXTI13_PA     0x00000000U /*!< PA[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PB_Pos (4U)\r\n#define AFIO_EXTICR4_EXTI13_PB_Msk (0x1U << AFIO_EXTICR4_EXTI13_PB_Pos) /*!< 0x00000010 */\r\n#define AFIO_EXTICR4_EXTI13_PB     AFIO_EXTICR4_EXTI13_PB_Msk           /*!< PB[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PC_Pos (5U)\r\n#define AFIO_EXTICR4_EXTI13_PC_Msk (0x1U << AFIO_EXTICR4_EXTI13_PC_Pos) /*!< 0x00000020 */\r\n#define AFIO_EXTICR4_EXTI13_PC     AFIO_EXTICR4_EXTI13_PC_Msk           /*!< PC[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PD_Pos (4U)\r\n#define AFIO_EXTICR4_EXTI13_PD_Msk (0x3U << AFIO_EXTICR4_EXTI13_PD_Pos) /*!< 0x00000030 */\r\n#define AFIO_EXTICR4_EXTI13_PD     AFIO_EXTICR4_EXTI13_PD_Msk           /*!< PD[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PE_Pos (6U)\r\n#define AFIO_EXTICR4_EXTI13_PE_Msk (0x1U << AFIO_EXTICR4_EXTI13_PE_Pos) /*!< 0x00000040 */\r\n#define AFIO_EXTICR4_EXTI13_PE     AFIO_EXTICR4_EXTI13_PE_Msk           /*!< PE[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PF_Pos (4U)\r\n#define AFIO_EXTICR4_EXTI13_PF_Msk (0x5U << AFIO_EXTICR4_EXTI13_PF_Pos) /*!< 0x00000050 */\r\n#define AFIO_EXTICR4_EXTI13_PF     AFIO_EXTICR4_EXTI13_PF_Msk           /*!< PF[13] pin */\r\n#define AFIO_EXTICR4_EXTI13_PG_Pos (5U)\r\n#define AFIO_EXTICR4_EXTI13_PG_Msk (0x3U << AFIO_EXTICR4_EXTI13_PG_Pos) /*!< 0x00000060 */\r\n#define AFIO_EXTICR4_EXTI13_PG     AFIO_EXTICR4_EXTI13_PG_Msk           /*!< PG[13] pin */\r\n\r\n/*!< EXTI14 configuration */\r\n#define AFIO_EXTICR4_EXTI14_PA     0x00000000U /*!< PA[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PB_Pos (8U)\r\n#define AFIO_EXTICR4_EXTI14_PB_Msk (0x1U << AFIO_EXTICR4_EXTI14_PB_Pos) /*!< 0x00000100 */\r\n#define AFIO_EXTICR4_EXTI14_PB     AFIO_EXTICR4_EXTI14_PB_Msk           /*!< PB[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PC_Pos (9U)\r\n#define AFIO_EXTICR4_EXTI14_PC_Msk (0x1U << AFIO_EXTICR4_EXTI14_PC_Pos) /*!< 0x00000200 */\r\n#define AFIO_EXTICR4_EXTI14_PC     AFIO_EXTICR4_EXTI14_PC_Msk           /*!< PC[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PD_Pos (8U)\r\n#define AFIO_EXTICR4_EXTI14_PD_Msk (0x3U << AFIO_EXTICR4_EXTI14_PD_Pos) /*!< 0x00000300 */\r\n#define AFIO_EXTICR4_EXTI14_PD     AFIO_EXTICR4_EXTI14_PD_Msk           /*!< PD[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PE_Pos (10U)\r\n#define AFIO_EXTICR4_EXTI14_PE_Msk (0x1U << AFIO_EXTICR4_EXTI14_PE_Pos) /*!< 0x00000400 */\r\n#define AFIO_EXTICR4_EXTI14_PE     AFIO_EXTICR4_EXTI14_PE_Msk           /*!< PE[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PF_Pos (8U)\r\n#define AFIO_EXTICR4_EXTI14_PF_Msk (0x5U << AFIO_EXTICR4_EXTI14_PF_Pos) /*!< 0x00000500 */\r\n#define AFIO_EXTICR4_EXTI14_PF     AFIO_EXTICR4_EXTI14_PF_Msk           /*!< PF[14] pin */\r\n#define AFIO_EXTICR4_EXTI14_PG_Pos (9U)\r\n#define AFIO_EXTICR4_EXTI14_PG_Msk (0x3U << AFIO_EXTICR4_EXTI14_PG_Pos) /*!< 0x00000600 */\r\n#define AFIO_EXTICR4_EXTI14_PG     AFIO_EXTICR4_EXTI14_PG_Msk           /*!< PG[14] pin */\r\n\r\n/*!< EXTI15 configuration */\r\n#define AFIO_EXTICR4_EXTI15_PA     0x00000000U /*!< PA[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PB_Pos (12U)\r\n#define AFIO_EXTICR4_EXTI15_PB_Msk (0x1U << AFIO_EXTICR4_EXTI15_PB_Pos) /*!< 0x00001000 */\r\n#define AFIO_EXTICR4_EXTI15_PB     AFIO_EXTICR4_EXTI15_PB_Msk           /*!< PB[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PC_Pos (13U)\r\n#define AFIO_EXTICR4_EXTI15_PC_Msk (0x1U << AFIO_EXTICR4_EXTI15_PC_Pos) /*!< 0x00002000 */\r\n#define AFIO_EXTICR4_EXTI15_PC     AFIO_EXTICR4_EXTI15_PC_Msk           /*!< PC[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PD_Pos (12U)\r\n#define AFIO_EXTICR4_EXTI15_PD_Msk (0x3U << AFIO_EXTICR4_EXTI15_PD_Pos) /*!< 0x00003000 */\r\n#define AFIO_EXTICR4_EXTI15_PD     AFIO_EXTICR4_EXTI15_PD_Msk           /*!< PD[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PE_Pos (14U)\r\n#define AFIO_EXTICR4_EXTI15_PE_Msk (0x1U << AFIO_EXTICR4_EXTI15_PE_Pos) /*!< 0x00004000 */\r\n#define AFIO_EXTICR4_EXTI15_PE     AFIO_EXTICR4_EXTI15_PE_Msk           /*!< PE[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PF_Pos (12U)\r\n#define AFIO_EXTICR4_EXTI15_PF_Msk (0x5U << AFIO_EXTICR4_EXTI15_PF_Pos) /*!< 0x00005000 */\r\n#define AFIO_EXTICR4_EXTI15_PF     AFIO_EXTICR4_EXTI15_PF_Msk           /*!< PF[15] pin */\r\n#define AFIO_EXTICR4_EXTI15_PG_Pos (13U)\r\n#define AFIO_EXTICR4_EXTI15_PG_Msk (0x3U << AFIO_EXTICR4_EXTI15_PG_Pos) /*!< 0x00006000 */\r\n#define AFIO_EXTICR4_EXTI15_PG     AFIO_EXTICR4_EXTI15_PG_Msk           /*!< PG[15] pin */\r\n\r\n/******************  Bit definition for AFIO_MAPR2 register  ******************/\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                    External Interrupt/Event Controller                     */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for EXTI_IMR register  *******************/\r\n#define EXTI_IMR_MR0_Pos  (0U)\r\n#define EXTI_IMR_MR0_Msk  (0x1U << EXTI_IMR_MR0_Pos) /*!< 0x00000001 */\r\n#define EXTI_IMR_MR0      EXTI_IMR_MR0_Msk           /*!< Interrupt Mask on line 0 */\r\n#define EXTI_IMR_MR1_Pos  (1U)\r\n#define EXTI_IMR_MR1_Msk  (0x1U << EXTI_IMR_MR1_Pos) /*!< 0x00000002 */\r\n#define EXTI_IMR_MR1      EXTI_IMR_MR1_Msk           /*!< Interrupt Mask on line 1 */\r\n#define EXTI_IMR_MR2_Pos  (2U)\r\n#define EXTI_IMR_MR2_Msk  (0x1U << EXTI_IMR_MR2_Pos) /*!< 0x00000004 */\r\n#define EXTI_IMR_MR2      EXTI_IMR_MR2_Msk           /*!< Interrupt Mask on line 2 */\r\n#define EXTI_IMR_MR3_Pos  (3U)\r\n#define EXTI_IMR_MR3_Msk  (0x1U << EXTI_IMR_MR3_Pos) /*!< 0x00000008 */\r\n#define EXTI_IMR_MR3      EXTI_IMR_MR3_Msk           /*!< Interrupt Mask on line 3 */\r\n#define EXTI_IMR_MR4_Pos  (4U)\r\n#define EXTI_IMR_MR4_Msk  (0x1U << EXTI_IMR_MR4_Pos) /*!< 0x00000010 */\r\n#define EXTI_IMR_MR4      EXTI_IMR_MR4_Msk           /*!< Interrupt Mask on line 4 */\r\n#define EXTI_IMR_MR5_Pos  (5U)\r\n#define EXTI_IMR_MR5_Msk  (0x1U << EXTI_IMR_MR5_Pos) /*!< 0x00000020 */\r\n#define EXTI_IMR_MR5      EXTI_IMR_MR5_Msk           /*!< Interrupt Mask on line 5 */\r\n#define EXTI_IMR_MR6_Pos  (6U)\r\n#define EXTI_IMR_MR6_Msk  (0x1U << EXTI_IMR_MR6_Pos) /*!< 0x00000040 */\r\n#define EXTI_IMR_MR6      EXTI_IMR_MR6_Msk           /*!< Interrupt Mask on line 6 */\r\n#define EXTI_IMR_MR7_Pos  (7U)\r\n#define EXTI_IMR_MR7_Msk  (0x1U << EXTI_IMR_MR7_Pos) /*!< 0x00000080 */\r\n#define EXTI_IMR_MR7      EXTI_IMR_MR7_Msk           /*!< Interrupt Mask on line 7 */\r\n#define EXTI_IMR_MR8_Pos  (8U)\r\n#define EXTI_IMR_MR8_Msk  (0x1U << EXTI_IMR_MR8_Pos) /*!< 0x00000100 */\r\n#define EXTI_IMR_MR8      EXTI_IMR_MR8_Msk           /*!< Interrupt Mask on line 8 */\r\n#define EXTI_IMR_MR9_Pos  (9U)\r\n#define EXTI_IMR_MR9_Msk  (0x1U << EXTI_IMR_MR9_Pos) /*!< 0x00000200 */\r\n#define EXTI_IMR_MR9      EXTI_IMR_MR9_Msk           /*!< Interrupt Mask on line 9 */\r\n#define EXTI_IMR_MR10_Pos (10U)\r\n#define EXTI_IMR_MR10_Msk (0x1U << EXTI_IMR_MR10_Pos) /*!< 0x00000400 */\r\n#define EXTI_IMR_MR10     EXTI_IMR_MR10_Msk           /*!< Interrupt Mask on line 10 */\r\n#define EXTI_IMR_MR11_Pos (11U)\r\n#define EXTI_IMR_MR11_Msk (0x1U << EXTI_IMR_MR11_Pos) /*!< 0x00000800 */\r\n#define EXTI_IMR_MR11     EXTI_IMR_MR11_Msk           /*!< Interrupt Mask on line 11 */\r\n#define EXTI_IMR_MR12_Pos (12U)\r\n#define EXTI_IMR_MR12_Msk (0x1U << EXTI_IMR_MR12_Pos) /*!< 0x00001000 */\r\n#define EXTI_IMR_MR12     EXTI_IMR_MR12_Msk           /*!< Interrupt Mask on line 12 */\r\n#define EXTI_IMR_MR13_Pos (13U)\r\n#define EXTI_IMR_MR13_Msk (0x1U << EXTI_IMR_MR13_Pos) /*!< 0x00002000 */\r\n#define EXTI_IMR_MR13     EXTI_IMR_MR13_Msk           /*!< Interrupt Mask on line 13 */\r\n#define EXTI_IMR_MR14_Pos (14U)\r\n#define EXTI_IMR_MR14_Msk (0x1U << EXTI_IMR_MR14_Pos) /*!< 0x00004000 */\r\n#define EXTI_IMR_MR14     EXTI_IMR_MR14_Msk           /*!< Interrupt Mask on line 14 */\r\n#define EXTI_IMR_MR15_Pos (15U)\r\n#define EXTI_IMR_MR15_Msk (0x1U << EXTI_IMR_MR15_Pos) /*!< 0x00008000 */\r\n#define EXTI_IMR_MR15     EXTI_IMR_MR15_Msk           /*!< Interrupt Mask on line 15 */\r\n#define EXTI_IMR_MR16_Pos (16U)\r\n#define EXTI_IMR_MR16_Msk (0x1U << EXTI_IMR_MR16_Pos) /*!< 0x00010000 */\r\n#define EXTI_IMR_MR16     EXTI_IMR_MR16_Msk           /*!< Interrupt Mask on line 16 */\r\n#define EXTI_IMR_MR17_Pos (17U)\r\n#define EXTI_IMR_MR17_Msk (0x1U << EXTI_IMR_MR17_Pos) /*!< 0x00020000 */\r\n#define EXTI_IMR_MR17     EXTI_IMR_MR17_Msk           /*!< Interrupt Mask on line 17 */\r\n#define EXTI_IMR_MR18_Pos (18U)\r\n#define EXTI_IMR_MR18_Msk (0x1U << EXTI_IMR_MR18_Pos) /*!< 0x00040000 */\r\n#define EXTI_IMR_MR18     EXTI_IMR_MR18_Msk           /*!< Interrupt Mask on line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_IMR_IM0  EXTI_IMR_MR0\r\n#define EXTI_IMR_IM1  EXTI_IMR_MR1\r\n#define EXTI_IMR_IM2  EXTI_IMR_MR2\r\n#define EXTI_IMR_IM3  EXTI_IMR_MR3\r\n#define EXTI_IMR_IM4  EXTI_IMR_MR4\r\n#define EXTI_IMR_IM5  EXTI_IMR_MR5\r\n#define EXTI_IMR_IM6  EXTI_IMR_MR6\r\n#define EXTI_IMR_IM7  EXTI_IMR_MR7\r\n#define EXTI_IMR_IM8  EXTI_IMR_MR8\r\n#define EXTI_IMR_IM9  EXTI_IMR_MR9\r\n#define EXTI_IMR_IM10 EXTI_IMR_MR10\r\n#define EXTI_IMR_IM11 EXTI_IMR_MR11\r\n#define EXTI_IMR_IM12 EXTI_IMR_MR12\r\n#define EXTI_IMR_IM13 EXTI_IMR_MR13\r\n#define EXTI_IMR_IM14 EXTI_IMR_MR14\r\n#define EXTI_IMR_IM15 EXTI_IMR_MR15\r\n#define EXTI_IMR_IM16 EXTI_IMR_MR16\r\n#define EXTI_IMR_IM17 EXTI_IMR_MR17\r\n#define EXTI_IMR_IM18 EXTI_IMR_MR18\r\n#define EXTI_IMR_IM   0x0007FFFFU /*!< Interrupt Mask All */\r\n\r\n/*******************  Bit definition for EXTI_EMR register  *******************/\r\n#define EXTI_EMR_MR0_Pos  (0U)\r\n#define EXTI_EMR_MR0_Msk  (0x1U << EXTI_EMR_MR0_Pos) /*!< 0x00000001 */\r\n#define EXTI_EMR_MR0      EXTI_EMR_MR0_Msk           /*!< Event Mask on line 0 */\r\n#define EXTI_EMR_MR1_Pos  (1U)\r\n#define EXTI_EMR_MR1_Msk  (0x1U << EXTI_EMR_MR1_Pos) /*!< 0x00000002 */\r\n#define EXTI_EMR_MR1      EXTI_EMR_MR1_Msk           /*!< Event Mask on line 1 */\r\n#define EXTI_EMR_MR2_Pos  (2U)\r\n#define EXTI_EMR_MR2_Msk  (0x1U << EXTI_EMR_MR2_Pos) /*!< 0x00000004 */\r\n#define EXTI_EMR_MR2      EXTI_EMR_MR2_Msk           /*!< Event Mask on line 2 */\r\n#define EXTI_EMR_MR3_Pos  (3U)\r\n#define EXTI_EMR_MR3_Msk  (0x1U << EXTI_EMR_MR3_Pos) /*!< 0x00000008 */\r\n#define EXTI_EMR_MR3      EXTI_EMR_MR3_Msk           /*!< Event Mask on line 3 */\r\n#define EXTI_EMR_MR4_Pos  (4U)\r\n#define EXTI_EMR_MR4_Msk  (0x1U << EXTI_EMR_MR4_Pos) /*!< 0x00000010 */\r\n#define EXTI_EMR_MR4      EXTI_EMR_MR4_Msk           /*!< Event Mask on line 4 */\r\n#define EXTI_EMR_MR5_Pos  (5U)\r\n#define EXTI_EMR_MR5_Msk  (0x1U << EXTI_EMR_MR5_Pos) /*!< 0x00000020 */\r\n#define EXTI_EMR_MR5      EXTI_EMR_MR5_Msk           /*!< Event Mask on line 5 */\r\n#define EXTI_EMR_MR6_Pos  (6U)\r\n#define EXTI_EMR_MR6_Msk  (0x1U << EXTI_EMR_MR6_Pos) /*!< 0x00000040 */\r\n#define EXTI_EMR_MR6      EXTI_EMR_MR6_Msk           /*!< Event Mask on line 6 */\r\n#define EXTI_EMR_MR7_Pos  (7U)\r\n#define EXTI_EMR_MR7_Msk  (0x1U << EXTI_EMR_MR7_Pos) /*!< 0x00000080 */\r\n#define EXTI_EMR_MR7      EXTI_EMR_MR7_Msk           /*!< Event Mask on line 7 */\r\n#define EXTI_EMR_MR8_Pos  (8U)\r\n#define EXTI_EMR_MR8_Msk  (0x1U << EXTI_EMR_MR8_Pos) /*!< 0x00000100 */\r\n#define EXTI_EMR_MR8      EXTI_EMR_MR8_Msk           /*!< Event Mask on line 8 */\r\n#define EXTI_EMR_MR9_Pos  (9U)\r\n#define EXTI_EMR_MR9_Msk  (0x1U << EXTI_EMR_MR9_Pos) /*!< 0x00000200 */\r\n#define EXTI_EMR_MR9      EXTI_EMR_MR9_Msk           /*!< Event Mask on line 9 */\r\n#define EXTI_EMR_MR10_Pos (10U)\r\n#define EXTI_EMR_MR10_Msk (0x1U << EXTI_EMR_MR10_Pos) /*!< 0x00000400 */\r\n#define EXTI_EMR_MR10     EXTI_EMR_MR10_Msk           /*!< Event Mask on line 10 */\r\n#define EXTI_EMR_MR11_Pos (11U)\r\n#define EXTI_EMR_MR11_Msk (0x1U << EXTI_EMR_MR11_Pos) /*!< 0x00000800 */\r\n#define EXTI_EMR_MR11     EXTI_EMR_MR11_Msk           /*!< Event Mask on line 11 */\r\n#define EXTI_EMR_MR12_Pos (12U)\r\n#define EXTI_EMR_MR12_Msk (0x1U << EXTI_EMR_MR12_Pos) /*!< 0x00001000 */\r\n#define EXTI_EMR_MR12     EXTI_EMR_MR12_Msk           /*!< Event Mask on line 12 */\r\n#define EXTI_EMR_MR13_Pos (13U)\r\n#define EXTI_EMR_MR13_Msk (0x1U << EXTI_EMR_MR13_Pos) /*!< 0x00002000 */\r\n#define EXTI_EMR_MR13     EXTI_EMR_MR13_Msk           /*!< Event Mask on line 13 */\r\n#define EXTI_EMR_MR14_Pos (14U)\r\n#define EXTI_EMR_MR14_Msk (0x1U << EXTI_EMR_MR14_Pos) /*!< 0x00004000 */\r\n#define EXTI_EMR_MR14     EXTI_EMR_MR14_Msk           /*!< Event Mask on line 14 */\r\n#define EXTI_EMR_MR15_Pos (15U)\r\n#define EXTI_EMR_MR15_Msk (0x1U << EXTI_EMR_MR15_Pos) /*!< 0x00008000 */\r\n#define EXTI_EMR_MR15     EXTI_EMR_MR15_Msk           /*!< Event Mask on line 15 */\r\n#define EXTI_EMR_MR16_Pos (16U)\r\n#define EXTI_EMR_MR16_Msk (0x1U << EXTI_EMR_MR16_Pos) /*!< 0x00010000 */\r\n#define EXTI_EMR_MR16     EXTI_EMR_MR16_Msk           /*!< Event Mask on line 16 */\r\n#define EXTI_EMR_MR17_Pos (17U)\r\n#define EXTI_EMR_MR17_Msk (0x1U << EXTI_EMR_MR17_Pos) /*!< 0x00020000 */\r\n#define EXTI_EMR_MR17     EXTI_EMR_MR17_Msk           /*!< Event Mask on line 17 */\r\n#define EXTI_EMR_MR18_Pos (18U)\r\n#define EXTI_EMR_MR18_Msk (0x1U << EXTI_EMR_MR18_Pos) /*!< 0x00040000 */\r\n#define EXTI_EMR_MR18     EXTI_EMR_MR18_Msk           /*!< Event Mask on line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_EMR_EM0  EXTI_EMR_MR0\r\n#define EXTI_EMR_EM1  EXTI_EMR_MR1\r\n#define EXTI_EMR_EM2  EXTI_EMR_MR2\r\n#define EXTI_EMR_EM3  EXTI_EMR_MR3\r\n#define EXTI_EMR_EM4  EXTI_EMR_MR4\r\n#define EXTI_EMR_EM5  EXTI_EMR_MR5\r\n#define EXTI_EMR_EM6  EXTI_EMR_MR6\r\n#define EXTI_EMR_EM7  EXTI_EMR_MR7\r\n#define EXTI_EMR_EM8  EXTI_EMR_MR8\r\n#define EXTI_EMR_EM9  EXTI_EMR_MR9\r\n#define EXTI_EMR_EM10 EXTI_EMR_MR10\r\n#define EXTI_EMR_EM11 EXTI_EMR_MR11\r\n#define EXTI_EMR_EM12 EXTI_EMR_MR12\r\n#define EXTI_EMR_EM13 EXTI_EMR_MR13\r\n#define EXTI_EMR_EM14 EXTI_EMR_MR14\r\n#define EXTI_EMR_EM15 EXTI_EMR_MR15\r\n#define EXTI_EMR_EM16 EXTI_EMR_MR16\r\n#define EXTI_EMR_EM17 EXTI_EMR_MR17\r\n#define EXTI_EMR_EM18 EXTI_EMR_MR18\r\n\r\n/******************  Bit definition for EXTI_RTSR register  *******************/\r\n#define EXTI_RTSR_TR0_Pos  (0U)\r\n#define EXTI_RTSR_TR0_Msk  (0x1U << EXTI_RTSR_TR0_Pos) /*!< 0x00000001 */\r\n#define EXTI_RTSR_TR0      EXTI_RTSR_TR0_Msk           /*!< Rising trigger event configuration bit of line 0 */\r\n#define EXTI_RTSR_TR1_Pos  (1U)\r\n#define EXTI_RTSR_TR1_Msk  (0x1U << EXTI_RTSR_TR1_Pos) /*!< 0x00000002 */\r\n#define EXTI_RTSR_TR1      EXTI_RTSR_TR1_Msk           /*!< Rising trigger event configuration bit of line 1 */\r\n#define EXTI_RTSR_TR2_Pos  (2U)\r\n#define EXTI_RTSR_TR2_Msk  (0x1U << EXTI_RTSR_TR2_Pos) /*!< 0x00000004 */\r\n#define EXTI_RTSR_TR2      EXTI_RTSR_TR2_Msk           /*!< Rising trigger event configuration bit of line 2 */\r\n#define EXTI_RTSR_TR3_Pos  (3U)\r\n#define EXTI_RTSR_TR3_Msk  (0x1U << EXTI_RTSR_TR3_Pos) /*!< 0x00000008 */\r\n#define EXTI_RTSR_TR3      EXTI_RTSR_TR3_Msk           /*!< Rising trigger event configuration bit of line 3 */\r\n#define EXTI_RTSR_TR4_Pos  (4U)\r\n#define EXTI_RTSR_TR4_Msk  (0x1U << EXTI_RTSR_TR4_Pos) /*!< 0x00000010 */\r\n#define EXTI_RTSR_TR4      EXTI_RTSR_TR4_Msk           /*!< Rising trigger event configuration bit of line 4 */\r\n#define EXTI_RTSR_TR5_Pos  (5U)\r\n#define EXTI_RTSR_TR5_Msk  (0x1U << EXTI_RTSR_TR5_Pos) /*!< 0x00000020 */\r\n#define EXTI_RTSR_TR5      EXTI_RTSR_TR5_Msk           /*!< Rising trigger event configuration bit of line 5 */\r\n#define EXTI_RTSR_TR6_Pos  (6U)\r\n#define EXTI_RTSR_TR6_Msk  (0x1U << EXTI_RTSR_TR6_Pos) /*!< 0x00000040 */\r\n#define EXTI_RTSR_TR6      EXTI_RTSR_TR6_Msk           /*!< Rising trigger event configuration bit of line 6 */\r\n#define EXTI_RTSR_TR7_Pos  (7U)\r\n#define EXTI_RTSR_TR7_Msk  (0x1U << EXTI_RTSR_TR7_Pos) /*!< 0x00000080 */\r\n#define EXTI_RTSR_TR7      EXTI_RTSR_TR7_Msk           /*!< Rising trigger event configuration bit of line 7 */\r\n#define EXTI_RTSR_TR8_Pos  (8U)\r\n#define EXTI_RTSR_TR8_Msk  (0x1U << EXTI_RTSR_TR8_Pos) /*!< 0x00000100 */\r\n#define EXTI_RTSR_TR8      EXTI_RTSR_TR8_Msk           /*!< Rising trigger event configuration bit of line 8 */\r\n#define EXTI_RTSR_TR9_Pos  (9U)\r\n#define EXTI_RTSR_TR9_Msk  (0x1U << EXTI_RTSR_TR9_Pos) /*!< 0x00000200 */\r\n#define EXTI_RTSR_TR9      EXTI_RTSR_TR9_Msk           /*!< Rising trigger event configuration bit of line 9 */\r\n#define EXTI_RTSR_TR10_Pos (10U)\r\n#define EXTI_RTSR_TR10_Msk (0x1U << EXTI_RTSR_TR10_Pos) /*!< 0x00000400 */\r\n#define EXTI_RTSR_TR10     EXTI_RTSR_TR10_Msk           /*!< Rising trigger event configuration bit of line 10 */\r\n#define EXTI_RTSR_TR11_Pos (11U)\r\n#define EXTI_RTSR_TR11_Msk (0x1U << EXTI_RTSR_TR11_Pos) /*!< 0x00000800 */\r\n#define EXTI_RTSR_TR11     EXTI_RTSR_TR11_Msk           /*!< Rising trigger event configuration bit of line 11 */\r\n#define EXTI_RTSR_TR12_Pos (12U)\r\n#define EXTI_RTSR_TR12_Msk (0x1U << EXTI_RTSR_TR12_Pos) /*!< 0x00001000 */\r\n#define EXTI_RTSR_TR12     EXTI_RTSR_TR12_Msk           /*!< Rising trigger event configuration bit of line 12 */\r\n#define EXTI_RTSR_TR13_Pos (13U)\r\n#define EXTI_RTSR_TR13_Msk (0x1U << EXTI_RTSR_TR13_Pos) /*!< 0x00002000 */\r\n#define EXTI_RTSR_TR13     EXTI_RTSR_TR13_Msk           /*!< Rising trigger event configuration bit of line 13 */\r\n#define EXTI_RTSR_TR14_Pos (14U)\r\n#define EXTI_RTSR_TR14_Msk (0x1U << EXTI_RTSR_TR14_Pos) /*!< 0x00004000 */\r\n#define EXTI_RTSR_TR14     EXTI_RTSR_TR14_Msk           /*!< Rising trigger event configuration bit of line 14 */\r\n#define EXTI_RTSR_TR15_Pos (15U)\r\n#define EXTI_RTSR_TR15_Msk (0x1U << EXTI_RTSR_TR15_Pos) /*!< 0x00008000 */\r\n#define EXTI_RTSR_TR15     EXTI_RTSR_TR15_Msk           /*!< Rising trigger event configuration bit of line 15 */\r\n#define EXTI_RTSR_TR16_Pos (16U)\r\n#define EXTI_RTSR_TR16_Msk (0x1U << EXTI_RTSR_TR16_Pos) /*!< 0x00010000 */\r\n#define EXTI_RTSR_TR16     EXTI_RTSR_TR16_Msk           /*!< Rising trigger event configuration bit of line 16 */\r\n#define EXTI_RTSR_TR17_Pos (17U)\r\n#define EXTI_RTSR_TR17_Msk (0x1U << EXTI_RTSR_TR17_Pos) /*!< 0x00020000 */\r\n#define EXTI_RTSR_TR17     EXTI_RTSR_TR17_Msk           /*!< Rising trigger event configuration bit of line 17 */\r\n#define EXTI_RTSR_TR18_Pos (18U)\r\n#define EXTI_RTSR_TR18_Msk (0x1U << EXTI_RTSR_TR18_Pos) /*!< 0x00040000 */\r\n#define EXTI_RTSR_TR18     EXTI_RTSR_TR18_Msk           /*!< Rising trigger event configuration bit of line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_RTSR_RT0  EXTI_RTSR_TR0\r\n#define EXTI_RTSR_RT1  EXTI_RTSR_TR1\r\n#define EXTI_RTSR_RT2  EXTI_RTSR_TR2\r\n#define EXTI_RTSR_RT3  EXTI_RTSR_TR3\r\n#define EXTI_RTSR_RT4  EXTI_RTSR_TR4\r\n#define EXTI_RTSR_RT5  EXTI_RTSR_TR5\r\n#define EXTI_RTSR_RT6  EXTI_RTSR_TR6\r\n#define EXTI_RTSR_RT7  EXTI_RTSR_TR7\r\n#define EXTI_RTSR_RT8  EXTI_RTSR_TR8\r\n#define EXTI_RTSR_RT9  EXTI_RTSR_TR9\r\n#define EXTI_RTSR_RT10 EXTI_RTSR_TR10\r\n#define EXTI_RTSR_RT11 EXTI_RTSR_TR11\r\n#define EXTI_RTSR_RT12 EXTI_RTSR_TR12\r\n#define EXTI_RTSR_RT13 EXTI_RTSR_TR13\r\n#define EXTI_RTSR_RT14 EXTI_RTSR_TR14\r\n#define EXTI_RTSR_RT15 EXTI_RTSR_TR15\r\n#define EXTI_RTSR_RT16 EXTI_RTSR_TR16\r\n#define EXTI_RTSR_RT17 EXTI_RTSR_TR17\r\n#define EXTI_RTSR_RT18 EXTI_RTSR_TR18\r\n\r\n/******************  Bit definition for EXTI_FTSR register  *******************/\r\n#define EXTI_FTSR_TR0_Pos  (0U)\r\n#define EXTI_FTSR_TR0_Msk  (0x1U << EXTI_FTSR_TR0_Pos) /*!< 0x00000001 */\r\n#define EXTI_FTSR_TR0      EXTI_FTSR_TR0_Msk           /*!< Falling trigger event configuration bit of line 0 */\r\n#define EXTI_FTSR_TR1_Pos  (1U)\r\n#define EXTI_FTSR_TR1_Msk  (0x1U << EXTI_FTSR_TR1_Pos) /*!< 0x00000002 */\r\n#define EXTI_FTSR_TR1      EXTI_FTSR_TR1_Msk           /*!< Falling trigger event configuration bit of line 1 */\r\n#define EXTI_FTSR_TR2_Pos  (2U)\r\n#define EXTI_FTSR_TR2_Msk  (0x1U << EXTI_FTSR_TR2_Pos) /*!< 0x00000004 */\r\n#define EXTI_FTSR_TR2      EXTI_FTSR_TR2_Msk           /*!< Falling trigger event configuration bit of line 2 */\r\n#define EXTI_FTSR_TR3_Pos  (3U)\r\n#define EXTI_FTSR_TR3_Msk  (0x1U << EXTI_FTSR_TR3_Pos) /*!< 0x00000008 */\r\n#define EXTI_FTSR_TR3      EXTI_FTSR_TR3_Msk           /*!< Falling trigger event configuration bit of line 3 */\r\n#define EXTI_FTSR_TR4_Pos  (4U)\r\n#define EXTI_FTSR_TR4_Msk  (0x1U << EXTI_FTSR_TR4_Pos) /*!< 0x00000010 */\r\n#define EXTI_FTSR_TR4      EXTI_FTSR_TR4_Msk           /*!< Falling trigger event configuration bit of line 4 */\r\n#define EXTI_FTSR_TR5_Pos  (5U)\r\n#define EXTI_FTSR_TR5_Msk  (0x1U << EXTI_FTSR_TR5_Pos) /*!< 0x00000020 */\r\n#define EXTI_FTSR_TR5      EXTI_FTSR_TR5_Msk           /*!< Falling trigger event configuration bit of line 5 */\r\n#define EXTI_FTSR_TR6_Pos  (6U)\r\n#define EXTI_FTSR_TR6_Msk  (0x1U << EXTI_FTSR_TR6_Pos) /*!< 0x00000040 */\r\n#define EXTI_FTSR_TR6      EXTI_FTSR_TR6_Msk           /*!< Falling trigger event configuration bit of line 6 */\r\n#define EXTI_FTSR_TR7_Pos  (7U)\r\n#define EXTI_FTSR_TR7_Msk  (0x1U << EXTI_FTSR_TR7_Pos) /*!< 0x00000080 */\r\n#define EXTI_FTSR_TR7      EXTI_FTSR_TR7_Msk           /*!< Falling trigger event configuration bit of line 7 */\r\n#define EXTI_FTSR_TR8_Pos  (8U)\r\n#define EXTI_FTSR_TR8_Msk  (0x1U << EXTI_FTSR_TR8_Pos) /*!< 0x00000100 */\r\n#define EXTI_FTSR_TR8      EXTI_FTSR_TR8_Msk           /*!< Falling trigger event configuration bit of line 8 */\r\n#define EXTI_FTSR_TR9_Pos  (9U)\r\n#define EXTI_FTSR_TR9_Msk  (0x1U << EXTI_FTSR_TR9_Pos) /*!< 0x00000200 */\r\n#define EXTI_FTSR_TR9      EXTI_FTSR_TR9_Msk           /*!< Falling trigger event configuration bit of line 9 */\r\n#define EXTI_FTSR_TR10_Pos (10U)\r\n#define EXTI_FTSR_TR10_Msk (0x1U << EXTI_FTSR_TR10_Pos) /*!< 0x00000400 */\r\n#define EXTI_FTSR_TR10     EXTI_FTSR_TR10_Msk           /*!< Falling trigger event configuration bit of line 10 */\r\n#define EXTI_FTSR_TR11_Pos (11U)\r\n#define EXTI_FTSR_TR11_Msk (0x1U << EXTI_FTSR_TR11_Pos) /*!< 0x00000800 */\r\n#define EXTI_FTSR_TR11     EXTI_FTSR_TR11_Msk           /*!< Falling trigger event configuration bit of line 11 */\r\n#define EXTI_FTSR_TR12_Pos (12U)\r\n#define EXTI_FTSR_TR12_Msk (0x1U << EXTI_FTSR_TR12_Pos) /*!< 0x00001000 */\r\n#define EXTI_FTSR_TR12     EXTI_FTSR_TR12_Msk           /*!< Falling trigger event configuration bit of line 12 */\r\n#define EXTI_FTSR_TR13_Pos (13U)\r\n#define EXTI_FTSR_TR13_Msk (0x1U << EXTI_FTSR_TR13_Pos) /*!< 0x00002000 */\r\n#define EXTI_FTSR_TR13     EXTI_FTSR_TR13_Msk           /*!< Falling trigger event configuration bit of line 13 */\r\n#define EXTI_FTSR_TR14_Pos (14U)\r\n#define EXTI_FTSR_TR14_Msk (0x1U << EXTI_FTSR_TR14_Pos) /*!< 0x00004000 */\r\n#define EXTI_FTSR_TR14     EXTI_FTSR_TR14_Msk           /*!< Falling trigger event configuration bit of line 14 */\r\n#define EXTI_FTSR_TR15_Pos (15U)\r\n#define EXTI_FTSR_TR15_Msk (0x1U << EXTI_FTSR_TR15_Pos) /*!< 0x00008000 */\r\n#define EXTI_FTSR_TR15     EXTI_FTSR_TR15_Msk           /*!< Falling trigger event configuration bit of line 15 */\r\n#define EXTI_FTSR_TR16_Pos (16U)\r\n#define EXTI_FTSR_TR16_Msk (0x1U << EXTI_FTSR_TR16_Pos) /*!< 0x00010000 */\r\n#define EXTI_FTSR_TR16     EXTI_FTSR_TR16_Msk           /*!< Falling trigger event configuration bit of line 16 */\r\n#define EXTI_FTSR_TR17_Pos (17U)\r\n#define EXTI_FTSR_TR17_Msk (0x1U << EXTI_FTSR_TR17_Pos) /*!< 0x00020000 */\r\n#define EXTI_FTSR_TR17     EXTI_FTSR_TR17_Msk           /*!< Falling trigger event configuration bit of line 17 */\r\n#define EXTI_FTSR_TR18_Pos (18U)\r\n#define EXTI_FTSR_TR18_Msk (0x1U << EXTI_FTSR_TR18_Pos) /*!< 0x00040000 */\r\n#define EXTI_FTSR_TR18     EXTI_FTSR_TR18_Msk           /*!< Falling trigger event configuration bit of line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_FTSR_FT0  EXTI_FTSR_TR0\r\n#define EXTI_FTSR_FT1  EXTI_FTSR_TR1\r\n#define EXTI_FTSR_FT2  EXTI_FTSR_TR2\r\n#define EXTI_FTSR_FT3  EXTI_FTSR_TR3\r\n#define EXTI_FTSR_FT4  EXTI_FTSR_TR4\r\n#define EXTI_FTSR_FT5  EXTI_FTSR_TR5\r\n#define EXTI_FTSR_FT6  EXTI_FTSR_TR6\r\n#define EXTI_FTSR_FT7  EXTI_FTSR_TR7\r\n#define EXTI_FTSR_FT8  EXTI_FTSR_TR8\r\n#define EXTI_FTSR_FT9  EXTI_FTSR_TR9\r\n#define EXTI_FTSR_FT10 EXTI_FTSR_TR10\r\n#define EXTI_FTSR_FT11 EXTI_FTSR_TR11\r\n#define EXTI_FTSR_FT12 EXTI_FTSR_TR12\r\n#define EXTI_FTSR_FT13 EXTI_FTSR_TR13\r\n#define EXTI_FTSR_FT14 EXTI_FTSR_TR14\r\n#define EXTI_FTSR_FT15 EXTI_FTSR_TR15\r\n#define EXTI_FTSR_FT16 EXTI_FTSR_TR16\r\n#define EXTI_FTSR_FT17 EXTI_FTSR_TR17\r\n#define EXTI_FTSR_FT18 EXTI_FTSR_TR18\r\n\r\n/******************  Bit definition for EXTI_SWIER register  ******************/\r\n#define EXTI_SWIER_SWIER0_Pos  (0U)\r\n#define EXTI_SWIER_SWIER0_Msk  (0x1U << EXTI_SWIER_SWIER0_Pos) /*!< 0x00000001 */\r\n#define EXTI_SWIER_SWIER0      EXTI_SWIER_SWIER0_Msk           /*!< Software Interrupt on line 0 */\r\n#define EXTI_SWIER_SWIER1_Pos  (1U)\r\n#define EXTI_SWIER_SWIER1_Msk  (0x1U << EXTI_SWIER_SWIER1_Pos) /*!< 0x00000002 */\r\n#define EXTI_SWIER_SWIER1      EXTI_SWIER_SWIER1_Msk           /*!< Software Interrupt on line 1 */\r\n#define EXTI_SWIER_SWIER2_Pos  (2U)\r\n#define EXTI_SWIER_SWIER2_Msk  (0x1U << EXTI_SWIER_SWIER2_Pos) /*!< 0x00000004 */\r\n#define EXTI_SWIER_SWIER2      EXTI_SWIER_SWIER2_Msk           /*!< Software Interrupt on line 2 */\r\n#define EXTI_SWIER_SWIER3_Pos  (3U)\r\n#define EXTI_SWIER_SWIER3_Msk  (0x1U << EXTI_SWIER_SWIER3_Pos) /*!< 0x00000008 */\r\n#define EXTI_SWIER_SWIER3      EXTI_SWIER_SWIER3_Msk           /*!< Software Interrupt on line 3 */\r\n#define EXTI_SWIER_SWIER4_Pos  (4U)\r\n#define EXTI_SWIER_SWIER4_Msk  (0x1U << EXTI_SWIER_SWIER4_Pos) /*!< 0x00000010 */\r\n#define EXTI_SWIER_SWIER4      EXTI_SWIER_SWIER4_Msk           /*!< Software Interrupt on line 4 */\r\n#define EXTI_SWIER_SWIER5_Pos  (5U)\r\n#define EXTI_SWIER_SWIER5_Msk  (0x1U << EXTI_SWIER_SWIER5_Pos) /*!< 0x00000020 */\r\n#define EXTI_SWIER_SWIER5      EXTI_SWIER_SWIER5_Msk           /*!< Software Interrupt on line 5 */\r\n#define EXTI_SWIER_SWIER6_Pos  (6U)\r\n#define EXTI_SWIER_SWIER6_Msk  (0x1U << EXTI_SWIER_SWIER6_Pos) /*!< 0x00000040 */\r\n#define EXTI_SWIER_SWIER6      EXTI_SWIER_SWIER6_Msk           /*!< Software Interrupt on line 6 */\r\n#define EXTI_SWIER_SWIER7_Pos  (7U)\r\n#define EXTI_SWIER_SWIER7_Msk  (0x1U << EXTI_SWIER_SWIER7_Pos) /*!< 0x00000080 */\r\n#define EXTI_SWIER_SWIER7      EXTI_SWIER_SWIER7_Msk           /*!< Software Interrupt on line 7 */\r\n#define EXTI_SWIER_SWIER8_Pos  (8U)\r\n#define EXTI_SWIER_SWIER8_Msk  (0x1U << EXTI_SWIER_SWIER8_Pos) /*!< 0x00000100 */\r\n#define EXTI_SWIER_SWIER8      EXTI_SWIER_SWIER8_Msk           /*!< Software Interrupt on line 8 */\r\n#define EXTI_SWIER_SWIER9_Pos  (9U)\r\n#define EXTI_SWIER_SWIER9_Msk  (0x1U << EXTI_SWIER_SWIER9_Pos) /*!< 0x00000200 */\r\n#define EXTI_SWIER_SWIER9      EXTI_SWIER_SWIER9_Msk           /*!< Software Interrupt on line 9 */\r\n#define EXTI_SWIER_SWIER10_Pos (10U)\r\n#define EXTI_SWIER_SWIER10_Msk (0x1U << EXTI_SWIER_SWIER10_Pos) /*!< 0x00000400 */\r\n#define EXTI_SWIER_SWIER10     EXTI_SWIER_SWIER10_Msk           /*!< Software Interrupt on line 10 */\r\n#define EXTI_SWIER_SWIER11_Pos (11U)\r\n#define EXTI_SWIER_SWIER11_Msk (0x1U << EXTI_SWIER_SWIER11_Pos) /*!< 0x00000800 */\r\n#define EXTI_SWIER_SWIER11     EXTI_SWIER_SWIER11_Msk           /*!< Software Interrupt on line 11 */\r\n#define EXTI_SWIER_SWIER12_Pos (12U)\r\n#define EXTI_SWIER_SWIER12_Msk (0x1U << EXTI_SWIER_SWIER12_Pos) /*!< 0x00001000 */\r\n#define EXTI_SWIER_SWIER12     EXTI_SWIER_SWIER12_Msk           /*!< Software Interrupt on line 12 */\r\n#define EXTI_SWIER_SWIER13_Pos (13U)\r\n#define EXTI_SWIER_SWIER13_Msk (0x1U << EXTI_SWIER_SWIER13_Pos) /*!< 0x00002000 */\r\n#define EXTI_SWIER_SWIER13     EXTI_SWIER_SWIER13_Msk           /*!< Software Interrupt on line 13 */\r\n#define EXTI_SWIER_SWIER14_Pos (14U)\r\n#define EXTI_SWIER_SWIER14_Msk (0x1U << EXTI_SWIER_SWIER14_Pos) /*!< 0x00004000 */\r\n#define EXTI_SWIER_SWIER14     EXTI_SWIER_SWIER14_Msk           /*!< Software Interrupt on line 14 */\r\n#define EXTI_SWIER_SWIER15_Pos (15U)\r\n#define EXTI_SWIER_SWIER15_Msk (0x1U << EXTI_SWIER_SWIER15_Pos) /*!< 0x00008000 */\r\n#define EXTI_SWIER_SWIER15     EXTI_SWIER_SWIER15_Msk           /*!< Software Interrupt on line 15 */\r\n#define EXTI_SWIER_SWIER16_Pos (16U)\r\n#define EXTI_SWIER_SWIER16_Msk (0x1U << EXTI_SWIER_SWIER16_Pos) /*!< 0x00010000 */\r\n#define EXTI_SWIER_SWIER16     EXTI_SWIER_SWIER16_Msk           /*!< Software Interrupt on line 16 */\r\n#define EXTI_SWIER_SWIER17_Pos (17U)\r\n#define EXTI_SWIER_SWIER17_Msk (0x1U << EXTI_SWIER_SWIER17_Pos) /*!< 0x00020000 */\r\n#define EXTI_SWIER_SWIER17     EXTI_SWIER_SWIER17_Msk           /*!< Software Interrupt on line 17 */\r\n#define EXTI_SWIER_SWIER18_Pos (18U)\r\n#define EXTI_SWIER_SWIER18_Msk (0x1U << EXTI_SWIER_SWIER18_Pos) /*!< 0x00040000 */\r\n#define EXTI_SWIER_SWIER18     EXTI_SWIER_SWIER18_Msk           /*!< Software Interrupt on line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_SWIER_SWI0  EXTI_SWIER_SWIER0\r\n#define EXTI_SWIER_SWI1  EXTI_SWIER_SWIER1\r\n#define EXTI_SWIER_SWI2  EXTI_SWIER_SWIER2\r\n#define EXTI_SWIER_SWI3  EXTI_SWIER_SWIER3\r\n#define EXTI_SWIER_SWI4  EXTI_SWIER_SWIER4\r\n#define EXTI_SWIER_SWI5  EXTI_SWIER_SWIER5\r\n#define EXTI_SWIER_SWI6  EXTI_SWIER_SWIER6\r\n#define EXTI_SWIER_SWI7  EXTI_SWIER_SWIER7\r\n#define EXTI_SWIER_SWI8  EXTI_SWIER_SWIER8\r\n#define EXTI_SWIER_SWI9  EXTI_SWIER_SWIER9\r\n#define EXTI_SWIER_SWI10 EXTI_SWIER_SWIER10\r\n#define EXTI_SWIER_SWI11 EXTI_SWIER_SWIER11\r\n#define EXTI_SWIER_SWI12 EXTI_SWIER_SWIER12\r\n#define EXTI_SWIER_SWI13 EXTI_SWIER_SWIER13\r\n#define EXTI_SWIER_SWI14 EXTI_SWIER_SWIER14\r\n#define EXTI_SWIER_SWI15 EXTI_SWIER_SWIER15\r\n#define EXTI_SWIER_SWI16 EXTI_SWIER_SWIER16\r\n#define EXTI_SWIER_SWI17 EXTI_SWIER_SWIER17\r\n#define EXTI_SWIER_SWI18 EXTI_SWIER_SWIER18\r\n\r\n/*******************  Bit definition for EXTI_PR register  ********************/\r\n#define EXTI_PR_PR0_Pos  (0U)\r\n#define EXTI_PR_PR0_Msk  (0x1U << EXTI_PR_PR0_Pos) /*!< 0x00000001 */\r\n#define EXTI_PR_PR0      EXTI_PR_PR0_Msk           /*!< Pending bit for line 0 */\r\n#define EXTI_PR_PR1_Pos  (1U)\r\n#define EXTI_PR_PR1_Msk  (0x1U << EXTI_PR_PR1_Pos) /*!< 0x00000002 */\r\n#define EXTI_PR_PR1      EXTI_PR_PR1_Msk           /*!< Pending bit for line 1 */\r\n#define EXTI_PR_PR2_Pos  (2U)\r\n#define EXTI_PR_PR2_Msk  (0x1U << EXTI_PR_PR2_Pos) /*!< 0x00000004 */\r\n#define EXTI_PR_PR2      EXTI_PR_PR2_Msk           /*!< Pending bit for line 2 */\r\n#define EXTI_PR_PR3_Pos  (3U)\r\n#define EXTI_PR_PR3_Msk  (0x1U << EXTI_PR_PR3_Pos) /*!< 0x00000008 */\r\n#define EXTI_PR_PR3      EXTI_PR_PR3_Msk           /*!< Pending bit for line 3 */\r\n#define EXTI_PR_PR4_Pos  (4U)\r\n#define EXTI_PR_PR4_Msk  (0x1U << EXTI_PR_PR4_Pos) /*!< 0x00000010 */\r\n#define EXTI_PR_PR4      EXTI_PR_PR4_Msk           /*!< Pending bit for line 4 */\r\n#define EXTI_PR_PR5_Pos  (5U)\r\n#define EXTI_PR_PR5_Msk  (0x1U << EXTI_PR_PR5_Pos) /*!< 0x00000020 */\r\n#define EXTI_PR_PR5      EXTI_PR_PR5_Msk           /*!< Pending bit for line 5 */\r\n#define EXTI_PR_PR6_Pos  (6U)\r\n#define EXTI_PR_PR6_Msk  (0x1U << EXTI_PR_PR6_Pos) /*!< 0x00000040 */\r\n#define EXTI_PR_PR6      EXTI_PR_PR6_Msk           /*!< Pending bit for line 6 */\r\n#define EXTI_PR_PR7_Pos  (7U)\r\n#define EXTI_PR_PR7_Msk  (0x1U << EXTI_PR_PR7_Pos) /*!< 0x00000080 */\r\n#define EXTI_PR_PR7      EXTI_PR_PR7_Msk           /*!< Pending bit for line 7 */\r\n#define EXTI_PR_PR8_Pos  (8U)\r\n#define EXTI_PR_PR8_Msk  (0x1U << EXTI_PR_PR8_Pos) /*!< 0x00000100 */\r\n#define EXTI_PR_PR8      EXTI_PR_PR8_Msk           /*!< Pending bit for line 8 */\r\n#define EXTI_PR_PR9_Pos  (9U)\r\n#define EXTI_PR_PR9_Msk  (0x1U << EXTI_PR_PR9_Pos) /*!< 0x00000200 */\r\n#define EXTI_PR_PR9      EXTI_PR_PR9_Msk           /*!< Pending bit for line 9 */\r\n#define EXTI_PR_PR10_Pos (10U)\r\n#define EXTI_PR_PR10_Msk (0x1U << EXTI_PR_PR10_Pos) /*!< 0x00000400 */\r\n#define EXTI_PR_PR10     EXTI_PR_PR10_Msk           /*!< Pending bit for line 10 */\r\n#define EXTI_PR_PR11_Pos (11U)\r\n#define EXTI_PR_PR11_Msk (0x1U << EXTI_PR_PR11_Pos) /*!< 0x00000800 */\r\n#define EXTI_PR_PR11     EXTI_PR_PR11_Msk           /*!< Pending bit for line 11 */\r\n#define EXTI_PR_PR12_Pos (12U)\r\n#define EXTI_PR_PR12_Msk (0x1U << EXTI_PR_PR12_Pos) /*!< 0x00001000 */\r\n#define EXTI_PR_PR12     EXTI_PR_PR12_Msk           /*!< Pending bit for line 12 */\r\n#define EXTI_PR_PR13_Pos (13U)\r\n#define EXTI_PR_PR13_Msk (0x1U << EXTI_PR_PR13_Pos) /*!< 0x00002000 */\r\n#define EXTI_PR_PR13     EXTI_PR_PR13_Msk           /*!< Pending bit for line 13 */\r\n#define EXTI_PR_PR14_Pos (14U)\r\n#define EXTI_PR_PR14_Msk (0x1U << EXTI_PR_PR14_Pos) /*!< 0x00004000 */\r\n#define EXTI_PR_PR14     EXTI_PR_PR14_Msk           /*!< Pending bit for line 14 */\r\n#define EXTI_PR_PR15_Pos (15U)\r\n#define EXTI_PR_PR15_Msk (0x1U << EXTI_PR_PR15_Pos) /*!< 0x00008000 */\r\n#define EXTI_PR_PR15     EXTI_PR_PR15_Msk           /*!< Pending bit for line 15 */\r\n#define EXTI_PR_PR16_Pos (16U)\r\n#define EXTI_PR_PR16_Msk (0x1U << EXTI_PR_PR16_Pos) /*!< 0x00010000 */\r\n#define EXTI_PR_PR16     EXTI_PR_PR16_Msk           /*!< Pending bit for line 16 */\r\n#define EXTI_PR_PR17_Pos (17U)\r\n#define EXTI_PR_PR17_Msk (0x1U << EXTI_PR_PR17_Pos) /*!< 0x00020000 */\r\n#define EXTI_PR_PR17     EXTI_PR_PR17_Msk           /*!< Pending bit for line 17 */\r\n#define EXTI_PR_PR18_Pos (18U)\r\n#define EXTI_PR_PR18_Msk (0x1U << EXTI_PR_PR18_Pos) /*!< 0x00040000 */\r\n#define EXTI_PR_PR18     EXTI_PR_PR18_Msk           /*!< Pending bit for line 18 */\r\n\r\n/* References Defines */\r\n#define EXTI_PR_PIF0  EXTI_PR_PR0\r\n#define EXTI_PR_PIF1  EXTI_PR_PR1\r\n#define EXTI_PR_PIF2  EXTI_PR_PR2\r\n#define EXTI_PR_PIF3  EXTI_PR_PR3\r\n#define EXTI_PR_PIF4  EXTI_PR_PR4\r\n#define EXTI_PR_PIF5  EXTI_PR_PR5\r\n#define EXTI_PR_PIF6  EXTI_PR_PR6\r\n#define EXTI_PR_PIF7  EXTI_PR_PR7\r\n#define EXTI_PR_PIF8  EXTI_PR_PR8\r\n#define EXTI_PR_PIF9  EXTI_PR_PR9\r\n#define EXTI_PR_PIF10 EXTI_PR_PR10\r\n#define EXTI_PR_PIF11 EXTI_PR_PR11\r\n#define EXTI_PR_PIF12 EXTI_PR_PR12\r\n#define EXTI_PR_PIF13 EXTI_PR_PR13\r\n#define EXTI_PR_PIF14 EXTI_PR_PR14\r\n#define EXTI_PR_PIF15 EXTI_PR_PR15\r\n#define EXTI_PR_PIF16 EXTI_PR_PR16\r\n#define EXTI_PR_PIF17 EXTI_PR_PR17\r\n#define EXTI_PR_PIF18 EXTI_PR_PR18\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                             DMA Controller                                 */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for DMA_ISR register  ********************/\r\n#define DMA_ISR_GIF1_Pos  (0U)\r\n#define DMA_ISR_GIF1_Msk  (0x1U << DMA_ISR_GIF1_Pos) /*!< 0x00000001 */\r\n#define DMA_ISR_GIF1      DMA_ISR_GIF1_Msk           /*!< Channel 1 Global interrupt flag */\r\n#define DMA_ISR_TCIF1_Pos (1U)\r\n#define DMA_ISR_TCIF1_Msk (0x1U << DMA_ISR_TCIF1_Pos) /*!< 0x00000002 */\r\n#define DMA_ISR_TCIF1     DMA_ISR_TCIF1_Msk           /*!< Channel 1 Transfer Complete flag */\r\n#define DMA_ISR_HTIF1_Pos (2U)\r\n#define DMA_ISR_HTIF1_Msk (0x1U << DMA_ISR_HTIF1_Pos) /*!< 0x00000004 */\r\n#define DMA_ISR_HTIF1     DMA_ISR_HTIF1_Msk           /*!< Channel 1 Half Transfer flag */\r\n#define DMA_ISR_TEIF1_Pos (3U)\r\n#define DMA_ISR_TEIF1_Msk (0x1U << DMA_ISR_TEIF1_Pos) /*!< 0x00000008 */\r\n#define DMA_ISR_TEIF1     DMA_ISR_TEIF1_Msk           /*!< Channel 1 Transfer Error flag */\r\n#define DMA_ISR_GIF2_Pos  (4U)\r\n#define DMA_ISR_GIF2_Msk  (0x1U << DMA_ISR_GIF2_Pos) /*!< 0x00000010 */\r\n#define DMA_ISR_GIF2      DMA_ISR_GIF2_Msk           /*!< Channel 2 Global interrupt flag */\r\n#define DMA_ISR_TCIF2_Pos (5U)\r\n#define DMA_ISR_TCIF2_Msk (0x1U << DMA_ISR_TCIF2_Pos) /*!< 0x00000020 */\r\n#define DMA_ISR_TCIF2     DMA_ISR_TCIF2_Msk           /*!< Channel 2 Transfer Complete flag */\r\n#define DMA_ISR_HTIF2_Pos (6U)\r\n#define DMA_ISR_HTIF2_Msk (0x1U << DMA_ISR_HTIF2_Pos) /*!< 0x00000040 */\r\n#define DMA_ISR_HTIF2     DMA_ISR_HTIF2_Msk           /*!< Channel 2 Half Transfer flag */\r\n#define DMA_ISR_TEIF2_Pos (7U)\r\n#define DMA_ISR_TEIF2_Msk (0x1U << DMA_ISR_TEIF2_Pos) /*!< 0x00000080 */\r\n#define DMA_ISR_TEIF2     DMA_ISR_TEIF2_Msk           /*!< Channel 2 Transfer Error flag */\r\n#define DMA_ISR_GIF3_Pos  (8U)\r\n#define DMA_ISR_GIF3_Msk  (0x1U << DMA_ISR_GIF3_Pos) /*!< 0x00000100 */\r\n#define DMA_ISR_GIF3      DMA_ISR_GIF3_Msk           /*!< Channel 3 Global interrupt flag */\r\n#define DMA_ISR_TCIF3_Pos (9U)\r\n#define DMA_ISR_TCIF3_Msk (0x1U << DMA_ISR_TCIF3_Pos) /*!< 0x00000200 */\r\n#define DMA_ISR_TCIF3     DMA_ISR_TCIF3_Msk           /*!< Channel 3 Transfer Complete flag */\r\n#define DMA_ISR_HTIF3_Pos (10U)\r\n#define DMA_ISR_HTIF3_Msk (0x1U << DMA_ISR_HTIF3_Pos) /*!< 0x00000400 */\r\n#define DMA_ISR_HTIF3     DMA_ISR_HTIF3_Msk           /*!< Channel 3 Half Transfer flag */\r\n#define DMA_ISR_TEIF3_Pos (11U)\r\n#define DMA_ISR_TEIF3_Msk (0x1U << DMA_ISR_TEIF3_Pos) /*!< 0x00000800 */\r\n#define DMA_ISR_TEIF3     DMA_ISR_TEIF3_Msk           /*!< Channel 3 Transfer Error flag */\r\n#define DMA_ISR_GIF4_Pos  (12U)\r\n#define DMA_ISR_GIF4_Msk  (0x1U << DMA_ISR_GIF4_Pos) /*!< 0x00001000 */\r\n#define DMA_ISR_GIF4      DMA_ISR_GIF4_Msk           /*!< Channel 4 Global interrupt flag */\r\n#define DMA_ISR_TCIF4_Pos (13U)\r\n#define DMA_ISR_TCIF4_Msk (0x1U << DMA_ISR_TCIF4_Pos) /*!< 0x00002000 */\r\n#define DMA_ISR_TCIF4     DMA_ISR_TCIF4_Msk           /*!< Channel 4 Transfer Complete flag */\r\n#define DMA_ISR_HTIF4_Pos (14U)\r\n#define DMA_ISR_HTIF4_Msk (0x1U << DMA_ISR_HTIF4_Pos) /*!< 0x00004000 */\r\n#define DMA_ISR_HTIF4     DMA_ISR_HTIF4_Msk           /*!< Channel 4 Half Transfer flag */\r\n#define DMA_ISR_TEIF4_Pos (15U)\r\n#define DMA_ISR_TEIF4_Msk (0x1U << DMA_ISR_TEIF4_Pos) /*!< 0x00008000 */\r\n#define DMA_ISR_TEIF4     DMA_ISR_TEIF4_Msk           /*!< Channel 4 Transfer Error flag */\r\n#define DMA_ISR_GIF5_Pos  (16U)\r\n#define DMA_ISR_GIF5_Msk  (0x1U << DMA_ISR_GIF5_Pos) /*!< 0x00010000 */\r\n#define DMA_ISR_GIF5      DMA_ISR_GIF5_Msk           /*!< Channel 5 Global interrupt flag */\r\n#define DMA_ISR_TCIF5_Pos (17U)\r\n#define DMA_ISR_TCIF5_Msk (0x1U << DMA_ISR_TCIF5_Pos) /*!< 0x00020000 */\r\n#define DMA_ISR_TCIF5     DMA_ISR_TCIF5_Msk           /*!< Channel 5 Transfer Complete flag */\r\n#define DMA_ISR_HTIF5_Pos (18U)\r\n#define DMA_ISR_HTIF5_Msk (0x1U << DMA_ISR_HTIF5_Pos) /*!< 0x00040000 */\r\n#define DMA_ISR_HTIF5     DMA_ISR_HTIF5_Msk           /*!< Channel 5 Half Transfer flag */\r\n#define DMA_ISR_TEIF5_Pos (19U)\r\n#define DMA_ISR_TEIF5_Msk (0x1U << DMA_ISR_TEIF5_Pos) /*!< 0x00080000 */\r\n#define DMA_ISR_TEIF5     DMA_ISR_TEIF5_Msk           /*!< Channel 5 Transfer Error flag */\r\n#define DMA_ISR_GIF6_Pos  (20U)\r\n#define DMA_ISR_GIF6_Msk  (0x1U << DMA_ISR_GIF6_Pos) /*!< 0x00100000 */\r\n#define DMA_ISR_GIF6      DMA_ISR_GIF6_Msk           /*!< Channel 6 Global interrupt flag */\r\n#define DMA_ISR_TCIF6_Pos (21U)\r\n#define DMA_ISR_TCIF6_Msk (0x1U << DMA_ISR_TCIF6_Pos) /*!< 0x00200000 */\r\n#define DMA_ISR_TCIF6     DMA_ISR_TCIF6_Msk           /*!< Channel 6 Transfer Complete flag */\r\n#define DMA_ISR_HTIF6_Pos (22U)\r\n#define DMA_ISR_HTIF6_Msk (0x1U << DMA_ISR_HTIF6_Pos) /*!< 0x00400000 */\r\n#define DMA_ISR_HTIF6     DMA_ISR_HTIF6_Msk           /*!< Channel 6 Half Transfer flag */\r\n#define DMA_ISR_TEIF6_Pos (23U)\r\n#define DMA_ISR_TEIF6_Msk (0x1U << DMA_ISR_TEIF6_Pos) /*!< 0x00800000 */\r\n#define DMA_ISR_TEIF6     DMA_ISR_TEIF6_Msk           /*!< Channel 6 Transfer Error flag */\r\n#define DMA_ISR_GIF7_Pos  (24U)\r\n#define DMA_ISR_GIF7_Msk  (0x1U << DMA_ISR_GIF7_Pos) /*!< 0x01000000 */\r\n#define DMA_ISR_GIF7      DMA_ISR_GIF7_Msk           /*!< Channel 7 Global interrupt flag */\r\n#define DMA_ISR_TCIF7_Pos (25U)\r\n#define DMA_ISR_TCIF7_Msk (0x1U << DMA_ISR_TCIF7_Pos) /*!< 0x02000000 */\r\n#define DMA_ISR_TCIF7     DMA_ISR_TCIF7_Msk           /*!< Channel 7 Transfer Complete flag */\r\n#define DMA_ISR_HTIF7_Pos (26U)\r\n#define DMA_ISR_HTIF7_Msk (0x1U << DMA_ISR_HTIF7_Pos) /*!< 0x04000000 */\r\n#define DMA_ISR_HTIF7     DMA_ISR_HTIF7_Msk           /*!< Channel 7 Half Transfer flag */\r\n#define DMA_ISR_TEIF7_Pos (27U)\r\n#define DMA_ISR_TEIF7_Msk (0x1U << DMA_ISR_TEIF7_Pos) /*!< 0x08000000 */\r\n#define DMA_ISR_TEIF7     DMA_ISR_TEIF7_Msk           /*!< Channel 7 Transfer Error flag */\r\n\r\n/*******************  Bit definition for DMA_IFCR register  *******************/\r\n#define DMA_IFCR_CGIF1_Pos  (0U)\r\n#define DMA_IFCR_CGIF1_Msk  (0x1U << DMA_IFCR_CGIF1_Pos) /*!< 0x00000001 */\r\n#define DMA_IFCR_CGIF1      DMA_IFCR_CGIF1_Msk           /*!< Channel 1 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF1_Pos (1U)\r\n#define DMA_IFCR_CTCIF1_Msk (0x1U << DMA_IFCR_CTCIF1_Pos) /*!< 0x00000002 */\r\n#define DMA_IFCR_CTCIF1     DMA_IFCR_CTCIF1_Msk           /*!< Channel 1 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF1_Pos (2U)\r\n#define DMA_IFCR_CHTIF1_Msk (0x1U << DMA_IFCR_CHTIF1_Pos) /*!< 0x00000004 */\r\n#define DMA_IFCR_CHTIF1     DMA_IFCR_CHTIF1_Msk           /*!< Channel 1 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF1_Pos (3U)\r\n#define DMA_IFCR_CTEIF1_Msk (0x1U << DMA_IFCR_CTEIF1_Pos) /*!< 0x00000008 */\r\n#define DMA_IFCR_CTEIF1     DMA_IFCR_CTEIF1_Msk           /*!< Channel 1 Transfer Error clear */\r\n#define DMA_IFCR_CGIF2_Pos  (4U)\r\n#define DMA_IFCR_CGIF2_Msk  (0x1U << DMA_IFCR_CGIF2_Pos) /*!< 0x00000010 */\r\n#define DMA_IFCR_CGIF2      DMA_IFCR_CGIF2_Msk           /*!< Channel 2 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF2_Pos (5U)\r\n#define DMA_IFCR_CTCIF2_Msk (0x1U << DMA_IFCR_CTCIF2_Pos) /*!< 0x00000020 */\r\n#define DMA_IFCR_CTCIF2     DMA_IFCR_CTCIF2_Msk           /*!< Channel 2 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF2_Pos (6U)\r\n#define DMA_IFCR_CHTIF2_Msk (0x1U << DMA_IFCR_CHTIF2_Pos) /*!< 0x00000040 */\r\n#define DMA_IFCR_CHTIF2     DMA_IFCR_CHTIF2_Msk           /*!< Channel 2 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF2_Pos (7U)\r\n#define DMA_IFCR_CTEIF2_Msk (0x1U << DMA_IFCR_CTEIF2_Pos) /*!< 0x00000080 */\r\n#define DMA_IFCR_CTEIF2     DMA_IFCR_CTEIF2_Msk           /*!< Channel 2 Transfer Error clear */\r\n#define DMA_IFCR_CGIF3_Pos  (8U)\r\n#define DMA_IFCR_CGIF3_Msk  (0x1U << DMA_IFCR_CGIF3_Pos) /*!< 0x00000100 */\r\n#define DMA_IFCR_CGIF3      DMA_IFCR_CGIF3_Msk           /*!< Channel 3 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF3_Pos (9U)\r\n#define DMA_IFCR_CTCIF3_Msk (0x1U << DMA_IFCR_CTCIF3_Pos) /*!< 0x00000200 */\r\n#define DMA_IFCR_CTCIF3     DMA_IFCR_CTCIF3_Msk           /*!< Channel 3 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF3_Pos (10U)\r\n#define DMA_IFCR_CHTIF3_Msk (0x1U << DMA_IFCR_CHTIF3_Pos) /*!< 0x00000400 */\r\n#define DMA_IFCR_CHTIF3     DMA_IFCR_CHTIF3_Msk           /*!< Channel 3 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF3_Pos (11U)\r\n#define DMA_IFCR_CTEIF3_Msk (0x1U << DMA_IFCR_CTEIF3_Pos) /*!< 0x00000800 */\r\n#define DMA_IFCR_CTEIF3     DMA_IFCR_CTEIF3_Msk           /*!< Channel 3 Transfer Error clear */\r\n#define DMA_IFCR_CGIF4_Pos  (12U)\r\n#define DMA_IFCR_CGIF4_Msk  (0x1U << DMA_IFCR_CGIF4_Pos) /*!< 0x00001000 */\r\n#define DMA_IFCR_CGIF4      DMA_IFCR_CGIF4_Msk           /*!< Channel 4 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF4_Pos (13U)\r\n#define DMA_IFCR_CTCIF4_Msk (0x1U << DMA_IFCR_CTCIF4_Pos) /*!< 0x00002000 */\r\n#define DMA_IFCR_CTCIF4     DMA_IFCR_CTCIF4_Msk           /*!< Channel 4 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF4_Pos (14U)\r\n#define DMA_IFCR_CHTIF4_Msk (0x1U << DMA_IFCR_CHTIF4_Pos) /*!< 0x00004000 */\r\n#define DMA_IFCR_CHTIF4     DMA_IFCR_CHTIF4_Msk           /*!< Channel 4 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF4_Pos (15U)\r\n#define DMA_IFCR_CTEIF4_Msk (0x1U << DMA_IFCR_CTEIF4_Pos) /*!< 0x00008000 */\r\n#define DMA_IFCR_CTEIF4     DMA_IFCR_CTEIF4_Msk           /*!< Channel 4 Transfer Error clear */\r\n#define DMA_IFCR_CGIF5_Pos  (16U)\r\n#define DMA_IFCR_CGIF5_Msk  (0x1U << DMA_IFCR_CGIF5_Pos) /*!< 0x00010000 */\r\n#define DMA_IFCR_CGIF5      DMA_IFCR_CGIF5_Msk           /*!< Channel 5 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF5_Pos (17U)\r\n#define DMA_IFCR_CTCIF5_Msk (0x1U << DMA_IFCR_CTCIF5_Pos) /*!< 0x00020000 */\r\n#define DMA_IFCR_CTCIF5     DMA_IFCR_CTCIF5_Msk           /*!< Channel 5 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF5_Pos (18U)\r\n#define DMA_IFCR_CHTIF5_Msk (0x1U << DMA_IFCR_CHTIF5_Pos) /*!< 0x00040000 */\r\n#define DMA_IFCR_CHTIF5     DMA_IFCR_CHTIF5_Msk           /*!< Channel 5 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF5_Pos (19U)\r\n#define DMA_IFCR_CTEIF5_Msk (0x1U << DMA_IFCR_CTEIF5_Pos) /*!< 0x00080000 */\r\n#define DMA_IFCR_CTEIF5     DMA_IFCR_CTEIF5_Msk           /*!< Channel 5 Transfer Error clear */\r\n#define DMA_IFCR_CGIF6_Pos  (20U)\r\n#define DMA_IFCR_CGIF6_Msk  (0x1U << DMA_IFCR_CGIF6_Pos) /*!< 0x00100000 */\r\n#define DMA_IFCR_CGIF6      DMA_IFCR_CGIF6_Msk           /*!< Channel 6 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF6_Pos (21U)\r\n#define DMA_IFCR_CTCIF6_Msk (0x1U << DMA_IFCR_CTCIF6_Pos) /*!< 0x00200000 */\r\n#define DMA_IFCR_CTCIF6     DMA_IFCR_CTCIF6_Msk           /*!< Channel 6 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF6_Pos (22U)\r\n#define DMA_IFCR_CHTIF6_Msk (0x1U << DMA_IFCR_CHTIF6_Pos) /*!< 0x00400000 */\r\n#define DMA_IFCR_CHTIF6     DMA_IFCR_CHTIF6_Msk           /*!< Channel 6 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF6_Pos (23U)\r\n#define DMA_IFCR_CTEIF6_Msk (0x1U << DMA_IFCR_CTEIF6_Pos) /*!< 0x00800000 */\r\n#define DMA_IFCR_CTEIF6     DMA_IFCR_CTEIF6_Msk           /*!< Channel 6 Transfer Error clear */\r\n#define DMA_IFCR_CGIF7_Pos  (24U)\r\n#define DMA_IFCR_CGIF7_Msk  (0x1U << DMA_IFCR_CGIF7_Pos) /*!< 0x01000000 */\r\n#define DMA_IFCR_CGIF7      DMA_IFCR_CGIF7_Msk           /*!< Channel 7 Global interrupt clear */\r\n#define DMA_IFCR_CTCIF7_Pos (25U)\r\n#define DMA_IFCR_CTCIF7_Msk (0x1U << DMA_IFCR_CTCIF7_Pos) /*!< 0x02000000 */\r\n#define DMA_IFCR_CTCIF7     DMA_IFCR_CTCIF7_Msk           /*!< Channel 7 Transfer Complete clear */\r\n#define DMA_IFCR_CHTIF7_Pos (26U)\r\n#define DMA_IFCR_CHTIF7_Msk (0x1U << DMA_IFCR_CHTIF7_Pos) /*!< 0x04000000 */\r\n#define DMA_IFCR_CHTIF7     DMA_IFCR_CHTIF7_Msk           /*!< Channel 7 Half Transfer clear */\r\n#define DMA_IFCR_CTEIF7_Pos (27U)\r\n#define DMA_IFCR_CTEIF7_Msk (0x1U << DMA_IFCR_CTEIF7_Pos) /*!< 0x08000000 */\r\n#define DMA_IFCR_CTEIF7     DMA_IFCR_CTEIF7_Msk           /*!< Channel 7 Transfer Error clear */\r\n\r\n/*******************  Bit definition for DMA_CCR register   *******************/\r\n#define DMA_CCR_EN_Pos   (0U)\r\n#define DMA_CCR_EN_Msk   (0x1U << DMA_CCR_EN_Pos) /*!< 0x00000001 */\r\n#define DMA_CCR_EN       DMA_CCR_EN_Msk           /*!< Channel enable */\r\n#define DMA_CCR_TCIE_Pos (1U)\r\n#define DMA_CCR_TCIE_Msk (0x1U << DMA_CCR_TCIE_Pos) /*!< 0x00000002 */\r\n#define DMA_CCR_TCIE     DMA_CCR_TCIE_Msk           /*!< Transfer complete interrupt enable */\r\n#define DMA_CCR_HTIE_Pos (2U)\r\n#define DMA_CCR_HTIE_Msk (0x1U << DMA_CCR_HTIE_Pos) /*!< 0x00000004 */\r\n#define DMA_CCR_HTIE     DMA_CCR_HTIE_Msk           /*!< Half Transfer interrupt enable */\r\n#define DMA_CCR_TEIE_Pos (3U)\r\n#define DMA_CCR_TEIE_Msk (0x1U << DMA_CCR_TEIE_Pos) /*!< 0x00000008 */\r\n#define DMA_CCR_TEIE     DMA_CCR_TEIE_Msk           /*!< Transfer error interrupt enable */\r\n#define DMA_CCR_DIR_Pos  (4U)\r\n#define DMA_CCR_DIR_Msk  (0x1U << DMA_CCR_DIR_Pos) /*!< 0x00000010 */\r\n#define DMA_CCR_DIR      DMA_CCR_DIR_Msk           /*!< Data transfer direction */\r\n#define DMA_CCR_CIRC_Pos (5U)\r\n#define DMA_CCR_CIRC_Msk (0x1U << DMA_CCR_CIRC_Pos) /*!< 0x00000020 */\r\n#define DMA_CCR_CIRC     DMA_CCR_CIRC_Msk           /*!< Circular mode */\r\n#define DMA_CCR_PINC_Pos (6U)\r\n#define DMA_CCR_PINC_Msk (0x1U << DMA_CCR_PINC_Pos) /*!< 0x00000040 */\r\n#define DMA_CCR_PINC     DMA_CCR_PINC_Msk           /*!< Peripheral increment mode */\r\n#define DMA_CCR_MINC_Pos (7U)\r\n#define DMA_CCR_MINC_Msk (0x1U << DMA_CCR_MINC_Pos) /*!< 0x00000080 */\r\n#define DMA_CCR_MINC     DMA_CCR_MINC_Msk           /*!< Memory increment mode */\r\n\r\n#define DMA_CCR_PSIZE_Pos (8U)\r\n#define DMA_CCR_PSIZE_Msk (0x3U << DMA_CCR_PSIZE_Pos) /*!< 0x00000300 */\r\n#define DMA_CCR_PSIZE     DMA_CCR_PSIZE_Msk           /*!< PSIZE[1:0] bits (Peripheral size) */\r\n#define DMA_CCR_PSIZE_0   (0x1U << DMA_CCR_PSIZE_Pos) /*!< 0x00000100 */\r\n#define DMA_CCR_PSIZE_1   (0x2U << DMA_CCR_PSIZE_Pos) /*!< 0x00000200 */\r\n\r\n#define DMA_CCR_MSIZE_Pos (10U)\r\n#define DMA_CCR_MSIZE_Msk (0x3U << DMA_CCR_MSIZE_Pos) /*!< 0x00000C00 */\r\n#define DMA_CCR_MSIZE     DMA_CCR_MSIZE_Msk           /*!< MSIZE[1:0] bits (Memory size) */\r\n#define DMA_CCR_MSIZE_0   (0x1U << DMA_CCR_MSIZE_Pos) /*!< 0x00000400 */\r\n#define DMA_CCR_MSIZE_1   (0x2U << DMA_CCR_MSIZE_Pos) /*!< 0x00000800 */\r\n\r\n#define DMA_CCR_PL_Pos (12U)\r\n#define DMA_CCR_PL_Msk (0x3U << DMA_CCR_PL_Pos) /*!< 0x00003000 */\r\n#define DMA_CCR_PL     DMA_CCR_PL_Msk           /*!< PL[1:0] bits(Channel Priority level) */\r\n#define DMA_CCR_PL_0   (0x1U << DMA_CCR_PL_Pos) /*!< 0x00001000 */\r\n#define DMA_CCR_PL_1   (0x2U << DMA_CCR_PL_Pos) /*!< 0x00002000 */\r\n\r\n#define DMA_CCR_MEM2MEM_Pos (14U)\r\n#define DMA_CCR_MEM2MEM_Msk (0x1U << DMA_CCR_MEM2MEM_Pos) /*!< 0x00004000 */\r\n#define DMA_CCR_MEM2MEM     DMA_CCR_MEM2MEM_Msk           /*!< Memory to memory mode */\r\n\r\n/******************  Bit definition for DMA_CNDTR  register  ******************/\r\n#define DMA_CNDTR_NDT_Pos (0U)\r\n#define DMA_CNDTR_NDT_Msk (0xFFFFU << DMA_CNDTR_NDT_Pos) /*!< 0x0000FFFF */\r\n#define DMA_CNDTR_NDT     DMA_CNDTR_NDT_Msk              /*!< Number of data to Transfer */\r\n\r\n/******************  Bit definition for DMA_CPAR  register  *******************/\r\n#define DMA_CPAR_PA_Pos (0U)\r\n#define DMA_CPAR_PA_Msk (0xFFFFFFFFU << DMA_CPAR_PA_Pos) /*!< 0xFFFFFFFF */\r\n#define DMA_CPAR_PA     DMA_CPAR_PA_Msk                  /*!< Peripheral Address */\r\n\r\n/******************  Bit definition for DMA_CMAR  register  *******************/\r\n#define DMA_CMAR_MA_Pos (0U)\r\n#define DMA_CMAR_MA_Msk (0xFFFFFFFFU << DMA_CMAR_MA_Pos) /*!< 0xFFFFFFFF */\r\n#define DMA_CMAR_MA     DMA_CMAR_MA_Msk                  /*!< Memory Address */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                      Analog to Digital Converter (ADC)                     */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*\r\n * @brief Specific device feature definitions (not present on all devices in the STM32F1 family)\r\n */\r\n#define ADC_MULTIMODE_SUPPORT /*!< ADC feature available only on specific devices: multimode available on devices with several ADC instances */\r\n\r\n/********************  Bit definition for ADC_SR register  ********************/\r\n#define ADC_SR_AWD_Pos   (0U)\r\n#define ADC_SR_AWD_Msk   (0x1U << ADC_SR_AWD_Pos) /*!< 0x00000001 */\r\n#define ADC_SR_AWD       ADC_SR_AWD_Msk           /*!< ADC analog watchdog 1 flag */\r\n#define ADC_SR_EOS_Pos   (1U)\r\n#define ADC_SR_EOS_Msk   (0x1U << ADC_SR_EOS_Pos) /*!< 0x00000002 */\r\n#define ADC_SR_EOS       ADC_SR_EOS_Msk           /*!< ADC group regular end of sequence conversions flag */\r\n#define ADC_SR_JEOS_Pos  (2U)\r\n#define ADC_SR_JEOS_Msk  (0x1U << ADC_SR_JEOS_Pos) /*!< 0x00000004 */\r\n#define ADC_SR_JEOS      ADC_SR_JEOS_Msk           /*!< ADC group injected end of sequence conversions flag */\r\n#define ADC_SR_JSTRT_Pos (3U)\r\n#define ADC_SR_JSTRT_Msk (0x1U << ADC_SR_JSTRT_Pos) /*!< 0x00000008 */\r\n#define ADC_SR_JSTRT     ADC_SR_JSTRT_Msk           /*!< ADC group injected conversion start flag */\r\n#define ADC_SR_STRT_Pos  (4U)\r\n#define ADC_SR_STRT_Msk  (0x1U << ADC_SR_STRT_Pos) /*!< 0x00000010 */\r\n#define ADC_SR_STRT      ADC_SR_STRT_Msk           /*!< ADC group regular conversion start flag */\r\n\r\n/* Legacy defines */\r\n#define ADC_SR_EOC  (ADC_SR_EOS)\r\n#define ADC_SR_JEOC (ADC_SR_JEOS)\r\n\r\n/*******************  Bit definition for ADC_CR1 register  ********************/\r\n#define ADC_CR1_AWDCH_Pos (0U)\r\n#define ADC_CR1_AWDCH_Msk (0x1FU << ADC_CR1_AWDCH_Pos) /*!< 0x0000001F */\r\n#define ADC_CR1_AWDCH     ADC_CR1_AWDCH_Msk            /*!< ADC analog watchdog 1 monitored channel selection */\r\n#define ADC_CR1_AWDCH_0   (0x01U << ADC_CR1_AWDCH_Pos) /*!< 0x00000001 */\r\n#define ADC_CR1_AWDCH_1   (0x02U << ADC_CR1_AWDCH_Pos) /*!< 0x00000002 */\r\n#define ADC_CR1_AWDCH_2   (0x04U << ADC_CR1_AWDCH_Pos) /*!< 0x00000004 */\r\n#define ADC_CR1_AWDCH_3   (0x08U << ADC_CR1_AWDCH_Pos) /*!< 0x00000008 */\r\n#define ADC_CR1_AWDCH_4   (0x10U << ADC_CR1_AWDCH_Pos) /*!< 0x00000010 */\r\n\r\n#define ADC_CR1_EOSIE_Pos   (5U)\r\n#define ADC_CR1_EOSIE_Msk   (0x1U << ADC_CR1_EOSIE_Pos) /*!< 0x00000020 */\r\n#define ADC_CR1_EOSIE       ADC_CR1_EOSIE_Msk           /*!< ADC group regular end of sequence conversions interrupt */\r\n#define ADC_CR1_AWDIE_Pos   (6U)\r\n#define ADC_CR1_AWDIE_Msk   (0x1U << ADC_CR1_AWDIE_Pos) /*!< 0x00000040 */\r\n#define ADC_CR1_AWDIE       ADC_CR1_AWDIE_Msk           /*!< ADC analog watchdog 1 interrupt */\r\n#define ADC_CR1_JEOSIE_Pos  (7U)\r\n#define ADC_CR1_JEOSIE_Msk  (0x1U << ADC_CR1_JEOSIE_Pos) /*!< 0x00000080 */\r\n#define ADC_CR1_JEOSIE      ADC_CR1_JEOSIE_Msk           /*!< ADC group injected end of sequence conversions interrupt */\r\n#define ADC_CR1_SCAN_Pos    (8U)\r\n#define ADC_CR1_SCAN_Msk    (0x1U << ADC_CR1_SCAN_Pos) /*!< 0x00000100 */\r\n#define ADC_CR1_SCAN        ADC_CR1_SCAN_Msk           /*!< ADC scan mode */\r\n#define ADC_CR1_AWDSGL_Pos  (9U)\r\n#define ADC_CR1_AWDSGL_Msk  (0x1U << ADC_CR1_AWDSGL_Pos) /*!< 0x00000200 */\r\n#define ADC_CR1_AWDSGL      ADC_CR1_AWDSGL_Msk           /*!< ADC analog watchdog 1 monitoring a single channel or all channels */\r\n#define ADC_CR1_JAUTO_Pos   (10U)\r\n#define ADC_CR1_JAUTO_Msk   (0x1U << ADC_CR1_JAUTO_Pos) /*!< 0x00000400 */\r\n#define ADC_CR1_JAUTO       ADC_CR1_JAUTO_Msk           /*!< ADC group injected automatic trigger mode */\r\n#define ADC_CR1_DISCEN_Pos  (11U)\r\n#define ADC_CR1_DISCEN_Msk  (0x1U << ADC_CR1_DISCEN_Pos) /*!< 0x00000800 */\r\n#define ADC_CR1_DISCEN      ADC_CR1_DISCEN_Msk           /*!< ADC group regular sequencer discontinuous mode */\r\n#define ADC_CR1_JDISCEN_Pos (12U)\r\n#define ADC_CR1_JDISCEN_Msk (0x1U << ADC_CR1_JDISCEN_Pos) /*!< 0x00001000 */\r\n#define ADC_CR1_JDISCEN     ADC_CR1_JDISCEN_Msk           /*!< ADC group injected sequencer discontinuous mode */\r\n\r\n#define ADC_CR1_DISCNUM_Pos (13U)\r\n#define ADC_CR1_DISCNUM_Msk (0x7U << ADC_CR1_DISCNUM_Pos) /*!< 0x0000E000 */\r\n#define ADC_CR1_DISCNUM     ADC_CR1_DISCNUM_Msk           /*!< ADC group regular sequencer discontinuous number of ranks */\r\n#define ADC_CR1_DISCNUM_0   (0x1U << ADC_CR1_DISCNUM_Pos) /*!< 0x00002000 */\r\n#define ADC_CR1_DISCNUM_1   (0x2U << ADC_CR1_DISCNUM_Pos) /*!< 0x00004000 */\r\n#define ADC_CR1_DISCNUM_2   (0x4U << ADC_CR1_DISCNUM_Pos) /*!< 0x00008000 */\r\n\r\n#define ADC_CR1_DUALMOD_Pos (16U)\r\n#define ADC_CR1_DUALMOD_Msk (0xFU << ADC_CR1_DUALMOD_Pos) /*!< 0x000F0000 */\r\n#define ADC_CR1_DUALMOD     ADC_CR1_DUALMOD_Msk           /*!< ADC multimode mode selection */\r\n#define ADC_CR1_DUALMOD_0   (0x1U << ADC_CR1_DUALMOD_Pos) /*!< 0x00010000 */\r\n#define ADC_CR1_DUALMOD_1   (0x2U << ADC_CR1_DUALMOD_Pos) /*!< 0x00020000 */\r\n#define ADC_CR1_DUALMOD_2   (0x4U << ADC_CR1_DUALMOD_Pos) /*!< 0x00040000 */\r\n#define ADC_CR1_DUALMOD_3   (0x8U << ADC_CR1_DUALMOD_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_CR1_JAWDEN_Pos (22U)\r\n#define ADC_CR1_JAWDEN_Msk (0x1U << ADC_CR1_JAWDEN_Pos) /*!< 0x00400000 */\r\n#define ADC_CR1_JAWDEN     ADC_CR1_JAWDEN_Msk           /*!< ADC analog watchdog 1 enable on scope ADC group injected */\r\n#define ADC_CR1_AWDEN_Pos  (23U)\r\n#define ADC_CR1_AWDEN_Msk  (0x1U << ADC_CR1_AWDEN_Pos) /*!< 0x00800000 */\r\n#define ADC_CR1_AWDEN      ADC_CR1_AWDEN_Msk           /*!< ADC analog watchdog 1 enable on scope ADC group regular */\r\n\r\n/* Legacy defines */\r\n#define ADC_CR1_EOCIE  (ADC_CR1_EOSIE)\r\n#define ADC_CR1_JEOCIE (ADC_CR1_JEOSIE)\r\n\r\n/*******************  Bit definition for ADC_CR2 register  ********************/\r\n#define ADC_CR2_ADON_Pos   (0U)\r\n#define ADC_CR2_ADON_Msk   (0x1U << ADC_CR2_ADON_Pos) /*!< 0x00000001 */\r\n#define ADC_CR2_ADON       ADC_CR2_ADON_Msk           /*!< ADC enable */\r\n#define ADC_CR2_CONT_Pos   (1U)\r\n#define ADC_CR2_CONT_Msk   (0x1U << ADC_CR2_CONT_Pos) /*!< 0x00000002 */\r\n#define ADC_CR2_CONT       ADC_CR2_CONT_Msk           /*!< ADC group regular continuous conversion mode */\r\n#define ADC_CR2_CAL_Pos    (2U)\r\n#define ADC_CR2_CAL_Msk    (0x1U << ADC_CR2_CAL_Pos) /*!< 0x00000004 */\r\n#define ADC_CR2_CAL        ADC_CR2_CAL_Msk           /*!< ADC calibration start */\r\n#define ADC_CR2_RSTCAL_Pos (3U)\r\n#define ADC_CR2_RSTCAL_Msk (0x1U << ADC_CR2_RSTCAL_Pos) /*!< 0x00000008 */\r\n#define ADC_CR2_RSTCAL     ADC_CR2_RSTCAL_Msk           /*!< ADC calibration reset */\r\n#define ADC_CR2_DMA_Pos    (8U)\r\n#define ADC_CR2_DMA_Msk    (0x1U << ADC_CR2_DMA_Pos) /*!< 0x00000100 */\r\n#define ADC_CR2_DMA        ADC_CR2_DMA_Msk           /*!< ADC DMA transfer enable */\r\n#define ADC_CR2_ALIGN_Pos  (11U)\r\n#define ADC_CR2_ALIGN_Msk  (0x1U << ADC_CR2_ALIGN_Pos) /*!< 0x00000800 */\r\n#define ADC_CR2_ALIGN      ADC_CR2_ALIGN_Msk           /*!< ADC data alignement */\r\n\r\n#define ADC_CR2_JEXTSEL_Pos (12U)\r\n#define ADC_CR2_JEXTSEL_Msk (0x7U << ADC_CR2_JEXTSEL_Pos) /*!< 0x00007000 */\r\n#define ADC_CR2_JEXTSEL     ADC_CR2_JEXTSEL_Msk           /*!< ADC group injected external trigger source */\r\n#define ADC_CR2_JEXTSEL_0   (0x1U << ADC_CR2_JEXTSEL_Pos) /*!< 0x00001000 */\r\n#define ADC_CR2_JEXTSEL_1   (0x2U << ADC_CR2_JEXTSEL_Pos) /*!< 0x00002000 */\r\n#define ADC_CR2_JEXTSEL_2   (0x4U << ADC_CR2_JEXTSEL_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_CR2_JEXTTRIG_Pos (15U)\r\n#define ADC_CR2_JEXTTRIG_Msk (0x1U << ADC_CR2_JEXTTRIG_Pos) /*!< 0x00008000 */\r\n#define ADC_CR2_JEXTTRIG     ADC_CR2_JEXTTRIG_Msk           /*!< ADC group injected external trigger enable */\r\n\r\n#define ADC_CR2_EXTSEL_Pos (17U)\r\n#define ADC_CR2_EXTSEL_Msk (0x7U << ADC_CR2_EXTSEL_Pos) /*!< 0x000E0000 */\r\n#define ADC_CR2_EXTSEL     ADC_CR2_EXTSEL_Msk           /*!< ADC group regular external trigger source */\r\n#define ADC_CR2_EXTSEL_0   (0x1U << ADC_CR2_EXTSEL_Pos) /*!< 0x00020000 */\r\n#define ADC_CR2_EXTSEL_1   (0x2U << ADC_CR2_EXTSEL_Pos) /*!< 0x00040000 */\r\n#define ADC_CR2_EXTSEL_2   (0x4U << ADC_CR2_EXTSEL_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_CR2_EXTTRIG_Pos  (20U)\r\n#define ADC_CR2_EXTTRIG_Msk  (0x1U << ADC_CR2_EXTTRIG_Pos) /*!< 0x00100000 */\r\n#define ADC_CR2_EXTTRIG      ADC_CR2_EXTTRIG_Msk           /*!< ADC group regular external trigger enable */\r\n#define ADC_CR2_JSWSTART_Pos (21U)\r\n#define ADC_CR2_JSWSTART_Msk (0x1U << ADC_CR2_JSWSTART_Pos) /*!< 0x00200000 */\r\n#define ADC_CR2_JSWSTART     ADC_CR2_JSWSTART_Msk           /*!< ADC group injected conversion start */\r\n#define ADC_CR2_SWSTART_Pos  (22U)\r\n#define ADC_CR2_SWSTART_Msk  (0x1U << ADC_CR2_SWSTART_Pos) /*!< 0x00400000 */\r\n#define ADC_CR2_SWSTART      ADC_CR2_SWSTART_Msk           /*!< ADC group regular conversion start */\r\n#define ADC_CR2_TSVREFE_Pos  (23U)\r\n#define ADC_CR2_TSVREFE_Msk  (0x1U << ADC_CR2_TSVREFE_Pos) /*!< 0x00800000 */\r\n#define ADC_CR2_TSVREFE      ADC_CR2_TSVREFE_Msk           /*!< ADC internal path to VrefInt and temperature sensor enable */\r\n\r\n/******************  Bit definition for ADC_SMPR1 register  *******************/\r\n#define ADC_SMPR1_SMP10_Pos (0U)\r\n#define ADC_SMPR1_SMP10_Msk (0x7U << ADC_SMPR1_SMP10_Pos) /*!< 0x00000007 */\r\n#define ADC_SMPR1_SMP10     ADC_SMPR1_SMP10_Msk           /*!< ADC channel 10 sampling time selection  */\r\n#define ADC_SMPR1_SMP10_0   (0x1U << ADC_SMPR1_SMP10_Pos) /*!< 0x00000001 */\r\n#define ADC_SMPR1_SMP10_1   (0x2U << ADC_SMPR1_SMP10_Pos) /*!< 0x00000002 */\r\n#define ADC_SMPR1_SMP10_2   (0x4U << ADC_SMPR1_SMP10_Pos) /*!< 0x00000004 */\r\n\r\n#define ADC_SMPR1_SMP11_Pos (3U)\r\n#define ADC_SMPR1_SMP11_Msk (0x7U << ADC_SMPR1_SMP11_Pos) /*!< 0x00000038 */\r\n#define ADC_SMPR1_SMP11     ADC_SMPR1_SMP11_Msk           /*!< ADC channel 11 sampling time selection  */\r\n#define ADC_SMPR1_SMP11_0   (0x1U << ADC_SMPR1_SMP11_Pos) /*!< 0x00000008 */\r\n#define ADC_SMPR1_SMP11_1   (0x2U << ADC_SMPR1_SMP11_Pos) /*!< 0x00000010 */\r\n#define ADC_SMPR1_SMP11_2   (0x4U << ADC_SMPR1_SMP11_Pos) /*!< 0x00000020 */\r\n\r\n#define ADC_SMPR1_SMP12_Pos (6U)\r\n#define ADC_SMPR1_SMP12_Msk (0x7U << ADC_SMPR1_SMP12_Pos) /*!< 0x000001C0 */\r\n#define ADC_SMPR1_SMP12     ADC_SMPR1_SMP12_Msk           /*!< ADC channel 12 sampling time selection  */\r\n#define ADC_SMPR1_SMP12_0   (0x1U << ADC_SMPR1_SMP12_Pos) /*!< 0x00000040 */\r\n#define ADC_SMPR1_SMP12_1   (0x2U << ADC_SMPR1_SMP12_Pos) /*!< 0x00000080 */\r\n#define ADC_SMPR1_SMP12_2   (0x4U << ADC_SMPR1_SMP12_Pos) /*!< 0x00000100 */\r\n\r\n#define ADC_SMPR1_SMP13_Pos (9U)\r\n#define ADC_SMPR1_SMP13_Msk (0x7U << ADC_SMPR1_SMP13_Pos) /*!< 0x00000E00 */\r\n#define ADC_SMPR1_SMP13     ADC_SMPR1_SMP13_Msk           /*!< ADC channel 13 sampling time selection  */\r\n#define ADC_SMPR1_SMP13_0   (0x1U << ADC_SMPR1_SMP13_Pos) /*!< 0x00000200 */\r\n#define ADC_SMPR1_SMP13_1   (0x2U << ADC_SMPR1_SMP13_Pos) /*!< 0x00000400 */\r\n#define ADC_SMPR1_SMP13_2   (0x4U << ADC_SMPR1_SMP13_Pos) /*!< 0x00000800 */\r\n\r\n#define ADC_SMPR1_SMP14_Pos (12U)\r\n#define ADC_SMPR1_SMP14_Msk (0x7U << ADC_SMPR1_SMP14_Pos) /*!< 0x00007000 */\r\n#define ADC_SMPR1_SMP14     ADC_SMPR1_SMP14_Msk           /*!< ADC channel 14 sampling time selection  */\r\n#define ADC_SMPR1_SMP14_0   (0x1U << ADC_SMPR1_SMP14_Pos) /*!< 0x00001000 */\r\n#define ADC_SMPR1_SMP14_1   (0x2U << ADC_SMPR1_SMP14_Pos) /*!< 0x00002000 */\r\n#define ADC_SMPR1_SMP14_2   (0x4U << ADC_SMPR1_SMP14_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_SMPR1_SMP15_Pos (15U)\r\n#define ADC_SMPR1_SMP15_Msk (0x7U << ADC_SMPR1_SMP15_Pos) /*!< 0x00038000 */\r\n#define ADC_SMPR1_SMP15     ADC_SMPR1_SMP15_Msk           /*!< ADC channel 15 sampling time selection  */\r\n#define ADC_SMPR1_SMP15_0   (0x1U << ADC_SMPR1_SMP15_Pos) /*!< 0x00008000 */\r\n#define ADC_SMPR1_SMP15_1   (0x2U << ADC_SMPR1_SMP15_Pos) /*!< 0x00010000 */\r\n#define ADC_SMPR1_SMP15_2   (0x4U << ADC_SMPR1_SMP15_Pos) /*!< 0x00020000 */\r\n\r\n#define ADC_SMPR1_SMP16_Pos (18U)\r\n#define ADC_SMPR1_SMP16_Msk (0x7U << ADC_SMPR1_SMP16_Pos) /*!< 0x001C0000 */\r\n#define ADC_SMPR1_SMP16     ADC_SMPR1_SMP16_Msk           /*!< ADC channel 16 sampling time selection  */\r\n#define ADC_SMPR1_SMP16_0   (0x1U << ADC_SMPR1_SMP16_Pos) /*!< 0x00040000 */\r\n#define ADC_SMPR1_SMP16_1   (0x2U << ADC_SMPR1_SMP16_Pos) /*!< 0x00080000 */\r\n#define ADC_SMPR1_SMP16_2   (0x4U << ADC_SMPR1_SMP16_Pos) /*!< 0x00100000 */\r\n\r\n#define ADC_SMPR1_SMP17_Pos (21U)\r\n#define ADC_SMPR1_SMP17_Msk (0x7U << ADC_SMPR1_SMP17_Pos) /*!< 0x00E00000 */\r\n#define ADC_SMPR1_SMP17     ADC_SMPR1_SMP17_Msk           /*!< ADC channel 17 sampling time selection  */\r\n#define ADC_SMPR1_SMP17_0   (0x1U << ADC_SMPR1_SMP17_Pos) /*!< 0x00200000 */\r\n#define ADC_SMPR1_SMP17_1   (0x2U << ADC_SMPR1_SMP17_Pos) /*!< 0x00400000 */\r\n#define ADC_SMPR1_SMP17_2   (0x4U << ADC_SMPR1_SMP17_Pos) /*!< 0x00800000 */\r\n\r\n/******************  Bit definition for ADC_SMPR2 register  *******************/\r\n#define ADC_SMPR2_SMP0_Pos (0U)\r\n#define ADC_SMPR2_SMP0_Msk (0x7U << ADC_SMPR2_SMP0_Pos) /*!< 0x00000007 */\r\n#define ADC_SMPR2_SMP0     ADC_SMPR2_SMP0_Msk           /*!< ADC channel 0 sampling time selection  */\r\n#define ADC_SMPR2_SMP0_0   (0x1U << ADC_SMPR2_SMP0_Pos) /*!< 0x00000001 */\r\n#define ADC_SMPR2_SMP0_1   (0x2U << ADC_SMPR2_SMP0_Pos) /*!< 0x00000002 */\r\n#define ADC_SMPR2_SMP0_2   (0x4U << ADC_SMPR2_SMP0_Pos) /*!< 0x00000004 */\r\n\r\n#define ADC_SMPR2_SMP1_Pos (3U)\r\n#define ADC_SMPR2_SMP1_Msk (0x7U << ADC_SMPR2_SMP1_Pos) /*!< 0x00000038 */\r\n#define ADC_SMPR2_SMP1     ADC_SMPR2_SMP1_Msk           /*!< ADC channel 1 sampling time selection  */\r\n#define ADC_SMPR2_SMP1_0   (0x1U << ADC_SMPR2_SMP1_Pos) /*!< 0x00000008 */\r\n#define ADC_SMPR2_SMP1_1   (0x2U << ADC_SMPR2_SMP1_Pos) /*!< 0x00000010 */\r\n#define ADC_SMPR2_SMP1_2   (0x4U << ADC_SMPR2_SMP1_Pos) /*!< 0x00000020 */\r\n\r\n#define ADC_SMPR2_SMP2_Pos (6U)\r\n#define ADC_SMPR2_SMP2_Msk (0x7U << ADC_SMPR2_SMP2_Pos) /*!< 0x000001C0 */\r\n#define ADC_SMPR2_SMP2     ADC_SMPR2_SMP2_Msk           /*!< ADC channel 2 sampling time selection  */\r\n#define ADC_SMPR2_SMP2_0   (0x1U << ADC_SMPR2_SMP2_Pos) /*!< 0x00000040 */\r\n#define ADC_SMPR2_SMP2_1   (0x2U << ADC_SMPR2_SMP2_Pos) /*!< 0x00000080 */\r\n#define ADC_SMPR2_SMP2_2   (0x4U << ADC_SMPR2_SMP2_Pos) /*!< 0x00000100 */\r\n\r\n#define ADC_SMPR2_SMP3_Pos (9U)\r\n#define ADC_SMPR2_SMP3_Msk (0x7U << ADC_SMPR2_SMP3_Pos) /*!< 0x00000E00 */\r\n#define ADC_SMPR2_SMP3     ADC_SMPR2_SMP3_Msk           /*!< ADC channel 3 sampling time selection  */\r\n#define ADC_SMPR2_SMP3_0   (0x1U << ADC_SMPR2_SMP3_Pos) /*!< 0x00000200 */\r\n#define ADC_SMPR2_SMP3_1   (0x2U << ADC_SMPR2_SMP3_Pos) /*!< 0x00000400 */\r\n#define ADC_SMPR2_SMP3_2   (0x4U << ADC_SMPR2_SMP3_Pos) /*!< 0x00000800 */\r\n\r\n#define ADC_SMPR2_SMP4_Pos (12U)\r\n#define ADC_SMPR2_SMP4_Msk (0x7U << ADC_SMPR2_SMP4_Pos) /*!< 0x00007000 */\r\n#define ADC_SMPR2_SMP4     ADC_SMPR2_SMP4_Msk           /*!< ADC channel 4 sampling time selection  */\r\n#define ADC_SMPR2_SMP4_0   (0x1U << ADC_SMPR2_SMP4_Pos) /*!< 0x00001000 */\r\n#define ADC_SMPR2_SMP4_1   (0x2U << ADC_SMPR2_SMP4_Pos) /*!< 0x00002000 */\r\n#define ADC_SMPR2_SMP4_2   (0x4U << ADC_SMPR2_SMP4_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_SMPR2_SMP5_Pos (15U)\r\n#define ADC_SMPR2_SMP5_Msk (0x7U << ADC_SMPR2_SMP5_Pos) /*!< 0x00038000 */\r\n#define ADC_SMPR2_SMP5     ADC_SMPR2_SMP5_Msk           /*!< ADC channel 5 sampling time selection  */\r\n#define ADC_SMPR2_SMP5_0   (0x1U << ADC_SMPR2_SMP5_Pos) /*!< 0x00008000 */\r\n#define ADC_SMPR2_SMP5_1   (0x2U << ADC_SMPR2_SMP5_Pos) /*!< 0x00010000 */\r\n#define ADC_SMPR2_SMP5_2   (0x4U << ADC_SMPR2_SMP5_Pos) /*!< 0x00020000 */\r\n\r\n#define ADC_SMPR2_SMP6_Pos (18U)\r\n#define ADC_SMPR2_SMP6_Msk (0x7U << ADC_SMPR2_SMP6_Pos) /*!< 0x001C0000 */\r\n#define ADC_SMPR2_SMP6     ADC_SMPR2_SMP6_Msk           /*!< ADC channel 6 sampling time selection  */\r\n#define ADC_SMPR2_SMP6_0   (0x1U << ADC_SMPR2_SMP6_Pos) /*!< 0x00040000 */\r\n#define ADC_SMPR2_SMP6_1   (0x2U << ADC_SMPR2_SMP6_Pos) /*!< 0x00080000 */\r\n#define ADC_SMPR2_SMP6_2   (0x4U << ADC_SMPR2_SMP6_Pos) /*!< 0x00100000 */\r\n\r\n#define ADC_SMPR2_SMP7_Pos (21U)\r\n#define ADC_SMPR2_SMP7_Msk (0x7U << ADC_SMPR2_SMP7_Pos) /*!< 0x00E00000 */\r\n#define ADC_SMPR2_SMP7     ADC_SMPR2_SMP7_Msk           /*!< ADC channel 7 sampling time selection  */\r\n#define ADC_SMPR2_SMP7_0   (0x1U << ADC_SMPR2_SMP7_Pos) /*!< 0x00200000 */\r\n#define ADC_SMPR2_SMP7_1   (0x2U << ADC_SMPR2_SMP7_Pos) /*!< 0x00400000 */\r\n#define ADC_SMPR2_SMP7_2   (0x4U << ADC_SMPR2_SMP7_Pos) /*!< 0x00800000 */\r\n\r\n#define ADC_SMPR2_SMP8_Pos (24U)\r\n#define ADC_SMPR2_SMP8_Msk (0x7U << ADC_SMPR2_SMP8_Pos) /*!< 0x07000000 */\r\n#define ADC_SMPR2_SMP8     ADC_SMPR2_SMP8_Msk           /*!< ADC channel 8 sampling time selection  */\r\n#define ADC_SMPR2_SMP8_0   (0x1U << ADC_SMPR2_SMP8_Pos) /*!< 0x01000000 */\r\n#define ADC_SMPR2_SMP8_1   (0x2U << ADC_SMPR2_SMP8_Pos) /*!< 0x02000000 */\r\n#define ADC_SMPR2_SMP8_2   (0x4U << ADC_SMPR2_SMP8_Pos) /*!< 0x04000000 */\r\n\r\n#define ADC_SMPR2_SMP9_Pos (27U)\r\n#define ADC_SMPR2_SMP9_Msk (0x7U << ADC_SMPR2_SMP9_Pos) /*!< 0x38000000 */\r\n#define ADC_SMPR2_SMP9     ADC_SMPR2_SMP9_Msk           /*!< ADC channel 9 sampling time selection  */\r\n#define ADC_SMPR2_SMP9_0   (0x1U << ADC_SMPR2_SMP9_Pos) /*!< 0x08000000 */\r\n#define ADC_SMPR2_SMP9_1   (0x2U << ADC_SMPR2_SMP9_Pos) /*!< 0x10000000 */\r\n#define ADC_SMPR2_SMP9_2   (0x4U << ADC_SMPR2_SMP9_Pos) /*!< 0x20000000 */\r\n\r\n/******************  Bit definition for ADC_JOFR1 register  *******************/\r\n#define ADC_JOFR1_JOFFSET1_Pos (0U)\r\n#define ADC_JOFR1_JOFFSET1_Msk (0xFFFU << ADC_JOFR1_JOFFSET1_Pos) /*!< 0x00000FFF */\r\n#define ADC_JOFR1_JOFFSET1     ADC_JOFR1_JOFFSET1_Msk             /*!< ADC group injected sequencer rank 1 offset value */\r\n\r\n/******************  Bit definition for ADC_JOFR2 register  *******************/\r\n#define ADC_JOFR2_JOFFSET2_Pos (0U)\r\n#define ADC_JOFR2_JOFFSET2_Msk (0xFFFU << ADC_JOFR2_JOFFSET2_Pos) /*!< 0x00000FFF */\r\n#define ADC_JOFR2_JOFFSET2     ADC_JOFR2_JOFFSET2_Msk             /*!< ADC group injected sequencer rank 2 offset value */\r\n\r\n/******************  Bit definition for ADC_JOFR3 register  *******************/\r\n#define ADC_JOFR3_JOFFSET3_Pos (0U)\r\n#define ADC_JOFR3_JOFFSET3_Msk (0xFFFU << ADC_JOFR3_JOFFSET3_Pos) /*!< 0x00000FFF */\r\n#define ADC_JOFR3_JOFFSET3     ADC_JOFR3_JOFFSET3_Msk             /*!< ADC group injected sequencer rank 3 offset value */\r\n\r\n/******************  Bit definition for ADC_JOFR4 register  *******************/\r\n#define ADC_JOFR4_JOFFSET4_Pos (0U)\r\n#define ADC_JOFR4_JOFFSET4_Msk (0xFFFU << ADC_JOFR4_JOFFSET4_Pos) /*!< 0x00000FFF */\r\n#define ADC_JOFR4_JOFFSET4     ADC_JOFR4_JOFFSET4_Msk             /*!< ADC group injected sequencer rank 4 offset value */\r\n\r\n/*******************  Bit definition for ADC_HTR register  ********************/\r\n#define ADC_HTR_HT_Pos (0U)\r\n#define ADC_HTR_HT_Msk (0xFFFU << ADC_HTR_HT_Pos) /*!< 0x00000FFF */\r\n#define ADC_HTR_HT     ADC_HTR_HT_Msk             /*!< ADC analog watchdog 1 threshold high */\r\n\r\n/*******************  Bit definition for ADC_LTR register  ********************/\r\n#define ADC_LTR_LT_Pos (0U)\r\n#define ADC_LTR_LT_Msk (0xFFFU << ADC_LTR_LT_Pos) /*!< 0x00000FFF */\r\n#define ADC_LTR_LT     ADC_LTR_LT_Msk             /*!< ADC analog watchdog 1 threshold low */\r\n\r\n/*******************  Bit definition for ADC_SQR1 register  *******************/\r\n#define ADC_SQR1_SQ13_Pos (0U)\r\n#define ADC_SQR1_SQ13_Msk (0x1FU << ADC_SQR1_SQ13_Pos) /*!< 0x0000001F */\r\n#define ADC_SQR1_SQ13     ADC_SQR1_SQ13_Msk            /*!< ADC group regular sequencer rank 13 */\r\n#define ADC_SQR1_SQ13_0   (0x01U << ADC_SQR1_SQ13_Pos) /*!< 0x00000001 */\r\n#define ADC_SQR1_SQ13_1   (0x02U << ADC_SQR1_SQ13_Pos) /*!< 0x00000002 */\r\n#define ADC_SQR1_SQ13_2   (0x04U << ADC_SQR1_SQ13_Pos) /*!< 0x00000004 */\r\n#define ADC_SQR1_SQ13_3   (0x08U << ADC_SQR1_SQ13_Pos) /*!< 0x00000008 */\r\n#define ADC_SQR1_SQ13_4   (0x10U << ADC_SQR1_SQ13_Pos) /*!< 0x00000010 */\r\n\r\n#define ADC_SQR1_SQ14_Pos (5U)\r\n#define ADC_SQR1_SQ14_Msk (0x1FU << ADC_SQR1_SQ14_Pos) /*!< 0x000003E0 */\r\n#define ADC_SQR1_SQ14     ADC_SQR1_SQ14_Msk            /*!< ADC group regular sequencer rank 14 */\r\n#define ADC_SQR1_SQ14_0   (0x01U << ADC_SQR1_SQ14_Pos) /*!< 0x00000020 */\r\n#define ADC_SQR1_SQ14_1   (0x02U << ADC_SQR1_SQ14_Pos) /*!< 0x00000040 */\r\n#define ADC_SQR1_SQ14_2   (0x04U << ADC_SQR1_SQ14_Pos) /*!< 0x00000080 */\r\n#define ADC_SQR1_SQ14_3   (0x08U << ADC_SQR1_SQ14_Pos) /*!< 0x00000100 */\r\n#define ADC_SQR1_SQ14_4   (0x10U << ADC_SQR1_SQ14_Pos) /*!< 0x00000200 */\r\n\r\n#define ADC_SQR1_SQ15_Pos (10U)\r\n#define ADC_SQR1_SQ15_Msk (0x1FU << ADC_SQR1_SQ15_Pos) /*!< 0x00007C00 */\r\n#define ADC_SQR1_SQ15     ADC_SQR1_SQ15_Msk            /*!< ADC group regular sequencer rank 15 */\r\n#define ADC_SQR1_SQ15_0   (0x01U << ADC_SQR1_SQ15_Pos) /*!< 0x00000400 */\r\n#define ADC_SQR1_SQ15_1   (0x02U << ADC_SQR1_SQ15_Pos) /*!< 0x00000800 */\r\n#define ADC_SQR1_SQ15_2   (0x04U << ADC_SQR1_SQ15_Pos) /*!< 0x00001000 */\r\n#define ADC_SQR1_SQ15_3   (0x08U << ADC_SQR1_SQ15_Pos) /*!< 0x00002000 */\r\n#define ADC_SQR1_SQ15_4   (0x10U << ADC_SQR1_SQ15_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_SQR1_SQ16_Pos (15U)\r\n#define ADC_SQR1_SQ16_Msk (0x1FU << ADC_SQR1_SQ16_Pos) /*!< 0x000F8000 */\r\n#define ADC_SQR1_SQ16     ADC_SQR1_SQ16_Msk            /*!< ADC group regular sequencer rank 16 */\r\n#define ADC_SQR1_SQ16_0   (0x01U << ADC_SQR1_SQ16_Pos) /*!< 0x00008000 */\r\n#define ADC_SQR1_SQ16_1   (0x02U << ADC_SQR1_SQ16_Pos) /*!< 0x00010000 */\r\n#define ADC_SQR1_SQ16_2   (0x04U << ADC_SQR1_SQ16_Pos) /*!< 0x00020000 */\r\n#define ADC_SQR1_SQ16_3   (0x08U << ADC_SQR1_SQ16_Pos) /*!< 0x00040000 */\r\n#define ADC_SQR1_SQ16_4   (0x10U << ADC_SQR1_SQ16_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_SQR1_L_Pos (20U)\r\n#define ADC_SQR1_L_Msk (0xFU << ADC_SQR1_L_Pos) /*!< 0x00F00000 */\r\n#define ADC_SQR1_L     ADC_SQR1_L_Msk           /*!< ADC group regular sequencer scan length */\r\n#define ADC_SQR1_L_0   (0x1U << ADC_SQR1_L_Pos) /*!< 0x00100000 */\r\n#define ADC_SQR1_L_1   (0x2U << ADC_SQR1_L_Pos) /*!< 0x00200000 */\r\n#define ADC_SQR1_L_2   (0x4U << ADC_SQR1_L_Pos) /*!< 0x00400000 */\r\n#define ADC_SQR1_L_3   (0x8U << ADC_SQR1_L_Pos) /*!< 0x00800000 */\r\n\r\n/*******************  Bit definition for ADC_SQR2 register  *******************/\r\n#define ADC_SQR2_SQ7_Pos (0U)\r\n#define ADC_SQR2_SQ7_Msk (0x1FU << ADC_SQR2_SQ7_Pos) /*!< 0x0000001F */\r\n#define ADC_SQR2_SQ7     ADC_SQR2_SQ7_Msk            /*!< ADC group regular sequencer rank 7 */\r\n#define ADC_SQR2_SQ7_0   (0x01U << ADC_SQR2_SQ7_Pos) /*!< 0x00000001 */\r\n#define ADC_SQR2_SQ7_1   (0x02U << ADC_SQR2_SQ7_Pos) /*!< 0x00000002 */\r\n#define ADC_SQR2_SQ7_2   (0x04U << ADC_SQR2_SQ7_Pos) /*!< 0x00000004 */\r\n#define ADC_SQR2_SQ7_3   (0x08U << ADC_SQR2_SQ7_Pos) /*!< 0x00000008 */\r\n#define ADC_SQR2_SQ7_4   (0x10U << ADC_SQR2_SQ7_Pos) /*!< 0x00000010 */\r\n\r\n#define ADC_SQR2_SQ8_Pos (5U)\r\n#define ADC_SQR2_SQ8_Msk (0x1FU << ADC_SQR2_SQ8_Pos) /*!< 0x000003E0 */\r\n#define ADC_SQR2_SQ8     ADC_SQR2_SQ8_Msk            /*!< ADC group regular sequencer rank 8 */\r\n#define ADC_SQR2_SQ8_0   (0x01U << ADC_SQR2_SQ8_Pos) /*!< 0x00000020 */\r\n#define ADC_SQR2_SQ8_1   (0x02U << ADC_SQR2_SQ8_Pos) /*!< 0x00000040 */\r\n#define ADC_SQR2_SQ8_2   (0x04U << ADC_SQR2_SQ8_Pos) /*!< 0x00000080 */\r\n#define ADC_SQR2_SQ8_3   (0x08U << ADC_SQR2_SQ8_Pos) /*!< 0x00000100 */\r\n#define ADC_SQR2_SQ8_4   (0x10U << ADC_SQR2_SQ8_Pos) /*!< 0x00000200 */\r\n\r\n#define ADC_SQR2_SQ9_Pos (10U)\r\n#define ADC_SQR2_SQ9_Msk (0x1FU << ADC_SQR2_SQ9_Pos) /*!< 0x00007C00 */\r\n#define ADC_SQR2_SQ9     ADC_SQR2_SQ9_Msk            /*!< ADC group regular sequencer rank 9 */\r\n#define ADC_SQR2_SQ9_0   (0x01U << ADC_SQR2_SQ9_Pos) /*!< 0x00000400 */\r\n#define ADC_SQR2_SQ9_1   (0x02U << ADC_SQR2_SQ9_Pos) /*!< 0x00000800 */\r\n#define ADC_SQR2_SQ9_2   (0x04U << ADC_SQR2_SQ9_Pos) /*!< 0x00001000 */\r\n#define ADC_SQR2_SQ9_3   (0x08U << ADC_SQR2_SQ9_Pos) /*!< 0x00002000 */\r\n#define ADC_SQR2_SQ9_4   (0x10U << ADC_SQR2_SQ9_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_SQR2_SQ10_Pos (15U)\r\n#define ADC_SQR2_SQ10_Msk (0x1FU << ADC_SQR2_SQ10_Pos) /*!< 0x000F8000 */\r\n#define ADC_SQR2_SQ10     ADC_SQR2_SQ10_Msk            /*!< ADC group regular sequencer rank 10 */\r\n#define ADC_SQR2_SQ10_0   (0x01U << ADC_SQR2_SQ10_Pos) /*!< 0x00008000 */\r\n#define ADC_SQR2_SQ10_1   (0x02U << ADC_SQR2_SQ10_Pos) /*!< 0x00010000 */\r\n#define ADC_SQR2_SQ10_2   (0x04U << ADC_SQR2_SQ10_Pos) /*!< 0x00020000 */\r\n#define ADC_SQR2_SQ10_3   (0x08U << ADC_SQR2_SQ10_Pos) /*!< 0x00040000 */\r\n#define ADC_SQR2_SQ10_4   (0x10U << ADC_SQR2_SQ10_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_SQR2_SQ11_Pos (20U)\r\n#define ADC_SQR2_SQ11_Msk (0x1FU << ADC_SQR2_SQ11_Pos) /*!< 0x01F00000 */\r\n#define ADC_SQR2_SQ11     ADC_SQR2_SQ11_Msk            /*!< ADC group regular sequencer rank 1 */\r\n#define ADC_SQR2_SQ11_0   (0x01U << ADC_SQR2_SQ11_Pos) /*!< 0x00100000 */\r\n#define ADC_SQR2_SQ11_1   (0x02U << ADC_SQR2_SQ11_Pos) /*!< 0x00200000 */\r\n#define ADC_SQR2_SQ11_2   (0x04U << ADC_SQR2_SQ11_Pos) /*!< 0x00400000 */\r\n#define ADC_SQR2_SQ11_3   (0x08U << ADC_SQR2_SQ11_Pos) /*!< 0x00800000 */\r\n#define ADC_SQR2_SQ11_4   (0x10U << ADC_SQR2_SQ11_Pos) /*!< 0x01000000 */\r\n\r\n#define ADC_SQR2_SQ12_Pos (25U)\r\n#define ADC_SQR2_SQ12_Msk (0x1FU << ADC_SQR2_SQ12_Pos) /*!< 0x3E000000 */\r\n#define ADC_SQR2_SQ12     ADC_SQR2_SQ12_Msk            /*!< ADC group regular sequencer rank 12 */\r\n#define ADC_SQR2_SQ12_0   (0x01U << ADC_SQR2_SQ12_Pos) /*!< 0x02000000 */\r\n#define ADC_SQR2_SQ12_1   (0x02U << ADC_SQR2_SQ12_Pos) /*!< 0x04000000 */\r\n#define ADC_SQR2_SQ12_2   (0x04U << ADC_SQR2_SQ12_Pos) /*!< 0x08000000 */\r\n#define ADC_SQR2_SQ12_3   (0x08U << ADC_SQR2_SQ12_Pos) /*!< 0x10000000 */\r\n#define ADC_SQR2_SQ12_4   (0x10U << ADC_SQR2_SQ12_Pos) /*!< 0x20000000 */\r\n\r\n/*******************  Bit definition for ADC_SQR3 register  *******************/\r\n#define ADC_SQR3_SQ1_Pos (0U)\r\n#define ADC_SQR3_SQ1_Msk (0x1FU << ADC_SQR3_SQ1_Pos) /*!< 0x0000001F */\r\n#define ADC_SQR3_SQ1     ADC_SQR3_SQ1_Msk            /*!< ADC group regular sequencer rank 1 */\r\n#define ADC_SQR3_SQ1_0   (0x01U << ADC_SQR3_SQ1_Pos) /*!< 0x00000001 */\r\n#define ADC_SQR3_SQ1_1   (0x02U << ADC_SQR3_SQ1_Pos) /*!< 0x00000002 */\r\n#define ADC_SQR3_SQ1_2   (0x04U << ADC_SQR3_SQ1_Pos) /*!< 0x00000004 */\r\n#define ADC_SQR3_SQ1_3   (0x08U << ADC_SQR3_SQ1_Pos) /*!< 0x00000008 */\r\n#define ADC_SQR3_SQ1_4   (0x10U << ADC_SQR3_SQ1_Pos) /*!< 0x00000010 */\r\n\r\n#define ADC_SQR3_SQ2_Pos (5U)\r\n#define ADC_SQR3_SQ2_Msk (0x1FU << ADC_SQR3_SQ2_Pos) /*!< 0x000003E0 */\r\n#define ADC_SQR3_SQ2     ADC_SQR3_SQ2_Msk            /*!< ADC group regular sequencer rank 2 */\r\n#define ADC_SQR3_SQ2_0   (0x01U << ADC_SQR3_SQ2_Pos) /*!< 0x00000020 */\r\n#define ADC_SQR3_SQ2_1   (0x02U << ADC_SQR3_SQ2_Pos) /*!< 0x00000040 */\r\n#define ADC_SQR3_SQ2_2   (0x04U << ADC_SQR3_SQ2_Pos) /*!< 0x00000080 */\r\n#define ADC_SQR3_SQ2_3   (0x08U << ADC_SQR3_SQ2_Pos) /*!< 0x00000100 */\r\n#define ADC_SQR3_SQ2_4   (0x10U << ADC_SQR3_SQ2_Pos) /*!< 0x00000200 */\r\n\r\n#define ADC_SQR3_SQ3_Pos (10U)\r\n#define ADC_SQR3_SQ3_Msk (0x1FU << ADC_SQR3_SQ3_Pos) /*!< 0x00007C00 */\r\n#define ADC_SQR3_SQ3     ADC_SQR3_SQ3_Msk            /*!< ADC group regular sequencer rank 3 */\r\n#define ADC_SQR3_SQ3_0   (0x01U << ADC_SQR3_SQ3_Pos) /*!< 0x00000400 */\r\n#define ADC_SQR3_SQ3_1   (0x02U << ADC_SQR3_SQ3_Pos) /*!< 0x00000800 */\r\n#define ADC_SQR3_SQ3_2   (0x04U << ADC_SQR3_SQ3_Pos) /*!< 0x00001000 */\r\n#define ADC_SQR3_SQ3_3   (0x08U << ADC_SQR3_SQ3_Pos) /*!< 0x00002000 */\r\n#define ADC_SQR3_SQ3_4   (0x10U << ADC_SQR3_SQ3_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_SQR3_SQ4_Pos (15U)\r\n#define ADC_SQR3_SQ4_Msk (0x1FU << ADC_SQR3_SQ4_Pos) /*!< 0x000F8000 */\r\n#define ADC_SQR3_SQ4     ADC_SQR3_SQ4_Msk            /*!< ADC group regular sequencer rank 4 */\r\n#define ADC_SQR3_SQ4_0   (0x01U << ADC_SQR3_SQ4_Pos) /*!< 0x00008000 */\r\n#define ADC_SQR3_SQ4_1   (0x02U << ADC_SQR3_SQ4_Pos) /*!< 0x00010000 */\r\n#define ADC_SQR3_SQ4_2   (0x04U << ADC_SQR3_SQ4_Pos) /*!< 0x00020000 */\r\n#define ADC_SQR3_SQ4_3   (0x08U << ADC_SQR3_SQ4_Pos) /*!< 0x00040000 */\r\n#define ADC_SQR3_SQ4_4   (0x10U << ADC_SQR3_SQ4_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_SQR3_SQ5_Pos (20U)\r\n#define ADC_SQR3_SQ5_Msk (0x1FU << ADC_SQR3_SQ5_Pos) /*!< 0x01F00000 */\r\n#define ADC_SQR3_SQ5     ADC_SQR3_SQ5_Msk            /*!< ADC group regular sequencer rank 5 */\r\n#define ADC_SQR3_SQ5_0   (0x01U << ADC_SQR3_SQ5_Pos) /*!< 0x00100000 */\r\n#define ADC_SQR3_SQ5_1   (0x02U << ADC_SQR3_SQ5_Pos) /*!< 0x00200000 */\r\n#define ADC_SQR3_SQ5_2   (0x04U << ADC_SQR3_SQ5_Pos) /*!< 0x00400000 */\r\n#define ADC_SQR3_SQ5_3   (0x08U << ADC_SQR3_SQ5_Pos) /*!< 0x00800000 */\r\n#define ADC_SQR3_SQ5_4   (0x10U << ADC_SQR3_SQ5_Pos) /*!< 0x01000000 */\r\n\r\n#define ADC_SQR3_SQ6_Pos (25U)\r\n#define ADC_SQR3_SQ6_Msk (0x1FU << ADC_SQR3_SQ6_Pos) /*!< 0x3E000000 */\r\n#define ADC_SQR3_SQ6     ADC_SQR3_SQ6_Msk            /*!< ADC group regular sequencer rank 6 */\r\n#define ADC_SQR3_SQ6_0   (0x01U << ADC_SQR3_SQ6_Pos) /*!< 0x02000000 */\r\n#define ADC_SQR3_SQ6_1   (0x02U << ADC_SQR3_SQ6_Pos) /*!< 0x04000000 */\r\n#define ADC_SQR3_SQ6_2   (0x04U << ADC_SQR3_SQ6_Pos) /*!< 0x08000000 */\r\n#define ADC_SQR3_SQ6_3   (0x08U << ADC_SQR3_SQ6_Pos) /*!< 0x10000000 */\r\n#define ADC_SQR3_SQ6_4   (0x10U << ADC_SQR3_SQ6_Pos) /*!< 0x20000000 */\r\n\r\n/*******************  Bit definition for ADC_JSQR register  *******************/\r\n#define ADC_JSQR_JSQ1_Pos (0U)\r\n#define ADC_JSQR_JSQ1_Msk (0x1FU << ADC_JSQR_JSQ1_Pos) /*!< 0x0000001F */\r\n#define ADC_JSQR_JSQ1     ADC_JSQR_JSQ1_Msk            /*!< ADC group injected sequencer rank 1 */\r\n#define ADC_JSQR_JSQ1_0   (0x01U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000001 */\r\n#define ADC_JSQR_JSQ1_1   (0x02U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000002 */\r\n#define ADC_JSQR_JSQ1_2   (0x04U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000004 */\r\n#define ADC_JSQR_JSQ1_3   (0x08U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000008 */\r\n#define ADC_JSQR_JSQ1_4   (0x10U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000010 */\r\n\r\n#define ADC_JSQR_JSQ2_Pos (5U)\r\n#define ADC_JSQR_JSQ2_Msk (0x1FU << ADC_JSQR_JSQ2_Pos) /*!< 0x000003E0 */\r\n#define ADC_JSQR_JSQ2     ADC_JSQR_JSQ2_Msk            /*!< ADC group injected sequencer rank 2 */\r\n#define ADC_JSQR_JSQ2_0   (0x01U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000020 */\r\n#define ADC_JSQR_JSQ2_1   (0x02U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000040 */\r\n#define ADC_JSQR_JSQ2_2   (0x04U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000080 */\r\n#define ADC_JSQR_JSQ2_3   (0x08U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000100 */\r\n#define ADC_JSQR_JSQ2_4   (0x10U << ADC_JSQR_JSQ2_Pos) /*!< 0x00000200 */\r\n\r\n#define ADC_JSQR_JSQ3_Pos (10U)\r\n#define ADC_JSQR_JSQ3_Msk (0x1FU << ADC_JSQR_JSQ3_Pos) /*!< 0x00007C00 */\r\n#define ADC_JSQR_JSQ3     ADC_JSQR_JSQ3_Msk            /*!< ADC group injected sequencer rank 3 */\r\n#define ADC_JSQR_JSQ3_0   (0x01U << ADC_JSQR_JSQ3_Pos) /*!< 0x00000400 */\r\n#define ADC_JSQR_JSQ3_1   (0x02U << ADC_JSQR_JSQ3_Pos) /*!< 0x00000800 */\r\n#define ADC_JSQR_JSQ3_2   (0x04U << ADC_JSQR_JSQ3_Pos) /*!< 0x00001000 */\r\n#define ADC_JSQR_JSQ3_3   (0x08U << ADC_JSQR_JSQ3_Pos) /*!< 0x00002000 */\r\n#define ADC_JSQR_JSQ3_4   (0x10U << ADC_JSQR_JSQ3_Pos) /*!< 0x00004000 */\r\n\r\n#define ADC_JSQR_JSQ4_Pos (15U)\r\n#define ADC_JSQR_JSQ4_Msk (0x1FU << ADC_JSQR_JSQ4_Pos) /*!< 0x000F8000 */\r\n#define ADC_JSQR_JSQ4     ADC_JSQR_JSQ4_Msk            /*!< ADC group injected sequencer rank 4 */\r\n#define ADC_JSQR_JSQ4_0   (0x01U << ADC_JSQR_JSQ4_Pos) /*!< 0x00008000 */\r\n#define ADC_JSQR_JSQ4_1   (0x02U << ADC_JSQR_JSQ4_Pos) /*!< 0x00010000 */\r\n#define ADC_JSQR_JSQ4_2   (0x04U << ADC_JSQR_JSQ4_Pos) /*!< 0x00020000 */\r\n#define ADC_JSQR_JSQ4_3   (0x08U << ADC_JSQR_JSQ4_Pos) /*!< 0x00040000 */\r\n#define ADC_JSQR_JSQ4_4   (0x10U << ADC_JSQR_JSQ4_Pos) /*!< 0x00080000 */\r\n\r\n#define ADC_JSQR_JL_Pos (20U)\r\n#define ADC_JSQR_JL_Msk (0x3U << ADC_JSQR_JL_Pos) /*!< 0x00300000 */\r\n#define ADC_JSQR_JL     ADC_JSQR_JL_Msk           /*!< ADC group injected sequencer scan length */\r\n#define ADC_JSQR_JL_0   (0x1U << ADC_JSQR_JL_Pos) /*!< 0x00100000 */\r\n#define ADC_JSQR_JL_1   (0x2U << ADC_JSQR_JL_Pos) /*!< 0x00200000 */\r\n\r\n/*******************  Bit definition for ADC_JDR1 register  *******************/\r\n#define ADC_JDR1_JDATA_Pos (0U)\r\n#define ADC_JDR1_JDATA_Msk (0xFFFFU << ADC_JDR1_JDATA_Pos) /*!< 0x0000FFFF */\r\n#define ADC_JDR1_JDATA     ADC_JDR1_JDATA_Msk              /*!< ADC group injected sequencer rank 1 conversion data */\r\n\r\n/*******************  Bit definition for ADC_JDR2 register  *******************/\r\n#define ADC_JDR2_JDATA_Pos (0U)\r\n#define ADC_JDR2_JDATA_Msk (0xFFFFU << ADC_JDR2_JDATA_Pos) /*!< 0x0000FFFF */\r\n#define ADC_JDR2_JDATA     ADC_JDR2_JDATA_Msk              /*!< ADC group injected sequencer rank 2 conversion data */\r\n\r\n/*******************  Bit definition for ADC_JDR3 register  *******************/\r\n#define ADC_JDR3_JDATA_Pos (0U)\r\n#define ADC_JDR3_JDATA_Msk (0xFFFFU << ADC_JDR3_JDATA_Pos) /*!< 0x0000FFFF */\r\n#define ADC_JDR3_JDATA     ADC_JDR3_JDATA_Msk              /*!< ADC group injected sequencer rank 3 conversion data */\r\n\r\n/*******************  Bit definition for ADC_JDR4 register  *******************/\r\n#define ADC_JDR4_JDATA_Pos (0U)\r\n#define ADC_JDR4_JDATA_Msk (0xFFFFU << ADC_JDR4_JDATA_Pos) /*!< 0x0000FFFF */\r\n#define ADC_JDR4_JDATA     ADC_JDR4_JDATA_Msk              /*!< ADC group injected sequencer rank 4 conversion data */\r\n\r\n/********************  Bit definition for ADC_DR register  ********************/\r\n#define ADC_DR_DATA_Pos     (0U)\r\n#define ADC_DR_DATA_Msk     (0xFFFFU << ADC_DR_DATA_Pos) /*!< 0x0000FFFF */\r\n#define ADC_DR_DATA         ADC_DR_DATA_Msk              /*!< ADC group regular conversion data */\r\n#define ADC_DR_ADC2DATA_Pos (16U)\r\n#define ADC_DR_ADC2DATA_Msk (0xFFFFU << ADC_DR_ADC2DATA_Pos) /*!< 0xFFFF0000 */\r\n#define ADC_DR_ADC2DATA     ADC_DR_ADC2DATA_Msk              /*!< ADC group regular conversion data for ADC slave, in multimode */\r\n\r\n/*****************************************************************************/\r\n/*                                                                           */\r\n/*                               Timers (TIM)                                */\r\n/*                                                                           */\r\n/*****************************************************************************/\r\n/*******************  Bit definition for TIM_CR1 register  *******************/\r\n#define TIM_CR1_CEN_Pos  (0U)\r\n#define TIM_CR1_CEN_Msk  (0x1U << TIM_CR1_CEN_Pos) /*!< 0x00000001 */\r\n#define TIM_CR1_CEN      TIM_CR1_CEN_Msk           /*!<Counter enable */\r\n#define TIM_CR1_UDIS_Pos (1U)\r\n#define TIM_CR1_UDIS_Msk (0x1U << TIM_CR1_UDIS_Pos) /*!< 0x00000002 */\r\n#define TIM_CR1_UDIS     TIM_CR1_UDIS_Msk           /*!<Update disable */\r\n#define TIM_CR1_URS_Pos  (2U)\r\n#define TIM_CR1_URS_Msk  (0x1U << TIM_CR1_URS_Pos) /*!< 0x00000004 */\r\n#define TIM_CR1_URS      TIM_CR1_URS_Msk           /*!<Update request source */\r\n#define TIM_CR1_OPM_Pos  (3U)\r\n#define TIM_CR1_OPM_Msk  (0x1U << TIM_CR1_OPM_Pos) /*!< 0x00000008 */\r\n#define TIM_CR1_OPM      TIM_CR1_OPM_Msk           /*!<One pulse mode */\r\n#define TIM_CR1_DIR_Pos  (4U)\r\n#define TIM_CR1_DIR_Msk  (0x1U << TIM_CR1_DIR_Pos) /*!< 0x00000010 */\r\n#define TIM_CR1_DIR      TIM_CR1_DIR_Msk           /*!<Direction */\r\n\r\n#define TIM_CR1_CMS_Pos (5U)\r\n#define TIM_CR1_CMS_Msk (0x3U << TIM_CR1_CMS_Pos) /*!< 0x00000060 */\r\n#define TIM_CR1_CMS     TIM_CR1_CMS_Msk           /*!<CMS[1:0] bits (Center-aligned mode selection) */\r\n#define TIM_CR1_CMS_0   (0x1U << TIM_CR1_CMS_Pos) /*!< 0x00000020 */\r\n#define TIM_CR1_CMS_1   (0x2U << TIM_CR1_CMS_Pos) /*!< 0x00000040 */\r\n\r\n#define TIM_CR1_ARPE_Pos (7U)\r\n#define TIM_CR1_ARPE_Msk (0x1U << TIM_CR1_ARPE_Pos) /*!< 0x00000080 */\r\n#define TIM_CR1_ARPE     TIM_CR1_ARPE_Msk           /*!<Auto-reload preload enable */\r\n\r\n#define TIM_CR1_CKD_Pos (8U)\r\n#define TIM_CR1_CKD_Msk (0x3U << TIM_CR1_CKD_Pos) /*!< 0x00000300 */\r\n#define TIM_CR1_CKD     TIM_CR1_CKD_Msk           /*!<CKD[1:0] bits (clock division) */\r\n#define TIM_CR1_CKD_0   (0x1U << TIM_CR1_CKD_Pos) /*!< 0x00000100 */\r\n#define TIM_CR1_CKD_1   (0x2U << TIM_CR1_CKD_Pos) /*!< 0x00000200 */\r\n\r\n/*******************  Bit definition for TIM_CR2 register  *******************/\r\n#define TIM_CR2_CCPC_Pos (0U)\r\n#define TIM_CR2_CCPC_Msk (0x1U << TIM_CR2_CCPC_Pos) /*!< 0x00000001 */\r\n#define TIM_CR2_CCPC     TIM_CR2_CCPC_Msk           /*!<Capture/Compare Preloaded Control */\r\n#define TIM_CR2_CCUS_Pos (2U)\r\n#define TIM_CR2_CCUS_Msk (0x1U << TIM_CR2_CCUS_Pos) /*!< 0x00000004 */\r\n#define TIM_CR2_CCUS     TIM_CR2_CCUS_Msk           /*!<Capture/Compare Control Update Selection */\r\n#define TIM_CR2_CCDS_Pos (3U)\r\n#define TIM_CR2_CCDS_Msk (0x1U << TIM_CR2_CCDS_Pos) /*!< 0x00000008 */\r\n#define TIM_CR2_CCDS     TIM_CR2_CCDS_Msk           /*!<Capture/Compare DMA Selection */\r\n\r\n#define TIM_CR2_MMS_Pos (4U)\r\n#define TIM_CR2_MMS_Msk (0x7U << TIM_CR2_MMS_Pos) /*!< 0x00000070 */\r\n#define TIM_CR2_MMS     TIM_CR2_MMS_Msk           /*!<MMS[2:0] bits (Master Mode Selection) */\r\n#define TIM_CR2_MMS_0   (0x1U << TIM_CR2_MMS_Pos) /*!< 0x00000010 */\r\n#define TIM_CR2_MMS_1   (0x2U << TIM_CR2_MMS_Pos) /*!< 0x00000020 */\r\n#define TIM_CR2_MMS_2   (0x4U << TIM_CR2_MMS_Pos) /*!< 0x00000040 */\r\n\r\n#define TIM_CR2_TI1S_Pos  (7U)\r\n#define TIM_CR2_TI1S_Msk  (0x1U << TIM_CR2_TI1S_Pos) /*!< 0x00000080 */\r\n#define TIM_CR2_TI1S      TIM_CR2_TI1S_Msk           /*!<TI1 Selection */\r\n#define TIM_CR2_OIS1_Pos  (8U)\r\n#define TIM_CR2_OIS1_Msk  (0x1U << TIM_CR2_OIS1_Pos) /*!< 0x00000100 */\r\n#define TIM_CR2_OIS1      TIM_CR2_OIS1_Msk           /*!<Output Idle state 1 (OC1 output) */\r\n#define TIM_CR2_OIS1N_Pos (9U)\r\n#define TIM_CR2_OIS1N_Msk (0x1U << TIM_CR2_OIS1N_Pos) /*!< 0x00000200 */\r\n#define TIM_CR2_OIS1N     TIM_CR2_OIS1N_Msk           /*!<Output Idle state 1 (OC1N output) */\r\n#define TIM_CR2_OIS2_Pos  (10U)\r\n#define TIM_CR2_OIS2_Msk  (0x1U << TIM_CR2_OIS2_Pos) /*!< 0x00000400 */\r\n#define TIM_CR2_OIS2      TIM_CR2_OIS2_Msk           /*!<Output Idle state 2 (OC2 output) */\r\n#define TIM_CR2_OIS2N_Pos (11U)\r\n#define TIM_CR2_OIS2N_Msk (0x1U << TIM_CR2_OIS2N_Pos) /*!< 0x00000800 */\r\n#define TIM_CR2_OIS2N     TIM_CR2_OIS2N_Msk           /*!<Output Idle state 2 (OC2N output) */\r\n#define TIM_CR2_OIS3_Pos  (12U)\r\n#define TIM_CR2_OIS3_Msk  (0x1U << TIM_CR2_OIS3_Pos) /*!< 0x00001000 */\r\n#define TIM_CR2_OIS3      TIM_CR2_OIS3_Msk           /*!<Output Idle state 3 (OC3 output) */\r\n#define TIM_CR2_OIS3N_Pos (13U)\r\n#define TIM_CR2_OIS3N_Msk (0x1U << TIM_CR2_OIS3N_Pos) /*!< 0x00002000 */\r\n#define TIM_CR2_OIS3N     TIM_CR2_OIS3N_Msk           /*!<Output Idle state 3 (OC3N output) */\r\n#define TIM_CR2_OIS4_Pos  (14U)\r\n#define TIM_CR2_OIS4_Msk  (0x1U << TIM_CR2_OIS4_Pos) /*!< 0x00004000 */\r\n#define TIM_CR2_OIS4      TIM_CR2_OIS4_Msk           /*!<Output Idle state 4 (OC4 output) */\r\n\r\n/*******************  Bit definition for TIM_SMCR register  ******************/\r\n#define TIM_SMCR_SMS_Pos (0U)\r\n#define TIM_SMCR_SMS_Msk (0x7U << TIM_SMCR_SMS_Pos) /*!< 0x00000007 */\r\n#define TIM_SMCR_SMS     TIM_SMCR_SMS_Msk           /*!<SMS[2:0] bits (Slave mode selection) */\r\n#define TIM_SMCR_SMS_0   (0x1U << TIM_SMCR_SMS_Pos) /*!< 0x00000001 */\r\n#define TIM_SMCR_SMS_1   (0x2U << TIM_SMCR_SMS_Pos) /*!< 0x00000002 */\r\n#define TIM_SMCR_SMS_2   (0x4U << TIM_SMCR_SMS_Pos) /*!< 0x00000004 */\r\n\r\n#define TIM_SMCR_TS_Pos (4U)\r\n#define TIM_SMCR_TS_Msk (0x7U << TIM_SMCR_TS_Pos) /*!< 0x00000070 */\r\n#define TIM_SMCR_TS     TIM_SMCR_TS_Msk           /*!<TS[2:0] bits (Trigger selection) */\r\n#define TIM_SMCR_TS_0   (0x1U << TIM_SMCR_TS_Pos) /*!< 0x00000010 */\r\n#define TIM_SMCR_TS_1   (0x2U << TIM_SMCR_TS_Pos) /*!< 0x00000020 */\r\n#define TIM_SMCR_TS_2   (0x4U << TIM_SMCR_TS_Pos) /*!< 0x00000040 */\r\n\r\n#define TIM_SMCR_MSM_Pos (7U)\r\n#define TIM_SMCR_MSM_Msk (0x1U << TIM_SMCR_MSM_Pos) /*!< 0x00000080 */\r\n#define TIM_SMCR_MSM     TIM_SMCR_MSM_Msk           /*!<Master/slave mode */\r\n\r\n#define TIM_SMCR_ETF_Pos (8U)\r\n#define TIM_SMCR_ETF_Msk (0xFU << TIM_SMCR_ETF_Pos) /*!< 0x00000F00 */\r\n#define TIM_SMCR_ETF     TIM_SMCR_ETF_Msk           /*!<ETF[3:0] bits (External trigger filter) */\r\n#define TIM_SMCR_ETF_0   (0x1U << TIM_SMCR_ETF_Pos) /*!< 0x00000100 */\r\n#define TIM_SMCR_ETF_1   (0x2U << TIM_SMCR_ETF_Pos) /*!< 0x00000200 */\r\n#define TIM_SMCR_ETF_2   (0x4U << TIM_SMCR_ETF_Pos) /*!< 0x00000400 */\r\n#define TIM_SMCR_ETF_3   (0x8U << TIM_SMCR_ETF_Pos) /*!< 0x00000800 */\r\n\r\n#define TIM_SMCR_ETPS_Pos (12U)\r\n#define TIM_SMCR_ETPS_Msk (0x3U << TIM_SMCR_ETPS_Pos) /*!< 0x00003000 */\r\n#define TIM_SMCR_ETPS     TIM_SMCR_ETPS_Msk           /*!<ETPS[1:0] bits (External trigger prescaler) */\r\n#define TIM_SMCR_ETPS_0   (0x1U << TIM_SMCR_ETPS_Pos) /*!< 0x00001000 */\r\n#define TIM_SMCR_ETPS_1   (0x2U << TIM_SMCR_ETPS_Pos) /*!< 0x00002000 */\r\n\r\n#define TIM_SMCR_ECE_Pos (14U)\r\n#define TIM_SMCR_ECE_Msk (0x1U << TIM_SMCR_ECE_Pos) /*!< 0x00004000 */\r\n#define TIM_SMCR_ECE     TIM_SMCR_ECE_Msk           /*!<External clock enable */\r\n#define TIM_SMCR_ETP_Pos (15U)\r\n#define TIM_SMCR_ETP_Msk (0x1U << TIM_SMCR_ETP_Pos) /*!< 0x00008000 */\r\n#define TIM_SMCR_ETP     TIM_SMCR_ETP_Msk           /*!<External trigger polarity */\r\n\r\n/*******************  Bit definition for TIM_DIER register  ******************/\r\n#define TIM_DIER_UIE_Pos   (0U)\r\n#define TIM_DIER_UIE_Msk   (0x1U << TIM_DIER_UIE_Pos) /*!< 0x00000001 */\r\n#define TIM_DIER_UIE       TIM_DIER_UIE_Msk           /*!<Update interrupt enable */\r\n#define TIM_DIER_CC1IE_Pos (1U)\r\n#define TIM_DIER_CC1IE_Msk (0x1U << TIM_DIER_CC1IE_Pos) /*!< 0x00000002 */\r\n#define TIM_DIER_CC1IE     TIM_DIER_CC1IE_Msk           /*!<Capture/Compare 1 interrupt enable */\r\n#define TIM_DIER_CC2IE_Pos (2U)\r\n#define TIM_DIER_CC2IE_Msk (0x1U << TIM_DIER_CC2IE_Pos) /*!< 0x00000004 */\r\n#define TIM_DIER_CC2IE     TIM_DIER_CC2IE_Msk           /*!<Capture/Compare 2 interrupt enable */\r\n#define TIM_DIER_CC3IE_Pos (3U)\r\n#define TIM_DIER_CC3IE_Msk (0x1U << TIM_DIER_CC3IE_Pos) /*!< 0x00000008 */\r\n#define TIM_DIER_CC3IE     TIM_DIER_CC3IE_Msk           /*!<Capture/Compare 3 interrupt enable */\r\n#define TIM_DIER_CC4IE_Pos (4U)\r\n#define TIM_DIER_CC4IE_Msk (0x1U << TIM_DIER_CC4IE_Pos) /*!< 0x00000010 */\r\n#define TIM_DIER_CC4IE     TIM_DIER_CC4IE_Msk           /*!<Capture/Compare 4 interrupt enable */\r\n#define TIM_DIER_COMIE_Pos (5U)\r\n#define TIM_DIER_COMIE_Msk (0x1U << TIM_DIER_COMIE_Pos) /*!< 0x00000020 */\r\n#define TIM_DIER_COMIE     TIM_DIER_COMIE_Msk           /*!<COM interrupt enable */\r\n#define TIM_DIER_TIE_Pos   (6U)\r\n#define TIM_DIER_TIE_Msk   (0x1U << TIM_DIER_TIE_Pos) /*!< 0x00000040 */\r\n#define TIM_DIER_TIE       TIM_DIER_TIE_Msk           /*!<Trigger interrupt enable */\r\n#define TIM_DIER_BIE_Pos   (7U)\r\n#define TIM_DIER_BIE_Msk   (0x1U << TIM_DIER_BIE_Pos) /*!< 0x00000080 */\r\n#define TIM_DIER_BIE       TIM_DIER_BIE_Msk           /*!<Break interrupt enable */\r\n#define TIM_DIER_UDE_Pos   (8U)\r\n#define TIM_DIER_UDE_Msk   (0x1U << TIM_DIER_UDE_Pos) /*!< 0x00000100 */\r\n#define TIM_DIER_UDE       TIM_DIER_UDE_Msk           /*!<Update DMA request enable */\r\n#define TIM_DIER_CC1DE_Pos (9U)\r\n#define TIM_DIER_CC1DE_Msk (0x1U << TIM_DIER_CC1DE_Pos) /*!< 0x00000200 */\r\n#define TIM_DIER_CC1DE     TIM_DIER_CC1DE_Msk           /*!<Capture/Compare 1 DMA request enable */\r\n#define TIM_DIER_CC2DE_Pos (10U)\r\n#define TIM_DIER_CC2DE_Msk (0x1U << TIM_DIER_CC2DE_Pos) /*!< 0x00000400 */\r\n#define TIM_DIER_CC2DE     TIM_DIER_CC2DE_Msk           /*!<Capture/Compare 2 DMA request enable */\r\n#define TIM_DIER_CC3DE_Pos (11U)\r\n#define TIM_DIER_CC3DE_Msk (0x1U << TIM_DIER_CC3DE_Pos) /*!< 0x00000800 */\r\n#define TIM_DIER_CC3DE     TIM_DIER_CC3DE_Msk           /*!<Capture/Compare 3 DMA request enable */\r\n#define TIM_DIER_CC4DE_Pos (12U)\r\n#define TIM_DIER_CC4DE_Msk (0x1U << TIM_DIER_CC4DE_Pos) /*!< 0x00001000 */\r\n#define TIM_DIER_CC4DE     TIM_DIER_CC4DE_Msk           /*!<Capture/Compare 4 DMA request enable */\r\n#define TIM_DIER_COMDE_Pos (13U)\r\n#define TIM_DIER_COMDE_Msk (0x1U << TIM_DIER_COMDE_Pos) /*!< 0x00002000 */\r\n#define TIM_DIER_COMDE     TIM_DIER_COMDE_Msk           /*!<COM DMA request enable */\r\n#define TIM_DIER_TDE_Pos   (14U)\r\n#define TIM_DIER_TDE_Msk   (0x1U << TIM_DIER_TDE_Pos) /*!< 0x00004000 */\r\n#define TIM_DIER_TDE       TIM_DIER_TDE_Msk           /*!<Trigger DMA request enable */\r\n\r\n/********************  Bit definition for TIM_SR register  *******************/\r\n#define TIM_SR_UIF_Pos   (0U)\r\n#define TIM_SR_UIF_Msk   (0x1U << TIM_SR_UIF_Pos) /*!< 0x00000001 */\r\n#define TIM_SR_UIF       TIM_SR_UIF_Msk           /*!<Update interrupt Flag */\r\n#define TIM_SR_CC1IF_Pos (1U)\r\n#define TIM_SR_CC1IF_Msk (0x1U << TIM_SR_CC1IF_Pos) /*!< 0x00000002 */\r\n#define TIM_SR_CC1IF     TIM_SR_CC1IF_Msk           /*!<Capture/Compare 1 interrupt Flag */\r\n#define TIM_SR_CC2IF_Pos (2U)\r\n#define TIM_SR_CC2IF_Msk (0x1U << TIM_SR_CC2IF_Pos) /*!< 0x00000004 */\r\n#define TIM_SR_CC2IF     TIM_SR_CC2IF_Msk           /*!<Capture/Compare 2 interrupt Flag */\r\n#define TIM_SR_CC3IF_Pos (3U)\r\n#define TIM_SR_CC3IF_Msk (0x1U << TIM_SR_CC3IF_Pos) /*!< 0x00000008 */\r\n#define TIM_SR_CC3IF     TIM_SR_CC3IF_Msk           /*!<Capture/Compare 3 interrupt Flag */\r\n#define TIM_SR_CC4IF_Pos (4U)\r\n#define TIM_SR_CC4IF_Msk (0x1U << TIM_SR_CC4IF_Pos) /*!< 0x00000010 */\r\n#define TIM_SR_CC4IF     TIM_SR_CC4IF_Msk           /*!<Capture/Compare 4 interrupt Flag */\r\n#define TIM_SR_COMIF_Pos (5U)\r\n#define TIM_SR_COMIF_Msk (0x1U << TIM_SR_COMIF_Pos) /*!< 0x00000020 */\r\n#define TIM_SR_COMIF     TIM_SR_COMIF_Msk           /*!<COM interrupt Flag */\r\n#define TIM_SR_TIF_Pos   (6U)\r\n#define TIM_SR_TIF_Msk   (0x1U << TIM_SR_TIF_Pos) /*!< 0x00000040 */\r\n#define TIM_SR_TIF       TIM_SR_TIF_Msk           /*!<Trigger interrupt Flag */\r\n#define TIM_SR_BIF_Pos   (7U)\r\n#define TIM_SR_BIF_Msk   (0x1U << TIM_SR_BIF_Pos) /*!< 0x00000080 */\r\n#define TIM_SR_BIF       TIM_SR_BIF_Msk           /*!<Break interrupt Flag */\r\n#define TIM_SR_CC1OF_Pos (9U)\r\n#define TIM_SR_CC1OF_Msk (0x1U << TIM_SR_CC1OF_Pos) /*!< 0x00000200 */\r\n#define TIM_SR_CC1OF     TIM_SR_CC1OF_Msk           /*!<Capture/Compare 1 Overcapture Flag */\r\n#define TIM_SR_CC2OF_Pos (10U)\r\n#define TIM_SR_CC2OF_Msk (0x1U << TIM_SR_CC2OF_Pos) /*!< 0x00000400 */\r\n#define TIM_SR_CC2OF     TIM_SR_CC2OF_Msk           /*!<Capture/Compare 2 Overcapture Flag */\r\n#define TIM_SR_CC3OF_Pos (11U)\r\n#define TIM_SR_CC3OF_Msk (0x1U << TIM_SR_CC3OF_Pos) /*!< 0x00000800 */\r\n#define TIM_SR_CC3OF     TIM_SR_CC3OF_Msk           /*!<Capture/Compare 3 Overcapture Flag */\r\n#define TIM_SR_CC4OF_Pos (12U)\r\n#define TIM_SR_CC4OF_Msk (0x1U << TIM_SR_CC4OF_Pos) /*!< 0x00001000 */\r\n#define TIM_SR_CC4OF     TIM_SR_CC4OF_Msk           /*!<Capture/Compare 4 Overcapture Flag */\r\n\r\n/*******************  Bit definition for TIM_EGR register  *******************/\r\n#define TIM_EGR_UG_Pos   (0U)\r\n#define TIM_EGR_UG_Msk   (0x1U << TIM_EGR_UG_Pos) /*!< 0x00000001 */\r\n#define TIM_EGR_UG       TIM_EGR_UG_Msk           /*!<Update Generation */\r\n#define TIM_EGR_CC1G_Pos (1U)\r\n#define TIM_EGR_CC1G_Msk (0x1U << TIM_EGR_CC1G_Pos) /*!< 0x00000002 */\r\n#define TIM_EGR_CC1G     TIM_EGR_CC1G_Msk           /*!<Capture/Compare 1 Generation */\r\n#define TIM_EGR_CC2G_Pos (2U)\r\n#define TIM_EGR_CC2G_Msk (0x1U << TIM_EGR_CC2G_Pos) /*!< 0x00000004 */\r\n#define TIM_EGR_CC2G     TIM_EGR_CC2G_Msk           /*!<Capture/Compare 2 Generation */\r\n#define TIM_EGR_CC3G_Pos (3U)\r\n#define TIM_EGR_CC3G_Msk (0x1U << TIM_EGR_CC3G_Pos) /*!< 0x00000008 */\r\n#define TIM_EGR_CC3G     TIM_EGR_CC3G_Msk           /*!<Capture/Compare 3 Generation */\r\n#define TIM_EGR_CC4G_Pos (4U)\r\n#define TIM_EGR_CC4G_Msk (0x1U << TIM_EGR_CC4G_Pos) /*!< 0x00000010 */\r\n#define TIM_EGR_CC4G     TIM_EGR_CC4G_Msk           /*!<Capture/Compare 4 Generation */\r\n#define TIM_EGR_COMG_Pos (5U)\r\n#define TIM_EGR_COMG_Msk (0x1U << TIM_EGR_COMG_Pos) /*!< 0x00000020 */\r\n#define TIM_EGR_COMG     TIM_EGR_COMG_Msk           /*!<Capture/Compare Control Update Generation */\r\n#define TIM_EGR_TG_Pos   (6U)\r\n#define TIM_EGR_TG_Msk   (0x1U << TIM_EGR_TG_Pos) /*!< 0x00000040 */\r\n#define TIM_EGR_TG       TIM_EGR_TG_Msk           /*!<Trigger Generation */\r\n#define TIM_EGR_BG_Pos   (7U)\r\n#define TIM_EGR_BG_Msk   (0x1U << TIM_EGR_BG_Pos) /*!< 0x00000080 */\r\n#define TIM_EGR_BG       TIM_EGR_BG_Msk           /*!<Break Generation */\r\n\r\n/******************  Bit definition for TIM_CCMR1 register  ******************/\r\n#define TIM_CCMR1_CC1S_Pos (0U)\r\n#define TIM_CCMR1_CC1S_Msk (0x3U << TIM_CCMR1_CC1S_Pos) /*!< 0x00000003 */\r\n#define TIM_CCMR1_CC1S     TIM_CCMR1_CC1S_Msk           /*!<CC1S[1:0] bits (Capture/Compare 1 Selection) */\r\n#define TIM_CCMR1_CC1S_0   (0x1U << TIM_CCMR1_CC1S_Pos) /*!< 0x00000001 */\r\n#define TIM_CCMR1_CC1S_1   (0x2U << TIM_CCMR1_CC1S_Pos) /*!< 0x00000002 */\r\n\r\n#define TIM_CCMR1_OC1FE_Pos (2U)\r\n#define TIM_CCMR1_OC1FE_Msk (0x1U << TIM_CCMR1_OC1FE_Pos) /*!< 0x00000004 */\r\n#define TIM_CCMR1_OC1FE     TIM_CCMR1_OC1FE_Msk           /*!<Output Compare 1 Fast enable */\r\n#define TIM_CCMR1_OC1PE_Pos (3U)\r\n#define TIM_CCMR1_OC1PE_Msk (0x1U << TIM_CCMR1_OC1PE_Pos) /*!< 0x00000008 */\r\n#define TIM_CCMR1_OC1PE     TIM_CCMR1_OC1PE_Msk           /*!<Output Compare 1 Preload enable */\r\n\r\n#define TIM_CCMR1_OC1M_Pos (4U)\r\n#define TIM_CCMR1_OC1M_Msk (0x7U << TIM_CCMR1_OC1M_Pos) /*!< 0x00000070 */\r\n#define TIM_CCMR1_OC1M     TIM_CCMR1_OC1M_Msk           /*!<OC1M[2:0] bits (Output Compare 1 Mode) */\r\n#define TIM_CCMR1_OC1M_0   (0x1U << TIM_CCMR1_OC1M_Pos) /*!< 0x00000010 */\r\n#define TIM_CCMR1_OC1M_1   (0x2U << TIM_CCMR1_OC1M_Pos) /*!< 0x00000020 */\r\n#define TIM_CCMR1_OC1M_2   (0x4U << TIM_CCMR1_OC1M_Pos) /*!< 0x00000040 */\r\n\r\n#define TIM_CCMR1_OC1CE_Pos (7U)\r\n#define TIM_CCMR1_OC1CE_Msk (0x1U << TIM_CCMR1_OC1CE_Pos) /*!< 0x00000080 */\r\n#define TIM_CCMR1_OC1CE     TIM_CCMR1_OC1CE_Msk           /*!<Output Compare 1Clear Enable */\r\n\r\n#define TIM_CCMR1_CC2S_Pos (8U)\r\n#define TIM_CCMR1_CC2S_Msk (0x3U << TIM_CCMR1_CC2S_Pos) /*!< 0x00000300 */\r\n#define TIM_CCMR1_CC2S     TIM_CCMR1_CC2S_Msk           /*!<CC2S[1:0] bits (Capture/Compare 2 Selection) */\r\n#define TIM_CCMR1_CC2S_0   (0x1U << TIM_CCMR1_CC2S_Pos) /*!< 0x00000100 */\r\n#define TIM_CCMR1_CC2S_1   (0x2U << TIM_CCMR1_CC2S_Pos) /*!< 0x00000200 */\r\n\r\n#define TIM_CCMR1_OC2FE_Pos (10U)\r\n#define TIM_CCMR1_OC2FE_Msk (0x1U << TIM_CCMR1_OC2FE_Pos) /*!< 0x00000400 */\r\n#define TIM_CCMR1_OC2FE     TIM_CCMR1_OC2FE_Msk           /*!<Output Compare 2 Fast enable */\r\n#define TIM_CCMR1_OC2PE_Pos (11U)\r\n#define TIM_CCMR1_OC2PE_Msk (0x1U << TIM_CCMR1_OC2PE_Pos) /*!< 0x00000800 */\r\n#define TIM_CCMR1_OC2PE     TIM_CCMR1_OC2PE_Msk           /*!<Output Compare 2 Preload enable */\r\n\r\n#define TIM_CCMR1_OC2M_Pos (12U)\r\n#define TIM_CCMR1_OC2M_Msk (0x7U << TIM_CCMR1_OC2M_Pos) /*!< 0x00007000 */\r\n#define TIM_CCMR1_OC2M     TIM_CCMR1_OC2M_Msk           /*!<OC2M[2:0] bits (Output Compare 2 Mode) */\r\n#define TIM_CCMR1_OC2M_0   (0x1U << TIM_CCMR1_OC2M_Pos) /*!< 0x00001000 */\r\n#define TIM_CCMR1_OC2M_1   (0x2U << TIM_CCMR1_OC2M_Pos) /*!< 0x00002000 */\r\n#define TIM_CCMR1_OC2M_2   (0x4U << TIM_CCMR1_OC2M_Pos) /*!< 0x00004000 */\r\n\r\n#define TIM_CCMR1_OC2CE_Pos (15U)\r\n#define TIM_CCMR1_OC2CE_Msk (0x1U << TIM_CCMR1_OC2CE_Pos) /*!< 0x00008000 */\r\n#define TIM_CCMR1_OC2CE     TIM_CCMR1_OC2CE_Msk           /*!<Output Compare 2 Clear Enable */\r\n\r\n/*---------------------------------------------------------------------------*/\r\n\r\n#define TIM_CCMR1_IC1PSC_Pos (2U)\r\n#define TIM_CCMR1_IC1PSC_Msk (0x3U << TIM_CCMR1_IC1PSC_Pos) /*!< 0x0000000C */\r\n#define TIM_CCMR1_IC1PSC     TIM_CCMR1_IC1PSC_Msk           /*!<IC1PSC[1:0] bits (Input Capture 1 Prescaler) */\r\n#define TIM_CCMR1_IC1PSC_0   (0x1U << TIM_CCMR1_IC1PSC_Pos) /*!< 0x00000004 */\r\n#define TIM_CCMR1_IC1PSC_1   (0x2U << TIM_CCMR1_IC1PSC_Pos) /*!< 0x00000008 */\r\n\r\n#define TIM_CCMR1_IC1F_Pos (4U)\r\n#define TIM_CCMR1_IC1F_Msk (0xFU << TIM_CCMR1_IC1F_Pos) /*!< 0x000000F0 */\r\n#define TIM_CCMR1_IC1F     TIM_CCMR1_IC1F_Msk           /*!<IC1F[3:0] bits (Input Capture 1 Filter) */\r\n#define TIM_CCMR1_IC1F_0   (0x1U << TIM_CCMR1_IC1F_Pos) /*!< 0x00000010 */\r\n#define TIM_CCMR1_IC1F_1   (0x2U << TIM_CCMR1_IC1F_Pos) /*!< 0x00000020 */\r\n#define TIM_CCMR1_IC1F_2   (0x4U << TIM_CCMR1_IC1F_Pos) /*!< 0x00000040 */\r\n#define TIM_CCMR1_IC1F_3   (0x8U << TIM_CCMR1_IC1F_Pos) /*!< 0x00000080 */\r\n\r\n#define TIM_CCMR1_IC2PSC_Pos (10U)\r\n#define TIM_CCMR1_IC2PSC_Msk (0x3U << TIM_CCMR1_IC2PSC_Pos) /*!< 0x00000C00 */\r\n#define TIM_CCMR1_IC2PSC     TIM_CCMR1_IC2PSC_Msk           /*!<IC2PSC[1:0] bits (Input Capture 2 Prescaler) */\r\n#define TIM_CCMR1_IC2PSC_0   (0x1U << TIM_CCMR1_IC2PSC_Pos) /*!< 0x00000400 */\r\n#define TIM_CCMR1_IC2PSC_1   (0x2U << TIM_CCMR1_IC2PSC_Pos) /*!< 0x00000800 */\r\n\r\n#define TIM_CCMR1_IC2F_Pos (12U)\r\n#define TIM_CCMR1_IC2F_Msk (0xFU << TIM_CCMR1_IC2F_Pos) /*!< 0x0000F000 */\r\n#define TIM_CCMR1_IC2F     TIM_CCMR1_IC2F_Msk           /*!<IC2F[3:0] bits (Input Capture 2 Filter) */\r\n#define TIM_CCMR1_IC2F_0   (0x1U << TIM_CCMR1_IC2F_Pos) /*!< 0x00001000 */\r\n#define TIM_CCMR1_IC2F_1   (0x2U << TIM_CCMR1_IC2F_Pos) /*!< 0x00002000 */\r\n#define TIM_CCMR1_IC2F_2   (0x4U << TIM_CCMR1_IC2F_Pos) /*!< 0x00004000 */\r\n#define TIM_CCMR1_IC2F_3   (0x8U << TIM_CCMR1_IC2F_Pos) /*!< 0x00008000 */\r\n\r\n/******************  Bit definition for TIM_CCMR2 register  ******************/\r\n#define TIM_CCMR2_CC3S_Pos (0U)\r\n#define TIM_CCMR2_CC3S_Msk (0x3U << TIM_CCMR2_CC3S_Pos) /*!< 0x00000003 */\r\n#define TIM_CCMR2_CC3S     TIM_CCMR2_CC3S_Msk           /*!<CC3S[1:0] bits (Capture/Compare 3 Selection) */\r\n#define TIM_CCMR2_CC3S_0   (0x1U << TIM_CCMR2_CC3S_Pos) /*!< 0x00000001 */\r\n#define TIM_CCMR2_CC3S_1   (0x2U << TIM_CCMR2_CC3S_Pos) /*!< 0x00000002 */\r\n\r\n#define TIM_CCMR2_OC3FE_Pos (2U)\r\n#define TIM_CCMR2_OC3FE_Msk (0x1U << TIM_CCMR2_OC3FE_Pos) /*!< 0x00000004 */\r\n#define TIM_CCMR2_OC3FE     TIM_CCMR2_OC3FE_Msk           /*!<Output Compare 3 Fast enable */\r\n#define TIM_CCMR2_OC3PE_Pos (3U)\r\n#define TIM_CCMR2_OC3PE_Msk (0x1U << TIM_CCMR2_OC3PE_Pos) /*!< 0x00000008 */\r\n#define TIM_CCMR2_OC3PE     TIM_CCMR2_OC3PE_Msk           /*!<Output Compare 3 Preload enable */\r\n\r\n#define TIM_CCMR2_OC3M_Pos (4U)\r\n#define TIM_CCMR2_OC3M_Msk (0x7U << TIM_CCMR2_OC3M_Pos) /*!< 0x00000070 */\r\n#define TIM_CCMR2_OC3M     TIM_CCMR2_OC3M_Msk           /*!<OC3M[2:0] bits (Output Compare 3 Mode) */\r\n#define TIM_CCMR2_OC3M_0   (0x1U << TIM_CCMR2_OC3M_Pos) /*!< 0x00000010 */\r\n#define TIM_CCMR2_OC3M_1   (0x2U << TIM_CCMR2_OC3M_Pos) /*!< 0x00000020 */\r\n#define TIM_CCMR2_OC3M_2   (0x4U << TIM_CCMR2_OC3M_Pos) /*!< 0x00000040 */\r\n\r\n#define TIM_CCMR2_OC3CE_Pos (7U)\r\n#define TIM_CCMR2_OC3CE_Msk (0x1U << TIM_CCMR2_OC3CE_Pos) /*!< 0x00000080 */\r\n#define TIM_CCMR2_OC3CE     TIM_CCMR2_OC3CE_Msk           /*!<Output Compare 3 Clear Enable */\r\n\r\n#define TIM_CCMR2_CC4S_Pos (8U)\r\n#define TIM_CCMR2_CC4S_Msk (0x3U << TIM_CCMR2_CC4S_Pos) /*!< 0x00000300 */\r\n#define TIM_CCMR2_CC4S     TIM_CCMR2_CC4S_Msk           /*!<CC4S[1:0] bits (Capture/Compare 4 Selection) */\r\n#define TIM_CCMR2_CC4S_0   (0x1U << TIM_CCMR2_CC4S_Pos) /*!< 0x00000100 */\r\n#define TIM_CCMR2_CC4S_1   (0x2U << TIM_CCMR2_CC4S_Pos) /*!< 0x00000200 */\r\n\r\n#define TIM_CCMR2_OC4FE_Pos (10U)\r\n#define TIM_CCMR2_OC4FE_Msk (0x1U << TIM_CCMR2_OC4FE_Pos) /*!< 0x00000400 */\r\n#define TIM_CCMR2_OC4FE     TIM_CCMR2_OC4FE_Msk           /*!<Output Compare 4 Fast enable */\r\n#define TIM_CCMR2_OC4PE_Pos (11U)\r\n#define TIM_CCMR2_OC4PE_Msk (0x1U << TIM_CCMR2_OC4PE_Pos) /*!< 0x00000800 */\r\n#define TIM_CCMR2_OC4PE     TIM_CCMR2_OC4PE_Msk           /*!<Output Compare 4 Preload enable */\r\n\r\n#define TIM_CCMR2_OC4M_Pos (12U)\r\n#define TIM_CCMR2_OC4M_Msk (0x7U << TIM_CCMR2_OC4M_Pos) /*!< 0x00007000 */\r\n#define TIM_CCMR2_OC4M     TIM_CCMR2_OC4M_Msk           /*!<OC4M[2:0] bits (Output Compare 4 Mode) */\r\n#define TIM_CCMR2_OC4M_0   (0x1U << TIM_CCMR2_OC4M_Pos) /*!< 0x00001000 */\r\n#define TIM_CCMR2_OC4M_1   (0x2U << TIM_CCMR2_OC4M_Pos) /*!< 0x00002000 */\r\n#define TIM_CCMR2_OC4M_2   (0x4U << TIM_CCMR2_OC4M_Pos) /*!< 0x00004000 */\r\n\r\n#define TIM_CCMR2_OC4CE_Pos (15U)\r\n#define TIM_CCMR2_OC4CE_Msk (0x1U << TIM_CCMR2_OC4CE_Pos) /*!< 0x00008000 */\r\n#define TIM_CCMR2_OC4CE     TIM_CCMR2_OC4CE_Msk           /*!<Output Compare 4 Clear Enable */\r\n\r\n/*---------------------------------------------------------------------------*/\r\n\r\n#define TIM_CCMR2_IC3PSC_Pos (2U)\r\n#define TIM_CCMR2_IC3PSC_Msk (0x3U << TIM_CCMR2_IC3PSC_Pos) /*!< 0x0000000C */\r\n#define TIM_CCMR2_IC3PSC     TIM_CCMR2_IC3PSC_Msk           /*!<IC3PSC[1:0] bits (Input Capture 3 Prescaler) */\r\n#define TIM_CCMR2_IC3PSC_0   (0x1U << TIM_CCMR2_IC3PSC_Pos) /*!< 0x00000004 */\r\n#define TIM_CCMR2_IC3PSC_1   (0x2U << TIM_CCMR2_IC3PSC_Pos) /*!< 0x00000008 */\r\n\r\n#define TIM_CCMR2_IC3F_Pos (4U)\r\n#define TIM_CCMR2_IC3F_Msk (0xFU << TIM_CCMR2_IC3F_Pos) /*!< 0x000000F0 */\r\n#define TIM_CCMR2_IC3F     TIM_CCMR2_IC3F_Msk           /*!<IC3F[3:0] bits (Input Capture 3 Filter) */\r\n#define TIM_CCMR2_IC3F_0   (0x1U << TIM_CCMR2_IC3F_Pos) /*!< 0x00000010 */\r\n#define TIM_CCMR2_IC3F_1   (0x2U << TIM_CCMR2_IC3F_Pos) /*!< 0x00000020 */\r\n#define TIM_CCMR2_IC3F_2   (0x4U << TIM_CCMR2_IC3F_Pos) /*!< 0x00000040 */\r\n#define TIM_CCMR2_IC3F_3   (0x8U << TIM_CCMR2_IC3F_Pos) /*!< 0x00000080 */\r\n\r\n#define TIM_CCMR2_IC4PSC_Pos (10U)\r\n#define TIM_CCMR2_IC4PSC_Msk (0x3U << TIM_CCMR2_IC4PSC_Pos) /*!< 0x00000C00 */\r\n#define TIM_CCMR2_IC4PSC     TIM_CCMR2_IC4PSC_Msk           /*!<IC4PSC[1:0] bits (Input Capture 4 Prescaler) */\r\n#define TIM_CCMR2_IC4PSC_0   (0x1U << TIM_CCMR2_IC4PSC_Pos) /*!< 0x00000400 */\r\n#define TIM_CCMR2_IC4PSC_1   (0x2U << TIM_CCMR2_IC4PSC_Pos) /*!< 0x00000800 */\r\n\r\n#define TIM_CCMR2_IC4F_Pos (12U)\r\n#define TIM_CCMR2_IC4F_Msk (0xFU << TIM_CCMR2_IC4F_Pos) /*!< 0x0000F000 */\r\n#define TIM_CCMR2_IC4F     TIM_CCMR2_IC4F_Msk           /*!<IC4F[3:0] bits (Input Capture 4 Filter) */\r\n#define TIM_CCMR2_IC4F_0   (0x1U << TIM_CCMR2_IC4F_Pos) /*!< 0x00001000 */\r\n#define TIM_CCMR2_IC4F_1   (0x2U << TIM_CCMR2_IC4F_Pos) /*!< 0x00002000 */\r\n#define TIM_CCMR2_IC4F_2   (0x4U << TIM_CCMR2_IC4F_Pos) /*!< 0x00004000 */\r\n#define TIM_CCMR2_IC4F_3   (0x8U << TIM_CCMR2_IC4F_Pos) /*!< 0x00008000 */\r\n\r\n/*******************  Bit definition for TIM_CCER register  ******************/\r\n#define TIM_CCER_CC1E_Pos  (0U)\r\n#define TIM_CCER_CC1E_Msk  (0x1U << TIM_CCER_CC1E_Pos) /*!< 0x00000001 */\r\n#define TIM_CCER_CC1E      TIM_CCER_CC1E_Msk           /*!<Capture/Compare 1 output enable */\r\n#define TIM_CCER_CC1P_Pos  (1U)\r\n#define TIM_CCER_CC1P_Msk  (0x1U << TIM_CCER_CC1P_Pos) /*!< 0x00000002 */\r\n#define TIM_CCER_CC1P      TIM_CCER_CC1P_Msk           /*!<Capture/Compare 1 output Polarity */\r\n#define TIM_CCER_CC1NE_Pos (2U)\r\n#define TIM_CCER_CC1NE_Msk (0x1U << TIM_CCER_CC1NE_Pos) /*!< 0x00000004 */\r\n#define TIM_CCER_CC1NE     TIM_CCER_CC1NE_Msk           /*!<Capture/Compare 1 Complementary output enable */\r\n#define TIM_CCER_CC1NP_Pos (3U)\r\n#define TIM_CCER_CC1NP_Msk (0x1U << TIM_CCER_CC1NP_Pos) /*!< 0x00000008 */\r\n#define TIM_CCER_CC1NP     TIM_CCER_CC1NP_Msk           /*!<Capture/Compare 1 Complementary output Polarity */\r\n#define TIM_CCER_CC2E_Pos  (4U)\r\n#define TIM_CCER_CC2E_Msk  (0x1U << TIM_CCER_CC2E_Pos) /*!< 0x00000010 */\r\n#define TIM_CCER_CC2E      TIM_CCER_CC2E_Msk           /*!<Capture/Compare 2 output enable */\r\n#define TIM_CCER_CC2P_Pos  (5U)\r\n#define TIM_CCER_CC2P_Msk  (0x1U << TIM_CCER_CC2P_Pos) /*!< 0x00000020 */\r\n#define TIM_CCER_CC2P      TIM_CCER_CC2P_Msk           /*!<Capture/Compare 2 output Polarity */\r\n#define TIM_CCER_CC2NE_Pos (6U)\r\n#define TIM_CCER_CC2NE_Msk (0x1U << TIM_CCER_CC2NE_Pos) /*!< 0x00000040 */\r\n#define TIM_CCER_CC2NE     TIM_CCER_CC2NE_Msk           /*!<Capture/Compare 2 Complementary output enable */\r\n#define TIM_CCER_CC2NP_Pos (7U)\r\n#define TIM_CCER_CC2NP_Msk (0x1U << TIM_CCER_CC2NP_Pos) /*!< 0x00000080 */\r\n#define TIM_CCER_CC2NP     TIM_CCER_CC2NP_Msk           /*!<Capture/Compare 2 Complementary output Polarity */\r\n#define TIM_CCER_CC3E_Pos  (8U)\r\n#define TIM_CCER_CC3E_Msk  (0x1U << TIM_CCER_CC3E_Pos) /*!< 0x00000100 */\r\n#define TIM_CCER_CC3E      TIM_CCER_CC3E_Msk           /*!<Capture/Compare 3 output enable */\r\n#define TIM_CCER_CC3P_Pos  (9U)\r\n#define TIM_CCER_CC3P_Msk  (0x1U << TIM_CCER_CC3P_Pos) /*!< 0x00000200 */\r\n#define TIM_CCER_CC3P      TIM_CCER_CC3P_Msk           /*!<Capture/Compare 3 output Polarity */\r\n#define TIM_CCER_CC3NE_Pos (10U)\r\n#define TIM_CCER_CC3NE_Msk (0x1U << TIM_CCER_CC3NE_Pos) /*!< 0x00000400 */\r\n#define TIM_CCER_CC3NE     TIM_CCER_CC3NE_Msk           /*!<Capture/Compare 3 Complementary output enable */\r\n#define TIM_CCER_CC3NP_Pos (11U)\r\n#define TIM_CCER_CC3NP_Msk (0x1U << TIM_CCER_CC3NP_Pos) /*!< 0x00000800 */\r\n#define TIM_CCER_CC3NP     TIM_CCER_CC3NP_Msk           /*!<Capture/Compare 3 Complementary output Polarity */\r\n#define TIM_CCER_CC4E_Pos  (12U)\r\n#define TIM_CCER_CC4E_Msk  (0x1U << TIM_CCER_CC4E_Pos) /*!< 0x00001000 */\r\n#define TIM_CCER_CC4E      TIM_CCER_CC4E_Msk           /*!<Capture/Compare 4 output enable */\r\n#define TIM_CCER_CC4P_Pos  (13U)\r\n#define TIM_CCER_CC4P_Msk  (0x1U << TIM_CCER_CC4P_Pos) /*!< 0x00002000 */\r\n#define TIM_CCER_CC4P      TIM_CCER_CC4P_Msk           /*!<Capture/Compare 4 output Polarity */\r\n\r\n/*******************  Bit definition for TIM_CNT register  *******************/\r\n#define TIM_CNT_CNT_Pos (0U)\r\n#define TIM_CNT_CNT_Msk (0xFFFFFFFFU << TIM_CNT_CNT_Pos) /*!< 0xFFFFFFFF */\r\n#define TIM_CNT_CNT     TIM_CNT_CNT_Msk                  /*!<Counter Value */\r\n\r\n/*******************  Bit definition for TIM_PSC register  *******************/\r\n#define TIM_PSC_PSC_Pos (0U)\r\n#define TIM_PSC_PSC_Msk (0xFFFFU << TIM_PSC_PSC_Pos) /*!< 0x0000FFFF */\r\n#define TIM_PSC_PSC     TIM_PSC_PSC_Msk              /*!<Prescaler Value */\r\n\r\n/*******************  Bit definition for TIM_ARR register  *******************/\r\n#define TIM_ARR_ARR_Pos (0U)\r\n#define TIM_ARR_ARR_Msk (0xFFFFFFFFU << TIM_ARR_ARR_Pos) /*!< 0xFFFFFFFF */\r\n#define TIM_ARR_ARR     TIM_ARR_ARR_Msk                  /*!<actual auto-reload Value */\r\n\r\n/*******************  Bit definition for TIM_RCR register  *******************/\r\n#define TIM_RCR_REP_Pos (0U)\r\n#define TIM_RCR_REP_Msk (0xFFU << TIM_RCR_REP_Pos) /*!< 0x000000FF */\r\n#define TIM_RCR_REP     TIM_RCR_REP_Msk            /*!<Repetition Counter Value */\r\n\r\n/*******************  Bit definition for TIM_CCR1 register  ******************/\r\n#define TIM_CCR1_CCR1_Pos (0U)\r\n#define TIM_CCR1_CCR1_Msk (0xFFFFU << TIM_CCR1_CCR1_Pos) /*!< 0x0000FFFF */\r\n#define TIM_CCR1_CCR1     TIM_CCR1_CCR1_Msk              /*!<Capture/Compare 1 Value */\r\n\r\n/*******************  Bit definition for TIM_CCR2 register  ******************/\r\n#define TIM_CCR2_CCR2_Pos (0U)\r\n#define TIM_CCR2_CCR2_Msk (0xFFFFU << TIM_CCR2_CCR2_Pos) /*!< 0x0000FFFF */\r\n#define TIM_CCR2_CCR2     TIM_CCR2_CCR2_Msk              /*!<Capture/Compare 2 Value */\r\n\r\n/*******************  Bit definition for TIM_CCR3 register  ******************/\r\n#define TIM_CCR3_CCR3_Pos (0U)\r\n#define TIM_CCR3_CCR3_Msk (0xFFFFU << TIM_CCR3_CCR3_Pos) /*!< 0x0000FFFF */\r\n#define TIM_CCR3_CCR3     TIM_CCR3_CCR3_Msk              /*!<Capture/Compare 3 Value */\r\n\r\n/*******************  Bit definition for TIM_CCR4 register  ******************/\r\n#define TIM_CCR4_CCR4_Pos (0U)\r\n#define TIM_CCR4_CCR4_Msk (0xFFFFU << TIM_CCR4_CCR4_Pos) /*!< 0x0000FFFF */\r\n#define TIM_CCR4_CCR4     TIM_CCR4_CCR4_Msk              /*!<Capture/Compare 4 Value */\r\n\r\n/*******************  Bit definition for TIM_BDTR register  ******************/\r\n#define TIM_BDTR_DTG_Pos (0U)\r\n#define TIM_BDTR_DTG_Msk (0xFFU << TIM_BDTR_DTG_Pos) /*!< 0x000000FF */\r\n#define TIM_BDTR_DTG     TIM_BDTR_DTG_Msk            /*!<DTG[0:7] bits (Dead-Time Generator set-up) */\r\n#define TIM_BDTR_DTG_0   (0x01U << TIM_BDTR_DTG_Pos) /*!< 0x00000001 */\r\n#define TIM_BDTR_DTG_1   (0x02U << TIM_BDTR_DTG_Pos) /*!< 0x00000002 */\r\n#define TIM_BDTR_DTG_2   (0x04U << TIM_BDTR_DTG_Pos) /*!< 0x00000004 */\r\n#define TIM_BDTR_DTG_3   (0x08U << TIM_BDTR_DTG_Pos) /*!< 0x00000008 */\r\n#define TIM_BDTR_DTG_4   (0x10U << TIM_BDTR_DTG_Pos) /*!< 0x00000010 */\r\n#define TIM_BDTR_DTG_5   (0x20U << TIM_BDTR_DTG_Pos) /*!< 0x00000020 */\r\n#define TIM_BDTR_DTG_6   (0x40U << TIM_BDTR_DTG_Pos) /*!< 0x00000040 */\r\n#define TIM_BDTR_DTG_7   (0x80U << TIM_BDTR_DTG_Pos) /*!< 0x00000080 */\r\n\r\n#define TIM_BDTR_LOCK_Pos (8U)\r\n#define TIM_BDTR_LOCK_Msk (0x3U << TIM_BDTR_LOCK_Pos) /*!< 0x00000300 */\r\n#define TIM_BDTR_LOCK     TIM_BDTR_LOCK_Msk           /*!<LOCK[1:0] bits (Lock Configuration) */\r\n#define TIM_BDTR_LOCK_0   (0x1U << TIM_BDTR_LOCK_Pos) /*!< 0x00000100 */\r\n#define TIM_BDTR_LOCK_1   (0x2U << TIM_BDTR_LOCK_Pos) /*!< 0x00000200 */\r\n\r\n#define TIM_BDTR_OSSI_Pos (10U)\r\n#define TIM_BDTR_OSSI_Msk (0x1U << TIM_BDTR_OSSI_Pos) /*!< 0x00000400 */\r\n#define TIM_BDTR_OSSI     TIM_BDTR_OSSI_Msk           /*!<Off-State Selection for Idle mode */\r\n#define TIM_BDTR_OSSR_Pos (11U)\r\n#define TIM_BDTR_OSSR_Msk (0x1U << TIM_BDTR_OSSR_Pos) /*!< 0x00000800 */\r\n#define TIM_BDTR_OSSR     TIM_BDTR_OSSR_Msk           /*!<Off-State Selection for Run mode */\r\n#define TIM_BDTR_BKE_Pos  (12U)\r\n#define TIM_BDTR_BKE_Msk  (0x1U << TIM_BDTR_BKE_Pos) /*!< 0x00001000 */\r\n#define TIM_BDTR_BKE      TIM_BDTR_BKE_Msk           /*!<Break enable */\r\n#define TIM_BDTR_BKP_Pos  (13U)\r\n#define TIM_BDTR_BKP_Msk  (0x1U << TIM_BDTR_BKP_Pos) /*!< 0x00002000 */\r\n#define TIM_BDTR_BKP      TIM_BDTR_BKP_Msk           /*!<Break Polarity */\r\n#define TIM_BDTR_AOE_Pos  (14U)\r\n#define TIM_BDTR_AOE_Msk  (0x1U << TIM_BDTR_AOE_Pos) /*!< 0x00004000 */\r\n#define TIM_BDTR_AOE      TIM_BDTR_AOE_Msk           /*!<Automatic Output enable */\r\n#define TIM_BDTR_MOE_Pos  (15U)\r\n#define TIM_BDTR_MOE_Msk  (0x1U << TIM_BDTR_MOE_Pos) /*!< 0x00008000 */\r\n#define TIM_BDTR_MOE      TIM_BDTR_MOE_Msk           /*!<Main Output enable */\r\n\r\n/*******************  Bit definition for TIM_DCR register  *******************/\r\n#define TIM_DCR_DBA_Pos (0U)\r\n#define TIM_DCR_DBA_Msk (0x1FU << TIM_DCR_DBA_Pos) /*!< 0x0000001F */\r\n#define TIM_DCR_DBA     TIM_DCR_DBA_Msk            /*!<DBA[4:0] bits (DMA Base Address) */\r\n#define TIM_DCR_DBA_0   (0x01U << TIM_DCR_DBA_Pos) /*!< 0x00000001 */\r\n#define TIM_DCR_DBA_1   (0x02U << TIM_DCR_DBA_Pos) /*!< 0x00000002 */\r\n#define TIM_DCR_DBA_2   (0x04U << TIM_DCR_DBA_Pos) /*!< 0x00000004 */\r\n#define TIM_DCR_DBA_3   (0x08U << TIM_DCR_DBA_Pos) /*!< 0x00000008 */\r\n#define TIM_DCR_DBA_4   (0x10U << TIM_DCR_DBA_Pos) /*!< 0x00000010 */\r\n\r\n#define TIM_DCR_DBL_Pos (8U)\r\n#define TIM_DCR_DBL_Msk (0x1FU << TIM_DCR_DBL_Pos) /*!< 0x00001F00 */\r\n#define TIM_DCR_DBL     TIM_DCR_DBL_Msk            /*!<DBL[4:0] bits (DMA Burst Length) */\r\n#define TIM_DCR_DBL_0   (0x01U << TIM_DCR_DBL_Pos) /*!< 0x00000100 */\r\n#define TIM_DCR_DBL_1   (0x02U << TIM_DCR_DBL_Pos) /*!< 0x00000200 */\r\n#define TIM_DCR_DBL_2   (0x04U << TIM_DCR_DBL_Pos) /*!< 0x00000400 */\r\n#define TIM_DCR_DBL_3   (0x08U << TIM_DCR_DBL_Pos) /*!< 0x00000800 */\r\n#define TIM_DCR_DBL_4   (0x10U << TIM_DCR_DBL_Pos) /*!< 0x00001000 */\r\n\r\n/*******************  Bit definition for TIM_DMAR register  ******************/\r\n#define TIM_DMAR_DMAB_Pos (0U)\r\n#define TIM_DMAR_DMAB_Msk (0xFFFFU << TIM_DMAR_DMAB_Pos) /*!< 0x0000FFFF */\r\n#define TIM_DMAR_DMAB     TIM_DMAR_DMAB_Msk              /*!<DMA register for burst accesses */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                             Real-Time Clock                                */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for RTC_CRH register  ********************/\r\n#define RTC_CRH_SECIE_Pos (0U)\r\n#define RTC_CRH_SECIE_Msk (0x1U << RTC_CRH_SECIE_Pos) /*!< 0x00000001 */\r\n#define RTC_CRH_SECIE     RTC_CRH_SECIE_Msk           /*!< Second Interrupt Enable */\r\n#define RTC_CRH_ALRIE_Pos (1U)\r\n#define RTC_CRH_ALRIE_Msk (0x1U << RTC_CRH_ALRIE_Pos) /*!< 0x00000002 */\r\n#define RTC_CRH_ALRIE     RTC_CRH_ALRIE_Msk           /*!< Alarm Interrupt Enable */\r\n#define RTC_CRH_OWIE_Pos  (2U)\r\n#define RTC_CRH_OWIE_Msk  (0x1U << RTC_CRH_OWIE_Pos) /*!< 0x00000004 */\r\n#define RTC_CRH_OWIE      RTC_CRH_OWIE_Msk           /*!< OverfloW Interrupt Enable */\r\n\r\n/*******************  Bit definition for RTC_CRL register  ********************/\r\n#define RTC_CRL_SECF_Pos  (0U)\r\n#define RTC_CRL_SECF_Msk  (0x1U << RTC_CRL_SECF_Pos) /*!< 0x00000001 */\r\n#define RTC_CRL_SECF      RTC_CRL_SECF_Msk           /*!< Second Flag */\r\n#define RTC_CRL_ALRF_Pos  (1U)\r\n#define RTC_CRL_ALRF_Msk  (0x1U << RTC_CRL_ALRF_Pos) /*!< 0x00000002 */\r\n#define RTC_CRL_ALRF      RTC_CRL_ALRF_Msk           /*!< Alarm Flag */\r\n#define RTC_CRL_OWF_Pos   (2U)\r\n#define RTC_CRL_OWF_Msk   (0x1U << RTC_CRL_OWF_Pos) /*!< 0x00000004 */\r\n#define RTC_CRL_OWF       RTC_CRL_OWF_Msk           /*!< OverfloW Flag */\r\n#define RTC_CRL_RSF_Pos   (3U)\r\n#define RTC_CRL_RSF_Msk   (0x1U << RTC_CRL_RSF_Pos) /*!< 0x00000008 */\r\n#define RTC_CRL_RSF       RTC_CRL_RSF_Msk           /*!< Registers Synchronized Flag */\r\n#define RTC_CRL_CNF_Pos   (4U)\r\n#define RTC_CRL_CNF_Msk   (0x1U << RTC_CRL_CNF_Pos) /*!< 0x00000010 */\r\n#define RTC_CRL_CNF       RTC_CRL_CNF_Msk           /*!< Configuration Flag */\r\n#define RTC_CRL_RTOFF_Pos (5U)\r\n#define RTC_CRL_RTOFF_Msk (0x1U << RTC_CRL_RTOFF_Pos) /*!< 0x00000020 */\r\n#define RTC_CRL_RTOFF     RTC_CRL_RTOFF_Msk           /*!< RTC operation OFF */\r\n\r\n/*******************  Bit definition for RTC_PRLH register  *******************/\r\n#define RTC_PRLH_PRL_Pos (0U)\r\n#define RTC_PRLH_PRL_Msk (0xFU << RTC_PRLH_PRL_Pos) /*!< 0x0000000F */\r\n#define RTC_PRLH_PRL     RTC_PRLH_PRL_Msk           /*!< RTC Prescaler Reload Value High */\r\n\r\n/*******************  Bit definition for RTC_PRLL register  *******************/\r\n#define RTC_PRLL_PRL_Pos (0U)\r\n#define RTC_PRLL_PRL_Msk (0xFFFFU << RTC_PRLL_PRL_Pos) /*!< 0x0000FFFF */\r\n#define RTC_PRLL_PRL     RTC_PRLL_PRL_Msk              /*!< RTC Prescaler Reload Value Low */\r\n\r\n/*******************  Bit definition for RTC_DIVH register  *******************/\r\n#define RTC_DIVH_RTC_DIV_Pos (0U)\r\n#define RTC_DIVH_RTC_DIV_Msk (0xFU << RTC_DIVH_RTC_DIV_Pos) /*!< 0x0000000F */\r\n#define RTC_DIVH_RTC_DIV     RTC_DIVH_RTC_DIV_Msk           /*!< RTC Clock Divider High */\r\n\r\n/*******************  Bit definition for RTC_DIVL register  *******************/\r\n#define RTC_DIVL_RTC_DIV_Pos (0U)\r\n#define RTC_DIVL_RTC_DIV_Msk (0xFFFFU << RTC_DIVL_RTC_DIV_Pos) /*!< 0x0000FFFF */\r\n#define RTC_DIVL_RTC_DIV     RTC_DIVL_RTC_DIV_Msk              /*!< RTC Clock Divider Low */\r\n\r\n/*******************  Bit definition for RTC_CNTH register  *******************/\r\n#define RTC_CNTH_RTC_CNT_Pos (0U)\r\n#define RTC_CNTH_RTC_CNT_Msk (0xFFFFU << RTC_CNTH_RTC_CNT_Pos) /*!< 0x0000FFFF */\r\n#define RTC_CNTH_RTC_CNT     RTC_CNTH_RTC_CNT_Msk              /*!< RTC Counter High */\r\n\r\n/*******************  Bit definition for RTC_CNTL register  *******************/\r\n#define RTC_CNTL_RTC_CNT_Pos (0U)\r\n#define RTC_CNTL_RTC_CNT_Msk (0xFFFFU << RTC_CNTL_RTC_CNT_Pos) /*!< 0x0000FFFF */\r\n#define RTC_CNTL_RTC_CNT     RTC_CNTL_RTC_CNT_Msk              /*!< RTC Counter Low */\r\n\r\n/*******************  Bit definition for RTC_ALRH register  *******************/\r\n#define RTC_ALRH_RTC_ALR_Pos (0U)\r\n#define RTC_ALRH_RTC_ALR_Msk (0xFFFFU << RTC_ALRH_RTC_ALR_Pos) /*!< 0x0000FFFF */\r\n#define RTC_ALRH_RTC_ALR     RTC_ALRH_RTC_ALR_Msk              /*!< RTC Alarm High */\r\n\r\n/*******************  Bit definition for RTC_ALRL register  *******************/\r\n#define RTC_ALRL_RTC_ALR_Pos (0U)\r\n#define RTC_ALRL_RTC_ALR_Msk (0xFFFFU << RTC_ALRL_RTC_ALR_Pos) /*!< 0x0000FFFF */\r\n#define RTC_ALRL_RTC_ALR     RTC_ALRL_RTC_ALR_Msk              /*!< RTC Alarm Low */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                        Independent WATCHDOG (IWDG)                         */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for IWDG_KR register  ********************/\r\n#define IWDG_KR_KEY_Pos (0U)\r\n#define IWDG_KR_KEY_Msk (0xFFFFU << IWDG_KR_KEY_Pos) /*!< 0x0000FFFF */\r\n#define IWDG_KR_KEY     IWDG_KR_KEY_Msk              /*!< Key value (write only, read 0000h) */\r\n\r\n/*******************  Bit definition for IWDG_PR register  ********************/\r\n#define IWDG_PR_PR_Pos (0U)\r\n#define IWDG_PR_PR_Msk (0x7U << IWDG_PR_PR_Pos) /*!< 0x00000007 */\r\n#define IWDG_PR_PR     IWDG_PR_PR_Msk           /*!< PR[2:0] (Prescaler divider) */\r\n#define IWDG_PR_PR_0   (0x1U << IWDG_PR_PR_Pos) /*!< 0x00000001 */\r\n#define IWDG_PR_PR_1   (0x2U << IWDG_PR_PR_Pos) /*!< 0x00000002 */\r\n#define IWDG_PR_PR_2   (0x4U << IWDG_PR_PR_Pos) /*!< 0x00000004 */\r\n\r\n/*******************  Bit definition for IWDG_RLR register  *******************/\r\n#define IWDG_RLR_RL_Pos (0U)\r\n#define IWDG_RLR_RL_Msk (0xFFFU << IWDG_RLR_RL_Pos) /*!< 0x00000FFF */\r\n#define IWDG_RLR_RL     IWDG_RLR_RL_Msk             /*!< Watchdog counter reload value */\r\n\r\n/*******************  Bit definition for IWDG_SR register  ********************/\r\n#define IWDG_SR_PVU_Pos (0U)\r\n#define IWDG_SR_PVU_Msk (0x1U << IWDG_SR_PVU_Pos) /*!< 0x00000001 */\r\n#define IWDG_SR_PVU     IWDG_SR_PVU_Msk           /*!< Watchdog prescaler value update */\r\n#define IWDG_SR_RVU_Pos (1U)\r\n#define IWDG_SR_RVU_Msk (0x1U << IWDG_SR_RVU_Pos) /*!< 0x00000002 */\r\n#define IWDG_SR_RVU     IWDG_SR_RVU_Msk           /*!< Watchdog counter reload value update */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                         Window WATCHDOG (WWDG)                             */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for WWDG_CR register  ********************/\r\n#define WWDG_CR_T_Pos (0U)\r\n#define WWDG_CR_T_Msk (0x7FU << WWDG_CR_T_Pos) /*!< 0x0000007F */\r\n#define WWDG_CR_T     WWDG_CR_T_Msk            /*!< T[6:0] bits (7-Bit counter (MSB to LSB)) */\r\n#define WWDG_CR_T_0   (0x01U << WWDG_CR_T_Pos) /*!< 0x00000001 */\r\n#define WWDG_CR_T_1   (0x02U << WWDG_CR_T_Pos) /*!< 0x00000002 */\r\n#define WWDG_CR_T_2   (0x04U << WWDG_CR_T_Pos) /*!< 0x00000004 */\r\n#define WWDG_CR_T_3   (0x08U << WWDG_CR_T_Pos) /*!< 0x00000008 */\r\n#define WWDG_CR_T_4   (0x10U << WWDG_CR_T_Pos) /*!< 0x00000010 */\r\n#define WWDG_CR_T_5   (0x20U << WWDG_CR_T_Pos) /*!< 0x00000020 */\r\n#define WWDG_CR_T_6   (0x40U << WWDG_CR_T_Pos) /*!< 0x00000040 */\r\n\r\n/* Legacy defines */\r\n#define WWDG_CR_T0 WWDG_CR_T_0\r\n#define WWDG_CR_T1 WWDG_CR_T_1\r\n#define WWDG_CR_T2 WWDG_CR_T_2\r\n#define WWDG_CR_T3 WWDG_CR_T_3\r\n#define WWDG_CR_T4 WWDG_CR_T_4\r\n#define WWDG_CR_T5 WWDG_CR_T_5\r\n#define WWDG_CR_T6 WWDG_CR_T_6\r\n\r\n#define WWDG_CR_WDGA_Pos (7U)\r\n#define WWDG_CR_WDGA_Msk (0x1U << WWDG_CR_WDGA_Pos) /*!< 0x00000080 */\r\n#define WWDG_CR_WDGA     WWDG_CR_WDGA_Msk           /*!< Activation bit */\r\n\r\n/*******************  Bit definition for WWDG_CFR register  *******************/\r\n#define WWDG_CFR_W_Pos (0U)\r\n#define WWDG_CFR_W_Msk (0x7FU << WWDG_CFR_W_Pos) /*!< 0x0000007F */\r\n#define WWDG_CFR_W     WWDG_CFR_W_Msk            /*!< W[6:0] bits (7-bit window value) */\r\n#define WWDG_CFR_W_0   (0x01U << WWDG_CFR_W_Pos) /*!< 0x00000001 */\r\n#define WWDG_CFR_W_1   (0x02U << WWDG_CFR_W_Pos) /*!< 0x00000002 */\r\n#define WWDG_CFR_W_2   (0x04U << WWDG_CFR_W_Pos) /*!< 0x00000004 */\r\n#define WWDG_CFR_W_3   (0x08U << WWDG_CFR_W_Pos) /*!< 0x00000008 */\r\n#define WWDG_CFR_W_4   (0x10U << WWDG_CFR_W_Pos) /*!< 0x00000010 */\r\n#define WWDG_CFR_W_5   (0x20U << WWDG_CFR_W_Pos) /*!< 0x00000020 */\r\n#define WWDG_CFR_W_6   (0x40U << WWDG_CFR_W_Pos) /*!< 0x00000040 */\r\n\r\n/* Legacy defines */\r\n#define WWDG_CFR_W0 WWDG_CFR_W_0\r\n#define WWDG_CFR_W1 WWDG_CFR_W_1\r\n#define WWDG_CFR_W2 WWDG_CFR_W_2\r\n#define WWDG_CFR_W3 WWDG_CFR_W_3\r\n#define WWDG_CFR_W4 WWDG_CFR_W_4\r\n#define WWDG_CFR_W5 WWDG_CFR_W_5\r\n#define WWDG_CFR_W6 WWDG_CFR_W_6\r\n\r\n#define WWDG_CFR_WDGTB_Pos (7U)\r\n#define WWDG_CFR_WDGTB_Msk (0x3U << WWDG_CFR_WDGTB_Pos) /*!< 0x00000180 */\r\n#define WWDG_CFR_WDGTB     WWDG_CFR_WDGTB_Msk           /*!< WDGTB[1:0] bits (Timer Base) */\r\n#define WWDG_CFR_WDGTB_0   (0x1U << WWDG_CFR_WDGTB_Pos) /*!< 0x00000080 */\r\n#define WWDG_CFR_WDGTB_1   (0x2U << WWDG_CFR_WDGTB_Pos) /*!< 0x00000100 */\r\n\r\n/* Legacy defines */\r\n#define WWDG_CFR_WDGTB0 WWDG_CFR_WDGTB_0\r\n#define WWDG_CFR_WDGTB1 WWDG_CFR_WDGTB_1\r\n\r\n#define WWDG_CFR_EWI_Pos (9U)\r\n#define WWDG_CFR_EWI_Msk (0x1U << WWDG_CFR_EWI_Pos) /*!< 0x00000200 */\r\n#define WWDG_CFR_EWI     WWDG_CFR_EWI_Msk           /*!< Early Wakeup Interrupt */\r\n\r\n/*******************  Bit definition for WWDG_SR register  ********************/\r\n#define WWDG_SR_EWIF_Pos (0U)\r\n#define WWDG_SR_EWIF_Msk (0x1U << WWDG_SR_EWIF_Pos) /*!< 0x00000001 */\r\n#define WWDG_SR_EWIF     WWDG_SR_EWIF_Msk           /*!< Early Wakeup Interrupt Flag */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                          SD host Interface                                 */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/******************  Bit definition for SDIO_POWER register  ******************/\r\n#define SDIO_POWER_PWRCTRL_Pos (0U)\r\n#define SDIO_POWER_PWRCTRL_Msk (0x3U << SDIO_POWER_PWRCTRL_Pos) /*!< 0x00000003 */\r\n#define SDIO_POWER_PWRCTRL     SDIO_POWER_PWRCTRL_Msk           /*!< PWRCTRL[1:0] bits (Power supply control bits) */\r\n#define SDIO_POWER_PWRCTRL_0   (0x1U << SDIO_POWER_PWRCTRL_Pos) /*!< 0x01 */\r\n#define SDIO_POWER_PWRCTRL_1   (0x2U << SDIO_POWER_PWRCTRL_Pos) /*!< 0x02 */\r\n\r\n/******************  Bit definition for SDIO_CLKCR register  ******************/\r\n#define SDIO_CLKCR_CLKDIV_Pos (0U)\r\n#define SDIO_CLKCR_CLKDIV_Msk (0xFFU << SDIO_CLKCR_CLKDIV_Pos) /*!< 0x000000FF */\r\n#define SDIO_CLKCR_CLKDIV     SDIO_CLKCR_CLKDIV_Msk            /*!< Clock divide factor */\r\n#define SDIO_CLKCR_CLKEN_Pos  (8U)\r\n#define SDIO_CLKCR_CLKEN_Msk  (0x1U << SDIO_CLKCR_CLKEN_Pos) /*!< 0x00000100 */\r\n#define SDIO_CLKCR_CLKEN      SDIO_CLKCR_CLKEN_Msk           /*!< Clock enable bit */\r\n#define SDIO_CLKCR_PWRSAV_Pos (9U)\r\n#define SDIO_CLKCR_PWRSAV_Msk (0x1U << SDIO_CLKCR_PWRSAV_Pos) /*!< 0x00000200 */\r\n#define SDIO_CLKCR_PWRSAV     SDIO_CLKCR_PWRSAV_Msk           /*!< Power saving configuration bit */\r\n#define SDIO_CLKCR_BYPASS_Pos (10U)\r\n#define SDIO_CLKCR_BYPASS_Msk (0x1U << SDIO_CLKCR_BYPASS_Pos) /*!< 0x00000400 */\r\n#define SDIO_CLKCR_BYPASS     SDIO_CLKCR_BYPASS_Msk           /*!< Clock divider bypass enable bit */\r\n\r\n#define SDIO_CLKCR_WIDBUS_Pos (11U)\r\n#define SDIO_CLKCR_WIDBUS_Msk (0x3U << SDIO_CLKCR_WIDBUS_Pos) /*!< 0x00001800 */\r\n#define SDIO_CLKCR_WIDBUS     SDIO_CLKCR_WIDBUS_Msk           /*!< WIDBUS[1:0] bits (Wide bus mode enable bit) */\r\n#define SDIO_CLKCR_WIDBUS_0   (0x1U << SDIO_CLKCR_WIDBUS_Pos) /*!< 0x0800 */\r\n#define SDIO_CLKCR_WIDBUS_1   (0x2U << SDIO_CLKCR_WIDBUS_Pos) /*!< 0x1000 */\r\n\r\n#define SDIO_CLKCR_NEGEDGE_Pos (13U)\r\n#define SDIO_CLKCR_NEGEDGE_Msk (0x1U << SDIO_CLKCR_NEGEDGE_Pos) /*!< 0x00002000 */\r\n#define SDIO_CLKCR_NEGEDGE     SDIO_CLKCR_NEGEDGE_Msk           /*!< SDIO_CK dephasing selection bit */\r\n#define SDIO_CLKCR_HWFC_EN_Pos (14U)\r\n#define SDIO_CLKCR_HWFC_EN_Msk (0x1U << SDIO_CLKCR_HWFC_EN_Pos) /*!< 0x00004000 */\r\n#define SDIO_CLKCR_HWFC_EN     SDIO_CLKCR_HWFC_EN_Msk           /*!< HW Flow Control enable */\r\n\r\n/*******************  Bit definition for SDIO_ARG register  *******************/\r\n#define SDIO_ARG_CMDARG_Pos (0U)\r\n#define SDIO_ARG_CMDARG_Msk (0xFFFFFFFFU << SDIO_ARG_CMDARG_Pos) /*!< 0xFFFFFFFF */\r\n#define SDIO_ARG_CMDARG     SDIO_ARG_CMDARG_Msk                  /*!< Command argument */\r\n\r\n/*******************  Bit definition for SDIO_CMD register  *******************/\r\n#define SDIO_CMD_CMDINDEX_Pos (0U)\r\n#define SDIO_CMD_CMDINDEX_Msk (0x3FU << SDIO_CMD_CMDINDEX_Pos) /*!< 0x0000003F */\r\n#define SDIO_CMD_CMDINDEX     SDIO_CMD_CMDINDEX_Msk            /*!< Command Index */\r\n\r\n#define SDIO_CMD_WAITRESP_Pos (6U)\r\n#define SDIO_CMD_WAITRESP_Msk (0x3U << SDIO_CMD_WAITRESP_Pos) /*!< 0x000000C0 */\r\n#define SDIO_CMD_WAITRESP     SDIO_CMD_WAITRESP_Msk           /*!< WAITRESP[1:0] bits (Wait for response bits) */\r\n#define SDIO_CMD_WAITRESP_0   (0x1U << SDIO_CMD_WAITRESP_Pos) /*!< 0x0040 */\r\n#define SDIO_CMD_WAITRESP_1   (0x2U << SDIO_CMD_WAITRESP_Pos) /*!< 0x0080 */\r\n\r\n#define SDIO_CMD_WAITINT_Pos     (8U)\r\n#define SDIO_CMD_WAITINT_Msk     (0x1U << SDIO_CMD_WAITINT_Pos) /*!< 0x00000100 */\r\n#define SDIO_CMD_WAITINT         SDIO_CMD_WAITINT_Msk           /*!< CPSM Waits for Interrupt Request */\r\n#define SDIO_CMD_WAITPEND_Pos    (9U)\r\n#define SDIO_CMD_WAITPEND_Msk    (0x1U << SDIO_CMD_WAITPEND_Pos) /*!< 0x00000200 */\r\n#define SDIO_CMD_WAITPEND        SDIO_CMD_WAITPEND_Msk           /*!< CPSM Waits for ends of data transfer (CmdPend internal signal) */\r\n#define SDIO_CMD_CPSMEN_Pos      (10U)\r\n#define SDIO_CMD_CPSMEN_Msk      (0x1U << SDIO_CMD_CPSMEN_Pos) /*!< 0x00000400 */\r\n#define SDIO_CMD_CPSMEN          SDIO_CMD_CPSMEN_Msk           /*!< Command path state machine (CPSM) Enable bit */\r\n#define SDIO_CMD_SDIOSUSPEND_Pos (11U)\r\n#define SDIO_CMD_SDIOSUSPEND_Msk (0x1U << SDIO_CMD_SDIOSUSPEND_Pos) /*!< 0x00000800 */\r\n#define SDIO_CMD_SDIOSUSPEND     SDIO_CMD_SDIOSUSPEND_Msk           /*!< SD I/O suspend command */\r\n#define SDIO_CMD_ENCMDCOMPL_Pos  (12U)\r\n#define SDIO_CMD_ENCMDCOMPL_Msk  (0x1U << SDIO_CMD_ENCMDCOMPL_Pos) /*!< 0x00001000 */\r\n#define SDIO_CMD_ENCMDCOMPL      SDIO_CMD_ENCMDCOMPL_Msk           /*!< Enable CMD completion */\r\n#define SDIO_CMD_NIEN_Pos        (13U)\r\n#define SDIO_CMD_NIEN_Msk        (0x1U << SDIO_CMD_NIEN_Pos) /*!< 0x00002000 */\r\n#define SDIO_CMD_NIEN            SDIO_CMD_NIEN_Msk           /*!< Not Interrupt Enable */\r\n#define SDIO_CMD_CEATACMD_Pos    (14U)\r\n#define SDIO_CMD_CEATACMD_Msk    (0x1U << SDIO_CMD_CEATACMD_Pos) /*!< 0x00004000 */\r\n#define SDIO_CMD_CEATACMD        SDIO_CMD_CEATACMD_Msk           /*!< CE-ATA command */\r\n\r\n/*****************  Bit definition for SDIO_RESPCMD register  *****************/\r\n#define SDIO_RESPCMD_RESPCMD_Pos (0U)\r\n#define SDIO_RESPCMD_RESPCMD_Msk (0x3FU << SDIO_RESPCMD_RESPCMD_Pos) /*!< 0x0000003F */\r\n#define SDIO_RESPCMD_RESPCMD     SDIO_RESPCMD_RESPCMD_Msk            /*!< Response command index */\r\n\r\n/******************  Bit definition for SDIO_RESP0 register  ******************/\r\n#define SDIO_RESP0_CARDSTATUS0_Pos (0U)\r\n#define SDIO_RESP0_CARDSTATUS0_Msk (0xFFFFFFFFU << SDIO_RESP0_CARDSTATUS0_Pos) /*!< 0xFFFFFFFF */\r\n#define SDIO_RESP0_CARDSTATUS0     SDIO_RESP0_CARDSTATUS0_Msk                  /*!< Card Status */\r\n\r\n/******************  Bit definition for SDIO_RESP1 register  ******************/\r\n#define SDIO_RESP1_CARDSTATUS1_Pos (0U)\r\n#define SDIO_RESP1_CARDSTATUS1_Msk (0xFFFFFFFFU << SDIO_RESP1_CARDSTATUS1_Pos) /*!< 0xFFFFFFFF */\r\n#define SDIO_RESP1_CARDSTATUS1     SDIO_RESP1_CARDSTATUS1_Msk                  /*!< Card Status */\r\n\r\n/******************  Bit definition for SDIO_RESP2 register  ******************/\r\n#define SDIO_RESP2_CARDSTATUS2_Pos (0U)\r\n#define SDIO_RESP2_CARDSTATUS2_Msk (0xFFFFFFFFU << SDIO_RESP2_CARDSTATUS2_Pos) /*!< 0xFFFFFFFF */\r\n#define SDIO_RESP2_CARDSTATUS2     SDIO_RESP2_CARDSTATUS2_Msk                  /*!< Card Status */\r\n\r\n/******************  Bit definition for SDIO_RESP3 register  ******************/\r\n#define SDIO_RESP3_CARDSTATUS3_Pos (0U)\r\n#define SDIO_RESP3_CARDSTATUS3_Msk (0xFFFFFFFFU << SDIO_RESP3_CARDSTATUS3_Pos) /*!< 0xFFFFFFFF */\r\n#define SDIO_RESP3_CARDSTATUS3     SDIO_RESP3_CARDSTATUS3_Msk                  /*!< Card Status */\r\n\r\n/******************  Bit definition for SDIO_RESP4 register  ******************/\r\n#define SDIO_RESP4_CARDSTATUS4_Pos (0U)\r\n#define SDIO_RESP4_CARDSTATUS4_Msk (0xFFFFFFFFU << SDIO_RESP4_CARDSTATUS4_Pos) /*!< 0xFFFFFFFF */\r\n#define SDIO_RESP4_CARDSTATUS4     SDIO_RESP4_CARDSTATUS4_Msk                  /*!< Card Status */\r\n\r\n/******************  Bit definition for SDIO_DTIMER register  *****************/\r\n#define SDIO_DTIMER_DATATIME_Pos (0U)\r\n#define SDIO_DTIMER_DATATIME_Msk (0xFFFFFFFFU << SDIO_DTIMER_DATATIME_Pos) /*!< 0xFFFFFFFF */\r\n#define SDIO_DTIMER_DATATIME     SDIO_DTIMER_DATATIME_Msk                  /*!< Data timeout period. */\r\n\r\n/******************  Bit definition for SDIO_DLEN register  *******************/\r\n#define SDIO_DLEN_DATALENGTH_Pos (0U)\r\n#define SDIO_DLEN_DATALENGTH_Msk (0x1FFFFFFU << SDIO_DLEN_DATALENGTH_Pos) /*!< 0x01FFFFFF */\r\n#define SDIO_DLEN_DATALENGTH     SDIO_DLEN_DATALENGTH_Msk                 /*!< Data length value */\r\n\r\n/******************  Bit definition for SDIO_DCTRL register  ******************/\r\n#define SDIO_DCTRL_DTEN_Pos   (0U)\r\n#define SDIO_DCTRL_DTEN_Msk   (0x1U << SDIO_DCTRL_DTEN_Pos) /*!< 0x00000001 */\r\n#define SDIO_DCTRL_DTEN       SDIO_DCTRL_DTEN_Msk           /*!< Data transfer enabled bit */\r\n#define SDIO_DCTRL_DTDIR_Pos  (1U)\r\n#define SDIO_DCTRL_DTDIR_Msk  (0x1U << SDIO_DCTRL_DTDIR_Pos) /*!< 0x00000002 */\r\n#define SDIO_DCTRL_DTDIR      SDIO_DCTRL_DTDIR_Msk           /*!< Data transfer direction selection */\r\n#define SDIO_DCTRL_DTMODE_Pos (2U)\r\n#define SDIO_DCTRL_DTMODE_Msk (0x1U << SDIO_DCTRL_DTMODE_Pos) /*!< 0x00000004 */\r\n#define SDIO_DCTRL_DTMODE     SDIO_DCTRL_DTMODE_Msk           /*!< Data transfer mode selection */\r\n#define SDIO_DCTRL_DMAEN_Pos  (3U)\r\n#define SDIO_DCTRL_DMAEN_Msk  (0x1U << SDIO_DCTRL_DMAEN_Pos) /*!< 0x00000008 */\r\n#define SDIO_DCTRL_DMAEN      SDIO_DCTRL_DMAEN_Msk           /*!< DMA enabled bit */\r\n\r\n#define SDIO_DCTRL_DBLOCKSIZE_Pos (4U)\r\n#define SDIO_DCTRL_DBLOCKSIZE_Msk (0xFU << SDIO_DCTRL_DBLOCKSIZE_Pos) /*!< 0x000000F0 */\r\n#define SDIO_DCTRL_DBLOCKSIZE     SDIO_DCTRL_DBLOCKSIZE_Msk           /*!< DBLOCKSIZE[3:0] bits (Data block size) */\r\n#define SDIO_DCTRL_DBLOCKSIZE_0   (0x1U << SDIO_DCTRL_DBLOCKSIZE_Pos) /*!< 0x0010 */\r\n#define SDIO_DCTRL_DBLOCKSIZE_1   (0x2U << SDIO_DCTRL_DBLOCKSIZE_Pos) /*!< 0x0020 */\r\n#define SDIO_DCTRL_DBLOCKSIZE_2   (0x4U << SDIO_DCTRL_DBLOCKSIZE_Pos) /*!< 0x0040 */\r\n#define SDIO_DCTRL_DBLOCKSIZE_3   (0x8U << SDIO_DCTRL_DBLOCKSIZE_Pos) /*!< 0x0080 */\r\n\r\n#define SDIO_DCTRL_RWSTART_Pos (8U)\r\n#define SDIO_DCTRL_RWSTART_Msk (0x1U << SDIO_DCTRL_RWSTART_Pos) /*!< 0x00000100 */\r\n#define SDIO_DCTRL_RWSTART     SDIO_DCTRL_RWSTART_Msk           /*!< Read wait start */\r\n#define SDIO_DCTRL_RWSTOP_Pos  (9U)\r\n#define SDIO_DCTRL_RWSTOP_Msk  (0x1U << SDIO_DCTRL_RWSTOP_Pos) /*!< 0x00000200 */\r\n#define SDIO_DCTRL_RWSTOP      SDIO_DCTRL_RWSTOP_Msk           /*!< Read wait stop */\r\n#define SDIO_DCTRL_RWMOD_Pos   (10U)\r\n#define SDIO_DCTRL_RWMOD_Msk   (0x1U << SDIO_DCTRL_RWMOD_Pos) /*!< 0x00000400 */\r\n#define SDIO_DCTRL_RWMOD       SDIO_DCTRL_RWMOD_Msk           /*!< Read wait mode */\r\n#define SDIO_DCTRL_SDIOEN_Pos  (11U)\r\n#define SDIO_DCTRL_SDIOEN_Msk  (0x1U << SDIO_DCTRL_SDIOEN_Pos) /*!< 0x00000800 */\r\n#define SDIO_DCTRL_SDIOEN      SDIO_DCTRL_SDIOEN_Msk           /*!< SD I/O enable functions */\r\n\r\n/******************  Bit definition for SDIO_DCOUNT register  *****************/\r\n#define SDIO_DCOUNT_DATACOUNT_Pos (0U)\r\n#define SDIO_DCOUNT_DATACOUNT_Msk (0x1FFFFFFU << SDIO_DCOUNT_DATACOUNT_Pos) /*!< 0x01FFFFFF */\r\n#define SDIO_DCOUNT_DATACOUNT     SDIO_DCOUNT_DATACOUNT_Msk                 /*!< Data count value */\r\n\r\n/******************  Bit definition for SDIO_STA register  ********************/\r\n#define SDIO_STA_CCRCFAIL_Pos (0U)\r\n#define SDIO_STA_CCRCFAIL_Msk (0x1U << SDIO_STA_CCRCFAIL_Pos) /*!< 0x00000001 */\r\n#define SDIO_STA_CCRCFAIL     SDIO_STA_CCRCFAIL_Msk           /*!< Command response received (CRC check failed) */\r\n#define SDIO_STA_DCRCFAIL_Pos (1U)\r\n#define SDIO_STA_DCRCFAIL_Msk (0x1U << SDIO_STA_DCRCFAIL_Pos) /*!< 0x00000002 */\r\n#define SDIO_STA_DCRCFAIL     SDIO_STA_DCRCFAIL_Msk           /*!< Data block sent/received (CRC check failed) */\r\n#define SDIO_STA_CTIMEOUT_Pos (2U)\r\n#define SDIO_STA_CTIMEOUT_Msk (0x1U << SDIO_STA_CTIMEOUT_Pos) /*!< 0x00000004 */\r\n#define SDIO_STA_CTIMEOUT     SDIO_STA_CTIMEOUT_Msk           /*!< Command response timeout */\r\n#define SDIO_STA_DTIMEOUT_Pos (3U)\r\n#define SDIO_STA_DTIMEOUT_Msk (0x1U << SDIO_STA_DTIMEOUT_Pos) /*!< 0x00000008 */\r\n#define SDIO_STA_DTIMEOUT     SDIO_STA_DTIMEOUT_Msk           /*!< Data timeout */\r\n#define SDIO_STA_TXUNDERR_Pos (4U)\r\n#define SDIO_STA_TXUNDERR_Msk (0x1U << SDIO_STA_TXUNDERR_Pos) /*!< 0x00000010 */\r\n#define SDIO_STA_TXUNDERR     SDIO_STA_TXUNDERR_Msk           /*!< Transmit FIFO underrun error */\r\n#define SDIO_STA_RXOVERR_Pos  (5U)\r\n#define SDIO_STA_RXOVERR_Msk  (0x1U << SDIO_STA_RXOVERR_Pos) /*!< 0x00000020 */\r\n#define SDIO_STA_RXOVERR      SDIO_STA_RXOVERR_Msk           /*!< Received FIFO overrun error */\r\n#define SDIO_STA_CMDREND_Pos  (6U)\r\n#define SDIO_STA_CMDREND_Msk  (0x1U << SDIO_STA_CMDREND_Pos) /*!< 0x00000040 */\r\n#define SDIO_STA_CMDREND      SDIO_STA_CMDREND_Msk           /*!< Command response received (CRC check passed) */\r\n#define SDIO_STA_CMDSENT_Pos  (7U)\r\n#define SDIO_STA_CMDSENT_Msk  (0x1U << SDIO_STA_CMDSENT_Pos) /*!< 0x00000080 */\r\n#define SDIO_STA_CMDSENT      SDIO_STA_CMDSENT_Msk           /*!< Command sent (no response required) */\r\n#define SDIO_STA_DATAEND_Pos  (8U)\r\n#define SDIO_STA_DATAEND_Msk  (0x1U << SDIO_STA_DATAEND_Pos) /*!< 0x00000100 */\r\n#define SDIO_STA_DATAEND      SDIO_STA_DATAEND_Msk           /*!< Data end (data counter, SDIDCOUNT, is zero) */\r\n#define SDIO_STA_STBITERR_Pos (9U)\r\n#define SDIO_STA_STBITERR_Msk (0x1U << SDIO_STA_STBITERR_Pos) /*!< 0x00000200 */\r\n#define SDIO_STA_STBITERR     SDIO_STA_STBITERR_Msk           /*!< Start bit not detected on all data signals in wide bus mode */\r\n#define SDIO_STA_DBCKEND_Pos  (10U)\r\n#define SDIO_STA_DBCKEND_Msk  (0x1U << SDIO_STA_DBCKEND_Pos) /*!< 0x00000400 */\r\n#define SDIO_STA_DBCKEND      SDIO_STA_DBCKEND_Msk           /*!< Data block sent/received (CRC check passed) */\r\n#define SDIO_STA_CMDACT_Pos   (11U)\r\n#define SDIO_STA_CMDACT_Msk   (0x1U << SDIO_STA_CMDACT_Pos) /*!< 0x00000800 */\r\n#define SDIO_STA_CMDACT       SDIO_STA_CMDACT_Msk           /*!< Command transfer in progress */\r\n#define SDIO_STA_TXACT_Pos    (12U)\r\n#define SDIO_STA_TXACT_Msk    (0x1U << SDIO_STA_TXACT_Pos) /*!< 0x00001000 */\r\n#define SDIO_STA_TXACT        SDIO_STA_TXACT_Msk           /*!< Data transmit in progress */\r\n#define SDIO_STA_RXACT_Pos    (13U)\r\n#define SDIO_STA_RXACT_Msk    (0x1U << SDIO_STA_RXACT_Pos) /*!< 0x00002000 */\r\n#define SDIO_STA_RXACT        SDIO_STA_RXACT_Msk           /*!< Data receive in progress */\r\n#define SDIO_STA_TXFIFOHE_Pos (14U)\r\n#define SDIO_STA_TXFIFOHE_Msk (0x1U << SDIO_STA_TXFIFOHE_Pos) /*!< 0x00004000 */\r\n#define SDIO_STA_TXFIFOHE     SDIO_STA_TXFIFOHE_Msk           /*!< Transmit FIFO Half Empty: at least 8 words can be written into the FIFO */\r\n#define SDIO_STA_RXFIFOHF_Pos (15U)\r\n#define SDIO_STA_RXFIFOHF_Msk (0x1U << SDIO_STA_RXFIFOHF_Pos) /*!< 0x00008000 */\r\n#define SDIO_STA_RXFIFOHF     SDIO_STA_RXFIFOHF_Msk           /*!< Receive FIFO Half Full: there are at least 8 words in the FIFO */\r\n#define SDIO_STA_TXFIFOF_Pos  (16U)\r\n#define SDIO_STA_TXFIFOF_Msk  (0x1U << SDIO_STA_TXFIFOF_Pos) /*!< 0x00010000 */\r\n#define SDIO_STA_TXFIFOF      SDIO_STA_TXFIFOF_Msk           /*!< Transmit FIFO full */\r\n#define SDIO_STA_RXFIFOF_Pos  (17U)\r\n#define SDIO_STA_RXFIFOF_Msk  (0x1U << SDIO_STA_RXFIFOF_Pos) /*!< 0x00020000 */\r\n#define SDIO_STA_RXFIFOF      SDIO_STA_RXFIFOF_Msk           /*!< Receive FIFO full */\r\n#define SDIO_STA_TXFIFOE_Pos  (18U)\r\n#define SDIO_STA_TXFIFOE_Msk  (0x1U << SDIO_STA_TXFIFOE_Pos) /*!< 0x00040000 */\r\n#define SDIO_STA_TXFIFOE      SDIO_STA_TXFIFOE_Msk           /*!< Transmit FIFO empty */\r\n#define SDIO_STA_RXFIFOE_Pos  (19U)\r\n#define SDIO_STA_RXFIFOE_Msk  (0x1U << SDIO_STA_RXFIFOE_Pos) /*!< 0x00080000 */\r\n#define SDIO_STA_RXFIFOE      SDIO_STA_RXFIFOE_Msk           /*!< Receive FIFO empty */\r\n#define SDIO_STA_TXDAVL_Pos   (20U)\r\n#define SDIO_STA_TXDAVL_Msk   (0x1U << SDIO_STA_TXDAVL_Pos) /*!< 0x00100000 */\r\n#define SDIO_STA_TXDAVL       SDIO_STA_TXDAVL_Msk           /*!< Data available in transmit FIFO */\r\n#define SDIO_STA_RXDAVL_Pos   (21U)\r\n#define SDIO_STA_RXDAVL_Msk   (0x1U << SDIO_STA_RXDAVL_Pos) /*!< 0x00200000 */\r\n#define SDIO_STA_RXDAVL       SDIO_STA_RXDAVL_Msk           /*!< Data available in receive FIFO */\r\n#define SDIO_STA_SDIOIT_Pos   (22U)\r\n#define SDIO_STA_SDIOIT_Msk   (0x1U << SDIO_STA_SDIOIT_Pos) /*!< 0x00400000 */\r\n#define SDIO_STA_SDIOIT       SDIO_STA_SDIOIT_Msk           /*!< SDIO interrupt received */\r\n#define SDIO_STA_CEATAEND_Pos (23U)\r\n#define SDIO_STA_CEATAEND_Msk (0x1U << SDIO_STA_CEATAEND_Pos) /*!< 0x00800000 */\r\n#define SDIO_STA_CEATAEND     SDIO_STA_CEATAEND_Msk           /*!< CE-ATA command completion signal received for CMD61 */\r\n\r\n/*******************  Bit definition for SDIO_ICR register  *******************/\r\n#define SDIO_ICR_CCRCFAILC_Pos (0U)\r\n#define SDIO_ICR_CCRCFAILC_Msk (0x1U << SDIO_ICR_CCRCFAILC_Pos) /*!< 0x00000001 */\r\n#define SDIO_ICR_CCRCFAILC     SDIO_ICR_CCRCFAILC_Msk           /*!< CCRCFAIL flag clear bit */\r\n#define SDIO_ICR_DCRCFAILC_Pos (1U)\r\n#define SDIO_ICR_DCRCFAILC_Msk (0x1U << SDIO_ICR_DCRCFAILC_Pos) /*!< 0x00000002 */\r\n#define SDIO_ICR_DCRCFAILC     SDIO_ICR_DCRCFAILC_Msk           /*!< DCRCFAIL flag clear bit */\r\n#define SDIO_ICR_CTIMEOUTC_Pos (2U)\r\n#define SDIO_ICR_CTIMEOUTC_Msk (0x1U << SDIO_ICR_CTIMEOUTC_Pos) /*!< 0x00000004 */\r\n#define SDIO_ICR_CTIMEOUTC     SDIO_ICR_CTIMEOUTC_Msk           /*!< CTIMEOUT flag clear bit */\r\n#define SDIO_ICR_DTIMEOUTC_Pos (3U)\r\n#define SDIO_ICR_DTIMEOUTC_Msk (0x1U << SDIO_ICR_DTIMEOUTC_Pos) /*!< 0x00000008 */\r\n#define SDIO_ICR_DTIMEOUTC     SDIO_ICR_DTIMEOUTC_Msk           /*!< DTIMEOUT flag clear bit */\r\n#define SDIO_ICR_TXUNDERRC_Pos (4U)\r\n#define SDIO_ICR_TXUNDERRC_Msk (0x1U << SDIO_ICR_TXUNDERRC_Pos) /*!< 0x00000010 */\r\n#define SDIO_ICR_TXUNDERRC     SDIO_ICR_TXUNDERRC_Msk           /*!< TXUNDERR flag clear bit */\r\n#define SDIO_ICR_RXOVERRC_Pos  (5U)\r\n#define SDIO_ICR_RXOVERRC_Msk  (0x1U << SDIO_ICR_RXOVERRC_Pos) /*!< 0x00000020 */\r\n#define SDIO_ICR_RXOVERRC      SDIO_ICR_RXOVERRC_Msk           /*!< RXOVERR flag clear bit */\r\n#define SDIO_ICR_CMDRENDC_Pos  (6U)\r\n#define SDIO_ICR_CMDRENDC_Msk  (0x1U << SDIO_ICR_CMDRENDC_Pos) /*!< 0x00000040 */\r\n#define SDIO_ICR_CMDRENDC      SDIO_ICR_CMDRENDC_Msk           /*!< CMDREND flag clear bit */\r\n#define SDIO_ICR_CMDSENTC_Pos  (7U)\r\n#define SDIO_ICR_CMDSENTC_Msk  (0x1U << SDIO_ICR_CMDSENTC_Pos) /*!< 0x00000080 */\r\n#define SDIO_ICR_CMDSENTC      SDIO_ICR_CMDSENTC_Msk           /*!< CMDSENT flag clear bit */\r\n#define SDIO_ICR_DATAENDC_Pos  (8U)\r\n#define SDIO_ICR_DATAENDC_Msk  (0x1U << SDIO_ICR_DATAENDC_Pos) /*!< 0x00000100 */\r\n#define SDIO_ICR_DATAENDC      SDIO_ICR_DATAENDC_Msk           /*!< DATAEND flag clear bit */\r\n#define SDIO_ICR_STBITERRC_Pos (9U)\r\n#define SDIO_ICR_STBITERRC_Msk (0x1U << SDIO_ICR_STBITERRC_Pos) /*!< 0x00000200 */\r\n#define SDIO_ICR_STBITERRC     SDIO_ICR_STBITERRC_Msk           /*!< STBITERR flag clear bit */\r\n#define SDIO_ICR_DBCKENDC_Pos  (10U)\r\n#define SDIO_ICR_DBCKENDC_Msk  (0x1U << SDIO_ICR_DBCKENDC_Pos) /*!< 0x00000400 */\r\n#define SDIO_ICR_DBCKENDC      SDIO_ICR_DBCKENDC_Msk           /*!< DBCKEND flag clear bit */\r\n#define SDIO_ICR_SDIOITC_Pos   (22U)\r\n#define SDIO_ICR_SDIOITC_Msk   (0x1U << SDIO_ICR_SDIOITC_Pos) /*!< 0x00400000 */\r\n#define SDIO_ICR_SDIOITC       SDIO_ICR_SDIOITC_Msk           /*!< SDIOIT flag clear bit */\r\n#define SDIO_ICR_CEATAENDC_Pos (23U)\r\n#define SDIO_ICR_CEATAENDC_Msk (0x1U << SDIO_ICR_CEATAENDC_Pos) /*!< 0x00800000 */\r\n#define SDIO_ICR_CEATAENDC     SDIO_ICR_CEATAENDC_Msk           /*!< CEATAEND flag clear bit */\r\n\r\n/******************  Bit definition for SDIO_MASK register  *******************/\r\n#define SDIO_MASK_CCRCFAILIE_Pos (0U)\r\n#define SDIO_MASK_CCRCFAILIE_Msk (0x1U << SDIO_MASK_CCRCFAILIE_Pos) /*!< 0x00000001 */\r\n#define SDIO_MASK_CCRCFAILIE     SDIO_MASK_CCRCFAILIE_Msk           /*!< Command CRC Fail Interrupt Enable */\r\n#define SDIO_MASK_DCRCFAILIE_Pos (1U)\r\n#define SDIO_MASK_DCRCFAILIE_Msk (0x1U << SDIO_MASK_DCRCFAILIE_Pos) /*!< 0x00000002 */\r\n#define SDIO_MASK_DCRCFAILIE     SDIO_MASK_DCRCFAILIE_Msk           /*!< Data CRC Fail Interrupt Enable */\r\n#define SDIO_MASK_CTIMEOUTIE_Pos (2U)\r\n#define SDIO_MASK_CTIMEOUTIE_Msk (0x1U << SDIO_MASK_CTIMEOUTIE_Pos) /*!< 0x00000004 */\r\n#define SDIO_MASK_CTIMEOUTIE     SDIO_MASK_CTIMEOUTIE_Msk           /*!< Command TimeOut Interrupt Enable */\r\n#define SDIO_MASK_DTIMEOUTIE_Pos (3U)\r\n#define SDIO_MASK_DTIMEOUTIE_Msk (0x1U << SDIO_MASK_DTIMEOUTIE_Pos) /*!< 0x00000008 */\r\n#define SDIO_MASK_DTIMEOUTIE     SDIO_MASK_DTIMEOUTIE_Msk           /*!< Data TimeOut Interrupt Enable */\r\n#define SDIO_MASK_TXUNDERRIE_Pos (4U)\r\n#define SDIO_MASK_TXUNDERRIE_Msk (0x1U << SDIO_MASK_TXUNDERRIE_Pos) /*!< 0x00000010 */\r\n#define SDIO_MASK_TXUNDERRIE     SDIO_MASK_TXUNDERRIE_Msk           /*!< Tx FIFO UnderRun Error Interrupt Enable */\r\n#define SDIO_MASK_RXOVERRIE_Pos  (5U)\r\n#define SDIO_MASK_RXOVERRIE_Msk  (0x1U << SDIO_MASK_RXOVERRIE_Pos) /*!< 0x00000020 */\r\n#define SDIO_MASK_RXOVERRIE      SDIO_MASK_RXOVERRIE_Msk           /*!< Rx FIFO OverRun Error Interrupt Enable */\r\n#define SDIO_MASK_CMDRENDIE_Pos  (6U)\r\n#define SDIO_MASK_CMDRENDIE_Msk  (0x1U << SDIO_MASK_CMDRENDIE_Pos) /*!< 0x00000040 */\r\n#define SDIO_MASK_CMDRENDIE      SDIO_MASK_CMDRENDIE_Msk           /*!< Command Response Received Interrupt Enable */\r\n#define SDIO_MASK_CMDSENTIE_Pos  (7U)\r\n#define SDIO_MASK_CMDSENTIE_Msk  (0x1U << SDIO_MASK_CMDSENTIE_Pos) /*!< 0x00000080 */\r\n#define SDIO_MASK_CMDSENTIE      SDIO_MASK_CMDSENTIE_Msk           /*!< Command Sent Interrupt Enable */\r\n#define SDIO_MASK_DATAENDIE_Pos  (8U)\r\n#define SDIO_MASK_DATAENDIE_Msk  (0x1U << SDIO_MASK_DATAENDIE_Pos) /*!< 0x00000100 */\r\n#define SDIO_MASK_DATAENDIE      SDIO_MASK_DATAENDIE_Msk           /*!< Data End Interrupt Enable */\r\n#define SDIO_MASK_STBITERRIE_Pos (9U)\r\n#define SDIO_MASK_STBITERRIE_Msk (0x1U << SDIO_MASK_STBITERRIE_Pos) /*!< 0x00000200 */\r\n#define SDIO_MASK_STBITERRIE     SDIO_MASK_STBITERRIE_Msk           /*!< Start Bit Error Interrupt Enable */\r\n#define SDIO_MASK_DBCKENDIE_Pos  (10U)\r\n#define SDIO_MASK_DBCKENDIE_Msk  (0x1U << SDIO_MASK_DBCKENDIE_Pos) /*!< 0x00000400 */\r\n#define SDIO_MASK_DBCKENDIE      SDIO_MASK_DBCKENDIE_Msk           /*!< Data Block End Interrupt Enable */\r\n#define SDIO_MASK_CMDACTIE_Pos   (11U)\r\n#define SDIO_MASK_CMDACTIE_Msk   (0x1U << SDIO_MASK_CMDACTIE_Pos) /*!< 0x00000800 */\r\n#define SDIO_MASK_CMDACTIE       SDIO_MASK_CMDACTIE_Msk           /*!< Command Acting Interrupt Enable */\r\n#define SDIO_MASK_TXACTIE_Pos    (12U)\r\n#define SDIO_MASK_TXACTIE_Msk    (0x1U << SDIO_MASK_TXACTIE_Pos) /*!< 0x00001000 */\r\n#define SDIO_MASK_TXACTIE        SDIO_MASK_TXACTIE_Msk           /*!< Data Transmit Acting Interrupt Enable */\r\n#define SDIO_MASK_RXACTIE_Pos    (13U)\r\n#define SDIO_MASK_RXACTIE_Msk    (0x1U << SDIO_MASK_RXACTIE_Pos) /*!< 0x00002000 */\r\n#define SDIO_MASK_RXACTIE        SDIO_MASK_RXACTIE_Msk           /*!< Data receive acting interrupt enabled */\r\n#define SDIO_MASK_TXFIFOHEIE_Pos (14U)\r\n#define SDIO_MASK_TXFIFOHEIE_Msk (0x1U << SDIO_MASK_TXFIFOHEIE_Pos) /*!< 0x00004000 */\r\n#define SDIO_MASK_TXFIFOHEIE     SDIO_MASK_TXFIFOHEIE_Msk           /*!< Tx FIFO Half Empty interrupt Enable */\r\n#define SDIO_MASK_RXFIFOHFIE_Pos (15U)\r\n#define SDIO_MASK_RXFIFOHFIE_Msk (0x1U << SDIO_MASK_RXFIFOHFIE_Pos) /*!< 0x00008000 */\r\n#define SDIO_MASK_RXFIFOHFIE     SDIO_MASK_RXFIFOHFIE_Msk           /*!< Rx FIFO Half Full interrupt Enable */\r\n#define SDIO_MASK_TXFIFOFIE_Pos  (16U)\r\n#define SDIO_MASK_TXFIFOFIE_Msk  (0x1U << SDIO_MASK_TXFIFOFIE_Pos) /*!< 0x00010000 */\r\n#define SDIO_MASK_TXFIFOFIE      SDIO_MASK_TXFIFOFIE_Msk           /*!< Tx FIFO Full interrupt Enable */\r\n#define SDIO_MASK_RXFIFOFIE_Pos  (17U)\r\n#define SDIO_MASK_RXFIFOFIE_Msk  (0x1U << SDIO_MASK_RXFIFOFIE_Pos) /*!< 0x00020000 */\r\n#define SDIO_MASK_RXFIFOFIE      SDIO_MASK_RXFIFOFIE_Msk           /*!< Rx FIFO Full interrupt Enable */\r\n#define SDIO_MASK_TXFIFOEIE_Pos  (18U)\r\n#define SDIO_MASK_TXFIFOEIE_Msk  (0x1U << SDIO_MASK_TXFIFOEIE_Pos) /*!< 0x00040000 */\r\n#define SDIO_MASK_TXFIFOEIE      SDIO_MASK_TXFIFOEIE_Msk           /*!< Tx FIFO Empty interrupt Enable */\r\n#define SDIO_MASK_RXFIFOEIE_Pos  (19U)\r\n#define SDIO_MASK_RXFIFOEIE_Msk  (0x1U << SDIO_MASK_RXFIFOEIE_Pos) /*!< 0x00080000 */\r\n#define SDIO_MASK_RXFIFOEIE      SDIO_MASK_RXFIFOEIE_Msk           /*!< Rx FIFO Empty interrupt Enable */\r\n#define SDIO_MASK_TXDAVLIE_Pos   (20U)\r\n#define SDIO_MASK_TXDAVLIE_Msk   (0x1U << SDIO_MASK_TXDAVLIE_Pos) /*!< 0x00100000 */\r\n#define SDIO_MASK_TXDAVLIE       SDIO_MASK_TXDAVLIE_Msk           /*!< Data available in Tx FIFO interrupt Enable */\r\n#define SDIO_MASK_RXDAVLIE_Pos   (21U)\r\n#define SDIO_MASK_RXDAVLIE_Msk   (0x1U << SDIO_MASK_RXDAVLIE_Pos) /*!< 0x00200000 */\r\n#define SDIO_MASK_RXDAVLIE       SDIO_MASK_RXDAVLIE_Msk           /*!< Data available in Rx FIFO interrupt Enable */\r\n#define SDIO_MASK_SDIOITIE_Pos   (22U)\r\n#define SDIO_MASK_SDIOITIE_Msk   (0x1U << SDIO_MASK_SDIOITIE_Pos) /*!< 0x00400000 */\r\n#define SDIO_MASK_SDIOITIE       SDIO_MASK_SDIOITIE_Msk           /*!< SDIO Mode Interrupt Received interrupt Enable */\r\n#define SDIO_MASK_CEATAENDIE_Pos (23U)\r\n#define SDIO_MASK_CEATAENDIE_Msk (0x1U << SDIO_MASK_CEATAENDIE_Pos) /*!< 0x00800000 */\r\n#define SDIO_MASK_CEATAENDIE     SDIO_MASK_CEATAENDIE_Msk           /*!< CE-ATA command completion signal received Interrupt Enable */\r\n\r\n/*****************  Bit definition for SDIO_FIFOCNT register  *****************/\r\n#define SDIO_FIFOCNT_FIFOCOUNT_Pos (0U)\r\n#define SDIO_FIFOCNT_FIFOCOUNT_Msk (0xFFFFFFU << SDIO_FIFOCNT_FIFOCOUNT_Pos) /*!< 0x00FFFFFF */\r\n#define SDIO_FIFOCNT_FIFOCOUNT     SDIO_FIFOCNT_FIFOCOUNT_Msk                /*!< Remaining number of words to be written to or read from the FIFO */\r\n\r\n/******************  Bit definition for SDIO_FIFO register  *******************/\r\n#define SDIO_FIFO_FIFODATA_Pos (0U)\r\n#define SDIO_FIFO_FIFODATA_Msk (0xFFFFFFFFU << SDIO_FIFO_FIFODATA_Pos) /*!< 0xFFFFFFFF */\r\n#define SDIO_FIFO_FIFODATA     SDIO_FIFO_FIFODATA_Msk                  /*!< Receive and transmit FIFO data */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                                   USB Device FS                            */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*!< Endpoint-specific registers */\r\n#define USB_EP0R USB_BASE                /*!< Endpoint 0 register address */\r\n#define USB_EP1R (USB_BASE + 0x00000004) /*!< Endpoint 1 register address */\r\n#define USB_EP2R (USB_BASE + 0x00000008) /*!< Endpoint 2 register address */\r\n#define USB_EP3R (USB_BASE + 0x0000000C) /*!< Endpoint 3 register address */\r\n#define USB_EP4R (USB_BASE + 0x00000010) /*!< Endpoint 4 register address */\r\n#define USB_EP5R (USB_BASE + 0x00000014) /*!< Endpoint 5 register address */\r\n#define USB_EP6R (USB_BASE + 0x00000018) /*!< Endpoint 6 register address */\r\n#define USB_EP7R (USB_BASE + 0x0000001C) /*!< Endpoint 7 register address */\r\n\r\n/* bit positions */\r\n#define USB_EP_CTR_RX_Pos    (15U)\r\n#define USB_EP_CTR_RX_Msk    (0x1U << USB_EP_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP_CTR_RX        USB_EP_CTR_RX_Msk           /*!< EndPoint Correct TRansfer RX */\r\n#define USB_EP_DTOG_RX_Pos   (14U)\r\n#define USB_EP_DTOG_RX_Msk   (0x1U << USB_EP_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP_DTOG_RX       USB_EP_DTOG_RX_Msk           /*!< EndPoint Data TOGGLE RX */\r\n#define USB_EPRX_STAT_Pos    (12U)\r\n#define USB_EPRX_STAT_Msk    (0x3U << USB_EPRX_STAT_Pos) /*!< 0x00003000 */\r\n#define USB_EPRX_STAT        USB_EPRX_STAT_Msk           /*!< EndPoint RX STATus bit field */\r\n#define USB_EP_SETUP_Pos     (11U)\r\n#define USB_EP_SETUP_Msk     (0x1U << USB_EP_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP_SETUP         USB_EP_SETUP_Msk           /*!< EndPoint SETUP */\r\n#define USB_EP_T_FIELD_Pos   (9U)\r\n#define USB_EP_T_FIELD_Msk   (0x3U << USB_EP_T_FIELD_Pos) /*!< 0x00000600 */\r\n#define USB_EP_T_FIELD       USB_EP_T_FIELD_Msk           /*!< EndPoint TYPE */\r\n#define USB_EP_KIND_Pos      (8U)\r\n#define USB_EP_KIND_Msk      (0x1U << USB_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP_KIND          USB_EP_KIND_Msk           /*!< EndPoint KIND */\r\n#define USB_EP_CTR_TX_Pos    (7U)\r\n#define USB_EP_CTR_TX_Msk    (0x1U << USB_EP_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP_CTR_TX        USB_EP_CTR_TX_Msk           /*!< EndPoint Correct TRansfer TX */\r\n#define USB_EP_DTOG_TX_Pos   (6U)\r\n#define USB_EP_DTOG_TX_Msk   (0x1U << USB_EP_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP_DTOG_TX       USB_EP_DTOG_TX_Msk           /*!< EndPoint Data TOGGLE TX */\r\n#define USB_EPTX_STAT_Pos    (4U)\r\n#define USB_EPTX_STAT_Msk    (0x3U << USB_EPTX_STAT_Pos) /*!< 0x00000030 */\r\n#define USB_EPTX_STAT        USB_EPTX_STAT_Msk           /*!< EndPoint TX STATus bit field */\r\n#define USB_EPADDR_FIELD_Pos (0U)\r\n#define USB_EPADDR_FIELD_Msk (0xFU << USB_EPADDR_FIELD_Pos) /*!< 0x0000000F */\r\n#define USB_EPADDR_FIELD     USB_EPADDR_FIELD_Msk           /*!< EndPoint ADDRess FIELD */\r\n\r\n/* EndPoint REGister MASK (no toggle fields) */\r\n#define USB_EPREG_MASK (USB_EP_CTR_RX | USB_EP_SETUP | USB_EP_T_FIELD | USB_EP_KIND | USB_EP_CTR_TX | USB_EPADDR_FIELD)\r\n/*!< EP_TYPE[1:0] EndPoint TYPE */\r\n#define USB_EP_TYPE_MASK_Pos (9U)\r\n#define USB_EP_TYPE_MASK_Msk (0x3U << USB_EP_TYPE_MASK_Pos) /*!< 0x00000600 */\r\n#define USB_EP_TYPE_MASK     USB_EP_TYPE_MASK_Msk           /*!< EndPoint TYPE Mask */\r\n#define USB_EP_BULK          0x00000000U                    /*!< EndPoint BULK */\r\n#define USB_EP_CONTROL       0x00000200U                    /*!< EndPoint CONTROL */\r\n#define USB_EP_ISOCHRONOUS   0x00000400U                    /*!< EndPoint ISOCHRONOUS */\r\n#define USB_EP_INTERRUPT     0x00000600U                    /*!< EndPoint INTERRUPT */\r\n#define USB_EP_T_MASK        (~USB_EP_T_FIELD & USB_EPREG_MASK)\r\n\r\n#define USB_EPKIND_MASK (~USB_EP_KIND & USB_EPREG_MASK) /*!< EP_KIND EndPoint KIND */\r\n                                                        /*!< STAT_TX[1:0] STATus for TX transfer */\r\n#define USB_EP_TX_DIS     0x00000000U                   /*!< EndPoint TX DISabled */\r\n#define USB_EP_TX_STALL   0x00000010U                   /*!< EndPoint TX STALLed */\r\n#define USB_EP_TX_NAK     0x00000020U                   /*!< EndPoint TX NAKed */\r\n#define USB_EP_TX_VALID   0x00000030U                   /*!< EndPoint TX VALID */\r\n#define USB_EPTX_DTOG1    0x00000010U                   /*!< EndPoint TX Data TOGgle bit1 */\r\n#define USB_EPTX_DTOG2    0x00000020U                   /*!< EndPoint TX Data TOGgle bit2 */\r\n#define USB_EPTX_DTOGMASK (USB_EPTX_STAT | USB_EPREG_MASK)\r\n/*!< STAT_RX[1:0] STATus for RX transfer */\r\n#define USB_EP_RX_DIS     0x00000000U /*!< EndPoint RX DISabled */\r\n#define USB_EP_RX_STALL   0x00001000U /*!< EndPoint RX STALLed */\r\n#define USB_EP_RX_NAK     0x00002000U /*!< EndPoint RX NAKed */\r\n#define USB_EP_RX_VALID   0x00003000U /*!< EndPoint RX VALID */\r\n#define USB_EPRX_DTOG1    0x00001000U /*!< EndPoint RX Data TOGgle bit1 */\r\n#define USB_EPRX_DTOG2    0x00002000U /*!< EndPoint RX Data TOGgle bit1 */\r\n#define USB_EPRX_DTOGMASK (USB_EPRX_STAT | USB_EPREG_MASK)\r\n\r\n/*******************  Bit definition for USB_EP0R register  *******************/\r\n#define USB_EP0R_EA_Pos (0U)\r\n#define USB_EP0R_EA_Msk (0xFU << USB_EP0R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP0R_EA     USB_EP0R_EA_Msk           /*!< Endpoint Address */\r\n\r\n#define USB_EP0R_STAT_TX_Pos (4U)\r\n#define USB_EP0R_STAT_TX_Msk (0x3U << USB_EP0R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP0R_STAT_TX     USB_EP0R_STAT_TX_Msk           /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP0R_STAT_TX_0   (0x1U << USB_EP0R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP0R_STAT_TX_1   (0x2U << USB_EP0R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP0R_DTOG_TX_Pos (6U)\r\n#define USB_EP0R_DTOG_TX_Msk (0x1U << USB_EP0R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP0R_DTOG_TX     USB_EP0R_DTOG_TX_Msk           /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP0R_CTR_TX_Pos  (7U)\r\n#define USB_EP0R_CTR_TX_Msk  (0x1U << USB_EP0R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP0R_CTR_TX      USB_EP0R_CTR_TX_Msk           /*!< Correct Transfer for transmission */\r\n#define USB_EP0R_EP_KIND_Pos (8U)\r\n#define USB_EP0R_EP_KIND_Msk (0x1U << USB_EP0R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP0R_EP_KIND     USB_EP0R_EP_KIND_Msk           /*!< Endpoint Kind */\r\n\r\n#define USB_EP0R_EP_TYPE_Pos (9U)\r\n#define USB_EP0R_EP_TYPE_Msk (0x3U << USB_EP0R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP0R_EP_TYPE     USB_EP0R_EP_TYPE_Msk           /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP0R_EP_TYPE_0   (0x1U << USB_EP0R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP0R_EP_TYPE_1   (0x2U << USB_EP0R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP0R_SETUP_Pos (11U)\r\n#define USB_EP0R_SETUP_Msk (0x1U << USB_EP0R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP0R_SETUP     USB_EP0R_SETUP_Msk           /*!< Setup transaction completed */\r\n\r\n#define USB_EP0R_STAT_RX_Pos (12U)\r\n#define USB_EP0R_STAT_RX_Msk (0x3U << USB_EP0R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP0R_STAT_RX     USB_EP0R_STAT_RX_Msk           /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP0R_STAT_RX_0   (0x1U << USB_EP0R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP0R_STAT_RX_1   (0x2U << USB_EP0R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP0R_DTOG_RX_Pos (14U)\r\n#define USB_EP0R_DTOG_RX_Msk (0x1U << USB_EP0R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP0R_DTOG_RX     USB_EP0R_DTOG_RX_Msk           /*!< Data Toggle, for reception transfers */\r\n#define USB_EP0R_CTR_RX_Pos  (15U)\r\n#define USB_EP0R_CTR_RX_Msk  (0x1U << USB_EP0R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP0R_CTR_RX      USB_EP0R_CTR_RX_Msk           /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP1R register  *******************/\r\n#define USB_EP1R_EA_Pos (0U)\r\n#define USB_EP1R_EA_Msk (0xFU << USB_EP1R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP1R_EA     USB_EP1R_EA_Msk           /*!< Endpoint Address */\r\n\r\n#define USB_EP1R_STAT_TX_Pos (4U)\r\n#define USB_EP1R_STAT_TX_Msk (0x3U << USB_EP1R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP1R_STAT_TX     USB_EP1R_STAT_TX_Msk           /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP1R_STAT_TX_0   (0x1U << USB_EP1R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP1R_STAT_TX_1   (0x2U << USB_EP1R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP1R_DTOG_TX_Pos (6U)\r\n#define USB_EP1R_DTOG_TX_Msk (0x1U << USB_EP1R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP1R_DTOG_TX     USB_EP1R_DTOG_TX_Msk           /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP1R_CTR_TX_Pos  (7U)\r\n#define USB_EP1R_CTR_TX_Msk  (0x1U << USB_EP1R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP1R_CTR_TX      USB_EP1R_CTR_TX_Msk           /*!< Correct Transfer for transmission */\r\n#define USB_EP1R_EP_KIND_Pos (8U)\r\n#define USB_EP1R_EP_KIND_Msk (0x1U << USB_EP1R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP1R_EP_KIND     USB_EP1R_EP_KIND_Msk           /*!< Endpoint Kind */\r\n\r\n#define USB_EP1R_EP_TYPE_Pos (9U)\r\n#define USB_EP1R_EP_TYPE_Msk (0x3U << USB_EP1R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP1R_EP_TYPE     USB_EP1R_EP_TYPE_Msk           /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP1R_EP_TYPE_0   (0x1U << USB_EP1R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP1R_EP_TYPE_1   (0x2U << USB_EP1R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP1R_SETUP_Pos (11U)\r\n#define USB_EP1R_SETUP_Msk (0x1U << USB_EP1R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP1R_SETUP     USB_EP1R_SETUP_Msk           /*!< Setup transaction completed */\r\n\r\n#define USB_EP1R_STAT_RX_Pos (12U)\r\n#define USB_EP1R_STAT_RX_Msk (0x3U << USB_EP1R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP1R_STAT_RX     USB_EP1R_STAT_RX_Msk           /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP1R_STAT_RX_0   (0x1U << USB_EP1R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP1R_STAT_RX_1   (0x2U << USB_EP1R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP1R_DTOG_RX_Pos (14U)\r\n#define USB_EP1R_DTOG_RX_Msk (0x1U << USB_EP1R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP1R_DTOG_RX     USB_EP1R_DTOG_RX_Msk           /*!< Data Toggle, for reception transfers */\r\n#define USB_EP1R_CTR_RX_Pos  (15U)\r\n#define USB_EP1R_CTR_RX_Msk  (0x1U << USB_EP1R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP1R_CTR_RX      USB_EP1R_CTR_RX_Msk           /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP2R register  *******************/\r\n#define USB_EP2R_EA_Pos (0U)\r\n#define USB_EP2R_EA_Msk (0xFU << USB_EP2R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP2R_EA     USB_EP2R_EA_Msk           /*!< Endpoint Address */\r\n\r\n#define USB_EP2R_STAT_TX_Pos (4U)\r\n#define USB_EP2R_STAT_TX_Msk (0x3U << USB_EP2R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP2R_STAT_TX     USB_EP2R_STAT_TX_Msk           /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP2R_STAT_TX_0   (0x1U << USB_EP2R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP2R_STAT_TX_1   (0x2U << USB_EP2R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP2R_DTOG_TX_Pos (6U)\r\n#define USB_EP2R_DTOG_TX_Msk (0x1U << USB_EP2R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP2R_DTOG_TX     USB_EP2R_DTOG_TX_Msk           /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP2R_CTR_TX_Pos  (7U)\r\n#define USB_EP2R_CTR_TX_Msk  (0x1U << USB_EP2R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP2R_CTR_TX      USB_EP2R_CTR_TX_Msk           /*!< Correct Transfer for transmission */\r\n#define USB_EP2R_EP_KIND_Pos (8U)\r\n#define USB_EP2R_EP_KIND_Msk (0x1U << USB_EP2R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP2R_EP_KIND     USB_EP2R_EP_KIND_Msk           /*!< Endpoint Kind */\r\n\r\n#define USB_EP2R_EP_TYPE_Pos (9U)\r\n#define USB_EP2R_EP_TYPE_Msk (0x3U << USB_EP2R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP2R_EP_TYPE     USB_EP2R_EP_TYPE_Msk           /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP2R_EP_TYPE_0   (0x1U << USB_EP2R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP2R_EP_TYPE_1   (0x2U << USB_EP2R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP2R_SETUP_Pos (11U)\r\n#define USB_EP2R_SETUP_Msk (0x1U << USB_EP2R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP2R_SETUP     USB_EP2R_SETUP_Msk           /*!< Setup transaction completed */\r\n\r\n#define USB_EP2R_STAT_RX_Pos (12U)\r\n#define USB_EP2R_STAT_RX_Msk (0x3U << USB_EP2R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP2R_STAT_RX     USB_EP2R_STAT_RX_Msk           /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP2R_STAT_RX_0   (0x1U << USB_EP2R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP2R_STAT_RX_1   (0x2U << USB_EP2R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP2R_DTOG_RX_Pos (14U)\r\n#define USB_EP2R_DTOG_RX_Msk (0x1U << USB_EP2R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP2R_DTOG_RX     USB_EP2R_DTOG_RX_Msk           /*!< Data Toggle, for reception transfers */\r\n#define USB_EP2R_CTR_RX_Pos  (15U)\r\n#define USB_EP2R_CTR_RX_Msk  (0x1U << USB_EP2R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP2R_CTR_RX      USB_EP2R_CTR_RX_Msk           /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP3R register  *******************/\r\n#define USB_EP3R_EA_Pos (0U)\r\n#define USB_EP3R_EA_Msk (0xFU << USB_EP3R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP3R_EA     USB_EP3R_EA_Msk           /*!< Endpoint Address */\r\n\r\n#define USB_EP3R_STAT_TX_Pos (4U)\r\n#define USB_EP3R_STAT_TX_Msk (0x3U << USB_EP3R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP3R_STAT_TX     USB_EP3R_STAT_TX_Msk           /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP3R_STAT_TX_0   (0x1U << USB_EP3R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP3R_STAT_TX_1   (0x2U << USB_EP3R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP3R_DTOG_TX_Pos (6U)\r\n#define USB_EP3R_DTOG_TX_Msk (0x1U << USB_EP3R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP3R_DTOG_TX     USB_EP3R_DTOG_TX_Msk           /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP3R_CTR_TX_Pos  (7U)\r\n#define USB_EP3R_CTR_TX_Msk  (0x1U << USB_EP3R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP3R_CTR_TX      USB_EP3R_CTR_TX_Msk           /*!< Correct Transfer for transmission */\r\n#define USB_EP3R_EP_KIND_Pos (8U)\r\n#define USB_EP3R_EP_KIND_Msk (0x1U << USB_EP3R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP3R_EP_KIND     USB_EP3R_EP_KIND_Msk           /*!< Endpoint Kind */\r\n\r\n#define USB_EP3R_EP_TYPE_Pos (9U)\r\n#define USB_EP3R_EP_TYPE_Msk (0x3U << USB_EP3R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP3R_EP_TYPE     USB_EP3R_EP_TYPE_Msk           /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP3R_EP_TYPE_0   (0x1U << USB_EP3R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP3R_EP_TYPE_1   (0x2U << USB_EP3R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP3R_SETUP_Pos (11U)\r\n#define USB_EP3R_SETUP_Msk (0x1U << USB_EP3R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP3R_SETUP     USB_EP3R_SETUP_Msk           /*!< Setup transaction completed */\r\n\r\n#define USB_EP3R_STAT_RX_Pos (12U)\r\n#define USB_EP3R_STAT_RX_Msk (0x3U << USB_EP3R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP3R_STAT_RX     USB_EP3R_STAT_RX_Msk           /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP3R_STAT_RX_0   (0x1U << USB_EP3R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP3R_STAT_RX_1   (0x2U << USB_EP3R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP3R_DTOG_RX_Pos (14U)\r\n#define USB_EP3R_DTOG_RX_Msk (0x1U << USB_EP3R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP3R_DTOG_RX     USB_EP3R_DTOG_RX_Msk           /*!< Data Toggle, for reception transfers */\r\n#define USB_EP3R_CTR_RX_Pos  (15U)\r\n#define USB_EP3R_CTR_RX_Msk  (0x1U << USB_EP3R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP3R_CTR_RX      USB_EP3R_CTR_RX_Msk           /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP4R register  *******************/\r\n#define USB_EP4R_EA_Pos (0U)\r\n#define USB_EP4R_EA_Msk (0xFU << USB_EP4R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP4R_EA     USB_EP4R_EA_Msk           /*!< Endpoint Address */\r\n\r\n#define USB_EP4R_STAT_TX_Pos (4U)\r\n#define USB_EP4R_STAT_TX_Msk (0x3U << USB_EP4R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP4R_STAT_TX     USB_EP4R_STAT_TX_Msk           /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP4R_STAT_TX_0   (0x1U << USB_EP4R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP4R_STAT_TX_1   (0x2U << USB_EP4R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP4R_DTOG_TX_Pos (6U)\r\n#define USB_EP4R_DTOG_TX_Msk (0x1U << USB_EP4R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP4R_DTOG_TX     USB_EP4R_DTOG_TX_Msk           /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP4R_CTR_TX_Pos  (7U)\r\n#define USB_EP4R_CTR_TX_Msk  (0x1U << USB_EP4R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP4R_CTR_TX      USB_EP4R_CTR_TX_Msk           /*!< Correct Transfer for transmission */\r\n#define USB_EP4R_EP_KIND_Pos (8U)\r\n#define USB_EP4R_EP_KIND_Msk (0x1U << USB_EP4R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP4R_EP_KIND     USB_EP4R_EP_KIND_Msk           /*!< Endpoint Kind */\r\n\r\n#define USB_EP4R_EP_TYPE_Pos (9U)\r\n#define USB_EP4R_EP_TYPE_Msk (0x3U << USB_EP4R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP4R_EP_TYPE     USB_EP4R_EP_TYPE_Msk           /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP4R_EP_TYPE_0   (0x1U << USB_EP4R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP4R_EP_TYPE_1   (0x2U << USB_EP4R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP4R_SETUP_Pos (11U)\r\n#define USB_EP4R_SETUP_Msk (0x1U << USB_EP4R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP4R_SETUP     USB_EP4R_SETUP_Msk           /*!< Setup transaction completed */\r\n\r\n#define USB_EP4R_STAT_RX_Pos (12U)\r\n#define USB_EP4R_STAT_RX_Msk (0x3U << USB_EP4R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP4R_STAT_RX     USB_EP4R_STAT_RX_Msk           /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP4R_STAT_RX_0   (0x1U << USB_EP4R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP4R_STAT_RX_1   (0x2U << USB_EP4R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP4R_DTOG_RX_Pos (14U)\r\n#define USB_EP4R_DTOG_RX_Msk (0x1U << USB_EP4R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP4R_DTOG_RX     USB_EP4R_DTOG_RX_Msk           /*!< Data Toggle, for reception transfers */\r\n#define USB_EP4R_CTR_RX_Pos  (15U)\r\n#define USB_EP4R_CTR_RX_Msk  (0x1U << USB_EP4R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP4R_CTR_RX      USB_EP4R_CTR_RX_Msk           /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP5R register  *******************/\r\n#define USB_EP5R_EA_Pos (0U)\r\n#define USB_EP5R_EA_Msk (0xFU << USB_EP5R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP5R_EA     USB_EP5R_EA_Msk           /*!< Endpoint Address */\r\n\r\n#define USB_EP5R_STAT_TX_Pos (4U)\r\n#define USB_EP5R_STAT_TX_Msk (0x3U << USB_EP5R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP5R_STAT_TX     USB_EP5R_STAT_TX_Msk           /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP5R_STAT_TX_0   (0x1U << USB_EP5R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP5R_STAT_TX_1   (0x2U << USB_EP5R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP5R_DTOG_TX_Pos (6U)\r\n#define USB_EP5R_DTOG_TX_Msk (0x1U << USB_EP5R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP5R_DTOG_TX     USB_EP5R_DTOG_TX_Msk           /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP5R_CTR_TX_Pos  (7U)\r\n#define USB_EP5R_CTR_TX_Msk  (0x1U << USB_EP5R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP5R_CTR_TX      USB_EP5R_CTR_TX_Msk           /*!< Correct Transfer for transmission */\r\n#define USB_EP5R_EP_KIND_Pos (8U)\r\n#define USB_EP5R_EP_KIND_Msk (0x1U << USB_EP5R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP5R_EP_KIND     USB_EP5R_EP_KIND_Msk           /*!< Endpoint Kind */\r\n\r\n#define USB_EP5R_EP_TYPE_Pos (9U)\r\n#define USB_EP5R_EP_TYPE_Msk (0x3U << USB_EP5R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP5R_EP_TYPE     USB_EP5R_EP_TYPE_Msk           /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP5R_EP_TYPE_0   (0x1U << USB_EP5R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP5R_EP_TYPE_1   (0x2U << USB_EP5R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP5R_SETUP_Pos (11U)\r\n#define USB_EP5R_SETUP_Msk (0x1U << USB_EP5R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP5R_SETUP     USB_EP5R_SETUP_Msk           /*!< Setup transaction completed */\r\n\r\n#define USB_EP5R_STAT_RX_Pos (12U)\r\n#define USB_EP5R_STAT_RX_Msk (0x3U << USB_EP5R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP5R_STAT_RX     USB_EP5R_STAT_RX_Msk           /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP5R_STAT_RX_0   (0x1U << USB_EP5R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP5R_STAT_RX_1   (0x2U << USB_EP5R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP5R_DTOG_RX_Pos (14U)\r\n#define USB_EP5R_DTOG_RX_Msk (0x1U << USB_EP5R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP5R_DTOG_RX     USB_EP5R_DTOG_RX_Msk           /*!< Data Toggle, for reception transfers */\r\n#define USB_EP5R_CTR_RX_Pos  (15U)\r\n#define USB_EP5R_CTR_RX_Msk  (0x1U << USB_EP5R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP5R_CTR_RX      USB_EP5R_CTR_RX_Msk           /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP6R register  *******************/\r\n#define USB_EP6R_EA_Pos (0U)\r\n#define USB_EP6R_EA_Msk (0xFU << USB_EP6R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP6R_EA     USB_EP6R_EA_Msk           /*!< Endpoint Address */\r\n\r\n#define USB_EP6R_STAT_TX_Pos (4U)\r\n#define USB_EP6R_STAT_TX_Msk (0x3U << USB_EP6R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP6R_STAT_TX     USB_EP6R_STAT_TX_Msk           /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP6R_STAT_TX_0   (0x1U << USB_EP6R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP6R_STAT_TX_1   (0x2U << USB_EP6R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP6R_DTOG_TX_Pos (6U)\r\n#define USB_EP6R_DTOG_TX_Msk (0x1U << USB_EP6R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP6R_DTOG_TX     USB_EP6R_DTOG_TX_Msk           /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP6R_CTR_TX_Pos  (7U)\r\n#define USB_EP6R_CTR_TX_Msk  (0x1U << USB_EP6R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP6R_CTR_TX      USB_EP6R_CTR_TX_Msk           /*!< Correct Transfer for transmission */\r\n#define USB_EP6R_EP_KIND_Pos (8U)\r\n#define USB_EP6R_EP_KIND_Msk (0x1U << USB_EP6R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP6R_EP_KIND     USB_EP6R_EP_KIND_Msk           /*!< Endpoint Kind */\r\n\r\n#define USB_EP6R_EP_TYPE_Pos (9U)\r\n#define USB_EP6R_EP_TYPE_Msk (0x3U << USB_EP6R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP6R_EP_TYPE     USB_EP6R_EP_TYPE_Msk           /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP6R_EP_TYPE_0   (0x1U << USB_EP6R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP6R_EP_TYPE_1   (0x2U << USB_EP6R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP6R_SETUP_Pos (11U)\r\n#define USB_EP6R_SETUP_Msk (0x1U << USB_EP6R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP6R_SETUP     USB_EP6R_SETUP_Msk           /*!< Setup transaction completed */\r\n\r\n#define USB_EP6R_STAT_RX_Pos (12U)\r\n#define USB_EP6R_STAT_RX_Msk (0x3U << USB_EP6R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP6R_STAT_RX     USB_EP6R_STAT_RX_Msk           /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP6R_STAT_RX_0   (0x1U << USB_EP6R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP6R_STAT_RX_1   (0x2U << USB_EP6R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP6R_DTOG_RX_Pos (14U)\r\n#define USB_EP6R_DTOG_RX_Msk (0x1U << USB_EP6R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP6R_DTOG_RX     USB_EP6R_DTOG_RX_Msk           /*!< Data Toggle, for reception transfers */\r\n#define USB_EP6R_CTR_RX_Pos  (15U)\r\n#define USB_EP6R_CTR_RX_Msk  (0x1U << USB_EP6R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP6R_CTR_RX      USB_EP6R_CTR_RX_Msk           /*!< Correct Transfer for reception */\r\n\r\n/*******************  Bit definition for USB_EP7R register  *******************/\r\n#define USB_EP7R_EA_Pos (0U)\r\n#define USB_EP7R_EA_Msk (0xFU << USB_EP7R_EA_Pos) /*!< 0x0000000F */\r\n#define USB_EP7R_EA     USB_EP7R_EA_Msk           /*!< Endpoint Address */\r\n\r\n#define USB_EP7R_STAT_TX_Pos (4U)\r\n#define USB_EP7R_STAT_TX_Msk (0x3U << USB_EP7R_STAT_TX_Pos) /*!< 0x00000030 */\r\n#define USB_EP7R_STAT_TX     USB_EP7R_STAT_TX_Msk           /*!< STAT_TX[1:0] bits (Status bits, for transmission transfers) */\r\n#define USB_EP7R_STAT_TX_0   (0x1U << USB_EP7R_STAT_TX_Pos) /*!< 0x00000010 */\r\n#define USB_EP7R_STAT_TX_1   (0x2U << USB_EP7R_STAT_TX_Pos) /*!< 0x00000020 */\r\n\r\n#define USB_EP7R_DTOG_TX_Pos (6U)\r\n#define USB_EP7R_DTOG_TX_Msk (0x1U << USB_EP7R_DTOG_TX_Pos) /*!< 0x00000040 */\r\n#define USB_EP7R_DTOG_TX     USB_EP7R_DTOG_TX_Msk           /*!< Data Toggle, for transmission transfers */\r\n#define USB_EP7R_CTR_TX_Pos  (7U)\r\n#define USB_EP7R_CTR_TX_Msk  (0x1U << USB_EP7R_CTR_TX_Pos) /*!< 0x00000080 */\r\n#define USB_EP7R_CTR_TX      USB_EP7R_CTR_TX_Msk           /*!< Correct Transfer for transmission */\r\n#define USB_EP7R_EP_KIND_Pos (8U)\r\n#define USB_EP7R_EP_KIND_Msk (0x1U << USB_EP7R_EP_KIND_Pos) /*!< 0x00000100 */\r\n#define USB_EP7R_EP_KIND     USB_EP7R_EP_KIND_Msk           /*!< Endpoint Kind */\r\n\r\n#define USB_EP7R_EP_TYPE_Pos (9U)\r\n#define USB_EP7R_EP_TYPE_Msk (0x3U << USB_EP7R_EP_TYPE_Pos) /*!< 0x00000600 */\r\n#define USB_EP7R_EP_TYPE     USB_EP7R_EP_TYPE_Msk           /*!< EP_TYPE[1:0] bits (Endpoint type) */\r\n#define USB_EP7R_EP_TYPE_0   (0x1U << USB_EP7R_EP_TYPE_Pos) /*!< 0x00000200 */\r\n#define USB_EP7R_EP_TYPE_1   (0x2U << USB_EP7R_EP_TYPE_Pos) /*!< 0x00000400 */\r\n\r\n#define USB_EP7R_SETUP_Pos (11U)\r\n#define USB_EP7R_SETUP_Msk (0x1U << USB_EP7R_SETUP_Pos) /*!< 0x00000800 */\r\n#define USB_EP7R_SETUP     USB_EP7R_SETUP_Msk           /*!< Setup transaction completed */\r\n\r\n#define USB_EP7R_STAT_RX_Pos (12U)\r\n#define USB_EP7R_STAT_RX_Msk (0x3U << USB_EP7R_STAT_RX_Pos) /*!< 0x00003000 */\r\n#define USB_EP7R_STAT_RX     USB_EP7R_STAT_RX_Msk           /*!< STAT_RX[1:0] bits (Status bits, for reception transfers) */\r\n#define USB_EP7R_STAT_RX_0   (0x1U << USB_EP7R_STAT_RX_Pos) /*!< 0x00001000 */\r\n#define USB_EP7R_STAT_RX_1   (0x2U << USB_EP7R_STAT_RX_Pos) /*!< 0x00002000 */\r\n\r\n#define USB_EP7R_DTOG_RX_Pos (14U)\r\n#define USB_EP7R_DTOG_RX_Msk (0x1U << USB_EP7R_DTOG_RX_Pos) /*!< 0x00004000 */\r\n#define USB_EP7R_DTOG_RX     USB_EP7R_DTOG_RX_Msk           /*!< Data Toggle, for reception transfers */\r\n#define USB_EP7R_CTR_RX_Pos  (15U)\r\n#define USB_EP7R_CTR_RX_Msk  (0x1U << USB_EP7R_CTR_RX_Pos) /*!< 0x00008000 */\r\n#define USB_EP7R_CTR_RX      USB_EP7R_CTR_RX_Msk           /*!< Correct Transfer for reception */\r\n\r\n/*!< Common registers */\r\n/*******************  Bit definition for USB_CNTR register  *******************/\r\n#define USB_CNTR_FRES_Pos    (0U)\r\n#define USB_CNTR_FRES_Msk    (0x1U << USB_CNTR_FRES_Pos) /*!< 0x00000001 */\r\n#define USB_CNTR_FRES        USB_CNTR_FRES_Msk           /*!< Force USB Reset */\r\n#define USB_CNTR_PDWN_Pos    (1U)\r\n#define USB_CNTR_PDWN_Msk    (0x1U << USB_CNTR_PDWN_Pos) /*!< 0x00000002 */\r\n#define USB_CNTR_PDWN        USB_CNTR_PDWN_Msk           /*!< Power down */\r\n#define USB_CNTR_LP_MODE_Pos (2U)\r\n#define USB_CNTR_LP_MODE_Msk (0x1U << USB_CNTR_LP_MODE_Pos) /*!< 0x00000004 */\r\n#define USB_CNTR_LP_MODE     USB_CNTR_LP_MODE_Msk           /*!< Low-power mode */\r\n#define USB_CNTR_FSUSP_Pos   (3U)\r\n#define USB_CNTR_FSUSP_Msk   (0x1U << USB_CNTR_FSUSP_Pos) /*!< 0x00000008 */\r\n#define USB_CNTR_FSUSP       USB_CNTR_FSUSP_Msk           /*!< Force suspend */\r\n#define USB_CNTR_RESUME_Pos  (4U)\r\n#define USB_CNTR_RESUME_Msk  (0x1U << USB_CNTR_RESUME_Pos) /*!< 0x00000010 */\r\n#define USB_CNTR_RESUME      USB_CNTR_RESUME_Msk           /*!< Resume request */\r\n#define USB_CNTR_ESOFM_Pos   (8U)\r\n#define USB_CNTR_ESOFM_Msk   (0x1U << USB_CNTR_ESOFM_Pos) /*!< 0x00000100 */\r\n#define USB_CNTR_ESOFM       USB_CNTR_ESOFM_Msk           /*!< Expected Start Of Frame Interrupt Mask */\r\n#define USB_CNTR_SOFM_Pos    (9U)\r\n#define USB_CNTR_SOFM_Msk    (0x1U << USB_CNTR_SOFM_Pos) /*!< 0x00000200 */\r\n#define USB_CNTR_SOFM        USB_CNTR_SOFM_Msk           /*!< Start Of Frame Interrupt Mask */\r\n#define USB_CNTR_RESETM_Pos  (10U)\r\n#define USB_CNTR_RESETM_Msk  (0x1U << USB_CNTR_RESETM_Pos) /*!< 0x00000400 */\r\n#define USB_CNTR_RESETM      USB_CNTR_RESETM_Msk           /*!< RESET Interrupt Mask */\r\n#define USB_CNTR_SUSPM_Pos   (11U)\r\n#define USB_CNTR_SUSPM_Msk   (0x1U << USB_CNTR_SUSPM_Pos) /*!< 0x00000800 */\r\n#define USB_CNTR_SUSPM       USB_CNTR_SUSPM_Msk           /*!< Suspend mode Interrupt Mask */\r\n#define USB_CNTR_WKUPM_Pos   (12U)\r\n#define USB_CNTR_WKUPM_Msk   (0x1U << USB_CNTR_WKUPM_Pos) /*!< 0x00001000 */\r\n#define USB_CNTR_WKUPM       USB_CNTR_WKUPM_Msk           /*!< Wakeup Interrupt Mask */\r\n#define USB_CNTR_ERRM_Pos    (13U)\r\n#define USB_CNTR_ERRM_Msk    (0x1U << USB_CNTR_ERRM_Pos) /*!< 0x00002000 */\r\n#define USB_CNTR_ERRM        USB_CNTR_ERRM_Msk           /*!< Error Interrupt Mask */\r\n#define USB_CNTR_PMAOVRM_Pos (14U)\r\n#define USB_CNTR_PMAOVRM_Msk (0x1U << USB_CNTR_PMAOVRM_Pos) /*!< 0x00004000 */\r\n#define USB_CNTR_PMAOVRM     USB_CNTR_PMAOVRM_Msk           /*!< Packet Memory Area Over / Underrun Interrupt Mask */\r\n#define USB_CNTR_CTRM_Pos    (15U)\r\n#define USB_CNTR_CTRM_Msk    (0x1U << USB_CNTR_CTRM_Pos) /*!< 0x00008000 */\r\n#define USB_CNTR_CTRM        USB_CNTR_CTRM_Msk           /*!< Correct Transfer Interrupt Mask */\r\n\r\n/*******************  Bit definition for USB_ISTR register  *******************/\r\n#define USB_ISTR_EP_ID_Pos  (0U)\r\n#define USB_ISTR_EP_ID_Msk  (0xFU << USB_ISTR_EP_ID_Pos) /*!< 0x0000000F */\r\n#define USB_ISTR_EP_ID      USB_ISTR_EP_ID_Msk           /*!< Endpoint Identifier */\r\n#define USB_ISTR_DIR_Pos    (4U)\r\n#define USB_ISTR_DIR_Msk    (0x1U << USB_ISTR_DIR_Pos) /*!< 0x00000010 */\r\n#define USB_ISTR_DIR        USB_ISTR_DIR_Msk           /*!< Direction of transaction */\r\n#define USB_ISTR_ESOF_Pos   (8U)\r\n#define USB_ISTR_ESOF_Msk   (0x1U << USB_ISTR_ESOF_Pos) /*!< 0x00000100 */\r\n#define USB_ISTR_ESOF       USB_ISTR_ESOF_Msk           /*!< Expected Start Of Frame */\r\n#define USB_ISTR_SOF_Pos    (9U)\r\n#define USB_ISTR_SOF_Msk    (0x1U << USB_ISTR_SOF_Pos) /*!< 0x00000200 */\r\n#define USB_ISTR_SOF        USB_ISTR_SOF_Msk           /*!< Start Of Frame */\r\n#define USB_ISTR_RESET_Pos  (10U)\r\n#define USB_ISTR_RESET_Msk  (0x1U << USB_ISTR_RESET_Pos) /*!< 0x00000400 */\r\n#define USB_ISTR_RESET      USB_ISTR_RESET_Msk           /*!< USB RESET request */\r\n#define USB_ISTR_SUSP_Pos   (11U)\r\n#define USB_ISTR_SUSP_Msk   (0x1U << USB_ISTR_SUSP_Pos) /*!< 0x00000800 */\r\n#define USB_ISTR_SUSP       USB_ISTR_SUSP_Msk           /*!< Suspend mode request */\r\n#define USB_ISTR_WKUP_Pos   (12U)\r\n#define USB_ISTR_WKUP_Msk   (0x1U << USB_ISTR_WKUP_Pos) /*!< 0x00001000 */\r\n#define USB_ISTR_WKUP       USB_ISTR_WKUP_Msk           /*!< Wake up */\r\n#define USB_ISTR_ERR_Pos    (13U)\r\n#define USB_ISTR_ERR_Msk    (0x1U << USB_ISTR_ERR_Pos) /*!< 0x00002000 */\r\n#define USB_ISTR_ERR        USB_ISTR_ERR_Msk           /*!< Error */\r\n#define USB_ISTR_PMAOVR_Pos (14U)\r\n#define USB_ISTR_PMAOVR_Msk (0x1U << USB_ISTR_PMAOVR_Pos) /*!< 0x00004000 */\r\n#define USB_ISTR_PMAOVR     USB_ISTR_PMAOVR_Msk           /*!< Packet Memory Area Over / Underrun */\r\n#define USB_ISTR_CTR_Pos    (15U)\r\n#define USB_ISTR_CTR_Msk    (0x1U << USB_ISTR_CTR_Pos) /*!< 0x00008000 */\r\n#define USB_ISTR_CTR        USB_ISTR_CTR_Msk           /*!< Correct Transfer */\r\n\r\n/*******************  Bit definition for USB_FNR register  ********************/\r\n#define USB_FNR_FN_Pos   (0U)\r\n#define USB_FNR_FN_Msk   (0x7FFU << USB_FNR_FN_Pos) /*!< 0x000007FF */\r\n#define USB_FNR_FN       USB_FNR_FN_Msk             /*!< Frame Number */\r\n#define USB_FNR_LSOF_Pos (11U)\r\n#define USB_FNR_LSOF_Msk (0x3U << USB_FNR_LSOF_Pos) /*!< 0x00001800 */\r\n#define USB_FNR_LSOF     USB_FNR_LSOF_Msk           /*!< Lost SOF */\r\n#define USB_FNR_LCK_Pos  (13U)\r\n#define USB_FNR_LCK_Msk  (0x1U << USB_FNR_LCK_Pos) /*!< 0x00002000 */\r\n#define USB_FNR_LCK      USB_FNR_LCK_Msk           /*!< Locked */\r\n#define USB_FNR_RXDM_Pos (14U)\r\n#define USB_FNR_RXDM_Msk (0x1U << USB_FNR_RXDM_Pos) /*!< 0x00004000 */\r\n#define USB_FNR_RXDM     USB_FNR_RXDM_Msk           /*!< Receive Data - Line Status */\r\n#define USB_FNR_RXDP_Pos (15U)\r\n#define USB_FNR_RXDP_Msk (0x1U << USB_FNR_RXDP_Pos) /*!< 0x00008000 */\r\n#define USB_FNR_RXDP     USB_FNR_RXDP_Msk           /*!< Receive Data + Line Status */\r\n\r\n/******************  Bit definition for USB_DADDR register  *******************/\r\n#define USB_DADDR_ADD_Pos  (0U)\r\n#define USB_DADDR_ADD_Msk  (0x7FU << USB_DADDR_ADD_Pos) /*!< 0x0000007F */\r\n#define USB_DADDR_ADD      USB_DADDR_ADD_Msk            /*!< ADD[6:0] bits (Device Address) */\r\n#define USB_DADDR_ADD0_Pos (0U)\r\n#define USB_DADDR_ADD0_Msk (0x1U << USB_DADDR_ADD0_Pos) /*!< 0x00000001 */\r\n#define USB_DADDR_ADD0     USB_DADDR_ADD0_Msk           /*!< Bit 0 */\r\n#define USB_DADDR_ADD1_Pos (1U)\r\n#define USB_DADDR_ADD1_Msk (0x1U << USB_DADDR_ADD1_Pos) /*!< 0x00000002 */\r\n#define USB_DADDR_ADD1     USB_DADDR_ADD1_Msk           /*!< Bit 1 */\r\n#define USB_DADDR_ADD2_Pos (2U)\r\n#define USB_DADDR_ADD2_Msk (0x1U << USB_DADDR_ADD2_Pos) /*!< 0x00000004 */\r\n#define USB_DADDR_ADD2     USB_DADDR_ADD2_Msk           /*!< Bit 2 */\r\n#define USB_DADDR_ADD3_Pos (3U)\r\n#define USB_DADDR_ADD3_Msk (0x1U << USB_DADDR_ADD3_Pos) /*!< 0x00000008 */\r\n#define USB_DADDR_ADD3     USB_DADDR_ADD3_Msk           /*!< Bit 3 */\r\n#define USB_DADDR_ADD4_Pos (4U)\r\n#define USB_DADDR_ADD4_Msk (0x1U << USB_DADDR_ADD4_Pos) /*!< 0x00000010 */\r\n#define USB_DADDR_ADD4     USB_DADDR_ADD4_Msk           /*!< Bit 4 */\r\n#define USB_DADDR_ADD5_Pos (5U)\r\n#define USB_DADDR_ADD5_Msk (0x1U << USB_DADDR_ADD5_Pos) /*!< 0x00000020 */\r\n#define USB_DADDR_ADD5     USB_DADDR_ADD5_Msk           /*!< Bit 5 */\r\n#define USB_DADDR_ADD6_Pos (6U)\r\n#define USB_DADDR_ADD6_Msk (0x1U << USB_DADDR_ADD6_Pos) /*!< 0x00000040 */\r\n#define USB_DADDR_ADD6     USB_DADDR_ADD6_Msk           /*!< Bit 6 */\r\n\r\n#define USB_DADDR_EF_Pos (7U)\r\n#define USB_DADDR_EF_Msk (0x1U << USB_DADDR_EF_Pos) /*!< 0x00000080 */\r\n#define USB_DADDR_EF     USB_DADDR_EF_Msk           /*!< Enable Function */\r\n\r\n/******************  Bit definition for USB_BTABLE register  ******************/\r\n#define USB_BTABLE_BTABLE_Pos (3U)\r\n#define USB_BTABLE_BTABLE_Msk (0x1FFFU << USB_BTABLE_BTABLE_Pos) /*!< 0x0000FFF8 */\r\n#define USB_BTABLE_BTABLE     USB_BTABLE_BTABLE_Msk              /*!< Buffer Table */\r\n\r\n/*!< Buffer descriptor table */\r\n/*****************  Bit definition for USB_ADDR0_TX register  *****************/\r\n#define USB_ADDR0_TX_ADDR0_TX_Pos (1U)\r\n#define USB_ADDR0_TX_ADDR0_TX_Msk (0x7FFFU << USB_ADDR0_TX_ADDR0_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR0_TX_ADDR0_TX     USB_ADDR0_TX_ADDR0_TX_Msk              /*!< Transmission Buffer Address 0 */\r\n\r\n/*****************  Bit definition for USB_ADDR1_TX register  *****************/\r\n#define USB_ADDR1_TX_ADDR1_TX_Pos (1U)\r\n#define USB_ADDR1_TX_ADDR1_TX_Msk (0x7FFFU << USB_ADDR1_TX_ADDR1_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR1_TX_ADDR1_TX     USB_ADDR1_TX_ADDR1_TX_Msk              /*!< Transmission Buffer Address 1 */\r\n\r\n/*****************  Bit definition for USB_ADDR2_TX register  *****************/\r\n#define USB_ADDR2_TX_ADDR2_TX_Pos (1U)\r\n#define USB_ADDR2_TX_ADDR2_TX_Msk (0x7FFFU << USB_ADDR2_TX_ADDR2_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR2_TX_ADDR2_TX     USB_ADDR2_TX_ADDR2_TX_Msk              /*!< Transmission Buffer Address 2 */\r\n\r\n/*****************  Bit definition for USB_ADDR3_TX register  *****************/\r\n#define USB_ADDR3_TX_ADDR3_TX_Pos (1U)\r\n#define USB_ADDR3_TX_ADDR3_TX_Msk (0x7FFFU << USB_ADDR3_TX_ADDR3_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR3_TX_ADDR3_TX     USB_ADDR3_TX_ADDR3_TX_Msk              /*!< Transmission Buffer Address 3 */\r\n\r\n/*****************  Bit definition for USB_ADDR4_TX register  *****************/\r\n#define USB_ADDR4_TX_ADDR4_TX_Pos (1U)\r\n#define USB_ADDR4_TX_ADDR4_TX_Msk (0x7FFFU << USB_ADDR4_TX_ADDR4_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR4_TX_ADDR4_TX     USB_ADDR4_TX_ADDR4_TX_Msk              /*!< Transmission Buffer Address 4 */\r\n\r\n/*****************  Bit definition for USB_ADDR5_TX register  *****************/\r\n#define USB_ADDR5_TX_ADDR5_TX_Pos (1U)\r\n#define USB_ADDR5_TX_ADDR5_TX_Msk (0x7FFFU << USB_ADDR5_TX_ADDR5_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR5_TX_ADDR5_TX     USB_ADDR5_TX_ADDR5_TX_Msk              /*!< Transmission Buffer Address 5 */\r\n\r\n/*****************  Bit definition for USB_ADDR6_TX register  *****************/\r\n#define USB_ADDR6_TX_ADDR6_TX_Pos (1U)\r\n#define USB_ADDR6_TX_ADDR6_TX_Msk (0x7FFFU << USB_ADDR6_TX_ADDR6_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR6_TX_ADDR6_TX     USB_ADDR6_TX_ADDR6_TX_Msk              /*!< Transmission Buffer Address 6 */\r\n\r\n/*****************  Bit definition for USB_ADDR7_TX register  *****************/\r\n#define USB_ADDR7_TX_ADDR7_TX_Pos (1U)\r\n#define USB_ADDR7_TX_ADDR7_TX_Msk (0x7FFFU << USB_ADDR7_TX_ADDR7_TX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR7_TX_ADDR7_TX     USB_ADDR7_TX_ADDR7_TX_Msk              /*!< Transmission Buffer Address 7 */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/*****************  Bit definition for USB_COUNT0_TX register  ****************/\r\n#define USB_COUNT0_TX_COUNT0_TX_Pos (0U)\r\n#define USB_COUNT0_TX_COUNT0_TX_Msk (0x3FFU << USB_COUNT0_TX_COUNT0_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT0_TX_COUNT0_TX     USB_COUNT0_TX_COUNT0_TX_Msk             /*!< Transmission Byte Count 0 */\r\n\r\n/*****************  Bit definition for USB_COUNT1_TX register  ****************/\r\n#define USB_COUNT1_TX_COUNT1_TX_Pos (0U)\r\n#define USB_COUNT1_TX_COUNT1_TX_Msk (0x3FFU << USB_COUNT1_TX_COUNT1_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT1_TX_COUNT1_TX     USB_COUNT1_TX_COUNT1_TX_Msk             /*!< Transmission Byte Count 1 */\r\n\r\n/*****************  Bit definition for USB_COUNT2_TX register  ****************/\r\n#define USB_COUNT2_TX_COUNT2_TX_Pos (0U)\r\n#define USB_COUNT2_TX_COUNT2_TX_Msk (0x3FFU << USB_COUNT2_TX_COUNT2_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT2_TX_COUNT2_TX     USB_COUNT2_TX_COUNT2_TX_Msk             /*!< Transmission Byte Count 2 */\r\n\r\n/*****************  Bit definition for USB_COUNT3_TX register  ****************/\r\n#define USB_COUNT3_TX_COUNT3_TX_Pos (0U)\r\n#define USB_COUNT3_TX_COUNT3_TX_Msk (0x3FFU << USB_COUNT3_TX_COUNT3_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT3_TX_COUNT3_TX     USB_COUNT3_TX_COUNT3_TX_Msk             /*!< Transmission Byte Count 3 */\r\n\r\n/*****************  Bit definition for USB_COUNT4_TX register  ****************/\r\n#define USB_COUNT4_TX_COUNT4_TX_Pos (0U)\r\n#define USB_COUNT4_TX_COUNT4_TX_Msk (0x3FFU << USB_COUNT4_TX_COUNT4_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT4_TX_COUNT4_TX     USB_COUNT4_TX_COUNT4_TX_Msk             /*!< Transmission Byte Count 4 */\r\n\r\n/*****************  Bit definition for USB_COUNT5_TX register  ****************/\r\n#define USB_COUNT5_TX_COUNT5_TX_Pos (0U)\r\n#define USB_COUNT5_TX_COUNT5_TX_Msk (0x3FFU << USB_COUNT5_TX_COUNT5_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT5_TX_COUNT5_TX     USB_COUNT5_TX_COUNT5_TX_Msk             /*!< Transmission Byte Count 5 */\r\n\r\n/*****************  Bit definition for USB_COUNT6_TX register  ****************/\r\n#define USB_COUNT6_TX_COUNT6_TX_Pos (0U)\r\n#define USB_COUNT6_TX_COUNT6_TX_Msk (0x3FFU << USB_COUNT6_TX_COUNT6_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT6_TX_COUNT6_TX     USB_COUNT6_TX_COUNT6_TX_Msk             /*!< Transmission Byte Count 6 */\r\n\r\n/*****************  Bit definition for USB_COUNT7_TX register  ****************/\r\n#define USB_COUNT7_TX_COUNT7_TX_Pos (0U)\r\n#define USB_COUNT7_TX_COUNT7_TX_Msk (0x3FFU << USB_COUNT7_TX_COUNT7_TX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT7_TX_COUNT7_TX     USB_COUNT7_TX_COUNT7_TX_Msk             /*!< Transmission Byte Count 7 */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/****************  Bit definition for USB_COUNT0_TX_0 register  ***************/\r\n#define USB_COUNT0_TX_0_COUNT0_TX_0 0x000003FFU /*!< Transmission Byte Count 0 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT0_TX_1 register  ***************/\r\n#define USB_COUNT0_TX_1_COUNT0_TX_1 0x03FF0000U /*!< Transmission Byte Count 0 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT1_TX_0 register  ***************/\r\n#define USB_COUNT1_TX_0_COUNT1_TX_0 0x000003FFU /*!< Transmission Byte Count 1 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT1_TX_1 register  ***************/\r\n#define USB_COUNT1_TX_1_COUNT1_TX_1 0x03FF0000U /*!< Transmission Byte Count 1 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT2_TX_0 register  ***************/\r\n#define USB_COUNT2_TX_0_COUNT2_TX_0 0x000003FFU /*!< Transmission Byte Count 2 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT2_TX_1 register  ***************/\r\n#define USB_COUNT2_TX_1_COUNT2_TX_1 0x03FF0000U /*!< Transmission Byte Count 2 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT3_TX_0 register  ***************/\r\n#define USB_COUNT3_TX_0_COUNT3_TX_0 0x000003FFU /*!< Transmission Byte Count 3 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT3_TX_1 register  ***************/\r\n#define USB_COUNT3_TX_1_COUNT3_TX_1 0x03FF0000U /*!< Transmission Byte Count 3 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT4_TX_0 register  ***************/\r\n#define USB_COUNT4_TX_0_COUNT4_TX_0 0x000003FFU /*!< Transmission Byte Count 4 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT4_TX_1 register  ***************/\r\n#define USB_COUNT4_TX_1_COUNT4_TX_1 0x03FF0000U /*!< Transmission Byte Count 4 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT5_TX_0 register  ***************/\r\n#define USB_COUNT5_TX_0_COUNT5_TX_0 0x000003FFU /*!< Transmission Byte Count 5 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT5_TX_1 register  ***************/\r\n#define USB_COUNT5_TX_1_COUNT5_TX_1 0x03FF0000U /*!< Transmission Byte Count 5 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT6_TX_0 register  ***************/\r\n#define USB_COUNT6_TX_0_COUNT6_TX_0 0x000003FFU /*!< Transmission Byte Count 6 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT6_TX_1 register  ***************/\r\n#define USB_COUNT6_TX_1_COUNT6_TX_1 0x03FF0000U /*!< Transmission Byte Count 6 (high) */\r\n\r\n/****************  Bit definition for USB_COUNT7_TX_0 register  ***************/\r\n#define USB_COUNT7_TX_0_COUNT7_TX_0 0x000003FFU /*!< Transmission Byte Count 7 (low) */\r\n\r\n/****************  Bit definition for USB_COUNT7_TX_1 register  ***************/\r\n#define USB_COUNT7_TX_1_COUNT7_TX_1 0x03FF0000U /*!< Transmission Byte Count 7 (high) */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/*****************  Bit definition for USB_ADDR0_RX register  *****************/\r\n#define USB_ADDR0_RX_ADDR0_RX_Pos (1U)\r\n#define USB_ADDR0_RX_ADDR0_RX_Msk (0x7FFFU << USB_ADDR0_RX_ADDR0_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR0_RX_ADDR0_RX     USB_ADDR0_RX_ADDR0_RX_Msk              /*!< Reception Buffer Address 0 */\r\n\r\n/*****************  Bit definition for USB_ADDR1_RX register  *****************/\r\n#define USB_ADDR1_RX_ADDR1_RX_Pos (1U)\r\n#define USB_ADDR1_RX_ADDR1_RX_Msk (0x7FFFU << USB_ADDR1_RX_ADDR1_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR1_RX_ADDR1_RX     USB_ADDR1_RX_ADDR1_RX_Msk              /*!< Reception Buffer Address 1 */\r\n\r\n/*****************  Bit definition for USB_ADDR2_RX register  *****************/\r\n#define USB_ADDR2_RX_ADDR2_RX_Pos (1U)\r\n#define USB_ADDR2_RX_ADDR2_RX_Msk (0x7FFFU << USB_ADDR2_RX_ADDR2_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR2_RX_ADDR2_RX     USB_ADDR2_RX_ADDR2_RX_Msk              /*!< Reception Buffer Address 2 */\r\n\r\n/*****************  Bit definition for USB_ADDR3_RX register  *****************/\r\n#define USB_ADDR3_RX_ADDR3_RX_Pos (1U)\r\n#define USB_ADDR3_RX_ADDR3_RX_Msk (0x7FFFU << USB_ADDR3_RX_ADDR3_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR3_RX_ADDR3_RX     USB_ADDR3_RX_ADDR3_RX_Msk              /*!< Reception Buffer Address 3 */\r\n\r\n/*****************  Bit definition for USB_ADDR4_RX register  *****************/\r\n#define USB_ADDR4_RX_ADDR4_RX_Pos (1U)\r\n#define USB_ADDR4_RX_ADDR4_RX_Msk (0x7FFFU << USB_ADDR4_RX_ADDR4_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR4_RX_ADDR4_RX     USB_ADDR4_RX_ADDR4_RX_Msk              /*!< Reception Buffer Address 4 */\r\n\r\n/*****************  Bit definition for USB_ADDR5_RX register  *****************/\r\n#define USB_ADDR5_RX_ADDR5_RX_Pos (1U)\r\n#define USB_ADDR5_RX_ADDR5_RX_Msk (0x7FFFU << USB_ADDR5_RX_ADDR5_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR5_RX_ADDR5_RX     USB_ADDR5_RX_ADDR5_RX_Msk              /*!< Reception Buffer Address 5 */\r\n\r\n/*****************  Bit definition for USB_ADDR6_RX register  *****************/\r\n#define USB_ADDR6_RX_ADDR6_RX_Pos (1U)\r\n#define USB_ADDR6_RX_ADDR6_RX_Msk (0x7FFFU << USB_ADDR6_RX_ADDR6_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR6_RX_ADDR6_RX     USB_ADDR6_RX_ADDR6_RX_Msk              /*!< Reception Buffer Address 6 */\r\n\r\n/*****************  Bit definition for USB_ADDR7_RX register  *****************/\r\n#define USB_ADDR7_RX_ADDR7_RX_Pos (1U)\r\n#define USB_ADDR7_RX_ADDR7_RX_Msk (0x7FFFU << USB_ADDR7_RX_ADDR7_RX_Pos) /*!< 0x0000FFFE */\r\n#define USB_ADDR7_RX_ADDR7_RX     USB_ADDR7_RX_ADDR7_RX_Msk              /*!< Reception Buffer Address 7 */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/*****************  Bit definition for USB_COUNT0_RX register  ****************/\r\n#define USB_COUNT0_RX_COUNT0_RX_Pos (0U)\r\n#define USB_COUNT0_RX_COUNT0_RX_Msk (0x3FFU << USB_COUNT0_RX_COUNT0_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT0_RX_COUNT0_RX     USB_COUNT0_RX_COUNT0_RX_Msk             /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT0_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT0_RX_NUM_BLOCK_Msk (0x1FU << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT0_RX_NUM_BLOCK     USB_COUNT0_RX_NUM_BLOCK_Msk            /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT0_RX_NUM_BLOCK_0   (0x01U << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT0_RX_NUM_BLOCK_1   (0x02U << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT0_RX_NUM_BLOCK_2   (0x04U << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT0_RX_NUM_BLOCK_3   (0x08U << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT0_RX_NUM_BLOCK_4   (0x10U << USB_COUNT0_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT0_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT0_RX_BLSIZE_Msk (0x1U << USB_COUNT0_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT0_RX_BLSIZE     USB_COUNT0_RX_BLSIZE_Msk           /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT1_RX register  ****************/\r\n#define USB_COUNT1_RX_COUNT1_RX_Pos (0U)\r\n#define USB_COUNT1_RX_COUNT1_RX_Msk (0x3FFU << USB_COUNT1_RX_COUNT1_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT1_RX_COUNT1_RX     USB_COUNT1_RX_COUNT1_RX_Msk             /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT1_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT1_RX_NUM_BLOCK_Msk (0x1FU << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT1_RX_NUM_BLOCK     USB_COUNT1_RX_NUM_BLOCK_Msk            /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT1_RX_NUM_BLOCK_0   (0x01U << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT1_RX_NUM_BLOCK_1   (0x02U << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT1_RX_NUM_BLOCK_2   (0x04U << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT1_RX_NUM_BLOCK_3   (0x08U << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT1_RX_NUM_BLOCK_4   (0x10U << USB_COUNT1_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT1_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT1_RX_BLSIZE_Msk (0x1U << USB_COUNT1_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT1_RX_BLSIZE     USB_COUNT1_RX_BLSIZE_Msk           /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT2_RX register  ****************/\r\n#define USB_COUNT2_RX_COUNT2_RX_Pos (0U)\r\n#define USB_COUNT2_RX_COUNT2_RX_Msk (0x3FFU << USB_COUNT2_RX_COUNT2_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT2_RX_COUNT2_RX     USB_COUNT2_RX_COUNT2_RX_Msk             /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT2_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT2_RX_NUM_BLOCK_Msk (0x1FU << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT2_RX_NUM_BLOCK     USB_COUNT2_RX_NUM_BLOCK_Msk            /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT2_RX_NUM_BLOCK_0   (0x01U << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT2_RX_NUM_BLOCK_1   (0x02U << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT2_RX_NUM_BLOCK_2   (0x04U << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT2_RX_NUM_BLOCK_3   (0x08U << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT2_RX_NUM_BLOCK_4   (0x10U << USB_COUNT2_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT2_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT2_RX_BLSIZE_Msk (0x1U << USB_COUNT2_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT2_RX_BLSIZE     USB_COUNT2_RX_BLSIZE_Msk           /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT3_RX register  ****************/\r\n#define USB_COUNT3_RX_COUNT3_RX_Pos (0U)\r\n#define USB_COUNT3_RX_COUNT3_RX_Msk (0x3FFU << USB_COUNT3_RX_COUNT3_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT3_RX_COUNT3_RX     USB_COUNT3_RX_COUNT3_RX_Msk             /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT3_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT3_RX_NUM_BLOCK_Msk (0x1FU << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT3_RX_NUM_BLOCK     USB_COUNT3_RX_NUM_BLOCK_Msk            /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT3_RX_NUM_BLOCK_0   (0x01U << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT3_RX_NUM_BLOCK_1   (0x02U << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT3_RX_NUM_BLOCK_2   (0x04U << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT3_RX_NUM_BLOCK_3   (0x08U << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT3_RX_NUM_BLOCK_4   (0x10U << USB_COUNT3_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT3_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT3_RX_BLSIZE_Msk (0x1U << USB_COUNT3_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT3_RX_BLSIZE     USB_COUNT3_RX_BLSIZE_Msk           /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT4_RX register  ****************/\r\n#define USB_COUNT4_RX_COUNT4_RX_Pos (0U)\r\n#define USB_COUNT4_RX_COUNT4_RX_Msk (0x3FFU << USB_COUNT4_RX_COUNT4_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT4_RX_COUNT4_RX     USB_COUNT4_RX_COUNT4_RX_Msk             /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT4_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT4_RX_NUM_BLOCK_Msk (0x1FU << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT4_RX_NUM_BLOCK     USB_COUNT4_RX_NUM_BLOCK_Msk            /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT4_RX_NUM_BLOCK_0   (0x01U << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT4_RX_NUM_BLOCK_1   (0x02U << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT4_RX_NUM_BLOCK_2   (0x04U << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT4_RX_NUM_BLOCK_3   (0x08U << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT4_RX_NUM_BLOCK_4   (0x10U << USB_COUNT4_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT4_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT4_RX_BLSIZE_Msk (0x1U << USB_COUNT4_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT4_RX_BLSIZE     USB_COUNT4_RX_BLSIZE_Msk           /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT5_RX register  ****************/\r\n#define USB_COUNT5_RX_COUNT5_RX_Pos (0U)\r\n#define USB_COUNT5_RX_COUNT5_RX_Msk (0x3FFU << USB_COUNT5_RX_COUNT5_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT5_RX_COUNT5_RX     USB_COUNT5_RX_COUNT5_RX_Msk             /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT5_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT5_RX_NUM_BLOCK_Msk (0x1FU << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT5_RX_NUM_BLOCK     USB_COUNT5_RX_NUM_BLOCK_Msk            /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT5_RX_NUM_BLOCK_0   (0x01U << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT5_RX_NUM_BLOCK_1   (0x02U << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT5_RX_NUM_BLOCK_2   (0x04U << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT5_RX_NUM_BLOCK_3   (0x08U << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT5_RX_NUM_BLOCK_4   (0x10U << USB_COUNT5_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT5_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT5_RX_BLSIZE_Msk (0x1U << USB_COUNT5_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT5_RX_BLSIZE     USB_COUNT5_RX_BLSIZE_Msk           /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT6_RX register  ****************/\r\n#define USB_COUNT6_RX_COUNT6_RX_Pos (0U)\r\n#define USB_COUNT6_RX_COUNT6_RX_Msk (0x3FFU << USB_COUNT6_RX_COUNT6_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT6_RX_COUNT6_RX     USB_COUNT6_RX_COUNT6_RX_Msk             /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT6_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT6_RX_NUM_BLOCK_Msk (0x1FU << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT6_RX_NUM_BLOCK     USB_COUNT6_RX_NUM_BLOCK_Msk            /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT6_RX_NUM_BLOCK_0   (0x01U << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT6_RX_NUM_BLOCK_1   (0x02U << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT6_RX_NUM_BLOCK_2   (0x04U << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT6_RX_NUM_BLOCK_3   (0x08U << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT6_RX_NUM_BLOCK_4   (0x10U << USB_COUNT6_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT6_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT6_RX_BLSIZE_Msk (0x1U << USB_COUNT6_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT6_RX_BLSIZE     USB_COUNT6_RX_BLSIZE_Msk           /*!< BLock SIZE */\r\n\r\n/*****************  Bit definition for USB_COUNT7_RX register  ****************/\r\n#define USB_COUNT7_RX_COUNT7_RX_Pos (0U)\r\n#define USB_COUNT7_RX_COUNT7_RX_Msk (0x3FFU << USB_COUNT7_RX_COUNT7_RX_Pos) /*!< 0x000003FF */\r\n#define USB_COUNT7_RX_COUNT7_RX     USB_COUNT7_RX_COUNT7_RX_Msk             /*!< Reception Byte Count */\r\n\r\n#define USB_COUNT7_RX_NUM_BLOCK_Pos (10U)\r\n#define USB_COUNT7_RX_NUM_BLOCK_Msk (0x1FU << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00007C00 */\r\n#define USB_COUNT7_RX_NUM_BLOCK     USB_COUNT7_RX_NUM_BLOCK_Msk            /*!< NUM_BLOCK[4:0] bits (Number of blocks) */\r\n#define USB_COUNT7_RX_NUM_BLOCK_0   (0x01U << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00000400 */\r\n#define USB_COUNT7_RX_NUM_BLOCK_1   (0x02U << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00000800 */\r\n#define USB_COUNT7_RX_NUM_BLOCK_2   (0x04U << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00001000 */\r\n#define USB_COUNT7_RX_NUM_BLOCK_3   (0x08U << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00002000 */\r\n#define USB_COUNT7_RX_NUM_BLOCK_4   (0x10U << USB_COUNT7_RX_NUM_BLOCK_Pos) /*!< 0x00004000 */\r\n\r\n#define USB_COUNT7_RX_BLSIZE_Pos (15U)\r\n#define USB_COUNT7_RX_BLSIZE_Msk (0x1U << USB_COUNT7_RX_BLSIZE_Pos) /*!< 0x00008000 */\r\n#define USB_COUNT7_RX_BLSIZE     USB_COUNT7_RX_BLSIZE_Msk           /*!< BLock SIZE */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/****************  Bit definition for USB_COUNT0_RX_0 register  ***************/\r\n#define USB_COUNT0_RX_0_COUNT0_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT0_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT0_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT0_RX_1 register  ***************/\r\n#define USB_COUNT0_RX_1_COUNT0_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 1 */\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT0_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT0_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/****************  Bit definition for USB_COUNT1_RX_0 register  ***************/\r\n#define USB_COUNT1_RX_0_COUNT1_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT1_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT1_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT1_RX_1 register  ***************/\r\n#define USB_COUNT1_RX_1_COUNT1_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT1_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT1_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/****************  Bit definition for USB_COUNT2_RX_0 register  ***************/\r\n#define USB_COUNT2_RX_0_COUNT2_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT2_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT2_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT2_RX_1 register  ***************/\r\n#define USB_COUNT2_RX_1_COUNT2_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT2_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT2_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/****************  Bit definition for USB_COUNT3_RX_0 register  ***************/\r\n#define USB_COUNT3_RX_0_COUNT3_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT3_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT3_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT3_RX_1 register  ***************/\r\n#define USB_COUNT3_RX_1_COUNT3_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT3_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT3_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/****************  Bit definition for USB_COUNT4_RX_0 register  ***************/\r\n#define USB_COUNT4_RX_0_COUNT4_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT4_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT4_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT4_RX_1 register  ***************/\r\n#define USB_COUNT4_RX_1_COUNT4_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT4_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT4_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/****************  Bit definition for USB_COUNT5_RX_0 register  ***************/\r\n#define USB_COUNT5_RX_0_COUNT5_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT5_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT5_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT5_RX_1 register  ***************/\r\n#define USB_COUNT5_RX_1_COUNT5_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT5_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT5_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/***************  Bit definition for USB_COUNT6_RX_0  register  ***************/\r\n#define USB_COUNT6_RX_0_COUNT6_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT6_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT6_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/****************  Bit definition for USB_COUNT6_RX_1 register  ***************/\r\n#define USB_COUNT6_RX_1_COUNT6_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT6_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT6_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/***************  Bit definition for USB_COUNT7_RX_0 register  ****************/\r\n#define USB_COUNT7_RX_0_COUNT7_RX_0 0x000003FFU /*!< Reception Byte Count (low) */\r\n\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0   0x00007C00U /*!< NUM_BLOCK_0[4:0] bits (Number of blocks) (low) */\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0_0 0x00000400U /*!< Bit 0 */\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0_1 0x00000800U /*!< Bit 1 */\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0_2 0x00001000U /*!< Bit 2 */\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0_3 0x00002000U /*!< Bit 3 */\r\n#define USB_COUNT7_RX_0_NUM_BLOCK_0_4 0x00004000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT7_RX_0_BLSIZE_0 0x00008000U /*!< BLock SIZE (low) */\r\n\r\n/***************  Bit definition for USB_COUNT7_RX_1 register  ****************/\r\n#define USB_COUNT7_RX_1_COUNT7_RX_1 0x03FF0000U /*!< Reception Byte Count (high) */\r\n\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1   0x7C000000U /*!< NUM_BLOCK_1[4:0] bits (Number of blocks) (high) */\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1_0 0x04000000U /*!< Bit 0 */\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1_1 0x08000000U /*!< Bit 1 */\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1_2 0x10000000U /*!< Bit 2 */\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1_3 0x20000000U /*!< Bit 3 */\r\n#define USB_COUNT7_RX_1_NUM_BLOCK_1_4 0x40000000U /*!< Bit 4 */\r\n\r\n#define USB_COUNT7_RX_1_BLSIZE_1 0x80000000U /*!< BLock SIZE (high) */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                         Controller Area Network                            */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*!< CAN control and status registers */\r\n/*******************  Bit definition for CAN_MCR register  ********************/\r\n#define CAN_MCR_INRQ_Pos  (0U)\r\n#define CAN_MCR_INRQ_Msk  (0x1U << CAN_MCR_INRQ_Pos) /*!< 0x00000001 */\r\n#define CAN_MCR_INRQ      CAN_MCR_INRQ_Msk           /*!< Initialization Request */\r\n#define CAN_MCR_SLEEP_Pos (1U)\r\n#define CAN_MCR_SLEEP_Msk (0x1U << CAN_MCR_SLEEP_Pos) /*!< 0x00000002 */\r\n#define CAN_MCR_SLEEP     CAN_MCR_SLEEP_Msk           /*!< Sleep Mode Request */\r\n#define CAN_MCR_TXFP_Pos  (2U)\r\n#define CAN_MCR_TXFP_Msk  (0x1U << CAN_MCR_TXFP_Pos) /*!< 0x00000004 */\r\n#define CAN_MCR_TXFP      CAN_MCR_TXFP_Msk           /*!< Transmit FIFO Priority */\r\n#define CAN_MCR_RFLM_Pos  (3U)\r\n#define CAN_MCR_RFLM_Msk  (0x1U << CAN_MCR_RFLM_Pos) /*!< 0x00000008 */\r\n#define CAN_MCR_RFLM      CAN_MCR_RFLM_Msk           /*!< Receive FIFO Locked Mode */\r\n#define CAN_MCR_NART_Pos  (4U)\r\n#define CAN_MCR_NART_Msk  (0x1U << CAN_MCR_NART_Pos) /*!< 0x00000010 */\r\n#define CAN_MCR_NART      CAN_MCR_NART_Msk           /*!< No Automatic Retransmission */\r\n#define CAN_MCR_AWUM_Pos  (5U)\r\n#define CAN_MCR_AWUM_Msk  (0x1U << CAN_MCR_AWUM_Pos) /*!< 0x00000020 */\r\n#define CAN_MCR_AWUM      CAN_MCR_AWUM_Msk           /*!< Automatic Wakeup Mode */\r\n#define CAN_MCR_ABOM_Pos  (6U)\r\n#define CAN_MCR_ABOM_Msk  (0x1U << CAN_MCR_ABOM_Pos) /*!< 0x00000040 */\r\n#define CAN_MCR_ABOM      CAN_MCR_ABOM_Msk           /*!< Automatic Bus-Off Management */\r\n#define CAN_MCR_TTCM_Pos  (7U)\r\n#define CAN_MCR_TTCM_Msk  (0x1U << CAN_MCR_TTCM_Pos) /*!< 0x00000080 */\r\n#define CAN_MCR_TTCM      CAN_MCR_TTCM_Msk           /*!< Time Triggered Communication Mode */\r\n#define CAN_MCR_RESET_Pos (15U)\r\n#define CAN_MCR_RESET_Msk (0x1U << CAN_MCR_RESET_Pos) /*!< 0x00008000 */\r\n#define CAN_MCR_RESET     CAN_MCR_RESET_Msk           /*!< CAN software master reset */\r\n#define CAN_MCR_DBF_Pos   (16U)\r\n#define CAN_MCR_DBF_Msk   (0x1U << CAN_MCR_DBF_Pos) /*!< 0x00010000 */\r\n#define CAN_MCR_DBF       CAN_MCR_DBF_Msk           /*!< CAN Debug freeze */\r\n\r\n/*******************  Bit definition for CAN_MSR register  ********************/\r\n#define CAN_MSR_INAK_Pos  (0U)\r\n#define CAN_MSR_INAK_Msk  (0x1U << CAN_MSR_INAK_Pos) /*!< 0x00000001 */\r\n#define CAN_MSR_INAK      CAN_MSR_INAK_Msk           /*!< Initialization Acknowledge */\r\n#define CAN_MSR_SLAK_Pos  (1U)\r\n#define CAN_MSR_SLAK_Msk  (0x1U << CAN_MSR_SLAK_Pos) /*!< 0x00000002 */\r\n#define CAN_MSR_SLAK      CAN_MSR_SLAK_Msk           /*!< Sleep Acknowledge */\r\n#define CAN_MSR_ERRI_Pos  (2U)\r\n#define CAN_MSR_ERRI_Msk  (0x1U << CAN_MSR_ERRI_Pos) /*!< 0x00000004 */\r\n#define CAN_MSR_ERRI      CAN_MSR_ERRI_Msk           /*!< Error Interrupt */\r\n#define CAN_MSR_WKUI_Pos  (3U)\r\n#define CAN_MSR_WKUI_Msk  (0x1U << CAN_MSR_WKUI_Pos) /*!< 0x00000008 */\r\n#define CAN_MSR_WKUI      CAN_MSR_WKUI_Msk           /*!< Wakeup Interrupt */\r\n#define CAN_MSR_SLAKI_Pos (4U)\r\n#define CAN_MSR_SLAKI_Msk (0x1U << CAN_MSR_SLAKI_Pos) /*!< 0x00000010 */\r\n#define CAN_MSR_SLAKI     CAN_MSR_SLAKI_Msk           /*!< Sleep Acknowledge Interrupt */\r\n#define CAN_MSR_TXM_Pos   (8U)\r\n#define CAN_MSR_TXM_Msk   (0x1U << CAN_MSR_TXM_Pos) /*!< 0x00000100 */\r\n#define CAN_MSR_TXM       CAN_MSR_TXM_Msk           /*!< Transmit Mode */\r\n#define CAN_MSR_RXM_Pos   (9U)\r\n#define CAN_MSR_RXM_Msk   (0x1U << CAN_MSR_RXM_Pos) /*!< 0x00000200 */\r\n#define CAN_MSR_RXM       CAN_MSR_RXM_Msk           /*!< Receive Mode */\r\n#define CAN_MSR_SAMP_Pos  (10U)\r\n#define CAN_MSR_SAMP_Msk  (0x1U << CAN_MSR_SAMP_Pos) /*!< 0x00000400 */\r\n#define CAN_MSR_SAMP      CAN_MSR_SAMP_Msk           /*!< Last Sample Point */\r\n#define CAN_MSR_RX_Pos    (11U)\r\n#define CAN_MSR_RX_Msk    (0x1U << CAN_MSR_RX_Pos) /*!< 0x00000800 */\r\n#define CAN_MSR_RX        CAN_MSR_RX_Msk           /*!< CAN Rx Signal */\r\n\r\n/*******************  Bit definition for CAN_TSR register  ********************/\r\n#define CAN_TSR_RQCP0_Pos (0U)\r\n#define CAN_TSR_RQCP0_Msk (0x1U << CAN_TSR_RQCP0_Pos) /*!< 0x00000001 */\r\n#define CAN_TSR_RQCP0     CAN_TSR_RQCP0_Msk           /*!< Request Completed Mailbox0 */\r\n#define CAN_TSR_TXOK0_Pos (1U)\r\n#define CAN_TSR_TXOK0_Msk (0x1U << CAN_TSR_TXOK0_Pos) /*!< 0x00000002 */\r\n#define CAN_TSR_TXOK0     CAN_TSR_TXOK0_Msk           /*!< Transmission OK of Mailbox0 */\r\n#define CAN_TSR_ALST0_Pos (2U)\r\n#define CAN_TSR_ALST0_Msk (0x1U << CAN_TSR_ALST0_Pos) /*!< 0x00000004 */\r\n#define CAN_TSR_ALST0     CAN_TSR_ALST0_Msk           /*!< Arbitration Lost for Mailbox0 */\r\n#define CAN_TSR_TERR0_Pos (3U)\r\n#define CAN_TSR_TERR0_Msk (0x1U << CAN_TSR_TERR0_Pos) /*!< 0x00000008 */\r\n#define CAN_TSR_TERR0     CAN_TSR_TERR0_Msk           /*!< Transmission Error of Mailbox0 */\r\n#define CAN_TSR_ABRQ0_Pos (7U)\r\n#define CAN_TSR_ABRQ0_Msk (0x1U << CAN_TSR_ABRQ0_Pos) /*!< 0x00000080 */\r\n#define CAN_TSR_ABRQ0     CAN_TSR_ABRQ0_Msk           /*!< Abort Request for Mailbox0 */\r\n#define CAN_TSR_RQCP1_Pos (8U)\r\n#define CAN_TSR_RQCP1_Msk (0x1U << CAN_TSR_RQCP1_Pos) /*!< 0x00000100 */\r\n#define CAN_TSR_RQCP1     CAN_TSR_RQCP1_Msk           /*!< Request Completed Mailbox1 */\r\n#define CAN_TSR_TXOK1_Pos (9U)\r\n#define CAN_TSR_TXOK1_Msk (0x1U << CAN_TSR_TXOK1_Pos) /*!< 0x00000200 */\r\n#define CAN_TSR_TXOK1     CAN_TSR_TXOK1_Msk           /*!< Transmission OK of Mailbox1 */\r\n#define CAN_TSR_ALST1_Pos (10U)\r\n#define CAN_TSR_ALST1_Msk (0x1U << CAN_TSR_ALST1_Pos) /*!< 0x00000400 */\r\n#define CAN_TSR_ALST1     CAN_TSR_ALST1_Msk           /*!< Arbitration Lost for Mailbox1 */\r\n#define CAN_TSR_TERR1_Pos (11U)\r\n#define CAN_TSR_TERR1_Msk (0x1U << CAN_TSR_TERR1_Pos) /*!< 0x00000800 */\r\n#define CAN_TSR_TERR1     CAN_TSR_TERR1_Msk           /*!< Transmission Error of Mailbox1 */\r\n#define CAN_TSR_ABRQ1_Pos (15U)\r\n#define CAN_TSR_ABRQ1_Msk (0x1U << CAN_TSR_ABRQ1_Pos) /*!< 0x00008000 */\r\n#define CAN_TSR_ABRQ1     CAN_TSR_ABRQ1_Msk           /*!< Abort Request for Mailbox 1 */\r\n#define CAN_TSR_RQCP2_Pos (16U)\r\n#define CAN_TSR_RQCP2_Msk (0x1U << CAN_TSR_RQCP2_Pos) /*!< 0x00010000 */\r\n#define CAN_TSR_RQCP2     CAN_TSR_RQCP2_Msk           /*!< Request Completed Mailbox2 */\r\n#define CAN_TSR_TXOK2_Pos (17U)\r\n#define CAN_TSR_TXOK2_Msk (0x1U << CAN_TSR_TXOK2_Pos) /*!< 0x00020000 */\r\n#define CAN_TSR_TXOK2     CAN_TSR_TXOK2_Msk           /*!< Transmission OK of Mailbox 2 */\r\n#define CAN_TSR_ALST2_Pos (18U)\r\n#define CAN_TSR_ALST2_Msk (0x1U << CAN_TSR_ALST2_Pos) /*!< 0x00040000 */\r\n#define CAN_TSR_ALST2     CAN_TSR_ALST2_Msk           /*!< Arbitration Lost for mailbox 2 */\r\n#define CAN_TSR_TERR2_Pos (19U)\r\n#define CAN_TSR_TERR2_Msk (0x1U << CAN_TSR_TERR2_Pos) /*!< 0x00080000 */\r\n#define CAN_TSR_TERR2     CAN_TSR_TERR2_Msk           /*!< Transmission Error of Mailbox 2 */\r\n#define CAN_TSR_ABRQ2_Pos (23U)\r\n#define CAN_TSR_ABRQ2_Msk (0x1U << CAN_TSR_ABRQ2_Pos) /*!< 0x00800000 */\r\n#define CAN_TSR_ABRQ2     CAN_TSR_ABRQ2_Msk           /*!< Abort Request for Mailbox 2 */\r\n#define CAN_TSR_CODE_Pos  (24U)\r\n#define CAN_TSR_CODE_Msk  (0x3U << CAN_TSR_CODE_Pos) /*!< 0x03000000 */\r\n#define CAN_TSR_CODE      CAN_TSR_CODE_Msk           /*!< Mailbox Code */\r\n\r\n#define CAN_TSR_TME_Pos  (26U)\r\n#define CAN_TSR_TME_Msk  (0x7U << CAN_TSR_TME_Pos) /*!< 0x1C000000 */\r\n#define CAN_TSR_TME      CAN_TSR_TME_Msk           /*!< TME[2:0] bits */\r\n#define CAN_TSR_TME0_Pos (26U)\r\n#define CAN_TSR_TME0_Msk (0x1U << CAN_TSR_TME0_Pos) /*!< 0x04000000 */\r\n#define CAN_TSR_TME0     CAN_TSR_TME0_Msk           /*!< Transmit Mailbox 0 Empty */\r\n#define CAN_TSR_TME1_Pos (27U)\r\n#define CAN_TSR_TME1_Msk (0x1U << CAN_TSR_TME1_Pos) /*!< 0x08000000 */\r\n#define CAN_TSR_TME1     CAN_TSR_TME1_Msk           /*!< Transmit Mailbox 1 Empty */\r\n#define CAN_TSR_TME2_Pos (28U)\r\n#define CAN_TSR_TME2_Msk (0x1U << CAN_TSR_TME2_Pos) /*!< 0x10000000 */\r\n#define CAN_TSR_TME2     CAN_TSR_TME2_Msk           /*!< Transmit Mailbox 2 Empty */\r\n\r\n#define CAN_TSR_LOW_Pos  (29U)\r\n#define CAN_TSR_LOW_Msk  (0x7U << CAN_TSR_LOW_Pos) /*!< 0xE0000000 */\r\n#define CAN_TSR_LOW      CAN_TSR_LOW_Msk           /*!< LOW[2:0] bits */\r\n#define CAN_TSR_LOW0_Pos (29U)\r\n#define CAN_TSR_LOW0_Msk (0x1U << CAN_TSR_LOW0_Pos) /*!< 0x20000000 */\r\n#define CAN_TSR_LOW0     CAN_TSR_LOW0_Msk           /*!< Lowest Priority Flag for Mailbox 0 */\r\n#define CAN_TSR_LOW1_Pos (30U)\r\n#define CAN_TSR_LOW1_Msk (0x1U << CAN_TSR_LOW1_Pos) /*!< 0x40000000 */\r\n#define CAN_TSR_LOW1     CAN_TSR_LOW1_Msk           /*!< Lowest Priority Flag for Mailbox 1 */\r\n#define CAN_TSR_LOW2_Pos (31U)\r\n#define CAN_TSR_LOW2_Msk (0x1U << CAN_TSR_LOW2_Pos) /*!< 0x80000000 */\r\n#define CAN_TSR_LOW2     CAN_TSR_LOW2_Msk           /*!< Lowest Priority Flag for Mailbox 2 */\r\n\r\n/*******************  Bit definition for CAN_RF0R register  *******************/\r\n#define CAN_RF0R_FMP0_Pos  (0U)\r\n#define CAN_RF0R_FMP0_Msk  (0x3U << CAN_RF0R_FMP0_Pos) /*!< 0x00000003 */\r\n#define CAN_RF0R_FMP0      CAN_RF0R_FMP0_Msk           /*!< FIFO 0 Message Pending */\r\n#define CAN_RF0R_FULL0_Pos (3U)\r\n#define CAN_RF0R_FULL0_Msk (0x1U << CAN_RF0R_FULL0_Pos) /*!< 0x00000008 */\r\n#define CAN_RF0R_FULL0     CAN_RF0R_FULL0_Msk           /*!< FIFO 0 Full */\r\n#define CAN_RF0R_FOVR0_Pos (4U)\r\n#define CAN_RF0R_FOVR0_Msk (0x1U << CAN_RF0R_FOVR0_Pos) /*!< 0x00000010 */\r\n#define CAN_RF0R_FOVR0     CAN_RF0R_FOVR0_Msk           /*!< FIFO 0 Overrun */\r\n#define CAN_RF0R_RFOM0_Pos (5U)\r\n#define CAN_RF0R_RFOM0_Msk (0x1U << CAN_RF0R_RFOM0_Pos) /*!< 0x00000020 */\r\n#define CAN_RF0R_RFOM0     CAN_RF0R_RFOM0_Msk           /*!< Release FIFO 0 Output Mailbox */\r\n\r\n/*******************  Bit definition for CAN_RF1R register  *******************/\r\n#define CAN_RF1R_FMP1_Pos  (0U)\r\n#define CAN_RF1R_FMP1_Msk  (0x3U << CAN_RF1R_FMP1_Pos) /*!< 0x00000003 */\r\n#define CAN_RF1R_FMP1      CAN_RF1R_FMP1_Msk           /*!< FIFO 1 Message Pending */\r\n#define CAN_RF1R_FULL1_Pos (3U)\r\n#define CAN_RF1R_FULL1_Msk (0x1U << CAN_RF1R_FULL1_Pos) /*!< 0x00000008 */\r\n#define CAN_RF1R_FULL1     CAN_RF1R_FULL1_Msk           /*!< FIFO 1 Full */\r\n#define CAN_RF1R_FOVR1_Pos (4U)\r\n#define CAN_RF1R_FOVR1_Msk (0x1U << CAN_RF1R_FOVR1_Pos) /*!< 0x00000010 */\r\n#define CAN_RF1R_FOVR1     CAN_RF1R_FOVR1_Msk           /*!< FIFO 1 Overrun */\r\n#define CAN_RF1R_RFOM1_Pos (5U)\r\n#define CAN_RF1R_RFOM1_Msk (0x1U << CAN_RF1R_RFOM1_Pos) /*!< 0x00000020 */\r\n#define CAN_RF1R_RFOM1     CAN_RF1R_RFOM1_Msk           /*!< Release FIFO 1 Output Mailbox */\r\n\r\n/********************  Bit definition for CAN_IER register  *******************/\r\n#define CAN_IER_TMEIE_Pos  (0U)\r\n#define CAN_IER_TMEIE_Msk  (0x1U << CAN_IER_TMEIE_Pos) /*!< 0x00000001 */\r\n#define CAN_IER_TMEIE      CAN_IER_TMEIE_Msk           /*!< Transmit Mailbox Empty Interrupt Enable */\r\n#define CAN_IER_FMPIE0_Pos (1U)\r\n#define CAN_IER_FMPIE0_Msk (0x1U << CAN_IER_FMPIE0_Pos) /*!< 0x00000002 */\r\n#define CAN_IER_FMPIE0     CAN_IER_FMPIE0_Msk           /*!< FIFO Message Pending Interrupt Enable */\r\n#define CAN_IER_FFIE0_Pos  (2U)\r\n#define CAN_IER_FFIE0_Msk  (0x1U << CAN_IER_FFIE0_Pos) /*!< 0x00000004 */\r\n#define CAN_IER_FFIE0      CAN_IER_FFIE0_Msk           /*!< FIFO Full Interrupt Enable */\r\n#define CAN_IER_FOVIE0_Pos (3U)\r\n#define CAN_IER_FOVIE0_Msk (0x1U << CAN_IER_FOVIE0_Pos) /*!< 0x00000008 */\r\n#define CAN_IER_FOVIE0     CAN_IER_FOVIE0_Msk           /*!< FIFO Overrun Interrupt Enable */\r\n#define CAN_IER_FMPIE1_Pos (4U)\r\n#define CAN_IER_FMPIE1_Msk (0x1U << CAN_IER_FMPIE1_Pos) /*!< 0x00000010 */\r\n#define CAN_IER_FMPIE1     CAN_IER_FMPIE1_Msk           /*!< FIFO Message Pending Interrupt Enable */\r\n#define CAN_IER_FFIE1_Pos  (5U)\r\n#define CAN_IER_FFIE1_Msk  (0x1U << CAN_IER_FFIE1_Pos) /*!< 0x00000020 */\r\n#define CAN_IER_FFIE1      CAN_IER_FFIE1_Msk           /*!< FIFO Full Interrupt Enable */\r\n#define CAN_IER_FOVIE1_Pos (6U)\r\n#define CAN_IER_FOVIE1_Msk (0x1U << CAN_IER_FOVIE1_Pos) /*!< 0x00000040 */\r\n#define CAN_IER_FOVIE1     CAN_IER_FOVIE1_Msk           /*!< FIFO Overrun Interrupt Enable */\r\n#define CAN_IER_EWGIE_Pos  (8U)\r\n#define CAN_IER_EWGIE_Msk  (0x1U << CAN_IER_EWGIE_Pos) /*!< 0x00000100 */\r\n#define CAN_IER_EWGIE      CAN_IER_EWGIE_Msk           /*!< Error Warning Interrupt Enable */\r\n#define CAN_IER_EPVIE_Pos  (9U)\r\n#define CAN_IER_EPVIE_Msk  (0x1U << CAN_IER_EPVIE_Pos) /*!< 0x00000200 */\r\n#define CAN_IER_EPVIE      CAN_IER_EPVIE_Msk           /*!< Error Passive Interrupt Enable */\r\n#define CAN_IER_BOFIE_Pos  (10U)\r\n#define CAN_IER_BOFIE_Msk  (0x1U << CAN_IER_BOFIE_Pos) /*!< 0x00000400 */\r\n#define CAN_IER_BOFIE      CAN_IER_BOFIE_Msk           /*!< Bus-Off Interrupt Enable */\r\n#define CAN_IER_LECIE_Pos  (11U)\r\n#define CAN_IER_LECIE_Msk  (0x1U << CAN_IER_LECIE_Pos) /*!< 0x00000800 */\r\n#define CAN_IER_LECIE      CAN_IER_LECIE_Msk           /*!< Last Error Code Interrupt Enable */\r\n#define CAN_IER_ERRIE_Pos  (15U)\r\n#define CAN_IER_ERRIE_Msk  (0x1U << CAN_IER_ERRIE_Pos) /*!< 0x00008000 */\r\n#define CAN_IER_ERRIE      CAN_IER_ERRIE_Msk           /*!< Error Interrupt Enable */\r\n#define CAN_IER_WKUIE_Pos  (16U)\r\n#define CAN_IER_WKUIE_Msk  (0x1U << CAN_IER_WKUIE_Pos) /*!< 0x00010000 */\r\n#define CAN_IER_WKUIE      CAN_IER_WKUIE_Msk           /*!< Wakeup Interrupt Enable */\r\n#define CAN_IER_SLKIE_Pos  (17U)\r\n#define CAN_IER_SLKIE_Msk  (0x1U << CAN_IER_SLKIE_Pos) /*!< 0x00020000 */\r\n#define CAN_IER_SLKIE      CAN_IER_SLKIE_Msk           /*!< Sleep Interrupt Enable */\r\n\r\n/********************  Bit definition for CAN_ESR register  *******************/\r\n#define CAN_ESR_EWGF_Pos (0U)\r\n#define CAN_ESR_EWGF_Msk (0x1U << CAN_ESR_EWGF_Pos) /*!< 0x00000001 */\r\n#define CAN_ESR_EWGF     CAN_ESR_EWGF_Msk           /*!< Error Warning Flag */\r\n#define CAN_ESR_EPVF_Pos (1U)\r\n#define CAN_ESR_EPVF_Msk (0x1U << CAN_ESR_EPVF_Pos) /*!< 0x00000002 */\r\n#define CAN_ESR_EPVF     CAN_ESR_EPVF_Msk           /*!< Error Passive Flag */\r\n#define CAN_ESR_BOFF_Pos (2U)\r\n#define CAN_ESR_BOFF_Msk (0x1U << CAN_ESR_BOFF_Pos) /*!< 0x00000004 */\r\n#define CAN_ESR_BOFF     CAN_ESR_BOFF_Msk           /*!< Bus-Off Flag */\r\n\r\n#define CAN_ESR_LEC_Pos (4U)\r\n#define CAN_ESR_LEC_Msk (0x7U << CAN_ESR_LEC_Pos) /*!< 0x00000070 */\r\n#define CAN_ESR_LEC     CAN_ESR_LEC_Msk           /*!< LEC[2:0] bits (Last Error Code) */\r\n#define CAN_ESR_LEC_0   (0x1U << CAN_ESR_LEC_Pos) /*!< 0x00000010 */\r\n#define CAN_ESR_LEC_1   (0x2U << CAN_ESR_LEC_Pos) /*!< 0x00000020 */\r\n#define CAN_ESR_LEC_2   (0x4U << CAN_ESR_LEC_Pos) /*!< 0x00000040 */\r\n\r\n#define CAN_ESR_TEC_Pos (16U)\r\n#define CAN_ESR_TEC_Msk (0xFFU << CAN_ESR_TEC_Pos) /*!< 0x00FF0000 */\r\n#define CAN_ESR_TEC     CAN_ESR_TEC_Msk            /*!< Least significant byte of the 9-bit Transmit Error Counter */\r\n#define CAN_ESR_REC_Pos (24U)\r\n#define CAN_ESR_REC_Msk (0xFFU << CAN_ESR_REC_Pos) /*!< 0xFF000000 */\r\n#define CAN_ESR_REC     CAN_ESR_REC_Msk            /*!< Receive Error Counter */\r\n\r\n/*******************  Bit definition for CAN_BTR register  ********************/\r\n#define CAN_BTR_BRP_Pos  (0U)\r\n#define CAN_BTR_BRP_Msk  (0x3FFU << CAN_BTR_BRP_Pos) /*!< 0x000003FF */\r\n#define CAN_BTR_BRP      CAN_BTR_BRP_Msk             /*!<Baud Rate Prescaler */\r\n#define CAN_BTR_TS1_Pos  (16U)\r\n#define CAN_BTR_TS1_Msk  (0xFU << CAN_BTR_TS1_Pos) /*!< 0x000F0000 */\r\n#define CAN_BTR_TS1      CAN_BTR_TS1_Msk           /*!<Time Segment 1 */\r\n#define CAN_BTR_TS1_0    (0x1U << CAN_BTR_TS1_Pos) /*!< 0x00010000 */\r\n#define CAN_BTR_TS1_1    (0x2U << CAN_BTR_TS1_Pos) /*!< 0x00020000 */\r\n#define CAN_BTR_TS1_2    (0x4U << CAN_BTR_TS1_Pos) /*!< 0x00040000 */\r\n#define CAN_BTR_TS1_3    (0x8U << CAN_BTR_TS1_Pos) /*!< 0x00080000 */\r\n#define CAN_BTR_TS2_Pos  (20U)\r\n#define CAN_BTR_TS2_Msk  (0x7U << CAN_BTR_TS2_Pos) /*!< 0x00700000 */\r\n#define CAN_BTR_TS2      CAN_BTR_TS2_Msk           /*!<Time Segment 2 */\r\n#define CAN_BTR_TS2_0    (0x1U << CAN_BTR_TS2_Pos) /*!< 0x00100000 */\r\n#define CAN_BTR_TS2_1    (0x2U << CAN_BTR_TS2_Pos) /*!< 0x00200000 */\r\n#define CAN_BTR_TS2_2    (0x4U << CAN_BTR_TS2_Pos) /*!< 0x00400000 */\r\n#define CAN_BTR_SJW_Pos  (24U)\r\n#define CAN_BTR_SJW_Msk  (0x3U << CAN_BTR_SJW_Pos) /*!< 0x03000000 */\r\n#define CAN_BTR_SJW      CAN_BTR_SJW_Msk           /*!<Resynchronization Jump Width */\r\n#define CAN_BTR_SJW_0    (0x1U << CAN_BTR_SJW_Pos) /*!< 0x01000000 */\r\n#define CAN_BTR_SJW_1    (0x2U << CAN_BTR_SJW_Pos) /*!< 0x02000000 */\r\n#define CAN_BTR_LBKM_Pos (30U)\r\n#define CAN_BTR_LBKM_Msk (0x1U << CAN_BTR_LBKM_Pos) /*!< 0x40000000 */\r\n#define CAN_BTR_LBKM     CAN_BTR_LBKM_Msk           /*!<Loop Back Mode (Debug) */\r\n#define CAN_BTR_SILM_Pos (31U)\r\n#define CAN_BTR_SILM_Msk (0x1U << CAN_BTR_SILM_Pos) /*!< 0x80000000 */\r\n#define CAN_BTR_SILM     CAN_BTR_SILM_Msk           /*!<Silent Mode */\r\n\r\n/*!< Mailbox registers */\r\n/******************  Bit definition for CAN_TI0R register  ********************/\r\n#define CAN_TI0R_TXRQ_Pos (0U)\r\n#define CAN_TI0R_TXRQ_Msk (0x1U << CAN_TI0R_TXRQ_Pos) /*!< 0x00000001 */\r\n#define CAN_TI0R_TXRQ     CAN_TI0R_TXRQ_Msk           /*!< Transmit Mailbox Request */\r\n#define CAN_TI0R_RTR_Pos  (1U)\r\n#define CAN_TI0R_RTR_Msk  (0x1U << CAN_TI0R_RTR_Pos) /*!< 0x00000002 */\r\n#define CAN_TI0R_RTR      CAN_TI0R_RTR_Msk           /*!< Remote Transmission Request */\r\n#define CAN_TI0R_IDE_Pos  (2U)\r\n#define CAN_TI0R_IDE_Msk  (0x1U << CAN_TI0R_IDE_Pos) /*!< 0x00000004 */\r\n#define CAN_TI0R_IDE      CAN_TI0R_IDE_Msk           /*!< Identifier Extension */\r\n#define CAN_TI0R_EXID_Pos (3U)\r\n#define CAN_TI0R_EXID_Msk (0x3FFFFU << CAN_TI0R_EXID_Pos) /*!< 0x001FFFF8 */\r\n#define CAN_TI0R_EXID     CAN_TI0R_EXID_Msk               /*!< Extended Identifier */\r\n#define CAN_TI0R_STID_Pos (21U)\r\n#define CAN_TI0R_STID_Msk (0x7FFU << CAN_TI0R_STID_Pos) /*!< 0xFFE00000 */\r\n#define CAN_TI0R_STID     CAN_TI0R_STID_Msk             /*!< Standard Identifier or Extended Identifier */\r\n\r\n/******************  Bit definition for CAN_TDT0R register  *******************/\r\n#define CAN_TDT0R_DLC_Pos  (0U)\r\n#define CAN_TDT0R_DLC_Msk  (0xFU << CAN_TDT0R_DLC_Pos) /*!< 0x0000000F */\r\n#define CAN_TDT0R_DLC      CAN_TDT0R_DLC_Msk           /*!< Data Length Code */\r\n#define CAN_TDT0R_TGT_Pos  (8U)\r\n#define CAN_TDT0R_TGT_Msk  (0x1U << CAN_TDT0R_TGT_Pos) /*!< 0x00000100 */\r\n#define CAN_TDT0R_TGT      CAN_TDT0R_TGT_Msk           /*!< Transmit Global Time */\r\n#define CAN_TDT0R_TIME_Pos (16U)\r\n#define CAN_TDT0R_TIME_Msk (0xFFFFU << CAN_TDT0R_TIME_Pos) /*!< 0xFFFF0000 */\r\n#define CAN_TDT0R_TIME     CAN_TDT0R_TIME_Msk              /*!< Message Time Stamp */\r\n\r\n/******************  Bit definition for CAN_TDL0R register  *******************/\r\n#define CAN_TDL0R_DATA0_Pos (0U)\r\n#define CAN_TDL0R_DATA0_Msk (0xFFU << CAN_TDL0R_DATA0_Pos) /*!< 0x000000FF */\r\n#define CAN_TDL0R_DATA0     CAN_TDL0R_DATA0_Msk            /*!< Data byte 0 */\r\n#define CAN_TDL0R_DATA1_Pos (8U)\r\n#define CAN_TDL0R_DATA1_Msk (0xFFU << CAN_TDL0R_DATA1_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDL0R_DATA1     CAN_TDL0R_DATA1_Msk            /*!< Data byte 1 */\r\n#define CAN_TDL0R_DATA2_Pos (16U)\r\n#define CAN_TDL0R_DATA2_Msk (0xFFU << CAN_TDL0R_DATA2_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDL0R_DATA2     CAN_TDL0R_DATA2_Msk            /*!< Data byte 2 */\r\n#define CAN_TDL0R_DATA3_Pos (24U)\r\n#define CAN_TDL0R_DATA3_Msk (0xFFU << CAN_TDL0R_DATA3_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDL0R_DATA3     CAN_TDL0R_DATA3_Msk            /*!< Data byte 3 */\r\n\r\n/******************  Bit definition for CAN_TDH0R register  *******************/\r\n#define CAN_TDH0R_DATA4_Pos (0U)\r\n#define CAN_TDH0R_DATA4_Msk (0xFFU << CAN_TDH0R_DATA4_Pos) /*!< 0x000000FF */\r\n#define CAN_TDH0R_DATA4     CAN_TDH0R_DATA4_Msk            /*!< Data byte 4 */\r\n#define CAN_TDH0R_DATA5_Pos (8U)\r\n#define CAN_TDH0R_DATA5_Msk (0xFFU << CAN_TDH0R_DATA5_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDH0R_DATA5     CAN_TDH0R_DATA5_Msk            /*!< Data byte 5 */\r\n#define CAN_TDH0R_DATA6_Pos (16U)\r\n#define CAN_TDH0R_DATA6_Msk (0xFFU << CAN_TDH0R_DATA6_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDH0R_DATA6     CAN_TDH0R_DATA6_Msk            /*!< Data byte 6 */\r\n#define CAN_TDH0R_DATA7_Pos (24U)\r\n#define CAN_TDH0R_DATA7_Msk (0xFFU << CAN_TDH0R_DATA7_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDH0R_DATA7     CAN_TDH0R_DATA7_Msk            /*!< Data byte 7 */\r\n\r\n/*******************  Bit definition for CAN_TI1R register  *******************/\r\n#define CAN_TI1R_TXRQ_Pos (0U)\r\n#define CAN_TI1R_TXRQ_Msk (0x1U << CAN_TI1R_TXRQ_Pos) /*!< 0x00000001 */\r\n#define CAN_TI1R_TXRQ     CAN_TI1R_TXRQ_Msk           /*!< Transmit Mailbox Request */\r\n#define CAN_TI1R_RTR_Pos  (1U)\r\n#define CAN_TI1R_RTR_Msk  (0x1U << CAN_TI1R_RTR_Pos) /*!< 0x00000002 */\r\n#define CAN_TI1R_RTR      CAN_TI1R_RTR_Msk           /*!< Remote Transmission Request */\r\n#define CAN_TI1R_IDE_Pos  (2U)\r\n#define CAN_TI1R_IDE_Msk  (0x1U << CAN_TI1R_IDE_Pos) /*!< 0x00000004 */\r\n#define CAN_TI1R_IDE      CAN_TI1R_IDE_Msk           /*!< Identifier Extension */\r\n#define CAN_TI1R_EXID_Pos (3U)\r\n#define CAN_TI1R_EXID_Msk (0x3FFFFU << CAN_TI1R_EXID_Pos) /*!< 0x001FFFF8 */\r\n#define CAN_TI1R_EXID     CAN_TI1R_EXID_Msk               /*!< Extended Identifier */\r\n#define CAN_TI1R_STID_Pos (21U)\r\n#define CAN_TI1R_STID_Msk (0x7FFU << CAN_TI1R_STID_Pos) /*!< 0xFFE00000 */\r\n#define CAN_TI1R_STID     CAN_TI1R_STID_Msk             /*!< Standard Identifier or Extended Identifier */\r\n\r\n/*******************  Bit definition for CAN_TDT1R register  ******************/\r\n#define CAN_TDT1R_DLC_Pos  (0U)\r\n#define CAN_TDT1R_DLC_Msk  (0xFU << CAN_TDT1R_DLC_Pos) /*!< 0x0000000F */\r\n#define CAN_TDT1R_DLC      CAN_TDT1R_DLC_Msk           /*!< Data Length Code */\r\n#define CAN_TDT1R_TGT_Pos  (8U)\r\n#define CAN_TDT1R_TGT_Msk  (0x1U << CAN_TDT1R_TGT_Pos) /*!< 0x00000100 */\r\n#define CAN_TDT1R_TGT      CAN_TDT1R_TGT_Msk           /*!< Transmit Global Time */\r\n#define CAN_TDT1R_TIME_Pos (16U)\r\n#define CAN_TDT1R_TIME_Msk (0xFFFFU << CAN_TDT1R_TIME_Pos) /*!< 0xFFFF0000 */\r\n#define CAN_TDT1R_TIME     CAN_TDT1R_TIME_Msk              /*!< Message Time Stamp */\r\n\r\n/*******************  Bit definition for CAN_TDL1R register  ******************/\r\n#define CAN_TDL1R_DATA0_Pos (0U)\r\n#define CAN_TDL1R_DATA0_Msk (0xFFU << CAN_TDL1R_DATA0_Pos) /*!< 0x000000FF */\r\n#define CAN_TDL1R_DATA0     CAN_TDL1R_DATA0_Msk            /*!< Data byte 0 */\r\n#define CAN_TDL1R_DATA1_Pos (8U)\r\n#define CAN_TDL1R_DATA1_Msk (0xFFU << CAN_TDL1R_DATA1_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDL1R_DATA1     CAN_TDL1R_DATA1_Msk            /*!< Data byte 1 */\r\n#define CAN_TDL1R_DATA2_Pos (16U)\r\n#define CAN_TDL1R_DATA2_Msk (0xFFU << CAN_TDL1R_DATA2_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDL1R_DATA2     CAN_TDL1R_DATA2_Msk            /*!< Data byte 2 */\r\n#define CAN_TDL1R_DATA3_Pos (24U)\r\n#define CAN_TDL1R_DATA3_Msk (0xFFU << CAN_TDL1R_DATA3_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDL1R_DATA3     CAN_TDL1R_DATA3_Msk            /*!< Data byte 3 */\r\n\r\n/*******************  Bit definition for CAN_TDH1R register  ******************/\r\n#define CAN_TDH1R_DATA4_Pos (0U)\r\n#define CAN_TDH1R_DATA4_Msk (0xFFU << CAN_TDH1R_DATA4_Pos) /*!< 0x000000FF */\r\n#define CAN_TDH1R_DATA4     CAN_TDH1R_DATA4_Msk            /*!< Data byte 4 */\r\n#define CAN_TDH1R_DATA5_Pos (8U)\r\n#define CAN_TDH1R_DATA5_Msk (0xFFU << CAN_TDH1R_DATA5_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDH1R_DATA5     CAN_TDH1R_DATA5_Msk            /*!< Data byte 5 */\r\n#define CAN_TDH1R_DATA6_Pos (16U)\r\n#define CAN_TDH1R_DATA6_Msk (0xFFU << CAN_TDH1R_DATA6_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDH1R_DATA6     CAN_TDH1R_DATA6_Msk            /*!< Data byte 6 */\r\n#define CAN_TDH1R_DATA7_Pos (24U)\r\n#define CAN_TDH1R_DATA7_Msk (0xFFU << CAN_TDH1R_DATA7_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDH1R_DATA7     CAN_TDH1R_DATA7_Msk            /*!< Data byte 7 */\r\n\r\n/*******************  Bit definition for CAN_TI2R register  *******************/\r\n#define CAN_TI2R_TXRQ_Pos (0U)\r\n#define CAN_TI2R_TXRQ_Msk (0x1U << CAN_TI2R_TXRQ_Pos) /*!< 0x00000001 */\r\n#define CAN_TI2R_TXRQ     CAN_TI2R_TXRQ_Msk           /*!< Transmit Mailbox Request */\r\n#define CAN_TI2R_RTR_Pos  (1U)\r\n#define CAN_TI2R_RTR_Msk  (0x1U << CAN_TI2R_RTR_Pos) /*!< 0x00000002 */\r\n#define CAN_TI2R_RTR      CAN_TI2R_RTR_Msk           /*!< Remote Transmission Request */\r\n#define CAN_TI2R_IDE_Pos  (2U)\r\n#define CAN_TI2R_IDE_Msk  (0x1U << CAN_TI2R_IDE_Pos) /*!< 0x00000004 */\r\n#define CAN_TI2R_IDE      CAN_TI2R_IDE_Msk           /*!< Identifier Extension */\r\n#define CAN_TI2R_EXID_Pos (3U)\r\n#define CAN_TI2R_EXID_Msk (0x3FFFFU << CAN_TI2R_EXID_Pos) /*!< 0x001FFFF8 */\r\n#define CAN_TI2R_EXID     CAN_TI2R_EXID_Msk               /*!< Extended identifier */\r\n#define CAN_TI2R_STID_Pos (21U)\r\n#define CAN_TI2R_STID_Msk (0x7FFU << CAN_TI2R_STID_Pos) /*!< 0xFFE00000 */\r\n#define CAN_TI2R_STID     CAN_TI2R_STID_Msk             /*!< Standard Identifier or Extended Identifier */\r\n\r\n/*******************  Bit definition for CAN_TDT2R register  ******************/\r\n#define CAN_TDT2R_DLC_Pos  (0U)\r\n#define CAN_TDT2R_DLC_Msk  (0xFU << CAN_TDT2R_DLC_Pos) /*!< 0x0000000F */\r\n#define CAN_TDT2R_DLC      CAN_TDT2R_DLC_Msk           /*!< Data Length Code */\r\n#define CAN_TDT2R_TGT_Pos  (8U)\r\n#define CAN_TDT2R_TGT_Msk  (0x1U << CAN_TDT2R_TGT_Pos) /*!< 0x00000100 */\r\n#define CAN_TDT2R_TGT      CAN_TDT2R_TGT_Msk           /*!< Transmit Global Time */\r\n#define CAN_TDT2R_TIME_Pos (16U)\r\n#define CAN_TDT2R_TIME_Msk (0xFFFFU << CAN_TDT2R_TIME_Pos) /*!< 0xFFFF0000 */\r\n#define CAN_TDT2R_TIME     CAN_TDT2R_TIME_Msk              /*!< Message Time Stamp */\r\n\r\n/*******************  Bit definition for CAN_TDL2R register  ******************/\r\n#define CAN_TDL2R_DATA0_Pos (0U)\r\n#define CAN_TDL2R_DATA0_Msk (0xFFU << CAN_TDL2R_DATA0_Pos) /*!< 0x000000FF */\r\n#define CAN_TDL2R_DATA0     CAN_TDL2R_DATA0_Msk            /*!< Data byte 0 */\r\n#define CAN_TDL2R_DATA1_Pos (8U)\r\n#define CAN_TDL2R_DATA1_Msk (0xFFU << CAN_TDL2R_DATA1_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDL2R_DATA1     CAN_TDL2R_DATA1_Msk            /*!< Data byte 1 */\r\n#define CAN_TDL2R_DATA2_Pos (16U)\r\n#define CAN_TDL2R_DATA2_Msk (0xFFU << CAN_TDL2R_DATA2_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDL2R_DATA2     CAN_TDL2R_DATA2_Msk            /*!< Data byte 2 */\r\n#define CAN_TDL2R_DATA3_Pos (24U)\r\n#define CAN_TDL2R_DATA3_Msk (0xFFU << CAN_TDL2R_DATA3_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDL2R_DATA3     CAN_TDL2R_DATA3_Msk            /*!< Data byte 3 */\r\n\r\n/*******************  Bit definition for CAN_TDH2R register  ******************/\r\n#define CAN_TDH2R_DATA4_Pos (0U)\r\n#define CAN_TDH2R_DATA4_Msk (0xFFU << CAN_TDH2R_DATA4_Pos) /*!< 0x000000FF */\r\n#define CAN_TDH2R_DATA4     CAN_TDH2R_DATA4_Msk            /*!< Data byte 4 */\r\n#define CAN_TDH2R_DATA5_Pos (8U)\r\n#define CAN_TDH2R_DATA5_Msk (0xFFU << CAN_TDH2R_DATA5_Pos) /*!< 0x0000FF00 */\r\n#define CAN_TDH2R_DATA5     CAN_TDH2R_DATA5_Msk            /*!< Data byte 5 */\r\n#define CAN_TDH2R_DATA6_Pos (16U)\r\n#define CAN_TDH2R_DATA6_Msk (0xFFU << CAN_TDH2R_DATA6_Pos) /*!< 0x00FF0000 */\r\n#define CAN_TDH2R_DATA6     CAN_TDH2R_DATA6_Msk            /*!< Data byte 6 */\r\n#define CAN_TDH2R_DATA7_Pos (24U)\r\n#define CAN_TDH2R_DATA7_Msk (0xFFU << CAN_TDH2R_DATA7_Pos) /*!< 0xFF000000 */\r\n#define CAN_TDH2R_DATA7     CAN_TDH2R_DATA7_Msk            /*!< Data byte 7 */\r\n\r\n/*******************  Bit definition for CAN_RI0R register  *******************/\r\n#define CAN_RI0R_RTR_Pos  (1U)\r\n#define CAN_RI0R_RTR_Msk  (0x1U << CAN_RI0R_RTR_Pos) /*!< 0x00000002 */\r\n#define CAN_RI0R_RTR      CAN_RI0R_RTR_Msk           /*!< Remote Transmission Request */\r\n#define CAN_RI0R_IDE_Pos  (2U)\r\n#define CAN_RI0R_IDE_Msk  (0x1U << CAN_RI0R_IDE_Pos) /*!< 0x00000004 */\r\n#define CAN_RI0R_IDE      CAN_RI0R_IDE_Msk           /*!< Identifier Extension */\r\n#define CAN_RI0R_EXID_Pos (3U)\r\n#define CAN_RI0R_EXID_Msk (0x3FFFFU << CAN_RI0R_EXID_Pos) /*!< 0x001FFFF8 */\r\n#define CAN_RI0R_EXID     CAN_RI0R_EXID_Msk               /*!< Extended Identifier */\r\n#define CAN_RI0R_STID_Pos (21U)\r\n#define CAN_RI0R_STID_Msk (0x7FFU << CAN_RI0R_STID_Pos) /*!< 0xFFE00000 */\r\n#define CAN_RI0R_STID     CAN_RI0R_STID_Msk             /*!< Standard Identifier or Extended Identifier */\r\n\r\n/*******************  Bit definition for CAN_RDT0R register  ******************/\r\n#define CAN_RDT0R_DLC_Pos  (0U)\r\n#define CAN_RDT0R_DLC_Msk  (0xFU << CAN_RDT0R_DLC_Pos) /*!< 0x0000000F */\r\n#define CAN_RDT0R_DLC      CAN_RDT0R_DLC_Msk           /*!< Data Length Code */\r\n#define CAN_RDT0R_FMI_Pos  (8U)\r\n#define CAN_RDT0R_FMI_Msk  (0xFFU << CAN_RDT0R_FMI_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDT0R_FMI      CAN_RDT0R_FMI_Msk            /*!< Filter Match Index */\r\n#define CAN_RDT0R_TIME_Pos (16U)\r\n#define CAN_RDT0R_TIME_Msk (0xFFFFU << CAN_RDT0R_TIME_Pos) /*!< 0xFFFF0000 */\r\n#define CAN_RDT0R_TIME     CAN_RDT0R_TIME_Msk              /*!< Message Time Stamp */\r\n\r\n/*******************  Bit definition for CAN_RDL0R register  ******************/\r\n#define CAN_RDL0R_DATA0_Pos (0U)\r\n#define CAN_RDL0R_DATA0_Msk (0xFFU << CAN_RDL0R_DATA0_Pos) /*!< 0x000000FF */\r\n#define CAN_RDL0R_DATA0     CAN_RDL0R_DATA0_Msk            /*!< Data byte 0 */\r\n#define CAN_RDL0R_DATA1_Pos (8U)\r\n#define CAN_RDL0R_DATA1_Msk (0xFFU << CAN_RDL0R_DATA1_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDL0R_DATA1     CAN_RDL0R_DATA1_Msk            /*!< Data byte 1 */\r\n#define CAN_RDL0R_DATA2_Pos (16U)\r\n#define CAN_RDL0R_DATA2_Msk (0xFFU << CAN_RDL0R_DATA2_Pos) /*!< 0x00FF0000 */\r\n#define CAN_RDL0R_DATA2     CAN_RDL0R_DATA2_Msk            /*!< Data byte 2 */\r\n#define CAN_RDL0R_DATA3_Pos (24U)\r\n#define CAN_RDL0R_DATA3_Msk (0xFFU << CAN_RDL0R_DATA3_Pos) /*!< 0xFF000000 */\r\n#define CAN_RDL0R_DATA3     CAN_RDL0R_DATA3_Msk            /*!< Data byte 3 */\r\n\r\n/*******************  Bit definition for CAN_RDH0R register  ******************/\r\n#define CAN_RDH0R_DATA4_Pos (0U)\r\n#define CAN_RDH0R_DATA4_Msk (0xFFU << CAN_RDH0R_DATA4_Pos) /*!< 0x000000FF */\r\n#define CAN_RDH0R_DATA4     CAN_RDH0R_DATA4_Msk            /*!< Data byte 4 */\r\n#define CAN_RDH0R_DATA5_Pos (8U)\r\n#define CAN_RDH0R_DATA5_Msk (0xFFU << CAN_RDH0R_DATA5_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDH0R_DATA5     CAN_RDH0R_DATA5_Msk            /*!< Data byte 5 */\r\n#define CAN_RDH0R_DATA6_Pos (16U)\r\n#define CAN_RDH0R_DATA6_Msk (0xFFU << CAN_RDH0R_DATA6_Pos) /*!< 0x00FF0000 */\r\n#define CAN_RDH0R_DATA6     CAN_RDH0R_DATA6_Msk            /*!< Data byte 6 */\r\n#define CAN_RDH0R_DATA7_Pos (24U)\r\n#define CAN_RDH0R_DATA7_Msk (0xFFU << CAN_RDH0R_DATA7_Pos) /*!< 0xFF000000 */\r\n#define CAN_RDH0R_DATA7     CAN_RDH0R_DATA7_Msk            /*!< Data byte 7 */\r\n\r\n/*******************  Bit definition for CAN_RI1R register  *******************/\r\n#define CAN_RI1R_RTR_Pos  (1U)\r\n#define CAN_RI1R_RTR_Msk  (0x1U << CAN_RI1R_RTR_Pos) /*!< 0x00000002 */\r\n#define CAN_RI1R_RTR      CAN_RI1R_RTR_Msk           /*!< Remote Transmission Request */\r\n#define CAN_RI1R_IDE_Pos  (2U)\r\n#define CAN_RI1R_IDE_Msk  (0x1U << CAN_RI1R_IDE_Pos) /*!< 0x00000004 */\r\n#define CAN_RI1R_IDE      CAN_RI1R_IDE_Msk           /*!< Identifier Extension */\r\n#define CAN_RI1R_EXID_Pos (3U)\r\n#define CAN_RI1R_EXID_Msk (0x3FFFFU << CAN_RI1R_EXID_Pos) /*!< 0x001FFFF8 */\r\n#define CAN_RI1R_EXID     CAN_RI1R_EXID_Msk               /*!< Extended identifier */\r\n#define CAN_RI1R_STID_Pos (21U)\r\n#define CAN_RI1R_STID_Msk (0x7FFU << CAN_RI1R_STID_Pos) /*!< 0xFFE00000 */\r\n#define CAN_RI1R_STID     CAN_RI1R_STID_Msk             /*!< Standard Identifier or Extended Identifier */\r\n\r\n/*******************  Bit definition for CAN_RDT1R register  ******************/\r\n#define CAN_RDT1R_DLC_Pos  (0U)\r\n#define CAN_RDT1R_DLC_Msk  (0xFU << CAN_RDT1R_DLC_Pos) /*!< 0x0000000F */\r\n#define CAN_RDT1R_DLC      CAN_RDT1R_DLC_Msk           /*!< Data Length Code */\r\n#define CAN_RDT1R_FMI_Pos  (8U)\r\n#define CAN_RDT1R_FMI_Msk  (0xFFU << CAN_RDT1R_FMI_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDT1R_FMI      CAN_RDT1R_FMI_Msk            /*!< Filter Match Index */\r\n#define CAN_RDT1R_TIME_Pos (16U)\r\n#define CAN_RDT1R_TIME_Msk (0xFFFFU << CAN_RDT1R_TIME_Pos) /*!< 0xFFFF0000 */\r\n#define CAN_RDT1R_TIME     CAN_RDT1R_TIME_Msk              /*!< Message Time Stamp */\r\n\r\n/*******************  Bit definition for CAN_RDL1R register  ******************/\r\n#define CAN_RDL1R_DATA0_Pos (0U)\r\n#define CAN_RDL1R_DATA0_Msk (0xFFU << CAN_RDL1R_DATA0_Pos) /*!< 0x000000FF */\r\n#define CAN_RDL1R_DATA0     CAN_RDL1R_DATA0_Msk            /*!< Data byte 0 */\r\n#define CAN_RDL1R_DATA1_Pos (8U)\r\n#define CAN_RDL1R_DATA1_Msk (0xFFU << CAN_RDL1R_DATA1_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDL1R_DATA1     CAN_RDL1R_DATA1_Msk            /*!< Data byte 1 */\r\n#define CAN_RDL1R_DATA2_Pos (16U)\r\n#define CAN_RDL1R_DATA2_Msk (0xFFU << CAN_RDL1R_DATA2_Pos) /*!< 0x00FF0000 */\r\n#define CAN_RDL1R_DATA2     CAN_RDL1R_DATA2_Msk            /*!< Data byte 2 */\r\n#define CAN_RDL1R_DATA3_Pos (24U)\r\n#define CAN_RDL1R_DATA3_Msk (0xFFU << CAN_RDL1R_DATA3_Pos) /*!< 0xFF000000 */\r\n#define CAN_RDL1R_DATA3     CAN_RDL1R_DATA3_Msk            /*!< Data byte 3 */\r\n\r\n/*******************  Bit definition for CAN_RDH1R register  ******************/\r\n#define CAN_RDH1R_DATA4_Pos (0U)\r\n#define CAN_RDH1R_DATA4_Msk (0xFFU << CAN_RDH1R_DATA4_Pos) /*!< 0x000000FF */\r\n#define CAN_RDH1R_DATA4     CAN_RDH1R_DATA4_Msk            /*!< Data byte 4 */\r\n#define CAN_RDH1R_DATA5_Pos (8U)\r\n#define CAN_RDH1R_DATA5_Msk (0xFFU << CAN_RDH1R_DATA5_Pos) /*!< 0x0000FF00 */\r\n#define CAN_RDH1R_DATA5     CAN_RDH1R_DATA5_Msk            /*!< Data byte 5 */\r\n#define CAN_RDH1R_DATA6_Pos (16U)\r\n#define CAN_RDH1R_DATA6_Msk (0xFFU << CAN_RDH1R_DATA6_Pos) /*!< 0x00FF0000 */\r\n#define CAN_RDH1R_DATA6     CAN_RDH1R_DATA6_Msk            /*!< Data byte 6 */\r\n#define CAN_RDH1R_DATA7_Pos (24U)\r\n#define CAN_RDH1R_DATA7_Msk (0xFFU << CAN_RDH1R_DATA7_Pos) /*!< 0xFF000000 */\r\n#define CAN_RDH1R_DATA7     CAN_RDH1R_DATA7_Msk            /*!< Data byte 7 */\r\n\r\n/*!< CAN filter registers */\r\n/*******************  Bit definition for CAN_FMR register  ********************/\r\n#define CAN_FMR_FINIT_Pos  (0U)\r\n#define CAN_FMR_FINIT_Msk  (0x1U << CAN_FMR_FINIT_Pos) /*!< 0x00000001 */\r\n#define CAN_FMR_FINIT      CAN_FMR_FINIT_Msk           /*!< Filter Init Mode */\r\n#define CAN_FMR_CAN2SB_Pos (8U)\r\n#define CAN_FMR_CAN2SB_Msk (0x3FU << CAN_FMR_CAN2SB_Pos) /*!< 0x00003F00 */\r\n#define CAN_FMR_CAN2SB     CAN_FMR_CAN2SB_Msk            /*!< CAN2 start bank */\r\n\r\n/*******************  Bit definition for CAN_FM1R register  *******************/\r\n#define CAN_FM1R_FBM_Pos   (0U)\r\n#define CAN_FM1R_FBM_Msk   (0x3FFFU << CAN_FM1R_FBM_Pos) /*!< 0x00003FFF */\r\n#define CAN_FM1R_FBM       CAN_FM1R_FBM_Msk              /*!< Filter Mode */\r\n#define CAN_FM1R_FBM0_Pos  (0U)\r\n#define CAN_FM1R_FBM0_Msk  (0x1U << CAN_FM1R_FBM0_Pos) /*!< 0x00000001 */\r\n#define CAN_FM1R_FBM0      CAN_FM1R_FBM0_Msk           /*!< Filter Init Mode for filter 0 */\r\n#define CAN_FM1R_FBM1_Pos  (1U)\r\n#define CAN_FM1R_FBM1_Msk  (0x1U << CAN_FM1R_FBM1_Pos) /*!< 0x00000002 */\r\n#define CAN_FM1R_FBM1      CAN_FM1R_FBM1_Msk           /*!< Filter Init Mode for filter 1 */\r\n#define CAN_FM1R_FBM2_Pos  (2U)\r\n#define CAN_FM1R_FBM2_Msk  (0x1U << CAN_FM1R_FBM2_Pos) /*!< 0x00000004 */\r\n#define CAN_FM1R_FBM2      CAN_FM1R_FBM2_Msk           /*!< Filter Init Mode for filter 2 */\r\n#define CAN_FM1R_FBM3_Pos  (3U)\r\n#define CAN_FM1R_FBM3_Msk  (0x1U << CAN_FM1R_FBM3_Pos) /*!< 0x00000008 */\r\n#define CAN_FM1R_FBM3      CAN_FM1R_FBM3_Msk           /*!< Filter Init Mode for filter 3 */\r\n#define CAN_FM1R_FBM4_Pos  (4U)\r\n#define CAN_FM1R_FBM4_Msk  (0x1U << CAN_FM1R_FBM4_Pos) /*!< 0x00000010 */\r\n#define CAN_FM1R_FBM4      CAN_FM1R_FBM4_Msk           /*!< Filter Init Mode for filter 4 */\r\n#define CAN_FM1R_FBM5_Pos  (5U)\r\n#define CAN_FM1R_FBM5_Msk  (0x1U << CAN_FM1R_FBM5_Pos) /*!< 0x00000020 */\r\n#define CAN_FM1R_FBM5      CAN_FM1R_FBM5_Msk           /*!< Filter Init Mode for filter 5 */\r\n#define CAN_FM1R_FBM6_Pos  (6U)\r\n#define CAN_FM1R_FBM6_Msk  (0x1U << CAN_FM1R_FBM6_Pos) /*!< 0x00000040 */\r\n#define CAN_FM1R_FBM6      CAN_FM1R_FBM6_Msk           /*!< Filter Init Mode for filter 6 */\r\n#define CAN_FM1R_FBM7_Pos  (7U)\r\n#define CAN_FM1R_FBM7_Msk  (0x1U << CAN_FM1R_FBM7_Pos) /*!< 0x00000080 */\r\n#define CAN_FM1R_FBM7      CAN_FM1R_FBM7_Msk           /*!< Filter Init Mode for filter 7 */\r\n#define CAN_FM1R_FBM8_Pos  (8U)\r\n#define CAN_FM1R_FBM8_Msk  (0x1U << CAN_FM1R_FBM8_Pos) /*!< 0x00000100 */\r\n#define CAN_FM1R_FBM8      CAN_FM1R_FBM8_Msk           /*!< Filter Init Mode for filter 8 */\r\n#define CAN_FM1R_FBM9_Pos  (9U)\r\n#define CAN_FM1R_FBM9_Msk  (0x1U << CAN_FM1R_FBM9_Pos) /*!< 0x00000200 */\r\n#define CAN_FM1R_FBM9      CAN_FM1R_FBM9_Msk           /*!< Filter Init Mode for filter 9 */\r\n#define CAN_FM1R_FBM10_Pos (10U)\r\n#define CAN_FM1R_FBM10_Msk (0x1U << CAN_FM1R_FBM10_Pos) /*!< 0x00000400 */\r\n#define CAN_FM1R_FBM10     CAN_FM1R_FBM10_Msk           /*!< Filter Init Mode for filter 10 */\r\n#define CAN_FM1R_FBM11_Pos (11U)\r\n#define CAN_FM1R_FBM11_Msk (0x1U << CAN_FM1R_FBM11_Pos) /*!< 0x00000800 */\r\n#define CAN_FM1R_FBM11     CAN_FM1R_FBM11_Msk           /*!< Filter Init Mode for filter 11 */\r\n#define CAN_FM1R_FBM12_Pos (12U)\r\n#define CAN_FM1R_FBM12_Msk (0x1U << CAN_FM1R_FBM12_Pos) /*!< 0x00001000 */\r\n#define CAN_FM1R_FBM12     CAN_FM1R_FBM12_Msk           /*!< Filter Init Mode for filter 12 */\r\n#define CAN_FM1R_FBM13_Pos (13U)\r\n#define CAN_FM1R_FBM13_Msk (0x1U << CAN_FM1R_FBM13_Pos) /*!< 0x00002000 */\r\n#define CAN_FM1R_FBM13     CAN_FM1R_FBM13_Msk           /*!< Filter Init Mode for filter 13 */\r\n\r\n/*******************  Bit definition for CAN_FS1R register  *******************/\r\n#define CAN_FS1R_FSC_Pos   (0U)\r\n#define CAN_FS1R_FSC_Msk   (0x3FFFU << CAN_FS1R_FSC_Pos) /*!< 0x00003FFF */\r\n#define CAN_FS1R_FSC       CAN_FS1R_FSC_Msk              /*!< Filter Scale Configuration */\r\n#define CAN_FS1R_FSC0_Pos  (0U)\r\n#define CAN_FS1R_FSC0_Msk  (0x1U << CAN_FS1R_FSC0_Pos) /*!< 0x00000001 */\r\n#define CAN_FS1R_FSC0      CAN_FS1R_FSC0_Msk           /*!< Filter Scale Configuration for filter 0 */\r\n#define CAN_FS1R_FSC1_Pos  (1U)\r\n#define CAN_FS1R_FSC1_Msk  (0x1U << CAN_FS1R_FSC1_Pos) /*!< 0x00000002 */\r\n#define CAN_FS1R_FSC1      CAN_FS1R_FSC1_Msk           /*!< Filter Scale Configuration for filter 1 */\r\n#define CAN_FS1R_FSC2_Pos  (2U)\r\n#define CAN_FS1R_FSC2_Msk  (0x1U << CAN_FS1R_FSC2_Pos) /*!< 0x00000004 */\r\n#define CAN_FS1R_FSC2      CAN_FS1R_FSC2_Msk           /*!< Filter Scale Configuration for filter 2 */\r\n#define CAN_FS1R_FSC3_Pos  (3U)\r\n#define CAN_FS1R_FSC3_Msk  (0x1U << CAN_FS1R_FSC3_Pos) /*!< 0x00000008 */\r\n#define CAN_FS1R_FSC3      CAN_FS1R_FSC3_Msk           /*!< Filter Scale Configuration for filter 3 */\r\n#define CAN_FS1R_FSC4_Pos  (4U)\r\n#define CAN_FS1R_FSC4_Msk  (0x1U << CAN_FS1R_FSC4_Pos) /*!< 0x00000010 */\r\n#define CAN_FS1R_FSC4      CAN_FS1R_FSC4_Msk           /*!< Filter Scale Configuration for filter 4 */\r\n#define CAN_FS1R_FSC5_Pos  (5U)\r\n#define CAN_FS1R_FSC5_Msk  (0x1U << CAN_FS1R_FSC5_Pos) /*!< 0x00000020 */\r\n#define CAN_FS1R_FSC5      CAN_FS1R_FSC5_Msk           /*!< Filter Scale Configuration for filter 5 */\r\n#define CAN_FS1R_FSC6_Pos  (6U)\r\n#define CAN_FS1R_FSC6_Msk  (0x1U << CAN_FS1R_FSC6_Pos) /*!< 0x00000040 */\r\n#define CAN_FS1R_FSC6      CAN_FS1R_FSC6_Msk           /*!< Filter Scale Configuration for filter 6 */\r\n#define CAN_FS1R_FSC7_Pos  (7U)\r\n#define CAN_FS1R_FSC7_Msk  (0x1U << CAN_FS1R_FSC7_Pos) /*!< 0x00000080 */\r\n#define CAN_FS1R_FSC7      CAN_FS1R_FSC7_Msk           /*!< Filter Scale Configuration for filter 7 */\r\n#define CAN_FS1R_FSC8_Pos  (8U)\r\n#define CAN_FS1R_FSC8_Msk  (0x1U << CAN_FS1R_FSC8_Pos) /*!< 0x00000100 */\r\n#define CAN_FS1R_FSC8      CAN_FS1R_FSC8_Msk           /*!< Filter Scale Configuration for filter 8 */\r\n#define CAN_FS1R_FSC9_Pos  (9U)\r\n#define CAN_FS1R_FSC9_Msk  (0x1U << CAN_FS1R_FSC9_Pos) /*!< 0x00000200 */\r\n#define CAN_FS1R_FSC9      CAN_FS1R_FSC9_Msk           /*!< Filter Scale Configuration for filter 9 */\r\n#define CAN_FS1R_FSC10_Pos (10U)\r\n#define CAN_FS1R_FSC10_Msk (0x1U << CAN_FS1R_FSC10_Pos) /*!< 0x00000400 */\r\n#define CAN_FS1R_FSC10     CAN_FS1R_FSC10_Msk           /*!< Filter Scale Configuration for filter 10 */\r\n#define CAN_FS1R_FSC11_Pos (11U)\r\n#define CAN_FS1R_FSC11_Msk (0x1U << CAN_FS1R_FSC11_Pos) /*!< 0x00000800 */\r\n#define CAN_FS1R_FSC11     CAN_FS1R_FSC11_Msk           /*!< Filter Scale Configuration for filter 11 */\r\n#define CAN_FS1R_FSC12_Pos (12U)\r\n#define CAN_FS1R_FSC12_Msk (0x1U << CAN_FS1R_FSC12_Pos) /*!< 0x00001000 */\r\n#define CAN_FS1R_FSC12     CAN_FS1R_FSC12_Msk           /*!< Filter Scale Configuration for filter 12 */\r\n#define CAN_FS1R_FSC13_Pos (13U)\r\n#define CAN_FS1R_FSC13_Msk (0x1U << CAN_FS1R_FSC13_Pos) /*!< 0x00002000 */\r\n#define CAN_FS1R_FSC13     CAN_FS1R_FSC13_Msk           /*!< Filter Scale Configuration for filter 13 */\r\n\r\n/******************  Bit definition for CAN_FFA1R register  *******************/\r\n#define CAN_FFA1R_FFA_Pos   (0U)\r\n#define CAN_FFA1R_FFA_Msk   (0x3FFFU << CAN_FFA1R_FFA_Pos) /*!< 0x00003FFF */\r\n#define CAN_FFA1R_FFA       CAN_FFA1R_FFA_Msk              /*!< Filter FIFO Assignment */\r\n#define CAN_FFA1R_FFA0_Pos  (0U)\r\n#define CAN_FFA1R_FFA0_Msk  (0x1U << CAN_FFA1R_FFA0_Pos) /*!< 0x00000001 */\r\n#define CAN_FFA1R_FFA0      CAN_FFA1R_FFA0_Msk           /*!< Filter FIFO Assignment for filter 0 */\r\n#define CAN_FFA1R_FFA1_Pos  (1U)\r\n#define CAN_FFA1R_FFA1_Msk  (0x1U << CAN_FFA1R_FFA1_Pos) /*!< 0x00000002 */\r\n#define CAN_FFA1R_FFA1      CAN_FFA1R_FFA1_Msk           /*!< Filter FIFO Assignment for filter 1 */\r\n#define CAN_FFA1R_FFA2_Pos  (2U)\r\n#define CAN_FFA1R_FFA2_Msk  (0x1U << CAN_FFA1R_FFA2_Pos) /*!< 0x00000004 */\r\n#define CAN_FFA1R_FFA2      CAN_FFA1R_FFA2_Msk           /*!< Filter FIFO Assignment for filter 2 */\r\n#define CAN_FFA1R_FFA3_Pos  (3U)\r\n#define CAN_FFA1R_FFA3_Msk  (0x1U << CAN_FFA1R_FFA3_Pos) /*!< 0x00000008 */\r\n#define CAN_FFA1R_FFA3      CAN_FFA1R_FFA3_Msk           /*!< Filter FIFO Assignment for filter 3 */\r\n#define CAN_FFA1R_FFA4_Pos  (4U)\r\n#define CAN_FFA1R_FFA4_Msk  (0x1U << CAN_FFA1R_FFA4_Pos) /*!< 0x00000010 */\r\n#define CAN_FFA1R_FFA4      CAN_FFA1R_FFA4_Msk           /*!< Filter FIFO Assignment for filter 4 */\r\n#define CAN_FFA1R_FFA5_Pos  (5U)\r\n#define CAN_FFA1R_FFA5_Msk  (0x1U << CAN_FFA1R_FFA5_Pos) /*!< 0x00000020 */\r\n#define CAN_FFA1R_FFA5      CAN_FFA1R_FFA5_Msk           /*!< Filter FIFO Assignment for filter 5 */\r\n#define CAN_FFA1R_FFA6_Pos  (6U)\r\n#define CAN_FFA1R_FFA6_Msk  (0x1U << CAN_FFA1R_FFA6_Pos) /*!< 0x00000040 */\r\n#define CAN_FFA1R_FFA6      CAN_FFA1R_FFA6_Msk           /*!< Filter FIFO Assignment for filter 6 */\r\n#define CAN_FFA1R_FFA7_Pos  (7U)\r\n#define CAN_FFA1R_FFA7_Msk  (0x1U << CAN_FFA1R_FFA7_Pos) /*!< 0x00000080 */\r\n#define CAN_FFA1R_FFA7      CAN_FFA1R_FFA7_Msk           /*!< Filter FIFO Assignment for filter 7 */\r\n#define CAN_FFA1R_FFA8_Pos  (8U)\r\n#define CAN_FFA1R_FFA8_Msk  (0x1U << CAN_FFA1R_FFA8_Pos) /*!< 0x00000100 */\r\n#define CAN_FFA1R_FFA8      CAN_FFA1R_FFA8_Msk           /*!< Filter FIFO Assignment for filter 8 */\r\n#define CAN_FFA1R_FFA9_Pos  (9U)\r\n#define CAN_FFA1R_FFA9_Msk  (0x1U << CAN_FFA1R_FFA9_Pos) /*!< 0x00000200 */\r\n#define CAN_FFA1R_FFA9      CAN_FFA1R_FFA9_Msk           /*!< Filter FIFO Assignment for filter 9 */\r\n#define CAN_FFA1R_FFA10_Pos (10U)\r\n#define CAN_FFA1R_FFA10_Msk (0x1U << CAN_FFA1R_FFA10_Pos) /*!< 0x00000400 */\r\n#define CAN_FFA1R_FFA10     CAN_FFA1R_FFA10_Msk           /*!< Filter FIFO Assignment for filter 10 */\r\n#define CAN_FFA1R_FFA11_Pos (11U)\r\n#define CAN_FFA1R_FFA11_Msk (0x1U << CAN_FFA1R_FFA11_Pos) /*!< 0x00000800 */\r\n#define CAN_FFA1R_FFA11     CAN_FFA1R_FFA11_Msk           /*!< Filter FIFO Assignment for filter 11 */\r\n#define CAN_FFA1R_FFA12_Pos (12U)\r\n#define CAN_FFA1R_FFA12_Msk (0x1U << CAN_FFA1R_FFA12_Pos) /*!< 0x00001000 */\r\n#define CAN_FFA1R_FFA12     CAN_FFA1R_FFA12_Msk           /*!< Filter FIFO Assignment for filter 12 */\r\n#define CAN_FFA1R_FFA13_Pos (13U)\r\n#define CAN_FFA1R_FFA13_Msk (0x1U << CAN_FFA1R_FFA13_Pos) /*!< 0x00002000 */\r\n#define CAN_FFA1R_FFA13     CAN_FFA1R_FFA13_Msk           /*!< Filter FIFO Assignment for filter 13 */\r\n\r\n/*******************  Bit definition for CAN_FA1R register  *******************/\r\n#define CAN_FA1R_FACT_Pos   (0U)\r\n#define CAN_FA1R_FACT_Msk   (0x3FFFU << CAN_FA1R_FACT_Pos) /*!< 0x00003FFF */\r\n#define CAN_FA1R_FACT       CAN_FA1R_FACT_Msk              /*!< Filter Active */\r\n#define CAN_FA1R_FACT0_Pos  (0U)\r\n#define CAN_FA1R_FACT0_Msk  (0x1U << CAN_FA1R_FACT0_Pos) /*!< 0x00000001 */\r\n#define CAN_FA1R_FACT0      CAN_FA1R_FACT0_Msk           /*!< Filter 0 Active */\r\n#define CAN_FA1R_FACT1_Pos  (1U)\r\n#define CAN_FA1R_FACT1_Msk  (0x1U << CAN_FA1R_FACT1_Pos) /*!< 0x00000002 */\r\n#define CAN_FA1R_FACT1      CAN_FA1R_FACT1_Msk           /*!< Filter 1 Active */\r\n#define CAN_FA1R_FACT2_Pos  (2U)\r\n#define CAN_FA1R_FACT2_Msk  (0x1U << CAN_FA1R_FACT2_Pos) /*!< 0x00000004 */\r\n#define CAN_FA1R_FACT2      CAN_FA1R_FACT2_Msk           /*!< Filter 2 Active */\r\n#define CAN_FA1R_FACT3_Pos  (3U)\r\n#define CAN_FA1R_FACT3_Msk  (0x1U << CAN_FA1R_FACT3_Pos) /*!< 0x00000008 */\r\n#define CAN_FA1R_FACT3      CAN_FA1R_FACT3_Msk           /*!< Filter 3 Active */\r\n#define CAN_FA1R_FACT4_Pos  (4U)\r\n#define CAN_FA1R_FACT4_Msk  (0x1U << CAN_FA1R_FACT4_Pos) /*!< 0x00000010 */\r\n#define CAN_FA1R_FACT4      CAN_FA1R_FACT4_Msk           /*!< Filter 4 Active */\r\n#define CAN_FA1R_FACT5_Pos  (5U)\r\n#define CAN_FA1R_FACT5_Msk  (0x1U << CAN_FA1R_FACT5_Pos) /*!< 0x00000020 */\r\n#define CAN_FA1R_FACT5      CAN_FA1R_FACT5_Msk           /*!< Filter 5 Active */\r\n#define CAN_FA1R_FACT6_Pos  (6U)\r\n#define CAN_FA1R_FACT6_Msk  (0x1U << CAN_FA1R_FACT6_Pos) /*!< 0x00000040 */\r\n#define CAN_FA1R_FACT6      CAN_FA1R_FACT6_Msk           /*!< Filter 6 Active */\r\n#define CAN_FA1R_FACT7_Pos  (7U)\r\n#define CAN_FA1R_FACT7_Msk  (0x1U << CAN_FA1R_FACT7_Pos) /*!< 0x00000080 */\r\n#define CAN_FA1R_FACT7      CAN_FA1R_FACT7_Msk           /*!< Filter 7 Active */\r\n#define CAN_FA1R_FACT8_Pos  (8U)\r\n#define CAN_FA1R_FACT8_Msk  (0x1U << CAN_FA1R_FACT8_Pos) /*!< 0x00000100 */\r\n#define CAN_FA1R_FACT8      CAN_FA1R_FACT8_Msk           /*!< Filter 8 Active */\r\n#define CAN_FA1R_FACT9_Pos  (9U)\r\n#define CAN_FA1R_FACT9_Msk  (0x1U << CAN_FA1R_FACT9_Pos) /*!< 0x00000200 */\r\n#define CAN_FA1R_FACT9      CAN_FA1R_FACT9_Msk           /*!< Filter 9 Active */\r\n#define CAN_FA1R_FACT10_Pos (10U)\r\n#define CAN_FA1R_FACT10_Msk (0x1U << CAN_FA1R_FACT10_Pos) /*!< 0x00000400 */\r\n#define CAN_FA1R_FACT10     CAN_FA1R_FACT10_Msk           /*!< Filter 10 Active */\r\n#define CAN_FA1R_FACT11_Pos (11U)\r\n#define CAN_FA1R_FACT11_Msk (0x1U << CAN_FA1R_FACT11_Pos) /*!< 0x00000800 */\r\n#define CAN_FA1R_FACT11     CAN_FA1R_FACT11_Msk           /*!< Filter 11 Active */\r\n#define CAN_FA1R_FACT12_Pos (12U)\r\n#define CAN_FA1R_FACT12_Msk (0x1U << CAN_FA1R_FACT12_Pos) /*!< 0x00001000 */\r\n#define CAN_FA1R_FACT12     CAN_FA1R_FACT12_Msk           /*!< Filter 12 Active */\r\n#define CAN_FA1R_FACT13_Pos (13U)\r\n#define CAN_FA1R_FACT13_Msk (0x1U << CAN_FA1R_FACT13_Pos) /*!< 0x00002000 */\r\n#define CAN_FA1R_FACT13     CAN_FA1R_FACT13_Msk           /*!< Filter 13 Active */\r\n\r\n/*******************  Bit definition for CAN_F0R1 register  *******************/\r\n#define CAN_F0R1_FB0_Pos  (0U)\r\n#define CAN_F0R1_FB0_Msk  (0x1U << CAN_F0R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F0R1_FB0      CAN_F0R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F0R1_FB1_Pos  (1U)\r\n#define CAN_F0R1_FB1_Msk  (0x1U << CAN_F0R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F0R1_FB1      CAN_F0R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F0R1_FB2_Pos  (2U)\r\n#define CAN_F0R1_FB2_Msk  (0x1U << CAN_F0R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F0R1_FB2      CAN_F0R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F0R1_FB3_Pos  (3U)\r\n#define CAN_F0R1_FB3_Msk  (0x1U << CAN_F0R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F0R1_FB3      CAN_F0R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F0R1_FB4_Pos  (4U)\r\n#define CAN_F0R1_FB4_Msk  (0x1U << CAN_F0R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F0R1_FB4      CAN_F0R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F0R1_FB5_Pos  (5U)\r\n#define CAN_F0R1_FB5_Msk  (0x1U << CAN_F0R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F0R1_FB5      CAN_F0R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F0R1_FB6_Pos  (6U)\r\n#define CAN_F0R1_FB6_Msk  (0x1U << CAN_F0R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F0R1_FB6      CAN_F0R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F0R1_FB7_Pos  (7U)\r\n#define CAN_F0R1_FB7_Msk  (0x1U << CAN_F0R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F0R1_FB7      CAN_F0R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F0R1_FB8_Pos  (8U)\r\n#define CAN_F0R1_FB8_Msk  (0x1U << CAN_F0R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F0R1_FB8      CAN_F0R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F0R1_FB9_Pos  (9U)\r\n#define CAN_F0R1_FB9_Msk  (0x1U << CAN_F0R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F0R1_FB9      CAN_F0R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F0R1_FB10_Pos (10U)\r\n#define CAN_F0R1_FB10_Msk (0x1U << CAN_F0R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F0R1_FB10     CAN_F0R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F0R1_FB11_Pos (11U)\r\n#define CAN_F0R1_FB11_Msk (0x1U << CAN_F0R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F0R1_FB11     CAN_F0R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F0R1_FB12_Pos (12U)\r\n#define CAN_F0R1_FB12_Msk (0x1U << CAN_F0R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F0R1_FB12     CAN_F0R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F0R1_FB13_Pos (13U)\r\n#define CAN_F0R1_FB13_Msk (0x1U << CAN_F0R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F0R1_FB13     CAN_F0R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F0R1_FB14_Pos (14U)\r\n#define CAN_F0R1_FB14_Msk (0x1U << CAN_F0R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F0R1_FB14     CAN_F0R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F0R1_FB15_Pos (15U)\r\n#define CAN_F0R1_FB15_Msk (0x1U << CAN_F0R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F0R1_FB15     CAN_F0R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F0R1_FB16_Pos (16U)\r\n#define CAN_F0R1_FB16_Msk (0x1U << CAN_F0R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F0R1_FB16     CAN_F0R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F0R1_FB17_Pos (17U)\r\n#define CAN_F0R1_FB17_Msk (0x1U << CAN_F0R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F0R1_FB17     CAN_F0R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F0R1_FB18_Pos (18U)\r\n#define CAN_F0R1_FB18_Msk (0x1U << CAN_F0R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F0R1_FB18     CAN_F0R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F0R1_FB19_Pos (19U)\r\n#define CAN_F0R1_FB19_Msk (0x1U << CAN_F0R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F0R1_FB19     CAN_F0R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F0R1_FB20_Pos (20U)\r\n#define CAN_F0R1_FB20_Msk (0x1U << CAN_F0R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F0R1_FB20     CAN_F0R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F0R1_FB21_Pos (21U)\r\n#define CAN_F0R1_FB21_Msk (0x1U << CAN_F0R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F0R1_FB21     CAN_F0R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F0R1_FB22_Pos (22U)\r\n#define CAN_F0R1_FB22_Msk (0x1U << CAN_F0R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F0R1_FB22     CAN_F0R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F0R1_FB23_Pos (23U)\r\n#define CAN_F0R1_FB23_Msk (0x1U << CAN_F0R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F0R1_FB23     CAN_F0R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F0R1_FB24_Pos (24U)\r\n#define CAN_F0R1_FB24_Msk (0x1U << CAN_F0R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F0R1_FB24     CAN_F0R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F0R1_FB25_Pos (25U)\r\n#define CAN_F0R1_FB25_Msk (0x1U << CAN_F0R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F0R1_FB25     CAN_F0R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F0R1_FB26_Pos (26U)\r\n#define CAN_F0R1_FB26_Msk (0x1U << CAN_F0R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F0R1_FB26     CAN_F0R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F0R1_FB27_Pos (27U)\r\n#define CAN_F0R1_FB27_Msk (0x1U << CAN_F0R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F0R1_FB27     CAN_F0R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F0R1_FB28_Pos (28U)\r\n#define CAN_F0R1_FB28_Msk (0x1U << CAN_F0R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F0R1_FB28     CAN_F0R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F0R1_FB29_Pos (29U)\r\n#define CAN_F0R1_FB29_Msk (0x1U << CAN_F0R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F0R1_FB29     CAN_F0R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F0R1_FB30_Pos (30U)\r\n#define CAN_F0R1_FB30_Msk (0x1U << CAN_F0R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F0R1_FB30     CAN_F0R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F0R1_FB31_Pos (31U)\r\n#define CAN_F0R1_FB31_Msk (0x1U << CAN_F0R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F0R1_FB31     CAN_F0R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F1R1 register  *******************/\r\n#define CAN_F1R1_FB0_Pos  (0U)\r\n#define CAN_F1R1_FB0_Msk  (0x1U << CAN_F1R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F1R1_FB0      CAN_F1R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F1R1_FB1_Pos  (1U)\r\n#define CAN_F1R1_FB1_Msk  (0x1U << CAN_F1R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F1R1_FB1      CAN_F1R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F1R1_FB2_Pos  (2U)\r\n#define CAN_F1R1_FB2_Msk  (0x1U << CAN_F1R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F1R1_FB2      CAN_F1R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F1R1_FB3_Pos  (3U)\r\n#define CAN_F1R1_FB3_Msk  (0x1U << CAN_F1R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F1R1_FB3      CAN_F1R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F1R1_FB4_Pos  (4U)\r\n#define CAN_F1R1_FB4_Msk  (0x1U << CAN_F1R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F1R1_FB4      CAN_F1R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F1R1_FB5_Pos  (5U)\r\n#define CAN_F1R1_FB5_Msk  (0x1U << CAN_F1R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F1R1_FB5      CAN_F1R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F1R1_FB6_Pos  (6U)\r\n#define CAN_F1R1_FB6_Msk  (0x1U << CAN_F1R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F1R1_FB6      CAN_F1R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F1R1_FB7_Pos  (7U)\r\n#define CAN_F1R1_FB7_Msk  (0x1U << CAN_F1R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F1R1_FB7      CAN_F1R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F1R1_FB8_Pos  (8U)\r\n#define CAN_F1R1_FB8_Msk  (0x1U << CAN_F1R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F1R1_FB8      CAN_F1R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F1R1_FB9_Pos  (9U)\r\n#define CAN_F1R1_FB9_Msk  (0x1U << CAN_F1R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F1R1_FB9      CAN_F1R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F1R1_FB10_Pos (10U)\r\n#define CAN_F1R1_FB10_Msk (0x1U << CAN_F1R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F1R1_FB10     CAN_F1R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F1R1_FB11_Pos (11U)\r\n#define CAN_F1R1_FB11_Msk (0x1U << CAN_F1R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F1R1_FB11     CAN_F1R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F1R1_FB12_Pos (12U)\r\n#define CAN_F1R1_FB12_Msk (0x1U << CAN_F1R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F1R1_FB12     CAN_F1R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F1R1_FB13_Pos (13U)\r\n#define CAN_F1R1_FB13_Msk (0x1U << CAN_F1R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F1R1_FB13     CAN_F1R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F1R1_FB14_Pos (14U)\r\n#define CAN_F1R1_FB14_Msk (0x1U << CAN_F1R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F1R1_FB14     CAN_F1R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F1R1_FB15_Pos (15U)\r\n#define CAN_F1R1_FB15_Msk (0x1U << CAN_F1R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F1R1_FB15     CAN_F1R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F1R1_FB16_Pos (16U)\r\n#define CAN_F1R1_FB16_Msk (0x1U << CAN_F1R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F1R1_FB16     CAN_F1R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F1R1_FB17_Pos (17U)\r\n#define CAN_F1R1_FB17_Msk (0x1U << CAN_F1R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F1R1_FB17     CAN_F1R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F1R1_FB18_Pos (18U)\r\n#define CAN_F1R1_FB18_Msk (0x1U << CAN_F1R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F1R1_FB18     CAN_F1R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F1R1_FB19_Pos (19U)\r\n#define CAN_F1R1_FB19_Msk (0x1U << CAN_F1R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F1R1_FB19     CAN_F1R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F1R1_FB20_Pos (20U)\r\n#define CAN_F1R1_FB20_Msk (0x1U << CAN_F1R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F1R1_FB20     CAN_F1R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F1R1_FB21_Pos (21U)\r\n#define CAN_F1R1_FB21_Msk (0x1U << CAN_F1R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F1R1_FB21     CAN_F1R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F1R1_FB22_Pos (22U)\r\n#define CAN_F1R1_FB22_Msk (0x1U << CAN_F1R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F1R1_FB22     CAN_F1R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F1R1_FB23_Pos (23U)\r\n#define CAN_F1R1_FB23_Msk (0x1U << CAN_F1R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F1R1_FB23     CAN_F1R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F1R1_FB24_Pos (24U)\r\n#define CAN_F1R1_FB24_Msk (0x1U << CAN_F1R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F1R1_FB24     CAN_F1R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F1R1_FB25_Pos (25U)\r\n#define CAN_F1R1_FB25_Msk (0x1U << CAN_F1R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F1R1_FB25     CAN_F1R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F1R1_FB26_Pos (26U)\r\n#define CAN_F1R1_FB26_Msk (0x1U << CAN_F1R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F1R1_FB26     CAN_F1R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F1R1_FB27_Pos (27U)\r\n#define CAN_F1R1_FB27_Msk (0x1U << CAN_F1R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F1R1_FB27     CAN_F1R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F1R1_FB28_Pos (28U)\r\n#define CAN_F1R1_FB28_Msk (0x1U << CAN_F1R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F1R1_FB28     CAN_F1R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F1R1_FB29_Pos (29U)\r\n#define CAN_F1R1_FB29_Msk (0x1U << CAN_F1R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F1R1_FB29     CAN_F1R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F1R1_FB30_Pos (30U)\r\n#define CAN_F1R1_FB30_Msk (0x1U << CAN_F1R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F1R1_FB30     CAN_F1R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F1R1_FB31_Pos (31U)\r\n#define CAN_F1R1_FB31_Msk (0x1U << CAN_F1R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F1R1_FB31     CAN_F1R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F2R1 register  *******************/\r\n#define CAN_F2R1_FB0_Pos  (0U)\r\n#define CAN_F2R1_FB0_Msk  (0x1U << CAN_F2R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F2R1_FB0      CAN_F2R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F2R1_FB1_Pos  (1U)\r\n#define CAN_F2R1_FB1_Msk  (0x1U << CAN_F2R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F2R1_FB1      CAN_F2R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F2R1_FB2_Pos  (2U)\r\n#define CAN_F2R1_FB2_Msk  (0x1U << CAN_F2R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F2R1_FB2      CAN_F2R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F2R1_FB3_Pos  (3U)\r\n#define CAN_F2R1_FB3_Msk  (0x1U << CAN_F2R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F2R1_FB3      CAN_F2R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F2R1_FB4_Pos  (4U)\r\n#define CAN_F2R1_FB4_Msk  (0x1U << CAN_F2R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F2R1_FB4      CAN_F2R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F2R1_FB5_Pos  (5U)\r\n#define CAN_F2R1_FB5_Msk  (0x1U << CAN_F2R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F2R1_FB5      CAN_F2R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F2R1_FB6_Pos  (6U)\r\n#define CAN_F2R1_FB6_Msk  (0x1U << CAN_F2R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F2R1_FB6      CAN_F2R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F2R1_FB7_Pos  (7U)\r\n#define CAN_F2R1_FB7_Msk  (0x1U << CAN_F2R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F2R1_FB7      CAN_F2R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F2R1_FB8_Pos  (8U)\r\n#define CAN_F2R1_FB8_Msk  (0x1U << CAN_F2R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F2R1_FB8      CAN_F2R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F2R1_FB9_Pos  (9U)\r\n#define CAN_F2R1_FB9_Msk  (0x1U << CAN_F2R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F2R1_FB9      CAN_F2R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F2R1_FB10_Pos (10U)\r\n#define CAN_F2R1_FB10_Msk (0x1U << CAN_F2R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F2R1_FB10     CAN_F2R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F2R1_FB11_Pos (11U)\r\n#define CAN_F2R1_FB11_Msk (0x1U << CAN_F2R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F2R1_FB11     CAN_F2R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F2R1_FB12_Pos (12U)\r\n#define CAN_F2R1_FB12_Msk (0x1U << CAN_F2R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F2R1_FB12     CAN_F2R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F2R1_FB13_Pos (13U)\r\n#define CAN_F2R1_FB13_Msk (0x1U << CAN_F2R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F2R1_FB13     CAN_F2R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F2R1_FB14_Pos (14U)\r\n#define CAN_F2R1_FB14_Msk (0x1U << CAN_F2R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F2R1_FB14     CAN_F2R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F2R1_FB15_Pos (15U)\r\n#define CAN_F2R1_FB15_Msk (0x1U << CAN_F2R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F2R1_FB15     CAN_F2R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F2R1_FB16_Pos (16U)\r\n#define CAN_F2R1_FB16_Msk (0x1U << CAN_F2R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F2R1_FB16     CAN_F2R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F2R1_FB17_Pos (17U)\r\n#define CAN_F2R1_FB17_Msk (0x1U << CAN_F2R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F2R1_FB17     CAN_F2R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F2R1_FB18_Pos (18U)\r\n#define CAN_F2R1_FB18_Msk (0x1U << CAN_F2R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F2R1_FB18     CAN_F2R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F2R1_FB19_Pos (19U)\r\n#define CAN_F2R1_FB19_Msk (0x1U << CAN_F2R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F2R1_FB19     CAN_F2R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F2R1_FB20_Pos (20U)\r\n#define CAN_F2R1_FB20_Msk (0x1U << CAN_F2R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F2R1_FB20     CAN_F2R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F2R1_FB21_Pos (21U)\r\n#define CAN_F2R1_FB21_Msk (0x1U << CAN_F2R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F2R1_FB21     CAN_F2R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F2R1_FB22_Pos (22U)\r\n#define CAN_F2R1_FB22_Msk (0x1U << CAN_F2R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F2R1_FB22     CAN_F2R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F2R1_FB23_Pos (23U)\r\n#define CAN_F2R1_FB23_Msk (0x1U << CAN_F2R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F2R1_FB23     CAN_F2R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F2R1_FB24_Pos (24U)\r\n#define CAN_F2R1_FB24_Msk (0x1U << CAN_F2R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F2R1_FB24     CAN_F2R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F2R1_FB25_Pos (25U)\r\n#define CAN_F2R1_FB25_Msk (0x1U << CAN_F2R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F2R1_FB25     CAN_F2R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F2R1_FB26_Pos (26U)\r\n#define CAN_F2R1_FB26_Msk (0x1U << CAN_F2R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F2R1_FB26     CAN_F2R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F2R1_FB27_Pos (27U)\r\n#define CAN_F2R1_FB27_Msk (0x1U << CAN_F2R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F2R1_FB27     CAN_F2R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F2R1_FB28_Pos (28U)\r\n#define CAN_F2R1_FB28_Msk (0x1U << CAN_F2R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F2R1_FB28     CAN_F2R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F2R1_FB29_Pos (29U)\r\n#define CAN_F2R1_FB29_Msk (0x1U << CAN_F2R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F2R1_FB29     CAN_F2R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F2R1_FB30_Pos (30U)\r\n#define CAN_F2R1_FB30_Msk (0x1U << CAN_F2R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F2R1_FB30     CAN_F2R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F2R1_FB31_Pos (31U)\r\n#define CAN_F2R1_FB31_Msk (0x1U << CAN_F2R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F2R1_FB31     CAN_F2R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F3R1 register  *******************/\r\n#define CAN_F3R1_FB0_Pos  (0U)\r\n#define CAN_F3R1_FB0_Msk  (0x1U << CAN_F3R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F3R1_FB0      CAN_F3R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F3R1_FB1_Pos  (1U)\r\n#define CAN_F3R1_FB1_Msk  (0x1U << CAN_F3R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F3R1_FB1      CAN_F3R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F3R1_FB2_Pos  (2U)\r\n#define CAN_F3R1_FB2_Msk  (0x1U << CAN_F3R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F3R1_FB2      CAN_F3R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F3R1_FB3_Pos  (3U)\r\n#define CAN_F3R1_FB3_Msk  (0x1U << CAN_F3R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F3R1_FB3      CAN_F3R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F3R1_FB4_Pos  (4U)\r\n#define CAN_F3R1_FB4_Msk  (0x1U << CAN_F3R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F3R1_FB4      CAN_F3R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F3R1_FB5_Pos  (5U)\r\n#define CAN_F3R1_FB5_Msk  (0x1U << CAN_F3R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F3R1_FB5      CAN_F3R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F3R1_FB6_Pos  (6U)\r\n#define CAN_F3R1_FB6_Msk  (0x1U << CAN_F3R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F3R1_FB6      CAN_F3R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F3R1_FB7_Pos  (7U)\r\n#define CAN_F3R1_FB7_Msk  (0x1U << CAN_F3R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F3R1_FB7      CAN_F3R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F3R1_FB8_Pos  (8U)\r\n#define CAN_F3R1_FB8_Msk  (0x1U << CAN_F3R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F3R1_FB8      CAN_F3R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F3R1_FB9_Pos  (9U)\r\n#define CAN_F3R1_FB9_Msk  (0x1U << CAN_F3R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F3R1_FB9      CAN_F3R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F3R1_FB10_Pos (10U)\r\n#define CAN_F3R1_FB10_Msk (0x1U << CAN_F3R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F3R1_FB10     CAN_F3R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F3R1_FB11_Pos (11U)\r\n#define CAN_F3R1_FB11_Msk (0x1U << CAN_F3R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F3R1_FB11     CAN_F3R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F3R1_FB12_Pos (12U)\r\n#define CAN_F3R1_FB12_Msk (0x1U << CAN_F3R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F3R1_FB12     CAN_F3R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F3R1_FB13_Pos (13U)\r\n#define CAN_F3R1_FB13_Msk (0x1U << CAN_F3R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F3R1_FB13     CAN_F3R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F3R1_FB14_Pos (14U)\r\n#define CAN_F3R1_FB14_Msk (0x1U << CAN_F3R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F3R1_FB14     CAN_F3R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F3R1_FB15_Pos (15U)\r\n#define CAN_F3R1_FB15_Msk (0x1U << CAN_F3R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F3R1_FB15     CAN_F3R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F3R1_FB16_Pos (16U)\r\n#define CAN_F3R1_FB16_Msk (0x1U << CAN_F3R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F3R1_FB16     CAN_F3R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F3R1_FB17_Pos (17U)\r\n#define CAN_F3R1_FB17_Msk (0x1U << CAN_F3R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F3R1_FB17     CAN_F3R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F3R1_FB18_Pos (18U)\r\n#define CAN_F3R1_FB18_Msk (0x1U << CAN_F3R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F3R1_FB18     CAN_F3R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F3R1_FB19_Pos (19U)\r\n#define CAN_F3R1_FB19_Msk (0x1U << CAN_F3R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F3R1_FB19     CAN_F3R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F3R1_FB20_Pos (20U)\r\n#define CAN_F3R1_FB20_Msk (0x1U << CAN_F3R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F3R1_FB20     CAN_F3R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F3R1_FB21_Pos (21U)\r\n#define CAN_F3R1_FB21_Msk (0x1U << CAN_F3R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F3R1_FB21     CAN_F3R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F3R1_FB22_Pos (22U)\r\n#define CAN_F3R1_FB22_Msk (0x1U << CAN_F3R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F3R1_FB22     CAN_F3R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F3R1_FB23_Pos (23U)\r\n#define CAN_F3R1_FB23_Msk (0x1U << CAN_F3R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F3R1_FB23     CAN_F3R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F3R1_FB24_Pos (24U)\r\n#define CAN_F3R1_FB24_Msk (0x1U << CAN_F3R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F3R1_FB24     CAN_F3R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F3R1_FB25_Pos (25U)\r\n#define CAN_F3R1_FB25_Msk (0x1U << CAN_F3R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F3R1_FB25     CAN_F3R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F3R1_FB26_Pos (26U)\r\n#define CAN_F3R1_FB26_Msk (0x1U << CAN_F3R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F3R1_FB26     CAN_F3R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F3R1_FB27_Pos (27U)\r\n#define CAN_F3R1_FB27_Msk (0x1U << CAN_F3R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F3R1_FB27     CAN_F3R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F3R1_FB28_Pos (28U)\r\n#define CAN_F3R1_FB28_Msk (0x1U << CAN_F3R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F3R1_FB28     CAN_F3R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F3R1_FB29_Pos (29U)\r\n#define CAN_F3R1_FB29_Msk (0x1U << CAN_F3R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F3R1_FB29     CAN_F3R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F3R1_FB30_Pos (30U)\r\n#define CAN_F3R1_FB30_Msk (0x1U << CAN_F3R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F3R1_FB30     CAN_F3R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F3R1_FB31_Pos (31U)\r\n#define CAN_F3R1_FB31_Msk (0x1U << CAN_F3R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F3R1_FB31     CAN_F3R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F4R1 register  *******************/\r\n#define CAN_F4R1_FB0_Pos  (0U)\r\n#define CAN_F4R1_FB0_Msk  (0x1U << CAN_F4R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F4R1_FB0      CAN_F4R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F4R1_FB1_Pos  (1U)\r\n#define CAN_F4R1_FB1_Msk  (0x1U << CAN_F4R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F4R1_FB1      CAN_F4R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F4R1_FB2_Pos  (2U)\r\n#define CAN_F4R1_FB2_Msk  (0x1U << CAN_F4R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F4R1_FB2      CAN_F4R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F4R1_FB3_Pos  (3U)\r\n#define CAN_F4R1_FB3_Msk  (0x1U << CAN_F4R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F4R1_FB3      CAN_F4R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F4R1_FB4_Pos  (4U)\r\n#define CAN_F4R1_FB4_Msk  (0x1U << CAN_F4R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F4R1_FB4      CAN_F4R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F4R1_FB5_Pos  (5U)\r\n#define CAN_F4R1_FB5_Msk  (0x1U << CAN_F4R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F4R1_FB5      CAN_F4R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F4R1_FB6_Pos  (6U)\r\n#define CAN_F4R1_FB6_Msk  (0x1U << CAN_F4R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F4R1_FB6      CAN_F4R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F4R1_FB7_Pos  (7U)\r\n#define CAN_F4R1_FB7_Msk  (0x1U << CAN_F4R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F4R1_FB7      CAN_F4R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F4R1_FB8_Pos  (8U)\r\n#define CAN_F4R1_FB8_Msk  (0x1U << CAN_F4R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F4R1_FB8      CAN_F4R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F4R1_FB9_Pos  (9U)\r\n#define CAN_F4R1_FB9_Msk  (0x1U << CAN_F4R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F4R1_FB9      CAN_F4R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F4R1_FB10_Pos (10U)\r\n#define CAN_F4R1_FB10_Msk (0x1U << CAN_F4R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F4R1_FB10     CAN_F4R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F4R1_FB11_Pos (11U)\r\n#define CAN_F4R1_FB11_Msk (0x1U << CAN_F4R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F4R1_FB11     CAN_F4R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F4R1_FB12_Pos (12U)\r\n#define CAN_F4R1_FB12_Msk (0x1U << CAN_F4R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F4R1_FB12     CAN_F4R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F4R1_FB13_Pos (13U)\r\n#define CAN_F4R1_FB13_Msk (0x1U << CAN_F4R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F4R1_FB13     CAN_F4R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F4R1_FB14_Pos (14U)\r\n#define CAN_F4R1_FB14_Msk (0x1U << CAN_F4R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F4R1_FB14     CAN_F4R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F4R1_FB15_Pos (15U)\r\n#define CAN_F4R1_FB15_Msk (0x1U << CAN_F4R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F4R1_FB15     CAN_F4R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F4R1_FB16_Pos (16U)\r\n#define CAN_F4R1_FB16_Msk (0x1U << CAN_F4R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F4R1_FB16     CAN_F4R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F4R1_FB17_Pos (17U)\r\n#define CAN_F4R1_FB17_Msk (0x1U << CAN_F4R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F4R1_FB17     CAN_F4R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F4R1_FB18_Pos (18U)\r\n#define CAN_F4R1_FB18_Msk (0x1U << CAN_F4R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F4R1_FB18     CAN_F4R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F4R1_FB19_Pos (19U)\r\n#define CAN_F4R1_FB19_Msk (0x1U << CAN_F4R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F4R1_FB19     CAN_F4R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F4R1_FB20_Pos (20U)\r\n#define CAN_F4R1_FB20_Msk (0x1U << CAN_F4R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F4R1_FB20     CAN_F4R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F4R1_FB21_Pos (21U)\r\n#define CAN_F4R1_FB21_Msk (0x1U << CAN_F4R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F4R1_FB21     CAN_F4R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F4R1_FB22_Pos (22U)\r\n#define CAN_F4R1_FB22_Msk (0x1U << CAN_F4R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F4R1_FB22     CAN_F4R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F4R1_FB23_Pos (23U)\r\n#define CAN_F4R1_FB23_Msk (0x1U << CAN_F4R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F4R1_FB23     CAN_F4R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F4R1_FB24_Pos (24U)\r\n#define CAN_F4R1_FB24_Msk (0x1U << CAN_F4R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F4R1_FB24     CAN_F4R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F4R1_FB25_Pos (25U)\r\n#define CAN_F4R1_FB25_Msk (0x1U << CAN_F4R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F4R1_FB25     CAN_F4R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F4R1_FB26_Pos (26U)\r\n#define CAN_F4R1_FB26_Msk (0x1U << CAN_F4R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F4R1_FB26     CAN_F4R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F4R1_FB27_Pos (27U)\r\n#define CAN_F4R1_FB27_Msk (0x1U << CAN_F4R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F4R1_FB27     CAN_F4R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F4R1_FB28_Pos (28U)\r\n#define CAN_F4R1_FB28_Msk (0x1U << CAN_F4R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F4R1_FB28     CAN_F4R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F4R1_FB29_Pos (29U)\r\n#define CAN_F4R1_FB29_Msk (0x1U << CAN_F4R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F4R1_FB29     CAN_F4R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F4R1_FB30_Pos (30U)\r\n#define CAN_F4R1_FB30_Msk (0x1U << CAN_F4R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F4R1_FB30     CAN_F4R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F4R1_FB31_Pos (31U)\r\n#define CAN_F4R1_FB31_Msk (0x1U << CAN_F4R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F4R1_FB31     CAN_F4R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F5R1 register  *******************/\r\n#define CAN_F5R1_FB0_Pos  (0U)\r\n#define CAN_F5R1_FB0_Msk  (0x1U << CAN_F5R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F5R1_FB0      CAN_F5R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F5R1_FB1_Pos  (1U)\r\n#define CAN_F5R1_FB1_Msk  (0x1U << CAN_F5R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F5R1_FB1      CAN_F5R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F5R1_FB2_Pos  (2U)\r\n#define CAN_F5R1_FB2_Msk  (0x1U << CAN_F5R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F5R1_FB2      CAN_F5R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F5R1_FB3_Pos  (3U)\r\n#define CAN_F5R1_FB3_Msk  (0x1U << CAN_F5R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F5R1_FB3      CAN_F5R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F5R1_FB4_Pos  (4U)\r\n#define CAN_F5R1_FB4_Msk  (0x1U << CAN_F5R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F5R1_FB4      CAN_F5R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F5R1_FB5_Pos  (5U)\r\n#define CAN_F5R1_FB5_Msk  (0x1U << CAN_F5R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F5R1_FB5      CAN_F5R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F5R1_FB6_Pos  (6U)\r\n#define CAN_F5R1_FB6_Msk  (0x1U << CAN_F5R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F5R1_FB6      CAN_F5R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F5R1_FB7_Pos  (7U)\r\n#define CAN_F5R1_FB7_Msk  (0x1U << CAN_F5R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F5R1_FB7      CAN_F5R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F5R1_FB8_Pos  (8U)\r\n#define CAN_F5R1_FB8_Msk  (0x1U << CAN_F5R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F5R1_FB8      CAN_F5R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F5R1_FB9_Pos  (9U)\r\n#define CAN_F5R1_FB9_Msk  (0x1U << CAN_F5R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F5R1_FB9      CAN_F5R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F5R1_FB10_Pos (10U)\r\n#define CAN_F5R1_FB10_Msk (0x1U << CAN_F5R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F5R1_FB10     CAN_F5R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F5R1_FB11_Pos (11U)\r\n#define CAN_F5R1_FB11_Msk (0x1U << CAN_F5R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F5R1_FB11     CAN_F5R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F5R1_FB12_Pos (12U)\r\n#define CAN_F5R1_FB12_Msk (0x1U << CAN_F5R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F5R1_FB12     CAN_F5R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F5R1_FB13_Pos (13U)\r\n#define CAN_F5R1_FB13_Msk (0x1U << CAN_F5R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F5R1_FB13     CAN_F5R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F5R1_FB14_Pos (14U)\r\n#define CAN_F5R1_FB14_Msk (0x1U << CAN_F5R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F5R1_FB14     CAN_F5R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F5R1_FB15_Pos (15U)\r\n#define CAN_F5R1_FB15_Msk (0x1U << CAN_F5R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F5R1_FB15     CAN_F5R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F5R1_FB16_Pos (16U)\r\n#define CAN_F5R1_FB16_Msk (0x1U << CAN_F5R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F5R1_FB16     CAN_F5R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F5R1_FB17_Pos (17U)\r\n#define CAN_F5R1_FB17_Msk (0x1U << CAN_F5R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F5R1_FB17     CAN_F5R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F5R1_FB18_Pos (18U)\r\n#define CAN_F5R1_FB18_Msk (0x1U << CAN_F5R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F5R1_FB18     CAN_F5R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F5R1_FB19_Pos (19U)\r\n#define CAN_F5R1_FB19_Msk (0x1U << CAN_F5R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F5R1_FB19     CAN_F5R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F5R1_FB20_Pos (20U)\r\n#define CAN_F5R1_FB20_Msk (0x1U << CAN_F5R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F5R1_FB20     CAN_F5R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F5R1_FB21_Pos (21U)\r\n#define CAN_F5R1_FB21_Msk (0x1U << CAN_F5R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F5R1_FB21     CAN_F5R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F5R1_FB22_Pos (22U)\r\n#define CAN_F5R1_FB22_Msk (0x1U << CAN_F5R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F5R1_FB22     CAN_F5R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F5R1_FB23_Pos (23U)\r\n#define CAN_F5R1_FB23_Msk (0x1U << CAN_F5R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F5R1_FB23     CAN_F5R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F5R1_FB24_Pos (24U)\r\n#define CAN_F5R1_FB24_Msk (0x1U << CAN_F5R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F5R1_FB24     CAN_F5R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F5R1_FB25_Pos (25U)\r\n#define CAN_F5R1_FB25_Msk (0x1U << CAN_F5R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F5R1_FB25     CAN_F5R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F5R1_FB26_Pos (26U)\r\n#define CAN_F5R1_FB26_Msk (0x1U << CAN_F5R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F5R1_FB26     CAN_F5R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F5R1_FB27_Pos (27U)\r\n#define CAN_F5R1_FB27_Msk (0x1U << CAN_F5R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F5R1_FB27     CAN_F5R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F5R1_FB28_Pos (28U)\r\n#define CAN_F5R1_FB28_Msk (0x1U << CAN_F5R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F5R1_FB28     CAN_F5R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F5R1_FB29_Pos (29U)\r\n#define CAN_F5R1_FB29_Msk (0x1U << CAN_F5R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F5R1_FB29     CAN_F5R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F5R1_FB30_Pos (30U)\r\n#define CAN_F5R1_FB30_Msk (0x1U << CAN_F5R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F5R1_FB30     CAN_F5R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F5R1_FB31_Pos (31U)\r\n#define CAN_F5R1_FB31_Msk (0x1U << CAN_F5R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F5R1_FB31     CAN_F5R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F6R1 register  *******************/\r\n#define CAN_F6R1_FB0_Pos  (0U)\r\n#define CAN_F6R1_FB0_Msk  (0x1U << CAN_F6R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F6R1_FB0      CAN_F6R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F6R1_FB1_Pos  (1U)\r\n#define CAN_F6R1_FB1_Msk  (0x1U << CAN_F6R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F6R1_FB1      CAN_F6R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F6R1_FB2_Pos  (2U)\r\n#define CAN_F6R1_FB2_Msk  (0x1U << CAN_F6R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F6R1_FB2      CAN_F6R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F6R1_FB3_Pos  (3U)\r\n#define CAN_F6R1_FB3_Msk  (0x1U << CAN_F6R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F6R1_FB3      CAN_F6R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F6R1_FB4_Pos  (4U)\r\n#define CAN_F6R1_FB4_Msk  (0x1U << CAN_F6R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F6R1_FB4      CAN_F6R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F6R1_FB5_Pos  (5U)\r\n#define CAN_F6R1_FB5_Msk  (0x1U << CAN_F6R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F6R1_FB5      CAN_F6R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F6R1_FB6_Pos  (6U)\r\n#define CAN_F6R1_FB6_Msk  (0x1U << CAN_F6R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F6R1_FB6      CAN_F6R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F6R1_FB7_Pos  (7U)\r\n#define CAN_F6R1_FB7_Msk  (0x1U << CAN_F6R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F6R1_FB7      CAN_F6R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F6R1_FB8_Pos  (8U)\r\n#define CAN_F6R1_FB8_Msk  (0x1U << CAN_F6R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F6R1_FB8      CAN_F6R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F6R1_FB9_Pos  (9U)\r\n#define CAN_F6R1_FB9_Msk  (0x1U << CAN_F6R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F6R1_FB9      CAN_F6R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F6R1_FB10_Pos (10U)\r\n#define CAN_F6R1_FB10_Msk (0x1U << CAN_F6R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F6R1_FB10     CAN_F6R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F6R1_FB11_Pos (11U)\r\n#define CAN_F6R1_FB11_Msk (0x1U << CAN_F6R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F6R1_FB11     CAN_F6R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F6R1_FB12_Pos (12U)\r\n#define CAN_F6R1_FB12_Msk (0x1U << CAN_F6R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F6R1_FB12     CAN_F6R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F6R1_FB13_Pos (13U)\r\n#define CAN_F6R1_FB13_Msk (0x1U << CAN_F6R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F6R1_FB13     CAN_F6R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F6R1_FB14_Pos (14U)\r\n#define CAN_F6R1_FB14_Msk (0x1U << CAN_F6R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F6R1_FB14     CAN_F6R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F6R1_FB15_Pos (15U)\r\n#define CAN_F6R1_FB15_Msk (0x1U << CAN_F6R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F6R1_FB15     CAN_F6R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F6R1_FB16_Pos (16U)\r\n#define CAN_F6R1_FB16_Msk (0x1U << CAN_F6R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F6R1_FB16     CAN_F6R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F6R1_FB17_Pos (17U)\r\n#define CAN_F6R1_FB17_Msk (0x1U << CAN_F6R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F6R1_FB17     CAN_F6R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F6R1_FB18_Pos (18U)\r\n#define CAN_F6R1_FB18_Msk (0x1U << CAN_F6R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F6R1_FB18     CAN_F6R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F6R1_FB19_Pos (19U)\r\n#define CAN_F6R1_FB19_Msk (0x1U << CAN_F6R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F6R1_FB19     CAN_F6R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F6R1_FB20_Pos (20U)\r\n#define CAN_F6R1_FB20_Msk (0x1U << CAN_F6R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F6R1_FB20     CAN_F6R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F6R1_FB21_Pos (21U)\r\n#define CAN_F6R1_FB21_Msk (0x1U << CAN_F6R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F6R1_FB21     CAN_F6R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F6R1_FB22_Pos (22U)\r\n#define CAN_F6R1_FB22_Msk (0x1U << CAN_F6R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F6R1_FB22     CAN_F6R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F6R1_FB23_Pos (23U)\r\n#define CAN_F6R1_FB23_Msk (0x1U << CAN_F6R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F6R1_FB23     CAN_F6R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F6R1_FB24_Pos (24U)\r\n#define CAN_F6R1_FB24_Msk (0x1U << CAN_F6R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F6R1_FB24     CAN_F6R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F6R1_FB25_Pos (25U)\r\n#define CAN_F6R1_FB25_Msk (0x1U << CAN_F6R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F6R1_FB25     CAN_F6R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F6R1_FB26_Pos (26U)\r\n#define CAN_F6R1_FB26_Msk (0x1U << CAN_F6R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F6R1_FB26     CAN_F6R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F6R1_FB27_Pos (27U)\r\n#define CAN_F6R1_FB27_Msk (0x1U << CAN_F6R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F6R1_FB27     CAN_F6R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F6R1_FB28_Pos (28U)\r\n#define CAN_F6R1_FB28_Msk (0x1U << CAN_F6R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F6R1_FB28     CAN_F6R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F6R1_FB29_Pos (29U)\r\n#define CAN_F6R1_FB29_Msk (0x1U << CAN_F6R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F6R1_FB29     CAN_F6R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F6R1_FB30_Pos (30U)\r\n#define CAN_F6R1_FB30_Msk (0x1U << CAN_F6R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F6R1_FB30     CAN_F6R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F6R1_FB31_Pos (31U)\r\n#define CAN_F6R1_FB31_Msk (0x1U << CAN_F6R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F6R1_FB31     CAN_F6R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F7R1 register  *******************/\r\n#define CAN_F7R1_FB0_Pos  (0U)\r\n#define CAN_F7R1_FB0_Msk  (0x1U << CAN_F7R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F7R1_FB0      CAN_F7R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F7R1_FB1_Pos  (1U)\r\n#define CAN_F7R1_FB1_Msk  (0x1U << CAN_F7R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F7R1_FB1      CAN_F7R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F7R1_FB2_Pos  (2U)\r\n#define CAN_F7R1_FB2_Msk  (0x1U << CAN_F7R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F7R1_FB2      CAN_F7R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F7R1_FB3_Pos  (3U)\r\n#define CAN_F7R1_FB3_Msk  (0x1U << CAN_F7R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F7R1_FB3      CAN_F7R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F7R1_FB4_Pos  (4U)\r\n#define CAN_F7R1_FB4_Msk  (0x1U << CAN_F7R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F7R1_FB4      CAN_F7R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F7R1_FB5_Pos  (5U)\r\n#define CAN_F7R1_FB5_Msk  (0x1U << CAN_F7R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F7R1_FB5      CAN_F7R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F7R1_FB6_Pos  (6U)\r\n#define CAN_F7R1_FB6_Msk  (0x1U << CAN_F7R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F7R1_FB6      CAN_F7R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F7R1_FB7_Pos  (7U)\r\n#define CAN_F7R1_FB7_Msk  (0x1U << CAN_F7R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F7R1_FB7      CAN_F7R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F7R1_FB8_Pos  (8U)\r\n#define CAN_F7R1_FB8_Msk  (0x1U << CAN_F7R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F7R1_FB8      CAN_F7R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F7R1_FB9_Pos  (9U)\r\n#define CAN_F7R1_FB9_Msk  (0x1U << CAN_F7R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F7R1_FB9      CAN_F7R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F7R1_FB10_Pos (10U)\r\n#define CAN_F7R1_FB10_Msk (0x1U << CAN_F7R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F7R1_FB10     CAN_F7R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F7R1_FB11_Pos (11U)\r\n#define CAN_F7R1_FB11_Msk (0x1U << CAN_F7R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F7R1_FB11     CAN_F7R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F7R1_FB12_Pos (12U)\r\n#define CAN_F7R1_FB12_Msk (0x1U << CAN_F7R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F7R1_FB12     CAN_F7R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F7R1_FB13_Pos (13U)\r\n#define CAN_F7R1_FB13_Msk (0x1U << CAN_F7R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F7R1_FB13     CAN_F7R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F7R1_FB14_Pos (14U)\r\n#define CAN_F7R1_FB14_Msk (0x1U << CAN_F7R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F7R1_FB14     CAN_F7R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F7R1_FB15_Pos (15U)\r\n#define CAN_F7R1_FB15_Msk (0x1U << CAN_F7R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F7R1_FB15     CAN_F7R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F7R1_FB16_Pos (16U)\r\n#define CAN_F7R1_FB16_Msk (0x1U << CAN_F7R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F7R1_FB16     CAN_F7R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F7R1_FB17_Pos (17U)\r\n#define CAN_F7R1_FB17_Msk (0x1U << CAN_F7R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F7R1_FB17     CAN_F7R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F7R1_FB18_Pos (18U)\r\n#define CAN_F7R1_FB18_Msk (0x1U << CAN_F7R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F7R1_FB18     CAN_F7R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F7R1_FB19_Pos (19U)\r\n#define CAN_F7R1_FB19_Msk (0x1U << CAN_F7R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F7R1_FB19     CAN_F7R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F7R1_FB20_Pos (20U)\r\n#define CAN_F7R1_FB20_Msk (0x1U << CAN_F7R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F7R1_FB20     CAN_F7R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F7R1_FB21_Pos (21U)\r\n#define CAN_F7R1_FB21_Msk (0x1U << CAN_F7R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F7R1_FB21     CAN_F7R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F7R1_FB22_Pos (22U)\r\n#define CAN_F7R1_FB22_Msk (0x1U << CAN_F7R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F7R1_FB22     CAN_F7R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F7R1_FB23_Pos (23U)\r\n#define CAN_F7R1_FB23_Msk (0x1U << CAN_F7R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F7R1_FB23     CAN_F7R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F7R1_FB24_Pos (24U)\r\n#define CAN_F7R1_FB24_Msk (0x1U << CAN_F7R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F7R1_FB24     CAN_F7R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F7R1_FB25_Pos (25U)\r\n#define CAN_F7R1_FB25_Msk (0x1U << CAN_F7R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F7R1_FB25     CAN_F7R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F7R1_FB26_Pos (26U)\r\n#define CAN_F7R1_FB26_Msk (0x1U << CAN_F7R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F7R1_FB26     CAN_F7R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F7R1_FB27_Pos (27U)\r\n#define CAN_F7R1_FB27_Msk (0x1U << CAN_F7R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F7R1_FB27     CAN_F7R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F7R1_FB28_Pos (28U)\r\n#define CAN_F7R1_FB28_Msk (0x1U << CAN_F7R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F7R1_FB28     CAN_F7R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F7R1_FB29_Pos (29U)\r\n#define CAN_F7R1_FB29_Msk (0x1U << CAN_F7R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F7R1_FB29     CAN_F7R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F7R1_FB30_Pos (30U)\r\n#define CAN_F7R1_FB30_Msk (0x1U << CAN_F7R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F7R1_FB30     CAN_F7R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F7R1_FB31_Pos (31U)\r\n#define CAN_F7R1_FB31_Msk (0x1U << CAN_F7R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F7R1_FB31     CAN_F7R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F8R1 register  *******************/\r\n#define CAN_F8R1_FB0_Pos  (0U)\r\n#define CAN_F8R1_FB0_Msk  (0x1U << CAN_F8R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F8R1_FB0      CAN_F8R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F8R1_FB1_Pos  (1U)\r\n#define CAN_F8R1_FB1_Msk  (0x1U << CAN_F8R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F8R1_FB1      CAN_F8R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F8R1_FB2_Pos  (2U)\r\n#define CAN_F8R1_FB2_Msk  (0x1U << CAN_F8R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F8R1_FB2      CAN_F8R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F8R1_FB3_Pos  (3U)\r\n#define CAN_F8R1_FB3_Msk  (0x1U << CAN_F8R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F8R1_FB3      CAN_F8R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F8R1_FB4_Pos  (4U)\r\n#define CAN_F8R1_FB4_Msk  (0x1U << CAN_F8R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F8R1_FB4      CAN_F8R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F8R1_FB5_Pos  (5U)\r\n#define CAN_F8R1_FB5_Msk  (0x1U << CAN_F8R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F8R1_FB5      CAN_F8R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F8R1_FB6_Pos  (6U)\r\n#define CAN_F8R1_FB6_Msk  (0x1U << CAN_F8R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F8R1_FB6      CAN_F8R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F8R1_FB7_Pos  (7U)\r\n#define CAN_F8R1_FB7_Msk  (0x1U << CAN_F8R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F8R1_FB7      CAN_F8R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F8R1_FB8_Pos  (8U)\r\n#define CAN_F8R1_FB8_Msk  (0x1U << CAN_F8R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F8R1_FB8      CAN_F8R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F8R1_FB9_Pos  (9U)\r\n#define CAN_F8R1_FB9_Msk  (0x1U << CAN_F8R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F8R1_FB9      CAN_F8R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F8R1_FB10_Pos (10U)\r\n#define CAN_F8R1_FB10_Msk (0x1U << CAN_F8R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F8R1_FB10     CAN_F8R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F8R1_FB11_Pos (11U)\r\n#define CAN_F8R1_FB11_Msk (0x1U << CAN_F8R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F8R1_FB11     CAN_F8R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F8R1_FB12_Pos (12U)\r\n#define CAN_F8R1_FB12_Msk (0x1U << CAN_F8R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F8R1_FB12     CAN_F8R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F8R1_FB13_Pos (13U)\r\n#define CAN_F8R1_FB13_Msk (0x1U << CAN_F8R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F8R1_FB13     CAN_F8R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F8R1_FB14_Pos (14U)\r\n#define CAN_F8R1_FB14_Msk (0x1U << CAN_F8R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F8R1_FB14     CAN_F8R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F8R1_FB15_Pos (15U)\r\n#define CAN_F8R1_FB15_Msk (0x1U << CAN_F8R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F8R1_FB15     CAN_F8R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F8R1_FB16_Pos (16U)\r\n#define CAN_F8R1_FB16_Msk (0x1U << CAN_F8R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F8R1_FB16     CAN_F8R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F8R1_FB17_Pos (17U)\r\n#define CAN_F8R1_FB17_Msk (0x1U << CAN_F8R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F8R1_FB17     CAN_F8R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F8R1_FB18_Pos (18U)\r\n#define CAN_F8R1_FB18_Msk (0x1U << CAN_F8R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F8R1_FB18     CAN_F8R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F8R1_FB19_Pos (19U)\r\n#define CAN_F8R1_FB19_Msk (0x1U << CAN_F8R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F8R1_FB19     CAN_F8R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F8R1_FB20_Pos (20U)\r\n#define CAN_F8R1_FB20_Msk (0x1U << CAN_F8R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F8R1_FB20     CAN_F8R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F8R1_FB21_Pos (21U)\r\n#define CAN_F8R1_FB21_Msk (0x1U << CAN_F8R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F8R1_FB21     CAN_F8R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F8R1_FB22_Pos (22U)\r\n#define CAN_F8R1_FB22_Msk (0x1U << CAN_F8R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F8R1_FB22     CAN_F8R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F8R1_FB23_Pos (23U)\r\n#define CAN_F8R1_FB23_Msk (0x1U << CAN_F8R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F8R1_FB23     CAN_F8R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F8R1_FB24_Pos (24U)\r\n#define CAN_F8R1_FB24_Msk (0x1U << CAN_F8R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F8R1_FB24     CAN_F8R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F8R1_FB25_Pos (25U)\r\n#define CAN_F8R1_FB25_Msk (0x1U << CAN_F8R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F8R1_FB25     CAN_F8R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F8R1_FB26_Pos (26U)\r\n#define CAN_F8R1_FB26_Msk (0x1U << CAN_F8R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F8R1_FB26     CAN_F8R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F8R1_FB27_Pos (27U)\r\n#define CAN_F8R1_FB27_Msk (0x1U << CAN_F8R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F8R1_FB27     CAN_F8R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F8R1_FB28_Pos (28U)\r\n#define CAN_F8R1_FB28_Msk (0x1U << CAN_F8R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F8R1_FB28     CAN_F8R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F8R1_FB29_Pos (29U)\r\n#define CAN_F8R1_FB29_Msk (0x1U << CAN_F8R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F8R1_FB29     CAN_F8R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F8R1_FB30_Pos (30U)\r\n#define CAN_F8R1_FB30_Msk (0x1U << CAN_F8R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F8R1_FB30     CAN_F8R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F8R1_FB31_Pos (31U)\r\n#define CAN_F8R1_FB31_Msk (0x1U << CAN_F8R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F8R1_FB31     CAN_F8R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F9R1 register  *******************/\r\n#define CAN_F9R1_FB0_Pos  (0U)\r\n#define CAN_F9R1_FB0_Msk  (0x1U << CAN_F9R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F9R1_FB0      CAN_F9R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F9R1_FB1_Pos  (1U)\r\n#define CAN_F9R1_FB1_Msk  (0x1U << CAN_F9R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F9R1_FB1      CAN_F9R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F9R1_FB2_Pos  (2U)\r\n#define CAN_F9R1_FB2_Msk  (0x1U << CAN_F9R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F9R1_FB2      CAN_F9R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F9R1_FB3_Pos  (3U)\r\n#define CAN_F9R1_FB3_Msk  (0x1U << CAN_F9R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F9R1_FB3      CAN_F9R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F9R1_FB4_Pos  (4U)\r\n#define CAN_F9R1_FB4_Msk  (0x1U << CAN_F9R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F9R1_FB4      CAN_F9R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F9R1_FB5_Pos  (5U)\r\n#define CAN_F9R1_FB5_Msk  (0x1U << CAN_F9R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F9R1_FB5      CAN_F9R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F9R1_FB6_Pos  (6U)\r\n#define CAN_F9R1_FB6_Msk  (0x1U << CAN_F9R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F9R1_FB6      CAN_F9R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F9R1_FB7_Pos  (7U)\r\n#define CAN_F9R1_FB7_Msk  (0x1U << CAN_F9R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F9R1_FB7      CAN_F9R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F9R1_FB8_Pos  (8U)\r\n#define CAN_F9R1_FB8_Msk  (0x1U << CAN_F9R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F9R1_FB8      CAN_F9R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F9R1_FB9_Pos  (9U)\r\n#define CAN_F9R1_FB9_Msk  (0x1U << CAN_F9R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F9R1_FB9      CAN_F9R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F9R1_FB10_Pos (10U)\r\n#define CAN_F9R1_FB10_Msk (0x1U << CAN_F9R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F9R1_FB10     CAN_F9R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F9R1_FB11_Pos (11U)\r\n#define CAN_F9R1_FB11_Msk (0x1U << CAN_F9R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F9R1_FB11     CAN_F9R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F9R1_FB12_Pos (12U)\r\n#define CAN_F9R1_FB12_Msk (0x1U << CAN_F9R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F9R1_FB12     CAN_F9R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F9R1_FB13_Pos (13U)\r\n#define CAN_F9R1_FB13_Msk (0x1U << CAN_F9R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F9R1_FB13     CAN_F9R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F9R1_FB14_Pos (14U)\r\n#define CAN_F9R1_FB14_Msk (0x1U << CAN_F9R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F9R1_FB14     CAN_F9R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F9R1_FB15_Pos (15U)\r\n#define CAN_F9R1_FB15_Msk (0x1U << CAN_F9R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F9R1_FB15     CAN_F9R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F9R1_FB16_Pos (16U)\r\n#define CAN_F9R1_FB16_Msk (0x1U << CAN_F9R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F9R1_FB16     CAN_F9R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F9R1_FB17_Pos (17U)\r\n#define CAN_F9R1_FB17_Msk (0x1U << CAN_F9R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F9R1_FB17     CAN_F9R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F9R1_FB18_Pos (18U)\r\n#define CAN_F9R1_FB18_Msk (0x1U << CAN_F9R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F9R1_FB18     CAN_F9R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F9R1_FB19_Pos (19U)\r\n#define CAN_F9R1_FB19_Msk (0x1U << CAN_F9R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F9R1_FB19     CAN_F9R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F9R1_FB20_Pos (20U)\r\n#define CAN_F9R1_FB20_Msk (0x1U << CAN_F9R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F9R1_FB20     CAN_F9R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F9R1_FB21_Pos (21U)\r\n#define CAN_F9R1_FB21_Msk (0x1U << CAN_F9R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F9R1_FB21     CAN_F9R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F9R1_FB22_Pos (22U)\r\n#define CAN_F9R1_FB22_Msk (0x1U << CAN_F9R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F9R1_FB22     CAN_F9R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F9R1_FB23_Pos (23U)\r\n#define CAN_F9R1_FB23_Msk (0x1U << CAN_F9R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F9R1_FB23     CAN_F9R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F9R1_FB24_Pos (24U)\r\n#define CAN_F9R1_FB24_Msk (0x1U << CAN_F9R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F9R1_FB24     CAN_F9R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F9R1_FB25_Pos (25U)\r\n#define CAN_F9R1_FB25_Msk (0x1U << CAN_F9R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F9R1_FB25     CAN_F9R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F9R1_FB26_Pos (26U)\r\n#define CAN_F9R1_FB26_Msk (0x1U << CAN_F9R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F9R1_FB26     CAN_F9R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F9R1_FB27_Pos (27U)\r\n#define CAN_F9R1_FB27_Msk (0x1U << CAN_F9R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F9R1_FB27     CAN_F9R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F9R1_FB28_Pos (28U)\r\n#define CAN_F9R1_FB28_Msk (0x1U << CAN_F9R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F9R1_FB28     CAN_F9R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F9R1_FB29_Pos (29U)\r\n#define CAN_F9R1_FB29_Msk (0x1U << CAN_F9R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F9R1_FB29     CAN_F9R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F9R1_FB30_Pos (30U)\r\n#define CAN_F9R1_FB30_Msk (0x1U << CAN_F9R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F9R1_FB30     CAN_F9R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F9R1_FB31_Pos (31U)\r\n#define CAN_F9R1_FB31_Msk (0x1U << CAN_F9R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F9R1_FB31     CAN_F9R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F10R1 register  ******************/\r\n#define CAN_F10R1_FB0_Pos  (0U)\r\n#define CAN_F10R1_FB0_Msk  (0x1U << CAN_F10R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F10R1_FB0      CAN_F10R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F10R1_FB1_Pos  (1U)\r\n#define CAN_F10R1_FB1_Msk  (0x1U << CAN_F10R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F10R1_FB1      CAN_F10R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F10R1_FB2_Pos  (2U)\r\n#define CAN_F10R1_FB2_Msk  (0x1U << CAN_F10R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F10R1_FB2      CAN_F10R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F10R1_FB3_Pos  (3U)\r\n#define CAN_F10R1_FB3_Msk  (0x1U << CAN_F10R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F10R1_FB3      CAN_F10R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F10R1_FB4_Pos  (4U)\r\n#define CAN_F10R1_FB4_Msk  (0x1U << CAN_F10R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F10R1_FB4      CAN_F10R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F10R1_FB5_Pos  (5U)\r\n#define CAN_F10R1_FB5_Msk  (0x1U << CAN_F10R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F10R1_FB5      CAN_F10R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F10R1_FB6_Pos  (6U)\r\n#define CAN_F10R1_FB6_Msk  (0x1U << CAN_F10R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F10R1_FB6      CAN_F10R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F10R1_FB7_Pos  (7U)\r\n#define CAN_F10R1_FB7_Msk  (0x1U << CAN_F10R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F10R1_FB7      CAN_F10R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F10R1_FB8_Pos  (8U)\r\n#define CAN_F10R1_FB8_Msk  (0x1U << CAN_F10R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F10R1_FB8      CAN_F10R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F10R1_FB9_Pos  (9U)\r\n#define CAN_F10R1_FB9_Msk  (0x1U << CAN_F10R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F10R1_FB9      CAN_F10R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F10R1_FB10_Pos (10U)\r\n#define CAN_F10R1_FB10_Msk (0x1U << CAN_F10R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F10R1_FB10     CAN_F10R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F10R1_FB11_Pos (11U)\r\n#define CAN_F10R1_FB11_Msk (0x1U << CAN_F10R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F10R1_FB11     CAN_F10R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F10R1_FB12_Pos (12U)\r\n#define CAN_F10R1_FB12_Msk (0x1U << CAN_F10R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F10R1_FB12     CAN_F10R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F10R1_FB13_Pos (13U)\r\n#define CAN_F10R1_FB13_Msk (0x1U << CAN_F10R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F10R1_FB13     CAN_F10R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F10R1_FB14_Pos (14U)\r\n#define CAN_F10R1_FB14_Msk (0x1U << CAN_F10R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F10R1_FB14     CAN_F10R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F10R1_FB15_Pos (15U)\r\n#define CAN_F10R1_FB15_Msk (0x1U << CAN_F10R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F10R1_FB15     CAN_F10R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F10R1_FB16_Pos (16U)\r\n#define CAN_F10R1_FB16_Msk (0x1U << CAN_F10R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F10R1_FB16     CAN_F10R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F10R1_FB17_Pos (17U)\r\n#define CAN_F10R1_FB17_Msk (0x1U << CAN_F10R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F10R1_FB17     CAN_F10R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F10R1_FB18_Pos (18U)\r\n#define CAN_F10R1_FB18_Msk (0x1U << CAN_F10R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F10R1_FB18     CAN_F10R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F10R1_FB19_Pos (19U)\r\n#define CAN_F10R1_FB19_Msk (0x1U << CAN_F10R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F10R1_FB19     CAN_F10R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F10R1_FB20_Pos (20U)\r\n#define CAN_F10R1_FB20_Msk (0x1U << CAN_F10R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F10R1_FB20     CAN_F10R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F10R1_FB21_Pos (21U)\r\n#define CAN_F10R1_FB21_Msk (0x1U << CAN_F10R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F10R1_FB21     CAN_F10R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F10R1_FB22_Pos (22U)\r\n#define CAN_F10R1_FB22_Msk (0x1U << CAN_F10R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F10R1_FB22     CAN_F10R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F10R1_FB23_Pos (23U)\r\n#define CAN_F10R1_FB23_Msk (0x1U << CAN_F10R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F10R1_FB23     CAN_F10R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F10R1_FB24_Pos (24U)\r\n#define CAN_F10R1_FB24_Msk (0x1U << CAN_F10R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F10R1_FB24     CAN_F10R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F10R1_FB25_Pos (25U)\r\n#define CAN_F10R1_FB25_Msk (0x1U << CAN_F10R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F10R1_FB25     CAN_F10R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F10R1_FB26_Pos (26U)\r\n#define CAN_F10R1_FB26_Msk (0x1U << CAN_F10R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F10R1_FB26     CAN_F10R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F10R1_FB27_Pos (27U)\r\n#define CAN_F10R1_FB27_Msk (0x1U << CAN_F10R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F10R1_FB27     CAN_F10R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F10R1_FB28_Pos (28U)\r\n#define CAN_F10R1_FB28_Msk (0x1U << CAN_F10R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F10R1_FB28     CAN_F10R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F10R1_FB29_Pos (29U)\r\n#define CAN_F10R1_FB29_Msk (0x1U << CAN_F10R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F10R1_FB29     CAN_F10R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F10R1_FB30_Pos (30U)\r\n#define CAN_F10R1_FB30_Msk (0x1U << CAN_F10R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F10R1_FB30     CAN_F10R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F10R1_FB31_Pos (31U)\r\n#define CAN_F10R1_FB31_Msk (0x1U << CAN_F10R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F10R1_FB31     CAN_F10R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F11R1 register  ******************/\r\n#define CAN_F11R1_FB0_Pos  (0U)\r\n#define CAN_F11R1_FB0_Msk  (0x1U << CAN_F11R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F11R1_FB0      CAN_F11R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F11R1_FB1_Pos  (1U)\r\n#define CAN_F11R1_FB1_Msk  (0x1U << CAN_F11R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F11R1_FB1      CAN_F11R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F11R1_FB2_Pos  (2U)\r\n#define CAN_F11R1_FB2_Msk  (0x1U << CAN_F11R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F11R1_FB2      CAN_F11R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F11R1_FB3_Pos  (3U)\r\n#define CAN_F11R1_FB3_Msk  (0x1U << CAN_F11R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F11R1_FB3      CAN_F11R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F11R1_FB4_Pos  (4U)\r\n#define CAN_F11R1_FB4_Msk  (0x1U << CAN_F11R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F11R1_FB4      CAN_F11R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F11R1_FB5_Pos  (5U)\r\n#define CAN_F11R1_FB5_Msk  (0x1U << CAN_F11R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F11R1_FB5      CAN_F11R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F11R1_FB6_Pos  (6U)\r\n#define CAN_F11R1_FB6_Msk  (0x1U << CAN_F11R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F11R1_FB6      CAN_F11R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F11R1_FB7_Pos  (7U)\r\n#define CAN_F11R1_FB7_Msk  (0x1U << CAN_F11R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F11R1_FB7      CAN_F11R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F11R1_FB8_Pos  (8U)\r\n#define CAN_F11R1_FB8_Msk  (0x1U << CAN_F11R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F11R1_FB8      CAN_F11R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F11R1_FB9_Pos  (9U)\r\n#define CAN_F11R1_FB9_Msk  (0x1U << CAN_F11R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F11R1_FB9      CAN_F11R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F11R1_FB10_Pos (10U)\r\n#define CAN_F11R1_FB10_Msk (0x1U << CAN_F11R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F11R1_FB10     CAN_F11R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F11R1_FB11_Pos (11U)\r\n#define CAN_F11R1_FB11_Msk (0x1U << CAN_F11R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F11R1_FB11     CAN_F11R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F11R1_FB12_Pos (12U)\r\n#define CAN_F11R1_FB12_Msk (0x1U << CAN_F11R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F11R1_FB12     CAN_F11R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F11R1_FB13_Pos (13U)\r\n#define CAN_F11R1_FB13_Msk (0x1U << CAN_F11R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F11R1_FB13     CAN_F11R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F11R1_FB14_Pos (14U)\r\n#define CAN_F11R1_FB14_Msk (0x1U << CAN_F11R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F11R1_FB14     CAN_F11R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F11R1_FB15_Pos (15U)\r\n#define CAN_F11R1_FB15_Msk (0x1U << CAN_F11R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F11R1_FB15     CAN_F11R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F11R1_FB16_Pos (16U)\r\n#define CAN_F11R1_FB16_Msk (0x1U << CAN_F11R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F11R1_FB16     CAN_F11R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F11R1_FB17_Pos (17U)\r\n#define CAN_F11R1_FB17_Msk (0x1U << CAN_F11R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F11R1_FB17     CAN_F11R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F11R1_FB18_Pos (18U)\r\n#define CAN_F11R1_FB18_Msk (0x1U << CAN_F11R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F11R1_FB18     CAN_F11R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F11R1_FB19_Pos (19U)\r\n#define CAN_F11R1_FB19_Msk (0x1U << CAN_F11R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F11R1_FB19     CAN_F11R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F11R1_FB20_Pos (20U)\r\n#define CAN_F11R1_FB20_Msk (0x1U << CAN_F11R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F11R1_FB20     CAN_F11R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F11R1_FB21_Pos (21U)\r\n#define CAN_F11R1_FB21_Msk (0x1U << CAN_F11R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F11R1_FB21     CAN_F11R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F11R1_FB22_Pos (22U)\r\n#define CAN_F11R1_FB22_Msk (0x1U << CAN_F11R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F11R1_FB22     CAN_F11R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F11R1_FB23_Pos (23U)\r\n#define CAN_F11R1_FB23_Msk (0x1U << CAN_F11R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F11R1_FB23     CAN_F11R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F11R1_FB24_Pos (24U)\r\n#define CAN_F11R1_FB24_Msk (0x1U << CAN_F11R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F11R1_FB24     CAN_F11R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F11R1_FB25_Pos (25U)\r\n#define CAN_F11R1_FB25_Msk (0x1U << CAN_F11R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F11R1_FB25     CAN_F11R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F11R1_FB26_Pos (26U)\r\n#define CAN_F11R1_FB26_Msk (0x1U << CAN_F11R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F11R1_FB26     CAN_F11R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F11R1_FB27_Pos (27U)\r\n#define CAN_F11R1_FB27_Msk (0x1U << CAN_F11R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F11R1_FB27     CAN_F11R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F11R1_FB28_Pos (28U)\r\n#define CAN_F11R1_FB28_Msk (0x1U << CAN_F11R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F11R1_FB28     CAN_F11R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F11R1_FB29_Pos (29U)\r\n#define CAN_F11R1_FB29_Msk (0x1U << CAN_F11R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F11R1_FB29     CAN_F11R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F11R1_FB30_Pos (30U)\r\n#define CAN_F11R1_FB30_Msk (0x1U << CAN_F11R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F11R1_FB30     CAN_F11R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F11R1_FB31_Pos (31U)\r\n#define CAN_F11R1_FB31_Msk (0x1U << CAN_F11R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F11R1_FB31     CAN_F11R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F12R1 register  ******************/\r\n#define CAN_F12R1_FB0_Pos  (0U)\r\n#define CAN_F12R1_FB0_Msk  (0x1U << CAN_F12R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F12R1_FB0      CAN_F12R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F12R1_FB1_Pos  (1U)\r\n#define CAN_F12R1_FB1_Msk  (0x1U << CAN_F12R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F12R1_FB1      CAN_F12R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F12R1_FB2_Pos  (2U)\r\n#define CAN_F12R1_FB2_Msk  (0x1U << CAN_F12R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F12R1_FB2      CAN_F12R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F12R1_FB3_Pos  (3U)\r\n#define CAN_F12R1_FB3_Msk  (0x1U << CAN_F12R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F12R1_FB3      CAN_F12R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F12R1_FB4_Pos  (4U)\r\n#define CAN_F12R1_FB4_Msk  (0x1U << CAN_F12R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F12R1_FB4      CAN_F12R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F12R1_FB5_Pos  (5U)\r\n#define CAN_F12R1_FB5_Msk  (0x1U << CAN_F12R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F12R1_FB5      CAN_F12R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F12R1_FB6_Pos  (6U)\r\n#define CAN_F12R1_FB6_Msk  (0x1U << CAN_F12R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F12R1_FB6      CAN_F12R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F12R1_FB7_Pos  (7U)\r\n#define CAN_F12R1_FB7_Msk  (0x1U << CAN_F12R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F12R1_FB7      CAN_F12R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F12R1_FB8_Pos  (8U)\r\n#define CAN_F12R1_FB8_Msk  (0x1U << CAN_F12R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F12R1_FB8      CAN_F12R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F12R1_FB9_Pos  (9U)\r\n#define CAN_F12R1_FB9_Msk  (0x1U << CAN_F12R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F12R1_FB9      CAN_F12R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F12R1_FB10_Pos (10U)\r\n#define CAN_F12R1_FB10_Msk (0x1U << CAN_F12R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F12R1_FB10     CAN_F12R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F12R1_FB11_Pos (11U)\r\n#define CAN_F12R1_FB11_Msk (0x1U << CAN_F12R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F12R1_FB11     CAN_F12R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F12R1_FB12_Pos (12U)\r\n#define CAN_F12R1_FB12_Msk (0x1U << CAN_F12R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F12R1_FB12     CAN_F12R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F12R1_FB13_Pos (13U)\r\n#define CAN_F12R1_FB13_Msk (0x1U << CAN_F12R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F12R1_FB13     CAN_F12R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F12R1_FB14_Pos (14U)\r\n#define CAN_F12R1_FB14_Msk (0x1U << CAN_F12R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F12R1_FB14     CAN_F12R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F12R1_FB15_Pos (15U)\r\n#define CAN_F12R1_FB15_Msk (0x1U << CAN_F12R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F12R1_FB15     CAN_F12R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F12R1_FB16_Pos (16U)\r\n#define CAN_F12R1_FB16_Msk (0x1U << CAN_F12R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F12R1_FB16     CAN_F12R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F12R1_FB17_Pos (17U)\r\n#define CAN_F12R1_FB17_Msk (0x1U << CAN_F12R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F12R1_FB17     CAN_F12R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F12R1_FB18_Pos (18U)\r\n#define CAN_F12R1_FB18_Msk (0x1U << CAN_F12R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F12R1_FB18     CAN_F12R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F12R1_FB19_Pos (19U)\r\n#define CAN_F12R1_FB19_Msk (0x1U << CAN_F12R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F12R1_FB19     CAN_F12R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F12R1_FB20_Pos (20U)\r\n#define CAN_F12R1_FB20_Msk (0x1U << CAN_F12R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F12R1_FB20     CAN_F12R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F12R1_FB21_Pos (21U)\r\n#define CAN_F12R1_FB21_Msk (0x1U << CAN_F12R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F12R1_FB21     CAN_F12R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F12R1_FB22_Pos (22U)\r\n#define CAN_F12R1_FB22_Msk (0x1U << CAN_F12R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F12R1_FB22     CAN_F12R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F12R1_FB23_Pos (23U)\r\n#define CAN_F12R1_FB23_Msk (0x1U << CAN_F12R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F12R1_FB23     CAN_F12R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F12R1_FB24_Pos (24U)\r\n#define CAN_F12R1_FB24_Msk (0x1U << CAN_F12R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F12R1_FB24     CAN_F12R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F12R1_FB25_Pos (25U)\r\n#define CAN_F12R1_FB25_Msk (0x1U << CAN_F12R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F12R1_FB25     CAN_F12R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F12R1_FB26_Pos (26U)\r\n#define CAN_F12R1_FB26_Msk (0x1U << CAN_F12R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F12R1_FB26     CAN_F12R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F12R1_FB27_Pos (27U)\r\n#define CAN_F12R1_FB27_Msk (0x1U << CAN_F12R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F12R1_FB27     CAN_F12R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F12R1_FB28_Pos (28U)\r\n#define CAN_F12R1_FB28_Msk (0x1U << CAN_F12R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F12R1_FB28     CAN_F12R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F12R1_FB29_Pos (29U)\r\n#define CAN_F12R1_FB29_Msk (0x1U << CAN_F12R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F12R1_FB29     CAN_F12R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F12R1_FB30_Pos (30U)\r\n#define CAN_F12R1_FB30_Msk (0x1U << CAN_F12R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F12R1_FB30     CAN_F12R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F12R1_FB31_Pos (31U)\r\n#define CAN_F12R1_FB31_Msk (0x1U << CAN_F12R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F12R1_FB31     CAN_F12R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F13R1 register  ******************/\r\n#define CAN_F13R1_FB0_Pos  (0U)\r\n#define CAN_F13R1_FB0_Msk  (0x1U << CAN_F13R1_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F13R1_FB0      CAN_F13R1_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F13R1_FB1_Pos  (1U)\r\n#define CAN_F13R1_FB1_Msk  (0x1U << CAN_F13R1_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F13R1_FB1      CAN_F13R1_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F13R1_FB2_Pos  (2U)\r\n#define CAN_F13R1_FB2_Msk  (0x1U << CAN_F13R1_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F13R1_FB2      CAN_F13R1_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F13R1_FB3_Pos  (3U)\r\n#define CAN_F13R1_FB3_Msk  (0x1U << CAN_F13R1_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F13R1_FB3      CAN_F13R1_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F13R1_FB4_Pos  (4U)\r\n#define CAN_F13R1_FB4_Msk  (0x1U << CAN_F13R1_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F13R1_FB4      CAN_F13R1_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F13R1_FB5_Pos  (5U)\r\n#define CAN_F13R1_FB5_Msk  (0x1U << CAN_F13R1_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F13R1_FB5      CAN_F13R1_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F13R1_FB6_Pos  (6U)\r\n#define CAN_F13R1_FB6_Msk  (0x1U << CAN_F13R1_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F13R1_FB6      CAN_F13R1_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F13R1_FB7_Pos  (7U)\r\n#define CAN_F13R1_FB7_Msk  (0x1U << CAN_F13R1_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F13R1_FB7      CAN_F13R1_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F13R1_FB8_Pos  (8U)\r\n#define CAN_F13R1_FB8_Msk  (0x1U << CAN_F13R1_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F13R1_FB8      CAN_F13R1_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F13R1_FB9_Pos  (9U)\r\n#define CAN_F13R1_FB9_Msk  (0x1U << CAN_F13R1_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F13R1_FB9      CAN_F13R1_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F13R1_FB10_Pos (10U)\r\n#define CAN_F13R1_FB10_Msk (0x1U << CAN_F13R1_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F13R1_FB10     CAN_F13R1_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F13R1_FB11_Pos (11U)\r\n#define CAN_F13R1_FB11_Msk (0x1U << CAN_F13R1_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F13R1_FB11     CAN_F13R1_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F13R1_FB12_Pos (12U)\r\n#define CAN_F13R1_FB12_Msk (0x1U << CAN_F13R1_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F13R1_FB12     CAN_F13R1_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F13R1_FB13_Pos (13U)\r\n#define CAN_F13R1_FB13_Msk (0x1U << CAN_F13R1_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F13R1_FB13     CAN_F13R1_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F13R1_FB14_Pos (14U)\r\n#define CAN_F13R1_FB14_Msk (0x1U << CAN_F13R1_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F13R1_FB14     CAN_F13R1_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F13R1_FB15_Pos (15U)\r\n#define CAN_F13R1_FB15_Msk (0x1U << CAN_F13R1_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F13R1_FB15     CAN_F13R1_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F13R1_FB16_Pos (16U)\r\n#define CAN_F13R1_FB16_Msk (0x1U << CAN_F13R1_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F13R1_FB16     CAN_F13R1_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F13R1_FB17_Pos (17U)\r\n#define CAN_F13R1_FB17_Msk (0x1U << CAN_F13R1_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F13R1_FB17     CAN_F13R1_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F13R1_FB18_Pos (18U)\r\n#define CAN_F13R1_FB18_Msk (0x1U << CAN_F13R1_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F13R1_FB18     CAN_F13R1_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F13R1_FB19_Pos (19U)\r\n#define CAN_F13R1_FB19_Msk (0x1U << CAN_F13R1_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F13R1_FB19     CAN_F13R1_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F13R1_FB20_Pos (20U)\r\n#define CAN_F13R1_FB20_Msk (0x1U << CAN_F13R1_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F13R1_FB20     CAN_F13R1_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F13R1_FB21_Pos (21U)\r\n#define CAN_F13R1_FB21_Msk (0x1U << CAN_F13R1_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F13R1_FB21     CAN_F13R1_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F13R1_FB22_Pos (22U)\r\n#define CAN_F13R1_FB22_Msk (0x1U << CAN_F13R1_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F13R1_FB22     CAN_F13R1_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F13R1_FB23_Pos (23U)\r\n#define CAN_F13R1_FB23_Msk (0x1U << CAN_F13R1_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F13R1_FB23     CAN_F13R1_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F13R1_FB24_Pos (24U)\r\n#define CAN_F13R1_FB24_Msk (0x1U << CAN_F13R1_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F13R1_FB24     CAN_F13R1_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F13R1_FB25_Pos (25U)\r\n#define CAN_F13R1_FB25_Msk (0x1U << CAN_F13R1_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F13R1_FB25     CAN_F13R1_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F13R1_FB26_Pos (26U)\r\n#define CAN_F13R1_FB26_Msk (0x1U << CAN_F13R1_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F13R1_FB26     CAN_F13R1_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F13R1_FB27_Pos (27U)\r\n#define CAN_F13R1_FB27_Msk (0x1U << CAN_F13R1_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F13R1_FB27     CAN_F13R1_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F13R1_FB28_Pos (28U)\r\n#define CAN_F13R1_FB28_Msk (0x1U << CAN_F13R1_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F13R1_FB28     CAN_F13R1_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F13R1_FB29_Pos (29U)\r\n#define CAN_F13R1_FB29_Msk (0x1U << CAN_F13R1_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F13R1_FB29     CAN_F13R1_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F13R1_FB30_Pos (30U)\r\n#define CAN_F13R1_FB30_Msk (0x1U << CAN_F13R1_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F13R1_FB30     CAN_F13R1_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F13R1_FB31_Pos (31U)\r\n#define CAN_F13R1_FB31_Msk (0x1U << CAN_F13R1_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F13R1_FB31     CAN_F13R1_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F0R2 register  *******************/\r\n#define CAN_F0R2_FB0_Pos  (0U)\r\n#define CAN_F0R2_FB0_Msk  (0x1U << CAN_F0R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F0R2_FB0      CAN_F0R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F0R2_FB1_Pos  (1U)\r\n#define CAN_F0R2_FB1_Msk  (0x1U << CAN_F0R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F0R2_FB1      CAN_F0R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F0R2_FB2_Pos  (2U)\r\n#define CAN_F0R2_FB2_Msk  (0x1U << CAN_F0R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F0R2_FB2      CAN_F0R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F0R2_FB3_Pos  (3U)\r\n#define CAN_F0R2_FB3_Msk  (0x1U << CAN_F0R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F0R2_FB3      CAN_F0R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F0R2_FB4_Pos  (4U)\r\n#define CAN_F0R2_FB4_Msk  (0x1U << CAN_F0R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F0R2_FB4      CAN_F0R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F0R2_FB5_Pos  (5U)\r\n#define CAN_F0R2_FB5_Msk  (0x1U << CAN_F0R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F0R2_FB5      CAN_F0R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F0R2_FB6_Pos  (6U)\r\n#define CAN_F0R2_FB6_Msk  (0x1U << CAN_F0R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F0R2_FB6      CAN_F0R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F0R2_FB7_Pos  (7U)\r\n#define CAN_F0R2_FB7_Msk  (0x1U << CAN_F0R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F0R2_FB7      CAN_F0R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F0R2_FB8_Pos  (8U)\r\n#define CAN_F0R2_FB8_Msk  (0x1U << CAN_F0R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F0R2_FB8      CAN_F0R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F0R2_FB9_Pos  (9U)\r\n#define CAN_F0R2_FB9_Msk  (0x1U << CAN_F0R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F0R2_FB9      CAN_F0R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F0R2_FB10_Pos (10U)\r\n#define CAN_F0R2_FB10_Msk (0x1U << CAN_F0R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F0R2_FB10     CAN_F0R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F0R2_FB11_Pos (11U)\r\n#define CAN_F0R2_FB11_Msk (0x1U << CAN_F0R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F0R2_FB11     CAN_F0R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F0R2_FB12_Pos (12U)\r\n#define CAN_F0R2_FB12_Msk (0x1U << CAN_F0R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F0R2_FB12     CAN_F0R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F0R2_FB13_Pos (13U)\r\n#define CAN_F0R2_FB13_Msk (0x1U << CAN_F0R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F0R2_FB13     CAN_F0R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F0R2_FB14_Pos (14U)\r\n#define CAN_F0R2_FB14_Msk (0x1U << CAN_F0R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F0R2_FB14     CAN_F0R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F0R2_FB15_Pos (15U)\r\n#define CAN_F0R2_FB15_Msk (0x1U << CAN_F0R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F0R2_FB15     CAN_F0R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F0R2_FB16_Pos (16U)\r\n#define CAN_F0R2_FB16_Msk (0x1U << CAN_F0R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F0R2_FB16     CAN_F0R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F0R2_FB17_Pos (17U)\r\n#define CAN_F0R2_FB17_Msk (0x1U << CAN_F0R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F0R2_FB17     CAN_F0R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F0R2_FB18_Pos (18U)\r\n#define CAN_F0R2_FB18_Msk (0x1U << CAN_F0R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F0R2_FB18     CAN_F0R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F0R2_FB19_Pos (19U)\r\n#define CAN_F0R2_FB19_Msk (0x1U << CAN_F0R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F0R2_FB19     CAN_F0R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F0R2_FB20_Pos (20U)\r\n#define CAN_F0R2_FB20_Msk (0x1U << CAN_F0R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F0R2_FB20     CAN_F0R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F0R2_FB21_Pos (21U)\r\n#define CAN_F0R2_FB21_Msk (0x1U << CAN_F0R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F0R2_FB21     CAN_F0R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F0R2_FB22_Pos (22U)\r\n#define CAN_F0R2_FB22_Msk (0x1U << CAN_F0R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F0R2_FB22     CAN_F0R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F0R2_FB23_Pos (23U)\r\n#define CAN_F0R2_FB23_Msk (0x1U << CAN_F0R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F0R2_FB23     CAN_F0R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F0R2_FB24_Pos (24U)\r\n#define CAN_F0R2_FB24_Msk (0x1U << CAN_F0R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F0R2_FB24     CAN_F0R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F0R2_FB25_Pos (25U)\r\n#define CAN_F0R2_FB25_Msk (0x1U << CAN_F0R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F0R2_FB25     CAN_F0R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F0R2_FB26_Pos (26U)\r\n#define CAN_F0R2_FB26_Msk (0x1U << CAN_F0R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F0R2_FB26     CAN_F0R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F0R2_FB27_Pos (27U)\r\n#define CAN_F0R2_FB27_Msk (0x1U << CAN_F0R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F0R2_FB27     CAN_F0R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F0R2_FB28_Pos (28U)\r\n#define CAN_F0R2_FB28_Msk (0x1U << CAN_F0R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F0R2_FB28     CAN_F0R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F0R2_FB29_Pos (29U)\r\n#define CAN_F0R2_FB29_Msk (0x1U << CAN_F0R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F0R2_FB29     CAN_F0R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F0R2_FB30_Pos (30U)\r\n#define CAN_F0R2_FB30_Msk (0x1U << CAN_F0R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F0R2_FB30     CAN_F0R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F0R2_FB31_Pos (31U)\r\n#define CAN_F0R2_FB31_Msk (0x1U << CAN_F0R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F0R2_FB31     CAN_F0R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F1R2 register  *******************/\r\n#define CAN_F1R2_FB0_Pos  (0U)\r\n#define CAN_F1R2_FB0_Msk  (0x1U << CAN_F1R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F1R2_FB0      CAN_F1R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F1R2_FB1_Pos  (1U)\r\n#define CAN_F1R2_FB1_Msk  (0x1U << CAN_F1R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F1R2_FB1      CAN_F1R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F1R2_FB2_Pos  (2U)\r\n#define CAN_F1R2_FB2_Msk  (0x1U << CAN_F1R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F1R2_FB2      CAN_F1R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F1R2_FB3_Pos  (3U)\r\n#define CAN_F1R2_FB3_Msk  (0x1U << CAN_F1R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F1R2_FB3      CAN_F1R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F1R2_FB4_Pos  (4U)\r\n#define CAN_F1R2_FB4_Msk  (0x1U << CAN_F1R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F1R2_FB4      CAN_F1R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F1R2_FB5_Pos  (5U)\r\n#define CAN_F1R2_FB5_Msk  (0x1U << CAN_F1R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F1R2_FB5      CAN_F1R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F1R2_FB6_Pos  (6U)\r\n#define CAN_F1R2_FB6_Msk  (0x1U << CAN_F1R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F1R2_FB6      CAN_F1R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F1R2_FB7_Pos  (7U)\r\n#define CAN_F1R2_FB7_Msk  (0x1U << CAN_F1R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F1R2_FB7      CAN_F1R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F1R2_FB8_Pos  (8U)\r\n#define CAN_F1R2_FB8_Msk  (0x1U << CAN_F1R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F1R2_FB8      CAN_F1R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F1R2_FB9_Pos  (9U)\r\n#define CAN_F1R2_FB9_Msk  (0x1U << CAN_F1R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F1R2_FB9      CAN_F1R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F1R2_FB10_Pos (10U)\r\n#define CAN_F1R2_FB10_Msk (0x1U << CAN_F1R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F1R2_FB10     CAN_F1R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F1R2_FB11_Pos (11U)\r\n#define CAN_F1R2_FB11_Msk (0x1U << CAN_F1R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F1R2_FB11     CAN_F1R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F1R2_FB12_Pos (12U)\r\n#define CAN_F1R2_FB12_Msk (0x1U << CAN_F1R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F1R2_FB12     CAN_F1R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F1R2_FB13_Pos (13U)\r\n#define CAN_F1R2_FB13_Msk (0x1U << CAN_F1R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F1R2_FB13     CAN_F1R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F1R2_FB14_Pos (14U)\r\n#define CAN_F1R2_FB14_Msk (0x1U << CAN_F1R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F1R2_FB14     CAN_F1R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F1R2_FB15_Pos (15U)\r\n#define CAN_F1R2_FB15_Msk (0x1U << CAN_F1R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F1R2_FB15     CAN_F1R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F1R2_FB16_Pos (16U)\r\n#define CAN_F1R2_FB16_Msk (0x1U << CAN_F1R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F1R2_FB16     CAN_F1R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F1R2_FB17_Pos (17U)\r\n#define CAN_F1R2_FB17_Msk (0x1U << CAN_F1R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F1R2_FB17     CAN_F1R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F1R2_FB18_Pos (18U)\r\n#define CAN_F1R2_FB18_Msk (0x1U << CAN_F1R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F1R2_FB18     CAN_F1R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F1R2_FB19_Pos (19U)\r\n#define CAN_F1R2_FB19_Msk (0x1U << CAN_F1R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F1R2_FB19     CAN_F1R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F1R2_FB20_Pos (20U)\r\n#define CAN_F1R2_FB20_Msk (0x1U << CAN_F1R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F1R2_FB20     CAN_F1R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F1R2_FB21_Pos (21U)\r\n#define CAN_F1R2_FB21_Msk (0x1U << CAN_F1R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F1R2_FB21     CAN_F1R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F1R2_FB22_Pos (22U)\r\n#define CAN_F1R2_FB22_Msk (0x1U << CAN_F1R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F1R2_FB22     CAN_F1R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F1R2_FB23_Pos (23U)\r\n#define CAN_F1R2_FB23_Msk (0x1U << CAN_F1R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F1R2_FB23     CAN_F1R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F1R2_FB24_Pos (24U)\r\n#define CAN_F1R2_FB24_Msk (0x1U << CAN_F1R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F1R2_FB24     CAN_F1R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F1R2_FB25_Pos (25U)\r\n#define CAN_F1R2_FB25_Msk (0x1U << CAN_F1R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F1R2_FB25     CAN_F1R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F1R2_FB26_Pos (26U)\r\n#define CAN_F1R2_FB26_Msk (0x1U << CAN_F1R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F1R2_FB26     CAN_F1R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F1R2_FB27_Pos (27U)\r\n#define CAN_F1R2_FB27_Msk (0x1U << CAN_F1R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F1R2_FB27     CAN_F1R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F1R2_FB28_Pos (28U)\r\n#define CAN_F1R2_FB28_Msk (0x1U << CAN_F1R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F1R2_FB28     CAN_F1R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F1R2_FB29_Pos (29U)\r\n#define CAN_F1R2_FB29_Msk (0x1U << CAN_F1R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F1R2_FB29     CAN_F1R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F1R2_FB30_Pos (30U)\r\n#define CAN_F1R2_FB30_Msk (0x1U << CAN_F1R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F1R2_FB30     CAN_F1R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F1R2_FB31_Pos (31U)\r\n#define CAN_F1R2_FB31_Msk (0x1U << CAN_F1R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F1R2_FB31     CAN_F1R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F2R2 register  *******************/\r\n#define CAN_F2R2_FB0_Pos  (0U)\r\n#define CAN_F2R2_FB0_Msk  (0x1U << CAN_F2R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F2R2_FB0      CAN_F2R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F2R2_FB1_Pos  (1U)\r\n#define CAN_F2R2_FB1_Msk  (0x1U << CAN_F2R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F2R2_FB1      CAN_F2R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F2R2_FB2_Pos  (2U)\r\n#define CAN_F2R2_FB2_Msk  (0x1U << CAN_F2R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F2R2_FB2      CAN_F2R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F2R2_FB3_Pos  (3U)\r\n#define CAN_F2R2_FB3_Msk  (0x1U << CAN_F2R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F2R2_FB3      CAN_F2R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F2R2_FB4_Pos  (4U)\r\n#define CAN_F2R2_FB4_Msk  (0x1U << CAN_F2R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F2R2_FB4      CAN_F2R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F2R2_FB5_Pos  (5U)\r\n#define CAN_F2R2_FB5_Msk  (0x1U << CAN_F2R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F2R2_FB5      CAN_F2R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F2R2_FB6_Pos  (6U)\r\n#define CAN_F2R2_FB6_Msk  (0x1U << CAN_F2R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F2R2_FB6      CAN_F2R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F2R2_FB7_Pos  (7U)\r\n#define CAN_F2R2_FB7_Msk  (0x1U << CAN_F2R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F2R2_FB7      CAN_F2R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F2R2_FB8_Pos  (8U)\r\n#define CAN_F2R2_FB8_Msk  (0x1U << CAN_F2R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F2R2_FB8      CAN_F2R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F2R2_FB9_Pos  (9U)\r\n#define CAN_F2R2_FB9_Msk  (0x1U << CAN_F2R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F2R2_FB9      CAN_F2R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F2R2_FB10_Pos (10U)\r\n#define CAN_F2R2_FB10_Msk (0x1U << CAN_F2R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F2R2_FB10     CAN_F2R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F2R2_FB11_Pos (11U)\r\n#define CAN_F2R2_FB11_Msk (0x1U << CAN_F2R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F2R2_FB11     CAN_F2R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F2R2_FB12_Pos (12U)\r\n#define CAN_F2R2_FB12_Msk (0x1U << CAN_F2R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F2R2_FB12     CAN_F2R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F2R2_FB13_Pos (13U)\r\n#define CAN_F2R2_FB13_Msk (0x1U << CAN_F2R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F2R2_FB13     CAN_F2R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F2R2_FB14_Pos (14U)\r\n#define CAN_F2R2_FB14_Msk (0x1U << CAN_F2R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F2R2_FB14     CAN_F2R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F2R2_FB15_Pos (15U)\r\n#define CAN_F2R2_FB15_Msk (0x1U << CAN_F2R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F2R2_FB15     CAN_F2R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F2R2_FB16_Pos (16U)\r\n#define CAN_F2R2_FB16_Msk (0x1U << CAN_F2R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F2R2_FB16     CAN_F2R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F2R2_FB17_Pos (17U)\r\n#define CAN_F2R2_FB17_Msk (0x1U << CAN_F2R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F2R2_FB17     CAN_F2R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F2R2_FB18_Pos (18U)\r\n#define CAN_F2R2_FB18_Msk (0x1U << CAN_F2R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F2R2_FB18     CAN_F2R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F2R2_FB19_Pos (19U)\r\n#define CAN_F2R2_FB19_Msk (0x1U << CAN_F2R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F2R2_FB19     CAN_F2R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F2R2_FB20_Pos (20U)\r\n#define CAN_F2R2_FB20_Msk (0x1U << CAN_F2R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F2R2_FB20     CAN_F2R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F2R2_FB21_Pos (21U)\r\n#define CAN_F2R2_FB21_Msk (0x1U << CAN_F2R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F2R2_FB21     CAN_F2R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F2R2_FB22_Pos (22U)\r\n#define CAN_F2R2_FB22_Msk (0x1U << CAN_F2R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F2R2_FB22     CAN_F2R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F2R2_FB23_Pos (23U)\r\n#define CAN_F2R2_FB23_Msk (0x1U << CAN_F2R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F2R2_FB23     CAN_F2R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F2R2_FB24_Pos (24U)\r\n#define CAN_F2R2_FB24_Msk (0x1U << CAN_F2R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F2R2_FB24     CAN_F2R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F2R2_FB25_Pos (25U)\r\n#define CAN_F2R2_FB25_Msk (0x1U << CAN_F2R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F2R2_FB25     CAN_F2R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F2R2_FB26_Pos (26U)\r\n#define CAN_F2R2_FB26_Msk (0x1U << CAN_F2R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F2R2_FB26     CAN_F2R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F2R2_FB27_Pos (27U)\r\n#define CAN_F2R2_FB27_Msk (0x1U << CAN_F2R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F2R2_FB27     CAN_F2R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F2R2_FB28_Pos (28U)\r\n#define CAN_F2R2_FB28_Msk (0x1U << CAN_F2R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F2R2_FB28     CAN_F2R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F2R2_FB29_Pos (29U)\r\n#define CAN_F2R2_FB29_Msk (0x1U << CAN_F2R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F2R2_FB29     CAN_F2R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F2R2_FB30_Pos (30U)\r\n#define CAN_F2R2_FB30_Msk (0x1U << CAN_F2R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F2R2_FB30     CAN_F2R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F2R2_FB31_Pos (31U)\r\n#define CAN_F2R2_FB31_Msk (0x1U << CAN_F2R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F2R2_FB31     CAN_F2R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F3R2 register  *******************/\r\n#define CAN_F3R2_FB0_Pos  (0U)\r\n#define CAN_F3R2_FB0_Msk  (0x1U << CAN_F3R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F3R2_FB0      CAN_F3R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F3R2_FB1_Pos  (1U)\r\n#define CAN_F3R2_FB1_Msk  (0x1U << CAN_F3R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F3R2_FB1      CAN_F3R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F3R2_FB2_Pos  (2U)\r\n#define CAN_F3R2_FB2_Msk  (0x1U << CAN_F3R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F3R2_FB2      CAN_F3R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F3R2_FB3_Pos  (3U)\r\n#define CAN_F3R2_FB3_Msk  (0x1U << CAN_F3R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F3R2_FB3      CAN_F3R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F3R2_FB4_Pos  (4U)\r\n#define CAN_F3R2_FB4_Msk  (0x1U << CAN_F3R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F3R2_FB4      CAN_F3R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F3R2_FB5_Pos  (5U)\r\n#define CAN_F3R2_FB5_Msk  (0x1U << CAN_F3R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F3R2_FB5      CAN_F3R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F3R2_FB6_Pos  (6U)\r\n#define CAN_F3R2_FB6_Msk  (0x1U << CAN_F3R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F3R2_FB6      CAN_F3R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F3R2_FB7_Pos  (7U)\r\n#define CAN_F3R2_FB7_Msk  (0x1U << CAN_F3R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F3R2_FB7      CAN_F3R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F3R2_FB8_Pos  (8U)\r\n#define CAN_F3R2_FB8_Msk  (0x1U << CAN_F3R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F3R2_FB8      CAN_F3R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F3R2_FB9_Pos  (9U)\r\n#define CAN_F3R2_FB9_Msk  (0x1U << CAN_F3R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F3R2_FB9      CAN_F3R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F3R2_FB10_Pos (10U)\r\n#define CAN_F3R2_FB10_Msk (0x1U << CAN_F3R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F3R2_FB10     CAN_F3R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F3R2_FB11_Pos (11U)\r\n#define CAN_F3R2_FB11_Msk (0x1U << CAN_F3R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F3R2_FB11     CAN_F3R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F3R2_FB12_Pos (12U)\r\n#define CAN_F3R2_FB12_Msk (0x1U << CAN_F3R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F3R2_FB12     CAN_F3R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F3R2_FB13_Pos (13U)\r\n#define CAN_F3R2_FB13_Msk (0x1U << CAN_F3R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F3R2_FB13     CAN_F3R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F3R2_FB14_Pos (14U)\r\n#define CAN_F3R2_FB14_Msk (0x1U << CAN_F3R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F3R2_FB14     CAN_F3R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F3R2_FB15_Pos (15U)\r\n#define CAN_F3R2_FB15_Msk (0x1U << CAN_F3R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F3R2_FB15     CAN_F3R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F3R2_FB16_Pos (16U)\r\n#define CAN_F3R2_FB16_Msk (0x1U << CAN_F3R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F3R2_FB16     CAN_F3R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F3R2_FB17_Pos (17U)\r\n#define CAN_F3R2_FB17_Msk (0x1U << CAN_F3R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F3R2_FB17     CAN_F3R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F3R2_FB18_Pos (18U)\r\n#define CAN_F3R2_FB18_Msk (0x1U << CAN_F3R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F3R2_FB18     CAN_F3R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F3R2_FB19_Pos (19U)\r\n#define CAN_F3R2_FB19_Msk (0x1U << CAN_F3R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F3R2_FB19     CAN_F3R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F3R2_FB20_Pos (20U)\r\n#define CAN_F3R2_FB20_Msk (0x1U << CAN_F3R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F3R2_FB20     CAN_F3R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F3R2_FB21_Pos (21U)\r\n#define CAN_F3R2_FB21_Msk (0x1U << CAN_F3R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F3R2_FB21     CAN_F3R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F3R2_FB22_Pos (22U)\r\n#define CAN_F3R2_FB22_Msk (0x1U << CAN_F3R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F3R2_FB22     CAN_F3R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F3R2_FB23_Pos (23U)\r\n#define CAN_F3R2_FB23_Msk (0x1U << CAN_F3R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F3R2_FB23     CAN_F3R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F3R2_FB24_Pos (24U)\r\n#define CAN_F3R2_FB24_Msk (0x1U << CAN_F3R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F3R2_FB24     CAN_F3R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F3R2_FB25_Pos (25U)\r\n#define CAN_F3R2_FB25_Msk (0x1U << CAN_F3R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F3R2_FB25     CAN_F3R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F3R2_FB26_Pos (26U)\r\n#define CAN_F3R2_FB26_Msk (0x1U << CAN_F3R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F3R2_FB26     CAN_F3R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F3R2_FB27_Pos (27U)\r\n#define CAN_F3R2_FB27_Msk (0x1U << CAN_F3R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F3R2_FB27     CAN_F3R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F3R2_FB28_Pos (28U)\r\n#define CAN_F3R2_FB28_Msk (0x1U << CAN_F3R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F3R2_FB28     CAN_F3R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F3R2_FB29_Pos (29U)\r\n#define CAN_F3R2_FB29_Msk (0x1U << CAN_F3R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F3R2_FB29     CAN_F3R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F3R2_FB30_Pos (30U)\r\n#define CAN_F3R2_FB30_Msk (0x1U << CAN_F3R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F3R2_FB30     CAN_F3R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F3R2_FB31_Pos (31U)\r\n#define CAN_F3R2_FB31_Msk (0x1U << CAN_F3R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F3R2_FB31     CAN_F3R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F4R2 register  *******************/\r\n#define CAN_F4R2_FB0_Pos  (0U)\r\n#define CAN_F4R2_FB0_Msk  (0x1U << CAN_F4R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F4R2_FB0      CAN_F4R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F4R2_FB1_Pos  (1U)\r\n#define CAN_F4R2_FB1_Msk  (0x1U << CAN_F4R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F4R2_FB1      CAN_F4R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F4R2_FB2_Pos  (2U)\r\n#define CAN_F4R2_FB2_Msk  (0x1U << CAN_F4R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F4R2_FB2      CAN_F4R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F4R2_FB3_Pos  (3U)\r\n#define CAN_F4R2_FB3_Msk  (0x1U << CAN_F4R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F4R2_FB3      CAN_F4R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F4R2_FB4_Pos  (4U)\r\n#define CAN_F4R2_FB4_Msk  (0x1U << CAN_F4R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F4R2_FB4      CAN_F4R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F4R2_FB5_Pos  (5U)\r\n#define CAN_F4R2_FB5_Msk  (0x1U << CAN_F4R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F4R2_FB5      CAN_F4R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F4R2_FB6_Pos  (6U)\r\n#define CAN_F4R2_FB6_Msk  (0x1U << CAN_F4R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F4R2_FB6      CAN_F4R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F4R2_FB7_Pos  (7U)\r\n#define CAN_F4R2_FB7_Msk  (0x1U << CAN_F4R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F4R2_FB7      CAN_F4R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F4R2_FB8_Pos  (8U)\r\n#define CAN_F4R2_FB8_Msk  (0x1U << CAN_F4R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F4R2_FB8      CAN_F4R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F4R2_FB9_Pos  (9U)\r\n#define CAN_F4R2_FB9_Msk  (0x1U << CAN_F4R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F4R2_FB9      CAN_F4R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F4R2_FB10_Pos (10U)\r\n#define CAN_F4R2_FB10_Msk (0x1U << CAN_F4R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F4R2_FB10     CAN_F4R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F4R2_FB11_Pos (11U)\r\n#define CAN_F4R2_FB11_Msk (0x1U << CAN_F4R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F4R2_FB11     CAN_F4R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F4R2_FB12_Pos (12U)\r\n#define CAN_F4R2_FB12_Msk (0x1U << CAN_F4R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F4R2_FB12     CAN_F4R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F4R2_FB13_Pos (13U)\r\n#define CAN_F4R2_FB13_Msk (0x1U << CAN_F4R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F4R2_FB13     CAN_F4R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F4R2_FB14_Pos (14U)\r\n#define CAN_F4R2_FB14_Msk (0x1U << CAN_F4R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F4R2_FB14     CAN_F4R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F4R2_FB15_Pos (15U)\r\n#define CAN_F4R2_FB15_Msk (0x1U << CAN_F4R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F4R2_FB15     CAN_F4R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F4R2_FB16_Pos (16U)\r\n#define CAN_F4R2_FB16_Msk (0x1U << CAN_F4R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F4R2_FB16     CAN_F4R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F4R2_FB17_Pos (17U)\r\n#define CAN_F4R2_FB17_Msk (0x1U << CAN_F4R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F4R2_FB17     CAN_F4R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F4R2_FB18_Pos (18U)\r\n#define CAN_F4R2_FB18_Msk (0x1U << CAN_F4R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F4R2_FB18     CAN_F4R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F4R2_FB19_Pos (19U)\r\n#define CAN_F4R2_FB19_Msk (0x1U << CAN_F4R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F4R2_FB19     CAN_F4R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F4R2_FB20_Pos (20U)\r\n#define CAN_F4R2_FB20_Msk (0x1U << CAN_F4R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F4R2_FB20     CAN_F4R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F4R2_FB21_Pos (21U)\r\n#define CAN_F4R2_FB21_Msk (0x1U << CAN_F4R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F4R2_FB21     CAN_F4R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F4R2_FB22_Pos (22U)\r\n#define CAN_F4R2_FB22_Msk (0x1U << CAN_F4R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F4R2_FB22     CAN_F4R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F4R2_FB23_Pos (23U)\r\n#define CAN_F4R2_FB23_Msk (0x1U << CAN_F4R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F4R2_FB23     CAN_F4R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F4R2_FB24_Pos (24U)\r\n#define CAN_F4R2_FB24_Msk (0x1U << CAN_F4R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F4R2_FB24     CAN_F4R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F4R2_FB25_Pos (25U)\r\n#define CAN_F4R2_FB25_Msk (0x1U << CAN_F4R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F4R2_FB25     CAN_F4R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F4R2_FB26_Pos (26U)\r\n#define CAN_F4R2_FB26_Msk (0x1U << CAN_F4R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F4R2_FB26     CAN_F4R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F4R2_FB27_Pos (27U)\r\n#define CAN_F4R2_FB27_Msk (0x1U << CAN_F4R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F4R2_FB27     CAN_F4R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F4R2_FB28_Pos (28U)\r\n#define CAN_F4R2_FB28_Msk (0x1U << CAN_F4R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F4R2_FB28     CAN_F4R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F4R2_FB29_Pos (29U)\r\n#define CAN_F4R2_FB29_Msk (0x1U << CAN_F4R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F4R2_FB29     CAN_F4R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F4R2_FB30_Pos (30U)\r\n#define CAN_F4R2_FB30_Msk (0x1U << CAN_F4R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F4R2_FB30     CAN_F4R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F4R2_FB31_Pos (31U)\r\n#define CAN_F4R2_FB31_Msk (0x1U << CAN_F4R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F4R2_FB31     CAN_F4R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F5R2 register  *******************/\r\n#define CAN_F5R2_FB0_Pos  (0U)\r\n#define CAN_F5R2_FB0_Msk  (0x1U << CAN_F5R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F5R2_FB0      CAN_F5R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F5R2_FB1_Pos  (1U)\r\n#define CAN_F5R2_FB1_Msk  (0x1U << CAN_F5R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F5R2_FB1      CAN_F5R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F5R2_FB2_Pos  (2U)\r\n#define CAN_F5R2_FB2_Msk  (0x1U << CAN_F5R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F5R2_FB2      CAN_F5R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F5R2_FB3_Pos  (3U)\r\n#define CAN_F5R2_FB3_Msk  (0x1U << CAN_F5R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F5R2_FB3      CAN_F5R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F5R2_FB4_Pos  (4U)\r\n#define CAN_F5R2_FB4_Msk  (0x1U << CAN_F5R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F5R2_FB4      CAN_F5R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F5R2_FB5_Pos  (5U)\r\n#define CAN_F5R2_FB5_Msk  (0x1U << CAN_F5R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F5R2_FB5      CAN_F5R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F5R2_FB6_Pos  (6U)\r\n#define CAN_F5R2_FB6_Msk  (0x1U << CAN_F5R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F5R2_FB6      CAN_F5R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F5R2_FB7_Pos  (7U)\r\n#define CAN_F5R2_FB7_Msk  (0x1U << CAN_F5R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F5R2_FB7      CAN_F5R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F5R2_FB8_Pos  (8U)\r\n#define CAN_F5R2_FB8_Msk  (0x1U << CAN_F5R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F5R2_FB8      CAN_F5R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F5R2_FB9_Pos  (9U)\r\n#define CAN_F5R2_FB9_Msk  (0x1U << CAN_F5R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F5R2_FB9      CAN_F5R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F5R2_FB10_Pos (10U)\r\n#define CAN_F5R2_FB10_Msk (0x1U << CAN_F5R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F5R2_FB10     CAN_F5R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F5R2_FB11_Pos (11U)\r\n#define CAN_F5R2_FB11_Msk (0x1U << CAN_F5R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F5R2_FB11     CAN_F5R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F5R2_FB12_Pos (12U)\r\n#define CAN_F5R2_FB12_Msk (0x1U << CAN_F5R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F5R2_FB12     CAN_F5R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F5R2_FB13_Pos (13U)\r\n#define CAN_F5R2_FB13_Msk (0x1U << CAN_F5R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F5R2_FB13     CAN_F5R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F5R2_FB14_Pos (14U)\r\n#define CAN_F5R2_FB14_Msk (0x1U << CAN_F5R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F5R2_FB14     CAN_F5R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F5R2_FB15_Pos (15U)\r\n#define CAN_F5R2_FB15_Msk (0x1U << CAN_F5R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F5R2_FB15     CAN_F5R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F5R2_FB16_Pos (16U)\r\n#define CAN_F5R2_FB16_Msk (0x1U << CAN_F5R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F5R2_FB16     CAN_F5R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F5R2_FB17_Pos (17U)\r\n#define CAN_F5R2_FB17_Msk (0x1U << CAN_F5R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F5R2_FB17     CAN_F5R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F5R2_FB18_Pos (18U)\r\n#define CAN_F5R2_FB18_Msk (0x1U << CAN_F5R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F5R2_FB18     CAN_F5R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F5R2_FB19_Pos (19U)\r\n#define CAN_F5R2_FB19_Msk (0x1U << CAN_F5R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F5R2_FB19     CAN_F5R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F5R2_FB20_Pos (20U)\r\n#define CAN_F5R2_FB20_Msk (0x1U << CAN_F5R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F5R2_FB20     CAN_F5R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F5R2_FB21_Pos (21U)\r\n#define CAN_F5R2_FB21_Msk (0x1U << CAN_F5R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F5R2_FB21     CAN_F5R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F5R2_FB22_Pos (22U)\r\n#define CAN_F5R2_FB22_Msk (0x1U << CAN_F5R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F5R2_FB22     CAN_F5R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F5R2_FB23_Pos (23U)\r\n#define CAN_F5R2_FB23_Msk (0x1U << CAN_F5R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F5R2_FB23     CAN_F5R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F5R2_FB24_Pos (24U)\r\n#define CAN_F5R2_FB24_Msk (0x1U << CAN_F5R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F5R2_FB24     CAN_F5R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F5R2_FB25_Pos (25U)\r\n#define CAN_F5R2_FB25_Msk (0x1U << CAN_F5R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F5R2_FB25     CAN_F5R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F5R2_FB26_Pos (26U)\r\n#define CAN_F5R2_FB26_Msk (0x1U << CAN_F5R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F5R2_FB26     CAN_F5R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F5R2_FB27_Pos (27U)\r\n#define CAN_F5R2_FB27_Msk (0x1U << CAN_F5R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F5R2_FB27     CAN_F5R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F5R2_FB28_Pos (28U)\r\n#define CAN_F5R2_FB28_Msk (0x1U << CAN_F5R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F5R2_FB28     CAN_F5R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F5R2_FB29_Pos (29U)\r\n#define CAN_F5R2_FB29_Msk (0x1U << CAN_F5R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F5R2_FB29     CAN_F5R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F5R2_FB30_Pos (30U)\r\n#define CAN_F5R2_FB30_Msk (0x1U << CAN_F5R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F5R2_FB30     CAN_F5R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F5R2_FB31_Pos (31U)\r\n#define CAN_F5R2_FB31_Msk (0x1U << CAN_F5R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F5R2_FB31     CAN_F5R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F6R2 register  *******************/\r\n#define CAN_F6R2_FB0_Pos  (0U)\r\n#define CAN_F6R2_FB0_Msk  (0x1U << CAN_F6R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F6R2_FB0      CAN_F6R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F6R2_FB1_Pos  (1U)\r\n#define CAN_F6R2_FB1_Msk  (0x1U << CAN_F6R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F6R2_FB1      CAN_F6R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F6R2_FB2_Pos  (2U)\r\n#define CAN_F6R2_FB2_Msk  (0x1U << CAN_F6R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F6R2_FB2      CAN_F6R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F6R2_FB3_Pos  (3U)\r\n#define CAN_F6R2_FB3_Msk  (0x1U << CAN_F6R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F6R2_FB3      CAN_F6R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F6R2_FB4_Pos  (4U)\r\n#define CAN_F6R2_FB4_Msk  (0x1U << CAN_F6R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F6R2_FB4      CAN_F6R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F6R2_FB5_Pos  (5U)\r\n#define CAN_F6R2_FB5_Msk  (0x1U << CAN_F6R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F6R2_FB5      CAN_F6R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F6R2_FB6_Pos  (6U)\r\n#define CAN_F6R2_FB6_Msk  (0x1U << CAN_F6R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F6R2_FB6      CAN_F6R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F6R2_FB7_Pos  (7U)\r\n#define CAN_F6R2_FB7_Msk  (0x1U << CAN_F6R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F6R2_FB7      CAN_F6R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F6R2_FB8_Pos  (8U)\r\n#define CAN_F6R2_FB8_Msk  (0x1U << CAN_F6R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F6R2_FB8      CAN_F6R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F6R2_FB9_Pos  (9U)\r\n#define CAN_F6R2_FB9_Msk  (0x1U << CAN_F6R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F6R2_FB9      CAN_F6R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F6R2_FB10_Pos (10U)\r\n#define CAN_F6R2_FB10_Msk (0x1U << CAN_F6R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F6R2_FB10     CAN_F6R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F6R2_FB11_Pos (11U)\r\n#define CAN_F6R2_FB11_Msk (0x1U << CAN_F6R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F6R2_FB11     CAN_F6R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F6R2_FB12_Pos (12U)\r\n#define CAN_F6R2_FB12_Msk (0x1U << CAN_F6R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F6R2_FB12     CAN_F6R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F6R2_FB13_Pos (13U)\r\n#define CAN_F6R2_FB13_Msk (0x1U << CAN_F6R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F6R2_FB13     CAN_F6R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F6R2_FB14_Pos (14U)\r\n#define CAN_F6R2_FB14_Msk (0x1U << CAN_F6R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F6R2_FB14     CAN_F6R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F6R2_FB15_Pos (15U)\r\n#define CAN_F6R2_FB15_Msk (0x1U << CAN_F6R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F6R2_FB15     CAN_F6R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F6R2_FB16_Pos (16U)\r\n#define CAN_F6R2_FB16_Msk (0x1U << CAN_F6R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F6R2_FB16     CAN_F6R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F6R2_FB17_Pos (17U)\r\n#define CAN_F6R2_FB17_Msk (0x1U << CAN_F6R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F6R2_FB17     CAN_F6R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F6R2_FB18_Pos (18U)\r\n#define CAN_F6R2_FB18_Msk (0x1U << CAN_F6R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F6R2_FB18     CAN_F6R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F6R2_FB19_Pos (19U)\r\n#define CAN_F6R2_FB19_Msk (0x1U << CAN_F6R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F6R2_FB19     CAN_F6R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F6R2_FB20_Pos (20U)\r\n#define CAN_F6R2_FB20_Msk (0x1U << CAN_F6R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F6R2_FB20     CAN_F6R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F6R2_FB21_Pos (21U)\r\n#define CAN_F6R2_FB21_Msk (0x1U << CAN_F6R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F6R2_FB21     CAN_F6R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F6R2_FB22_Pos (22U)\r\n#define CAN_F6R2_FB22_Msk (0x1U << CAN_F6R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F6R2_FB22     CAN_F6R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F6R2_FB23_Pos (23U)\r\n#define CAN_F6R2_FB23_Msk (0x1U << CAN_F6R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F6R2_FB23     CAN_F6R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F6R2_FB24_Pos (24U)\r\n#define CAN_F6R2_FB24_Msk (0x1U << CAN_F6R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F6R2_FB24     CAN_F6R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F6R2_FB25_Pos (25U)\r\n#define CAN_F6R2_FB25_Msk (0x1U << CAN_F6R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F6R2_FB25     CAN_F6R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F6R2_FB26_Pos (26U)\r\n#define CAN_F6R2_FB26_Msk (0x1U << CAN_F6R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F6R2_FB26     CAN_F6R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F6R2_FB27_Pos (27U)\r\n#define CAN_F6R2_FB27_Msk (0x1U << CAN_F6R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F6R2_FB27     CAN_F6R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F6R2_FB28_Pos (28U)\r\n#define CAN_F6R2_FB28_Msk (0x1U << CAN_F6R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F6R2_FB28     CAN_F6R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F6R2_FB29_Pos (29U)\r\n#define CAN_F6R2_FB29_Msk (0x1U << CAN_F6R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F6R2_FB29     CAN_F6R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F6R2_FB30_Pos (30U)\r\n#define CAN_F6R2_FB30_Msk (0x1U << CAN_F6R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F6R2_FB30     CAN_F6R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F6R2_FB31_Pos (31U)\r\n#define CAN_F6R2_FB31_Msk (0x1U << CAN_F6R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F6R2_FB31     CAN_F6R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F7R2 register  *******************/\r\n#define CAN_F7R2_FB0_Pos  (0U)\r\n#define CAN_F7R2_FB0_Msk  (0x1U << CAN_F7R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F7R2_FB0      CAN_F7R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F7R2_FB1_Pos  (1U)\r\n#define CAN_F7R2_FB1_Msk  (0x1U << CAN_F7R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F7R2_FB1      CAN_F7R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F7R2_FB2_Pos  (2U)\r\n#define CAN_F7R2_FB2_Msk  (0x1U << CAN_F7R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F7R2_FB2      CAN_F7R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F7R2_FB3_Pos  (3U)\r\n#define CAN_F7R2_FB3_Msk  (0x1U << CAN_F7R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F7R2_FB3      CAN_F7R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F7R2_FB4_Pos  (4U)\r\n#define CAN_F7R2_FB4_Msk  (0x1U << CAN_F7R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F7R2_FB4      CAN_F7R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F7R2_FB5_Pos  (5U)\r\n#define CAN_F7R2_FB5_Msk  (0x1U << CAN_F7R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F7R2_FB5      CAN_F7R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F7R2_FB6_Pos  (6U)\r\n#define CAN_F7R2_FB6_Msk  (0x1U << CAN_F7R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F7R2_FB6      CAN_F7R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F7R2_FB7_Pos  (7U)\r\n#define CAN_F7R2_FB7_Msk  (0x1U << CAN_F7R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F7R2_FB7      CAN_F7R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F7R2_FB8_Pos  (8U)\r\n#define CAN_F7R2_FB8_Msk  (0x1U << CAN_F7R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F7R2_FB8      CAN_F7R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F7R2_FB9_Pos  (9U)\r\n#define CAN_F7R2_FB9_Msk  (0x1U << CAN_F7R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F7R2_FB9      CAN_F7R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F7R2_FB10_Pos (10U)\r\n#define CAN_F7R2_FB10_Msk (0x1U << CAN_F7R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F7R2_FB10     CAN_F7R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F7R2_FB11_Pos (11U)\r\n#define CAN_F7R2_FB11_Msk (0x1U << CAN_F7R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F7R2_FB11     CAN_F7R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F7R2_FB12_Pos (12U)\r\n#define CAN_F7R2_FB12_Msk (0x1U << CAN_F7R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F7R2_FB12     CAN_F7R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F7R2_FB13_Pos (13U)\r\n#define CAN_F7R2_FB13_Msk (0x1U << CAN_F7R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F7R2_FB13     CAN_F7R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F7R2_FB14_Pos (14U)\r\n#define CAN_F7R2_FB14_Msk (0x1U << CAN_F7R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F7R2_FB14     CAN_F7R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F7R2_FB15_Pos (15U)\r\n#define CAN_F7R2_FB15_Msk (0x1U << CAN_F7R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F7R2_FB15     CAN_F7R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F7R2_FB16_Pos (16U)\r\n#define CAN_F7R2_FB16_Msk (0x1U << CAN_F7R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F7R2_FB16     CAN_F7R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F7R2_FB17_Pos (17U)\r\n#define CAN_F7R2_FB17_Msk (0x1U << CAN_F7R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F7R2_FB17     CAN_F7R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F7R2_FB18_Pos (18U)\r\n#define CAN_F7R2_FB18_Msk (0x1U << CAN_F7R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F7R2_FB18     CAN_F7R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F7R2_FB19_Pos (19U)\r\n#define CAN_F7R2_FB19_Msk (0x1U << CAN_F7R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F7R2_FB19     CAN_F7R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F7R2_FB20_Pos (20U)\r\n#define CAN_F7R2_FB20_Msk (0x1U << CAN_F7R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F7R2_FB20     CAN_F7R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F7R2_FB21_Pos (21U)\r\n#define CAN_F7R2_FB21_Msk (0x1U << CAN_F7R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F7R2_FB21     CAN_F7R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F7R2_FB22_Pos (22U)\r\n#define CAN_F7R2_FB22_Msk (0x1U << CAN_F7R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F7R2_FB22     CAN_F7R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F7R2_FB23_Pos (23U)\r\n#define CAN_F7R2_FB23_Msk (0x1U << CAN_F7R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F7R2_FB23     CAN_F7R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F7R2_FB24_Pos (24U)\r\n#define CAN_F7R2_FB24_Msk (0x1U << CAN_F7R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F7R2_FB24     CAN_F7R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F7R2_FB25_Pos (25U)\r\n#define CAN_F7R2_FB25_Msk (0x1U << CAN_F7R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F7R2_FB25     CAN_F7R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F7R2_FB26_Pos (26U)\r\n#define CAN_F7R2_FB26_Msk (0x1U << CAN_F7R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F7R2_FB26     CAN_F7R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F7R2_FB27_Pos (27U)\r\n#define CAN_F7R2_FB27_Msk (0x1U << CAN_F7R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F7R2_FB27     CAN_F7R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F7R2_FB28_Pos (28U)\r\n#define CAN_F7R2_FB28_Msk (0x1U << CAN_F7R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F7R2_FB28     CAN_F7R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F7R2_FB29_Pos (29U)\r\n#define CAN_F7R2_FB29_Msk (0x1U << CAN_F7R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F7R2_FB29     CAN_F7R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F7R2_FB30_Pos (30U)\r\n#define CAN_F7R2_FB30_Msk (0x1U << CAN_F7R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F7R2_FB30     CAN_F7R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F7R2_FB31_Pos (31U)\r\n#define CAN_F7R2_FB31_Msk (0x1U << CAN_F7R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F7R2_FB31     CAN_F7R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F8R2 register  *******************/\r\n#define CAN_F8R2_FB0_Pos  (0U)\r\n#define CAN_F8R2_FB0_Msk  (0x1U << CAN_F8R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F8R2_FB0      CAN_F8R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F8R2_FB1_Pos  (1U)\r\n#define CAN_F8R2_FB1_Msk  (0x1U << CAN_F8R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F8R2_FB1      CAN_F8R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F8R2_FB2_Pos  (2U)\r\n#define CAN_F8R2_FB2_Msk  (0x1U << CAN_F8R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F8R2_FB2      CAN_F8R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F8R2_FB3_Pos  (3U)\r\n#define CAN_F8R2_FB3_Msk  (0x1U << CAN_F8R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F8R2_FB3      CAN_F8R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F8R2_FB4_Pos  (4U)\r\n#define CAN_F8R2_FB4_Msk  (0x1U << CAN_F8R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F8R2_FB4      CAN_F8R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F8R2_FB5_Pos  (5U)\r\n#define CAN_F8R2_FB5_Msk  (0x1U << CAN_F8R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F8R2_FB5      CAN_F8R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F8R2_FB6_Pos  (6U)\r\n#define CAN_F8R2_FB6_Msk  (0x1U << CAN_F8R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F8R2_FB6      CAN_F8R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F8R2_FB7_Pos  (7U)\r\n#define CAN_F8R2_FB7_Msk  (0x1U << CAN_F8R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F8R2_FB7      CAN_F8R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F8R2_FB8_Pos  (8U)\r\n#define CAN_F8R2_FB8_Msk  (0x1U << CAN_F8R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F8R2_FB8      CAN_F8R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F8R2_FB9_Pos  (9U)\r\n#define CAN_F8R2_FB9_Msk  (0x1U << CAN_F8R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F8R2_FB9      CAN_F8R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F8R2_FB10_Pos (10U)\r\n#define CAN_F8R2_FB10_Msk (0x1U << CAN_F8R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F8R2_FB10     CAN_F8R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F8R2_FB11_Pos (11U)\r\n#define CAN_F8R2_FB11_Msk (0x1U << CAN_F8R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F8R2_FB11     CAN_F8R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F8R2_FB12_Pos (12U)\r\n#define CAN_F8R2_FB12_Msk (0x1U << CAN_F8R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F8R2_FB12     CAN_F8R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F8R2_FB13_Pos (13U)\r\n#define CAN_F8R2_FB13_Msk (0x1U << CAN_F8R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F8R2_FB13     CAN_F8R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F8R2_FB14_Pos (14U)\r\n#define CAN_F8R2_FB14_Msk (0x1U << CAN_F8R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F8R2_FB14     CAN_F8R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F8R2_FB15_Pos (15U)\r\n#define CAN_F8R2_FB15_Msk (0x1U << CAN_F8R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F8R2_FB15     CAN_F8R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F8R2_FB16_Pos (16U)\r\n#define CAN_F8R2_FB16_Msk (0x1U << CAN_F8R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F8R2_FB16     CAN_F8R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F8R2_FB17_Pos (17U)\r\n#define CAN_F8R2_FB17_Msk (0x1U << CAN_F8R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F8R2_FB17     CAN_F8R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F8R2_FB18_Pos (18U)\r\n#define CAN_F8R2_FB18_Msk (0x1U << CAN_F8R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F8R2_FB18     CAN_F8R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F8R2_FB19_Pos (19U)\r\n#define CAN_F8R2_FB19_Msk (0x1U << CAN_F8R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F8R2_FB19     CAN_F8R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F8R2_FB20_Pos (20U)\r\n#define CAN_F8R2_FB20_Msk (0x1U << CAN_F8R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F8R2_FB20     CAN_F8R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F8R2_FB21_Pos (21U)\r\n#define CAN_F8R2_FB21_Msk (0x1U << CAN_F8R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F8R2_FB21     CAN_F8R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F8R2_FB22_Pos (22U)\r\n#define CAN_F8R2_FB22_Msk (0x1U << CAN_F8R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F8R2_FB22     CAN_F8R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F8R2_FB23_Pos (23U)\r\n#define CAN_F8R2_FB23_Msk (0x1U << CAN_F8R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F8R2_FB23     CAN_F8R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F8R2_FB24_Pos (24U)\r\n#define CAN_F8R2_FB24_Msk (0x1U << CAN_F8R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F8R2_FB24     CAN_F8R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F8R2_FB25_Pos (25U)\r\n#define CAN_F8R2_FB25_Msk (0x1U << CAN_F8R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F8R2_FB25     CAN_F8R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F8R2_FB26_Pos (26U)\r\n#define CAN_F8R2_FB26_Msk (0x1U << CAN_F8R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F8R2_FB26     CAN_F8R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F8R2_FB27_Pos (27U)\r\n#define CAN_F8R2_FB27_Msk (0x1U << CAN_F8R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F8R2_FB27     CAN_F8R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F8R2_FB28_Pos (28U)\r\n#define CAN_F8R2_FB28_Msk (0x1U << CAN_F8R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F8R2_FB28     CAN_F8R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F8R2_FB29_Pos (29U)\r\n#define CAN_F8R2_FB29_Msk (0x1U << CAN_F8R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F8R2_FB29     CAN_F8R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F8R2_FB30_Pos (30U)\r\n#define CAN_F8R2_FB30_Msk (0x1U << CAN_F8R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F8R2_FB30     CAN_F8R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F8R2_FB31_Pos (31U)\r\n#define CAN_F8R2_FB31_Msk (0x1U << CAN_F8R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F8R2_FB31     CAN_F8R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F9R2 register  *******************/\r\n#define CAN_F9R2_FB0_Pos  (0U)\r\n#define CAN_F9R2_FB0_Msk  (0x1U << CAN_F9R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F9R2_FB0      CAN_F9R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F9R2_FB1_Pos  (1U)\r\n#define CAN_F9R2_FB1_Msk  (0x1U << CAN_F9R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F9R2_FB1      CAN_F9R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F9R2_FB2_Pos  (2U)\r\n#define CAN_F9R2_FB2_Msk  (0x1U << CAN_F9R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F9R2_FB2      CAN_F9R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F9R2_FB3_Pos  (3U)\r\n#define CAN_F9R2_FB3_Msk  (0x1U << CAN_F9R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F9R2_FB3      CAN_F9R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F9R2_FB4_Pos  (4U)\r\n#define CAN_F9R2_FB4_Msk  (0x1U << CAN_F9R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F9R2_FB4      CAN_F9R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F9R2_FB5_Pos  (5U)\r\n#define CAN_F9R2_FB5_Msk  (0x1U << CAN_F9R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F9R2_FB5      CAN_F9R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F9R2_FB6_Pos  (6U)\r\n#define CAN_F9R2_FB6_Msk  (0x1U << CAN_F9R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F9R2_FB6      CAN_F9R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F9R2_FB7_Pos  (7U)\r\n#define CAN_F9R2_FB7_Msk  (0x1U << CAN_F9R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F9R2_FB7      CAN_F9R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F9R2_FB8_Pos  (8U)\r\n#define CAN_F9R2_FB8_Msk  (0x1U << CAN_F9R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F9R2_FB8      CAN_F9R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F9R2_FB9_Pos  (9U)\r\n#define CAN_F9R2_FB9_Msk  (0x1U << CAN_F9R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F9R2_FB9      CAN_F9R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F9R2_FB10_Pos (10U)\r\n#define CAN_F9R2_FB10_Msk (0x1U << CAN_F9R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F9R2_FB10     CAN_F9R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F9R2_FB11_Pos (11U)\r\n#define CAN_F9R2_FB11_Msk (0x1U << CAN_F9R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F9R2_FB11     CAN_F9R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F9R2_FB12_Pos (12U)\r\n#define CAN_F9R2_FB12_Msk (0x1U << CAN_F9R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F9R2_FB12     CAN_F9R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F9R2_FB13_Pos (13U)\r\n#define CAN_F9R2_FB13_Msk (0x1U << CAN_F9R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F9R2_FB13     CAN_F9R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F9R2_FB14_Pos (14U)\r\n#define CAN_F9R2_FB14_Msk (0x1U << CAN_F9R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F9R2_FB14     CAN_F9R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F9R2_FB15_Pos (15U)\r\n#define CAN_F9R2_FB15_Msk (0x1U << CAN_F9R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F9R2_FB15     CAN_F9R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F9R2_FB16_Pos (16U)\r\n#define CAN_F9R2_FB16_Msk (0x1U << CAN_F9R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F9R2_FB16     CAN_F9R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F9R2_FB17_Pos (17U)\r\n#define CAN_F9R2_FB17_Msk (0x1U << CAN_F9R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F9R2_FB17     CAN_F9R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F9R2_FB18_Pos (18U)\r\n#define CAN_F9R2_FB18_Msk (0x1U << CAN_F9R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F9R2_FB18     CAN_F9R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F9R2_FB19_Pos (19U)\r\n#define CAN_F9R2_FB19_Msk (0x1U << CAN_F9R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F9R2_FB19     CAN_F9R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F9R2_FB20_Pos (20U)\r\n#define CAN_F9R2_FB20_Msk (0x1U << CAN_F9R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F9R2_FB20     CAN_F9R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F9R2_FB21_Pos (21U)\r\n#define CAN_F9R2_FB21_Msk (0x1U << CAN_F9R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F9R2_FB21     CAN_F9R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F9R2_FB22_Pos (22U)\r\n#define CAN_F9R2_FB22_Msk (0x1U << CAN_F9R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F9R2_FB22     CAN_F9R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F9R2_FB23_Pos (23U)\r\n#define CAN_F9R2_FB23_Msk (0x1U << CAN_F9R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F9R2_FB23     CAN_F9R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F9R2_FB24_Pos (24U)\r\n#define CAN_F9R2_FB24_Msk (0x1U << CAN_F9R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F9R2_FB24     CAN_F9R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F9R2_FB25_Pos (25U)\r\n#define CAN_F9R2_FB25_Msk (0x1U << CAN_F9R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F9R2_FB25     CAN_F9R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F9R2_FB26_Pos (26U)\r\n#define CAN_F9R2_FB26_Msk (0x1U << CAN_F9R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F9R2_FB26     CAN_F9R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F9R2_FB27_Pos (27U)\r\n#define CAN_F9R2_FB27_Msk (0x1U << CAN_F9R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F9R2_FB27     CAN_F9R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F9R2_FB28_Pos (28U)\r\n#define CAN_F9R2_FB28_Msk (0x1U << CAN_F9R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F9R2_FB28     CAN_F9R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F9R2_FB29_Pos (29U)\r\n#define CAN_F9R2_FB29_Msk (0x1U << CAN_F9R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F9R2_FB29     CAN_F9R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F9R2_FB30_Pos (30U)\r\n#define CAN_F9R2_FB30_Msk (0x1U << CAN_F9R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F9R2_FB30     CAN_F9R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F9R2_FB31_Pos (31U)\r\n#define CAN_F9R2_FB31_Msk (0x1U << CAN_F9R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F9R2_FB31     CAN_F9R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F10R2 register  ******************/\r\n#define CAN_F10R2_FB0_Pos  (0U)\r\n#define CAN_F10R2_FB0_Msk  (0x1U << CAN_F10R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F10R2_FB0      CAN_F10R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F10R2_FB1_Pos  (1U)\r\n#define CAN_F10R2_FB1_Msk  (0x1U << CAN_F10R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F10R2_FB1      CAN_F10R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F10R2_FB2_Pos  (2U)\r\n#define CAN_F10R2_FB2_Msk  (0x1U << CAN_F10R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F10R2_FB2      CAN_F10R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F10R2_FB3_Pos  (3U)\r\n#define CAN_F10R2_FB3_Msk  (0x1U << CAN_F10R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F10R2_FB3      CAN_F10R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F10R2_FB4_Pos  (4U)\r\n#define CAN_F10R2_FB4_Msk  (0x1U << CAN_F10R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F10R2_FB4      CAN_F10R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F10R2_FB5_Pos  (5U)\r\n#define CAN_F10R2_FB5_Msk  (0x1U << CAN_F10R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F10R2_FB5      CAN_F10R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F10R2_FB6_Pos  (6U)\r\n#define CAN_F10R2_FB6_Msk  (0x1U << CAN_F10R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F10R2_FB6      CAN_F10R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F10R2_FB7_Pos  (7U)\r\n#define CAN_F10R2_FB7_Msk  (0x1U << CAN_F10R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F10R2_FB7      CAN_F10R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F10R2_FB8_Pos  (8U)\r\n#define CAN_F10R2_FB8_Msk  (0x1U << CAN_F10R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F10R2_FB8      CAN_F10R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F10R2_FB9_Pos  (9U)\r\n#define CAN_F10R2_FB9_Msk  (0x1U << CAN_F10R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F10R2_FB9      CAN_F10R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F10R2_FB10_Pos (10U)\r\n#define CAN_F10R2_FB10_Msk (0x1U << CAN_F10R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F10R2_FB10     CAN_F10R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F10R2_FB11_Pos (11U)\r\n#define CAN_F10R2_FB11_Msk (0x1U << CAN_F10R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F10R2_FB11     CAN_F10R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F10R2_FB12_Pos (12U)\r\n#define CAN_F10R2_FB12_Msk (0x1U << CAN_F10R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F10R2_FB12     CAN_F10R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F10R2_FB13_Pos (13U)\r\n#define CAN_F10R2_FB13_Msk (0x1U << CAN_F10R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F10R2_FB13     CAN_F10R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F10R2_FB14_Pos (14U)\r\n#define CAN_F10R2_FB14_Msk (0x1U << CAN_F10R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F10R2_FB14     CAN_F10R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F10R2_FB15_Pos (15U)\r\n#define CAN_F10R2_FB15_Msk (0x1U << CAN_F10R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F10R2_FB15     CAN_F10R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F10R2_FB16_Pos (16U)\r\n#define CAN_F10R2_FB16_Msk (0x1U << CAN_F10R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F10R2_FB16     CAN_F10R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F10R2_FB17_Pos (17U)\r\n#define CAN_F10R2_FB17_Msk (0x1U << CAN_F10R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F10R2_FB17     CAN_F10R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F10R2_FB18_Pos (18U)\r\n#define CAN_F10R2_FB18_Msk (0x1U << CAN_F10R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F10R2_FB18     CAN_F10R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F10R2_FB19_Pos (19U)\r\n#define CAN_F10R2_FB19_Msk (0x1U << CAN_F10R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F10R2_FB19     CAN_F10R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F10R2_FB20_Pos (20U)\r\n#define CAN_F10R2_FB20_Msk (0x1U << CAN_F10R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F10R2_FB20     CAN_F10R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F10R2_FB21_Pos (21U)\r\n#define CAN_F10R2_FB21_Msk (0x1U << CAN_F10R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F10R2_FB21     CAN_F10R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F10R2_FB22_Pos (22U)\r\n#define CAN_F10R2_FB22_Msk (0x1U << CAN_F10R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F10R2_FB22     CAN_F10R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F10R2_FB23_Pos (23U)\r\n#define CAN_F10R2_FB23_Msk (0x1U << CAN_F10R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F10R2_FB23     CAN_F10R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F10R2_FB24_Pos (24U)\r\n#define CAN_F10R2_FB24_Msk (0x1U << CAN_F10R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F10R2_FB24     CAN_F10R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F10R2_FB25_Pos (25U)\r\n#define CAN_F10R2_FB25_Msk (0x1U << CAN_F10R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F10R2_FB25     CAN_F10R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F10R2_FB26_Pos (26U)\r\n#define CAN_F10R2_FB26_Msk (0x1U << CAN_F10R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F10R2_FB26     CAN_F10R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F10R2_FB27_Pos (27U)\r\n#define CAN_F10R2_FB27_Msk (0x1U << CAN_F10R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F10R2_FB27     CAN_F10R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F10R2_FB28_Pos (28U)\r\n#define CAN_F10R2_FB28_Msk (0x1U << CAN_F10R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F10R2_FB28     CAN_F10R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F10R2_FB29_Pos (29U)\r\n#define CAN_F10R2_FB29_Msk (0x1U << CAN_F10R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F10R2_FB29     CAN_F10R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F10R2_FB30_Pos (30U)\r\n#define CAN_F10R2_FB30_Msk (0x1U << CAN_F10R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F10R2_FB30     CAN_F10R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F10R2_FB31_Pos (31U)\r\n#define CAN_F10R2_FB31_Msk (0x1U << CAN_F10R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F10R2_FB31     CAN_F10R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F11R2 register  ******************/\r\n#define CAN_F11R2_FB0_Pos  (0U)\r\n#define CAN_F11R2_FB0_Msk  (0x1U << CAN_F11R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F11R2_FB0      CAN_F11R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F11R2_FB1_Pos  (1U)\r\n#define CAN_F11R2_FB1_Msk  (0x1U << CAN_F11R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F11R2_FB1      CAN_F11R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F11R2_FB2_Pos  (2U)\r\n#define CAN_F11R2_FB2_Msk  (0x1U << CAN_F11R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F11R2_FB2      CAN_F11R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F11R2_FB3_Pos  (3U)\r\n#define CAN_F11R2_FB3_Msk  (0x1U << CAN_F11R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F11R2_FB3      CAN_F11R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F11R2_FB4_Pos  (4U)\r\n#define CAN_F11R2_FB4_Msk  (0x1U << CAN_F11R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F11R2_FB4      CAN_F11R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F11R2_FB5_Pos  (5U)\r\n#define CAN_F11R2_FB5_Msk  (0x1U << CAN_F11R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F11R2_FB5      CAN_F11R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F11R2_FB6_Pos  (6U)\r\n#define CAN_F11R2_FB6_Msk  (0x1U << CAN_F11R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F11R2_FB6      CAN_F11R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F11R2_FB7_Pos  (7U)\r\n#define CAN_F11R2_FB7_Msk  (0x1U << CAN_F11R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F11R2_FB7      CAN_F11R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F11R2_FB8_Pos  (8U)\r\n#define CAN_F11R2_FB8_Msk  (0x1U << CAN_F11R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F11R2_FB8      CAN_F11R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F11R2_FB9_Pos  (9U)\r\n#define CAN_F11R2_FB9_Msk  (0x1U << CAN_F11R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F11R2_FB9      CAN_F11R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F11R2_FB10_Pos (10U)\r\n#define CAN_F11R2_FB10_Msk (0x1U << CAN_F11R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F11R2_FB10     CAN_F11R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F11R2_FB11_Pos (11U)\r\n#define CAN_F11R2_FB11_Msk (0x1U << CAN_F11R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F11R2_FB11     CAN_F11R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F11R2_FB12_Pos (12U)\r\n#define CAN_F11R2_FB12_Msk (0x1U << CAN_F11R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F11R2_FB12     CAN_F11R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F11R2_FB13_Pos (13U)\r\n#define CAN_F11R2_FB13_Msk (0x1U << CAN_F11R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F11R2_FB13     CAN_F11R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F11R2_FB14_Pos (14U)\r\n#define CAN_F11R2_FB14_Msk (0x1U << CAN_F11R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F11R2_FB14     CAN_F11R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F11R2_FB15_Pos (15U)\r\n#define CAN_F11R2_FB15_Msk (0x1U << CAN_F11R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F11R2_FB15     CAN_F11R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F11R2_FB16_Pos (16U)\r\n#define CAN_F11R2_FB16_Msk (0x1U << CAN_F11R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F11R2_FB16     CAN_F11R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F11R2_FB17_Pos (17U)\r\n#define CAN_F11R2_FB17_Msk (0x1U << CAN_F11R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F11R2_FB17     CAN_F11R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F11R2_FB18_Pos (18U)\r\n#define CAN_F11R2_FB18_Msk (0x1U << CAN_F11R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F11R2_FB18     CAN_F11R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F11R2_FB19_Pos (19U)\r\n#define CAN_F11R2_FB19_Msk (0x1U << CAN_F11R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F11R2_FB19     CAN_F11R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F11R2_FB20_Pos (20U)\r\n#define CAN_F11R2_FB20_Msk (0x1U << CAN_F11R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F11R2_FB20     CAN_F11R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F11R2_FB21_Pos (21U)\r\n#define CAN_F11R2_FB21_Msk (0x1U << CAN_F11R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F11R2_FB21     CAN_F11R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F11R2_FB22_Pos (22U)\r\n#define CAN_F11R2_FB22_Msk (0x1U << CAN_F11R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F11R2_FB22     CAN_F11R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F11R2_FB23_Pos (23U)\r\n#define CAN_F11R2_FB23_Msk (0x1U << CAN_F11R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F11R2_FB23     CAN_F11R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F11R2_FB24_Pos (24U)\r\n#define CAN_F11R2_FB24_Msk (0x1U << CAN_F11R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F11R2_FB24     CAN_F11R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F11R2_FB25_Pos (25U)\r\n#define CAN_F11R2_FB25_Msk (0x1U << CAN_F11R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F11R2_FB25     CAN_F11R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F11R2_FB26_Pos (26U)\r\n#define CAN_F11R2_FB26_Msk (0x1U << CAN_F11R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F11R2_FB26     CAN_F11R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F11R2_FB27_Pos (27U)\r\n#define CAN_F11R2_FB27_Msk (0x1U << CAN_F11R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F11R2_FB27     CAN_F11R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F11R2_FB28_Pos (28U)\r\n#define CAN_F11R2_FB28_Msk (0x1U << CAN_F11R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F11R2_FB28     CAN_F11R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F11R2_FB29_Pos (29U)\r\n#define CAN_F11R2_FB29_Msk (0x1U << CAN_F11R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F11R2_FB29     CAN_F11R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F11R2_FB30_Pos (30U)\r\n#define CAN_F11R2_FB30_Msk (0x1U << CAN_F11R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F11R2_FB30     CAN_F11R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F11R2_FB31_Pos (31U)\r\n#define CAN_F11R2_FB31_Msk (0x1U << CAN_F11R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F11R2_FB31     CAN_F11R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F12R2 register  ******************/\r\n#define CAN_F12R2_FB0_Pos  (0U)\r\n#define CAN_F12R2_FB0_Msk  (0x1U << CAN_F12R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F12R2_FB0      CAN_F12R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F12R2_FB1_Pos  (1U)\r\n#define CAN_F12R2_FB1_Msk  (0x1U << CAN_F12R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F12R2_FB1      CAN_F12R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F12R2_FB2_Pos  (2U)\r\n#define CAN_F12R2_FB2_Msk  (0x1U << CAN_F12R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F12R2_FB2      CAN_F12R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F12R2_FB3_Pos  (3U)\r\n#define CAN_F12R2_FB3_Msk  (0x1U << CAN_F12R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F12R2_FB3      CAN_F12R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F12R2_FB4_Pos  (4U)\r\n#define CAN_F12R2_FB4_Msk  (0x1U << CAN_F12R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F12R2_FB4      CAN_F12R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F12R2_FB5_Pos  (5U)\r\n#define CAN_F12R2_FB5_Msk  (0x1U << CAN_F12R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F12R2_FB5      CAN_F12R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F12R2_FB6_Pos  (6U)\r\n#define CAN_F12R2_FB6_Msk  (0x1U << CAN_F12R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F12R2_FB6      CAN_F12R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F12R2_FB7_Pos  (7U)\r\n#define CAN_F12R2_FB7_Msk  (0x1U << CAN_F12R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F12R2_FB7      CAN_F12R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F12R2_FB8_Pos  (8U)\r\n#define CAN_F12R2_FB8_Msk  (0x1U << CAN_F12R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F12R2_FB8      CAN_F12R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F12R2_FB9_Pos  (9U)\r\n#define CAN_F12R2_FB9_Msk  (0x1U << CAN_F12R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F12R2_FB9      CAN_F12R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F12R2_FB10_Pos (10U)\r\n#define CAN_F12R2_FB10_Msk (0x1U << CAN_F12R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F12R2_FB10     CAN_F12R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F12R2_FB11_Pos (11U)\r\n#define CAN_F12R2_FB11_Msk (0x1U << CAN_F12R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F12R2_FB11     CAN_F12R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F12R2_FB12_Pos (12U)\r\n#define CAN_F12R2_FB12_Msk (0x1U << CAN_F12R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F12R2_FB12     CAN_F12R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F12R2_FB13_Pos (13U)\r\n#define CAN_F12R2_FB13_Msk (0x1U << CAN_F12R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F12R2_FB13     CAN_F12R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F12R2_FB14_Pos (14U)\r\n#define CAN_F12R2_FB14_Msk (0x1U << CAN_F12R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F12R2_FB14     CAN_F12R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F12R2_FB15_Pos (15U)\r\n#define CAN_F12R2_FB15_Msk (0x1U << CAN_F12R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F12R2_FB15     CAN_F12R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F12R2_FB16_Pos (16U)\r\n#define CAN_F12R2_FB16_Msk (0x1U << CAN_F12R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F12R2_FB16     CAN_F12R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F12R2_FB17_Pos (17U)\r\n#define CAN_F12R2_FB17_Msk (0x1U << CAN_F12R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F12R2_FB17     CAN_F12R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F12R2_FB18_Pos (18U)\r\n#define CAN_F12R2_FB18_Msk (0x1U << CAN_F12R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F12R2_FB18     CAN_F12R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F12R2_FB19_Pos (19U)\r\n#define CAN_F12R2_FB19_Msk (0x1U << CAN_F12R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F12R2_FB19     CAN_F12R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F12R2_FB20_Pos (20U)\r\n#define CAN_F12R2_FB20_Msk (0x1U << CAN_F12R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F12R2_FB20     CAN_F12R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F12R2_FB21_Pos (21U)\r\n#define CAN_F12R2_FB21_Msk (0x1U << CAN_F12R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F12R2_FB21     CAN_F12R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F12R2_FB22_Pos (22U)\r\n#define CAN_F12R2_FB22_Msk (0x1U << CAN_F12R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F12R2_FB22     CAN_F12R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F12R2_FB23_Pos (23U)\r\n#define CAN_F12R2_FB23_Msk (0x1U << CAN_F12R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F12R2_FB23     CAN_F12R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F12R2_FB24_Pos (24U)\r\n#define CAN_F12R2_FB24_Msk (0x1U << CAN_F12R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F12R2_FB24     CAN_F12R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F12R2_FB25_Pos (25U)\r\n#define CAN_F12R2_FB25_Msk (0x1U << CAN_F12R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F12R2_FB25     CAN_F12R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F12R2_FB26_Pos (26U)\r\n#define CAN_F12R2_FB26_Msk (0x1U << CAN_F12R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F12R2_FB26     CAN_F12R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F12R2_FB27_Pos (27U)\r\n#define CAN_F12R2_FB27_Msk (0x1U << CAN_F12R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F12R2_FB27     CAN_F12R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F12R2_FB28_Pos (28U)\r\n#define CAN_F12R2_FB28_Msk (0x1U << CAN_F12R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F12R2_FB28     CAN_F12R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F12R2_FB29_Pos (29U)\r\n#define CAN_F12R2_FB29_Msk (0x1U << CAN_F12R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F12R2_FB29     CAN_F12R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F12R2_FB30_Pos (30U)\r\n#define CAN_F12R2_FB30_Msk (0x1U << CAN_F12R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F12R2_FB30     CAN_F12R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F12R2_FB31_Pos (31U)\r\n#define CAN_F12R2_FB31_Msk (0x1U << CAN_F12R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F12R2_FB31     CAN_F12R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/*******************  Bit definition for CAN_F13R2 register  ******************/\r\n#define CAN_F13R2_FB0_Pos  (0U)\r\n#define CAN_F13R2_FB0_Msk  (0x1U << CAN_F13R2_FB0_Pos) /*!< 0x00000001 */\r\n#define CAN_F13R2_FB0      CAN_F13R2_FB0_Msk           /*!< Filter bit 0 */\r\n#define CAN_F13R2_FB1_Pos  (1U)\r\n#define CAN_F13R2_FB1_Msk  (0x1U << CAN_F13R2_FB1_Pos) /*!< 0x00000002 */\r\n#define CAN_F13R2_FB1      CAN_F13R2_FB1_Msk           /*!< Filter bit 1 */\r\n#define CAN_F13R2_FB2_Pos  (2U)\r\n#define CAN_F13R2_FB2_Msk  (0x1U << CAN_F13R2_FB2_Pos) /*!< 0x00000004 */\r\n#define CAN_F13R2_FB2      CAN_F13R2_FB2_Msk           /*!< Filter bit 2 */\r\n#define CAN_F13R2_FB3_Pos  (3U)\r\n#define CAN_F13R2_FB3_Msk  (0x1U << CAN_F13R2_FB3_Pos) /*!< 0x00000008 */\r\n#define CAN_F13R2_FB3      CAN_F13R2_FB3_Msk           /*!< Filter bit 3 */\r\n#define CAN_F13R2_FB4_Pos  (4U)\r\n#define CAN_F13R2_FB4_Msk  (0x1U << CAN_F13R2_FB4_Pos) /*!< 0x00000010 */\r\n#define CAN_F13R2_FB4      CAN_F13R2_FB4_Msk           /*!< Filter bit 4 */\r\n#define CAN_F13R2_FB5_Pos  (5U)\r\n#define CAN_F13R2_FB5_Msk  (0x1U << CAN_F13R2_FB5_Pos) /*!< 0x00000020 */\r\n#define CAN_F13R2_FB5      CAN_F13R2_FB5_Msk           /*!< Filter bit 5 */\r\n#define CAN_F13R2_FB6_Pos  (6U)\r\n#define CAN_F13R2_FB6_Msk  (0x1U << CAN_F13R2_FB6_Pos) /*!< 0x00000040 */\r\n#define CAN_F13R2_FB6      CAN_F13R2_FB6_Msk           /*!< Filter bit 6 */\r\n#define CAN_F13R2_FB7_Pos  (7U)\r\n#define CAN_F13R2_FB7_Msk  (0x1U << CAN_F13R2_FB7_Pos) /*!< 0x00000080 */\r\n#define CAN_F13R2_FB7      CAN_F13R2_FB7_Msk           /*!< Filter bit 7 */\r\n#define CAN_F13R2_FB8_Pos  (8U)\r\n#define CAN_F13R2_FB8_Msk  (0x1U << CAN_F13R2_FB8_Pos) /*!< 0x00000100 */\r\n#define CAN_F13R2_FB8      CAN_F13R2_FB8_Msk           /*!< Filter bit 8 */\r\n#define CAN_F13R2_FB9_Pos  (9U)\r\n#define CAN_F13R2_FB9_Msk  (0x1U << CAN_F13R2_FB9_Pos) /*!< 0x00000200 */\r\n#define CAN_F13R2_FB9      CAN_F13R2_FB9_Msk           /*!< Filter bit 9 */\r\n#define CAN_F13R2_FB10_Pos (10U)\r\n#define CAN_F13R2_FB10_Msk (0x1U << CAN_F13R2_FB10_Pos) /*!< 0x00000400 */\r\n#define CAN_F13R2_FB10     CAN_F13R2_FB10_Msk           /*!< Filter bit 10 */\r\n#define CAN_F13R2_FB11_Pos (11U)\r\n#define CAN_F13R2_FB11_Msk (0x1U << CAN_F13R2_FB11_Pos) /*!< 0x00000800 */\r\n#define CAN_F13R2_FB11     CAN_F13R2_FB11_Msk           /*!< Filter bit 11 */\r\n#define CAN_F13R2_FB12_Pos (12U)\r\n#define CAN_F13R2_FB12_Msk (0x1U << CAN_F13R2_FB12_Pos) /*!< 0x00001000 */\r\n#define CAN_F13R2_FB12     CAN_F13R2_FB12_Msk           /*!< Filter bit 12 */\r\n#define CAN_F13R2_FB13_Pos (13U)\r\n#define CAN_F13R2_FB13_Msk (0x1U << CAN_F13R2_FB13_Pos) /*!< 0x00002000 */\r\n#define CAN_F13R2_FB13     CAN_F13R2_FB13_Msk           /*!< Filter bit 13 */\r\n#define CAN_F13R2_FB14_Pos (14U)\r\n#define CAN_F13R2_FB14_Msk (0x1U << CAN_F13R2_FB14_Pos) /*!< 0x00004000 */\r\n#define CAN_F13R2_FB14     CAN_F13R2_FB14_Msk           /*!< Filter bit 14 */\r\n#define CAN_F13R2_FB15_Pos (15U)\r\n#define CAN_F13R2_FB15_Msk (0x1U << CAN_F13R2_FB15_Pos) /*!< 0x00008000 */\r\n#define CAN_F13R2_FB15     CAN_F13R2_FB15_Msk           /*!< Filter bit 15 */\r\n#define CAN_F13R2_FB16_Pos (16U)\r\n#define CAN_F13R2_FB16_Msk (0x1U << CAN_F13R2_FB16_Pos) /*!< 0x00010000 */\r\n#define CAN_F13R2_FB16     CAN_F13R2_FB16_Msk           /*!< Filter bit 16 */\r\n#define CAN_F13R2_FB17_Pos (17U)\r\n#define CAN_F13R2_FB17_Msk (0x1U << CAN_F13R2_FB17_Pos) /*!< 0x00020000 */\r\n#define CAN_F13R2_FB17     CAN_F13R2_FB17_Msk           /*!< Filter bit 17 */\r\n#define CAN_F13R2_FB18_Pos (18U)\r\n#define CAN_F13R2_FB18_Msk (0x1U << CAN_F13R2_FB18_Pos) /*!< 0x00040000 */\r\n#define CAN_F13R2_FB18     CAN_F13R2_FB18_Msk           /*!< Filter bit 18 */\r\n#define CAN_F13R2_FB19_Pos (19U)\r\n#define CAN_F13R2_FB19_Msk (0x1U << CAN_F13R2_FB19_Pos) /*!< 0x00080000 */\r\n#define CAN_F13R2_FB19     CAN_F13R2_FB19_Msk           /*!< Filter bit 19 */\r\n#define CAN_F13R2_FB20_Pos (20U)\r\n#define CAN_F13R2_FB20_Msk (0x1U << CAN_F13R2_FB20_Pos) /*!< 0x00100000 */\r\n#define CAN_F13R2_FB20     CAN_F13R2_FB20_Msk           /*!< Filter bit 20 */\r\n#define CAN_F13R2_FB21_Pos (21U)\r\n#define CAN_F13R2_FB21_Msk (0x1U << CAN_F13R2_FB21_Pos) /*!< 0x00200000 */\r\n#define CAN_F13R2_FB21     CAN_F13R2_FB21_Msk           /*!< Filter bit 21 */\r\n#define CAN_F13R2_FB22_Pos (22U)\r\n#define CAN_F13R2_FB22_Msk (0x1U << CAN_F13R2_FB22_Pos) /*!< 0x00400000 */\r\n#define CAN_F13R2_FB22     CAN_F13R2_FB22_Msk           /*!< Filter bit 22 */\r\n#define CAN_F13R2_FB23_Pos (23U)\r\n#define CAN_F13R2_FB23_Msk (0x1U << CAN_F13R2_FB23_Pos) /*!< 0x00800000 */\r\n#define CAN_F13R2_FB23     CAN_F13R2_FB23_Msk           /*!< Filter bit 23 */\r\n#define CAN_F13R2_FB24_Pos (24U)\r\n#define CAN_F13R2_FB24_Msk (0x1U << CAN_F13R2_FB24_Pos) /*!< 0x01000000 */\r\n#define CAN_F13R2_FB24     CAN_F13R2_FB24_Msk           /*!< Filter bit 24 */\r\n#define CAN_F13R2_FB25_Pos (25U)\r\n#define CAN_F13R2_FB25_Msk (0x1U << CAN_F13R2_FB25_Pos) /*!< 0x02000000 */\r\n#define CAN_F13R2_FB25     CAN_F13R2_FB25_Msk           /*!< Filter bit 25 */\r\n#define CAN_F13R2_FB26_Pos (26U)\r\n#define CAN_F13R2_FB26_Msk (0x1U << CAN_F13R2_FB26_Pos) /*!< 0x04000000 */\r\n#define CAN_F13R2_FB26     CAN_F13R2_FB26_Msk           /*!< Filter bit 26 */\r\n#define CAN_F13R2_FB27_Pos (27U)\r\n#define CAN_F13R2_FB27_Msk (0x1U << CAN_F13R2_FB27_Pos) /*!< 0x08000000 */\r\n#define CAN_F13R2_FB27     CAN_F13R2_FB27_Msk           /*!< Filter bit 27 */\r\n#define CAN_F13R2_FB28_Pos (28U)\r\n#define CAN_F13R2_FB28_Msk (0x1U << CAN_F13R2_FB28_Pos) /*!< 0x10000000 */\r\n#define CAN_F13R2_FB28     CAN_F13R2_FB28_Msk           /*!< Filter bit 28 */\r\n#define CAN_F13R2_FB29_Pos (29U)\r\n#define CAN_F13R2_FB29_Msk (0x1U << CAN_F13R2_FB29_Pos) /*!< 0x20000000 */\r\n#define CAN_F13R2_FB29     CAN_F13R2_FB29_Msk           /*!< Filter bit 29 */\r\n#define CAN_F13R2_FB30_Pos (30U)\r\n#define CAN_F13R2_FB30_Msk (0x1U << CAN_F13R2_FB30_Pos) /*!< 0x40000000 */\r\n#define CAN_F13R2_FB30     CAN_F13R2_FB30_Msk           /*!< Filter bit 30 */\r\n#define CAN_F13R2_FB31_Pos (31U)\r\n#define CAN_F13R2_FB31_Msk (0x1U << CAN_F13R2_FB31_Pos) /*!< 0x80000000 */\r\n#define CAN_F13R2_FB31     CAN_F13R2_FB31_Msk           /*!< Filter bit 31 */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                        Serial Peripheral Interface                         */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for SPI_CR1 register  ********************/\r\n#define SPI_CR1_CPHA_Pos (0U)\r\n#define SPI_CR1_CPHA_Msk (0x1U << SPI_CR1_CPHA_Pos) /*!< 0x00000001 */\r\n#define SPI_CR1_CPHA     SPI_CR1_CPHA_Msk           /*!< Clock Phase */\r\n#define SPI_CR1_CPOL_Pos (1U)\r\n#define SPI_CR1_CPOL_Msk (0x1U << SPI_CR1_CPOL_Pos) /*!< 0x00000002 */\r\n#define SPI_CR1_CPOL     SPI_CR1_CPOL_Msk           /*!< Clock Polarity */\r\n#define SPI_CR1_MSTR_Pos (2U)\r\n#define SPI_CR1_MSTR_Msk (0x1U << SPI_CR1_MSTR_Pos) /*!< 0x00000004 */\r\n#define SPI_CR1_MSTR     SPI_CR1_MSTR_Msk           /*!< Master Selection */\r\n\r\n#define SPI_CR1_BR_Pos (3U)\r\n#define SPI_CR1_BR_Msk (0x7U << SPI_CR1_BR_Pos) /*!< 0x00000038 */\r\n#define SPI_CR1_BR     SPI_CR1_BR_Msk           /*!< BR[2:0] bits (Baud Rate Control) */\r\n#define SPI_CR1_BR_0   (0x1U << SPI_CR1_BR_Pos) /*!< 0x00000008 */\r\n#define SPI_CR1_BR_1   (0x2U << SPI_CR1_BR_Pos) /*!< 0x00000010 */\r\n#define SPI_CR1_BR_2   (0x4U << SPI_CR1_BR_Pos) /*!< 0x00000020 */\r\n\r\n#define SPI_CR1_SPE_Pos      (6U)\r\n#define SPI_CR1_SPE_Msk      (0x1U << SPI_CR1_SPE_Pos) /*!< 0x00000040 */\r\n#define SPI_CR1_SPE          SPI_CR1_SPE_Msk           /*!< SPI Enable */\r\n#define SPI_CR1_LSBFIRST_Pos (7U)\r\n#define SPI_CR1_LSBFIRST_Msk (0x1U << SPI_CR1_LSBFIRST_Pos) /*!< 0x00000080 */\r\n#define SPI_CR1_LSBFIRST     SPI_CR1_LSBFIRST_Msk           /*!< Frame Format */\r\n#define SPI_CR1_SSI_Pos      (8U)\r\n#define SPI_CR1_SSI_Msk      (0x1U << SPI_CR1_SSI_Pos) /*!< 0x00000100 */\r\n#define SPI_CR1_SSI          SPI_CR1_SSI_Msk           /*!< Internal slave select */\r\n#define SPI_CR1_SSM_Pos      (9U)\r\n#define SPI_CR1_SSM_Msk      (0x1U << SPI_CR1_SSM_Pos) /*!< 0x00000200 */\r\n#define SPI_CR1_SSM          SPI_CR1_SSM_Msk           /*!< Software slave management */\r\n#define SPI_CR1_RXONLY_Pos   (10U)\r\n#define SPI_CR1_RXONLY_Msk   (0x1U << SPI_CR1_RXONLY_Pos) /*!< 0x00000400 */\r\n#define SPI_CR1_RXONLY       SPI_CR1_RXONLY_Msk           /*!< Receive only */\r\n#define SPI_CR1_DFF_Pos      (11U)\r\n#define SPI_CR1_DFF_Msk      (0x1U << SPI_CR1_DFF_Pos) /*!< 0x00000800 */\r\n#define SPI_CR1_DFF          SPI_CR1_DFF_Msk           /*!< Data Frame Format */\r\n#define SPI_CR1_CRCNEXT_Pos  (12U)\r\n#define SPI_CR1_CRCNEXT_Msk  (0x1U << SPI_CR1_CRCNEXT_Pos) /*!< 0x00001000 */\r\n#define SPI_CR1_CRCNEXT      SPI_CR1_CRCNEXT_Msk           /*!< Transmit CRC next */\r\n#define SPI_CR1_CRCEN_Pos    (13U)\r\n#define SPI_CR1_CRCEN_Msk    (0x1U << SPI_CR1_CRCEN_Pos) /*!< 0x00002000 */\r\n#define SPI_CR1_CRCEN        SPI_CR1_CRCEN_Msk           /*!< Hardware CRC calculation enable */\r\n#define SPI_CR1_BIDIOE_Pos   (14U)\r\n#define SPI_CR1_BIDIOE_Msk   (0x1U << SPI_CR1_BIDIOE_Pos) /*!< 0x00004000 */\r\n#define SPI_CR1_BIDIOE       SPI_CR1_BIDIOE_Msk           /*!< Output enable in bidirectional mode */\r\n#define SPI_CR1_BIDIMODE_Pos (15U)\r\n#define SPI_CR1_BIDIMODE_Msk (0x1U << SPI_CR1_BIDIMODE_Pos) /*!< 0x00008000 */\r\n#define SPI_CR1_BIDIMODE     SPI_CR1_BIDIMODE_Msk           /*!< Bidirectional data mode enable */\r\n\r\n/*******************  Bit definition for SPI_CR2 register  ********************/\r\n#define SPI_CR2_RXDMAEN_Pos (0U)\r\n#define SPI_CR2_RXDMAEN_Msk (0x1U << SPI_CR2_RXDMAEN_Pos) /*!< 0x00000001 */\r\n#define SPI_CR2_RXDMAEN     SPI_CR2_RXDMAEN_Msk           /*!< Rx Buffer DMA Enable */\r\n#define SPI_CR2_TXDMAEN_Pos (1U)\r\n#define SPI_CR2_TXDMAEN_Msk (0x1U << SPI_CR2_TXDMAEN_Pos) /*!< 0x00000002 */\r\n#define SPI_CR2_TXDMAEN     SPI_CR2_TXDMAEN_Msk           /*!< Tx Buffer DMA Enable */\r\n#define SPI_CR2_SSOE_Pos    (2U)\r\n#define SPI_CR2_SSOE_Msk    (0x1U << SPI_CR2_SSOE_Pos) /*!< 0x00000004 */\r\n#define SPI_CR2_SSOE        SPI_CR2_SSOE_Msk           /*!< SS Output Enable */\r\n#define SPI_CR2_ERRIE_Pos   (5U)\r\n#define SPI_CR2_ERRIE_Msk   (0x1U << SPI_CR2_ERRIE_Pos) /*!< 0x00000020 */\r\n#define SPI_CR2_ERRIE       SPI_CR2_ERRIE_Msk           /*!< Error Interrupt Enable */\r\n#define SPI_CR2_RXNEIE_Pos  (6U)\r\n#define SPI_CR2_RXNEIE_Msk  (0x1U << SPI_CR2_RXNEIE_Pos) /*!< 0x00000040 */\r\n#define SPI_CR2_RXNEIE      SPI_CR2_RXNEIE_Msk           /*!< RX buffer Not Empty Interrupt Enable */\r\n#define SPI_CR2_TXEIE_Pos   (7U)\r\n#define SPI_CR2_TXEIE_Msk   (0x1U << SPI_CR2_TXEIE_Pos) /*!< 0x00000080 */\r\n#define SPI_CR2_TXEIE       SPI_CR2_TXEIE_Msk           /*!< Tx buffer Empty Interrupt Enable */\r\n\r\n/********************  Bit definition for SPI_SR register  ********************/\r\n#define SPI_SR_RXNE_Pos   (0U)\r\n#define SPI_SR_RXNE_Msk   (0x1U << SPI_SR_RXNE_Pos) /*!< 0x00000001 */\r\n#define SPI_SR_RXNE       SPI_SR_RXNE_Msk           /*!< Receive buffer Not Empty */\r\n#define SPI_SR_TXE_Pos    (1U)\r\n#define SPI_SR_TXE_Msk    (0x1U << SPI_SR_TXE_Pos) /*!< 0x00000002 */\r\n#define SPI_SR_TXE        SPI_SR_TXE_Msk           /*!< Transmit buffer Empty */\r\n#define SPI_SR_CHSIDE_Pos (2U)\r\n#define SPI_SR_CHSIDE_Msk (0x1U << SPI_SR_CHSIDE_Pos) /*!< 0x00000004 */\r\n#define SPI_SR_CHSIDE     SPI_SR_CHSIDE_Msk           /*!< Channel side */\r\n#define SPI_SR_UDR_Pos    (3U)\r\n#define SPI_SR_UDR_Msk    (0x1U << SPI_SR_UDR_Pos) /*!< 0x00000008 */\r\n#define SPI_SR_UDR        SPI_SR_UDR_Msk           /*!< Underrun flag */\r\n#define SPI_SR_CRCERR_Pos (4U)\r\n#define SPI_SR_CRCERR_Msk (0x1U << SPI_SR_CRCERR_Pos) /*!< 0x00000010 */\r\n#define SPI_SR_CRCERR     SPI_SR_CRCERR_Msk           /*!< CRC Error flag */\r\n#define SPI_SR_MODF_Pos   (5U)\r\n#define SPI_SR_MODF_Msk   (0x1U << SPI_SR_MODF_Pos) /*!< 0x00000020 */\r\n#define SPI_SR_MODF       SPI_SR_MODF_Msk           /*!< Mode fault */\r\n#define SPI_SR_OVR_Pos    (6U)\r\n#define SPI_SR_OVR_Msk    (0x1U << SPI_SR_OVR_Pos) /*!< 0x00000040 */\r\n#define SPI_SR_OVR        SPI_SR_OVR_Msk           /*!< Overrun flag */\r\n#define SPI_SR_BSY_Pos    (7U)\r\n#define SPI_SR_BSY_Msk    (0x1U << SPI_SR_BSY_Pos) /*!< 0x00000080 */\r\n#define SPI_SR_BSY        SPI_SR_BSY_Msk           /*!< Busy flag */\r\n\r\n/********************  Bit definition for SPI_DR register  ********************/\r\n#define SPI_DR_DR_Pos (0U)\r\n#define SPI_DR_DR_Msk (0xFFFFU << SPI_DR_DR_Pos) /*!< 0x0000FFFF */\r\n#define SPI_DR_DR     SPI_DR_DR_Msk              /*!< Data Register */\r\n\r\n/*******************  Bit definition for SPI_CRCPR register  ******************/\r\n#define SPI_CRCPR_CRCPOLY_Pos (0U)\r\n#define SPI_CRCPR_CRCPOLY_Msk (0xFFFFU << SPI_CRCPR_CRCPOLY_Pos) /*!< 0x0000FFFF */\r\n#define SPI_CRCPR_CRCPOLY     SPI_CRCPR_CRCPOLY_Msk              /*!< CRC polynomial register */\r\n\r\n/******************  Bit definition for SPI_RXCRCR register  ******************/\r\n#define SPI_RXCRCR_RXCRC_Pos (0U)\r\n#define SPI_RXCRCR_RXCRC_Msk (0xFFFFU << SPI_RXCRCR_RXCRC_Pos) /*!< 0x0000FFFF */\r\n#define SPI_RXCRCR_RXCRC     SPI_RXCRCR_RXCRC_Msk              /*!< Rx CRC Register */\r\n\r\n/******************  Bit definition for SPI_TXCRCR register  ******************/\r\n#define SPI_TXCRCR_TXCRC_Pos (0U)\r\n#define SPI_TXCRCR_TXCRC_Msk (0xFFFFU << SPI_TXCRCR_TXCRC_Pos) /*!< 0x0000FFFF */\r\n#define SPI_TXCRCR_TXCRC     SPI_TXCRCR_TXCRC_Msk              /*!< Tx CRC Register */\r\n\r\n/******************  Bit definition for SPI_I2SCFGR register  *****************/\r\n#define SPI_I2SCFGR_I2SMOD_Pos (11U)\r\n#define SPI_I2SCFGR_I2SMOD_Msk (0x1U << SPI_I2SCFGR_I2SMOD_Pos) /*!< 0x00000800 */\r\n#define SPI_I2SCFGR_I2SMOD     SPI_I2SCFGR_I2SMOD_Msk           /*!< I2S mode selection */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                      Inter-integrated Circuit Interface                    */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for I2C_CR1 register  ********************/\r\n#define I2C_CR1_PE_Pos        (0U)\r\n#define I2C_CR1_PE_Msk        (0x1U << I2C_CR1_PE_Pos) /*!< 0x00000001 */\r\n#define I2C_CR1_PE            I2C_CR1_PE_Msk           /*!< Peripheral Enable */\r\n#define I2C_CR1_SMBUS_Pos     (1U)\r\n#define I2C_CR1_SMBUS_Msk     (0x1U << I2C_CR1_SMBUS_Pos) /*!< 0x00000002 */\r\n#define I2C_CR1_SMBUS         I2C_CR1_SMBUS_Msk           /*!< SMBus Mode */\r\n#define I2C_CR1_SMBTYPE_Pos   (3U)\r\n#define I2C_CR1_SMBTYPE_Msk   (0x1U << I2C_CR1_SMBTYPE_Pos) /*!< 0x00000008 */\r\n#define I2C_CR1_SMBTYPE       I2C_CR1_SMBTYPE_Msk           /*!< SMBus Type */\r\n#define I2C_CR1_ENARP_Pos     (4U)\r\n#define I2C_CR1_ENARP_Msk     (0x1U << I2C_CR1_ENARP_Pos) /*!< 0x00000010 */\r\n#define I2C_CR1_ENARP         I2C_CR1_ENARP_Msk           /*!< ARP Enable */\r\n#define I2C_CR1_ENPEC_Pos     (5U)\r\n#define I2C_CR1_ENPEC_Msk     (0x1U << I2C_CR1_ENPEC_Pos) /*!< 0x00000020 */\r\n#define I2C_CR1_ENPEC         I2C_CR1_ENPEC_Msk           /*!< PEC Enable */\r\n#define I2C_CR1_ENGC_Pos      (6U)\r\n#define I2C_CR1_ENGC_Msk      (0x1U << I2C_CR1_ENGC_Pos) /*!< 0x00000040 */\r\n#define I2C_CR1_ENGC          I2C_CR1_ENGC_Msk           /*!< General Call Enable */\r\n#define I2C_CR1_NOSTRETCH_Pos (7U)\r\n#define I2C_CR1_NOSTRETCH_Msk (0x1U << I2C_CR1_NOSTRETCH_Pos) /*!< 0x00000080 */\r\n#define I2C_CR1_NOSTRETCH     I2C_CR1_NOSTRETCH_Msk           /*!< Clock Stretching Disable (Slave mode) */\r\n#define I2C_CR1_START_Pos     (8U)\r\n#define I2C_CR1_START_Msk     (0x1U << I2C_CR1_START_Pos) /*!< 0x00000100 */\r\n#define I2C_CR1_START         I2C_CR1_START_Msk           /*!< Start Generation */\r\n#define I2C_CR1_STOP_Pos      (9U)\r\n#define I2C_CR1_STOP_Msk      (0x1U << I2C_CR1_STOP_Pos) /*!< 0x00000200 */\r\n#define I2C_CR1_STOP          I2C_CR1_STOP_Msk           /*!< Stop Generation */\r\n#define I2C_CR1_ACK_Pos       (10U)\r\n#define I2C_CR1_ACK_Msk       (0x1U << I2C_CR1_ACK_Pos) /*!< 0x00000400 */\r\n#define I2C_CR1_ACK           I2C_CR1_ACK_Msk           /*!< Acknowledge Enable */\r\n#define I2C_CR1_POS_Pos       (11U)\r\n#define I2C_CR1_POS_Msk       (0x1U << I2C_CR1_POS_Pos) /*!< 0x00000800 */\r\n#define I2C_CR1_POS           I2C_CR1_POS_Msk           /*!< Acknowledge/PEC Position (for data reception) */\r\n#define I2C_CR1_PEC_Pos       (12U)\r\n#define I2C_CR1_PEC_Msk       (0x1U << I2C_CR1_PEC_Pos) /*!< 0x00001000 */\r\n#define I2C_CR1_PEC           I2C_CR1_PEC_Msk           /*!< Packet Error Checking */\r\n#define I2C_CR1_ALERT_Pos     (13U)\r\n#define I2C_CR1_ALERT_Msk     (0x1U << I2C_CR1_ALERT_Pos) /*!< 0x00002000 */\r\n#define I2C_CR1_ALERT         I2C_CR1_ALERT_Msk           /*!< SMBus Alert */\r\n#define I2C_CR1_SWRST_Pos     (15U)\r\n#define I2C_CR1_SWRST_Msk     (0x1U << I2C_CR1_SWRST_Pos) /*!< 0x00008000 */\r\n#define I2C_CR1_SWRST         I2C_CR1_SWRST_Msk           /*!< Software Reset */\r\n\r\n/*******************  Bit definition for I2C_CR2 register  ********************/\r\n#define I2C_CR2_FREQ_Pos (0U)\r\n#define I2C_CR2_FREQ_Msk (0x3FU << I2C_CR2_FREQ_Pos) /*!< 0x0000003F */\r\n#define I2C_CR2_FREQ     I2C_CR2_FREQ_Msk            /*!< FREQ[5:0] bits (Peripheral Clock Frequency) */\r\n#define I2C_CR2_FREQ_0   (0x01U << I2C_CR2_FREQ_Pos) /*!< 0x00000001 */\r\n#define I2C_CR2_FREQ_1   (0x02U << I2C_CR2_FREQ_Pos) /*!< 0x00000002 */\r\n#define I2C_CR2_FREQ_2   (0x04U << I2C_CR2_FREQ_Pos) /*!< 0x00000004 */\r\n#define I2C_CR2_FREQ_3   (0x08U << I2C_CR2_FREQ_Pos) /*!< 0x00000008 */\r\n#define I2C_CR2_FREQ_4   (0x10U << I2C_CR2_FREQ_Pos) /*!< 0x00000010 */\r\n#define I2C_CR2_FREQ_5   (0x20U << I2C_CR2_FREQ_Pos) /*!< 0x00000020 */\r\n\r\n#define I2C_CR2_ITERREN_Pos (8U)\r\n#define I2C_CR2_ITERREN_Msk (0x1U << I2C_CR2_ITERREN_Pos) /*!< 0x00000100 */\r\n#define I2C_CR2_ITERREN     I2C_CR2_ITERREN_Msk           /*!< Error Interrupt Enable */\r\n#define I2C_CR2_ITEVTEN_Pos (9U)\r\n#define I2C_CR2_ITEVTEN_Msk (0x1U << I2C_CR2_ITEVTEN_Pos) /*!< 0x00000200 */\r\n#define I2C_CR2_ITEVTEN     I2C_CR2_ITEVTEN_Msk           /*!< Event Interrupt Enable */\r\n#define I2C_CR2_ITBUFEN_Pos (10U)\r\n#define I2C_CR2_ITBUFEN_Msk (0x1U << I2C_CR2_ITBUFEN_Pos) /*!< 0x00000400 */\r\n#define I2C_CR2_ITBUFEN     I2C_CR2_ITBUFEN_Msk           /*!< Buffer Interrupt Enable */\r\n#define I2C_CR2_DMAEN_Pos   (11U)\r\n#define I2C_CR2_DMAEN_Msk   (0x1U << I2C_CR2_DMAEN_Pos) /*!< 0x00000800 */\r\n#define I2C_CR2_DMAEN       I2C_CR2_DMAEN_Msk           /*!< DMA Requests Enable */\r\n#define I2C_CR2_LAST_Pos    (12U)\r\n#define I2C_CR2_LAST_Msk    (0x1U << I2C_CR2_LAST_Pos) /*!< 0x00001000 */\r\n#define I2C_CR2_LAST        I2C_CR2_LAST_Msk           /*!< DMA Last Transfer */\r\n\r\n/*******************  Bit definition for I2C_OAR1 register  *******************/\r\n#define I2C_OAR1_ADD1_7 0x000000FEU /*!< Interface Address */\r\n#define I2C_OAR1_ADD8_9 0x00000300U /*!< Interface Address */\r\n\r\n#define I2C_OAR1_ADD0_Pos (0U)\r\n#define I2C_OAR1_ADD0_Msk (0x1U << I2C_OAR1_ADD0_Pos) /*!< 0x00000001 */\r\n#define I2C_OAR1_ADD0     I2C_OAR1_ADD0_Msk           /*!< Bit 0 */\r\n#define I2C_OAR1_ADD1_Pos (1U)\r\n#define I2C_OAR1_ADD1_Msk (0x1U << I2C_OAR1_ADD1_Pos) /*!< 0x00000002 */\r\n#define I2C_OAR1_ADD1     I2C_OAR1_ADD1_Msk           /*!< Bit 1 */\r\n#define I2C_OAR1_ADD2_Pos (2U)\r\n#define I2C_OAR1_ADD2_Msk (0x1U << I2C_OAR1_ADD2_Pos) /*!< 0x00000004 */\r\n#define I2C_OAR1_ADD2     I2C_OAR1_ADD2_Msk           /*!< Bit 2 */\r\n#define I2C_OAR1_ADD3_Pos (3U)\r\n#define I2C_OAR1_ADD3_Msk (0x1U << I2C_OAR1_ADD3_Pos) /*!< 0x00000008 */\r\n#define I2C_OAR1_ADD3     I2C_OAR1_ADD3_Msk           /*!< Bit 3 */\r\n#define I2C_OAR1_ADD4_Pos (4U)\r\n#define I2C_OAR1_ADD4_Msk (0x1U << I2C_OAR1_ADD4_Pos) /*!< 0x00000010 */\r\n#define I2C_OAR1_ADD4     I2C_OAR1_ADD4_Msk           /*!< Bit 4 */\r\n#define I2C_OAR1_ADD5_Pos (5U)\r\n#define I2C_OAR1_ADD5_Msk (0x1U << I2C_OAR1_ADD5_Pos) /*!< 0x00000020 */\r\n#define I2C_OAR1_ADD5     I2C_OAR1_ADD5_Msk           /*!< Bit 5 */\r\n#define I2C_OAR1_ADD6_Pos (6U)\r\n#define I2C_OAR1_ADD6_Msk (0x1U << I2C_OAR1_ADD6_Pos) /*!< 0x00000040 */\r\n#define I2C_OAR1_ADD6     I2C_OAR1_ADD6_Msk           /*!< Bit 6 */\r\n#define I2C_OAR1_ADD7_Pos (7U)\r\n#define I2C_OAR1_ADD7_Msk (0x1U << I2C_OAR1_ADD7_Pos) /*!< 0x00000080 */\r\n#define I2C_OAR1_ADD7     I2C_OAR1_ADD7_Msk           /*!< Bit 7 */\r\n#define I2C_OAR1_ADD8_Pos (8U)\r\n#define I2C_OAR1_ADD8_Msk (0x1U << I2C_OAR1_ADD8_Pos) /*!< 0x00000100 */\r\n#define I2C_OAR1_ADD8     I2C_OAR1_ADD8_Msk           /*!< Bit 8 */\r\n#define I2C_OAR1_ADD9_Pos (9U)\r\n#define I2C_OAR1_ADD9_Msk (0x1U << I2C_OAR1_ADD9_Pos) /*!< 0x00000200 */\r\n#define I2C_OAR1_ADD9     I2C_OAR1_ADD9_Msk           /*!< Bit 9 */\r\n\r\n#define I2C_OAR1_ADDMODE_Pos (15U)\r\n#define I2C_OAR1_ADDMODE_Msk (0x1U << I2C_OAR1_ADDMODE_Pos) /*!< 0x00008000 */\r\n#define I2C_OAR1_ADDMODE     I2C_OAR1_ADDMODE_Msk           /*!< Addressing Mode (Slave mode) */\r\n\r\n/*******************  Bit definition for I2C_OAR2 register  *******************/\r\n#define I2C_OAR2_ENDUAL_Pos (0U)\r\n#define I2C_OAR2_ENDUAL_Msk (0x1U << I2C_OAR2_ENDUAL_Pos) /*!< 0x00000001 */\r\n#define I2C_OAR2_ENDUAL     I2C_OAR2_ENDUAL_Msk           /*!< Dual addressing mode enable */\r\n#define I2C_OAR2_ADD2_Pos   (1U)\r\n#define I2C_OAR2_ADD2_Msk   (0x7FU << I2C_OAR2_ADD2_Pos) /*!< 0x000000FE */\r\n#define I2C_OAR2_ADD2       I2C_OAR2_ADD2_Msk            /*!< Interface address */\r\n\r\n/********************  Bit definition for I2C_DR register  ********************/\r\n#define I2C_DR_DR_Pos (0U)\r\n#define I2C_DR_DR_Msk (0xFFU << I2C_DR_DR_Pos) /*!< 0x000000FF */\r\n#define I2C_DR_DR     I2C_DR_DR_Msk            /*!< 8-bit Data Register         */\r\n\r\n/*******************  Bit definition for I2C_SR1 register  ********************/\r\n#define I2C_SR1_SB_Pos       (0U)\r\n#define I2C_SR1_SB_Msk       (0x1U << I2C_SR1_SB_Pos) /*!< 0x00000001 */\r\n#define I2C_SR1_SB           I2C_SR1_SB_Msk           /*!< Start Bit (Master mode) */\r\n#define I2C_SR1_ADDR_Pos     (1U)\r\n#define I2C_SR1_ADDR_Msk     (0x1U << I2C_SR1_ADDR_Pos) /*!< 0x00000002 */\r\n#define I2C_SR1_ADDR         I2C_SR1_ADDR_Msk           /*!< Address sent (master mode)/matched (slave mode) */\r\n#define I2C_SR1_BTF_Pos      (2U)\r\n#define I2C_SR1_BTF_Msk      (0x1U << I2C_SR1_BTF_Pos) /*!< 0x00000004 */\r\n#define I2C_SR1_BTF          I2C_SR1_BTF_Msk           /*!< Byte Transfer Finished */\r\n#define I2C_SR1_ADD10_Pos    (3U)\r\n#define I2C_SR1_ADD10_Msk    (0x1U << I2C_SR1_ADD10_Pos) /*!< 0x00000008 */\r\n#define I2C_SR1_ADD10        I2C_SR1_ADD10_Msk           /*!< 10-bit header sent (Master mode) */\r\n#define I2C_SR1_STOPF_Pos    (4U)\r\n#define I2C_SR1_STOPF_Msk    (0x1U << I2C_SR1_STOPF_Pos) /*!< 0x00000010 */\r\n#define I2C_SR1_STOPF        I2C_SR1_STOPF_Msk           /*!< Stop detection (Slave mode) */\r\n#define I2C_SR1_RXNE_Pos     (6U)\r\n#define I2C_SR1_RXNE_Msk     (0x1U << I2C_SR1_RXNE_Pos) /*!< 0x00000040 */\r\n#define I2C_SR1_RXNE         I2C_SR1_RXNE_Msk           /*!< Data Register not Empty (receivers) */\r\n#define I2C_SR1_TXE_Pos      (7U)\r\n#define I2C_SR1_TXE_Msk      (0x1U << I2C_SR1_TXE_Pos) /*!< 0x00000080 */\r\n#define I2C_SR1_TXE          I2C_SR1_TXE_Msk           /*!< Data Register Empty (transmitters) */\r\n#define I2C_SR1_BERR_Pos     (8U)\r\n#define I2C_SR1_BERR_Msk     (0x1U << I2C_SR1_BERR_Pos) /*!< 0x00000100 */\r\n#define I2C_SR1_BERR         I2C_SR1_BERR_Msk           /*!< Bus Error */\r\n#define I2C_SR1_ARLO_Pos     (9U)\r\n#define I2C_SR1_ARLO_Msk     (0x1U << I2C_SR1_ARLO_Pos) /*!< 0x00000200 */\r\n#define I2C_SR1_ARLO         I2C_SR1_ARLO_Msk           /*!< Arbitration Lost (master mode) */\r\n#define I2C_SR1_AF_Pos       (10U)\r\n#define I2C_SR1_AF_Msk       (0x1U << I2C_SR1_AF_Pos) /*!< 0x00000400 */\r\n#define I2C_SR1_AF           I2C_SR1_AF_Msk           /*!< Acknowledge Failure */\r\n#define I2C_SR1_OVR_Pos      (11U)\r\n#define I2C_SR1_OVR_Msk      (0x1U << I2C_SR1_OVR_Pos) /*!< 0x00000800 */\r\n#define I2C_SR1_OVR          I2C_SR1_OVR_Msk           /*!< Overrun/Underrun */\r\n#define I2C_SR1_PECERR_Pos   (12U)\r\n#define I2C_SR1_PECERR_Msk   (0x1U << I2C_SR1_PECERR_Pos) /*!< 0x00001000 */\r\n#define I2C_SR1_PECERR       I2C_SR1_PECERR_Msk           /*!< PEC Error in reception */\r\n#define I2C_SR1_TIMEOUT_Pos  (14U)\r\n#define I2C_SR1_TIMEOUT_Msk  (0x1U << I2C_SR1_TIMEOUT_Pos) /*!< 0x00004000 */\r\n#define I2C_SR1_TIMEOUT      I2C_SR1_TIMEOUT_Msk           /*!< Timeout or Tlow Error */\r\n#define I2C_SR1_SMBALERT_Pos (15U)\r\n#define I2C_SR1_SMBALERT_Msk (0x1U << I2C_SR1_SMBALERT_Pos) /*!< 0x00008000 */\r\n#define I2C_SR1_SMBALERT     I2C_SR1_SMBALERT_Msk           /*!< SMBus Alert */\r\n\r\n/*******************  Bit definition for I2C_SR2 register  ********************/\r\n#define I2C_SR2_MSL_Pos        (0U)\r\n#define I2C_SR2_MSL_Msk        (0x1U << I2C_SR2_MSL_Pos) /*!< 0x00000001 */\r\n#define I2C_SR2_MSL            I2C_SR2_MSL_Msk           /*!< Master/Slave */\r\n#define I2C_SR2_BUSY_Pos       (1U)\r\n#define I2C_SR2_BUSY_Msk       (0x1U << I2C_SR2_BUSY_Pos) /*!< 0x00000002 */\r\n#define I2C_SR2_BUSY           I2C_SR2_BUSY_Msk           /*!< Bus Busy */\r\n#define I2C_SR2_TRA_Pos        (2U)\r\n#define I2C_SR2_TRA_Msk        (0x1U << I2C_SR2_TRA_Pos) /*!< 0x00000004 */\r\n#define I2C_SR2_TRA            I2C_SR2_TRA_Msk           /*!< Transmitter/Receiver */\r\n#define I2C_SR2_GENCALL_Pos    (4U)\r\n#define I2C_SR2_GENCALL_Msk    (0x1U << I2C_SR2_GENCALL_Pos) /*!< 0x00000010 */\r\n#define I2C_SR2_GENCALL        I2C_SR2_GENCALL_Msk           /*!< General Call Address (Slave mode) */\r\n#define I2C_SR2_SMBDEFAULT_Pos (5U)\r\n#define I2C_SR2_SMBDEFAULT_Msk (0x1U << I2C_SR2_SMBDEFAULT_Pos) /*!< 0x00000020 */\r\n#define I2C_SR2_SMBDEFAULT     I2C_SR2_SMBDEFAULT_Msk           /*!< SMBus Device Default Address (Slave mode) */\r\n#define I2C_SR2_SMBHOST_Pos    (6U)\r\n#define I2C_SR2_SMBHOST_Msk    (0x1U << I2C_SR2_SMBHOST_Pos) /*!< 0x00000040 */\r\n#define I2C_SR2_SMBHOST        I2C_SR2_SMBHOST_Msk           /*!< SMBus Host Header (Slave mode) */\r\n#define I2C_SR2_DUALF_Pos      (7U)\r\n#define I2C_SR2_DUALF_Msk      (0x1U << I2C_SR2_DUALF_Pos) /*!< 0x00000080 */\r\n#define I2C_SR2_DUALF          I2C_SR2_DUALF_Msk           /*!< Dual Flag (Slave mode) */\r\n#define I2C_SR2_PEC_Pos        (8U)\r\n#define I2C_SR2_PEC_Msk        (0xFFU << I2C_SR2_PEC_Pos) /*!< 0x0000FF00 */\r\n#define I2C_SR2_PEC            I2C_SR2_PEC_Msk            /*!< Packet Error Checking Register */\r\n\r\n/*******************  Bit definition for I2C_CCR register  ********************/\r\n#define I2C_CCR_CCR_Pos  (0U)\r\n#define I2C_CCR_CCR_Msk  (0xFFFU << I2C_CCR_CCR_Pos) /*!< 0x00000FFF */\r\n#define I2C_CCR_CCR      I2C_CCR_CCR_Msk             /*!< Clock Control Register in Fast/Standard mode (Master mode) */\r\n#define I2C_CCR_DUTY_Pos (14U)\r\n#define I2C_CCR_DUTY_Msk (0x1U << I2C_CCR_DUTY_Pos) /*!< 0x00004000 */\r\n#define I2C_CCR_DUTY     I2C_CCR_DUTY_Msk           /*!< Fast Mode Duty Cycle */\r\n#define I2C_CCR_FS_Pos   (15U)\r\n#define I2C_CCR_FS_Msk   (0x1U << I2C_CCR_FS_Pos) /*!< 0x00008000 */\r\n#define I2C_CCR_FS       I2C_CCR_FS_Msk           /*!< I2C Master Mode Selection */\r\n\r\n/******************  Bit definition for I2C_TRISE register  *******************/\r\n#define I2C_TRISE_TRISE_Pos (0U)\r\n#define I2C_TRISE_TRISE_Msk (0x3FU << I2C_TRISE_TRISE_Pos) /*!< 0x0000003F */\r\n#define I2C_TRISE_TRISE     I2C_TRISE_TRISE_Msk            /*!< Maximum Rise Time in Fast/Standard mode (Master mode) */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*         Universal Synchronous Asynchronous Receiver Transmitter            */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/*******************  Bit definition for USART_SR register  *******************/\r\n#define USART_SR_PE_Pos   (0U)\r\n#define USART_SR_PE_Msk   (0x1U << USART_SR_PE_Pos) /*!< 0x00000001 */\r\n#define USART_SR_PE       USART_SR_PE_Msk           /*!< Parity Error */\r\n#define USART_SR_FE_Pos   (1U)\r\n#define USART_SR_FE_Msk   (0x1U << USART_SR_FE_Pos) /*!< 0x00000002 */\r\n#define USART_SR_FE       USART_SR_FE_Msk           /*!< Framing Error */\r\n#define USART_SR_NE_Pos   (2U)\r\n#define USART_SR_NE_Msk   (0x1U << USART_SR_NE_Pos) /*!< 0x00000004 */\r\n#define USART_SR_NE       USART_SR_NE_Msk           /*!< Noise Error Flag */\r\n#define USART_SR_ORE_Pos  (3U)\r\n#define USART_SR_ORE_Msk  (0x1U << USART_SR_ORE_Pos) /*!< 0x00000008 */\r\n#define USART_SR_ORE      USART_SR_ORE_Msk           /*!< OverRun Error */\r\n#define USART_SR_IDLE_Pos (4U)\r\n#define USART_SR_IDLE_Msk (0x1U << USART_SR_IDLE_Pos) /*!< 0x00000010 */\r\n#define USART_SR_IDLE     USART_SR_IDLE_Msk           /*!< IDLE line detected */\r\n#define USART_SR_RXNE_Pos (5U)\r\n#define USART_SR_RXNE_Msk (0x1U << USART_SR_RXNE_Pos) /*!< 0x00000020 */\r\n#define USART_SR_RXNE     USART_SR_RXNE_Msk           /*!< Read Data Register Not Empty */\r\n#define USART_SR_TC_Pos   (6U)\r\n#define USART_SR_TC_Msk   (0x1U << USART_SR_TC_Pos) /*!< 0x00000040 */\r\n#define USART_SR_TC       USART_SR_TC_Msk           /*!< Transmission Complete */\r\n#define USART_SR_TXE_Pos  (7U)\r\n#define USART_SR_TXE_Msk  (0x1U << USART_SR_TXE_Pos) /*!< 0x00000080 */\r\n#define USART_SR_TXE      USART_SR_TXE_Msk           /*!< Transmit Data Register Empty */\r\n#define USART_SR_LBD_Pos  (8U)\r\n#define USART_SR_LBD_Msk  (0x1U << USART_SR_LBD_Pos) /*!< 0x00000100 */\r\n#define USART_SR_LBD      USART_SR_LBD_Msk           /*!< LIN Break Detection Flag */\r\n#define USART_SR_CTS_Pos  (9U)\r\n#define USART_SR_CTS_Msk  (0x1U << USART_SR_CTS_Pos) /*!< 0x00000200 */\r\n#define USART_SR_CTS      USART_SR_CTS_Msk           /*!< CTS Flag */\r\n\r\n/*******************  Bit definition for USART_DR register  *******************/\r\n#define USART_DR_DR_Pos (0U)\r\n#define USART_DR_DR_Msk (0x1FFU << USART_DR_DR_Pos) /*!< 0x000001FF */\r\n#define USART_DR_DR     USART_DR_DR_Msk             /*!< Data value */\r\n\r\n/******************  Bit definition for USART_BRR register  *******************/\r\n#define USART_BRR_DIV_Fraction_Pos (0U)\r\n#define USART_BRR_DIV_Fraction_Msk (0xFU << USART_BRR_DIV_Fraction_Pos) /*!< 0x0000000F */\r\n#define USART_BRR_DIV_Fraction     USART_BRR_DIV_Fraction_Msk           /*!< Fraction of USARTDIV */\r\n#define USART_BRR_DIV_Mantissa_Pos (4U)\r\n#define USART_BRR_DIV_Mantissa_Msk (0xFFFU << USART_BRR_DIV_Mantissa_Pos) /*!< 0x0000FFF0 */\r\n#define USART_BRR_DIV_Mantissa     USART_BRR_DIV_Mantissa_Msk             /*!< Mantissa of USARTDIV */\r\n\r\n/******************  Bit definition for USART_CR1 register  *******************/\r\n#define USART_CR1_SBK_Pos    (0U)\r\n#define USART_CR1_SBK_Msk    (0x1U << USART_CR1_SBK_Pos) /*!< 0x00000001 */\r\n#define USART_CR1_SBK        USART_CR1_SBK_Msk           /*!< Send Break */\r\n#define USART_CR1_RWU_Pos    (1U)\r\n#define USART_CR1_RWU_Msk    (0x1U << USART_CR1_RWU_Pos) /*!< 0x00000002 */\r\n#define USART_CR1_RWU        USART_CR1_RWU_Msk           /*!< Receiver wakeup */\r\n#define USART_CR1_RE_Pos     (2U)\r\n#define USART_CR1_RE_Msk     (0x1U << USART_CR1_RE_Pos) /*!< 0x00000004 */\r\n#define USART_CR1_RE         USART_CR1_RE_Msk           /*!< Receiver Enable */\r\n#define USART_CR1_TE_Pos     (3U)\r\n#define USART_CR1_TE_Msk     (0x1U << USART_CR1_TE_Pos) /*!< 0x00000008 */\r\n#define USART_CR1_TE         USART_CR1_TE_Msk           /*!< Transmitter Enable */\r\n#define USART_CR1_IDLEIE_Pos (4U)\r\n#define USART_CR1_IDLEIE_Msk (0x1U << USART_CR1_IDLEIE_Pos) /*!< 0x00000010 */\r\n#define USART_CR1_IDLEIE     USART_CR1_IDLEIE_Msk           /*!< IDLE Interrupt Enable */\r\n#define USART_CR1_RXNEIE_Pos (5U)\r\n#define USART_CR1_RXNEIE_Msk (0x1U << USART_CR1_RXNEIE_Pos) /*!< 0x00000020 */\r\n#define USART_CR1_RXNEIE     USART_CR1_RXNEIE_Msk           /*!< RXNE Interrupt Enable */\r\n#define USART_CR1_TCIE_Pos   (6U)\r\n#define USART_CR1_TCIE_Msk   (0x1U << USART_CR1_TCIE_Pos) /*!< 0x00000040 */\r\n#define USART_CR1_TCIE       USART_CR1_TCIE_Msk           /*!< Transmission Complete Interrupt Enable */\r\n#define USART_CR1_TXEIE_Pos  (7U)\r\n#define USART_CR1_TXEIE_Msk  (0x1U << USART_CR1_TXEIE_Pos) /*!< 0x00000080 */\r\n#define USART_CR1_TXEIE      USART_CR1_TXEIE_Msk           /*!< PE Interrupt Enable */\r\n#define USART_CR1_PEIE_Pos   (8U)\r\n#define USART_CR1_PEIE_Msk   (0x1U << USART_CR1_PEIE_Pos) /*!< 0x00000100 */\r\n#define USART_CR1_PEIE       USART_CR1_PEIE_Msk           /*!< PE Interrupt Enable */\r\n#define USART_CR1_PS_Pos     (9U)\r\n#define USART_CR1_PS_Msk     (0x1U << USART_CR1_PS_Pos) /*!< 0x00000200 */\r\n#define USART_CR1_PS         USART_CR1_PS_Msk           /*!< Parity Selection */\r\n#define USART_CR1_PCE_Pos    (10U)\r\n#define USART_CR1_PCE_Msk    (0x1U << USART_CR1_PCE_Pos) /*!< 0x00000400 */\r\n#define USART_CR1_PCE        USART_CR1_PCE_Msk           /*!< Parity Control Enable */\r\n#define USART_CR1_WAKE_Pos   (11U)\r\n#define USART_CR1_WAKE_Msk   (0x1U << USART_CR1_WAKE_Pos) /*!< 0x00000800 */\r\n#define USART_CR1_WAKE       USART_CR1_WAKE_Msk           /*!< Wakeup method */\r\n#define USART_CR1_M_Pos      (12U)\r\n#define USART_CR1_M_Msk      (0x1U << USART_CR1_M_Pos) /*!< 0x00001000 */\r\n#define USART_CR1_M          USART_CR1_M_Msk           /*!< Word length */\r\n#define USART_CR1_UE_Pos     (13U)\r\n#define USART_CR1_UE_Msk     (0x1U << USART_CR1_UE_Pos) /*!< 0x00002000 */\r\n#define USART_CR1_UE         USART_CR1_UE_Msk           /*!< USART Enable */\r\n\r\n/******************  Bit definition for USART_CR2 register  *******************/\r\n#define USART_CR2_ADD_Pos   (0U)\r\n#define USART_CR2_ADD_Msk   (0xFU << USART_CR2_ADD_Pos) /*!< 0x0000000F */\r\n#define USART_CR2_ADD       USART_CR2_ADD_Msk           /*!< Address of the USART node */\r\n#define USART_CR2_LBDL_Pos  (5U)\r\n#define USART_CR2_LBDL_Msk  (0x1U << USART_CR2_LBDL_Pos) /*!< 0x00000020 */\r\n#define USART_CR2_LBDL      USART_CR2_LBDL_Msk           /*!< LIN Break Detection Length */\r\n#define USART_CR2_LBDIE_Pos (6U)\r\n#define USART_CR2_LBDIE_Msk (0x1U << USART_CR2_LBDIE_Pos) /*!< 0x00000040 */\r\n#define USART_CR2_LBDIE     USART_CR2_LBDIE_Msk           /*!< LIN Break Detection Interrupt Enable */\r\n#define USART_CR2_LBCL_Pos  (8U)\r\n#define USART_CR2_LBCL_Msk  (0x1U << USART_CR2_LBCL_Pos) /*!< 0x00000100 */\r\n#define USART_CR2_LBCL      USART_CR2_LBCL_Msk           /*!< Last Bit Clock pulse */\r\n#define USART_CR2_CPHA_Pos  (9U)\r\n#define USART_CR2_CPHA_Msk  (0x1U << USART_CR2_CPHA_Pos) /*!< 0x00000200 */\r\n#define USART_CR2_CPHA      USART_CR2_CPHA_Msk           /*!< Clock Phase */\r\n#define USART_CR2_CPOL_Pos  (10U)\r\n#define USART_CR2_CPOL_Msk  (0x1U << USART_CR2_CPOL_Pos) /*!< 0x00000400 */\r\n#define USART_CR2_CPOL      USART_CR2_CPOL_Msk           /*!< Clock Polarity */\r\n#define USART_CR2_CLKEN_Pos (11U)\r\n#define USART_CR2_CLKEN_Msk (0x1U << USART_CR2_CLKEN_Pos) /*!< 0x00000800 */\r\n#define USART_CR2_CLKEN     USART_CR2_CLKEN_Msk           /*!< Clock Enable */\r\n\r\n#define USART_CR2_STOP_Pos (12U)\r\n#define USART_CR2_STOP_Msk (0x3U << USART_CR2_STOP_Pos) /*!< 0x00003000 */\r\n#define USART_CR2_STOP     USART_CR2_STOP_Msk           /*!< STOP[1:0] bits (STOP bits) */\r\n#define USART_CR2_STOP_0   (0x1U << USART_CR2_STOP_Pos) /*!< 0x00001000 */\r\n#define USART_CR2_STOP_1   (0x2U << USART_CR2_STOP_Pos) /*!< 0x00002000 */\r\n\r\n#define USART_CR2_LINEN_Pos (14U)\r\n#define USART_CR2_LINEN_Msk (0x1U << USART_CR2_LINEN_Pos) /*!< 0x00004000 */\r\n#define USART_CR2_LINEN     USART_CR2_LINEN_Msk           /*!< LIN mode enable */\r\n\r\n/******************  Bit definition for USART_CR3 register  *******************/\r\n#define USART_CR3_EIE_Pos   (0U)\r\n#define USART_CR3_EIE_Msk   (0x1U << USART_CR3_EIE_Pos) /*!< 0x00000001 */\r\n#define USART_CR3_EIE       USART_CR3_EIE_Msk           /*!< Error Interrupt Enable */\r\n#define USART_CR3_IREN_Pos  (1U)\r\n#define USART_CR3_IREN_Msk  (0x1U << USART_CR3_IREN_Pos) /*!< 0x00000002 */\r\n#define USART_CR3_IREN      USART_CR3_IREN_Msk           /*!< IrDA mode Enable */\r\n#define USART_CR3_IRLP_Pos  (2U)\r\n#define USART_CR3_IRLP_Msk  (0x1U << USART_CR3_IRLP_Pos) /*!< 0x00000004 */\r\n#define USART_CR3_IRLP      USART_CR3_IRLP_Msk           /*!< IrDA Low-Power */\r\n#define USART_CR3_HDSEL_Pos (3U)\r\n#define USART_CR3_HDSEL_Msk (0x1U << USART_CR3_HDSEL_Pos) /*!< 0x00000008 */\r\n#define USART_CR3_HDSEL     USART_CR3_HDSEL_Msk           /*!< Half-Duplex Selection */\r\n#define USART_CR3_NACK_Pos  (4U)\r\n#define USART_CR3_NACK_Msk  (0x1U << USART_CR3_NACK_Pos) /*!< 0x00000010 */\r\n#define USART_CR3_NACK      USART_CR3_NACK_Msk           /*!< Smartcard NACK enable */\r\n#define USART_CR3_SCEN_Pos  (5U)\r\n#define USART_CR3_SCEN_Msk  (0x1U << USART_CR3_SCEN_Pos) /*!< 0x00000020 */\r\n#define USART_CR3_SCEN      USART_CR3_SCEN_Msk           /*!< Smartcard mode enable */\r\n#define USART_CR3_DMAR_Pos  (6U)\r\n#define USART_CR3_DMAR_Msk  (0x1U << USART_CR3_DMAR_Pos) /*!< 0x00000040 */\r\n#define USART_CR3_DMAR      USART_CR3_DMAR_Msk           /*!< DMA Enable Receiver */\r\n#define USART_CR3_DMAT_Pos  (7U)\r\n#define USART_CR3_DMAT_Msk  (0x1U << USART_CR3_DMAT_Pos) /*!< 0x00000080 */\r\n#define USART_CR3_DMAT      USART_CR3_DMAT_Msk           /*!< DMA Enable Transmitter */\r\n#define USART_CR3_RTSE_Pos  (8U)\r\n#define USART_CR3_RTSE_Msk  (0x1U << USART_CR3_RTSE_Pos) /*!< 0x00000100 */\r\n#define USART_CR3_RTSE      USART_CR3_RTSE_Msk           /*!< RTS Enable */\r\n#define USART_CR3_CTSE_Pos  (9U)\r\n#define USART_CR3_CTSE_Msk  (0x1U << USART_CR3_CTSE_Pos) /*!< 0x00000200 */\r\n#define USART_CR3_CTSE      USART_CR3_CTSE_Msk           /*!< CTS Enable */\r\n#define USART_CR3_CTSIE_Pos (10U)\r\n#define USART_CR3_CTSIE_Msk (0x1U << USART_CR3_CTSIE_Pos) /*!< 0x00000400 */\r\n#define USART_CR3_CTSIE     USART_CR3_CTSIE_Msk           /*!< CTS Interrupt Enable */\r\n\r\n/******************  Bit definition for USART_GTPR register  ******************/\r\n#define USART_GTPR_PSC_Pos (0U)\r\n#define USART_GTPR_PSC_Msk (0xFFU << USART_GTPR_PSC_Pos) /*!< 0x000000FF */\r\n#define USART_GTPR_PSC     USART_GTPR_PSC_Msk            /*!< PSC[7:0] bits (Prescaler value) */\r\n#define USART_GTPR_PSC_0   (0x01U << USART_GTPR_PSC_Pos) /*!< 0x00000001 */\r\n#define USART_GTPR_PSC_1   (0x02U << USART_GTPR_PSC_Pos) /*!< 0x00000002 */\r\n#define USART_GTPR_PSC_2   (0x04U << USART_GTPR_PSC_Pos) /*!< 0x00000004 */\r\n#define USART_GTPR_PSC_3   (0x08U << USART_GTPR_PSC_Pos) /*!< 0x00000008 */\r\n#define USART_GTPR_PSC_4   (0x10U << USART_GTPR_PSC_Pos) /*!< 0x00000010 */\r\n#define USART_GTPR_PSC_5   (0x20U << USART_GTPR_PSC_Pos) /*!< 0x00000020 */\r\n#define USART_GTPR_PSC_6   (0x40U << USART_GTPR_PSC_Pos) /*!< 0x00000040 */\r\n#define USART_GTPR_PSC_7   (0x80U << USART_GTPR_PSC_Pos) /*!< 0x00000080 */\r\n\r\n#define USART_GTPR_GT_Pos (8U)\r\n#define USART_GTPR_GT_Msk (0xFFU << USART_GTPR_GT_Pos) /*!< 0x0000FF00 */\r\n#define USART_GTPR_GT     USART_GTPR_GT_Msk            /*!< Guard time value */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                                 Debug MCU                                  */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n\r\n/****************  Bit definition for DBGMCU_IDCODE register  *****************/\r\n#define DBGMCU_IDCODE_DEV_ID_Pos (0U)\r\n#define DBGMCU_IDCODE_DEV_ID_Msk (0xFFFU << DBGMCU_IDCODE_DEV_ID_Pos) /*!< 0x00000FFF */\r\n#define DBGMCU_IDCODE_DEV_ID     DBGMCU_IDCODE_DEV_ID_Msk             /*!< Device Identifier */\r\n\r\n#define DBGMCU_IDCODE_REV_ID_Pos (16U)\r\n#define DBGMCU_IDCODE_REV_ID_Msk (0xFFFFU << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0xFFFF0000 */\r\n#define DBGMCU_IDCODE_REV_ID     DBGMCU_IDCODE_REV_ID_Msk              /*!< REV_ID[15:0] bits (Revision Identifier) */\r\n#define DBGMCU_IDCODE_REV_ID_0   (0x0001U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00010000 */\r\n#define DBGMCU_IDCODE_REV_ID_1   (0x0002U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00020000 */\r\n#define DBGMCU_IDCODE_REV_ID_2   (0x0004U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00040000 */\r\n#define DBGMCU_IDCODE_REV_ID_3   (0x0008U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00080000 */\r\n#define DBGMCU_IDCODE_REV_ID_4   (0x0010U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00100000 */\r\n#define DBGMCU_IDCODE_REV_ID_5   (0x0020U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00200000 */\r\n#define DBGMCU_IDCODE_REV_ID_6   (0x0040U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00400000 */\r\n#define DBGMCU_IDCODE_REV_ID_7   (0x0080U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x00800000 */\r\n#define DBGMCU_IDCODE_REV_ID_8   (0x0100U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x01000000 */\r\n#define DBGMCU_IDCODE_REV_ID_9   (0x0200U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x02000000 */\r\n#define DBGMCU_IDCODE_REV_ID_10  (0x0400U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x04000000 */\r\n#define DBGMCU_IDCODE_REV_ID_11  (0x0800U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x08000000 */\r\n#define DBGMCU_IDCODE_REV_ID_12  (0x1000U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x10000000 */\r\n#define DBGMCU_IDCODE_REV_ID_13  (0x2000U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x20000000 */\r\n#define DBGMCU_IDCODE_REV_ID_14  (0x4000U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x40000000 */\r\n#define DBGMCU_IDCODE_REV_ID_15  (0x8000U << DBGMCU_IDCODE_REV_ID_Pos) /*!< 0x80000000 */\r\n\r\n/******************  Bit definition for DBGMCU_CR register  *******************/\r\n#define DBGMCU_CR_DBG_SLEEP_Pos   (0U)\r\n#define DBGMCU_CR_DBG_SLEEP_Msk   (0x1U << DBGMCU_CR_DBG_SLEEP_Pos) /*!< 0x00000001 */\r\n#define DBGMCU_CR_DBG_SLEEP       DBGMCU_CR_DBG_SLEEP_Msk           /*!< Debug Sleep Mode */\r\n#define DBGMCU_CR_DBG_STOP_Pos    (1U)\r\n#define DBGMCU_CR_DBG_STOP_Msk    (0x1U << DBGMCU_CR_DBG_STOP_Pos) /*!< 0x00000002 */\r\n#define DBGMCU_CR_DBG_STOP        DBGMCU_CR_DBG_STOP_Msk           /*!< Debug Stop Mode */\r\n#define DBGMCU_CR_DBG_STANDBY_Pos (2U)\r\n#define DBGMCU_CR_DBG_STANDBY_Msk (0x1U << DBGMCU_CR_DBG_STANDBY_Pos) /*!< 0x00000004 */\r\n#define DBGMCU_CR_DBG_STANDBY     DBGMCU_CR_DBG_STANDBY_Msk           /*!< Debug Standby mode */\r\n#define DBGMCU_CR_TRACE_IOEN_Pos  (5U)\r\n#define DBGMCU_CR_TRACE_IOEN_Msk  (0x1U << DBGMCU_CR_TRACE_IOEN_Pos) /*!< 0x00000020 */\r\n#define DBGMCU_CR_TRACE_IOEN      DBGMCU_CR_TRACE_IOEN_Msk           /*!< Trace Pin Assignment Control */\r\n\r\n#define DBGMCU_CR_TRACE_MODE_Pos (6U)\r\n#define DBGMCU_CR_TRACE_MODE_Msk (0x3U << DBGMCU_CR_TRACE_MODE_Pos) /*!< 0x000000C0 */\r\n#define DBGMCU_CR_TRACE_MODE     DBGMCU_CR_TRACE_MODE_Msk           /*!< TRACE_MODE[1:0] bits (Trace Pin Assignment Control) */\r\n#define DBGMCU_CR_TRACE_MODE_0   (0x1U << DBGMCU_CR_TRACE_MODE_Pos) /*!< 0x00000040 */\r\n#define DBGMCU_CR_TRACE_MODE_1   (0x2U << DBGMCU_CR_TRACE_MODE_Pos) /*!< 0x00000080 */\r\n\r\n#define DBGMCU_CR_DBG_IWDG_STOP_Pos          (8U)\r\n#define DBGMCU_CR_DBG_IWDG_STOP_Msk          (0x1U << DBGMCU_CR_DBG_IWDG_STOP_Pos) /*!< 0x00000100 */\r\n#define DBGMCU_CR_DBG_IWDG_STOP              DBGMCU_CR_DBG_IWDG_STOP_Msk           /*!< Debug Independent Watchdog stopped when Core is halted */\r\n#define DBGMCU_CR_DBG_WWDG_STOP_Pos          (9U)\r\n#define DBGMCU_CR_DBG_WWDG_STOP_Msk          (0x1U << DBGMCU_CR_DBG_WWDG_STOP_Pos) /*!< 0x00000200 */\r\n#define DBGMCU_CR_DBG_WWDG_STOP              DBGMCU_CR_DBG_WWDG_STOP_Msk           /*!< Debug Window Watchdog stopped when Core is halted */\r\n#define DBGMCU_CR_DBG_TIM1_STOP_Pos          (10U)\r\n#define DBGMCU_CR_DBG_TIM1_STOP_Msk          (0x1U << DBGMCU_CR_DBG_TIM1_STOP_Pos) /*!< 0x00000400 */\r\n#define DBGMCU_CR_DBG_TIM1_STOP              DBGMCU_CR_DBG_TIM1_STOP_Msk           /*!< TIM1 counter stopped when core is halted */\r\n#define DBGMCU_CR_DBG_TIM2_STOP_Pos          (11U)\r\n#define DBGMCU_CR_DBG_TIM2_STOP_Msk          (0x1U << DBGMCU_CR_DBG_TIM2_STOP_Pos) /*!< 0x00000800 */\r\n#define DBGMCU_CR_DBG_TIM2_STOP              DBGMCU_CR_DBG_TIM2_STOP_Msk           /*!< TIM2 counter stopped when core is halted */\r\n#define DBGMCU_CR_DBG_TIM3_STOP_Pos          (12U)\r\n#define DBGMCU_CR_DBG_TIM3_STOP_Msk          (0x1U << DBGMCU_CR_DBG_TIM3_STOP_Pos) /*!< 0x00001000 */\r\n#define DBGMCU_CR_DBG_TIM3_STOP              DBGMCU_CR_DBG_TIM3_STOP_Msk           /*!< TIM3 counter stopped when core is halted */\r\n#define DBGMCU_CR_DBG_TIM4_STOP_Pos          (13U)\r\n#define DBGMCU_CR_DBG_TIM4_STOP_Msk          (0x1U << DBGMCU_CR_DBG_TIM4_STOP_Pos) /*!< 0x00002000 */\r\n#define DBGMCU_CR_DBG_TIM4_STOP              DBGMCU_CR_DBG_TIM4_STOP_Msk           /*!< TIM4 counter stopped when core is halted */\r\n#define DBGMCU_CR_DBG_CAN1_STOP_Pos          (14U)\r\n#define DBGMCU_CR_DBG_CAN1_STOP_Msk          (0x1U << DBGMCU_CR_DBG_CAN1_STOP_Pos) /*!< 0x00004000 */\r\n#define DBGMCU_CR_DBG_CAN1_STOP              DBGMCU_CR_DBG_CAN1_STOP_Msk           /*!< Debug CAN1 stopped when Core is halted */\r\n#define DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT_Pos (15U)\r\n#define DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT_Msk (0x1U << DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT_Pos) /*!< 0x00008000 */\r\n#define DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT     DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT_Msk           /*!< SMBUS timeout mode stopped when Core is halted */\r\n#define DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT_Pos (16U)\r\n#define DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT_Msk (0x1U << DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT_Pos) /*!< 0x00010000 */\r\n#define DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT     DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT_Msk           /*!< SMBUS timeout mode stopped when Core is halted */\r\n\r\n/******************************************************************************/\r\n/*                                                                            */\r\n/*                      FLASH and Option Bytes Registers                      */\r\n/*                                                                            */\r\n/******************************************************************************/\r\n/*******************  Bit definition for FLASH_ACR register  ******************/\r\n#define FLASH_ACR_LATENCY_Pos (0U)\r\n#define FLASH_ACR_LATENCY_Msk (0x7U << FLASH_ACR_LATENCY_Pos) /*!< 0x00000007 */\r\n#define FLASH_ACR_LATENCY     FLASH_ACR_LATENCY_Msk           /*!< LATENCY[2:0] bits (Latency) */\r\n#define FLASH_ACR_LATENCY_0   (0x1U << FLASH_ACR_LATENCY_Pos) /*!< 0x00000001 */\r\n#define FLASH_ACR_LATENCY_1   (0x2U << FLASH_ACR_LATENCY_Pos) /*!< 0x00000002 */\r\n#define FLASH_ACR_LATENCY_2   (0x4U << FLASH_ACR_LATENCY_Pos) /*!< 0x00000004 */\r\n\r\n#define FLASH_ACR_HLFCYA_Pos (3U)\r\n#define FLASH_ACR_HLFCYA_Msk (0x1U << FLASH_ACR_HLFCYA_Pos) /*!< 0x00000008 */\r\n#define FLASH_ACR_HLFCYA     FLASH_ACR_HLFCYA_Msk           /*!< Flash Half Cycle Access Enable */\r\n#define FLASH_ACR_PRFTBE_Pos (4U)\r\n#define FLASH_ACR_PRFTBE_Msk (0x1U << FLASH_ACR_PRFTBE_Pos) /*!< 0x00000010 */\r\n#define FLASH_ACR_PRFTBE     FLASH_ACR_PRFTBE_Msk           /*!< Prefetch Buffer Enable */\r\n#define FLASH_ACR_PRFTBS_Pos (5U)\r\n#define FLASH_ACR_PRFTBS_Msk (0x1U << FLASH_ACR_PRFTBS_Pos) /*!< 0x00000020 */\r\n#define FLASH_ACR_PRFTBS     FLASH_ACR_PRFTBS_Msk           /*!< Prefetch Buffer Status */\r\n\r\n/******************  Bit definition for FLASH_KEYR register  ******************/\r\n#define FLASH_KEYR_FKEYR_Pos (0U)\r\n#define FLASH_KEYR_FKEYR_Msk (0xFFFFFFFFU << FLASH_KEYR_FKEYR_Pos) /*!< 0xFFFFFFFF */\r\n#define FLASH_KEYR_FKEYR     FLASH_KEYR_FKEYR_Msk                  /*!< FPEC Key */\r\n\r\n#define RDP_KEY_Pos    (0U)\r\n#define RDP_KEY_Msk    (0xA5U << RDP_KEY_Pos) /*!< 0x000000A5 */\r\n#define RDP_KEY        RDP_KEY_Msk            /*!< RDP Key */\r\n#define FLASH_KEY1_Pos (0U)\r\n#define FLASH_KEY1_Msk (0x45670123U << FLASH_KEY1_Pos) /*!< 0x45670123 */\r\n#define FLASH_KEY1     FLASH_KEY1_Msk                  /*!< FPEC Key1 */\r\n#define FLASH_KEY2_Pos (0U)\r\n#define FLASH_KEY2_Msk (0xCDEF89ABU << FLASH_KEY2_Pos) /*!< 0xCDEF89AB */\r\n#define FLASH_KEY2     FLASH_KEY2_Msk                  /*!< FPEC Key2 */\r\n\r\n/*****************  Bit definition for FLASH_OPTKEYR register  ****************/\r\n#define FLASH_OPTKEYR_OPTKEYR_Pos (0U)\r\n#define FLASH_OPTKEYR_OPTKEYR_Msk (0xFFFFFFFFU << FLASH_OPTKEYR_OPTKEYR_Pos) /*!< 0xFFFFFFFF */\r\n#define FLASH_OPTKEYR_OPTKEYR     FLASH_OPTKEYR_OPTKEYR_Msk                  /*!< Option Byte Key */\r\n\r\n#define FLASH_OPTKEY1 FLASH_KEY1 /*!< Option Byte Key1 */\r\n#define FLASH_OPTKEY2 FLASH_KEY2 /*!< Option Byte Key2 */\r\n\r\n/******************  Bit definition for FLASH_SR register  ********************/\r\n#define FLASH_SR_BSY_Pos      (0U)\r\n#define FLASH_SR_BSY_Msk      (0x1U << FLASH_SR_BSY_Pos) /*!< 0x00000001 */\r\n#define FLASH_SR_BSY          FLASH_SR_BSY_Msk           /*!< Busy */\r\n#define FLASH_SR_PGERR_Pos    (2U)\r\n#define FLASH_SR_PGERR_Msk    (0x1U << FLASH_SR_PGERR_Pos) /*!< 0x00000004 */\r\n#define FLASH_SR_PGERR        FLASH_SR_PGERR_Msk           /*!< Programming Error */\r\n#define FLASH_SR_WRPRTERR_Pos (4U)\r\n#define FLASH_SR_WRPRTERR_Msk (0x1U << FLASH_SR_WRPRTERR_Pos) /*!< 0x00000010 */\r\n#define FLASH_SR_WRPRTERR     FLASH_SR_WRPRTERR_Msk           /*!< Write Protection Error */\r\n#define FLASH_SR_EOP_Pos      (5U)\r\n#define FLASH_SR_EOP_Msk      (0x1U << FLASH_SR_EOP_Pos) /*!< 0x00000020 */\r\n#define FLASH_SR_EOP          FLASH_SR_EOP_Msk           /*!< End of operation */\r\n\r\n/*******************  Bit definition for FLASH_CR register  *******************/\r\n#define FLASH_CR_PG_Pos     (0U)\r\n#define FLASH_CR_PG_Msk     (0x1U << FLASH_CR_PG_Pos) /*!< 0x00000001 */\r\n#define FLASH_CR_PG         FLASH_CR_PG_Msk           /*!< Programming */\r\n#define FLASH_CR_PER_Pos    (1U)\r\n#define FLASH_CR_PER_Msk    (0x1U << FLASH_CR_PER_Pos) /*!< 0x00000002 */\r\n#define FLASH_CR_PER        FLASH_CR_PER_Msk           /*!< Page Erase */\r\n#define FLASH_CR_MER_Pos    (2U)\r\n#define FLASH_CR_MER_Msk    (0x1U << FLASH_CR_MER_Pos) /*!< 0x00000004 */\r\n#define FLASH_CR_MER        FLASH_CR_MER_Msk           /*!< Mass Erase */\r\n#define FLASH_CR_OPTPG_Pos  (4U)\r\n#define FLASH_CR_OPTPG_Msk  (0x1U << FLASH_CR_OPTPG_Pos) /*!< 0x00000010 */\r\n#define FLASH_CR_OPTPG      FLASH_CR_OPTPG_Msk           /*!< Option Byte Programming */\r\n#define FLASH_CR_OPTER_Pos  (5U)\r\n#define FLASH_CR_OPTER_Msk  (0x1U << FLASH_CR_OPTER_Pos) /*!< 0x00000020 */\r\n#define FLASH_CR_OPTER      FLASH_CR_OPTER_Msk           /*!< Option Byte Erase */\r\n#define FLASH_CR_STRT_Pos   (6U)\r\n#define FLASH_CR_STRT_Msk   (0x1U << FLASH_CR_STRT_Pos) /*!< 0x00000040 */\r\n#define FLASH_CR_STRT       FLASH_CR_STRT_Msk           /*!< Start */\r\n#define FLASH_CR_LOCK_Pos   (7U)\r\n#define FLASH_CR_LOCK_Msk   (0x1U << FLASH_CR_LOCK_Pos) /*!< 0x00000080 */\r\n#define FLASH_CR_LOCK       FLASH_CR_LOCK_Msk           /*!< Lock */\r\n#define FLASH_CR_OPTWRE_Pos (9U)\r\n#define FLASH_CR_OPTWRE_Msk (0x1U << FLASH_CR_OPTWRE_Pos) /*!< 0x00000200 */\r\n#define FLASH_CR_OPTWRE     FLASH_CR_OPTWRE_Msk           /*!< Option Bytes Write Enable */\r\n#define FLASH_CR_ERRIE_Pos  (10U)\r\n#define FLASH_CR_ERRIE_Msk  (0x1U << FLASH_CR_ERRIE_Pos) /*!< 0x00000400 */\r\n#define FLASH_CR_ERRIE      FLASH_CR_ERRIE_Msk           /*!< Error Interrupt Enable */\r\n#define FLASH_CR_EOPIE_Pos  (12U)\r\n#define FLASH_CR_EOPIE_Msk  (0x1U << FLASH_CR_EOPIE_Pos) /*!< 0x00001000 */\r\n#define FLASH_CR_EOPIE      FLASH_CR_EOPIE_Msk           /*!< End of operation interrupt enable */\r\n\r\n/*******************  Bit definition for FLASH_AR register  *******************/\r\n#define FLASH_AR_FAR_Pos (0U)\r\n#define FLASH_AR_FAR_Msk (0xFFFFFFFFU << FLASH_AR_FAR_Pos) /*!< 0xFFFFFFFF */\r\n#define FLASH_AR_FAR     FLASH_AR_FAR_Msk                  /*!< Flash Address */\r\n\r\n/******************  Bit definition for FLASH_OBR register  *******************/\r\n#define FLASH_OBR_OPTERR_Pos (0U)\r\n#define FLASH_OBR_OPTERR_Msk (0x1U << FLASH_OBR_OPTERR_Pos) /*!< 0x00000001 */\r\n#define FLASH_OBR_OPTERR     FLASH_OBR_OPTERR_Msk           /*!< Option Byte Error */\r\n#define FLASH_OBR_RDPRT_Pos  (1U)\r\n#define FLASH_OBR_RDPRT_Msk  (0x1U << FLASH_OBR_RDPRT_Pos) /*!< 0x00000002 */\r\n#define FLASH_OBR_RDPRT      FLASH_OBR_RDPRT_Msk           /*!< Read protection */\r\n\r\n#define FLASH_OBR_IWDG_SW_Pos    (2U)\r\n#define FLASH_OBR_IWDG_SW_Msk    (0x1U << FLASH_OBR_IWDG_SW_Pos) /*!< 0x00000004 */\r\n#define FLASH_OBR_IWDG_SW        FLASH_OBR_IWDG_SW_Msk           /*!< IWDG SW */\r\n#define FLASH_OBR_nRST_STOP_Pos  (3U)\r\n#define FLASH_OBR_nRST_STOP_Msk  (0x1U << FLASH_OBR_nRST_STOP_Pos) /*!< 0x00000008 */\r\n#define FLASH_OBR_nRST_STOP      FLASH_OBR_nRST_STOP_Msk           /*!< nRST_STOP */\r\n#define FLASH_OBR_nRST_STDBY_Pos (4U)\r\n#define FLASH_OBR_nRST_STDBY_Msk (0x1U << FLASH_OBR_nRST_STDBY_Pos) /*!< 0x00000010 */\r\n#define FLASH_OBR_nRST_STDBY     FLASH_OBR_nRST_STDBY_Msk           /*!< nRST_STDBY */\r\n#define FLASH_OBR_USER_Pos       (2U)\r\n#define FLASH_OBR_USER_Msk       (0x7U << FLASH_OBR_USER_Pos) /*!< 0x0000001C */\r\n#define FLASH_OBR_USER           FLASH_OBR_USER_Msk           /*!< User Option Bytes */\r\n#define FLASH_OBR_DATA0_Pos      (10U)\r\n#define FLASH_OBR_DATA0_Msk      (0xFFU << FLASH_OBR_DATA0_Pos) /*!< 0x0003FC00 */\r\n#define FLASH_OBR_DATA0          FLASH_OBR_DATA0_Msk            /*!< Data0 */\r\n#define FLASH_OBR_DATA1_Pos      (18U)\r\n#define FLASH_OBR_DATA1_Msk      (0xFFU << FLASH_OBR_DATA1_Pos) /*!< 0x03FC0000 */\r\n#define FLASH_OBR_DATA1          FLASH_OBR_DATA1_Msk            /*!< Data1 */\r\n\r\n/******************  Bit definition for FLASH_WRPR register  ******************/\r\n#define FLASH_WRPR_WRP_Pos (0U)\r\n#define FLASH_WRPR_WRP_Msk (0xFFFFFFFFU << FLASH_WRPR_WRP_Pos) /*!< 0xFFFFFFFF */\r\n#define FLASH_WRPR_WRP     FLASH_WRPR_WRP_Msk                  /*!< Write Protect */\r\n\r\n/*----------------------------------------------------------------------------*/\r\n\r\n/******************  Bit definition for FLASH_RDP register  *******************/\r\n#define FLASH_RDP_RDP_Pos  (0U)\r\n#define FLASH_RDP_RDP_Msk  (0xFFU << FLASH_RDP_RDP_Pos) /*!< 0x000000FF */\r\n#define FLASH_RDP_RDP      FLASH_RDP_RDP_Msk            /*!< Read protection option byte */\r\n#define FLASH_RDP_nRDP_Pos (8U)\r\n#define FLASH_RDP_nRDP_Msk (0xFFU << FLASH_RDP_nRDP_Pos) /*!< 0x0000FF00 */\r\n#define FLASH_RDP_nRDP     FLASH_RDP_nRDP_Msk            /*!< Read protection complemented option byte */\r\n\r\n/******************  Bit definition for FLASH_USER register  ******************/\r\n#define FLASH_USER_USER_Pos  (16U)\r\n#define FLASH_USER_USER_Msk  (0xFFU << FLASH_USER_USER_Pos) /*!< 0x00FF0000 */\r\n#define FLASH_USER_USER      FLASH_USER_USER_Msk            /*!< User option byte */\r\n#define FLASH_USER_nUSER_Pos (24U)\r\n#define FLASH_USER_nUSER_Msk (0xFFU << FLASH_USER_nUSER_Pos) /*!< 0xFF000000 */\r\n#define FLASH_USER_nUSER     FLASH_USER_nUSER_Msk            /*!< User complemented option byte */\r\n\r\n/******************  Bit definition for FLASH_Data0 register  *****************/\r\n#define FLASH_DATA0_DATA0_Pos  (0U)\r\n#define FLASH_DATA0_DATA0_Msk  (0xFFU << FLASH_DATA0_DATA0_Pos) /*!< 0x000000FF */\r\n#define FLASH_DATA0_DATA0      FLASH_DATA0_DATA0_Msk            /*!< User data storage option byte */\r\n#define FLASH_DATA0_nDATA0_Pos (8U)\r\n#define FLASH_DATA0_nDATA0_Msk (0xFFU << FLASH_DATA0_nDATA0_Pos) /*!< 0x0000FF00 */\r\n#define FLASH_DATA0_nDATA0     FLASH_DATA0_nDATA0_Msk            /*!< User data storage complemented option byte */\r\n\r\n/******************  Bit definition for FLASH_Data1 register  *****************/\r\n#define FLASH_DATA1_DATA1_Pos  (16U)\r\n#define FLASH_DATA1_DATA1_Msk  (0xFFU << FLASH_DATA1_DATA1_Pos) /*!< 0x00FF0000 */\r\n#define FLASH_DATA1_DATA1      FLASH_DATA1_DATA1_Msk            /*!< User data storage option byte */\r\n#define FLASH_DATA1_nDATA1_Pos (24U)\r\n#define FLASH_DATA1_nDATA1_Msk (0xFFU << FLASH_DATA1_nDATA1_Pos) /*!< 0xFF000000 */\r\n#define FLASH_DATA1_nDATA1     FLASH_DATA1_nDATA1_Msk            /*!< User data storage complemented option byte */\r\n\r\n/******************  Bit definition for FLASH_WRP0 register  ******************/\r\n#define FLASH_WRP0_WRP0_Pos  (0U)\r\n#define FLASH_WRP0_WRP0_Msk  (0xFFU << FLASH_WRP0_WRP0_Pos) /*!< 0x000000FF */\r\n#define FLASH_WRP0_WRP0      FLASH_WRP0_WRP0_Msk            /*!< Flash memory write protection option bytes */\r\n#define FLASH_WRP0_nWRP0_Pos (8U)\r\n#define FLASH_WRP0_nWRP0_Msk (0xFFU << FLASH_WRP0_nWRP0_Pos) /*!< 0x0000FF00 */\r\n#define FLASH_WRP0_nWRP0     FLASH_WRP0_nWRP0_Msk            /*!< Flash memory write protection complemented option bytes */\r\n\r\n/******************  Bit definition for FLASH_WRP1 register  ******************/\r\n#define FLASH_WRP1_WRP1_Pos  (16U)\r\n#define FLASH_WRP1_WRP1_Msk  (0xFFU << FLASH_WRP1_WRP1_Pos) /*!< 0x00FF0000 */\r\n#define FLASH_WRP1_WRP1      FLASH_WRP1_WRP1_Msk            /*!< Flash memory write protection option bytes */\r\n#define FLASH_WRP1_nWRP1_Pos (24U)\r\n#define FLASH_WRP1_nWRP1_Msk (0xFFU << FLASH_WRP1_nWRP1_Pos) /*!< 0xFF000000 */\r\n#define FLASH_WRP1_nWRP1     FLASH_WRP1_nWRP1_Msk            /*!< Flash memory write protection complemented option bytes */\r\n\r\n/******************  Bit definition for FLASH_WRP2 register  ******************/\r\n#define FLASH_WRP2_WRP2_Pos  (0U)\r\n#define FLASH_WRP2_WRP2_Msk  (0xFFU << FLASH_WRP2_WRP2_Pos) /*!< 0x000000FF */\r\n#define FLASH_WRP2_WRP2      FLASH_WRP2_WRP2_Msk            /*!< Flash memory write protection option bytes */\r\n#define FLASH_WRP2_nWRP2_Pos (8U)\r\n#define FLASH_WRP2_nWRP2_Msk (0xFFU << FLASH_WRP2_nWRP2_Pos) /*!< 0x0000FF00 */\r\n#define FLASH_WRP2_nWRP2     FLASH_WRP2_nWRP2_Msk            /*!< Flash memory write protection complemented option bytes */\r\n\r\n/******************  Bit definition for FLASH_WRP3 register  ******************/\r\n#define FLASH_WRP3_WRP3_Pos  (16U)\r\n#define FLASH_WRP3_WRP3_Msk  (0xFFU << FLASH_WRP3_WRP3_Pos) /*!< 0x00FF0000 */\r\n#define FLASH_WRP3_WRP3      FLASH_WRP3_WRP3_Msk            /*!< Flash memory write protection option bytes */\r\n#define FLASH_WRP3_nWRP3_Pos (24U)\r\n#define FLASH_WRP3_nWRP3_Msk (0xFFU << FLASH_WRP3_nWRP3_Pos) /*!< 0xFF000000 */\r\n#define FLASH_WRP3_nWRP3     FLASH_WRP3_nWRP3_Msk            /*!< Flash memory write protection complemented option bytes */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Exported_macro\r\n * @{\r\n */\r\n\r\n/****************************** ADC Instances *********************************/\r\n#define IS_ADC_ALL_INSTANCE(INSTANCE) (((INSTANCE) == ADC1) || ((INSTANCE) == ADC2))\r\n\r\n#define IS_ADC_COMMON_INSTANCE(INSTANCE) ((INSTANCE) == ADC12_COMMON)\r\n\r\n#define IS_ADC_MULTIMODE_MASTER_INSTANCE(INSTANCE) ((INSTANCE) == ADC1)\r\n\r\n#define IS_ADC_DMA_CAPABILITY_INSTANCE(INSTANCE) ((INSTANCE) == ADC1)\r\n\r\n/****************************** CAN Instances *********************************/\r\n#define IS_CAN_ALL_INSTANCE(INSTANCE) ((INSTANCE) == CAN1)\r\n\r\n/****************************** CRC Instances *********************************/\r\n#define IS_CRC_ALL_INSTANCE(INSTANCE) ((INSTANCE) == CRC)\r\n\r\n/****************************** DAC Instances *********************************/\r\n\r\n/****************************** DMA Instances *********************************/\r\n#define IS_DMA_ALL_INSTANCE(INSTANCE)                                                                                                                                                                 \\\r\n  (((INSTANCE) == DMA1_Channel1) || ((INSTANCE) == DMA1_Channel2) || ((INSTANCE) == DMA1_Channel3) || ((INSTANCE) == DMA1_Channel4) || ((INSTANCE) == DMA1_Channel5) || ((INSTANCE) == DMA1_Channel6) \\\r\n   || ((INSTANCE) == DMA1_Channel7))\r\n\r\n/******************************* GPIO Instances *******************************/\r\n#define IS_GPIO_ALL_INSTANCE(INSTANCE) (((INSTANCE) == GPIOA) || ((INSTANCE) == GPIOB) || ((INSTANCE) == GPIOC) || ((INSTANCE) == GPIOD) || ((INSTANCE) == GPIOE))\r\n\r\n/**************************** GPIO Alternate Function Instances ***************/\r\n#define IS_GPIO_AF_INSTANCE(INSTANCE) IS_GPIO_ALL_INSTANCE(INSTANCE)\r\n\r\n/**************************** GPIO Lock Instances *****************************/\r\n#define IS_GPIO_LOCK_INSTANCE(INSTANCE) IS_GPIO_ALL_INSTANCE(INSTANCE)\r\n\r\n/******************************** I2C Instances *******************************/\r\n#define IS_I2C_ALL_INSTANCE(INSTANCE) (((INSTANCE) == I2C1) || ((INSTANCE) == I2C2))\r\n\r\n/******************************* SMBUS Instances ******************************/\r\n#define IS_SMBUS_ALL_INSTANCE IS_I2C_ALL_INSTANCE\r\n\r\n/****************************** IWDG Instances ********************************/\r\n#define IS_IWDG_ALL_INSTANCE(INSTANCE) ((INSTANCE) == IWDG)\r\n\r\n/******************************** SPI Instances *******************************/\r\n#define IS_SPI_ALL_INSTANCE(INSTANCE) (((INSTANCE) == SPI1) || ((INSTANCE) == SPI2))\r\n\r\n/****************************** START TIM Instances ***************************/\r\n/****************************** TIM Instances *********************************/\r\n#define IS_TIM_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_ADVANCED_INSTANCE(INSTANCE) ((INSTANCE) == TIM1)\r\n\r\n#define IS_TIM_CC1_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CC2_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CC3_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CC4_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CLOCKSOURCE_TIX_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_OCXREF_CLEAR_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_ENCODER_INTERFACE_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_XOR_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_MASTER_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_SLAVE_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_SYNCHRO_INSTANCE(INSTANCE) IS_TIM_MASTER_INSTANCE(INSTANCE)\r\n\r\n#define IS_TIM_DMABURST_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_BREAK_INSTANCE(INSTANCE) ((INSTANCE) == TIM1)\r\n\r\n#define IS_TIM_CCX_INSTANCE(INSTANCE, CHANNEL)                                                                                                                 \\\r\n  ((((INSTANCE) == TIM1) && (((CHANNEL) == TIM_CHANNEL_1) || ((CHANNEL) == TIM_CHANNEL_2) || ((CHANNEL) == TIM_CHANNEL_3) || ((CHANNEL) == TIM_CHANNEL_4)))    \\\r\n   || (((INSTANCE) == TIM2) && (((CHANNEL) == TIM_CHANNEL_1) || ((CHANNEL) == TIM_CHANNEL_2) || ((CHANNEL) == TIM_CHANNEL_3) || ((CHANNEL) == TIM_CHANNEL_4))) \\\r\n   || (((INSTANCE) == TIM3) && (((CHANNEL) == TIM_CHANNEL_1) || ((CHANNEL) == TIM_CHANNEL_2) || ((CHANNEL) == TIM_CHANNEL_3) || ((CHANNEL) == TIM_CHANNEL_4))) \\\r\n   || (((INSTANCE) == TIM4) && (((CHANNEL) == TIM_CHANNEL_1) || ((CHANNEL) == TIM_CHANNEL_2) || ((CHANNEL) == TIM_CHANNEL_3) || ((CHANNEL) == TIM_CHANNEL_4))))\r\n\r\n#define IS_TIM_CCXN_INSTANCE(INSTANCE, CHANNEL) (((INSTANCE) == TIM1) && (((CHANNEL) == TIM_CHANNEL_1) || ((CHANNEL) == TIM_CHANNEL_2) || ((CHANNEL) == TIM_CHANNEL_3)))\r\n\r\n#define IS_TIM_COUNTER_MODE_SELECT_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_REPETITION_COUNTER_INSTANCE(INSTANCE) ((INSTANCE) == TIM1)\r\n\r\n#define IS_TIM_CLOCK_DIVISION_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_DMA_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_DMA_CC_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_COMMUTATION_EVENT_INSTANCE(INSTANCE) ((INSTANCE) == TIM1)\r\n\r\n#define IS_TIM_ETR_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(INSTANCE) (((INSTANCE) == TIM1) || ((INSTANCE) == TIM2) || ((INSTANCE) == TIM3) || ((INSTANCE) == TIM4))\r\n\r\n#define IS_TIM_32B_COUNTER_INSTANCE(INSTANCE) 0U\r\n\r\n/****************************** END TIM Instances *****************************/\r\n\r\n/******************** USART Instances : Synchronous mode **********************/\r\n#define IS_USART_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/******************** UART Instances : Asynchronous mode **********************/\r\n#define IS_UART_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/******************** UART Instances : Half-Duplex mode **********************/\r\n#define IS_UART_HALFDUPLEX_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/******************** UART Instances : LIN mode **********************/\r\n#define IS_UART_LIN_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/****************** UART Instances : Hardware Flow control ********************/\r\n#define IS_UART_HWFLOW_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/********************* UART Instances : Smard card mode ***********************/\r\n#define IS_SMARTCARD_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/*********************** UART Instances : IRDA mode ***************************/\r\n#define IS_IRDA_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/***************** UART Instances : Multi-Processor mode **********************/\r\n#define IS_UART_MULTIPROCESSOR_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/***************** UART Instances : DMA mode available **********************/\r\n#define IS_UART_DMA_INSTANCE(INSTANCE) (((INSTANCE) == USART1) || ((INSTANCE) == USART2) || ((INSTANCE) == USART3))\r\n\r\n/****************************** RTC Instances *********************************/\r\n#define IS_RTC_ALL_INSTANCE(INSTANCE) ((INSTANCE) == RTC)\r\n\r\n/**************************** WWDG Instances *****************************/\r\n#define IS_WWDG_ALL_INSTANCE(INSTANCE) ((INSTANCE) == WWDG)\r\n\r\n/****************************** USB Instances ********************************/\r\n#define IS_USB_ALL_INSTANCE(INSTANCE) ((INSTANCE) == USB)\r\n\r\n#define RCC_HSE_MIN 4000000U\r\n#define RCC_HSE_MAX 16000000U\r\n\r\n#define RCC_MAX_FREQUENCY 72000000U\r\n\r\n/**\r\n * @}\r\n */\r\n/******************************************************************************/\r\n/*  For a painless codes migration between the STM32F1xx device product       */\r\n/*  lines, the aliases defined below are put in place to overcome the         */\r\n/*  differences in the interrupt handlers and IRQn definitions.               */\r\n/*  No need to update developed interrupt code when moving across             */\r\n/*  product lines within the same STM32F1 Family                              */\r\n/******************************************************************************/\r\n\r\n/* Aliases for __IRQn */\r\n#define ADC1_IRQn               ADC1_2_IRQn\r\n#define TIM9_IRQn               TIM1_BRK_IRQn\r\n#define TIM1_BRK_TIM9_IRQn      TIM1_BRK_IRQn\r\n#define TIM1_BRK_TIM15_IRQn     TIM1_BRK_IRQn\r\n#define TIM1_TRG_COM_TIM17_IRQn TIM1_TRG_COM_IRQn\r\n#define TIM1_TRG_COM_TIM11_IRQn TIM1_TRG_COM_IRQn\r\n#define TIM11_IRQn              TIM1_TRG_COM_IRQn\r\n#define TIM1_UP_TIM10_IRQn      TIM1_UP_IRQn\r\n#define TIM1_UP_TIM16_IRQn      TIM1_UP_IRQn\r\n#define TIM10_IRQn              TIM1_UP_IRQn\r\n#define OTG_FS_WKUP_IRQn        USBWakeUp_IRQn\r\n#define CEC_IRQn                USBWakeUp_IRQn\r\n#define USB_HP_IRQn             USB_HP_CAN1_TX_IRQn\r\n#define CAN1_TX_IRQn            USB_HP_CAN1_TX_IRQn\r\n#define CAN1_RX0_IRQn           USB_LP_CAN1_RX0_IRQn\r\n#define USB_LP_IRQn             USB_LP_CAN1_RX0_IRQn\r\n\r\n/* Aliases for __IRQHandler */\r\n#define ADC1_IRQHandler               ADC1_2_IRQHandler\r\n#define TIM9_IRQHandler               TIM1_BRK_IRQHandler\r\n#define TIM1_BRK_TIM9_IRQHandler      TIM1_BRK_IRQHandler\r\n#define TIM1_BRK_TIM15_IRQHandler     TIM1_BRK_IRQHandler\r\n#define TIM1_TRG_COM_TIM17_IRQHandler TIM1_TRG_COM_IRQHandler\r\n#define TIM1_TRG_COM_TIM11_IRQHandler TIM1_TRG_COM_IRQHandler\r\n#define TIM11_IRQHandler              TIM1_TRG_COM_IRQHandler\r\n#define TIM1_UP_TIM10_IRQHandler      TIM1_UP_IRQHandler\r\n#define TIM1_UP_TIM16_IRQHandler      TIM1_UP_IRQHandler\r\n#define TIM10_IRQHandler              TIM1_UP_IRQHandler\r\n#define OTG_FS_WKUP_IRQHandler        USBWakeUp_IRQHandler\r\n#define CEC_IRQHandler                USBWakeUp_IRQHandler\r\n#define USB_HP_IRQHandler             USB_HP_CAN1_TX_IRQHandler\r\n#define CAN1_TX_IRQHandler            USB_HP_CAN1_TX_IRQHandler\r\n#define CAN1_RX0_IRQHandler           USB_LP_CAN1_RX0_IRQHandler\r\n#define USB_LP_IRQHandler             USB_LP_CAN1_RX0_IRQHandler\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif /* __cplusplus */\r\n\r\n#endif /* __STM32F103xB_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx.h\r\n * @author  MCD Application Team\r\n * @version V4.2.0\r\n * @date    31-March-2017\r\n * @brief   CMSIS STM32F1xx Device Peripheral Access Layer Header File.\r\n *\r\n *          The file is the unique include file that the application programmer\r\n *          is using in the C source code, usually in main.c. This file contains:\r\n *            - Configuration section that allows to select:\r\n *              - The STM32F1xx device used in the target application\r\n *              - To use or not the peripherals drivers in application code(i.e.\r\n *                code will be based on direct access to peripherals registers\r\n *                rather than drivers API), this option is controlled by\r\n *                \"#define USE_HAL_DRIVER\"\r\n *\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/** @addtogroup CMSIS\r\n * @{\r\n */\r\n\r\n/** @addtogroup stm32f1xx\r\n * @{\r\n */\r\n\r\n#ifndef __STM32F1XX_H\r\n#define __STM32F1XX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif /* __cplusplus */\r\n\r\n/** @addtogroup Library_configuration_section\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief STM32 Family\r\n */\r\n#if !defined(STM32F1)\r\n#define STM32F1\r\n#endif /* STM32F1 */\r\n\r\n/* Uncomment the line below according to the target STM32L device used in your\r\n   application\r\n  */\r\n\r\n#if !defined(STM32F100xB) && !defined(STM32F100xE) && !defined(STM32F101x6) && !defined(STM32F101xB) && !defined(STM32F101xE) && !defined(STM32F101xG) && !defined(STM32F102x6) \\\r\n    && !defined(STM32F102xB) && !defined(STM32F103x6) && !defined(STM32F103xB) && !defined(STM32F103xE) && !defined(STM32F103xG) && !defined(STM32F105xC) && !defined(STM32F107xC)\r\n/* #define STM32F100xB  */ /*!< STM32F100C4, STM32F100R4, STM32F100C6, STM32F100R6, STM32F100C8, STM32F100R8, STM32F100V8, STM32F100CB, STM32F100RB and STM32F100VB */\r\n/* #define STM32F100xE */  /*!< STM32F100RC, STM32F100VC, STM32F100ZC, STM32F100RD, STM32F100VD, STM32F100ZD, STM32F100RE, STM32F100VE and STM32F100ZE */\r\n/* #define STM32F101x6  */ /*!< STM32F101C4, STM32F101R4, STM32F101T4, STM32F101C6, STM32F101R6 and STM32F101T6 Devices */\r\n/* #define STM32F101xB  */ /*!< STM32F101C8, STM32F101R8, STM32F101T8, STM32F101V8, STM32F101CB, STM32F101RB, STM32F101TB and STM32F101VB */\r\n/* #define STM32F101xE */  /*!< STM32F101RC, STM32F101VC, STM32F101ZC, STM32F101RD, STM32F101VD, STM32F101ZD, STM32F101RE, STM32F101VE and STM32F101ZE */\r\n/* #define STM32F101xG  */ /*!< STM32F101RF, STM32F101VF, STM32F101ZF, STM32F101RG, STM32F101VG and STM32F101ZG */\r\n/* #define STM32F102x6 */  /*!< STM32F102C4, STM32F102R4, STM32F102C6 and STM32F102R6 */\r\n/* #define STM32F102xB  */ /*!< STM32F102C8, STM32F102R8, STM32F102CB and STM32F102RB */\r\n/* #define STM32F103x6  */ /*!< STM32F103C4, STM32F103R4, STM32F103T4, STM32F103C6, STM32F103R6 and STM32F103T6 */\r\n/* #define STM32F103xB  */ /*!< STM32F103C8, STM32F103R8, STM32F103T8, STM32F103V8, STM32F103CB, STM32F103RB, STM32F103TB and STM32F103VB */\r\n/* #define STM32F103xE */  /*!< STM32F103RC, STM32F103VC, STM32F103ZC, STM32F103RD, STM32F103VD, STM32F103ZD, STM32F103RE, STM32F103VE and STM32F103ZE */\r\n/* #define STM32F103xG  */ /*!< STM32F103RF, STM32F103VF, STM32F103ZF, STM32F103RG, STM32F103VG and STM32F103ZG */\r\n/* #define STM32F105xC */  /*!< STM32F105R8, STM32F105V8, STM32F105RB, STM32F105VB, STM32F105RC and STM32F105VC */\r\n/* #define STM32F107xC  */ /*!< STM32F107RB, STM32F107VB, STM32F107RC and STM32F107VC */\r\n#endif\r\n\r\n/*  Tip: To avoid modifying this file each time you need to switch between these\r\n        devices, you can define the device in your toolchain compiler preprocessor.\r\n  */\r\n\r\n#if !defined(USE_HAL_DRIVER)\r\n/**\r\n * @brief Comment the line below if you will not use the peripherals drivers.\r\n   In this case, these drivers will not be included and the application code will\r\n   be based on direct access to peripherals registers\r\n   */\r\n/*#define USE_HAL_DRIVER */\r\n#endif /* USE_HAL_DRIVER */\r\n\r\n/**\r\n * @brief CMSIS Device version number V4.2.0\r\n */\r\n#define __STM32F1_CMSIS_VERSION_MAIN (0x04) /*!< [31:24] main version */\r\n#define __STM32F1_CMSIS_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */\r\n#define __STM32F1_CMSIS_VERSION_SUB2 (0x00) /*!< [15:8]  sub2 version */\r\n#define __STM32F1_CMSIS_VERSION_RC   (0x00) /*!< [7:0]  release candidate */\r\n#define __STM32F1_CMSIS_VERSION      ((__STM32F1_CMSIS_VERSION_MAIN << 24) | (__STM32F1_CMSIS_VERSION_SUB1 << 16) | (__STM32F1_CMSIS_VERSION_SUB2 << 8) | (__STM32F1_CMSIS_VERSION_RC))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Device_Included\r\n * @{\r\n */\r\n\r\n#if defined(STM32F100xB)\r\n#include \"stm32f100xb.h\"\r\n#elif defined(STM32F100xE)\r\n#include \"stm32f100xe.h\"\r\n#elif defined(STM32F101x6)\r\n#include \"stm32f101x6.h\"\r\n#elif defined(STM32F101xB)\r\n#include \"stm32f101xb.h\"\r\n#elif defined(STM32F101xE)\r\n#include \"stm32f101xe.h\"\r\n#elif defined(STM32F101xG)\r\n#include \"stm32f101xg.h\"\r\n#elif defined(STM32F102x6)\r\n#include \"stm32f102x6.h\"\r\n#elif defined(STM32F102xB)\r\n#include \"stm32f102xb.h\"\r\n#elif defined(STM32F103x6)\r\n#include \"stm32f103x6.h\"\r\n#elif defined(STM32F103xB)\r\n#include \"stm32f103xb.h\"\r\n#elif defined(STM32F103xE)\r\n#include \"stm32f103xe.h\"\r\n#elif defined(STM32F103xG)\r\n#include \"stm32f103xg.h\"\r\n#elif defined(STM32F105xC)\r\n#include \"stm32f105xc.h\"\r\n#elif defined(STM32F107xC)\r\n#include \"stm32f107xc.h\"\r\n#else\r\n#error \"Please select first the target STM32F1xx device used in your application (in stm32f1xx.h file)\"\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Exported_types\r\n * @{\r\n */\r\ntypedef enum { RESET = 0, SET = !RESET } FlagStatus, ITStatus;\r\n\r\ntypedef enum { DISABLE = 0, ENABLE = !DISABLE } FunctionalState;\r\n#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))\r\n\r\ntypedef enum { ERROR = 0, SUCCESS = !ERROR } ErrorStatus;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup Exported_macros\r\n * @{\r\n */\r\n#define SET_BIT(REG, BIT) ((REG) |= (BIT))\r\n\r\n#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))\r\n\r\n#define READ_BIT(REG, BIT) ((REG) & (BIT))\r\n\r\n#define CLEAR_REG(REG) ((REG) = (0x0))\r\n\r\n#define WRITE_REG(REG, VAL) ((REG) = (VAL))\r\n\r\n#define READ_REG(REG) ((REG))\r\n\r\n#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))\r\n\r\n#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(USE_HAL_DRIVER)\r\n#include \"stm32f1xx_hal.h\"\r\n#endif /* USE_HAL_DRIVER */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif /* __cplusplus */\r\n\r\n#endif /* __STM32F1xx_H */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Device/ST/STM32F1xx/Include/system_stm32f1xx.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    system_stm32f10x.h\r\n * @author  MCD Application Team\r\n * @version V4.2.0\r\n * @date    31-March-2017\r\n * @brief   CMSIS Cortex-M3 Device Peripheral Access Layer System Header File.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/** @addtogroup CMSIS\r\n * @{\r\n */\r\n\r\n/** @addtogroup stm32f10x_system\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief Define to prevent recursive inclusion\r\n */\r\n#ifndef __SYSTEM_STM32F10X_H\r\n#define __SYSTEM_STM32F10X_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/** @addtogroup STM32F10x_System_Includes\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup STM32F10x_System_Exported_types\r\n * @{\r\n */\r\n\r\nextern uint32_t      SystemCoreClock;    /*!< System Clock Frequency (Core Clock) */\r\nextern const uint8_t AHBPrescTable[16U]; /*!< AHB prescalers table values */\r\nextern const uint8_t APBPrescTable[8U];  /*!< APB prescalers table values */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup STM32F10x_System_Exported_Constants\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup STM32F10x_System_Exported_Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup STM32F10x_System_Exported_Functions\r\n * @{\r\n */\r\n\r\nextern void SystemInit(void);\r\nextern void SystemCoreClockUpdate(void);\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /*__SYSTEM_STM32F10X_H */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Include/arm_common_tables.h",
    "content": "/* ----------------------------------------------------------------------\r\n * Copyright (C) 2010-2014 ARM Limited. All rights reserved.\r\n *\r\n * $Date:        19. October 2015\r\n * $Revision: \tV.1.4.5 a\r\n *\r\n * Project: \t    CMSIS DSP Library\r\n * Title:\t    arm_common_tables.h\r\n *\r\n * Description:\tThis file has extern declaration for common tables like Bitreverse, reciprocal etc which are used across different functions\r\n *\r\n * Target Processor: Cortex-M4/Cortex-M3\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions\r\n * are met:\r\n *   - Redistributions of source code must retain the above copyright\r\n *     notice, this list of conditions and the following disclaimer.\r\n *   - Redistributions in binary form must reproduce the above copyright\r\n *     notice, this list of conditions and the following disclaimer in\r\n *     the documentation and/or other materials provided with the\r\n *     distribution.\r\n *   - Neither the name of ARM LIMITED nor the names of its contributors\r\n *     may be used to endorse or promote products derived from this\r\n *     software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\r\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\r\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\r\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r\n * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * -------------------------------------------------------------------- */\r\n\r\n#ifndef _ARM_COMMON_TABLES_H\r\n#define _ARM_COMMON_TABLES_H\r\n\r\n#include \"arm_math.h\"\r\n\r\nextern const uint16_t armBitRevTable[1024];\r\nextern const q15_t    armRecipTableQ15[64];\r\nextern const q31_t    armRecipTableQ31[64];\r\n/* extern const q31_t realCoefAQ31[1024]; */\r\n/* extern const q31_t realCoefBQ31[1024]; */\r\nextern const float32_t twiddleCoef_16[32];\r\nextern const float32_t twiddleCoef_32[64];\r\nextern const float32_t twiddleCoef_64[128];\r\nextern const float32_t twiddleCoef_128[256];\r\nextern const float32_t twiddleCoef_256[512];\r\nextern const float32_t twiddleCoef_512[1024];\r\nextern const float32_t twiddleCoef_1024[2048];\r\nextern const float32_t twiddleCoef_2048[4096];\r\nextern const float32_t twiddleCoef_4096[8192];\r\n#define twiddleCoef twiddleCoef_4096\r\nextern const q31_t     twiddleCoef_16_q31[24];\r\nextern const q31_t     twiddleCoef_32_q31[48];\r\nextern const q31_t     twiddleCoef_64_q31[96];\r\nextern const q31_t     twiddleCoef_128_q31[192];\r\nextern const q31_t     twiddleCoef_256_q31[384];\r\nextern const q31_t     twiddleCoef_512_q31[768];\r\nextern const q31_t     twiddleCoef_1024_q31[1536];\r\nextern const q31_t     twiddleCoef_2048_q31[3072];\r\nextern const q31_t     twiddleCoef_4096_q31[6144];\r\nextern const q15_t     twiddleCoef_16_q15[24];\r\nextern const q15_t     twiddleCoef_32_q15[48];\r\nextern const q15_t     twiddleCoef_64_q15[96];\r\nextern const q15_t     twiddleCoef_128_q15[192];\r\nextern const q15_t     twiddleCoef_256_q15[384];\r\nextern const q15_t     twiddleCoef_512_q15[768];\r\nextern const q15_t     twiddleCoef_1024_q15[1536];\r\nextern const q15_t     twiddleCoef_2048_q15[3072];\r\nextern const q15_t     twiddleCoef_4096_q15[6144];\r\nextern const float32_t twiddleCoef_rfft_32[32];\r\nextern const float32_t twiddleCoef_rfft_64[64];\r\nextern const float32_t twiddleCoef_rfft_128[128];\r\nextern const float32_t twiddleCoef_rfft_256[256];\r\nextern const float32_t twiddleCoef_rfft_512[512];\r\nextern const float32_t twiddleCoef_rfft_1024[1024];\r\nextern const float32_t twiddleCoef_rfft_2048[2048];\r\nextern const float32_t twiddleCoef_rfft_4096[4096];\r\n\r\n/* floating-point bit reversal tables */\r\n#define ARMBITREVINDEXTABLE__16_TABLE_LENGTH ((uint16_t)20)\r\n#define ARMBITREVINDEXTABLE__32_TABLE_LENGTH ((uint16_t)48)\r\n#define ARMBITREVINDEXTABLE__64_TABLE_LENGTH ((uint16_t)56)\r\n#define ARMBITREVINDEXTABLE_128_TABLE_LENGTH ((uint16_t)208)\r\n#define ARMBITREVINDEXTABLE_256_TABLE_LENGTH ((uint16_t)440)\r\n#define ARMBITREVINDEXTABLE_512_TABLE_LENGTH ((uint16_t)448)\r\n#define ARMBITREVINDEXTABLE1024_TABLE_LENGTH ((uint16_t)1800)\r\n#define ARMBITREVINDEXTABLE2048_TABLE_LENGTH ((uint16_t)3808)\r\n#define ARMBITREVINDEXTABLE4096_TABLE_LENGTH ((uint16_t)4032)\r\n\r\nextern const uint16_t armBitRevIndexTable16[ARMBITREVINDEXTABLE__16_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable32[ARMBITREVINDEXTABLE__32_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable64[ARMBITREVINDEXTABLE__64_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable128[ARMBITREVINDEXTABLE_128_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable256[ARMBITREVINDEXTABLE_256_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable512[ARMBITREVINDEXTABLE_512_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable1024[ARMBITREVINDEXTABLE1024_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable2048[ARMBITREVINDEXTABLE2048_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable4096[ARMBITREVINDEXTABLE4096_TABLE_LENGTH];\r\n\r\n/* fixed-point bit reversal tables */\r\n#define ARMBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH ((uint16_t)12)\r\n#define ARMBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH ((uint16_t)24)\r\n#define ARMBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH ((uint16_t)56)\r\n#define ARMBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH ((uint16_t)112)\r\n#define ARMBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH ((uint16_t)240)\r\n#define ARMBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH ((uint16_t)480)\r\n#define ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH ((uint16_t)992)\r\n#define ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH ((uint16_t)1984)\r\n#define ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH ((uint16_t)4032)\r\n\r\nextern const uint16_t armBitRevIndexTable_fixed_16[ARMBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable_fixed_32[ARMBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable_fixed_64[ARMBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable_fixed_128[ARMBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable_fixed_256[ARMBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable_fixed_512[ARMBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable_fixed_1024[ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable_fixed_2048[ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH];\r\nextern const uint16_t armBitRevIndexTable_fixed_4096[ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH];\r\n\r\n/* Tables for Fast Math Sine and Cosine */\r\nextern const float32_t sinTable_f32[FAST_MATH_TABLE_SIZE + 1];\r\nextern const q31_t     sinTable_q31[FAST_MATH_TABLE_SIZE + 1];\r\nextern const q15_t     sinTable_q15[FAST_MATH_TABLE_SIZE + 1];\r\n\r\n#endif /*  ARM_COMMON_TABLES_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Include/arm_const_structs.h",
    "content": "/* ----------------------------------------------------------------------\r\n * Copyright (C) 2010-2014 ARM Limited. All rights reserved.\r\n *\r\n * $Date:        19. March 2015\r\n * $Revision: \tV.1.4.5\r\n *\r\n * Project: \t    CMSIS DSP Library\r\n * Title:\t    arm_const_structs.h\r\n *\r\n * Description:\tThis file has constant structs that are initialized for\r\n *              user convenience.  For example, some can be given as\r\n *              arguments to the arm_cfft_f32() function.\r\n *\r\n * Target Processor: Cortex-M4/Cortex-M3\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions\r\n * are met:\r\n *   - Redistributions of source code must retain the above copyright\r\n *     notice, this list of conditions and the following disclaimer.\r\n *   - Redistributions in binary form must reproduce the above copyright\r\n *     notice, this list of conditions and the following disclaimer in\r\n *     the documentation and/or other materials provided with the\r\n *     distribution.\r\n *   - Neither the name of ARM LIMITED nor the names of its contributors\r\n *     may be used to endorse or promote products derived from this\r\n *     software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\r\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\r\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\r\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r\n * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * -------------------------------------------------------------------- */\r\n\r\n#ifndef _ARM_CONST_STRUCTS_H\r\n#define _ARM_CONST_STRUCTS_H\r\n\r\n#include \"arm_common_tables.h\"\r\n#include \"arm_math.h\"\r\n\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len16;\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len32;\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len64;\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len128;\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len256;\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len512;\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len1024;\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len2048;\r\nextern const arm_cfft_instance_f32 arm_cfft_sR_f32_len4096;\r\n\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len16;\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len32;\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len64;\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len128;\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len256;\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len512;\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len1024;\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len2048;\r\nextern const arm_cfft_instance_q31 arm_cfft_sR_q31_len4096;\r\n\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len16;\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len32;\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len64;\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len128;\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len256;\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len512;\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len1024;\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len2048;\r\nextern const arm_cfft_instance_q15 arm_cfft_sR_q15_len4096;\r\n\r\n#endif\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Include/arm_math.h",
    "content": "/* ----------------------------------------------------------------------\r\n * Copyright (C) 2010-2015 ARM Limited. All rights reserved.\r\n *\r\n * $Date:        20. October 2015\r\n * $Revision:    V1.4.5 b\r\n *\r\n * Project:      CMSIS DSP Library\r\n * Title:        arm_math.h\r\n *\r\n * Description:  Public header file for CMSIS DSP Library\r\n *\r\n * Target Processor: Cortex-M7/Cortex-M4/Cortex-M3/Cortex-M0\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions\r\n * are met:\r\n *   - Redistributions of source code must retain the above copyright\r\n *     notice, this list of conditions and the following disclaimer.\r\n *   - Redistributions in binary form must reproduce the above copyright\r\n *     notice, this list of conditions and the following disclaimer in\r\n *     the documentation and/or other materials provided with the\r\n *     distribution.\r\n *   - Neither the name of ARM LIMITED nor the names of its contributors\r\n *     may be used to endorse or promote products derived from this\r\n *     software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\r\n * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\r\n * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\r\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\r\n * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * -------------------------------------------------------------------- */\r\n\r\n/**\r\n   \\mainpage CMSIS DSP Software Library\r\n   *\r\n   * Introduction\r\n   * ------------\r\n   *\r\n   * This user manual describes the CMSIS DSP software library,\r\n   * a suite of common signal processing functions for use on Cortex-M processor based devices.\r\n   *\r\n   * The library is divided into a number of functions each covering a specific category:\r\n   * - Basic math functions\r\n   * - Fast math functions\r\n   * - Complex math functions\r\n   * - Filters\r\n   * - Matrix functions\r\n   * - Transforms\r\n   * - Motor control functions\r\n   * - Statistical functions\r\n   * - Support functions\r\n   * - Interpolation functions\r\n   *\r\n   * The library has separate functions for operating on 8-bit integers, 16-bit integers,\r\n   * 32-bit integer and 32-bit floating-point values.\r\n   *\r\n   * Using the Library\r\n   * ------------\r\n   *\r\n   * The library installer contains prebuilt versions of the libraries in the <code>Lib</code> folder.\r\n   * - arm_cortexM7lfdp_math.lib (Little endian and Double Precision Floating Point Unit on Cortex-M7)\r\n   * - arm_cortexM7bfdp_math.lib (Big endian and Double Precision Floating Point Unit on Cortex-M7)\r\n   * - arm_cortexM7lfsp_math.lib (Little endian and Single Precision Floating Point Unit on Cortex-M7)\r\n   * - arm_cortexM7bfsp_math.lib (Big endian and Single Precision Floating Point Unit on Cortex-M7)\r\n   * - arm_cortexM7l_math.lib (Little endian on Cortex-M7)\r\n   * - arm_cortexM7b_math.lib (Big endian on Cortex-M7)\r\n   * - arm_cortexM4lf_math.lib (Little endian and Floating Point Unit on Cortex-M4)\r\n   * - arm_cortexM4bf_math.lib (Big endian and Floating Point Unit on Cortex-M4)\r\n   * - arm_cortexM4l_math.lib (Little endian on Cortex-M4)\r\n   * - arm_cortexM4b_math.lib (Big endian on Cortex-M4)\r\n   * - arm_cortexM3l_math.lib (Little endian on Cortex-M3)\r\n   * - arm_cortexM3b_math.lib (Big endian on Cortex-M3)\r\n   * - arm_cortexM0l_math.lib (Little endian on Cortex-M0 / CortexM0+)\r\n   * - arm_cortexM0b_math.lib (Big endian on Cortex-M0 / CortexM0+)\r\n   *\r\n   * The library functions are declared in the public file <code>arm_math.h</code> which is placed in the <code>Include</code> folder.\r\n   * Simply include this file and link the appropriate library in the application and begin calling the library functions. The Library supports single\r\n   * public header file <code> arm_math.h</code> for Cortex-M7/M4/M3/M0/M0+ with little endian and big endian. Same header file will be used for floating point unit(FPU) variants.\r\n   * Define the appropriate pre processor MACRO ARM_MATH_CM7 or ARM_MATH_CM4 or  ARM_MATH_CM3 or\r\n   * ARM_MATH_CM0 or ARM_MATH_CM0PLUS depending on the target processor in the application.\r\n   *\r\n   * Examples\r\n   * --------\r\n   *\r\n   * The library ships with a number of examples which demonstrate how to use the library functions.\r\n   *\r\n   * Toolchain Support\r\n   * ------------\r\n   *\r\n   * The library has been developed and tested with MDK-ARM version 5.14.0.0\r\n   * The library is being tested in GCC and IAR toolchains and updates on this activity will be made available shortly.\r\n   *\r\n   * Building the Library\r\n   * ------------\r\n   *\r\n   * The library installer contains a project file to re build libraries on MDK-ARM Tool chain in the <code>CMSIS\\\\DSP_Lib\\\\Source\\\\ARM</code> folder.\r\n   * - arm_cortexM_math.uvprojx\r\n   *\r\n   *\r\n   * The libraries can be built by opening the arm_cortexM_math.uvprojx project in MDK-ARM, selecting a specific target, and defining the optional pre processor MACROs detailed above.\r\n   *\r\n   * Pre-processor Macros\r\n   * ------------\r\n   *\r\n   * Each library project have differant pre-processor macros.\r\n   *\r\n   * - UNALIGNED_SUPPORT_DISABLE:\r\n   *\r\n   * Define macro UNALIGNED_SUPPORT_DISABLE, If the silicon does not support unaligned memory access\r\n   *\r\n   * - ARM_MATH_BIG_ENDIAN:\r\n   *\r\n   * Define macro ARM_MATH_BIG_ENDIAN to build the library for big endian targets. By default library builds for little endian targets.\r\n   *\r\n   * - ARM_MATH_MATRIX_CHECK:\r\n   *\r\n   * Define macro ARM_MATH_MATRIX_CHECK for checking on the input and output sizes of matrices\r\n   *\r\n   * - ARM_MATH_ROUNDING:\r\n   *\r\n   * Define macro ARM_MATH_ROUNDING for rounding on support functions\r\n   *\r\n   * - ARM_MATH_CMx:\r\n   *\r\n   * Define macro ARM_MATH_CM4 for building the library on Cortex-M4 target, ARM_MATH_CM3 for building library on Cortex-M3 target\r\n   * and ARM_MATH_CM0 for building library on Cortex-M0 target, ARM_MATH_CM0PLUS for building library on Cortex-M0+ target, and\r\n   * ARM_MATH_CM7 for building the library on cortex-M7.\r\n   *\r\n   * - __FPU_PRESENT:\r\n   *\r\n   * Initialize macro __FPU_PRESENT = 1 when building on FPU supported Targets. Enable this macro for M4bf and M4lf libraries\r\n   *\r\n   * <hr>\r\n   * CMSIS-DSP in ARM::CMSIS Pack\r\n   * -----------------------------\r\n   *\r\n   * The following files relevant to CMSIS-DSP are present in the <b>ARM::CMSIS</b> Pack directories:\r\n   * |File/Folder                   |Content                                                                 |\r\n   * |------------------------------|------------------------------------------------------------------------|\r\n   * |\\b CMSIS\\\\Documentation\\\\DSP  | This documentation                                                     |\r\n   * |\\b CMSIS\\\\DSP_Lib             | Software license agreement (license.txt)                               |\r\n   * |\\b CMSIS\\\\DSP_Lib\\\\Examples   | Example projects demonstrating the usage of the library functions      |\r\n   * |\\b CMSIS\\\\DSP_Lib\\\\Source     | Source files for rebuilding the library                                |\r\n   *\r\n   * <hr>\r\n   * Revision History of CMSIS-DSP\r\n   * ------------\r\n   * Please refer to \\ref ChangeLog_pg.\r\n   *\r\n   * Copyright Notice\r\n   * ------------\r\n   *\r\n   * Copyright (C) 2010-2015 ARM Limited. All rights reserved.\r\n   */\r\n\r\n/**\r\n * @defgroup groupMath Basic Math Functions\r\n */\r\n\r\n/**\r\n * @defgroup groupFastMath Fast Math Functions\r\n * This set of functions provides a fast approximation to sine, cosine, and square root.\r\n * As compared to most of the other functions in the CMSIS math library, the fast math functions\r\n * operate on individual values and not arrays.\r\n * There are separate functions for Q15, Q31, and floating-point data.\r\n *\r\n */\r\n\r\n/**\r\n * @defgroup groupCmplxMath Complex Math Functions\r\n * This set of functions operates on complex data vectors.\r\n * The data in the complex arrays is stored in an interleaved fashion\r\n * (real, imag, real, imag, ...).\r\n * In the API functions, the number of samples in a complex array refers\r\n * to the number of complex values; the array contains twice this number of\r\n * real values.\r\n */\r\n\r\n/**\r\n * @defgroup groupFilters Filtering Functions\r\n */\r\n\r\n/**\r\n * @defgroup groupMatrix Matrix Functions\r\n *\r\n * This set of functions provides basic matrix math operations.\r\n * The functions operate on matrix data structures.  For example,\r\n * the type\r\n * definition for the floating-point matrix structure is shown\r\n * below:\r\n * <pre>\r\n *     typedef struct\r\n *     {\r\n *       uint16_t numRows;     // number of rows of the matrix.\r\n *       uint16_t numCols;     // number of columns of the matrix.\r\n *       float32_t *pData;     // points to the data of the matrix.\r\n *     } arm_matrix_instance_f32;\r\n * </pre>\r\n * There are similar definitions for Q15 and Q31 data types.\r\n *\r\n * The structure specifies the size of the matrix and then points to\r\n * an array of data.  The array is of size <code>numRows X numCols</code>\r\n * and the values are arranged in row order.  That is, the\r\n * matrix element (i, j) is stored at:\r\n * <pre>\r\n *     pData[i*numCols + j]\r\n * </pre>\r\n *\r\n * \\par Init Functions\r\n * There is an associated initialization function for each type of matrix\r\n * data structure.\r\n * The initialization function sets the values of the internal structure fields.\r\n * Refer to the function <code>arm_mat_init_f32()</code>, <code>arm_mat_init_q31()</code>\r\n * and <code>arm_mat_init_q15()</code> for floating-point, Q31 and Q15 types,  respectively.\r\n *\r\n * \\par\r\n * Use of the initialization function is optional. However, if initialization function is used\r\n * then the instance structure cannot be placed into a const data section.\r\n * To place the instance structure in a const data\r\n * section, manually initialize the data structure.  For example:\r\n * <pre>\r\n * <code>arm_matrix_instance_f32 S = {nRows, nColumns, pData};</code>\r\n * <code>arm_matrix_instance_q31 S = {nRows, nColumns, pData};</code>\r\n * <code>arm_matrix_instance_q15 S = {nRows, nColumns, pData};</code>\r\n * </pre>\r\n * where <code>nRows</code> specifies the number of rows, <code>nColumns</code>\r\n * specifies the number of columns, and <code>pData</code> points to the\r\n * data array.\r\n *\r\n * \\par Size Checking\r\n * By default all of the matrix functions perform size checking on the input and\r\n * output matrices.  For example, the matrix addition function verifies that the\r\n * two input matrices and the output matrix all have the same number of rows and\r\n * columns.  If the size check fails the functions return:\r\n * <pre>\r\n *     ARM_MATH_SIZE_MISMATCH\r\n * </pre>\r\n * Otherwise the functions return\r\n * <pre>\r\n *     ARM_MATH_SUCCESS\r\n * </pre>\r\n * There is some overhead associated with this matrix size checking.\r\n * The matrix size checking is enabled via the \\#define\r\n * <pre>\r\n *     ARM_MATH_MATRIX_CHECK\r\n * </pre>\r\n * within the library project settings.  By default this macro is defined\r\n * and size checking is enabled.  By changing the project settings and\r\n * undefining this macro size checking is eliminated and the functions\r\n * run a bit faster.  With size checking disabled the functions always\r\n * return <code>ARM_MATH_SUCCESS</code>.\r\n */\r\n\r\n/**\r\n * @defgroup groupTransforms Transform Functions\r\n */\r\n\r\n/**\r\n * @defgroup groupController Controller Functions\r\n */\r\n\r\n/**\r\n * @defgroup groupStats Statistics Functions\r\n */\r\n/**\r\n * @defgroup groupSupport Support Functions\r\n */\r\n\r\n/**\r\n * @defgroup groupInterpolation Interpolation Functions\r\n * These functions perform 1- and 2-dimensional interpolation of data.\r\n * Linear interpolation is used for 1-dimensional data and\r\n * bilinear interpolation is used for 2-dimensional data.\r\n */\r\n\r\n/**\r\n * @defgroup groupExamples Examples\r\n */\r\n#ifndef _ARM_MATH_H\r\n#define _ARM_MATH_H\r\n\r\n/* ignore some GCC warnings */\r\n#if defined(__GNUC__)\r\n#pragma GCC diagnostic push\r\n#pragma GCC diagnostic ignored \"-Wsign-conversion\"\r\n#pragma GCC diagnostic ignored \"-Wconversion\"\r\n#pragma GCC diagnostic ignored \"-Wunused-parameter\"\r\n#endif\r\n\r\n#define __CMSIS_GENERIC /* disable NVIC and Systick functions */\r\n\r\n#if defined(ARM_MATH_CM7)\r\n#include \"core_cm7.h\"\r\n#elif defined(ARM_MATH_CM4)\r\n#include \"core_cm4.h\"\r\n#elif defined(ARM_MATH_CM3)\r\n#include \"core_cm3.h\"\r\n#elif defined(ARM_MATH_CM0)\r\n#include \"core_cm0.h\"\r\n#define ARM_MATH_CM0_FAMILY\r\n#elif defined(ARM_MATH_CM0PLUS)\r\n#include \"core_cm0plus.h\"\r\n#define ARM_MATH_CM0_FAMILY\r\n#else\r\n#error \"Define according the used Cortex core ARM_MATH_CM7, ARM_MATH_CM4, ARM_MATH_CM3, ARM_MATH_CM0PLUS or ARM_MATH_CM0\"\r\n#endif\r\n\r\n#undef __CMSIS_GENERIC /* enable NVIC and Systick functions */\r\n#include \"math.h\"\r\n#include \"string.h\"\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n * @brief Macros required for reciprocal calculation in Normalized LMS\r\n */\r\n\r\n#define DELTA_Q31  (0x100)\r\n#define DELTA_Q15  0x5\r\n#define INDEX_MASK 0x0000003F\r\n#ifndef PI\r\n#define PI 3.14159265358979f\r\n#endif\r\n\r\n/**\r\n * @brief Macros required for SINE and COSINE Fast math approximations\r\n */\r\n\r\n#define FAST_MATH_TABLE_SIZE 512\r\n#define FAST_MATH_Q31_SHIFT  (32 - 10)\r\n#define FAST_MATH_Q15_SHIFT  (16 - 10)\r\n#define CONTROLLER_Q31_SHIFT (32 - 9)\r\n#define TABLE_SIZE           256\r\n#define TABLE_SPACING_Q31    0x400000\r\n#define TABLE_SPACING_Q15    0x80\r\n\r\n/**\r\n * @brief Macros required for SINE and COSINE Controller functions\r\n */\r\n/* 1.31(q31) Fixed value of 2/360 */\r\n/* -1 to +1 is divided into 360 values so total spacing is (2/360) */\r\n#define INPUT_SPACING 0xB60B61\r\n\r\n/**\r\n * @brief Macro for Unaligned Support\r\n */\r\n#ifndef UNALIGNED_SUPPORT_DISABLE\r\n#define ALIGN4\r\n#else\r\n#if defined(__GNUC__)\r\n#define ALIGN4 __attribute__((aligned(4)))\r\n#else\r\n#define ALIGN4 __align(4)\r\n#endif\r\n#endif /* #ifndef UNALIGNED_SUPPORT_DISABLE */\r\n\r\n/**\r\n * @brief Error status returned by some functions in the library.\r\n */\r\n\r\ntypedef enum {\r\n  ARM_MATH_SUCCESS        = 0,  /**< No error */\r\n  ARM_MATH_ARGUMENT_ERROR = -1, /**< One or more arguments are incorrect */\r\n  ARM_MATH_LENGTH_ERROR   = -2, /**< Length of data buffer is incorrect */\r\n  ARM_MATH_SIZE_MISMATCH  = -3, /**< Size of matrices is not compatible with the operation. */\r\n  ARM_MATH_NANINF         = -4, /**< Not-a-number (NaN) or infinity is generated */\r\n  ARM_MATH_SINGULAR       = -5, /**< Generated by matrix inversion if the input matrix is singular and cannot be inverted. */\r\n  ARM_MATH_TEST_FAILURE   = -6  /**< Test Failed  */\r\n} arm_status;\r\n\r\n/**\r\n * @brief 8-bit fractional data type in 1.7 format.\r\n */\r\ntypedef int8_t q7_t;\r\n\r\n/**\r\n * @brief 16-bit fractional data type in 1.15 format.\r\n */\r\ntypedef int16_t q15_t;\r\n\r\n/**\r\n * @brief 32-bit fractional data type in 1.31 format.\r\n */\r\ntypedef int32_t q31_t;\r\n\r\n/**\r\n * @brief 64-bit fractional data type in 1.63 format.\r\n */\r\ntypedef int64_t q63_t;\r\n\r\n/**\r\n * @brief 32-bit floating-point type definition.\r\n */\r\ntypedef float float32_t;\r\n\r\n/**\r\n * @brief 64-bit floating-point type definition.\r\n */\r\ntypedef double float64_t;\r\n\r\n/**\r\n * @brief definition to read/write two 16 bit values.\r\n */\r\n#if defined __CC_ARM\r\n#define __SIMD32_TYPE int32_t __packed\r\n#define CMSIS_UNUSED  __attribute__((unused))\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define __SIMD32_TYPE int32_t\r\n#define CMSIS_UNUSED  __attribute__((unused))\r\n\r\n#elif defined __GNUC__\r\n#define __SIMD32_TYPE int32_t\r\n#define CMSIS_UNUSED  __attribute__((unused))\r\n\r\n#elif defined __ICCARM__\r\n#define __SIMD32_TYPE int32_t __packed\r\n#define CMSIS_UNUSED\r\n\r\n#elif defined __CSMC__\r\n#define __SIMD32_TYPE int32_t\r\n#define CMSIS_UNUSED\r\n\r\n#elif defined __TASKING__\r\n#define __SIMD32_TYPE __unaligned int32_t\r\n#define CMSIS_UNUSED\r\n\r\n#else\r\n#error Unknown compiler\r\n#endif\r\n\r\n#define __SIMD32(addr)       (*(__SIMD32_TYPE **)&(addr))\r\n#define __SIMD32_CONST(addr) ((__SIMD32_TYPE *)(addr))\r\n#define _SIMD32_OFFSET(addr) (*(__SIMD32_TYPE *)(addr))\r\n#define __SIMD64(addr)       (*(int64_t **)&(addr))\r\n\r\n#if defined(ARM_MATH_CM3) || defined(ARM_MATH_CM0_FAMILY)\r\n/**\r\n * @brief definition to pack two 16 bit values.\r\n */\r\n#define __PKHBT(ARG1, ARG2, ARG3) ((((int32_t)(ARG1) << 0) & (int32_t)0x0000FFFF) | (((int32_t)(ARG2) << ARG3) & (int32_t)0xFFFF0000))\r\n#define __PKHTB(ARG1, ARG2, ARG3) ((((int32_t)(ARG1) << 0) & (int32_t)0xFFFF0000) | (((int32_t)(ARG2) >> ARG3) & (int32_t)0x0000FFFF))\r\n\r\n#endif\r\n\r\n/**\r\n * @brief definition to pack four 8 bit values.\r\n */\r\n#ifndef ARM_MATH_BIG_ENDIAN\r\n\r\n#define __PACKq7(v0, v1, v2, v3) \\\r\n  ((((int32_t)(v0) << 0) & (int32_t)0x000000FF) | (((int32_t)(v1) << 8) & (int32_t)0x0000FF00) | (((int32_t)(v2) << 16) & (int32_t)0x00FF0000) | (((int32_t)(v3) << 24) & (int32_t)0xFF000000))\r\n#else\r\n\r\n#define __PACKq7(v0, v1, v2, v3) \\\r\n  ((((int32_t)(v3) << 0) & (int32_t)0x000000FF) | (((int32_t)(v2) << 8) & (int32_t)0x0000FF00) | (((int32_t)(v1) << 16) & (int32_t)0x00FF0000) | (((int32_t)(v0) << 24) & (int32_t)0xFF000000))\r\n\r\n#endif\r\n\r\n/**\r\n * @brief Clips Q63 to Q31 values.\r\n */\r\nstatic __INLINE q31_t clip_q63_to_q31(q63_t x) { return ((q31_t)(x >> 32) != ((q31_t)x >> 31)) ? ((0x7FFFFFFF ^ ((q31_t)(x >> 63)))) : (q31_t)x; }\r\n\r\n/**\r\n * @brief Clips Q63 to Q15 values.\r\n */\r\nstatic __INLINE q15_t clip_q63_to_q15(q63_t x) { return ((q31_t)(x >> 32) != ((q31_t)x >> 31)) ? ((0x7FFF ^ ((q15_t)(x >> 63)))) : (q15_t)(x >> 15); }\r\n\r\n/**\r\n * @brief Clips Q31 to Q7 values.\r\n */\r\nstatic __INLINE q7_t clip_q31_to_q7(q31_t x) { return ((q31_t)(x >> 24) != ((q31_t)x >> 23)) ? ((0x7F ^ ((q7_t)(x >> 31)))) : (q7_t)x; }\r\n\r\n/**\r\n * @brief Clips Q31 to Q15 values.\r\n */\r\nstatic __INLINE q15_t clip_q31_to_q15(q31_t x) { return ((q31_t)(x >> 16) != ((q31_t)x >> 15)) ? ((0x7FFF ^ ((q15_t)(x >> 31)))) : (q15_t)x; }\r\n\r\n/**\r\n * @brief Multiplies 32 X 64 and returns 32 bit result in 2.30 format.\r\n */\r\n\r\nstatic __INLINE q63_t mult32x64(q63_t x, q31_t y) { return ((((q63_t)(x & 0x00000000FFFFFFFF) * y) >> 32) + (((q63_t)(x >> 32) * y))); }\r\n\r\n/*\r\n  #if defined (ARM_MATH_CM0_FAMILY) && defined ( __CC_ARM   )\r\n  #define __CLZ __clz\r\n  #endif\r\n */\r\n/* note: function can be removed when all toolchain support __CLZ for Cortex-M0 */\r\n#if defined(ARM_MATH_CM0_FAMILY) && ((defined(__ICCARM__)))\r\nstatic __INLINE uint32_t __CLZ(q31_t data);\r\n\r\nstatic __INLINE uint32_t __CLZ(q31_t data) {\r\n  uint32_t count = 0;\r\n  uint32_t mask  = 0x80000000;\r\n\r\n  while ((data & mask) == 0) {\r\n    count += 1u;\r\n    mask = mask >> 1u;\r\n  }\r\n\r\n  return (count);\r\n}\r\n#endif\r\n\r\n/**\r\n * @brief Function to Calculates 1/in (reciprocal) value of Q31 Data type.\r\n */\r\n\r\nstatic __INLINE uint32_t arm_recip_q31(q31_t in, q31_t *dst, q31_t *pRecipTable) {\r\n  q31_t    out;\r\n  uint32_t tempVal;\r\n  uint32_t index, i;\r\n  uint32_t signBits;\r\n\r\n  if (in > 0) {\r\n    signBits = ((uint32_t)(__CLZ(in) - 1));\r\n  } else {\r\n    signBits = ((uint32_t)(__CLZ(-in) - 1));\r\n  }\r\n\r\n  /* Convert input sample to 1.31 format */\r\n  in = (in << signBits);\r\n\r\n  /* calculation of index for initial approximated Val */\r\n  index = (uint32_t)(in >> 24);\r\n  index = (index & INDEX_MASK);\r\n\r\n  /* 1.31 with exp 1 */\r\n  out = pRecipTable[index];\r\n\r\n  /* calculation of reciprocal value */\r\n  /* running approximation for two iterations */\r\n  for (i = 0u; i < 2u; i++) {\r\n    tempVal = (uint32_t)(((q63_t)in * out) >> 31);\r\n    tempVal = 0x7FFFFFFFu - tempVal;\r\n    /*      1.31 with exp 1 */\r\n    /* out = (q31_t) (((q63_t) out * tempVal) >> 30); */\r\n    out = clip_q63_to_q31(((q63_t)out * tempVal) >> 30);\r\n  }\r\n\r\n  /* write output */\r\n  *dst = out;\r\n\r\n  /* return num of signbits of out = 1/in value */\r\n  return (signBits + 1u);\r\n}\r\n\r\n/**\r\n * @brief Function to Calculates 1/in (reciprocal) value of Q15 Data type.\r\n */\r\nstatic __INLINE uint32_t arm_recip_q15(q15_t in, q15_t *dst, q15_t *pRecipTable) {\r\n  q15_t    out     = 0;\r\n  uint32_t tempVal = 0;\r\n  uint32_t index = 0, i = 0;\r\n  uint32_t signBits = 0;\r\n\r\n  if (in > 0) {\r\n    signBits = ((uint32_t)(__CLZ(in) - 17));\r\n  } else {\r\n    signBits = ((uint32_t)(__CLZ(-in) - 17));\r\n  }\r\n\r\n  /* Convert input sample to 1.15 format */\r\n  in = (in << signBits);\r\n\r\n  /* calculation of index for initial approximated Val */\r\n  index = (uint32_t)(in >> 8);\r\n  index = (index & INDEX_MASK);\r\n\r\n  /*      1.15 with exp 1  */\r\n  out = pRecipTable[index];\r\n\r\n  /* calculation of reciprocal value */\r\n  /* running approximation for two iterations */\r\n  for (i = 0u; i < 2u; i++) {\r\n    tempVal = (uint32_t)(((q31_t)in * out) >> 15);\r\n    tempVal = 0x7FFFu - tempVal;\r\n    /*      1.15 with exp 1 */\r\n    out = (q15_t)(((q31_t)out * tempVal) >> 14);\r\n    /* out = clip_q31_to_q15(((q31_t) out * tempVal) >> 14); */\r\n  }\r\n\r\n  /* write output */\r\n  *dst = out;\r\n\r\n  /* return num of signbits of out = 1/in value */\r\n  return (signBits + 1);\r\n}\r\n\r\n/*\r\n * @brief C custom defined intrinisic function for only M0 processors\r\n */\r\n#if defined(ARM_MATH_CM0_FAMILY)\r\nstatic __INLINE q31_t __SSAT(q31_t x, uint32_t y) {\r\n  int32_t  posMax, negMin;\r\n  uint32_t i;\r\n\r\n  posMax = 1;\r\n  for (i = 0; i < (y - 1); i++) {\r\n    posMax = posMax * 2;\r\n  }\r\n\r\n  if (x > 0) {\r\n    posMax = (posMax - 1);\r\n\r\n    if (x > posMax) {\r\n      x = posMax;\r\n    }\r\n  } else {\r\n    negMin = -posMax;\r\n\r\n    if (x < negMin) {\r\n      x = negMin;\r\n    }\r\n  }\r\n  return (x);\r\n}\r\n#endif /* end of ARM_MATH_CM0_FAMILY */\r\n\r\n/*\r\n * @brief C custom defined intrinsic function for M3 and M0 processors\r\n */\r\n#if defined(ARM_MATH_CM3) || defined(ARM_MATH_CM0_FAMILY)\r\n\r\n/*\r\n * @brief C custom defined QADD8 for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __QADD8(uint32_t x, uint32_t y) {\r\n  q31_t r, s, t, u;\r\n\r\n  r = __SSAT(((((q31_t)x << 24) >> 24) + (((q31_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF;\r\n  s = __SSAT(((((q31_t)x << 16) >> 24) + (((q31_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF;\r\n  t = __SSAT(((((q31_t)x << 8) >> 24) + (((q31_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF;\r\n  u = __SSAT(((((q31_t)x) >> 24) + (((q31_t)y) >> 24)), 8) & (int32_t)0x000000FF;\r\n\r\n  return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined QSUB8 for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __QSUB8(uint32_t x, uint32_t y) {\r\n  q31_t r, s, t, u;\r\n\r\n  r = __SSAT(((((q31_t)x << 24) >> 24) - (((q31_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF;\r\n  s = __SSAT(((((q31_t)x << 16) >> 24) - (((q31_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF;\r\n  t = __SSAT(((((q31_t)x << 8) >> 24) - (((q31_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF;\r\n  u = __SSAT(((((q31_t)x) >> 24) - (((q31_t)y) >> 24)), 8) & (int32_t)0x000000FF;\r\n\r\n  return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined QADD16 for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __QADD16(uint32_t x, uint32_t y) {\r\n  /*  q31_t r,     s;  without initialisation 'arm_offset_q15 test' fails  but 'intrinsic' tests pass! for armCC */\r\n  q31_t r = 0, s = 0;\r\n\r\n  r = __SSAT(((((q31_t)x << 16) >> 16) + (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF;\r\n  s = __SSAT(((((q31_t)x) >> 16) + (((q31_t)y) >> 16)), 16) & (int32_t)0x0000FFFF;\r\n\r\n  return ((uint32_t)((s << 16) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SHADD16 for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SHADD16(uint32_t x, uint32_t y) {\r\n  q31_t r, s;\r\n\r\n  r = (((((q31_t)x << 16) >> 16) + (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF;\r\n  s = (((((q31_t)x) >> 16) + (((q31_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF;\r\n\r\n  return ((uint32_t)((s << 16) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined QSUB16 for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __QSUB16(uint32_t x, uint32_t y) {\r\n  q31_t r, s;\r\n\r\n  r = __SSAT(((((q31_t)x << 16) >> 16) - (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF;\r\n  s = __SSAT(((((q31_t)x) >> 16) - (((q31_t)y) >> 16)), 16) & (int32_t)0x0000FFFF;\r\n\r\n  return ((uint32_t)((s << 16) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SHSUB16 for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SHSUB16(uint32_t x, uint32_t y) {\r\n  q31_t r, s;\r\n\r\n  r = (((((q31_t)x << 16) >> 16) - (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF;\r\n  s = (((((q31_t)x) >> 16) - (((q31_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF;\r\n\r\n  return ((uint32_t)((s << 16) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined QASX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __QASX(uint32_t x, uint32_t y) {\r\n  q31_t r, s;\r\n\r\n  r = __SSAT(((((q31_t)x << 16) >> 16) - (((q31_t)y) >> 16)), 16) & (int32_t)0x0000FFFF;\r\n  s = __SSAT(((((q31_t)x) >> 16) + (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF;\r\n\r\n  return ((uint32_t)((s << 16) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SHASX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SHASX(uint32_t x, uint32_t y) {\r\n  q31_t r, s;\r\n\r\n  r = (((((q31_t)x << 16) >> 16) - (((q31_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF;\r\n  s = (((((q31_t)x) >> 16) + (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF;\r\n\r\n  return ((uint32_t)((s << 16) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined QSAX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __QSAX(uint32_t x, uint32_t y) {\r\n  q31_t r, s;\r\n\r\n  r = __SSAT(((((q31_t)x << 16) >> 16) + (((q31_t)y) >> 16)), 16) & (int32_t)0x0000FFFF;\r\n  s = __SSAT(((((q31_t)x) >> 16) - (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF;\r\n\r\n  return ((uint32_t)((s << 16) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SHSAX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SHSAX(uint32_t x, uint32_t y) {\r\n  q31_t r, s;\r\n\r\n  r = (((((q31_t)x << 16) >> 16) + (((q31_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF;\r\n  s = (((((q31_t)x) >> 16) - (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF;\r\n\r\n  return ((uint32_t)((s << 16) | (r)));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SMUSDX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SMUSDX(uint32_t x, uint32_t y) { return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y) >> 16)) - ((((q31_t)x) >> 16) * (((q31_t)y << 16) >> 16)))); }\r\n\r\n/*\r\n * @brief C custom defined SMUADX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SMUADX(uint32_t x, uint32_t y) { return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y) >> 16)) + ((((q31_t)x) >> 16) * (((q31_t)y << 16) >> 16)))); }\r\n\r\n/*\r\n * @brief C custom defined QADD for M3 and M0 processors\r\n */\r\nstatic __INLINE int32_t __QADD(int32_t x, int32_t y) { return ((int32_t)(clip_q63_to_q31((q63_t)x + (q31_t)y))); }\r\n\r\n/*\r\n * @brief C custom defined QSUB for M3 and M0 processors\r\n */\r\nstatic __INLINE int32_t __QSUB(int32_t x, int32_t y) { return ((int32_t)(clip_q63_to_q31((q63_t)x - (q31_t)y))); }\r\n\r\n/*\r\n * @brief C custom defined SMLAD for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SMLAD(uint32_t x, uint32_t y, uint32_t sum) {\r\n  return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + ((((q31_t)x) >> 16) * (((q31_t)y) >> 16)) + (((q31_t)sum))));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SMLADX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SMLADX(uint32_t x, uint32_t y, uint32_t sum) {\r\n  return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y) >> 16)) + ((((q31_t)x) >> 16) * (((q31_t)y << 16) >> 16)) + (((q31_t)sum))));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SMLSDX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SMLSDX(uint32_t x, uint32_t y, uint32_t sum) {\r\n  return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y) >> 16)) - ((((q31_t)x) >> 16) * (((q31_t)y << 16) >> 16)) + (((q31_t)sum))));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SMLALD for M3 and M0 processors\r\n */\r\nstatic __INLINE uint64_t __SMLALD(uint32_t x, uint32_t y, uint64_t sum) {\r\n  /*  return (sum + ((q15_t) (x >> 16) * (q15_t) (y >> 16)) + ((q15_t) x * (q15_t) y)); */\r\n  return ((uint64_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + ((((q31_t)x) >> 16) * (((q31_t)y) >> 16)) + (((q63_t)sum))));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SMLALDX for M3 and M0 processors\r\n */\r\nstatic __INLINE uint64_t __SMLALDX(uint32_t x, uint32_t y, uint64_t sum) {\r\n  /*  return (sum + ((q15_t) (x >> 16) * (q15_t) y)) + ((q15_t) x * (q15_t) (y >> 16)); */\r\n  return ((uint64_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y) >> 16)) + ((((q31_t)x) >> 16) * (((q31_t)y << 16) >> 16)) + (((q63_t)sum))));\r\n}\r\n\r\n/*\r\n * @brief C custom defined SMUAD for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SMUAD(uint32_t x, uint32_t y) { return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + ((((q31_t)x) >> 16) * (((q31_t)y) >> 16)))); }\r\n\r\n/*\r\n * @brief C custom defined SMUSD for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SMUSD(uint32_t x, uint32_t y) { return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) - ((((q31_t)x) >> 16) * (((q31_t)y) >> 16)))); }\r\n\r\n/*\r\n * @brief C custom defined SXTB16 for M3 and M0 processors\r\n */\r\nstatic __INLINE uint32_t __SXTB16(uint32_t x) { return ((uint32_t)(((((q31_t)x << 24) >> 24) & (q31_t)0x0000FFFF) | ((((q31_t)x << 8) >> 8) & (q31_t)0xFFFF0000))); }\r\n\r\n#endif /* defined (ARM_MATH_CM3) || defined (ARM_MATH_CM0_FAMILY) */\r\n\r\n/**\r\n * @brief Instance structure for the Q7 FIR filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps; /**< number of filter coefficients in the filter. */\r\n  q7_t *   pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  q7_t *   pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/\r\n} arm_fir_instance_q7;\r\n\r\n/**\r\n * @brief Instance structure for the Q15 FIR filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps; /**< number of filter coefficients in the filter. */\r\n  q15_t *  pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  q15_t *  pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/\r\n} arm_fir_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 FIR filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps; /**< number of filter coefficients in the filter. */\r\n  q31_t *  pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  q31_t *  pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */\r\n} arm_fir_instance_q31;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point FIR filter.\r\n */\r\ntypedef struct {\r\n  uint16_t   numTaps; /**< number of filter coefficients in the filter. */\r\n  float32_t *pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */\r\n} arm_fir_instance_f32;\r\n\r\n/**\r\n * @brief Processing function for the Q7 FIR filter.\r\n * @param[in]  S          points to an instance of the Q7 FIR filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_q7(const arm_fir_instance_q7 *S, q7_t *pSrc, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q7 FIR filter.\r\n * @param[in,out] S          points to an instance of the Q7 FIR structure.\r\n * @param[in]     numTaps    Number of filter coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of samples that are processed.\r\n */\r\nvoid arm_fir_init_q7(arm_fir_instance_q7 *S, uint16_t numTaps, q7_t *pCoeffs, q7_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q15 FIR filter.\r\n * @param[in]  S          points to an instance of the Q15 FIR structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_q15(const arm_fir_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the fast Q15 FIR filter for Cortex-M3 and Cortex-M4.\r\n * @param[in]  S          points to an instance of the Q15 FIR filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_fast_q15(const arm_fir_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q15 FIR filter.\r\n * @param[in,out] S          points to an instance of the Q15 FIR filter structure.\r\n * @param[in]     numTaps    Number of filter coefficients in the filter. Must be even and greater than or equal to 4.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of samples that are processed at a time.\r\n * @return The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_ARGUMENT_ERROR if\r\n * <code>numTaps</code> is not a supported value.\r\n */\r\narm_status arm_fir_init_q15(arm_fir_instance_q15 *S, uint16_t numTaps, q15_t *pCoeffs, q15_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q31 FIR filter.\r\n * @param[in]  S          points to an instance of the Q31 FIR filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_q31(const arm_fir_instance_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the fast Q31 FIR filter for Cortex-M3 and Cortex-M4.\r\n * @param[in]  S          points to an instance of the Q31 FIR structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_fast_q31(const arm_fir_instance_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q31 FIR filter.\r\n * @param[in,out] S          points to an instance of the Q31 FIR structure.\r\n * @param[in]     numTaps    Number of filter coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of samples that are processed at a time.\r\n */\r\nvoid arm_fir_init_q31(arm_fir_instance_q31 *S, uint16_t numTaps, q31_t *pCoeffs, q31_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the floating-point FIR filter.\r\n * @param[in]  S          points to an instance of the floating-point FIR structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_f32(const arm_fir_instance_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point FIR filter.\r\n * @param[in,out] S          points to an instance of the floating-point FIR filter structure.\r\n * @param[in]     numTaps    Number of filter coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of samples that are processed at a time.\r\n */\r\nvoid arm_fir_init_f32(arm_fir_instance_f32 *S, uint16_t numTaps, float32_t *pCoeffs, float32_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 Biquad cascade filter.\r\n */\r\ntypedef struct {\r\n  int8_t numStages; /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */\r\n  q15_t *pState;    /**< Points to the array of state coefficients.  The array is of length 4*numStages. */\r\n  q15_t *pCoeffs;   /**< Points to the array of coefficients.  The array is of length 5*numStages. */\r\n  int8_t postShift; /**< Additional shift, in bits, applied to each output sample. */\r\n} arm_biquad_casd_df1_inst_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 Biquad cascade filter.\r\n */\r\ntypedef struct {\r\n  uint32_t numStages; /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */\r\n  q31_t *  pState;    /**< Points to the array of state coefficients.  The array is of length 4*numStages. */\r\n  q31_t *  pCoeffs;   /**< Points to the array of coefficients.  The array is of length 5*numStages. */\r\n  uint8_t  postShift; /**< Additional shift, in bits, applied to each output sample. */\r\n} arm_biquad_casd_df1_inst_q31;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point Biquad cascade filter.\r\n */\r\ntypedef struct {\r\n  uint32_t   numStages; /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */\r\n  float32_t *pState;    /**< Points to the array of state coefficients.  The array is of length 4*numStages. */\r\n  float32_t *pCoeffs;   /**< Points to the array of coefficients.  The array is of length 5*numStages. */\r\n} arm_biquad_casd_df1_inst_f32;\r\n\r\n/**\r\n * @brief Processing function for the Q15 Biquad cascade filter.\r\n * @param[in]  S          points to an instance of the Q15 Biquad cascade structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cascade_df1_q15(const arm_biquad_casd_df1_inst_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q15 Biquad cascade filter.\r\n * @param[in,out] S          points to an instance of the Q15 Biquad cascade structure.\r\n * @param[in]     numStages  number of 2nd order stages in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     postShift  Shift to be applied to the output. Varies according to the coefficients format\r\n */\r\nvoid arm_biquad_cascade_df1_init_q15(arm_biquad_casd_df1_inst_q15 *S, uint8_t numStages, q15_t *pCoeffs, q15_t *pState, int8_t postShift);\r\n\r\n/**\r\n * @brief Fast but less precise processing function for the Q15 Biquad cascade filter for Cortex-M3 and Cortex-M4.\r\n * @param[in]  S          points to an instance of the Q15 Biquad cascade structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cascade_df1_fast_q15(const arm_biquad_casd_df1_inst_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q31 Biquad cascade filter\r\n * @param[in]  S          points to an instance of the Q31 Biquad cascade structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cascade_df1_q31(const arm_biquad_casd_df1_inst_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Fast but less precise processing function for the Q31 Biquad cascade filter for Cortex-M3 and Cortex-M4.\r\n * @param[in]  S          points to an instance of the Q31 Biquad cascade structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cascade_df1_fast_q31(const arm_biquad_casd_df1_inst_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q31 Biquad cascade filter.\r\n * @param[in,out] S          points to an instance of the Q31 Biquad cascade structure.\r\n * @param[in]     numStages  number of 2nd order stages in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     postShift  Shift to be applied to the output. Varies according to the coefficients format\r\n */\r\nvoid arm_biquad_cascade_df1_init_q31(arm_biquad_casd_df1_inst_q31 *S, uint8_t numStages, q31_t *pCoeffs, q31_t *pState, int8_t postShift);\r\n\r\n/**\r\n * @brief Processing function for the floating-point Biquad cascade filter.\r\n * @param[in]  S          points to an instance of the floating-point Biquad cascade structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cascade_df1_f32(const arm_biquad_casd_df1_inst_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point Biquad cascade filter.\r\n * @param[in,out] S          points to an instance of the floating-point Biquad cascade structure.\r\n * @param[in]     numStages  number of 2nd order stages in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n */\r\nvoid arm_biquad_cascade_df1_init_f32(arm_biquad_casd_df1_inst_f32 *S, uint8_t numStages, float32_t *pCoeffs, float32_t *pState);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point matrix structure.\r\n */\r\ntypedef struct {\r\n  uint16_t   numRows; /**< number of rows of the matrix.     */\r\n  uint16_t   numCols; /**< number of columns of the matrix.  */\r\n  float32_t *pData;   /**< points to the data of the matrix. */\r\n} arm_matrix_instance_f32;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point matrix structure.\r\n */\r\ntypedef struct {\r\n  uint16_t   numRows; /**< number of rows of the matrix.     */\r\n  uint16_t   numCols; /**< number of columns of the matrix.  */\r\n  float64_t *pData;   /**< points to the data of the matrix. */\r\n} arm_matrix_instance_f64;\r\n\r\n/**\r\n * @brief Instance structure for the Q15 matrix structure.\r\n */\r\ntypedef struct {\r\n  uint16_t numRows; /**< number of rows of the matrix.     */\r\n  uint16_t numCols; /**< number of columns of the matrix.  */\r\n  q15_t *  pData;   /**< points to the data of the matrix. */\r\n} arm_matrix_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 matrix structure.\r\n */\r\ntypedef struct {\r\n  uint16_t numRows; /**< number of rows of the matrix.     */\r\n  uint16_t numCols; /**< number of columns of the matrix.  */\r\n  q31_t *  pData;   /**< points to the data of the matrix. */\r\n} arm_matrix_instance_q31;\r\n\r\n/**\r\n * @brief Floating-point matrix addition.\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_add_f32(const arm_matrix_instance_f32 *pSrcA, const arm_matrix_instance_f32 *pSrcB, arm_matrix_instance_f32 *pDst);\r\n\r\n/**\r\n * @brief Q15 matrix addition.\r\n * @param[in]   pSrcA  points to the first input matrix structure\r\n * @param[in]   pSrcB  points to the second input matrix structure\r\n * @param[out]  pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_add_q15(const arm_matrix_instance_q15 *pSrcA, const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst);\r\n\r\n/**\r\n * @brief Q31 matrix addition.\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_add_q31(const arm_matrix_instance_q31 *pSrcA, const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst);\r\n\r\n/**\r\n * @brief Floating-point, complex, matrix multiplication.\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_cmplx_mult_f32(const arm_matrix_instance_f32 *pSrcA, const arm_matrix_instance_f32 *pSrcB, arm_matrix_instance_f32 *pDst);\r\n\r\n/**\r\n * @brief Q15, complex,  matrix multiplication.\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_cmplx_mult_q15(const arm_matrix_instance_q15 *pSrcA, const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst, q15_t *pScratch);\r\n\r\n/**\r\n * @brief Q31, complex, matrix multiplication.\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_cmplx_mult_q31(const arm_matrix_instance_q31 *pSrcA, const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst);\r\n\r\n/**\r\n * @brief Floating-point matrix transpose.\r\n * @param[in]  pSrc  points to the input matrix\r\n * @param[out] pDst  points to the output matrix\r\n * @return    The function returns either  <code>ARM_MATH_SIZE_MISMATCH</code>\r\n * or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_trans_f32(const arm_matrix_instance_f32 *pSrc, arm_matrix_instance_f32 *pDst);\r\n\r\n/**\r\n * @brief Q15 matrix transpose.\r\n * @param[in]  pSrc  points to the input matrix\r\n * @param[out] pDst  points to the output matrix\r\n * @return    The function returns either  <code>ARM_MATH_SIZE_MISMATCH</code>\r\n * or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_trans_q15(const arm_matrix_instance_q15 *pSrc, arm_matrix_instance_q15 *pDst);\r\n\r\n/**\r\n * @brief Q31 matrix transpose.\r\n * @param[in]  pSrc  points to the input matrix\r\n * @param[out] pDst  points to the output matrix\r\n * @return    The function returns either  <code>ARM_MATH_SIZE_MISMATCH</code>\r\n * or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_trans_q31(const arm_matrix_instance_q31 *pSrc, arm_matrix_instance_q31 *pDst);\r\n\r\n/**\r\n * @brief Floating-point matrix multiplication\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_mult_f32(const arm_matrix_instance_f32 *pSrcA, const arm_matrix_instance_f32 *pSrcB, arm_matrix_instance_f32 *pDst);\r\n\r\n/**\r\n * @brief Q15 matrix multiplication\r\n * @param[in]  pSrcA   points to the first input matrix structure\r\n * @param[in]  pSrcB   points to the second input matrix structure\r\n * @param[out] pDst    points to output matrix structure\r\n * @param[in]  pState  points to the array for storing intermediate results\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_mult_q15(const arm_matrix_instance_q15 *pSrcA, const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst, q15_t *pState);\r\n\r\n/**\r\n * @brief Q15 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA   points to the first input matrix structure\r\n * @param[in]  pSrcB   points to the second input matrix structure\r\n * @param[out] pDst    points to output matrix structure\r\n * @param[in]  pState  points to the array for storing intermediate results\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_mult_fast_q15(const arm_matrix_instance_q15 *pSrcA, const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst, q15_t *pState);\r\n\r\n/**\r\n * @brief Q31 matrix multiplication\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_mult_q31(const arm_matrix_instance_q31 *pSrcA, const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst);\r\n\r\n/**\r\n * @brief Q31 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_mult_fast_q31(const arm_matrix_instance_q31 *pSrcA, const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst);\r\n\r\n/**\r\n * @brief Floating-point matrix subtraction\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_sub_f32(const arm_matrix_instance_f32 *pSrcA, const arm_matrix_instance_f32 *pSrcB, arm_matrix_instance_f32 *pDst);\r\n\r\n/**\r\n * @brief Q15 matrix subtraction\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_sub_q15(const arm_matrix_instance_q15 *pSrcA, const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst);\r\n\r\n/**\r\n * @brief Q31 matrix subtraction\r\n * @param[in]  pSrcA  points to the first input matrix structure\r\n * @param[in]  pSrcB  points to the second input matrix structure\r\n * @param[out] pDst   points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_sub_q31(const arm_matrix_instance_q31 *pSrcA, const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst);\r\n\r\n/**\r\n * @brief Floating-point matrix scaling.\r\n * @param[in]  pSrc   points to the input matrix\r\n * @param[in]  scale  scale factor\r\n * @param[out] pDst   points to the output matrix\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_scale_f32(const arm_matrix_instance_f32 *pSrc, float32_t scale, arm_matrix_instance_f32 *pDst);\r\n\r\n/**\r\n * @brief Q15 matrix scaling.\r\n * @param[in]  pSrc        points to input matrix\r\n * @param[in]  scaleFract  fractional portion of the scale factor\r\n * @param[in]  shift       number of bits to shift the result by\r\n * @param[out] pDst        points to output matrix\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_scale_q15(const arm_matrix_instance_q15 *pSrc, q15_t scaleFract, int32_t shift, arm_matrix_instance_q15 *pDst);\r\n\r\n/**\r\n * @brief Q31 matrix scaling.\r\n * @param[in]  pSrc        points to input matrix\r\n * @param[in]  scaleFract  fractional portion of the scale factor\r\n * @param[in]  shift       number of bits to shift the result by\r\n * @param[out] pDst        points to output matrix structure\r\n * @return     The function returns either\r\n * <code>ARM_MATH_SIZE_MISMATCH</code> or <code>ARM_MATH_SUCCESS</code> based on the outcome of size checking.\r\n */\r\narm_status arm_mat_scale_q31(const arm_matrix_instance_q31 *pSrc, q31_t scaleFract, int32_t shift, arm_matrix_instance_q31 *pDst);\r\n\r\n/**\r\n * @brief  Q31 matrix initialization.\r\n * @param[in,out] S         points to an instance of the floating-point matrix structure.\r\n * @param[in]     nRows     number of rows in the matrix.\r\n * @param[in]     nColumns  number of columns in the matrix.\r\n * @param[in]     pData     points to the matrix data array.\r\n */\r\nvoid arm_mat_init_q31(arm_matrix_instance_q31 *S, uint16_t nRows, uint16_t nColumns, q31_t *pData);\r\n\r\n/**\r\n * @brief  Q15 matrix initialization.\r\n * @param[in,out] S         points to an instance of the floating-point matrix structure.\r\n * @param[in]     nRows     number of rows in the matrix.\r\n * @param[in]     nColumns  number of columns in the matrix.\r\n * @param[in]     pData     points to the matrix data array.\r\n */\r\nvoid arm_mat_init_q15(arm_matrix_instance_q15 *S, uint16_t nRows, uint16_t nColumns, q15_t *pData);\r\n\r\n/**\r\n * @brief  Floating-point matrix initialization.\r\n * @param[in,out] S         points to an instance of the floating-point matrix structure.\r\n * @param[in]     nRows     number of rows in the matrix.\r\n * @param[in]     nColumns  number of columns in the matrix.\r\n * @param[in]     pData     points to the matrix data array.\r\n */\r\nvoid arm_mat_init_f32(arm_matrix_instance_f32 *S, uint16_t nRows, uint16_t nColumns, float32_t *pData);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 PID Control.\r\n */\r\ntypedef struct {\r\n  q15_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */\r\n#ifdef ARM_MATH_CM0_FAMILY\r\n  q15_t A1;\r\n  q15_t A2;\r\n#else\r\n  q31_t A1; /**< The derived gain A1 = -Kp - 2Kd | Kd.*/\r\n#endif\r\n  q15_t state[3]; /**< The state array of length 3. */\r\n  q15_t Kp;       /**< The proportional gain. */\r\n  q15_t Ki;       /**< The integral gain. */\r\n  q15_t Kd;       /**< The derivative gain. */\r\n} arm_pid_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 PID Control.\r\n */\r\ntypedef struct {\r\n  q31_t A0;       /**< The derived gain, A0 = Kp + Ki + Kd . */\r\n  q31_t A1;       /**< The derived gain, A1 = -Kp - 2Kd. */\r\n  q31_t A2;       /**< The derived gain, A2 = Kd . */\r\n  q31_t state[3]; /**< The state array of length 3. */\r\n  q31_t Kp;       /**< The proportional gain. */\r\n  q31_t Ki;       /**< The integral gain. */\r\n  q31_t Kd;       /**< The derivative gain. */\r\n} arm_pid_instance_q31;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point PID Control.\r\n */\r\ntypedef struct {\r\n  float32_t A0;       /**< The derived gain, A0 = Kp + Ki + Kd . */\r\n  float32_t A1;       /**< The derived gain, A1 = -Kp - 2Kd. */\r\n  float32_t A2;       /**< The derived gain, A2 = Kd . */\r\n  float32_t state[3]; /**< The state array of length 3. */\r\n  float32_t Kp;       /**< The proportional gain. */\r\n  float32_t Ki;       /**< The integral gain. */\r\n  float32_t Kd;       /**< The derivative gain. */\r\n} arm_pid_instance_f32;\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point PID Control.\r\n * @param[in,out] S               points to an instance of the PID structure.\r\n * @param[in]     resetStateFlag  flag to reset the state. 0 = no change in state 1 = reset the state.\r\n */\r\nvoid arm_pid_init_f32(arm_pid_instance_f32 *S, int32_t resetStateFlag);\r\n\r\n/**\r\n * @brief  Reset function for the floating-point PID Control.\r\n * @param[in,out] S  is an instance of the floating-point PID Control structure\r\n */\r\nvoid arm_pid_reset_f32(arm_pid_instance_f32 *S);\r\n\r\n/**\r\n * @brief  Initialization function for the Q31 PID Control.\r\n * @param[in,out] S               points to an instance of the Q15 PID structure.\r\n * @param[in]     resetStateFlag  flag to reset the state. 0 = no change in state 1 = reset the state.\r\n */\r\nvoid arm_pid_init_q31(arm_pid_instance_q31 *S, int32_t resetStateFlag);\r\n\r\n/**\r\n * @brief  Reset function for the Q31 PID Control.\r\n * @param[in,out] S   points to an instance of the Q31 PID Control structure\r\n */\r\n\r\nvoid arm_pid_reset_q31(arm_pid_instance_q31 *S);\r\n\r\n/**\r\n * @brief  Initialization function for the Q15 PID Control.\r\n * @param[in,out] S               points to an instance of the Q15 PID structure.\r\n * @param[in]     resetStateFlag  flag to reset the state. 0 = no change in state 1 = reset the state.\r\n */\r\nvoid arm_pid_init_q15(arm_pid_instance_q15 *S, int32_t resetStateFlag);\r\n\r\n/**\r\n * @brief  Reset function for the Q15 PID Control.\r\n * @param[in,out] S  points to an instance of the q15 PID Control structure\r\n */\r\nvoid arm_pid_reset_q15(arm_pid_instance_q15 *S);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point Linear Interpolate function.\r\n */\r\ntypedef struct {\r\n  uint32_t   nValues;  /**< nValues */\r\n  float32_t  x1;       /**< x1 */\r\n  float32_t  xSpacing; /**< xSpacing */\r\n  float32_t *pYData;   /**< pointer to the table of Y values */\r\n} arm_linear_interp_instance_f32;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point bilinear interpolation function.\r\n */\r\ntypedef struct {\r\n  uint16_t   numRows; /**< number of rows in the data table. */\r\n  uint16_t   numCols; /**< number of columns in the data table. */\r\n  float32_t *pData;   /**< points to the data table. */\r\n} arm_bilinear_interp_instance_f32;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 bilinear interpolation function.\r\n */\r\ntypedef struct {\r\n  uint16_t numRows; /**< number of rows in the data table. */\r\n  uint16_t numCols; /**< number of columns in the data table. */\r\n  q31_t *  pData;   /**< points to the data table. */\r\n} arm_bilinear_interp_instance_q31;\r\n\r\n/**\r\n * @brief Instance structure for the Q15 bilinear interpolation function.\r\n */\r\ntypedef struct {\r\n  uint16_t numRows; /**< number of rows in the data table. */\r\n  uint16_t numCols; /**< number of columns in the data table. */\r\n  q15_t *  pData;   /**< points to the data table. */\r\n} arm_bilinear_interp_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q15 bilinear interpolation function.\r\n */\r\ntypedef struct {\r\n  uint16_t numRows; /**< number of rows in the data table. */\r\n  uint16_t numCols; /**< number of columns in the data table. */\r\n  q7_t *   pData;   /**< points to the data table. */\r\n} arm_bilinear_interp_instance_q7;\r\n\r\n/**\r\n * @brief Q7 vector multiplication.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_mult_q7(q7_t *pSrcA, q7_t *pSrcB, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q15 vector multiplication.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_mult_q15(q15_t *pSrcA, q15_t *pSrcB, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q31 vector multiplication.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_mult_q31(q31_t *pSrcA, q31_t *pSrcB, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Floating-point vector multiplication.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_mult_f32(float32_t *pSrcA, float32_t *pSrcB, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t  fftLen;           /**< length of the FFT. */\r\n  uint8_t   ifftFlag;         /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */\r\n  uint8_t   bitReverseFlag;   /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */\r\n  q15_t *   pTwiddle;         /**< points to the Sin twiddle factor table. */\r\n  uint16_t *pBitRevTable;     /**< points to the bit reversal table. */\r\n  uint16_t  twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  uint16_t  bitRevFactor;     /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */\r\n} arm_cfft_radix2_instance_q15;\r\n\r\n/* Deprecated */\r\narm_status arm_cfft_radix2_init_q15(arm_cfft_radix2_instance_q15 *S, uint16_t fftLen, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/* Deprecated */\r\nvoid arm_cfft_radix2_q15(const arm_cfft_radix2_instance_q15 *S, q15_t *pSrc);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t  fftLen;           /**< length of the FFT. */\r\n  uint8_t   ifftFlag;         /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */\r\n  uint8_t   bitReverseFlag;   /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */\r\n  q15_t *   pTwiddle;         /**< points to the twiddle factor table. */\r\n  uint16_t *pBitRevTable;     /**< points to the bit reversal table. */\r\n  uint16_t  twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  uint16_t  bitRevFactor;     /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */\r\n} arm_cfft_radix4_instance_q15;\r\n\r\n/* Deprecated */\r\narm_status arm_cfft_radix4_init_q15(arm_cfft_radix4_instance_q15 *S, uint16_t fftLen, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/* Deprecated */\r\nvoid arm_cfft_radix4_q15(const arm_cfft_radix4_instance_q15 *S, q15_t *pSrc);\r\n\r\n/**\r\n * @brief Instance structure for the Radix-2 Q31 CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t  fftLen;           /**< length of the FFT. */\r\n  uint8_t   ifftFlag;         /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */\r\n  uint8_t   bitReverseFlag;   /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */\r\n  q31_t *   pTwiddle;         /**< points to the Twiddle factor table. */\r\n  uint16_t *pBitRevTable;     /**< points to the bit reversal table. */\r\n  uint16_t  twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  uint16_t  bitRevFactor;     /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */\r\n} arm_cfft_radix2_instance_q31;\r\n\r\n/* Deprecated */\r\narm_status arm_cfft_radix2_init_q31(arm_cfft_radix2_instance_q31 *S, uint16_t fftLen, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/* Deprecated */\r\nvoid arm_cfft_radix2_q31(const arm_cfft_radix2_instance_q31 *S, q31_t *pSrc);\r\n\r\n/**\r\n * @brief Instance structure for the Q31 CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t  fftLen;           /**< length of the FFT. */\r\n  uint8_t   ifftFlag;         /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */\r\n  uint8_t   bitReverseFlag;   /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */\r\n  q31_t *   pTwiddle;         /**< points to the twiddle factor table. */\r\n  uint16_t *pBitRevTable;     /**< points to the bit reversal table. */\r\n  uint16_t  twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  uint16_t  bitRevFactor;     /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */\r\n} arm_cfft_radix4_instance_q31;\r\n\r\n/* Deprecated */\r\nvoid arm_cfft_radix4_q31(const arm_cfft_radix4_instance_q31 *S, q31_t *pSrc);\r\n\r\n/* Deprecated */\r\narm_status arm_cfft_radix4_init_q31(arm_cfft_radix4_instance_q31 *S, uint16_t fftLen, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t   fftLen;           /**< length of the FFT. */\r\n  uint8_t    ifftFlag;         /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */\r\n  uint8_t    bitReverseFlag;   /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */\r\n  float32_t *pTwiddle;         /**< points to the Twiddle factor table. */\r\n  uint16_t * pBitRevTable;     /**< points to the bit reversal table. */\r\n  uint16_t   twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  uint16_t   bitRevFactor;     /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */\r\n  float32_t  onebyfftLen;      /**< value of 1/fftLen. */\r\n} arm_cfft_radix2_instance_f32;\r\n\r\n/* Deprecated */\r\narm_status arm_cfft_radix2_init_f32(arm_cfft_radix2_instance_f32 *S, uint16_t fftLen, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/* Deprecated */\r\nvoid arm_cfft_radix2_f32(const arm_cfft_radix2_instance_f32 *S, float32_t *pSrc);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t   fftLen;           /**< length of the FFT. */\r\n  uint8_t    ifftFlag;         /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */\r\n  uint8_t    bitReverseFlag;   /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */\r\n  float32_t *pTwiddle;         /**< points to the Twiddle factor table. */\r\n  uint16_t * pBitRevTable;     /**< points to the bit reversal table. */\r\n  uint16_t   twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  uint16_t   bitRevFactor;     /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */\r\n  float32_t  onebyfftLen;      /**< value of 1/fftLen. */\r\n} arm_cfft_radix4_instance_f32;\r\n\r\n/* Deprecated */\r\narm_status arm_cfft_radix4_init_f32(arm_cfft_radix4_instance_f32 *S, uint16_t fftLen, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/* Deprecated */\r\nvoid arm_cfft_radix4_f32(const arm_cfft_radix4_instance_f32 *S, float32_t *pSrc);\r\n\r\n/**\r\n * @brief Instance structure for the fixed-point CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t        fftLen;       /**< length of the FFT. */\r\n  const q15_t *   pTwiddle;     /**< points to the Twiddle factor table. */\r\n  const uint16_t *pBitRevTable; /**< points to the bit reversal table. */\r\n  uint16_t        bitRevLength; /**< bit reversal table length. */\r\n} arm_cfft_instance_q15;\r\n\r\nvoid arm_cfft_q15(const arm_cfft_instance_q15 *S, q15_t *p1, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/**\r\n * @brief Instance structure for the fixed-point CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t        fftLen;       /**< length of the FFT. */\r\n  const q31_t *   pTwiddle;     /**< points to the Twiddle factor table. */\r\n  const uint16_t *pBitRevTable; /**< points to the bit reversal table. */\r\n  uint16_t        bitRevLength; /**< bit reversal table length. */\r\n} arm_cfft_instance_q31;\r\n\r\nvoid arm_cfft_q31(const arm_cfft_instance_q31 *S, q31_t *p1, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point CFFT/CIFFT function.\r\n */\r\ntypedef struct {\r\n  uint16_t         fftLen;       /**< length of the FFT. */\r\n  const float32_t *pTwiddle;     /**< points to the Twiddle factor table. */\r\n  const uint16_t * pBitRevTable; /**< points to the bit reversal table. */\r\n  uint16_t         bitRevLength; /**< bit reversal table length. */\r\n} arm_cfft_instance_f32;\r\n\r\nvoid arm_cfft_f32(const arm_cfft_instance_f32 *S, float32_t *p1, uint8_t ifftFlag, uint8_t bitReverseFlag);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 RFFT/RIFFT function.\r\n */\r\ntypedef struct {\r\n  uint32_t                     fftLenReal;        /**< length of the real FFT. */\r\n  uint8_t                      ifftFlagR;         /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */\r\n  uint8_t                      bitReverseFlagR;   /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */\r\n  uint32_t                     twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  q15_t *                      pTwiddleAReal;     /**< points to the real twiddle factor table. */\r\n  q15_t *                      pTwiddleBReal;     /**< points to the imag twiddle factor table. */\r\n  const arm_cfft_instance_q15 *pCfft;             /**< points to the complex FFT instance. */\r\n} arm_rfft_instance_q15;\r\n\r\narm_status arm_rfft_init_q15(arm_rfft_instance_q15 *S, uint32_t fftLenReal, uint32_t ifftFlagR, uint32_t bitReverseFlag);\r\n\r\nvoid arm_rfft_q15(const arm_rfft_instance_q15 *S, q15_t *pSrc, q15_t *pDst);\r\n\r\n/**\r\n * @brief Instance structure for the Q31 RFFT/RIFFT function.\r\n */\r\ntypedef struct {\r\n  uint32_t                     fftLenReal;        /**< length of the real FFT. */\r\n  uint8_t                      ifftFlagR;         /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */\r\n  uint8_t                      bitReverseFlagR;   /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */\r\n  uint32_t                     twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  q31_t *                      pTwiddleAReal;     /**< points to the real twiddle factor table. */\r\n  q31_t *                      pTwiddleBReal;     /**< points to the imag twiddle factor table. */\r\n  const arm_cfft_instance_q31 *pCfft;             /**< points to the complex FFT instance. */\r\n} arm_rfft_instance_q31;\r\n\r\narm_status arm_rfft_init_q31(arm_rfft_instance_q31 *S, uint32_t fftLenReal, uint32_t ifftFlagR, uint32_t bitReverseFlag);\r\n\r\nvoid arm_rfft_q31(const arm_rfft_instance_q31 *S, q31_t *pSrc, q31_t *pDst);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point RFFT/RIFFT function.\r\n */\r\ntypedef struct {\r\n  uint32_t                      fftLenReal;        /**< length of the real FFT. */\r\n  uint16_t                      fftLenBy2;         /**< length of the complex FFT. */\r\n  uint8_t                       ifftFlagR;         /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */\r\n  uint8_t                       bitReverseFlagR;   /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */\r\n  uint32_t                      twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */\r\n  float32_t *                   pTwiddleAReal;     /**< points to the real twiddle factor table. */\r\n  float32_t *                   pTwiddleBReal;     /**< points to the imag twiddle factor table. */\r\n  arm_cfft_radix4_instance_f32 *pCfft;             /**< points to the complex FFT instance. */\r\n} arm_rfft_instance_f32;\r\n\r\narm_status arm_rfft_init_f32(arm_rfft_instance_f32 *S, arm_cfft_radix4_instance_f32 *S_CFFT, uint32_t fftLenReal, uint32_t ifftFlagR, uint32_t bitReverseFlag);\r\n\r\nvoid arm_rfft_f32(const arm_rfft_instance_f32 *S, float32_t *pSrc, float32_t *pDst);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point RFFT/RIFFT function.\r\n */\r\ntypedef struct {\r\n  arm_cfft_instance_f32 Sint;         /**< Internal CFFT structure. */\r\n  uint16_t              fftLenRFFT;   /**< length of the real sequence */\r\n  float32_t *           pTwiddleRFFT; /**< Twiddle factors real stage  */\r\n} arm_rfft_fast_instance_f32;\r\n\r\narm_status arm_rfft_fast_init_f32(arm_rfft_fast_instance_f32 *S, uint16_t fftLen);\r\n\r\nvoid arm_rfft_fast_f32(arm_rfft_fast_instance_f32 *S, float32_t *p, float32_t *pOut, uint8_t ifftFlag);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point DCT4/IDCT4 function.\r\n */\r\ntypedef struct {\r\n  uint16_t                      N;          /**< length of the DCT4. */\r\n  uint16_t                      Nby2;       /**< half of the length of the DCT4. */\r\n  float32_t                     normalize;  /**< normalizing factor. */\r\n  float32_t *                   pTwiddle;   /**< points to the twiddle factor table. */\r\n  float32_t *                   pCosFactor; /**< points to the cosFactor table. */\r\n  arm_rfft_instance_f32 *       pRfft;      /**< points to the real FFT instance. */\r\n  arm_cfft_radix4_instance_f32 *pCfft;      /**< points to the complex FFT instance. */\r\n} arm_dct4_instance_f32;\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point DCT4/IDCT4.\r\n * @param[in,out] S          points to an instance of floating-point DCT4/IDCT4 structure.\r\n * @param[in]     S_RFFT     points to an instance of floating-point RFFT/RIFFT structure.\r\n * @param[in]     S_CFFT     points to an instance of floating-point CFFT/CIFFT structure.\r\n * @param[in]     N          length of the DCT4.\r\n * @param[in]     Nby2       half of the length of the DCT4.\r\n * @param[in]     normalize  normalizing factor.\r\n * @return      arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>fftLenReal</code> is not a supported transform length.\r\n */\r\narm_status arm_dct4_init_f32(arm_dct4_instance_f32 *S, arm_rfft_instance_f32 *S_RFFT, arm_cfft_radix4_instance_f32 *S_CFFT, uint16_t N, uint16_t Nby2, float32_t normalize);\r\n\r\n/**\r\n * @brief Processing function for the floating-point DCT4/IDCT4.\r\n * @param[in]     S              points to an instance of the floating-point DCT4/IDCT4 structure.\r\n * @param[in]     pState         points to state buffer.\r\n * @param[in,out] pInlineBuffer  points to the in-place input and output buffer.\r\n */\r\nvoid arm_dct4_f32(const arm_dct4_instance_f32 *S, float32_t *pState, float32_t *pInlineBuffer);\r\n\r\n/**\r\n * @brief Instance structure for the Q31 DCT4/IDCT4 function.\r\n */\r\ntypedef struct {\r\n  uint16_t                      N;          /**< length of the DCT4. */\r\n  uint16_t                      Nby2;       /**< half of the length of the DCT4. */\r\n  q31_t                         normalize;  /**< normalizing factor. */\r\n  q31_t *                       pTwiddle;   /**< points to the twiddle factor table. */\r\n  q31_t *                       pCosFactor; /**< points to the cosFactor table. */\r\n  arm_rfft_instance_q31 *       pRfft;      /**< points to the real FFT instance. */\r\n  arm_cfft_radix4_instance_q31 *pCfft;      /**< points to the complex FFT instance. */\r\n} arm_dct4_instance_q31;\r\n\r\n/**\r\n * @brief  Initialization function for the Q31 DCT4/IDCT4.\r\n * @param[in,out] S          points to an instance of Q31 DCT4/IDCT4 structure.\r\n * @param[in]     S_RFFT     points to an instance of Q31 RFFT/RIFFT structure\r\n * @param[in]     S_CFFT     points to an instance of Q31 CFFT/CIFFT structure\r\n * @param[in]     N          length of the DCT4.\r\n * @param[in]     Nby2       half of the length of the DCT4.\r\n * @param[in]     normalize  normalizing factor.\r\n * @return      arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>N</code> is not a supported transform length.\r\n */\r\narm_status arm_dct4_init_q31(arm_dct4_instance_q31 *S, arm_rfft_instance_q31 *S_RFFT, arm_cfft_radix4_instance_q31 *S_CFFT, uint16_t N, uint16_t Nby2, q31_t normalize);\r\n\r\n/**\r\n * @brief Processing function for the Q31 DCT4/IDCT4.\r\n * @param[in]     S              points to an instance of the Q31 DCT4 structure.\r\n * @param[in]     pState         points to state buffer.\r\n * @param[in,out] pInlineBuffer  points to the in-place input and output buffer.\r\n */\r\nvoid arm_dct4_q31(const arm_dct4_instance_q31 *S, q31_t *pState, q31_t *pInlineBuffer);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 DCT4/IDCT4 function.\r\n */\r\ntypedef struct {\r\n  uint16_t                      N;          /**< length of the DCT4. */\r\n  uint16_t                      Nby2;       /**< half of the length of the DCT4. */\r\n  q15_t                         normalize;  /**< normalizing factor. */\r\n  q15_t *                       pTwiddle;   /**< points to the twiddle factor table. */\r\n  q15_t *                       pCosFactor; /**< points to the cosFactor table. */\r\n  arm_rfft_instance_q15 *       pRfft;      /**< points to the real FFT instance. */\r\n  arm_cfft_radix4_instance_q15 *pCfft;      /**< points to the complex FFT instance. */\r\n} arm_dct4_instance_q15;\r\n\r\n/**\r\n * @brief  Initialization function for the Q15 DCT4/IDCT4.\r\n * @param[in,out] S          points to an instance of Q15 DCT4/IDCT4 structure.\r\n * @param[in]     S_RFFT     points to an instance of Q15 RFFT/RIFFT structure.\r\n * @param[in]     S_CFFT     points to an instance of Q15 CFFT/CIFFT structure.\r\n * @param[in]     N          length of the DCT4.\r\n * @param[in]     Nby2       half of the length of the DCT4.\r\n * @param[in]     normalize  normalizing factor.\r\n * @return      arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if <code>N</code> is not a supported transform length.\r\n */\r\narm_status arm_dct4_init_q15(arm_dct4_instance_q15 *S, arm_rfft_instance_q15 *S_RFFT, arm_cfft_radix4_instance_q15 *S_CFFT, uint16_t N, uint16_t Nby2, q15_t normalize);\r\n\r\n/**\r\n * @brief Processing function for the Q15 DCT4/IDCT4.\r\n * @param[in]     S              points to an instance of the Q15 DCT4 structure.\r\n * @param[in]     pState         points to state buffer.\r\n * @param[in,out] pInlineBuffer  points to the in-place input and output buffer.\r\n */\r\nvoid arm_dct4_q15(const arm_dct4_instance_q15 *S, q15_t *pState, q15_t *pInlineBuffer);\r\n\r\n/**\r\n * @brief Floating-point vector addition.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_add_f32(float32_t *pSrcA, float32_t *pSrcB, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q7 vector addition.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_add_q7(q7_t *pSrcA, q7_t *pSrcB, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q15 vector addition.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_add_q15(q15_t *pSrcA, q15_t *pSrcB, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q31 vector addition.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_add_q31(q31_t *pSrcA, q31_t *pSrcB, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Floating-point vector subtraction.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_sub_f32(float32_t *pSrcA, float32_t *pSrcB, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q7 vector subtraction.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_sub_q7(q7_t *pSrcA, q7_t *pSrcB, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q15 vector subtraction.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_sub_q15(q15_t *pSrcA, q15_t *pSrcB, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q31 vector subtraction.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_sub_q31(q31_t *pSrcA, q31_t *pSrcB, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Multiplies a floating-point vector by a scalar.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[in]  scale      scale factor to be applied\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_scale_f32(float32_t *pSrc, float32_t scale, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Multiplies a Q7 vector by a scalar.\r\n * @param[in]  pSrc        points to the input vector\r\n * @param[in]  scaleFract  fractional portion of the scale value\r\n * @param[in]  shift       number of bits to shift the result by\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  blockSize   number of samples in the vector\r\n */\r\nvoid arm_scale_q7(q7_t *pSrc, q7_t scaleFract, int8_t shift, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Multiplies a Q15 vector by a scalar.\r\n * @param[in]  pSrc        points to the input vector\r\n * @param[in]  scaleFract  fractional portion of the scale value\r\n * @param[in]  shift       number of bits to shift the result by\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  blockSize   number of samples in the vector\r\n */\r\nvoid arm_scale_q15(q15_t *pSrc, q15_t scaleFract, int8_t shift, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Multiplies a Q31 vector by a scalar.\r\n * @param[in]  pSrc        points to the input vector\r\n * @param[in]  scaleFract  fractional portion of the scale value\r\n * @param[in]  shift       number of bits to shift the result by\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  blockSize   number of samples in the vector\r\n */\r\nvoid arm_scale_q31(q31_t *pSrc, q31_t scaleFract, int8_t shift, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q7 vector absolute value.\r\n * @param[in]  pSrc       points to the input buffer\r\n * @param[out] pDst       points to the output buffer\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_abs_q7(q7_t *pSrc, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Floating-point vector absolute value.\r\n * @param[in]  pSrc       points to the input buffer\r\n * @param[out] pDst       points to the output buffer\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_abs_f32(float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q15 vector absolute value.\r\n * @param[in]  pSrc       points to the input buffer\r\n * @param[out] pDst       points to the output buffer\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_abs_q15(q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Q31 vector absolute value.\r\n * @param[in]  pSrc       points to the input buffer\r\n * @param[out] pDst       points to the output buffer\r\n * @param[in]  blockSize  number of samples in each vector\r\n */\r\nvoid arm_abs_q31(q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Dot product of floating-point vectors.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n * @param[out] result     output result returned here\r\n */\r\nvoid arm_dot_prod_f32(float32_t *pSrcA, float32_t *pSrcB, uint32_t blockSize, float32_t *result);\r\n\r\n/**\r\n * @brief Dot product of Q7 vectors.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n * @param[out] result     output result returned here\r\n */\r\nvoid arm_dot_prod_q7(q7_t *pSrcA, q7_t *pSrcB, uint32_t blockSize, q31_t *result);\r\n\r\n/**\r\n * @brief Dot product of Q15 vectors.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n * @param[out] result     output result returned here\r\n */\r\nvoid arm_dot_prod_q15(q15_t *pSrcA, q15_t *pSrcB, uint32_t blockSize, q63_t *result);\r\n\r\n/**\r\n * @brief Dot product of Q31 vectors.\r\n * @param[in]  pSrcA      points to the first input vector\r\n * @param[in]  pSrcB      points to the second input vector\r\n * @param[in]  blockSize  number of samples in each vector\r\n * @param[out] result     output result returned here\r\n */\r\nvoid arm_dot_prod_q31(q31_t *pSrcA, q31_t *pSrcB, uint32_t blockSize, q63_t *result);\r\n\r\n/**\r\n * @brief  Shifts the elements of a Q7 vector a specified number of bits.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[in]  shiftBits  number of bits to shift.  A positive value shifts left; a negative value shifts right.\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_shift_q7(q7_t *pSrc, int8_t shiftBits, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Shifts the elements of a Q15 vector a specified number of bits.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[in]  shiftBits  number of bits to shift.  A positive value shifts left; a negative value shifts right.\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_shift_q15(q15_t *pSrc, int8_t shiftBits, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Shifts the elements of a Q31 vector a specified number of bits.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[in]  shiftBits  number of bits to shift.  A positive value shifts left; a negative value shifts right.\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_shift_q31(q31_t *pSrc, int8_t shiftBits, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Adds a constant offset to a floating-point vector.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[in]  offset     is the offset to be added\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_offset_f32(float32_t *pSrc, float32_t offset, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Adds a constant offset to a Q7 vector.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[in]  offset     is the offset to be added\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_offset_q7(q7_t *pSrc, q7_t offset, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Adds a constant offset to a Q15 vector.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[in]  offset     is the offset to be added\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_offset_q15(q15_t *pSrc, q15_t offset, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Adds a constant offset to a Q31 vector.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[in]  offset     is the offset to be added\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_offset_q31(q31_t *pSrc, q31_t offset, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Negates the elements of a floating-point vector.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_negate_f32(float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Negates the elements of a Q7 vector.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_negate_q7(q7_t *pSrc, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Negates the elements of a Q15 vector.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_negate_q15(q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Negates the elements of a Q31 vector.\r\n * @param[in]  pSrc       points to the input vector\r\n * @param[out] pDst       points to the output vector\r\n * @param[in]  blockSize  number of samples in the vector\r\n */\r\nvoid arm_negate_q31(q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Copies the elements of a floating-point vector.\r\n * @param[in]  pSrc       input pointer\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_copy_f32(float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Copies the elements of a Q7 vector.\r\n * @param[in]  pSrc       input pointer\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_copy_q7(q7_t *pSrc, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Copies the elements of a Q15 vector.\r\n * @param[in]  pSrc       input pointer\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_copy_q15(q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Copies the elements of a Q31 vector.\r\n * @param[in]  pSrc       input pointer\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_copy_q31(q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Fills a constant value into a floating-point vector.\r\n * @param[in]  value      input value to be filled\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_fill_f32(float32_t value, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Fills a constant value into a Q7 vector.\r\n * @param[in]  value      input value to be filled\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_fill_q7(q7_t value, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Fills a constant value into a Q15 vector.\r\n * @param[in]  value      input value to be filled\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_fill_q15(q15_t value, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Fills a constant value into a Q31 vector.\r\n * @param[in]  value      input value to be filled\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_fill_q31(q31_t value, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Convolution of floating-point sequences.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the location where the output result is written.  Length srcALen+srcBLen-1.\r\n */\r\nvoid arm_conv_f32(float32_t *pSrcA, uint32_t srcALen, float32_t *pSrcB, uint32_t srcBLen, float32_t *pDst);\r\n\r\n/**\r\n * @brief Convolution of Q15 sequences.\r\n * @param[in]  pSrcA      points to the first input sequence.\r\n * @param[in]  srcALen    length of the first input sequence.\r\n * @param[in]  pSrcB      points to the second input sequence.\r\n * @param[in]  srcBLen    length of the second input sequence.\r\n * @param[out] pDst       points to the block of output data  Length srcALen+srcBLen-1.\r\n * @param[in]  pScratch1  points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n * @param[in]  pScratch2  points to scratch buffer of size min(srcALen, srcBLen).\r\n */\r\nvoid arm_conv_opt_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, q15_t *pScratch1, q15_t *pScratch2);\r\n\r\n/**\r\n * @brief Convolution of Q15 sequences.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the location where the output result is written.  Length srcALen+srcBLen-1.\r\n */\r\nvoid arm_conv_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst);\r\n\r\n/**\r\n * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length srcALen+srcBLen-1.\r\n */\r\nvoid arm_conv_fast_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst);\r\n\r\n/**\r\n * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA      points to the first input sequence.\r\n * @param[in]  srcALen    length of the first input sequence.\r\n * @param[in]  pSrcB      points to the second input sequence.\r\n * @param[in]  srcBLen    length of the second input sequence.\r\n * @param[out] pDst       points to the block of output data  Length srcALen+srcBLen-1.\r\n * @param[in]  pScratch1  points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n * @param[in]  pScratch2  points to scratch buffer of size min(srcALen, srcBLen).\r\n */\r\nvoid arm_conv_fast_opt_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, q15_t *pScratch1, q15_t *pScratch2);\r\n\r\n/**\r\n * @brief Convolution of Q31 sequences.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length srcALen+srcBLen-1.\r\n */\r\nvoid arm_conv_q31(q31_t *pSrcA, uint32_t srcALen, q31_t *pSrcB, uint32_t srcBLen, q31_t *pDst);\r\n\r\n/**\r\n * @brief Convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length srcALen+srcBLen-1.\r\n */\r\nvoid arm_conv_fast_q31(q31_t *pSrcA, uint32_t srcALen, q31_t *pSrcB, uint32_t srcBLen, q31_t *pDst);\r\n\r\n/**\r\n * @brief Convolution of Q7 sequences.\r\n * @param[in]  pSrcA      points to the first input sequence.\r\n * @param[in]  srcALen    length of the first input sequence.\r\n * @param[in]  pSrcB      points to the second input sequence.\r\n * @param[in]  srcBLen    length of the second input sequence.\r\n * @param[out] pDst       points to the block of output data  Length srcALen+srcBLen-1.\r\n * @param[in]  pScratch1  points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n * @param[in]  pScratch2  points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen).\r\n */\r\nvoid arm_conv_opt_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst, q15_t *pScratch1, q15_t *pScratch2);\r\n\r\n/**\r\n * @brief Convolution of Q7 sequences.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length srcALen+srcBLen-1.\r\n */\r\nvoid arm_conv_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst);\r\n\r\n/**\r\n * @brief Partial convolution of floating-point sequences.\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_f32(float32_t *pSrcA, uint32_t srcALen, float32_t *pSrcB, uint32_t srcBLen, float32_t *pDst, uint32_t firstIndex, uint32_t numPoints);\r\n\r\n/**\r\n * @brief Partial convolution of Q15 sequences.\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @param[in]  pScratch1   points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n * @param[in]  pScratch2   points to scratch buffer of size min(srcALen, srcBLen).\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_opt_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, uint32_t firstIndex, uint32_t numPoints, q15_t *pScratch1, q15_t *pScratch2);\r\n\r\n/**\r\n * @brief Partial convolution of Q15 sequences.\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, uint32_t firstIndex, uint32_t numPoints);\r\n\r\n/**\r\n * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_fast_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, uint32_t firstIndex, uint32_t numPoints);\r\n\r\n/**\r\n * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @param[in]  pScratch1   points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n * @param[in]  pScratch2   points to scratch buffer of size min(srcALen, srcBLen).\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_fast_opt_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, uint32_t firstIndex, uint32_t numPoints, q15_t *pScratch1, q15_t *pScratch2);\r\n\r\n/**\r\n * @brief Partial convolution of Q31 sequences.\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_q31(q31_t *pSrcA, uint32_t srcALen, q31_t *pSrcB, uint32_t srcBLen, q31_t *pDst, uint32_t firstIndex, uint32_t numPoints);\r\n\r\n/**\r\n * @brief Partial convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_fast_q31(q31_t *pSrcA, uint32_t srcALen, q31_t *pSrcB, uint32_t srcBLen, q31_t *pDst, uint32_t firstIndex, uint32_t numPoints);\r\n\r\n/**\r\n * @brief Partial convolution of Q7 sequences\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @param[in]  pScratch1   points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n * @param[in]  pScratch2   points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen).\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_opt_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst, uint32_t firstIndex, uint32_t numPoints, q15_t *pScratch1, q15_t *pScratch2);\r\n\r\n/**\r\n * @brief Partial convolution of Q7 sequences.\r\n * @param[in]  pSrcA       points to the first input sequence.\r\n * @param[in]  srcALen     length of the first input sequence.\r\n * @param[in]  pSrcB       points to the second input sequence.\r\n * @param[in]  srcBLen     length of the second input sequence.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  firstIndex  is the first output sample to start with.\r\n * @param[in]  numPoints   is the number of output points to be computed.\r\n * @return  Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2].\r\n */\r\narm_status arm_conv_partial_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst, uint32_t firstIndex, uint32_t numPoints);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 FIR decimator.\r\n */\r\ntypedef struct {\r\n  uint8_t  M;       /**< decimation factor. */\r\n  uint16_t numTaps; /**< number of coefficients in the filter. */\r\n  q15_t *  pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/\r\n  q15_t *  pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n} arm_fir_decimate_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 FIR decimator.\r\n */\r\ntypedef struct {\r\n  uint8_t  M;       /**< decimation factor. */\r\n  uint16_t numTaps; /**< number of coefficients in the filter. */\r\n  q31_t *  pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/\r\n  q31_t *  pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n} arm_fir_decimate_instance_q31;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point FIR decimator.\r\n */\r\ntypedef struct {\r\n  uint8_t    M;       /**< decimation factor. */\r\n  uint16_t   numTaps; /**< number of coefficients in the filter. */\r\n  float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/\r\n  float32_t *pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n} arm_fir_decimate_instance_f32;\r\n\r\n/**\r\n * @brief Processing function for the floating-point FIR decimator.\r\n * @param[in]  S          points to an instance of the floating-point FIR decimator structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of input samples to process per call.\r\n */\r\nvoid arm_fir_decimate_f32(const arm_fir_decimate_instance_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point FIR decimator.\r\n * @param[in,out] S          points to an instance of the floating-point FIR decimator structure.\r\n * @param[in]     numTaps    number of coefficients in the filter.\r\n * @param[in]     M          decimation factor.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of input samples to process per call.\r\n * @return    The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if\r\n * <code>blockSize</code> is not a multiple of <code>M</code>.\r\n */\r\narm_status arm_fir_decimate_init_f32(arm_fir_decimate_instance_f32 *S, uint16_t numTaps, uint8_t M, float32_t *pCoeffs, float32_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q15 FIR decimator.\r\n * @param[in]  S          points to an instance of the Q15 FIR decimator structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of input samples to process per call.\r\n */\r\nvoid arm_fir_decimate_q15(const arm_fir_decimate_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q15 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4.\r\n * @param[in]  S          points to an instance of the Q15 FIR decimator structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of input samples to process per call.\r\n */\r\nvoid arm_fir_decimate_fast_q15(const arm_fir_decimate_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q15 FIR decimator.\r\n * @param[in,out] S          points to an instance of the Q15 FIR decimator structure.\r\n * @param[in]     numTaps    number of coefficients in the filter.\r\n * @param[in]     M          decimation factor.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of input samples to process per call.\r\n * @return    The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if\r\n * <code>blockSize</code> is not a multiple of <code>M</code>.\r\n */\r\narm_status arm_fir_decimate_init_q15(arm_fir_decimate_instance_q15 *S, uint16_t numTaps, uint8_t M, q15_t *pCoeffs, q15_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q31 FIR decimator.\r\n * @param[in]  S     points to an instance of the Q31 FIR decimator structure.\r\n * @param[in]  pSrc  points to the block of input data.\r\n * @param[out] pDst  points to the block of output data\r\n * @param[in] blockSize number of input samples to process per call.\r\n */\r\nvoid arm_fir_decimate_q31(const arm_fir_decimate_instance_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q31 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4.\r\n * @param[in]  S          points to an instance of the Q31 FIR decimator structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of input samples to process per call.\r\n */\r\nvoid arm_fir_decimate_fast_q31(arm_fir_decimate_instance_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q31 FIR decimator.\r\n * @param[in,out] S          points to an instance of the Q31 FIR decimator structure.\r\n * @param[in]     numTaps    number of coefficients in the filter.\r\n * @param[in]     M          decimation factor.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of input samples to process per call.\r\n * @return    The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if\r\n * <code>blockSize</code> is not a multiple of <code>M</code>.\r\n */\r\narm_status arm_fir_decimate_init_q31(arm_fir_decimate_instance_q31 *S, uint16_t numTaps, uint8_t M, q31_t *pCoeffs, q31_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 FIR interpolator.\r\n */\r\ntypedef struct {\r\n  uint8_t  L;           /**< upsample factor. */\r\n  uint16_t phaseLength; /**< length of each polyphase filter component. */\r\n  q15_t *  pCoeffs;     /**< points to the coefficient array. The array is of length L*phaseLength. */\r\n  q15_t *  pState;      /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */\r\n} arm_fir_interpolate_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 FIR interpolator.\r\n */\r\ntypedef struct {\r\n  uint8_t  L;           /**< upsample factor. */\r\n  uint16_t phaseLength; /**< length of each polyphase filter component. */\r\n  q31_t *  pCoeffs;     /**< points to the coefficient array. The array is of length L*phaseLength. */\r\n  q31_t *  pState;      /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */\r\n} arm_fir_interpolate_instance_q31;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point FIR interpolator.\r\n */\r\ntypedef struct {\r\n  uint8_t    L;           /**< upsample factor. */\r\n  uint16_t   phaseLength; /**< length of each polyphase filter component. */\r\n  float32_t *pCoeffs;     /**< points to the coefficient array. The array is of length L*phaseLength. */\r\n  float32_t *pState;      /**< points to the state variable array. The array is of length phaseLength+numTaps-1. */\r\n} arm_fir_interpolate_instance_f32;\r\n\r\n/**\r\n * @brief Processing function for the Q15 FIR interpolator.\r\n * @param[in]  S          points to an instance of the Q15 FIR interpolator structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of input samples to process per call.\r\n */\r\nvoid arm_fir_interpolate_q15(const arm_fir_interpolate_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q15 FIR interpolator.\r\n * @param[in,out] S          points to an instance of the Q15 FIR interpolator structure.\r\n * @param[in]     L          upsample factor.\r\n * @param[in]     numTaps    number of filter coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficient buffer.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of input samples to process per call.\r\n * @return        The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if\r\n * the filter length <code>numTaps</code> is not a multiple of the interpolation factor <code>L</code>.\r\n */\r\narm_status arm_fir_interpolate_init_q15(arm_fir_interpolate_instance_q15 *S, uint8_t L, uint16_t numTaps, q15_t *pCoeffs, q15_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q31 FIR interpolator.\r\n * @param[in]  S          points to an instance of the Q15 FIR interpolator structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of input samples to process per call.\r\n */\r\nvoid arm_fir_interpolate_q31(const arm_fir_interpolate_instance_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q31 FIR interpolator.\r\n * @param[in,out] S          points to an instance of the Q31 FIR interpolator structure.\r\n * @param[in]     L          upsample factor.\r\n * @param[in]     numTaps    number of filter coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficient buffer.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of input samples to process per call.\r\n * @return        The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if\r\n * the filter length <code>numTaps</code> is not a multiple of the interpolation factor <code>L</code>.\r\n */\r\narm_status arm_fir_interpolate_init_q31(arm_fir_interpolate_instance_q31 *S, uint8_t L, uint16_t numTaps, q31_t *pCoeffs, q31_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the floating-point FIR interpolator.\r\n * @param[in]  S          points to an instance of the floating-point FIR interpolator structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of input samples to process per call.\r\n */\r\nvoid arm_fir_interpolate_f32(const arm_fir_interpolate_instance_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point FIR interpolator.\r\n * @param[in,out] S          points to an instance of the floating-point FIR interpolator structure.\r\n * @param[in]     L          upsample factor.\r\n * @param[in]     numTaps    number of filter coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficient buffer.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     blockSize  number of input samples to process per call.\r\n * @return        The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if\r\n * the filter length <code>numTaps</code> is not a multiple of the interpolation factor <code>L</code>.\r\n */\r\narm_status arm_fir_interpolate_init_f32(arm_fir_interpolate_instance_f32 *S, uint8_t L, uint16_t numTaps, float32_t *pCoeffs, float32_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the high precision Q31 Biquad cascade filter.\r\n */\r\ntypedef struct {\r\n  uint8_t numStages; /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */\r\n  q63_t * pState;    /**< points to the array of state coefficients.  The array is of length 4*numStages. */\r\n  q31_t * pCoeffs;   /**< points to the array of coefficients.  The array is of length 5*numStages. */\r\n  uint8_t postShift; /**< additional shift, in bits, applied to each output sample. */\r\n} arm_biquad_cas_df1_32x64_ins_q31;\r\n\r\n/**\r\n * @param[in]  S          points to an instance of the high precision Q31 Biquad cascade filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cas_df1_32x64_q31(const arm_biquad_cas_df1_32x64_ins_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @param[in,out] S          points to an instance of the high precision Q31 Biquad cascade filter structure.\r\n * @param[in]     numStages  number of 2nd order stages in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     postShift  shift to be applied to the output. Varies according to the coefficients format\r\n */\r\nvoid arm_biquad_cas_df1_32x64_init_q31(arm_biquad_cas_df1_32x64_ins_q31 *S, uint8_t numStages, q31_t *pCoeffs, q63_t *pState, uint8_t postShift);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter.\r\n */\r\ntypedef struct {\r\n  uint8_t    numStages; /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */\r\n  float32_t *pState;    /**< points to the array of state coefficients.  The array is of length 2*numStages. */\r\n  float32_t *pCoeffs;   /**< points to the array of coefficients.  The array is of length 5*numStages. */\r\n} arm_biquad_cascade_df2T_instance_f32;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter.\r\n */\r\ntypedef struct {\r\n  uint8_t    numStages; /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */\r\n  float32_t *pState;    /**< points to the array of state coefficients.  The array is of length 4*numStages. */\r\n  float32_t *pCoeffs;   /**< points to the array of coefficients.  The array is of length 5*numStages. */\r\n} arm_biquad_cascade_stereo_df2T_instance_f32;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter.\r\n */\r\ntypedef struct {\r\n  uint8_t    numStages; /**< number of 2nd order stages in the filter.  Overall order is 2*numStages. */\r\n  float64_t *pState;    /**< points to the array of state coefficients.  The array is of length 2*numStages. */\r\n  float64_t *pCoeffs;   /**< points to the array of coefficients.  The array is of length 5*numStages. */\r\n} arm_biquad_cascade_df2T_instance_f64;\r\n\r\n/**\r\n * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter.\r\n * @param[in]  S          points to an instance of the filter data structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cascade_df2T_f32(const arm_biquad_cascade_df2T_instance_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. 2 channels\r\n * @param[in]  S          points to an instance of the filter data structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cascade_stereo_df2T_f32(const arm_biquad_cascade_stereo_df2T_instance_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter.\r\n * @param[in]  S          points to an instance of the filter data structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_biquad_cascade_df2T_f64(const arm_biquad_cascade_df2T_instance_f64 *S, float64_t *pSrc, float64_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point transposed direct form II Biquad cascade filter.\r\n * @param[in,out] S          points to an instance of the filter data structure.\r\n * @param[in]     numStages  number of 2nd order stages in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n */\r\nvoid arm_biquad_cascade_df2T_init_f32(arm_biquad_cascade_df2T_instance_f32 *S, uint8_t numStages, float32_t *pCoeffs, float32_t *pState);\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point transposed direct form II Biquad cascade filter.\r\n * @param[in,out] S          points to an instance of the filter data structure.\r\n * @param[in]     numStages  number of 2nd order stages in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n */\r\nvoid arm_biquad_cascade_stereo_df2T_init_f32(arm_biquad_cascade_stereo_df2T_instance_f32 *S, uint8_t numStages, float32_t *pCoeffs, float32_t *pState);\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point transposed direct form II Biquad cascade filter.\r\n * @param[in,out] S          points to an instance of the filter data structure.\r\n * @param[in]     numStages  number of 2nd order stages in the filter.\r\n * @param[in]     pCoeffs    points to the filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n */\r\nvoid arm_biquad_cascade_df2T_init_f64(arm_biquad_cascade_df2T_instance_f64 *S, uint8_t numStages, float64_t *pCoeffs, float64_t *pState);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 FIR lattice filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numStages; /**< number of filter stages. */\r\n  q15_t *  pState;    /**< points to the state variable array. The array is of length numStages. */\r\n  q15_t *  pCoeffs;   /**< points to the coefficient array. The array is of length numStages. */\r\n} arm_fir_lattice_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 FIR lattice filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numStages; /**< number of filter stages. */\r\n  q31_t *  pState;    /**< points to the state variable array. The array is of length numStages. */\r\n  q31_t *  pCoeffs;   /**< points to the coefficient array. The array is of length numStages. */\r\n} arm_fir_lattice_instance_q31;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point FIR lattice filter.\r\n */\r\ntypedef struct {\r\n  uint16_t   numStages; /**< number of filter stages. */\r\n  float32_t *pState;    /**< points to the state variable array. The array is of length numStages. */\r\n  float32_t *pCoeffs;   /**< points to the coefficient array. The array is of length numStages. */\r\n} arm_fir_lattice_instance_f32;\r\n\r\n/**\r\n * @brief Initialization function for the Q15 FIR lattice filter.\r\n * @param[in] S          points to an instance of the Q15 FIR lattice structure.\r\n * @param[in] numStages  number of filter stages.\r\n * @param[in] pCoeffs    points to the coefficient buffer.  The array is of length numStages.\r\n * @param[in] pState     points to the state buffer.  The array is of length numStages.\r\n */\r\nvoid arm_fir_lattice_init_q15(arm_fir_lattice_instance_q15 *S, uint16_t numStages, q15_t *pCoeffs, q15_t *pState);\r\n\r\n/**\r\n * @brief Processing function for the Q15 FIR lattice filter.\r\n * @param[in]  S          points to an instance of the Q15 FIR lattice structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_lattice_q15(const arm_fir_lattice_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for the Q31 FIR lattice filter.\r\n * @param[in] S          points to an instance of the Q31 FIR lattice structure.\r\n * @param[in] numStages  number of filter stages.\r\n * @param[in] pCoeffs    points to the coefficient buffer.  The array is of length numStages.\r\n * @param[in] pState     points to the state buffer.   The array is of length numStages.\r\n */\r\nvoid arm_fir_lattice_init_q31(arm_fir_lattice_instance_q31 *S, uint16_t numStages, q31_t *pCoeffs, q31_t *pState);\r\n\r\n/**\r\n * @brief Processing function for the Q31 FIR lattice filter.\r\n * @param[in]  S          points to an instance of the Q31 FIR lattice structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_lattice_q31(const arm_fir_lattice_instance_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for the floating-point FIR lattice filter.\r\n * @param[in] S          points to an instance of the floating-point FIR lattice structure.\r\n * @param[in] numStages  number of filter stages.\r\n * @param[in] pCoeffs    points to the coefficient buffer.  The array is of length numStages.\r\n * @param[in] pState     points to the state buffer.  The array is of length numStages.\r\n */\r\nvoid arm_fir_lattice_init_f32(arm_fir_lattice_instance_f32 *S, uint16_t numStages, float32_t *pCoeffs, float32_t *pState);\r\n\r\n/**\r\n * @brief Processing function for the floating-point FIR lattice filter.\r\n * @param[in]  S          points to an instance of the floating-point FIR lattice structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_fir_lattice_f32(const arm_fir_lattice_instance_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 IIR lattice filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numStages; /**< number of stages in the filter. */\r\n  q15_t *  pState;    /**< points to the state variable array. The array is of length numStages+blockSize. */\r\n  q15_t *  pkCoeffs;  /**< points to the reflection coefficient array. The array is of length numStages. */\r\n  q15_t *  pvCoeffs;  /**< points to the ladder coefficient array. The array is of length numStages+1. */\r\n} arm_iir_lattice_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 IIR lattice filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numStages; /**< number of stages in the filter. */\r\n  q31_t *  pState;    /**< points to the state variable array. The array is of length numStages+blockSize. */\r\n  q31_t *  pkCoeffs;  /**< points to the reflection coefficient array. The array is of length numStages. */\r\n  q31_t *  pvCoeffs;  /**< points to the ladder coefficient array. The array is of length numStages+1. */\r\n} arm_iir_lattice_instance_q31;\r\n\r\n/**\r\n * @brief Instance structure for the floating-point IIR lattice filter.\r\n */\r\ntypedef struct {\r\n  uint16_t   numStages; /**< number of stages in the filter. */\r\n  float32_t *pState;    /**< points to the state variable array. The array is of length numStages+blockSize. */\r\n  float32_t *pkCoeffs;  /**< points to the reflection coefficient array. The array is of length numStages. */\r\n  float32_t *pvCoeffs;  /**< points to the ladder coefficient array. The array is of length numStages+1. */\r\n} arm_iir_lattice_instance_f32;\r\n\r\n/**\r\n * @brief Processing function for the floating-point IIR lattice filter.\r\n * @param[in]  S          points to an instance of the floating-point IIR lattice structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_iir_lattice_f32(const arm_iir_lattice_instance_f32 *S, float32_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for the floating-point IIR lattice filter.\r\n * @param[in] S          points to an instance of the floating-point IIR lattice structure.\r\n * @param[in] numStages  number of stages in the filter.\r\n * @param[in] pkCoeffs   points to the reflection coefficient buffer.  The array is of length numStages.\r\n * @param[in] pvCoeffs   points to the ladder coefficient buffer.  The array is of length numStages+1.\r\n * @param[in] pState     points to the state buffer.  The array is of length numStages+blockSize-1.\r\n * @param[in] blockSize  number of samples to process.\r\n */\r\nvoid arm_iir_lattice_init_f32(arm_iir_lattice_instance_f32 *S, uint16_t numStages, float32_t *pkCoeffs, float32_t *pvCoeffs, float32_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q31 IIR lattice filter.\r\n * @param[in]  S          points to an instance of the Q31 IIR lattice structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_iir_lattice_q31(const arm_iir_lattice_instance_q31 *S, q31_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for the Q31 IIR lattice filter.\r\n * @param[in] S          points to an instance of the Q31 IIR lattice structure.\r\n * @param[in] numStages  number of stages in the filter.\r\n * @param[in] pkCoeffs   points to the reflection coefficient buffer.  The array is of length numStages.\r\n * @param[in] pvCoeffs   points to the ladder coefficient buffer.  The array is of length numStages+1.\r\n * @param[in] pState     points to the state buffer.  The array is of length numStages+blockSize.\r\n * @param[in] blockSize  number of samples to process.\r\n */\r\nvoid arm_iir_lattice_init_q31(arm_iir_lattice_instance_q31 *S, uint16_t numStages, q31_t *pkCoeffs, q31_t *pvCoeffs, q31_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q15 IIR lattice filter.\r\n * @param[in]  S          points to an instance of the Q15 IIR lattice structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[out] pDst       points to the block of output data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_iir_lattice_q15(const arm_iir_lattice_instance_q15 *S, q15_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for the Q15 IIR lattice filter.\r\n * @param[in] S          points to an instance of the fixed-point Q15 IIR lattice structure.\r\n * @param[in] numStages  number of stages in the filter.\r\n * @param[in] pkCoeffs   points to reflection coefficient buffer.  The array is of length numStages.\r\n * @param[in] pvCoeffs   points to ladder coefficient buffer.  The array is of length numStages+1.\r\n * @param[in] pState     points to state buffer.  The array is of length numStages+blockSize.\r\n * @param[in] blockSize  number of samples to process per call.\r\n */\r\nvoid arm_iir_lattice_init_q15(arm_iir_lattice_instance_q15 *S, uint16_t numStages, q15_t *pkCoeffs, q15_t *pvCoeffs, q15_t *pState, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point LMS filter.\r\n */\r\ntypedef struct {\r\n  uint16_t   numTaps; /**< number of coefficients in the filter. */\r\n  float32_t *pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */\r\n  float32_t  mu;      /**< step size that controls filter coefficient updates. */\r\n} arm_lms_instance_f32;\r\n\r\n/**\r\n * @brief Processing function for floating-point LMS filter.\r\n * @param[in]  S          points to an instance of the floating-point LMS filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[in]  pRef       points to the block of reference data.\r\n * @param[out] pOut       points to the block of output data.\r\n * @param[out] pErr       points to the block of error data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_lms_f32(const arm_lms_instance_f32 *S, float32_t *pSrc, float32_t *pRef, float32_t *pOut, float32_t *pErr, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for floating-point LMS filter.\r\n * @param[in] S          points to an instance of the floating-point LMS filter structure.\r\n * @param[in] numTaps    number of filter coefficients.\r\n * @param[in] pCoeffs    points to the coefficient buffer.\r\n * @param[in] pState     points to state buffer.\r\n * @param[in] mu         step size that controls filter coefficient updates.\r\n * @param[in] blockSize  number of samples to process.\r\n */\r\nvoid arm_lms_init_f32(arm_lms_instance_f32 *S, uint16_t numTaps, float32_t *pCoeffs, float32_t *pState, float32_t mu, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 LMS filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps;   /**< number of coefficients in the filter. */\r\n  q15_t *  pState;    /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  q15_t *  pCoeffs;   /**< points to the coefficient array. The array is of length numTaps. */\r\n  q15_t    mu;        /**< step size that controls filter coefficient updates. */\r\n  uint32_t postShift; /**< bit shift applied to coefficients. */\r\n} arm_lms_instance_q15;\r\n\r\n/**\r\n * @brief Initialization function for the Q15 LMS filter.\r\n * @param[in] S          points to an instance of the Q15 LMS filter structure.\r\n * @param[in] numTaps    number of filter coefficients.\r\n * @param[in] pCoeffs    points to the coefficient buffer.\r\n * @param[in] pState     points to the state buffer.\r\n * @param[in] mu         step size that controls filter coefficient updates.\r\n * @param[in] blockSize  number of samples to process.\r\n * @param[in] postShift  bit shift applied to coefficients.\r\n */\r\nvoid arm_lms_init_q15(arm_lms_instance_q15 *S, uint16_t numTaps, q15_t *pCoeffs, q15_t *pState, q15_t mu, uint32_t blockSize, uint32_t postShift);\r\n\r\n/**\r\n * @brief Processing function for Q15 LMS filter.\r\n * @param[in]  S          points to an instance of the Q15 LMS filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[in]  pRef       points to the block of reference data.\r\n * @param[out] pOut       points to the block of output data.\r\n * @param[out] pErr       points to the block of error data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_lms_q15(const arm_lms_instance_q15 *S, q15_t *pSrc, q15_t *pRef, q15_t *pOut, q15_t *pErr, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the Q31 LMS filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps;   /**< number of coefficients in the filter. */\r\n  q31_t *  pState;    /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  q31_t *  pCoeffs;   /**< points to the coefficient array. The array is of length numTaps. */\r\n  q31_t    mu;        /**< step size that controls filter coefficient updates. */\r\n  uint32_t postShift; /**< bit shift applied to coefficients. */\r\n} arm_lms_instance_q31;\r\n\r\n/**\r\n * @brief Processing function for Q31 LMS filter.\r\n * @param[in]  S          points to an instance of the Q15 LMS filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[in]  pRef       points to the block of reference data.\r\n * @param[out] pOut       points to the block of output data.\r\n * @param[out] pErr       points to the block of error data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_lms_q31(const arm_lms_instance_q31 *S, q31_t *pSrc, q31_t *pRef, q31_t *pOut, q31_t *pErr, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for Q31 LMS filter.\r\n * @param[in] S          points to an instance of the Q31 LMS filter structure.\r\n * @param[in] numTaps    number of filter coefficients.\r\n * @param[in] pCoeffs    points to coefficient buffer.\r\n * @param[in] pState     points to state buffer.\r\n * @param[in] mu         step size that controls filter coefficient updates.\r\n * @param[in] blockSize  number of samples to process.\r\n * @param[in] postShift  bit shift applied to coefficients.\r\n */\r\nvoid arm_lms_init_q31(arm_lms_instance_q31 *S, uint16_t numTaps, q31_t *pCoeffs, q31_t *pState, q31_t mu, uint32_t blockSize, uint32_t postShift);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point normalized LMS filter.\r\n */\r\ntypedef struct {\r\n  uint16_t   numTaps; /**< number of coefficients in the filter. */\r\n  float32_t *pState;  /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */\r\n  float32_t  mu;      /**< step size that control filter coefficient updates. */\r\n  float32_t  energy;  /**< saves previous frame energy. */\r\n  float32_t  x0;      /**< saves previous input sample. */\r\n} arm_lms_norm_instance_f32;\r\n\r\n/**\r\n * @brief Processing function for floating-point normalized LMS filter.\r\n * @param[in]  S          points to an instance of the floating-point normalized LMS filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[in]  pRef       points to the block of reference data.\r\n * @param[out] pOut       points to the block of output data.\r\n * @param[out] pErr       points to the block of error data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_lms_norm_f32(arm_lms_norm_instance_f32 *S, float32_t *pSrc, float32_t *pRef, float32_t *pOut, float32_t *pErr, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for floating-point normalized LMS filter.\r\n * @param[in] S          points to an instance of the floating-point LMS filter structure.\r\n * @param[in] numTaps    number of filter coefficients.\r\n * @param[in] pCoeffs    points to coefficient buffer.\r\n * @param[in] pState     points to state buffer.\r\n * @param[in] mu         step size that controls filter coefficient updates.\r\n * @param[in] blockSize  number of samples to process.\r\n */\r\nvoid arm_lms_norm_init_f32(arm_lms_norm_instance_f32 *S, uint16_t numTaps, float32_t *pCoeffs, float32_t *pState, float32_t mu, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Instance structure for the Q31 normalized LMS filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps;    /**< number of coefficients in the filter. */\r\n  q31_t *  pState;     /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  q31_t *  pCoeffs;    /**< points to the coefficient array. The array is of length numTaps. */\r\n  q31_t    mu;         /**< step size that controls filter coefficient updates. */\r\n  uint8_t  postShift;  /**< bit shift applied to coefficients. */\r\n  q31_t *  recipTable; /**< points to the reciprocal initial value table. */\r\n  q31_t    energy;     /**< saves previous frame energy. */\r\n  q31_t    x0;         /**< saves previous input sample. */\r\n} arm_lms_norm_instance_q31;\r\n\r\n/**\r\n * @brief Processing function for Q31 normalized LMS filter.\r\n * @param[in]  S          points to an instance of the Q31 normalized LMS filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[in]  pRef       points to the block of reference data.\r\n * @param[out] pOut       points to the block of output data.\r\n * @param[out] pErr       points to the block of error data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_lms_norm_q31(arm_lms_norm_instance_q31 *S, q31_t *pSrc, q31_t *pRef, q31_t *pOut, q31_t *pErr, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for Q31 normalized LMS filter.\r\n * @param[in] S          points to an instance of the Q31 normalized LMS filter structure.\r\n * @param[in] numTaps    number of filter coefficients.\r\n * @param[in] pCoeffs    points to coefficient buffer.\r\n * @param[in] pState     points to state buffer.\r\n * @param[in] mu         step size that controls filter coefficient updates.\r\n * @param[in] blockSize  number of samples to process.\r\n * @param[in] postShift  bit shift applied to coefficients.\r\n */\r\nvoid arm_lms_norm_init_q31(arm_lms_norm_instance_q31 *S, uint16_t numTaps, q31_t *pCoeffs, q31_t *pState, q31_t mu, uint32_t blockSize, uint8_t postShift);\r\n\r\n/**\r\n * @brief Instance structure for the Q15 normalized LMS filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps;    /**< Number of coefficients in the filter. */\r\n  q15_t *  pState;     /**< points to the state variable array. The array is of length numTaps+blockSize-1. */\r\n  q15_t *  pCoeffs;    /**< points to the coefficient array. The array is of length numTaps. */\r\n  q15_t    mu;         /**< step size that controls filter coefficient updates. */\r\n  uint8_t  postShift;  /**< bit shift applied to coefficients. */\r\n  q15_t *  recipTable; /**< Points to the reciprocal initial value table. */\r\n  q15_t    energy;     /**< saves previous frame energy. */\r\n  q15_t    x0;         /**< saves previous input sample. */\r\n} arm_lms_norm_instance_q15;\r\n\r\n/**\r\n * @brief Processing function for Q15 normalized LMS filter.\r\n * @param[in]  S          points to an instance of the Q15 normalized LMS filter structure.\r\n * @param[in]  pSrc       points to the block of input data.\r\n * @param[in]  pRef       points to the block of reference data.\r\n * @param[out] pOut       points to the block of output data.\r\n * @param[out] pErr       points to the block of error data.\r\n * @param[in]  blockSize  number of samples to process.\r\n */\r\nvoid arm_lms_norm_q15(arm_lms_norm_instance_q15 *S, q15_t *pSrc, q15_t *pRef, q15_t *pOut, q15_t *pErr, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Initialization function for Q15 normalized LMS filter.\r\n * @param[in] S          points to an instance of the Q15 normalized LMS filter structure.\r\n * @param[in] numTaps    number of filter coefficients.\r\n * @param[in] pCoeffs    points to coefficient buffer.\r\n * @param[in] pState     points to state buffer.\r\n * @param[in] mu         step size that controls filter coefficient updates.\r\n * @param[in] blockSize  number of samples to process.\r\n * @param[in] postShift  bit shift applied to coefficients.\r\n */\r\nvoid arm_lms_norm_init_q15(arm_lms_norm_instance_q15 *S, uint16_t numTaps, q15_t *pCoeffs, q15_t *pState, q15_t mu, uint32_t blockSize, uint8_t postShift);\r\n\r\n/**\r\n * @brief Correlation of floating-point sequences.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n */\r\nvoid arm_correlate_f32(float32_t *pSrcA, uint32_t srcALen, float32_t *pSrcB, uint32_t srcBLen, float32_t *pDst);\r\n\r\n/**\r\n * @brief Correlation of Q15 sequences\r\n * @param[in]  pSrcA     points to the first input sequence.\r\n * @param[in]  srcALen   length of the first input sequence.\r\n * @param[in]  pSrcB     points to the second input sequence.\r\n * @param[in]  srcBLen   length of the second input sequence.\r\n * @param[out] pDst      points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n * @param[in]  pScratch  points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n */\r\nvoid arm_correlate_opt_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, q15_t *pScratch);\r\n\r\n/**\r\n * @brief Correlation of Q15 sequences.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n */\r\n\r\nvoid arm_correlate_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst);\r\n\r\n/**\r\n * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n */\r\n\r\nvoid arm_correlate_fast_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst);\r\n\r\n/**\r\n * @brief Correlation of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4.\r\n * @param[in]  pSrcA     points to the first input sequence.\r\n * @param[in]  srcALen   length of the first input sequence.\r\n * @param[in]  pSrcB     points to the second input sequence.\r\n * @param[in]  srcBLen   length of the second input sequence.\r\n * @param[out] pDst      points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n * @param[in]  pScratch  points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n */\r\nvoid arm_correlate_fast_opt_q15(q15_t *pSrcA, uint32_t srcALen, q15_t *pSrcB, uint32_t srcBLen, q15_t *pDst, q15_t *pScratch);\r\n\r\n/**\r\n * @brief Correlation of Q31 sequences.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n */\r\nvoid arm_correlate_q31(q31_t *pSrcA, uint32_t srcALen, q31_t *pSrcB, uint32_t srcBLen, q31_t *pDst);\r\n\r\n/**\r\n * @brief Correlation of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n */\r\nvoid arm_correlate_fast_q31(q31_t *pSrcA, uint32_t srcALen, q31_t *pSrcB, uint32_t srcBLen, q31_t *pDst);\r\n\r\n/**\r\n * @brief Correlation of Q7 sequences.\r\n * @param[in]  pSrcA      points to the first input sequence.\r\n * @param[in]  srcALen    length of the first input sequence.\r\n * @param[in]  pSrcB      points to the second input sequence.\r\n * @param[in]  srcBLen    length of the second input sequence.\r\n * @param[out] pDst       points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n * @param[in]  pScratch1  points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2.\r\n * @param[in]  pScratch2  points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen).\r\n */\r\nvoid arm_correlate_opt_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst, q15_t *pScratch1, q15_t *pScratch2);\r\n\r\n/**\r\n * @brief Correlation of Q7 sequences.\r\n * @param[in]  pSrcA    points to the first input sequence.\r\n * @param[in]  srcALen  length of the first input sequence.\r\n * @param[in]  pSrcB    points to the second input sequence.\r\n * @param[in]  srcBLen  length of the second input sequence.\r\n * @param[out] pDst     points to the block of output data  Length 2 * max(srcALen, srcBLen) - 1.\r\n */\r\nvoid arm_correlate_q7(q7_t *pSrcA, uint32_t srcALen, q7_t *pSrcB, uint32_t srcBLen, q7_t *pDst);\r\n\r\n/**\r\n * @brief Instance structure for the floating-point sparse FIR filter.\r\n */\r\ntypedef struct {\r\n  uint16_t   numTaps;    /**< number of coefficients in the filter. */\r\n  uint16_t   stateIndex; /**< state buffer index.  Points to the oldest sample in the state buffer. */\r\n  float32_t *pState;     /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */\r\n  float32_t *pCoeffs;    /**< points to the coefficient array. The array is of length numTaps.*/\r\n  uint16_t   maxDelay;   /**< maximum offset specified by the pTapDelay array. */\r\n  int32_t *  pTapDelay;  /**< points to the array of delay values.  The array is of length numTaps. */\r\n} arm_fir_sparse_instance_f32;\r\n\r\n/**\r\n * @brief Instance structure for the Q31 sparse FIR filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps;    /**< number of coefficients in the filter. */\r\n  uint16_t stateIndex; /**< state buffer index.  Points to the oldest sample in the state buffer. */\r\n  q31_t *  pState;     /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */\r\n  q31_t *  pCoeffs;    /**< points to the coefficient array. The array is of length numTaps.*/\r\n  uint16_t maxDelay;   /**< maximum offset specified by the pTapDelay array. */\r\n  int32_t *pTapDelay;  /**< points to the array of delay values.  The array is of length numTaps. */\r\n} arm_fir_sparse_instance_q31;\r\n\r\n/**\r\n * @brief Instance structure for the Q15 sparse FIR filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps;    /**< number of coefficients in the filter. */\r\n  uint16_t stateIndex; /**< state buffer index.  Points to the oldest sample in the state buffer. */\r\n  q15_t *  pState;     /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */\r\n  q15_t *  pCoeffs;    /**< points to the coefficient array. The array is of length numTaps.*/\r\n  uint16_t maxDelay;   /**< maximum offset specified by the pTapDelay array. */\r\n  int32_t *pTapDelay;  /**< points to the array of delay values.  The array is of length numTaps. */\r\n} arm_fir_sparse_instance_q15;\r\n\r\n/**\r\n * @brief Instance structure for the Q7 sparse FIR filter.\r\n */\r\ntypedef struct {\r\n  uint16_t numTaps;    /**< number of coefficients in the filter. */\r\n  uint16_t stateIndex; /**< state buffer index.  Points to the oldest sample in the state buffer. */\r\n  q7_t *   pState;     /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */\r\n  q7_t *   pCoeffs;    /**< points to the coefficient array. The array is of length numTaps.*/\r\n  uint16_t maxDelay;   /**< maximum offset specified by the pTapDelay array. */\r\n  int32_t *pTapDelay;  /**< points to the array of delay values.  The array is of length numTaps. */\r\n} arm_fir_sparse_instance_q7;\r\n\r\n/**\r\n * @brief Processing function for the floating-point sparse FIR filter.\r\n * @param[in]  S           points to an instance of the floating-point sparse FIR structure.\r\n * @param[in]  pSrc        points to the block of input data.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  pScratchIn  points to a temporary buffer of size blockSize.\r\n * @param[in]  blockSize   number of input samples to process per call.\r\n */\r\nvoid arm_fir_sparse_f32(arm_fir_sparse_instance_f32 *S, float32_t *pSrc, float32_t *pDst, float32_t *pScratchIn, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the floating-point sparse FIR filter.\r\n * @param[in,out] S          points to an instance of the floating-point sparse FIR structure.\r\n * @param[in]     numTaps    number of nonzero coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the array of filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     pTapDelay  points to the array of offset times.\r\n * @param[in]     maxDelay   maximum offset time supported.\r\n * @param[in]     blockSize  number of samples that will be processed per block.\r\n */\r\nvoid arm_fir_sparse_init_f32(arm_fir_sparse_instance_f32 *S, uint16_t numTaps, float32_t *pCoeffs, float32_t *pState, int32_t *pTapDelay, uint16_t maxDelay, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q31 sparse FIR filter.\r\n * @param[in]  S           points to an instance of the Q31 sparse FIR structure.\r\n * @param[in]  pSrc        points to the block of input data.\r\n * @param[out] pDst        points to the block of output data\r\n * @param[in]  pScratchIn  points to a temporary buffer of size blockSize.\r\n * @param[in]  blockSize   number of input samples to process per call.\r\n */\r\nvoid arm_fir_sparse_q31(arm_fir_sparse_instance_q31 *S, q31_t *pSrc, q31_t *pDst, q31_t *pScratchIn, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q31 sparse FIR filter.\r\n * @param[in,out] S          points to an instance of the Q31 sparse FIR structure.\r\n * @param[in]     numTaps    number of nonzero coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the array of filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     pTapDelay  points to the array of offset times.\r\n * @param[in]     maxDelay   maximum offset time supported.\r\n * @param[in]     blockSize  number of samples that will be processed per block.\r\n */\r\nvoid arm_fir_sparse_init_q31(arm_fir_sparse_instance_q31 *S, uint16_t numTaps, q31_t *pCoeffs, q31_t *pState, int32_t *pTapDelay, uint16_t maxDelay, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q15 sparse FIR filter.\r\n * @param[in]  S            points to an instance of the Q15 sparse FIR structure.\r\n * @param[in]  pSrc         points to the block of input data.\r\n * @param[out] pDst         points to the block of output data\r\n * @param[in]  pScratchIn   points to a temporary buffer of size blockSize.\r\n * @param[in]  pScratchOut  points to a temporary buffer of size blockSize.\r\n * @param[in]  blockSize    number of input samples to process per call.\r\n */\r\nvoid arm_fir_sparse_q15(arm_fir_sparse_instance_q15 *S, q15_t *pSrc, q15_t *pDst, q15_t *pScratchIn, q31_t *pScratchOut, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q15 sparse FIR filter.\r\n * @param[in,out] S          points to an instance of the Q15 sparse FIR structure.\r\n * @param[in]     numTaps    number of nonzero coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the array of filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     pTapDelay  points to the array of offset times.\r\n * @param[in]     maxDelay   maximum offset time supported.\r\n * @param[in]     blockSize  number of samples that will be processed per block.\r\n */\r\nvoid arm_fir_sparse_init_q15(arm_fir_sparse_instance_q15 *S, uint16_t numTaps, q15_t *pCoeffs, q15_t *pState, int32_t *pTapDelay, uint16_t maxDelay, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Processing function for the Q7 sparse FIR filter.\r\n * @param[in]  S            points to an instance of the Q7 sparse FIR structure.\r\n * @param[in]  pSrc         points to the block of input data.\r\n * @param[out] pDst         points to the block of output data\r\n * @param[in]  pScratchIn   points to a temporary buffer of size blockSize.\r\n * @param[in]  pScratchOut  points to a temporary buffer of size blockSize.\r\n * @param[in]  blockSize    number of input samples to process per call.\r\n */\r\nvoid arm_fir_sparse_q7(arm_fir_sparse_instance_q7 *S, q7_t *pSrc, q7_t *pDst, q7_t *pScratchIn, q31_t *pScratchOut, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Initialization function for the Q7 sparse FIR filter.\r\n * @param[in,out] S          points to an instance of the Q7 sparse FIR structure.\r\n * @param[in]     numTaps    number of nonzero coefficients in the filter.\r\n * @param[in]     pCoeffs    points to the array of filter coefficients.\r\n * @param[in]     pState     points to the state buffer.\r\n * @param[in]     pTapDelay  points to the array of offset times.\r\n * @param[in]     maxDelay   maximum offset time supported.\r\n * @param[in]     blockSize  number of samples that will be processed per block.\r\n */\r\nvoid arm_fir_sparse_init_q7(arm_fir_sparse_instance_q7 *S, uint16_t numTaps, q7_t *pCoeffs, q7_t *pState, int32_t *pTapDelay, uint16_t maxDelay, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Floating-point sin_cos function.\r\n * @param[in]  theta   input value in degrees\r\n * @param[out] pSinVal  points to the processed sine output.\r\n * @param[out] pCosVal  points to the processed cos output.\r\n */\r\nvoid arm_sin_cos_f32(float32_t theta, float32_t *pSinVal, float32_t *pCosVal);\r\n\r\n/**\r\n * @brief  Q31 sin_cos function.\r\n * @param[in]  theta    scaled input value in degrees\r\n * @param[out] pSinVal  points to the processed sine output.\r\n * @param[out] pCosVal  points to the processed cosine output.\r\n */\r\nvoid arm_sin_cos_q31(q31_t theta, q31_t *pSinVal, q31_t *pCosVal);\r\n\r\n/**\r\n * @brief  Floating-point complex conjugate.\r\n * @param[in]  pSrc        points to the input vector\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n */\r\nvoid arm_cmplx_conj_f32(float32_t *pSrc, float32_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q31 complex conjugate.\r\n * @param[in]  pSrc        points to the input vector\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n */\r\nvoid arm_cmplx_conj_q31(q31_t *pSrc, q31_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q15 complex conjugate.\r\n * @param[in]  pSrc        points to the input vector\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n */\r\nvoid arm_cmplx_conj_q15(q15_t *pSrc, q15_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Floating-point complex magnitude squared\r\n * @param[in]  pSrc        points to the complex input vector\r\n * @param[out] pDst        points to the real output vector\r\n * @param[in]  numSamples  number of complex samples in the input vector\r\n */\r\nvoid arm_cmplx_mag_squared_f32(float32_t *pSrc, float32_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q31 complex magnitude squared\r\n * @param[in]  pSrc        points to the complex input vector\r\n * @param[out] pDst        points to the real output vector\r\n * @param[in]  numSamples  number of complex samples in the input vector\r\n */\r\nvoid arm_cmplx_mag_squared_q31(q31_t *pSrc, q31_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q15 complex magnitude squared\r\n * @param[in]  pSrc        points to the complex input vector\r\n * @param[out] pDst        points to the real output vector\r\n * @param[in]  numSamples  number of complex samples in the input vector\r\n */\r\nvoid arm_cmplx_mag_squared_q15(q15_t *pSrc, q15_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @ingroup groupController\r\n */\r\n\r\n/**\r\n * @defgroup PID PID Motor Control\r\n *\r\n * A Proportional Integral Derivative (PID) controller is a generic feedback control\r\n * loop mechanism widely used in industrial control systems.\r\n * A PID controller is the most commonly used type of feedback controller.\r\n *\r\n * This set of functions implements (PID) controllers\r\n * for Q15, Q31, and floating-point data types.  The functions operate on a single sample\r\n * of data and each call to the function returns a single processed value.\r\n * <code>S</code> points to an instance of the PID control data structure.  <code>in</code>\r\n * is the input sample value. The functions return the output value.\r\n *\r\n * \\par Algorithm:\r\n * <pre>\r\n *    y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]\r\n *    A0 = Kp + Ki + Kd\r\n *    A1 = (-Kp ) - (2 * Kd )\r\n *    A2 = Kd  </pre>\r\n *\r\n * \\par\r\n * where \\c Kp is proportional constant, \\c Ki is Integral constant and \\c Kd is Derivative constant\r\n *\r\n * \\par\r\n * \\image html PID.gif \"Proportional Integral Derivative Controller\"\r\n *\r\n * \\par\r\n * The PID controller calculates an \"error\" value as the difference between\r\n * the measured output and the reference input.\r\n * The controller attempts to minimize the error by adjusting the process control inputs.\r\n * The proportional value determines the reaction to the current error,\r\n * the integral value determines the reaction based on the sum of recent errors,\r\n * and the derivative value determines the reaction based on the rate at which the error has been changing.\r\n *\r\n * \\par Instance Structure\r\n * The Gains A0, A1, A2 and state variables for a PID controller are stored together in an instance data structure.\r\n * A separate instance structure must be defined for each PID Controller.\r\n * There are separate instance structure declarations for each of the 3 supported data types.\r\n *\r\n * \\par Reset Functions\r\n * There is also an associated reset function for each data type which clears the state array.\r\n *\r\n * \\par Initialization Functions\r\n * There is also an associated initialization function for each data type.\r\n * The initialization function performs the following operations:\r\n * - Initializes the Gains A0, A1, A2 from Kp,Ki, Kd gains.\r\n * - Zeros out the values in the state buffer.\r\n *\r\n * \\par\r\n * Instance structure cannot be placed into a const data section and it is recommended to use the initialization function.\r\n *\r\n * \\par Fixed-Point Behavior\r\n * Care must be taken when using the fixed-point versions of the PID Controller functions.\r\n * In particular, the overflow and saturation behavior of the accumulator used in each function must be considered.\r\n * Refer to the function specific documentation below for usage guidelines.\r\n */\r\n\r\n/**\r\n * @addtogroup PID\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Process function for the floating-point PID Control.\r\n * @param[in,out] S   is an instance of the floating-point PID Control structure\r\n * @param[in]     in  input sample to process\r\n * @return out processed output sample.\r\n */\r\nstatic __INLINE float32_t arm_pid_f32(arm_pid_instance_f32 *S, float32_t in) {\r\n  float32_t out;\r\n\r\n  /* y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]  */\r\n  out = (S->A0 * in) + (S->A1 * S->state[0]) + (S->A2 * S->state[1]) + (S->state[2]);\r\n\r\n  /* Update state */\r\n  S->state[1] = S->state[0];\r\n  S->state[0] = in;\r\n  S->state[2] = out;\r\n\r\n  /* return to application */\r\n  return (out);\r\n}\r\n\r\n/**\r\n * @brief  Process function for the Q31 PID Control.\r\n * @param[in,out] S  points to an instance of the Q31 PID Control structure\r\n * @param[in]     in  input sample to process\r\n * @return out processed output sample.\r\n *\r\n * <b>Scaling and Overflow Behavior:</b>\r\n * \\par\r\n * The function is implemented using an internal 64-bit accumulator.\r\n * The accumulator has a 2.62 format and maintains full precision of the intermediate multiplication results but provides only a single guard bit.\r\n * Thus, if the accumulator result overflows it wraps around rather than clip.\r\n * In order to avoid overflows completely the input signal must be scaled down by 2 bits as there are four additions.\r\n * After all multiply-accumulates are performed, the 2.62 accumulator is truncated to 1.32 format and then saturated to 1.31 format.\r\n */\r\nstatic __INLINE q31_t arm_pid_q31(arm_pid_instance_q31 *S, q31_t in) {\r\n  q63_t acc;\r\n  q31_t out;\r\n\r\n  /* acc = A0 * x[n]  */\r\n  acc = (q63_t)S->A0 * in;\r\n\r\n  /* acc += A1 * x[n-1] */\r\n  acc += (q63_t)S->A1 * S->state[0];\r\n\r\n  /* acc += A2 * x[n-2]  */\r\n  acc += (q63_t)S->A2 * S->state[1];\r\n\r\n  /* convert output to 1.31 format to add y[n-1] */\r\n  out = (q31_t)(acc >> 31u);\r\n\r\n  /* out += y[n-1] */\r\n  out += S->state[2];\r\n\r\n  /* Update state */\r\n  S->state[1] = S->state[0];\r\n  S->state[0] = in;\r\n  S->state[2] = out;\r\n\r\n  /* return to application */\r\n  return (out);\r\n}\r\n\r\n/**\r\n * @brief  Process function for the Q15 PID Control.\r\n * @param[in,out] S   points to an instance of the Q15 PID Control structure\r\n * @param[in]     in  input sample to process\r\n * @return out processed output sample.\r\n *\r\n * <b>Scaling and Overflow Behavior:</b>\r\n * \\par\r\n * The function is implemented using a 64-bit internal accumulator.\r\n * Both Gains and state variables are represented in 1.15 format and multiplications yield a 2.30 result.\r\n * The 2.30 intermediate results are accumulated in a 64-bit accumulator in 34.30 format.\r\n * There is no risk of internal overflow with this approach and the full precision of intermediate multiplications is preserved.\r\n * After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits.\r\n * Lastly, the accumulator is saturated to yield a result in 1.15 format.\r\n */\r\nstatic __INLINE q15_t arm_pid_q15(arm_pid_instance_q15 *S, q15_t in) {\r\n  q63_t acc;\r\n  q15_t out;\r\n\r\n#ifndef ARM_MATH_CM0_FAMILY\r\n  __SIMD32_TYPE *vstate;\r\n\r\n  /* Implementation of PID controller */\r\n\r\n  /* acc = A0 * x[n]  */\r\n  acc = (q31_t)__SMUAD((uint32_t)S->A0, (uint32_t)in);\r\n\r\n  /* acc += A1 * x[n-1] + A2 * x[n-2]  */\r\n  vstate = __SIMD32_CONST(S->state);\r\n  acc    = (q63_t)__SMLALD((uint32_t)S->A1, (uint32_t)*vstate, (uint64_t)acc);\r\n#else\r\n  /* acc = A0 * x[n]  */\r\n  acc = ((q31_t)S->A0) * in;\r\n\r\n  /* acc += A1 * x[n-1] + A2 * x[n-2]  */\r\n  acc += (q31_t)S->A1 * S->state[0];\r\n  acc += (q31_t)S->A2 * S->state[1];\r\n#endif\r\n\r\n  /* acc += y[n-1] */\r\n  acc += (q31_t)S->state[2] << 15;\r\n\r\n  /* saturate the output */\r\n  out = (q15_t)(__SSAT((acc >> 15), 16));\r\n\r\n  /* Update state */\r\n  S->state[1] = S->state[0];\r\n  S->state[0] = in;\r\n  S->state[2] = out;\r\n\r\n  /* return to application */\r\n  return (out);\r\n}\r\n\r\n/**\r\n * @} end of PID group\r\n */\r\n\r\n/**\r\n * @brief Floating-point matrix inverse.\r\n * @param[in]  src   points to the instance of the input floating-point matrix structure.\r\n * @param[out] dst   points to the instance of the output floating-point matrix structure.\r\n * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match.\r\n * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR.\r\n */\r\narm_status arm_mat_inverse_f32(const arm_matrix_instance_f32 *src, arm_matrix_instance_f32 *dst);\r\n\r\n/**\r\n * @brief Floating-point matrix inverse.\r\n * @param[in]  src   points to the instance of the input floating-point matrix structure.\r\n * @param[out] dst   points to the instance of the output floating-point matrix structure.\r\n * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match.\r\n * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR.\r\n */\r\narm_status arm_mat_inverse_f64(const arm_matrix_instance_f64 *src, arm_matrix_instance_f64 *dst);\r\n\r\n/**\r\n * @ingroup groupController\r\n */\r\n\r\n/**\r\n * @defgroup clarke Vector Clarke Transform\r\n * Forward Clarke transform converts the instantaneous stator phases into a two-coordinate time invariant vector.\r\n * Generally the Clarke transform uses three-phase currents <code>Ia, Ib and Ic</code> to calculate currents\r\n * in the two-phase orthogonal stator axis <code>Ialpha</code> and <code>Ibeta</code>.\r\n * When <code>Ialpha</code> is superposed with <code>Ia</code> as shown in the figure below\r\n * \\image html clarke.gif Stator current space vector and its components in (a,b).\r\n * and <code>Ia + Ib + Ic = 0</code>, in this condition <code>Ialpha</code> and <code>Ibeta</code>\r\n * can be calculated using only <code>Ia</code> and <code>Ib</code>.\r\n *\r\n * The function operates on a single sample of data and each call to the function returns the processed output.\r\n * The library provides separate functions for Q31 and floating-point data types.\r\n * \\par Algorithm\r\n * \\image html clarkeFormula.gif\r\n * where <code>Ia</code> and <code>Ib</code> are the instantaneous stator phases and\r\n * <code>pIalpha</code> and <code>pIbeta</code> are the two coordinates of time invariant vector.\r\n * \\par Fixed-Point Behavior\r\n * Care must be taken when using the Q31 version of the Clarke transform.\r\n * In particular, the overflow and saturation behavior of the accumulator used must be considered.\r\n * Refer to the function specific documentation below for usage guidelines.\r\n */\r\n\r\n/**\r\n * @addtogroup clarke\r\n * @{\r\n */\r\n\r\n/**\r\n *\r\n * @brief  Floating-point Clarke transform\r\n * @param[in]  Ia       input three-phase coordinate <code>a</code>\r\n * @param[in]  Ib       input three-phase coordinate <code>b</code>\r\n * @param[out] pIalpha  points to output two-phase orthogonal vector axis alpha\r\n * @param[out] pIbeta   points to output two-phase orthogonal vector axis beta\r\n */\r\nstatic __INLINE void arm_clarke_f32(float32_t Ia, float32_t Ib, float32_t *pIalpha, float32_t *pIbeta) {\r\n  /* Calculate pIalpha using the equation, pIalpha = Ia */\r\n  *pIalpha = Ia;\r\n\r\n  /* Calculate pIbeta using the equation, pIbeta = (1/sqrt(3)) * Ia + (2/sqrt(3)) * Ib */\r\n  *pIbeta = ((float32_t)0.57735026919 * Ia + (float32_t)1.15470053838 * Ib);\r\n}\r\n\r\n/**\r\n * @brief  Clarke transform for Q31 version\r\n * @param[in]  Ia       input three-phase coordinate <code>a</code>\r\n * @param[in]  Ib       input three-phase coordinate <code>b</code>\r\n * @param[out] pIalpha  points to output two-phase orthogonal vector axis alpha\r\n * @param[out] pIbeta   points to output two-phase orthogonal vector axis beta\r\n *\r\n * <b>Scaling and Overflow Behavior:</b>\r\n * \\par\r\n * The function is implemented using an internal 32-bit accumulator.\r\n * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format.\r\n * There is saturation on the addition, hence there is no risk of overflow.\r\n */\r\nstatic __INLINE void arm_clarke_q31(q31_t Ia, q31_t Ib, q31_t *pIalpha, q31_t *pIbeta) {\r\n  q31_t product1, product2; /* Temporary variables used to store intermediate results */\r\n\r\n  /* Calculating pIalpha from Ia by equation pIalpha = Ia */\r\n  *pIalpha = Ia;\r\n\r\n  /* Intermediate product is calculated by (1/(sqrt(3)) * Ia) */\r\n  product1 = (q31_t)(((q63_t)Ia * 0x24F34E8B) >> 30);\r\n\r\n  /* Intermediate product is calculated by (2/sqrt(3) * Ib) */\r\n  product2 = (q31_t)(((q63_t)Ib * 0x49E69D16) >> 30);\r\n\r\n  /* pIbeta is calculated by adding the intermediate products */\r\n  *pIbeta = __QADD(product1, product2);\r\n}\r\n\r\n/**\r\n * @} end of clarke group\r\n */\r\n\r\n/**\r\n * @brief  Converts the elements of the Q7 vector to Q31 vector.\r\n * @param[in]  pSrc       input pointer\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_q7_to_q31(q7_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @ingroup groupController\r\n */\r\n\r\n/**\r\n * @defgroup inv_clarke Vector Inverse Clarke Transform\r\n * Inverse Clarke transform converts the two-coordinate time invariant vector into instantaneous stator phases.\r\n *\r\n * The function operates on a single sample of data and each call to the function returns the processed output.\r\n * The library provides separate functions for Q31 and floating-point data types.\r\n * \\par Algorithm\r\n * \\image html clarkeInvFormula.gif\r\n * where <code>pIa</code> and <code>pIb</code> are the instantaneous stator phases and\r\n * <code>Ialpha</code> and <code>Ibeta</code> are the two coordinates of time invariant vector.\r\n * \\par Fixed-Point Behavior\r\n * Care must be taken when using the Q31 version of the Clarke transform.\r\n * In particular, the overflow and saturation behavior of the accumulator used must be considered.\r\n * Refer to the function specific documentation below for usage guidelines.\r\n */\r\n\r\n/**\r\n * @addtogroup inv_clarke\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Floating-point Inverse Clarke transform\r\n * @param[in]  Ialpha  input two-phase orthogonal vector axis alpha\r\n * @param[in]  Ibeta   input two-phase orthogonal vector axis beta\r\n * @param[out] pIa     points to output three-phase coordinate <code>a</code>\r\n * @param[out] pIb     points to output three-phase coordinate <code>b</code>\r\n */\r\nstatic __INLINE void arm_inv_clarke_f32(float32_t Ialpha, float32_t Ibeta, float32_t *pIa, float32_t *pIb) {\r\n  /* Calculating pIa from Ialpha by equation pIa = Ialpha */\r\n  *pIa = Ialpha;\r\n\r\n  /* Calculating pIb from Ialpha and Ibeta by equation pIb = -(1/2) * Ialpha + (sqrt(3)/2) * Ibeta */\r\n  *pIb = -0.5f * Ialpha + 0.8660254039f * Ibeta;\r\n}\r\n\r\n/**\r\n * @brief  Inverse Clarke transform for Q31 version\r\n * @param[in]  Ialpha  input two-phase orthogonal vector axis alpha\r\n * @param[in]  Ibeta   input two-phase orthogonal vector axis beta\r\n * @param[out] pIa     points to output three-phase coordinate <code>a</code>\r\n * @param[out] pIb     points to output three-phase coordinate <code>b</code>\r\n *\r\n * <b>Scaling and Overflow Behavior:</b>\r\n * \\par\r\n * The function is implemented using an internal 32-bit accumulator.\r\n * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format.\r\n * There is saturation on the subtraction, hence there is no risk of overflow.\r\n */\r\nstatic __INLINE void arm_inv_clarke_q31(q31_t Ialpha, q31_t Ibeta, q31_t *pIa, q31_t *pIb) {\r\n  q31_t product1, product2; /* Temporary variables used to store intermediate results */\r\n\r\n  /* Calculating pIa from Ialpha by equation pIa = Ialpha */\r\n  *pIa = Ialpha;\r\n\r\n  /* Intermediate product is calculated by (1/(2*sqrt(3)) * Ia) */\r\n  product1 = (q31_t)(((q63_t)(Ialpha) * (0x40000000)) >> 31);\r\n\r\n  /* Intermediate product is calculated by (1/sqrt(3) * pIb) */\r\n  product2 = (q31_t)(((q63_t)(Ibeta) * (0x6ED9EBA1)) >> 31);\r\n\r\n  /* pIb is calculated by subtracting the products */\r\n  *pIb = __QSUB(product2, product1);\r\n}\r\n\r\n/**\r\n * @} end of inv_clarke group\r\n */\r\n\r\n/**\r\n * @brief  Converts the elements of the Q7 vector to Q15 vector.\r\n * @param[in]  pSrc       input pointer\r\n * @param[out] pDst       output pointer\r\n * @param[in]  blockSize  number of samples to process\r\n */\r\nvoid arm_q7_to_q15(q7_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @ingroup groupController\r\n */\r\n\r\n/**\r\n * @defgroup park Vector Park Transform\r\n *\r\n * Forward Park transform converts the input two-coordinate vector to flux and torque components.\r\n * The Park transform can be used to realize the transformation of the <code>Ialpha</code> and the <code>Ibeta</code> currents\r\n * from the stationary to the moving reference frame and control the spatial relationship between\r\n * the stator vector current and rotor flux vector.\r\n * If we consider the d axis aligned with the rotor flux, the diagram below shows the\r\n * current vector and the relationship from the two reference frames:\r\n * \\image html park.gif \"Stator current space vector and its component in (a,b) and in the d,q rotating reference frame\"\r\n *\r\n * The function operates on a single sample of data and each call to the function returns the processed output.\r\n * The library provides separate functions for Q31 and floating-point data types.\r\n * \\par Algorithm\r\n * \\image html parkFormula.gif\r\n * where <code>Ialpha</code> and <code>Ibeta</code> are the stator vector components,\r\n * <code>pId</code> and <code>pIq</code> are rotor vector components and <code>cosVal</code> and <code>sinVal</code> are the\r\n * cosine and sine values of theta (rotor flux position).\r\n * \\par Fixed-Point Behavior\r\n * Care must be taken when using the Q31 version of the Park transform.\r\n * In particular, the overflow and saturation behavior of the accumulator used must be considered.\r\n * Refer to the function specific documentation below for usage guidelines.\r\n */\r\n\r\n/**\r\n * @addtogroup park\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief Floating-point Park transform\r\n * @param[in]  Ialpha  input two-phase vector coordinate alpha\r\n * @param[in]  Ibeta   input two-phase vector coordinate beta\r\n * @param[out] pId     points to output   rotor reference frame d\r\n * @param[out] pIq     points to output   rotor reference frame q\r\n * @param[in]  sinVal  sine value of rotation angle theta\r\n * @param[in]  cosVal  cosine value of rotation angle theta\r\n *\r\n * The function implements the forward Park transform.\r\n *\r\n */\r\nstatic __INLINE void arm_park_f32(float32_t Ialpha, float32_t Ibeta, float32_t *pId, float32_t *pIq, float32_t sinVal, float32_t cosVal) {\r\n  /* Calculate pId using the equation, pId = Ialpha * cosVal + Ibeta * sinVal */\r\n  *pId = Ialpha * cosVal + Ibeta * sinVal;\r\n\r\n  /* Calculate pIq using the equation, pIq = - Ialpha * sinVal + Ibeta * cosVal */\r\n  *pIq = -Ialpha * sinVal + Ibeta * cosVal;\r\n}\r\n\r\n/**\r\n * @brief  Park transform for Q31 version\r\n * @param[in]  Ialpha  input two-phase vector coordinate alpha\r\n * @param[in]  Ibeta   input two-phase vector coordinate beta\r\n * @param[out] pId     points to output rotor reference frame d\r\n * @param[out] pIq     points to output rotor reference frame q\r\n * @param[in]  sinVal  sine value of rotation angle theta\r\n * @param[in]  cosVal  cosine value of rotation angle theta\r\n *\r\n * <b>Scaling and Overflow Behavior:</b>\r\n * \\par\r\n * The function is implemented using an internal 32-bit accumulator.\r\n * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format.\r\n * There is saturation on the addition and subtraction, hence there is no risk of overflow.\r\n */\r\nstatic __INLINE void arm_park_q31(q31_t Ialpha, q31_t Ibeta, q31_t *pId, q31_t *pIq, q31_t sinVal, q31_t cosVal) {\r\n  q31_t product1, product2; /* Temporary variables used to store intermediate results */\r\n  q31_t product3, product4; /* Temporary variables used to store intermediate results */\r\n\r\n  /* Intermediate product is calculated by (Ialpha * cosVal) */\r\n  product1 = (q31_t)(((q63_t)(Ialpha) * (cosVal)) >> 31);\r\n\r\n  /* Intermediate product is calculated by (Ibeta * sinVal) */\r\n  product2 = (q31_t)(((q63_t)(Ibeta) * (sinVal)) >> 31);\r\n\r\n  /* Intermediate product is calculated by (Ialpha * sinVal) */\r\n  product3 = (q31_t)(((q63_t)(Ialpha) * (sinVal)) >> 31);\r\n\r\n  /* Intermediate product is calculated by (Ibeta * cosVal) */\r\n  product4 = (q31_t)(((q63_t)(Ibeta) * (cosVal)) >> 31);\r\n\r\n  /* Calculate pId by adding the two intermediate products 1 and 2 */\r\n  *pId = __QADD(product1, product2);\r\n\r\n  /* Calculate pIq by subtracting the two intermediate products 3 from 4 */\r\n  *pIq = __QSUB(product4, product3);\r\n}\r\n\r\n/**\r\n * @} end of park group\r\n */\r\n\r\n/**\r\n * @brief  Converts the elements of the Q7 vector to floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[out] pDst       is output pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n */\r\nvoid arm_q7_to_float(q7_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @ingroup groupController\r\n */\r\n\r\n/**\r\n * @defgroup inv_park Vector Inverse Park transform\r\n * Inverse Park transform converts the input flux and torque components to two-coordinate vector.\r\n *\r\n * The function operates on a single sample of data and each call to the function returns the processed output.\r\n * The library provides separate functions for Q31 and floating-point data types.\r\n * \\par Algorithm\r\n * \\image html parkInvFormula.gif\r\n * where <code>pIalpha</code> and <code>pIbeta</code> are the stator vector components,\r\n * <code>Id</code> and <code>Iq</code> are rotor vector components and <code>cosVal</code> and <code>sinVal</code> are the\r\n * cosine and sine values of theta (rotor flux position).\r\n * \\par Fixed-Point Behavior\r\n * Care must be taken when using the Q31 version of the Park transform.\r\n * In particular, the overflow and saturation behavior of the accumulator used must be considered.\r\n * Refer to the function specific documentation below for usage guidelines.\r\n */\r\n\r\n/**\r\n * @addtogroup inv_park\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Floating-point Inverse Park transform\r\n * @param[in]  Id       input coordinate of rotor reference frame d\r\n * @param[in]  Iq       input coordinate of rotor reference frame q\r\n * @param[out] pIalpha  points to output two-phase orthogonal vector axis alpha\r\n * @param[out] pIbeta   points to output two-phase orthogonal vector axis beta\r\n * @param[in]  sinVal   sine value of rotation angle theta\r\n * @param[in]  cosVal   cosine value of rotation angle theta\r\n */\r\nstatic __INLINE void arm_inv_park_f32(float32_t Id, float32_t Iq, float32_t *pIalpha, float32_t *pIbeta, float32_t sinVal, float32_t cosVal) {\r\n  /* Calculate pIalpha using the equation, pIalpha = Id * cosVal - Iq * sinVal */\r\n  *pIalpha = Id * cosVal - Iq * sinVal;\r\n\r\n  /* Calculate pIbeta using the equation, pIbeta = Id * sinVal + Iq * cosVal */\r\n  *pIbeta = Id * sinVal + Iq * cosVal;\r\n}\r\n\r\n/**\r\n * @brief  Inverse Park transform for   Q31 version\r\n * @param[in]  Id       input coordinate of rotor reference frame d\r\n * @param[in]  Iq       input coordinate of rotor reference frame q\r\n * @param[out] pIalpha  points to output two-phase orthogonal vector axis alpha\r\n * @param[out] pIbeta   points to output two-phase orthogonal vector axis beta\r\n * @param[in]  sinVal   sine value of rotation angle theta\r\n * @param[in]  cosVal   cosine value of rotation angle theta\r\n *\r\n * <b>Scaling and Overflow Behavior:</b>\r\n * \\par\r\n * The function is implemented using an internal 32-bit accumulator.\r\n * The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format.\r\n * There is saturation on the addition, hence there is no risk of overflow.\r\n */\r\nstatic __INLINE void arm_inv_park_q31(q31_t Id, q31_t Iq, q31_t *pIalpha, q31_t *pIbeta, q31_t sinVal, q31_t cosVal) {\r\n  q31_t product1, product2; /* Temporary variables used to store intermediate results */\r\n  q31_t product3, product4; /* Temporary variables used to store intermediate results */\r\n\r\n  /* Intermediate product is calculated by (Id * cosVal) */\r\n  product1 = (q31_t)(((q63_t)(Id) * (cosVal)) >> 31);\r\n\r\n  /* Intermediate product is calculated by (Iq * sinVal) */\r\n  product2 = (q31_t)(((q63_t)(Iq) * (sinVal)) >> 31);\r\n\r\n  /* Intermediate product is calculated by (Id * sinVal) */\r\n  product3 = (q31_t)(((q63_t)(Id) * (sinVal)) >> 31);\r\n\r\n  /* Intermediate product is calculated by (Iq * cosVal) */\r\n  product4 = (q31_t)(((q63_t)(Iq) * (cosVal)) >> 31);\r\n\r\n  /* Calculate pIalpha by using the two intermediate products 1 and 2 */\r\n  *pIalpha = __QSUB(product1, product2);\r\n\r\n  /* Calculate pIbeta by using the two intermediate products 3 and 4 */\r\n  *pIbeta = __QADD(product4, product3);\r\n}\r\n\r\n/**\r\n * @} end of Inverse park group\r\n */\r\n\r\n/**\r\n * @brief  Converts the elements of the Q31 vector to floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[out] pDst       is output pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n */\r\nvoid arm_q31_to_float(q31_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @ingroup groupInterpolation\r\n */\r\n\r\n/**\r\n * @defgroup LinearInterpolate Linear Interpolation\r\n *\r\n * Linear interpolation is a method of curve fitting using linear polynomials.\r\n * Linear interpolation works by effectively drawing a straight line between two neighboring samples and returning the appropriate point along that line\r\n *\r\n * \\par\r\n * \\image html LinearInterp.gif \"Linear interpolation\"\r\n *\r\n * \\par\r\n * A  Linear Interpolate function calculates an output value(y), for the input(x)\r\n * using linear interpolation of the input values x0, x1( nearest input values) and the output values y0 and y1(nearest output values)\r\n *\r\n * \\par Algorithm:\r\n * <pre>\r\n *       y = y0 + (x - x0) * ((y1 - y0)/(x1-x0))\r\n *       where x0, x1 are nearest values of input x\r\n *             y0, y1 are nearest values to output y\r\n * </pre>\r\n *\r\n * \\par\r\n * This set of functions implements Linear interpolation process\r\n * for Q7, Q15, Q31, and floating-point data types.  The functions operate on a single\r\n * sample of data and each call to the function returns a single processed value.\r\n * <code>S</code> points to an instance of the Linear Interpolate function data structure.\r\n * <code>x</code> is the input sample value. The functions returns the output value.\r\n *\r\n * \\par\r\n * if x is outside of the table boundary, Linear interpolation returns first value of the table\r\n * if x is below input range and returns last value of table if x is above range.\r\n */\r\n\r\n/**\r\n * @addtogroup LinearInterpolate\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Process function for the floating-point Linear Interpolation Function.\r\n * @param[in,out] S  is an instance of the floating-point Linear Interpolation structure\r\n * @param[in]     x  input sample to process\r\n * @return y processed output sample.\r\n *\r\n */\r\nstatic __INLINE float32_t arm_linear_interp_f32(arm_linear_interp_instance_f32 *S, float32_t x) {\r\n  float32_t  y;\r\n  float32_t  x0, x1;                 /* Nearest input values */\r\n  float32_t  y0, y1;                 /* Nearest output values */\r\n  float32_t  xSpacing = S->xSpacing; /* spacing between input values */\r\n  int32_t    i;                      /* Index variable */\r\n  float32_t *pYData = S->pYData;     /* pointer to output table */\r\n\r\n  /* Calculation of index */\r\n  i = (int32_t)((x - S->x1) / xSpacing);\r\n\r\n  if (i < 0) {\r\n    /* Iniatilize output for below specified range as least output value of table */\r\n    y = pYData[0];\r\n  } else if ((uint32_t)i >= S->nValues) {\r\n    /* Iniatilize output for above specified range as last output value of table */\r\n    y = pYData[S->nValues - 1];\r\n  } else {\r\n    /* Calculation of nearest input values */\r\n    x0 = S->x1 + i * xSpacing;\r\n    x1 = S->x1 + (i + 1) * xSpacing;\r\n\r\n    /* Read of nearest output values */\r\n    y0 = pYData[i];\r\n    y1 = pYData[i + 1];\r\n\r\n    /* Calculation of output */\r\n    y = y0 + (x - x0) * ((y1 - y0) / (x1 - x0));\r\n  }\r\n\r\n  /* returns output value */\r\n  return (y);\r\n}\r\n\r\n/**\r\n *\r\n * @brief  Process function for the Q31 Linear Interpolation Function.\r\n * @param[in] pYData   pointer to Q31 Linear Interpolation table\r\n * @param[in] x        input sample to process\r\n * @param[in] nValues  number of table values\r\n * @return y processed output sample.\r\n *\r\n * \\par\r\n * Input sample <code>x</code> is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part.\r\n * This function can support maximum of table size 2^12.\r\n *\r\n */\r\nstatic __INLINE q31_t arm_linear_interp_q31(q31_t *pYData, q31_t x, uint32_t nValues) {\r\n  q31_t   y;      /* output */\r\n  q31_t   y0, y1; /* Nearest output values */\r\n  q31_t   fract;  /* fractional part */\r\n  int32_t index;  /* Index to read nearest output values */\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  index = ((x & (q31_t)0xFFF00000) >> 20);\r\n\r\n  if (index >= (int32_t)(nValues - 1)) {\r\n    return (pYData[nValues - 1]);\r\n  } else if (index < 0) {\r\n    return (pYData[0]);\r\n  } else {\r\n    /* 20 bits for the fractional part */\r\n    /* shift left by 11 to keep fract in 1.31 format */\r\n    fract = (x & 0x000FFFFF) << 11;\r\n\r\n    /* Read two nearest output values from the index in 1.31(q31) format */\r\n    y0 = pYData[index];\r\n    y1 = pYData[index + 1];\r\n\r\n    /* Calculation of y0 * (1-fract) and y is in 2.30 format */\r\n    y = ((q31_t)((q63_t)y0 * (0x7FFFFFFF - fract) >> 32));\r\n\r\n    /* Calculation of y0 * (1-fract) + y1 *fract and y is in 2.30 format */\r\n    y += ((q31_t)(((q63_t)y1 * fract) >> 32));\r\n\r\n    /* Convert y to 1.31 format */\r\n    return (y << 1u);\r\n  }\r\n}\r\n\r\n/**\r\n *\r\n * @brief  Process function for the Q15 Linear Interpolation Function.\r\n * @param[in] pYData   pointer to Q15 Linear Interpolation table\r\n * @param[in] x        input sample to process\r\n * @param[in] nValues  number of table values\r\n * @return y processed output sample.\r\n *\r\n * \\par\r\n * Input sample <code>x</code> is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part.\r\n * This function can support maximum of table size 2^12.\r\n *\r\n */\r\nstatic __INLINE q15_t arm_linear_interp_q15(q15_t *pYData, q31_t x, uint32_t nValues) {\r\n  q63_t   y;      /* output */\r\n  q15_t   y0, y1; /* Nearest output values */\r\n  q31_t   fract;  /* fractional part */\r\n  int32_t index;  /* Index to read nearest output values */\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  index = ((x & (int32_t)0xFFF00000) >> 20);\r\n\r\n  if (index >= (int32_t)(nValues - 1)) {\r\n    return (pYData[nValues - 1]);\r\n  } else if (index < 0) {\r\n    return (pYData[0]);\r\n  } else {\r\n    /* 20 bits for the fractional part */\r\n    /* fract is in 12.20 format */\r\n    fract = (x & 0x000FFFFF);\r\n\r\n    /* Read two nearest output values from the index */\r\n    y0 = pYData[index];\r\n    y1 = pYData[index + 1];\r\n\r\n    /* Calculation of y0 * (1-fract) and y is in 13.35 format */\r\n    y = ((q63_t)y0 * (0xFFFFF - fract));\r\n\r\n    /* Calculation of (y0 * (1-fract) + y1 * fract) and y is in 13.35 format */\r\n    y += ((q63_t)y1 * (fract));\r\n\r\n    /* convert y to 1.15 format */\r\n    return (q15_t)(y >> 20);\r\n  }\r\n}\r\n\r\n/**\r\n *\r\n * @brief  Process function for the Q7 Linear Interpolation Function.\r\n * @param[in] pYData   pointer to Q7 Linear Interpolation table\r\n * @param[in] x        input sample to process\r\n * @param[in] nValues  number of table values\r\n * @return y processed output sample.\r\n *\r\n * \\par\r\n * Input sample <code>x</code> is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part.\r\n * This function can support maximum of table size 2^12.\r\n */\r\nstatic __INLINE q7_t arm_linear_interp_q7(q7_t *pYData, q31_t x, uint32_t nValues) {\r\n  q31_t    y;      /* output */\r\n  q7_t     y0, y1; /* Nearest output values */\r\n  q31_t    fract;  /* fractional part */\r\n  uint32_t index;  /* Index to read nearest output values */\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  if (x < 0) {\r\n    return (pYData[0]);\r\n  }\r\n  index = (x >> 20) & 0xfff;\r\n\r\n  if (index >= (nValues - 1)) {\r\n    return (pYData[nValues - 1]);\r\n  } else {\r\n    /* 20 bits for the fractional part */\r\n    /* fract is in 12.20 format */\r\n    fract = (x & 0x000FFFFF);\r\n\r\n    /* Read two nearest output values from the index and are in 1.7(q7) format */\r\n    y0 = pYData[index];\r\n    y1 = pYData[index + 1];\r\n\r\n    /* Calculation of y0 * (1-fract ) and y is in 13.27(q27) format */\r\n    y = ((y0 * (0xFFFFF - fract)));\r\n\r\n    /* Calculation of y1 * fract + y0 * (1-fract) and y is in 13.27(q27) format */\r\n    y += (y1 * fract);\r\n\r\n    /* convert y to 1.7(q7) format */\r\n    return (q7_t)(y >> 20);\r\n  }\r\n}\r\n\r\n/**\r\n * @} end of LinearInterpolate group\r\n */\r\n\r\n/**\r\n * @brief  Fast approximation to the trigonometric sine function for floating-point data.\r\n * @param[in] x  input value in radians.\r\n * @return  sin(x).\r\n */\r\nfloat32_t arm_sin_f32(float32_t x);\r\n\r\n/**\r\n * @brief  Fast approximation to the trigonometric sine function for Q31 data.\r\n * @param[in] x  Scaled input value in radians.\r\n * @return  sin(x).\r\n */\r\nq31_t arm_sin_q31(q31_t x);\r\n\r\n/**\r\n * @brief  Fast approximation to the trigonometric sine function for Q15 data.\r\n * @param[in] x  Scaled input value in radians.\r\n * @return  sin(x).\r\n */\r\nq15_t arm_sin_q15(q15_t x);\r\n\r\n/**\r\n * @brief  Fast approximation to the trigonometric cosine function for floating-point data.\r\n * @param[in] x  input value in radians.\r\n * @return  cos(x).\r\n */\r\nfloat32_t arm_cos_f32(float32_t x);\r\n\r\n/**\r\n * @brief Fast approximation to the trigonometric cosine function for Q31 data.\r\n * @param[in] x  Scaled input value in radians.\r\n * @return  cos(x).\r\n */\r\nq31_t arm_cos_q31(q31_t x);\r\n\r\n/**\r\n * @brief  Fast approximation to the trigonometric cosine function for Q15 data.\r\n * @param[in] x  Scaled input value in radians.\r\n * @return  cos(x).\r\n */\r\nq15_t arm_cos_q15(q15_t x);\r\n\r\n/**\r\n * @ingroup groupFastMath\r\n */\r\n\r\n/**\r\n * @defgroup SQRT Square Root\r\n *\r\n * Computes the square root of a number.\r\n * There are separate functions for Q15, Q31, and floating-point data types.\r\n * The square root function is computed using the Newton-Raphson algorithm.\r\n * This is an iterative algorithm of the form:\r\n * <pre>\r\n *      x1 = x0 - f(x0)/f'(x0)\r\n * </pre>\r\n * where <code>x1</code> is the current estimate,\r\n * <code>x0</code> is the previous estimate, and\r\n * <code>f'(x0)</code> is the derivative of <code>f()</code> evaluated at <code>x0</code>.\r\n * For the square root function, the algorithm reduces to:\r\n * <pre>\r\n *     x0 = in/2                         [initial guess]\r\n *     x1 = 1/2 * ( x0 + in / x0)        [each iteration]\r\n * </pre>\r\n */\r\n\r\n/**\r\n * @addtogroup SQRT\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Floating-point square root function.\r\n * @param[in]  in    input value.\r\n * @param[out] pOut  square root of input value.\r\n * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if\r\n * <code>in</code> is negative value and returns zero output for negative values.\r\n */\r\nstatic __INLINE arm_status arm_sqrt_f32(float32_t in, float32_t *pOut) {\r\n  if (in >= 0.0f) {\r\n\r\n#if (__FPU_USED == 1) && defined(__CC_ARM)\r\n    *pOut = __sqrtf(in);\r\n#elif (__FPU_USED == 1) && (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))\r\n    *pOut = __builtin_sqrtf(in);\r\n#elif (__FPU_USED == 1) && defined(__GNUC__)\r\n    *pOut = __builtin_sqrtf(in);\r\n#elif (__FPU_USED == 1) && defined(__ICCARM__) && (__VER__ >= 6040000)\r\n    __ASM(\"VSQRT.F32 %0,%1\" : \"=t\"(*pOut) : \"t\"(in));\r\n#else\r\n    *pOut = sqrtf(in);\r\n#endif\r\n\r\n    return (ARM_MATH_SUCCESS);\r\n  } else {\r\n    *pOut = 0.0f;\r\n    return (ARM_MATH_ARGUMENT_ERROR);\r\n  }\r\n}\r\n\r\n/**\r\n * @brief Q31 square root function.\r\n * @param[in]  in    input value.  The range of the input value is [0 +1) or 0x00000000 to 0x7FFFFFFF.\r\n * @param[out] pOut  square root of input value.\r\n * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if\r\n * <code>in</code> is negative value and returns zero output for negative values.\r\n */\r\narm_status arm_sqrt_q31(q31_t in, q31_t *pOut);\r\n\r\n/**\r\n * @brief  Q15 square root function.\r\n * @param[in]  in    input value.  The range of the input value is [0 +1) or 0x0000 to 0x7FFF.\r\n * @param[out] pOut  square root of input value.\r\n * @return The function returns ARM_MATH_SUCCESS if input value is positive value or ARM_MATH_ARGUMENT_ERROR if\r\n * <code>in</code> is negative value and returns zero output for negative values.\r\n */\r\narm_status arm_sqrt_q15(q15_t in, q15_t *pOut);\r\n\r\n/**\r\n * @} end of SQRT group\r\n */\r\n\r\n/**\r\n * @brief floating-point Circular write function.\r\n */\r\nstatic __INLINE void arm_circularWrite_f32(int32_t *circBuffer, int32_t L, uint16_t *writeOffset, int32_t bufferInc, const int32_t *src, int32_t srcInc, uint32_t blockSize) {\r\n  uint32_t i = 0u;\r\n  int32_t  wOffset;\r\n\r\n  /* Copy the value of Index pointer that points\r\n   * to the current location where the input samples to be copied */\r\n  wOffset = *writeOffset;\r\n\r\n  /* Loop over the blockSize */\r\n  i = blockSize;\r\n\r\n  while (i > 0u) {\r\n    /* copy the input sample to the circular buffer */\r\n    circBuffer[wOffset] = *src;\r\n\r\n    /* Update the input pointer */\r\n    src += srcInc;\r\n\r\n    /* Circularly update wOffset.  Watch out for positive and negative value */\r\n    wOffset += bufferInc;\r\n    if (wOffset >= L)\r\n      wOffset -= L;\r\n\r\n    /* Decrement the loop counter */\r\n    i--;\r\n  }\r\n\r\n  /* Update the index pointer */\r\n  *writeOffset = (uint16_t)wOffset;\r\n}\r\n\r\n/**\r\n * @brief floating-point Circular Read function.\r\n */\r\nstatic __INLINE void arm_circularRead_f32(int32_t *circBuffer, int32_t L, int32_t *readOffset, int32_t bufferInc, int32_t *dst, int32_t *dst_base, int32_t dst_length, int32_t dstInc,\r\n                                          uint32_t blockSize) {\r\n  uint32_t i = 0u;\r\n  int32_t  rOffset, dst_end;\r\n\r\n  /* Copy the value of Index pointer that points\r\n   * to the current location from where the input samples to be read */\r\n  rOffset = *readOffset;\r\n  dst_end = (int32_t)(dst_base + dst_length);\r\n\r\n  /* Loop over the blockSize */\r\n  i = blockSize;\r\n\r\n  while (i > 0u) {\r\n    /* copy the sample from the circular buffer to the destination buffer */\r\n    *dst = circBuffer[rOffset];\r\n\r\n    /* Update the input pointer */\r\n    dst += dstInc;\r\n\r\n    if (dst == (int32_t *)dst_end) {\r\n      dst = dst_base;\r\n    }\r\n\r\n    /* Circularly update rOffset.  Watch out for positive and negative value  */\r\n    rOffset += bufferInc;\r\n\r\n    if (rOffset >= L) {\r\n      rOffset -= L;\r\n    }\r\n\r\n    /* Decrement the loop counter */\r\n    i--;\r\n  }\r\n\r\n  /* Update the index pointer */\r\n  *readOffset = rOffset;\r\n}\r\n\r\n/**\r\n * @brief Q15 Circular write function.\r\n */\r\nstatic __INLINE void arm_circularWrite_q15(q15_t *circBuffer, int32_t L, uint16_t *writeOffset, int32_t bufferInc, const q15_t *src, int32_t srcInc, uint32_t blockSize) {\r\n  uint32_t i = 0u;\r\n  int32_t  wOffset;\r\n\r\n  /* Copy the value of Index pointer that points\r\n   * to the current location where the input samples to be copied */\r\n  wOffset = *writeOffset;\r\n\r\n  /* Loop over the blockSize */\r\n  i = blockSize;\r\n\r\n  while (i > 0u) {\r\n    /* copy the input sample to the circular buffer */\r\n    circBuffer[wOffset] = *src;\r\n\r\n    /* Update the input pointer */\r\n    src += srcInc;\r\n\r\n    /* Circularly update wOffset.  Watch out for positive and negative value */\r\n    wOffset += bufferInc;\r\n    if (wOffset >= L)\r\n      wOffset -= L;\r\n\r\n    /* Decrement the loop counter */\r\n    i--;\r\n  }\r\n\r\n  /* Update the index pointer */\r\n  *writeOffset = (uint16_t)wOffset;\r\n}\r\n\r\n/**\r\n * @brief Q15 Circular Read function.\r\n */\r\nstatic __INLINE void arm_circularRead_q15(q15_t *circBuffer, int32_t L, int32_t *readOffset, int32_t bufferInc, q15_t *dst, q15_t *dst_base, int32_t dst_length, int32_t dstInc, uint32_t blockSize) {\r\n  uint32_t i = 0;\r\n  int32_t  rOffset, dst_end;\r\n\r\n  /* Copy the value of Index pointer that points\r\n   * to the current location from where the input samples to be read */\r\n  rOffset = *readOffset;\r\n\r\n  dst_end = (int32_t)(dst_base + dst_length);\r\n\r\n  /* Loop over the blockSize */\r\n  i = blockSize;\r\n\r\n  while (i > 0u) {\r\n    /* copy the sample from the circular buffer to the destination buffer */\r\n    *dst = circBuffer[rOffset];\r\n\r\n    /* Update the input pointer */\r\n    dst += dstInc;\r\n\r\n    if (dst == (q15_t *)dst_end) {\r\n      dst = dst_base;\r\n    }\r\n\r\n    /* Circularly update wOffset.  Watch out for positive and negative value */\r\n    rOffset += bufferInc;\r\n\r\n    if (rOffset >= L) {\r\n      rOffset -= L;\r\n    }\r\n\r\n    /* Decrement the loop counter */\r\n    i--;\r\n  }\r\n\r\n  /* Update the index pointer */\r\n  *readOffset = rOffset;\r\n}\r\n\r\n/**\r\n * @brief Q7 Circular write function.\r\n */\r\nstatic __INLINE void arm_circularWrite_q7(q7_t *circBuffer, int32_t L, uint16_t *writeOffset, int32_t bufferInc, const q7_t *src, int32_t srcInc, uint32_t blockSize) {\r\n  uint32_t i = 0u;\r\n  int32_t  wOffset;\r\n\r\n  /* Copy the value of Index pointer that points\r\n   * to the current location where the input samples to be copied */\r\n  wOffset = *writeOffset;\r\n\r\n  /* Loop over the blockSize */\r\n  i = blockSize;\r\n\r\n  while (i > 0u) {\r\n    /* copy the input sample to the circular buffer */\r\n    circBuffer[wOffset] = *src;\r\n\r\n    /* Update the input pointer */\r\n    src += srcInc;\r\n\r\n    /* Circularly update wOffset.  Watch out for positive and negative value */\r\n    wOffset += bufferInc;\r\n    if (wOffset >= L)\r\n      wOffset -= L;\r\n\r\n    /* Decrement the loop counter */\r\n    i--;\r\n  }\r\n\r\n  /* Update the index pointer */\r\n  *writeOffset = (uint16_t)wOffset;\r\n}\r\n\r\n/**\r\n * @brief Q7 Circular Read function.\r\n */\r\nstatic __INLINE void arm_circularRead_q7(q7_t *circBuffer, int32_t L, int32_t *readOffset, int32_t bufferInc, q7_t *dst, q7_t *dst_base, int32_t dst_length, int32_t dstInc, uint32_t blockSize) {\r\n  uint32_t i = 0;\r\n  int32_t  rOffset, dst_end;\r\n\r\n  /* Copy the value of Index pointer that points\r\n   * to the current location from where the input samples to be read */\r\n  rOffset = *readOffset;\r\n\r\n  dst_end = (int32_t)(dst_base + dst_length);\r\n\r\n  /* Loop over the blockSize */\r\n  i = blockSize;\r\n\r\n  while (i > 0u) {\r\n    /* copy the sample from the circular buffer to the destination buffer */\r\n    *dst = circBuffer[rOffset];\r\n\r\n    /* Update the input pointer */\r\n    dst += dstInc;\r\n\r\n    if (dst == (q7_t *)dst_end) {\r\n      dst = dst_base;\r\n    }\r\n\r\n    /* Circularly update rOffset.  Watch out for positive and negative value */\r\n    rOffset += bufferInc;\r\n\r\n    if (rOffset >= L) {\r\n      rOffset -= L;\r\n    }\r\n\r\n    /* Decrement the loop counter */\r\n    i--;\r\n  }\r\n\r\n  /* Update the index pointer */\r\n  *readOffset = rOffset;\r\n}\r\n\r\n/**\r\n * @brief  Sum of the squares of the elements of a Q31 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_power_q31(q31_t *pSrc, uint32_t blockSize, q63_t *pResult);\r\n\r\n/**\r\n * @brief  Sum of the squares of the elements of a floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_power_f32(float32_t *pSrc, uint32_t blockSize, float32_t *pResult);\r\n\r\n/**\r\n * @brief  Sum of the squares of the elements of a Q15 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_power_q15(q15_t *pSrc, uint32_t blockSize, q63_t *pResult);\r\n\r\n/**\r\n * @brief  Sum of the squares of the elements of a Q7 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_power_q7(q7_t *pSrc, uint32_t blockSize, q31_t *pResult);\r\n\r\n/**\r\n * @brief  Mean value of a Q7 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_mean_q7(q7_t *pSrc, uint32_t blockSize, q7_t *pResult);\r\n\r\n/**\r\n * @brief  Mean value of a Q15 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_mean_q15(q15_t *pSrc, uint32_t blockSize, q15_t *pResult);\r\n\r\n/**\r\n * @brief  Mean value of a Q31 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_mean_q31(q31_t *pSrc, uint32_t blockSize, q31_t *pResult);\r\n\r\n/**\r\n * @brief  Mean value of a floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_mean_f32(float32_t *pSrc, uint32_t blockSize, float32_t *pResult);\r\n\r\n/**\r\n * @brief  Variance of the elements of a floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_var_f32(float32_t *pSrc, uint32_t blockSize, float32_t *pResult);\r\n\r\n/**\r\n * @brief  Variance of the elements of a Q31 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_var_q31(q31_t *pSrc, uint32_t blockSize, q31_t *pResult);\r\n\r\n/**\r\n * @brief  Variance of the elements of a Q15 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_var_q15(q15_t *pSrc, uint32_t blockSize, q15_t *pResult);\r\n\r\n/**\r\n * @brief  Root Mean Square of the elements of a floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_rms_f32(float32_t *pSrc, uint32_t blockSize, float32_t *pResult);\r\n\r\n/**\r\n * @brief  Root Mean Square of the elements of a Q31 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_rms_q31(q31_t *pSrc, uint32_t blockSize, q31_t *pResult);\r\n\r\n/**\r\n * @brief  Root Mean Square of the elements of a Q15 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_rms_q15(q15_t *pSrc, uint32_t blockSize, q15_t *pResult);\r\n\r\n/**\r\n * @brief  Standard deviation of the elements of a floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_std_f32(float32_t *pSrc, uint32_t blockSize, float32_t *pResult);\r\n\r\n/**\r\n * @brief  Standard deviation of the elements of a Q31 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_std_q31(q31_t *pSrc, uint32_t blockSize, q31_t *pResult);\r\n\r\n/**\r\n * @brief  Standard deviation of the elements of a Q15 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output value.\r\n */\r\nvoid arm_std_q15(q15_t *pSrc, uint32_t blockSize, q15_t *pResult);\r\n\r\n/**\r\n * @brief  Floating-point complex magnitude\r\n * @param[in]  pSrc        points to the complex input vector\r\n * @param[out] pDst        points to the real output vector\r\n * @param[in]  numSamples  number of complex samples in the input vector\r\n */\r\nvoid arm_cmplx_mag_f32(float32_t *pSrc, float32_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q31 complex magnitude\r\n * @param[in]  pSrc        points to the complex input vector\r\n * @param[out] pDst        points to the real output vector\r\n * @param[in]  numSamples  number of complex samples in the input vector\r\n */\r\nvoid arm_cmplx_mag_q31(q31_t *pSrc, q31_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q15 complex magnitude\r\n * @param[in]  pSrc        points to the complex input vector\r\n * @param[out] pDst        points to the real output vector\r\n * @param[in]  numSamples  number of complex samples in the input vector\r\n */\r\nvoid arm_cmplx_mag_q15(q15_t *pSrc, q15_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q15 complex dot product\r\n * @param[in]  pSrcA       points to the first input vector\r\n * @param[in]  pSrcB       points to the second input vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n * @param[out] realResult  real part of the result returned here\r\n * @param[out] imagResult  imaginary part of the result returned here\r\n */\r\nvoid arm_cmplx_dot_prod_q15(q15_t *pSrcA, q15_t *pSrcB, uint32_t numSamples, q31_t *realResult, q31_t *imagResult);\r\n\r\n/**\r\n * @brief  Q31 complex dot product\r\n * @param[in]  pSrcA       points to the first input vector\r\n * @param[in]  pSrcB       points to the second input vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n * @param[out] realResult  real part of the result returned here\r\n * @param[out] imagResult  imaginary part of the result returned here\r\n */\r\nvoid arm_cmplx_dot_prod_q31(q31_t *pSrcA, q31_t *pSrcB, uint32_t numSamples, q63_t *realResult, q63_t *imagResult);\r\n\r\n/**\r\n * @brief  Floating-point complex dot product\r\n * @param[in]  pSrcA       points to the first input vector\r\n * @param[in]  pSrcB       points to the second input vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n * @param[out] realResult  real part of the result returned here\r\n * @param[out] imagResult  imaginary part of the result returned here\r\n */\r\nvoid arm_cmplx_dot_prod_f32(float32_t *pSrcA, float32_t *pSrcB, uint32_t numSamples, float32_t *realResult, float32_t *imagResult);\r\n\r\n/**\r\n * @brief  Q15 complex-by-real multiplication\r\n * @param[in]  pSrcCmplx   points to the complex input vector\r\n * @param[in]  pSrcReal    points to the real input vector\r\n * @param[out] pCmplxDst   points to the complex output vector\r\n * @param[in]  numSamples  number of samples in each vector\r\n */\r\nvoid arm_cmplx_mult_real_q15(q15_t *pSrcCmplx, q15_t *pSrcReal, q15_t *pCmplxDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q31 complex-by-real multiplication\r\n * @param[in]  pSrcCmplx   points to the complex input vector\r\n * @param[in]  pSrcReal    points to the real input vector\r\n * @param[out] pCmplxDst   points to the complex output vector\r\n * @param[in]  numSamples  number of samples in each vector\r\n */\r\nvoid arm_cmplx_mult_real_q31(q31_t *pSrcCmplx, q31_t *pSrcReal, q31_t *pCmplxDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Floating-point complex-by-real multiplication\r\n * @param[in]  pSrcCmplx   points to the complex input vector\r\n * @param[in]  pSrcReal    points to the real input vector\r\n * @param[out] pCmplxDst   points to the complex output vector\r\n * @param[in]  numSamples  number of samples in each vector\r\n */\r\nvoid arm_cmplx_mult_real_f32(float32_t *pSrcCmplx, float32_t *pSrcReal, float32_t *pCmplxDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Minimum value of a Q7 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] result     is output pointer\r\n * @param[in]  index      is the array index of the minimum value in the input buffer.\r\n */\r\nvoid arm_min_q7(q7_t *pSrc, uint32_t blockSize, q7_t *result, uint32_t *index);\r\n\r\n/**\r\n * @brief  Minimum value of a Q15 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output pointer\r\n * @param[in]  pIndex     is the array index of the minimum value in the input buffer.\r\n */\r\nvoid arm_min_q15(q15_t *pSrc, uint32_t blockSize, q15_t *pResult, uint32_t *pIndex);\r\n\r\n/**\r\n * @brief  Minimum value of a Q31 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output pointer\r\n * @param[out] pIndex     is the array index of the minimum value in the input buffer.\r\n */\r\nvoid arm_min_q31(q31_t *pSrc, uint32_t blockSize, q31_t *pResult, uint32_t *pIndex);\r\n\r\n/**\r\n * @brief  Minimum value of a floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n * @param[out] pResult    is output pointer\r\n * @param[out] pIndex     is the array index of the minimum value in the input buffer.\r\n */\r\nvoid arm_min_f32(float32_t *pSrc, uint32_t blockSize, float32_t *pResult, uint32_t *pIndex);\r\n\r\n/**\r\n * @brief Maximum value of a Q7 vector.\r\n * @param[in]  pSrc       points to the input buffer\r\n * @param[in]  blockSize  length of the input vector\r\n * @param[out] pResult    maximum value returned here\r\n * @param[out] pIndex     index of maximum value returned here\r\n */\r\nvoid arm_max_q7(q7_t *pSrc, uint32_t blockSize, q7_t *pResult, uint32_t *pIndex);\r\n\r\n/**\r\n * @brief Maximum value of a Q15 vector.\r\n * @param[in]  pSrc       points to the input buffer\r\n * @param[in]  blockSize  length of the input vector\r\n * @param[out] pResult    maximum value returned here\r\n * @param[out] pIndex     index of maximum value returned here\r\n */\r\nvoid arm_max_q15(q15_t *pSrc, uint32_t blockSize, q15_t *pResult, uint32_t *pIndex);\r\n\r\n/**\r\n * @brief Maximum value of a Q31 vector.\r\n * @param[in]  pSrc       points to the input buffer\r\n * @param[in]  blockSize  length of the input vector\r\n * @param[out] pResult    maximum value returned here\r\n * @param[out] pIndex     index of maximum value returned here\r\n */\r\nvoid arm_max_q31(q31_t *pSrc, uint32_t blockSize, q31_t *pResult, uint32_t *pIndex);\r\n\r\n/**\r\n * @brief Maximum value of a floating-point vector.\r\n * @param[in]  pSrc       points to the input buffer\r\n * @param[in]  blockSize  length of the input vector\r\n * @param[out] pResult    maximum value returned here\r\n * @param[out] pIndex     index of maximum value returned here\r\n */\r\nvoid arm_max_f32(float32_t *pSrc, uint32_t blockSize, float32_t *pResult, uint32_t *pIndex);\r\n\r\n/**\r\n * @brief  Q15 complex-by-complex multiplication\r\n * @param[in]  pSrcA       points to the first input vector\r\n * @param[in]  pSrcB       points to the second input vector\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n */\r\nvoid arm_cmplx_mult_cmplx_q15(q15_t *pSrcA, q15_t *pSrcB, q15_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Q31 complex-by-complex multiplication\r\n * @param[in]  pSrcA       points to the first input vector\r\n * @param[in]  pSrcB       points to the second input vector\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n */\r\nvoid arm_cmplx_mult_cmplx_q31(q31_t *pSrcA, q31_t *pSrcB, q31_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief  Floating-point complex-by-complex multiplication\r\n * @param[in]  pSrcA       points to the first input vector\r\n * @param[in]  pSrcB       points to the second input vector\r\n * @param[out] pDst        points to the output vector\r\n * @param[in]  numSamples  number of complex samples in each vector\r\n */\r\nvoid arm_cmplx_mult_cmplx_f32(float32_t *pSrcA, float32_t *pSrcB, float32_t *pDst, uint32_t numSamples);\r\n\r\n/**\r\n * @brief Converts the elements of the floating-point vector to Q31 vector.\r\n * @param[in]  pSrc       points to the floating-point input vector\r\n * @param[out] pDst       points to the Q31 output vector\r\n * @param[in]  blockSize  length of the input vector\r\n */\r\nvoid arm_float_to_q31(float32_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Converts the elements of the floating-point vector to Q15 vector.\r\n * @param[in]  pSrc       points to the floating-point input vector\r\n * @param[out] pDst       points to the Q15 output vector\r\n * @param[in]  blockSize  length of the input vector\r\n */\r\nvoid arm_float_to_q15(float32_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief Converts the elements of the floating-point vector to Q7 vector.\r\n * @param[in]  pSrc       points to the floating-point input vector\r\n * @param[out] pDst       points to the Q7 output vector\r\n * @param[in]  blockSize  length of the input vector\r\n */\r\nvoid arm_float_to_q7(float32_t *pSrc, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Converts the elements of the Q31 vector to Q15 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[out] pDst       is output pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n */\r\nvoid arm_q31_to_q15(q31_t *pSrc, q15_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Converts the elements of the Q31 vector to Q7 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[out] pDst       is output pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n */\r\nvoid arm_q31_to_q7(q31_t *pSrc, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Converts the elements of the Q15 vector to floating-point vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[out] pDst       is output pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n */\r\nvoid arm_q15_to_float(q15_t *pSrc, float32_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Converts the elements of the Q15 vector to Q31 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[out] pDst       is output pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n */\r\nvoid arm_q15_to_q31(q15_t *pSrc, q31_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @brief  Converts the elements of the Q15 vector to Q7 vector.\r\n * @param[in]  pSrc       is input pointer\r\n * @param[out] pDst       is output pointer\r\n * @param[in]  blockSize  is the number of samples to process\r\n */\r\nvoid arm_q15_to_q7(q15_t *pSrc, q7_t *pDst, uint32_t blockSize);\r\n\r\n/**\r\n * @ingroup groupInterpolation\r\n */\r\n\r\n/**\r\n * @defgroup BilinearInterpolate Bilinear Interpolation\r\n *\r\n * Bilinear interpolation is an extension of linear interpolation applied to a two dimensional grid.\r\n * The underlying function <code>f(x, y)</code> is sampled on a regular grid and the interpolation process\r\n * determines values between the grid points.\r\n * Bilinear interpolation is equivalent to two step linear interpolation, first in the x-dimension and then in the y-dimension.\r\n * Bilinear interpolation is often used in image processing to rescale images.\r\n * The CMSIS DSP library provides bilinear interpolation functions for Q7, Q15, Q31, and floating-point data types.\r\n *\r\n * <b>Algorithm</b>\r\n * \\par\r\n * The instance structure used by the bilinear interpolation functions describes a two dimensional data table.\r\n * For floating-point, the instance structure is defined as:\r\n * <pre>\r\n *   typedef struct\r\n *   {\r\n *     uint16_t numRows;\r\n *     uint16_t numCols;\r\n *     float32_t *pData;\r\n * } arm_bilinear_interp_instance_f32;\r\n * </pre>\r\n *\r\n * \\par\r\n * where <code>numRows</code> specifies the number of rows in the table;\r\n * <code>numCols</code> specifies the number of columns in the table;\r\n * and <code>pData</code> points to an array of size <code>numRows*numCols</code> values.\r\n * The data table <code>pTable</code> is organized in row order and the supplied data values fall on integer indexes.\r\n * That is, table element (x,y) is located at <code>pTable[x + y*numCols]</code> where x and y are integers.\r\n *\r\n * \\par\r\n * Let <code>(x, y)</code> specify the desired interpolation point.  Then define:\r\n * <pre>\r\n *     XF = floor(x)\r\n *     YF = floor(y)\r\n * </pre>\r\n * \\par\r\n * The interpolated output point is computed as:\r\n * <pre>\r\n *  f(x, y) = f(XF, YF) * (1-(x-XF)) * (1-(y-YF))\r\n *           + f(XF+1, YF) * (x-XF)*(1-(y-YF))\r\n *           + f(XF, YF+1) * (1-(x-XF))*(y-YF)\r\n *           + f(XF+1, YF+1) * (x-XF)*(y-YF)\r\n * </pre>\r\n * Note that the coordinates (x, y) contain integer and fractional components.\r\n * The integer components specify which portion of the table to use while the\r\n * fractional components control the interpolation processor.\r\n *\r\n * \\par\r\n * if (x,y) are outside of the table boundary, Bilinear interpolation returns zero output.\r\n */\r\n\r\n/**\r\n * @addtogroup BilinearInterpolate\r\n * @{\r\n */\r\n\r\n/**\r\n *\r\n * @brief  Floating-point bilinear interpolation.\r\n * @param[in,out] S  points to an instance of the interpolation structure.\r\n * @param[in]     X  interpolation coordinate.\r\n * @param[in]     Y  interpolation coordinate.\r\n * @return out interpolated value.\r\n */\r\nstatic __INLINE float32_t arm_bilinear_interp_f32(const arm_bilinear_interp_instance_f32 *S, float32_t X, float32_t Y) {\r\n  float32_t  out;\r\n  float32_t  f00, f01, f10, f11;\r\n  float32_t *pData = S->pData;\r\n  int32_t    xIndex, yIndex, index;\r\n  float32_t  xdiff, ydiff;\r\n  float32_t  b1, b2, b3, b4;\r\n\r\n  xIndex = (int32_t)X;\r\n  yIndex = (int32_t)Y;\r\n\r\n  /* Care taken for table outside boundary */\r\n  /* Returns zero output when values are outside table boundary */\r\n  if (xIndex < 0 || xIndex > (S->numRows - 1) || yIndex < 0 || yIndex > (S->numCols - 1)) {\r\n    return (0);\r\n  }\r\n\r\n  /* Calculation of index for two nearest points in X-direction */\r\n  index = (xIndex - 1) + (yIndex - 1) * S->numCols;\r\n\r\n  /* Read two nearest points in X-direction */\r\n  f00 = pData[index];\r\n  f01 = pData[index + 1];\r\n\r\n  /* Calculation of index for two nearest points in Y-direction */\r\n  index = (xIndex - 1) + (yIndex)*S->numCols;\r\n\r\n  /* Read two nearest points in Y-direction */\r\n  f10 = pData[index];\r\n  f11 = pData[index + 1];\r\n\r\n  /* Calculation of intermediate values */\r\n  b1 = f00;\r\n  b2 = f01 - f00;\r\n  b3 = f10 - f00;\r\n  b4 = f00 - f01 - f10 + f11;\r\n\r\n  /* Calculation of fractional part in X */\r\n  xdiff = X - xIndex;\r\n\r\n  /* Calculation of fractional part in Y */\r\n  ydiff = Y - yIndex;\r\n\r\n  /* Calculation of bi-linear interpolated output */\r\n  out = b1 + b2 * xdiff + b3 * ydiff + b4 * xdiff * ydiff;\r\n\r\n  /* return to application */\r\n  return (out);\r\n}\r\n\r\n/**\r\n *\r\n * @brief  Q31 bilinear interpolation.\r\n * @param[in,out] S  points to an instance of the interpolation structure.\r\n * @param[in]     X  interpolation coordinate in 12.20 format.\r\n * @param[in]     Y  interpolation coordinate in 12.20 format.\r\n * @return out interpolated value.\r\n */\r\nstatic __INLINE q31_t arm_bilinear_interp_q31(arm_bilinear_interp_instance_q31 *S, q31_t X, q31_t Y) {\r\n  q31_t    out;                 /* Temporary output */\r\n  q31_t    acc = 0;             /* output */\r\n  q31_t    xfract, yfract;      /* X, Y fractional parts */\r\n  q31_t    x1, x2, y1, y2;      /* Nearest output values */\r\n  int32_t  rI, cI;              /* Row and column indices */\r\n  q31_t *  pYData = S->pData;   /* pointer to output table values */\r\n  uint32_t nCols  = S->numCols; /* num of rows */\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  rI = ((X & (q31_t)0xFFF00000) >> 20);\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  cI = ((Y & (q31_t)0xFFF00000) >> 20);\r\n\r\n  /* Care taken for table outside boundary */\r\n  /* Returns zero output when values are outside table boundary */\r\n  if (rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) {\r\n    return (0);\r\n  }\r\n\r\n  /* 20 bits for the fractional part */\r\n  /* shift left xfract by 11 to keep 1.31 format */\r\n  xfract = (X & 0x000FFFFF) << 11u;\r\n\r\n  /* Read two nearest output values from the index */\r\n  x1 = pYData[(rI) + (int32_t)nCols * (cI)];\r\n  x2 = pYData[(rI) + (int32_t)nCols * (cI) + 1];\r\n\r\n  /* 20 bits for the fractional part */\r\n  /* shift left yfract by 11 to keep 1.31 format */\r\n  yfract = (Y & 0x000FFFFF) << 11u;\r\n\r\n  /* Read two nearest output values from the index */\r\n  y1 = pYData[(rI) + (int32_t)nCols * (cI + 1)];\r\n  y2 = pYData[(rI) + (int32_t)nCols * (cI + 1) + 1];\r\n\r\n  /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 3.29(q29) format */\r\n  out = ((q31_t)(((q63_t)x1 * (0x7FFFFFFF - xfract)) >> 32));\r\n  acc = ((q31_t)(((q63_t)out * (0x7FFFFFFF - yfract)) >> 32));\r\n\r\n  /* x2 * (xfract) * (1-yfract)  in 3.29(q29) and adding to acc */\r\n  out = ((q31_t)((q63_t)x2 * (0x7FFFFFFF - yfract) >> 32));\r\n  acc += ((q31_t)((q63_t)out * (xfract) >> 32));\r\n\r\n  /* y1 * (1 - xfract) * (yfract)  in 3.29(q29) and adding to acc */\r\n  out = ((q31_t)((q63_t)y1 * (0x7FFFFFFF - xfract) >> 32));\r\n  acc += ((q31_t)((q63_t)out * (yfract) >> 32));\r\n\r\n  /* y2 * (xfract) * (yfract)  in 3.29(q29) and adding to acc */\r\n  out = ((q31_t)((q63_t)y2 * (xfract) >> 32));\r\n  acc += ((q31_t)((q63_t)out * (yfract) >> 32));\r\n\r\n  /* Convert acc to 1.31(q31) format */\r\n  return ((q31_t)(acc << 2));\r\n}\r\n\r\n/**\r\n * @brief  Q15 bilinear interpolation.\r\n * @param[in,out] S  points to an instance of the interpolation structure.\r\n * @param[in]     X  interpolation coordinate in 12.20 format.\r\n * @param[in]     Y  interpolation coordinate in 12.20 format.\r\n * @return out interpolated value.\r\n */\r\nstatic __INLINE q15_t arm_bilinear_interp_q15(arm_bilinear_interp_instance_q15 *S, q31_t X, q31_t Y) {\r\n  q63_t    acc = 0;             /* output */\r\n  q31_t    out;                 /* Temporary output */\r\n  q15_t    x1, x2, y1, y2;      /* Nearest output values */\r\n  q31_t    xfract, yfract;      /* X, Y fractional parts */\r\n  int32_t  rI, cI;              /* Row and column indices */\r\n  q15_t *  pYData = S->pData;   /* pointer to output table values */\r\n  uint32_t nCols  = S->numCols; /* num of rows */\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  rI = ((X & (q31_t)0xFFF00000) >> 20);\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  cI = ((Y & (q31_t)0xFFF00000) >> 20);\r\n\r\n  /* Care taken for table outside boundary */\r\n  /* Returns zero output when values are outside table boundary */\r\n  if (rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) {\r\n    return (0);\r\n  }\r\n\r\n  /* 20 bits for the fractional part */\r\n  /* xfract should be in 12.20 format */\r\n  xfract = (X & 0x000FFFFF);\r\n\r\n  /* Read two nearest output values from the index */\r\n  x1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI)];\r\n  x2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI) + 1];\r\n\r\n  /* 20 bits for the fractional part */\r\n  /* yfract should be in 12.20 format */\r\n  yfract = (Y & 0x000FFFFF);\r\n\r\n  /* Read two nearest output values from the index */\r\n  y1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1)];\r\n  y2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1) + 1];\r\n\r\n  /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 13.51 format */\r\n\r\n  /* x1 is in 1.15(q15), xfract in 12.20 format and out is in 13.35 format */\r\n  /* convert 13.35 to 13.31 by right shifting  and out is in 1.31 */\r\n  out = (q31_t)(((q63_t)x1 * (0xFFFFF - xfract)) >> 4u);\r\n  acc = ((q63_t)out * (0xFFFFF - yfract));\r\n\r\n  /* x2 * (xfract) * (1-yfract)  in 1.51 and adding to acc */\r\n  out = (q31_t)(((q63_t)x2 * (0xFFFFF - yfract)) >> 4u);\r\n  acc += ((q63_t)out * (xfract));\r\n\r\n  /* y1 * (1 - xfract) * (yfract)  in 1.51 and adding to acc */\r\n  out = (q31_t)(((q63_t)y1 * (0xFFFFF - xfract)) >> 4u);\r\n  acc += ((q63_t)out * (yfract));\r\n\r\n  /* y2 * (xfract) * (yfract)  in 1.51 and adding to acc */\r\n  out = (q31_t)(((q63_t)y2 * (xfract)) >> 4u);\r\n  acc += ((q63_t)out * (yfract));\r\n\r\n  /* acc is in 13.51 format and down shift acc by 36 times */\r\n  /* Convert out to 1.15 format */\r\n  return ((q15_t)(acc >> 36));\r\n}\r\n\r\n/**\r\n * @brief  Q7 bilinear interpolation.\r\n * @param[in,out] S  points to an instance of the interpolation structure.\r\n * @param[in]     X  interpolation coordinate in 12.20 format.\r\n * @param[in]     Y  interpolation coordinate in 12.20 format.\r\n * @return out interpolated value.\r\n */\r\nstatic __INLINE q7_t arm_bilinear_interp_q7(arm_bilinear_interp_instance_q7 *S, q31_t X, q31_t Y) {\r\n  q63_t    acc = 0;             /* output */\r\n  q31_t    out;                 /* Temporary output */\r\n  q31_t    xfract, yfract;      /* X, Y fractional parts */\r\n  q7_t     x1, x2, y1, y2;      /* Nearest output values */\r\n  int32_t  rI, cI;              /* Row and column indices */\r\n  q7_t *   pYData = S->pData;   /* pointer to output table values */\r\n  uint32_t nCols  = S->numCols; /* num of rows */\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  rI = ((X & (q31_t)0xFFF00000) >> 20);\r\n\r\n  /* Input is in 12.20 format */\r\n  /* 12 bits for the table index */\r\n  /* Index value calculation */\r\n  cI = ((Y & (q31_t)0xFFF00000) >> 20);\r\n\r\n  /* Care taken for table outside boundary */\r\n  /* Returns zero output when values are outside table boundary */\r\n  if (rI < 0 || rI > (S->numRows - 1) || cI < 0 || cI > (S->numCols - 1)) {\r\n    return (0);\r\n  }\r\n\r\n  /* 20 bits for the fractional part */\r\n  /* xfract should be in 12.20 format */\r\n  xfract = (X & (q31_t)0x000FFFFF);\r\n\r\n  /* Read two nearest output values from the index */\r\n  x1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI)];\r\n  x2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI) + 1];\r\n\r\n  /* 20 bits for the fractional part */\r\n  /* yfract should be in 12.20 format */\r\n  yfract = (Y & (q31_t)0x000FFFFF);\r\n\r\n  /* Read two nearest output values from the index */\r\n  y1 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1)];\r\n  y2 = pYData[((uint32_t)rI) + nCols * ((uint32_t)cI + 1) + 1];\r\n\r\n  /* Calculation of x1 * (1-xfract ) * (1-yfract) and acc is in 16.47 format */\r\n  out = ((x1 * (0xFFFFF - xfract)));\r\n  acc = (((q63_t)out * (0xFFFFF - yfract)));\r\n\r\n  /* x2 * (xfract) * (1-yfract)  in 2.22 and adding to acc */\r\n  out = ((x2 * (0xFFFFF - yfract)));\r\n  acc += (((q63_t)out * (xfract)));\r\n\r\n  /* y1 * (1 - xfract) * (yfract)  in 2.22 and adding to acc */\r\n  out = ((y1 * (0xFFFFF - xfract)));\r\n  acc += (((q63_t)out * (yfract)));\r\n\r\n  /* y2 * (xfract) * (yfract)  in 2.22 and adding to acc */\r\n  out = ((y2 * (yfract)));\r\n  acc += (((q63_t)out * (xfract)));\r\n\r\n  /* acc in 16.47 format and down shift by 40 to convert to 1.7 format */\r\n  return ((q7_t)(acc >> 40));\r\n}\r\n\r\n/**\r\n * @} end of BilinearInterpolate group\r\n */\r\n\r\n/* SMMLAR */\r\n#define multAcc_32x32_keep32_R(a, x, y) a = (q31_t)(((((q63_t)a) << 32) + ((q63_t)x * y) + 0x80000000LL) >> 32)\r\n\r\n/* SMMLSR */\r\n#define multSub_32x32_keep32_R(a, x, y) a = (q31_t)(((((q63_t)a) << 32) - ((q63_t)x * y) + 0x80000000LL) >> 32)\r\n\r\n/* SMMULR */\r\n#define mult_32x32_keep32_R(a, x, y) a = (q31_t)(((q63_t)x * y + 0x80000000LL) >> 32)\r\n\r\n/* SMMLA */\r\n#define multAcc_32x32_keep32(a, x, y) a += (q31_t)(((q63_t)x * y) >> 32)\r\n\r\n/* SMMLS */\r\n#define multSub_32x32_keep32(a, x, y) a -= (q31_t)(((q63_t)x * y) >> 32)\r\n\r\n/* SMMUL */\r\n#define mult_32x32_keep32(a, x, y) a = (q31_t)(((q63_t)x * y) >> 32)\r\n\r\n#if defined(__CC_ARM)\r\n/* Enter low optimization region - place directly above function definition */\r\n#if defined(ARM_MATH_CM4) || defined(ARM_MATH_CM7)\r\n#define LOW_OPTIMIZATION_ENTER _Pragma(\"push\") _Pragma(\"O1\")\r\n#else\r\n#define LOW_OPTIMIZATION_ENTER\r\n#endif\r\n\r\n/* Exit low optimization region - place directly after end of function definition */\r\n#if defined(ARM_MATH_CM4) || defined(ARM_MATH_CM7)\r\n#define LOW_OPTIMIZATION_EXIT _Pragma(\"pop\")\r\n#else\r\n#define LOW_OPTIMIZATION_EXIT\r\n#endif\r\n\r\n/* Enter low optimization region - place directly above function definition */\r\n#define IAR_ONLY_LOW_OPTIMIZATION_ENTER\r\n\r\n/* Exit low optimization region - place directly after end of function definition */\r\n#define IAR_ONLY_LOW_OPTIMIZATION_EXIT\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define LOW_OPTIMIZATION_ENTER\r\n#define LOW_OPTIMIZATION_EXIT\r\n#define IAR_ONLY_LOW_OPTIMIZATION_ENTER\r\n#define IAR_ONLY_LOW_OPTIMIZATION_EXIT\r\n\r\n#elif defined(__GNUC__)\r\n#define LOW_OPTIMIZATION_ENTER __attribute__((optimize(\"-O1\")))\r\n#define LOW_OPTIMIZATION_EXIT\r\n#define IAR_ONLY_LOW_OPTIMIZATION_ENTER\r\n#define IAR_ONLY_LOW_OPTIMIZATION_EXIT\r\n\r\n#elif defined(__ICCARM__)\r\n/* Enter low optimization region - place directly above function definition */\r\n#if defined(ARM_MATH_CM4) || defined(ARM_MATH_CM7)\r\n#define LOW_OPTIMIZATION_ENTER _Pragma(\"optimize=low\")\r\n#else\r\n#define LOW_OPTIMIZATION_ENTER\r\n#endif\r\n\r\n/* Exit low optimization region - place directly after end of function definition */\r\n#define LOW_OPTIMIZATION_EXIT\r\n\r\n/* Enter low optimization region - place directly above function definition */\r\n#if defined(ARM_MATH_CM4) || defined(ARM_MATH_CM7)\r\n#define IAR_ONLY_LOW_OPTIMIZATION_ENTER _Pragma(\"optimize=low\")\r\n#else\r\n#define IAR_ONLY_LOW_OPTIMIZATION_ENTER\r\n#endif\r\n\r\n/* Exit low optimization region - place directly after end of function definition */\r\n#define IAR_ONLY_LOW_OPTIMIZATION_EXIT\r\n\r\n#elif defined(__CSMC__)\r\n#define LOW_OPTIMIZATION_ENTER\r\n#define LOW_OPTIMIZATION_EXIT\r\n#define IAR_ONLY_LOW_OPTIMIZATION_ENTER\r\n#define IAR_ONLY_LOW_OPTIMIZATION_EXIT\r\n\r\n#elif defined(__TASKING__)\r\n#define LOW_OPTIMIZATION_ENTER\r\n#define LOW_OPTIMIZATION_EXIT\r\n#define IAR_ONLY_LOW_OPTIMIZATION_ENTER\r\n#define IAR_ONLY_LOW_OPTIMIZATION_EXIT\r\n\r\n#endif\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#if defined(__GNUC__)\r\n#pragma GCC diagnostic pop\r\n#endif\r\n\r\n#endif /* _ARM_MATH_H */\r\n\r\n/**\r\n *\r\n * End of file.\r\n */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Include/cmsis_armcc.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     cmsis_armcc.h\r\n                                                                              * @brief    CMSIS Cortex-M Core Function/Instruction Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#ifndef __CMSIS_ARMCC_H\r\n#define __CMSIS_ARMCC_H\r\n\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 400677)\r\n#error \"Please use ARM Compiler Toolchain V4.0.677 or later!\"\r\n#endif\r\n\r\n/* ###########################  Core Function Access  ########################### */\r\n/** \\ingroup  CMSIS_Core_FunctionInterface\r\n    \\defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions\r\n  @{\r\n */\r\n\r\n/* intrinsic void __enable_irq();     */\r\n/* intrinsic void __disable_irq();    */\r\n\r\n/**\r\n  \\brief   Get Control Register\r\n  \\details Returns the content of the Control Register.\r\n  \\return               Control Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_CONTROL(void) {\r\n  register uint32_t __regControl __ASM(\"control\");\r\n  return (__regControl);\r\n}\r\n\r\n/**\r\n  \\brief   Set Control Register\r\n  \\details Writes the given value to the Control Register.\r\n  \\param [in]    control  Control Register value to set\r\n */\r\n__STATIC_INLINE void __set_CONTROL(uint32_t control) {\r\n  register uint32_t __regControl __ASM(\"control\");\r\n  __regControl = control;\r\n}\r\n\r\n/**\r\n  \\brief   Get IPSR Register\r\n  \\details Returns the content of the IPSR Register.\r\n  \\return               IPSR Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_IPSR(void) {\r\n  register uint32_t __regIPSR __ASM(\"ipsr\");\r\n  return (__regIPSR);\r\n}\r\n\r\n/**\r\n  \\brief   Get APSR Register\r\n  \\details Returns the content of the APSR Register.\r\n  \\return               APSR Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_APSR(void) {\r\n  register uint32_t __regAPSR __ASM(\"apsr\");\r\n  return (__regAPSR);\r\n}\r\n\r\n/**\r\n  \\brief   Get xPSR Register\r\n  \\details Returns the content of the xPSR Register.\r\n  \\return               xPSR Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_xPSR(void) {\r\n  register uint32_t __regXPSR __ASM(\"xpsr\");\r\n  return (__regXPSR);\r\n}\r\n\r\n/**\r\n  \\brief   Get Process Stack Pointer\r\n  \\details Returns the current value of the Process Stack Pointer (PSP).\r\n  \\return               PSP Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_PSP(void) {\r\n  register uint32_t __regProcessStackPointer __ASM(\"psp\");\r\n  return (__regProcessStackPointer);\r\n}\r\n\r\n/**\r\n  \\brief   Set Process Stack Pointer\r\n  \\details Assigns the given value to the Process Stack Pointer (PSP).\r\n  \\param [in]    topOfProcStack  Process Stack Pointer value to set\r\n */\r\n__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) {\r\n  register uint32_t __regProcessStackPointer __ASM(\"psp\");\r\n  __regProcessStackPointer = topOfProcStack;\r\n}\r\n\r\n/**\r\n  \\brief   Get Main Stack Pointer\r\n  \\details Returns the current value of the Main Stack Pointer (MSP).\r\n  \\return               MSP Register value\r\n */\r\n__STATIC_INLINE uint32_t __get_MSP(void) {\r\n  register uint32_t __regMainStackPointer __ASM(\"msp\");\r\n  return (__regMainStackPointer);\r\n}\r\n\r\n/**\r\n  \\brief   Set Main Stack Pointer\r\n  \\details Assigns the given value to the Main Stack Pointer (MSP).\r\n  \\param [in]    topOfMainStack  Main Stack Pointer value to set\r\n */\r\n__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) {\r\n  register uint32_t __regMainStackPointer __ASM(\"msp\");\r\n  __regMainStackPointer = topOfMainStack;\r\n}\r\n\r\n/**\r\n  \\brief   Get Priority Mask\r\n  \\details Returns the current state of the priority mask bit from the Priority Mask Register.\r\n  \\return               Priority Mask value\r\n */\r\n__STATIC_INLINE uint32_t __get_PRIMASK(void) {\r\n  register uint32_t __regPriMask __ASM(\"primask\");\r\n  return (__regPriMask);\r\n}\r\n\r\n/**\r\n  \\brief   Set Priority Mask\r\n  \\details Assigns the given value to the Priority Mask Register.\r\n  \\param [in]    priMask  Priority Mask\r\n */\r\n__STATIC_INLINE void __set_PRIMASK(uint32_t priMask) {\r\n  register uint32_t __regPriMask __ASM(\"primask\");\r\n  __regPriMask = (priMask);\r\n}\r\n\r\n#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U)\r\n\r\n/**\r\n  \\brief   Enable FIQ\r\n  \\details Enables FIQ interrupts by clearing the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n#define __enable_fault_irq __enable_fiq\r\n\r\n/**\r\n  \\brief   Disable FIQ\r\n  \\details Disables FIQ interrupts by setting the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n#define __disable_fault_irq __disable_fiq\r\n\r\n/**\r\n  \\brief   Get Base Priority\r\n  \\details Returns the current value of the Base Priority register.\r\n  \\return               Base Priority register value\r\n */\r\n__STATIC_INLINE uint32_t __get_BASEPRI(void) {\r\n  register uint32_t __regBasePri __ASM(\"basepri\");\r\n  return (__regBasePri);\r\n}\r\n\r\n/**\r\n  \\brief   Set Base Priority\r\n  \\details Assigns the given value to the Base Priority register.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__STATIC_INLINE void __set_BASEPRI(uint32_t basePri) {\r\n  register uint32_t __regBasePri __ASM(\"basepri\");\r\n  __regBasePri = (basePri & 0xFFU);\r\n}\r\n\r\n/**\r\n  \\brief   Set Base Priority with condition\r\n  \\details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled,\r\n           or the new value increases the BASEPRI priority level.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__STATIC_INLINE void __set_BASEPRI_MAX(uint32_t basePri) {\r\n  register uint32_t __regBasePriMax __ASM(\"basepri_max\");\r\n  __regBasePriMax = (basePri & 0xFFU);\r\n}\r\n\r\n/**\r\n  \\brief   Get Fault Mask\r\n  \\details Returns the current value of the Fault Mask register.\r\n  \\return               Fault Mask register value\r\n */\r\n__STATIC_INLINE uint32_t __get_FAULTMASK(void) {\r\n  register uint32_t __regFaultMask __ASM(\"faultmask\");\r\n  return (__regFaultMask);\r\n}\r\n\r\n/**\r\n  \\brief   Set Fault Mask\r\n  \\details Assigns the given value to the Fault Mask register.\r\n  \\param [in]    faultMask  Fault Mask value to set\r\n */\r\n__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) {\r\n  register uint32_t __regFaultMask __ASM(\"faultmask\");\r\n  __regFaultMask = (faultMask & (uint32_t)1);\r\n}\r\n\r\n#endif /* (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U) */\r\n\r\n#if (__CORTEX_M == 0x04U) || (__CORTEX_M == 0x07U)\r\n\r\n/**\r\n  \\brief   Get FPSCR\r\n  \\details Returns the current value of the Floating Point Status/Control register.\r\n  \\return               Floating Point Status/Control register value\r\n */\r\n__STATIC_INLINE uint32_t __get_FPSCR(void) {\r\n#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)\r\n  register uint32_t __regfpscr __ASM(\"fpscr\");\r\n  return (__regfpscr);\r\n#else\r\n  return (0U);\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Set FPSCR\r\n  \\details Assigns the given value to the Floating Point Status/Control register.\r\n  \\param [in]    fpscr  Floating Point Status/Control value to set\r\n */\r\n__STATIC_INLINE void __set_FPSCR(uint32_t fpscr) {\r\n#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)\r\n  register uint32_t __regfpscr __ASM(\"fpscr\");\r\n  __regfpscr = (fpscr);\r\n#endif\r\n}\r\n\r\n#endif /* (__CORTEX_M == 0x04U) || (__CORTEX_M == 0x07U) */\r\n\r\n/*@} end of CMSIS_Core_RegAccFunctions */\r\n\r\n/* ##########################  Core Instruction Access  ######################### */\r\n/** \\defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface\r\n  Access to dedicated instructions\r\n  @{\r\n*/\r\n\r\n/**\r\n  \\brief   No Operation\r\n  \\details No Operation does nothing. This instruction can be used for code alignment purposes.\r\n */\r\n#define __NOP __nop\r\n\r\n/**\r\n  \\brief   Wait For Interrupt\r\n  \\details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.\r\n */\r\n#define __WFI __wfi\r\n\r\n/**\r\n  \\brief   Wait For Event\r\n  \\details Wait For Event is a hint instruction that permits the processor to enter\r\n           a low-power state until one of a number of events occurs.\r\n */\r\n#define __WFE __wfe\r\n\r\n/**\r\n  \\brief   Send Event\r\n  \\details Send Event is a hint instruction. It causes an event to be signaled to the CPU.\r\n */\r\n#define __SEV __sev\r\n\r\n/**\r\n  \\brief   Instruction Synchronization Barrier\r\n  \\details Instruction Synchronization Barrier flushes the pipeline in the processor,\r\n           so that all instructions following the ISB are fetched from cache or memory,\r\n           after the instruction has been completed.\r\n */\r\n#define __ISB()           \\\r\n  do {                    \\\r\n    __schedule_barrier(); \\\r\n    __isb(0xF);           \\\r\n    __schedule_barrier(); \\\r\n  } while (0U)\r\n\r\n/**\r\n  \\brief   Data Synchronization Barrier\r\n  \\details Acts as a special kind of Data Memory Barrier.\r\n           It completes when all explicit memory accesses before this instruction complete.\r\n */\r\n#define __DSB()           \\\r\n  do {                    \\\r\n    __schedule_barrier(); \\\r\n    __dsb(0xF);           \\\r\n    __schedule_barrier(); \\\r\n  } while (0U)\r\n\r\n/**\r\n  \\brief   Data Memory Barrier\r\n  \\details Ensures the apparent order of the explicit memory operations before\r\n           and after the instruction, without ensuring their completion.\r\n */\r\n#define __DMB()           \\\r\n  do {                    \\\r\n    __schedule_barrier(); \\\r\n    __dmb(0xF);           \\\r\n    __schedule_barrier(); \\\r\n  } while (0U)\r\n\r\n/**\r\n  \\brief   Reverse byte order (32 bit)\r\n  \\details Reverses the byte order in integer value.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#define __REV __rev\r\n\r\n/**\r\n  \\brief   Reverse byte order (16 bit)\r\n  \\details Reverses the byte order in two unsigned short values.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#ifndef __NO_EMBEDDED_ASM\r\n__attribute__((section(\".rev16_text\"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value) { rev16 r0, r0 bx lr }\r\n#endif\r\n\r\n/**\r\n  \\brief   Reverse byte order in signed short value\r\n  \\details Reverses the byte order in a signed short value with sign extension to integer.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#ifndef __NO_EMBEDDED_ASM\r\n__attribute__((section(\".revsh_text\"))) __STATIC_INLINE __ASM int32_t __REVSH(int32_t value) { revsh r0, r0 bx lr }\r\n#endif\r\n\r\n/**\r\n  \\brief   Rotate Right in unsigned value (32 bit)\r\n  \\details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.\r\n  \\param [in]    value  Value to rotate\r\n  \\param [in]    value  Number of Bits to rotate\r\n  \\return               Rotated value\r\n */\r\n#define __ROR __ror\r\n\r\n/**\r\n  \\brief   Breakpoint\r\n  \\details Causes the processor to enter Debug state.\r\n           Debug tools can use this to investigate system state when the instruction at a particular address is reached.\r\n  \\param [in]    value  is ignored by the processor.\r\n                 If required, a debugger can use it to store additional information about the breakpoint.\r\n */\r\n#define __BKPT(value) __breakpoint(value)\r\n\r\n/**\r\n  \\brief   Reverse bit order of value\r\n  \\details Reverses the bit order of the given value.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U)\r\n#define __RBIT __rbit\r\n#else\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) {\r\n  uint32_t result;\r\n  int32_t  s = 4 /*sizeof(v)*/ * 8 - 1; /* extra shift needed at end */\r\n\r\n  result = value; /* r will be reversed bits of v; first get LSB of v */\r\n  for (value >>= 1U; value; value >>= 1U) {\r\n    result <<= 1U;\r\n    result |= value & 1U;\r\n    s--;\r\n  }\r\n  result <<= s; /* shift when v's highest bits are zero */\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Count leading zeros\r\n  \\details Counts the number of leading zeros of a data value.\r\n  \\param [in]  value  Value to count the leading zeros\r\n  \\return             number of leading zeros in value\r\n */\r\n#define __CLZ __clz\r\n\r\n#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U)\r\n\r\n/**\r\n  \\brief   LDR Exclusive (8 bit)\r\n  \\details Executes a exclusive LDR instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __LDREXB(ptr) ((uint8_t)__ldrex(ptr))\r\n#else\r\n#define __LDREXB(ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\")((uint8_t)__ldrex(ptr)) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   LDR Exclusive (16 bit)\r\n  \\details Executes a exclusive LDR instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __LDREXH(ptr) ((uint16_t)__ldrex(ptr))\r\n#else\r\n#define __LDREXH(ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\")((uint16_t)__ldrex(ptr)) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   LDR Exclusive (32 bit)\r\n  \\details Executes a exclusive LDR instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __LDREXW(ptr) ((uint32_t)__ldrex(ptr))\r\n#else\r\n#define __LDREXW(ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\")((uint32_t)__ldrex(ptr)) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   STR Exclusive (8 bit)\r\n  \\details Executes a exclusive STR instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __STREXB(value, ptr) __strex(value, ptr)\r\n#else\r\n#define __STREXB(value, ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\") __strex(value, ptr) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   STR Exclusive (16 bit)\r\n  \\details Executes a exclusive STR instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __STREXH(value, ptr) __strex(value, ptr)\r\n#else\r\n#define __STREXH(value, ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\") __strex(value, ptr) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   STR Exclusive (32 bit)\r\n  \\details Executes a exclusive STR instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)\r\n#define __STREXW(value, ptr) __strex(value, ptr)\r\n#else\r\n#define __STREXW(value, ptr) _Pragma(\"push\") _Pragma(\"diag_suppress 3731\") __strex(value, ptr) _Pragma(\"pop\")\r\n#endif\r\n\r\n/**\r\n  \\brief   Remove the exclusive lock\r\n  \\details Removes the exclusive lock which is created by LDREX.\r\n */\r\n#define __CLREX __clrex\r\n\r\n/**\r\n  \\brief   Signed Saturate\r\n  \\details Saturates a signed value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (1..32)\r\n  \\return             Saturated value\r\n */\r\n#define __SSAT __ssat\r\n\r\n/**\r\n  \\brief   Unsigned Saturate\r\n  \\details Saturates an unsigned value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (0..31)\r\n  \\return             Saturated value\r\n */\r\n#define __USAT __usat\r\n\r\n/**\r\n  \\brief   Rotate Right with Extend (32 bit)\r\n  \\details Moves each bit of a bitstring right by one bit.\r\n           The carry input is shifted in at the left end of the bitstring.\r\n  \\param [in]    value  Value to rotate\r\n  \\return               Rotated value\r\n */\r\n#ifndef __NO_EMBEDDED_ASM\r\n__attribute__((section(\".rrx_text\"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value) { rrx r0, r0 bx lr }\r\n#endif\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n#define __LDRBT(ptr) ((uint8_t)__ldrt(ptr))\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n#define __LDRHT(ptr) ((uint16_t)__ldrt(ptr))\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n#define __LDRT(ptr) ((uint32_t)__ldrt(ptr))\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n#define __STRBT(value, ptr) __strt(value, ptr)\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n#define __STRHT(value, ptr) __strt(value, ptr)\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n#define __STRT(value, ptr) __strt(value, ptr)\r\n\r\n#endif /* (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U) */\r\n\r\n/*@}*/ /* end of group CMSIS_Core_InstructionInterface */\r\n\r\n/* ###################  Compiler specific Intrinsics  ########################### */\r\n/** \\defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics\r\n  Access to dedicated SIMD instructions\r\n  @{\r\n*/\r\n\r\n#if (__CORTEX_M >= 0x04U) /* only for Cortex-M4 and above */\r\n\r\n#define __SADD8   __sadd8\r\n#define __QADD8   __qadd8\r\n#define __SHADD8  __shadd8\r\n#define __UADD8   __uadd8\r\n#define __UQADD8  __uqadd8\r\n#define __UHADD8  __uhadd8\r\n#define __SSUB8   __ssub8\r\n#define __QSUB8   __qsub8\r\n#define __SHSUB8  __shsub8\r\n#define __USUB8   __usub8\r\n#define __UQSUB8  __uqsub8\r\n#define __UHSUB8  __uhsub8\r\n#define __SADD16  __sadd16\r\n#define __QADD16  __qadd16\r\n#define __SHADD16 __shadd16\r\n#define __UADD16  __uadd16\r\n#define __UQADD16 __uqadd16\r\n#define __UHADD16 __uhadd16\r\n#define __SSUB16  __ssub16\r\n#define __QSUB16  __qsub16\r\n#define __SHSUB16 __shsub16\r\n#define __USUB16  __usub16\r\n#define __UQSUB16 __uqsub16\r\n#define __UHSUB16 __uhsub16\r\n#define __SASX    __sasx\r\n#define __QASX    __qasx\r\n#define __SHASX   __shasx\r\n#define __UASX    __uasx\r\n#define __UQASX   __uqasx\r\n#define __UHASX   __uhasx\r\n#define __SSAX    __ssax\r\n#define __QSAX    __qsax\r\n#define __SHSAX   __shsax\r\n#define __USAX    __usax\r\n#define __UQSAX   __uqsax\r\n#define __UHSAX   __uhsax\r\n#define __USAD8   __usad8\r\n#define __USADA8  __usada8\r\n#define __SSAT16  __ssat16\r\n#define __USAT16  __usat16\r\n#define __UXTB16  __uxtb16\r\n#define __UXTAB16 __uxtab16\r\n#define __SXTB16  __sxtb16\r\n#define __SXTAB16 __sxtab16\r\n#define __SMUAD   __smuad\r\n#define __SMUADX  __smuadx\r\n#define __SMLAD   __smlad\r\n#define __SMLADX  __smladx\r\n#define __SMLALD  __smlald\r\n#define __SMLALDX __smlaldx\r\n#define __SMUSD   __smusd\r\n#define __SMUSDX  __smusdx\r\n#define __SMLSD   __smlsd\r\n#define __SMLSDX  __smlsdx\r\n#define __SMLSLD  __smlsld\r\n#define __SMLSLDX __smlsldx\r\n#define __SEL     __sel\r\n#define __QADD    __qadd\r\n#define __QSUB    __qsub\r\n\r\n#define __PKHBT(ARG1, ARG2, ARG3) (((((uint32_t)(ARG1))) & 0x0000FFFFUL) | ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL))\r\n\r\n#define __PKHTB(ARG1, ARG2, ARG3) (((((uint32_t)(ARG1))) & 0xFFFF0000UL) | ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL))\r\n\r\n#define __SMMLA(ARG1, ARG2, ARG3) ((int32_t)((((int64_t)(ARG1) * (ARG2)) + ((int64_t)(ARG3) << 32U)) >> 32U))\r\n\r\n#endif /* (__CORTEX_M >= 0x04) */\r\n/*@} end of group CMSIS_SIMD_intrinsics */\r\n\r\n#endif /* __CMSIS_ARMCC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Include/cmsis_armcc_V6.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     cmsis_armcc_V6.h\r\n                                                                              * @brief    CMSIS Cortex-M Core Function/Instruction Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#ifndef __CMSIS_ARMCC_V6_H\r\n#define __CMSIS_ARMCC_V6_H\r\n\r\n/* ###########################  Core Function Access  ########################### */\r\n/** \\ingroup  CMSIS_Core_FunctionInterface\r\n    \\defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Enable IRQ Interrupts\r\n  \\details Enables IRQ interrupts by clearing the I-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __enable_irq(void) { __ASM volatile(\"cpsie i\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Disable IRQ Interrupts\r\n  \\details Disables IRQ interrupts by setting the I-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __disable_irq(void) { __ASM volatile(\"cpsid i\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Get Control Register\r\n  \\details Returns the content of the Control Register.\r\n  \\return               Control Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_CONTROL(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, control\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get Control Register (non-secure)\r\n  \\details Returns the content of the non-secure Control Register when in secure mode.\r\n  \\return               non-secure Control Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_CONTROL_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, control_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Control Register\r\n  \\details Writes the given value to the Control Register.\r\n  \\param [in]    control  Control Register value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_CONTROL(uint32_t control) { __ASM volatile(\"MSR control, %0\" : : \"r\"(control) : \"memory\"); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Set Control Register (non-secure)\r\n  \\details Writes the given value to the non-secure Control Register when in secure state.\r\n  \\param [in]    control  Control Register value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_CONTROL_NS(uint32_t control) { __ASM volatile(\"MSR control_ns, %0\" : : \"r\"(control) : \"memory\"); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Get IPSR Register\r\n  \\details Returns the content of the IPSR Register.\r\n  \\return               IPSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_IPSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, ipsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get IPSR Register (non-secure)\r\n  \\details Returns the content of the non-secure IPSR Register when in secure state.\r\n  \\return               IPSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_IPSR_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, ipsr_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Get APSR Register\r\n  \\details Returns the content of the APSR Register.\r\n  \\return               APSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_APSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, apsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get APSR Register (non-secure)\r\n  \\details Returns the content of the non-secure APSR Register when in secure state.\r\n  \\return               APSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_APSR_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, apsr_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Get xPSR Register\r\n  \\details Returns the content of the xPSR Register.\r\n  \\return               xPSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_xPSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, xpsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get xPSR Register (non-secure)\r\n  \\details Returns the content of the non-secure xPSR Register when in secure state.\r\n  \\return               xPSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_xPSR_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, xpsr_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Get Process Stack Pointer\r\n  \\details Returns the current value of the Process Stack Pointer (PSP).\r\n  \\return               PSP Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_PSP(void) {\r\n  register uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, psp\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get Process Stack Pointer (non-secure)\r\n  \\details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state.\r\n  \\return               PSP Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_PSP_NS(void) {\r\n  register uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, psp_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Process Stack Pointer\r\n  \\details Assigns the given value to the Process Stack Pointer (PSP).\r\n  \\param [in]    topOfProcStack  Process Stack Pointer value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) { __ASM volatile(\"MSR psp, %0\" : : \"r\"(topOfProcStack) : \"sp\"); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Set Process Stack Pointer (non-secure)\r\n  \\details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state.\r\n  \\param [in]    topOfProcStack  Process Stack Pointer value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) { __ASM volatile(\"MSR psp_ns, %0\" : : \"r\"(topOfProcStack) : \"sp\"); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Get Main Stack Pointer\r\n  \\details Returns the current value of the Main Stack Pointer (MSP).\r\n  \\return               MSP Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_MSP(void) {\r\n  register uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, msp\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get Main Stack Pointer (non-secure)\r\n  \\details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state.\r\n  \\return               MSP Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_MSP_NS(void) {\r\n  register uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, msp_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Main Stack Pointer\r\n  \\details Assigns the given value to the Main Stack Pointer (MSP).\r\n  \\param [in]    topOfMainStack  Main Stack Pointer value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) { __ASM volatile(\"MSR msp, %0\" : : \"r\"(topOfMainStack) : \"sp\"); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Set Main Stack Pointer (non-secure)\r\n  \\details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state.\r\n  \\param [in]    topOfMainStack  Main Stack Pointer value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) { __ASM volatile(\"MSR msp_ns, %0\" : : \"r\"(topOfMainStack) : \"sp\"); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Get Priority Mask\r\n  \\details Returns the current state of the priority mask bit from the Priority Mask Register.\r\n  \\return               Priority Mask value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_PRIMASK(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, primask\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get Priority Mask (non-secure)\r\n  \\details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state.\r\n  \\return               Priority Mask value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_PRIMASK_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, primask_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Priority Mask\r\n  \\details Assigns the given value to the Priority Mask Register.\r\n  \\param [in]    priMask  Priority Mask\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask) { __ASM volatile(\"MSR primask, %0\" : : \"r\"(priMask) : \"memory\"); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Set Priority Mask (non-secure)\r\n  \\details Assigns the given value to the non-secure Priority Mask Register when in secure state.\r\n  \\param [in]    priMask  Priority Mask\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) { __ASM volatile(\"MSR primask_ns, %0\" : : \"r\"(priMask) : \"memory\"); }\r\n#endif\r\n\r\n#if ((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) /* ToDo:  ARMCC_V6: check if this is ok for cortex >=3 */\r\n\r\n/**\r\n  \\brief   Enable FIQ\r\n  \\details Enables FIQ interrupts by clearing the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __enable_fault_irq(void) { __ASM volatile(\"cpsie f\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Disable FIQ\r\n  \\details Disables FIQ interrupts by setting the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __disable_fault_irq(void) { __ASM volatile(\"cpsid f\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Get Base Priority\r\n  \\details Returns the current value of the Base Priority register.\r\n  \\return               Base Priority register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_BASEPRI(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, basepri\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get Base Priority (non-secure)\r\n  \\details Returns the current value of the non-secure Base Priority register when in secure state.\r\n  \\return               Base Priority register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_BASEPRI_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, basepri_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Base Priority\r\n  \\details Assigns the given value to the Base Priority register.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_BASEPRI(uint32_t value) { __ASM volatile(\"MSR basepri, %0\" : : \"r\"(value) : \"memory\"); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Set Base Priority (non-secure)\r\n  \\details Assigns the given value to the non-secure Base Priority register when in secure state.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_BASEPRI_NS(uint32_t value) { __ASM volatile(\"MSR basepri_ns, %0\" : : \"r\"(value) : \"memory\"); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Base Priority with condition\r\n  \\details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled,\r\n           or the new value increases the BASEPRI priority level.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_BASEPRI_MAX(uint32_t value) { __ASM volatile(\"MSR basepri_max, %0\" : : \"r\"(value) : \"memory\"); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Set Base Priority with condition (non_secure)\r\n  \\details Assigns the given value to the non-secure Base Priority register when in secure state only if BASEPRI masking is disabled,\r\n               or the new value increases the BASEPRI priority level.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_BASEPRI_MAX_NS(uint32_t value) { __ASM volatile(\"MSR basepri_max_ns, %0\" : : \"r\"(value) : \"memory\"); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Get Fault Mask\r\n  \\details Returns the current value of the Fault Mask register.\r\n  \\return               Fault Mask register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_FAULTMASK(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, faultmask\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get Fault Mask (non-secure)\r\n  \\details Returns the current value of the non-secure Fault Mask register when in secure state.\r\n  \\return               Fault Mask register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_FAULTMASK_NS(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, faultmask_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Fault Mask\r\n  \\details Assigns the given value to the Fault Mask register.\r\n  \\param [in]    faultMask  Fault Mask value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) { __ASM volatile(\"MSR faultmask, %0\" : : \"r\"(faultMask) : \"memory\"); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Set Fault Mask (non-secure)\r\n  \\details Assigns the given value to the non-secure Fault Mask register when in secure state.\r\n  \\param [in]    faultMask  Fault Mask value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) { __ASM volatile(\"MSR faultmask_ns, %0\" : : \"r\"(faultMask) : \"memory\"); }\r\n#endif\r\n\r\n#endif /* ((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_8M__ == 1U)) */\r\n\r\n#if (__ARM_ARCH_8M__ == 1U)\r\n\r\n/**\r\n  \\brief   Get Process Stack Pointer Limit\r\n  \\details Returns the current value of the Process Stack Pointer Limit (PSPLIM).\r\n  \\return               PSPLIM Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_PSPLIM(void) {\r\n  register uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, psplim\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U) && (__ARM_ARCH_PROFILE == 'M') /* ToDo:  ARMCC_V6: check predefined macro for mainline */\r\n/**\r\n  \\brief   Get Process Stack Pointer Limit (non-secure)\r\n  \\details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state.\r\n  \\return               PSPLIM Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_PSPLIM_NS(void) {\r\n  register uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, psplim_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Process Stack Pointer Limit\r\n  \\details Assigns the given value to the Process Stack Pointer Limit (PSPLIM).\r\n  \\param [in]    ProcStackPtrLimit  Process Stack Pointer Limit value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) { __ASM volatile(\"MSR psplim, %0\" : : \"r\"(ProcStackPtrLimit)); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U) && (__ARM_ARCH_PROFILE == 'M') /* ToDo:  ARMCC_V6: check predefined macro for mainline */\r\n/**\r\n  \\brief   Set Process Stack Pointer (non-secure)\r\n  \\details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state.\r\n  \\param [in]    ProcStackPtrLimit  Process Stack Pointer Limit value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) { __ASM volatile(\"MSR psplim_ns, %0\\n\" : : \"r\"(ProcStackPtrLimit)); }\r\n#endif\r\n\r\n/**\r\n  \\brief   Get Main Stack Pointer Limit\r\n  \\details Returns the current value of the Main Stack Pointer Limit (MSPLIM).\r\n  \\return               MSPLIM Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_MSPLIM(void) {\r\n  register uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, msplim\" : \"=r\"(result));\r\n\r\n  return (result);\r\n}\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U) && (__ARM_ARCH_PROFILE == 'M') /* ToDo:  ARMCC_V6: check predefined macro for mainline */\r\n/**\r\n  \\brief   Get Main Stack Pointer Limit (non-secure)\r\n  \\details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state.\r\n  \\return               MSPLIM Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_MSPLIM_NS(void) {\r\n  register uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, msplim_ns\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set Main Stack Pointer Limit\r\n  \\details Assigns the given value to the Main Stack Pointer Limit (MSPLIM).\r\n  \\param [in]    MainStackPtrLimit  Main Stack Pointer Limit value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) { __ASM volatile(\"MSR msplim, %0\" : : \"r\"(MainStackPtrLimit)); }\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U) && (__ARM_ARCH_PROFILE == 'M') /* ToDo:  ARMCC_V6: check predefined macro for mainline */\r\n/**\r\n  \\brief   Set Main Stack Pointer Limit (non-secure)\r\n  \\details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state.\r\n  \\param [in]    MainStackPtrLimit  Main Stack Pointer value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) { __ASM volatile(\"MSR msplim_ns, %0\" : : \"r\"(MainStackPtrLimit)); }\r\n#endif\r\n\r\n#endif /* (__ARM_ARCH_8M__ == 1U) */\r\n\r\n#if ((__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) /* ToDo:  ARMCC_V6: check if this is ok for cortex >=4 */\r\n\r\n/**\r\n  \\brief   Get FPSCR\r\n  \\details eturns the current value of the Floating Point Status/Control register.\r\n  \\return               Floating Point Status/Control register value\r\n */\r\n#define __get_FPSCR __builtin_arm_get_fpscr\r\n#if 0\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_FPSCR(void)\r\n{\r\n#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)\r\n  uint32_t result;\r\n\r\n  __ASM volatile (\"\");                                 /* Empty asm statement works as a scheduling barrier */\r\n  __ASM volatile (\"VMRS %0, fpscr\" : \"=r\" (result) );\r\n  __ASM volatile (\"\");\r\n  return(result);\r\n#else\r\n   return(0);\r\n#endif\r\n}\r\n#endif\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Get FPSCR (non-secure)\r\n  \\details Returns the current value of the non-secure Floating Point Status/Control register when in secure state.\r\n  \\return               Floating Point Status/Control register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_FPSCR_NS(void) {\r\n#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"\"); /* Empty asm statement works as a scheduling barrier */\r\n  __ASM volatile(\"VMRS %0, fpscr_ns\" : \"=r\"(result));\r\n  __ASM volatile(\"\");\r\n  return (result);\r\n#else\r\n  return (0);\r\n#endif\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Set FPSCR\r\n  \\details Assigns the given value to the Floating Point Status/Control register.\r\n  \\param [in]    fpscr  Floating Point Status/Control value to set\r\n */\r\n#define __set_FPSCR __builtin_arm_set_fpscr\r\n#if 0\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr)\r\n{\r\n#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)\r\n  __ASM volatile (\"\");                                 /* Empty asm statement works as a scheduling barrier */\r\n  __ASM volatile (\"VMSR fpscr, %0\" : : \"r\" (fpscr) : \"vfpcc\");\r\n  __ASM volatile (\"\");\r\n#endif\r\n}\r\n#endif\r\n\r\n#if (__ARM_FEATURE_CMSE == 3U)\r\n/**\r\n  \\brief   Set FPSCR (non-secure)\r\n  \\details Assigns the given value to the non-secure Floating Point Status/Control register when in secure state.\r\n  \\param [in]    fpscr  Floating Point Status/Control value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_FPSCR_NS(uint32_t fpscr) {\r\n#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)\r\n  __ASM volatile(\"\"); /* Empty asm statement works as a scheduling barrier */\r\n  __ASM volatile(\"VMSR fpscr_ns, %0\" : : \"r\"(fpscr) : \"vfpcc\");\r\n  __ASM volatile(\"\");\r\n#endif\r\n}\r\n#endif\r\n\r\n#endif /* ((__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) */\r\n\r\n/*@} end of CMSIS_Core_RegAccFunctions */\r\n\r\n/* ##########################  Core Instruction Access  ######################### */\r\n/** \\defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface\r\n  Access to dedicated instructions\r\n  @{\r\n*/\r\n\r\n/* Define macros for porting to both thumb1 and thumb2.\r\n * For thumb1, use low register (r0-r7), specified by constraint \"l\"\r\n * Otherwise, use general registers, specified by constraint \"r\" */\r\n#if defined(__thumb__) && !defined(__thumb2__)\r\n#define __CMSIS_GCC_OUT_REG(r) \"=l\"(r)\r\n#define __CMSIS_GCC_USE_REG(r) \"l\"(r)\r\n#else\r\n#define __CMSIS_GCC_OUT_REG(r) \"=r\"(r)\r\n#define __CMSIS_GCC_USE_REG(r) \"r\"(r)\r\n#endif\r\n\r\n/**\r\n  \\brief   No Operation\r\n  \\details No Operation does nothing. This instruction can be used for code alignment purposes.\r\n */\r\n#define __NOP __builtin_arm_nop\r\n\r\n/**\r\n  \\brief   Wait For Interrupt\r\n  \\details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.\r\n */\r\n#define __WFI __builtin_arm_wfi\r\n\r\n/**\r\n  \\brief   Wait For Event\r\n  \\details Wait For Event is a hint instruction that permits the processor to enter\r\n           a low-power state until one of a number of events occurs.\r\n */\r\n#define __WFE __builtin_arm_wfe\r\n\r\n/**\r\n  \\brief   Send Event\r\n  \\details Send Event is a hint instruction. It causes an event to be signaled to the CPU.\r\n */\r\n#define __SEV __builtin_arm_sev\r\n\r\n/**\r\n  \\brief   Instruction Synchronization Barrier\r\n  \\details Instruction Synchronization Barrier flushes the pipeline in the processor,\r\n           so that all instructions following the ISB are fetched from cache or memory,\r\n           after the instruction has been completed.\r\n */\r\n#define __ISB() __builtin_arm_isb(0xF);\r\n\r\n/**\r\n  \\brief   Data Synchronization Barrier\r\n  \\details Acts as a special kind of Data Memory Barrier.\r\n           It completes when all explicit memory accesses before this instruction complete.\r\n */\r\n#define __DSB() __builtin_arm_dsb(0xF);\r\n\r\n/**\r\n  \\brief   Data Memory Barrier\r\n  \\details Ensures the apparent order of the explicit memory operations before\r\n           and after the instruction, without ensuring their completion.\r\n */\r\n#define __DMB() __builtin_arm_dmb(0xF);\r\n\r\n/**\r\n  \\brief   Reverse byte order (32 bit)\r\n  \\details Reverses the byte order in integer value.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#define __REV __builtin_bswap32\r\n\r\n/**\r\n  \\brief   Reverse byte order (16 bit)\r\n  \\details Reverses the byte order in two unsigned short values.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n#define __REV16 __builtin_bswap16 /* ToDo:  ARMCC_V6: check if __builtin_bswap16 could be used */\r\n#if 0\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __REV16(uint32_t value)\r\n{\r\n  uint32_t result;\r\n\r\n  __ASM volatile (\"rev16 %0, %1\" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );\r\n  return(result);\r\n}\r\n#endif\r\n\r\n/**\r\n  \\brief   Reverse byte order in signed short value\r\n  \\details Reverses the byte order in a signed short value with sign extension to integer.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n/* ToDo:  ARMCC_V6: check if __builtin_bswap16 could be used */\r\n__attribute__((always_inline)) __STATIC_INLINE int32_t __REVSH(int32_t value) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"revsh %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Rotate Right in unsigned value (32 bit)\r\n  \\details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.\r\n  \\param [in]    op1  Value to rotate\r\n  \\param [in]    op2  Number of Bits to rotate\r\n  \\return               Rotated value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2) { return (op1 >> op2) | (op1 << (32U - op2)); }\r\n\r\n/**\r\n  \\brief   Breakpoint\r\n  \\details Causes the processor to enter Debug state.\r\n            Debug tools can use this to investigate system state when the instruction at a particular address is reached.\r\n    \\param [in]    value  is ignored by the processor.\r\n                   If required, a debugger can use it to store additional information about the breakpoint.\r\n */\r\n#define __BKPT(value) __ASM volatile(\"bkpt \" #value)\r\n\r\n/**\r\n  \\brief   Reverse bit order of value\r\n  \\details Reverses the bit order of the given value.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n/* ToDo:  ARMCC_V6: check if __builtin_arm_rbit is supported */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) {\r\n  uint32_t result;\r\n\r\n#if ((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) /* ToDo:  ARMCC_V6: check if this is ok for cortex >=3 */\r\n  __ASM volatile(\"rbit %0, %1\" : \"=r\"(result) : \"r\"(value));\r\n#else\r\n  int32_t s = 4 /*sizeof(v)*/ * 8 - 1; /* extra shift needed at end */\r\n\r\n  result = value; /* r will be reversed bits of v; first get LSB of v */\r\n  for (value >>= 1U; value; value >>= 1U) {\r\n    result <<= 1U;\r\n    result |= value & 1U;\r\n    s--;\r\n  }\r\n  result <<= s; /* shift when v's highest bits are zero */\r\n#endif\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Count leading zeros\r\n  \\details Counts the number of leading zeros of a data value.\r\n  \\param [in]  value  Value to count the leading zeros\r\n  \\return             number of leading zeros in value\r\n */\r\n#define __CLZ __builtin_clz\r\n\r\n#if ((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) /* ToDo:  ARMCC_V6: check if this is ok for cortex >=3 */\r\n\r\n/**\r\n  \\brief   LDR Exclusive (8 bit)\r\n  \\details Executes a exclusive LDR instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n#define __LDREXB (uint8_t) __builtin_arm_ldrex\r\n\r\n/**\r\n  \\brief   LDR Exclusive (16 bit)\r\n  \\details Executes a exclusive LDR instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n#define __LDREXH (uint16_t) __builtin_arm_ldrex\r\n\r\n/**\r\n  \\brief   LDR Exclusive (32 bit)\r\n  \\details Executes a exclusive LDR instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n#define __LDREXW (uint32_t) __builtin_arm_ldrex\r\n\r\n/**\r\n  \\brief   STR Exclusive (8 bit)\r\n  \\details Executes a exclusive STR instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STREXB (uint32_t) __builtin_arm_strex\r\n\r\n/**\r\n  \\brief   STR Exclusive (16 bit)\r\n  \\details Executes a exclusive STR instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STREXH (uint32_t) __builtin_arm_strex\r\n\r\n/**\r\n  \\brief   STR Exclusive (32 bit)\r\n  \\details Executes a exclusive STR instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STREXW (uint32_t) __builtin_arm_strex\r\n\r\n/**\r\n  \\brief   Remove the exclusive lock\r\n  \\details Removes the exclusive lock which is created by LDREX.\r\n */\r\n#define __CLREX __builtin_arm_clrex\r\n\r\n/**\r\n  \\brief   Signed Saturate\r\n  \\details Saturates a signed value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (1..32)\r\n  \\return             Saturated value\r\n */\r\n/*#define __SSAT             __builtin_arm_ssat*/\r\n#define __SSAT(ARG1, ARG2)                                           \\\r\n  ({                                                                 \\\r\n    int32_t __RES, __ARG1 = (ARG1);                                  \\\r\n    __ASM(\"ssat %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                           \\\r\n  })\r\n\r\n/**\r\n  \\brief   Unsigned Saturate\r\n  \\details Saturates an unsigned value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (0..31)\r\n  \\return             Saturated value\r\n */\r\n#define __USAT __builtin_arm_usat\r\n#if 0\r\n#define __USAT(ARG1, ARG2)                                           \\\r\n  ({                                                                 \\\r\n    uint32_t __RES, __ARG1 = (ARG1);                                 \\\r\n    __ASM(\"usat %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                           \\\r\n  })\r\n#endif\r\n\r\n/**\r\n  \\brief   Rotate Right with Extend (32 bit)\r\n  \\details Moves each bit of a bitstring right by one bit.\r\n           The carry input is shifted in at the left end of the bitstring.\r\n  \\param [in]    value  Value to rotate\r\n  \\return               Rotated value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __RRX(uint32_t value) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"rrx %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint8_t __LDRBT(volatile uint8_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldrbt %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return ((uint8_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint16_t __LDRHT(volatile uint16_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldrht %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return ((uint16_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __LDRT(volatile uint32_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldrt %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) { __ASM volatile(\"strbt %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) { __ASM volatile(\"strht %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STRT(uint32_t value, volatile uint32_t *ptr) { __ASM volatile(\"strt %1, %0\" : \"=Q\"(*ptr) : \"r\"(value)); }\r\n\r\n#endif /* ((__ARM_ARCH_7M__ == 1U) || (__ARM_ARCH_7EM__ == 1U) || (__ARM_ARCH_8M__ == 1U)) */\r\n\r\n#if (__ARM_ARCH_8M__ == 1U)\r\n\r\n/**\r\n  \\brief   Load-Acquire (8 bit)\r\n  \\details Executes a LDAB instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint8_t __LDAB(volatile uint8_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldab %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return ((uint8_t)result);\r\n}\r\n\r\n/**\r\n  \\brief   Load-Acquire (16 bit)\r\n  \\details Executes a LDAH instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint16_t __LDAH(volatile uint16_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldah %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return ((uint16_t)result);\r\n}\r\n\r\n/**\r\n  \\brief   Load-Acquire (32 bit)\r\n  \\details Executes a LDA instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __LDA(volatile uint32_t *ptr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"lda %0, %1\" : \"=r\"(result) : \"Q\"(*ptr));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Store-Release (8 bit)\r\n  \\details Executes a STLB instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STLB(uint8_t value, volatile uint8_t *ptr) { __ASM volatile(\"stlb %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   Store-Release (16 bit)\r\n  \\details Executes a STLH instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STLH(uint16_t value, volatile uint16_t *ptr) { __ASM volatile(\"stlh %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   Store-Release (32 bit)\r\n  \\details Executes a STL instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STL(uint32_t value, volatile uint32_t *ptr) { __ASM volatile(\"stl %1, %0\" : \"=Q\"(*ptr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   Load-Acquire Exclusive (8 bit)\r\n  \\details Executes a LDAB exclusive instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n#define __LDAEXB (uint8_t) __builtin_arm_ldaex\r\n\r\n/**\r\n  \\brief   Load-Acquire Exclusive (16 bit)\r\n  \\details Executes a LDAH exclusive instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n#define __LDAEXH (uint16_t) __builtin_arm_ldaex\r\n\r\n/**\r\n  \\brief   Load-Acquire Exclusive (32 bit)\r\n  \\details Executes a LDA exclusive instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n#define __LDAEX (uint32_t) __builtin_arm_ldaex\r\n\r\n/**\r\n  \\brief   Store-Release Exclusive (8 bit)\r\n  \\details Executes a STLB exclusive instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STLEXB (uint32_t) __builtin_arm_stlex\r\n\r\n/**\r\n  \\brief   Store-Release Exclusive (16 bit)\r\n  \\details Executes a STLH exclusive instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STLEXH (uint32_t) __builtin_arm_stlex\r\n\r\n/**\r\n  \\brief   Store-Release Exclusive (32 bit)\r\n  \\details Executes a STL exclusive instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n#define __STLEX (uint32_t) __builtin_arm_stlex\r\n\r\n#endif /* (__ARM_ARCH_8M__ == 1U) */\r\n\r\n/*@}*/ /* end of group CMSIS_Core_InstructionInterface */\r\n\r\n/* ###################  Compiler specific Intrinsics  ########################### */\r\n/** \\defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics\r\n  Access to dedicated SIMD instructions\r\n  @{\r\n*/\r\n\r\n#if (__ARM_FEATURE_DSP == 1U) /* ToDo:  ARMCC_V6: This should be ARCH >= ARMv7-M + SIMD */\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usad8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usada8 %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n#define __SSAT16(ARG1, ARG2)                                           \\\r\n  ({                                                                   \\\r\n    uint32_t __RES, __ARG1 = (ARG1);                                   \\\r\n    __ASM(\"ssat16 %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                             \\\r\n  })\r\n\r\n#define __USAT16(ARG1, ARG2)                                           \\\r\n  ({                                                                   \\\r\n    uint32_t __RES, __ARG1 = (ARG1);                                   \\\r\n    __ASM(\"usat16 %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                             \\\r\n  })\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UXTB16(uint32_t op1) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uxtb16 %0, %1\" : \"=r\"(result) : \"r\"(op1));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uxtab16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SXTB16(uint32_t op1) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sxtb16 %0, %1\" : \"=r\"(result) : \"r\"(op1));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sxtab16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUAD(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smuad %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUADX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smuadx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLAD(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlad %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLADX(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smladx %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLALD(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlald %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlald %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLALDX(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlaldx %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlaldx %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUSD(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smusd %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUSDX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smusdx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLSD(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlsd %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLSDX(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlsdx %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLSLD(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlsld %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlsld %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLSLDX(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlsldx %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlsldx %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SEL(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sel %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE int32_t __QADD(int32_t op1, int32_t op2) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"qadd %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE int32_t __QSUB(int32_t op1, int32_t op2) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"qsub %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n#define __PKHBT(ARG1, ARG2, ARG3)                                                          \\\r\n  ({                                                                                       \\\r\n    uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2);                                      \\\r\n    __ASM(\"pkhbt %0, %1, %2, lsl %3\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2), \"I\"(ARG3)); \\\r\n    __RES;                                                                                 \\\r\n  })\r\n\r\n#define __PKHTB(ARG1, ARG2, ARG3)                                                            \\\r\n  ({                                                                                         \\\r\n    uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2);                                        \\\r\n    if (ARG3 == 0)                                                                           \\\r\n      __ASM(\"pkhtb %0, %1, %2\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2));                    \\\r\n    else                                                                                     \\\r\n      __ASM(\"pkhtb %0, %1, %2, asr %3\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2), \"I\"(ARG3)); \\\r\n    __RES;                                                                                   \\\r\n  })\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMMLA(int32_t op1, int32_t op2, int32_t op3) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"smmla %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n#endif /* (__ARM_FEATURE_DSP == 1U) */\r\n/*@} end of group CMSIS_SIMD_intrinsics */\r\n\r\n#endif /* __CMSIS_ARMCC_V6_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Include/cmsis_gcc.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     cmsis_gcc.h\r\n                                                                              * @brief    CMSIS Cortex-M Core Function/Instruction Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#ifndef __CMSIS_GCC_H\r\n#define __CMSIS_GCC_H\r\n\r\n/* ignore some GCC warnings */\r\n#if defined(__GNUC__)\r\n#pragma GCC diagnostic push\r\n#pragma GCC diagnostic ignored \"-Wsign-conversion\"\r\n#pragma GCC diagnostic ignored \"-Wconversion\"\r\n#pragma GCC diagnostic ignored \"-Wunused-parameter\"\r\n#endif\r\n\r\n/* ###########################  Core Function Access  ########################### */\r\n/** \\ingroup  CMSIS_Core_FunctionInterface\r\n    \\defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Enable IRQ Interrupts\r\n  \\details Enables IRQ interrupts by clearing the I-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __enable_irq(void) { __ASM volatile(\"cpsie i\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Disable IRQ Interrupts\r\n  \\details Disables IRQ interrupts by setting the I-bit in the CPSR.\r\n  Can only be executed in Privileged modes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __disable_irq(void) { __ASM volatile(\"cpsid i\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Get Control Register\r\n  \\details Returns the content of the Control Register.\r\n  \\return               Control Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_CONTROL(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, control\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Set Control Register\r\n  \\details Writes the given value to the Control Register.\r\n  \\param [in]    control  Control Register value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_CONTROL(uint32_t control) { __ASM volatile(\"MSR control, %0\" : : \"r\"(control) : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Get IPSR Register\r\n  \\details Returns the content of the IPSR Register.\r\n  \\return               IPSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_IPSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, ipsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Get APSR Register\r\n  \\details Returns the content of the APSR Register.\r\n  \\return               APSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_APSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, apsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Get xPSR Register\r\n  \\details Returns the content of the xPSR Register.\r\n\r\n    \\return               xPSR Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_xPSR(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, xpsr\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Get Process Stack Pointer\r\n  \\details Returns the current value of the Process Stack Pointer (PSP).\r\n  \\return               PSP Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_PSP(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, psp\\n\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Set Process Stack Pointer\r\n  \\details Assigns the given value to the Process Stack Pointer (PSP).\r\n  \\param [in]    topOfProcStack  Process Stack Pointer value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) { __ASM volatile(\"MSR psp, %0\\n\" : : \"r\"(topOfProcStack) : \"sp\"); }\r\n\r\n/**\r\n  \\brief   Get Main Stack Pointer\r\n  \\details Returns the current value of the Main Stack Pointer (MSP).\r\n  \\return               MSP Register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_MSP(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, msp\\n\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Set Main Stack Pointer\r\n  \\details Assigns the given value to the Main Stack Pointer (MSP).\r\n\r\n    \\param [in]    topOfMainStack  Main Stack Pointer value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) { __ASM volatile(\"MSR msp, %0\\n\" : : \"r\"(topOfMainStack) : \"sp\"); }\r\n\r\n/**\r\n  \\brief   Get Priority Mask\r\n  \\details Returns the current state of the priority mask bit from the Priority Mask Register.\r\n  \\return               Priority Mask value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_PRIMASK(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, primask\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Set Priority Mask\r\n  \\details Assigns the given value to the Priority Mask Register.\r\n  \\param [in]    priMask  Priority Mask\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_PRIMASK(uint32_t priMask) { __ASM volatile(\"MSR primask, %0\" : : \"r\"(priMask) : \"memory\"); }\r\n\r\n#if (__CORTEX_M >= 0x03U)\r\n\r\n/**\r\n  \\brief   Enable FIQ\r\n  \\details Enables FIQ interrupts by clearing the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __enable_fault_irq(void) { __ASM volatile(\"cpsie f\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Disable FIQ\r\n  \\details Disables FIQ interrupts by setting the F-bit in the CPSR.\r\n           Can only be executed in Privileged modes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __disable_fault_irq(void) { __ASM volatile(\"cpsid f\" : : : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Get Base Priority\r\n  \\details Returns the current value of the Base Priority register.\r\n  \\return               Base Priority register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_BASEPRI(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, basepri\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Set Base Priority\r\n  \\details Assigns the given value to the Base Priority register.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_BASEPRI(uint32_t value) { __ASM volatile(\"MSR basepri, %0\" : : \"r\"(value) : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Set Base Priority with condition\r\n  \\details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled,\r\n           or the new value increases the BASEPRI priority level.\r\n  \\param [in]    basePri  Base Priority value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_BASEPRI_MAX(uint32_t value) { __ASM volatile(\"MSR basepri_max, %0\" : : \"r\"(value) : \"memory\"); }\r\n\r\n/**\r\n  \\brief   Get Fault Mask\r\n  \\details Returns the current value of the Fault Mask register.\r\n  \\return               Fault Mask register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_FAULTMASK(void) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"MRS %0, faultmask\" : \"=r\"(result));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Set Fault Mask\r\n  \\details Assigns the given value to the Fault Mask register.\r\n  \\param [in]    faultMask  Fault Mask value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) { __ASM volatile(\"MSR faultmask, %0\" : : \"r\"(faultMask) : \"memory\"); }\r\n\r\n#endif /* (__CORTEX_M >= 0x03U) */\r\n\r\n#if (__CORTEX_M == 0x04U) || (__CORTEX_M == 0x07U)\r\n\r\n/**\r\n  \\brief   Get FPSCR\r\n  \\details Returns the current value of the Floating Point Status/Control register.\r\n  \\return               Floating Point Status/Control register value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __get_FPSCR(void) {\r\n#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)\r\n  uint32_t result;\r\n\r\n  /* Empty asm statement works as a scheduling barrier */\r\n  __ASM volatile(\"\");\r\n  __ASM volatile(\"VMRS %0, fpscr\" : \"=r\"(result));\r\n  __ASM volatile(\"\");\r\n  return (result);\r\n#else\r\n  return (0);\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Set FPSCR\r\n  \\details Assigns the given value to the Floating Point Status/Control register.\r\n  \\param [in]    fpscr  Floating Point Status/Control value to set\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __set_FPSCR(uint32_t fpscr) {\r\n#if (__FPU_PRESENT == 1U) && (__FPU_USED == 1U)\r\n  /* Empty asm statement works as a scheduling barrier */\r\n  __ASM volatile(\"\");\r\n  __ASM volatile(\"VMSR fpscr, %0\" : : \"r\"(fpscr) : \"vfpcc\");\r\n  __ASM volatile(\"\");\r\n#endif\r\n}\r\n\r\n#endif /* (__CORTEX_M == 0x04U) || (__CORTEX_M == 0x07U) */\r\n\r\n/*@} end of CMSIS_Core_RegAccFunctions */\r\n\r\n/* ##########################  Core Instruction Access  ######################### */\r\n/** \\defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface\r\n  Access to dedicated instructions\r\n  @{\r\n*/\r\n\r\n/* Define macros for porting to both thumb1 and thumb2.\r\n * For thumb1, use low register (r0-r7), specified by constraint \"l\"\r\n * Otherwise, use general registers, specified by constraint \"r\" */\r\n#if defined(__thumb__) && !defined(__thumb2__)\r\n#define __CMSIS_GCC_OUT_REG(r) \"=l\"(r)\r\n#define __CMSIS_GCC_USE_REG(r) \"l\"(r)\r\n#else\r\n#define __CMSIS_GCC_OUT_REG(r) \"=r\"(r)\r\n#define __CMSIS_GCC_USE_REG(r) \"r\"(r)\r\n#endif\r\n\r\n/**\r\n  \\brief   No Operation\r\n  \\details No Operation does nothing. This instruction can be used for code alignment purposes.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __NOP(void) { __ASM volatile(\"nop\"); }\r\n\r\n/**\r\n  \\brief   Wait For Interrupt\r\n  \\details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __WFI(void) { __ASM volatile(\"wfi\"); }\r\n\r\n/**\r\n  \\brief   Wait For Event\r\n  \\details Wait For Event is a hint instruction that permits the processor to enter\r\n    a low-power state until one of a number of events occurs.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __WFE(void) { __ASM volatile(\"wfe\"); }\r\n\r\n/**\r\n  \\brief   Send Event\r\n  \\details Send Event is a hint instruction. It causes an event to be signaled to the CPU.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __SEV(void) { __ASM volatile(\"sev\"); }\r\n\r\n/**\r\n  \\brief   Instruction Synchronization Barrier\r\n  \\details Instruction Synchronization Barrier flushes the pipeline in the processor,\r\n           so that all instructions following the ISB are fetched from cache or memory,\r\n           after the instruction has been completed.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __ISB(void) { __ASM volatile(\"isb 0xF\" ::: \"memory\"); }\r\n\r\n/**\r\n  \\brief   Data Synchronization Barrier\r\n  \\details Acts as a special kind of Data Memory Barrier.\r\n           It completes when all explicit memory accesses before this instruction complete.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __DSB(void) { __ASM volatile(\"dsb 0xF\" ::: \"memory\"); }\r\n\r\n/**\r\n  \\brief   Data Memory Barrier\r\n  \\details Ensures the apparent order of the explicit memory operations before\r\n           and after the instruction, without ensuring their completion.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __DMB(void) { __ASM volatile(\"dmb 0xF\" ::: \"memory\"); }\r\n\r\n/**\r\n  \\brief   Reverse byte order (32 bit)\r\n  \\details Reverses the byte order in integer value.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __REV(uint32_t value) {\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)\r\n  return __builtin_bswap32(value);\r\n#else\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"rev %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return (result);\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Reverse byte order (16 bit)\r\n  \\details Reverses the byte order in two unsigned short values.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __REV16(uint32_t value) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"rev16 %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Reverse byte order in signed short value\r\n  \\details Reverses the byte order in a signed short value with sign extension to integer.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE int32_t __REVSH(int32_t value) {\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)\r\n  return (short)__builtin_bswap16(value);\r\n#else\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"revsh %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return (result);\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Rotate Right in unsigned value (32 bit)\r\n  \\details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.\r\n  \\param [in]    value  Value to rotate\r\n  \\param [in]    value  Number of Bits to rotate\r\n  \\return               Rotated value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2) { return (op1 >> op2) | (op1 << (32U - op2)); }\r\n\r\n/**\r\n  \\brief   Breakpoint\r\n  \\details Causes the processor to enter Debug state.\r\n           Debug tools can use this to investigate system state when the instruction at a particular address is reached.\r\n  \\param [in]    value  is ignored by the processor.\r\n                 If required, a debugger can use it to store additional information about the breakpoint.\r\n */\r\n#define __BKPT(value) __ASM volatile(\"bkpt \" #value)\r\n\r\n/**\r\n  \\brief   Reverse bit order of value\r\n  \\details Reverses the bit order of the given value.\r\n  \\param [in]    value  Value to reverse\r\n  \\return               Reversed value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) {\r\n  uint32_t result;\r\n\r\n#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U)\r\n  __ASM volatile(\"rbit %0, %1\" : \"=r\"(result) : \"r\"(value));\r\n#else\r\n  int32_t s = 4 /*sizeof(v)*/ * 8 - 1; /* extra shift needed at end */\r\n\r\n  result = value; /* r will be reversed bits of v; first get LSB of v */\r\n  for (value >>= 1U; value; value >>= 1U) {\r\n    result <<= 1U;\r\n    result |= value & 1U;\r\n    s--;\r\n  }\r\n  result <<= s; /* shift when v's highest bits are zero */\r\n#endif\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Count leading zeros\r\n  \\details Counts the number of leading zeros of a data value.\r\n  \\param [in]  value  Value to count the leading zeros\r\n  \\return             number of leading zeros in value\r\n */\r\n#define __CLZ __builtin_clz\r\n\r\n#if (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U)\r\n\r\n/**\r\n  \\brief   LDR Exclusive (8 bit)\r\n  \\details Executes a exclusive LDR instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint8_t __LDREXB(volatile uint8_t *addr) {\r\n  uint32_t result;\r\n\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)\r\n  __ASM volatile(\"ldrexb %0, %1\" : \"=r\"(result) : \"Q\"(*addr));\r\n#else\r\n  /* Prior to GCC 4.8, \"Q\" will be expanded to [rx, #0] which is not\r\n     accepted by assembler. So has to use following less efficient pattern.\r\n  */\r\n  __ASM volatile(\"ldrexb %0, [%1]\" : \"=r\"(result) : \"r\"(addr) : \"memory\");\r\n#endif\r\n  return ((uint8_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDR Exclusive (16 bit)\r\n  \\details Executes a exclusive LDR instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint16_t __LDREXH(volatile uint16_t *addr) {\r\n  uint32_t result;\r\n\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)\r\n  __ASM volatile(\"ldrexh %0, %1\" : \"=r\"(result) : \"Q\"(*addr));\r\n#else\r\n  /* Prior to GCC 4.8, \"Q\" will be expanded to [rx, #0] which is not\r\n     accepted by assembler. So has to use following less efficient pattern.\r\n  */\r\n  __ASM volatile(\"ldrexh %0, [%1]\" : \"=r\"(result) : \"r\"(addr) : \"memory\");\r\n#endif\r\n  return ((uint16_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDR Exclusive (32 bit)\r\n  \\details Executes a exclusive LDR instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __LDREXW(volatile uint32_t *addr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldrex %0, %1\" : \"=r\"(result) : \"Q\"(*addr));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   STR Exclusive (8 bit)\r\n  \\details Executes a exclusive STR instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"strexb %0, %2, %1\" : \"=&r\"(result), \"=Q\"(*addr) : \"r\"((uint32_t)value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   STR Exclusive (16 bit)\r\n  \\details Executes a exclusive STR instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"strexh %0, %2, %1\" : \"=&r\"(result), \"=Q\"(*addr) : \"r\"((uint32_t)value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   STR Exclusive (32 bit)\r\n  \\details Executes a exclusive STR instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n  \\return          0  Function succeeded\r\n  \\return          1  Function failed\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"strex %0, %2, %1\" : \"=&r\"(result), \"=Q\"(*addr) : \"r\"(value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   Remove the exclusive lock\r\n  \\details Removes the exclusive lock which is created by LDREX.\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __CLREX(void) { __ASM volatile(\"clrex\" ::: \"memory\"); }\r\n\r\n/**\r\n  \\brief   Signed Saturate\r\n  \\details Saturates a signed value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (1..32)\r\n  \\return             Saturated value\r\n */\r\n#define __SSAT(ARG1, ARG2)                                           \\\r\n  ({                                                                 \\\r\n    uint32_t __RES, __ARG1 = (ARG1);                                 \\\r\n    __ASM(\"ssat %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                           \\\r\n  })\r\n\r\n/**\r\n  \\brief   Unsigned Saturate\r\n  \\details Saturates an unsigned value.\r\n  \\param [in]  value  Value to be saturated\r\n  \\param [in]    sat  Bit position to saturate to (0..31)\r\n  \\return             Saturated value\r\n */\r\n#define __USAT(ARG1, ARG2)                                           \\\r\n  ({                                                                 \\\r\n    uint32_t __RES, __ARG1 = (ARG1);                                 \\\r\n    __ASM(\"usat %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                           \\\r\n  })\r\n\r\n/**\r\n  \\brief   Rotate Right with Extend (32 bit)\r\n  \\details Moves each bit of a bitstring right by one bit.\r\n           The carry input is shifted in at the left end of the bitstring.\r\n  \\param [in]    value  Value to rotate\r\n  \\return               Rotated value\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __RRX(uint32_t value) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"rrx %0, %1\" : __CMSIS_GCC_OUT_REG(result) : __CMSIS_GCC_USE_REG(value));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 8 bit value.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return             value of type uint8_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint8_t __LDRBT(volatile uint8_t *addr) {\r\n  uint32_t result;\r\n\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)\r\n  __ASM volatile(\"ldrbt %0, %1\" : \"=r\"(result) : \"Q\"(*addr));\r\n#else\r\n  /* Prior to GCC 4.8, \"Q\" will be expanded to [rx, #0] which is not\r\n     accepted by assembler. So has to use following less efficient pattern.\r\n  */\r\n  __ASM volatile(\"ldrbt %0, [%1]\" : \"=r\"(result) : \"r\"(addr) : \"memory\");\r\n#endif\r\n  return ((uint8_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 16 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint16_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint16_t __LDRHT(volatile uint16_t *addr) {\r\n  uint32_t result;\r\n\r\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)\r\n  __ASM volatile(\"ldrht %0, %1\" : \"=r\"(result) : \"Q\"(*addr));\r\n#else\r\n  /* Prior to GCC 4.8, \"Q\" will be expanded to [rx, #0] which is not\r\n     accepted by assembler. So has to use following less efficient pattern.\r\n  */\r\n  __ASM volatile(\"ldrht %0, [%1]\" : \"=r\"(result) : \"r\"(addr) : \"memory\");\r\n#endif\r\n  return ((uint16_t)result); /* Add explicit type cast here */\r\n}\r\n\r\n/**\r\n  \\brief   LDRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged LDRT instruction for 32 bit values.\r\n  \\param [in]    ptr  Pointer to data\r\n  \\return        value of type uint32_t at (*ptr)\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __LDRT(volatile uint32_t *addr) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ldrt %0, %1\" : \"=r\"(result) : \"Q\"(*addr));\r\n  return (result);\r\n}\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (8 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 8 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STRBT(uint8_t value, volatile uint8_t *addr) { __ASM volatile(\"strbt %1, %0\" : \"=Q\"(*addr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (16 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 16 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STRHT(uint16_t value, volatile uint16_t *addr) { __ASM volatile(\"strht %1, %0\" : \"=Q\"(*addr) : \"r\"((uint32_t)value)); }\r\n\r\n/**\r\n  \\brief   STRT Unprivileged (32 bit)\r\n  \\details Executes a Unprivileged STRT instruction for 32 bit values.\r\n  \\param [in]  value  Value to store\r\n  \\param [in]    ptr  Pointer to location\r\n */\r\n__attribute__((always_inline)) __STATIC_INLINE void __STRT(uint32_t value, volatile uint32_t *addr) { __ASM volatile(\"strt %1, %0\" : \"=Q\"(*addr) : \"r\"(value)); }\r\n\r\n#endif /* (__CORTEX_M >= 0x03U) || (__CORTEX_SC >= 300U) */\r\n\r\n/*@}*/ /* end of group CMSIS_Core_InstructionInterface */\r\n\r\n/* ###################  Compiler specific Intrinsics  ########################### */\r\n/** \\defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics\r\n  Access to dedicated SIMD instructions\r\n  @{\r\n*/\r\n\r\n#if (__CORTEX_M >= 0x04U) /* only for Cortex-M4 and above */\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhadd8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsub8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhadd16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsub16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhasx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"ssax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"qsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"shsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uqsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uhsax %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usad8 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"usada8 %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n#define __SSAT16(ARG1, ARG2)                                           \\\r\n  ({                                                                   \\\r\n    int32_t __RES, __ARG1 = (ARG1);                                    \\\r\n    __ASM(\"ssat16 %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                             \\\r\n  })\r\n\r\n#define __USAT16(ARG1, ARG2)                                           \\\r\n  ({                                                                   \\\r\n    uint32_t __RES, __ARG1 = (ARG1);                                   \\\r\n    __ASM(\"usat16 %0, %1, %2\" : \"=r\"(__RES) : \"I\"(ARG2), \"r\"(__ARG1)); \\\r\n    __RES;                                                             \\\r\n  })\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UXTB16(uint32_t op1) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uxtb16 %0, %1\" : \"=r\"(result) : \"r\"(op1));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"uxtab16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SXTB16(uint32_t op1) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sxtb16 %0, %1\" : \"=r\"(result) : \"r\"(op1));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sxtab16 %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUAD(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smuad %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUADX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smuadx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLAD(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlad %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLADX(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smladx %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLALD(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlald %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlald %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLALDX(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlaldx %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlaldx %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUSD(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smusd %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMUSDX(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smusdx %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLSD(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlsd %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMLSDX(uint32_t op1, uint32_t op2, uint32_t op3) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"smlsdx %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLSLD(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlsld %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlsld %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint64_t __SMLSLDX(uint32_t op1, uint32_t op2, uint64_t acc) {\r\n  union llreg_u {\r\n    uint32_t w32[2];\r\n    uint64_t w64;\r\n  } llr;\r\n  llr.w64 = acc;\r\n\r\n#ifndef __ARMEB__ /* Little endian */\r\n  __ASM volatile(\"smlsldx %0, %1, %2, %3\" : \"=r\"(llr.w32[0]), \"=r\"(llr.w32[1]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[0]), \"1\"(llr.w32[1]));\r\n#else /* Big endian */\r\n  __ASM volatile(\"smlsldx %0, %1, %2, %3\" : \"=r\"(llr.w32[1]), \"=r\"(llr.w32[0]) : \"r\"(op1), \"r\"(op2), \"0\"(llr.w32[1]), \"1\"(llr.w32[0]));\r\n#endif\r\n\r\n  return (llr.w64);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SEL(uint32_t op1, uint32_t op2) {\r\n  uint32_t result;\r\n\r\n  __ASM volatile(\"sel %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE int32_t __QADD(int32_t op1, int32_t op2) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"qadd %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE int32_t __QSUB(int32_t op1, int32_t op2) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"qsub %0, %1, %2\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2));\r\n  return (result);\r\n}\r\n\r\n#define __PKHBT(ARG1, ARG2, ARG3)                                                          \\\r\n  ({                                                                                       \\\r\n    uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2);                                      \\\r\n    __ASM(\"pkhbt %0, %1, %2, lsl %3\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2), \"I\"(ARG3)); \\\r\n    __RES;                                                                                 \\\r\n  })\r\n\r\n#define __PKHTB(ARG1, ARG2, ARG3)                                                            \\\r\n  ({                                                                                         \\\r\n    uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2);                                        \\\r\n    if (ARG3 == 0)                                                                           \\\r\n      __ASM(\"pkhtb %0, %1, %2\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2));                    \\\r\n    else                                                                                     \\\r\n      __ASM(\"pkhtb %0, %1, %2, asr %3\" : \"=r\"(__RES) : \"r\"(__ARG1), \"r\"(__ARG2), \"I\"(ARG3)); \\\r\n    __RES;                                                                                   \\\r\n  })\r\n\r\n__attribute__((always_inline)) __STATIC_INLINE uint32_t __SMMLA(int32_t op1, int32_t op2, int32_t op3) {\r\n  int32_t result;\r\n\r\n  __ASM volatile(\"smmla %0, %1, %2, %3\" : \"=r\"(result) : \"r\"(op1), \"r\"(op2), \"r\"(op3));\r\n  return (result);\r\n}\r\n\r\n#endif /* (__CORTEX_M >= 0x04) */\r\n/*@} end of group CMSIS_SIMD_intrinsics */\r\n\r\n#if defined(__GNUC__)\r\n#pragma GCC diagnostic pop\r\n#endif\r\n\r\n#endif /* __CMSIS_GCC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Include/core_cm0.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cm0.h\r\n                                                                              * @brief    CMSIS Cortex-M0 Core Peripheral Access Layer Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CM0_H_GENERIC\r\n#define __CORE_CM0_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup Cortex_M0\r\n  @{\r\n */\r\n\r\n/*  CMSIS CM0 definitions */\r\n#define __CM0_CMSIS_VERSION_MAIN (0x04U)                                                       /*!< [31:16] CMSIS HAL main version */\r\n#define __CM0_CMSIS_VERSION_SUB  (0x1EU)                                                       /*!< [15:0]  CMSIS HAL sub version */\r\n#define __CM0_CMSIS_VERSION      ((__CM0_CMSIS_VERSION_MAIN << 16U) | __CM0_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */\r\n\r\n#define __CORTEX_M (0x00U) /*!< Cortex-M Core */\r\n\r\n#if defined(__CC_ARM)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__GNUC__)\r\n#define __ASM           __asm  /*!< asm keyword for GNU Compiler */\r\n#define __INLINE        inline /*!< inline keyword for GNU Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__ICCARM__)\r\n#define __ASM           __asm  /*!< asm keyword for IAR Compiler */\r\n#define __INLINE        inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TMS470__)\r\n#define __ASM           __asm /*!< asm keyword for TI CCS Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TASKING__)\r\n#define __ASM           __asm  /*!< asm keyword for TASKING Compiler */\r\n#define __INLINE        inline /*!< inline keyword for TASKING Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__CSMC__)\r\n#define __packed\r\n#define __ASM           _asm   /*!< asm keyword for COSMIC Compiler */\r\n#define __INLINE        inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */\r\n#define __STATIC_INLINE static inline\r\n\r\n#else\r\n#error Unknown compiler\r\n#endif\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    This core does not support an FPU at all\r\n*/\r\n#define __FPU_USED 0U\r\n\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TMS470__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"core_cmFunc.h\"  /* Core Function Access */\r\n#include \"core_cmInstr.h\" /* Core Instruction Access */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM0_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_CM0_H_DEPENDANT\r\n#define __CORE_CM0_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __CM0_REV\r\n#define __CM0_REV 0x0000U\r\n#warning \"__CM0_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 2U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group Cortex_M0 */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 28; /*!< bit:  0..27  Reserved */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 15; /*!< bit:  9..23  Reserved */\r\n    uint32_t T : 1;           /*!< bit:     24  Thumb bit        (read 0) */\r\n    uint32_t _reserved1 : 3;  /*!< bit: 25..27  Reserved */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 1;  /*!< bit:      0  Reserved */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t _reserved1 : 30; /*!< bit:  2..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[31U];\r\n  __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[31U];\r\n  __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[31U];\r\n  __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[31U];\r\n  uint32_t       RESERVED4[64U];\r\n  __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */\r\n} NVIC_Type;\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID; /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;  /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n  uint32_t       RESERVED0;\r\n  __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;   /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;   /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  uint32_t       RESERVED1;\r\n  __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */\r\n  __IOM uint32_t SHCSR;   /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor.\r\n            Therefore they are not covered by the Cortex-M0 header file.\r\n  @{\r\n */\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) ((value << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) ((value & field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of Cortex-M0 Hardware */\r\n#define SCS_BASE     (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE    (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE     (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCB     ((SCB_Type *)SCB_BASE)         /*!< SCB configuration struct */\r\n#define SysTick ((SysTick_Type *)SysTick_BASE) /*!< SysTick configuration struct */\r\n#define NVIC    ((NVIC_Type *)NVIC_BASE)       /*!< NVIC configuration struct */\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n/* Interrupt Priorities are WORD accessible only under ARMv6M                   */\r\n/* The following MACROS handle generation of the register offset and byte masks */\r\n#define _BIT_SHIFT(IRQn) (((((uint32_t)(int32_t)(IRQn))) & 0x03UL) * 8UL)\r\n#define _SHP_IDX(IRQn)   ((((((uint32_t)(int32_t)(IRQn)) & 0x0FUL) - 8UL) >> 2UL))\r\n#define _IP_IDX(IRQn)    ((((uint32_t)(int32_t)(IRQn)) >> 2UL))\r\n\r\n/**\r\n  \\brief   Enable External Interrupt\r\n  \\details Enables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Disable External Interrupt\r\n  \\details Disables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) { NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) { return ((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); }\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  Interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) { NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) { NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of an interrupt.\r\n  \\note    The priority cannot be set for every core interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) < 0) {\r\n    SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));\r\n  } else {\r\n    NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of an interrupt.\r\n           The interrupt number can be positive to specify an external (device specific) interrupt,\r\n           or negative to specify an internal (core) interrupt.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) < 0) {\r\n    return ((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn)) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return ((uint32_t)(((NVIC->IP[_IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn)) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__STATIC_INLINE void NVIC_SystemReset(void) {\r\n  __DSB(); /* Ensure all outstanding memory accesses included\r\n              buffered write are completed before reset */\r\n  SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | SCB_AIRCR_SYSRESETREQ_Msk);\r\n  __DSB(); /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM0_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Include/core_cm0plus.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cm0plus.h\r\n                                                                              * @brief    CMSIS Cortex-M0+ Core Peripheral Access Layer Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CM0PLUS_H_GENERIC\r\n#define __CORE_CM0PLUS_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup Cortex-M0+\r\n  @{\r\n */\r\n\r\n/*  CMSIS CM0+ definitions */\r\n#define __CM0PLUS_CMSIS_VERSION_MAIN (0x04U)                                                               /*!< [31:16] CMSIS HAL main version */\r\n#define __CM0PLUS_CMSIS_VERSION_SUB  (0x1EU)                                                               /*!< [15:0]  CMSIS HAL sub version */\r\n#define __CM0PLUS_CMSIS_VERSION      ((__CM0PLUS_CMSIS_VERSION_MAIN << 16U) | __CM0PLUS_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */\r\n\r\n#define __CORTEX_M (0x00U) /*!< Cortex-M Core */\r\n\r\n#if defined(__CC_ARM)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__GNUC__)\r\n#define __ASM           __asm  /*!< asm keyword for GNU Compiler */\r\n#define __INLINE        inline /*!< inline keyword for GNU Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__ICCARM__)\r\n#define __ASM           __asm  /*!< asm keyword for IAR Compiler */\r\n#define __INLINE        inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TMS470__)\r\n#define __ASM           __asm /*!< asm keyword for TI CCS Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TASKING__)\r\n#define __ASM           __asm  /*!< asm keyword for TASKING Compiler */\r\n#define __INLINE        inline /*!< inline keyword for TASKING Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__CSMC__)\r\n#define __packed\r\n#define __ASM           _asm   /*!< asm keyword for COSMIC Compiler */\r\n#define __INLINE        inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */\r\n#define __STATIC_INLINE static inline\r\n\r\n#else\r\n#error Unknown compiler\r\n#endif\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    This core does not support an FPU at all\r\n*/\r\n#define __FPU_USED 0U\r\n\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TMS470__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"core_cmFunc.h\"  /* Core Function Access */\r\n#include \"core_cmInstr.h\" /* Core Instruction Access */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM0PLUS_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_CM0PLUS_H_DEPENDANT\r\n#define __CORE_CM0PLUS_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __CM0PLUS_REV\r\n#define __CM0PLUS_REV 0x0000U\r\n#warning \"__CM0PLUS_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __MPU_PRESENT\r\n#define __MPU_PRESENT 0U\r\n#warning \"__MPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __VTOR_PRESENT\r\n#define __VTOR_PRESENT 0U\r\n#warning \"__VTOR_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 2U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group Cortex-M0+ */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n  - Core MPU Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 28; /*!< bit:  0..27  Reserved */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 15; /*!< bit:  9..23  Reserved */\r\n    uint32_t T : 1;           /*!< bit:     24  Thumb bit        (read 0) */\r\n    uint32_t _reserved1 : 3;  /*!< bit: 25..27  Reserved */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t nPRIV : 1;       /*!< bit:      0  Execution privilege in Thread mode */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t _reserved1 : 30; /*!< bit:  2..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n#define CONTROL_nPRIV_Pos 0U                             /*!< CONTROL: nPRIV Position */\r\n#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[31U];\r\n  __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[31U];\r\n  __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[31U];\r\n  __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[31U];\r\n  uint32_t       RESERVED4[64U];\r\n  __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */\r\n} NVIC_Type;\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID; /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;  /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n#if (__VTOR_PRESENT == 1U)\r\n  __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */\r\n#else\r\n  uint32_t RESERVED0;\r\n#endif\r\n  __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;   /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;   /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  uint32_t       RESERVED1;\r\n  __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */\r\n  __IOM uint32_t SHCSR;   /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n#if (__VTOR_PRESENT == 1U)\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_VTOR_TBLOFF_Pos 8U                                  /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0xFFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n#endif\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_MPU     Memory Protection Unit (MPU)\r\n  \\brief    Type definitions for the Memory Protection Unit (MPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Memory Protection Unit (MPU).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  TYPE; /*!< Offset: 0x000 (R/ )  MPU Type Register */\r\n  __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W)  MPU Control Register */\r\n  __IOM uint32_t RNR;  /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */\r\n  __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */\r\n  __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */\r\n} MPU_Type;\r\n\r\n/* MPU Type Register Definitions */\r\n#define MPU_TYPE_IREGION_Pos 16U                              /*!< MPU TYPE: IREGION Position */\r\n#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */\r\n\r\n#define MPU_TYPE_DREGION_Pos 8U                               /*!< MPU TYPE: DREGION Position */\r\n#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */\r\n\r\n#define MPU_TYPE_SEPARATE_Pos 0U                                 /*!< MPU TYPE: SEPARATE Position */\r\n#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */\r\n\r\n/* MPU Control Register Definitions */\r\n#define MPU_CTRL_PRIVDEFENA_Pos 2U                               /*!< MPU CTRL: PRIVDEFENA Position */\r\n#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */\r\n\r\n#define MPU_CTRL_HFNMIENA_Pos 1U                             /*!< MPU CTRL: HFNMIENA Position */\r\n#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */\r\n\r\n#define MPU_CTRL_ENABLE_Pos 0U                               /*!< MPU CTRL: ENABLE Position */\r\n#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */\r\n\r\n/* MPU Region Number Register Definitions */\r\n#define MPU_RNR_REGION_Pos 0U                                 /*!< MPU RNR: REGION Position */\r\n#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */\r\n\r\n/* MPU Region Base Address Register Definitions */\r\n#define MPU_RBAR_ADDR_Pos 8U                                /*!< MPU RBAR: ADDR Position */\r\n#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */\r\n\r\n#define MPU_RBAR_VALID_Pos 4U                          /*!< MPU RBAR: VALID Position */\r\n#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */\r\n\r\n#define MPU_RBAR_REGION_Pos 0U                                 /*!< MPU RBAR: REGION Position */\r\n#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */\r\n\r\n/* MPU Region Attribute and Size Register Definitions */\r\n#define MPU_RASR_ATTRS_Pos 16U                              /*!< MPU RASR: MPU Region Attribute field Position */\r\n#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */\r\n\r\n#define MPU_RASR_XN_Pos 28U                      /*!< MPU RASR: ATTRS.XN Position */\r\n#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */\r\n\r\n#define MPU_RASR_AP_Pos 24U                        /*!< MPU RASR: ATTRS.AP Position */\r\n#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */\r\n\r\n#define MPU_RASR_TEX_Pos 19U                         /*!< MPU RASR: ATTRS.TEX Position */\r\n#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */\r\n\r\n#define MPU_RASR_S_Pos 18U                     /*!< MPU RASR: ATTRS.S Position */\r\n#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */\r\n\r\n#define MPU_RASR_C_Pos 17U                     /*!< MPU RASR: ATTRS.C Position */\r\n#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */\r\n\r\n#define MPU_RASR_B_Pos 16U                     /*!< MPU RASR: ATTRS.B Position */\r\n#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */\r\n\r\n#define MPU_RASR_SRD_Pos 8U                           /*!< MPU RASR: Sub-Region Disable Position */\r\n#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */\r\n\r\n#define MPU_RASR_SIZE_Pos 1U                            /*!< MPU RASR: Region Size Field Position */\r\n#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */\r\n\r\n#define MPU_RASR_ENABLE_Pos 0U                               /*!< MPU RASR: Region enable bit Position */\r\n#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */\r\n\r\n/*@} end of group CMSIS_MPU */\r\n#endif\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    Cortex-M0+ Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor.\r\n            Therefore they are not covered by the Cortex-M0+ header file.\r\n  @{\r\n */\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) ((value << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) ((value & field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of Cortex-M0+ Hardware */\r\n#define SCS_BASE     (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE    (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE     (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCB     ((SCB_Type *)SCB_BASE)         /*!< SCB configuration struct */\r\n#define SysTick ((SysTick_Type *)SysTick_BASE) /*!< SysTick configuration struct */\r\n#define NVIC    ((NVIC_Type *)NVIC_BASE)       /*!< NVIC configuration struct */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n#define MPU_BASE (SCS_BASE + 0x0D90UL)  /*!< Memory Protection Unit */\r\n#define MPU      ((MPU_Type *)MPU_BASE) /*!< Memory Protection Unit */\r\n#endif\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n/* Interrupt Priorities are WORD accessible only under ARMv6M                   */\r\n/* The following MACROS handle generation of the register offset and byte masks */\r\n#define _BIT_SHIFT(IRQn) (((((uint32_t)(int32_t)(IRQn))) & 0x03UL) * 8UL)\r\n#define _SHP_IDX(IRQn)   ((((((uint32_t)(int32_t)(IRQn)) & 0x0FUL) - 8UL) >> 2UL))\r\n#define _IP_IDX(IRQn)    ((((uint32_t)(int32_t)(IRQn)) >> 2UL))\r\n\r\n/**\r\n  \\brief   Enable External Interrupt\r\n  \\details Enables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Disable External Interrupt\r\n  \\details Disables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) { NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) { return ((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); }\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  Interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) { NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) { NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of an interrupt.\r\n  \\note    The priority cannot be set for every core interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) < 0) {\r\n    SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));\r\n  } else {\r\n    NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of an interrupt.\r\n           The interrupt number can be positive to specify an external (device specific) interrupt,\r\n           or negative to specify an internal (core) interrupt.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) < 0) {\r\n    return ((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn)) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return ((uint32_t)(((NVIC->IP[_IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn)) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__STATIC_INLINE void NVIC_SystemReset(void) {\r\n  __DSB(); /* Ensure all outstanding memory accesses included\r\n              buffered write are completed before reset */\r\n  SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | SCB_AIRCR_SYSRESETREQ_Msk);\r\n  __DSB(); /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM0PLUS_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Include/core_cm3.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cm3.h\r\n                                                                              * @brief    CMSIS Cortex-M3 Core Peripheral Access Layer Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CM3_H_GENERIC\r\n#define __CORE_CM3_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup Cortex_M3\r\n  @{\r\n */\r\n\r\n/*  CMSIS CM3 definitions */\r\n#define __CM3_CMSIS_VERSION_MAIN (0x04U)                                                       /*!< [31:16] CMSIS HAL main version */\r\n#define __CM3_CMSIS_VERSION_SUB  (0x1EU)                                                       /*!< [15:0]  CMSIS HAL sub version */\r\n#define __CM3_CMSIS_VERSION      ((__CM3_CMSIS_VERSION_MAIN << 16U) | __CM3_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */\r\n\r\n#define __CORTEX_M (0x03U) /*!< Cortex-M Core */\r\n\r\n#if defined(__CC_ARM)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__GNUC__)\r\n#define __ASM           __asm  /*!< asm keyword for GNU Compiler */\r\n#define __INLINE        inline /*!< inline keyword for GNU Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__ICCARM__)\r\n#define __ASM           __asm  /*!< asm keyword for IAR Compiler */\r\n#define __INLINE        inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TMS470__)\r\n#define __ASM           __asm /*!< asm keyword for TI CCS Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TASKING__)\r\n#define __ASM           __asm  /*!< asm keyword for TASKING Compiler */\r\n#define __INLINE        inline /*!< inline keyword for TASKING Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__CSMC__)\r\n#define __packed\r\n#define __ASM           _asm   /*!< asm keyword for COSMIC Compiler */\r\n#define __INLINE        inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */\r\n#define __STATIC_INLINE static inline\r\n\r\n#else\r\n#error Unknown compiler\r\n#endif\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    This core does not support an FPU at all\r\n*/\r\n#define __FPU_USED 0U\r\n\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TMS470__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"core_cmFunc.h\"  /* Core Function Access */\r\n#include \"core_cmInstr.h\" /* Core Instruction Access */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM3_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_CM3_H_DEPENDANT\r\n#define __CORE_CM3_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __CM3_REV\r\n#define __CM3_REV 0x0200U\r\n#warning \"__CM3_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __MPU_PRESENT\r\n#define __MPU_PRESENT 0U\r\n#warning \"__MPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 4U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group Cortex_M3 */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n  - Core Debug Register\r\n  - Core MPU Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 27; /*!< bit:  0..26  Reserved */\r\n    uint32_t Q : 1;           /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n#define APSR_Q_Pos 27U                 /*!< APSR: Q Position */\r\n#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 15; /*!< bit:  9..23  Reserved */\r\n    uint32_t T : 1;           /*!< bit:     24  Thumb bit        (read 0) */\r\n    uint32_t IT : 2;          /*!< bit: 25..26  saved IT state   (read 0) */\r\n    uint32_t Q : 1;           /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_Q_Pos 27U                 /*!< xPSR: Q Position */\r\n#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */\r\n\r\n#define xPSR_IT_Pos 25U                  /*!< xPSR: IT Position */\r\n#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t nPRIV : 1;       /*!< bit:      0  Execution privilege in Thread mode */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t _reserved1 : 30; /*!< bit:  2..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n#define CONTROL_nPRIV_Pos 0U                             /*!< CONTROL: nPRIV Position */\r\n#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[24U];\r\n  __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[24U];\r\n  __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[24U];\r\n  __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[24U];\r\n  __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */\r\n  uint32_t       RESERVED4[56U];\r\n  __IOM uint8_t  IP[240U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */\r\n  uint32_t       RESERVED5[644U];\r\n  __OM uint32_t  STIR; /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */\r\n} NVIC_Type;\r\n\r\n/* Software Triggered Interrupt Register Definitions */\r\n#define NVIC_STIR_INTID_Pos 0U                                   /*!< STIR: INTLINESNUM Position */\r\n#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID;    /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;     /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n  __IOM uint32_t VTOR;     /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */\r\n  __IOM uint32_t AIRCR;    /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;      /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;      /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  __IOM uint8_t  SHP[12U]; /*!< Offset: 0x018 (R/W)  System Handlers Priority Registers (4-7, 8-11, 12-15) */\r\n  __IOM uint32_t SHCSR;    /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n  __IOM uint32_t CFSR;     /*!< Offset: 0x028 (R/W)  Configurable Fault Status Register */\r\n  __IOM uint32_t HFSR;     /*!< Offset: 0x02C (R/W)  HardFault Status Register */\r\n  __IOM uint32_t DFSR;     /*!< Offset: 0x030 (R/W)  Debug Fault Status Register */\r\n  __IOM uint32_t MMFAR;    /*!< Offset: 0x034 (R/W)  MemManage Fault Address Register */\r\n  __IOM uint32_t BFAR;     /*!< Offset: 0x038 (R/W)  BusFault Address Register */\r\n  __IOM uint32_t AFSR;     /*!< Offset: 0x03C (R/W)  Auxiliary Fault Status Register */\r\n  __IM uint32_t  PFR[2U];  /*!< Offset: 0x040 (R/ )  Processor Feature Register */\r\n  __IM uint32_t  DFR;      /*!< Offset: 0x048 (R/ )  Debug Feature Register */\r\n  __IM uint32_t  ADR;      /*!< Offset: 0x04C (R/ )  Auxiliary Feature Register */\r\n  __IM uint32_t  MMFR[4U]; /*!< Offset: 0x050 (R/ )  Memory Model Feature Register */\r\n  __IM uint32_t  ISAR[5U]; /*!< Offset: 0x060 (R/ )  Instruction Set Attributes Register */\r\n  uint32_t       RESERVED0[5U];\r\n  __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W)  Coprocessor Access Control Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_RETTOBASE_Pos 11U                             /*!< SCB ICSR: RETTOBASE Position */\r\n#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n/* SCB Vector Table Offset Register Definitions */\r\n#if (__CM3_REV < 0x0201U)                                  /* core r2p1 */\r\n#define SCB_VTOR_TBLBASE_Pos 29U                           /*!< SCB VTOR: TBLBASE Position */\r\n#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */\r\n\r\n#define SCB_VTOR_TBLOFF_Pos 7U                                  /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n#else\r\n#define SCB_VTOR_TBLOFF_Pos 7U                                   /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n#endif\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_PRIGROUP_Pos 8U                              /*!< SCB AIRCR: PRIGROUP Position */\r\n#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n#define SCB_AIRCR_VECTRESET_Pos 0U                                   /*!< SCB AIRCR: VECTRESET Position */\r\n#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_BFHFNMIGN_Pos 8U                             /*!< SCB CCR: BFHFNMIGN Position */\r\n#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */\r\n\r\n#define SCB_CCR_DIV_0_TRP_Pos 4U                             /*!< SCB CCR: DIV_0_TRP Position */\r\n#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n#define SCB_CCR_USERSETMPEND_Pos 1U                                /*!< SCB CCR: USERSETMPEND Position */\r\n#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */\r\n\r\n#define SCB_CCR_NONBASETHRDENA_Pos 0U                                      /*!< SCB CCR: NONBASETHRDENA Position */\r\n#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_USGFAULTENA_Pos 18U                                /*!< SCB SHCSR: USGFAULTENA Position */\r\n#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTENA_Pos 17U                                /*!< SCB SHCSR: BUSFAULTENA Position */\r\n#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTENA_Pos 16U                                /*!< SCB SHCSR: MEMFAULTENA Position */\r\n#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U                                   /*!< SCB SHCSR: BUSFAULTPENDED Position */\r\n#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U                                   /*!< SCB SHCSR: MEMFAULTPENDED Position */\r\n#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTPENDED_Pos 12U                                   /*!< SCB SHCSR: USGFAULTPENDED Position */\r\n#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_SYSTICKACT_Pos 11U                               /*!< SCB SHCSR: SYSTICKACT Position */\r\n#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */\r\n\r\n#define SCB_SHCSR_PENDSVACT_Pos 10U                              /*!< SCB SHCSR: PENDSVACT Position */\r\n#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */\r\n\r\n#define SCB_SHCSR_MONITORACT_Pos 8U                                /*!< SCB SHCSR: MONITORACT Position */\r\n#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */\r\n\r\n#define SCB_SHCSR_SVCALLACT_Pos 7U                               /*!< SCB SHCSR: SVCALLACT Position */\r\n#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTACT_Pos 3U                                 /*!< SCB SHCSR: USGFAULTACT Position */\r\n#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTACT_Pos 1U                                 /*!< SCB SHCSR: BUSFAULTACT Position */\r\n#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTACT_Pos 0U                                     /*!< SCB SHCSR: MEMFAULTACT Position */\r\n#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */\r\n\r\n/* SCB Configurable Fault Status Register Definitions */\r\n#define SCB_CFSR_USGFAULTSR_Pos 16U                                   /*!< SCB CFSR: Usage Fault Status Register Position */\r\n#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_BUSFAULTSR_Pos 8U                                  /*!< SCB CFSR: Bus Fault Status Register Position */\r\n#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_MEMFAULTSR_Pos 0U                                      /*!< SCB CFSR: Memory Manage Fault Status Register Position */\r\n#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */\r\n\r\n/* SCB Hard Fault Status Register Definitions */\r\n#define SCB_HFSR_DEBUGEVT_Pos 31U                            /*!< SCB HFSR: DEBUGEVT Position */\r\n#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */\r\n\r\n#define SCB_HFSR_FORCED_Pos 30U                          /*!< SCB HFSR: FORCED Position */\r\n#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */\r\n\r\n#define SCB_HFSR_VECTTBL_Pos 1U                            /*!< SCB HFSR: VECTTBL Position */\r\n#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */\r\n\r\n/* SCB Debug Fault Status Register Definitions */\r\n#define SCB_DFSR_EXTERNAL_Pos 4U                             /*!< SCB DFSR: EXTERNAL Position */\r\n#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */\r\n\r\n#define SCB_DFSR_VCATCH_Pos 3U                           /*!< SCB DFSR: VCATCH Position */\r\n#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */\r\n\r\n#define SCB_DFSR_DWTTRAP_Pos 2U                            /*!< SCB DFSR: DWTTRAP Position */\r\n#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */\r\n\r\n#define SCB_DFSR_BKPT_Pos 1U                         /*!< SCB DFSR: BKPT Position */\r\n#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */\r\n\r\n#define SCB_DFSR_HALTED_Pos 0U                               /*!< SCB DFSR: HALTED Position */\r\n#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)\r\n  \\brief    Type definitions for the System Control and ID Register not in the SCB\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control and ID Register not in the SCB.\r\n */\r\ntypedef struct {\r\n  uint32_t      RESERVED0[1U];\r\n  __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */\r\n#if ((defined __CM3_REV) && (__CM3_REV >= 0x200U))\r\n  __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */\r\n#else\r\n  uint32_t RESERVED1[1U];\r\n#endif\r\n} SCnSCB_Type;\r\n\r\n/* Interrupt Controller Type Register Definitions */\r\n#define SCnSCB_ICTR_INTLINESNUM_Pos 0U                                         /*!< ICTR: INTLINESNUM Position */\r\n#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */\r\n\r\n/* Auxiliary Control Register Definitions */\r\n\r\n#define SCnSCB_ACTLR_DISFOLD_Pos 2U                                /*!< ACTLR: DISFOLD Position */\r\n#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */\r\n\r\n#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U                                   /*!< ACTLR: DISDEFWBUF Position */\r\n#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */\r\n\r\n#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U                                       /*!< ACTLR: DISMCYCINT Position */\r\n#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */\r\n\r\n/*@} end of group CMSIS_SCnotSCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_ITM     Instrumentation Trace Macrocell (ITM)\r\n  \\brief    Type definitions for the Instrumentation Trace Macrocell (ITM)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Instrumentation Trace Macrocell Register (ITM).\r\n */\r\ntypedef struct {\r\n  __OM union {\r\n    __OM uint8_t  u8;  /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 8-bit */\r\n    __OM uint16_t u16; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 16-bit */\r\n    __OM uint32_t u32; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 32-bit */\r\n  } PORT[32U];         /*!< Offset: 0x000 ( /W)  ITM Stimulus Port Registers */\r\n  uint32_t       RESERVED0[864U];\r\n  __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W)  ITM Trace Enable Register */\r\n  uint32_t       RESERVED1[15U];\r\n  __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */\r\n  uint32_t       RESERVED2[15U];\r\n  __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */\r\n  uint32_t       RESERVED3[29U];\r\n  __OM uint32_t  IWR;  /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */\r\n  __IM uint32_t  IRR;  /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */\r\n  __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */\r\n  uint32_t       RESERVED4[43U];\r\n  __OM uint32_t  LAR; /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */\r\n  __IM uint32_t  LSR; /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */\r\n  uint32_t       RESERVED5[6U];\r\n  __IM uint32_t  PID4; /*!< Offset: 0xFD0 (R/ )  ITM Peripheral Identification Register #4 */\r\n  __IM uint32_t  PID5; /*!< Offset: 0xFD4 (R/ )  ITM Peripheral Identification Register #5 */\r\n  __IM uint32_t  PID6; /*!< Offset: 0xFD8 (R/ )  ITM Peripheral Identification Register #6 */\r\n  __IM uint32_t  PID7; /*!< Offset: 0xFDC (R/ )  ITM Peripheral Identification Register #7 */\r\n  __IM uint32_t  PID0; /*!< Offset: 0xFE0 (R/ )  ITM Peripheral Identification Register #0 */\r\n  __IM uint32_t  PID1; /*!< Offset: 0xFE4 (R/ )  ITM Peripheral Identification Register #1 */\r\n  __IM uint32_t  PID2; /*!< Offset: 0xFE8 (R/ )  ITM Peripheral Identification Register #2 */\r\n  __IM uint32_t  PID3; /*!< Offset: 0xFEC (R/ )  ITM Peripheral Identification Register #3 */\r\n  __IM uint32_t  CID0; /*!< Offset: 0xFF0 (R/ )  ITM Component  Identification Register #0 */\r\n  __IM uint32_t  CID1; /*!< Offset: 0xFF4 (R/ )  ITM Component  Identification Register #1 */\r\n  __IM uint32_t  CID2; /*!< Offset: 0xFF8 (R/ )  ITM Component  Identification Register #2 */\r\n  __IM uint32_t  CID3; /*!< Offset: 0xFFC (R/ )  ITM Component  Identification Register #3 */\r\n} ITM_Type;\r\n\r\n/* ITM Trace Privilege Register Definitions */\r\n#define ITM_TPR_PRIVMASK_Pos 0U                                  /*!< ITM TPR: PRIVMASK Position */\r\n#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */\r\n\r\n/* ITM Trace Control Register Definitions */\r\n#define ITM_TCR_BUSY_Pos 23U                       /*!< ITM TCR: BUSY Position */\r\n#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */\r\n\r\n#define ITM_TCR_TraceBusID_Pos 16U                                /*!< ITM TCR: ATBID Position */\r\n#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */\r\n\r\n#define ITM_TCR_GTSFREQ_Pos 10U                          /*!< ITM TCR: Global timestamp frequency Position */\r\n#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */\r\n\r\n#define ITM_TCR_TSPrescale_Pos 8U                              /*!< ITM TCR: TSPrescale Position */\r\n#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */\r\n\r\n#define ITM_TCR_SWOENA_Pos 4U                          /*!< ITM TCR: SWOENA Position */\r\n#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */\r\n\r\n#define ITM_TCR_DWTENA_Pos 3U                          /*!< ITM TCR: DWTENA Position */\r\n#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */\r\n\r\n#define ITM_TCR_SYNCENA_Pos 2U                           /*!< ITM TCR: SYNCENA Position */\r\n#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */\r\n\r\n#define ITM_TCR_TSENA_Pos 1U                         /*!< ITM TCR: TSENA Position */\r\n#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */\r\n\r\n#define ITM_TCR_ITMENA_Pos 0U                              /*!< ITM TCR: ITM Enable bit Position */\r\n#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */\r\n\r\n/* ITM Integration Write Register Definitions */\r\n#define ITM_IWR_ATVALIDM_Pos 0U                                /*!< ITM IWR: ATVALIDM Position */\r\n#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */\r\n\r\n/* ITM Integration Read Register Definitions */\r\n#define ITM_IRR_ATREADYM_Pos 0U                                /*!< ITM IRR: ATREADYM Position */\r\n#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */\r\n\r\n/* ITM Integration Mode Control Register Definitions */\r\n#define ITM_IMCR_INTEGRATION_Pos 0U                                    /*!< ITM IMCR: INTEGRATION Position */\r\n#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */\r\n\r\n/* ITM Lock Status Register Definitions */\r\n#define ITM_LSR_ByteAcc_Pos 2U                           /*!< ITM LSR: ByteAcc Position */\r\n#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */\r\n\r\n#define ITM_LSR_Access_Pos 1U                          /*!< ITM LSR: Access Position */\r\n#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */\r\n\r\n#define ITM_LSR_Present_Pos 0U                               /*!< ITM LSR: Present Position */\r\n#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_ITM */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)\r\n  \\brief    Type definitions for the Data Watchpoint and Trace (DWT)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Data Watchpoint and Trace Register (DWT).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;      /*!< Offset: 0x000 (R/W)  Control Register */\r\n  __IOM uint32_t CYCCNT;    /*!< Offset: 0x004 (R/W)  Cycle Count Register */\r\n  __IOM uint32_t CPICNT;    /*!< Offset: 0x008 (R/W)  CPI Count Register */\r\n  __IOM uint32_t EXCCNT;    /*!< Offset: 0x00C (R/W)  Exception Overhead Count Register */\r\n  __IOM uint32_t SLEEPCNT;  /*!< Offset: 0x010 (R/W)  Sleep Count Register */\r\n  __IOM uint32_t LSUCNT;    /*!< Offset: 0x014 (R/W)  LSU Count Register */\r\n  __IOM uint32_t FOLDCNT;   /*!< Offset: 0x018 (R/W)  Folded-instruction Count Register */\r\n  __IM uint32_t  PCSR;      /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */\r\n  __IOM uint32_t COMP0;     /*!< Offset: 0x020 (R/W)  Comparator Register 0 */\r\n  __IOM uint32_t MASK0;     /*!< Offset: 0x024 (R/W)  Mask Register 0 */\r\n  __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W)  Function Register 0 */\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t COMP1;     /*!< Offset: 0x030 (R/W)  Comparator Register 1 */\r\n  __IOM uint32_t MASK1;     /*!< Offset: 0x034 (R/W)  Mask Register 1 */\r\n  __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W)  Function Register 1 */\r\n  uint32_t       RESERVED1[1U];\r\n  __IOM uint32_t COMP2;     /*!< Offset: 0x040 (R/W)  Comparator Register 2 */\r\n  __IOM uint32_t MASK2;     /*!< Offset: 0x044 (R/W)  Mask Register 2 */\r\n  __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W)  Function Register 2 */\r\n  uint32_t       RESERVED2[1U];\r\n  __IOM uint32_t COMP3;     /*!< Offset: 0x050 (R/W)  Comparator Register 3 */\r\n  __IOM uint32_t MASK3;     /*!< Offset: 0x054 (R/W)  Mask Register 3 */\r\n  __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W)  Function Register 3 */\r\n} DWT_Type;\r\n\r\n/* DWT Control Register Definitions */\r\n#define DWT_CTRL_NUMCOMP_Pos 28U                             /*!< DWT CTRL: NUMCOMP Position */\r\n#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */\r\n\r\n#define DWT_CTRL_NOTRCPKT_Pos 27U                              /*!< DWT CTRL: NOTRCPKT Position */\r\n#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */\r\n\r\n#define DWT_CTRL_NOEXTTRIG_Pos 26U                               /*!< DWT CTRL: NOEXTTRIG Position */\r\n#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */\r\n\r\n#define DWT_CTRL_NOCYCCNT_Pos 25U                              /*!< DWT CTRL: NOCYCCNT Position */\r\n#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */\r\n\r\n#define DWT_CTRL_NOPRFCNT_Pos 24U                              /*!< DWT CTRL: NOPRFCNT Position */\r\n#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */\r\n\r\n#define DWT_CTRL_CYCEVTENA_Pos 22U                               /*!< DWT CTRL: CYCEVTENA Position */\r\n#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */\r\n\r\n#define DWT_CTRL_FOLDEVTENA_Pos 21U                                /*!< DWT CTRL: FOLDEVTENA Position */\r\n#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */\r\n\r\n#define DWT_CTRL_LSUEVTENA_Pos 20U                               /*!< DWT CTRL: LSUEVTENA Position */\r\n#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */\r\n\r\n#define DWT_CTRL_SLEEPEVTENA_Pos 19U                                 /*!< DWT CTRL: SLEEPEVTENA Position */\r\n#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCEVTENA_Pos 18U                               /*!< DWT CTRL: EXCEVTENA Position */\r\n#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */\r\n\r\n#define DWT_CTRL_CPIEVTENA_Pos 17U                               /*!< DWT CTRL: CPIEVTENA Position */\r\n#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCTRCENA_Pos 16U                               /*!< DWT CTRL: EXCTRCENA Position */\r\n#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */\r\n\r\n#define DWT_CTRL_PCSAMPLENA_Pos 12U                                /*!< DWT CTRL: PCSAMPLENA Position */\r\n#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */\r\n\r\n#define DWT_CTRL_SYNCTAP_Pos 10U                             /*!< DWT CTRL: SYNCTAP Position */\r\n#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */\r\n\r\n#define DWT_CTRL_CYCTAP_Pos 9U                             /*!< DWT CTRL: CYCTAP Position */\r\n#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */\r\n\r\n#define DWT_CTRL_POSTINIT_Pos 5U                               /*!< DWT CTRL: POSTINIT Position */\r\n#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */\r\n\r\n#define DWT_CTRL_POSTPRESET_Pos 1U                                 /*!< DWT CTRL: POSTPRESET Position */\r\n#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */\r\n\r\n#define DWT_CTRL_CYCCNTENA_Pos 0U                                    /*!< DWT CTRL: CYCCNTENA Position */\r\n#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */\r\n\r\n/* DWT CPI Count Register Definitions */\r\n#define DWT_CPICNT_CPICNT_Pos 0U                                    /*!< DWT CPICNT: CPICNT Position */\r\n#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */\r\n\r\n/* DWT Exception Overhead Count Register Definitions */\r\n#define DWT_EXCCNT_EXCCNT_Pos 0U                                    /*!< DWT EXCCNT: EXCCNT Position */\r\n#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */\r\n\r\n/* DWT Sleep Count Register Definitions */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U                                        /*!< DWT SLEEPCNT: SLEEPCNT Position */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */\r\n\r\n/* DWT LSU Count Register Definitions */\r\n#define DWT_LSUCNT_LSUCNT_Pos 0U                                    /*!< DWT LSUCNT: LSUCNT Position */\r\n#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */\r\n\r\n/* DWT Folded-instruction Count Register Definitions */\r\n#define DWT_FOLDCNT_FOLDCNT_Pos 0U                                      /*!< DWT FOLDCNT: FOLDCNT Position */\r\n#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */\r\n\r\n/* DWT Comparator Mask Register Definitions */\r\n#define DWT_MASK_MASK_Pos 0U                                /*!< DWT MASK: MASK Position */\r\n#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */\r\n\r\n/* DWT Comparator Function Register Definitions */\r\n#define DWT_FUNCTION_MATCHED_Pos 24U                                 /*!< DWT FUNCTION: MATCHED Position */\r\n#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR1_Pos 16U                                    /*!< DWT FUNCTION: DATAVADDR1 Position */\r\n#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR0_Pos 12U                                    /*!< DWT FUNCTION: DATAVADDR0 Position */\r\n#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVSIZE_Pos 10U                                   /*!< DWT FUNCTION: DATAVSIZE Position */\r\n#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */\r\n\r\n#define DWT_FUNCTION_LNK1ENA_Pos 9U                                  /*!< DWT FUNCTION: LNK1ENA Position */\r\n#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */\r\n\r\n#define DWT_FUNCTION_DATAVMATCH_Pos 8U                                     /*!< DWT FUNCTION: DATAVMATCH Position */\r\n#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */\r\n\r\n#define DWT_FUNCTION_CYCMATCH_Pos 7U                                   /*!< DWT FUNCTION: CYCMATCH Position */\r\n#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */\r\n\r\n#define DWT_FUNCTION_EMITRANGE_Pos 5U                                    /*!< DWT FUNCTION: EMITRANGE Position */\r\n#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */\r\n\r\n#define DWT_FUNCTION_FUNCTION_Pos 0U                                       /*!< DWT FUNCTION: FUNCTION Position */\r\n#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_DWT */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_TPI     Trace Port Interface (TPI)\r\n  \\brief    Type definitions for the Trace Port Interface (TPI)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Trace Port Interface Register (TPI).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t SSPSR; /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */\r\n  __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */\r\n  uint32_t       RESERVED0[2U];\r\n  __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */\r\n  uint32_t       RESERVED1[55U];\r\n  __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */\r\n  uint32_t       RESERVED2[131U];\r\n  __IM uint32_t  FFSR; /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */\r\n  __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */\r\n  __IM uint32_t  FSCR; /*!< Offset: 0x308 (R/ )  Formatter Synchronization Counter Register */\r\n  uint32_t       RESERVED3[759U];\r\n  __IM uint32_t  TRIGGER;   /*!< Offset: 0xEE8 (R/ )  TRIGGER */\r\n  __IM uint32_t  FIFO0;     /*!< Offset: 0xEEC (R/ )  Integration ETM Data */\r\n  __IM uint32_t  ITATBCTR2; /*!< Offset: 0xEF0 (R/ )  ITATBCTR2 */\r\n  uint32_t       RESERVED4[1U];\r\n  __IM uint32_t  ITATBCTR0; /*!< Offset: 0xEF8 (R/ )  ITATBCTR0 */\r\n  __IM uint32_t  FIFO1;     /*!< Offset: 0xEFC (R/ )  Integration ITM Data */\r\n  __IOM uint32_t ITCTRL;    /*!< Offset: 0xF00 (R/W)  Integration Mode Control */\r\n  uint32_t       RESERVED5[39U];\r\n  __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W)  Claim tag set */\r\n  __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W)  Claim tag clear */\r\n  uint32_t       RESERVED7[8U];\r\n  __IM uint32_t  DEVID;   /*!< Offset: 0xFC8 (R/ )  TPIU_DEVID */\r\n  __IM uint32_t  DEVTYPE; /*!< Offset: 0xFCC (R/ )  TPIU_DEVTYPE */\r\n} TPI_Type;\r\n\r\n/* TPI Asynchronous Clock Prescaler Register Definitions */\r\n#define TPI_ACPR_PRESCALER_Pos 0U                                       /*!< TPI ACPR: PRESCALER Position */\r\n#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */\r\n\r\n/* TPI Selected Pin Protocol Register Definitions */\r\n#define TPI_SPPR_TXMODE_Pos 0U                                 /*!< TPI SPPR: TXMODE Position */\r\n#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */\r\n\r\n/* TPI Formatter and Flush Status Register Definitions */\r\n#define TPI_FFSR_FtNonStop_Pos 3U                                /*!< TPI FFSR: FtNonStop Position */\r\n#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */\r\n\r\n#define TPI_FFSR_TCPresent_Pos 2U                                /*!< TPI FFSR: TCPresent Position */\r\n#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */\r\n\r\n#define TPI_FFSR_FtStopped_Pos 1U                                /*!< TPI FFSR: FtStopped Position */\r\n#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */\r\n\r\n#define TPI_FFSR_FlInProg_Pos 0U                                   /*!< TPI FFSR: FlInProg Position */\r\n#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */\r\n\r\n/* TPI Formatter and Flush Control Register Definitions */\r\n#define TPI_FFCR_TrigIn_Pos 8U                             /*!< TPI FFCR: TrigIn Position */\r\n#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */\r\n\r\n#define TPI_FFCR_EnFCont_Pos 1U                              /*!< TPI FFCR: EnFCont Position */\r\n#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */\r\n\r\n/* TPI TRIGGER Register Definitions */\r\n#define TPI_TRIGGER_TRIGGER_Pos 0U                                     /*!< TPI TRIGGER: TRIGGER Position */\r\n#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */\r\n\r\n/* TPI Integration ETM Data Register Definitions (FIFO0) */\r\n#define TPI_FIFO0_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO0: ITM_ATVALID Position */\r\n#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO0: ITM_bytecount Position */\r\n#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO0: ETM_ATVALID Position */\r\n#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO0: ETM_bytecount Position */\r\n#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM2_Pos 16U                            /*!< TPI FIFO0: ETM2 Position */\r\n#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */\r\n\r\n#define TPI_FIFO0_ETM1_Pos 8U                             /*!< TPI FIFO0: ETM1 Position */\r\n#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */\r\n\r\n#define TPI_FIFO0_ETM0_Pos 0U                                 /*!< TPI FIFO0: ETM0 Position */\r\n#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */\r\n\r\n/* TPI ITATBCTR2 Register Definitions */\r\n#define TPI_ITATBCTR2_ATREADY_Pos 0U                                       /*!< TPI ITATBCTR2: ATREADY Position */\r\n#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/) /*!< TPI ITATBCTR2: ATREADY Mask */\r\n\r\n/* TPI Integration ITM Data Register Definitions (FIFO1) */\r\n#define TPI_FIFO1_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO1: ITM_ATVALID Position */\r\n#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO1: ITM_bytecount Position */\r\n#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO1: ETM_ATVALID Position */\r\n#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO1: ETM_bytecount Position */\r\n#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ITM2_Pos 16U                            /*!< TPI FIFO1: ITM2 Position */\r\n#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */\r\n\r\n#define TPI_FIFO1_ITM1_Pos 8U                             /*!< TPI FIFO1: ITM1 Position */\r\n#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */\r\n\r\n#define TPI_FIFO1_ITM0_Pos 0U                                 /*!< TPI FIFO1: ITM0 Position */\r\n#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */\r\n\r\n/* TPI ITATBCTR0 Register Definitions */\r\n#define TPI_ITATBCTR0_ATREADY_Pos 0U                                       /*!< TPI ITATBCTR0: ATREADY Position */\r\n#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/) /*!< TPI ITATBCTR0: ATREADY Mask */\r\n\r\n/* TPI Integration Mode Control Register Definitions */\r\n#define TPI_ITCTRL_Mode_Pos 0U                                 /*!< TPI ITCTRL: Mode Position */\r\n#define TPI_ITCTRL_Mode_Msk (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */\r\n\r\n/* TPI DEVID Register Definitions */\r\n#define TPI_DEVID_NRZVALID_Pos 11U                               /*!< TPI DEVID: NRZVALID Position */\r\n#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */\r\n\r\n#define TPI_DEVID_MANCVALID_Pos 10U                                /*!< TPI DEVID: MANCVALID Position */\r\n#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */\r\n\r\n#define TPI_DEVID_PTINVALID_Pos 9U                                 /*!< TPI DEVID: PTINVALID Position */\r\n#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */\r\n\r\n#define TPI_DEVID_MinBufSz_Pos 6U                                /*!< TPI DEVID: MinBufSz Position */\r\n#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */\r\n\r\n#define TPI_DEVID_AsynClkIn_Pos 5U                                 /*!< TPI DEVID: AsynClkIn Position */\r\n#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */\r\n\r\n#define TPI_DEVID_NrTraceInput_Pos 0U                                         /*!< TPI DEVID: NrTraceInput Position */\r\n#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */\r\n\r\n/* TPI DEVTYPE Register Definitions */\r\n#define TPI_DEVTYPE_MajorType_Pos 4U                                   /*!< TPI DEVTYPE: MajorType Position */\r\n#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */\r\n\r\n#define TPI_DEVTYPE_SubType_Pos 0U                                     /*!< TPI DEVTYPE: SubType Position */\r\n#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_TPI */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_MPU     Memory Protection Unit (MPU)\r\n  \\brief    Type definitions for the Memory Protection Unit (MPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Memory Protection Unit (MPU).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  TYPE;    /*!< Offset: 0x000 (R/ )  MPU Type Register */\r\n  __IOM uint32_t CTRL;    /*!< Offset: 0x004 (R/W)  MPU Control Register */\r\n  __IOM uint32_t RNR;     /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */\r\n  __IOM uint32_t RBAR;    /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */\r\n  __IOM uint32_t RASR;    /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W)  MPU Alias 1 Region Base Address Register */\r\n  __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W)  MPU Alias 1 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W)  MPU Alias 2 Region Base Address Register */\r\n  __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W)  MPU Alias 2 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W)  MPU Alias 3 Region Base Address Register */\r\n  __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W)  MPU Alias 3 Region Attribute and Size Register */\r\n} MPU_Type;\r\n\r\n/* MPU Type Register Definitions */\r\n#define MPU_TYPE_IREGION_Pos 16U                              /*!< MPU TYPE: IREGION Position */\r\n#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */\r\n\r\n#define MPU_TYPE_DREGION_Pos 8U                               /*!< MPU TYPE: DREGION Position */\r\n#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */\r\n\r\n#define MPU_TYPE_SEPARATE_Pos 0U                                 /*!< MPU TYPE: SEPARATE Position */\r\n#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */\r\n\r\n/* MPU Control Register Definitions */\r\n#define MPU_CTRL_PRIVDEFENA_Pos 2U                               /*!< MPU CTRL: PRIVDEFENA Position */\r\n#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */\r\n\r\n#define MPU_CTRL_HFNMIENA_Pos 1U                             /*!< MPU CTRL: HFNMIENA Position */\r\n#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */\r\n\r\n#define MPU_CTRL_ENABLE_Pos 0U                               /*!< MPU CTRL: ENABLE Position */\r\n#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */\r\n\r\n/* MPU Region Number Register Definitions */\r\n#define MPU_RNR_REGION_Pos 0U                                 /*!< MPU RNR: REGION Position */\r\n#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */\r\n\r\n/* MPU Region Base Address Register Definitions */\r\n#define MPU_RBAR_ADDR_Pos 5U                                 /*!< MPU RBAR: ADDR Position */\r\n#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */\r\n\r\n#define MPU_RBAR_VALID_Pos 4U                          /*!< MPU RBAR: VALID Position */\r\n#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */\r\n\r\n#define MPU_RBAR_REGION_Pos 0U                                 /*!< MPU RBAR: REGION Position */\r\n#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */\r\n\r\n/* MPU Region Attribute and Size Register Definitions */\r\n#define MPU_RASR_ATTRS_Pos 16U                              /*!< MPU RASR: MPU Region Attribute field Position */\r\n#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */\r\n\r\n#define MPU_RASR_XN_Pos 28U                      /*!< MPU RASR: ATTRS.XN Position */\r\n#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */\r\n\r\n#define MPU_RASR_AP_Pos 24U                        /*!< MPU RASR: ATTRS.AP Position */\r\n#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */\r\n\r\n#define MPU_RASR_TEX_Pos 19U                         /*!< MPU RASR: ATTRS.TEX Position */\r\n#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */\r\n\r\n#define MPU_RASR_S_Pos 18U                     /*!< MPU RASR: ATTRS.S Position */\r\n#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */\r\n\r\n#define MPU_RASR_C_Pos 17U                     /*!< MPU RASR: ATTRS.C Position */\r\n#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */\r\n\r\n#define MPU_RASR_B_Pos 16U                     /*!< MPU RASR: ATTRS.B Position */\r\n#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */\r\n\r\n#define MPU_RASR_SRD_Pos 8U                           /*!< MPU RASR: Sub-Region Disable Position */\r\n#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */\r\n\r\n#define MPU_RASR_SIZE_Pos 1U                            /*!< MPU RASR: Region Size Field Position */\r\n#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */\r\n\r\n#define MPU_RASR_ENABLE_Pos 0U                               /*!< MPU RASR: Region enable bit Position */\r\n#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */\r\n\r\n/*@} end of group CMSIS_MPU */\r\n#endif\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    Type definitions for the Core Debug Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Core Debug Register (CoreDebug).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */\r\n  __OM uint32_t  DCRSR; /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */\r\n  __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */\r\n  __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */\r\n} CoreDebug_Type;\r\n\r\n/* Debug Halting Control and Status Register Definitions */\r\n#define CoreDebug_DHCSR_DBGKEY_Pos 16U                                      /*!< CoreDebug DHCSR: DBGKEY Position */\r\n#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U                                     /*!< CoreDebug DHCSR: S_RESET_ST Position */\r\n#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U                                      /*!< CoreDebug DHCSR: S_RETIRE_ST Position */\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U                                   /*!< CoreDebug DHCSR: S_LOCKUP Position */\r\n#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_SLEEP_Pos 18U                                  /*!< CoreDebug DHCSR: S_SLEEP Position */\r\n#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_HALT_Pos 17U                                 /*!< CoreDebug DHCSR: S_HALT Position */\r\n#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_S_REGRDY_Pos 16U                                   /*!< CoreDebug DHCSR: S_REGRDY Position */\r\n#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */\r\n\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U                                       /*!< CoreDebug DHCSR: C_SNAPSTALL Position */\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */\r\n\r\n#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U                                      /*!< CoreDebug DHCSR: C_MASKINTS Position */\r\n#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */\r\n\r\n#define CoreDebug_DHCSR_C_STEP_Pos 2U                                  /*!< CoreDebug DHCSR: C_STEP Position */\r\n#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */\r\n\r\n#define CoreDebug_DHCSR_C_HALT_Pos 1U                                  /*!< CoreDebug DHCSR: C_HALT Position */\r\n#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U                                         /*!< CoreDebug DHCSR: C_DEBUGEN Position */\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */\r\n\r\n/* Debug Core Register Selector Register Definitions */\r\n#define CoreDebug_DCRSR_REGWnR_Pos 16U                                 /*!< CoreDebug DCRSR: REGWnR Position */\r\n#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */\r\n\r\n#define CoreDebug_DCRSR_REGSEL_Pos 0U                                         /*!< CoreDebug DCRSR: REGSEL Position */\r\n#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */\r\n\r\n/* Debug Exception and Monitor Control Register Definitions */\r\n#define CoreDebug_DEMCR_TRCENA_Pos 24U                                 /*!< CoreDebug DEMCR: TRCENA Position */\r\n#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_REQ_Pos 19U                                  /*!< CoreDebug DEMCR: MON_REQ Position */\r\n#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_STEP_Pos 18U                                   /*!< CoreDebug DEMCR: MON_STEP Position */\r\n#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_PEND_Pos 17U                                   /*!< CoreDebug DEMCR: MON_PEND Position */\r\n#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_EN_Pos 16U                                 /*!< CoreDebug DEMCR: MON_EN Position */\r\n#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U                                     /*!< CoreDebug DEMCR: VC_HARDERR Position */\r\n#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_INTERR_Pos 9U                                     /*!< CoreDebug DEMCR: VC_INTERR Position */\r\n#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U                                     /*!< CoreDebug DEMCR: VC_BUSERR Position */\r\n#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_STATERR_Pos 7U                                      /*!< CoreDebug DEMCR: VC_STATERR Position */\r\n#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U                                     /*!< CoreDebug DEMCR: VC_CHKERR Position */\r\n#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U                                      /*!< CoreDebug DEMCR: VC_NOCPERR Position */\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_MMERR_Pos 4U                                    /*!< CoreDebug DEMCR: VC_MMERR Position */\r\n#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */\r\n#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */\r\n\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) ((value << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) ((value & field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of Cortex-M3 Hardware */\r\n#define SCS_BASE       (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define ITM_BASE       (0xE0000000UL)        /*!< ITM Base Address */\r\n#define DWT_BASE       (0xE0001000UL)        /*!< DWT Base Address */\r\n#define TPI_BASE       (0xE0040000UL)        /*!< TPI Base Address */\r\n#define CoreDebug_BASE (0xE000EDF0UL)        /*!< Core Debug Base Address */\r\n#define SysTick_BASE   (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE      (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE       (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCnSCB    ((SCnSCB_Type *)SCS_BASE)          /*!< System control Register not in SCB */\r\n#define SCB       ((SCB_Type *)SCB_BASE)             /*!< SCB configuration struct */\r\n#define SysTick   ((SysTick_Type *)SysTick_BASE)     /*!< SysTick configuration struct */\r\n#define NVIC      ((NVIC_Type *)NVIC_BASE)           /*!< NVIC configuration struct */\r\n#define ITM       ((ITM_Type *)ITM_BASE)             /*!< ITM configuration struct */\r\n#define DWT       ((DWT_Type *)DWT_BASE)             /*!< DWT configuration struct */\r\n#define TPI       ((TPI_Type *)TPI_BASE)             /*!< TPI configuration struct */\r\n#define CoreDebug ((CoreDebug_Type *)CoreDebug_BASE) /*!< Core Debug configuration struct */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n#define MPU_BASE (SCS_BASE + 0x0D90UL)  /*!< Memory Protection Unit */\r\n#define MPU      ((MPU_Type *)MPU_BASE) /*!< Memory Protection Unit */\r\n#endif\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Debug Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Set Priority Grouping\r\n  \\details Sets the priority grouping field using the required unlock sequence.\r\n           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.\r\n           Only values from 0..7 are used.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]      PriorityGroup  Priority grouping field.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) {\r\n  uint32_t reg_value;\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n\r\n  reg_value = SCB->AIRCR;                                                                             /* read old register configuration    */\r\n  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk));                         /* clear bits to change               */\r\n  reg_value  = (reg_value | ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (PriorityGroupTmp << 8U)); /* Insert write key and priorty group */\r\n  SCB->AIRCR = reg_value;\r\n}\r\n\r\n/**\r\n  \\brief   Get Priority Grouping\r\n  \\details Reads the priority grouping field from the NVIC Interrupt Controller.\r\n  \\return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) { return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); }\r\n\r\n/**\r\n  \\brief   Enable External Interrupt\r\n  \\details Enables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Disable External Interrupt\r\n  \\details Disables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) { NVIC->ICER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) {\r\n  return ((uint32_t)(((NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));\r\n}\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  Interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) { NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) { NVIC->ICPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Active Interrupt\r\n  \\details Reads the active register in NVIC and returns the active bit.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not active.\r\n  \\return             1  Interrupt status is active.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) { return ((uint32_t)(((NVIC->IABR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); }\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of an interrupt.\r\n  \\note    The priority cannot be set for every core interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) < 0) {\r\n    SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL) - 4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  } else {\r\n    NVIC->IP[((uint32_t)(int32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of an interrupt.\r\n           The interrupt number can be positive to specify an external (device specific) interrupt,\r\n           or negative to specify an internal (core) interrupt.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) < 0) {\r\n    return (((uint32_t)SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL) - 4UL] >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return (((uint32_t)NVIC->IP[((uint32_t)(int32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Encode Priority\r\n  \\details Encodes the priority for an interrupt with the given priority group,\r\n           preemptive priority value, and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [in]   PreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [in]       SubPriority  Subpriority value (starting from 0).\r\n  \\return                        Encoded priority. Value can be used in the function \\ref NVIC_SetPriority().\r\n */\r\n__STATIC_INLINE uint32_t NVIC_EncodePriority(uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  return (((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | ((SubPriority & (uint32_t)((1UL << (SubPriorityBits)) - 1UL))));\r\n}\r\n\r\n/**\r\n  \\brief   Decode Priority\r\n  \\details Decodes an interrupt priority value with a given priority group to\r\n           preemptive priority value and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.\r\n  \\param [in]         Priority   Priority value, which can be retrieved with the function \\ref NVIC_GetPriority().\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [out] pPreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [out]     pSubPriority  Subpriority value (starting from 0).\r\n */\r\n__STATIC_INLINE void NVIC_DecodePriority(uint32_t Priority, uint32_t PriorityGroup, uint32_t *const pPreemptPriority, uint32_t *const pSubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);\r\n  *pSubPriority     = (Priority) & (uint32_t)((1UL << (SubPriorityBits)) - 1UL);\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__STATIC_INLINE void NVIC_SystemReset(void) {\r\n  __DSB();                                                                                                                         /* Ensure all outstanding memory accesses included\r\n                                                                                                                                      buffered write are completed before reset */\r\n  SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */\r\n  __DSB();                                                                                                                         /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n/* ##################################### Debug In/Output function ########################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_core_DebugFunctions ITM Functions\r\n  \\brief    Functions that access the ITM debug interface.\r\n  @{\r\n */\r\n\r\nextern volatile int32_t ITM_RxBuffer;  /*!< External variable to receive characters. */\r\n#define ITM_RXBUFFER_EMPTY 0x5AA55AA5U /*!< Value identifying \\ref ITM_RxBuffer is ready for next character. */\r\n\r\n/**\r\n  \\brief   ITM Send Character\r\n  \\details Transmits a character via the ITM channel 0, and\r\n           \\li Just returns when no debugger is connected that has booked the output.\r\n           \\li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.\r\n  \\param [in]     ch  Character to transmit.\r\n  \\returns            Character to transmit.\r\n */\r\n__STATIC_INLINE uint32_t ITM_SendChar(uint32_t ch) {\r\n  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */\r\n      ((ITM->TER & 1UL) != 0UL))                  /* ITM Port #0 enabled */\r\n  {\r\n    while (ITM->PORT[0U].u32 == 0UL) {\r\n      __NOP();\r\n    }\r\n    ITM->PORT[0U].u8 = (uint8_t)ch;\r\n  }\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Receive Character\r\n  \\details Inputs a character via the external variable \\ref ITM_RxBuffer.\r\n  \\return             Received character.\r\n  \\return         -1  No character pending.\r\n */\r\n__STATIC_INLINE int32_t ITM_ReceiveChar(void) {\r\n  int32_t ch = -1; /* no character available */\r\n\r\n  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) {\r\n    ch           = ITM_RxBuffer;\r\n    ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */\r\n  }\r\n\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Check Character\r\n  \\details Checks whether a character is pending for reading in the variable \\ref ITM_RxBuffer.\r\n  \\return          0  No character available.\r\n  \\return          1  Character available.\r\n */\r\n__STATIC_INLINE int32_t ITM_CheckChar(void) {\r\n\r\n  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {\r\n    return (0); /* no character available */\r\n  } else {\r\n    return (1); /*    character available */\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_core_DebugFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM3_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Include/core_cm4.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cm4.h\r\n                                                                              * @brief    CMSIS Cortex-M4 Core Peripheral Access Layer Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CM4_H_GENERIC\r\n#define __CORE_CM4_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup Cortex_M4\r\n  @{\r\n */\r\n\r\n/*  CMSIS CM4 definitions */\r\n#define __CM4_CMSIS_VERSION_MAIN (0x04U)                                                       /*!< [31:16] CMSIS HAL main version */\r\n#define __CM4_CMSIS_VERSION_SUB  (0x1EU)                                                       /*!< [15:0]  CMSIS HAL sub version */\r\n#define __CM4_CMSIS_VERSION      ((__CM4_CMSIS_VERSION_MAIN << 16U) | __CM4_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */\r\n\r\n#define __CORTEX_M (0x04U) /*!< Cortex-M Core */\r\n\r\n#if defined(__CC_ARM)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__GNUC__)\r\n#define __ASM           __asm  /*!< asm keyword for GNU Compiler */\r\n#define __INLINE        inline /*!< inline keyword for GNU Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__ICCARM__)\r\n#define __ASM           __asm  /*!< asm keyword for IAR Compiler */\r\n#define __INLINE        inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TMS470__)\r\n#define __ASM           __asm /*!< asm keyword for TI CCS Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TASKING__)\r\n#define __ASM           __asm  /*!< asm keyword for TASKING Compiler */\r\n#define __INLINE        inline /*!< inline keyword for TASKING Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__CSMC__)\r\n#define __packed\r\n#define __ASM           _asm   /*!< asm keyword for COSMIC Compiler */\r\n#define __INLINE        inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */\r\n#define __STATIC_INLINE static inline\r\n\r\n#else\r\n#error Unknown compiler\r\n#endif\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions.\r\n*/\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#if (__FPU_PRESENT == 1)\r\n#define __FPU_USED 1U\r\n#else\r\n#warning \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__TMS470__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"core_cmFunc.h\"  /* Core Function Access */\r\n#include \"core_cmInstr.h\" /* Core Instruction Access */\r\n#include \"core_cmSimd.h\"  /* Compiler specific SIMD Intrinsics */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM4_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_CM4_H_DEPENDANT\r\n#define __CORE_CM4_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __CM4_REV\r\n#define __CM4_REV 0x0000U\r\n#warning \"__CM4_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __FPU_PRESENT\r\n#define __FPU_PRESENT 0U\r\n#warning \"__FPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __MPU_PRESENT\r\n#define __MPU_PRESENT 0U\r\n#warning \"__MPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 4U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group Cortex_M4 */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n  - Core Debug Register\r\n  - Core MPU Register\r\n  - Core FPU Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 16; /*!< bit:  0..15  Reserved */\r\n    uint32_t GE : 4;          /*!< bit: 16..19  Greater than or Equal flags */\r\n    uint32_t _reserved1 : 7;  /*!< bit: 20..26  Reserved */\r\n    uint32_t Q : 1;           /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n#define APSR_Q_Pos 27U                 /*!< APSR: Q Position */\r\n#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */\r\n\r\n#define APSR_GE_Pos 16U                    /*!< APSR: GE Position */\r\n#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;        /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 7; /*!< bit:  9..15  Reserved */\r\n    uint32_t GE : 4;         /*!< bit: 16..19  Greater than or Equal flags */\r\n    uint32_t _reserved1 : 4; /*!< bit: 20..23  Reserved */\r\n    uint32_t T : 1;          /*!< bit:     24  Thumb bit        (read 0) */\r\n    uint32_t IT : 2;         /*!< bit: 25..26  saved IT state   (read 0) */\r\n    uint32_t Q : 1;          /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;          /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;          /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;          /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;          /*!< bit:     31  Negative condition code flag */\r\n  } b;                       /*!< Structure used for bit  access */\r\n  uint32_t w;                /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_Q_Pos 27U                 /*!< xPSR: Q Position */\r\n#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */\r\n\r\n#define xPSR_IT_Pos 25U                  /*!< xPSR: IT Position */\r\n#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_GE_Pos 16U                    /*!< xPSR: GE Position */\r\n#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t nPRIV : 1;       /*!< bit:      0  Execution privilege in Thread mode */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t FPCA : 1;        /*!< bit:      2  FP extension active flag */\r\n    uint32_t _reserved0 : 29; /*!< bit:  3..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_FPCA_Pos 2U                        /*!< CONTROL: FPCA Position */\r\n#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */\r\n\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n#define CONTROL_nPRIV_Pos 0U                             /*!< CONTROL: nPRIV Position */\r\n#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[24U];\r\n  __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[24U];\r\n  __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[24U];\r\n  __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[24U];\r\n  __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */\r\n  uint32_t       RESERVED4[56U];\r\n  __IOM uint8_t  IP[240U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */\r\n  uint32_t       RESERVED5[644U];\r\n  __OM uint32_t  STIR; /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */\r\n} NVIC_Type;\r\n\r\n/* Software Triggered Interrupt Register Definitions */\r\n#define NVIC_STIR_INTID_Pos 0U                                   /*!< STIR: INTLINESNUM Position */\r\n#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID;    /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;     /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n  __IOM uint32_t VTOR;     /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */\r\n  __IOM uint32_t AIRCR;    /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;      /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;      /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  __IOM uint8_t  SHP[12U]; /*!< Offset: 0x018 (R/W)  System Handlers Priority Registers (4-7, 8-11, 12-15) */\r\n  __IOM uint32_t SHCSR;    /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n  __IOM uint32_t CFSR;     /*!< Offset: 0x028 (R/W)  Configurable Fault Status Register */\r\n  __IOM uint32_t HFSR;     /*!< Offset: 0x02C (R/W)  HardFault Status Register */\r\n  __IOM uint32_t DFSR;     /*!< Offset: 0x030 (R/W)  Debug Fault Status Register */\r\n  __IOM uint32_t MMFAR;    /*!< Offset: 0x034 (R/W)  MemManage Fault Address Register */\r\n  __IOM uint32_t BFAR;     /*!< Offset: 0x038 (R/W)  BusFault Address Register */\r\n  __IOM uint32_t AFSR;     /*!< Offset: 0x03C (R/W)  Auxiliary Fault Status Register */\r\n  __IM uint32_t  PFR[2U];  /*!< Offset: 0x040 (R/ )  Processor Feature Register */\r\n  __IM uint32_t  DFR;      /*!< Offset: 0x048 (R/ )  Debug Feature Register */\r\n  __IM uint32_t  ADR;      /*!< Offset: 0x04C (R/ )  Auxiliary Feature Register */\r\n  __IM uint32_t  MMFR[4U]; /*!< Offset: 0x050 (R/ )  Memory Model Feature Register */\r\n  __IM uint32_t  ISAR[5U]; /*!< Offset: 0x060 (R/ )  Instruction Set Attributes Register */\r\n  uint32_t       RESERVED0[5U];\r\n  __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W)  Coprocessor Access Control Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_RETTOBASE_Pos 11U                             /*!< SCB ICSR: RETTOBASE Position */\r\n#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n/* SCB Vector Table Offset Register Definitions */\r\n#define SCB_VTOR_TBLOFF_Pos 7U                                   /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_PRIGROUP_Pos 8U                              /*!< SCB AIRCR: PRIGROUP Position */\r\n#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n#define SCB_AIRCR_VECTRESET_Pos 0U                                   /*!< SCB AIRCR: VECTRESET Position */\r\n#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_BFHFNMIGN_Pos 8U                             /*!< SCB CCR: BFHFNMIGN Position */\r\n#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */\r\n\r\n#define SCB_CCR_DIV_0_TRP_Pos 4U                             /*!< SCB CCR: DIV_0_TRP Position */\r\n#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n#define SCB_CCR_USERSETMPEND_Pos 1U                                /*!< SCB CCR: USERSETMPEND Position */\r\n#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */\r\n\r\n#define SCB_CCR_NONBASETHRDENA_Pos 0U                                      /*!< SCB CCR: NONBASETHRDENA Position */\r\n#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_USGFAULTENA_Pos 18U                                /*!< SCB SHCSR: USGFAULTENA Position */\r\n#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTENA_Pos 17U                                /*!< SCB SHCSR: BUSFAULTENA Position */\r\n#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTENA_Pos 16U                                /*!< SCB SHCSR: MEMFAULTENA Position */\r\n#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U                                   /*!< SCB SHCSR: BUSFAULTPENDED Position */\r\n#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U                                   /*!< SCB SHCSR: MEMFAULTPENDED Position */\r\n#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTPENDED_Pos 12U                                   /*!< SCB SHCSR: USGFAULTPENDED Position */\r\n#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_SYSTICKACT_Pos 11U                               /*!< SCB SHCSR: SYSTICKACT Position */\r\n#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */\r\n\r\n#define SCB_SHCSR_PENDSVACT_Pos 10U                              /*!< SCB SHCSR: PENDSVACT Position */\r\n#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */\r\n\r\n#define SCB_SHCSR_MONITORACT_Pos 8U                                /*!< SCB SHCSR: MONITORACT Position */\r\n#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */\r\n\r\n#define SCB_SHCSR_SVCALLACT_Pos 7U                               /*!< SCB SHCSR: SVCALLACT Position */\r\n#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTACT_Pos 3U                                 /*!< SCB SHCSR: USGFAULTACT Position */\r\n#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTACT_Pos 1U                                 /*!< SCB SHCSR: BUSFAULTACT Position */\r\n#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTACT_Pos 0U                                     /*!< SCB SHCSR: MEMFAULTACT Position */\r\n#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */\r\n\r\n/* SCB Configurable Fault Status Register Definitions */\r\n#define SCB_CFSR_USGFAULTSR_Pos 16U                                   /*!< SCB CFSR: Usage Fault Status Register Position */\r\n#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_BUSFAULTSR_Pos 8U                                  /*!< SCB CFSR: Bus Fault Status Register Position */\r\n#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_MEMFAULTSR_Pos 0U                                      /*!< SCB CFSR: Memory Manage Fault Status Register Position */\r\n#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */\r\n\r\n/* SCB Hard Fault Status Register Definitions */\r\n#define SCB_HFSR_DEBUGEVT_Pos 31U                            /*!< SCB HFSR: DEBUGEVT Position */\r\n#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */\r\n\r\n#define SCB_HFSR_FORCED_Pos 30U                          /*!< SCB HFSR: FORCED Position */\r\n#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */\r\n\r\n#define SCB_HFSR_VECTTBL_Pos 1U                            /*!< SCB HFSR: VECTTBL Position */\r\n#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */\r\n\r\n/* SCB Debug Fault Status Register Definitions */\r\n#define SCB_DFSR_EXTERNAL_Pos 4U                             /*!< SCB DFSR: EXTERNAL Position */\r\n#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */\r\n\r\n#define SCB_DFSR_VCATCH_Pos 3U                           /*!< SCB DFSR: VCATCH Position */\r\n#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */\r\n\r\n#define SCB_DFSR_DWTTRAP_Pos 2U                            /*!< SCB DFSR: DWTTRAP Position */\r\n#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */\r\n\r\n#define SCB_DFSR_BKPT_Pos 1U                         /*!< SCB DFSR: BKPT Position */\r\n#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */\r\n\r\n#define SCB_DFSR_HALTED_Pos 0U                               /*!< SCB DFSR: HALTED Position */\r\n#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)\r\n  \\brief    Type definitions for the System Control and ID Register not in the SCB\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control and ID Register not in the SCB.\r\n */\r\ntypedef struct {\r\n  uint32_t       RESERVED0[1U];\r\n  __IM uint32_t  ICTR;  /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */\r\n  __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */\r\n} SCnSCB_Type;\r\n\r\n/* Interrupt Controller Type Register Definitions */\r\n#define SCnSCB_ICTR_INTLINESNUM_Pos 0U                                         /*!< ICTR: INTLINESNUM Position */\r\n#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */\r\n\r\n/* Auxiliary Control Register Definitions */\r\n#define SCnSCB_ACTLR_DISOOFP_Pos 9U                                /*!< ACTLR: DISOOFP Position */\r\n#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */\r\n\r\n#define SCnSCB_ACTLR_DISFPCA_Pos 8U                                /*!< ACTLR: DISFPCA Position */\r\n#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */\r\n\r\n#define SCnSCB_ACTLR_DISFOLD_Pos 2U                                /*!< ACTLR: DISFOLD Position */\r\n#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */\r\n\r\n#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U                                   /*!< ACTLR: DISDEFWBUF Position */\r\n#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */\r\n\r\n#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U                                       /*!< ACTLR: DISMCYCINT Position */\r\n#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */\r\n\r\n/*@} end of group CMSIS_SCnotSCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_ITM     Instrumentation Trace Macrocell (ITM)\r\n  \\brief    Type definitions for the Instrumentation Trace Macrocell (ITM)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Instrumentation Trace Macrocell Register (ITM).\r\n */\r\ntypedef struct {\r\n  __OM union {\r\n    __OM uint8_t  u8;  /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 8-bit */\r\n    __OM uint16_t u16; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 16-bit */\r\n    __OM uint32_t u32; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 32-bit */\r\n  } PORT[32U];         /*!< Offset: 0x000 ( /W)  ITM Stimulus Port Registers */\r\n  uint32_t       RESERVED0[864U];\r\n  __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W)  ITM Trace Enable Register */\r\n  uint32_t       RESERVED1[15U];\r\n  __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */\r\n  uint32_t       RESERVED2[15U];\r\n  __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */\r\n  uint32_t       RESERVED3[29U];\r\n  __OM uint32_t  IWR;  /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */\r\n  __IM uint32_t  IRR;  /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */\r\n  __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */\r\n  uint32_t       RESERVED4[43U];\r\n  __OM uint32_t  LAR; /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */\r\n  __IM uint32_t  LSR; /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */\r\n  uint32_t       RESERVED5[6U];\r\n  __IM uint32_t  PID4; /*!< Offset: 0xFD0 (R/ )  ITM Peripheral Identification Register #4 */\r\n  __IM uint32_t  PID5; /*!< Offset: 0xFD4 (R/ )  ITM Peripheral Identification Register #5 */\r\n  __IM uint32_t  PID6; /*!< Offset: 0xFD8 (R/ )  ITM Peripheral Identification Register #6 */\r\n  __IM uint32_t  PID7; /*!< Offset: 0xFDC (R/ )  ITM Peripheral Identification Register #7 */\r\n  __IM uint32_t  PID0; /*!< Offset: 0xFE0 (R/ )  ITM Peripheral Identification Register #0 */\r\n  __IM uint32_t  PID1; /*!< Offset: 0xFE4 (R/ )  ITM Peripheral Identification Register #1 */\r\n  __IM uint32_t  PID2; /*!< Offset: 0xFE8 (R/ )  ITM Peripheral Identification Register #2 */\r\n  __IM uint32_t  PID3; /*!< Offset: 0xFEC (R/ )  ITM Peripheral Identification Register #3 */\r\n  __IM uint32_t  CID0; /*!< Offset: 0xFF0 (R/ )  ITM Component  Identification Register #0 */\r\n  __IM uint32_t  CID1; /*!< Offset: 0xFF4 (R/ )  ITM Component  Identification Register #1 */\r\n  __IM uint32_t  CID2; /*!< Offset: 0xFF8 (R/ )  ITM Component  Identification Register #2 */\r\n  __IM uint32_t  CID3; /*!< Offset: 0xFFC (R/ )  ITM Component  Identification Register #3 */\r\n} ITM_Type;\r\n\r\n/* ITM Trace Privilege Register Definitions */\r\n#define ITM_TPR_PRIVMASK_Pos 0U                                  /*!< ITM TPR: PRIVMASK Position */\r\n#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */\r\n\r\n/* ITM Trace Control Register Definitions */\r\n#define ITM_TCR_BUSY_Pos 23U                       /*!< ITM TCR: BUSY Position */\r\n#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */\r\n\r\n#define ITM_TCR_TraceBusID_Pos 16U                                /*!< ITM TCR: ATBID Position */\r\n#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */\r\n\r\n#define ITM_TCR_GTSFREQ_Pos 10U                          /*!< ITM TCR: Global timestamp frequency Position */\r\n#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */\r\n\r\n#define ITM_TCR_TSPrescale_Pos 8U                              /*!< ITM TCR: TSPrescale Position */\r\n#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */\r\n\r\n#define ITM_TCR_SWOENA_Pos 4U                          /*!< ITM TCR: SWOENA Position */\r\n#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */\r\n\r\n#define ITM_TCR_DWTENA_Pos 3U                          /*!< ITM TCR: DWTENA Position */\r\n#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */\r\n\r\n#define ITM_TCR_SYNCENA_Pos 2U                           /*!< ITM TCR: SYNCENA Position */\r\n#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */\r\n\r\n#define ITM_TCR_TSENA_Pos 1U                         /*!< ITM TCR: TSENA Position */\r\n#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */\r\n\r\n#define ITM_TCR_ITMENA_Pos 0U                              /*!< ITM TCR: ITM Enable bit Position */\r\n#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */\r\n\r\n/* ITM Integration Write Register Definitions */\r\n#define ITM_IWR_ATVALIDM_Pos 0U                                /*!< ITM IWR: ATVALIDM Position */\r\n#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */\r\n\r\n/* ITM Integration Read Register Definitions */\r\n#define ITM_IRR_ATREADYM_Pos 0U                                /*!< ITM IRR: ATREADYM Position */\r\n#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */\r\n\r\n/* ITM Integration Mode Control Register Definitions */\r\n#define ITM_IMCR_INTEGRATION_Pos 0U                                    /*!< ITM IMCR: INTEGRATION Position */\r\n#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */\r\n\r\n/* ITM Lock Status Register Definitions */\r\n#define ITM_LSR_ByteAcc_Pos 2U                           /*!< ITM LSR: ByteAcc Position */\r\n#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */\r\n\r\n#define ITM_LSR_Access_Pos 1U                          /*!< ITM LSR: Access Position */\r\n#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */\r\n\r\n#define ITM_LSR_Present_Pos 0U                               /*!< ITM LSR: Present Position */\r\n#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_ITM */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)\r\n  \\brief    Type definitions for the Data Watchpoint and Trace (DWT)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Data Watchpoint and Trace Register (DWT).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;      /*!< Offset: 0x000 (R/W)  Control Register */\r\n  __IOM uint32_t CYCCNT;    /*!< Offset: 0x004 (R/W)  Cycle Count Register */\r\n  __IOM uint32_t CPICNT;    /*!< Offset: 0x008 (R/W)  CPI Count Register */\r\n  __IOM uint32_t EXCCNT;    /*!< Offset: 0x00C (R/W)  Exception Overhead Count Register */\r\n  __IOM uint32_t SLEEPCNT;  /*!< Offset: 0x010 (R/W)  Sleep Count Register */\r\n  __IOM uint32_t LSUCNT;    /*!< Offset: 0x014 (R/W)  LSU Count Register */\r\n  __IOM uint32_t FOLDCNT;   /*!< Offset: 0x018 (R/W)  Folded-instruction Count Register */\r\n  __IM uint32_t  PCSR;      /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */\r\n  __IOM uint32_t COMP0;     /*!< Offset: 0x020 (R/W)  Comparator Register 0 */\r\n  __IOM uint32_t MASK0;     /*!< Offset: 0x024 (R/W)  Mask Register 0 */\r\n  __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W)  Function Register 0 */\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t COMP1;     /*!< Offset: 0x030 (R/W)  Comparator Register 1 */\r\n  __IOM uint32_t MASK1;     /*!< Offset: 0x034 (R/W)  Mask Register 1 */\r\n  __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W)  Function Register 1 */\r\n  uint32_t       RESERVED1[1U];\r\n  __IOM uint32_t COMP2;     /*!< Offset: 0x040 (R/W)  Comparator Register 2 */\r\n  __IOM uint32_t MASK2;     /*!< Offset: 0x044 (R/W)  Mask Register 2 */\r\n  __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W)  Function Register 2 */\r\n  uint32_t       RESERVED2[1U];\r\n  __IOM uint32_t COMP3;     /*!< Offset: 0x050 (R/W)  Comparator Register 3 */\r\n  __IOM uint32_t MASK3;     /*!< Offset: 0x054 (R/W)  Mask Register 3 */\r\n  __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W)  Function Register 3 */\r\n} DWT_Type;\r\n\r\n/* DWT Control Register Definitions */\r\n#define DWT_CTRL_NUMCOMP_Pos 28U                             /*!< DWT CTRL: NUMCOMP Position */\r\n#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */\r\n\r\n#define DWT_CTRL_NOTRCPKT_Pos 27U                              /*!< DWT CTRL: NOTRCPKT Position */\r\n#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */\r\n\r\n#define DWT_CTRL_NOEXTTRIG_Pos 26U                               /*!< DWT CTRL: NOEXTTRIG Position */\r\n#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */\r\n\r\n#define DWT_CTRL_NOCYCCNT_Pos 25U                              /*!< DWT CTRL: NOCYCCNT Position */\r\n#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */\r\n\r\n#define DWT_CTRL_NOPRFCNT_Pos 24U                              /*!< DWT CTRL: NOPRFCNT Position */\r\n#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */\r\n\r\n#define DWT_CTRL_CYCEVTENA_Pos 22U                               /*!< DWT CTRL: CYCEVTENA Position */\r\n#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */\r\n\r\n#define DWT_CTRL_FOLDEVTENA_Pos 21U                                /*!< DWT CTRL: FOLDEVTENA Position */\r\n#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */\r\n\r\n#define DWT_CTRL_LSUEVTENA_Pos 20U                               /*!< DWT CTRL: LSUEVTENA Position */\r\n#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */\r\n\r\n#define DWT_CTRL_SLEEPEVTENA_Pos 19U                                 /*!< DWT CTRL: SLEEPEVTENA Position */\r\n#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCEVTENA_Pos 18U                               /*!< DWT CTRL: EXCEVTENA Position */\r\n#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */\r\n\r\n#define DWT_CTRL_CPIEVTENA_Pos 17U                               /*!< DWT CTRL: CPIEVTENA Position */\r\n#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCTRCENA_Pos 16U                               /*!< DWT CTRL: EXCTRCENA Position */\r\n#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */\r\n\r\n#define DWT_CTRL_PCSAMPLENA_Pos 12U                                /*!< DWT CTRL: PCSAMPLENA Position */\r\n#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */\r\n\r\n#define DWT_CTRL_SYNCTAP_Pos 10U                             /*!< DWT CTRL: SYNCTAP Position */\r\n#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */\r\n\r\n#define DWT_CTRL_CYCTAP_Pos 9U                             /*!< DWT CTRL: CYCTAP Position */\r\n#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */\r\n\r\n#define DWT_CTRL_POSTINIT_Pos 5U                               /*!< DWT CTRL: POSTINIT Position */\r\n#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */\r\n\r\n#define DWT_CTRL_POSTPRESET_Pos 1U                                 /*!< DWT CTRL: POSTPRESET Position */\r\n#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */\r\n\r\n#define DWT_CTRL_CYCCNTENA_Pos 0U                                    /*!< DWT CTRL: CYCCNTENA Position */\r\n#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */\r\n\r\n/* DWT CPI Count Register Definitions */\r\n#define DWT_CPICNT_CPICNT_Pos 0U                                    /*!< DWT CPICNT: CPICNT Position */\r\n#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */\r\n\r\n/* DWT Exception Overhead Count Register Definitions */\r\n#define DWT_EXCCNT_EXCCNT_Pos 0U                                    /*!< DWT EXCCNT: EXCCNT Position */\r\n#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */\r\n\r\n/* DWT Sleep Count Register Definitions */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U                                        /*!< DWT SLEEPCNT: SLEEPCNT Position */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */\r\n\r\n/* DWT LSU Count Register Definitions */\r\n#define DWT_LSUCNT_LSUCNT_Pos 0U                                    /*!< DWT LSUCNT: LSUCNT Position */\r\n#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */\r\n\r\n/* DWT Folded-instruction Count Register Definitions */\r\n#define DWT_FOLDCNT_FOLDCNT_Pos 0U                                      /*!< DWT FOLDCNT: FOLDCNT Position */\r\n#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */\r\n\r\n/* DWT Comparator Mask Register Definitions */\r\n#define DWT_MASK_MASK_Pos 0U                                /*!< DWT MASK: MASK Position */\r\n#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */\r\n\r\n/* DWT Comparator Function Register Definitions */\r\n#define DWT_FUNCTION_MATCHED_Pos 24U                                 /*!< DWT FUNCTION: MATCHED Position */\r\n#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR1_Pos 16U                                    /*!< DWT FUNCTION: DATAVADDR1 Position */\r\n#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR0_Pos 12U                                    /*!< DWT FUNCTION: DATAVADDR0 Position */\r\n#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVSIZE_Pos 10U                                   /*!< DWT FUNCTION: DATAVSIZE Position */\r\n#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */\r\n\r\n#define DWT_FUNCTION_LNK1ENA_Pos 9U                                  /*!< DWT FUNCTION: LNK1ENA Position */\r\n#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */\r\n\r\n#define DWT_FUNCTION_DATAVMATCH_Pos 8U                                     /*!< DWT FUNCTION: DATAVMATCH Position */\r\n#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */\r\n\r\n#define DWT_FUNCTION_CYCMATCH_Pos 7U                                   /*!< DWT FUNCTION: CYCMATCH Position */\r\n#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */\r\n\r\n#define DWT_FUNCTION_EMITRANGE_Pos 5U                                    /*!< DWT FUNCTION: EMITRANGE Position */\r\n#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */\r\n\r\n#define DWT_FUNCTION_FUNCTION_Pos 0U                                       /*!< DWT FUNCTION: FUNCTION Position */\r\n#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_DWT */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_TPI     Trace Port Interface (TPI)\r\n  \\brief    Type definitions for the Trace Port Interface (TPI)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Trace Port Interface Register (TPI).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t SSPSR; /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */\r\n  __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */\r\n  uint32_t       RESERVED0[2U];\r\n  __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */\r\n  uint32_t       RESERVED1[55U];\r\n  __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */\r\n  uint32_t       RESERVED2[131U];\r\n  __IM uint32_t  FFSR; /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */\r\n  __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */\r\n  __IM uint32_t  FSCR; /*!< Offset: 0x308 (R/ )  Formatter Synchronization Counter Register */\r\n  uint32_t       RESERVED3[759U];\r\n  __IM uint32_t  TRIGGER;   /*!< Offset: 0xEE8 (R/ )  TRIGGER */\r\n  __IM uint32_t  FIFO0;     /*!< Offset: 0xEEC (R/ )  Integration ETM Data */\r\n  __IM uint32_t  ITATBCTR2; /*!< Offset: 0xEF0 (R/ )  ITATBCTR2 */\r\n  uint32_t       RESERVED4[1U];\r\n  __IM uint32_t  ITATBCTR0; /*!< Offset: 0xEF8 (R/ )  ITATBCTR0 */\r\n  __IM uint32_t  FIFO1;     /*!< Offset: 0xEFC (R/ )  Integration ITM Data */\r\n  __IOM uint32_t ITCTRL;    /*!< Offset: 0xF00 (R/W)  Integration Mode Control */\r\n  uint32_t       RESERVED5[39U];\r\n  __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W)  Claim tag set */\r\n  __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W)  Claim tag clear */\r\n  uint32_t       RESERVED7[8U];\r\n  __IM uint32_t  DEVID;   /*!< Offset: 0xFC8 (R/ )  TPIU_DEVID */\r\n  __IM uint32_t  DEVTYPE; /*!< Offset: 0xFCC (R/ )  TPIU_DEVTYPE */\r\n} TPI_Type;\r\n\r\n/* TPI Asynchronous Clock Prescaler Register Definitions */\r\n#define TPI_ACPR_PRESCALER_Pos 0U                                       /*!< TPI ACPR: PRESCALER Position */\r\n#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */\r\n\r\n/* TPI Selected Pin Protocol Register Definitions */\r\n#define TPI_SPPR_TXMODE_Pos 0U                                 /*!< TPI SPPR: TXMODE Position */\r\n#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */\r\n\r\n/* TPI Formatter and Flush Status Register Definitions */\r\n#define TPI_FFSR_FtNonStop_Pos 3U                                /*!< TPI FFSR: FtNonStop Position */\r\n#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */\r\n\r\n#define TPI_FFSR_TCPresent_Pos 2U                                /*!< TPI FFSR: TCPresent Position */\r\n#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */\r\n\r\n#define TPI_FFSR_FtStopped_Pos 1U                                /*!< TPI FFSR: FtStopped Position */\r\n#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */\r\n\r\n#define TPI_FFSR_FlInProg_Pos 0U                                   /*!< TPI FFSR: FlInProg Position */\r\n#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */\r\n\r\n/* TPI Formatter and Flush Control Register Definitions */\r\n#define TPI_FFCR_TrigIn_Pos 8U                             /*!< TPI FFCR: TrigIn Position */\r\n#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */\r\n\r\n#define TPI_FFCR_EnFCont_Pos 1U                              /*!< TPI FFCR: EnFCont Position */\r\n#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */\r\n\r\n/* TPI TRIGGER Register Definitions */\r\n#define TPI_TRIGGER_TRIGGER_Pos 0U                                     /*!< TPI TRIGGER: TRIGGER Position */\r\n#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */\r\n\r\n/* TPI Integration ETM Data Register Definitions (FIFO0) */\r\n#define TPI_FIFO0_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO0: ITM_ATVALID Position */\r\n#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO0: ITM_bytecount Position */\r\n#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO0: ETM_ATVALID Position */\r\n#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO0: ETM_bytecount Position */\r\n#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM2_Pos 16U                            /*!< TPI FIFO0: ETM2 Position */\r\n#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */\r\n\r\n#define TPI_FIFO0_ETM1_Pos 8U                             /*!< TPI FIFO0: ETM1 Position */\r\n#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */\r\n\r\n#define TPI_FIFO0_ETM0_Pos 0U                                 /*!< TPI FIFO0: ETM0 Position */\r\n#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */\r\n\r\n/* TPI ITATBCTR2 Register Definitions */\r\n#define TPI_ITATBCTR2_ATREADY_Pos 0U                                       /*!< TPI ITATBCTR2: ATREADY Position */\r\n#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/) /*!< TPI ITATBCTR2: ATREADY Mask */\r\n\r\n/* TPI Integration ITM Data Register Definitions (FIFO1) */\r\n#define TPI_FIFO1_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO1: ITM_ATVALID Position */\r\n#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO1: ITM_bytecount Position */\r\n#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO1: ETM_ATVALID Position */\r\n#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO1: ETM_bytecount Position */\r\n#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ITM2_Pos 16U                            /*!< TPI FIFO1: ITM2 Position */\r\n#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */\r\n\r\n#define TPI_FIFO1_ITM1_Pos 8U                             /*!< TPI FIFO1: ITM1 Position */\r\n#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */\r\n\r\n#define TPI_FIFO1_ITM0_Pos 0U                                 /*!< TPI FIFO1: ITM0 Position */\r\n#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */\r\n\r\n/* TPI ITATBCTR0 Register Definitions */\r\n#define TPI_ITATBCTR0_ATREADY_Pos 0U                                       /*!< TPI ITATBCTR0: ATREADY Position */\r\n#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/) /*!< TPI ITATBCTR0: ATREADY Mask */\r\n\r\n/* TPI Integration Mode Control Register Definitions */\r\n#define TPI_ITCTRL_Mode_Pos 0U                                 /*!< TPI ITCTRL: Mode Position */\r\n#define TPI_ITCTRL_Mode_Msk (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */\r\n\r\n/* TPI DEVID Register Definitions */\r\n#define TPI_DEVID_NRZVALID_Pos 11U                               /*!< TPI DEVID: NRZVALID Position */\r\n#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */\r\n\r\n#define TPI_DEVID_MANCVALID_Pos 10U                                /*!< TPI DEVID: MANCVALID Position */\r\n#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */\r\n\r\n#define TPI_DEVID_PTINVALID_Pos 9U                                 /*!< TPI DEVID: PTINVALID Position */\r\n#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */\r\n\r\n#define TPI_DEVID_MinBufSz_Pos 6U                                /*!< TPI DEVID: MinBufSz Position */\r\n#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */\r\n\r\n#define TPI_DEVID_AsynClkIn_Pos 5U                                 /*!< TPI DEVID: AsynClkIn Position */\r\n#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */\r\n\r\n#define TPI_DEVID_NrTraceInput_Pos 0U                                         /*!< TPI DEVID: NrTraceInput Position */\r\n#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */\r\n\r\n/* TPI DEVTYPE Register Definitions */\r\n#define TPI_DEVTYPE_MajorType_Pos 4U                                   /*!< TPI DEVTYPE: MajorType Position */\r\n#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */\r\n\r\n#define TPI_DEVTYPE_SubType_Pos 0U                                     /*!< TPI DEVTYPE: SubType Position */\r\n#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_TPI */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_MPU     Memory Protection Unit (MPU)\r\n  \\brief    Type definitions for the Memory Protection Unit (MPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Memory Protection Unit (MPU).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  TYPE;    /*!< Offset: 0x000 (R/ )  MPU Type Register */\r\n  __IOM uint32_t CTRL;    /*!< Offset: 0x004 (R/W)  MPU Control Register */\r\n  __IOM uint32_t RNR;     /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */\r\n  __IOM uint32_t RBAR;    /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */\r\n  __IOM uint32_t RASR;    /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W)  MPU Alias 1 Region Base Address Register */\r\n  __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W)  MPU Alias 1 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W)  MPU Alias 2 Region Base Address Register */\r\n  __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W)  MPU Alias 2 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W)  MPU Alias 3 Region Base Address Register */\r\n  __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W)  MPU Alias 3 Region Attribute and Size Register */\r\n} MPU_Type;\r\n\r\n/* MPU Type Register Definitions */\r\n#define MPU_TYPE_IREGION_Pos 16U                              /*!< MPU TYPE: IREGION Position */\r\n#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */\r\n\r\n#define MPU_TYPE_DREGION_Pos 8U                               /*!< MPU TYPE: DREGION Position */\r\n#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */\r\n\r\n#define MPU_TYPE_SEPARATE_Pos 0U                                 /*!< MPU TYPE: SEPARATE Position */\r\n#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */\r\n\r\n/* MPU Control Register Definitions */\r\n#define MPU_CTRL_PRIVDEFENA_Pos 2U                               /*!< MPU CTRL: PRIVDEFENA Position */\r\n#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */\r\n\r\n#define MPU_CTRL_HFNMIENA_Pos 1U                             /*!< MPU CTRL: HFNMIENA Position */\r\n#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */\r\n\r\n#define MPU_CTRL_ENABLE_Pos 0U                               /*!< MPU CTRL: ENABLE Position */\r\n#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */\r\n\r\n/* MPU Region Number Register Definitions */\r\n#define MPU_RNR_REGION_Pos 0U                                 /*!< MPU RNR: REGION Position */\r\n#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */\r\n\r\n/* MPU Region Base Address Register Definitions */\r\n#define MPU_RBAR_ADDR_Pos 5U                                 /*!< MPU RBAR: ADDR Position */\r\n#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */\r\n\r\n#define MPU_RBAR_VALID_Pos 4U                          /*!< MPU RBAR: VALID Position */\r\n#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */\r\n\r\n#define MPU_RBAR_REGION_Pos 0U                                 /*!< MPU RBAR: REGION Position */\r\n#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */\r\n\r\n/* MPU Region Attribute and Size Register Definitions */\r\n#define MPU_RASR_ATTRS_Pos 16U                              /*!< MPU RASR: MPU Region Attribute field Position */\r\n#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */\r\n\r\n#define MPU_RASR_XN_Pos 28U                      /*!< MPU RASR: ATTRS.XN Position */\r\n#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */\r\n\r\n#define MPU_RASR_AP_Pos 24U                        /*!< MPU RASR: ATTRS.AP Position */\r\n#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */\r\n\r\n#define MPU_RASR_TEX_Pos 19U                         /*!< MPU RASR: ATTRS.TEX Position */\r\n#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */\r\n\r\n#define MPU_RASR_S_Pos 18U                     /*!< MPU RASR: ATTRS.S Position */\r\n#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */\r\n\r\n#define MPU_RASR_C_Pos 17U                     /*!< MPU RASR: ATTRS.C Position */\r\n#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */\r\n\r\n#define MPU_RASR_B_Pos 16U                     /*!< MPU RASR: ATTRS.B Position */\r\n#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */\r\n\r\n#define MPU_RASR_SRD_Pos 8U                           /*!< MPU RASR: Sub-Region Disable Position */\r\n#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */\r\n\r\n#define MPU_RASR_SIZE_Pos 1U                            /*!< MPU RASR: Region Size Field Position */\r\n#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */\r\n\r\n#define MPU_RASR_ENABLE_Pos 0U                               /*!< MPU RASR: Region enable bit Position */\r\n#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */\r\n\r\n/*@} end of group CMSIS_MPU */\r\n#endif\r\n\r\n#if (__FPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_FPU     Floating Point Unit (FPU)\r\n  \\brief    Type definitions for the Floating Point Unit (FPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Floating Point Unit (FPU).\r\n */\r\ntypedef struct {\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t FPCCR;  /*!< Offset: 0x004 (R/W)  Floating-Point Context Control Register */\r\n  __IOM uint32_t FPCAR;  /*!< Offset: 0x008 (R/W)  Floating-Point Context Address Register */\r\n  __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W)  Floating-Point Default Status Control Register */\r\n  __IM uint32_t  MVFR0;  /*!< Offset: 0x010 (R/ )  Media and FP Feature Register 0 */\r\n  __IM uint32_t  MVFR1;  /*!< Offset: 0x014 (R/ )  Media and FP Feature Register 1 */\r\n} FPU_Type;\r\n\r\n/* Floating-Point Context Control Register Definitions */\r\n#define FPU_FPCCR_ASPEN_Pos 31U                          /*!< FPCCR: ASPEN bit Position */\r\n#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */\r\n\r\n#define FPU_FPCCR_LSPEN_Pos 30U                          /*!< FPCCR: LSPEN Position */\r\n#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */\r\n\r\n#define FPU_FPCCR_MONRDY_Pos 8U                            /*!< FPCCR: MONRDY Position */\r\n#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */\r\n\r\n#define FPU_FPCCR_BFRDY_Pos 6U                           /*!< FPCCR: BFRDY Position */\r\n#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */\r\n\r\n#define FPU_FPCCR_MMRDY_Pos 5U                           /*!< FPCCR: MMRDY Position */\r\n#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */\r\n\r\n#define FPU_FPCCR_HFRDY_Pos 4U                           /*!< FPCCR: HFRDY Position */\r\n#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */\r\n\r\n#define FPU_FPCCR_THREAD_Pos 3U                            /*!< FPCCR: processor mode bit Position */\r\n#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */\r\n\r\n#define FPU_FPCCR_USER_Pos 1U                          /*!< FPCCR: privilege level bit Position */\r\n#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */\r\n\r\n#define FPU_FPCCR_LSPACT_Pos 0U                                /*!< FPCCR: Lazy state preservation active bit Position */\r\n#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */\r\n\r\n/* Floating-Point Context Address Register Definitions */\r\n#define FPU_FPCAR_ADDRESS_Pos 3U                                      /*!< FPCAR: ADDRESS bit Position */\r\n#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */\r\n\r\n/* Floating-Point Default Status Control Register Definitions */\r\n#define FPU_FPDSCR_AHP_Pos 26U                         /*!< FPDSCR: AHP bit Position */\r\n#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */\r\n\r\n#define FPU_FPDSCR_DN_Pos 25U                        /*!< FPDSCR: DN bit Position */\r\n#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */\r\n\r\n#define FPU_FPDSCR_FZ_Pos 24U                        /*!< FPDSCR: FZ bit Position */\r\n#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */\r\n\r\n#define FPU_FPDSCR_RMode_Pos 22U                           /*!< FPDSCR: RMode bit Position */\r\n#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */\r\n\r\n/* Media and FP Feature Register 0 Definitions */\r\n#define FPU_MVFR0_FP_rounding_modes_Pos 28U                                        /*!< MVFR0: FP rounding modes bits Position */\r\n#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */\r\n\r\n#define FPU_MVFR0_Short_vectors_Pos 24U                                    /*!< MVFR0: Short vectors bits Position */\r\n#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */\r\n\r\n#define FPU_MVFR0_Square_root_Pos 20U                                  /*!< MVFR0: Square root bits Position */\r\n#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */\r\n\r\n#define FPU_MVFR0_Divide_Pos 16U                             /*!< MVFR0: Divide bits Position */\r\n#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */\r\n\r\n#define FPU_MVFR0_FP_excep_trapping_Pos 12U                                        /*!< MVFR0: FP exception trapping bits Position */\r\n#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */\r\n\r\n#define FPU_MVFR0_Double_precision_Pos 8U                                        /*!< MVFR0: Double-precision bits Position */\r\n#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */\r\n\r\n#define FPU_MVFR0_Single_precision_Pos 4U                                        /*!< MVFR0: Single-precision bits Position */\r\n#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */\r\n\r\n#define FPU_MVFR0_A_SIMD_registers_Pos 0U                                            /*!< MVFR0: A_SIMD registers bits Position */\r\n#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */\r\n\r\n/* Media and FP Feature Register 1 Definitions */\r\n#define FPU_MVFR1_FP_fused_MAC_Pos 28U                                   /*!< MVFR1: FP fused MAC bits Position */\r\n#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */\r\n\r\n#define FPU_MVFR1_FP_HPFP_Pos 24U                              /*!< MVFR1: FP HPFP bits Position */\r\n#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */\r\n\r\n#define FPU_MVFR1_D_NaN_mode_Pos 4U                                  /*!< MVFR1: D_NaN mode bits Position */\r\n#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */\r\n\r\n#define FPU_MVFR1_FtZ_mode_Pos 0U                                    /*!< MVFR1: FtZ mode bits Position */\r\n#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */\r\n\r\n/*@} end of group CMSIS_FPU */\r\n#endif\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    Type definitions for the Core Debug Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Core Debug Register (CoreDebug).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */\r\n  __OM uint32_t  DCRSR; /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */\r\n  __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */\r\n  __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */\r\n} CoreDebug_Type;\r\n\r\n/* Debug Halting Control and Status Register Definitions */\r\n#define CoreDebug_DHCSR_DBGKEY_Pos 16U                                      /*!< CoreDebug DHCSR: DBGKEY Position */\r\n#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U                                     /*!< CoreDebug DHCSR: S_RESET_ST Position */\r\n#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U                                      /*!< CoreDebug DHCSR: S_RETIRE_ST Position */\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U                                   /*!< CoreDebug DHCSR: S_LOCKUP Position */\r\n#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_SLEEP_Pos 18U                                  /*!< CoreDebug DHCSR: S_SLEEP Position */\r\n#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_HALT_Pos 17U                                 /*!< CoreDebug DHCSR: S_HALT Position */\r\n#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_S_REGRDY_Pos 16U                                   /*!< CoreDebug DHCSR: S_REGRDY Position */\r\n#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */\r\n\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U                                       /*!< CoreDebug DHCSR: C_SNAPSTALL Position */\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */\r\n\r\n#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U                                      /*!< CoreDebug DHCSR: C_MASKINTS Position */\r\n#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */\r\n\r\n#define CoreDebug_DHCSR_C_STEP_Pos 2U                                  /*!< CoreDebug DHCSR: C_STEP Position */\r\n#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */\r\n\r\n#define CoreDebug_DHCSR_C_HALT_Pos 1U                                  /*!< CoreDebug DHCSR: C_HALT Position */\r\n#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U                                         /*!< CoreDebug DHCSR: C_DEBUGEN Position */\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */\r\n\r\n/* Debug Core Register Selector Register Definitions */\r\n#define CoreDebug_DCRSR_REGWnR_Pos 16U                                 /*!< CoreDebug DCRSR: REGWnR Position */\r\n#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */\r\n\r\n#define CoreDebug_DCRSR_REGSEL_Pos 0U                                         /*!< CoreDebug DCRSR: REGSEL Position */\r\n#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */\r\n\r\n/* Debug Exception and Monitor Control Register Definitions */\r\n#define CoreDebug_DEMCR_TRCENA_Pos 24U                                 /*!< CoreDebug DEMCR: TRCENA Position */\r\n#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_REQ_Pos 19U                                  /*!< CoreDebug DEMCR: MON_REQ Position */\r\n#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_STEP_Pos 18U                                   /*!< CoreDebug DEMCR: MON_STEP Position */\r\n#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_PEND_Pos 17U                                   /*!< CoreDebug DEMCR: MON_PEND Position */\r\n#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_EN_Pos 16U                                 /*!< CoreDebug DEMCR: MON_EN Position */\r\n#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U                                     /*!< CoreDebug DEMCR: VC_HARDERR Position */\r\n#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_INTERR_Pos 9U                                     /*!< CoreDebug DEMCR: VC_INTERR Position */\r\n#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U                                     /*!< CoreDebug DEMCR: VC_BUSERR Position */\r\n#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_STATERR_Pos 7U                                      /*!< CoreDebug DEMCR: VC_STATERR Position */\r\n#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U                                     /*!< CoreDebug DEMCR: VC_CHKERR Position */\r\n#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U                                      /*!< CoreDebug DEMCR: VC_NOCPERR Position */\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_MMERR_Pos 4U                                    /*!< CoreDebug DEMCR: VC_MMERR Position */\r\n#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */\r\n#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */\r\n\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) ((value << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) ((value & field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of Cortex-M4 Hardware */\r\n#define SCS_BASE       (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define ITM_BASE       (0xE0000000UL)        /*!< ITM Base Address */\r\n#define DWT_BASE       (0xE0001000UL)        /*!< DWT Base Address */\r\n#define TPI_BASE       (0xE0040000UL)        /*!< TPI Base Address */\r\n#define CoreDebug_BASE (0xE000EDF0UL)        /*!< Core Debug Base Address */\r\n#define SysTick_BASE   (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE      (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE       (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCnSCB    ((SCnSCB_Type *)SCS_BASE)          /*!< System control Register not in SCB */\r\n#define SCB       ((SCB_Type *)SCB_BASE)             /*!< SCB configuration struct */\r\n#define SysTick   ((SysTick_Type *)SysTick_BASE)     /*!< SysTick configuration struct */\r\n#define NVIC      ((NVIC_Type *)NVIC_BASE)           /*!< NVIC configuration struct */\r\n#define ITM       ((ITM_Type *)ITM_BASE)             /*!< ITM configuration struct */\r\n#define DWT       ((DWT_Type *)DWT_BASE)             /*!< DWT configuration struct */\r\n#define TPI       ((TPI_Type *)TPI_BASE)             /*!< TPI configuration struct */\r\n#define CoreDebug ((CoreDebug_Type *)CoreDebug_BASE) /*!< Core Debug configuration struct */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n#define MPU_BASE (SCS_BASE + 0x0D90UL)  /*!< Memory Protection Unit */\r\n#define MPU      ((MPU_Type *)MPU_BASE) /*!< Memory Protection Unit */\r\n#endif\r\n\r\n#if (__FPU_PRESENT == 1U)\r\n#define FPU_BASE (SCS_BASE + 0x0F30UL)  /*!< Floating Point Unit */\r\n#define FPU      ((FPU_Type *)FPU_BASE) /*!< Floating Point Unit */\r\n#endif\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Debug Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Set Priority Grouping\r\n  \\details Sets the priority grouping field using the required unlock sequence.\r\n           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.\r\n           Only values from 0..7 are used.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]      PriorityGroup  Priority grouping field.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) {\r\n  uint32_t reg_value;\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n\r\n  reg_value = SCB->AIRCR;                                                                             /* read old register configuration    */\r\n  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk));                         /* clear bits to change               */\r\n  reg_value  = (reg_value | ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (PriorityGroupTmp << 8U)); /* Insert write key and priorty group */\r\n  SCB->AIRCR = reg_value;\r\n}\r\n\r\n/**\r\n  \\brief   Get Priority Grouping\r\n  \\details Reads the priority grouping field from the NVIC Interrupt Controller.\r\n  \\return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) { return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); }\r\n\r\n/**\r\n  \\brief   Enable External Interrupt\r\n  \\details Enables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Disable External Interrupt\r\n  \\details Disables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) { NVIC->ICER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) {\r\n  return ((uint32_t)(((NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));\r\n}\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  Interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) { NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) { NVIC->ICPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Active Interrupt\r\n  \\details Reads the active register in NVIC and returns the active bit.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not active.\r\n  \\return             1  Interrupt status is active.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) { return ((uint32_t)(((NVIC->IABR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); }\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of an interrupt.\r\n  \\note    The priority cannot be set for every core interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) < 0) {\r\n    SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL) - 4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  } else {\r\n    NVIC->IP[((uint32_t)(int32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of an interrupt.\r\n           The interrupt number can be positive to specify an external (device specific) interrupt,\r\n           or negative to specify an internal (core) interrupt.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) < 0) {\r\n    return (((uint32_t)SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL) - 4UL] >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return (((uint32_t)NVIC->IP[((uint32_t)(int32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Encode Priority\r\n  \\details Encodes the priority for an interrupt with the given priority group,\r\n           preemptive priority value, and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [in]   PreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [in]       SubPriority  Subpriority value (starting from 0).\r\n  \\return                        Encoded priority. Value can be used in the function \\ref NVIC_SetPriority().\r\n */\r\n__STATIC_INLINE uint32_t NVIC_EncodePriority(uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  return (((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | ((SubPriority & (uint32_t)((1UL << (SubPriorityBits)) - 1UL))));\r\n}\r\n\r\n/**\r\n  \\brief   Decode Priority\r\n  \\details Decodes an interrupt priority value with a given priority group to\r\n           preemptive priority value and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.\r\n  \\param [in]         Priority   Priority value, which can be retrieved with the function \\ref NVIC_GetPriority().\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [out] pPreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [out]     pSubPriority  Subpriority value (starting from 0).\r\n */\r\n__STATIC_INLINE void NVIC_DecodePriority(uint32_t Priority, uint32_t PriorityGroup, uint32_t *const pPreemptPriority, uint32_t *const pSubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);\r\n  *pSubPriority     = (Priority) & (uint32_t)((1UL << (SubPriorityBits)) - 1UL);\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__STATIC_INLINE void NVIC_SystemReset(void) {\r\n  __DSB();                                                                                                                         /* Ensure all outstanding memory accesses included\r\n                                                                                                                                      buffered write are completed before reset */\r\n  SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */\r\n  __DSB();                                                                                                                         /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n/* ##################################### Debug In/Output function ########################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_core_DebugFunctions ITM Functions\r\n  \\brief    Functions that access the ITM debug interface.\r\n  @{\r\n */\r\n\r\nextern volatile int32_t ITM_RxBuffer;  /*!< External variable to receive characters. */\r\n#define ITM_RXBUFFER_EMPTY 0x5AA55AA5U /*!< Value identifying \\ref ITM_RxBuffer is ready for next character. */\r\n\r\n/**\r\n  \\brief   ITM Send Character\r\n  \\details Transmits a character via the ITM channel 0, and\r\n           \\li Just returns when no debugger is connected that has booked the output.\r\n           \\li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.\r\n  \\param [in]     ch  Character to transmit.\r\n  \\returns            Character to transmit.\r\n */\r\n__STATIC_INLINE uint32_t ITM_SendChar(uint32_t ch) {\r\n  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */\r\n      ((ITM->TER & 1UL) != 0UL))                  /* ITM Port #0 enabled */\r\n  {\r\n    while (ITM->PORT[0U].u32 == 0UL) {\r\n      __NOP();\r\n    }\r\n    ITM->PORT[0U].u8 = (uint8_t)ch;\r\n  }\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Receive Character\r\n  \\details Inputs a character via the external variable \\ref ITM_RxBuffer.\r\n  \\return             Received character.\r\n  \\return         -1  No character pending.\r\n */\r\n__STATIC_INLINE int32_t ITM_ReceiveChar(void) {\r\n  int32_t ch = -1; /* no character available */\r\n\r\n  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) {\r\n    ch           = ITM_RxBuffer;\r\n    ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */\r\n  }\r\n\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Check Character\r\n  \\details Checks whether a character is pending for reading in the variable \\ref ITM_RxBuffer.\r\n  \\return          0  No character available.\r\n  \\return          1  Character available.\r\n */\r\n__STATIC_INLINE int32_t ITM_CheckChar(void) {\r\n\r\n  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {\r\n    return (0); /* no character available */\r\n  } else {\r\n    return (1); /*    character available */\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_core_DebugFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM4_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Include/core_cm7.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cm7.h\r\n                                                                              * @brief    CMSIS Cortex-M7 Core Peripheral Access Layer Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CM7_H_GENERIC\r\n#define __CORE_CM7_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup Cortex_M7\r\n  @{\r\n */\r\n\r\n/*  CMSIS CM7 definitions */\r\n#define __CM7_CMSIS_VERSION_MAIN (0x04U)                                                       /*!< [31:16] CMSIS HAL main version */\r\n#define __CM7_CMSIS_VERSION_SUB  (0x1EU)                                                       /*!< [15:0]  CMSIS HAL sub version */\r\n#define __CM7_CMSIS_VERSION      ((__CM7_CMSIS_VERSION_MAIN << 16U) | __CM7_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */\r\n\r\n#define __CORTEX_M (0x07U) /*!< Cortex-M Core */\r\n\r\n#if defined(__CC_ARM)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__GNUC__)\r\n#define __ASM           __asm  /*!< asm keyword for GNU Compiler */\r\n#define __INLINE        inline /*!< inline keyword for GNU Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__ICCARM__)\r\n#define __ASM           __asm  /*!< asm keyword for IAR Compiler */\r\n#define __INLINE        inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TMS470__)\r\n#define __ASM           __asm /*!< asm keyword for TI CCS Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TASKING__)\r\n#define __ASM           __asm  /*!< asm keyword for TASKING Compiler */\r\n#define __INLINE        inline /*!< inline keyword for TASKING Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__CSMC__)\r\n#define __packed\r\n#define __ASM           _asm   /*!< asm keyword for COSMIC Compiler */\r\n#define __INLINE        inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */\r\n#define __STATIC_INLINE static inline\r\n\r\n#else\r\n#error Unknown compiler\r\n#endif\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions.\r\n*/\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#if (__FPU_PRESENT == 1)\r\n#define __FPU_USED 1U\r\n#else\r\n#warning \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__TMS470__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#if (__FPU_PRESENT == 1U)\r\n#define __FPU_USED 1U\r\n#else\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#define __FPU_USED 0U\r\n#endif\r\n#else\r\n#define __FPU_USED 0U\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"core_cmFunc.h\"  /* Core Function Access */\r\n#include \"core_cmInstr.h\" /* Core Instruction Access */\r\n#include \"core_cmSimd.h\"  /* Compiler specific SIMD Intrinsics */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM7_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_CM7_H_DEPENDANT\r\n#define __CORE_CM7_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __CM7_REV\r\n#define __CM7_REV 0x0000U\r\n#warning \"__CM7_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __FPU_PRESENT\r\n#define __FPU_PRESENT 0U\r\n#warning \"__FPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __MPU_PRESENT\r\n#define __MPU_PRESENT 0U\r\n#warning \"__MPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __ICACHE_PRESENT\r\n#define __ICACHE_PRESENT 0U\r\n#warning \"__ICACHE_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __DCACHE_PRESENT\r\n#define __DCACHE_PRESENT 0U\r\n#warning \"__DCACHE_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __DTCM_PRESENT\r\n#define __DTCM_PRESENT 0U\r\n#warning \"__DTCM_PRESENT        not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 3U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group Cortex_M7 */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n  - Core Debug Register\r\n  - Core MPU Register\r\n  - Core FPU Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 16; /*!< bit:  0..15  Reserved */\r\n    uint32_t GE : 4;          /*!< bit: 16..19  Greater than or Equal flags */\r\n    uint32_t _reserved1 : 7;  /*!< bit: 20..26  Reserved */\r\n    uint32_t Q : 1;           /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n#define APSR_Q_Pos 27U                 /*!< APSR: Q Position */\r\n#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */\r\n\r\n#define APSR_GE_Pos 16U                    /*!< APSR: GE Position */\r\n#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;        /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 7; /*!< bit:  9..15  Reserved */\r\n    uint32_t GE : 4;         /*!< bit: 16..19  Greater than or Equal flags */\r\n    uint32_t _reserved1 : 4; /*!< bit: 20..23  Reserved */\r\n    uint32_t T : 1;          /*!< bit:     24  Thumb bit        (read 0) */\r\n    uint32_t IT : 2;         /*!< bit: 25..26  saved IT state   (read 0) */\r\n    uint32_t Q : 1;          /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;          /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;          /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;          /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;          /*!< bit:     31  Negative condition code flag */\r\n  } b;                       /*!< Structure used for bit  access */\r\n  uint32_t w;                /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_Q_Pos 27U                 /*!< xPSR: Q Position */\r\n#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */\r\n\r\n#define xPSR_IT_Pos 25U                  /*!< xPSR: IT Position */\r\n#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_GE_Pos 16U                    /*!< xPSR: GE Position */\r\n#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t nPRIV : 1;       /*!< bit:      0  Execution privilege in Thread mode */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t FPCA : 1;        /*!< bit:      2  FP extension active flag */\r\n    uint32_t _reserved0 : 29; /*!< bit:  3..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_FPCA_Pos 2U                        /*!< CONTROL: FPCA Position */\r\n#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */\r\n\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n#define CONTROL_nPRIV_Pos 0U                             /*!< CONTROL: nPRIV Position */\r\n#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[24U];\r\n  __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[24U];\r\n  __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[24U];\r\n  __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[24U];\r\n  __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */\r\n  uint32_t       RESERVED4[56U];\r\n  __IOM uint8_t  IP[240U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */\r\n  uint32_t       RESERVED5[644U];\r\n  __OM uint32_t  STIR; /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */\r\n} NVIC_Type;\r\n\r\n/* Software Triggered Interrupt Register Definitions */\r\n#define NVIC_STIR_INTID_Pos 0U                                   /*!< STIR: INTLINESNUM Position */\r\n#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID;       /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;        /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n  __IOM uint32_t VTOR;        /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */\r\n  __IOM uint32_t AIRCR;       /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;         /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;         /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  __IOM uint8_t  SHPR[12U];   /*!< Offset: 0x018 (R/W)  System Handlers Priority Registers (4-7, 8-11, 12-15) */\r\n  __IOM uint32_t SHCSR;       /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n  __IOM uint32_t CFSR;        /*!< Offset: 0x028 (R/W)  Configurable Fault Status Register */\r\n  __IOM uint32_t HFSR;        /*!< Offset: 0x02C (R/W)  HardFault Status Register */\r\n  __IOM uint32_t DFSR;        /*!< Offset: 0x030 (R/W)  Debug Fault Status Register */\r\n  __IOM uint32_t MMFAR;       /*!< Offset: 0x034 (R/W)  MemManage Fault Address Register */\r\n  __IOM uint32_t BFAR;        /*!< Offset: 0x038 (R/W)  BusFault Address Register */\r\n  __IOM uint32_t AFSR;        /*!< Offset: 0x03C (R/W)  Auxiliary Fault Status Register */\r\n  __IM uint32_t  ID_PFR[2U];  /*!< Offset: 0x040 (R/ )  Processor Feature Register */\r\n  __IM uint32_t  ID_DFR;      /*!< Offset: 0x048 (R/ )  Debug Feature Register */\r\n  __IM uint32_t  ID_AFR;      /*!< Offset: 0x04C (R/ )  Auxiliary Feature Register */\r\n  __IM uint32_t  ID_MFR[4U];  /*!< Offset: 0x050 (R/ )  Memory Model Feature Register */\r\n  __IM uint32_t  ID_ISAR[5U]; /*!< Offset: 0x060 (R/ )  Instruction Set Attributes Register */\r\n  uint32_t       RESERVED0[1U];\r\n  __IM uint32_t  CLIDR;  /*!< Offset: 0x078 (R/ )  Cache Level ID register */\r\n  __IM uint32_t  CTR;    /*!< Offset: 0x07C (R/ )  Cache Type register */\r\n  __IM uint32_t  CCSIDR; /*!< Offset: 0x080 (R/ )  Cache Size ID Register */\r\n  __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W)  Cache Size Selection Register */\r\n  __IOM uint32_t CPACR;  /*!< Offset: 0x088 (R/W)  Coprocessor Access Control Register */\r\n  uint32_t       RESERVED3[93U];\r\n  __OM uint32_t  STIR; /*!< Offset: 0x200 ( /W)  Software Triggered Interrupt Register */\r\n  uint32_t       RESERVED4[15U];\r\n  __IM uint32_t  MVFR0; /*!< Offset: 0x240 (R/ )  Media and VFP Feature Register 0 */\r\n  __IM uint32_t  MVFR1; /*!< Offset: 0x244 (R/ )  Media and VFP Feature Register 1 */\r\n  __IM uint32_t  MVFR2; /*!< Offset: 0x248 (R/ )  Media and VFP Feature Register 1 */\r\n  uint32_t       RESERVED5[1U];\r\n  __OM uint32_t  ICIALLU; /*!< Offset: 0x250 ( /W)  I-Cache Invalidate All to PoU */\r\n  uint32_t       RESERVED6[1U];\r\n  __OM uint32_t  ICIMVAU;  /*!< Offset: 0x258 ( /W)  I-Cache Invalidate by MVA to PoU */\r\n  __OM uint32_t  DCIMVAC;  /*!< Offset: 0x25C ( /W)  D-Cache Invalidate by MVA to PoC */\r\n  __OM uint32_t  DCISW;    /*!< Offset: 0x260 ( /W)  D-Cache Invalidate by Set-way */\r\n  __OM uint32_t  DCCMVAU;  /*!< Offset: 0x264 ( /W)  D-Cache Clean by MVA to PoU */\r\n  __OM uint32_t  DCCMVAC;  /*!< Offset: 0x268 ( /W)  D-Cache Clean by MVA to PoC */\r\n  __OM uint32_t  DCCSW;    /*!< Offset: 0x26C ( /W)  D-Cache Clean by Set-way */\r\n  __OM uint32_t  DCCIMVAC; /*!< Offset: 0x270 ( /W)  D-Cache Clean and Invalidate by MVA to PoC */\r\n  __OM uint32_t  DCCISW;   /*!< Offset: 0x274 ( /W)  D-Cache Clean and Invalidate by Set-way */\r\n  uint32_t       RESERVED7[6U];\r\n  __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W)  Instruction Tightly-Coupled Memory Control Register */\r\n  __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W)  Data Tightly-Coupled Memory Control Registers */\r\n  __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W)  AHBP Control Register */\r\n  __IOM uint32_t CACR;   /*!< Offset: 0x29C (R/W)  L1 Cache Control Register */\r\n  __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W)  AHB Slave Control Register */\r\n  uint32_t       RESERVED8[1U];\r\n  __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W)  Auxiliary Bus Fault Status Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_RETTOBASE_Pos 11U                             /*!< SCB ICSR: RETTOBASE Position */\r\n#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n/* SCB Vector Table Offset Register Definitions */\r\n#define SCB_VTOR_TBLOFF_Pos 7U                                   /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_PRIGROUP_Pos 8U                              /*!< SCB AIRCR: PRIGROUP Position */\r\n#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n#define SCB_AIRCR_VECTRESET_Pos 0U                                   /*!< SCB AIRCR: VECTRESET Position */\r\n#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_BP_Pos 18U                     /*!< SCB CCR: Branch prediction enable bit Position */\r\n#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: Branch prediction enable bit Mask */\r\n\r\n#define SCB_CCR_IC_Pos 17U                     /*!< SCB CCR: Instruction cache enable bit Position */\r\n#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: Instruction cache enable bit Mask */\r\n\r\n#define SCB_CCR_DC_Pos 16U                     /*!< SCB CCR: Cache enable bit Position */\r\n#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: Cache enable bit Mask */\r\n\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_BFHFNMIGN_Pos 8U                             /*!< SCB CCR: BFHFNMIGN Position */\r\n#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */\r\n\r\n#define SCB_CCR_DIV_0_TRP_Pos 4U                             /*!< SCB CCR: DIV_0_TRP Position */\r\n#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n#define SCB_CCR_USERSETMPEND_Pos 1U                                /*!< SCB CCR: USERSETMPEND Position */\r\n#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */\r\n\r\n#define SCB_CCR_NONBASETHRDENA_Pos 0U                                      /*!< SCB CCR: NONBASETHRDENA Position */\r\n#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_USGFAULTENA_Pos 18U                                /*!< SCB SHCSR: USGFAULTENA Position */\r\n#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTENA_Pos 17U                                /*!< SCB SHCSR: BUSFAULTENA Position */\r\n#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTENA_Pos 16U                                /*!< SCB SHCSR: MEMFAULTENA Position */\r\n#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U                                   /*!< SCB SHCSR: BUSFAULTPENDED Position */\r\n#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U                                   /*!< SCB SHCSR: MEMFAULTPENDED Position */\r\n#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTPENDED_Pos 12U                                   /*!< SCB SHCSR: USGFAULTPENDED Position */\r\n#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_SYSTICKACT_Pos 11U                               /*!< SCB SHCSR: SYSTICKACT Position */\r\n#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */\r\n\r\n#define SCB_SHCSR_PENDSVACT_Pos 10U                              /*!< SCB SHCSR: PENDSVACT Position */\r\n#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */\r\n\r\n#define SCB_SHCSR_MONITORACT_Pos 8U                                /*!< SCB SHCSR: MONITORACT Position */\r\n#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */\r\n\r\n#define SCB_SHCSR_SVCALLACT_Pos 7U                               /*!< SCB SHCSR: SVCALLACT Position */\r\n#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTACT_Pos 3U                                 /*!< SCB SHCSR: USGFAULTACT Position */\r\n#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTACT_Pos 1U                                 /*!< SCB SHCSR: BUSFAULTACT Position */\r\n#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTACT_Pos 0U                                     /*!< SCB SHCSR: MEMFAULTACT Position */\r\n#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */\r\n\r\n/* SCB Configurable Fault Status Register Definitions */\r\n#define SCB_CFSR_USGFAULTSR_Pos 16U                                   /*!< SCB CFSR: Usage Fault Status Register Position */\r\n#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_BUSFAULTSR_Pos 8U                                  /*!< SCB CFSR: Bus Fault Status Register Position */\r\n#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_MEMFAULTSR_Pos 0U                                      /*!< SCB CFSR: Memory Manage Fault Status Register Position */\r\n#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */\r\n\r\n/* SCB Hard Fault Status Register Definitions */\r\n#define SCB_HFSR_DEBUGEVT_Pos 31U                            /*!< SCB HFSR: DEBUGEVT Position */\r\n#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */\r\n\r\n#define SCB_HFSR_FORCED_Pos 30U                          /*!< SCB HFSR: FORCED Position */\r\n#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */\r\n\r\n#define SCB_HFSR_VECTTBL_Pos 1U                            /*!< SCB HFSR: VECTTBL Position */\r\n#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */\r\n\r\n/* SCB Debug Fault Status Register Definitions */\r\n#define SCB_DFSR_EXTERNAL_Pos 4U                             /*!< SCB DFSR: EXTERNAL Position */\r\n#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */\r\n\r\n#define SCB_DFSR_VCATCH_Pos 3U                           /*!< SCB DFSR: VCATCH Position */\r\n#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */\r\n\r\n#define SCB_DFSR_DWTTRAP_Pos 2U                            /*!< SCB DFSR: DWTTRAP Position */\r\n#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */\r\n\r\n#define SCB_DFSR_BKPT_Pos 1U                         /*!< SCB DFSR: BKPT Position */\r\n#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */\r\n\r\n#define SCB_DFSR_HALTED_Pos 0U                               /*!< SCB DFSR: HALTED Position */\r\n#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */\r\n\r\n/* SCB Cache Level ID Register Definitions */\r\n#define SCB_CLIDR_LOUU_Pos 27U                         /*!< SCB CLIDR: LoUU Position */\r\n#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */\r\n\r\n#define SCB_CLIDR_LOC_Pos 24U                        /*!< SCB CLIDR: LoC Position */\r\n#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */\r\n\r\n/* SCB Cache Type Register Definitions */\r\n#define SCB_CTR_FORMAT_Pos 29U                         /*!< SCB CTR: Format Position */\r\n#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */\r\n\r\n#define SCB_CTR_CWG_Pos 24U                        /*!< SCB CTR: CWG Position */\r\n#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */\r\n\r\n#define SCB_CTR_ERG_Pos 20U                        /*!< SCB CTR: ERG Position */\r\n#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */\r\n\r\n#define SCB_CTR_DMINLINE_Pos 16U                             /*!< SCB CTR: DminLine Position */\r\n#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */\r\n\r\n#define SCB_CTR_IMINLINE_Pos 0U                                  /*!< SCB CTR: ImInLine Position */\r\n#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */\r\n\r\n/* SCB Cache Size ID Register Definitions */\r\n#define SCB_CCSIDR_WT_Pos 31U                        /*!< SCB CCSIDR: WT Position */\r\n#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */\r\n\r\n#define SCB_CCSIDR_WB_Pos 30U                        /*!< SCB CCSIDR: WB Position */\r\n#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */\r\n\r\n#define SCB_CCSIDR_RA_Pos 29U                        /*!< SCB CCSIDR: RA Position */\r\n#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */\r\n\r\n#define SCB_CCSIDR_WA_Pos 28U                        /*!< SCB CCSIDR: WA Position */\r\n#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */\r\n\r\n#define SCB_CCSIDR_NUMSETS_Pos 13U                                  /*!< SCB CCSIDR: NumSets Position */\r\n#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */\r\n\r\n#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U                                        /*!< SCB CCSIDR: Associativity Position */\r\n#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */\r\n\r\n#define SCB_CCSIDR_LINESIZE_Pos 0U                                   /*!< SCB CCSIDR: LineSize Position */\r\n#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */\r\n\r\n/* SCB Cache Size Selection Register Definitions */\r\n#define SCB_CSSELR_LEVEL_Pos 1U                            /*!< SCB CSSELR: Level Position */\r\n#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */\r\n\r\n#define SCB_CSSELR_IND_Pos 0U                              /*!< SCB CSSELR: InD Position */\r\n#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */\r\n\r\n/* SCB Software Triggered Interrupt Register Definitions */\r\n#define SCB_STIR_INTID_Pos 0U                                  /*!< SCB STIR: INTID Position */\r\n#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */\r\n\r\n/* SCB D-Cache Invalidate by Set-way Register Definitions */\r\n#define SCB_DCISW_WAY_Pos 30U                        /*!< SCB DCISW: Way Position */\r\n#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */\r\n\r\n#define SCB_DCISW_SET_Pos 5U                             /*!< SCB DCISW: Set Position */\r\n#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */\r\n\r\n/* SCB D-Cache Clean by Set-way Register Definitions */\r\n#define SCB_DCCSW_WAY_Pos 30U                        /*!< SCB DCCSW: Way Position */\r\n#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */\r\n\r\n#define SCB_DCCSW_SET_Pos 5U                             /*!< SCB DCCSW: Set Position */\r\n#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */\r\n\r\n/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */\r\n#define SCB_DCCISW_WAY_Pos 30U                         /*!< SCB DCCISW: Way Position */\r\n#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */\r\n\r\n#define SCB_DCCISW_SET_Pos 5U                              /*!< SCB DCCISW: Set Position */\r\n#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */\r\n\r\n/* Instruction Tightly-Coupled Memory Control Register Definitions */\r\n#define SCB_ITCMCR_SZ_Pos 3U                           /*!< SCB ITCMCR: SZ Position */\r\n#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */\r\n\r\n#define SCB_ITCMCR_RETEN_Pos 2U                            /*!< SCB ITCMCR: RETEN Position */\r\n#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */\r\n\r\n#define SCB_ITCMCR_RMW_Pos 1U                          /*!< SCB ITCMCR: RMW Position */\r\n#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */\r\n\r\n#define SCB_ITCMCR_EN_Pos 0U                             /*!< SCB ITCMCR: EN Position */\r\n#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */\r\n\r\n/* Data Tightly-Coupled Memory Control Register Definitions */\r\n#define SCB_DTCMCR_SZ_Pos 3U                           /*!< SCB DTCMCR: SZ Position */\r\n#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */\r\n\r\n#define SCB_DTCMCR_RETEN_Pos 2U                            /*!< SCB DTCMCR: RETEN Position */\r\n#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */\r\n\r\n#define SCB_DTCMCR_RMW_Pos 1U                          /*!< SCB DTCMCR: RMW Position */\r\n#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */\r\n\r\n#define SCB_DTCMCR_EN_Pos 0U                             /*!< SCB DTCMCR: EN Position */\r\n#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */\r\n\r\n/* AHBP Control Register Definitions */\r\n#define SCB_AHBPCR_SZ_Pos 1U                         /*!< SCB AHBPCR: SZ Position */\r\n#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */\r\n\r\n#define SCB_AHBPCR_EN_Pos 0U                             /*!< SCB AHBPCR: EN Position */\r\n#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */\r\n\r\n/* L1 Cache Control Register Definitions */\r\n#define SCB_CACR_FORCEWT_Pos 2U                            /*!< SCB CACR: FORCEWT Position */\r\n#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */\r\n\r\n#define SCB_CACR_ECCEN_Pos 1U                          /*!< SCB CACR: ECCEN Position */\r\n#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< SCB CACR: ECCEN Mask */\r\n\r\n#define SCB_CACR_SIWT_Pos 0U                             /*!< SCB CACR: SIWT Position */\r\n#define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */\r\n\r\n/* AHBS Control Register Definitions */\r\n#define SCB_AHBSCR_INITCOUNT_Pos 11U                                  /*!< SCB AHBSCR: INITCOUNT Position */\r\n#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */\r\n\r\n#define SCB_AHBSCR_TPRI_Pos 2U                               /*!< SCB AHBSCR: TPRI Position */\r\n#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBPCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */\r\n\r\n#define SCB_AHBSCR_CTL_Pos 0U                              /*!< SCB AHBSCR: CTL Position*/\r\n#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBPCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */\r\n\r\n/* Auxiliary Bus Fault Status Register Definitions */\r\n#define SCB_ABFSR_AXIMTYPE_Pos 8U                              /*!< SCB ABFSR: AXIMTYPE Position*/\r\n#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */\r\n\r\n#define SCB_ABFSR_EPPB_Pos 4U                          /*!< SCB ABFSR: EPPB Position*/\r\n#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */\r\n\r\n#define SCB_ABFSR_AXIM_Pos 3U                          /*!< SCB ABFSR: AXIM Position*/\r\n#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */\r\n\r\n#define SCB_ABFSR_AHBP_Pos 2U                          /*!< SCB ABFSR: AHBP Position*/\r\n#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */\r\n\r\n#define SCB_ABFSR_DTCM_Pos 1U                          /*!< SCB ABFSR: DTCM Position*/\r\n#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */\r\n\r\n#define SCB_ABFSR_ITCM_Pos 0U                              /*!< SCB ABFSR: ITCM Position*/\r\n#define SCB_ABFSR_ITCM_Msk (1UL /*<< SCB_ABFSR_ITCM_Pos*/) /*!< SCB ABFSR: ITCM Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)\r\n  \\brief    Type definitions for the System Control and ID Register not in the SCB\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control and ID Register not in the SCB.\r\n */\r\ntypedef struct {\r\n  uint32_t       RESERVED0[1U];\r\n  __IM uint32_t  ICTR;  /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */\r\n  __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */\r\n} SCnSCB_Type;\r\n\r\n/* Interrupt Controller Type Register Definitions */\r\n#define SCnSCB_ICTR_INTLINESNUM_Pos 0U                                         /*!< ICTR: INTLINESNUM Position */\r\n#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */\r\n\r\n/* Auxiliary Control Register Definitions */\r\n#define SCnSCB_ACTLR_DISITMATBFLUSH_Pos 12U                                      /*!< ACTLR: DISITMATBFLUSH Position */\r\n#define SCnSCB_ACTLR_DISITMATBFLUSH_Msk (1UL << SCnSCB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */\r\n\r\n#define SCnSCB_ACTLR_DISRAMODE_Pos 11U                                 /*!< ACTLR: DISRAMODE Position */\r\n#define SCnSCB_ACTLR_DISRAMODE_Msk (1UL << SCnSCB_ACTLR_DISRAMODE_Pos) /*!< ACTLR: DISRAMODE Mask */\r\n\r\n#define SCnSCB_ACTLR_FPEXCODIS_Pos 10U                                 /*!< ACTLR: FPEXCODIS Position */\r\n#define SCnSCB_ACTLR_FPEXCODIS_Msk (1UL << SCnSCB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */\r\n\r\n#define SCnSCB_ACTLR_DISFOLD_Pos 2U                                /*!< ACTLR: DISFOLD Position */\r\n#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */\r\n\r\n#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U                                       /*!< ACTLR: DISMCYCINT Position */\r\n#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */\r\n\r\n/*@} end of group CMSIS_SCnotSCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_ITM     Instrumentation Trace Macrocell (ITM)\r\n  \\brief    Type definitions for the Instrumentation Trace Macrocell (ITM)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Instrumentation Trace Macrocell Register (ITM).\r\n */\r\ntypedef struct {\r\n  __OM union {\r\n    __OM uint8_t  u8;  /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 8-bit */\r\n    __OM uint16_t u16; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 16-bit */\r\n    __OM uint32_t u32; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 32-bit */\r\n  } PORT[32U];         /*!< Offset: 0x000 ( /W)  ITM Stimulus Port Registers */\r\n  uint32_t       RESERVED0[864U];\r\n  __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W)  ITM Trace Enable Register */\r\n  uint32_t       RESERVED1[15U];\r\n  __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */\r\n  uint32_t       RESERVED2[15U];\r\n  __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */\r\n  uint32_t       RESERVED3[29U];\r\n  __OM uint32_t  IWR;  /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */\r\n  __IM uint32_t  IRR;  /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */\r\n  __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */\r\n  uint32_t       RESERVED4[43U];\r\n  __OM uint32_t  LAR; /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */\r\n  __IM uint32_t  LSR; /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */\r\n  uint32_t       RESERVED5[6U];\r\n  __IM uint32_t  PID4; /*!< Offset: 0xFD0 (R/ )  ITM Peripheral Identification Register #4 */\r\n  __IM uint32_t  PID5; /*!< Offset: 0xFD4 (R/ )  ITM Peripheral Identification Register #5 */\r\n  __IM uint32_t  PID6; /*!< Offset: 0xFD8 (R/ )  ITM Peripheral Identification Register #6 */\r\n  __IM uint32_t  PID7; /*!< Offset: 0xFDC (R/ )  ITM Peripheral Identification Register #7 */\r\n  __IM uint32_t  PID0; /*!< Offset: 0xFE0 (R/ )  ITM Peripheral Identification Register #0 */\r\n  __IM uint32_t  PID1; /*!< Offset: 0xFE4 (R/ )  ITM Peripheral Identification Register #1 */\r\n  __IM uint32_t  PID2; /*!< Offset: 0xFE8 (R/ )  ITM Peripheral Identification Register #2 */\r\n  __IM uint32_t  PID3; /*!< Offset: 0xFEC (R/ )  ITM Peripheral Identification Register #3 */\r\n  __IM uint32_t  CID0; /*!< Offset: 0xFF0 (R/ )  ITM Component  Identification Register #0 */\r\n  __IM uint32_t  CID1; /*!< Offset: 0xFF4 (R/ )  ITM Component  Identification Register #1 */\r\n  __IM uint32_t  CID2; /*!< Offset: 0xFF8 (R/ )  ITM Component  Identification Register #2 */\r\n  __IM uint32_t  CID3; /*!< Offset: 0xFFC (R/ )  ITM Component  Identification Register #3 */\r\n} ITM_Type;\r\n\r\n/* ITM Trace Privilege Register Definitions */\r\n#define ITM_TPR_PRIVMASK_Pos 0U                                  /*!< ITM TPR: PRIVMASK Position */\r\n#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */\r\n\r\n/* ITM Trace Control Register Definitions */\r\n#define ITM_TCR_BUSY_Pos 23U                       /*!< ITM TCR: BUSY Position */\r\n#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */\r\n\r\n#define ITM_TCR_TraceBusID_Pos 16U                                /*!< ITM TCR: ATBID Position */\r\n#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */\r\n\r\n#define ITM_TCR_GTSFREQ_Pos 10U                          /*!< ITM TCR: Global timestamp frequency Position */\r\n#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */\r\n\r\n#define ITM_TCR_TSPrescale_Pos 8U                              /*!< ITM TCR: TSPrescale Position */\r\n#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */\r\n\r\n#define ITM_TCR_SWOENA_Pos 4U                          /*!< ITM TCR: SWOENA Position */\r\n#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */\r\n\r\n#define ITM_TCR_DWTENA_Pos 3U                          /*!< ITM TCR: DWTENA Position */\r\n#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */\r\n\r\n#define ITM_TCR_SYNCENA_Pos 2U                           /*!< ITM TCR: SYNCENA Position */\r\n#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */\r\n\r\n#define ITM_TCR_TSENA_Pos 1U                         /*!< ITM TCR: TSENA Position */\r\n#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */\r\n\r\n#define ITM_TCR_ITMENA_Pos 0U                              /*!< ITM TCR: ITM Enable bit Position */\r\n#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */\r\n\r\n/* ITM Integration Write Register Definitions */\r\n#define ITM_IWR_ATVALIDM_Pos 0U                                /*!< ITM IWR: ATVALIDM Position */\r\n#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */\r\n\r\n/* ITM Integration Read Register Definitions */\r\n#define ITM_IRR_ATREADYM_Pos 0U                                /*!< ITM IRR: ATREADYM Position */\r\n#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */\r\n\r\n/* ITM Integration Mode Control Register Definitions */\r\n#define ITM_IMCR_INTEGRATION_Pos 0U                                    /*!< ITM IMCR: INTEGRATION Position */\r\n#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */\r\n\r\n/* ITM Lock Status Register Definitions */\r\n#define ITM_LSR_ByteAcc_Pos 2U                           /*!< ITM LSR: ByteAcc Position */\r\n#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */\r\n\r\n#define ITM_LSR_Access_Pos 1U                          /*!< ITM LSR: Access Position */\r\n#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */\r\n\r\n#define ITM_LSR_Present_Pos 0U                               /*!< ITM LSR: Present Position */\r\n#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_ITM */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)\r\n  \\brief    Type definitions for the Data Watchpoint and Trace (DWT)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Data Watchpoint and Trace Register (DWT).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;      /*!< Offset: 0x000 (R/W)  Control Register */\r\n  __IOM uint32_t CYCCNT;    /*!< Offset: 0x004 (R/W)  Cycle Count Register */\r\n  __IOM uint32_t CPICNT;    /*!< Offset: 0x008 (R/W)  CPI Count Register */\r\n  __IOM uint32_t EXCCNT;    /*!< Offset: 0x00C (R/W)  Exception Overhead Count Register */\r\n  __IOM uint32_t SLEEPCNT;  /*!< Offset: 0x010 (R/W)  Sleep Count Register */\r\n  __IOM uint32_t LSUCNT;    /*!< Offset: 0x014 (R/W)  LSU Count Register */\r\n  __IOM uint32_t FOLDCNT;   /*!< Offset: 0x018 (R/W)  Folded-instruction Count Register */\r\n  __IM uint32_t  PCSR;      /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */\r\n  __IOM uint32_t COMP0;     /*!< Offset: 0x020 (R/W)  Comparator Register 0 */\r\n  __IOM uint32_t MASK0;     /*!< Offset: 0x024 (R/W)  Mask Register 0 */\r\n  __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W)  Function Register 0 */\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t COMP1;     /*!< Offset: 0x030 (R/W)  Comparator Register 1 */\r\n  __IOM uint32_t MASK1;     /*!< Offset: 0x034 (R/W)  Mask Register 1 */\r\n  __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W)  Function Register 1 */\r\n  uint32_t       RESERVED1[1U];\r\n  __IOM uint32_t COMP2;     /*!< Offset: 0x040 (R/W)  Comparator Register 2 */\r\n  __IOM uint32_t MASK2;     /*!< Offset: 0x044 (R/W)  Mask Register 2 */\r\n  __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W)  Function Register 2 */\r\n  uint32_t       RESERVED2[1U];\r\n  __IOM uint32_t COMP3;     /*!< Offset: 0x050 (R/W)  Comparator Register 3 */\r\n  __IOM uint32_t MASK3;     /*!< Offset: 0x054 (R/W)  Mask Register 3 */\r\n  __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W)  Function Register 3 */\r\n  uint32_t       RESERVED3[981U];\r\n  __OM uint32_t  LAR; /*!< Offset: 0xFB0 (  W)  Lock Access Register */\r\n  __IM uint32_t  LSR; /*!< Offset: 0xFB4 (R  )  Lock Status Register */\r\n} DWT_Type;\r\n\r\n/* DWT Control Register Definitions */\r\n#define DWT_CTRL_NUMCOMP_Pos 28U                             /*!< DWT CTRL: NUMCOMP Position */\r\n#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */\r\n\r\n#define DWT_CTRL_NOTRCPKT_Pos 27U                              /*!< DWT CTRL: NOTRCPKT Position */\r\n#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */\r\n\r\n#define DWT_CTRL_NOEXTTRIG_Pos 26U                               /*!< DWT CTRL: NOEXTTRIG Position */\r\n#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */\r\n\r\n#define DWT_CTRL_NOCYCCNT_Pos 25U                              /*!< DWT CTRL: NOCYCCNT Position */\r\n#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */\r\n\r\n#define DWT_CTRL_NOPRFCNT_Pos 24U                              /*!< DWT CTRL: NOPRFCNT Position */\r\n#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */\r\n\r\n#define DWT_CTRL_CYCEVTENA_Pos 22U                               /*!< DWT CTRL: CYCEVTENA Position */\r\n#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */\r\n\r\n#define DWT_CTRL_FOLDEVTENA_Pos 21U                                /*!< DWT CTRL: FOLDEVTENA Position */\r\n#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */\r\n\r\n#define DWT_CTRL_LSUEVTENA_Pos 20U                               /*!< DWT CTRL: LSUEVTENA Position */\r\n#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */\r\n\r\n#define DWT_CTRL_SLEEPEVTENA_Pos 19U                                 /*!< DWT CTRL: SLEEPEVTENA Position */\r\n#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCEVTENA_Pos 18U                               /*!< DWT CTRL: EXCEVTENA Position */\r\n#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */\r\n\r\n#define DWT_CTRL_CPIEVTENA_Pos 17U                               /*!< DWT CTRL: CPIEVTENA Position */\r\n#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCTRCENA_Pos 16U                               /*!< DWT CTRL: EXCTRCENA Position */\r\n#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */\r\n\r\n#define DWT_CTRL_PCSAMPLENA_Pos 12U                                /*!< DWT CTRL: PCSAMPLENA Position */\r\n#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */\r\n\r\n#define DWT_CTRL_SYNCTAP_Pos 10U                             /*!< DWT CTRL: SYNCTAP Position */\r\n#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */\r\n\r\n#define DWT_CTRL_CYCTAP_Pos 9U                             /*!< DWT CTRL: CYCTAP Position */\r\n#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */\r\n\r\n#define DWT_CTRL_POSTINIT_Pos 5U                               /*!< DWT CTRL: POSTINIT Position */\r\n#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */\r\n\r\n#define DWT_CTRL_POSTPRESET_Pos 1U                                 /*!< DWT CTRL: POSTPRESET Position */\r\n#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */\r\n\r\n#define DWT_CTRL_CYCCNTENA_Pos 0U                                    /*!< DWT CTRL: CYCCNTENA Position */\r\n#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */\r\n\r\n/* DWT CPI Count Register Definitions */\r\n#define DWT_CPICNT_CPICNT_Pos 0U                                    /*!< DWT CPICNT: CPICNT Position */\r\n#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */\r\n\r\n/* DWT Exception Overhead Count Register Definitions */\r\n#define DWT_EXCCNT_EXCCNT_Pos 0U                                    /*!< DWT EXCCNT: EXCCNT Position */\r\n#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */\r\n\r\n/* DWT Sleep Count Register Definitions */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U                                        /*!< DWT SLEEPCNT: SLEEPCNT Position */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */\r\n\r\n/* DWT LSU Count Register Definitions */\r\n#define DWT_LSUCNT_LSUCNT_Pos 0U                                    /*!< DWT LSUCNT: LSUCNT Position */\r\n#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */\r\n\r\n/* DWT Folded-instruction Count Register Definitions */\r\n#define DWT_FOLDCNT_FOLDCNT_Pos 0U                                      /*!< DWT FOLDCNT: FOLDCNT Position */\r\n#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */\r\n\r\n/* DWT Comparator Mask Register Definitions */\r\n#define DWT_MASK_MASK_Pos 0U                                /*!< DWT MASK: MASK Position */\r\n#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */\r\n\r\n/* DWT Comparator Function Register Definitions */\r\n#define DWT_FUNCTION_MATCHED_Pos 24U                                 /*!< DWT FUNCTION: MATCHED Position */\r\n#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR1_Pos 16U                                    /*!< DWT FUNCTION: DATAVADDR1 Position */\r\n#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR0_Pos 12U                                    /*!< DWT FUNCTION: DATAVADDR0 Position */\r\n#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVSIZE_Pos 10U                                   /*!< DWT FUNCTION: DATAVSIZE Position */\r\n#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */\r\n\r\n#define DWT_FUNCTION_LNK1ENA_Pos 9U                                  /*!< DWT FUNCTION: LNK1ENA Position */\r\n#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */\r\n\r\n#define DWT_FUNCTION_DATAVMATCH_Pos 8U                                     /*!< DWT FUNCTION: DATAVMATCH Position */\r\n#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */\r\n\r\n#define DWT_FUNCTION_CYCMATCH_Pos 7U                                   /*!< DWT FUNCTION: CYCMATCH Position */\r\n#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */\r\n\r\n#define DWT_FUNCTION_EMITRANGE_Pos 5U                                    /*!< DWT FUNCTION: EMITRANGE Position */\r\n#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */\r\n\r\n#define DWT_FUNCTION_FUNCTION_Pos 0U                                       /*!< DWT FUNCTION: FUNCTION Position */\r\n#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_DWT */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_TPI     Trace Port Interface (TPI)\r\n  \\brief    Type definitions for the Trace Port Interface (TPI)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Trace Port Interface Register (TPI).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t SSPSR; /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */\r\n  __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */\r\n  uint32_t       RESERVED0[2U];\r\n  __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */\r\n  uint32_t       RESERVED1[55U];\r\n  __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */\r\n  uint32_t       RESERVED2[131U];\r\n  __IM uint32_t  FFSR; /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */\r\n  __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */\r\n  __IM uint32_t  FSCR; /*!< Offset: 0x308 (R/ )  Formatter Synchronization Counter Register */\r\n  uint32_t       RESERVED3[759U];\r\n  __IM uint32_t  TRIGGER;   /*!< Offset: 0xEE8 (R/ )  TRIGGER */\r\n  __IM uint32_t  FIFO0;     /*!< Offset: 0xEEC (R/ )  Integration ETM Data */\r\n  __IM uint32_t  ITATBCTR2; /*!< Offset: 0xEF0 (R/ )  ITATBCTR2 */\r\n  uint32_t       RESERVED4[1U];\r\n  __IM uint32_t  ITATBCTR0; /*!< Offset: 0xEF8 (R/ )  ITATBCTR0 */\r\n  __IM uint32_t  FIFO1;     /*!< Offset: 0xEFC (R/ )  Integration ITM Data */\r\n  __IOM uint32_t ITCTRL;    /*!< Offset: 0xF00 (R/W)  Integration Mode Control */\r\n  uint32_t       RESERVED5[39U];\r\n  __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W)  Claim tag set */\r\n  __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W)  Claim tag clear */\r\n  uint32_t       RESERVED7[8U];\r\n  __IM uint32_t  DEVID;   /*!< Offset: 0xFC8 (R/ )  TPIU_DEVID */\r\n  __IM uint32_t  DEVTYPE; /*!< Offset: 0xFCC (R/ )  TPIU_DEVTYPE */\r\n} TPI_Type;\r\n\r\n/* TPI Asynchronous Clock Prescaler Register Definitions */\r\n#define TPI_ACPR_PRESCALER_Pos 0U                                       /*!< TPI ACPR: PRESCALER Position */\r\n#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */\r\n\r\n/* TPI Selected Pin Protocol Register Definitions */\r\n#define TPI_SPPR_TXMODE_Pos 0U                                 /*!< TPI SPPR: TXMODE Position */\r\n#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */\r\n\r\n/* TPI Formatter and Flush Status Register Definitions */\r\n#define TPI_FFSR_FtNonStop_Pos 3U                                /*!< TPI FFSR: FtNonStop Position */\r\n#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */\r\n\r\n#define TPI_FFSR_TCPresent_Pos 2U                                /*!< TPI FFSR: TCPresent Position */\r\n#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */\r\n\r\n#define TPI_FFSR_FtStopped_Pos 1U                                /*!< TPI FFSR: FtStopped Position */\r\n#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */\r\n\r\n#define TPI_FFSR_FlInProg_Pos 0U                                   /*!< TPI FFSR: FlInProg Position */\r\n#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */\r\n\r\n/* TPI Formatter and Flush Control Register Definitions */\r\n#define TPI_FFCR_TrigIn_Pos 8U                             /*!< TPI FFCR: TrigIn Position */\r\n#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */\r\n\r\n#define TPI_FFCR_EnFCont_Pos 1U                              /*!< TPI FFCR: EnFCont Position */\r\n#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */\r\n\r\n/* TPI TRIGGER Register Definitions */\r\n#define TPI_TRIGGER_TRIGGER_Pos 0U                                     /*!< TPI TRIGGER: TRIGGER Position */\r\n#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */\r\n\r\n/* TPI Integration ETM Data Register Definitions (FIFO0) */\r\n#define TPI_FIFO0_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO0: ITM_ATVALID Position */\r\n#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO0: ITM_bytecount Position */\r\n#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO0: ETM_ATVALID Position */\r\n#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO0: ETM_bytecount Position */\r\n#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM2_Pos 16U                            /*!< TPI FIFO0: ETM2 Position */\r\n#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */\r\n\r\n#define TPI_FIFO0_ETM1_Pos 8U                             /*!< TPI FIFO0: ETM1 Position */\r\n#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */\r\n\r\n#define TPI_FIFO0_ETM0_Pos 0U                                 /*!< TPI FIFO0: ETM0 Position */\r\n#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */\r\n\r\n/* TPI ITATBCTR2 Register Definitions */\r\n#define TPI_ITATBCTR2_ATREADY_Pos 0U                                       /*!< TPI ITATBCTR2: ATREADY Position */\r\n#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/) /*!< TPI ITATBCTR2: ATREADY Mask */\r\n\r\n/* TPI Integration ITM Data Register Definitions (FIFO1) */\r\n#define TPI_FIFO1_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO1: ITM_ATVALID Position */\r\n#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO1: ITM_bytecount Position */\r\n#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO1: ETM_ATVALID Position */\r\n#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO1: ETM_bytecount Position */\r\n#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ITM2_Pos 16U                            /*!< TPI FIFO1: ITM2 Position */\r\n#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */\r\n\r\n#define TPI_FIFO1_ITM1_Pos 8U                             /*!< TPI FIFO1: ITM1 Position */\r\n#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */\r\n\r\n#define TPI_FIFO1_ITM0_Pos 0U                                 /*!< TPI FIFO1: ITM0 Position */\r\n#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */\r\n\r\n/* TPI ITATBCTR0 Register Definitions */\r\n#define TPI_ITATBCTR0_ATREADY_Pos 0U                                       /*!< TPI ITATBCTR0: ATREADY Position */\r\n#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/) /*!< TPI ITATBCTR0: ATREADY Mask */\r\n\r\n/* TPI Integration Mode Control Register Definitions */\r\n#define TPI_ITCTRL_Mode_Pos 0U                                 /*!< TPI ITCTRL: Mode Position */\r\n#define TPI_ITCTRL_Mode_Msk (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */\r\n\r\n/* TPI DEVID Register Definitions */\r\n#define TPI_DEVID_NRZVALID_Pos 11U                               /*!< TPI DEVID: NRZVALID Position */\r\n#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */\r\n\r\n#define TPI_DEVID_MANCVALID_Pos 10U                                /*!< TPI DEVID: MANCVALID Position */\r\n#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */\r\n\r\n#define TPI_DEVID_PTINVALID_Pos 9U                                 /*!< TPI DEVID: PTINVALID Position */\r\n#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */\r\n\r\n#define TPI_DEVID_MinBufSz_Pos 6U                                /*!< TPI DEVID: MinBufSz Position */\r\n#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */\r\n\r\n#define TPI_DEVID_AsynClkIn_Pos 5U                                 /*!< TPI DEVID: AsynClkIn Position */\r\n#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */\r\n\r\n#define TPI_DEVID_NrTraceInput_Pos 0U                                         /*!< TPI DEVID: NrTraceInput Position */\r\n#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */\r\n\r\n/* TPI DEVTYPE Register Definitions */\r\n#define TPI_DEVTYPE_MajorType_Pos 4U                                   /*!< TPI DEVTYPE: MajorType Position */\r\n#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */\r\n\r\n#define TPI_DEVTYPE_SubType_Pos 0U                                     /*!< TPI DEVTYPE: SubType Position */\r\n#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_TPI */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_MPU     Memory Protection Unit (MPU)\r\n  \\brief    Type definitions for the Memory Protection Unit (MPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Memory Protection Unit (MPU).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  TYPE;    /*!< Offset: 0x000 (R/ )  MPU Type Register */\r\n  __IOM uint32_t CTRL;    /*!< Offset: 0x004 (R/W)  MPU Control Register */\r\n  __IOM uint32_t RNR;     /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */\r\n  __IOM uint32_t RBAR;    /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */\r\n  __IOM uint32_t RASR;    /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W)  MPU Alias 1 Region Base Address Register */\r\n  __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W)  MPU Alias 1 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W)  MPU Alias 2 Region Base Address Register */\r\n  __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W)  MPU Alias 2 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W)  MPU Alias 3 Region Base Address Register */\r\n  __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W)  MPU Alias 3 Region Attribute and Size Register */\r\n} MPU_Type;\r\n\r\n/* MPU Type Register Definitions */\r\n#define MPU_TYPE_IREGION_Pos 16U                              /*!< MPU TYPE: IREGION Position */\r\n#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */\r\n\r\n#define MPU_TYPE_DREGION_Pos 8U                               /*!< MPU TYPE: DREGION Position */\r\n#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */\r\n\r\n#define MPU_TYPE_SEPARATE_Pos 0U                                 /*!< MPU TYPE: SEPARATE Position */\r\n#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */\r\n\r\n/* MPU Control Register Definitions */\r\n#define MPU_CTRL_PRIVDEFENA_Pos 2U                               /*!< MPU CTRL: PRIVDEFENA Position */\r\n#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */\r\n\r\n#define MPU_CTRL_HFNMIENA_Pos 1U                             /*!< MPU CTRL: HFNMIENA Position */\r\n#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */\r\n\r\n#define MPU_CTRL_ENABLE_Pos 0U                               /*!< MPU CTRL: ENABLE Position */\r\n#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */\r\n\r\n/* MPU Region Number Register Definitions */\r\n#define MPU_RNR_REGION_Pos 0U                                 /*!< MPU RNR: REGION Position */\r\n#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */\r\n\r\n/* MPU Region Base Address Register Definitions */\r\n#define MPU_RBAR_ADDR_Pos 5U                                 /*!< MPU RBAR: ADDR Position */\r\n#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */\r\n\r\n#define MPU_RBAR_VALID_Pos 4U                          /*!< MPU RBAR: VALID Position */\r\n#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */\r\n\r\n#define MPU_RBAR_REGION_Pos 0U                                 /*!< MPU RBAR: REGION Position */\r\n#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */\r\n\r\n/* MPU Region Attribute and Size Register Definitions */\r\n#define MPU_RASR_ATTRS_Pos 16U                              /*!< MPU RASR: MPU Region Attribute field Position */\r\n#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */\r\n\r\n#define MPU_RASR_XN_Pos 28U                      /*!< MPU RASR: ATTRS.XN Position */\r\n#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */\r\n\r\n#define MPU_RASR_AP_Pos 24U                        /*!< MPU RASR: ATTRS.AP Position */\r\n#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */\r\n\r\n#define MPU_RASR_TEX_Pos 19U                         /*!< MPU RASR: ATTRS.TEX Position */\r\n#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */\r\n\r\n#define MPU_RASR_S_Pos 18U                     /*!< MPU RASR: ATTRS.S Position */\r\n#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */\r\n\r\n#define MPU_RASR_C_Pos 17U                     /*!< MPU RASR: ATTRS.C Position */\r\n#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */\r\n\r\n#define MPU_RASR_B_Pos 16U                     /*!< MPU RASR: ATTRS.B Position */\r\n#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */\r\n\r\n#define MPU_RASR_SRD_Pos 8U                           /*!< MPU RASR: Sub-Region Disable Position */\r\n#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */\r\n\r\n#define MPU_RASR_SIZE_Pos 1U                            /*!< MPU RASR: Region Size Field Position */\r\n#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */\r\n\r\n#define MPU_RASR_ENABLE_Pos 0U                               /*!< MPU RASR: Region enable bit Position */\r\n#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */\r\n\r\n/*@} end of group CMSIS_MPU */\r\n#endif\r\n\r\n#if (__FPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_FPU     Floating Point Unit (FPU)\r\n  \\brief    Type definitions for the Floating Point Unit (FPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Floating Point Unit (FPU).\r\n */\r\ntypedef struct {\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t FPCCR;  /*!< Offset: 0x004 (R/W)  Floating-Point Context Control Register */\r\n  __IOM uint32_t FPCAR;  /*!< Offset: 0x008 (R/W)  Floating-Point Context Address Register */\r\n  __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W)  Floating-Point Default Status Control Register */\r\n  __IM uint32_t  MVFR0;  /*!< Offset: 0x010 (R/ )  Media and FP Feature Register 0 */\r\n  __IM uint32_t  MVFR1;  /*!< Offset: 0x014 (R/ )  Media and FP Feature Register 1 */\r\n  __IM uint32_t  MVFR2;  /*!< Offset: 0x018 (R/ )  Media and FP Feature Register 2 */\r\n} FPU_Type;\r\n\r\n/* Floating-Point Context Control Register Definitions */\r\n#define FPU_FPCCR_ASPEN_Pos 31U                          /*!< FPCCR: ASPEN bit Position */\r\n#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */\r\n\r\n#define FPU_FPCCR_LSPEN_Pos 30U                          /*!< FPCCR: LSPEN Position */\r\n#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */\r\n\r\n#define FPU_FPCCR_MONRDY_Pos 8U                            /*!< FPCCR: MONRDY Position */\r\n#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */\r\n\r\n#define FPU_FPCCR_BFRDY_Pos 6U                           /*!< FPCCR: BFRDY Position */\r\n#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */\r\n\r\n#define FPU_FPCCR_MMRDY_Pos 5U                           /*!< FPCCR: MMRDY Position */\r\n#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */\r\n\r\n#define FPU_FPCCR_HFRDY_Pos 4U                           /*!< FPCCR: HFRDY Position */\r\n#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */\r\n\r\n#define FPU_FPCCR_THREAD_Pos 3U                            /*!< FPCCR: processor mode bit Position */\r\n#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */\r\n\r\n#define FPU_FPCCR_USER_Pos 1U                          /*!< FPCCR: privilege level bit Position */\r\n#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */\r\n\r\n#define FPU_FPCCR_LSPACT_Pos 0U                                /*!< FPCCR: Lazy state preservation active bit Position */\r\n#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */\r\n\r\n/* Floating-Point Context Address Register Definitions */\r\n#define FPU_FPCAR_ADDRESS_Pos 3U                                      /*!< FPCAR: ADDRESS bit Position */\r\n#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */\r\n\r\n/* Floating-Point Default Status Control Register Definitions */\r\n#define FPU_FPDSCR_AHP_Pos 26U                         /*!< FPDSCR: AHP bit Position */\r\n#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */\r\n\r\n#define FPU_FPDSCR_DN_Pos 25U                        /*!< FPDSCR: DN bit Position */\r\n#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */\r\n\r\n#define FPU_FPDSCR_FZ_Pos 24U                        /*!< FPDSCR: FZ bit Position */\r\n#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */\r\n\r\n#define FPU_FPDSCR_RMode_Pos 22U                           /*!< FPDSCR: RMode bit Position */\r\n#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */\r\n\r\n/* Media and FP Feature Register 0 Definitions */\r\n#define FPU_MVFR0_FP_rounding_modes_Pos 28U                                        /*!< MVFR0: FP rounding modes bits Position */\r\n#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */\r\n\r\n#define FPU_MVFR0_Short_vectors_Pos 24U                                    /*!< MVFR0: Short vectors bits Position */\r\n#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */\r\n\r\n#define FPU_MVFR0_Square_root_Pos 20U                                  /*!< MVFR0: Square root bits Position */\r\n#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */\r\n\r\n#define FPU_MVFR0_Divide_Pos 16U                             /*!< MVFR0: Divide bits Position */\r\n#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */\r\n\r\n#define FPU_MVFR0_FP_excep_trapping_Pos 12U                                        /*!< MVFR0: FP exception trapping bits Position */\r\n#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */\r\n\r\n#define FPU_MVFR0_Double_precision_Pos 8U                                        /*!< MVFR0: Double-precision bits Position */\r\n#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */\r\n\r\n#define FPU_MVFR0_Single_precision_Pos 4U                                        /*!< MVFR0: Single-precision bits Position */\r\n#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */\r\n\r\n#define FPU_MVFR0_A_SIMD_registers_Pos 0U                                            /*!< MVFR0: A_SIMD registers bits Position */\r\n#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */\r\n\r\n/* Media and FP Feature Register 1 Definitions */\r\n#define FPU_MVFR1_FP_fused_MAC_Pos 28U                                   /*!< MVFR1: FP fused MAC bits Position */\r\n#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */\r\n\r\n#define FPU_MVFR1_FP_HPFP_Pos 24U                              /*!< MVFR1: FP HPFP bits Position */\r\n#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */\r\n\r\n#define FPU_MVFR1_D_NaN_mode_Pos 4U                                  /*!< MVFR1: D_NaN mode bits Position */\r\n#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */\r\n\r\n#define FPU_MVFR1_FtZ_mode_Pos 0U                                    /*!< MVFR1: FtZ mode bits Position */\r\n#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */\r\n\r\n/* Media and FP Feature Register 2 Definitions */\r\n\r\n/*@} end of group CMSIS_FPU */\r\n#endif\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    Type definitions for the Core Debug Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Core Debug Register (CoreDebug).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */\r\n  __OM uint32_t  DCRSR; /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */\r\n  __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */\r\n  __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */\r\n} CoreDebug_Type;\r\n\r\n/* Debug Halting Control and Status Register Definitions */\r\n#define CoreDebug_DHCSR_DBGKEY_Pos 16U                                      /*!< CoreDebug DHCSR: DBGKEY Position */\r\n#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U                                     /*!< CoreDebug DHCSR: S_RESET_ST Position */\r\n#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U                                      /*!< CoreDebug DHCSR: S_RETIRE_ST Position */\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U                                   /*!< CoreDebug DHCSR: S_LOCKUP Position */\r\n#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_SLEEP_Pos 18U                                  /*!< CoreDebug DHCSR: S_SLEEP Position */\r\n#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_HALT_Pos 17U                                 /*!< CoreDebug DHCSR: S_HALT Position */\r\n#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_S_REGRDY_Pos 16U                                   /*!< CoreDebug DHCSR: S_REGRDY Position */\r\n#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */\r\n\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U                                       /*!< CoreDebug DHCSR: C_SNAPSTALL Position */\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */\r\n\r\n#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U                                      /*!< CoreDebug DHCSR: C_MASKINTS Position */\r\n#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */\r\n\r\n#define CoreDebug_DHCSR_C_STEP_Pos 2U                                  /*!< CoreDebug DHCSR: C_STEP Position */\r\n#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */\r\n\r\n#define CoreDebug_DHCSR_C_HALT_Pos 1U                                  /*!< CoreDebug DHCSR: C_HALT Position */\r\n#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U                                         /*!< CoreDebug DHCSR: C_DEBUGEN Position */\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */\r\n\r\n/* Debug Core Register Selector Register Definitions */\r\n#define CoreDebug_DCRSR_REGWnR_Pos 16U                                 /*!< CoreDebug DCRSR: REGWnR Position */\r\n#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */\r\n\r\n#define CoreDebug_DCRSR_REGSEL_Pos 0U                                         /*!< CoreDebug DCRSR: REGSEL Position */\r\n#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */\r\n\r\n/* Debug Exception and Monitor Control Register Definitions */\r\n#define CoreDebug_DEMCR_TRCENA_Pos 24U                                 /*!< CoreDebug DEMCR: TRCENA Position */\r\n#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_REQ_Pos 19U                                  /*!< CoreDebug DEMCR: MON_REQ Position */\r\n#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_STEP_Pos 18U                                   /*!< CoreDebug DEMCR: MON_STEP Position */\r\n#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_PEND_Pos 17U                                   /*!< CoreDebug DEMCR: MON_PEND Position */\r\n#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_EN_Pos 16U                                 /*!< CoreDebug DEMCR: MON_EN Position */\r\n#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U                                     /*!< CoreDebug DEMCR: VC_HARDERR Position */\r\n#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_INTERR_Pos 9U                                     /*!< CoreDebug DEMCR: VC_INTERR Position */\r\n#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U                                     /*!< CoreDebug DEMCR: VC_BUSERR Position */\r\n#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_STATERR_Pos 7U                                      /*!< CoreDebug DEMCR: VC_STATERR Position */\r\n#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U                                     /*!< CoreDebug DEMCR: VC_CHKERR Position */\r\n#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U                                      /*!< CoreDebug DEMCR: VC_NOCPERR Position */\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_MMERR_Pos 4U                                    /*!< CoreDebug DEMCR: VC_MMERR Position */\r\n#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */\r\n#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */\r\n\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) ((value << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) ((value & field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of Cortex-M4 Hardware */\r\n#define SCS_BASE       (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define ITM_BASE       (0xE0000000UL)        /*!< ITM Base Address */\r\n#define DWT_BASE       (0xE0001000UL)        /*!< DWT Base Address */\r\n#define TPI_BASE       (0xE0040000UL)        /*!< TPI Base Address */\r\n#define CoreDebug_BASE (0xE000EDF0UL)        /*!< Core Debug Base Address */\r\n#define SysTick_BASE   (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE      (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE       (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCnSCB    ((SCnSCB_Type *)SCS_BASE)          /*!< System control Register not in SCB */\r\n#define SCB       ((SCB_Type *)SCB_BASE)             /*!< SCB configuration struct */\r\n#define SysTick   ((SysTick_Type *)SysTick_BASE)     /*!< SysTick configuration struct */\r\n#define NVIC      ((NVIC_Type *)NVIC_BASE)           /*!< NVIC configuration struct */\r\n#define ITM       ((ITM_Type *)ITM_BASE)             /*!< ITM configuration struct */\r\n#define DWT       ((DWT_Type *)DWT_BASE)             /*!< DWT configuration struct */\r\n#define TPI       ((TPI_Type *)TPI_BASE)             /*!< TPI configuration struct */\r\n#define CoreDebug ((CoreDebug_Type *)CoreDebug_BASE) /*!< Core Debug configuration struct */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n#define MPU_BASE (SCS_BASE + 0x0D90UL)  /*!< Memory Protection Unit */\r\n#define MPU      ((MPU_Type *)MPU_BASE) /*!< Memory Protection Unit */\r\n#endif\r\n\r\n#if (__FPU_PRESENT == 1U)\r\n#define FPU_BASE (SCS_BASE + 0x0F30UL)  /*!< Floating Point Unit */\r\n#define FPU      ((FPU_Type *)FPU_BASE) /*!< Floating Point Unit */\r\n#endif\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Debug Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Set Priority Grouping\r\n  \\details Sets the priority grouping field using the required unlock sequence.\r\n           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.\r\n           Only values from 0..7 are used.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]      PriorityGroup  Priority grouping field.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) {\r\n  uint32_t reg_value;\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n\r\n  reg_value = SCB->AIRCR;                                                                             /* read old register configuration    */\r\n  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk));                         /* clear bits to change               */\r\n  reg_value  = (reg_value | ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (PriorityGroupTmp << 8U)); /* Insert write key and priorty group */\r\n  SCB->AIRCR = reg_value;\r\n}\r\n\r\n/**\r\n  \\brief   Get Priority Grouping\r\n  \\details Reads the priority grouping field from the NVIC Interrupt Controller.\r\n  \\return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) { return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); }\r\n\r\n/**\r\n  \\brief   Enable External Interrupt\r\n  \\details Enables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Disable External Interrupt\r\n  \\details Disables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) { NVIC->ICER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) {\r\n  return ((uint32_t)(((NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));\r\n}\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  Interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) { NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) { NVIC->ICPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Active Interrupt\r\n  \\details Reads the active register in NVIC and returns the active bit.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not active.\r\n  \\return             1  Interrupt status is active.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) { return ((uint32_t)(((NVIC->IABR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); }\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of an interrupt.\r\n  \\note    The priority cannot be set for every core interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) < 0) {\r\n    SCB->SHPR[(((uint32_t)(int32_t)IRQn) & 0xFUL) - 4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  } else {\r\n    NVIC->IP[((uint32_t)(int32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of an interrupt.\r\n           The interrupt number can be positive to specify an external (device specific) interrupt,\r\n           or negative to specify an internal (core) interrupt.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) < 0) {\r\n    return (((uint32_t)SCB->SHPR[(((uint32_t)(int32_t)IRQn) & 0xFUL) - 4UL] >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return (((uint32_t)NVIC->IP[((uint32_t)(int32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Encode Priority\r\n  \\details Encodes the priority for an interrupt with the given priority group,\r\n           preemptive priority value, and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [in]   PreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [in]       SubPriority  Subpriority value (starting from 0).\r\n  \\return                        Encoded priority. Value can be used in the function \\ref NVIC_SetPriority().\r\n */\r\n__STATIC_INLINE uint32_t NVIC_EncodePriority(uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  return (((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | ((SubPriority & (uint32_t)((1UL << (SubPriorityBits)) - 1UL))));\r\n}\r\n\r\n/**\r\n  \\brief   Decode Priority\r\n  \\details Decodes an interrupt priority value with a given priority group to\r\n           preemptive priority value and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.\r\n  \\param [in]         Priority   Priority value, which can be retrieved with the function \\ref NVIC_GetPriority().\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [out] pPreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [out]     pSubPriority  Subpriority value (starting from 0).\r\n */\r\n__STATIC_INLINE void NVIC_DecodePriority(uint32_t Priority, uint32_t PriorityGroup, uint32_t *const pPreemptPriority, uint32_t *const pSubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);\r\n  *pSubPriority     = (Priority) & (uint32_t)((1UL << (SubPriorityBits)) - 1UL);\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__STATIC_INLINE void NVIC_SystemReset(void) {\r\n  __DSB();                                                                                                                         /* Ensure all outstanding memory accesses included\r\n                                                                                                                                      buffered write are completed before reset */\r\n  SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */\r\n  __DSB();                                                                                                                         /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##########################  FPU functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_FpuFunctions FPU Functions\r\n  \\brief    Function that provides FPU type.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   get FPU type\r\n  \\details returns the FPU type\r\n  \\returns\r\n   - \\b  0: No FPU\r\n   - \\b  1: Single precision FPU\r\n   - \\b  2: Double + Single precision FPU\r\n */\r\n__STATIC_INLINE uint32_t SCB_GetFPUType(void) {\r\n  uint32_t mvfr0;\r\n\r\n  mvfr0 = SCB->MVFR0;\r\n  if ((mvfr0 & 0x00000FF0UL) == 0x220UL) {\r\n    return 2UL; /* Double + Single precision FPU */\r\n  } else if ((mvfr0 & 0x00000FF0UL) == 0x020UL) {\r\n    return 1UL; /* Single precision FPU */\r\n  } else {\r\n    return 0UL; /* No FPU */\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_FpuFunctions */\r\n\r\n/* ##########################  Cache functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_CacheFunctions Cache Functions\r\n  \\brief    Functions that configure Instruction and Data cache.\r\n  @{\r\n */\r\n\r\n/* Cache Size ID Register Macros */\r\n#define CCSIDR_WAYS(x) (((x)&SCB_CCSIDR_ASSOCIATIVITY_Msk) >> SCB_CCSIDR_ASSOCIATIVITY_Pos)\r\n#define CCSIDR_SETS(x) (((x)&SCB_CCSIDR_NUMSETS_Msk) >> SCB_CCSIDR_NUMSETS_Pos)\r\n\r\n/**\r\n  \\brief   Enable I-Cache\r\n  \\details Turns on I-Cache\r\n  */\r\n__STATIC_INLINE void SCB_EnableICache(void) {\r\n#if (__ICACHE_PRESENT == 1U)\r\n  __DSB();\r\n  __ISB();\r\n  SCB->ICIALLU = 0UL;                   /* invalidate I-Cache */\r\n  SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Disable I-Cache\r\n  \\details Turns off I-Cache\r\n  */\r\n__STATIC_INLINE void SCB_DisableICache(void) {\r\n#if (__ICACHE_PRESENT == 1U)\r\n  __DSB();\r\n  __ISB();\r\n  SCB->CCR &= ~(uint32_t)SCB_CCR_IC_Msk; /* disable I-Cache */\r\n  SCB->ICIALLU = 0UL;                    /* invalidate I-Cache */\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Invalidate I-Cache\r\n  \\details Invalidates I-Cache\r\n  */\r\n__STATIC_INLINE void SCB_InvalidateICache(void) {\r\n#if (__ICACHE_PRESENT == 1U)\r\n  __DSB();\r\n  __ISB();\r\n  SCB->ICIALLU = 0UL;\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Enable D-Cache\r\n  \\details Turns on D-Cache\r\n  */\r\n__STATIC_INLINE void SCB_EnableDCache(void) {\r\n#if (__DCACHE_PRESENT == 1U)\r\n  uint32_t ccsidr;\r\n  uint32_t sets;\r\n  uint32_t ways;\r\n\r\n  SCB->CSSELR = (0U << 1U) | 0U; /* Level 1 data cache */\r\n  __DSB();\r\n\r\n  ccsidr = SCB->CCSIDR;\r\n\r\n  /* invalidate D-Cache */\r\n  sets = (uint32_t)(CCSIDR_SETS(ccsidr));\r\n  do {\r\n    ways = (uint32_t)(CCSIDR_WAYS(ccsidr));\r\n    do {\r\n      SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk));\r\n#if defined(__CC_ARM)\r\n      __schedule_barrier();\r\n#endif\r\n    } while (ways--);\r\n  } while (sets--);\r\n  __DSB();\r\n\r\n  SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */\r\n\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Disable D-Cache\r\n  \\details Turns off D-Cache\r\n  */\r\n__STATIC_INLINE void SCB_DisableDCache(void) {\r\n#if (__DCACHE_PRESENT == 1U)\r\n  uint32_t ccsidr;\r\n  uint32_t sets;\r\n  uint32_t ways;\r\n\r\n  SCB->CSSELR = (0U << 1U) | 0U; /* Level 1 data cache */\r\n  __DSB();\r\n\r\n  ccsidr = SCB->CCSIDR;\r\n\r\n  SCB->CCR &= ~(uint32_t)SCB_CCR_DC_Msk; /* disable D-Cache */\r\n\r\n  /* clean & invalidate D-Cache */\r\n  sets = (uint32_t)(CCSIDR_SETS(ccsidr));\r\n  do {\r\n    ways = (uint32_t)(CCSIDR_WAYS(ccsidr));\r\n    do {\r\n      SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk));\r\n#if defined(__CC_ARM)\r\n      __schedule_barrier();\r\n#endif\r\n    } while (ways--);\r\n  } while (sets--);\r\n\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Invalidate D-Cache\r\n  \\details Invalidates D-Cache\r\n  */\r\n__STATIC_INLINE void SCB_InvalidateDCache(void) {\r\n#if (__DCACHE_PRESENT == 1U)\r\n  uint32_t ccsidr;\r\n  uint32_t sets;\r\n  uint32_t ways;\r\n\r\n  SCB->CSSELR = (0U << 1U) | 0U; /* Level 1 data cache */\r\n  __DSB();\r\n\r\n  ccsidr = SCB->CCSIDR;\r\n\r\n  /* invalidate D-Cache */\r\n  sets = (uint32_t)(CCSIDR_SETS(ccsidr));\r\n  do {\r\n    ways = (uint32_t)(CCSIDR_WAYS(ccsidr));\r\n    do {\r\n      SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk));\r\n#if defined(__CC_ARM)\r\n      __schedule_barrier();\r\n#endif\r\n    } while (ways--);\r\n  } while (sets--);\r\n\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Clean D-Cache\r\n  \\details Cleans D-Cache\r\n  */\r\n__STATIC_INLINE void SCB_CleanDCache(void) {\r\n#if (__DCACHE_PRESENT == 1U)\r\n  uint32_t ccsidr;\r\n  uint32_t sets;\r\n  uint32_t ways;\r\n\r\n  SCB->CSSELR = (0U << 1U) | 0U; /* Level 1 data cache */\r\n  __DSB();\r\n\r\n  ccsidr = SCB->CCSIDR;\r\n\r\n  /* clean D-Cache */\r\n  sets = (uint32_t)(CCSIDR_SETS(ccsidr));\r\n  do {\r\n    ways = (uint32_t)(CCSIDR_WAYS(ccsidr));\r\n    do {\r\n      SCB->DCCSW = (((sets << SCB_DCCSW_SET_Pos) & SCB_DCCSW_SET_Msk) | ((ways << SCB_DCCSW_WAY_Pos) & SCB_DCCSW_WAY_Msk));\r\n#if defined(__CC_ARM)\r\n      __schedule_barrier();\r\n#endif\r\n    } while (ways--);\r\n  } while (sets--);\r\n\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   Clean & Invalidate D-Cache\r\n  \\details Cleans and Invalidates D-Cache\r\n  */\r\n__STATIC_INLINE void SCB_CleanInvalidateDCache(void) {\r\n#if (__DCACHE_PRESENT == 1U)\r\n  uint32_t ccsidr;\r\n  uint32_t sets;\r\n  uint32_t ways;\r\n\r\n  SCB->CSSELR = (0U << 1U) | 0U; /* Level 1 data cache */\r\n  __DSB();\r\n\r\n  ccsidr = SCB->CCSIDR;\r\n\r\n  /* clean & invalidate D-Cache */\r\n  sets = (uint32_t)(CCSIDR_SETS(ccsidr));\r\n  do {\r\n    ways = (uint32_t)(CCSIDR_WAYS(ccsidr));\r\n    do {\r\n      SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk));\r\n#if defined(__CC_ARM)\r\n      __schedule_barrier();\r\n#endif\r\n    } while (ways--);\r\n  } while (sets--);\r\n\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   D-Cache Invalidate by address\r\n  \\details Invalidates D-Cache for the given address\r\n  \\param[in]   addr    address (aligned to 32-byte boundary)\r\n  \\param[in]   dsize   size of memory block (in number of bytes)\r\n*/\r\n__STATIC_INLINE void SCB_InvalidateDCache_by_Addr(uint32_t *addr, int32_t dsize) {\r\n#if (__DCACHE_PRESENT == 1U)\r\n  int32_t  op_size  = dsize;\r\n  uint32_t op_addr  = (uint32_t)addr;\r\n  int32_t  linesize = 32U; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */\r\n\r\n  __DSB();\r\n\r\n  while (op_size > 0) {\r\n    SCB->DCIMVAC = op_addr;\r\n    op_addr += linesize;\r\n    op_size -= linesize;\r\n  }\r\n\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   D-Cache Clean by address\r\n  \\details Cleans D-Cache for the given address\r\n  \\param[in]   addr    address (aligned to 32-byte boundary)\r\n  \\param[in]   dsize   size of memory block (in number of bytes)\r\n*/\r\n__STATIC_INLINE void SCB_CleanDCache_by_Addr(uint32_t *addr, int32_t dsize) {\r\n#if (__DCACHE_PRESENT == 1)\r\n  int32_t  op_size  = dsize;\r\n  uint32_t op_addr  = (uint32_t)addr;\r\n  int32_t  linesize = 32U; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */\r\n\r\n  __DSB();\r\n\r\n  while (op_size > 0) {\r\n    SCB->DCCMVAC = op_addr;\r\n    op_addr += linesize;\r\n    op_size -= linesize;\r\n  }\r\n\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/**\r\n  \\brief   D-Cache Clean and Invalidate by address\r\n  \\details Cleans and invalidates D_Cache for the given address\r\n  \\param[in]   addr    address (aligned to 32-byte boundary)\r\n  \\param[in]   dsize   size of memory block (in number of bytes)\r\n*/\r\n__STATIC_INLINE void SCB_CleanInvalidateDCache_by_Addr(uint32_t *addr, int32_t dsize) {\r\n#if (__DCACHE_PRESENT == 1U)\r\n  int32_t  op_size  = dsize;\r\n  uint32_t op_addr  = (uint32_t)addr;\r\n  int32_t  linesize = 32U; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */\r\n\r\n  __DSB();\r\n\r\n  while (op_size > 0) {\r\n    SCB->DCCIMVAC = op_addr;\r\n    op_addr += linesize;\r\n    op_size -= linesize;\r\n  }\r\n\r\n  __DSB();\r\n  __ISB();\r\n#endif\r\n}\r\n\r\n/*@} end of CMSIS_Core_CacheFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n/* ##################################### Debug In/Output function ########################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_core_DebugFunctions ITM Functions\r\n  \\brief    Functions that access the ITM debug interface.\r\n  @{\r\n */\r\n\r\nextern volatile int32_t ITM_RxBuffer;  /*!< External variable to receive characters. */\r\n#define ITM_RXBUFFER_EMPTY 0x5AA55AA5U /*!< Value identifying \\ref ITM_RxBuffer is ready for next character. */\r\n\r\n/**\r\n  \\brief   ITM Send Character\r\n  \\details Transmits a character via the ITM channel 0, and\r\n           \\li Just returns when no debugger is connected that has booked the output.\r\n           \\li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.\r\n  \\param [in]     ch  Character to transmit.\r\n  \\returns            Character to transmit.\r\n */\r\n__STATIC_INLINE uint32_t ITM_SendChar(uint32_t ch) {\r\n  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */\r\n      ((ITM->TER & 1UL) != 0UL))                  /* ITM Port #0 enabled */\r\n  {\r\n    while (ITM->PORT[0U].u32 == 0UL) {\r\n      __NOP();\r\n    }\r\n    ITM->PORT[0U].u8 = (uint8_t)ch;\r\n  }\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Receive Character\r\n  \\details Inputs a character via the external variable \\ref ITM_RxBuffer.\r\n  \\return             Received character.\r\n  \\return         -1  No character pending.\r\n */\r\n__STATIC_INLINE int32_t ITM_ReceiveChar(void) {\r\n  int32_t ch = -1; /* no character available */\r\n\r\n  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) {\r\n    ch           = ITM_RxBuffer;\r\n    ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */\r\n  }\r\n\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Check Character\r\n  \\details Checks whether a character is pending for reading in the variable \\ref ITM_RxBuffer.\r\n  \\return          0  No character available.\r\n  \\return          1  Character available.\r\n */\r\n__STATIC_INLINE int32_t ITM_CheckChar(void) {\r\n\r\n  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {\r\n    return (0); /* no character available */\r\n  } else {\r\n    return (1); /*    character available */\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_core_DebugFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CM7_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Include/core_cmFunc.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cmFunc.h\r\n                                                                              * @brief    CMSIS Cortex-M Core Function Access Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CMFUNC_H\r\n#define __CORE_CMFUNC_H\r\n\r\n/* ###########################  Core Function Access  ########################### */\r\n/** \\ingroup  CMSIS_Core_FunctionInterface\r\n    \\defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions\r\n  @{\r\n*/\r\n\r\n/*------------------ RealView Compiler -----------------*/\r\n#if defined(__CC_ARM)\r\n#include \"cmsis_armcc.h\"\r\n\r\n/*------------------ ARM Compiler V6 -------------------*/\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#include \"cmsis_armcc_V6.h\"\r\n\r\n/*------------------ GNU Compiler ----------------------*/\r\n#elif defined(__GNUC__)\r\n#include \"cmsis_gcc.h\"\r\n\r\n/*------------------ ICC Compiler ----------------------*/\r\n#elif defined(__ICCARM__)\r\n#include <cmsis_iar.h>\r\n\r\n/*------------------ TI CCS Compiler -------------------*/\r\n#elif defined(__TMS470__)\r\n#include <cmsis_ccs.h>\r\n\r\n/*------------------ TASKING Compiler ------------------*/\r\n#elif defined(__TASKING__)\r\n/*\r\n * The CMSIS functions have been implemented as intrinsics in the compiler.\r\n * Please use \"carm -?i\" to get an up to date list of all intrinsics,\r\n * Including the CMSIS ones.\r\n */\r\n\r\n/*------------------ COSMIC Compiler -------------------*/\r\n#elif defined(__CSMC__)\r\n#include <cmsis_csm.h>\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_RegAccFunctions */\r\n\r\n#endif /* __CORE_CMFUNC_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Include/core_cmInstr.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cmInstr.h\r\n                                                                              * @brief    CMSIS Cortex-M Core Instruction Access Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CMINSTR_H\r\n#define __CORE_CMINSTR_H\r\n\r\n/* ##########################  Core Instruction Access  ######################### */\r\n/** \\defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface\r\n  Access to dedicated instructions\r\n  @{\r\n*/\r\n\r\n/*------------------ RealView Compiler -----------------*/\r\n#if defined(__CC_ARM)\r\n#include \"cmsis_armcc.h\"\r\n\r\n/*------------------ ARM Compiler V6 -------------------*/\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#include \"cmsis_armcc_V6.h\"\r\n\r\n/*------------------ GNU Compiler ----------------------*/\r\n#elif defined(__GNUC__)\r\n#include \"cmsis_gcc.h\"\r\n\r\n/*------------------ ICC Compiler ----------------------*/\r\n#elif defined(__ICCARM__)\r\n#include <cmsis_iar.h>\r\n\r\n/*------------------ TI CCS Compiler -------------------*/\r\n#elif defined(__TMS470__)\r\n#include <cmsis_ccs.h>\r\n\r\n/*------------------ TASKING Compiler ------------------*/\r\n#elif defined(__TASKING__)\r\n/*\r\n * The CMSIS functions have been implemented as intrinsics in the compiler.\r\n * Please use \"carm -?i\" to get an up to date list of all intrinsics,\r\n * Including the CMSIS ones.\r\n */\r\n\r\n/*------------------ COSMIC Compiler -------------------*/\r\n#elif defined(__CSMC__)\r\n#include <cmsis_csm.h>\r\n\r\n#endif\r\n\r\n/*@}*/ /* end of group CMSIS_Core_InstructionInterface */\r\n\r\n#endif /* __CORE_CMINSTR_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Include/core_cmSimd.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_cmSimd.h\r\n                                                                              * @brief    CMSIS Cortex-M SIMD Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_CMSIMD_H\r\n#define __CORE_CMSIMD_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* ###################  Compiler specific Intrinsics  ########################### */\r\n/** \\defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics\r\n  Access to dedicated SIMD instructions\r\n  @{\r\n*/\r\n\r\n/*------------------ RealView Compiler -----------------*/\r\n#if defined(__CC_ARM)\r\n#include \"cmsis_armcc.h\"\r\n\r\n/*------------------ ARM Compiler V6 -------------------*/\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#include \"cmsis_armcc_V6.h\"\r\n\r\n/*------------------ GNU Compiler ----------------------*/\r\n#elif defined(__GNUC__)\r\n#include \"cmsis_gcc.h\"\r\n\r\n/*------------------ ICC Compiler ----------------------*/\r\n#elif defined(__ICCARM__)\r\n#include <cmsis_iar.h>\r\n\r\n/*------------------ TI CCS Compiler -------------------*/\r\n#elif defined(__TMS470__)\r\n#include <cmsis_ccs.h>\r\n\r\n/*------------------ TASKING Compiler ------------------*/\r\n#elif defined(__TASKING__)\r\n/*\r\n * The CMSIS functions have been implemented as intrinsics in the compiler.\r\n * Please use \"carm -?i\" to get an up to date list of all intrinsics,\r\n * Including the CMSIS ones.\r\n */\r\n\r\n/*------------------ COSMIC Compiler -------------------*/\r\n#elif defined(__CSMC__)\r\n#include <cmsis_csm.h>\r\n\r\n#endif\r\n\r\n/*@} end of group CMSIS_SIMD_intrinsics */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_CMSIMD_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Include/core_sc000.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_sc000.h\r\n                                                                              * @brief    CMSIS SC000 Core Peripheral Access Layer Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_SC000_H_GENERIC\r\n#define __CORE_SC000_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup SC000\r\n  @{\r\n */\r\n\r\n/*  CMSIS SC000 definitions */\r\n#define __SC000_CMSIS_VERSION_MAIN (0x04U)                                                           /*!< [31:16] CMSIS HAL main version */\r\n#define __SC000_CMSIS_VERSION_SUB  (0x1EU)                                                           /*!< [15:0]  CMSIS HAL sub version */\r\n#define __SC000_CMSIS_VERSION      ((__SC000_CMSIS_VERSION_MAIN << 16U) | __SC000_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */\r\n\r\n#define __CORTEX_SC (000U) /*!< Cortex secure core */\r\n\r\n#if defined(__CC_ARM)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__GNUC__)\r\n#define __ASM           __asm  /*!< asm keyword for GNU Compiler */\r\n#define __INLINE        inline /*!< inline keyword for GNU Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__ICCARM__)\r\n#define __ASM           __asm  /*!< asm keyword for IAR Compiler */\r\n#define __INLINE        inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TMS470__)\r\n#define __ASM           __asm /*!< asm keyword for TI CCS Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TASKING__)\r\n#define __ASM           __asm  /*!< asm keyword for TASKING Compiler */\r\n#define __INLINE        inline /*!< inline keyword for TASKING Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__CSMC__)\r\n#define __packed\r\n#define __ASM           _asm   /*!< asm keyword for COSMIC Compiler */\r\n#define __INLINE        inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */\r\n#define __STATIC_INLINE static inline\r\n\r\n#else\r\n#error Unknown compiler\r\n#endif\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    This core does not support an FPU at all\r\n*/\r\n#define __FPU_USED 0U\r\n\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TMS470__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"core_cmFunc.h\"  /* Core Function Access */\r\n#include \"core_cmInstr.h\" /* Core Instruction Access */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_SC000_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_SC000_H_DEPENDANT\r\n#define __CORE_SC000_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __SC000_REV\r\n#define __SC000_REV 0x0000U\r\n#warning \"__SC000_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __MPU_PRESENT\r\n#define __MPU_PRESENT 0U\r\n#warning \"__MPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 2U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group SC000 */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n  - Core MPU Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 28; /*!< bit:  0..27  Reserved */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 15; /*!< bit:  9..23  Reserved */\r\n    uint32_t T : 1;           /*!< bit:     24  Thumb bit        (read 0) */\r\n    uint32_t _reserved1 : 3;  /*!< bit: 25..27  Reserved */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 1;  /*!< bit:      0  Reserved */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t _reserved1 : 30; /*!< bit:  2..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[31U];\r\n  __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[31U];\r\n  __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[31U];\r\n  __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[31U];\r\n  uint32_t       RESERVED4[64U];\r\n  __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */\r\n} NVIC_Type;\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID; /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;  /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n  __IOM uint32_t VTOR;  /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */\r\n  __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;   /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;   /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */\r\n  __IOM uint32_t SHCSR;   /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n  uint32_t       RESERVED1[154U];\r\n  __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W)  Security Features Control Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_VTOR_TBLOFF_Pos 7U                                   /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)\r\n  \\brief    Type definitions for the System Control and ID Register not in the SCB\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control and ID Register not in the SCB.\r\n */\r\ntypedef struct {\r\n  uint32_t       RESERVED0[2U];\r\n  __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */\r\n} SCnSCB_Type;\r\n\r\n/* Auxiliary Control Register Definitions */\r\n#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U                                       /*!< ACTLR: DISMCYCINT Position */\r\n#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */\r\n\r\n/*@} end of group CMSIS_SCnotSCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_MPU     Memory Protection Unit (MPU)\r\n  \\brief    Type definitions for the Memory Protection Unit (MPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Memory Protection Unit (MPU).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  TYPE; /*!< Offset: 0x000 (R/ )  MPU Type Register */\r\n  __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W)  MPU Control Register */\r\n  __IOM uint32_t RNR;  /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */\r\n  __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */\r\n  __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */\r\n} MPU_Type;\r\n\r\n/* MPU Type Register Definitions */\r\n#define MPU_TYPE_IREGION_Pos 16U                              /*!< MPU TYPE: IREGION Position */\r\n#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */\r\n\r\n#define MPU_TYPE_DREGION_Pos 8U                               /*!< MPU TYPE: DREGION Position */\r\n#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */\r\n\r\n#define MPU_TYPE_SEPARATE_Pos 0U                                 /*!< MPU TYPE: SEPARATE Position */\r\n#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */\r\n\r\n/* MPU Control Register Definitions */\r\n#define MPU_CTRL_PRIVDEFENA_Pos 2U                               /*!< MPU CTRL: PRIVDEFENA Position */\r\n#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */\r\n\r\n#define MPU_CTRL_HFNMIENA_Pos 1U                             /*!< MPU CTRL: HFNMIENA Position */\r\n#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */\r\n\r\n#define MPU_CTRL_ENABLE_Pos 0U                               /*!< MPU CTRL: ENABLE Position */\r\n#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */\r\n\r\n/* MPU Region Number Register Definitions */\r\n#define MPU_RNR_REGION_Pos 0U                                 /*!< MPU RNR: REGION Position */\r\n#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */\r\n\r\n/* MPU Region Base Address Register Definitions */\r\n#define MPU_RBAR_ADDR_Pos 8U                                /*!< MPU RBAR: ADDR Position */\r\n#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */\r\n\r\n#define MPU_RBAR_VALID_Pos 4U                          /*!< MPU RBAR: VALID Position */\r\n#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */\r\n\r\n#define MPU_RBAR_REGION_Pos 0U                                 /*!< MPU RBAR: REGION Position */\r\n#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */\r\n\r\n/* MPU Region Attribute and Size Register Definitions */\r\n#define MPU_RASR_ATTRS_Pos 16U                              /*!< MPU RASR: MPU Region Attribute field Position */\r\n#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */\r\n\r\n#define MPU_RASR_XN_Pos 28U                      /*!< MPU RASR: ATTRS.XN Position */\r\n#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */\r\n\r\n#define MPU_RASR_AP_Pos 24U                        /*!< MPU RASR: ATTRS.AP Position */\r\n#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */\r\n\r\n#define MPU_RASR_TEX_Pos 19U                         /*!< MPU RASR: ATTRS.TEX Position */\r\n#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */\r\n\r\n#define MPU_RASR_S_Pos 18U                     /*!< MPU RASR: ATTRS.S Position */\r\n#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */\r\n\r\n#define MPU_RASR_C_Pos 17U                     /*!< MPU RASR: ATTRS.C Position */\r\n#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */\r\n\r\n#define MPU_RASR_B_Pos 16U                     /*!< MPU RASR: ATTRS.B Position */\r\n#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */\r\n\r\n#define MPU_RASR_SRD_Pos 8U                           /*!< MPU RASR: Sub-Region Disable Position */\r\n#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */\r\n\r\n#define MPU_RASR_SIZE_Pos 1U                            /*!< MPU RASR: Region Size Field Position */\r\n#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */\r\n\r\n#define MPU_RASR_ENABLE_Pos 0U                               /*!< MPU RASR: Region enable bit Position */\r\n#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */\r\n\r\n/*@} end of group CMSIS_MPU */\r\n#endif\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    SC000 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor.\r\n            Therefore they are not covered by the SC000 header file.\r\n  @{\r\n */\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) ((value << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) ((value & field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of SC000 Hardware */\r\n#define SCS_BASE     (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE    (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE     (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCnSCB  ((SCnSCB_Type *)SCS_BASE)      /*!< System control Register not in SCB */\r\n#define SCB     ((SCB_Type *)SCB_BASE)         /*!< SCB configuration struct */\r\n#define SysTick ((SysTick_Type *)SysTick_BASE) /*!< SysTick configuration struct */\r\n#define NVIC    ((NVIC_Type *)NVIC_BASE)       /*!< NVIC configuration struct */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n#define MPU_BASE (SCS_BASE + 0x0D90UL)  /*!< Memory Protection Unit */\r\n#define MPU      ((MPU_Type *)MPU_BASE) /*!< Memory Protection Unit */\r\n#endif\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n/* Interrupt Priorities are WORD accessible only under ARMv6M                   */\r\n/* The following MACROS handle generation of the register offset and byte masks */\r\n#define _BIT_SHIFT(IRQn) (((((uint32_t)(int32_t)(IRQn))) & 0x03UL) * 8UL)\r\n#define _SHP_IDX(IRQn)   ((((((uint32_t)(int32_t)(IRQn)) & 0x0FUL) - 8UL) >> 2UL))\r\n#define _IP_IDX(IRQn)    ((((uint32_t)(int32_t)(IRQn)) >> 2UL))\r\n\r\n/**\r\n  \\brief   Enable External Interrupt\r\n  \\details Enables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Disable External Interrupt\r\n  \\details Disables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) { NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) { return ((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); }\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  Interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) { NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) { NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of an interrupt.\r\n  \\note    The priority cannot be set for every core interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) < 0) {\r\n    SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));\r\n  } else {\r\n    NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of an interrupt.\r\n           The interrupt number can be positive to specify an external (device specific) interrupt,\r\n           or negative to specify an internal (core) interrupt.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) < 0) {\r\n    return ((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn)) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return ((uint32_t)(((NVIC->IP[_IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn)) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__STATIC_INLINE void NVIC_SystemReset(void) {\r\n  __DSB(); /* Ensure all outstanding memory accesses included\r\n              buffered write are completed before reset */\r\n  SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | SCB_AIRCR_SYSRESETREQ_Msk);\r\n  __DSB(); /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_SC000_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/CMSIS/Include/core_sc300.h",
    "content": "/**************************************************************************/ /**\r\n                                                                              * @file     core_sc300.h\r\n                                                                              * @brief    CMSIS SC300 Core Peripheral Access Layer Header File\r\n                                                                              * @version  V4.30\r\n                                                                              * @date     20. October 2015\r\n                                                                              ******************************************************************************/\r\n/* Copyright (c) 2009 - 2015 ARM LIMITED\r\n\r\n   All rights reserved.\r\n   Redistribution and use in source and binary forms, with or without\r\n   modification, are permitted provided that the following conditions are met:\r\n   - Redistributions of source code must retain the above copyright\r\n     notice, this list of conditions and the following disclaimer.\r\n   - Redistributions in binary form must reproduce the above copyright\r\n     notice, this list of conditions and the following disclaimer in the\r\n     documentation and/or other materials provided with the distribution.\r\n   - Neither the name of ARM nor the names of its contributors may be used\r\n     to endorse or promote products derived from this software without\r\n     specific prior written permission.\r\n   *\r\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n   POSSIBILITY OF SUCH DAMAGE.\r\n   ---------------------------------------------------------------------------*/\r\n\r\n#if defined(__ICCARM__)\r\n#pragma system_include /* treat file as system include file for MISRA check */\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#pragma clang system_header /* treat file as system include file */\r\n#endif\r\n\r\n#ifndef __CORE_SC300_H_GENERIC\r\n#define __CORE_SC300_H_GENERIC\r\n\r\n#include <stdint.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/**\r\n  \\page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions\r\n  CMSIS violates the following MISRA-C:2004 rules:\r\n\r\n   \\li Required Rule 8.5, object/function definition in header file.<br>\r\n     Function definitions in header files are used to allow 'inlining'.\r\n\r\n   \\li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>\r\n     Unions are used for effective representation of core registers.\r\n\r\n   \\li Advisory Rule 19.7, Function-like macro defined.<br>\r\n     Function-like macros are used to allow more efficient code.\r\n */\r\n\r\n/*******************************************************************************\r\n *                 CMSIS definitions\r\n ******************************************************************************/\r\n/**\r\n  \\ingroup SC3000\r\n  @{\r\n */\r\n\r\n/*  CMSIS SC300 definitions */\r\n#define __SC300_CMSIS_VERSION_MAIN (0x04U)                                                           /*!< [31:16] CMSIS HAL main version */\r\n#define __SC300_CMSIS_VERSION_SUB  (0x1EU)                                                           /*!< [15:0]  CMSIS HAL sub version */\r\n#define __SC300_CMSIS_VERSION      ((__SC300_CMSIS_VERSION_MAIN << 16U) | __SC300_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */\r\n\r\n#define __CORTEX_SC (300U) /*!< Cortex secure core */\r\n\r\n#if defined(__CC_ARM)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#define __ASM           __asm    /*!< asm keyword for ARM Compiler */\r\n#define __INLINE        __inline /*!< inline keyword for ARM Compiler */\r\n#define __STATIC_INLINE static __inline\r\n\r\n#elif defined(__GNUC__)\r\n#define __ASM           __asm  /*!< asm keyword for GNU Compiler */\r\n#define __INLINE        inline /*!< inline keyword for GNU Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__ICCARM__)\r\n#define __ASM           __asm  /*!< asm keyword for IAR Compiler */\r\n#define __INLINE        inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TMS470__)\r\n#define __ASM           __asm /*!< asm keyword for TI CCS Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__TASKING__)\r\n#define __ASM           __asm  /*!< asm keyword for TASKING Compiler */\r\n#define __INLINE        inline /*!< inline keyword for TASKING Compiler */\r\n#define __STATIC_INLINE static inline\r\n\r\n#elif defined(__CSMC__)\r\n#define __packed\r\n#define __ASM           _asm   /*!< asm keyword for COSMIC Compiler */\r\n#define __INLINE        inline /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */\r\n#define __STATIC_INLINE static inline\r\n\r\n#else\r\n#error Unknown compiler\r\n#endif\r\n\r\n/** __FPU_USED indicates whether an FPU is used or not.\r\n    This core does not support an FPU at all\r\n*/\r\n#define __FPU_USED 0U\r\n\r\n#if defined(__CC_ARM)\r\n#if defined __TARGET_FPU_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)\r\n#if defined __ARM_PCS_VFP\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__GNUC__)\r\n#if defined(__VFP_FP__) && !defined(__SOFTFP__)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__ICCARM__)\r\n#if defined __ARMVFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TMS470__)\r\n#if defined __TI_VFP_SUPPORT__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__TASKING__)\r\n#if defined __FPU_VFP__\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#elif defined(__CSMC__)\r\n#if (__CSMC__ & 0x400U)\r\n#error \"Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)\"\r\n#endif\r\n\r\n#endif\r\n\r\n#include \"core_cmFunc.h\"  /* Core Function Access */\r\n#include \"core_cmInstr.h\" /* Core Instruction Access */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_SC300_H_GENERIC */\r\n\r\n#ifndef __CMSIS_GENERIC\r\n\r\n#ifndef __CORE_SC300_H_DEPENDANT\r\n#define __CORE_SC300_H_DEPENDANT\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* check device defines and use defaults */\r\n#if defined __CHECK_DEVICE_DEFINES\r\n#ifndef __SC300_REV\r\n#define __SC300_REV 0x0000U\r\n#warning \"__SC300_REV not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __MPU_PRESENT\r\n#define __MPU_PRESENT 0U\r\n#warning \"__MPU_PRESENT not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __NVIC_PRIO_BITS\r\n#define __NVIC_PRIO_BITS 4U\r\n#warning \"__NVIC_PRIO_BITS not defined in device header file; using default!\"\r\n#endif\r\n\r\n#ifndef __Vendor_SysTickConfig\r\n#define __Vendor_SysTickConfig 0U\r\n#warning \"__Vendor_SysTickConfig not defined in device header file; using default!\"\r\n#endif\r\n#endif\r\n\r\n/* IO definitions (access restrictions to peripheral registers) */\r\n/**\r\n    \\defgroup CMSIS_glob_defs CMSIS Global Defines\r\n\r\n    <strong>IO Type Qualifiers</strong> are used\r\n    \\li to specify the access to peripheral variables.\r\n    \\li for automatic generation of peripheral register debug information.\r\n*/\r\n#ifdef __cplusplus\r\n#define __I volatile /*!< Defines 'read only' permissions */\r\n#else\r\n#define __I volatile const /*!< Defines 'read only' permissions */\r\n#endif\r\n#define __O  volatile /*!< Defines 'write only' permissions */\r\n#define __IO volatile /*!< Defines 'read / write' permissions */\r\n\r\n/* following defines should be used for structure members */\r\n#define __IM  volatile const /*! Defines 'read only' structure member permissions */\r\n#define __OM  volatile       /*! Defines 'write only' structure member permissions */\r\n#define __IOM volatile       /*! Defines 'read / write' structure member permissions */\r\n\r\n/*@} end of group SC300 */\r\n\r\n/*******************************************************************************\r\n *                 Register Abstraction\r\n  Core Register contain:\r\n  - Core Register\r\n  - Core NVIC Register\r\n  - Core SCB Register\r\n  - Core SysTick Register\r\n  - Core Debug Register\r\n  - Core MPU Register\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_core_register Defines and Type Definitions\r\n  \\brief Type definitions and defines for Cortex-M processor based devices.\r\n*/\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_CORE  Status and Control Registers\r\n  \\brief      Core Register type definitions.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Union type to access the Application Program Status Register (APSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t _reserved0 : 27; /*!< bit:  0..26  Reserved */\r\n    uint32_t Q : 1;           /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} APSR_Type;\r\n\r\n/* APSR Register Definitions */\r\n#define APSR_N_Pos 31U                 /*!< APSR: N Position */\r\n#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */\r\n\r\n#define APSR_Z_Pos 30U                 /*!< APSR: Z Position */\r\n#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */\r\n\r\n#define APSR_C_Pos 29U                 /*!< APSR: C Position */\r\n#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */\r\n\r\n#define APSR_V_Pos 28U                 /*!< APSR: V Position */\r\n#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */\r\n\r\n#define APSR_Q_Pos 27U                 /*!< APSR: Q Position */\r\n#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Interrupt Program Status Register (IPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 23; /*!< bit:  9..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} IPSR_Type;\r\n\r\n/* IPSR Register Definitions */\r\n#define IPSR_ISR_Pos 0U                            /*!< IPSR: ISR Position */\r\n#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Special-Purpose Program Status Registers (xPSR).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t ISR : 9;         /*!< bit:  0.. 8  Exception number */\r\n    uint32_t _reserved0 : 15; /*!< bit:  9..23  Reserved */\r\n    uint32_t T : 1;           /*!< bit:     24  Thumb bit        (read 0) */\r\n    uint32_t IT : 2;          /*!< bit: 25..26  saved IT state   (read 0) */\r\n    uint32_t Q : 1;           /*!< bit:     27  Saturation condition flag */\r\n    uint32_t V : 1;           /*!< bit:     28  Overflow condition code flag */\r\n    uint32_t C : 1;           /*!< bit:     29  Carry condition code flag */\r\n    uint32_t Z : 1;           /*!< bit:     30  Zero condition code flag */\r\n    uint32_t N : 1;           /*!< bit:     31  Negative condition code flag */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} xPSR_Type;\r\n\r\n/* xPSR Register Definitions */\r\n#define xPSR_N_Pos 31U                 /*!< xPSR: N Position */\r\n#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */\r\n\r\n#define xPSR_Z_Pos 30U                 /*!< xPSR: Z Position */\r\n#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */\r\n\r\n#define xPSR_C_Pos 29U                 /*!< xPSR: C Position */\r\n#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */\r\n\r\n#define xPSR_V_Pos 28U                 /*!< xPSR: V Position */\r\n#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */\r\n\r\n#define xPSR_Q_Pos 27U                 /*!< xPSR: Q Position */\r\n#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */\r\n\r\n#define xPSR_IT_Pos 25U                  /*!< xPSR: IT Position */\r\n#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */\r\n\r\n#define xPSR_T_Pos 24U                 /*!< xPSR: T Position */\r\n#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */\r\n\r\n#define xPSR_ISR_Pos 0U                            /*!< xPSR: ISR Position */\r\n#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */\r\n\r\n/**\r\n  \\brief  Union type to access the Control Registers (CONTROL).\r\n */\r\ntypedef union {\r\n  struct {\r\n    uint32_t nPRIV : 1;       /*!< bit:      0  Execution privilege in Thread mode */\r\n    uint32_t SPSEL : 1;       /*!< bit:      1  Stack to be used */\r\n    uint32_t _reserved1 : 30; /*!< bit:  2..31  Reserved */\r\n  } b;                        /*!< Structure used for bit  access */\r\n  uint32_t w;                 /*!< Type      used for word access */\r\n} CONTROL_Type;\r\n\r\n/* CONTROL Register Definitions */\r\n#define CONTROL_SPSEL_Pos 1U                         /*!< CONTROL: SPSEL Position */\r\n#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */\r\n\r\n#define CONTROL_nPRIV_Pos 0U                             /*!< CONTROL: nPRIV Position */\r\n#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */\r\n\r\n/*@} end of group CMSIS_CORE */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)\r\n  \\brief      Type definitions for the NVIC Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */\r\n  uint32_t       RESERVED0[24U];\r\n  __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */\r\n  uint32_t       RSERVED1[24U];\r\n  __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */\r\n  uint32_t       RESERVED2[24U];\r\n  __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */\r\n  uint32_t       RESERVED3[24U];\r\n  __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W)  Interrupt Active bit Register */\r\n  uint32_t       RESERVED4[56U];\r\n  __IOM uint8_t  IP[240U]; /*!< Offset: 0x300 (R/W)  Interrupt Priority Register (8Bit wide) */\r\n  uint32_t       RESERVED5[644U];\r\n  __OM uint32_t  STIR; /*!< Offset: 0xE00 ( /W)  Software Trigger Interrupt Register */\r\n} NVIC_Type;\r\n\r\n/* Software Triggered Interrupt Register Definitions */\r\n#define NVIC_STIR_INTID_Pos 0U                                   /*!< STIR: INTLINESNUM Position */\r\n#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */\r\n\r\n/*@} end of group CMSIS_NVIC */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCB     System Control Block (SCB)\r\n  \\brief    Type definitions for the System Control Block Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control Block (SCB).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  CPUID;    /*!< Offset: 0x000 (R/ )  CPUID Base Register */\r\n  __IOM uint32_t ICSR;     /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */\r\n  __IOM uint32_t VTOR;     /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */\r\n  __IOM uint32_t AIRCR;    /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */\r\n  __IOM uint32_t SCR;      /*!< Offset: 0x010 (R/W)  System Control Register */\r\n  __IOM uint32_t CCR;      /*!< Offset: 0x014 (R/W)  Configuration Control Register */\r\n  __IOM uint8_t  SHP[12U]; /*!< Offset: 0x018 (R/W)  System Handlers Priority Registers (4-7, 8-11, 12-15) */\r\n  __IOM uint32_t SHCSR;    /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */\r\n  __IOM uint32_t CFSR;     /*!< Offset: 0x028 (R/W)  Configurable Fault Status Register */\r\n  __IOM uint32_t HFSR;     /*!< Offset: 0x02C (R/W)  HardFault Status Register */\r\n  __IOM uint32_t DFSR;     /*!< Offset: 0x030 (R/W)  Debug Fault Status Register */\r\n  __IOM uint32_t MMFAR;    /*!< Offset: 0x034 (R/W)  MemManage Fault Address Register */\r\n  __IOM uint32_t BFAR;     /*!< Offset: 0x038 (R/W)  BusFault Address Register */\r\n  __IOM uint32_t AFSR;     /*!< Offset: 0x03C (R/W)  Auxiliary Fault Status Register */\r\n  __IM uint32_t  PFR[2U];  /*!< Offset: 0x040 (R/ )  Processor Feature Register */\r\n  __IM uint32_t  DFR;      /*!< Offset: 0x048 (R/ )  Debug Feature Register */\r\n  __IM uint32_t  ADR;      /*!< Offset: 0x04C (R/ )  Auxiliary Feature Register */\r\n  __IM uint32_t  MMFR[4U]; /*!< Offset: 0x050 (R/ )  Memory Model Feature Register */\r\n  __IM uint32_t  ISAR[5U]; /*!< Offset: 0x060 (R/ )  Instruction Set Attributes Register */\r\n  uint32_t       RESERVED0[5U];\r\n  __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W)  Coprocessor Access Control Register */\r\n  uint32_t       RESERVED1[129U];\r\n  __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W)  Security Features Control Register */\r\n} SCB_Type;\r\n\r\n/* SCB CPUID Register Definitions */\r\n#define SCB_CPUID_IMPLEMENTER_Pos 24U                                   /*!< SCB CPUID: IMPLEMENTER Position */\r\n#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */\r\n\r\n#define SCB_CPUID_VARIANT_Pos 20U                              /*!< SCB CPUID: VARIANT Position */\r\n#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */\r\n\r\n#define SCB_CPUID_ARCHITECTURE_Pos 16U                                   /*!< SCB CPUID: ARCHITECTURE Position */\r\n#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */\r\n\r\n#define SCB_CPUID_PARTNO_Pos 4U                                /*!< SCB CPUID: PARTNO Position */\r\n#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */\r\n\r\n#define SCB_CPUID_REVISION_Pos 0U                                    /*!< SCB CPUID: REVISION Position */\r\n#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */\r\n\r\n/* SCB Interrupt Control State Register Definitions */\r\n#define SCB_ICSR_NMIPENDSET_Pos 31U                              /*!< SCB ICSR: NMIPENDSET Position */\r\n#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVSET_Pos 28U                             /*!< SCB ICSR: PENDSVSET Position */\r\n#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */\r\n\r\n#define SCB_ICSR_PENDSVCLR_Pos 27U                             /*!< SCB ICSR: PENDSVCLR Position */\r\n#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */\r\n\r\n#define SCB_ICSR_PENDSTSET_Pos 26U                             /*!< SCB ICSR: PENDSTSET Position */\r\n#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */\r\n\r\n#define SCB_ICSR_PENDSTCLR_Pos 25U                             /*!< SCB ICSR: PENDSTCLR Position */\r\n#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */\r\n\r\n#define SCB_ICSR_ISRPREEMPT_Pos 23U                              /*!< SCB ICSR: ISRPREEMPT Position */\r\n#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */\r\n\r\n#define SCB_ICSR_ISRPENDING_Pos 22U                              /*!< SCB ICSR: ISRPENDING Position */\r\n#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */\r\n\r\n#define SCB_ICSR_VECTPENDING_Pos 12U                                   /*!< SCB ICSR: VECTPENDING Position */\r\n#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */\r\n\r\n#define SCB_ICSR_RETTOBASE_Pos 11U                             /*!< SCB ICSR: RETTOBASE Position */\r\n#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */\r\n\r\n#define SCB_ICSR_VECTACTIVE_Pos 0U                                       /*!< SCB ICSR: VECTACTIVE Position */\r\n#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */\r\n\r\n/* SCB Vector Table Offset Register Definitions */\r\n#define SCB_VTOR_TBLBASE_Pos 29U                           /*!< SCB VTOR: TBLBASE Position */\r\n#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */\r\n\r\n#define SCB_VTOR_TBLOFF_Pos 7U                                  /*!< SCB VTOR: TBLOFF Position */\r\n#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */\r\n\r\n/* SCB Application Interrupt and Reset Control Register Definitions */\r\n#define SCB_AIRCR_VECTKEY_Pos 16U                                 /*!< SCB AIRCR: VECTKEY Position */\r\n#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */\r\n\r\n#define SCB_AIRCR_VECTKEYSTAT_Pos 16U                                     /*!< SCB AIRCR: VECTKEYSTAT Position */\r\n#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */\r\n\r\n#define SCB_AIRCR_ENDIANESS_Pos 15U                              /*!< SCB AIRCR: ENDIANESS Position */\r\n#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */\r\n\r\n#define SCB_AIRCR_PRIGROUP_Pos 8U                              /*!< SCB AIRCR: PRIGROUP Position */\r\n#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */\r\n\r\n#define SCB_AIRCR_SYSRESETREQ_Pos 2U                                 /*!< SCB AIRCR: SYSRESETREQ Position */\r\n#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */\r\n\r\n#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U                                   /*!< SCB AIRCR: VECTCLRACTIVE Position */\r\n#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r\n\r\n#define SCB_AIRCR_VECTRESET_Pos 0U                                   /*!< SCB AIRCR: VECTRESET Position */\r\n#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */\r\n\r\n/* SCB System Control Register Definitions */\r\n#define SCB_SCR_SEVONPEND_Pos 4U                             /*!< SCB SCR: SEVONPEND Position */\r\n#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */\r\n\r\n#define SCB_SCR_SLEEPDEEP_Pos 2U                             /*!< SCB SCR: SLEEPDEEP Position */\r\n#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */\r\n\r\n#define SCB_SCR_SLEEPONEXIT_Pos 1U                               /*!< SCB SCR: SLEEPONEXIT Position */\r\n#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */\r\n\r\n/* SCB Configuration Control Register Definitions */\r\n#define SCB_CCR_STKALIGN_Pos 9U                            /*!< SCB CCR: STKALIGN Position */\r\n#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */\r\n\r\n#define SCB_CCR_BFHFNMIGN_Pos 8U                             /*!< SCB CCR: BFHFNMIGN Position */\r\n#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */\r\n\r\n#define SCB_CCR_DIV_0_TRP_Pos 4U                             /*!< SCB CCR: DIV_0_TRP Position */\r\n#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */\r\n\r\n#define SCB_CCR_UNALIGN_TRP_Pos 3U                               /*!< SCB CCR: UNALIGN_TRP Position */\r\n#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */\r\n\r\n#define SCB_CCR_USERSETMPEND_Pos 1U                                /*!< SCB CCR: USERSETMPEND Position */\r\n#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */\r\n\r\n#define SCB_CCR_NONBASETHRDENA_Pos 0U                                      /*!< SCB CCR: NONBASETHRDENA Position */\r\n#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */\r\n\r\n/* SCB System Handler Control and State Register Definitions */\r\n#define SCB_SHCSR_USGFAULTENA_Pos 18U                                /*!< SCB SHCSR: USGFAULTENA Position */\r\n#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTENA_Pos 17U                                /*!< SCB SHCSR: BUSFAULTENA Position */\r\n#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTENA_Pos 16U                                /*!< SCB SHCSR: MEMFAULTENA Position */\r\n#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */\r\n\r\n#define SCB_SHCSR_SVCALLPENDED_Pos 15U                                 /*!< SCB SHCSR: SVCALLPENDED Position */\r\n#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U                                   /*!< SCB SHCSR: BUSFAULTPENDED Position */\r\n#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U                                   /*!< SCB SHCSR: MEMFAULTPENDED Position */\r\n#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTPENDED_Pos 12U                                   /*!< SCB SHCSR: USGFAULTPENDED Position */\r\n#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */\r\n\r\n#define SCB_SHCSR_SYSTICKACT_Pos 11U                               /*!< SCB SHCSR: SYSTICKACT Position */\r\n#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */\r\n\r\n#define SCB_SHCSR_PENDSVACT_Pos 10U                              /*!< SCB SHCSR: PENDSVACT Position */\r\n#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */\r\n\r\n#define SCB_SHCSR_MONITORACT_Pos 8U                                /*!< SCB SHCSR: MONITORACT Position */\r\n#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */\r\n\r\n#define SCB_SHCSR_SVCALLACT_Pos 7U                               /*!< SCB SHCSR: SVCALLACT Position */\r\n#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */\r\n\r\n#define SCB_SHCSR_USGFAULTACT_Pos 3U                                 /*!< SCB SHCSR: USGFAULTACT Position */\r\n#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_BUSFAULTACT_Pos 1U                                 /*!< SCB SHCSR: BUSFAULTACT Position */\r\n#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */\r\n\r\n#define SCB_SHCSR_MEMFAULTACT_Pos 0U                                     /*!< SCB SHCSR: MEMFAULTACT Position */\r\n#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */\r\n\r\n/* SCB Configurable Fault Status Register Definitions */\r\n#define SCB_CFSR_USGFAULTSR_Pos 16U                                   /*!< SCB CFSR: Usage Fault Status Register Position */\r\n#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_BUSFAULTSR_Pos 8U                                  /*!< SCB CFSR: Bus Fault Status Register Position */\r\n#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */\r\n\r\n#define SCB_CFSR_MEMFAULTSR_Pos 0U                                      /*!< SCB CFSR: Memory Manage Fault Status Register Position */\r\n#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */\r\n\r\n/* SCB Hard Fault Status Register Definitions */\r\n#define SCB_HFSR_DEBUGEVT_Pos 31U                            /*!< SCB HFSR: DEBUGEVT Position */\r\n#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */\r\n\r\n#define SCB_HFSR_FORCED_Pos 30U                          /*!< SCB HFSR: FORCED Position */\r\n#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */\r\n\r\n#define SCB_HFSR_VECTTBL_Pos 1U                            /*!< SCB HFSR: VECTTBL Position */\r\n#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */\r\n\r\n/* SCB Debug Fault Status Register Definitions */\r\n#define SCB_DFSR_EXTERNAL_Pos 4U                             /*!< SCB DFSR: EXTERNAL Position */\r\n#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */\r\n\r\n#define SCB_DFSR_VCATCH_Pos 3U                           /*!< SCB DFSR: VCATCH Position */\r\n#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */\r\n\r\n#define SCB_DFSR_DWTTRAP_Pos 2U                            /*!< SCB DFSR: DWTTRAP Position */\r\n#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */\r\n\r\n#define SCB_DFSR_BKPT_Pos 1U                         /*!< SCB DFSR: BKPT Position */\r\n#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */\r\n\r\n#define SCB_DFSR_HALTED_Pos 0U                               /*!< SCB DFSR: HALTED Position */\r\n#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */\r\n\r\n/*@} end of group CMSIS_SCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)\r\n  \\brief    Type definitions for the System Control and ID Register not in the SCB\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Control and ID Register not in the SCB.\r\n */\r\ntypedef struct {\r\n  uint32_t      RESERVED0[1U];\r\n  __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ )  Interrupt Controller Type Register */\r\n  uint32_t      RESERVED1[1U];\r\n} SCnSCB_Type;\r\n\r\n/* Interrupt Controller Type Register Definitions */\r\n#define SCnSCB_ICTR_INTLINESNUM_Pos 0U                                         /*!< ICTR: INTLINESNUM Position */\r\n#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */\r\n\r\n/*@} end of group CMSIS_SCnotSCB */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_SysTick     System Tick Timer (SysTick)\r\n  \\brief    Type definitions for the System Timer Registers.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the System Timer (SysTick).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;  /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */\r\n  __IOM uint32_t LOAD;  /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */\r\n  __IOM uint32_t VAL;   /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */\r\n  __IM uint32_t  CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */\r\n} SysTick_Type;\r\n\r\n/* SysTick Control / Status Register Definitions */\r\n#define SysTick_CTRL_COUNTFLAG_Pos 16U                                 /*!< SysTick CTRL: COUNTFLAG Position */\r\n#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */\r\n\r\n#define SysTick_CTRL_CLKSOURCE_Pos 2U                                  /*!< SysTick CTRL: CLKSOURCE Position */\r\n#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */\r\n\r\n#define SysTick_CTRL_TICKINT_Pos 1U                                /*!< SysTick CTRL: TICKINT Position */\r\n#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */\r\n\r\n#define SysTick_CTRL_ENABLE_Pos 0U                                   /*!< SysTick CTRL: ENABLE Position */\r\n#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */\r\n\r\n/* SysTick Reload Register Definitions */\r\n#define SysTick_LOAD_RELOAD_Pos 0U                                          /*!< SysTick LOAD: RELOAD Position */\r\n#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */\r\n\r\n/* SysTick Current Register Definitions */\r\n#define SysTick_VAL_CURRENT_Pos 0U                                          /*!< SysTick VAL: CURRENT Position */\r\n#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */\r\n\r\n/* SysTick Calibration Register Definitions */\r\n#define SysTick_CALIB_NOREF_Pos 31U                              /*!< SysTick CALIB: NOREF Position */\r\n#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */\r\n\r\n#define SysTick_CALIB_SKEW_Pos 30U                             /*!< SysTick CALIB: SKEW Position */\r\n#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */\r\n\r\n#define SysTick_CALIB_TENMS_Pos 0U                                          /*!< SysTick CALIB: TENMS Position */\r\n#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */\r\n\r\n/*@} end of group CMSIS_SysTick */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_ITM     Instrumentation Trace Macrocell (ITM)\r\n  \\brief    Type definitions for the Instrumentation Trace Macrocell (ITM)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Instrumentation Trace Macrocell Register (ITM).\r\n */\r\ntypedef struct {\r\n  __OM union {\r\n    __OM uint8_t  u8;  /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 8-bit */\r\n    __OM uint16_t u16; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 16-bit */\r\n    __OM uint32_t u32; /*!< Offset: 0x000 ( /W)  ITM Stimulus Port 32-bit */\r\n  } PORT[32U];         /*!< Offset: 0x000 ( /W)  ITM Stimulus Port Registers */\r\n  uint32_t       RESERVED0[864U];\r\n  __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W)  ITM Trace Enable Register */\r\n  uint32_t       RESERVED1[15U];\r\n  __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W)  ITM Trace Privilege Register */\r\n  uint32_t       RESERVED2[15U];\r\n  __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W)  ITM Trace Control Register */\r\n  uint32_t       RESERVED3[29U];\r\n  __OM uint32_t  IWR;  /*!< Offset: 0xEF8 ( /W)  ITM Integration Write Register */\r\n  __IM uint32_t  IRR;  /*!< Offset: 0xEFC (R/ )  ITM Integration Read Register */\r\n  __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W)  ITM Integration Mode Control Register */\r\n  uint32_t       RESERVED4[43U];\r\n  __OM uint32_t  LAR; /*!< Offset: 0xFB0 ( /W)  ITM Lock Access Register */\r\n  __IM uint32_t  LSR; /*!< Offset: 0xFB4 (R/ )  ITM Lock Status Register */\r\n  uint32_t       RESERVED5[6U];\r\n  __IM uint32_t  PID4; /*!< Offset: 0xFD0 (R/ )  ITM Peripheral Identification Register #4 */\r\n  __IM uint32_t  PID5; /*!< Offset: 0xFD4 (R/ )  ITM Peripheral Identification Register #5 */\r\n  __IM uint32_t  PID6; /*!< Offset: 0xFD8 (R/ )  ITM Peripheral Identification Register #6 */\r\n  __IM uint32_t  PID7; /*!< Offset: 0xFDC (R/ )  ITM Peripheral Identification Register #7 */\r\n  __IM uint32_t  PID0; /*!< Offset: 0xFE0 (R/ )  ITM Peripheral Identification Register #0 */\r\n  __IM uint32_t  PID1; /*!< Offset: 0xFE4 (R/ )  ITM Peripheral Identification Register #1 */\r\n  __IM uint32_t  PID2; /*!< Offset: 0xFE8 (R/ )  ITM Peripheral Identification Register #2 */\r\n  __IM uint32_t  PID3; /*!< Offset: 0xFEC (R/ )  ITM Peripheral Identification Register #3 */\r\n  __IM uint32_t  CID0; /*!< Offset: 0xFF0 (R/ )  ITM Component  Identification Register #0 */\r\n  __IM uint32_t  CID1; /*!< Offset: 0xFF4 (R/ )  ITM Component  Identification Register #1 */\r\n  __IM uint32_t  CID2; /*!< Offset: 0xFF8 (R/ )  ITM Component  Identification Register #2 */\r\n  __IM uint32_t  CID3; /*!< Offset: 0xFFC (R/ )  ITM Component  Identification Register #3 */\r\n} ITM_Type;\r\n\r\n/* ITM Trace Privilege Register Definitions */\r\n#define ITM_TPR_PRIVMASK_Pos 0U                                  /*!< ITM TPR: PRIVMASK Position */\r\n#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */\r\n\r\n/* ITM Trace Control Register Definitions */\r\n#define ITM_TCR_BUSY_Pos 23U                       /*!< ITM TCR: BUSY Position */\r\n#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */\r\n\r\n#define ITM_TCR_TraceBusID_Pos 16U                                /*!< ITM TCR: ATBID Position */\r\n#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */\r\n\r\n#define ITM_TCR_GTSFREQ_Pos 10U                          /*!< ITM TCR: Global timestamp frequency Position */\r\n#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */\r\n\r\n#define ITM_TCR_TSPrescale_Pos 8U                              /*!< ITM TCR: TSPrescale Position */\r\n#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */\r\n\r\n#define ITM_TCR_SWOENA_Pos 4U                          /*!< ITM TCR: SWOENA Position */\r\n#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */\r\n\r\n#define ITM_TCR_DWTENA_Pos 3U                          /*!< ITM TCR: DWTENA Position */\r\n#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */\r\n\r\n#define ITM_TCR_SYNCENA_Pos 2U                           /*!< ITM TCR: SYNCENA Position */\r\n#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */\r\n\r\n#define ITM_TCR_TSENA_Pos 1U                         /*!< ITM TCR: TSENA Position */\r\n#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */\r\n\r\n#define ITM_TCR_ITMENA_Pos 0U                              /*!< ITM TCR: ITM Enable bit Position */\r\n#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */\r\n\r\n/* ITM Integration Write Register Definitions */\r\n#define ITM_IWR_ATVALIDM_Pos 0U                                /*!< ITM IWR: ATVALIDM Position */\r\n#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */\r\n\r\n/* ITM Integration Read Register Definitions */\r\n#define ITM_IRR_ATREADYM_Pos 0U                                /*!< ITM IRR: ATREADYM Position */\r\n#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */\r\n\r\n/* ITM Integration Mode Control Register Definitions */\r\n#define ITM_IMCR_INTEGRATION_Pos 0U                                    /*!< ITM IMCR: INTEGRATION Position */\r\n#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */\r\n\r\n/* ITM Lock Status Register Definitions */\r\n#define ITM_LSR_ByteAcc_Pos 2U                           /*!< ITM LSR: ByteAcc Position */\r\n#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */\r\n\r\n#define ITM_LSR_Access_Pos 1U                          /*!< ITM LSR: Access Position */\r\n#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */\r\n\r\n#define ITM_LSR_Present_Pos 0U                               /*!< ITM LSR: Present Position */\r\n#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_ITM */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_DWT     Data Watchpoint and Trace (DWT)\r\n  \\brief    Type definitions for the Data Watchpoint and Trace (DWT)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Data Watchpoint and Trace Register (DWT).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t CTRL;      /*!< Offset: 0x000 (R/W)  Control Register */\r\n  __IOM uint32_t CYCCNT;    /*!< Offset: 0x004 (R/W)  Cycle Count Register */\r\n  __IOM uint32_t CPICNT;    /*!< Offset: 0x008 (R/W)  CPI Count Register */\r\n  __IOM uint32_t EXCCNT;    /*!< Offset: 0x00C (R/W)  Exception Overhead Count Register */\r\n  __IOM uint32_t SLEEPCNT;  /*!< Offset: 0x010 (R/W)  Sleep Count Register */\r\n  __IOM uint32_t LSUCNT;    /*!< Offset: 0x014 (R/W)  LSU Count Register */\r\n  __IOM uint32_t FOLDCNT;   /*!< Offset: 0x018 (R/W)  Folded-instruction Count Register */\r\n  __IM uint32_t  PCSR;      /*!< Offset: 0x01C (R/ )  Program Counter Sample Register */\r\n  __IOM uint32_t COMP0;     /*!< Offset: 0x020 (R/W)  Comparator Register 0 */\r\n  __IOM uint32_t MASK0;     /*!< Offset: 0x024 (R/W)  Mask Register 0 */\r\n  __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W)  Function Register 0 */\r\n  uint32_t       RESERVED0[1U];\r\n  __IOM uint32_t COMP1;     /*!< Offset: 0x030 (R/W)  Comparator Register 1 */\r\n  __IOM uint32_t MASK1;     /*!< Offset: 0x034 (R/W)  Mask Register 1 */\r\n  __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W)  Function Register 1 */\r\n  uint32_t       RESERVED1[1U];\r\n  __IOM uint32_t COMP2;     /*!< Offset: 0x040 (R/W)  Comparator Register 2 */\r\n  __IOM uint32_t MASK2;     /*!< Offset: 0x044 (R/W)  Mask Register 2 */\r\n  __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W)  Function Register 2 */\r\n  uint32_t       RESERVED2[1U];\r\n  __IOM uint32_t COMP3;     /*!< Offset: 0x050 (R/W)  Comparator Register 3 */\r\n  __IOM uint32_t MASK3;     /*!< Offset: 0x054 (R/W)  Mask Register 3 */\r\n  __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W)  Function Register 3 */\r\n} DWT_Type;\r\n\r\n/* DWT Control Register Definitions */\r\n#define DWT_CTRL_NUMCOMP_Pos 28U                             /*!< DWT CTRL: NUMCOMP Position */\r\n#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */\r\n\r\n#define DWT_CTRL_NOTRCPKT_Pos 27U                              /*!< DWT CTRL: NOTRCPKT Position */\r\n#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */\r\n\r\n#define DWT_CTRL_NOEXTTRIG_Pos 26U                               /*!< DWT CTRL: NOEXTTRIG Position */\r\n#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */\r\n\r\n#define DWT_CTRL_NOCYCCNT_Pos 25U                              /*!< DWT CTRL: NOCYCCNT Position */\r\n#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */\r\n\r\n#define DWT_CTRL_NOPRFCNT_Pos 24U                              /*!< DWT CTRL: NOPRFCNT Position */\r\n#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */\r\n\r\n#define DWT_CTRL_CYCEVTENA_Pos 22U                               /*!< DWT CTRL: CYCEVTENA Position */\r\n#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */\r\n\r\n#define DWT_CTRL_FOLDEVTENA_Pos 21U                                /*!< DWT CTRL: FOLDEVTENA Position */\r\n#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */\r\n\r\n#define DWT_CTRL_LSUEVTENA_Pos 20U                               /*!< DWT CTRL: LSUEVTENA Position */\r\n#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */\r\n\r\n#define DWT_CTRL_SLEEPEVTENA_Pos 19U                                 /*!< DWT CTRL: SLEEPEVTENA Position */\r\n#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCEVTENA_Pos 18U                               /*!< DWT CTRL: EXCEVTENA Position */\r\n#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */\r\n\r\n#define DWT_CTRL_CPIEVTENA_Pos 17U                               /*!< DWT CTRL: CPIEVTENA Position */\r\n#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */\r\n\r\n#define DWT_CTRL_EXCTRCENA_Pos 16U                               /*!< DWT CTRL: EXCTRCENA Position */\r\n#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */\r\n\r\n#define DWT_CTRL_PCSAMPLENA_Pos 12U                                /*!< DWT CTRL: PCSAMPLENA Position */\r\n#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */\r\n\r\n#define DWT_CTRL_SYNCTAP_Pos 10U                             /*!< DWT CTRL: SYNCTAP Position */\r\n#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */\r\n\r\n#define DWT_CTRL_CYCTAP_Pos 9U                             /*!< DWT CTRL: CYCTAP Position */\r\n#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */\r\n\r\n#define DWT_CTRL_POSTINIT_Pos 5U                               /*!< DWT CTRL: POSTINIT Position */\r\n#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */\r\n\r\n#define DWT_CTRL_POSTPRESET_Pos 1U                                 /*!< DWT CTRL: POSTPRESET Position */\r\n#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */\r\n\r\n#define DWT_CTRL_CYCCNTENA_Pos 0U                                    /*!< DWT CTRL: CYCCNTENA Position */\r\n#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */\r\n\r\n/* DWT CPI Count Register Definitions */\r\n#define DWT_CPICNT_CPICNT_Pos 0U                                    /*!< DWT CPICNT: CPICNT Position */\r\n#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */\r\n\r\n/* DWT Exception Overhead Count Register Definitions */\r\n#define DWT_EXCCNT_EXCCNT_Pos 0U                                    /*!< DWT EXCCNT: EXCCNT Position */\r\n#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */\r\n\r\n/* DWT Sleep Count Register Definitions */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U                                        /*!< DWT SLEEPCNT: SLEEPCNT Position */\r\n#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */\r\n\r\n/* DWT LSU Count Register Definitions */\r\n#define DWT_LSUCNT_LSUCNT_Pos 0U                                    /*!< DWT LSUCNT: LSUCNT Position */\r\n#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */\r\n\r\n/* DWT Folded-instruction Count Register Definitions */\r\n#define DWT_FOLDCNT_FOLDCNT_Pos 0U                                      /*!< DWT FOLDCNT: FOLDCNT Position */\r\n#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */\r\n\r\n/* DWT Comparator Mask Register Definitions */\r\n#define DWT_MASK_MASK_Pos 0U                                /*!< DWT MASK: MASK Position */\r\n#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */\r\n\r\n/* DWT Comparator Function Register Definitions */\r\n#define DWT_FUNCTION_MATCHED_Pos 24U                                 /*!< DWT FUNCTION: MATCHED Position */\r\n#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR1_Pos 16U                                    /*!< DWT FUNCTION: DATAVADDR1 Position */\r\n#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVADDR0_Pos 12U                                    /*!< DWT FUNCTION: DATAVADDR0 Position */\r\n#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */\r\n\r\n#define DWT_FUNCTION_DATAVSIZE_Pos 10U                                   /*!< DWT FUNCTION: DATAVSIZE Position */\r\n#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */\r\n\r\n#define DWT_FUNCTION_LNK1ENA_Pos 9U                                  /*!< DWT FUNCTION: LNK1ENA Position */\r\n#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */\r\n\r\n#define DWT_FUNCTION_DATAVMATCH_Pos 8U                                     /*!< DWT FUNCTION: DATAVMATCH Position */\r\n#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */\r\n\r\n#define DWT_FUNCTION_CYCMATCH_Pos 7U                                   /*!< DWT FUNCTION: CYCMATCH Position */\r\n#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */\r\n\r\n#define DWT_FUNCTION_EMITRANGE_Pos 5U                                    /*!< DWT FUNCTION: EMITRANGE Position */\r\n#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */\r\n\r\n#define DWT_FUNCTION_FUNCTION_Pos 0U                                       /*!< DWT FUNCTION: FUNCTION Position */\r\n#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_DWT */\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_TPI     Trace Port Interface (TPI)\r\n  \\brief    Type definitions for the Trace Port Interface (TPI)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Trace Port Interface Register (TPI).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t SSPSR; /*!< Offset: 0x000 (R/ )  Supported Parallel Port Size Register */\r\n  __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W)  Current Parallel Port Size Register */\r\n  uint32_t       RESERVED0[2U];\r\n  __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W)  Asynchronous Clock Prescaler Register */\r\n  uint32_t       RESERVED1[55U];\r\n  __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W)  Selected Pin Protocol Register */\r\n  uint32_t       RESERVED2[131U];\r\n  __IM uint32_t  FFSR; /*!< Offset: 0x300 (R/ )  Formatter and Flush Status Register */\r\n  __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W)  Formatter and Flush Control Register */\r\n  __IM uint32_t  FSCR; /*!< Offset: 0x308 (R/ )  Formatter Synchronization Counter Register */\r\n  uint32_t       RESERVED3[759U];\r\n  __IM uint32_t  TRIGGER;   /*!< Offset: 0xEE8 (R/ )  TRIGGER */\r\n  __IM uint32_t  FIFO0;     /*!< Offset: 0xEEC (R/ )  Integration ETM Data */\r\n  __IM uint32_t  ITATBCTR2; /*!< Offset: 0xEF0 (R/ )  ITATBCTR2 */\r\n  uint32_t       RESERVED4[1U];\r\n  __IM uint32_t  ITATBCTR0; /*!< Offset: 0xEF8 (R/ )  ITATBCTR0 */\r\n  __IM uint32_t  FIFO1;     /*!< Offset: 0xEFC (R/ )  Integration ITM Data */\r\n  __IOM uint32_t ITCTRL;    /*!< Offset: 0xF00 (R/W)  Integration Mode Control */\r\n  uint32_t       RESERVED5[39U];\r\n  __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W)  Claim tag set */\r\n  __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W)  Claim tag clear */\r\n  uint32_t       RESERVED7[8U];\r\n  __IM uint32_t  DEVID;   /*!< Offset: 0xFC8 (R/ )  TPIU_DEVID */\r\n  __IM uint32_t  DEVTYPE; /*!< Offset: 0xFCC (R/ )  TPIU_DEVTYPE */\r\n} TPI_Type;\r\n\r\n/* TPI Asynchronous Clock Prescaler Register Definitions */\r\n#define TPI_ACPR_PRESCALER_Pos 0U                                       /*!< TPI ACPR: PRESCALER Position */\r\n#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */\r\n\r\n/* TPI Selected Pin Protocol Register Definitions */\r\n#define TPI_SPPR_TXMODE_Pos 0U                                 /*!< TPI SPPR: TXMODE Position */\r\n#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */\r\n\r\n/* TPI Formatter and Flush Status Register Definitions */\r\n#define TPI_FFSR_FtNonStop_Pos 3U                                /*!< TPI FFSR: FtNonStop Position */\r\n#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */\r\n\r\n#define TPI_FFSR_TCPresent_Pos 2U                                /*!< TPI FFSR: TCPresent Position */\r\n#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */\r\n\r\n#define TPI_FFSR_FtStopped_Pos 1U                                /*!< TPI FFSR: FtStopped Position */\r\n#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */\r\n\r\n#define TPI_FFSR_FlInProg_Pos 0U                                   /*!< TPI FFSR: FlInProg Position */\r\n#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */\r\n\r\n/* TPI Formatter and Flush Control Register Definitions */\r\n#define TPI_FFCR_TrigIn_Pos 8U                             /*!< TPI FFCR: TrigIn Position */\r\n#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */\r\n\r\n#define TPI_FFCR_EnFCont_Pos 1U                              /*!< TPI FFCR: EnFCont Position */\r\n#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */\r\n\r\n/* TPI TRIGGER Register Definitions */\r\n#define TPI_TRIGGER_TRIGGER_Pos 0U                                     /*!< TPI TRIGGER: TRIGGER Position */\r\n#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */\r\n\r\n/* TPI Integration ETM Data Register Definitions (FIFO0) */\r\n#define TPI_FIFO0_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO0: ITM_ATVALID Position */\r\n#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO0: ITM_bytecount Position */\r\n#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO0: ETM_ATVALID Position */\r\n#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO0_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO0: ETM_bytecount Position */\r\n#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO0_ETM2_Pos 16U                            /*!< TPI FIFO0: ETM2 Position */\r\n#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */\r\n\r\n#define TPI_FIFO0_ETM1_Pos 8U                             /*!< TPI FIFO0: ETM1 Position */\r\n#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */\r\n\r\n#define TPI_FIFO0_ETM0_Pos 0U                                 /*!< TPI FIFO0: ETM0 Position */\r\n#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */\r\n\r\n/* TPI ITATBCTR2 Register Definitions */\r\n#define TPI_ITATBCTR2_ATREADY_Pos 0U                                       /*!< TPI ITATBCTR2: ATREADY Position */\r\n#define TPI_ITATBCTR2_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY_Pos*/) /*!< TPI ITATBCTR2: ATREADY Mask */\r\n\r\n/* TPI Integration ITM Data Register Definitions (FIFO1) */\r\n#define TPI_FIFO1_ITM_ATVALID_Pos 29U                                  /*!< TPI FIFO1: ITM_ATVALID Position */\r\n#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ITM_bytecount_Pos 27U                                    /*!< TPI FIFO1: ITM_bytecount Position */\r\n#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ETM_ATVALID_Pos 26U                                  /*!< TPI FIFO1: ETM_ATVALID Position */\r\n#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */\r\n\r\n#define TPI_FIFO1_ETM_bytecount_Pos 24U                                    /*!< TPI FIFO1: ETM_bytecount Position */\r\n#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */\r\n\r\n#define TPI_FIFO1_ITM2_Pos 16U                            /*!< TPI FIFO1: ITM2 Position */\r\n#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */\r\n\r\n#define TPI_FIFO1_ITM1_Pos 8U                             /*!< TPI FIFO1: ITM1 Position */\r\n#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */\r\n\r\n#define TPI_FIFO1_ITM0_Pos 0U                                 /*!< TPI FIFO1: ITM0 Position */\r\n#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */\r\n\r\n/* TPI ITATBCTR0 Register Definitions */\r\n#define TPI_ITATBCTR0_ATREADY_Pos 0U                                       /*!< TPI ITATBCTR0: ATREADY Position */\r\n#define TPI_ITATBCTR0_ATREADY_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY_Pos*/) /*!< TPI ITATBCTR0: ATREADY Mask */\r\n\r\n/* TPI Integration Mode Control Register Definitions */\r\n#define TPI_ITCTRL_Mode_Pos 0U                                 /*!< TPI ITCTRL: Mode Position */\r\n#define TPI_ITCTRL_Mode_Msk (0x1UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */\r\n\r\n/* TPI DEVID Register Definitions */\r\n#define TPI_DEVID_NRZVALID_Pos 11U                               /*!< TPI DEVID: NRZVALID Position */\r\n#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */\r\n\r\n#define TPI_DEVID_MANCVALID_Pos 10U                                /*!< TPI DEVID: MANCVALID Position */\r\n#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */\r\n\r\n#define TPI_DEVID_PTINVALID_Pos 9U                                 /*!< TPI DEVID: PTINVALID Position */\r\n#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */\r\n\r\n#define TPI_DEVID_MinBufSz_Pos 6U                                /*!< TPI DEVID: MinBufSz Position */\r\n#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */\r\n\r\n#define TPI_DEVID_AsynClkIn_Pos 5U                                 /*!< TPI DEVID: AsynClkIn Position */\r\n#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */\r\n\r\n#define TPI_DEVID_NrTraceInput_Pos 0U                                         /*!< TPI DEVID: NrTraceInput Position */\r\n#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */\r\n\r\n/* TPI DEVTYPE Register Definitions */\r\n#define TPI_DEVTYPE_MajorType_Pos 4U                                   /*!< TPI DEVTYPE: MajorType Position */\r\n#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */\r\n\r\n#define TPI_DEVTYPE_SubType_Pos 0U                                     /*!< TPI DEVTYPE: SubType Position */\r\n#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */\r\n\r\n/*@}*/ /* end of group CMSIS_TPI */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_MPU     Memory Protection Unit (MPU)\r\n  \\brief    Type definitions for the Memory Protection Unit (MPU)\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Memory Protection Unit (MPU).\r\n */\r\ntypedef struct {\r\n  __IM uint32_t  TYPE;    /*!< Offset: 0x000 (R/ )  MPU Type Register */\r\n  __IOM uint32_t CTRL;    /*!< Offset: 0x004 (R/W)  MPU Control Register */\r\n  __IOM uint32_t RNR;     /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */\r\n  __IOM uint32_t RBAR;    /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */\r\n  __IOM uint32_t RASR;    /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W)  MPU Alias 1 Region Base Address Register */\r\n  __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W)  MPU Alias 1 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W)  MPU Alias 2 Region Base Address Register */\r\n  __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W)  MPU Alias 2 Region Attribute and Size Register */\r\n  __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W)  MPU Alias 3 Region Base Address Register */\r\n  __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W)  MPU Alias 3 Region Attribute and Size Register */\r\n} MPU_Type;\r\n\r\n/* MPU Type Register Definitions */\r\n#define MPU_TYPE_IREGION_Pos 16U                              /*!< MPU TYPE: IREGION Position */\r\n#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */\r\n\r\n#define MPU_TYPE_DREGION_Pos 8U                               /*!< MPU TYPE: DREGION Position */\r\n#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */\r\n\r\n#define MPU_TYPE_SEPARATE_Pos 0U                                 /*!< MPU TYPE: SEPARATE Position */\r\n#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */\r\n\r\n/* MPU Control Register Definitions */\r\n#define MPU_CTRL_PRIVDEFENA_Pos 2U                               /*!< MPU CTRL: PRIVDEFENA Position */\r\n#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */\r\n\r\n#define MPU_CTRL_HFNMIENA_Pos 1U                             /*!< MPU CTRL: HFNMIENA Position */\r\n#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */\r\n\r\n#define MPU_CTRL_ENABLE_Pos 0U                               /*!< MPU CTRL: ENABLE Position */\r\n#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */\r\n\r\n/* MPU Region Number Register Definitions */\r\n#define MPU_RNR_REGION_Pos 0U                                 /*!< MPU RNR: REGION Position */\r\n#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */\r\n\r\n/* MPU Region Base Address Register Definitions */\r\n#define MPU_RBAR_ADDR_Pos 5U                                 /*!< MPU RBAR: ADDR Position */\r\n#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */\r\n\r\n#define MPU_RBAR_VALID_Pos 4U                          /*!< MPU RBAR: VALID Position */\r\n#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */\r\n\r\n#define MPU_RBAR_REGION_Pos 0U                                 /*!< MPU RBAR: REGION Position */\r\n#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */\r\n\r\n/* MPU Region Attribute and Size Register Definitions */\r\n#define MPU_RASR_ATTRS_Pos 16U                              /*!< MPU RASR: MPU Region Attribute field Position */\r\n#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */\r\n\r\n#define MPU_RASR_XN_Pos 28U                      /*!< MPU RASR: ATTRS.XN Position */\r\n#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */\r\n\r\n#define MPU_RASR_AP_Pos 24U                        /*!< MPU RASR: ATTRS.AP Position */\r\n#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */\r\n\r\n#define MPU_RASR_TEX_Pos 19U                         /*!< MPU RASR: ATTRS.TEX Position */\r\n#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */\r\n\r\n#define MPU_RASR_S_Pos 18U                     /*!< MPU RASR: ATTRS.S Position */\r\n#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */\r\n\r\n#define MPU_RASR_C_Pos 17U                     /*!< MPU RASR: ATTRS.C Position */\r\n#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */\r\n\r\n#define MPU_RASR_B_Pos 16U                     /*!< MPU RASR: ATTRS.B Position */\r\n#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */\r\n\r\n#define MPU_RASR_SRD_Pos 8U                           /*!< MPU RASR: Sub-Region Disable Position */\r\n#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */\r\n\r\n#define MPU_RASR_SIZE_Pos 1U                            /*!< MPU RASR: Region Size Field Position */\r\n#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */\r\n\r\n#define MPU_RASR_ENABLE_Pos 0U                               /*!< MPU RASR: Region enable bit Position */\r\n#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */\r\n\r\n/*@} end of group CMSIS_MPU */\r\n#endif\r\n\r\n/**\r\n  \\ingroup  CMSIS_core_register\r\n  \\defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)\r\n  \\brief    Type definitions for the Core Debug Registers\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief  Structure type to access the Core Debug Register (CoreDebug).\r\n */\r\ntypedef struct {\r\n  __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W)  Debug Halting Control and Status Register */\r\n  __OM uint32_t  DCRSR; /*!< Offset: 0x004 ( /W)  Debug Core Register Selector Register */\r\n  __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W)  Debug Core Register Data Register */\r\n  __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W)  Debug Exception and Monitor Control Register */\r\n} CoreDebug_Type;\r\n\r\n/* Debug Halting Control and Status Register Definitions */\r\n#define CoreDebug_DHCSR_DBGKEY_Pos 16U                                      /*!< CoreDebug DHCSR: DBGKEY Position */\r\n#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U                                     /*!< CoreDebug DHCSR: S_RESET_ST Position */\r\n#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U                                      /*!< CoreDebug DHCSR: S_RETIRE_ST Position */\r\n#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */\r\n\r\n#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U                                   /*!< CoreDebug DHCSR: S_LOCKUP Position */\r\n#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_SLEEP_Pos 18U                                  /*!< CoreDebug DHCSR: S_SLEEP Position */\r\n#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */\r\n\r\n#define CoreDebug_DHCSR_S_HALT_Pos 17U                                 /*!< CoreDebug DHCSR: S_HALT Position */\r\n#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_S_REGRDY_Pos 16U                                   /*!< CoreDebug DHCSR: S_REGRDY Position */\r\n#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */\r\n\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U                                       /*!< CoreDebug DHCSR: C_SNAPSTALL Position */\r\n#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */\r\n\r\n#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U                                      /*!< CoreDebug DHCSR: C_MASKINTS Position */\r\n#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */\r\n\r\n#define CoreDebug_DHCSR_C_STEP_Pos 2U                                  /*!< CoreDebug DHCSR: C_STEP Position */\r\n#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */\r\n\r\n#define CoreDebug_DHCSR_C_HALT_Pos 1U                                  /*!< CoreDebug DHCSR: C_HALT Position */\r\n#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */\r\n\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U                                         /*!< CoreDebug DHCSR: C_DEBUGEN Position */\r\n#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */\r\n\r\n/* Debug Core Register Selector Register Definitions */\r\n#define CoreDebug_DCRSR_REGWnR_Pos 16U                                 /*!< CoreDebug DCRSR: REGWnR Position */\r\n#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */\r\n\r\n#define CoreDebug_DCRSR_REGSEL_Pos 0U                                         /*!< CoreDebug DCRSR: REGSEL Position */\r\n#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */\r\n\r\n/* Debug Exception and Monitor Control Register Definitions */\r\n#define CoreDebug_DEMCR_TRCENA_Pos 24U                                 /*!< CoreDebug DEMCR: TRCENA Position */\r\n#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_REQ_Pos 19U                                  /*!< CoreDebug DEMCR: MON_REQ Position */\r\n#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_STEP_Pos 18U                                   /*!< CoreDebug DEMCR: MON_STEP Position */\r\n#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_PEND_Pos 17U                                   /*!< CoreDebug DEMCR: MON_PEND Position */\r\n#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */\r\n\r\n#define CoreDebug_DEMCR_MON_EN_Pos 16U                                 /*!< CoreDebug DEMCR: MON_EN Position */\r\n#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U                                     /*!< CoreDebug DEMCR: VC_HARDERR Position */\r\n#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_INTERR_Pos 9U                                     /*!< CoreDebug DEMCR: VC_INTERR Position */\r\n#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U                                     /*!< CoreDebug DEMCR: VC_BUSERR Position */\r\n#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_STATERR_Pos 7U                                      /*!< CoreDebug DEMCR: VC_STATERR Position */\r\n#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U                                     /*!< CoreDebug DEMCR: VC_CHKERR Position */\r\n#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U                                      /*!< CoreDebug DEMCR: VC_NOCPERR Position */\r\n#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_MMERR_Pos 4U                                    /*!< CoreDebug DEMCR: VC_MMERR Position */\r\n#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */\r\n\r\n#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U                                            /*!< CoreDebug DEMCR: VC_CORERESET Position */\r\n#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */\r\n\r\n/*@} end of group CMSIS_CoreDebug */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_bitfield     Core register bit field macros\r\n  \\brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Mask and shift a bit field value for use in a register bit range.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of the bit field.\r\n  \\return           Masked and shifted value.\r\n*/\r\n#define _VAL2FLD(field, value) ((value << field##_Pos) & field##_Msk)\r\n\r\n/**\r\n  \\brief     Mask and shift a register value to extract a bit filed value.\r\n  \\param[in] field  Name of the register bit field.\r\n  \\param[in] value  Value of register.\r\n  \\return           Masked and shifted bit field value.\r\n*/\r\n#define _FLD2VAL(field, value) ((value & field##_Msk) >> field##_Pos)\r\n\r\n/*@} end of group CMSIS_core_bitfield */\r\n\r\n/**\r\n  \\ingroup    CMSIS_core_register\r\n  \\defgroup   CMSIS_core_base     Core Definitions\r\n  \\brief      Definitions for base addresses, unions, and structures.\r\n  @{\r\n */\r\n\r\n/* Memory mapping of Cortex-M3 Hardware */\r\n#define SCS_BASE       (0xE000E000UL)        /*!< System Control Space Base Address */\r\n#define ITM_BASE       (0xE0000000UL)        /*!< ITM Base Address */\r\n#define DWT_BASE       (0xE0001000UL)        /*!< DWT Base Address */\r\n#define TPI_BASE       (0xE0040000UL)        /*!< TPI Base Address */\r\n#define CoreDebug_BASE (0xE000EDF0UL)        /*!< Core Debug Base Address */\r\n#define SysTick_BASE   (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */\r\n#define NVIC_BASE      (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */\r\n#define SCB_BASE       (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */\r\n\r\n#define SCnSCB    ((SCnSCB_Type *)SCS_BASE)          /*!< System control Register not in SCB */\r\n#define SCB       ((SCB_Type *)SCB_BASE)             /*!< SCB configuration struct */\r\n#define SysTick   ((SysTick_Type *)SysTick_BASE)     /*!< SysTick configuration struct */\r\n#define NVIC      ((NVIC_Type *)NVIC_BASE)           /*!< NVIC configuration struct */\r\n#define ITM       ((ITM_Type *)ITM_BASE)             /*!< ITM configuration struct */\r\n#define DWT       ((DWT_Type *)DWT_BASE)             /*!< DWT configuration struct */\r\n#define TPI       ((TPI_Type *)TPI_BASE)             /*!< TPI configuration struct */\r\n#define CoreDebug ((CoreDebug_Type *)CoreDebug_BASE) /*!< Core Debug configuration struct */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n#define MPU_BASE (SCS_BASE + 0x0D90UL)  /*!< Memory Protection Unit */\r\n#define MPU      ((MPU_Type *)MPU_BASE) /*!< Memory Protection Unit */\r\n#endif\r\n\r\n/*@} */\r\n\r\n/*******************************************************************************\r\n *                Hardware Abstraction Layer\r\n  Core Function Interface contains:\r\n  - Core NVIC Functions\r\n  - Core SysTick Functions\r\n  - Core Debug Functions\r\n  - Core Register Access Functions\r\n ******************************************************************************/\r\n/**\r\n  \\defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference\r\n*/\r\n\r\n/* ##########################   NVIC functions  #################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_NVICFunctions NVIC Functions\r\n  \\brief    Functions that manage interrupts and exceptions via the NVIC.\r\n  @{\r\n */\r\n\r\n/**\r\n  \\brief   Set Priority Grouping\r\n  \\details Sets the priority grouping field using the required unlock sequence.\r\n           The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field.\r\n           Only values from 0..7 are used.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]      PriorityGroup  Priority grouping field.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup) {\r\n  uint32_t reg_value;\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n\r\n  reg_value = SCB->AIRCR;                                                                             /* read old register configuration    */\r\n  reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk));                         /* clear bits to change               */\r\n  reg_value  = (reg_value | ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (PriorityGroupTmp << 8U)); /* Insert write key and priorty group */\r\n  SCB->AIRCR = reg_value;\r\n}\r\n\r\n/**\r\n  \\brief   Get Priority Grouping\r\n  \\details Reads the priority grouping field from the NVIC Interrupt Controller.\r\n  \\return                Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field).\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriorityGrouping(void) { return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); }\r\n\r\n/**\r\n  \\brief   Enable External Interrupt\r\n  \\details Enables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) { NVIC->ISER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Disable External Interrupt\r\n  \\details Disables a device-specific interrupt in the NVIC interrupt controller.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn) { NVIC->ICER[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Pending Interrupt\r\n  \\details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not pending.\r\n  \\return             1  Interrupt status is pending.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) {\r\n  return ((uint32_t)(((NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));\r\n}\r\n\r\n/**\r\n  \\brief   Set Pending Interrupt\r\n  \\details Sets the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  Interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn) { NVIC->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Clear Pending Interrupt\r\n  \\details Clears the pending bit of an external interrupt.\r\n  \\param [in]      IRQn  External interrupt number. Value cannot be negative.\r\n */\r\n__STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) { NVIC->ICPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL)); }\r\n\r\n/**\r\n  \\brief   Get Active Interrupt\r\n  \\details Reads the active register in NVIC and returns the active bit.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\return             0  Interrupt status is not active.\r\n  \\return             1  Interrupt status is active.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) { return ((uint32_t)(((NVIC->IABR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); }\r\n\r\n/**\r\n  \\brief   Set Interrupt Priority\r\n  \\details Sets the priority of an interrupt.\r\n  \\note    The priority cannot be set for every core interrupt.\r\n  \\param [in]      IRQn  Interrupt number.\r\n  \\param [in]  priority  Priority to set.\r\n */\r\n__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) {\r\n  if ((int32_t)(IRQn) < 0) {\r\n    SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL) - 4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  } else {\r\n    NVIC->IP[((uint32_t)(int32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Get Interrupt Priority\r\n  \\details Reads the priority of an interrupt.\r\n           The interrupt number can be positive to specify an external (device specific) interrupt,\r\n           or negative to specify an internal (core) interrupt.\r\n  \\param [in]   IRQn  Interrupt number.\r\n  \\return             Interrupt Priority.\r\n                      Value is aligned automatically to the implemented priority bits of the microcontroller.\r\n */\r\n__STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn) {\r\n\r\n  if ((int32_t)(IRQn) < 0) {\r\n    return (((uint32_t)SCB->SHP[(((uint32_t)(int32_t)IRQn) & 0xFUL) - 4UL] >> (8U - __NVIC_PRIO_BITS)));\r\n  } else {\r\n    return (((uint32_t)NVIC->IP[((uint32_t)(int32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS)));\r\n  }\r\n}\r\n\r\n/**\r\n  \\brief   Encode Priority\r\n  \\details Encodes the priority for an interrupt with the given priority group,\r\n           preemptive priority value, and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set.\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [in]   PreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [in]       SubPriority  Subpriority value (starting from 0).\r\n  \\return                        Encoded priority. Value can be used in the function \\ref NVIC_SetPriority().\r\n */\r\n__STATIC_INLINE uint32_t NVIC_EncodePriority(uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  return (((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | ((SubPriority & (uint32_t)((1UL << (SubPriorityBits)) - 1UL))));\r\n}\r\n\r\n/**\r\n  \\brief   Decode Priority\r\n  \\details Decodes an interrupt priority value with a given priority group to\r\n           preemptive priority value and subpriority value.\r\n           In case of a conflict between priority grouping and available\r\n           priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.\r\n  \\param [in]         Priority   Priority value, which can be retrieved with the function \\ref NVIC_GetPriority().\r\n  \\param [in]     PriorityGroup  Used priority group.\r\n  \\param [out] pPreemptPriority  Preemptive priority value (starting from 0).\r\n  \\param [out]     pSubPriority  Subpriority value (starting from 0).\r\n */\r\n__STATIC_INLINE void NVIC_DecodePriority(uint32_t Priority, uint32_t PriorityGroup, uint32_t *const pPreemptPriority, uint32_t *const pSubPriority) {\r\n  uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used          */\r\n  uint32_t PreemptPriorityBits;\r\n  uint32_t SubPriorityBits;\r\n\r\n  PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);\r\n  SubPriorityBits     = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));\r\n\r\n  *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);\r\n  *pSubPriority     = (Priority) & (uint32_t)((1UL << (SubPriorityBits)) - 1UL);\r\n}\r\n\r\n/**\r\n  \\brief   System Reset\r\n  \\details Initiates a system reset request to reset the MCU.\r\n */\r\n__STATIC_INLINE void NVIC_SystemReset(void) {\r\n  __DSB();                                                                                                                         /* Ensure all outstanding memory accesses included\r\n                                                                                                                                      buffered write are completed before reset */\r\n  SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */\r\n  __DSB();                                                                                                                         /* Ensure completion of memory access */\r\n\r\n  for (;;) /* wait until reset */\r\n  {\r\n    __NOP();\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_Core_NVICFunctions */\r\n\r\n/* ##################################    SysTick function  ############################################ */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_Core_SysTickFunctions SysTick Functions\r\n  \\brief    Functions that configure the System.\r\n  @{\r\n */\r\n\r\n#if (__Vendor_SysTickConfig == 0U)\r\n\r\n/**\r\n  \\brief   System Tick Configuration\r\n  \\details Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n           Counter is in free running mode to generate periodic interrupts.\r\n  \\param [in]  ticks  Number of ticks between two interrupts.\r\n  \\return          0  Function succeeded.\r\n  \\return          1  Function failed.\r\n  \\note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the\r\n           function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>\r\n           must contain a vendor-specific implementation of this function.\r\n */\r\n__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {\r\n  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) {\r\n    return (1UL); /* Reload value impossible */\r\n  }\r\n\r\n  SysTick->LOAD = (uint32_t)(ticks - 1UL);                                                         /* set reload register */\r\n  NVIC_SetPriority(SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL);                                 /* set Priority for Systick Interrupt */\r\n  SysTick->VAL  = 0UL;                                                                             /* Load the SysTick Counter Value */\r\n  SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */\r\n  return (0UL);                                                                                    /* Function successful */\r\n}\r\n\r\n#endif\r\n\r\n/*@} end of CMSIS_Core_SysTickFunctions */\r\n\r\n/* ##################################### Debug In/Output function ########################################### */\r\n/**\r\n  \\ingroup  CMSIS_Core_FunctionInterface\r\n  \\defgroup CMSIS_core_DebugFunctions ITM Functions\r\n  \\brief    Functions that access the ITM debug interface.\r\n  @{\r\n */\r\n\r\nextern volatile int32_t ITM_RxBuffer;  /*!< External variable to receive characters. */\r\n#define ITM_RXBUFFER_EMPTY 0x5AA55AA5U /*!< Value identifying \\ref ITM_RxBuffer is ready for next character. */\r\n\r\n/**\r\n  \\brief   ITM Send Character\r\n  \\details Transmits a character via the ITM channel 0, and\r\n           \\li Just returns when no debugger is connected that has booked the output.\r\n           \\li Is blocking when a debugger is connected, but the previous character sent has not been transmitted.\r\n  \\param [in]     ch  Character to transmit.\r\n  \\returns            Character to transmit.\r\n */\r\n__STATIC_INLINE uint32_t ITM_SendChar(uint32_t ch) {\r\n  if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */\r\n      ((ITM->TER & 1UL) != 0UL))                  /* ITM Port #0 enabled */\r\n  {\r\n    while (ITM->PORT[0U].u32 == 0UL) {\r\n      __NOP();\r\n    }\r\n    ITM->PORT[0U].u8 = (uint8_t)ch;\r\n  }\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Receive Character\r\n  \\details Inputs a character via the external variable \\ref ITM_RxBuffer.\r\n  \\return             Received character.\r\n  \\return         -1  No character pending.\r\n */\r\n__STATIC_INLINE int32_t ITM_ReceiveChar(void) {\r\n  int32_t ch = -1; /* no character available */\r\n\r\n  if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) {\r\n    ch           = ITM_RxBuffer;\r\n    ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */\r\n  }\r\n\r\n  return (ch);\r\n}\r\n\r\n/**\r\n  \\brief   ITM Check Character\r\n  \\details Checks whether a character is pending for reading in the variable \\ref ITM_RxBuffer.\r\n  \\return          0  No character available.\r\n  \\return          1  Character available.\r\n */\r\n__STATIC_INLINE int32_t ITM_CheckChar(void) {\r\n\r\n  if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {\r\n    return (0); /* no character available */\r\n  } else {\r\n    return (1); /*    character available */\r\n  }\r\n}\r\n\r\n/*@} end of CMSIS_core_DebugFunctions */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __CORE_SC300_H_DEPENDANT */\r\n\r\n#endif /* __CMSIS_GENERIC */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32_hal_legacy.h\r\n * @author  MCD Application Team\r\n * @version V1.1.1\r\n * @date    12-May-2017\r\n * @brief   This file contains aliases definition for the STM32Cube HAL constants\r\n *          macros and functions maintained for legacy purpose.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32_HAL_LEGACY\r\n#define __STM32_HAL_LEGACY\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n/* Exported types ------------------------------------------------------------*/\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_AES_Aliased_Defines HAL CRYP Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define AES_FLAG_RDERR      CRYP_FLAG_RDERR\r\n#define AES_FLAG_WRERR      CRYP_FLAG_WRERR\r\n#define AES_CLEARFLAG_CCF   CRYP_CLEARFLAG_CCF\r\n#define AES_CLEARFLAG_RDERR CRYP_CLEARFLAG_RDERR\r\n#define AES_CLEARFLAG_WRERR CRYP_CLEARFLAG_WRERR\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_ADC_Aliased_Defines HAL ADC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define ADC_RESOLUTION12b                   ADC_RESOLUTION_12B\r\n#define ADC_RESOLUTION10b                   ADC_RESOLUTION_10B\r\n#define ADC_RESOLUTION8b                    ADC_RESOLUTION_8B\r\n#define ADC_RESOLUTION6b                    ADC_RESOLUTION_6B\r\n#define OVR_DATA_OVERWRITTEN                ADC_OVR_DATA_OVERWRITTEN\r\n#define OVR_DATA_PRESERVED                  ADC_OVR_DATA_PRESERVED\r\n#define EOC_SINGLE_CONV                     ADC_EOC_SINGLE_CONV\r\n#define EOC_SEQ_CONV                        ADC_EOC_SEQ_CONV\r\n#define EOC_SINGLE_SEQ_CONV                 ADC_EOC_SINGLE_SEQ_CONV\r\n#define REGULAR_GROUP                       ADC_REGULAR_GROUP\r\n#define INJECTED_GROUP                      ADC_INJECTED_GROUP\r\n#define REGULAR_INJECTED_GROUP              ADC_REGULAR_INJECTED_GROUP\r\n#define AWD_EVENT                           ADC_AWD_EVENT\r\n#define AWD1_EVENT                          ADC_AWD1_EVENT\r\n#define AWD2_EVENT                          ADC_AWD2_EVENT\r\n#define AWD3_EVENT                          ADC_AWD3_EVENT\r\n#define OVR_EVENT                           ADC_OVR_EVENT\r\n#define JQOVF_EVENT                         ADC_JQOVF_EVENT\r\n#define ALL_CHANNELS                        ADC_ALL_CHANNELS\r\n#define REGULAR_CHANNELS                    ADC_REGULAR_CHANNELS\r\n#define INJECTED_CHANNELS                   ADC_INJECTED_CHANNELS\r\n#define SYSCFG_FLAG_SENSOR_ADC              ADC_FLAG_SENSOR\r\n#define SYSCFG_FLAG_VREF_ADC                ADC_FLAG_VREFINT\r\n#define ADC_CLOCKPRESCALER_PCLK_DIV1        ADC_CLOCK_SYNC_PCLK_DIV1\r\n#define ADC_CLOCKPRESCALER_PCLK_DIV2        ADC_CLOCK_SYNC_PCLK_DIV2\r\n#define ADC_CLOCKPRESCALER_PCLK_DIV4        ADC_CLOCK_SYNC_PCLK_DIV4\r\n#define ADC_CLOCKPRESCALER_PCLK_DIV6        ADC_CLOCK_SYNC_PCLK_DIV6\r\n#define ADC_CLOCKPRESCALER_PCLK_DIV8        ADC_CLOCK_SYNC_PCLK_DIV8\r\n#define ADC_EXTERNALTRIG0_T6_TRGO           ADC_EXTERNALTRIGCONV_T6_TRGO\r\n#define ADC_EXTERNALTRIG1_T21_CC2           ADC_EXTERNALTRIGCONV_T21_CC2\r\n#define ADC_EXTERNALTRIG2_T2_TRGO           ADC_EXTERNALTRIGCONV_T2_TRGO\r\n#define ADC_EXTERNALTRIG3_T2_CC4            ADC_EXTERNALTRIGCONV_T2_CC4\r\n#define ADC_EXTERNALTRIG4_T22_TRGO          ADC_EXTERNALTRIGCONV_T22_TRGO\r\n#define ADC_EXTERNALTRIG7_EXT_IT11          ADC_EXTERNALTRIGCONV_EXT_IT11\r\n#define ADC_CLOCK_ASYNC                     ADC_CLOCK_ASYNC_DIV1\r\n#define ADC_EXTERNALTRIG_EDGE_NONE          ADC_EXTERNALTRIGCONVEDGE_NONE\r\n#define ADC_EXTERNALTRIG_EDGE_RISING        ADC_EXTERNALTRIGCONVEDGE_RISING\r\n#define ADC_EXTERNALTRIG_EDGE_FALLING       ADC_EXTERNALTRIGCONVEDGE_FALLING\r\n#define ADC_EXTERNALTRIG_EDGE_RISINGFALLING ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING\r\n#define ADC_SAMPLETIME_2CYCLE_5             ADC_SAMPLETIME_2CYCLES_5\r\n\r\n#define HAL_ADC_STATE_BUSY_REG HAL_ADC_STATE_REG_BUSY\r\n#define HAL_ADC_STATE_BUSY_INJ HAL_ADC_STATE_INJ_BUSY\r\n#define HAL_ADC_STATE_EOC_REG  HAL_ADC_STATE_REG_EOC\r\n#define HAL_ADC_STATE_EOC_INJ  HAL_ADC_STATE_INJ_EOC\r\n#define HAL_ADC_STATE_ERROR    HAL_ADC_STATE_ERROR_INTERNAL\r\n#define HAL_ADC_STATE_BUSY     HAL_ADC_STATE_BUSY_INTERNAL\r\n#define HAL_ADC_STATE_AWD      HAL_ADC_STATE_AWD1\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_CEC_Aliased_Defines HAL CEC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_CEC_GET_IT __HAL_CEC_GET_FLAG\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_COMP_Aliased_Defines HAL COMP Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define COMP_WINDOWMODE_DISABLED      COMP_WINDOWMODE_DISABLE\r\n#define COMP_WINDOWMODE_ENABLED       COMP_WINDOWMODE_ENABLE\r\n#define COMP_EXTI_LINE_COMP1_EVENT    COMP_EXTI_LINE_COMP1\r\n#define COMP_EXTI_LINE_COMP2_EVENT    COMP_EXTI_LINE_COMP2\r\n#define COMP_EXTI_LINE_COMP3_EVENT    COMP_EXTI_LINE_COMP3\r\n#define COMP_EXTI_LINE_COMP4_EVENT    COMP_EXTI_LINE_COMP4\r\n#define COMP_EXTI_LINE_COMP5_EVENT    COMP_EXTI_LINE_COMP5\r\n#define COMP_EXTI_LINE_COMP6_EVENT    COMP_EXTI_LINE_COMP6\r\n#define COMP_EXTI_LINE_COMP7_EVENT    COMP_EXTI_LINE_COMP7\r\n#define COMP_LPTIMCONNECTION_ENABLED  COMP_LPTIMCONNECTION_IN1_ENABLED /*!< COMPX output is connected to LPTIM input 1 */\r\n#define COMP_OUTPUT_COMP6TIM2OCREFCLR COMP_OUTPUT_COMP6_TIM2OCREFCLR\r\n#if defined(STM32F373xC) || defined(STM32F378xx)\r\n#define COMP_OUTPUT_TIM3IC1      COMP_OUTPUT_COMP1_TIM3IC1\r\n#define COMP_OUTPUT_TIM3OCREFCLR COMP_OUTPUT_COMP1_TIM3OCREFCLR\r\n#endif /* STM32F373xC || STM32F378xx */\r\n\r\n#if defined(STM32L0) || defined(STM32L4)\r\n#define COMP_WINDOWMODE_ENABLE COMP_WINDOWMODE_COMP1_INPUT_PLUS_COMMON\r\n\r\n#define COMP_NONINVERTINGINPUT_IO1 COMP_INPUT_PLUS_IO1\r\n#define COMP_NONINVERTINGINPUT_IO2 COMP_INPUT_PLUS_IO2\r\n#define COMP_NONINVERTINGINPUT_IO3 COMP_INPUT_PLUS_IO3\r\n#define COMP_NONINVERTINGINPUT_IO4 COMP_INPUT_PLUS_IO4\r\n#define COMP_NONINVERTINGINPUT_IO5 COMP_INPUT_PLUS_IO5\r\n#define COMP_NONINVERTINGINPUT_IO6 COMP_INPUT_PLUS_IO6\r\n\r\n#define COMP_INVERTINGINPUT_1_4VREFINT COMP_INPUT_MINUS_1_4VREFINT\r\n#define COMP_INVERTINGINPUT_1_2VREFINT COMP_INPUT_MINUS_1_2VREFINT\r\n#define COMP_INVERTINGINPUT_3_4VREFINT COMP_INPUT_MINUS_3_4VREFINT\r\n#define COMP_INVERTINGINPUT_VREFINT    COMP_INPUT_MINUS_VREFINT\r\n#define COMP_INVERTINGINPUT_DAC1_CH1   COMP_INPUT_MINUS_DAC1_CH1\r\n#define COMP_INVERTINGINPUT_DAC1_CH2   COMP_INPUT_MINUS_DAC1_CH2\r\n#define COMP_INVERTINGINPUT_DAC1       COMP_INPUT_MINUS_DAC1_CH1\r\n#define COMP_INVERTINGINPUT_DAC2       COMP_INPUT_MINUS_DAC1_CH2\r\n#define COMP_INVERTINGINPUT_IO1        COMP_INPUT_MINUS_IO1\r\n#if defined(STM32L0)\r\n/* Issue fixed on STM32L0 COMP driver: only 2 dedicated IO (IO1 and IO2),     */\r\n/* IO2 was wrongly assigned to IO shared with DAC and IO3 was corresponding   */\r\n/* to the second dedicated IO (only for COMP2).                               */\r\n#define COMP_INVERTINGINPUT_IO2 COMP_INPUT_MINUS_DAC1_CH2\r\n#define COMP_INVERTINGINPUT_IO3 COMP_INPUT_MINUS_IO2\r\n#else\r\n#define COMP_INVERTINGINPUT_IO2 COMP_INPUT_MINUS_IO2\r\n#define COMP_INVERTINGINPUT_IO3 COMP_INPUT_MINUS_IO3\r\n#endif\r\n#define COMP_INVERTINGINPUT_IO4 COMP_INPUT_MINUS_IO4\r\n#define COMP_INVERTINGINPUT_IO5 COMP_INPUT_MINUS_IO5\r\n\r\n#define COMP_OUTPUTLEVEL_LOW  COMP_OUTPUT_LEVEL_LOW\r\n#define COMP_OUTPUTLEVEL_HIGH COMP_OUTPUT_LEVEL_HIGH\r\n\r\n/* Note: Literal \"COMP_FLAG_LOCK\" kept for legacy purpose.                    */\r\n/*       To check COMP lock state, use macro \"__HAL_COMP_IS_LOCKED()\".        */\r\n#if defined(COMP_CSR_LOCK)\r\n#define COMP_FLAG_LOCK COMP_CSR_LOCK\r\n#elif defined(COMP_CSR_COMP1LOCK)\r\n#define COMP_FLAG_LOCK COMP_CSR_COMP1LOCK\r\n#elif defined(COMP_CSR_COMPxLOCK)\r\n#define COMP_FLAG_LOCK COMP_CSR_COMPxLOCK\r\n#endif\r\n\r\n#if defined(STM32L4)\r\n#define COMP_BLANKINGSRCE_TIM1OC5  COMP_BLANKINGSRC_TIM1_OC5_COMP1\r\n#define COMP_BLANKINGSRCE_TIM2OC3  COMP_BLANKINGSRC_TIM2_OC3_COMP1\r\n#define COMP_BLANKINGSRCE_TIM3OC3  COMP_BLANKINGSRC_TIM3_OC3_COMP1\r\n#define COMP_BLANKINGSRCE_TIM3OC4  COMP_BLANKINGSRC_TIM3_OC4_COMP2\r\n#define COMP_BLANKINGSRCE_TIM8OC5  COMP_BLANKINGSRC_TIM8_OC5_COMP2\r\n#define COMP_BLANKINGSRCE_TIM15OC1 COMP_BLANKINGSRC_TIM15_OC1_COMP2\r\n#define COMP_BLANKINGSRCE_NONE     COMP_BLANKINGSRC_NONE\r\n#endif\r\n\r\n#if defined(STM32L0)\r\n#define COMP_MODE_HIGHSPEED COMP_POWERMODE_MEDIUMSPEED\r\n#define COMP_MODE_LOWSPEED  COMP_POWERMODE_ULTRALOWPOWER\r\n#else\r\n#define COMP_MODE_HIGHSPEED     COMP_POWERMODE_HIGHSPEED\r\n#define COMP_MODE_MEDIUMSPEED   COMP_POWERMODE_MEDIUMSPEED\r\n#define COMP_MODE_LOWPOWER      COMP_POWERMODE_LOWPOWER\r\n#define COMP_MODE_ULTRALOWPOWER COMP_POWERMODE_ULTRALOWPOWER\r\n#endif\r\n\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_CORTEX_Aliased_Defines HAL CORTEX Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_CORTEX_SYSTICKCLK_CONFIG HAL_SYSTICK_CLKSourceConfig\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_CRC_Aliased_Defines HAL CRC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define CRC_OUTPUTDATA_INVERSION_DISABLED CRC_OUTPUTDATA_INVERSION_DISABLE\r\n#define CRC_OUTPUTDATA_INVERSION_ENABLED  CRC_OUTPUTDATA_INVERSION_ENABLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_DAC_Aliased_Defines HAL DAC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define DAC1_CHANNEL_1              DAC_CHANNEL_1\r\n#define DAC1_CHANNEL_2              DAC_CHANNEL_2\r\n#define DAC2_CHANNEL_1              DAC_CHANNEL_1\r\n#define DAC_WAVE_NONE               0x00000000U\r\n#define DAC_WAVE_NOISE              DAC_CR_WAVE1_0\r\n#define DAC_WAVE_TRIANGLE           DAC_CR_WAVE1_1\r\n#define DAC_WAVEGENERATION_NONE     DAC_WAVE_NONE\r\n#define DAC_WAVEGENERATION_NOISE    DAC_WAVE_NOISE\r\n#define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_DMA_Aliased_Defines HAL DMA Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_REMAPDMA_ADC_DMA_CH2       DMA_REMAP_ADC_DMA_CH2\r\n#define HAL_REMAPDMA_USART1_TX_DMA_CH4 DMA_REMAP_USART1_TX_DMA_CH4\r\n#define HAL_REMAPDMA_USART1_RX_DMA_CH5 DMA_REMAP_USART1_RX_DMA_CH5\r\n#define HAL_REMAPDMA_TIM16_DMA_CH4     DMA_REMAP_TIM16_DMA_CH4\r\n#define HAL_REMAPDMA_TIM17_DMA_CH2     DMA_REMAP_TIM17_DMA_CH2\r\n#define HAL_REMAPDMA_USART3_DMA_CH32   DMA_REMAP_USART3_DMA_CH32\r\n#define HAL_REMAPDMA_TIM16_DMA_CH6     DMA_REMAP_TIM16_DMA_CH6\r\n#define HAL_REMAPDMA_TIM17_DMA_CH7     DMA_REMAP_TIM17_DMA_CH7\r\n#define HAL_REMAPDMA_SPI2_DMA_CH67     DMA_REMAP_SPI2_DMA_CH67\r\n#define HAL_REMAPDMA_USART2_DMA_CH67   DMA_REMAP_USART2_DMA_CH67\r\n#define HAL_REMAPDMA_USART3_DMA_CH32   DMA_REMAP_USART3_DMA_CH32\r\n#define HAL_REMAPDMA_I2C1_DMA_CH76     DMA_REMAP_I2C1_DMA_CH76\r\n#define HAL_REMAPDMA_TIM1_DMA_CH6      DMA_REMAP_TIM1_DMA_CH6\r\n#define HAL_REMAPDMA_TIM2_DMA_CH7      DMA_REMAP_TIM2_DMA_CH7\r\n#define HAL_REMAPDMA_TIM3_DMA_CH6      DMA_REMAP_TIM3_DMA_CH6\r\n\r\n#define IS_HAL_REMAPDMA                IS_DMA_REMAP\r\n#define __HAL_REMAPDMA_CHANNEL_ENABLE  __HAL_DMA_REMAP_CHANNEL_ENABLE\r\n#define __HAL_REMAPDMA_CHANNEL_DISABLE __HAL_DMA_REMAP_CHANNEL_DISABLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_FLASH_Aliased_Defines HAL FLASH Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define TYPEPROGRAM_BYTE             FLASH_TYPEPROGRAM_BYTE\r\n#define TYPEPROGRAM_HALFWORD         FLASH_TYPEPROGRAM_HALFWORD\r\n#define TYPEPROGRAM_WORD             FLASH_TYPEPROGRAM_WORD\r\n#define TYPEPROGRAM_DOUBLEWORD       FLASH_TYPEPROGRAM_DOUBLEWORD\r\n#define TYPEERASE_SECTORS            FLASH_TYPEERASE_SECTORS\r\n#define TYPEERASE_PAGES              FLASH_TYPEERASE_PAGES\r\n#define TYPEERASE_PAGEERASE          FLASH_TYPEERASE_PAGES\r\n#define TYPEERASE_MASSERASE          FLASH_TYPEERASE_MASSERASE\r\n#define WRPSTATE_DISABLE             OB_WRPSTATE_DISABLE\r\n#define WRPSTATE_ENABLE              OB_WRPSTATE_ENABLE\r\n#define HAL_FLASH_TIMEOUT_VALUE      FLASH_TIMEOUT_VALUE\r\n#define OBEX_PCROP                   OPTIONBYTE_PCROP\r\n#define OBEX_BOOTCONFIG              OPTIONBYTE_BOOTCONFIG\r\n#define PCROPSTATE_DISABLE           OB_PCROP_STATE_DISABLE\r\n#define PCROPSTATE_ENABLE            OB_PCROP_STATE_ENABLE\r\n#define TYPEERASEDATA_BYTE           FLASH_TYPEERASEDATA_BYTE\r\n#define TYPEERASEDATA_HALFWORD       FLASH_TYPEERASEDATA_HALFWORD\r\n#define TYPEERASEDATA_WORD           FLASH_TYPEERASEDATA_WORD\r\n#define TYPEPROGRAMDATA_BYTE         FLASH_TYPEPROGRAMDATA_BYTE\r\n#define TYPEPROGRAMDATA_HALFWORD     FLASH_TYPEPROGRAMDATA_HALFWORD\r\n#define TYPEPROGRAMDATA_WORD         FLASH_TYPEPROGRAMDATA_WORD\r\n#define TYPEPROGRAMDATA_FASTBYTE     FLASH_TYPEPROGRAMDATA_FASTBYTE\r\n#define TYPEPROGRAMDATA_FASTHALFWORD FLASH_TYPEPROGRAMDATA_FASTHALFWORD\r\n#define TYPEPROGRAMDATA_FASTWORD     FLASH_TYPEPROGRAMDATA_FASTWORD\r\n#define PAGESIZE                     FLASH_PAGE_SIZE\r\n#define TYPEPROGRAM_FASTBYTE         FLASH_TYPEPROGRAM_BYTE\r\n#define TYPEPROGRAM_FASTHALFWORD     FLASH_TYPEPROGRAM_HALFWORD\r\n#define TYPEPROGRAM_FASTWORD         FLASH_TYPEPROGRAM_WORD\r\n#define VOLTAGE_RANGE_1              FLASH_VOLTAGE_RANGE_1\r\n#define VOLTAGE_RANGE_2              FLASH_VOLTAGE_RANGE_2\r\n#define VOLTAGE_RANGE_3              FLASH_VOLTAGE_RANGE_3\r\n#define VOLTAGE_RANGE_4              FLASH_VOLTAGE_RANGE_4\r\n#define TYPEPROGRAM_FAST             FLASH_TYPEPROGRAM_FAST\r\n#define TYPEPROGRAM_FAST_AND_LAST    FLASH_TYPEPROGRAM_FAST_AND_LAST\r\n#define WRPAREA_BANK1_AREAA          OB_WRPAREA_BANK1_AREAA\r\n#define WRPAREA_BANK1_AREAB          OB_WRPAREA_BANK1_AREAB\r\n#define WRPAREA_BANK2_AREAA          OB_WRPAREA_BANK2_AREAA\r\n#define WRPAREA_BANK2_AREAB          OB_WRPAREA_BANK2_AREAB\r\n#define IWDG_STDBY_FREEZE            OB_IWDG_STDBY_FREEZE\r\n#define IWDG_STDBY_ACTIVE            OB_IWDG_STDBY_RUN\r\n#define IWDG_STOP_FREEZE             OB_IWDG_STOP_FREEZE\r\n#define IWDG_STOP_ACTIVE             OB_IWDG_STOP_RUN\r\n#define FLASH_ERROR_NONE             HAL_FLASH_ERROR_NONE\r\n#define FLASH_ERROR_RD               HAL_FLASH_ERROR_RD\r\n#define FLASH_ERROR_PG               HAL_FLASH_ERROR_PROG\r\n#define FLASH_ERROR_PGP              HAL_FLASH_ERROR_PGS\r\n#define FLASH_ERROR_WRP              HAL_FLASH_ERROR_WRP\r\n#define FLASH_ERROR_OPTV             HAL_FLASH_ERROR_OPTV\r\n#define FLASH_ERROR_OPTVUSR          HAL_FLASH_ERROR_OPTVUSR\r\n#define FLASH_ERROR_PROG             HAL_FLASH_ERROR_PROG\r\n#define FLASH_ERROR_OP               HAL_FLASH_ERROR_OPERATION\r\n#define FLASH_ERROR_PGA              HAL_FLASH_ERROR_PGA\r\n#define FLASH_ERROR_SIZE             HAL_FLASH_ERROR_SIZE\r\n#define FLASH_ERROR_SIZ              HAL_FLASH_ERROR_SIZE\r\n#define FLASH_ERROR_PGS              HAL_FLASH_ERROR_PGS\r\n#define FLASH_ERROR_MIS              HAL_FLASH_ERROR_MIS\r\n#define FLASH_ERROR_FAST             HAL_FLASH_ERROR_FAST\r\n#define FLASH_ERROR_FWWERR           HAL_FLASH_ERROR_FWWERR\r\n#define FLASH_ERROR_NOTZERO          HAL_FLASH_ERROR_NOTZERO\r\n#define FLASH_ERROR_OPERATION        HAL_FLASH_ERROR_OPERATION\r\n#define FLASH_ERROR_ERS              HAL_FLASH_ERROR_ERS\r\n#define OB_WDG_SW                    OB_IWDG_SW\r\n#define OB_WDG_HW                    OB_IWDG_HW\r\n#define OB_SDADC12_VDD_MONITOR_SET   OB_SDACD_VDD_MONITOR_SET\r\n#define OB_SDADC12_VDD_MONITOR_RESET OB_SDACD_VDD_MONITOR_RESET\r\n#define OB_RAM_PARITY_CHECK_SET      OB_SRAM_PARITY_SET\r\n#define OB_RAM_PARITY_CHECK_RESET    OB_SRAM_PARITY_RESET\r\n#define IS_OB_SDADC12_VDD_MONITOR    IS_OB_SDACD_VDD_MONITOR\r\n#define OB_RDP_LEVEL0                OB_RDP_LEVEL_0\r\n#define OB_RDP_LEVEL1                OB_RDP_LEVEL_1\r\n#define OB_RDP_LEVEL2                OB_RDP_LEVEL_2\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SYSCFG_Aliased_Defines HAL SYSCFG Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PA9  I2C_FASTMODEPLUS_PA9\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PA10 I2C_FASTMODEPLUS_PA10\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB6  I2C_FASTMODEPLUS_PB6\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB7  I2C_FASTMODEPLUS_PB7\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB8  I2C_FASTMODEPLUS_PB8\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C_PB9  I2C_FASTMODEPLUS_PB9\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C1     I2C_FASTMODEPLUS_I2C1\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C2     I2C_FASTMODEPLUS_I2C2\r\n#define HAL_SYSCFG_FASTMODEPLUS_I2C3     I2C_FASTMODEPLUS_I2C3\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose\r\n * @{\r\n */\r\n#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7)\r\n#define FMC_NAND_PCC_WAIT_FEATURE_DISABLE FMC_NAND_WAIT_FEATURE_DISABLE\r\n#define FMC_NAND_PCC_WAIT_FEATURE_ENABLE  FMC_NAND_WAIT_FEATURE_ENABLE\r\n#define FMC_NAND_PCC_MEM_BUS_WIDTH_8      FMC_NAND_MEM_BUS_WIDTH_8\r\n#define FMC_NAND_PCC_MEM_BUS_WIDTH_16     FMC_NAND_MEM_BUS_WIDTH_16\r\n#else\r\n#define FMC_NAND_WAIT_FEATURE_DISABLE FMC_NAND_PCC_WAIT_FEATURE_DISABLE\r\n#define FMC_NAND_WAIT_FEATURE_ENABLE  FMC_NAND_PCC_WAIT_FEATURE_ENABLE\r\n#define FMC_NAND_MEM_BUS_WIDTH_8      FMC_NAND_PCC_MEM_BUS_WIDTH_8\r\n#define FMC_NAND_MEM_BUS_WIDTH_16     FMC_NAND_PCC_MEM_BUS_WIDTH_16\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup LL_FSMC_Aliased_Defines LL FSMC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define FSMC_NORSRAM_TYPEDEF          FSMC_NORSRAM_TypeDef\r\n#define FSMC_NORSRAM_EXTENDED_TYPEDEF FSMC_NORSRAM_EXTENDED_TypeDef\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_GPIO_Aliased_Macros HAL GPIO Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define GET_GPIO_SOURCE GPIO_GET_INDEX\r\n#define GET_GPIO_INDEX  GPIO_GET_INDEX\r\n\r\n#if defined(STM32F4)\r\n#define GPIO_AF12_SDMMC  GPIO_AF12_SDIO\r\n#define GPIO_AF12_SDMMC1 GPIO_AF12_SDIO\r\n#endif\r\n\r\n#if defined(STM32F7)\r\n#define GPIO_AF12_SDIO  GPIO_AF12_SDMMC1\r\n#define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1\r\n#endif\r\n\r\n#if defined(STM32L4)\r\n#define GPIO_AF12_SDIO  GPIO_AF12_SDMMC1\r\n#define GPIO_AF12_SDMMC GPIO_AF12_SDMMC1\r\n#endif\r\n\r\n#define GPIO_AF0_LPTIM GPIO_AF0_LPTIM1\r\n#define GPIO_AF1_LPTIM GPIO_AF1_LPTIM1\r\n#define GPIO_AF2_LPTIM GPIO_AF2_LPTIM1\r\n\r\n#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7)\r\n#define GPIO_SPEED_LOW    GPIO_SPEED_FREQ_LOW\r\n#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM\r\n#define GPIO_SPEED_FAST   GPIO_SPEED_FREQ_HIGH\r\n#define GPIO_SPEED_HIGH   GPIO_SPEED_FREQ_VERY_HIGH\r\n#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 */\r\n\r\n#if defined(STM32L1)\r\n#define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW\r\n#define GPIO_SPEED_LOW      GPIO_SPEED_FREQ_MEDIUM\r\n#define GPIO_SPEED_MEDIUM   GPIO_SPEED_FREQ_HIGH\r\n#define GPIO_SPEED_HIGH     GPIO_SPEED_FREQ_VERY_HIGH\r\n#endif /* STM32L1 */\r\n\r\n#if defined(STM32F0) || defined(STM32F3) || defined(STM32F1)\r\n#define GPIO_SPEED_LOW    GPIO_SPEED_FREQ_LOW\r\n#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM\r\n#define GPIO_SPEED_HIGH   GPIO_SPEED_FREQ_HIGH\r\n#endif /* STM32F0 || STM32F3 || STM32F1 */\r\n\r\n#define GPIO_AF6_DFSDM GPIO_AF6_DFSDM1\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_JPEG_Aliased_Macros HAL JPEG Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#if defined(STM32H7)\r\n#define __HAL_RCC_JPEG_CLK_ENABLE        __HAL_RCC_JPGDECEN_CLK_ENABLE\r\n#define __HAL_RCC_JPEG_CLK_DISABLE       __HAL_RCC_JPGDECEN_CLK_DISABLE\r\n#define __HAL_RCC_JPEG_FORCE_RESET       __HAL_RCC_JPGDECRST_FORCE_RESET\r\n#define __HAL_RCC_JPEG_RELEASE_RESET     __HAL_RCC_JPGDECRST_RELEASE_RESET\r\n#define __HAL_RCC_JPEG_CLK_SLEEP_ENABLE  __HAL_RCC_JPGDEC_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_JPEG_CLK_SLEEP_DISABLE __HAL_RCC_JPGDEC_CLK_SLEEP_DISABLE\r\n#endif /* STM32H7  */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_HRTIM_Aliased_Macros HAL HRTIM Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define HRTIM_TIMDELAYEDPROTECTION_DISABLED           HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DISABLED\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT1_EEV68  HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT1_EEV6\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_EEV68  HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_EEV6\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV68  HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV6\r\n#define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV68     HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV6\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT1_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT1_DEEV7\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDOUT2_DEEV79 HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDOUT2_DEEV7\r\n#define HRTIM_TIMDELAYEDPROTECTION_DELAYEDBOTH_EEV79  HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_DELAYEDBOTH_EEV7\r\n#define HRTIM_TIMDELAYEDPROTECTION_BALANCED_EEV79     HRTIM_TIMER_A_B_C_DELAYEDPROTECTION_BALANCED_EEV7\r\n\r\n#define __HAL_HRTIM_SetCounter        __HAL_HRTIM_SETCOUNTER\r\n#define __HAL_HRTIM_GetCounter        __HAL_HRTIM_GETCOUNTER\r\n#define __HAL_HRTIM_SetPeriod         __HAL_HRTIM_SETPERIOD\r\n#define __HAL_HRTIM_GetPeriod         __HAL_HRTIM_GETPERIOD\r\n#define __HAL_HRTIM_SetClockPrescaler __HAL_HRTIM_SETCLOCKPRESCALER\r\n#define __HAL_HRTIM_GetClockPrescaler __HAL_HRTIM_GETCLOCKPRESCALER\r\n#define __HAL_HRTIM_SetCompare        __HAL_HRTIM_SETCOMPARE\r\n#define __HAL_HRTIM_GetCompare        __HAL_HRTIM_GETCOMPARE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_I2C_Aliased_Defines HAL I2C Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define I2C_DUALADDRESS_DISABLED  I2C_DUALADDRESS_DISABLE\r\n#define I2C_DUALADDRESS_ENABLED   I2C_DUALADDRESS_ENABLE\r\n#define I2C_GENERALCALL_DISABLED  I2C_GENERALCALL_DISABLE\r\n#define I2C_GENERALCALL_ENABLED   I2C_GENERALCALL_ENABLE\r\n#define I2C_NOSTRETCH_DISABLED    I2C_NOSTRETCH_DISABLE\r\n#define I2C_NOSTRETCH_ENABLED     I2C_NOSTRETCH_ENABLE\r\n#define I2C_ANALOGFILTER_ENABLED  I2C_ANALOGFILTER_ENABLE\r\n#define I2C_ANALOGFILTER_DISABLED I2C_ANALOGFILTER_DISABLE\r\n#if defined(STM32F0) || defined(STM32F1) || defined(STM32F3) || defined(STM32G0) || defined(STM32L4) || defined(STM32L1) || defined(STM32F7)\r\n#define HAL_I2C_STATE_MEM_BUSY_TX    HAL_I2C_STATE_BUSY_TX\r\n#define HAL_I2C_STATE_MEM_BUSY_RX    HAL_I2C_STATE_BUSY_RX\r\n#define HAL_I2C_STATE_MASTER_BUSY_TX HAL_I2C_STATE_BUSY_TX\r\n#define HAL_I2C_STATE_MASTER_BUSY_RX HAL_I2C_STATE_BUSY_RX\r\n#define HAL_I2C_STATE_SLAVE_BUSY_TX  HAL_I2C_STATE_BUSY_TX\r\n#define HAL_I2C_STATE_SLAVE_BUSY_RX  HAL_I2C_STATE_BUSY_RX\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_IRDA_Aliased_Defines HAL IRDA Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define IRDA_ONE_BIT_SAMPLE_DISABLED IRDA_ONE_BIT_SAMPLE_DISABLE\r\n#define IRDA_ONE_BIT_SAMPLE_ENABLED  IRDA_ONE_BIT_SAMPLE_ENABLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_IWDG_Aliased_Defines HAL IWDG Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define KR_KEY_RELOAD IWDG_KEY_RELOAD\r\n#define KR_KEY_ENABLE IWDG_KEY_ENABLE\r\n#define KR_KEY_EWA    IWDG_KEY_WRITE_ACCESS_ENABLE\r\n#define KR_KEY_DWA    IWDG_KEY_WRITE_ACCESS_DISABLE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_LPTIM_Aliased_Defines HAL LPTIM Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define LPTIM_CLOCKSAMPLETIME_DIRECTTRANSISTION LPTIM_CLOCKSAMPLETIME_DIRECTTRANSITION\r\n#define LPTIM_CLOCKSAMPLETIME_2TRANSISTIONS     LPTIM_CLOCKSAMPLETIME_2TRANSITIONS\r\n#define LPTIM_CLOCKSAMPLETIME_4TRANSISTIONS     LPTIM_CLOCKSAMPLETIME_4TRANSITIONS\r\n#define LPTIM_CLOCKSAMPLETIME_8TRANSISTIONS     LPTIM_CLOCKSAMPLETIME_8TRANSITIONS\r\n\r\n#define LPTIM_CLOCKPOLARITY_RISINGEDGE  LPTIM_CLOCKPOLARITY_RISING\r\n#define LPTIM_CLOCKPOLARITY_FALLINGEDGE LPTIM_CLOCKPOLARITY_FALLING\r\n#define LPTIM_CLOCKPOLARITY_BOTHEDGES   LPTIM_CLOCKPOLARITY_RISING_FALLING\r\n\r\n#define LPTIM_TRIGSAMPLETIME_DIRECTTRANSISTION LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION\r\n#define LPTIM_TRIGSAMPLETIME_2TRANSISTIONS     LPTIM_TRIGSAMPLETIME_2TRANSITIONS\r\n#define LPTIM_TRIGSAMPLETIME_4TRANSISTIONS     LPTIM_TRIGSAMPLETIME_4TRANSITIONS\r\n#define LPTIM_TRIGSAMPLETIME_8TRANSISTIONS     LPTIM_TRIGSAMPLETIME_8TRANSITIONS\r\n\r\n/* The following 3 definition have also been present in a temporary version of lptim.h */\r\n/* They need to be renamed also to the right name, just in case */\r\n#define LPTIM_TRIGSAMPLETIME_2TRANSITION LPTIM_TRIGSAMPLETIME_2TRANSITIONS\r\n#define LPTIM_TRIGSAMPLETIME_4TRANSITION LPTIM_TRIGSAMPLETIME_4TRANSITIONS\r\n#define LPTIM_TRIGSAMPLETIME_8TRANSITION LPTIM_TRIGSAMPLETIME_8TRANSITIONS\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_NAND_Aliased_Defines HAL NAND Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_NAND_Read_Page       HAL_NAND_Read_Page_8b\r\n#define HAL_NAND_Write_Page      HAL_NAND_Write_Page_8b\r\n#define HAL_NAND_Read_SpareArea  HAL_NAND_Read_SpareArea_8b\r\n#define HAL_NAND_Write_SpareArea HAL_NAND_Write_SpareArea_8b\r\n\r\n#define NAND_AddressTypedef NAND_AddressTypeDef\r\n\r\n#define __ARRAY_ADDRESS  ARRAY_ADDRESS\r\n#define __ADDR_1st_CYCLE ADDR_1ST_CYCLE\r\n#define __ADDR_2nd_CYCLE ADDR_2ND_CYCLE\r\n#define __ADDR_3rd_CYCLE ADDR_3RD_CYCLE\r\n#define __ADDR_4th_CYCLE ADDR_4TH_CYCLE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_NOR_Aliased_Defines HAL NOR Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define NOR_StatusTypedef HAL_NOR_StatusTypeDef\r\n#define NOR_SUCCESS       HAL_NOR_STATUS_SUCCESS\r\n#define NOR_ONGOING       HAL_NOR_STATUS_ONGOING\r\n#define NOR_ERROR         HAL_NOR_STATUS_ERROR\r\n#define NOR_TIMEOUT       HAL_NOR_STATUS_TIMEOUT\r\n\r\n#define __NOR_WRITE      NOR_WRITE\r\n#define __NOR_ADDR_SHIFT NOR_ADDR_SHIFT\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_OPAMP_Aliased_Defines HAL OPAMP Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define OPAMP_NONINVERTINGINPUT_VP0 OPAMP_NONINVERTINGINPUT_IO0\r\n#define OPAMP_NONINVERTINGINPUT_VP1 OPAMP_NONINVERTINGINPUT_IO1\r\n#define OPAMP_NONINVERTINGINPUT_VP2 OPAMP_NONINVERTINGINPUT_IO2\r\n#define OPAMP_NONINVERTINGINPUT_VP3 OPAMP_NONINVERTINGINPUT_IO3\r\n\r\n#define OPAMP_SEC_NONINVERTINGINPUT_VP0 OPAMP_SEC_NONINVERTINGINPUT_IO0\r\n#define OPAMP_SEC_NONINVERTINGINPUT_VP1 OPAMP_SEC_NONINVERTINGINPUT_IO1\r\n#define OPAMP_SEC_NONINVERTINGINPUT_VP2 OPAMP_SEC_NONINVERTINGINPUT_IO2\r\n#define OPAMP_SEC_NONINVERTINGINPUT_VP3 OPAMP_SEC_NONINVERTINGINPUT_IO3\r\n\r\n#define OPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0\r\n#define OPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1\r\n\r\n#define IOPAMP_INVERTINGINPUT_VM0 OPAMP_INVERTINGINPUT_IO0\r\n#define IOPAMP_INVERTINGINPUT_VM1 OPAMP_INVERTINGINPUT_IO1\r\n\r\n#define OPAMP_SEC_INVERTINGINPUT_VM0 OPAMP_SEC_INVERTINGINPUT_IO0\r\n#define OPAMP_SEC_INVERTINGINPUT_VM1 OPAMP_SEC_INVERTINGINPUT_IO1\r\n\r\n#define OPAMP_INVERTINGINPUT_VINM OPAMP_SEC_INVERTINGINPUT_IO1\r\n\r\n#define OPAMP_PGACONNECT_NO  OPAMP_PGA_CONNECT_INVERTINGINPUT_NO\r\n#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0\r\n#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_I2S_Aliased_Defines HAL I2S Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define I2S_STANDARD_PHILLIPS I2S_STANDARD_PHILIPS\r\n#if defined(STM32F7)\r\n#define I2S_CLOCK_SYSCLK I2S_CLOCK_PLL\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_PCCARD_Aliased_Defines HAL PCCARD Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n/* Compact Flash-ATA registers description */\r\n#define CF_DATA                 ATA_DATA\r\n#define CF_SECTOR_COUNT         ATA_SECTOR_COUNT\r\n#define CF_SECTOR_NUMBER        ATA_SECTOR_NUMBER\r\n#define CF_CYLINDER_LOW         ATA_CYLINDER_LOW\r\n#define CF_CYLINDER_HIGH        ATA_CYLINDER_HIGH\r\n#define CF_CARD_HEAD            ATA_CARD_HEAD\r\n#define CF_STATUS_CMD           ATA_STATUS_CMD\r\n#define CF_STATUS_CMD_ALTERNATE ATA_STATUS_CMD_ALTERNATE\r\n#define CF_COMMON_DATA_AREA     ATA_COMMON_DATA_AREA\r\n\r\n/* Compact Flash-ATA commands */\r\n#define CF_READ_SECTOR_CMD  ATA_READ_SECTOR_CMD\r\n#define CF_WRITE_SECTOR_CMD ATA_WRITE_SECTOR_CMD\r\n#define CF_ERASE_SECTOR_CMD ATA_ERASE_SECTOR_CMD\r\n#define CF_IDENTIFY_CMD     ATA_IDENTIFY_CMD\r\n\r\n#define PCCARD_StatusTypedef HAL_PCCARD_StatusTypeDef\r\n#define PCCARD_SUCCESS       HAL_PCCARD_STATUS_SUCCESS\r\n#define PCCARD_ONGOING       HAL_PCCARD_STATUS_ONGOING\r\n#define PCCARD_ERROR         HAL_PCCARD_STATUS_ERROR\r\n#define PCCARD_TIMEOUT       HAL_PCCARD_STATUS_TIMEOUT\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_RTC_Aliased_Defines HAL RTC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define FORMAT_BIN RTC_FORMAT_BIN\r\n#define FORMAT_BCD RTC_FORMAT_BCD\r\n\r\n#define RTC_ALARMSUBSECONDMASK_None    RTC_ALARMSUBSECONDMASK_NONE\r\n#define RTC_TAMPERERASEBACKUP_ENABLED  RTC_TAMPER_ERASE_BACKUP_ENABLE\r\n#define RTC_TAMPERERASEBACKUP_DISABLED RTC_TAMPER_ERASE_BACKUP_DISABLE\r\n#define RTC_TAMPERMASK_FLAG_DISABLED   RTC_TAMPERMASK_FLAG_DISABLE\r\n#define RTC_TAMPERMASK_FLAG_ENABLED    RTC_TAMPERMASK_FLAG_ENABLE\r\n\r\n#define RTC_MASKTAMPERFLAG_DISABLED    RTC_TAMPERMASK_FLAG_DISABLE\r\n#define RTC_MASKTAMPERFLAG_ENABLED     RTC_TAMPERMASK_FLAG_ENABLE\r\n#define RTC_TAMPERERASEBACKUP_ENABLED  RTC_TAMPER_ERASE_BACKUP_ENABLE\r\n#define RTC_TAMPERERASEBACKUP_DISABLED RTC_TAMPER_ERASE_BACKUP_DISABLE\r\n#define RTC_MASKTAMPERFLAG_DISABLED    RTC_TAMPERMASK_FLAG_DISABLE\r\n#define RTC_MASKTAMPERFLAG_ENABLED     RTC_TAMPERMASK_FLAG_ENABLE\r\n#define RTC_TAMPER1_2_INTERRUPT        RTC_ALL_TAMPER_INTERRUPT\r\n#define RTC_TAMPER1_2_3_INTERRUPT      RTC_ALL_TAMPER_INTERRUPT\r\n\r\n#define RTC_TIMESTAMPPIN_PC13 RTC_TIMESTAMPPIN_DEFAULT\r\n#define RTC_TIMESTAMPPIN_PA0  RTC_TIMESTAMPPIN_POS1\r\n#define RTC_TIMESTAMPPIN_PI8  RTC_TIMESTAMPPIN_POS1\r\n#define RTC_TIMESTAMPPIN_PC1  RTC_TIMESTAMPPIN_POS2\r\n\r\n#define RTC_OUTPUT_REMAP_PC13 RTC_OUTPUT_REMAP_NONE\r\n#define RTC_OUTPUT_REMAP_PB14 RTC_OUTPUT_REMAP_POS1\r\n#define RTC_OUTPUT_REMAP_PB2  RTC_OUTPUT_REMAP_POS1\r\n\r\n#define RTC_TAMPERPIN_PC13 RTC_TAMPERPIN_DEFAULT\r\n#define RTC_TAMPERPIN_PA0  RTC_TAMPERPIN_POS1\r\n#define RTC_TAMPERPIN_PI8  RTC_TAMPERPIN_POS1\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SMARTCARD_Aliased_Defines HAL SMARTCARD Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define SMARTCARD_NACK_ENABLED  SMARTCARD_NACK_ENABLE\r\n#define SMARTCARD_NACK_DISABLED SMARTCARD_NACK_DISABLE\r\n\r\n#define SMARTCARD_ONEBIT_SAMPLING_DISABLED SMARTCARD_ONE_BIT_SAMPLE_DISABLE\r\n#define SMARTCARD_ONEBIT_SAMPLING_ENABLED  SMARTCARD_ONE_BIT_SAMPLE_ENABLE\r\n#define SMARTCARD_ONEBIT_SAMPLING_DISABLE  SMARTCARD_ONE_BIT_SAMPLE_DISABLE\r\n#define SMARTCARD_ONEBIT_SAMPLING_ENABLE   SMARTCARD_ONE_BIT_SAMPLE_ENABLE\r\n\r\n#define SMARTCARD_TIMEOUT_DISABLED SMARTCARD_TIMEOUT_DISABLE\r\n#define SMARTCARD_TIMEOUT_ENABLED  SMARTCARD_TIMEOUT_ENABLE\r\n\r\n#define SMARTCARD_LASTBIT_DISABLED SMARTCARD_LASTBIT_DISABLE\r\n#define SMARTCARD_LASTBIT_ENABLED  SMARTCARD_LASTBIT_ENABLE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SMBUS_Aliased_Defines HAL SMBUS Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define SMBUS_DUALADDRESS_DISABLED   SMBUS_DUALADDRESS_DISABLE\r\n#define SMBUS_DUALADDRESS_ENABLED    SMBUS_DUALADDRESS_ENABLE\r\n#define SMBUS_GENERALCALL_DISABLED   SMBUS_GENERALCALL_DISABLE\r\n#define SMBUS_GENERALCALL_ENABLED    SMBUS_GENERALCALL_ENABLE\r\n#define SMBUS_NOSTRETCH_DISABLED     SMBUS_NOSTRETCH_DISABLE\r\n#define SMBUS_NOSTRETCH_ENABLED      SMBUS_NOSTRETCH_ENABLE\r\n#define SMBUS_ANALOGFILTER_ENABLED   SMBUS_ANALOGFILTER_ENABLE\r\n#define SMBUS_ANALOGFILTER_DISABLED  SMBUS_ANALOGFILTER_DISABLE\r\n#define SMBUS_PEC_DISABLED           SMBUS_PEC_DISABLE\r\n#define SMBUS_PEC_ENABLED            SMBUS_PEC_ENABLE\r\n#define HAL_SMBUS_STATE_SLAVE_LISTEN HAL_SMBUS_STATE_LISTEN\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SPI_Aliased_Defines HAL SPI Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define SPI_TIMODE_DISABLED SPI_TIMODE_DISABLE\r\n#define SPI_TIMODE_ENABLED  SPI_TIMODE_ENABLE\r\n\r\n#define SPI_CRCCALCULATION_DISABLED SPI_CRCCALCULATION_DISABLE\r\n#define SPI_CRCCALCULATION_ENABLED  SPI_CRCCALCULATION_ENABLE\r\n\r\n#define SPI_NSS_PULSE_DISABLED SPI_NSS_PULSE_DISABLE\r\n#define SPI_NSS_PULSE_ENABLED  SPI_NSS_PULSE_ENABLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_TIM_Aliased_Defines HAL TIM Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define CCER_CCxE_MASK  TIM_CCER_CCxE_MASK\r\n#define CCER_CCxNE_MASK TIM_CCER_CCxNE_MASK\r\n\r\n#define TIM_DMABase_CR1   TIM_DMABASE_CR1\r\n#define TIM_DMABase_CR2   TIM_DMABASE_CR2\r\n#define TIM_DMABase_SMCR  TIM_DMABASE_SMCR\r\n#define TIM_DMABase_DIER  TIM_DMABASE_DIER\r\n#define TIM_DMABase_SR    TIM_DMABASE_SR\r\n#define TIM_DMABase_EGR   TIM_DMABASE_EGR\r\n#define TIM_DMABase_CCMR1 TIM_DMABASE_CCMR1\r\n#define TIM_DMABase_CCMR2 TIM_DMABASE_CCMR2\r\n#define TIM_DMABase_CCER  TIM_DMABASE_CCER\r\n#define TIM_DMABase_CNT   TIM_DMABASE_CNT\r\n#define TIM_DMABase_PSC   TIM_DMABASE_PSC\r\n#define TIM_DMABase_ARR   TIM_DMABASE_ARR\r\n#define TIM_DMABase_RCR   TIM_DMABASE_RCR\r\n#define TIM_DMABase_CCR1  TIM_DMABASE_CCR1\r\n#define TIM_DMABase_CCR2  TIM_DMABASE_CCR2\r\n#define TIM_DMABase_CCR3  TIM_DMABASE_CCR3\r\n#define TIM_DMABase_CCR4  TIM_DMABASE_CCR4\r\n#define TIM_DMABase_BDTR  TIM_DMABASE_BDTR\r\n#define TIM_DMABase_DCR   TIM_DMABASE_DCR\r\n#define TIM_DMABase_DMAR  TIM_DMABASE_DMAR\r\n#define TIM_DMABase_OR1   TIM_DMABASE_OR1\r\n#define TIM_DMABase_CCMR3 TIM_DMABASE_CCMR3\r\n#define TIM_DMABase_CCR5  TIM_DMABASE_CCR5\r\n#define TIM_DMABase_CCR6  TIM_DMABASE_CCR6\r\n#define TIM_DMABase_OR2   TIM_DMABASE_OR2\r\n#define TIM_DMABase_OR3   TIM_DMABASE_OR3\r\n#define TIM_DMABase_OR    TIM_DMABASE_OR\r\n\r\n#define TIM_EventSource_Update  TIM_EVENTSOURCE_UPDATE\r\n#define TIM_EventSource_CC1     TIM_EVENTSOURCE_CC1\r\n#define TIM_EventSource_CC2     TIM_EVENTSOURCE_CC2\r\n#define TIM_EventSource_CC3     TIM_EVENTSOURCE_CC3\r\n#define TIM_EventSource_CC4     TIM_EVENTSOURCE_CC4\r\n#define TIM_EventSource_COM     TIM_EVENTSOURCE_COM\r\n#define TIM_EventSource_Trigger TIM_EVENTSOURCE_TRIGGER\r\n#define TIM_EventSource_Break   TIM_EVENTSOURCE_BREAK\r\n#define TIM_EventSource_Break2  TIM_EVENTSOURCE_BREAK2\r\n\r\n#define TIM_DMABurstLength_1Transfer   TIM_DMABURSTLENGTH_1TRANSFER\r\n#define TIM_DMABurstLength_2Transfers  TIM_DMABURSTLENGTH_2TRANSFERS\r\n#define TIM_DMABurstLength_3Transfers  TIM_DMABURSTLENGTH_3TRANSFERS\r\n#define TIM_DMABurstLength_4Transfers  TIM_DMABURSTLENGTH_4TRANSFERS\r\n#define TIM_DMABurstLength_5Transfers  TIM_DMABURSTLENGTH_5TRANSFERS\r\n#define TIM_DMABurstLength_6Transfers  TIM_DMABURSTLENGTH_6TRANSFERS\r\n#define TIM_DMABurstLength_7Transfers  TIM_DMABURSTLENGTH_7TRANSFERS\r\n#define TIM_DMABurstLength_8Transfers  TIM_DMABURSTLENGTH_8TRANSFERS\r\n#define TIM_DMABurstLength_9Transfers  TIM_DMABURSTLENGTH_9TRANSFERS\r\n#define TIM_DMABurstLength_10Transfers TIM_DMABURSTLENGTH_10TRANSFERS\r\n#define TIM_DMABurstLength_11Transfers TIM_DMABURSTLENGTH_11TRANSFERS\r\n#define TIM_DMABurstLength_12Transfers TIM_DMABURSTLENGTH_12TRANSFERS\r\n#define TIM_DMABurstLength_13Transfers TIM_DMABURSTLENGTH_13TRANSFERS\r\n#define TIM_DMABurstLength_14Transfers TIM_DMABURSTLENGTH_14TRANSFERS\r\n#define TIM_DMABurstLength_15Transfers TIM_DMABURSTLENGTH_15TRANSFERS\r\n#define TIM_DMABurstLength_16Transfers TIM_DMABURSTLENGTH_16TRANSFERS\r\n#define TIM_DMABurstLength_17Transfers TIM_DMABURSTLENGTH_17TRANSFERS\r\n#define TIM_DMABurstLength_18Transfers TIM_DMABURSTLENGTH_18TRANSFERS\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_TSC_Aliased_Defines HAL TSC Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define TSC_SYNC_POL_FALL      TSC_SYNC_POLARITY_FALLING\r\n#define TSC_SYNC_POL_RISE_HIGH TSC_SYNC_POLARITY_RISING\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_UART_Aliased_Defines HAL UART Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define UART_ONEBIT_SAMPLING_DISABLED UART_ONE_BIT_SAMPLE_DISABLE\r\n#define UART_ONEBIT_SAMPLING_ENABLED  UART_ONE_BIT_SAMPLE_ENABLE\r\n#define UART_ONE_BIT_SAMPLE_DISABLED  UART_ONE_BIT_SAMPLE_DISABLE\r\n#define UART_ONE_BIT_SAMPLE_ENABLED   UART_ONE_BIT_SAMPLE_ENABLE\r\n\r\n#define __HAL_UART_ONEBIT_ENABLE  __HAL_UART_ONE_BIT_SAMPLE_ENABLE\r\n#define __HAL_UART_ONEBIT_DISABLE __HAL_UART_ONE_BIT_SAMPLE_DISABLE\r\n\r\n#define __DIV_SAMPLING16      UART_DIV_SAMPLING16\r\n#define __DIVMANT_SAMPLING16  UART_DIVMANT_SAMPLING16\r\n#define __DIVFRAQ_SAMPLING16  UART_DIVFRAQ_SAMPLING16\r\n#define __UART_BRR_SAMPLING16 UART_BRR_SAMPLING16\r\n\r\n#define __DIV_SAMPLING8      UART_DIV_SAMPLING8\r\n#define __DIVMANT_SAMPLING8  UART_DIVMANT_SAMPLING8\r\n#define __DIVFRAQ_SAMPLING8  UART_DIVFRAQ_SAMPLING8\r\n#define __UART_BRR_SAMPLING8 UART_BRR_SAMPLING8\r\n\r\n#define __DIV_LPUART UART_DIV_LPUART\r\n\r\n#define UART_WAKEUPMETHODE_IDLELINE    UART_WAKEUPMETHOD_IDLELINE\r\n#define UART_WAKEUPMETHODE_ADDRESSMARK UART_WAKEUPMETHOD_ADDRESSMARK\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_USART_Aliased_Defines HAL USART Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define USART_CLOCK_DISABLED USART_CLOCK_DISABLE\r\n#define USART_CLOCK_ENABLED  USART_CLOCK_ENABLE\r\n\r\n#define USARTNACK_ENABLED  USART_NACK_ENABLE\r\n#define USARTNACK_DISABLED USART_NACK_DISABLE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_WWDG_Aliased_Defines HAL WWDG Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define CFR_BASE WWDG_CFR_BASE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_CAN_Aliased_Defines HAL CAN Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define CAN_FilterFIFO0      CAN_FILTER_FIFO0\r\n#define CAN_FilterFIFO1      CAN_FILTER_FIFO1\r\n#define CAN_IT_RQCP0         CAN_IT_TME\r\n#define CAN_IT_RQCP1         CAN_IT_TME\r\n#define CAN_IT_RQCP2         CAN_IT_TME\r\n#define INAK_TIMEOUT         CAN_TIMEOUT_VALUE\r\n#define SLAK_TIMEOUT         CAN_TIMEOUT_VALUE\r\n#define CAN_TXSTATUS_FAILED  ((uint8_t)0x00)\r\n#define CAN_TXSTATUS_OK      ((uint8_t)0x01)\r\n#define CAN_TXSTATUS_PENDING ((uint8_t)0x02)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_ETH_Aliased_Defines HAL ETH Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define VLAN_TAG            ETH_VLAN_TAG\r\n#define MIN_ETH_PAYLOAD     ETH_MIN_ETH_PAYLOAD\r\n#define MAX_ETH_PAYLOAD     ETH_MAX_ETH_PAYLOAD\r\n#define JUMBO_FRAME_PAYLOAD ETH_JUMBO_FRAME_PAYLOAD\r\n#define MACMIIAR_CR_MASK    ETH_MACMIIAR_CR_MASK\r\n#define MACCR_CLEAR_MASK    ETH_MACCR_CLEAR_MASK\r\n#define MACFCR_CLEAR_MASK   ETH_MACFCR_CLEAR_MASK\r\n#define DMAOMR_CLEAR_MASK   ETH_DMAOMR_CLEAR_MASK\r\n\r\n#define ETH_MMCCR       0x00000100U\r\n#define ETH_MMCRIR      0x00000104U\r\n#define ETH_MMCTIR      0x00000108U\r\n#define ETH_MMCRIMR     0x0000010CU\r\n#define ETH_MMCTIMR     0x00000110U\r\n#define ETH_MMCTGFSCCR  0x0000014CU\r\n#define ETH_MMCTGFMSCCR 0x00000150U\r\n#define ETH_MMCTGFCR    0x00000168U\r\n#define ETH_MMCRFCECR   0x00000194U\r\n#define ETH_MMCRFAECR   0x00000198U\r\n#define ETH_MMCRGUFCR   0x000001C4U\r\n\r\n#define ETH_MAC_TXFIFO_FULL                           0x02000000U /* Tx FIFO full */\r\n#define ETH_MAC_TXFIFONOT_EMPTY                       0x01000000U /* Tx FIFO not empty */\r\n#define ETH_MAC_TXFIFO_WRITE_ACTIVE                   0x00400000U /* Tx FIFO write active */\r\n#define ETH_MAC_TXFIFO_IDLE                           0x00000000U /* Tx FIFO read status: Idle */\r\n#define ETH_MAC_TXFIFO_READ                           0x00100000U /* Tx FIFO read status: Read (transferring data to the MAC transmitter) */\r\n#define ETH_MAC_TXFIFO_WAITING                        0x00200000U /* Tx FIFO read status: Waiting for TxStatus from MAC transmitter */\r\n#define ETH_MAC_TXFIFO_WRITING                        0x00300000U /* Tx FIFO read status: Writing the received TxStatus or flushing the TxFIFO */\r\n#define ETH_MAC_TRANSMISSION_PAUSE                    0x00080000U /* MAC transmitter in pause */\r\n#define ETH_MAC_TRANSMITFRAMECONTROLLER_IDLE          0x00000000U /* MAC transmit frame controller: Idle */\r\n#define ETH_MAC_TRANSMITFRAMECONTROLLER_WAITING       0x00020000U /* MAC transmit frame controller: Waiting for Status of previous frame or IFG/backoff period to be over */\r\n#define ETH_MAC_TRANSMITFRAMECONTROLLER_GENRATING_PCF 0x00040000U /* MAC transmit frame controller: Generating and transmitting a Pause control frame (in full duplex mode) */\r\n#define ETH_MAC_TRANSMITFRAMECONTROLLER_TRANSFERRING  0x00060000U /* MAC transmit frame controller: Transferring input frame for transmission */\r\n#define ETH_MAC_MII_TRANSMIT_ACTIVE                   0x00010000U /* MAC MII transmit engine active */\r\n#define ETH_MAC_RXFIFO_EMPTY                          0x00000000U /* Rx FIFO fill level: empty */\r\n#define ETH_MAC_RXFIFO_BELOW_THRESHOLD                0x00000100U /* Rx FIFO fill level: fill-level below flow-control de-activate threshold */\r\n#define ETH_MAC_RXFIFO_ABOVE_THRESHOLD                0x00000200U /* Rx FIFO fill level: fill-level above flow-control activate threshold */\r\n#define ETH_MAC_RXFIFO_FULL                           0x00000300U /* Rx FIFO fill level: full */\r\n#define ETH_MAC_READCONTROLLER_IDLE                   0x00000000U /* Rx FIFO read controller IDLE state */\r\n#define ETH_MAC_READCONTROLLER_READING_DATA           0x00000020U /* Rx FIFO read controller Reading frame data */\r\n#define ETH_MAC_READCONTROLLER_READING_STATUS         0x00000040U /* Rx FIFO read controller Reading frame status (or time-stamp) */\r\n#define ETH_MAC_READCONTROLLER_FLUSHING               0x00000060U /* Rx FIFO read controller Flushing the frame data and status */\r\n#define ETH_MAC_RXFIFO_WRITE_ACTIVE                   0x00000010U /* Rx FIFO write controller active */\r\n#define ETH_MAC_SMALL_FIFO_NOTACTIVE                  0x00000000U /* MAC small FIFO read / write controllers not active */\r\n#define ETH_MAC_SMALL_FIFO_READ_ACTIVE                0x00000002U /* MAC small FIFO read controller active */\r\n#define ETH_MAC_SMALL_FIFO_WRITE_ACTIVE               0x00000004U /* MAC small FIFO write controller active */\r\n#define ETH_MAC_SMALL_FIFO_RW_ACTIVE                  0x00000006U /* MAC small FIFO read / write controllers active */\r\n#define ETH_MAC_MII_RECEIVE_PROTOCOL_ACTIVE           0x00000001U /* MAC MII receive protocol engine active */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_DCMI_Aliased_Defines HAL DCMI Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_DCMI_ERROR_OVF HAL_DCMI_ERROR_OVR\r\n#define DCMI_IT_OVF        DCMI_IT_OVR\r\n#define DCMI_FLAG_OVFRI    DCMI_FLAG_OVRRI\r\n#define DCMI_FLAG_OVFMI    DCMI_FLAG_OVRMI\r\n\r\n#define HAL_DCMI_ConfigCROP  HAL_DCMI_ConfigCrop\r\n#define HAL_DCMI_EnableCROP  HAL_DCMI_EnableCrop\r\n#define HAL_DCMI_DisableCROP HAL_DCMI_DisableCrop\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32L4) || defined(STM32F7) || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)\r\n/** @defgroup HAL_DMA2D_Aliased_Defines HAL DMA2D Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n#define DMA2D_ARGB8888 DMA2D_OUTPUT_ARGB8888\r\n#define DMA2D_RGB888   DMA2D_OUTPUT_RGB888\r\n#define DMA2D_RGB565   DMA2D_OUTPUT_RGB565\r\n#define DMA2D_ARGB1555 DMA2D_OUTPUT_ARGB1555\r\n#define DMA2D_ARGB4444 DMA2D_OUTPUT_ARGB4444\r\n\r\n#define CM_ARGB8888 DMA2D_INPUT_ARGB8888\r\n#define CM_RGB888   DMA2D_INPUT_RGB888\r\n#define CM_RGB565   DMA2D_INPUT_RGB565\r\n#define CM_ARGB1555 DMA2D_INPUT_ARGB1555\r\n#define CM_ARGB4444 DMA2D_INPUT_ARGB4444\r\n#define CM_L8       DMA2D_INPUT_L8\r\n#define CM_AL44     DMA2D_INPUT_AL44\r\n#define CM_AL88     DMA2D_INPUT_AL88\r\n#define CM_L4       DMA2D_INPUT_L4\r\n#define CM_A8       DMA2D_INPUT_A8\r\n#define CM_A4       DMA2D_INPUT_A4\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32L4 ||  STM32F7*/\r\n\r\n/** @defgroup HAL_PPP_Aliased_Defines HAL PPP Aliased Defines maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_CRYP_Aliased_Functions HAL CRYP Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_CRYP_ComputationCpltCallback HAL_CRYPEx_ComputationCpltCallback\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_HASH_Aliased_Functions HAL HASH Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_HASH_STATETypeDef  HAL_HASH_StateTypeDef\r\n#define HAL_HASHPhaseTypeDef   HAL_HASH_PhaseTypeDef\r\n#define HAL_HMAC_MD5_Finish    HAL_HASH_MD5_Finish\r\n#define HAL_HMAC_SHA1_Finish   HAL_HASH_SHA1_Finish\r\n#define HAL_HMAC_SHA224_Finish HAL_HASH_SHA224_Finish\r\n#define HAL_HMAC_SHA256_Finish HAL_HASH_SHA256_Finish\r\n\r\n/*HASH Algorithm Selection*/\r\n\r\n#define HASH_AlgoSelection_SHA1   HASH_ALGOSELECTION_SHA1\r\n#define HASH_AlgoSelection_SHA224 HASH_ALGOSELECTION_SHA224\r\n#define HASH_AlgoSelection_SHA256 HASH_ALGOSELECTION_SHA256\r\n#define HASH_AlgoSelection_MD5    HASH_ALGOSELECTION_MD5\r\n\r\n#define HASH_AlgoMode_HASH HASH_ALGOMODE_HASH\r\n#define HASH_AlgoMode_HMAC HASH_ALGOMODE_HMAC\r\n\r\n#define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY\r\n#define HASH_HMACKeyType_LongKey  HASH_HMAC_KEYTYPE_LONGKEY\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_Aliased_Functions HAL Generic Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_EnableDBGSleepMode              HAL_DBGMCU_EnableDBGSleepMode\r\n#define HAL_DisableDBGSleepMode             HAL_DBGMCU_DisableDBGSleepMode\r\n#define HAL_EnableDBGStopMode               HAL_DBGMCU_EnableDBGStopMode\r\n#define HAL_DisableDBGStopMode              HAL_DBGMCU_DisableDBGStopMode\r\n#define HAL_EnableDBGStandbyMode            HAL_DBGMCU_EnableDBGStandbyMode\r\n#define HAL_DisableDBGStandbyMode           HAL_DBGMCU_DisableDBGStandbyMode\r\n#define HAL_DBG_LowPowerConfig(Periph, cmd) (((cmd) == ENABLE) ? HAL_DBGMCU_DBG_EnableLowPowerConfig(Periph) : HAL_DBGMCU_DBG_DisableLowPowerConfig(Periph))\r\n#define HAL_VREFINT_OutputSelect            HAL_SYSCFG_VREFINT_OutputSelect\r\n#define HAL_Lock_Cmd(cmd)                   (((cmd) == ENABLE) ? HAL_SYSCFG_Enable_Lock_VREFINT() : HAL_SYSCFG_Disable_Lock_VREFINT())\r\n#if defined(STM32L0)\r\n#else\r\n#define HAL_VREFINT_Cmd(cmd) (((cmd) == ENABLE) ? HAL_SYSCFG_EnableVREFINT() : HAL_SYSCFG_DisableVREFINT())\r\n#endif\r\n#define HAL_ADC_EnableBuffer_Cmd(cmd)       (((cmd) == ENABLE) ? HAL_ADCEx_EnableVREFINT() : HAL_ADCEx_DisableVREFINT())\r\n#define HAL_ADC_EnableBufferSensor_Cmd(cmd) (((cmd) == ENABLE) ? HAL_ADCEx_EnableVREFINTTempSensor() : HAL_ADCEx_DisableVREFINTTempSensor())\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_FLASH_Aliased_Functions HAL FLASH Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define FLASH_HalfPageProgram     HAL_FLASHEx_HalfPageProgram\r\n#define FLASH_EnableRunPowerDown  HAL_FLASHEx_EnableRunPowerDown\r\n#define FLASH_DisableRunPowerDown HAL_FLASHEx_DisableRunPowerDown\r\n#define HAL_DATA_EEPROMEx_Unlock  HAL_FLASHEx_DATAEEPROM_Unlock\r\n#define HAL_DATA_EEPROMEx_Lock    HAL_FLASHEx_DATAEEPROM_Lock\r\n#define HAL_DATA_EEPROMEx_Erase   HAL_FLASHEx_DATAEEPROM_Erase\r\n#define HAL_DATA_EEPROMEx_Program HAL_FLASHEx_DATAEEPROM_Program\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_I2C_Aliased_Functions HAL I2C Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_I2CEx_AnalogFilter_Config     HAL_I2CEx_ConfigAnalogFilter\r\n#define HAL_I2CEx_DigitalFilter_Config    HAL_I2CEx_ConfigDigitalFilter\r\n#define HAL_FMPI2CEx_AnalogFilter_Config  HAL_FMPI2CEx_ConfigAnalogFilter\r\n#define HAL_FMPI2CEx_DigitalFilter_Config HAL_FMPI2CEx_ConfigDigitalFilter\r\n\r\n#define HAL_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus, cmd) (((cmd) == ENABLE) ? HAL_I2CEx_EnableFastModePlus(SYSCFG_I2CFastModePlus) : HAL_I2CEx_DisableFastModePlus(SYSCFG_I2CFastModePlus))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_PWR_Aliased HAL PWR Aliased maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_PWR_PVDConfig                HAL_PWR_ConfigPVD\r\n#define HAL_PWR_DisableBkUpReg           HAL_PWREx_DisableBkUpReg\r\n#define HAL_PWR_DisableFlashPowerDown    HAL_PWREx_DisableFlashPowerDown\r\n#define HAL_PWR_DisableVddio2Monitor     HAL_PWREx_DisableVddio2Monitor\r\n#define HAL_PWR_EnableBkUpReg            HAL_PWREx_EnableBkUpReg\r\n#define HAL_PWR_EnableFlashPowerDown     HAL_PWREx_EnableFlashPowerDown\r\n#define HAL_PWR_EnableVddio2Monitor      HAL_PWREx_EnableVddio2Monitor\r\n#define HAL_PWR_PVD_PVM_IRQHandler       HAL_PWREx_PVD_PVM_IRQHandler\r\n#define HAL_PWR_PVDLevelConfig           HAL_PWR_ConfigPVD\r\n#define HAL_PWR_Vddio2Monitor_IRQHandler HAL_PWREx_Vddio2Monitor_IRQHandler\r\n#define HAL_PWR_Vddio2MonitorCallback    HAL_PWREx_Vddio2MonitorCallback\r\n#define HAL_PWREx_ActivateOverDrive      HAL_PWREx_EnableOverDrive\r\n#define HAL_PWREx_DeactivateOverDrive    HAL_PWREx_DisableOverDrive\r\n#define HAL_PWREx_DisableSDADCAnalog     HAL_PWREx_DisableSDADC\r\n#define HAL_PWREx_EnableSDADCAnalog      HAL_PWREx_EnableSDADC\r\n#define HAL_PWREx_PVMConfig              HAL_PWREx_ConfigPVM\r\n\r\n#define PWR_MODE_NORMAL               PWR_PVD_MODE_NORMAL\r\n#define PWR_MODE_IT_RISING            PWR_PVD_MODE_IT_RISING\r\n#define PWR_MODE_IT_FALLING           PWR_PVD_MODE_IT_FALLING\r\n#define PWR_MODE_IT_RISING_FALLING    PWR_PVD_MODE_IT_RISING_FALLING\r\n#define PWR_MODE_EVENT_RISING         PWR_PVD_MODE_EVENT_RISING\r\n#define PWR_MODE_EVENT_FALLING        PWR_PVD_MODE_EVENT_FALLING\r\n#define PWR_MODE_EVENT_RISING_FALLING PWR_PVD_MODE_EVENT_RISING_FALLING\r\n\r\n#define CR_OFFSET_BB  PWR_CR_OFFSET_BB\r\n#define CSR_OFFSET_BB PWR_CSR_OFFSET_BB\r\n\r\n#define DBP_BitNumber    DBP_BIT_NUMBER\r\n#define PVDE_BitNumber   PVDE_BIT_NUMBER\r\n#define PMODE_BitNumber  PMODE_BIT_NUMBER\r\n#define EWUP_BitNumber   EWUP_BIT_NUMBER\r\n#define FPDS_BitNumber   FPDS_BIT_NUMBER\r\n#define ODEN_BitNumber   ODEN_BIT_NUMBER\r\n#define ODSWEN_BitNumber ODSWEN_BIT_NUMBER\r\n#define MRLVDS_BitNumber MRLVDS_BIT_NUMBER\r\n#define LPLVDS_BitNumber LPLVDS_BIT_NUMBER\r\n#define BRE_BitNumber    BRE_BIT_NUMBER\r\n\r\n#define PWR_MODE_EVT PWR_PVD_MODE_NORMAL\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SMBUS_Aliased_Functions HAL SMBUS Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_SMBUS_Slave_Listen_IT         HAL_SMBUS_EnableListen_IT\r\n#define HAL_SMBUS_SlaveAddrCallback       HAL_SMBUS_AddrCallback\r\n#define HAL_SMBUS_SlaveListenCpltCallback HAL_SMBUS_ListenCpltCallback\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SPI_Aliased_Functions HAL SPI Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_SPI_FlushRxFifo HAL_SPIEx_FlushRxFifo\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_TIM_Aliased_Functions HAL TIM Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_TIM_DMADelayPulseCplt    TIM_DMADelayPulseCplt\r\n#define HAL_TIM_DMAError             TIM_DMAError\r\n#define HAL_TIM_DMACaptureCplt       TIM_DMACaptureCplt\r\n#define HAL_TIMEx_DMACommutationCplt TIMEx_DMACommutationCplt\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_UART_Aliased_Functions HAL UART Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_UART_WakeupCallback HAL_UARTEx_WakeupCallback\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_LTDC_Aliased_Functions HAL LTDC Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_LTDC_LineEvenCallback                   HAL_LTDC_LineEventCallback\r\n#define HAL_LTDC_Relaod                             HAL_LTDC_Reload\r\n#define HAL_LTDC_StructInitFromVideoConfig          HAL_LTDCEx_StructInitFromVideoConfig\r\n#define HAL_LTDC_StructInitFromAdaptedCommandConfig HAL_LTDCEx_StructInitFromAdaptedCommandConfig\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_PPP_Aliased_Functions HAL PPP Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macros ------------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_AES_Aliased_Macros HAL CRYP Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define AES_IT_CC    CRYP_IT_CC\r\n#define AES_IT_ERR   CRYP_IT_ERR\r\n#define AES_FLAG_CCF CRYP_FLAG_CCF\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_Aliased_Macros HAL Generic Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_GET_BOOT_MODE           __HAL_SYSCFG_GET_BOOT_MODE\r\n#define __HAL_REMAPMEMORY_FLASH       __HAL_SYSCFG_REMAPMEMORY_FLASH\r\n#define __HAL_REMAPMEMORY_SYSTEMFLASH __HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH\r\n#define __HAL_REMAPMEMORY_SRAM        __HAL_SYSCFG_REMAPMEMORY_SRAM\r\n#define __HAL_REMAPMEMORY_FMC         __HAL_SYSCFG_REMAPMEMORY_FMC\r\n#define __HAL_REMAPMEMORY_FMC_SDRAM   __HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM\r\n#define __HAL_REMAPMEMORY_FSMC        __HAL_SYSCFG_REMAPMEMORY_FSMC\r\n#define __HAL_REMAPMEMORY_QUADSPI     __HAL_SYSCFG_REMAPMEMORY_QUADSPI\r\n#define __HAL_FMC_BANK                __HAL_SYSCFG_FMC_BANK\r\n#define __HAL_GET_FLAG                __HAL_SYSCFG_GET_FLAG\r\n#define __HAL_CLEAR_FLAG              __HAL_SYSCFG_CLEAR_FLAG\r\n#define __HAL_VREFINT_OUT_ENABLE      __HAL_SYSCFG_VREFINT_OUT_ENABLE\r\n#define __HAL_VREFINT_OUT_DISABLE     __HAL_SYSCFG_VREFINT_OUT_DISABLE\r\n#define __HAL_SYSCFG_SRAM2_WRP_ENABLE __HAL_SYSCFG_SRAM2_WRP_0_31_ENABLE\r\n\r\n#define SYSCFG_FLAG_VREF_READY        SYSCFG_FLAG_VREFINT_READY\r\n#define SYSCFG_FLAG_RC48              RCC_FLAG_HSI48\r\n#define IS_SYSCFG_FASTMODEPLUS_CONFIG IS_I2C_FASTMODEPLUS\r\n#define UFB_MODE_BitNumber            UFB_MODE_BIT_NUMBER\r\n#define CMP_PD_BitNumber              CMP_PD_BIT_NUMBER\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_ADC_Aliased_Macros HAL ADC Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __ADC_ENABLE                                     __HAL_ADC_ENABLE\r\n#define __ADC_DISABLE                                    __HAL_ADC_DISABLE\r\n#define __HAL_ADC_ENABLING_CONDITIONS                    ADC_ENABLING_CONDITIONS\r\n#define __HAL_ADC_DISABLING_CONDITIONS                   ADC_DISABLING_CONDITIONS\r\n#define __HAL_ADC_IS_ENABLED                             ADC_IS_ENABLE\r\n#define __ADC_IS_ENABLED                                 ADC_IS_ENABLE\r\n#define __HAL_ADC_IS_SOFTWARE_START_REGULAR              ADC_IS_SOFTWARE_START_REGULAR\r\n#define __HAL_ADC_IS_SOFTWARE_START_INJECTED             ADC_IS_SOFTWARE_START_INJECTED\r\n#define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED ADC_IS_CONVERSION_ONGOING_REGULAR_INJECTED\r\n#define __HAL_ADC_IS_CONVERSION_ONGOING_REGULAR          ADC_IS_CONVERSION_ONGOING_REGULAR\r\n#define __HAL_ADC_IS_CONVERSION_ONGOING_INJECTED         ADC_IS_CONVERSION_ONGOING_INJECTED\r\n#define __HAL_ADC_IS_CONVERSION_ONGOING                  ADC_IS_CONVERSION_ONGOING\r\n#define __HAL_ADC_CLEAR_ERRORCODE                        ADC_CLEAR_ERRORCODE\r\n\r\n#define __HAL_ADC_GET_RESOLUTION              ADC_GET_RESOLUTION\r\n#define __HAL_ADC_JSQR_RK                     ADC_JSQR_RK\r\n#define __HAL_ADC_CFGR_AWD1CH                 ADC_CFGR_AWD1CH_SHIFT\r\n#define __HAL_ADC_CFGR_AWD23CR                ADC_CFGR_AWD23CR\r\n#define __HAL_ADC_CFGR_INJECT_AUTO_CONVERSION ADC_CFGR_INJECT_AUTO_CONVERSION\r\n#define __HAL_ADC_CFGR_INJECT_CONTEXT_QUEUE   ADC_CFGR_INJECT_CONTEXT_QUEUE\r\n#define __HAL_ADC_CFGR_INJECT_DISCCONTINUOUS  ADC_CFGR_INJECT_DISCCONTINUOUS\r\n#define __HAL_ADC_CFGR_REG_DISCCONTINUOUS     ADC_CFGR_REG_DISCCONTINUOUS\r\n#define __HAL_ADC_CFGR_DISCONTINUOUS_NUM      ADC_CFGR_DISCONTINUOUS_NUM\r\n#define __HAL_ADC_CFGR_AUTOWAIT               ADC_CFGR_AUTOWAIT\r\n#define __HAL_ADC_CFGR_CONTINUOUS             ADC_CFGR_CONTINUOUS\r\n#define __HAL_ADC_CFGR_OVERRUN                ADC_CFGR_OVERRUN\r\n#define __HAL_ADC_CFGR_DMACONTREQ             ADC_CFGR_DMACONTREQ\r\n#define __HAL_ADC_CFGR_EXTSEL                 ADC_CFGR_EXTSEL_SET\r\n#define __HAL_ADC_JSQR_JEXTSEL                ADC_JSQR_JEXTSEL_SET\r\n#define __HAL_ADC_OFR_CHANNEL                 ADC_OFR_CHANNEL\r\n#define __HAL_ADC_DIFSEL_CHANNEL              ADC_DIFSEL_CHANNEL\r\n#define __HAL_ADC_CALFACT_DIFF_SET            ADC_CALFACT_DIFF_SET\r\n#define __HAL_ADC_CALFACT_DIFF_GET            ADC_CALFACT_DIFF_GET\r\n#define __HAL_ADC_TRX_HIGHTHRESHOLD           ADC_TRX_HIGHTHRESHOLD\r\n\r\n#define __HAL_ADC_OFFSET_SHIFT_RESOLUTION         ADC_OFFSET_SHIFT_RESOLUTION\r\n#define __HAL_ADC_AWD1THRESHOLD_SHIFT_RESOLUTION  ADC_AWD1THRESHOLD_SHIFT_RESOLUTION\r\n#define __HAL_ADC_AWD23THRESHOLD_SHIFT_RESOLUTION ADC_AWD23THRESHOLD_SHIFT_RESOLUTION\r\n#define __HAL_ADC_COMMON_REGISTER                 ADC_COMMON_REGISTER\r\n#define __HAL_ADC_COMMON_CCR_MULTI                ADC_COMMON_CCR_MULTI\r\n#define __HAL_ADC_MULTIMODE_IS_ENABLED            ADC_MULTIMODE_IS_ENABLE\r\n#define __ADC_MULTIMODE_IS_ENABLED                ADC_MULTIMODE_IS_ENABLE\r\n#define __HAL_ADC_NONMULTIMODE_OR_MULTIMODEMASTER ADC_NONMULTIMODE_OR_MULTIMODEMASTER\r\n#define __HAL_ADC_COMMON_ADC_OTHER                ADC_COMMON_ADC_OTHER\r\n#define __HAL_ADC_MULTI_SLAVE                     ADC_MULTI_SLAVE\r\n\r\n#define __HAL_ADC_SQR1_L                ADC_SQR1_L_SHIFT\r\n#define __HAL_ADC_JSQR_JL               ADC_JSQR_JL_SHIFT\r\n#define __HAL_ADC_JSQR_RK_JL            ADC_JSQR_RK_JL\r\n#define __HAL_ADC_CR1_DISCONTINUOUS_NUM ADC_CR1_DISCONTINUOUS_NUM\r\n#define __HAL_ADC_CR1_SCAN              ADC_CR1_SCAN_SET\r\n#define __HAL_ADC_CONVCYCLES_MAX_RANGE  ADC_CONVCYCLES_MAX_RANGE\r\n#define __HAL_ADC_CLOCK_PRESCALER_RANGE ADC_CLOCK_PRESCALER_RANGE\r\n#define __HAL_ADC_GET_CLOCK_PRESCALER   ADC_GET_CLOCK_PRESCALER\r\n\r\n#define __HAL_ADC_SQR1              ADC_SQR1\r\n#define __HAL_ADC_SMPR1             ADC_SMPR1\r\n#define __HAL_ADC_SMPR2             ADC_SMPR2\r\n#define __HAL_ADC_SQR3_RK           ADC_SQR3_RK\r\n#define __HAL_ADC_SQR2_RK           ADC_SQR2_RK\r\n#define __HAL_ADC_SQR1_RK           ADC_SQR1_RK\r\n#define __HAL_ADC_CR2_CONTINUOUS    ADC_CR2_CONTINUOUS\r\n#define __HAL_ADC_CR1_DISCONTINUOUS ADC_CR1_DISCONTINUOUS\r\n#define __HAL_ADC_CR1_SCANCONV      ADC_CR1_SCANCONV\r\n#define __HAL_ADC_CR2_EOCSelection  ADC_CR2_EOCSelection\r\n#define __HAL_ADC_CR2_DMAContReq    ADC_CR2_DMAContReq\r\n#define __HAL_ADC_GET_RESOLUTION    ADC_GET_RESOLUTION\r\n#define __HAL_ADC_JSQR              ADC_JSQR\r\n\r\n#define __HAL_ADC_CHSELR_CHANNEL           ADC_CHSELR_CHANNEL\r\n#define __HAL_ADC_CFGR1_REG_DISCCONTINUOUS ADC_CFGR1_REG_DISCCONTINUOUS\r\n#define __HAL_ADC_CFGR1_AUTOOFF            ADC_CFGR1_AUTOOFF\r\n#define __HAL_ADC_CFGR1_AUTOWAIT           ADC_CFGR1_AUTOWAIT\r\n#define __HAL_ADC_CFGR1_CONTINUOUS         ADC_CFGR1_CONTINUOUS\r\n#define __HAL_ADC_CFGR1_OVERRUN            ADC_CFGR1_OVERRUN\r\n#define __HAL_ADC_CFGR1_SCANDIR            ADC_CFGR1_SCANDIR\r\n#define __HAL_ADC_CFGR1_DMACONTREQ         ADC_CFGR1_DMACONTREQ\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_DAC_Aliased_Macros HAL DAC Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_DHR12R1_ALIGNEMENT DAC_DHR12R1_ALIGNMENT\r\n#define __HAL_DHR12R2_ALIGNEMENT DAC_DHR12R2_ALIGNMENT\r\n#define __HAL_DHR12RD_ALIGNEMENT DAC_DHR12RD_ALIGNMENT\r\n#define IS_DAC_GENERATE_WAVE     IS_DAC_WAVE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_DBGMCU_Aliased_Macros HAL DBGMCU Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_FREEZE_TIM1_DBGMCU   __HAL_DBGMCU_FREEZE_TIM1\r\n#define __HAL_UNFREEZE_TIM1_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM1\r\n#define __HAL_FREEZE_TIM2_DBGMCU   __HAL_DBGMCU_FREEZE_TIM2\r\n#define __HAL_UNFREEZE_TIM2_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM2\r\n#define __HAL_FREEZE_TIM3_DBGMCU   __HAL_DBGMCU_FREEZE_TIM3\r\n#define __HAL_UNFREEZE_TIM3_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM3\r\n#define __HAL_FREEZE_TIM4_DBGMCU   __HAL_DBGMCU_FREEZE_TIM4\r\n#define __HAL_UNFREEZE_TIM4_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM4\r\n#define __HAL_FREEZE_TIM5_DBGMCU   __HAL_DBGMCU_FREEZE_TIM5\r\n#define __HAL_UNFREEZE_TIM5_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM5\r\n#define __HAL_FREEZE_TIM6_DBGMCU   __HAL_DBGMCU_FREEZE_TIM6\r\n#define __HAL_UNFREEZE_TIM6_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM6\r\n#define __HAL_FREEZE_TIM7_DBGMCU   __HAL_DBGMCU_FREEZE_TIM7\r\n#define __HAL_UNFREEZE_TIM7_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM7\r\n#define __HAL_FREEZE_TIM8_DBGMCU   __HAL_DBGMCU_FREEZE_TIM8\r\n#define __HAL_UNFREEZE_TIM8_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM8\r\n\r\n#define __HAL_FREEZE_TIM9_DBGMCU    __HAL_DBGMCU_FREEZE_TIM9\r\n#define __HAL_UNFREEZE_TIM9_DBGMCU  __HAL_DBGMCU_UNFREEZE_TIM9\r\n#define __HAL_FREEZE_TIM10_DBGMCU   __HAL_DBGMCU_FREEZE_TIM10\r\n#define __HAL_UNFREEZE_TIM10_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM10\r\n#define __HAL_FREEZE_TIM11_DBGMCU   __HAL_DBGMCU_FREEZE_TIM11\r\n#define __HAL_UNFREEZE_TIM11_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM11\r\n#define __HAL_FREEZE_TIM12_DBGMCU   __HAL_DBGMCU_FREEZE_TIM12\r\n#define __HAL_UNFREEZE_TIM12_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM12\r\n#define __HAL_FREEZE_TIM13_DBGMCU   __HAL_DBGMCU_FREEZE_TIM13\r\n#define __HAL_UNFREEZE_TIM13_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM13\r\n#define __HAL_FREEZE_TIM14_DBGMCU   __HAL_DBGMCU_FREEZE_TIM14\r\n#define __HAL_UNFREEZE_TIM14_DBGMCU __HAL_DBGMCU_UNFREEZE_TIM14\r\n#define __HAL_FREEZE_CAN2_DBGMCU    __HAL_DBGMCU_FREEZE_CAN2\r\n#define __HAL_UNFREEZE_CAN2_DBGMCU  __HAL_DBGMCU_UNFREEZE_CAN2\r\n\r\n#define __HAL_FREEZE_TIM15_DBGMCU          __HAL_DBGMCU_FREEZE_TIM15\r\n#define __HAL_UNFREEZE_TIM15_DBGMCU        __HAL_DBGMCU_UNFREEZE_TIM15\r\n#define __HAL_FREEZE_TIM16_DBGMCU          __HAL_DBGMCU_FREEZE_TIM16\r\n#define __HAL_UNFREEZE_TIM16_DBGMCU        __HAL_DBGMCU_UNFREEZE_TIM16\r\n#define __HAL_FREEZE_TIM17_DBGMCU          __HAL_DBGMCU_FREEZE_TIM17\r\n#define __HAL_UNFREEZE_TIM17_DBGMCU        __HAL_DBGMCU_UNFREEZE_TIM17\r\n#define __HAL_FREEZE_RTC_DBGMCU            __HAL_DBGMCU_FREEZE_RTC\r\n#define __HAL_UNFREEZE_RTC_DBGMCU          __HAL_DBGMCU_UNFREEZE_RTC\r\n#define __HAL_FREEZE_WWDG_DBGMCU           __HAL_DBGMCU_FREEZE_WWDG\r\n#define __HAL_UNFREEZE_WWDG_DBGMCU         __HAL_DBGMCU_UNFREEZE_WWDG\r\n#define __HAL_FREEZE_IWDG_DBGMCU           __HAL_DBGMCU_FREEZE_IWDG\r\n#define __HAL_UNFREEZE_IWDG_DBGMCU         __HAL_DBGMCU_UNFREEZE_IWDG\r\n#define __HAL_FREEZE_I2C1_TIMEOUT_DBGMCU   __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT\r\n#define __HAL_UNFREEZE_I2C1_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT\r\n#define __HAL_FREEZE_I2C2_TIMEOUT_DBGMCU   __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT\r\n#define __HAL_UNFREEZE_I2C2_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT\r\n#define __HAL_FREEZE_I2C3_TIMEOUT_DBGMCU   __HAL_DBGMCU_FREEZE_I2C3_TIMEOUT\r\n#define __HAL_UNFREEZE_I2C3_TIMEOUT_DBGMCU __HAL_DBGMCU_UNFREEZE_I2C3_TIMEOUT\r\n#define __HAL_FREEZE_CAN1_DBGMCU           __HAL_DBGMCU_FREEZE_CAN1\r\n#define __HAL_UNFREEZE_CAN1_DBGMCU         __HAL_DBGMCU_UNFREEZE_CAN1\r\n#define __HAL_FREEZE_LPTIM1_DBGMCU         __HAL_DBGMCU_FREEZE_LPTIM1\r\n#define __HAL_UNFREEZE_LPTIM1_DBGMCU       __HAL_DBGMCU_UNFREEZE_LPTIM1\r\n#define __HAL_FREEZE_LPTIM2_DBGMCU         __HAL_DBGMCU_FREEZE_LPTIM2\r\n#define __HAL_UNFREEZE_LPTIM2_DBGMCU       __HAL_DBGMCU_UNFREEZE_LPTIM2\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_COMP_Aliased_Macros HAL COMP Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#if defined(STM32F3)\r\n#define COMP_START __HAL_COMP_ENABLE\r\n#define COMP_STOP  __HAL_COMP_DISABLE\r\n#define COMP_LOCK  __HAL_COMP_LOCK\r\n\r\n#if defined(STM32F301x8) || defined(STM32F302x8) || defined(STM32F318xx) || defined(STM32F303x8) || defined(STM32F334x8) || defined(STM32F328xx)\r\n#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2)   ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2)   ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2)   ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2)   ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__) \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() : __HAL_COMP_COMP6_EXTI_ENABLE_IT())\r\n#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__) \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() : __HAL_COMP_COMP6_EXTI_DISABLE_IT())\r\n#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__) \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() : __HAL_COMP_COMP6_EXTI_GET_FLAG())\r\n#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__) \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() : __HAL_COMP_COMP6_EXTI_CLEAR_FLAG())\r\n#endif\r\n#if defined(STM32F302xE) || defined(STM32F302xC)\r\n#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)                                   \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_ENABLE_IT())\r\n#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)                                   \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() \\\r\n                                              : __HAL_COMP_COMP6_EXTI_DISABLE_IT())\r\n#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)                                   \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() \\\r\n                                          : __HAL_COMP_COMP6_EXTI_GET_FLAG())\r\n#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)                                   \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() \\\r\n                                          : __HAL_COMP_COMP6_EXTI_CLEAR_FLAG())\r\n#endif\r\n#if defined(STM32F303xE) || defined(STM32F398xx) || defined(STM32F303xC) || defined(STM32F358xx)\r\n#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_ENABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_RISING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_RISING_EDGE() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_DISABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_ENABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__)                                     \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_FALLING_EDGE() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_FALLING_EDGE() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_DISABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)                                   \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_ENABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_ENABLE_IT() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_ENABLE_IT())\r\n#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)                                   \\\r\n  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_DISABLE_IT() \\\r\n   : ((__EXTILINE__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_DISABLE_IT() \\\r\n                                              : __HAL_COMP_COMP7_EXTI_DISABLE_IT())\r\n#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)                                   \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_GET_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_GET_FLAG() \\\r\n                                          : __HAL_COMP_COMP7_EXTI_GET_FLAG())\r\n#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)                                   \\\r\n  (((__FLAG__) == COMP_EXTI_LINE_COMP1)   ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP2) ? __HAL_COMP_COMP2_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP3) ? __HAL_COMP_COMP3_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP4) ? __HAL_COMP_COMP4_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP5) ? __HAL_COMP_COMP5_EXTI_CLEAR_FLAG() \\\r\n   : ((__FLAG__) == COMP_EXTI_LINE_COMP6) ? __HAL_COMP_COMP6_EXTI_CLEAR_FLAG() \\\r\n                                          : __HAL_COMP_COMP7_EXTI_CLEAR_FLAG())\r\n#endif\r\n#if defined(STM32F373xC) || defined(STM32F378xx)\r\n#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)   (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)          (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : __HAL_COMP_COMP2_EXTI_ENABLE_IT())\r\n#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)         (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : __HAL_COMP_COMP2_EXTI_DISABLE_IT())\r\n#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)               (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : __HAL_COMP_COMP2_EXTI_GET_FLAG())\r\n#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)             (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : __HAL_COMP_COMP2_EXTI_CLEAR_FLAG())\r\n#endif\r\n#else\r\n#define __HAL_COMP_EXTI_RISING_IT_ENABLE(__EXTILINE__)   (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_RISING_EDGE() : __HAL_COMP_COMP2_EXTI_ENABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_RISING_IT_DISABLE(__EXTILINE__)  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_RISING_EDGE() : __HAL_COMP_COMP2_EXTI_DISABLE_RISING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_ENABLE(__EXTILINE__)  (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_FALLING_EDGE() : __HAL_COMP_COMP2_EXTI_ENABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_FALLING_IT_DISABLE(__EXTILINE__) (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_FALLING_EDGE() : __HAL_COMP_COMP2_EXTI_DISABLE_FALLING_EDGE())\r\n#define __HAL_COMP_EXTI_ENABLE_IT(__EXTILINE__)          (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_ENABLE_IT() : __HAL_COMP_COMP2_EXTI_ENABLE_IT())\r\n#define __HAL_COMP_EXTI_DISABLE_IT(__EXTILINE__)         (((__EXTILINE__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_DISABLE_IT() : __HAL_COMP_COMP2_EXTI_DISABLE_IT())\r\n#define __HAL_COMP_EXTI_GET_FLAG(__FLAG__)               (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_GET_FLAG() : __HAL_COMP_COMP2_EXTI_GET_FLAG())\r\n#define __HAL_COMP_EXTI_CLEAR_FLAG(__FLAG__)             (((__FLAG__) == COMP_EXTI_LINE_COMP1) ? __HAL_COMP_COMP1_EXTI_CLEAR_FLAG() : __HAL_COMP_COMP2_EXTI_CLEAR_FLAG())\r\n#endif\r\n\r\n#define __HAL_COMP_GET_EXTI_LINE COMP_GET_EXTI_LINE\r\n\r\n#if defined(STM32L0) || defined(STM32L4)\r\n/* Note: On these STM32 families, the only argument of this macro             */\r\n/*       is COMP_FLAG_LOCK.                                                   */\r\n/*       This macro is replaced by __HAL_COMP_IS_LOCKED with only HAL handle  */\r\n/*       argument.                                                            */\r\n#define __HAL_COMP_GET_FLAG(__HANDLE__, __FLAG__) (__HAL_COMP_IS_LOCKED(__HANDLE__))\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32L0) || defined(STM32L4)\r\n/** @defgroup HAL_COMP_Aliased_Functions HAL COMP Aliased Functions maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_COMP_Start_IT HAL_COMP_Start /* Function considered as legacy as EXTI event or IT configuration is done into HAL_COMP_Init() */\r\n#define HAL_COMP_Stop_IT  HAL_COMP_Stop  /* Function considered as legacy as EXTI event or IT configuration is done into HAL_COMP_Init() */\r\n/**\r\n * @}\r\n */\r\n#endif\r\n\r\n/** @defgroup HAL_DAC_Aliased_Macros HAL DAC Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_WAVE_NONE) || ((WAVE) == DAC_WAVE_NOISE) || ((WAVE) == DAC_WAVE_TRIANGLE))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_FLASH_Aliased_Macros HAL FLASH Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define IS_WRPAREA          IS_OB_WRPAREA\r\n#define IS_TYPEPROGRAM      IS_FLASH_TYPEPROGRAM\r\n#define IS_TYPEPROGRAMFLASH IS_FLASH_TYPEPROGRAM\r\n#define IS_TYPEERASE        IS_FLASH_TYPEERASE\r\n#define IS_NBSECTORS        IS_FLASH_NBSECTORS\r\n#define IS_OB_WDG_SOURCE    IS_OB_IWDG_SOURCE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_I2C_Aliased_Macros HAL I2C Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_I2C_RESET_CR2      I2C_RESET_CR2\r\n#define __HAL_I2C_GENERATE_START I2C_GENERATE_START\r\n#if defined(STM32F1)\r\n#define __HAL_I2C_FREQ_RANGE I2C_FREQRANGE\r\n#else\r\n#define __HAL_I2C_FREQ_RANGE I2C_FREQ_RANGE\r\n#endif /* STM32F1 */\r\n#define __HAL_I2C_RISE_TIME          I2C_RISE_TIME\r\n#define __HAL_I2C_SPEED_STANDARD     I2C_SPEED_STANDARD\r\n#define __HAL_I2C_SPEED_FAST         I2C_SPEED_FAST\r\n#define __HAL_I2C_SPEED              I2C_SPEED\r\n#define __HAL_I2C_7BIT_ADD_WRITE     I2C_7BIT_ADD_WRITE\r\n#define __HAL_I2C_7BIT_ADD_READ      I2C_7BIT_ADD_READ\r\n#define __HAL_I2C_10BIT_ADDRESS      I2C_10BIT_ADDRESS\r\n#define __HAL_I2C_10BIT_HEADER_WRITE I2C_10BIT_HEADER_WRITE\r\n#define __HAL_I2C_10BIT_HEADER_READ  I2C_10BIT_HEADER_READ\r\n#define __HAL_I2C_MEM_ADD_MSB        I2C_MEM_ADD_MSB\r\n#define __HAL_I2C_MEM_ADD_LSB        I2C_MEM_ADD_LSB\r\n#define __HAL_I2C_FREQRANGE          I2C_FREQRANGE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_I2S_Aliased_Macros HAL I2S Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define IS_I2S_INSTANCE     IS_I2S_ALL_INSTANCE\r\n#define IS_I2S_INSTANCE_EXT IS_I2S_ALL_INSTANCE_EXT\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_IRDA_Aliased_Macros HAL IRDA Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __IRDA_DISABLE __HAL_IRDA_DISABLE\r\n#define __IRDA_ENABLE  __HAL_IRDA_ENABLE\r\n\r\n#define __HAL_IRDA_GETCLOCKSOURCE   IRDA_GETCLOCKSOURCE\r\n#define __HAL_IRDA_MASK_COMPUTATION IRDA_MASK_COMPUTATION\r\n#define __IRDA_GETCLOCKSOURCE       IRDA_GETCLOCKSOURCE\r\n#define __IRDA_MASK_COMPUTATION     IRDA_MASK_COMPUTATION\r\n\r\n#define IS_IRDA_ONEBIT_SAMPLE IS_IRDA_ONE_BIT_SAMPLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_IWDG_Aliased_Macros HAL IWDG Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_IWDG_ENABLE_WRITE_ACCESS  IWDG_ENABLE_WRITE_ACCESS\r\n#define __HAL_IWDG_DISABLE_WRITE_ACCESS IWDG_DISABLE_WRITE_ACCESS\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_LPTIM_Aliased_Macros HAL LPTIM Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_LPTIM_ENABLE_INTERRUPT  __HAL_LPTIM_ENABLE_IT\r\n#define __HAL_LPTIM_DISABLE_INTERRUPT __HAL_LPTIM_DISABLE_IT\r\n#define __HAL_LPTIM_GET_ITSTATUS      __HAL_LPTIM_GET_IT_SOURCE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_OPAMP_Aliased_Macros HAL OPAMP Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __OPAMP_CSR_OPAXPD               OPAMP_CSR_OPAXPD\r\n#define __OPAMP_CSR_S3SELX               OPAMP_CSR_S3SELX\r\n#define __OPAMP_CSR_S4SELX               OPAMP_CSR_S4SELX\r\n#define __OPAMP_CSR_S5SELX               OPAMP_CSR_S5SELX\r\n#define __OPAMP_CSR_S6SELX               OPAMP_CSR_S6SELX\r\n#define __OPAMP_CSR_OPAXCAL_L            OPAMP_CSR_OPAXCAL_L\r\n#define __OPAMP_CSR_OPAXCAL_H            OPAMP_CSR_OPAXCAL_H\r\n#define __OPAMP_CSR_OPAXLPM              OPAMP_CSR_OPAXLPM\r\n#define __OPAMP_CSR_ALL_SWITCHES         OPAMP_CSR_ALL_SWITCHES\r\n#define __OPAMP_CSR_ANAWSELX             OPAMP_CSR_ANAWSELX\r\n#define __OPAMP_CSR_OPAXCALOUT           OPAMP_CSR_OPAXCALOUT\r\n#define __OPAMP_OFFSET_TRIM_BITSPOSITION OPAMP_OFFSET_TRIM_BITSPOSITION\r\n#define __OPAMP_OFFSET_TRIM_SET          OPAMP_OFFSET_TRIM_SET\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_PWR_Aliased_Macros HAL PWR Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_PVD_EVENT_DISABLE               __HAL_PWR_PVD_EXTI_DISABLE_EVENT\r\n#define __HAL_PVD_EVENT_ENABLE                __HAL_PWR_PVD_EXTI_ENABLE_EVENT\r\n#define __HAL_PVD_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE\r\n#define __HAL_PVD_EXTI_FALLINGTRIGGER_ENABLE  __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_PVD_EXTI_RISINGTRIGGER_DISABLE  __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE\r\n#define __HAL_PVD_EXTI_RISINGTRIGGER_ENABLE   __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_PVM_EVENT_DISABLE               __HAL_PWR_PVM_EVENT_DISABLE\r\n#define __HAL_PVM_EVENT_ENABLE                __HAL_PWR_PVM_EVENT_ENABLE\r\n#define __HAL_PVM_EXTI_FALLINGTRIGGER_DISABLE __HAL_PWR_PVM_EXTI_FALLINGTRIGGER_DISABLE\r\n#define __HAL_PVM_EXTI_FALLINGTRIGGER_ENABLE  __HAL_PWR_PVM_EXTI_FALLINGTRIGGER_ENABLE\r\n#define __HAL_PVM_EXTI_RISINGTRIGGER_DISABLE  __HAL_PWR_PVM_EXTI_RISINGTRIGGER_DISABLE\r\n#define __HAL_PVM_EXTI_RISINGTRIGGER_ENABLE   __HAL_PWR_PVM_EXTI_RISINGTRIGGER_ENABLE\r\n#define __HAL_PWR_INTERNALWAKEUP_DISABLE      HAL_PWREx_DisableInternalWakeUpLine\r\n#define __HAL_PWR_INTERNALWAKEUP_ENABLE       HAL_PWREx_EnableInternalWakeUpLine\r\n#define __HAL_PWR_PULL_UP_DOWN_CONFIG_DISABLE HAL_PWREx_DisablePullUpPullDownConfig\r\n#define __HAL_PWR_PULL_UP_DOWN_CONFIG_ENABLE  HAL_PWREx_EnablePullUpPullDownConfig\r\n#define __HAL_PWR_PVD_EXTI_CLEAR_EGDE_TRIGGER() \\\r\n  do {                                          \\\r\n    __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();   \\\r\n    __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE();  \\\r\n  } while (0)\r\n#define __HAL_PWR_PVD_EXTI_EVENT_DISABLE            __HAL_PWR_PVD_EXTI_DISABLE_EVENT\r\n#define __HAL_PWR_PVD_EXTI_EVENT_ENABLE             __HAL_PWR_PVD_EXTI_ENABLE_EVENT\r\n#define __HAL_PWR_PVD_EXTI_FALLINGTRIGGER_DISABLE   __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE\r\n#define __HAL_PWR_PVD_EXTI_FALLINGTRIGGER_ENABLE    __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_PWR_PVD_EXTI_RISINGTRIGGER_DISABLE    __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE\r\n#define __HAL_PWR_PVD_EXTI_RISINGTRIGGER_ENABLE     __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_PWR_PVD_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_PWR_PVD_EXTI_SET_RISING_EDGE_TRIGGER  __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_PWR_PVM_DISABLE() \\\r\n  do {                          \\\r\n    HAL_PWREx_DisablePVM1();    \\\r\n    HAL_PWREx_DisablePVM2();    \\\r\n    HAL_PWREx_DisablePVM3();    \\\r\n    HAL_PWREx_DisablePVM4();    \\\r\n  } while (0)\r\n#define __HAL_PWR_PVM_ENABLE() \\\r\n  do {                         \\\r\n    HAL_PWREx_EnablePVM1();    \\\r\n    HAL_PWREx_EnablePVM2();    \\\r\n    HAL_PWREx_EnablePVM3();    \\\r\n    HAL_PWREx_EnablePVM4();    \\\r\n  } while (0)\r\n#define __HAL_PWR_SRAM2CONTENT_PRESERVE_DISABLE        HAL_PWREx_DisableSRAM2ContentRetention\r\n#define __HAL_PWR_SRAM2CONTENT_PRESERVE_ENABLE         HAL_PWREx_EnableSRAM2ContentRetention\r\n#define __HAL_PWR_VDDIO2_DISABLE                       HAL_PWREx_DisableVddIO2\r\n#define __HAL_PWR_VDDIO2_ENABLE                        HAL_PWREx_EnableVddIO2\r\n#define __HAL_PWR_VDDIO2_EXTI_CLEAR_EGDE_TRIGGER       __HAL_PWR_VDDIO2_EXTI_DISABLE_FALLING_EDGE\r\n#define __HAL_PWR_VDDIO2_EXTI_SET_FALLING_EGDE_TRIGGER __HAL_PWR_VDDIO2_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_PWR_VDDUSB_DISABLE                       HAL_PWREx_DisableVddUSB\r\n#define __HAL_PWR_VDDUSB_ENABLE                        HAL_PWREx_EnableVddUSB\r\n\r\n#if defined(STM32F4)\r\n#define __HAL_PVD_EXTI_ENABLE_IT(PWR_EXTI_LINE_PVD)     __HAL_PWR_PVD_EXTI_ENABLE_IT()\r\n#define __HAL_PVD_EXTI_DISABLE_IT(PWR_EXTI_LINE_PVD)    __HAL_PWR_PVD_EXTI_DISABLE_IT()\r\n#define __HAL_PVD_EXTI_GET_FLAG(PWR_EXTI_LINE_PVD)      __HAL_PWR_PVD_EXTI_GET_FLAG()\r\n#define __HAL_PVD_EXTI_CLEAR_FLAG(PWR_EXTI_LINE_PVD)    __HAL_PWR_PVD_EXTI_CLEAR_FLAG()\r\n#define __HAL_PVD_EXTI_GENERATE_SWIT(PWR_EXTI_LINE_PVD) __HAL_PWR_PVD_EXTI_GENERATE_SWIT()\r\n#else\r\n#define __HAL_PVD_EXTI_CLEAR_FLAG    __HAL_PWR_PVD_EXTI_CLEAR_FLAG\r\n#define __HAL_PVD_EXTI_DISABLE_IT    __HAL_PWR_PVD_EXTI_DISABLE_IT\r\n#define __HAL_PVD_EXTI_ENABLE_IT     __HAL_PWR_PVD_EXTI_ENABLE_IT\r\n#define __HAL_PVD_EXTI_GENERATE_SWIT __HAL_PWR_PVD_EXTI_GENERATE_SWIT\r\n#define __HAL_PVD_EXTI_GET_FLAG      __HAL_PWR_PVD_EXTI_GET_FLAG\r\n#endif /* STM32F4 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_RCC_Aliased HAL RCC Aliased maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define RCC_StopWakeUpClock_MSI RCC_STOP_WAKEUPCLOCK_MSI\r\n#define RCC_StopWakeUpClock_HSI RCC_STOP_WAKEUPCLOCK_HSI\r\n\r\n#define HAL_RCC_CCSCallback            HAL_RCC_CSSCallback\r\n#define HAL_RC48_EnableBuffer_Cmd(cmd) (((cmd) == ENABLE) ? HAL_RCCEx_EnableHSI48_VREFINT() : HAL_RCCEx_DisableHSI48_VREFINT())\r\n\r\n#define __ADC_CLK_DISABLE           __HAL_RCC_ADC_CLK_DISABLE\r\n#define __ADC_CLK_ENABLE            __HAL_RCC_ADC_CLK_ENABLE\r\n#define __ADC_CLK_SLEEP_DISABLE     __HAL_RCC_ADC_CLK_SLEEP_DISABLE\r\n#define __ADC_CLK_SLEEP_ENABLE      __HAL_RCC_ADC_CLK_SLEEP_ENABLE\r\n#define __ADC_FORCE_RESET           __HAL_RCC_ADC_FORCE_RESET\r\n#define __ADC_RELEASE_RESET         __HAL_RCC_ADC_RELEASE_RESET\r\n#define __ADC1_CLK_DISABLE          __HAL_RCC_ADC1_CLK_DISABLE\r\n#define __ADC1_CLK_ENABLE           __HAL_RCC_ADC1_CLK_ENABLE\r\n#define __ADC1_FORCE_RESET          __HAL_RCC_ADC1_FORCE_RESET\r\n#define __ADC1_RELEASE_RESET        __HAL_RCC_ADC1_RELEASE_RESET\r\n#define __ADC1_CLK_SLEEP_ENABLE     __HAL_RCC_ADC1_CLK_SLEEP_ENABLE\r\n#define __ADC1_CLK_SLEEP_DISABLE    __HAL_RCC_ADC1_CLK_SLEEP_DISABLE\r\n#define __ADC2_CLK_DISABLE          __HAL_RCC_ADC2_CLK_DISABLE\r\n#define __ADC2_CLK_ENABLE           __HAL_RCC_ADC2_CLK_ENABLE\r\n#define __ADC2_FORCE_RESET          __HAL_RCC_ADC2_FORCE_RESET\r\n#define __ADC2_RELEASE_RESET        __HAL_RCC_ADC2_RELEASE_RESET\r\n#define __ADC3_CLK_DISABLE          __HAL_RCC_ADC3_CLK_DISABLE\r\n#define __ADC3_CLK_ENABLE           __HAL_RCC_ADC3_CLK_ENABLE\r\n#define __ADC3_FORCE_RESET          __HAL_RCC_ADC3_FORCE_RESET\r\n#define __ADC3_RELEASE_RESET        __HAL_RCC_ADC3_RELEASE_RESET\r\n#define __AES_CLK_DISABLE           __HAL_RCC_AES_CLK_DISABLE\r\n#define __AES_CLK_ENABLE            __HAL_RCC_AES_CLK_ENABLE\r\n#define __AES_CLK_SLEEP_DISABLE     __HAL_RCC_AES_CLK_SLEEP_DISABLE\r\n#define __AES_CLK_SLEEP_ENABLE      __HAL_RCC_AES_CLK_SLEEP_ENABLE\r\n#define __AES_FORCE_RESET           __HAL_RCC_AES_FORCE_RESET\r\n#define __AES_RELEASE_RESET         __HAL_RCC_AES_RELEASE_RESET\r\n#define __CRYP_CLK_SLEEP_ENABLE     __HAL_RCC_CRYP_CLK_SLEEP_ENABLE\r\n#define __CRYP_CLK_SLEEP_DISABLE    __HAL_RCC_CRYP_CLK_SLEEP_DISABLE\r\n#define __CRYP_CLK_ENABLE           __HAL_RCC_CRYP_CLK_ENABLE\r\n#define __CRYP_CLK_DISABLE          __HAL_RCC_CRYP_CLK_DISABLE\r\n#define __CRYP_FORCE_RESET          __HAL_RCC_CRYP_FORCE_RESET\r\n#define __CRYP_RELEASE_RESET        __HAL_RCC_CRYP_RELEASE_RESET\r\n#define __AFIO_CLK_DISABLE          __HAL_RCC_AFIO_CLK_DISABLE\r\n#define __AFIO_CLK_ENABLE           __HAL_RCC_AFIO_CLK_ENABLE\r\n#define __AFIO_FORCE_RESET          __HAL_RCC_AFIO_FORCE_RESET\r\n#define __AFIO_RELEASE_RESET        __HAL_RCC_AFIO_RELEASE_RESET\r\n#define __AHB_FORCE_RESET           __HAL_RCC_AHB_FORCE_RESET\r\n#define __AHB_RELEASE_RESET         __HAL_RCC_AHB_RELEASE_RESET\r\n#define __AHB1_FORCE_RESET          __HAL_RCC_AHB1_FORCE_RESET\r\n#define __AHB1_RELEASE_RESET        __HAL_RCC_AHB1_RELEASE_RESET\r\n#define __AHB2_FORCE_RESET          __HAL_RCC_AHB2_FORCE_RESET\r\n#define __AHB2_RELEASE_RESET        __HAL_RCC_AHB2_RELEASE_RESET\r\n#define __AHB3_FORCE_RESET          __HAL_RCC_AHB3_FORCE_RESET\r\n#define __AHB3_RELEASE_RESET        __HAL_RCC_AHB3_RELEASE_RESET\r\n#define __APB1_FORCE_RESET          __HAL_RCC_APB1_FORCE_RESET\r\n#define __APB1_RELEASE_RESET        __HAL_RCC_APB1_RELEASE_RESET\r\n#define __APB2_FORCE_RESET          __HAL_RCC_APB2_FORCE_RESET\r\n#define __APB2_RELEASE_RESET        __HAL_RCC_APB2_RELEASE_RESET\r\n#define __BKP_CLK_DISABLE           __HAL_RCC_BKP_CLK_DISABLE\r\n#define __BKP_CLK_ENABLE            __HAL_RCC_BKP_CLK_ENABLE\r\n#define __BKP_FORCE_RESET           __HAL_RCC_BKP_FORCE_RESET\r\n#define __BKP_RELEASE_RESET         __HAL_RCC_BKP_RELEASE_RESET\r\n#define __CAN1_CLK_DISABLE          __HAL_RCC_CAN1_CLK_DISABLE\r\n#define __CAN1_CLK_ENABLE           __HAL_RCC_CAN1_CLK_ENABLE\r\n#define __CAN1_CLK_SLEEP_DISABLE    __HAL_RCC_CAN1_CLK_SLEEP_DISABLE\r\n#define __CAN1_CLK_SLEEP_ENABLE     __HAL_RCC_CAN1_CLK_SLEEP_ENABLE\r\n#define __CAN1_FORCE_RESET          __HAL_RCC_CAN1_FORCE_RESET\r\n#define __CAN1_RELEASE_RESET        __HAL_RCC_CAN1_RELEASE_RESET\r\n#define __CAN_CLK_DISABLE           __HAL_RCC_CAN1_CLK_DISABLE\r\n#define __CAN_CLK_ENABLE            __HAL_RCC_CAN1_CLK_ENABLE\r\n#define __CAN_FORCE_RESET           __HAL_RCC_CAN1_FORCE_RESET\r\n#define __CAN_RELEASE_RESET         __HAL_RCC_CAN1_RELEASE_RESET\r\n#define __CAN2_CLK_DISABLE          __HAL_RCC_CAN2_CLK_DISABLE\r\n#define __CAN2_CLK_ENABLE           __HAL_RCC_CAN2_CLK_ENABLE\r\n#define __CAN2_FORCE_RESET          __HAL_RCC_CAN2_FORCE_RESET\r\n#define __CAN2_RELEASE_RESET        __HAL_RCC_CAN2_RELEASE_RESET\r\n#define __CEC_CLK_DISABLE           __HAL_RCC_CEC_CLK_DISABLE\r\n#define __CEC_CLK_ENABLE            __HAL_RCC_CEC_CLK_ENABLE\r\n#define __COMP_CLK_DISABLE          __HAL_RCC_COMP_CLK_DISABLE\r\n#define __COMP_CLK_ENABLE           __HAL_RCC_COMP_CLK_ENABLE\r\n#define __COMP_FORCE_RESET          __HAL_RCC_COMP_FORCE_RESET\r\n#define __COMP_RELEASE_RESET        __HAL_RCC_COMP_RELEASE_RESET\r\n#define __COMP_CLK_SLEEP_ENABLE     __HAL_RCC_COMP_CLK_SLEEP_ENABLE\r\n#define __COMP_CLK_SLEEP_DISABLE    __HAL_RCC_COMP_CLK_SLEEP_DISABLE\r\n#define __CEC_FORCE_RESET           __HAL_RCC_CEC_FORCE_RESET\r\n#define __CEC_RELEASE_RESET         __HAL_RCC_CEC_RELEASE_RESET\r\n#define __CRC_CLK_DISABLE           __HAL_RCC_CRC_CLK_DISABLE\r\n#define __CRC_CLK_ENABLE            __HAL_RCC_CRC_CLK_ENABLE\r\n#define __CRC_CLK_SLEEP_DISABLE     __HAL_RCC_CRC_CLK_SLEEP_DISABLE\r\n#define __CRC_CLK_SLEEP_ENABLE      __HAL_RCC_CRC_CLK_SLEEP_ENABLE\r\n#define __CRC_FORCE_RESET           __HAL_RCC_CRC_FORCE_RESET\r\n#define __CRC_RELEASE_RESET         __HAL_RCC_CRC_RELEASE_RESET\r\n#define __DAC_CLK_DISABLE           __HAL_RCC_DAC_CLK_DISABLE\r\n#define __DAC_CLK_ENABLE            __HAL_RCC_DAC_CLK_ENABLE\r\n#define __DAC_FORCE_RESET           __HAL_RCC_DAC_FORCE_RESET\r\n#define __DAC_RELEASE_RESET         __HAL_RCC_DAC_RELEASE_RESET\r\n#define __DAC1_CLK_DISABLE          __HAL_RCC_DAC1_CLK_DISABLE\r\n#define __DAC1_CLK_ENABLE           __HAL_RCC_DAC1_CLK_ENABLE\r\n#define __DAC1_CLK_SLEEP_DISABLE    __HAL_RCC_DAC1_CLK_SLEEP_DISABLE\r\n#define __DAC1_CLK_SLEEP_ENABLE     __HAL_RCC_DAC1_CLK_SLEEP_ENABLE\r\n#define __DAC1_FORCE_RESET          __HAL_RCC_DAC1_FORCE_RESET\r\n#define __DAC1_RELEASE_RESET        __HAL_RCC_DAC1_RELEASE_RESET\r\n#define __DBGMCU_CLK_ENABLE         __HAL_RCC_DBGMCU_CLK_ENABLE\r\n#define __DBGMCU_CLK_DISABLE        __HAL_RCC_DBGMCU_CLK_DISABLE\r\n#define __DBGMCU_FORCE_RESET        __HAL_RCC_DBGMCU_FORCE_RESET\r\n#define __DBGMCU_RELEASE_RESET      __HAL_RCC_DBGMCU_RELEASE_RESET\r\n#define __DFSDM_CLK_DISABLE         __HAL_RCC_DFSDM_CLK_DISABLE\r\n#define __DFSDM_CLK_ENABLE          __HAL_RCC_DFSDM_CLK_ENABLE\r\n#define __DFSDM_CLK_SLEEP_DISABLE   __HAL_RCC_DFSDM_CLK_SLEEP_DISABLE\r\n#define __DFSDM_CLK_SLEEP_ENABLE    __HAL_RCC_DFSDM_CLK_SLEEP_ENABLE\r\n#define __DFSDM_FORCE_RESET         __HAL_RCC_DFSDM_FORCE_RESET\r\n#define __DFSDM_RELEASE_RESET       __HAL_RCC_DFSDM_RELEASE_RESET\r\n#define __DMA1_CLK_DISABLE          __HAL_RCC_DMA1_CLK_DISABLE\r\n#define __DMA1_CLK_ENABLE           __HAL_RCC_DMA1_CLK_ENABLE\r\n#define __DMA1_CLK_SLEEP_DISABLE    __HAL_RCC_DMA1_CLK_SLEEP_DISABLE\r\n#define __DMA1_CLK_SLEEP_ENABLE     __HAL_RCC_DMA1_CLK_SLEEP_ENABLE\r\n#define __DMA1_FORCE_RESET          __HAL_RCC_DMA1_FORCE_RESET\r\n#define __DMA1_RELEASE_RESET        __HAL_RCC_DMA1_RELEASE_RESET\r\n#define __DMA2_CLK_DISABLE          __HAL_RCC_DMA2_CLK_DISABLE\r\n#define __DMA2_CLK_ENABLE           __HAL_RCC_DMA2_CLK_ENABLE\r\n#define __DMA2_CLK_SLEEP_DISABLE    __HAL_RCC_DMA2_CLK_SLEEP_DISABLE\r\n#define __DMA2_CLK_SLEEP_ENABLE     __HAL_RCC_DMA2_CLK_SLEEP_ENABLE\r\n#define __DMA2_FORCE_RESET          __HAL_RCC_DMA2_FORCE_RESET\r\n#define __DMA2_RELEASE_RESET        __HAL_RCC_DMA2_RELEASE_RESET\r\n#define __ETHMAC_CLK_DISABLE        __HAL_RCC_ETHMAC_CLK_DISABLE\r\n#define __ETHMAC_CLK_ENABLE         __HAL_RCC_ETHMAC_CLK_ENABLE\r\n#define __ETHMAC_FORCE_RESET        __HAL_RCC_ETHMAC_FORCE_RESET\r\n#define __ETHMAC_RELEASE_RESET      __HAL_RCC_ETHMAC_RELEASE_RESET\r\n#define __ETHMACRX_CLK_DISABLE      __HAL_RCC_ETHMACRX_CLK_DISABLE\r\n#define __ETHMACRX_CLK_ENABLE       __HAL_RCC_ETHMACRX_CLK_ENABLE\r\n#define __ETHMACTX_CLK_DISABLE      __HAL_RCC_ETHMACTX_CLK_DISABLE\r\n#define __ETHMACTX_CLK_ENABLE       __HAL_RCC_ETHMACTX_CLK_ENABLE\r\n#define __FIREWALL_CLK_DISABLE      __HAL_RCC_FIREWALL_CLK_DISABLE\r\n#define __FIREWALL_CLK_ENABLE       __HAL_RCC_FIREWALL_CLK_ENABLE\r\n#define __FLASH_CLK_DISABLE         __HAL_RCC_FLASH_CLK_DISABLE\r\n#define __FLASH_CLK_ENABLE          __HAL_RCC_FLASH_CLK_ENABLE\r\n#define __FLASH_CLK_SLEEP_DISABLE   __HAL_RCC_FLASH_CLK_SLEEP_DISABLE\r\n#define __FLASH_CLK_SLEEP_ENABLE    __HAL_RCC_FLASH_CLK_SLEEP_ENABLE\r\n#define __FLASH_FORCE_RESET         __HAL_RCC_FLASH_FORCE_RESET\r\n#define __FLASH_RELEASE_RESET       __HAL_RCC_FLASH_RELEASE_RESET\r\n#define __FLITF_CLK_DISABLE         __HAL_RCC_FLITF_CLK_DISABLE\r\n#define __FLITF_CLK_ENABLE          __HAL_RCC_FLITF_CLK_ENABLE\r\n#define __FLITF_FORCE_RESET         __HAL_RCC_FLITF_FORCE_RESET\r\n#define __FLITF_RELEASE_RESET       __HAL_RCC_FLITF_RELEASE_RESET\r\n#define __FLITF_CLK_SLEEP_ENABLE    __HAL_RCC_FLITF_CLK_SLEEP_ENABLE\r\n#define __FLITF_CLK_SLEEP_DISABLE   __HAL_RCC_FLITF_CLK_SLEEP_DISABLE\r\n#define __FMC_CLK_DISABLE           __HAL_RCC_FMC_CLK_DISABLE\r\n#define __FMC_CLK_ENABLE            __HAL_RCC_FMC_CLK_ENABLE\r\n#define __FMC_CLK_SLEEP_DISABLE     __HAL_RCC_FMC_CLK_SLEEP_DISABLE\r\n#define __FMC_CLK_SLEEP_ENABLE      __HAL_RCC_FMC_CLK_SLEEP_ENABLE\r\n#define __FMC_FORCE_RESET           __HAL_RCC_FMC_FORCE_RESET\r\n#define __FMC_RELEASE_RESET         __HAL_RCC_FMC_RELEASE_RESET\r\n#define __FSMC_CLK_DISABLE          __HAL_RCC_FSMC_CLK_DISABLE\r\n#define __FSMC_CLK_ENABLE           __HAL_RCC_FSMC_CLK_ENABLE\r\n#define __GPIOA_CLK_DISABLE         __HAL_RCC_GPIOA_CLK_DISABLE\r\n#define __GPIOA_CLK_ENABLE          __HAL_RCC_GPIOA_CLK_ENABLE\r\n#define __GPIOA_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOA_CLK_SLEEP_DISABLE\r\n#define __GPIOA_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOA_CLK_SLEEP_ENABLE\r\n#define __GPIOA_FORCE_RESET         __HAL_RCC_GPIOA_FORCE_RESET\r\n#define __GPIOA_RELEASE_RESET       __HAL_RCC_GPIOA_RELEASE_RESET\r\n#define __GPIOB_CLK_DISABLE         __HAL_RCC_GPIOB_CLK_DISABLE\r\n#define __GPIOB_CLK_ENABLE          __HAL_RCC_GPIOB_CLK_ENABLE\r\n#define __GPIOB_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOB_CLK_SLEEP_DISABLE\r\n#define __GPIOB_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOB_CLK_SLEEP_ENABLE\r\n#define __GPIOB_FORCE_RESET         __HAL_RCC_GPIOB_FORCE_RESET\r\n#define __GPIOB_RELEASE_RESET       __HAL_RCC_GPIOB_RELEASE_RESET\r\n#define __GPIOC_CLK_DISABLE         __HAL_RCC_GPIOC_CLK_DISABLE\r\n#define __GPIOC_CLK_ENABLE          __HAL_RCC_GPIOC_CLK_ENABLE\r\n#define __GPIOC_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOC_CLK_SLEEP_DISABLE\r\n#define __GPIOC_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOC_CLK_SLEEP_ENABLE\r\n#define __GPIOC_FORCE_RESET         __HAL_RCC_GPIOC_FORCE_RESET\r\n#define __GPIOC_RELEASE_RESET       __HAL_RCC_GPIOC_RELEASE_RESET\r\n#define __GPIOD_CLK_DISABLE         __HAL_RCC_GPIOD_CLK_DISABLE\r\n#define __GPIOD_CLK_ENABLE          __HAL_RCC_GPIOD_CLK_ENABLE\r\n#define __GPIOD_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOD_CLK_SLEEP_DISABLE\r\n#define __GPIOD_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOD_CLK_SLEEP_ENABLE\r\n#define __GPIOD_FORCE_RESET         __HAL_RCC_GPIOD_FORCE_RESET\r\n#define __GPIOD_RELEASE_RESET       __HAL_RCC_GPIOD_RELEASE_RESET\r\n#define __GPIOE_CLK_DISABLE         __HAL_RCC_GPIOE_CLK_DISABLE\r\n#define __GPIOE_CLK_ENABLE          __HAL_RCC_GPIOE_CLK_ENABLE\r\n#define __GPIOE_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOE_CLK_SLEEP_DISABLE\r\n#define __GPIOE_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOE_CLK_SLEEP_ENABLE\r\n#define __GPIOE_FORCE_RESET         __HAL_RCC_GPIOE_FORCE_RESET\r\n#define __GPIOE_RELEASE_RESET       __HAL_RCC_GPIOE_RELEASE_RESET\r\n#define __GPIOF_CLK_DISABLE         __HAL_RCC_GPIOF_CLK_DISABLE\r\n#define __GPIOF_CLK_ENABLE          __HAL_RCC_GPIOF_CLK_ENABLE\r\n#define __GPIOF_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOF_CLK_SLEEP_DISABLE\r\n#define __GPIOF_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOF_CLK_SLEEP_ENABLE\r\n#define __GPIOF_FORCE_RESET         __HAL_RCC_GPIOF_FORCE_RESET\r\n#define __GPIOF_RELEASE_RESET       __HAL_RCC_GPIOF_RELEASE_RESET\r\n#define __GPIOG_CLK_DISABLE         __HAL_RCC_GPIOG_CLK_DISABLE\r\n#define __GPIOG_CLK_ENABLE          __HAL_RCC_GPIOG_CLK_ENABLE\r\n#define __GPIOG_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOG_CLK_SLEEP_DISABLE\r\n#define __GPIOG_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOG_CLK_SLEEP_ENABLE\r\n#define __GPIOG_FORCE_RESET         __HAL_RCC_GPIOG_FORCE_RESET\r\n#define __GPIOG_RELEASE_RESET       __HAL_RCC_GPIOG_RELEASE_RESET\r\n#define __GPIOH_CLK_DISABLE         __HAL_RCC_GPIOH_CLK_DISABLE\r\n#define __GPIOH_CLK_ENABLE          __HAL_RCC_GPIOH_CLK_ENABLE\r\n#define __GPIOH_CLK_SLEEP_DISABLE   __HAL_RCC_GPIOH_CLK_SLEEP_DISABLE\r\n#define __GPIOH_CLK_SLEEP_ENABLE    __HAL_RCC_GPIOH_CLK_SLEEP_ENABLE\r\n#define __GPIOH_FORCE_RESET         __HAL_RCC_GPIOH_FORCE_RESET\r\n#define __GPIOH_RELEASE_RESET       __HAL_RCC_GPIOH_RELEASE_RESET\r\n#define __I2C1_CLK_DISABLE          __HAL_RCC_I2C1_CLK_DISABLE\r\n#define __I2C1_CLK_ENABLE           __HAL_RCC_I2C1_CLK_ENABLE\r\n#define __I2C1_CLK_SLEEP_DISABLE    __HAL_RCC_I2C1_CLK_SLEEP_DISABLE\r\n#define __I2C1_CLK_SLEEP_ENABLE     __HAL_RCC_I2C1_CLK_SLEEP_ENABLE\r\n#define __I2C1_FORCE_RESET          __HAL_RCC_I2C1_FORCE_RESET\r\n#define __I2C1_RELEASE_RESET        __HAL_RCC_I2C1_RELEASE_RESET\r\n#define __I2C2_CLK_DISABLE          __HAL_RCC_I2C2_CLK_DISABLE\r\n#define __I2C2_CLK_ENABLE           __HAL_RCC_I2C2_CLK_ENABLE\r\n#define __I2C2_CLK_SLEEP_DISABLE    __HAL_RCC_I2C2_CLK_SLEEP_DISABLE\r\n#define __I2C2_CLK_SLEEP_ENABLE     __HAL_RCC_I2C2_CLK_SLEEP_ENABLE\r\n#define __I2C2_FORCE_RESET          __HAL_RCC_I2C2_FORCE_RESET\r\n#define __I2C2_RELEASE_RESET        __HAL_RCC_I2C2_RELEASE_RESET\r\n#define __I2C3_CLK_DISABLE          __HAL_RCC_I2C3_CLK_DISABLE\r\n#define __I2C3_CLK_ENABLE           __HAL_RCC_I2C3_CLK_ENABLE\r\n#define __I2C3_CLK_SLEEP_DISABLE    __HAL_RCC_I2C3_CLK_SLEEP_DISABLE\r\n#define __I2C3_CLK_SLEEP_ENABLE     __HAL_RCC_I2C3_CLK_SLEEP_ENABLE\r\n#define __I2C3_FORCE_RESET          __HAL_RCC_I2C3_FORCE_RESET\r\n#define __I2C3_RELEASE_RESET        __HAL_RCC_I2C3_RELEASE_RESET\r\n#define __LCD_CLK_DISABLE           __HAL_RCC_LCD_CLK_DISABLE\r\n#define __LCD_CLK_ENABLE            __HAL_RCC_LCD_CLK_ENABLE\r\n#define __LCD_CLK_SLEEP_DISABLE     __HAL_RCC_LCD_CLK_SLEEP_DISABLE\r\n#define __LCD_CLK_SLEEP_ENABLE      __HAL_RCC_LCD_CLK_SLEEP_ENABLE\r\n#define __LCD_FORCE_RESET           __HAL_RCC_LCD_FORCE_RESET\r\n#define __LCD_RELEASE_RESET         __HAL_RCC_LCD_RELEASE_RESET\r\n#define __LPTIM1_CLK_DISABLE        __HAL_RCC_LPTIM1_CLK_DISABLE\r\n#define __LPTIM1_CLK_ENABLE         __HAL_RCC_LPTIM1_CLK_ENABLE\r\n#define __LPTIM1_CLK_SLEEP_DISABLE  __HAL_RCC_LPTIM1_CLK_SLEEP_DISABLE\r\n#define __LPTIM1_CLK_SLEEP_ENABLE   __HAL_RCC_LPTIM1_CLK_SLEEP_ENABLE\r\n#define __LPTIM1_FORCE_RESET        __HAL_RCC_LPTIM1_FORCE_RESET\r\n#define __LPTIM1_RELEASE_RESET      __HAL_RCC_LPTIM1_RELEASE_RESET\r\n#define __LPTIM2_CLK_DISABLE        __HAL_RCC_LPTIM2_CLK_DISABLE\r\n#define __LPTIM2_CLK_ENABLE         __HAL_RCC_LPTIM2_CLK_ENABLE\r\n#define __LPTIM2_CLK_SLEEP_DISABLE  __HAL_RCC_LPTIM2_CLK_SLEEP_DISABLE\r\n#define __LPTIM2_CLK_SLEEP_ENABLE   __HAL_RCC_LPTIM2_CLK_SLEEP_ENABLE\r\n#define __LPTIM2_FORCE_RESET        __HAL_RCC_LPTIM2_FORCE_RESET\r\n#define __LPTIM2_RELEASE_RESET      __HAL_RCC_LPTIM2_RELEASE_RESET\r\n#define __LPUART1_CLK_DISABLE       __HAL_RCC_LPUART1_CLK_DISABLE\r\n#define __LPUART1_CLK_ENABLE        __HAL_RCC_LPUART1_CLK_ENABLE\r\n#define __LPUART1_CLK_SLEEP_DISABLE __HAL_RCC_LPUART1_CLK_SLEEP_DISABLE\r\n#define __LPUART1_CLK_SLEEP_ENABLE  __HAL_RCC_LPUART1_CLK_SLEEP_ENABLE\r\n#define __LPUART1_FORCE_RESET       __HAL_RCC_LPUART1_FORCE_RESET\r\n#define __LPUART1_RELEASE_RESET     __HAL_RCC_LPUART1_RELEASE_RESET\r\n#define __OPAMP_CLK_DISABLE         __HAL_RCC_OPAMP_CLK_DISABLE\r\n#define __OPAMP_CLK_ENABLE          __HAL_RCC_OPAMP_CLK_ENABLE\r\n#define __OPAMP_CLK_SLEEP_DISABLE   __HAL_RCC_OPAMP_CLK_SLEEP_DISABLE\r\n#define __OPAMP_CLK_SLEEP_ENABLE    __HAL_RCC_OPAMP_CLK_SLEEP_ENABLE\r\n#define __OPAMP_FORCE_RESET         __HAL_RCC_OPAMP_FORCE_RESET\r\n#define __OPAMP_RELEASE_RESET       __HAL_RCC_OPAMP_RELEASE_RESET\r\n#define __OTGFS_CLK_DISABLE         __HAL_RCC_OTGFS_CLK_DISABLE\r\n#define __OTGFS_CLK_ENABLE          __HAL_RCC_OTGFS_CLK_ENABLE\r\n#define __OTGFS_CLK_SLEEP_DISABLE   __HAL_RCC_OTGFS_CLK_SLEEP_DISABLE\r\n#define __OTGFS_CLK_SLEEP_ENABLE    __HAL_RCC_OTGFS_CLK_SLEEP_ENABLE\r\n#define __OTGFS_FORCE_RESET         __HAL_RCC_OTGFS_FORCE_RESET\r\n#define __OTGFS_RELEASE_RESET       __HAL_RCC_OTGFS_RELEASE_RESET\r\n#define __PWR_CLK_DISABLE           __HAL_RCC_PWR_CLK_DISABLE\r\n#define __PWR_CLK_ENABLE            __HAL_RCC_PWR_CLK_ENABLE\r\n#define __PWR_CLK_SLEEP_DISABLE     __HAL_RCC_PWR_CLK_SLEEP_DISABLE\r\n#define __PWR_CLK_SLEEP_ENABLE      __HAL_RCC_PWR_CLK_SLEEP_ENABLE\r\n#define __PWR_FORCE_RESET           __HAL_RCC_PWR_FORCE_RESET\r\n#define __PWR_RELEASE_RESET         __HAL_RCC_PWR_RELEASE_RESET\r\n#define __QSPI_CLK_DISABLE          __HAL_RCC_QSPI_CLK_DISABLE\r\n#define __QSPI_CLK_ENABLE           __HAL_RCC_QSPI_CLK_ENABLE\r\n#define __QSPI_CLK_SLEEP_DISABLE    __HAL_RCC_QSPI_CLK_SLEEP_DISABLE\r\n#define __QSPI_CLK_SLEEP_ENABLE     __HAL_RCC_QSPI_CLK_SLEEP_ENABLE\r\n#define __QSPI_FORCE_RESET          __HAL_RCC_QSPI_FORCE_RESET\r\n#define __QSPI_RELEASE_RESET        __HAL_RCC_QSPI_RELEASE_RESET\r\n#define __RNG_CLK_DISABLE           __HAL_RCC_RNG_CLK_DISABLE\r\n#define __RNG_CLK_ENABLE            __HAL_RCC_RNG_CLK_ENABLE\r\n#define __RNG_CLK_SLEEP_DISABLE     __HAL_RCC_RNG_CLK_SLEEP_DISABLE\r\n#define __RNG_CLK_SLEEP_ENABLE      __HAL_RCC_RNG_CLK_SLEEP_ENABLE\r\n#define __RNG_FORCE_RESET           __HAL_RCC_RNG_FORCE_RESET\r\n#define __RNG_RELEASE_RESET         __HAL_RCC_RNG_RELEASE_RESET\r\n#define __SAI1_CLK_DISABLE          __HAL_RCC_SAI1_CLK_DISABLE\r\n#define __SAI1_CLK_ENABLE           __HAL_RCC_SAI1_CLK_ENABLE\r\n#define __SAI1_CLK_SLEEP_DISABLE    __HAL_RCC_SAI1_CLK_SLEEP_DISABLE\r\n#define __SAI1_CLK_SLEEP_ENABLE     __HAL_RCC_SAI1_CLK_SLEEP_ENABLE\r\n#define __SAI1_FORCE_RESET          __HAL_RCC_SAI1_FORCE_RESET\r\n#define __SAI1_RELEASE_RESET        __HAL_RCC_SAI1_RELEASE_RESET\r\n#define __SAI2_CLK_DISABLE          __HAL_RCC_SAI2_CLK_DISABLE\r\n#define __SAI2_CLK_ENABLE           __HAL_RCC_SAI2_CLK_ENABLE\r\n#define __SAI2_CLK_SLEEP_DISABLE    __HAL_RCC_SAI2_CLK_SLEEP_DISABLE\r\n#define __SAI2_CLK_SLEEP_ENABLE     __HAL_RCC_SAI2_CLK_SLEEP_ENABLE\r\n#define __SAI2_FORCE_RESET          __HAL_RCC_SAI2_FORCE_RESET\r\n#define __SAI2_RELEASE_RESET        __HAL_RCC_SAI2_RELEASE_RESET\r\n#define __SDIO_CLK_DISABLE          __HAL_RCC_SDIO_CLK_DISABLE\r\n#define __SDIO_CLK_ENABLE           __HAL_RCC_SDIO_CLK_ENABLE\r\n#define __SDMMC_CLK_DISABLE         __HAL_RCC_SDMMC_CLK_DISABLE\r\n#define __SDMMC_CLK_ENABLE          __HAL_RCC_SDMMC_CLK_ENABLE\r\n#define __SDMMC_CLK_SLEEP_DISABLE   __HAL_RCC_SDMMC_CLK_SLEEP_DISABLE\r\n#define __SDMMC_CLK_SLEEP_ENABLE    __HAL_RCC_SDMMC_CLK_SLEEP_ENABLE\r\n#define __SDMMC_FORCE_RESET         __HAL_RCC_SDMMC_FORCE_RESET\r\n#define __SDMMC_RELEASE_RESET       __HAL_RCC_SDMMC_RELEASE_RESET\r\n#define __SPI1_CLK_DISABLE          __HAL_RCC_SPI1_CLK_DISABLE\r\n#define __SPI1_CLK_ENABLE           __HAL_RCC_SPI1_CLK_ENABLE\r\n#define __SPI1_CLK_SLEEP_DISABLE    __HAL_RCC_SPI1_CLK_SLEEP_DISABLE\r\n#define __SPI1_CLK_SLEEP_ENABLE     __HAL_RCC_SPI1_CLK_SLEEP_ENABLE\r\n#define __SPI1_FORCE_RESET          __HAL_RCC_SPI1_FORCE_RESET\r\n#define __SPI1_RELEASE_RESET        __HAL_RCC_SPI1_RELEASE_RESET\r\n#define __SPI2_CLK_DISABLE          __HAL_RCC_SPI2_CLK_DISABLE\r\n#define __SPI2_CLK_ENABLE           __HAL_RCC_SPI2_CLK_ENABLE\r\n#define __SPI2_CLK_SLEEP_DISABLE    __HAL_RCC_SPI2_CLK_SLEEP_DISABLE\r\n#define __SPI2_CLK_SLEEP_ENABLE     __HAL_RCC_SPI2_CLK_SLEEP_ENABLE\r\n#define __SPI2_FORCE_RESET          __HAL_RCC_SPI2_FORCE_RESET\r\n#define __SPI2_RELEASE_RESET        __HAL_RCC_SPI2_RELEASE_RESET\r\n#define __SPI3_CLK_DISABLE          __HAL_RCC_SPI3_CLK_DISABLE\r\n#define __SPI3_CLK_ENABLE           __HAL_RCC_SPI3_CLK_ENABLE\r\n#define __SPI3_CLK_SLEEP_DISABLE    __HAL_RCC_SPI3_CLK_SLEEP_DISABLE\r\n#define __SPI3_CLK_SLEEP_ENABLE     __HAL_RCC_SPI3_CLK_SLEEP_ENABLE\r\n#define __SPI3_FORCE_RESET          __HAL_RCC_SPI3_FORCE_RESET\r\n#define __SPI3_RELEASE_RESET        __HAL_RCC_SPI3_RELEASE_RESET\r\n#define __SRAM_CLK_DISABLE          __HAL_RCC_SRAM_CLK_DISABLE\r\n#define __SRAM_CLK_ENABLE           __HAL_RCC_SRAM_CLK_ENABLE\r\n#define __SRAM1_CLK_SLEEP_DISABLE   __HAL_RCC_SRAM1_CLK_SLEEP_DISABLE\r\n#define __SRAM1_CLK_SLEEP_ENABLE    __HAL_RCC_SRAM1_CLK_SLEEP_ENABLE\r\n#define __SRAM2_CLK_SLEEP_DISABLE   __HAL_RCC_SRAM2_CLK_SLEEP_DISABLE\r\n#define __SRAM2_CLK_SLEEP_ENABLE    __HAL_RCC_SRAM2_CLK_SLEEP_ENABLE\r\n#define __SWPMI1_CLK_DISABLE        __HAL_RCC_SWPMI1_CLK_DISABLE\r\n#define __SWPMI1_CLK_ENABLE         __HAL_RCC_SWPMI1_CLK_ENABLE\r\n#define __SWPMI1_CLK_SLEEP_DISABLE  __HAL_RCC_SWPMI1_CLK_SLEEP_DISABLE\r\n#define __SWPMI1_CLK_SLEEP_ENABLE   __HAL_RCC_SWPMI1_CLK_SLEEP_ENABLE\r\n#define __SWPMI1_FORCE_RESET        __HAL_RCC_SWPMI1_FORCE_RESET\r\n#define __SWPMI1_RELEASE_RESET      __HAL_RCC_SWPMI1_RELEASE_RESET\r\n#define __SYSCFG_CLK_DISABLE        __HAL_RCC_SYSCFG_CLK_DISABLE\r\n#define __SYSCFG_CLK_ENABLE         __HAL_RCC_SYSCFG_CLK_ENABLE\r\n#define __SYSCFG_CLK_SLEEP_DISABLE  __HAL_RCC_SYSCFG_CLK_SLEEP_DISABLE\r\n#define __SYSCFG_CLK_SLEEP_ENABLE   __HAL_RCC_SYSCFG_CLK_SLEEP_ENABLE\r\n#define __SYSCFG_FORCE_RESET        __HAL_RCC_SYSCFG_FORCE_RESET\r\n#define __SYSCFG_RELEASE_RESET      __HAL_RCC_SYSCFG_RELEASE_RESET\r\n#define __TIM1_CLK_DISABLE          __HAL_RCC_TIM1_CLK_DISABLE\r\n#define __TIM1_CLK_ENABLE           __HAL_RCC_TIM1_CLK_ENABLE\r\n#define __TIM1_CLK_SLEEP_DISABLE    __HAL_RCC_TIM1_CLK_SLEEP_DISABLE\r\n#define __TIM1_CLK_SLEEP_ENABLE     __HAL_RCC_TIM1_CLK_SLEEP_ENABLE\r\n#define __TIM1_FORCE_RESET          __HAL_RCC_TIM1_FORCE_RESET\r\n#define __TIM1_RELEASE_RESET        __HAL_RCC_TIM1_RELEASE_RESET\r\n#define __TIM10_CLK_DISABLE         __HAL_RCC_TIM10_CLK_DISABLE\r\n#define __TIM10_CLK_ENABLE          __HAL_RCC_TIM10_CLK_ENABLE\r\n#define __TIM10_FORCE_RESET         __HAL_RCC_TIM10_FORCE_RESET\r\n#define __TIM10_RELEASE_RESET       __HAL_RCC_TIM10_RELEASE_RESET\r\n#define __TIM11_CLK_DISABLE         __HAL_RCC_TIM11_CLK_DISABLE\r\n#define __TIM11_CLK_ENABLE          __HAL_RCC_TIM11_CLK_ENABLE\r\n#define __TIM11_FORCE_RESET         __HAL_RCC_TIM11_FORCE_RESET\r\n#define __TIM11_RELEASE_RESET       __HAL_RCC_TIM11_RELEASE_RESET\r\n#define __TIM12_CLK_DISABLE         __HAL_RCC_TIM12_CLK_DISABLE\r\n#define __TIM12_CLK_ENABLE          __HAL_RCC_TIM12_CLK_ENABLE\r\n#define __TIM12_FORCE_RESET         __HAL_RCC_TIM12_FORCE_RESET\r\n#define __TIM12_RELEASE_RESET       __HAL_RCC_TIM12_RELEASE_RESET\r\n#define __TIM13_CLK_DISABLE         __HAL_RCC_TIM13_CLK_DISABLE\r\n#define __TIM13_CLK_ENABLE          __HAL_RCC_TIM13_CLK_ENABLE\r\n#define __TIM13_FORCE_RESET         __HAL_RCC_TIM13_FORCE_RESET\r\n#define __TIM13_RELEASE_RESET       __HAL_RCC_TIM13_RELEASE_RESET\r\n#define __TIM14_CLK_DISABLE         __HAL_RCC_TIM14_CLK_DISABLE\r\n#define __TIM14_CLK_ENABLE          __HAL_RCC_TIM14_CLK_ENABLE\r\n#define __TIM14_FORCE_RESET         __HAL_RCC_TIM14_FORCE_RESET\r\n#define __TIM14_RELEASE_RESET       __HAL_RCC_TIM14_RELEASE_RESET\r\n#define __TIM15_CLK_DISABLE         __HAL_RCC_TIM15_CLK_DISABLE\r\n#define __TIM15_CLK_ENABLE          __HAL_RCC_TIM15_CLK_ENABLE\r\n#define __TIM15_CLK_SLEEP_DISABLE   __HAL_RCC_TIM15_CLK_SLEEP_DISABLE\r\n#define __TIM15_CLK_SLEEP_ENABLE    __HAL_RCC_TIM15_CLK_SLEEP_ENABLE\r\n#define __TIM15_FORCE_RESET         __HAL_RCC_TIM15_FORCE_RESET\r\n#define __TIM15_RELEASE_RESET       __HAL_RCC_TIM15_RELEASE_RESET\r\n#define __TIM16_CLK_DISABLE         __HAL_RCC_TIM16_CLK_DISABLE\r\n#define __TIM16_CLK_ENABLE          __HAL_RCC_TIM16_CLK_ENABLE\r\n#define __TIM16_CLK_SLEEP_DISABLE   __HAL_RCC_TIM16_CLK_SLEEP_DISABLE\r\n#define __TIM16_CLK_SLEEP_ENABLE    __HAL_RCC_TIM16_CLK_SLEEP_ENABLE\r\n#define __TIM16_FORCE_RESET         __HAL_RCC_TIM16_FORCE_RESET\r\n#define __TIM16_RELEASE_RESET       __HAL_RCC_TIM16_RELEASE_RESET\r\n#define __TIM17_CLK_DISABLE         __HAL_RCC_TIM17_CLK_DISABLE\r\n#define __TIM17_CLK_ENABLE          __HAL_RCC_TIM17_CLK_ENABLE\r\n#define __TIM17_CLK_SLEEP_DISABLE   __HAL_RCC_TIM17_CLK_SLEEP_DISABLE\r\n#define __TIM17_CLK_SLEEP_ENABLE    __HAL_RCC_TIM17_CLK_SLEEP_ENABLE\r\n#define __TIM17_FORCE_RESET         __HAL_RCC_TIM17_FORCE_RESET\r\n#define __TIM17_RELEASE_RESET       __HAL_RCC_TIM17_RELEASE_RESET\r\n#define __TIM2_CLK_DISABLE          __HAL_RCC_TIM2_CLK_DISABLE\r\n#define __TIM2_CLK_ENABLE           __HAL_RCC_TIM2_CLK_ENABLE\r\n#define __TIM2_CLK_SLEEP_DISABLE    __HAL_RCC_TIM2_CLK_SLEEP_DISABLE\r\n#define __TIM2_CLK_SLEEP_ENABLE     __HAL_RCC_TIM2_CLK_SLEEP_ENABLE\r\n#define __TIM2_FORCE_RESET          __HAL_RCC_TIM2_FORCE_RESET\r\n#define __TIM2_RELEASE_RESET        __HAL_RCC_TIM2_RELEASE_RESET\r\n#define __TIM3_CLK_DISABLE          __HAL_RCC_TIM3_CLK_DISABLE\r\n#define __TIM3_CLK_ENABLE           __HAL_RCC_TIM3_CLK_ENABLE\r\n#define __TIM3_CLK_SLEEP_DISABLE    __HAL_RCC_TIM3_CLK_SLEEP_DISABLE\r\n#define __TIM3_CLK_SLEEP_ENABLE     __HAL_RCC_TIM3_CLK_SLEEP_ENABLE\r\n#define __TIM3_FORCE_RESET          __HAL_RCC_TIM3_FORCE_RESET\r\n#define __TIM3_RELEASE_RESET        __HAL_RCC_TIM3_RELEASE_RESET\r\n#define __TIM4_CLK_DISABLE          __HAL_RCC_TIM4_CLK_DISABLE\r\n#define __TIM4_CLK_ENABLE           __HAL_RCC_TIM4_CLK_ENABLE\r\n#define __TIM4_CLK_SLEEP_DISABLE    __HAL_RCC_TIM4_CLK_SLEEP_DISABLE\r\n#define __TIM4_CLK_SLEEP_ENABLE     __HAL_RCC_TIM4_CLK_SLEEP_ENABLE\r\n#define __TIM4_FORCE_RESET          __HAL_RCC_TIM4_FORCE_RESET\r\n#define __TIM4_RELEASE_RESET        __HAL_RCC_TIM4_RELEASE_RESET\r\n#define __TIM5_CLK_DISABLE          __HAL_RCC_TIM5_CLK_DISABLE\r\n#define __TIM5_CLK_ENABLE           __HAL_RCC_TIM5_CLK_ENABLE\r\n#define __TIM5_CLK_SLEEP_DISABLE    __HAL_RCC_TIM5_CLK_SLEEP_DISABLE\r\n#define __TIM5_CLK_SLEEP_ENABLE     __HAL_RCC_TIM5_CLK_SLEEP_ENABLE\r\n#define __TIM5_FORCE_RESET          __HAL_RCC_TIM5_FORCE_RESET\r\n#define __TIM5_RELEASE_RESET        __HAL_RCC_TIM5_RELEASE_RESET\r\n#define __TIM6_CLK_DISABLE          __HAL_RCC_TIM6_CLK_DISABLE\r\n#define __TIM6_CLK_ENABLE           __HAL_RCC_TIM6_CLK_ENABLE\r\n#define __TIM6_CLK_SLEEP_DISABLE    __HAL_RCC_TIM6_CLK_SLEEP_DISABLE\r\n#define __TIM6_CLK_SLEEP_ENABLE     __HAL_RCC_TIM6_CLK_SLEEP_ENABLE\r\n#define __TIM6_FORCE_RESET          __HAL_RCC_TIM6_FORCE_RESET\r\n#define __TIM6_RELEASE_RESET        __HAL_RCC_TIM6_RELEASE_RESET\r\n#define __TIM7_CLK_DISABLE          __HAL_RCC_TIM7_CLK_DISABLE\r\n#define __TIM7_CLK_ENABLE           __HAL_RCC_TIM7_CLK_ENABLE\r\n#define __TIM7_CLK_SLEEP_DISABLE    __HAL_RCC_TIM7_CLK_SLEEP_DISABLE\r\n#define __TIM7_CLK_SLEEP_ENABLE     __HAL_RCC_TIM7_CLK_SLEEP_ENABLE\r\n#define __TIM7_FORCE_RESET          __HAL_RCC_TIM7_FORCE_RESET\r\n#define __TIM7_RELEASE_RESET        __HAL_RCC_TIM7_RELEASE_RESET\r\n#define __TIM8_CLK_DISABLE          __HAL_RCC_TIM8_CLK_DISABLE\r\n#define __TIM8_CLK_ENABLE           __HAL_RCC_TIM8_CLK_ENABLE\r\n#define __TIM8_CLK_SLEEP_DISABLE    __HAL_RCC_TIM8_CLK_SLEEP_DISABLE\r\n#define __TIM8_CLK_SLEEP_ENABLE     __HAL_RCC_TIM8_CLK_SLEEP_ENABLE\r\n#define __TIM8_FORCE_RESET          __HAL_RCC_TIM8_FORCE_RESET\r\n#define __TIM8_RELEASE_RESET        __HAL_RCC_TIM8_RELEASE_RESET\r\n#define __TIM9_CLK_DISABLE          __HAL_RCC_TIM9_CLK_DISABLE\r\n#define __TIM9_CLK_ENABLE           __HAL_RCC_TIM9_CLK_ENABLE\r\n#define __TIM9_FORCE_RESET          __HAL_RCC_TIM9_FORCE_RESET\r\n#define __TIM9_RELEASE_RESET        __HAL_RCC_TIM9_RELEASE_RESET\r\n#define __TSC_CLK_DISABLE           __HAL_RCC_TSC_CLK_DISABLE\r\n#define __TSC_CLK_ENABLE            __HAL_RCC_TSC_CLK_ENABLE\r\n#define __TSC_CLK_SLEEP_DISABLE     __HAL_RCC_TSC_CLK_SLEEP_DISABLE\r\n#define __TSC_CLK_SLEEP_ENABLE      __HAL_RCC_TSC_CLK_SLEEP_ENABLE\r\n#define __TSC_FORCE_RESET           __HAL_RCC_TSC_FORCE_RESET\r\n#define __TSC_RELEASE_RESET         __HAL_RCC_TSC_RELEASE_RESET\r\n#define __UART4_CLK_DISABLE         __HAL_RCC_UART4_CLK_DISABLE\r\n#define __UART4_CLK_ENABLE          __HAL_RCC_UART4_CLK_ENABLE\r\n#define __UART4_CLK_SLEEP_DISABLE   __HAL_RCC_UART4_CLK_SLEEP_DISABLE\r\n#define __UART4_CLK_SLEEP_ENABLE    __HAL_RCC_UART4_CLK_SLEEP_ENABLE\r\n#define __UART4_FORCE_RESET         __HAL_RCC_UART4_FORCE_RESET\r\n#define __UART4_RELEASE_RESET       __HAL_RCC_UART4_RELEASE_RESET\r\n#define __UART5_CLK_DISABLE         __HAL_RCC_UART5_CLK_DISABLE\r\n#define __UART5_CLK_ENABLE          __HAL_RCC_UART5_CLK_ENABLE\r\n#define __UART5_CLK_SLEEP_DISABLE   __HAL_RCC_UART5_CLK_SLEEP_DISABLE\r\n#define __UART5_CLK_SLEEP_ENABLE    __HAL_RCC_UART5_CLK_SLEEP_ENABLE\r\n#define __UART5_FORCE_RESET         __HAL_RCC_UART5_FORCE_RESET\r\n#define __UART5_RELEASE_RESET       __HAL_RCC_UART5_RELEASE_RESET\r\n#define __USART1_CLK_DISABLE        __HAL_RCC_USART1_CLK_DISABLE\r\n#define __USART1_CLK_ENABLE         __HAL_RCC_USART1_CLK_ENABLE\r\n#define __USART1_CLK_SLEEP_DISABLE  __HAL_RCC_USART1_CLK_SLEEP_DISABLE\r\n#define __USART1_CLK_SLEEP_ENABLE   __HAL_RCC_USART1_CLK_SLEEP_ENABLE\r\n#define __USART1_FORCE_RESET        __HAL_RCC_USART1_FORCE_RESET\r\n#define __USART1_RELEASE_RESET      __HAL_RCC_USART1_RELEASE_RESET\r\n#define __USART2_CLK_DISABLE        __HAL_RCC_USART2_CLK_DISABLE\r\n#define __USART2_CLK_ENABLE         __HAL_RCC_USART2_CLK_ENABLE\r\n#define __USART2_CLK_SLEEP_DISABLE  __HAL_RCC_USART2_CLK_SLEEP_DISABLE\r\n#define __USART2_CLK_SLEEP_ENABLE   __HAL_RCC_USART2_CLK_SLEEP_ENABLE\r\n#define __USART2_FORCE_RESET        __HAL_RCC_USART2_FORCE_RESET\r\n#define __USART2_RELEASE_RESET      __HAL_RCC_USART2_RELEASE_RESET\r\n#define __USART3_CLK_DISABLE        __HAL_RCC_USART3_CLK_DISABLE\r\n#define __USART3_CLK_ENABLE         __HAL_RCC_USART3_CLK_ENABLE\r\n#define __USART3_CLK_SLEEP_DISABLE  __HAL_RCC_USART3_CLK_SLEEP_DISABLE\r\n#define __USART3_CLK_SLEEP_ENABLE   __HAL_RCC_USART3_CLK_SLEEP_ENABLE\r\n#define __USART3_FORCE_RESET        __HAL_RCC_USART3_FORCE_RESET\r\n#define __USART3_RELEASE_RESET      __HAL_RCC_USART3_RELEASE_RESET\r\n#define __USART4_CLK_DISABLE        __HAL_RCC_UART4_CLK_DISABLE\r\n#define __USART4_CLK_ENABLE         __HAL_RCC_UART4_CLK_ENABLE\r\n#define __USART4_CLK_SLEEP_ENABLE   __HAL_RCC_UART4_CLK_SLEEP_ENABLE\r\n#define __USART4_CLK_SLEEP_DISABLE  __HAL_RCC_UART4_CLK_SLEEP_DISABLE\r\n#define __USART4_FORCE_RESET        __HAL_RCC_UART4_FORCE_RESET\r\n#define __USART4_RELEASE_RESET      __HAL_RCC_UART4_RELEASE_RESET\r\n#define __USART5_CLK_DISABLE        __HAL_RCC_UART5_CLK_DISABLE\r\n#define __USART5_CLK_ENABLE         __HAL_RCC_UART5_CLK_ENABLE\r\n#define __USART5_CLK_SLEEP_ENABLE   __HAL_RCC_UART5_CLK_SLEEP_ENABLE\r\n#define __USART5_CLK_SLEEP_DISABLE  __HAL_RCC_UART5_CLK_SLEEP_DISABLE\r\n#define __USART5_FORCE_RESET        __HAL_RCC_UART5_FORCE_RESET\r\n#define __USART5_RELEASE_RESET      __HAL_RCC_UART5_RELEASE_RESET\r\n#define __USART7_CLK_DISABLE        __HAL_RCC_UART7_CLK_DISABLE\r\n#define __USART7_CLK_ENABLE         __HAL_RCC_UART7_CLK_ENABLE\r\n#define __USART7_FORCE_RESET        __HAL_RCC_UART7_FORCE_RESET\r\n#define __USART7_RELEASE_RESET      __HAL_RCC_UART7_RELEASE_RESET\r\n#define __USART8_CLK_DISABLE        __HAL_RCC_UART8_CLK_DISABLE\r\n#define __USART8_CLK_ENABLE         __HAL_RCC_UART8_CLK_ENABLE\r\n#define __USART8_FORCE_RESET        __HAL_RCC_UART8_FORCE_RESET\r\n#define __USART8_RELEASE_RESET      __HAL_RCC_UART8_RELEASE_RESET\r\n#define __USB_CLK_DISABLE           __HAL_RCC_USB_CLK_DISABLE\r\n#define __USB_CLK_ENABLE            __HAL_RCC_USB_CLK_ENABLE\r\n#define __USB_FORCE_RESET           __HAL_RCC_USB_FORCE_RESET\r\n#define __USB_CLK_SLEEP_ENABLE      __HAL_RCC_USB_CLK_SLEEP_ENABLE\r\n#define __USB_CLK_SLEEP_DISABLE     __HAL_RCC_USB_CLK_SLEEP_DISABLE\r\n#define __USB_OTG_FS_CLK_DISABLE    __HAL_RCC_USB_OTG_FS_CLK_DISABLE\r\n#define __USB_OTG_FS_CLK_ENABLE     __HAL_RCC_USB_OTG_FS_CLK_ENABLE\r\n#define __USB_RELEASE_RESET         __HAL_RCC_USB_RELEASE_RESET\r\n#define __WWDG_CLK_DISABLE          __HAL_RCC_WWDG_CLK_DISABLE\r\n#define __WWDG_CLK_ENABLE           __HAL_RCC_WWDG_CLK_ENABLE\r\n#define __WWDG_CLK_SLEEP_DISABLE    __HAL_RCC_WWDG_CLK_SLEEP_DISABLE\r\n#define __WWDG_CLK_SLEEP_ENABLE     __HAL_RCC_WWDG_CLK_SLEEP_ENABLE\r\n#define __WWDG_FORCE_RESET          __HAL_RCC_WWDG_FORCE_RESET\r\n#define __WWDG_RELEASE_RESET        __HAL_RCC_WWDG_RELEASE_RESET\r\n#define __TIM21_CLK_ENABLE          __HAL_RCC_TIM21_CLK_ENABLE\r\n#define __TIM21_CLK_DISABLE         __HAL_RCC_TIM21_CLK_DISABLE\r\n#define __TIM21_FORCE_RESET         __HAL_RCC_TIM21_FORCE_RESET\r\n#define __TIM21_RELEASE_RESET       __HAL_RCC_TIM21_RELEASE_RESET\r\n#define __TIM21_CLK_SLEEP_ENABLE    __HAL_RCC_TIM21_CLK_SLEEP_ENABLE\r\n#define __TIM21_CLK_SLEEP_DISABLE   __HAL_RCC_TIM21_CLK_SLEEP_DISABLE\r\n#define __TIM22_CLK_ENABLE          __HAL_RCC_TIM22_CLK_ENABLE\r\n#define __TIM22_CLK_DISABLE         __HAL_RCC_TIM22_CLK_DISABLE\r\n#define __TIM22_FORCE_RESET         __HAL_RCC_TIM22_FORCE_RESET\r\n#define __TIM22_RELEASE_RESET       __HAL_RCC_TIM22_RELEASE_RESET\r\n#define __TIM22_CLK_SLEEP_ENABLE    __HAL_RCC_TIM22_CLK_SLEEP_ENABLE\r\n#define __TIM22_CLK_SLEEP_DISABLE   __HAL_RCC_TIM22_CLK_SLEEP_DISABLE\r\n#define __CRS_CLK_DISABLE           __HAL_RCC_CRS_CLK_DISABLE\r\n#define __CRS_CLK_ENABLE            __HAL_RCC_CRS_CLK_ENABLE\r\n#define __CRS_CLK_SLEEP_DISABLE     __HAL_RCC_CRS_CLK_SLEEP_DISABLE\r\n#define __CRS_CLK_SLEEP_ENABLE      __HAL_RCC_CRS_CLK_SLEEP_ENABLE\r\n#define __CRS_FORCE_RESET           __HAL_RCC_CRS_FORCE_RESET\r\n#define __CRS_RELEASE_RESET         __HAL_RCC_CRS_RELEASE_RESET\r\n#define __RCC_BACKUPRESET_FORCE     __HAL_RCC_BACKUPRESET_FORCE\r\n#define __RCC_BACKUPRESET_RELEASE   __HAL_RCC_BACKUPRESET_RELEASE\r\n\r\n#define __USB_OTG_FS_FORCE_RESET                  __HAL_RCC_USB_OTG_FS_FORCE_RESET\r\n#define __USB_OTG_FS_RELEASE_RESET                __HAL_RCC_USB_OTG_FS_RELEASE_RESET\r\n#define __USB_OTG_FS_CLK_SLEEP_ENABLE             __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE\r\n#define __USB_OTG_FS_CLK_SLEEP_DISABLE            __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE\r\n#define __USB_OTG_HS_CLK_DISABLE                  __HAL_RCC_USB_OTG_HS_CLK_DISABLE\r\n#define __USB_OTG_HS_CLK_ENABLE                   __HAL_RCC_USB_OTG_HS_CLK_ENABLE\r\n#define __USB_OTG_HS_ULPI_CLK_ENABLE              __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE\r\n#define __USB_OTG_HS_ULPI_CLK_DISABLE             __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE\r\n#define __TIM9_CLK_SLEEP_ENABLE                   __HAL_RCC_TIM9_CLK_SLEEP_ENABLE\r\n#define __TIM9_CLK_SLEEP_DISABLE                  __HAL_RCC_TIM9_CLK_SLEEP_DISABLE\r\n#define __TIM10_CLK_SLEEP_ENABLE                  __HAL_RCC_TIM10_CLK_SLEEP_ENABLE\r\n#define __TIM10_CLK_SLEEP_DISABLE                 __HAL_RCC_TIM10_CLK_SLEEP_DISABLE\r\n#define __TIM11_CLK_SLEEP_ENABLE                  __HAL_RCC_TIM11_CLK_SLEEP_ENABLE\r\n#define __TIM11_CLK_SLEEP_DISABLE                 __HAL_RCC_TIM11_CLK_SLEEP_DISABLE\r\n#define __ETHMACPTP_CLK_SLEEP_ENABLE              __HAL_RCC_ETHMACPTP_CLK_SLEEP_ENABLE\r\n#define __ETHMACPTP_CLK_SLEEP_DISABLE             __HAL_RCC_ETHMACPTP_CLK_SLEEP_DISABLE\r\n#define __ETHMACPTP_CLK_ENABLE                    __HAL_RCC_ETHMACPTP_CLK_ENABLE\r\n#define __ETHMACPTP_CLK_DISABLE                   __HAL_RCC_ETHMACPTP_CLK_DISABLE\r\n#define __HASH_CLK_ENABLE                         __HAL_RCC_HASH_CLK_ENABLE\r\n#define __HASH_FORCE_RESET                        __HAL_RCC_HASH_FORCE_RESET\r\n#define __HASH_RELEASE_RESET                      __HAL_RCC_HASH_RELEASE_RESET\r\n#define __HASH_CLK_SLEEP_ENABLE                   __HAL_RCC_HASH_CLK_SLEEP_ENABLE\r\n#define __HASH_CLK_SLEEP_DISABLE                  __HAL_RCC_HASH_CLK_SLEEP_DISABLE\r\n#define __HASH_CLK_DISABLE                        __HAL_RCC_HASH_CLK_DISABLE\r\n#define __SPI5_CLK_ENABLE                         __HAL_RCC_SPI5_CLK_ENABLE\r\n#define __SPI5_CLK_DISABLE                        __HAL_RCC_SPI5_CLK_DISABLE\r\n#define __SPI5_FORCE_RESET                        __HAL_RCC_SPI5_FORCE_RESET\r\n#define __SPI5_RELEASE_RESET                      __HAL_RCC_SPI5_RELEASE_RESET\r\n#define __SPI5_CLK_SLEEP_ENABLE                   __HAL_RCC_SPI5_CLK_SLEEP_ENABLE\r\n#define __SPI5_CLK_SLEEP_DISABLE                  __HAL_RCC_SPI5_CLK_SLEEP_DISABLE\r\n#define __SPI6_CLK_ENABLE                         __HAL_RCC_SPI6_CLK_ENABLE\r\n#define __SPI6_CLK_DISABLE                        __HAL_RCC_SPI6_CLK_DISABLE\r\n#define __SPI6_FORCE_RESET                        __HAL_RCC_SPI6_FORCE_RESET\r\n#define __SPI6_RELEASE_RESET                      __HAL_RCC_SPI6_RELEASE_RESET\r\n#define __SPI6_CLK_SLEEP_ENABLE                   __HAL_RCC_SPI6_CLK_SLEEP_ENABLE\r\n#define __SPI6_CLK_SLEEP_DISABLE                  __HAL_RCC_SPI6_CLK_SLEEP_DISABLE\r\n#define __LTDC_CLK_ENABLE                         __HAL_RCC_LTDC_CLK_ENABLE\r\n#define __LTDC_CLK_DISABLE                        __HAL_RCC_LTDC_CLK_DISABLE\r\n#define __LTDC_FORCE_RESET                        __HAL_RCC_LTDC_FORCE_RESET\r\n#define __LTDC_RELEASE_RESET                      __HAL_RCC_LTDC_RELEASE_RESET\r\n#define __LTDC_CLK_SLEEP_ENABLE                   __HAL_RCC_LTDC_CLK_SLEEP_ENABLE\r\n#define __ETHMAC_CLK_SLEEP_ENABLE                 __HAL_RCC_ETHMAC_CLK_SLEEP_ENABLE\r\n#define __ETHMAC_CLK_SLEEP_DISABLE                __HAL_RCC_ETHMAC_CLK_SLEEP_DISABLE\r\n#define __ETHMACTX_CLK_SLEEP_ENABLE               __HAL_RCC_ETHMACTX_CLK_SLEEP_ENABLE\r\n#define __ETHMACTX_CLK_SLEEP_DISABLE              __HAL_RCC_ETHMACTX_CLK_SLEEP_DISABLE\r\n#define __ETHMACRX_CLK_SLEEP_ENABLE               __HAL_RCC_ETHMACRX_CLK_SLEEP_ENABLE\r\n#define __ETHMACRX_CLK_SLEEP_DISABLE              __HAL_RCC_ETHMACRX_CLK_SLEEP_DISABLE\r\n#define __TIM12_CLK_SLEEP_ENABLE                  __HAL_RCC_TIM12_CLK_SLEEP_ENABLE\r\n#define __TIM12_CLK_SLEEP_DISABLE                 __HAL_RCC_TIM12_CLK_SLEEP_DISABLE\r\n#define __TIM13_CLK_SLEEP_ENABLE                  __HAL_RCC_TIM13_CLK_SLEEP_ENABLE\r\n#define __TIM13_CLK_SLEEP_DISABLE                 __HAL_RCC_TIM13_CLK_SLEEP_DISABLE\r\n#define __TIM14_CLK_SLEEP_ENABLE                  __HAL_RCC_TIM14_CLK_SLEEP_ENABLE\r\n#define __TIM14_CLK_SLEEP_DISABLE                 __HAL_RCC_TIM14_CLK_SLEEP_DISABLE\r\n#define __BKPSRAM_CLK_ENABLE                      __HAL_RCC_BKPSRAM_CLK_ENABLE\r\n#define __BKPSRAM_CLK_DISABLE                     __HAL_RCC_BKPSRAM_CLK_DISABLE\r\n#define __BKPSRAM_CLK_SLEEP_ENABLE                __HAL_RCC_BKPSRAM_CLK_SLEEP_ENABLE\r\n#define __BKPSRAM_CLK_SLEEP_DISABLE               __HAL_RCC_BKPSRAM_CLK_SLEEP_DISABLE\r\n#define __CCMDATARAMEN_CLK_ENABLE                 __HAL_RCC_CCMDATARAMEN_CLK_ENABLE\r\n#define __CCMDATARAMEN_CLK_DISABLE                __HAL_RCC_CCMDATARAMEN_CLK_DISABLE\r\n#define __USART6_CLK_ENABLE                       __HAL_RCC_USART6_CLK_ENABLE\r\n#define __USART6_CLK_DISABLE                      __HAL_RCC_USART6_CLK_DISABLE\r\n#define __USART6_FORCE_RESET                      __HAL_RCC_USART6_FORCE_RESET\r\n#define __USART6_RELEASE_RESET                    __HAL_RCC_USART6_RELEASE_RESET\r\n#define __USART6_CLK_SLEEP_ENABLE                 __HAL_RCC_USART6_CLK_SLEEP_ENABLE\r\n#define __USART6_CLK_SLEEP_DISABLE                __HAL_RCC_USART6_CLK_SLEEP_DISABLE\r\n#define __SPI4_CLK_ENABLE                         __HAL_RCC_SPI4_CLK_ENABLE\r\n#define __SPI4_CLK_DISABLE                        __HAL_RCC_SPI4_CLK_DISABLE\r\n#define __SPI4_FORCE_RESET                        __HAL_RCC_SPI4_FORCE_RESET\r\n#define __SPI4_RELEASE_RESET                      __HAL_RCC_SPI4_RELEASE_RESET\r\n#define __SPI4_CLK_SLEEP_ENABLE                   __HAL_RCC_SPI4_CLK_SLEEP_ENABLE\r\n#define __SPI4_CLK_SLEEP_DISABLE                  __HAL_RCC_SPI4_CLK_SLEEP_DISABLE\r\n#define __GPIOI_CLK_ENABLE                        __HAL_RCC_GPIOI_CLK_ENABLE\r\n#define __GPIOI_CLK_DISABLE                       __HAL_RCC_GPIOI_CLK_DISABLE\r\n#define __GPIOI_FORCE_RESET                       __HAL_RCC_GPIOI_FORCE_RESET\r\n#define __GPIOI_RELEASE_RESET                     __HAL_RCC_GPIOI_RELEASE_RESET\r\n#define __GPIOI_CLK_SLEEP_ENABLE                  __HAL_RCC_GPIOI_CLK_SLEEP_ENABLE\r\n#define __GPIOI_CLK_SLEEP_DISABLE                 __HAL_RCC_GPIOI_CLK_SLEEP_DISABLE\r\n#define __GPIOJ_CLK_ENABLE                        __HAL_RCC_GPIOJ_CLK_ENABLE\r\n#define __GPIOJ_CLK_DISABLE                       __HAL_RCC_GPIOJ_CLK_DISABLE\r\n#define __GPIOJ_FORCE_RESET                       __HAL_RCC_GPIOJ_FORCE_RESET\r\n#define __GPIOJ_RELEASE_RESET                     __HAL_RCC_GPIOJ_RELEASE_RESET\r\n#define __GPIOJ_CLK_SLEEP_ENABLE                  __HAL_RCC_GPIOJ_CLK_SLEEP_ENABLE\r\n#define __GPIOJ_CLK_SLEEP_DISABLE                 __HAL_RCC_GPIOJ_CLK_SLEEP_DISABLE\r\n#define __GPIOK_CLK_ENABLE                        __HAL_RCC_GPIOK_CLK_ENABLE\r\n#define __GPIOK_CLK_DISABLE                       __HAL_RCC_GPIOK_CLK_DISABLE\r\n#define __GPIOK_RELEASE_RESET                     __HAL_RCC_GPIOK_RELEASE_RESET\r\n#define __GPIOK_CLK_SLEEP_ENABLE                  __HAL_RCC_GPIOK_CLK_SLEEP_ENABLE\r\n#define __GPIOK_CLK_SLEEP_DISABLE                 __HAL_RCC_GPIOK_CLK_SLEEP_DISABLE\r\n#define __ETH_CLK_ENABLE                          __HAL_RCC_ETH_CLK_ENABLE\r\n#define __ETH_CLK_DISABLE                         __HAL_RCC_ETH_CLK_DISABLE\r\n#define __DCMI_CLK_ENABLE                         __HAL_RCC_DCMI_CLK_ENABLE\r\n#define __DCMI_CLK_DISABLE                        __HAL_RCC_DCMI_CLK_DISABLE\r\n#define __DCMI_FORCE_RESET                        __HAL_RCC_DCMI_FORCE_RESET\r\n#define __DCMI_RELEASE_RESET                      __HAL_RCC_DCMI_RELEASE_RESET\r\n#define __DCMI_CLK_SLEEP_ENABLE                   __HAL_RCC_DCMI_CLK_SLEEP_ENABLE\r\n#define __DCMI_CLK_SLEEP_DISABLE                  __HAL_RCC_DCMI_CLK_SLEEP_DISABLE\r\n#define __UART7_CLK_ENABLE                        __HAL_RCC_UART7_CLK_ENABLE\r\n#define __UART7_CLK_DISABLE                       __HAL_RCC_UART7_CLK_DISABLE\r\n#define __UART7_RELEASE_RESET                     __HAL_RCC_UART7_RELEASE_RESET\r\n#define __UART7_FORCE_RESET                       __HAL_RCC_UART7_FORCE_RESET\r\n#define __UART7_CLK_SLEEP_ENABLE                  __HAL_RCC_UART7_CLK_SLEEP_ENABLE\r\n#define __UART7_CLK_SLEEP_DISABLE                 __HAL_RCC_UART7_CLK_SLEEP_DISABLE\r\n#define __UART8_CLK_ENABLE                        __HAL_RCC_UART8_CLK_ENABLE\r\n#define __UART8_CLK_DISABLE                       __HAL_RCC_UART8_CLK_DISABLE\r\n#define __UART8_FORCE_RESET                       __HAL_RCC_UART8_FORCE_RESET\r\n#define __UART8_RELEASE_RESET                     __HAL_RCC_UART8_RELEASE_RESET\r\n#define __UART8_CLK_SLEEP_ENABLE                  __HAL_RCC_UART8_CLK_SLEEP_ENABLE\r\n#define __UART8_CLK_SLEEP_DISABLE                 __HAL_RCC_UART8_CLK_SLEEP_DISABLE\r\n#define __OTGHS_CLK_SLEEP_ENABLE                  __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE\r\n#define __OTGHS_CLK_SLEEP_DISABLE                 __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE\r\n#define __OTGHS_FORCE_RESET                       __HAL_RCC_USB_OTG_HS_FORCE_RESET\r\n#define __OTGHS_RELEASE_RESET                     __HAL_RCC_USB_OTG_HS_RELEASE_RESET\r\n#define __OTGHSULPI_CLK_SLEEP_ENABLE              __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE\r\n#define __OTGHSULPI_CLK_SLEEP_DISABLE             __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_OTGHS_CLK_SLEEP_ENABLE          __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_OTGHS_CLK_SLEEP_DISABLE         __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_OTGHS_IS_CLK_SLEEP_ENABLED      __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_ENABLED\r\n#define __HAL_RCC_OTGHS_IS_CLK_SLEEP_DISABLED     __HAL_RCC_USB_OTG_HS_IS_CLK_SLEEP_DISABLED\r\n#define __HAL_RCC_OTGHS_FORCE_RESET               __HAL_RCC_USB_OTG_HS_FORCE_RESET\r\n#define __HAL_RCC_OTGHS_RELEASE_RESET             __HAL_RCC_USB_OTG_HS_RELEASE_RESET\r\n#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_ENABLE      __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_OTGHSULPI_CLK_SLEEP_DISABLE     __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_ENABLED  __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_ENABLED\r\n#define __HAL_RCC_OTGHSULPI_IS_CLK_SLEEP_DISABLED __HAL_RCC_USB_OTG_HS_ULPI_IS_CLK_SLEEP_DISABLED\r\n#define __CRYP_FORCE_RESET                        __HAL_RCC_CRYP_FORCE_RESET\r\n#define __SRAM3_CLK_SLEEP_ENABLE                  __HAL_RCC_SRAM3_CLK_SLEEP_ENABLE\r\n#define __CAN2_CLK_SLEEP_ENABLE                   __HAL_RCC_CAN2_CLK_SLEEP_ENABLE\r\n#define __CAN2_CLK_SLEEP_DISABLE                  __HAL_RCC_CAN2_CLK_SLEEP_DISABLE\r\n#define __DAC_CLK_SLEEP_ENABLE                    __HAL_RCC_DAC_CLK_SLEEP_ENABLE\r\n#define __DAC_CLK_SLEEP_DISABLE                   __HAL_RCC_DAC_CLK_SLEEP_DISABLE\r\n#define __ADC2_CLK_SLEEP_ENABLE                   __HAL_RCC_ADC2_CLK_SLEEP_ENABLE\r\n#define __ADC2_CLK_SLEEP_DISABLE                  __HAL_RCC_ADC2_CLK_SLEEP_DISABLE\r\n#define __ADC3_CLK_SLEEP_ENABLE                   __HAL_RCC_ADC3_CLK_SLEEP_ENABLE\r\n#define __ADC3_CLK_SLEEP_DISABLE                  __HAL_RCC_ADC3_CLK_SLEEP_DISABLE\r\n#define __FSMC_FORCE_RESET                        __HAL_RCC_FSMC_FORCE_RESET\r\n#define __FSMC_RELEASE_RESET                      __HAL_RCC_FSMC_RELEASE_RESET\r\n#define __FSMC_CLK_SLEEP_ENABLE                   __HAL_RCC_FSMC_CLK_SLEEP_ENABLE\r\n#define __FSMC_CLK_SLEEP_DISABLE                  __HAL_RCC_FSMC_CLK_SLEEP_DISABLE\r\n#define __SDIO_FORCE_RESET                        __HAL_RCC_SDIO_FORCE_RESET\r\n#define __SDIO_RELEASE_RESET                      __HAL_RCC_SDIO_RELEASE_RESET\r\n#define __SDIO_CLK_SLEEP_DISABLE                  __HAL_RCC_SDIO_CLK_SLEEP_DISABLE\r\n#define __SDIO_CLK_SLEEP_ENABLE                   __HAL_RCC_SDIO_CLK_SLEEP_ENABLE\r\n#define __DMA2D_CLK_ENABLE                        __HAL_RCC_DMA2D_CLK_ENABLE\r\n#define __DMA2D_CLK_DISABLE                       __HAL_RCC_DMA2D_CLK_DISABLE\r\n#define __DMA2D_FORCE_RESET                       __HAL_RCC_DMA2D_FORCE_RESET\r\n#define __DMA2D_RELEASE_RESET                     __HAL_RCC_DMA2D_RELEASE_RESET\r\n#define __DMA2D_CLK_SLEEP_ENABLE                  __HAL_RCC_DMA2D_CLK_SLEEP_ENABLE\r\n#define __DMA2D_CLK_SLEEP_DISABLE                 __HAL_RCC_DMA2D_CLK_SLEEP_DISABLE\r\n\r\n/* alias define maintained for legacy */\r\n#define __HAL_RCC_OTGFS_FORCE_RESET   __HAL_RCC_USB_OTG_FS_FORCE_RESET\r\n#define __HAL_RCC_OTGFS_RELEASE_RESET __HAL_RCC_USB_OTG_FS_RELEASE_RESET\r\n\r\n#define __ADC12_CLK_ENABLE   __HAL_RCC_ADC12_CLK_ENABLE\r\n#define __ADC12_CLK_DISABLE  __HAL_RCC_ADC12_CLK_DISABLE\r\n#define __ADC34_CLK_ENABLE   __HAL_RCC_ADC34_CLK_ENABLE\r\n#define __ADC34_CLK_DISABLE  __HAL_RCC_ADC34_CLK_DISABLE\r\n#define __ADC12_CLK_ENABLE   __HAL_RCC_ADC12_CLK_ENABLE\r\n#define __ADC12_CLK_DISABLE  __HAL_RCC_ADC12_CLK_DISABLE\r\n#define __DAC2_CLK_ENABLE    __HAL_RCC_DAC2_CLK_ENABLE\r\n#define __DAC2_CLK_DISABLE   __HAL_RCC_DAC2_CLK_DISABLE\r\n#define __TIM18_CLK_ENABLE   __HAL_RCC_TIM18_CLK_ENABLE\r\n#define __TIM18_CLK_DISABLE  __HAL_RCC_TIM18_CLK_DISABLE\r\n#define __TIM19_CLK_ENABLE   __HAL_RCC_TIM19_CLK_ENABLE\r\n#define __TIM19_CLK_DISABLE  __HAL_RCC_TIM19_CLK_DISABLE\r\n#define __TIM20_CLK_ENABLE   __HAL_RCC_TIM20_CLK_ENABLE\r\n#define __TIM20_CLK_DISABLE  __HAL_RCC_TIM20_CLK_DISABLE\r\n#define __HRTIM1_CLK_ENABLE  __HAL_RCC_HRTIM1_CLK_ENABLE\r\n#define __HRTIM1_CLK_DISABLE __HAL_RCC_HRTIM1_CLK_DISABLE\r\n#define __SDADC1_CLK_ENABLE  __HAL_RCC_SDADC1_CLK_ENABLE\r\n#define __SDADC2_CLK_ENABLE  __HAL_RCC_SDADC2_CLK_ENABLE\r\n#define __SDADC3_CLK_ENABLE  __HAL_RCC_SDADC3_CLK_ENABLE\r\n#define __SDADC1_CLK_DISABLE __HAL_RCC_SDADC1_CLK_DISABLE\r\n#define __SDADC2_CLK_DISABLE __HAL_RCC_SDADC2_CLK_DISABLE\r\n#define __SDADC3_CLK_DISABLE __HAL_RCC_SDADC3_CLK_DISABLE\r\n\r\n#define __ADC12_FORCE_RESET    __HAL_RCC_ADC12_FORCE_RESET\r\n#define __ADC12_RELEASE_RESET  __HAL_RCC_ADC12_RELEASE_RESET\r\n#define __ADC34_FORCE_RESET    __HAL_RCC_ADC34_FORCE_RESET\r\n#define __ADC34_RELEASE_RESET  __HAL_RCC_ADC34_RELEASE_RESET\r\n#define __ADC12_FORCE_RESET    __HAL_RCC_ADC12_FORCE_RESET\r\n#define __ADC12_RELEASE_RESET  __HAL_RCC_ADC12_RELEASE_RESET\r\n#define __DAC2_FORCE_RESET     __HAL_RCC_DAC2_FORCE_RESET\r\n#define __DAC2_RELEASE_RESET   __HAL_RCC_DAC2_RELEASE_RESET\r\n#define __TIM18_FORCE_RESET    __HAL_RCC_TIM18_FORCE_RESET\r\n#define __TIM18_RELEASE_RESET  __HAL_RCC_TIM18_RELEASE_RESET\r\n#define __TIM19_FORCE_RESET    __HAL_RCC_TIM19_FORCE_RESET\r\n#define __TIM19_RELEASE_RESET  __HAL_RCC_TIM19_RELEASE_RESET\r\n#define __TIM20_FORCE_RESET    __HAL_RCC_TIM20_FORCE_RESET\r\n#define __TIM20_RELEASE_RESET  __HAL_RCC_TIM20_RELEASE_RESET\r\n#define __HRTIM1_FORCE_RESET   __HAL_RCC_HRTIM1_FORCE_RESET\r\n#define __HRTIM1_RELEASE_RESET __HAL_RCC_HRTIM1_RELEASE_RESET\r\n#define __SDADC1_FORCE_RESET   __HAL_RCC_SDADC1_FORCE_RESET\r\n#define __SDADC2_FORCE_RESET   __HAL_RCC_SDADC2_FORCE_RESET\r\n#define __SDADC3_FORCE_RESET   __HAL_RCC_SDADC3_FORCE_RESET\r\n#define __SDADC1_RELEASE_RESET __HAL_RCC_SDADC1_RELEASE_RESET\r\n#define __SDADC2_RELEASE_RESET __HAL_RCC_SDADC2_RELEASE_RESET\r\n#define __SDADC3_RELEASE_RESET __HAL_RCC_SDADC3_RELEASE_RESET\r\n\r\n#define __ADC1_IS_CLK_ENABLED    __HAL_RCC_ADC1_IS_CLK_ENABLED\r\n#define __ADC1_IS_CLK_DISABLED   __HAL_RCC_ADC1_IS_CLK_DISABLED\r\n#define __ADC12_IS_CLK_ENABLED   __HAL_RCC_ADC12_IS_CLK_ENABLED\r\n#define __ADC12_IS_CLK_DISABLED  __HAL_RCC_ADC12_IS_CLK_DISABLED\r\n#define __ADC34_IS_CLK_ENABLED   __HAL_RCC_ADC34_IS_CLK_ENABLED\r\n#define __ADC34_IS_CLK_DISABLED  __HAL_RCC_ADC34_IS_CLK_DISABLED\r\n#define __CEC_IS_CLK_ENABLED     __HAL_RCC_CEC_IS_CLK_ENABLED\r\n#define __CEC_IS_CLK_DISABLED    __HAL_RCC_CEC_IS_CLK_DISABLED\r\n#define __CRC_IS_CLK_ENABLED     __HAL_RCC_CRC_IS_CLK_ENABLED\r\n#define __CRC_IS_CLK_DISABLED    __HAL_RCC_CRC_IS_CLK_DISABLED\r\n#define __DAC1_IS_CLK_ENABLED    __HAL_RCC_DAC1_IS_CLK_ENABLED\r\n#define __DAC1_IS_CLK_DISABLED   __HAL_RCC_DAC1_IS_CLK_DISABLED\r\n#define __DAC2_IS_CLK_ENABLED    __HAL_RCC_DAC2_IS_CLK_ENABLED\r\n#define __DAC2_IS_CLK_DISABLED   __HAL_RCC_DAC2_IS_CLK_DISABLED\r\n#define __DMA1_IS_CLK_ENABLED    __HAL_RCC_DMA1_IS_CLK_ENABLED\r\n#define __DMA1_IS_CLK_DISABLED   __HAL_RCC_DMA1_IS_CLK_DISABLED\r\n#define __DMA2_IS_CLK_ENABLED    __HAL_RCC_DMA2_IS_CLK_ENABLED\r\n#define __DMA2_IS_CLK_DISABLED   __HAL_RCC_DMA2_IS_CLK_DISABLED\r\n#define __FLITF_IS_CLK_ENABLED   __HAL_RCC_FLITF_IS_CLK_ENABLED\r\n#define __FLITF_IS_CLK_DISABLED  __HAL_RCC_FLITF_IS_CLK_DISABLED\r\n#define __FMC_IS_CLK_ENABLED     __HAL_RCC_FMC_IS_CLK_ENABLED\r\n#define __FMC_IS_CLK_DISABLED    __HAL_RCC_FMC_IS_CLK_DISABLED\r\n#define __GPIOA_IS_CLK_ENABLED   __HAL_RCC_GPIOA_IS_CLK_ENABLED\r\n#define __GPIOA_IS_CLK_DISABLED  __HAL_RCC_GPIOA_IS_CLK_DISABLED\r\n#define __GPIOB_IS_CLK_ENABLED   __HAL_RCC_GPIOB_IS_CLK_ENABLED\r\n#define __GPIOB_IS_CLK_DISABLED  __HAL_RCC_GPIOB_IS_CLK_DISABLED\r\n#define __GPIOC_IS_CLK_ENABLED   __HAL_RCC_GPIOC_IS_CLK_ENABLED\r\n#define __GPIOC_IS_CLK_DISABLED  __HAL_RCC_GPIOC_IS_CLK_DISABLED\r\n#define __GPIOD_IS_CLK_ENABLED   __HAL_RCC_GPIOD_IS_CLK_ENABLED\r\n#define __GPIOD_IS_CLK_DISABLED  __HAL_RCC_GPIOD_IS_CLK_DISABLED\r\n#define __GPIOE_IS_CLK_ENABLED   __HAL_RCC_GPIOE_IS_CLK_ENABLED\r\n#define __GPIOE_IS_CLK_DISABLED  __HAL_RCC_GPIOE_IS_CLK_DISABLED\r\n#define __GPIOF_IS_CLK_ENABLED   __HAL_RCC_GPIOF_IS_CLK_ENABLED\r\n#define __GPIOF_IS_CLK_DISABLED  __HAL_RCC_GPIOF_IS_CLK_DISABLED\r\n#define __GPIOG_IS_CLK_ENABLED   __HAL_RCC_GPIOG_IS_CLK_ENABLED\r\n#define __GPIOG_IS_CLK_DISABLED  __HAL_RCC_GPIOG_IS_CLK_DISABLED\r\n#define __GPIOH_IS_CLK_ENABLED   __HAL_RCC_GPIOH_IS_CLK_ENABLED\r\n#define __GPIOH_IS_CLK_DISABLED  __HAL_RCC_GPIOH_IS_CLK_DISABLED\r\n#define __HRTIM1_IS_CLK_ENABLED  __HAL_RCC_HRTIM1_IS_CLK_ENABLED\r\n#define __HRTIM1_IS_CLK_DISABLED __HAL_RCC_HRTIM1_IS_CLK_DISABLED\r\n#define __I2C1_IS_CLK_ENABLED    __HAL_RCC_I2C1_IS_CLK_ENABLED\r\n#define __I2C1_IS_CLK_DISABLED   __HAL_RCC_I2C1_IS_CLK_DISABLED\r\n#define __I2C2_IS_CLK_ENABLED    __HAL_RCC_I2C2_IS_CLK_ENABLED\r\n#define __I2C2_IS_CLK_DISABLED   __HAL_RCC_I2C2_IS_CLK_DISABLED\r\n#define __I2C3_IS_CLK_ENABLED    __HAL_RCC_I2C3_IS_CLK_ENABLED\r\n#define __I2C3_IS_CLK_DISABLED   __HAL_RCC_I2C3_IS_CLK_DISABLED\r\n#define __PWR_IS_CLK_ENABLED     __HAL_RCC_PWR_IS_CLK_ENABLED\r\n#define __PWR_IS_CLK_DISABLED    __HAL_RCC_PWR_IS_CLK_DISABLED\r\n#define __SYSCFG_IS_CLK_ENABLED  __HAL_RCC_SYSCFG_IS_CLK_ENABLED\r\n#define __SYSCFG_IS_CLK_DISABLED __HAL_RCC_SYSCFG_IS_CLK_DISABLED\r\n#define __SPI1_IS_CLK_ENABLED    __HAL_RCC_SPI1_IS_CLK_ENABLED\r\n#define __SPI1_IS_CLK_DISABLED   __HAL_RCC_SPI1_IS_CLK_DISABLED\r\n#define __SPI2_IS_CLK_ENABLED    __HAL_RCC_SPI2_IS_CLK_ENABLED\r\n#define __SPI2_IS_CLK_DISABLED   __HAL_RCC_SPI2_IS_CLK_DISABLED\r\n#define __SPI3_IS_CLK_ENABLED    __HAL_RCC_SPI3_IS_CLK_ENABLED\r\n#define __SPI3_IS_CLK_DISABLED   __HAL_RCC_SPI3_IS_CLK_DISABLED\r\n#define __SPI4_IS_CLK_ENABLED    __HAL_RCC_SPI4_IS_CLK_ENABLED\r\n#define __SPI4_IS_CLK_DISABLED   __HAL_RCC_SPI4_IS_CLK_DISABLED\r\n#define __SDADC1_IS_CLK_ENABLED  __HAL_RCC_SDADC1_IS_CLK_ENABLED\r\n#define __SDADC1_IS_CLK_DISABLED __HAL_RCC_SDADC1_IS_CLK_DISABLED\r\n#define __SDADC2_IS_CLK_ENABLED  __HAL_RCC_SDADC2_IS_CLK_ENABLED\r\n#define __SDADC2_IS_CLK_DISABLED __HAL_RCC_SDADC2_IS_CLK_DISABLED\r\n#define __SDADC3_IS_CLK_ENABLED  __HAL_RCC_SDADC3_IS_CLK_ENABLED\r\n#define __SDADC3_IS_CLK_DISABLED __HAL_RCC_SDADC3_IS_CLK_DISABLED\r\n#define __SRAM_IS_CLK_ENABLED    __HAL_RCC_SRAM_IS_CLK_ENABLED\r\n#define __SRAM_IS_CLK_DISABLED   __HAL_RCC_SRAM_IS_CLK_DISABLED\r\n#define __TIM1_IS_CLK_ENABLED    __HAL_RCC_TIM1_IS_CLK_ENABLED\r\n#define __TIM1_IS_CLK_DISABLED   __HAL_RCC_TIM1_IS_CLK_DISABLED\r\n#define __TIM2_IS_CLK_ENABLED    __HAL_RCC_TIM2_IS_CLK_ENABLED\r\n#define __TIM2_IS_CLK_DISABLED   __HAL_RCC_TIM2_IS_CLK_DISABLED\r\n#define __TIM3_IS_CLK_ENABLED    __HAL_RCC_TIM3_IS_CLK_ENABLED\r\n#define __TIM3_IS_CLK_DISABLED   __HAL_RCC_TIM3_IS_CLK_DISABLED\r\n#define __TIM4_IS_CLK_ENABLED    __HAL_RCC_TIM4_IS_CLK_ENABLED\r\n#define __TIM4_IS_CLK_DISABLED   __HAL_RCC_TIM4_IS_CLK_DISABLED\r\n#define __TIM5_IS_CLK_ENABLED    __HAL_RCC_TIM5_IS_CLK_ENABLED\r\n#define __TIM5_IS_CLK_DISABLED   __HAL_RCC_TIM5_IS_CLK_DISABLED\r\n#define __TIM6_IS_CLK_ENABLED    __HAL_RCC_TIM6_IS_CLK_ENABLED\r\n#define __TIM6_IS_CLK_DISABLED   __HAL_RCC_TIM6_IS_CLK_DISABLED\r\n#define __TIM7_IS_CLK_ENABLED    __HAL_RCC_TIM7_IS_CLK_ENABLED\r\n#define __TIM7_IS_CLK_DISABLED   __HAL_RCC_TIM7_IS_CLK_DISABLED\r\n#define __TIM8_IS_CLK_ENABLED    __HAL_RCC_TIM8_IS_CLK_ENABLED\r\n#define __TIM8_IS_CLK_DISABLED   __HAL_RCC_TIM8_IS_CLK_DISABLED\r\n#define __TIM12_IS_CLK_ENABLED   __HAL_RCC_TIM12_IS_CLK_ENABLED\r\n#define __TIM12_IS_CLK_DISABLED  __HAL_RCC_TIM12_IS_CLK_DISABLED\r\n#define __TIM13_IS_CLK_ENABLED   __HAL_RCC_TIM13_IS_CLK_ENABLED\r\n#define __TIM13_IS_CLK_DISABLED  __HAL_RCC_TIM13_IS_CLK_DISABLED\r\n#define __TIM14_IS_CLK_ENABLED   __HAL_RCC_TIM14_IS_CLK_ENABLED\r\n#define __TIM14_IS_CLK_DISABLED  __HAL_RCC_TIM14_IS_CLK_DISABLED\r\n#define __TIM15_IS_CLK_ENABLED   __HAL_RCC_TIM15_IS_CLK_ENABLED\r\n#define __TIM15_IS_CLK_DISABLED  __HAL_RCC_TIM15_IS_CLK_DISABLED\r\n#define __TIM16_IS_CLK_ENABLED   __HAL_RCC_TIM16_IS_CLK_ENABLED\r\n#define __TIM16_IS_CLK_DISABLED  __HAL_RCC_TIM16_IS_CLK_DISABLED\r\n#define __TIM17_IS_CLK_ENABLED   __HAL_RCC_TIM17_IS_CLK_ENABLED\r\n#define __TIM17_IS_CLK_DISABLED  __HAL_RCC_TIM17_IS_CLK_DISABLED\r\n#define __TIM18_IS_CLK_ENABLED   __HAL_RCC_TIM18_IS_CLK_ENABLED\r\n#define __TIM18_IS_CLK_DISABLED  __HAL_RCC_TIM18_IS_CLK_DISABLED\r\n#define __TIM19_IS_CLK_ENABLED   __HAL_RCC_TIM19_IS_CLK_ENABLED\r\n#define __TIM19_IS_CLK_DISABLED  __HAL_RCC_TIM19_IS_CLK_DISABLED\r\n#define __TIM20_IS_CLK_ENABLED   __HAL_RCC_TIM20_IS_CLK_ENABLED\r\n#define __TIM20_IS_CLK_DISABLED  __HAL_RCC_TIM20_IS_CLK_DISABLED\r\n#define __TSC_IS_CLK_ENABLED     __HAL_RCC_TSC_IS_CLK_ENABLED\r\n#define __TSC_IS_CLK_DISABLED    __HAL_RCC_TSC_IS_CLK_DISABLED\r\n#define __UART4_IS_CLK_ENABLED   __HAL_RCC_UART4_IS_CLK_ENABLED\r\n#define __UART4_IS_CLK_DISABLED  __HAL_RCC_UART4_IS_CLK_DISABLED\r\n#define __UART5_IS_CLK_ENABLED   __HAL_RCC_UART5_IS_CLK_ENABLED\r\n#define __UART5_IS_CLK_DISABLED  __HAL_RCC_UART5_IS_CLK_DISABLED\r\n#define __USART1_IS_CLK_ENABLED  __HAL_RCC_USART1_IS_CLK_ENABLED\r\n#define __USART1_IS_CLK_DISABLED __HAL_RCC_USART1_IS_CLK_DISABLED\r\n#define __USART2_IS_CLK_ENABLED  __HAL_RCC_USART2_IS_CLK_ENABLED\r\n#define __USART2_IS_CLK_DISABLED __HAL_RCC_USART2_IS_CLK_DISABLED\r\n#define __USART3_IS_CLK_ENABLED  __HAL_RCC_USART3_IS_CLK_ENABLED\r\n#define __USART3_IS_CLK_DISABLED __HAL_RCC_USART3_IS_CLK_DISABLED\r\n#define __USB_IS_CLK_ENABLED     __HAL_RCC_USB_IS_CLK_ENABLED\r\n#define __USB_IS_CLK_DISABLED    __HAL_RCC_USB_IS_CLK_DISABLED\r\n#define __WWDG_IS_CLK_ENABLED    __HAL_RCC_WWDG_IS_CLK_ENABLED\r\n#define __WWDG_IS_CLK_DISABLED   __HAL_RCC_WWDG_IS_CLK_DISABLED\r\n\r\n#if defined(STM32F4)\r\n#define __HAL_RCC_SDMMC1_FORCE_RESET       __HAL_RCC_SDIO_FORCE_RESET\r\n#define __HAL_RCC_SDMMC1_RELEASE_RESET     __HAL_RCC_SDIO_RELEASE_RESET\r\n#define __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE  __HAL_RCC_SDIO_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE __HAL_RCC_SDIO_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_SDMMC1_CLK_ENABLE        __HAL_RCC_SDIO_CLK_ENABLE\r\n#define __HAL_RCC_SDMMC1_CLK_DISABLE       __HAL_RCC_SDIO_CLK_DISABLE\r\n#define __HAL_RCC_SDMMC1_IS_CLK_ENABLED    __HAL_RCC_SDIO_IS_CLK_ENABLED\r\n#define __HAL_RCC_SDMMC1_IS_CLK_DISABLED   __HAL_RCC_SDIO_IS_CLK_DISABLED\r\n#define Sdmmc1ClockSelection               SdioClockSelection\r\n#define RCC_PERIPHCLK_SDMMC1               RCC_PERIPHCLK_SDIO\r\n#define RCC_SDMMC1CLKSOURCE_CLK48          RCC_SDIOCLKSOURCE_CK48\r\n#define RCC_SDMMC1CLKSOURCE_SYSCLK         RCC_SDIOCLKSOURCE_SYSCLK\r\n#define __HAL_RCC_SDMMC1_CONFIG            __HAL_RCC_SDIO_CONFIG\r\n#define __HAL_RCC_GET_SDMMC1_SOURCE        __HAL_RCC_GET_SDIO_SOURCE\r\n#endif\r\n\r\n#if defined(STM32F7) || defined(STM32L4)\r\n#define __HAL_RCC_SDIO_FORCE_RESET       __HAL_RCC_SDMMC1_FORCE_RESET\r\n#define __HAL_RCC_SDIO_RELEASE_RESET     __HAL_RCC_SDMMC1_RELEASE_RESET\r\n#define __HAL_RCC_SDIO_CLK_SLEEP_ENABLE  __HAL_RCC_SDMMC1_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_SDIO_CLK_SLEEP_DISABLE __HAL_RCC_SDMMC1_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_SDIO_CLK_ENABLE        __HAL_RCC_SDMMC1_CLK_ENABLE\r\n#define __HAL_RCC_SDIO_CLK_DISABLE       __HAL_RCC_SDMMC1_CLK_DISABLE\r\n#define __HAL_RCC_SDIO_IS_CLK_ENABLED    __HAL_RCC_SDMMC1_IS_CLK_ENABLED\r\n#define __HAL_RCC_SDIO_IS_CLK_DISABLED   __HAL_RCC_SDMMC1_IS_CLK_DISABLED\r\n#define SdioClockSelection               Sdmmc1ClockSelection\r\n#define RCC_PERIPHCLK_SDIO               RCC_PERIPHCLK_SDMMC1\r\n#define __HAL_RCC_SDIO_CONFIG            __HAL_RCC_SDMMC1_CONFIG\r\n#define __HAL_RCC_GET_SDIO_SOURCE        __HAL_RCC_GET_SDMMC1_SOURCE\r\n#endif\r\n\r\n#if defined(STM32H7)\r\n#define __HAL_RCC_USB_OTG_HS_CLK_ENABLE()             __HAL_RCC_USB1_OTG_HS_CLK_ENABLE()\r\n#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_ENABLE()        __HAL_RCC_USB1_OTG_HS_ULPI_CLK_ENABLE()\r\n#define __HAL_RCC_USB_OTG_HS_CLK_DISABLE()            __HAL_RCC_USB1_OTG_HS_CLK_DISABLE()\r\n#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_DISABLE()       __HAL_RCC_USB1_OTG_HS_ULPI_CLK_DISABLE()\r\n#define __HAL_RCC_USB_OTG_HS_FORCE_RESET()            __HAL_RCC_USB1_OTG_HS_FORCE_RESET()\r\n#define __HAL_RCC_USB_OTG_HS_RELEASE_RESET()          __HAL_RCC_USB1_OTG_HS_RELEASE_RESET()\r\n#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_ENABLE()       __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_ENABLE()\r\n#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_ENABLE()  __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_ENABLE()\r\n#define __HAL_RCC_USB_OTG_HS_CLK_SLEEP_DISABLE()      __HAL_RCC_USB1_OTG_HS_CLK_SLEEP_DISABLE()\r\n#define __HAL_RCC_USB_OTG_HS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB1_OTG_HS_ULPI_CLK_SLEEP_DISABLE()\r\n\r\n#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE()             __HAL_RCC_USB2_OTG_FS_CLK_ENABLE()\r\n#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_ENABLE()        __HAL_RCC_USB2_OTG_FS_ULPI_CLK_ENABLE()\r\n#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE()            __HAL_RCC_USB2_OTG_FS_CLK_DISABLE()\r\n#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_DISABLE()       __HAL_RCC_USB2_OTG_FS_ULPI_CLK_DISABLE()\r\n#define __HAL_RCC_USB_OTG_FS_FORCE_RESET()            __HAL_RCC_USB2_OTG_FS_FORCE_RESET()\r\n#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET()          __HAL_RCC_USB2_OTG_FS_RELEASE_RESET()\r\n#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_ENABLE()       __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_ENABLE()\r\n#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_ENABLE()  __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_ENABLE()\r\n#define __HAL_RCC_USB_OTG_FS_CLK_SLEEP_DISABLE()      __HAL_RCC_USB2_OTG_FS_CLK_SLEEP_DISABLE()\r\n#define __HAL_RCC_USB_OTG_FS_ULPI_CLK_SLEEP_DISABLE() __HAL_RCC_USB2_OTG_FS_ULPI_CLK_SLEEP_DISABLE()\r\n#endif\r\n\r\n#if defined(STM32F7)\r\n#define RCC_SDIOCLKSOURCE_CLK48  RCC_SDMMC1CLKSOURCE_CLK48\r\n#define RCC_SDIOCLKSOURCE_SYSCLK RCC_SDMMC1CLKSOURCE_SYSCLK\r\n#endif\r\n\r\n#define __HAL_RCC_I2SCLK        __HAL_RCC_I2S_CONFIG\r\n#define __HAL_RCC_I2SCLK_CONFIG __HAL_RCC_I2S_CONFIG\r\n\r\n#define __RCC_PLLSRC RCC_GET_PLL_OSCSOURCE\r\n\r\n#define IS_RCC_MSIRANGE      IS_RCC_MSI_CLOCK_RANGE\r\n#define IS_RCC_RTCCLK_SOURCE IS_RCC_RTCCLKSOURCE\r\n#define IS_RCC_SYSCLK_DIV    IS_RCC_HCLK\r\n#define IS_RCC_HCLK_DIV      IS_RCC_PCLK\r\n#define IS_RCC_PERIPHCLK     IS_RCC_PERIPHCLOCK\r\n\r\n#define RCC_IT_HSI14 RCC_IT_HSI14RDY\r\n\r\n#define RCC_IT_CSSLSE RCC_IT_LSECSS\r\n#define RCC_IT_CSSHSE RCC_IT_CSS\r\n\r\n#define RCC_PLLMUL_3  RCC_PLL_MUL3\r\n#define RCC_PLLMUL_4  RCC_PLL_MUL4\r\n#define RCC_PLLMUL_6  RCC_PLL_MUL6\r\n#define RCC_PLLMUL_8  RCC_PLL_MUL8\r\n#define RCC_PLLMUL_12 RCC_PLL_MUL12\r\n#define RCC_PLLMUL_16 RCC_PLL_MUL16\r\n#define RCC_PLLMUL_24 RCC_PLL_MUL24\r\n#define RCC_PLLMUL_32 RCC_PLL_MUL32\r\n#define RCC_PLLMUL_48 RCC_PLL_MUL48\r\n\r\n#define RCC_PLLDIV_2 RCC_PLL_DIV2\r\n#define RCC_PLLDIV_3 RCC_PLL_DIV3\r\n#define RCC_PLLDIV_4 RCC_PLL_DIV4\r\n\r\n#define IS_RCC_MCOSOURCE           IS_RCC_MCO1SOURCE\r\n#define __HAL_RCC_MCO_CONFIG       __HAL_RCC_MCO1_CONFIG\r\n#define RCC_MCO_NODIV              RCC_MCODIV_1\r\n#define RCC_MCO_DIV1               RCC_MCODIV_1\r\n#define RCC_MCO_DIV2               RCC_MCODIV_2\r\n#define RCC_MCO_DIV4               RCC_MCODIV_4\r\n#define RCC_MCO_DIV8               RCC_MCODIV_8\r\n#define RCC_MCO_DIV16              RCC_MCODIV_16\r\n#define RCC_MCO_DIV32              RCC_MCODIV_32\r\n#define RCC_MCO_DIV64              RCC_MCODIV_64\r\n#define RCC_MCO_DIV128             RCC_MCODIV_128\r\n#define RCC_MCOSOURCE_NONE         RCC_MCO1SOURCE_NOCLOCK\r\n#define RCC_MCOSOURCE_LSI          RCC_MCO1SOURCE_LSI\r\n#define RCC_MCOSOURCE_LSE          RCC_MCO1SOURCE_LSE\r\n#define RCC_MCOSOURCE_SYSCLK       RCC_MCO1SOURCE_SYSCLK\r\n#define RCC_MCOSOURCE_HSI          RCC_MCO1SOURCE_HSI\r\n#define RCC_MCOSOURCE_HSI14        RCC_MCO1SOURCE_HSI14\r\n#define RCC_MCOSOURCE_HSI48        RCC_MCO1SOURCE_HSI48\r\n#define RCC_MCOSOURCE_HSE          RCC_MCO1SOURCE_HSE\r\n#define RCC_MCOSOURCE_PLLCLK_DIV1  RCC_MCO1SOURCE_PLLCLK\r\n#define RCC_MCOSOURCE_PLLCLK_NODIV RCC_MCO1SOURCE_PLLCLK\r\n#define RCC_MCOSOURCE_PLLCLK_DIV2  RCC_MCO1SOURCE_PLLCLK_DIV2\r\n\r\n#define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK\r\n\r\n#define RCC_USBCLK_PLLSAI1      RCC_USBCLKSOURCE_PLLSAI1\r\n#define RCC_USBCLK_PLL          RCC_USBCLKSOURCE_PLL\r\n#define RCC_USBCLK_MSI          RCC_USBCLKSOURCE_MSI\r\n#define RCC_USBCLKSOURCE_PLLCLK RCC_USBCLKSOURCE_PLL\r\n#define RCC_USBPLLCLK_DIV1      RCC_USBCLKSOURCE_PLL\r\n#define RCC_USBPLLCLK_DIV1_5    RCC_USBCLKSOURCE_PLL_DIV1_5\r\n#define RCC_USBPLLCLK_DIV2      RCC_USBCLKSOURCE_PLL_DIV2\r\n#define RCC_USBPLLCLK_DIV3      RCC_USBCLKSOURCE_PLL_DIV3\r\n\r\n#define HSION_BitNumber             RCC_HSION_BIT_NUMBER\r\n#define HSION_BITNUMBER             RCC_HSION_BIT_NUMBER\r\n#define HSEON_BitNumber             RCC_HSEON_BIT_NUMBER\r\n#define HSEON_BITNUMBER             RCC_HSEON_BIT_NUMBER\r\n#define MSION_BITNUMBER             RCC_MSION_BIT_NUMBER\r\n#define CSSON_BitNumber             RCC_CSSON_BIT_NUMBER\r\n#define CSSON_BITNUMBER             RCC_CSSON_BIT_NUMBER\r\n#define PLLON_BitNumber             RCC_PLLON_BIT_NUMBER\r\n#define PLLON_BITNUMBER             RCC_PLLON_BIT_NUMBER\r\n#define PLLI2SON_BitNumber          RCC_PLLI2SON_BIT_NUMBER\r\n#define I2SSRC_BitNumber            RCC_I2SSRC_BIT_NUMBER\r\n#define RTCEN_BitNumber             RCC_RTCEN_BIT_NUMBER\r\n#define RTCEN_BITNUMBER             RCC_RTCEN_BIT_NUMBER\r\n#define BDRST_BitNumber             RCC_BDRST_BIT_NUMBER\r\n#define BDRST_BITNUMBER             RCC_BDRST_BIT_NUMBER\r\n#define RTCRST_BITNUMBER            RCC_RTCRST_BIT_NUMBER\r\n#define LSION_BitNumber             RCC_LSION_BIT_NUMBER\r\n#define LSION_BITNUMBER             RCC_LSION_BIT_NUMBER\r\n#define LSEON_BitNumber             RCC_LSEON_BIT_NUMBER\r\n#define LSEON_BITNUMBER             RCC_LSEON_BIT_NUMBER\r\n#define LSEBYP_BITNUMBER            RCC_LSEBYP_BIT_NUMBER\r\n#define PLLSAION_BitNumber          RCC_PLLSAION_BIT_NUMBER\r\n#define TIMPRE_BitNumber            RCC_TIMPRE_BIT_NUMBER\r\n#define RMVF_BitNumber              RCC_RMVF_BIT_NUMBER\r\n#define RMVF_BITNUMBER              RCC_RMVF_BIT_NUMBER\r\n#define RCC_CR2_HSI14TRIM_BitNumber RCC_HSI14TRIM_BIT_NUMBER\r\n#define CR_BYTE2_ADDRESS            RCC_CR_BYTE2_ADDRESS\r\n#define CIR_BYTE1_ADDRESS           RCC_CIR_BYTE1_ADDRESS\r\n#define CIR_BYTE2_ADDRESS           RCC_CIR_BYTE2_ADDRESS\r\n#define BDCR_BYTE0_ADDRESS          RCC_BDCR_BYTE0_ADDRESS\r\n#define DBP_TIMEOUT_VALUE           RCC_DBP_TIMEOUT_VALUE\r\n#define LSE_TIMEOUT_VALUE           RCC_LSE_TIMEOUT_VALUE\r\n\r\n#define CR_HSION_BB       RCC_CR_HSION_BB\r\n#define CR_CSSON_BB       RCC_CR_CSSON_BB\r\n#define CR_PLLON_BB       RCC_CR_PLLON_BB\r\n#define CR_PLLI2SON_BB    RCC_CR_PLLI2SON_BB\r\n#define CR_MSION_BB       RCC_CR_MSION_BB\r\n#define CSR_LSION_BB      RCC_CSR_LSION_BB\r\n#define CSR_LSEON_BB      RCC_CSR_LSEON_BB\r\n#define CSR_LSEBYP_BB     RCC_CSR_LSEBYP_BB\r\n#define CSR_RTCEN_BB      RCC_CSR_RTCEN_BB\r\n#define CSR_RTCRST_BB     RCC_CSR_RTCRST_BB\r\n#define CFGR_I2SSRC_BB    RCC_CFGR_I2SSRC_BB\r\n#define BDCR_RTCEN_BB     RCC_BDCR_RTCEN_BB\r\n#define BDCR_BDRST_BB     RCC_BDCR_BDRST_BB\r\n#define CR_HSEON_BB       RCC_CR_HSEON_BB\r\n#define CSR_RMVF_BB       RCC_CSR_RMVF_BB\r\n#define CR_PLLSAION_BB    RCC_CR_PLLSAION_BB\r\n#define DCKCFGR_TIMPRE_BB RCC_DCKCFGR_TIMPRE_BB\r\n\r\n#define __HAL_RCC_CRS_ENABLE_FREQ_ERROR_COUNTER  __HAL_RCC_CRS_FREQ_ERROR_COUNTER_ENABLE\r\n#define __HAL_RCC_CRS_DISABLE_FREQ_ERROR_COUNTER __HAL_RCC_CRS_FREQ_ERROR_COUNTER_DISABLE\r\n#define __HAL_RCC_CRS_ENABLE_AUTOMATIC_CALIB     __HAL_RCC_CRS_AUTOMATIC_CALIB_ENABLE\r\n#define __HAL_RCC_CRS_DISABLE_AUTOMATIC_CALIB    __HAL_RCC_CRS_AUTOMATIC_CALIB_DISABLE\r\n#define __HAL_RCC_CRS_CALCULATE_RELOADVALUE      __HAL_RCC_CRS_RELOADVALUE_CALCULATE\r\n\r\n#define __HAL_RCC_GET_IT_SOURCE __HAL_RCC_GET_IT\r\n\r\n#define RCC_CRS_SYNCWARM RCC_CRS_SYNCWARN\r\n#define RCC_CRS_TRIMOV   RCC_CRS_TRIMOVF\r\n\r\n#define RCC_PERIPHCLK_CK48        RCC_PERIPHCLK_CLK48\r\n#define RCC_CK48CLKSOURCE_PLLQ    RCC_CLK48CLKSOURCE_PLLQ\r\n#define RCC_CK48CLKSOURCE_PLLSAIP RCC_CLK48CLKSOURCE_PLLSAIP\r\n#define RCC_CK48CLKSOURCE_PLLI2SQ RCC_CLK48CLKSOURCE_PLLI2SQ\r\n#define IS_RCC_CK48CLKSOURCE      IS_RCC_CLK48CLKSOURCE\r\n#define RCC_SDIOCLKSOURCE_CK48    RCC_SDIOCLKSOURCE_CLK48\r\n\r\n#define __HAL_RCC_DFSDM_CLK_ENABLE            __HAL_RCC_DFSDM1_CLK_ENABLE\r\n#define __HAL_RCC_DFSDM_CLK_DISABLE           __HAL_RCC_DFSDM1_CLK_DISABLE\r\n#define __HAL_RCC_DFSDM_IS_CLK_ENABLED        __HAL_RCC_DFSDM1_IS_CLK_ENABLED\r\n#define __HAL_RCC_DFSDM_IS_CLK_DISABLED       __HAL_RCC_DFSDM1_IS_CLK_DISABLED\r\n#define __HAL_RCC_DFSDM_FORCE_RESET           __HAL_RCC_DFSDM1_FORCE_RESET\r\n#define __HAL_RCC_DFSDM_RELEASE_RESET         __HAL_RCC_DFSDM1_RELEASE_RESET\r\n#define __HAL_RCC_DFSDM_CLK_SLEEP_ENABLE      __HAL_RCC_DFSDM1_CLK_SLEEP_ENABLE\r\n#define __HAL_RCC_DFSDM_CLK_SLEEP_DISABLE     __HAL_RCC_DFSDM1_CLK_SLEEP_DISABLE\r\n#define __HAL_RCC_DFSDM_IS_CLK_SLEEP_ENABLED  __HAL_RCC_DFSDM1_IS_CLK_SLEEP_ENABLED\r\n#define __HAL_RCC_DFSDM_IS_CLK_SLEEP_DISABLED __HAL_RCC_DFSDM1_IS_CLK_SLEEP_DISABLED\r\n#define DfsdmClockSelection                   Dfsdm1ClockSelection\r\n#define RCC_PERIPHCLK_DFSDM                   RCC_PERIPHCLK_DFSDM1\r\n#define RCC_DFSDMCLKSOURCE_PCLK               RCC_DFSDM1CLKSOURCE_PCLK2\r\n#define RCC_DFSDMCLKSOURCE_SYSCLK             RCC_DFSDM1CLKSOURCE_SYSCLK\r\n#define __HAL_RCC_DFSDM_CONFIG                __HAL_RCC_DFSDM1_CONFIG\r\n#define __HAL_RCC_GET_DFSDM_SOURCE            __HAL_RCC_GET_DFSDM1_SOURCE\r\n#define RCC_DFSDM1CLKSOURCE_PCLK              RCC_DFSDM1CLKSOURCE_PCLK2\r\n#define RCC_SWPMI1CLKSOURCE_PCLK              RCC_SWPMI1CLKSOURCE_PCLK1\r\n#define RCC_LPTIM1CLKSOURCE_PCLK              RCC_LPTIM1CLKSOURCE_PCLK1\r\n#define RCC_LPTIM2CLKSOURCE_PCLK              RCC_LPTIM2CLKSOURCE_PCLK1\r\n\r\n#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM1AUDIOCLKSOURCE_I2S1\r\n#define RCC_DFSDM1AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM1AUDIOCLKSOURCE_I2S2\r\n#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB1 RCC_DFSDM2AUDIOCLKSOURCE_I2S1\r\n#define RCC_DFSDM2AUDIOCLKSOURCE_I2SAPB2 RCC_DFSDM2AUDIOCLKSOURCE_I2S2\r\n#define RCC_DFSDM1CLKSOURCE_APB2         RCC_DFSDM1CLKSOURCE_PCLK2\r\n#define RCC_DFSDM2CLKSOURCE_APB2         RCC_DFSDM2CLKSOURCE_PCLK2\r\n#define RCC_FMPI2C1CLKSOURCE_APB         RCC_FMPI2C1CLKSOURCE_PCLK1\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_RNG_Aliased_Macros HAL RNG Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define HAL_RNG_ReadyCallback(__HANDLE__) HAL_RNG_ReadyDataCallback((__HANDLE__), uint32_t random32bit)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG\r\n#define __HAL_RTC_DISABLE_IT __HAL_RTC_EXTI_DISABLE_IT\r\n#define __HAL_RTC_ENABLE_IT  __HAL_RTC_EXTI_ENABLE_IT\r\n\r\n#if defined(STM32F1)\r\n#define __HAL_RTC_EXTI_CLEAR_FLAG(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_CLEAR_FLAG()\r\n\r\n#define __HAL_RTC_EXTI_ENABLE_IT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_ENABLE_IT()\r\n\r\n#define __HAL_RTC_EXTI_DISABLE_IT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_DISABLE_IT()\r\n\r\n#define __HAL_RTC_EXTI_GET_FLAG(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_GET_FLAG()\r\n\r\n#define __HAL_RTC_EXTI_GENERATE_SWIT(RTC_EXTI_LINE_ALARM_EVENT) __HAL_RTC_ALARM_EXTI_GENERATE_SWIT()\r\n#else\r\n#define __HAL_RTC_EXTI_CLEAR_FLAG(__EXTI_LINE__)                                      \\\r\n  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_CLEAR_FLAG() \\\r\n                                                  : (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_CLEAR_FLAG() : __HAL_RTC_TAMPER_TIMESTAMP_EXTI_CLEAR_FLAG()))\r\n#define __HAL_RTC_EXTI_ENABLE_IT(__EXTI_LINE__)                                      \\\r\n  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_ENABLE_IT() \\\r\n                                                  : (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_ENABLE_IT() : __HAL_RTC_TAMPER_TIMESTAMP_EXTI_ENABLE_IT()))\r\n#define __HAL_RTC_EXTI_DISABLE_IT(__EXTI_LINE__)                                      \\\r\n  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_DISABLE_IT() \\\r\n                                                  : (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_DISABLE_IT() : __HAL_RTC_TAMPER_TIMESTAMP_EXTI_DISABLE_IT()))\r\n#define __HAL_RTC_EXTI_GET_FLAG(__EXTI_LINE__)                                      \\\r\n  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT) ? __HAL_RTC_ALARM_EXTI_GET_FLAG() \\\r\n                                                  : (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_GET_FLAG() : __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GET_FLAG()))\r\n#define __HAL_RTC_EXTI_GENERATE_SWIT(__EXTI_LINE__) \\\r\n  (((__EXTI_LINE__) == RTC_EXTI_LINE_ALARM_EVENT)   \\\r\n       ? __HAL_RTC_ALARM_EXTI_GENERATE_SWIT()       \\\r\n       : (((__EXTI_LINE__) == RTC_EXTI_LINE_WAKEUPTIMER_EVENT) ? __HAL_RTC_WAKEUPTIMER_EXTI_GENERATE_SWIT() : __HAL_RTC_TAMPER_TIMESTAMP_EXTI_GENERATE_SWIT()))\r\n#endif /* STM32F1 */\r\n\r\n#define IS_ALARM                              IS_RTC_ALARM\r\n#define IS_ALARM_MASK                         IS_RTC_ALARM_MASK\r\n#define IS_TAMPER                             IS_RTC_TAMPER\r\n#define IS_TAMPER_ERASE_MODE                  IS_RTC_TAMPER_ERASE_MODE\r\n#define IS_TAMPER_FILTER                      IS_RTC_TAMPER_FILTER\r\n#define IS_TAMPER_INTERRUPT                   IS_RTC_TAMPER_INTERRUPT\r\n#define IS_TAMPER_MASKFLAG_STATE              IS_RTC_TAMPER_MASKFLAG_STATE\r\n#define IS_TAMPER_PRECHARGE_DURATION          IS_RTC_TAMPER_PRECHARGE_DURATION\r\n#define IS_TAMPER_PULLUP_STATE                IS_RTC_TAMPER_PULLUP_STATE\r\n#define IS_TAMPER_SAMPLING_FREQ               IS_RTC_TAMPER_SAMPLING_FREQ\r\n#define IS_TAMPER_TIMESTAMPONTAMPER_DETECTION IS_RTC_TAMPER_TIMESTAMPONTAMPER_DETECTION\r\n#define IS_TAMPER_TRIGGER                     IS_RTC_TAMPER_TRIGGER\r\n#define IS_WAKEUP_CLOCK                       IS_RTC_WAKEUP_CLOCK\r\n#define IS_WAKEUP_COUNTER                     IS_RTC_WAKEUP_COUNTER\r\n\r\n#define __RTC_WRITEPROTECTION_ENABLE  __HAL_RTC_WRITEPROTECTION_ENABLE\r\n#define __RTC_WRITEPROTECTION_DISABLE __HAL_RTC_WRITEPROTECTION_DISABLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SD_Aliased_Macros HAL SD Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define SD_OCR_CID_CSD_OVERWRIETE SD_OCR_CID_CSD_OVERWRITE\r\n#define SD_CMD_SD_APP_STAUS       SD_CMD_SD_APP_STATUS\r\n\r\n#if defined(STM32F4) || defined(STM32F2)\r\n#define SD_SDMMC_DISABLED          SD_SDIO_DISABLED\r\n#define SD_SDMMC_FUNCTION_BUSY     SD_SDIO_FUNCTION_BUSY\r\n#define SD_SDMMC_FUNCTION_FAILED   SD_SDIO_FUNCTION_FAILED\r\n#define SD_SDMMC_UNKNOWN_FUNCTION  SD_SDIO_UNKNOWN_FUNCTION\r\n#define SD_CMD_SDMMC_SEN_OP_COND   SD_CMD_SDIO_SEN_OP_COND\r\n#define SD_CMD_SDMMC_RW_DIRECT     SD_CMD_SDIO_RW_DIRECT\r\n#define SD_CMD_SDMMC_RW_EXTENDED   SD_CMD_SDIO_RW_EXTENDED\r\n#define __HAL_SD_SDMMC_ENABLE      __HAL_SD_SDIO_ENABLE\r\n#define __HAL_SD_SDMMC_DISABLE     __HAL_SD_SDIO_DISABLE\r\n#define __HAL_SD_SDMMC_DMA_ENABLE  __HAL_SD_SDIO_DMA_ENABLE\r\n#define __HAL_SD_SDMMC_DMA_DISABLE __HAL_SD_SDIO_DMA_DISABL\r\n#define __HAL_SD_SDMMC_ENABLE_IT   __HAL_SD_SDIO_ENABLE_IT\r\n#define __HAL_SD_SDMMC_DISABLE_IT  __HAL_SD_SDIO_DISABLE_IT\r\n#define __HAL_SD_SDMMC_GET_FLAG    __HAL_SD_SDIO_GET_FLAG\r\n#define __HAL_SD_SDMMC_CLEAR_FLAG  __HAL_SD_SDIO_CLEAR_FLAG\r\n#define __HAL_SD_SDMMC_GET_IT      __HAL_SD_SDIO_GET_IT\r\n#define __HAL_SD_SDMMC_CLEAR_IT    __HAL_SD_SDIO_CLEAR_IT\r\n#define SDMMC_STATIC_FLAGS         SDIO_STATIC_FLAGS\r\n#define SDMMC_CMD0TIMEOUT          SDIO_CMD0TIMEOUT\r\n#define SD_SDMMC_SEND_IF_COND      SD_SDIO_SEND_IF_COND\r\n/* alias CMSIS */\r\n#define SDMMC1_IRQn       SDIO_IRQn\r\n#define SDMMC1_IRQHandler SDIO_IRQHandler\r\n#endif\r\n\r\n#if defined(STM32F7) || defined(STM32L4)\r\n#define SD_SDIO_DISABLED         SD_SDMMC_DISABLED\r\n#define SD_SDIO_FUNCTION_BUSY    SD_SDMMC_FUNCTION_BUSY\r\n#define SD_SDIO_FUNCTION_FAILED  SD_SDMMC_FUNCTION_FAILED\r\n#define SD_SDIO_UNKNOWN_FUNCTION SD_SDMMC_UNKNOWN_FUNCTION\r\n#define SD_CMD_SDIO_SEN_OP_COND  SD_CMD_SDMMC_SEN_OP_COND\r\n#define SD_CMD_SDIO_RW_DIRECT    SD_CMD_SDMMC_RW_DIRECT\r\n#define SD_CMD_SDIO_RW_EXTENDED  SD_CMD_SDMMC_RW_EXTENDED\r\n#define __HAL_SD_SDIO_ENABLE     __HAL_SD_SDMMC_ENABLE\r\n#define __HAL_SD_SDIO_DISABLE    __HAL_SD_SDMMC_DISABLE\r\n#define __HAL_SD_SDIO_DMA_ENABLE __HAL_SD_SDMMC_DMA_ENABLE\r\n#define __HAL_SD_SDIO_DMA_DISABL __HAL_SD_SDMMC_DMA_DISABLE\r\n#define __HAL_SD_SDIO_ENABLE_IT  __HAL_SD_SDMMC_ENABLE_IT\r\n#define __HAL_SD_SDIO_DISABLE_IT __HAL_SD_SDMMC_DISABLE_IT\r\n#define __HAL_SD_SDIO_GET_FLAG   __HAL_SD_SDMMC_GET_FLAG\r\n#define __HAL_SD_SDIO_CLEAR_FLAG __HAL_SD_SDMMC_CLEAR_FLAG\r\n#define __HAL_SD_SDIO_GET_IT     __HAL_SD_SDMMC_GET_IT\r\n#define __HAL_SD_SDIO_CLEAR_IT   __HAL_SD_SDMMC_CLEAR_IT\r\n#define SDIO_STATIC_FLAGS        SDMMC_STATIC_FLAGS\r\n#define SDIO_CMD0TIMEOUT         SDMMC_CMD0TIMEOUT\r\n#define SD_SDIO_SEND_IF_COND     SD_SDMMC_SEND_IF_COND\r\n/* alias CMSIS for compatibilities */\r\n#define SDIO_IRQn       SDMMC1_IRQn\r\n#define SDIO_IRQHandler SDMMC1_IRQHandler\r\n#endif\r\n\r\n#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2)\r\n#define HAL_SD_CardCIDTypedef    HAL_SD_CardCIDTypeDef\r\n#define HAL_SD_CardCSDTypedef    HAL_SD_CardCSDTypeDef\r\n#define HAL_SD_CardStatusTypedef HAL_SD_CardStatusTypeDef\r\n#define HAL_SD_CardStateTypedef  HAL_SD_CardStateTypeDef\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SMARTCARD_Aliased_Macros HAL SMARTCARD Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __SMARTCARD_ENABLE_IT           __HAL_SMARTCARD_ENABLE_IT\r\n#define __SMARTCARD_DISABLE_IT          __HAL_SMARTCARD_DISABLE_IT\r\n#define __SMARTCARD_ENABLE              __HAL_SMARTCARD_ENABLE\r\n#define __SMARTCARD_DISABLE             __HAL_SMARTCARD_DISABLE\r\n#define __SMARTCARD_DMA_REQUEST_ENABLE  __HAL_SMARTCARD_DMA_REQUEST_ENABLE\r\n#define __SMARTCARD_DMA_REQUEST_DISABLE __HAL_SMARTCARD_DMA_REQUEST_DISABLE\r\n\r\n#define __HAL_SMARTCARD_GETCLOCKSOURCE SMARTCARD_GETCLOCKSOURCE\r\n#define __SMARTCARD_GETCLOCKSOURCE     SMARTCARD_GETCLOCKSOURCE\r\n\r\n#define IS_SMARTCARD_ONEBIT_SAMPLING IS_SMARTCARD_ONE_BIT_SAMPLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SMBUS_Aliased_Macros HAL SMBUS Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_SMBUS_RESET_CR1         SMBUS_RESET_CR1\r\n#define __HAL_SMBUS_RESET_CR2         SMBUS_RESET_CR2\r\n#define __HAL_SMBUS_GENERATE_START    SMBUS_GENERATE_START\r\n#define __HAL_SMBUS_GET_ADDR_MATCH    SMBUS_GET_ADDR_MATCH\r\n#define __HAL_SMBUS_GET_DIR           SMBUS_GET_DIR\r\n#define __HAL_SMBUS_GET_STOP_MODE     SMBUS_GET_STOP_MODE\r\n#define __HAL_SMBUS_GET_PEC_MODE      SMBUS_GET_PEC_MODE\r\n#define __HAL_SMBUS_GET_ALERT_ENABLED SMBUS_GET_ALERT_ENABLED\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SPI_Aliased_Macros HAL SPI Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_SPI_1LINE_TX  SPI_1LINE_TX\r\n#define __HAL_SPI_1LINE_RX  SPI_1LINE_RX\r\n#define __HAL_SPI_RESET_CRC SPI_RESET_CRC\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_UART_Aliased_Macros HAL UART Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_UART_GETCLOCKSOURCE   UART_GETCLOCKSOURCE\r\n#define __HAL_UART_MASK_COMPUTATION UART_MASK_COMPUTATION\r\n#define __UART_GETCLOCKSOURCE       UART_GETCLOCKSOURCE\r\n#define __UART_MASK_COMPUTATION     UART_MASK_COMPUTATION\r\n\r\n#define IS_UART_WAKEUPMETHODE IS_UART_WAKEUPMETHOD\r\n\r\n#define IS_UART_ONEBIT_SAMPLE   IS_UART_ONE_BIT_SAMPLE\r\n#define IS_UART_ONEBIT_SAMPLING IS_UART_ONE_BIT_SAMPLE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_USART_Aliased_Macros HAL USART Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __USART_ENABLE_IT  __HAL_USART_ENABLE_IT\r\n#define __USART_DISABLE_IT __HAL_USART_DISABLE_IT\r\n#define __USART_ENABLE     __HAL_USART_ENABLE\r\n#define __USART_DISABLE    __HAL_USART_DISABLE\r\n\r\n#define __HAL_USART_GETCLOCKSOURCE USART_GETCLOCKSOURCE\r\n#define __USART_GETCLOCKSOURCE     USART_GETCLOCKSOURCE\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_USB_Aliased_Macros HAL USB Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define USB_EXTI_LINE_WAKEUP USB_WAKEUP_EXTI_LINE\r\n\r\n#define USB_FS_EXTI_TRIGGER_RISING_EDGE  USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE\r\n#define USB_FS_EXTI_TRIGGER_FALLING_EDGE USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE\r\n#define USB_FS_EXTI_TRIGGER_BOTH_EDGE    USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE\r\n#define USB_FS_EXTI_LINE_WAKEUP          USB_OTG_FS_WAKEUP_EXTI_LINE\r\n\r\n#define USB_HS_EXTI_TRIGGER_RISING_EDGE  USB_OTG_HS_WAKEUP_EXTI_RISING_EDGE\r\n#define USB_HS_EXTI_TRIGGER_FALLING_EDGE USB_OTG_HS_WAKEUP_EXTI_FALLING_EDGE\r\n#define USB_HS_EXTI_TRIGGER_BOTH_EDGE    USB_OTG_HS_WAKEUP_EXTI_RISING_FALLING_EDGE\r\n#define USB_HS_EXTI_LINE_WAKEUP          USB_OTG_HS_WAKEUP_EXTI_LINE\r\n\r\n#define __HAL_USB_EXTI_ENABLE_IT                 __HAL_USB_WAKEUP_EXTI_ENABLE_IT\r\n#define __HAL_USB_EXTI_DISABLE_IT                __HAL_USB_WAKEUP_EXTI_DISABLE_IT\r\n#define __HAL_USB_EXTI_GET_FLAG                  __HAL_USB_WAKEUP_EXTI_GET_FLAG\r\n#define __HAL_USB_EXTI_CLEAR_FLAG                __HAL_USB_WAKEUP_EXTI_CLEAR_FLAG\r\n#define __HAL_USB_EXTI_SET_RISING_EDGE_TRIGGER   __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_USB_EXTI_SET_FALLING_EDGE_TRIGGER  __HAL_USB_WAKEUP_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_USB_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE\r\n\r\n#define __HAL_USB_FS_EXTI_ENABLE_IT                 __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT\r\n#define __HAL_USB_FS_EXTI_DISABLE_IT                __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT\r\n#define __HAL_USB_FS_EXTI_GET_FLAG                  __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG\r\n#define __HAL_USB_FS_EXTI_CLEAR_FLAG                __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG\r\n#define __HAL_USB_FS_EXTI_SET_RISING_EGDE_TRIGGER   __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_USB_FS_EXTI_SET_FALLING_EGDE_TRIGGER  __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_USB_FS_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE\r\n#define __HAL_USB_FS_EXTI_GENERATE_SWIT             __HAL_USB_OTG_FS_WAKEUP_EXTI_GENERATE_SWIT\r\n\r\n#define __HAL_USB_HS_EXTI_ENABLE_IT                 __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_IT\r\n#define __HAL_USB_HS_EXTI_DISABLE_IT                __HAL_USB_OTG_HS_WAKEUP_EXTI_DISABLE_IT\r\n#define __HAL_USB_HS_EXTI_GET_FLAG                  __HAL_USB_OTG_HS_WAKEUP_EXTI_GET_FLAG\r\n#define __HAL_USB_HS_EXTI_CLEAR_FLAG                __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG\r\n#define __HAL_USB_HS_EXTI_SET_RISING_EGDE_TRIGGER   __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE\r\n#define __HAL_USB_HS_EXTI_SET_FALLING_EGDE_TRIGGER  __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_FALLING_EDGE\r\n#define __HAL_USB_HS_EXTI_SET_FALLINGRISING_TRIGGER __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_FALLING_EDGE\r\n#define __HAL_USB_HS_EXTI_GENERATE_SWIT             __HAL_USB_OTG_HS_WAKEUP_EXTI_GENERATE_SWIT\r\n\r\n#define HAL_PCD_ActiveRemoteWakeup   HAL_PCD_ActivateRemoteWakeup\r\n#define HAL_PCD_DeActiveRemoteWakeup HAL_PCD_DeActivateRemoteWakeup\r\n\r\n#define HAL_PCD_SetTxFiFo HAL_PCDEx_SetTxFiFo\r\n#define HAL_PCD_SetRxFiFo HAL_PCDEx_SetRxFiFo\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_TIM_Aliased_Macros HAL TIM Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_TIM_SetICPrescalerValue   TIM_SET_ICPRESCALERVALUE\r\n#define __HAL_TIM_ResetICPrescalerValue TIM_RESET_ICPRESCALERVALUE\r\n\r\n#define TIM_GET_ITSTATUS __HAL_TIM_GET_IT_SOURCE\r\n#define TIM_GET_CLEAR_IT __HAL_TIM_CLEAR_IT\r\n\r\n#define __HAL_TIM_GET_ITSTATUS __HAL_TIM_GET_IT_SOURCE\r\n\r\n#define __HAL_TIM_DIRECTION_STATUS __HAL_TIM_IS_TIM_COUNTING_DOWN\r\n#define __HAL_TIM_PRESCALER        __HAL_TIM_SET_PRESCALER\r\n#define __HAL_TIM_SetCounter       __HAL_TIM_SET_COUNTER\r\n#define __HAL_TIM_GetCounter       __HAL_TIM_GET_COUNTER\r\n#define __HAL_TIM_SetAutoreload    __HAL_TIM_SET_AUTORELOAD\r\n#define __HAL_TIM_GetAutoreload    __HAL_TIM_GET_AUTORELOAD\r\n#define __HAL_TIM_SetClockDivision __HAL_TIM_SET_CLOCKDIVISION\r\n#define __HAL_TIM_GetClockDivision __HAL_TIM_GET_CLOCKDIVISION\r\n#define __HAL_TIM_SetICPrescaler   __HAL_TIM_SET_ICPRESCALER\r\n#define __HAL_TIM_GetICPrescaler   __HAL_TIM_GET_ICPRESCALER\r\n#define __HAL_TIM_SetCompare       __HAL_TIM_SET_COMPARE\r\n#define __HAL_TIM_GetCompare       __HAL_TIM_GET_COMPARE\r\n\r\n#define TIM_BREAKINPUTSOURCE_DFSDM TIM_BREAKINPUTSOURCE_DFSDM1\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_ETH_Aliased_Macros HAL ETH Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n#define __HAL_ETH_EXTI_ENABLE_IT                 __HAL_ETH_WAKEUP_EXTI_ENABLE_IT\r\n#define __HAL_ETH_EXTI_DISABLE_IT                __HAL_ETH_WAKEUP_EXTI_DISABLE_IT\r\n#define __HAL_ETH_EXTI_GET_FLAG                  __HAL_ETH_WAKEUP_EXTI_GET_FLAG\r\n#define __HAL_ETH_EXTI_CLEAR_FLAG                __HAL_ETH_WAKEUP_EXTI_CLEAR_FLAG\r\n#define __HAL_ETH_EXTI_SET_RISING_EGDE_TRIGGER   __HAL_ETH_WAKEUP_EXTI_ENABLE_RISING_EDGE_TRIGGER\r\n#define __HAL_ETH_EXTI_SET_FALLING_EGDE_TRIGGER  __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLING_EDGE_TRIGGER\r\n#define __HAL_ETH_EXTI_SET_FALLINGRISING_TRIGGER __HAL_ETH_WAKEUP_EXTI_ENABLE_FALLINGRISING_TRIGGER\r\n\r\n#define ETH_PROMISCIOUSMODE_ENABLE  ETH_PROMISCUOUS_MODE_ENABLE\r\n#define ETH_PROMISCIOUSMODE_DISABLE ETH_PROMISCUOUS_MODE_DISABLE\r\n#define IS_ETH_PROMISCIOUS_MODE     IS_ETH_PROMISCUOUS_MODE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_LTDC_Aliased_Macros HAL LTDC Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define __HAL_LTDC_LAYER         LTDC_LAYER\r\n#define __HAL_LTDC_RELOAD_CONFIG __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_SAI_Aliased_Macros HAL SAI Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n#define SAI_OUTPUTDRIVE_DISABLED        SAI_OUTPUTDRIVE_DISABLE\r\n#define SAI_OUTPUTDRIVE_ENABLED         SAI_OUTPUTDRIVE_ENABLE\r\n#define SAI_MASTERDIVIDER_ENABLED       SAI_MASTERDIVIDER_ENABLE\r\n#define SAI_MASTERDIVIDER_DISABLED      SAI_MASTERDIVIDER_DISABLE\r\n#define SAI_STREOMODE                   SAI_STEREOMODE\r\n#define SAI_FIFOStatus_Empty            SAI_FIFOSTATUS_EMPTY\r\n#define SAI_FIFOStatus_Less1QuarterFull SAI_FIFOSTATUS_LESS1QUARTERFULL\r\n#define SAI_FIFOStatus_1QuarterFull     SAI_FIFOSTATUS_1QUARTERFULL\r\n#define SAI_FIFOStatus_HalfFull         SAI_FIFOSTATUS_HALFFULL\r\n#define SAI_FIFOStatus_3QuartersFull    SAI_FIFOSTATUS_3QUARTERFULL\r\n#define SAI_FIFOStatus_Full             SAI_FIFOSTATUS_FULL\r\n#define IS_SAI_BLOCK_MONO_STREO_MODE    IS_SAI_BLOCK_MONO_STEREO_MODE\r\n#define SAI_SYNCHRONOUS_EXT             SAI_SYNCHRONOUS_EXT_SAI1\r\n#define SAI_SYNCEXT_IN_ENABLE           SAI_SYNCEXT_OUTBLOCKA_ENABLE\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* ___STM32_HAL_LEGACY */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal.h\r\n * @author  MCD Application Team\r\n * @brief   This file contains all the functions prototypes for the HAL\r\n *          module driver.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_H\r\n#define __STM32F1xx_HAL_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_conf.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup HAL\r\n * @{\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_Exported_Constants HAL Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup HAL_TICK_FREQ Tick Frequency\r\n * @{\r\n */\r\ntypedef enum { HAL_TICK_FREQ_10HZ = 100U, HAL_TICK_FREQ_100HZ = 10U, HAL_TICK_FREQ_1KHZ = 1U, HAL_TICK_FREQ_DEFAULT = HAL_TICK_FREQ_1KHZ } HAL_TickFreqTypeDef;\r\n/**\r\n * @}\r\n */\r\n/* Exported types ------------------------------------------------------------*/\r\nextern uint32_t            uwTickPrio;\r\nextern HAL_TickFreqTypeDef uwTickFreq;\r\n\r\n/**\r\n * @}\r\n */\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup HAL_Exported_Macros HAL Exported Macros\r\n * @{\r\n */\r\n\r\n/** @defgroup DBGMCU_Freeze_Unfreeze Freeze Unfreeze Peripherals in Debug mode\r\n * @brief   Freeze/Unfreeze Peripherals in Debug mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @{\r\n */\r\n\r\n/* Peripherals on APB1 */\r\n/**\r\n * @brief  TIM2 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM2()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM2_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM2() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM2_STOP)\r\n\r\n/**\r\n * @brief  TIM3 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM3()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM3_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM3() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM3_STOP)\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM4_STOP)\r\n/**\r\n * @brief  TIM4 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM4()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM4_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM4() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM4_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM5_STOP)\r\n/**\r\n * @brief  TIM5 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM5()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM5_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM5() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM5_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM6_STOP)\r\n/**\r\n * @brief  TIM6 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM6()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM6_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM6() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM6_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM7_STOP)\r\n/**\r\n * @brief  TIM7 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM7()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM7_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM7() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM7_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM12_STOP)\r\n/**\r\n * @brief  TIM12 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM12()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM12_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM12() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM12_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM13_STOP)\r\n/**\r\n * @brief  TIM13 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM13()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM13_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM13() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM13_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM14_STOP)\r\n/**\r\n * @brief  TIM14 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM14()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM14_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM14() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM14_STOP)\r\n#endif\r\n\r\n/**\r\n * @brief  WWDG Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_WWDG()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_WWDG_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_WWDG() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_WWDG_STOP)\r\n\r\n/**\r\n * @brief  IWDG Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_IWDG()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_IWDG_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_IWDG() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_IWDG_STOP)\r\n\r\n/**\r\n * @brief  I2C1 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_I2C1_TIMEOUT()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT)\r\n#define __HAL_DBGMCU_UNFREEZE_I2C1_TIMEOUT() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C1_SMBUS_TIMEOUT)\r\n\r\n#if defined(DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT)\r\n/**\r\n * @brief  I2C2 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_I2C2_TIMEOUT()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT)\r\n#define __HAL_DBGMCU_UNFREEZE_I2C2_TIMEOUT() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_I2C2_SMBUS_TIMEOUT)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_CAN1_STOP)\r\n/**\r\n * @brief  CAN1 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_CAN1()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN1_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_CAN1() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN1_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_CAN2_STOP)\r\n/**\r\n * @brief  CAN2 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_CAN2()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN2_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_CAN2() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_CAN2_STOP)\r\n#endif\r\n\r\n/* Peripherals on APB2 */\r\n#if defined(DBGMCU_CR_DBG_TIM1_STOP)\r\n/**\r\n * @brief  TIM1 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM1()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM1_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM1() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM1_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM8_STOP)\r\n/**\r\n * @brief  TIM8 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM8()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM8_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM8() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM8_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM9_STOP)\r\n/**\r\n * @brief  TIM9 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM9()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM9_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM9() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM9_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM10_STOP)\r\n/**\r\n * @brief  TIM10 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM10()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM10_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM10() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM10_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM11_STOP)\r\n/**\r\n * @brief  TIM11 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM11()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM11_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM11() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM11_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM15_STOP)\r\n/**\r\n * @brief  TIM15 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM15()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM15_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM15() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM15_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM16_STOP)\r\n/**\r\n * @brief  TIM16 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM16()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM16_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM16() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM16_STOP)\r\n#endif\r\n\r\n#if defined(DBGMCU_CR_DBG_TIM17_STOP)\r\n/**\r\n * @brief  TIM17 Peripherals Debug mode\r\n */\r\n#define __HAL_DBGMCU_FREEZE_TIM17()   SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM17_STOP)\r\n#define __HAL_DBGMCU_UNFREEZE_TIM17() CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_TIM17_STOP)\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_Private_Macros HAL Private Macros\r\n * @{\r\n */\r\n#define IS_TICKFREQ(FREQ) (((FREQ) == HAL_TICK_FREQ_10HZ) || ((FREQ) == HAL_TICK_FREQ_100HZ) || ((FREQ) == HAL_TICK_FREQ_1KHZ))\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup HAL_Exported_Functions\r\n * @{\r\n */\r\n/** @addtogroup HAL_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* Initialization and de-initialization functions  ******************************/\r\nHAL_StatusTypeDef HAL_Init(void);\r\nHAL_StatusTypeDef HAL_DeInit(void);\r\nvoid              HAL_MspInit(void);\r\nvoid              HAL_MspDeInit(void);\r\nHAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup HAL_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* Peripheral Control functions  ************************************************/\r\nvoid                HAL_IncTick(void);\r\nvoid                HAL_Delay(uint32_t Delay);\r\nuint32_t            HAL_GetTick(void);\r\nuint32_t            HAL_GetTickPrio(void);\r\nHAL_StatusTypeDef   HAL_SetTickFreq(HAL_TickFreqTypeDef Freq);\r\nHAL_TickFreqTypeDef HAL_GetTickFreq(void);\r\nvoid                HAL_SuspendTick(void);\r\nvoid                HAL_ResumeTick(void);\r\nuint32_t            HAL_GetHalVersion(void);\r\nuint32_t            HAL_GetREVID(void);\r\nuint32_t            HAL_GetDEVID(void);\r\nuint32_t            HAL_GetUIDw0(void);\r\nuint32_t            HAL_GetUIDw1(void);\r\nuint32_t            HAL_GetUIDw2(void);\r\nvoid                HAL_DBGMCU_EnableDBGSleepMode(void);\r\nvoid                HAL_DBGMCU_DisableDBGSleepMode(void);\r\nvoid                HAL_DBGMCU_EnableDBGStopMode(void);\r\nvoid                HAL_DBGMCU_DisableDBGStopMode(void);\r\nvoid                HAL_DBGMCU_EnableDBGStandbyMode(void);\r\nvoid                HAL_DBGMCU_DisableDBGStandbyMode(void);\r\nvoid                HAL_GetUID(uint32_t *UID);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* Private types -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/** @defgroup HAL_Private_Variables HAL Private Variables\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n/* Private constants ---------------------------------------------------------*/\r\n/** @defgroup HAL_Private_Constants HAL Private Constants\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n/* Private macros ------------------------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_adc.h\r\n * @author  MCD Application Team\r\n * @brief   Header file containing functions prototypes of ADC HAL library.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_ADC_H\r\n#define __STM32F1xx_HAL_ADC_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup ADC\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup ADC_Exported_Types ADC Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Structure definition of ADC and regular group initialization\r\n * @note   Parameters of this structure are shared within 2 scopes:\r\n *          - Scope entire ADC (affects regular and injected groups): DataAlign, ScanConvMode.\r\n *          - Scope regular group: ContinuousConvMode, NbrOfConversion, DiscontinuousConvMode, NbrOfDiscConversion, ExternalTrigConvEdge, ExternalTrigConv.\r\n * @note   The setting of these parameters with function HAL_ADC_Init() is conditioned to ADC state.\r\n *         ADC can be either disabled or enabled without conversion on going on regular group.\r\n */\r\ntypedef struct {\r\n  uint32_t DataAlign;          /*!< Specifies ADC data alignment to right (MSB on register bit 11 and LSB on register bit 0) (default setting)\r\n                                    or to left (if regular group: MSB on register bit 15 and LSB on register bit 4, if injected group (MSB kept as signed value due to potential negative value after offset\r\n                                  application): MSB on register bit 14 and LSB on register bit 3).          This parameter can be a value of @ref ADC_Data_align */\r\n  uint32_t ScanConvMode;       /*!< Configures the sequencer of regular and injected groups.\r\n                                    This parameter can be associated to parameter 'DiscontinuousConvMode' to have main sequence subdivided in successive parts.\r\n                                    If disabled: Conversion is performed in single mode (one channel converted, the one defined in rank 1).\r\n                                                 Parameters 'NbrOfConversion' and 'InjectedNbrOfConversion' are discarded (equivalent to set to 1).\r\n                                    If enabled:  Conversions are performed in sequence mode (multiple ranks defined by 'NbrOfConversion'/'InjectedNbrOfConversion' and each channel rank).\r\n                                                 Scan direction is upward: from rank1 to rank 'n'.\r\n                                    This parameter can be a value of @ref ADC_Scan_mode\r\n                                    Note: For regular group, this parameter should be enabled in conversion either by polling (HAL_ADC_Start with Discontinuous mode and NbrOfDiscConversion=1)\r\n                                          or by DMA (HAL_ADC_Start_DMA), but not by interruption (HAL_ADC_Start_IT): in scan mode, interruption is triggered only on the\r\n                                          the last conversion of the sequence. All previous conversions would be overwritten by the last one.\r\n                                          Injected group used with scan mode has not this constraint: each rank has its own result register, no data is overwritten. */\r\n  uint32_t ContinuousConvMode; /*!< Specifies whether the conversion is performed in single mode (one conversion) or continuous mode for regular group,\r\n                                    after the selected trigger occurred (software start or external trigger).\r\n                                    This parameter can be set to ENABLE or DISABLE. */\r\n  uint32_t NbrOfConversion;    /*!< Specifies the number of ranks that will be converted within the regular group sequencer.\r\n                                    To use regular group sequencer and convert several ranks, parameter 'ScanConvMode' must be enabled.\r\n                                    This parameter must be a number between Min_Data = 1 and Max_Data = 16. */\r\n  uint32_t\r\n      DiscontinuousConvMode; /*!< Specifies whether the conversions sequence of regular group is performed in Complete-sequence/Discontinuous-sequence (main sequence subdivided in successive parts).\r\n                                  Discontinuous mode is used only if sequencer is enabled (parameter 'ScanConvMode'). If sequencer is disabled, this parameter is discarded.\r\n                                  Discontinuous mode can be enabled only if continuous mode is disabled. If continuous mode is enabled, this parameter setting is discarded.\r\n                                  This parameter can be set to ENABLE or DISABLE. */\r\n  uint32_t NbrOfDiscConversion; /*!< Specifies the number of discontinuous conversions in which the  main sequence of regular group (parameter NbrOfConversion) will be subdivided.\r\n                                     If parameter 'DiscontinuousConvMode' is disabled, this parameter is discarded.\r\n                                     This parameter must be a number between Min_Data = 1 and Max_Data = 8. */\r\n  uint32_t ExternalTrigConv;    /*!< Selects the external event used to trigger the conversion start of regular group.\r\n                                     If set to ADC_SOFTWARE_START, external triggers are disabled.\r\n                                     If set to external trigger source, triggering is on event rising edge.\r\n                                     This parameter can be a value of @ref ADC_External_trigger_source_Regular */\r\n} ADC_InitTypeDef;\r\n\r\n/**\r\n * @brief  Structure definition of ADC channel for regular group\r\n * @note   The setting of these parameters with function HAL_ADC_ConfigChannel() is conditioned to ADC state.\r\n *         ADC can be either disabled or enabled without conversion on going on regular group.\r\n */\r\ntypedef struct {\r\n  uint32_t\r\n      Channel;           /*!< Specifies the channel to configure into ADC regular group.\r\n                              This parameter can be a value of @ref ADC_channels\r\n                              Note: Depending on devices, some channels may not be available on package pins. Refer to device datasheet for channels availability.\r\n                              Note: On STM32F1 devices with several ADC: Only ADC1 can access internal measurement channels (VrefInt/TempSensor)\r\n                              Note: On STM32F10xx8 and STM32F10xxB devices: A low-amplitude voltage glitch may be generated (on ADC input 0) on the PA0 pin, when the ADC is converting with injection\r\n                            trigger.      It is advised to distribute the analog channels so that Channel 0 is configured as an injected channel.      Refer to errata sheet of these devices for more details. */\r\n  uint32_t Rank;         /*!< Specifies the rank in the regular group sequencer\r\n                              This parameter can be a value of @ref ADC_regular_rank\r\n                              Note: In case of need to disable a channel or change order of conversion sequencer, rank containing a previous channel setting can be overwritten by the new channel setting (or\r\n                            parameter number of conversions can be adjusted) */\r\n  uint32_t SamplingTime; /*!< Sampling time value to be set for the selected channel.\r\n                              Unit: ADC clock cycles\r\n                              Conversion time is the addition of sampling time and processing time (12.5 ADC clock cycles at ADC resolution 12 bits).\r\n                              This parameter can be a value of @ref ADC_sampling_times\r\n                              Caution: This parameter updates the parameter property of the channel, that can be used into regular and/or injected groups.\r\n                                       If this same channel has been previously configured in the other group (regular/injected), it will be updated to last setting.\r\n                              Note: In case of usage of internal measurement channels (VrefInt/TempSensor),\r\n                                    sampling time constraints must be respected (sampling time can be adjusted in function of ADC clock frequency and sampling time setting)\r\n                                    Refer to device datasheet for timings values, parameters TS_vrefint, TS_temp (values rough order: 5us to 17.1us min). */\r\n} ADC_ChannelConfTypeDef;\r\n\r\n/**\r\n * @brief  ADC Configuration analog watchdog definition\r\n * @note   The setting of these parameters with function is conditioned to ADC state.\r\n *         ADC state can be either disabled or enabled without conversion on going on regular and injected groups.\r\n */\r\ntypedef struct {\r\n  uint32_t WatchdogMode;   /*!< Configures the ADC analog watchdog mode: single/all channels, regular/injected group.\r\n                                This parameter can be a value of @ref ADC_analog_watchdog_mode. */\r\n  uint32_t Channel;        /*!< Selects which ADC channel to monitor by analog watchdog.\r\n                                This parameter has an effect only if watchdog mode is configured on single channel (parameter WatchdogMode)\r\n                                This parameter can be a value of @ref ADC_channels. */\r\n  uint32_t ITMode;         /*!< Specifies whether the analog watchdog is configured in interrupt or polling mode.\r\n                                This parameter can be set to ENABLE or DISABLE */\r\n  uint32_t HighThreshold;  /*!< Configures the ADC analog watchdog High threshold value.\r\n                                This parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF. */\r\n  uint32_t LowThreshold;   /*!< Configures the ADC analog watchdog High threshold value.\r\n                                This parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF. */\r\n  uint32_t WatchdogNumber; /*!< Reserved for future use, can be set to 0 */\r\n} ADC_AnalogWDGConfTypeDef;\r\n\r\n/**\r\n * @brief  HAL ADC state machine: ADC states definition (bitfields)\r\n */\r\n/* States of ADC global scope */\r\n#define HAL_ADC_STATE_RESET         0x00000000U /*!< ADC not yet initialized or disabled */\r\n#define HAL_ADC_STATE_READY         0x00000001U /*!< ADC peripheral ready for use */\r\n#define HAL_ADC_STATE_BUSY_INTERNAL 0x00000002U /*!< ADC is busy to internal process (initialization, calibration) */\r\n#define HAL_ADC_STATE_TIMEOUT       0x00000004U /*!< TimeOut occurrence */\r\n\r\n/* States of ADC errors */\r\n#define HAL_ADC_STATE_ERROR_INTERNAL 0x00000010U /*!< Internal error occurrence */\r\n#define HAL_ADC_STATE_ERROR_CONFIG   0x00000020U /*!< Configuration error occurrence */\r\n#define HAL_ADC_STATE_ERROR_DMA      0x00000040U /*!< DMA error occurrence */\r\n\r\n/* States of ADC group regular */\r\n#define HAL_ADC_STATE_REG_BUSY                                                                                                     \\\r\n  0x00000100U                               /*!< A conversion on group regular is ongoing or can occur (either by continuous mode, \\\r\n                                                external trigger, low power auto power-on, multimode ADC master control) */\r\n#define HAL_ADC_STATE_REG_EOC   0x00000200U /*!< Conversion data available on group regular */\r\n#define HAL_ADC_STATE_REG_OVR   0x00000400U /*!< Not available on STM32F1 device: Overrun occurrence */\r\n#define HAL_ADC_STATE_REG_EOSMP 0x00000800U /*!< Not available on STM32F1 device: End Of Sampling flag raised  */\r\n\r\n/* States of ADC group injected */\r\n#define HAL_ADC_STATE_INJ_BUSY                                                                                                          \\\r\n  0x00001000U                               /*!< A conversion on group injected is ongoing or can occur (either by auto-injection mode, \\\r\n                                                external trigger, low power auto power-on, multimode ADC master control) */\r\n#define HAL_ADC_STATE_INJ_EOC   0x00002000U /*!< Conversion data available on group injected */\r\n#define HAL_ADC_STATE_INJ_JQOVF 0x00004000U /*!< Not available on STM32F1 device: Injected queue overflow occurrence */\r\n\r\n/* States of ADC analog watchdogs */\r\n#define HAL_ADC_STATE_AWD1 0x00010000U /*!< Out-of-window occurrence of analog watchdog 1 */\r\n#define HAL_ADC_STATE_AWD2 0x00020000U /*!< Not available on STM32F1 device: Out-of-window occurrence of analog watchdog 2 */\r\n#define HAL_ADC_STATE_AWD3 0x00040000U /*!< Not available on STM32F1 device: Out-of-window occurrence of analog watchdog 3 */\r\n\r\n/* States of ADC multi-mode */\r\n#define HAL_ADC_STATE_MULTIMODE_SLAVE 0x00100000U /*!< ADC in multimode slave state, controlled by another ADC master ( */\r\n\r\n/**\r\n * @brief  ADC handle Structure definition\r\n */\r\ntypedef struct {\r\n  ADC_TypeDef *Instance; /*!< Register base address */\r\n\r\n  ADC_InitTypeDef Init; /*!< ADC required parameters */\r\n\r\n  DMA_HandleTypeDef *DMA_Handle; /*!< Pointer DMA Handler */\r\n\r\n  HAL_LockTypeDef Lock; /*!< ADC locking object */\r\n\r\n  __IO uint32_t State; /*!< ADC communication state (bitmap of ADC states) */\r\n\r\n  __IO uint32_t ErrorCode; /*!< ADC Error code */\r\n} ADC_HandleTypeDef;\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup ADC_Exported_Constants ADC Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup ADC_Error_Code ADC Error Code\r\n * @{\r\n */\r\n#define HAL_ADC_ERROR_NONE 0x00U /*!< No error                                              */\r\n#define HAL_ADC_ERROR_INTERNAL                                                      \\\r\n  0x01U                         /*!< ADC IP internal error: if problem of clocking, \\\r\n                                     enable/disable, erroneous state                       */\r\n#define HAL_ADC_ERROR_OVR 0x02U /*!< Overrun error                                         */\r\n#define HAL_ADC_ERROR_DMA 0x04U /*!< DMA transfer error                                    */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Data_align ADC data alignment\r\n * @{\r\n */\r\n#define ADC_DATAALIGN_RIGHT 0x00000000U\r\n#define ADC_DATAALIGN_LEFT  ((uint32_t)ADC_CR2_ALIGN)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Scan_mode ADC scan mode\r\n * @{\r\n */\r\n/* Note: Scan mode values are not among binary choices ENABLE/DISABLE for     */\r\n/*       compatibility with other STM32 devices having a sequencer with       */\r\n/*       additional options.                                                  */\r\n#define ADC_SCAN_DISABLE 0x00000000U\r\n#define ADC_SCAN_ENABLE  ((uint32_t)ADC_CR1_SCAN)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_External_trigger_edge_Regular ADC external trigger enable for regular group\r\n * @{\r\n */\r\n#define ADC_EXTERNALTRIGCONVEDGE_NONE   0x00000000U\r\n#define ADC_EXTERNALTRIGCONVEDGE_RISING ((uint32_t)ADC_CR2_EXTTRIG)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_channels ADC channels\r\n * @{\r\n */\r\n/* Note: Depending on devices, some channels may not be available on package  */\r\n/*       pins. Refer to device datasheet for channels availability.           */\r\n#define ADC_CHANNEL_0  0x00000000U\r\n#define ADC_CHANNEL_1  ((uint32_t)(ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_2  ((uint32_t)(ADC_SQR3_SQ1_1))\r\n#define ADC_CHANNEL_3  ((uint32_t)(ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_4  ((uint32_t)(ADC_SQR3_SQ1_2))\r\n#define ADC_CHANNEL_5  ((uint32_t)(ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_6  ((uint32_t)(ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_1))\r\n#define ADC_CHANNEL_7  ((uint32_t)(ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_8  ((uint32_t)(ADC_SQR3_SQ1_3))\r\n#define ADC_CHANNEL_9  ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_10 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_1))\r\n#define ADC_CHANNEL_11 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_12 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_2))\r\n#define ADC_CHANNEL_13 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_14 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_1))\r\n#define ADC_CHANNEL_15 ((uint32_t)(ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_2 | ADC_SQR3_SQ1_1 | ADC_SQR3_SQ1_0))\r\n#define ADC_CHANNEL_16 ((uint32_t)(ADC_SQR3_SQ1_4))\r\n#define ADC_CHANNEL_17 ((uint32_t)(ADC_SQR3_SQ1_4 | ADC_SQR3_SQ1_0))\r\n\r\n// #define ADC_CHANNEL_TEMPSENSOR ADC_CHANNEL_16 /* ADC internal channel (no connection on device pin) */\r\n// #define ADC_CHANNEL_VREFINT    ADC_CHANNEL_17 /* ADC internal channel (no connection on device pin) */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_sampling_times ADC sampling times\r\n * @{\r\n */\r\n#define ADC_SAMPLETIME_1CYCLE_5    0x00000000U                                                          /*!< Sampling time 1.5 ADC clock cycle */\r\n#define ADC_SAMPLETIME_7CYCLES_5   ((uint32_t)(ADC_SMPR2_SMP0_0))                                       /*!< Sampling time 7.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_13CYCLES_5  ((uint32_t)(ADC_SMPR2_SMP0_1))                                       /*!< Sampling time 13.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_28CYCLES_5  ((uint32_t)(ADC_SMPR2_SMP0_1 | ADC_SMPR2_SMP0_0))                    /*!< Sampling time 28.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_41CYCLES_5  ((uint32_t)(ADC_SMPR2_SMP0_2))                                       /*!< Sampling time 41.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_55CYCLES_5  ((uint32_t)(ADC_SMPR2_SMP0_2 | ADC_SMPR2_SMP0_0))                    /*!< Sampling time 55.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_71CYCLES_5  ((uint32_t)(ADC_SMPR2_SMP0_2 | ADC_SMPR2_SMP0_1))                    /*!< Sampling time 71.5 ADC clock cycles */\r\n#define ADC_SAMPLETIME_239CYCLES_5 ((uint32_t)(ADC_SMPR2_SMP0_2 | ADC_SMPR2_SMP0_1 | ADC_SMPR2_SMP0_0)) /*!< Sampling time 239.5 ADC clock cycles */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_regular_rank ADC rank into regular group\r\n * @{\r\n */\r\n#define ADC_REGULAR_RANK_1  0x00000001U\r\n#define ADC_REGULAR_RANK_2  0x00000002U\r\n#define ADC_REGULAR_RANK_3  0x00000003U\r\n#define ADC_REGULAR_RANK_4  0x00000004U\r\n#define ADC_REGULAR_RANK_5  0x00000005U\r\n#define ADC_REGULAR_RANK_6  0x00000006U\r\n#define ADC_REGULAR_RANK_7  0x00000007U\r\n#define ADC_REGULAR_RANK_8  0x00000008U\r\n#define ADC_REGULAR_RANK_9  0x00000009U\r\n#define ADC_REGULAR_RANK_10 0x0000000AU\r\n#define ADC_REGULAR_RANK_11 0x0000000BU\r\n#define ADC_REGULAR_RANK_12 0x0000000CU\r\n#define ADC_REGULAR_RANK_13 0x0000000DU\r\n#define ADC_REGULAR_RANK_14 0x0000000EU\r\n#define ADC_REGULAR_RANK_15 0x0000000FU\r\n#define ADC_REGULAR_RANK_16 0x00000010U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_analog_watchdog_mode ADC analog watchdog mode\r\n * @{\r\n */\r\n#define ADC_ANALOGWATCHDOG_NONE            0x00000000U\r\n#define ADC_ANALOGWATCHDOG_SINGLE_REG      ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_AWDEN))\r\n#define ADC_ANALOGWATCHDOG_SINGLE_INJEC    ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_JAWDEN))\r\n#define ADC_ANALOGWATCHDOG_SINGLE_REGINJEC ((uint32_t)(ADC_CR1_AWDSGL | ADC_CR1_AWDEN | ADC_CR1_JAWDEN))\r\n#define ADC_ANALOGWATCHDOG_ALL_REG         ((uint32_t)ADC_CR1_AWDEN)\r\n#define ADC_ANALOGWATCHDOG_ALL_INJEC       ((uint32_t)ADC_CR1_JAWDEN)\r\n#define ADC_ANALOGWATCHDOG_ALL_REGINJEC    ((uint32_t)(ADC_CR1_AWDEN | ADC_CR1_JAWDEN))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_conversion_group ADC conversion group\r\n * @{\r\n */\r\n#define ADC_REGULAR_GROUP          ((uint32_t)(ADC_FLAG_EOC))\r\n#define ADC_INJECTED_GROUP         ((uint32_t)(ADC_FLAG_JEOC))\r\n#define ADC_REGULAR_INJECTED_GROUP ((uint32_t)(ADC_FLAG_EOC | ADC_FLAG_JEOC))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Event_type ADC Event type\r\n * @{\r\n */\r\n#define ADC_AWD_EVENT ((uint32_t)ADC_FLAG_AWD) /*!< ADC Analog watchdog event */\r\n\r\n#define ADC_AWD1_EVENT ADC_AWD_EVENT /*!< ADC Analog watchdog 1 event: Alternate naming for compatibility with other STM32 devices having several analog watchdogs */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_interrupts_definition ADC interrupts definition\r\n * @{\r\n */\r\n#define ADC_IT_EOC  ADC_CR1_EOCIE  /*!< ADC End of Regular Conversion interrupt source */\r\n#define ADC_IT_JEOC ADC_CR1_JEOCIE /*!< ADC End of Injected Conversion interrupt source */\r\n#define ADC_IT_AWD  ADC_CR1_AWDIE  /*!< ADC Analog watchdog interrupt source */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_flags_definition ADC flags definition\r\n * @{\r\n */\r\n#define ADC_FLAG_STRT  ADC_SR_STRT  /*!< ADC Regular group start flag */\r\n#define ADC_FLAG_JSTRT ADC_SR_JSTRT /*!< ADC Injected group start flag */\r\n#define ADC_FLAG_EOC   ADC_SR_EOC   /*!< ADC End of Regular conversion flag */\r\n#define ADC_FLAG_JEOC  ADC_SR_JEOC  /*!< ADC End of Injected conversion flag */\r\n#define ADC_FLAG_AWD   ADC_SR_AWD   /*!< ADC Analog watchdog flag */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private constants ---------------------------------------------------------*/\r\n\r\n/** @addtogroup ADC_Private_Constants ADC Private Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup ADC_conversion_cycles ADC conversion cycles\r\n * @{\r\n */\r\n/* ADC conversion cycles (unit: ADC clock cycles)                           */\r\n/* (selected sampling time + conversion time of 12.5 ADC clock cycles, with */\r\n/* resolution 12 bits)                                                      */\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_1CYCLE5    14U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_7CYCLES5   20U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_13CYCLES5  26U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_28CYCLES5  41U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_41CYCLES5  54U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_55CYCLES5  68U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_71CYCLES5  84U\r\n#define ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_239CYCLES5 252U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_sampling_times_all_channels ADC sampling times all channels\r\n * @{\r\n */\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2 \\\r\n  (ADC_SMPR2_SMP9_2 | ADC_SMPR2_SMP8_2 | ADC_SMPR2_SMP7_2 | ADC_SMPR2_SMP6_2 | ADC_SMPR2_SMP5_2 | ADC_SMPR2_SMP4_2 | ADC_SMPR2_SMP3_2 | ADC_SMPR2_SMP2_2 | ADC_SMPR2_SMP1_2 | ADC_SMPR2_SMP0_2)\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2 \\\r\n  (ADC_SMPR1_SMP17_2 | ADC_SMPR1_SMP16_2 | ADC_SMPR1_SMP15_2 | ADC_SMPR1_SMP14_2 | ADC_SMPR1_SMP13_2 | ADC_SMPR1_SMP12_2 | ADC_SMPR1_SMP11_2 | ADC_SMPR1_SMP10_2)\r\n\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1 \\\r\n  (ADC_SMPR2_SMP9_1 | ADC_SMPR2_SMP8_1 | ADC_SMPR2_SMP7_1 | ADC_SMPR2_SMP6_1 | ADC_SMPR2_SMP5_1 | ADC_SMPR2_SMP4_1 | ADC_SMPR2_SMP3_1 | ADC_SMPR2_SMP2_1 | ADC_SMPR2_SMP1_1 | ADC_SMPR2_SMP0_1)\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1 \\\r\n  (ADC_SMPR1_SMP17_1 | ADC_SMPR1_SMP16_1 | ADC_SMPR1_SMP15_1 | ADC_SMPR1_SMP14_1 | ADC_SMPR1_SMP13_1 | ADC_SMPR1_SMP12_1 | ADC_SMPR1_SMP11_1 | ADC_SMPR1_SMP10_1)\r\n\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0 \\\r\n  (ADC_SMPR2_SMP9_0 | ADC_SMPR2_SMP8_0 | ADC_SMPR2_SMP7_0 | ADC_SMPR2_SMP6_0 | ADC_SMPR2_SMP5_0 | ADC_SMPR2_SMP4_0 | ADC_SMPR2_SMP3_0 | ADC_SMPR2_SMP2_0 | ADC_SMPR2_SMP1_0 | ADC_SMPR2_SMP0_0)\r\n#define ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0 \\\r\n  (ADC_SMPR1_SMP17_0 | ADC_SMPR1_SMP16_0 | ADC_SMPR1_SMP15_0 | ADC_SMPR1_SMP14_0 | ADC_SMPR1_SMP13_0 | ADC_SMPR1_SMP12_0 | ADC_SMPR1_SMP11_0 | ADC_SMPR1_SMP10_0)\r\n\r\n#define ADC_SAMPLETIME_1CYCLE5_SMPR2ALLCHANNELS    0x00000000U\r\n#define ADC_SAMPLETIME_7CYCLES5_SMPR2ALLCHANNELS   (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0)\r\n#define ADC_SAMPLETIME_13CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1)\r\n#define ADC_SAMPLETIME_28CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0)\r\n#define ADC_SAMPLETIME_41CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2)\r\n#define ADC_SAMPLETIME_55CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0)\r\n#define ADC_SAMPLETIME_71CYCLES5_SMPR2ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1)\r\n#define ADC_SAMPLETIME_239CYCLES5_SMPR2ALLCHANNELS (ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1 | ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT0)\r\n\r\n#define ADC_SAMPLETIME_1CYCLE5_SMPR1ALLCHANNELS    0x00000000U\r\n#define ADC_SAMPLETIME_7CYCLES5_SMPR1ALLCHANNELS   (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0)\r\n#define ADC_SAMPLETIME_13CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1)\r\n#define ADC_SAMPLETIME_28CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0)\r\n#define ADC_SAMPLETIME_41CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2)\r\n#define ADC_SAMPLETIME_55CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0)\r\n#define ADC_SAMPLETIME_71CYCLES5_SMPR1ALLCHANNELS  (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1)\r\n#define ADC_SAMPLETIME_239CYCLES5_SMPR1ALLCHANNELS (ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1 | ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0)\r\n/**\r\n * @}\r\n */\r\n\r\n/* Combination of all post-conversion flags bits: EOC/EOS, JEOC/JEOS, OVR, AWDx */\r\n#define ADC_FLAG_POSTCONV_ALL (ADC_FLAG_EOC | ADC_FLAG_JEOC | ADC_FLAG_AWD)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n\r\n/** @defgroup ADC_Exported_Macros ADC Exported Macros\r\n * @{\r\n */\r\n/* Macro for internal HAL driver usage, and possibly can be used into code of */\r\n/* final user.                                                                */\r\n\r\n/**\r\n * @brief Enable the ADC peripheral\r\n * @note ADC enable requires a delay for ADC stabilization time\r\n *       (refer to device datasheet, parameter tSTAB)\r\n * @note On STM32F1, if ADC is already enabled this macro trigs a conversion\r\n *       SW start on regular group.\r\n * @param __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#define __HAL_ADC_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR2, (ADC_CR2_ADON)))\r\n\r\n/**\r\n * @brief Disable the ADC peripheral\r\n * @param __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#define __HAL_ADC_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CR2, (ADC_CR2_ADON)))\r\n\r\n/** @brief Enable the ADC end of conversion interrupt.\r\n * @param __HANDLE__: ADC handle\r\n * @param __INTERRUPT__: ADC Interrupt\r\n *          This parameter can be any combination of the following values:\r\n *            @arg ADC_IT_EOC: ADC End of Regular Conversion interrupt source\r\n *            @arg ADC_IT_JEOC: ADC End of Injected Conversion interrupt source\r\n *            @arg ADC_IT_AWD: ADC Analog watchdog interrupt source\r\n * @retval None\r\n */\r\n#define __HAL_ADC_ENABLE_IT(__HANDLE__, __INTERRUPT__) (SET_BIT((__HANDLE__)->Instance->CR1, (__INTERRUPT__)))\r\n\r\n/** @brief Disable the ADC end of conversion interrupt.\r\n * @param __HANDLE__: ADC handle\r\n * @param __INTERRUPT__: ADC Interrupt\r\n *          This parameter can be any combination of the following values:\r\n *            @arg ADC_IT_EOC: ADC End of Regular Conversion interrupt source\r\n *            @arg ADC_IT_JEOC: ADC End of Injected Conversion interrupt source\r\n *            @arg ADC_IT_AWD: ADC Analog watchdog interrupt source\r\n * @retval None\r\n */\r\n#define __HAL_ADC_DISABLE_IT(__HANDLE__, __INTERRUPT__) (CLEAR_BIT((__HANDLE__)->Instance->CR1, (__INTERRUPT__)))\r\n\r\n/** @brief  Checks if the specified ADC interrupt source is enabled or disabled.\r\n * @param __HANDLE__: ADC handle\r\n * @param __INTERRUPT__: ADC interrupt source to check\r\n *          This parameter can be any combination of the following values:\r\n *            @arg ADC_IT_EOC: ADC End of Regular Conversion interrupt source\r\n *            @arg ADC_IT_JEOC: ADC End of Injected Conversion interrupt source\r\n *            @arg ADC_IT_AWD: ADC Analog watchdog interrupt source\r\n * @retval None\r\n */\r\n#define __HAL_ADC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->CR1 & (__INTERRUPT__)) == (__INTERRUPT__))\r\n\r\n/** @brief Get the selected ADC's flag status.\r\n * @param __HANDLE__: ADC handle\r\n * @param __FLAG__: ADC flag\r\n *          This parameter can be any combination of the following values:\r\n *            @arg ADC_FLAG_STRT: ADC Regular group start flag\r\n *            @arg ADC_FLAG_JSTRT: ADC Injected group start flag\r\n *            @arg ADC_FLAG_EOC: ADC End of Regular conversion flag\r\n *            @arg ADC_FLAG_JEOC: ADC End of Injected conversion flag\r\n *            @arg ADC_FLAG_AWD: ADC Analog watchdog flag\r\n * @retval None\r\n */\r\n#define __HAL_ADC_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))\r\n\r\n/** @brief Clear the ADC's pending flags\r\n * @param __HANDLE__: ADC handle\r\n * @param __FLAG__: ADC flag\r\n *          This parameter can be any combination of the following values:\r\n *            @arg ADC_FLAG_STRT: ADC Regular group start flag\r\n *            @arg ADC_FLAG_JSTRT: ADC Injected group start flag\r\n *            @arg ADC_FLAG_EOC: ADC End of Regular conversion flag\r\n *            @arg ADC_FLAG_JEOC: ADC End of Injected conversion flag\r\n *            @arg ADC_FLAG_AWD: ADC Analog watchdog flag\r\n * @retval None\r\n */\r\n#define __HAL_ADC_CLEAR_FLAG(__HANDLE__, __FLAG__) (WRITE_REG((__HANDLE__)->Instance->SR, ~(__FLAG__)))\r\n\r\n/** @brief  Reset ADC handle state\r\n * @param  __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#define __HAL_ADC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_ADC_STATE_RESET)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro ------------------------------------------------------------*/\r\n\r\n/** @defgroup ADC_Private_Macros ADC Private Macros\r\n * @{\r\n */\r\n/* Macro reserved for internal HAL driver usage, not intended to be used in   */\r\n/* code of final user.                                                        */\r\n\r\n/**\r\n * @brief Verification of ADC state: enabled or disabled\r\n * @param __HANDLE__: ADC handle\r\n * @retval SET (ADC enabled) or RESET (ADC disabled)\r\n */\r\n#define ADC_IS_ENABLE(__HANDLE__) (((((__HANDLE__)->Instance->CR2 & ADC_CR2_ADON) == ADC_CR2_ADON)) ? SET : RESET)\r\n\r\n/**\r\n * @brief Test if conversion trigger of regular group is software start\r\n *        or external trigger.\r\n * @param __HANDLE__: ADC handle\r\n * @retval SET (software start) or RESET (external trigger)\r\n */\r\n#define ADC_IS_SOFTWARE_START_REGULAR(__HANDLE__) (READ_BIT((__HANDLE__)->Instance->CR2, ADC_CR2_EXTSEL) == ADC_SOFTWARE_START)\r\n\r\n/**\r\n * @brief Test if conversion trigger of injected group is software start\r\n *        or external trigger.\r\n * @param __HANDLE__: ADC handle\r\n * @retval SET (software start) or RESET (external trigger)\r\n */\r\n#define ADC_IS_SOFTWARE_START_INJECTED(__HANDLE__) (READ_BIT((__HANDLE__)->Instance->CR2, ADC_CR2_JEXTSEL) == ADC_INJECTED_SOFTWARE_START)\r\n\r\n/**\r\n * @brief Simultaneously clears and sets specific bits of the handle State\r\n * @note: ADC_STATE_CLR_SET() macro is merely aliased to generic macro MODIFY_REG(),\r\n *        the first parameter is the ADC handle State, the second parameter is the\r\n *        bit field to clear, the third and last parameter is the bit field to set.\r\n * @retval None\r\n */\r\n#define ADC_STATE_CLR_SET MODIFY_REG\r\n\r\n/**\r\n * @brief Clear ADC error code (set it to error code: \"no error\")\r\n * @param __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#define ADC_CLEAR_ERRORCODE(__HANDLE__) ((__HANDLE__)->ErrorCode = HAL_ADC_ERROR_NONE)\r\n\r\n/**\r\n * @brief Set ADC number of conversions into regular channel sequence length.\r\n * @param _NbrOfConversion_: Regular channel sequence length\r\n * @retval None\r\n */\r\n#define ADC_SQR1_L_SHIFT(_NbrOfConversion_) (((_NbrOfConversion_) - (uint8_t)1) << ADC_SQR1_L_Pos)\r\n\r\n/**\r\n * @brief Set the ADC's sample time for channel numbers between 10 and 18.\r\n * @param _SAMPLETIME_: Sample time parameter.\r\n * @param _CHANNELNB_: Channel number.\r\n * @retval None\r\n */\r\n#define ADC_SMPR1(_SAMPLETIME_, _CHANNELNB_) ((_SAMPLETIME_) << (ADC_SMPR1_SMP11_Pos * ((_CHANNELNB_)-10)))\r\n\r\n/**\r\n * @brief Set the ADC's sample time for channel numbers between 0 and 9.\r\n * @param _SAMPLETIME_: Sample time parameter.\r\n * @param _CHANNELNB_: Channel number.\r\n * @retval None\r\n */\r\n#define ADC_SMPR2(_SAMPLETIME_, _CHANNELNB_) ((_SAMPLETIME_) << (ADC_SMPR2_SMP1_Pos * (_CHANNELNB_)))\r\n\r\n/**\r\n * @brief Set the selected regular channel rank for rank between 1 and 6.\r\n * @param _CHANNELNB_: Channel number.\r\n * @param _RANKNB_: Rank number.\r\n * @retval None\r\n */\r\n#define ADC_SQR3_RK(_CHANNELNB_, _RANKNB_) ((_CHANNELNB_) << (ADC_SQR3_SQ2_Pos * ((_RANKNB_)-1)))\r\n\r\n/**\r\n * @brief Set the selected regular channel rank for rank between 7 and 12.\r\n * @param _CHANNELNB_: Channel number.\r\n * @param _RANKNB_: Rank number.\r\n * @retval None\r\n */\r\n#define ADC_SQR2_RK(_CHANNELNB_, _RANKNB_) ((_CHANNELNB_) << (ADC_SQR2_SQ8_Pos * ((_RANKNB_)-7)))\r\n\r\n/**\r\n * @brief Set the selected regular channel rank for rank between 13 and 16.\r\n * @param _CHANNELNB_: Channel number.\r\n * @param _RANKNB_: Rank number.\r\n * @retval None\r\n */\r\n#define ADC_SQR1_RK(_CHANNELNB_, _RANKNB_) ((_CHANNELNB_) << (ADC_SQR1_SQ14_Pos * ((_RANKNB_)-13)))\r\n\r\n/**\r\n * @brief Set the injected sequence length.\r\n * @param _JSQR_JL_: Sequence length.\r\n * @retval None\r\n */\r\n#define ADC_JSQR_JL_SHIFT(_JSQR_JL_) (((_JSQR_JL_)-1) << ADC_JSQR_JL_Pos)\r\n\r\n/**\r\n * @brief Set the selected injected channel rank\r\n *        Note: on STM32F1 devices, channel rank position in JSQR register\r\n *              is depending on total number of ranks selected into\r\n *              injected sequencer (ranks sequence starting from 4-JL)\r\n * @param _CHANNELNB_: Channel number.\r\n * @param _RANKNB_: Rank number.\r\n * @param _JSQR_JL_: Sequence length.\r\n * @retval None\r\n */\r\n#define ADC_JSQR_RK_JL(_CHANNELNB_, _RANKNB_, _JSQR_JL_) ((_CHANNELNB_) << (ADC_JSQR_JSQ2_Pos * ((4 - ((_JSQR_JL_) - (_RANKNB_))) - 1)))\r\n\r\n/**\r\n * @brief Enable ADC continuous conversion mode.\r\n * @param _CONTINUOUS_MODE_: Continuous mode.\r\n * @retval None\r\n */\r\n#define ADC_CR2_CONTINUOUS(_CONTINUOUS_MODE_) ((_CONTINUOUS_MODE_) << ADC_CR2_CONT_Pos)\r\n\r\n/**\r\n * @brief Configures the number of discontinuous conversions for the regular group channels.\r\n * @param _NBR_DISCONTINUOUS_CONV_: Number of discontinuous conversions.\r\n * @retval None\r\n */\r\n#define ADC_CR1_DISCONTINUOUS_NUM(_NBR_DISCONTINUOUS_CONV_) (((_NBR_DISCONTINUOUS_CONV_)-1) << ADC_CR1_DISCNUM_Pos)\r\n\r\n/**\r\n * @brief Enable ADC scan mode to convert multiple ranks with sequencer.\r\n * @param _SCAN_MODE_: Scan conversion mode.\r\n * @retval None\r\n */\r\n/* Note: Scan mode is compared to ENABLE for legacy purpose, this parameter   */\r\n/*       is equivalent to ADC_SCAN_ENABLE.                                    */\r\n#define ADC_CR1_SCAN_SET(_SCAN_MODE_) ((((_SCAN_MODE_) == ADC_SCAN_ENABLE) || ((_SCAN_MODE_) == ENABLE)) ? (ADC_SCAN_ENABLE) : (ADC_SCAN_DISABLE))\r\n\r\n/**\r\n * @brief Get the maximum ADC conversion cycles on all channels.\r\n * Returns the selected sampling time + conversion time (12.5 ADC clock cycles)\r\n * Approximation of sampling time within 4 ranges, returns the highest value:\r\n *   below 7.5 cycles {1.5 cycle; 7.5 cycles},\r\n *   between 13.5 cycles and 28.5 cycles {13.5 cycles; 28.5 cycles}\r\n *   between 41.5 cycles and 71.5 cycles {41.5 cycles; 55.5 cycles; 71.5cycles}\r\n *   equal to 239.5 cycles\r\n * Unit: ADC clock cycles\r\n * @param __HANDLE__: ADC handle\r\n * @retval ADC conversion cycles on all channels\r\n */\r\n#define ADC_CONVCYCLES_MAX_RANGE(__HANDLE__)                                                                                                                                            \\\r\n  (((((__HANDLE__)->Instance->SMPR2 & ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT2) == RESET) && (((__HANDLE__)->Instance->SMPR1 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT2) == RESET))             \\\r\n       ?                                                                                                                                                                                \\\r\n                                                                                                                                                                                        \\\r\n       (((((__HANDLE__)->Instance->SMPR2 & ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1) == RESET) && (((__HANDLE__)->Instance->SMPR1 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1) == RESET))        \\\r\n            ? ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_7CYCLES5                                                                                                                             \\\r\n            : ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_28CYCLES5)                                                                                                                           \\\r\n       : ((((((__HANDLE__)->Instance->SMPR2 & ADC_SAMPLETIME_ALLCHANNELS_SMPR2BIT1) == RESET) && (((__HANDLE__)->Instance->SMPR1 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT1) == RESET))     \\\r\n           || ((((__HANDLE__)->Instance->SMPR2 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0) == RESET) && (((__HANDLE__)->Instance->SMPR1 & ADC_SAMPLETIME_ALLCHANNELS_SMPR1BIT0) == RESET))) \\\r\n              ? ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_71CYCLES5                                                                                                                          \\\r\n              : ADC_CONVERSIONCLOCKCYCLES_SAMPLETIME_239CYCLES5))\r\n\r\n#define IS_ADC_DATA_ALIGN(ALIGN) (((ALIGN) == ADC_DATAALIGN_RIGHT) || ((ALIGN) == ADC_DATAALIGN_LEFT))\r\n\r\n#define IS_ADC_SCAN_MODE(SCAN_MODE) (((SCAN_MODE) == ADC_SCAN_DISABLE) || ((SCAN_MODE) == ADC_SCAN_ENABLE))\r\n\r\n#define IS_ADC_EXTTRIG_EDGE(EDGE) (((EDGE) == ADC_EXTERNALTRIGCONVEDGE_NONE) || ((EDGE) == ADC_EXTERNALTRIGCONVEDGE_RISING))\r\n\r\n#define IS_ADC_CHANNEL(CHANNEL)                                                                                                                                                                      \\\r\n  (((CHANNEL) == ADC_CHANNEL_0) || ((CHANNEL) == ADC_CHANNEL_1) || ((CHANNEL) == ADC_CHANNEL_2) || ((CHANNEL) == ADC_CHANNEL_3) || ((CHANNEL) == ADC_CHANNEL_4) || ((CHANNEL) == ADC_CHANNEL_5)      \\\r\n   || ((CHANNEL) == ADC_CHANNEL_6) || ((CHANNEL) == ADC_CHANNEL_7) || ((CHANNEL) == ADC_CHANNEL_8) || ((CHANNEL) == ADC_CHANNEL_9) || ((CHANNEL) == ADC_CHANNEL_10) || ((CHANNEL) == ADC_CHANNEL_11) \\\r\n   || ((CHANNEL) == ADC_CHANNEL_12) || ((CHANNEL) == ADC_CHANNEL_13) || ((CHANNEL) == ADC_CHANNEL_14) || ((CHANNEL) == ADC_CHANNEL_15) || ((CHANNEL) == ADC_CHANNEL_16)                              \\\r\n   || ((CHANNEL) == ADC_CHANNEL_17))\r\n\r\n#define IS_ADC_SAMPLE_TIME(TIME)                                                                                                                                 \\\r\n  (((TIME) == ADC_SAMPLETIME_1CYCLE_5) || ((TIME) == ADC_SAMPLETIME_7CYCLES_5) || ((TIME) == ADC_SAMPLETIME_13CYCLES_5) || ((TIME) == ADC_SAMPLETIME_28CYCLES_5) \\\r\n   || ((TIME) == ADC_SAMPLETIME_41CYCLES_5) || ((TIME) == ADC_SAMPLETIME_55CYCLES_5) || ((TIME) == ADC_SAMPLETIME_71CYCLES_5) || ((TIME) == ADC_SAMPLETIME_239CYCLES_5))\r\n\r\n#define IS_ADC_REGULAR_RANK(CHANNEL)                                                                                                                                                             \\\r\n  (((CHANNEL) == ADC_REGULAR_RANK_1) || ((CHANNEL) == ADC_REGULAR_RANK_2) || ((CHANNEL) == ADC_REGULAR_RANK_3) || ((CHANNEL) == ADC_REGULAR_RANK_4) || ((CHANNEL) == ADC_REGULAR_RANK_5)         \\\r\n   || ((CHANNEL) == ADC_REGULAR_RANK_6) || ((CHANNEL) == ADC_REGULAR_RANK_7) || ((CHANNEL) == ADC_REGULAR_RANK_8) || ((CHANNEL) == ADC_REGULAR_RANK_9) || ((CHANNEL) == ADC_REGULAR_RANK_10)     \\\r\n   || ((CHANNEL) == ADC_REGULAR_RANK_11) || ((CHANNEL) == ADC_REGULAR_RANK_12) || ((CHANNEL) == ADC_REGULAR_RANK_13) || ((CHANNEL) == ADC_REGULAR_RANK_14) || ((CHANNEL) == ADC_REGULAR_RANK_15) \\\r\n   || ((CHANNEL) == ADC_REGULAR_RANK_16))\r\n\r\n#define IS_ADC_ANALOG_WATCHDOG_MODE(WATCHDOG)                                                                                                                                                        \\\r\n  (((WATCHDOG) == ADC_ANALOGWATCHDOG_NONE) || ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_REG) || ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_INJEC) || ((WATCHDOG) == ADC_ANALOGWATCHDOG_SINGLE_REGINJEC) \\\r\n   || ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_REG) || ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_INJEC) || ((WATCHDOG) == ADC_ANALOGWATCHDOG_ALL_REGINJEC))\r\n\r\n#define IS_ADC_CONVERSION_GROUP(CONVERSION) (((CONVERSION) == ADC_REGULAR_GROUP) || ((CONVERSION) == ADC_INJECTED_GROUP) || ((CONVERSION) == ADC_REGULAR_INJECTED_GROUP))\r\n\r\n#define IS_ADC_EVENT_TYPE(EVENT) ((EVENT) == ADC_AWD_EVENT)\r\n\r\n/** @defgroup ADC_range_verification ADC range verification\r\n * For a unique ADC resolution: 12 bits\r\n * @{\r\n */\r\n#define IS_ADC_RANGE(ADC_VALUE) ((ADC_VALUE) <= 0x0FFFU)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_regular_nb_conv_verification ADC regular nb conv verification\r\n * @{\r\n */\r\n#define IS_ADC_REGULAR_NB_CONV(LENGTH) (((LENGTH) >= 1U) && ((LENGTH) <= 16U))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_regular_discontinuous_mode_number_verification ADC regular discontinuous mode number verification\r\n * @{\r\n */\r\n#define IS_ADC_REGULAR_DISCONT_NUMBER(NUMBER) (((NUMBER) >= 1U) && ((NUMBER) <= 8U))\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Include ADC HAL Extension module */\r\n#include \"stm32f1xx_hal_adc_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup ADC_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup ADC_Exported_Functions_Group1\r\n * @{\r\n */\r\n\r\n/* Initialization and de-initialization functions  **********************************/\r\nHAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADC_DeInit(ADC_HandleTypeDef *hadc);\r\nvoid              HAL_ADC_MspInit(ADC_HandleTypeDef *hadc);\r\nvoid              HAL_ADC_MspDeInit(ADC_HandleTypeDef *hadc);\r\n/**\r\n * @}\r\n */\r\n\r\n/* IO operation functions  *****************************************************/\r\n\r\n/** @addtogroup ADC_Exported_Functions_Group2\r\n * @{\r\n */\r\n\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout);\r\nHAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef *hadc, uint32_t EventType, uint32_t Timeout);\r\n\r\n/* Non-blocking mode: Interruption */\r\nHAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef *hadc);\r\n\r\n/* Non-blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length);\r\nHAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef *hadc);\r\n\r\n/* ADC retrieve conversion value intended to be used with polling or interruption */\r\nuint32_t HAL_ADC_GetValue(ADC_HandleTypeDef *hadc);\r\n\r\n/* ADC IRQHandler and Callbacks used in non-blocking modes (Interruption and DMA) */\r\nvoid HAL_ADC_IRQHandler(ADC_HandleTypeDef *hadc);\r\n/**\r\n * @}\r\n */\r\n\r\n/* Peripheral Control functions ***********************************************/\r\n/** @addtogroup ADC_Exported_Functions_Group3\r\n * @{\r\n */\r\nHAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef *hadc, ADC_ChannelConfTypeDef *sConfig);\r\nHAL_StatusTypeDef HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef *hadc, ADC_AnalogWDGConfTypeDef *AnalogWDGConfig);\r\n/**\r\n * @}\r\n */\r\n\r\n/* Peripheral State functions *************************************************/\r\n/** @addtogroup ADC_Exported_Functions_Group4\r\n * @{\r\n */\r\nuint32_t HAL_ADC_GetState(ADC_HandleTypeDef *hadc);\r\nuint32_t HAL_ADC_GetError(ADC_HandleTypeDef *hadc);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Internal HAL driver functions **********************************************/\r\n/** @addtogroup ADC_Private_Functions\r\n * @{\r\n */\r\nHAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef ADC_ConversionStop_Disable(ADC_HandleTypeDef *hadc);\r\nvoid              ADC_StabilizationTime(uint32_t DelayUs);\r\nvoid              ADC_DMAConvCplt(DMA_HandleTypeDef *hdma);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_ADC_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_adc_ex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_adc_ex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of ADC HAL extension module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_ADC_EX_H\r\n#define __STM32F1xx_HAL_ADC_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup ADCEx\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup ADCEx_Exported_Types ADCEx Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  ADC Configuration injected Channel structure definition\r\n * @note   Parameters of this structure are shared within 2 scopes:\r\n *          - Scope channel: InjectedChannel, InjectedRank, InjectedSamplingTime, InjectedOffset\r\n *          - Scope injected group (affects all channels of injected group): InjectedNbrOfConversion, InjectedDiscontinuousConvMode,\r\n *            AutoInjectedConv, ExternalTrigInjecConvEdge, ExternalTrigInjecConv.\r\n * @note   The setting of these parameters with function HAL_ADCEx_InjectedConfigChannel() is conditioned to ADC state.\r\n *         ADC state can be either:\r\n *          - For all parameters: ADC disabled (this is the only possible ADC state to modify parameter 'ExternalTrigInjecConv')\r\n *          - For all except parameters 'ExternalTrigInjecConv': ADC enabled without conversion on going on injected group.\r\n */\r\ntypedef struct {\r\n  uint32_t InjectedChannel;         /*!< Selection of ADC channel to configure\r\n                                         This parameter can be a value of @ref ADC_channels\r\n                                         Note: Depending on devices, some channels may not be available on package pins. Refer to device datasheet for channels availability.\r\n                                         Note: On STM32F1 devices with several ADC: Only ADC1 can access internal measurement channels (VrefInt/TempSensor)\r\n                                         Note: On STM32F10xx8 and STM32F10xxB devices: A low-amplitude voltage glitch may be generated (on ADC input 0) on the PA0 pin, when the ADC is converting with\r\n                                       injection         trigger.              It is advised to distribute the analog channels so that Channel 0 is configured as an injected channel.              Refer to\r\n                                       errata         sheet of these devices for more details. */\r\n  uint32_t InjectedRank;            /*!< Rank in the injected group sequencer\r\n                                         This parameter must be a value of @ref ADCEx_injected_rank\r\n                                         Note: In case of need to disable a channel or change order of conversion sequencer, rank containing a previous channel setting can be overwritten by the new channel\r\n                                       setting (or parameter number of conversions can be adjusted) */\r\n  uint32_t InjectedSamplingTime;    /*!< Sampling time value to be set for the selected channel.\r\n                                         Unit: ADC clock cycles\r\n                                         Conversion time is the addition of sampling time and processing time (12.5 ADC clock cycles at ADC resolution 12 bits).\r\n                                         This parameter can be a value of @ref ADC_sampling_times\r\n                                         Caution: This parameter updates the parameter property of the channel, that can be used into regular and/or injected groups.\r\n                                                  If this same channel has been previously configured in the other group (regular/injected), it will be updated to last setting.\r\n                                         Note: In case of usage of internal measurement channels (VrefInt/TempSensor),\r\n                                               sampling time constraints must be respected (sampling time can be adjusted in function of ADC clock frequency and sampling time setting)\r\n                                               Refer to device datasheet for timings values, parameters TS_vrefint, TS_temp (values rough order: 5us to 17.1us min). */\r\n  uint32_t InjectedOffset;          /*!< Defines the offset to be subtracted from the raw converted data (for channels set on injected group only).\r\n                                         Offset value must be a positive number.\r\n                                         Depending of ADC resolution selected (12, 10, 8 or 6 bits),\r\n                                         this parameter must be a number between Min_Data = 0x000 and Max_Data = 0xFFF, 0x3FF, 0xFF or 0x3F respectively. */\r\n  uint32_t InjectedNbrOfConversion; /*!< Specifies the number of ranks that will be converted within the injected group sequencer.\r\n                                         To use the injected group sequencer and convert several ranks, parameter 'ScanConvMode' must be enabled.\r\n                                         This parameter must be a number between Min_Data = 1 and Max_Data = 4.\r\n                                         Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to\r\n                                                  configure a channel on injected group can impact the configuration of other channels previously set. */\r\n  uint32_t\r\n      InjectedDiscontinuousConvMode; /*!< Specifies whether the conversions sequence of injected group is performed in Complete-sequence/Discontinuous-sequence (main sequence subdivided in successive\r\n                                        parts). Discontinuous mode is used only if sequencer is enabled (parameter 'ScanConvMode'). If sequencer is disabled, this parameter is discarded. Discontinuous\r\n                                        mode can be enabled only if continuous mode is disabled. If continuous mode is enabled, this parameter setting is discarded. This parameter can be set to ENABLE\r\n                                        or DISABLE. Note: For injected group, number of discontinuous ranks increment is fixed to one-by-one. Caution: this setting impacts the entire injected group.\r\n                                        Therefore, call of HAL_ADCEx_InjectedConfigChannel() to configure a channel on injected group can impact the configuration of other channels previously set. */\r\n  uint32_t AutoInjectedConv;         /*!< Enables or disables the selected ADC automatic injected group conversion after regular one\r\n                                          This parameter can be set to ENABLE or DISABLE.\r\n                                          Note: To use Automatic injected conversion, discontinuous mode must be disabled ('DiscontinuousConvMode' and 'InjectedDiscontinuousConvMode' set to DISABLE)\r\n                                          Note: To use Automatic injected conversion, injected group external triggers must be disabled ('ExternalTrigInjecConv' set to ADC_SOFTWARE_START)\r\n                                          Note: In case of DMA used with regular group: if DMA configured in normal mode (single shot) JAUTO will be stopped upon DMA transfer complete.\r\n                                                To maintain JAUTO always enabled, DMA must be configured in circular mode.\r\n                                          Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to\r\n                                                   configure a channel on injected group can impact the configuration of other channels previously set. */\r\n  uint32_t ExternalTrigInjecConv;    /*!< Selects the external event used to trigger the conversion start of injected group.\r\n                                          If set to ADC_INJECTED_SOFTWARE_START, external triggers are disabled.\r\n                                          If set to external trigger source, triggering is on event rising edge.\r\n                                          This parameter can be a value of @ref ADCEx_External_trigger_source_Injected\r\n                                          Note: This parameter must be modified when ADC is disabled (before ADC start conversion or after ADC stop conversion).\r\n                                                If ADC is enabled, this parameter setting is bypassed without error reporting (as it can be the expected behaviour in case of another parameter update on\r\n                                        the fly)    Caution: this setting impacts the entire injected group. Therefore, call of HAL_ADCEx_InjectedConfigChannel() to\r\n                                                   configure a channel on injected group can impact the configuration of other channels previously set. */\r\n} ADC_InjectionConfTypeDef;\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief  Structure definition of ADC multimode\r\n * @note   The setting of these parameters with function HAL_ADCEx_MultiModeConfigChannel() is conditioned to ADCs state (both ADCs of the common group).\r\n *         State of ADCs of the common group must be: disabled.\r\n */\r\ntypedef struct {\r\n  uint32_t Mode; /*!< Configures the ADC to operate in independent or multi mode.\r\n                      This parameter can be a value of @ref ADCEx_Common_mode\r\n                      Note: In dual mode, a change of channel configuration generates a restart that can produce a loss of synchronization. It is recommended to disable dual mode before any\r\n                    configuration change. Note: In case of simultaneous mode used: Exactly the same sampling time should be configured for the 2 channels that will be sampled simultaneously by ACD1\r\n                    and ADC2. Note: In case of interleaved mode used: To avoid overlap between conversions, maximum sampling time allowed is 7 ADC clock cycles for fast interleaved mode and 14 ADC\r\n                    clock cycles for slow interleaved mode. Note: Some multimode parameters are fixed on STM32F1 and can be configured on other STM32 devices with several ADC (multimode configuration\r\n                    structure can have additional parameters). The equivalences are:\r\n                              - Parameter 'DMAAccessMode': On STM32F1, this parameter is fixed to 1 DMA channel (one DMA channel for both ADC, DMA of ADC master). On other STM32 devices with several\r\n                    ADC, this is equivalent to parameter 'ADC_DMAACCESSMODE_12_10_BITS'.\r\n                              - Parameter 'TwoSamplingDelay': On STM32F1, this parameter is fixed to 7 or 14 ADC clock cycles depending on fast or slow interleaved mode selected. On other STM32\r\n                    devices with several ADC, this is equivalent to parameter 'ADC_TWOSAMPLINGDELAY_7CYCLES' (for fast interleaved mode). */\r\n\r\n} ADC_MultiModeTypeDef;\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup ADCEx_Exported_Constants ADCEx Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup ADCEx_injected_rank ADCEx rank into injected group\r\n * @{\r\n */\r\n#define ADC_INJECTED_RANK_1 0x00000001U\r\n#define ADC_INJECTED_RANK_2 0x00000002U\r\n#define ADC_INJECTED_RANK_3 0x00000003U\r\n#define ADC_INJECTED_RANK_4 0x00000004U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADCEx_External_trigger_edge_Injected ADCEx external trigger enable for injected group\r\n * @{\r\n */\r\n#define ADC_EXTERNALTRIGINJECCONV_EDGE_NONE   0x00000000U\r\n#define ADC_EXTERNALTRIGINJECCONV_EDGE_RISING ((uint32_t)ADC_CR2_JEXTTRIG)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_External_trigger_source_Regular ADC External trigger selection for regular group\r\n * @{\r\n */\r\n/*!< List of external triggers with generic trigger name, independently of    */\r\n/* ADC target, sorted by trigger name:                                        */\r\n\r\n/*!< External triggers of regular group for ADC1&ADC2 only */\r\n#define ADC_EXTERNALTRIGCONV_T1_CC1   ADC1_2_EXTERNALTRIG_T1_CC1\r\n#define ADC_EXTERNALTRIGCONV_T1_CC2   ADC1_2_EXTERNALTRIG_T1_CC2\r\n#define ADC_EXTERNALTRIGCONV_T2_CC2   ADC1_2_EXTERNALTRIG_T2_CC2\r\n#define ADC_EXTERNALTRIGCONV_T3_TRGO  ADC1_2_EXTERNALTRIG_T3_TRGO\r\n#define ADC_EXTERNALTRIGCONV_T4_CC4   ADC1_2_EXTERNALTRIG_T4_CC4\r\n#define ADC_EXTERNALTRIGCONV_EXT_IT11 ADC1_2_EXTERNALTRIG_EXT_IT11\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n/*!< External triggers of regular group for ADC3 only */\r\n#define ADC_EXTERNALTRIGCONV_T2_CC3 ADC3_EXTERNALTRIG_T2_CC3\r\n#define ADC_EXTERNALTRIGCONV_T3_CC1 ADC3_EXTERNALTRIG_T3_CC1\r\n#define ADC_EXTERNALTRIGCONV_T5_CC1 ADC3_EXTERNALTRIG_T5_CC1\r\n#define ADC_EXTERNALTRIGCONV_T5_CC3 ADC3_EXTERNALTRIG_T5_CC3\r\n#define ADC_EXTERNALTRIGCONV_T8_CC1 ADC3_EXTERNALTRIG_T8_CC1\r\n#endif /* STM32F103xE || defined STM32F103xG */\r\n\r\n/*!< External triggers of regular group for all ADC instances */\r\n#define ADC_EXTERNALTRIGCONV_T1_CC3 ADC1_2_3_EXTERNALTRIG_T1_CC3\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n/*!< Note: TIM8_TRGO is available on ADC1 and ADC2 only in high-density and   */\r\n/*         XL-density devices.                                                */\r\n/*         To use it on ADC or ADC2, a remap of trigger must be done from     */\r\n/*         EXTI line 11 to TIM8_TRGO with macro:                              */\r\n/*           __HAL_AFIO_REMAP_ADC1_ETRGREG_ENABLE()                           */\r\n/*           __HAL_AFIO_REMAP_ADC2_ETRGREG_ENABLE()                           */\r\n\r\n/* Note for internal constant value management: If TIM8_TRGO is available,    */\r\n/* its definition is set to value for ADC1&ADC2 by default and changed to     */\r\n/* value for ADC3 by HAL ADC driver if ADC3 is selected.                      */\r\n#define ADC_EXTERNALTRIGCONV_T8_TRGO ADC1_2_EXTERNALTRIG_T8_TRGO\r\n#endif /* STM32F101xE || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#define ADC_SOFTWARE_START ADC1_2_3_SWSTART\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADCEx_External_trigger_source_Injected ADCEx External trigger selection for injected group\r\n * @{\r\n */\r\n/*!< List of external triggers with generic trigger name, independently of    */\r\n/* ADC target, sorted by trigger name:                                        */\r\n\r\n/*!< External triggers of injected group for ADC1&ADC2 only */\r\n#define ADC_EXTERNALTRIGINJECCONV_T2_TRGO  ADC1_2_EXTERNALTRIGINJEC_T2_TRGO\r\n#define ADC_EXTERNALTRIGINJECCONV_T2_CC1   ADC1_2_EXTERNALTRIGINJEC_T2_CC1\r\n#define ADC_EXTERNALTRIGINJECCONV_T3_CC4   ADC1_2_EXTERNALTRIGINJEC_T3_CC4\r\n#define ADC_EXTERNALTRIGINJECCONV_T4_TRGO  ADC1_2_EXTERNALTRIGINJEC_T4_TRGO\r\n#define ADC_EXTERNALTRIGINJECCONV_EXT_IT15 ADC1_2_EXTERNALTRIGINJEC_EXT_IT15\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n/*!< External triggers of injected group for ADC3 only */\r\n#define ADC_EXTERNALTRIGINJECCONV_T4_CC3  ADC3_EXTERNALTRIGINJEC_T4_CC3\r\n#define ADC_EXTERNALTRIGINJECCONV_T8_CC2  ADC3_EXTERNALTRIGINJEC_T8_CC2\r\n#define ADC_EXTERNALTRIGINJECCONV_T5_TRGO ADC3_EXTERNALTRIGINJEC_T5_TRGO\r\n#define ADC_EXTERNALTRIGINJECCONV_T5_CC4  ADC3_EXTERNALTRIGINJEC_T5_CC4\r\n#endif /* STM32F103xE || defined STM32F103xG */\r\n\r\n/*!< External triggers of injected group for all ADC instances */\r\n#define ADC_EXTERNALTRIGINJECCONV_T1_CC4  ADC1_2_3_EXTERNALTRIGINJEC_T1_CC4\r\n#define ADC_EXTERNALTRIGINJECCONV_T1_TRGO ADC1_2_3_EXTERNALTRIGINJEC_T1_TRGO\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n/*!< Note: TIM8_CC4 is available on ADC1 and ADC2 only in high-density and    */\r\n/*         XL-density devices.                                                */\r\n/*         To use it on ADC1 or ADC2, a remap of trigger must be done from    */\r\n/*         EXTI line 11 to TIM8_CC4 with macro:                               */\r\n/*           __HAL_AFIO_REMAP_ADC1_ETRGINJ_ENABLE()                           */\r\n/*           __HAL_AFIO_REMAP_ADC2_ETRGINJ_ENABLE()                           */\r\n\r\n/* Note for internal constant value management: If TIM8_CC4 is available,     */\r\n/* its definition is set to value for ADC1&ADC2 by default and changed to     */\r\n/* value for ADC3 by HAL ADC driver if ADC3 is selected.                      */\r\n#define ADC_EXTERNALTRIGINJECCONV_T8_CC4 ADC1_2_EXTERNALTRIGINJEC_T8_CC4\r\n#endif /* STM32F101xE || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#define ADC_INJECTED_SOFTWARE_START ADC1_2_3_JSWSTART\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/** @defgroup ADCEx_Common_mode ADC Extended Dual ADC Mode\r\n * @{\r\n */\r\n#define ADC_MODE_INDEPENDENT               0x00000000U                     /*!< ADC dual mode disabled (ADC independent mode) */\r\n#define ADC_DUALMODE_REGSIMULT_INJECSIMULT ((uint32_t)(ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Combined regular simultaneous + injected simultaneous mode, on groups regular and injected */\r\n#define ADC_DUALMODE_REGSIMULT_ALTERTRIG   ((uint32_t)(ADC_CR1_DUALMOD_1)) /*!< ADC dual mode enabled: Combined regular simultaneous + alternate trigger mode, on groups regular and injected */\r\n#define ADC_DUALMODE_INJECSIMULT_INTERLFAST                                                                                                                                                          \\\r\n  ((uint32_t)(ADC_CR1_DUALMOD_1 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Combined injected simultaneous + fast interleaved mode, on groups regular and injected (delay between ADC sampling \\\r\n                                                         phases: 7 ADC clock cycles (equivalent to parameter \"TwoSamplingDelay\" set to \"ADC_TWOSAMPLINGDELAY_7CYCLES\" on other STM32 devices)) */\r\n#define ADC_DUALMODE_INJECSIMULT_INTERLSLOW                                                                                                                                                           \\\r\n  ((uint32_t)(ADC_CR1_DUALMOD_2)) /*!< ADC dual mode enabled: Combined injected simultaneous + slow Interleaved mode, on groups regular and injected (delay between ADC sampling phases: 14 ADC clock \\\r\n                                     cycles (equivalent to parameter \"TwoSamplingDelay\" set to \"ADC_TWOSAMPLINGDELAY_7CYCLES\" on other STM32 devices)) */\r\n#define ADC_DUALMODE_INJECSIMULT ((uint32_t)(ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Injected simultaneous mode, on group injected */\r\n#define ADC_DUALMODE_REGSIMULT   ((uint32_t)(ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_1)) /*!< ADC dual mode enabled: Regular simultaneous mode, on group regular */\r\n#define ADC_DUALMODE_INTERLFAST                                                                                                                                                                      \\\r\n  ((uint32_t)(ADC_CR1_DUALMOD_2 | ADC_CR1_DUALMOD_1 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Fast interleaved mode, on group regular (delay between ADC sampling phases: 7 ADC clock cycles \\\r\n                                                                             (equivalent to parameter \"TwoSamplingDelay\" set to \"ADC_TWOSAMPLINGDELAY_7CYCLES\" on other STM32 devices)) */\r\n#define ADC_DUALMODE_INTERLSLOW                                                                                                                                                        \\\r\n  ((uint32_t)(ADC_CR1_DUALMOD_3)) /*!< ADC dual mode enabled: Slow interleaved mode, on group regular (delay between ADC sampling phases: 14 ADC clock cycles (equivalent to parameter \\\r\n                                     \"TwoSamplingDelay\" set to \"ADC_TWOSAMPLINGDELAY_7CYCLES\" on other STM32 devices)) */\r\n#define ADC_DUALMODE_ALTERTRIG ((uint32_t)(ADC_CR1_DUALMOD_3 | ADC_CR1_DUALMOD_0)) /*!< ADC dual mode enabled: Alternate trigger mode, on group injected */\r\n/**\r\n * @}\r\n */\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private constants ---------------------------------------------------------*/\r\n\r\n/** @addtogroup ADCEx_Private_Constants ADCEx Private Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup ADCEx_Internal_HAL_driver_Ext_trig_src_Regular ADC Extended Internal HAL driver trigger selection for regular group\r\n * @{\r\n */\r\n/* List of external triggers of regular group for ADC1, ADC2, ADC3 (if ADC    */\r\n/* instance is available on the selected device).                             */\r\n/* (used internally by HAL driver. To not use into HAL structure parameters)  */\r\n\r\n/* External triggers of regular group for ADC1&ADC2 (if ADCx available) */\r\n#define ADC1_2_EXTERNALTRIG_T1_CC1   0x00000000U\r\n#define ADC1_2_EXTERNALTRIG_T1_CC2   ((uint32_t)(ADC_CR2_EXTSEL_0))\r\n#define ADC1_2_EXTERNALTRIG_T2_CC2   ((uint32_t)(ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))\r\n#define ADC1_2_EXTERNALTRIG_T3_TRGO  ((uint32_t)(ADC_CR2_EXTSEL_2))\r\n#define ADC1_2_EXTERNALTRIG_T4_CC4   ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_0))\r\n#define ADC1_2_EXTERNALTRIG_EXT_IT11 ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1))\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/* Note: TIM8_TRGO is available on ADC1 and ADC2 only in high-density and     */\r\n/* XL-density devices.                                                        */\r\n#define ADC1_2_EXTERNALTRIG_T8_TRGO ADC1_2_EXTERNALTRIG_EXT_IT11\r\n#endif\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n/* External triggers of regular group for ADC3 */\r\n#define ADC3_EXTERNALTRIG_T3_CC1  ADC1_2_EXTERNALTRIG_T1_CC1\r\n#define ADC3_EXTERNALTRIG_T2_CC3  ADC1_2_EXTERNALTRIG_T1_CC2\r\n#define ADC3_EXTERNALTRIG_T8_CC1  ADC1_2_EXTERNALTRIG_T2_CC2\r\n#define ADC3_EXTERNALTRIG_T8_TRGO ADC1_2_EXTERNALTRIG_T3_TRGO\r\n#define ADC3_EXTERNALTRIG_T5_CC1  ADC1_2_EXTERNALTRIG_T4_CC4\r\n#define ADC3_EXTERNALTRIG_T5_CC3  ADC1_2_EXTERNALTRIG_EXT_IT11\r\n#endif\r\n\r\n/* External triggers of regular group for ADC1&ADC2&ADC3 (if ADCx available) */\r\n#define ADC1_2_3_EXTERNALTRIG_T1_CC3 ((uint32_t)(ADC_CR2_EXTSEL_1))\r\n#define ADC1_2_3_SWSTART             ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADCEx_Internal_HAL_driver_Ext_trig_src_Injected ADC Extended Internal HAL driver trigger selection for injected group\r\n * @{\r\n */\r\n/* List of external triggers of injected group for ADC1, ADC2, ADC3 (if ADC    */\r\n/* instance is available on the selected device).                             */\r\n/* (used internally by HAL driver. To not use into HAL structure parameters)  */\r\n\r\n/* External triggers of injected group for ADC1&ADC2 (if ADCx available) */\r\n#define ADC1_2_EXTERNALTRIGINJEC_T2_TRGO  ((uint32_t)(ADC_CR2_JEXTSEL_1))\r\n#define ADC1_2_EXTERNALTRIGINJEC_T2_CC1   ((uint32_t)(ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0))\r\n#define ADC1_2_EXTERNALTRIGINJEC_T3_CC4   ((uint32_t)(ADC_CR2_JEXTSEL_2))\r\n#define ADC1_2_EXTERNALTRIGINJEC_T4_TRGO  ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_0))\r\n#define ADC1_2_EXTERNALTRIGINJEC_EXT_IT15 ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1))\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/* Note: TIM8_CC4 is available on ADC1 and ADC2 only in high-density and      */\r\n/* XL-density devices.                                                        */\r\n#define ADC1_2_EXTERNALTRIGINJEC_T8_CC4 ADC1_2_EXTERNALTRIGINJEC_EXT_IT15\r\n#endif\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n/* External triggers of injected group for ADC3 */\r\n#define ADC3_EXTERNALTRIGINJEC_T4_CC3  ADC1_2_EXTERNALTRIGINJEC_T2_TRGO\r\n#define ADC3_EXTERNALTRIGINJEC_T8_CC2  ADC1_2_EXTERNALTRIGINJEC_T2_CC1\r\n#define ADC3_EXTERNALTRIGINJEC_T8_CC4  ADC1_2_EXTERNALTRIGINJEC_T3_CC4\r\n#define ADC3_EXTERNALTRIGINJEC_T5_TRGO ADC1_2_EXTERNALTRIGINJEC_T4_TRGO\r\n#define ADC3_EXTERNALTRIGINJEC_T5_CC4  ADC1_2_EXTERNALTRIGINJEC_EXT_IT15\r\n#endif /* STM32F103xE || defined STM32F103xG */\r\n\r\n/* External triggers of injected group for ADC1&ADC2&ADC3 (if ADCx available) */\r\n#define ADC1_2_3_EXTERNALTRIGINJEC_T1_TRGO 0x00000000U\r\n#define ADC1_2_3_EXTERNALTRIGINJEC_T1_CC4  ((uint32_t)(ADC_CR2_JEXTSEL_0))\r\n#define ADC1_2_3_JSWSTART                  ((uint32_t)(ADC_CR2_JEXTSEL_2 | ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_0))\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n\r\n/** @defgroup ADCEx_Private_Macro ADCEx Private Macro\r\n * @{\r\n */\r\n/* Macro reserved for internal HAL driver usage, not intended to be used in   */\r\n/* code of final user.                                                        */\r\n\r\n/**\r\n * @brief For devices with 3 ADCs: Defines the external trigger source\r\n *        for regular group according to ADC into common group ADC1&ADC2 or\r\n *        ADC3 (some triggers with same source have different value to\r\n *        be programmed into ADC EXTSEL bits of CR2 register).\r\n *        For devices with 2 ADCs or less: this macro makes no change.\r\n * @param __HANDLE__: ADC handle\r\n * @param __EXT_TRIG_CONV__: External trigger selected for regular group.\r\n * @retval External trigger to be programmed into EXTSEL bits of CR2 register\r\n */\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define ADC_CFGR_EXTSEL(__HANDLE__, __EXT_TRIG_CONV__) \\\r\n  (((((__HANDLE__)->Instance) == ADC3)) ? (((__EXT_TRIG_CONV__) == ADC_EXTERNALTRIGCONV_T8_TRGO) ? (ADC3_EXTERNALTRIG_T8_TRGO) : (__EXT_TRIG_CONV__)) : (__EXT_TRIG_CONV__))\r\n#else\r\n#define ADC_CFGR_EXTSEL(__HANDLE__, __EXT_TRIG_CONV__) (__EXT_TRIG_CONV__)\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n/**\r\n * @brief For devices with 3 ADCs: Defines the external trigger source\r\n *        for injected group according to ADC into common group ADC1&ADC2 or\r\n *        ADC3 (some triggers with same source have different value to\r\n *        be programmed into ADC JEXTSEL bits of CR2 register).\r\n *        For devices with 2 ADCs or less: this macro makes no change.\r\n * @param __HANDLE__: ADC handle\r\n * @param __EXT_TRIG_INJECTCONV__: External trigger selected for injected group.\r\n * @retval External trigger to be programmed into JEXTSEL bits of CR2 register\r\n */\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define ADC_CFGR_JEXTSEL(__HANDLE__, __EXT_TRIG_INJECTCONV__) \\\r\n  (((((__HANDLE__)->Instance) == ADC3)) ? (((__EXT_TRIG_INJECTCONV__) == ADC_EXTERNALTRIGINJECCONV_T8_CC4) ? (ADC3_EXTERNALTRIGINJEC_T8_CC4) : (__EXT_TRIG_INJECTCONV__)) : (__EXT_TRIG_INJECTCONV__))\r\n#else\r\n#define ADC_CFGR_JEXTSEL(__HANDLE__, __EXT_TRIG_INJECTCONV__) (__EXT_TRIG_INJECTCONV__)\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n/**\r\n * @brief Verification if multimode is enabled for the selected ADC (multimode ADC master or ADC slave) (applicable for devices with several ADCs)\r\n * @param __HANDLE__: ADC handle\r\n * @retval Multimode state: RESET if multimode is disabled, other value if multimode is enabled\r\n */\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define ADC_MULTIMODE_IS_ENABLE(__HANDLE__) (((((__HANDLE__)->Instance) == ADC1) || (((__HANDLE__)->Instance) == ADC2)) ? (ADC1->CR1 & ADC_CR1_DUALMOD) : (RESET))\r\n#else\r\n#define ADC_MULTIMODE_IS_ENABLE(__HANDLE__) (RESET)\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @brief Verification of condition for ADC start conversion: ADC must be in non-multimode, or multimode with handle of ADC master (applicable for devices with several ADCs)\r\n * @param __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define ADC_NONMULTIMODE_OR_MULTIMODEMASTER(__HANDLE__) (((((__HANDLE__)->Instance) == ADC2)) ? ((ADC1->CR1 & ADC_CR1_DUALMOD) == RESET) : (!RESET))\r\n#else\r\n#define ADC_NONMULTIMODE_OR_MULTIMODEMASTER(__HANDLE__) (!RESET)\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @brief Check ADC multimode setting: In case of multimode, check whether ADC master of the selected ADC has feature auto-injection enabled (applicable for devices with several ADCs)\r\n * @param __HANDLE__: ADC handle\r\n * @retval None\r\n */\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define ADC_MULTIMODE_AUTO_INJECTED(__HANDLE__) (((((__HANDLE__)->Instance) == ADC1) || (((__HANDLE__)->Instance) == ADC2)) ? (ADC1->CR1 & ADC_CR1_JAUTO) : (RESET))\r\n#else\r\n#define ADC_MULTIMODE_AUTO_INJECTED(__HANDLE__) (RESET)\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief Set handle of the other ADC sharing the common multimode settings\r\n * @param __HANDLE__: ADC handle\r\n * @param __HANDLE_OTHER_ADC__: other ADC handle\r\n * @retval None\r\n */\r\n#define ADC_COMMON_ADC_OTHER(__HANDLE__, __HANDLE_OTHER_ADC__) ((__HANDLE_OTHER_ADC__)->Instance = ADC2)\r\n\r\n/**\r\n * @brief Set handle of the ADC slave associated to the ADC master\r\n * On STM32F1 devices, ADC slave is always ADC2 (this can be different\r\n * on other STM32 devices)\r\n * @param __HANDLE_MASTER__: ADC master handle\r\n * @param __HANDLE_SLAVE__: ADC slave handle\r\n * @retval None\r\n */\r\n#define ADC_MULTI_SLAVE(__HANDLE_MASTER__, __HANDLE_SLAVE__) ((__HANDLE_SLAVE__)->Instance = ADC2)\r\n\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n#define IS_ADC_INJECTED_RANK(CHANNEL) (((CHANNEL) == ADC_INJECTED_RANK_1) || ((CHANNEL) == ADC_INJECTED_RANK_2) || ((CHANNEL) == ADC_INJECTED_RANK_3) || ((CHANNEL) == ADC_INJECTED_RANK_4))\r\n\r\n#define IS_ADC_EXTTRIGINJEC_EDGE(EDGE) (((EDGE) == ADC_EXTERNALTRIGINJECCONV_EDGE_NONE) || ((EDGE) == ADC_EXTERNALTRIGINJECCONV_EDGE_RISING))\r\n\r\n/** @defgroup ADCEx_injected_nb_conv_verification ADCEx injected nb conv verification\r\n * @{\r\n */\r\n#define IS_ADC_INJECTED_NB_CONV(LENGTH) (((LENGTH) >= 1U) && ((LENGTH) <= 4U))\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) \\\r\n    || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define IS_ADC_EXTTRIG(REGTRIG)                                                                                                                                                          \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11) || ((REGTRIG) == ADC_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F101xE)\r\n#define IS_ADC_EXTTRIG(REGTRIG)                                                                                                                                                          \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_TRGO) || ((REGTRIG) == ADC_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F101xG)\r\n#define IS_ADC_EXTTRIG(REGTRIG)                                                                                                                                                          \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11) || ((REGTRIG) == ADC_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define IS_ADC_EXTTRIG(REGTRIG)                                                                                                                                                              \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_TRGO)     \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T4_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_EXT_IT11) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T3_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T2_CC3) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T5_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T5_CC3) || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T1_CC3)   \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGCONV_T8_TRGO) || ((REGTRIG) == ADC_SOFTWARE_START))\r\n#endif\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) \\\r\n    || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define IS_ADC_EXTTRIGINJEC(REGTRIG)                                                                                                                           \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)      \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || ((REGTRIG) == ADC_INJECTED_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F101xE)\r\n#define IS_ADC_EXTTRIGINJEC(REGTRIG)                                                                                                                           \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)      \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC4) || ((REGTRIG) == ADC_INJECTED_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F101xG)\r\n#define IS_ADC_EXTTRIGINJEC(REGTRIG)                                                                                                                           \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)      \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO) || ((REGTRIG) == ADC_INJECTED_SOFTWARE_START))\r\n#endif\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define IS_ADC_EXTTRIGINJEC(REGTRIG)                                                                                                                           \\\r\n  (((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T2_CC1) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T3_CC4)      \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_TRGO) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_EXT_IT15) \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T4_CC3) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC2) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_TRGO)   \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T5_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_CC4) || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T1_TRGO)   \\\r\n   || ((REGTRIG) == ADC_EXTERNALTRIGINJECCONV_T8_CC4) || ((REGTRIG) == ADC_INJECTED_SOFTWARE_START))\r\n#endif\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define IS_ADC_MODE(MODE)                                                                                                                                                                \\\r\n  (((MODE) == ADC_MODE_INDEPENDENT) || ((MODE) == ADC_DUALMODE_REGSIMULT_INJECSIMULT) || ((MODE) == ADC_DUALMODE_REGSIMULT_ALTERTRIG) || ((MODE) == ADC_DUALMODE_INJECSIMULT_INTERLFAST) \\\r\n   || ((MODE) == ADC_DUALMODE_INJECSIMULT_INTERLSLOW) || ((MODE) == ADC_DUALMODE_INJECSIMULT) || ((MODE) == ADC_DUALMODE_REGSIMULT) || ((MODE) == ADC_DUALMODE_INTERLFAST)               \\\r\n   || ((MODE) == ADC_DUALMODE_INTERLSLOW) || ((MODE) == ADC_DUALMODE_ALTERTRIG))\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup ADCEx_Exported_Functions\r\n * @{\r\n */\r\n\r\n/* IO operation functions  *****************************************************/\r\n/** @addtogroup ADCEx_Exported_Functions_Group1\r\n * @{\r\n */\r\n\r\n/* ADC calibration */\r\nHAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc);\r\n\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout);\r\n\r\n/* Non-blocking mode: Interruption */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef *hadc);\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef *hadc);\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/* ADC multimode */\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length);\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef *hadc);\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/* ADC retrieve conversion value intended to be used with polling or interruption */\r\nuint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef *hadc, uint32_t InjectedRank);\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\nuint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef *hadc);\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/* ADC IRQHandler and Callbacks used in non-blocking modes (Interruption) */\r\nvoid HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc);\r\n/**\r\n * @}\r\n */\r\n\r\n/* Peripheral Control functions ***********************************************/\r\n/** @addtogroup ADCEx_Exported_Functions_Group2\r\n * @{\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef *hadc, ADC_InjectionConfTypeDef *sConfigInjected);\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode);\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_ADC_EX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_cortex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_cortex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of CORTEX HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_CORTEX_H\r\n#define __STM32F1xx_HAL_CORTEX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup CORTEX\r\n * @{\r\n */\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup CORTEX_Exported_Types Cortex Exported Types\r\n * @{\r\n */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/** @defgroup CORTEX_MPU_Region_Initialization_Structure_definition MPU Region Initialization Structure Definition\r\n * @brief  MPU Region initialization structure\r\n * @{\r\n */\r\ntypedef struct {\r\n  uint8_t Enable;           /*!< Specifies the status of the region.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Region_Enable                 */\r\n  uint8_t Number;           /*!< Specifies the number of the region to protect.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Region_Number                 */\r\n  uint32_t BaseAddress;     /*!< Specifies the base address of the region to protect.                           */\r\n  uint8_t  Size;            /*!< Specifies the size of the region to protect.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Region_Size                   */\r\n  uint8_t SubRegionDisable; /*!< Specifies the number of the subregion protection to disable.\r\n                                 This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF    */\r\n  uint8_t TypeExtField;     /*!< Specifies the TEX field level.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_TEX_Levels                    */\r\n  uint8_t AccessPermission; /*!< Specifies the region access permission type.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Region_Permission_Attributes  */\r\n  uint8_t DisableExec;      /*!< Specifies the instruction access status.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Instruction_Access            */\r\n  uint8_t IsShareable;      /*!< Specifies the shareability status of the protected region.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Access_Shareable              */\r\n  uint8_t IsCacheable;      /*!< Specifies the cacheable status of the region protected.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Access_Cacheable              */\r\n  uint8_t IsBufferable;     /*!< Specifies the bufferable status of the protected region.\r\n                                 This parameter can be a value of @ref CORTEX_MPU_Access_Bufferable             */\r\n} MPU_Region_InitTypeDef;\r\n/**\r\n * @}\r\n */\r\n#endif /* __MPU_PRESENT */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup CORTEX_Exported_Constants CORTEX Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup CORTEX_Preemption_Priority_Group CORTEX Preemption Priority Group\r\n * @{\r\n */\r\n#define NVIC_PRIORITYGROUP_0                       \\\r\n  0x00000007U /*!< 0 bits for pre-emption priority \\\r\n                   4 bits for subpriority */\r\n#define NVIC_PRIORITYGROUP_1                       \\\r\n  0x00000006U /*!< 1 bits for pre-emption priority \\\r\n                   3 bits for subpriority */\r\n#define NVIC_PRIORITYGROUP_2                       \\\r\n  0x00000005U /*!< 2 bits for pre-emption priority \\\r\n                   2 bits for subpriority */\r\n#define NVIC_PRIORITYGROUP_3                       \\\r\n  0x00000004U /*!< 3 bits for pre-emption priority \\\r\n                   1 bits for subpriority */\r\n#define NVIC_PRIORITYGROUP_4                       \\\r\n  0x00000003U /*!< 4 bits for pre-emption priority \\\r\n                   0 bits for subpriority */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_SysTick_clock_source CORTEX _SysTick clock source\r\n * @{\r\n */\r\n#define SYSTICK_CLKSOURCE_HCLK_DIV8 0x00000000U\r\n#define SYSTICK_CLKSOURCE_HCLK      0x00000004U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if (__MPU_PRESENT == 1)\r\n/** @defgroup CORTEX_MPU_HFNMI_PRIVDEF_Control MPU HFNMI and PRIVILEGED Access control\r\n * @{\r\n */\r\n#define MPU_HFNMI_PRIVDEF_NONE 0x00000000U\r\n#define MPU_HARDFAULT_NMI      MPU_CTRL_HFNMIENA_Msk\r\n#define MPU_PRIVILEGED_DEFAULT MPU_CTRL_PRIVDEFENA_Msk\r\n#define MPU_HFNMI_PRIVDEF      (MPU_CTRL_HFNMIENA_Msk | MPU_CTRL_PRIVDEFENA_Msk)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Region_Enable CORTEX MPU Region Enable\r\n * @{\r\n */\r\n#define MPU_REGION_ENABLE  ((uint8_t)0x01)\r\n#define MPU_REGION_DISABLE ((uint8_t)0x00)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Instruction_Access CORTEX MPU Instruction Access\r\n * @{\r\n */\r\n#define MPU_INSTRUCTION_ACCESS_ENABLE  ((uint8_t)0x00)\r\n#define MPU_INSTRUCTION_ACCESS_DISABLE ((uint8_t)0x01)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Access_Shareable CORTEX MPU Instruction Access Shareable\r\n * @{\r\n */\r\n#define MPU_ACCESS_SHAREABLE     ((uint8_t)0x01)\r\n#define MPU_ACCESS_NOT_SHAREABLE ((uint8_t)0x00)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Access_Cacheable CORTEX MPU Instruction Access Cacheable\r\n * @{\r\n */\r\n#define MPU_ACCESS_CACHEABLE     ((uint8_t)0x01)\r\n#define MPU_ACCESS_NOT_CACHEABLE ((uint8_t)0x00)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Access_Bufferable CORTEX MPU Instruction Access Bufferable\r\n * @{\r\n */\r\n#define MPU_ACCESS_BUFFERABLE     ((uint8_t)0x01)\r\n#define MPU_ACCESS_NOT_BUFFERABLE ((uint8_t)0x00)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_TEX_Levels MPU TEX Levels\r\n * @{\r\n */\r\n#define MPU_TEX_LEVEL0 ((uint8_t)0x00)\r\n#define MPU_TEX_LEVEL1 ((uint8_t)0x01)\r\n#define MPU_TEX_LEVEL2 ((uint8_t)0x02)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Region_Size CORTEX MPU Region Size\r\n * @{\r\n */\r\n#define MPU_REGION_SIZE_32B   ((uint8_t)0x04)\r\n#define MPU_REGION_SIZE_64B   ((uint8_t)0x05)\r\n#define MPU_REGION_SIZE_128B  ((uint8_t)0x06)\r\n#define MPU_REGION_SIZE_256B  ((uint8_t)0x07)\r\n#define MPU_REGION_SIZE_512B  ((uint8_t)0x08)\r\n#define MPU_REGION_SIZE_1KB   ((uint8_t)0x09)\r\n#define MPU_REGION_SIZE_2KB   ((uint8_t)0x0A)\r\n#define MPU_REGION_SIZE_4KB   ((uint8_t)0x0B)\r\n#define MPU_REGION_SIZE_8KB   ((uint8_t)0x0C)\r\n#define MPU_REGION_SIZE_16KB  ((uint8_t)0x0D)\r\n#define MPU_REGION_SIZE_32KB  ((uint8_t)0x0E)\r\n#define MPU_REGION_SIZE_64KB  ((uint8_t)0x0F)\r\n#define MPU_REGION_SIZE_128KB ((uint8_t)0x10)\r\n#define MPU_REGION_SIZE_256KB ((uint8_t)0x11)\r\n#define MPU_REGION_SIZE_512KB ((uint8_t)0x12)\r\n#define MPU_REGION_SIZE_1MB   ((uint8_t)0x13)\r\n#define MPU_REGION_SIZE_2MB   ((uint8_t)0x14)\r\n#define MPU_REGION_SIZE_4MB   ((uint8_t)0x15)\r\n#define MPU_REGION_SIZE_8MB   ((uint8_t)0x16)\r\n#define MPU_REGION_SIZE_16MB  ((uint8_t)0x17)\r\n#define MPU_REGION_SIZE_32MB  ((uint8_t)0x18)\r\n#define MPU_REGION_SIZE_64MB  ((uint8_t)0x19)\r\n#define MPU_REGION_SIZE_128MB ((uint8_t)0x1A)\r\n#define MPU_REGION_SIZE_256MB ((uint8_t)0x1B)\r\n#define MPU_REGION_SIZE_512MB ((uint8_t)0x1C)\r\n#define MPU_REGION_SIZE_1GB   ((uint8_t)0x1D)\r\n#define MPU_REGION_SIZE_2GB   ((uint8_t)0x1E)\r\n#define MPU_REGION_SIZE_4GB   ((uint8_t)0x1F)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Region_Permission_Attributes CORTEX MPU Region Permission Attributes\r\n * @{\r\n */\r\n#define MPU_REGION_NO_ACCESS   ((uint8_t)0x00)\r\n#define MPU_REGION_PRIV_RW     ((uint8_t)0x01)\r\n#define MPU_REGION_PRIV_RW_URO ((uint8_t)0x02)\r\n#define MPU_REGION_FULL_ACCESS ((uint8_t)0x03)\r\n#define MPU_REGION_PRIV_RO     ((uint8_t)0x05)\r\n#define MPU_REGION_PRIV_RO_URO ((uint8_t)0x06)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_MPU_Region_Number CORTEX MPU Region Number\r\n * @{\r\n */\r\n#define MPU_REGION_NUMBER0 ((uint8_t)0x00)\r\n#define MPU_REGION_NUMBER1 ((uint8_t)0x01)\r\n#define MPU_REGION_NUMBER2 ((uint8_t)0x02)\r\n#define MPU_REGION_NUMBER3 ((uint8_t)0x03)\r\n#define MPU_REGION_NUMBER4 ((uint8_t)0x04)\r\n#define MPU_REGION_NUMBER5 ((uint8_t)0x05)\r\n#define MPU_REGION_NUMBER6 ((uint8_t)0x06)\r\n#define MPU_REGION_NUMBER7 ((uint8_t)0x07)\r\n/**\r\n * @}\r\n */\r\n#endif /* __MPU_PRESENT */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported Macros -----------------------------------------------------------*/\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup CORTEX_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup CORTEX_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* Initialization and de-initialization functions *****************************/\r\nvoid     HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup);\r\nvoid     HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority);\r\nvoid     HAL_NVIC_EnableIRQ(IRQn_Type IRQn);\r\nvoid     HAL_NVIC_DisableIRQ(IRQn_Type IRQn);\r\nvoid     HAL_NVIC_SystemReset(void);\r\nuint32_t HAL_SYSTICK_Config(uint32_t TicksNumb);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup CORTEX_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* Peripheral Control functions ***********************************************/\r\nuint32_t HAL_NVIC_GetPriorityGrouping(void);\r\nvoid     HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t *pPreemptPriority, uint32_t *pSubPriority);\r\nuint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn);\r\nvoid     HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn);\r\nvoid     HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn);\r\nuint32_t HAL_NVIC_GetActive(IRQn_Type IRQn);\r\nvoid     HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource);\r\nvoid     HAL_SYSTICK_IRQHandler(void);\r\nvoid     HAL_SYSTICK_Callback(void);\r\n\r\n#if (__MPU_PRESENT == 1U)\r\nvoid HAL_MPU_Enable(uint32_t MPU_Control);\r\nvoid HAL_MPU_Disable(void);\r\nvoid HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init);\r\n#endif /* __MPU_PRESENT */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private types -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private constants ---------------------------------------------------------*/\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup CORTEX_Private_Macros CORTEX Private Macros\r\n * @{\r\n */\r\n#define IS_NVIC_PRIORITY_GROUP(GROUP) \\\r\n  (((GROUP) == NVIC_PRIORITYGROUP_0) || ((GROUP) == NVIC_PRIORITYGROUP_1) || ((GROUP) == NVIC_PRIORITYGROUP_2) || ((GROUP) == NVIC_PRIORITYGROUP_3) || ((GROUP) == NVIC_PRIORITYGROUP_4))\r\n\r\n#define IS_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < 0x10U)\r\n\r\n#define IS_NVIC_SUB_PRIORITY(PRIORITY) ((PRIORITY) < 0x10U)\r\n\r\n#define IS_NVIC_DEVICE_IRQ(IRQ) ((IRQ) >= (IRQn_Type)0x00U)\r\n\r\n#define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SYSTICK_CLKSOURCE_HCLK) || ((SOURCE) == SYSTICK_CLKSOURCE_HCLK_DIV8))\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n#define IS_MPU_REGION_ENABLE(STATE) (((STATE) == MPU_REGION_ENABLE) || ((STATE) == MPU_REGION_DISABLE))\r\n\r\n#define IS_MPU_INSTRUCTION_ACCESS(STATE) (((STATE) == MPU_INSTRUCTION_ACCESS_ENABLE) || ((STATE) == MPU_INSTRUCTION_ACCESS_DISABLE))\r\n\r\n#define IS_MPU_ACCESS_SHAREABLE(STATE) (((STATE) == MPU_ACCESS_SHAREABLE) || ((STATE) == MPU_ACCESS_NOT_SHAREABLE))\r\n\r\n#define IS_MPU_ACCESS_CACHEABLE(STATE) (((STATE) == MPU_ACCESS_CACHEABLE) || ((STATE) == MPU_ACCESS_NOT_CACHEABLE))\r\n\r\n#define IS_MPU_ACCESS_BUFFERABLE(STATE) (((STATE) == MPU_ACCESS_BUFFERABLE) || ((STATE) == MPU_ACCESS_NOT_BUFFERABLE))\r\n\r\n#define IS_MPU_TEX_LEVEL(TYPE) (((TYPE) == MPU_TEX_LEVEL0) || ((TYPE) == MPU_TEX_LEVEL1) || ((TYPE) == MPU_TEX_LEVEL2))\r\n\r\n#define IS_MPU_REGION_PERMISSION_ATTRIBUTE(TYPE)                                                                                                                                    \\\r\n  (((TYPE) == MPU_REGION_NO_ACCESS) || ((TYPE) == MPU_REGION_PRIV_RW) || ((TYPE) == MPU_REGION_PRIV_RW_URO) || ((TYPE) == MPU_REGION_FULL_ACCESS) || ((TYPE) == MPU_REGION_PRIV_RO) \\\r\n   || ((TYPE) == MPU_REGION_PRIV_RO_URO))\r\n\r\n#define IS_MPU_REGION_NUMBER(NUMBER)                                                                                                                                                \\\r\n  (((NUMBER) == MPU_REGION_NUMBER0) || ((NUMBER) == MPU_REGION_NUMBER1) || ((NUMBER) == MPU_REGION_NUMBER2) || ((NUMBER) == MPU_REGION_NUMBER3) || ((NUMBER) == MPU_REGION_NUMBER4) \\\r\n   || ((NUMBER) == MPU_REGION_NUMBER5) || ((NUMBER) == MPU_REGION_NUMBER6) || ((NUMBER) == MPU_REGION_NUMBER7))\r\n\r\n#define IS_MPU_REGION_SIZE(SIZE)                                                                                                                                                          \\\r\n  (((SIZE) == MPU_REGION_SIZE_32B) || ((SIZE) == MPU_REGION_SIZE_64B) || ((SIZE) == MPU_REGION_SIZE_128B) || ((SIZE) == MPU_REGION_SIZE_256B) || ((SIZE) == MPU_REGION_SIZE_512B)         \\\r\n   || ((SIZE) == MPU_REGION_SIZE_1KB) || ((SIZE) == MPU_REGION_SIZE_2KB) || ((SIZE) == MPU_REGION_SIZE_4KB) || ((SIZE) == MPU_REGION_SIZE_8KB) || ((SIZE) == MPU_REGION_SIZE_16KB)        \\\r\n   || ((SIZE) == MPU_REGION_SIZE_32KB) || ((SIZE) == MPU_REGION_SIZE_64KB) || ((SIZE) == MPU_REGION_SIZE_128KB) || ((SIZE) == MPU_REGION_SIZE_256KB) || ((SIZE) == MPU_REGION_SIZE_512KB) \\\r\n   || ((SIZE) == MPU_REGION_SIZE_1MB) || ((SIZE) == MPU_REGION_SIZE_2MB) || ((SIZE) == MPU_REGION_SIZE_4MB) || ((SIZE) == MPU_REGION_SIZE_8MB) || ((SIZE) == MPU_REGION_SIZE_16MB)        \\\r\n   || ((SIZE) == MPU_REGION_SIZE_32MB) || ((SIZE) == MPU_REGION_SIZE_64MB) || ((SIZE) == MPU_REGION_SIZE_128MB) || ((SIZE) == MPU_REGION_SIZE_256MB) || ((SIZE) == MPU_REGION_SIZE_512MB) \\\r\n   || ((SIZE) == MPU_REGION_SIZE_1GB) || ((SIZE) == MPU_REGION_SIZE_2GB) || ((SIZE) == MPU_REGION_SIZE_4GB))\r\n\r\n#define IS_MPU_SUB_REGION_DISABLE(SUBREGION) ((SUBREGION) < (uint16_t)0x00FF)\r\n#endif /* __MPU_PRESENT */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private functions ---------------------------------------------------------*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_CORTEX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_def.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_def.h\r\n * @author  MCD Application Team\r\n * @brief   This file contains HAL common defines, enumeration, macros and\r\n *          structures definitions.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_DEF\r\n#define __STM32F1xx_HAL_DEF\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx.h\"\r\n#if defined(USE_HAL_LEGACY)\r\n#include \"Legacy/stm32_hal_legacy.h\"\r\n#endif\r\n#include <stdio.h>\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n\r\n/**\r\n * @brief  HAL Status structures definition\r\n */\r\ntypedef enum { HAL_OK = 0x00U, HAL_ERROR = 0x01U, HAL_BUSY = 0x02U, HAL_TIMEOUT = 0x03U } HAL_StatusTypeDef;\r\n\r\n/**\r\n * @brief  HAL Lock structures definition\r\n */\r\ntypedef enum { HAL_UNLOCKED = 0x00U, HAL_LOCKED = 0x01U } HAL_LockTypeDef;\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n#define HAL_MAX_DELAY 0xFFFFFFFFU\r\n\r\n#define HAL_IS_BIT_SET(REG, BIT) (((REG) & (BIT)) != 0U)\r\n#define HAL_IS_BIT_CLR(REG, BIT) (((REG) & (BIT)) == 0U)\r\n\r\n#define __HAL_LINKDMA(__HANDLE__, __PPP_DMA_FIELD__, __DMA_HANDLE__) \\\r\n  do {                                                               \\\r\n    (__HANDLE__)->__PPP_DMA_FIELD__ = &(__DMA_HANDLE__);             \\\r\n    (__DMA_HANDLE__).Parent         = (__HANDLE__);                  \\\r\n  } while (0U)\r\n\r\n#define UNUSED(X) (void)X /* To avoid gcc/g++ warnings */\r\n\r\n/** @brief Reset the Handle's State field.\r\n * @param __HANDLE__: specifies the Peripheral Handle.\r\n * @note  This macro can be used for the following purpose:\r\n *          - When the Handle is declared as local variable; before passing it as parameter\r\n *            to HAL_PPP_Init() for the first time, it is mandatory to use this macro\r\n *            to set to 0 the Handle's \"State\" field.\r\n *            Otherwise, \"State\" field may have any random value and the first time the function\r\n *            HAL_PPP_Init() is called, the low level hardware initialization will be missed\r\n *            (i.e. HAL_PPP_MspInit() will not be executed).\r\n *          - When there is a need to reconfigure the low level hardware: instead of calling\r\n *            HAL_PPP_DeInit() then HAL_PPP_Init(), user can make a call to this macro then HAL_PPP_Init().\r\n *            In this later function, when the Handle's \"State\" field is set to 0, it will execute the function\r\n *            HAL_PPP_MspInit() which will reconfigure the low level hardware.\r\n * @retval None\r\n */\r\n#define __HAL_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = 0U)\r\n\r\n#if (USE_RTOS == 1U)\r\n/* Reserved for future use */\r\n#error \"USE_RTOS should be 0 in the current HAL release\"\r\n#else\r\n#define __HAL_LOCK(__HANDLE__)              \\\r\n  do {                                      \\\r\n    if ((__HANDLE__)->Lock == HAL_LOCKED) { \\\r\n      return HAL_BUSY;                      \\\r\n    } else {                                \\\r\n      (__HANDLE__)->Lock = HAL_LOCKED;      \\\r\n    }                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_UNLOCK(__HANDLE__)       \\\r\n  do {                                 \\\r\n    (__HANDLE__)->Lock = HAL_UNLOCKED; \\\r\n  } while (0U)\r\n#endif /* USE_RTOS */\r\n\r\n#if defined(__GNUC__) && !defined(__CC_ARM) /* GNU Compiler */\r\n#ifndef __weak\r\n#define __weak __attribute__((weak))\r\n#endif /* __weak */\r\n#ifndef __packed\r\n#define __packed __attribute__((__packed__))\r\n#endif /* __packed */\r\n#endif /* __GNUC__ */\r\n\r\n/* Macro to get variable aligned on 4-bytes, for __ICCARM__ the directive \"#pragma data_alignment=4\" must be used instead */\r\n#if defined(__GNUC__) && !defined(__CC_ARM) /* GNU Compiler */\r\n#ifndef __ALIGN_END\r\n#define __ALIGN_END __attribute__((aligned(4)))\r\n#endif /* __ALIGN_END */\r\n#ifndef __ALIGN_BEGIN\r\n#define __ALIGN_BEGIN\r\n#endif /* __ALIGN_BEGIN */\r\n#else\r\n#ifndef __ALIGN_END\r\n#define __ALIGN_END\r\n#endif /* __ALIGN_END */\r\n#ifndef __ALIGN_BEGIN\r\n#if defined(__CC_ARM) /* ARM Compiler */\r\n#define __ALIGN_BEGIN __align(4)\r\n#elif defined(__ICCARM__) /* IAR Compiler */\r\n#define __ALIGN_BEGIN\r\n#endif /* __CC_ARM */\r\n#endif /* __ALIGN_BEGIN */\r\n#endif /* __GNUC__ */\r\n\r\n/**\r\n * @brief  __RAM_FUNC definition\r\n */\r\n#if defined(__CC_ARM)\r\n/* ARM Compiler\r\n   ------------\r\n   RAM functions are defined using the toolchain options.\r\n   Functions that are executed in RAM should reside in a separate source module.\r\n   Using the 'Options for File' dialog you can simply change the 'Code / Const'\r\n   area of a module to a memory space in physical RAM.\r\n   Available memory areas are declared in the 'Target' tab of the 'Options for Target'\r\n   dialog.\r\n*/\r\n#define __RAM_FUNC\r\n\r\n#elif defined(__ICCARM__)\r\n/* ICCARM Compiler\r\n   ---------------\r\n   RAM functions are defined using a specific toolchain keyword \"__ramfunc\".\r\n*/\r\n#define __RAM_FUNC __ramfunc\r\n\r\n#elif defined(__GNUC__)\r\n/* GNU Compiler\r\n   ------------\r\n  RAM functions are defined using a specific toolchain attribute\r\n   \"__attribute__((section(\".RamFunc\")))\".\r\n*/\r\n#define __RAM_FUNC __attribute__((section(\".RamFunc\")))\r\n\r\n#endif\r\n\r\n/**\r\n * @brief  __NOINLINE definition\r\n */\r\n#if defined(__CC_ARM) || defined(__GNUC__)\r\n/* ARM & GNUCompiler\r\n   ----------------\r\n*/\r\n#define __NOINLINE __attribute__((noinline))\r\n\r\n#elif defined(__ICCARM__)\r\n/* ICCARM Compiler\r\n   ---------------\r\n*/\r\n#define __NOINLINE _Pragma(\"optimize = no_inline\")\r\n\r\n#endif\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* ___STM32F1xx_HAL_DEF */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_dma.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of DMA HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_DMA_H\r\n#define __STM32F1xx_HAL_DMA_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup DMA\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n\r\n/** @defgroup DMA_Exported_Types DMA Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  DMA Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t Direction; /*!< Specifies if the data will be transferred from memory to peripheral,\r\n                           from memory to memory or from peripheral to memory.\r\n                           This parameter can be a value of @ref DMA_Data_transfer_direction */\r\n\r\n  uint32_t PeriphInc; /*!< Specifies whether the Peripheral address register should be incremented or not.\r\n                           This parameter can be a value of @ref DMA_Peripheral_incremented_mode */\r\n\r\n  uint32_t MemInc; /*!< Specifies whether the memory address register should be incremented or not.\r\n                        This parameter can be a value of @ref DMA_Memory_incremented_mode */\r\n\r\n  uint32_t PeriphDataAlignment; /*!< Specifies the Peripheral data width.\r\n                                     This parameter can be a value of @ref DMA_Peripheral_data_size */\r\n\r\n  uint32_t MemDataAlignment; /*!< Specifies the Memory data width.\r\n                                  This parameter can be a value of @ref DMA_Memory_data_size */\r\n\r\n  uint32_t Mode; /*!< Specifies the operation mode of the DMAy Channelx.\r\n                      This parameter can be a value of @ref DMA_mode\r\n                      @note The circular buffer mode cannot be used if the memory-to-memory\r\n                            data transfer is configured on the selected Channel */\r\n\r\n  uint32_t Priority; /*!< Specifies the software priority for the DMAy Channelx.\r\n                          This parameter can be a value of @ref DMA_Priority_level */\r\n} DMA_InitTypeDef;\r\n\r\n/**\r\n * @brief  HAL DMA State structures definition\r\n */\r\ntypedef enum {\r\n  HAL_DMA_STATE_RESET   = 0x00U, /*!< DMA not yet initialized or disabled    */\r\n  HAL_DMA_STATE_READY   = 0x01U, /*!< DMA initialized and ready for use      */\r\n  HAL_DMA_STATE_BUSY    = 0x02U, /*!< DMA process is ongoing                 */\r\n  HAL_DMA_STATE_TIMEOUT = 0x03U  /*!< DMA timeout state                      */\r\n} HAL_DMA_StateTypeDef;\r\n\r\n/**\r\n * @brief  HAL DMA Error Code structure definition\r\n */\r\ntypedef enum {\r\n  HAL_DMA_FULL_TRANSFER = 0x00U, /*!< Full transfer     */\r\n  HAL_DMA_HALF_TRANSFER = 0x01U  /*!< Half Transfer     */\r\n} HAL_DMA_LevelCompleteTypeDef;\r\n\r\n/**\r\n * @brief  HAL DMA Callback ID structure definition\r\n */\r\ntypedef enum {\r\n  HAL_DMA_XFER_CPLT_CB_ID     = 0x00U, /*!< Full transfer     */\r\n  HAL_DMA_XFER_HALFCPLT_CB_ID = 0x01U, /*!< Half transfer     */\r\n  HAL_DMA_XFER_ERROR_CB_ID    = 0x02U, /*!< Error             */\r\n  HAL_DMA_XFER_ABORT_CB_ID    = 0x03U, /*!< Abort             */\r\n  HAL_DMA_XFER_ALL_CB_ID      = 0x04U  /*!< All               */\r\n\r\n} HAL_DMA_CallbackIDTypeDef;\r\n\r\n/**\r\n * @brief  DMA handle Structure definition\r\n */\r\ntypedef struct __DMA_HandleTypeDef {\r\n  DMA_Channel_TypeDef *Instance; /*!< Register base address                  */\r\n\r\n  DMA_InitTypeDef Init; /*!< DMA communication parameters           */\r\n\r\n  HAL_LockTypeDef Lock; /*!< DMA locking object                     */\r\n\r\n  HAL_DMA_StateTypeDef State; /*!< DMA transfer state                     */\r\n\r\n  void *Parent; /*!< Parent object state                    */\r\n\r\n  void (*XferCpltCallback)(struct __DMA_HandleTypeDef *hdma); /*!< DMA transfer complete callback         */\r\n\r\n  void (*XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma); /*!< DMA Half transfer complete callback    */\r\n\r\n  void (*XferErrorCallback)(struct __DMA_HandleTypeDef *hdma); /*!< DMA transfer error callback            */\r\n\r\n  void (*XferAbortCallback)(struct __DMA_HandleTypeDef *hdma); /*!< DMA transfer abort callback            */\r\n\r\n  __IO uint32_t ErrorCode; /*!< DMA Error code                         */\r\n\r\n  DMA_TypeDef *DmaBaseAddress; /*!< DMA Channel Base Address               */\r\n\r\n  uint32_t ChannelIndex; /*!< DMA Channel Index                      */\r\n\r\n} DMA_HandleTypeDef;\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup DMA_Exported_Constants DMA Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup DMA_Error_Code DMA Error Code\r\n * @{\r\n */\r\n#define HAL_DMA_ERROR_NONE          0x00000000U /*!< No error             */\r\n#define HAL_DMA_ERROR_TE            0x00000001U /*!< Transfer error       */\r\n#define HAL_DMA_ERROR_NO_XFER       0x00000004U /*!< no ongoing transfer  */\r\n#define HAL_DMA_ERROR_TIMEOUT       0x00000020U /*!< Timeout error        */\r\n#define HAL_DMA_ERROR_NOT_SUPPORTED 0x00000100U /*!< Not supported mode                    */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Data_transfer_direction DMA Data transfer direction\r\n * @{\r\n */\r\n#define DMA_PERIPH_TO_MEMORY 0x00000000U                 /*!< Peripheral to memory direction */\r\n#define DMA_MEMORY_TO_PERIPH ((uint32_t)DMA_CCR_DIR)     /*!< Memory to peripheral direction */\r\n#define DMA_MEMORY_TO_MEMORY ((uint32_t)DMA_CCR_MEM2MEM) /*!< Memory to memory direction     */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Peripheral_incremented_mode DMA Peripheral incremented mode\r\n * @{\r\n */\r\n#define DMA_PINC_ENABLE  ((uint32_t)DMA_CCR_PINC) /*!< Peripheral increment mode Enable */\r\n#define DMA_PINC_DISABLE 0x00000000U              /*!< Peripheral increment mode Disable */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Memory_incremented_mode DMA Memory incremented mode\r\n * @{\r\n */\r\n#define DMA_MINC_ENABLE  ((uint32_t)DMA_CCR_MINC) /*!< Memory increment mode Enable  */\r\n#define DMA_MINC_DISABLE 0x00000000U              /*!< Memory increment mode Disable */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Peripheral_data_size DMA Peripheral data size\r\n * @{\r\n */\r\n#define DMA_PDATAALIGN_BYTE     0x00000000U                 /*!< Peripheral data alignment: Byte     */\r\n#define DMA_PDATAALIGN_HALFWORD ((uint32_t)DMA_CCR_PSIZE_0) /*!< Peripheral data alignment: HalfWord */\r\n#define DMA_PDATAALIGN_WORD     ((uint32_t)DMA_CCR_PSIZE_1) /*!< Peripheral data alignment: Word     */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Memory_data_size DMA Memory data size\r\n * @{\r\n */\r\n#define DMA_MDATAALIGN_BYTE     0x00000000U                 /*!< Memory data alignment: Byte     */\r\n#define DMA_MDATAALIGN_HALFWORD ((uint32_t)DMA_CCR_MSIZE_0) /*!< Memory data alignment: HalfWord */\r\n#define DMA_MDATAALIGN_WORD     ((uint32_t)DMA_CCR_MSIZE_1) /*!< Memory data alignment: Word     */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_mode DMA mode\r\n * @{\r\n */\r\n#define DMA_NORMAL   0x00000000U              /*!< Normal mode                  */\r\n#define DMA_CIRCULAR ((uint32_t)DMA_CCR_CIRC) /*!< Circular mode                */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Priority_level DMA Priority level\r\n * @{\r\n */\r\n#define DMA_PRIORITY_LOW       0x00000000U              /*!< Priority level : Low       */\r\n#define DMA_PRIORITY_MEDIUM    ((uint32_t)DMA_CCR_PL_0) /*!< Priority level : Medium    */\r\n#define DMA_PRIORITY_HIGH      ((uint32_t)DMA_CCR_PL_1) /*!< Priority level : High      */\r\n#define DMA_PRIORITY_VERY_HIGH ((uint32_t)DMA_CCR_PL)   /*!< Priority level : Very_High */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_interrupt_enable_definitions DMA interrupt enable definitions\r\n * @{\r\n */\r\n#define DMA_IT_TC ((uint32_t)DMA_CCR_TCIE)\r\n#define DMA_IT_HT ((uint32_t)DMA_CCR_HTIE)\r\n#define DMA_IT_TE ((uint32_t)DMA_CCR_TEIE)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_flag_definitions DMA flag definitions\r\n * @{\r\n */\r\n#define DMA_FLAG_GL1 0x00000001U\r\n#define DMA_FLAG_TC1 0x00000002U\r\n#define DMA_FLAG_HT1 0x00000004U\r\n#define DMA_FLAG_TE1 0x00000008U\r\n#define DMA_FLAG_GL2 0x00000010U\r\n#define DMA_FLAG_TC2 0x00000020U\r\n#define DMA_FLAG_HT2 0x00000040U\r\n#define DMA_FLAG_TE2 0x00000080U\r\n#define DMA_FLAG_GL3 0x00000100U\r\n#define DMA_FLAG_TC3 0x00000200U\r\n#define DMA_FLAG_HT3 0x00000400U\r\n#define DMA_FLAG_TE3 0x00000800U\r\n#define DMA_FLAG_GL4 0x00001000U\r\n#define DMA_FLAG_TC4 0x00002000U\r\n#define DMA_FLAG_HT4 0x00004000U\r\n#define DMA_FLAG_TE4 0x00008000U\r\n#define DMA_FLAG_GL5 0x00010000U\r\n#define DMA_FLAG_TC5 0x00020000U\r\n#define DMA_FLAG_HT5 0x00040000U\r\n#define DMA_FLAG_TE5 0x00080000U\r\n#define DMA_FLAG_GL6 0x00100000U\r\n#define DMA_FLAG_TC6 0x00200000U\r\n#define DMA_FLAG_HT6 0x00400000U\r\n#define DMA_FLAG_TE6 0x00800000U\r\n#define DMA_FLAG_GL7 0x01000000U\r\n#define DMA_FLAG_TC7 0x02000000U\r\n#define DMA_FLAG_HT7 0x04000000U\r\n#define DMA_FLAG_TE7 0x08000000U\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macros -----------------------------------------------------------*/\r\n/** @defgroup DMA_Exported_Macros DMA Exported Macros\r\n * @{\r\n */\r\n\r\n/** @brief  Reset DMA handle state.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval None\r\n */\r\n#define __HAL_DMA_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DMA_STATE_RESET)\r\n\r\n/**\r\n * @brief  Enable the specified DMA Channel.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval None\r\n */\r\n#define __HAL_DMA_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CCR, DMA_CCR_EN))\r\n\r\n/**\r\n * @brief  Disable the specified DMA Channel.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval None\r\n */\r\n#define __HAL_DMA_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CCR, DMA_CCR_EN))\r\n\r\n/* Interrupt & Flag management */\r\n\r\n/**\r\n * @brief  Enables the specified DMA Channel interrupts.\r\n * @param  __HANDLE__: DMA handle\r\n * @param __INTERRUPT__: specifies the DMA interrupt sources to be enabled or disabled.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_IT_TC:  Transfer complete interrupt mask\r\n *            @arg DMA_IT_HT:  Half transfer complete interrupt mask\r\n *            @arg DMA_IT_TE:  Transfer error interrupt mask\r\n * @retval None\r\n */\r\n#define __HAL_DMA_ENABLE_IT(__HANDLE__, __INTERRUPT__) (SET_BIT((__HANDLE__)->Instance->CCR, (__INTERRUPT__)))\r\n\r\n/**\r\n * @brief  Disable the specified DMA Channel interrupts.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __INTERRUPT__: specifies the DMA interrupt sources to be enabled or disabled.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_IT_TC:  Transfer complete interrupt mask\r\n *            @arg DMA_IT_HT:  Half transfer complete interrupt mask\r\n *            @arg DMA_IT_TE:  Transfer error interrupt mask\r\n * @retval None\r\n */\r\n#define __HAL_DMA_DISABLE_IT(__HANDLE__, __INTERRUPT__) (CLEAR_BIT((__HANDLE__)->Instance->CCR, (__INTERRUPT__)))\r\n\r\n/**\r\n * @brief  Check whether the specified DMA Channel interrupt is enabled or not.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __INTERRUPT__: specifies the DMA interrupt source to check.\r\n *          This parameter can be one of the following values:\r\n *            @arg DMA_IT_TC:  Transfer complete interrupt mask\r\n *            @arg DMA_IT_HT:  Half transfer complete interrupt mask\r\n *            @arg DMA_IT_TE:  Transfer error interrupt mask\r\n * @retval The state of DMA_IT (SET or RESET).\r\n */\r\n#define __HAL_DMA_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CCR & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)\r\n\r\n/**\r\n * @brief  Return the number of remaining data units in the current DMA Channel transfer.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The number of remaining data units in the current DMA Channel transfer.\r\n */\r\n#define __HAL_DMA_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNDTR)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Include DMA HAL Extension module */\r\n#include \"stm32f1xx_hal_dma_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup DMA_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup DMA_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* Initialization and de-initialization functions *****************************/\r\nHAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma);\r\nHAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup DMA_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* IO operation functions *****************************************************/\r\nHAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);\r\nHAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);\r\nHAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma);\r\nHAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma);\r\nHAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout);\r\nvoid              HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma);\r\nHAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (*pCallback)(DMA_HandleTypeDef *_hdma));\r\nHAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup DMA_Exported_Functions_Group3\r\n * @{\r\n */\r\n/* Peripheral State and Error functions ***************************************/\r\nHAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma);\r\nuint32_t             HAL_DMA_GetError(DMA_HandleTypeDef *hdma);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup DMA_Private_Macros DMA Private Macros\r\n * @{\r\n */\r\n\r\n#define IS_DMA_DIRECTION(DIRECTION) (((DIRECTION) == DMA_PERIPH_TO_MEMORY) || ((DIRECTION) == DMA_MEMORY_TO_PERIPH) || ((DIRECTION) == DMA_MEMORY_TO_MEMORY))\r\n\r\n#define IS_DMA_BUFFER_SIZE(SIZE) (((SIZE) >= 0x1U) && ((SIZE) < 0x10000U))\r\n\r\n#define IS_DMA_PERIPHERAL_INC_STATE(STATE) (((STATE) == DMA_PINC_ENABLE) || ((STATE) == DMA_PINC_DISABLE))\r\n\r\n#define IS_DMA_MEMORY_INC_STATE(STATE) (((STATE) == DMA_MINC_ENABLE) || ((STATE) == DMA_MINC_DISABLE))\r\n\r\n#define IS_DMA_PERIPHERAL_DATA_SIZE(SIZE) (((SIZE) == DMA_PDATAALIGN_BYTE) || ((SIZE) == DMA_PDATAALIGN_HALFWORD) || ((SIZE) == DMA_PDATAALIGN_WORD))\r\n\r\n#define IS_DMA_MEMORY_DATA_SIZE(SIZE) (((SIZE) == DMA_MDATAALIGN_BYTE) || ((SIZE) == DMA_MDATAALIGN_HALFWORD) || ((SIZE) == DMA_MDATAALIGN_WORD))\r\n\r\n#define IS_DMA_MODE(MODE) (((MODE) == DMA_NORMAL) || ((MODE) == DMA_CIRCULAR))\r\n\r\n#define IS_DMA_PRIORITY(PRIORITY) (((PRIORITY) == DMA_PRIORITY_LOW) || ((PRIORITY) == DMA_PRIORITY_MEDIUM) || ((PRIORITY) == DMA_PRIORITY_HIGH) || ((PRIORITY) == DMA_PRIORITY_VERY_HIGH))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private functions ---------------------------------------------------------*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_DMA_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_dma_ex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_dma_ex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of DMA HAL extension module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_DMA_EX_H\r\n#define __STM32F1xx_HAL_DMA_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup DMAEx DMAEx\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/* Exported constants --------------------------------------------------------*/\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup DMAEx_Exported_Macros DMA Extended Exported Macros\r\n * @{\r\n */\r\n/* Interrupt & Flag management */\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup DMAEx_High_density_XL_density_Product_devices DMAEx High density and XL density product devices\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Returns the current DMA Channel transfer complete flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer complete flag index.\r\n */\r\n#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_TC1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_TC2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_TC3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_TC4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_TC5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_TC6 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7)) ? DMA_FLAG_TC7 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1)) ? DMA_FLAG_TC1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2)) ? DMA_FLAG_TC2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3)) ? DMA_FLAG_TC3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4)) ? DMA_FLAG_TC4 \\\r\n                                                                       : DMA_FLAG_TC5)\r\n\r\n/**\r\n * @brief  Returns the current DMA Channel half transfer complete flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified half transfer complete flag index.\r\n */\r\n#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_HT1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_HT2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_HT3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_HT4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_HT5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_HT6 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7)) ? DMA_FLAG_HT7 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1)) ? DMA_FLAG_HT1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2)) ? DMA_FLAG_HT2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3)) ? DMA_FLAG_HT3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4)) ? DMA_FLAG_HT4 \\\r\n                                                                       : DMA_FLAG_HT5)\r\n\r\n/**\r\n * @brief  Returns the current DMA Channel transfer error flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer error flag index.\r\n */\r\n#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_TE1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_TE2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_TE3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_TE4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_TE5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_TE6 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7)) ? DMA_FLAG_TE7 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1)) ? DMA_FLAG_TE1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2)) ? DMA_FLAG_TE2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3)) ? DMA_FLAG_TE3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4)) ? DMA_FLAG_TE4 \\\r\n                                                                       : DMA_FLAG_TE5)\r\n\r\n/**\r\n * @brief  Return the current DMA Channel Global interrupt flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer error flag index.\r\n */\r\n#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_GL1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_GL2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_GL3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_GL4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_GL5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_GL6 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel7)) ? DMA_FLAG_GL7 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel1)) ? DMA_FLAG_GL1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel2)) ? DMA_FLAG_GL2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel3)) ? DMA_FLAG_GL3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA2_Channel4)) ? DMA_FLAG_GL4 \\\r\n                                                                       : DMA_FLAG_GL5)\r\n\r\n/**\r\n * @brief  Get the DMA Channel pending flags.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __FLAG__: Get the specified flag.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_FLAG_TCx:  Transfer complete flag\r\n *            @arg DMA_FLAG_HTx:  Half transfer complete flag\r\n *            @arg DMA_FLAG_TEx:  Transfer error flag\r\n *         Where x can be 1_7 or 1_5 (depending on DMA1 or DMA2) to select the DMA Channel flag.\r\n * @retval The state of FLAG (SET or RESET).\r\n */\r\n#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__) (((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Channel7) ? (DMA2->ISR & (__FLAG__)) : (DMA1->ISR & (__FLAG__)))\r\n\r\n/**\r\n * @brief  Clears the DMA Channel pending flags.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __FLAG__: specifies the flag to clear.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_FLAG_TCx:  Transfer complete flag\r\n *            @arg DMA_FLAG_HTx:  Half transfer complete flag\r\n *            @arg DMA_FLAG_TEx:  Transfer error flag\r\n *         Where x can be 1_7 or 1_5 (depending on DMA1 or DMA2) to select the DMA Channel flag.\r\n * @retval None\r\n */\r\n#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) (((uint32_t)((__HANDLE__)->Instance) > (uint32_t)DMA1_Channel7) ? (DMA2->IFCR = (__FLAG__)) : (DMA1->IFCR = (__FLAG__)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#else\r\n/** @defgroup DMA_Low_density_Medium_density_Product_devices DMA Low density and Medium density product devices\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Returns the current DMA Channel transfer complete flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer complete flag index.\r\n */\r\n#define __HAL_DMA_GET_TC_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_TC1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_TC2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_TC3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_TC4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_TC5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_TC6 \\\r\n                                                                       : DMA_FLAG_TC7)\r\n\r\n/**\r\n * @brief  Return the current DMA Channel half transfer complete flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified half transfer complete flag index.\r\n */\r\n#define __HAL_DMA_GET_HT_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_HT1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_HT2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_HT3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_HT4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_HT5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_HT6 \\\r\n                                                                       : DMA_FLAG_HT7)\r\n\r\n/**\r\n * @brief  Return the current DMA Channel transfer error flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer error flag index.\r\n */\r\n#define __HAL_DMA_GET_TE_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_TE1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_TE2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_TE3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_TE4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_TE5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_TE6 \\\r\n                                                                       : DMA_FLAG_TE7)\r\n\r\n/**\r\n * @brief  Return the current DMA Channel Global interrupt flag.\r\n * @param  __HANDLE__: DMA handle\r\n * @retval The specified transfer error flag index.\r\n */\r\n#define __HAL_DMA_GET_GI_FLAG_INDEX(__HANDLE__)                                       \\\r\n  (((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel1))   ? DMA_FLAG_GL1 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel2)) ? DMA_FLAG_GL2 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel3)) ? DMA_FLAG_GL3 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel4)) ? DMA_FLAG_GL4 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel5)) ? DMA_FLAG_GL5 \\\r\n   : ((uint32_t)((__HANDLE__)->Instance) == ((uint32_t)DMA1_Channel6)) ? DMA_FLAG_GL6 \\\r\n                                                                       : DMA_FLAG_GL7)\r\n\r\n/**\r\n * @brief  Get the DMA Channel pending flags.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __FLAG__: Get the specified flag.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_FLAG_TCx:  Transfer complete flag\r\n *            @arg DMA_FLAG_HTx:  Half transfer complete flag\r\n *            @arg DMA_FLAG_TEx:  Transfer error flag\r\n *            @arg DMA_FLAG_GLx:  Global interrupt flag\r\n *         Where x can be 1_7 to select the DMA Channel flag.\r\n * @retval The state of FLAG (SET or RESET).\r\n */\r\n\r\n#define __HAL_DMA_GET_FLAG(__HANDLE__, __FLAG__)   (DMA1->ISR & (__FLAG__))\r\n\r\n/**\r\n * @brief  Clear the DMA Channel pending flags.\r\n * @param  __HANDLE__: DMA handle\r\n * @param  __FLAG__: specifies the flag to clear.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg DMA_FLAG_TCx:  Transfer complete flag\r\n *            @arg DMA_FLAG_HTx:  Half transfer complete flag\r\n *            @arg DMA_FLAG_TEx:  Transfer error flag\r\n *            @arg DMA_FLAG_GLx:  Global interrupt flag\r\n *         Where x can be 1_7 to select the DMA Channel flag.\r\n * @retval None\r\n */\r\n#define __HAL_DMA_CLEAR_FLAG(__HANDLE__, __FLAG__) (DMA1->IFCR = (__FLAG__))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || */\r\n       /* STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#endif /* __STM32F1xx_HAL_DMA_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_flash.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of Flash HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_FLASH_H\r\n#define __STM32F1xx_HAL_FLASH_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASH\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASH_Private_Constants\r\n * @{\r\n */\r\n#define FLASH_TIMEOUT_VALUE 50000U /* 50 s */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASH_Private_Macros\r\n * @{\r\n */\r\n\r\n#define IS_FLASH_TYPEPROGRAM(VALUE) (((VALUE) == FLASH_TYPEPROGRAM_HALFWORD) || ((VALUE) == FLASH_TYPEPROGRAM_WORD) || ((VALUE) == FLASH_TYPEPROGRAM_DOUBLEWORD))\r\n\r\n#if defined(FLASH_ACR_LATENCY)\r\n#define IS_FLASH_LATENCY(__LATENCY__) (((__LATENCY__) == FLASH_LATENCY_0) || ((__LATENCY__) == FLASH_LATENCY_1) || ((__LATENCY__) == FLASH_LATENCY_2))\r\n\r\n#else\r\n#define IS_FLASH_LATENCY(__LATENCY__) ((__LATENCY__) == FLASH_LATENCY_0)\r\n#endif /* FLASH_ACR_LATENCY */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup FLASH_Exported_Types FLASH Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  FLASH Procedure structure definition\r\n */\r\ntypedef enum {\r\n  FLASH_PROC_NONE              = 0U,\r\n  FLASH_PROC_PAGEERASE         = 1U,\r\n  FLASH_PROC_MASSERASE         = 2U,\r\n  FLASH_PROC_PROGRAMHALFWORD   = 3U,\r\n  FLASH_PROC_PROGRAMWORD       = 4U,\r\n  FLASH_PROC_PROGRAMDOUBLEWORD = 5U\r\n} FLASH_ProcedureTypeDef;\r\n\r\n/**\r\n * @brief  FLASH handle Structure definition\r\n */\r\ntypedef struct {\r\n  __IO FLASH_ProcedureTypeDef ProcedureOnGoing; /*!< Internal variable to indicate which procedure is ongoing or not in IT context */\r\n\r\n  __IO uint32_t DataRemaining; /*!< Internal variable to save the remaining pages to erase or half-word to program in IT context */\r\n\r\n  __IO uint32_t Address; /*!< Internal variable to save address selected for program or erase */\r\n\r\n  __IO uint64_t Data; /*!< Internal variable to save data to be programmed */\r\n\r\n  HAL_LockTypeDef Lock; /*!< FLASH locking object                */\r\n\r\n  __IO uint32_t ErrorCode; /*!< FLASH error code\r\n                                This parameter can be a value of @ref FLASH_Error_Codes  */\r\n} FLASH_ProcessTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup FLASH_Exported_Constants FLASH Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASH_Error_Codes FLASH Error Codes\r\n * @{\r\n */\r\n\r\n#define HAL_FLASH_ERROR_NONE 0x00U /*!< No error */\r\n#define HAL_FLASH_ERROR_PROG 0x01U /*!< Programming error */\r\n#define HAL_FLASH_ERROR_WRP  0x02U /*!< Write protection error */\r\n#define HAL_FLASH_ERROR_OPTV 0x04U /*!< Option validity error */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASH_Type_Program FLASH Type Program\r\n * @{\r\n */\r\n#define FLASH_TYPEPROGRAM_HALFWORD   0x01U /*!<Program a half-word (16-bit) at a specified address.*/\r\n#define FLASH_TYPEPROGRAM_WORD       0x02U /*!<Program a word (32-bit) at a specified address.*/\r\n#define FLASH_TYPEPROGRAM_DOUBLEWORD 0x03U /*!<Program a double word (64-bit) at a specified address*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(FLASH_ACR_LATENCY)\r\n/** @defgroup FLASH_Latency FLASH Latency\r\n * @{\r\n */\r\n#define FLASH_LATENCY_0 0x00000000U         /*!< FLASH Zero Latency cycle */\r\n#define FLASH_LATENCY_1 FLASH_ACR_LATENCY_0 /*!< FLASH One Latency cycle */\r\n#define FLASH_LATENCY_2 FLASH_ACR_LATENCY_1 /*!< FLASH Two Latency cycles */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#else\r\n/** @defgroup FLASH_Latency FLASH Latency\r\n * @{\r\n */\r\n#define FLASH_LATENCY_0 0x00000000U /*!< FLASH Zero Latency cycle */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* FLASH_ACR_LATENCY */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n\r\n/** @defgroup FLASH_Exported_Macros FLASH Exported Macros\r\n *  @brief macros to control FLASH features\r\n *  @{\r\n */\r\n\r\n/** @defgroup FLASH_Half_Cycle FLASH Half Cycle\r\n *  @brief macros to handle FLASH half cycle\r\n * @{\r\n */\r\n\r\n/**\r\n  * @brief  Enable the FLASH half cycle access.\r\n  * @note   half cycle access can only be used with a low-frequency clock of less than\r\n            8 MHz that can be obtained with the use of HSI or HSE but not of PLL.\r\n  * @retval None\r\n  */\r\n#define __HAL_FLASH_HALF_CYCLE_ACCESS_ENABLE() (FLASH->ACR |= FLASH_ACR_HLFCYA)\r\n\r\n/**\r\n  * @brief  Disable the FLASH half cycle access.\r\n  * @note   half cycle access can only be used with a low-frequency clock of less than\r\n            8 MHz that can be obtained with the use of HSI or HSE but not of PLL.\r\n  * @retval None\r\n  */\r\n#define __HAL_FLASH_HALF_CYCLE_ACCESS_DISABLE() (FLASH->ACR &= (~FLASH_ACR_HLFCYA))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(FLASH_ACR_LATENCY)\r\n/** @defgroup FLASH_EM_Latency FLASH Latency\r\n *  @brief macros to handle FLASH Latency\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Set the FLASH Latency.\r\n * @param  __LATENCY__ FLASH Latency\r\n *         The value of this parameter depend on device used within the same series\r\n * @retval None\r\n */\r\n#define __HAL_FLASH_SET_LATENCY(__LATENCY__) (FLASH->ACR = (FLASH->ACR & (~FLASH_ACR_LATENCY)) | (__LATENCY__))\r\n\r\n/**\r\n * @brief  Get the FLASH Latency.\r\n * @retval FLASH Latency\r\n *         The value of this parameter depend on device used within the same series\r\n */\r\n#define __HAL_FLASH_GET_LATENCY() (READ_BIT((FLASH->ACR), FLASH_ACR_LATENCY))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* FLASH_ACR_LATENCY */\r\n/** @defgroup FLASH_Prefetch FLASH Prefetch\r\n *  @brief macros to handle FLASH Prefetch buffer\r\n * @{\r\n */\r\n/**\r\n * @brief  Enable the FLASH prefetch buffer.\r\n * @retval None\r\n */\r\n#define __HAL_FLASH_PREFETCH_BUFFER_ENABLE() (FLASH->ACR |= FLASH_ACR_PRFTBE)\r\n\r\n/**\r\n * @brief  Disable the FLASH prefetch buffer.\r\n * @retval None\r\n */\r\n#define __HAL_FLASH_PREFETCH_BUFFER_DISABLE() (FLASH->ACR &= (~FLASH_ACR_PRFTBE))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Include FLASH HAL Extended module */\r\n#include \"stm32f1xx_hal_flash_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup FLASH_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASH_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* IO operation functions *****************************************************/\r\nHAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data);\r\nHAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data);\r\n\r\n/* FLASH IRQ handler function */\r\nvoid HAL_FLASH_IRQHandler(void);\r\n/* Callbacks in non blocking modes */\r\nvoid HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue);\r\nvoid HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASH_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* Peripheral Control functions ***********************************************/\r\nHAL_StatusTypeDef HAL_FLASH_Unlock(void);\r\nHAL_StatusTypeDef HAL_FLASH_Lock(void);\r\nHAL_StatusTypeDef HAL_FLASH_OB_Unlock(void);\r\nHAL_StatusTypeDef HAL_FLASH_OB_Lock(void);\r\nvoid              HAL_FLASH_OB_Launch(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASH_Exported_Functions_Group3\r\n * @{\r\n */\r\n/* Peripheral State and Error functions ***************************************/\r\nuint32_t HAL_FLASH_GetError(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private function -------------------------------------------------*/\r\n/** @addtogroup FLASH_Private_Functions\r\n * @{\r\n */\r\nHAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout);\r\n#if defined(FLASH_BANK2_END)\r\nHAL_StatusTypeDef FLASH_WaitForLastOperationBank2(uint32_t Timeout);\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_FLASH_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_flash_ex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_flash_ex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of Flash HAL Extended module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_FLASH_EX_H\r\n#define __STM32F1xx_HAL_FLASH_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASHEx\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASHEx_Private_Constants\r\n * @{\r\n */\r\n\r\n#define FLASH_SIZE_DATA_REGISTER 0x1FFFF7E0U\r\n#define OBR_REG_INDEX            1U\r\n#define SR_FLAG_MASK             ((uint32_t)(FLASH_SR_BSY | FLASH_SR_PGERR | FLASH_SR_WRPRTERR | FLASH_SR_EOP))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASHEx_Private_Macros\r\n * @{\r\n */\r\n\r\n#define IS_FLASH_TYPEERASE(VALUE) (((VALUE) == FLASH_TYPEERASE_PAGES) || ((VALUE) == FLASH_TYPEERASE_MASSERASE))\r\n\r\n#define IS_OPTIONBYTE(VALUE) (((VALUE) <= (OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER | OPTIONBYTE_DATA)))\r\n\r\n#define IS_WRPSTATE(VALUE) (((VALUE) == OB_WRPSTATE_DISABLE) || ((VALUE) == OB_WRPSTATE_ENABLE))\r\n\r\n#define IS_OB_RDP_LEVEL(LEVEL) (((LEVEL) == OB_RDP_LEVEL_0) || ((LEVEL) == OB_RDP_LEVEL_1))\r\n\r\n#define IS_OB_DATA_ADDRESS(ADDRESS) (((ADDRESS) == OB_DATA_ADDRESS_DATA0) || ((ADDRESS) == OB_DATA_ADDRESS_DATA1))\r\n\r\n#define IS_OB_IWDG_SOURCE(SOURCE) (((SOURCE) == OB_IWDG_SW) || ((SOURCE) == OB_IWDG_HW))\r\n\r\n#define IS_OB_STOP_SOURCE(SOURCE) (((SOURCE) == OB_STOP_NO_RST) || ((SOURCE) == OB_STOP_RST))\r\n\r\n#define IS_OB_STDBY_SOURCE(SOURCE) (((SOURCE) == OB_STDBY_NO_RST) || ((SOURCE) == OB_STDBY_RST))\r\n\r\n#if defined(FLASH_BANK2_END)\r\n#define IS_OB_BOOT1(BOOT1) (((BOOT1) == OB_BOOT1_RESET) || ((BOOT1) == OB_BOOT1_SET))\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/* Low Density */\r\n#if (defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6))\r\n#define IS_FLASH_NB_PAGES(ADDRESS, NBPAGES) \\\r\n  (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x08007FFFU) : ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x08003FFFU))\r\n#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */\r\n\r\n/* Medium Density */\r\n#if (defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB))\r\n#define IS_FLASH_NB_PAGES(ADDRESS, NBPAGES)                                  \\\r\n  (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U)                      \\\r\n       ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0801FFFFU)        \\\r\n       : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x40U)               \\\r\n              ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0800FFFFU) \\\r\n              : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x08007FFFU) : ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x08003FFFU))))\r\n#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB*/\r\n\r\n/* High Density */\r\n#if (defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE))\r\n#define IS_FLASH_NB_PAGES(ADDRESS, NBPAGES)                           \\\r\n  (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x200U)              \\\r\n       ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0807FFFFU) \\\r\n       : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x180U) ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0805FFFFU) : ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0803FFFFU)))\r\n#endif /* STM32F100xE || STM32F101xE || STM32F103xE */\r\n\r\n/* XL Density */\r\n#if defined(FLASH_BANK2_END)\r\n#define IS_FLASH_NB_PAGES(ADDRESS, NBPAGES) \\\r\n  (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x400U) ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x080FFFFFU) : ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x080BFFFFU))\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/* Connectivity Line */\r\n#if (defined(STM32F105xC) || defined(STM32F107xC))\r\n#define IS_FLASH_NB_PAGES(ADDRESS, NBPAGES)                           \\\r\n  (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x100U)              \\\r\n       ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0803FFFFU) \\\r\n       : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U) ? ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0801FFFFU) : ((ADDRESS) + ((NBPAGES)*FLASH_PAGE_SIZE) - 1 <= 0x0800FFFFU)))\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#define IS_OB_WRP(PAGE) (((PAGE) != 0x0000000U))\r\n\r\n#if defined(FLASH_BANK2_END)\r\n#define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1) || ((BANK) == FLASH_BANK_2) || ((BANK) == FLASH_BANK_BOTH))\r\n#else\r\n#define IS_FLASH_BANK(BANK) (((BANK) == FLASH_BANK_1))\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/* Low Density */\r\n#if (defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6))\r\n#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? ((ADDRESS) <= FLASH_BANK1_END) : ((ADDRESS) <= 0x08003FFFU)))\r\n\r\n#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */\r\n\r\n/* Medium Density */\r\n#if (defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB))\r\n#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)                                                      \\\r\n  (((ADDRESS) >= FLASH_BASE)                                                                   \\\r\n   && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U)                                    \\\r\n           ? ((ADDRESS) <= FLASH_BANK1_END)                                                    \\\r\n           : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x40U) ? ((ADDRESS) <= 0x0800FFFF) \\\r\n                                                                   : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x20U) ? ((ADDRESS) <= 0x08007FFF) : ((ADDRESS) <= 0x08003FFFU)))))\r\n\r\n#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB*/\r\n\r\n/* High Density */\r\n#if (defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE))\r\n#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)                                                     \\\r\n  (((ADDRESS) >= FLASH_BASE)                                                                  \\\r\n   && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x200U) ? ((ADDRESS) <= FLASH_BANK1_END) \\\r\n                                                             : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x180U) ? ((ADDRESS) <= 0x0805FFFFU) : ((ADDRESS) <= 0x0803FFFFU))))\r\n\r\n#endif /* STM32F100xE || STM32F101xE || STM32F103xE */\r\n\r\n/* XL Density */\r\n#if defined(FLASH_BANK2_END)\r\n#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS) (((ADDRESS) >= FLASH_BASE) && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x400U) ? ((ADDRESS) <= FLASH_BANK2_END) : ((ADDRESS) <= 0x080BFFFFU)))\r\n\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/* Connectivity Line */\r\n#if (defined(STM32F105xC) || defined(STM32F107xC))\r\n#define IS_FLASH_PROGRAM_ADDRESS(ADDRESS)                                                     \\\r\n  (((ADDRESS) >= FLASH_BASE)                                                                  \\\r\n   && (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x100U) ? ((ADDRESS) <= FLASH_BANK1_END) \\\r\n                                                             : (((*((uint16_t *)FLASH_SIZE_DATA_REGISTER)) == 0x80U) ? ((ADDRESS) <= 0x0801FFFFU) : ((ADDRESS) <= 0x0800FFFFU))))\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Exported_Types FLASHEx Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  FLASH Erase structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t TypeErase; /*!< TypeErase: Mass erase or page erase.\r\n                           This parameter can be a value of @ref FLASHEx_Type_Erase */\r\n\r\n  uint32_t Banks; /*!< Select banks to erase when Mass erase is enabled.\r\n                       This parameter must be a value of @ref FLASHEx_Banks */\r\n\r\n  uint32_t PageAddress; /*!< PageAdress: Initial FLASH page address to erase when mass erase is disabled\r\n                             This parameter must be a number between Min_Data = 0x08000000 and Max_Data = FLASH_BANKx_END\r\n                             (x = 1 or 2 depending on devices)*/\r\n\r\n  uint32_t NbPages; /*!< NbPages: Number of pagess to be erased.\r\n                         This parameter must be a value between Min_Data = 1 and Max_Data = (max number of pages - value of initial page)*/\r\n\r\n} FLASH_EraseInitTypeDef;\r\n\r\n/**\r\n * @brief  FLASH Options bytes program structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t OptionType; /*!< OptionType: Option byte to be configured.\r\n                            This parameter can be a value of @ref FLASHEx_OB_Type */\r\n\r\n  uint32_t WRPState; /*!< WRPState: Write protection activation or deactivation.\r\n                          This parameter can be a value of @ref FLASHEx_OB_WRP_State */\r\n\r\n  uint32_t WRPPage; /*!< WRPPage: specifies the page(s) to be write protected\r\n                         This parameter can be a value of @ref FLASHEx_OB_Write_Protection */\r\n\r\n  uint32_t Banks; /*!< Select banks for WRP activation/deactivation of all sectors.\r\n                       This parameter must be a value of @ref FLASHEx_Banks */\r\n\r\n  uint8_t RDPLevel; /*!< RDPLevel: Set the read protection level..\r\n                         This parameter can be a value of @ref FLASHEx_OB_Read_Protection */\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  uint8_t USERConfig; /*!< USERConfig: Program the FLASH User Option Byte:\r\n                           IWDG / STOP / STDBY / BOOT1\r\n                           This parameter can be a combination of @ref FLASHEx_OB_IWatchdog, @ref FLASHEx_OB_nRST_STOP,\r\n                           @ref FLASHEx_OB_nRST_STDBY, @ref FLASHEx_OB_BOOT1 */\r\n#else\r\n  uint8_t USERConfig; /*!< USERConfig: Program the FLASH User Option Byte:\r\n                           IWDG / STOP / STDBY\r\n                           This parameter can be a combination of @ref FLASHEx_OB_IWatchdog, @ref FLASHEx_OB_nRST_STOP,\r\n                           @ref FLASHEx_OB_nRST_STDBY */\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  uint32_t DATAAddress; /*!< DATAAddress: Address of the option byte DATA to be programmed\r\n                             This parameter can be a value of @ref FLASHEx_OB_Data_Address */\r\n\r\n  uint8_t DATAData; /*!< DATAData: Data to be stored in the option byte DATA\r\n                         This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF */\r\n} FLASH_OBProgramInitTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Exported_Constants FLASHEx Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASHEx_Constants FLASH Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASHEx_Page_Size Page Size\r\n * @{\r\n */\r\n#if (defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6) || defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB))\r\n#define FLASH_PAGE_SIZE 0x400U\r\n#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */\r\n       /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */\r\n\r\n#if (defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC))\r\n#define FLASH_PAGE_SIZE 0x800U\r\n#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */\r\n       /* STM32F101xG || STM32F103xG */\r\n       /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_Type_Erase Type Erase\r\n * @{\r\n */\r\n#define FLASH_TYPEERASE_PAGES     0x00U /*!<Pages erase only*/\r\n#define FLASH_TYPEERASE_MASSERASE 0x02U /*!<Flash mass erase activation*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_Banks Banks\r\n * @{\r\n */\r\n#if defined(FLASH_BANK2_END)\r\n#define FLASH_BANK_1    1U                                      /*!< Bank 1   */\r\n#define FLASH_BANK_2    2U                                      /*!< Bank 2   */\r\n#define FLASH_BANK_BOTH ((uint32_t)FLASH_BANK_1 | FLASH_BANK_2) /*!< Bank1 and Bank2  */\r\n\r\n#else\r\n#define FLASH_BANK_1 1U /*!< Bank 1   */\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OptionByte_Constants Option Byte Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_Type Option Bytes Type\r\n * @{\r\n */\r\n#define OPTIONBYTE_WRP  0x01U /*!<WRP option byte configuration*/\r\n#define OPTIONBYTE_RDP  0x02U /*!<RDP option byte configuration*/\r\n#define OPTIONBYTE_USER 0x04U /*!<USER option byte configuration*/\r\n#define OPTIONBYTE_DATA 0x08U /*!<DATA option byte configuration*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_WRP_State Option Byte WRP State\r\n * @{\r\n */\r\n#define OB_WRPSTATE_DISABLE 0x00U /*!<Disable the write protection of the desired pages*/\r\n#define OB_WRPSTATE_ENABLE  0x01U /*!<Enable the write protection of the desired pagess*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_Write_Protection Option Bytes Write Protection\r\n * @{\r\n */\r\n/* STM32 Low and Medium density devices */\r\n#if defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6) || defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB)\r\n#define OB_WRP_PAGES0TO3   0x00000001U /*!< Write protection of page 0 to 3 */\r\n#define OB_WRP_PAGES4TO7   0x00000002U /*!< Write protection of page 4 to 7 */\r\n#define OB_WRP_PAGES8TO11  0x00000004U /*!< Write protection of page 8 to 11 */\r\n#define OB_WRP_PAGES12TO15 0x00000008U /*!< Write protection of page 12 to 15 */\r\n#define OB_WRP_PAGES16TO19 0x00000010U /*!< Write protection of page 16 to 19 */\r\n#define OB_WRP_PAGES20TO23 0x00000020U /*!< Write protection of page 20 to 23 */\r\n#define OB_WRP_PAGES24TO27 0x00000040U /*!< Write protection of page 24 to 27 */\r\n#define OB_WRP_PAGES28TO31 0x00000080U /*!< Write protection of page 28 to 31 */\r\n#endif                                 /* STM32F101x6 || STM32F102x6 || STM32F103x6 */\r\n                                       /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */\r\n\r\n/* STM32 Medium-density devices */\r\n#if defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB)\r\n#define OB_WRP_PAGES32TO35   0x00000100U /*!< Write protection of page 32 to 35 */\r\n#define OB_WRP_PAGES36TO39   0x00000200U /*!< Write protection of page 36 to 39 */\r\n#define OB_WRP_PAGES40TO43   0x00000400U /*!< Write protection of page 40 to 43 */\r\n#define OB_WRP_PAGES44TO47   0x00000800U /*!< Write protection of page 44 to 47 */\r\n#define OB_WRP_PAGES48TO51   0x00001000U /*!< Write protection of page 48 to 51 */\r\n#define OB_WRP_PAGES52TO55   0x00002000U /*!< Write protection of page 52 to 55 */\r\n#define OB_WRP_PAGES56TO59   0x00004000U /*!< Write protection of page 56 to 59 */\r\n#define OB_WRP_PAGES60TO63   0x00008000U /*!< Write protection of page 60 to 63 */\r\n#define OB_WRP_PAGES64TO67   0x00010000U /*!< Write protection of page 64 to 67 */\r\n#define OB_WRP_PAGES68TO71   0x00020000U /*!< Write protection of page 68 to 71 */\r\n#define OB_WRP_PAGES72TO75   0x00040000U /*!< Write protection of page 72 to 75 */\r\n#define OB_WRP_PAGES76TO79   0x00080000U /*!< Write protection of page 76 to 79 */\r\n#define OB_WRP_PAGES80TO83   0x00100000U /*!< Write protection of page 80 to 83 */\r\n#define OB_WRP_PAGES84TO87   0x00200000U /*!< Write protection of page 84 to 87 */\r\n#define OB_WRP_PAGES88TO91   0x00400000U /*!< Write protection of page 88 to 91 */\r\n#define OB_WRP_PAGES92TO95   0x00800000U /*!< Write protection of page 92 to 95 */\r\n#define OB_WRP_PAGES96TO99   0x01000000U /*!< Write protection of page 96 to 99 */\r\n#define OB_WRP_PAGES100TO103 0x02000000U /*!< Write protection of page 100 to 103 */\r\n#define OB_WRP_PAGES104TO107 0x04000000U /*!< Write protection of page 104 to 107 */\r\n#define OB_WRP_PAGES108TO111 0x08000000U /*!< Write protection of page 108 to 111 */\r\n#define OB_WRP_PAGES112TO115 0x10000000U /*!< Write protection of page 112 to 115 */\r\n#define OB_WRP_PAGES116TO119 0x20000000U /*!< Write protection of page 115 to 119 */\r\n#define OB_WRP_PAGES120TO123 0x40000000U /*!< Write protection of page 120 to 123 */\r\n#define OB_WRP_PAGES124TO127 0x80000000U /*!< Write protection of page 124 to 127 */\r\n#endif                                   /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */\r\n\r\n/* STM32 High-density, XL-density and Connectivity line devices */\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define OB_WRP_PAGES0TO1    0x00000001U /*!< Write protection of page 0 TO 1 */\r\n#define OB_WRP_PAGES2TO3    0x00000002U /*!< Write protection of page 2 TO 3 */\r\n#define OB_WRP_PAGES4TO5    0x00000004U /*!< Write protection of page 4 TO 5 */\r\n#define OB_WRP_PAGES6TO7    0x00000008U /*!< Write protection of page 6 TO 7 */\r\n#define OB_WRP_PAGES8TO9    0x00000010U /*!< Write protection of page 8 TO 9 */\r\n#define OB_WRP_PAGES10TO11  0x00000020U /*!< Write protection of page 10 TO 11 */\r\n#define OB_WRP_PAGES12TO13  0x00000040U /*!< Write protection of page 12 TO 13 */\r\n#define OB_WRP_PAGES14TO15  0x00000080U /*!< Write protection of page 14 TO 15 */\r\n#define OB_WRP_PAGES16TO17  0x00000100U /*!< Write protection of page 16 TO 17 */\r\n#define OB_WRP_PAGES18TO19  0x00000200U /*!< Write protection of page 18 TO 19 */\r\n#define OB_WRP_PAGES20TO21  0x00000400U /*!< Write protection of page 20 TO 21 */\r\n#define OB_WRP_PAGES22TO23  0x00000800U /*!< Write protection of page 22 TO 23 */\r\n#define OB_WRP_PAGES24TO25  0x00001000U /*!< Write protection of page 24 TO 25 */\r\n#define OB_WRP_PAGES26TO27  0x00002000U /*!< Write protection of page 26 TO 27 */\r\n#define OB_WRP_PAGES28TO29  0x00004000U /*!< Write protection of page 28 TO 29 */\r\n#define OB_WRP_PAGES30TO31  0x00008000U /*!< Write protection of page 30 TO 31 */\r\n#define OB_WRP_PAGES32TO33  0x00010000U /*!< Write protection of page 32 TO 33 */\r\n#define OB_WRP_PAGES34TO35  0x00020000U /*!< Write protection of page 34 TO 35 */\r\n#define OB_WRP_PAGES36TO37  0x00040000U /*!< Write protection of page 36 TO 37 */\r\n#define OB_WRP_PAGES38TO39  0x00080000U /*!< Write protection of page 38 TO 39 */\r\n#define OB_WRP_PAGES40TO41  0x00100000U /*!< Write protection of page 40 TO 41 */\r\n#define OB_WRP_PAGES42TO43  0x00200000U /*!< Write protection of page 42 TO 43 */\r\n#define OB_WRP_PAGES44TO45  0x00400000U /*!< Write protection of page 44 TO 45 */\r\n#define OB_WRP_PAGES46TO47  0x00800000U /*!< Write protection of page 46 TO 47 */\r\n#define OB_WRP_PAGES48TO49  0x01000000U /*!< Write protection of page 48 TO 49 */\r\n#define OB_WRP_PAGES50TO51  0x02000000U /*!< Write protection of page 50 TO 51 */\r\n#define OB_WRP_PAGES52TO53  0x04000000U /*!< Write protection of page 52 TO 53 */\r\n#define OB_WRP_PAGES54TO55  0x08000000U /*!< Write protection of page 54 TO 55 */\r\n#define OB_WRP_PAGES56TO57  0x10000000U /*!< Write protection of page 56 TO 57 */\r\n#define OB_WRP_PAGES58TO59  0x20000000U /*!< Write protection of page 58 TO 59 */\r\n#define OB_WRP_PAGES60TO61  0x40000000U /*!< Write protection of page 60 TO 61 */\r\n#define OB_WRP_PAGES62TO127 0x80000000U /*!< Write protection of page 62 TO 127 */\r\n#define OB_WRP_PAGES62TO255 0x80000000U /*!< Write protection of page 62 TO 255 */\r\n#define OB_WRP_PAGES62TO511 0x80000000U /*!< Write protection of page 62 TO 511 */\r\n#endif                                  /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB */\r\n                                        /* STM32F101xG || STM32F103xG */\r\n                                        /* STM32F105xC || STM32F107xC */\r\n\r\n#define OB_WRP_ALLPAGES 0xFFFFFFFFU /*!< Write protection of all Pages */\r\n\r\n/* Low Density */\r\n#if defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F103x6)\r\n#define OB_WRP_PAGES0TO31MASK 0x000000FFU\r\n#endif /* STM32F101x6 || STM32F102x6 || STM32F103x6 */\r\n\r\n/* Medium Density */\r\n#if defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F102xB) || defined(STM32F103xB)\r\n#define OB_WRP_PAGES0TO31MASK   0x000000FFU\r\n#define OB_WRP_PAGES32TO63MASK  0x0000FF00U\r\n#define OB_WRP_PAGES64TO95MASK  0x00FF0000U\r\n#define OB_WRP_PAGES96TO127MASK 0xFF000000U\r\n#endif /* STM32F100xB || STM32F101xB || STM32F102xB || STM32F103xB*/\r\n\r\n/* High Density */\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F103xE)\r\n#define OB_WRP_PAGES0TO15MASK   0x000000FFU\r\n#define OB_WRP_PAGES16TO31MASK  0x0000FF00U\r\n#define OB_WRP_PAGES32TO47MASK  0x00FF0000U\r\n#define OB_WRP_PAGES48TO255MASK 0xFF000000U\r\n#endif /* STM32F100xE || STM32F101xE || STM32F103xE */\r\n\r\n/* XL Density */\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define OB_WRP_PAGES0TO15MASK   0x000000FFU\r\n#define OB_WRP_PAGES16TO31MASK  0x0000FF00U\r\n#define OB_WRP_PAGES32TO47MASK  0x00FF0000U\r\n#define OB_WRP_PAGES48TO511MASK 0xFF000000U\r\n#endif /* STM32F101xG || STM32F103xG */\r\n\r\n/* Connectivity line devices */\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define OB_WRP_PAGES0TO15MASK   0x000000FFU\r\n#define OB_WRP_PAGES16TO31MASK  0x0000FF00U\r\n#define OB_WRP_PAGES32TO47MASK  0x00FF0000U\r\n#define OB_WRP_PAGES48TO127MASK 0xFF000000U\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_Read_Protection Option Byte Read Protection\r\n * @{\r\n */\r\n#define OB_RDP_LEVEL_0 ((uint8_t)0xA5)\r\n#define OB_RDP_LEVEL_1 ((uint8_t)0x00)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_IWatchdog Option Byte IWatchdog\r\n * @{\r\n */\r\n#define OB_IWDG_SW ((uint16_t)0x0001) /*!< Software IWDG selected */\r\n#define OB_IWDG_HW ((uint16_t)0x0000) /*!< Hardware IWDG selected */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_nRST_STOP Option Byte nRST STOP\r\n * @{\r\n */\r\n#define OB_STOP_NO_RST ((uint16_t)0x0002) /*!< No reset generated when entering in STOP */\r\n#define OB_STOP_RST    ((uint16_t)0x0000) /*!< Reset generated when entering in STOP */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_OB_nRST_STDBY Option Byte nRST STDBY\r\n * @{\r\n */\r\n#define OB_STDBY_NO_RST ((uint16_t)0x0004) /*!< No reset generated when entering in STANDBY */\r\n#define OB_STDBY_RST    ((uint16_t)0x0000) /*!< Reset generated when entering in STANDBY */\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(FLASH_BANK2_END)\r\n/** @defgroup FLASHEx_OB_BOOT1 Option Byte BOOT1\r\n * @{\r\n */\r\n#define OB_BOOT1_RESET ((uint16_t)0x0000) /*!< BOOT1 Reset */\r\n#define OB_BOOT1_SET   ((uint16_t)0x0008) /*!< BOOT1 Set */\r\n/**\r\n * @}\r\n */\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/** @defgroup FLASHEx_OB_Data_Address  Option Byte Data Address\r\n * @{\r\n */\r\n#define OB_DATA_ADDRESS_DATA0 0x1FFFF804U\r\n#define OB_DATA_ADDRESS_DATA1 0x1FFFF806U\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASHEx_Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASH_Flag_definition Flag definition\r\n * @brief Flag definition\r\n * @{\r\n */\r\n#if defined(FLASH_BANK2_END)\r\n#define FLASH_FLAG_BSY    FLASH_FLAG_BSY_BANK1    /*!< FLASH Bank1 Busy flag                   */\r\n#define FLASH_FLAG_PGERR  FLASH_FLAG_PGERR_BANK1  /*!< FLASH Bank1 Programming error flag      */\r\n#define FLASH_FLAG_WRPERR FLASH_FLAG_WRPERR_BANK1 /*!< FLASH Bank1 Write protected error flag  */\r\n#define FLASH_FLAG_EOP    FLASH_FLAG_EOP_BANK1    /*!< FLASH Bank1 End of Operation flag       */\r\n\r\n#define FLASH_FLAG_BSY_BANK1    FLASH_SR_BSY      /*!< FLASH Bank1 Busy flag                   */\r\n#define FLASH_FLAG_PGERR_BANK1  FLASH_SR_PGERR    /*!< FLASH Bank1 Programming error flag      */\r\n#define FLASH_FLAG_WRPERR_BANK1 FLASH_SR_WRPRTERR /*!< FLASH Bank1 Write protected error flag  */\r\n#define FLASH_FLAG_EOP_BANK1    FLASH_SR_EOP      /*!< FLASH Bank1 End of Operation flag       */\r\n\r\n#define FLASH_FLAG_BSY_BANK2    (FLASH_SR2_BSY << 16U)      /*!< FLASH Bank2 Busy flag                   */\r\n#define FLASH_FLAG_PGERR_BANK2  (FLASH_SR2_PGERR << 16U)    /*!< FLASH Bank2 Programming error flag      */\r\n#define FLASH_FLAG_WRPERR_BANK2 (FLASH_SR2_WRPRTERR << 16U) /*!< FLASH Bank2 Write protected error flag  */\r\n#define FLASH_FLAG_EOP_BANK2    (FLASH_SR2_EOP << 16U)      /*!< FLASH Bank2 End of Operation flag       */\r\n\r\n#else\r\n\r\n#define FLASH_FLAG_BSY    FLASH_SR_BSY      /*!< FLASH Busy flag                          */\r\n#define FLASH_FLAG_PGERR  FLASH_SR_PGERR    /*!< FLASH Programming error flag             */\r\n#define FLASH_FLAG_WRPERR FLASH_SR_WRPRTERR /*!< FLASH Write protected error flag         */\r\n#define FLASH_FLAG_EOP    FLASH_SR_EOP      /*!< FLASH End of Operation flag              */\r\n\r\n#endif\r\n#define FLASH_FLAG_OPTVERR ((OBR_REG_INDEX << 8U | FLASH_OBR_OPTERR)) /*!< Option Byte Error        */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASH_Interrupt_definition Interrupt definition\r\n * @brief FLASH Interrupt definition\r\n * @{\r\n */\r\n#if defined(FLASH_BANK2_END)\r\n#define FLASH_IT_EOP FLASH_IT_EOP_BANK1 /*!< End of FLASH Operation Interrupt source Bank1 */\r\n#define FLASH_IT_ERR FLASH_IT_ERR_BANK1 /*!< Error Interrupt source Bank1                  */\r\n\r\n#define FLASH_IT_EOP_BANK1 FLASH_CR_EOPIE /*!< End of FLASH Operation Interrupt source Bank1 */\r\n#define FLASH_IT_ERR_BANK1 FLASH_CR_ERRIE /*!< Error Interrupt source Bank1                  */\r\n\r\n#define FLASH_IT_EOP_BANK2 (FLASH_CR2_EOPIE << 16U) /*!< End of FLASH Operation Interrupt source Bank2 */\r\n#define FLASH_IT_ERR_BANK2 (FLASH_CR2_ERRIE << 16U) /*!< Error Interrupt source Bank2                  */\r\n\r\n#else\r\n\r\n#define FLASH_IT_EOP FLASH_CR_EOPIE /*!< End of FLASH Operation Interrupt source */\r\n#define FLASH_IT_ERR FLASH_CR_ERRIE /*!< Error Interrupt source                  */\r\n\r\n#endif\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Exported_Macros FLASHEx Exported Macros\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASH_Interrupt Interrupt\r\n *  @brief macros to handle FLASH interrupts\r\n * @{\r\n */\r\n\r\n#if defined(FLASH_BANK2_END)\r\n/**\r\n * @brief  Enable the specified FLASH interrupt.\r\n * @param  __INTERRUPT__  FLASH interrupt\r\n *     This parameter can be any combination of the following values:\r\n *     @arg @ref FLASH_IT_EOP_BANK1 End of FLASH Operation Interrupt on bank1\r\n *     @arg @ref FLASH_IT_ERR_BANK1 Error Interrupt on bank1\r\n *     @arg @ref FLASH_IT_EOP_BANK2 End of FLASH Operation Interrupt on bank2\r\n *     @arg @ref FLASH_IT_ERR_BANK2 Error Interrupt on bank2\r\n * @retval none\r\n */\r\n#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__)           \\\r\n  do {                                                 \\\r\n    /* Enable Bank1 IT */                              \\\r\n    SET_BIT(FLASH->CR, ((__INTERRUPT__)&0x0000FFFFU)); \\\r\n    /* Enable Bank2 IT */                              \\\r\n    SET_BIT(FLASH->CR2, ((__INTERRUPT__) >> 16U));     \\\r\n  } while (0U)\r\n\r\n/**\r\n * @brief  Disable the specified FLASH interrupt.\r\n * @param  __INTERRUPT__  FLASH interrupt\r\n *     This parameter can be any combination of the following values:\r\n *     @arg @ref FLASH_IT_EOP_BANK1 End of FLASH Operation Interrupt on bank1\r\n *     @arg @ref FLASH_IT_ERR_BANK1 Error Interrupt on bank1\r\n *     @arg @ref FLASH_IT_EOP_BANK2 End of FLASH Operation Interrupt on bank2\r\n *     @arg @ref FLASH_IT_ERR_BANK2 Error Interrupt on bank2\r\n * @retval none\r\n */\r\n#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__)            \\\r\n  do {                                                   \\\r\n    /* Disable Bank1 IT */                               \\\r\n    CLEAR_BIT(FLASH->CR, ((__INTERRUPT__)&0x0000FFFFU)); \\\r\n    /* Disable Bank2 IT */                               \\\r\n    CLEAR_BIT(FLASH->CR2, ((__INTERRUPT__) >> 16U));     \\\r\n  } while (0U)\r\n\r\n/**\r\n * @brief  Get the specified FLASH flag status.\r\n * @param  __FLAG__ specifies the FLASH flag to check.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref FLASH_FLAG_EOP_BANK1    FLASH End of Operation flag on bank1\r\n *            @arg @ref FLASH_FLAG_WRPERR_BANK1 FLASH Write protected error flag on bank1\r\n *            @arg @ref FLASH_FLAG_PGERR_BANK1  FLASH Programming error flag on bank1\r\n *            @arg @ref FLASH_FLAG_BSY_BANK1    FLASH Busy flag on bank1\r\n *            @arg @ref FLASH_FLAG_EOP_BANK2    FLASH End of Operation flag on bank2\r\n *            @arg @ref FLASH_FLAG_WRPERR_BANK2 FLASH Write protected error flag on bank2\r\n *            @arg @ref FLASH_FLAG_PGERR_BANK2  FLASH Programming error flag on bank2\r\n *            @arg @ref FLASH_FLAG_BSY_BANK2    FLASH Busy flag on bank2\r\n *            @arg @ref FLASH_FLAG_OPTVERR  Loaded OB and its complement do not match\r\n * @retval The new state of __FLAG__ (SET or RESET).\r\n */\r\n#define __HAL_FLASH_GET_FLAG(__FLAG__) \\\r\n  (((__FLAG__) == FLASH_FLAG_OPTVERR) ? (FLASH->OBR & FLASH_OBR_OPTERR) : ((((__FLAG__)&SR_FLAG_MASK) != RESET) ? (FLASH->SR & ((__FLAG__)&SR_FLAG_MASK)) : (FLASH->SR2 & ((__FLAG__) >> 16U))))\r\n\r\n/**\r\n * @brief  Clear the specified FLASH flag.\r\n * @param  __FLAG__ specifies the FLASH flags to clear.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg @ref FLASH_FLAG_EOP_BANK1    FLASH End of Operation flag on bank1\r\n *            @arg @ref FLASH_FLAG_WRPERR_BANK1 FLASH Write protected error flag on bank1\r\n *            @arg @ref FLASH_FLAG_PGERR_BANK1  FLASH Programming error flag on bank1\r\n *            @arg @ref FLASH_FLAG_BSY_BANK1    FLASH Busy flag on bank1\r\n *            @arg @ref FLASH_FLAG_EOP_BANK2    FLASH End of Operation flag on bank2\r\n *            @arg @ref FLASH_FLAG_WRPERR_BANK2 FLASH Write protected error flag on bank2\r\n *            @arg @ref FLASH_FLAG_PGERR_BANK2  FLASH Programming error flag on bank2\r\n *            @arg @ref FLASH_FLAG_BSY_BANK2    FLASH Busy flag on bank2\r\n *            @arg @ref FLASH_FLAG_OPTVERR  Loaded OB and its complement do not match\r\n * @retval none\r\n */\r\n#define __HAL_FLASH_CLEAR_FLAG(__FLAG__)        \\\r\n  do {                                          \\\r\n    /* Clear FLASH_FLAG_OPTVERR flag */         \\\r\n    if ((__FLAG__) == FLASH_FLAG_OPTVERR) {     \\\r\n      CLEAR_BIT(FLASH->OBR, FLASH_OBR_OPTERR);  \\\r\n    } else {                                    \\\r\n      /* Clear Flag in Bank1 */                 \\\r\n      if (((__FLAG__)&SR_FLAG_MASK) != RESET) { \\\r\n        FLASH->SR = ((__FLAG__)&SR_FLAG_MASK);  \\\r\n      }                                         \\\r\n      /* Clear Flag in Bank2 */                 \\\r\n      if (((__FLAG__) >> 16U) != RESET) {       \\\r\n        FLASH->SR2 = ((__FLAG__) >> 16U);       \\\r\n      }                                         \\\r\n    }                                           \\\r\n  } while (0U)\r\n#else\r\n                      /**\r\n                       * @brief  Enable the specified FLASH interrupt.\r\n                       * @param  __INTERRUPT__  FLASH interrupt\r\n                       *         This parameter can be any combination of the following values:\r\n                       *     @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt\r\n                       *     @arg @ref FLASH_IT_ERR Error Interrupt\r\n                       * @retval none\r\n                       */\r\n#define __HAL_FLASH_ENABLE_IT(__INTERRUPT__)  (FLASH->CR |= (__INTERRUPT__))\r\n\r\n/**\r\n * @brief  Disable the specified FLASH interrupt.\r\n * @param  __INTERRUPT__  FLASH interrupt\r\n *         This parameter can be any combination of the following values:\r\n *     @arg @ref FLASH_IT_EOP End of FLASH Operation Interrupt\r\n *     @arg @ref FLASH_IT_ERR Error Interrupt\r\n * @retval none\r\n */\r\n#define __HAL_FLASH_DISABLE_IT(__INTERRUPT__) (FLASH->CR &= ~(__INTERRUPT__))\r\n\r\n/**\r\n * @brief  Get the specified FLASH flag status.\r\n * @param  __FLAG__ specifies the FLASH flag to check.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref FLASH_FLAG_EOP    FLASH End of Operation flag\r\n *            @arg @ref FLASH_FLAG_WRPERR FLASH Write protected error flag\r\n *            @arg @ref FLASH_FLAG_PGERR  FLASH Programming error flag\r\n *            @arg @ref FLASH_FLAG_BSY    FLASH Busy flag\r\n *            @arg @ref FLASH_FLAG_OPTVERR  Loaded OB and its complement do not match\r\n * @retval The new state of __FLAG__ (SET or RESET).\r\n */\r\n#define __HAL_FLASH_GET_FLAG(__FLAG__)        (((__FLAG__) == FLASH_FLAG_OPTVERR) ? (FLASH->OBR & FLASH_OBR_OPTERR) : (FLASH->SR & (__FLAG__)))\r\n/**\r\n * @brief  Clear the specified FLASH flag.\r\n * @param  __FLAG__ specifies the FLASH flags to clear.\r\n *          This parameter can be any combination of the following values:\r\n *            @arg @ref FLASH_FLAG_EOP    FLASH End of Operation flag\r\n *            @arg @ref FLASH_FLAG_WRPERR FLASH Write protected error flag\r\n *            @arg @ref FLASH_FLAG_PGERR  FLASH Programming error flag\r\n *            @arg @ref FLASH_FLAG_OPTVERR  Loaded OB and its complement do not match\r\n * @retval none\r\n */\r\n#define __HAL_FLASH_CLEAR_FLAG(__FLAG__)       \\\r\n  do {                                         \\\r\n    /* Clear FLASH_FLAG_OPTVERR flag */        \\\r\n    if ((__FLAG__) == FLASH_FLAG_OPTVERR) {    \\\r\n      CLEAR_BIT(FLASH->OBR, FLASH_OBR_OPTERR); \\\r\n    } else {                                   \\\r\n      /* Clear Flag in Bank1 */                \\\r\n      FLASH->SR = (__FLAG__);                  \\\r\n    }                                          \\\r\n  } while (0U)\r\n\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup FLASHEx_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASHEx_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* IO operation functions *****************************************************/\r\nHAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError);\r\nHAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASHEx_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* Peripheral Control functions ***********************************************/\r\nHAL_StatusTypeDef HAL_FLASHEx_OBErase(void);\r\nHAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit);\r\nvoid              HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit);\r\nuint32_t          HAL_FLASHEx_OBGetUserData(uint32_t DATAAdress);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_FLASH_EX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_gpio.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of GPIO HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_GPIO_H\r\n#define __STM32F1xx_HAL_GPIO_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup GPIO\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup GPIO_Exported_Types GPIO Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief GPIO Init structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t Pin; /*!< Specifies the GPIO pins to be configured.\r\n                     This parameter can be any value of @ref GPIO_pins_define */\r\n\r\n  uint32_t Mode; /*!< Specifies the operating mode for the selected pins.\r\n                      This parameter can be a value of @ref GPIO_mode_define */\r\n\r\n  uint32_t Pull; /*!< Specifies the Pull-up or Pull-Down activation for the selected pins.\r\n                      This parameter can be a value of @ref GPIO_pull_define */\r\n\r\n  uint32_t Speed; /*!< Specifies the speed for the selected pins.\r\n                       This parameter can be a value of @ref GPIO_speed_define */\r\n} GPIO_InitTypeDef;\r\n\r\n/**\r\n * @brief  GPIO Bit SET and Bit RESET enumeration\r\n */\r\ntypedef enum { GPIO_PIN_RESET = 0U, GPIO_PIN_SET } GPIO_PinState;\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup GPIO_Exported_Constants GPIO Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIO_pins_define GPIO pins define\r\n * @{\r\n */\r\n#define GPIO_PIN_0   ((uint16_t)0x0001) /* Pin 0 selected    */\r\n#define GPIO_PIN_1   ((uint16_t)0x0002) /* Pin 1 selected    */\r\n#define GPIO_PIN_2   ((uint16_t)0x0004) /* Pin 2 selected    */\r\n#define GPIO_PIN_3   ((uint16_t)0x0008) /* Pin 3 selected    */\r\n#define GPIO_PIN_4   ((uint16_t)0x0010) /* Pin 4 selected    */\r\n#define GPIO_PIN_5   ((uint16_t)0x0020) /* Pin 5 selected    */\r\n#define GPIO_PIN_6   ((uint16_t)0x0040) /* Pin 6 selected    */\r\n#define GPIO_PIN_7   ((uint16_t)0x0080) /* Pin 7 selected    */\r\n#define GPIO_PIN_8   ((uint16_t)0x0100) /* Pin 8 selected    */\r\n#define GPIO_PIN_9   ((uint16_t)0x0200) /* Pin 9 selected    */\r\n#define GPIO_PIN_10  ((uint16_t)0x0400) /* Pin 10 selected   */\r\n#define GPIO_PIN_11  ((uint16_t)0x0800) /* Pin 11 selected   */\r\n#define GPIO_PIN_12  ((uint16_t)0x1000) /* Pin 12 selected   */\r\n#define GPIO_PIN_13  ((uint16_t)0x2000) /* Pin 13 selected   */\r\n#define GPIO_PIN_14  ((uint16_t)0x4000) /* Pin 14 selected   */\r\n#define GPIO_PIN_15  ((uint16_t)0x8000) /* Pin 15 selected   */\r\n#define GPIO_PIN_All ((uint16_t)0xFFFF) /* All pins selected */\r\n\r\n#define GPIO_PIN_MASK 0x0000FFFFU /* PIN mask for assert test */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIO_mode_define GPIO mode define\r\n * @brief GPIO Configuration Mode\r\n *        Elements values convention: 0xX0yz00YZ\r\n *           - X  : GPIO mode or EXTI Mode\r\n *           - y  : External IT or Event trigger detection\r\n *           - z  : IO configuration on External IT or Event\r\n *           - Y  : Output type (Push Pull or Open Drain)\r\n *           - Z  : IO Direction mode (Input, Output, Alternate or Analog)\r\n * @{\r\n */\r\n#define GPIO_MODE_INPUT     0x00000000U     /*!< Input Floating Mode                   */\r\n#define GPIO_MODE_OUTPUT_PP 0x00000001U     /*!< Output Push Pull Mode                 */\r\n#define GPIO_MODE_OUTPUT_OD 0x00000011U     /*!< Output Open Drain Mode                */\r\n#define GPIO_MODE_AF_PP     0x00000002U     /*!< Alternate Function Push Pull Mode     */\r\n#define GPIO_MODE_AF_OD     0x00000012U     /*!< Alternate Function Open Drain Mode    */\r\n#define GPIO_MODE_AF_INPUT  GPIO_MODE_INPUT /*!< Alternate Function Input Mode         */\r\n\r\n#define GPIO_MODE_ANALOG 0x00000003U /*!< Analog Mode  */\r\n\r\n#define GPIO_MODE_IT_RISING         0x10110000U /*!< External Interrupt Mode with Rising edge trigger detection          */\r\n#define GPIO_MODE_IT_FALLING        0x10210000U /*!< External Interrupt Mode with Falling edge trigger detection         */\r\n#define GPIO_MODE_IT_RISING_FALLING 0x10310000U /*!< External Interrupt Mode with Rising/Falling edge trigger detection  */\r\n\r\n#define GPIO_MODE_EVT_RISING         0x10120000U /*!< External Event Mode with Rising edge trigger detection               */\r\n#define GPIO_MODE_EVT_FALLING        0x10220000U /*!< External Event Mode with Falling edge trigger detection              */\r\n#define GPIO_MODE_EVT_RISING_FALLING 0x10320000U /*!< External Event Mode with Rising/Falling edge trigger detection       */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIO_speed_define  GPIO speed define\r\n * @brief GPIO Output Maximum frequency\r\n * @{\r\n */\r\n#define GPIO_SPEED_FREQ_LOW    (GPIO_CRL_MODE0_1) /*!< Low speed */\r\n#define GPIO_SPEED_FREQ_MEDIUM (GPIO_CRL_MODE0_0) /*!< Medium speed */\r\n#define GPIO_SPEED_FREQ_HIGH   (GPIO_CRL_MODE0)   /*!< High speed */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIO_pull_define GPIO pull define\r\n * @brief GPIO Pull-Up or Pull-Down Activation\r\n * @{\r\n */\r\n#define GPIO_NOPULL   0x00000000U /*!< No Pull-up or Pull-down activation  */\r\n#define GPIO_PULLUP   0x00000001U /*!< Pull-up activation                  */\r\n#define GPIO_PULLDOWN 0x00000002U /*!< Pull-down activation                */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup GPIO_Exported_Macros GPIO Exported Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Checks whether the specified EXTI line flag is set or not.\r\n * @param  __EXTI_LINE__: specifies the EXTI line flag to check.\r\n *         This parameter can be GPIO_PIN_x where x can be(0..15)\r\n * @retval The new state of __EXTI_LINE__ (SET or RESET).\r\n */\r\n#define __HAL_GPIO_EXTI_GET_FLAG(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__))\r\n\r\n/**\r\n * @brief  Clears the EXTI's line pending flags.\r\n * @param  __EXTI_LINE__: specifies the EXTI lines flags to clear.\r\n *         This parameter can be any combination of GPIO_PIN_x where x can be (0..15)\r\n * @retval None\r\n */\r\n#define __HAL_GPIO_EXTI_CLEAR_FLAG(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__))\r\n\r\n/**\r\n * @brief  Checks whether the specified EXTI line is asserted or not.\r\n * @param  __EXTI_LINE__: specifies the EXTI line to check.\r\n *          This parameter can be GPIO_PIN_x where x can be(0..15)\r\n * @retval The new state of __EXTI_LINE__ (SET or RESET).\r\n */\r\n#define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__))\r\n\r\n/**\r\n * @brief  Clears the EXTI's line pending bits.\r\n * @param  __EXTI_LINE__: specifies the EXTI lines to clear.\r\n *          This parameter can be any combination of GPIO_PIN_x where x can be (0..15)\r\n * @retval None\r\n */\r\n#define __HAL_GPIO_EXTI_CLEAR_IT(__EXTI_LINE__) (EXTI->PR = (__EXTI_LINE__))\r\n\r\n/**\r\n * @brief  Generates a Software interrupt on selected EXTI line.\r\n * @param  __EXTI_LINE__: specifies the EXTI line to check.\r\n *          This parameter can be GPIO_PIN_x where x can be(0..15)\r\n * @retval None\r\n */\r\n#define __HAL_GPIO_EXTI_GENERATE_SWIT(__EXTI_LINE__) (EXTI->SWIER |= (__EXTI_LINE__))\r\n/**\r\n * @}\r\n */\r\n\r\n/* Include GPIO HAL Extension module */\r\n#include \"stm32f1xx_hal_gpio_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup GPIO_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup GPIO_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* Initialization and de-initialization functions *****************************/\r\nvoid HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init);\r\nvoid HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup GPIO_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* IO operation functions *****************************************************/\r\nGPIO_PinState     HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);\r\nvoid              HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);\r\nvoid              HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);\r\nHAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);\r\nvoid              HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);\r\nvoid              HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* Private types -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private constants ---------------------------------------------------------*/\r\n/** @defgroup GPIO_Private_Constants GPIO Private Constants\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup GPIO_Private_Macros GPIO Private Macros\r\n * @{\r\n */\r\n#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))\r\n#define IS_GPIO_PIN(PIN)           ((((PIN)&GPIO_PIN_MASK) != 0x00U) && (((PIN) & ~GPIO_PIN_MASK) == 0x00U))\r\n#define IS_GPIO_MODE(MODE)                                                                                                                                                                             \\\r\n  (((MODE) == GPIO_MODE_INPUT) || ((MODE) == GPIO_MODE_OUTPUT_PP) || ((MODE) == GPIO_MODE_OUTPUT_OD) || ((MODE) == GPIO_MODE_AF_PP) || ((MODE) == GPIO_MODE_AF_OD) || ((MODE) == GPIO_MODE_IT_RISING)  \\\r\n   || ((MODE) == GPIO_MODE_IT_FALLING) || ((MODE) == GPIO_MODE_IT_RISING_FALLING) || ((MODE) == GPIO_MODE_EVT_RISING) || ((MODE) == GPIO_MODE_EVT_FALLING) || ((MODE) == GPIO_MODE_EVT_RISING_FALLING) \\\r\n   || ((MODE) == GPIO_MODE_ANALOG))\r\n#define IS_GPIO_SPEED(SPEED) (((SPEED) == GPIO_SPEED_FREQ_LOW) || ((SPEED) == GPIO_SPEED_FREQ_MEDIUM) || ((SPEED) == GPIO_SPEED_FREQ_HIGH))\r\n#define IS_GPIO_PULL(PULL)   (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || ((PULL) == GPIO_PULLDOWN))\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private functions ---------------------------------------------------------*/\r\n/** @defgroup GPIO_Private_Functions GPIO Private Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_GPIO_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_gpio_ex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_gpio_ex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of GPIO HAL Extension module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_GPIO_EX_H\r\n#define __STM32F1xx_HAL_GPIO_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIOEx GPIOEx\r\n * @{\r\n */\r\n/* Exported types ------------------------------------------------------------*/\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup GPIOEx_Exported_Constants GPIOEx Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIOEx_EVENTOUT EVENTOUT Cortex Configuration\r\n * @brief This section propose definition to use the Cortex EVENTOUT signal.\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIOEx_EVENTOUT_PIN EVENTOUT Pin\r\n * @{\r\n */\r\n\r\n#define AFIO_EVENTOUT_PIN_0  AFIO_EVCR_PIN_PX0  /*!< EVENTOUT on pin 0 */\r\n#define AFIO_EVENTOUT_PIN_1  AFIO_EVCR_PIN_PX1  /*!< EVENTOUT on pin 1 */\r\n#define AFIO_EVENTOUT_PIN_2  AFIO_EVCR_PIN_PX2  /*!< EVENTOUT on pin 2 */\r\n#define AFIO_EVENTOUT_PIN_3  AFIO_EVCR_PIN_PX3  /*!< EVENTOUT on pin 3 */\r\n#define AFIO_EVENTOUT_PIN_4  AFIO_EVCR_PIN_PX4  /*!< EVENTOUT on pin 4 */\r\n#define AFIO_EVENTOUT_PIN_5  AFIO_EVCR_PIN_PX5  /*!< EVENTOUT on pin 5 */\r\n#define AFIO_EVENTOUT_PIN_6  AFIO_EVCR_PIN_PX6  /*!< EVENTOUT on pin 6 */\r\n#define AFIO_EVENTOUT_PIN_7  AFIO_EVCR_PIN_PX7  /*!< EVENTOUT on pin 7 */\r\n#define AFIO_EVENTOUT_PIN_8  AFIO_EVCR_PIN_PX8  /*!< EVENTOUT on pin 8 */\r\n#define AFIO_EVENTOUT_PIN_9  AFIO_EVCR_PIN_PX9  /*!< EVENTOUT on pin 9 */\r\n#define AFIO_EVENTOUT_PIN_10 AFIO_EVCR_PIN_PX10 /*!< EVENTOUT on pin 10 */\r\n#define AFIO_EVENTOUT_PIN_11 AFIO_EVCR_PIN_PX11 /*!< EVENTOUT on pin 11 */\r\n#define AFIO_EVENTOUT_PIN_12 AFIO_EVCR_PIN_PX12 /*!< EVENTOUT on pin 12 */\r\n#define AFIO_EVENTOUT_PIN_13 AFIO_EVCR_PIN_PX13 /*!< EVENTOUT on pin 13 */\r\n#define AFIO_EVENTOUT_PIN_14 AFIO_EVCR_PIN_PX14 /*!< EVENTOUT on pin 14 */\r\n#define AFIO_EVENTOUT_PIN_15 AFIO_EVCR_PIN_PX15 /*!< EVENTOUT on pin 15 */\r\n\r\n#define IS_AFIO_EVENTOUT_PIN(__PIN__)                                                                                                                                                                 \\\r\n  (((__PIN__) == AFIO_EVENTOUT_PIN_0) || ((__PIN__) == AFIO_EVENTOUT_PIN_1) || ((__PIN__) == AFIO_EVENTOUT_PIN_2) || ((__PIN__) == AFIO_EVENTOUT_PIN_3) || ((__PIN__) == AFIO_EVENTOUT_PIN_4)         \\\r\n   || ((__PIN__) == AFIO_EVENTOUT_PIN_5) || ((__PIN__) == AFIO_EVENTOUT_PIN_6) || ((__PIN__) == AFIO_EVENTOUT_PIN_7) || ((__PIN__) == AFIO_EVENTOUT_PIN_8) || ((__PIN__) == AFIO_EVENTOUT_PIN_9)      \\\r\n   || ((__PIN__) == AFIO_EVENTOUT_PIN_10) || ((__PIN__) == AFIO_EVENTOUT_PIN_11) || ((__PIN__) == AFIO_EVENTOUT_PIN_12) || ((__PIN__) == AFIO_EVENTOUT_PIN_13) || ((__PIN__) == AFIO_EVENTOUT_PIN_14) \\\r\n   || ((__PIN__) == AFIO_EVENTOUT_PIN_15))\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIOEx_EVENTOUT_PORT EVENTOUT Port\r\n * @{\r\n */\r\n\r\n#define AFIO_EVENTOUT_PORT_A AFIO_EVCR_PORT_PA /*!< EVENTOUT on port A */\r\n#define AFIO_EVENTOUT_PORT_B AFIO_EVCR_PORT_PB /*!< EVENTOUT on port B */\r\n#define AFIO_EVENTOUT_PORT_C AFIO_EVCR_PORT_PC /*!< EVENTOUT on port C */\r\n#define AFIO_EVENTOUT_PORT_D AFIO_EVCR_PORT_PD /*!< EVENTOUT on port D */\r\n#define AFIO_EVENTOUT_PORT_E AFIO_EVCR_PORT_PE /*!< EVENTOUT on port E */\r\n\r\n#define IS_AFIO_EVENTOUT_PORT(__PORT__) \\\r\n  (((__PORT__) == AFIO_EVENTOUT_PORT_A) || ((__PORT__) == AFIO_EVENTOUT_PORT_B) || ((__PORT__) == AFIO_EVENTOUT_PORT_C) || ((__PORT__) == AFIO_EVENTOUT_PORT_D) || ((__PORT__) == AFIO_EVENTOUT_PORT_E))\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIOEx_AFIO_AF_REMAPPING Alternate Function Remapping\r\n * @brief This section propose definition to remap the alternate function to some other port/pins.\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief Enable the remapping of SPI1 alternate function NSS, SCK, MISO and MOSI.\r\n * @note  ENABLE: Remap     (NSS/PA15, SCK/PB3, MISO/PB4, MOSI/PB5)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SPI1_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_SPI1_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of SPI1 alternate function NSS, SCK, MISO and MOSI.\r\n * @note  DISABLE: No remap (NSS/PA4,  SCK/PA5, MISO/PA6, MOSI/PA7)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SPI1_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_SPI1_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of I2C1 alternate function SCL and SDA.\r\n * @note  ENABLE: Remap     (SCL/PB8, SDA/PB9)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_I2C1_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_I2C1_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of I2C1 alternate function SCL and SDA.\r\n * @note  DISABLE: No remap (SCL/PB6, SDA/PB7)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_I2C1_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_I2C1_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of USART1 alternate function TX and RX.\r\n * @note  ENABLE: Remap     (TX/PB6, RX/PB7)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART1_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_USART1_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of USART1 alternate function TX and RX.\r\n * @note  DISABLE: No remap (TX/PA9, RX/PA10)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART1_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_USART1_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of USART2 alternate function CTS, RTS, CK, TX and RX.\r\n * @note  ENABLE: Remap     (CTS/PD3, RTS/PD4, TX/PD5, RX/PD6, CK/PD7)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART2_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_USART2_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of USART2 alternate function CTS, RTS, CK, TX and RX.\r\n * @note  DISABLE: No remap (CTS/PA0, RTS/PA1, TX/PA2, RX/PA3, CK/PA4)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART2_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_USART2_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX.\r\n * @note  ENABLE: Full remap     (TX/PD8,  RX/PD9,  CK/PD10, CTS/PD11, RTS/PD12)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART3_ENABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_USART3_REMAP_FULLREMAP, AFIO_MAPR_USART3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX.\r\n * @note  PARTIAL: Partial remap (TX/PC10, RX/PC11, CK/PC12, CTS/PB13, RTS/PB14)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART3_PARTIAL() AFIO_REMAP_PARTIAL(AFIO_MAPR_USART3_REMAP_PARTIALREMAP, AFIO_MAPR_USART3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of USART3 alternate function CTS, RTS, CK, TX and RX.\r\n * @note  DISABLE: No remap      (TX/PB10, RX/PB11, CK/PB12, CTS/PB13, RTS/PB14)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_USART3_DISABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_USART3_REMAP_NOREMAP, AFIO_MAPR_USART3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN)\r\n * @note  ENABLE: Full remap     (ETR/PE7,  CH1/PE9, CH2/PE11, CH3/PE13, CH4/PE14, BKIN/PE15, CH1N/PE8,  CH2N/PE10, CH3N/PE12)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM1_ENABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM1_REMAP_FULLREMAP, AFIO_MAPR_TIM1_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN)\r\n * @note  PARTIAL: Partial remap (ETR/PA12, CH1/PA8, CH2/PA9,  CH3/PA10, CH4/PA11, BKIN/PA6,  CH1N/PA7,  CH2N/PB0,  CH3N/PB1)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM1_PARTIAL() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM1_REMAP_PARTIALREMAP, AFIO_MAPR_TIM1_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM1 alternate function channels 1 to 4, 1N to 3N, external trigger (ETR) and Break input (BKIN)\r\n * @note  DISABLE: No remap      (ETR/PA12, CH1/PA8, CH2/PA9,  CH3/PA10, CH4/PA11, BKIN/PB12, CH1N/PB13, CH2N/PB14, CH3N/PB15)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM1_DISABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM1_REMAP_NOREMAP, AFIO_MAPR_TIM1_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR)\r\n * @note  ENABLE: Full remap       (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM2_ENABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM2_REMAP_FULLREMAP, AFIO_MAPR_TIM2_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR)\r\n * @note  PARTIAL_2: Partial remap (CH1/ETR/PA0,  CH2/PA1, CH3/PB10, CH4/PB11)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM2_PARTIAL_2() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM2_REMAP_PARTIALREMAP2, AFIO_MAPR_TIM2_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR)\r\n * @note  PARTIAL_1: Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2,  CH4/PA3)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM2_PARTIAL_1() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1, AFIO_MAPR_TIM2_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM2 alternate function channels 1 to 4 and external trigger (ETR)\r\n * @note  DISABLE: No remap        (CH1/ETR/PA0,  CH2/PA1, CH3/PA2,  CH4/PA3)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM2_DISABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM2_REMAP_NOREMAP, AFIO_MAPR_TIM2_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM3 alternate function channels 1 to 4\r\n * @note  ENABLE: Full remap     (CH1/PC6, CH2/PC7, CH3/PC8, CH4/PC9)\r\n * @note  TIM3_ETR on PE0 is not re-mapped.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM3_ENABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM3_REMAP_FULLREMAP, AFIO_MAPR_TIM3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM3 alternate function channels 1 to 4\r\n * @note  PARTIAL: Partial remap (CH1/PB4, CH2/PB5, CH3/PB0, CH4/PB1)\r\n * @note  TIM3_ETR on PE0 is not re-mapped.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM3_PARTIAL() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM3_REMAP_PARTIALREMAP, AFIO_MAPR_TIM3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM3 alternate function channels 1 to 4\r\n * @note  DISABLE: No remap      (CH1/PA6, CH2/PA7, CH3/PB0, CH4/PB1)\r\n * @note  TIM3_ETR on PE0 is not re-mapped.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM3_DISABLE() AFIO_REMAP_PARTIAL(AFIO_MAPR_TIM3_REMAP_NOREMAP, AFIO_MAPR_TIM3_REMAP_FULLREMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM4 alternate function channels 1 to 4.\r\n * @note  ENABLE: Full remap (TIM4_CH1/PD12, TIM4_CH2/PD13, TIM4_CH3/PD14, TIM4_CH4/PD15)\r\n * @note  TIM4_ETR on PE0 is not re-mapped.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM4_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_TIM4_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM4 alternate function channels 1 to 4.\r\n * @note  DISABLE: No remap  (TIM4_CH1/PB6,  TIM4_CH2/PB7,  TIM4_CH3/PB8,  TIM4_CH4/PB9)\r\n * @note  TIM4_ETR on PE0 is not re-mapped.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM4_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_TIM4_REMAP)\r\n\r\n#if defined(AFIO_MAPR_CAN_REMAP_REMAP1)\r\n\r\n/**\r\n * @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface.\r\n * @note  CASE 1: CAN_RX mapped to PA11, CAN_TX mapped to PA12\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CAN1_1() AFIO_REMAP_PARTIAL(AFIO_MAPR_CAN_REMAP_REMAP1, AFIO_MAPR_CAN_REMAP)\r\n\r\n/**\r\n * @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface.\r\n * @note  CASE 2: CAN_RX mapped to PB8,  CAN_TX mapped to PB9 (not available on 36-pin package)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CAN1_2() AFIO_REMAP_PARTIAL(AFIO_MAPR_CAN_REMAP_REMAP2, AFIO_MAPR_CAN_REMAP)\r\n\r\n/**\r\n * @brief Enable or disable the remapping of CAN alternate function CAN_RX and CAN_TX in devices with a single CAN interface.\r\n * @note  CASE 3: CAN_RX mapped to PD0,  CAN_TX mapped to PD1\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CAN1_3() AFIO_REMAP_PARTIAL(AFIO_MAPR_CAN_REMAP_REMAP3, AFIO_MAPR_CAN_REMAP)\r\n\r\n#endif\r\n\r\n/**\r\n * @brief Enable the remapping of PD0 and PD1. When the HSE oscillator is not used\r\n *        (application running on internal 8 MHz RC) PD0 and PD1 can be mapped on OSC_IN and\r\n *        OSC_OUT. This is available only on 36, 48 and 64 pins packages (PD0 and PD1 are available\r\n *        on 100-pin and 144-pin packages, no need for remapping).\r\n * @note  ENABLE: PD0 remapped on OSC_IN, PD1 remapped on OSC_OUT.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_PD01_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_PD01_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of PD0 and PD1. When the HSE oscillator is not used\r\n *        (application running on internal 8 MHz RC) PD0 and PD1 can be mapped on OSC_IN and\r\n *        OSC_OUT. This is available only on 36, 48 and 64 pins packages (PD0 and PD1 are available\r\n *        on 100-pin and 144-pin packages, no need for remapping).\r\n * @note  DISABLE: No remapping of PD0 and PD1\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_PD01_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_PD01_REMAP)\r\n\r\n#if defined(AFIO_MAPR_TIM5CH4_IREMAP)\r\n/**\r\n * @brief Enable the remapping of TIM5CH4.\r\n * @note  ENABLE: LSI internal clock is connected to TIM5_CH4 input for calibration purpose.\r\n * @note  This function is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM5CH4_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_TIM5CH4_IREMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM5CH4.\r\n * @note  DISABLE: TIM5_CH4 is connected to PA3\r\n * @note  This function is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM5CH4_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_TIM5CH4_IREMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_ETH_REMAP)\r\n/**\r\n * @brief Enable the remapping of Ethernet MAC connections with the PHY.\r\n * @note  ENABLE: Remap     (RX_DV-CRS_DV/PD8, RXD0/PD9, RXD1/PD10, RXD2/PD11, RXD3/PD12)\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ETH_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ETH_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of Ethernet MAC connections with the PHY.\r\n * @note  DISABLE: No remap (RX_DV-CRS_DV/PA7, RXD0/PC4, RXD1/PC5,  RXD2/PB0,  RXD3/PB1)\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ETH_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ETH_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_CAN2_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of CAN2 alternate function CAN2_RX and CAN2_TX.\r\n * @note  ENABLE: Remap     (CAN2_RX/PB5,  CAN2_TX/PB6)\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CAN2_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_CAN2_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of CAN2 alternate function CAN2_RX and CAN2_TX.\r\n * @note  DISABLE: No remap (CAN2_RX/PB12, CAN2_TX/PB13)\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CAN2_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_CAN2_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_MII_RMII_SEL)\r\n/**\r\n * @brief Configures the Ethernet MAC internally for use with an external MII or RMII PHY.\r\n * @note  ETH_RMII: Configure Ethernet MAC for connection with an RMII PHY\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_ETH_RMII() AFIO_REMAP_ENABLE(AFIO_MAPR_MII_RMII_SEL)\r\n\r\n/**\r\n * @brief Configures the Ethernet MAC internally for use with an external MII or RMII PHY.\r\n * @note  ETH_MII: Configure Ethernet MAC for connection with an MII PHY\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_ETH_MII() AFIO_REMAP_DISABLE(AFIO_MAPR_MII_RMII_SEL)\r\n#endif\r\n\r\n/**\r\n * @brief Enable the remapping of ADC1_ETRGINJ (ADC 1 External trigger injected conversion).\r\n * @note  ENABLE: ADC1 External Event injected conversion is connected to TIM8 Channel4.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC1_ETRGINJ_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ADC1_ETRGINJ_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of ADC1_ETRGINJ (ADC 1 External trigger injected conversion).\r\n * @note  DISABLE: ADC1 External trigger injected conversion is connected to EXTI15\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC1_ETRGINJ_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ADC1_ETRGINJ_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of ADC1_ETRGREG (ADC 1 External trigger regular conversion).\r\n * @note  ENABLE: ADC1 External Event regular conversion is connected to TIM8 TRG0.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC1_ETRGREG_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ADC1_ETRGREG_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of ADC1_ETRGREG (ADC 1 External trigger regular conversion).\r\n * @note  DISABLE: ADC1 External trigger regular conversion is connected to EXTI11\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC1_ETRGREG_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ADC1_ETRGREG_REMAP)\r\n\r\n#if defined(AFIO_MAPR_ADC2_ETRGINJ_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger injected conversion).\r\n * @note  ENABLE: ADC2 External Event injected conversion is connected to TIM8 Channel4.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC2_ETRGINJ_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ADC2_ETRGINJ_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger injected conversion).\r\n * @note  DISABLE: ADC2 External trigger injected conversion is connected to EXTI15\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC2_ETRGINJ_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ADC2_ETRGINJ_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_ADC2_ETRGREG_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion).\r\n * @note  ENABLE: ADC2 External Event regular conversion is connected to TIM8 TRG0.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC2_ETRGREG_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_ADC2_ETRGREG_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion).\r\n * @note  DISABLE: ADC2 External trigger regular conversion is connected to EXTI11\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_ADC2_ETRGREG_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_ADC2_ETRGREG_REMAP)\r\n#endif\r\n\r\n/**\r\n * @brief Enable the Serial wire JTAG configuration\r\n * @note  ENABLE: Full SWJ (JTAG-DP + SW-DP): Reset State\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SWJ_ENABLE() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_RESET)\r\n\r\n/**\r\n * @brief Enable the Serial wire JTAG configuration\r\n * @note  NONJTRST: Full SWJ (JTAG-DP + SW-DP) but without NJTRST\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SWJ_NONJTRST() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_NOJNTRST)\r\n\r\n/**\r\n * @brief Enable the Serial wire JTAG configuration\r\n * @note  NOJTAG: JTAG-DP Disabled and SW-DP Enabled\r\n * @retval None\r\n */\r\n\r\n#define __HAL_AFIO_REMAP_SWJ_NOJTAG() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_JTAGDISABLE)\r\n\r\n/**\r\n * @brief Disable the Serial wire JTAG configuration\r\n * @note  DISABLE: JTAG-DP Disabled and SW-DP Disabled\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SWJ_DISABLE() AFIO_DBGAFR_CONFIG(AFIO_MAPR_SWJ_CFG_DISABLE)\r\n\r\n#if defined(AFIO_MAPR_SPI3_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of SPI3 alternate functions SPI3_NSS/I2S3_WS, SPI3_SCK/I2S3_CK, SPI3_MISO, SPI3_MOSI/I2S3_SD.\r\n * @note  ENABLE: Remap     (SPI3_NSS-I2S3_WS/PA4,  SPI3_SCK-I2S3_CK/PC10, SPI3_MISO/PC11, SPI3_MOSI-I2S3_SD/PC12)\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SPI3_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_SPI3_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of SPI3 alternate functions SPI3_NSS/I2S3_WS, SPI3_SCK/I2S3_CK, SPI3_MISO, SPI3_MOSI/I2S3_SD.\r\n * @note  DISABLE: No remap (SPI3_NSS-I2S3_WS/PA15, SPI3_SCK-I2S3_CK/PB3,  SPI3_MISO/PB4,  SPI3_MOSI-I2S3_SD/PB5).\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_SPI3_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_SPI3_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_TIM2ITR1_IREMAP)\r\n\r\n/**\r\n * @brief Control of TIM2_ITR1 internal mapping.\r\n * @note  TO_USB: Connect USB OTG SOF (Start of Frame) output to TIM2_ITR1 for calibration purposes.\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_TIM2ITR1_TO_USB() AFIO_REMAP_ENABLE(AFIO_MAPR_TIM2ITR1_IREMAP)\r\n\r\n/**\r\n * @brief Control of TIM2_ITR1 internal mapping.\r\n * @note  TO_ETH: Connect TIM2_ITR1 internally to the Ethernet PTP output for calibration purposes.\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_TIM2ITR1_TO_ETH() AFIO_REMAP_DISABLE(AFIO_MAPR_TIM2ITR1_IREMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR_PTP_PPS_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion).\r\n * @note  ENABLE: PTP_PPS is output on PB5 pin.\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_ETH_PTP_PPS_ENABLE() AFIO_REMAP_ENABLE(AFIO_MAPR_PTP_PPS_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of ADC2_ETRGREG (ADC 2 External trigger regular conversion).\r\n * @note  DISABLE: PTP_PPS not output on PB5 pin.\r\n * @note  This bit is available only in connectivity line devices and is reserved otherwise.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_ETH_PTP_PPS_DISABLE() AFIO_REMAP_DISABLE(AFIO_MAPR_PTP_PPS_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM9_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM9_CH1 and TIM9_CH2.\r\n * @note  ENABLE: Remap     (TIM9_CH1 on PE5 and TIM9_CH2 on PE6).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM9_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM9_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM9_CH1 and TIM9_CH2.\r\n * @note  DISABLE: No remap (TIM9_CH1 on PA2 and TIM9_CH2 on PA3).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM9_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM9_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM10_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM10_CH1.\r\n * @note  ENABLE: Remap     (TIM10_CH1 on PF6).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM10_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM10_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM10_CH1.\r\n * @note  DISABLE: No remap (TIM10_CH1 on PB8).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM10_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM10_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM11_REMAP)\r\n/**\r\n * @brief Enable the remapping of TIM11_CH1.\r\n * @note  ENABLE: Remap     (TIM11_CH1 on PF7).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM11_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM11_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM11_CH1.\r\n * @note  DISABLE: No remap (TIM11_CH1 on PB9).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM11_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM11_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM13_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM13_CH1.\r\n * @note  ENABLE: Remap     STM32F100:(TIM13_CH1 on PF8). Others:(TIM13_CH1 on PB0).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM13_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM13_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM13_CH1.\r\n * @note  DISABLE: No remap STM32F100:(TIM13_CH1 on PA6). Others:(TIM13_CH1 on PC8).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM13_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM13_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM14_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM14_CH1.\r\n * @note  ENABLE: Remap     STM32F100:(TIM14_CH1 on PB1). Others:(TIM14_CH1 on PF9).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM14_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM14_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM14_CH1.\r\n * @note  DISABLE: No remap STM32F100:(TIM14_CH1 on PC9). Others:(TIM14_CH1 on PA7).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM14_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM14_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_FSMC_NADV_REMAP)\r\n\r\n/**\r\n * @brief Controls the use of the optional FSMC_NADV signal.\r\n * @note  DISCONNECTED: The NADV signal is not connected. The I/O pin can be used by another peripheral.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_FSMCNADV_DISCONNECTED() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_FSMC_NADV_REMAP)\r\n\r\n/**\r\n * @brief Controls the use of the optional FSMC_NADV signal.\r\n * @note  CONNECTED: The NADV signal is connected to the output (default).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_FSMCNADV_CONNECTED() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_FSMC_NADV_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM15_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM15_CH1 and TIM15_CH2.\r\n * @note  ENABLE: Remap     (TIM15_CH1 on PB14 and TIM15_CH2 on PB15).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM15_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM15_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM15_CH1 and TIM15_CH2.\r\n * @note  DISABLE: No remap (TIM15_CH1 on PA2  and TIM15_CH2 on PA3).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM15_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM15_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM16_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM16_CH1.\r\n * @note  ENABLE: Remap     (TIM16_CH1 on PA6).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM16_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM16_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM16_CH1.\r\n * @note  DISABLE: No remap (TIM16_CH1 on PB8).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM16_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM16_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM17_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM17_CH1.\r\n * @note  ENABLE: Remap     (TIM17_CH1 on PA7).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM17_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM17_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM17_CH1.\r\n * @note  DISABLE: No remap (TIM17_CH1 on PB9).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM17_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM17_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_CEC_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of CEC.\r\n * @note  ENABLE: Remap     (CEC on PB10).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CEC_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_CEC_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of CEC.\r\n * @note  DISABLE: No remap (CEC on PB8).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_CEC_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_CEC_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM1_DMA_REMAP)\r\n\r\n/**\r\n * @brief Controls the mapping of the TIM1_CH1 TIM1_CH2 DMA requests onto the DMA1 channels.\r\n * @note  ENABLE: Remap (TIM1_CH1 DMA request/DMA1 Channel6, TIM1_CH2 DMA request/DMA1 Channel6)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM1DMA_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM1_DMA_REMAP)\r\n\r\n/**\r\n * @brief Controls the mapping of the TIM1_CH1 TIM1_CH2 DMA requests onto the DMA1 channels.\r\n * @note  DISABLE: No remap (TIM1_CH1 DMA request/DMA1 Channel2, TIM1_CH2 DMA request/DMA1 Channel3).\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM1DMA_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM1_DMA_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM67_DAC_DMA_REMAP)\r\n\r\n/**\r\n * @brief Controls the mapping of the TIM6_DAC1 and TIM7_DAC2 DMA requests onto the DMA1 channels.\r\n * @note  ENABLE: Remap (TIM6_DAC1 DMA request/DMA1 Channel3, TIM7_DAC2 DMA request/DMA1 Channel4)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM67DACDMA_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM67_DAC_DMA_REMAP)\r\n\r\n/**\r\n * @brief Controls the mapping of the TIM6_DAC1 and TIM7_DAC2 DMA requests onto the DMA1 channels.\r\n * @note  DISABLE: No remap (TIM6_DAC1 DMA request/DMA2 Channel3, TIM7_DAC2 DMA request/DMA2 Channel4)\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM67DACDMA_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM67_DAC_DMA_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_TIM12_REMAP)\r\n\r\n/**\r\n * @brief Enable the remapping of TIM12_CH1 and TIM12_CH2.\r\n * @note  ENABLE: Remap     (TIM12_CH1 on PB12 and TIM12_CH2 on PB13).\r\n * @note  This bit is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM12_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM12_REMAP)\r\n\r\n/**\r\n * @brief Disable the remapping of TIM12_CH1 and TIM12_CH2.\r\n * @note  DISABLE: No remap (TIM12_CH1 on PC4  and TIM12_CH2 on PC5).\r\n * @note  This bit is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_TIM12_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_TIM12_REMAP)\r\n#endif\r\n\r\n#if defined(AFIO_MAPR2_MISC_REMAP)\r\n\r\n/**\r\n * @brief Miscellaneous features remapping.\r\n *        This bit is set and cleared by software. It controls miscellaneous features.\r\n *        The DMA2 channel 5 interrupt position in the vector table.\r\n *        The timer selection for DAC trigger 3 (TSEL[2:0] = 011, for more details refer to the DAC_CR register).\r\n * @note  ENABLE: DMA2 channel 5 interrupt is mapped separately at position 60 and TIM15 TRGO event is\r\n *        selected as DAC Trigger 3, TIM15 triggers TIM1/3.\r\n * @note  This bit is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_MISC_ENABLE() SET_BIT(AFIO->MAPR2, AFIO_MAPR2_MISC_REMAP)\r\n\r\n/**\r\n * @brief Miscellaneous features remapping.\r\n *        This bit is set and cleared by software. It controls miscellaneous features.\r\n *        The DMA2 channel 5 interrupt position in the vector table.\r\n *        The timer selection for DAC trigger 3 (TSEL[2:0] = 011, for more details refer to the DAC_CR register).\r\n * @note  DISABLE: DMA2 channel 5 interrupt is mapped with DMA2 channel 4 at position 59, TIM5 TRGO\r\n *        event is selected as DAC Trigger 3, TIM5 triggers TIM1/3.\r\n * @note  This bit is available only in high density value line devices.\r\n * @retval None\r\n */\r\n#define __HAL_AFIO_REMAP_MISC_DISABLE() CLEAR_BIT(AFIO->MAPR2, AFIO_MAPR2_MISC_REMAP)\r\n#endif\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIOEx_Private_Macros GPIOEx Private Macros\r\n * @{\r\n */\r\n#if defined(STM32F101x6) || defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6)\r\n#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA)) ? 0U : ((__GPIOx__) == (GPIOB)) ? 1U : ((__GPIOx__) == (GPIOC)) ? 2U : 3U)\r\n#elif defined(STM32F100xB) || defined(STM32F101xB) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define GPIO_GET_INDEX(__GPIOx__) (((__GPIOx__) == (GPIOA)) ? 0U : ((__GPIOx__) == (GPIOB)) ? 1U : ((__GPIOx__) == (GPIOC)) ? 2U : ((__GPIOx__) == (GPIOD)) ? 3U : 4U)\r\n#elif defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define GPIO_GET_INDEX(__GPIOx__) \\\r\n  (((__GPIOx__) == (GPIOA)) ? 0U : ((__GPIOx__) == (GPIOB)) ? 1U : ((__GPIOx__) == (GPIOC)) ? 2U : ((__GPIOx__) == (GPIOD)) ? 3U : ((__GPIOx__) == (GPIOE)) ? 4U : ((__GPIOx__) == (GPIOF)) ? 5U : 6U)\r\n#endif\r\n\r\n#define AFIO_REMAP_ENABLE(REMAP_PIN) \\\r\n  do {                               \\\r\n    uint32_t tmpreg = AFIO->MAPR;    \\\r\n    tmpreg |= AFIO_MAPR_SWJ_CFG;     \\\r\n    tmpreg |= REMAP_PIN;             \\\r\n    AFIO->MAPR = tmpreg;             \\\r\n  } while (0U)\r\n\r\n#define AFIO_REMAP_DISABLE(REMAP_PIN) \\\r\n  do {                                \\\r\n    uint32_t tmpreg = AFIO->MAPR;     \\\r\n    tmpreg |= AFIO_MAPR_SWJ_CFG;      \\\r\n    tmpreg &= ~REMAP_PIN;             \\\r\n    AFIO->MAPR = tmpreg;              \\\r\n  } while (0U)\r\n\r\n#define AFIO_REMAP_PARTIAL(REMAP_PIN, REMAP_PIN_MASK) \\\r\n  do {                                                \\\r\n    uint32_t tmpreg = AFIO->MAPR;                     \\\r\n    tmpreg &= ~REMAP_PIN_MASK;                        \\\r\n    tmpreg |= AFIO_MAPR_SWJ_CFG;                      \\\r\n    tmpreg |= REMAP_PIN;                              \\\r\n    AFIO->MAPR = tmpreg;                              \\\r\n  } while (0U)\r\n\r\n#define AFIO_DBGAFR_CONFIG(DBGAFR_SWJCFG) \\\r\n  do {                                    \\\r\n    uint32_t tmpreg = AFIO->MAPR;         \\\r\n    tmpreg &= ~AFIO_MAPR_SWJ_CFG_Msk;     \\\r\n    tmpreg |= DBGAFR_SWJCFG;              \\\r\n    AFIO->MAPR = tmpreg;                  \\\r\n  } while (0U)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @addtogroup GPIOEx_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup GPIOEx_Exported_Functions_Group1\r\n * @{\r\n */\r\nvoid HAL_GPIOEx_ConfigEventout(uint32_t GPIO_PortSource, uint32_t GPIO_PinSource);\r\nvoid HAL_GPIOEx_EnableEventout(void);\r\nvoid HAL_GPIOEx_DisableEventout(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_GPIO_EX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_i2c.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_i2c.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of I2C HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_I2C_H\r\n#define __STM32F1xx_HAL_I2C_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup I2C\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup I2C_Exported_Types I2C Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  I2C Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t ClockSpeed; /*!< Specifies the clock frequency.\r\n                            This parameter must be set to a value lower than 400kHz */\r\n\r\n  uint32_t DutyCycle; /*!< Specifies the I2C fast mode duty cycle.\r\n                           This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */\r\n\r\n  uint32_t OwnAddress1; /*!< Specifies the first device own address.\r\n                             This parameter can be a 7-bit or 10-bit address. */\r\n\r\n  uint32_t AddressingMode; /*!< Specifies if 7-bit or 10-bit addressing mode is selected.\r\n                                This parameter can be a value of @ref I2C_addressing_mode */\r\n\r\n  uint32_t DualAddressMode; /*!< Specifies if dual addressing mode is selected.\r\n                                 This parameter can be a value of @ref I2C_dual_addressing_mode */\r\n\r\n  uint32_t OwnAddress2; /*!< Specifies the second device own address if dual addressing mode is selected\r\n                             This parameter can be a 7-bit address. */\r\n\r\n  uint32_t GeneralCallMode; /*!< Specifies if general call mode is selected.\r\n                                 This parameter can be a value of @ref I2C_general_call_addressing_mode */\r\n\r\n  uint32_t NoStretchMode; /*!< Specifies if nostretch mode is selected.\r\n                               This parameter can be a value of @ref I2C_nostretch_mode */\r\n\r\n} I2C_InitTypeDef;\r\n\r\n/**\r\n * @brief  HAL State structure definition\r\n * @note  HAL I2C State value coding follow below described bitmap :\r\n *          b7-b6  Error information\r\n *             00 : No Error\r\n *             01 : Abort (Abort user request on going)\r\n *             10 : Timeout\r\n *             11 : Error\r\n *          b5     IP initilisation status\r\n *             0  : Reset (IP not initialized)\r\n *             1  : Init done (IP initialized and ready to use. HAL I2C Init function called)\r\n *          b4     (not used)\r\n *             x  : Should be set to 0\r\n *          b3\r\n *             0  : Ready or Busy (No Listen mode ongoing)\r\n *             1  : Listen (IP in Address Listen Mode)\r\n *          b2     Intrinsic process state\r\n *             0  : Ready\r\n *             1  : Busy (IP busy with some configuration or internal operations)\r\n *          b1     Rx state\r\n *             0  : Ready (no Rx operation ongoing)\r\n *             1  : Busy (Rx operation ongoing)\r\n *          b0     Tx state\r\n *             0  : Ready (no Tx operation ongoing)\r\n *             1  : Busy (Tx operation ongoing)\r\n */\r\ntypedef enum {\r\n  HAL_I2C_STATE_RESET          = 0x00U, /*!< Peripheral is not yet Initialized         */\r\n  HAL_I2C_STATE_READY          = 0x20U, /*!< Peripheral Initialized and ready for use  */\r\n  HAL_I2C_STATE_BUSY           = 0x24U, /*!< An internal process is ongoing            */\r\n  HAL_I2C_STATE_BUSY_TX        = 0x21U, /*!< Data Transmission process is ongoing      */\r\n  HAL_I2C_STATE_BUSY_RX        = 0x22U, /*!< Data Reception process is ongoing         */\r\n  HAL_I2C_STATE_LISTEN         = 0x28U, /*!< Address Listen Mode is ongoing            */\r\n  HAL_I2C_STATE_BUSY_TX_LISTEN = 0x29U, /*!< Address Listen Mode and Data Transmission\r\n                                            process is ongoing                         */\r\n  HAL_I2C_STATE_BUSY_RX_LISTEN = 0x2AU, /*!< Address Listen Mode and Data Reception\r\n                                            process is ongoing                         */\r\n  HAL_I2C_STATE_ABORT   = 0x60U,        /*!< Abort user request ongoing                */\r\n  HAL_I2C_STATE_TIMEOUT = 0xA0U,        /*!< Timeout state                             */\r\n  HAL_I2C_STATE_ERROR   = 0xE0U         /*!< Error                                     */\r\n\r\n} HAL_I2C_StateTypeDef;\r\n\r\n/**\r\n * @brief  HAL Mode structure definition\r\n * @note  HAL I2C Mode value coding follow below described bitmap :\r\n *          b7     (not used)\r\n *             x  : Should be set to 0\r\n *          b6\r\n *             0  : None\r\n *             1  : Memory (HAL I2C communication is in Memory Mode)\r\n *          b5\r\n *             0  : None\r\n *             1  : Slave (HAL I2C communication is in Slave Mode)\r\n *          b4\r\n *             0  : None\r\n *             1  : Master (HAL I2C communication is in Master Mode)\r\n *          b3-b2-b1-b0  (not used)\r\n *             xxxx : Should be set to 0000\r\n */\r\ntypedef enum {\r\n  HAL_I2C_MODE_NONE   = 0x00U, /*!< No I2C communication on going             */\r\n  HAL_I2C_MODE_MASTER = 0x10U, /*!< I2C communication is in Master Mode       */\r\n  HAL_I2C_MODE_SLAVE  = 0x20U, /*!< I2C communication is in Slave Mode        */\r\n  HAL_I2C_MODE_MEM    = 0x40U  /*!< I2C communication is in Memory Mode       */\r\n\r\n} HAL_I2C_ModeTypeDef;\r\n\r\n/**\r\n * @brief  I2C handle Structure definition\r\n */\r\ntypedef struct {\r\n  I2C_TypeDef *Instance; /*!< I2C registers base address               */\r\n\r\n  I2C_InitTypeDef Init; /*!< I2C communication parameters             */\r\n\r\n  uint8_t *pBuffPtr; /*!< Pointer to I2C transfer buffer           */\r\n\r\n  uint16_t XferSize; /*!< I2C transfer size                        */\r\n\r\n  __IO uint16_t XferCount; /*!< I2C transfer counter                     */\r\n\r\n  __IO uint32_t XferOptions; /*!< I2C transfer options                     */\r\n\r\n  __IO uint32_t PreviousState; /*!< I2C communication Previous state and mode\r\n                                    context for internal usage               */\r\n\r\n  DMA_HandleTypeDef *hdmatx; /*!< I2C Tx DMA handle parameters             */\r\n\r\n  DMA_HandleTypeDef *hdmarx; /*!< I2C Rx DMA handle parameters             */\r\n\r\n  HAL_LockTypeDef Lock; /*!< I2C locking object                       */\r\n\r\n  __IO HAL_I2C_StateTypeDef State; /*!< I2C communication state                  */\r\n\r\n  __IO HAL_I2C_ModeTypeDef Mode; /*!< I2C communication mode                   */\r\n\r\n  __IO uint32_t ErrorCode; /*!< I2C Error code                           */\r\n\r\n  __IO uint32_t Devaddress; /*!< I2C Target device address                */\r\n\r\n  __IO uint32_t Memaddress; /*!< I2C Target memory address                */\r\n\r\n  __IO uint32_t MemaddSize; /*!< I2C Target memory address  size          */\r\n\r\n  __IO uint32_t EventCount; /*!< I2C Event counter                        */\r\n\r\n} I2C_HandleTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup I2C_Exported_Constants I2C Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup I2C_Error_Code I2C Error Code\r\n * @brief    I2C Error Code\r\n * @{\r\n */\r\n#define HAL_I2C_ERROR_NONE    0x00000000U /*!< No error           */\r\n#define HAL_I2C_ERROR_BERR    0x00000001U /*!< BERR error         */\r\n#define HAL_I2C_ERROR_ARLO    0x00000002U /*!< ARLO error         */\r\n#define HAL_I2C_ERROR_AF      0x00000004U /*!< AF error           */\r\n#define HAL_I2C_ERROR_OVR     0x00000008U /*!< OVR error          */\r\n#define HAL_I2C_ERROR_DMA     0x00000010U /*!< DMA transfer error */\r\n#define HAL_I2C_ERROR_TIMEOUT 0x00000020U /*!< Timeout Error      */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup I2C_duty_cycle_in_fast_mode I2C duty cycle in fast mode\r\n * @{\r\n */\r\n#define I2C_DUTYCYCLE_2    0x00000000U\r\n#define I2C_DUTYCYCLE_16_9 I2C_CCR_DUTY\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup I2C_addressing_mode I2C addressing mode\r\n * @{\r\n */\r\n#define I2C_ADDRESSINGMODE_7BIT 0x00004000U\r\n// #define I2C_ADDRESSINGMODE_10BIT (I2C_OAR1_ADDMODE | 0x00004000U)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup I2C_dual_addressing_mode  I2C dual addressing mode\r\n * @{\r\n */\r\n#define I2C_DUALADDRESS_DISABLE 0x00000000U\r\n#define I2C_DUALADDRESS_ENABLE  I2C_OAR2_ENDUAL\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup I2C_general_call_addressing_mode I2C general call addressing mode\r\n * @{\r\n */\r\n#define I2C_GENERALCALL_DISABLE 0x00000000U\r\n#define I2C_GENERALCALL_ENABLE  I2C_CR1_ENGC\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup I2C_nostretch_mode I2C nostretch mode\r\n * @{\r\n */\r\n#define I2C_NOSTRETCH_DISABLE 0x00000000U\r\n#define I2C_NOSTRETCH_ENABLE  I2C_CR1_NOSTRETCH\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup I2C_Memory_Address_Size I2C Memory Address Size\r\n * @{\r\n */\r\n#define I2C_MEMADD_SIZE_8BIT  0x00000001U\r\n#define I2C_MEMADD_SIZE_16BIT 0x00000010U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup I2C_XferDirection_definition I2C XferDirection definition\r\n * @{\r\n */\r\n#define I2C_DIRECTION_RECEIVE  0x00000000U\r\n#define I2C_DIRECTION_TRANSMIT 0x00000001U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup I2C_XferOptions_definition I2C XferOptions definition\r\n * @{\r\n */\r\n#define I2C_FIRST_FRAME          0x00000001U\r\n#define I2C_NEXT_FRAME           0x00000002U\r\n#define I2C_FIRST_AND_LAST_FRAME 0x00000004U\r\n#define I2C_LAST_FRAME           0x00000008U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup I2C_Interrupt_configuration_definition I2C Interrupt configuration definition\r\n * @{\r\n */\r\n#define I2C_IT_BUF I2C_CR2_ITBUFEN\r\n#define I2C_IT_EVT I2C_CR2_ITEVTEN\r\n#define I2C_IT_ERR I2C_CR2_ITERREN\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup I2C_Flag_definition I2C Flag definition\r\n * @{\r\n */\r\n#define I2C_FLAG_SMBALERT 0x00018000U\r\n#define I2C_FLAG_TIMEOUT  0x00014000U\r\n#define I2C_FLAG_PECERR   0x00011000U\r\n#define I2C_FLAG_OVR      0x00010800U\r\n#define I2C_FLAG_AF       0x00010400U\r\n#define I2C_FLAG_ARLO     0x00010200U\r\n#define I2C_FLAG_BERR     0x00010100U\r\n#define I2C_FLAG_TXE      0x00010080U\r\n#define I2C_FLAG_RXNE     0x00010040U\r\n#define I2C_FLAG_STOPF    0x00010010U\r\n// #define I2C_FLAG_ADD10      0x00010008U\r\n#define I2C_FLAG_BTF        0x00010004U\r\n#define I2C_FLAG_ADDR       0x00010002U\r\n#define I2C_FLAG_SB         0x00010001U\r\n#define I2C_FLAG_DUALF      0x00100080U\r\n#define I2C_FLAG_SMBHOST    0x00100040U\r\n#define I2C_FLAG_SMBDEFAULT 0x00100020U\r\n#define I2C_FLAG_GENCALL    0x00100010U\r\n#define I2C_FLAG_TRA        0x00100004U\r\n#define I2C_FLAG_BUSY       0x00100002U\r\n#define I2C_FLAG_MSL        0x00100001U\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup I2C_Exported_Macros I2C Exported Macros\r\n * @{\r\n */\r\n\r\n/** @brief Reset I2C handle state\r\n * @param  __HANDLE__: specifies the I2C Handle.\r\n *         This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral.\r\n * @retval None\r\n */\r\n#define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_I2C_STATE_RESET)\r\n\r\n/** @brief  Enable or disable the specified I2C interrupts.\r\n * @param  __HANDLE__: specifies the I2C Handle.\r\n *         This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral.\r\n * @param  __INTERRUPT__: specifies the interrupt source to enable or disable.\r\n *         This parameter can be one of the following values:\r\n *            @arg I2C_IT_BUF: Buffer interrupt enable\r\n *            @arg I2C_IT_EVT: Event interrupt enable\r\n *            @arg I2C_IT_ERR: Error interrupt enable\r\n * @retval None\r\n */\r\n#define __HAL_I2C_ENABLE_IT(__HANDLE__, __INTERRUPT__)  ((__HANDLE__)->Instance->CR2 |= (__INTERRUPT__))\r\n#define __HAL_I2C_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR2 &= (~(__INTERRUPT__)))\r\n\r\n/** @brief  Checks if the specified I2C interrupt source is enabled or disabled.\r\n * @param  __HANDLE__: specifies the I2C Handle.\r\n *         This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral.\r\n * @param  __INTERRUPT__: specifies the I2C interrupt source to check.\r\n *          This parameter can be one of the following values:\r\n *            @arg I2C_IT_BUF: Buffer interrupt enable\r\n *            @arg I2C_IT_EVT: Event interrupt enable\r\n *            @arg I2C_IT_ERR: Error interrupt enable\r\n * @retval The new state of __INTERRUPT__ (TRUE or FALSE).\r\n */\r\n#define __HAL_I2C_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR2 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)\r\n\r\n/** @brief  Checks whether the specified I2C flag is set or not.\r\n * @param  __HANDLE__: specifies the I2C Handle.\r\n *         This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral.\r\n * @param  __FLAG__: specifies the flag to check.\r\n *         This parameter can be one of the following values:\r\n *            @arg I2C_FLAG_SMBALERT: SMBus Alert flag\r\n *            @arg I2C_FLAG_TIMEOUT: Timeout or Tlow error flag\r\n *            @arg I2C_FLAG_PECERR: PEC error in reception flag\r\n *            @arg I2C_FLAG_OVR: Overrun/Underrun flag\r\n *            @arg I2C_FLAG_AF: Acknowledge failure flag\r\n *            @arg I2C_FLAG_ARLO: Arbitration lost flag\r\n *            @arg I2C_FLAG_BERR: Bus error flag\r\n *            @arg I2C_FLAG_TXE: Data register empty flag\r\n *            @arg I2C_FLAG_RXNE: Data register not empty flag\r\n *            @arg I2C_FLAG_STOPF: Stop detection flag\r\n *            @arg I2C_FLAG_ADD10: 10-bit header sent flag\r\n *            @arg I2C_FLAG_BTF: Byte transfer finished flag\r\n *            @arg I2C_FLAG_ADDR: Address sent flag\r\n *                                Address matched flag\r\n *            @arg I2C_FLAG_SB: Start bit flag\r\n *            @arg I2C_FLAG_DUALF: Dual flag\r\n *            @arg I2C_FLAG_SMBHOST: SMBus host header\r\n *            @arg I2C_FLAG_SMBDEFAULT: SMBus default header\r\n *            @arg I2C_FLAG_GENCALL: General call header flag\r\n *            @arg I2C_FLAG_TRA: Transmitter/Receiver flag\r\n *            @arg I2C_FLAG_BUSY: Bus busy flag\r\n *            @arg I2C_FLAG_MSL: Master/Slave flag\r\n * @retval The new state of __FLAG__ (TRUE or FALSE).\r\n */\r\n#define __HAL_I2C_GET_FLAG(__HANDLE__, __FLAG__)                                                                                            \\\r\n  ((((uint8_t)((__FLAG__) >> 16U)) == 0x01U) ? ((((__HANDLE__)->Instance->SR1) & ((__FLAG__)&I2C_FLAG_MASK)) == ((__FLAG__)&I2C_FLAG_MASK)) \\\r\n                                             : ((((__HANDLE__)->Instance->SR2) & ((__FLAG__)&I2C_FLAG_MASK)) == ((__FLAG__)&I2C_FLAG_MASK)))\r\n\r\n/** @brief  Clears the I2C pending flags which are cleared by writing 0 in a specific bit.\r\n * @param  __HANDLE__: specifies the I2C Handle.\r\n *         This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral.\r\n * @param  __FLAG__: specifies the flag to clear.\r\n *         This parameter can be any combination of the following values:\r\n *            @arg I2C_FLAG_SMBALERT: SMBus Alert flag\r\n *            @arg I2C_FLAG_TIMEOUT: Timeout or Tlow error flag\r\n *            @arg I2C_FLAG_PECERR: PEC error in reception flag\r\n *            @arg I2C_FLAG_OVR: Overrun/Underrun flag (Slave mode)\r\n *            @arg I2C_FLAG_AF: Acknowledge failure flag\r\n *            @arg I2C_FLAG_ARLO: Arbitration lost flag (Master mode)\r\n *            @arg I2C_FLAG_BERR: Bus error flag\r\n * @retval None\r\n */\r\n#define __HAL_I2C_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR1 = ~((__FLAG__)&I2C_FLAG_MASK))\r\n\r\n/** @brief  Clears the I2C ADDR pending flag.\r\n * @param  __HANDLE__: specifies the I2C Handle.\r\n *         This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral.\r\n * @retval None\r\n */\r\n#define __HAL_I2C_CLEAR_ADDRFLAG(__HANDLE__)            \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg = 0x00U;                       \\\r\n    tmpreg               = (__HANDLE__)->Instance->SR1; \\\r\n    tmpreg               = (__HANDLE__)->Instance->SR2; \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n/** @brief  Clears the I2C STOPF pending flag.\r\n * @param  __HANDLE__: specifies the I2C Handle.\r\n *         This parameter can be I2C where x: 1, 2, or 3 to select the I2C peripheral.\r\n * @retval None\r\n */\r\n#define __HAL_I2C_CLEAR_STOPFLAG(__HANDLE__)            \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg = 0x00U;                       \\\r\n    tmpreg               = (__HANDLE__)->Instance->SR1; \\\r\n    (__HANDLE__)->Instance->CR1 |= I2C_CR1_PE;          \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n/** @brief  Enable the I2C peripheral.\r\n * @param  __HANDLE__: specifies the I2C Handle.\r\n *         This parameter can be I2Cx where x: 1 or 2  to select the I2C peripheral.\r\n * @retval None\r\n */\r\n#define __HAL_I2C_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= I2C_CR1_PE)\r\n\r\n/** @brief  Disable the I2C peripheral.\r\n * @param  __HANDLE__: specifies the I2C Handle.\r\n *         This parameter can be I2Cx where x: 1 or 2  to select the I2C peripheral.\r\n * @retval None\r\n */\r\n#define __HAL_I2C_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~I2C_CR1_PE)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup I2C_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup I2C_Exported_Functions_Group1\r\n * @{\r\n */\r\n/* Initialization/de-initialization functions  **********************************/\r\nHAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c);\r\nHAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c);\r\nvoid              HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c);\r\nvoid              HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup I2C_Exported_Functions_Group2\r\n * @{\r\n */\r\n/* I/O operation functions  *****************************************************/\r\n/******* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);\r\nHAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);\r\nHAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout);\r\nHAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout);\r\nHAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);\r\nHAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);\r\nHAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout);\r\n\r\n/******* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);\r\nHAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);\r\nHAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);\r\nHAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);\r\nHAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);\r\nHAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);\r\n\r\nHAL_StatusTypeDef HAL_I2C_Master_Sequential_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);\r\nHAL_StatusTypeDef HAL_I2C_Master_Sequential_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);\r\nHAL_StatusTypeDef HAL_I2C_Slave_Sequential_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);\r\nHAL_StatusTypeDef HAL_I2C_Slave_Sequential_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);\r\nHAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress);\r\nHAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c);\r\nHAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c);\r\n\r\n/******* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);\r\nHAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);\r\nHAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);\r\nHAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);\r\nHAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);\r\nHAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);\r\n\r\n/******* I2C IRQHandler and Callbacks used in non blocking modes (Interrupt and DMA) */\r\nvoid HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c);\r\nvoid HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c);\r\nvoid HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c);\r\nvoid HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c);\r\nvoid HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c);\r\nvoid HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c);\r\nvoid HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode);\r\nvoid HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c);\r\nvoid HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c);\r\nvoid HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c);\r\nvoid HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c);\r\nvoid HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup I2C_Exported_Functions_Group3\r\n * @{\r\n */\r\n/* Peripheral State, Mode and Errors functions  *********************************/\r\nHAL_I2C_StateTypeDef HAL_I2C_GetState(I2C_HandleTypeDef *hi2c);\r\nHAL_I2C_ModeTypeDef  HAL_I2C_GetMode(I2C_HandleTypeDef *hi2c);\r\nuint32_t             HAL_I2C_GetError(I2C_HandleTypeDef *hi2c);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* Private types -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private constants ---------------------------------------------------------*/\r\n/** @defgroup I2C_Private_Constants I2C Private Constants\r\n * @{\r\n */\r\n#define I2C_FLAG_MASK              0x0000FFFFU\r\n#define I2C_MIN_PCLK_FREQ_STANDARD 2000000U /*!< 2 MHz                     */\r\n#define I2C_MIN_PCLK_FREQ_FAST     4000000U /*!< 4 MHz                     */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup I2C_Private_Macros I2C Private Macros\r\n * @{\r\n */\r\n\r\n#define I2C_MIN_PCLK_FREQ(__PCLK__, __SPEED__)              (((__SPEED__) <= 100000U) ? ((__PCLK__) < I2C_MIN_PCLK_FREQ_STANDARD) : ((__PCLK__) < I2C_MIN_PCLK_FREQ_FAST))\r\n#define I2C_CCR_CALCULATION(__PCLK__, __SPEED__, __COEFF__) (((((__PCLK__)-1U) / ((__SPEED__) * (__COEFF__))) + 1U) & I2C_CCR_CCR)\r\n#define I2C_FREQRANGE(__PCLK__)                             ((__PCLK__) / 1000000U)\r\n#define I2C_RISE_TIME(__FREQRANGE__, __SPEED__)             (((__SPEED__) <= 100000U) ? ((__FREQRANGE__) + 1U) : ((((__FREQRANGE__)*300U) / 1000U) + 1U))\r\n#define I2C_SPEED_STANDARD(__PCLK__, __SPEED__)             ((I2C_CCR_CALCULATION((__PCLK__), (__SPEED__), 2U) < 4U) ? 4U : I2C_CCR_CALCULATION((__PCLK__), (__SPEED__), 2U))\r\n#define I2C_SPEED_FAST(__PCLK__, __SPEED__, __DUTYCYCLE__) \\\r\n  (((__DUTYCYCLE__) == I2C_DUTYCYCLE_2) ? I2C_CCR_CALCULATION((__PCLK__), (__SPEED__), 3U) : (I2C_CCR_CALCULATION((__PCLK__), (__SPEED__), 25U) | I2C_DUTYCYCLE_16_9))\r\n#define I2C_SPEED(__PCLK__, __SPEED__, __DUTYCYCLE__)                                                                                 \\\r\n  (((__SPEED__) <= 100000U)                                                           ? (I2C_SPEED_STANDARD((__PCLK__), (__SPEED__))) \\\r\n   : ((I2C_SPEED_FAST((__PCLK__), (__SPEED__), (__DUTYCYCLE__)) & I2C_CCR_CCR) == 0U) ? 1U                                            \\\r\n                                                                                      : ((I2C_SPEED_FAST((__PCLK__), (__SPEED__), (__DUTYCYCLE__))) | I2C_CCR_FS))\r\n\r\n#define I2C_7BIT_ADD_WRITE(__ADDRESS__) ((uint8_t)((__ADDRESS__) & (~I2C_OAR1_ADD0)))\r\n#define I2C_7BIT_ADD_READ(__ADDRESS__)  ((uint8_t)((__ADDRESS__) | I2C_OAR1_ADD0))\r\n\r\n#define I2C_10BIT_ADDRESS(__ADDRESS__)      ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FFU))))\r\n#define I2C_10BIT_HEADER_WRITE(__ADDRESS__) ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300U))) >> 7U) | (uint16_t)(0x00F0U))))\r\n#define I2C_10BIT_HEADER_READ(__ADDRESS__)  ((uint8_t)((uint16_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0x0300U))) >> 7U) | (uint16_t)(0x00F1U))))\r\n\r\n#define I2C_MEM_ADD_MSB(__ADDRESS__) ((uint8_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0xFF00U))) >> 8U)))\r\n#define I2C_MEM_ADD_LSB(__ADDRESS__) ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FFU))))\r\n\r\n/** @defgroup I2C_IS_RTC_Definitions I2C Private macros to check input parameters\r\n * @{\r\n */\r\n#define IS_I2C_DUTY_CYCLE(CYCLE)                 (((CYCLE) == I2C_DUTYCYCLE_2) || ((CYCLE) == I2C_DUTYCYCLE_16_9))\r\n#define IS_I2C_ADDRESSING_MODE(ADDRESS)          (((ADDRESS) == I2C_ADDRESSINGMODE_7BIT) || ((ADDRESS) == I2C_ADDRESSINGMODE_10BIT))\r\n#define IS_I2C_DUAL_ADDRESS(ADDRESS)             (((ADDRESS) == I2C_DUALADDRESS_DISABLE) || ((ADDRESS) == I2C_DUALADDRESS_ENABLE))\r\n#define IS_I2C_GENERAL_CALL(CALL)                (((CALL) == I2C_GENERALCALL_DISABLE) || ((CALL) == I2C_GENERALCALL_ENABLE))\r\n#define IS_I2C_NO_STRETCH(STRETCH)               (((STRETCH) == I2C_NOSTRETCH_DISABLE) || ((STRETCH) == I2C_NOSTRETCH_ENABLE))\r\n#define IS_I2C_MEMADD_SIZE(SIZE)                 (((SIZE) == I2C_MEMADD_SIZE_8BIT) || ((SIZE) == I2C_MEMADD_SIZE_16BIT))\r\n#define IS_I2C_CLOCK_SPEED(SPEED)                (((SPEED) > 0) && ((SPEED) <= 400000U))\r\n#define IS_I2C_OWN_ADDRESS1(ADDRESS1)            (((ADDRESS1) & (uint32_t)(0xFFFFFC00U)) == 0U)\r\n#define IS_I2C_OWN_ADDRESS2(ADDRESS2)            (((ADDRESS2) & (uint32_t)(0xFFFFFF01U)) == 0U)\r\n#define IS_I2C_TRANSFER_OPTIONS_REQUEST(REQUEST) (((REQUEST) == I2C_FIRST_FRAME) || ((REQUEST) == I2C_NEXT_FRAME) || ((REQUEST) == I2C_FIRST_AND_LAST_FRAME) || ((REQUEST) == I2C_LAST_FRAME))\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private functions ---------------------------------------------------------*/\r\n/** @defgroup I2C_Private_Functions I2C Private Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_I2C_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_iwdg.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_iwdg.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of IWDG HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_IWDG_H\r\n#define __STM32F1xx_HAL_IWDG_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup IWDG\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup IWDG_Exported_Types IWDG Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  IWDG Init structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t Prescaler; /*!< Select the prescaler of the IWDG.\r\n                           This parameter can be a value of @ref IWDG_Prescaler */\r\n\r\n  uint32_t Reload; /*!< Specifies the IWDG down-counter reload value.\r\n                        This parameter must be a number between Min_Data = 0 and Max_Data = 0x0FFF */\r\n\r\n} IWDG_InitTypeDef;\r\n\r\n/**\r\n * @brief  IWDG Handle Structure definition\r\n */\r\ntypedef struct {\r\n  IWDG_TypeDef *Instance; /*!< Register base address    */\r\n\r\n  IWDG_InitTypeDef Init; /*!< IWDG required parameters */\r\n\r\n} IWDG_HandleTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup IWDG_Exported_Constants IWDG Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup IWDG_Prescaler IWDG Prescaler\r\n * @{\r\n */\r\n#define IWDG_PRESCALER_4   0x00000000U                   /*!< IWDG prescaler set to 4   */\r\n#define IWDG_PRESCALER_8   IWDG_PR_PR_0                  /*!< IWDG prescaler set to 8   */\r\n#define IWDG_PRESCALER_16  IWDG_PR_PR_1                  /*!< IWDG prescaler set to 16  */\r\n#define IWDG_PRESCALER_32  (IWDG_PR_PR_1 | IWDG_PR_PR_0) /*!< IWDG prescaler set to 32  */\r\n#define IWDG_PRESCALER_64  IWDG_PR_PR_2                  /*!< IWDG prescaler set to 64  */\r\n#define IWDG_PRESCALER_128 (IWDG_PR_PR_2 | IWDG_PR_PR_0) /*!< IWDG prescaler set to 128 */\r\n#define IWDG_PRESCALER_256 (IWDG_PR_PR_2 | IWDG_PR_PR_1) /*!< IWDG prescaler set to 256 */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macros -----------------------------------------------------------*/\r\n/** @defgroup IWDG_Exported_Macros IWDG Exported Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Enable the IWDG peripheral.\r\n * @param  __HANDLE__  IWDG handle\r\n * @retval None\r\n */\r\n#define __HAL_IWDG_START(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_ENABLE)\r\n\r\n/**\r\n * @brief  Reload IWDG counter with value defined in the reload register\r\n *         (write access to IWDG_PR & IWDG_RLR registers disabled).\r\n * @param  __HANDLE__  IWDG handle\r\n * @retval None\r\n */\r\n#define __HAL_IWDG_RELOAD_COUNTER(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_RELOAD)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @defgroup IWDG_Exported_Functions  IWDG Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup IWDG_Exported_Functions_Group1 Initialization and Start functions\r\n * @{\r\n */\r\n/* Initialization/Start functions  ********************************************/\r\nHAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup IWDG_Exported_Functions_Group2 IO operation functions\r\n * @{\r\n */\r\n/* I/O operation functions ****************************************************/\r\nHAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private constants ---------------------------------------------------------*/\r\n/** @defgroup IWDG_Private_Constants IWDG Private Constants\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  IWDG Key Register BitMask\r\n */\r\n#define IWDG_KEY_RELOAD               0x0000AAAAU /*!< IWDG Reload Counter Enable   */\r\n#define IWDG_KEY_ENABLE               0x0000CCCCU /*!< IWDG Peripheral Enable       */\r\n#define IWDG_KEY_WRITE_ACCESS_ENABLE  0x00005555U /*!< IWDG KR Write Access Enable  */\r\n#define IWDG_KEY_WRITE_ACCESS_DISABLE 0x00000000U /*!< IWDG KR Write Access Disable */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup IWDG_Private_Macros IWDG Private Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Enable write access to IWDG_PR and IWDG_RLR registers.\r\n * @param  __HANDLE__  IWDG handle\r\n * @retval None\r\n */\r\n#define IWDG_ENABLE_WRITE_ACCESS(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_WRITE_ACCESS_ENABLE)\r\n\r\n/**\r\n * @brief  Disable write access to IWDG_PR and IWDG_RLR registers.\r\n * @param  __HANDLE__  IWDG handle\r\n * @retval None\r\n */\r\n#define IWDG_DISABLE_WRITE_ACCESS(__HANDLE__) WRITE_REG((__HANDLE__)->Instance->KR, IWDG_KEY_WRITE_ACCESS_DISABLE)\r\n\r\n/**\r\n * @brief  Check IWDG prescaler value.\r\n * @param  __PRESCALER__  IWDG prescaler value\r\n * @retval None\r\n */\r\n#define IS_IWDG_PRESCALER(__PRESCALER__)                                                                                                                              \\\r\n  (((__PRESCALER__) == IWDG_PRESCALER_4) || ((__PRESCALER__) == IWDG_PRESCALER_8) || ((__PRESCALER__) == IWDG_PRESCALER_16) || ((__PRESCALER__) == IWDG_PRESCALER_32) \\\r\n   || ((__PRESCALER__) == IWDG_PRESCALER_64) || ((__PRESCALER__) == IWDG_PRESCALER_128) || ((__PRESCALER__) == IWDG_PRESCALER_256))\r\n\r\n/**\r\n * @brief  Check IWDG reload value.\r\n * @param  __RELOAD__  IWDG reload value\r\n * @retval None\r\n */\r\n#define IS_IWDG_RELOAD(__RELOAD__) ((__RELOAD__) <= IWDG_RLR_RL)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_IWDG_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pwr.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_pwr.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of PWR HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_PWR_H\r\n#define __STM32F1xx_HAL_PWR_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup PWR\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n\r\n/** @defgroup PWR_Exported_Types PWR Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  PWR PVD configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t PVDLevel; /*!< PVDLevel: Specifies the PVD detection level.\r\n                          This parameter can be a value of @ref PWR_PVD_detection_level */\r\n\r\n  uint32_t Mode; /*!< Mode: Specifies the operating mode for the selected pins.\r\n                      This parameter can be a value of @ref PWR_PVD_Mode */\r\n} PWR_PVDTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Internal constants --------------------------------------------------------*/\r\n\r\n/** @addtogroup PWR_Private_Constants\r\n * @{\r\n */\r\n\r\n#define PWR_EXTI_LINE_PVD ((uint32_t)0x00010000) /*!< External interrupt line 16 Connected to the PVD EXTI Line */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup PWR_Exported_Constants PWR Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup PWR_PVD_detection_level PWR PVD detection level\r\n * @{\r\n */\r\n#define PWR_PVDLEVEL_0 PWR_CR_PLS_2V2\r\n#define PWR_PVDLEVEL_1 PWR_CR_PLS_2V3\r\n#define PWR_PVDLEVEL_2 PWR_CR_PLS_2V4\r\n#define PWR_PVDLEVEL_3 PWR_CR_PLS_2V5\r\n#define PWR_PVDLEVEL_4 PWR_CR_PLS_2V6\r\n#define PWR_PVDLEVEL_5 PWR_CR_PLS_2V7\r\n#define PWR_PVDLEVEL_6 PWR_CR_PLS_2V8\r\n#define PWR_PVDLEVEL_7 PWR_CR_PLS_2V9\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_PVD_Mode PWR PVD Mode\r\n * @{\r\n */\r\n#define PWR_PVD_MODE_NORMAL               0x00000000U /*!< basic mode is used */\r\n#define PWR_PVD_MODE_IT_RISING            0x00010001U /*!< External Interrupt Mode with Rising edge trigger detection */\r\n#define PWR_PVD_MODE_IT_FALLING           0x00010002U /*!< External Interrupt Mode with Falling edge trigger detection */\r\n#define PWR_PVD_MODE_IT_RISING_FALLING    0x00010003U /*!< External Interrupt Mode with Rising/Falling edge trigger detection */\r\n#define PWR_PVD_MODE_EVENT_RISING         0x00020001U /*!< Event Mode with Rising edge trigger detection */\r\n#define PWR_PVD_MODE_EVENT_FALLING        0x00020002U /*!< Event Mode with Falling edge trigger detection */\r\n#define PWR_PVD_MODE_EVENT_RISING_FALLING 0x00020003U /*!< Event Mode with Rising/Falling edge trigger detection */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_WakeUp_Pins PWR WakeUp Pins\r\n * @{\r\n */\r\n\r\n#define PWR_WAKEUP_PIN1 PWR_CSR_EWUP\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_Regulator_state_in_SLEEP_STOP_mode PWR Regulator state in SLEEP/STOP mode\r\n * @{\r\n */\r\n#define PWR_MAINREGULATOR_ON     0x00000000U\r\n#define PWR_LOWPOWERREGULATOR_ON PWR_CR_LPDS\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_SLEEP_mode_entry PWR SLEEP mode entry\r\n * @{\r\n */\r\n#define PWR_SLEEPENTRY_WFI ((uint8_t)0x01)\r\n#define PWR_SLEEPENTRY_WFE ((uint8_t)0x02)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_STOP_mode_entry PWR STOP mode entry\r\n * @{\r\n */\r\n#define PWR_STOPENTRY_WFI ((uint8_t)0x01)\r\n#define PWR_STOPENTRY_WFE ((uint8_t)0x02)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_Flag PWR Flag\r\n * @{\r\n */\r\n#define PWR_FLAG_WU   PWR_CSR_WUF\r\n#define PWR_FLAG_SB   PWR_CSR_SBF\r\n#define PWR_FLAG_PVDO PWR_CSR_PVDO\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup PWR_Exported_Macros PWR Exported Macros\r\n * @{\r\n */\r\n\r\n/** @brief  Check PWR flag is set or not.\r\n * @param  __FLAG__: specifies the flag to check.\r\n *           This parameter can be one of the following values:\r\n *            @arg PWR_FLAG_WU: Wake Up flag. This flag indicates that a wakeup event\r\n *                  was received from the WKUP pin or from the RTC alarm\r\n *                  An additional wakeup event is detected if the WKUP pin is enabled\r\n *                  (by setting the EWUP bit) when the WKUP pin level is already high.\r\n *            @arg PWR_FLAG_SB: StandBy flag. This flag indicates that the system was\r\n *                  resumed from StandBy mode.\r\n *            @arg PWR_FLAG_PVDO: PVD Output. This flag is valid only if PVD is enabled\r\n *                  by the HAL_PWR_EnablePVD() function. The PVD is stopped by Standby mode\r\n *                  For this reason, this bit is equal to 0 after Standby or reset\r\n *                  until the PVDE bit is set.\r\n * @retval The new state of __FLAG__ (TRUE or FALSE).\r\n */\r\n#define __HAL_PWR_GET_FLAG(__FLAG__) ((PWR->CSR & (__FLAG__)) == (__FLAG__))\r\n\r\n/** @brief  Clear the PWR's pending flags.\r\n * @param  __FLAG__: specifies the flag to clear.\r\n *          This parameter can be one of the following values:\r\n *            @arg PWR_FLAG_WU: Wake Up flag\r\n *            @arg PWR_FLAG_SB: StandBy flag\r\n */\r\n#define __HAL_PWR_CLEAR_FLAG(__FLAG__) SET_BIT(PWR->CR, ((__FLAG__) << 2))\r\n\r\n/**\r\n * @brief Enable interrupt on PVD Exti Line 16.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_ENABLE_IT() SET_BIT(EXTI->IMR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief Disable interrupt on PVD Exti Line 16.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_DISABLE_IT() CLEAR_BIT(EXTI->IMR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief Enable event on PVD Exti Line 16.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_ENABLE_EVENT() SET_BIT(EXTI->EMR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief Disable event on PVD Exti Line 16.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_DISABLE_EVENT() CLEAR_BIT(EXTI->EMR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief  PVD EXTI line configuration: set falling edge trigger.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE() SET_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief Disable the PVD Extended Interrupt Falling Trigger.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE() CLEAR_BIT(EXTI->FTSR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief  PVD EXTI line configuration: set rising edge trigger.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE() SET_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief Disable the PVD Extended Interrupt Rising Trigger.\r\n * This parameter can be:\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE() CLEAR_BIT(EXTI->RTSR, PWR_EXTI_LINE_PVD)\r\n\r\n/**\r\n * @brief  PVD EXTI line configuration: set rising & falling edge trigger.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_ENABLE_RISING_FALLING_EDGE() \\\r\n  __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();              \\\r\n  __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE();\r\n\r\n/**\r\n * @brief Disable the PVD Extended Interrupt Rising & Falling Trigger.\r\n * This parameter can be:\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_DISABLE_RISING_FALLING_EDGE() \\\r\n  __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();              \\\r\n  __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE();\r\n\r\n/**\r\n * @brief Check whether the specified PVD EXTI interrupt flag is set or not.\r\n * @retval EXTI PVD Line Status.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_GET_FLAG() (EXTI->PR & (PWR_EXTI_LINE_PVD))\r\n\r\n/**\r\n * @brief Clear the PVD EXTI flag.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_CLEAR_FLAG() (EXTI->PR = (PWR_EXTI_LINE_PVD))\r\n\r\n/**\r\n * @brief Generate a Software interrupt on selected EXTI line.\r\n * @retval None.\r\n */\r\n#define __HAL_PWR_PVD_EXTI_GENERATE_SWIT() SET_BIT(EXTI->SWIER, PWR_EXTI_LINE_PVD)\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/** @defgroup PWR_Private_Macros PWR Private Macros\r\n * @{\r\n */\r\n#define IS_PWR_PVD_LEVEL(LEVEL)                                                                                                                                                           \\\r\n  (((LEVEL) == PWR_PVDLEVEL_0) || ((LEVEL) == PWR_PVDLEVEL_1) || ((LEVEL) == PWR_PVDLEVEL_2) || ((LEVEL) == PWR_PVDLEVEL_3) || ((LEVEL) == PWR_PVDLEVEL_4) || ((LEVEL) == PWR_PVDLEVEL_5) \\\r\n   || ((LEVEL) == PWR_PVDLEVEL_6) || ((LEVEL) == PWR_PVDLEVEL_7))\r\n\r\n#define IS_PWR_PVD_MODE(MODE)                                                                                                                                       \\\r\n  (((MODE) == PWR_PVD_MODE_IT_RISING) || ((MODE) == PWR_PVD_MODE_IT_FALLING) || ((MODE) == PWR_PVD_MODE_IT_RISING_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING) \\\r\n   || ((MODE) == PWR_PVD_MODE_EVENT_FALLING) || ((MODE) == PWR_PVD_MODE_EVENT_RISING_FALLING) || ((MODE) == PWR_PVD_MODE_NORMAL))\r\n\r\n#define IS_PWR_WAKEUP_PIN(PIN) (((PIN) == PWR_WAKEUP_PIN1))\r\n\r\n#define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_MAINREGULATOR_ON) || ((REGULATOR) == PWR_LOWPOWERREGULATOR_ON))\r\n\r\n#define IS_PWR_SLEEP_ENTRY(ENTRY) (((ENTRY) == PWR_SLEEPENTRY_WFI) || ((ENTRY) == PWR_SLEEPENTRY_WFE))\r\n\r\n#define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPENTRY_WFI) || ((ENTRY) == PWR_STOPENTRY_WFE))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @addtogroup PWR_Exported_Functions PWR Exported Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions\r\n * @{\r\n */\r\n\r\n/* Initialization and de-initialization functions *******************************/\r\nvoid HAL_PWR_DeInit(void);\r\nvoid HAL_PWR_EnableBkUpAccess(void);\r\nvoid HAL_PWR_DisableBkUpAccess(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup PWR_Exported_Functions_Group2 Peripheral Control functions\r\n * @{\r\n */\r\n\r\n/* Peripheral Control functions  ************************************************/\r\nvoid HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD);\r\n/* #define HAL_PWR_ConfigPVD 12*/\r\nvoid HAL_PWR_EnablePVD(void);\r\nvoid HAL_PWR_DisablePVD(void);\r\n\r\n/* WakeUp pins configuration functions ****************************************/\r\nvoid HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx);\r\nvoid HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx);\r\n\r\n/* Low Power modes configuration functions ************************************/\r\nvoid HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry);\r\nvoid HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry);\r\nvoid HAL_PWR_EnterSTANDBYMode(void);\r\n\r\nvoid HAL_PWR_EnableSleepOnExit(void);\r\nvoid HAL_PWR_DisableSleepOnExit(void);\r\nvoid HAL_PWR_EnableSEVOnPend(void);\r\nvoid HAL_PWR_DisableSEVOnPend(void);\r\n\r\nvoid HAL_PWR_PVD_IRQHandler(void);\r\nvoid HAL_PWR_PVDCallback(void);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_PWR_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_rcc.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of RCC HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_RCC_H\r\n#define __STM32F1xx_HAL_RCC_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup RCC\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n\r\n/** @defgroup RCC_Exported_Types RCC Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  RCC PLL configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t PLLState; /*!< PLLState: The new state of the PLL.\r\n                         This parameter can be a value of @ref RCC_PLL_Config */\r\n\r\n  uint32_t PLLSource; /*!< PLLSource: PLL entry clock source.\r\n                          This parameter must be a value of @ref RCC_PLL_Clock_Source */\r\n\r\n  uint32_t PLLMUL; /*!< PLLMUL: Multiplication factor for PLL VCO input clock\r\n                       This parameter must be a value of @ref RCCEx_PLL_Multiplication_Factor */\r\n} RCC_PLLInitTypeDef;\r\n\r\n/**\r\n * @brief  RCC System, AHB and APB busses clock configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t ClockType; /*!< The clock to be configured.\r\n                           This parameter can be a value of @ref RCC_System_Clock_Type */\r\n\r\n  uint32_t SYSCLKSource; /*!< The clock source (SYSCLKS) used as system clock.\r\n                              This parameter can be a value of @ref RCC_System_Clock_Source */\r\n\r\n  uint32_t AHBCLKDivider; /*!< The AHB clock (HCLK) divider. This clock is derived from the system clock (SYSCLK).\r\n                               This parameter can be a value of @ref RCC_AHB_Clock_Source */\r\n\r\n  uint32_t APB1CLKDivider; /*!< The APB1 clock (PCLK1) divider. This clock is derived from the AHB clock (HCLK).\r\n                                This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */\r\n\r\n  uint32_t APB2CLKDivider; /*!< The APB2 clock (PCLK2) divider. This clock is derived from the AHB clock (HCLK).\r\n                                This parameter can be a value of @ref RCC_APB1_APB2_Clock_Source */\r\n} RCC_ClkInitTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup RCC_Exported_Constants RCC Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup RCC_PLL_Clock_Source PLL Clock Source\r\n * @{\r\n */\r\n\r\n#define RCC_PLLSOURCE_HSI_DIV2 0x00000000U     /*!< HSI clock divided by 2 selected as PLL entry clock source */\r\n#define RCC_PLLSOURCE_HSE      RCC_CFGR_PLLSRC /*!< HSE clock selected as PLL entry clock source */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Oscillator_Type Oscillator Type\r\n * @{\r\n */\r\n#define RCC_OSCILLATORTYPE_NONE 0x00000000U\r\n#define RCC_OSCILLATORTYPE_HSE  0x00000001U\r\n#define RCC_OSCILLATORTYPE_HSI  0x00000002U\r\n#define RCC_OSCILLATORTYPE_LSE  0x00000004U\r\n#define RCC_OSCILLATORTYPE_LSI  0x00000008U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_HSE_Config HSE Config\r\n * @{\r\n */\r\n#define RCC_HSE_OFF    0x00000000U                                /*!< HSE clock deactivation */\r\n#define RCC_HSE_ON     RCC_CR_HSEON                               /*!< HSE clock activation */\r\n#define RCC_HSE_BYPASS ((uint32_t)(RCC_CR_HSEBYP | RCC_CR_HSEON)) /*!< External clock source for HSE clock */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_LSE_Config LSE Config\r\n * @{\r\n */\r\n#define RCC_LSE_OFF    0x00000000U                                    /*!< LSE clock deactivation */\r\n#define RCC_LSE_ON     RCC_BDCR_LSEON                                 /*!< LSE clock activation */\r\n#define RCC_LSE_BYPASS ((uint32_t)(RCC_BDCR_LSEBYP | RCC_BDCR_LSEON)) /*!< External clock source for LSE clock */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_HSI_Config HSI Config\r\n * @{\r\n */\r\n#define RCC_HSI_OFF 0x00000000U  /*!< HSI clock deactivation */\r\n#define RCC_HSI_ON  RCC_CR_HSION /*!< HSI clock activation */\r\n\r\n#define RCC_HSICALIBRATION_DEFAULT 0x10U /* Default HSI calibration trimming value */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_LSI_Config LSI Config\r\n * @{\r\n */\r\n#define RCC_LSI_OFF 0x00000000U   /*!< LSI clock deactivation */\r\n#define RCC_LSI_ON  RCC_CSR_LSION /*!< LSI clock activation */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_PLL_Config PLL Config\r\n * @{\r\n */\r\n#define RCC_PLL_NONE 0x00000000U /*!< PLL is not configured */\r\n#define RCC_PLL_OFF  0x00000001U /*!< PLL deactivation */\r\n#define RCC_PLL_ON   0x00000002U /*!< PLL activation */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_System_Clock_Type System Clock Type\r\n * @{\r\n */\r\n#define RCC_CLOCKTYPE_SYSCLK 0x00000001U /*!< SYSCLK to configure */\r\n#define RCC_CLOCKTYPE_HCLK   0x00000002U /*!< HCLK to configure */\r\n#define RCC_CLOCKTYPE_PCLK1  0x00000004U /*!< PCLK1 to configure */\r\n#define RCC_CLOCKTYPE_PCLK2  0x00000008U /*!< PCLK2 to configure */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_System_Clock_Source System Clock Source\r\n * @{\r\n */\r\n#define RCC_SYSCLKSOURCE_HSI    RCC_CFGR_SW_HSI /*!< HSI selected as system clock */\r\n#define RCC_SYSCLKSOURCE_HSE    RCC_CFGR_SW_HSE /*!< HSE selected as system clock */\r\n#define RCC_SYSCLKSOURCE_PLLCLK RCC_CFGR_SW_PLL /*!< PLL selected as system clock */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_System_Clock_Source_Status System Clock Source Status\r\n * @{\r\n */\r\n#define RCC_SYSCLKSOURCE_STATUS_HSI    RCC_CFGR_SWS_HSI /*!< HSI used as system clock */\r\n#define RCC_SYSCLKSOURCE_STATUS_HSE    RCC_CFGR_SWS_HSE /*!< HSE used as system clock */\r\n#define RCC_SYSCLKSOURCE_STATUS_PLLCLK RCC_CFGR_SWS_PLL /*!< PLL used as system clock */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_AHB_Clock_Source AHB Clock Source\r\n * @{\r\n */\r\n#define RCC_SYSCLK_DIV1   RCC_CFGR_HPRE_DIV1   /*!< SYSCLK not divided */\r\n#define RCC_SYSCLK_DIV2   RCC_CFGR_HPRE_DIV2   /*!< SYSCLK divided by 2 */\r\n#define RCC_SYSCLK_DIV4   RCC_CFGR_HPRE_DIV4   /*!< SYSCLK divided by 4 */\r\n#define RCC_SYSCLK_DIV8   RCC_CFGR_HPRE_DIV8   /*!< SYSCLK divided by 8 */\r\n#define RCC_SYSCLK_DIV16  RCC_CFGR_HPRE_DIV16  /*!< SYSCLK divided by 16 */\r\n#define RCC_SYSCLK_DIV64  RCC_CFGR_HPRE_DIV64  /*!< SYSCLK divided by 64 */\r\n#define RCC_SYSCLK_DIV128 RCC_CFGR_HPRE_DIV128 /*!< SYSCLK divided by 128 */\r\n#define RCC_SYSCLK_DIV256 RCC_CFGR_HPRE_DIV256 /*!< SYSCLK divided by 256 */\r\n#define RCC_SYSCLK_DIV512 RCC_CFGR_HPRE_DIV512 /*!< SYSCLK divided by 512 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB1_APB2_Clock_Source APB1 APB2 Clock Source\r\n * @{\r\n */\r\n#define RCC_HCLK_DIV1  RCC_CFGR_PPRE1_DIV1  /*!< HCLK not divided */\r\n#define RCC_HCLK_DIV2  RCC_CFGR_PPRE1_DIV2  /*!< HCLK divided by 2 */\r\n#define RCC_HCLK_DIV4  RCC_CFGR_PPRE1_DIV4  /*!< HCLK divided by 4 */\r\n#define RCC_HCLK_DIV8  RCC_CFGR_PPRE1_DIV8  /*!< HCLK divided by 8 */\r\n#define RCC_HCLK_DIV16 RCC_CFGR_PPRE1_DIV16 /*!< HCLK divided by 16 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_RTC_Clock_Source RTC Clock Source\r\n * @{\r\n */\r\n#define RCC_RTCCLKSOURCE_NO_CLK     0x00000000U         /*!< No clock */\r\n#define RCC_RTCCLKSOURCE_LSE        RCC_BDCR_RTCSEL_LSE /*!< LSE oscillator clock used as RTC clock */\r\n#define RCC_RTCCLKSOURCE_LSI        RCC_BDCR_RTCSEL_LSI /*!< LSI oscillator clock used as RTC clock */\r\n#define RCC_RTCCLKSOURCE_HSE_DIV128 RCC_BDCR_RTCSEL_HSE /*!< HSE oscillator clock divided by 128 used as RTC clock */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_MCO_Index MCO Index\r\n * @{\r\n */\r\n#define RCC_MCO1 0x00000000U\r\n#define RCC_MCO  RCC_MCO1 /*!< MCO1 to be compliant with other families with 2 MCOs*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_MCOx_Clock_Prescaler MCO Clock Prescaler\r\n * @{\r\n */\r\n#define RCC_MCODIV_1 0x00000000U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Interrupt Interrupts\r\n * @{\r\n */\r\n#define RCC_IT_LSIRDY ((uint8_t)RCC_CIR_LSIRDYF) /*!< LSI Ready Interrupt flag */\r\n#define RCC_IT_LSERDY ((uint8_t)RCC_CIR_LSERDYF) /*!< LSE Ready Interrupt flag */\r\n#define RCC_IT_HSIRDY ((uint8_t)RCC_CIR_HSIRDYF) /*!< HSI Ready Interrupt flag */\r\n#define RCC_IT_HSERDY ((uint8_t)RCC_CIR_HSERDYF) /*!< HSE Ready Interrupt flag */\r\n#define RCC_IT_PLLRDY ((uint8_t)RCC_CIR_PLLRDYF) /*!< PLL Ready Interrupt flag */\r\n#define RCC_IT_CSS    ((uint8_t)RCC_CIR_CSSF)    /*!< Clock Security System Interrupt flag */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Flag Flags\r\n *        Elements values convention: XXXYYYYYb\r\n *           - YYYYY  : Flag position in the register\r\n *           - X XX  : Register index\r\n *                 - 001: CR register\r\n *                 - 010: BDCR register\r\n *                 - 011: CSR register\r\n * @{\r\n */\r\n/* Flags in the CR register */\r\n#define RCC_FLAG_HSIRDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_HSIRDY_Pos)) /*!< Internal High Speed clock ready flag */\r\n#define RCC_FLAG_HSERDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_HSERDY_Pos)) /*!< External High Speed clock ready flag */\r\n#define RCC_FLAG_PLLRDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_PLLRDY_Pos)) /*!< PLL clock ready flag */\r\n\r\n/* Flags in the CSR register */\r\n#define RCC_FLAG_LSIRDY  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_LSIRDY_Pos))   /*!< Internal Low Speed oscillator Ready */\r\n#define RCC_FLAG_PINRST  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_PINRSTF_Pos))  /*!< PIN reset flag */\r\n#define RCC_FLAG_PORRST  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_PORRSTF_Pos))  /*!< POR/PDR reset flag */\r\n#define RCC_FLAG_SFTRST  ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_SFTRSTF_Pos))  /*!< Software Reset flag */\r\n#define RCC_FLAG_IWDGRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_IWDGRSTF_Pos)) /*!< Independent Watchdog reset flag */\r\n#define RCC_FLAG_WWDGRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_WWDGRSTF_Pos)) /*!< Window watchdog reset flag */\r\n#define RCC_FLAG_LPWRRST ((uint8_t)((CSR_REG_INDEX << 5U) | RCC_CSR_LPWRRSTF_Pos)) /*!< Low-Power reset flag */\r\n\r\n/* Flags in the BDCR register */\r\n#define RCC_FLAG_LSERDY ((uint8_t)((BDCR_REG_INDEX << 5U) | RCC_BDCR_LSERDY_Pos)) /*!< External Low Speed oscillator Ready */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n\r\n/** @defgroup RCC_Exported_Macros RCC Exported Macros\r\n * @{\r\n */\r\n\r\n/** @defgroup RCC_Peripheral_Clock_Enable_Disable Peripheral Clock Enable Disable\r\n * @brief  Enable or disable the AHB1 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n#define __HAL_RCC_DMA1_CLK_ENABLE()                    \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA1EN); \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SRAM_CLK_ENABLE()                    \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_SRAMEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_SRAMEN); \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_FLITF_CLK_ENABLE()                    \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_FLITFEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FLITFEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_CRC_CLK_ENABLE()                     \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_CRCEN);            \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_CRCEN);  \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_DMA1_CLK_DISABLE()  (RCC->AHBENR &= ~(RCC_AHBENR_DMA1EN))\r\n#define __HAL_RCC_SRAM_CLK_DISABLE()  (RCC->AHBENR &= ~(RCC_AHBENR_SRAMEN))\r\n#define __HAL_RCC_FLITF_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_FLITFEN))\r\n#define __HAL_RCC_CRC_CLK_DISABLE()   (RCC->AHBENR &= ~(RCC_AHBENR_CRCEN))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_AHB_Peripheral_Clock_Enable_Disable_Status AHB Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the AHB peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#define __HAL_RCC_DMA1_IS_CLK_ENABLED()   ((RCC->AHBENR & (RCC_AHBENR_DMA1EN)) != RESET)\r\n#define __HAL_RCC_DMA1_IS_CLK_DISABLED()  ((RCC->AHBENR & (RCC_AHBENR_DMA1EN)) == RESET)\r\n#define __HAL_RCC_SRAM_IS_CLK_ENABLED()   ((RCC->AHBENR & (RCC_AHBENR_SRAMEN)) != RESET)\r\n#define __HAL_RCC_SRAM_IS_CLK_DISABLED()  ((RCC->AHBENR & (RCC_AHBENR_SRAMEN)) == RESET)\r\n#define __HAL_RCC_FLITF_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_FLITFEN)) != RESET)\r\n#define __HAL_RCC_FLITF_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_FLITFEN)) == RESET)\r\n#define __HAL_RCC_CRC_IS_CLK_ENABLED()    ((RCC->AHBENR & (RCC_AHBENR_CRCEN)) != RESET)\r\n#define __HAL_RCC_CRC_IS_CLK_DISABLED()   ((RCC->AHBENR & (RCC_AHBENR_CRCEN)) == RESET)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB1_Clock_Enable_Disable APB1 Clock Enable Disable\r\n * @brief  Enable or disable the Low Speed APB (APB1) peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n#define __HAL_RCC_TIM2_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM2EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM3_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM3EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_WWDG_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_WWDGEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_USART2_CLK_ENABLE()                      \\\r\n  do {                                                     \\\r\n    __IO uint32_t tmpreg;                                  \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */     \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART2EN); \\\r\n    UNUSED(tmpreg);                                        \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_I2C1_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C1EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_BKP_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_BKPEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_BKPEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_PWR_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_PWREN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM2_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM2EN))\r\n#define __HAL_RCC_TIM3_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM3EN))\r\n#define __HAL_RCC_WWDG_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_WWDGEN))\r\n#define __HAL_RCC_USART2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART2EN))\r\n#define __HAL_RCC_I2C1_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C1EN))\r\n\r\n#define __HAL_RCC_BKP_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_BKPEN))\r\n#define __HAL_RCC_PWR_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_PWREN))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the APB1 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#define __HAL_RCC_TIM2_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) != RESET)\r\n#define __HAL_RCC_TIM2_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM2EN)) == RESET)\r\n#define __HAL_RCC_TIM3_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) != RESET)\r\n#define __HAL_RCC_TIM3_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM3EN)) == RESET)\r\n#define __HAL_RCC_WWDG_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) != RESET)\r\n#define __HAL_RCC_WWDG_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_WWDGEN)) == RESET)\r\n#define __HAL_RCC_USART2_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) != RESET)\r\n#define __HAL_RCC_USART2_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART2EN)) == RESET)\r\n#define __HAL_RCC_I2C1_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) != RESET)\r\n#define __HAL_RCC_I2C1_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_I2C1EN)) == RESET)\r\n#define __HAL_RCC_BKP_IS_CLK_ENABLED()     ((RCC->APB1ENR & (RCC_APB1ENR_BKPEN)) != RESET)\r\n#define __HAL_RCC_BKP_IS_CLK_DISABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_BKPEN)) == RESET)\r\n#define __HAL_RCC_PWR_IS_CLK_ENABLED()     ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) != RESET)\r\n#define __HAL_RCC_PWR_IS_CLK_DISABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_PWREN)) == RESET)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB2_Clock_Enable_Disable APB2 Clock Enable Disable\r\n * @brief  Enable or disable the High Speed APB (APB2) peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n#define __HAL_RCC_AFIO_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_AFIOEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_AFIOEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOA_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPAEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPAEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOB_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPBEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPBEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOC_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPCEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPCEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOD_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ADC1_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM1_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM1EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SPI1_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_SPI1EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_USART1_CLK_ENABLE()                      \\\r\n  do {                                                     \\\r\n    __IO uint32_t tmpreg;                                  \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */     \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_USART1EN); \\\r\n    UNUSED(tmpreg);                                        \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_AFIO_CLK_DISABLE()  (RCC->APB2ENR &= ~(RCC_APB2ENR_AFIOEN))\r\n#define __HAL_RCC_GPIOA_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPAEN))\r\n#define __HAL_RCC_GPIOB_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPBEN))\r\n#define __HAL_RCC_GPIOC_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPCEN))\r\n#define __HAL_RCC_GPIOD_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPDEN))\r\n#define __HAL_RCC_ADC1_CLK_DISABLE()  (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC1EN))\r\n\r\n#define __HAL_RCC_TIM1_CLK_DISABLE()   (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM1EN))\r\n#define __HAL_RCC_SPI1_CLK_DISABLE()   (RCC->APB2ENR &= ~(RCC_APB2ENR_SPI1EN))\r\n#define __HAL_RCC_USART1_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_USART1EN))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the APB2 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#define __HAL_RCC_AFIO_IS_CLK_ENABLED()    ((RCC->APB2ENR & (RCC_APB2ENR_AFIOEN)) != RESET)\r\n#define __HAL_RCC_AFIO_IS_CLK_DISABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_AFIOEN)) == RESET)\r\n#define __HAL_RCC_GPIOA_IS_CLK_ENABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_IOPAEN)) != RESET)\r\n#define __HAL_RCC_GPIOA_IS_CLK_DISABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPAEN)) == RESET)\r\n#define __HAL_RCC_GPIOB_IS_CLK_ENABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_IOPBEN)) != RESET)\r\n#define __HAL_RCC_GPIOB_IS_CLK_DISABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPBEN)) == RESET)\r\n#define __HAL_RCC_GPIOC_IS_CLK_ENABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_IOPCEN)) != RESET)\r\n#define __HAL_RCC_GPIOC_IS_CLK_DISABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPCEN)) == RESET)\r\n#define __HAL_RCC_GPIOD_IS_CLK_ENABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_IOPDEN)) != RESET)\r\n#define __HAL_RCC_GPIOD_IS_CLK_DISABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPDEN)) == RESET)\r\n#define __HAL_RCC_ADC1_IS_CLK_ENABLED()    ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) != RESET)\r\n#define __HAL_RCC_ADC1_IS_CLK_DISABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_ADC1EN)) == RESET)\r\n#define __HAL_RCC_TIM1_IS_CLK_ENABLED()    ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) != RESET)\r\n#define __HAL_RCC_TIM1_IS_CLK_DISABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_TIM1EN)) == RESET)\r\n#define __HAL_RCC_SPI1_IS_CLK_ENABLED()    ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) != RESET)\r\n#define __HAL_RCC_SPI1_IS_CLK_DISABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_SPI1EN)) == RESET)\r\n#define __HAL_RCC_USART1_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) != RESET)\r\n#define __HAL_RCC_USART1_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_USART1EN)) == RESET)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB1_Force_Release_Reset APB1 Force Release Reset\r\n * @brief  Force or release APB1 peripheral reset.\r\n * @{\r\n */\r\n#define __HAL_RCC_APB1_FORCE_RESET()   (RCC->APB2RSTR = 0xFFFFFFFFU)\r\n#define __HAL_RCC_TIM2_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM2RST))\r\n#define __HAL_RCC_TIM3_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM3RST))\r\n#define __HAL_RCC_WWDG_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_WWDGRST))\r\n#define __HAL_RCC_USART2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART2RST))\r\n#define __HAL_RCC_I2C1_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C1RST))\r\n\r\n#define __HAL_RCC_BKP_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_BKPRST))\r\n#define __HAL_RCC_PWR_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_PWRRST))\r\n\r\n#define __HAL_RCC_APB1_RELEASE_RESET()   (RCC->APB1RSTR = 0x00)\r\n#define __HAL_RCC_TIM2_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM2RST))\r\n#define __HAL_RCC_TIM3_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM3RST))\r\n#define __HAL_RCC_WWDG_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_WWDGRST))\r\n#define __HAL_RCC_USART2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART2RST))\r\n#define __HAL_RCC_I2C1_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C1RST))\r\n\r\n#define __HAL_RCC_BKP_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_BKPRST))\r\n#define __HAL_RCC_PWR_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_PWRRST))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_APB2_Force_Release_Reset APB2 Force Release Reset\r\n * @brief  Force or release APB2 peripheral reset.\r\n * @{\r\n */\r\n#define __HAL_RCC_APB2_FORCE_RESET()  (RCC->APB2RSTR = 0xFFFFFFFFU)\r\n#define __HAL_RCC_AFIO_FORCE_RESET()  (RCC->APB2RSTR |= (RCC_APB2RSTR_AFIORST))\r\n#define __HAL_RCC_GPIOA_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPARST))\r\n#define __HAL_RCC_GPIOB_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPBRST))\r\n#define __HAL_RCC_GPIOC_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPCRST))\r\n#define __HAL_RCC_GPIOD_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPDRST))\r\n#define __HAL_RCC_ADC1_FORCE_RESET()  (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC1RST))\r\n\r\n#define __HAL_RCC_TIM1_FORCE_RESET()   (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM1RST))\r\n#define __HAL_RCC_SPI1_FORCE_RESET()   (RCC->APB2RSTR |= (RCC_APB2RSTR_SPI1RST))\r\n#define __HAL_RCC_USART1_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_USART1RST))\r\n\r\n#define __HAL_RCC_APB2_RELEASE_RESET()  (RCC->APB2RSTR = 0x00)\r\n#define __HAL_RCC_AFIO_RELEASE_RESET()  (RCC->APB2RSTR &= ~(RCC_APB2RSTR_AFIORST))\r\n#define __HAL_RCC_GPIOA_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPARST))\r\n#define __HAL_RCC_GPIOB_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPBRST))\r\n#define __HAL_RCC_GPIOC_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPCRST))\r\n#define __HAL_RCC_GPIOD_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPDRST))\r\n#define __HAL_RCC_ADC1_RELEASE_RESET()  (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC1RST))\r\n\r\n#define __HAL_RCC_TIM1_RELEASE_RESET()   (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM1RST))\r\n#define __HAL_RCC_SPI1_RELEASE_RESET()   (RCC->APB2RSTR &= ~(RCC_APB2RSTR_SPI1RST))\r\n#define __HAL_RCC_USART1_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_USART1RST))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_HSI_Configuration HSI Configuration\r\n * @{\r\n */\r\n\r\n/** @brief  Macros to enable or disable the Internal High Speed oscillator (HSI).\r\n * @note   The HSI is stopped by hardware when entering STOP and STANDBY modes.\r\n * @note   HSI can not be stopped if it is used as system clock source. In this case,\r\n *         you have to select another source of the system clock then stop the HSI.\r\n * @note   After enabling the HSI, the application software should wait on HSIRDY\r\n *         flag to be set indicating that HSI clock is stable and can be used as\r\n *         system clock source.\r\n * @note   When the HSI is stopped, HSIRDY flag goes low after 6 HSI oscillator\r\n *         clock cycles.\r\n */\r\n#define __HAL_RCC_HSI_ENABLE()  (*(__IO uint32_t *)RCC_CR_HSION_BB = ENABLE)\r\n#define __HAL_RCC_HSI_DISABLE() (*(__IO uint32_t *)RCC_CR_HSION_BB = DISABLE)\r\n\r\n/** @brief  Macro to adjust the Internal High Speed oscillator (HSI) calibration value.\r\n * @note   The calibration is used to compensate for the variations in voltage\r\n *         and temperature that influence the frequency of the internal HSI RC.\r\n * @param  _HSICALIBRATIONVALUE_ specifies the calibration trimming value.\r\n *         (default is RCC_HSICALIBRATION_DEFAULT).\r\n *         This parameter must be a number between 0 and 0x1F.\r\n */\r\n#define __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(_HSICALIBRATIONVALUE_) (MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, (uint32_t)(_HSICALIBRATIONVALUE_) << RCC_CR_HSITRIM_Pos))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_LSI_Configuration  LSI Configuration\r\n * @{\r\n */\r\n\r\n/** @brief Macro to enable the Internal Low Speed oscillator (LSI).\r\n * @note   After enabling the LSI, the application software should wait on\r\n *         LSIRDY flag to be set indicating that LSI clock is stable and can\r\n *         be used to clock the IWDG and/or the RTC.\r\n */\r\n#define __HAL_RCC_LSI_ENABLE() (*(__IO uint32_t *)RCC_CSR_LSION_BB = ENABLE)\r\n\r\n/** @brief Macro to disable the Internal Low Speed oscillator (LSI).\r\n * @note   LSI can not be disabled if the IWDG is running.\r\n * @note   When the LSI is stopped, LSIRDY flag goes low after 6 LSI oscillator\r\n *         clock cycles.\r\n */\r\n#define __HAL_RCC_LSI_DISABLE() (*(__IO uint32_t *)RCC_CSR_LSION_BB = DISABLE)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_HSE_Configuration HSE Configuration\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Macro to configure the External High Speed oscillator (HSE).\r\n * @note   Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not\r\n *         supported by this macro. User should request a transition to HSE Off\r\n *         first and then HSE On or HSE Bypass.\r\n * @note   After enabling the HSE (RCC_HSE_ON or RCC_HSE_Bypass), the application\r\n *         software should wait on HSERDY flag to be set indicating that HSE clock\r\n *         is stable and can be used to clock the PLL and/or system clock.\r\n * @note   HSE state can not be changed if it is used directly or through the\r\n *         PLL as system clock. In this case, you have to select another source\r\n *         of the system clock then change the HSE state (ex. disable it).\r\n * @note   The HSE is stopped by hardware when entering STOP and STANDBY modes.\r\n * @note   This function reset the CSSON bit, so if the clock security system(CSS)\r\n *         was previously enabled you have to enable it again after calling this\r\n *         function.\r\n * @param  __STATE__ specifies the new state of the HSE.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_HSE_OFF turn OFF the HSE oscillator, HSERDY flag goes low after\r\n *                              6 HSE oscillator clock cycles.\r\n *            @arg @ref RCC_HSE_ON turn ON the HSE oscillator\r\n *            @arg @ref RCC_HSE_BYPASS HSE oscillator bypassed with external clock\r\n */\r\n#define __HAL_RCC_HSE_CONFIG(__STATE__)         \\\r\n  do {                                          \\\r\n    if ((__STATE__) == RCC_HSE_ON) {            \\\r\n      SET_BIT(RCC->CR, RCC_CR_HSEON);           \\\r\n    } else if ((__STATE__) == RCC_HSE_OFF) {    \\\r\n      CLEAR_BIT(RCC->CR, RCC_CR_HSEON);         \\\r\n      CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);        \\\r\n    } else if ((__STATE__) == RCC_HSE_BYPASS) { \\\r\n      SET_BIT(RCC->CR, RCC_CR_HSEBYP);          \\\r\n      SET_BIT(RCC->CR, RCC_CR_HSEON);           \\\r\n    } else {                                    \\\r\n      CLEAR_BIT(RCC->CR, RCC_CR_HSEON);         \\\r\n      CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);        \\\r\n    }                                           \\\r\n  } while (0U)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_LSE_Configuration LSE Configuration\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Macro to configure the External Low Speed oscillator (LSE).\r\n * @note Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not supported by this macro.\r\n * @note   As the LSE is in the Backup domain and write access is denied to\r\n *         this domain after reset, you have to enable write access using\r\n *         @ref HAL_PWR_EnableBkUpAccess() function before to configure the LSE\r\n *         (to be done once after reset).\r\n * @note   After enabling the LSE (RCC_LSE_ON or RCC_LSE_BYPASS), the application\r\n *         software should wait on LSERDY flag to be set indicating that LSE clock\r\n *         is stable and can be used to clock the RTC.\r\n * @param  __STATE__ specifies the new state of the LSE.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref RCC_LSE_OFF turn OFF the LSE oscillator, LSERDY flag goes low after\r\n *                              6 LSE oscillator clock cycles.\r\n *            @arg @ref RCC_LSE_ON turn ON the LSE oscillator.\r\n *            @arg @ref RCC_LSE_BYPASS LSE oscillator bypassed with external clock.\r\n */\r\n#define __HAL_RCC_LSE_CONFIG(__STATE__)         \\\r\n  do {                                          \\\r\n    if ((__STATE__) == RCC_LSE_ON) {            \\\r\n      SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);       \\\r\n    } else if ((__STATE__) == RCC_LSE_OFF) {    \\\r\n      CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);     \\\r\n      CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);    \\\r\n    } else if ((__STATE__) == RCC_LSE_BYPASS) { \\\r\n      SET_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);      \\\r\n      SET_BIT(RCC->BDCR, RCC_BDCR_LSEON);       \\\r\n    } else {                                    \\\r\n      CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEON);     \\\r\n      CLEAR_BIT(RCC->BDCR, RCC_BDCR_LSEBYP);    \\\r\n    }                                           \\\r\n  } while (0U)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_PLL_Configuration PLL Configuration\r\n * @{\r\n */\r\n\r\n/** @brief Macro to enable the main PLL.\r\n * @note   After enabling the main PLL, the application software should wait on\r\n *         PLLRDY flag to be set indicating that PLL clock is stable and can\r\n *         be used as system clock source.\r\n * @note   The main PLL is disabled by hardware when entering STOP and STANDBY modes.\r\n */\r\n#define __HAL_RCC_PLL_ENABLE() (*(__IO uint32_t *)RCC_CR_PLLON_BB = ENABLE)\r\n\r\n/** @brief Macro to disable the main PLL.\r\n * @note   The main PLL can not be disabled if it is used as system clock source\r\n */\r\n#define __HAL_RCC_PLL_DISABLE() (*(__IO uint32_t *)RCC_CR_PLLON_BB = DISABLE)\r\n\r\n/** @brief Macro to configure the main PLL clock source and multiplication factors.\r\n  * @note   This function must be used only when the main PLL is disabled.\r\n  *\r\n  * @param  __RCC_PLLSOURCE__ specifies the PLL entry clock source.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_PLLSOURCE_HSI_DIV2 HSI oscillator clock selected as PLL clock entry\r\n  *            @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL clock entry\r\n  * @param  __PLLMUL__ specifies the multiplication factor for PLL VCO output clock\r\n  *          This parameter can be one of the following values:\r\n  *             @arg @ref RCC_PLL_MUL4   PLLVCO = PLL clock entry x 4\r\n  *             @arg @ref RCC_PLL_MUL6   PLLVCO = PLL clock entry x 6\r\n  @if STM32F105xC\r\n  *             @arg @ref RCC_PLL_MUL6_5 PLLVCO = PLL clock entry x 6.5\r\n  @elseif STM32F107xC\r\n  *             @arg @ref RCC_PLL_MUL6_5 PLLVCO = PLL clock entry x 6.5\r\n  @else\r\n  *             @arg @ref RCC_PLL_MUL2   PLLVCO = PLL clock entry x 2\r\n  *             @arg @ref RCC_PLL_MUL3   PLLVCO = PLL clock entry x 3\r\n  *             @arg @ref RCC_PLL_MUL10  PLLVCO = PLL clock entry x 10\r\n  *             @arg @ref RCC_PLL_MUL11  PLLVCO = PLL clock entry x 11\r\n  *             @arg @ref RCC_PLL_MUL12  PLLVCO = PLL clock entry x 12\r\n  *             @arg @ref RCC_PLL_MUL13  PLLVCO = PLL clock entry x 13\r\n  *             @arg @ref RCC_PLL_MUL14  PLLVCO = PLL clock entry x 14\r\n  *             @arg @ref RCC_PLL_MUL15  PLLVCO = PLL clock entry x 15\r\n  *             @arg @ref RCC_PLL_MUL16  PLLVCO = PLL clock entry x 16\r\n  @endif\r\n  *             @arg @ref RCC_PLL_MUL8   PLLVCO = PLL clock entry x 8\r\n  *             @arg @ref RCC_PLL_MUL9   PLLVCO = PLL clock entry x 9\r\n  *\r\n  */\r\n#define __HAL_RCC_PLL_CONFIG(__RCC_PLLSOURCE__, __PLLMUL__) MODIFY_REG(RCC->CFGR, (RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL), ((__RCC_PLLSOURCE__) | (__PLLMUL__)))\r\n\r\n/** @brief  Get oscillator clock selected as PLL input clock\r\n * @retval The clock source used for PLL entry. The returned value can be one\r\n *         of the following:\r\n *             @arg @ref RCC_PLLSOURCE_HSI_DIV2 HSI oscillator clock selected as PLL input clock\r\n *             @arg @ref RCC_PLLSOURCE_HSE HSE oscillator clock selected as PLL input clock\r\n */\r\n#define __HAL_RCC_GET_PLL_OSCSOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_PLLSRC)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Get_Clock_source Get Clock source\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Macro to configure the system clock source.\r\n * @param  __SYSCLKSOURCE__ specifies the system clock source.\r\n *          This parameter can be one of the following values:\r\n *              @arg @ref RCC_SYSCLKSOURCE_HSI HSI oscillator is used as system clock source.\r\n *              @arg @ref RCC_SYSCLKSOURCE_HSE HSE oscillator is used as system clock source.\r\n *              @arg @ref RCC_SYSCLKSOURCE_PLLCLK PLL output is used as system clock source.\r\n */\r\n#define __HAL_RCC_SYSCLK_CONFIG(__SYSCLKSOURCE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_SW, (__SYSCLKSOURCE__))\r\n\r\n/** @brief  Macro to get the clock source used as system clock.\r\n * @retval The clock source used as system clock. The returned value can be one\r\n *         of the following:\r\n *             @arg @ref RCC_SYSCLKSOURCE_STATUS_HSI HSI used as system clock\r\n *             @arg @ref RCC_SYSCLKSOURCE_STATUS_HSE HSE used as system clock\r\n *             @arg @ref RCC_SYSCLKSOURCE_STATUS_PLLCLK PLL used as system clock\r\n */\r\n#define __HAL_RCC_GET_SYSCLK_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_SWS)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_MCOx_Clock_Config RCC Extended MCOx Clock Config\r\n * @{\r\n */\r\n\r\n#if defined(RCC_CFGR_MCO_3)\r\n/** @brief  Macro to configure the MCO clock.\r\n * @param  __MCOCLKSOURCE__ specifies the MCO clock source.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref RCC_MCO1SOURCE_NOCLOCK      No clock selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_SYSCLK       System clock (SYSCLK) selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_HSI          HSI selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_HSE          HSE selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_PLLCLK       PLL clock divided by 2 selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_PLL2CLK      PLL2 clock selected by 2 selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_PLL3CLK_DIV2 PLL3 clock divided by 2 selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_EXT_HSE XT1  external 3-25 MHz oscillator clock selected (for Ethernet) as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_PLL3CLK      PLL3 clock selected (for Ethernet) as MCO clock\r\n * @param  __MCODIV__ specifies the MCO clock prescaler.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref RCC_MCODIV_1 No division applied on MCO clock source\r\n */\r\n#else\r\n/** @brief  Macro to configure the MCO clock.\r\n * @param  __MCOCLKSOURCE__ specifies the MCO clock source.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref RCC_MCO1SOURCE_NOCLOCK No clock selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_SYSCLK  System clock (SYSCLK) selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_HSI HSI selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_HSE HSE selected as MCO clock\r\n *            @arg @ref RCC_MCO1SOURCE_PLLCLK  PLL clock divided by 2 selected as MCO clock\r\n * @param  __MCODIV__ specifies the MCO clock prescaler.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref RCC_MCODIV_1 No division applied on MCO clock source\r\n */\r\n#endif\r\n\r\n#define __HAL_RCC_MCO1_CONFIG(__MCOCLKSOURCE__, __MCODIV__) MODIFY_REG(RCC->CFGR, RCC_CFGR_MCO, (__MCOCLKSOURCE__))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_RTC_Clock_Configuration RCC RTC Clock Configuration\r\n * @{\r\n */\r\n\r\n/** @brief Macro to configure the RTC clock (RTCCLK).\r\n * @note   As the RTC clock configuration bits are in the Backup domain and write\r\n *         access is denied to this domain after reset, you have to enable write\r\n *         access using the Power Backup Access macro before to configure\r\n *         the RTC clock source (to be done once after reset).\r\n * @note   Once the RTC clock is configured it can't be changed unless the\r\n *         Backup domain is reset using @ref __HAL_RCC_BACKUPRESET_FORCE() macro, or by\r\n *         a Power On Reset (POR).\r\n *\r\n * @param  __RTC_CLKSOURCE__ specifies the RTC clock source.\r\n *          This parameter can be one of the following values:\r\n *             @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock\r\n *             @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock\r\n *             @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock\r\n *             @arg @ref RCC_RTCCLKSOURCE_HSE_DIV128 HSE divided by 128 selected as RTC clock\r\n * @note   If the LSE or LSI is used as RTC clock source, the RTC continues to\r\n *         work in STOP and STANDBY modes, and can be used as wakeup source.\r\n *         However, when the HSE clock is used as RTC clock source, the RTC\r\n *         cannot be used in STOP and STANDBY modes.\r\n * @note   The maximum input clock frequency for RTC is 1MHz (when using HSE as\r\n *         RTC clock source).\r\n */\r\n#define __HAL_RCC_RTC_CONFIG(__RTC_CLKSOURCE__) MODIFY_REG(RCC->BDCR, RCC_BDCR_RTCSEL, (__RTC_CLKSOURCE__))\r\n\r\n/** @brief Macro to get the RTC clock source.\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_RTCCLKSOURCE_NO_CLK No clock selected as RTC clock\r\n *            @arg @ref RCC_RTCCLKSOURCE_LSE LSE selected as RTC clock\r\n *            @arg @ref RCC_RTCCLKSOURCE_LSI LSI selected as RTC clock\r\n *            @arg @ref RCC_RTCCLKSOURCE_HSE_DIV128 HSE divided by 128 selected as RTC clock\r\n */\r\n#define __HAL_RCC_GET_RTC_SOURCE() (READ_BIT(RCC->BDCR, RCC_BDCR_RTCSEL))\r\n\r\n/** @brief Macro to enable the the RTC clock.\r\n * @note   These macros must be used only after the RTC clock source was selected.\r\n */\r\n#define __HAL_RCC_RTC_ENABLE() (*(__IO uint32_t *)RCC_BDCR_RTCEN_BB = ENABLE)\r\n\r\n/** @brief Macro to disable the the RTC clock.\r\n * @note  These macros must be used only after the RTC clock source was selected.\r\n */\r\n#define __HAL_RCC_RTC_DISABLE() (*(__IO uint32_t *)RCC_BDCR_RTCEN_BB = DISABLE)\r\n\r\n/** @brief  Macro to force the Backup domain reset.\r\n * @note   This function resets the RTC peripheral (including the backup registers)\r\n *         and the RTC clock source selection in RCC_BDCR register.\r\n */\r\n#define __HAL_RCC_BACKUPRESET_FORCE() (*(__IO uint32_t *)RCC_BDCR_BDRST_BB = ENABLE)\r\n\r\n/** @brief  Macros to release the Backup domain reset.\r\n */\r\n#define __HAL_RCC_BACKUPRESET_RELEASE() (*(__IO uint32_t *)RCC_BDCR_BDRST_BB = DISABLE)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Flags_Interrupts_Management Flags Interrupts Management\r\n * @brief macros to manage the specified RCC Flags and interrupts.\r\n * @{\r\n */\r\n\r\n/** @brief Enable RCC interrupt.\r\n  * @param  __INTERRUPT__ specifies the RCC interrupt sources to be enabled.\r\n  *          This parameter can be any combination of the following values:\r\n  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt\r\n  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt\r\n  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt\r\n  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt\r\n  *            @arg @ref RCC_IT_PLLRDY main PLL ready interrupt\r\n  @if STM32F105xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @elsif STM32F107xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @endif\r\n  */\r\n#define __HAL_RCC_ENABLE_IT(__INTERRUPT__) (*(__IO uint8_t *)RCC_CIR_BYTE1_ADDRESS |= (__INTERRUPT__))\r\n\r\n/** @brief Disable RCC interrupt.\r\n  * @param  __INTERRUPT__ specifies the RCC interrupt sources to be disabled.\r\n  *          This parameter can be any combination of the following values:\r\n  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt\r\n  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt\r\n  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt\r\n  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt\r\n  *            @arg @ref RCC_IT_PLLRDY main PLL ready interrupt\r\n  @if STM32F105xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @elsif STM32F107xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @endif\r\n  */\r\n#define __HAL_RCC_DISABLE_IT(__INTERRUPT__) (*(__IO uint8_t *)RCC_CIR_BYTE1_ADDRESS &= (uint8_t)(~(__INTERRUPT__)))\r\n\r\n/** @brief Clear the RCC's interrupt pending bits.\r\n  * @param  __INTERRUPT__ specifies the interrupt pending bit to clear.\r\n  *          This parameter can be any combination of the following values:\r\n  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt.\r\n  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt.\r\n  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt.\r\n  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLRDY Main PLL ready interrupt.\r\n  @if STM32F105xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @elsif STM32F107xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @endif\r\n  *            @arg @ref RCC_IT_CSS Clock Security System interrupt\r\n  */\r\n#define __HAL_RCC_CLEAR_IT(__INTERRUPT__) (*(__IO uint8_t *)RCC_CIR_BYTE2_ADDRESS = (__INTERRUPT__))\r\n\r\n/** @brief Check the RCC's interrupt has occurred or not.\r\n  * @param  __INTERRUPT__ specifies the RCC interrupt source to check.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_IT_LSIRDY LSI ready interrupt.\r\n  *            @arg @ref RCC_IT_LSERDY LSE ready interrupt.\r\n  *            @arg @ref RCC_IT_HSIRDY HSI ready interrupt.\r\n  *            @arg @ref RCC_IT_HSERDY HSE ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLRDY Main PLL ready interrupt.\r\n  @if STM32F105xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @elsif STM32F107xx\r\n  *            @arg @ref RCC_IT_PLL2RDY Main PLL2 ready interrupt.\r\n  *            @arg @ref RCC_IT_PLLI2S2RDY Main PLLI2S ready interrupt.\r\n  @endif\r\n  *            @arg @ref RCC_IT_CSS Clock Security System interrupt\r\n  * @retval The new state of __INTERRUPT__ (TRUE or FALSE).\r\n  */\r\n#define __HAL_RCC_GET_IT(__INTERRUPT__) ((RCC->CIR & (__INTERRUPT__)) == (__INTERRUPT__))\r\n\r\n/** @brief Set RMVF bit to clear the reset flags.\r\n *         The reset flags are RCC_FLAG_PINRST, RCC_FLAG_PORRST, RCC_FLAG_SFTRST,\r\n *         RCC_FLAG_IWDGRST, RCC_FLAG_WWDGRST, RCC_FLAG_LPWRRST\r\n */\r\n#define __HAL_RCC_CLEAR_RESET_FLAGS() (*(__IO uint32_t *)RCC_CSR_RMVF_BB = ENABLE)\r\n\r\n/** @brief  Check RCC flag is set or not.\r\n  * @param  __FLAG__ specifies the flag to check.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_FLAG_HSIRDY HSI oscillator clock ready.\r\n  *            @arg @ref RCC_FLAG_HSERDY HSE oscillator clock ready.\r\n  *            @arg @ref RCC_FLAG_PLLRDY Main PLL clock ready.\r\n  @if STM32F105xx\r\n  *            @arg @ref RCC_FLAG_PLL2RDY Main PLL2 clock ready.\r\n  *            @arg @ref RCC_FLAG_PLLI2SRDY Main PLLI2S clock ready.\r\n  @elsif STM32F107xx\r\n  *            @arg @ref RCC_FLAG_PLL2RDY Main PLL2 clock ready.\r\n  *            @arg @ref RCC_FLAG_PLLI2SRDY Main PLLI2S clock ready.\r\n  @endif\r\n  *            @arg @ref RCC_FLAG_LSERDY LSE oscillator clock ready.\r\n  *            @arg @ref RCC_FLAG_LSIRDY LSI oscillator clock ready.\r\n  *            @arg @ref RCC_FLAG_PINRST  Pin reset.\r\n  *            @arg @ref RCC_FLAG_PORRST  POR/PDR reset.\r\n  *            @arg @ref RCC_FLAG_SFTRST  Software reset.\r\n  *            @arg @ref RCC_FLAG_IWDGRST Independent Watchdog reset.\r\n  *            @arg @ref RCC_FLAG_WWDGRST Window Watchdog reset.\r\n  *            @arg @ref RCC_FLAG_LPWRRST Low Power reset.\r\n  * @retval The new state of __FLAG__ (TRUE or FALSE).\r\n  */\r\n#define __HAL_RCC_GET_FLAG(__FLAG__) (((((__FLAG__) >> 5U) == CR_REG_INDEX) ? RCC->CR : ((((__FLAG__) >> 5U) == BDCR_REG_INDEX) ? RCC->BDCR : RCC->CSR)) & (1U << ((__FLAG__)&RCC_FLAG_MASK)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Include RCC HAL Extension module */\r\n#include \"stm32f1xx_hal_rcc_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup RCC_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup RCC_Exported_Functions_Group1\r\n * @{\r\n */\r\n\r\n/* Initialization and de-initialization functions  ******************************/\r\nHAL_StatusTypeDef HAL_RCC_DeInit(void);\r\nHAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct);\r\nHAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCC_Exported_Functions_Group2\r\n * @{\r\n */\r\n\r\n/* Peripheral Control functions  ************************************************/\r\nvoid     HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv);\r\nvoid     HAL_RCC_EnableCSS(void);\r\nvoid     HAL_RCC_DisableCSS(void);\r\nuint32_t HAL_RCC_GetSysClockFreq(void);\r\nuint32_t HAL_RCC_GetHCLKFreq(void);\r\nuint32_t HAL_RCC_GetPCLK1Freq(void);\r\nuint32_t HAL_RCC_GetPCLK2Freq(void);\r\nvoid     HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct);\r\nvoid     HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency);\r\n\r\n/* CSS NMI IRQ handler */\r\nvoid HAL_RCC_NMI_IRQHandler(void);\r\n\r\n/* User Callbacks in non blocking mode (IT mode) */\r\nvoid HAL_RCC_CSSCallback(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCC_Private_Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup RCC_Timeout RCC Timeout\r\n * @{\r\n */\r\n\r\n/* Disable Backup domain write protection state change timeout */\r\n#define RCC_DBP_TIMEOUT_VALUE 100U /* 100 ms */\r\n/* LSE state change timeout */\r\n#define RCC_LSE_TIMEOUT_VALUE     LSE_STARTUP_TIMEOUT\r\n#define CLOCKSWITCH_TIMEOUT_VALUE 5000 /* 5 s    */\r\n#define HSE_TIMEOUT_VALUE         HSE_STARTUP_TIMEOUT\r\n#define HSI_TIMEOUT_VALUE         2U /* 2 ms (minimum Tick + 1) */\r\n#define LSI_TIMEOUT_VALUE         2U /* 2 ms (minimum Tick + 1) */\r\n#define PLL_TIMEOUT_VALUE         2U /* 2 ms (minimum Tick + 1) */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Register_Offset Register offsets\r\n * @{\r\n */\r\n#define RCC_OFFSET      (RCC_BASE - PERIPH_BASE)\r\n#define RCC_CR_OFFSET   0x00U\r\n#define RCC_CFGR_OFFSET 0x04U\r\n#define RCC_CIR_OFFSET  0x08U\r\n#define RCC_BDCR_OFFSET 0x20U\r\n#define RCC_CSR_OFFSET  0x24U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_BitAddress_AliasRegion BitAddress AliasRegion\r\n * @brief RCC registers bit address in the alias region\r\n * @{\r\n */\r\n#define RCC_CR_OFFSET_BB   (RCC_OFFSET + RCC_CR_OFFSET)\r\n#define RCC_CFGR_OFFSET_BB (RCC_OFFSET + RCC_CFGR_OFFSET)\r\n#define RCC_CIR_OFFSET_BB  (RCC_OFFSET + RCC_CIR_OFFSET)\r\n#define RCC_BDCR_OFFSET_BB (RCC_OFFSET + RCC_BDCR_OFFSET)\r\n#define RCC_CSR_OFFSET_BB  (RCC_OFFSET + RCC_CSR_OFFSET)\r\n\r\n/* --- CR Register ---*/\r\n/* Alias word address of HSION bit */\r\n#define RCC_HSION_BIT_NUMBER RCC_CR_HSION_Pos\r\n#define RCC_CR_HSION_BB      ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_HSION_BIT_NUMBER * 4U)))\r\n/* Alias word address of HSEON bit */\r\n#define RCC_HSEON_BIT_NUMBER RCC_CR_HSEON_Pos\r\n#define RCC_CR_HSEON_BB      ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_HSEON_BIT_NUMBER * 4U)))\r\n/* Alias word address of CSSON bit */\r\n#define RCC_CSSON_BIT_NUMBER RCC_CR_CSSON_Pos\r\n#define RCC_CR_CSSON_BB      ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_CSSON_BIT_NUMBER * 4U)))\r\n/* Alias word address of PLLON bit */\r\n#define RCC_PLLON_BIT_NUMBER RCC_CR_PLLON_Pos\r\n#define RCC_CR_PLLON_BB      ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (RCC_PLLON_BIT_NUMBER * 4U)))\r\n\r\n/* --- CSR Register ---*/\r\n/* Alias word address of LSION bit */\r\n#define RCC_LSION_BIT_NUMBER RCC_CSR_LSION_Pos\r\n#define RCC_CSR_LSION_BB     ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32U) + (RCC_LSION_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of RMVF bit */\r\n#define RCC_RMVF_BIT_NUMBER RCC_CSR_RMVF_Pos\r\n#define RCC_CSR_RMVF_BB     ((uint32_t)(PERIPH_BB_BASE + (RCC_CSR_OFFSET_BB * 32U) + (RCC_RMVF_BIT_NUMBER * 4U)))\r\n\r\n/* --- BDCR Registers ---*/\r\n/* Alias word address of LSEON bit */\r\n#define RCC_LSEON_BIT_NUMBER RCC_BDCR_LSEON_Pos\r\n#define RCC_BDCR_LSEON_BB    ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32U) + (RCC_LSEON_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of LSEON bit */\r\n#define RCC_LSEBYP_BIT_NUMBER RCC_BDCR_LSEBYP_Pos\r\n#define RCC_BDCR_LSEBYP_BB    ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32U) + (RCC_LSEBYP_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of RTCEN bit */\r\n#define RCC_RTCEN_BIT_NUMBER RCC_BDCR_RTCEN_Pos\r\n#define RCC_BDCR_RTCEN_BB    ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32U) + (RCC_RTCEN_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of BDRST bit */\r\n#define RCC_BDRST_BIT_NUMBER RCC_BDCR_BDRST_Pos\r\n#define RCC_BDCR_BDRST_BB    ((uint32_t)(PERIPH_BB_BASE + (RCC_BDCR_OFFSET_BB * 32U) + (RCC_BDRST_BIT_NUMBER * 4U)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* CR register byte 2 (Bits[23:16]) base address */\r\n#define RCC_CR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + RCC_CR_OFFSET + 0x02U))\r\n\r\n/* CIR register byte 1 (Bits[15:8]) base address */\r\n#define RCC_CIR_BYTE1_ADDRESS ((uint32_t)(RCC_BASE + RCC_CIR_OFFSET + 0x01U))\r\n\r\n/* CIR register byte 2 (Bits[23:16]) base address */\r\n#define RCC_CIR_BYTE2_ADDRESS ((uint32_t)(RCC_BASE + RCC_CIR_OFFSET + 0x02U))\r\n\r\n/* Defines used for Flags */\r\n#define CR_REG_INDEX   ((uint8_t)1)\r\n#define BDCR_REG_INDEX ((uint8_t)2)\r\n#define CSR_REG_INDEX  ((uint8_t)3)\r\n\r\n#define RCC_FLAG_MASK ((uint8_t)0x1F)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCC_Private_Macros\r\n * @{\r\n */\r\n/** @defgroup RCC_Alias_For_Legacy Alias define maintained for legacy\r\n * @{\r\n */\r\n#define __HAL_RCC_SYSCFG_CLK_DISABLE   __HAL_RCC_AFIO_CLK_DISABLE\r\n#define __HAL_RCC_SYSCFG_CLK_ENABLE    __HAL_RCC_AFIO_CLK_ENABLE\r\n#define __HAL_RCC_SYSCFG_FORCE_RESET   __HAL_RCC_AFIO_FORCE_RESET\r\n#define __HAL_RCC_SYSCFG_RELEASE_RESET __HAL_RCC_AFIO_RELEASE_RESET\r\n/**\r\n * @}\r\n */\r\n\r\n#define IS_RCC_PLLSOURCE(__SOURCE__) (((__SOURCE__) == RCC_PLLSOURCE_HSI_DIV2) || ((__SOURCE__) == RCC_PLLSOURCE_HSE))\r\n#define IS_RCC_OSCILLATORTYPE(__OSCILLATOR__)                                                                                                                                                      \\\r\n  (((__OSCILLATOR__) == RCC_OSCILLATORTYPE_NONE) || (((__OSCILLATOR__)&RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE) || (((__OSCILLATOR__)&RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) \\\r\n   || (((__OSCILLATOR__)&RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI) || (((__OSCILLATOR__)&RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE))\r\n#define IS_RCC_HSE(__HSE__)                 (((__HSE__) == RCC_HSE_OFF) || ((__HSE__) == RCC_HSE_ON) || ((__HSE__) == RCC_HSE_BYPASS))\r\n#define IS_RCC_LSE(__LSE__)                 (((__LSE__) == RCC_LSE_OFF) || ((__LSE__) == RCC_LSE_ON) || ((__LSE__) == RCC_LSE_BYPASS))\r\n#define IS_RCC_HSI(__HSI__)                 (((__HSI__) == RCC_HSI_OFF) || ((__HSI__) == RCC_HSI_ON))\r\n#define IS_RCC_CALIBRATION_VALUE(__VALUE__) ((__VALUE__) <= 0x1FU)\r\n#define IS_RCC_LSI(__LSI__)                 (((__LSI__) == RCC_LSI_OFF) || ((__LSI__) == RCC_LSI_ON))\r\n#define IS_RCC_PLL(__PLL__)                 (((__PLL__) == RCC_PLL_NONE) || ((__PLL__) == RCC_PLL_OFF) || ((__PLL__) == RCC_PLL_ON))\r\n\r\n#define IS_RCC_CLOCKTYPE(CLK)                                                                                                                                           \\\r\n  ((((CLK)&RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) || (((CLK)&RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) || (((CLK)&RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) \\\r\n   || (((CLK)&RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2))\r\n#define IS_RCC_SYSCLKSOURCE(__SOURCE__)        (((__SOURCE__) == RCC_SYSCLKSOURCE_HSI) || ((__SOURCE__) == RCC_SYSCLKSOURCE_HSE) || ((__SOURCE__) == RCC_SYSCLKSOURCE_PLLCLK))\r\n#define IS_RCC_SYSCLKSOURCE_STATUS(__SOURCE__) (((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_HSI) || ((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_HSE) || ((__SOURCE__) == RCC_SYSCLKSOURCE_STATUS_PLLCLK))\r\n#define IS_RCC_HCLK(__HCLK__)                                                                                                                                                   \\\r\n  (((__HCLK__) == RCC_SYSCLK_DIV1) || ((__HCLK__) == RCC_SYSCLK_DIV2) || ((__HCLK__) == RCC_SYSCLK_DIV4) || ((__HCLK__) == RCC_SYSCLK_DIV8) || ((__HCLK__) == RCC_SYSCLK_DIV16) \\\r\n   || ((__HCLK__) == RCC_SYSCLK_DIV64) || ((__HCLK__) == RCC_SYSCLK_DIV128) || ((__HCLK__) == RCC_SYSCLK_DIV256) || ((__HCLK__) == RCC_SYSCLK_DIV512))\r\n#define IS_RCC_PCLK(__PCLK__)  (((__PCLK__) == RCC_HCLK_DIV1) || ((__PCLK__) == RCC_HCLK_DIV2) || ((__PCLK__) == RCC_HCLK_DIV4) || ((__PCLK__) == RCC_HCLK_DIV8) || ((__PCLK__) == RCC_HCLK_DIV16))\r\n#define IS_RCC_MCO(__MCO__)    ((__MCO__) == RCC_MCO)\r\n#define IS_RCC_MCODIV(__DIV__) (((__DIV__) == RCC_MCODIV_1))\r\n#define IS_RCC_RTCCLKSOURCE(__SOURCE__) \\\r\n  (((__SOURCE__) == RCC_RTCCLKSOURCE_NO_CLK) || ((__SOURCE__) == RCC_RTCCLKSOURCE_LSE) || ((__SOURCE__) == RCC_RTCCLKSOURCE_LSI) || ((__SOURCE__) == RCC_RTCCLKSOURCE_HSE_DIV128))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_RCC_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_rcc_ex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_rcc_ex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of RCC HAL Extension module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_RCC_EX_H\r\n#define __STM32F1xx_HAL_RCC_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup RCCEx\r\n * @{\r\n */\r\n\r\n/** @addtogroup RCCEx_Private_Constants\r\n * @{\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n\r\n/* Alias word address of PLLI2SON bit */\r\n#define PLLI2SON_BITNUMBER RCC_CR_PLL3ON_Pos\r\n#define RCC_CR_PLLI2SON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (PLLI2SON_BITNUMBER * 4U)))\r\n/* Alias word address of PLL2ON bit */\r\n#define PLL2ON_BITNUMBER RCC_CR_PLL2ON_Pos\r\n#define RCC_CR_PLL2ON_BB ((uint32_t)(PERIPH_BB_BASE + (RCC_CR_OFFSET_BB * 32U) + (PLL2ON_BITNUMBER * 4U)))\r\n\r\n#define PLLI2S_TIMEOUT_VALUE 100U /* 100 ms */\r\n#define PLL2_TIMEOUT_VALUE   100U /* 100 ms */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#define CR_REG_INDEX ((uint8_t)1)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCCEx_Private_Macros\r\n * @{\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define IS_RCC_PREDIV1_SOURCE(__SOURCE__) (((__SOURCE__) == RCC_PREDIV1_SOURCE_HSE) || ((__SOURCE__) == RCC_PREDIV1_SOURCE_PLL2))\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB) || defined(STM32F100xE)\r\n#define IS_RCC_HSE_PREDIV(__DIV__)                                                                                                                                                                    \\\r\n  (((__DIV__) == RCC_HSE_PREDIV_DIV1) || ((__DIV__) == RCC_HSE_PREDIV_DIV2) || ((__DIV__) == RCC_HSE_PREDIV_DIV3) || ((__DIV__) == RCC_HSE_PREDIV_DIV4) || ((__DIV__) == RCC_HSE_PREDIV_DIV5)         \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV_DIV6) || ((__DIV__) == RCC_HSE_PREDIV_DIV7) || ((__DIV__) == RCC_HSE_PREDIV_DIV8) || ((__DIV__) == RCC_HSE_PREDIV_DIV9) || ((__DIV__) == RCC_HSE_PREDIV_DIV10)     \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV_DIV11) || ((__DIV__) == RCC_HSE_PREDIV_DIV12) || ((__DIV__) == RCC_HSE_PREDIV_DIV13) || ((__DIV__) == RCC_HSE_PREDIV_DIV14) || ((__DIV__) == RCC_HSE_PREDIV_DIV15) \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV_DIV16))\r\n\r\n#else\r\n#define IS_RCC_HSE_PREDIV(__DIV__) (((__DIV__) == RCC_HSE_PREDIV_DIV1) || ((__DIV__) == RCC_HSE_PREDIV_DIV2))\r\n#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define IS_RCC_PLL_MUL(__MUL__)                                                                                                                                                           \\\r\n  (((__MUL__) == RCC_PLL_MUL4) || ((__MUL__) == RCC_PLL_MUL5) || ((__MUL__) == RCC_PLL_MUL6) || ((__MUL__) == RCC_PLL_MUL7) || ((__MUL__) == RCC_PLL_MUL8) || ((__MUL__) == RCC_PLL_MUL9) \\\r\n   || ((__MUL__) == RCC_PLL_MUL6_5))\r\n\r\n#define IS_RCC_MCO1SOURCE(__SOURCE__)                                                                                                                                                   \\\r\n  (((__SOURCE__) == RCC_MCO1SOURCE_SYSCLK) || ((__SOURCE__) == RCC_MCO1SOURCE_HSI) || ((__SOURCE__) == RCC_MCO1SOURCE_HSE) || ((__SOURCE__) == RCC_MCO1SOURCE_PLLCLK)                   \\\r\n   || ((__SOURCE__) == RCC_MCO1SOURCE_PLL2CLK) || ((__SOURCE__) == RCC_MCO1SOURCE_PLL3CLK) || ((__SOURCE__) == RCC_MCO1SOURCE_PLL3CLK_DIV2) || ((__SOURCE__) == RCC_MCO1SOURCE_EXT_HSE) \\\r\n   || ((__SOURCE__) == RCC_MCO1SOURCE_NOCLOCK))\r\n\r\n#else\r\n#define IS_RCC_PLL_MUL(__MUL__)                                                                                                                                                                  \\\r\n  (((__MUL__) == RCC_PLL_MUL2) || ((__MUL__) == RCC_PLL_MUL3) || ((__MUL__) == RCC_PLL_MUL4) || ((__MUL__) == RCC_PLL_MUL5) || ((__MUL__) == RCC_PLL_MUL6) || ((__MUL__) == RCC_PLL_MUL7)        \\\r\n   || ((__MUL__) == RCC_PLL_MUL8) || ((__MUL__) == RCC_PLL_MUL9) || ((__MUL__) == RCC_PLL_MUL10) || ((__MUL__) == RCC_PLL_MUL11) || ((__MUL__) == RCC_PLL_MUL12) || ((__MUL__) == RCC_PLL_MUL13) \\\r\n   || ((__MUL__) == RCC_PLL_MUL14) || ((__MUL__) == RCC_PLL_MUL15) || ((__MUL__) == RCC_PLL_MUL16))\r\n\r\n#define IS_RCC_MCO1SOURCE(__SOURCE__)                                                                                                                                 \\\r\n  (((__SOURCE__) == RCC_MCO1SOURCE_SYSCLK) || ((__SOURCE__) == RCC_MCO1SOURCE_HSI) || ((__SOURCE__) == RCC_MCO1SOURCE_HSE) || ((__SOURCE__) == RCC_MCO1SOURCE_PLLCLK) \\\r\n   || ((__SOURCE__) == RCC_MCO1SOURCE_NOCLOCK))\r\n\r\n#endif /* STM32F105xC || STM32F107xC*/\r\n\r\n#define IS_RCC_ADCPLLCLK_DIV(__ADCCLK__) (((__ADCCLK__) == RCC_ADCPCLK2_DIV2) || ((__ADCCLK__) == RCC_ADCPCLK2_DIV4) || ((__ADCCLK__) == RCC_ADCPCLK2_DIV6) || ((__ADCCLK__) == RCC_ADCPCLK2_DIV8))\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define IS_RCC_I2S2CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_I2S2CLKSOURCE_SYSCLK) || ((__SOURCE__) == RCC_I2S2CLKSOURCE_PLLI2S_VCO))\r\n\r\n#define IS_RCC_I2S3CLKSOURCE(__SOURCE__) (((__SOURCE__) == RCC_I2S3CLKSOURCE_SYSCLK) || ((__SOURCE__) == RCC_I2S3CLKSOURCE_PLLI2S_VCO))\r\n\r\n#define IS_RCC_USBPLLCLK_DIV(__USBCLK__) (((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV2) || ((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV3))\r\n\r\n#define IS_RCC_PLLI2S_MUL(__MUL__)                                                                                                                                           \\\r\n  (((__MUL__) == RCC_PLLI2S_MUL8) || ((__MUL__) == RCC_PLLI2S_MUL9) || ((__MUL__) == RCC_PLLI2S_MUL10) || ((__MUL__) == RCC_PLLI2S_MUL11) || ((__MUL__) == RCC_PLLI2S_MUL12) \\\r\n   || ((__MUL__) == RCC_PLLI2S_MUL13) || ((__MUL__) == RCC_PLLI2S_MUL14) || ((__MUL__) == RCC_PLLI2S_MUL16) || ((__MUL__) == RCC_PLLI2S_MUL20))\r\n\r\n#define IS_RCC_HSE_PREDIV2(__DIV__)                                                                                                                                                                    \\\r\n  (((__DIV__) == RCC_HSE_PREDIV2_DIV1) || ((__DIV__) == RCC_HSE_PREDIV2_DIV2) || ((__DIV__) == RCC_HSE_PREDIV2_DIV3) || ((__DIV__) == RCC_HSE_PREDIV2_DIV4) || ((__DIV__) == RCC_HSE_PREDIV2_DIV5)     \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV2_DIV6) || ((__DIV__) == RCC_HSE_PREDIV2_DIV7) || ((__DIV__) == RCC_HSE_PREDIV2_DIV8) || ((__DIV__) == RCC_HSE_PREDIV2_DIV9) || ((__DIV__) == RCC_HSE_PREDIV2_DIV10) \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV2_DIV11) || ((__DIV__) == RCC_HSE_PREDIV2_DIV12) || ((__DIV__) == RCC_HSE_PREDIV2_DIV13) || ((__DIV__) == RCC_HSE_PREDIV2_DIV14)                                     \\\r\n   || ((__DIV__) == RCC_HSE_PREDIV2_DIV15) || ((__DIV__) == RCC_HSE_PREDIV2_DIV16))\r\n\r\n#define IS_RCC_PLL2(__PLL__) (((__PLL__) == RCC_PLL2_NONE) || ((__PLL__) == RCC_PLL2_OFF) || ((__PLL__) == RCC_PLL2_ON))\r\n\r\n#define IS_RCC_PLL2_MUL(__MUL__)                                                                                                                                                                    \\\r\n  (((__MUL__) == RCC_PLL2_MUL8) || ((__MUL__) == RCC_PLL2_MUL9) || ((__MUL__) == RCC_PLL2_MUL10) || ((__MUL__) == RCC_PLL2_MUL11) || ((__MUL__) == RCC_PLL2_MUL12) || ((__MUL__) == RCC_PLL2_MUL13) \\\r\n   || ((__MUL__) == RCC_PLL2_MUL14) || ((__MUL__) == RCC_PLL2_MUL16) || ((__MUL__) == RCC_PLL2_MUL20))\r\n\r\n#define IS_RCC_PERIPHCLOCK(__SELECTION__)                                                                                                                                                   \\\r\n  ((((__SELECTION__)&RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || (((__SELECTION__)&RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || (((__SELECTION__)&RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2) \\\r\n   || (((__SELECTION__)&RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3) || (((__SELECTION__)&RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB))\r\n\r\n#elif defined(STM32F103xE) || defined(STM32F103xG)\r\n\r\n#define IS_RCC_I2S2CLKSOURCE(__SOURCE__) ((__SOURCE__) == RCC_I2S2CLKSOURCE_SYSCLK)\r\n\r\n#define IS_RCC_I2S3CLKSOURCE(__SOURCE__) ((__SOURCE__) == RCC_I2S3CLKSOURCE_SYSCLK)\r\n\r\n#define IS_RCC_PERIPHCLOCK(__SELECTION__)                                                                                                                                                   \\\r\n  ((((__SELECTION__)&RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || (((__SELECTION__)&RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || (((__SELECTION__)&RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2) \\\r\n   || (((__SELECTION__)&RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3) || (((__SELECTION__)&RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB))\r\n\r\n#elif defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB)\r\n\r\n#define IS_RCC_PERIPHCLOCK(__SELECTION__) \\\r\n  ((((__SELECTION__)&RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || (((__SELECTION__)&RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) || (((__SELECTION__)&RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB))\r\n\r\n#else\r\n\r\n#define IS_RCC_PERIPHCLOCK(__SELECTION__) ((((__SELECTION__)&RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC) || (((__SELECTION__)&RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC))\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n\r\n#define IS_RCC_USBPLLCLK_DIV(__USBCLK__) (((__USBCLK__) == RCC_USBCLKSOURCE_PLL) || ((__USBCLK__) == RCC_USBCLKSOURCE_PLL_DIV1_5))\r\n\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n\r\n/** @defgroup RCCEx_Exported_Types RCCEx Exported Types\r\n * @{\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/**\r\n * @brief  RCC PLL2 configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t PLL2State; /*!< The new state of the PLL2.\r\n                          This parameter can be a value of @ref RCCEx_PLL2_Config */\r\n\r\n  uint32_t PLL2MUL; /*!< PLL2MUL: Multiplication factor for PLL2 VCO input clock\r\n                      This parameter must be a value of @ref RCCEx_PLL2_Multiplication_Factor*/\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t HSEPrediv2Value; /*!<  The Prediv2 factor value.\r\n                                 This parameter can be a value of @ref RCCEx_Prediv2_Factor */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n} RCC_PLL2InitTypeDef;\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @brief  RCC Internal/External Oscillator (HSE, HSI, LSE and LSI) configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t OscillatorType; /*!< The oscillators to be configured.\r\n                                 This parameter can be a value of @ref RCC_Oscillator_Type */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t Prediv1Source; /*!<  The Prediv1 source value.\r\n                                 This parameter can be a value of @ref RCCEx_Prediv1_Source */\r\n#endif                    /* STM32F105xC || STM32F107xC */\r\n\r\n  uint32_t HSEState; /*!< The new state of the HSE.\r\n                          This parameter can be a value of @ref RCC_HSE_Config */\r\n\r\n  uint32_t HSEPredivValue; /*!<  The Prediv1 factor value (named PREDIV1 or PLLXTPRE in RM)\r\n                                 This parameter can be a value of @ref RCCEx_Prediv1_Factor */\r\n\r\n  uint32_t LSEState; /*!<  The new state of the LSE.\r\n                           This parameter can be a value of @ref RCC_LSE_Config */\r\n\r\n  uint32_t HSIState; /*!< The new state of the HSI.\r\n                          This parameter can be a value of @ref RCC_HSI_Config */\r\n\r\n  uint32_t HSICalibrationValue; /*!< The HSI calibration trimming value (default is RCC_HSICALIBRATION_DEFAULT).\r\n                                     This parameter must be a number between Min_Data = 0x00 and Max_Data = 0x1F */\r\n\r\n  uint32_t LSIState; /*!<  The new state of the LSI.\r\n                           This parameter can be a value of @ref RCC_LSI_Config */\r\n\r\n  RCC_PLLInitTypeDef PLL; /*!< PLL structure parameters */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  RCC_PLL2InitTypeDef PLL2; /*!< PLL2 structure parameters */\r\n#endif                      /* STM32F105xC || STM32F107xC */\r\n} RCC_OscInitTypeDef;\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/**\r\n * @brief  RCC PLLI2S configuration structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t PLLI2SMUL; /*!< PLLI2SMUL: Multiplication factor for PLLI2S VCO input clock\r\n                      This parameter must be a value of @ref RCCEx_PLLI2S_Multiplication_Factor*/\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t HSEPrediv2Value; /*!<  The Prediv2 factor value.\r\n                                 This parameter can be a value of @ref RCCEx_Prediv2_Factor */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n} RCC_PLLI2SInitTypeDef;\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @brief  RCC extended clocks structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t PeriphClockSelection; /*!< The Extended Clock to be configured.\r\n                                  This parameter can be a value of @ref RCCEx_Periph_Clock_Selection */\r\n\r\n  uint32_t RTCClockSelection; /*!< specifies the RTC clock source.\r\n                               This parameter can be a value of @ref RCC_RTC_Clock_Source */\r\n\r\n  uint32_t AdcClockSelection; /*!< ADC clock source\r\n                               This parameter can be a value of @ref RCCEx_ADC_Prescaler */\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t I2s2ClockSelection; /*!< I2S2 clock source\r\n                               This parameter can be a value of @ref RCCEx_I2S2_Clock_Source */\r\n\r\n  uint32_t I2s3ClockSelection; /*!< I2S3 clock source\r\n                               This parameter can be a value of @ref RCCEx_I2S3_Clock_Source */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  RCC_PLLI2SInitTypeDef PLLI2S; /*!< PLL I2S structure parameters\r\n                                     This parameter will be used only when PLLI2S is selected as Clock Source I2S2 or I2S3 */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t UsbClockSelection; /*!< USB clock source\r\n                               This parameter can be a value of @ref RCCEx_USB_Prescaler */\r\n\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n} RCC_PeriphCLKInitTypeDef;\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/** @defgroup RCCEx_Exported_Constants RCCEx Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup RCCEx_Periph_Clock_Selection Periph Clock Selection\r\n * @{\r\n */\r\n#define RCC_PERIPHCLK_RTC 0x00000001U\r\n#define RCC_PERIPHCLK_ADC 0x00000002U\r\n#if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_PERIPHCLK_I2S2 0x00000004U\r\n#define RCC_PERIPHCLK_I2S3 0x00000008U\r\n#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_PERIPHCLK_USB 0x00000010U\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_ADC_Prescaler ADC Prescaler\r\n * @{\r\n */\r\n#define RCC_ADCPCLK2_DIV2 RCC_CFGR_ADCPRE_DIV2\r\n#define RCC_ADCPCLK2_DIV4 RCC_CFGR_ADCPRE_DIV4\r\n#define RCC_ADCPCLK2_DIV6 RCC_CFGR_ADCPRE_DIV6\r\n#define RCC_ADCPCLK2_DIV8 RCC_CFGR_ADCPRE_DIV8\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_I2S2_Clock_Source I2S2 Clock Source\r\n * @{\r\n */\r\n#define RCC_I2S2CLKSOURCE_SYSCLK 0x00000000U\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_I2S2CLKSOURCE_PLLI2S_VCO RCC_CFGR2_I2S2SRC\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_I2S3_Clock_Source I2S3 Clock Source\r\n * @{\r\n */\r\n#define RCC_I2S3CLKSOURCE_SYSCLK 0x00000000U\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_I2S3CLKSOURCE_PLLI2S_VCO RCC_CFGR2_I2S3SRC\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n\r\n/** @defgroup RCCEx_USB_Prescaler USB Prescaler\r\n * @{\r\n */\r\n#define RCC_USBCLKSOURCE_PLL        RCC_CFGR_USBPRE\r\n#define RCC_USBCLKSOURCE_PLL_DIV1_5 0x00000000U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_USB_Prescaler USB Prescaler\r\n * @{\r\n */\r\n#define RCC_USBCLKSOURCE_PLL_DIV2 RCC_CFGR_OTGFSPRE\r\n#define RCC_USBCLKSOURCE_PLL_DIV3 0x00000000U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_PLLI2S_Multiplication_Factor PLLI2S Multiplication Factor\r\n * @{\r\n */\r\n\r\n#define RCC_PLLI2S_MUL8  RCC_CFGR2_PLL3MUL8  /*!< PLLI2S input clock * 8 */\r\n#define RCC_PLLI2S_MUL9  RCC_CFGR2_PLL3MUL9  /*!< PLLI2S input clock * 9 */\r\n#define RCC_PLLI2S_MUL10 RCC_CFGR2_PLL3MUL10 /*!< PLLI2S input clock * 10 */\r\n#define RCC_PLLI2S_MUL11 RCC_CFGR2_PLL3MUL11 /*!< PLLI2S input clock * 11 */\r\n#define RCC_PLLI2S_MUL12 RCC_CFGR2_PLL3MUL12 /*!< PLLI2S input clock * 12 */\r\n#define RCC_PLLI2S_MUL13 RCC_CFGR2_PLL3MUL13 /*!< PLLI2S input clock * 13 */\r\n#define RCC_PLLI2S_MUL14 RCC_CFGR2_PLL3MUL14 /*!< PLLI2S input clock * 14 */\r\n#define RCC_PLLI2S_MUL16 RCC_CFGR2_PLL3MUL16 /*!< PLLI2S input clock * 16 */\r\n#define RCC_PLLI2S_MUL20 RCC_CFGR2_PLL3MUL20 /*!< PLLI2S input clock * 20 */\r\n\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_Prediv1_Source Prediv1 Source\r\n * @{\r\n */\r\n\r\n#define RCC_PREDIV1_SOURCE_HSE  RCC_CFGR2_PREDIV1SRC_HSE\r\n#define RCC_PREDIV1_SOURCE_PLL2 RCC_CFGR2_PREDIV1SRC_PLL2\r\n\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/** @defgroup RCCEx_Prediv1_Factor HSE Prediv1 Factor\r\n * @{\r\n */\r\n\r\n#define RCC_HSE_PREDIV_DIV1 0x00000000U\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB) || defined(STM32F100xE)\r\n#define RCC_HSE_PREDIV_DIV2  RCC_CFGR2_PREDIV1_DIV2\r\n#define RCC_HSE_PREDIV_DIV3  RCC_CFGR2_PREDIV1_DIV3\r\n#define RCC_HSE_PREDIV_DIV4  RCC_CFGR2_PREDIV1_DIV4\r\n#define RCC_HSE_PREDIV_DIV5  RCC_CFGR2_PREDIV1_DIV5\r\n#define RCC_HSE_PREDIV_DIV6  RCC_CFGR2_PREDIV1_DIV6\r\n#define RCC_HSE_PREDIV_DIV7  RCC_CFGR2_PREDIV1_DIV7\r\n#define RCC_HSE_PREDIV_DIV8  RCC_CFGR2_PREDIV1_DIV8\r\n#define RCC_HSE_PREDIV_DIV9  RCC_CFGR2_PREDIV1_DIV9\r\n#define RCC_HSE_PREDIV_DIV10 RCC_CFGR2_PREDIV1_DIV10\r\n#define RCC_HSE_PREDIV_DIV11 RCC_CFGR2_PREDIV1_DIV11\r\n#define RCC_HSE_PREDIV_DIV12 RCC_CFGR2_PREDIV1_DIV12\r\n#define RCC_HSE_PREDIV_DIV13 RCC_CFGR2_PREDIV1_DIV13\r\n#define RCC_HSE_PREDIV_DIV14 RCC_CFGR2_PREDIV1_DIV14\r\n#define RCC_HSE_PREDIV_DIV15 RCC_CFGR2_PREDIV1_DIV15\r\n#define RCC_HSE_PREDIV_DIV16 RCC_CFGR2_PREDIV1_DIV16\r\n#else\r\n#define RCC_HSE_PREDIV_DIV2 RCC_CFGR_PLLXTPRE\r\n#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_Prediv2_Factor HSE Prediv2 Factor\r\n * @{\r\n */\r\n\r\n#define RCC_HSE_PREDIV2_DIV1  RCC_CFGR2_PREDIV2_DIV1  /*!< PREDIV2 input clock not divided */\r\n#define RCC_HSE_PREDIV2_DIV2  RCC_CFGR2_PREDIV2_DIV2  /*!< PREDIV2 input clock divided by 2 */\r\n#define RCC_HSE_PREDIV2_DIV3  RCC_CFGR2_PREDIV2_DIV3  /*!< PREDIV2 input clock divided by 3 */\r\n#define RCC_HSE_PREDIV2_DIV4  RCC_CFGR2_PREDIV2_DIV4  /*!< PREDIV2 input clock divided by 4 */\r\n#define RCC_HSE_PREDIV2_DIV5  RCC_CFGR2_PREDIV2_DIV5  /*!< PREDIV2 input clock divided by 5 */\r\n#define RCC_HSE_PREDIV2_DIV6  RCC_CFGR2_PREDIV2_DIV6  /*!< PREDIV2 input clock divided by 6 */\r\n#define RCC_HSE_PREDIV2_DIV7  RCC_CFGR2_PREDIV2_DIV7  /*!< PREDIV2 input clock divided by 7 */\r\n#define RCC_HSE_PREDIV2_DIV8  RCC_CFGR2_PREDIV2_DIV8  /*!< PREDIV2 input clock divided by 8 */\r\n#define RCC_HSE_PREDIV2_DIV9  RCC_CFGR2_PREDIV2_DIV9  /*!< PREDIV2 input clock divided by 9 */\r\n#define RCC_HSE_PREDIV2_DIV10 RCC_CFGR2_PREDIV2_DIV10 /*!< PREDIV2 input clock divided by 10 */\r\n#define RCC_HSE_PREDIV2_DIV11 RCC_CFGR2_PREDIV2_DIV11 /*!< PREDIV2 input clock divided by 11 */\r\n#define RCC_HSE_PREDIV2_DIV12 RCC_CFGR2_PREDIV2_DIV12 /*!< PREDIV2 input clock divided by 12 */\r\n#define RCC_HSE_PREDIV2_DIV13 RCC_CFGR2_PREDIV2_DIV13 /*!< PREDIV2 input clock divided by 13 */\r\n#define RCC_HSE_PREDIV2_DIV14 RCC_CFGR2_PREDIV2_DIV14 /*!< PREDIV2 input clock divided by 14 */\r\n#define RCC_HSE_PREDIV2_DIV15 RCC_CFGR2_PREDIV2_DIV15 /*!< PREDIV2 input clock divided by 15 */\r\n#define RCC_HSE_PREDIV2_DIV16 RCC_CFGR2_PREDIV2_DIV16 /*!< PREDIV2 input clock divided by 16 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_PLL2_Config PLL Config\r\n * @{\r\n */\r\n#define RCC_PLL2_NONE 0x00000000U\r\n#define RCC_PLL2_OFF  0x00000001U\r\n#define RCC_PLL2_ON   0x00000002U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_PLL2_Multiplication_Factor PLL2 Multiplication Factor\r\n * @{\r\n */\r\n\r\n#define RCC_PLL2_MUL8  RCC_CFGR2_PLL2MUL8  /*!< PLL2 input clock * 8 */\r\n#define RCC_PLL2_MUL9  RCC_CFGR2_PLL2MUL9  /*!< PLL2 input clock * 9 */\r\n#define RCC_PLL2_MUL10 RCC_CFGR2_PLL2MUL10 /*!< PLL2 input clock * 10 */\r\n#define RCC_PLL2_MUL11 RCC_CFGR2_PLL2MUL11 /*!< PLL2 input clock * 11 */\r\n#define RCC_PLL2_MUL12 RCC_CFGR2_PLL2MUL12 /*!< PLL2 input clock * 12 */\r\n#define RCC_PLL2_MUL13 RCC_CFGR2_PLL2MUL13 /*!< PLL2 input clock * 13 */\r\n#define RCC_PLL2_MUL14 RCC_CFGR2_PLL2MUL14 /*!< PLL2 input clock * 14 */\r\n#define RCC_PLL2_MUL16 RCC_CFGR2_PLL2MUL16 /*!< PLL2 input clock * 16 */\r\n#define RCC_PLL2_MUL20 RCC_CFGR2_PLL2MUL20 /*!< PLL2 input clock * 20 */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/** @defgroup RCCEx_PLL_Multiplication_Factor PLL Multiplication Factor\r\n * @{\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#else\r\n#define RCC_PLL_MUL2 RCC_CFGR_PLLMULL2\r\n#define RCC_PLL_MUL3 RCC_CFGR_PLLMULL3\r\n#endif /* STM32F105xC || STM32F107xC */\r\n#define RCC_PLL_MUL4 RCC_CFGR_PLLMULL4\r\n#define RCC_PLL_MUL5 RCC_CFGR_PLLMULL5\r\n#define RCC_PLL_MUL6 RCC_CFGR_PLLMULL6\r\n#define RCC_PLL_MUL7 RCC_CFGR_PLLMULL7\r\n#define RCC_PLL_MUL8 RCC_CFGR_PLLMULL8\r\n#define RCC_PLL_MUL9 RCC_CFGR_PLLMULL9\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_PLL_MUL6_5 RCC_CFGR_PLLMULL6_5\r\n#else\r\n#define RCC_PLL_MUL10 RCC_CFGR_PLLMULL10\r\n#define RCC_PLL_MUL11 RCC_CFGR_PLLMULL11\r\n#define RCC_PLL_MUL12 RCC_CFGR_PLLMULL12\r\n#define RCC_PLL_MUL13 RCC_CFGR_PLLMULL13\r\n#define RCC_PLL_MUL14 RCC_CFGR_PLLMULL14\r\n#define RCC_PLL_MUL15 RCC_CFGR_PLLMULL15\r\n#define RCC_PLL_MUL16 RCC_CFGR_PLLMULL16\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_MCO1_Clock_Source MCO1 Clock Source\r\n * @{\r\n */\r\n#define RCC_MCO1SOURCE_NOCLOCK ((uint32_t)RCC_CFGR_MCO_NOCLOCK)\r\n#define RCC_MCO1SOURCE_SYSCLK  ((uint32_t)RCC_CFGR_MCO_SYSCLK)\r\n#define RCC_MCO1SOURCE_HSI     ((uint32_t)RCC_CFGR_MCO_HSI)\r\n#define RCC_MCO1SOURCE_HSE     ((uint32_t)RCC_CFGR_MCO_HSE)\r\n#define RCC_MCO1SOURCE_PLLCLK  ((uint32_t)RCC_CFGR_MCO_PLLCLK_DIV2)\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define RCC_MCO1SOURCE_PLL2CLK      ((uint32_t)RCC_CFGR_MCO_PLL2CLK)\r\n#define RCC_MCO1SOURCE_PLL3CLK_DIV2 ((uint32_t)RCC_CFGR_MCO_PLL3CLK_DIV2)\r\n#define RCC_MCO1SOURCE_EXT_HSE      ((uint32_t)RCC_CFGR_MCO_EXT_HSE)\r\n#define RCC_MCO1SOURCE_PLL3CLK      ((uint32_t)RCC_CFGR_MCO_PLL3CLK)\r\n#endif /* STM32F105xC || STM32F107xC*/\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_Interrupt RCCEx Interrupt\r\n * @{\r\n */\r\n#define RCC_IT_PLL2RDY   ((uint8_t)RCC_CIR_PLL2RDYF)\r\n#define RCC_IT_PLLI2SRDY ((uint8_t)RCC_CIR_PLL3RDYF)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_Flag RCCEx Flag\r\n *        Elements values convention: 0XXYYYYYb\r\n *           - YYYYY  : Flag position in the register\r\n *           - XX  : Register index\r\n *                 - 01: CR register\r\n * @{\r\n */\r\n/* Flags in the CR register */\r\n#define RCC_FLAG_PLL2RDY   ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_PLL2RDY_Pos))\r\n#define RCC_FLAG_PLLI2SRDY ((uint8_t)((CR_REG_INDEX << 5U) | RCC_CR_PLL3RDY_Pos))\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup RCCEx_Exported_Macros RCCEx Exported Macros\r\n * @{\r\n */\r\n\r\n/** @defgroup RCCEx_Peripheral_Clock_Enable_Disable Peripheral Clock Enable Disable\r\n * @brief  Enable or disable the AHB1 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xE)\r\n#define __HAL_RCC_DMA2_CLK_ENABLE()                    \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_DMA2EN); \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_DMA2_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_DMA2EN))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F105xC || STM32F107xC || STM32F100xE */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F100xE)\r\n#define __HAL_RCC_FSMC_CLK_ENABLE()                    \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN); \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_FSMC_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_FSMCEN))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F100xE */\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_SDIO_CLK_ENABLE()                    \\\r\n  do {                                                 \\\r\n    __IO uint32_t tmpreg;                              \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_SDIOEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */ \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_SDIOEN); \\\r\n    UNUSED(tmpreg);                                    \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SDIO_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_SDIOEN))\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_USB_OTG_FS_CLK_ENABLE()               \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_OTGFSEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_OTGFSEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_USB_OTG_FS_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_OTGFSEN))\r\n#endif /* STM32F105xC || STM32F107xC*/\r\n\r\n#if defined(STM32F107xC)\r\n#define __HAL_RCC_ETHMAC_CLK_ENABLE()                    \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ETHMACTX_CLK_ENABLE()                    \\\r\n  do {                                                     \\\r\n    __IO uint32_t tmpreg;                                  \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACTXEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */     \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACTXEN); \\\r\n    UNUSED(tmpreg);                                        \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ETHMACRX_CLK_ENABLE()                    \\\r\n  do {                                                     \\\r\n    __IO uint32_t tmpreg;                                  \\\r\n    SET_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACRXEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */     \\\r\n    tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_ETHMACRXEN); \\\r\n    UNUSED(tmpreg);                                        \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ETHMAC_CLK_DISABLE()   (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACEN))\r\n#define __HAL_RCC_ETHMACTX_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACTXEN))\r\n#define __HAL_RCC_ETHMACRX_CLK_DISABLE() (RCC->AHBENR &= ~(RCC_AHBENR_ETHMACRXEN))\r\n\r\n/**\r\n * @brief  Enable ETHERNET clock.\r\n */\r\n#define __HAL_RCC_ETH_CLK_ENABLE()   \\\r\n  do {                               \\\r\n    __HAL_RCC_ETHMAC_CLK_ENABLE();   \\\r\n    __HAL_RCC_ETHMACTX_CLK_ENABLE(); \\\r\n    __HAL_RCC_ETHMACRX_CLK_ENABLE(); \\\r\n  } while (0U)\r\n/**\r\n * @brief  Disable ETHERNET clock.\r\n */\r\n#define __HAL_RCC_ETH_CLK_DISABLE()   \\\r\n  do {                                \\\r\n    __HAL_RCC_ETHMACTX_CLK_DISABLE(); \\\r\n    __HAL_RCC_ETHMACRX_CLK_DISABLE(); \\\r\n    __HAL_RCC_ETHMAC_CLK_DISABLE();   \\\r\n  } while (0U)\r\n\r\n#endif /* STM32F107xC*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_AHB1_Peripheral_Clock_Enable_Disable_Status AHB1 Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the AHB1 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xE)\r\n#define __HAL_RCC_DMA2_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) != RESET)\r\n#define __HAL_RCC_DMA2_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_DMA2EN)) == RESET)\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F105xC || STM32F107xC || STM32F100xE */\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F100xE)\r\n#define __HAL_RCC_FSMC_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_FSMCEN)) != RESET)\r\n#define __HAL_RCC_FSMC_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_FSMCEN)) == RESET)\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG || STM32F100xE */\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_SDIO_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_SDIOEN)) != RESET)\r\n#define __HAL_RCC_SDIO_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_SDIOEN)) == RESET)\r\n#endif /* STM32F103xE || STM32F103xG */\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_USB_OTG_FS_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_OTGFSEN)) != RESET)\r\n#define __HAL_RCC_USB_OTG_FS_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_OTGFSEN)) == RESET)\r\n#endif /* STM32F105xC || STM32F107xC*/\r\n#if defined(STM32F107xC)\r\n#define __HAL_RCC_ETHMAC_IS_CLK_ENABLED()    ((RCC->AHBENR & (RCC_AHBENR_ETHMACEN)) != RESET)\r\n#define __HAL_RCC_ETHMAC_IS_CLK_DISABLED()   ((RCC->AHBENR & (RCC_AHBENR_ETHMACEN)) == RESET)\r\n#define __HAL_RCC_ETHMACTX_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_ETHMACTXEN)) != RESET)\r\n#define __HAL_RCC_ETHMACTX_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACTXEN)) == RESET)\r\n#define __HAL_RCC_ETHMACRX_IS_CLK_ENABLED()  ((RCC->AHBENR & (RCC_AHBENR_ETHMACRXEN)) != RESET)\r\n#define __HAL_RCC_ETHMACRX_IS_CLK_DISABLED() ((RCC->AHBENR & (RCC_AHBENR_ETHMACRXEN)) == RESET)\r\n#endif /* STM32F107xC*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_APB1_Clock_Enable_Disable APB1 Clock Enable Disable\r\n * @brief  Enable or disable the Low Speed APB (APB1) peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_CAN1_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN1EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_CAN1_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN1EN))\r\n#endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB) || defined(STM32F103xB) || defined(STM32F103xE) \\\r\n    || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM4_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM4EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SPI2_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI2EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_USART3_CLK_ENABLE()                      \\\r\n  do {                                                     \\\r\n    __IO uint32_t tmpreg;                                  \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */     \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USART3EN); \\\r\n    UNUSED(tmpreg);                                        \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_I2C2_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_I2C2EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM4_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM4EN))\r\n#define __HAL_RCC_SPI2_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI2EN))\r\n#define __HAL_RCC_USART3_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USART3EN))\r\n#define __HAL_RCC_I2C2_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_I2C2EN))\r\n#endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_USB_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_USBEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_USB_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_USBEN))\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM5_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM6_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM7_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SPI3_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_UART4_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_UART5_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_DAC_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM5_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN))\r\n#define __HAL_RCC_TIM6_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN))\r\n#define __HAL_RCC_TIM7_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN))\r\n#define __HAL_RCC_SPI3_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN))\r\n#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN))\r\n#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN))\r\n#define __HAL_RCC_DAC_CLK_DISABLE()   (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM6_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM6EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM7_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM7EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_DAC_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_DACEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_CEC_CLK_ENABLE()                      \\\r\n  do {                                                  \\\r\n    __IO uint32_t tmpreg;                               \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */  \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CECEN); \\\r\n    UNUSED(tmpreg);                                     \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM6_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM6EN))\r\n#define __HAL_RCC_TIM7_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM7EN))\r\n#define __HAL_RCC_DAC_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_DACEN))\r\n#define __HAL_RCC_CEC_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_CECEN))\r\n#endif /* STM32F100xB || STM32F100xE */\r\n\r\n#ifdef STM32F100xE\r\n#define __HAL_RCC_TIM5_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM5EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM12_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM13_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM14_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_SPI3_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_SPI3EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_UART4_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART4EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_UART5_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_UART5EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM5_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM5EN))\r\n#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN))\r\n#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN))\r\n#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN))\r\n#define __HAL_RCC_SPI3_CLK_DISABLE()  (RCC->APB1ENR &= ~(RCC_APB1ENR_SPI3EN))\r\n#define __HAL_RCC_UART4_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART4EN))\r\n#define __HAL_RCC_UART5_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_UART5EN))\r\n#endif /* STM32F100xE */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_CAN2_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_CAN2EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_CAN2_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_CAN2EN))\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM12_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM12EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM13_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM13EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM14_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB1ENR, RCC_APB1ENR_TIM14EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM12_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM12EN))\r\n#define __HAL_RCC_TIM13_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM13EN))\r\n#define __HAL_RCC_TIM14_CLK_DISABLE() (RCC->APB1ENR &= ~(RCC_APB1ENR_TIM14EN))\r\n#endif /* STM32F101xG || STM32F103xG*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_APB1_Peripheral_Clock_Enable_Disable_Status APB1 Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the APB1 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_CAN1_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) != RESET)\r\n#define __HAL_RCC_CAN1_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_CAN1EN)) == RESET)\r\n#endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB) || defined(STM32F103xB) || defined(STM32F103xE) \\\r\n    || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM4_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) != RESET)\r\n#define __HAL_RCC_TIM4_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM4EN)) == RESET)\r\n#define __HAL_RCC_SPI2_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) != RESET)\r\n#define __HAL_RCC_SPI2_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_SPI2EN)) == RESET)\r\n#define __HAL_RCC_USART3_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) != RESET)\r\n#define __HAL_RCC_USART3_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USART3EN)) == RESET)\r\n#define __HAL_RCC_I2C2_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) != RESET)\r\n#define __HAL_RCC_I2C2_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_I2C2EN)) == RESET)\r\n#endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_USB_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) != RESET)\r\n#define __HAL_RCC_USB_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_USBEN)) == RESET)\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM5_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) != RESET)\r\n#define __HAL_RCC_TIM5_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) == RESET)\r\n#define __HAL_RCC_TIM6_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET)\r\n#define __HAL_RCC_TIM6_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET)\r\n#define __HAL_RCC_TIM7_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET)\r\n#define __HAL_RCC_TIM7_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET)\r\n#define __HAL_RCC_SPI3_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET)\r\n#define __HAL_RCC_SPI3_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET)\r\n#define __HAL_RCC_UART4_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET)\r\n#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET)\r\n#define __HAL_RCC_UART5_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET)\r\n#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET)\r\n#define __HAL_RCC_DAC_IS_CLK_ENABLED()    ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET)\r\n#define __HAL_RCC_DAC_IS_CLK_DISABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET)\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM6_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) != RESET)\r\n#define __HAL_RCC_TIM6_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM6EN)) == RESET)\r\n#define __HAL_RCC_TIM7_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) != RESET)\r\n#define __HAL_RCC_TIM7_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM7EN)) == RESET)\r\n#define __HAL_RCC_DAC_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) != RESET)\r\n#define __HAL_RCC_DAC_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_DACEN)) == RESET)\r\n#define __HAL_RCC_CEC_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) != RESET)\r\n#define __HAL_RCC_CEC_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_CECEN)) == RESET)\r\n#endif /* STM32F100xB || STM32F100xE */\r\n#ifdef STM32F100xE\r\n#define __HAL_RCC_TIM5_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) != RESET)\r\n#define __HAL_RCC_TIM5_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM5EN)) == RESET)\r\n#define __HAL_RCC_TIM12_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET)\r\n#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET)\r\n#define __HAL_RCC_TIM13_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET)\r\n#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET)\r\n#define __HAL_RCC_TIM14_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET)\r\n#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET)\r\n#define __HAL_RCC_SPI3_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) != RESET)\r\n#define __HAL_RCC_SPI3_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_SPI3EN)) == RESET)\r\n#define __HAL_RCC_UART4_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) != RESET)\r\n#define __HAL_RCC_UART4_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART4EN)) == RESET)\r\n#define __HAL_RCC_UART5_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) != RESET)\r\n#define __HAL_RCC_UART5_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_UART5EN)) == RESET)\r\n#define __HAL_RCC_CAN2_IS_CLK_ENABLED()   ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) != RESET)\r\n#define __HAL_RCC_CAN2_IS_CLK_DISABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_CAN2EN)) == RESET)\r\n#endif /* STM32F100xE */\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM12_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) != RESET)\r\n#define __HAL_RCC_TIM12_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM12EN)) == RESET)\r\n#endif /* STM32F105xC || STM32F107xC */\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM13_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) != RESET)\r\n#define __HAL_RCC_TIM13_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM13EN)) == RESET)\r\n#define __HAL_RCC_TIM14_IS_CLK_ENABLED()  ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) != RESET)\r\n#define __HAL_RCC_TIM14_IS_CLK_DISABLED() ((RCC->APB1ENR & (RCC_APB1ENR_TIM14EN)) == RESET)\r\n#endif /* STM32F101xG || STM32F103xG*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_APB2_Clock_Enable_Disable APB2 Clock Enable Disable\r\n * @brief  Enable or disable the High Speed APB (APB2) peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_ADC2_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC2EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ADC2_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC2EN))\r\n#endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM15_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM15EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM15EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM16_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM16EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM16EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM17_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM17EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM17EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM15_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM15EN))\r\n#define __HAL_RCC_TIM16_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM16EN))\r\n#define __HAL_RCC_TIM17_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM17EN))\r\n#endif /* STM32F100xB || STM32F100xE */\r\n\r\n#if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) \\\r\n    || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_GPIOE_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPEEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPEEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOE_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPEEN))\r\n#endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_GPIOF_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOG_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPFEN))\r\n#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPGEN))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM8_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM8EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_ADC3_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC3EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM8_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM8EN))\r\n#define __HAL_RCC_ADC3_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_ADC3EN))\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F100xE)\r\n#define __HAL_RCC_GPIOF_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPFEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOG_CLK_ENABLE()                     \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPGEN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_GPIOF_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPFEN))\r\n#define __HAL_RCC_GPIOG_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_IOPGEN))\r\n#endif /* STM32F100xE */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM9_CLK_ENABLE()                      \\\r\n  do {                                                   \\\r\n    __IO uint32_t tmpreg;                                \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */   \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM9EN); \\\r\n    UNUSED(tmpreg);                                      \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM10_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM10EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM11_CLK_ENABLE()                      \\\r\n  do {                                                    \\\r\n    __IO uint32_t tmpreg;                                 \\\r\n    SET_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN);           \\\r\n    /* Delay after an RCC peripheral clock enabling */    \\\r\n    tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_TIM11EN); \\\r\n    UNUSED(tmpreg);                                       \\\r\n  } while (0U)\r\n\r\n#define __HAL_RCC_TIM9_CLK_DISABLE()  (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM9EN))\r\n#define __HAL_RCC_TIM10_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM10EN))\r\n#define __HAL_RCC_TIM11_CLK_DISABLE() (RCC->APB2ENR &= ~(RCC_APB2ENR_TIM11EN))\r\n#endif /* STM32F101xG || STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_APB2_Peripheral_Clock_Enable_Disable_Status APB2 Peripheral Clock Enable Disable Status\r\n * @brief  Get the enable or disable status of the APB2 peripheral clock.\r\n * @note   After reset, the peripheral clock (used for registers read/write access)\r\n *         is disabled and the application software has to enable this clock before\r\n *         using it.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_ADC2_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) != RESET)\r\n#define __HAL_RCC_ADC2_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC2EN)) == RESET)\r\n#endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM15_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM15EN)) != RESET)\r\n#define __HAL_RCC_TIM15_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM15EN)) == RESET)\r\n#define __HAL_RCC_TIM16_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM16EN)) != RESET)\r\n#define __HAL_RCC_TIM16_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM16EN)) == RESET)\r\n#define __HAL_RCC_TIM17_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM17EN)) != RESET)\r\n#define __HAL_RCC_TIM17_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM17EN)) == RESET)\r\n#endif /* STM32F100xB || STM32F100xE */\r\n#if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) \\\r\n    || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_GPIOE_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPEEN)) != RESET)\r\n#define __HAL_RCC_GPIOE_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPEEN)) == RESET)\r\n#endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_GPIOF_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) != RESET)\r\n#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) == RESET)\r\n#define __HAL_RCC_GPIOG_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) != RESET)\r\n#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) == RESET)\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM8_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) != RESET)\r\n#define __HAL_RCC_TIM8_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM8EN)) == RESET)\r\n#define __HAL_RCC_ADC3_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) != RESET)\r\n#define __HAL_RCC_ADC3_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_ADC3EN)) == RESET)\r\n#endif /* STM32F103xE || STM32F103xG */\r\n#if defined(STM32F100xE)\r\n#define __HAL_RCC_GPIOF_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) != RESET)\r\n#define __HAL_RCC_GPIOF_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPFEN)) == RESET)\r\n#define __HAL_RCC_GPIOG_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) != RESET)\r\n#define __HAL_RCC_GPIOG_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_IOPGEN)) == RESET)\r\n#endif /* STM32F100xE */\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM9_IS_CLK_ENABLED()   ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) != RESET)\r\n#define __HAL_RCC_TIM9_IS_CLK_DISABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM9EN)) == RESET)\r\n#define __HAL_RCC_TIM10_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) != RESET)\r\n#define __HAL_RCC_TIM10_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM10EN)) == RESET)\r\n#define __HAL_RCC_TIM11_IS_CLK_ENABLED()  ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) != RESET)\r\n#define __HAL_RCC_TIM11_IS_CLK_DISABLED() ((RCC->APB2ENR & (RCC_APB2ENR_TIM11EN)) == RESET)\r\n#endif /* STM32F101xG || STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_Peripheral_Clock_Force_Release Peripheral Clock Force Release\r\n * @brief  Force or release AHB peripheral reset.\r\n * @{\r\n */\r\n#define __HAL_RCC_AHB_FORCE_RESET()        (RCC->AHBRSTR = 0xFFFFFFFFU)\r\n#define __HAL_RCC_USB_OTG_FS_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_OTGFSRST))\r\n#if defined(STM32F107xC)\r\n#define __HAL_RCC_ETHMAC_FORCE_RESET() (RCC->AHBRSTR |= (RCC_AHBRSTR_ETHMACRST))\r\n#endif /* STM32F107xC */\r\n\r\n#define __HAL_RCC_AHB_RELEASE_RESET()        (RCC->AHBRSTR = 0x00)\r\n#define __HAL_RCC_USB_OTG_FS_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_OTGFSRST))\r\n#if defined(STM32F107xC)\r\n#define __HAL_RCC_ETHMAC_RELEASE_RESET() (RCC->AHBRSTR &= ~(RCC_AHBRSTR_ETHMACRST))\r\n#endif /* STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/** @defgroup RCCEx_APB1_Force_Release_Reset APB1 Force Release Reset\r\n * @brief  Force or release APB1 peripheral reset.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_CAN1_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN1RST))\r\n\r\n#define __HAL_RCC_CAN1_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN1RST))\r\n#endif /* STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102xB) || defined(STM32F103xB) || defined(STM32F103xE) \\\r\n    || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM4_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM4RST))\r\n#define __HAL_RCC_SPI2_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI2RST))\r\n#define __HAL_RCC_USART3_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_USART3RST))\r\n#define __HAL_RCC_I2C2_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_I2C2RST))\r\n\r\n#define __HAL_RCC_TIM4_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM4RST))\r\n#define __HAL_RCC_SPI2_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI2RST))\r\n#define __HAL_RCC_USART3_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USART3RST))\r\n#define __HAL_RCC_I2C2_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_I2C2RST))\r\n#endif /* STM32F100xB || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_USB_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_USBRST))\r\n#define __HAL_RCC_USB_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_USBRST))\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_TIM5_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST))\r\n#define __HAL_RCC_TIM6_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST))\r\n#define __HAL_RCC_TIM7_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST))\r\n#define __HAL_RCC_SPI3_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST))\r\n#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST))\r\n#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST))\r\n#define __HAL_RCC_DAC_FORCE_RESET()   (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST))\r\n\r\n#define __HAL_RCC_TIM5_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST))\r\n#define __HAL_RCC_TIM6_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST))\r\n#define __HAL_RCC_TIM7_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST))\r\n#define __HAL_RCC_SPI3_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST))\r\n#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST))\r\n#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST))\r\n#define __HAL_RCC_DAC_RELEASE_RESET()   (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM6_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM6RST))\r\n#define __HAL_RCC_TIM7_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM7RST))\r\n#define __HAL_RCC_DAC_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_DACRST))\r\n#define __HAL_RCC_CEC_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_CECRST))\r\n\r\n#define __HAL_RCC_TIM6_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM6RST))\r\n#define __HAL_RCC_TIM7_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM7RST))\r\n#define __HAL_RCC_DAC_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_DACRST))\r\n#define __HAL_RCC_CEC_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CECRST))\r\n#endif /* STM32F100xB || STM32F100xE */\r\n\r\n#if defined(STM32F100xE)\r\n#define __HAL_RCC_TIM5_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM5RST))\r\n#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST))\r\n#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST))\r\n#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST))\r\n#define __HAL_RCC_SPI3_FORCE_RESET()  (RCC->APB1RSTR |= (RCC_APB1RSTR_SPI3RST))\r\n#define __HAL_RCC_UART4_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART4RST))\r\n#define __HAL_RCC_UART5_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_UART5RST))\r\n\r\n#define __HAL_RCC_TIM5_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM5RST))\r\n#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST))\r\n#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST))\r\n#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST))\r\n#define __HAL_RCC_SPI3_RELEASE_RESET()  (RCC->APB1RSTR &= ~(RCC_APB1RSTR_SPI3RST))\r\n#define __HAL_RCC_UART4_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART4RST))\r\n#define __HAL_RCC_UART5_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_UART5RST))\r\n#endif /* STM32F100xE */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_CAN2_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_CAN2RST))\r\n\r\n#define __HAL_RCC_CAN2_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_CAN2RST))\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM12_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM12RST))\r\n#define __HAL_RCC_TIM13_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM13RST))\r\n#define __HAL_RCC_TIM14_FORCE_RESET() (RCC->APB1RSTR |= (RCC_APB1RSTR_TIM14RST))\r\n\r\n#define __HAL_RCC_TIM12_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM12RST))\r\n#define __HAL_RCC_TIM13_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM13RST))\r\n#define __HAL_RCC_TIM14_RELEASE_RESET() (RCC->APB1RSTR &= ~(RCC_APB1RSTR_TIM14RST))\r\n#endif /* STM32F101xG || STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_APB2_Force_Release_Reset APB2 Force Release Reset\r\n * @brief  Force or release APB2 peripheral reset.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_ADC2_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC2RST))\r\n\r\n#define __HAL_RCC_ADC2_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC2RST))\r\n#endif /* STM32F101xG || STM32F103x6 || STM32F103xB || STM32F105xC || STM32F107xC || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n#define __HAL_RCC_TIM15_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM15RST))\r\n#define __HAL_RCC_TIM16_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM16RST))\r\n#define __HAL_RCC_TIM17_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM17RST))\r\n\r\n#define __HAL_RCC_TIM15_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM15RST))\r\n#define __HAL_RCC_TIM16_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM16RST))\r\n#define __HAL_RCC_TIM17_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM17RST))\r\n#endif /* STM32F100xB || STM32F100xE */\r\n\r\n#if defined(STM32F100xE) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F100xB) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) \\\r\n    || defined(STM32F105xC) || defined(STM32F107xC)\r\n#define __HAL_RCC_GPIOE_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPERST))\r\n\r\n#define __HAL_RCC_GPIOE_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPERST))\r\n#endif /* STM32F101x6 || STM32F101xB || STM32F101xE || (...) || STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F101xE) || defined(STM32F103xE) || defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPFRST))\r\n#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPGRST))\r\n\r\n#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPFRST))\r\n#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPGRST))\r\n#endif /* STM32F101xE || STM32F103xE || STM32F101xG || STM32F103xG*/\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM8_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM8RST))\r\n#define __HAL_RCC_ADC3_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_ADC3RST))\r\n\r\n#define __HAL_RCC_TIM8_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM8RST))\r\n#define __HAL_RCC_ADC3_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_ADC3RST))\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F100xE)\r\n#define __HAL_RCC_GPIOF_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPFRST))\r\n#define __HAL_RCC_GPIOG_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_IOPGRST))\r\n\r\n#define __HAL_RCC_GPIOF_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPFRST))\r\n#define __HAL_RCC_GPIOG_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_IOPGRST))\r\n#endif /* STM32F100xE */\r\n\r\n#if defined(STM32F101xG) || defined(STM32F103xG)\r\n#define __HAL_RCC_TIM9_FORCE_RESET()  (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM9RST))\r\n#define __HAL_RCC_TIM10_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM10RST))\r\n#define __HAL_RCC_TIM11_FORCE_RESET() (RCC->APB2RSTR |= (RCC_APB2RSTR_TIM11RST))\r\n\r\n#define __HAL_RCC_TIM9_RELEASE_RESET()  (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM9RST))\r\n#define __HAL_RCC_TIM10_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM10RST))\r\n#define __HAL_RCC_TIM11_RELEASE_RESET() (RCC->APB2RSTR &= ~(RCC_APB2RSTR_TIM11RST))\r\n#endif /* STM32F101xG || STM32F103xG*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_HSE_Configuration HSE Configuration\r\n * @{\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB) || defined(STM32F100xE)\r\n/**\r\n * @brief  Macro to configure the External High Speed oscillator (HSE) Predivision factor for PLL.\r\n * @note   Predivision factor can not be changed if PLL is used as system clock\r\n *         In this case, you have to select another source of the system clock, disable the PLL and\r\n *         then change the HSE predivision factor.\r\n * @param  __HSE_PREDIV_VALUE__ specifies the division value applied to HSE.\r\n *         This parameter must be a number between RCC_HSE_PREDIV_DIV1 and RCC_HSE_PREDIV_DIV16.\r\n */\r\n#define __HAL_RCC_HSE_PREDIV_CONFIG(__HSE_PREDIV_VALUE__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV1, (uint32_t)(__HSE_PREDIV_VALUE__))\r\n#else\r\n/**\r\n * @brief  Macro to configure the External High Speed oscillator (HSE) Predivision factor for PLL.\r\n * @note   Predivision factor can not be changed if PLL is used as system clock\r\n *         In this case, you have to select another source of the system clock, disable the PLL and\r\n *         then change the HSE predivision factor.\r\n * @param  __HSE_PREDIV_VALUE__ specifies the division value applied to HSE.\r\n *         This parameter must be a number between RCC_HSE_PREDIV_DIV1 and RCC_HSE_PREDIV_DIV2.\r\n */\r\n#define __HAL_RCC_HSE_PREDIV_CONFIG(__HSE_PREDIV_VALUE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_PLLXTPRE, (uint32_t)(__HSE_PREDIV_VALUE__))\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB) || defined(STM32F100xE)\r\n/**\r\n * @brief  Macro to get prediv1 factor for PLL.\r\n */\r\n#define __HAL_RCC_HSE_GET_PREDIV() READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1)\r\n\r\n#else\r\n/**\r\n * @brief  Macro to get prediv1 factor for PLL.\r\n */\r\n#define __HAL_RCC_HSE_GET_PREDIV() READ_BIT(RCC->CFGR, RCC_CFGR_PLLXTPRE)\r\n\r\n#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_PLLI2S_Configuration PLLI2S Configuration\r\n * @{\r\n */\r\n\r\n/** @brief Macros to enable the main PLLI2S.\r\n * @note   After enabling the main PLLI2S, the application software should wait on\r\n *         PLLI2SRDY flag to be set indicating that PLLI2S clock is stable and can\r\n *         be used as system clock source.\r\n * @note   The main PLLI2S is disabled by hardware when entering STOP and STANDBY modes.\r\n */\r\n#define __HAL_RCC_PLLI2S_ENABLE() (*(__IO uint32_t *)RCC_CR_PLLI2SON_BB = ENABLE)\r\n\r\n/** @brief Macros to disable the main PLLI2S.\r\n * @note   The main PLLI2S is disabled by hardware when entering STOP and STANDBY modes.\r\n */\r\n#define __HAL_RCC_PLLI2S_DISABLE() (*(__IO uint32_t *)RCC_CR_PLLI2SON_BB = DISABLE)\r\n\r\n/** @brief macros to configure the main PLLI2S multiplication factor.\r\n * @note   This function must be used only when the main PLLI2S is disabled.\r\n *\r\n * @param  __PLLI2SMUL__ specifies the multiplication factor for PLLI2S VCO output clock\r\n *          This parameter can be one of the following values:\r\n *             @arg @ref RCC_PLLI2S_MUL8 PLLI2SVCO = PLLI2S clock entry x 8\r\n *             @arg @ref RCC_PLLI2S_MUL9 PLLI2SVCO = PLLI2S clock entry x 9\r\n *             @arg @ref RCC_PLLI2S_MUL10 PLLI2SVCO = PLLI2S clock entry x 10\r\n *             @arg @ref RCC_PLLI2S_MUL11 PLLI2SVCO = PLLI2S clock entry x 11\r\n *             @arg @ref RCC_PLLI2S_MUL12 PLLI2SVCO = PLLI2S clock entry x 12\r\n *             @arg @ref RCC_PLLI2S_MUL13 PLLI2SVCO = PLLI2S clock entry x 13\r\n *             @arg @ref RCC_PLLI2S_MUL14 PLLI2SVCO = PLLI2S clock entry x 14\r\n *             @arg @ref RCC_PLLI2S_MUL16 PLLI2SVCO = PLLI2S clock entry x 16\r\n *             @arg @ref RCC_PLLI2S_MUL20 PLLI2SVCO = PLLI2S clock entry x 20\r\n *\r\n */\r\n#define __HAL_RCC_PLLI2S_CONFIG(__PLLI2SMUL__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PLL3MUL, (__PLLI2SMUL__))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/** @defgroup RCCEx_Peripheral_Configuration Peripheral Configuration\r\n * @brief  Macros to configure clock source of different peripherals.\r\n * @{\r\n */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/** @brief  Macro to configure the USB clock.\r\n * @param  __USBCLKSOURCE__ specifies the USB clock source.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL PLL clock divided by 1 selected as USB clock\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV1_5 PLL clock divided by 1.5 selected as USB clock\r\n */\r\n#define __HAL_RCC_USB_CONFIG(__USBCLKSOURCE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_USBPRE, (uint32_t)(__USBCLKSOURCE__))\r\n\r\n/** @brief  Macro to get the USB clock (USBCLK).\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL PLL clock divided by 1 selected as USB clock\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV1_5 PLL clock divided by 1.5 selected as USB clock\r\n */\r\n#define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_USBPRE)))\r\n\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n\r\n/** @brief  Macro to configure the USB OTSclock.\r\n * @param  __USBCLKSOURCE__ specifies the USB clock source.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV2 PLL clock divided by 2 selected as USB OTG FS clock\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV3 PLL clock divided by 3 selected as USB OTG FS clock\r\n */\r\n#define __HAL_RCC_USB_CONFIG(__USBCLKSOURCE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_OTGFSPRE, (uint32_t)(__USBCLKSOURCE__))\r\n\r\n/** @brief  Macro to get the USB clock (USBCLK).\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV2 PLL clock divided by 2 selected as USB OTG FS clock\r\n *            @arg @ref RCC_USBCLKSOURCE_PLL_DIV3 PLL clock divided by 3 selected as USB OTG FS clock\r\n */\r\n#define __HAL_RCC_GET_USB_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_OTGFSPRE)))\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/** @brief  Macro to configure the ADCx clock (x=1 to 3 depending on devices).\r\n * @param  __ADCCLKSOURCE__ specifies the ADC clock source.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_ADCPCLK2_DIV2 PCLK2 clock divided by 2 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV4 PCLK2 clock divided by 4 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV6 PCLK2 clock divided by 6 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV8 PCLK2 clock divided by 8 selected as ADC clock\r\n */\r\n#define __HAL_RCC_ADC_CONFIG(__ADCCLKSOURCE__) MODIFY_REG(RCC->CFGR, RCC_CFGR_ADCPRE, (uint32_t)(__ADCCLKSOURCE__))\r\n\r\n/** @brief  Macro to get the ADC clock (ADCxCLK, x=1 to 3 depending on devices).\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_ADCPCLK2_DIV2 PCLK2 clock divided by 2 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV4 PCLK2 clock divided by 4 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV6 PCLK2 clock divided by 6 selected as ADC clock\r\n *            @arg @ref RCC_ADCPCLK2_DIV8 PCLK2 clock divided by 8 selected as ADC clock\r\n */\r\n#define __HAL_RCC_GET_ADC_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_ADCPRE)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n\r\n/** @addtogroup RCCEx_HSE_Configuration\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Macro to configure the PLL2 & PLLI2S Predivision factor.\r\n * @note   Predivision factor can not be changed if PLL2 is used indirectly as system clock\r\n *         In this case, you have to select another source of the system clock, disable the PLL2 and PLLI2S and\r\n *         then change the PREDIV2 factor.\r\n * @param  __HSE_PREDIV2_VALUE__ specifies the PREDIV2 value applied to PLL2 & PLLI2S.\r\n *         This parameter must be a number between RCC_HSE_PREDIV2_DIV1 and RCC_HSE_PREDIV2_DIV16.\r\n */\r\n#define __HAL_RCC_HSE_PREDIV2_CONFIG(__HSE_PREDIV2_VALUE__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PREDIV2, (uint32_t)(__HSE_PREDIV2_VALUE__))\r\n\r\n/**\r\n * @brief  Macro to get prediv2 factor for PLL2 & PLL3.\r\n */\r\n#define __HAL_RCC_HSE_GET_PREDIV2() READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV2)\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCCEx_PLLI2S_Configuration\r\n * @{\r\n */\r\n\r\n/** @brief Macros to enable the main PLL2.\r\n * @note   After enabling the main PLL2, the application software should wait on\r\n *         PLL2RDY flag to be set indicating that PLL2 clock is stable and can\r\n *         be used as system clock source.\r\n * @note   The main PLL2 is disabled by hardware when entering STOP and STANDBY modes.\r\n */\r\n#define __HAL_RCC_PLL2_ENABLE() (*(__IO uint32_t *)RCC_CR_PLL2ON_BB = ENABLE)\r\n\r\n/** @brief Macros to disable the main PLL2.\r\n * @note   The main PLL2 can not be disabled if it is used indirectly as system clock source\r\n * @note   The main PLL2 is disabled by hardware when entering STOP and STANDBY modes.\r\n */\r\n#define __HAL_RCC_PLL2_DISABLE() (*(__IO uint32_t *)RCC_CR_PLL2ON_BB = DISABLE)\r\n\r\n/** @brief macros to configure the main PLL2 multiplication factor.\r\n * @note   This function must be used only when the main PLL2 is disabled.\r\n *\r\n * @param  __PLL2MUL__ specifies the multiplication factor for PLL2 VCO output clock\r\n *          This parameter can be one of the following values:\r\n *             @arg @ref RCC_PLL2_MUL8 PLL2VCO = PLL2 clock entry x 8\r\n *             @arg @ref RCC_PLL2_MUL9 PLL2VCO = PLL2 clock entry x 9\r\n *             @arg @ref RCC_PLL2_MUL10 PLL2VCO = PLL2 clock entry x 10\r\n *             @arg @ref RCC_PLL2_MUL11 PLL2VCO = PLL2 clock entry x 11\r\n *             @arg @ref RCC_PLL2_MUL12 PLL2VCO = PLL2 clock entry x 12\r\n *             @arg @ref RCC_PLL2_MUL13 PLL2VCO = PLL2 clock entry x 13\r\n *             @arg @ref RCC_PLL2_MUL14 PLL2VCO = PLL2 clock entry x 14\r\n *             @arg @ref RCC_PLL2_MUL16 PLL2VCO = PLL2 clock entry x 16\r\n *             @arg @ref RCC_PLL2_MUL20 PLL2VCO = PLL2 clock entry x 20\r\n *\r\n */\r\n#define __HAL_RCC_PLL2_CONFIG(__PLL2MUL__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_PLL2MUL, (__PLL2MUL__))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_I2S_Configuration I2S Configuration\r\n * @brief  Macros to configure clock source of I2S peripherals.\r\n * @{\r\n */\r\n\r\n/** @brief  Macro to configure the I2S2 clock.\r\n * @param  __I2S2CLKSOURCE__ specifies the I2S2 clock source.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_I2S2CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry\r\n *            @arg @ref RCC_I2S2CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry\r\n */\r\n#define __HAL_RCC_I2S2_CONFIG(__I2S2CLKSOURCE__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_I2S2SRC, (uint32_t)(__I2S2CLKSOURCE__))\r\n\r\n/** @brief  Macro to get the I2S2 clock (I2S2CLK).\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_I2S2CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry\r\n *            @arg @ref RCC_I2S2CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry\r\n */\r\n#define __HAL_RCC_GET_I2S2_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_I2S2SRC)))\r\n\r\n/** @brief  Macro to configure the I2S3 clock.\r\n * @param  __I2S2CLKSOURCE__ specifies the I2S3 clock source.\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref RCC_I2S3CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry\r\n *            @arg @ref RCC_I2S3CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry\r\n */\r\n#define __HAL_RCC_I2S3_CONFIG(__I2S2CLKSOURCE__) MODIFY_REG(RCC->CFGR2, RCC_CFGR2_I2S3SRC, (uint32_t)(__I2S2CLKSOURCE__))\r\n\r\n/** @brief  Macro to get the I2S3 clock (I2S3CLK).\r\n * @retval The clock source can be one of the following values:\r\n *            @arg @ref RCC_I2S3CLKSOURCE_SYSCLK system clock selected as I2S3 clock entry\r\n *            @arg @ref RCC_I2S3CLKSOURCE_PLLI2S_VCO PLLI2S VCO clock selected as I2S3 clock entry\r\n */\r\n#define __HAL_RCC_GET_I2S3_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR2, RCC_CFGR2_I2S3SRC)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup RCCEx_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup RCCEx_Exported_Functions_Group1\r\n * @{\r\n */\r\n\r\nHAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit);\r\nvoid              HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit);\r\nuint32_t          HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @addtogroup RCCEx_Exported_Functions_Group2\r\n * @{\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_EnablePLLI2S(RCC_PLLI2SInitTypeDef *PLLI2SInit);\r\nHAL_StatusTypeDef HAL_RCCEx_DisablePLLI2S(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup RCCEx_Exported_Functions_Group3\r\n * @{\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_EnablePLL2(RCC_PLL2InitTypeDef *PLL2Init);\r\nHAL_StatusTypeDef HAL_RCCEx_DisablePLL2(void);\r\n\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_RCC_EX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_tim.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of TIM HAL module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef STM32F1xx_HAL_TIM_H\r\n#define STM32F1xx_HAL_TIM_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n#ifndef USE_HAL_TIM_REGISTER_CALLBACKS\r\n#define USE_HAL_TIM_REGISTER_CALLBACKS 0\r\n#endif\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup TIM\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup TIM_Exported_Types TIM Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  TIM Time base Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock.\r\n                           This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */\r\n\r\n  uint32_t CounterMode; /*!< Specifies the counter mode.\r\n                             This parameter can be a value of @ref TIM_Counter_Mode */\r\n\r\n  uint32_t Period; /*!< Specifies the period value to be loaded into the active\r\n                        Auto-Reload Register at the next update event.\r\n                        This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF.  */\r\n\r\n  uint32_t ClockDivision; /*!< Specifies the clock division.\r\n                               This parameter can be a value of @ref TIM_ClockDivision */\r\n\r\n  uint32_t RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter\r\n                                   reaches zero, an update event is generated and counting restarts\r\n                                   from the RCR value (N).\r\n                                   This means in PWM mode that (N+1) corresponds to:\r\n                                       - the number of PWM periods in edge-aligned mode\r\n                                       - the number of half PWM period in center-aligned mode\r\n                                    GP timers: this parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF.\r\n                                    Advanced timers: this parameter must be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */\r\n\r\n  uint32_t AutoReloadPreload; /*!< Specifies the auto-reload preload.\r\n                                  This parameter can be a value of @ref TIM_AutoReloadPreload */\r\n} TIM_Base_InitTypeDef;\r\n\r\n/**\r\n * @brief  TIM Output Compare Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t OCMode; /*!< Specifies the TIM mode.\r\n                        This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */\r\n\r\n  uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register.\r\n                       This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */\r\n\r\n  uint32_t OCPolarity; /*!< Specifies the output polarity.\r\n                            This parameter can be a value of @ref TIM_Output_Compare_Polarity */\r\n\r\n  uint32_t OCNPolarity; /*!< Specifies the complementary output polarity.\r\n                             This parameter can be a value of @ref TIM_Output_Compare_N_Polarity\r\n                             @note This parameter is valid only for timer instances supporting break feature. */\r\n\r\n  uint32_t OCFastMode; /*!< Specifies the Fast mode state.\r\n                            This parameter can be a value of @ref TIM_Output_Fast_State\r\n                            @note This parameter is valid only in PWM1 and PWM2 mode. */\r\n\r\n  uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state.\r\n                             This parameter can be a value of @ref TIM_Output_Compare_Idle_State\r\n                             @note This parameter is valid only for timer instances supporting break feature. */\r\n\r\n  uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state.\r\n                              This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State\r\n                              @note This parameter is valid only for timer instances supporting break feature. */\r\n} TIM_OC_InitTypeDef;\r\n\r\n/**\r\n * @brief  TIM One Pulse Mode Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t OCMode; /*!< Specifies the TIM mode.\r\n                        This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */\r\n\r\n  uint32_t Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register.\r\n                       This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */\r\n\r\n  uint32_t OCPolarity; /*!< Specifies the output polarity.\r\n                            This parameter can be a value of @ref TIM_Output_Compare_Polarity */\r\n\r\n  uint32_t OCNPolarity; /*!< Specifies the complementary output polarity.\r\n                             This parameter can be a value of @ref TIM_Output_Compare_N_Polarity\r\n                             @note This parameter is valid only for timer instances supporting break feature. */\r\n\r\n  uint32_t OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state.\r\n                             This parameter can be a value of @ref TIM_Output_Compare_Idle_State\r\n                             @note This parameter is valid only for timer instances supporting break feature. */\r\n\r\n  uint32_t OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state.\r\n                              This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State\r\n                              @note This parameter is valid only for timer instances supporting break feature. */\r\n\r\n  uint32_t ICPolarity; /*!< Specifies the active edge of the input signal.\r\n                            This parameter can be a value of @ref TIM_Input_Capture_Polarity */\r\n\r\n  uint32_t ICSelection; /*!< Specifies the input.\r\n                            This parameter can be a value of @ref TIM_Input_Capture_Selection */\r\n\r\n  uint32_t ICFilter; /*!< Specifies the input capture filter.\r\n                         This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n} TIM_OnePulse_InitTypeDef;\r\n\r\n/**\r\n * @brief  TIM Input Capture Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t ICPolarity; /*!< Specifies the active edge of the input signal.\r\n                            This parameter can be a value of @ref TIM_Input_Capture_Polarity */\r\n\r\n  uint32_t ICSelection; /*!< Specifies the input.\r\n                             This parameter can be a value of @ref TIM_Input_Capture_Selection */\r\n\r\n  uint32_t ICPrescaler; /*!< Specifies the Input Capture Prescaler.\r\n                             This parameter can be a value of @ref TIM_Input_Capture_Prescaler */\r\n\r\n  uint32_t ICFilter; /*!< Specifies the input capture filter.\r\n                          This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n} TIM_IC_InitTypeDef;\r\n\r\n/**\r\n * @brief  TIM Encoder Configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t EncoderMode; /*!< Specifies the active edge of the input signal.\r\n                             This parameter can be a value of @ref TIM_Encoder_Mode */\r\n\r\n  uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal.\r\n                             This parameter can be a value of @ref TIM_Encoder_Input_Polarity */\r\n\r\n  uint32_t IC1Selection; /*!< Specifies the input.\r\n                              This parameter can be a value of @ref TIM_Input_Capture_Selection */\r\n\r\n  uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler.\r\n                              This parameter can be a value of @ref TIM_Input_Capture_Prescaler */\r\n\r\n  uint32_t IC1Filter; /*!< Specifies the input capture filter.\r\n                           This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n\r\n  uint32_t IC2Polarity; /*!< Specifies the active edge of the input signal.\r\n                             This parameter can be a value of @ref TIM_Encoder_Input_Polarity */\r\n\r\n  uint32_t IC2Selection; /*!< Specifies the input.\r\n                             This parameter can be a value of @ref TIM_Input_Capture_Selection */\r\n\r\n  uint32_t IC2Prescaler; /*!< Specifies the Input Capture Prescaler.\r\n                              This parameter can be a value of @ref TIM_Input_Capture_Prescaler */\r\n\r\n  uint32_t IC2Filter; /*!< Specifies the input capture filter.\r\n                           This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n} TIM_Encoder_InitTypeDef;\r\n\r\n/**\r\n * @brief  Clock Configuration Handle Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t ClockSource;    /*!< TIM clock sources\r\n                                This parameter can be a value of @ref TIM_Clock_Source */\r\n  uint32_t ClockPolarity;  /*!< TIM clock polarity\r\n                                This parameter can be a value of @ref TIM_Clock_Polarity */\r\n  uint32_t ClockPrescaler; /*!< TIM clock prescaler\r\n                                This parameter can be a value of @ref TIM_Clock_Prescaler */\r\n  uint32_t ClockFilter;    /*!< TIM clock filter\r\n                                This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n} TIM_ClockConfigTypeDef;\r\n\r\n/**\r\n * @brief  TIM Clear Input Configuration Handle Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t ClearInputState;     /*!< TIM clear Input state\r\n                                     This parameter can be ENABLE or DISABLE */\r\n  uint32_t ClearInputSource;    /*!< TIM clear Input sources\r\n                                     This parameter can be a value of @ref TIM_ClearInput_Source */\r\n  uint32_t ClearInputPolarity;  /*!< TIM Clear Input polarity\r\n                                     This parameter can be a value of @ref TIM_ClearInput_Polarity */\r\n  uint32_t ClearInputPrescaler; /*!< TIM Clear Input prescaler\r\n                                     This parameter must be 0: When OCRef clear feature is used with ETR source, ETR prescaler must be off */\r\n  uint32_t ClearInputFilter;    /*!< TIM Clear Input filter\r\n                                     This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n} TIM_ClearInputConfigTypeDef;\r\n\r\n/**\r\n * @brief  TIM Master configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t MasterOutputTrigger; /*!< Trigger output (TRGO) selection\r\n                                     This parameter can be a value of @ref TIM_Master_Mode_Selection */\r\n  uint32_t MasterSlaveMode;     /*!< Master/slave mode selection\r\n                                     This parameter can be a value of @ref TIM_Master_Slave_Mode\r\n                                     @note When the Master/slave mode is enabled, the effect of\r\n                                     an event on the trigger input (TRGI) is delayed to allow a\r\n                                     perfect synchronization between the current timer and its\r\n                                     slaves (through TRGO). It is not mandatory in case of timer\r\n                                     synchronization mode. */\r\n} TIM_MasterConfigTypeDef;\r\n\r\n/**\r\n * @brief  TIM Slave configuration Structure definition\r\n */\r\ntypedef struct {\r\n  uint32_t SlaveMode;        /*!< Slave mode selection\r\n                                  This parameter can be a value of @ref TIM_Slave_Mode */\r\n  uint32_t InputTrigger;     /*!< Input Trigger source\r\n                                  This parameter can be a value of @ref TIM_Trigger_Selection */\r\n  uint32_t TriggerPolarity;  /*!< Input Trigger polarity\r\n                                  This parameter can be a value of @ref TIM_Trigger_Polarity */\r\n  uint32_t TriggerPrescaler; /*!< Input trigger prescaler\r\n                                  This parameter can be a value of @ref TIM_Trigger_Prescaler */\r\n  uint32_t TriggerFilter;    /*!< Input trigger filter\r\n                                  This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF  */\r\n\r\n} TIM_SlaveConfigTypeDef;\r\n\r\n/**\r\n * @brief  TIM Break input(s) and Dead time configuration Structure definition\r\n * @note   2 break inputs can be configured (BKIN and BKIN2) with configurable\r\n *        filter and polarity.\r\n */\r\ntypedef struct {\r\n  uint32_t OffStateRunMode;  /*!< TIM off state in run mode\r\n                                  This parameter can be a value of @ref TIM_OSSR_Off_State_Selection_for_Run_mode_state */\r\n  uint32_t OffStateIDLEMode; /*!< TIM off state in IDLE mode\r\n                                  This parameter can be a value of @ref TIM_OSSI_Off_State_Selection_for_Idle_mode_state */\r\n  uint32_t LockLevel;        /*!< TIM Lock level\r\n                                  This parameter can be a value of @ref TIM_Lock_level */\r\n  uint32_t DeadTime;         /*!< TIM dead Time\r\n                                  This parameter can be a number between Min_Data = 0x00 and Max_Data = 0xFF */\r\n  uint32_t BreakState;       /*!< TIM Break State\r\n                                  This parameter can be a value of @ref TIM_Break_Input_enable_disable */\r\n  uint32_t BreakPolarity;    /*!< TIM Break input polarity\r\n                                  This parameter can be a value of @ref TIM_Break_Polarity */\r\n  uint32_t BreakFilter;      /*!< Specifies the break input filter.\r\n                                  This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n  uint32_t AutomaticOutput;  /*!< TIM Automatic Output Enable state\r\n                                  This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */\r\n} TIM_BreakDeadTimeConfigTypeDef;\r\n\r\n/**\r\n * @brief  HAL State structures definition\r\n */\r\ntypedef enum {\r\n  HAL_TIM_STATE_RESET   = 0x00U, /*!< Peripheral not yet initialized or disabled  */\r\n  HAL_TIM_STATE_READY   = 0x01U, /*!< Peripheral Initialized and ready for use    */\r\n  HAL_TIM_STATE_BUSY    = 0x02U, /*!< An internal process is ongoing              */\r\n  HAL_TIM_STATE_TIMEOUT = 0x03U, /*!< Timeout state                               */\r\n  HAL_TIM_STATE_ERROR   = 0x04U  /*!< Reception process is ongoing                */\r\n} HAL_TIM_StateTypeDef;\r\n\r\n/**\r\n * @brief  TIM Channel States definition\r\n */\r\ntypedef enum {\r\n  HAL_TIM_CHANNEL_STATE_RESET = 0x00U, /*!< TIM Channel initial state                         */\r\n  HAL_TIM_CHANNEL_STATE_READY = 0x01U, /*!< TIM Channel ready for use                         */\r\n  HAL_TIM_CHANNEL_STATE_BUSY  = 0x02U, /*!< An internal process is ongoing on the TIM channel */\r\n} HAL_TIM_ChannelStateTypeDef;\r\n\r\n/**\r\n * @brief  DMA Burst States definition\r\n */\r\ntypedef enum {\r\n  HAL_DMA_BURST_STATE_RESET = 0x00U, /*!< DMA Burst initial state */\r\n  HAL_DMA_BURST_STATE_READY = 0x01U, /*!< DMA Burst ready for use */\r\n  HAL_DMA_BURST_STATE_BUSY  = 0x02U, /*!< Ongoing DMA Burst       */\r\n} HAL_TIM_DMABurstStateTypeDef;\r\n\r\n/**\r\n * @brief  HAL Active channel structures definition\r\n */\r\ntypedef enum {\r\n  HAL_TIM_ACTIVE_CHANNEL_1       = 0x01U, /*!< The active channel is 1     */\r\n  HAL_TIM_ACTIVE_CHANNEL_2       = 0x02U, /*!< The active channel is 2     */\r\n  HAL_TIM_ACTIVE_CHANNEL_3       = 0x04U, /*!< The active channel is 3     */\r\n  HAL_TIM_ACTIVE_CHANNEL_4       = 0x08U, /*!< The active channel is 4     */\r\n  HAL_TIM_ACTIVE_CHANNEL_CLEARED = 0x00U  /*!< All active channels cleared */\r\n} HAL_TIM_ActiveChannel;\r\n\r\n/**\r\n * @brief  TIM Time Base Handle Structure definition\r\n */\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\ntypedef struct __TIM_HandleTypeDef\r\n#else\r\ntypedef struct\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n{\r\n  TIM_TypeDef *         Instance;                     /*!< Register base address                             */\r\n  TIM_Base_InitTypeDef  Init;                         /*!< TIM Time Base required parameters                 */\r\n  HAL_TIM_ActiveChannel Channel;                      /*!< Active channel                                    */\r\n  DMA_HandleTypeDef *   hdma[7];                      /*!< DMA Handlers array\r\n                                                           This array is accessed by a @ref DMA_Handle_index */\r\n  HAL_LockTypeDef                   Lock;             /*!< Locking object                                    */\r\n  __IO HAL_TIM_StateTypeDef         State;            /*!< TIM operation state                               */\r\n  __IO HAL_TIM_ChannelStateTypeDef  ChannelState[4];  /*!< TIM channel operation state                       */\r\n  __IO HAL_TIM_ChannelStateTypeDef  ChannelNState[4]; /*!< TIM complementary channel operation state         */\r\n  __IO HAL_TIM_DMABurstStateTypeDef DMABurstState;    /*!< DMA burst operation state                         */\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  void (*Base_MspInitCallback)(struct __TIM_HandleTypeDef *htim);              /*!< TIM Base Msp Init Callback                              */\r\n  void (*Base_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);            /*!< TIM Base Msp DeInit Callback                            */\r\n  void (*IC_MspInitCallback)(struct __TIM_HandleTypeDef *htim);                /*!< TIM IC Msp Init Callback                                */\r\n  void (*IC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);              /*!< TIM IC Msp DeInit Callback                              */\r\n  void (*OC_MspInitCallback)(struct __TIM_HandleTypeDef *htim);                /*!< TIM OC Msp Init Callback                                */\r\n  void (*OC_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);              /*!< TIM OC Msp DeInit Callback                              */\r\n  void (*PWM_MspInitCallback)(struct __TIM_HandleTypeDef *htim);               /*!< TIM PWM Msp Init Callback                               */\r\n  void (*PWM_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);             /*!< TIM PWM Msp DeInit Callback                             */\r\n  void (*OnePulse_MspInitCallback)(struct __TIM_HandleTypeDef *htim);          /*!< TIM One Pulse Msp Init Callback                         */\r\n  void (*OnePulse_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);        /*!< TIM One Pulse Msp DeInit Callback                       */\r\n  void (*Encoder_MspInitCallback)(struct __TIM_HandleTypeDef *htim);           /*!< TIM Encoder Msp Init Callback                           */\r\n  void (*Encoder_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);         /*!< TIM Encoder Msp DeInit Callback                         */\r\n  void (*HallSensor_MspInitCallback)(struct __TIM_HandleTypeDef *htim);        /*!< TIM Hall Sensor Msp Init Callback                       */\r\n  void (*HallSensor_MspDeInitCallback)(struct __TIM_HandleTypeDef *htim);      /*!< TIM Hall Sensor Msp DeInit Callback                     */\r\n  void (*PeriodElapsedCallback)(struct __TIM_HandleTypeDef *htim);             /*!< TIM Period Elapsed Callback                             */\r\n  void (*PeriodElapsedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);     /*!< TIM Period Elapsed half complete Callback               */\r\n  void (*TriggerCallback)(struct __TIM_HandleTypeDef *htim);                   /*!< TIM Trigger Callback                                    */\r\n  void (*TriggerHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);           /*!< TIM Trigger half complete Callback                      */\r\n  void (*IC_CaptureCallback)(struct __TIM_HandleTypeDef *htim);                /*!< TIM Input Capture Callback                              */\r\n  void (*IC_CaptureHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);        /*!< TIM Input Capture half complete Callback                */\r\n  void (*OC_DelayElapsedCallback)(struct __TIM_HandleTypeDef *htim);           /*!< TIM Output Compare Delay Elapsed Callback               */\r\n  void (*PWM_PulseFinishedCallback)(struct __TIM_HandleTypeDef *htim);         /*!< TIM PWM Pulse Finished Callback                         */\r\n  void (*PWM_PulseFinishedHalfCpltCallback)(struct __TIM_HandleTypeDef *htim); /*!< TIM PWM Pulse Finished half complete Callback           */\r\n  void (*ErrorCallback)(struct __TIM_HandleTypeDef *htim);                     /*!< TIM Error Callback                                      */\r\n  void (*CommutationCallback)(struct __TIM_HandleTypeDef *htim);               /*!< TIM Commutation Callback                                */\r\n  void (*CommutationHalfCpltCallback)(struct __TIM_HandleTypeDef *htim);       /*!< TIM Commutation half complete Callback                  */\r\n  void (*BreakCallback)(struct __TIM_HandleTypeDef *htim);                     /*!< TIM Break Callback                                      */\r\n#endif                                                                         /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n} TIM_HandleTypeDef;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n/**\r\n * @brief  HAL TIM Callback ID enumeration definition\r\n */\r\ntypedef enum {\r\n  HAL_TIM_BASE_MSPINIT_CB_ID = 0x00U /*!< TIM Base MspInit Callback ID                              */\r\n  ,\r\n  HAL_TIM_BASE_MSPDEINIT_CB_ID = 0x01U /*!< TIM Base MspDeInit Callback ID                            */\r\n  ,\r\n  HAL_TIM_IC_MSPINIT_CB_ID = 0x02U /*!< TIM IC MspInit Callback ID                                */\r\n  ,\r\n  HAL_TIM_IC_MSPDEINIT_CB_ID = 0x03U /*!< TIM IC MspDeInit Callback ID                              */\r\n  ,\r\n  HAL_TIM_OC_MSPINIT_CB_ID = 0x04U /*!< TIM OC MspInit Callback ID                                */\r\n  ,\r\n  HAL_TIM_OC_MSPDEINIT_CB_ID = 0x05U /*!< TIM OC MspDeInit Callback ID                              */\r\n  ,\r\n  HAL_TIM_PWM_MSPINIT_CB_ID = 0x06U /*!< TIM PWM MspInit Callback ID                               */\r\n  ,\r\n  HAL_TIM_PWM_MSPDEINIT_CB_ID = 0x07U /*!< TIM PWM MspDeInit Callback ID                             */\r\n  ,\r\n  HAL_TIM_ONE_PULSE_MSPINIT_CB_ID = 0x08U /*!< TIM One Pulse MspInit Callback ID                         */\r\n  ,\r\n  HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID = 0x09U /*!< TIM One Pulse MspDeInit Callback ID                       */\r\n  ,\r\n  HAL_TIM_ENCODER_MSPINIT_CB_ID = 0x0AU /*!< TIM Encoder MspInit Callback ID                           */\r\n  ,\r\n  HAL_TIM_ENCODER_MSPDEINIT_CB_ID = 0x0BU /*!< TIM Encoder MspDeInit Callback ID                         */\r\n  ,\r\n  HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID = 0x0CU /*!< TIM Hall Sensor MspDeInit Callback ID                     */\r\n  ,\r\n  HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID = 0x0DU /*!< TIM Hall Sensor MspDeInit Callback ID                     */\r\n  ,\r\n  HAL_TIM_PERIOD_ELAPSED_CB_ID = 0x0EU /*!< TIM Period Elapsed Callback ID                             */\r\n  ,\r\n  HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID = 0x0FU /*!< TIM Period Elapsed half complete Callback ID               */\r\n  ,\r\n  HAL_TIM_TRIGGER_CB_ID = 0x10U /*!< TIM Trigger Callback ID                                    */\r\n  ,\r\n  HAL_TIM_TRIGGER_HALF_CB_ID = 0x11U /*!< TIM Trigger half complete Callback ID                      */\r\n\r\n  ,\r\n  HAL_TIM_IC_CAPTURE_CB_ID = 0x12U /*!< TIM Input Capture Callback ID                              */\r\n  ,\r\n  HAL_TIM_IC_CAPTURE_HALF_CB_ID = 0x13U /*!< TIM Input Capture half complete Callback ID                */\r\n  ,\r\n  HAL_TIM_OC_DELAY_ELAPSED_CB_ID = 0x14U /*!< TIM Output Compare Delay Elapsed Callback ID               */\r\n  ,\r\n  HAL_TIM_PWM_PULSE_FINISHED_CB_ID = 0x15U /*!< TIM PWM Pulse Finished Callback ID           */\r\n  ,\r\n  HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID = 0x16U /*!< TIM PWM Pulse Finished half complete Callback ID           */\r\n  ,\r\n  HAL_TIM_ERROR_CB_ID = 0x17U /*!< TIM Error Callback ID                                      */\r\n  ,\r\n  HAL_TIM_COMMUTATION_CB_ID = 0x18U /*!< TIM Commutation Callback ID                                */\r\n  ,\r\n  HAL_TIM_COMMUTATION_HALF_CB_ID = 0x19U /*!< TIM Commutation half complete Callback ID                  */\r\n  ,\r\n  HAL_TIM_BREAK_CB_ID = 0x1AU /*!< TIM Break Callback ID                                      */\r\n} HAL_TIM_CallbackIDTypeDef;\r\n\r\n/**\r\n * @brief  HAL TIM Callback pointer definition\r\n */\r\ntypedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to the TIM callback function */\r\n\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported types -----------------------------------------------------*/\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup TIM_Exported_Constants TIM Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup TIM_ClearInput_Source TIM Clear Input Source\r\n * @{\r\n */\r\n#define TIM_CLEARINPUTSOURCE_NONE 0x00000000U /*!< OCREF_CLR is disabled */\r\n#define TIM_CLEARINPUTSOURCE_ETR  0x00000001U /*!< OCREF_CLR is connected to ETRF input */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_DMA_Base_address TIM DMA Base Address\r\n * @{\r\n */\r\n#define TIM_DMABASE_CR1   0x00000000U\r\n#define TIM_DMABASE_CR2   0x00000001U\r\n#define TIM_DMABASE_SMCR  0x00000002U\r\n#define TIM_DMABASE_DIER  0x00000003U\r\n#define TIM_DMABASE_SR    0x00000004U\r\n#define TIM_DMABASE_EGR   0x00000005U\r\n#define TIM_DMABASE_CCMR1 0x00000006U\r\n#define TIM_DMABASE_CCMR2 0x00000007U\r\n#define TIM_DMABASE_CCER  0x00000008U\r\n#define TIM_DMABASE_CNT   0x00000009U\r\n#define TIM_DMABASE_PSC   0x0000000AU\r\n#define TIM_DMABASE_ARR   0x0000000BU\r\n#define TIM_DMABASE_RCR   0x0000000CU\r\n#define TIM_DMABASE_CCR1  0x0000000DU\r\n#define TIM_DMABASE_CCR2  0x0000000EU\r\n#define TIM_DMABASE_CCR3  0x0000000FU\r\n#define TIM_DMABASE_CCR4  0x00000010U\r\n#define TIM_DMABASE_BDTR  0x00000011U\r\n#define TIM_DMABASE_DCR   0x00000012U\r\n#define TIM_DMABASE_DMAR  0x00000013U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Event_Source TIM Event Source\r\n * @{\r\n */\r\n#define TIM_EVENTSOURCE_UPDATE  TIM_EGR_UG   /*!< Reinitialize the counter and generates an update of the registers */\r\n#define TIM_EVENTSOURCE_CC1     TIM_EGR_CC1G /*!< A capture/compare event is generated on channel 1 */\r\n#define TIM_EVENTSOURCE_CC2     TIM_EGR_CC2G /*!< A capture/compare event is generated on channel 2 */\r\n#define TIM_EVENTSOURCE_CC3     TIM_EGR_CC3G /*!< A capture/compare event is generated on channel 3 */\r\n#define TIM_EVENTSOURCE_CC4     TIM_EGR_CC4G /*!< A capture/compare event is generated on channel 4 */\r\n#define TIM_EVENTSOURCE_COM     TIM_EGR_COMG /*!< A commutation event is generated */\r\n#define TIM_EVENTSOURCE_TRIGGER TIM_EGR_TG   /*!< A trigger event is generated */\r\n#define TIM_EVENTSOURCE_BREAK   TIM_EGR_BG   /*!< A break event is generated */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Input_Channel_Polarity TIM Input Channel polarity\r\n * @{\r\n */\r\n#define TIM_INPUTCHANNELPOLARITY_RISING   0x00000000U                      /*!< Polarity for TIx source */\r\n#define TIM_INPUTCHANNELPOLARITY_FALLING  TIM_CCER_CC1P                    /*!< Polarity for TIx source */\r\n#define TIM_INPUTCHANNELPOLARITY_BOTHEDGE (TIM_CCER_CC1P | TIM_CCER_CC1NP) /*!< Polarity for TIx source */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_ETR_Polarity TIM ETR Polarity\r\n * @{\r\n */\r\n#define TIM_ETRPOLARITY_INVERTED    TIM_SMCR_ETP /*!< Polarity for ETR source */\r\n#define TIM_ETRPOLARITY_NONINVERTED 0x00000000U  /*!< Polarity for ETR source */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_ETR_Prescaler TIM ETR Prescaler\r\n * @{\r\n */\r\n#define TIM_ETRPRESCALER_DIV1 0x00000000U     /*!< No prescaler is used */\r\n#define TIM_ETRPRESCALER_DIV2 TIM_SMCR_ETPS_0 /*!< ETR input source is divided by 2 */\r\n#define TIM_ETRPRESCALER_DIV4 TIM_SMCR_ETPS_1 /*!< ETR input source is divided by 4 */\r\n#define TIM_ETRPRESCALER_DIV8 TIM_SMCR_ETPS   /*!< ETR input source is divided by 8 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Counter_Mode TIM Counter Mode\r\n * @{\r\n */\r\n#define TIM_COUNTERMODE_UP             0x00000000U   /*!< Counter used as up-counter   */\r\n#define TIM_COUNTERMODE_DOWN           TIM_CR1_DIR   /*!< Counter used as down-counter */\r\n#define TIM_COUNTERMODE_CENTERALIGNED1 TIM_CR1_CMS_0 /*!< Center-aligned mode 1        */\r\n#define TIM_COUNTERMODE_CENTERALIGNED2 TIM_CR1_CMS_1 /*!< Center-aligned mode 2        */\r\n#define TIM_COUNTERMODE_CENTERALIGNED3 TIM_CR1_CMS   /*!< Center-aligned mode 3        */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_ClockDivision TIM Clock Division\r\n * @{\r\n */\r\n#define TIM_CLOCKDIVISION_DIV1 0x00000000U   /*!< Clock division: tDTS=tCK_INT   */\r\n#define TIM_CLOCKDIVISION_DIV2 TIM_CR1_CKD_0 /*!< Clock division: tDTS=2*tCK_INT */\r\n#define TIM_CLOCKDIVISION_DIV4 TIM_CR1_CKD_1 /*!< Clock division: tDTS=4*tCK_INT */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_State TIM Output Compare State\r\n * @{\r\n */\r\n#define TIM_OUTPUTSTATE_DISABLE 0x00000000U   /*!< Capture/Compare 1 output disabled */\r\n#define TIM_OUTPUTSTATE_ENABLE  TIM_CCER_CC1E /*!< Capture/Compare 1 output enabled */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_AutoReloadPreload TIM Auto-Reload Preload\r\n * @{\r\n */\r\n#define TIM_AUTORELOAD_PRELOAD_DISABLE 0x00000000U  /*!< TIMx_ARR register is not buffered */\r\n#define TIM_AUTORELOAD_PRELOAD_ENABLE  TIM_CR1_ARPE /*!< TIMx_ARR register is buffered */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Fast_State TIM Output Fast State\r\n * @{\r\n */\r\n#define TIM_OCFAST_DISABLE 0x00000000U     /*!< Output Compare fast disable */\r\n#define TIM_OCFAST_ENABLE  TIM_CCMR1_OC1FE /*!< Output Compare fast enable  */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_N_State TIM Complementary Output Compare State\r\n * @{\r\n */\r\n#define TIM_OUTPUTNSTATE_DISABLE 0x00000000U    /*!< OCxN is disabled  */\r\n#define TIM_OUTPUTNSTATE_ENABLE  TIM_CCER_CC1NE /*!< OCxN is enabled   */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_Polarity TIM Output Compare Polarity\r\n * @{\r\n */\r\n#define TIM_OCPOLARITY_HIGH 0x00000000U   /*!< Capture/Compare output polarity  */\r\n#define TIM_OCPOLARITY_LOW  TIM_CCER_CC1P /*!< Capture/Compare output polarity  */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_N_Polarity TIM Complementary Output Compare Polarity\r\n * @{\r\n */\r\n#define TIM_OCNPOLARITY_HIGH 0x00000000U    /*!< Capture/Compare complementary output polarity */\r\n#define TIM_OCNPOLARITY_LOW  TIM_CCER_CC1NP /*!< Capture/Compare complementary output polarity */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_Idle_State TIM Output Compare Idle State\r\n * @{\r\n */\r\n#define TIM_OCIDLESTATE_SET   TIM_CR2_OIS1 /*!< Output Idle state: OCx=1 when MOE=0 */\r\n#define TIM_OCIDLESTATE_RESET 0x00000000U  /*!< Output Idle state: OCx=0 when MOE=0 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_N_Idle_State TIM Complementary Output Compare Idle State\r\n * @{\r\n */\r\n#define TIM_OCNIDLESTATE_SET   TIM_CR2_OIS1N /*!< Complementary output Idle state: OCxN=1 when MOE=0 */\r\n#define TIM_OCNIDLESTATE_RESET 0x00000000U   /*!< Complementary output Idle state: OCxN=0 when MOE=0 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Input_Capture_Polarity TIM Input Capture Polarity\r\n * @{\r\n */\r\n#define TIM_ICPOLARITY_RISING   TIM_INPUTCHANNELPOLARITY_RISING   /*!< Capture triggered by rising edge on timer input                  */\r\n#define TIM_ICPOLARITY_FALLING  TIM_INPUTCHANNELPOLARITY_FALLING  /*!< Capture triggered by falling edge on timer input                 */\r\n#define TIM_ICPOLARITY_BOTHEDGE TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Capture triggered by both rising and falling edges on timer input*/\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Encoder_Input_Polarity TIM Encoder Input Polarity\r\n * @{\r\n */\r\n#define TIM_ENCODERINPUTPOLARITY_RISING  TIM_INPUTCHANNELPOLARITY_RISING  /*!< Encoder input with rising edge polarity  */\r\n#define TIM_ENCODERINPUTPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Encoder input with falling edge polarity */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection\r\n * @{\r\n */\r\n#define TIM_ICSELECTION_DIRECTTI                                 \\\r\n  TIM_CCMR1_CC1S_0 /*!< TIM Input 1, 2, 3 or 4 is selected to be \\\r\n                        connected to IC1, IC2, IC3 or IC4, respectively */\r\n#define TIM_ICSELECTION_INDIRECTTI                                                       \\\r\n  TIM_CCMR1_CC1S_1                         /*!< TIM Input 1, 2, 3 or 4 is selected to be \\\r\n                                                connected to IC2, IC1, IC4 or IC3, respectively */\r\n#define TIM_ICSELECTION_TRC TIM_CCMR1_CC1S /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Input_Capture_Prescaler TIM Input Capture Prescaler\r\n * @{\r\n */\r\n#define TIM_ICPSC_DIV1 0x00000000U        /*!< Capture performed each time an edge is detected on the capture input */\r\n#define TIM_ICPSC_DIV2 TIM_CCMR1_IC1PSC_0 /*!< Capture performed once every 2 events                                */\r\n#define TIM_ICPSC_DIV4 TIM_CCMR1_IC1PSC_1 /*!< Capture performed once every 4 events                                */\r\n#define TIM_ICPSC_DIV8 TIM_CCMR1_IC1PSC   /*!< Capture performed once every 8 events                                */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_One_Pulse_Mode TIM One Pulse Mode\r\n * @{\r\n */\r\n#define TIM_OPMODE_SINGLE     TIM_CR1_OPM /*!< Counter stops counting at the next update event */\r\n#define TIM_OPMODE_REPETITIVE 0x00000000U /*!< Counter is not stopped at update event          */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Encoder_Mode TIM Encoder Mode\r\n * @{\r\n */\r\n#define TIM_ENCODERMODE_TI1  TIM_SMCR_SMS_0                    /*!< Quadrature encoder mode 1, x2 mode, counts up/down on TI1FP1 edge depending on TI2FP2 level  */\r\n#define TIM_ENCODERMODE_TI2  TIM_SMCR_SMS_1                    /*!< Quadrature encoder mode 2, x2 mode, counts up/down on TI2FP2 edge depending on TI1FP1 level. */\r\n#define TIM_ENCODERMODE_TI12 (TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< Quadrature encoder mode 3, x4 mode, counts up/down on both TI1FP1 and TI2FP2 edges depending on the level of the other input. */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Interrupt_definition TIM interrupt Definition\r\n * @{\r\n */\r\n#define TIM_IT_UPDATE  TIM_DIER_UIE   /*!< Update interrupt            */\r\n#define TIM_IT_CC1     TIM_DIER_CC1IE /*!< Capture/Compare 1 interrupt */\r\n#define TIM_IT_CC2     TIM_DIER_CC2IE /*!< Capture/Compare 2 interrupt */\r\n#define TIM_IT_CC3     TIM_DIER_CC3IE /*!< Capture/Compare 3 interrupt */\r\n#define TIM_IT_CC4     TIM_DIER_CC4IE /*!< Capture/Compare 4 interrupt */\r\n#define TIM_IT_COM     TIM_DIER_COMIE /*!< Commutation interrupt       */\r\n#define TIM_IT_TRIGGER TIM_DIER_TIE   /*!< Trigger interrupt           */\r\n#define TIM_IT_BREAK   TIM_DIER_BIE   /*!< Break interrupt             */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Commutation_Source  TIM Commutation Source\r\n * @{\r\n */\r\n#define TIM_COMMUTATION_TRGI     TIM_CR2_CCUS /*!< When Capture/compare control bits are preloaded, they are updated by setting the COMG bit or when an rising edge occurs on trigger input */\r\n#define TIM_COMMUTATION_SOFTWARE 0x00000000U  /*!< When Capture/compare control bits are preloaded, they are updated by setting the COMG bit */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_DMA_sources TIM DMA Sources\r\n * @{\r\n */\r\n#define TIM_DMA_UPDATE  TIM_DIER_UDE   /*!< DMA request is triggered by the update event */\r\n#define TIM_DMA_CC1     TIM_DIER_CC1DE /*!< DMA request is triggered by the capture/compare macth 1 event */\r\n#define TIM_DMA_CC2     TIM_DIER_CC2DE /*!< DMA request is triggered by the capture/compare macth 2 event event */\r\n#define TIM_DMA_CC3     TIM_DIER_CC3DE /*!< DMA request is triggered by the capture/compare macth 3 event event */\r\n#define TIM_DMA_CC4     TIM_DIER_CC4DE /*!< DMA request is triggered by the capture/compare macth 4 event event */\r\n#define TIM_DMA_COM     TIM_DIER_COMDE /*!< DMA request is triggered by the commutation event */\r\n#define TIM_DMA_TRIGGER TIM_DIER_TDE   /*!< DMA request is triggered by the trigger event */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Flag_definition TIM Flag Definition\r\n * @{\r\n */\r\n#define TIM_FLAG_UPDATE  TIM_SR_UIF   /*!< Update interrupt flag         */\r\n#define TIM_FLAG_CC1     TIM_SR_CC1IF /*!< Capture/Compare 1 interrupt flag */\r\n#define TIM_FLAG_CC2     TIM_SR_CC2IF /*!< Capture/Compare 2 interrupt flag */\r\n#define TIM_FLAG_CC3     TIM_SR_CC3IF /*!< Capture/Compare 3 interrupt flag */\r\n#define TIM_FLAG_CC4     TIM_SR_CC4IF /*!< Capture/Compare 4 interrupt flag */\r\n#define TIM_FLAG_COM     TIM_SR_COMIF /*!< Commutation interrupt flag    */\r\n#define TIM_FLAG_TRIGGER TIM_SR_TIF   /*!< Trigger interrupt flag        */\r\n#define TIM_FLAG_BREAK   TIM_SR_BIF   /*!< Break interrupt flag          */\r\n#define TIM_FLAG_CC1OF   TIM_SR_CC1OF /*!< Capture 1 overcapture flag    */\r\n#define TIM_FLAG_CC2OF   TIM_SR_CC2OF /*!< Capture 2 overcapture flag    */\r\n#define TIM_FLAG_CC3OF   TIM_SR_CC3OF /*!< Capture 3 overcapture flag    */\r\n#define TIM_FLAG_CC4OF   TIM_SR_CC4OF /*!< Capture 4 overcapture flag    */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Channel TIM Channel\r\n * @{\r\n */\r\n#define TIM_CHANNEL_1   0x00000000U /*!< Capture/compare channel 1 identifier      */\r\n#define TIM_CHANNEL_2   0x00000004U /*!< Capture/compare channel 2 identifier      */\r\n#define TIM_CHANNEL_3   0x00000008U /*!< Capture/compare channel 3 identifier      */\r\n#define TIM_CHANNEL_4   0x0000000CU /*!< Capture/compare channel 4 identifier      */\r\n#define TIM_CHANNEL_ALL 0x0000003CU /*!< Global Capture/compare channel identifier  */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Clock_Source TIM Clock Source\r\n * @{\r\n */\r\n#define TIM_CLOCKSOURCE_ETRMODE2 TIM_SMCR_ETPS_1 /*!< External clock source mode 2                          */\r\n#define TIM_CLOCKSOURCE_INTERNAL TIM_SMCR_ETPS_0 /*!< Internal clock source                                 */\r\n#define TIM_CLOCKSOURCE_ITR0     TIM_TS_ITR0     /*!< External clock source mode 1 (ITR0)                   */\r\n#define TIM_CLOCKSOURCE_ITR1     TIM_TS_ITR1     /*!< External clock source mode 1 (ITR1)                   */\r\n#define TIM_CLOCKSOURCE_ITR2     TIM_TS_ITR2     /*!< External clock source mode 1 (ITR2)                   */\r\n#define TIM_CLOCKSOURCE_ITR3     TIM_TS_ITR3     /*!< External clock source mode 1 (ITR3)                   */\r\n#define TIM_CLOCKSOURCE_TI1ED    TIM_TS_TI1F_ED  /*!< External clock source mode 1 (TTI1FP1 + edge detect.) */\r\n#define TIM_CLOCKSOURCE_TI1      TIM_TS_TI1FP1   /*!< External clock source mode 1 (TTI1FP1)                */\r\n#define TIM_CLOCKSOURCE_TI2      TIM_TS_TI2FP2   /*!< External clock source mode 1 (TTI2FP2)                */\r\n#define TIM_CLOCKSOURCE_ETRMODE1 TIM_TS_ETRF     /*!< External clock source mode 1 (ETRF)                   */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Clock_Polarity TIM Clock Polarity\r\n * @{\r\n */\r\n#define TIM_CLOCKPOLARITY_INVERTED    TIM_ETRPOLARITY_INVERTED          /*!< Polarity for ETRx clock sources */\r\n#define TIM_CLOCKPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED       /*!< Polarity for ETRx clock sources */\r\n#define TIM_CLOCKPOLARITY_RISING      TIM_INPUTCHANNELPOLARITY_RISING   /*!< Polarity for TIx clock sources */\r\n#define TIM_CLOCKPOLARITY_FALLING     TIM_INPUTCHANNELPOLARITY_FALLING  /*!< Polarity for TIx clock sources */\r\n#define TIM_CLOCKPOLARITY_BOTHEDGE    TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Polarity for TIx clock sources */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Clock_Prescaler TIM Clock Prescaler\r\n * @{\r\n */\r\n#define TIM_CLOCKPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used                                                     */\r\n#define TIM_CLOCKPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR Clock: Capture performed once every 2 events. */\r\n#define TIM_CLOCKPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR Clock: Capture performed once every 4 events. */\r\n#define TIM_CLOCKPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR Clock: Capture performed once every 8 events. */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_ClearInput_Polarity TIM Clear Input Polarity\r\n * @{\r\n */\r\n#define TIM_CLEARINPUTPOLARITY_INVERTED    TIM_ETRPOLARITY_INVERTED    /*!< Polarity for ETRx pin */\r\n#define TIM_CLEARINPUTPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED /*!< Polarity for ETRx pin */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_ClearInput_Prescaler TIM Clear Input Prescaler\r\n * @{\r\n */\r\n#define TIM_CLEARINPUTPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used                                                   */\r\n#define TIM_CLEARINPUTPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR pin: Capture performed once every 2 events. */\r\n#define TIM_CLEARINPUTPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR pin: Capture performed once every 4 events. */\r\n#define TIM_CLEARINPUTPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR pin: Capture performed once every 8 events. */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_OSSR_Off_State_Selection_for_Run_mode_state TIM OSSR OffState Selection for Run mode state\r\n * @{\r\n */\r\n#define TIM_OSSR_ENABLE  TIM_BDTR_OSSR /*!< When inactive, OC/OCN outputs are enabled (still controlled by the timer)           */\r\n#define TIM_OSSR_DISABLE 0x00000000U   /*!< When inactive, OC/OCN outputs are disabled (not controlled any longer by the timer) */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_OSSI_Off_State_Selection_for_Idle_mode_state TIM OSSI OffState Selection for Idle mode state\r\n * @{\r\n */\r\n#define TIM_OSSI_ENABLE  TIM_BDTR_OSSI /*!< When inactive, OC/OCN outputs are enabled (still controlled by the timer)           */\r\n#define TIM_OSSI_DISABLE 0x00000000U   /*!< When inactive, OC/OCN outputs are disabled (not controlled any longer by the timer) */\r\n/**\r\n * @}\r\n */\r\n/** @defgroup TIM_Lock_level  TIM Lock level\r\n * @{\r\n */\r\n#define TIM_LOCKLEVEL_OFF 0x00000000U     /*!< LOCK OFF     */\r\n#define TIM_LOCKLEVEL_1   TIM_BDTR_LOCK_0 /*!< LOCK Level 1 */\r\n#define TIM_LOCKLEVEL_2   TIM_BDTR_LOCK_1 /*!< LOCK Level 2 */\r\n#define TIM_LOCKLEVEL_3   TIM_BDTR_LOCK   /*!< LOCK Level 3 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Break_Input_enable_disable TIM Break Input Enable\r\n * @{\r\n */\r\n#define TIM_BREAK_ENABLE  TIM_BDTR_BKE /*!< Break input BRK is enabled  */\r\n#define TIM_BREAK_DISABLE 0x00000000U  /*!< Break input BRK is disabled */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Break_Polarity TIM Break Input Polarity\r\n * @{\r\n */\r\n#define TIM_BREAKPOLARITY_LOW  0x00000000U  /*!< Break input BRK is active low  */\r\n#define TIM_BREAKPOLARITY_HIGH TIM_BDTR_BKP /*!< Break input BRK is active high */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_AOE_Bit_Set_Reset TIM Automatic Output Enable\r\n * @{\r\n */\r\n#define TIM_AUTOMATICOUTPUT_DISABLE 0x00000000U /*!< MOE can be set only by software */\r\n#define TIM_AUTOMATICOUTPUT_ENABLE                                                       \\\r\n  TIM_BDTR_AOE /*!< MOE can be set by software or automatically at the next update event \\\r\n                   (if none of the break inputs BRK and BRK2 is active) */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Master_Mode_Selection TIM Master Mode Selection\r\n * @{\r\n */\r\n#define TIM_TRGO_RESET  0x00000000U                                     /*!< TIMx_EGR.UG bit is used as trigger output (TRGO)              */\r\n#define TIM_TRGO_ENABLE TIM_CR2_MMS_0                                   /*!< TIMx_CR1.CEN bit is used as trigger output (TRGO)             */\r\n#define TIM_TRGO_UPDATE TIM_CR2_MMS_1                                   /*!< Update event is used as trigger output (TRGO)                 */\r\n#define TIM_TRGO_OC1    (TIM_CR2_MMS_1 | TIM_CR2_MMS_0)                 /*!< Capture or a compare match 1 is used as trigger output (TRGO) */\r\n#define TIM_TRGO_OC1REF TIM_CR2_MMS_2                                   /*!< OC1REF signal is used as trigger output (TRGO)                */\r\n#define TIM_TRGO_OC2REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_0)                 /*!< OC2REF signal is used as trigger output(TRGO)                 */\r\n#define TIM_TRGO_OC3REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_1)                 /*!< OC3REF signal is used as trigger output(TRGO)                 */\r\n#define TIM_TRGO_OC4REF (TIM_CR2_MMS_2 | TIM_CR2_MMS_1 | TIM_CR2_MMS_0) /*!< OC4REF signal is used as trigger output(TRGO)                 */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Master_Slave_Mode TIM Master/Slave Mode\r\n * @{\r\n */\r\n#define TIM_MASTERSLAVEMODE_ENABLE  TIM_SMCR_MSM /*!< No action */\r\n#define TIM_MASTERSLAVEMODE_DISABLE 0x00000000U  /*!< Master/slave mode is selected */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Slave_Mode TIM Slave mode\r\n * @{\r\n */\r\n#define TIM_SLAVEMODE_DISABLE   0x00000000U                                        /*!< Slave mode disabled           */\r\n#define TIM_SLAVEMODE_RESET     TIM_SMCR_SMS_2                                     /*!< Reset Mode                    */\r\n#define TIM_SLAVEMODE_GATED     (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_0)                  /*!< Gated Mode                    */\r\n#define TIM_SLAVEMODE_TRIGGER   (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1)                  /*!< Trigger Mode                  */\r\n#define TIM_SLAVEMODE_EXTERNAL1 (TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0) /*!< External Clock Mode 1         */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Output_Compare_and_PWM_modes TIM Output Compare and PWM Modes\r\n * @{\r\n */\r\n#define TIM_OCMODE_TIMING          0x00000000U                                              /*!< Frozen                                 */\r\n#define TIM_OCMODE_ACTIVE          TIM_CCMR1_OC1M_0                                         /*!< Set channel to active level on match   */\r\n#define TIM_OCMODE_INACTIVE        TIM_CCMR1_OC1M_1                                         /*!< Set channel to inactive level on match */\r\n#define TIM_OCMODE_TOGGLE          (TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0)                    /*!< Toggle                                 */\r\n#define TIM_OCMODE_PWM1            (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1)                    /*!< PWM mode 1                             */\r\n#define TIM_OCMODE_PWM2            (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_0) /*!< PWM mode 2                             */\r\n#define TIM_OCMODE_FORCED_ACTIVE   (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_0)                    /*!< Force active level                     */\r\n#define TIM_OCMODE_FORCED_INACTIVE TIM_CCMR1_OC1M_2                                         /*!< Force inactive level                   */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Trigger_Selection TIM Trigger Selection\r\n * @{\r\n */\r\n#define TIM_TS_ITR0    0x00000000U                                     /*!< Internal Trigger 0 (ITR0)              */\r\n#define TIM_TS_ITR1    TIM_SMCR_TS_0                                   /*!< Internal Trigger 1 (ITR1)              */\r\n#define TIM_TS_ITR2    TIM_SMCR_TS_1                                   /*!< Internal Trigger 2 (ITR2)              */\r\n#define TIM_TS_ITR3    (TIM_SMCR_TS_0 | TIM_SMCR_TS_1)                 /*!< Internal Trigger 3 (ITR3)              */\r\n#define TIM_TS_TI1F_ED TIM_SMCR_TS_2                                   /*!< TI1 Edge Detector (TI1F_ED)            */\r\n#define TIM_TS_TI1FP1  (TIM_SMCR_TS_0 | TIM_SMCR_TS_2)                 /*!< Filtered Timer Input 1 (TI1FP1)        */\r\n#define TIM_TS_TI2FP2  (TIM_SMCR_TS_1 | TIM_SMCR_TS_2)                 /*!< Filtered Timer Input 2 (TI2FP2)        */\r\n#define TIM_TS_ETRF    (TIM_SMCR_TS_0 | TIM_SMCR_TS_1 | TIM_SMCR_TS_2) /*!< Filtered External Trigger input (ETRF) */\r\n#define TIM_TS_NONE    0x0000FFFFU                                     /*!< No trigger selected                    */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Trigger_Polarity TIM Trigger Polarity\r\n * @{\r\n */\r\n#define TIM_TRIGGERPOLARITY_INVERTED    TIM_ETRPOLARITY_INVERTED          /*!< Polarity for ETRx trigger sources             */\r\n#define TIM_TRIGGERPOLARITY_NONINVERTED TIM_ETRPOLARITY_NONINVERTED       /*!< Polarity for ETRx trigger sources             */\r\n#define TIM_TRIGGERPOLARITY_RISING      TIM_INPUTCHANNELPOLARITY_RISING   /*!< Polarity for TIxFPx or TI1_ED trigger sources */\r\n#define TIM_TRIGGERPOLARITY_FALLING     TIM_INPUTCHANNELPOLARITY_FALLING  /*!< Polarity for TIxFPx or TI1_ED trigger sources */\r\n#define TIM_TRIGGERPOLARITY_BOTHEDGE    TIM_INPUTCHANNELPOLARITY_BOTHEDGE /*!< Polarity for TIxFPx or TI1_ED trigger sources */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Trigger_Prescaler TIM Trigger Prescaler\r\n * @{\r\n */\r\n#define TIM_TRIGGERPRESCALER_DIV1 TIM_ETRPRESCALER_DIV1 /*!< No prescaler is used                                                       */\r\n#define TIM_TRIGGERPRESCALER_DIV2 TIM_ETRPRESCALER_DIV2 /*!< Prescaler for External ETR Trigger: Capture performed once every 2 events. */\r\n#define TIM_TRIGGERPRESCALER_DIV4 TIM_ETRPRESCALER_DIV4 /*!< Prescaler for External ETR Trigger: Capture performed once every 4 events. */\r\n#define TIM_TRIGGERPRESCALER_DIV8 TIM_ETRPRESCALER_DIV8 /*!< Prescaler for External ETR Trigger: Capture performed once every 8 events. */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_TI1_Selection TIM TI1 Input Selection\r\n * @{\r\n */\r\n#define TIM_TI1SELECTION_CH1            0x00000000U  /*!< The TIMx_CH1 pin is connected to TI1 input */\r\n#define TIM_TI1SELECTION_XORCOMBINATION TIM_CR2_TI1S /*!< The TIMx_CH1, CH2 and CH3 pins are connected to the TI1 input (XOR combination) */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_DMA_Burst_Length TIM DMA Burst Length\r\n * @{\r\n */\r\n#define TIM_DMABURSTLENGTH_1TRANSFER   0x00000000U /*!< The transfer is done to 1 register starting trom TIMx_CR1 + TIMx_DCR.DBA   */\r\n#define TIM_DMABURSTLENGTH_2TRANSFERS  0x00000100U /*!< The transfer is done to 2 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_3TRANSFERS  0x00000200U /*!< The transfer is done to 3 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_4TRANSFERS  0x00000300U /*!< The transfer is done to 4 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_5TRANSFERS  0x00000400U /*!< The transfer is done to 5 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_6TRANSFERS  0x00000500U /*!< The transfer is done to 6 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_7TRANSFERS  0x00000600U /*!< The transfer is done to 7 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_8TRANSFERS  0x00000700U /*!< The transfer is done to 8 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_9TRANSFERS  0x00000800U /*!< The transfer is done to 9 registers starting trom TIMx_CR1 + TIMx_DCR.DBA  */\r\n#define TIM_DMABURSTLENGTH_10TRANSFERS 0x00000900U /*!< The transfer is done to 10 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_11TRANSFERS 0x00000A00U /*!< The transfer is done to 11 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_12TRANSFERS 0x00000B00U /*!< The transfer is done to 12 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_13TRANSFERS 0x00000C00U /*!< The transfer is done to 13 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_14TRANSFERS 0x00000D00U /*!< The transfer is done to 14 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_15TRANSFERS 0x00000E00U /*!< The transfer is done to 15 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_16TRANSFERS 0x00000F00U /*!< The transfer is done to 16 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_17TRANSFERS 0x00001000U /*!< The transfer is done to 17 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n#define TIM_DMABURSTLENGTH_18TRANSFERS 0x00001100U /*!< The transfer is done to 18 registers starting trom TIMx_CR1 + TIMx_DCR.DBA */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Handle_index TIM DMA Handle Index\r\n * @{\r\n */\r\n#define TIM_DMA_ID_UPDATE      ((uint16_t)0x0000) /*!< Index of the DMA handle used for Update DMA requests */\r\n#define TIM_DMA_ID_CC1         ((uint16_t)0x0001) /*!< Index of the DMA handle used for Capture/Compare 1 DMA requests */\r\n#define TIM_DMA_ID_CC2         ((uint16_t)0x0002) /*!< Index of the DMA handle used for Capture/Compare 2 DMA requests */\r\n#define TIM_DMA_ID_CC3         ((uint16_t)0x0003) /*!< Index of the DMA handle used for Capture/Compare 3 DMA requests */\r\n#define TIM_DMA_ID_CC4         ((uint16_t)0x0004) /*!< Index of the DMA handle used for Capture/Compare 4 DMA requests */\r\n#define TIM_DMA_ID_COMMUTATION ((uint16_t)0x0005) /*!< Index of the DMA handle used for Commutation DMA requests */\r\n#define TIM_DMA_ID_TRIGGER     ((uint16_t)0x0006) /*!< Index of the DMA handle used for Trigger DMA requests */\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup Channel_CC_State TIM Capture/Compare Channel State\r\n * @{\r\n */\r\n#define TIM_CCx_ENABLE   0x00000001U /*!< Input or output channel is enabled */\r\n#define TIM_CCx_DISABLE  0x00000000U /*!< Input or output channel is disabled */\r\n#define TIM_CCxN_ENABLE  0x00000004U /*!< Complementary output channel is enabled */\r\n#define TIM_CCxN_DISABLE 0x00000000U /*!< Complementary output channel is enabled */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported constants -------------------------------------------------*/\r\n\r\n/* Exported macros -----------------------------------------------------------*/\r\n/** @defgroup TIM_Exported_Macros TIM Exported Macros\r\n * @{\r\n */\r\n\r\n/** @brief  Reset TIM handle state.\r\n * @param  __HANDLE__ TIM handle.\r\n * @retval None\r\n */\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__)                              \\\r\n  do {                                                                        \\\r\n    (__HANDLE__)->State                        = HAL_TIM_STATE_RESET;         \\\r\n    (__HANDLE__)->ChannelState[0]              = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[1]              = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[2]              = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[3]              = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[0]             = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[1]             = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[2]             = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[3]             = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->DMABurstState                = HAL_DMA_BURST_STATE_RESET;   \\\r\n    (__HANDLE__)->Base_MspInitCallback         = NULL;                        \\\r\n    (__HANDLE__)->Base_MspDeInitCallback       = NULL;                        \\\r\n    (__HANDLE__)->IC_MspInitCallback           = NULL;                        \\\r\n    (__HANDLE__)->IC_MspDeInitCallback         = NULL;                        \\\r\n    (__HANDLE__)->OC_MspInitCallback           = NULL;                        \\\r\n    (__HANDLE__)->OC_MspDeInitCallback         = NULL;                        \\\r\n    (__HANDLE__)->PWM_MspInitCallback          = NULL;                        \\\r\n    (__HANDLE__)->PWM_MspDeInitCallback        = NULL;                        \\\r\n    (__HANDLE__)->OnePulse_MspInitCallback     = NULL;                        \\\r\n    (__HANDLE__)->OnePulse_MspDeInitCallback   = NULL;                        \\\r\n    (__HANDLE__)->Encoder_MspInitCallback      = NULL;                        \\\r\n    (__HANDLE__)->Encoder_MspDeInitCallback    = NULL;                        \\\r\n    (__HANDLE__)->HallSensor_MspInitCallback   = NULL;                        \\\r\n    (__HANDLE__)->HallSensor_MspDeInitCallback = NULL;                        \\\r\n  } while (0)\r\n#else\r\n#define __HAL_TIM_RESET_HANDLE_STATE(__HANDLE__)                  \\\r\n  do {                                                            \\\r\n    (__HANDLE__)->State            = HAL_TIM_STATE_RESET;         \\\r\n    (__HANDLE__)->ChannelState[0]  = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[1]  = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[2]  = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelState[3]  = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[0] = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[1] = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[2] = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->ChannelNState[3] = HAL_TIM_CHANNEL_STATE_RESET; \\\r\n    (__HANDLE__)->DMABurstState    = HAL_DMA_BURST_STATE_RESET;   \\\r\n  } while (0)\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @brief  Enable the TIM peripheral.\r\n * @param  __HANDLE__ TIM handle\r\n * @retval None\r\n */\r\n#define __HAL_TIM_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= (TIM_CR1_CEN))\r\n\r\n/**\r\n * @brief  Enable the TIM main Output.\r\n * @param  __HANDLE__ TIM handle\r\n * @retval None\r\n */\r\n#define __HAL_TIM_MOE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->BDTR |= (TIM_BDTR_MOE))\r\n\r\n/**\r\n * @brief  Disable the TIM peripheral.\r\n * @param  __HANDLE__ TIM handle\r\n * @retval None\r\n */\r\n#define __HAL_TIM_DISABLE(__HANDLE__)                                    \\\r\n  do {                                                                   \\\r\n    if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) {    \\\r\n      if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) { \\\r\n        (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN);                   \\\r\n      }                                                                  \\\r\n    }                                                                    \\\r\n  } while (0)\r\n\r\n/**\r\n * @brief  Disable the TIM main Output.\r\n * @param  __HANDLE__ TIM handle\r\n * @retval None\r\n * @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been disabled\r\n */\r\n#define __HAL_TIM_MOE_DISABLE(__HANDLE__)                                \\\r\n  do {                                                                   \\\r\n    if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) {    \\\r\n      if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) { \\\r\n        (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE);                 \\\r\n      }                                                                  \\\r\n    }                                                                    \\\r\n  } while (0)\r\n\r\n/**\r\n * @brief  Disable the TIM main Output.\r\n * @param  __HANDLE__ TIM handle\r\n * @retval None\r\n * @note The Main Output Enable of a timer instance is disabled unconditionally\r\n */\r\n#define __HAL_TIM_MOE_DISABLE_UNCONDITIONALLY(__HANDLE__) (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE)\r\n\r\n/** @brief  Enable the specified TIM interrupt.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __INTERRUPT__ specifies the TIM interrupt source to enable.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_IT_UPDATE: Update interrupt\r\n *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt\r\n *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt\r\n *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt\r\n *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt\r\n *            @arg TIM_IT_COM:   Commutation interrupt\r\n *            @arg TIM_IT_TRIGGER: Trigger interrupt\r\n *            @arg TIM_IT_BREAK: Break interrupt\r\n * @retval None\r\n */\r\n#define __HAL_TIM_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER |= (__INTERRUPT__))\r\n\r\n/** @brief  Disable the specified TIM interrupt.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __INTERRUPT__ specifies the TIM interrupt source to disable.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_IT_UPDATE: Update interrupt\r\n *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt\r\n *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt\r\n *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt\r\n *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt\r\n *            @arg TIM_IT_COM:   Commutation interrupt\r\n *            @arg TIM_IT_TRIGGER: Trigger interrupt\r\n *            @arg TIM_IT_BREAK: Break interrupt\r\n * @retval None\r\n */\r\n#define __HAL_TIM_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER &= ~(__INTERRUPT__))\r\n\r\n/** @brief  Enable the specified DMA request.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __DMA__ specifies the TIM DMA request to enable.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: Update DMA request\r\n *            @arg TIM_DMA_CC1:   Capture/Compare 1 DMA request\r\n *            @arg TIM_DMA_CC2:  Capture/Compare 2 DMA request\r\n *            @arg TIM_DMA_CC3:  Capture/Compare 3 DMA request\r\n *            @arg TIM_DMA_CC4:  Capture/Compare 4 DMA request\r\n *            @arg TIM_DMA_COM:   Commutation DMA request\r\n *            @arg TIM_DMA_TRIGGER: Trigger DMA request\r\n * @retval None\r\n */\r\n#define __HAL_TIM_ENABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER |= (__DMA__))\r\n\r\n/** @brief  Disable the specified DMA request.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __DMA__ specifies the TIM DMA request to disable.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: Update DMA request\r\n *            @arg TIM_DMA_CC1:   Capture/Compare 1 DMA request\r\n *            @arg TIM_DMA_CC2:  Capture/Compare 2 DMA request\r\n *            @arg TIM_DMA_CC3:  Capture/Compare 3 DMA request\r\n *            @arg TIM_DMA_CC4:  Capture/Compare 4 DMA request\r\n *            @arg TIM_DMA_COM:   Commutation DMA request\r\n *            @arg TIM_DMA_TRIGGER: Trigger DMA request\r\n * @retval None\r\n */\r\n#define __HAL_TIM_DISABLE_DMA(__HANDLE__, __DMA__) ((__HANDLE__)->Instance->DIER &= ~(__DMA__))\r\n\r\n/** @brief  Check whether the specified TIM interrupt flag is set or not.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __FLAG__ specifies the TIM interrupt flag to check.\r\n *        This parameter can be one of the following values:\r\n *            @arg TIM_FLAG_UPDATE: Update interrupt flag\r\n *            @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag\r\n *            @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag\r\n *            @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag\r\n *            @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag\r\n *            @arg TIM_FLAG_COM:  Commutation interrupt flag\r\n *            @arg TIM_FLAG_TRIGGER: Trigger interrupt flag\r\n *            @arg TIM_FLAG_BREAK: Break interrupt flag\r\n *            @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag\r\n *            @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag\r\n *            @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag\r\n *            @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag\r\n * @retval The new state of __FLAG__ (TRUE or FALSE).\r\n */\r\n#define __HAL_TIM_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))\r\n\r\n/** @brief  Clear the specified TIM interrupt flag.\r\n * @param  __HANDLE__ specifies the TIM Handle.\r\n * @param  __FLAG__ specifies the TIM interrupt flag to clear.\r\n *        This parameter can be one of the following values:\r\n *            @arg TIM_FLAG_UPDATE: Update interrupt flag\r\n *            @arg TIM_FLAG_CC1: Capture/Compare 1 interrupt flag\r\n *            @arg TIM_FLAG_CC2: Capture/Compare 2 interrupt flag\r\n *            @arg TIM_FLAG_CC3: Capture/Compare 3 interrupt flag\r\n *            @arg TIM_FLAG_CC4: Capture/Compare 4 interrupt flag\r\n *            @arg TIM_FLAG_COM:  Commutation interrupt flag\r\n *            @arg TIM_FLAG_TRIGGER: Trigger interrupt flag\r\n *            @arg TIM_FLAG_BREAK: Break interrupt flag\r\n *            @arg TIM_FLAG_CC1OF: Capture/Compare 1 overcapture flag\r\n *            @arg TIM_FLAG_CC2OF: Capture/Compare 2 overcapture flag\r\n *            @arg TIM_FLAG_CC3OF: Capture/Compare 3 overcapture flag\r\n *            @arg TIM_FLAG_CC4OF: Capture/Compare 4 overcapture flag\r\n * @retval The new state of __FLAG__ (TRUE or FALSE).\r\n */\r\n#define __HAL_TIM_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__))\r\n\r\n/**\r\n * @brief  Check whether the specified TIM interrupt source is enabled or not.\r\n * @param  __HANDLE__ TIM handle\r\n * @param  __INTERRUPT__ specifies the TIM interrupt source to check.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_IT_UPDATE: Update interrupt\r\n *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt\r\n *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt\r\n *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt\r\n *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt\r\n *            @arg TIM_IT_COM:   Commutation interrupt\r\n *            @arg TIM_IT_TRIGGER: Trigger interrupt\r\n *            @arg TIM_IT_BREAK: Break interrupt\r\n * @retval The state of TIM_IT (SET or RESET).\r\n */\r\n#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)\r\n\r\n/** @brief Clear the TIM interrupt pending bits.\r\n * @param  __HANDLE__ TIM handle\r\n * @param  __INTERRUPT__ specifies the interrupt pending bit to clear.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_IT_UPDATE: Update interrupt\r\n *            @arg TIM_IT_CC1:   Capture/Compare 1 interrupt\r\n *            @arg TIM_IT_CC2:  Capture/Compare 2 interrupt\r\n *            @arg TIM_IT_CC3:  Capture/Compare 3 interrupt\r\n *            @arg TIM_IT_CC4:  Capture/Compare 4 interrupt\r\n *            @arg TIM_IT_COM:   Commutation interrupt\r\n *            @arg TIM_IT_TRIGGER: Trigger interrupt\r\n *            @arg TIM_IT_BREAK: Break interrupt\r\n * @retval None\r\n */\r\n#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__))\r\n\r\n/**\r\n  * @brief  Indicates whether or not the TIM Counter is used as downcounter.\r\n  * @param  __HANDLE__ TIM handle.\r\n  * @retval False (Counter used as upcounter) or True (Counter used as downcounter)\r\n  * @note This macro is particularly useful to get the counting mode when the timer operates in Center-aligned mode or Encoder\r\nmode.\r\n  */\r\n#define __HAL_TIM_IS_TIM_COUNTING_DOWN(__HANDLE__) (((__HANDLE__)->Instance->CR1 & (TIM_CR1_DIR)) == (TIM_CR1_DIR))\r\n\r\n/**\r\n * @brief  Set the TIM Prescaler on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __PRESC__ specifies the Prescaler new value.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_PRESCALER(__HANDLE__, __PRESC__) ((__HANDLE__)->Instance->PSC = (__PRESC__))\r\n\r\n/**\r\n * @brief  Set the TIM Counter Register value on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __COUNTER__ specifies the Counter register new value.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__) ((__HANDLE__)->Instance->CNT = (__COUNTER__))\r\n\r\n/**\r\n * @brief  Get the TIM Counter Register value on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT)\r\n */\r\n#define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT)\r\n\r\n/**\r\n * @brief  Set the TIM Autoreload Register value on runtime without calling another time any Init function.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __AUTORELOAD__ specifies the Counter register new value.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \\\r\n  do {                                                       \\\r\n    (__HANDLE__)->Instance->ARR = (__AUTORELOAD__);          \\\r\n    (__HANDLE__)->Init.Period   = (__AUTORELOAD__);          \\\r\n  } while (0)\r\n\r\n/**\r\n * @brief  Get the TIM Autoreload Register value on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR)\r\n */\r\n#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) ((__HANDLE__)->Instance->ARR)\r\n\r\n/**\r\n * @brief  Set the TIM Clock Division value on runtime without calling another time any Init function.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CKD__ specifies the clock division value.\r\n *          This parameter can be one of the following value:\r\n *            @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT\r\n *            @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT\r\n *            @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \\\r\n  do {                                                   \\\r\n    (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD);       \\\r\n    (__HANDLE__)->Instance->CR1 |= (__CKD__);            \\\r\n    (__HANDLE__)->Init.ClockDivision = (__CKD__);        \\\r\n  } while (0)\r\n\r\n/**\r\n * @brief  Get the TIM Clock Division value on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @retval The clock division can be one of the following values:\r\n *            @arg TIM_CLOCKDIVISION_DIV1: tDTS=tCK_INT\r\n *            @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT\r\n *            @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT\r\n */\r\n#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)\r\n\r\n/**\r\n * @brief  Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() function.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  __ICPSC__ specifies the Input Capture4 prescaler new value.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPSC_DIV1: no prescaler\r\n *            @arg TIM_ICPSC_DIV2: capture is done once every 2 events\r\n *            @arg TIM_ICPSC_DIV4: capture is done once every 4 events\r\n *            @arg TIM_ICPSC_DIV8: capture is done once every 8 events\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__)   \\\r\n  do {                                                                  \\\r\n    TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__));            \\\r\n    TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \\\r\n  } while (0)\r\n\r\n/**\r\n * @brief  Get the TIM Input Capture prescaler on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: get input capture 1 prescaler value\r\n *            @arg TIM_CHANNEL_2: get input capture 2 prescaler value\r\n *            @arg TIM_CHANNEL_3: get input capture 3 prescaler value\r\n *            @arg TIM_CHANNEL_4: get input capture 4 prescaler value\r\n * @retval The input capture prescaler can be one of the following values:\r\n *            @arg TIM_ICPSC_DIV1: no prescaler\r\n *            @arg TIM_ICPSC_DIV2: capture is done once every 2 events\r\n *            @arg TIM_ICPSC_DIV4: capture is done once every 4 events\r\n *            @arg TIM_ICPSC_DIV8: capture is done once every 8 events\r\n */\r\n#define __HAL_TIM_GET_ICPRESCALER(__HANDLE__, __CHANNEL__)                                         \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC1PSC)         \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? (((__HANDLE__)->Instance->CCMR1 & TIM_CCMR1_IC2PSC) >> 8U) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC3PSC)         \\\r\n                                      : (((__HANDLE__)->Instance->CCMR2 & TIM_CCMR2_IC4PSC)) >> 8U)\r\n\r\n/**\r\n * @brief  Set the TIM Capture Compare Register value on runtime without calling another time ConfigChannel function.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  __COMPARE__ specifies the Capture Compare register new value.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__)                    \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) \\\r\n                                      : ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)))\r\n\r\n/**\r\n * @brief  Get the TIM Capture Compare Register value on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channel associated with the capture compare register\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: get capture/compare 1 register value\r\n *            @arg TIM_CHANNEL_2: get capture/compare 2 register value\r\n *            @arg TIM_CHANNEL_3: get capture/compare 3 register value\r\n *            @arg TIM_CHANNEL_4: get capture/compare 4 register value\r\n * @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy)\r\n */\r\n#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__)                 \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCR1) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) \\\r\n                                      : ((__HANDLE__)->Instance->CCR4))\r\n\r\n/**\r\n * @brief  Set the TIM Output compare preload.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval None\r\n */\r\n#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__)                               \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE))\r\n\r\n/**\r\n * @brief  Reset the TIM Output compare preload.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval None\r\n */\r\n#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__)                               \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE))\r\n\r\n/**\r\n * @brief  Enable fast mode for a given channel.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @note  When fast mode is enabled an active edge on the trigger input acts\r\n *        like a compare match on CCx output. Delay to sample the trigger\r\n *        input and to activate CCx output is reduced to 3 clock cycles.\r\n * @note  Fast mode acts only if the channel is configured in PWM1 or PWM2 mode.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__)                                  \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE))\r\n\r\n/**\r\n * @brief  Disable fast mode for a given channel.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @note  When fast mode is disabled CCx output behaves normally depending\r\n *        on counter and CCRx values even when the trigger is ON. The minimum\r\n *        delay to activate CCx output when an active edge occurs on the\r\n *        trigger input is 5 clock cycles.\r\n * @retval None\r\n */\r\n#define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__)                                  \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE))\r\n\r\n/**\r\n * @brief  Set the Update Request Source (URS) bit of the TIMx_CR1 register.\r\n * @param  __HANDLE__ TIM handle.\r\n * @note  When the URS bit of the TIMx_CR1 register is set, only counter\r\n *        overflow/underflow generates an update interrupt or DMA request (if\r\n *        enabled)\r\n * @retval None\r\n */\r\n#define __HAL_TIM_URS_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= TIM_CR1_URS)\r\n\r\n/**\r\n * @brief  Reset the Update Request Source (URS) bit of the TIMx_CR1 register.\r\n * @param  __HANDLE__ TIM handle.\r\n * @note  When the URS bit of the TIMx_CR1 register is reset, any of the\r\n *        following events generate an update interrupt or DMA request (if\r\n *        enabled):\r\n *           _ Counter overflow underflow\r\n *           _ Setting the UG bit\r\n *           _ Update generation through the slave mode controller\r\n * @retval None\r\n */\r\n#define __HAL_TIM_URS_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~TIM_CR1_URS)\r\n\r\n/**\r\n * @brief  Set the TIM Capture x input polarity on runtime.\r\n * @param  __HANDLE__ TIM handle.\r\n * @param  __CHANNEL__ TIM Channels to be configured.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  __POLARITY__ Polarity for TIx source\r\n *            @arg TIM_INPUTCHANNELPOLARITY_RISING: Rising Edge\r\n *            @arg TIM_INPUTCHANNELPOLARITY_FALLING: Falling Edge\r\n *            @arg TIM_INPUTCHANNELPOLARITY_BOTHEDGE: Rising and Falling Edge\r\n * @retval None\r\n */\r\n#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \\\r\n  do {                                                                       \\\r\n    TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__));                  \\\r\n    TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__));    \\\r\n  } while (0)\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported macros ----------------------------------------------------*/\r\n\r\n/* Private constants ---------------------------------------------------------*/\r\n/** @defgroup TIM_Private_Constants TIM Private Constants\r\n * @{\r\n */\r\n/* The counter of a timer instance is disabled only if all the CCx and CCxN\r\n   channels have been disabled */\r\n#define TIM_CCER_CCxE_MASK  ((uint32_t)(TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E))\r\n#define TIM_CCER_CCxNE_MASK ((uint32_t)(TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE))\r\n/**\r\n * @}\r\n */\r\n/* End of private constants --------------------------------------------------*/\r\n\r\n/* Private macros ------------------------------------------------------------*/\r\n/** @defgroup TIM_Private_Macros TIM Private Macros\r\n * @{\r\n */\r\n#define IS_TIM_CLEARINPUT_SOURCE(__MODE__) (((__MODE__) == TIM_CLEARINPUTSOURCE_NONE) || ((__MODE__) == TIM_CLEARINPUTSOURCE_ETR))\r\n\r\n#define IS_TIM_DMA_BASE(__BASE__)                                                                                                                                                      \\\r\n  (((__BASE__) == TIM_DMABASE_CR1) || ((__BASE__) == TIM_DMABASE_CR2) || ((__BASE__) == TIM_DMABASE_SMCR) || ((__BASE__) == TIM_DMABASE_DIER) || ((__BASE__) == TIM_DMABASE_SR)        \\\r\n   || ((__BASE__) == TIM_DMABASE_EGR) || ((__BASE__) == TIM_DMABASE_CCMR1) || ((__BASE__) == TIM_DMABASE_CCMR2) || ((__BASE__) == TIM_DMABASE_CCER) || ((__BASE__) == TIM_DMABASE_CNT) \\\r\n   || ((__BASE__) == TIM_DMABASE_PSC) || ((__BASE__) == TIM_DMABASE_ARR) || ((__BASE__) == TIM_DMABASE_RCR) || ((__BASE__) == TIM_DMABASE_CCR1) || ((__BASE__) == TIM_DMABASE_CCR2)    \\\r\n   || ((__BASE__) == TIM_DMABASE_CCR3) || ((__BASE__) == TIM_DMABASE_CCR4) || ((__BASE__) == TIM_DMABASE_BDTR))\r\n\r\n#define IS_TIM_EVENT_SOURCE(__SOURCE__) ((((__SOURCE__)&0xFFFFFF00U) == 0x00000000U) && ((__SOURCE__) != 0x00000000U))\r\n\r\n#define IS_TIM_COUNTER_MODE(__MODE__)                                                                                                                                             \\\r\n  (((__MODE__) == TIM_COUNTERMODE_UP) || ((__MODE__) == TIM_COUNTERMODE_DOWN) || ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED1) || ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED2) \\\r\n   || ((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED3))\r\n\r\n#define IS_TIM_CLOCKDIVISION_DIV(__DIV__) (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || ((__DIV__) == TIM_CLOCKDIVISION_DIV2) || ((__DIV__) == TIM_CLOCKDIVISION_DIV4))\r\n\r\n#define IS_TIM_AUTORELOAD_PRELOAD(PRELOAD) (((PRELOAD) == TIM_AUTORELOAD_PRELOAD_DISABLE) || ((PRELOAD) == TIM_AUTORELOAD_PRELOAD_ENABLE))\r\n\r\n#define IS_TIM_FAST_STATE(__STATE__) (((__STATE__) == TIM_OCFAST_DISABLE) || ((__STATE__) == TIM_OCFAST_ENABLE))\r\n\r\n#define IS_TIM_OC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_OCPOLARITY_HIGH) || ((__POLARITY__) == TIM_OCPOLARITY_LOW))\r\n\r\n#define IS_TIM_OCN_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_OCNPOLARITY_HIGH) || ((__POLARITY__) == TIM_OCNPOLARITY_LOW))\r\n\r\n#define IS_TIM_OCIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCIDLESTATE_SET) || ((__STATE__) == TIM_OCIDLESTATE_RESET))\r\n\r\n#define IS_TIM_OCNIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCNIDLESTATE_SET) || ((__STATE__) == TIM_OCNIDLESTATE_RESET))\r\n\r\n#define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_RISING) || ((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_FALLING))\r\n\r\n#define IS_TIM_IC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ICPOLARITY_RISING) || ((__POLARITY__) == TIM_ICPOLARITY_FALLING) || ((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE))\r\n\r\n#define IS_TIM_IC_SELECTION(__SELECTION__) (((__SELECTION__) == TIM_ICSELECTION_DIRECTTI) || ((__SELECTION__) == TIM_ICSELECTION_INDIRECTTI) || ((__SELECTION__) == TIM_ICSELECTION_TRC))\r\n\r\n#define IS_TIM_IC_PRESCALER(__PRESCALER__) (((__PRESCALER__) == TIM_ICPSC_DIV1) || ((__PRESCALER__) == TIM_ICPSC_DIV2) || ((__PRESCALER__) == TIM_ICPSC_DIV4) || ((__PRESCALER__) == TIM_ICPSC_DIV8))\r\n\r\n#define IS_TIM_OPM_MODE(__MODE__) (((__MODE__) == TIM_OPMODE_SINGLE) || ((__MODE__) == TIM_OPMODE_REPETITIVE))\r\n\r\n#define IS_TIM_ENCODER_MODE(__MODE__) (((__MODE__) == TIM_ENCODERMODE_TI1) || ((__MODE__) == TIM_ENCODERMODE_TI2) || ((__MODE__) == TIM_ENCODERMODE_TI12))\r\n\r\n#define IS_TIM_DMA_SOURCE(__SOURCE__) ((((__SOURCE__)&0xFFFF80FFU) == 0x00000000U) && ((__SOURCE__) != 0x00000000U))\r\n\r\n#define IS_TIM_CHANNELS(__CHANNEL__) \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1) || ((__CHANNEL__) == TIM_CHANNEL_2) || ((__CHANNEL__) == TIM_CHANNEL_3) || ((__CHANNEL__) == TIM_CHANNEL_4) || ((__CHANNEL__) == TIM_CHANNEL_ALL))\r\n\r\n#define IS_TIM_OPM_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || ((__CHANNEL__) == TIM_CHANNEL_2))\r\n\r\n#define IS_TIM_COMPLEMENTARY_CHANNELS(__CHANNEL__) (((__CHANNEL__) == TIM_CHANNEL_1) || ((__CHANNEL__) == TIM_CHANNEL_2) || ((__CHANNEL__) == TIM_CHANNEL_3))\r\n\r\n#define IS_TIM_CLOCKSOURCE(__CLOCK__)                                                                                                                                       \\\r\n  (((__CLOCK__) == TIM_CLOCKSOURCE_INTERNAL) || ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE2) || ((__CLOCK__) == TIM_CLOCKSOURCE_ITR0) || ((__CLOCK__) == TIM_CLOCKSOURCE_ITR1) \\\r\n   || ((__CLOCK__) == TIM_CLOCKSOURCE_ITR2) || ((__CLOCK__) == TIM_CLOCKSOURCE_ITR3) || ((__CLOCK__) == TIM_CLOCKSOURCE_TI1ED) || ((__CLOCK__) == TIM_CLOCKSOURCE_TI1)      \\\r\n   || ((__CLOCK__) == TIM_CLOCKSOURCE_TI2) || ((__CLOCK__) == TIM_CLOCKSOURCE_ETRMODE1))\r\n\r\n#define IS_TIM_CLOCKPOLARITY(__POLARITY__)                                                                                                             \\\r\n  (((__POLARITY__) == TIM_CLOCKPOLARITY_INVERTED) || ((__POLARITY__) == TIM_CLOCKPOLARITY_NONINVERTED) || ((__POLARITY__) == TIM_CLOCKPOLARITY_RISING) \\\r\n   || ((__POLARITY__) == TIM_CLOCKPOLARITY_FALLING) || ((__POLARITY__) == TIM_CLOCKPOLARITY_BOTHEDGE))\r\n\r\n#define IS_TIM_CLOCKPRESCALER(__PRESCALER__) \\\r\n  (((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV1) || ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV2) || ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV4) || ((__PRESCALER__) == TIM_CLOCKPRESCALER_DIV8))\r\n\r\n#define IS_TIM_CLOCKFILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU)\r\n\r\n#define IS_TIM_CLEARINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_CLEARINPUTPOLARITY_INVERTED) || ((__POLARITY__) == TIM_CLEARINPUTPOLARITY_NONINVERTED))\r\n\r\n#define IS_TIM_CLEARINPUT_PRESCALER(__PRESCALER__)                                                                                                             \\\r\n  (((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV1) || ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV2) || ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV4) \\\r\n   || ((__PRESCALER__) == TIM_CLEARINPUTPRESCALER_DIV8))\r\n\r\n#define IS_TIM_CLEARINPUT_FILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU)\r\n\r\n#define IS_TIM_OSSR_STATE(__STATE__) (((__STATE__) == TIM_OSSR_ENABLE) || ((__STATE__) == TIM_OSSR_DISABLE))\r\n\r\n#define IS_TIM_OSSI_STATE(__STATE__) (((__STATE__) == TIM_OSSI_ENABLE) || ((__STATE__) == TIM_OSSI_DISABLE))\r\n\r\n#define IS_TIM_LOCK_LEVEL(__LEVEL__) (((__LEVEL__) == TIM_LOCKLEVEL_OFF) || ((__LEVEL__) == TIM_LOCKLEVEL_1) || ((__LEVEL__) == TIM_LOCKLEVEL_2) || ((__LEVEL__) == TIM_LOCKLEVEL_3))\r\n\r\n#define IS_TIM_BREAK_FILTER(__BRKFILTER__) ((__BRKFILTER__) <= 0xFUL)\r\n\r\n#define IS_TIM_BREAK_STATE(__STATE__) (((__STATE__) == TIM_BREAK_ENABLE) || ((__STATE__) == TIM_BREAK_DISABLE))\r\n\r\n#define IS_TIM_BREAK_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_BREAKPOLARITY_LOW) || ((__POLARITY__) == TIM_BREAKPOLARITY_HIGH))\r\n\r\n#define IS_TIM_AUTOMATIC_OUTPUT_STATE(__STATE__) (((__STATE__) == TIM_AUTOMATICOUTPUT_ENABLE) || ((__STATE__) == TIM_AUTOMATICOUTPUT_DISABLE))\r\n\r\n#define IS_TIM_TRGO_SOURCE(__SOURCE__)                                                                                                                                               \\\r\n  (((__SOURCE__) == TIM_TRGO_RESET) || ((__SOURCE__) == TIM_TRGO_ENABLE) || ((__SOURCE__) == TIM_TRGO_UPDATE) || ((__SOURCE__) == TIM_TRGO_OC1) || ((__SOURCE__) == TIM_TRGO_OC1REF) \\\r\n   || ((__SOURCE__) == TIM_TRGO_OC2REF) || ((__SOURCE__) == TIM_TRGO_OC3REF) || ((__SOURCE__) == TIM_TRGO_OC4REF))\r\n\r\n#define IS_TIM_MSM_STATE(__STATE__) (((__STATE__) == TIM_MASTERSLAVEMODE_ENABLE) || ((__STATE__) == TIM_MASTERSLAVEMODE_DISABLE))\r\n\r\n#define IS_TIM_SLAVE_MODE(__MODE__)                                                                                                                             \\\r\n  (((__MODE__) == TIM_SLAVEMODE_DISABLE) || ((__MODE__) == TIM_SLAVEMODE_RESET) || ((__MODE__) == TIM_SLAVEMODE_GATED) || ((__MODE__) == TIM_SLAVEMODE_TRIGGER) \\\r\n   || ((__MODE__) == TIM_SLAVEMODE_EXTERNAL1))\r\n\r\n#define IS_TIM_PWM_MODE(__MODE__) (((__MODE__) == TIM_OCMODE_PWM1) || ((__MODE__) == TIM_OCMODE_PWM2))\r\n\r\n#define IS_TIM_OC_MODE(__MODE__)                                                                                                                                                                  \\\r\n  (((__MODE__) == TIM_OCMODE_TIMING) || ((__MODE__) == TIM_OCMODE_ACTIVE) || ((__MODE__) == TIM_OCMODE_INACTIVE) || ((__MODE__) == TIM_OCMODE_TOGGLE) || ((__MODE__) == TIM_OCMODE_FORCED_ACTIVE) \\\r\n   || ((__MODE__) == TIM_OCMODE_FORCED_INACTIVE))\r\n\r\n#define IS_TIM_TRIGGER_SELECTION(__SELECTION__)                                                                                                                                        \\\r\n  (((__SELECTION__) == TIM_TS_ITR0) || ((__SELECTION__) == TIM_TS_ITR1) || ((__SELECTION__) == TIM_TS_ITR2) || ((__SELECTION__) == TIM_TS_ITR3) || ((__SELECTION__) == TIM_TS_TI1F_ED) \\\r\n   || ((__SELECTION__) == TIM_TS_TI1FP1) || ((__SELECTION__) == TIM_TS_TI2FP2) || ((__SELECTION__) == TIM_TS_ETRF))\r\n\r\n#define IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(__SELECTION__) \\\r\n  (((__SELECTION__) == TIM_TS_ITR0) || ((__SELECTION__) == TIM_TS_ITR1) || ((__SELECTION__) == TIM_TS_ITR2) || ((__SELECTION__) == TIM_TS_ITR3) || ((__SELECTION__) == TIM_TS_NONE))\r\n\r\n#define IS_TIM_TRIGGERPOLARITY(__POLARITY__)                                                                                                                 \\\r\n  (((__POLARITY__) == TIM_TRIGGERPOLARITY_INVERTED) || ((__POLARITY__) == TIM_TRIGGERPOLARITY_NONINVERTED) || ((__POLARITY__) == TIM_TRIGGERPOLARITY_RISING) \\\r\n   || ((__POLARITY__) == TIM_TRIGGERPOLARITY_FALLING) || ((__POLARITY__) == TIM_TRIGGERPOLARITY_BOTHEDGE))\r\n\r\n#define IS_TIM_TRIGGERPRESCALER(__PRESCALER__) \\\r\n  (((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV1) || ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV2) || ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV4) || ((__PRESCALER__) == TIM_TRIGGERPRESCALER_DIV8))\r\n\r\n#define IS_TIM_TRIGGERFILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU)\r\n\r\n#define IS_TIM_TI1SELECTION(__TI1SELECTION__) (((__TI1SELECTION__) == TIM_TI1SELECTION_CH1) || ((__TI1SELECTION__) == TIM_TI1SELECTION_XORCOMBINATION))\r\n\r\n#define IS_TIM_DMA_LENGTH(__LENGTH__)                                                                                                                          \\\r\n  (((__LENGTH__) == TIM_DMABURSTLENGTH_1TRANSFER) || ((__LENGTH__) == TIM_DMABURSTLENGTH_2TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_3TRANSFERS)        \\\r\n   || ((__LENGTH__) == TIM_DMABURSTLENGTH_4TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_5TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_6TRANSFERS)    \\\r\n   || ((__LENGTH__) == TIM_DMABURSTLENGTH_7TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_8TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_9TRANSFERS)    \\\r\n   || ((__LENGTH__) == TIM_DMABURSTLENGTH_10TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_11TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_12TRANSFERS) \\\r\n   || ((__LENGTH__) == TIM_DMABURSTLENGTH_13TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_14TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_15TRANSFERS) \\\r\n   || ((__LENGTH__) == TIM_DMABURSTLENGTH_16TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_17TRANSFERS) || ((__LENGTH__) == TIM_DMABURSTLENGTH_18TRANSFERS))\r\n\r\n#define IS_TIM_DMA_DATA_LENGTH(LENGTH) (((LENGTH) >= 0x1U) && ((LENGTH) < 0x10000U))\r\n\r\n#define IS_TIM_IC_FILTER(__ICFILTER__) ((__ICFILTER__) <= 0xFU)\r\n\r\n#define IS_TIM_DEADTIME(__DEADTIME__) ((__DEADTIME__) <= 0xFFU)\r\n\r\n#define IS_TIM_SLAVEMODE_TRIGGER_ENABLED(__TRIGGER__) ((__TRIGGER__) == TIM_SLAVEMODE_TRIGGER)\r\n\r\n#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__)                           \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__))         \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__))         \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))\r\n\r\n#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__)                                  \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) \\\r\n                                      : ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC))\r\n\r\n#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__)                           \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__))         \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) \\\r\n                                      : ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))\r\n\r\n#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__)                                                  \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC3P))                  \\\r\n                                      : ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC4P)))\r\n\r\n#define TIM_CHANNEL_STATE_GET(__HANDLE__, __CHANNEL__)                \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? (__HANDLE__)->ChannelState[0] \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? (__HANDLE__)->ChannelState[1] \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? (__HANDLE__)->ChannelState[2] \\\r\n                                      : (__HANDLE__)->ChannelState[3])\r\n\r\n#define TIM_CHANNEL_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__)                     \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->ChannelState[0] = (__CHANNEL_STATE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->ChannelState[1] = (__CHANNEL_STATE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->ChannelState[2] = (__CHANNEL_STATE__)) \\\r\n                                      : ((__HANDLE__)->ChannelState[3] = (__CHANNEL_STATE__)))\r\n\r\n#define TIM_CHANNEL_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__) \\\r\n  do {                                                           \\\r\n    (__HANDLE__)->ChannelState[0] = (__CHANNEL_STATE__);         \\\r\n    (__HANDLE__)->ChannelState[1] = (__CHANNEL_STATE__);         \\\r\n    (__HANDLE__)->ChannelState[2] = (__CHANNEL_STATE__);         \\\r\n    (__HANDLE__)->ChannelState[3] = (__CHANNEL_STATE__);         \\\r\n  } while (0)\r\n\r\n#define TIM_CHANNEL_N_STATE_GET(__HANDLE__, __CHANNEL__)               \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? (__HANDLE__)->ChannelNState[0] \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? (__HANDLE__)->ChannelNState[1] \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? (__HANDLE__)->ChannelNState[2] \\\r\n                                      : (__HANDLE__)->ChannelNState[3])\r\n\r\n#define TIM_CHANNEL_N_STATE_SET(__HANDLE__, __CHANNEL__, __CHANNEL_STATE__)                    \\\r\n  (((__CHANNEL__) == TIM_CHANNEL_1)   ? ((__HANDLE__)->ChannelNState[0] = (__CHANNEL_STATE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->ChannelNState[1] = (__CHANNEL_STATE__)) \\\r\n   : ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->ChannelNState[2] = (__CHANNEL_STATE__)) \\\r\n                                      : ((__HANDLE__)->ChannelNState[3] = (__CHANNEL_STATE__)))\r\n\r\n#define TIM_CHANNEL_N_STATE_SET_ALL(__HANDLE__, __CHANNEL_STATE__) \\\r\n  do {                                                             \\\r\n    (__HANDLE__)->ChannelNState[0] = (__CHANNEL_STATE__);          \\\r\n    (__HANDLE__)->ChannelNState[1] = (__CHANNEL_STATE__);          \\\r\n    (__HANDLE__)->ChannelNState[2] = (__CHANNEL_STATE__);          \\\r\n    (__HANDLE__)->ChannelNState[3] = (__CHANNEL_STATE__);          \\\r\n  } while (0)\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of private macros -----------------------------------------------------*/\r\n\r\n/* Include TIM HAL Extended module */\r\n#include \"stm32f1xx_hal_tim_ex.h\"\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup TIM_Exported_Functions TIM Exported Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group1 TIM Time Base functions\r\n *  @brief   Time Base functions\r\n * @{\r\n */\r\n/* Time Base functions ********************************************************/\r\nHAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group2 TIM Output Compare functions\r\n *  @brief   TIM Output Compare functions\r\n * @{\r\n */\r\n/* Timer Output Compare functions *********************************************/\r\nHAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group3 TIM PWM functions\r\n *  @brief   TIM PWM functions\r\n * @{\r\n */\r\n/* Timer PWM functions ********************************************************/\r\nHAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group4 TIM Input Capture functions\r\n *  @brief   TIM Input Capture functions\r\n * @{\r\n */\r\n/* Timer Input Capture functions **********************************************/\r\nHAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group5 TIM One Pulse functions\r\n *  @brief   TIM One Pulse functions\r\n * @{\r\n */\r\n/* Timer One Pulse functions **************************************************/\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode);\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group6 TIM Encoder functions\r\n *  @brief   TIM Encoder functions\r\n * @{\r\n */\r\n/* Timer Encoder functions ****************************************************/\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_InitTypeDef *sConfig);\r\nHAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim);\r\nvoid              HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim);\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIM_Exported_Functions_Group7 TIM IRQ handler management\r\n *  @brief   IRQ handler management\r\n * @{\r\n */\r\n/* Interrupt Handler functions  ***********************************************/\r\nvoid HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions\r\n *  @brief   Peripheral Control functions\r\n * @{\r\n */\r\n/* Control functions  *********************************************************/\r\nHAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel);\r\nHAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig);\r\nHAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection);\r\nHAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);\r\nHAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength, uint32_t DataLength);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_MultiReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength, uint32_t DataLength);\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);\r\nHAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource);\r\nuint32_t          HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions\r\n *  @brief   TIM Callbacks functions\r\n * @{\r\n */\r\n/* Callback in non blocking modes (Interrupt and DMA) *************************/\r\nvoid HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim);\r\n\r\n/* Callbacks Register/UnRegister functions  ***********************************/\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\nHAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback);\r\nHAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions\r\n *  @brief  Peripheral State functions\r\n * @{\r\n */\r\n/* Peripheral State functions  ************************************************/\r\nHAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim);\r\n\r\n/* Peripheral Channel state functions  ************************************************/\r\nHAL_TIM_ActiveChannel        HAL_TIM_GetActiveChannel(TIM_HandleTypeDef *htim);\r\nHAL_TIM_ChannelStateTypeDef  HAL_TIM_GetChannelState(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(TIM_HandleTypeDef *htim);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported functions -------------------------------------------------*/\r\n\r\n/* Private functions----------------------------------------------------------*/\r\n/** @defgroup TIM_Private_Functions TIM Private Functions\r\n * @{\r\n */\r\nvoid TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure);\r\nvoid TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);\r\nvoid TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);\r\nvoid TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter);\r\n\r\nvoid TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma);\r\nvoid TIM_DMAError(DMA_HandleTypeDef *hdma);\r\nvoid TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma);\r\nvoid TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma);\r\nvoid TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\nvoid TIM_ResetCallback(TIM_HandleTypeDef *htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of private functions --------------------------------------------------*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* STM32F1xx_HAL_TIM_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_tim_ex.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_tim_ex.h\r\n * @author  MCD Application Team\r\n * @brief   Header file of TIM HAL Extended module.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n * All rights reserved.</center></h2>\r\n *\r\n * This software component is licensed by ST under BSD 3-Clause license,\r\n * the \"License\"; You may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at:\r\n *                        opensource.org/licenses/BSD-3-Clause\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef STM32F1xx_HAL_TIM_EX_H\r\n#define STM32F1xx_HAL_TIM_EX_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal_def.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @addtogroup TIMEx\r\n * @{\r\n */\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/** @defgroup TIMEx_Exported_Types TIM Extended Exported Types\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  TIM Hall sensor Configuration Structure definition\r\n */\r\n\r\ntypedef struct {\r\n  uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal.\r\n                             This parameter can be a value of @ref TIM_Input_Capture_Polarity */\r\n\r\n  uint32_t IC1Prescaler; /*!< Specifies the Input Capture Prescaler.\r\n                              This parameter can be a value of @ref TIM_Input_Capture_Prescaler */\r\n\r\n  uint32_t IC1Filter; /*!< Specifies the input capture filter.\r\n                           This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */\r\n\r\n  uint32_t Commutation_Delay; /*!< Specifies the pulse value to be loaded into the Capture Compare Register.\r\n                                   This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */\r\n} TIM_HallSensor_InitTypeDef;\r\n/**\r\n * @}\r\n */\r\n/* End of exported types -----------------------------------------------------*/\r\n\r\n/* Exported constants --------------------------------------------------------*/\r\n/** @defgroup TIMEx_Exported_Constants TIM Extended Exported Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup TIMEx_Remap TIM Extended Remapping\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported constants -------------------------------------------------*/\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n/** @defgroup TIMEx_Exported_Macros TIM Extended Exported Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported macro -----------------------------------------------------*/\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/** @defgroup TIMEx_Private_Macros TIM Extended Private Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of private macro ------------------------------------------------------*/\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @addtogroup TIMEx_Exported_Functions TIM Extended Exported Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions\r\n *  @brief    Timer Hall Sensor functions\r\n * @{\r\n */\r\n/*  Timer Hall Sensor functions  **********************************************/\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig);\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim);\r\n\r\nvoid HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim);\r\n\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim);\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim);\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions\r\n *  @brief   Timer Complementary Output Compare functions\r\n * @{\r\n */\r\n/*  Timer Complementary Output Compare functions  *****************************/\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions\r\n *  @brief    Timer Complementary PWM functions\r\n * @{\r\n */\r\n/*  Timer Complementary PWM functions  ****************************************/\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/* Non-Blocking mode: DMA */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length);\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions\r\n *  @brief    Timer Complementary One Pulse functions\r\n * @{\r\n */\r\n/*  Timer Complementary One Pulse functions  **********************************/\r\n/* Blocking mode: Polling */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\n\r\n/* Non-Blocking mode: Interrupt */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions\r\n *  @brief    Peripheral Control functions\r\n * @{\r\n */\r\n/* Extended Control functions  ************************************************/\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);\r\nHAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig);\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);\r\nHAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group6 Extended Callbacks functions\r\n * @brief    Extended Callbacks functions\r\n * @{\r\n */\r\n/* Extended Callback **********************************************************/\r\nvoid HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIMEx_CommutHalfCpltCallback(TIM_HandleTypeDef *htim);\r\nvoid HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim);\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup TIMEx_Exported_Functions_Group7 Extended Peripheral State functions\r\n * @brief    Extended Peripheral State functions\r\n * @{\r\n */\r\n/* Extended Peripheral State functions  ***************************************/\r\nHAL_TIM_StateTypeDef        HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim);\r\nHAL_TIM_ChannelStateTypeDef HAL_TIMEx_GetChannelNState(TIM_HandleTypeDef *htim, uint32_t ChannelN);\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/* End of exported functions -------------------------------------------------*/\r\n\r\n/* Private functions----------------------------------------------------------*/\r\n/** @addtogroup TIMEx_Private_Functions TIMEx Private Functions\r\n * @{\r\n */\r\nvoid TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma);\r\nvoid TIMEx_DMACommutationHalfCplt(DMA_HandleTypeDef *hdma);\r\n/**\r\n * @}\r\n */\r\n/* End of private functions --------------------------------------------------*/\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* STM32F1xx_HAL_TIM_EX_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal.c\r\n  * @author  MCD Application Team\r\n  * @brief   HAL module driver.\r\n  *          This is the common part of the HAL initialization\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n    [..]\r\n    The common HAL driver contains a set of generic and common APIs that can be\r\n    used by the PPP peripheral drivers and the user to start using the HAL.\r\n    [..]\r\n    The HAL contains two APIs' categories:\r\n         (+) Common HAL APIs\r\n         (+) Services HAL APIs\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup HAL HAL\r\n * @brief HAL module driver.\r\n * @{\r\n */\r\n\r\n#ifdef HAL_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_Private_Constants HAL Private Constants\r\n * @{\r\n */\r\n/**\r\n * @brief STM32F1xx HAL Driver version number V1.1.3\r\n */\r\n#define __STM32F1xx_HAL_VERSION_MAIN (0x01U) /*!< [31:24] main version */\r\n#define __STM32F1xx_HAL_VERSION_SUB1 (0x01U) /*!< [23:16] sub1 version */\r\n#define __STM32F1xx_HAL_VERSION_SUB2 (0x03U) /*!< [15:8]  sub2 version */\r\n#define __STM32F1xx_HAL_VERSION_RC   (0x00U) /*!< [7:0]  release candidate */\r\n#define __STM32F1xx_HAL_VERSION      ((__STM32F1xx_HAL_VERSION_MAIN << 24) | (__STM32F1xx_HAL_VERSION_SUB1 << 16) | (__STM32F1xx_HAL_VERSION_SUB2 << 8) | (__STM32F1xx_HAL_VERSION_RC))\r\n\r\n#define IDCODE_DEVID_MASK 0x00000FFFU\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_Private_Variables HAL Private Variables\r\n * @{\r\n */\r\n__IO uint32_t       uwTick;\r\nuint32_t            uwTickPrio = (1UL << __NVIC_PRIO_BITS); /* Invalid PRIO */\r\nHAL_TickFreqTypeDef uwTickFreq = HAL_TICK_FREQ_DEFAULT;     /* 1KHz */\r\n/**\r\n * @}\r\n */\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Exported functions ---------------------------------------------------------*/\r\n\r\n/** @defgroup HAL_Exported_Functions HAL Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup HAL_Exported_Functions_Group1 Initialization and de-initialization Functions\r\n *  @brief    Initialization and de-initialization functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n              ##### Initialization and de-initialization functions #####\r\n ===============================================================================\r\n   [..]  This section provides functions allowing to:\r\n      (+) Initializes the Flash interface, the NVIC allocation and initial clock\r\n          configuration. It initializes the systick also when timeout is needed\r\n          and the backup domain when enabled.\r\n      (+) de-Initializes common part of the HAL.\r\n      (+) Configure The time base source to have 1ms time base with a dedicated\r\n          Tick interrupt priority.\r\n        (++) SysTick timer is used by default as source of time base, but user\r\n             can eventually implement his proper time base source (a general purpose\r\n             timer for example or other time source), keeping in mind that Time base\r\n             duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and\r\n             handled in milliseconds basis.\r\n        (++) Time base configuration function (HAL_InitTick ()) is called automatically\r\n             at the beginning of the program after reset by HAL_Init() or at any time\r\n             when clock is configured, by HAL_RCC_ClockConfig().\r\n        (++) Source of time base is configured  to generate interrupts at regular\r\n             time intervals. Care must be taken if HAL_Delay() is called from a\r\n             peripheral ISR process, the Tick interrupt line must have higher priority\r\n            (numerically lower) than the peripheral interrupt. Otherwise the caller\r\n            ISR process will be blocked.\r\n       (++) functions affecting time base configurations are declared as __weak\r\n             to make  override possible  in case of other  implementations in user file.\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  This function is used to initialize the HAL Library; it must be the first\r\n *         instruction to be executed in the main program (before to call any other\r\n *         HAL function), it performs the following:\r\n *           Configure the Flash prefetch.\r\n *           Configures the SysTick to generate an interrupt each 1 millisecond,\r\n *           which is clocked by the HSI (at this stage, the clock is not yet\r\n *           configured and thus the system is running from the internal HSI at 16 MHz).\r\n *           Set NVIC Group Priority to 4.\r\n *           Calls the HAL_MspInit() callback function defined in user file\r\n *           \"stm32f1xx_hal_msp.c\" to do the global low level hardware initialization\r\n *\r\n * @note   SysTick is used as time base for the HAL_Delay() function, the application\r\n *         need to ensure that the SysTick time base is always set to 1 millisecond\r\n *         to have correct HAL operation.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_Init(void) {\r\n  /* Configure Flash prefetch */\r\n#if (PREFETCH_ENABLE != 0)\r\n#if defined(STM32F101x6) || defined(STM32F101xB) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) ||    \\\r\n    defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n\r\n  /* Prefetch buffer is not available on value line devices */\r\n  __HAL_FLASH_PREFETCH_BUFFER_ENABLE();\r\n#endif\r\n#endif /* PREFETCH_ENABLE */\r\n\r\n  /* Set Interrupt Group Priority */\r\n  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);\r\n\r\n  /* Use systick as time base source and configure 1ms tick (default clock after Reset is HSI) */\r\n  HAL_InitTick(TICK_INT_PRIORITY);\r\n\r\n  /* Init the low level hardware */\r\n  HAL_MspInit();\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief This function de-Initializes common part of the HAL and stops the systick.\r\n *        of time base.\r\n * @note This function is optional.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DeInit(void) {\r\n  /* Reset of all peripherals */\r\n  __HAL_RCC_APB1_FORCE_RESET();\r\n  __HAL_RCC_APB1_RELEASE_RESET();\r\n\r\n  __HAL_RCC_APB2_FORCE_RESET();\r\n  __HAL_RCC_APB2_RELEASE_RESET();\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  __HAL_RCC_AHB_FORCE_RESET();\r\n  __HAL_RCC_AHB_RELEASE_RESET();\r\n#endif\r\n\r\n  /* De-Init the low level hardware */\r\n  HAL_MspDeInit();\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initialize the MSP.\r\n * @retval None\r\n */\r\n__weak void HAL_MspInit(void) {\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the MSP.\r\n * @retval None\r\n */\r\n__weak void HAL_MspDeInit(void) {\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief This function configures the source of the time base.\r\n *        The time source is configured  to have 1ms time base with a dedicated\r\n *        Tick interrupt priority.\r\n * @note This function is called  automatically at the beginning of program after\r\n *       reset by HAL_Init() or at any time when clock is reconfigured  by HAL_RCC_ClockConfig().\r\n * @note In the default implementation, SysTick timer is the source of time base.\r\n *       It is used to generate interrupts at regular time intervals.\r\n *       Care must be taken if HAL_Delay() is called from a peripheral ISR process,\r\n *       The SysTick interrupt must have higher priority (numerically lower)\r\n *       than the peripheral interrupt. Otherwise the caller ISR process will be blocked.\r\n *       The function is declared as __weak  to be overwritten  in case of other\r\n *       implementation  in user file.\r\n * @param TickPriority Tick interrupt priority.\r\n * @retval HAL status\r\n */\r\n__weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {\r\n  /* Configure the SysTick to have interrupt in 1ms time basis*/\r\n  if (HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq)) > 0U) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Configure the SysTick IRQ priority */\r\n  if (TickPriority < (1UL << __NVIC_PRIO_BITS)) {\r\n    HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);\r\n    uwTickPrio = TickPriority;\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup HAL_Exported_Functions_Group2 HAL Control functions\r\n  *  @brief    HAL Control functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### HAL Control functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Provide a tick value in millisecond\r\n      (+) Provide a blocking delay in millisecond\r\n      (+) Suspend the time base source interrupt\r\n      (+) Resume the time base source interrupt\r\n      (+) Get the HAL API driver version\r\n      (+) Get the device identifier\r\n      (+) Get the device revision identifier\r\n      (+) Enable/Disable Debug module during SLEEP mode\r\n      (+) Enable/Disable Debug module during STOP mode\r\n      (+) Enable/Disable Debug module during STANDBY mode\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief This function is called to increment  a global variable \"uwTick\"\r\n *        used as application time base.\r\n * @note In the default implementation, this variable is incremented each 1ms\r\n *       in SysTick ISR.\r\n * @note This function is declared as __weak to be overwritten in case of other\r\n *      implementations in user file.\r\n * @retval None\r\n */\r\n__weak void HAL_IncTick(void) { uwTick += uwTickFreq; }\r\n\r\n/**\r\n * @brief Provides a tick value in millisecond.\r\n * @note  This function is declared as __weak to be overwritten in case of other\r\n *       implementations in user file.\r\n * @retval tick value\r\n */\r\n__weak uint32_t HAL_GetTick(void) { return uwTick; }\r\n\r\n/**\r\n * @brief This function returns a tick priority.\r\n * @retval tick priority\r\n */\r\nuint32_t HAL_GetTickPrio(void) { return uwTickPrio; }\r\n\r\n/**\r\n * @brief Set new tick Freq.\r\n * @retval Status\r\n */\r\nHAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n  assert_param(IS_TICKFREQ(Freq));\r\n\r\n  if (uwTickFreq != Freq) {\r\n    uwTickFreq = Freq;\r\n\r\n    /* Apply the new tick Freq  */\r\n    status = HAL_InitTick(uwTickPrio);\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief Return tick frequency.\r\n * @retval tick period in Hz\r\n */\r\nHAL_TickFreqTypeDef HAL_GetTickFreq(void) { return uwTickFreq; }\r\n\r\n/**\r\n * @brief This function provides minimum delay (in milliseconds) based\r\n *        on variable incremented.\r\n * @note In the default implementation , SysTick timer is the source of time base.\r\n *       It is used to generate interrupts at regular time intervals where uwTick\r\n *       is incremented.\r\n * @note This function is declared as __weak to be overwritten in case of other\r\n *       implementations in user file.\r\n * @param Delay specifies the delay time length, in milliseconds.\r\n * @retval None\r\n */\r\n__weak void HAL_Delay(uint32_t Delay) {\r\n  uint32_t tickstart = HAL_GetTick();\r\n  uint32_t wait      = Delay;\r\n\r\n  /* Add a freq to guarantee minimum wait */\r\n  if (wait < HAL_MAX_DELAY) {\r\n    wait += (uint32_t)(uwTickFreq);\r\n  }\r\n\r\n  while ((HAL_GetTick() - tickstart) < wait) {\r\n  }\r\n}\r\n\r\n/**\r\n * @brief Suspend Tick increment.\r\n * @note In the default implementation , SysTick timer is the source of time base. It is\r\n *       used to generate interrupts at regular time intervals. Once HAL_SuspendTick()\r\n *       is called, the SysTick interrupt will be disabled and so Tick increment\r\n *       is suspended.\r\n * @note This function is declared as __weak to be overwritten in case of other\r\n *       implementations in user file.\r\n * @retval None\r\n */\r\n__weak void HAL_SuspendTick(void) {\r\n  /* Disable SysTick Interrupt */\r\n  CLEAR_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);\r\n}\r\n\r\n/**\r\n * @brief Resume Tick increment.\r\n * @note In the default implementation , SysTick timer is the source of time base. It is\r\n *       used to generate interrupts at regular time intervals. Once HAL_ResumeTick()\r\n *       is called, the SysTick interrupt will be enabled and so Tick increment\r\n *       is resumed.\r\n * @note This function is declared as __weak to be overwritten in case of other\r\n *       implementations in user file.\r\n * @retval None\r\n */\r\n__weak void HAL_ResumeTick(void) {\r\n  /* Enable SysTick Interrupt */\r\n  SET_BIT(SysTick->CTRL, SysTick_CTRL_TICKINT_Msk);\r\n}\r\n\r\n/**\r\n * @brief  Returns the HAL revision\r\n * @retval version 0xXYZR (8bits for each decimal, R for RC)\r\n */\r\nuint32_t HAL_GetHalVersion(void) { return __STM32F1xx_HAL_VERSION; }\r\n\r\n/**\r\n * @brief Returns the device revision identifier.\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval Device revision identifier\r\n */\r\nuint32_t HAL_GetREVID(void) { return ((DBGMCU->IDCODE) >> DBGMCU_IDCODE_REV_ID_Pos); }\r\n\r\n/**\r\n * @brief  Returns the device identifier.\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval Device identifier\r\n */\r\nuint32_t HAL_GetDEVID(void) { return ((DBGMCU->IDCODE) & IDCODE_DEVID_MASK); }\r\n\r\n/**\r\n * @brief  Enable the Debug Module during SLEEP mode\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_EnableDBGSleepMode(void) { SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); }\r\n\r\n/**\r\n * @brief  Disable the Debug Module during SLEEP mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_DisableDBGSleepMode(void) { CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP); }\r\n\r\n/**\r\n * @brief  Enable the Debug Module during STOP mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * Note: On all STM32F1 devices:\r\n *       If the system tick timer interrupt is enabled during the Stop mode\r\n *       debug (DBG_STOP bit set in the DBGMCU_CR register ), it will wakeup\r\n *       the system from Stop mode.\r\n *       Workaround: To debug the Stop mode, disable the system tick timer\r\n *       interrupt.\r\n *       Refer to errata sheet of these devices for more details.\r\n * Note: On all STM32F1 devices:\r\n *       If the system tick timer interrupt is enabled during the Stop mode\r\n *       debug (DBG_STOP bit set in the DBGMCU_CR register ), it will wakeup\r\n *       the system from Stop mode.\r\n *       Workaround: To debug the Stop mode, disable the system tick timer\r\n *       interrupt.\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_EnableDBGStopMode(void) { SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); }\r\n\r\n/**\r\n * @brief  Disable the Debug Module during STOP mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_DisableDBGStopMode(void) { CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); }\r\n\r\n/**\r\n * @brief  Enable the Debug Module during STANDBY mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_EnableDBGStandbyMode(void) { SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); }\r\n\r\n/**\r\n * @brief  Disable the Debug Module during STANDBY mode\r\n * Note: On devices STM32F10xx8 and STM32F10xxB,\r\n *                  STM32F101xC/D/E and STM32F103xC/D/E,\r\n *                  STM32F101xF/G and STM32F103xF/G\r\n *                  STM32F10xx4 and STM32F10xx6\r\n *       Debug registers DBGMCU_IDCODE and DBGMCU_CR are accessible only in\r\n *       debug mode (not accessible by the user software in normal mode).\r\n *       Refer to errata sheet of these devices for more details.\r\n * @retval None\r\n */\r\nvoid HAL_DBGMCU_DisableDBGStandbyMode(void) { CLEAR_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY); }\r\n\r\n/**\r\n * @brief Return the unique device identifier (UID based on 96 bits)\r\n * @param UID pointer to 3 words array.\r\n * @retval Device identifier\r\n */\r\nvoid HAL_GetUID(uint32_t *UID) {\r\n  UID[0] = (uint32_t)(READ_REG(*((uint32_t *)UID_BASE)));\r\n  UID[1] = (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE + 4U))));\r\n  UID[2] = (uint32_t)(READ_REG(*((uint32_t *)(UID_BASE + 8U))));\r\n}\r\n\r\n/**\r\n * @brief  Returns first word of the unique device identifier (UID based on 96 bits)\r\n * @retval Device identifier\r\n */\r\nuint32_t HAL_GetUIDw0(void) { return (READ_REG(*((uint32_t *)UID_BASE))); }\r\n\r\n/**\r\n * @brief  Returns second word of the unique device identifier (UID based on 96 bits)\r\n * @retval Device identifier\r\n */\r\nuint32_t HAL_GetUIDw1(void) { return (READ_REG(*((uint32_t *)(UID_BASE + 4U)))); }\r\n\r\n/**\r\n * @brief  Returns third word of the unique device identifier (UID based on 96 bits)\r\n * @retval Device identifier\r\n */\r\nuint32_t HAL_GetUIDw2(void) { return (READ_REG(*((uint32_t *)(UID_BASE + 8U)))); }\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_adc.c\r\n  * @author  MCD Application Team\r\n  * @brief   This file provides firmware functions to manage the following\r\n  *          functionalities of the Analog to Digital Convertor (ADC)\r\n  *          peripheral:\r\n  *           + Initialization and de-initialization functions\r\n  *             ++ Initialization and Configuration of ADC\r\n  *           + Operation functions\r\n  *             ++ Start, stop, get result of conversions of regular\r\n  *                group, using 3 possible modes: polling, interruption or DMA.\r\n  *           + Control functions\r\n  *             ++ Channels configuration on regular group\r\n  *             ++ Channels configuration on injected group\r\n  *             ++ Analog Watchdog configuration\r\n  *           + State functions\r\n  *             ++ ADC state machine management\r\n  *             ++ Interrupts and flags management\r\n  *          Other functions (extended functions) are available in file\r\n  *          \"stm32f1xx_hal_adc_ex.c\".\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                     ##### ADC peripheral features #####\r\n  ==============================================================================\r\n  [..]\r\n  (+) 12-bit resolution\r\n\r\n  (+) Interrupt generation at the end of regular conversion, end of injected\r\n      conversion, and in case of analog watchdog or overrun events.\r\n\r\n  (+) Single and continuous conversion modes.\r\n\r\n  (+) Scan mode for conversion of several channels sequentially.\r\n\r\n  (+) Data alignment with in-built data coherency.\r\n\r\n  (+) Programmable sampling time (channel wise)\r\n\r\n  (+) ADC conversion of regular group and injected group.\r\n\r\n  (+) External trigger (timer or EXTI)\r\n      for both regular and injected groups.\r\n\r\n  (+) DMA request generation for transfer of conversions data of regular group.\r\n\r\n  (+) Multimode Dual mode (available on devices with 2 ADCs or more).\r\n\r\n  (+) Configurable DMA data storage in Multimode Dual mode (available on devices\r\n      with 2 DCs or more).\r\n\r\n  (+) Configurable delay between conversions in Dual interleaved mode (available\r\n      on devices with 2 DCs or more).\r\n\r\n  (+) ADC calibration\r\n\r\n  (+) ADC supply requirements: 2.4 V to 3.6 V at full speed and down to 1.8 V at\r\n      slower speed.\r\n\r\n  (+) ADC input range: from Vref- (connected to Vssa) to Vref+ (connected to\r\n      Vdda or to an external voltage reference).\r\n\r\n\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n    [..]\r\n\r\n     *** Configuration of top level parameters related to ADC ***\r\n     ============================================================\r\n     [..]\r\n\r\n    (#) Enable the ADC interface\r\n      (++) As prerequisite, ADC clock must be configured at RCC top level.\r\n           Caution: On STM32F1, ADC clock frequency max is 14MHz (refer\r\n                    to device datasheet).\r\n                    Therefore, ADC clock prescaler must be configured in\r\n                    function of ADC clock source frequency to remain below\r\n                    this maximum frequency.\r\n        (++) One clock setting is mandatory:\r\n             ADC clock (core clock, also possibly conversion clock).\r\n             (+++) Example:\r\n                   Into HAL_ADC_MspInit() (recommended code location) or with\r\n                   other device clock parameters configuration:\r\n               (+++) RCC_PeriphCLKInitTypeDef  PeriphClkInit;\r\n               (+++) __ADC1_CLK_ENABLE();\r\n               (+++) PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;\r\n               (+++) PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;\r\n               (+++) HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);\r\n\r\n    (#) ADC pins configuration\r\n         (++) Enable the clock for the ADC GPIOs\r\n              using macro __HAL_RCC_GPIOx_CLK_ENABLE()\r\n         (++) Configure these ADC pins in analog mode\r\n              using function HAL_GPIO_Init()\r\n\r\n    (#) Optionally, in case of usage of ADC with interruptions:\r\n         (++) Configure the NVIC for ADC\r\n              using function HAL_NVIC_EnableIRQ(ADCx_IRQn)\r\n         (++) Insert the ADC interruption handler function HAL_ADC_IRQHandler()\r\n              into the function of corresponding ADC interruption vector\r\n              ADCx_IRQHandler().\r\n\r\n    (#) Optionally, in case of usage of DMA:\r\n         (++) Configure the DMA (DMA channel, mode normal or circular, ...)\r\n              using function HAL_DMA_Init().\r\n         (++) Configure the NVIC for DMA\r\n              using function HAL_NVIC_EnableIRQ(DMAx_Channelx_IRQn)\r\n         (++) Insert the ADC interruption handler function HAL_ADC_IRQHandler()\r\n              into the function of corresponding DMA interruption vector\r\n              DMAx_Channelx_IRQHandler().\r\n\r\n     *** Configuration of ADC, groups regular/injected, channels parameters ***\r\n     ==========================================================================\r\n     [..]\r\n\r\n    (#) Configure the ADC parameters (resolution, data alignment, ...)\r\n        and regular group parameters (conversion trigger, sequencer, ...)\r\n        using function HAL_ADC_Init().\r\n\r\n    (#) Configure the channels for regular group parameters (channel number,\r\n        channel rank into sequencer, ..., into regular group)\r\n        using function HAL_ADC_ConfigChannel().\r\n\r\n    (#) Optionally, configure the injected group parameters (conversion trigger,\r\n        sequencer, ..., of injected group)\r\n        and the channels for injected group parameters (channel number,\r\n        channel rank into sequencer, ..., into injected group)\r\n        using function HAL_ADCEx_InjectedConfigChannel().\r\n\r\n    (#) Optionally, configure the analog watchdog parameters (channels\r\n        monitored, thresholds, ...)\r\n        using function HAL_ADC_AnalogWDGConfig().\r\n\r\n    (#) Optionally, for devices with several ADC instances: configure the\r\n        multimode parameters\r\n        using function HAL_ADCEx_MultiModeConfigChannel().\r\n\r\n     *** Execution of ADC conversions ***\r\n     ====================================\r\n     [..]\r\n\r\n    (#) Optionally, perform an automatic ADC calibration to improve the\r\n        conversion accuracy\r\n        using function HAL_ADCEx_Calibration_Start().\r\n\r\n    (#) ADC driver can be used among three modes: polling, interruption,\r\n        transfer by DMA.\r\n\r\n        (++) ADC conversion by polling:\r\n          (+++) Activate the ADC peripheral and start conversions\r\n                using function HAL_ADC_Start()\r\n          (+++) Wait for ADC conversion completion\r\n                using function HAL_ADC_PollForConversion()\r\n                (or for injected group: HAL_ADCEx_InjectedPollForConversion() )\r\n          (+++) Retrieve conversion results\r\n                using function HAL_ADC_GetValue()\r\n                (or for injected group: HAL_ADCEx_InjectedGetValue() )\r\n          (+++) Stop conversion and disable the ADC peripheral\r\n                using function HAL_ADC_Stop()\r\n\r\n        (++) ADC conversion by interruption:\r\n          (+++) Activate the ADC peripheral and start conversions\r\n                using function HAL_ADC_Start_IT()\r\n          (+++) Wait for ADC conversion completion by call of function\r\n                HAL_ADC_ConvCpltCallback()\r\n                (this function must be implemented in user program)\r\n                (or for injected group: HAL_ADCEx_InjectedConvCpltCallback() )\r\n          (+++) Retrieve conversion results\r\n                using function HAL_ADC_GetValue()\r\n                (or for injected group: HAL_ADCEx_InjectedGetValue() )\r\n          (+++) Stop conversion and disable the ADC peripheral\r\n                using function HAL_ADC_Stop_IT()\r\n\r\n        (++) ADC conversion with transfer by DMA:\r\n          (+++) Activate the ADC peripheral and start conversions\r\n                using function HAL_ADC_Start_DMA()\r\n          (+++) Wait for ADC conversion completion by call of function\r\n                HAL_ADC_ConvCpltCallback() or HAL_ADC_ConvHalfCpltCallback()\r\n                (these functions must be implemented in user program)\r\n          (+++) Conversion results are automatically transferred by DMA into\r\n                destination variable address.\r\n          (+++) Stop conversion and disable the ADC peripheral\r\n                using function HAL_ADC_Stop_DMA()\r\n\r\n        (++) For devices with several ADCs: ADC multimode conversion\r\n             with transfer by DMA:\r\n          (+++) Activate the ADC peripheral (slave) and start conversions\r\n                using function HAL_ADC_Start()\r\n          (+++) Activate the ADC peripheral (master) and start conversions\r\n                using function HAL_ADCEx_MultiModeStart_DMA()\r\n          (+++) Wait for ADC conversion completion by call of function\r\n                HAL_ADC_ConvCpltCallback() or HAL_ADC_ConvHalfCpltCallback()\r\n                (these functions must be implemented in user program)\r\n          (+++) Conversion results are automatically transferred by DMA into\r\n                destination variable address.\r\n          (+++) Stop conversion and disable the ADC peripheral (master)\r\n                using function HAL_ADCEx_MultiModeStop_DMA()\r\n          (+++) Stop conversion and disable the ADC peripheral (slave)\r\n                using function HAL_ADC_Stop_IT()\r\n\r\n     [..]\r\n\r\n    (@) Callback functions must be implemented in user program:\r\n      (+@) HAL_ADC_ErrorCallback()\r\n      (+@) HAL_ADC_LevelOutOfWindowCallback() (callback of analog watchdog)\r\n      (+@) HAL_ADC_ConvCpltCallback()\r\n      (+@) HAL_ADC_ConvHalfCpltCallback\r\n      (+@) HAL_ADCEx_InjectedConvCpltCallback()\r\n\r\n     *** Deinitialization of ADC ***\r\n     ============================================================\r\n     [..]\r\n\r\n    (#) Disable the ADC interface\r\n      (++) ADC clock can be hard reset and disabled at RCC top level.\r\n        (++) Hard reset of ADC peripherals\r\n             using macro __ADCx_FORCE_RESET(), __ADCx_RELEASE_RESET().\r\n        (++) ADC clock disable\r\n             using the equivalent macro/functions as configuration step.\r\n             (+++) Example:\r\n                   Into HAL_ADC_MspDeInit() (recommended code location) or with\r\n                   other device clock parameters configuration:\r\n               (+++) PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC\r\n               (+++) PeriphClkInit.AdcClockSelection = RCC_ADCPLLCLK2_OFF\r\n               (+++) HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit)\r\n\r\n    (#) ADC pins configuration\r\n         (++) Disable the clock for the ADC GPIOs\r\n              using macro __HAL_RCC_GPIOx_CLK_DISABLE()\r\n\r\n    (#) Optionally, in case of usage of ADC with interruptions:\r\n         (++) Disable the NVIC for ADC\r\n              using function HAL_NVIC_EnableIRQ(ADCx_IRQn)\r\n\r\n    (#) Optionally, in case of usage of DMA:\r\n         (++) Deinitialize the DMA\r\n              using function HAL_DMA_Init().\r\n         (++) Disable the NVIC for DMA\r\n              using function HAL_NVIC_EnableIRQ(DMAx_Channelx_IRQn)\r\n\r\n    [..]\r\n\r\n    @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup ADC ADC\r\n * @brief ADC HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_ADC_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup ADC_Private_Constants ADC Private Constants\r\n * @{\r\n */\r\n\r\n/* Timeout values for ADC enable and disable settling time.                 */\r\n/* Values defined to be higher than worst cases: low clocks freq,           */\r\n/* maximum prescaler.                                                       */\r\n/* Ex of profile low frequency : Clock source at 0.1 MHz, ADC clock         */\r\n/* prescaler 4, sampling time 12.5 ADC clock cycles, resolution 12 bits.    */\r\n/* Unit: ms                                                                 */\r\n#define ADC_ENABLE_TIMEOUT  2U\r\n#define ADC_DISABLE_TIMEOUT 2U\r\n\r\n/* Delay for ADC stabilization time.                                        */\r\n/* Maximum delay is 1us (refer to device datasheet, parameter tSTAB).       */\r\n/* Unit: us                                                                 */\r\n#define ADC_STAB_DELAY_US 1U\r\n\r\n/* Delay for temperature sensor stabilization time.                         */\r\n/* Maximum delay is 10us (refer to device datasheet, parameter tSTART).     */\r\n/* Unit: us                                                                 */\r\n#define ADC_TEMPSENSOR_DELAY_US 10U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @defgroup ADC_Private_Functions ADC Private Functions\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @defgroup ADC_Exported_Functions ADC Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup ADC_Exported_Functions_Group1 Initialization/de-initialization functions\r\n  * @brief    Initialization and Configuration functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n              ##### Initialization and de-initialization functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Initialize and configure the ADC.\r\n      (+) De-initialize the ADC.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initializes the ADC peripheral and regular group according to\r\n *         parameters specified in structure \"ADC_InitTypeDef\".\r\n * @note   As prerequisite, ADC clock must be configured at RCC top level\r\n *         (clock source APB2).\r\n *         See commented example code below that can be copied and uncommented\r\n *         into HAL_ADC_MspInit().\r\n * @note   Possibility to update parameters on the fly:\r\n *         This function initializes the ADC MSP (HAL_ADC_MspInit()) only when\r\n *         coming from ADC state reset. Following calls to this function can\r\n *         be used to reconfigure some parameters of ADC_InitTypeDef\r\n *         structure on the fly, without modifying MSP configuration. If ADC\r\n *         MSP has to be modified again, HAL_ADC_DeInit() must be called\r\n *         before HAL_ADC_Init().\r\n *         The setting of these parameters is conditioned to ADC state.\r\n *         For parameters constraints, see comments of structure\r\n *         \"ADC_InitTypeDef\".\r\n * @note   This function configures the ADC within 2 scopes: scope of entire\r\n *         ADC and scope of regular group. For parameters details, see comments\r\n *         of structure \"ADC_InitTypeDef\".\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n  uint32_t          tmp_cr1        = 0U;\r\n  uint32_t          tmp_cr2        = 0U;\r\n  uint32_t          tmp_sqr1       = 0U;\r\n\r\n  /* Check ADC handle */\r\n  if (hadc == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_DATA_ALIGN(hadc->Init.DataAlign));\r\n  assert_param(IS_ADC_SCAN_MODE(hadc->Init.ScanConvMode));\r\n  assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));\r\n  assert_param(IS_ADC_EXTTRIG(hadc->Init.ExternalTrigConv));\r\n\r\n  if (hadc->Init.ScanConvMode != ADC_SCAN_DISABLE) {\r\n    assert_param(IS_ADC_REGULAR_NB_CONV(hadc->Init.NbrOfConversion));\r\n    assert_param(IS_FUNCTIONAL_STATE(hadc->Init.DiscontinuousConvMode));\r\n    if (hadc->Init.DiscontinuousConvMode != DISABLE) {\r\n      assert_param(IS_ADC_REGULAR_DISCONT_NUMBER(hadc->Init.NbrOfDiscConversion));\r\n    }\r\n  }\r\n\r\n  /* As prerequisite, into HAL_ADC_MspInit(), ADC clock must be configured    */\r\n  /* at RCC top level.                                                        */\r\n  /* Refer to header of this file for more details on clock enabling          */\r\n  /* procedure.                                                               */\r\n\r\n  /* Actions performed only if ADC is coming from state reset:                */\r\n  /* - Initialization of ADC MSP                                              */\r\n  if (hadc->State == HAL_ADC_STATE_RESET) {\r\n    /* Initialize ADC error code */\r\n    ADC_CLEAR_ERRORCODE(hadc);\r\n\r\n    /* Allocate lock resource and initialize it */\r\n    hadc->Lock = HAL_UNLOCKED;\r\n\r\n    /* Init the low level hardware */\r\n    HAL_ADC_MspInit(hadc);\r\n  }\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC peripheral */\r\n  /* Note: In case of ADC already enabled, precaution to not launch an        */\r\n  /*       unwanted conversion while modifying register CR2 by writing 1 to   */\r\n  /*       bit ADON.                                                          */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Configuration of ADC parameters if previous preliminary actions are      */\r\n  /* correctly completed.                                                     */\r\n  if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL) && (tmp_hal_status == HAL_OK)) {\r\n    /* Set ADC state */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_BUSY_INTERNAL);\r\n\r\n    /* Set ADC parameters */\r\n\r\n    /* Configuration of ADC:                                                  */\r\n    /*  - data alignment                                                      */\r\n    /*  - external trigger to start conversion                                */\r\n    /*  - external trigger polarity (always set to 1, because needed for all  */\r\n    /*    triggers: external trigger of SW start)                             */\r\n    /*  - continuous conversion mode                                          */\r\n    /* Note: External trigger polarity (ADC_CR2_EXTTRIG) is set into          */\r\n    /*       HAL_ADC_Start_xxx functions because if set in this function,     */\r\n    /*       a conversion on injected group would start a conversion also on  */\r\n    /*       regular group after ADC enabling.                                */\r\n    tmp_cr2 |= (hadc->Init.DataAlign | ADC_CFGR_EXTSEL(hadc, hadc->Init.ExternalTrigConv) | ADC_CR2_CONTINUOUS(hadc->Init.ContinuousConvMode));\r\n\r\n    /* Configuration of ADC:                                                  */\r\n    /*  - scan mode                                                           */\r\n    /*  - discontinuous mode disable/enable                                   */\r\n    /*  - discontinuous mode number of conversions                            */\r\n    tmp_cr1 |= (ADC_CR1_SCAN_SET(hadc->Init.ScanConvMode));\r\n\r\n    /* Enable discontinuous mode only if continuous mode is disabled */\r\n    /* Note: If parameter \"Init.ScanConvMode\" is set to disable, parameter    */\r\n    /*       discontinuous is set anyway, but will have no effect on ADC HW.  */\r\n    if (hadc->Init.DiscontinuousConvMode == ENABLE) {\r\n      if (hadc->Init.ContinuousConvMode == DISABLE) {\r\n        /* Enable the selected ADC regular discontinuous mode */\r\n        /* Set the number of channels to be converted in discontinuous mode */\r\n        SET_BIT(tmp_cr1, ADC_CR1_DISCEN | ADC_CR1_DISCONTINUOUS_NUM(hadc->Init.NbrOfDiscConversion));\r\n      } else {\r\n        /* ADC regular group settings continuous and sequencer discontinuous*/\r\n        /* cannot be enabled simultaneously.                                */\r\n\r\n        /* Update ADC state machine to error */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n        /* Set ADC error code to ADC IP internal error */\r\n        SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);\r\n      }\r\n    }\r\n\r\n    /* Update ADC configuration register CR1 with previous settings */\r\n    MODIFY_REG(hadc->Instance->CR1, ADC_CR1_SCAN | ADC_CR1_DISCEN | ADC_CR1_DISCNUM, tmp_cr1);\r\n\r\n    /* Update ADC configuration register CR2 with previous settings */\r\n    MODIFY_REG(hadc->Instance->CR2, ADC_CR2_ALIGN | ADC_CR2_EXTSEL | ADC_CR2_EXTTRIG | ADC_CR2_CONT, tmp_cr2);\r\n\r\n    /* Configuration of regular group sequencer:                              */\r\n    /* - if scan mode is disabled, regular channels sequence length is set to */\r\n    /*   0x00: 1 channel converted (channel on regular rank 1)                */\r\n    /*   Parameter \"NbrOfConversion\" is discarded.                            */\r\n    /*   Note: Scan mode is present by hardware on this device and, if        */\r\n    /*   disabled, discards automatically nb of conversions. Anyway, nb of    */\r\n    /*   conversions is forced to 0x00 for alignment over all STM32 devices.  */\r\n    /* - if scan mode is enabled, regular channels sequence length is set to  */\r\n    /*   parameter \"NbrOfConversion\"                                          */\r\n    if (ADC_CR1_SCAN_SET(hadc->Init.ScanConvMode) == ADC_SCAN_ENABLE) {\r\n      tmp_sqr1 = ADC_SQR1_L_SHIFT(hadc->Init.NbrOfConversion);\r\n    }\r\n\r\n    MODIFY_REG(hadc->Instance->SQR1, ADC_SQR1_L, tmp_sqr1);\r\n\r\n    /* Check back that ADC registers have effectively been configured to      */\r\n    /* ensure of no potential problem of ADC core IP clocking.                */\r\n    /* Check through register CR2 (excluding bits set in other functions:     */\r\n    /* execution control bits (ADON, JSWSTART, SWSTART), regular group bits   */\r\n    /* (DMA), injected group bits (JEXTTRIG and JEXTSEL), channel internal    */\r\n    /* measurement path bit (TSVREFE).                                        */\r\n    if (READ_BIT(hadc->Instance->CR2, ~(ADC_CR2_ADON | ADC_CR2_DMA | ADC_CR2_SWSTART | ADC_CR2_JSWSTART | ADC_CR2_JEXTTRIG | ADC_CR2_JEXTSEL | ADC_CR2_TSVREFE)) == tmp_cr2) {\r\n      /* Set ADC error code to none */\r\n      ADC_CLEAR_ERRORCODE(hadc);\r\n\r\n      /* Set the ADC state */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_READY);\r\n    } else {\r\n      /* Update ADC state machine to error */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n      /* Set ADC error code to ADC IP internal error */\r\n      SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);\r\n\r\n      tmp_hal_status = HAL_ERROR;\r\n    }\r\n\r\n  } else {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n    tmp_hal_status = HAL_ERROR;\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Deinitialize the ADC peripheral registers to their default reset\r\n *         values, with deinitialization of the ADC MSP.\r\n *         If needed, the example code can be copied and uncommented into\r\n *         function HAL_ADC_MspDeInit().\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_DeInit(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check ADC handle */\r\n  if (hadc == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Set ADC state */\r\n  SET_BIT(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL);\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Configuration of ADC parameters if previous preliminary actions are      */\r\n  /* correctly completed.                                                     */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* ========== Reset ADC registers ========== */\r\n\r\n    /* Reset register SR */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_AWD | ADC_FLAG_JEOC | ADC_FLAG_EOC | ADC_FLAG_JSTRT | ADC_FLAG_STRT));\r\n\r\n    /* Reset register CR1 */\r\n    CLEAR_BIT(hadc->Instance->CR1, (ADC_CR1_AWDEN | ADC_CR1_JAWDEN | ADC_CR1_DISCNUM | ADC_CR1_JDISCEN | ADC_CR1_DISCEN | ADC_CR1_JAUTO | ADC_CR1_AWDSGL | ADC_CR1_SCAN | ADC_CR1_JEOCIE |\r\n                                    ADC_CR1_AWDIE | ADC_CR1_EOCIE | ADC_CR1_AWDCH));\r\n\r\n    /* Reset register CR2 */\r\n    CLEAR_BIT(hadc->Instance->CR2, (ADC_CR2_TSVREFE | ADC_CR2_SWSTART | ADC_CR2_JSWSTART | ADC_CR2_EXTTRIG | ADC_CR2_EXTSEL | ADC_CR2_JEXTTRIG | ADC_CR2_JEXTSEL | ADC_CR2_ALIGN | ADC_CR2_DMA |\r\n                                    ADC_CR2_RSTCAL | ADC_CR2_CAL | ADC_CR2_CONT | ADC_CR2_ADON));\r\n\r\n    /* Reset register SMPR1 */\r\n    CLEAR_BIT(hadc->Instance->SMPR1, (ADC_SMPR1_SMP17 | ADC_SMPR1_SMP16 | ADC_SMPR1_SMP15 | ADC_SMPR1_SMP14 | ADC_SMPR1_SMP13 | ADC_SMPR1_SMP12 | ADC_SMPR1_SMP11 | ADC_SMPR1_SMP10));\r\n\r\n    /* Reset register SMPR2 */\r\n    CLEAR_BIT(hadc->Instance->SMPR2,\r\n              (ADC_SMPR2_SMP9 | ADC_SMPR2_SMP8 | ADC_SMPR2_SMP7 | ADC_SMPR2_SMP6 | ADC_SMPR2_SMP5 | ADC_SMPR2_SMP4 | ADC_SMPR2_SMP3 | ADC_SMPR2_SMP2 | ADC_SMPR2_SMP1 | ADC_SMPR2_SMP0));\r\n\r\n    /* Reset register JOFR1 */\r\n    CLEAR_BIT(hadc->Instance->JOFR1, ADC_JOFR1_JOFFSET1);\r\n    /* Reset register JOFR2 */\r\n    CLEAR_BIT(hadc->Instance->JOFR2, ADC_JOFR2_JOFFSET2);\r\n    /* Reset register JOFR3 */\r\n    CLEAR_BIT(hadc->Instance->JOFR3, ADC_JOFR3_JOFFSET3);\r\n    /* Reset register JOFR4 */\r\n    CLEAR_BIT(hadc->Instance->JOFR4, ADC_JOFR4_JOFFSET4);\r\n\r\n    /* Reset register HTR */\r\n    CLEAR_BIT(hadc->Instance->HTR, ADC_HTR_HT);\r\n    /* Reset register LTR */\r\n    CLEAR_BIT(hadc->Instance->LTR, ADC_LTR_LT);\r\n\r\n    /* Reset register SQR1 */\r\n    CLEAR_BIT(hadc->Instance->SQR1, ADC_SQR1_L | ADC_SQR1_SQ16 | ADC_SQR1_SQ15 | ADC_SQR1_SQ14 | ADC_SQR1_SQ13);\r\n\r\n    /* Reset register SQR1 */\r\n    CLEAR_BIT(hadc->Instance->SQR1, ADC_SQR1_L | ADC_SQR1_SQ16 | ADC_SQR1_SQ15 | ADC_SQR1_SQ14 | ADC_SQR1_SQ13);\r\n\r\n    /* Reset register SQR2 */\r\n    CLEAR_BIT(hadc->Instance->SQR2, ADC_SQR2_SQ12 | ADC_SQR2_SQ11 | ADC_SQR2_SQ10 | ADC_SQR2_SQ9 | ADC_SQR2_SQ8 | ADC_SQR2_SQ7);\r\n\r\n    /* Reset register SQR3 */\r\n    CLEAR_BIT(hadc->Instance->SQR3, ADC_SQR3_SQ6 | ADC_SQR3_SQ5 | ADC_SQR3_SQ4 | ADC_SQR3_SQ3 | ADC_SQR3_SQ2 | ADC_SQR3_SQ1);\r\n\r\n    /* Reset register JSQR */\r\n    CLEAR_BIT(hadc->Instance->JSQR, ADC_JSQR_JL | ADC_JSQR_JSQ4 | ADC_JSQR_JSQ3 | ADC_JSQR_JSQ2 | ADC_JSQR_JSQ1);\r\n\r\n    /* Reset register JSQR */\r\n    CLEAR_BIT(hadc->Instance->JSQR, ADC_JSQR_JL | ADC_JSQR_JSQ4 | ADC_JSQR_JSQ3 | ADC_JSQR_JSQ2 | ADC_JSQR_JSQ1);\r\n\r\n    /* Reset register DR */\r\n    /* bits in access mode read only, no direct reset applicable*/\r\n\r\n    /* Reset registers JDR1, JDR2, JDR3, JDR4 */\r\n    /* bits in access mode read only, no direct reset applicable*/\r\n\r\n    /* ========== Hard reset ADC peripheral ========== */\r\n    /* Performs a global reset of the entire ADC peripheral: ADC state is     */\r\n    /* forced to a similar state after device power-on.                       */\r\n    /* If needed, copy-paste and uncomment the following reset code into      */\r\n    /* function \"void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc)\":              */\r\n    /*                                                                        */\r\n    /*  __HAL_RCC_ADC1_FORCE_RESET()                                          */\r\n    /*  __HAL_RCC_ADC1_RELEASE_RESET()                                        */\r\n\r\n    /* DeInit the low level hardware */\r\n    HAL_ADC_MspDeInit(hadc);\r\n\r\n    /* Set ADC error code to none */\r\n    ADC_CLEAR_ERRORCODE(hadc);\r\n\r\n    /* Set ADC state */\r\n    hadc->State = HAL_ADC_STATE_RESET;\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the ADC MSP.\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\n__weak void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hadc);\r\n  /* NOTE : This function should not be modified. When the callback is needed,\r\n            function HAL_ADC_MspInit must be implemented in the user file.\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the ADC MSP.\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\n__weak void HAL_ADC_MspDeInit(ADC_HandleTypeDef *hadc) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hadc);\r\n  /* NOTE : This function should not be modified. When the callback is needed,\r\n            function HAL_ADC_MspDeInit must be implemented in the user file.\r\n   */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Exported_Functions_Group2 IO operation functions\r\n *  @brief    Input and Output operation functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### IO operation functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Start conversion of regular group.\r\n      (+) Stop conversion of regular group.\r\n      (+) Poll for conversion complete on regular group.\r\n      (+) Poll for conversion event.\r\n      (+) Get result of regular channel conversion.\r\n      (+) Start conversion of regular group and enable interruptions.\r\n      (+) Stop conversion of regular group and disable interruptions.\r\n      (+) Handle ADC interrupt request\r\n      (+) Start conversion of regular group and enable DMA transfer.\r\n      (+) Stop conversion of regular group and disable ADC DMA transfer.\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Enables ADC, starts conversion of regular group.\r\n *         Interruptions enabled in this function: None.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Enable the ADC peripheral */\r\n  tmp_hal_status = ADC_Enable(hadc);\r\n\r\n  /* Start conversion if ADC is effectively enabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state                                                          */\r\n    /* - Clear state bitfield related to regular group conversion results     */\r\n    /* - Set state bitfield related to regular operation                      */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC, HAL_ADC_STATE_REG_BUSY);\r\n\r\n    /* Set group injected state (from auto-injection) and multimode state     */\r\n    /* for all cases of multimode: independent mode, multimode ADC master     */\r\n    /* or multimode ADC slave (for devices with several ADCs):                */\r\n    if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      /* Set ADC state (ADC independent or master) */\r\n      CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n      /* If conversions on group regular are also triggering group injected,  */\r\n      /* update ADC state.                                                    */\r\n      if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) {\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n      }\r\n    } else {\r\n      /* Set ADC state (ADC slave) */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n      /* If conversions on group regular are also triggering group injected,  */\r\n      /* update ADC state.                                                    */\r\n      if (ADC_MULTIMODE_AUTO_INJECTED(hadc)) {\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n      }\r\n    }\r\n\r\n    /* State machine update: Check if an injected conversion is ongoing */\r\n    if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n      /* Reset ADC error code fields related to conversions on group regular */\r\n      CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA));\r\n    } else {\r\n      /* Reset ADC all error code fields */\r\n      ADC_CLEAR_ERRORCODE(hadc);\r\n    }\r\n\r\n    /* Process unlocked */\r\n    /* Unlock before starting ADC conversions: in case of potential           */\r\n    /* interruption, to let the process to ADC IRQ Handler.                   */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    /* Clear regular group conversion flag */\r\n    /* (To ensure of no unknown state from potential previous ADC operations) */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC);\r\n\r\n    /* Enable conversion of regular group.                                    */\r\n    /* If software start has been selected, conversion starts immediately.    */\r\n    /* If external trigger has been selected, conversion will start at next   */\r\n    /* trigger event.                                                         */\r\n    /* Case of multimode enabled:                                             */\r\n    /*  - if ADC is slave, ADC is enabled only (conversion is not started).   */\r\n    /*  - if ADC is master, ADC is enabled and conversion is started.         */\r\n    /* If ADC is master, ADC is enabled and conversion is started.            */\r\n    /* Note: Alternate trigger for single conversion could be to force an     */\r\n    /*       additional set of bit ADON \"hadc->Instance->CR2 |= ADC_CR2_ADON;\"*/\r\n    if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      /* Start ADC conversion on regular group with SW start */\r\n      SET_BIT(hadc->Instance->CR2, (ADC_CR2_SWSTART | ADC_CR2_EXTTRIG));\r\n    } else {\r\n      /* Start ADC conversion on regular group with external trigger */\r\n      SET_BIT(hadc->Instance->CR2, ADC_CR2_EXTTRIG);\r\n    }\r\n  } else {\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop ADC conversion of regular group (and injected channels in\r\n *         case of auto_injection mode), disable ADC peripheral.\r\n * @note:  ADC peripheral disable is forcing stop of potential\r\n *         conversion on injected group. If injected group is under use, it\r\n *         should be preliminarily stopped using HAL_ADCEx_InjectedStop function.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status.\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Check if ADC is effectively disabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Wait for regular group conversion to be completed.\r\n * @note   This function cannot be used in a particular setup: ADC configured\r\n *         in DMA mode.\r\n *         In this case, DMA resets the flag EOC and polling cannot be\r\n *         performed on each conversion.\r\n * @note   On STM32F1 devices, limitation in case of sequencer enabled\r\n *         (several ranks selected): polling cannot be done on each\r\n *         conversion inside the sequence. In this case, polling is replaced by\r\n *         wait for maximum conversion time.\r\n * @param  hadc: ADC handle\r\n * @param  Timeout: Timeout value in millisecond.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Variables for polling in case of scan mode enabled and polling for each  */\r\n  /* conversion.                                                              */\r\n  __IO uint32_t Conversion_Timeout_CPU_cycles     = 0U;\r\n  uint32_t      Conversion_Timeout_CPU_cycles_max = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Get tick count */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Verification that ADC configuration is compliant with polling for        */\r\n  /* each conversion:                                                         */\r\n  /* Particular case is ADC configured in DMA mode                            */\r\n  if (HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_DMA)) {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Polling for end of conversion: differentiation if single/sequence        */\r\n  /* conversion.                                                              */\r\n  /*  - If single conversion for regular group (Scan mode disabled or enabled */\r\n  /*    with NbrOfConversion =1), flag EOC is used to determine the           */\r\n  /*    conversion completion.                                                */\r\n  /*  - If sequence conversion for regular group (scan mode enabled and       */\r\n  /*    NbrOfConversion >=2), flag EOC is set only at the end of the          */\r\n  /*    sequence.                                                             */\r\n  /*    To poll for each conversion, the maximum conversion time is computed  */\r\n  /*    from ADC conversion time (selected sampling time + conversion time of */\r\n  /*    12.5 ADC clock cycles) and APB2/ADC clock prescalers (depending on    */\r\n  /*    settings, conversion time range can be from 28 to 32256 CPU cycles).  */\r\n  /*    As flag EOC is not set after each conversion, no timeout status can   */\r\n  /*    be set.                                                               */\r\n  if (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_SCAN) && HAL_IS_BIT_CLR(hadc->Instance->SQR1, ADC_SQR1_L)) {\r\n    /* Wait until End of Conversion flag is raised */\r\n    while (HAL_IS_BIT_CLR(hadc->Instance->SR, ADC_FLAG_EOC)) {\r\n      /* Check if timeout is disabled (set to infinite wait) */\r\n      if (Timeout != HAL_MAX_DELAY) {\r\n        if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n          /* Update ADC state machine to timeout */\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);\r\n\r\n          /* Process unlocked */\r\n          __HAL_UNLOCK(hadc);\r\n\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n  } else {\r\n    /* Replace polling by wait for maximum conversion time */\r\n    /*  - Computation of CPU clock cycles corresponding to ADC clock cycles   */\r\n    /*    and ADC maximum conversion cycles on all channels.                  */\r\n    /*  - Wait for the expected ADC clock cycles delay                        */\r\n    Conversion_Timeout_CPU_cycles_max = ((SystemCoreClock / HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC)) * ADC_CONVCYCLES_MAX_RANGE(hadc));\r\n\r\n    while (Conversion_Timeout_CPU_cycles < Conversion_Timeout_CPU_cycles_max) {\r\n      /* Check if timeout is disabled (set to infinite wait) */\r\n      if (Timeout != HAL_MAX_DELAY) {\r\n        if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n          /* Update ADC state machine to timeout */\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);\r\n\r\n          /* Process unlocked */\r\n          __HAL_UNLOCK(hadc);\r\n\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n      Conversion_Timeout_CPU_cycles++;\r\n    }\r\n  }\r\n\r\n  /* Clear regular group conversion flag */\r\n  __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_STRT | ADC_FLAG_EOC);\r\n\r\n  /* Update ADC state machine */\r\n  SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC);\r\n\r\n  /* Determine whether any further conversion upcoming on group regular       */\r\n  /* by external trigger, continuous mode or scan sequence on going.          */\r\n  /* Note: On STM32F1 devices, in case of sequencer enabled                   */\r\n  /*       (several ranks selected), end of conversion flag is raised         */\r\n  /*       at the end of the sequence.                                        */\r\n  if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && (hadc->Init.ContinuousConvMode == DISABLE)) {\r\n    /* Set ADC state */\r\n    CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);\r\n\r\n    if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_READY);\r\n    }\r\n  }\r\n\r\n  /* Return ADC state */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Poll for conversion event.\r\n * @param  hadc: ADC handle\r\n * @param  EventType: the ADC event type.\r\n *          This parameter can be one of the following values:\r\n *            @arg ADC_AWD_EVENT: ADC Analog watchdog event.\r\n * @param  Timeout: Timeout value in millisecond.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_PollForEvent(ADC_HandleTypeDef *hadc, uint32_t EventType, uint32_t Timeout) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_EVENT_TYPE(EventType));\r\n\r\n  /* Get tick count */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Check selected event flag */\r\n  while (__HAL_ADC_GET_FLAG(hadc, EventType) == RESET) {\r\n    /* Check if timeout is disabled (set to infinite wait) */\r\n    if (Timeout != HAL_MAX_DELAY) {\r\n      if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n        /* Update ADC state machine to timeout */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);\r\n\r\n        /* Process unlocked */\r\n        __HAL_UNLOCK(hadc);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Analog watchdog (level out of window) event */\r\n  /* Set ADC state */\r\n  SET_BIT(hadc->State, HAL_ADC_STATE_AWD1);\r\n\r\n  /* Clear ADC analog watchdog flag */\r\n  __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_AWD);\r\n\r\n  /* Return ADC state */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Enables ADC, starts conversion of regular group with interruption.\r\n *         Interruptions enabled in this function:\r\n *          - EOC (end of conversion of regular group)\r\n *         Each of these interruptions has its dedicated callback function.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Enable the ADC peripheral */\r\n  tmp_hal_status = ADC_Enable(hadc);\r\n\r\n  /* Start conversion if ADC is effectively enabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state                                                          */\r\n    /* - Clear state bitfield related to regular group conversion results     */\r\n    /* - Set state bitfield related to regular operation                      */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR | HAL_ADC_STATE_REG_EOSMP, HAL_ADC_STATE_REG_BUSY);\r\n\r\n    /* Set group injected state (from auto-injection) and multimode state     */\r\n    /* for all cases of multimode: independent mode, multimode ADC master     */\r\n    /* or multimode ADC slave (for devices with several ADCs):                */\r\n    if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      /* Set ADC state (ADC independent or master) */\r\n      CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n      /* If conversions on group regular are also triggering group injected,  */\r\n      /* update ADC state.                                                    */\r\n      if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) {\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n      }\r\n    } else {\r\n      /* Set ADC state (ADC slave) */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n      /* If conversions on group regular are also triggering group injected,  */\r\n      /* update ADC state.                                                    */\r\n      if (ADC_MULTIMODE_AUTO_INJECTED(hadc)) {\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n      }\r\n    }\r\n\r\n    /* State machine update: Check if an injected conversion is ongoing */\r\n    if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n      /* Reset ADC error code fields related to conversions on group regular */\r\n      CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA));\r\n    } else {\r\n      /* Reset ADC all error code fields */\r\n      ADC_CLEAR_ERRORCODE(hadc);\r\n    }\r\n\r\n    /* Process unlocked */\r\n    /* Unlock before starting ADC conversions: in case of potential           */\r\n    /* interruption, to let the process to ADC IRQ Handler.                   */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    /* Clear regular group conversion flag and overrun flag */\r\n    /* (To ensure of no unknown state from potential previous ADC operations) */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC);\r\n\r\n    /* Enable end of conversion interrupt for regular group */\r\n    __HAL_ADC_ENABLE_IT(hadc, ADC_IT_EOC);\r\n\r\n    /* Enable conversion of regular group.                                    */\r\n    /* If software start has been selected, conversion starts immediately.    */\r\n    /* If external trigger has been selected, conversion will start at next   */\r\n    /* trigger event.                                                         */\r\n    /* Case of multimode enabled:                                             */\r\n    /*  - if ADC is slave, ADC is enabled only (conversion is not started).   */\r\n    /*  - if ADC is master, ADC is enabled and conversion is started.         */\r\n    if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      /* Start ADC conversion on regular group with SW start */\r\n      SET_BIT(hadc->Instance->CR2, (ADC_CR2_SWSTART | ADC_CR2_EXTTRIG));\r\n    } else {\r\n      /* Start ADC conversion on regular group with external trigger */\r\n      SET_BIT(hadc->Instance->CR2, ADC_CR2_EXTTRIG);\r\n    }\r\n  } else {\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop ADC conversion of regular group (and injected group in\r\n *         case of auto_injection mode), disable interrution of\r\n *         end-of-conversion, disable ADC peripheral.\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Check if ADC is effectively disabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Disable ADC end of conversion interrupt for regular group */\r\n    __HAL_ADC_DISABLE_IT(hadc, ADC_IT_EOC);\r\n\r\n    /* Set ADC state */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Enables ADC, starts conversion of regular group and transfers result\r\n *         through DMA.\r\n *         Interruptions enabled in this function:\r\n *          - DMA transfer complete\r\n *          - DMA half transfer\r\n *         Each of these interruptions has its dedicated callback function.\r\n * @note   For devices with several ADCs: This function is for single-ADC mode\r\n *         only. For multimode, use the dedicated MultimodeStart function.\r\n * @note   On STM32F1 devices, only ADC1 and ADC3 (ADC availability depending\r\n *         on devices) have DMA capability.\r\n *         ADC2 converted data can be transferred in dual ADC mode using DMA\r\n *         of ADC1 (ADC master in multimode).\r\n *         In case of using ADC1 with DMA on a device featuring 2 ADC\r\n *         instances: ADC1 conversion register DR contains ADC1 conversion\r\n *         result (ADC1 register DR bits 0 to 11) and, additionally, ADC2 last\r\n *         conversion result (ADC1 register DR bits 16 to 27). Therefore, to\r\n *         have DMA transferring the conversion results of ADC1 only, DMA must\r\n *         be configured to transfer size: half word.\r\n * @param  hadc: ADC handle\r\n * @param  pData: The destination Buffer address.\r\n * @param  Length: The length of data to be transferred from ADC peripheral to memory.\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_DMA_CAPABILITY_INSTANCE(hadc->Instance));\r\n\r\n  /* Verification if multimode is disabled (for devices with several ADC)     */\r\n  /* If multimode is enabled, dedicated function multimode conversion         */\r\n  /* start DMA must be used.                                                  */\r\n  if (ADC_MULTIMODE_IS_ENABLE(hadc) == RESET) {\r\n    /* Process locked */\r\n    __HAL_LOCK(hadc);\r\n\r\n    /* Enable the ADC peripheral */\r\n    tmp_hal_status = ADC_Enable(hadc);\r\n\r\n    /* Start conversion if ADC is effectively enabled */\r\n    if (tmp_hal_status == HAL_OK) {\r\n      /* Set ADC state                                                        */\r\n      /* - Clear state bitfield related to regular group conversion results   */\r\n      /* - Set state bitfield related to regular operation                    */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_REG_OVR | HAL_ADC_STATE_REG_EOSMP, HAL_ADC_STATE_REG_BUSY);\r\n\r\n      /* Set group injected state (from auto-injection) and multimode state     */\r\n      /* for all cases of multimode: independent mode, multimode ADC master     */\r\n      /* or multimode ADC slave (for devices with several ADCs):                */\r\n      if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n        /* Set ADC state (ADC independent or master) */\r\n        CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n        /* If conversions on group regular are also triggering group injected,  */\r\n        /* update ADC state.                                                    */\r\n        if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) {\r\n          ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n        }\r\n      } else {\r\n        /* Set ADC state (ADC slave) */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n\r\n        /* If conversions on group regular are also triggering group injected,  */\r\n        /* update ADC state.                                                    */\r\n        if (ADC_MULTIMODE_AUTO_INJECTED(hadc)) {\r\n          ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n        }\r\n      }\r\n\r\n      /* State machine update: Check if an injected conversion is ongoing */\r\n      if (HAL_IS_BIT_SET(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n        /* Reset ADC error code fields related to conversions on group regular */\r\n        CLEAR_BIT(hadc->ErrorCode, (HAL_ADC_ERROR_OVR | HAL_ADC_ERROR_DMA));\r\n      } else {\r\n        /* Reset ADC all error code fields */\r\n        ADC_CLEAR_ERRORCODE(hadc);\r\n      }\r\n\r\n      /* Process unlocked */\r\n      /* Unlock before starting ADC conversions: in case of potential         */\r\n      /* interruption, to let the process to ADC IRQ Handler.                 */\r\n      __HAL_UNLOCK(hadc);\r\n\r\n      /* Set the DMA transfer complete callback */\r\n      hadc->DMA_Handle->XferCpltCallback = ADC_DMAConvCplt;\r\n\r\n      /* Manage ADC and DMA start: ADC overrun interruption, DMA start, ADC   */\r\n      /* start (in case of SW start):                                         */\r\n\r\n      /* Clear regular group conversion flag and overrun flag */\r\n      /* (To ensure of no unknown state from potential previous ADC           */\r\n      /* operations)                                                          */\r\n      __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC);\r\n\r\n      /* Enable ADC DMA mode */\r\n      SET_BIT(hadc->Instance->CR2, ADC_CR2_DMA);\r\n\r\n      /* Start the DMA channel */\r\n      HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&hadc->Instance->DR, (uint32_t)pData, Length);\r\n\r\n      /* Enable conversion of regular group.                                  */\r\n      /* If software start has been selected, conversion starts immediately.  */\r\n      /* If external trigger has been selected, conversion will start at next */\r\n      /* trigger event.                                                       */\r\n      if (ADC_IS_SOFTWARE_START_REGULAR(hadc)) {\r\n        /* Start ADC conversion on regular group with SW start */\r\n        SET_BIT(hadc->Instance->CR2, (ADC_CR2_SWSTART | ADC_CR2_EXTTRIG));\r\n      } else {\r\n        /* Start ADC conversion on regular group with external trigger */\r\n        SET_BIT(hadc->Instance->CR2, ADC_CR2_EXTTRIG);\r\n      }\r\n    } else {\r\n      /* Process unlocked */\r\n      __HAL_UNLOCK(hadc);\r\n    }\r\n  } else {\r\n    tmp_hal_status = HAL_ERROR;\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop ADC conversion of regular group (and injected group in\r\n *         case of auto_injection mode), disable ADC DMA transfer, disable\r\n *         ADC peripheral.\r\n * @note:  ADC peripheral disable is forcing stop of potential\r\n *         conversion on injected group. If injected group is under use, it\r\n *         should be preliminarily stopped using HAL_ADCEx_InjectedStop function.\r\n * @note   For devices with several ADCs: This function is for single-ADC mode\r\n *         only. For multimode, use the dedicated MultimodeStop function.\r\n * @note   On STM32F1 devices, only ADC1 and ADC3 (ADC availability depending\r\n *         on devices) have DMA capability.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status.\r\n */\r\nHAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_DMA_CAPABILITY_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Check if ADC is effectively disabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Disable ADC DMA mode */\r\n    CLEAR_BIT(hadc->Instance->CR2, ADC_CR2_DMA);\r\n\r\n    /* Disable the DMA channel (in case of DMA in circular mode or stop while */\r\n    /* DMA transfer is on going)                                              */\r\n    tmp_hal_status = HAL_DMA_Abort(hadc->DMA_Handle);\r\n\r\n    /* Check if DMA channel effectively disabled */\r\n    if (tmp_hal_status == HAL_OK) {\r\n      /* Set ADC state */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n    } else {\r\n      /* Update ADC state machine to error */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_DMA);\r\n    }\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Get ADC regular group conversion result.\r\n * @note   Reading register DR automatically clears ADC flag EOC\r\n *         (ADC group regular end of unitary conversion).\r\n * @note   This function does not clear ADC flag EOS\r\n *         (ADC group regular end of sequence conversion).\r\n *         Occurrence of flag EOS rising:\r\n *          - If sequencer is composed of 1 rank, flag EOS is equivalent\r\n *            to flag EOC.\r\n *          - If sequencer is composed of several ranks, during the scan\r\n *            sequence flag EOC only is raised, at the end of the scan sequence\r\n *            both flags EOC and EOS are raised.\r\n *         To clear this flag, either use function:\r\n *         in programming model IT: @ref HAL_ADC_IRQHandler(), in programming\r\n *         model polling: @ref HAL_ADC_PollForConversion()\r\n *         or @ref __HAL_ADC_CLEAR_FLAG(&hadc, ADC_FLAG_EOS).\r\n * @param  hadc: ADC handle\r\n * @retval ADC group regular conversion data\r\n */\r\nuint32_t HAL_ADC_GetValue(ADC_HandleTypeDef *hadc) {\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Note: EOC flag is not cleared here by software because automatically     */\r\n  /*       cleared by hardware when reading register DR.                      */\r\n\r\n  /* Return ADC converted value */\r\n  return hadc->Instance->DR;\r\n}\r\n\r\n/**\r\n * @brief  Handles ADC interrupt request\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\nvoid HAL_ADC_IRQHandler(ADC_HandleTypeDef *hadc) {\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));\r\n  assert_param(IS_ADC_REGULAR_NB_CONV(hadc->Init.NbrOfConversion));\r\n\r\n  /* ========== Check End of Conversion flag for regular group ========== */\r\n  if (__HAL_ADC_GET_IT_SOURCE(hadc, ADC_IT_EOC)) {\r\n    if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOC)) {\r\n      /* Update state machine on conversion status if not in error state */\r\n      if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL)) {\r\n        /* Set ADC state */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC);\r\n      }\r\n\r\n      /* Determine whether any further conversion upcoming on group regular   */\r\n      /* by external trigger, continuous mode or scan sequence on going.      */\r\n      /* Note: On STM32F1 devices, in case of sequencer enabled               */\r\n      /*       (several ranks selected), end of conversion flag is raised     */\r\n      /*       at the end of the sequence.                                    */\r\n      if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && (hadc->Init.ContinuousConvMode == DISABLE)) {\r\n        /* Disable ADC end of conversion interrupt on group regular */\r\n        __HAL_ADC_DISABLE_IT(hadc, ADC_IT_EOC);\r\n\r\n        /* Set ADC state */\r\n        CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);\r\n\r\n        if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_READY);\r\n        }\r\n      }\r\n\r\n      /* Clear regular group conversion flag */\r\n      __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_STRT | ADC_FLAG_EOC);\r\n    }\r\n  }\r\n\r\n  /* ========== Check End of Conversion flag for injected group ========== */\r\n  if (__HAL_ADC_GET_IT_SOURCE(hadc, ADC_IT_JEOC)) {\r\n    if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_JEOC)) {\r\n      /* Update state machine on conversion status if not in error state */\r\n      if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL)) {\r\n        /* Set ADC state */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_INJ_EOC);\r\n      }\r\n\r\n      /* Determine whether any further conversion upcoming on group injected  */\r\n      /* by external trigger, scan sequence on going or by automatic injected */\r\n      /* conversion from group regular (same conditions as group regular      */\r\n      /* interruption disabling above).                                       */\r\n      /* Note: On STM32F1 devices, in case of sequencer enabled               */\r\n      /*       (several ranks selected), end of conversion flag is raised     */\r\n      /*       at the end of the sequence.                                    */\r\n      if (ADC_IS_SOFTWARE_START_INJECTED(hadc) || (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO) && (ADC_IS_SOFTWARE_START_REGULAR(hadc) && (hadc->Init.ContinuousConvMode == DISABLE)))) {\r\n        /* Disable ADC end of conversion interrupt on group injected */\r\n        __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOC);\r\n\r\n        /* Set ADC state */\r\n        CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY);\r\n\r\n        if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) {\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_READY);\r\n        }\r\n      }\r\n\r\n      /* Conversion complete callback */\r\n      HAL_ADCEx_InjectedConvCpltCallback(hadc);\r\n\r\n      /* Clear injected group conversion flag */\r\n      __HAL_ADC_CLEAR_FLAG(hadc, (ADC_FLAG_JSTRT | ADC_FLAG_JEOC));\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Exported_Functions_Group3 Peripheral Control functions\r\n *  @brief    Peripheral Control functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n             ##### Peripheral Control functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Configure channels on regular group\r\n      (+) Configure the analog watchdog\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Configures the the selected channel to be linked to the regular\r\n *         group.\r\n * @note   In case of usage of internal measurement channels:\r\n *         Vbat/VrefInt/TempSensor.\r\n *         These internal paths can be be disabled using function\r\n *         HAL_ADC_DeInit().\r\n * @note   Possibility to update parameters on the fly:\r\n *         This function initializes channel into regular group, following\r\n *         calls to this function can be used to reconfigure some parameters\r\n *         of structure \"ADC_ChannelConfTypeDef\" on the fly, without reseting\r\n *         the ADC.\r\n *         The setting of these parameters is conditioned to ADC state.\r\n *         For parameters constraints, see comments of structure\r\n *         \"ADC_ChannelConfTypeDef\".\r\n * @param  hadc: ADC handle\r\n * @param  sConfig: Structure of ADC channel for regular group.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef *hadc, ADC_ChannelConfTypeDef *sConfig) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_CHANNEL(sConfig->Channel));\r\n  assert_param(IS_ADC_REGULAR_RANK(sConfig->Rank));\r\n  assert_param(IS_ADC_SAMPLE_TIME(sConfig->SamplingTime));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Regular sequence configuration */\r\n  /* For Rank 1 to 6 */\r\n  if (sConfig->Rank < 7U) {\r\n    MODIFY_REG(hadc->Instance->SQR3, ADC_SQR3_RK(ADC_SQR3_SQ1, sConfig->Rank), ADC_SQR3_RK(sConfig->Channel, sConfig->Rank));\r\n  }\r\n  /* For Rank 7 to 12 */\r\n  else if (sConfig->Rank < 13U) {\r\n    MODIFY_REG(hadc->Instance->SQR2, ADC_SQR2_RK(ADC_SQR2_SQ7, sConfig->Rank), ADC_SQR2_RK(sConfig->Channel, sConfig->Rank));\r\n  }\r\n  /* For Rank 13 to 16 */\r\n  else {\r\n    MODIFY_REG(hadc->Instance->SQR1, ADC_SQR1_RK(ADC_SQR1_SQ13, sConfig->Rank), ADC_SQR1_RK(sConfig->Channel, sConfig->Rank));\r\n  }\r\n\r\n  /* Channel sampling time configuration */\r\n  /* For channels 10 to 17 */\r\n  if (sConfig->Channel >= ADC_CHANNEL_10) {\r\n    MODIFY_REG(hadc->Instance->SMPR1, ADC_SMPR1(ADC_SMPR1_SMP10, sConfig->Channel), ADC_SMPR1(sConfig->SamplingTime, sConfig->Channel));\r\n  } else /* For channels 0 to 9 */\r\n  {\r\n    MODIFY_REG(hadc->Instance->SMPR2, ADC_SMPR2(ADC_SMPR2_SMP0, sConfig->Channel), ADC_SMPR2(sConfig->SamplingTime, sConfig->Channel));\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Configures the analog watchdog.\r\n * @note   Analog watchdog thresholds can be modified while ADC conversion\r\n *         is on going.\r\n *         In this case, some constraints must be taken into account:\r\n *         the programmed threshold values are effective from the next\r\n *         ADC EOC (end of unitary conversion).\r\n *         Considering that registers write delay may happen due to\r\n *         bus activity, this might cause an uncertainty on the\r\n *         effective timing of the new programmed threshold values.\r\n * @param  hadc: ADC handle\r\n * @param  AnalogWDGConfig: Structure of ADC analog watchdog configuration\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADC_AnalogWDGConfig(ADC_HandleTypeDef *hadc, ADC_AnalogWDGConfTypeDef *AnalogWDGConfig) {\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_ANALOG_WATCHDOG_MODE(AnalogWDGConfig->WatchdogMode));\r\n  assert_param(IS_FUNCTIONAL_STATE(AnalogWDGConfig->ITMode));\r\n  assert_param(IS_ADC_RANGE(AnalogWDGConfig->HighThreshold));\r\n  assert_param(IS_ADC_RANGE(AnalogWDGConfig->LowThreshold));\r\n\r\n  if ((AnalogWDGConfig->WatchdogMode == ADC_ANALOGWATCHDOG_SINGLE_REG) || (AnalogWDGConfig->WatchdogMode == ADC_ANALOGWATCHDOG_SINGLE_INJEC) ||\r\n      (AnalogWDGConfig->WatchdogMode == ADC_ANALOGWATCHDOG_SINGLE_REGINJEC)) {\r\n    assert_param(IS_ADC_CHANNEL(AnalogWDGConfig->Channel));\r\n  }\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Analog watchdog configuration */\r\n\r\n  /* Configure ADC Analog watchdog interrupt */\r\n  if (AnalogWDGConfig->ITMode == ENABLE) {\r\n    /* Enable the ADC Analog watchdog interrupt */\r\n    __HAL_ADC_ENABLE_IT(hadc, ADC_IT_AWD);\r\n  } else {\r\n    /* Disable the ADC Analog watchdog interrupt */\r\n    __HAL_ADC_DISABLE_IT(hadc, ADC_IT_AWD);\r\n  }\r\n\r\n  /* Configuration of analog watchdog:                                        */\r\n  /*  - Set the analog watchdog enable mode: regular and/or injected groups,  */\r\n  /*    one or all channels.                                                  */\r\n  /*  - Set the Analog watchdog channel (is not used if watchdog              */\r\n  /*    mode \"all channels\": ADC_CFGR_AWD1SGL=0).                             */\r\n  MODIFY_REG(hadc->Instance->CR1, ADC_CR1_AWDSGL | ADC_CR1_JAWDEN | ADC_CR1_AWDEN | ADC_CR1_AWDCH, AnalogWDGConfig->WatchdogMode | AnalogWDGConfig->Channel);\r\n\r\n  /* Set the high threshold */\r\n  WRITE_REG(hadc->Instance->HTR, AnalogWDGConfig->HighThreshold);\r\n\r\n  /* Set the low threshold */\r\n  WRITE_REG(hadc->Instance->LTR, AnalogWDGConfig->LowThreshold);\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Exported_Functions_Group4 Peripheral State functions\r\n *  @brief    Peripheral State functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n            ##### Peripheral State and Errors functions #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides functions to get in run-time the status of the\r\n    peripheral.\r\n      (+) Check the ADC state\r\n      (+) Check the ADC error code\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  return the ADC state\r\n * @param  hadc: ADC handle\r\n * @retval HAL state\r\n */\r\nuint32_t HAL_ADC_GetState(ADC_HandleTypeDef *hadc) {\r\n  /* Return ADC state */\r\n  return hadc->State;\r\n}\r\n\r\n/**\r\n * @brief  Return the ADC error code\r\n * @param  hadc: ADC handle\r\n * @retval ADC Error Code\r\n */\r\nuint32_t HAL_ADC_GetError(ADC_HandleTypeDef *hadc) { return hadc->ErrorCode; }\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADC_Private_Functions ADC Private Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Enable the selected ADC.\r\n * @note   Prerequisite condition to use this function: ADC must be disabled\r\n *         and voltage regulator must be enabled (done into HAL_ADC_Init()).\r\n * @param  hadc: ADC handle\r\n * @retval HAL status.\r\n */\r\nHAL_StatusTypeDef ADC_Enable(ADC_HandleTypeDef *hadc) {\r\n  uint32_t      tickstart       = 0U;\r\n  __IO uint32_t wait_loop_index = 0U;\r\n\r\n  /* ADC enable and wait for ADC ready (in case of ADC is disabled or         */\r\n  /* enabling phase not yet completed: flag ADC ready not yet set).           */\r\n  /* Timeout implemented to not be stuck if ADC cannot be enabled (possible   */\r\n  /* causes: ADC clock not running, ...).                                     */\r\n  if (ADC_IS_ENABLE(hadc) == RESET) {\r\n    /* Enable the Peripheral */\r\n    __HAL_ADC_ENABLE(hadc);\r\n\r\n    /* Delay for ADC stabilization time */\r\n    /* Compute number of CPU cycles to wait for */\r\n    wait_loop_index = (ADC_STAB_DELAY_US * (SystemCoreClock / 1000000U));\r\n    while (wait_loop_index != 0U) {\r\n      wait_loop_index--;\r\n    }\r\n\r\n    /* Get tick count */\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait for ADC effectively enabled */\r\n    while (ADC_IS_ENABLE(hadc) == RESET) {\r\n      if ((HAL_GetTick() - tickstart) > ADC_ENABLE_TIMEOUT) {\r\n        /* Update ADC state machine to error */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n        /* Set ADC error code to ADC IP internal error */\r\n        SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);\r\n\r\n        /* Process unlocked */\r\n        __HAL_UNLOCK(hadc);\r\n\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Return HAL status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stop ADC conversion and disable the selected ADC\r\n * @note   Prerequisite condition to use this function: ADC conversions must be\r\n *         stopped to disable the ADC.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status.\r\n */\r\nHAL_StatusTypeDef ADC_ConversionStop_Disable(ADC_HandleTypeDef *hadc) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Verification if ADC is not already disabled */\r\n  if (ADC_IS_ENABLE(hadc) != RESET) {\r\n    /* Disable the ADC peripheral */\r\n    __HAL_ADC_DISABLE(hadc);\r\n\r\n    /* Get tick count */\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait for ADC effectively disabled */\r\n    while (ADC_IS_ENABLE(hadc) != RESET) {\r\n      if ((HAL_GetTick() - tickstart) > ADC_DISABLE_TIMEOUT) {\r\n        /* Update ADC state machine to error */\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n        /* Set ADC error code to ADC IP internal error */\r\n        SET_BIT(hadc->ErrorCode, HAL_ADC_ERROR_INTERNAL);\r\n\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Return HAL status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DMA transfer complete callback.\r\n * @param  hdma: pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid ADC_DMAConvCplt(DMA_HandleTypeDef *hdma) {\r\n  /* Retrieve ADC handle corresponding to current DMA handle */\r\n  ADC_HandleTypeDef *hadc = (ADC_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  /* Update state machine on conversion status if not in error state */\r\n  if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL | HAL_ADC_STATE_ERROR_DMA)) {\r\n    /* Update ADC state machine */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_REG_EOC);\r\n\r\n    /* Determine whether any further conversion upcoming on group regular     */\r\n    /* by external trigger, continuous mode or scan sequence on going.        */\r\n    /* Note: On STM32F1 devices, in case of sequencer enabled                 */\r\n    /*       (several ranks selected), end of conversion flag is raised       */\r\n    /*       at the end of the sequence.                                      */\r\n    if (ADC_IS_SOFTWARE_START_REGULAR(hadc) && (hadc->Init.ContinuousConvMode == DISABLE)) {\r\n      /* Set ADC state */\r\n      CLEAR_BIT(hadc->State, HAL_ADC_STATE_REG_BUSY);\r\n\r\n      if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_INJ_BUSY)) {\r\n        SET_BIT(hadc->State, HAL_ADC_STATE_READY);\r\n      }\r\n    }\r\n\r\n  } else {\r\n    /* Call DMA error callback */\r\n    hadc->DMA_Handle->XferErrorCallback(hdma);\r\n  }\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_ADC_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_adc_ex.c\r\n  * @author  MCD Application Team\r\n  * @brief   This file provides firmware functions to manage the following\r\n  *          functionalities of the Analog to Digital Convertor (ADC)\r\n  *          peripheral:\r\n  *           + Operation functions\r\n  *             ++ Start, stop, get result of conversions of injected\r\n  *                group, using 2 possible modes: polling, interruption.\r\n  *             ++ Multimode feature (available on devices with 2 ADCs or more)\r\n  *             ++ Calibration (ADC automatic self-calibration)\r\n  *           + Control functions\r\n  *             ++ Channels configuration on injected group\r\n  *          Other functions (generic functions) are available in file\r\n  *          \"stm32f1xx_hal_adc.c\".\r\n  *\r\n  @verbatim\r\n  [..]\r\n  (@) Sections \"ADC peripheral features\" and \"How to use this driver\" are\r\n      available in file of generic functions \"stm32f1xx_hal_adc.c\".\r\n  [..]\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup ADCEx ADCEx\r\n * @brief ADC Extension HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_ADC_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup ADCEx_Private_Constants ADCEx Private Constants\r\n * @{\r\n */\r\n\r\n/* Delay for ADC calibration:                                               */\r\n/* Hardware prerequisite before starting a calibration: the ADC must have   */\r\n/* been in power-on state for at least two ADC clock cycles.                */\r\n/* Unit: ADC clock cycles                                                   */\r\n#define ADC_PRECALIBRATION_DELAY_ADCCLOCKCYCLES 2U\r\n\r\n/* Timeout value for ADC calibration                                        */\r\n/* Value defined to be higher than worst cases: low clocks freq,            */\r\n/* maximum prescaler.                                                       */\r\n/* Ex of profile low frequency : Clock source at 0.1 MHz, ADC clock         */\r\n/* prescaler 4, sampling time 12.5 ADC clock cycles, resolution 12 bits.    */\r\n/* Unit: ms                                                                 */\r\n#define ADC_CALIBRATION_TIMEOUT 10U\r\n\r\n/* Delay for temperature sensor stabilization time.                         */\r\n/* Maximum delay is 10us (refer to device datasheet, parameter tSTART).     */\r\n/* Unit: us                                                                 */\r\n#define ADC_TEMPSENSOR_DELAY_US 10U\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n\r\n/** @defgroup ADCEx_Exported_Functions ADCEx Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup ADCEx_Exported_Functions_Group1 Extended Extended IO operation functions\r\n *  @brief    Extended Extended Input and Output operation functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### IO operation functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Start conversion of injected group.\r\n      (+) Stop conversion of injected group.\r\n      (+) Poll for conversion complete on injected group.\r\n      (+) Get result of injected channel conversion.\r\n      (+) Start conversion of injected group and enable interruptions.\r\n      (+) Stop conversion of injected group and disable interruptions.\r\n\r\n      (+) Start multimode and enable DMA transfer.\r\n      (+) Stop multimode and disable ADC DMA transfer.\r\n      (+) Get result of multimode conversion.\r\n\r\n      (+) Perform the ADC self-calibration for single or differential ending.\r\n      (+) Get calibration factors for single or differential ending.\r\n      (+) Set calibration factors for single or differential ending.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Perform an ADC automatic self-calibration\r\n *         Calibration prerequisite: ADC must be disabled (execute this\r\n *         function before HAL_ADC_Start() or after HAL_ADC_Stop() ).\r\n *         During calibration process, ADC is enabled. ADC is let enabled at\r\n *         the completion of this function.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n  uint32_t          tickstart;\r\n  __IO uint32_t     wait_loop_index = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* 1. Calibration prerequisite:                                             */\r\n  /*    - ADC must be disabled for at least two ADC clock cycles in disable   */\r\n  /*      mode before ADC enable                                              */\r\n  /* Stop potential conversion on going, on regular and injected groups       */\r\n  /* Disable ADC peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Check if ADC is effectively disabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_BUSY_INTERNAL);\r\n\r\n    /* Hardware prerequisite: delay before starting the calibration.          */\r\n    /*  - Computation of CPU clock cycles corresponding to ADC clock cycles.  */\r\n    /*  - Wait for the expected ADC clock cycles delay */\r\n    wait_loop_index = ((SystemCoreClock / HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC)) * ADC_PRECALIBRATION_DELAY_ADCCLOCKCYCLES);\r\n\r\n    while (wait_loop_index != 0U) {\r\n      wait_loop_index--;\r\n    }\r\n\r\n    /* 2. Enable the ADC peripheral */\r\n    ADC_Enable(hadc);\r\n\r\n    /* 3. Resets ADC calibration registers */\r\n    SET_BIT(hadc->Instance->CR2, ADC_CR2_RSTCAL);\r\n\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait for calibration reset completion */\r\n    while (HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_RSTCAL)) {\r\n      if ((HAL_GetTick() - tickstart) > ADC_CALIBRATION_TIMEOUT) {\r\n        /* Update ADC state machine to error */\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n        /* Process unlocked */\r\n        __HAL_UNLOCK(hadc);\r\n\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n\r\n    /* 4. Start ADC calibration */\r\n    SET_BIT(hadc->Instance->CR2, ADC_CR2_CAL);\r\n\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait for calibration completion */\r\n    while (HAL_IS_BIT_SET(hadc->Instance->CR2, ADC_CR2_CAL)) {\r\n      if ((HAL_GetTick() - tickstart) > ADC_CALIBRATION_TIMEOUT) {\r\n        /* Update ADC state machine to error */\r\n        ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n        /* Process unlocked */\r\n        __HAL_UNLOCK(hadc);\r\n\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n\r\n    /* Set ADC state */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_BUSY_INTERNAL, HAL_ADC_STATE_READY);\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Enables ADC, starts conversion of injected group.\r\n *         Interruptions enabled in this function: None.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Enable the ADC peripheral */\r\n  tmp_hal_status = ADC_Enable(hadc);\r\n\r\n  /* Start conversion if ADC is effectively enabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state                                                          */\r\n    /* - Clear state bitfield related to injected group conversion results    */\r\n    /* - Set state bitfield related to injected operation                     */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n\r\n    /* Case of independent mode or multimode (for devices with several ADCs): */\r\n    /* Set multimode state.                                                   */\r\n    if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n    } else {\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n    }\r\n\r\n    /* Check if a regular conversion is ongoing */\r\n    /* Note: On this device, there is no ADC error code fields related to     */\r\n    /*       conversions on group injected only. In case of conversion on     */\r\n    /*       going on group regular, no error code is reset.                  */\r\n    if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) {\r\n      /* Reset ADC all error code fields */\r\n      ADC_CLEAR_ERRORCODE(hadc);\r\n    }\r\n\r\n    /* Process unlocked */\r\n    /* Unlock before starting ADC conversions: in case of potential           */\r\n    /* interruption, to let the process to ADC IRQ Handler.                   */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    /* Clear injected group conversion flag */\r\n    /* (To ensure of no unknown state from potential previous ADC operations) */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JEOC);\r\n\r\n    /* Enable conversion of injected group.                                   */\r\n    /* If software start has been selected, conversion starts immediately.    */\r\n    /* If external trigger has been selected, conversion will start at next   */\r\n    /* trigger event.                                                         */\r\n    /* If automatic injected conversion is enabled, conversion will start     */\r\n    /* after next regular group conversion.                                   */\r\n    /* Case of multimode enabled (for devices with several ADCs): if ADC is   */\r\n    /* slave, ADC is enabled only (conversion is not started). If ADC is      */\r\n    /* master, ADC is enabled and conversion is started.                      */\r\n    if (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO)) {\r\n      if (ADC_IS_SOFTWARE_START_INJECTED(hadc) && ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n        /* Start ADC conversion on injected group with SW start */\r\n        SET_BIT(hadc->Instance->CR2, (ADC_CR2_JSWSTART | ADC_CR2_JEXTTRIG));\r\n      } else {\r\n        /* Start ADC conversion on injected group with external trigger */\r\n        SET_BIT(hadc->Instance->CR2, ADC_CR2_JEXTTRIG);\r\n      }\r\n    }\r\n  } else {\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop conversion of injected channels. Disable ADC peripheral if\r\n *         no regular conversion is on going.\r\n * @note   If ADC must be disabled and if conversion is on going on\r\n *         regular group, function HAL_ADC_Stop must be used to stop both\r\n *         injected and regular groups, and disable the ADC.\r\n * @note   If injected group mode auto-injection is enabled,\r\n *         function HAL_ADC_Stop must be used.\r\n * @note   In case of auto-injection mode, HAL_ADC_Stop must be used.\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStop(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion and disable ADC peripheral                     */\r\n  /* Conditioned to:                                                          */\r\n  /* - No conversion on the other group (regular group) is intended to        */\r\n  /*   continue (injected and regular groups stop conversion and ADC disable  */\r\n  /*   are common)                                                            */\r\n  /* - In case of auto-injection mode, HAL_ADC_Stop must be used.             */\r\n  if (((hadc->State & HAL_ADC_STATE_REG_BUSY) == RESET) && HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO)) {\r\n    /* Stop potential conversion on going, on regular and injected groups */\r\n    /* Disable ADC peripheral */\r\n    tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n    /* Check if ADC is effectively disabled */\r\n    if (tmp_hal_status == HAL_OK) {\r\n      /* Set ADC state */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n    }\r\n  } else {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n    tmp_hal_status = HAL_ERROR;\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Wait for injected group conversion to be completed.\r\n * @param  hadc: ADC handle\r\n * @param  Timeout: Timeout value in millisecond.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedPollForConversion(ADC_HandleTypeDef *hadc, uint32_t Timeout) {\r\n  uint32_t tickstart;\r\n\r\n  /* Variables for polling in case of scan mode enabled and polling for each  */\r\n  /* conversion.                                                              */\r\n  __IO uint32_t Conversion_Timeout_CPU_cycles     = 0U;\r\n  uint32_t      Conversion_Timeout_CPU_cycles_max = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Get timeout */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Polling for end of conversion: differentiation if single/sequence        */\r\n  /* conversion.                                                              */\r\n  /* For injected group, flag JEOC is set only at the end of the sequence,    */\r\n  /* not for each conversion within the sequence.                             */\r\n  /*  - If single conversion for injected group (scan mode disabled or        */\r\n  /*    InjectedNbrOfConversion ==1), flag JEOC is used to determine the      */\r\n  /*    conversion completion.                                                */\r\n  /*  - If sequence conversion for injected group (scan mode enabled and      */\r\n  /*    InjectedNbrOfConversion >=2), flag JEOC is set only at the end of the */\r\n  /*    sequence.                                                             */\r\n  /*    To poll for each conversion, the maximum conversion time is computed  */\r\n  /*    from ADC conversion time (selected sampling time + conversion time of */\r\n  /*    12.5 ADC clock cycles) and APB2/ADC clock prescalers (depending on    */\r\n  /*    settings, conversion time range can be from 28 to 32256 CPU cycles).  */\r\n  /*    As flag JEOC is not set after each conversion, no timeout status can  */\r\n  /*    be set.                                                               */\r\n  if ((hadc->Instance->JSQR & ADC_JSQR_JL) == RESET) {\r\n    /* Wait until End of Conversion flag is raised */\r\n    while (HAL_IS_BIT_CLR(hadc->Instance->SR, ADC_FLAG_JEOC)) {\r\n      /* Check if timeout is disabled (set to infinite wait) */\r\n      if (Timeout != HAL_MAX_DELAY) {\r\n        if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n          /* Update ADC state machine to timeout */\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);\r\n\r\n          /* Process unlocked */\r\n          __HAL_UNLOCK(hadc);\r\n\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n  } else {\r\n    /* Replace polling by wait for maximum conversion time */\r\n    /*  - Computation of CPU clock cycles corresponding to ADC clock cycles   */\r\n    /*    and ADC maximum conversion cycles on all channels.                  */\r\n    /*  - Wait for the expected ADC clock cycles delay                        */\r\n    Conversion_Timeout_CPU_cycles_max = ((SystemCoreClock / HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_ADC)) * ADC_CONVCYCLES_MAX_RANGE(hadc));\r\n\r\n    while (Conversion_Timeout_CPU_cycles < Conversion_Timeout_CPU_cycles_max) {\r\n      /* Check if timeout is disabled (set to infinite wait) */\r\n      if (Timeout != HAL_MAX_DELAY) {\r\n        if ((Timeout == 0) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n          /* Update ADC state machine to timeout */\r\n          SET_BIT(hadc->State, HAL_ADC_STATE_TIMEOUT);\r\n\r\n          /* Process unlocked */\r\n          __HAL_UNLOCK(hadc);\r\n\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n      Conversion_Timeout_CPU_cycles++;\r\n    }\r\n  }\r\n\r\n  /* Clear injected group conversion flag */\r\n  /* Note: On STM32F1 ADC, clear regular conversion flag raised               */\r\n  /* simultaneously.                                                          */\r\n  __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JSTRT | ADC_FLAG_JEOC | ADC_FLAG_EOC);\r\n\r\n  /* Update ADC state machine */\r\n  SET_BIT(hadc->State, HAL_ADC_STATE_INJ_EOC);\r\n\r\n  /* Determine whether any further conversion upcoming on group injected      */\r\n  /* by external trigger or by automatic injected conversion                  */\r\n  /* from group regular.                                                      */\r\n  if (ADC_IS_SOFTWARE_START_INJECTED(hadc) || (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO) && (ADC_IS_SOFTWARE_START_REGULAR(hadc) && (hadc->Init.ContinuousConvMode == DISABLE)))) {\r\n    /* Set ADC state */\r\n    CLEAR_BIT(hadc->State, HAL_ADC_STATE_INJ_BUSY);\r\n\r\n    if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) {\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_READY);\r\n    }\r\n  }\r\n\r\n  /* Return ADC state */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Enables ADC, starts conversion of injected group with interruption.\r\n *          - JEOC (end of conversion of injected group)\r\n *         Each of these interruptions has its dedicated callback function.\r\n * @param  hadc: ADC handle\r\n * @retval HAL status.\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStart_IT(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Enable the ADC peripheral */\r\n  tmp_hal_status = ADC_Enable(hadc);\r\n\r\n  /* Start conversion if ADC is effectively enabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state                                                          */\r\n    /* - Clear state bitfield related to injected group conversion results    */\r\n    /* - Set state bitfield related to injected operation                     */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n\r\n    /* Case of independent mode or multimode (for devices with several ADCs): */\r\n    /* Set multimode state.                                                   */\r\n    if (ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n      CLEAR_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n    } else {\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_MULTIMODE_SLAVE);\r\n    }\r\n\r\n    /* Check if a regular conversion is ongoing */\r\n    /* Note: On this device, there is no ADC error code fields related to     */\r\n    /*       conversions on group injected only. In case of conversion on     */\r\n    /*       going on group regular, no error code is reset.                  */\r\n    if (HAL_IS_BIT_CLR(hadc->State, HAL_ADC_STATE_REG_BUSY)) {\r\n      /* Reset ADC all error code fields */\r\n      ADC_CLEAR_ERRORCODE(hadc);\r\n    }\r\n\r\n    /* Process unlocked */\r\n    /* Unlock before starting ADC conversions: in case of potential           */\r\n    /* interruption, to let the process to ADC IRQ Handler.                   */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    /* Clear injected group conversion flag */\r\n    /* (To ensure of no unknown state from potential previous ADC operations) */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_JEOC);\r\n\r\n    /* Enable end of conversion interrupt for injected channels */\r\n    __HAL_ADC_ENABLE_IT(hadc, ADC_IT_JEOC);\r\n\r\n    /* Start conversion of injected group if software start has been selected */\r\n    /* and if automatic injected conversion is disabled.                      */\r\n    /* If external trigger has been selected, conversion will start at next   */\r\n    /* trigger event.                                                         */\r\n    /* If automatic injected conversion is enabled, conversion will start     */\r\n    /* after next regular group conversion.                                   */\r\n    if (HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO)) {\r\n      if (ADC_IS_SOFTWARE_START_INJECTED(hadc) && ADC_NONMULTIMODE_OR_MULTIMODEMASTER(hadc)) {\r\n        /* Start ADC conversion on injected group with SW start */\r\n        SET_BIT(hadc->Instance->CR2, (ADC_CR2_JSWSTART | ADC_CR2_JEXTTRIG));\r\n      } else {\r\n        /* Start ADC conversion on injected group with external trigger */\r\n        SET_BIT(hadc->Instance->CR2, ADC_CR2_JEXTTRIG);\r\n      }\r\n    }\r\n  } else {\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop conversion of injected channels, disable interruption of\r\n *         end-of-conversion. Disable ADC peripheral if no regular conversion\r\n *         is on going.\r\n * @note   If ADC must be disabled and if conversion is on going on\r\n *         regular group, function HAL_ADC_Stop must be used to stop both\r\n *         injected and regular groups, and disable the ADC.\r\n * @note   If injected group mode auto-injection is enabled,\r\n *         function HAL_ADC_Stop must be used.\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedStop_IT(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion and disable ADC peripheral                     */\r\n  /* Conditioned to:                                                          */\r\n  /* - No conversion on the other group (regular group) is intended to        */\r\n  /*   continue (injected and regular groups stop conversion and ADC disable  */\r\n  /*   are common)                                                            */\r\n  /* - In case of auto-injection mode, HAL_ADC_Stop must be used.             */\r\n  if (((hadc->State & HAL_ADC_STATE_REG_BUSY) == RESET) && HAL_IS_BIT_CLR(hadc->Instance->CR1, ADC_CR1_JAUTO)) {\r\n    /* Stop potential conversion on going, on regular and injected groups */\r\n    /* Disable ADC peripheral */\r\n    tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n    /* Check if ADC is effectively disabled */\r\n    if (tmp_hal_status == HAL_OK) {\r\n      /* Disable ADC end of conversion interrupt for injected channels */\r\n      __HAL_ADC_DISABLE_IT(hadc, ADC_IT_JEOC);\r\n\r\n      /* Set ADC state */\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n    }\r\n  } else {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n    tmp_hal_status = HAL_ERROR;\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief  Enables ADC, starts conversion of regular group and transfers result\r\n *         through DMA.\r\n *         Multimode must have been previously configured using\r\n *         HAL_ADCEx_MultiModeConfigChannel() function.\r\n *         Interruptions enabled in this function:\r\n *          - DMA transfer complete\r\n *          - DMA half transfer\r\n *         Each of these interruptions has its dedicated callback function.\r\n * @note:  On STM32F1 devices, ADC slave regular group must be configured\r\n *         with conversion trigger ADC_SOFTWARE_START.\r\n * @note:  ADC slave can be enabled preliminarily using single-mode\r\n *         HAL_ADC_Start() function.\r\n * @param  hadc: ADC handle of ADC master (handle of ADC slave must not be used)\r\n * @param  pData: The destination Buffer address.\r\n * @param  Length: The length of data to be transferred from ADC peripheral to memory.\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeStart_DMA(ADC_HandleTypeDef *hadc, uint32_t *pData, uint32_t Length) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n  ADC_HandleTypeDef tmphadcSlave;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));\r\n  assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Set a temporary handle of the ADC slave associated to the ADC master     */\r\n  ADC_MULTI_SLAVE(hadc, &tmphadcSlave);\r\n\r\n  /* On STM32F1 devices, ADC slave regular group must be configured with      */\r\n  /* conversion trigger ADC_SOFTWARE_START.                                   */\r\n  /* Note: External trigger of ADC slave must be enabled, it is already done  */\r\n  /*       into function \"HAL_ADC_Init()\".                                    */\r\n  if (!ADC_IS_SOFTWARE_START_REGULAR(&tmphadcSlave)) {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Enable the ADC peripherals: master and slave (in case if not already     */\r\n  /* enabled previously)                                                      */\r\n  tmp_hal_status = ADC_Enable(hadc);\r\n  if (tmp_hal_status == HAL_OK) {\r\n    tmp_hal_status = ADC_Enable(&tmphadcSlave);\r\n  }\r\n\r\n  /* Start conversion if all ADCs of multimode are effectively enabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set ADC state (ADC master)                                             */\r\n    /* - Clear state bitfield related to regular group conversion results     */\r\n    /* - Set state bitfield related to regular operation                      */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_READY | HAL_ADC_STATE_REG_EOC | HAL_ADC_STATE_MULTIMODE_SLAVE, HAL_ADC_STATE_REG_BUSY);\r\n\r\n    /* If conversions on group regular are also triggering group injected,    */\r\n    /* update ADC state.                                                      */\r\n    if (READ_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO) != RESET) {\r\n      ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_INJ_EOC, HAL_ADC_STATE_INJ_BUSY);\r\n    }\r\n\r\n    /* Process unlocked */\r\n    /* Unlock before starting ADC conversions: in case of potential           */\r\n    /* interruption, to let the process to ADC IRQ Handler.                   */\r\n    __HAL_UNLOCK(hadc);\r\n\r\n    /* Set ADC error code to none */\r\n    ADC_CLEAR_ERRORCODE(hadc);\r\n\r\n    /* Set the DMA transfer complete callback */\r\n    hadc->DMA_Handle->XferCpltCallback = ADC_DMAConvCplt;\r\n\r\n    /* Manage ADC and DMA start: ADC overrun interruption, DMA start, ADC     */\r\n    /* start (in case of SW start):                                           */\r\n\r\n    /* Clear regular group conversion flag and overrun flag */\r\n    /* (To ensure of no unknown state from potential previous ADC operations) */\r\n    __HAL_ADC_CLEAR_FLAG(hadc, ADC_FLAG_EOC);\r\n\r\n    /* Enable ADC DMA mode of ADC master */\r\n    SET_BIT(hadc->Instance->CR2, ADC_CR2_DMA);\r\n\r\n    /* Start the DMA channel */\r\n    HAL_DMA_Start_IT(hadc->DMA_Handle, (uint32_t)&hadc->Instance->DR, (uint32_t)pData, Length);\r\n\r\n    /* Start conversion of regular group if software start has been selected. */\r\n    /* If external trigger has been selected, conversion will start at next   */\r\n    /* trigger event.                                                         */\r\n    /* Note: Alternate trigger for single conversion could be to force an     */\r\n    /*       additional set of bit ADON \"hadc->Instance->CR2 |= ADC_CR2_ADON;\"*/\r\n    if (ADC_IS_SOFTWARE_START_REGULAR(hadc)) {\r\n      /* Start ADC conversion on regular group with SW start */\r\n      SET_BIT(hadc->Instance->CR2, (ADC_CR2_SWSTART | ADC_CR2_EXTTRIG));\r\n    } else {\r\n      /* Start ADC conversion on regular group with external trigger */\r\n      SET_BIT(hadc->Instance->CR2, ADC_CR2_EXTTRIG);\r\n    }\r\n  } else {\r\n    /* Process unlocked */\r\n    __HAL_UNLOCK(hadc);\r\n  }\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n/**\r\n * @brief  Stop ADC conversion of regular group (and injected channels in\r\n *         case of auto_injection mode), disable ADC DMA transfer, disable\r\n *         ADC peripheral.\r\n * @note   Multimode is kept enabled after this function. To disable multimode\r\n *         (set with HAL_ADCEx_MultiModeConfigChannel(), ADC must be\r\n *         reinitialized using HAL_ADC_Init() or HAL_ADC_ReInit().\r\n * @note   In case of DMA configured in circular mode, function\r\n *         HAL_ADC_Stop_DMA must be called after this function with handle of\r\n *         ADC slave, to properly disable the DMA channel.\r\n * @param  hadc: ADC handle of ADC master (handle of ADC slave must not be used)\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeStop_DMA(ADC_HandleTypeDef *hadc) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n  ADC_HandleTypeDef tmphadcSlave;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Stop potential conversion on going, on regular and injected groups */\r\n  /* Disable ADC master peripheral */\r\n  tmp_hal_status = ADC_ConversionStop_Disable(hadc);\r\n\r\n  /* Check if ADC is effectively disabled */\r\n  if (tmp_hal_status == HAL_OK) {\r\n    /* Set a temporary handle of the ADC slave associated to the ADC master   */\r\n    ADC_MULTI_SLAVE(hadc, &tmphadcSlave);\r\n\r\n    /* Disable ADC slave peripheral */\r\n    tmp_hal_status = ADC_ConversionStop_Disable(&tmphadcSlave);\r\n\r\n    /* Check if ADC is effectively disabled */\r\n    if (tmp_hal_status != HAL_OK) {\r\n      /* Update ADC state machine to error */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_INTERNAL);\r\n\r\n      /* Process unlocked */\r\n      __HAL_UNLOCK(hadc);\r\n\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Disable ADC DMA mode */\r\n    CLEAR_BIT(hadc->Instance->CR2, ADC_CR2_DMA);\r\n\r\n    /* Reset configuration of ADC DMA continuous request for dual mode */\r\n    CLEAR_BIT(hadc->Instance->CR1, ADC_CR1_DUALMOD);\r\n\r\n    /* Disable the DMA channel (in case of DMA in circular mode or stop while */\r\n    /* while DMA transfer is on going)                                        */\r\n    tmp_hal_status = HAL_DMA_Abort(hadc->DMA_Handle);\r\n\r\n    /* Change ADC state (ADC master) */\r\n    ADC_STATE_CLR_SET(hadc->State, HAL_ADC_STATE_REG_BUSY | HAL_ADC_STATE_INJ_BUSY, HAL_ADC_STATE_READY);\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @brief  Get ADC injected group conversion result.\r\n * @note   Reading register JDRx automatically clears ADC flag JEOC\r\n *         (ADC group injected end of unitary conversion).\r\n * @note   This function does not clear ADC flag JEOS\r\n *         (ADC group injected end of sequence conversion)\r\n *         Occurrence of flag JEOS rising:\r\n *          - If sequencer is composed of 1 rank, flag JEOS is equivalent\r\n *            to flag JEOC.\r\n *          - If sequencer is composed of several ranks, during the scan\r\n *            sequence flag JEOC only is raised, at the end of the scan sequence\r\n *            both flags JEOC and EOS are raised.\r\n *         Flag JEOS must not be cleared by this function because\r\n *         it would not be compliant with low power features\r\n *         (feature low power auto-wait, not available on all STM32 families).\r\n *         To clear this flag, either use function:\r\n *         in programming model IT: @ref HAL_ADC_IRQHandler(), in programming\r\n *         model polling: @ref HAL_ADCEx_InjectedPollForConversion()\r\n *         or @ref __HAL_ADC_CLEAR_FLAG(&hadc, ADC_FLAG_JEOS).\r\n * @param  hadc: ADC handle\r\n * @param  InjectedRank: the converted ADC injected rank.\r\n *          This parameter can be one of the following values:\r\n *            @arg ADC_INJECTED_RANK_1: Injected Channel1 selected\r\n *            @arg ADC_INJECTED_RANK_2: Injected Channel2 selected\r\n *            @arg ADC_INJECTED_RANK_3: Injected Channel3 selected\r\n *            @arg ADC_INJECTED_RANK_4: Injected Channel4 selected\r\n * @retval ADC group injected conversion data\r\n */\r\nuint32_t HAL_ADCEx_InjectedGetValue(ADC_HandleTypeDef *hadc, uint32_t InjectedRank) {\r\n  uint32_t tmp_jdr = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_INJECTED_RANK(InjectedRank));\r\n\r\n  /* Get ADC converted value */\r\n  switch (InjectedRank) {\r\n  case ADC_INJECTED_RANK_4:\r\n    tmp_jdr = hadc->Instance->JDR4;\r\n    break;\r\n  case ADC_INJECTED_RANK_3:\r\n    tmp_jdr = hadc->Instance->JDR3;\r\n    break;\r\n  case ADC_INJECTED_RANK_2:\r\n    tmp_jdr = hadc->Instance->JDR2;\r\n    break;\r\n  case ADC_INJECTED_RANK_1:\r\n  default:\r\n    tmp_jdr = hadc->Instance->JDR1;\r\n    break;\r\n  }\r\n\r\n  /* Return ADC converted value */\r\n  return tmp_jdr;\r\n}\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief  Returns the last ADC Master&Slave regular conversions results data\r\n *         in the selected multi mode.\r\n * @param  hadc: ADC handle of ADC master (handle of ADC slave must not be used)\r\n * @retval The converted data value.\r\n */\r\nuint32_t HAL_ADCEx_MultiModeGetValue(ADC_HandleTypeDef *hadc) {\r\n  uint32_t tmpDR = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n\r\n  /* Note: EOC flag is not cleared here by software because automatically     */\r\n  /*       cleared by hardware when reading register DR.                      */\r\n\r\n  /* On STM32F1 devices, ADC1 data register DR contains ADC2 conversions      */\r\n  /* only if ADC1 DMA mode is enabled.                                        */\r\n  tmpDR = hadc->Instance->DR;\r\n\r\n  if (HAL_IS_BIT_CLR(ADC1->CR2, ADC_CR2_DMA)) {\r\n    tmpDR |= (ADC2->DR << 16U);\r\n  }\r\n\r\n  /* Return ADC converted value */\r\n  return tmpDR;\r\n}\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n\r\n/**\r\n * @brief  Injected conversion complete callback in non blocking mode\r\n * @param  hadc: ADC handle\r\n * @retval None\r\n */\r\n__weak void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hadc);\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_ADCEx_InjectedConvCpltCallback could be implemented in the user file\r\n  */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup ADCEx_Exported_Functions_Group2 Extended Peripheral Control functions\r\n  * @brief    Extended Peripheral Control functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n             ##### Peripheral Control functions #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Configure channels on injected group\r\n      (+) Configure multimode\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Configures the ADC injected group and the selected channel to be\r\n *         linked to the injected group.\r\n * @note   Possibility to update parameters on the fly:\r\n *         This function initializes injected group, following calls to this\r\n *         function can be used to reconfigure some parameters of structure\r\n *         \"ADC_InjectionConfTypeDef\" on the fly, without reseting the ADC.\r\n *         The setting of these parameters is conditioned to ADC state:\r\n *         this function must be called when ADC is not under conversion.\r\n * @param  hadc: ADC handle\r\n * @param  sConfigInjected: Structure of ADC injected group and ADC channel for\r\n *         injected group.\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_InjectedConfigChannel(ADC_HandleTypeDef *hadc, ADC_InjectionConfTypeDef *sConfigInjected) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_CHANNEL(sConfigInjected->InjectedChannel));\r\n  assert_param(IS_ADC_SAMPLE_TIME(sConfigInjected->InjectedSamplingTime));\r\n  assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->AutoInjectedConv));\r\n  assert_param(IS_ADC_EXTTRIGINJEC(sConfigInjected->ExternalTrigInjecConv));\r\n  assert_param(IS_ADC_RANGE(sConfigInjected->InjectedOffset));\r\n\r\n  if (hadc->Init.ScanConvMode != ADC_SCAN_DISABLE) {\r\n    assert_param(IS_ADC_INJECTED_RANK(sConfigInjected->InjectedRank));\r\n    assert_param(IS_ADC_INJECTED_NB_CONV(sConfigInjected->InjectedNbrOfConversion));\r\n    assert_param(IS_FUNCTIONAL_STATE(sConfigInjected->InjectedDiscontinuousConvMode));\r\n  }\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Configuration of injected group sequencer:                               */\r\n  /* - if scan mode is disabled, injected channels sequence length is set to  */\r\n  /*   0x00: 1 channel converted (channel on regular rank 1)                  */\r\n  /*   Parameter \"InjectedNbrOfConversion\" is discarded.                      */\r\n  /*   Note: Scan mode is present by hardware on this device and, if          */\r\n  /*   disabled, discards automatically nb of conversions. Anyway, nb of      */\r\n  /*   conversions is forced to 0x00 for alignment over all STM32 devices.    */\r\n  /* - if scan mode is enabled, injected channels sequence length is set to   */\r\n  /*   parameter \"InjectedNbrOfConversion\".                                   */\r\n  //  if (hadc->Init.ScanConvMode == ADC_SCAN_DISABLE)\r\n  //  {\r\n  //    if (sConfigInjected->InjectedRank == ADC_INJECTED_RANK_1)\r\n  //    {\r\n  //      /* Clear the old SQx bits for all injected ranks */\r\n  //      MODIFY_REG(hadc->Instance->JSQR                             ,\r\n  //                 ADC_JSQR_JL   |\r\n  //                 ADC_JSQR_JSQ4 |\r\n  //                 ADC_JSQR_JSQ3 |\r\n  //                 ADC_JSQR_JSQ2 |\r\n  //                 ADC_JSQR_JSQ1                                    ,\r\n  //                 ADC_JSQR_RK_JL(sConfigInjected->InjectedChannel,\r\n  //                                  ADC_INJECTED_RANK_1,\r\n  //                                  0x01U));\r\n  //    }\r\n  //    /* If another injected rank than rank1 was intended to be set, and could  */\r\n  //    /* not due to ScanConvMode disabled, error is reported.                   */\r\n  //    else\r\n  //    {\r\n  //      /* Update ADC state machine to error */\r\n  //      SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n  //\r\n  //      tmp_hal_status = HAL_ERROR;\r\n  //    }\r\n  //  }\r\n  //  else\r\n  {\r\n    /* Since injected channels rank conv. order depends on total number of   */\r\n    /* injected conversions, selected rank must be below or equal to total   */\r\n    /* number of injected conversions to be updated.                         */\r\n    if (sConfigInjected->InjectedRank <= sConfigInjected->InjectedNbrOfConversion) {\r\n      /* Clear the old SQx bits for the selected rank */\r\n      /* Set the SQx bits for the selected rank */\r\n      MODIFY_REG(hadc->Instance->JSQR,\r\n\r\n                 ADC_JSQR_JL | ADC_JSQR_RK_JL(ADC_JSQR_JSQ1, sConfigInjected->InjectedRank, sConfigInjected->InjectedNbrOfConversion),\r\n\r\n                 ADC_JSQR_JL_SHIFT(sConfigInjected->InjectedNbrOfConversion) |\r\n                     ADC_JSQR_RK_JL(sConfigInjected->InjectedChannel, sConfigInjected->InjectedRank, sConfigInjected->InjectedNbrOfConversion));\r\n    } else {\r\n      /* Clear the old SQx bits for the selected rank */\r\n      MODIFY_REG(hadc->Instance->JSQR,\r\n\r\n                 ADC_JSQR_JL | ADC_JSQR_RK_JL(ADC_JSQR_JSQ1, sConfigInjected->InjectedRank, sConfigInjected->InjectedNbrOfConversion),\r\n\r\n                 0x00000000U);\r\n    }\r\n  }\r\n\r\n  /* Configuration of injected group                                          */\r\n  /* Parameters update conditioned to ADC state:                              */\r\n  /* Parameters that can be updated only when ADC is disabled:                */\r\n  /*  - external trigger to start conversion                                  */\r\n  /* Parameters update not conditioned to ADC state:                          */\r\n  /*  - Automatic injected conversion                                         */\r\n  /*  - Injected discontinuous mode                                           */\r\n  /* Note: In case of ADC already enabled, caution to not launch an unwanted  */\r\n  /*       conversion while modifying register CR2 by writing 1 to bit ADON.  */\r\n  if (ADC_IS_ENABLE(hadc) == RESET) {\r\n    MODIFY_REG(hadc->Instance->CR2, ADC_CR2_JEXTSEL | ADC_CR2_ADON, ADC_CFGR_JEXTSEL(hadc, sConfigInjected->ExternalTrigInjecConv));\r\n  }\r\n\r\n  /* Configuration of injected group                                          */\r\n  /*  - Automatic injected conversion                                         */\r\n  /*  - Injected discontinuous mode                                           */\r\n\r\n  /* Automatic injected conversion can be enabled if injected group         */\r\n  /* external triggers are disabled.                                        */\r\n  if (sConfigInjected->AutoInjectedConv == ENABLE) {\r\n    if (sConfigInjected->ExternalTrigInjecConv == ADC_INJECTED_SOFTWARE_START) {\r\n      SET_BIT(hadc->Instance->CR1, ADC_CR1_JAUTO);\r\n    } else {\r\n      /* Update ADC state machine to error */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n      tmp_hal_status = HAL_ERROR;\r\n    }\r\n  }\r\n\r\n  /* Injected discontinuous can be enabled only if auto-injected mode is    */\r\n  /* disabled.                                                              */\r\n  if (sConfigInjected->InjectedDiscontinuousConvMode == ENABLE) {\r\n    if (sConfigInjected->AutoInjectedConv == DISABLE) {\r\n      SET_BIT(hadc->Instance->CR1, ADC_CR1_JDISCEN);\r\n    } else {\r\n      /* Update ADC state machine to error */\r\n      SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n      tmp_hal_status = HAL_ERROR;\r\n    }\r\n  }\r\n\r\n  /* InjectedChannel sampling time configuration */\r\n  /* For channels 10 to 17 */\r\n  if (sConfigInjected->InjectedChannel >= ADC_CHANNEL_10) {\r\n    MODIFY_REG(hadc->Instance->SMPR1, ADC_SMPR1(ADC_SMPR1_SMP10, sConfigInjected->InjectedChannel), ADC_SMPR1(sConfigInjected->InjectedSamplingTime, sConfigInjected->InjectedChannel));\r\n  } else /* For channels 0 to 9 */\r\n  {\r\n    MODIFY_REG(hadc->Instance->SMPR2, ADC_SMPR2(ADC_SMPR2_SMP0, sConfigInjected->InjectedChannel), ADC_SMPR2(sConfigInjected->InjectedSamplingTime, sConfigInjected->InjectedChannel));\r\n  }\r\n\r\n  /* Configure the offset: offset enable/disable, InjectedChannel, offset value */\r\n  switch (sConfigInjected->InjectedRank) {\r\n  case 1:\r\n    /* Set injected channel 1 offset */\r\n    MODIFY_REG(hadc->Instance->JOFR1, ADC_JOFR1_JOFFSET1, sConfigInjected->InjectedOffset);\r\n    break;\r\n  case 2:\r\n    /* Set injected channel 2 offset */\r\n    MODIFY_REG(hadc->Instance->JOFR2, ADC_JOFR2_JOFFSET2, sConfigInjected->InjectedOffset);\r\n    break;\r\n  case 3:\r\n    /* Set injected channel 3 offset */\r\n    MODIFY_REG(hadc->Instance->JOFR3, ADC_JOFR3_JOFFSET3, sConfigInjected->InjectedOffset);\r\n    break;\r\n  case 4:\r\n  default:\r\n    MODIFY_REG(hadc->Instance->JOFR4, ADC_JOFR4_JOFFSET4, sConfigInjected->InjectedOffset);\r\n    break;\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n\r\n#if defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief  Enable ADC multimode and configure multimode parameters\r\n * @note   Possibility to update parameters on the fly:\r\n *         This function initializes multimode parameters, following\r\n *         calls to this function can be used to reconfigure some parameters\r\n *         of structure \"ADC_MultiModeTypeDef\" on the fly, without reseting\r\n *         the ADCs (both ADCs of the common group).\r\n *         The setting of these parameters is conditioned to ADC state.\r\n *         For parameters constraints, see comments of structure\r\n *         \"ADC_MultiModeTypeDef\".\r\n * @note   To change back configuration from multimode to single mode, ADC must\r\n *         be reset (using function HAL_ADC_Init() ).\r\n * @param  hadc: ADC handle\r\n * @param  multimode: Structure of ADC multimode configuration\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_ADCEx_MultiModeConfigChannel(ADC_HandleTypeDef *hadc, ADC_MultiModeTypeDef *multimode) {\r\n  HAL_StatusTypeDef tmp_hal_status = HAL_OK;\r\n  ADC_HandleTypeDef tmphadcSlave;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance));\r\n  assert_param(IS_ADC_MODE(multimode->Mode));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hadc);\r\n\r\n  /* Set a temporary handle of the ADC slave associated to the ADC master     */\r\n  ADC_MULTI_SLAVE(hadc, &tmphadcSlave);\r\n\r\n  /* Parameters update conditioned to ADC state:                              */\r\n  /* Parameters that can be updated when ADC is disabled or enabled without   */\r\n  /* conversion on going on regular group:                                    */\r\n  /*  - ADC master and ADC slave DMA configuration                            */\r\n  /* Parameters that can be updated only when ADC is disabled:                */\r\n  /*  - Multimode mode selection                                              */\r\n  /* To optimize code, all multimode settings can be set when both ADCs of    */\r\n  /* the common group are in state: disabled.                                 */\r\n  if ((ADC_IS_ENABLE(hadc) == RESET) && (ADC_IS_ENABLE(&tmphadcSlave) == RESET) && (IS_ADC_MULTIMODE_MASTER_INSTANCE(hadc->Instance))) {\r\n    MODIFY_REG(hadc->Instance->CR1, ADC_CR1_DUALMOD, multimode->Mode);\r\n  }\r\n  /* If one of the ADC sharing the same common group is enabled, no update    */\r\n  /* could be done on neither of the multimode structure parameters.          */\r\n  else {\r\n    /* Update ADC state machine to error */\r\n    SET_BIT(hadc->State, HAL_ADC_STATE_ERROR_CONFIG);\r\n\r\n    tmp_hal_status = HAL_ERROR;\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hadc);\r\n\r\n  /* Return function status */\r\n  return tmp_hal_status;\r\n}\r\n#endif /* defined STM32F103x6 || defined STM32F103xB || defined STM32F105xC || defined STM32F107xC || defined STM32F103xE || defined STM32F103xG */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_ADC_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_cortex.c\r\n  * @author  MCD Application Team\r\n  * @brief   CORTEX HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the CORTEX:\r\n  *           + Initialization and de-initialization functions\r\n  *           + Peripheral Control functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                        ##### How to use this driver #####\r\n  ==============================================================================\r\n\r\n    [..]\r\n    *** How to configure Interrupts using CORTEX HAL driver ***\r\n    ===========================================================\r\n    [..]\r\n    This section provides functions allowing to configure the NVIC interrupts (IRQ).\r\n    The Cortex-M3 exceptions are managed by CMSIS functions.\r\n\r\n    (#) Configure the NVIC Priority Grouping using HAL_NVIC_SetPriorityGrouping()\r\n        function according to the following table.\r\n    (#) Configure the priority of the selected IRQ Channels using HAL_NVIC_SetPriority().\r\n    (#) Enable the selected IRQ Channels using HAL_NVIC_EnableIRQ().\r\n    (#) please refer to programming manual for details in how to configure priority.\r\n\r\n     -@- When the NVIC_PRIORITYGROUP_0 is selected, IRQ preemption is no more possible.\r\n         The pending IRQ priority will be managed only by the sub priority.\r\n\r\n     -@- IRQ priority order (sorted by highest to lowest priority):\r\n        (+@) Lowest preemption priority\r\n        (+@) Lowest sub priority\r\n        (+@) Lowest hardware priority (IRQ number)\r\n\r\n    [..]\r\n    *** How to configure Systick using CORTEX HAL driver ***\r\n    ========================================================\r\n    [..]\r\n    Setup SysTick Timer for time base.\r\n\r\n   (+) The HAL_SYSTICK_Config()function calls the SysTick_Config() function which\r\n       is a CMSIS function that:\r\n        (++) Configures the SysTick Reload register with value passed as function parameter.\r\n        (++) Configures the SysTick IRQ priority to the lowest value 0x0F.\r\n        (++) Resets the SysTick Counter register.\r\n        (++) Configures the SysTick Counter clock source to be Core Clock Source (HCLK).\r\n        (++) Enables the SysTick Interrupt.\r\n        (++) Starts the SysTick Counter.\r\n\r\n   (+) You can change the SysTick Clock source to be HCLK_Div8 by calling the macro\r\n       __HAL_CORTEX_SYSTICKCLK_CONFIG(SYSTICK_CLKSOURCE_HCLK_DIV8) just after the\r\n       HAL_SYSTICK_Config() function call. The __HAL_CORTEX_SYSTICKCLK_CONFIG() macro is defined\r\n       inside the stm32f1xx_hal_cortex.h file.\r\n\r\n   (+) You can change the SysTick IRQ priority by calling the\r\n       HAL_NVIC_SetPriority(SysTick_IRQn,...) function just after the HAL_SYSTICK_Config() function\r\n       call. The HAL_NVIC_SetPriority() call the NVIC_SetPriority() function which is a CMSIS function.\r\n\r\n   (+) To adjust the SysTick time base, use the following formula:\r\n\r\n       Reload Value = SysTick Counter Clock (Hz) x  Desired Time base (s)\r\n       (++) Reload Value is the parameter to be passed for HAL_SYSTICK_Config() function\r\n       (++) Reload Value should not exceed 0xFFFFFF\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup CORTEX CORTEX\r\n * @brief CORTEX HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_CORTEX_MODULE_ENABLED\r\n\r\n/* Private types -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private constants ---------------------------------------------------------*/\r\n/* Private macros ------------------------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @defgroup CORTEX_Exported_Functions CORTEX Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup CORTEX_Exported_Functions_Group1 Initialization and de-initialization functions\r\n  *  @brief    Initialization and Configuration functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n              ##### Initialization and de-initialization functions #####\r\n  ==============================================================================\r\n    [..]\r\n      This section provides the CORTEX HAL driver functions allowing to configure Interrupts\r\n      Systick functionalities\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Sets the priority grouping field (preemption priority and subpriority)\r\n *         using the required unlock sequence.\r\n * @param  PriorityGroup: The priority grouping bits length.\r\n *         This parameter can be one of the following values:\r\n *         @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority\r\n *                                    4 bits for subpriority\r\n *         @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority\r\n *                                    3 bits for subpriority\r\n *         @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority\r\n *                                    2 bits for subpriority\r\n *         @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority\r\n *                                    1 bits for subpriority\r\n *         @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority\r\n *                                    0 bits for subpriority\r\n * @note   When the NVIC_PriorityGroup_0 is selected, IRQ preemption is no more possible.\r\n *         The pending IRQ priority will be managed only by the subpriority.\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_SetPriorityGrouping(uint32_t PriorityGroup) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));\r\n\r\n  /* Set the PRIGROUP[10:8] bits according to the PriorityGroup parameter value */\r\n  NVIC_SetPriorityGrouping(PriorityGroup);\r\n}\r\n\r\n/**\r\n * @brief  Sets the priority of an interrupt.\r\n * @param  IRQn: External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xx.h))\r\n * @param  PreemptPriority: The preemption priority for the IRQn channel.\r\n *         This parameter can be a value between 0 and 15\r\n *         A lower priority value indicates a higher priority\r\n * @param  SubPriority: the subpriority level for the IRQ channel.\r\n *         This parameter can be a value between 0 and 15\r\n *         A lower priority value indicates a higher priority.\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority) {\r\n  uint32_t prioritygroup = 0x00U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_SUB_PRIORITY(SubPriority));\r\n  assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority));\r\n\r\n  prioritygroup = NVIC_GetPriorityGrouping();\r\n\r\n  NVIC_SetPriority(IRQn, NVIC_EncodePriority(prioritygroup, PreemptPriority, SubPriority));\r\n}\r\n\r\n/**\r\n * @brief  Enables a device specific interrupt in the NVIC interrupt controller.\r\n * @note   To configure interrupts priority correctly, the NVIC_PriorityGroupConfig()\r\n *         function should be called before.\r\n * @param  IRQn External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_EnableIRQ(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Enable interrupt */\r\n  NVIC_EnableIRQ(IRQn);\r\n}\r\n\r\n/**\r\n * @brief  Disables a device specific interrupt in the NVIC interrupt controller.\r\n * @param  IRQn External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_DisableIRQ(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Disable interrupt */\r\n  NVIC_DisableIRQ(IRQn);\r\n}\r\n\r\n/**\r\n * @brief  Initiates a system reset request to reset the MCU.\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_SystemReset(void) {\r\n  /* System Reset */\r\n  NVIC_SystemReset();\r\n}\r\n\r\n/**\r\n * @brief  Initializes the System Timer and its interrupt, and starts the System Tick Timer.\r\n *         Counter is in free running mode to generate periodic interrupts.\r\n * @param  TicksNumb: Specifies the ticks Number of ticks between two interrupts.\r\n * @retval status:  - 0  Function succeeded.\r\n *                  - 1  Function failed.\r\n */\r\nuint32_t HAL_SYSTICK_Config(uint32_t TicksNumb) { return SysTick_Config(TicksNumb); }\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup CORTEX_Exported_Functions_Group2 Peripheral Control functions\r\n  *  @brief   Cortex control functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                      ##### Peripheral Control functions #####\r\n  ==============================================================================\r\n    [..]\r\n      This subsection provides a set of functions allowing to control the CORTEX\r\n      (NVIC, SYSTICK, MPU) functionalities.\r\n\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n#if (__MPU_PRESENT == 1U)\r\n/**\r\n * @brief  Disables the MPU\r\n * @retval None\r\n */\r\nvoid HAL_MPU_Disable(void) {\r\n  /* Make sure outstanding transfers are done */\r\n  __DMB();\r\n\r\n  /* Disable fault exceptions */\r\n  SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk;\r\n\r\n  /* Disable the MPU and clear the control register*/\r\n  MPU->CTRL = 0U;\r\n}\r\n\r\n/**\r\n * @brief  Enable the MPU.\r\n * @param  MPU_Control: Specifies the control mode of the MPU during hard fault,\r\n *          NMI, FAULTMASK and privileged access to the default memory\r\n *          This parameter can be one of the following values:\r\n *            @arg MPU_HFNMI_PRIVDEF_NONE\r\n *            @arg MPU_HARDFAULT_NMI\r\n *            @arg MPU_PRIVILEGED_DEFAULT\r\n *            @arg MPU_HFNMI_PRIVDEF\r\n * @retval None\r\n */\r\nvoid HAL_MPU_Enable(uint32_t MPU_Control) {\r\n  /* Enable the MPU */\r\n  MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk;\r\n\r\n  /* Enable fault exceptions */\r\n  SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;\r\n\r\n  /* Ensure MPU setting take effects */\r\n  __DSB();\r\n  __ISB();\r\n}\r\n\r\n/**\r\n * @brief  Initializes and configures the Region and the memory to be protected.\r\n * @param  MPU_Init: Pointer to a MPU_Region_InitTypeDef structure that contains\r\n *                the initialization and configuration information.\r\n * @retval None\r\n */\r\nvoid HAL_MPU_ConfigRegion(MPU_Region_InitTypeDef *MPU_Init) {\r\n  /* Check the parameters */\r\n  assert_param(IS_MPU_REGION_NUMBER(MPU_Init->Number));\r\n  assert_param(IS_MPU_REGION_ENABLE(MPU_Init->Enable));\r\n\r\n  /* Set the Region number */\r\n  MPU->RNR = MPU_Init->Number;\r\n\r\n  if ((MPU_Init->Enable) != RESET) {\r\n    /* Check the parameters */\r\n    assert_param(IS_MPU_INSTRUCTION_ACCESS(MPU_Init->DisableExec));\r\n    assert_param(IS_MPU_REGION_PERMISSION_ATTRIBUTE(MPU_Init->AccessPermission));\r\n    assert_param(IS_MPU_TEX_LEVEL(MPU_Init->TypeExtField));\r\n    assert_param(IS_MPU_ACCESS_SHAREABLE(MPU_Init->IsShareable));\r\n    assert_param(IS_MPU_ACCESS_CACHEABLE(MPU_Init->IsCacheable));\r\n    assert_param(IS_MPU_ACCESS_BUFFERABLE(MPU_Init->IsBufferable));\r\n    assert_param(IS_MPU_SUB_REGION_DISABLE(MPU_Init->SubRegionDisable));\r\n    assert_param(IS_MPU_REGION_SIZE(MPU_Init->Size));\r\n\r\n    MPU->RBAR = MPU_Init->BaseAddress;\r\n    MPU->RASR = ((uint32_t)MPU_Init->DisableExec << MPU_RASR_XN_Pos) | ((uint32_t)MPU_Init->AccessPermission << MPU_RASR_AP_Pos) | ((uint32_t)MPU_Init->TypeExtField << MPU_RASR_TEX_Pos) |\r\n                ((uint32_t)MPU_Init->IsShareable << MPU_RASR_S_Pos) | ((uint32_t)MPU_Init->IsCacheable << MPU_RASR_C_Pos) | ((uint32_t)MPU_Init->IsBufferable << MPU_RASR_B_Pos) |\r\n                ((uint32_t)MPU_Init->SubRegionDisable << MPU_RASR_SRD_Pos) | ((uint32_t)MPU_Init->Size << MPU_RASR_SIZE_Pos) | ((uint32_t)MPU_Init->Enable << MPU_RASR_ENABLE_Pos);\r\n  } else {\r\n    MPU->RBAR = 0x00U;\r\n    MPU->RASR = 0x00U;\r\n  }\r\n}\r\n#endif /* __MPU_PRESENT */\r\n\r\n/**\r\n * @brief  Gets the priority grouping field from the NVIC Interrupt Controller.\r\n * @retval Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field)\r\n */\r\nuint32_t HAL_NVIC_GetPriorityGrouping(void) {\r\n  /* Get the PRIGROUP[10:8] field value */\r\n  return NVIC_GetPriorityGrouping();\r\n}\r\n\r\n/**\r\n * @brief  Gets the priority of an interrupt.\r\n * @param  IRQn: External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @param   PriorityGroup: the priority grouping bits length.\r\n *         This parameter can be one of the following values:\r\n *           @arg NVIC_PRIORITYGROUP_0: 0 bits for preemption priority\r\n *                                      4 bits for subpriority\r\n *           @arg NVIC_PRIORITYGROUP_1: 1 bits for preemption priority\r\n *                                      3 bits for subpriority\r\n *           @arg NVIC_PRIORITYGROUP_2: 2 bits for preemption priority\r\n *                                      2 bits for subpriority\r\n *           @arg NVIC_PRIORITYGROUP_3: 3 bits for preemption priority\r\n *                                      1 bits for subpriority\r\n *           @arg NVIC_PRIORITYGROUP_4: 4 bits for preemption priority\r\n *                                      0 bits for subpriority\r\n * @param  pPreemptPriority: Pointer on the Preemptive priority value (starting from 0).\r\n * @param  pSubPriority: Pointer on the Subpriority value (starting from 0).\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_GetPriority(IRQn_Type IRQn, uint32_t PriorityGroup, uint32_t *pPreemptPriority, uint32_t *pSubPriority) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_PRIORITY_GROUP(PriorityGroup));\r\n  /* Get priority for Cortex-M system or device specific interrupts */\r\n  NVIC_DecodePriority(NVIC_GetPriority(IRQn), PriorityGroup, pPreemptPriority, pSubPriority);\r\n}\r\n\r\n/**\r\n * @brief  Sets Pending bit of an external interrupt.\r\n * @param  IRQn External interrupt number\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Set interrupt pending */\r\n  NVIC_SetPendingIRQ(IRQn);\r\n}\r\n\r\n/**\r\n * @brief  Gets Pending Interrupt (reads the pending register in the NVIC\r\n *         and returns the pending bit for the specified interrupt).\r\n * @param  IRQn External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval status: - 0  Interrupt status is not pending.\r\n *                 - 1  Interrupt status is pending.\r\n */\r\nuint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Return 1 if pending else 0 */\r\n  return NVIC_GetPendingIRQ(IRQn);\r\n}\r\n\r\n/**\r\n * @brief  Clears the pending bit of an external interrupt.\r\n * @param  IRQn External interrupt number.\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval None\r\n */\r\nvoid HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Clear pending interrupt */\r\n  NVIC_ClearPendingIRQ(IRQn);\r\n}\r\n\r\n/**\r\n * @brief Gets active interrupt ( reads the active register in NVIC and returns the active bit).\r\n * @param IRQn External interrupt number\r\n *         This parameter can be an enumerator of IRQn_Type enumeration\r\n *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f10xxx.h))\r\n * @retval status: - 0  Interrupt status is not pending.\r\n *                 - 1  Interrupt status is pending.\r\n */\r\nuint32_t HAL_NVIC_GetActive(IRQn_Type IRQn) {\r\n  /* Check the parameters */\r\n  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));\r\n\r\n  /* Return 1 if active else 0 */\r\n  return NVIC_GetActive(IRQn);\r\n}\r\n\r\n/**\r\n * @brief  Configures the SysTick clock source.\r\n * @param  CLKSource: specifies the SysTick clock source.\r\n *         This parameter can be one of the following values:\r\n *             @arg SYSTICK_CLKSOURCE_HCLK_DIV8: AHB clock divided by 8 selected as SysTick clock source.\r\n *             @arg SYSTICK_CLKSOURCE_HCLK: AHB clock selected as SysTick clock source.\r\n * @retval None\r\n */\r\nvoid HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource) {\r\n  /* Check the parameters */\r\n  assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource));\r\n  if (CLKSource == SYSTICK_CLKSOURCE_HCLK) {\r\n    SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK;\r\n  } else {\r\n    SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  This function handles SYSTICK interrupt request.\r\n * @retval None\r\n */\r\nvoid HAL_SYSTICK_IRQHandler(void) { HAL_SYSTICK_Callback(); }\r\n\r\n/**\r\n * @brief  SYSTICK callback.\r\n * @retval None\r\n */\r\n__weak void HAL_SYSTICK_Callback(void) {\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_SYSTICK_Callback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_CORTEX_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_dma.c\r\n  * @author  MCD Application Team\r\n  * @brief   DMA HAL module driver.\r\n  *         This file provides firmware functions to manage the following\r\n  *         functionalities of the Direct Memory Access (DMA) peripheral:\r\n  *           + Initialization and de-initialization functions\r\n  *           + IO operation functions\r\n  *           + Peripheral State and errors functions\r\n  @verbatim\r\n  ==============================================================================\r\n                        ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..]\r\n   (#) Enable and configure the peripheral to be connected to the DMA Channel\r\n       (except for internal SRAM / FLASH memories: no initialization is\r\n       necessary). Please refer to the Reference manual for connection between peripherals\r\n       and DMA requests.\r\n\r\n   (#) For a given Channel, program the required configuration through the following parameters:\r\n       Channel request, Transfer Direction, Source and Destination data formats,\r\n       Circular or Normal mode, Channel Priority level, Source and Destination Increment mode\r\n       using HAL_DMA_Init() function.\r\n\r\n   (#) Use HAL_DMA_GetState() function to return the DMA state and HAL_DMA_GetError() in case of error\r\n       detection.\r\n\r\n   (#) Use HAL_DMA_Abort() function to abort the current transfer\r\n\r\n     -@-   In Memory-to-Memory transfer mode, Circular mode is not allowed.\r\n     *** Polling mode IO operation ***\r\n     =================================\r\n    [..]\r\n          (+) Use HAL_DMA_Start() to start DMA transfer after the configuration of Source\r\n              address and destination address and the Length of data to be transferred\r\n          (+) Use HAL_DMA_PollForTransfer() to poll for the end of current transfer, in this\r\n              case a fixed Timeout can be configured by User depending from his application.\r\n\r\n     *** Interrupt mode IO operation ***\r\n     ===================================\r\n    [..]\r\n          (+) Configure the DMA interrupt priority using HAL_NVIC_SetPriority()\r\n          (+) Enable the DMA IRQ handler using HAL_NVIC_EnableIRQ()\r\n          (+) Use HAL_DMA_Start_IT() to start DMA transfer after the configuration of\r\n              Source address and destination address and the Length of data to be transferred.\r\n              In this case the DMA interrupt is configured\r\n          (+) Use HAL_DMA_IRQHandler() called under DMA_IRQHandler() Interrupt subroutine\r\n          (+) At the end of data transfer HAL_DMA_IRQHandler() function is executed and user can\r\n              add his own function by customization of function pointer XferCpltCallback and\r\n              XferErrorCallback (i.e. a member of DMA handle structure).\r\n\r\n     *** DMA HAL driver macros list ***\r\n     =============================================\r\n      [..]\r\n       Below the list of most used macros in DMA HAL driver.\r\n\r\n       (+) __HAL_DMA_ENABLE: Enable the specified DMA Channel.\r\n       (+) __HAL_DMA_DISABLE: Disable the specified DMA Channel.\r\n       (+) __HAL_DMA_GET_FLAG: Get the DMA Channel pending flags.\r\n       (+) __HAL_DMA_CLEAR_FLAG: Clear the DMA Channel pending flags.\r\n       (+) __HAL_DMA_ENABLE_IT: Enable the specified DMA Channel interrupts.\r\n       (+) __HAL_DMA_DISABLE_IT: Disable the specified DMA Channel interrupts.\r\n       (+) __HAL_DMA_GET_IT_SOURCE: Check whether the specified DMA Channel interrupt has occurred or not.\r\n\r\n     [..]\r\n      (@) You can refer to the DMA HAL driver header file for more useful macros\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup DMA DMA\r\n * @brief DMA HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_DMA_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @defgroup DMA_Private_Functions DMA Private Functions\r\n * @{\r\n */\r\nstatic void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength);\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions ---------------------------------------------------------*/\r\n\r\n/** @defgroup DMA_Exported_Functions DMA Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup DMA_Exported_Functions_Group1 Initialization and de-initialization functions\r\n  *  @brief   Initialization and de-initialization functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n             ##### Initialization and de-initialization functions  #####\r\n ===============================================================================\r\n    [..]\r\n    This section provides functions allowing to initialize the DMA Channel source\r\n    and destination addresses, incrementation and data sizes, transfer direction,\r\n    circular/normal mode selection, memory-to-memory mode selection and Channel priority value.\r\n    [..]\r\n    The HAL_DMA_Init() function follows the DMA configuration procedures as described in\r\n    reference manual.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initialize the DMA according to the specified\r\n *         parameters in the DMA_InitTypeDef and initialize the associated handle.\r\n * @param  hdma: Pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) {\r\n  uint32_t tmp = 0U;\r\n\r\n  /* Check the DMA handle allocation */\r\n  if (hdma == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance));\r\n  assert_param(IS_DMA_DIRECTION(hdma->Init.Direction));\r\n  assert_param(IS_DMA_PERIPHERAL_INC_STATE(hdma->Init.PeriphInc));\r\n  assert_param(IS_DMA_MEMORY_INC_STATE(hdma->Init.MemInc));\r\n  assert_param(IS_DMA_PERIPHERAL_DATA_SIZE(hdma->Init.PeriphDataAlignment));\r\n  assert_param(IS_DMA_MEMORY_DATA_SIZE(hdma->Init.MemDataAlignment));\r\n  assert_param(IS_DMA_MODE(hdma->Init.Mode));\r\n  assert_param(IS_DMA_PRIORITY(hdma->Init.Priority));\r\n\r\n#if defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F100xE) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  /* calculation of the channel index */\r\n  if ((uint32_t)(hdma->Instance) < (uint32_t)(DMA2_Channel1)) {\r\n    /* DMA1 */\r\n    hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2;\r\n    hdma->DmaBaseAddress = DMA1;\r\n  } else {\r\n    /* DMA2 */\r\n    hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA2_Channel1) / ((uint32_t)DMA2_Channel2 - (uint32_t)DMA2_Channel1)) << 2;\r\n    hdma->DmaBaseAddress = DMA2;\r\n  }\r\n#else\r\n  /* DMA1 */\r\n  hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2;\r\n  hdma->DmaBaseAddress = DMA1;\r\n#endif /* STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG || STM32F100xE || STM32F105xC || STM32F107xC */\r\n\r\n  /* Change DMA peripheral state */\r\n  hdma->State = HAL_DMA_STATE_BUSY;\r\n\r\n  /* Get the CR register value */\r\n  tmp = hdma->Instance->CCR;\r\n\r\n  /* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC and DIR bits */\r\n  tmp &= ((uint32_t)~(DMA_CCR_PL | DMA_CCR_MSIZE | DMA_CCR_PSIZE | DMA_CCR_MINC | DMA_CCR_PINC | DMA_CCR_CIRC | DMA_CCR_DIR));\r\n\r\n  /* Prepare the DMA Channel configuration */\r\n  tmp |= hdma->Init.Direction | hdma->Init.PeriphInc | hdma->Init.MemInc | hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment | hdma->Init.Mode | hdma->Init.Priority;\r\n\r\n  /* Write to DMA Channel CR register */\r\n  hdma->Instance->CCR = tmp;\r\n\r\n  /* Initialise the error code */\r\n  hdma->ErrorCode = HAL_DMA_ERROR_NONE;\r\n\r\n  /* Initialize the DMA state*/\r\n  hdma->State = HAL_DMA_STATE_READY;\r\n  /* Allocate lock resource and initialize it */\r\n  hdma->Lock = HAL_UNLOCKED;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitialize the DMA peripheral.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma) {\r\n  /* Check the DMA handle allocation */\r\n  if (hdma == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_DMA_ALL_INSTANCE(hdma->Instance));\r\n\r\n  /* Disable the selected DMA Channelx */\r\n  __HAL_DMA_DISABLE(hdma);\r\n\r\n  /* Reset DMA Channel control register */\r\n  hdma->Instance->CCR = 0U;\r\n\r\n  /* Reset DMA Channel Number of Data to Transfer register */\r\n  hdma->Instance->CNDTR = 0U;\r\n\r\n  /* Reset DMA Channel peripheral address register */\r\n  hdma->Instance->CPAR = 0U;\r\n\r\n  /* Reset DMA Channel memory address register */\r\n  hdma->Instance->CMAR = 0U;\r\n\r\n#if defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F100xE) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  /* calculation of the channel index */\r\n  if ((uint32_t)(hdma->Instance) < (uint32_t)(DMA2_Channel1)) {\r\n    /* DMA1 */\r\n    hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2;\r\n    hdma->DmaBaseAddress = DMA1;\r\n  } else {\r\n    /* DMA2 */\r\n    hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA2_Channel1) / ((uint32_t)DMA2_Channel2 - (uint32_t)DMA2_Channel1)) << 2;\r\n    hdma->DmaBaseAddress = DMA2;\r\n  }\r\n#else\r\n  /* DMA1 */\r\n  hdma->ChannelIndex   = (((uint32_t)hdma->Instance - (uint32_t)DMA1_Channel1) / ((uint32_t)DMA1_Channel2 - (uint32_t)DMA1_Channel1)) << 2;\r\n  hdma->DmaBaseAddress = DMA1;\r\n#endif /* STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG || STM32F100xE || STM32F105xC || STM32F107xC */\r\n\r\n  /* Clear all flags */\r\n  hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << (hdma->ChannelIndex));\r\n\r\n  /* Clean all callbacks */\r\n  hdma->XferCpltCallback     = NULL;\r\n  hdma->XferHalfCpltCallback = NULL;\r\n  hdma->XferErrorCallback    = NULL;\r\n  hdma->XferAbortCallback    = NULL;\r\n\r\n  /* Reset the error code */\r\n  hdma->ErrorCode = HAL_DMA_ERROR_NONE;\r\n\r\n  /* Reset the DMA state */\r\n  hdma->State = HAL_DMA_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(hdma);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Exported_Functions_Group2 Input and Output operation functions\r\n  *  @brief   Input and Output operation functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                      #####  IO operation functions  #####\r\n ===============================================================================\r\n    [..]  This section provides functions allowing to:\r\n      (+) Configure the source, destination address and data length and Start DMA transfer\r\n      (+) Configure the source, destination address and data length and\r\n          Start DMA transfer with interrupt\r\n      (+) Abort DMA transfer\r\n      (+) Poll for transfer complete\r\n      (+) Handle DMA interrupt request\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Start the DMA Transfer.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @param  SrcAddress: The source memory Buffer address\r\n * @param  DstAddress: The destination memory Buffer address\r\n * @param  DataLength: The length of data to be transferred from source to destination\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_DMA_BUFFER_SIZE(DataLength));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hdma);\r\n\r\n  if (HAL_DMA_STATE_READY == hdma->State) {\r\n    /* Change DMA peripheral state */\r\n    hdma->State     = HAL_DMA_STATE_BUSY;\r\n    hdma->ErrorCode = HAL_DMA_ERROR_NONE;\r\n\r\n    /* Disable the peripheral */\r\n    __HAL_DMA_DISABLE(hdma);\r\n\r\n    /* Configure the source, destination address and the data length & clear flags*/\r\n    DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength);\r\n\r\n    /* Enable the Peripheral */\r\n    __HAL_DMA_ENABLE(hdma);\r\n  } else {\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hdma);\r\n    status = HAL_BUSY;\r\n  }\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Start the DMA Transfer with interrupt enabled.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @param  SrcAddress: The source memory Buffer address\r\n * @param  DstAddress: The destination memory Buffer address\r\n * @param  DataLength: The length of data to be transferred from source to destination\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_DMA_BUFFER_SIZE(DataLength));\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hdma);\r\n\r\n  if (HAL_DMA_STATE_READY == hdma->State) {\r\n    /* Change DMA peripheral state */\r\n    hdma->State     = HAL_DMA_STATE_BUSY;\r\n    hdma->ErrorCode = HAL_DMA_ERROR_NONE;\r\n\r\n    /* Disable the peripheral */\r\n    __HAL_DMA_DISABLE(hdma);\r\n\r\n    /* Configure the source, destination address and the data length & clear flags*/\r\n    DMA_SetConfig(hdma, SrcAddress, DstAddress, DataLength);\r\n\r\n    /* Enable the transfer complete interrupt */\r\n    /* Enable the transfer Error interrupt */\r\n    if (NULL != hdma->XferHalfCpltCallback) {\r\n      /* Enable the Half transfer complete interrupt as well */\r\n      __HAL_DMA_ENABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));\r\n    } else {\r\n      __HAL_DMA_DISABLE_IT(hdma, DMA_IT_HT);\r\n      __HAL_DMA_ENABLE_IT(hdma, (DMA_IT_TC | DMA_IT_TE));\r\n    }\r\n    /* Enable the Peripheral */\r\n    __HAL_DMA_ENABLE(hdma);\r\n  } else {\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hdma);\r\n\r\n    /* Remain BUSY */\r\n    status = HAL_BUSY;\r\n  }\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Abort the DMA Transfer.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Disable DMA IT */\r\n  __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));\r\n\r\n  /* Disable the channel */\r\n  __HAL_DMA_DISABLE(hdma);\r\n\r\n  /* Clear all flags */\r\n  hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex);\r\n\r\n  /* Change the DMA state */\r\n  hdma->State = HAL_DMA_STATE_READY;\r\n\r\n  /* Process Unlocked */\r\n  __HAL_UNLOCK(hdma);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Aborts the DMA Transfer in Interrupt mode.\r\n * @param  hdma  : pointer to a DMA_HandleTypeDef structure that contains\r\n *                 the configuration information for the specified DMA Channel.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  if (HAL_DMA_STATE_BUSY != hdma->State) {\r\n    /* no transfer ongoing */\r\n    hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;\r\n\r\n    status = HAL_ERROR;\r\n  } else {\r\n    /* Disable DMA IT */\r\n    __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));\r\n\r\n    /* Disable the channel */\r\n    __HAL_DMA_DISABLE(hdma);\r\n\r\n    /* Clear all flags */\r\n    __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_GI_FLAG_INDEX(hdma));\r\n\r\n    /* Change the DMA state */\r\n    hdma->State = HAL_DMA_STATE_READY;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hdma);\r\n\r\n    /* Call User Abort callback */\r\n    if (hdma->XferAbortCallback != NULL) {\r\n      hdma->XferAbortCallback(hdma);\r\n    }\r\n  }\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Polling for transfer complete.\r\n * @param  hdma:    pointer to a DMA_HandleTypeDef structure that contains\r\n *                  the configuration information for the specified DMA Channel.\r\n * @param  CompleteLevel: Specifies the DMA level complete.\r\n * @param  Timeout:       Timeout duration.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_PollForTransfer(DMA_HandleTypeDef *hdma, uint32_t CompleteLevel, uint32_t Timeout) {\r\n  uint32_t temp;\r\n  uint32_t tickstart = 0U;\r\n\r\n  if (HAL_DMA_STATE_BUSY != hdma->State) {\r\n    /* no transfer ongoing */\r\n    hdma->ErrorCode = HAL_DMA_ERROR_NO_XFER;\r\n    __HAL_UNLOCK(hdma);\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Polling mode not supported in circular mode */\r\n  if (RESET != (hdma->Instance->CCR & DMA_CCR_CIRC)) {\r\n    hdma->ErrorCode = HAL_DMA_ERROR_NOT_SUPPORTED;\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Get the level transfer complete flag */\r\n  if (CompleteLevel == HAL_DMA_FULL_TRANSFER) {\r\n    /* Transfer Complete flag */\r\n    temp = __HAL_DMA_GET_TC_FLAG_INDEX(hdma);\r\n  } else {\r\n    /* Half Transfer Complete flag */\r\n    temp = __HAL_DMA_GET_HT_FLAG_INDEX(hdma);\r\n  }\r\n\r\n  /* Get tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  while (__HAL_DMA_GET_FLAG(hdma, temp) == RESET) {\r\n    if ((__HAL_DMA_GET_FLAG(hdma, __HAL_DMA_GET_TE_FLAG_INDEX(hdma)) != RESET)) {\r\n      /* When a DMA transfer error occurs */\r\n      /* A hardware clear of its EN bits is performed */\r\n      /* Clear all flags */\r\n      hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex);\r\n\r\n      /* Update error code */\r\n      SET_BIT(hdma->ErrorCode, HAL_DMA_ERROR_TE);\r\n\r\n      /* Change the DMA state */\r\n      hdma->State = HAL_DMA_STATE_READY;\r\n\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(hdma);\r\n\r\n      return HAL_ERROR;\r\n    }\r\n    /* Check for the Timeout */\r\n    if (Timeout != HAL_MAX_DELAY) {\r\n      if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n        /* Update error code */\r\n        SET_BIT(hdma->ErrorCode, HAL_DMA_ERROR_TIMEOUT);\r\n\r\n        /* Change the DMA state */\r\n        hdma->State = HAL_DMA_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hdma);\r\n\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n  }\r\n\r\n  if (CompleteLevel == HAL_DMA_FULL_TRANSFER) {\r\n    /* Clear the transfer complete flag */\r\n    __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma));\r\n\r\n    /* The selected Channelx EN bit is cleared (DMA is disabled and\r\n    all transfers are complete) */\r\n    hdma->State = HAL_DMA_STATE_READY;\r\n  } else {\r\n    /* Clear the half transfer complete flag */\r\n    __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma));\r\n  }\r\n\r\n  /* Process unlocked */\r\n  __HAL_UNLOCK(hdma);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Handles DMA interrupt request.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @retval None\r\n */\r\nvoid HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma) {\r\n  uint32_t flag_it   = hdma->DmaBaseAddress->ISR;\r\n  uint32_t source_it = hdma->Instance->CCR;\r\n\r\n  /* Half Transfer Complete Interrupt management ******************************/\r\n  if (((flag_it & (DMA_FLAG_HT1 << hdma->ChannelIndex)) != RESET) && ((source_it & DMA_IT_HT) != RESET)) {\r\n\r\n    /* Clear the half transfer complete flag */\r\n    __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_HT_FLAG_INDEX(hdma));\r\n\r\n  }\r\n\r\n  /* Transfer Complete Interrupt management ***********************************/\r\n  else if (((flag_it & (DMA_FLAG_TC1 << hdma->ChannelIndex)) != RESET) && ((source_it & DMA_IT_TC) != RESET)) {\r\n    if ((hdma->Instance->CCR & DMA_CCR_CIRC) == 0U) {\r\n      /* Disable the transfer complete and error interrupt */\r\n      __HAL_DMA_DISABLE_IT(hdma, DMA_IT_TE | DMA_IT_TC);\r\n\r\n      /* Change the DMA state */\r\n      hdma->State = HAL_DMA_STATE_READY;\r\n    }\r\n    /* Clear the transfer complete flag */\r\n    __HAL_DMA_CLEAR_FLAG(hdma, __HAL_DMA_GET_TC_FLAG_INDEX(hdma));\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hdma);\r\n\r\n    if (hdma->XferCpltCallback != NULL) {\r\n      /* Transfer complete callback */\r\n      hdma->XferCpltCallback(hdma);\r\n    }\r\n  }\r\n\r\n  /* Transfer Error Interrupt management **************************************/\r\n  else if ((RESET != (flag_it & (DMA_FLAG_TE1 << hdma->ChannelIndex))) && (RESET != (source_it & DMA_IT_TE))) {\r\n    /* When a DMA transfer error occurs */\r\n    /* A hardware clear of its EN bits is performed */\r\n    /* Disable ALL DMA IT */\r\n    __HAL_DMA_DISABLE_IT(hdma, (DMA_IT_TC | DMA_IT_HT | DMA_IT_TE));\r\n\r\n    /* Clear all flags */\r\n    hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex);\r\n\r\n    /* Update error code */\r\n    hdma->ErrorCode = HAL_DMA_ERROR_TE;\r\n\r\n    /* Change the DMA state */\r\n    hdma->State = HAL_DMA_STATE_READY;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hdma);\r\n\r\n    if (hdma->XferErrorCallback != NULL) {\r\n      /* Transfer error callback */\r\n      hdma->XferErrorCallback(hdma);\r\n    }\r\n  }\r\n  return;\r\n}\r\n\r\n/**\r\n * @brief Register callbacks\r\n * @param hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *              the configuration information for the specified DMA Channel.\r\n * @param CallbackID: User Callback identifer\r\n *                    a HAL_DMA_CallbackIDTypeDef ENUM as parameter.\r\n * @param pCallback: pointer to private callbacsk function which has pointer to\r\n *                   a DMA_HandleTypeDef structure as parameter.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_RegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID, void (*pCallback)(DMA_HandleTypeDef *_hdma)) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hdma);\r\n\r\n  if (HAL_DMA_STATE_READY == hdma->State) {\r\n    switch (CallbackID) {\r\n    case HAL_DMA_XFER_CPLT_CB_ID:\r\n      hdma->XferCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_HALFCPLT_CB_ID:\r\n      hdma->XferHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_ERROR_CB_ID:\r\n      hdma->XferErrorCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_ABORT_CB_ID:\r\n      hdma->XferAbortCallback = pCallback;\r\n      break;\r\n\r\n    default:\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else {\r\n    status = HAL_ERROR;\r\n  }\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(hdma);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief UnRegister callbacks\r\n * @param hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *              the configuration information for the specified DMA Channel.\r\n * @param CallbackID: User Callback identifer\r\n *                    a HAL_DMA_CallbackIDTypeDef ENUM as parameter.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_DMA_UnRegisterCallback(DMA_HandleTypeDef *hdma, HAL_DMA_CallbackIDTypeDef CallbackID) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(hdma);\r\n\r\n  if (HAL_DMA_STATE_READY == hdma->State) {\r\n    switch (CallbackID) {\r\n    case HAL_DMA_XFER_CPLT_CB_ID:\r\n      hdma->XferCpltCallback = NULL;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_HALFCPLT_CB_ID:\r\n      hdma->XferHalfCpltCallback = NULL;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_ERROR_CB_ID:\r\n      hdma->XferErrorCallback = NULL;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_ABORT_CB_ID:\r\n      hdma->XferAbortCallback = NULL;\r\n      break;\r\n\r\n    case HAL_DMA_XFER_ALL_CB_ID:\r\n      hdma->XferCpltCallback     = NULL;\r\n      hdma->XferHalfCpltCallback = NULL;\r\n      hdma->XferErrorCallback    = NULL;\r\n      hdma->XferAbortCallback    = NULL;\r\n      break;\r\n\r\n    default:\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else {\r\n    status = HAL_ERROR;\r\n  }\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(hdma);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup DMA_Exported_Functions_Group3 Peripheral State and Errors functions\r\n  *  @brief    Peripheral State and Errors functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n            ##### Peripheral State and Errors functions #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides functions allowing to\r\n      (+) Check the DMA state\r\n      (+) Get error code\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Return the DMA hande state.\r\n * @param  hdma: pointer to a DMA_HandleTypeDef structure that contains\r\n *               the configuration information for the specified DMA Channel.\r\n * @retval HAL state\r\n */\r\nHAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma) {\r\n  /* Return DMA handle state */\r\n  return hdma->State;\r\n}\r\n\r\n/**\r\n * @brief  Return the DMA error code.\r\n * @param  hdma : pointer to a DMA_HandleTypeDef structure that contains\r\n *              the configuration information for the specified DMA Channel.\r\n * @retval DMA Error Code\r\n */\r\nuint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma) { return hdma->ErrorCode; }\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup DMA_Private_Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Sets the DMA Transfer parameter.\r\n * @param  hdma:       pointer to a DMA_HandleTypeDef structure that contains\r\n *                     the configuration information for the specified DMA Channel.\r\n * @param  SrcAddress: The source memory Buffer address\r\n * @param  DstAddress: The destination memory Buffer address\r\n * @param  DataLength: The length of data to be transferred from source to destination\r\n * @retval HAL status\r\n */\r\nstatic void DMA_SetConfig(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength) {\r\n  /* Clear all flags */\r\n  hdma->DmaBaseAddress->IFCR = (DMA_ISR_GIF1 << hdma->ChannelIndex);\r\n\r\n  /* Configure DMA Channel data length */\r\n  hdma->Instance->CNDTR = DataLength;\r\n\r\n  /* Memory to Peripheral */\r\n  if ((hdma->Init.Direction) == DMA_MEMORY_TO_PERIPH) {\r\n    /* Configure DMA Channel destination address */\r\n    hdma->Instance->CPAR = DstAddress;\r\n\r\n    /* Configure DMA Channel source address */\r\n    hdma->Instance->CMAR = SrcAddress;\r\n  }\r\n  /* Peripheral to Memory */\r\n  else {\r\n    /* Configure DMA Channel source address */\r\n    hdma->Instance->CPAR = SrcAddress;\r\n\r\n    /* Configure DMA Channel destination address */\r\n    hdma->Instance->CMAR = DstAddress;\r\n  }\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_DMA_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_flash.c\r\n  * @author  MCD Application Team\r\n  * @brief   FLASH HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the internal FLASH memory:\r\n  *           + Program operations functions\r\n  *           + Memory Control functions\r\n  *           + Peripheral State functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                        ##### FLASH peripheral features #####\r\n  ==============================================================================\r\n  [..] The Flash memory interface manages CPU AHB I-Code and D-Code accesses\r\n       to the Flash memory. It implements the erase and program Flash memory operations\r\n       and the read and write protection mechanisms.\r\n\r\n  [..] The Flash memory interface accelerates code execution with a system of instruction\r\n      prefetch.\r\n\r\n  [..] The FLASH main features are:\r\n      (+) Flash memory read operations\r\n      (+) Flash memory program/erase operations\r\n      (+) Read / write protections\r\n      (+) Prefetch on I-Code\r\n      (+) Option Bytes programming\r\n\r\n\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..]\r\n      This driver provides functions and macros to configure and program the FLASH\r\n      memory of all STM32F1xx devices.\r\n\r\n      (#) FLASH Memory I/O Programming functions: this group includes all needed\r\n          functions to erase and program the main memory:\r\n        (++) Lock and Unlock the FLASH interface\r\n        (++) Erase function: Erase page, erase all pages\r\n        (++) Program functions: half word, word and doubleword\r\n      (#) FLASH Option Bytes Programming functions: this group includes all needed\r\n          functions to manage the Option Bytes:\r\n        (++) Lock and Unlock the Option Bytes\r\n        (++) Set/Reset the write protection\r\n        (++) Set the Read protection Level\r\n        (++) Program the user Option Bytes\r\n        (++) Launch the Option Bytes loader\r\n        (++) Erase Option Bytes\r\n        (++) Program the data Option Bytes\r\n        (++) Get the Write protection.\r\n        (++) Get the user option bytes.\r\n\r\n      (#) Interrupts and flags management functions : this group\r\n          includes all needed functions to:\r\n        (++) Handle FLASH interrupts\r\n        (++) Wait for last FLASH operation according to its status\r\n        (++) Get error flag status\r\n\r\n  [..] In addition to these function, this driver includes a set of macros allowing\r\n       to handle the following operations:\r\n\r\n      (+) Set/Get the latency\r\n      (+) Enable/Disable the prefetch buffer\r\n      (+) Enable/Disable the half cycle access\r\n      (+) Enable/Disable the FLASH interrupts\r\n      (+) Monitor the FLASH flags status\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_FLASH_MODULE_ENABLED\r\n\r\n/** @defgroup FLASH FLASH\r\n * @brief FLASH HAL module driver\r\n * @{\r\n */\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup FLASH_Private_Constants FLASH Private Constants\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro ---------------------------- ---------------------------------*/\r\n/** @defgroup FLASH_Private_Macros FLASH Private Macros\r\n * @{\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private variables ---------------------------------------------------------*/\r\n/** @defgroup FLASH_Private_Variables FLASH Private Variables\r\n * @{\r\n */\r\n/* Variables used for Erase pages under interruption*/\r\nFLASH_ProcessTypeDef pFlash;\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @defgroup FLASH_Private_Functions FLASH Private Functions\r\n * @{\r\n */\r\nstatic void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data);\r\nstatic void FLASH_SetErrorCode(void);\r\nextern void FLASH_PageErase(uint32_t PageAddress);\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions ---------------------------------------------------------*/\r\n/** @defgroup FLASH_Exported_Functions FLASH Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASH_Exported_Functions_Group1 Programming operation functions\r\n  *  @brief   Programming operation functions\r\n  *\r\n@verbatim\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Program halfword, word or double word at a specified address\r\n * @note   The function HAL_FLASH_Unlock() should be called before to unlock the FLASH interface\r\n *         The function HAL_FLASH_Lock() should be called after to lock the FLASH interface\r\n *\r\n * @note   If an erase and a program operations are requested simultaneously,\r\n *         the erase operation is performed before the program one.\r\n *\r\n * @note   FLASH should be previously erased before new programmation (only exception to this\r\n *         is when 0x0000 is programmed)\r\n *\r\n * @param  TypeProgram:  Indicate the way to program at a specified address.\r\n *                       This parameter can be a value of @ref FLASH_Type_Program\r\n * @param  Address:      Specifies the address to be programmed.\r\n * @param  Data:         Specifies the data to be programmed\r\n *\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data) {\r\n  HAL_StatusTypeDef status       = HAL_ERROR;\r\n  uint8_t           index        = 0;\r\n  uint8_t           nbiterations = 0;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(&pFlash);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));\r\n  assert_param(IS_FLASH_PROGRAM_ADDRESS(Address));\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  if (Address <= FLASH_BANK1_END) {\r\n#endif /* FLASH_BANK2_END */\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);\r\n#if defined(FLASH_BANK2_END)\r\n  } else {\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperationBank2(FLASH_TIMEOUT_VALUE);\r\n  }\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  if (status == HAL_OK) {\r\n    if (TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) {\r\n      /* Program halfword (16-bit) at a specified address. */\r\n      nbiterations = 1U;\r\n    } else if (TypeProgram == FLASH_TYPEPROGRAM_WORD) {\r\n      /* Program word (32-bit = 2*16-bit) at a specified address. */\r\n      nbiterations = 2U;\r\n    } else {\r\n      /* Program double word (64-bit = 4*16-bit) at a specified address. */\r\n      nbiterations = 4U;\r\n    }\r\n\r\n    for (index = 0U; index < nbiterations; index++) {\r\n      FLASH_Program_HalfWord((Address + (2U * index)), (uint16_t)(Data >> (16U * index)));\r\n\r\n#if defined(FLASH_BANK2_END)\r\n      if (Address <= FLASH_BANK1_END) {\r\n#endif /* FLASH_BANK2_END */\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);\r\n\r\n        /* If the program operation is completed, disable the PG Bit */\r\n        CLEAR_BIT(FLASH->CR, FLASH_CR_PG);\r\n#if defined(FLASH_BANK2_END)\r\n      } else {\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperationBank2(FLASH_TIMEOUT_VALUE);\r\n\r\n        /* If the program operation is completed, disable the PG Bit */\r\n        CLEAR_BIT(FLASH->CR2, FLASH_CR2_PG);\r\n      }\r\n#endif /* FLASH_BANK2_END */\r\n      /* In case of error, stop programation procedure */\r\n      if (status != HAL_OK) {\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Process Unlocked */\r\n  __HAL_UNLOCK(&pFlash);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Program halfword, word or double word at a specified address  with interrupt enabled.\r\n * @note   The function HAL_FLASH_Unlock() should be called before to unlock the FLASH interface\r\n *         The function HAL_FLASH_Lock() should be called after to lock the FLASH interface\r\n *\r\n * @note   If an erase and a program operations are requested simultaneously,\r\n *         the erase operation is performed before the program one.\r\n *\r\n * @param  TypeProgram: Indicate the way to program at a specified address.\r\n *                      This parameter can be a value of @ref FLASH_Type_Program\r\n * @param  Address:     Specifies the address to be programmed.\r\n * @param  Data:        Specifies the data to be programmed\r\n *\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_Program_IT(uint32_t TypeProgram, uint32_t Address, uint64_t Data) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(&pFlash);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_FLASH_TYPEPROGRAM(TypeProgram));\r\n  assert_param(IS_FLASH_PROGRAM_ADDRESS(Address));\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  /* If procedure already ongoing, reject the next one */\r\n  if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  if (Address <= FLASH_BANK1_END) {\r\n    /* Enable End of FLASH Operation and Error source interrupts */\r\n    __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP_BANK1 | FLASH_IT_ERR_BANK1);\r\n\r\n  } else {\r\n    /* Enable End of FLASH Operation and Error source interrupts */\r\n    __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP_BANK2 | FLASH_IT_ERR_BANK2);\r\n  }\r\n#else\r\n  /* Enable End of FLASH Operation and Error source interrupts */\r\n  __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR);\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  pFlash.Address = Address;\r\n  pFlash.Data    = Data;\r\n\r\n  if (TypeProgram == FLASH_TYPEPROGRAM_HALFWORD) {\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMHALFWORD;\r\n    /* Program halfword (16-bit) at a specified address. */\r\n    pFlash.DataRemaining = 1U;\r\n  } else if (TypeProgram == FLASH_TYPEPROGRAM_WORD) {\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMWORD;\r\n    /* Program word (32-bit : 2*16-bit) at a specified address. */\r\n    pFlash.DataRemaining = 2U;\r\n  } else {\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_PROGRAMDOUBLEWORD;\r\n    /* Program double word (64-bit : 4*16-bit) at a specified address. */\r\n    pFlash.DataRemaining = 4U;\r\n  }\r\n\r\n  /* Program halfword (16-bit) at a specified address. */\r\n  FLASH_Program_HalfWord(Address, (uint16_t)Data);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief This function handles FLASH interrupt request.\r\n * @retval None\r\n */\r\nvoid HAL_FLASH_IRQHandler(void) {\r\n  uint32_t addresstmp = 0U;\r\n\r\n  /* Check FLASH operation error flags */\r\n#if defined(FLASH_BANK2_END)\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR_BANK1) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR_BANK1) || (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR_BANK2) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR_BANK2)))\r\n#else\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR))\r\n#endif /* FLASH_BANK2_END */\r\n  {\r\n    /* Return the faulty address */\r\n    addresstmp = pFlash.Address;\r\n    /* Reset address */\r\n    pFlash.Address = 0xFFFFFFFFU;\r\n\r\n    /* Save the Error code */\r\n    FLASH_SetErrorCode();\r\n\r\n    /* FLASH error interrupt user callback */\r\n    HAL_FLASH_OperationErrorCallback(addresstmp);\r\n\r\n    /* Stop the procedure ongoing */\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n  }\r\n\r\n  /* Check FLASH End of Operation flag  */\r\n#if defined(FLASH_BANK2_END)\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP_BANK1)) {\r\n    /* Clear FLASH End of Operation pending bit */\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP_BANK1);\r\n#else\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP)) {\r\n    /* Clear FLASH End of Operation pending bit */\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);\r\n#endif /* FLASH_BANK2_END */\r\n\r\n    /* Process can continue only if no error detected */\r\n    if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE) {\r\n      if (pFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE) {\r\n        /* Nb of pages to erased can be decreased */\r\n        pFlash.DataRemaining--;\r\n\r\n        /* Check if there are still pages to erase */\r\n        if (pFlash.DataRemaining != 0U) {\r\n          addresstmp = pFlash.Address;\r\n          /*Indicate user which sector has been erased */\r\n          HAL_FLASH_EndOfOperationCallback(addresstmp);\r\n\r\n          /*Increment sector number*/\r\n          addresstmp     = pFlash.Address + FLASH_PAGE_SIZE;\r\n          pFlash.Address = addresstmp;\r\n\r\n          /* If the erase operation is completed, disable the PER Bit */\r\n          CLEAR_BIT(FLASH->CR, FLASH_CR_PER);\r\n\r\n          FLASH_PageErase(addresstmp);\r\n        } else {\r\n          /* No more pages to Erase, user callback can be called. */\r\n          /* Reset Sector and stop Erase pages procedure */\r\n          pFlash.Address = addresstmp = 0xFFFFFFFFU;\r\n          pFlash.ProcedureOnGoing     = FLASH_PROC_NONE;\r\n          /* FLASH EOP interrupt user callback */\r\n          HAL_FLASH_EndOfOperationCallback(addresstmp);\r\n        }\r\n      } else if (pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) {\r\n        /* Operation is completed, disable the MER Bit */\r\n        CLEAR_BIT(FLASH->CR, FLASH_CR_MER);\r\n\r\n#if defined(FLASH_BANK2_END)\r\n        /* Stop Mass Erase procedure if no pending mass erase on other bank */\r\n        if (HAL_IS_BIT_CLR(FLASH->CR2, FLASH_CR2_MER)) {\r\n#endif /* FLASH_BANK2_END */\r\n          /* MassErase ended. Return the selected bank */\r\n          /* FLASH EOP interrupt user callback */\r\n          HAL_FLASH_EndOfOperationCallback(0U);\r\n\r\n          /* Stop Mass Erase procedure*/\r\n          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n        }\r\n#if defined(FLASH_BANK2_END)\r\n      }\r\n#endif /* FLASH_BANK2_END */\r\n      else {\r\n        /* Nb of 16-bit data to program can be decreased */\r\n        pFlash.DataRemaining--;\r\n\r\n        /* Check if there are still 16-bit data to program */\r\n        if (pFlash.DataRemaining != 0U) {\r\n          /* Increment address to 16-bit */\r\n          pFlash.Address += 2U;\r\n          addresstmp = pFlash.Address;\r\n\r\n          /* Shift to have next 16-bit data */\r\n          pFlash.Data = (pFlash.Data >> 16U);\r\n\r\n          /* Operation is completed, disable the PG Bit */\r\n          CLEAR_BIT(FLASH->CR, FLASH_CR_PG);\r\n\r\n          /*Program halfword (16-bit) at a specified address.*/\r\n          FLASH_Program_HalfWord(addresstmp, (uint16_t)pFlash.Data);\r\n        } else {\r\n          /* Program ended. Return the selected address */\r\n          /* FLASH EOP interrupt user callback */\r\n          if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMHALFWORD) {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address);\r\n          } else if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMWORD) {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address - 2U);\r\n          } else {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address - 6U);\r\n          }\r\n\r\n          /* Reset Address and stop Program procedure */\r\n          pFlash.Address          = 0xFFFFFFFFU;\r\n          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  /* Check FLASH End of Operation flag  */\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP_BANK2)) {\r\n    /* Clear FLASH End of Operation pending bit */\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP_BANK2);\r\n\r\n    /* Process can continue only if no error detected */\r\n    if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE) {\r\n      if (pFlash.ProcedureOnGoing == FLASH_PROC_PAGEERASE) {\r\n        /* Nb of pages to erased can be decreased */\r\n        pFlash.DataRemaining--;\r\n\r\n        /* Check if there are still pages to erase*/\r\n        if (pFlash.DataRemaining != 0U) {\r\n          /* Indicate user which page address has been erased*/\r\n          HAL_FLASH_EndOfOperationCallback(pFlash.Address);\r\n\r\n          /* Increment page address to next page */\r\n          pFlash.Address += FLASH_PAGE_SIZE;\r\n          addresstmp = pFlash.Address;\r\n\r\n          /* Operation is completed, disable the PER Bit */\r\n          CLEAR_BIT(FLASH->CR2, FLASH_CR2_PER);\r\n\r\n          FLASH_PageErase(addresstmp);\r\n        } else {\r\n          /*No more pages to Erase*/\r\n\r\n          /*Reset Address and stop Erase pages procedure*/\r\n          pFlash.Address          = 0xFFFFFFFFU;\r\n          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n\r\n          /* FLASH EOP interrupt user callback */\r\n          HAL_FLASH_EndOfOperationCallback(pFlash.Address);\r\n        }\r\n      } else if (pFlash.ProcedureOnGoing == FLASH_PROC_MASSERASE) {\r\n        /* Operation is completed, disable the MER Bit */\r\n        CLEAR_BIT(FLASH->CR2, FLASH_CR2_MER);\r\n\r\n        if (HAL_IS_BIT_CLR(FLASH->CR, FLASH_CR_MER)) {\r\n          /* MassErase ended. Return the selected bank*/\r\n          /* FLASH EOP interrupt user callback */\r\n          HAL_FLASH_EndOfOperationCallback(0U);\r\n\r\n          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n        }\r\n      } else {\r\n        /* Nb of 16-bit data to program can be decreased */\r\n        pFlash.DataRemaining--;\r\n\r\n        /* Check if there are still 16-bit data to program */\r\n        if (pFlash.DataRemaining != 0U) {\r\n          /* Increment address to 16-bit */\r\n          pFlash.Address += 2U;\r\n          addresstmp = pFlash.Address;\r\n\r\n          /* Shift to have next 16-bit data */\r\n          pFlash.Data = (pFlash.Data >> 16U);\r\n\r\n          /* Operation is completed, disable the PG Bit */\r\n          CLEAR_BIT(FLASH->CR2, FLASH_CR2_PG);\r\n\r\n          /*Program halfword (16-bit) at a specified address.*/\r\n          FLASH_Program_HalfWord(addresstmp, (uint16_t)pFlash.Data);\r\n        } else {\r\n          /*Program ended. Return the selected address*/\r\n          /* FLASH EOP interrupt user callback */\r\n          if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMHALFWORD) {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address);\r\n          } else if (pFlash.ProcedureOnGoing == FLASH_PROC_PROGRAMWORD) {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address - 2U);\r\n          } else {\r\n            HAL_FLASH_EndOfOperationCallback(pFlash.Address - 6U);\r\n          }\r\n\r\n          /* Reset Address and stop Program procedure*/\r\n          pFlash.Address          = 0xFFFFFFFFU;\r\n          pFlash.ProcedureOnGoing = FLASH_PROC_NONE;\r\n        }\r\n      }\r\n    }\r\n  }\r\n#endif\r\n\r\n  if (pFlash.ProcedureOnGoing == FLASH_PROC_NONE) {\r\n#if defined(FLASH_BANK2_END)\r\n    /* Operation is completed, disable the PG, PER and MER Bits for both bank */\r\n    CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_PER | FLASH_CR_MER));\r\n    CLEAR_BIT(FLASH->CR2, (FLASH_CR2_PG | FLASH_CR2_PER | FLASH_CR2_MER));\r\n\r\n    /* Disable End of FLASH Operation and Error source interrupts for both banks */\r\n    __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP_BANK1 | FLASH_IT_ERR_BANK1 | FLASH_IT_EOP_BANK2 | FLASH_IT_ERR_BANK2);\r\n#else\r\n    /* Operation is completed, disable the PG, PER and MER Bits */\r\n    CLEAR_BIT(FLASH->CR, (FLASH_CR_PG | FLASH_CR_PER | FLASH_CR_MER));\r\n\r\n    /* Disable End of FLASH Operation and Error source interrupts */\r\n    __HAL_FLASH_DISABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR);\r\n#endif /* FLASH_BANK2_END */\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(&pFlash);\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  FLASH end of operation interrupt callback\r\n * @param  ReturnValue: The value saved in this parameter depends on the ongoing procedure\r\n *                 - Mass Erase: No return value expected\r\n *                 - Pages Erase: Address of the page which has been erased\r\n *                    (if 0xFFFFFFFF, it means that all the selected pages have been erased)\r\n *                 - Program: Address which was selected for data program\r\n * @retval none\r\n */\r\n__weak void HAL_FLASH_EndOfOperationCallback(uint32_t ReturnValue) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(ReturnValue);\r\n\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_FLASH_EndOfOperationCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  FLASH operation error interrupt callback\r\n * @param  ReturnValue: The value saved in this parameter depends on the ongoing procedure\r\n *                 - Mass Erase: No return value expected\r\n *                 - Pages Erase: Address of the page which returned an error\r\n *                 - Program: Address which was selected for data program\r\n * @retval none\r\n */\r\n__weak void HAL_FLASH_OperationErrorCallback(uint32_t ReturnValue) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(ReturnValue);\r\n\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_FLASH_OperationErrorCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASH_Exported_Functions_Group2 Peripheral Control functions\r\n *  @brief   management functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### Peripheral Control functions #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the FLASH\r\n    memory operations.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Unlock the FLASH control register access\r\n * @retval HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_Unlock(void) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  if (READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) {\r\n    /* Authorize the FLASH Registers access */\r\n    WRITE_REG(FLASH->KEYR, FLASH_KEY1);\r\n    WRITE_REG(FLASH->KEYR, FLASH_KEY2);\r\n\r\n    /* Verify Flash is unlocked */\r\n    if (READ_BIT(FLASH->CR, FLASH_CR_LOCK) != RESET) {\r\n      status = HAL_ERROR;\r\n    }\r\n  }\r\n#if defined(FLASH_BANK2_END)\r\n  if (READ_BIT(FLASH->CR2, FLASH_CR2_LOCK) != RESET) {\r\n    /* Authorize the FLASH BANK2 Registers access */\r\n    WRITE_REG(FLASH->KEYR2, FLASH_KEY1);\r\n    WRITE_REG(FLASH->KEYR2, FLASH_KEY2);\r\n\r\n    /* Verify Flash BANK2 is unlocked */\r\n    if (READ_BIT(FLASH->CR2, FLASH_CR2_LOCK) != RESET) {\r\n      status = HAL_ERROR;\r\n    }\r\n  }\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Locks the FLASH control register access\r\n * @retval HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_Lock(void) {\r\n  /* Set the LOCK Bit to lock the FLASH Registers access */\r\n  SET_BIT(FLASH->CR, FLASH_CR_LOCK);\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  /* Set the LOCK Bit to lock the FLASH BANK2 Registers access */\r\n  SET_BIT(FLASH->CR2, FLASH_CR2_LOCK);\r\n\r\n#endif /* FLASH_BANK2_END */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Unlock the FLASH Option Control Registers access.\r\n * @retval HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_OB_Unlock(void) {\r\n  if (HAL_IS_BIT_CLR(FLASH->CR, FLASH_CR_OPTWRE)) {\r\n    /* Authorizes the Option Byte register programming */\r\n    WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY1);\r\n    WRITE_REG(FLASH->OPTKEYR, FLASH_OPTKEY2);\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Lock the FLASH Option Control Registers access.\r\n * @retval HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASH_OB_Lock(void) {\r\n  /* Clear the OPTWRE Bit to lock the FLASH Option Byte Registers access */\r\n  CLEAR_BIT(FLASH->CR, FLASH_CR_OPTWRE);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Launch the option byte loading.\r\n * @note   This function will reset automatically the MCU.\r\n * @retval None\r\n */\r\nvoid HAL_FLASH_OB_Launch(void) {\r\n  /* Initiates a system reset request to launch the option byte loading */\r\n  HAL_NVIC_SystemReset();\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASH_Exported_Functions_Group3 Peripheral errors functions\r\n *  @brief    Peripheral errors functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### Peripheral Errors functions #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection permit to get in run-time errors of  the FLASH peripheral.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Get the specific FLASH error flag.\r\n * @retval FLASH_ErrorCode The returned value can be:\r\n *            @ref FLASH_Error_Codes\r\n */\r\nuint32_t HAL_FLASH_GetError(void) { return pFlash.ErrorCode; }\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASH_Private_Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Program a half-word (16-bit) at a specified address.\r\n * @param  Address specify the address to be programmed.\r\n * @param  Data    specify the data to be programmed.\r\n * @retval None\r\n */\r\nstatic void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data) {\r\n  /* Clean the error context */\r\n  pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  if (Address <= FLASH_BANK1_END) {\r\n#endif /* FLASH_BANK2_END */\r\n    /* Proceed to program the new data */\r\n    SET_BIT(FLASH->CR, FLASH_CR_PG);\r\n#if defined(FLASH_BANK2_END)\r\n  } else {\r\n    /* Proceed to program the new data */\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_PG);\r\n  }\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  /* Write data in the address */\r\n  *(__IO uint16_t *)Address = Data;\r\n}\r\n\r\n/**\r\n * @brief  Wait for a FLASH operation to complete.\r\n * @param  Timeout  maximum flash operation timeout\r\n * @retval HAL Status\r\n */\r\nHAL_StatusTypeDef FLASH_WaitForLastOperation(uint32_t Timeout) {\r\n  /* Wait for the FLASH operation to complete by polling on BUSY flag to be reset.\r\n     Even if the FLASH operation fails, the BUSY flag will be reset and an error\r\n     flag will be set */\r\n\r\n  uint32_t tickstart = HAL_GetTick();\r\n\r\n  while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)) {\r\n    if (Timeout != HAL_MAX_DELAY) {\r\n      if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Check FLASH End of Operation flag  */\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP)) {\r\n    /* Clear FLASH End of Operation pending bit */\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP);\r\n  }\r\n\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR)) {\r\n    /*Save the error code*/\r\n    FLASH_SetErrorCode();\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* There is no error flag set */\r\n  return HAL_OK;\r\n}\r\n\r\n#if defined(FLASH_BANK2_END)\r\n/**\r\n * @brief  Wait for a FLASH BANK2 operation to complete.\r\n * @param  Timeout maximum flash operation timeout\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef FLASH_WaitForLastOperationBank2(uint32_t Timeout) {\r\n  /* Wait for the FLASH BANK2 operation to complete by polling on BUSY flag to be reset.\r\n     Even if the FLASH BANK2 operation fails, the BUSY flag will be reset and an error\r\n     flag will be set */\r\n\r\n  uint32_t tickstart = HAL_GetTick();\r\n\r\n  while (__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY_BANK2)) {\r\n    if (Timeout != HAL_MAX_DELAY) {\r\n      if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Check FLASH End of Operation flag  */\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_EOP_BANK2)) {\r\n    /* Clear FLASH End of Operation pending bit */\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP_BANK2);\r\n  }\r\n\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR_BANK2) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR_BANK2)) {\r\n    /*Save the error code*/\r\n    FLASH_SetErrorCode();\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* If there is an error flag set */\r\n  return HAL_OK;\r\n}\r\n#endif /* FLASH_BANK2_END */\r\n\r\n/**\r\n * @brief  Set the specific FLASH error flag.\r\n * @retval None\r\n */\r\nstatic void FLASH_SetErrorCode(void) {\r\n  uint32_t flags = 0U;\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR_BANK2))\r\n#else\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_WRPERR))\r\n#endif /* FLASH_BANK2_END */\r\n  {\r\n    pFlash.ErrorCode |= HAL_FLASH_ERROR_WRP;\r\n#if defined(FLASH_BANK2_END)\r\n    flags |= FLASH_FLAG_WRPERR | FLASH_FLAG_WRPERR_BANK2;\r\n#else\r\n    flags |= FLASH_FLAG_WRPERR;\r\n#endif /* FLASH_BANK2_END */\r\n  }\r\n#if defined(FLASH_BANK2_END)\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR) || __HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR_BANK2))\r\n#else\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_PGERR))\r\n#endif /* FLASH_BANK2_END */\r\n  {\r\n    pFlash.ErrorCode |= HAL_FLASH_ERROR_PROG;\r\n#if defined(FLASH_BANK2_END)\r\n    flags |= FLASH_FLAG_PGERR | FLASH_FLAG_PGERR_BANK2;\r\n#else\r\n    flags |= FLASH_FLAG_PGERR;\r\n#endif /* FLASH_BANK2_END */\r\n  }\r\n  if (__HAL_FLASH_GET_FLAG(FLASH_FLAG_OPTVERR)) {\r\n    pFlash.ErrorCode |= HAL_FLASH_ERROR_OPTV;\r\n    __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);\r\n  }\r\n\r\n  /* Clear FLASH error pending bits */\r\n  __HAL_FLASH_CLEAR_FLAG(flags);\r\n}\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_FLASH_MODULE_ENABLED */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_flash_ex.c\r\n  * @author  MCD Application Team\r\n  * @brief   Extended FLASH HAL module driver.\r\n  *\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the FLASH peripheral:\r\n  *           + Extended Initialization/de-initialization functions\r\n  *           + Extended I/O operation functions\r\n  *           + Extended Peripheral Control functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n               ##### Flash peripheral extended features  #####\r\n  ==============================================================================\r\n\r\n                      ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..] This driver provides functions to configure and program the FLASH memory\r\n       of all STM32F1xxx devices. It includes\r\n\r\n        (++) Set/Reset the write protection\r\n        (++) Program the user Option Bytes\r\n        (++) Get the Read protection Level\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n#ifdef HAL_FLASH_MODULE_ENABLED\r\n\r\n/** @addtogroup FLASH\r\n * @{\r\n */\r\n/** @addtogroup FLASH_Private_Variables\r\n * @{\r\n */\r\n/* Variables used for Erase pages under interruption*/\r\nextern FLASH_ProcessTypeDef pFlash;\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx FLASHEx\r\n * @brief FLASH HAL Extension module driver\r\n * @{\r\n */\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Private_Constants FLASHEx Private Constants\r\n * @{\r\n */\r\n#define FLASH_POSITION_IWDGSW_BIT       FLASH_OBR_IWDG_SW_Pos\r\n#define FLASH_POSITION_OB_USERDATA0_BIT FLASH_OBR_DATA0_Pos\r\n#define FLASH_POSITION_OB_USERDATA1_BIT FLASH_OBR_DATA1_Pos\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Private_Macros FLASHEx Private Macros\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @defgroup FLASHEx_Private_Functions FLASHEx Private Functions\r\n * @{\r\n */\r\n/* Erase operations */\r\nstatic void FLASH_MassErase(uint32_t Banks);\r\nvoid        FLASH_PageErase(uint32_t PageAddress);\r\n\r\n/* Option bytes control */\r\nstatic HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WriteProtectPage);\r\nstatic HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WriteProtectPage);\r\nstatic HAL_StatusTypeDef FLASH_OB_RDP_LevelConfig(uint8_t ReadProtectLevel);\r\nstatic HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t UserConfig);\r\nstatic HAL_StatusTypeDef FLASH_OB_ProgramData(uint32_t Address, uint8_t Data);\r\nstatic uint32_t          FLASH_OB_GetWRP(void);\r\nstatic uint32_t          FLASH_OB_GetRDP(void);\r\nstatic uint8_t           FLASH_OB_GetUser(void);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions ---------------------------------------------------------*/\r\n/** @defgroup FLASHEx_Exported_Functions FLASHEx Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup FLASHEx_Exported_Functions_Group1 FLASHEx Memory Erasing functions\r\n *  @brief   FLASH Memory Erasing functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                ##### FLASH Erasing Programming functions #####\r\n  ==============================================================================\r\n\r\n    [..] The FLASH Memory Erasing functions, includes the following functions:\r\n    (+) @ref HAL_FLASHEx_Erase: return only when erase has been done\r\n    (+) @ref HAL_FLASHEx_Erase_IT: end of erase is done when @ref HAL_FLASH_EndOfOperationCallback\r\n        is called with parameter 0xFFFFFFFF\r\n\r\n    [..] Any operation of erase should follow these steps:\r\n    (#) Call the @ref HAL_FLASH_Unlock() function to enable the flash control register and\r\n        program memory access.\r\n    (#) Call the desired function to erase page.\r\n    (#) Call the @ref HAL_FLASH_Lock() to disable the flash program memory access\r\n       (recommended to protect the FLASH memory against possible unwanted operation).\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Perform a mass erase or erase the specified FLASH memory pages\r\n * @note   To correctly run this function, the @ref HAL_FLASH_Unlock() function\r\n *         must be called before.\r\n *         Call the @ref HAL_FLASH_Lock() to disable the flash memory access\r\n *         (recommended to protect the FLASH memory against possible unwanted operation)\r\n * @param[in]  pEraseInit pointer to an FLASH_EraseInitTypeDef structure that\r\n *         contains the configuration information for the erasing.\r\n *\r\n * @param[out]  PageError pointer to variable  that\r\n *         contains the configuration information on faulty page in case of error\r\n *         (0xFFFFFFFF means that all the pages have been correctly erased)\r\n *\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *PageError) {\r\n  HAL_StatusTypeDef status  = HAL_ERROR;\r\n  uint32_t          address = 0U;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(&pFlash);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase));\r\n\r\n  if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) {\r\n#if defined(FLASH_BANK2_END)\r\n    if (pEraseInit->Banks == FLASH_BANK_BOTH) {\r\n      /* Mass Erase requested for Bank1 and Bank2 */\r\n      /* Wait for last operation to be completed */\r\n      if ((FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) && (FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK)) {\r\n        /*Mass erase to be done*/\r\n        FLASH_MassErase(FLASH_BANK_BOTH);\r\n\r\n        /* Wait for last operation to be completed */\r\n        if ((FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) && (FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK)) {\r\n          status = HAL_OK;\r\n        }\r\n\r\n        /* If the erase operation is completed, disable the MER Bit */\r\n        CLEAR_BIT(FLASH->CR, FLASH_CR_MER);\r\n        CLEAR_BIT(FLASH->CR2, FLASH_CR2_MER);\r\n      }\r\n    } else if (pEraseInit->Banks == FLASH_BANK_2) {\r\n      /* Mass Erase requested for Bank2 */\r\n      /* Wait for last operation to be completed */\r\n      if (FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) {\r\n        /*Mass erase to be done*/\r\n        FLASH_MassErase(FLASH_BANK_2);\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n        /* If the erase operation is completed, disable the MER Bit */\r\n        CLEAR_BIT(FLASH->CR2, FLASH_CR2_MER);\r\n      }\r\n    } else\r\n#endif /* FLASH_BANK2_END */\r\n    {\r\n      /* Mass Erase requested for Bank1 */\r\n      /* Wait for last operation to be completed */\r\n      if (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) {\r\n        /*Mass erase to be done*/\r\n        FLASH_MassErase(FLASH_BANK_1);\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n        /* If the erase operation is completed, disable the MER Bit */\r\n        CLEAR_BIT(FLASH->CR, FLASH_CR_MER);\r\n      }\r\n    }\r\n  } else {\r\n    /* Page Erase is requested */\r\n    /* Check the parameters */\r\n    assert_param(IS_FLASH_PROGRAM_ADDRESS(pEraseInit->PageAddress));\r\n    assert_param(IS_FLASH_NB_PAGES(pEraseInit->PageAddress, pEraseInit->NbPages));\r\n\r\n#if defined(FLASH_BANK2_END)\r\n    /* Page Erase requested on address located on bank2 */\r\n    if (pEraseInit->PageAddress > FLASH_BANK1_END) {\r\n      /* Wait for last operation to be completed */\r\n      if (FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) {\r\n        /*Initialization of PageError variable*/\r\n        *PageError = 0xFFFFFFFFU;\r\n\r\n        /* Erase by page by page to be done*/\r\n        for (address = pEraseInit->PageAddress; address < (pEraseInit->PageAddress + (pEraseInit->NbPages) * FLASH_PAGE_SIZE); address += FLASH_PAGE_SIZE) {\r\n          FLASH_PageErase(address);\r\n\r\n          /* Wait for last operation to be completed */\r\n          status = FLASH_WaitForLastOperationBank2((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n          /* If the erase operation is completed, disable the PER Bit */\r\n          CLEAR_BIT(FLASH->CR2, FLASH_CR2_PER);\r\n\r\n          if (status != HAL_OK) {\r\n            /* In case of error, stop erase procedure and return the faulty address */\r\n            *PageError = address;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    } else\r\n#endif /* FLASH_BANK2_END */\r\n    {\r\n      /* Page Erase requested on address located on bank1 */\r\n      /* Wait for last operation to be completed */\r\n      if (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE) == HAL_OK) {\r\n        /*Initialization of PageError variable*/\r\n        *PageError = 0xFFFFFFFFU;\r\n\r\n        /* Erase page by page to be done*/\r\n        for (address = pEraseInit->PageAddress; address < ((pEraseInit->NbPages * FLASH_PAGE_SIZE) + pEraseInit->PageAddress); address += FLASH_PAGE_SIZE) {\r\n          FLASH_PageErase(address);\r\n\r\n          /* Wait for last operation to be completed */\r\n          status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n          /* If the erase operation is completed, disable the PER Bit */\r\n          CLEAR_BIT(FLASH->CR, FLASH_CR_PER);\r\n\r\n          if (status != HAL_OK) {\r\n            /* In case of error, stop erase procedure and return the faulty address */\r\n            *PageError = address;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /* Process Unlocked */\r\n  __HAL_UNLOCK(&pFlash);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Perform a mass erase or erase the specified FLASH memory pages with interrupt enabled\r\n * @note   To correctly run this function, the @ref HAL_FLASH_Unlock() function\r\n *         must be called before.\r\n *         Call the @ref HAL_FLASH_Lock() to disable the flash memory access\r\n *         (recommended to protect the FLASH memory against possible unwanted operation)\r\n * @param  pEraseInit pointer to an FLASH_EraseInitTypeDef structure that\r\n *         contains the configuration information for the erasing.\r\n *\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASHEx_Erase_IT(FLASH_EraseInitTypeDef *pEraseInit) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(&pFlash);\r\n\r\n  /* If procedure already ongoing, reject the next one */\r\n  if (pFlash.ProcedureOnGoing != FLASH_PROC_NONE) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_FLASH_TYPEERASE(pEraseInit->TypeErase));\r\n\r\n  /* Enable End of FLASH Operation and Error source interrupts */\r\n  __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP | FLASH_IT_ERR);\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  /* Enable End of FLASH Operation and Error source interrupts */\r\n  __HAL_FLASH_ENABLE_IT(FLASH_IT_EOP_BANK2 | FLASH_IT_ERR_BANK2);\r\n\r\n#endif\r\n  if (pEraseInit->TypeErase == FLASH_TYPEERASE_MASSERASE) {\r\n    /*Mass erase to be done*/\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_MASSERASE;\r\n    FLASH_MassErase(pEraseInit->Banks);\r\n  } else {\r\n    /* Erase by page to be done*/\r\n\r\n    /* Check the parameters */\r\n    assert_param(IS_FLASH_PROGRAM_ADDRESS(pEraseInit->PageAddress));\r\n    assert_param(IS_FLASH_NB_PAGES(pEraseInit->PageAddress, pEraseInit->NbPages));\r\n\r\n    pFlash.ProcedureOnGoing = FLASH_PROC_PAGEERASE;\r\n    pFlash.DataRemaining    = pEraseInit->NbPages;\r\n    pFlash.Address          = pEraseInit->PageAddress;\r\n\r\n    /*Erase 1st page and wait for IT*/\r\n    FLASH_PageErase(pEraseInit->PageAddress);\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup FLASHEx_Exported_Functions_Group2 Option Bytes Programming functions\r\n *  @brief   Option Bytes Programming functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                ##### Option Bytes Programming functions #####\r\n  ==============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the FLASH\r\n    option bytes operations.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Erases the FLASH option bytes.\r\n * @note   This functions erases all option bytes except the Read protection (RDP).\r\n *         The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface\r\n *         The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes\r\n *         The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes\r\n *         (system reset will occur)\r\n * @retval HAL status\r\n */\r\n\r\nHAL_StatusTypeDef HAL_FLASHEx_OBErase(void) {\r\n  uint8_t           rdptmp = OB_RDP_LEVEL_0;\r\n  HAL_StatusTypeDef status = HAL_ERROR;\r\n\r\n  /* Get the actual read protection Option Byte value */\r\n  rdptmp = FLASH_OB_GetRDP();\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* If the previous operation is completed, proceed to erase the option bytes */\r\n    SET_BIT(FLASH->CR, FLASH_CR_OPTER);\r\n    SET_BIT(FLASH->CR, FLASH_CR_STRT);\r\n\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n    /* If the erase operation is completed, disable the OPTER Bit */\r\n    CLEAR_BIT(FLASH->CR, FLASH_CR_OPTER);\r\n\r\n    if (status == HAL_OK) {\r\n      /* Restore the last read protection Option Byte value */\r\n      status = FLASH_OB_RDP_LevelConfig(rdptmp);\r\n    }\r\n  }\r\n\r\n  /* Return the erase status */\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Program option bytes\r\n * @note   The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface\r\n *         The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes\r\n *         The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes\r\n *         (system reset will occur)\r\n *\r\n * @param  pOBInit pointer to an FLASH_OBInitStruct structure that\r\n *         contains the configuration information for the programming.\r\n *\r\n * @retval HAL_StatusTypeDef HAL Status\r\n */\r\nHAL_StatusTypeDef HAL_FLASHEx_OBProgram(FLASH_OBProgramInitTypeDef *pOBInit) {\r\n  HAL_StatusTypeDef status = HAL_ERROR;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(&pFlash);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OPTIONBYTE(pOBInit->OptionType));\r\n\r\n  /* Write protection configuration */\r\n  if ((pOBInit->OptionType & OPTIONBYTE_WRP) == OPTIONBYTE_WRP) {\r\n    assert_param(IS_WRPSTATE(pOBInit->WRPState));\r\n    if (pOBInit->WRPState == OB_WRPSTATE_ENABLE) {\r\n      /* Enable of Write protection on the selected page */\r\n      status = FLASH_OB_EnableWRP(pOBInit->WRPPage);\r\n    } else {\r\n      /* Disable of Write protection on the selected page */\r\n      status = FLASH_OB_DisableWRP(pOBInit->WRPPage);\r\n    }\r\n    if (status != HAL_OK) {\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(&pFlash);\r\n      return status;\r\n    }\r\n  }\r\n\r\n  /* Read protection configuration */\r\n  if ((pOBInit->OptionType & OPTIONBYTE_RDP) == OPTIONBYTE_RDP) {\r\n    status = FLASH_OB_RDP_LevelConfig(pOBInit->RDPLevel);\r\n    if (status != HAL_OK) {\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(&pFlash);\r\n      return status;\r\n    }\r\n  }\r\n\r\n  /* USER configuration */\r\n  if ((pOBInit->OptionType & OPTIONBYTE_USER) == OPTIONBYTE_USER) {\r\n    status = FLASH_OB_UserConfig(pOBInit->USERConfig);\r\n    if (status != HAL_OK) {\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(&pFlash);\r\n      return status;\r\n    }\r\n  }\r\n\r\n  /* DATA configuration*/\r\n  if ((pOBInit->OptionType & OPTIONBYTE_DATA) == OPTIONBYTE_DATA) {\r\n    status = FLASH_OB_ProgramData(pOBInit->DATAAddress, pOBInit->DATAData);\r\n    if (status != HAL_OK) {\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(&pFlash);\r\n      return status;\r\n    }\r\n  }\r\n\r\n  /* Process Unlocked */\r\n  __HAL_UNLOCK(&pFlash);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Get the Option byte configuration\r\n * @param  pOBInit pointer to an FLASH_OBInitStruct structure that\r\n *         contains the configuration information for the programming.\r\n *\r\n * @retval None\r\n */\r\nvoid HAL_FLASHEx_OBGetConfig(FLASH_OBProgramInitTypeDef *pOBInit) {\r\n  pOBInit->OptionType = OPTIONBYTE_WRP | OPTIONBYTE_RDP | OPTIONBYTE_USER;\r\n\r\n  /*Get WRP*/\r\n  pOBInit->WRPPage = FLASH_OB_GetWRP();\r\n\r\n  /*Get RDP Level*/\r\n  pOBInit->RDPLevel = FLASH_OB_GetRDP();\r\n\r\n  /*Get USER*/\r\n  pOBInit->USERConfig = FLASH_OB_GetUser();\r\n}\r\n\r\n/**\r\n * @brief  Get the Option byte user data\r\n * @param  DATAAdress Address of the option byte DATA\r\n *          This parameter can be one of the following values:\r\n *            @arg @ref OB_DATA_ADDRESS_DATA0\r\n *            @arg @ref OB_DATA_ADDRESS_DATA1\r\n * @retval Value programmed in USER data\r\n */\r\nuint32_t HAL_FLASHEx_OBGetUserData(uint32_t DATAAdress) {\r\n  uint32_t value = 0;\r\n\r\n  if (DATAAdress == OB_DATA_ADDRESS_DATA0) {\r\n    /* Get value programmed in OB USER Data0 */\r\n    value = READ_BIT(FLASH->OBR, FLASH_OBR_DATA0) >> FLASH_POSITION_OB_USERDATA0_BIT;\r\n  } else {\r\n    /* Get value programmed in OB USER Data1 */\r\n    value = READ_BIT(FLASH->OBR, FLASH_OBR_DATA1) >> FLASH_POSITION_OB_USERDATA1_BIT;\r\n  }\r\n\r\n  return value;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASHEx_Private_Functions\r\n * @{\r\n */\r\n\r\n/**\r\n  * @brief  Full erase of FLASH memory Bank\r\n  * @param  Banks Banks to be erased\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref FLASH_BANK_1 Bank1 to be erased\r\n  @if STM32F101xG\r\n  *            @arg @ref FLASH_BANK_2 Bank2 to be erased\r\n  *            @arg @ref FLASH_BANK_BOTH Bank1 and Bank2 to be erased\r\n  @endif\r\n  @if STM32F103xG\r\n  *            @arg @ref FLASH_BANK_2 Bank2 to be erased\r\n  *            @arg @ref FLASH_BANK_BOTH Bank1 and Bank2 to be erased\r\n  @endif\r\n  *\r\n  * @retval None\r\n  */\r\nstatic void FLASH_MassErase(uint32_t Banks) {\r\n  /* Check the parameters */\r\n  assert_param(IS_FLASH_BANK(Banks));\r\n\r\n  /* Clean the error context */\r\n  pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  if (Banks == FLASH_BANK_BOTH) {\r\n    /* bank1 & bank2 will be erased*/\r\n    SET_BIT(FLASH->CR, FLASH_CR_MER);\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_MER);\r\n    SET_BIT(FLASH->CR, FLASH_CR_STRT);\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_STRT);\r\n  } else if (Banks == FLASH_BANK_2) {\r\n    /*Only bank2 will be erased*/\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_MER);\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_STRT);\r\n  } else {\r\n#endif /* FLASH_BANK2_END */\r\n#if !defined(FLASH_BANK2_END)\r\n    /* Prevent unused argument(s) compilation warning */\r\n    UNUSED(Banks);\r\n#endif /* FLASH_BANK2_END */\r\n    /* Only bank1 will be erased*/\r\n    SET_BIT(FLASH->CR, FLASH_CR_MER);\r\n    SET_BIT(FLASH->CR, FLASH_CR_STRT);\r\n#if defined(FLASH_BANK2_END)\r\n  }\r\n#endif /* FLASH_BANK2_END */\r\n}\r\n\r\n/**\r\n * @brief  Enable the write protection of the desired pages\r\n * @note   An option byte erase is done automatically in this function.\r\n * @note   When the memory read protection level is selected (RDP level = 1),\r\n *         it is not possible to program or erase the flash page i if\r\n *         debug features are connected or boot code is executed in RAM, even if nWRPi = 1\r\n *\r\n * @param  WriteProtectPage specifies the page(s) to be write protected.\r\n *         The value of this parameter depend on device used within the same series\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef FLASH_OB_EnableWRP(uint32_t WriteProtectPage) {\r\n  HAL_StatusTypeDef status    = HAL_OK;\r\n  uint16_t          WRP0_Data = 0xFFFF;\r\n#if defined(FLASH_WRP1_WRP1)\r\n  uint16_t WRP1_Data = 0xFFFF;\r\n#endif /* FLASH_WRP1_WRP1 */\r\n#if defined(FLASH_WRP2_WRP2)\r\n  uint16_t WRP2_Data = 0xFFFF;\r\n#endif /* FLASH_WRP2_WRP2 */\r\n#if defined(FLASH_WRP3_WRP3)\r\n  uint16_t WRP3_Data = 0xFFFF;\r\n#endif /* FLASH_WRP3_WRP3 */\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OB_WRP(WriteProtectPage));\r\n\r\n  /* Get current write protected pages and the new pages to be protected ******/\r\n  WriteProtectPage = (uint32_t)(~((~FLASH_OB_GetWRP()) | WriteProtectPage));\r\n\r\n#if defined(OB_WRP_PAGES0TO15MASK)\r\n  WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO15MASK);\r\n#elif defined(OB_WRP_PAGES0TO31MASK)\r\n  WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO31MASK);\r\n#endif /* OB_WRP_PAGES0TO31MASK */\r\n\r\n#if defined(OB_WRP_PAGES16TO31MASK)\r\n  WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES16TO31MASK) >> 8U);\r\n#elif defined(OB_WRP_PAGES32TO63MASK)\r\n  WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO63MASK) >> 8U);\r\n#endif /* OB_WRP_PAGES32TO63MASK */\r\n\r\n#if defined(OB_WRP_PAGES64TO95MASK)\r\n  WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES64TO95MASK) >> 16U);\r\n#endif /* OB_WRP_PAGES64TO95MASK */\r\n#if defined(OB_WRP_PAGES32TO47MASK)\r\n  WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO47MASK) >> 16U);\r\n#endif /* OB_WRP_PAGES32TO47MASK */\r\n\r\n#if defined(OB_WRP_PAGES96TO127MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES96TO127MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO255MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO255MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO511MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO511MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO127MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO127MASK) >> 24U);\r\n#endif /* OB_WRP_PAGES96TO127MASK */\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* To be able to write again option byte, need to perform a option byte erase */\r\n    status = HAL_FLASHEx_OBErase();\r\n    if (status == HAL_OK) {\r\n      /* Enable write protection */\r\n      SET_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n\r\n#if defined(FLASH_WRP0_WRP0)\r\n      if (WRP0_Data != 0xFFU) {\r\n        OB->WRP0 &= WRP0_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP0_WRP0 */\r\n\r\n#if defined(FLASH_WRP1_WRP1)\r\n      if ((status == HAL_OK) && (WRP1_Data != 0xFFU)) {\r\n        OB->WRP1 &= WRP1_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP1_WRP1 */\r\n\r\n#if defined(FLASH_WRP2_WRP2)\r\n      if ((status == HAL_OK) && (WRP2_Data != 0xFFU)) {\r\n        OB->WRP2 &= WRP2_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP2_WRP2 */\r\n\r\n#if defined(FLASH_WRP3_WRP3)\r\n      if ((status == HAL_OK) && (WRP3_Data != 0xFFU)) {\r\n        OB->WRP3 &= WRP3_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP3_WRP3 */\r\n\r\n      /* if the program operation is completed, disable the OPTPG Bit */\r\n      CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n    }\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Disable the write protection of the desired pages\r\n * @note   An option byte erase is done automatically in this function.\r\n * @note   When the memory read protection level is selected (RDP level = 1),\r\n *         it is not possible to program or erase the flash page i if\r\n *         debug features are connected or boot code is executed in RAM, even if nWRPi = 1\r\n *\r\n * @param  WriteProtectPage specifies the page(s) to be write unprotected.\r\n *         The value of this parameter depend on device used within the same series\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef FLASH_OB_DisableWRP(uint32_t WriteProtectPage) {\r\n  HAL_StatusTypeDef status    = HAL_OK;\r\n  uint16_t          WRP0_Data = 0xFFFF;\r\n#if defined(FLASH_WRP1_WRP1)\r\n  uint16_t WRP1_Data = 0xFFFF;\r\n#endif /* FLASH_WRP1_WRP1 */\r\n#if defined(FLASH_WRP2_WRP2)\r\n  uint16_t WRP2_Data = 0xFFFF;\r\n#endif /* FLASH_WRP2_WRP2 */\r\n#if defined(FLASH_WRP3_WRP3)\r\n  uint16_t WRP3_Data = 0xFFFF;\r\n#endif /* FLASH_WRP3_WRP3 */\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OB_WRP(WriteProtectPage));\r\n\r\n  /* Get current write protected pages and the new pages to be unprotected ******/\r\n  WriteProtectPage = (FLASH_OB_GetWRP() | WriteProtectPage);\r\n\r\n#if defined(OB_WRP_PAGES0TO15MASK)\r\n  WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO15MASK);\r\n#elif defined(OB_WRP_PAGES0TO31MASK)\r\n  WRP0_Data = (uint16_t)(WriteProtectPage & OB_WRP_PAGES0TO31MASK);\r\n#endif /* OB_WRP_PAGES0TO31MASK */\r\n\r\n#if defined(OB_WRP_PAGES16TO31MASK)\r\n  WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES16TO31MASK) >> 8U);\r\n#elif defined(OB_WRP_PAGES32TO63MASK)\r\n  WRP1_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO63MASK) >> 8U);\r\n#endif /* OB_WRP_PAGES32TO63MASK */\r\n\r\n#if defined(OB_WRP_PAGES64TO95MASK)\r\n  WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES64TO95MASK) >> 16U);\r\n#endif /* OB_WRP_PAGES64TO95MASK */\r\n#if defined(OB_WRP_PAGES32TO47MASK)\r\n  WRP2_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES32TO47MASK) >> 16U);\r\n#endif /* OB_WRP_PAGES32TO47MASK */\r\n\r\n#if defined(OB_WRP_PAGES96TO127MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES96TO127MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO255MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO255MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO511MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO511MASK) >> 24U);\r\n#elif defined(OB_WRP_PAGES48TO127MASK)\r\n  WRP3_Data = (uint16_t)((WriteProtectPage & OB_WRP_PAGES48TO127MASK) >> 24U);\r\n#endif /* OB_WRP_PAGES96TO127MASK */\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* To be able to write again option byte, need to perform a option byte erase */\r\n    status = HAL_FLASHEx_OBErase();\r\n    if (status == HAL_OK) {\r\n      SET_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n\r\n#if defined(FLASH_WRP0_WRP0)\r\n      if (WRP0_Data != 0xFFU) {\r\n        OB->WRP0 |= WRP0_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP0_WRP0 */\r\n\r\n#if defined(FLASH_WRP1_WRP1)\r\n      if ((status == HAL_OK) && (WRP1_Data != 0xFFU)) {\r\n        OB->WRP1 |= WRP1_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP1_WRP1 */\r\n\r\n#if defined(FLASH_WRP2_WRP2)\r\n      if ((status == HAL_OK) && (WRP2_Data != 0xFFU)) {\r\n        OB->WRP2 |= WRP2_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP2_WRP2 */\r\n\r\n#if defined(FLASH_WRP3_WRP3)\r\n      if ((status == HAL_OK) && (WRP3_Data != 0xFFU)) {\r\n        OB->WRP3 |= WRP3_Data;\r\n\r\n        /* Wait for last operation to be completed */\r\n        status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n      }\r\n#endif /* FLASH_WRP3_WRP3 */\r\n\r\n      /* if the program operation is completed, disable the OPTPG Bit */\r\n      CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n    }\r\n  }\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Set the read protection level.\r\n * @param  ReadProtectLevel specifies the read protection level.\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref OB_RDP_LEVEL_0 No protection\r\n *            @arg @ref OB_RDP_LEVEL_1 Read protection of the memory\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef FLASH_OB_RDP_LevelConfig(uint8_t ReadProtectLevel) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OB_RDP_LEVEL(ReadProtectLevel));\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* If the previous operation is completed, proceed to erase the option bytes */\r\n    SET_BIT(FLASH->CR, FLASH_CR_OPTER);\r\n    SET_BIT(FLASH->CR, FLASH_CR_STRT);\r\n\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n    /* If the erase operation is completed, disable the OPTER Bit */\r\n    CLEAR_BIT(FLASH->CR, FLASH_CR_OPTER);\r\n\r\n    if (status == HAL_OK) {\r\n      /* Enable the Option Bytes Programming operation */\r\n      SET_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n\r\n      WRITE_REG(OB->RDP, ReadProtectLevel);\r\n\r\n      /* Wait for last operation to be completed */\r\n      status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n      /* if the program operation is completed, disable the OPTPG Bit */\r\n      CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n    }\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Program the FLASH User Option Byte.\r\n * @note   Programming of the OB should be performed only after an erase (otherwise PGERR occurs)\r\n * @param  UserConfig The FLASH User Option Bytes values FLASH_OBR_IWDG_SW(Bit2),\r\n *         FLASH_OBR_nRST_STOP(Bit3),FLASH_OBR_nRST_STDBY(Bit4).\r\n *         And BFBF2(Bit5) for STM32F101xG and STM32F103xG .\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef FLASH_OB_UserConfig(uint8_t UserConfig) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OB_IWDG_SOURCE((UserConfig & OB_IWDG_SW)));\r\n  assert_param(IS_OB_STOP_SOURCE((UserConfig & OB_STOP_NO_RST)));\r\n  assert_param(IS_OB_STDBY_SOURCE((UserConfig & OB_STDBY_NO_RST)));\r\n#if defined(FLASH_BANK2_END)\r\n  assert_param(IS_OB_BOOT1((UserConfig & OB_BOOT1_SET)));\r\n#endif /* FLASH_BANK2_END */\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* Enable the Option Bytes Programming operation */\r\n    SET_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n\r\n#if defined(FLASH_BANK2_END)\r\n    OB->USER = (UserConfig | 0xF0U);\r\n#else\r\n    OB->USER = (UserConfig | 0x88U);\r\n#endif /* FLASH_BANK2_END */\r\n\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n    /* if the program operation is completed, disable the OPTPG Bit */\r\n    CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n  }\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Programs a half word at a specified Option Byte Data address.\r\n * @note   The function @ref HAL_FLASH_Unlock() should be called before to unlock the FLASH interface\r\n *         The function @ref HAL_FLASH_OB_Unlock() should be called before to unlock the options bytes\r\n *         The function @ref HAL_FLASH_OB_Launch() should be called after to force the reload of the options bytes\r\n *         (system reset will occur)\r\n *         Programming of the OB should be performed only after an erase (otherwise PGERR occurs)\r\n * @param  Address specifies the address to be programmed.\r\n *         This parameter can be 0x1FFFF804 or 0x1FFFF806.\r\n * @param  Data specifies the data to be programmed.\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef FLASH_OB_ProgramData(uint32_t Address, uint8_t Data) {\r\n  HAL_StatusTypeDef status = HAL_ERROR;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_OB_DATA_ADDRESS(Address));\r\n\r\n  /* Wait for last operation to be completed */\r\n  status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n  if (status == HAL_OK) {\r\n    /* Clean the error context */\r\n    pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n    /* Enables the Option Bytes Programming operation */\r\n    SET_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n    *(__IO uint16_t *)Address = Data;\r\n\r\n    /* Wait for last operation to be completed */\r\n    status = FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE);\r\n\r\n    /* If the program operation is completed, disable the OPTPG Bit */\r\n    CLEAR_BIT(FLASH->CR, FLASH_CR_OPTPG);\r\n  }\r\n  /* Return the Option Byte Data Program Status */\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Return the FLASH Write Protection Option Bytes value.\r\n * @retval The FLASH Write Protection Option Bytes value\r\n */\r\nstatic uint32_t FLASH_OB_GetWRP(void) {\r\n  /* Return the FLASH write protection Register value */\r\n  return (uint32_t)(READ_REG(FLASH->WRPR));\r\n}\r\n\r\n/**\r\n * @brief  Returns the FLASH Read Protection level.\r\n * @retval FLASH RDP level\r\n *         This parameter can be one of the following values:\r\n *            @arg @ref OB_RDP_LEVEL_0 No protection\r\n *            @arg @ref OB_RDP_LEVEL_1 Read protection of the memory\r\n */\r\nstatic uint32_t FLASH_OB_GetRDP(void) {\r\n  uint32_t readstatus = OB_RDP_LEVEL_0;\r\n  uint32_t tmp_reg    = 0U;\r\n\r\n  /* Read RDP level bits */\r\n  tmp_reg = READ_BIT(FLASH->OBR, FLASH_OBR_RDPRT);\r\n\r\n  if (tmp_reg == FLASH_OBR_RDPRT) {\r\n    readstatus = OB_RDP_LEVEL_1;\r\n  } else {\r\n    readstatus = OB_RDP_LEVEL_0;\r\n  }\r\n\r\n  return readstatus;\r\n}\r\n\r\n/**\r\n * @brief  Return the FLASH User Option Byte value.\r\n * @retval The FLASH User Option Bytes values: FLASH_OBR_IWDG_SW(Bit2),\r\n *         FLASH_OBR_nRST_STOP(Bit3),FLASH_OBR_nRST_STDBY(Bit4).\r\n *         And FLASH_OBR_BFB2(Bit5) for STM32F101xG and STM32F103xG .\r\n */\r\nstatic uint8_t FLASH_OB_GetUser(void) {\r\n  /* Return the User Option Byte */\r\n  return (uint8_t)((READ_REG(FLASH->OBR) & FLASH_OBR_USER) >> FLASH_POSITION_IWDGSW_BIT);\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup FLASH\r\n * @{\r\n */\r\n\r\n/** @addtogroup FLASH_Private_Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  Erase the specified FLASH memory page\r\n * @param  PageAddress FLASH page to erase\r\n *         The value of this parameter depend on device used within the same series\r\n *\r\n * @retval None\r\n */\r\nvoid FLASH_PageErase(uint32_t PageAddress) {\r\n  /* Clean the error context */\r\n  pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;\r\n\r\n#if defined(FLASH_BANK2_END)\r\n  if (PageAddress > FLASH_BANK1_END) {\r\n    /* Proceed to erase the page */\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_PER);\r\n    WRITE_REG(FLASH->AR2, PageAddress);\r\n    SET_BIT(FLASH->CR2, FLASH_CR2_STRT);\r\n  } else {\r\n#endif /* FLASH_BANK2_END */\r\n    /* Proceed to erase the page */\r\n    SET_BIT(FLASH->CR, FLASH_CR_PER);\r\n    WRITE_REG(FLASH->AR, PageAddress);\r\n    SET_BIT(FLASH->CR, FLASH_CR_STRT);\r\n#if defined(FLASH_BANK2_END)\r\n  }\r\n#endif /* FLASH_BANK2_END */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_FLASH_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_gpio.c\r\n  * @author  MCD Application Team\r\n  * @brief   GPIO HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the General Purpose Input/Output (GPIO) peripheral:\r\n  *           + Initialization and de-initialization functions\r\n  *           + IO operation functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                    ##### GPIO Peripheral features #####\r\n  ==============================================================================\r\n  [..]\r\n  Subject to the specific hardware characteristics of each I/O port listed in the datasheet, each\r\n  port bit of the General Purpose IO (GPIO) Ports, can be individually configured by software\r\n  in several modes:\r\n  (+) Input mode\r\n  (+) Analog mode\r\n  (+) Output mode\r\n  (+) Alternate function mode\r\n  (+) External interrupt/event lines\r\n\r\n  [..]\r\n  During and just after reset, the alternate functions and external interrupt\r\n  lines are not active and the I/O ports are configured in input floating mode.\r\n\r\n  [..]\r\n  All GPIO pins have weak internal pull-up and pull-down resistors, which can be\r\n  activated or not.\r\n\r\n  [..]\r\n  In Output or Alternate mode, each IO can be configured on open-drain or push-pull\r\n  type and the IO speed can be selected depending on the VDD value.\r\n\r\n  [..]\r\n  All ports have external interrupt/event capability. To use external interrupt\r\n  lines, the port must be configured in input mode. All available GPIO pins are\r\n  connected to the 16 external interrupt/event lines from EXTI0 to EXTI15.\r\n\r\n  [..]\r\n  The external interrupt/event controller consists of up to 20 edge detectors in connectivity\r\n  line devices, or 19 edge detectors in other devices for generating event/interrupt requests.\r\n  Each input line can be independently configured to select the type (event or interrupt) and\r\n  the corresponding trigger event (rising or falling or both). Each line can also masked\r\n  independently. A pending register maintains the status line of the interrupt requests\r\n\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n [..]\r\n   (#) Enable the GPIO APB2 clock using the following function : __HAL_RCC_GPIOx_CLK_ENABLE().\r\n\r\n   (#) Configure the GPIO pin(s) using HAL_GPIO_Init().\r\n       (++) Configure the IO mode using \"Mode\" member from GPIO_InitTypeDef structure\r\n       (++) Activate Pull-up, Pull-down resistor using \"Pull\" member from GPIO_InitTypeDef\r\n            structure.\r\n       (++) In case of Output or alternate function mode selection: the speed is\r\n            configured through \"Speed\" member from GPIO_InitTypeDef structure\r\n       (++) Analog mode is required when a pin is to be used as ADC channel\r\n            or DAC output.\r\n       (++) In case of external interrupt/event selection the \"Mode\" member from\r\n            GPIO_InitTypeDef structure select the type (interrupt or event) and\r\n            the corresponding trigger event (rising or falling or both).\r\n\r\n   (#) In case of external interrupt/event mode selection, configure NVIC IRQ priority\r\n       mapped to the EXTI line using HAL_NVIC_SetPriority() and enable it using\r\n       HAL_NVIC_EnableIRQ().\r\n\r\n   (#) To get the level of a pin configured in input mode use HAL_GPIO_ReadPin().\r\n\r\n   (#) To set/reset the level of a pin configured in output mode use\r\n       HAL_GPIO_WritePin()/HAL_GPIO_TogglePin().\r\n\r\n   (#) To lock pin configuration until next reset use HAL_GPIO_LockPin().\r\n\r\n   (#) During and just after reset, the alternate functions are not\r\n       active and the GPIO pins are configured in input floating mode (except JTAG\r\n       pins).\r\n\r\n   (#) The LSE oscillator pins OSC32_IN and OSC32_OUT can be used as general purpose\r\n       (PC14 and PC15, respectively) when the LSE oscillator is off. The LSE has\r\n       priority over the GPIO function.\r\n\r\n   (#) The HSE oscillator pins OSC_IN/OSC_OUT can be used as\r\n       general purpose PD0 and PD1, respectively, when the HSE oscillator is off.\r\n       The HSE has priority over the GPIO function.\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIO GPIO\r\n * @brief GPIO HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_GPIO_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @addtogroup GPIO_Private_Constants GPIO Private Constants\r\n * @{\r\n */\r\n#define GPIO_MODE        0x00000003U\r\n#define EXTI_MODE        0x10000000U\r\n#define GPIO_MODE_IT     0x00010000U\r\n#define GPIO_MODE_EVT    0x00020000U\r\n#define RISING_EDGE      0x00100000U\r\n#define FALLING_EDGE     0x00200000U\r\n#define GPIO_OUTPUT_TYPE 0x00000010U\r\n\r\n#define GPIO_NUMBER 16U\r\n\r\n/* Definitions for bit manipulation of CRL and CRH register */\r\n#define GPIO_CR_MODE_INPUT         0x00000000U /*!< 00: Input mode (reset state)  */\r\n#define GPIO_CR_CNF_ANALOG         0x00000000U /*!< 00: Analog mode  */\r\n#define GPIO_CR_CNF_INPUT_FLOATING 0x00000004U /*!< 01: Floating input (reset state)  */\r\n#define GPIO_CR_CNF_INPUT_PU_PD    0x00000008U /*!< 10: Input with pull-up / pull-down  */\r\n#define GPIO_CR_CNF_GP_OUTPUT_PP   0x00000000U /*!< 00: General purpose output push-pull  */\r\n#define GPIO_CR_CNF_GP_OUTPUT_OD   0x00000004U /*!< 01: General purpose output Open-drain  */\r\n#define GPIO_CR_CNF_AF_OUTPUT_PP   0x00000008U /*!< 10: Alternate function output Push-pull  */\r\n#define GPIO_CR_CNF_AF_OUTPUT_OD   0x0000000CU /*!< 11: Alternate function output Open-drain  */\r\n\r\n/**\r\n * @}\r\n */\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @defgroup GPIO_Exported_Functions GPIO Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIO_Exported_Functions_Group1 Initialization and de-initialization functions\r\n *  @brief    Initialization and Configuration functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n              ##### Initialization and de-initialization functions #####\r\n ===============================================================================\r\n  [..]\r\n    This section provides functions allowing to initialize and de-initialize the GPIOs\r\n    to be ready for use.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initializes the GPIOx peripheral according to the specified parameters in the GPIO_Init.\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Init: pointer to a GPIO_InitTypeDef structure that contains\r\n *         the configuration information for the specified GPIO peripheral.\r\n * @retval None\r\n */\r\nvoid HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init) {\r\n  uint32_t       position;\r\n  uint32_t       ioposition = 0x00U;\r\n  uint32_t       iocurrent  = 0x00U;\r\n  uint32_t       temp       = 0x00U;\r\n  uint32_t       config     = 0x00U;\r\n  __IO uint32_t *configregister;      /* Store the address of CRL or CRH register based on pin number */\r\n  uint32_t       registeroffset = 0U; /* offset used during computation of CNF and MODE bits placement inside CRL or CRH register */\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));\r\n  assert_param(IS_GPIO_PIN(GPIO_Init->Pin));\r\n  assert_param(IS_GPIO_MODE(GPIO_Init->Mode));\r\n\r\n  /* Configure the port pins */\r\n  for (position = 0U; position < GPIO_NUMBER; position++) {\r\n    /* Get the IO position */\r\n    ioposition = (0x01U << position);\r\n\r\n    /* Get the current IO position */\r\n    iocurrent = (uint32_t)(GPIO_Init->Pin) & ioposition;\r\n\r\n    if (iocurrent == ioposition) {\r\n      /* Check the Alternate function parameters */\r\n      assert_param(IS_GPIO_AF_INSTANCE(GPIOx));\r\n\r\n      /* Based on the required mode, filling config variable with MODEy[1:0] and CNFy[3:2] corresponding bits */\r\n      switch (GPIO_Init->Mode) {\r\n      /* If we are configuring the pin in OUTPUT push-pull mode */\r\n      case GPIO_MODE_OUTPUT_PP:\r\n        /* Check the GPIO speed parameter */\r\n        assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));\r\n        config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_PP;\r\n        break;\r\n\r\n      /* If we are configuring the pin in OUTPUT open-drain mode */\r\n      case GPIO_MODE_OUTPUT_OD:\r\n        /* Check the GPIO speed parameter */\r\n        assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));\r\n        config = GPIO_Init->Speed + GPIO_CR_CNF_GP_OUTPUT_OD;\r\n        break;\r\n\r\n      /* If we are configuring the pin in ALTERNATE FUNCTION push-pull mode */\r\n      case GPIO_MODE_AF_PP:\r\n        /* Check the GPIO speed parameter */\r\n        assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));\r\n        config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_PP;\r\n        break;\r\n\r\n      /* If we are configuring the pin in ALTERNATE FUNCTION open-drain mode */\r\n      case GPIO_MODE_AF_OD:\r\n        /* Check the GPIO speed parameter */\r\n        assert_param(IS_GPIO_SPEED(GPIO_Init->Speed));\r\n        config = GPIO_Init->Speed + GPIO_CR_CNF_AF_OUTPUT_OD;\r\n        break;\r\n\r\n      /* If we are configuring the pin in INPUT (also applicable to EVENT and IT mode) */\r\n      case GPIO_MODE_INPUT:\r\n      case GPIO_MODE_IT_RISING:\r\n      case GPIO_MODE_IT_FALLING:\r\n      case GPIO_MODE_IT_RISING_FALLING:\r\n      case GPIO_MODE_EVT_RISING:\r\n      case GPIO_MODE_EVT_FALLING:\r\n      case GPIO_MODE_EVT_RISING_FALLING:\r\n        /* Check the GPIO pull parameter */\r\n        assert_param(IS_GPIO_PULL(GPIO_Init->Pull));\r\n        if (GPIO_Init->Pull == GPIO_NOPULL) {\r\n          config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_FLOATING;\r\n        } else if (GPIO_Init->Pull == GPIO_PULLUP) {\r\n          config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD;\r\n\r\n          /* Set the corresponding ODR bit */\r\n          GPIOx->BSRR = ioposition;\r\n        } else /* GPIO_PULLDOWN */\r\n        {\r\n          config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_INPUT_PU_PD;\r\n\r\n          /* Reset the corresponding ODR bit */\r\n          GPIOx->BRR = ioposition;\r\n        }\r\n        break;\r\n\r\n      /* If we are configuring the pin in INPUT analog mode */\r\n      case GPIO_MODE_ANALOG:\r\n        config = GPIO_CR_MODE_INPUT + GPIO_CR_CNF_ANALOG;\r\n        break;\r\n\r\n      /* Parameters are checked with assert_param */\r\n      default:\r\n        break;\r\n      }\r\n\r\n      /* Check if the current bit belongs to first half or last half of the pin count number\r\n       in order to address CRH or CRL register*/\r\n      configregister = (iocurrent < GPIO_PIN_8) ? &GPIOx->CRL : &GPIOx->CRH;\r\n      registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2U) : ((position - 8U) << 2U);\r\n\r\n      /* Apply the new configuration of the pin to the register */\r\n      MODIFY_REG((*configregister), ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset), (config << registeroffset));\r\n\r\n      /*--------------------- EXTI Mode Configuration ------------------------*/\r\n      /* Configure the External Interrupt or event for the current IO */\r\n      if ((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE) {\r\n        /* Enable AFIO Clock */\r\n        __HAL_RCC_AFIO_CLK_ENABLE();\r\n        temp = AFIO->EXTICR[position >> 2U];\r\n        CLEAR_BIT(temp, (0x0FU) << (4U * (position & 0x03U)));\r\n        SET_BIT(temp, (GPIO_GET_INDEX(GPIOx)) << (4U * (position & 0x03U)));\r\n        AFIO->EXTICR[position >> 2U] = temp;\r\n\r\n        /* Configure the interrupt mask */\r\n        if ((GPIO_Init->Mode & GPIO_MODE_IT) == GPIO_MODE_IT) {\r\n          SET_BIT(EXTI->IMR, iocurrent);\r\n        } else {\r\n          CLEAR_BIT(EXTI->IMR, iocurrent);\r\n        }\r\n\r\n        /* Configure the event mask */\r\n        if ((GPIO_Init->Mode & GPIO_MODE_EVT) == GPIO_MODE_EVT) {\r\n          SET_BIT(EXTI->EMR, iocurrent);\r\n        } else {\r\n          CLEAR_BIT(EXTI->EMR, iocurrent);\r\n        }\r\n\r\n        /* Enable or disable the rising trigger */\r\n        if ((GPIO_Init->Mode & RISING_EDGE) == RISING_EDGE) {\r\n          SET_BIT(EXTI->RTSR, iocurrent);\r\n        } else {\r\n          CLEAR_BIT(EXTI->RTSR, iocurrent);\r\n        }\r\n\r\n        /* Enable or disable the falling trigger */\r\n        if ((GPIO_Init->Mode & FALLING_EDGE) == FALLING_EDGE) {\r\n          SET_BIT(EXTI->FTSR, iocurrent);\r\n        } else {\r\n          CLEAR_BIT(EXTI->FTSR, iocurrent);\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  De-initializes the GPIOx peripheral registers to their default reset values.\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Pin: specifies the port bit to be written.\r\n *         This parameter can be one of GPIO_PIN_x where x can be (0..15).\r\n * @retval None\r\n */\r\nvoid HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin) {\r\n  uint32_t       position  = 0x00U;\r\n  uint32_t       iocurrent = 0x00U;\r\n  uint32_t       tmp       = 0x00U;\r\n  __IO uint32_t *configregister; /* Store the address of CRL or CRH register based on pin number */\r\n  uint32_t       registeroffset = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));\r\n  assert_param(IS_GPIO_PIN(GPIO_Pin));\r\n\r\n  /* Configure the port pins */\r\n  while ((GPIO_Pin >> position) != 0U) {\r\n    /* Get current io position */\r\n    iocurrent = (GPIO_Pin) & (1U << position);\r\n\r\n    if (iocurrent) {\r\n      /*------------------------- GPIO Mode Configuration --------------------*/\r\n      /* Check if the current bit belongs to first half or last half of the pin count number\r\n       in order to address CRH or CRL register */\r\n      configregister = (iocurrent < GPIO_PIN_8) ? &GPIOx->CRL : &GPIOx->CRH;\r\n      registeroffset = (iocurrent < GPIO_PIN_8) ? (position << 2U) : ((position - 8U) << 2U);\r\n\r\n      /* CRL/CRH default value is floating input(0x04) shifted to correct position */\r\n      MODIFY_REG(*configregister, ((GPIO_CRL_MODE0 | GPIO_CRL_CNF0) << registeroffset), GPIO_CRL_CNF0_0 << registeroffset);\r\n\r\n      /* ODR default value is 0 */\r\n      CLEAR_BIT(GPIOx->ODR, iocurrent);\r\n\r\n      /*------------------------- EXTI Mode Configuration --------------------*/\r\n      /* Clear the External Interrupt or Event for the current IO */\r\n\r\n      tmp = AFIO->EXTICR[position >> 2U];\r\n      tmp &= 0x0FU << (4U * (position & 0x03U));\r\n      if (tmp == (GPIO_GET_INDEX(GPIOx) << (4U * (position & 0x03U)))) {\r\n        tmp = 0x0FU << (4U * (position & 0x03U));\r\n        CLEAR_BIT(AFIO->EXTICR[position >> 2U], tmp);\r\n\r\n        /* Clear EXTI line configuration */\r\n        CLEAR_BIT(EXTI->IMR, (uint32_t)iocurrent);\r\n        CLEAR_BIT(EXTI->EMR, (uint32_t)iocurrent);\r\n\r\n        /* Clear Rising Falling edge configuration */\r\n        CLEAR_BIT(EXTI->RTSR, (uint32_t)iocurrent);\r\n        CLEAR_BIT(EXTI->FTSR, (uint32_t)iocurrent);\r\n      }\r\n    }\r\n\r\n    position++;\r\n  }\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup GPIO_Exported_Functions_Group2 IO operation functions\r\n *  @brief   GPIO Read and Write\r\n *\r\n@verbatim\r\n ===============================================================================\r\n                       ##### IO operation functions #####\r\n ===============================================================================\r\n  [..]\r\n    This subsection provides a set of functions allowing to manage the GPIOs.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Reads the specified input port pin.\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Pin: specifies the port bit to read.\r\n *         This parameter can be GPIO_PIN_x where x can be (0..15).\r\n * @retval The input port pin value.\r\n */\r\nGPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) {\r\n  GPIO_PinState bitstatus;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_PIN(GPIO_Pin));\r\n\r\n  if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET) {\r\n    bitstatus = GPIO_PIN_SET;\r\n  } else {\r\n    bitstatus = GPIO_PIN_RESET;\r\n  }\r\n  return bitstatus;\r\n}\r\n\r\n/**\r\n * @brief  Sets or clears the selected data port bit.\r\n *\r\n * @note   This function uses GPIOx_BSRR register to allow atomic read/modify\r\n *         accesses. In this way, there is no risk of an IRQ occurring between\r\n *         the read and the modify access.\r\n *\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Pin: specifies the port bit to be written.\r\n *          This parameter can be one of GPIO_PIN_x where x can be (0..15).\r\n * @param  PinState: specifies the value to be written to the selected bit.\r\n *          This parameter can be one of the GPIO_PinState enum values:\r\n *            @arg GPIO_PIN_RESET: to clear the port pin\r\n *            @arg GPIO_PIN_SET: to set the port pin\r\n * @retval None\r\n */\r\nvoid HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) {\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_PIN(GPIO_Pin));\r\n  assert_param(IS_GPIO_PIN_ACTION(PinState));\r\n\r\n  if (PinState != GPIO_PIN_RESET) {\r\n    GPIOx->BSRR = GPIO_Pin;\r\n  } else {\r\n    GPIOx->BSRR = (uint32_t)GPIO_Pin << 16U;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Toggles the specified GPIO pin\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Pin: Specifies the pins to be toggled.\r\n * @retval None\r\n */\r\nvoid HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) {\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_PIN(GPIO_Pin));\r\n\r\n  GPIOx->ODR ^= GPIO_Pin;\r\n}\r\n\r\n/**\r\n * @brief  Locks GPIO Pins configuration registers.\r\n * @note   The locking mechanism allows the IO configuration to be frozen. When the LOCK sequence\r\n *         has been applied on a port bit, it is no longer possible to modify the value of the port bit until\r\n *         the next reset.\r\n * @param  GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral\r\n * @param  GPIO_Pin: specifies the port bit to be locked.\r\n *         This parameter can be any combination of GPIO_Pin_x where x can be (0..15).\r\n * @retval None\r\n */\r\nHAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) {\r\n  __IO uint32_t tmp = GPIO_LCKR_LCKK;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_GPIO_LOCK_INSTANCE(GPIOx));\r\n  assert_param(IS_GPIO_PIN(GPIO_Pin));\r\n\r\n  /* Apply lock key write sequence */\r\n  SET_BIT(tmp, GPIO_Pin);\r\n  /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */\r\n  GPIOx->LCKR = tmp;\r\n  /* Reset LCKx bit(s): LCKK='0' + LCK[15-0] */\r\n  GPIOx->LCKR = GPIO_Pin;\r\n  /* Set LCKx bit(s): LCKK='1' + LCK[15-0] */\r\n  GPIOx->LCKR = tmp;\r\n  /* Read LCKK bit*/\r\n  tmp = GPIOx->LCKR;\r\n\r\n  if ((uint32_t)(GPIOx->LCKR & GPIO_LCKR_LCKK)) {\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  This function handles EXTI interrupt request.\r\n * @param  GPIO_Pin: Specifies the pins connected EXTI line\r\n * @retval None\r\n */\r\nvoid HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin) {\r\n  /* EXTI line interrupt detected */\r\n  if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET) {\r\n    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);\r\n    HAL_GPIO_EXTI_Callback(GPIO_Pin);\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  EXTI line detection callbacks.\r\n * @param  GPIO_Pin: Specifies the pins connected EXTI line\r\n * @retval None\r\n */\r\n__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(GPIO_Pin);\r\n  /* NOTE: This function Should not be modified, when the callback is needed,\r\n           the HAL_GPIO_EXTI_Callback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_GPIO_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_gpio_ex.c\r\n  * @author  MCD Application Team\r\n  * @brief   GPIO Extension HAL module driver.\r\n  *         This file provides firmware functions to manage the following\r\n  *          functionalities of the General Purpose Input/Output (GPIO) extension peripheral.\r\n  *           + Extended features functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                    ##### GPIO Peripheral extension features #####\r\n  ==============================================================================\r\n  [..] GPIO module on STM32F1 family, manage also the AFIO register:\r\n       (+) Possibility to use the EVENTOUT Cortex feature\r\n\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..] This driver provides functions to use EVENTOUT Cortex feature\r\n    (#) Configure EVENTOUT Cortex feature using the function HAL_GPIOEx_ConfigEventout()\r\n    (#) Activate EVENTOUT Cortex feature using the HAL_GPIOEx_EnableEventout()\r\n    (#) Deactivate EVENTOUT Cortex feature using the HAL_GPIOEx_DisableEventout()\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIOEx GPIOEx\r\n * @brief GPIO HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_GPIO_MODULE_ENABLED\r\n\r\n/** @defgroup GPIOEx_Exported_Functions GPIOEx Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup GPIOEx_Exported_Functions_Group1 Extended features functions\r\n *  @brief    Extended features functions\r\n *\r\n@verbatim\r\n  ==============================================================================\r\n                 ##### Extended features functions #####\r\n  ==============================================================================\r\n    [..]  This section provides functions allowing to:\r\n    (+) Configure EVENTOUT Cortex feature using the function HAL_GPIOEx_ConfigEventout()\r\n    (+) Activate EVENTOUT Cortex feature using the HAL_GPIOEx_EnableEventout()\r\n    (+) Deactivate EVENTOUT Cortex feature using the HAL_GPIOEx_DisableEventout()\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Configures the port and pin on which the EVENTOUT Cortex signal will be connected.\r\n * @param  GPIO_PortSource Select the port used to output the Cortex EVENTOUT signal.\r\n *   This parameter can be a value of @ref GPIOEx_EVENTOUT_PORT.\r\n * @param  GPIO_PinSource Select the pin used to output the Cortex EVENTOUT signal.\r\n *   This parameter can be a value of @ref GPIOEx_EVENTOUT_PIN.\r\n * @retval None\r\n */\r\nvoid HAL_GPIOEx_ConfigEventout(uint32_t GPIO_PortSource, uint32_t GPIO_PinSource) {\r\n  /* Verify the parameters */\r\n  assert_param(IS_AFIO_EVENTOUT_PORT(GPIO_PortSource));\r\n  assert_param(IS_AFIO_EVENTOUT_PIN(GPIO_PinSource));\r\n\r\n  /* Apply the new configuration */\r\n  MODIFY_REG(AFIO->EVCR, (AFIO_EVCR_PORT) | (AFIO_EVCR_PIN), (GPIO_PortSource) | (GPIO_PinSource));\r\n}\r\n\r\n/**\r\n * @brief  Enables the Event Output.\r\n * @retval None\r\n */\r\nvoid HAL_GPIOEx_EnableEventout(void) { SET_BIT(AFIO->EVCR, AFIO_EVCR_EVOE); }\r\n\r\n/**\r\n * @brief  Disables the Event Output.\r\n * @retval None\r\n */\r\nvoid HAL_GPIOEx_DisableEventout(void) { CLEAR_BIT(AFIO->EVCR, AFIO_EVCR_EVOE); }\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_GPIO_MODULE_ENABLED */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_i2c.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_i2c.c\r\n  * @author  MCD Application Team\r\n  * @brief   I2C HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the Inter Integrated Circuit (I2C) peripheral:\r\n  *           + Initialization and de-initialization functions\r\n  *           + IO operation functions\r\n  *           + Peripheral State, Mode and Error functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                        ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..]\r\n    The I2C HAL driver can be used as follows:\r\n\r\n    (#) Declare a I2C_HandleTypeDef handle structure, for example:\r\n        I2C_HandleTypeDef  hi2c;\r\n\r\n    (#)Initialize the I2C low level resources by implementing the HAL_I2C_MspInit() API:\r\n        (##) Enable the I2Cx interface clock\r\n        (##) I2C pins configuration\r\n            (+++) Enable the clock for the I2C GPIOs\r\n            (+++) Configure I2C pins as alternate function open-drain\r\n        (##) NVIC configuration if you need to use interrupt process\r\n            (+++) Configure the I2Cx interrupt priority\r\n            (+++) Enable the NVIC I2C IRQ Channel\r\n        (##) DMA Configuration if you need to use DMA process\r\n            (+++) Declare a DMA_HandleTypeDef handle structure for the transmit or receive channel\r\n            (+++) Enable the DMAx interface clock using\r\n            (+++) Configure the DMA handle parameters\r\n            (+++) Configure the DMA Tx or Rx channel\r\n            (+++) Associate the initialized DMA handle to the hi2c DMA Tx or Rx handle\r\n            (+++) Configure the priority and enable the NVIC for the transfer complete interrupt on\r\n                  the DMA Tx or Rx channel\r\n\r\n    (#) Configure the Communication Speed, Duty cycle, Addressing mode, Own Address1,\r\n        Dual Addressing mode, Own Address2, General call and Nostretch mode in the hi2c Init structure.\r\n\r\n    (#) Initialize the I2C registers by calling the HAL_I2C_Init(), configures also the low level Hardware\r\n        (GPIO, CLOCK, NVIC...etc) by calling the customized HAL_I2C_MspInit(&hi2c) API.\r\n\r\n    (#) To check if target device is ready for communication, use the function HAL_I2C_IsDeviceReady()\r\n\r\n    (#) For I2C IO and IO MEM operations, three operation modes are available within this driver :\r\n\r\n    *** Polling mode IO operation ***\r\n    =================================\r\n    [..]\r\n      (+) Transmit in master mode an amount of data in blocking mode using HAL_I2C_Master_Transmit()\r\n      (+) Receive in master mode an amount of data in blocking mode using HAL_I2C_Master_Receive()\r\n      (+) Transmit in slave mode an amount of data in blocking mode using HAL_I2C_Slave_Transmit()\r\n      (+) Receive in slave mode an amount of data in blocking mode using HAL_I2C_Slave_Receive()\r\n\r\n    *** Polling mode IO MEM operation ***\r\n    =====================================\r\n    [..]\r\n      (+) Write an amount of data in blocking mode to a specific memory address using HAL_I2C_Mem_Write()\r\n      (+) Read an amount of data in blocking mode from a specific memory address using HAL_I2C_Mem_Read()\r\n\r\n\r\n    *** Interrupt mode IO operation ***\r\n    ===================================\r\n    [..]\r\n      (+) Transmit in master mode an amount of data in non blocking mode using HAL_I2C_Master_Transmit_IT()\r\n      (+) At transmission end of transfer HAL_I2C_MasterTxCpltCallback is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_MasterTxCpltCallback\r\n      (+) Receive in master mode an amount of data in non blocking mode using HAL_I2C_Master_Receive_IT()\r\n      (+) At reception end of transfer HAL_I2C_MasterRxCpltCallback is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_MasterRxCpltCallback\r\n      (+) Transmit in slave mode an amount of data in non blocking mode using HAL_I2C_Slave_Transmit_IT()\r\n      (+) At transmission end of transfer HAL_I2C_SlaveTxCpltCallback is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_SlaveTxCpltCallback\r\n      (+) Receive in slave mode an amount of data in non blocking mode using HAL_I2C_Slave_Receive_IT()\r\n      (+) At reception end of transfer HAL_I2C_SlaveRxCpltCallback is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_SlaveRxCpltCallback\r\n      (+) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_ErrorCallback\r\n      (+) Abort a master I2C process communication with Interrupt using HAL_I2C_Master_Abort_IT()\r\n      (+) End of abort process, HAL_I2C_AbortCpltCallback() is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_AbortCpltCallback()\r\n\r\n    *** Interrupt mode IO sequential operation ***\r\n    ==============================================\r\n    [..]\r\n      (@) These interfaces allow to manage a sequential transfer with a repeated start condition\r\n          when a direction change during transfer\r\n    [..]\r\n      (+) A specific option field manage the different steps of a sequential transfer\r\n      (+) Option field values are defined through @ref I2C_XFEROPTIONS and are listed below:\r\n      (++) I2C_FIRST_AND_LAST_FRAME: No sequential usage, functionnal is same as associated interfaces in no sequential mode\r\n      (++) I2C_FIRST_FRAME: Sequential usage, this option allow to manage a sequence with start condition, address\r\n                            and data to transfer without a final stop condition\r\n      (++) I2C_NEXT_FRAME: Sequential usage, this option allow to manage a sequence with a restart condition, address\r\n                            and with new data to transfer if the direction change or manage only the new data to transfer\r\n                            if no direction change and without a final stop condition in both cases\r\n      (++) I2C_LAST_FRAME: Sequential usage, this option allow to manage a sequance with a restart condition, address\r\n                            and with new data to transfer if the direction change or manage only the new data to transfer\r\n                            if no direction change and with a final stop condition in both cases\r\n\r\n      (+) Differents sequential I2C interfaces are listed below:\r\n      (++) Sequential transmit in master I2C mode an amount of data in non-blocking mode using HAL_I2C_Master_Sequential_Transmit_IT()\r\n      (+++) At transmission end of current frame transfer, HAL_I2C_MasterTxCpltCallback() is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_MasterTxCpltCallback()\r\n      (++) Sequential receive in master I2C mode an amount of data in non-blocking mode using HAL_I2C_Master_Sequential_Receive_IT()\r\n      (+++) At reception end of current frame transfer, HAL_I2C_MasterRxCpltCallback() is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_MasterRxCpltCallback()\r\n      (++) Abort a master I2C process communication with Interrupt using HAL_I2C_Master_Abort_IT()\r\n      (+++) End of abort process, HAL_I2C_AbortCpltCallback() is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_AbortCpltCallback()\r\n      (++) Enable/disable the Address listen mode in slave I2C mode using HAL_I2C_EnableListen_IT() HAL_I2C_DisableListen_IT()\r\n      (+++) When address slave I2C match, HAL_I2C_AddrCallback() is executed and user can\r\n           add his own code to check the Address Match Code and the transmission direction request by master (Write/Read).\r\n      (+++) At Listen mode end HAL_I2C_ListenCpltCallback() is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_ListenCpltCallback()\r\n      (++) Sequential transmit in slave I2C mode an amount of data in non-blocking mode using HAL_I2C_Slave_Sequential_Transmit_IT()\r\n      (+++) At transmission end of current frame transfer, HAL_I2C_SlaveTxCpltCallback() is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_SlaveTxCpltCallback()\r\n      (++) Sequential receive in slave I2C mode an amount of data in non-blocking mode using HAL_I2C_Slave_Sequential_Receive_IT()\r\n      (+++) At reception end of current frame transfer, HAL_I2C_SlaveRxCpltCallback() is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_SlaveRxCpltCallback()\r\n      (++) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_ErrorCallback()\r\n\r\n    *** Interrupt mode IO MEM operation ***\r\n    =======================================\r\n    [..]\r\n      (+) Write an amount of data in no-blocking mode with Interrupt to a specific memory address using\r\n          HAL_I2C_Mem_Write_IT()\r\n      (+) At MEM end of write transfer HAL_I2C_MemTxCpltCallback is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_MemTxCpltCallback\r\n      (+) Read an amount of data in no-blocking mode with Interrupt from a specific memory address using\r\n          HAL_I2C_Mem_Read_IT()\r\n      (+) At MEM end of read transfer HAL_I2C_MemRxCpltCallback is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_MemRxCpltCallback\r\n      (+) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_ErrorCallback\r\n\r\n    *** DMA mode IO operation ***\r\n    ==============================\r\n    [..]\r\n      (+) Transmit in master mode an amount of data in non blocking mode (DMA) using\r\n          HAL_I2C_Master_Transmit_DMA()\r\n      (+) At transmission end of transfer HAL_I2C_MasterTxCpltCallback is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_MasterTxCpltCallback\r\n      (+) Receive in master mode an amount of data in non blocking mode (DMA) using\r\n          HAL_I2C_Master_Receive_DMA()\r\n      (+) At reception end of transfer HAL_I2C_MasterRxCpltCallback is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_MasterRxCpltCallback\r\n      (+) Transmit in slave mode an amount of data in non blocking mode (DMA) using\r\n          HAL_I2C_Slave_Transmit_DMA()\r\n      (+) At transmission end of transfer HAL_I2C_SlaveTxCpltCallback is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_SlaveTxCpltCallback\r\n      (+) Receive in slave mode an amount of data in non blocking mode (DMA) using\r\n          HAL_I2C_Slave_Receive_DMA()\r\n      (+) At reception end of transfer HAL_I2C_SlaveRxCpltCallback is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_SlaveRxCpltCallback\r\n      (+) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_ErrorCallback\r\n      (+) Abort a master I2C process communication with Interrupt using HAL_I2C_Master_Abort_IT()\r\n      (+) End of abort process, HAL_I2C_AbortCpltCallback() is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_AbortCpltCallback()\r\n\r\n    *** DMA mode IO MEM operation ***\r\n    =================================\r\n    [..]\r\n      (+) Write an amount of data in no-blocking mode with DMA to a specific memory address using\r\n          HAL_I2C_Mem_Write_DMA()\r\n      (+) At MEM end of write transfer HAL_I2C_MemTxCpltCallback is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_MemTxCpltCallback\r\n      (+) Read an amount of data in no-blocking mode with DMA from a specific memory address using\r\n          HAL_I2C_Mem_Read_DMA()\r\n      (+) At MEM end of read transfer HAL_I2C_MemRxCpltCallback is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_MemRxCpltCallback\r\n      (+) In case of transfer Error, HAL_I2C_ErrorCallback() function is executed and user can\r\n           add his own code by customization of function pointer HAL_I2C_ErrorCallback\r\n\r\n\r\n     *** I2C HAL driver macros list ***\r\n     ==================================\r\n     [..]\r\n       Below the list of most used macros in I2C HAL driver.\r\n\r\n      (+) __HAL_I2C_ENABLE: Enable the I2C peripheral\r\n      (+) __HAL_I2C_DISABLE: Disable the I2C peripheral\r\n      (+) __HAL_I2C_GET_FLAG : Checks whether the specified I2C flag is set or not\r\n      (+) __HAL_I2C_CLEAR_FLAG : Clear the specified I2C pending flag\r\n      (+) __HAL_I2C_ENABLE_IT: Enable the specified I2C interrupt\r\n      (+) __HAL_I2C_DISABLE_IT: Disable the specified I2C interrupt\r\n\r\n     [..]\r\n       (@) You can refer to the I2C HAL driver header file for more useful macros\r\n\r\n     *** I2C Workarounds linked to Silicon Limitation ***\r\n     ====================================================\r\n     [..]\r\n       Below the list of all silicon limitations implemented for HAL on STM32F1xx product.\r\n       (@) See ErrataSheet to know full silicon limitation list of your product.\r\n\r\n       (#) Workarounds Implemented inside I2C HAL Driver\r\n          (##) Wrong data read into data register (Polling and Interrupt mode)\r\n          (##) Start cannot be generated after a misplaced Stop\r\n          (##) Some software events must be managed before the current byte is being transferred:\r\n               Workaround: Use DMA in general, except when the Master is receiving a single byte.\r\n               For Interupt mode, I2C should have the highest priority in the application.\r\n          (##) Mismatch on the \"Setup time for a repeated Start condition\" timing parameter:\r\n               Workaround: Reduce the frequency down to 88 kHz or use the I2C Fast-mode if\r\n               supported by the slave.\r\n          (##) Data valid time (tVD;DAT) violated without the OVR flag being set:\r\n               Workaround: If the slave device allows it, use the clock stretching mechanism\r\n               by programming NoStretchMode = I2C_NOSTRETCH_DISABLE in HAL_I2C_Init.\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup I2C I2C\r\n * @brief I2C HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_I2C_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @addtogroup I2C_Private_Define\r\n * @{\r\n */\r\n#define I2C_TIMEOUT_FLAG      35U         /*!< Timeout 35 ms             */\r\n#define I2C_TIMEOUT_BUSY_FLAG 25U         /*!< Timeout 25 ms             */\r\n#define I2C_NO_OPTION_FRAME   0xFFFF0000U /*!< XferOptions default value */\r\n\r\n/* Private define for @ref PreviousState usage */\r\n#define I2C_STATE_MSK            ((uint32_t)((HAL_I2C_STATE_BUSY_TX | HAL_I2C_STATE_BUSY_RX) & (~(uint32_t)HAL_I2C_STATE_READY))) /*!< Mask State define, keep only RX and TX bits            */\r\n#define I2C_STATE_NONE           ((uint32_t)(HAL_I2C_MODE_NONE))                                                                  /*!< Default Value                                          */\r\n#define I2C_STATE_MASTER_BUSY_TX ((uint32_t)((HAL_I2C_STATE_BUSY_TX & I2C_STATE_MSK) | HAL_I2C_MODE_MASTER))                      /*!< Master Busy TX, combinaison of State LSB and Mode enum */\r\n#define I2C_STATE_MASTER_BUSY_RX ((uint32_t)((HAL_I2C_STATE_BUSY_RX & I2C_STATE_MSK) | HAL_I2C_MODE_MASTER))                      /*!< Master Busy RX, combinaison of State LSB and Mode enum */\r\n#define I2C_STATE_SLAVE_BUSY_TX  ((uint32_t)((HAL_I2C_STATE_BUSY_TX & I2C_STATE_MSK) | HAL_I2C_MODE_SLAVE))                       /*!< Slave Busy TX, combinaison of State LSB and Mode enum  */\r\n#define I2C_STATE_SLAVE_BUSY_RX  ((uint32_t)((HAL_I2C_STATE_BUSY_RX & I2C_STATE_MSK) | HAL_I2C_MODE_SLAVE))                       /*!< Slave Busy RX, combinaison of State LSB and Mode enum  */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @addtogroup I2C_Private_Functions\r\n * @{\r\n */\r\n/* Private functions to handle DMA transfer */\r\nstatic void I2C_DMAXferCplt(DMA_HandleTypeDef *hdma);\r\nstatic void I2C_DMAError(DMA_HandleTypeDef *hdma);\r\nstatic void I2C_DMAAbort(DMA_HandleTypeDef *hdma);\r\n\r\nstatic void I2C_ITError(I2C_HandleTypeDef *hi2c);\r\n\r\nstatic HAL_StatusTypeDef I2C_MasterRequestWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Timeout, uint32_t Tickstart);\r\nstatic HAL_StatusTypeDef I2C_MasterRequestRead(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Timeout, uint32_t Tickstart);\r\nstatic HAL_StatusTypeDef I2C_RequestMemoryWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, uint32_t Tickstart);\r\nstatic HAL_StatusTypeDef I2C_RequestMemoryRead(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, uint32_t Tickstart);\r\nstatic HAL_StatusTypeDef I2C_WaitOnFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, FlagStatus Status, uint32_t Timeout, uint32_t Tickstart);\r\nstatic HAL_StatusTypeDef I2C_WaitOnMasterAddressFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, uint32_t Timeout, uint32_t Tickstart);\r\nstatic HAL_StatusTypeDef I2C_WaitOnTXEFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart);\r\nstatic HAL_StatusTypeDef I2C_WaitOnBTFFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart);\r\nstatic HAL_StatusTypeDef I2C_WaitOnRXNEFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart);\r\nstatic HAL_StatusTypeDef I2C_WaitOnSTOPFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart);\r\nstatic HAL_StatusTypeDef I2C_IsAcknowledgeFailed(I2C_HandleTypeDef *hi2c);\r\n\r\n/* Private functions for I2C transfer IRQ handler */\r\nstatic HAL_StatusTypeDef I2C_MasterTransmit_TXE(I2C_HandleTypeDef *hi2c);\r\nstatic HAL_StatusTypeDef I2C_MasterTransmit_BTF(I2C_HandleTypeDef *hi2c);\r\nstatic HAL_StatusTypeDef I2C_MasterReceive_RXNE(I2C_HandleTypeDef *hi2c);\r\nstatic HAL_StatusTypeDef I2C_MasterReceive_BTF(I2C_HandleTypeDef *hi2c);\r\nstatic HAL_StatusTypeDef I2C_Master_SB(I2C_HandleTypeDef *hi2c);\r\nstatic HAL_StatusTypeDef I2C_Master_ADDR(I2C_HandleTypeDef *hi2c);\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @defgroup I2C_Exported_Functions I2C Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup I2C_Exported_Functions_Group1 Initialization and de-initialization functions\r\n *  @brief    Initialization and Configuration functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n              ##### Initialization and de-initialization functions #####\r\n ===============================================================================\r\n    [..]  This subsection provides a set of functions allowing to initialize and\r\n          de-initialize the I2Cx peripheral:\r\n\r\n      (+) User must Implement HAL_I2C_MspInit() function in which he configures\r\n          all related peripherals resources (CLOCK, GPIO, DMA, IT and NVIC).\r\n\r\n      (+) Call the function HAL_I2C_Init() to configure the selected device with\r\n          the selected configuration:\r\n        (++) Communication Speed\r\n        (++) Duty cycle\r\n        (++) Addressing mode\r\n        (++) Own Address 1\r\n        (++) Dual Addressing mode\r\n        (++) Own Address 2\r\n        (++) General call mode\r\n        (++) Nostretch mode\r\n\r\n      (+) Call the function HAL_I2C_DeInit() to restore the default configuration\r\n          of the selected I2Cx peripheral.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initializes the I2C according to the specified parameters\r\n *         in the I2C_InitTypeDef and create the associated handle.\r\n * @param  hi2c: pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c) {\r\n  uint32_t freqrange = 0U;\r\n  uint32_t pclk1     = 0U;\r\n\r\n  /* Check the I2C handle allocation */\r\n  if (hi2c == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance));\r\n  assert_param(IS_I2C_CLOCK_SPEED(hi2c->Init.ClockSpeed));\r\n  assert_param(IS_I2C_DUTY_CYCLE(hi2c->Init.DutyCycle));\r\n  assert_param(IS_I2C_OWN_ADDRESS1(hi2c->Init.OwnAddress1));\r\n  assert_param(IS_I2C_ADDRESSING_MODE(hi2c->Init.AddressingMode));\r\n  assert_param(IS_I2C_DUAL_ADDRESS(hi2c->Init.DualAddressMode));\r\n  assert_param(IS_I2C_OWN_ADDRESS2(hi2c->Init.OwnAddress2));\r\n  assert_param(IS_I2C_GENERAL_CALL(hi2c->Init.GeneralCallMode));\r\n  assert_param(IS_I2C_NO_STRETCH(hi2c->Init.NoStretchMode));\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    hi2c->Lock = HAL_UNLOCKED;\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    HAL_I2C_MspInit(hi2c);\r\n  }\r\n\r\n  hi2c->State = HAL_I2C_STATE_BUSY;\r\n\r\n  /* Disable the selected I2C peripheral */\r\n  __HAL_I2C_DISABLE(hi2c);\r\n\r\n  /* Get PCLK1 frequency */\r\n  pclk1 = HAL_RCC_GetPCLK1Freq();\r\n\r\n  /* Check the minimum allowed PCLK1 frequency */\r\n  if (I2C_MIN_PCLK_FREQ(pclk1, hi2c->Init.ClockSpeed) == 1U) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Calculate frequency range */\r\n  freqrange = I2C_FREQRANGE(pclk1);\r\n\r\n  /*---------------------------- I2Cx CR2 Configuration ----------------------*/\r\n  /* Configure I2Cx: Frequency range */\r\n  hi2c->Instance->CR2 = freqrange;\r\n\r\n  /*---------------------------- I2Cx TRISE Configuration --------------------*/\r\n  /* Configure I2Cx: Rise Time */\r\n  hi2c->Instance->TRISE = I2C_RISE_TIME(freqrange, hi2c->Init.ClockSpeed);\r\n\r\n  /*---------------------------- I2Cx CCR Configuration ----------------------*/\r\n  /* Configure I2Cx: Speed */\r\n  hi2c->Instance->CCR = I2C_SPEED(pclk1, hi2c->Init.ClockSpeed, hi2c->Init.DutyCycle);\r\n\r\n  /*---------------------------- I2Cx CR1 Configuration ----------------------*/\r\n  /* Configure I2Cx: Generalcall and NoStretch mode */\r\n  hi2c->Instance->CR1 = (hi2c->Init.GeneralCallMode | hi2c->Init.NoStretchMode);\r\n\r\n  /*---------------------------- I2Cx OAR1 Configuration ---------------------*/\r\n  /* Configure I2Cx: Own Address1 and addressing mode */\r\n  hi2c->Instance->OAR1 = (hi2c->Init.AddressingMode | hi2c->Init.OwnAddress1);\r\n\r\n  /*---------------------------- I2Cx OAR2 Configuration ---------------------*/\r\n  /* Configure I2Cx: Dual mode and Own Address2 */\r\n  hi2c->Instance->OAR2 = (hi2c->Init.DualAddressMode | hi2c->Init.OwnAddress2);\r\n\r\n  /* Enable the selected I2C peripheral */\r\n  __HAL_I2C_ENABLE(hi2c);\r\n\r\n  hi2c->ErrorCode     = HAL_I2C_ERROR_NONE;\r\n  hi2c->State         = HAL_I2C_STATE_READY;\r\n  hi2c->PreviousState = I2C_STATE_NONE;\r\n  hi2c->Mode          = HAL_I2C_MODE_NONE;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the I2C peripheral.\r\n * @param  hi2c: pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c) {\r\n  /* Check the I2C handle allocation */\r\n  if (hi2c == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_I2C_ALL_INSTANCE(hi2c->Instance));\r\n\r\n  hi2c->State = HAL_I2C_STATE_BUSY;\r\n\r\n  /* Disable the I2C Peripheral Clock */\r\n  __HAL_I2C_DISABLE(hi2c);\r\n\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */\r\n  HAL_I2C_MspDeInit(hi2c);\r\n\r\n  hi2c->ErrorCode     = HAL_I2C_ERROR_NONE;\r\n  hi2c->State         = HAL_I2C_STATE_RESET;\r\n  hi2c->PreviousState = I2C_STATE_NONE;\r\n  hi2c->Mode          = HAL_I2C_MODE_NONE;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(hi2c);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief I2C MSP Init.\r\n * @param  hi2c: pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @retval None\r\n */\r\n__weak void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hi2c);\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_I2C_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief I2C MSP DeInit\r\n * @param  hi2c: pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @retval None\r\n */\r\n__weak void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hi2c);\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_I2C_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup I2C_Exported_Functions_Group2 IO operation functions\r\n *  @brief   Data transfers functions\r\n *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### IO operation functions #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to manage the I2C data\r\n    transfers.\r\n\r\n    (#) There are two modes of transfer:\r\n       (++) Blocking mode : The communication is performed in the polling mode.\r\n            The status of all data processing is returned by the same function\r\n            after finishing transfer.\r\n       (++) No-Blocking mode : The communication is performed using Interrupts\r\n            or DMA. These functions return the status of the transfer startup.\r\n            The end of the data processing will be indicated through the\r\n            dedicated I2C IRQ when using Interrupt mode or the DMA IRQ when\r\n            using DMA mode.\r\n\r\n    (#) Blocking mode functions are :\r\n        (++) HAL_I2C_Master_Transmit()\r\n        (++) HAL_I2C_Master_Receive()\r\n        (++) HAL_I2C_Slave_Transmit()\r\n        (++) HAL_I2C_Slave_Receive()\r\n        (++) HAL_I2C_Mem_Write()\r\n        (++) HAL_I2C_Mem_Read()\r\n        (++) HAL_I2C_IsDeviceReady()\r\n\r\n    (#) No-Blocking mode functions with Interrupt are :\r\n        (++) HAL_I2C_Master_Transmit_IT()\r\n        (++) HAL_I2C_Master_Receive_IT()\r\n        (++) HAL_I2C_Slave_Transmit_IT()\r\n        (++) HAL_I2C_Slave_Receive_IT()\r\n        (++) HAL_I2C_Master_Sequential_Transmit_IT()\r\n        (++) HAL_I2C_Master_Sequential_Receive_IT()\r\n        (++) HAL_I2C_Slave_Sequential_Transmit_IT()\r\n        (++) HAL_I2C_Slave_Sequential_Receive_IT()\r\n        (++) HAL_I2C_Mem_Write_IT()\r\n        (++) HAL_I2C_Mem_Read_IT()\r\n\r\n    (#) No-Blocking mode functions with DMA are :\r\n        (++) HAL_I2C_Master_Transmit_DMA()\r\n        (++) HAL_I2C_Master_Receive_DMA()\r\n        (++) HAL_I2C_Slave_Transmit_DMA()\r\n        (++) HAL_I2C_Slave_Receive_DMA()\r\n        (++) HAL_I2C_Mem_Write_DMA()\r\n        (++) HAL_I2C_Mem_Read_DMA()\r\n\r\n    (#) A set of Transfer Complete Callbacks are provided in non Blocking mode:\r\n        (++) HAL_I2C_MemTxCpltCallback()\r\n        (++) HAL_I2C_MemRxCpltCallback()\r\n        (++) HAL_I2C_MasterTxCpltCallback()\r\n        (++) HAL_I2C_MasterRxCpltCallback()\r\n        (++) HAL_I2C_SlaveTxCpltCallback()\r\n        (++) HAL_I2C_SlaveRxCpltCallback()\r\n        (++) HAL_I2C_ErrorCallback()\r\n        (++) HAL_I2C_AbortCpltCallback()\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Transmits in master mode an amount of data in blocking mode.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @param  Timeout Timeout duration\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) {\r\n  uint32_t tickstart = 0x00U;\r\n\r\n  /* Init tickstart for timeout management*/\r\n  tickstart = HAL_GetTick();\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    /* Wait until BUSY flag is reset */\r\n    if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK) {\r\n      return HAL_BUSY;\r\n    }\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_TX;\r\n    hi2c->Mode      = HAL_I2C_MODE_MASTER;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n\r\n    /* Send Slave Address */\r\n    if (I2C_MasterRequestWrite(hi2c, DevAddress, Timeout, tickstart) != HAL_OK) {\r\n      if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n        return HAL_ERROR;\r\n      } else {\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n\r\n    /* Clear ADDR flag */\r\n    __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n    while (hi2c->XferSize > 0U) {\r\n      /* Wait until TXE flag is set */\r\n      if (I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) {\r\n        if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n          /* Generate Stop */\r\n          hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n          return HAL_ERROR;\r\n        } else {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n\r\n      /* Write data to DR */\r\n      hi2c->Instance->DR = (*hi2c->pBuffPtr++);\r\n      hi2c->XferCount--;\r\n      hi2c->XferSize--;\r\n\r\n      if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == SET) && (hi2c->XferSize != 0U)) {\r\n        /* Write data to DR */\r\n        hi2c->Instance->DR = (*hi2c->pBuffPtr++);\r\n        hi2c->XferCount--;\r\n        hi2c->XferSize--;\r\n      }\r\n\r\n      /* Wait until BTF flag is set */\r\n      if (I2C_WaitOnBTFFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) {\r\n        if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n          /* Generate Stop */\r\n          hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n          return HAL_ERROR;\r\n        } else {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    /* Generate Stop */\r\n    hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n\r\n    hi2c->State = HAL_I2C_STATE_READY;\r\n    hi2c->Mode  = HAL_I2C_MODE_NONE;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Receives in master mode an amount of data in blocking mode.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @param  Timeout Timeout duration\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) {\r\n  uint32_t tickstart = 0x00U;\r\n\r\n  /* Init tickstart for timeout management*/\r\n  tickstart = HAL_GetTick();\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    /* Wait until BUSY flag is reset */\r\n    if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK) {\r\n      return HAL_BUSY;\r\n    }\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_RX;\r\n    hi2c->Mode      = HAL_I2C_MODE_MASTER;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n\r\n    /* Send Slave Address */\r\n    if (I2C_MasterRequestRead(hi2c, DevAddress, Timeout, tickstart) != HAL_OK) {\r\n      if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n        return HAL_ERROR;\r\n      } else {\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n\r\n    if (hi2c->XferSize == 0U) {\r\n      /* Clear ADDR flag */\r\n      __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n      /* Generate Stop */\r\n      hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n    } else if (hi2c->XferSize == 1U) {\r\n      /* Disable Acknowledge */\r\n      hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n      /* Disable all active IRQs around ADDR clearing and STOP programming because the EV6_3\r\n      software sequence must complete before the current byte end of transfer */\r\n      __disable_irq();\r\n\r\n      /* Clear ADDR flag */\r\n      __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n      /* Generate Stop */\r\n      hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n\r\n      /* Re-enable IRQs */\r\n      __enable_irq();\r\n    } else if (hi2c->XferSize == 2U) {\r\n      /* Enable Pos */\r\n      hi2c->Instance->CR1 |= I2C_CR1_POS;\r\n\r\n      /* Disable all active IRQs around ADDR clearing and STOP programming because the EV6_3\r\n      software sequence must complete before the current byte end of transfer */\r\n      __disable_irq();\r\n\r\n      /* Clear ADDR flag */\r\n      __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n      /* Disable Acknowledge */\r\n      hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n      /* Re-enable IRQs */\r\n      __enable_irq();\r\n    } else {\r\n      /* Enable Acknowledge */\r\n      hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n      /* Clear ADDR flag */\r\n      __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n    }\r\n\r\n    while (hi2c->XferSize > 0U) {\r\n      if (hi2c->XferSize <= 3U) {\r\n        /* One byte */\r\n        if (hi2c->XferSize == 1U) {\r\n          /* Wait until RXNE flag is set */\r\n          if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) {\r\n            if (hi2c->ErrorCode == HAL_I2C_ERROR_TIMEOUT) {\r\n              return HAL_TIMEOUT;\r\n            } else {\r\n              return HAL_ERROR;\r\n            }\r\n          }\r\n\r\n          /* Read data from DR */\r\n          (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n          hi2c->XferSize--;\r\n          hi2c->XferCount--;\r\n        }\r\n        /* Two bytes */\r\n        else if (hi2c->XferSize == 2U) {\r\n          /* Wait until BTF flag is set */\r\n          if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BTF, RESET, Timeout, tickstart) != HAL_OK) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n\r\n          /* Disable all active IRQs around ADDR clearing and STOP programming because the EV6_3\r\n             software sequence must complete before the current byte end of transfer */\r\n          __disable_irq();\r\n\r\n          /* Generate Stop */\r\n          hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n\r\n          /* Read data from DR */\r\n          (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n          hi2c->XferSize--;\r\n          hi2c->XferCount--;\r\n\r\n          /* Re-enable IRQs */\r\n          __enable_irq();\r\n\r\n          /* Read data from DR */\r\n          (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n          hi2c->XferSize--;\r\n          hi2c->XferCount--;\r\n        }\r\n        /* 3 Last bytes */\r\n        else {\r\n          /* Wait until BTF flag is set */\r\n          if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BTF, RESET, Timeout, tickstart) != HAL_OK) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n\r\n          /* Disable Acknowledge */\r\n          hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n          /* Disable all active IRQs around ADDR clearing and STOP programming because the EV6_3\r\n             software sequence must complete before the current byte end of transfer */\r\n          __disable_irq();\r\n\r\n          /* Read data from DR */\r\n          (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n          hi2c->XferSize--;\r\n          hi2c->XferCount--;\r\n\r\n          /* Wait until BTF flag is set */\r\n          if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BTF, RESET, Timeout, tickstart) != HAL_OK) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n\r\n          /* Generate Stop */\r\n          hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n\r\n          /* Read data from DR */\r\n          (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n          hi2c->XferSize--;\r\n          hi2c->XferCount--;\r\n\r\n          /* Re-enable IRQs */\r\n          __enable_irq();\r\n\r\n          /* Read data from DR */\r\n          (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n          hi2c->XferSize--;\r\n          hi2c->XferCount--;\r\n        }\r\n      } else {\r\n        /* Wait until RXNE flag is set */\r\n        if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) {\r\n          if (hi2c->ErrorCode == HAL_I2C_ERROR_TIMEOUT) {\r\n            return HAL_TIMEOUT;\r\n          } else {\r\n            return HAL_ERROR;\r\n          }\r\n        }\r\n\r\n        /* Read data from DR */\r\n        (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n        hi2c->XferSize--;\r\n        hi2c->XferCount--;\r\n\r\n        if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == SET) {\r\n          /* Read data from DR */\r\n          (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n          hi2c->XferSize--;\r\n          hi2c->XferCount--;\r\n        }\r\n      }\r\n    }\r\n\r\n    hi2c->State = HAL_I2C_STATE_READY;\r\n    hi2c->Mode  = HAL_I2C_MODE_NONE;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Transmits in slave mode an amount of data in blocking mode.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @param  Timeout Timeout duration\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout) {\r\n  uint32_t tickstart = 0x00U;\r\n\r\n  /* Init tickstart for timeout management*/\r\n  tickstart = HAL_GetTick();\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    if ((pData == NULL) || (Size == 0U)) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_TX;\r\n    hi2c->Mode      = HAL_I2C_MODE_SLAVE;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n\r\n    /* Enable Address Acknowledge */\r\n    hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n    /* Wait until ADDR flag is set */\r\n    if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n\r\n    /* Clear ADDR flag */\r\n    __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n    while (hi2c->XferSize > 0U) {\r\n      /* Wait until TXE flag is set */\r\n      if (I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) {\r\n        /* Disable Address Acknowledge */\r\n        hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n        if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n          return HAL_ERROR;\r\n        } else {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n\r\n      /* Write data to DR */\r\n      hi2c->Instance->DR = (*hi2c->pBuffPtr++);\r\n      hi2c->XferCount--;\r\n      hi2c->XferSize--;\r\n\r\n      if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == SET) && (hi2c->XferSize != 0U)) {\r\n        /* Write data to DR */\r\n        hi2c->Instance->DR = (*hi2c->pBuffPtr++);\r\n        hi2c->XferCount--;\r\n        hi2c->XferSize--;\r\n      }\r\n    }\r\n\r\n    /* Wait until AF flag is set */\r\n    if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_AF, RESET, Timeout, tickstart) != HAL_OK) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n\r\n    /* Clear AF flag */\r\n    __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);\r\n\r\n    /* Disable Address Acknowledge */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n    hi2c->State = HAL_I2C_STATE_READY;\r\n    hi2c->Mode  = HAL_I2C_MODE_NONE;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Receive in slave mode an amount of data in blocking mode\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for the specified I2C.\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @param  Timeout Timeout duration\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout) {\r\n  uint32_t tickstart = 0x00U;\r\n\r\n  /* Init tickstart for timeout management*/\r\n  tickstart = HAL_GetTick();\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    if ((pData == NULL) || (Size == 0U)) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_RX;\r\n    hi2c->Mode      = HAL_I2C_MODE_SLAVE;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n\r\n    /* Enable Address Acknowledge */\r\n    hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n    /* Wait until ADDR flag is set */\r\n    if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n\r\n    /* Clear ADDR flag */\r\n    __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n    while (hi2c->XferSize > 0U) {\r\n      /* Wait until RXNE flag is set */\r\n      if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) {\r\n        /* Disable Address Acknowledge */\r\n        hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n        if (hi2c->ErrorCode == HAL_I2C_ERROR_TIMEOUT) {\r\n          return HAL_TIMEOUT;\r\n        } else {\r\n          return HAL_ERROR;\r\n        }\r\n      }\r\n\r\n      /* Read data from DR */\r\n      (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n      hi2c->XferSize--;\r\n      hi2c->XferCount--;\r\n\r\n      if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == SET) && (hi2c->XferSize != 0U)) {\r\n        /* Read data from DR */\r\n        (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n        hi2c->XferSize--;\r\n        hi2c->XferCount--;\r\n      }\r\n    }\r\n\r\n    /* Wait until STOP flag is set */\r\n    if (I2C_WaitOnSTOPFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) {\r\n      /* Disable Address Acknowledge */\r\n      hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n      if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n        return HAL_ERROR;\r\n      } else {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n\r\n    /* Clear STOP flag */\r\n    __HAL_I2C_CLEAR_STOPFLAG(hi2c);\r\n\r\n    /* Disable Address Acknowledge */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n    hi2c->State = HAL_I2C_STATE_READY;\r\n    hi2c->Mode  = HAL_I2C_MODE_NONE;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Transmit in master mode an amount of data in non-blocking mode with Interrupt\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size) {\r\n  __IO uint32_t count = 0U;\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    /* Wait until BUSY flag is reset */\r\n    count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U);\r\n    do {\r\n      if (count-- == 0U) {\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    } while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET);\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_TX;\r\n    hi2c->Mode      = HAL_I2C_MODE_MASTER;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n    hi2c->Devaddress  = DevAddress;\r\n\r\n    /* Generate Start */\r\n    hi2c->Instance->CR1 |= I2C_CR1_START;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    /* Note : The I2C interrupts must be enabled after unlocking current process\r\n              to avoid the risk of I2C interrupt handle execution before current\r\n              process unlock */\r\n    /* Enable EVT, BUF and ERR interrupt */\r\n    __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Receive in master mode an amount of data in non-blocking mode with Interrupt\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size) {\r\n  __IO uint32_t count = 0U;\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    /* Wait until BUSY flag is reset */\r\n    count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U);\r\n    do {\r\n      if (count-- == 0U) {\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    } while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET);\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_RX;\r\n    hi2c->Mode      = HAL_I2C_MODE_MASTER;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n    hi2c->Devaddress  = DevAddress;\r\n\r\n    /* Enable Acknowledge */\r\n    hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n    /* Generate Start */\r\n    hi2c->Instance->CR1 |= I2C_CR1_START;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    /* Note : The I2C interrupts must be enabled after unlocking current process\r\n    to avoid the risk of I2C interrupt handle execution before current\r\n    process unlock */\r\n\r\n    /* Enable EVT, BUF and ERR interrupt */\r\n    __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Sequential transmit in master mode an amount of data in non-blocking mode with Interrupt\r\n * @note   This interface allow to manage repeated start condition when a direction change during transfer\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for the specified I2C.\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @param  XferOptions Options of Transfer, value of @ref I2C_XferOptions_definition\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Master_Sequential_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions) {\r\n  __IO uint32_t Prev_State = 0x00U;\r\n  __IO uint32_t count      = 0x00U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions));\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    /* Check Busy Flag only if FIRST call of Master interface */\r\n    if ((XferOptions == I2C_FIRST_AND_LAST_FRAME) || (XferOptions == I2C_FIRST_FRAME)) {\r\n      /* Wait until BUSY flag is reset */\r\n      count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U);\r\n      do {\r\n        if (count-- == 0U) {\r\n          hi2c->PreviousState = I2C_STATE_NONE;\r\n          hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n          /* Process Unlocked */\r\n          __HAL_UNLOCK(hi2c);\r\n\r\n          return HAL_TIMEOUT;\r\n        }\r\n      } while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET);\r\n    }\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_TX;\r\n    hi2c->Mode      = HAL_I2C_MODE_MASTER;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = XferOptions;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n    hi2c->Devaddress  = DevAddress;\r\n\r\n    Prev_State = hi2c->PreviousState;\r\n\r\n    /* Generate Start */\r\n    if ((Prev_State == I2C_STATE_MASTER_BUSY_RX) || (Prev_State == I2C_STATE_NONE)) {\r\n      /* Generate Start condition if first transfer */\r\n      if ((XferOptions == I2C_FIRST_AND_LAST_FRAME) || (XferOptions == I2C_FIRST_FRAME)) {\r\n        /* Generate Start */\r\n        hi2c->Instance->CR1 |= I2C_CR1_START;\r\n      } else {\r\n        /* Generate ReStart */\r\n        hi2c->Instance->CR1 |= I2C_CR1_START;\r\n      }\r\n    }\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    /* Note : The I2C interrupts must be enabled after unlocking current process\r\n    to avoid the risk of I2C interrupt handle execution before current\r\n    process unlock */\r\n\r\n    /* Enable EVT, BUF and ERR interrupt */\r\n    __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Sequential receive in master mode an amount of data in non-blocking mode with Interrupt\r\n * @note   This interface allow to manage repeated start condition when a direction change during transfer\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for the specified I2C.\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @param  XferOptions Options of Transfer, value of @ref I2C_XferOptions_definition\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Master_Sequential_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions) {\r\n  __IO uint32_t count = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions));\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    /* Check Busy Flag only if FIRST call of Master interface */\r\n    if ((XferOptions == I2C_FIRST_AND_LAST_FRAME) || (XferOptions == I2C_FIRST_FRAME)) {\r\n      /* Wait until BUSY flag is reset */\r\n      count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U);\r\n      do {\r\n        if (count-- == 0U) {\r\n          hi2c->PreviousState = I2C_STATE_NONE;\r\n          hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n          /* Process Unlocked */\r\n          __HAL_UNLOCK(hi2c);\r\n\r\n          return HAL_TIMEOUT;\r\n        }\r\n      } while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET);\r\n    }\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_RX;\r\n    hi2c->Mode      = HAL_I2C_MODE_MASTER;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = XferOptions;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n    hi2c->Devaddress  = DevAddress;\r\n\r\n    if ((hi2c->PreviousState == I2C_STATE_MASTER_BUSY_TX) || (hi2c->PreviousState == I2C_STATE_NONE)) {\r\n      /* Generate Start condition if first transfer */\r\n      if ((XferOptions == I2C_FIRST_AND_LAST_FRAME) || (XferOptions == I2C_FIRST_FRAME) || (XferOptions == I2C_NO_OPTION_FRAME)) {\r\n        /* Enable Acknowledge */\r\n        hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n        /* Generate Start */\r\n        hi2c->Instance->CR1 |= I2C_CR1_START;\r\n      } else {\r\n        /* Enable Acknowledge */\r\n        hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n        /* Generate ReStart */\r\n        hi2c->Instance->CR1 |= I2C_CR1_START;\r\n      }\r\n    }\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    /* Note : The I2C interrupts must be enabled after unlocking current process\r\n    to avoid the risk of I2C interrupt handle execution before current\r\n    process unlock */\r\n\r\n    /* Enable EVT, BUF and ERR interrupt */\r\n    __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Transmit in slave mode an amount of data in non-blocking mode with Interrupt\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for the specified I2C.\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) {\r\n  __IO uint32_t count = 0U;\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    if ((pData == NULL) || (Size == 0U)) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Wait until BUSY flag is reset */\r\n    count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U);\r\n    do {\r\n      if (count-- == 0U) {\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    } while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET);\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_TX;\r\n    hi2c->Mode      = HAL_I2C_MODE_SLAVE;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n\r\n    /* Enable Address Acknowledge */\r\n    hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    /* Note : The I2C interrupts must be enabled after unlocking current process\r\n              to avoid the risk of I2C interrupt handle execution before current\r\n              process unlock */\r\n\r\n    /* Enable EVT, BUF and ERR interrupt */\r\n    __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Receive in slave mode an amount of data in non-blocking mode with Interrupt\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) {\r\n  __IO uint32_t count = 0U;\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    if ((pData == NULL) || (Size == 0U)) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Wait until BUSY flag is reset */\r\n    count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U);\r\n    do {\r\n      if (count-- == 0U) {\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    } while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET);\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_RX;\r\n    hi2c->Mode      = HAL_I2C_MODE_SLAVE;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferSize    = Size;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n\r\n    /* Enable Address Acknowledge */\r\n    hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    /* Note : The I2C interrupts must be enabled after unlocking current process\r\n              to avoid the risk of I2C interrupt handle execution before current\r\n              process unlock */\r\n\r\n    /* Enable EVT, BUF and ERR interrupt */\r\n    __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Sequential transmit in slave mode an amount of data in no-blocking mode with Interrupt\r\n * @note   This interface allow to manage repeated start condition when a direction change during transfer\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @param  XferOptions Options of Transfer, value of @ref I2C_XferOptions_definition\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Slave_Sequential_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions) {\r\n  /* Check the parameters */\r\n  assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions));\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_LISTEN) {\r\n    if ((pData == NULL) || (Size == 0U)) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_TX_LISTEN;\r\n    hi2c->Mode      = HAL_I2C_MODE_SLAVE;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = XferOptions;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n\r\n    /* Clear ADDR flag */\r\n    __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    /* Note : The I2C interrupts must be enabled after unlocking current process\r\n              to avoid the risk of I2C interrupt handle execution before current\r\n              process unlock */\r\n\r\n    /* Enable EVT, BUF and ERR interrupt */\r\n    __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Sequential receive in slave mode an amount of data in non-blocking mode with Interrupt\r\n * @note   This interface allow to manage repeated start condition when a direction change during transfer\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for the specified I2C.\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @param  XferOptions Options of Transfer, value of @ref I2C_XferOptions_definition\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Slave_Sequential_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions) {\r\n  /* Check the parameters */\r\n  assert_param(IS_I2C_TRANSFER_OPTIONS_REQUEST(XferOptions));\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_LISTEN) {\r\n    if ((pData == NULL) || (Size == 0U)) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_RX_LISTEN;\r\n    hi2c->Mode      = HAL_I2C_MODE_SLAVE;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = XferOptions;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n\r\n    /* Clear ADDR flag */\r\n    __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    /* Note : The I2C interrupts must be enabled after unlocking current process\r\n              to avoid the risk of I2C interrupt handle execution before current\r\n              process unlock */\r\n\r\n    /* Enable EVT, BUF and ERR interrupt */\r\n    __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Enable the Address listen mode with Interrupt.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c) {\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    hi2c->State = HAL_I2C_STATE_LISTEN;\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Enable Address Acknowledge */\r\n    hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n    /* Enable EVT and ERR interrupt */\r\n    __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Disable the Address listen mode with Interrupt.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c) {\r\n  /* Declaration of tmp to prevent undefined behavior of volatile usage */\r\n  uint32_t tmp;\r\n\r\n  /* Disable Address listen mode only if a transfer is not ongoing */\r\n  if (hi2c->State == HAL_I2C_STATE_LISTEN) {\r\n    tmp                 = (uint32_t)(hi2c->State) & I2C_STATE_MSK;\r\n    hi2c->PreviousState = tmp | (uint32_t)(hi2c->Mode);\r\n    hi2c->State         = HAL_I2C_STATE_READY;\r\n    hi2c->Mode          = HAL_I2C_MODE_NONE;\r\n\r\n    /* Disable Address Acknowledge */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n    /* Disable EVT and ERR interrupt */\r\n    __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Transmit in master mode an amount of data in non-blocking mode with DMA\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size) {\r\n  __IO uint32_t count = 0U;\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    /* Wait until BUSY flag is reset */\r\n    count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U);\r\n    do {\r\n      if (count-- == 0U) {\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    } while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET);\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_TX;\r\n    hi2c->Mode      = HAL_I2C_MODE_MASTER;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n    hi2c->Devaddress  = DevAddress;\r\n\r\n    if (hi2c->XferSize > 0U) {\r\n      /* Set the I2C DMA transfer complete callback */\r\n      hi2c->hdmatx->XferCpltCallback = I2C_DMAXferCplt;\r\n\r\n      /* Set the DMA error callback */\r\n      hi2c->hdmatx->XferErrorCallback = I2C_DMAError;\r\n\r\n      /* Set the unused DMA callbacks to NULL */\r\n      hi2c->hdmatx->XferHalfCpltCallback = NULL;\r\n      hi2c->hdmatx->XferAbortCallback    = NULL;\r\n\r\n      /* Enable the DMA channel */\r\n      HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)hi2c->pBuffPtr, (uint32_t)&hi2c->Instance->DR, hi2c->XferSize);\r\n\r\n      /* Enable Acknowledge */\r\n      hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n      /* Generate Start */\r\n      hi2c->Instance->CR1 |= I2C_CR1_START;\r\n\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(hi2c);\r\n\r\n      /* Note : The I2C interrupts must be enabled after unlocking current process\r\n      to avoid the risk of I2C interrupt handle execution before current\r\n      process unlock */\r\n\r\n      /* Enable EVT and ERR interrupt */\r\n      __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR);\r\n\r\n      /* Enable DMA Request */\r\n      hi2c->Instance->CR2 |= I2C_CR2_DMAEN;\r\n    } else {\r\n      /* Enable Acknowledge */\r\n      hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n      /* Generate Start */\r\n      hi2c->Instance->CR1 |= I2C_CR1_START;\r\n\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(hi2c);\r\n\r\n      /* Note : The I2C interrupts must be enabled after unlocking current process\r\n      to avoid the risk of I2C interrupt handle execution before current\r\n      process unlock */\r\n\r\n      /* Enable EVT, BUF and ERR interrupt */\r\n      __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n    }\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Receive in master mode an amount of data in non-blocking mode with DMA\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size) {\r\n  __IO uint32_t count = 0U;\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    /* Wait until BUSY flag is reset */\r\n    count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U);\r\n    do {\r\n      if (count-- == 0U) {\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    } while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET);\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_RX;\r\n    hi2c->Mode      = HAL_I2C_MODE_MASTER;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n    hi2c->Devaddress  = DevAddress;\r\n\r\n    if (hi2c->XferSize > 0U) {\r\n      /* Set the I2C DMA transfer complete callback */\r\n      hi2c->hdmarx->XferCpltCallback = I2C_DMAXferCplt;\r\n\r\n      /* Set the DMA error callback */\r\n      hi2c->hdmarx->XferErrorCallback = I2C_DMAError;\r\n\r\n      /* Set the unused DMA callbacks to NULL */\r\n      hi2c->hdmarx->XferHalfCpltCallback = NULL;\r\n      hi2c->hdmarx->XferAbortCallback    = NULL;\r\n\r\n      /* Enable the DMA channel */\r\n      HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->DR, (uint32_t)hi2c->pBuffPtr, hi2c->XferSize);\r\n\r\n      /* Enable Acknowledge */\r\n      hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n      /* Generate Start */\r\n      hi2c->Instance->CR1 |= I2C_CR1_START;\r\n\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(hi2c);\r\n\r\n      /* Note : The I2C interrupts must be enabled after unlocking current process\r\n                to avoid the risk of I2C interrupt handle execution before current\r\n                process unlock */\r\n\r\n      /* Enable EVT and ERR interrupt */\r\n      __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR);\r\n\r\n      /* Enable DMA Request */\r\n      hi2c->Instance->CR2 |= I2C_CR2_DMAEN;\r\n    } else {\r\n      /* Enable Acknowledge */\r\n      hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n      /* Generate Start */\r\n      hi2c->Instance->CR1 |= I2C_CR1_START;\r\n\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(hi2c);\r\n\r\n      /* Note : The I2C interrupts must be enabled after unlocking current process\r\n      to avoid the risk of I2C interrupt handle execution before current\r\n      process unlock */\r\n\r\n      /* Enable EVT, BUF and ERR interrupt */\r\n      __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n    }\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Abort a master I2C process communication with Interrupt.\r\n * @note   This abort can be called only if state is ready\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for the specified I2C.\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(DevAddress);\r\n\r\n  /* Abort Master transfer during Receive or Transmit process    */\r\n  if (hi2c->Mode == HAL_I2C_MODE_MASTER) {\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    hi2c->PreviousState = I2C_STATE_NONE;\r\n    hi2c->State         = HAL_I2C_STATE_ABORT;\r\n\r\n    /* Disable Acknowledge */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n    /* Generate Stop */\r\n    hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n\r\n    hi2c->XferCount = 0U;\r\n\r\n    /* Disable EVT, BUF and ERR interrupt */\r\n    __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    /* Call the corresponding callback to inform upper layer of End of Transfer */\r\n    I2C_ITError(hi2c);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    /* Wrong usage of abort function */\r\n    /* This function should be used only in case of abort monitored by master device */\r\n    return HAL_ERROR;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Transmit in slave mode an amount of data in non-blocking mode with DMA\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) {\r\n  __IO uint32_t count = 0U;\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    if ((pData == NULL) || (Size == 0U)) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Wait until BUSY flag is reset */\r\n    count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U);\r\n    do {\r\n      if (count-- == 0U) {\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    } while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET);\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_TX;\r\n    hi2c->Mode      = HAL_I2C_MODE_SLAVE;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n\r\n    /* Set the I2C DMA transfer complete callback */\r\n    hi2c->hdmatx->XferCpltCallback = I2C_DMAXferCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    hi2c->hdmatx->XferErrorCallback = I2C_DMAError;\r\n\r\n    /* Set the unused DMA callbacks to NULL */\r\n    hi2c->hdmatx->XferHalfCpltCallback = NULL;\r\n    hi2c->hdmatx->XferAbortCallback    = NULL;\r\n\r\n    /* Enable the DMA channel */\r\n    HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)hi2c->pBuffPtr, (uint32_t)&hi2c->Instance->DR, hi2c->XferSize);\r\n\r\n    /* Enable Address Acknowledge */\r\n    hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    /* Note : The I2C interrupts must be enabled after unlocking current process\r\n              to avoid the risk of I2C interrupt handle execution before current\r\n              process unlock */\r\n    /* Enable EVT and ERR interrupt */\r\n    __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR);\r\n\r\n    /* Enable DMA Request */\r\n    hi2c->Instance->CR2 |= I2C_CR2_DMAEN;\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Receive in slave mode an amount of data in non-blocking mode with DMA\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size) {\r\n  __IO uint32_t count = 0U;\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    if ((pData == NULL) || (Size == 0U)) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Wait until BUSY flag is reset */\r\n    count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U);\r\n    do {\r\n      if (count-- == 0U) {\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    } while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET);\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_RX;\r\n    hi2c->Mode      = HAL_I2C_MODE_SLAVE;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n\r\n    /* Set the I2C DMA transfer complete callback */\r\n    hi2c->hdmarx->XferCpltCallback = I2C_DMAXferCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    hi2c->hdmarx->XferErrorCallback = I2C_DMAError;\r\n\r\n    /* Set the unused DMA callbacks to NULL */\r\n    hi2c->hdmarx->XferHalfCpltCallback = NULL;\r\n    hi2c->hdmarx->XferAbortCallback    = NULL;\r\n\r\n    /* Enable the DMA channel */\r\n    HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->DR, (uint32_t)hi2c->pBuffPtr, hi2c->XferSize);\r\n\r\n    /* Enable Address Acknowledge */\r\n    hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    /* Note : The I2C interrupts must be enabled after unlocking current process\r\n              to avoid the risk of I2C interrupt handle execution before current\r\n              process unlock */\r\n    /* Enable EVT and ERR interrupt */\r\n    __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR);\r\n\r\n    /* Enable DMA Request */\r\n    hi2c->Instance->CR2 |= I2C_CR2_DMAEN;\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n/**\r\n * @brief  Write an amount of data in blocking mode to a specific memory address\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  MemAddress Internal memory address\r\n * @param  MemAddSize Size of internal memory address\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @param  Timeout Timeout duration\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout) {\r\n  uint32_t tickstart = 0x00U;\r\n\r\n  /* Init tickstart for timeout management*/\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_I2C_MEMADD_SIZE(MemAddSize));\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    /* Wait until BUSY flag is reset */\r\n    if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK) {\r\n      return HAL_BUSY;\r\n    }\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_TX;\r\n    hi2c->Mode      = HAL_I2C_MODE_MEM;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n\r\n    /* Send Slave Address and Memory Address */\r\n    if (I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) != HAL_OK) {\r\n      if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n        return HAL_ERROR;\r\n      } else {\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n\r\n    while (hi2c->XferSize > 0U) {\r\n      /* Wait until TXE flag is set */\r\n      if (I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) {\r\n        if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n          /* Generate Stop */\r\n          hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n          return HAL_ERROR;\r\n        } else {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n\r\n      /* Write data to DR */\r\n      hi2c->Instance->DR = (*hi2c->pBuffPtr++);\r\n      hi2c->XferSize--;\r\n      hi2c->XferCount--;\r\n\r\n      if ((__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == SET) && (hi2c->XferSize != 0U)) {\r\n        /* Write data to DR */\r\n        hi2c->Instance->DR = (*hi2c->pBuffPtr++);\r\n        hi2c->XferSize--;\r\n        hi2c->XferCount--;\r\n      }\r\n    }\r\n\r\n    /* Wait until BTF flag is set */\r\n    if (I2C_WaitOnBTFFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) {\r\n      if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n        /* Generate Stop */\r\n        hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n        return HAL_ERROR;\r\n      } else {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n\r\n    /* Generate Stop */\r\n    hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n\r\n    hi2c->State = HAL_I2C_STATE_READY;\r\n    hi2c->Mode  = HAL_I2C_MODE_NONE;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Read an amount of data in blocking mode from a specific memory address\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  MemAddress Internal memory address\r\n * @param  MemAddSize Size of internal memory address\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @param  Timeout Timeout duration\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout) {\r\n  uint32_t tickstart = 0x00U;\r\n\r\n  /* Init tickstart for timeout management*/\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_I2C_MEMADD_SIZE(MemAddSize));\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    /* Wait until BUSY flag is reset */\r\n    if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK) {\r\n      return HAL_BUSY;\r\n    }\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_RX;\r\n    hi2c->Mode      = HAL_I2C_MODE_MEM;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n\r\n    /* Send Slave Address and Memory Address */\r\n    if (I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) != HAL_OK) {\r\n      if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n        return HAL_ERROR;\r\n      } else {\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n\r\n    if (hi2c->XferSize == 0U) {\r\n      /* Clear ADDR flag */\r\n      __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n      /* Generate Stop */\r\n      hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n    } else if (hi2c->XferSize == 1U) {\r\n      /* Disable Acknowledge */\r\n      hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n      /* Disable all active IRQs around ADDR clearing and STOP programming because the EV6_3\r\n         software sequence must complete before the current byte end of transfer */\r\n      __disable_irq();\r\n\r\n      /* Clear ADDR flag */\r\n      __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n      /* Generate Stop */\r\n      hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n\r\n      /* Re-enable IRQs */\r\n      __enable_irq();\r\n    } else if (hi2c->XferSize == 2U) {\r\n      /* Enable Pos */\r\n      hi2c->Instance->CR1 |= I2C_CR1_POS;\r\n\r\n      /* Disable all active IRQs around ADDR clearing and STOP programming because the EV6_3\r\n         software sequence must complete before the current byte end of transfer */\r\n      __disable_irq();\r\n\r\n      /* Clear ADDR flag */\r\n      __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n      /* Disable Acknowledge */\r\n      hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n      /* Re-enable IRQs */\r\n      __enable_irq();\r\n    } else {\r\n      /* Enable Acknowledge */\r\n      SET_BIT(hi2c->Instance->CR1, I2C_CR1_ACK);\r\n\r\n      /* Clear ADDR flag */\r\n      __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n    }\r\n\r\n    while (hi2c->XferSize > 0U) {\r\n      if (hi2c->XferSize <= 3U) {\r\n        /* One byte */\r\n        if (hi2c->XferSize == 1U) {\r\n          /* Wait until RXNE flag is set */\r\n          if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) {\r\n            if (hi2c->ErrorCode == HAL_I2C_ERROR_TIMEOUT) {\r\n              return HAL_TIMEOUT;\r\n            } else {\r\n              return HAL_ERROR;\r\n            }\r\n          }\r\n\r\n          /* Read data from DR */\r\n          (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n          hi2c->XferSize--;\r\n          hi2c->XferCount--;\r\n        }\r\n        /* Two bytes */\r\n        else if (hi2c->XferSize == 2U) {\r\n          /* Wait until BTF flag is set */\r\n          if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BTF, RESET, Timeout, tickstart) != HAL_OK) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n\r\n          /* Disable all active IRQs around ADDR clearing and STOP programming because the EV6_3\r\n             software sequence must complete before the current byte end of transfer */\r\n          __disable_irq();\r\n\r\n          /* Generate Stop */\r\n          hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n\r\n          /* Read data from DR */\r\n          (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n          hi2c->XferSize--;\r\n          hi2c->XferCount--;\r\n\r\n          /* Re-enable IRQs */\r\n          __enable_irq();\r\n\r\n          /* Read data from DR */\r\n          (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n          hi2c->XferSize--;\r\n          hi2c->XferCount--;\r\n        }\r\n        /* 3 Last bytes */\r\n        else {\r\n          /* Wait until BTF flag is set */\r\n          if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BTF, RESET, Timeout, tickstart) != HAL_OK) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n\r\n          /* Disable Acknowledge */\r\n          hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n          /* Disable all active IRQs around ADDR clearing and STOP programming because the EV6_3\r\n             software sequence must complete before the current byte end of transfer */\r\n          __disable_irq();\r\n\r\n          /* Read data from DR */\r\n          (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n          hi2c->XferSize--;\r\n          hi2c->XferCount--;\r\n\r\n          /* Wait until BTF flag is set */\r\n          if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BTF, RESET, Timeout, tickstart) != HAL_OK) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n\r\n          /* Generate Stop */\r\n          hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n\r\n          /* Read data from DR */\r\n          (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n          hi2c->XferSize--;\r\n          hi2c->XferCount--;\r\n\r\n          /* Re-enable IRQs */\r\n          __enable_irq();\r\n\r\n          /* Read data from DR */\r\n          (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n          hi2c->XferSize--;\r\n          hi2c->XferCount--;\r\n        }\r\n      } else {\r\n        /* Wait until RXNE flag is set */\r\n        if (I2C_WaitOnRXNEFlagUntilTimeout(hi2c, Timeout, tickstart) != HAL_OK) {\r\n          if (hi2c->ErrorCode == HAL_I2C_ERROR_TIMEOUT) {\r\n            return HAL_TIMEOUT;\r\n          } else {\r\n            return HAL_ERROR;\r\n          }\r\n        }\r\n\r\n        /* Read data from DR */\r\n        (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n        hi2c->XferSize--;\r\n        hi2c->XferCount--;\r\n\r\n        if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == SET) {\r\n          /* Read data from DR */\r\n          (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n          hi2c->XferSize--;\r\n          hi2c->XferCount--;\r\n        }\r\n      }\r\n    }\r\n\r\n    hi2c->State = HAL_I2C_STATE_READY;\r\n    hi2c->Mode  = HAL_I2C_MODE_NONE;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Write an amount of data in non-blocking mode with Interrupt to a specific memory address\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  MemAddress Internal memory address\r\n * @param  MemAddSize Size of internal memory address\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size) {\r\n  __IO uint32_t count = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_I2C_MEMADD_SIZE(MemAddSize));\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    /* Wait until BUSY flag is reset */\r\n    count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U);\r\n    do {\r\n      if (count-- == 0U) {\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    } while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET);\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_TX;\r\n    hi2c->Mode      = HAL_I2C_MODE_MEM;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferSize    = Size;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n    hi2c->Devaddress  = DevAddress;\r\n    hi2c->Memaddress  = MemAddress;\r\n    hi2c->MemaddSize  = MemAddSize;\r\n    hi2c->EventCount  = 0U;\r\n\r\n    /* Generate Start */\r\n    hi2c->Instance->CR1 |= I2C_CR1_START;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    /* Note : The I2C interrupts must be enabled after unlocking current process\r\n    to avoid the risk of I2C interrupt handle execution before current\r\n    process unlock */\r\n\r\n    /* Enable EVT, BUF and ERR interrupt */\r\n    __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Read an amount of data in non-blocking mode with Interrupt from a specific memory address\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  MemAddress Internal memory address\r\n * @param  MemAddSize Size of internal memory address\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size) {\r\n  __IO uint32_t count = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_I2C_MEMADD_SIZE(MemAddSize));\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    /* Wait until BUSY flag is reset */\r\n    count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U);\r\n    do {\r\n      if (count-- == 0U) {\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    } while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET);\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_RX;\r\n    hi2c->Mode      = HAL_I2C_MODE_MEM;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferSize    = Size;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n    hi2c->Devaddress  = DevAddress;\r\n    hi2c->Memaddress  = MemAddress;\r\n    hi2c->MemaddSize  = MemAddSize;\r\n    hi2c->EventCount  = 0U;\r\n\r\n    /* Enable Acknowledge */\r\n    hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n    /* Generate Start */\r\n    hi2c->Instance->CR1 |= I2C_CR1_START;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    if (hi2c->XferSize > 0U) {\r\n      /* Note : The I2C interrupts must be enabled after unlocking current process\r\n      to avoid the risk of I2C interrupt handle execution before current\r\n      process unlock */\r\n\r\n      /* Enable EVT, BUF and ERR interrupt */\r\n      __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n    }\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Write an amount of data in non-blocking mode with DMA to a specific memory address\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  MemAddress Internal memory address\r\n * @param  MemAddSize Size of internal memory address\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be sent\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size) {\r\n  __IO uint32_t count = 0U;\r\n\r\n  uint32_t tickstart = 0x00U;\r\n\r\n  /* Init tickstart for timeout management*/\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_I2C_MEMADD_SIZE(MemAddSize));\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    /* Wait until BUSY flag is reset */\r\n    count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U);\r\n    do {\r\n      if (count-- == 0U) {\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    } while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET);\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_TX;\r\n    hi2c->Mode      = HAL_I2C_MODE_MEM;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferSize    = Size;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n\r\n    if (hi2c->XferSize > 0U) {\r\n      /* Set the I2C DMA transfer complete callback */\r\n      hi2c->hdmatx->XferCpltCallback = I2C_DMAXferCplt;\r\n\r\n      /* Set the DMA error callback */\r\n      hi2c->hdmatx->XferErrorCallback = I2C_DMAError;\r\n\r\n      /* Set the unused DMA callbacks to NULL */\r\n      hi2c->hdmatx->XferHalfCpltCallback = NULL;\r\n      hi2c->hdmatx->XferAbortCallback    = NULL;\r\n\r\n      /* Enable the DMA channel */\r\n      HAL_DMA_Start_IT(hi2c->hdmatx, (uint32_t)hi2c->pBuffPtr, (uint32_t)&hi2c->Instance->DR, hi2c->XferSize);\r\n\r\n      /* Send Slave Address and Memory Address */\r\n      if (I2C_RequestMemoryWrite(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) != HAL_OK) {\r\n        if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n          /* Process Unlocked */\r\n          __HAL_UNLOCK(hi2c);\r\n          return HAL_ERROR;\r\n        } else {\r\n          /* Process Unlocked */\r\n          __HAL_UNLOCK(hi2c);\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n\r\n      /* Clear ADDR flag */\r\n      __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(hi2c);\r\n\r\n      /* Note : The I2C interrupts must be enabled after unlocking current process\r\n      to avoid the risk of I2C interrupt handle execution before current\r\n      process unlock */\r\n      /* Enable ERR interrupt */\r\n      __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_ERR);\r\n\r\n      /* Enable DMA Request */\r\n      hi2c->Instance->CR2 |= I2C_CR2_DMAEN;\r\n    }\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Reads an amount of data in non-blocking mode with DMA from a specific memory address.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  MemAddress Internal memory address\r\n * @param  MemAddSize Size of internal memory address\r\n * @param  pData Pointer to data buffer\r\n * @param  Size Amount of data to be read\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size) {\r\n  uint32_t      tickstart = 0x00U;\r\n  __IO uint32_t count     = 0U;\r\n\r\n  /* Init tickstart for timeout management*/\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_I2C_MEMADD_SIZE(MemAddSize));\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    /* Wait until BUSY flag is reset */\r\n    count = I2C_TIMEOUT_BUSY_FLAG * (SystemCoreClock / 25U / 1000U);\r\n    do {\r\n      if (count-- == 0U) {\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    } while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BUSY) != RESET);\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State     = HAL_I2C_STATE_BUSY_RX;\r\n    hi2c->Mode      = HAL_I2C_MODE_MEM;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Prepare transfer parameters */\r\n    hi2c->pBuffPtr    = pData;\r\n    hi2c->XferCount   = Size;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n    hi2c->XferSize    = hi2c->XferCount;\r\n\r\n    if (hi2c->XferSize > 0U) {\r\n      /* Set the I2C DMA transfer complete callback */\r\n      hi2c->hdmarx->XferCpltCallback = I2C_DMAXferCplt;\r\n\r\n      /* Set the DMA error callback */\r\n      hi2c->hdmarx->XferErrorCallback = I2C_DMAError;\r\n\r\n      /* Set the unused DMA callbacks to NULL */\r\n      hi2c->hdmarx->XferAbortCallback = NULL;\r\n\r\n      /* Enable the DMA channel */\r\n      HAL_DMA_Start_IT(hi2c->hdmarx, (uint32_t)&hi2c->Instance->DR, (uint32_t)hi2c->pBuffPtr, hi2c->XferSize);\r\n\r\n      /* Send Slave Address and Memory Address */\r\n      if (I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) != HAL_OK) {\r\n        if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n          /* Process Unlocked */\r\n          __HAL_UNLOCK(hi2c);\r\n          return HAL_ERROR;\r\n        } else {\r\n          /* Process Unlocked */\r\n          __HAL_UNLOCK(hi2c);\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n\r\n      if (Size == 1U) {\r\n        /* Disable Acknowledge */\r\n        hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n      } else {\r\n        /* Enable Last DMA bit */\r\n        hi2c->Instance->CR2 |= I2C_CR2_LAST;\r\n      }\r\n\r\n      /* Clear ADDR flag */\r\n      __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(hi2c);\r\n\r\n      /* Note : The I2C interrupts must be enabled after unlocking current process\r\n                to avoid the risk of I2C interrupt handle execution before current\r\n                process unlock */\r\n      /* Enable ERR interrupt */\r\n      __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_ERR);\r\n\r\n      /* Enable DMA Request */\r\n      hi2c->Instance->CR2 |= I2C_CR2_DMAEN;\r\n    } else {\r\n      /* Send Slave Address and Memory Address */\r\n      if (I2C_RequestMemoryRead(hi2c, DevAddress, MemAddress, MemAddSize, I2C_TIMEOUT_FLAG, tickstart) != HAL_OK) {\r\n        if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n          /* Process Unlocked */\r\n          __HAL_UNLOCK(hi2c);\r\n          return HAL_ERROR;\r\n        } else {\r\n          /* Process Unlocked */\r\n          __HAL_UNLOCK(hi2c);\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n\r\n      /* Clear ADDR flag */\r\n      __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n      /* Generate Stop */\r\n      hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n\r\n      hi2c->State = HAL_I2C_STATE_READY;\r\n\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(hi2c);\r\n    }\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Checks if target device is ready for communication.\r\n * @note   This function is used with Memory devices\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  Trials Number of trials\r\n * @param  Timeout Timeout duration\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout) {\r\n  uint32_t tickstart = 0U, tmp1 = 0U, tmp2 = 0U, tmp3 = 0U, I2C_Trials = 1U;\r\n\r\n  /* Get tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_READY) {\r\n    /* Wait until BUSY flag is reset */\r\n    if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK) {\r\n      return HAL_BUSY;\r\n    }\r\n\r\n    /* Process Locked */\r\n    __HAL_LOCK(hi2c);\r\n\r\n    /* Check if the I2C is already enabled */\r\n    if ((hi2c->Instance->CR1 & I2C_CR1_PE) != I2C_CR1_PE) {\r\n      /* Enable I2C peripheral */\r\n      __HAL_I2C_ENABLE(hi2c);\r\n    }\r\n\r\n    /* Disable Pos */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n    hi2c->State       = HAL_I2C_STATE_BUSY;\r\n    hi2c->ErrorCode   = HAL_I2C_ERROR_NONE;\r\n    hi2c->XferOptions = I2C_NO_OPTION_FRAME;\r\n\r\n    do {\r\n      /* Generate Start */\r\n      hi2c->Instance->CR1 |= I2C_CR1_START;\r\n\r\n      /* Wait until SB flag is set */\r\n      if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout, tickstart) != HAL_OK) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n\r\n      /* Send slave address */\r\n      hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(DevAddress);\r\n\r\n      /* Wait until ADDR or AF flag are set */\r\n      /* Get tick */\r\n      tickstart = HAL_GetTick();\r\n\r\n      tmp1 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_ADDR);\r\n      tmp2 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF);\r\n      tmp3 = hi2c->State;\r\n      while ((tmp1 == RESET) && (tmp2 == RESET) && (tmp3 != HAL_I2C_STATE_TIMEOUT)) {\r\n        if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {\r\n          hi2c->State = HAL_I2C_STATE_TIMEOUT;\r\n        }\r\n        tmp1 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_ADDR);\r\n        tmp2 = __HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF);\r\n        tmp3 = hi2c->State;\r\n      }\r\n\r\n      hi2c->State = HAL_I2C_STATE_READY;\r\n\r\n      /* Check if the ADDR flag has been set */\r\n      if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_ADDR) == SET) {\r\n        /* Generate Stop */\r\n        hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n\r\n        /* Clear ADDR Flag */\r\n        __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n        /* Wait until BUSY flag is reset */\r\n        if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n\r\n        hi2c->State = HAL_I2C_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_OK;\r\n      } else {\r\n        /* Generate Stop */\r\n        hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n\r\n        /* Clear AF Flag */\r\n        __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);\r\n\r\n        /* Wait until BUSY flag is reset */\r\n        if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG, tickstart) != HAL_OK) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    } while (I2C_Trials++ < Trials);\r\n\r\n    hi2c->State = HAL_I2C_STATE_READY;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    return HAL_ERROR;\r\n  } else {\r\n    return HAL_BUSY;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  This function handles I2C event interrupt request.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @retval None\r\n */\r\nvoid HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c) {\r\n  uint32_t sr2itflags = READ_REG(hi2c->Instance->SR2);\r\n  uint32_t sr1itflags = READ_REG(hi2c->Instance->SR1);\r\n  uint32_t itsources  = READ_REG(hi2c->Instance->CR2);\r\n\r\n  uint32_t CurrentMode = hi2c->Mode;\r\n\r\n  /* Master or Memory mode selected */\r\n  if ((CurrentMode == HAL_I2C_MODE_MASTER) || (CurrentMode == HAL_I2C_MODE_MEM)) {\r\n    /* SB Set ----------------------------------------------------------------*/\r\n    if (((sr1itflags & I2C_FLAG_SB) != RESET) && ((itsources & I2C_IT_EVT) != RESET)) {\r\n      I2C_Master_SB(hi2c);\r\n    }\r\n    /* ADDR Set --------------------------------------------------------------*/\r\n    else if (((sr1itflags & I2C_FLAG_ADDR) != RESET) && ((itsources & I2C_IT_EVT) != RESET)) {\r\n      I2C_Master_ADDR(hi2c);\r\n    }\r\n\r\n    /* I2C in mode Transmitter -----------------------------------------------*/\r\n    if ((sr2itflags & I2C_FLAG_TRA) != RESET) {\r\n      /* TXE set and BTF reset -----------------------------------------------*/\r\n      if (((sr1itflags & I2C_FLAG_TXE) != RESET) && ((itsources & I2C_IT_BUF) != RESET) && ((sr1itflags & I2C_FLAG_BTF) == RESET)) {\r\n        I2C_MasterTransmit_TXE(hi2c);\r\n      }\r\n      /* BTF set -------------------------------------------------------------*/\r\n      else if (((sr1itflags & I2C_FLAG_BTF) != RESET) && ((itsources & I2C_IT_EVT) != RESET)) {\r\n        I2C_MasterTransmit_BTF(hi2c);\r\n      }\r\n    }\r\n    /* I2C in mode Receiver --------------------------------------------------*/\r\n    else {\r\n      /* RXNE set and BTF reset -----------------------------------------------*/\r\n      if (((sr1itflags & I2C_FLAG_RXNE) != RESET) && ((itsources & I2C_IT_BUF) != RESET) && ((sr1itflags & I2C_FLAG_BTF) == RESET)) {\r\n        I2C_MasterReceive_RXNE(hi2c);\r\n      }\r\n      /* BTF set -------------------------------------------------------------*/\r\n      else if (((sr1itflags & I2C_FLAG_BTF) != RESET) && ((itsources & I2C_IT_EVT) != RESET)) {\r\n        I2C_MasterReceive_BTF(hi2c);\r\n      }\r\n    }\r\n  }\r\n  /* Slave mode selected */\r\n#if 0\r\n  else\r\n  {\r\n    /* ADDR set --------------------------------------------------------------*/\r\n    if(((sr1itflags & I2C_FLAG_ADDR) != RESET) && ((itsources & I2C_IT_EVT) != RESET))\r\n    {\r\n      I2C_Slave_ADDR(hi2c);\r\n    }\r\n    /* STOPF set --------------------------------------------------------------*/\r\n    else if(((sr1itflags & I2C_FLAG_STOPF) != RESET) && ((itsources & I2C_IT_EVT) != RESET))\r\n    {\r\n      I2C_Slave_STOPF(hi2c);\r\n    }\r\n    /* I2C in mode Transmitter -----------------------------------------------*/\r\n    else if((sr2itflags & I2C_FLAG_TRA) != RESET)\r\n    {\r\n      /* TXE set and BTF reset -----------------------------------------------*/\r\n      if(((sr1itflags & I2C_FLAG_TXE) != RESET) && ((itsources & I2C_IT_BUF) != RESET) && ((sr1itflags & I2C_FLAG_BTF) == RESET))\r\n      {\r\n        I2C_SlaveTransmit_TXE(hi2c);\r\n      }\r\n      /* BTF set -------------------------------------------------------------*/\r\n      else if(((sr1itflags & I2C_FLAG_BTF) != RESET) && ((itsources & I2C_IT_EVT) != RESET))\r\n      {\r\n        I2C_SlaveTransmit_BTF(hi2c);\r\n      }\r\n    }\r\n    /* I2C in mode Receiver --------------------------------------------------*/\r\n    else\r\n    {\r\n      /* RXNE set and BTF reset ----------------------------------------------*/\r\n      if(((sr1itflags & I2C_FLAG_RXNE) != RESET) && ((itsources & I2C_IT_BUF) != RESET) && ((sr1itflags & I2C_FLAG_BTF) == RESET))\r\n      {\r\n        I2C_SlaveReceive_RXNE(hi2c);\r\n      }\r\n      /* BTF set -------------------------------------------------------------*/\r\n      else if(((sr1itflags & I2C_FLAG_BTF) != RESET) && ((itsources & I2C_IT_EVT) != RESET))\r\n      {\r\n        I2C_SlaveReceive_BTF(hi2c);\r\n      }\r\n    }\r\n  }\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief  This function handles I2C error interrupt request.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @retval None\r\n */\r\nvoid HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c) {\r\n  uint32_t tmp1 = 0U, tmp2 = 0U, tmp3 = 0U, tmp4 = 0U;\r\n  uint32_t sr1itflags = READ_REG(hi2c->Instance->SR1);\r\n  uint32_t itsources  = READ_REG(hi2c->Instance->CR2);\r\n\r\n  /* I2C Bus error interrupt occurred ----------------------------------------*/\r\n  if (((sr1itflags & I2C_FLAG_BERR) != RESET) && ((itsources & I2C_IT_ERR) != RESET)) {\r\n    hi2c->ErrorCode |= HAL_I2C_ERROR_BERR;\r\n\r\n    /* Clear BERR flag */\r\n    __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_BERR);\r\n\r\n    /* Workaround: Start cannot be generated after a misplaced Stop */\r\n    SET_BIT(hi2c->Instance->CR1, I2C_CR1_SWRST);\r\n  }\r\n\r\n  /* I2C Arbitration Loss error interrupt occurred ---------------------------*/\r\n  if (((sr1itflags & I2C_FLAG_ARLO) != RESET) && ((itsources & I2C_IT_ERR) != RESET)) {\r\n    hi2c->ErrorCode |= HAL_I2C_ERROR_ARLO;\r\n\r\n    /* Clear ARLO flag */\r\n    __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ARLO);\r\n  }\r\n\r\n  /* I2C Acknowledge failure error interrupt occurred ------------------------*/\r\n  if (((sr1itflags & I2C_FLAG_AF) != RESET) && ((itsources & I2C_IT_ERR) != RESET)) {\r\n    tmp1 = hi2c->Mode;\r\n    tmp2 = hi2c->XferCount;\r\n    tmp3 = hi2c->State;\r\n    tmp4 = hi2c->PreviousState;\r\n    if ((tmp1 == HAL_I2C_MODE_SLAVE) && (tmp2 == 0U) &&\r\n        ((tmp3 == HAL_I2C_STATE_BUSY_TX) || (tmp3 == HAL_I2C_STATE_BUSY_TX_LISTEN) || ((tmp3 == HAL_I2C_STATE_LISTEN) && (tmp4 == I2C_STATE_SLAVE_BUSY_TX)))) {\r\n    } else {\r\n      hi2c->ErrorCode |= HAL_I2C_ERROR_AF;\r\n\r\n      /* Do not generate a STOP in case of Slave receive non acknowledge during transfer (mean not at the end of transfer) */\r\n      if (hi2c->Mode == HAL_I2C_MODE_MASTER) {\r\n        /* Generate Stop */\r\n        SET_BIT(hi2c->Instance->CR1, I2C_CR1_STOP);\r\n      }\r\n\r\n      /* Clear AF flag */\r\n      __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);\r\n    }\r\n  }\r\n\r\n  /* I2C Over-Run/Under-Run interrupt occurred -------------------------------*/\r\n  if (((sr1itflags & I2C_FLAG_OVR) != RESET) && ((itsources & I2C_IT_ERR) != RESET)) {\r\n    hi2c->ErrorCode |= HAL_I2C_ERROR_OVR;\r\n    /* Clear OVR flag */\r\n    __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_OVR);\r\n  }\r\n\r\n  /* Call the Error Callback in case of Error detected -----------------------*/\r\n  if (hi2c->ErrorCode != HAL_I2C_ERROR_NONE) {\r\n    I2C_ITError(hi2c);\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Master Tx Transfer completed callback.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @retval None\r\n */\r\n__weak void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hi2c);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_I2C_MasterTxCpltCallback can be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Master Rx Transfer completed callback.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @retval None\r\n */\r\n__weak void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hi2c);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_I2C_MasterRxCpltCallback can be implemented in the user file\r\n   */\r\n}\r\n\r\n/** @brief  Slave Tx Transfer completed callback.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @retval None\r\n */\r\n__weak void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hi2c);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_I2C_SlaveTxCpltCallback can be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Slave Rx Transfer completed callback.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @retval None\r\n */\r\n__weak void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hi2c);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_I2C_SlaveRxCpltCallback can be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Slave Address Match callback.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  TransferDirection Master request Transfer Direction (Write/Read), value of @ref I2C_XferOptions_definition\r\n * @param  AddrMatchCode Address Match Code\r\n * @retval None\r\n */\r\n__weak void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hi2c);\r\n  UNUSED(TransferDirection);\r\n  UNUSED(AddrMatchCode);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_I2C_AddrCallback can be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Listen Complete callback.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @retval None\r\n */\r\n__weak void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hi2c);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n          the HAL_I2C_ListenCpltCallback can be implemented in the user file\r\n */\r\n}\r\n\r\n/**\r\n * @brief  Memory Tx Transfer completed callback.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @retval None\r\n */\r\n__weak void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hi2c);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_I2C_MemTxCpltCallback can be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Memory Rx Transfer completed callback.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @retval None\r\n */\r\n__weak void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hi2c);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_I2C_MemRxCpltCallback can be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  I2C error callback.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @retval None\r\n */\r\n__weak void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hi2c);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_I2C_ErrorCallback can be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  I2C abort callback.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @retval None\r\n */\r\n__weak void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(hi2c);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_I2C_AbortCpltCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup I2C_Exported_Functions_Group3 Peripheral State, Mode and Error functions\r\n  *  @brief   Peripheral State and Errors functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n            ##### Peripheral State, Mode and Error functions #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection permits to get in run-time the status of the peripheral\r\n    and the data flow.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Return the I2C handle state.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @retval HAL state\r\n */\r\nHAL_I2C_StateTypeDef HAL_I2C_GetState(I2C_HandleTypeDef *hi2c) {\r\n  /* Return I2C handle state */\r\n  return hi2c->State;\r\n}\r\n\r\n/**\r\n * @brief  Return the I2C Master, Slave, Memory or no mode.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @retval HAL mode\r\n */\r\nHAL_I2C_ModeTypeDef HAL_I2C_GetMode(I2C_HandleTypeDef *hi2c) { return hi2c->Mode; }\r\n\r\n/**\r\n * @brief  Return the I2C error code\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *              the configuration information for the specified I2C.\r\n * @retval I2C Error Code\r\n */\r\nuint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c) { return hi2c->ErrorCode; }\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @brief  Handle TXE flag for Master\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_MasterTransmit_TXE(I2C_HandleTypeDef *hi2c) {\r\n  /* Declaration of temporary variables to prevent undefined behavior of volatile usage */\r\n  uint32_t CurrentState       = hi2c->State;\r\n  uint32_t CurrentMode        = hi2c->Mode;\r\n  uint32_t CurrentXferOptions = hi2c->XferOptions;\r\n\r\n  if ((hi2c->XferSize == 0U) && (CurrentState == HAL_I2C_STATE_BUSY_TX)) {\r\n    /* Call TxCpltCallback() directly if no stop mode is set */\r\n    if ((CurrentXferOptions != I2C_FIRST_AND_LAST_FRAME) && (CurrentXferOptions != I2C_LAST_FRAME) && (CurrentXferOptions != I2C_NO_OPTION_FRAME)) {\r\n      __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n\r\n      hi2c->PreviousState = I2C_STATE_MASTER_BUSY_TX;\r\n      hi2c->Mode          = HAL_I2C_MODE_NONE;\r\n      hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n      HAL_I2C_MasterTxCpltCallback(hi2c);\r\n    } else /* Generate Stop condition then Call TxCpltCallback() */\r\n    {\r\n      /* Disable EVT, BUF and ERR interrupt */\r\n      __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n\r\n      /* Generate Stop */\r\n      hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n\r\n      hi2c->PreviousState = I2C_STATE_NONE;\r\n      hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n      if (hi2c->Mode == HAL_I2C_MODE_MEM) {\r\n        hi2c->Mode = HAL_I2C_MODE_NONE;\r\n        HAL_I2C_MemTxCpltCallback(hi2c);\r\n      } else {\r\n        hi2c->Mode = HAL_I2C_MODE_NONE;\r\n        HAL_I2C_MasterTxCpltCallback(hi2c);\r\n      }\r\n    }\r\n  } else if ((CurrentState == HAL_I2C_STATE_BUSY_TX) || ((CurrentMode == HAL_I2C_MODE_MEM) && (CurrentState == HAL_I2C_STATE_BUSY_RX))) {\r\n    if (hi2c->XferCount == 0U) {\r\n      /* Disable BUF interrupt */\r\n      __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_BUF);\r\n    } else {\r\n      if (hi2c->Mode == HAL_I2C_MODE_MEM) {\r\n        if (hi2c->EventCount == 0) {\r\n          /* If Memory address size is 8Bit */\r\n          if (hi2c->MemaddSize == I2C_MEMADD_SIZE_8BIT) {\r\n            /* Send Memory Address */\r\n            hi2c->Instance->DR = I2C_MEM_ADD_LSB(hi2c->Memaddress);\r\n\r\n            hi2c->EventCount += 2;\r\n          }\r\n          /* If Memory address size is 16Bit */\r\n          else {\r\n            /* Send MSB of Memory Address */\r\n            hi2c->Instance->DR = I2C_MEM_ADD_MSB(hi2c->Memaddress);\r\n\r\n            hi2c->EventCount++;\r\n          }\r\n        } else if (hi2c->EventCount == 1) {\r\n          /* Send LSB of Memory Address */\r\n          hi2c->Instance->DR = I2C_MEM_ADD_LSB(hi2c->Memaddress);\r\n\r\n          hi2c->EventCount++;\r\n        } else if (hi2c->EventCount == 2) {\r\n          if (hi2c->State == HAL_I2C_STATE_BUSY_RX) {\r\n            /* Generate Restart */\r\n            hi2c->Instance->CR1 |= I2C_CR1_START;\r\n          } else if (hi2c->State == HAL_I2C_STATE_BUSY_TX) {\r\n            /* Write data to DR */\r\n            hi2c->Instance->DR = (*hi2c->pBuffPtr++);\r\n            hi2c->XferCount--;\r\n          }\r\n        }\r\n      } else {\r\n        /* Write data to DR */\r\n        hi2c->Instance->DR = (*hi2c->pBuffPtr++);\r\n        hi2c->XferCount--;\r\n      }\r\n    }\r\n  }\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Handle BTF flag for Master transmitter\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_MasterTransmit_BTF(I2C_HandleTypeDef *hi2c) {\r\n  /* Declaration of temporary variables to prevent undefined behavior of volatile usage */\r\n  uint32_t CurrentXferOptions = hi2c->XferOptions;\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_BUSY_TX) {\r\n    if (hi2c->XferCount != 0U) {\r\n      /* Write data to DR */\r\n      hi2c->Instance->DR = (*hi2c->pBuffPtr++);\r\n      hi2c->XferCount--;\r\n    } else {\r\n      /* Call TxCpltCallback() directly if no stop mode is set */\r\n      if ((CurrentXferOptions != I2C_FIRST_AND_LAST_FRAME) && (CurrentXferOptions != I2C_LAST_FRAME) && (CurrentXferOptions != I2C_NO_OPTION_FRAME)) {\r\n        __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n\r\n        hi2c->PreviousState = I2C_STATE_MASTER_BUSY_TX;\r\n        hi2c->Mode          = HAL_I2C_MODE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        HAL_I2C_MasterTxCpltCallback(hi2c);\r\n      } else /* Generate Stop condition then Call TxCpltCallback() */\r\n      {\r\n        /* Disable EVT, BUF and ERR interrupt */\r\n        __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n\r\n        /* Generate Stop */\r\n        hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        if (hi2c->Mode == HAL_I2C_MODE_MEM) {\r\n          hi2c->Mode = HAL_I2C_MODE_NONE;\r\n\r\n          HAL_I2C_MemTxCpltCallback(hi2c);\r\n        } else {\r\n          hi2c->Mode = HAL_I2C_MODE_NONE;\r\n\r\n          HAL_I2C_MasterTxCpltCallback(hi2c);\r\n        }\r\n      }\r\n    }\r\n  }\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Handle RXNE flag for Master\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_MasterReceive_RXNE(I2C_HandleTypeDef *hi2c) {\r\n  if (hi2c->State == HAL_I2C_STATE_BUSY_RX) {\r\n    uint32_t tmp = 0U;\r\n\r\n    tmp = hi2c->XferCount;\r\n    if (tmp > 3U) {\r\n      /* Read data from DR */\r\n      (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n      hi2c->XferCount--;\r\n    } else if ((tmp == 2U) || (tmp == 3U)) {\r\n      if (hi2c->XferOptions != I2C_NEXT_FRAME) {\r\n        /* Disable Acknowledge */\r\n        hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n        /* Enable Pos */\r\n        hi2c->Instance->CR1 |= I2C_CR1_POS;\r\n      } else {\r\n        /* Enable Acknowledge */\r\n        hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n      }\r\n\r\n      /* Disable BUF interrupt */\r\n      __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_BUF);\r\n    } else {\r\n      if (hi2c->XferOptions != I2C_NEXT_FRAME) {\r\n        /* Disable Acknowledge */\r\n        hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n      } else {\r\n        /* Enable Acknowledge */\r\n        hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n      }\r\n\r\n      /* Disable EVT, BUF and ERR interrupt */\r\n      __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_BUF | I2C_IT_ERR);\r\n\r\n      /* Read data from DR */\r\n      (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n      hi2c->XferCount--;\r\n\r\n      hi2c->State         = HAL_I2C_STATE_READY;\r\n      hi2c->PreviousState = I2C_STATE_NONE;\r\n\r\n      if (hi2c->Mode == HAL_I2C_MODE_MEM) {\r\n        hi2c->Mode = HAL_I2C_MODE_NONE;\r\n        HAL_I2C_MemRxCpltCallback(hi2c);\r\n      } else {\r\n        hi2c->Mode = HAL_I2C_MODE_NONE;\r\n        HAL_I2C_MasterRxCpltCallback(hi2c);\r\n      }\r\n    }\r\n  }\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Handle BTF flag for Master receiver\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_MasterReceive_BTF(I2C_HandleTypeDef *hi2c) {\r\n  /* Declaration of temporary variables to prevent undefined behavior of volatile usage */\r\n  uint32_t CurrentXferOptions = hi2c->XferOptions;\r\n\r\n  if (hi2c->XferCount == 3U) {\r\n    if ((CurrentXferOptions == I2C_FIRST_AND_LAST_FRAME) || (CurrentXferOptions == I2C_LAST_FRAME) || (CurrentXferOptions == I2C_NO_OPTION_FRAME)) {\r\n      /* Disable Acknowledge */\r\n      hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n    }\r\n\r\n    /* Read data from DR */\r\n    (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n    hi2c->XferCount--;\r\n  } else if (hi2c->XferCount == 2U) {\r\n    /* Prepare next transfer or stop current transfer */\r\n    if ((CurrentXferOptions != I2C_FIRST_AND_LAST_FRAME) && (CurrentXferOptions != I2C_LAST_FRAME) && (CurrentXferOptions != I2C_NO_OPTION_FRAME)) {\r\n      if (CurrentXferOptions != I2C_NEXT_FRAME) {\r\n        /* Disable Acknowledge */\r\n        hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n      } else {\r\n        /* Enable Acknowledge */\r\n        hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n      }\r\n\r\n      /* Disable EVT and ERR interrupt */\r\n      __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR);\r\n    } else {\r\n      /* Disable EVT and ERR interrupt */\r\n      __HAL_I2C_DISABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR);\r\n\r\n      /* Generate Stop */\r\n      hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n    }\r\n\r\n    /* Read data from DR */\r\n    (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n    hi2c->XferCount--;\r\n\r\n    /* Read data from DR */\r\n    (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n    hi2c->XferCount--;\r\n\r\n    hi2c->State         = HAL_I2C_STATE_READY;\r\n    hi2c->PreviousState = I2C_STATE_NONE;\r\n\r\n    if (hi2c->Mode == HAL_I2C_MODE_MEM) {\r\n      hi2c->Mode = HAL_I2C_MODE_NONE;\r\n\r\n      HAL_I2C_MemRxCpltCallback(hi2c);\r\n    } else {\r\n      hi2c->Mode = HAL_I2C_MODE_NONE;\r\n\r\n      HAL_I2C_MasterRxCpltCallback(hi2c);\r\n    }\r\n  } else {\r\n    /* Read data from DR */\r\n    (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n    hi2c->XferCount--;\r\n  }\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Handle SB flag for Master\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_Master_SB(I2C_HandleTypeDef *hi2c) {\r\n  if (hi2c->Mode == HAL_I2C_MODE_MEM) {\r\n    if (hi2c->EventCount == 0U) {\r\n      /* Send slave address */\r\n      hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(hi2c->Devaddress);\r\n    } else {\r\n      hi2c->Instance->DR = I2C_7BIT_ADD_READ(hi2c->Devaddress);\r\n    }\r\n  } else {\r\n    if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_7BIT) {\r\n      /* Send slave 7 Bits address */\r\n      if (hi2c->State == HAL_I2C_STATE_BUSY_TX) {\r\n        hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(hi2c->Devaddress);\r\n      } else {\r\n        hi2c->Instance->DR = I2C_7BIT_ADD_READ(hi2c->Devaddress);\r\n      }\r\n    } else {\r\n      if (hi2c->EventCount == 0U) {\r\n        /* Send header of slave address */\r\n        hi2c->Instance->DR = I2C_10BIT_HEADER_WRITE(hi2c->Devaddress);\r\n      } else if (hi2c->EventCount == 1U) {\r\n        /* Send header of slave address */\r\n        hi2c->Instance->DR = I2C_10BIT_HEADER_READ(hi2c->Devaddress);\r\n      }\r\n    }\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Handle ADDR flag for Master\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_Master_ADDR(I2C_HandleTypeDef *hi2c) {\r\n  /* Declaration of temporary variable to prevent undefined behavior of volatile usage */\r\n  uint32_t CurrentMode        = hi2c->Mode;\r\n  uint32_t CurrentXferOptions = hi2c->XferOptions;\r\n  uint32_t Prev_State         = hi2c->PreviousState;\r\n\r\n  if (hi2c->State == HAL_I2C_STATE_BUSY_RX) {\r\n    if ((hi2c->EventCount == 0U) && (CurrentMode == HAL_I2C_MODE_MEM)) {\r\n      /* Clear ADDR flag */\r\n      __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n    } else {\r\n      if (hi2c->XferCount == 0U) {\r\n        /* Clear ADDR flag */\r\n        __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n        /* Generate Stop */\r\n        hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n      } else if (hi2c->XferCount == 1U) {\r\n        if (CurrentXferOptions == I2C_NO_OPTION_FRAME) {\r\n          /* Disable Acknowledge */\r\n          hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n          if ((hi2c->Instance->CR2 & I2C_CR2_DMAEN) == I2C_CR2_DMAEN) {\r\n            /* Disable Acknowledge */\r\n            hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n            /* Clear ADDR flag */\r\n            __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n          } else {\r\n            /* Clear ADDR flag */\r\n            __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n            /* Generate Stop */\r\n            hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n          }\r\n        }\r\n        /* Prepare next transfer or stop current transfer */\r\n        else if ((CurrentXferOptions != I2C_FIRST_AND_LAST_FRAME) && (CurrentXferOptions != I2C_LAST_FRAME) && (Prev_State != I2C_STATE_MASTER_BUSY_RX)) {\r\n          if (hi2c->XferOptions != I2C_NEXT_FRAME) {\r\n            /* Disable Acknowledge */\r\n            hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n          } else {\r\n            /* Enable Acknowledge */\r\n            hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n          }\r\n\r\n          /* Clear ADDR flag */\r\n          __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n        } else {\r\n          /* Disable Acknowledge */\r\n          hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n          /* Clear ADDR flag */\r\n          __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n          /* Generate Stop */\r\n          hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n        }\r\n      } else if (hi2c->XferCount == 2U) {\r\n        if (hi2c->XferOptions != I2C_NEXT_FRAME) {\r\n          /* Enable Pos */\r\n          hi2c->Instance->CR1 |= I2C_CR1_POS;\r\n\r\n          /* Clear ADDR flag */\r\n          __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n          /* Disable Acknowledge */\r\n          hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n        } else {\r\n          /* Enable Acknowledge */\r\n          hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n          /* Clear ADDR flag */\r\n          __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n        }\r\n\r\n        if ((hi2c->Instance->CR2 & I2C_CR2_DMAEN) == I2C_CR2_DMAEN) {\r\n          /* Enable Last DMA bit */\r\n          hi2c->Instance->CR2 |= I2C_CR2_LAST;\r\n        }\r\n      } else {\r\n        /* Enable Acknowledge */\r\n        hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n        if ((hi2c->Instance->CR2 & I2C_CR2_DMAEN) == I2C_CR2_DMAEN) {\r\n          /* Enable Last DMA bit */\r\n          hi2c->Instance->CR2 |= I2C_CR2_LAST;\r\n        }\r\n\r\n        /* Clear ADDR flag */\r\n        __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n      }\r\n\r\n      /* Reset Event counter  */\r\n      hi2c->EventCount = 0U;\r\n    }\r\n  } else {\r\n    /* Clear ADDR flag */\r\n    __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  I2C interrupts error process\r\n * @param  hi2c I2C handle.\r\n * @retval None\r\n */\r\nstatic void I2C_ITError(I2C_HandleTypeDef *hi2c) {\r\n  /* Declaration of temporary variable to prevent undefined behavior of volatile usage */\r\n  uint32_t CurrentState = hi2c->State;\r\n\r\n  if ((CurrentState == HAL_I2C_STATE_BUSY_TX_LISTEN) || (CurrentState == HAL_I2C_STATE_BUSY_RX_LISTEN)) {\r\n    /* keep HAL_I2C_STATE_LISTEN */\r\n    hi2c->PreviousState = I2C_STATE_NONE;\r\n    hi2c->State         = HAL_I2C_STATE_LISTEN;\r\n  } else {\r\n    /* If state is an abort treatment on going, don't change state */\r\n    /* This change will be do later */\r\n    if ((hi2c->State != HAL_I2C_STATE_ABORT) && ((hi2c->Instance->CR2 & I2C_CR2_DMAEN) != I2C_CR2_DMAEN)) {\r\n      hi2c->State = HAL_I2C_STATE_READY;\r\n    }\r\n    hi2c->PreviousState = I2C_STATE_NONE;\r\n    hi2c->Mode          = HAL_I2C_MODE_NONE;\r\n  }\r\n\r\n  /* Disable Pos bit in I2C CR1 when error occurred in Master/Mem Receive IT Process */\r\n  hi2c->Instance->CR1 &= ~I2C_CR1_POS;\r\n\r\n  /* Abort DMA transfer */\r\n  if ((hi2c->Instance->CR2 & I2C_CR2_DMAEN) == I2C_CR2_DMAEN) {\r\n    hi2c->Instance->CR2 &= ~I2C_CR2_DMAEN;\r\n\r\n    if (hi2c->hdmatx->State != HAL_DMA_STATE_READY) {\r\n      /* Set the DMA Abort callback :\r\n      will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */\r\n      hi2c->hdmatx->XferAbortCallback = I2C_DMAAbort;\r\n\r\n      if (HAL_DMA_Abort_IT(hi2c->hdmatx) != HAL_OK) {\r\n        /* Disable I2C peripheral to prevent dummy data in buffer */\r\n        __HAL_I2C_DISABLE(hi2c);\r\n\r\n        hi2c->State = HAL_I2C_STATE_READY;\r\n\r\n        /* Call Directly XferAbortCallback function in case of error */\r\n        hi2c->hdmatx->XferAbortCallback(hi2c->hdmatx);\r\n      }\r\n    } else {\r\n      /* Set the DMA Abort callback :\r\n      will lead to call HAL_I2C_ErrorCallback() at end of DMA abort procedure */\r\n      hi2c->hdmarx->XferAbortCallback = I2C_DMAAbort;\r\n\r\n      if (HAL_DMA_Abort_IT(hi2c->hdmarx) != HAL_OK) {\r\n        /* Store Last receive data if any */\r\n        if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == SET) {\r\n          /* Read data from DR */\r\n          (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n        }\r\n\r\n        /* Disable I2C peripheral to prevent dummy data in buffer */\r\n        __HAL_I2C_DISABLE(hi2c);\r\n\r\n        hi2c->State = HAL_I2C_STATE_READY;\r\n\r\n        /* Call Directly hi2c->hdmarx->XferAbortCallback function in case of error */\r\n        hi2c->hdmarx->XferAbortCallback(hi2c->hdmarx);\r\n      }\r\n    }\r\n  } else if (hi2c->State == HAL_I2C_STATE_ABORT) {\r\n    hi2c->State     = HAL_I2C_STATE_READY;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Store Last receive data if any */\r\n    if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == SET) {\r\n      /* Read data from DR */\r\n      (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n    }\r\n\r\n    /* Disable I2C peripheral to prevent dummy data in buffer */\r\n    __HAL_I2C_DISABLE(hi2c);\r\n\r\n    /* Call the corresponding callback to inform upper layer of End of Transfer */\r\n    HAL_I2C_AbortCpltCallback(hi2c);\r\n  } else {\r\n    /* Store Last receive data if any */\r\n    if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == SET) {\r\n      /* Read data from DR */\r\n      (*hi2c->pBuffPtr++) = hi2c->Instance->DR;\r\n    }\r\n\r\n    /* Call user error callback */\r\n    HAL_I2C_ErrorCallback(hi2c);\r\n  }\r\n  /* STOP Flag is not set after a NACK reception */\r\n  /* So may inform upper layer that listen phase is stopped */\r\n  /* during NACK error treatment */\r\n  if ((hi2c->State == HAL_I2C_STATE_LISTEN) && ((hi2c->ErrorCode & HAL_I2C_ERROR_AF) == HAL_I2C_ERROR_AF)) {\r\n    hi2c->XferOptions   = I2C_NO_OPTION_FRAME;\r\n    hi2c->PreviousState = I2C_STATE_NONE;\r\n    hi2c->State         = HAL_I2C_STATE_READY;\r\n    hi2c->Mode          = HAL_I2C_MODE_NONE;\r\n\r\n    /* Call the Listen Complete callback, to inform upper layer of the end of Listen usecase */\r\n    HAL_I2C_ListenCpltCallback(hi2c);\r\n  }\r\n}\r\n\r\n/**\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  Timeout Timeout duration\r\n * @param  Tickstart Tick start value\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_MasterRequestWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Timeout, uint32_t Tickstart) {\r\n  /* Declaration of temporary variable to prevent undefined behavior of volatile usage */\r\n  uint32_t CurrentXferOptions = hi2c->XferOptions;\r\n\r\n  /* Generate Start condition if first transfer */\r\n  if ((CurrentXferOptions == I2C_FIRST_AND_LAST_FRAME) || (CurrentXferOptions == I2C_FIRST_FRAME) || (CurrentXferOptions == I2C_NO_OPTION_FRAME)) {\r\n    /* Generate Start */\r\n    hi2c->Instance->CR1 |= I2C_CR1_START;\r\n  } else if (hi2c->PreviousState == I2C_STATE_MASTER_BUSY_RX) {\r\n    /* Generate ReStart */\r\n    hi2c->Instance->CR1 |= I2C_CR1_START;\r\n  }\r\n\r\n  /* Wait until SB flag is set */\r\n  if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout, Tickstart) != HAL_OK) {\r\n    return HAL_TIMEOUT;\r\n  }\r\n\r\n  if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_7BIT) {\r\n    /* Send slave address */\r\n    hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(DevAddress);\r\n  }\r\n\r\n  /* Wait until ADDR flag is set */\r\n  if (I2C_WaitOnMasterAddressFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, Timeout, Tickstart) != HAL_OK) {\r\n    if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Master sends target device address for read request.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  Timeout Timeout duration\r\n * @param  Tickstart Tick start value\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_MasterRequestRead(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Timeout, uint32_t Tickstart) {\r\n  /* Declaration of temporary variable to prevent undefined behavior of volatile usage */\r\n  uint32_t CurrentXferOptions = hi2c->XferOptions;\r\n\r\n  /* Enable Acknowledge */\r\n  hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n  /* Generate Start condition if first transfer */\r\n  if ((CurrentXferOptions == I2C_FIRST_AND_LAST_FRAME) || (CurrentXferOptions == I2C_FIRST_FRAME) || (CurrentXferOptions == I2C_NO_OPTION_FRAME)) {\r\n    /* Generate Start */\r\n    hi2c->Instance->CR1 |= I2C_CR1_START;\r\n  } else if (hi2c->PreviousState == I2C_STATE_MASTER_BUSY_TX) {\r\n    /* Generate ReStart */\r\n    hi2c->Instance->CR1 |= I2C_CR1_START;\r\n  }\r\n\r\n  /* Wait until SB flag is set */\r\n  if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout, Tickstart) != HAL_OK) {\r\n    return HAL_TIMEOUT;\r\n  }\r\n\r\n  if (hi2c->Init.AddressingMode == I2C_ADDRESSINGMODE_7BIT) {\r\n    /* Send slave address */\r\n    hi2c->Instance->DR = I2C_7BIT_ADD_READ(DevAddress);\r\n  }\r\n\r\n  /* Wait until ADDR flag is set */\r\n  if (I2C_WaitOnMasterAddressFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, Timeout, Tickstart) != HAL_OK) {\r\n    if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Master sends target device address followed by internal memory address for write request.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  MemAddress Internal memory address\r\n * @param  MemAddSize Size of internal memory address\r\n * @param  Timeout Timeout duration\r\n * @param  Tickstart Tick start value\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_RequestMemoryWrite(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, uint32_t Tickstart) {\r\n  /* Generate Start */\r\n  hi2c->Instance->CR1 |= I2C_CR1_START;\r\n\r\n  /* Wait until SB flag is set */\r\n  if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout, Tickstart) != HAL_OK) {\r\n    return HAL_TIMEOUT;\r\n  }\r\n\r\n  /* Send slave address */\r\n  hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(DevAddress);\r\n\r\n  /* Wait until ADDR flag is set */\r\n  if (I2C_WaitOnMasterAddressFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, Timeout, Tickstart) != HAL_OK) {\r\n    if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Clear ADDR flag */\r\n  __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n  /* Wait until TXE flag is set */\r\n  if (I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) {\r\n    if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n      /* Generate Stop */\r\n      hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n      return HAL_ERROR;\r\n    } else {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* If Memory address size is 8Bit */\r\n  if (MemAddSize == I2C_MEMADD_SIZE_8BIT) {\r\n    /* Send Memory Address */\r\n    hi2c->Instance->DR = I2C_MEM_ADD_LSB(MemAddress);\r\n  }\r\n  /* If Memory address size is 16Bit */\r\n  else {\r\n    /* Send MSB of Memory Address */\r\n    hi2c->Instance->DR = I2C_MEM_ADD_MSB(MemAddress);\r\n\r\n    /* Wait until TXE flag is set */\r\n    if (I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) {\r\n      if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n        /* Generate Stop */\r\n        hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n        return HAL_ERROR;\r\n      } else {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n\r\n    /* Send LSB of Memory Address */\r\n    hi2c->Instance->DR = I2C_MEM_ADD_LSB(MemAddress);\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Master sends target device address followed by internal memory address for read request.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @param  DevAddress Target device address: The device 7 bits address value\r\n *         in datasheet must be shifted to the left before calling the interface\r\n * @param  MemAddress Internal memory address\r\n * @param  MemAddSize Size of internal memory address\r\n * @param  Timeout Timeout duration\r\n * @param  Tickstart Tick start value\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_RequestMemoryRead(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout, uint32_t Tickstart) {\r\n  /* Enable Acknowledge */\r\n  hi2c->Instance->CR1 |= I2C_CR1_ACK;\r\n\r\n  /* Generate Start */\r\n  hi2c->Instance->CR1 |= I2C_CR1_START;\r\n\r\n  /* Wait until SB flag is set */\r\n  if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout, Tickstart) != HAL_OK) {\r\n    return HAL_TIMEOUT;\r\n  }\r\n\r\n  /* Send slave address */\r\n  hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(DevAddress);\r\n\r\n  /* Wait until ADDR flag is set */\r\n  if (I2C_WaitOnMasterAddressFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, Timeout, Tickstart) != HAL_OK) {\r\n    if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Clear ADDR flag */\r\n  __HAL_I2C_CLEAR_ADDRFLAG(hi2c);\r\n\r\n  /* Wait until TXE flag is set */\r\n  if (I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) {\r\n    if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n      /* Generate Stop */\r\n      hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n      return HAL_ERROR;\r\n    } else {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* If Memory address size is 8Bit */\r\n  if (MemAddSize == I2C_MEMADD_SIZE_8BIT) {\r\n    /* Send Memory Address */\r\n    hi2c->Instance->DR = I2C_MEM_ADD_LSB(MemAddress);\r\n  }\r\n  /* If Memory address size is 16Bit */\r\n  else {\r\n    /* Send MSB of Memory Address */\r\n    hi2c->Instance->DR = I2C_MEM_ADD_MSB(MemAddress);\r\n\r\n    /* Wait until TXE flag is set */\r\n    if (I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) {\r\n      if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n        /* Generate Stop */\r\n        hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n        return HAL_ERROR;\r\n      } else {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n\r\n    /* Send LSB of Memory Address */\r\n    hi2c->Instance->DR = I2C_MEM_ADD_LSB(MemAddress);\r\n  }\r\n\r\n  /* Wait until TXE flag is set */\r\n  if (I2C_WaitOnTXEFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) {\r\n    if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n      /* Generate Stop */\r\n      hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n      return HAL_ERROR;\r\n    } else {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Generate Restart */\r\n  hi2c->Instance->CR1 |= I2C_CR1_START;\r\n\r\n  /* Wait until SB flag is set */\r\n  if (I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_SB, RESET, Timeout, Tickstart) != HAL_OK) {\r\n    return HAL_TIMEOUT;\r\n  }\r\n\r\n  /* Send slave address */\r\n  hi2c->Instance->DR = I2C_7BIT_ADD_READ(DevAddress);\r\n\r\n  /* Wait until ADDR flag is set */\r\n  if (I2C_WaitOnMasterAddressFlagUntilTimeout(hi2c, I2C_FLAG_ADDR, Timeout, Tickstart) != HAL_OK) {\r\n    if (hi2c->ErrorCode == HAL_I2C_ERROR_AF) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DMA I2C process complete callback.\r\n * @param  hdma DMA handle\r\n * @retval None\r\n */\r\nstatic void I2C_DMAXferCplt(DMA_HandleTypeDef *hdma) {\r\n  I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  /* Declaration of temporary variable to prevent undefined behavior of volatile usage */\r\n  uint32_t CurrentState = hi2c->State;\r\n  uint32_t CurrentMode  = hi2c->Mode;\r\n\r\n  if ((CurrentState == HAL_I2C_STATE_BUSY_TX) || ((CurrentState == HAL_I2C_STATE_BUSY_RX) && (CurrentMode == HAL_I2C_MODE_SLAVE))) {\r\n    /* Disable DMA Request */\r\n    hi2c->Instance->CR2 &= ~I2C_CR2_DMAEN;\r\n\r\n    hi2c->XferCount = 0U;\r\n\r\n    /* Enable EVT and ERR interrupt */\r\n    __HAL_I2C_ENABLE_IT(hi2c, I2C_IT_EVT | I2C_IT_ERR);\r\n  } else {\r\n    /* Disable Acknowledge */\r\n    hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n    /* Generate Stop */\r\n    hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n\r\n    /* Disable Last DMA */\r\n    hi2c->Instance->CR2 &= ~I2C_CR2_LAST;\r\n\r\n    /* Disable DMA Request */\r\n    hi2c->Instance->CR2 &= ~I2C_CR2_DMAEN;\r\n\r\n    hi2c->XferCount = 0U;\r\n\r\n    /* Check if Errors has been detected during transfer */\r\n    if (hi2c->ErrorCode != HAL_I2C_ERROR_NONE) {\r\n      HAL_I2C_ErrorCallback(hi2c);\r\n    } else {\r\n      hi2c->State = HAL_I2C_STATE_READY;\r\n\r\n      if (hi2c->Mode == HAL_I2C_MODE_MEM) {\r\n        hi2c->Mode = HAL_I2C_MODE_NONE;\r\n\r\n        HAL_I2C_MemRxCpltCallback(hi2c);\r\n      } else {\r\n        hi2c->Mode = HAL_I2C_MODE_NONE;\r\n\r\n        HAL_I2C_MasterRxCpltCallback(hi2c);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  DMA I2C communication error callback.\r\n * @param  hdma DMA handle\r\n * @retval None\r\n */\r\nstatic void I2C_DMAError(DMA_HandleTypeDef *hdma) {\r\n  I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  /* Disable Acknowledge */\r\n  hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n  hi2c->XferCount = 0U;\r\n\r\n  hi2c->State = HAL_I2C_STATE_READY;\r\n  hi2c->Mode  = HAL_I2C_MODE_NONE;\r\n\r\n  hi2c->ErrorCode |= HAL_I2C_ERROR_DMA;\r\n\r\n  HAL_I2C_ErrorCallback(hi2c);\r\n}\r\n\r\n/**\r\n * @brief DMA I2C communication abort callback\r\n *        (To be called at end of DMA Abort procedure).\r\n * @param hdma: DMA handle.\r\n * @retval None\r\n */\r\nstatic void I2C_DMAAbort(DMA_HandleTypeDef *hdma) {\r\n  I2C_HandleTypeDef *hi2c = (I2C_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  /* Disable Acknowledge */\r\n  hi2c->Instance->CR1 &= ~I2C_CR1_ACK;\r\n\r\n  hi2c->XferCount = 0U;\r\n\r\n  /* Reset XferAbortCallback */\r\n  hi2c->hdmatx->XferAbortCallback = NULL;\r\n  hi2c->hdmarx->XferAbortCallback = NULL;\r\n\r\n  /* Check if come from abort from user */\r\n  if (hi2c->State == HAL_I2C_STATE_ABORT) {\r\n    hi2c->State     = HAL_I2C_STATE_READY;\r\n    hi2c->Mode      = HAL_I2C_MODE_NONE;\r\n    hi2c->ErrorCode = HAL_I2C_ERROR_NONE;\r\n\r\n    /* Disable I2C peripheral to prevent dummy data in buffer */\r\n    __HAL_I2C_DISABLE(hi2c);\r\n\r\n    /* Call the corresponding callback to inform upper layer of End of Transfer */\r\n    HAL_I2C_AbortCpltCallback(hi2c);\r\n  } else {\r\n    hi2c->State = HAL_I2C_STATE_READY;\r\n    hi2c->Mode  = HAL_I2C_MODE_NONE;\r\n\r\n    /* Disable I2C peripheral to prevent dummy data in buffer */\r\n    __HAL_I2C_DISABLE(hi2c);\r\n\r\n    /* Call the corresponding callback to inform upper layer of End of Transfer */\r\n    HAL_I2C_ErrorCallback(hi2c);\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  This function handles I2C Communication Timeout.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @param  Flag specifies the I2C flag to check.\r\n * @param  Status The new Flag status (SET or RESET).\r\n * @param  Timeout Timeout duration\r\n * @param  Tickstart Tick start value\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_WaitOnFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, FlagStatus Status, uint32_t Timeout, uint32_t Tickstart) {\r\n  /* Wait until flag is set */\r\n  while ((__HAL_I2C_GET_FLAG(hi2c, Flag) ? SET : RESET) == Status) {\r\n    /* Check for the Timeout */\r\n    if (Timeout != HAL_MAX_DELAY) {\r\n      if ((Timeout == 0U) || ((HAL_GetTick() - Tickstart) > Timeout)) {\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n        hi2c->Mode          = HAL_I2C_MODE_NONE;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  This function handles I2C Communication Timeout for Master addressing phase.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *         the configuration information for I2C module\r\n * @param  Flag specifies the I2C flag to check.\r\n * @param  Timeout Timeout duration\r\n * @param  Tickstart Tick start value\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_WaitOnMasterAddressFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Flag, uint32_t Timeout, uint32_t Tickstart) {\r\n  while (__HAL_I2C_GET_FLAG(hi2c, Flag) == RESET) {\r\n    if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == SET) {\r\n      /* Generate Stop */\r\n      hi2c->Instance->CR1 |= I2C_CR1_STOP;\r\n\r\n      /* Clear AF Flag */\r\n      __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);\r\n\r\n      hi2c->ErrorCode     = HAL_I2C_ERROR_AF;\r\n      hi2c->PreviousState = I2C_STATE_NONE;\r\n      hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(hi2c);\r\n\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Check for the Timeout */\r\n    if (Timeout != HAL_MAX_DELAY) {\r\n      if ((Timeout == 0U) || ((HAL_GetTick() - Tickstart) > Timeout)) {\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  This function handles I2C Communication Timeout for specific usage of TXE flag.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  Timeout Timeout duration\r\n * @param  Tickstart Tick start value\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_WaitOnTXEFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart) {\r\n  while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_TXE) == RESET) {\r\n    /* Check if a NACK is detected */\r\n    if (I2C_IsAcknowledgeFailed(hi2c) != HAL_OK) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Check for the Timeout */\r\n    if (Timeout != HAL_MAX_DELAY) {\r\n      if ((Timeout == 0U) || ((HAL_GetTick() - Tickstart) > Timeout)) {\r\n        hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT;\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  This function handles I2C Communication Timeout for specific usage of BTF flag.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  Timeout Timeout duration\r\n * @param  Tickstart Tick start value\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_WaitOnBTFFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart) {\r\n  while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_BTF) == RESET) {\r\n    /* Check if a NACK is detected */\r\n    if (I2C_IsAcknowledgeFailed(hi2c) != HAL_OK) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Check for the Timeout */\r\n    if (Timeout != HAL_MAX_DELAY) {\r\n      if ((Timeout == 0U) || ((HAL_GetTick() - Tickstart) > Timeout)) {\r\n        hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT;\r\n        hi2c->PreviousState = I2C_STATE_NONE;\r\n        hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n        /* Process Unlocked */\r\n        __HAL_UNLOCK(hi2c);\r\n\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  This function handles I2C Communication Timeout for specific usage of STOP flag.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  Timeout Timeout duration\r\n * @param  Tickstart Tick start value\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_WaitOnSTOPFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart) {\r\n  while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == RESET) {\r\n    /* Check if a NACK is detected */\r\n    if (I2C_IsAcknowledgeFailed(hi2c) != HAL_OK) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Check for the Timeout */\r\n    if ((Timeout == 0U) || ((HAL_GetTick() - Tickstart) > Timeout)) {\r\n      hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT;\r\n      hi2c->PreviousState = I2C_STATE_NONE;\r\n      hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(hi2c);\r\n\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  This function handles I2C Communication Timeout for specific usage of RXNE flag.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @param  Timeout Timeout duration\r\n * @param  Tickstart Tick start value\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_WaitOnRXNEFlagUntilTimeout(I2C_HandleTypeDef *hi2c, uint32_t Timeout, uint32_t Tickstart) {\r\n\r\n  while (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_RXNE) == RESET) {\r\n    /* Check if a STOPF is detected */\r\n    if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_STOPF) == SET) {\r\n      /* Clear STOP Flag */\r\n      __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF);\r\n\r\n      hi2c->ErrorCode     = HAL_I2C_ERROR_NONE;\r\n      hi2c->PreviousState = I2C_STATE_NONE;\r\n      hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(hi2c);\r\n\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Check for the Timeout */\r\n    if ((Timeout == 0U) || ((HAL_GetTick() - Tickstart) > Timeout)) {\r\n      hi2c->ErrorCode |= HAL_I2C_ERROR_TIMEOUT;\r\n      hi2c->State = HAL_I2C_STATE_READY;\r\n\r\n      /* Process Unlocked */\r\n      __HAL_UNLOCK(hi2c);\r\n\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  This function handles Acknowledge failed detection during an I2C Communication.\r\n * @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains\r\n *                the configuration information for the specified I2C.\r\n * @retval HAL status\r\n */\r\nstatic HAL_StatusTypeDef I2C_IsAcknowledgeFailed(I2C_HandleTypeDef *hi2c) {\r\n  if (__HAL_I2C_GET_FLAG(hi2c, I2C_FLAG_AF) == SET) {\r\n    /* Clear NACKF Flag */\r\n    __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);\r\n\r\n    hi2c->ErrorCode     = HAL_I2C_ERROR_AF;\r\n    hi2c->PreviousState = I2C_STATE_NONE;\r\n    hi2c->State         = HAL_I2C_STATE_READY;\r\n\r\n    /* Process Unlocked */\r\n    __HAL_UNLOCK(hi2c);\r\n\r\n    return HAL_ERROR;\r\n  }\r\n  return HAL_OK;\r\n}\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_I2C_MODULE_ENABLED */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_iwdg.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_iwdg.c\r\n  * @author  MCD Application Team\r\n  * @brief   IWDG HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the Independent Watchdog (IWDG) peripheral:\r\n  *           + Initialization and Start functions\r\n  *           + IO operation functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                    ##### IWDG Generic features #####\r\n  ==============================================================================\r\n  [..]\r\n    (+) The IWDG can be started by either software or hardware (configurable\r\n        through option byte).\r\n\r\n    (+) The IWDG is clocked by Low-Speed clock (LSI) and thus stays active even\r\n        if the main clock fails.\r\n\r\n    (+) Once the IWDG is started, the LSI is forced ON and both can not be\r\n        disabled. The counter starts counting down from the reset value (0xFFF).\r\n        When it reaches the end of count value (0x000) a reset signal is\r\n        generated (IWDG reset).\r\n\r\n    (+) Whenever the key value 0x0000 AAAA is written in the IWDG_KR register,\r\n        the IWDG_RLR value is reloaded in the counter and the watchdog reset is\r\n        prevented.\r\n\r\n    (+) The IWDG is implemented in the VDD voltage domain that is still functional\r\n        in STOP and STANDBY mode (IWDG reset can wake-up from STANDBY).\r\n        IWDGRST flag in RCC_CSR register can be used to inform when an IWDG\r\n        reset occurs.\r\n\r\n    (+) Debug mode : When the microcontroller enters debug mode (core halted),\r\n        the IWDG counter either continues to work normally or stops, depending\r\n        on DBG_IWDG_STOP configuration bit in DBG module, accessible through\r\n        __HAL_DBGMCU_FREEZE_IWDG() and __HAL_DBGMCU_UNFREEZE_IWDG() macros\r\n\r\n    [..] Min-max timeout value @32KHz (LSI): ~125us / ~32.7s\r\n         The IWDG timeout may vary due to LSI frequency dispersion. STM32F1xx\r\n         devices provide the capability to measure the LSI frequency (LSI clock\r\n         connected internally to TIM5 CH4 input capture). The measured value\r\n         can be used to have an IWDG timeout with an acceptable accuracy.\r\n\r\n                     ##### How to use this driver #####\r\n  ==============================================================================\r\n  [..]\r\n    (#) Use IWDG using HAL_IWDG_Init() function to :\r\n      (++) Enable instance by writing Start keyword in IWDG_KEY register. LSI\r\n           clock is forced ON and IWDG counter starts downcounting.\r\n      (++) Enable write access to configuration register: IWDG_PR & IWDG_RLR.\r\n      (++) Configure the IWDG prescaler and counter reload value. This reload\r\n           value will be loaded in the IWDG counter each time the watchdog is\r\n           reloaded, then the IWDG will start counting down from this value.\r\n      (++) wait for status flags to be reset\"\r\n\r\n    (#) Then the application program must refresh the IWDG counter at regular\r\n        intervals during normal operation to prevent an MCU reset, using\r\n        HAL_IWDG_Refresh() function.\r\n\r\n     *** IWDG HAL driver macros list ***\r\n     ====================================\r\n     [..]\r\n       Below the list of most used macros in IWDG HAL driver:\r\n      (+) __HAL_IWDG_START: Enable the IWDG peripheral\r\n      (+) __HAL_IWDG_RELOAD_COUNTER: Reloads IWDG counter with value defined in\r\n          the reload register\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_IWDG_MODULE_ENABLED\r\n/** @defgroup IWDG IWDG\r\n * @brief IWDG HAL module driver.\r\n * @{\r\n */\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup IWDG_Private_Defines IWDG Private Defines\r\n * @{\r\n */\r\n/* Status register need 5 RC LSI divided by prescaler clock to be updated. With\r\n   higher prescaler (256), and according to HSI variation, we need to wait at\r\n   least 6 cycles so 48 ms. */\r\n#define HAL_IWDG_DEFAULT_TIMEOUT 48U\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @addtogroup IWDG_Exported_Functions\r\n * @{\r\n */\r\n\r\n/** @addtogroup IWDG_Exported_Functions_Group1\r\n  *  @brief    Initialization and Start functions.\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n          ##### Initialization and Start functions #####\r\n ===============================================================================\r\n [..]  This section provides functions allowing to:\r\n      (+) Initialize the IWDG according to the specified parameters in the\r\n          IWDG_InitTypeDef of associated handle.\r\n      (+) Once initialization is performed in HAL_IWDG_Init function, Watchdog\r\n          is reloaded in order to exit function with correct time base.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initialize the IWDG according to the specified parameters in the\r\n *         IWDG_InitTypeDef and start watchdog. Before exiting function,\r\n *         watchdog is refreshed in order to have correct time base.\r\n * @param  hiwdg  pointer to a IWDG_HandleTypeDef structure that contains\r\n *                the configuration information for the specified IWDG module.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_IWDG_Init(IWDG_HandleTypeDef *hiwdg) {\r\n  uint32_t tickstart;\r\n\r\n  /* Check the IWDG handle allocation */\r\n  if (hiwdg == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_IWDG_ALL_INSTANCE(hiwdg->Instance));\r\n  assert_param(IS_IWDG_PRESCALER(hiwdg->Init.Prescaler));\r\n  assert_param(IS_IWDG_RELOAD(hiwdg->Init.Reload));\r\n\r\n  /* Enable IWDG. LSI is turned on automaticaly */\r\n  __HAL_IWDG_START(hiwdg);\r\n\r\n  /* Enable write access to IWDG_PR and IWDG_RLR registers by writing 0x5555 in KR */\r\n  IWDG_ENABLE_WRITE_ACCESS(hiwdg);\r\n\r\n  /* Write to IWDG registers the Prescaler & Reload values to work with */\r\n  hiwdg->Instance->PR  = hiwdg->Init.Prescaler;\r\n  hiwdg->Instance->RLR = hiwdg->Init.Reload;\r\n\r\n  /* Check pending flag, if previous update not done, return timeout */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Wait for register to be updated */\r\n  while (hiwdg->Instance->SR != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > HAL_IWDG_DEFAULT_TIMEOUT) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Reload IWDG counter with value defined in the reload register */\r\n  __HAL_IWDG_RELOAD_COUNTER(hiwdg);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @addtogroup IWDG_Exported_Functions_Group2\r\n  *  @brief   IO operation functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                      ##### IO operation functions #####\r\n ===============================================================================\r\n [..]  This section provides functions allowing to:\r\n      (+) Refresh the IWDG.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Refresh the IWDG.\r\n * @param  hiwdg  pointer to a IWDG_HandleTypeDef structure that contains\r\n *                the configuration information for the specified IWDG module.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_IWDG_Refresh(IWDG_HandleTypeDef *hiwdg) {\r\n  /* Reload IWDG counter with value defined in the reload register */\r\n  __HAL_IWDG_RELOAD_COUNTER(hiwdg);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_IWDG_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_pwr.c\r\n * @author  MCD Application Team\r\n * @brief   PWR HAL module driver.\r\n *\r\n *          This file provides firmware functions to manage the following\r\n *          functionalities of the Power Controller (PWR) peripheral:\r\n *           + Initialization/de-initialization functions\r\n *           + Peripheral Control functions\r\n *\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup PWR PWR\r\n * @brief    PWR HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_PWR_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n\r\n/** @defgroup PWR_Private_Constants PWR Private Constants\r\n * @{\r\n */\r\n\r\n/** @defgroup PWR_PVD_Mode_Mask PWR PVD Mode Mask\r\n * @{\r\n */\r\n#define PVD_MODE_IT      0x00010000U\r\n#define PVD_MODE_EVT     0x00020000U\r\n#define PVD_RISING_EDGE  0x00000001U\r\n#define PVD_FALLING_EDGE 0x00000002U\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_register_alias_address PWR Register alias address\r\n * @{\r\n */\r\n/* ------------- PWR registers bit address in the alias region ---------------*/\r\n#define PWR_OFFSET        (PWR_BASE - PERIPH_BASE)\r\n#define PWR_CR_OFFSET     0x00U\r\n#define PWR_CSR_OFFSET    0x04U\r\n#define PWR_CR_OFFSET_BB  (PWR_OFFSET + PWR_CR_OFFSET)\r\n#define PWR_CSR_OFFSET_BB (PWR_OFFSET + PWR_CSR_OFFSET)\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_CR_register_alias PWR CR Register alias address\r\n * @{\r\n */\r\n/* --- CR Register ---*/\r\n/* Alias word address of LPSDSR bit */\r\n#define LPSDSR_BIT_NUMBER PWR_CR_LPDS_Pos\r\n#define CR_LPSDSR_BB      ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (LPSDSR_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of DBP bit */\r\n#define DBP_BIT_NUMBER PWR_CR_DBP_Pos\r\n#define CR_DBP_BB      ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (DBP_BIT_NUMBER * 4U)))\r\n\r\n/* Alias word address of PVDE bit */\r\n#define PVDE_BIT_NUMBER PWR_CR_PVDE_Pos\r\n#define CR_PVDE_BB      ((uint32_t)(PERIPH_BB_BASE + (PWR_CR_OFFSET_BB * 32U) + (PVDE_BIT_NUMBER * 4U)))\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_CSR_register_alias PWR CSR Register alias address\r\n * @{\r\n */\r\n\r\n/* --- CSR Register ---*/\r\n/* Alias word address of EWUP1 bit */\r\n#define CSR_EWUP_BB(VAL) ((uint32_t)(PERIPH_BB_BASE + (PWR_CSR_OFFSET_BB * 32U) + (POSITION_VAL(VAL) * 4U)))\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @defgroup PWR_Private_Functions PWR Private Functions\r\n * brief   WFE cortex command overloaded for HAL_PWR_EnterSTOPMode usage only (see Workaround section)\r\n * @{\r\n */\r\nstatic void PWR_OverloadWfe(void);\r\n\r\n/* Private functions ---------------------------------------------------------*/\r\n__NOINLINE\r\nstatic void PWR_OverloadWfe(void) {\r\n  __asm volatile(\"wfe\");\r\n  __asm volatile(\"nop\");\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_Exported_Functions PWR Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup PWR_Exported_Functions_Group1 Initialization and de-initialization functions\r\n  *  @brief   Initialization and de-initialization functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n              ##### Initialization and de-initialization functions #####\r\n ===============================================================================\r\n    [..]\r\n      After reset, the backup domain (RTC registers, RTC backup data\r\n      registers) is protected against possible unwanted\r\n      write accesses.\r\n      To enable access to the RTC Domain and RTC registers, proceed as follows:\r\n        (+) Enable the Power Controller (PWR) APB1 interface clock using the\r\n            __HAL_RCC_PWR_CLK_ENABLE() macro.\r\n        (+) Enable access to RTC domain using the HAL_PWR_EnableBkUpAccess() function.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Deinitializes the PWR peripheral registers to their default reset values.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DeInit(void) {\r\n  __HAL_RCC_PWR_FORCE_RESET();\r\n  __HAL_RCC_PWR_RELEASE_RESET();\r\n}\r\n\r\n/**\r\n * @brief  Enables access to the backup domain (RTC registers, RTC\r\n *         backup data registers ).\r\n * @note   If the HSE divided by 128 is used as the RTC clock, the\r\n *         Backup Domain Access should be kept enabled.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnableBkUpAccess(void) {\r\n  /* Enable access to RTC and backup registers */\r\n  *(__IO uint32_t *)CR_DBP_BB = (uint32_t)ENABLE;\r\n}\r\n\r\n/**\r\n * @brief  Disables access to the backup domain (RTC registers, RTC\r\n *         backup data registers).\r\n * @note   If the HSE divided by 128 is used as the RTC clock, the\r\n *         Backup Domain Access should be kept enabled.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DisableBkUpAccess(void) {\r\n  /* Disable access to RTC and backup registers */\r\n  *(__IO uint32_t *)CR_DBP_BB = (uint32_t)DISABLE;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup PWR_Exported_Functions_Group2 Peripheral Control functions\r\n  * @brief    Low Power modes configuration functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                 ##### Peripheral Control functions #####\r\n ===============================================================================\r\n\r\n    *** PVD configuration ***\r\n    =========================\r\n    [..]\r\n      (+) The PVD is used to monitor the VDD power supply by comparing it to a\r\n          threshold selected by the PVD Level (PLS[2:0] bits in the PWR_CR).\r\n\r\n      (+) A PVDO flag is available to indicate if VDD/VDDA is higher or lower\r\n          than the PVD threshold. This event is internally connected to the EXTI\r\n          line16 and can generate an interrupt if enabled. This is done through\r\n          __HAL_PVD_EXTI_ENABLE_IT() macro.\r\n      (+) The PVD is stopped in Standby mode.\r\n\r\n    *** WakeUp pin configuration ***\r\n    ================================\r\n    [..]\r\n      (+) WakeUp pin is used to wake up the system from Standby mode. This pin is\r\n          forced in input pull-down configuration and is active on rising edges.\r\n      (+) There is one WakeUp pin:\r\n          WakeUp Pin 1 on PA.00.\r\n\r\n    [..]\r\n\r\n    *** Low Power modes configuration ***\r\n    =====================================\r\n     [..]\r\n      The device features 3 low-power modes:\r\n      (+) Sleep mode: CPU clock off, all peripherals including Cortex-M3 core peripherals like\r\n                      NVIC, SysTick, etc. are kept running\r\n      (+) Stop mode: All clocks are stopped\r\n      (+) Standby mode: 1.8V domain powered off\r\n\r\n\r\n   *** Sleep mode ***\r\n   ==================\r\n    [..]\r\n      (+) Entry:\r\n          The Sleep mode is entered by using the HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFx)\r\n              functions with\r\n          (++) PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction\r\n          (++) PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction\r\n\r\n      (+) Exit:\r\n        (++) WFI entry mode, Any peripheral interrupt acknowledged by the nested vectored interrupt\r\n             controller (NVIC) can wake up the device from Sleep mode.\r\n        (++) WFE entry mode, Any wakeup event can wake up the device from Sleep mode.\r\n           (+++) Any peripheral interrupt w/o NVIC configuration & SEVONPEND bit set in the Cortex (HAL_PWR_EnableSEVOnPend)\r\n           (+++) Any EXTI Line (Internal or External) configured in Event mode\r\n\r\n   *** Stop mode ***\r\n   =================\r\n    [..]\r\n      The Stop mode is based on the Cortex-M3 deepsleep mode combined with peripheral\r\n      clock gating. The voltage regulator can be configured either in normal or low-power mode.\r\n      In Stop mode, all clocks in the 1.8 V domain are stopped, the PLL, the HSI and the HSE RC\r\n      oscillators are disabled. SRAM and register contents are preserved.\r\n      In Stop mode, all I/O pins keep the same state as in Run mode.\r\n\r\n      (+) Entry:\r\n           The Stop mode is entered using the HAL_PWR_EnterSTOPMode(PWR_REGULATOR_VALUE, PWR_SLEEPENTRY_WFx )\r\n             function with:\r\n          (++) PWR_REGULATOR_VALUE= PWR_MAINREGULATOR_ON: Main regulator ON.\r\n          (++) PWR_REGULATOR_VALUE= PWR_LOWPOWERREGULATOR_ON: Low Power regulator ON.\r\n          (++) PWR_SLEEPENTRY_WFx= PWR_SLEEPENTRY_WFI: enter STOP mode with WFI instruction\r\n          (++) PWR_SLEEPENTRY_WFx= PWR_SLEEPENTRY_WFE: enter STOP mode with WFE instruction\r\n      (+) Exit:\r\n          (++) WFI entry mode, Any EXTI Line (Internal or External) configured in Interrupt mode with NVIC configured\r\n          (++) WFE entry mode, Any EXTI Line (Internal or External) configured in Event mode.\r\n\r\n   *** Standby mode ***\r\n   ====================\r\n     [..]\r\n      The Standby mode allows to achieve the lowest power consumption. It is based on the\r\n      Cortex-M3 deepsleep mode, with the voltage regulator disabled. The 1.8 V domain is\r\n      consequently powered off. The PLL, the HSI oscillator and the HSE oscillator are also\r\n      switched off. SRAM and register contents are lost except for registers in the Backup domain\r\n      and Standby circuitry\r\n\r\n      (+) Entry:\r\n        (++) The Standby mode is entered using the HAL_PWR_EnterSTANDBYMode() function.\r\n      (+) Exit:\r\n        (++) WKUP pin rising edge, RTC alarm event rising edge, external Reset in\r\n             NRSTpin, IWDG Reset\r\n\r\n   *** Auto-wakeup (AWU) from low-power mode ***\r\n       =============================================\r\n       [..]\r\n\r\n       (+) The MCU can be woken up from low-power mode by an RTC Alarm event,\r\n           without depending on an external interrupt (Auto-wakeup mode).\r\n\r\n       (+) RTC auto-wakeup (AWU) from the Stop and Standby modes\r\n\r\n           (++) To wake up from the Stop mode with an RTC alarm event, it is necessary to\r\n                configure the RTC to generate the RTC alarm using the HAL_RTC_SetAlarm_IT() function.\r\n\r\n   *** PWR Workarounds linked to Silicon Limitation ***\r\n       ====================================================\r\n       [..]\r\n       Below the list of all silicon limitations known on STM32F1xx prouct.\r\n\r\n       (#)Workarounds Implemented inside PWR HAL Driver\r\n          (##)Debugging Stop mode with WFE entry - overloaded the WFE by an internal function\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Configures the voltage threshold detected by the Power Voltage Detector(PVD).\r\n * @param  sConfigPVD: pointer to an PWR_PVDTypeDef structure that contains the configuration\r\n *         information for the PVD.\r\n * @note   Refer to the electrical characteristics of your device datasheet for\r\n *         more details about the voltage threshold corresponding to each\r\n *         detection level.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD) {\r\n  /* Check the parameters */\r\n  assert_param(IS_PWR_PVD_LEVEL(sConfigPVD->PVDLevel));\r\n  assert_param(IS_PWR_PVD_MODE(sConfigPVD->Mode));\r\n\r\n  /* Set PLS[7:5] bits according to PVDLevel value */\r\n  MODIFY_REG(PWR->CR, PWR_CR_PLS, sConfigPVD->PVDLevel);\r\n\r\n  /* Clear any previous config. Keep it clear if no event or IT mode is selected */\r\n  __HAL_PWR_PVD_EXTI_DISABLE_EVENT();\r\n  __HAL_PWR_PVD_EXTI_DISABLE_IT();\r\n  __HAL_PWR_PVD_EXTI_DISABLE_FALLING_EDGE();\r\n  __HAL_PWR_PVD_EXTI_DISABLE_RISING_EDGE();\r\n\r\n  /* Configure interrupt mode */\r\n  if ((sConfigPVD->Mode & PVD_MODE_IT) == PVD_MODE_IT) {\r\n    __HAL_PWR_PVD_EXTI_ENABLE_IT();\r\n  }\r\n\r\n  /* Configure event mode */\r\n  if ((sConfigPVD->Mode & PVD_MODE_EVT) == PVD_MODE_EVT) {\r\n    __HAL_PWR_PVD_EXTI_ENABLE_EVENT();\r\n  }\r\n\r\n  /* Configure the edge */\r\n  if ((sConfigPVD->Mode & PVD_RISING_EDGE) == PVD_RISING_EDGE) {\r\n    __HAL_PWR_PVD_EXTI_ENABLE_RISING_EDGE();\r\n  }\r\n\r\n  if ((sConfigPVD->Mode & PVD_FALLING_EDGE) == PVD_FALLING_EDGE) {\r\n    __HAL_PWR_PVD_EXTI_ENABLE_FALLING_EDGE();\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Enables the Power Voltage Detector(PVD).\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnablePVD(void) {\r\n  /* Enable the power voltage detector */\r\n  *(__IO uint32_t *)CR_PVDE_BB = (uint32_t)ENABLE;\r\n}\r\n\r\n/**\r\n * @brief  Disables the Power Voltage Detector(PVD).\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DisablePVD(void) {\r\n  /* Disable the power voltage detector */\r\n  *(__IO uint32_t *)CR_PVDE_BB = (uint32_t)DISABLE;\r\n}\r\n\r\n/**\r\n * @brief Enables the WakeUp PINx functionality.\r\n * @param WakeUpPinx: Specifies the Power Wake-Up pin to enable.\r\n *        This parameter can be one of the following values:\r\n *           @arg PWR_WAKEUP_PIN1\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnableWakeUpPin(uint32_t WakeUpPinx) {\r\n  /* Check the parameter */\r\n  assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx));\r\n  /* Enable the EWUPx pin */\r\n  *(__IO uint32_t *)CSR_EWUP_BB(WakeUpPinx) = (uint32_t)ENABLE;\r\n}\r\n\r\n/**\r\n * @brief Disables the WakeUp PINx functionality.\r\n * @param WakeUpPinx: Specifies the Power Wake-Up pin to disable.\r\n *        This parameter can be one of the following values:\r\n *           @arg PWR_WAKEUP_PIN1\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DisableWakeUpPin(uint32_t WakeUpPinx) {\r\n  /* Check the parameter */\r\n  assert_param(IS_PWR_WAKEUP_PIN(WakeUpPinx));\r\n  /* Disable the EWUPx pin */\r\n  *(__IO uint32_t *)CSR_EWUP_BB(WakeUpPinx) = (uint32_t)DISABLE;\r\n}\r\n\r\n/**\r\n * @brief Enters Sleep mode.\r\n * @note  In Sleep mode, all I/O pins keep the same state as in Run mode.\r\n * @param Regulator: Regulator state as no effect in SLEEP mode -  allows to support portability from legacy software\r\n * @param SLEEPEntry: Specifies if SLEEP mode is entered with WFI or WFE instruction.\r\n *           When WFI entry is used, tick interrupt have to be disabled if not desired as\r\n *           the interrupt wake up source.\r\n *           This parameter can be one of the following values:\r\n *            @arg PWR_SLEEPENTRY_WFI: enter SLEEP mode with WFI instruction\r\n *            @arg PWR_SLEEPENTRY_WFE: enter SLEEP mode with WFE instruction\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnterSLEEPMode(uint32_t Regulator, uint8_t SLEEPEntry) {\r\n  /* Check the parameters */\r\n  /* No check on Regulator because parameter not used in SLEEP mode */\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(Regulator);\r\n\r\n  assert_param(IS_PWR_SLEEP_ENTRY(SLEEPEntry));\r\n\r\n  /* Clear SLEEPDEEP bit of Cortex System Control Register */\r\n  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));\r\n\r\n  /* Select SLEEP mode entry -------------------------------------------------*/\r\n  if (SLEEPEntry == PWR_SLEEPENTRY_WFI) {\r\n    /* Request Wait For Interrupt */\r\n    __WFI();\r\n  } else {\r\n    /* Request Wait For Event */\r\n    __SEV();\r\n    __WFE();\r\n    __WFE();\r\n  }\r\n}\r\n\r\n/**\r\n * @brief Enters Stop mode.\r\n * @note  In Stop mode, all I/O pins keep the same state as in Run mode.\r\n * @note  When exiting Stop mode by using an interrupt or a wakeup event,\r\n *        HSI RC oscillator is selected as system clock.\r\n * @note  When the voltage regulator operates in low power mode, an additional\r\n *         startup delay is incurred when waking up from Stop mode.\r\n *         By keeping the internal regulator ON during Stop mode, the consumption\r\n *         is higher although the startup time is reduced.\r\n * @param Regulator: Specifies the regulator state in Stop mode.\r\n *          This parameter can be one of the following values:\r\n *            @arg PWR_MAINREGULATOR_ON: Stop mode with regulator ON\r\n *            @arg PWR_LOWPOWERREGULATOR_ON: Stop mode with low power regulator ON\r\n * @param STOPEntry: Specifies if Stop mode in entered with WFI or WFE instruction.\r\n *          This parameter can be one of the following values:\r\n *            @arg PWR_STOPENTRY_WFI: Enter Stop mode with WFI instruction\r\n *            @arg PWR_STOPENTRY_WFE: Enter Stop mode with WFE instruction\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry) {\r\n  /* Check the parameters */\r\n  assert_param(IS_PWR_REGULATOR(Regulator));\r\n  assert_param(IS_PWR_STOP_ENTRY(STOPEntry));\r\n\r\n  /* Clear PDDS bit in PWR register to specify entering in STOP mode when CPU enter in Deepsleep */\r\n  CLEAR_BIT(PWR->CR, PWR_CR_PDDS);\r\n\r\n  /* Select the voltage regulator mode by setting LPDS bit in PWR register according to Regulator parameter value */\r\n  MODIFY_REG(PWR->CR, PWR_CR_LPDS, Regulator);\r\n\r\n  /* Set SLEEPDEEP bit of Cortex System Control Register */\r\n  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));\r\n\r\n  /* Select Stop mode entry --------------------------------------------------*/\r\n  if (STOPEntry == PWR_STOPENTRY_WFI) {\r\n    /* Request Wait For Interrupt */\r\n    __WFI();\r\n  } else {\r\n    /* Request Wait For Event */\r\n    __SEV();\r\n    PWR_OverloadWfe(); /* WFE redefine locally */\r\n    PWR_OverloadWfe(); /* WFE redefine locally */\r\n  }\r\n  /* Reset SLEEPDEEP bit of Cortex System Control Register */\r\n  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));\r\n}\r\n\r\n/**\r\n * @brief Enters Standby mode.\r\n * @note  In Standby mode, all I/O pins are high impedance except for:\r\n *          - Reset pad (still available)\r\n *          - TAMPER pin if configured for tamper or calibration out.\r\n *          - WKUP pin (PA0) if enabled.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnterSTANDBYMode(void) {\r\n  /* Select Standby mode */\r\n  SET_BIT(PWR->CR, PWR_CR_PDDS);\r\n\r\n  /* Set SLEEPDEEP bit of Cortex System Control Register */\r\n  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPDEEP_Msk));\r\n\r\n  /* This option is used to ensure that store operations are completed */\r\n#if defined(__CC_ARM)\r\n  __force_stores();\r\n#endif\r\n  /* Request Wait For Interrupt */\r\n  __WFI();\r\n}\r\n\r\n/**\r\n * @brief Indicates Sleep-On-Exit when returning from Handler mode to Thread mode.\r\n * @note Set SLEEPONEXIT bit of SCR register. When this bit is set, the processor\r\n *       re-enters SLEEP mode when an interruption handling is over.\r\n *       Setting this bit is useful when the processor is expected to run only on\r\n *       interruptions handling.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnableSleepOnExit(void) {\r\n  /* Set SLEEPONEXIT bit of Cortex System Control Register */\r\n  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));\r\n}\r\n\r\n/**\r\n * @brief Disables Sleep-On-Exit feature when returning from Handler mode to Thread mode.\r\n * @note Clears SLEEPONEXIT bit of SCR register. When this bit is set, the processor\r\n *       re-enters SLEEP mode when an interruption handling is over.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DisableSleepOnExit(void) {\r\n  /* Clear SLEEPONEXIT bit of Cortex System Control Register */\r\n  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SLEEPONEXIT_Msk));\r\n}\r\n\r\n/**\r\n * @brief Enables CORTEX M3 SEVONPEND bit.\r\n * @note Sets SEVONPEND bit of SCR register. When this bit is set, this causes\r\n *       WFE to wake up when an interrupt moves from inactive to pended.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_EnableSEVOnPend(void) {\r\n  /* Set SEVONPEND bit of Cortex System Control Register */\r\n  SET_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));\r\n}\r\n\r\n/**\r\n * @brief Disables CORTEX M3 SEVONPEND bit.\r\n * @note Clears SEVONPEND bit of SCR register. When this bit is set, this causes\r\n *       WFE to wake up when an interrupt moves from inactive to pended.\r\n * @retval None\r\n */\r\nvoid HAL_PWR_DisableSEVOnPend(void) {\r\n  /* Clear SEVONPEND bit of Cortex System Control Register */\r\n  CLEAR_BIT(SCB->SCR, ((uint32_t)SCB_SCR_SEVONPEND_Msk));\r\n}\r\n\r\n/**\r\n * @brief  This function handles the PWR PVD interrupt request.\r\n * @note   This API should be called under the PVD_IRQHandler().\r\n * @retval None\r\n */\r\nvoid HAL_PWR_PVD_IRQHandler(void) {\r\n  /* Check PWR exti flag */\r\n  if (__HAL_PWR_PVD_EXTI_GET_FLAG() != RESET) {\r\n    /* PWR PVD interrupt user callback */\r\n    HAL_PWR_PVDCallback();\r\n\r\n    /* Clear PWR Exti pending bit */\r\n    __HAL_PWR_PVD_EXTI_CLEAR_FLAG();\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  PWR PVD interrupt callback\r\n * @retval None\r\n */\r\n__weak void HAL_PWR_PVDCallback(void) {\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n            the HAL_PWR_PVDCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_PWR_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_rcc.c\r\n  * @author  MCD Application Team\r\n  * @brief   RCC HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the Reset and Clock Control (RCC) peripheral:\r\n  *           + Initialization and de-initialization functions\r\n  *           + Peripheral Control functions\r\n  *\r\n  @verbatim\r\n  ==============================================================================\r\n                      ##### RCC specific features #####\r\n  ==============================================================================\r\n    [..]\r\n      After reset the device is running from Internal High Speed oscillator\r\n      (HSI 8MHz) with Flash 0 wait state, Flash prefetch buffer is enabled,\r\n      and all peripherals are off except internal SRAM, Flash and JTAG.\r\n      (+) There is no prescaler on High speed (AHB) and Low speed (APB) buses;\r\n          all peripherals mapped on these buses are running at HSI speed.\r\n      (+) The clock for all peripherals is switched off, except the SRAM and FLASH.\r\n      (+) All GPIOs are in input floating state, except the JTAG pins which\r\n          are assigned to be used for debug purpose.\r\n    [..] Once the device started from reset, the user application has to:\r\n      (+) Configure the clock source to be used to drive the System clock\r\n          (if the application needs higher frequency/performance)\r\n      (+) Configure the System clock frequency and Flash settings\r\n      (+) Configure the AHB and APB buses prescalers\r\n      (+) Enable the clock for the peripheral(s) to be used\r\n      (+) Configure the clock source(s) for peripherals whose clocks are not\r\n          derived from the System clock (I2S, RTC, ADC, USB OTG FS)\r\n\r\n                      ##### RCC Limitations #####\r\n  ==============================================================================\r\n    [..]\r\n      A delay between an RCC peripheral clock enable and the effective peripheral\r\n      enabling should be taken into account in order to manage the peripheral read/write\r\n      from/to registers.\r\n      (+) This delay depends on the peripheral mapping.\r\n        (++) AHB & APB peripherals, 1 dummy read is necessary\r\n\r\n    [..]\r\n      Workarounds:\r\n      (#) For AHB & APB peripherals, a dummy read to the peripheral register has been\r\n          inserted in each __HAL_RCC_PPP_CLK_ENABLE() macro.\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without modification,\r\n  * are permitted provided that the following conditions are met:\r\n  *   1. Redistributions of source code must retain the above copyright notice,\r\n  *      this list of conditions and the following disclaimer.\r\n  *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *      this list of conditions and the following disclaimer in the documentation\r\n  *      and/or other materials provided with the distribution.\r\n  *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n  *      may be used to endorse or promote products derived from this software\r\n  *      without specific prior written permission.\r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n*/\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup RCC RCC\r\n * @brief RCC HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_RCC_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup RCC_Private_Constants RCC Private Constants\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n/* Private macro -------------------------------------------------------------*/\r\n/** @defgroup RCC_Private_Macros RCC Private Macros\r\n * @{\r\n */\r\n\r\n#define MCO1_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()\r\n#define MCO1_GPIO_PORT    GPIOA\r\n#define MCO1_PIN          GPIO_PIN_8\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private variables ---------------------------------------------------------*/\r\n/** @defgroup RCC_Private_Variables RCC Private Variables\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private function prototypes -----------------------------------------------*/\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @defgroup RCC_Exported_Functions RCC Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup RCC_Exported_Functions_Group1 Initialization and de-initialization functions\r\n  *  @brief    Initialization and Configuration functions\r\n  *\r\n  @verbatim\r\n  ===============================================================================\r\n           ##### Initialization and de-initialization functions #####\r\n  ===============================================================================\r\n    [..]\r\n      This section provides functions allowing to configure the internal/external oscillators\r\n      (HSE, HSI, LSE, LSI, PLL, CSS and MCO) and the System buses clocks (SYSCLK, AHB, APB1\r\n      and APB2).\r\n\r\n    [..] Internal/external clock and PLL configuration\r\n      (#) HSI (high-speed internal), 8 MHz factory-trimmed RC used directly or through\r\n          the PLL as System clock source.\r\n      (#) LSI (low-speed internal), ~40 KHz low consumption RC used as IWDG and/or RTC\r\n          clock source.\r\n\r\n      (#) HSE (high-speed external), 4 to 24 MHz (STM32F100xx) or 4 to 16 MHz (STM32F101x/STM32F102x/STM32F103x) or 3 to 25 MHz (STM32F105x/STM32F107x)  crystal oscillator used directly or\r\n          through the PLL as System clock source. Can be used also as RTC clock source.\r\n\r\n      (#) LSE (low-speed external), 32 KHz oscillator used as RTC clock source.\r\n\r\n      (#) PLL (clocked by HSI or HSE), featuring different output clocks:\r\n        (++) The first output is used to generate the high speed system clock (up to 72 MHz for STM32F10xxx or up to 24 MHz for STM32F100xx)\r\n        (++) The second output is used to generate the clock for the USB OTG FS (48 MHz)\r\n\r\n      (#) CSS (Clock security system), once enable using the macro __HAL_RCC_CSS_ENABLE()\r\n          and if a HSE clock failure occurs(HSE used directly or through PLL as System\r\n          clock source), the System clocks automatically switched to HSI and an interrupt\r\n          is generated if enabled. The interrupt is linked to the Cortex-M3 NMI\r\n          (Non-Maskable Interrupt) exception vector.\r\n\r\n      (#) MCO1 (microcontroller clock output), used to output SYSCLK, HSI,\r\n          HSE or PLL clock (divided by 2) on PA8 pin + PLL2CLK, PLL3CLK/2, PLL3CLK and XTI for STM32F105x/STM32F107x\r\n\r\n    [..] System, AHB and APB buses clocks configuration\r\n      (#) Several clock sources can be used to drive the System clock (SYSCLK): HSI,\r\n          HSE and PLL.\r\n          The AHB clock (HCLK) is derived from System clock through configurable\r\n          prescaler and used to clock the CPU, memory and peripherals mapped\r\n          on AHB bus (DMA, GPIO...). APB1 (PCLK1) and APB2 (PCLK2) clocks are derived\r\n          from AHB clock through configurable prescalers and used to clock\r\n          the peripherals mapped on these buses. You can use\r\n          \"@ref HAL_RCC_GetSysClockFreq()\" function to retrieve the frequencies of these clocks.\r\n\r\n      -@- All the peripheral clocks are derived from the System clock (SYSCLK) except:\r\n          (+@) RTC: RTC clock can be derived either from the LSI, LSE or HSE clock\r\n              divided by 128.\r\n          (+@) USB OTG FS and RTC: USB OTG FS require a frequency equal to 48 MHz\r\n              to work correctly. This clock is derived of the main PLL through PLL Multiplier.\r\n          (+@) I2S interface on STM32F105x/STM32F107x can be derived from PLL3CLK\r\n          (+@) IWDG clock which is always the LSI clock.\r\n\r\n      (#) For STM32F10xxx, the maximum frequency of the SYSCLK and HCLK/PCLK2 is 72 MHz, PCLK1 36 MHz.\r\n          For STM32F100xx, the maximum frequency of the SYSCLK and HCLK/PCLK1/PCLK2 is 24 MHz.\r\n          Depending on the SYSCLK frequency, the flash latency should be adapted accordingly.\r\n  @endverbatim\r\n  * @{\r\n  */\r\n\r\n/*\r\n  Additional consideration on the SYSCLK based on Latency settings:\r\n        +-----------------------------------------------+\r\n        | Latency       | SYSCLK clock frequency (MHz)  |\r\n        |---------------|-------------------------------|\r\n        |0WS(1CPU cycle)|       0 < SYSCLK <= 24        |\r\n        |---------------|-------------------------------|\r\n        |1WS(2CPU cycle)|      24 < SYSCLK <= 48        |\r\n        |---------------|-------------------------------|\r\n        |2WS(3CPU cycle)|      48 < SYSCLK <= 72        |\r\n        +-----------------------------------------------+\r\n  */\r\n\r\n/**\r\n * @brief  Resets the RCC clock configuration to the default reset state.\r\n * @note   The default reset state of the clock configuration is given below:\r\n *            - HSI ON and used as system clock source\r\n *            - HSE, PLL, PLL2 and PLL3 are OFF\r\n *            - AHB, APB1 and APB2 prescaler set to 1.\r\n *            - CSS and MCO1 OFF\r\n *            - All interrupts disabled\r\n *            - All flags are cleared\r\n * @note   This function does not modify the configuration of the\r\n *            - Peripheral clocks\r\n *            - LSI, LSE and RTC clocks\r\n * @retval HAL_StatusTypeDef\r\n */\r\nHAL_StatusTypeDef HAL_RCC_DeInit(void) {\r\n  uint32_t tickstart;\r\n\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Set HSION bit */\r\n  SET_BIT(RCC->CR, RCC_CR_HSION);\r\n\r\n  /* Wait till HSI is ready */\r\n  while (READ_BIT(RCC->CR, RCC_CR_HSIRDY) == RESET) {\r\n    if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Set HSITRIM bits to the reset value */\r\n  MODIFY_REG(RCC->CR, RCC_CR_HSITRIM, (0x10U << RCC_CR_HSITRIM_Pos));\r\n\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Reset CFGR register */\r\n  CLEAR_REG(RCC->CFGR);\r\n\r\n  /* Wait till clock switch is ready */\r\n  while (READ_BIT(RCC->CFGR, RCC_CFGR_SWS) != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Update the SystemCoreClock global variable */\r\n  SystemCoreClock = HSI_VALUE;\r\n\r\n  /* Adapt Systick interrupt period */\r\n  if (HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Second step is to clear PLLON bit */\r\n  CLEAR_BIT(RCC->CR, RCC_CR_PLLON);\r\n\r\n  /* Wait till PLL is disabled */\r\n  while (READ_BIT(RCC->CR, RCC_CR_PLLRDY) != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Ensure to reset PLLSRC and PLLMUL bits */\r\n  CLEAR_REG(RCC->CFGR);\r\n\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Reset HSEON & CSSON bits */\r\n  CLEAR_BIT(RCC->CR, RCC_CR_HSEON | RCC_CR_CSSON);\r\n\r\n  /* Wait till HSE is disabled */\r\n  while (READ_BIT(RCC->CR, RCC_CR_HSERDY) != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n\r\n  /* Reset HSEBYP bit */\r\n  CLEAR_BIT(RCC->CR, RCC_CR_HSEBYP);\r\n\r\n#if defined(RCC_PLL2_SUPPORT)\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Clear PLL2ON bit */\r\n  CLEAR_BIT(RCC->CR, RCC_CR_PLL2ON);\r\n\r\n  /* Wait till PLL2 is disabled */\r\n  while (READ_BIT(RCC->CR, RCC_CR_PLL2RDY) != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n#endif /* RCC_PLL2_SUPPORT */\r\n\r\n#if defined(RCC_PLLI2S_SUPPORT)\r\n  /* Get Start Tick */\r\n  tickstart = HAL_GetTick();\r\n\r\n  /* Clear PLL3ON bit */\r\n  CLEAR_BIT(RCC->CR, RCC_CR_PLL3ON);\r\n\r\n  /* Wait till PLL3 is disabled */\r\n  while (READ_BIT(RCC->CR, RCC_CR_PLL3RDY) != RESET) {\r\n    if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) {\r\n      return HAL_TIMEOUT;\r\n    }\r\n  }\r\n#endif /* RCC_PLLI2S_SUPPORT */\r\n\r\n#if defined(RCC_CFGR2_PREDIV1)\r\n  /* Reset CFGR2 register */\r\n  CLEAR_REG(RCC->CFGR2);\r\n#endif /* RCC_CFGR2_PREDIV1 */\r\n\r\n  /* Reset all CSR flags */\r\n  SET_BIT(RCC->CSR, RCC_CSR_RMVF);\r\n\r\n  /* Disable all interrupts */\r\n  CLEAR_REG(RCC->CIR);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the RCC Oscillators according to the specified parameters in the\r\n *         RCC_OscInitTypeDef.\r\n * @param  RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that\r\n *         contains the configuration information for the RCC Oscillators.\r\n * @note   The PLL is not disabled when used as system clock.\r\n * @note   The PLL is not disabled when USB OTG FS clock is enabled (specific to devices with USB FS)\r\n * @note   Transitions LSE Bypass to LSE On and LSE On to LSE Bypass are not\r\n *         supported by this macro. User should request a transition to LSE Off\r\n *         first and then LSE On or LSE Bypass.\r\n * @note   Transition HSE Bypass to HSE On and HSE On to HSE Bypass are not\r\n *         supported by this macro. User should request a transition to HSE Off\r\n *         first and then HSE On or HSE Bypass.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(RCC_OscInitStruct != NULL);\r\n  assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));\r\n\r\n  /*------------------------------- HSE Configuration ------------------------*/\r\n  /*----------------------------- HSI Configuration --------------------------*/\r\n  if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));\r\n    assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));\r\n\r\n    /* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */\r\n    if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI) ||\r\n        ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSI_DIV2))) {\r\n      /* When HSI is used as system clock it will not disabled */\r\n      if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON)) {\r\n        return HAL_ERROR;\r\n      }\r\n      /* Otherwise, just the calibration is allowed */\r\n      else {\r\n        /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/\r\n        __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);\r\n      }\r\n    } else {\r\n      /* Check the HSI State */\r\n      if (RCC_OscInitStruct->HSIState != RCC_HSI_OFF) {\r\n        /* Enable the Internal High Speed oscillator (HSI). */\r\n        __HAL_RCC_HSI_ENABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till HSI is ready */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) {\r\n          if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n\r\n        /* Adjusts the Internal High Speed oscillator (HSI) calibration value.*/\r\n        __HAL_RCC_HSI_CALIBRATIONVALUE_ADJUST(RCC_OscInitStruct->HSICalibrationValue);\r\n      } else {\r\n        /* Disable the Internal High Speed oscillator (HSI). */\r\n        __HAL_RCC_HSI_DISABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till HSI is disabled */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) {\r\n          if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n  /*------------------------------ LSI Configuration -------------------------*/\r\n\r\n  /*------------------------------ LSE Configuration -------------------------*/\r\n\r\n#if defined(RCC_CR_PLL2ON)\r\n  /*-------------------------------- PLL2 Configuration -----------------------*/\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_PLL2(RCC_OscInitStruct->PLL2.PLL2State));\r\n  if ((RCC_OscInitStruct->PLL2.PLL2State) != RCC_PLL2_NONE) {\r\n    /* This bit can not be cleared if the PLL2 clock is used indirectly as system\r\n      clock (i.e. it is used as PLL clock entry that is used as system clock). */\r\n    if ((__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE) && (__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) &&\r\n        ((READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) == RCC_CFGR2_PREDIV1SRC_PLL2)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      if ((RCC_OscInitStruct->PLL2.PLL2State) == RCC_PLL2_ON) {\r\n        /* Check the parameters */\r\n        assert_param(IS_RCC_PLL2_MUL(RCC_OscInitStruct->PLL2.PLL2MUL));\r\n        assert_param(IS_RCC_HSE_PREDIV2(RCC_OscInitStruct->PLL2.HSEPrediv2Value));\r\n\r\n        /* Prediv2 can be written only when the PLLI2S is disabled. */\r\n        /* Return an error only if new value is different from the programmed value */\r\n        if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON) && (__HAL_RCC_HSE_GET_PREDIV2() != RCC_OscInitStruct->PLL2.HSEPrediv2Value)) {\r\n          return HAL_ERROR;\r\n        }\r\n\r\n        /* Disable the main PLL2. */\r\n        __HAL_RCC_PLL2_DISABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL2 is disabled */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n\r\n        /* Configure the HSE prediv2 factor --------------------------------*/\r\n        __HAL_RCC_HSE_PREDIV2_CONFIG(RCC_OscInitStruct->PLL2.HSEPrediv2Value);\r\n\r\n        /* Configure the main PLL2 multiplication factors. */\r\n        __HAL_RCC_PLL2_CONFIG(RCC_OscInitStruct->PLL2.PLL2MUL);\r\n\r\n        /* Enable the main PLL2. */\r\n        __HAL_RCC_PLL2_ENABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL2 is ready */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      } else {\r\n        /* Set PREDIV1 source to HSE */\r\n        CLEAR_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC);\r\n\r\n        /* Disable the main PLL2. */\r\n        __HAL_RCC_PLL2_DISABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL2 is disabled */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n#endif /* RCC_CR_PLL2ON */\r\n  /*-------------------------------- PLL Configuration -----------------------*/\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_PLL(RCC_OscInitStruct->PLL.PLLState));\r\n  if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE) {\r\n    /* Check if the PLL is used as system clock or not */\r\n    if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK) {\r\n      if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON) {\r\n        /* Check the parameters */\r\n        assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource));\r\n        assert_param(IS_RCC_PLL_MUL(RCC_OscInitStruct->PLL.PLLMUL));\r\n\r\n        /* Disable the main PLL. */\r\n        __HAL_RCC_PLL_DISABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL is disabled */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n\r\n        /* Configure the HSE prediv factor --------------------------------*/\r\n        /* It can be written only when the PLL is disabled. Not used in PLL source is different than HSE */\r\n        if (RCC_OscInitStruct->PLL.PLLSource == RCC_PLLSOURCE_HSE) {\r\n          /* Check the parameter */\r\n          assert_param(IS_RCC_HSE_PREDIV(RCC_OscInitStruct->HSEPredivValue));\r\n#if defined(RCC_CFGR2_PREDIV1SRC)\r\n          assert_param(IS_RCC_PREDIV1_SOURCE(RCC_OscInitStruct->Prediv1Source));\r\n\r\n          /* Set PREDIV1 source */\r\n          SET_BIT(RCC->CFGR2, RCC_OscInitStruct->Prediv1Source);\r\n#endif /* RCC_CFGR2_PREDIV1SRC */\r\n\r\n          /* Set PREDIV1 Value */\r\n          __HAL_RCC_HSE_PREDIV_CONFIG(RCC_OscInitStruct->HSEPredivValue);\r\n        }\r\n\r\n        /* Configure the main PLL clock source and multiplication factors. */\r\n        __HAL_RCC_PLL_CONFIG(RCC_OscInitStruct->PLL.PLLSource, RCC_OscInitStruct->PLL.PLLMUL);\r\n        /* Enable the main PLL. */\r\n        __HAL_RCC_PLL_ENABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL is ready */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      } else {\r\n        /* Disable the main PLL. */\r\n        __HAL_RCC_PLL_DISABLE();\r\n\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till PLL is disabled */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET) {\r\n          if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      }\r\n    } else {\r\n      return HAL_ERROR;\r\n    }\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the CPU, AHB and APB buses clocks according to the specified\r\n *         parameters in the RCC_ClkInitStruct.\r\n * @param  RCC_ClkInitStruct pointer to an RCC_OscInitTypeDef structure that\r\n *         contains the configuration information for the RCC peripheral.\r\n * @param  FLatency FLASH Latency\r\n *          The value of this parameter depend on device used within the same series\r\n * @note   The SystemCoreClock CMSIS variable is used to store System Clock Frequency\r\n *         and updated by @ref HAL_RCC_GetHCLKFreq() function called within this function\r\n *\r\n * @note   The HSI is used (enabled by hardware) as system clock source after\r\n *         start-up from Reset, wake-up from STOP and STANDBY mode, or in case\r\n *         of failure of the HSE used directly or indirectly as system clock\r\n *         (if the Clock Security System CSS is enabled).\r\n *\r\n * @note   A switch from one clock source to another occurs only if the target\r\n *         clock source is ready (clock stable after start-up delay or PLL locked).\r\n *         If a clock source which is not yet ready is selected, the switch will\r\n *         occur when the clock source will be ready.\r\n *         You can use @ref HAL_RCC_GetClockConfig() function to know which clock is\r\n *         currently used as system clock source.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t FLatency) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(RCC_ClkInitStruct != NULL);\r\n  assert_param(IS_RCC_CLOCKTYPE(RCC_ClkInitStruct->ClockType));\r\n  assert_param(IS_FLASH_LATENCY(FLatency));\r\n\r\n  /* To correctly read data from FLASH memory, the number of wait states (LATENCY)\r\n  must be correctly programmed according to the frequency of the CPU clock\r\n    (HCLK) of the device. */\r\n\r\n#if defined(FLASH_ACR_LATENCY)\r\n  /* Increasing the number of wait states because of higher CPU frequency */\r\n  if (FLatency > (FLASH->ACR & FLASH_ACR_LATENCY)) {\r\n    /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */\r\n    __HAL_FLASH_SET_LATENCY(FLatency);\r\n\r\n    /* Check that the new number of wait states is taken into account to access the Flash\r\n    memory by reading the FLASH_ACR register */\r\n    if ((FLASH->ACR & FLASH_ACR_LATENCY) != FLatency) {\r\n      return HAL_ERROR;\r\n    }\r\n  }\r\n\r\n#endif /* FLASH_ACR_LATENCY */\r\n  /*-------------------------- HCLK Configuration --------------------------*/\r\n  if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK) {\r\n    /* Set the highest APBx dividers in order to ensure that we do not go through\r\n    a non-spec phase whatever we decrease or increase HCLK. */\r\n    if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) {\r\n      MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16);\r\n    }\r\n\r\n    if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) {\r\n      MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3));\r\n    }\r\n\r\n    /* Set the new HCLK clock divider */\r\n    assert_param(IS_RCC_HCLK(RCC_ClkInitStruct->AHBCLKDivider));\r\n    MODIFY_REG(RCC->CFGR, RCC_CFGR_HPRE, RCC_ClkInitStruct->AHBCLKDivider);\r\n  }\r\n\r\n  /*------------------------- SYSCLK Configuration ---------------------------*/\r\n  if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK) {\r\n    assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));\r\n\r\n    /* HSE is selected as System Clock Source */\r\n    if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) {\r\n      /* Check the HSE ready flag */\r\n      if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET) {\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n    /* PLL is selected as System Clock Source */\r\n    else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) {\r\n      /* Check the PLL ready flag */\r\n      if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET) {\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n    /* HSI is selected as System Clock Source */\r\n    else {\r\n      /* Check the HSI ready flag */\r\n      if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET) {\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n    __HAL_RCC_SYSCLK_CONFIG(RCC_ClkInitStruct->SYSCLKSource);\r\n\r\n    /* Get Start Tick */\r\n    tickstart = HAL_GetTick();\r\n\r\n    if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE) {\r\n      while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_HSE) {\r\n        if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    } else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK) {\r\n      while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK) {\r\n        if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    } else {\r\n      while (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_HSI) {\r\n        if ((HAL_GetTick() - tickstart) > CLOCKSWITCH_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n  }\r\n#if defined(FLASH_ACR_LATENCY)\r\n  /* Decreasing the number of wait states because of lower CPU frequency */\r\n  if (FLatency < (FLASH->ACR & FLASH_ACR_LATENCY)) {\r\n    /* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */\r\n    __HAL_FLASH_SET_LATENCY(FLatency);\r\n\r\n    /* Check that the new number of wait states is taken into account to access the Flash\r\n    memory by reading the FLASH_ACR register */\r\n    if ((FLASH->ACR & FLASH_ACR_LATENCY) != FLatency) {\r\n      return HAL_ERROR;\r\n    }\r\n  }\r\n#endif /* FLASH_ACR_LATENCY */\r\n\r\n  /*-------------------------- PCLK1 Configuration ---------------------------*/\r\n  if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1) {\r\n    assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider));\r\n    MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider);\r\n  }\r\n\r\n  /*-------------------------- PCLK2 Configuration ---------------------------*/\r\n  if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2) {\r\n    assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider));\r\n    MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3));\r\n  }\r\n\r\n  /* Update the SystemCoreClock global variable */\r\n  SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos];\r\n\r\n  /* Configure the source of time base considering new system clocks settings*/\r\n  HAL_InitTick(TICK_INT_PRIORITY);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCC_Exported_Functions_Group2 Peripheral Control functions\r\n  *  @brief   RCC clocks control functions\r\n  *\r\n  @verbatim\r\n  ===============================================================================\r\n                  ##### Peripheral Control functions #####\r\n  ===============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the RCC Clocks\r\n    frequencies.\r\n\r\n  @endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n  * @brief  Selects the clock source to output on MCO pin.\r\n  * @note   MCO pin should be configured in alternate function mode.\r\n  * @param  RCC_MCOx specifies the output direction for the clock source.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_MCO1 Clock source to output on MCO1 pin(PA8).\r\n  * @param  RCC_MCOSource specifies the clock source to output.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_MCO1SOURCE_NOCLOCK     No clock selected as MCO clock\r\n  *            @arg @ref RCC_MCO1SOURCE_SYSCLK      System clock selected as MCO clock\r\n  *            @arg @ref RCC_MCO1SOURCE_HSI         HSI selected as MCO clock\r\n  *            @arg @ref RCC_MCO1SOURCE_HSE         HSE selected as MCO clock\r\n  @if STM32F105xC\r\n  *            @arg @ref RCC_MCO1SOURCE_PLLCLK       PLL clock divided by 2 selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL2CLK      PLL2 clock selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL3CLK_DIV2 PLL3 clock divided by 2 selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_EXT_HSE      XT1 external 3-25 MHz oscillator clock selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL3CLK      PLL3 clock selected as MCO source\r\n  @endif\r\n  @if STM32F107xC\r\n  *            @arg @ref RCC_MCO1SOURCE_PLLCLK       PLL clock divided by 2 selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL2CLK      PLL2 clock selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL3CLK_DIV2 PLL3 clock divided by 2 selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_EXT_HSE XT1  external 3-25 MHz oscillator clock selected as MCO source\r\n  *            @arg @ref RCC_MCO1SOURCE_PLL3CLK      PLL3 clock selected as MCO source\r\n  @endif\r\n  * @param  RCC_MCODiv specifies the MCO DIV.\r\n  *          This parameter can be one of the following values:\r\n  *            @arg @ref RCC_MCODIV_1 no division applied to MCO clock\r\n  * @retval None\r\n  */\r\nvoid HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv) {\r\n  GPIO_InitTypeDef gpio = {0U};\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_MCO(RCC_MCOx));\r\n  assert_param(IS_RCC_MCODIV(RCC_MCODiv));\r\n  assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource));\r\n\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(RCC_MCOx);\r\n  UNUSED(RCC_MCODiv);\r\n\r\n  /* Configure the MCO1 pin in alternate function mode */\r\n  gpio.Mode  = GPIO_MODE_AF_PP;\r\n  gpio.Speed = GPIO_SPEED_FREQ_HIGH;\r\n  gpio.Pull  = GPIO_NOPULL;\r\n  gpio.Pin   = MCO1_PIN;\r\n\r\n  /* MCO1 Clock Enable */\r\n  MCO1_CLK_ENABLE();\r\n\r\n  HAL_GPIO_Init(MCO1_GPIO_PORT, &gpio);\r\n\r\n  /* Configure the MCO clock source */\r\n  __HAL_RCC_MCO1_CONFIG(RCC_MCOSource, RCC_MCODiv);\r\n}\r\n\r\n/**\r\n * @brief  Enables the Clock Security System.\r\n * @note   If a failure is detected on the HSE oscillator clock, this oscillator\r\n *         is automatically disabled and an interrupt is generated to inform the\r\n *         software about the failure (Clock Security System Interrupt, CSSI),\r\n *         allowing the MCU to perform rescue operations. The CSSI is linked to\r\n *         the Cortex-M3 NMI (Non-Maskable Interrupt) exception vector.\r\n * @retval None\r\n */\r\nvoid HAL_RCC_EnableCSS(void) { *(__IO uint32_t *)RCC_CR_CSSON_BB = (uint32_t)ENABLE; }\r\n\r\n/**\r\n * @brief  Disables the Clock Security System.\r\n * @retval None\r\n */\r\nvoid HAL_RCC_DisableCSS(void) { *(__IO uint32_t *)RCC_CR_CSSON_BB = (uint32_t)DISABLE; }\r\n\r\n/**\r\n * @brief  Returns the SYSCLK frequency\r\n * @note   The system frequency computed by this function is not the real\r\n *         frequency in the chip. It is calculated based on the predefined\r\n *         constant and the selected clock source:\r\n * @note     If SYSCLK source is HSI, function returns values based on HSI_VALUE(*)\r\n * @note     If SYSCLK source is HSE, function returns a value based on HSE_VALUE\r\n *           divided by PREDIV factor(**)\r\n * @note     If SYSCLK source is PLL, function returns a value based on HSE_VALUE\r\n *           divided by PREDIV factor(**) or HSI_VALUE(*) multiplied by the PLL factor.\r\n * @note     (*) HSI_VALUE is a constant defined in stm32f1xx_hal_conf.h file (default value\r\n *               8 MHz) but the real value may vary depending on the variations\r\n *               in voltage and temperature.\r\n * @note     (**) HSE_VALUE is a constant defined in stm32f1xx_hal_conf.h file (default value\r\n *                8 MHz), user has to ensure that HSE_VALUE is same as the real\r\n *                frequency of the crystal used. Otherwise, this function may\r\n *                have wrong result.\r\n *\r\n * @note   The result of this function could be not correct when using fractional\r\n *         value for HSE crystal.\r\n *\r\n * @note   This function can be used by the user application to compute the\r\n *         baud-rate for the communication peripherals or configure other parameters.\r\n *\r\n * @note   Each time SYSCLK changes, this function must be called to update the\r\n *         right SYSCLK value. Otherwise, any configuration based on this function will be incorrect.\r\n *\r\n * @retval SYSCLK frequency\r\n */\r\nuint32_t HAL_RCC_GetSysClockFreq(void) {\r\n#if defined(RCC_CFGR2_PREDIV1SRC)\r\n  const uint8_t aPLLMULFactorTable[14] = {0, 0, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 13};\r\n  const uint8_t aPredivFactorTable[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};\r\n#else\r\n  const uint8_t aPLLMULFactorTable[16] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16};\r\n#if defined(RCC_CFGR2_PREDIV1)\r\n  const uint8_t aPredivFactorTable[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};\r\n#else\r\n  const uint8_t aPredivFactorTable[2] = {1, 2};\r\n#endif /*RCC_CFGR2_PREDIV1*/\r\n\r\n#endif\r\n  uint32_t tmpreg = 0U, prediv = 0U, pllclk = 0U, pllmul = 0U;\r\n  uint32_t sysclockfreq = 0U;\r\n#if defined(RCC_CFGR2_PREDIV1SRC)\r\n  uint32_t prediv2 = 0U, pll2mul = 0U;\r\n#endif /*RCC_CFGR2_PREDIV1SRC*/\r\n\r\n  tmpreg = RCC->CFGR;\r\n\r\n  /* Get SYSCLK source -------------------------------------------------------*/\r\n  switch (tmpreg & RCC_CFGR_SWS) {\r\n  case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock */\r\n  {\r\n    sysclockfreq = HSE_VALUE;\r\n    break;\r\n  }\r\n  case RCC_SYSCLKSOURCE_STATUS_PLLCLK: /* PLL used as system clock */\r\n  {\r\n    pllmul = aPLLMULFactorTable[(uint32_t)(tmpreg & RCC_CFGR_PLLMULL) >> RCC_CFGR_PLLMULL_Pos];\r\n    if ((tmpreg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) {\r\n#if defined(RCC_CFGR2_PREDIV1)\r\n      prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV1) >> RCC_CFGR2_PREDIV1_Pos];\r\n#else\r\n      prediv = aPredivFactorTable[(uint32_t)(RCC->CFGR & RCC_CFGR_PLLXTPRE) >> RCC_CFGR_PLLXTPRE_Pos];\r\n#endif /*RCC_CFGR2_PREDIV1*/\r\n#if defined(RCC_CFGR2_PREDIV1SRC)\r\n\r\n      if (HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) {\r\n        /* PLL2 selected as Prediv1 source */\r\n        /* PLLCLK = PLL2CLK / PREDIV1 * PLLMUL with PLL2CLK = HSE/PREDIV2 * PLL2MUL */\r\n        prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1;\r\n        pll2mul = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> RCC_CFGR2_PLL2MUL_Pos) + 2;\r\n        pllclk  = (uint32_t)(((uint64_t)HSE_VALUE * (uint64_t)pll2mul * (uint64_t)pllmul) / ((uint64_t)prediv2 * (uint64_t)prediv));\r\n      } else {\r\n        /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */\r\n        pllclk = (uint32_t)((HSE_VALUE * pllmul) / prediv);\r\n      }\r\n\r\n      /* If PLLMUL was set to 13 means that it was to cover the case PLLMUL 6.5 (avoid using float) */\r\n      /* In this case need to divide pllclk by 2 */\r\n      if (pllmul == aPLLMULFactorTable[(uint32_t)(RCC_CFGR_PLLMULL6_5) >> RCC_CFGR_PLLMULL_Pos]) {\r\n        pllclk = pllclk / 2;\r\n      }\r\n#else\r\n      /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */\r\n      pllclk = (uint32_t)((HSE_VALUE * pllmul) / prediv);\r\n#endif /*RCC_CFGR2_PREDIV1SRC*/\r\n    } else {\r\n      /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */\r\n      pllclk = (uint32_t)((HSI_VALUE >> 1) * pllmul);\r\n    }\r\n    sysclockfreq = pllclk;\r\n    break;\r\n  }\r\n  case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */\r\n  default:                          /* HSI used as system clock */\r\n  {\r\n    sysclockfreq = HSI_VALUE;\r\n    break;\r\n  }\r\n  }\r\n  return sysclockfreq;\r\n}\r\n\r\n/**\r\n * @brief  Returns the HCLK frequency\r\n * @note   Each time HCLK changes, this function must be called to update the\r\n *         right HCLK value. Otherwise, any configuration based on this function will be incorrect.\r\n *\r\n * @note   The SystemCoreClock CMSIS variable is used to store System Clock Frequency\r\n *         and updated within this function\r\n * @retval HCLK frequency\r\n */\r\nuint32_t HAL_RCC_GetHCLKFreq(void) { return SystemCoreClock; }\r\n\r\n/**\r\n * @brief  Returns the PCLK1 frequency\r\n * @note   Each time PCLK1 changes, this function must be called to update the\r\n *         right PCLK1 value. Otherwise, any configuration based on this function will be incorrect.\r\n * @retval PCLK1 frequency\r\n */\r\nuint32_t HAL_RCC_GetPCLK1Freq(void) {\r\n  /* Get HCLK source and Compute PCLK1 frequency ---------------------------*/\r\n  return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]);\r\n}\r\n\r\n/**\r\n * @brief  Returns the PCLK2 frequency\r\n * @note   Each time PCLK2 changes, this function must be called to update the\r\n *         right PCLK2 value. Otherwise, any configuration based on this function will be incorrect.\r\n * @retval PCLK2 frequency\r\n */\r\nuint32_t HAL_RCC_GetPCLK2Freq(void) {\r\n  /* Get HCLK source and Compute PCLK2 frequency ---------------------------*/\r\n  return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_Pos]);\r\n}\r\n\r\n/**\r\n * @brief  Configures the RCC_OscInitStruct according to the internal\r\n * RCC configuration registers.\r\n * @param  RCC_OscInitStruct pointer to an RCC_OscInitTypeDef structure that\r\n * will be configured.\r\n * @retval None\r\n */\r\nvoid HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct) {\r\n  /* Check the parameters */\r\n  assert_param(RCC_OscInitStruct != NULL);\r\n\r\n  /* Set all possible values for the Oscillator type parameter ---------------*/\r\n  RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI;\r\n\r\n#if defined(RCC_CFGR2_PREDIV1SRC)\r\n  /* Get the Prediv1 source --------------------------------------------------*/\r\n  RCC_OscInitStruct->Prediv1Source = READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC);\r\n#endif /* RCC_CFGR2_PREDIV1SRC */\r\n\r\n  /* Get the HSE configuration -----------------------------------------------*/\r\n  if ((RCC->CR & RCC_CR_HSEBYP) == RCC_CR_HSEBYP) {\r\n    RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS;\r\n  } else if ((RCC->CR & RCC_CR_HSEON) == RCC_CR_HSEON) {\r\n    RCC_OscInitStruct->HSEState = RCC_HSE_ON;\r\n  } else {\r\n    RCC_OscInitStruct->HSEState = RCC_HSE_OFF;\r\n  }\r\n  RCC_OscInitStruct->HSEPredivValue = __HAL_RCC_HSE_GET_PREDIV();\r\n\r\n  /* Get the HSI configuration -----------------------------------------------*/\r\n  if ((RCC->CR & RCC_CR_HSION) == RCC_CR_HSION) {\r\n    RCC_OscInitStruct->HSIState = RCC_HSI_ON;\r\n  } else {\r\n    RCC_OscInitStruct->HSIState = RCC_HSI_OFF;\r\n  }\r\n\r\n  RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR & RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);\r\n\r\n  /* Get the LSE configuration -----------------------------------------------*/\r\n  if ((RCC->BDCR & RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP) {\r\n    RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS;\r\n  } else if ((RCC->BDCR & RCC_BDCR_LSEON) == RCC_BDCR_LSEON) {\r\n    RCC_OscInitStruct->LSEState = RCC_LSE_ON;\r\n  } else {\r\n    RCC_OscInitStruct->LSEState = RCC_LSE_OFF;\r\n  }\r\n\r\n  /* Get the LSI configuration -----------------------------------------------*/\r\n  if ((RCC->CSR & RCC_CSR_LSION) == RCC_CSR_LSION) {\r\n    RCC_OscInitStruct->LSIState = RCC_LSI_ON;\r\n  } else {\r\n    RCC_OscInitStruct->LSIState = RCC_LSI_OFF;\r\n  }\r\n\r\n  /* Get the PLL configuration -----------------------------------------------*/\r\n  if ((RCC->CR & RCC_CR_PLLON) == RCC_CR_PLLON) {\r\n    RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON;\r\n  } else {\r\n    RCC_OscInitStruct->PLL.PLLState = RCC_PLL_OFF;\r\n  }\r\n  RCC_OscInitStruct->PLL.PLLSource = (uint32_t)(RCC->CFGR & RCC_CFGR_PLLSRC);\r\n  RCC_OscInitStruct->PLL.PLLMUL    = (uint32_t)(RCC->CFGR & RCC_CFGR_PLLMULL);\r\n#if defined(RCC_CR_PLL2ON)\r\n  /* Get the PLL2 configuration -----------------------------------------------*/\r\n  if ((RCC->CR & RCC_CR_PLL2ON) == RCC_CR_PLL2ON) {\r\n    RCC_OscInitStruct->PLL2.PLL2State = RCC_PLL2_ON;\r\n  } else {\r\n    RCC_OscInitStruct->PLL2.PLL2State = RCC_PLL2_OFF;\r\n  }\r\n  RCC_OscInitStruct->PLL2.HSEPrediv2Value = __HAL_RCC_HSE_GET_PREDIV2();\r\n  RCC_OscInitStruct->PLL2.PLL2MUL         = (uint32_t)(RCC->CFGR2 & RCC_CFGR2_PLL2MUL);\r\n#endif /* RCC_CR_PLL2ON */\r\n}\r\n\r\n/**\r\n * @brief  Get the RCC_ClkInitStruct according to the internal\r\n * RCC configuration registers.\r\n * @param  RCC_ClkInitStruct pointer to an RCC_ClkInitTypeDef structure that\r\n * contains the current clock configuration.\r\n * @param  pFLatency Pointer on the Flash Latency.\r\n * @retval None\r\n */\r\nvoid HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pFLatency) {\r\n  /* Check the parameters */\r\n  assert_param(RCC_ClkInitStruct != NULL);\r\n  assert_param(pFLatency != NULL);\r\n\r\n  /* Set all possible values for the Clock type parameter --------------------*/\r\n  RCC_ClkInitStruct->ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;\r\n\r\n  /* Get the SYSCLK configuration --------------------------------------------*/\r\n  RCC_ClkInitStruct->SYSCLKSource = (uint32_t)(RCC->CFGR & RCC_CFGR_SW);\r\n\r\n  /* Get the HCLK configuration ----------------------------------------------*/\r\n  RCC_ClkInitStruct->AHBCLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_HPRE);\r\n\r\n  /* Get the APB1 configuration ----------------------------------------------*/\r\n  RCC_ClkInitStruct->APB1CLKDivider = (uint32_t)(RCC->CFGR & RCC_CFGR_PPRE1);\r\n\r\n  /* Get the APB2 configuration ----------------------------------------------*/\r\n  RCC_ClkInitStruct->APB2CLKDivider = (uint32_t)((RCC->CFGR & RCC_CFGR_PPRE2) >> 3);\r\n\r\n#if defined(FLASH_ACR_LATENCY)\r\n  /* Get the Flash Wait State (Latency) configuration ------------------------*/\r\n  *pFLatency = (uint32_t)(FLASH->ACR & FLASH_ACR_LATENCY);\r\n#else\r\n  /* For VALUE lines devices, only LATENCY_0 can be set*/\r\n  *pFLatency = (uint32_t)FLASH_LATENCY_0;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief This function handles the RCC CSS interrupt request.\r\n * @note This API should be called under the NMI_Handler().\r\n * @retval None\r\n */\r\nvoid HAL_RCC_NMI_IRQHandler(void) {\r\n  /* Check RCC CSSF flag  */\r\n  if (__HAL_RCC_GET_IT(RCC_IT_CSS)) {\r\n    /* RCC Clock Security System interrupt user callback */\r\n    HAL_RCC_CSSCallback();\r\n\r\n    /* Clear RCC CSS pending bit */\r\n    __HAL_RCC_CLEAR_IT(RCC_IT_CSS);\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  RCC Clock Security System interrupt callback\r\n * @retval none\r\n */\r\n__weak void HAL_RCC_CSSCallback(void) {\r\n  /* NOTE : This function Should not be modified, when the callback is needed,\r\n    the HAL_RCC_CSSCallback could be implemented in the user file\r\n    */\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_RCC_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_rcc_ex.c\r\n * @author  MCD Application Team\r\n * @brief   Extended RCC HAL module driver.\r\n *          This file provides firmware functions to manage the following\r\n *          functionalities RCC extension peripheral:\r\n *           + Extended Peripheral Control functions\r\n *\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_RCC_MODULE_ENABLED\r\n\r\n/** @defgroup RCCEx RCCEx\r\n * @brief RCC Extension HAL module driver.\r\n * @{\r\n */\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/** @defgroup RCCEx_Private_Constants RCCEx Private Constants\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private macro -------------------------------------------------------------*/\r\n/** @defgroup RCCEx_Private_Macros RCCEx Private Macros\r\n * @{\r\n */\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n\r\n/** @defgroup RCCEx_Exported_Functions RCCEx Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup RCCEx_Exported_Functions_Group1 Peripheral Control functions\r\n  *  @brief  Extended Peripheral Control functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                ##### Extended Peripheral Control functions  #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the RCC Clocks\r\n    frequencies.\r\n    [..]\r\n    (@) Important note: Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to\r\n        select the RTC clock source; in this case the Backup domain will be reset in\r\n        order to modify the RTC Clock source, as consequence RTC registers (including\r\n        the backup registers) are set to their reset values.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initializes the RCC extended peripherals clocks according to the specified parameters in the\r\n *         RCC_PeriphCLKInitTypeDef.\r\n * @param  PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that\r\n *         contains the configuration information for the Extended Peripherals clocks(RTC clock).\r\n *\r\n * @note   Care must be taken when HAL_RCCEx_PeriphCLKConfig() is used to select\r\n *         the RTC clock source; in this case the Backup domain will be reset in\r\n *         order to modify the RTC Clock source, as consequence RTC registers (including\r\n *         the backup registers) are set to their reset values.\r\n *\r\n * @note   In case of STM32F105xC or STM32F107xC devices, PLLI2S will be enabled if requested on\r\n *         one of 2 I2S interfaces. When PLLI2S is enabled, you need to call HAL_RCCEx_DisablePLLI2S to\r\n *         manually disable it.\r\n *\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) {\r\n  uint32_t tickstart = 0U, temp_reg = 0U;\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t pllactive = 0U;\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_PERIPHCLOCK(PeriphClkInit->PeriphClockSelection));\r\n\r\n  /*------------------------------- RTC/LCD Configuration ------------------------*/\r\n  if ((((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_RTC) == RCC_PERIPHCLK_RTC)) {\r\n    /* check for RTC Parameters used to output RTCCLK */\r\n    assert_param(IS_RCC_RTCCLKSOURCE(PeriphClkInit->RTCClockSelection));\r\n\r\n    FlagStatus pwrclkchanged = RESET;\r\n\r\n    /* As soon as function is called to change RTC clock source, activation of the\r\n       power domain is done. */\r\n    /* Requires to enable write access to Backup Domain of necessary */\r\n    if (__HAL_RCC_PWR_IS_CLK_DISABLED()) {\r\n      __HAL_RCC_PWR_CLK_ENABLE();\r\n      pwrclkchanged = SET;\r\n    }\r\n\r\n    if (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) {\r\n      /* Enable write access to Backup domain */\r\n      SET_BIT(PWR->CR, PWR_CR_DBP);\r\n\r\n      /* Wait for Backup domain Write protection disable */\r\n      tickstart = HAL_GetTick();\r\n\r\n      while (HAL_IS_BIT_CLR(PWR->CR, PWR_CR_DBP)) {\r\n        if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    }\r\n\r\n    /* Reset the Backup domain only if the RTC Clock source selection is modified from reset value */\r\n    temp_reg = (RCC->BDCR & RCC_BDCR_RTCSEL);\r\n    if ((temp_reg != 0x00000000U) && (temp_reg != (PeriphClkInit->RTCClockSelection & RCC_BDCR_RTCSEL))) {\r\n      /* Store the content of BDCR register before the reset of Backup Domain */\r\n      temp_reg = (RCC->BDCR & ~(RCC_BDCR_RTCSEL));\r\n      /* RTC Clock selection can be changed only if the Backup Domain is reset */\r\n      __HAL_RCC_BACKUPRESET_FORCE();\r\n      __HAL_RCC_BACKUPRESET_RELEASE();\r\n      /* Restore the Content of BDCR register */\r\n      RCC->BDCR = temp_reg;\r\n\r\n      /* Wait for LSERDY if LSE was enabled */\r\n      if (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSEON)) {\r\n        /* Get Start Tick */\r\n        tickstart = HAL_GetTick();\r\n\r\n        /* Wait till LSE is ready */\r\n        while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET) {\r\n          if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE) {\r\n            return HAL_TIMEOUT;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    __HAL_RCC_RTC_CONFIG(PeriphClkInit->RTCClockSelection);\r\n\r\n    /* Require to disable power clock if necessary */\r\n    if (pwrclkchanged == SET) {\r\n      __HAL_RCC_PWR_CLK_DISABLE();\r\n    }\r\n  }\r\n\r\n  /*------------------------------ ADC clock Configuration ------------------*/\r\n  if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_ADC) == RCC_PERIPHCLK_ADC) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_ADCPLLCLK_DIV(PeriphClkInit->AdcClockSelection));\r\n\r\n    /* Configure the ADC clock source */\r\n    __HAL_RCC_ADC_CONFIG(PeriphClkInit->AdcClockSelection);\r\n  }\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  /*------------------------------ I2S2 Configuration ------------------------*/\r\n  if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S2) == RCC_PERIPHCLK_I2S2) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_I2S2CLKSOURCE(PeriphClkInit->I2s2ClockSelection));\r\n\r\n    /* Configure the I2S2 clock source */\r\n    __HAL_RCC_I2S2_CONFIG(PeriphClkInit->I2s2ClockSelection);\r\n  }\r\n\r\n  /*------------------------------ I2S3 Configuration ------------------------*/\r\n  if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_I2S3) == RCC_PERIPHCLK_I2S3) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_I2S3CLKSOURCE(PeriphClkInit->I2s3ClockSelection));\r\n\r\n    /* Configure the I2S3 clock source */\r\n    __HAL_RCC_I2S3_CONFIG(PeriphClkInit->I2s3ClockSelection);\r\n  }\r\n\r\n  /*------------------------------ PLL I2S Configuration ----------------------*/\r\n  /* Check that PLLI2S need to be enabled */\r\n  if (HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_I2S2SRC) || HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_I2S3SRC)) {\r\n    /* Update flag to indicate that PLL I2S should be active */\r\n    pllactive = 1;\r\n  }\r\n\r\n  /* Check if PLL I2S need to be enabled */\r\n  if (pllactive == 1) {\r\n    /* Enable PLL I2S only if not active */\r\n    if (HAL_IS_BIT_CLR(RCC->CR, RCC_CR_PLL3ON)) {\r\n      /* Check the parameters */\r\n      assert_param(IS_RCC_PLLI2S_MUL(PeriphClkInit->PLLI2S.PLLI2SMUL));\r\n      assert_param(IS_RCC_HSE_PREDIV2(PeriphClkInit->PLLI2S.HSEPrediv2Value));\r\n\r\n      /* Prediv2 can be written only when the PLL2 is disabled. */\r\n      /* Return an error only if new value is different from the programmed value */\r\n      if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2ON) && (__HAL_RCC_HSE_GET_PREDIV2() != PeriphClkInit->PLLI2S.HSEPrediv2Value)) {\r\n        return HAL_ERROR;\r\n      }\r\n\r\n      /* Configure the HSE prediv2 factor --------------------------------*/\r\n      __HAL_RCC_HSE_PREDIV2_CONFIG(PeriphClkInit->PLLI2S.HSEPrediv2Value);\r\n\r\n      /* Configure the main PLLI2S multiplication factors. */\r\n      __HAL_RCC_PLLI2S_CONFIG(PeriphClkInit->PLLI2S.PLLI2SMUL);\r\n\r\n      /* Enable the main PLLI2S. */\r\n      __HAL_RCC_PLLI2S_ENABLE();\r\n\r\n      /* Get Start Tick*/\r\n      tickstart = HAL_GetTick();\r\n\r\n      /* Wait till PLLI2S is ready */\r\n      while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) {\r\n        if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) {\r\n          return HAL_TIMEOUT;\r\n        }\r\n      }\r\n    } else {\r\n      /* Return an error only if user wants to change the PLLI2SMUL whereas PLLI2S is active */\r\n      if (READ_BIT(RCC->CFGR2, RCC_CFGR2_PLL3MUL) != PeriphClkInit->PLLI2S.PLLI2SMUL) {\r\n        return HAL_ERROR;\r\n      }\r\n    }\r\n  }\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  /*------------------------------ USB clock Configuration ------------------*/\r\n  if (((PeriphClkInit->PeriphClockSelection) & RCC_PERIPHCLK_USB) == RCC_PERIPHCLK_USB) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_USBPLLCLK_DIV(PeriphClkInit->UsbClockSelection));\r\n\r\n    /* Configure the USB clock source */\r\n    __HAL_RCC_USB_CONFIG(PeriphClkInit->UsbClockSelection);\r\n  }\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Get the PeriphClkInit according to the internal\r\n * RCC configuration registers.\r\n * @param  PeriphClkInit pointer to an RCC_PeriphCLKInitTypeDef structure that\r\n *         returns the configuration information for the Extended Peripherals clocks(RTC, I2S, ADC clocks).\r\n * @retval None\r\n */\r\nvoid HAL_RCCEx_GetPeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit) {\r\n  uint32_t srcclk = 0U;\r\n\r\n  /* Set all possible values for the extended clock type parameter------------*/\r\n  PeriphClkInit->PeriphClockSelection = RCC_PERIPHCLK_RTC;\r\n\r\n  /* Get the RTC configuration -----------------------------------------------*/\r\n  srcclk = __HAL_RCC_GET_RTC_SOURCE();\r\n  /* Source clock is LSE or LSI*/\r\n  PeriphClkInit->RTCClockSelection = srcclk;\r\n\r\n  /* Get the ADC clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_ADC;\r\n  PeriphClkInit->AdcClockSelection = __HAL_RCC_GET_ADC_SOURCE();\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  /* Get the I2S2 clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S2;\r\n  PeriphClkInit->I2s2ClockSelection = __HAL_RCC_GET_I2S2_SOURCE();\r\n\r\n  /* Get the I2S3 clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S3;\r\n  PeriphClkInit->I2s3ClockSelection = __HAL_RCC_GET_I2S3_SOURCE();\r\n\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n  /* Get the I2S2 clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S2;\r\n  PeriphClkInit->I2s2ClockSelection = RCC_I2S2CLKSOURCE_SYSCLK;\r\n\r\n  /* Get the I2S3 clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_I2S3;\r\n  PeriphClkInit->I2s3ClockSelection = RCC_I2S3CLKSOURCE_SYSCLK;\r\n\r\n#endif /* STM32F103xE || STM32F103xG */\r\n\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  /* Get the USB clock configuration -----------------------------------------*/\r\n  PeriphClkInit->PeriphClockSelection |= RCC_PERIPHCLK_USB;\r\n  PeriphClkInit->UsbClockSelection = __HAL_RCC_GET_USB_SOURCE();\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n}\r\n\r\n/**\r\n  * @brief  Returns the peripheral clock frequency\r\n  * @note   Returns 0 if peripheral clock is unknown\r\n  * @param  PeriphClk Peripheral clock identifier\r\n  *         This parameter can be one of the following values:\r\n  *            @arg @ref RCC_PERIPHCLK_RTC  RTC peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_ADC  ADC peripheral clock\r\n  @if STM32F103xE\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  @endif\r\n  @if STM32F103xG\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  @endif\r\n  @if STM32F105xC\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_USB  USB peripheral clock\r\n  @endif\r\n  @if STM32F107xC\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S3 I2S3 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_I2S2 I2S2 peripheral clock\r\n  *            @arg @ref RCC_PERIPHCLK_USB  USB peripheral clock\r\n  @endif\r\n  @if STM32F102xx\r\n  *            @arg @ref RCC_PERIPHCLK_USB  USB peripheral clock\r\n  @endif\r\n  @if STM32F103xx\r\n  *            @arg @ref RCC_PERIPHCLK_USB  USB peripheral clock\r\n  @endif\r\n  * @retval Frequency in Hz (0: means that no available frequency for the peripheral)\r\n  */\r\nuint32_t HAL_RCCEx_GetPeriphCLKFreq(uint32_t PeriphClk) {\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  const uint8_t aPLLMULFactorTable[14] = {0, 0, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 13};\r\n  const uint8_t aPredivFactorTable[16] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};\r\n\r\n  uint32_t prediv1 = 0U, pllclk = 0U, pllmul = 0U;\r\n  uint32_t pll2mul = 0U, pll3mul = 0U, prediv2 = 0U;\r\n#endif /* STM32F105xC || STM32F107xC */\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG)\r\n  const uint8_t aPLLMULFactorTable[16] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16};\r\n  const uint8_t aPredivFactorTable[2]  = {1, 2};\r\n\r\n  uint32_t prediv1 = 0U, pllclk = 0U, pllmul = 0U;\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG */\r\n  uint32_t temp_reg = 0U, frequency = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_RCC_PERIPHCLOCK(PeriphClk));\r\n\r\n  switch (PeriphClk) {\r\n#if defined(STM32F102x6) || defined(STM32F102xB) || defined(STM32F103x6) || defined(STM32F103xB) || defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  case RCC_PERIPHCLK_USB: {\r\n    /* Get RCC configuration ------------------------------------------------------*/\r\n    temp_reg = RCC->CFGR;\r\n\r\n    /* Check if PLL is enabled */\r\n    if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLLON)) {\r\n      pllmul = aPLLMULFactorTable[(uint32_t)(temp_reg & RCC_CFGR_PLLMULL) >> RCC_CFGR_PLLMULL_Pos];\r\n      if ((temp_reg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) {\r\n#if defined(STM32F105xC) || defined(STM32F107xC) || defined(STM32F100xB) || defined(STM32F100xE)\r\n        prediv1 = aPredivFactorTable[(uint32_t)(RCC->CFGR2 & RCC_CFGR2_PREDIV1) >> RCC_CFGR2_PREDIV1_Pos];\r\n#else\r\n        prediv1 = aPredivFactorTable[(uint32_t)(RCC->CFGR & RCC_CFGR_PLLXTPRE) >> RCC_CFGR_PLLXTPRE_Pos];\r\n#endif /* STM32F105xC || STM32F107xC || STM32F100xB || STM32F100xE */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n        if (HAL_IS_BIT_SET(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) {\r\n          /* PLL2 selected as Prediv1 source */\r\n          /* PLLCLK = PLL2CLK / PREDIV1 * PLLMUL with PLL2CLK = HSE/PREDIV2 * PLL2MUL */\r\n          prediv2 = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1;\r\n          pll2mul = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> RCC_CFGR2_PLL2MUL_Pos) + 2;\r\n          pllclk  = (uint32_t)((((HSE_VALUE / prediv2) * pll2mul) / prediv1) * pllmul);\r\n        } else {\r\n          /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */\r\n          pllclk = (uint32_t)((HSE_VALUE / prediv1) * pllmul);\r\n        }\r\n\r\n        /* If PLLMUL was set to 13 means that it was to cover the case PLLMUL 6.5 (avoid using float) */\r\n        /* In this case need to divide pllclk by 2 */\r\n        if (pllmul == aPLLMULFactorTable[(uint32_t)(RCC_CFGR_PLLMULL6_5) >> RCC_CFGR_PLLMULL_Pos]) {\r\n          pllclk = pllclk / 2;\r\n        }\r\n#else\r\n        if ((temp_reg & RCC_CFGR_PLLSRC) != RCC_PLLSOURCE_HSI_DIV2) {\r\n          /* HSE used as PLL clock source : PLLCLK = HSE/PREDIV1 * PLLMUL */\r\n          pllclk = (uint32_t)((HSE_VALUE / prediv1) * pllmul);\r\n        }\r\n#endif /* STM32F105xC || STM32F107xC */\r\n      } else {\r\n        /* HSI used as PLL clock source : PLLCLK = HSI/2 * PLLMUL */\r\n        pllclk = (uint32_t)((HSI_VALUE >> 1) * pllmul);\r\n      }\r\n\r\n      /* Calcul of the USB frequency*/\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n      /* USBCLK = PLLVCO = (2 x PLLCLK) / USB prescaler */\r\n      if (__HAL_RCC_GET_USB_SOURCE() == RCC_USBCLKSOURCE_PLL_DIV2) {\r\n        /* Prescaler of 2 selected for USB */\r\n        frequency = pllclk;\r\n      } else {\r\n        /* Prescaler of 3 selected for USB */\r\n        frequency = (2 * pllclk) / 3;\r\n      }\r\n#else\r\n      /* USBCLK = PLLCLK / USB prescaler */\r\n      if (__HAL_RCC_GET_USB_SOURCE() == RCC_USBCLKSOURCE_PLL) {\r\n        /* No prescaler selected for USB */\r\n        frequency = pllclk;\r\n      } else {\r\n        /* Prescaler of 1.5 selected for USB */\r\n        frequency = (pllclk * 2) / 3;\r\n      }\r\n#endif\r\n    }\r\n    break;\r\n  }\r\n#endif /* STM32F102x6 || STM32F102xB || STM32F103x6 || STM32F103xB || STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n#if defined(STM32F103xE) || defined(STM32F103xG) || defined(STM32F105xC) || defined(STM32F107xC)\r\n  case RCC_PERIPHCLK_I2S2: {\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n    /* SYSCLK used as source clock for I2S2 */\r\n    frequency = HAL_RCC_GetSysClockFreq();\r\n#else\r\n    if (__HAL_RCC_GET_I2S2_SOURCE() == RCC_I2S2CLKSOURCE_SYSCLK) {\r\n      /* SYSCLK used as source clock for I2S2 */\r\n      frequency = HAL_RCC_GetSysClockFreq();\r\n    } else {\r\n      /* Check if PLLI2S is enabled */\r\n      if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON)) {\r\n        /* PLLI2SVCO = 2 * PLLI2SCLK = 2 * (HSE/PREDIV2 * PLL3MUL) */\r\n        prediv2   = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1;\r\n        pll3mul   = ((RCC->CFGR2 & RCC_CFGR2_PLL3MUL) >> RCC_CFGR2_PLL3MUL_Pos) + 2;\r\n        frequency = (uint32_t)(2 * ((HSE_VALUE / prediv2) * pll3mul));\r\n      }\r\n    }\r\n#endif /* STM32F103xE || STM32F103xG */\r\n    break;\r\n  }\r\n  case RCC_PERIPHCLK_I2S3: {\r\n#if defined(STM32F103xE) || defined(STM32F103xG)\r\n    /* SYSCLK used as source clock for I2S3 */\r\n    frequency = HAL_RCC_GetSysClockFreq();\r\n#else\r\n    if (__HAL_RCC_GET_I2S3_SOURCE() == RCC_I2S3CLKSOURCE_SYSCLK) {\r\n      /* SYSCLK used as source clock for I2S3 */\r\n      frequency = HAL_RCC_GetSysClockFreq();\r\n    } else {\r\n      /* Check if PLLI2S is enabled */\r\n      if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON)) {\r\n        /* PLLI2SVCO = 2 * PLLI2SCLK = 2 * (HSE/PREDIV2 * PLL3MUL) */\r\n        prediv2   = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> RCC_CFGR2_PREDIV2_Pos) + 1;\r\n        pll3mul   = ((RCC->CFGR2 & RCC_CFGR2_PLL3MUL) >> RCC_CFGR2_PLL3MUL_Pos) + 2;\r\n        frequency = (uint32_t)(2 * ((HSE_VALUE / prediv2) * pll3mul));\r\n      }\r\n    }\r\n#endif /* STM32F103xE || STM32F103xG */\r\n    break;\r\n  }\r\n#endif /* STM32F103xE || STM32F103xG || STM32F105xC || STM32F107xC */\r\n  case RCC_PERIPHCLK_RTC: {\r\n    /* Get RCC BDCR configuration ------------------------------------------------------*/\r\n    temp_reg = RCC->BDCR;\r\n\r\n    /* Check if LSE is ready if RTC clock selection is LSE */\r\n    if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_LSE) && (HAL_IS_BIT_SET(temp_reg, RCC_BDCR_LSERDY))) {\r\n      frequency = LSE_VALUE;\r\n    }\r\n    /* Check if LSI is ready if RTC clock selection is LSI */\r\n    else if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_LSI) && (HAL_IS_BIT_SET(RCC->CSR, RCC_CSR_LSIRDY))) {\r\n      frequency = LSI_VALUE;\r\n    } else if (((temp_reg & RCC_BDCR_RTCSEL) == RCC_RTCCLKSOURCE_HSE_DIV128) && (HAL_IS_BIT_SET(RCC->CR, RCC_CR_HSERDY))) {\r\n      frequency = HSE_VALUE / 128U;\r\n    }\r\n    /* Clock not enabled for RTC*/\r\n    else {\r\n      frequency = 0U;\r\n    }\r\n    break;\r\n  }\r\n  case RCC_PERIPHCLK_ADC: {\r\n    frequency = HAL_RCC_GetPCLK2Freq() / (((__HAL_RCC_GET_ADC_SOURCE() >> RCC_CFGR_ADCPRE_Pos) + 1) * 2);\r\n    break;\r\n  }\r\n  default: {\r\n    break;\r\n  }\r\n  }\r\n  return (frequency);\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n/** @defgroup RCCEx_Exported_Functions_Group2 PLLI2S Management function\r\n  *  @brief  PLLI2S Management functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                ##### Extended PLLI2S Management functions  #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the PLLI2S\r\n    activation or deactivation\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Enable PLLI2S\r\n * @param  PLLI2SInit pointer to an RCC_PLLI2SInitTypeDef structure that\r\n *         contains the configuration information for the PLLI2S\r\n * @note   The PLLI2S configuration not modified if used by I2S2 or I2S3 Interface.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_EnablePLLI2S(RCC_PLLI2SInitTypeDef *PLLI2SInit) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Check that PLL I2S has not been already enabled by I2S2 or I2S3*/\r\n  if (HAL_IS_BIT_CLR(RCC->CFGR2, RCC_CFGR2_I2S2SRC) && HAL_IS_BIT_CLR(RCC->CFGR2, RCC_CFGR2_I2S3SRC)) {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_PLLI2S_MUL(PLLI2SInit->PLLI2SMUL));\r\n    assert_param(IS_RCC_HSE_PREDIV2(PLLI2SInit->HSEPrediv2Value));\r\n\r\n    /* Prediv2 can be written only when the PLL2 is disabled. */\r\n    /* Return an error only if new value is different from the programmed value */\r\n    if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL2ON) && (__HAL_RCC_HSE_GET_PREDIV2() != PLLI2SInit->HSEPrediv2Value)) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Disable the main PLLI2S. */\r\n    __HAL_RCC_PLLI2S_DISABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLLI2S is ready */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n\r\n    /* Configure the HSE prediv2 factor --------------------------------*/\r\n    __HAL_RCC_HSE_PREDIV2_CONFIG(PLLI2SInit->HSEPrediv2Value);\r\n\r\n    /* Configure the main PLLI2S multiplication factors. */\r\n    __HAL_RCC_PLLI2S_CONFIG(PLLI2SInit->PLLI2SMUL);\r\n\r\n    /* Enable the main PLLI2S. */\r\n    __HAL_RCC_PLLI2S_ENABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLLI2S is ready */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) == RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  } else {\r\n    /* PLLI2S cannot be modified as already used by I2S2 or I2S3 */\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Disable PLLI2S\r\n * @note   PLLI2S is not disabled if used by I2S2 or I2S3 Interface.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_DisablePLLI2S(void) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* Disable PLL I2S as not requested by I2S2 or I2S3*/\r\n  if (HAL_IS_BIT_CLR(RCC->CFGR2, RCC_CFGR2_I2S2SRC) && HAL_IS_BIT_CLR(RCC->CFGR2, RCC_CFGR2_I2S3SRC)) {\r\n    /* Disable the main PLLI2S. */\r\n    __HAL_RCC_PLLI2S_DISABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLLI2S is ready */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLI2SRDY) != RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLLI2S_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  } else {\r\n    /* PLLI2S is currently used by I2S2 or I2S3. Cannot be disabled.*/\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup RCCEx_Exported_Functions_Group3 PLL2 Management function\r\n  *  @brief  PLL2 Management functions\r\n  *\r\n@verbatim\r\n ===============================================================================\r\n                ##### Extended PLL2 Management functions  #####\r\n ===============================================================================\r\n    [..]\r\n    This subsection provides a set of functions allowing to control the PLL2\r\n    activation or deactivation\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Enable PLL2\r\n * @param  PLL2Init pointer to an RCC_PLL2InitTypeDef structure that\r\n *         contains the configuration information for the PLL2\r\n * @note   The PLL2 configuration not modified if used indirectly as system clock.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_EnablePLL2(RCC_PLL2InitTypeDef *PLL2Init) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* This bit can not be cleared if the PLL2 clock is used indirectly as system\r\n    clock (i.e. it is used as PLL clock entry that is used as system clock). */\r\n  if ((__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE) && (__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) &&\r\n      ((READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) == RCC_CFGR2_PREDIV1SRC_PLL2)) {\r\n    return HAL_ERROR;\r\n  } else {\r\n    /* Check the parameters */\r\n    assert_param(IS_RCC_PLL2_MUL(PLL2Init->PLL2MUL));\r\n    assert_param(IS_RCC_HSE_PREDIV2(PLL2Init->HSEPrediv2Value));\r\n\r\n    /* Prediv2 can be written only when the PLLI2S is disabled. */\r\n    /* Return an error only if new value is different from the programmed value */\r\n    if (HAL_IS_BIT_SET(RCC->CR, RCC_CR_PLL3ON) && (__HAL_RCC_HSE_GET_PREDIV2() != PLL2Init->HSEPrediv2Value)) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Disable the main PLL2. */\r\n    __HAL_RCC_PLL2_DISABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLL2 is disabled */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n\r\n    /* Configure the HSE prediv2 factor --------------------------------*/\r\n    __HAL_RCC_HSE_PREDIV2_CONFIG(PLL2Init->HSEPrediv2Value);\r\n\r\n    /* Configure the main PLL2 multiplication factors. */\r\n    __HAL_RCC_PLL2_CONFIG(PLL2Init->PLL2MUL);\r\n\r\n    /* Enable the main PLL2. */\r\n    __HAL_RCC_PLL2_ENABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLL2 is ready */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) == RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Disable PLL2\r\n * @note   PLL2 is not disabled if used indirectly as system clock.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_RCCEx_DisablePLL2(void) {\r\n  uint32_t tickstart = 0U;\r\n\r\n  /* This bit can not be cleared if the PLL2 clock is used indirectly as system\r\n    clock (i.e. it is used as PLL clock entry that is used as system clock). */\r\n  if ((__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE) && (__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) &&\r\n      ((READ_BIT(RCC->CFGR2, RCC_CFGR2_PREDIV1SRC)) == RCC_CFGR2_PREDIV1SRC_PLL2)) {\r\n    return HAL_ERROR;\r\n  } else {\r\n    /* Disable the main PLL2. */\r\n    __HAL_RCC_PLL2_DISABLE();\r\n\r\n    /* Get Start Tick*/\r\n    tickstart = HAL_GetTick();\r\n\r\n    /* Wait till PLL2 is disabled */\r\n    while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLL2RDY) != RESET) {\r\n      if ((HAL_GetTick() - tickstart) > PLL2_TIMEOUT_VALUE) {\r\n        return HAL_TIMEOUT;\r\n      }\r\n    }\r\n  }\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n#endif /* STM32F105xC || STM32F107xC */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_RCC_MODULE_ENABLED */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_tim.c\r\n  * @author  MCD Application Team\r\n  * @brief   TIM HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the Timer (TIM) peripheral:\r\n  *           + TIM Time Base Initialization\r\n  *           + TIM Time Base Start\r\n  *           + TIM Time Base Start Interruption\r\n  *           + TIM Time Base Start DMA\r\n  *           + TIM Output Compare/PWM Initialization\r\n  *           + TIM Output Compare/PWM Channel Configuration\r\n  *           + TIM Output Compare/PWM  Start\r\n  *           + TIM Output Compare/PWM  Start Interruption\r\n  *           + TIM Output Compare/PWM Start DMA\r\n  *           + TIM Input Capture Initialization\r\n  *           + TIM Input Capture Channel Configuration\r\n  *           + TIM Input Capture Start\r\n  *           + TIM Input Capture Start Interruption\r\n  *           + TIM Input Capture Start DMA\r\n  *           + TIM One Pulse Initialization\r\n  *           + TIM One Pulse Channel Configuration\r\n  *           + TIM One Pulse Start\r\n  *           + TIM Encoder Interface Initialization\r\n  *           + TIM Encoder Interface Start\r\n  *           + TIM Encoder Interface Start Interruption\r\n  *           + TIM Encoder Interface Start DMA\r\n  *           + Commutation Event configuration with Interruption and DMA\r\n  *           + TIM OCRef clear configuration\r\n  *           + TIM External Clock configuration\r\n  @verbatim\r\n  ==============================================================================\r\n                      ##### TIMER Generic features #####\r\n  ==============================================================================\r\n  [..] The Timer features include:\r\n       (#) 16-bit up, down, up/down auto-reload counter.\r\n       (#) 16-bit programmable prescaler allowing dividing (also on the fly) the\r\n           counter clock frequency either by any factor between 1 and 65536.\r\n       (#) Up to 4 independent channels for:\r\n           (++) Input Capture\r\n           (++) Output Compare\r\n           (++) PWM generation (Edge and Center-aligned Mode)\r\n           (++) One-pulse mode output\r\n       (#) Synchronization circuit to control the timer with external signals and to interconnect\r\n            several timers together.\r\n       (#) Supports incremental encoder for positioning purposes\r\n\r\n            ##### How to use this driver #####\r\n  ==============================================================================\r\n    [..]\r\n     (#) Initialize the TIM low level resources by implementing the following functions\r\n         depending on the selected feature:\r\n           (++) Time Base : HAL_TIM_Base_MspInit()\r\n           (++) Input Capture : HAL_TIM_IC_MspInit()\r\n           (++) Output Compare : HAL_TIM_OC_MspInit()\r\n           (++) PWM generation : HAL_TIM_PWM_MspInit()\r\n           (++) One-pulse mode output : HAL_TIM_OnePulse_MspInit()\r\n           (++) Encoder mode output : HAL_TIM_Encoder_MspInit()\r\n\r\n     (#) Initialize the TIM low level resources :\r\n        (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE();\r\n        (##) TIM pins configuration\r\n            (+++) Enable the clock for the TIM GPIOs using the following function:\r\n             __HAL_RCC_GPIOx_CLK_ENABLE();\r\n            (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init();\r\n\r\n     (#) The external Clock can be configured, if needed (the default clock is the\r\n         internal clock from the APBx), using the following function:\r\n         HAL_TIM_ConfigClockSource, the clock configuration should be done before\r\n         any start function.\r\n\r\n     (#) Configure the TIM in the desired functioning mode using one of the\r\n       Initialization function of this driver:\r\n       (++) HAL_TIM_Base_Init: to use the Timer to generate a simple time base\r\n       (++) HAL_TIM_OC_Init and HAL_TIM_OC_ConfigChannel: to use the Timer to generate an\r\n            Output Compare signal.\r\n       (++) HAL_TIM_PWM_Init and HAL_TIM_PWM_ConfigChannel: to use the Timer to generate a\r\n            PWM signal.\r\n       (++) HAL_TIM_IC_Init and HAL_TIM_IC_ConfigChannel: to use the Timer to measure an\r\n            external signal.\r\n       (++) HAL_TIM_OnePulse_Init and HAL_TIM_OnePulse_ConfigChannel: to use the Timer\r\n            in One Pulse Mode.\r\n       (++) HAL_TIM_Encoder_Init: to use the Timer Encoder Interface.\r\n\r\n     (#) Activate the TIM peripheral using one of the start functions depending from the feature used:\r\n           (++) Time Base : HAL_TIM_Base_Start(), HAL_TIM_Base_Start_DMA(), HAL_TIM_Base_Start_IT()\r\n           (++) Input Capture :  HAL_TIM_IC_Start(), HAL_TIM_IC_Start_DMA(), HAL_TIM_IC_Start_IT()\r\n           (++) Output Compare : HAL_TIM_OC_Start(), HAL_TIM_OC_Start_DMA(), HAL_TIM_OC_Start_IT()\r\n           (++) PWM generation : HAL_TIM_PWM_Start(), HAL_TIM_PWM_Start_DMA(), HAL_TIM_PWM_Start_IT()\r\n           (++) One-pulse mode output : HAL_TIM_OnePulse_Start(), HAL_TIM_OnePulse_Start_IT()\r\n           (++) Encoder mode output : HAL_TIM_Encoder_Start(), HAL_TIM_Encoder_Start_DMA(), HAL_TIM_Encoder_Start_IT().\r\n\r\n     (#) The DMA Burst is managed with the two following functions:\r\n         HAL_TIM_DMABurst_WriteStart()\r\n         HAL_TIM_DMABurst_ReadStart()\r\n\r\n    *** Callback registration ***\r\n  =============================================\r\n\r\n  [..]\r\n  The compilation define  USE_HAL_TIM_REGISTER_CALLBACKS when set to 1\r\n  allows the user to configure dynamically the driver callbacks.\r\n\r\n  [..]\r\n  Use Function @ref HAL_TIM_RegisterCallback() to register a callback.\r\n  @ref HAL_TIM_RegisterCallback() takes as parameters the HAL peripheral handle,\r\n  the Callback ID and a pointer to the user callback function.\r\n\r\n  [..]\r\n  Use function @ref HAL_TIM_UnRegisterCallback() to reset a callback to the default\r\n  weak function.\r\n  @ref HAL_TIM_UnRegisterCallback takes as parameters the HAL peripheral handle,\r\n  and the Callback ID.\r\n\r\n  [..]\r\n  These functions allow to register/unregister following callbacks:\r\n    (+) Base_MspInitCallback              : TIM Base Msp Init Callback.\r\n    (+) Base_MspDeInitCallback            : TIM Base Msp DeInit Callback.\r\n    (+) IC_MspInitCallback                : TIM IC Msp Init Callback.\r\n    (+) IC_MspDeInitCallback              : TIM IC Msp DeInit Callback.\r\n    (+) OC_MspInitCallback                : TIM OC Msp Init Callback.\r\n    (+) OC_MspDeInitCallback              : TIM OC Msp DeInit Callback.\r\n    (+) PWM_MspInitCallback               : TIM PWM Msp Init Callback.\r\n    (+) PWM_MspDeInitCallback             : TIM PWM Msp DeInit Callback.\r\n    (+) OnePulse_MspInitCallback          : TIM One Pulse Msp Init Callback.\r\n    (+) OnePulse_MspDeInitCallback        : TIM One Pulse Msp DeInit Callback.\r\n    (+) Encoder_MspInitCallback           : TIM Encoder Msp Init Callback.\r\n    (+) Encoder_MspDeInitCallback         : TIM Encoder Msp DeInit Callback.\r\n    (+) HallSensor_MspInitCallback        : TIM Hall Sensor Msp Init Callback.\r\n    (+) HallSensor_MspDeInitCallback      : TIM Hall Sensor Msp DeInit Callback.\r\n    (+) PeriodElapsedCallback             : TIM Period Elapsed Callback.\r\n    (+) PeriodElapsedHalfCpltCallback     : TIM Period Elapsed half complete Callback.\r\n    (+) TriggerCallback                   : TIM Trigger Callback.\r\n    (+) TriggerHalfCpltCallback           : TIM Trigger half complete Callback.\r\n    (+) IC_CaptureCallback                : TIM Input Capture Callback.\r\n    (+) IC_CaptureHalfCpltCallback        : TIM Input Capture half complete Callback.\r\n    (+) OC_DelayElapsedCallback           : TIM Output Compare Delay Elapsed Callback.\r\n    (+) PWM_PulseFinishedCallback         : TIM PWM Pulse Finished Callback.\r\n    (+) PWM_PulseFinishedHalfCpltCallback : TIM PWM Pulse Finished half complete Callback.\r\n    (+) ErrorCallback                     : TIM Error Callback.\r\n    (+) CommutationCallback               : TIM Commutation Callback.\r\n    (+) CommutationHalfCpltCallback       : TIM Commutation half complete Callback.\r\n    (+) BreakCallback                     : TIM Break Callback.\r\n\r\n  [..]\r\nBy default, after the Init and when the state is HAL_TIM_STATE_RESET\r\nall interrupt callbacks are set to the corresponding weak functions:\r\n  examples @ref HAL_TIM_TriggerCallback(), @ref HAL_TIM_ErrorCallback().\r\n\r\n  [..]\r\n  Exception done for MspInit and MspDeInit functions that are reset to the legacy weak\r\n  functionalities in the Init / DeInit only when these callbacks are null\r\n  (not registered beforehand). If not, MspInit or MspDeInit are not null, the Init / DeInit\r\n    keep and use the user MspInit / MspDeInit callbacks(registered beforehand)\r\n\r\n  [..]\r\n    Callbacks can be registered / unregistered in HAL_TIM_STATE_READY state only.\r\n    Exception done MspInit / MspDeInit that can be registered / unregistered\r\n    in HAL_TIM_STATE_READY or HAL_TIM_STATE_RESET state,\r\n    thus registered(user) MspInit / DeInit callbacks can be used during the Init / DeInit.\r\n  In that case first register the MspInit/MspDeInit user callbacks\r\n      using @ref HAL_TIM_RegisterCallback() before calling DeInit or Init function.\r\n\r\n  [..]\r\n      When The compilation define USE_HAL_TIM_REGISTER_CALLBACKS is set to 0 or\r\n      not defined, the callback registration feature is not available and all callbacks\r\n      are set to the corresponding weak functions.\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup TIM TIM\r\n * @brief TIM HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_TIM_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/* Private macros ------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\n/** @addtogroup TIM_Private_Functions\r\n * @{\r\n */\r\nstatic void              TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);\r\nstatic void              TIM_OC3_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);\r\nstatic void              TIM_OC4_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);\r\nstatic void              TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter);\r\nstatic void              TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);\r\nstatic void              TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter);\r\nstatic void              TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);\r\nstatic void              TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);\r\nstatic void              TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource);\r\nstatic void              TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma);\r\nstatic void              TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma);\r\nstatic void              TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma);\r\nstatic void              TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma);\r\nstatic void              TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma);\r\nstatic HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);\r\n/**\r\n * @}\r\n */\r\n/* Exported functions --------------------------------------------------------*/\r\n\r\n/** @defgroup TIM_Exported_Functions TIM Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group1 TIM Time Base functions\r\n  *  @brief    Time Base functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n              ##### Time Base functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure the TIM base.\r\n    (+) De-initialize the TIM base.\r\n    (+) Start the Time Base.\r\n    (+) Stop the Time Base.\r\n    (+) Start the Time Base and enable interrupt.\r\n    (+) Stop the Time Base and disable interrupt.\r\n    (+) Start the Time Base and enable DMA transfer.\r\n    (+) Stop the Time Base and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM Time base Unit according to the specified\r\n *         parameters in the TIM_HandleTypeDef and initialize the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_Base_DeInit() before HAL_TIM_Base_Init()\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Init(TIM_HandleTypeDef *htim) {\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->Base_MspInitCallback == NULL) {\r\n      htim->Base_MspInitCallback = HAL_TIM_Base_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->Base_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    HAL_TIM_Base_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Set the Time Base configuration */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM Base peripheral\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->Base_MspDeInitCallback == NULL) {\r\n    htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->Base_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */\r\n  HAL_TIM_Base_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Change the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Base MSP.\r\n * @param  htim TIM Base handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_Base_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM Base MSP.\r\n * @param  htim TIM Base handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_Base_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Base generation.\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  /* Check the TIM state */\r\n  if (htim->State != HAL_TIM_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Base generation.\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Base generation in interrupt mode.\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  /* Check the TIM state */\r\n  if (htim->State != HAL_TIM_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Enable the TIM Update interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Base generation in interrupt mode.\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the TIM Update interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_UPDATE);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Base generation in DMA mode.\r\n * @param  htim TIM Base handle\r\n * @param  pData The source Buffer address.\r\n * @param  Length The length of data to be transferred from memory to peripheral.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM state */\r\n  if (htim->State == HAL_TIM_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (htim->State == HAL_TIM_STATE_READY) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      htim->State = HAL_TIM_STATE_BUSY;\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the DMA Period elapsed callbacks */\r\n  htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback     = TIM_DMAPeriodElapsedCplt;\r\n  htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt;\r\n\r\n  /* Set the DMA error callback */\r\n  htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError;\r\n\r\n  /* Enable the DMA channel */\r\n  if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)pData, (uint32_t)&htim->Instance->ARR, Length) != HAL_OK) {\r\n    /* Return error status */\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Enable the TIM Update DMA request */\r\n  __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_UPDATE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Base generation in DMA mode.\r\n * @param  htim TIM Base handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the TIM Update DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_UPDATE);\r\n\r\n  (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group2 TIM Output Compare functions\r\n  *  @brief    TIM Output Compare functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                  ##### TIM Output Compare functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure the TIM Output Compare.\r\n    (+) De-initialize the TIM Output Compare.\r\n    (+) Start the TIM Output Compare.\r\n    (+) Stop the TIM Output Compare.\r\n    (+) Start the TIM Output Compare and enable interrupt.\r\n    (+) Stop the TIM Output Compare and disable interrupt.\r\n    (+) Start the TIM Output Compare and enable DMA transfer.\r\n    (+) Stop the TIM Output Compare and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM Output Compare according to the specified\r\n *         parameters in the TIM_HandleTypeDef and initializes the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_OC_DeInit() before HAL_TIM_OC_Init()\r\n * @param  htim TIM Output Compare handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Init(TIM_HandleTypeDef *htim) {\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->OC_MspInitCallback == NULL) {\r\n      htim->OC_MspInitCallback = HAL_TIM_OC_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->OC_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIM_OC_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Init the base time for the Output Compare */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM peripheral\r\n * @param  htim TIM Output Compare handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->OC_MspDeInitCallback == NULL) {\r\n    htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->OC_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */\r\n  HAL_TIM_OC_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Change the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Output Compare MSP.\r\n * @param  htim TIM Output Compare handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_OC_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM Output Compare MSP.\r\n * @param  htim TIM Output Compare handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_OC_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Disable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation in interrupt mode.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Enable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Enable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Enable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Enable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation in interrupt mode.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation in DMA mode.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  pData The source Buffer address.\r\n * @param  Length The length of data to be transferred from memory to TIM peripheral\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Set the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Enable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Enable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 3 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 4 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation in DMA mode.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Output compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group3 TIM PWM functions\r\n  *  @brief    TIM PWM functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                          ##### TIM PWM functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure the TIM PWM.\r\n    (+) De-initialize the TIM PWM.\r\n    (+) Start the TIM PWM.\r\n    (+) Stop the TIM PWM.\r\n    (+) Start the TIM PWM and enable interrupt.\r\n    (+) Stop the TIM PWM and disable interrupt.\r\n    (+) Start the TIM PWM and enable DMA transfer.\r\n    (+) Stop the TIM PWM and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM PWM Time Base according to the specified\r\n *         parameters in the TIM_HandleTypeDef and initializes the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_PWM_DeInit() before HAL_TIM_PWM_Init()\r\n * @param  htim TIM PWM handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim) {\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->PWM_MspInitCallback == NULL) {\r\n      htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->PWM_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIM_PWM_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Init the base time for the PWM */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM peripheral\r\n * @param  htim TIM PWM handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->PWM_MspDeInitCallback == NULL) {\r\n    htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->PWM_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */\r\n  HAL_TIM_PWM_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Change the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM PWM MSP.\r\n * @param  htim TIM PWM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PWM_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM PWM MSP.\r\n * @param  htim TIM PWM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PWM_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the PWM signal generation.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  // if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n  //   /* Enable the main output */\r\n  //   __HAL_TIM_MOE_ENABLE(htim);\r\n  // }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the PWM signal generation.\r\n * @param  htim TIM PWM handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Disable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the PWM signal generation in interrupt mode.\r\n * @param  htim TIM PWM handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Enable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Enable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Enable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Enable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the PWM signal generation in interrupt mode.\r\n * @param  htim TIM PWM handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM PWM signal generation in DMA mode.\r\n * @param  htim TIM PWM handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  pData The source Buffer address.\r\n * @param  Length The length of data to be transferred from memory to TIM peripheral\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Set the TIM channel state */\r\n  if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (TIM_CHANNEL_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Enable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Output Capture/Compare 3 request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)pData, (uint32_t)&htim->Instance->CCR4, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 4 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM PWM signal generation in DMA mode.\r\n * @param  htim TIM PWM handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Capture compare channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group4 TIM Input Capture functions\r\n  *  @brief    TIM Input Capture functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n              ##### TIM Input Capture functions #####\r\n  ==============================================================================\r\n [..]\r\n   This section provides functions allowing to:\r\n   (+) Initialize and configure the TIM Input Capture.\r\n   (+) De-initialize the TIM Input Capture.\r\n   (+) Start the TIM Input Capture.\r\n   (+) Stop the TIM Input Capture.\r\n   (+) Start the TIM Input Capture and enable interrupt.\r\n   (+) Stop the TIM Input Capture and disable interrupt.\r\n   (+) Start the TIM Input Capture and enable DMA transfer.\r\n   (+) Stop the TIM Input Capture and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM Input Capture Time base according to the specified\r\n *         parameters in the TIM_HandleTypeDef and initializes the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_IC_DeInit() before HAL_TIM_IC_Init()\r\n * @param  htim TIM Input Capture handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef *htim) {\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->IC_MspInitCallback == NULL) {\r\n      htim->IC_MspInitCallback = HAL_TIM_IC_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->IC_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIM_IC_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Init the base time for the input capture */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM peripheral\r\n * @param  htim TIM Input Capture handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->IC_MspDeInitCallback == NULL) {\r\n    htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->IC_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC and DMA */\r\n  HAL_TIM_IC_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Change the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET_ALL(htim, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Input Capture MSP.\r\n * @param  htim TIM Input Capture handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_IC_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM Input Capture MSP.\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_IC_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_IC_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Input Capture measurement.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_state               = TIM_CHANNEL_STATE_GET(htim, Channel);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if ((channel_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Input Capture measurement.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Disable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Input Capture measurement in interrupt mode.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_state               = TIM_CHANNEL_STATE_GET(htim, Channel);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM channel state */\r\n  if ((channel_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Enable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Enable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Enable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Enable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n  /* Enable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Input Capture measurement in interrupt mode.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Input Capture measurement in DMA mode.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @param  pData The destination Buffer address.\r\n * @param  Length The length of data to be transferred from TIM peripheral to memory.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_state               = TIM_CHANNEL_STATE_GET(htim, Channel);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_state = TIM_CHANNEL_N_STATE_GET(htim, Channel);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n  assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM channel state */\r\n  if ((channel_state == HAL_TIM_CHANNEL_STATE_BUSY) || (complementary_channel_state == HAL_TIM_CHANNEL_STATE_BUSY)) {\r\n    return HAL_BUSY;\r\n  } else if ((channel_state == HAL_TIM_CHANNEL_STATE_READY) && (complementary_channel_state == HAL_TIM_CHANNEL_STATE_READY)) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 2  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->CCR3, (uint32_t)pData, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 3  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->CCR4, (uint32_t)pData, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 4  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC4);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Input Capture measurement in DMA mode.\r\n * @param  htim TIM Input Capture handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n  assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channel */\r\n  TIM_CCxChannelCmd(htim->Instance, Channel, TIM_CCx_DISABLE);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3  DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Disable the TIM Capture/Compare 4  DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC4);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group5 TIM One Pulse functions\r\n  *  @brief    TIM One Pulse functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                        ##### TIM One Pulse functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure the TIM One Pulse.\r\n    (+) De-initialize the TIM One Pulse.\r\n    (+) Start the TIM One Pulse.\r\n    (+) Stop the TIM One Pulse.\r\n    (+) Start the TIM One Pulse and enable interrupt.\r\n    (+) Stop the TIM One Pulse and disable interrupt.\r\n    (+) Start the TIM One Pulse and enable DMA transfer.\r\n    (+) Stop the TIM One Pulse and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM One Pulse Time Base according to the specified\r\n *         parameters in the TIM_HandleTypeDef and initializes the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_OnePulse_DeInit() before HAL_TIM_OnePulse_Init()\r\n * @note   When the timer instance is initialized in One Pulse mode, timer\r\n *         channels 1 and channel 2 are reserved and cannot be used for other\r\n *         purpose.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OnePulseMode Select the One pulse mode.\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_OPMODE_SINGLE: Only one pulse will be generated.\r\n *            @arg TIM_OPMODE_REPETITIVE: Repetitive pulses will be generated.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Init(TIM_HandleTypeDef *htim, uint32_t OnePulseMode) {\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_OPM_MODE(OnePulseMode));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->OnePulse_MspInitCallback == NULL) {\r\n      htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->OnePulse_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIM_OnePulse_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Configure the Time base in the One Pulse Mode */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Reset the OPM Bit */\r\n  htim->Instance->CR1 &= ~TIM_CR1_OPM;\r\n\r\n  /* Configure the OPM Mode */\r\n  htim->Instance->CR1 |= OnePulseMode;\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM One Pulse\r\n * @param  htim TIM One Pulse handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->OnePulse_MspDeInitCallback == NULL) {\r\n    htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->OnePulse_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */\r\n  HAL_TIM_OnePulse_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM One Pulse MSP.\r\n * @param  htim TIM One Pulse handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_OnePulse_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_OnePulse_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM One Pulse MSP.\r\n * @param  htim TIM One Pulse handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_OnePulse_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_OnePulse_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM One Pulse signal generation.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(OutputChannel);\r\n\r\n  /* Check the TIM channels state */\r\n  if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n      (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Capture compare and the Input Capture channels\r\n    (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)\r\n    if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and\r\n    if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output\r\n    in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together\r\n\r\n    No need to enable the counter, it's enabled automatically by hardware\r\n    (the counter starts in response to a stimulus and generate a pulse */\r\n\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM One Pulse signal generation.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channels to be disable\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(OutputChannel);\r\n\r\n  /* Disable the Capture compare and the Input Capture channels\r\n  (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)\r\n  if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and\r\n  if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output\r\n  in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */\r\n\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM One Pulse signal generation in interrupt mode.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(OutputChannel);\r\n\r\n  /* Check the TIM channels state */\r\n  if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n      (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Capture compare and the Input Capture channels\r\n    (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)\r\n    if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and\r\n    if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output\r\n    in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be enabled together\r\n\r\n    No need to enable the counter, it's enabled automatically by hardware\r\n    (the counter starts in response to a stimulus and generate a pulse */\r\n\r\n  /* Enable the TIM Capture/Compare 1 interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Enable the TIM Capture/Compare 2 interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Enable the main output */\r\n    __HAL_TIM_MOE_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM One Pulse signal generation in interrupt mode.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(OutputChannel);\r\n\r\n  /* Disable the TIM Capture/Compare 1 interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Disable the TIM Capture/Compare 2 interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n\r\n  /* Disable the Capture compare and the Input Capture channels\r\n  (in the OPM Mode the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2)\r\n  if TIM_CHANNEL_1 is used as output, the TIM_CHANNEL_2 will be used as input and\r\n  if TIM_CHANNEL_1 is used as input, the TIM_CHANNEL_2 will be used as output\r\n  in all combinations, the TIM_CHANNEL_1 and TIM_CHANNEL_2 should be disabled together */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(htim->Instance) != RESET) {\r\n    /* Disable the Main Output */\r\n    __HAL_TIM_MOE_DISABLE(htim);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group6 TIM Encoder functions\r\n  *  @brief    TIM Encoder functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                          ##### TIM Encoder functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure the TIM Encoder.\r\n    (+) De-initialize the TIM Encoder.\r\n    (+) Start the TIM Encoder.\r\n    (+) Stop the TIM Encoder.\r\n    (+) Start the TIM Encoder and enable interrupt.\r\n    (+) Stop the TIM Encoder and disable interrupt.\r\n    (+) Start the TIM Encoder and enable DMA transfer.\r\n    (+) Stop the TIM Encoder and disable DMA transfer.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM Encoder Interface and initialize the associated handle.\r\n * @note   Switching from Center Aligned counter mode to Edge counter mode (or reverse)\r\n *         requires a timer reset to avoid unexpected direction\r\n *         due to DIR bit readonly in center aligned mode.\r\n *         Ex: call @ref HAL_TIM_Encoder_DeInit() before HAL_TIM_Encoder_Init()\r\n * @note   Encoder mode and External clock mode 2 are not compatible and must not be selected together\r\n *         Ex: A call for @ref HAL_TIM_Encoder_Init will erase the settings of @ref HAL_TIM_ConfigClockSource\r\n *         using TIM_CLOCKSOURCE_ETRMODE2 and vice versa\r\n * @note   When the timer instance is initialized in Encoder mode, timer\r\n *         channels 1 and channel 2 are reserved and cannot be used for other\r\n *         purpose.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  sConfig TIM Encoder Interface configuration structure\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_InitTypeDef *sConfig) {\r\n  uint32_t tmpsmcr;\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n  assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode));\r\n  assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection));\r\n  assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection));\r\n  assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC1Polarity));\r\n  assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC2Polarity));\r\n  assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));\r\n  assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler));\r\n  assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));\r\n  assert_param(IS_TIM_IC_FILTER(sConfig->IC2Filter));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy weak callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->Encoder_MspInitCallback == NULL) {\r\n      htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->Encoder_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIM_Encoder_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Reset the SMS and ECE bits */\r\n  htim->Instance->SMCR &= ~(TIM_SMCR_SMS | TIM_SMCR_ECE);\r\n\r\n  /* Configure the Time base in the Encoder Mode */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Get the TIMx SMCR register value */\r\n  tmpsmcr = htim->Instance->SMCR;\r\n\r\n  /* Get the TIMx CCMR1 register value */\r\n  tmpccmr1 = htim->Instance->CCMR1;\r\n\r\n  /* Get the TIMx CCER register value */\r\n  tmpccer = htim->Instance->CCER;\r\n\r\n  /* Set the encoder Mode */\r\n  tmpsmcr |= sConfig->EncoderMode;\r\n\r\n  /* Select the Capture Compare 1 and the Capture Compare 2 as input */\r\n  tmpccmr1 &= ~(TIM_CCMR1_CC1S | TIM_CCMR1_CC2S);\r\n  tmpccmr1 |= (sConfig->IC1Selection | (sConfig->IC2Selection << 8U));\r\n\r\n  /* Set the Capture Compare 1 and the Capture Compare 2 prescalers and filters */\r\n  tmpccmr1 &= ~(TIM_CCMR1_IC1PSC | TIM_CCMR1_IC2PSC);\r\n  tmpccmr1 &= ~(TIM_CCMR1_IC1F | TIM_CCMR1_IC2F);\r\n  tmpccmr1 |= sConfig->IC1Prescaler | (sConfig->IC2Prescaler << 8U);\r\n  tmpccmr1 |= (sConfig->IC1Filter << 4U) | (sConfig->IC2Filter << 12U);\r\n\r\n  /* Set the TI1 and the TI2 Polarities */\r\n  tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P);\r\n  tmpccer |= sConfig->IC1Polarity | (sConfig->IC2Polarity << 4U);\r\n\r\n  /* Write to TIMx SMCR */\r\n  htim->Instance->SMCR = tmpsmcr;\r\n\r\n  /* Write to TIMx CCMR1 */\r\n  htim->Instance->CCMR1 = tmpccmr1;\r\n\r\n  /* Write to TIMx CCER */\r\n  htim->Instance->CCER = tmpccer;\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM Encoder interface\r\n * @param  htim TIM Encoder Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->Encoder_MspDeInitCallback == NULL) {\r\n    htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->Encoder_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */\r\n  HAL_TIM_Encoder_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Encoder Interface MSP.\r\n * @param  htim TIM Encoder Interface handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_Encoder_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM Encoder Interface MSP.\r\n * @param  htim TIM Encoder Interface handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_Encoder_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Encoder Interface.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    if ((channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n        (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  }\r\n\r\n  /* Enable the encoder interface channels */\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n    break;\r\n  }\r\n\r\n  default: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n    break;\r\n  }\r\n  }\r\n  /* Enable the Peripheral */\r\n  __HAL_TIM_ENABLE(htim);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Encoder Interface.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channels 1 and 2\r\n    (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n    break;\r\n  }\r\n\r\n  default: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n    break;\r\n  }\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) {\r\n    TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else {\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Encoder Interface in interrupt mode.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    if ((channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n        (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  }\r\n\r\n  /* Enable the encoder interface channels */\r\n  /* Enable the capture compare Interrupts 1 and/or 2 */\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  default: {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n  }\r\n\r\n  /* Enable the Peripheral */\r\n  __HAL_TIM_ENABLE(htim);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Encoder Interface in interrupt mode.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channels 1 and 2\r\n    (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare Interrupts 1 */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare Interrupts 2 */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n  } else {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare Interrupts 1 and 2 */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) {\r\n    TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else {\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Encoder Interface in DMA mode.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @param  pData1 The destination Buffer address for IC1.\r\n * @param  pData2 The destination Buffer address for IC2.\r\n * @param  Length The length of data to be transferred from TIM peripheral to memory.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length) {\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)) {\r\n      return HAL_BUSY;\r\n    } else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY)) {\r\n      if ((pData1 == NULL) && (Length > 0U)) {\r\n        return HAL_ERROR;\r\n      } else {\r\n        TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n        TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      }\r\n    } else {\r\n      return HAL_ERROR;\r\n    }\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    if ((channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY) || (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY)) {\r\n      return HAL_BUSY;\r\n    } else if ((channel_2_state == HAL_TIM_CHANNEL_STATE_READY) && (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_READY)) {\r\n      if ((pData2 == NULL) && (Length > 0U)) {\r\n        return HAL_ERROR;\r\n      } else {\r\n        TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n        TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      }\r\n    } else {\r\n      return HAL_ERROR;\r\n    }\r\n  } else {\r\n    if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) || (channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY) || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) ||\r\n        (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_BUSY)) {\r\n      return HAL_BUSY;\r\n    } else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) && (channel_2_state == HAL_TIM_CHANNEL_STATE_READY) && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY) &&\r\n               (complementary_channel_2_state == HAL_TIM_CHANNEL_STATE_READY)) {\r\n      if ((((pData1 == NULL) || (pData2 == NULL))) && (Length > 0U)) {\r\n        return HAL_ERROR;\r\n      } else {\r\n        TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n        TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n        TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n        TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      }\r\n    } else {\r\n      return HAL_ERROR;\r\n    }\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Input Capture DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n\r\n    /* Enable the Peripheral */\r\n    __HAL_TIM_ENABLE(htim);\r\n\r\n    /* Enable the Capture compare channel */\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Input Capture  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n\r\n    /* Enable the Peripheral */\r\n    __HAL_TIM_ENABLE(htim);\r\n\r\n    /* Enable the Capture compare channel */\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_ALL: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->CCR2, (uint32_t)pData2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the Peripheral */\r\n    __HAL_TIM_ENABLE(htim);\r\n\r\n    /* Enable the Capture compare channel */\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_ENABLE);\r\n\r\n    /* Enable the TIM Input Capture  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    /* Enable the TIM Input Capture  DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Encoder Interface in DMA mode.\r\n * @param  htim TIM Encoder Interface handle\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channels 1 and 2\r\n    (in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare DMA Request 1 */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare DMA Request 2 */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n  } else {\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n    TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_2, TIM_CCx_DISABLE);\r\n\r\n    /* Disable the capture compare DMA Request 1 and 2 */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n  }\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel(s) state */\r\n  if ((Channel == TIM_CHANNEL_1) || (Channel == TIM_CHANNEL_2)) {\r\n    TIM_CHANNEL_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else {\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management\r\n  *  @brief    TIM IRQ handler management\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                        ##### IRQ handler management #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides Timer IRQ handler function.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  This function handles TIM interrupts requests.\r\n * @param  htim TIM  handle\r\n * @retval None\r\n */\r\nvoid HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim) {\r\n  /* Capture compare 1 event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC1) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC1) != RESET) {\r\n      {\r\n        __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC1);\r\n        htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n\r\n        /* Input capture event */\r\n        if ((htim->Instance->CCMR1 & TIM_CCMR1_CC1S) != 0x00U) {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n          htim->IC_CaptureCallback(htim);\r\n#else\r\n          HAL_TIM_IC_CaptureCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n        }\r\n        /* Output compare event */\r\n        else {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n          htim->OC_DelayElapsedCallback(htim);\r\n          htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n          HAL_TIM_OC_DelayElapsedCallback(htim);\r\n          HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n        }\r\n        htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n      }\r\n    }\r\n  }\r\n  /* Capture compare 2 event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC2) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC2) != RESET) {\r\n      __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC2);\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n      /* Input capture event */\r\n      if ((htim->Instance->CCMR1 & TIM_CCMR1_CC2S) != 0x00U) {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->IC_CaptureCallback(htim);\r\n#else\r\n        HAL_TIM_IC_CaptureCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      /* Output compare event */\r\n      else {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->OC_DelayElapsedCallback(htim);\r\n        htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n        HAL_TIM_OC_DelayElapsedCallback(htim);\r\n        HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n    }\r\n  }\r\n  /* Capture compare 3 event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC3) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC3) != RESET) {\r\n      __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC3);\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n      /* Input capture event */\r\n      if ((htim->Instance->CCMR2 & TIM_CCMR2_CC3S) != 0x00U) {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->IC_CaptureCallback(htim);\r\n#else\r\n        HAL_TIM_IC_CaptureCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      /* Output compare event */\r\n      else {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->OC_DelayElapsedCallback(htim);\r\n        htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n        HAL_TIM_OC_DelayElapsedCallback(htim);\r\n        HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n    }\r\n  }\r\n  /* Capture compare 4 event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_CC4) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_CC4) != RESET) {\r\n      __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC4);\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n      /* Input capture event */\r\n      if ((htim->Instance->CCMR2 & TIM_CCMR2_CC4S) != 0x00U) {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->IC_CaptureCallback(htim);\r\n#else\r\n        HAL_TIM_IC_CaptureCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      /* Output compare event */\r\n      else {\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n        htim->OC_DelayElapsedCallback(htim);\r\n        htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n        HAL_TIM_OC_DelayElapsedCallback(htim);\r\n        HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n      }\r\n      htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n    }\r\n  }\r\n  /* TIM Update event */\r\n  if (__HAL_TIM_GET_FLAG(htim, TIM_FLAG_UPDATE) != RESET) {\r\n    if (__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) != RESET) {\r\n      __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n      htim->PeriodElapsedCallback(htim);\r\n#else\r\n      HAL_TIM_PeriodElapsedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions\r\n  *  @brief    TIM Peripheral Control functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                   ##### Peripheral Control functions #####\r\n  ==============================================================================\r\n [..]\r\n   This section provides functions allowing to:\r\n      (+) Configure The Input Output channels for OC, PWM, IC or One Pulse mode.\r\n      (+) Configure External Clock source.\r\n      (+) Configure Complementary channels, break features and dead time.\r\n      (+) Configure Master and the Slave synchronization.\r\n      (+) Configure the DMA Burst Mode.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Initializes the TIM Output Compare Channels according to the specified\r\n *         parameters in the TIM_OC_InitTypeDef.\r\n * @param  htim TIM Output Compare handle\r\n * @param  sConfig TIM Output Compare configuration structure\r\n * @param  Channel TIM Channels to configure\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CHANNELS(Channel));\r\n  assert_param(IS_TIM_OC_MODE(sConfig->OCMode));\r\n  assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity));\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the TIM Channel 1 in Output Compare */\r\n    TIM_OC1_SetConfig(htim->Instance, sConfig);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the TIM Channel 2 in Output Compare */\r\n    TIM_OC2_SetConfig(htim->Instance, sConfig);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the TIM Channel 3 in Output Compare */\r\n    TIM_OC3_SetConfig(htim->Instance, sConfig);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the TIM Channel 4 in Output Compare */\r\n    TIM_OC4_SetConfig(htim->Instance, sConfig);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Input Capture Channels according to the specified\r\n *         parameters in the TIM_IC_InitTypeDef.\r\n * @param  htim TIM IC handle\r\n * @param  sConfig TIM Input Capture configuration structure\r\n * @param  Channel TIM Channel to configure\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_IC_POLARITY(sConfig->ICPolarity));\r\n  assert_param(IS_TIM_IC_SELECTION(sConfig->ICSelection));\r\n  assert_param(IS_TIM_IC_PRESCALER(sConfig->ICPrescaler));\r\n  assert_param(IS_TIM_IC_FILTER(sConfig->ICFilter));\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  if (Channel == TIM_CHANNEL_1) {\r\n    /* TI1 Configuration */\r\n    TIM_TI1_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n    /* Reset the IC1PSC Bits */\r\n    htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;\r\n\r\n    /* Set the IC1PSC value */\r\n    htim->Instance->CCMR1 |= sConfig->ICPrescaler;\r\n  } else if (Channel == TIM_CHANNEL_2) {\r\n    /* TI2 Configuration */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n    TIM_TI2_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n    /* Reset the IC2PSC Bits */\r\n    htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC;\r\n\r\n    /* Set the IC2PSC value */\r\n    htim->Instance->CCMR1 |= (sConfig->ICPrescaler << 8U);\r\n  } else if (Channel == TIM_CHANNEL_3) {\r\n    /* TI3 Configuration */\r\n    assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));\r\n\r\n    TIM_TI3_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n    /* Reset the IC3PSC Bits */\r\n    htim->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC;\r\n\r\n    /* Set the IC3PSC value */\r\n    htim->Instance->CCMR2 |= sConfig->ICPrescaler;\r\n  } else {\r\n    /* TI4 Configuration */\r\n    assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));\r\n\r\n    TIM_TI4_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n    /* Reset the IC4PSC Bits */\r\n    htim->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC;\r\n\r\n    /* Set the IC4PSC value */\r\n    htim->Instance->CCMR2 |= (sConfig->ICPrescaler << 8U);\r\n  }\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM PWM  channels according to the specified\r\n *         parameters in the TIM_OC_InitTypeDef.\r\n * @param  htim TIM PWM handle\r\n * @param  sConfig TIM PWM configuration structure\r\n * @param  Channel TIM Channels to be configured\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CHANNELS(Channel));\r\n  assert_param(IS_TIM_PWM_MODE(sConfig->OCMode));\r\n  assert_param(IS_TIM_OC_POLARITY(sConfig->OCPolarity));\r\n  assert_param(IS_TIM_FAST_STATE(sConfig->OCFastMode));\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the Channel 1 in PWM mode */\r\n    TIM_OC1_SetConfig(htim->Instance, sConfig);\r\n\r\n    /* Set the Preload enable bit for channel1 */\r\n    htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE;\r\n\r\n    /* Configure the Output Fast mode */\r\n    htim->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE;\r\n    htim->Instance->CCMR1 |= sConfig->OCFastMode;\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the Channel 2 in PWM mode */\r\n    TIM_OC2_SetConfig(htim->Instance, sConfig);\r\n\r\n    /* Set the Preload enable bit for channel2 */\r\n    htim->Instance->CCMR1 |= TIM_CCMR1_OC2PE;\r\n\r\n    /* Configure the Output Fast mode */\r\n    htim->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE;\r\n    htim->Instance->CCMR1 |= sConfig->OCFastMode << 8U;\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the Channel 3 in PWM mode */\r\n    TIM_OC3_SetConfig(htim->Instance, sConfig);\r\n\r\n    /* Set the Preload enable bit for channel3 */\r\n    htim->Instance->CCMR2 |= TIM_CCMR2_OC3PE;\r\n\r\n    /* Configure the Output Fast mode */\r\n    htim->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE;\r\n    htim->Instance->CCMR2 |= sConfig->OCFastMode;\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));\r\n\r\n    /* Configure the Channel 4 in PWM mode */\r\n    TIM_OC4_SetConfig(htim->Instance, sConfig);\r\n\r\n    /* Set the Preload enable bit for channel4 */\r\n    htim->Instance->CCMR2 |= TIM_CCMR2_OC4PE;\r\n\r\n    /* Configure the Output Fast mode */\r\n    htim->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE;\r\n    htim->Instance->CCMR2 |= sConfig->OCFastMode << 8U;\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM One Pulse Channels according to the specified\r\n *         parameters in the TIM_OnePulse_InitTypeDef.\r\n * @param  htim TIM One Pulse handle\r\n * @param  sConfig TIM One Pulse configuration structure\r\n * @param  OutputChannel TIM output channel to configure\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @param  InputChannel TIM input Channel to configure\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @note  To output a waveform with a minimum delay user can enable the fast\r\n *        mode by calling the @ref __HAL_TIM_ENABLE_OCxFAST macro. Then CCx\r\n *        output is forced in response to the edge detection on TIx input,\r\n *        without taking in account the comparison.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel) {\r\n  TIM_OC_InitTypeDef temp1;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_OPM_CHANNELS(OutputChannel));\r\n  assert_param(IS_TIM_OPM_CHANNELS(InputChannel));\r\n\r\n  if (OutputChannel != InputChannel) {\r\n    /* Process Locked */\r\n    __HAL_LOCK(htim);\r\n\r\n    htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n    /* Extract the Output compare configuration from sConfig structure */\r\n    temp1.OCMode       = sConfig->OCMode;\r\n    temp1.Pulse        = sConfig->Pulse;\r\n    temp1.OCPolarity   = sConfig->OCPolarity;\r\n    temp1.OCNPolarity  = sConfig->OCNPolarity;\r\n    temp1.OCIdleState  = sConfig->OCIdleState;\r\n    temp1.OCNIdleState = sConfig->OCNIdleState;\r\n\r\n    switch (OutputChannel) {\r\n    case TIM_CHANNEL_1: {\r\n      assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n\r\n      TIM_OC1_SetConfig(htim->Instance, &temp1);\r\n      break;\r\n    }\r\n    case TIM_CHANNEL_2: {\r\n      assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n      TIM_OC2_SetConfig(htim->Instance, &temp1);\r\n      break;\r\n    }\r\n    default:\r\n      break;\r\n    }\r\n\r\n    switch (InputChannel) {\r\n    case TIM_CHANNEL_1: {\r\n      assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n\r\n      TIM_TI1_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n      /* Reset the IC1PSC Bits */\r\n      htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;\r\n\r\n      /* Select the Trigger source */\r\n      htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n      htim->Instance->SMCR |= TIM_TS_TI1FP1;\r\n\r\n      /* Select the Slave Mode */\r\n      htim->Instance->SMCR &= ~TIM_SMCR_SMS;\r\n      htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER;\r\n      break;\r\n    }\r\n    case TIM_CHANNEL_2: {\r\n      assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n      TIM_TI2_SetConfig(htim->Instance, sConfig->ICPolarity, sConfig->ICSelection, sConfig->ICFilter);\r\n\r\n      /* Reset the IC2PSC Bits */\r\n      htim->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC;\r\n\r\n      /* Select the Trigger source */\r\n      htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n      htim->Instance->SMCR |= TIM_TS_TI2FP2;\r\n\r\n      /* Select the Slave Mode */\r\n      htim->Instance->SMCR &= ~TIM_SMCR_SMS;\r\n      htim->Instance->SMCR |= TIM_SLAVEMODE_TRIGGER;\r\n      break;\r\n    }\r\n\r\n    default:\r\n      break;\r\n    }\r\n\r\n    htim->State = HAL_TIM_STATE_READY;\r\n\r\n    __HAL_UNLOCK(htim);\r\n\r\n    return HAL_OK;\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Configure the DMA Burst to transfer Data from the memory to the TIM peripheral\r\n * @param  htim TIM handle\r\n * @param  BurstBaseAddress TIM Base address from where the DMA  will start the Data write\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMABASE_CR1\r\n *            @arg TIM_DMABASE_CR2\r\n *            @arg TIM_DMABASE_SMCR\r\n *            @arg TIM_DMABASE_DIER\r\n *            @arg TIM_DMABASE_SR\r\n *            @arg TIM_DMABASE_EGR\r\n *            @arg TIM_DMABASE_CCMR1\r\n *            @arg TIM_DMABASE_CCMR2\r\n *            @arg TIM_DMABASE_CCER\r\n *            @arg TIM_DMABASE_CNT\r\n *            @arg TIM_DMABASE_PSC\r\n *            @arg TIM_DMABASE_ARR\r\n *            @arg TIM_DMABASE_RCR\r\n *            @arg TIM_DMABASE_CCR1\r\n *            @arg TIM_DMABASE_CCR2\r\n *            @arg TIM_DMABASE_CCR3\r\n *            @arg TIM_DMABASE_CCR4\r\n *            @arg TIM_DMABASE_BDTR\r\n * @param  BurstRequestSrc TIM DMA Request sources\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: TIM update Interrupt source\r\n *            @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source\r\n *            @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source\r\n *            @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source\r\n *            @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source\r\n *            @arg TIM_DMA_COM: TIM Commutation DMA source\r\n *            @arg TIM_DMA_TRIGGER: TIM Trigger DMA source\r\n * @param  BurstBuffer The Buffer address.\r\n * @param  BurstLength DMA Burst length. This parameter can be one value\r\n *         between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS.\r\n * @note   This function should be used only when BurstLength is equal to DMA data transfer length.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength) {\r\n  return HAL_TIM_DMABurst_MultiWriteStart(htim, BurstBaseAddress, BurstRequestSrc, BurstBuffer, BurstLength, ((BurstLength) >> 8U) + 1U);\r\n}\r\n\r\n/**\r\n * @brief  Configure the DMA Burst to transfer multiple Data from the memory to the TIM peripheral\r\n * @param  htim TIM handle\r\n * @param  BurstBaseAddress TIM Base address from where the DMA will start the Data write\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMABASE_CR1\r\n *            @arg TIM_DMABASE_CR2\r\n *            @arg TIM_DMABASE_SMCR\r\n *            @arg TIM_DMABASE_DIER\r\n *            @arg TIM_DMABASE_SR\r\n *            @arg TIM_DMABASE_EGR\r\n *            @arg TIM_DMABASE_CCMR1\r\n *            @arg TIM_DMABASE_CCMR2\r\n *            @arg TIM_DMABASE_CCER\r\n *            @arg TIM_DMABASE_CNT\r\n *            @arg TIM_DMABASE_PSC\r\n *            @arg TIM_DMABASE_ARR\r\n *            @arg TIM_DMABASE_RCR\r\n *            @arg TIM_DMABASE_CCR1\r\n *            @arg TIM_DMABASE_CCR2\r\n *            @arg TIM_DMABASE_CCR3\r\n *            @arg TIM_DMABASE_CCR4\r\n *            @arg TIM_DMABASE_BDTR\r\n * @param  BurstRequestSrc TIM DMA Request sources\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: TIM update Interrupt source\r\n *            @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source\r\n *            @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source\r\n *            @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source\r\n *            @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source\r\n *            @arg TIM_DMA_COM: TIM Commutation DMA source\r\n *            @arg TIM_DMA_TRIGGER: TIM Trigger DMA source\r\n * @param  BurstBuffer The Buffer address.\r\n * @param  BurstLength DMA Burst length. This parameter can be one value\r\n *         between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS.\r\n * @param  DataLength Data length. This parameter can be one value\r\n *         between 1 and 0xFFFF.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_MultiWriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength, uint32_t DataLength) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_DMA_BASE(BurstBaseAddress));\r\n  assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));\r\n  assert_param(IS_TIM_DMA_LENGTH(BurstLength));\r\n  assert_param(IS_TIM_DMA_DATA_LENGTH(DataLength));\r\n\r\n  if (htim->DMABurstState == HAL_DMA_BURST_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (htim->DMABurstState == HAL_DMA_BURST_STATE_READY) {\r\n    if ((BurstBuffer == NULL) && (BurstLength > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      htim->DMABurstState = HAL_DMA_BURST_STATE_BUSY;\r\n    }\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n  switch (BurstRequestSrc) {\r\n  case TIM_DMA_UPDATE: {\r\n    /* Set the DMA Period elapsed callbacks */\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback     = TIM_DMAPeriodElapsedCplt;\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC1: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC2: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC3: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC4: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback     = TIM_DMADelayPulseCplt;\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_COM: {\r\n    /* Set the DMA commutation callbacks */\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback     = TIMEx_DMACommutationCplt;\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_TRIGGER: {\r\n    /* Set the DMA trigger callbacks */\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback     = TIM_DMATriggerCplt;\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferHalfCpltCallback = TIM_DMATriggerHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Configure the DMA Burst Mode */\r\n  htim->Instance->DCR = (BurstBaseAddress | BurstLength);\r\n  /* Enable the TIM DMA Request */\r\n  __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM DMA Burst mode\r\n * @param  htim TIM handle\r\n * @param  BurstRequestSrc TIM DMA Request sources to disable\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));\r\n\r\n  /* Abort the DMA transfer (at least disable the DMA channel) */\r\n  switch (BurstRequestSrc) {\r\n  case TIM_DMA_UPDATE: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC1: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC2: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC3: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC4: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);\r\n    break;\r\n  }\r\n  case TIM_DMA_COM: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_COMMUTATION]);\r\n    break;\r\n  }\r\n  case TIM_DMA_TRIGGER: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_TRIGGER]);\r\n    break;\r\n  }\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the TIM Update DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc);\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configure the DMA Burst to transfer Data from the TIM peripheral to the memory\r\n * @param  htim TIM handle\r\n * @param  BurstBaseAddress TIM Base address from where the DMA  will start the Data read\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMABASE_CR1\r\n *            @arg TIM_DMABASE_CR2\r\n *            @arg TIM_DMABASE_SMCR\r\n *            @arg TIM_DMABASE_DIER\r\n *            @arg TIM_DMABASE_SR\r\n *            @arg TIM_DMABASE_EGR\r\n *            @arg TIM_DMABASE_CCMR1\r\n *            @arg TIM_DMABASE_CCMR2\r\n *            @arg TIM_DMABASE_CCER\r\n *            @arg TIM_DMABASE_CNT\r\n *            @arg TIM_DMABASE_PSC\r\n *            @arg TIM_DMABASE_ARR\r\n *            @arg TIM_DMABASE_RCR\r\n *            @arg TIM_DMABASE_CCR1\r\n *            @arg TIM_DMABASE_CCR2\r\n *            @arg TIM_DMABASE_CCR3\r\n *            @arg TIM_DMABASE_CCR4\r\n *            @arg TIM_DMABASE_BDTR\r\n * @param  BurstRequestSrc TIM DMA Request sources\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: TIM update Interrupt source\r\n *            @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source\r\n *            @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source\r\n *            @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source\r\n *            @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source\r\n *            @arg TIM_DMA_COM: TIM Commutation DMA source\r\n *            @arg TIM_DMA_TRIGGER: TIM Trigger DMA source\r\n * @param  BurstBuffer The Buffer address.\r\n * @param  BurstLength DMA Burst length. This parameter can be one value\r\n *         between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS.\r\n * @note   This function should be used only when BurstLength is equal to DMA data transfer length.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength) {\r\n  return HAL_TIM_DMABurst_MultiReadStart(htim, BurstBaseAddress, BurstRequestSrc, BurstBuffer, BurstLength, ((BurstLength) >> 8U) + 1U);\r\n}\r\n\r\n/**\r\n * @brief  Configure the DMA Burst to transfer Data from the TIM peripheral to the memory\r\n * @param  htim TIM handle\r\n * @param  BurstBaseAddress TIM Base address from where the DMA  will start the Data read\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMABASE_CR1\r\n *            @arg TIM_DMABASE_CR2\r\n *            @arg TIM_DMABASE_SMCR\r\n *            @arg TIM_DMABASE_DIER\r\n *            @arg TIM_DMABASE_SR\r\n *            @arg TIM_DMABASE_EGR\r\n *            @arg TIM_DMABASE_CCMR1\r\n *            @arg TIM_DMABASE_CCMR2\r\n *            @arg TIM_DMABASE_CCER\r\n *            @arg TIM_DMABASE_CNT\r\n *            @arg TIM_DMABASE_PSC\r\n *            @arg TIM_DMABASE_ARR\r\n *            @arg TIM_DMABASE_RCR\r\n *            @arg TIM_DMABASE_CCR1\r\n *            @arg TIM_DMABASE_CCR2\r\n *            @arg TIM_DMABASE_CCR3\r\n *            @arg TIM_DMABASE_CCR4\r\n *            @arg TIM_DMABASE_BDTR\r\n * @param  BurstRequestSrc TIM DMA Request sources\r\n *         This parameter can be one of the following values:\r\n *            @arg TIM_DMA_UPDATE: TIM update Interrupt source\r\n *            @arg TIM_DMA_CC1: TIM Capture Compare 1 DMA source\r\n *            @arg TIM_DMA_CC2: TIM Capture Compare 2 DMA source\r\n *            @arg TIM_DMA_CC3: TIM Capture Compare 3 DMA source\r\n *            @arg TIM_DMA_CC4: TIM Capture Compare 4 DMA source\r\n *            @arg TIM_DMA_COM: TIM Commutation DMA source\r\n *            @arg TIM_DMA_TRIGGER: TIM Trigger DMA source\r\n * @param  BurstBuffer The Buffer address.\r\n * @param  BurstLength DMA Burst length. This parameter can be one value\r\n *         between: TIM_DMABURSTLENGTH_1TRANSFER and TIM_DMABURSTLENGTH_18TRANSFERS.\r\n * @param  DataLength Data length. This parameter can be one value\r\n *         between 1 and 0xFFFF.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_MultiReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength, uint32_t DataLength) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_DMA_BASE(BurstBaseAddress));\r\n  assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));\r\n  assert_param(IS_TIM_DMA_LENGTH(BurstLength));\r\n  assert_param(IS_TIM_DMA_DATA_LENGTH(DataLength));\r\n\r\n  if (htim->DMABurstState == HAL_DMA_BURST_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (htim->DMABurstState == HAL_DMA_BURST_STATE_READY) {\r\n    if ((BurstBuffer == NULL) && (BurstLength > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      htim->DMABurstState = HAL_DMA_BURST_STATE_BUSY;\r\n    }\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n  switch (BurstRequestSrc) {\r\n  case TIM_DMA_UPDATE: {\r\n    /* Set the DMA Period elapsed callbacks */\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferCpltCallback     = TIM_DMAPeriodElapsedCplt;\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferHalfCpltCallback = TIM_DMAPeriodElapsedHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_UPDATE]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_UPDATE], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC1: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC2: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC3: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_CC4: {\r\n    /* Set the DMA capture callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_COM: {\r\n    /* Set the DMA commutation callbacks */\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback     = TIMEx_DMACommutationCplt;\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  case TIM_DMA_TRIGGER: {\r\n    /* Set the DMA trigger callbacks */\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferCpltCallback     = TIM_DMATriggerCplt;\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferHalfCpltCallback = TIM_DMATriggerHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)&htim->Instance->DMAR, (uint32_t)BurstBuffer, DataLength) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    break;\r\n  }\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Configure the DMA Burst Mode */\r\n  htim->Instance->DCR = (BurstBaseAddress | BurstLength);\r\n\r\n  /* Enable the TIM DMA Request */\r\n  __HAL_TIM_ENABLE_DMA(htim, BurstRequestSrc);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stop the DMA burst reading\r\n * @param  htim TIM handle\r\n * @param  BurstRequestSrc TIM DMA Request sources to disable.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));\r\n\r\n  /* Abort the DMA transfer (at least disable the DMA channel) */\r\n  switch (BurstRequestSrc) {\r\n  case TIM_DMA_UPDATE: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_UPDATE]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC1: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC2: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC3: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n  case TIM_DMA_CC4: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC4]);\r\n    break;\r\n  }\r\n  case TIM_DMA_COM: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_COMMUTATION]);\r\n    break;\r\n  }\r\n  case TIM_DMA_TRIGGER: {\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_TRIGGER]);\r\n    break;\r\n  }\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the TIM Update DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, BurstRequestSrc);\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Generate a software event\r\n * @param  htim TIM handle\r\n * @param  EventSource specifies the event source.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_EVENTSOURCE_UPDATE: Timer update Event source\r\n *            @arg TIM_EVENTSOURCE_CC1: Timer Capture Compare 1 Event source\r\n *            @arg TIM_EVENTSOURCE_CC2: Timer Capture Compare 2 Event source\r\n *            @arg TIM_EVENTSOURCE_CC3: Timer Capture Compare 3 Event source\r\n *            @arg TIM_EVENTSOURCE_CC4: Timer Capture Compare 4 Event source\r\n *            @arg TIM_EVENTSOURCE_COM: Timer COM event source\r\n *            @arg TIM_EVENTSOURCE_TRIGGER: Timer Trigger Event source\r\n *            @arg TIM_EVENTSOURCE_BREAK: Timer Break event source\r\n * @note   Basic timers can only generate an update event.\r\n * @note   TIM_EVENTSOURCE_COM is relevant only with advanced timer instances.\r\n * @note   TIM_EVENTSOURCE_BREAK are relevant only for timer instances\r\n *         supporting a break input.\r\n * @retval HAL status\r\n */\r\n\r\nHAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_EVENT_SOURCE(EventSource));\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  /* Change the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Set the event sources */\r\n  htim->Instance->EGR = EventSource;\r\n\r\n  /* Change the TIM state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the OCRef clear feature\r\n * @param  htim TIM handle\r\n * @param  sClearInputConfig pointer to a TIM_ClearInputConfigTypeDef structure that\r\n *         contains the OCREF clear feature and parameters for the TIM peripheral.\r\n * @param  Channel specifies the TIM Channel\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_OCXREF_CLEAR_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_CLEARINPUT_SOURCE(sClearInputConfig->ClearInputSource));\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  switch (sClearInputConfig->ClearInputSource) {\r\n  case TIM_CLEARINPUTSOURCE_NONE: {\r\n    /* Clear the OCREF clear selection bit and the the ETR Bits */\r\n    CLEAR_BIT(htim->Instance->SMCR, (TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP));\r\n    break;\r\n  }\r\n\r\n  case TIM_CLEARINPUTSOURCE_ETR: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CLEARINPUT_POLARITY(sClearInputConfig->ClearInputPolarity));\r\n    assert_param(IS_TIM_CLEARINPUT_PRESCALER(sClearInputConfig->ClearInputPrescaler));\r\n    assert_param(IS_TIM_CLEARINPUT_FILTER(sClearInputConfig->ClearInputFilter));\r\n\r\n    /* When OCRef clear feature is used with ETR source, ETR prescaler must be off */\r\n    if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1) {\r\n      htim->State = HAL_TIM_STATE_READY;\r\n      __HAL_UNLOCK(htim);\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    TIM_ETR_SetConfig(htim->Instance, sClearInputConfig->ClearInputPrescaler, sClearInputConfig->ClearInputPolarity, sClearInputConfig->ClearInputFilter);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) {\r\n      /* Enable the OCREF clear feature for Channel 1 */\r\n      SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE);\r\n    } else {\r\n      /* Disable the OCREF clear feature for Channel 1 */\r\n      CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC1CE);\r\n    }\r\n    break;\r\n  }\r\n  case TIM_CHANNEL_2: {\r\n    if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) {\r\n      /* Enable the OCREF clear feature for Channel 2 */\r\n      SET_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE);\r\n    } else {\r\n      /* Disable the OCREF clear feature for Channel 2 */\r\n      CLEAR_BIT(htim->Instance->CCMR1, TIM_CCMR1_OC2CE);\r\n    }\r\n    break;\r\n  }\r\n  case TIM_CHANNEL_3: {\r\n    if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) {\r\n      /* Enable the OCREF clear feature for Channel 3 */\r\n      SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE);\r\n    } else {\r\n      /* Disable the OCREF clear feature for Channel 3 */\r\n      CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC3CE);\r\n    }\r\n    break;\r\n  }\r\n  case TIM_CHANNEL_4: {\r\n    if (sClearInputConfig->ClearInputState != (uint32_t)DISABLE) {\r\n      /* Enable the OCREF clear feature for Channel 4 */\r\n      SET_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE);\r\n    } else {\r\n      /* Disable the OCREF clear feature for Channel 4 */\r\n      CLEAR_BIT(htim->Instance->CCMR2, TIM_CCMR2_OC4CE);\r\n    }\r\n    break;\r\n  }\r\n  default:\r\n    break;\r\n  }\r\n\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief   Configures the clock source to be used\r\n * @param  htim TIM handle\r\n * @param  sClockSourceConfig pointer to a TIM_ClockConfigTypeDef structure that\r\n *         contains the clock source information for the TIM peripheral.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Process Locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CLOCKSOURCE(sClockSourceConfig->ClockSource));\r\n\r\n  /* Reset the SMS, TS, ECE, ETPS and ETRF bits */\r\n  tmpsmcr = htim->Instance->SMCR;\r\n  tmpsmcr &= ~(TIM_SMCR_SMS | TIM_SMCR_TS);\r\n  tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);\r\n  htim->Instance->SMCR = tmpsmcr;\r\n\r\n  switch (sClockSourceConfig->ClockSource) {\r\n  case TIM_CLOCKSOURCE_INTERNAL: {\r\n    assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_ETRMODE1: {\r\n    /* Check whether or not the timer instance supports external trigger input mode 1 (ETRF)*/\r\n    assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance));\r\n\r\n    /* Check ETR input conditioning related parameters */\r\n    assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));\r\n    assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));\r\n    assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));\r\n\r\n    /* Configure the ETR Clock source */\r\n    TIM_ETR_SetConfig(htim->Instance, sClockSourceConfig->ClockPrescaler, sClockSourceConfig->ClockPolarity, sClockSourceConfig->ClockFilter);\r\n\r\n    /* Select the External clock mode1 and the ETRF trigger */\r\n    tmpsmcr = htim->Instance->SMCR;\r\n    tmpsmcr |= (TIM_SLAVEMODE_EXTERNAL1 | TIM_CLOCKSOURCE_ETRMODE1);\r\n    /* Write to TIMx SMCR */\r\n    htim->Instance->SMCR = tmpsmcr;\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_ETRMODE2: {\r\n    /* Check whether or not the timer instance supports external trigger input mode 2 (ETRF)*/\r\n    assert_param(IS_TIM_CLOCKSOURCE_ETRMODE2_INSTANCE(htim->Instance));\r\n\r\n    /* Check ETR input conditioning related parameters */\r\n    assert_param(IS_TIM_CLOCKPRESCALER(sClockSourceConfig->ClockPrescaler));\r\n    assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));\r\n    assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));\r\n\r\n    /* Configure the ETR Clock source */\r\n    TIM_ETR_SetConfig(htim->Instance, sClockSourceConfig->ClockPrescaler, sClockSourceConfig->ClockPolarity, sClockSourceConfig->ClockFilter);\r\n    /* Enable the External clock mode2 */\r\n    htim->Instance->SMCR |= TIM_SMCR_ECE;\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_TI1: {\r\n    /* Check whether or not the timer instance supports external clock mode 1 */\r\n    assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance));\r\n\r\n    /* Check TI1 input conditioning related parameters */\r\n    assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));\r\n    assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));\r\n\r\n    TIM_TI1_ConfigInputStage(htim->Instance, sClockSourceConfig->ClockPolarity, sClockSourceConfig->ClockFilter);\r\n    TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_TI2: {\r\n    /* Check whether or not the timer instance supports external clock mode 1 (ETRF)*/\r\n    assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance));\r\n\r\n    /* Check TI2 input conditioning related parameters */\r\n    assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));\r\n    assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));\r\n\r\n    TIM_TI2_ConfigInputStage(htim->Instance, sClockSourceConfig->ClockPolarity, sClockSourceConfig->ClockFilter);\r\n    TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_TI1ED: {\r\n    /* Check whether or not the timer instance supports external clock mode 1 */\r\n    assert_param(IS_TIM_CLOCKSOURCE_TIX_INSTANCE(htim->Instance));\r\n\r\n    /* Check TI1 input conditioning related parameters */\r\n    assert_param(IS_TIM_CLOCKPOLARITY(sClockSourceConfig->ClockPolarity));\r\n    assert_param(IS_TIM_CLOCKFILTER(sClockSourceConfig->ClockFilter));\r\n\r\n    TIM_TI1_ConfigInputStage(htim->Instance, sClockSourceConfig->ClockPolarity, sClockSourceConfig->ClockFilter);\r\n    TIM_ITRx_SetConfig(htim->Instance, TIM_CLOCKSOURCE_TI1ED);\r\n    break;\r\n  }\r\n\r\n  case TIM_CLOCKSOURCE_ITR0:\r\n  case TIM_CLOCKSOURCE_ITR1:\r\n  case TIM_CLOCKSOURCE_ITR2:\r\n  case TIM_CLOCKSOURCE_ITR3: {\r\n    /* Check whether or not the timer instance supports internal trigger input */\r\n    assert_param(IS_TIM_CLOCKSOURCE_ITRX_INSTANCE(htim->Instance));\r\n\r\n    TIM_ITRx_SetConfig(htim->Instance, sClockSourceConfig->ClockSource);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Selects the signal connected to the TI1 input: direct from CH1_input\r\n *         or a XOR combination between CH1_input, CH2_input & CH3_input\r\n * @param  htim TIM handle.\r\n * @param  TI1_Selection Indicate whether or not channel 1 is connected to the\r\n *         output of a XOR gate.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_TI1SELECTION_CH1: The TIMx_CH1 pin is connected to TI1 input\r\n *            @arg TIM_TI1SELECTION_XORCOMBINATION: The TIMx_CH1, CH2 and CH3\r\n *            pins are connected to the TI1 input (XOR combination)\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection) {\r\n  uint32_t tmpcr2;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_XOR_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_TI1SELECTION(TI1_Selection));\r\n\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = htim->Instance->CR2;\r\n\r\n  /* Reset the TI1 selection */\r\n  tmpcr2 &= ~TIM_CR2_TI1S;\r\n\r\n  /* Set the TI1 selection */\r\n  tmpcr2 |= TI1_Selection;\r\n\r\n  /* Write to TIMxCR2 */\r\n  htim->Instance->CR2 = tmpcr2;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the TIM in Slave mode\r\n * @param  htim TIM handle.\r\n * @param  sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that\r\n *         contains the selected trigger (internal trigger input, filtered\r\n *         timer input or external trigger input) and the Slave mode\r\n *         (Disable, Reset, Gated, Trigger, External clock mode 1).\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode));\r\n  assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger));\r\n\r\n  __HAL_LOCK(htim);\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK) {\r\n    htim->State = HAL_TIM_STATE_READY;\r\n    __HAL_UNLOCK(htim);\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Disable Trigger Interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_TRIGGER);\r\n\r\n  /* Disable Trigger DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER);\r\n\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the TIM in Slave mode in interrupt mode\r\n * @param  htim TIM handle.\r\n * @param  sSlaveConfig pointer to a TIM_SlaveConfigTypeDef structure that\r\n *         contains the selected trigger (internal trigger input, filtered\r\n *         timer input or external trigger input) and the Slave mode\r\n *         (Disable, Reset, Gated, Trigger, External clock mode 1).\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_SLAVE_MODE(sSlaveConfig->SlaveMode));\r\n  assert_param(IS_TIM_TRIGGER_SELECTION(sSlaveConfig->InputTrigger));\r\n\r\n  __HAL_LOCK(htim);\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK) {\r\n    htim->State = HAL_TIM_STATE_READY;\r\n    __HAL_UNLOCK(htim);\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Enable Trigger Interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_TRIGGER);\r\n\r\n  /* Disable Trigger DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_TRIGGER);\r\n\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Read the captured value from Capture Compare unit\r\n * @param  htim TIM handle.\r\n * @param  Channel TIM Channels to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4 selected\r\n * @retval Captured value\r\n */\r\nuint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpreg = 0U;\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n\r\n    /* Return the capture 1 value */\r\n    tmpreg = htim->Instance->CCR1;\r\n\r\n    break;\r\n  }\r\n  case TIM_CHANNEL_2: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n\r\n    /* Return the capture 2 value */\r\n    tmpreg = htim->Instance->CCR2;\r\n\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC3_INSTANCE(htim->Instance));\r\n\r\n    /* Return the capture 3 value */\r\n    tmpreg = htim->Instance->CCR3;\r\n\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_4: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC4_INSTANCE(htim->Instance));\r\n\r\n    /* Return the capture 4 value */\r\n    tmpreg = htim->Instance->CCR4;\r\n\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  return tmpreg;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions\r\n  *  @brief    TIM Callbacks functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                        ##### TIM Callbacks functions #####\r\n  ==============================================================================\r\n [..]\r\n   This section provides TIM callback functions:\r\n   (+) TIM Period elapsed callback\r\n   (+) TIM Output Compare callback\r\n   (+) TIM Input capture callback\r\n   (+) TIM Trigger callback\r\n   (+) TIM Error callback\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Period elapsed half complete callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PeriodElapsedHalfCpltCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Output Compare callback in non-blocking mode\r\n * @param  htim TIM OC handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_OC_DelayElapsedCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Input Capture callback in non-blocking mode\r\n * @param  htim TIM IC handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_IC_CaptureCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Input Capture half complete callback in non-blocking mode\r\n * @param  htim TIM IC handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_IC_CaptureHalfCpltCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  PWM Pulse finished callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PWM_PulseFinishedCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  PWM Pulse finished half complete callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_PWM_PulseFinishedHalfCpltCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Hall Trigger detection callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_TriggerCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Hall Trigger detection half complete callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_TriggerHalfCpltCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Timer error callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIM_ErrorCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n/**\r\n * @brief  Register a User TIM callback to be used instead of the weak predefined callback\r\n * @param htim tim handle\r\n * @param CallbackID ID of the callback to be registered\r\n *        This parameter can be one of the following values:\r\n *          @arg @ref HAL_TIM_BASE_MSPINIT_CB_ID Base MspInit Callback ID\r\n *          @arg @ref HAL_TIM_BASE_MSPDEINIT_CB_ID Base MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_IC_MSPINIT_CB_ID IC MspInit Callback ID\r\n *          @arg @ref HAL_TIM_IC_MSPDEINIT_CB_ID IC MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_OC_MSPINIT_CB_ID OC MspInit Callback ID\r\n *          @arg @ref HAL_TIM_OC_MSPDEINIT_CB_ID OC MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_PWM_MSPINIT_CB_ID PWM MspInit Callback ID\r\n *          @arg @ref HAL_TIM_PWM_MSPDEINIT_CB_ID PWM MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_ONE_PULSE_MSPINIT_CB_ID One Pulse MspInit Callback ID\r\n *          @arg @ref HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID One Pulse MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_ENCODER_MSPINIT_CB_ID Encoder MspInit Callback ID\r\n *          @arg @ref HAL_TIM_ENCODER_MSPDEINIT_CB_ID Encoder MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID Hall Sensor MspInit Callback ID\r\n *          @arg @ref HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID Hall Sensor MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_PERIOD_ELAPSED_CB_ID Period Elapsed Callback ID\r\n *          @arg @ref HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID Period Elapsed half complete Callback ID\r\n *          @arg @ref HAL_TIM_TRIGGER_CB_ID Trigger Callback ID\r\n *          @arg @ref HAL_TIM_TRIGGER_HALF_CB_ID Trigger half complete Callback ID\r\n *          @arg @ref HAL_TIM_IC_CAPTURE_CB_ID Input Capture Callback ID\r\n *          @arg @ref HAL_TIM_IC_CAPTURE_HALF_CB_ID Input Capture half complete Callback ID\r\n *          @arg @ref HAL_TIM_OC_DELAY_ELAPSED_CB_ID Output Compare Delay Elapsed Callback ID\r\n *          @arg @ref HAL_TIM_PWM_PULSE_FINISHED_CB_ID PWM Pulse Finished Callback ID\r\n *          @arg @ref HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID PWM Pulse Finished half complete Callback ID\r\n *          @arg @ref HAL_TIM_ERROR_CB_ID Error Callback ID\r\n *          @arg @ref HAL_TIM_COMMUTATION_CB_ID Commutation Callback ID\r\n *          @arg @ref HAL_TIM_COMMUTATION_HALF_CB_ID Commutation half complete Callback ID\r\n *          @arg @ref HAL_TIM_BREAK_CB_ID Break Callback ID\r\n *          @param pCallback pointer to the callback function\r\n *          @retval status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  if (pCallback == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n  /* Process locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  if (htim->State == HAL_TIM_STATE_READY) {\r\n    switch (CallbackID) {\r\n    case HAL_TIM_BASE_MSPINIT_CB_ID:\r\n      htim->Base_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_BASE_MSPDEINIT_CB_ID:\r\n      htim->Base_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPINIT_CB_ID:\r\n      htim->IC_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPDEINIT_CB_ID:\r\n      htim->IC_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPINIT_CB_ID:\r\n      htim->OC_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPDEINIT_CB_ID:\r\n      htim->OC_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPINIT_CB_ID:\r\n      htim->PWM_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPDEINIT_CB_ID:\r\n      htim->PWM_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID:\r\n      htim->OnePulse_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID:\r\n      htim->OnePulse_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPINIT_CB_ID:\r\n      htim->Encoder_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPDEINIT_CB_ID:\r\n      htim->Encoder_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID:\r\n      htim->HallSensor_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID:\r\n      htim->HallSensor_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PERIOD_ELAPSED_CB_ID:\r\n      htim->PeriodElapsedCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID:\r\n      htim->PeriodElapsedHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_TRIGGER_CB_ID:\r\n      htim->TriggerCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_TRIGGER_HALF_CB_ID:\r\n      htim->TriggerHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_CAPTURE_CB_ID:\r\n      htim->IC_CaptureCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_CAPTURE_HALF_CB_ID:\r\n      htim->IC_CaptureHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_OC_DELAY_ELAPSED_CB_ID:\r\n      htim->OC_DelayElapsedCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_PULSE_FINISHED_CB_ID:\r\n      htim->PWM_PulseFinishedCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID:\r\n      htim->PWM_PulseFinishedHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ERROR_CB_ID:\r\n      htim->ErrorCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_COMMUTATION_CB_ID:\r\n      htim->CommutationCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_COMMUTATION_HALF_CB_ID:\r\n      htim->CommutationHalfCpltCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_BREAK_CB_ID:\r\n      htim->BreakCallback = pCallback;\r\n      break;\r\n\r\n    default:\r\n      /* Return error status */\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else if (htim->State == HAL_TIM_STATE_RESET) {\r\n    switch (CallbackID) {\r\n    case HAL_TIM_BASE_MSPINIT_CB_ID:\r\n      htim->Base_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_BASE_MSPDEINIT_CB_ID:\r\n      htim->Base_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPINIT_CB_ID:\r\n      htim->IC_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPDEINIT_CB_ID:\r\n      htim->IC_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPINIT_CB_ID:\r\n      htim->OC_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPDEINIT_CB_ID:\r\n      htim->OC_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPINIT_CB_ID:\r\n      htim->PWM_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPDEINIT_CB_ID:\r\n      htim->PWM_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID:\r\n      htim->OnePulse_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID:\r\n      htim->OnePulse_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPINIT_CB_ID:\r\n      htim->Encoder_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPDEINIT_CB_ID:\r\n      htim->Encoder_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID:\r\n      htim->HallSensor_MspInitCallback = pCallback;\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID:\r\n      htim->HallSensor_MspDeInitCallback = pCallback;\r\n      break;\r\n\r\n    default:\r\n      /* Return error status */\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else {\r\n    /* Return error status */\r\n    status = HAL_ERROR;\r\n  }\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return status;\r\n}\r\n\r\n/**\r\n * @brief  Unregister a TIM callback\r\n *         TIM callback is redirected to the weak predefined callback\r\n * @param htim tim handle\r\n * @param CallbackID ID of the callback to be unregistered\r\n *        This parameter can be one of the following values:\r\n *          @arg @ref HAL_TIM_BASE_MSPINIT_CB_ID Base MspInit Callback ID\r\n *          @arg @ref HAL_TIM_BASE_MSPDEINIT_CB_ID Base MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_IC_MSPINIT_CB_ID IC MspInit Callback ID\r\n *          @arg @ref HAL_TIM_IC_MSPDEINIT_CB_ID IC MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_OC_MSPINIT_CB_ID OC MspInit Callback ID\r\n *          @arg @ref HAL_TIM_OC_MSPDEINIT_CB_ID OC MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_PWM_MSPINIT_CB_ID PWM MspInit Callback ID\r\n *          @arg @ref HAL_TIM_PWM_MSPDEINIT_CB_ID PWM MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_ONE_PULSE_MSPINIT_CB_ID One Pulse MspInit Callback ID\r\n *          @arg @ref HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID One Pulse MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_ENCODER_MSPINIT_CB_ID Encoder MspInit Callback ID\r\n *          @arg @ref HAL_TIM_ENCODER_MSPDEINIT_CB_ID Encoder MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID Hall Sensor MspInit Callback ID\r\n *          @arg @ref HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID Hall Sensor MspDeInit Callback ID\r\n *          @arg @ref HAL_TIM_PERIOD_ELAPSED_CB_ID Period Elapsed Callback ID\r\n *          @arg @ref HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID Period Elapsed half complete Callback ID\r\n *          @arg @ref HAL_TIM_TRIGGER_CB_ID Trigger Callback ID\r\n *          @arg @ref HAL_TIM_TRIGGER_HALF_CB_ID Trigger half complete Callback ID\r\n *          @arg @ref HAL_TIM_IC_CAPTURE_CB_ID Input Capture Callback ID\r\n *          @arg @ref HAL_TIM_IC_CAPTURE_HALF_CB_ID Input Capture half complete Callback ID\r\n *          @arg @ref HAL_TIM_OC_DELAY_ELAPSED_CB_ID Output Compare Delay Elapsed Callback ID\r\n *          @arg @ref HAL_TIM_PWM_PULSE_FINISHED_CB_ID PWM Pulse Finished Callback ID\r\n *          @arg @ref HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID PWM Pulse Finished half complete Callback ID\r\n *          @arg @ref HAL_TIM_ERROR_CB_ID Error Callback ID\r\n *          @arg @ref HAL_TIM_COMMUTATION_CB_ID Commutation Callback ID\r\n *          @arg @ref HAL_TIM_COMMUTATION_HALF_CB_ID Commutation half complete Callback ID\r\n *          @arg @ref HAL_TIM_BREAK_CB_ID Break Callback ID\r\n *          @retval status\r\n */\r\nHAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID) {\r\n  HAL_StatusTypeDef status = HAL_OK;\r\n\r\n  /* Process locked */\r\n  __HAL_LOCK(htim);\r\n\r\n  if (htim->State == HAL_TIM_STATE_READY) {\r\n    switch (CallbackID) {\r\n    case HAL_TIM_BASE_MSPINIT_CB_ID:\r\n      htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; /* Legacy weak Base MspInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_BASE_MSPDEINIT_CB_ID:\r\n      htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; /* Legacy weak Base Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPINIT_CB_ID:\r\n      htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; /* Legacy weak IC Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPDEINIT_CB_ID:\r\n      htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; /* Legacy weak IC Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPINIT_CB_ID:\r\n      htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; /* Legacy weak OC Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPDEINIT_CB_ID:\r\n      htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; /* Legacy weak OC Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPINIT_CB_ID:\r\n      htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; /* Legacy weak PWM Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPDEINIT_CB_ID:\r\n      htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; /* Legacy weak PWM Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID:\r\n      htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; /* Legacy weak One Pulse Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID:\r\n      htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; /* Legacy weak One Pulse Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPINIT_CB_ID:\r\n      htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; /* Legacy weak Encoder Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPDEINIT_CB_ID:\r\n      htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; /* Legacy weak Encoder Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID:\r\n      htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; /* Legacy weak Hall Sensor Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID:\r\n      htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; /* Legacy weak Hall Sensor Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PERIOD_ELAPSED_CB_ID:\r\n      htim->PeriodElapsedCallback = HAL_TIM_PeriodElapsedCallback; /* Legacy weak Period Elapsed Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PERIOD_ELAPSED_HALF_CB_ID:\r\n      htim->PeriodElapsedHalfCpltCallback = HAL_TIM_PeriodElapsedHalfCpltCallback; /* Legacy weak Period Elapsed half complete Callback */\r\n      break;\r\n\r\n    case HAL_TIM_TRIGGER_CB_ID:\r\n      htim->TriggerCallback = HAL_TIM_TriggerCallback; /* Legacy weak Trigger Callback */\r\n      break;\r\n\r\n    case HAL_TIM_TRIGGER_HALF_CB_ID:\r\n      htim->TriggerHalfCpltCallback = HAL_TIM_TriggerHalfCpltCallback; /* Legacy weak Trigger half complete Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_CAPTURE_CB_ID:\r\n      htim->IC_CaptureCallback = HAL_TIM_IC_CaptureCallback; /* Legacy weak IC Capture Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_CAPTURE_HALF_CB_ID:\r\n      htim->IC_CaptureHalfCpltCallback = HAL_TIM_IC_CaptureHalfCpltCallback; /* Legacy weak IC Capture half complete Callback */\r\n      break;\r\n\r\n    case HAL_TIM_OC_DELAY_ELAPSED_CB_ID:\r\n      htim->OC_DelayElapsedCallback = HAL_TIM_OC_DelayElapsedCallback; /* Legacy weak OC Delay Elapsed Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_PULSE_FINISHED_CB_ID:\r\n      htim->PWM_PulseFinishedCallback = HAL_TIM_PWM_PulseFinishedCallback; /* Legacy weak PWM Pulse Finished Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_PULSE_FINISHED_HALF_CB_ID:\r\n      htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback; /* Legacy weak PWM Pulse Finished half complete Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ERROR_CB_ID:\r\n      htim->ErrorCallback = HAL_TIM_ErrorCallback; /* Legacy weak Error Callback */\r\n      break;\r\n\r\n    case HAL_TIM_COMMUTATION_CB_ID:\r\n      htim->CommutationCallback = HAL_TIMEx_CommutCallback; /* Legacy weak Commutation Callback */\r\n      break;\r\n\r\n    case HAL_TIM_COMMUTATION_HALF_CB_ID:\r\n      htim->CommutationHalfCpltCallback = HAL_TIMEx_CommutHalfCpltCallback; /* Legacy weak Commutation half complete Callback */\r\n      break;\r\n\r\n    case HAL_TIM_BREAK_CB_ID:\r\n      htim->BreakCallback = HAL_TIMEx_BreakCallback; /* Legacy weak Break Callback */\r\n      break;\r\n\r\n    default:\r\n      /* Return error status */\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else if (htim->State == HAL_TIM_STATE_RESET) {\r\n    switch (CallbackID) {\r\n    case HAL_TIM_BASE_MSPINIT_CB_ID:\r\n      htim->Base_MspInitCallback = HAL_TIM_Base_MspInit; /* Legacy weak Base MspInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_BASE_MSPDEINIT_CB_ID:\r\n      htim->Base_MspDeInitCallback = HAL_TIM_Base_MspDeInit; /* Legacy weak Base Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPINIT_CB_ID:\r\n      htim->IC_MspInitCallback = HAL_TIM_IC_MspInit; /* Legacy weak IC Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_IC_MSPDEINIT_CB_ID:\r\n      htim->IC_MspDeInitCallback = HAL_TIM_IC_MspDeInit; /* Legacy weak IC Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPINIT_CB_ID:\r\n      htim->OC_MspInitCallback = HAL_TIM_OC_MspInit; /* Legacy weak OC Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_OC_MSPDEINIT_CB_ID:\r\n      htim->OC_MspDeInitCallback = HAL_TIM_OC_MspDeInit; /* Legacy weak OC Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPINIT_CB_ID:\r\n      htim->PWM_MspInitCallback = HAL_TIM_PWM_MspInit; /* Legacy weak PWM Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_PWM_MSPDEINIT_CB_ID:\r\n      htim->PWM_MspDeInitCallback = HAL_TIM_PWM_MspDeInit; /* Legacy weak PWM Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPINIT_CB_ID:\r\n      htim->OnePulse_MspInitCallback = HAL_TIM_OnePulse_MspInit; /* Legacy weak One Pulse Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ONE_PULSE_MSPDEINIT_CB_ID:\r\n      htim->OnePulse_MspDeInitCallback = HAL_TIM_OnePulse_MspDeInit; /* Legacy weak One Pulse Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPINIT_CB_ID:\r\n      htim->Encoder_MspInitCallback = HAL_TIM_Encoder_MspInit; /* Legacy weak Encoder Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_ENCODER_MSPDEINIT_CB_ID:\r\n      htim->Encoder_MspDeInitCallback = HAL_TIM_Encoder_MspDeInit; /* Legacy weak Encoder Msp DeInit Callback */\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPINIT_CB_ID:\r\n      htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit; /* Legacy weak Hall Sensor Msp Init Callback */\r\n      break;\r\n\r\n    case HAL_TIM_HALL_SENSOR_MSPDEINIT_CB_ID:\r\n      htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit; /* Legacy weak Hall Sensor Msp DeInit Callback */\r\n      break;\r\n\r\n    default:\r\n      /* Return error status */\r\n      status = HAL_ERROR;\r\n      break;\r\n    }\r\n  } else {\r\n    /* Return error status */\r\n    status = HAL_ERROR;\r\n  }\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return status;\r\n}\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions\r\n  *  @brief   TIM Peripheral State functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                        ##### Peripheral State functions #####\r\n  ==============================================================================\r\n    [..]\r\n    This subsection permits to get in run-time the status of the peripheral\r\n    and the data flow.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Return the TIM Base handle state.\r\n * @param  htim TIM Base handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM OC handle state.\r\n * @param  htim TIM Output Compare handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_OC_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM PWM handle state.\r\n * @param  htim TIM handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_PWM_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM Input Capture handle state.\r\n * @param  htim TIM IC handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_IC_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM One Pulse Mode handle state.\r\n * @param  htim TIM OPM handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_OnePulse_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM Encoder Mode handle state.\r\n * @param  htim TIM Encoder Interface handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return the TIM Encoder Mode handle state.\r\n * @param  htim TIM handle\r\n * @retval Active channel\r\n */\r\nHAL_TIM_ActiveChannel HAL_TIM_GetActiveChannel(TIM_HandleTypeDef *htim) { return htim->Channel; }\r\n\r\n/**\r\n * @brief  Return actual state of the TIM channel.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4\r\n *            @arg TIM_CHANNEL_5: TIM Channel 5\r\n *            @arg TIM_CHANNEL_6: TIM Channel 6\r\n * @retval TIM Channel state\r\n */\r\nHAL_TIM_ChannelStateTypeDef HAL_TIM_GetChannelState(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  HAL_TIM_ChannelStateTypeDef channel_state;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));\r\n\r\n  channel_state = TIM_CHANNEL_STATE_GET(htim, Channel);\r\n\r\n  return channel_state;\r\n}\r\n\r\n/**\r\n * @brief  Return actual state of a DMA burst operation.\r\n * @param  htim TIM handle\r\n * @retval DMA burst state\r\n */\r\nHAL_TIM_DMABurstStateTypeDef HAL_TIM_DMABurstState(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));\r\n\r\n  return htim->DMABurstState;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIM_Private_Functions TIM Private Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  TIM DMA error callback\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIM_DMAError(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n    TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else {\r\n    htim->State = HAL_TIM_STATE_READY;\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->ErrorCallback(htim);\r\n#else\r\n  HAL_TIM_ErrorCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Delay Pulse complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMADelayPulseCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n  HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Delay Pulse half complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIM_DMADelayPulseHalfCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->PWM_PulseFinishedHalfCpltCallback(htim);\r\n#else\r\n  HAL_TIM_PWM_PulseFinishedHalfCpltCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Capture complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIM_DMACaptureCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->IC_CaptureCallback(htim);\r\n#else\r\n  HAL_TIM_IC_CaptureCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Capture half complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIM_DMACaptureHalfCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->IC_CaptureHalfCpltCallback(htim);\r\n#else\r\n  HAL_TIM_IC_CaptureHalfCpltCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Period Elapse complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMAPeriodElapsedCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (htim->hdma[TIM_DMA_ID_UPDATE]->Init.Mode == DMA_NORMAL) {\r\n    htim->State = HAL_TIM_STATE_READY;\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->PeriodElapsedCallback(htim);\r\n#else\r\n  HAL_TIM_PeriodElapsedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Period Elapse half complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->PeriodElapsedHalfCpltCallback(htim);\r\n#else\r\n  HAL_TIM_PeriodElapsedHalfCpltCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Trigger callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (htim->hdma[TIM_DMA_ID_TRIGGER]->Init.Mode == DMA_NORMAL) {\r\n    htim->State = HAL_TIM_STATE_READY;\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->TriggerCallback(htim);\r\n#else\r\n  HAL_TIM_TriggerCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Trigger half complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->TriggerHalfCpltCallback(htim);\r\n#else\r\n  HAL_TIM_TriggerHalfCpltCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  Time Base configuration\r\n * @param  TIMx TIM peripheral\r\n * @param  Structure TIM Base configuration structure\r\n * @retval None\r\n */\r\nvoid TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure) {\r\n  uint32_t tmpcr1;\r\n  tmpcr1 = TIMx->CR1;\r\n\r\n  /* Set TIM Time Base Unit parameters ---------------------------------------*/\r\n  if (IS_TIM_COUNTER_MODE_SELECT_INSTANCE(TIMx)) {\r\n    /* Select the Counter Mode */\r\n    tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS);\r\n    tmpcr1 |= Structure->CounterMode;\r\n  }\r\n\r\n  if (IS_TIM_CLOCK_DIVISION_INSTANCE(TIMx)) {\r\n    /* Set the clock division */\r\n    tmpcr1 &= ~TIM_CR1_CKD;\r\n    tmpcr1 |= (uint32_t)Structure->ClockDivision;\r\n  }\r\n\r\n  /* Set the auto-reload preload */\r\n  MODIFY_REG(tmpcr1, TIM_CR1_ARPE, Structure->AutoReloadPreload);\r\n\r\n  TIMx->CR1 = tmpcr1;\r\n\r\n  /* Set the Autoreload value */\r\n  TIMx->ARR = (uint32_t)Structure->Period;\r\n\r\n  /* Set the Prescaler value */\r\n  TIMx->PSC = Structure->Prescaler;\r\n\r\n  if (IS_TIM_REPETITION_COUNTER_INSTANCE(TIMx)) {\r\n    /* Set the Repetition Counter value */\r\n    TIMx->RCR = Structure->RepetitionCounter;\r\n  }\r\n\r\n  /* Generate an update event to reload the Prescaler\r\n     and the repetition counter (only for advanced timer) value immediately */\r\n  TIMx->EGR = TIM_EGR_UG;\r\n}\r\n\r\n/**\r\n * @brief  Timer Output Compare 1 configuration\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  OC_Config The output configuration structure\r\n * @retval None\r\n */\r\nstatic void TIM_OC1_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) {\r\n  uint32_t tmpccmrx;\r\n  uint32_t tmpccer;\r\n  uint32_t tmpcr2;\r\n\r\n  /* Disable the Channel 1: Reset the CC1E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC1E;\r\n\r\n  /* Get the TIMx CCER register value */\r\n  tmpccer = TIMx->CCER;\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = TIMx->CR2;\r\n\r\n  /* Get the TIMx CCMR1 register value */\r\n  tmpccmrx = TIMx->CCMR1;\r\n\r\n  /* Reset the Output Compare Mode Bits */\r\n  tmpccmrx &= ~TIM_CCMR1_OC1M;\r\n  tmpccmrx &= ~TIM_CCMR1_CC1S;\r\n  /* Select the Output Compare Mode */\r\n  tmpccmrx |= OC_Config->OCMode;\r\n\r\n  /* Reset the Output Polarity level */\r\n  tmpccer &= ~TIM_CCER_CC1P;\r\n  /* Set the Output Compare Polarity */\r\n  tmpccer |= OC_Config->OCPolarity;\r\n\r\n  if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_1)) {\r\n    /* Check parameters */\r\n    assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));\r\n\r\n    /* Reset the Output N Polarity level */\r\n    tmpccer &= ~TIM_CCER_CC1NP;\r\n    /* Set the Output N Polarity */\r\n    tmpccer |= OC_Config->OCNPolarity;\r\n    /* Reset the Output N State */\r\n    tmpccer &= ~TIM_CCER_CC1NE;\r\n  }\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(TIMx)) {\r\n    /* Check parameters */\r\n    assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));\r\n    assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));\r\n\r\n    /* Reset the Output Compare and Output Compare N IDLE State */\r\n    tmpcr2 &= ~TIM_CR2_OIS1;\r\n    tmpcr2 &= ~TIM_CR2_OIS1N;\r\n    /* Set the Output Idle state */\r\n    tmpcr2 |= OC_Config->OCIdleState;\r\n    /* Set the Output N Idle state */\r\n    tmpcr2 |= OC_Config->OCNIdleState;\r\n  }\r\n\r\n  /* Write to TIMx CR2 */\r\n  TIMx->CR2 = tmpcr2;\r\n\r\n  /* Write to TIMx CCMR1 */\r\n  TIMx->CCMR1 = tmpccmrx;\r\n\r\n  /* Set the Capture Compare Register value */\r\n  TIMx->CCR1 = OC_Config->Pulse;\r\n\r\n  /* Write to TIMx CCER */\r\n  TIMx->CCER = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Timer Output Compare 2 configuration\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  OC_Config The output configuration structure\r\n * @retval None\r\n */\r\nvoid TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) {\r\n  uint32_t tmpccmrx;\r\n  uint32_t tmpccer;\r\n  uint32_t tmpcr2;\r\n\r\n  /* Disable the Channel 2: Reset the CC2E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC2E;\r\n\r\n  /* Get the TIMx CCER register value */\r\n  tmpccer = TIMx->CCER;\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = TIMx->CR2;\r\n\r\n  /* Get the TIMx CCMR1 register value */\r\n  tmpccmrx = TIMx->CCMR1;\r\n\r\n  /* Reset the Output Compare mode and Capture/Compare selection Bits */\r\n  tmpccmrx &= ~TIM_CCMR1_OC2M;\r\n  tmpccmrx &= ~TIM_CCMR1_CC2S;\r\n\r\n  /* Select the Output Compare Mode */\r\n  tmpccmrx |= (OC_Config->OCMode << 8U);\r\n\r\n  /* Reset the Output Polarity level */\r\n  tmpccer &= ~TIM_CCER_CC2P;\r\n  /* Set the Output Compare Polarity */\r\n  tmpccer |= (OC_Config->OCPolarity << 4U);\r\n\r\n  if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_2)) {\r\n    assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));\r\n\r\n    /* Reset the Output N Polarity level */\r\n    tmpccer &= ~TIM_CCER_CC2NP;\r\n    /* Set the Output N Polarity */\r\n    tmpccer |= (OC_Config->OCNPolarity << 4U);\r\n    /* Reset the Output N State */\r\n    tmpccer &= ~TIM_CCER_CC2NE;\r\n  }\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(TIMx)) {\r\n    /* Check parameters */\r\n    assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));\r\n    assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));\r\n\r\n    /* Reset the Output Compare and Output Compare N IDLE State */\r\n    tmpcr2 &= ~TIM_CR2_OIS2;\r\n    tmpcr2 &= ~TIM_CR2_OIS2N;\r\n    /* Set the Output Idle state */\r\n    tmpcr2 |= (OC_Config->OCIdleState << 2U);\r\n    /* Set the Output N Idle state */\r\n    tmpcr2 |= (OC_Config->OCNIdleState << 2U);\r\n  }\r\n\r\n  /* Write to TIMx CR2 */\r\n  TIMx->CR2 = tmpcr2;\r\n\r\n  /* Write to TIMx CCMR1 */\r\n  TIMx->CCMR1 = tmpccmrx;\r\n\r\n  /* Set the Capture Compare Register value */\r\n  TIMx->CCR2 = OC_Config->Pulse;\r\n\r\n  /* Write to TIMx CCER */\r\n  TIMx->CCER = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Timer Output Compare 3 configuration\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  OC_Config The output configuration structure\r\n * @retval None\r\n */\r\nstatic void TIM_OC3_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) {\r\n  uint32_t tmpccmrx;\r\n  uint32_t tmpccer;\r\n  uint32_t tmpcr2;\r\n\r\n  /* Disable the Channel 3: Reset the CC2E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC3E;\r\n\r\n  /* Get the TIMx CCER register value */\r\n  tmpccer = TIMx->CCER;\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = TIMx->CR2;\r\n\r\n  /* Get the TIMx CCMR2 register value */\r\n  tmpccmrx = TIMx->CCMR2;\r\n\r\n  /* Reset the Output Compare mode and Capture/Compare selection Bits */\r\n  tmpccmrx &= ~TIM_CCMR2_OC3M;\r\n  tmpccmrx &= ~TIM_CCMR2_CC3S;\r\n  /* Select the Output Compare Mode */\r\n  tmpccmrx |= OC_Config->OCMode;\r\n\r\n  /* Reset the Output Polarity level */\r\n  tmpccer &= ~TIM_CCER_CC3P;\r\n  /* Set the Output Compare Polarity */\r\n  tmpccer |= (OC_Config->OCPolarity << 8U);\r\n\r\n  if (IS_TIM_CCXN_INSTANCE(TIMx, TIM_CHANNEL_3)) {\r\n    assert_param(IS_TIM_OCN_POLARITY(OC_Config->OCNPolarity));\r\n\r\n    /* Reset the Output N Polarity level */\r\n    tmpccer &= ~TIM_CCER_CC3NP;\r\n    /* Set the Output N Polarity */\r\n    tmpccer |= (OC_Config->OCNPolarity << 8U);\r\n    /* Reset the Output N State */\r\n    tmpccer &= ~TIM_CCER_CC3NE;\r\n  }\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(TIMx)) {\r\n    /* Check parameters */\r\n    assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));\r\n    assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));\r\n\r\n    /* Reset the Output Compare and Output Compare N IDLE State */\r\n    tmpcr2 &= ~TIM_CR2_OIS3;\r\n    tmpcr2 &= ~TIM_CR2_OIS3N;\r\n    /* Set the Output Idle state */\r\n    tmpcr2 |= (OC_Config->OCIdleState << 4U);\r\n    /* Set the Output N Idle state */\r\n    tmpcr2 |= (OC_Config->OCNIdleState << 4U);\r\n  }\r\n\r\n  /* Write to TIMx CR2 */\r\n  TIMx->CR2 = tmpcr2;\r\n\r\n  /* Write to TIMx CCMR2 */\r\n  TIMx->CCMR2 = tmpccmrx;\r\n\r\n  /* Set the Capture Compare Register value */\r\n  TIMx->CCR3 = OC_Config->Pulse;\r\n\r\n  /* Write to TIMx CCER */\r\n  TIMx->CCER = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Timer Output Compare 4 configuration\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  OC_Config The output configuration structure\r\n * @retval None\r\n */\r\nstatic void TIM_OC4_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config) {\r\n  uint32_t tmpccmrx;\r\n  uint32_t tmpccer;\r\n  uint32_t tmpcr2;\r\n\r\n  /* Disable the Channel 4: Reset the CC4E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC4E;\r\n\r\n  /* Get the TIMx CCER register value */\r\n  tmpccer = TIMx->CCER;\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = TIMx->CR2;\r\n\r\n  /* Get the TIMx CCMR2 register value */\r\n  tmpccmrx = TIMx->CCMR2;\r\n\r\n  /* Reset the Output Compare mode and Capture/Compare selection Bits */\r\n  tmpccmrx &= ~TIM_CCMR2_OC4M;\r\n  tmpccmrx &= ~TIM_CCMR2_CC4S;\r\n\r\n  /* Select the Output Compare Mode */\r\n  tmpccmrx |= (OC_Config->OCMode << 8U);\r\n\r\n  /* Reset the Output Polarity level */\r\n  tmpccer &= ~TIM_CCER_CC4P;\r\n  /* Set the Output Compare Polarity */\r\n  tmpccer |= (OC_Config->OCPolarity << 12U);\r\n\r\n  if (IS_TIM_BREAK_INSTANCE(TIMx)) {\r\n    /* Check parameters */\r\n    assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));\r\n\r\n    /* Reset the Output Compare IDLE State */\r\n    tmpcr2 &= ~TIM_CR2_OIS4;\r\n\r\n    /* Set the Output Idle state */\r\n    tmpcr2 |= (OC_Config->OCIdleState << 6U);\r\n  }\r\n\r\n  /* Write to TIMx CR2 */\r\n  TIMx->CR2 = tmpcr2;\r\n\r\n  /* Write to TIMx CCMR2 */\r\n  TIMx->CCMR2 = tmpccmrx;\r\n\r\n  /* Set the Capture Compare Register value */\r\n  TIMx->CCR4 = OC_Config->Pulse;\r\n\r\n  /* Write to TIMx CCER */\r\n  TIMx->CCER = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Slave Timer configuration function\r\n * @param  htim TIM handle\r\n * @param  sSlaveConfig Slave timer configuration\r\n * @retval None\r\n */\r\nstatic HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig) {\r\n  uint32_t tmpsmcr;\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Get the TIMx SMCR register value */\r\n  tmpsmcr = htim->Instance->SMCR;\r\n\r\n  /* Reset the Trigger Selection Bits */\r\n  tmpsmcr &= ~TIM_SMCR_TS;\r\n  /* Set the Input Trigger source */\r\n  tmpsmcr |= sSlaveConfig->InputTrigger;\r\n\r\n  /* Reset the slave mode Bits */\r\n  tmpsmcr &= ~TIM_SMCR_SMS;\r\n  /* Set the slave mode */\r\n  tmpsmcr |= sSlaveConfig->SlaveMode;\r\n\r\n  /* Write to TIMx SMCR */\r\n  htim->Instance->SMCR = tmpsmcr;\r\n\r\n  /* Configure the trigger prescaler, filter, and polarity */\r\n  switch (sSlaveConfig->InputTrigger) {\r\n  case TIM_TS_ETRF: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CLOCKSOURCE_ETRMODE1_INSTANCE(htim->Instance));\r\n    assert_param(IS_TIM_TRIGGERPRESCALER(sSlaveConfig->TriggerPrescaler));\r\n    assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity));\r\n    assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter));\r\n    /* Configure the ETR Trigger source */\r\n    TIM_ETR_SetConfig(htim->Instance, sSlaveConfig->TriggerPrescaler, sSlaveConfig->TriggerPolarity, sSlaveConfig->TriggerFilter);\r\n    break;\r\n  }\r\n\r\n  case TIM_TS_TI1F_ED: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n    assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter));\r\n\r\n    if (sSlaveConfig->SlaveMode == TIM_SLAVEMODE_GATED) {\r\n      return HAL_ERROR;\r\n    }\r\n\r\n    /* Disable the Channel 1: Reset the CC1E Bit */\r\n    tmpccer = htim->Instance->CCER;\r\n    htim->Instance->CCER &= ~TIM_CCER_CC1E;\r\n    tmpccmr1 = htim->Instance->CCMR1;\r\n\r\n    /* Set the filter */\r\n    tmpccmr1 &= ~TIM_CCMR1_IC1F;\r\n    tmpccmr1 |= ((sSlaveConfig->TriggerFilter) << 4U);\r\n\r\n    /* Write to TIMx CCMR1 and CCER registers */\r\n    htim->Instance->CCMR1 = tmpccmr1;\r\n    htim->Instance->CCER  = tmpccer;\r\n    break;\r\n  }\r\n\r\n  case TIM_TS_TI1FP1: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC1_INSTANCE(htim->Instance));\r\n    assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity));\r\n    assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter));\r\n\r\n    /* Configure TI1 Filter and Polarity */\r\n    TIM_TI1_ConfigInputStage(htim->Instance, sSlaveConfig->TriggerPolarity, sSlaveConfig->TriggerFilter);\r\n    break;\r\n  }\r\n\r\n  case TIM_TS_TI2FP2: {\r\n    /* Check the parameters */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n    assert_param(IS_TIM_TRIGGERPOLARITY(sSlaveConfig->TriggerPolarity));\r\n    assert_param(IS_TIM_TRIGGERFILTER(sSlaveConfig->TriggerFilter));\r\n\r\n    /* Configure TI2 Filter and Polarity */\r\n    TIM_TI2_ConfigInputStage(htim->Instance, sSlaveConfig->TriggerPolarity, sSlaveConfig->TriggerFilter);\r\n    break;\r\n  }\r\n\r\n  case TIM_TS_ITR0:\r\n  case TIM_TS_ITR1:\r\n  case TIM_TS_ITR2:\r\n  case TIM_TS_ITR3: {\r\n    /* Check the parameter */\r\n    assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TI1 as Input.\r\n * @param  TIMx to select the TIM peripheral.\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n *            @arg TIM_ICPOLARITY_BOTHEDGE\r\n * @param  TIM_ICSelection specifies the input to be used.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICSELECTION_DIRECTTI: TIM Input 1 is selected to be connected to IC1.\r\n *            @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 1 is selected to be connected to IC2.\r\n *            @arg TIM_ICSELECTION_TRC: TIM Input 1 is selected to be connected to TRC.\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @retval None\r\n * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI2FP1\r\n *       (on channel2 path) is used as the input signal. Therefore CCMR1 must be\r\n *        protected against un-initialized filter and polarity values.\r\n */\r\nvoid TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 1: Reset the CC1E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC1E;\r\n  tmpccmr1 = TIMx->CCMR1;\r\n  tmpccer  = TIMx->CCER;\r\n\r\n  /* Select the Input */\r\n  if (IS_TIM_CC2_INSTANCE(TIMx) != RESET) {\r\n    tmpccmr1 &= ~TIM_CCMR1_CC1S;\r\n    tmpccmr1 |= TIM_ICSelection;\r\n  } else {\r\n    tmpccmr1 |= TIM_CCMR1_CC1S_0;\r\n  }\r\n\r\n  /* Set the filter */\r\n  tmpccmr1 &= ~TIM_CCMR1_IC1F;\r\n  tmpccmr1 |= ((TIM_ICFilter << 4U) & TIM_CCMR1_IC1F);\r\n\r\n  /* Select the Polarity and set the CC1E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);\r\n  tmpccer |= (TIM_ICPolarity & (TIM_CCER_CC1P | TIM_CCER_CC1NP));\r\n\r\n  /* Write to TIMx CCMR1 and CCER registers */\r\n  TIMx->CCMR1 = tmpccmr1;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Configure the Polarity and Filter for TI1.\r\n * @param  TIMx to select the TIM peripheral.\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n *            @arg TIM_ICPOLARITY_BOTHEDGE\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @retval None\r\n */\r\nstatic void TIM_TI1_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 1: Reset the CC1E Bit */\r\n  tmpccer = TIMx->CCER;\r\n  TIMx->CCER &= ~TIM_CCER_CC1E;\r\n  tmpccmr1 = TIMx->CCMR1;\r\n\r\n  /* Set the filter */\r\n  tmpccmr1 &= ~TIM_CCMR1_IC1F;\r\n  tmpccmr1 |= (TIM_ICFilter << 4U);\r\n\r\n  /* Select the Polarity and set the CC1E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);\r\n  tmpccer |= TIM_ICPolarity;\r\n\r\n  /* Write to TIMx CCMR1 and CCER registers */\r\n  TIMx->CCMR1 = tmpccmr1;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TI2 as Input.\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n *            @arg TIM_ICPOLARITY_BOTHEDGE\r\n * @param  TIM_ICSelection specifies the input to be used.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICSELECTION_DIRECTTI: TIM Input 2 is selected to be connected to IC2.\r\n *            @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 2 is selected to be connected to IC1.\r\n *            @arg TIM_ICSELECTION_TRC: TIM Input 2 is selected to be connected to TRC.\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @retval None\r\n * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI1FP2\r\n *       (on channel1 path) is used as the input signal. Therefore CCMR1 must be\r\n *        protected against un-initialized filter and polarity values.\r\n */\r\nstatic void TIM_TI2_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 2: Reset the CC2E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC2E;\r\n  tmpccmr1 = TIMx->CCMR1;\r\n  tmpccer  = TIMx->CCER;\r\n\r\n  /* Select the Input */\r\n  tmpccmr1 &= ~TIM_CCMR1_CC2S;\r\n  tmpccmr1 |= (TIM_ICSelection << 8U);\r\n\r\n  /* Set the filter */\r\n  tmpccmr1 &= ~TIM_CCMR1_IC2F;\r\n  tmpccmr1 |= ((TIM_ICFilter << 12U) & TIM_CCMR1_IC2F);\r\n\r\n  /* Select the Polarity and set the CC2E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);\r\n  tmpccer |= ((TIM_ICPolarity << 4U) & (TIM_CCER_CC2P | TIM_CCER_CC2NP));\r\n\r\n  /* Write to TIMx CCMR1 and CCER registers */\r\n  TIMx->CCMR1 = tmpccmr1;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Configure the Polarity and Filter for TI2.\r\n * @param  TIMx to select the TIM peripheral.\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n *            @arg TIM_ICPOLARITY_BOTHEDGE\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @retval None\r\n */\r\nstatic void TIM_TI2_ConfigInputStage(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr1;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 2: Reset the CC2E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC2E;\r\n  tmpccmr1 = TIMx->CCMR1;\r\n  tmpccer  = TIMx->CCER;\r\n\r\n  /* Set the filter */\r\n  tmpccmr1 &= ~TIM_CCMR1_IC2F;\r\n  tmpccmr1 |= (TIM_ICFilter << 12U);\r\n\r\n  /* Select the Polarity and set the CC2E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);\r\n  tmpccer |= (TIM_ICPolarity << 4U);\r\n\r\n  /* Write to TIMx CCMR1 and CCER registers */\r\n  TIMx->CCMR1 = tmpccmr1;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TI3 as Input.\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n * @param  TIM_ICSelection specifies the input to be used.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICSELECTION_DIRECTTI: TIM Input 3 is selected to be connected to IC3.\r\n *            @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 3 is selected to be connected to IC4.\r\n *            @arg TIM_ICSELECTION_TRC: TIM Input 3 is selected to be connected to TRC.\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @retval None\r\n * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI3FP4\r\n *       (on channel1 path) is used as the input signal. Therefore CCMR2 must be\r\n *        protected against un-initialized filter and polarity values.\r\n */\r\nstatic void TIM_TI3_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr2;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 3: Reset the CC3E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC3E;\r\n  tmpccmr2 = TIMx->CCMR2;\r\n  tmpccer  = TIMx->CCER;\r\n\r\n  /* Select the Input */\r\n  tmpccmr2 &= ~TIM_CCMR2_CC3S;\r\n  tmpccmr2 |= TIM_ICSelection;\r\n\r\n  /* Set the filter */\r\n  tmpccmr2 &= ~TIM_CCMR2_IC3F;\r\n  tmpccmr2 |= ((TIM_ICFilter << 4U) & TIM_CCMR2_IC3F);\r\n\r\n  /* Select the Polarity and set the CC3E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC3P);\r\n  tmpccer |= ((TIM_ICPolarity << 8U) & TIM_CCER_CC3P);\r\n\r\n  /* Write to TIMx CCMR2 and CCER registers */\r\n  TIMx->CCMR2 = tmpccmr2;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TI4 as Input.\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  TIM_ICPolarity The Input Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICPOLARITY_RISING\r\n *            @arg TIM_ICPOLARITY_FALLING\r\n * @param  TIM_ICSelection specifies the input to be used.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ICSELECTION_DIRECTTI: TIM Input 4 is selected to be connected to IC4.\r\n *            @arg TIM_ICSELECTION_INDIRECTTI: TIM Input 4 is selected to be connected to IC3.\r\n *            @arg TIM_ICSELECTION_TRC: TIM Input 4 is selected to be connected to TRC.\r\n * @param  TIM_ICFilter Specifies the Input Capture Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F.\r\n * @note TIM_ICFilter and TIM_ICPolarity are not used in INDIRECT mode as TI4FP3\r\n *       (on channel1 path) is used as the input signal. Therefore CCMR2 must be\r\n *        protected against un-initialized filter and polarity values.\r\n * @retval None\r\n */\r\nstatic void TIM_TI4_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter) {\r\n  uint32_t tmpccmr2;\r\n  uint32_t tmpccer;\r\n\r\n  /* Disable the Channel 4: Reset the CC4E Bit */\r\n  TIMx->CCER &= ~TIM_CCER_CC4E;\r\n  tmpccmr2 = TIMx->CCMR2;\r\n  tmpccer  = TIMx->CCER;\r\n\r\n  /* Select the Input */\r\n  tmpccmr2 &= ~TIM_CCMR2_CC4S;\r\n  tmpccmr2 |= (TIM_ICSelection << 8U);\r\n\r\n  /* Set the filter */\r\n  tmpccmr2 &= ~TIM_CCMR2_IC4F;\r\n  tmpccmr2 |= ((TIM_ICFilter << 12U) & TIM_CCMR2_IC4F);\r\n\r\n  /* Select the Polarity and set the CC4E Bit */\r\n  tmpccer &= ~(TIM_CCER_CC4P);\r\n  tmpccer |= ((TIM_ICPolarity << 12U) & TIM_CCER_CC4P);\r\n\r\n  /* Write to TIMx CCMR2 and CCER registers */\r\n  TIMx->CCMR2 = tmpccmr2;\r\n  TIMx->CCER  = tmpccer;\r\n}\r\n\r\n/**\r\n * @brief  Selects the Input Trigger source\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  InputTriggerSource The Input Trigger source.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_TS_ITR0: Internal Trigger 0\r\n *            @arg TIM_TS_ITR1: Internal Trigger 1\r\n *            @arg TIM_TS_ITR2: Internal Trigger 2\r\n *            @arg TIM_TS_ITR3: Internal Trigger 3\r\n *            @arg TIM_TS_TI1F_ED: TI1 Edge Detector\r\n *            @arg TIM_TS_TI1FP1: Filtered Timer Input 1\r\n *            @arg TIM_TS_TI2FP2: Filtered Timer Input 2\r\n *            @arg TIM_TS_ETRF: External Trigger input\r\n * @retval None\r\n */\r\nstatic void TIM_ITRx_SetConfig(TIM_TypeDef *TIMx, uint32_t InputTriggerSource) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Get the TIMx SMCR register value */\r\n  tmpsmcr = TIMx->SMCR;\r\n  /* Reset the TS Bits */\r\n  tmpsmcr &= ~TIM_SMCR_TS;\r\n  /* Set the Input Trigger source and the slave mode*/\r\n  tmpsmcr |= (InputTriggerSource | TIM_SLAVEMODE_EXTERNAL1);\r\n  /* Write to TIMx SMCR */\r\n  TIMx->SMCR = tmpsmcr;\r\n}\r\n/**\r\n * @brief  Configures the TIMx External Trigger (ETR).\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  TIM_ExtTRGPrescaler The external Trigger Prescaler.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ETRPRESCALER_DIV1: ETRP Prescaler OFF.\r\n *            @arg TIM_ETRPRESCALER_DIV2: ETRP frequency divided by 2.\r\n *            @arg TIM_ETRPRESCALER_DIV4: ETRP frequency divided by 4.\r\n *            @arg TIM_ETRPRESCALER_DIV8: ETRP frequency divided by 8.\r\n * @param  TIM_ExtTRGPolarity The external Trigger Polarity.\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_ETRPOLARITY_INVERTED: active low or falling edge active.\r\n *            @arg TIM_ETRPOLARITY_NONINVERTED: active high or rising edge active.\r\n * @param  ExtTRGFilter External Trigger Filter.\r\n *          This parameter must be a value between 0x00 and 0x0F\r\n * @retval None\r\n */\r\nvoid TIM_ETR_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ExtTRGPrescaler, uint32_t TIM_ExtTRGPolarity, uint32_t ExtTRGFilter) {\r\n  uint32_t tmpsmcr;\r\n\r\n  tmpsmcr = TIMx->SMCR;\r\n\r\n  /* Reset the ETR Bits */\r\n  tmpsmcr &= ~(TIM_SMCR_ETF | TIM_SMCR_ETPS | TIM_SMCR_ECE | TIM_SMCR_ETP);\r\n\r\n  /* Set the Prescaler, the Filter value and the Polarity */\r\n  tmpsmcr |= (uint32_t)(TIM_ExtTRGPrescaler | (TIM_ExtTRGPolarity | (ExtTRGFilter << 8U)));\r\n\r\n  /* Write to TIMx SMCR */\r\n  TIMx->SMCR = tmpsmcr;\r\n}\r\n\r\n/**\r\n * @brief  Enables or disables the TIM Capture Compare Channel x.\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  Channel specifies the TIM Channel\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3\r\n *            @arg TIM_CHANNEL_4: TIM Channel 4\r\n * @param  ChannelState specifies the TIM Channel CCxE bit new state.\r\n *          This parameter can be: TIM_CCx_ENABLE or TIM_CCx_DISABLE.\r\n * @retval None\r\n */\r\nvoid TIM_CCxChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelState) {\r\n  uint32_t tmp;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CC1_INSTANCE(TIMx));\r\n  assert_param(IS_TIM_CHANNELS(Channel));\r\n\r\n  tmp = TIM_CCER_CC1E << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */\r\n\r\n  /* Reset the CCxE Bit */\r\n  TIMx->CCER &= ~tmp;\r\n\r\n  /* Set or reset the CCxE Bit */\r\n  TIMx->CCER |= (uint32_t)(ChannelState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */\r\n}\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n/**\r\n * @brief  Reset interrupt callbacks to the legacy weak callbacks.\r\n * @param  htim pointer to a TIM_HandleTypeDef structure that contains\r\n *                the configuration information for TIM module.\r\n * @retval None\r\n */\r\nvoid TIM_ResetCallback(TIM_HandleTypeDef *htim) {\r\n  /* Reset the TIM callback to the legacy weak callbacks */\r\n  htim->PeriodElapsedCallback             = HAL_TIM_PeriodElapsedCallback;             /* Legacy weak PeriodElapsedCallback             */\r\n  htim->PeriodElapsedHalfCpltCallback     = HAL_TIM_PeriodElapsedHalfCpltCallback;     /* Legacy weak PeriodElapsedHalfCpltCallback     */\r\n  htim->TriggerCallback                   = HAL_TIM_TriggerCallback;                   /* Legacy weak TriggerCallback                   */\r\n  htim->TriggerHalfCpltCallback           = HAL_TIM_TriggerHalfCpltCallback;           /* Legacy weak TriggerHalfCpltCallback           */\r\n  htim->IC_CaptureCallback                = HAL_TIM_IC_CaptureCallback;                /* Legacy weak IC_CaptureCallback                */\r\n  htim->IC_CaptureHalfCpltCallback        = HAL_TIM_IC_CaptureHalfCpltCallback;        /* Legacy weak IC_CaptureHalfCpltCallback        */\r\n  htim->OC_DelayElapsedCallback           = HAL_TIM_OC_DelayElapsedCallback;           /* Legacy weak OC_DelayElapsedCallback           */\r\n  htim->PWM_PulseFinishedCallback         = HAL_TIM_PWM_PulseFinishedCallback;         /* Legacy weak PWM_PulseFinishedCallback         */\r\n  htim->PWM_PulseFinishedHalfCpltCallback = HAL_TIM_PWM_PulseFinishedHalfCpltCallback; /* Legacy weak PWM_PulseFinishedHalfCpltCallback */\r\n  htim->ErrorCallback                     = HAL_TIM_ErrorCallback;                     /* Legacy weak ErrorCallback                     */\r\n  htim->CommutationCallback               = HAL_TIMEx_CommutCallback;                  /* Legacy weak CommutationCallback               */\r\n  htim->CommutationHalfCpltCallback       = HAL_TIMEx_CommutHalfCpltCallback;          /* Legacy weak CommutationHalfCpltCallback       */\r\n  htim->BreakCallback                     = HAL_TIMEx_BreakCallback;                   /* Legacy weak BreakCallback                     */\r\n}\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_TIM_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/Vendor/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c",
    "content": "/**\r\n  ******************************************************************************\r\n  * @file    stm32f1xx_hal_tim_ex.c\r\n  * @author  MCD Application Team\r\n  * @brief   TIM HAL module driver.\r\n  *          This file provides firmware functions to manage the following\r\n  *          functionalities of the Timer Extended peripheral:\r\n  *           + Time Hall Sensor Interface Initialization\r\n  *           + Time Hall Sensor Interface Start\r\n  *           + Time Complementary signal break and dead time configuration\r\n  *           + Time Master and Slave synchronization configuration\r\n  *           + Timer remapping capabilities configuration\r\n  @verbatim\r\n  ==============================================================================\r\n                      ##### TIMER Extended features #####\r\n  ==============================================================================\r\n  [..]\r\n    The Timer Extended features include:\r\n    (#) Complementary outputs with programmable dead-time for :\r\n        (++) Output Compare\r\n        (++) PWM generation (Edge and Center-aligned Mode)\r\n        (++) One-pulse mode output\r\n    (#) Synchronization circuit to control the timer with external signals and to\r\n        interconnect several timers together.\r\n    (#) Break input to put the timer output signals in reset state or in a known state.\r\n    (#) Supports incremental (quadrature) encoder and hall-sensor circuitry for\r\n        positioning purposes\r\n\r\n            ##### How to use this driver #####\r\n  ==============================================================================\r\n    [..]\r\n     (#) Initialize the TIM low level resources by implementing the following functions\r\n         depending on the selected feature:\r\n           (++) Hall Sensor output : HAL_TIMEx_HallSensor_MspInit()\r\n\r\n     (#) Initialize the TIM low level resources :\r\n        (##) Enable the TIM interface clock using __HAL_RCC_TIMx_CLK_ENABLE();\r\n        (##) TIM pins configuration\r\n            (+++) Enable the clock for the TIM GPIOs using the following function:\r\n              __HAL_RCC_GPIOx_CLK_ENABLE();\r\n            (+++) Configure these TIM pins in Alternate function mode using HAL_GPIO_Init();\r\n\r\n     (#) The external Clock can be configured, if needed (the default clock is the\r\n         internal clock from the APBx), using the following function:\r\n         HAL_TIM_ConfigClockSource, the clock configuration should be done before\r\n         any start function.\r\n\r\n     (#) Configure the TIM in the desired functioning mode using one of the\r\n         initialization function of this driver:\r\n          (++) HAL_TIMEx_HallSensor_Init() and HAL_TIMEx_ConfigCommutEvent(): to use the\r\n               Timer Hall Sensor Interface and the commutation event with the corresponding\r\n               Interrupt and DMA request if needed (Note that One Timer is used to interface\r\n               with the Hall sensor Interface and another Timer should be used to use\r\n               the commutation event).\r\n\r\n     (#) Activate the TIM peripheral using one of the start functions:\r\n           (++) Complementary Output Compare : HAL_TIMEx_OCN_Start(), HAL_TIMEx_OCN_Start_DMA(), HAL_TIMEx_OCN_Start_IT()\r\n           (++) Complementary PWM generation : HAL_TIMEx_PWMN_Start(), HAL_TIMEx_PWMN_Start_DMA(), HAL_TIMEx_PWMN_Start_IT()\r\n           (++) Complementary One-pulse mode output : HAL_TIMEx_OnePulseN_Start(), HAL_TIMEx_OnePulseN_Start_IT()\r\n           (++) Hall Sensor output : HAL_TIMEx_HallSensor_Start(), HAL_TIMEx_HallSensor_Start_DMA(), HAL_TIMEx_HallSensor_Start_IT().\r\n\r\n  @endverbatim\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.\r\n  * All rights reserved.</center></h2>\r\n  *\r\n  * This software component is licensed by ST under BSD 3-Clause license,\r\n  * the \"License\"; You may not use this file except in compliance with the\r\n  * License. You may obtain a copy of the License at:\r\n  *                        opensource.org/licenses/BSD-3-Clause\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n\r\n/** @addtogroup STM32F1xx_HAL_Driver\r\n * @{\r\n */\r\n\r\n/** @defgroup TIMEx TIMEx\r\n * @brief TIM Extended HAL module driver\r\n * @{\r\n */\r\n\r\n#ifdef HAL_TIM_MODULE_ENABLED\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/* Private macros ------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\n/* Private function prototypes -----------------------------------------------*/\r\nstatic void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma);\r\nstatic void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma);\r\nstatic void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState);\r\n\r\n/* Exported functions --------------------------------------------------------*/\r\n/** @defgroup TIMEx_Exported_Functions TIM Extended Exported Functions\r\n * @{\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions\r\n  * @brief    Timer Hall Sensor functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                      ##### Timer Hall Sensor functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Initialize and configure TIM HAL Sensor.\r\n    (+) De-initialize TIM HAL Sensor.\r\n    (+) Start the Hall Sensor Interface.\r\n    (+) Stop the Hall Sensor Interface.\r\n    (+) Start the Hall Sensor Interface and enable interrupts.\r\n    (+) Stop the Hall Sensor Interface and disable interrupts.\r\n    (+) Start the Hall Sensor Interface and enable DMA transfers.\r\n    (+) Stop the Hall Sensor Interface and disable DMA transfers.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n/**\r\n * @brief  Initializes the TIM Hall Sensor Interface and initialize the associated handle.\r\n * @note   When the timer instance is initialized in Hall Sensor Interface mode,\r\n *         timer channels 1 and channel 2 are reserved and cannot be used for\r\n *         other purpose.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @param  sConfig TIM Hall Sensor configuration structure\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig) {\r\n  TIM_OC_InitTypeDef OC_Config;\r\n\r\n  /* Check the TIM handle allocation */\r\n  if (htim == NULL) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));\r\n  assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));\r\n  assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));\r\n  assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity));\r\n  assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));\r\n  assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));\r\n\r\n  if (htim->State == HAL_TIM_STATE_RESET) {\r\n    /* Allocate lock resource and initialize it */\r\n    htim->Lock = HAL_UNLOCKED;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n    /* Reset interrupt callbacks to legacy week callbacks */\r\n    TIM_ResetCallback(htim);\r\n\r\n    if (htim->HallSensor_MspInitCallback == NULL) {\r\n      htim->HallSensor_MspInitCallback = HAL_TIMEx_HallSensor_MspInit;\r\n    }\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC */\r\n    htim->HallSensor_MspInitCallback(htim);\r\n#else\r\n    /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */\r\n    HAL_TIMEx_HallSensor_MspInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n  }\r\n\r\n  /* Set the TIM state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Configure the Time base in the Encoder Mode */\r\n  TIM_Base_SetConfig(htim->Instance, &htim->Init);\r\n\r\n  /* Configure the Channel 1 as Input Channel to interface with the three Outputs of the  Hall sensor */\r\n  TIM_TI1_SetConfig(htim->Instance, sConfig->IC1Polarity, TIM_ICSELECTION_TRC, sConfig->IC1Filter);\r\n\r\n  /* Reset the IC1PSC Bits */\r\n  htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;\r\n  /* Set the IC1PSC value */\r\n  htim->Instance->CCMR1 |= sConfig->IC1Prescaler;\r\n\r\n  /* Enable the Hall sensor interface (XOR function of the three inputs) */\r\n  htim->Instance->CR2 |= TIM_CR2_TI1S;\r\n\r\n  /* Select the TIM_TS_TI1F_ED signal as Input trigger for the TIM */\r\n  htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n  htim->Instance->SMCR |= TIM_TS_TI1F_ED;\r\n\r\n  /* Use the TIM_TS_TI1F_ED signal to reset the TIM counter each edge detection */\r\n  htim->Instance->SMCR &= ~TIM_SMCR_SMS;\r\n  htim->Instance->SMCR |= TIM_SLAVEMODE_RESET;\r\n\r\n  /* Program channel 2 in PWM 2 mode with the desired Commutation_Delay*/\r\n  OC_Config.OCFastMode   = TIM_OCFAST_DISABLE;\r\n  OC_Config.OCIdleState  = TIM_OCIDLESTATE_RESET;\r\n  OC_Config.OCMode       = TIM_OCMODE_PWM2;\r\n  OC_Config.OCNIdleState = TIM_OCNIDLESTATE_RESET;\r\n  OC_Config.OCNPolarity  = TIM_OCNPOLARITY_HIGH;\r\n  OC_Config.OCPolarity   = TIM_OCPOLARITY_HIGH;\r\n  OC_Config.Pulse        = sConfig->Commutation_Delay;\r\n\r\n  TIM_OC2_SetConfig(htim->Instance, &OC_Config);\r\n\r\n  /* Select OC2REF as trigger output on TRGO: write the MMS bits in the TIMx_CR2\r\n    register to 101 */\r\n  htim->Instance->CR2 &= ~TIM_CR2_MMS;\r\n  htim->Instance->CR2 |= TIM_TRGO_OC2REF;\r\n\r\n  /* Initialize the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_READY;\r\n\r\n  /* Initialize the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Initialize the TIM state*/\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes the TIM Hall Sensor interface\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_INSTANCE(htim->Instance));\r\n\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Disable the TIM Peripheral Clock */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  if (htim->HallSensor_MspDeInitCallback == NULL) {\r\n    htim->HallSensor_MspDeInitCallback = HAL_TIMEx_HallSensor_MspDeInit;\r\n  }\r\n  /* DeInit the low level hardware */\r\n  htim->HallSensor_MspDeInitCallback(htim);\r\n#else\r\n  /* DeInit the low level hardware: GPIO, CLOCK, NVIC */\r\n  HAL_TIMEx_HallSensor_MspDeInit(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  /* Change the DMA burst operation state */\r\n  htim->DMABurstState = HAL_DMA_BURST_STATE_RESET;\r\n\r\n  /* Change the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_RESET);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_RESET);\r\n\r\n  /* Change TIM state */\r\n  htim->State = HAL_TIM_STATE_RESET;\r\n\r\n  /* Release Lock */\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Initializes the TIM Hall Sensor MSP.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIMEx_HallSensor_MspInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIMEx_HallSensor_MspInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  DeInitializes TIM Hall Sensor MSP.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIMEx_HallSensor_MspDeInit(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIMEx_HallSensor_MspDeInit could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Hall Sensor Interface.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start(TIM_HandleTypeDef *htim) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Check the TIM channels state */\r\n  if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n      (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Input Capture channel 1\r\n  (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Hall sensor Interface.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channels 1, 2 and 3\r\n    (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Hall Sensor Interface in interrupt mode.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_IT(TIM_HandleTypeDef *htim) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef channel_2_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_2);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_2_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_2);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Check the TIM channels state */\r\n  if ((channel_1_state != HAL_TIM_CHANNEL_STATE_READY) || (channel_2_state != HAL_TIM_CHANNEL_STATE_READY) || (complementary_channel_1_state != HAL_TIM_CHANNEL_STATE_READY) ||\r\n      (complementary_channel_2_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the capture compare Interrupts 1 event */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Enable the Input Capture channel 1\r\n    (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Hall Sensor Interface in interrupt mode.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_IT(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channel 1\r\n    (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the capture compare Interrupts event */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Hall Sensor Interface in DMA mode.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @param  pData The destination Buffer address.\r\n * @param  Length The length of data to be transferred from TIM peripheral to memory.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length) {\r\n  uint32_t                    tmpsmcr;\r\n  HAL_TIM_ChannelStateTypeDef channel_1_state               = TIM_CHANNEL_STATE_GET(htim, TIM_CHANNEL_1);\r\n  HAL_TIM_ChannelStateTypeDef complementary_channel_1_state = TIM_CHANNEL_N_STATE_GET(htim, TIM_CHANNEL_1);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Set the TIM channel state */\r\n  if ((channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY) || (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_BUSY)) {\r\n    return HAL_BUSY;\r\n  } else if ((channel_1_state == HAL_TIM_CHANNEL_STATE_READY) && (complementary_channel_1_state == HAL_TIM_CHANNEL_STATE_READY)) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Enable the Input Capture channel 1\r\n    (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_ENABLE);\r\n\r\n  /* Set the DMA Input Capture 1 Callbacks */\r\n  htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMACaptureCplt;\r\n  htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMACaptureHalfCplt;\r\n  /* Set the DMA error callback */\r\n  htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError;\r\n\r\n  /* Enable the DMA channel for Capture 1*/\r\n  if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)&htim->Instance->CCR1, (uint32_t)pData, Length) != HAL_OK) {\r\n    /* Return error status */\r\n    return HAL_ERROR;\r\n  }\r\n  /* Enable the capture compare 1 Interrupt */\r\n  __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Hall Sensor Interface in DMA mode.\r\n * @param  htim TIM Hall Sensor Interface handle\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));\r\n\r\n  /* Disable the Input Capture channel 1\r\n    (in the Hall Sensor Interface the three possible channels that can be used are TIM_CHANNEL_1, TIM_CHANNEL_2 and TIM_CHANNEL_3) */\r\n  TIM_CCxChannelCmd(htim->Instance, TIM_CHANNEL_1, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the capture compare Interrupts 1 event */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n\r\n  (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM channel state */\r\n  TIM_CHANNEL_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions\r\n  *  @brief   Timer Complementary Output Compare functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n              ##### Timer Complementary Output Compare functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Start the Complementary Output Compare/PWM.\r\n    (+) Stop the Complementary Output Compare/PWM.\r\n    (+) Start the Complementary Output Compare/PWM and enable interrupts.\r\n    (+) Stop the Complementary Output Compare/PWM and disable interrupts.\r\n    (+) Start the Complementary Output Compare/PWM and enable DMA transfers.\r\n    (+) Stop the Complementary Output Compare/PWM and disable DMA transfers.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation on the complementary\r\n *         output.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation on the complementary\r\n *         output.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Disable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation in interrupt mode\r\n *         on the complementary output.\r\n * @param  htim TIM OC handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Enable the TIM Output Compare interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Enable the TIM Output Compare interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Enable the TIM Output Compare interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the TIM Break interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK);\r\n\r\n  /* Enable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation in interrupt mode\r\n *         on the complementary output.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpccer;\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Output Compare interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Output Compare interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Output Compare interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the TIM Break interrupt (only if no more channel is active) */\r\n  tmpccer = htim->Instance->CCER;\r\n  if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == (uint32_t)RESET) {\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK);\r\n  }\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM Output Compare signal generation in DMA mode\r\n *         on the complementary output.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @param  pData The source Buffer address.\r\n * @param  Length The length of data to be transferred from memory to TIM peripheral\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Set the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Output Compare DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Output Compare DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Output Compare DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM Output Compare signal generation in DMA mode\r\n *         on the complementary output.\r\n * @param  htim TIM Output Compare handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Output Compare DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Output Compare DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Output Compare DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the Capture compare channel N */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions\r\n  * @brief    Timer Complementary PWM functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                 ##### Timer Complementary PWM functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Start the Complementary PWM.\r\n    (+) Stop the Complementary PWM.\r\n    (+) Start the Complementary PWM and enable interrupts.\r\n    (+) Stop the Complementary PWM and disable interrupts.\r\n    (+) Start the Complementary PWM and enable DMA transfers.\r\n    (+) Stop the Complementary PWM and disable DMA transfers.\r\n    (+) Start the Complementary Input Capture measurement.\r\n    (+) Stop the Complementary Input Capture.\r\n    (+) Start the Complementary Input Capture and enable interrupts.\r\n    (+) Stop the Complementary Input Capture and disable interrupts.\r\n    (+) Start the Complementary Input Capture and enable DMA transfers.\r\n    (+) Stop the Complementary Input Capture and disable DMA transfers.\r\n    (+) Start the Complementary One Pulse generation.\r\n    (+) Stop the Complementary One Pulse.\r\n    (+) Start the Complementary One Pulse and enable interrupts.\r\n    (+) Stop the Complementary One Pulse and disable interrupts.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Starts the PWM signal generation on the complementary output.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the complementary PWM output  */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the PWM signal generation on the complementary output.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Disable the complementary PWM output  */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the PWM signal generation in interrupt mode on the\r\n *         complementary output.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Check the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) != HAL_TIM_CHANNEL_STATE_READY) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Enable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Enable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Enable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the TIM Break interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_BREAK);\r\n\r\n  /* Enable the complementary PWM output  */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the PWM signal generation in interrupt mode on the\r\n *         complementary output.\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  uint32_t tmpccer;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 interrupt */\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the complementary PWM output  */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the TIM Break interrupt (only if no more channel is active) */\r\n  tmpccer = htim->Instance->CCER;\r\n  if ((tmpccer & (TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE)) == (uint32_t)RESET) {\r\n    __HAL_TIM_DISABLE_IT(htim, TIM_IT_BREAK);\r\n  }\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM PWM signal generation in DMA mode on the\r\n *         complementary output\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @param  pData The source Buffer address.\r\n * @param  Length The length of data to be transferred from memory to TIM peripheral\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length) {\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  /* Set the TIM complementary channel state */\r\n  if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_BUSY) {\r\n    return HAL_BUSY;\r\n  } else if (TIM_CHANNEL_N_STATE_GET(htim, Channel) == HAL_TIM_CHANNEL_STATE_READY) {\r\n    if ((pData == NULL) && (Length > 0U)) {\r\n      return HAL_ERROR;\r\n    } else {\r\n      TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n    }\r\n  } else {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)pData, (uint32_t)&htim->Instance->CCR1, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC1);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)pData, (uint32_t)&htim->Instance->CCR2, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC2);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Set the DMA compare callbacks */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferCpltCallback     = TIM_DMADelayPulseNCplt;\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferHalfCpltCallback = TIM_DMADelayPulseHalfCplt;\r\n\r\n    /* Set the DMA error callback */\r\n    htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAErrorCCxN;\r\n\r\n    /* Enable the DMA channel */\r\n    if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)pData, (uint32_t)&htim->Instance->CCR3, Length) != HAL_OK) {\r\n      /* Return error status */\r\n      return HAL_ERROR;\r\n    }\r\n    /* Enable the TIM Capture/Compare 3 DMA request */\r\n    __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_CC3);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Enable the complementary PWM output  */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS;\r\n    if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) {\r\n      __HAL_TIM_ENABLE(htim);\r\n    }\r\n  } else {\r\n    __HAL_TIM_ENABLE(htim);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM PWM signal generation in DMA mode on the complementary\r\n *         output\r\n * @param  htim TIM handle\r\n * @param  Channel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));\r\n\r\n  switch (Channel) {\r\n  case TIM_CHANNEL_1: {\r\n    /* Disable the TIM Capture/Compare 1 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC1);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC1]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_2: {\r\n    /* Disable the TIM Capture/Compare 2 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC2);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC2]);\r\n    break;\r\n  }\r\n\r\n  case TIM_CHANNEL_3: {\r\n    /* Disable the TIM Capture/Compare 3 DMA request */\r\n    __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_CC3);\r\n    (void)HAL_DMA_Abort_IT(htim->hdma[TIM_DMA_ID_CC3]);\r\n    break;\r\n  }\r\n\r\n  default:\r\n    break;\r\n  }\r\n\r\n  /* Disable the complementary PWM output */\r\n  TIM_CCxNChannelCmd(htim->Instance, Channel, TIM_CCxN_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM complementary channel state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, Channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions\r\n  * @brief    Timer Complementary One Pulse functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                ##### Timer Complementary One Pulse functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n    (+) Start the Complementary One Pulse generation.\r\n    (+) Stop the Complementary One Pulse.\r\n    (+) Start the Complementary One Pulse and enable interrupts.\r\n    (+) Stop the Complementary One Pulse and disable interrupts.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Starts the TIM One Pulse signal generation on the complementary\r\n *         output.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  uint32_t                    input_channel        = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1;\r\n  HAL_TIM_ChannelStateTypeDef input_channel_state  = TIM_CHANNEL_STATE_GET(htim, input_channel);\r\n  HAL_TIM_ChannelStateTypeDef output_channel_state = TIM_CHANNEL_N_STATE_GET(htim, OutputChannel);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));\r\n\r\n  /* Check the TIM channels state */\r\n  if ((output_channel_state != HAL_TIM_CHANNEL_STATE_READY) || (input_channel_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, OutputChannel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, input_channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the complementary One Pulse output channel and the Input Capture channel */\r\n  TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM One Pulse signal generation on the complementary\r\n *         output.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));\r\n\r\n  /* Disable the complementary One Pulse output channel and the Input Capture channel */\r\n  TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM  channels state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, OutputChannel, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, input_channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Starts the TIM One Pulse signal generation in interrupt mode on the\r\n *         complementary channel.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channel to be enabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  uint32_t                    input_channel        = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1;\r\n  HAL_TIM_ChannelStateTypeDef input_channel_state  = TIM_CHANNEL_STATE_GET(htim, input_channel);\r\n  HAL_TIM_ChannelStateTypeDef output_channel_state = TIM_CHANNEL_N_STATE_GET(htim, OutputChannel);\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));\r\n\r\n  /* Check the TIM channels state */\r\n  if ((output_channel_state != HAL_TIM_CHANNEL_STATE_READY) || (input_channel_state != HAL_TIM_CHANNEL_STATE_READY)) {\r\n    return HAL_ERROR;\r\n  }\r\n\r\n  /* Set the TIM channels state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, OutputChannel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n  TIM_CHANNEL_STATE_SET(htim, input_channel, HAL_TIM_CHANNEL_STATE_BUSY);\r\n\r\n  /* Enable the TIM Capture/Compare 1 interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Enable the TIM Capture/Compare 2 interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_CC2);\r\n\r\n  /* Enable the complementary One Pulse output channel and the Input Capture channel */\r\n  TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_ENABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_ENABLE);\r\n\r\n  /* Enable the Main Output */\r\n  __HAL_TIM_MOE_ENABLE(htim);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Stops the TIM One Pulse signal generation in interrupt mode on the\r\n *         complementary channel.\r\n * @param  htim TIM One Pulse handle\r\n * @param  OutputChannel TIM Channel to be disabled\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1 selected\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2 selected\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t OutputChannel) {\r\n  uint32_t input_channel = (OutputChannel == TIM_CHANNEL_1) ? TIM_CHANNEL_2 : TIM_CHANNEL_1;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, OutputChannel));\r\n\r\n  /* Disable the TIM Capture/Compare 1 interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC1);\r\n\r\n  /* Disable the TIM Capture/Compare 2 interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_CC2);\r\n\r\n  /* Disable the complementary One Pulse output channel and the Input Capture channel */\r\n  TIM_CCxNChannelCmd(htim->Instance, OutputChannel, TIM_CCxN_DISABLE);\r\n  TIM_CCxChannelCmd(htim->Instance, input_channel, TIM_CCx_DISABLE);\r\n\r\n  /* Disable the Main Output */\r\n  __HAL_TIM_MOE_DISABLE(htim);\r\n\r\n  /* Disable the Peripheral */\r\n  __HAL_TIM_DISABLE(htim);\r\n\r\n  /* Set the TIM  channels state */\r\n  TIM_CHANNEL_N_STATE_SET(htim, OutputChannel, HAL_TIM_CHANNEL_STATE_READY);\r\n  TIM_CHANNEL_STATE_SET(htim, input_channel, HAL_TIM_CHANNEL_STATE_READY);\r\n\r\n  /* Return function status */\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions\r\n  * @brief    Peripheral Control functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                    ##### Peripheral Control functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides functions allowing to:\r\n      (+) Configure the commutation event in case of use of the Hall sensor interface.\r\n      (+) Configure Output channels for OC and PWM mode.\r\n\r\n      (+) Configure Complementary channels, break features and dead time.\r\n      (+) Configure Master synchronization.\r\n      (+) Configure timer remapping capabilities.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Configure the TIM commutation event sequence.\r\n * @note  This function is mandatory to use the commutation event in order to\r\n *        update the configuration at each commutation detection on the TRGI input of the Timer,\r\n *        the typical use of this feature is with the use of another Timer(interface Timer)\r\n *        configured in Hall sensor interface, this interface Timer will generate the\r\n *        commutation at its TRGO output (connected to Timer used in this function) each time\r\n *        the TI1 of the Interface Timer detect a commutation at its input TI1.\r\n * @param  htim TIM handle\r\n * @param  InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_TS_ITR0: Internal trigger 0 selected\r\n *            @arg TIM_TS_ITR1: Internal trigger 1 selected\r\n *            @arg TIM_TS_ITR2: Internal trigger 2 selected\r\n *            @arg TIM_TS_ITR3: Internal trigger 3 selected\r\n *            @arg TIM_TS_NONE: No trigger is needed\r\n * @param  CommutationSource the Commutation Event source\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer\r\n *            @arg TIM_COMMUTATION_SOFTWARE:  Commutation source is set by software using the COMG bit\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger));\r\n\r\n  __HAL_LOCK(htim);\r\n\r\n  if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) {\r\n    /* Select the Input trigger */\r\n    htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n    htim->Instance->SMCR |= InputTrigger;\r\n  }\r\n\r\n  /* Select the Capture Compare preload feature */\r\n  htim->Instance->CR2 |= TIM_CR2_CCPC;\r\n  /* Select the Commutation event source */\r\n  htim->Instance->CR2 &= ~TIM_CR2_CCUS;\r\n  htim->Instance->CR2 |= CommutationSource;\r\n\r\n  /* Disable Commutation Interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_COM);\r\n\r\n  /* Disable Commutation DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM);\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TIM commutation event sequence with interrupt.\r\n * @note  This function is mandatory to use the commutation event in order to\r\n *        update the configuration at each commutation detection on the TRGI input of the Timer,\r\n *        the typical use of this feature is with the use of another Timer(interface Timer)\r\n *        configured in Hall sensor interface, this interface Timer will generate the\r\n *        commutation at its TRGO output (connected to Timer used in this function) each time\r\n *        the TI1 of the Interface Timer detect a commutation at its input TI1.\r\n * @param  htim TIM handle\r\n * @param  InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_TS_ITR0: Internal trigger 0 selected\r\n *            @arg TIM_TS_ITR1: Internal trigger 1 selected\r\n *            @arg TIM_TS_ITR2: Internal trigger 2 selected\r\n *            @arg TIM_TS_ITR3: Internal trigger 3 selected\r\n *            @arg TIM_TS_NONE: No trigger is needed\r\n * @param  CommutationSource the Commutation Event source\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer\r\n *            @arg TIM_COMMUTATION_SOFTWARE:  Commutation source is set by software using the COMG bit\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger));\r\n\r\n  __HAL_LOCK(htim);\r\n\r\n  if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) {\r\n    /* Select the Input trigger */\r\n    htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n    htim->Instance->SMCR |= InputTrigger;\r\n  }\r\n\r\n  /* Select the Capture Compare preload feature */\r\n  htim->Instance->CR2 |= TIM_CR2_CCPC;\r\n  /* Select the Commutation event source */\r\n  htim->Instance->CR2 &= ~TIM_CR2_CCUS;\r\n  htim->Instance->CR2 |= CommutationSource;\r\n\r\n  /* Disable Commutation DMA request */\r\n  __HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM);\r\n\r\n  /* Enable the Commutation Interrupt */\r\n  __HAL_TIM_ENABLE_IT(htim, TIM_IT_COM);\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configure the TIM commutation event sequence with DMA.\r\n * @note  This function is mandatory to use the commutation event in order to\r\n *        update the configuration at each commutation detection on the TRGI input of the Timer,\r\n *        the typical use of this feature is with the use of another Timer(interface Timer)\r\n *        configured in Hall sensor interface, this interface Timer will generate the\r\n *        commutation at its TRGO output (connected to Timer used in this function) each time\r\n *        the TI1 of the Interface Timer detect a commutation at its input TI1.\r\n * @note  The user should configure the DMA in his own software, in This function only the COMDE bit is set\r\n * @param  htim TIM handle\r\n * @param  InputTrigger the Internal trigger corresponding to the Timer Interfacing with the Hall sensor\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_TS_ITR0: Internal trigger 0 selected\r\n *            @arg TIM_TS_ITR1: Internal trigger 1 selected\r\n *            @arg TIM_TS_ITR2: Internal trigger 2 selected\r\n *            @arg TIM_TS_ITR3: Internal trigger 3 selected\r\n *            @arg TIM_TS_NONE: No trigger is needed\r\n * @param  CommutationSource the Commutation Event source\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_COMMUTATION_TRGI: Commutation source is the TRGI of the Interface Timer\r\n *            @arg TIM_COMMUTATION_SOFTWARE:  Commutation source is set by software using the COMG bit\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource) {\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_INTERNAL_TRIGGEREVENT_SELECTION(InputTrigger));\r\n\r\n  __HAL_LOCK(htim);\r\n\r\n  if ((InputTrigger == TIM_TS_ITR0) || (InputTrigger == TIM_TS_ITR1) || (InputTrigger == TIM_TS_ITR2) || (InputTrigger == TIM_TS_ITR3)) {\r\n    /* Select the Input trigger */\r\n    htim->Instance->SMCR &= ~TIM_SMCR_TS;\r\n    htim->Instance->SMCR |= InputTrigger;\r\n  }\r\n\r\n  /* Select the Capture Compare preload feature */\r\n  htim->Instance->CR2 |= TIM_CR2_CCPC;\r\n  /* Select the Commutation event source */\r\n  htim->Instance->CR2 &= ~TIM_CR2_CCUS;\r\n  htim->Instance->CR2 |= CommutationSource;\r\n\r\n  /* Enable the Commutation DMA Request */\r\n  /* Set the DMA Commutation Callback */\r\n  htim->hdma[TIM_DMA_ID_COMMUTATION]->XferCpltCallback     = TIMEx_DMACommutationCplt;\r\n  htim->hdma[TIM_DMA_ID_COMMUTATION]->XferHalfCpltCallback = TIMEx_DMACommutationHalfCplt;\r\n  /* Set the DMA error callback */\r\n  htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError;\r\n\r\n  /* Disable Commutation Interrupt */\r\n  __HAL_TIM_DISABLE_IT(htim, TIM_IT_COM);\r\n\r\n  /* Enable the Commutation DMA Request */\r\n  __HAL_TIM_ENABLE_DMA(htim, TIM_DMA_COM);\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the TIM in master mode.\r\n * @param  htim TIM handle.\r\n * @param  sMasterConfig pointer to a TIM_MasterConfigTypeDef structure that\r\n *         contains the selected trigger output (TRGO) and the Master/Slave\r\n *         mode.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig) {\r\n  uint32_t tmpcr2;\r\n  uint32_t tmpsmcr;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));\r\n  assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));\r\n\r\n  /* Check input state */\r\n  __HAL_LOCK(htim);\r\n\r\n  /* Change the handler state */\r\n  htim->State = HAL_TIM_STATE_BUSY;\r\n\r\n  /* Get the TIMx CR2 register value */\r\n  tmpcr2 = htim->Instance->CR2;\r\n\r\n  /* Get the TIMx SMCR register value */\r\n  tmpsmcr = htim->Instance->SMCR;\r\n\r\n  /* Reset the MMS Bits */\r\n  tmpcr2 &= ~TIM_CR2_MMS;\r\n  /* Select the TRGO source */\r\n  tmpcr2 |= sMasterConfig->MasterOutputTrigger;\r\n\r\n  /* Update TIMx CR2 */\r\n  htim->Instance->CR2 = tmpcr2;\r\n\r\n  if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) {\r\n    /* Reset the MSM Bit */\r\n    tmpsmcr &= ~TIM_SMCR_MSM;\r\n    /* Set master mode */\r\n    tmpsmcr |= sMasterConfig->MasterSlaveMode;\r\n\r\n    /* Update TIMx SMCR */\r\n    htim->Instance->SMCR = tmpsmcr;\r\n  }\r\n\r\n  /* Change the htim state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the Break feature, dead time, Lock level, OSSI/OSSR State\r\n *         and the AOE(automatic output enable).\r\n * @param  htim TIM handle\r\n * @param  sBreakDeadTimeConfig pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that\r\n *         contains the BDTR Register configuration  information for the TIM peripheral.\r\n * @note   Interrupts can be generated when an active level is detected on the\r\n *         break input, the break 2 input or the system break input. Break\r\n *         interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig) {\r\n  /* Keep this variable initialized to 0 as it is used to configure BDTR register */\r\n  uint32_t tmpbdtr = 0U;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance));\r\n  assert_param(IS_TIM_OSSR_STATE(sBreakDeadTimeConfig->OffStateRunMode));\r\n  assert_param(IS_TIM_OSSI_STATE(sBreakDeadTimeConfig->OffStateIDLEMode));\r\n  assert_param(IS_TIM_LOCK_LEVEL(sBreakDeadTimeConfig->LockLevel));\r\n  assert_param(IS_TIM_DEADTIME(sBreakDeadTimeConfig->DeadTime));\r\n  assert_param(IS_TIM_BREAK_STATE(sBreakDeadTimeConfig->BreakState));\r\n  assert_param(IS_TIM_BREAK_POLARITY(sBreakDeadTimeConfig->BreakPolarity));\r\n  assert_param(IS_TIM_AUTOMATIC_OUTPUT_STATE(sBreakDeadTimeConfig->AutomaticOutput));\r\n\r\n  /* Check input state */\r\n  __HAL_LOCK(htim);\r\n\r\n  /* Set the Lock level, the Break enable Bit and the Polarity, the OSSR State,\r\n     the OSSI State, the dead time value and the Automatic Output Enable Bit */\r\n\r\n  /* Set the BDTR bits */\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_DTG, sBreakDeadTimeConfig->DeadTime);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_LOCK, sBreakDeadTimeConfig->LockLevel);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_OSSI, sBreakDeadTimeConfig->OffStateIDLEMode);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_OSSR, sBreakDeadTimeConfig->OffStateRunMode);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_BKE, sBreakDeadTimeConfig->BreakState);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_BKP, sBreakDeadTimeConfig->BreakPolarity);\r\n  MODIFY_REG(tmpbdtr, TIM_BDTR_AOE, sBreakDeadTimeConfig->AutomaticOutput);\r\n\r\n  /* Set TIMx_BDTR */\r\n  htim->Instance->BDTR = tmpbdtr;\r\n\r\n  __HAL_UNLOCK(htim);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @brief  Configures the TIMx Remapping input capabilities.\r\n * @param  htim TIM handle.\r\n * @param  Remap specifies the TIM remapping source.\r\n *\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n  UNUSED(Remap);\r\n\r\n  return HAL_OK;\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group6 Extended Callbacks functions\r\n  * @brief    Extended Callbacks functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                    ##### Extended Callbacks functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This section provides Extended TIM callback functions:\r\n    (+) Timer Commutation callback\r\n    (+) Timer Break callback\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Hall commutation changed callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIMEx_CommutCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIMEx_CommutCallback could be implemented in the user file\r\n   */\r\n}\r\n/**\r\n * @brief  Hall commutation changed half complete callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIMEx_CommutHalfCpltCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIMEx_CommutHalfCpltCallback could be implemented in the user file\r\n   */\r\n}\r\n\r\n/**\r\n * @brief  Hall Break detection callback in non-blocking mode\r\n * @param  htim TIM handle\r\n * @retval None\r\n */\r\n__weak void HAL_TIMEx_BreakCallback(TIM_HandleTypeDef *htim) {\r\n  /* Prevent unused argument(s) compilation warning */\r\n  UNUSED(htim);\r\n\r\n  /* NOTE : This function should not be modified, when the callback is needed,\r\n            the HAL_TIMEx_BreakCallback could be implemented in the user file\r\n   */\r\n}\r\n/**\r\n * @}\r\n */\r\n\r\n/** @defgroup TIMEx_Exported_Functions_Group7 Extended Peripheral State functions\r\n  * @brief    Extended Peripheral State functions\r\n  *\r\n@verbatim\r\n  ==============================================================================\r\n                ##### Extended Peripheral State functions #####\r\n  ==============================================================================\r\n  [..]\r\n    This subsection permits to get in run-time the status of the peripheral\r\n    and the data flow.\r\n\r\n@endverbatim\r\n  * @{\r\n  */\r\n\r\n/**\r\n * @brief  Return the TIM Hall Sensor interface handle state.\r\n * @param  htim TIM Hall Sensor handle\r\n * @retval HAL state\r\n */\r\nHAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim) { return htim->State; }\r\n\r\n/**\r\n * @brief  Return actual state of the TIM complementary channel.\r\n * @param  htim TIM handle\r\n * @param  ChannelN TIM Complementary channel\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3\r\n * @retval TIM Complementary channel state\r\n */\r\nHAL_TIM_ChannelStateTypeDef HAL_TIMEx_GetChannelNState(TIM_HandleTypeDef *htim, uint32_t ChannelN) {\r\n  HAL_TIM_ChannelStateTypeDef channel_state;\r\n\r\n  /* Check the parameters */\r\n  assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, ChannelN));\r\n\r\n  channel_state = TIM_CHANNEL_N_STATE_GET(htim, ChannelN);\r\n\r\n  return channel_state;\r\n}\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/* Private functions ---------------------------------------------------------*/\r\n/** @defgroup TIMEx_Private_Functions TIMEx Private Functions\r\n * @{\r\n */\r\n\r\n/**\r\n * @brief  TIM DMA Commutation callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  /* Change the htim state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->CommutationCallback(htim);\r\n#else\r\n  HAL_TIMEx_CommutCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Commutation half complete callback.\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nvoid TIMEx_DMACommutationHalfCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  /* Change the htim state */\r\n  htim->State = HAL_TIM_STATE_READY;\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->CommutationHalfCpltCallback(htim);\r\n#else\r\n  HAL_TIMEx_CommutHalfCpltCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA Delay Pulse complete callback (complementary channel).\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMADelayPulseNCplt(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC4]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_4;\r\n\r\n    if (hdma->Init.Mode == DMA_NORMAL) {\r\n      TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_4, HAL_TIM_CHANNEL_STATE_READY);\r\n    }\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->PWM_PulseFinishedCallback(htim);\r\n#else\r\n  HAL_TIM_PWM_PulseFinishedCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  TIM DMA error callback (complementary channel)\r\n * @param  hdma pointer to DMA handle.\r\n * @retval None\r\n */\r\nstatic void TIM_DMAErrorCCxN(DMA_HandleTypeDef *hdma) {\r\n  TIM_HandleTypeDef *htim = (TIM_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;\r\n\r\n  if (hdma == htim->hdma[TIM_DMA_ID_CC1]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_1;\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_1, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC2]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_2;\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_2, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else if (hdma == htim->hdma[TIM_DMA_ID_CC3]) {\r\n    htim->Channel = HAL_TIM_ACTIVE_CHANNEL_3;\r\n    TIM_CHANNEL_N_STATE_SET(htim, TIM_CHANNEL_3, HAL_TIM_CHANNEL_STATE_READY);\r\n  } else {\r\n    /* nothing to do */\r\n  }\r\n\r\n#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)\r\n  htim->ErrorCallback(htim);\r\n#else\r\n  HAL_TIM_ErrorCallback(htim);\r\n#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */\r\n\r\n  htim->Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;\r\n}\r\n\r\n/**\r\n * @brief  Enables or disables the TIM Capture Compare Channel xN.\r\n * @param  TIMx to select the TIM peripheral\r\n * @param  Channel specifies the TIM Channel\r\n *          This parameter can be one of the following values:\r\n *            @arg TIM_CHANNEL_1: TIM Channel 1\r\n *            @arg TIM_CHANNEL_2: TIM Channel 2\r\n *            @arg TIM_CHANNEL_3: TIM Channel 3\r\n * @param  ChannelNState specifies the TIM Channel CCxNE bit new state.\r\n *          This parameter can be: TIM_CCxN_ENABLE or TIM_CCxN_Disable.\r\n * @retval None\r\n */\r\nstatic void TIM_CCxNChannelCmd(TIM_TypeDef *TIMx, uint32_t Channel, uint32_t ChannelNState) {\r\n  uint32_t tmp;\r\n\r\n  tmp = TIM_CCER_CC1NE << (Channel & 0x1FU); /* 0x1FU = 31 bits max shift */\r\n\r\n  /* Reset the CCxNE Bit */\r\n  TIMx->CCER &= ~tmp;\r\n\r\n  /* Set or reset the CCxNE Bit */\r\n  TIMx->CCER |= (uint32_t)(ChannelNState << (Channel & 0x1FU)); /* 0x1FU = 31 bits max shift */\r\n}\r\n/**\r\n * @}\r\n */\r\n\r\n#endif /* HAL_TIM_MODULE_ENABLED */\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/configuration.h",
    "content": "#ifndef CONFIGURATION_H_\n#define CONFIGURATION_H_\n#include <stdint.h>\n/**\n * Configuration.h\n * Define here your default pre settings for S60\n *\n */\n\n//===========================================================================\n//============================= Default Settings ============================\n//===========================================================================\n/**\n * Default soldering temp is 320.0 C\n * Temperature the iron sleeps at - default 150.0 C\n */\n\n#define SLEEP_TEMP         150 // Default sleep temperature\n#define BOOST_TEMP         420 // Default boost temp.\n#define BOOST_MODE_ENABLED 1   // 0: Disable 1: Enable\n\n/**\n * OLED Brightness\n *\n */\n#define MIN_BRIGHTNESS     1   // Min OLED brightness selectable\n#define MAX_BRIGHTNESS     101 // Max OLED brightness selectable\n#define BRIGHTNESS_STEP    25  // OLED brightness increment\n#define DEFAULT_BRIGHTNESS 25  // default OLED brightness\n\n/**\n * Blink the temperature on the cooling screen when its > 50C\n */\n#define COOLING_TEMP_BLINK 0 // 0: Disable 1: Enable\n\n/**\n * How many seconds/minutes we wait until going to sleep/shutdown.\n * Values -> SLEEP_TIME * 10; i.e. 5*10 = 50 Seconds!\n */\n#define SLEEP_TIME    5  // x10 Seconds\n#define SHUTDOWN_TIME 10 // Minutes\n\n/**\n * Auto start off for safety.\n * Pissible values are:\n *  0 - none\n *  1 - Soldering Temperature\n *  2 - Sleep Temperature\n *  3 - Sleep Off Temperature\n */\n#define AUTO_START_MODE 0 // Default to none\n\n/**\n * Locking Mode\n * When in soldering mode a long press on both keys toggle the lock of the buttons\n * Possible values are:\n *  0 - Desactivated\n *  1 - Lock except boost\n *  2 - Full lock\n */\n#define LOCKING_MODE 0 // Default to desactivated for safety\n\n/**\n * OLED Orientation\n *\n */\n#define ORIENTATION_MODE           0 // 0: Right 1:Left (2:Automatic N/A)\n#define MAX_ORIENTATION_MODE       1 // Disable auto mode\n#define REVERSE_BUTTON_TEMP_CHANGE 0 // 0:Default 1:Reverse - Reverse the plus and minus button assigment for temperature change\n\n/**\n * Temp change settings\n */\n#define TEMP_CHANGE_SHORT_STEP     1  // Default temp change short step +1\n#define TEMP_CHANGE_LONG_STEP      10 // Default temp change long step +10\n#define TEMP_CHANGE_SHORT_STEP_MAX 50 // Temp change short step MAX value\n#define TEMP_CHANGE_LONG_STEP_MAX  90 // Temp change long step MAX value\n\n/* Power pulse for keeping power banks awake*/\n#define POWER_PULSE_INCREMENT    1\n#define POWER_PULSE_MAX          100 // x10 max watts\n#define POWER_PULSE_WAIT_MAX     9   // 9*2.5s = 22.5 seconds\n#define POWER_PULSE_DURATION_MAX 9   // 9*250ms = 2.25 seconds\n\n#define POWER_PULSE_DEFAULT          0\n#define POWER_PULSE_WAIT_DEFAULT     4 // Default rate of the power pulse: 4*2500 = 10000 ms = 10 s\n#define POWER_PULSE_DURATION_DEFAULT 1 // Default duration of the power pulse: 1*250 = 250 ms\n\n/**\n * OLED Orientation Sensitivity on Automatic mode!\n * Motion Sensitivity <0=Off 1=Least Sensitive 9=Most Sensitive>\n */\n#define SENSITIVITY 7 // Default 7\n\n/**\n * Detailed soldering screen\n * Detailed idle screen (off for first time users)\n */\n#define DETAILED_SOLDERING 0 // 0: Disable 1: Enable - Default 0\n#define DETAILED_IDLE      0 // 0: Disable 1: Enable - Default 0\n\n#define CUT_OUT_SETTING          0  // default to no cut-off voltage\n#define RECOM_VOL_CELL           33 // Minimum voltage per cell (Recommended 3.3V (33))\n#define TEMPERATURE_INF          0  // default to 0\n#define DESCRIPTION_SCROLL_SPEED 0  // 0: Slow 1: Fast - default to slow\n#define ANIMATION_LOOP           1  // 0: off 1: on\n#define ANIMATION_SPEED          settingOffSpeed_t::MEDIUM\n\n// Op-amp gain\n// First stage has a gain of 10.31, followed by gain of 52; so total gain is 536\n\n#define ADC_MAX_READING (4096 * 8) // Maximum reading of the adc\n#define ADC_VDD_MV      3300       // ADC max reading millivolts\n\n// Deriving the Voltage div:\n// Vin_max = (3.3*(r1+r2))/(r2)\n// vdiv = (32768*4)/(vin_max*10)\n\n#if defined(MODEL_S60) + defined(MODEL_S60P) + defined(MODEL_T55) == 0\n#error \"No model defined!\"\n#endif\n\n#define NEEDS_VBUS_PROBE 0\n\n#ifdef MODEL_S60\n#define VOLTAGE_DIV        460 // Default divider scaler\n#define CALIBRATION_OFFSET 200 // Default adc offset in uV\n#define PID_POWER_LIMIT    70  // Sets the max pwm power limit\n#define POWER_LIMIT        0   // 0 watts default limit\n#define MAX_POWER_LIMIT    70\n#define POWER_LIMIT_STEPS  5\n#define OP_AMP_GAIN_STAGE  536\n#define TEMP_uV_LOOKUP_S60\n#define USB_PD_VMAX              12 // Maximum voltage for PD to negotiate\n#define THERMAL_RUNAWAY_TIME_SEC 20\n#define THERMAL_RUNAWAY_TEMP_C   3\n\n#define HARDWARE_MAX_WATTAGE_X10 600\n\n#define TIP_THERMAL_MASS    10  // X10 watts to raise 1 deg C in 1 second\n#define TIP_THERMAL_INERTIA 128 // We use a large inertia value to smooth out the drive to the tip since its stupidly sensitive\n\n#define TIP_RESISTANCE 20 //(actually 2.5 ish but we need to be more conservative on pwm'ing watt limit) x10 ohms\n\n#define OLED_128x32\n#define GPIO_VIBRATION\n#define POW_PD_EXT                1\n#define USB_PD_EPR_WATTAGE        0 /*No EPR*/\n#define DEBUG_POWER_MENU_BUTTON_B 1\n#define HAS_POWER_DEBUG_MENU\n#define TEMP_NTC\n#define I2C_SOFT_BUS_2 // For now we are doing software I2C to get around hardware chip issues\n#define OLED_I2CBB2\n#define FILTER_DISPLAYED_TIP_TEMP 4 // Filtering for GUI display\n\n#define MODEL_HAS_DCDC // We dont have DC/DC but have reallly fast PWM that gets us roughly the same place\n#endif                 /* S60 */\n\n#ifdef MODEL_S60P\n#define VOLTAGE_DIV        460 // Default divider scaler\n#define CALIBRATION_OFFSET 200 // Default adc offset in uV\n#define PID_POWER_LIMIT    70  // Sets the max pwm power limit\n#define POWER_LIMIT        0   // 0 watts default limit\n#define MAX_POWER_LIMIT    70\n#define POWER_LIMIT_STEPS  5\n#define OP_AMP_GAIN_STAGE  536\n#define TEMP_uV_LOOKUP_S60\n#define USB_PD_VMAX              20 // Maximum voltage for PD to negotiate\n#define THERMAL_RUNAWAY_TIME_SEC 20\n#define THERMAL_RUNAWAY_TEMP_C   3\n\n#define HARDWARE_MAX_WATTAGE_X10 600\n\n#define TIP_THERMAL_MASS    10  // X10 watts to raise 1 deg C in 1 second\n#define TIP_THERMAL_INERTIA 128 // We use a large inertia value to smooth out the drive to the tip since its stupidly sensitive\n\n#define TIP_RESISTANCE 20 //(actually 2.5 ish but we need to be more conservative on pwm'ing watt limit) x10 ohms\n\n#define OLED_128x32\n#define GPIO_VIBRATION\n#define POW_PD_EXT                2\n#define USB_PD_EPR_WATTAGE        0 /*No EPR*/\n#define DEBUG_POWER_MENU_BUTTON_B 1\n#define HAS_POWER_DEBUG_MENU\n#define TEMP_NTC\n#define I2C_SOFT_BUS_2 // For now we are doing software I2C to get around hardware chip issues\n#define OLED_I2CBB2\n#define FILTER_DISPLAYED_TIP_TEMP 4 // Filtering for GUI display\n\n#define MODEL_HAS_DCDC // We dont have DC/DC but have reallly fast PWM that gets us roughly the same place\n#endif                 /* S60P */\n\n#ifdef MODEL_T55\n// T55 Hotplate is similar to Project-Argon, PCB heater + PT100 sensor but no current rolloff compensation\n// Uses a HUB238 for PD negotiation like the S60, also has a buzzer. Feels like designed to share with S60\n// Hold back left button for \"DFU\"\n\n#define SOLDERING_TEMP         200 // Default soldering temp is 200.0 °C\n#define VOLTAGE_DIV            460 // Default divider scaler\n#define MIN_CALIBRATION_OFFSET 0   // Should be 0\n#define CALIBRATION_OFFSET     0   // Default adc offset in uV\n#define PID_POWER_LIMIT        70  // Sets the max pwm power limit\n#define POWER_LIMIT            0   // 0 watts default limit\n#define MAX_POWER_LIMIT        70\n#define POWER_LIMIT_STEPS      5\n#define OP_AMP_GAIN_STAGE      1\n#define TEMP_uV_LOOKUP_PT1000\n#define USB_PD_VMAX       20  // Maximum voltage for PD to negotiate\n#define NO_DISPLAY_ROTATE     // Disable OLED rotation by accel\n#define MAX_TEMP_C        350 // Max soldering temp selectable °C\n#define MAX_TEMP_F        660 // Max soldering temp selectable °F\n#define MIN_TEMP_C        10  // Min soldering temp selectable °C\n#define MIN_TEMP_F        50  // Min soldering temp selectable °F\n#define MIN_BOOST_TEMP_C  150 // The min settable temp for boost mode °C\n#define MIN_BOOST_TEMP_F  300 // The min settable temp for boost mode °F\n#define NO_SLEEP_MODE\n#define HARDWARE_MAX_WATTAGE_X10 850\n\n#define TIP_THERMAL_MASS         30 // X10 watts to raise 1 deg C in 1 second\n#define TIP_THERMAL_INERTIA      10 // We use a large inertia value to smooth out the drive to the tip since its stupidly sensitive\n#define THERMAL_RUNAWAY_TIME_SEC 30\n#define THERMAL_RUNAWAY_TEMP_C   2\n\n#define COPPER_HEATER_COIL 1  // Have a heater coil that changes resistance on us\n#define TIP_RESISTANCE     52 // PCB heater, measured at ~19C. Will shift by temp a decent amount\n#define CUSTOM_MAX_TEMP_C\n#define PROFILE_SUPPORT           1 // Soldering Profiles\n#define OLED_128x32               1 // Larger OLED\n#define OLED_FLIP                 1 // Mounted upside down\n#define POW_PD_EXT                1 // Older HUB238\n#define USB_PD_EPR_WATTAGE        0 /*No EPR*/\n#define DEBUG_POWER_MENU_BUTTON_B 1\n#define HAS_POWER_DEBUG_MENU\n#define NO_ACCEL       1\n#define I2C_SOFT_BUS_2 // For now we are doing software I2C to get around hardware chip issues\n#define OLED_I2CBB2\n#define FILTER_DISPLAYED_TIP_TEMP 16 // Filtering for GUI display\n\n#define MODEL_HAS_DCDC // We dont have DC/DC but have reallly fast PWM that gets us roughly the same place\n#endif                 /* T55 */\n\n#define FLASH_LOGOADDR      (0x08000000 + (62 * 1024))\n#define SETTINGS_START_PAGE (0x08000000 + (63 * 1024))\n\n// Defaults\n\n#ifndef MIN_CALIBRATION_OFFSET\n#define MIN_CALIBRATION_OFFSET 100 // Min value for calibration\n#endif\n#ifndef SOLDERING_TEMP\n#define SOLDERING_TEMP 320 // Default soldering temp is 320.0 °C\n#endif\n#ifndef PID_TIM_HZ\n#define PID_TIM_HZ (8) // Tick rate of the PID loop\n#endif\n#ifndef MAX_TEMP_C\n#define MAX_TEMP_C 450 // Max soldering temp selectable °C\n#endif\n#ifndef MAX_TEMP_F\n#define MAX_TEMP_F 850 // Max soldering temp selectable °F\n#endif\n#ifndef MIN_TEMP_C\n#define MIN_TEMP_C 10 // Min soldering temp selectable °C\n#endif\n#ifndef MIN_TEMP_F\n#define MIN_TEMP_F 60 // Min soldering temp selectable °F\n#endif\n#ifndef MIN_BOOST_TEMP_C\n#define MIN_BOOST_TEMP_C 250 // The min settable temp for boost mode °C\n#endif\n#ifndef MIN_BOOST_TEMP_F\n#define MIN_BOOST_TEMP_F 480 // The min settable temp for boost mode °F\n#endif\n\n#endif /* CONFIGURATION_H_ */\n"
  },
  {
    "path": "source/Core/BSP/Sequre/flash.c",
    "content": "/*\r\n * flash.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"BSP.h\"\r\n#include \"BSP_Flash.h\"\r\n#include \"stm32f1xx_hal.h\"\r\n#include \"string.h\"\r\n\r\nvoid flash_save_buffer(const uint8_t *buffer, const uint16_t length) {\r\n  FLASH_EraseInitTypeDef pEraseInit;\r\n  pEraseInit.TypeErase    = FLASH_TYPEERASE_PAGES;\r\n  pEraseInit.Banks        = FLASH_BANK_1;\r\n  pEraseInit.NbPages      = 1;\r\n  pEraseInit.PageAddress  = (uint32_t)SETTINGS_START_PAGE;\r\n  uint32_t failingAddress = 0;\r\n  resetWatchdog();\r\n  __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR | FLASH_FLAG_BSY);\r\n  HAL_FLASH_Unlock();\r\n  HAL_Delay(1);\r\n  resetWatchdog();\r\n  HAL_FLASHEx_Erase(&pEraseInit, &failingAddress);\r\n  //^ Erase the page of flash (1024 bytes on this stm32)\r\n  // erased the chunk\r\n  // now we program it\r\n  uint16_t *data = (uint16_t *)buffer;\r\n  HAL_FLASH_Unlock();\r\n  for (uint16_t i = 0; i < (length / 2); i++) {\r\n    resetWatchdog();\r\n    HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, SETTINGS_START_PAGE + (i * sizeof(uint16_t)), data[i]);\r\n  }\r\n  HAL_FLASH_Lock();\r\n}\r\n\r\nvoid flash_read_buffer(uint8_t *buffer, const uint16_t length) { memcpy(buffer, (uint8_t *)SETTINGS_START_PAGE, length); }\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/port.c",
    "content": "/*\r\n * FreeRTOS Kernel V10.3.1\r\n * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n * this software and associated documentation files (the \"Software\"), to deal in\r\n * the Software without restriction, including without limitation the rights to\r\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n * the Software, and to permit persons to whom the Software is furnished to do so,\r\n * subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n * http://www.FreeRTOS.org\r\n * http://aws.amazon.com/freertos\r\n *\r\n * 1 tab == 4 spaces!\r\n */\r\n\r\n/*-----------------------------------------------------------\r\n * Implementation of functions defined in portable.h for the ARM CM3 port.\r\n *----------------------------------------------------------*/\r\n\r\n/* Scheduler includes. */\r\n#include \"FreeRTOS.h\"\r\n#include \"task.h\"\r\n\r\n/* For backward compatibility, ensure configKERNEL_INTERRUPT_PRIORITY is\r\n defined.  The value should also ensure backward compatibility.\r\n FreeRTOS.org versions prior to V4.4.0 did not include this definition. */\r\n#ifndef configKERNEL_INTERRUPT_PRIORITY\r\n#define configKERNEL_INTERRUPT_PRIORITY 255\r\n#endif\r\n\r\n#ifndef configSYSTICK_CLOCK_HZ\r\n#define configSYSTICK_CLOCK_HZ configCPU_CLOCK_HZ\r\n/* Ensure the SysTick is clocked at the same frequency as the core. */\r\n#define portNVIC_SYSTICK_CLK_BIT (1UL << 2UL)\r\n#else\r\n/* The way the SysTick is clocked is not modified in case it is not the same\r\nas the core. */\r\n#define portNVIC_SYSTICK_CLK_BIT (0)\r\n#endif\r\n\r\n/* Constants required to manipulate the core.  Registers first... */\r\n#define portNVIC_SYSTICK_CTRL_REG          (*((volatile uint32_t *)0xe000e010))\r\n#define portNVIC_SYSTICK_LOAD_REG          (*((volatile uint32_t *)0xe000e014))\r\n#define portNVIC_SYSTICK_CURRENT_VALUE_REG (*((volatile uint32_t *)0xe000e018))\r\n#define portNVIC_SYSPRI2_REG               (*((volatile uint32_t *)0xe000ed20))\r\n/* ...then bits in the registers. */\r\n#define portNVIC_SYSTICK_INT_BIT        (1UL << 1UL)\r\n#define portNVIC_SYSTICK_ENABLE_BIT     (1UL << 0UL)\r\n#define portNVIC_SYSTICK_COUNT_FLAG_BIT (1UL << 16UL)\r\n#define portNVIC_PENDSVCLEAR_BIT        (1UL << 27UL)\r\n#define portNVIC_PEND_SYSTICK_CLEAR_BIT (1UL << 25UL)\r\n\r\n#define portNVIC_PENDSV_PRI  (((uint32_t)configKERNEL_INTERRUPT_PRIORITY) << 16UL)\r\n#define portNVIC_SYSTICK_PRI (((uint32_t)configKERNEL_INTERRUPT_PRIORITY) << 24UL)\r\n\r\n/* Constants required to check the validity of an interrupt priority. */\r\n#define portFIRST_USER_INTERRUPT_NUMBER (16)\r\n#define portNVIC_IP_REGISTERS_OFFSET_16 (0xE000E3F0)\r\n#define portAIRCR_REG                   (*((volatile uint32_t *)0xE000ED0C))\r\n#define portMAX_8_BIT_VALUE             ((uint8_t)0xff)\r\n#define portTOP_BIT_OF_BYTE             ((uint8_t)0x80)\r\n#define portMAX_PRIGROUP_BITS           ((uint8_t)7)\r\n#define portPRIORITY_GROUP_MASK         (0x07UL << 8UL)\r\n#define portPRIGROUP_SHIFT              (8UL)\r\n\r\n/* Masks off all bits but the VECTACTIVE bits in the ICSR register. */\r\n#define portVECTACTIVE_MASK (0xFFUL)\r\n\r\n/* Constants required to set up the initial stack. */\r\n#define portINITIAL_XPSR (0x01000000UL)\r\n\r\n/* The systick is a 24-bit counter. */\r\n#define portMAX_24_BIT_NUMBER (0xffffffUL)\r\n\r\n/* A fiddle factor to estimate the number of SysTick counts that would have\r\n occurred while the SysTick counter is stopped during tickless idle\r\n calculations. */\r\n#define portMISSED_COUNTS_FACTOR (45UL)\r\n\r\n/* For strict compliance with the Cortex-M spec the task start address should\r\n have bit-0 clear, as it is loaded into the PC on exit from an ISR. */\r\n#define portSTART_ADDRESS_MASK ((StackType_t)0xfffffffeUL)\r\n\r\n/* Let the user override the pre-loading of the initial LR with the address of\r\n prvTaskExitError() in case it messes up unwinding of the stack in the\r\n debugger. */\r\n#ifdef configTASK_RETURN_ADDRESS\r\n#define portTASK_RETURN_ADDRESS configTASK_RETURN_ADDRESS\r\n#else\r\n#define portTASK_RETURN_ADDRESS prvTaskExitError\r\n#endif\r\n\r\n/*\r\n * Setup the timer to generate the tick interrupts.  The implementation in this\r\n * file is weak to allow application writers to change the timer used to\r\n * generate the tick interrupt.\r\n */\r\nvoid vPortSetupTimerInterrupt(void);\r\n\r\n/*\r\n * Exception handlers.\r\n */\r\nvoid xPortPendSVHandler(void) __attribute__((naked));\r\nvoid xPortSysTickHandler(void);\r\nvoid vPortSVCHandler(void) __attribute__((naked));\r\n\r\n/*\r\n * Start first task is a separate function so it can be tested in isolation.\r\n */\r\nstatic void prvPortStartFirstTask(void) __attribute__((naked));\r\n\r\n/*\r\n * Used to catch tasks that attempt to return from their implementing function.\r\n */\r\nstatic void prvTaskExitError(void);\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Each task maintains its own interrupt status in the critical nesting\r\n variable. */\r\nstatic UBaseType_t uxCriticalNesting = 0xaaaaaaaa;\r\n\r\n/*\r\n * The number of SysTick increments that make up one tick period.\r\n */\r\n#if (configUSE_TICKLESS_IDLE == 1)\r\nstatic uint32_t ulTimerCountsForOneTick = 0;\r\n#endif /* configUSE_TICKLESS_IDLE */\r\n\r\n/*\r\n * The maximum number of tick periods that can be suppressed is limited by the\r\n * 24 bit resolution of the SysTick timer.\r\n */\r\n#if (configUSE_TICKLESS_IDLE == 1)\r\nstatic uint32_t xMaximumPossibleSuppressedTicks = 0;\r\n#endif /* configUSE_TICKLESS_IDLE */\r\n\r\n/*\r\n * Compensate for the CPU cycles that pass while the SysTick is stopped (low\r\n * power functionality only.\r\n */\r\n#if (configUSE_TICKLESS_IDLE == 1)\r\nstatic uint32_t ulStoppedTimerCompensation = 0;\r\n#endif /* configUSE_TICKLESS_IDLE */\r\n\r\n/*\r\n * Used by the portASSERT_IF_INTERRUPT_PRIORITY_INVALID() macro to ensure\r\n * FreeRTOS API functions are not called from interrupts that have been assigned\r\n * a priority above configMAX_SYSCALL_INTERRUPT_PRIORITY.\r\n */\r\n#if (configASSERT_DEFINED == 1)\r\nstatic uint8_t                       ucMaxSysCallPriority         = 0;\r\nstatic uint32_t                      ulMaxPRIGROUPValue           = 0;\r\nstatic const volatile uint8_t *const pcInterruptPriorityRegisters = (const volatile uint8_t *const)portNVIC_IP_REGISTERS_OFFSET_16;\r\n#endif /* configASSERT_DEFINED */\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n/*\r\n * See header file for description.\r\n */\r\nStackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters) {\r\n  /* Simulate the stack frame as it would be created by a context switch\r\n   interrupt. */\r\n  pxTopOfStack--;                   /* Offset added to account for the way the MCU uses the stack on entry/exit of interrupts. */\r\n  *pxTopOfStack = portINITIAL_XPSR; /* xPSR */\r\n  pxTopOfStack--;\r\n  *pxTopOfStack = ((StackType_t)pxCode) & portSTART_ADDRESS_MASK; /* PC */\r\n  pxTopOfStack--;\r\n  *pxTopOfStack = (StackType_t)portTASK_RETURN_ADDRESS; /* LR */\r\n  pxTopOfStack -= 5;                                    /* R12, R3, R2 and R1. */\r\n  *pxTopOfStack = (StackType_t)pvParameters;            /* R0 */\r\n  pxTopOfStack -= 8;                                    /* R11, R10, R9, R8, R7, R6, R5 and R4. */\r\n\r\n  return pxTopOfStack;\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nstatic void prvTaskExitError(void) {\r\n  // volatile uint32_t ulDummy = 0UL;\r\n\r\n  // /* A function that implements a task must not exit or attempt to return to\r\n  //  its caller as there is nothing to return to.  If a task wants to exit it\r\n  //  should instead call vTaskDelete( NULL ).\r\n\r\n  //  Artificially force an assert() to be triggered if configASSERT() is\r\n  //  defined, then stop here so application writers can catch the error. */\r\n  // configASSERT(uxCriticalNesting == ~0UL);\r\n  // portDISABLE_INTERRUPTS();\r\n  // while (ulDummy == 0) {\r\n  //   /* This file calls prvTaskExitError() after the scheduler has been\r\n  //    started to remove a compiler warning about the function being defined\r\n  //    but never called.  ulDummy is used purely to quieten other warnings\r\n  //    about code appearing after this function is called - making ulDummy\r\n  //    volatile makes the compiler think the function could return and\r\n  //    therefore not output an 'unreachable code' warning for code that appears\r\n  //    after it. */\r\n  // }\r\n  for (;;) {\r\n  }\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid vPortSVCHandler(void) {\r\n  __asm volatile(\"    ldr    r3,      pxCurrentTCBConst2 \\n\" /* Restore the context. */\r\n                 \"    ldr    r1,      [r3]               \\n\" /* Use pxCurrentTCBConst to get the pxCurrentTCB address. */\r\n                 \"    ldr    r0,      [r1]               \\n\" /* The first item in pxCurrentTCB is the task top of stack. */\r\n                 \"    ldmia  r0!,     {r4-r11}           \\n\" /* Pop the registers that are not automatically saved on exception entry and the critical nesting count. */\r\n                 \"    msr    psp,      r0                \\n\" /* Restore the task stack pointer. */\r\n                 \"    isb                                \\n\"\r\n                 \"    mov    r0,       #0                \\n\"\r\n                 \"    msr    basepri,  r0                \\n\"\r\n                 \"    orr    r14,      #0xd              \\n\"\r\n                 \"    bx     r14                         \\n\"\r\n                 \"                                       \\n\"\r\n                 \"                    .align 4           \\n\"\r\n                 \"pxCurrentTCBConst2: .word pxCurrentTCB \\n\");\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nstatic void prvPortStartFirstTask(void) {\r\n  __asm volatile(\"  ldr   r0,   =0xE000ED08 \\n\" /* Use the NVIC offset register to locate the stack. */\r\n                 \"  ldr   r0,  [r0]         \\n\"\r\n                 \"  ldr   r0,  [r0]         \\n\"\r\n                 \"  msr  msp,   r0          \\n\" /* Set the msp back to the start of the stack. */\r\n                 \"  cpsie  i                \\n\" /* Globally enable interrupts. */\r\n                 \"  cpsie  f                \\n\"\r\n                 \"  dsb                     \\n\"\r\n                 \"  isb                     \\n\"\r\n                 \"  svc    0                \\n\" /* System call to start first task. */\r\n                 \"  nop                     \\n\");\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\n/*\r\n * See header file for description.\r\n */\r\nBaseType_t xPortStartScheduler(void) {\r\n  /* configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to 0.\r\n   See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */\r\n  configASSERT(configMAX_SYSCALL_INTERRUPT_PRIORITY);\r\n\r\n#if (configASSERT_DEFINED == 1)\r\n  {\r\n    volatile uint32_t       ulOriginalPriority;\r\n    volatile uint8_t *const pucFirstUserPriorityRegister = (volatile uint8_t *const)(portNVIC_IP_REGISTERS_OFFSET_16 + portFIRST_USER_INTERRUPT_NUMBER);\r\n    volatile uint8_t        ucMaxPriorityValue;\r\n\r\n    /* Determine the maximum priority from which ISR safe FreeRTOS API\r\n     functions can be called.  ISR safe functions are those that end in\r\n     \"FromISR\".  FreeRTOS maintains separate thread and ISR API functions to\r\n     ensure interrupt entry is as fast and simple as possible.\r\n\r\n     Save the interrupt priority value that is about to be clobbered. */\r\n    ulOriginalPriority = *pucFirstUserPriorityRegister;\r\n\r\n    /* Determine the number of priority bits available.  First write to all\r\n     possible bits. */\r\n    *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE;\r\n\r\n    /* Read the value back to see how many bits stuck. */\r\n    ucMaxPriorityValue = *pucFirstUserPriorityRegister;\r\n\r\n    /* Use the same mask on the maximum system call priority. */\r\n    ucMaxSysCallPriority = configMAX_SYSCALL_INTERRUPT_PRIORITY & ucMaxPriorityValue;\r\n\r\n    /* Calculate the maximum acceptable priority group value for the number\r\n     of bits read back. */\r\n    ulMaxPRIGROUPValue = portMAX_PRIGROUP_BITS;\r\n    while ((ucMaxPriorityValue & portTOP_BIT_OF_BYTE) == portTOP_BIT_OF_BYTE) {\r\n      ulMaxPRIGROUPValue--;\r\n      ucMaxPriorityValue <<= (uint8_t)0x01;\r\n    }\r\n\r\n#ifdef __NVIC_PRIO_BITS\r\n    {\r\n      /* Check the CMSIS configuration that defines the number of\r\n      priority bits matches the number of priority bits actually queried\r\n      from the hardware. */\r\n      configASSERT((portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue) == __NVIC_PRIO_BITS);\r\n    }\r\n#endif\r\n\r\n#ifdef configPRIO_BITS\r\n    {\r\n      /* Check the FreeRTOS configuration that defines the number of\r\n      priority bits matches the number of priority bits actually queried\r\n      from the hardware. */\r\n      configASSERT((portMAX_PRIGROUP_BITS - ulMaxPRIGROUPValue) == configPRIO_BITS);\r\n    }\r\n#endif\r\n\r\n    /* Shift the priority group value back to its position within the AIRCR\r\n     register. */\r\n    ulMaxPRIGROUPValue <<= portPRIGROUP_SHIFT;\r\n    ulMaxPRIGROUPValue &= portPRIORITY_GROUP_MASK;\r\n\r\n    /* Restore the clobbered interrupt priority register to its original\r\n     value. */\r\n    *pucFirstUserPriorityRegister = ulOriginalPriority;\r\n  }\r\n#endif /* conifgASSERT_DEFINED */\r\n\r\n  /* Make PendSV and SysTick the lowest priority interrupts. */\r\n  portNVIC_SYSPRI2_REG |= portNVIC_PENDSV_PRI;\r\n  portNVIC_SYSPRI2_REG |= portNVIC_SYSTICK_PRI;\r\n\r\n  /* Start the timer that generates the tick ISR.  Interrupts are disabled\r\n   here already. */\r\n  vPortSetupTimerInterrupt();\r\n\r\n  /* Initialise the critical nesting count ready for the first task. */\r\n  uxCriticalNesting = 0;\r\n\r\n  /* Start the first task. */\r\n  prvPortStartFirstTask();\r\n\r\n  /* Should never get here as the tasks will now be executing!  Call the task\r\n   exit error function to prevent compiler warnings about a static function\r\n   not being called in the case that the application writer overrides this\r\n   functionality by defining configTASK_RETURN_ADDRESS.  Call\r\n   vTaskSwitchContext() so link time optimisation does not remove the\r\n   symbol. */\r\n  vTaskSwitchContext();\r\n  prvTaskExitError();\r\n\r\n  /* Should not get here! */\r\n  return 0;\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid vPortEndScheduler(void) {\r\n  /* Not implemented in ports where there is nothing to return to.\r\n   Artificially force an assert. */\r\n  configASSERT(uxCriticalNesting == 1000UL);\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid vPortEnterCritical(void) {\r\n  portDISABLE_INTERRUPTS();\r\n  uxCriticalNesting++;\r\n\r\n  /* This is not the interrupt safe version of the enter critical function so\r\n   assert() if it is being called from an interrupt context.  Only API\r\n   functions that end in \"FromISR\" can be used in an interrupt.  Only assert if\r\n   the critical nesting count is 1 to protect against recursive calls if the\r\n   assert function also uses a critical section. */\r\n  if (uxCriticalNesting == 1) {\r\n    configASSERT((portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK) == 0);\r\n  }\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid vPortExitCritical(void) {\r\n  configASSERT(uxCriticalNesting);\r\n  uxCriticalNesting--;\r\n  if (uxCriticalNesting == 0) {\r\n    portENABLE_INTERRUPTS();\r\n  }\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid xPortPendSVHandler(void) {\r\n  /* This is a naked function. */\r\n\r\n  __asm volatile(\"\tmrs r0, psp\t\t\t\t\t\t\t\\n\"\r\n                 \"\tisb\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tldr\tr3, pxCurrentTCBConst\t\t\t\\n\" /* Get the location of the current TCB. */\r\n                 \"\tldr\tr2, [r3]\t\t\t\t\t\t\\n\"\r\n                 \"\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tstmdb r0!, {r4-r11}\t\t\t\t\t\\n\" /* Save the remaining registers. */\r\n                 \"\tstr r0, [r2]\t\t\t\t\t\t\\n\" /* Save the new top of stack into the first member of the TCB. */\r\n                 \"\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tstmdb sp!, {r3, r14}\t\t\t\t\\n\"\r\n                 \"\tmov r0, %0\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmsr basepri, r0\t\t\t\t\t\t\\n\"\r\n                 \"\tbl vTaskSwitchContext\t\t\t\t\\n\"\r\n                 \"\tmov r0, #0\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmsr basepri, r0\t\t\t\t\t\t\\n\"\r\n                 \"\tldmia sp!, {r3, r14}\t\t\t\t\\n\"\r\n                 \"\t\t\t\t\t\t\t\t\t\t\\n\" /* Restore the context, including the critical nesting count. */\r\n                 \"\tldr r1, [r3]\t\t\t\t\t\t\\n\"\r\n                 \"\tldr r0, [r1]\t\t\t\t\t\t\\n\" /* The first item in pxCurrentTCB is the task top of stack. */\r\n                 \"\tldmia r0!, {r4-r11}\t\t\t\t\t\\n\" /* Pop the registers. */\r\n                 \"\tmsr psp, r0\t\t\t\t\t\t\t\\n\"\r\n                 \"\tisb\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tbx r14\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\t.align 4\t\t\t\t\t\t\t\\n\"\r\n                 \"pxCurrentTCBConst: .word pxCurrentTCB\t\\n\" ::\"i\"(configMAX_SYSCALL_INTERRUPT_PRIORITY));\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nvoid xPortSysTickHandler(void) {\r\n  /* The SysTick runs at the lowest interrupt priority, so when this interrupt\r\n   executes all interrupts must be unmasked.  There is therefore no need to\r\n   save and then restore the interrupt mask value as its value is already\r\n   known. */\r\n  portDISABLE_INTERRUPTS();\r\n  {\r\n    /* Increment the RTOS tick. */\r\n    if (xTaskIncrementTick() != pdFALSE) {\r\n      /* A context switch is required.  Context switching is performed in\r\n       the PendSV interrupt.  Pend the PendSV interrupt. */\r\n      portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;\r\n    }\r\n  }\r\n  portENABLE_INTERRUPTS();\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\n#if (configUSE_TICKLESS_IDLE == 1)\r\n\r\n__attribute__((weak)) void vPortSuppressTicksAndSleep(TickType_t xExpectedIdleTime) {\r\n  uint32_t   ulReloadValue, ulCompleteTickPeriods, ulCompletedSysTickDecrements;\r\n  TickType_t xModifiableIdleTime;\r\n\r\n  /* Make sure the SysTick reload value does not overflow the counter. */\r\n  if (xExpectedIdleTime > xMaximumPossibleSuppressedTicks) {\r\n    xExpectedIdleTime = xMaximumPossibleSuppressedTicks;\r\n  }\r\n\r\n  /* Stop the SysTick momentarily.  The time the SysTick is stopped for\r\n  is accounted for as best it can be, but using the tickless mode will\r\n  inevitably result in some tiny drift of the time maintained by the\r\n  kernel with respect to calendar time. */\r\n  portNVIC_SYSTICK_CTRL_REG &= ~portNVIC_SYSTICK_ENABLE_BIT;\r\n\r\n  /* Calculate the reload value required to wait xExpectedIdleTime\r\n  tick periods.  -1 is used because this code will execute part way\r\n  through one of the tick periods. */\r\n  ulReloadValue = portNVIC_SYSTICK_CURRENT_VALUE_REG + (ulTimerCountsForOneTick * (xExpectedIdleTime - 1UL));\r\n  if (ulReloadValue > ulStoppedTimerCompensation) {\r\n    ulReloadValue -= ulStoppedTimerCompensation;\r\n  }\r\n\r\n  /* Enter a critical section but don't use the taskENTER_CRITICAL()\r\n  method as that will mask interrupts that should exit sleep mode. */\r\n  __asm volatile(\"cpsid i\" ::: \"memory\");\r\n  __asm volatile(\"dsb\");\r\n  __asm volatile(\"isb\");\r\n\r\n  /* If a context switch is pending or a task is waiting for the scheduler\r\n  to be unsuspended then abandon the low power entry. */\r\n  if (eTaskConfirmSleepModeStatus() == eAbortSleep) {\r\n    /* Restart from whatever is left in the count register to complete\r\n    this tick period. */\r\n    portNVIC_SYSTICK_LOAD_REG = portNVIC_SYSTICK_CURRENT_VALUE_REG;\r\n\r\n    /* Restart SysTick. */\r\n    portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT;\r\n\r\n    /* Reset the reload register to the value required for normal tick\r\n    periods. */\r\n    portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r\n\r\n    /* Re-enable interrupts - see comments above the cpsid instruction()\r\n    above. */\r\n    __asm volatile(\"cpsie i\" ::: \"memory\");\r\n  } else {\r\n    /* Set the new reload value. */\r\n    portNVIC_SYSTICK_LOAD_REG = ulReloadValue;\r\n\r\n    /* Clear the SysTick count flag and set the count value back to\r\n    zero. */\r\n    portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;\r\n\r\n    /* Restart SysTick. */\r\n    portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT;\r\n\r\n    /* Sleep until something happens.  configPRE_SLEEP_PROCESSING() can\r\n    set its parameter to 0 to indicate that its implementation contains\r\n    its own wait for interrupt or wait for event instruction, and so wfi\r\n    should not be executed again.  However, the original expected idle\r\n    time variable must remain unmodified, so a copy is taken. */\r\n    xModifiableIdleTime = xExpectedIdleTime;\r\n    configPRE_SLEEP_PROCESSING(xModifiableIdleTime);\r\n    if (xModifiableIdleTime > 0) {\r\n      __asm volatile(\"dsb\" ::: \"memory\");\r\n      __asm volatile(\"wfi\");\r\n      __asm volatile(\"isb\");\r\n    }\r\n    configPOST_SLEEP_PROCESSING(xExpectedIdleTime);\r\n\r\n    /* Re-enable interrupts to allow the interrupt that brought the MCU\r\n    out of sleep mode to execute immediately.  see comments above\r\n    __disable_interrupt() call above. */\r\n    __asm volatile(\"cpsie i\" ::: \"memory\");\r\n    __asm volatile(\"dsb\");\r\n    __asm volatile(\"isb\");\r\n\r\n    /* Disable interrupts again because the clock is about to be stopped\r\n    and interrupts that execute while the clock is stopped will increase\r\n    any slippage between the time maintained by the RTOS and calendar\r\n    time. */\r\n    __asm volatile(\"cpsid i\" ::: \"memory\");\r\n    __asm volatile(\"dsb\");\r\n    __asm volatile(\"isb\");\r\n\r\n    /* Disable the SysTick clock without reading the\r\n    portNVIC_SYSTICK_CTRL_REG register to ensure the\r\n    portNVIC_SYSTICK_COUNT_FLAG_BIT is not cleared if it is set.  Again,\r\n    the time the SysTick is stopped for is accounted for as best it can\r\n    be, but using the tickless mode will inevitably result in some tiny\r\n    drift of the time maintained by the kernel with respect to calendar\r\n    time*/\r\n    portNVIC_SYSTICK_CTRL_REG = (portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT);\r\n\r\n    /* Determine if the SysTick clock has already counted to zero and\r\n    been set back to the current reload value (the reload back being\r\n    correct for the entire expected idle time) or if the SysTick is yet\r\n    to count to zero (in which case an interrupt other than the SysTick\r\n    must have brought the system out of sleep mode). */\r\n    if ((portNVIC_SYSTICK_CTRL_REG & portNVIC_SYSTICK_COUNT_FLAG_BIT) != 0) {\r\n      uint32_t ulCalculatedLoadValue;\r\n\r\n      /* The tick interrupt is already pending, and the SysTick count\r\n      reloaded with ulReloadValue.  Reset the\r\n      portNVIC_SYSTICK_LOAD_REG with whatever remains of this tick\r\n      period. */\r\n      ulCalculatedLoadValue = (ulTimerCountsForOneTick - 1UL) - (ulReloadValue - portNVIC_SYSTICK_CURRENT_VALUE_REG);\r\n\r\n      /* Don't allow a tiny value, or values that have somehow\r\n      underflowed because the post sleep hook did something\r\n      that took too long. */\r\n      if ((ulCalculatedLoadValue < ulStoppedTimerCompensation) || (ulCalculatedLoadValue > ulTimerCountsForOneTick)) {\r\n        ulCalculatedLoadValue = (ulTimerCountsForOneTick - 1UL);\r\n      }\r\n\r\n      portNVIC_SYSTICK_LOAD_REG = ulCalculatedLoadValue;\r\n\r\n      /* As the pending tick will be processed as soon as this\r\n      function exits, the tick value maintained by the tick is stepped\r\n      forward by one less than the time spent waiting. */\r\n      ulCompleteTickPeriods = xExpectedIdleTime - 1UL;\r\n    } else {\r\n      /* Something other than the tick interrupt ended the sleep.\r\n      Work out how long the sleep lasted rounded to complete tick\r\n      periods (not the ulReload value which accounted for part\r\n      ticks). */\r\n      ulCompletedSysTickDecrements = (xExpectedIdleTime * ulTimerCountsForOneTick) - portNVIC_SYSTICK_CURRENT_VALUE_REG;\r\n\r\n      /* How many complete tick periods passed while the processor\r\n      was waiting? */\r\n      ulCompleteTickPeriods = ulCompletedSysTickDecrements / ulTimerCountsForOneTick;\r\n\r\n      /* The reload value is set to whatever fraction of a single tick\r\n      period remains. */\r\n      portNVIC_SYSTICK_LOAD_REG = ((ulCompleteTickPeriods + 1UL) * ulTimerCountsForOneTick) - ulCompletedSysTickDecrements;\r\n    }\r\n\r\n    /* Restart SysTick so it runs from portNVIC_SYSTICK_LOAD_REG\r\n    again, then set portNVIC_SYSTICK_LOAD_REG back to its standard\r\n    value. */\r\n    portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;\r\n    portNVIC_SYSTICK_CTRL_REG |= portNVIC_SYSTICK_ENABLE_BIT;\r\n    vTaskStepTick(ulCompleteTickPeriods);\r\n    portNVIC_SYSTICK_LOAD_REG = ulTimerCountsForOneTick - 1UL;\r\n\r\n    /* Exit with interrupts enabled. */\r\n    __asm volatile(\"cpsie i\" ::: \"memory\");\r\n  }\r\n}\r\n\r\n#endif /* configUSE_TICKLESS_IDLE */\r\n/*-----------------------------------------------------------*/\r\n\r\n/*\r\n * Setup the systick timer to generate the tick interrupts at the required\r\n * frequency.\r\n */\r\n__attribute__((weak)) void vPortSetupTimerInterrupt(void) {\r\n  /* Calculate the constants required to configure the tick interrupt. */\r\n#if (configUSE_TICKLESS_IDLE == 1)\r\n  {\r\n    ulTimerCountsForOneTick         = (configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ);\r\n    xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick;\r\n    ulStoppedTimerCompensation      = portMISSED_COUNTS_FACTOR / (configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ);\r\n  }\r\n#endif /* configUSE_TICKLESS_IDLE */\r\n\r\n  /* Stop and clear the SysTick. */\r\n  portNVIC_SYSTICK_CTRL_REG          = 0UL;\r\n  portNVIC_SYSTICK_CURRENT_VALUE_REG = 0UL;\r\n\r\n  /* Configure SysTick to interrupt at the requested rate. */\r\n  portNVIC_SYSTICK_LOAD_REG = (configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ) - 1UL;\r\n  portNVIC_SYSTICK_CTRL_REG = (portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT);\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\n#if (configASSERT_DEFINED == 1)\r\n\r\nvoid vPortValidateInterruptPriority(void) {\r\n  uint32_t ulCurrentInterrupt;\r\n  uint8_t  ucCurrentPriority;\r\n\r\n  /* Obtain the number of the currently executing interrupt. */\r\n  __asm volatile(\"mrs %0, ipsr\" : \"=r\"(ulCurrentInterrupt)::\"memory\");\r\n\r\n  /* Is the interrupt number a user defined interrupt? */\r\n  if (ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER) {\r\n    /* Look up the interrupt's priority. */\r\n    ucCurrentPriority = pcInterruptPriorityRegisters[ulCurrentInterrupt];\r\n\r\n    /* The following assertion will fail if a service routine (ISR) for\r\n     an interrupt that has been assigned a priority above\r\n     configMAX_SYSCALL_INTERRUPT_PRIORITY calls an ISR safe FreeRTOS API\r\n     function.  ISR safe FreeRTOS API functions must *only* be called\r\n     from interrupts that have been assigned a priority at or below\r\n     configMAX_SYSCALL_INTERRUPT_PRIORITY.\r\n\r\n     Numerically low interrupt priority numbers represent logically high\r\n     interrupt priorities, therefore the priority of the interrupt must\r\n     be set to a value equal to or numerically *higher* than\r\n     configMAX_SYSCALL_INTERRUPT_PRIORITY.\r\n\r\n     Interrupts that\tuse the FreeRTOS API must not be left at their\r\n     default priority of\tzero as that is the highest possible priority,\r\n     which is guaranteed to be above configMAX_SYSCALL_INTERRUPT_PRIORITY,\r\n     and\ttherefore also guaranteed to be invalid.\r\n\r\n     FreeRTOS maintains separate thread and ISR API functions to ensure\r\n     interrupt entry is as fast and simple as possible.\r\n\r\n     The following links provide detailed information:\r\n     http://www.freertos.org/RTOS-Cortex-M3-M4.html\r\n     http://www.freertos.org/FAQHelp.html */\r\n    configASSERT(ucCurrentPriority >= ucMaxSysCallPriority);\r\n  }\r\n\r\n  /* Priority grouping:  The interrupt controller (NVIC) allows the bits\r\n   that define each interrupt's priority to be split between bits that\r\n   define the interrupt's pre-emption priority bits and bits that define\r\n   the interrupt's sub-priority.  For simplicity all bits must be defined\r\n   to be pre-emption priority bits.  The following assertion will fail if\r\n   this is not the case (if some bits represent a sub-priority).\r\n\r\n   If the application only uses CMSIS libraries for interrupt\r\n   configuration then the correct setting can be achieved on all Cortex-M\r\n   devices by calling NVIC_SetPriorityGrouping( 0 ); before starting the\r\n   scheduler.  Note however that some vendor specific peripheral libraries\r\n   assume a non-zero priority group setting, in which cases using a value\r\n   of zero will result in unpredictable behaviour. */\r\n  configASSERT((portAIRCR_REG & portPRIORITY_GROUP_MASK) <= ulMaxPRIGROUPValue);\r\n}\r\n\r\n#endif /* configASSERT_DEFINED */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/portmacro.h",
    "content": "/*\r\n * FreeRTOS Kernel V10.3.1\r\n * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n * this software and associated documentation files (the \"Software\"), to deal in\r\n * the Software without restriction, including without limitation the rights to\r\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n * the Software, and to permit persons to whom the Software is furnished to do so,\r\n * subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in all\r\n * copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n * http://www.FreeRTOS.org\r\n * http://aws.amazon.com/freertos\r\n *\r\n * 1 tab == 4 spaces!\r\n */\r\n\r\n#ifndef PORTMACRO_H\r\n#define PORTMACRO_H\r\n#include \"FreeRTOSConfig.h\"\r\n#include \"projdefs.h\"\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/*-----------------------------------------------------------\r\n * Port specific definitions.\r\n *\r\n * The settings in this file configure FreeRTOS correctly for the\r\n * given hardware and compiler.\r\n *\r\n * These settings should not be altered.\r\n *-----------------------------------------------------------\r\n */\r\n\r\n/* Type definitions. */\r\n#define portCHAR       char\r\n#define portFLOAT      float\r\n#define portDOUBLE     double\r\n#define portLONG       long\r\n#define portSHORT      short\r\n#define portSTACK_TYPE uint32_t\r\n#define portBASE_TYPE  long\r\n\r\ntypedef portSTACK_TYPE StackType_t;\r\ntypedef long           BaseType_t;\r\ntypedef unsigned long  UBaseType_t;\r\n\r\n#if (configUSE_16_BIT_TICKS == 1)\r\ntypedef uint16_t TickType_t;\r\n#define portMAX_DELAY (TickType_t)0xffff\r\n#else\r\ntypedef uint32_t TickType_t;\r\n#define portMAX_DELAY           (TickType_t)0xffffffffUL\r\n\r\n/* 32-bit tick type on a 32-bit architecture, so reads of the tick count do\r\n not need to be guarded with a critical section. */\r\n#define portTICK_TYPE_IS_ATOMIC 1\r\n#endif\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Architecture specifics. */\r\n#define portSTACK_GROWTH   (-1)\r\n#define portTICK_PERIOD_MS ((TickType_t)1000 / configTICK_RATE_HZ)\r\n#define portBYTE_ALIGNMENT 8\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Scheduler utilities. */\r\n#define portYIELD()                                                            \\\r\n  {                                                                            \\\r\n    /* Set a PendSV to request a context switch. */                            \\\r\n    portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;                            \\\r\n                                                                               \\\r\n    /* Barriers are normally not required but do ensure the code is completely \\\r\n    within the specified behaviour for the architecture. */                    \\\r\n    __asm volatile(\"dsb\" ::: \"memory\");                                        \\\r\n    __asm volatile(\"isb\");                                                     \\\r\n  }\r\n\r\n#define portNVIC_INT_CTRL_REG  (*((volatile uint32_t *)0xe000ed04))\r\n#define portNVIC_PENDSVSET_BIT (1UL << 28UL)\r\n#define portEND_SWITCHING_ISR(xSwitchRequired) \\\r\n  if (xSwitchRequired != pdFALSE)              \\\r\n  portYIELD()\r\n#define portYIELD_FROM_ISR(x) portEND_SWITCHING_ISR(x)\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Critical section management. */\r\nextern void vPortEnterCritical(void);\r\nextern void vPortExitCritical(void);\r\n#define portSET_INTERRUPT_MASK_FROM_ISR()    ulPortRaiseBASEPRI()\r\n#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortSetBASEPRI(x)\r\n#define portDISABLE_INTERRUPTS()             vPortRaiseBASEPRI()\r\n#define portENABLE_INTERRUPTS()              vPortSetBASEPRI(0)\r\n#define portENTER_CRITICAL()                 vPortEnterCritical()\r\n#define portEXIT_CRITICAL()                  vPortExitCritical()\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Task function macros as described on the FreeRTOS.org WEB site.  These are\r\n not necessary for to use this port.  They are defined so the common demo files\r\n (which build with all the ports) will build. */\r\n#define portTASK_FUNCTION_PROTO(vFunction, pvParameters) void vFunction(void *pvParameters)\r\n#define portTASK_FUNCTION(vFunction, pvParameters)       void vFunction(void *pvParameters)\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Tickless idle/low power functionality. */\r\n#ifndef portSUPPRESS_TICKS_AND_SLEEP\r\nextern void vPortSuppressTicksAndSleep(TickType_t xExpectedIdleTime);\r\n#define portSUPPRESS_TICKS_AND_SLEEP(xExpectedIdleTime) vPortSuppressTicksAndSleep(xExpectedIdleTime)\r\n#endif\r\n/*-----------------------------------------------------------*/\r\n\r\n/* Architecture specific optimisations. */\r\n#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION\r\n#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1\r\n#endif\r\n\r\n#if configUSE_PORT_OPTIMISED_TASK_SELECTION == 1\r\n\r\n/* Generic helper function. */\r\n__attribute__((always_inline)) static inline uint8_t ucPortCountLeadingZeros(uint32_t ulBitmap) {\r\n  uint8_t ucReturn;\r\n\r\n  __asm volatile(\"clz %0, %1\" : \"=r\"(ucReturn) : \"r\"(ulBitmap) : \"memory\");\r\n  return ucReturn;\r\n}\r\n\r\n/* Check the configuration. */\r\n#if (configMAX_PRIORITIES > 32)\r\n#error configUSE_PORT_OPTIMISED_TASK_SELECTION can only be set to 1 when configMAX_PRIORITIES is less than or equal to 32.  It is very rare that a system requires more than 10 to 15 difference priorities as tasks that share a priority will time slice.\r\n#endif\r\n\r\n/* Store/clear the ready priorities in a bit map. */\r\n#define portRECORD_READY_PRIORITY(uxPriority, uxReadyPriorities) (uxReadyPriorities) |= (1UL << (uxPriority))\r\n#define portRESET_READY_PRIORITY(uxPriority, uxReadyPriorities)  (uxReadyPriorities) &= ~(1UL << (uxPriority))\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n#define portGET_HIGHEST_PRIORITY(uxTopPriority, uxReadyPriorities) uxTopPriority = (31UL - (uint32_t)ucPortCountLeadingZeros((uxReadyPriorities)))\r\n\r\n#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\n#ifdef configASSERT\r\nvoid vPortValidateInterruptPriority(void);\r\n#define portASSERT_IF_INTERRUPT_PRIORITY_INVALID() vPortValidateInterruptPriority()\r\n#endif\r\n\r\n/* portNOP() is not required by this port. */\r\n#define portNOP()\r\n\r\n#define portINLINE __inline\r\n\r\n#ifndef portFORCE_INLINE\r\n#define portFORCE_INLINE inline __attribute__((always_inline))\r\n#endif\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\nportFORCE_INLINE static BaseType_t xPortIsInsideInterrupt(void) {\r\n  uint32_t   ulCurrentInterrupt;\r\n  BaseType_t xReturn;\r\n\r\n  /* Obtain the number of the currently executing interrupt. */\r\n  __asm volatile(\"mrs %0, ipsr\" : \"=r\"(ulCurrentInterrupt)::\"memory\");\r\n\r\n  if (ulCurrentInterrupt == 0) {\r\n    xReturn = pdFALSE;\r\n  } else {\r\n    xReturn = pdTRUE;\r\n  }\r\n\r\n  return xReturn;\r\n}\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\nportFORCE_INLINE static void vPortRaiseBASEPRI(void) {\r\n  uint32_t ulNewBASEPRI;\r\n\r\n  __asm volatile(\"\tmov %0, %1\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmsr basepri, %0\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tisb\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tdsb\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 : \"=r\"(ulNewBASEPRI)\r\n                 : \"i\"(configMAX_SYSCALL_INTERRUPT_PRIORITY)\r\n                 : \"memory\");\r\n}\r\n\r\n/*-----------------------------------------------------------*/\r\n\r\nportFORCE_INLINE static uint32_t ulPortRaiseBASEPRI(void) {\r\n  uint32_t ulOriginalBASEPRI, ulNewBASEPRI;\r\n\r\n  __asm volatile(\"\tmrs %0, basepri\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmov %1, %2\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tmsr basepri, %1\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tisb\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 \"\tdsb\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\n\"\r\n                 : \"=r\"(ulOriginalBASEPRI), \"=r\"(ulNewBASEPRI)\r\n                 : \"i\"(configMAX_SYSCALL_INTERRUPT_PRIORITY)\r\n                 : \"memory\");\r\n\r\n  /* This return will not be reached but is necessary to prevent compiler\r\n   warnings. */\r\n  return ulOriginalBASEPRI;\r\n}\r\n/*-----------------------------------------------------------*/\r\n\r\nportFORCE_INLINE static void vPortSetBASEPRI(uint32_t ulNewMaskValue) { __asm volatile(\"\tmsr basepri, %0\t\" ::\"r\"(ulNewMaskValue) : \"memory\"); }\r\n/*-----------------------------------------------------------*/\r\n\r\n#define portMEMORY_BARRIER() __asm volatile(\"\" ::: \"memory\")\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* PORTMACRO_H */\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/postRTOS.cpp",
    "content": "#include \"BSP.h\"\n\n// Initialisation to be performed with scheduler active\nvoid postRToSInit() {}\n"
  },
  {
    "path": "source/Core/BSP/Sequre/preRTOS.cpp",
    "content": "/*\r\n * preRTOS.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"BSP.h\"\r\n#include \"I2CBB2.hpp\"\r\n#include \"Pins.h\"\r\n#include \"Setup.h\"\r\n#include <I2C_Wrapper.hpp>\r\n\r\nvoid preRToSInit() {\r\n  /* Reset of all peripherals, Initializes the Flash interface and the Systick.\r\n   */\r\n  HAL_Init();\r\n  Setup_HAL(); // Setup all the HAL objects\r\n  BSPInit();\r\n#ifdef I2C_SOFT_BUS_2\r\n  I2CBB2::init();\r\n#endif\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/stm32f103.ld",
    "content": "\r\n\r\n/* Entry Point */\r\nENTRY(Reset_Handler)\r\n\r\n/* Highest address of the user mode stack */\r\n_estack = 0x20005000;    /* end of RAM */\r\n\r\n_Min_Heap_Size = 0x300;      /* required amount of heap  */\r\n_Min_Stack_Size = 1024; /* required amount of stack */\r\n\r\n__APP_BASE_ADDRESS__ = 0x08000000 + __BOOTLDR_SIZE__;\r\n__ROM_REGION_LENGTH__ = __FLASH_SIZE__ - __BOOTLDR_SIZE__;\r\n__FLASH_END_ADDR__ = __APP_BASE_ADDRESS__ + __ROM_REGION_LENGTH__;\r\n\r\n/* Memories definition */\r\nMEMORY\r\n{\r\n  RAM (xrw)\t\t: ORIGIN = 0x20000000, LENGTH = 20K\r\n  ROM (rx)\t\t: ORIGIN = __APP_BASE_ADDRESS__, LENGTH = __ROM_REGION_LENGTH__\r\n}\r\n/* ROM is normally 48K after the bootloader, however we allocate the last page for settings, and the second last one for display boot logo*/\r\n\r\n/* Sections */\r\nSECTIONS\r\n{\r\n  /* The startup code into ROM memory */\r\n  .isr_vector :\r\n  {\r\n    . = ALIGN(4);\r\n    KEEP(*(.isr_vector)) /* Startup code */\r\n    . = ALIGN(4);\r\n  } >ROM\r\n\r\n  /* The program code and other data into ROM memory */\r\n  .text :\r\n  {\r\n    . = ALIGN(4);\r\n    *(.text)           /* .text sections (code) */\r\n    *(.text*)          /* .text* sections (code) */\r\n    *(.glue_7)         /* glue arm to thumb code */\r\n    *(.glue_7t)        /* glue thumb to arm code */\r\n    *(.eh_frame)\r\n\r\n    KEEP (*(.init))\r\n    KEEP (*(.fini))\r\n\r\n    . = ALIGN(4);\r\n    _etext = .;        /* define a global symbols at end of code */\r\n  } >ROM\r\n\r\n  /* Constant data into ROM memory*/\r\n  .rodata :\r\n  {\r\n    . = ALIGN(4);\r\n    *(.rodata)         /* .rodata sections (constants, strings, etc.) */\r\n    *(.rodata*)        /* .rodata* sections (constants, strings, etc.) */\r\n    . = ALIGN(4);\r\n  } >ROM\r\n\r\n  .ARM.extab   : { \r\n  \t. = ALIGN(4);\r\n  \t*(.ARM.extab* .gnu.linkonce.armextab.*)\r\n  \t. = ALIGN(4);\r\n  } >ROM\r\n  \r\n  .ARM : {\r\n    . = ALIGN(4);\r\n    __exidx_start = .;\r\n    *(.ARM.exidx*)\r\n    __exidx_end = .;\r\n    . = ALIGN(4);\r\n  } >ROM\r\n\r\n  .preinit_array     :\r\n  {\r\n    . = ALIGN(4);\r\n    PROVIDE_HIDDEN (__preinit_array_start = .);\r\n    KEEP (*(.preinit_array*))\r\n    PROVIDE_HIDDEN (__preinit_array_end = .);\r\n    . = ALIGN(4);\r\n  } >ROM\r\n  \r\n  .init_array :\r\n  {\r\n    . = ALIGN(4);\r\n    PROVIDE_HIDDEN (__init_array_start = .);\r\n    KEEP (*(SORT(.init_array.*)))\r\n    KEEP (*(.init_array*))\r\n    PROVIDE_HIDDEN (__init_array_end = .);\r\n    . = ALIGN(4);\r\n  } >ROM\r\n  \r\n  .fini_array :\r\n  {\r\n    . = ALIGN(4);\r\n    PROVIDE_HIDDEN (__fini_array_start = .);\r\n    KEEP (*(SORT(.fini_array.*)))\r\n    KEEP (*(.fini_array*))\r\n    PROVIDE_HIDDEN (__fini_array_end = .);\r\n    . = ALIGN(4);\r\n  } >ROM\r\n\r\n  /* Used by the startup to initialize data */\r\n  _sidata = LOADADDR(.data);\r\n\r\n  /* Initialized data sections into RAM memory */\r\n  .data : \r\n  {\r\n    . = ALIGN(4);\r\n    _sdata = .;        /* create a global symbol at data start */\r\n    *(.data)           /* .data sections */\r\n    *(.data*)          /* .data* sections */\r\n\r\n    . = ALIGN(4);\r\n    _edata = .;        /* define a global symbol at data end */\r\n  } >RAM AT> ROM\r\n\r\n\r\n  .bss :\r\n  {\r\n    /* Uninitialized data section into RAM memory */\r\n    . = ALIGN(4);\r\n    /* This is used by the startup in order to initialize the .bss secion */\r\n    _sbss = .;         /* define a global symbol at bss start */\r\n    __bss_start__ = _sbss;\r\n    *(.bss)\r\n    *(.bss*)\r\n    *(COMMON)\r\n\r\n    . = ALIGN(4);\r\n    _ebss = .;         /* define a global symbol at bss end */\r\n    __bss_end__ = _ebss;\r\n  } >RAM\r\n\r\n  /* User_heap_stack section, used to check that there is enough RAM left */\r\n  ._user_heap_stack :\r\n  {\r\n    . = ALIGN(8);\r\n    PROVIDE ( end = . );\r\n    PROVIDE ( _end = . );\r\n    . = . + _Min_Heap_Size;\r\n    . = . + _Min_Stack_Size;\r\n    . = ALIGN(8);\r\n  } >RAM\r\n\r\n  \r\n\r\n  /* Remove information from the compiler libraries */\r\n  /DISCARD/ :\r\n  {\r\n    libc.a ( * )\r\n    libm.a ( * )\r\n    libgcc.a ( * )\r\n  }\r\n\r\n  .ARM.attributes 0 : { *(.ARM.attributes) }\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/stm32f1xx_hal_msp.c",
    "content": "#include \"Pins.h\"\r\n#include \"Setup.h\"\r\n#include \"stm32f1xx_hal.h\"\r\n/**\r\n * Initializes the Global MSP.\r\n */\r\nvoid HAL_MspInit(void) {\r\n  __HAL_RCC_AFIO_CLK_ENABLE();\r\n\r\n  // HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);\r\n\r\n  /* System interrupt init*/\r\n  /* MemoryManagement_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(MemoryManagement_IRQn, 0, 0);\r\n  /* BusFault_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(BusFault_IRQn, 0, 0);\r\n  /* UsageFault_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(UsageFault_IRQn, 0, 0);\r\n  /* SVCall_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(SVCall_IRQn, 0, 0);\r\n  /* DebugMonitor_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(DebugMonitor_IRQn, 0, 0);\r\n  /* PendSV_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0);\r\n  /* SysTick_IRQn interrupt configuration */\r\n  HAL_NVIC_SetPriority(SysTick_IRQn, 15, 0);\r\n}\r\n\r\nvoid HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) {\r\n\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  if (hadc->Instance == ADC1) {\r\n    __HAL_RCC_ADC1_CLK_ENABLE();\r\n\r\n    /* ADC1 DMA Init */\r\n    /* ADC1 Init */\r\n    hdma_adc1.Instance                 = DMA1_Channel1;\r\n    hdma_adc1.Init.Direction           = DMA_PERIPH_TO_MEMORY;\r\n    hdma_adc1.Init.PeriphInc           = DMA_PINC_DISABLE;\r\n    hdma_adc1.Init.MemInc              = DMA_MINC_ENABLE;\r\n    hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;\r\n    hdma_adc1.Init.MemDataAlignment    = DMA_MDATAALIGN_HALFWORD;\r\n    hdma_adc1.Init.Mode                = DMA_CIRCULAR;\r\n    hdma_adc1.Init.Priority            = DMA_PRIORITY_MEDIUM;\r\n    HAL_DMA_Init(&hdma_adc1);\r\n\r\n    __HAL_LINKDMA(hadc, DMA_Handle, hdma_adc1);\r\n\r\n    /* ADC1 interrupt Init */\r\n    HAL_NVIC_SetPriority(ADC1_2_IRQn, 15, 0);\r\n    HAL_NVIC_EnableIRQ(ADC1_2_IRQn);\r\n  } else {\r\n    __HAL_RCC_ADC2_CLK_ENABLE();\r\n\r\n    /**ADC2 GPIO Configuration\r\n     PB0     ------> ADC2_IN8\r\n     PB1     ------> ADC2_IN9\r\n     */\r\n\r\n    GPIO_InitStruct.Pin  = TIP_TEMP_Pin;\r\n    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;\r\n    HAL_GPIO_Init(TIP_TEMP_GPIO_Port, &GPIO_InitStruct);\r\n#ifdef TMP36_INPUT_Pin\r\n    GPIO_InitStruct.Pin  = TMP36_INPUT_Pin;\r\n    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;\r\n    HAL_GPIO_Init(TMP36_INPUT_GPIO_Port, &GPIO_InitStruct);\r\n#endif\r\n    GPIO_InitStruct.Pin  = VIN_Pin;\r\n    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;\r\n    HAL_GPIO_Init(VIN_GPIO_Port, &GPIO_InitStruct);\r\n\r\n    /* ADC2 interrupt Init */\r\n    HAL_NVIC_SetPriority(ADC1_2_IRQn, 15, 0);\r\n    HAL_NVIC_EnableIRQ(ADC1_2_IRQn);\r\n  }\r\n}\r\n\r\nvoid HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim_base) {\r\n  if (htim_base->Instance == TIM4) {\r\n    /* Peripheral clock enable */\r\n    __HAL_RCC_TIM4_CLK_ENABLE();\r\n  }\r\n  if (htim_base->Instance == TIM2) {\r\n    /* Peripheral clock enable */\r\n    __HAL_RCC_TIM2_CLK_ENABLE();\r\n  }\r\n}\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/stm32f1xx_hal_timebase_TIM.c",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_timebase_TIM.c\r\n * @brief   HAL time base based on the hardware TIM.\r\n ******************************************************************************\r\n * This notice applies to any and all portions of this file\r\n * that are not between comment pairs USER CODE BEGIN and\r\n * USER CODE END. Other portions of this file, whether\r\n * inserted by the user or by software development tools\r\n * are owned by their respective copyright owners.\r\n *\r\n * Copyright (c) 2017 STMicroelectronics International N.V.\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted, provided that the following conditions are met:\r\n *\r\n * 1. Redistribution of source code must retain the above copyright notice,\r\n *    this list of conditions and the following disclaimer.\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n *    this list of conditions and the following disclaimer in the documentation\r\n *    and/or other materials provided with the distribution.\r\n * 3. Neither the name of STMicroelectronics nor the names of other\r\n *    contributors to this software may be used to endorse or promote products\r\n *    derived from this software without specific written permission.\r\n * 4. This software, including modifications and/or derivative works of this\r\n *    software, must execute solely and exclusively on microcontroller or\r\n *    microprocessor devices manufactured by or for STMicroelectronics.\r\n * 5. Redistribution and use of this software other than as permitted under\r\n *    this license is void and will automatically terminate your rights under\r\n *    this license.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT\r\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\n * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY\r\n * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT\r\n * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r\n * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r\n * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"stm32f1xx_hal.h\"\r\n#include \"stm32f1xx_hal_tim.h\"\r\n/** @addtogroup STM32F7xx_HAL_Examples\r\n * @{\r\n */\r\n\r\n/** @addtogroup HAL_TimeBase\r\n * @{\r\n */\r\n\r\n/* Private typedef -----------------------------------------------------------*/\r\n/* Private define ------------------------------------------------------------*/\r\n/* Private macro -------------------------------------------------------------*/\r\n/* Private variables ---------------------------------------------------------*/\r\nTIM_HandleTypeDef htim1;\r\nuint32_t          uwIncrementState = 0;\r\n/* Private function prototypes -----------------------------------------------*/\r\n/* Private functions ---------------------------------------------------------*/\r\n\r\n/**\r\n * @brief  This function configures the TIM1 as a time base source.\r\n *         The time source is configured  to have 1ms time base with a dedicated\r\n *         Tick interrupt priority.\r\n * @note   This function is called  automatically at the beginning of program after\r\n *         reset by HAL_Init() or at any time when clock is configured, by HAL_RCC_ClockConfig().\r\n * @param  TickPriority: Tick interrupt priorty.\r\n * @retval HAL status\r\n */\r\nHAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {\r\n  RCC_ClkInitTypeDef clkconfig;\r\n  uint32_t           uwTimclock       = 0;\r\n  uint32_t           uwPrescalerValue = 0;\r\n  uint32_t           pFLatency;\r\n\r\n  /*Configure the TIM1 IRQ priority */\r\n  HAL_NVIC_SetPriority(TIM1_UP_IRQn, TickPriority, 0);\r\n\r\n  /* Enable the TIM1 global Interrupt */\r\n  HAL_NVIC_EnableIRQ(TIM1_UP_IRQn);\r\n\r\n  /* Enable TIM1 clock */\r\n  __HAL_RCC_TIM1_CLK_ENABLE();\r\n\r\n  /* Get clock configuration */\r\n  HAL_RCC_GetClockConfig(&clkconfig, &pFLatency);\r\n\r\n  /* Compute TIM1 clock */\r\n  uwTimclock = HAL_RCC_GetPCLK2Freq();\r\n\r\n  /* Compute the prescaler value to have TIM1 counter clock equal to 1MHz */\r\n  uwPrescalerValue = (uint32_t)((uwTimclock / 1000000) - 1);\r\n\r\n  /* Initialize TIM1 */\r\n  htim1.Instance = TIM1;\r\n\r\n  /* Initialize TIMx peripheral as follow:\r\n   + Period = [(TIM1CLK/1000) - 1]. to have a (1/1000) s time base.\r\n   + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.\r\n   + ClockDivision = 0\r\n   + Counter direction = Up\r\n   */\r\n  htim1.Init.Period        = (1000000 / 1000) - 1;\r\n  htim1.Init.Prescaler     = uwPrescalerValue;\r\n  htim1.Init.ClockDivision = 0;\r\n  htim1.Init.CounterMode   = TIM_COUNTERMODE_UP;\r\n  if (HAL_TIM_Base_Init(&htim1) == HAL_OK) {\r\n    /* Start the TIM time Base generation in interrupt mode */\r\n    return HAL_TIM_Base_Start_IT(&htim1);\r\n  }\r\n\r\n  /* Return function status */\r\n  return HAL_ERROR;\r\n}\r\n\r\n/**\r\n * @brief  Suspend Tick increment.\r\n * @note   Disable the tick increment by disabling TIM1 update interrupt.\r\n * @param  None\r\n * @retval None\r\n */\r\nvoid HAL_SuspendTick(void) {\r\n  /* Disable TIM1 update Interrupt */\r\n  __HAL_TIM_DISABLE_IT(&htim1, TIM_IT_UPDATE);\r\n}\r\n\r\n/**\r\n * @brief  Resume Tick increment.\r\n * @note   Enable the tick increment by Enabling TIM1 update interrupt.\r\n * @param  None\r\n * @retval None\r\n */\r\nvoid HAL_ResumeTick(void) {\r\n  /* Enable TIM1 Update interrupt */\r\n  __HAL_TIM_ENABLE_IT(&htim1, TIM_IT_UPDATE);\r\n}\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/stm32f1xx_it.c",
    "content": "// This is the stock standard STM interrupt file full of handlers\r\n#include \"stm32f1xx_it.h\"\r\n#include \"Setup.h\"\r\n#include \"cmsis_os.h\"\r\n#include \"stm32f1xx.h\"\r\n#include \"stm32f1xx_hal.h\"\r\n\r\nextern TIM_HandleTypeDef htim1; // used for the systick\r\n\r\n/******************************************************************************/\r\n/*            Cortex-M3 Processor Interruption and Exception Handlers         */\r\n/******************************************************************************/\r\n\r\n// Systick is used by FreeRTOS tick\r\nvoid SysTick_Handler(void) { osSystickHandler(); }\r\n\r\n/******************************************************************************/\r\n/* STM32F1xx Peripheral Interrupt Handlers                                    */\r\n/* Add here the Interrupt Handlers for the used peripherals.                  */\r\n/* For the available peripheral interrupt handler names,                      */\r\n/* please refer to the startup file.\t\t\t\t\t                      */\r\n/******************************************************************************/\r\n\r\n// DMA used to move the ADC readings into system ram\r\nvoid DMA1_Channel1_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_adc1); }\r\n// ADC interrupt used for DMA\r\nvoid ADC1_2_IRQHandler(void) { HAL_ADC_IRQHandler(&hadc1); }\r\n\r\n// Timer 1 has overflowed, used for HAL ticks\r\nvoid TIM1_UP_IRQHandler(void) { HAL_TIM_IRQHandler(&htim1); }\r\n\r\n// Timer 2 is used for co-ordination of PWM & ADC\r\nvoid TIM4_IRQHandler(void) { HAL_TIM_IRQHandler(&htim4); }\r\nvoid TIM2_IRQHandler(void) { HAL_TIM_IRQHandler(&htim2); }\r\n\r\nvoid EXTI9_5_IRQHandler(void) { HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9); }\r\n"
  },
  {
    "path": "source/Core/BSP/Sequre/system_stm32f1xx.c",
    "content": "// This file was automatically generated by the STM Cube software\r\n// And as such, is BSD licneced from STM\r\n#include \"stm32f1xx.h\"\r\n\r\n#if !defined(HSI_VALUE)\r\n#define HSI_VALUE                                                                                                                                                                                      \\\r\n  8000000U /*!< Default value of the Internal oscillator in Hz.                                                                                                                                        \\\r\n                This value can be provided and adapted by the user application. */\r\n#endif     /* HSI_VALUE */\r\n\r\n/*!< Uncomment the following line if you need to use external SRAM  */\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/* #define DATA_IN_ExtSRAM */\r\n#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */\r\n#ifndef VECT_TAB_OFFSET\r\n#error VECT_TAB_OFFSET\r\n#endif\r\n/*******************************************************************************\r\n *  Clock Definitions\r\n *******************************************************************************/\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\nuint32_t SystemCoreClock = 24000000U; /*!< System Clock Frequency (Core Clock) */\r\n#else                                 /*!< HSI Selected as System Clock source */\r\nuint32_t SystemCoreClock = 64000000U; /*!< System Clock Frequency (Core Clock) */\r\n#endif\r\n\r\nconst uint8_t AHBPrescTable[16U] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};\r\nconst uint8_t APBPrescTable[8U]  = {0, 0, 0, 0, 1, 2, 3, 4};\r\n\r\n/**\r\n * @brief  Setup the microcontroller system\r\n *         Initialize the Embedded Flash Interface, the PLL and update the\r\n *         SystemCoreClock variable.\r\n * @note   This function should be used only after reset.\r\n * @param  None\r\n * @retval None\r\n */\r\nvoid SystemInit(void) {\r\n  /* Reset the RCC clock configuration to the default reset state(for debug purpose) */\r\n  /* Set HSION bit */\r\n  RCC->CR |= 0x00000001U;\r\n\r\n  /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */\r\n#if !defined(STM32F105xC) && !defined(STM32F107xC)\r\n  RCC->CFGR &= 0xF8FF0000U;\r\n#else\r\n  RCC->CFGR &= 0xF0FF0000U;\r\n#endif /* STM32F105xC */\r\n\r\n  /* Reset HSEON, CSSON and PLLON bits */\r\n  RCC->CR &= 0xFEF6FFFFU;\r\n\r\n  /* Reset HSEBYP bit */\r\n  RCC->CR &= 0xFFFBFFFFU;\r\n\r\n  /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */\r\n  RCC->CFGR &= 0xFF80FFFFU;\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  /* Reset PLL2ON and PLL3ON bits */\r\n  RCC->CR &= 0xEBFFFFFFU;\r\n\r\n  /* Disable all interrupts and clear pending bits  */\r\n  RCC->CIR = 0x00FF0000U;\r\n\r\n  /* Reset CFGR2 register */\r\n  RCC->CFGR2 = 0x00000000U;\r\n#elif defined(STM32F100xB) || defined(STM32F100xE)\r\n  /* Disable all interrupts and clear pending bits  */\r\n  RCC->CIR = 0x009F0000U;\r\n\r\n  /* Reset CFGR2 register */\r\n  RCC->CFGR2 = 0x00000000U;\r\n#else\r\n  /* Disable all interrupts and clear pending bits  */\r\n  RCC->CIR = 0x009F0000U;\r\n#endif /* STM32F105xC */\r\n\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)\r\n#ifdef DATA_IN_ExtSRAM\r\n  SystemInit_ExtMemCtl();\r\n#endif /* DATA_IN_ExtSRAM */\r\n#endif\r\n\r\n#ifdef VECT_TAB_SRAM\r\n  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */\r\n#else\r\n  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief  Update SystemCoreClock variable according to Clock Register Values.\r\n *         The SystemCoreClock variable contains the core clock (HCLK), it can\r\n *         be used by the user application to setup the SysTick timer or configure\r\n *         other parameters.\r\n *\r\n * @note   Each time the core clock (HCLK) changes, this function must be called\r\n *         to update SystemCoreClock variable value. Otherwise, any configuration\r\n *         based on this variable will be incorrect.\r\n *\r\n * @note   - The system frequency computed by this function is not the real\r\n *           frequency in the chip. It is calculated based on the predefined\r\n *           constant and the selected clock source:\r\n *\r\n *           - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)\r\n *\r\n *           - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)\r\n *\r\n *           - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)\r\n *             or HSI_VALUE(*) multiplied by the PLL factors.\r\n *\r\n *         (*) HSI_VALUE is a constant defined in stm32f1xx.h file (default value\r\n *             8 MHz) but the real value may vary depending on the variations\r\n *             in voltage and temperature.\r\n *\r\n *         (**) HSE_VALUE is a constant defined in stm32f1xx.h file (default value\r\n *              8 MHz or 25 MHz, depending on the product used), user has to ensure\r\n *              that HSE_VALUE is same as the real frequency of the crystal used.\r\n *              Otherwise, this function may have wrong result.\r\n *\r\n *         - The result of this function could be not correct when using fractional\r\n *           value for HSE crystal.\r\n * @param  None\r\n * @retval None\r\n */\r\nvoid SystemCoreClockUpdate(void) {\r\n  uint32_t tmp = 0U, pllmull = 0U, pllsource = 0U;\r\n\r\n#if defined(STM32F105xC) || defined(STM32F107xC)\r\n  uint32_t prediv1source = 0U, prediv1factor = 0U, prediv2factor = 0U, pll2mull = 0U;\r\n#endif /* STM32F105xC */\r\n\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n  uint32_t prediv1factor = 0U;\r\n#endif /* STM32F100xB or STM32F100xE */\r\n\r\n  /* Get SYSCLK source -------------------------------------------------------*/\r\n  tmp = RCC->CFGR & RCC_CFGR_SWS;\r\n\r\n  switch (tmp) {\r\n  case 0x00U: /* HSI used as system clock */\r\n    SystemCoreClock = HSI_VALUE;\r\n    break;\r\n  case 0x04U: /* HSE used as system clock */\r\n    SystemCoreClock = HSE_VALUE;\r\n    break;\r\n  case 0x08U: /* PLL used as system clock */\r\n\r\n    /* Get PLL clock source and multiplication factor ----------------------*/\r\n    pllmull   = RCC->CFGR & RCC_CFGR_PLLMULL;\r\n    pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;\r\n\r\n#if !defined(STM32F105xC) && !defined(STM32F107xC)\r\n    pllmull = (pllmull >> 18U) + 2U;\r\n\r\n    if (pllsource == 0x00U) {\r\n      /* HSI oscillator clock divided by 2 selected as PLL clock entry */\r\n      SystemCoreClock = (HSI_VALUE >> 1U) * pllmull;\r\n    } else {\r\n#if defined(STM32F100xB) || defined(STM32F100xE)\r\n      prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U;\r\n      /* HSE oscillator clock selected as PREDIV1 clock entry */\r\n      SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull;\r\n#else\r\n      /* HSE selected as PLL clock entry */\r\n      if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET) { /* HSE oscillator clock divided by 2 */\r\n        SystemCoreClock = (HSE_VALUE >> 1U) * pllmull;\r\n      } else {\r\n        SystemCoreClock = HSE_VALUE * pllmull;\r\n      }\r\n#endif\r\n    }\r\n#else\r\n    pllmull = pllmull >> 18U;\r\n\r\n    if (pllmull != 0x0DU) {\r\n      pllmull += 2U;\r\n    } else { /* PLL multiplication factor = PLL input clock * 6.5 */\r\n      pllmull = 13U / 2U;\r\n    }\r\n\r\n    if (pllsource == 0x00U) {\r\n      /* HSI oscillator clock divided by 2 selected as PLL clock entry */\r\n      SystemCoreClock = (HSI_VALUE >> 1U) * pllmull;\r\n    } else { /* PREDIV1 selected as PLL clock entry */\r\n\r\n      /* Get PREDIV1 clock source and division factor */\r\n      prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC;\r\n      prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U;\r\n\r\n      if (prediv1source == 0U) {\r\n        /* HSE oscillator clock selected as PREDIV1 clock entry */\r\n        SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull;\r\n      } else { /* PLL2 clock selected as PREDIV1 clock entry */\r\n\r\n        /* Get PREDIV2 division factor and PLL2 multiplication factor */\r\n        prediv2factor   = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4U) + 1U;\r\n        pll2mull        = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8U) + 2U;\r\n        SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull;\r\n      }\r\n    }\r\n#endif /* STM32F105xC */\r\n    break;\r\n\r\n  default:\r\n    SystemCoreClock = HSI_VALUE;\r\n    break;\r\n  }\r\n\r\n  /* Compute HCLK clock frequency ----------------*/\r\n  /* Get HCLK prescaler */\r\n  tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4U)];\r\n  /* HCLK clock frequency */\r\n  SystemCoreClock >>= tmp;\r\n}\r\n\r\n#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)\r\n/**\r\n * @brief  Setup the external memory controller. Called in startup_stm32f1xx.s\r\n *          before jump to __main\r\n * @param  None\r\n * @retval None\r\n */\r\n#ifdef DATA_IN_ExtSRAM\r\n/**\r\n * @brief  Setup the external memory controller.\r\n *         Called in startup_stm32f1xx_xx.s/.c before jump to main.\r\n *         This function configures the external SRAM mounted on STM3210E-EVAL\r\n *         board (STM32 High density devices). This SRAM will be used as program\r\n *         data memory (including heap and stack).\r\n * @param  None\r\n * @retval None\r\n */\r\nvoid SystemInit_ExtMemCtl(void) {\r\n  __IO uint32_t tmpreg;\r\n  /*!< FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is\r\n    required, then adjust the Register Addresses */\r\n\r\n  /* Enable FSMC clock */\r\n  RCC->AHBENR = 0x00000114U;\r\n\r\n  /* Delay after an RCC peripheral clock enabling */\r\n  tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN);\r\n\r\n  /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */\r\n  RCC->APB2ENR = 0x000001E0U;\r\n\r\n  /* Delay after an RCC peripheral clock enabling */\r\n  tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN);\r\n\r\n  (void)(tmpreg);\r\n\r\n  /* ---------------  SRAM Data lines, NOE and NWE configuration ---------------*/\r\n  /*----------------  SRAM Address lines configuration -------------------------*/\r\n  /*----------------  NOE and NWE configuration --------------------------------*/\r\n  /*----------------  NE3 configuration ----------------------------------------*/\r\n  /*----------------  NBL0, NBL1 configuration ---------------------------------*/\r\n\r\n  GPIOD->CRL = 0x44BB44BBU;\r\n  GPIOD->CRH = 0xBBBBBBBBU;\r\n\r\n  GPIOE->CRL = 0xB44444BBU;\r\n  GPIOE->CRH = 0xBBBBBBBBU;\r\n\r\n  GPIOF->CRL = 0x44BBBBBBU;\r\n  GPIOF->CRH = 0xBBBB4444U;\r\n\r\n  GPIOG->CRL = 0x44BBBBBBU;\r\n  GPIOG->CRH = 0x444B4B44U;\r\n\r\n  /*----------------  FSMC Configuration ---------------------------------------*/\r\n  /*----------------  Enable FSMC Bank1_SRAM Bank ------------------------------*/\r\n\r\n  FSMC_Bank1->BTCR[4U] = 0x00001091U;\r\n  FSMC_Bank1->BTCR[5U] = 0x00110212U;\r\n}\r\n#endif /* DATA_IN_ExtSRAM */\r\n#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n\r\n/**\r\n * @}\r\n */\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/Drivers/BMA223.cpp",
    "content": "/*\r\n * BMA223.cpp\r\n *\r\n *  Created on: 18 Sep. 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"accelerometers_common.h\"\r\n#include <BMA223.hpp>\r\n#include <array>\r\n\r\nbool BMA223::detect() {\r\n  if (ACCEL_I2C_CLASS::probe(BMA223_ADDRESS)) {\r\n    // Read chip id to ensure its not an address collision\r\n    uint8_t id = 0;\r\n    if (ACCEL_I2C_CLASS::Mem_Read(BMA223_ADDRESS, BMA223_BGW_CHIPID, &id, 1)) {\r\n      return id == 0b11111000;\r\n    }\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\nstatic const ACCEL_I2C_CLASS::I2C_REG i2c_registers[] = {\r\n    //\r\n    //\r\n    {    BMA223_PMU_RANGE, 0b00000011, 0}, // 2G range\r\n    {       BMA223_PMU_BW, 0b00001101, 0}, // 250Hz filter\r\n    {      BMA223_PMU_LPW, 0b00000000, 0}, // Full power\r\n    {     BMA223_ACCD_HBW, 0b00000000, 0}, // filtered data out\r\n    { BMA223_INT_OUT_CTRL, 0b00001010, 0}, // interrupt active low and OD to get it hi-z\r\n    {BMA223_INT_RST_LATCH, 0b10000000, 0}, // interrupt active low and OD to get it hi-z\r\n    {     BMA223_INT_EN_0, 0b01000000, 0}, // Enable orientation\r\n    {        BMA223_INT_A, 0b00100111, 0}, // Setup orientation detection\r\n\r\n    //\r\n};\r\nbool BMA223::initalize() {\r\n  // Setup acceleration readings\r\n  // 2G range\r\n  // bandwidth = 250Hz\r\n  // High pass filter on (Slow compensation)\r\n  // Turn off IRQ output pins\r\n  // Orientation recognition in symmetrical mode\r\n  // Hysteresis is set to ~ 16 counts\r\n  // Theta blocking is set to 0b10\r\n\r\n  return ACCEL_I2C_CLASS::writeRegistersBulk(BMA223_ADDRESS, i2c_registers, sizeof(i2c_registers) / sizeof(i2c_registers[0]));\r\n}\r\n\r\nvoid BMA223::getAxisReadings(int16_t &x, int16_t &y, int16_t &z) {\r\n  // The BMA is odd in that its output data width is only 8 bits\r\n  // And yet there are MSB and LSB registers _sigh_.\r\n  uint8_t sensorData[6] = {0, 0, 0, 0, 0, 0};\r\n\r\n  if (ACCEL_I2C_CLASS::Mem_Read(BMA223_ADDRESS, BMA223_ACCD_X_LSB, sensorData, 6) == false) {\r\n    x = y = z = 0;\r\n    return;\r\n  }\r\n  // Shift 6 to make its range ~= the other accelerometers\r\n  x = sensorData[1] << 6;\r\n  y = sensorData[3] << 6;\r\n  z = sensorData[5] << 6;\r\n}\r\n"
  },
  {
    "path": "source/Core/Drivers/BMA223.hpp",
    "content": "/*\r\n * BMA223.hpp\r\n *\r\n *  Created on: 18 Sep. 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef CORE_DRIVERS_BMA223_HPP_\r\n#define CORE_DRIVERS_BMA223_HPP_\r\n#include \"BMA223_defines.h\"\r\n#include \"BSP.h\"\r\n#include \"accelerometers_common.h\"\r\n#include \"I2C_Wrapper.hpp\"\r\n#include \"accelerometers_common.h\"\r\n\r\n\r\nclass BMA223 {\r\npublic:\r\n  static bool detect();\r\n  static bool initalize();\r\n  // 1 = rh, 2,=lh, 8=flat\r\n  static Orientation getOrientation() {\r\n    uint8_t val = ACCEL_I2C_CLASS::I2C_RegisterRead(BMA223_ADDRESS, BMA223_INT_STATUS_3);\r\n    val >>= 4; // we dont need high values\r\n    val &= 0b11;\r\n    if (val & 0b10) {\r\n      return ORIENTATION_FLAT;\r\n    } else {\r\n      return static_cast<Orientation>(!val);\r\n    }\r\n    // 0 = rhs\r\n    // 1 =lhs\r\n    // 2 & 3 == ignore\r\n  }\r\n  static void getAxisReadings(int16_t &x, int16_t &y, int16_t &z);\r\n\r\nprivate:\r\n};\r\n\r\n#endif /* CORE_DRIVERS_BMA223_HPP_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/BMA223_defines.h",
    "content": "/*\r\n * BMA223_defines.h\r\n *\r\n *  Created on: 18 Sep. 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef CORE_DRIVERS_BMA223_DEFINES_H_\r\n#define CORE_DRIVERS_BMA223_DEFINES_H_\r\n\r\n#define BMA223_ADDRESS       0x18 << 1\r\n#define BMA223_BGW_CHIPID    0x00\r\n#define BMA223_ACCD_X_LSB    0x02\r\n#define BMA223_ACCD_X_MSB    0x03\r\n#define BMA223_ACCD_Y_LSB    0x04\r\n#define BMA223_ACCD_Y_MSB    0x05\r\n#define BMA223_ACCD_Z_LSB    0x06\r\n#define BMA223_ACCD_Z_MSB    0x07\r\n#define BMA223_ACCD_TEMP     0x08\r\n#define BMA223_INT_STATUS_0  0x09\r\n#define BMA223_INT_STATUS_1  0x0A\r\n#define BMA223_INT_STATUS_2  0x0B\r\n#define BMA223_INT_STATUS_3  0x0C\r\n#define BMA223_FIFO_STATUS   0x0E\r\n#define BMA223_PMU_RANGE     0x0F\r\n#define BMA223_PMU_BW        0x10\r\n#define BMA223_PMU_LPW       0x11\r\n#define BMA223_PMU_LOW_POWER 0x012\r\n#define BMA223_ACCD_HBW      0x13\r\n#define BMA223_BGW_SOFTRESET 0x14\r\n#define BMA223_INT_EN_0      0x16\r\n#define BMA223_INT_EN_1      0x17\r\n#define BMA223_INT_EN_2      0x18\r\n#define BMA223_INT_MAP_0     0x19\r\n#define BMA223_INT_MAP_1     0x1A\r\n#define BMA223_INT_MAP_2     0x1B\r\n#define BMA223_INT_SRC       0x1E\r\n#define BMA223_INT_OUT_CTRL  0x20\r\n#define BMA223_INT_RST_LATCH 0x21\r\n#define BMA223_INT_0         0x22\r\n#define BMA223_INT_1         0x23\r\n#define BMA223_INT_2         0x24\r\n#define BMA223_INT_3         0x25\r\n#define BMA223_INT_4         0x26\r\n#define BMA223_INT_5         0x27\r\n#define BMA223_INT_6         0x28\r\n#define BMA223_INT_7         0x29\r\n#define BMA223_INT_8         0x2A\r\n#define BMA223_INT_9         0x2B\r\n#define BMA223_INT_A         0x2C\r\n#define BMA223_INT_B         0x2D\r\n#define BMA223_INT_C         0x2E\r\n#define BMA223_INT_D         0x2F\r\n#define BMA223_FIFO_CONFIG_0 0x30\r\n#define BMA223_PMU_SELF_TEST 0x32\r\n#define BMA223_TRIM_NVM_CTRL 0x33\r\n#define BMA223_BGW_SPI3_WDT  0x34\r\n#define BMA223_OFC_CTRL      0x36\r\n#define BMA223_OFC_SETTING   0x37\r\n#define BMA223_OFC_OFFSET_X  0x38\r\n#define BMA223_OFC_OFFSET_Y  0x39\r\n#define BMA223_OFC_OFFSET_Z  0x3A\r\n#define BMA223_TRIM_GP0      0x3B\r\n#define BMA223_TRIM_GP1      0x3C\r\n#define BMA223_FIFO_CONFIG_1 0x3E\r\n#define BMA223_FIFO_DATA     0x3F\r\n\r\n#endif /* CORE_DRIVERS_BMA223_DEFINES_H_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/BootLogo.cpp",
    "content": "#include \"BootLogo.h\"\n#include \"BSP.h\"\n#include \"Buttons.hpp\"\n#include \"OLED.hpp\"\n#include \"Settings.h\"\n#include \"cmsis_os.h\"\n\n#define LOGO_PAGE_LENGTH 1024\n\nvoid delay() {\n  if (getSettingValue(SettingsOptions::LOGOTime) >= logoMode_t::ONETIME) {\n    waitForButtonPress();\n  } else {\n    waitForButtonPressOrTimeout(TICKS_SECOND * getSettingValue(SettingsOptions::LOGOTime));\n  }\n}\n\nvoid BootLogo::handleShowingLogo(const uint8_t *ptrLogoArea) {\n  OLED::clearScreen();\n  // Read the first few bytes and figure out what format we are looking at\n  if (OLD_LOGO_HEADER_VALUE == *(reinterpret_cast<const uint32_t *>(ptrLogoArea))) {\n    showOldFormat(ptrLogoArea);\n  } else if (ptrLogoArea[0] == 0xAA) {\n    showNewFormat(ptrLogoArea + 1);\n  }\n\n  OLED::clearScreen();\n}\n\nvoid BootLogo::showOldFormat(const uint8_t *ptrLogoArea) {\n#ifdef OLED_128x32\n  // Draw in middle\n  OLED::drawAreaSwapped(16, 8, 96, 16, (uint8_t *)(ptrLogoArea + 4));\n\n#else\n  OLED::drawAreaSwapped(0, 0, 96, 16, (uint8_t *)(ptrLogoArea + 4));\n\n#endif\n  OLED::refresh();\n  // Delay here with static logo until a button is pressed or its been the amount of seconds set by the user\n  delay();\n}\n\nvoid BootLogo::showNewFormat(const uint8_t *ptrLogoArea) {\n  if (getSettingValue(SettingsOptions::LOGOTime) == logoMode_t::SKIP) {\n    return;\n  }\n\n  // New logo format (a) fixes long standing byte swap quirk and (b) supports animation\n  uint8_t interFrameDelay = ptrLogoArea[0];\n  OLED::clearScreen();\n\n  // Now draw in the frames\n  int position = 1;\n  while (getButtonState() == BUTTON_NONE) {\n    int len = (showNewFrame(ptrLogoArea + position));\n    OLED::refresh();\n    position += len;\n\n    if (interFrameDelay) {\n      osDelay(interFrameDelay * 4);\n    }\n\n    // 1024 less the header type byte and the inter-frame-delay\n    if (getSettingValue(SettingsOptions::LOGOTime) && (position >= 1022 || len == 0)) {\n      // Animated logo stops here ...\n      if (getSettingValue(SettingsOptions::LOGOTime) == logoMode_t::INFINITY) {\n        // ... but if it's infinite logo setting then keep it rolling over again until a button is pressed\n        osDelay(4 * TICKS_100MS);\n        OLED::clearScreen();\n        position = 1;\n        continue;\n      }\n    } else {\n      // Animation in progress so jumping to the next frame\n      continue;\n    }\n\n    // Static logo case ends up right here, so delay until a button is pressed or its been the amount of seconds set by the user\n    delay();\n    return;\n  }\n}\n\nint BootLogo::showNewFrame(const uint8_t *ptrLogoArea) {\n  uint8_t length = ptrLogoArea[0];\n  switch (length) {\n  case 0:\n    // End\n    return 0;\n    break;\n  case 0xFE:\n    return 1;\n    break;\n  case 0xFF:\n// Full frame update\n#ifdef OLED_128x32\n    OLED::drawArea(16, 8, 96, 16, ptrLogoArea + 1);\n#else\n    OLED::drawArea(0, 0, 96, 16, ptrLogoArea + 1);\n#endif\n    length = 96;\n    break;\n  default:\n    length /= 2;\n    // Draw length patches\n    for (int p = 0; p < length; p++) {\n      uint8_t index = ptrLogoArea[1 + (p * 2)];\n      uint8_t value = ptrLogoArea[2 + (p * 2)];\n#ifdef OLED_128x32\n      OLED::drawArea(16 + (index % 96), index >= 96 ? 16 : 8, 1, 8, &value);\n#else\n      OLED::drawArea(index % 96, index >= 96 ? 8 : 0, 1, 8, &value);\n#endif\n    }\n  }\n\n  OLED::refresh();\n  return (length * 2) + 1;\n}\n"
  },
  {
    "path": "source/Core/Drivers/BootLogo.h",
    "content": "#ifndef DRIVERS_BOOTLOGO_H_\n#define DRIVERS_BOOTLOGO_H_\n\n// Wrapper for handling showing a bootlogo\n#include <stdint.h>\n#define OLD_LOGO_HEADER_VALUE 0xF00DAA55\nclass BootLogo {\npublic:\n  static void handleShowingLogo(const uint8_t *ptrLogoArea);\n\nprivate:\n  static void showOldFormat(const uint8_t *ptrLogoArea);\n  static void showNewFormat(const uint8_t *ptrLogoArea);\n  static int  showNewFrame(const uint8_t *ptrLogoArea);\n};\n\n#endif // DRIVERS_BOOTLOGO_H_"
  },
  {
    "path": "source/Core/Drivers/Buttons.cpp",
    "content": "/*\r\n * Buttons.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n#include \"FreeRTOS.h\"\r\n#include \"OperatingModeUtilities.h\"\r\n#include \"settingsGUI.hpp\"\r\n#include \"task.h\"\r\n#include <Buttons.hpp>\r\nTickType_t lastButtonTime = 0;\r\n\r\nButtonState getButtonState() {\r\n  /*\r\n   * Read in the buttons and then determine if a state change needs to occur\r\n   */\r\n\r\n  /*\r\n   * If the previous state was  00 Then we want to latch the new state if\r\n   * different & update time\r\n   * If the previous state was !00 Then we want to search if we trigger long\r\n   * press (buttons still down), or if release we trigger press\r\n   * (downtime>filter)\r\n   */\r\n  static uint8_t    previousState       = 0;\r\n  static bool       longPressed         = false;\r\n  static TickType_t previousStateChange = 0;\r\n  const TickType_t  timeout             = TICKS_100MS * 4;\r\n  uint8_t           currentState;\r\n  currentState = (getButtonA()) << 0;\r\n  currentState |= (getButtonB()) << 1;\r\n\r\n  if (currentState) {\r\n    lastButtonTime = xTaskGetTickCount();\r\n  }\r\n  if (currentState == previousState) {\r\n    if (currentState == 0) {\r\n      return BUTTON_NONE;\r\n    }\r\n    if ((xTaskGetTickCount() - previousStateChange) >= timeout) {\r\n      // User has been holding the button down\r\n      // We want to send a button is held message\r\n      longPressed = true;\r\n      if (currentState == 0x01) {\r\n        return BUTTON_F_LONG;\r\n      } else if (currentState == 0x02) {\r\n        return BUTTON_B_LONG;\r\n      } else {\r\n        return BUTTON_BOTH_LONG; // Both being held case\r\n      }\r\n    } else {\r\n      return BUTTON_NONE;\r\n    }\r\n  } else {\r\n    // A change in button state has occurred\r\n    ButtonState retVal = BUTTON_NONE;\r\n    if (currentState) {\r\n      // User has pressed a button down (nothing done on down)\r\n      // If there is a rising edge on one of the buttons from double press we\r\n      // want to mask that out As users are having issues with not release\r\n      // both at once\r\n      previousState |= currentState;\r\n    } else {\r\n      // User has released buttons\r\n      // If they previously had the buttons down we want to check if they were <\r\n      // long hold and trigger a press\r\n      if (!longPressed) {\r\n        // The user didn't hold the button for long\r\n        // So we send button press\r\n\r\n        if (previousState == 0x01) {\r\n          retVal = BUTTON_F_SHORT;\r\n        } else if (previousState == 0x02) {\r\n          retVal = BUTTON_B_SHORT;\r\n        } else {\r\n          retVal = BUTTON_BOTH; // Both being held case\r\n        }\r\n      }\r\n      previousState = 0;\r\n      longPressed   = false;\r\n    }\r\n    previousStateChange = xTaskGetTickCount();\r\n    return retVal;\r\n  }\r\n  return BUTTON_NONE;\r\n}\r\n\r\nvoid waitForButtonPress() {\r\n  // we are just lazy and sleep until user confirms button press\r\n  // This also eats the button press event!\r\n  ButtonState buttons = getButtonState();\r\n  while (buttons) {\r\n    buttons = getButtonState();\r\n    GUIDelay();\r\n  }\r\n  while (!buttons) {\r\n    buttons = getButtonState();\r\n    GUIDelay();\r\n  }\r\n}\r\n\r\nvoid waitForButtonPressOrTimeout(TickType_t timeout) {\r\n  timeout += xTaskGetTickCount();\r\n  // calculate the exit point\r\n\r\n  ButtonState buttons = getButtonState();\r\n  while (buttons) {\r\n    buttons = getButtonState();\r\n    GUIDelay();\r\n    if (xTaskGetTickCount() > timeout) {\r\n      return;\r\n    }\r\n  }\r\n  while (!buttons) {\r\n    buttons = getButtonState();\r\n    GUIDelay();\r\n    if (xTaskGetTickCount() > timeout) {\r\n      return;\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "source/Core/Drivers/Buttons.hpp",
    "content": "/*\r\n * Buttons.h\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n#include \"BSP.h\"\r\n#ifndef INC_BUTTONS_H_\r\n#define INC_BUTTONS_H_\r\n#include \"portmacro.h\"\r\nextern TickType_t lastButtonTime;\r\n\r\nenum ButtonState {\r\n  BUTTON_NONE      = 0,  /* No buttons pressed / < filter time*/\r\n  BUTTON_F_SHORT   = 1,  /* User has pressed the front button*/\r\n  BUTTON_B_SHORT   = 2,  /* User has pressed the back  button*/\r\n  BUTTON_F_LONG    = 4,  /* User is  holding the front button*/\r\n  BUTTON_B_LONG    = 8,  /* User is  holding the back button*/\r\n  BUTTON_BOTH      = 16, /* User has pressed both buttons*/\r\n  BUTTON_BOTH_LONG = 32, /* User is holding both buttons*/\r\n\r\n  /*\r\n   * Note:\r\n   * Pressed means press + release, we trigger on a full \\__/ pulse\r\n   * holding means it has gone low, and been low for longer than filter time\r\n   */\r\n};\r\n\r\n// Returns what buttons are pressed (if any)\r\nButtonState getButtonState();\r\n// Helpers\r\nvoid waitForButtonPressOrTimeout(TickType_t timeout);\r\nvoid waitForButtonPress();\r\n\r\n#endif /* INC_BUTTONS_H_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/FS2711.cpp",
    "content": "#include \"configuration.h\"\n\n#if POW_PD_EXT == 2\n#include \"BSP.h\"\n#include \"FS2711.hpp\"\n#include \"FS2711_defines.h\"\n#include \"I2CBB2.hpp\"\n#include \"Settings.h\"\n#include \"cmsis_os.h\"\n#include <stdbool.h>\n#include <stdint.h>\n#include <string.h>\n\n#ifndef USB_PD_VMAX\n#error Max PD Voltage must be defined\n#endif\n\n#define PROTOCOL_TIMEOUT 100 // ms\n\nextern int32_t powerSupplyWattageLimit;\n\nfs2711_state_t FS2711::state;\n\ninline void i2c_write(uint8_t addr, uint8_t data) { I2CBB2::Mem_Write(FS2711_ADDR, addr, &data, 1); }\n\ninline uint8_t i2c_read(uint8_t addr) {\n  uint8_t data = 0;\n  I2CBB2::Mem_Read(FS2711_ADDR, addr, &data, 1);\n  return data;\n}\n\ninline bool i2c_probe(uint8_t addr) { return I2CBB2::probe(addr); }\n\nvoid FS2711::start() {\n  memset(&state, 0, sizeof(fs2711_state_t));\n  state.req_pdo_num = 0xFF;\n\n  enable_protocol(false);\n  osDelay(PROTOCOL_TIMEOUT);\n  select_protocol(FS2711_PROTOCOL_PD);\n  enable_protocol(true);\n  osDelay(PROTOCOL_TIMEOUT);\n}\n\nuint8_t FS2711::selected_protocol() { return i2c_read(FS2711_REG_SELECT_PROTOCOL); }\n\nvoid FS2711::enable_protocol(bool enable) { i2c_write(FS2711_REG_ENABLE_PROTOCOL, enable ? FS2711_ENABLE : FS2711_DISABLE); }\n\nvoid FS2711::select_protocol(uint8_t protocol) { i2c_write(FS2711_REG_SELECT_PROTOCOL, protocol); }\n\nvoid FS2711::enable_voltage() { i2c_write(FS2711_REG_ENABLE_VOLTAGE, FS2711_ENABLE); }\n\nbool FS2711::probe() { return i2c_probe(FS2711_ADDR); }\n\nvoid FS2711::pdo_update() {\n  uint8_t pdo_b0 = 0, pdo_b1 = 0, pdo_b2 = 0, pdo_b3 = 0;\n\n  state.pdo_num = 0;\n  memset(state.pdo_type, 0, 7);\n  memset(state.pdo_min_volt, 0, 7);\n  memset(state.pdo_max_volt, 0, 7);\n  memset(state.pdo_max_curr, 0, 7);\n\n  for (uint8_t i = 0; i < 7; i++) {\n    pdo_b0 = i2c_read(FS2711_REG_PDO_B0 + i * 4);\n    pdo_b1 = i2c_read(FS2711_REG_PDO_B1 + i * 4);\n    pdo_b2 = i2c_read(FS2711_REG_PDO_B2 + i * 4);\n    pdo_b3 = i2c_read(FS2711_REG_PDO_B3 + i * 4);\n\n    if (pdo_b0) {\n      if ((pdo_b3 & FS2711_REG_PDO_B0) == FS2711_REG_PDO_B0) {\n        state.pdo_type[i]     = FS2711_PDO_PPS;\n        state.pdo_min_volt[i] = pdo_b1 * 100;\n        state.pdo_max_volt[i] = ((pdo_b2 >> 1) + ((pdo_b3 & 0x1) << 7)) * 100;\n        state.pdo_max_curr[i] = (pdo_b0 & 0x7F) * 50;\n      } else {\n        state.pdo_type[i]     = FS2711_PDO_FIX;\n        state.pdo_min_volt[i] = ((pdo_b1 >> 2) + ((pdo_b2 & 0xF) << 6)) * 50;\n        state.pdo_max_volt[i] = state.pdo_min_volt[i];\n        state.pdo_max_curr[i] = (pdo_b0 + ((pdo_b1 & 0x3) << 8)) * 10;\n      }\n      state.pdo_num++;\n    }\n  }\n}\n\nbool FS2711::open_pps(uint8_t pdoid, uint16_t volt, uint16_t max_curr) {\n  uint16_t wr;\n\n  if (pdoid > state.pdo_num)\n    return false;\n  if ((volt > state.pdo_max_volt[pdoid]) || (volt < state.pdo_min_volt[pdoid]))\n    return false;\n  if ((volt > state.pdo_max_volt[pdoid]) || (volt < state.pdo_min_volt[pdoid]))\n    return false;\n  if (max_curr > state.pdo_max_curr[pdoid])\n    return false;\n  if (state.pdo_type[pdoid] != FS2711_PDO_PPS)\n    return false;\n\n  if (FS2711::selected_protocol() == FS2711_PROTOCOL_PD) {\n    select_protocol(FS2711_PROTOCOL_PPS);\n    enable_protocol(true);\n  }\n\n  if (FS2711::selected_protocol() != FS2711_PROTOCOL_PPS) {\n    return false;\n  }\n\n  i2c_write(FS2711_REG_PDO_IDX, pdoid + (pdoid << 4));\n  wr = (volt - state.pdo_min_volt[pdoid]) / 20;\n  i2c_write(FS2711_PROTOCOL_PPS_CURRENT, max_curr / 50);\n\n  i2c_write(FS2711_REG_VOLT_CFG_B0, wr & 0xFF);\n  i2c_write(FS2711_REG_VOLT_CFG_B1, (wr >> 8) & 0xFF);\n  i2c_write(FS2711_REG_VOLT_CFG_B2, wr & 0xFF);\n  i2c_write(FS2711_REG_VOLT_CFG_B3, (wr >> 8) & 0xFF);\n\n  enable_voltage();\n\n  state.source_voltage    = volt;\n  state.source_current    = max_curr;\n  state.req_pdo_num       = pdoid;\n  powerSupplyWattageLimit = ((volt * max_curr) / 1000000) - 2;\n  return true;\n}\n\nbool FS2711::open_pd(uint8_t pdoid) {\n  if (pdoid >= state.pdo_num) {\n    return false;\n  }\n  if (state.pdo_type[pdoid] != FS2711_PDO_FIX) {\n    return false;\n  }\n\n  if (FS2711::selected_protocol() != FS2711_PROTOCOL_PD) {\n    return false;\n  }\n\n  i2c_write(FS2711_REG_PDO_IDX, pdoid + (pdoid << 4));\n\n  enable_voltage();\n\n  state.source_voltage = state.pdo_max_volt[pdoid];\n  state.source_current = state.pdo_max_curr[pdoid];\n  state.req_pdo_num    = pdoid;\n\n  powerSupplyWattageLimit = ((state.source_voltage * state.source_current) / 1000000) - 2;\n  return true;\n}\n\nvoid FS2711::negotiate() {\n  uint16_t best_voltage = 0;\n  uint16_t best_current = 0;\n  uint8_t  best_pdoid   = 0xFF;\n  bool     pps          = false;\n\n  int min_resistance_omhsx10 = 0;\n\n  // FS2711 uses mV instead of V\n  const uint16_t vmax           = USB_PD_VMAX * 1000;\n  uint8_t        tip_resistance = getTipResistanceX10();\n  if (getSettingValue(SettingsOptions::USBPDMode) == usbpdMode_t::DEFAULT) {\n    tip_resistance += 5;\n  }\n\n  uint16_t pdo_min_mv = 0, pdo_max_mv = 0, pdo_max_curr = 0, pdo_type = 0;\n\n  FS2711::pdo_update();\n\n  for (int i = 0; state.pdo_num > i; i++) {\n    pdo_min_mv   = state.pdo_min_volt[i];\n    pdo_max_mv   = state.pdo_max_volt[i];\n    pdo_max_curr = state.pdo_max_curr[i];\n    pdo_type     = state.pdo_type[i];\n\n    min_resistance_omhsx10 = (pdo_max_mv / pdo_max_curr) * 10;\n\n    switch (pdo_type) {\n    case FS2711_PDO_FIX:\n      if (pdo_max_mv > 0 && vmax >= pdo_max_mv) {\n        if (min_resistance_omhsx10 <= tip_resistance) {\n          if (pdo_max_mv > best_voltage) {\n            pps          = false;\n            best_pdoid   = i;\n            best_voltage = pdo_max_mv;\n            best_current = pdo_max_curr;\n          }\n        }\n      }\n      break;\n\n    case FS2711_PDO_PPS: {\n      int ideal_mv = tip_resistance * (pdo_max_curr / 10);\n      if (ideal_mv > pdo_max_mv) {\n        ideal_mv = pdo_max_mv;\n      }\n\n      if (ideal_mv > vmax) {\n        ideal_mv = vmax;\n      }\n\n      if (ideal_mv > best_voltage) {\n        best_pdoid   = i;\n        best_voltage = ideal_mv;\n        best_current = pdo_max_curr;\n        pps          = true;\n      }\n    }\n\n    break;\n\n    default:\n      break;\n    }\n  }\n\n  if (best_pdoid != 0xFF && best_pdoid != state.req_pdo_num) {\n    if (pps) {\n      FS2711::open_pps(best_pdoid, best_voltage, best_current);\n    } else {\n      FS2711::open_pd(best_pdoid);\n    }\n  }\n}\n\nbool FS2711::has_run_selection() { return state.req_pdo_num != 0xFF; }\n\nuint16_t FS2711::source_voltage() { return state.source_voltage / 1000; }\n\n// FS2711 does current in mV so it needs to be converted to x100 intead of x1000\nuint16_t FS2711::source_currentx100() { return state.source_current / 10; }\n\nuint16_t FS2711::debug_pdo_max_voltage(uint8_t pdoid) { return state.pdo_max_volt[pdoid]; }\n\nuint16_t FS2711::debug_pdo_min_voltage(uint8_t pdoid) { return state.pdo_min_volt[pdoid]; }\n\nuint16_t FS2711::debug_pdo_source_current(uint8_t pdoid) { return state.pdo_max_curr[pdoid]; }\n\nuint16_t FS2711::debug_pdo_type(uint8_t pdoid) { return state.pdo_type[pdoid]; }\n\nfs2711_state_t FS2711::debug_get_state() { return state; }\n\n#endif\n"
  },
  {
    "path": "source/Core/Drivers/FS2711.hpp",
    "content": "#include \"configuration.h\"\n#ifndef _DRIVERS_FS2711_HPP_\n#define _DRIVERS_FS2711_HPP_\n// #define POW_PD_EXT 2\n#if POW_PD_EXT == 2\n#include <stdbool.h>\n#include <stdint.h>\n\ntypedef struct {\n  uint8_t  pdo_num; // Nums of USB-PD Objects max of 7\n  uint16_t source_current;\n  uint16_t source_voltage;\n  uint16_t req_pdo_num;\n  uint16_t pdo_type[7];\n  uint16_t pdo_min_volt[7];\n  uint16_t pdo_max_volt[7];\n  uint16_t pdo_max_curr[7];\n} fs2711_state_t;\n\nclass FS2711 {\npublic:\n  static bool probe();\n\n  static void start();\n\n  static bool open_pps(uint8_t PDOID, uint16_t volt, uint16_t max_curr);\n\n  static bool open_pd(uint8_t PDOID);\n\n  static void negotiate();\n\n  static bool has_run_selection();\n\n  static uint16_t source_voltage();\n\n  static uint16_t source_currentx100();\n\n  static uint8_t selected_protocol();\n\n  static void pdo_update();\n\n  static uint8_t        debug_protocol();\n  static uint16_t       debug_pdo_max_voltage(uint8_t pdoid);\n  static uint16_t       debug_pdo_min_voltage(uint8_t pdoid);\n  static uint16_t       debug_pdo_source_current(uint8_t pdoid);\n  static uint16_t       debug_pdo_type(uint8_t pdoid);\n  static fs2711_state_t debug_get_state();\n\nprivate:\n  // Internal state of IC\n  static fs2711_state_t state;\n\n  static void enable_protocol(bool enable);\n\n  static void select_protocol(uint8_t protocol);\n\n  static void enable_voltage();\n};\n\n#endif\n#endif\n"
  },
  {
    "path": "source/Core/Drivers/FS2711_defines.h",
    "content": "#ifndef _FS2711_DEFINE_HPP_\n#define _FS2711_DEFINE_HPP_\n\n#define FS2711_WRITE_ADDR 0x5A\n#define FS2711_READ_ADDR  0x5B\n\n#define FS2711_ADDR 0x5A\n\n#define FS2711_PDO_FIX 0\n#define FS2711_PDO_PPS 1\n\n#define FS2711_MAX_5V  1\n#define FS2711_MAX_9V  3\n#define FS2711_MAX_12V 7\n#define FS2711_MAX_20V 15\n\n#define FS2711_ENABLE  0x1\n#define FS2711_DISABLE 0x2\n\n// Protocol Selection\n#define FS2711_PROTOCOL_QC2A 4\n#define FS2711_PROTOCOL_QC2B 5\n#define FS2711_PROTOCOL_QC3A 6\n#define FS2711_PROTOCOL_QC3B 7\n#define FS2711_PROTOCOL_PPS  20\n#define FS2711_PROTOCOL_PD   21\n\n#define FS2711_PROTOCOL_PPS_CURRENT 0xDE\n\n#define FS2711_PROTOCOL_QC_MAX_VOLT 0xC0\n\n#define FS2711_REG_SCAN_START      0x40 // Protocol Scan\n#define FS2711_REG_ENABLE_PROTOCOL 0x41 // Enable Protocol\n#define FS2711_REG_SELECT_PROTOCOL 0x42 // Select Protocol\n#define FS2711_REG_ENABLE_VOLTAGE  0x43 // Enable Voltage\n#define FS2711_REG_PDO_IDX         0x46 // Requests Protocol Index\n#define FS2711_REG_SWEEP           0x47 // Requests a voltage sweep?\n#define FS2711_REG_PORT_RESET      0x49 // Port Reset\n#define FS2711_REG_SYSTEM_RESET    0x4A // System Reset\n#define FS2711_REG_DPDM            0x51 // DPDM\n#define FS2711_REG_MODE_SET        0xA0 // Mode set\n#define FS2711_REG_STATE0          0xB1 // PD:A_SNK PD:A_SRC (PD:pe_ready POM:crc_success) (PD:soft_reset POM:crc_fail) (PD:hard_rest POM:resp_fail) PD:hardreset_found VIVO\n#define FS2711_REG_STATE1          0xB2 // scan_done pdo_updated vooc_recv_cmd vivo_pom_tx_finish vivo_pom_rx_finish huawei_comm_fail huawei_op_finish\n\n// Used to calculate PDO Objects\n#define FS2711_REG_PDO_B0 0xC0\n#define FS2711_REG_PDO_B1 0xC1\n#define FS2711_REG_PDO_B2 0xC2\n#define FS2711_REG_PDO_B3 0xC3\n\n#define FS2711_REG_VOLT_CFG_B0 0xF4\n#define FS2711_REG_VOLT_CFG_B1 0xF5\n#define FS2711_REG_VOLT_CFG_B2 0xF6\n#define FS2711_REG_VOLT_CFG_B3 0xF7\n\n// 0xF0 ~ 0xF1 16 bits\n#define FS2711_REG_MASK 0xF0\n// 0xF4 ~ 0xF7 32 bits\n#define FS2711_REG_PROTOCOL_VOLT 0xF4\n// 0xF8 ~ 0xFB 24 bits\n#define FS2711_REG_PROTOCOL_EXISTS 0xF8\n\n#define FS2711_SWEEP_SAW  0\n#define FS2711_SWEEP_TRI  1\n#define FS2711_SWEEP_STEP 2\n\n#define FS2711_STATE_SCAN_DONE   0x01\n#define FS2711_STATE_PDO_UPDATE  0x02\n#define FS2711_STATE_PD_SNK      0x40\n#define FS2711_STATE_PD_SRC      0x80\n#define FS2711_STATE_PD_PE_READY 0x100\n#define FS2711_STATE_DISABLE     0x800\n#endif\n"
  },
  {
    "path": "source/Core/Drivers/Font.h",
    "content": "/*\r\n * Font.h\r\n *\r\n *  Created on: 17 Sep 2016\r\n *      Author: Ralim\r\n *\r\n *      ... This file contains the font...\r\n */\r\n\r\n#ifndef FONT_H_\r\n#define FONT_H_\r\n#include \"Translation.h\"\r\n\r\n#define FONT_12_WIDTH 12\r\n// THE MAIN FONTS ARE NO LONGER HERE, MOVED TO PYTHON AUTO GEN\r\n// THESE ARE ONLY THE SYMBOL FONTS\r\n// clang-format off\r\n  const uint8_t ExtraFontChars[] = {\r\n      // width = 12\r\n      // height = 16\r\n      0x00, 0x18, 0x24, 0x24, 0x18, 0xC0, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, // Degrees F\r\n      0x00, 0x18, 0x24, 0x24, 0x18, 0x80, 0x40, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x10, 0x10, 0x10, 0x00, 0x00, // Degrees C\r\n      0x00, 0x00, 0x20, 0x30, 0x38, 0xFC, 0xFE, 0xFC, 0x38, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, // UP arrow\r\n  \r\n      0x00, 0xF0, 0x08, 0x0E, 0x02, 0x02, 0x02, 0x02, 0x0E, 0x08, 0xF0, 0x00, 0x00, 0x3F, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x3F, 0x00, // Battery Empty\r\n      0x00, 0xF0, 0x08, 0x0E, 0x02, 0x02, 0x02, 0x02, 0x0E, 0x08, 0xF0, 0x00, 0x00, 0x3F, 0x40, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x40, 0x3F, 0x00, // Battery 1*/\r\n      0x00, 0xF0, 0x08, 0x0E, 0x02, 0x02, 0x02, 0x02, 0x0E, 0x08, 0xF0, 0x00, 0x00, 0x3F, 0x40, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x40, 0x3F, 0x00, // Battery 2*/\r\n      0x00, 0xF0, 0x08, 0x0E, 0x02, 0x02, 0x02, 0x02, 0x0E, 0x08, 0xF0, 0x00, 0x00, 0x3F, 0x40, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x40, 0x3F, 0x00, // Battery 3*/\r\n      0x00, 0xF0, 0x08, 0x0E, 0x02, 0x02, 0x02, 0x02, 0x0E, 0x08, 0xF0, 0x00, 0x00, 0x3F, 0x40, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x40, 0x3F, 0x00, // Battery 4*/\r\n      0x00, 0xF0, 0x08, 0x0E, 0x02, 0x02, 0x02, 0x02, 0x0E, 0x08, 0xF0, 0x00, 0x00, 0x3F, 0x40, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x40, 0x3F, 0x00, // Battery 5*/\r\n      0x00, 0xF0, 0x08, 0x8E, 0x82, 0x82, 0x82, 0x82, 0x8E, 0x08, 0xF0, 0x00, 0x00, 0x3F, 0x40, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x40, 0x3F, 0x00, // Battery 6*/\r\n      0x00, 0xF0, 0x08, 0xCE, 0xC2, 0xC2, 0xC2, 0xC2, 0xCE, 0x08, 0xF0, 0x00, 0x00, 0x3F, 0x40, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x40, 0x3F, 0x00, // Battery 7*/\r\n      0x00, 0xF0, 0x08, 0xEE, 0xE2, 0xE2, 0xE2, 0xE2, 0xEE, 0x08, 0xF0, 0x00, 0x00, 0x3F, 0x40, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x40, 0x3F, 0x00, // Battery 8*/\r\n      0x00, 0xF0, 0x08, 0xEE, 0xE2, 0xF2, 0xF2, 0xE2, 0xEE, 0x08, 0xF0, 0x00, 0x00, 0x3F, 0x40, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x40, 0x3F, 0x00, // Battery 9*/\r\n      0x00, 0xF0, 0x08, 0xEE, 0xE2, 0xFA, 0xFA, 0xE2, 0xEE, 0x08, 0xF0, 0x00, 0x00, 0x3F, 0x40, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x40, 0x3F, 0x00, // Battery 10*/\r\n  \r\n      0x00, 0x00, 0x38, 0xC4, 0x00, 0x38, 0xC4, 0x00, 0x38, 0xC4, 0x00, 0x00, 0x00, 0x38, 0x3A, 0x39, 0x38, 0x3A, 0x39, 0x38, 0x3A, 0x39, 0x10, 0x10, // heating\r\n      0x00, 0x60, 0xE0, 0xFE, 0xE0, 0xE0, 0xE0, 0xE0, 0xFE, 0xE0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0xFF, 0xFF, 0x03, 0x01, 0x00, 0x00, 0x00, // AC\r\n  \r\n      0xFC, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x82, 0x62, 0x1A, 0x02, 0xFC, 0x3F, 0x40, 0x42, 0x46, 0x4C, 0x58, 0x46, 0x41, 0x40, 0x40, 0x40, 0x3F, // ☑ (check box on, menu true)\r\n      0xFC, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0xFC, 0x3F, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x3F, // ☐ (check box off, menu false)\r\n  \r\n      /*\r\n       0x00,0x00,0x00,0x80,0x80,0xFE,0xFF,0x83,0x87,0x06,0x00,0x00,0x00,0x00,0x30,0x70,0x60,0x7F,0x3F,0x00,0x00,0x00,0x00,0x00, // Function?\r\n       0x00,0x70,0xFA,0xDB,0xDB,0xDB,0xDB,0xDB,0xDB,0xFF,0xFE,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00, // a_\r\n       0x00,0x3C,0x7E,0xE7,0xC3,0xC3,0xC3,0xC3,0xE7,0x7E,0x3C,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00, // 0_\r\n       0x55,0x00,0xAA,0x00,0x55,0x00,0xAA,0x00,0x55,0x00,0xAA,0x00,0x55,0x00,0xAA,0x00,0x55,0x00,0xAA,0x00,0x55,0x00,0xAA,0x00, // 25%  block\r\n       0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55, // 50% pipe\r\n       0xAA,0xFF,0x55,0xFF,0xAA,0xFF,0x55,0xFF,0xAA,0xFF,0x55,0xFF,0xAA,0xFF,0x55,0xFF,0xAA,0xFF,0x55,0xFF,0xAA,0xFF,0x55,0xFF, // 75% block\r\n       0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, // | pipe\r\n       0x80,0x80,0x80,0x80,0x80,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, // T pipe ,|\r\n       0xC0,0xC0,0xFF,0xFF,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0xFE,0xFE,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, // ,| double pipe\r\n       0x00,0x00,0xFF,0xFF,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, //  || double pipe\r\n       0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0xFE,0xFE,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, // #NAME?//#NAME?\r\n       0xC0,0xC0,0xFF,0xFF,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x07,0x07,0x00,0x00,0x00,0x00,0x00, // ,^ double pupe\r\n       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00, // #NAME?//#NAME?\r\n       0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01, // ,> pipe\r\n       0x80,0x80,0x80,0x80,0x80,0xFF,0xFF,0x80,0x80,0x80,0x80,0x80,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, // _|_ pipe\r\n       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01, // ,|, pipe\r\n       0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01, // |, pipe\r\n       0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, // #NAME?//#NAME?\r\n       0x80,0x80,0x80,0x80,0x80,0xFF,0xFF,0x80,0x80,0x80,0x80,0x80,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01, // #NAME?//#NAME?\r\n       0x00,0x00,0xFF,0xFF,0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, // ,> double pipe\r\n       0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0xFF,0xFF,0x00,0xFE,0xFE,0x06,0x06,0x06,0x06,0x06, // ^, double pipe\r\n       0xC0,0xC0,0xFF,0xFF,0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, // _|_ double pipe\r\n       0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x06,0x06,0xFE,0xFE,0x00,0xFE,0xFE,0x06,0x06,0x06,0x06,0x06, // ,|, double pipe\r\n       0x00,0x00,0xFF,0xFF,0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0xFF,0xFF,0x00,0xFE,0xFE,0x06,0x06,0x06,0x06,0x06, // |, double pipe\r\n       0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06, // == double pipe\r\n       0xC0,0xC0,0xFF,0xFF,0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0x06,0x06,0xFE,0xFE,0x00,0xFE,0xFE,0x06,0x06,0x06,0x06,0x06, // #NAME?//#NAME?\r\n       0x00,0x00,0x00,0x78,0xFC,0xCC,0x8C,0x0C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x3E,0x33,0x33,0x3F,0x1E,0x00,0x00,0x00, // Delta lowercase\r\n       0x00,0x00,0x00,0x00,0x00,0x7E,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 27 (')\r\n       0x80,0x80,0x80,0x80,0x80,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, // ,^ pipe\r\n       0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01, // | , pipe\r\n       0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, // solid block\r\n       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, // half block bottom\r\n       0x00,0x00,0x00,0x00,0x00,0xBF,0xBF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00, // 7C (|)\r\n       0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // top half solid block\r\n       0x00,0x00,0x0C,0xFC,0xFC,0x6C,0x60,0x60,0xE0,0xC0,0x00,0x00,0x00,0x00,0x30,0x3F,0x3F,0x36,0x06,0x06,0x07,0x03,0x00,0x00, // DE small\r\n       0x00,0x00,0x03,0xFF,0xFF,0x1B,0x18,0x18,0xF8,0xF0,0x00,0x00,0x00,0x00,0x30,0x3F,0x3F,0x36,0x06,0x06,0x07,0x03,0x00,0x00, // DE large\r\n       0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ? (,)\r\n       0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00,0x00, // =\r\n       0x00,0x00,0x00,0x40,0x80,0x80,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // sideways comma\r\n       0x00,0x00,0x80,0xC0,0x80,0x00,0x00,0x80,0xC0,0x80,0x00,0x00,0x00,0x00,0x01,0x03,0x01,0x00,0x00,0x01,0x03,0x01,0x00,0x00, // ..\r\n       0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x01,0x00,0x00,0x00,0x00, // .\r\n       0x00,0x00,0x02,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // tiny 1\r\n       0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00, // small block\r\n       */\r\n  };\r\n  \r\n  const uint8_t WarningBlock24[] = {\r\n      // width = 24\r\n      // height = 16\r\n      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x30, 0x0C, 0x02, 0xF1, 0xF1, 0xF1, 0x02, 0x0C, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n      0x00, 0x00, 0x00, 0xC0, 0xB0, 0x8C, 0x83, 0x80, 0x80, 0x80, 0x80, 0xB3, 0xB3, 0xB3, 0x80, 0x80, 0x80, 0x80, 0x83, 0x8C, 0xB0, 0xC0, 0x00, 0x00};\r\n  \r\n  #if defined(MODEL_S60) || defined(MODEL_S60P) || defined(MODEL_TS101) || defined(MODEL_T55)\r\n    #if defined(MODEL_S60) || defined(MODEL_S60P) \r\n    const uint8_t buttonA[] = {\r\n        // width = 56\r\n        // height = 32\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x04, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r\n        0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0xf0, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0xe0, 0x00, 0x00, 0x88, 0x70, 0x00, 0x00, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, \r\n        0x00, 0x00, 0x00, 0x00, 0x0f, 0x70, 0x80, 0x00, 0x00, 0x00, 0x0e, 0x51, 0x40, 0x40, 0x47, 0x48, 0xa0, 0x60, 0xa7, 0x60, 0xa0, 0x60, 0xa0, 0x40, 0x00, 0x40, 0x40, 0x40,\r\n        0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0xfc, 0x08, 0xbc, 0x08, 0xbc, 0x00, 0xfc, 0xfc, 0x3c, 0x84, 0x70, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,\r\n        0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x47, 0x40, 0x44, 0x21, 0x20, 0x18, 0x09, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\r\n  \r\n    const uint8_t disconnectedTip[] = {\r\n        // width = 56\r\n        // height = 32\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0xc0, 0x40, 0xc0, 0x40, 0xc0, 0x40, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x81, 0x83, 0x87, 0x8e, 0x9c, 0x38, 0x70, 0xe0, 0xc0,\r\n        0x80, 0x20, 0x70, 0x38, 0x9c, 0x8e, 0x87, 0x83, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, \r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x04, 0x01,\r\n        0x03, 0x07, 0x0e, 0x1c, 0x38, 0x70, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\r\n    \r\n    #elif defined(MODEL_TS101)\r\n    const uint8_t buttonA[] = {\r\n        // width = 56\r\n        // height = 32\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x04, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r\n        0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0xf0, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0xe0, 0x00, 0x00, 0x88, 0x70, 0x00, 0x00, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, \r\n        0x00, 0x00, 0x00, 0x00, 0x0f, 0x70, 0x80, 0x00, 0x00, 0x40, 0x5e, 0x41, 0xa0, 0x60, 0xa7, 0x70, 0x00, 0xf0, 0x37, 0x70, 0x30, 0x70, 0x30, 0x70, 0x30, 0x70, 0x30, 0x50,\r\n        0x30, 0x50, 0x30, 0x50, 0x30, 0x50, 0xe0, 0x00, 0xa0, 0x60, 0xa0, 0x60, 0xa0, 0x60, 0xa0, 0x60, 0xa0, 0x50, 0xb8, 0x38, 0x80, 0x70, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x80, 0x81, 0x81, 0x80, 0x81, 0x80, 0x81, 0x80, 0x81, 0x80, 0x81, 0x80,\r\n        0x81, 0x80, 0x81, 0x80, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x18, 0x09, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\r\n  \r\n    const uint8_t disconnectedTip[] = {\r\n        // width = 56\r\n        // height = 32\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0xc0, 0x40, 0xe0, 0x00, 0xe0, 0x60, 0xe0, 0x61, 0xe3, 0x67, 0xce, 0x1c, 0x38, 0x70, 0xe0, 0xc0,\r\n        0x80, 0x20, 0x70, 0x38, 0x9c, 0xce, 0x07, 0x43, 0xc1, 0x40, 0xc0, 0x40, 0xc0, 0x40, 0xc0, 0x40, 0xa0, 0x70, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x03, 0x02, 0x00, 0x82, 0xc0, 0xe2, 0x70, 0x38, 0x1c, 0x0e, 0x04, 0x01,\r\n        0x03, 0x07, 0x0e, 0x1c, 0x38, 0x71, 0xe0, 0xc1, 0x80, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\r\n    \r\n  #elif defined(MODEL_T55)\r\n    const uint8_t buttonA[] = {\r\n        // width = 56\r\n        // height = 32\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x04, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r\n        0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0xf0, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0xe0, 0x00, 0x00, 0x88, 0x70, 0x00, 0x00, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, \r\n        0x00, 0x00, 0x00, 0x00, 0x0f, 0x70, 0x80, 0x00, 0x00, 0x00, 0x0e, 0x51, 0x40, 0x40, 0x47, 0x48, 0xa0, 0x60, 0xa7, 0x60, 0xa0, 0x60, 0xa0, 0x40, 0x00, 0x40, 0x40, 0x40,\r\n        0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0xfc, 0x08, 0xbc, 0x08, 0xbc, 0x00, 0xfc, 0xfc, 0x3c, 0x84, 0x70, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,\r\n        0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x47, 0x40, 0x44, 0x21, 0x20, 0x18, 0x09, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\r\n  \r\n    const uint8_t disconnectedTip[] = {\r\n        // width = 56\r\n        // height = 32\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0xc0, 0x40, 0xc0, 0x40, 0xc0, 0x40, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x81, 0x83, 0x87, 0x8e, 0x9c, 0x38, 0x70, 0xe0, 0xc0,\r\n        0x80, 0x20, 0x70, 0x38, 0x9c, 0x8e, 0x87, 0x83, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, \r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x04, 0x01,\r\n        0x03, 0x07, 0x0e, 0x1c, 0x38, 0x70, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\r\n    #endif\r\n    \r\n    const uint8_t buttonB[] = {\r\n        // width = 56\r\n        // height = 32\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x04, 0x02, 0x02, 0x02, 0x01, 0x01, 0x71, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xf1,\r\n        0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xf1, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0xf0, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1f, 0xd7, 0x13, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xdf, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, \r\n        0x00, 0x00, 0x00, 0x00, 0x0f, 0x70, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x7c, 0x5d,\r\n        0x4c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0xf5, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x70, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80, 0x8f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x8f,\r\n        0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x8f, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\r\n    \r\n    const uint8_t RepeatOnce[] = {\r\n        // width = 32\r\n        // height = 32\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0x70, 0x78, 0x38, 0x38, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x38, 0x78, 0xf0, 0xf0, 0xe0, 0xf0,\r\n        0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfc, 0xff, 0x1f, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\r\n        0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x20, 0x30, 0x38, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xff, 0x3f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r\n        0x3f, 0x3f, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1c, 0x1c, 0x1e, 0x0e, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00};\r\n    \r\n    const uint8_t RepeatInf[] = {\r\n        // width = 32\r\n        // height = 32\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0x70, 0x78, 0x38, 0x38, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x38, 0x78, 0xf0, 0xf0, 0xe0, 0xf0,\r\n        0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfc, 0xff, 0x1f, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\r\n        0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1f, 0x9f, 0x98, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,\r\n        0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xff, 0x3f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x11, 0x20, 0x20, 0x20, 0x11,\r\n        0x0a, 0x04, 0x0a, 0x11, 0x20, 0x20, 0x20, 0x11, 0x0e, 0x00, 0x00, 0x1c, 0x1c, 0x1e, 0x0e, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00};\r\n\r\n    const uint8_t UnavailableIcon[] = {\r\n        // width = 32\r\n        // height = 32\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0x70, 0x78, 0x38, 0x38, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x38, 0x38, 0x78, 0x70, 0xf0, 0xe0, 0xc0,\r\n        0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfc, 0xff, 0x1f, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0x7c,\r\n        0x3e, 0x1e, 0x0c, 0x00, 0x01, 0x07, 0x1f, 0xff, 0xfc, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x3f, 0xff, 0xf8, 0xe0, 0x80, 0x00, 0x30, 0x78, 0x7c, 0x3e, 0x1f,\r\n        0x0f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xff, 0x3f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07,\r\n        0x0f, 0x0e, 0x1e, 0x1c, 0x1c, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1c, 0x1c, 0x1e, 0x0e, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00};\r\n    \r\n    #define SETTINGS_ICON_WIDTH 21\r\n    #define SETTINGS_ICON_HEIGHT 32\r\n    /*\r\n     * 21x32 icons\r\n     * 84 * 3 = Frame size * Frame count\r\n     * */\r\n    const uint8_t SettingsMenuIcons[][84 * 3] = {\r\n      // Power\r\n      // 3 frames\r\n      {\r\n          // Power 1st frame\r\n          // width = 21\r\n          // height = 32\r\n          0x00,  0x00,  0x00,  0xfc,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x10,  0xdc,  0x37,  0x13,  0x01,  0x00,  0x00,  0x00,  0x00,  \r\n          0x00,  0x00,  0x00,  0xff,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x01,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  \r\n          0x00,  0x80,  0xc0,  0xdf,  0xc0,  0x80,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00, \r\n          0x00,  0x03,  0x07,  0x35,  0x04,  0x03,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,\r\n  \r\n          // Power 2nd frame\r\n          // width = 21\r\n          // height = 32\r\n          0x00,  0x00,  0x00,  0xfc,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x80,  0xe0,  0xfc,  0x7f,  0x1f,  0x0f,  0x07,  0x01,  0x00,  0x00,  0x00,  \r\n          0x00,  0x00,  0x00,  0x7f,  0x00,  0x00,  0x00,  0x00,  0x00,  0x02,  0x03,  0x83,  0x73,  0x3f,  0x0f,  0x07,  0x01,  0x00,  0x00,  0x00,  0x00,  \r\n          0x00,  0x0e,  0x1f,  0xd7,  0x13,  0x0e,  0x00,  0x00,  0x00,  0x00,  0x02,  0x01,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00, \r\n          0x00,  0x00,  0x00,  0x3f,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,\r\n  \r\n          // Power final frame\r\n          // width = 21\r\n          // height = 32\r\n          0x00,  0xc0,  0xe0,  0xec,  0x60,  0xc0,  0x00,  0x00,  0x00,  0x80,  0xf0,  0xfc,  0xff,  0xff,  0x7f,  0x3f,  0x1f,  0x07,  0x03,  0x01,  0x00,  \r\n          0x00,  0x01,  0x03,  0xfa,  0x02,  0x01,  0x00,  0x08,  0x0e,  0x0f,  0x8f,  0xef,  0xff,  0x7f,  0x3f,  0x1f,  0x07,  0x03,  0x01,  0x00,  0x00,  \r\n          0x00,  0x00,  0x00,  0xff,  0x00,  0x00,  0x00,  0x00,  0x08,  0x0e,  0x0f,  0xcf,  0xfd,  0x3c,  0x1c,  0x04,  0x00,  0x00,  0x00,  0x00,  0x00, \r\n          0x00,  0x00,  0x00,  0x3f,  0x00,  0x00,  0x00,  0x00,  0x10,  0x0c,  0x03,  0x01,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,\r\n      },\r\n  \r\n      // Soldering\r\n      // 3 frames\r\n      {\r\n          // Soldering 1st frame\r\n          // width = 21\r\n          // height = 32\r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x80,  0x60,  0xf8,  0xfc,  0xfc,  0x7c,  0x18,  0x00,  0x00,  \r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x80,  0x60,  0xe8,  0xe2,  0xf8,  0x7e,  0x1f,  0x07,  0x01,  0x00,  0x00,  0x00,  0x00,  \r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x80,  0x66,  0x15,  0x07,  0x0f,  0x07,  0x01,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00, \r\n          0x00,  0x00,  0x00,  0x20,  0x18,  0x06,  0x01,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,\r\n  \r\n          // Soldering 2nd frame\r\n          // width = 21\r\n          // height = 32\r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x80,  0x60,  0xf8,  0xfc,  0xfc,  0x7c,  0x18,  0x00,  0x00,  \r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x80,  0x60,  0xe8,  0xe2,  0xf8,  0x7e,  0x1f,  0x07,  0x01,  0x00,  0x00,  0x00,  0x00,  \r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x80,  0x66,  0x15,  0x07,  0x0f,  0x07,  0x01,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00, \r\n          0x00,  0x03,  0x0c,  0x20,  0x18,  0x06,  0x01,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,\r\n  \r\n          // Soldering final frame\r\n          // width = 21\r\n          // height = 32\r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x80,  0x60,  0xf8,  0xfc,  0xfc,  0x7c,  0x18,  0x00,  0x00,  \r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x80,  0x60,  0xe8,  0xe2,  0xf8,  0x7e,  0x1f,  0x07,  0x01,  0x00,  0x00,  0x00,  0x00,  \r\n          0x00,  0x80,  0xc8,  0xf0,  0x00,  0x00,  0x80,  0x66,  0x15,  0x07,  0x0f,  0x07,  0x01,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00, \r\n          0x00,  0x03,  0x0d,  0x20,  0x18,  0x06,  0x01,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,\r\n      },\r\n  \r\n      // Sleep\r\n      // 3 frames\r\n      {\r\n          // Sleep 1st frame\r\n          // width = 21\r\n          // height = 32\r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  \r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  \r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x60,  0x60,  0x60,  0xe0,  0xe0,  0xc0,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00, \r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x0c,  0x1e,  0x1f,  0x1b,  0x19,  0x18,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,\r\n  \r\n          // Sleep 2nd frame\r\n          // width = 21\r\n          // height = 32\r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  \r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x08,  0x1c,  0x1c,  0x9c,  0xdc,  0xfc,  0xfc,  0x38,  0x00,  \r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x60,  0x60,  0x60,  0xe0,  0xe0,  0xc0,  0x00,  0x18,  0x3e,  0x3f,  0x3f,  0x3b,  0x39,  0x38,  0x10,  0x00, \r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x0c,  0x1e,  0x1f,  0x1b,  0x19,  0x18,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,\r\n  \r\n          // Sleep final frame\r\n          // width = 21\r\n          // height = 32\r\n          0x00,  0x18,  0x3c,  0x3c,  0x3c,  0x3c,  0xbc,  0xfc,  0xfc,  0xfc,  0x78,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  \r\n          0x00,  0xe0,  0xf8,  0xfc,  0xfe,  0xdf,  0xcf,  0xc7,  0xc3,  0xc1,  0x80,  0x00,  0x08,  0x1c,  0x1c,  0x9c,  0xdc,  0xfc,  0xfc,  0x38,  0x00,  \r\n          0x00,  0x01,  0x03,  0x03,  0x03,  0x63,  0x63,  0x63,  0xe3,  0xe3,  0xc1,  0x00,  0x18,  0x3e,  0x3f,  0x3f,  0x3b,  0x39,  0x38,  0x10,  0x00, \r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x0c,  0x1e,  0x1f,  0x1b,  0x19,  0x18,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,\r\n      },\r\n  \r\n      // UI\r\n      // 3 frames\r\n      {\r\n          // UI 1st frame\r\n          // width = 21\r\n          // height = 32\r\n          0x00,  0x18,  0x74,  0x08,  0x44,  0x7c,  0x10,  0x7c,  0x10,  0x78,  0x44,  0x08,  0x48,  0x3c,  0x68,  0x08,  0x74,  0x10,  0x7c,  0x08,  0x00,  \r\n          0x00,  0x60,  0xc0,  0x60,  0x80,  0xe0,  0x40,  0xe0,  0x20,  0xe0,  0x00,  0x00,  0xf8,  0x04,  0x84,  0x04,  0x04,  0x04,  0x04,  0xf8,  0x00,  \r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0xc3,  0x24,  0x24,  0x24,  0x24,  0x24,  0x24,  0xc3,  0x00, \r\n          0x00,  0x04,  0x03,  0x04,  0x07,  0x05,  0x00,  0x07,  0x02,  0x04,  0x00,  0x00,  0x1f,  0x20,  0x20,  0x20,  0x20,  0x20,  0x20,  0x1f,  0x00,\r\n  \r\n          // UI 2nd frame\r\n          // width = 21\r\n          // height = 32\r\n          0x00,  0x18,  0x74,  0x08,  0x44,  0x7c,  0x10,  0x7c,  0x10,  0x78,  0x44,  0x08,  0x48,  0x3c,  0x68,  0x08,  0x74,  0x10,  0x7c,  0x08,  0x00,  \r\n          0x00,  0x60,  0xc0,  0x60,  0x80,  0xe0,  0x40,  0xe0,  0x20,  0xe0,  0x00,  0x00,  0xf8,  0x04,  0x84,  0x04,  0x04,  0x04,  0x04,  0xf8,  0x00,  \r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0xc3,  0x24,  0x24,  0x25,  0x24,  0x24,  0x24,  0xc3,  0x00, \r\n          0x00,  0x04,  0x03,  0x04,  0x07,  0x05,  0x00,  0x07,  0x02,  0x04,  0x00,  0x00,  0x1f,  0x20,  0x20,  0x20,  0x20,  0x20,  0x20,  0x1f,  0x00,\r\n  \r\n          // UI final frame\r\n          // width = 21\r\n          // height = 32\r\n          0x00,  0x18,  0x74,  0x08,  0x44,  0x7c,  0x10,  0x7c,  0x10,  0x78,  0x44,  0x08,  0x48,  0x3c,  0x68,  0x08,  0x74,  0x10,  0x7c,  0x08,  0x00,  \r\n          0x00,  0x60,  0xc0,  0x60,  0x80,  0xe0,  0x40,  0xe0,  0x20,  0xe0,  0x00,  0x00,  0xf8,  0x04,  0x84,  0x04,  0xc4,  0x34,  0x04,  0xf8,  0x00,  \r\n          0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0xc3,  0x24,  0x24,  0x25,  0x24,  0x24,  0x24,  0xc3,  0x00, \r\n          0x00,  0x04,  0x03,  0x04,  0x07,  0x05,  0x00,  0x07,  0x02,  0x04,  0x00,  0x00,  0x1f,  0x20,  0x20,  0x20,  0x20,  0x20,  0x20,  0x1f,  0x00,\r\n      },\r\n  \r\n      // Advanced\r\n      // 3 frames\r\n      {\r\n          // Advanced 1st frame\r\n          // width = 21\r\n          // height = 32\r\n          0x00,  0x00,  0xfc,  0x00,  0x00,  0x00,  0xe0,  0xf0,  0x74,  0x30,  0xe0,  0x00,  0x00,  0x10,  0x00,  0xf0,  0x00,  0x00,  0x00,  0xf0,  0x00,  \r\n          0x00,  0x00,  0xff,  0x00,  0x00,  0x00,  0x00,  0x01,  0xfd,  0x01,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x03,  0x00,  0x03,  0x00,  \r\n          0x00,  0x80,  0xbf,  0x80,  0x00,  0x00,  0x00,  0x00,  0xff,  0x00,  0x00,  0x00,  0xf0,  0x08,  0x04,  0x04,  0x44,  0x44,  0x44,  0x48,  0x50, \r\n          0x07,  0x0f,  0x2b,  0x09,  0x07,  0x00,  0x00,  0x00,  0x3f,  0x00,  0x00,  0x00,  0x01,  0x02,  0x04,  0x04,  0x04,  0x04,  0x04,  0x02,  0x01,\r\n  \r\n          // Advanced 2nd frame\r\n          // width = 21\r\n          // height = 32\r\n          0xe0,  0xf0,  0x74,  0x30,  0xe0,  0x00,  0x00,  0x00,  0xfc,  0x00,  0x00,  0x00,  0x00,  0xf0,  0x00,  0x10,  0x00,  0xc0,  0x00,  0x30,  0x00,  \r\n          0x00,  0x01,  0xfd,  0x01,  0x00,  0x00,  0x00,  0x00,  0x7f,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x03,  0x00,  0x03,  0x00,  0x02,  0x00,  \r\n          0x00,  0x00,  0xff,  0x00,  0x00,  0x00,  0x0e,  0x1f,  0xd7,  0x13,  0x0e,  0x00,  0xf0,  0x08,  0x04,  0x04,  0xc4,  0x04,  0x04,  0x08,  0xf0, \r\n          0x00,  0x00,  0x3f,  0x00,  0x00,  0x00,  0x00,  0x00,  0x3f,  0x00,  0x00,  0x00,  0x01,  0x02,  0x04,  0x00,  0x07,  0x00,  0x04,  0x02,  0x01,\r\n  \r\n          // Advanced final frame\r\n          // width = 21\r\n          // height = 32\r\n          0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x10, 0x00, 0xf0, 0x00, 0xc0, 0x00, \r\n          0x00,  0x00,  0xff,  0x00,  0x00,  0x00,  0x00,  0x00,  0xff,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x03,  0x00,  0x00,  0x00,  \r\n          0x70,  0xf8,  0xbb,  0x98,  0x70,  0x00,  0x00,  0x80,  0xbf,  0x80,  0x00,  0x00,  0xf0,  0x08,  0x04,  0x04,  0x44,  0x24,  0x10,  0x08,  0xe0, \r\n          0x00,  0x00,  0x3e,  0x00,  0x00,  0x00,  0x07,  0x0f,  0x2b,  0x09,  0x07,  0x00,  0x01,  0x02,  0x04,  0x04,  0x04,  0x04,  0x04,  0x02,  0x01,\r\n      }\r\n    };\r\n  #else\r\n    #if defined(MODEL_TS100) || defined(MODEL_Pinecil) || defined(MODEL_Pinecilv2)\r\n    const uint8_t buttonA[] = {\r\n        // width = 42\r\n        // height = 16\r\n        0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x04, 0x02, 0x02, 0x01, 0x81, 0x49, 0x31, 0x01, 0xc1, 0x25, 0x19, 0x01, 0xc1, 0x25, 0x19, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r\n        0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x40, 0x40, 0x80, 0x89, 0x8a, 0x88, 0x94,\r\n        0x8c, 0x94, 0xae, 0x80, 0xbe, 0x8e, 0xa6, 0x8e, 0xa6, 0x8e, 0xa6, 0x8e, 0xa6, 0x8a, 0xa6, 0x8a, 0xa6, 0x8a, 0xa6, 0x8a, 0x46, 0x4a, 0x22, 0x18, 0x07, 0x00, 0x00, 0x00};\r\n    \r\n    const uint8_t disconnectedTip[] = {\r\n        // width = 42\r\n        // height = 16\r\n        0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xc0, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xcc, 0x9c, 0x38, 0x70, 0xe0, 0xc0, 0x80, 0x20, 0x70, 0x38, 0x1c, 0xcc, 0x40,\r\n        0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0x60, 0xe0, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x05, 0x00, 0x07, 0x01, 0x04, 0x01, 0x04, 0x01,\r\n        0x04, 0x31, 0x38, 0x1c, 0x0e, 0x04, 0x01, 0x03, 0x07, 0x0e, 0x1c, 0x39, 0x30, 0x01, 0x03, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x09, 0x0f, 0x00};\r\n    \r\n    #elif defined(MODEL_TS80) || defined(MODEL_TS80P)\r\n    const uint8_t buttonA[] = {\r\n        // width = 42\r\n        // height = 16\r\n        0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x04, 0x02, 0x02, 0x01, 0x81, 0x49, 0x31, 0x01, 0xc1, 0x25, 0x19, 0x01, 0xc1, 0x25, 0x19, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r\n        0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x40, 0x40, 0x80, 0x81, 0x8a, 0x88, 0x88,\r\n        0x8c, 0x95, 0x80, 0x9c, 0xa6, 0x8e, 0xa6, 0x8c, 0x80, 0x94, 0x8c, 0x94, 0x8c, 0x94, 0x8c, 0x94, 0x80, 0x88, 0x88, 0x88, 0x48, 0x48, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00};\r\n    \r\n    const uint8_t disconnectedTip[] = {\r\n        // width = 42\r\n        // height = 16\r\n        0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x80, 0x80, 0x80, 0x8c, 0x9c, 0x38, 0x70, 0xe0, 0xc0, 0x80, 0x20, 0x70, 0x38, 0x1c, 0x0c, 0x00,\r\n        0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xa0, 0xe0, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x03, 0x04, 0x01, 0x04, 0x01, 0x00, 0x02, 0x01,\r\n        0x02, 0x31, 0x38, 0x1c, 0x0e, 0x04, 0x01, 0x03, 0x07, 0x0e, 0x1c, 0x39, 0x31, 0x01, 0x01, 0x00, 0x02, 0x01, 0x02, 0x01, 0x04, 0x01, 0x04, 0x01, 0x0a, 0x01, 0x0f, 0x00};\r\n    \r\n    #elif defined(MODEL_MHP30)\r\n    const uint8_t buttonA[] = {\r\n        // width = 42\r\n        // height = 16\r\n        0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x04, 0x02, 0x02, 0x81, 0x81, 0x41, 0x41, 0x41, 0x41, 0x21, 0x01, 0xc1, 0x25, 0x19, 0x01, 0x81, 0x49, 0x31, 0x01, 0xc1, 0x25, 0x19,\r\n        0x01, 0xa1, 0xa1, 0x41, 0x41, 0x01, 0x02, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x40, 0x40, 0x83, 0x87, 0x83, 0xab, 0x86,\r\n        0x96, 0x8e, 0xa6, 0x9c, 0xad, 0x8c, 0xb8, 0x89, 0xa4, 0x84, 0x84, 0x92, 0x82, 0x81, 0xa9, 0x80, 0x84, 0x80, 0x81, 0x80, 0x40, 0x40, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00};\r\n    \r\n    const uint8_t disconnectedTip[] = {\r\n        // width = 42\r\n        // height = 16\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0xd0, 0xc8, 0x08, 0x10, 0x10, 0x10, 0x10,\r\n        0x20, 0x20, 0x20, 0x40, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x04, 0x38, 0x00,\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x04, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\r\n    #endif\r\n    \r\n    const uint8_t buttonB[] = {\r\n      // width = 42\r\n      // height = 16\r\n      0x00, 0x00, 0x00, 0xe0, 0x18, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x71, 0x55, 0x71, 0x01, 0x01, 0xfd, 0x01, 0x01, 0x81, 0xbd, 0x81, 0x01, 0x01,\r\n      0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,\r\n      0x80, 0x80, 0xbf, 0x80, 0x80, 0x8e, 0xaa, 0x8e, 0x80, 0x83, 0xba, 0x83, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00};\r\n    \r\n    // const uint8_t brightnessIcon[] = {\r\n    //     // width = 16\r\n    //     // height = 16\r\n    //     0x80, 0x86, 0x8E, 0x9C, 0x18, 0xC0, 0xE0, 0xEF, 0xEF, 0xE0, 0xC0, 0x18, 0x9C, 0x8E, 0x86, 0x80, 0x01, 0x61, 0x71, 0x39, 0x18, 0x03, 0x07, 0xF7, 0xF7, 0x07, 0x03, 0x18, 0x39, 0x71, 0x61, 0x01};\r\n    \r\n    // const uint8_t invertDisplayIcon[] = {\r\n    //     // width = 24\r\n    //     // height = 16\r\n    //     0xFE, 0x01, 0x79, 0x25, 0x79, 0x01, 0xFE, 0x00, 0x20, 0x20, 0x20, 0x20, 0xDF, 0x07, 0x8F, 0xDF, 0xFF, 0x01, 0xFE, 0x86, 0xDA, 0x86, 0xFE, 0x01,\r\n    //     0x7F, 0x80, 0xA4, 0xBE, 0xA0, 0x80, 0x7F, 0x00, 0x04, 0x0E, 0x1F, 0x04, 0xFB, 0xFB, 0xFB, 0xFB, 0xFF, 0x80, 0x7F, 0x5B, 0x41, 0x5F, 0x7F, 0x80};\r\n    \r\n    const uint8_t RepeatOnce[] = {\r\n      // width = 16\r\n      // height = 16\r\n      0x00, 0xc0, 0xf0, 0x78, 0x1c, 0x0c, 0x0e, 0x06, 0x06, 0x0e, 0x2c, 0x3c, 0x38, 0x3c, 0x00, 0x00,\r\n      0x00, 0x01, 0x08, 0x04, 0x7e, 0x00, 0x00, 0x60, 0x60, 0x70, 0x30, 0x38, 0x1e, 0x0f, 0x03, 0x00};\r\n  \r\n    const uint8_t RepeatInf[] = {\r\n      // width = 16\r\n      // height = 16\r\n      0x00, 0xc0, 0xf0, 0x78, 0x1c, 0x0c, 0x0e, 0x06, 0x06, 0x0e, 0x2c, 0x3c, 0x38, 0x3c, 0x00, 0x00,\r\n      0x00, 0x31, 0x49, 0x48, 0x30, 0x48, 0x48, 0x30, 0x00, 0x00, 0x30, 0x38, 0x1e, 0x0f, 0x03, 0x00};\r\n\r\n    const uint8_t UnavailableIcon[] = {\r\n        // width = 16\r\n        // height = 16\r\n        0x00, 0xc0, 0x30, 0x08, 0x04, 0x04, 0x02, 0x82, 0xc2, 0xe2, 0x74, 0x24, 0x08, 0x30, 0xc0, 0x00,\r\n        0x00, 0x03, 0x0c, 0x10, 0x24, 0x2e, 0x47, 0x43, 0x41, 0x40, 0x20, 0x20, 0x10, 0x0c, 0x03, 0x00};\r\n\r\n    #define SETTINGS_ICON_WIDTH 16\r\n    #define SETTINGS_ICON_HEIGHT 16\r\n    /*\r\n     * 16x16 icons\r\n     * 32 * 3 = Frame size * Frame count\r\n     * */\r\n    const uint8_t SettingsMenuIcons[][32 * 3] = {\r\n      // Power\r\n      // 3 frames\r\n      {\r\n          // Power 1st frame\r\n          // width = 16\r\n          // height = 16\r\n          0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x17, 0x0f, 0x05, 0x00, 0x00, 0x00, 0x00, //\r\n          0x00, 0x1c, 0x55, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //\r\n  \r\n          // Power 2nd frame\r\n          // width = 16\r\n          // height = 16\r\n          0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1c, 0xdf, 0x77, 0x33, 0x11, 0x00, 0x00, 0x00, //\r\n          0x00, 0x07, 0x75, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //\r\n  \r\n          // Power final frame\r\n          // width = 16\r\n          // height = 16\r\n          0x00, 0x38, 0xaa, 0x38, 0x00, 0x20, 0x30, 0x3c, 0xff, 0xff, 0xff, 0x77, 0x33, 0x13, 0x01, 0x00, //\r\n          0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x42, 0x33, 0x1f, 0x0f, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, //\r\n      },\r\n  \r\n      // Soldering\r\n      // 3 frames\r\n      {\r\n          // Soldering 1st frame\r\n          // width = 16\r\n          // height = 16\r\n          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0xE0, 0x50, 0x28, 0x14, 0x0A, 0x06, 0x00, //\r\n          0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //\r\n  \r\n          // Soldering 2nd frame\r\n          // width = 16\r\n          // height = 16\r\n          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0xE0, 0x50, 0x28, 0x14, 0x0A, 0x06, 0x00, //\r\n          0x00, 0x48, 0x26, 0x10, 0x08, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //\r\n  \r\n          // Soldering final frame\r\n          // width = 16\r\n          // height = 16\r\n          0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0xE0, 0x50, 0x28, 0x14, 0x0A, 0x06, 0x00, //\r\n          0x00, 0x49, 0x26, 0x10, 0x08, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //\r\n      },\r\n  \r\n      // Sleep\r\n      // 3 frames\r\n      {\r\n          // Sleep 1st frame\r\n          // width = 16\r\n          // height = 16\r\n          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //\r\n          0x00, 0x00, 0x00, 0x00, 0x44, 0x64, 0x74, 0x5C, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //\r\n  \r\n          // Sleep 2nd frame\r\n          // width = 16\r\n          // height = 16\r\n          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0xC0, 0xC0, 0xC0, 0x00, //\r\n          0x00, 0x00, 0x00, 0x00, 0x44, 0x64, 0x74, 0x5C, 0x4C, 0x00, 0x06, 0x07, 0x07, 0x05, 0x04, 0x00, //\r\n  \r\n          // Sleep final frame\r\n          // width = 16\r\n          // height = 16\r\n          0x00, 0xC6, 0xE6, 0xF6, 0xBE, 0x9E, 0x8E, 0x86, 0x00, 0x00, 0x40, 0x40, 0xC0, 0xC0, 0xC0, 0x00, //\r\n          0x00, 0x01, 0x01, 0x01, 0x45, 0x65, 0x75, 0x5D, 0x4C, 0x00, 0x06, 0x07, 0x07, 0x05, 0x04, 0x00, //\r\n      },\r\n  \r\n      // UI\r\n      // 3 frames\r\n      {\r\n          // UI 1st frame\r\n          // width = 16\r\n          // height = 16\r\n          0x00, 0x80, 0x06, 0x06, 0x06, 0x06, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x00, //\r\n          0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x00, //\r\n  \r\n          // UI 2nd frame\r\n          // width = 16\r\n          // height = 16\r\n          0x00, 0x80, 0x06, 0x06, 0x06, 0x06, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x00, //\r\n          0x00, 0x00, 0x61, 0x60, 0x00, 0x00, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x00, //\r\n  \r\n          // UI final frame\r\n          // width = 16\r\n          // height = 16\r\n          0x00, 0x80, 0x06, 0x86, 0x46, 0x06, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x00, //\r\n          0x00, 0x00, 0x61, 0x60, 0x00, 0x00, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x00, //\r\n      },\r\n  \r\n      // Advanced\r\n      // 3 frames\r\n      {\r\n          // Advanced 1st frame\r\n          // width = 16\r\n          // height = 16\r\n          0x00, 0xfe, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x0c, 0x00, 0x14, 0x00, 0x18, 0x00, 0x14, 0x00, //\r\n          0x1c, 0x55, 0x1c, 0x00, 0x1c, 0x55, 0x1c, 0x00, 0x00, 0x1c, 0x22, 0x41, 0x49, 0x11, 0x22, 0x0c, //\r\n  \r\n          // Advanced 2nd frame\r\n          // width = 16\r\n          // height = 16\r\n          0xe0, 0xae, 0xe0, 0x00, 0x80, 0xbe, 0x80, 0x00, 0x08, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x08, 0x00, //\r\n          0x00, 0x7e, 0x00, 0x00, 0x03, 0x7a, 0x03, 0x00, 0x00, 0x1c, 0x22, 0x01, 0x79, 0x01, 0x22, 0x1c, //\r\n  \r\n          // Advanced final frame\r\n          // width = 16\r\n          // height = 16\r\n        0x00, 0x7e, 0x00, 0x00, 0x38, 0xaa, 0x38, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x1c, 0x00,//\r\n        0x07, 0x75, 0x07, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x0c, 0x22, 0x11, 0x49, 0x41, 0x22, 0x1c,//\r\n      },\r\n    #ifdef NOTUSED\r\n  \r\n      // Calibration (Not used, kept for future menu layouts)\r\n      // 3 frames\r\n      {\r\n          // Calibration 1st frame (Not used, kept for future menu layouts)\r\n          // width = 16\r\n          // height = 16\r\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x70, 0x3A, 0x1E, 0x0E, 0x1C, 0x30, 0x00,//\r\n        0x00, 0x10, 0x3A, 0x1C, 0x1E, 0x17, 0x23, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,//\r\n\r\n          // Calibration 2nd frame (Not used, kept for future menu layouts)\r\n          // width = 16\r\n          // height = 16\r\n          0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0xC0, 0xE0, 0x70, 0x3A, 0x1E, 0x0E, 0x1C, 0x30, 0x00, // \r\n          0x00, 0x10, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x03, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //\r\n\r\n          // Calibration final frame (Not used, kept for future menu layouts)\r\n          // width = 16\r\n          // height = 16\r\n          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE8, 0x70, 0x7A, 0x5E, 0x8E, 0x1C, 0x30, 0x00, //\r\n          0x00, 0x10, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //\r\n\r\n    #endif\r\n    };\r\n  #endif\r\n// clang-format on\r\n#endif /* FONT_H_ */"
  },
  {
    "path": "source/Core/Drivers/HUB238.cpp",
    "content": "#include \"HUB238.hpp\"\n#include \"I2CBB2.hpp\"\n#include \"Utils.hpp\"\n#include \"configuration.h\"\n\n#if POW_PD_EXT == 1\nbool hub238_probe() { return I2CBB2::probe(HUB238_ADDR); }\n\nextern int32_t powerSupplyWattageLimit;\n\nuint16_t hub238_debug_state() {\n  uint8_t status0 = 0;\n  uint8_t status1 = 0;\n  if (!I2CBB2::Mem_Read(HUB238_ADDR, HUB238_REG_PD_STATUS0, &status0, 1)) {\n    return 0xFFFF;\n  }\n  if (!I2CBB2::Mem_Read(HUB238_ADDR, HUB238_REG_PD_STATUS1, &status1, 1)) {\n    return 0xFFFF;\n  }\n  return status1 | (((uint16_t)status0) << 8);\n}\nuint16_t pdo_slot_to_currentx100(uint8_t temp) {\n  temp = temp & 0b1111;\n  switch (temp) {\n  case 0b0000:\n    return 50;\n  case 0b0001:\n    return 70;\n  case 0b0010:\n    return 100;\n  case 0b0011:\n    return 125;\n  case 0b0100:\n    return 150;\n  case 0b0101:\n    return 175;\n  case 0b0110:\n    return 200;\n  case 0b0111:\n    return 225;\n  case 0b1000:\n    return 250;\n  case 0b1001:\n    return 275;\n  case 0b1010:\n    return 300;\n  case 0b1011:\n    return 325;\n  case 0b1100:\n    return 350;\n  case 0b1101:\n    return 400;\n  case 0b1110:\n    return 450;\n  case 0b1111:\n    return 500;\n  }\n}\nuint16_t hub238_getVoltagePDOCurrent(uint8_t voltage) {\n  uint8_t reg = HUB238_REG_SRC_PDO_5V;\n  switch (voltage) {\n  case 5:\n    reg = HUB238_REG_SRC_PDO_5V;\n    break;\n  case 9:\n    reg = HUB238_REG_SRC_PDO_9V;\n    break;\n  case 12:\n    reg = HUB238_REG_SRC_PDO_12V;\n    break;\n  case 15:\n    reg = HUB238_REG_SRC_PDO_15V;\n    break;\n  case 18:\n    reg = HUB238_REG_SRC_PDO_18V;\n    break;\n  case 20:\n    reg = HUB238_REG_SRC_PDO_20V;\n    break;\n  default:\n    return 0;\n  }\n  uint8_t temp = 0;\n  if (I2CBB2::Mem_Read(HUB238_ADDR, reg, &temp, 1) == true) {\n    if (temp & HUB238_PDO_DETECTED) {\n      return pdo_slot_to_currentx100(temp);\n    }\n  }\n  return 0;\n}\nuint8_t findBestPDO() {\n  uint8_t  temp              = 0;\n  uint16_t ilim              = 0;\n  uint16_t minimumx10current = 0;\n#if USB_PD_VMAX >= 20\n  ilim              = hub238_getVoltagePDOCurrent(20);\n  minimumx10current = Utils::RequiredCurrentForTipAtVoltage(200);\n  if (ilim != 0 && ilim / 10 >= minimumx10current) {\n    powerSupplyWattageLimit = ((20 * ilim) / 100) - 2; // We take off 2W for safety of overhead\n    return 0b1010;\n  }\n#endif\n#if USB_PD_VMAX >= 18\n  ilim              = hub238_getVoltagePDOCurrent(18);\n  minimumx10current = Utils::RequiredCurrentForTipAtVoltage(180);\n  if (ilim != 0 && ilim / 10 >= minimumx10current) {\n    powerSupplyWattageLimit = ((18 * ilim) / 100) - 2; // We take off 2W for safety of overhead\n    return 0b1001;\n  }\n#endif\n#if USB_PD_VMAX >= 15\n  ilim              = hub238_getVoltagePDOCurrent(15);\n  minimumx10current = Utils::RequiredCurrentForTipAtVoltage(150);\n  if (ilim != 0 && ilim / 10 >= minimumx10current) {\n    powerSupplyWattageLimit = ((15 * ilim) / 100) - 2; // We take off 2W for safety of overhead\n    return 0b1000;\n  }\n#endif\n#if USB_PD_VMAX >= 12\n  ilim              = hub238_getVoltagePDOCurrent(12);\n  minimumx10current = Utils::RequiredCurrentForTipAtVoltage(120);\n  if (ilim != 0 && (ilim / 10) >= minimumx10current) {\n    powerSupplyWattageLimit = ((12 * ilim) / 100) - 2; // We take off 2W for safety of overhead\n    return 0b0011;\n  }\n#endif\n#if USB_PD_VMAX >= 9\n  ilim              = hub238_getVoltagePDOCurrent(9);\n  minimumx10current = Utils::RequiredCurrentForTipAtVoltage(90);\n  if (ilim != 0 && ilim / 10 >= minimumx10current) {\n    powerSupplyWattageLimit = ((9 * ilim) / 100) - 2; // We take off 2W for safety of overhead\n    return 0b0010;\n  }\n#endif\n\n  powerSupplyWattageLimit = 10;\n  return 0b0001; // 5V PDO\n}\nvolatile uint8_t haveSelected = 0xFF;\n\nvoid hub238_check_negotiation() {\n  // Dont do anything for first 2 seconds as its internal state machine corrupts if we ask it to change too fast\n\n  if (xTaskGetTickCount() < 2000) {\n    return;\n  }\n  // Want to check if there is a better PDO to be using\n  // First, exit early if we already have changed _or_ no PD\n  // Even if it negotiates the same voltage as we want, we still re-run it as that makes it ignore the resistor\n  // and instead ask for max amps\n  if (haveSelected != 0xFF || !hub238_has_negotiated() || hub238_source_voltage() == 0) {\n    return;\n  }\n  uint8_t currentPDO = 0;\n  vTaskDelay(5);\n\n  uint8_t bestPDO = findBestPDO();\n\n  if (I2CBB2::Mem_Read(HUB238_ADDR, HUB238_REG_SRC_PDO, &currentPDO, 1) == true) {\n    currentPDO >>= 4; // grab upper bits\n    if (currentPDO == bestPDO) {\n      haveSelected = bestPDO;\n      return;\n    }\n    currentPDO = bestPDO << 4;\n    if (I2CBB2::Mem_Write(HUB238_ADDR, HUB238_REG_SRC_PDO, &currentPDO, 1) == true) {\n\n      currentPDO = 0x01; // request for new PDO\n      if (I2CBB2::Mem_Write(HUB238_ADDR, HUB238_REG_GO_COMMAND, &currentPDO, 1) == true) {\n        haveSelected = bestPDO;\n        vTaskDelay(50);\n\n        return;\n      }\n    }\n  }\n}\nbool hub238_has_run_selection() { return haveSelected != 0xFF; }\n\nbool hub238_has_negotiated() {\n  uint8_t temp = 0;\n  if (I2CBB2::Mem_Read(HUB238_ADDR, HUB238_REG_PD_STATUS1, &temp, 1) == true) {\n    temp >>= 3;\n    return (temp & 0b111) == 0b001; // success\n  }\n  return false;\n}\n\n// Return selected source voltage in V\nuint16_t hub238_source_voltage() {\n  uint8_t temp = 0;\n  if (I2CBB2::Mem_Read(HUB238_ADDR, HUB238_REG_PD_STATUS0, &temp, 1) == true) {\n    temp >>= 4;\n    switch (temp) {\n    case 0b0001:\n      return 5;\n    case 0b0010:\n      return 9;\n    case 0b0011:\n      return 12;\n    case 0b0100:\n      return 15;\n    case 0b0101:\n      return 18;\n    case 0b0110:\n      return 20;\n    }\n  }\n  return 0;\n}\n// Return selected source current in Amps * 100\nuint8_t hub238_source_currentX100() {\n  uint8_t temp = 0;\n  if (I2CBB2::Mem_Read(HUB238_ADDR, HUB238_REG_PD_STATUS0, &temp, 1) == true) {\n    temp &= 0b1111;\n    return pdo_slot_to_currentx100(temp);\n  }\n  return 10; // Failsafe to 0.1 amp\n}\n#endif\n"
  },
  {
    "path": "source/Core/Drivers/HUB238.hpp",
    "content": "#pragma once\n\n#ifndef _DRIVERS_HUB238_HPP_\n#define _DRIVERS_HUB238_HPP_\n#include \"configuration.h\"\n#if POW_PD_EXT == 1\n#include <stdbool.h>\n#include <stdint.h>\n\n#define HUB238_ADDR 0x08 << 1\n\n#define HUB238_REG_PD_STATUS0  0x00\n#define HUB238_REG_PD_STATUS1  0x01\n#define HUB238_REG_SRC_PDO_5V  0x02\n#define HUB238_REG_SRC_PDO_9V  0x03\n#define HUB238_REG_SRC_PDO_12V 0x04\n#define HUB238_REG_SRC_PDO_15V 0x05\n#define HUB238_REG_SRC_PDO_18V 0x06\n#define HUB238_REG_SRC_PDO_20V 0x07\n#define HUB238_REG_SRC_PDO     0x08\n#define HUB238_REG_GO_COMMAND  0x09\n\n#define HUB238_PDO_DETECTED (0x01 << 7)\n// The HUB238 is fairly simple device to interact to, with fairly few registers all in all\n//  It only appears to support fixed PDO's up to 20V\n//  And they have just dedicated registers to each potential option\n//  Given a tip resistance we try and pick the best possible PDO option to suit that resistance\n//  (Using I2C overrides any hardware strapping).\n\n// Probe if the hub238 exists on the I2C bus\nbool hub238_probe();\n// If we have not manually picked a PDO,\n// but there is an active PD supply, try for our preference\n\nvoid hub238_check_negotiation();\n\n// Returns true when negotiation has finished\nbool hub238_has_negotiated();\n// Returns true when we have run selection and negotiated higher current\nbool hub238_has_run_selection();\n// Return an encoded state for debugging\nuint16_t hub238_debug_state();\n// Return selected source voltage in V\nuint16_t hub238_source_voltage();\n// Return selected source current in Amps * 100\nuint8_t hub238_source_currentX100();\n\nuint16_t hub238_getVoltagePDOCurrent(uint8_t voltage);\n\n#endif\n#endif\n"
  },
  {
    "path": "source/Core/Drivers/I2CBB1.cpp",
    "content": "/*\r\n * I2CBB1.cpp\r\n *\r\n *  Created on: 12 Jun 2020\r\n *      Author: Ralim\r\n */\r\n#include \"configuration.h\"\r\n#ifdef I2C_SOFT_BUS_1\r\n#include \"FreeRTOS.h\"\r\n#include <I2CBB1.hpp>\r\nSemaphoreHandle_t I2CBB1::I2CSemaphore = NULL;\r\nStaticSemaphore_t I2CBB1::xSemaphoreBuffer;\r\nvoid              I2CBB1::init() {\r\n  // Set GPIO's to output open drain\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  __HAL_RCC_GPIOA_CLK_ENABLE();\r\n  __HAL_RCC_GPIOB_CLK_ENABLE();\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;\r\n  GPIO_InitStruct.Pin   = SDA_Pin;\r\n  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_OD;\r\n  GPIO_InitStruct.Pull  = GPIO_PULLUP;\r\n  HAL_GPIO_Init(SDA_GPIO_Port, &GPIO_InitStruct);\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;\r\n  GPIO_InitStruct.Pin   = SCL_Pin;\r\n  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_OD;\r\n  GPIO_InitStruct.Pull  = GPIO_PULLUP;\r\n  HAL_GPIO_Init(SCL_GPIO_Port, &GPIO_InitStruct);\r\n  SOFT_SDA1_HIGH();\r\n  SOFT_SCL1_HIGH();\r\n  // To ensure bus is unlocked; we toggle the Clock a bunch of times to make things error out\r\n  for (int i = 0; i < 128; i++) {\r\n    SOFT_SCL1_LOW();\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    SOFT_SCL1_HIGH();\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n  }\r\n  I2CSemaphore = xSemaphoreCreateMutexStatic(&xSemaphoreBuffer);\r\n  unlock();\r\n}\r\n\r\nbool I2CBB1::probe(uint8_t address) {\r\n  if (!lock()) {\r\n    return false;\r\n  }\r\n  start();\r\n  bool ack = send(address);\r\n  stop();\r\n  unlock();\r\n  return ack;\r\n}\r\n\r\nbool I2CBB1::Mem_Read(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pData, uint16_t Size) {\r\n  if (!lock()) {\r\n    return false;\r\n  }\r\n  start();\r\n  bool ack = send(DevAddress);\r\n  if (!ack) {\r\n    stop();\r\n    unlock();\r\n    return false;\r\n  }\r\n  ack = send(MemAddress);\r\n  if (!ack) {\r\n    stop();\r\n    unlock();\r\n    return false;\r\n  }\r\n  SOFT_SCL1_LOW();\r\n  SOFT_I2C_DELAY();\r\n  //\tstop();\r\n  start();\r\n  ack = send(DevAddress | 1);\r\n  if (!ack) {\r\n    stop();\r\n    unlock();\r\n    return false;\r\n  }\r\n  while (Size) {\r\n    pData[0] = read(Size > 1);\r\n    pData++;\r\n    Size--;\r\n  }\r\n  stop();\r\n  unlock();\r\n  return true;\r\n}\r\n\r\nbool I2CBB1::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, const uint8_t *pData, uint16_t Size) {\r\n  if (!lock()) {\r\n    return false;\r\n  }\r\n  start();\r\n  bool ack = send(DevAddress);\r\n  if (!ack) {\r\n    stop();\r\n    unlock();\r\n    return false;\r\n  }\r\n  ack = send(MemAddress);\r\n  if (!ack) {\r\n    stop();\r\n    unlock();\r\n    return false;\r\n  }\r\n  while (Size) {\r\n    resetWatchdog();\r\n    ack = send(pData[0]);\r\n    if (!ack) {\r\n      stop();\r\n      unlock();\r\n      return false;\r\n    }\r\n    pData++;\r\n    Size--;\r\n  }\r\n  stop();\r\n  unlock();\r\n  return true;\r\n}\r\n\r\nvoid I2CBB1::Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size) {\r\n  if (!lock()) {\r\n    return;\r\n  }\r\n  start();\r\n  bool ack = send(DevAddress);\r\n  if (!ack) {\r\n    stop();\r\n    unlock();\r\n    return;\r\n  }\r\n  while (Size) {\r\n    ack = send(pData[0]);\r\n    if (!ack) {\r\n      stop();\r\n      unlock();\r\n      return;\r\n    }\r\n    pData++;\r\n    Size--;\r\n  }\r\n  stop();\r\n  unlock();\r\n}\r\n\r\nvoid I2CBB1::Receive(uint16_t DevAddress, uint8_t *pData, uint16_t Size) {\r\n  if (!lock()) {\r\n    return;\r\n  }\r\n  start();\r\n  bool ack = send(DevAddress | 1);\r\n  if (!ack) {\r\n    stop();\r\n    unlock();\r\n    return;\r\n  }\r\n  while (Size) {\r\n    pData[0] = read(Size > 1);\r\n    pData++;\r\n    Size--;\r\n  }\r\n  stop();\r\n  unlock();\r\n}\r\n\r\nvoid I2CBB1::TransmitReceive(uint16_t DevAddress, uint8_t *pData_tx, uint16_t Size_tx, uint8_t *pData_rx, uint16_t Size_rx) {\r\n  if (Size_tx == 0 && Size_rx == 0) {\r\n    return;\r\n  }\r\n  if (lock() == false) {\r\n    return;\r\n  }\r\n  if (Size_tx) {\r\n    start();\r\n    bool ack = send(DevAddress);\r\n    if (!ack) {\r\n      stop();\r\n      unlock();\r\n      return;\r\n    }\r\n    while (Size_tx) {\r\n      ack = send(pData_tx[0]);\r\n      if (!ack) {\r\n        stop();\r\n        unlock();\r\n        return;\r\n      }\r\n      pData_tx++;\r\n      Size_tx--;\r\n    }\r\n  }\r\n  if (Size_rx) {\r\n    start();\r\n    bool ack = send(DevAddress | 1);\r\n    if (!ack) {\r\n      stop();\r\n      unlock();\r\n      return;\r\n    }\r\n    while (Size_rx) {\r\n      pData_rx[0] = read(Size_rx > 1);\r\n      pData_rx++;\r\n      Size_rx--;\r\n    }\r\n  }\r\n  stop();\r\n  unlock();\r\n}\r\n\r\nvoid I2CBB1::start() {\r\n  /* I2C Start condition, data line goes low when clock is high */\r\n  SOFT_SCL1_HIGH();\r\n  SOFT_SDA1_HIGH();\r\n  SOFT_I2C_DELAY();\r\n  SOFT_SDA1_LOW();\r\n  SOFT_I2C_DELAY();\r\n  SOFT_SCL1_LOW();\r\n  SOFT_I2C_DELAY();\r\n  SOFT_SDA1_HIGH();\r\n}\r\n\r\nvoid I2CBB1::stop() {\r\n  /* I2C Stop condition, clock goes high when data is low */\r\n  SOFT_SDA1_LOW();\r\n  SOFT_I2C_DELAY();\r\n  SOFT_SCL1_HIGH();\r\n  SOFT_I2C_DELAY();\r\n  SOFT_SDA1_HIGH();\r\n  SOFT_I2C_DELAY();\r\n}\r\n\r\nbool I2CBB1::send(uint8_t value) {\r\n\r\n  for (uint8_t i = 0; i < 8; i++) {\r\n    write_bit(value & 0x80); // write the most-significant bit\r\n    value <<= 1;\r\n  }\r\n\r\n  SOFT_SDA1_HIGH();\r\n  bool ack = (read_bit() == 0);\r\n  return ack;\r\n}\r\n\r\nuint8_t I2CBB1::read(bool ack) {\r\n  uint8_t B = 0;\r\n\r\n  uint8_t i;\r\n  for (i = 0; i < 8; i++) {\r\n    B <<= 1;\r\n    B |= read_bit();\r\n  }\r\n\r\n  SOFT_SDA1_HIGH();\r\n  if (ack) {\r\n    write_bit(0);\r\n  } else {\r\n    write_bit(1);\r\n  }\r\n  return B;\r\n}\r\n\r\nuint8_t I2CBB1::read_bit() {\r\n  uint8_t b;\r\n\r\n  SOFT_SDA1_HIGH();\r\n  SOFT_I2C_DELAY();\r\n  SOFT_SCL1_HIGH();\r\n  SOFT_I2C_DELAY();\r\n\r\n  if (SOFT_SDA1_READ()) {\r\n    b = 1;\r\n  } else {\r\n    b = 0;\r\n  }\r\n\r\n  SOFT_SCL1_LOW();\r\n  return b;\r\n}\r\n\r\nvoid I2CBB1::unlock() { xSemaphoreGive(I2CSemaphore); }\r\n\r\nbool I2CBB1::lock() {\r\n  if (I2CSemaphore == NULL) {\r\n  }\r\n  bool a = xSemaphoreTake(I2CSemaphore, (TickType_t)100) == pdTRUE;\r\n  return a;\r\n}\r\n\r\nbool I2CBB1::I2C_RegisterWrite(uint8_t address, uint8_t reg, uint8_t data) { return Mem_Write(address, reg, &data, 1); }\r\n\r\nuint8_t I2CBB1::I2C_RegisterRead(uint8_t address, uint8_t reg) {\r\n  uint8_t temp = 0;\r\n  Mem_Read(address, reg, &temp, 1);\r\n  return temp;\r\n}\r\n\r\nvoid I2CBB1::write_bit(uint8_t val) {\r\n  if (val) {\r\n    SOFT_SDA1_HIGH();\r\n  } else {\r\n    SOFT_SDA1_LOW();\r\n  }\r\n\r\n  SOFT_I2C_DELAY();\r\n  SOFT_SCL1_HIGH();\r\n  SOFT_I2C_DELAY();\r\n  SOFT_SCL1_LOW();\r\n}\r\n\r\nbool I2CBB1::writeRegistersBulk(const uint8_t address, const I2C_REG *registers, const uint8_t registersLength) {\r\n  for (int index = 0; index < registersLength; index++) {\r\n    if (!I2C_RegisterWrite(address, registers[index].reg, registers[index].val)) {\r\n      return false;\r\n    }\r\n    if (registers[index].pause_ms) {\r\n      delay_ms(registers[index].pause_ms);\r\n    }\r\n  }\r\n  return true;\r\n}\r\n\r\nbool I2CBB1::wakePart(uint16_t DevAddress) {\r\n  // wakepart is a special case  where only the device address is sent\r\n  if (!lock()) {\r\n    return false;\r\n  }\r\n  start();\r\n  bool ack = send(DevAddress);\r\n  stop();\r\n  unlock();\r\n  return ack;\r\n}\r\n#endif\r\n"
  },
  {
    "path": "source/Core/Drivers/I2CBB1.hpp",
    "content": "/*\r\n * I2CBB1.hpp\r\n *\r\n *  Created on: 12 Jun 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_MINIWARE_I2CBB1_HPP_\r\n#define BSP_MINIWARE_I2CBB1_HPP_\r\n#include \"configuration.h\"\r\n#ifdef I2C_SOFT_BUS_1\r\n#include \"BSP.h\"\r\n#include \"FreeRTOS.h\"\r\n#include \"Pins.h\"\r\n#include \"Setup.h\"\r\n#include \"Software_I2C.h\"\r\n#include \"semphr.h\"\r\n\r\nclass I2CBB1 {\r\npublic:\r\n  static void init();\r\n  // Probe if device ACK's address or not\r\n  static bool probe(uint8_t address);\r\n  // Issues a complete 8bit register read\r\n  static bool Mem_Read(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pData, uint16_t Size);\r\n  // Implements a register write\r\n  static bool    Mem_Write(uint16_t DevAddress, uint16_t MemAddress, const uint8_t *pData, uint16_t Size);\r\n  static void    Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size);\r\n  static void    Receive(uint16_t DevAddress, uint8_t *pData, uint16_t Size);\r\n  static void    TransmitReceive(uint16_t DevAddress, uint8_t *pData_tx, uint16_t Size_tx, uint8_t *pData_rx, uint16_t Size_rx);\r\n  static bool    I2C_RegisterWrite(uint8_t address, uint8_t reg, uint8_t data);\r\n  static uint8_t I2C_RegisterRead(uint8_t address, uint8_t reg);\r\n  typedef struct {\r\n    const uint8_t reg;      // The register to write to\r\n    uint8_t       val;      // The value to write to this register\r\n    const uint8_t pause_ms; // How many ms to pause _after_ writing this reg\r\n  } I2C_REG;\r\n  static bool writeRegistersBulk(const uint8_t address, const I2C_REG *registers, const uint8_t registersLength);\r\n  static bool wakePart(uint16_t DevAddress);\r\n\r\nprivate:\r\n  static SemaphoreHandle_t I2CSemaphore;\r\n  static StaticSemaphore_t xSemaphoreBuffer;\r\n  static void              unlock();\r\n  static bool              lock();\r\n  static void              start();\r\n  static void              stop();\r\n  static bool              send(uint8_t value);\r\n  static uint8_t           read(bool ack);\r\n  static uint8_t           read_bit();\r\n  static void              write_bit(uint8_t val);\r\n};\r\n#endif\r\n#endif /* BSP_MINIWARE_I2CBB_HPP_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/I2CBB2.cpp",
    "content": "/*\r\n * I2CBB2.cpp\r\n *\r\n *  Created on: 12 Jun 2020\r\n *      Author: Ralim\r\n */\r\n#include \"configuration.h\"\r\n#ifdef I2C_SOFT_BUS_2\r\n#include \"FreeRTOS.h\"\r\n#include <I2CBB2.hpp>\r\nSemaphoreHandle_t I2CBB2::I2CSemaphore = NULL;\r\nStaticSemaphore_t I2CBB2::xSemaphoreBuffer;\r\nvoid              I2CBB2::init() {\r\n  // Set GPIO's to output open drain\r\n  GPIO_InitTypeDef GPIO_InitStruct;\r\n  __HAL_RCC_GPIOA_CLK_ENABLE();\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;\r\n  GPIO_InitStruct.Pin   = SDA2_Pin;\r\n  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_OD;\r\n  GPIO_InitStruct.Pull  = GPIO_PULLUP;\r\n  HAL_GPIO_Init(SDA2_GPIO_Port, &GPIO_InitStruct);\r\n  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;\r\n  GPIO_InitStruct.Pin   = SCL2_Pin;\r\n  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_OD;\r\n  GPIO_InitStruct.Pull  = GPIO_PULLUP;\r\n  HAL_GPIO_Init(SCL2_GPIO_Port, &GPIO_InitStruct);\r\n  SOFT_SDA2_HIGH();\r\n  SOFT_SCL2_HIGH();\r\n  // To ensure bus is unlocked; we toggle the Clock a bunch of times to make things error out\r\n  for (int i = 0; i < 128; i++) {\r\n    SOFT_SCL2_LOW();\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    SOFT_SCL2_HIGH();\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n    asm(\"nop\");\r\n  }\r\n  I2CSemaphore = xSemaphoreCreateMutexStatic(&xSemaphoreBuffer);\r\n  unlock();\r\n}\r\n\r\nbool I2CBB2::probe(uint8_t address) {\r\n  if (!lock()) {\r\n    return false;\r\n  }\r\n  start();\r\n  bool ack = send(address);\r\n  stop();\r\n  unlock();\r\n  return ack;\r\n}\r\n\r\nbool I2CBB2::Mem_Read(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pData, uint16_t Size) {\r\n  if (!lock()) {\r\n    return false;\r\n  }\r\n  start();\r\n  bool ack = send(DevAddress);\r\n  if (!ack) {\r\n    stop();\r\n    unlock();\r\n    return false;\r\n  }\r\n  ack = send(MemAddress);\r\n  if (!ack) {\r\n    stop();\r\n    unlock();\r\n    return false;\r\n  }\r\n  SOFT_SCL2_LOW();\r\n  SOFT_I2C_DELAY();\r\n  //\tstop();\r\n  start();\r\n  ack = send(DevAddress | 1);\r\n  if (!ack) {\r\n    stop();\r\n    unlock();\r\n    return false;\r\n  }\r\n  while (Size) {\r\n    pData[0] = read(Size > 1);\r\n    pData++;\r\n    Size--;\r\n  }\r\n  stop();\r\n  unlock();\r\n  return true;\r\n}\r\n\r\nbool I2CBB2::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, const uint8_t *pData, uint16_t Size) {\r\n  if (!lock()) {\r\n    return false;\r\n  }\r\n  start();\r\n  bool ack = send(DevAddress);\r\n  if (!ack) {\r\n    stop();\r\n    unlock();\r\n    return false;\r\n  }\r\n  ack = send(MemAddress);\r\n  if (!ack) {\r\n    stop();\r\n    unlock();\r\n    return false;\r\n  }\r\n  while (Size) {\r\n    resetWatchdog();\r\n    ack = send(pData[0]);\r\n    if (!ack) {\r\n      stop();\r\n      unlock();\r\n      return false;\r\n    }\r\n    pData++;\r\n    Size--;\r\n  }\r\n  stop();\r\n  unlock();\r\n  return true;\r\n}\r\n\r\nvoid I2CBB2::Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size) {\r\n  if (!lock()) {\r\n    return;\r\n  }\r\n  start();\r\n  bool ack = send(DevAddress);\r\n  if (!ack) {\r\n    stop();\r\n    unlock();\r\n    return;\r\n  }\r\n  while (Size) {\r\n    ack = send(pData[0]);\r\n    if (!ack) {\r\n      stop();\r\n      unlock();\r\n      return;\r\n    }\r\n    pData++;\r\n    Size--;\r\n  }\r\n  stop();\r\n  unlock();\r\n}\r\n\r\nvoid I2CBB2::Receive(uint16_t DevAddress, uint8_t *pData, uint16_t Size) {\r\n  if (!lock()) {\r\n    return;\r\n  }\r\n  start();\r\n  bool ack = send(DevAddress | 1);\r\n  if (!ack) {\r\n    stop();\r\n    unlock();\r\n    return;\r\n  }\r\n  while (Size) {\r\n    pData[0] = read(Size > 1);\r\n    pData++;\r\n    Size--;\r\n  }\r\n  stop();\r\n  unlock();\r\n}\r\n\r\nvoid I2CBB2::TransmitReceive(uint16_t DevAddress, uint8_t *pData_tx, uint16_t Size_tx, uint8_t *pData_rx, uint16_t Size_rx) {\r\n  if (Size_tx == 0 && Size_rx == 0) {\r\n    return;\r\n  }\r\n  if (lock() == false) {\r\n    return;\r\n  }\r\n  if (Size_tx) {\r\n    start();\r\n    bool ack = send(DevAddress);\r\n    if (!ack) {\r\n      stop();\r\n      unlock();\r\n      return;\r\n    }\r\n    while (Size_tx) {\r\n      ack = send(pData_tx[0]);\r\n      if (!ack) {\r\n        stop();\r\n        unlock();\r\n        return;\r\n      }\r\n      pData_tx++;\r\n      Size_tx--;\r\n    }\r\n  }\r\n  if (Size_rx) {\r\n    start();\r\n    bool ack = send(DevAddress | 1);\r\n    if (!ack) {\r\n      stop();\r\n      unlock();\r\n      return;\r\n    }\r\n    while (Size_rx) {\r\n      pData_rx[0] = read(Size_rx > 1);\r\n      pData_rx++;\r\n      Size_rx--;\r\n    }\r\n  }\r\n  stop();\r\n  unlock();\r\n}\r\n\r\nvoid I2CBB2::start() {\r\n  /* I2C Start condition, data line goes low when clock is high */\r\n  SOFT_SCL2_HIGH();\r\n  SOFT_SDA2_HIGH();\r\n  SOFT_I2C_DELAY();\r\n  SOFT_SDA2_LOW();\r\n  SOFT_I2C_DELAY();\r\n  SOFT_SCL2_LOW();\r\n  SOFT_I2C_DELAY();\r\n  SOFT_SDA2_HIGH();\r\n}\r\n\r\nvoid I2CBB2::stop() {\r\n  /* I2C Stop condition, clock goes high when data is low */\r\n  SOFT_SDA2_LOW();\r\n  SOFT_I2C_DELAY();\r\n  SOFT_SCL2_HIGH();\r\n  SOFT_I2C_DELAY();\r\n  SOFT_SDA2_HIGH();\r\n  SOFT_I2C_DELAY();\r\n}\r\n\r\nbool I2CBB2::send(uint8_t value) {\r\n\r\n  for (uint8_t i = 0; i < 8; i++) {\r\n    write_bit(value & 0x80); // write the most-significant bit\r\n    value <<= 1;\r\n  }\r\n\r\n  SOFT_SDA2_HIGH();\r\n  bool ack = (read_bit() == 0);\r\n  return ack;\r\n}\r\n\r\nuint8_t I2CBB2::read(bool ack) {\r\n  uint8_t B = 0;\r\n\r\n  uint8_t i;\r\n  for (i = 0; i < 8; i++) {\r\n    B <<= 1;\r\n    B |= read_bit();\r\n  }\r\n\r\n  SOFT_SDA2_HIGH();\r\n  if (ack) {\r\n    write_bit(0);\r\n  } else {\r\n    write_bit(1);\r\n  }\r\n  return B;\r\n}\r\n\r\nuint8_t I2CBB2::read_bit() {\r\n  uint8_t b;\r\n\r\n  SOFT_SDA2_HIGH();\r\n  SOFT_I2C_DELAY();\r\n  SOFT_SCL2_HIGH();\r\n  SOFT_I2C_DELAY();\r\n\r\n  if (SOFT_SDA2_READ()) {\r\n    b = 1;\r\n  } else {\r\n    b = 0;\r\n  }\r\n\r\n  SOFT_SCL2_LOW();\r\n  return b;\r\n}\r\n\r\nvoid I2CBB2::unlock() { xSemaphoreGive(I2CSemaphore); }\r\n\r\nbool I2CBB2::lock() {\r\n  if (I2CSemaphore == NULL) {\r\n  }\r\n  bool a = xSemaphoreTake(I2CSemaphore, (TickType_t)100) == pdTRUE;\r\n  return a;\r\n}\r\n\r\nbool I2CBB2::I2C_RegisterWrite(uint8_t address, uint8_t reg, uint8_t data) { return Mem_Write(address, reg, &data, 1); }\r\n\r\nuint8_t I2CBB2::I2C_RegisterRead(uint8_t address, uint8_t reg) {\r\n  uint8_t temp = 0;\r\n  Mem_Read(address, reg, &temp, 1);\r\n  return temp;\r\n}\r\n\r\nvoid I2CBB2::write_bit(uint8_t val) {\r\n  if (val) {\r\n    SOFT_SDA2_HIGH();\r\n  } else {\r\n    SOFT_SDA2_LOW();\r\n  }\r\n\r\n  SOFT_I2C_DELAY();\r\n  SOFT_SCL2_HIGH();\r\n  SOFT_I2C_DELAY();\r\n  SOFT_SCL2_LOW();\r\n}\r\n\r\nbool I2CBB2::writeRegistersBulk(const uint8_t address, const I2C_REG *registers, const uint8_t registersLength) {\r\n  for (int index = 0; index < registersLength; index++) {\r\n    if (!I2C_RegisterWrite(address, registers[index].reg, registers[index].val)) {\r\n      return false;\r\n    }\r\n    if (registers[index].pause_ms) {\r\n      delay_ms(registers[index].pause_ms);\r\n    }\r\n  }\r\n  return true;\r\n}\r\n\r\nbool I2CBB2::wakePart(uint16_t DevAddress) {\r\n  // wakepart is a special case  where only the device address is sent\r\n  if (!lock()) {\r\n    return false;\r\n  }\r\n  start();\r\n  bool ack = send(DevAddress);\r\n  stop();\r\n  unlock();\r\n  return ack;\r\n}\r\n#endif\r\n"
  },
  {
    "path": "source/Core/Drivers/I2CBB2.hpp",
    "content": "/*\r\n * I2CBB2.hpp\r\n *\r\n *  Created on: 12 Jun 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef BSP_MINIWARE_I2CBB2_HPP_\r\n#define BSP_MINIWARE_I2CBB2_HPP_\r\n#include \"configuration.h\"\r\n#ifdef I2C_SOFT_BUS_2\r\n#include \"BSP.h\"\r\n#include \"FreeRTOS.h\"\r\n#include \"Pins.h\"\r\n#include \"Setup.h\"\r\n#include \"Software_I2C.h\"\r\n#include \"semphr.h\"\r\n\r\nclass I2CBB2 {\r\npublic:\r\n  static void init();\r\n  // Probe if device ACK's address or not\r\n  static bool probe(uint8_t address);\r\n  // Issues a complete 8bit register read\r\n  static bool Mem_Read(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pData, uint16_t Size);\r\n  // Implements a register write\r\n  static bool    Mem_Write(uint16_t DevAddress, uint16_t MemAddress, const uint8_t *pData, uint16_t Size);\r\n  static void    Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size);\r\n  static void    Receive(uint16_t DevAddress, uint8_t *pData, uint16_t Size);\r\n  static void    TransmitReceive(uint16_t DevAddress, uint8_t *pData_tx, uint16_t Size_tx, uint8_t *pData_rx, uint16_t Size_rx);\r\n  static bool    I2C_RegisterWrite(uint8_t address, uint8_t reg, uint8_t data);\r\n  static uint8_t I2C_RegisterRead(uint8_t address, uint8_t reg);\r\n  typedef struct {\r\n    const uint8_t reg;      // The register to write to\r\n    uint8_t       val;      // The value to write to this register\r\n    const uint8_t pause_ms; // How many ms to pause _after_ writing this reg\r\n  } I2C_REG;\r\n  static bool writeRegistersBulk(const uint8_t address, const I2C_REG *registers, const uint8_t registersLength);\r\n  static bool wakePart(uint16_t DevAddress);\r\n\r\nprivate:\r\n  static SemaphoreHandle_t I2CSemaphore;\r\n  static StaticSemaphore_t xSemaphoreBuffer;\r\n  static void              unlock();\r\n  static bool              lock();\r\n  static void              start();\r\n  static void              stop();\r\n  static bool              send(uint8_t value);\r\n  static uint8_t           read(bool ack);\r\n  static uint8_t           read_bit();\r\n  static void              write_bit(uint8_t val);\r\n};\r\n#endif\r\n#endif /* BSP_MINIWARE_I2CBB_HPP_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/I2C_Wrapper.hpp",
    "content": "/*\r\n * FRToSI2C.hpp\r\n *\r\n *  Created on: 14Apr.,2018\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef FRTOSI2C_HPP_\r\n#define FRTOSI2C_HPP_\r\n\r\n#include \"cmsis_os.h\"\r\n\r\n/*\r\n * Wrapper class to work with the device I2C bus\r\n *\r\n * This provides mutex protection of the peripheral\r\n * Also allows hardware to use DMA should it want to\r\n *\r\n *\r\n */\r\nclass FRToSI2C {\r\npublic:\r\n  static void FRToSInit() {\r\n    if (I2CSemaphore == nullptr) {\r\n      I2CSemaphore = xSemaphoreCreateBinaryStatic(&xSemaphoreBuffer);\r\n      xSemaphoreGive(I2CSemaphore);\r\n    }\r\n  }\r\n\r\n  static void CpltCallback(); // Normal Tx Callback\r\n\r\n  static bool Mem_Read(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pData, uint16_t Size);\r\n  static bool Mem_Write(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pData, uint16_t Size);\r\n  // Returns true if device ACK's being addressed\r\n  static bool    probe(uint16_t DevAddress);\r\n  static bool    wakePart(uint16_t DevAddress);\r\n  static bool    Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size);\r\n  static void    Receive(uint16_t DevAddress, uint8_t *pData, uint16_t Size);\r\n  static void    TransmitReceive(uint16_t DevAddress, uint8_t *pData_tx, uint16_t Size_tx, uint8_t *pData_rx, uint16_t Size_rx);\r\n  static bool    I2C_RegisterWrite(uint8_t address, uint8_t reg, uint8_t data);\r\n  static uint8_t I2C_RegisterRead(uint8_t address, uint8_t reg);\r\n\r\n  typedef struct {\r\n    const uint8_t reg;      // The register to write to\r\n    uint8_t       val;      // The value to write to this register\r\n    const uint8_t pause_ms; // How many ms to pause _after_ writing this reg\r\n  } I2C_REG;\r\n  static bool writeRegistersBulk(const uint8_t address, const I2C_REG *registers, const uint8_t registersLength);\r\n\r\nprivate:\r\n  static void              unlock();\r\n  static bool              lock();\r\n  static void              I2C_Unstick();\r\n  static SemaphoreHandle_t I2CSemaphore;\r\n  static StaticSemaphore_t xSemaphoreBuffer;\r\n};\r\n\r\n#endif /* FRTOSI2C_HPP_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/LIS2DH12.cpp",
    "content": "/*\r\n * LIS2DH12.cpp\r\n *\r\n *  Created on: 27Feb.,2018\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"LIS2DH12.hpp\"\r\n#include \"cmsis_os.h\"\r\n#include \"configuration.h\"\r\n#include <array>\r\n\r\nstatic const ACCEL_I2C_CLASS::I2C_REG i2c_registers[] = {\r\n    {    LIS_CTRL_REG1,       0x17, 0}, // 25Hz\r\n    {    LIS_CTRL_REG2, 0b00001000, 0}, // Highpass filter off\r\n    {    LIS_CTRL_REG3, 0b01100000, 0}, // Setup interrupt pins\r\n    {    LIS_CTRL_REG4, 0b00001000, 0}, // Block update mode off, HR on\r\n    {    LIS_CTRL_REG5, 0b00000010, 0}, //\r\n    {    LIS_CTRL_REG6, 0b01100010, 0},\r\n    // Basically setup the unit to run, and enable 4D orientation detection\r\n    {     LIS_INT2_CFG, 0b01111110, 0}, // setup for movement detection\r\n    {     LIS_INT2_THS,       0x28, 0}, //\r\n    {LIS_INT2_DURATION,         64, 0}, //\r\n    {     LIS_INT1_CFG, 0b01111110, 0}, //\r\n    {     LIS_INT1_THS,       0x28, 0}, //\r\n    {LIS_INT1_DURATION,         64, 0}\r\n};\r\n\r\nbool LIS2DH12::initalize() { return ACCEL_I2C_CLASS::writeRegistersBulk(LIS2DH_I2C_ADDRESS, i2c_registers, sizeof(i2c_registers) / sizeof(i2c_registers[0])); }\r\n\r\nvoid LIS2DH12::getAxisReadings(int16_t &x, int16_t &y, int16_t &z) {\r\n  std::array<int16_t, 3> sensorData;\r\n\r\n  ACCEL_I2C_CLASS::Mem_Read(LIS2DH_I2C_ADDRESS, 0xA8, reinterpret_cast<uint8_t *>(sensorData.begin()), sensorData.size() * sizeof(int16_t));\r\n\r\n  x = sensorData[0];\r\n  y = sensorData[1];\r\n  z = sensorData[2];\r\n}\r\n\r\nbool LIS2DH12::detect() {\r\n  if (!ACCEL_I2C_CLASS::probe(LIS2DH_I2C_ADDRESS)) {\r\n    return false;\r\n  }\r\n  // Read chip id to ensure its not an address collision\r\n  uint8_t id = 0;\r\n  if (ACCEL_I2C_CLASS::Mem_Read(LIS2DH_I2C_ADDRESS, LIS2DH_WHOAMI_REG, &id, 1)) {\r\n#ifdef ACCEL_LIS_CLONE\r\n    return (id == LIS2DH_WHOAMI_ID) || (id == LIS2DH_CLONE_WHOAMI_ID);\r\n#else\r\n    return (id == LIS2DH_WHOAMI_ID);\r\n#endif\r\n  }\r\n  return false; // cant read ID\r\n}\r\n\r\nbool LIS2DH12::isClone() {\r\n#ifdef ACCEL_LIS_CLONE\r\n  uint8_t id = 0;\r\n  if (ACCEL_I2C_CLASS::Mem_Read(LIS2DH_I2C_ADDRESS, LIS2DH_WHOAMI_REG, &id, 1)) {\r\n    return (id == LIS2DH_CLONE_WHOAMI_ID);\r\n  }\r\n#endif\r\n  return false;\r\n}"
  },
  {
    "path": "source/Core/Drivers/LIS2DH12.hpp",
    "content": "/*\r\n * LIS2DH12.hpp\r\n *\r\n *  Created on: 27Feb.,2018\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef LIS2DH12_HPP_\r\n#define LIS2DH12_HPP_\r\n#include \"BSP.h\"\r\n\r\n#include \"LIS2DH12_defines.hpp\"\r\n#include \"accelerometers_common.h\"\r\n\r\nclass LIS2DH12 {\r\npublic:\r\n  static bool detect();\r\n  static bool isClone();\r\n  static bool initalize();\r\n  // 1 = rh, 2,=lh, 8=flat\r\n  static Orientation getOrientation() {\r\n#ifdef LIS_ORI_FLIP\r\n    uint8_t val = (ACCEL_I2C_CLASS::I2C_RegisterRead(LIS2DH_I2C_ADDRESS, LIS_INT2_SRC) >> 2);\r\n    if (val == 8)\r\n      val = 3;\r\n    else if (val == 1)\r\n      val = 1;\r\n    else if (val == 2)\r\n      val = 0;\r\n    else\r\n      val = 3;\r\n    return static_cast<Orientation>(val);\r\n#else\r\n    return static_cast<Orientation>((ACCEL_I2C_CLASS::I2C_RegisterRead(LIS2DH_I2C_ADDRESS, LIS_INT2_SRC) >> 2) - 1);\r\n#endif\r\n  }\r\n  static void getAxisReadings(int16_t &x, int16_t &y, int16_t &z);\r\n\r\nprivate:\r\n};\r\n\r\n#endif /* LIS2DH12_HPP_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/LIS2DH12_defines.hpp",
    "content": "/*\r\n * LIS2DH12_defines.hpp\r\n *\r\n *  Created on: 27Feb.,2018\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef LIS2DH12_DEFINES_HPP_\r\n#define LIS2DH12_DEFINES_HPP_\r\n\r\n#define LIS2DH_I2C_ADDRESS (25 << 1)\r\n#define LIS2DH_WHOAMI_REG  0x0F\r\n#define LIS2DH_WHOAMI_ID   (0b00110011)\r\n#define LIS2DH_CLONE_WHOAMI_ID 0x11\r\n#define LIS_CTRL_REG1      0x20 | 0x80\r\n#define LIS_CTRL_REG2      0x21 | 0x80\r\n#define LIS_CTRL_REG3      0x22 | 0x80\r\n#define LIS_CTRL_REG4      0x23 | 0x80\r\n#define LIS_CTRL_REG5      0x24 | 0x80\r\n#define LIS_CTRL_REG6      0x25 | 0x80\r\n#define LIS_INT1_CFG       0xB0 | 0x80\r\n#define LIS_INT2_CFG       0xB4 | 0x80\r\n#define LIS_INT1_DURATION  0x33 | 0x80\r\n#define LIS_INT1_THS       0x32 | 0x80\r\n#define LIS_INT1_SRC       0x31 | 0x80\r\n#define LIS_INT2_DURATION  0x37 | 0x80\r\n#define LIS_INT2_THS       0x36 | 0x80\r\n#define LIS_INT2_SRC       0x35 | 0x80\r\n#endif /* LIS2DH12_DEFINES_HPP_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/MMA8652FC.cpp",
    "content": "/*\r\n * MMA8652FC.cpp\r\n *\r\n *  Created on: 31Aug.,2017\r\n *      Author: Ben V. Brown\r\n */\r\n\r\n#include \"MMA8652FC.hpp\"\r\n#include \"accelerometers_common.h\"\r\n#include \"cmsis_os.h\"\r\n#include <array>\r\n\r\n#include \"MMA8652FC.hpp\"\r\n#include \"accelerometers_common.h\"\r\n#include \"cmsis_os.h\"\r\n\r\nstatic const ACCEL_I2C_CLASS::I2C_REG i2c_registers[] = {\r\n    {           CTRL_REG2,               0, 0}, // Normal mode\r\n    {           CTRL_REG2,            0x40, 2}, // Reset all registers to POR values\r\n    {       FF_MT_CFG_REG,            0x78, 0}, // Enable motion detection for X, Y, Z axis, latch disabled\r\n    {          PL_CFG_REG,            0x40, 0}, // Enable the orientation detection\r\n    {        PL_COUNT_REG,             200, 0}, // 200 count debounce\r\n    {     PL_BF_ZCOMP_REG,      0b01000111, 0}, // Set the threshold to 42 degrees\r\n    {         P_L_THS_REG,      0b10011100, 0}, // Up the trip angles\r\n    {           CTRL_REG4, 0x01 | (1 << 4), 0}, // Enable dataready interrupt & orientation interrupt\r\n    {           CTRL_REG5,            0x01, 0}, // Route data ready interrupts to INT1 ->PB5 ->EXTI5, leaving orientation routed to INT2\r\n    {           CTRL_REG2,            0x12, 0}, // Set maximum resolution oversampling\r\n    {    XYZ_DATA_CFG_REG,        (1 << 4), 0}, // select high pass filtered data\r\n    {HP_FILTER_CUTOFF_REG,            0x03, 0}, // select high pass filtered data\r\n    {           CTRL_REG1,            0x19, 0}  // ODR=12 Hz, Active mode\r\n};\r\n\r\nbool MMA8652FC::initalize() { return ACCEL_I2C_CLASS::writeRegistersBulk(MMA8652FC_I2C_ADDRESS, i2c_registers, sizeof(i2c_registers) / sizeof(i2c_registers[0])); }\r\n\r\nOrientation MMA8652FC::getOrientation() {\r\n  // First read the PL_STATUS register\r\n  uint8_t plStatus = ACCEL_I2C_CLASS::I2C_RegisterRead(MMA8652FC_I2C_ADDRESS, PL_STATUS_REG);\r\n  if ((plStatus & 0b10000000) == 0b10000000) {\r\n    plStatus >>= 1;   // We don't need the up/down bit\r\n    plStatus &= 0x03; // mask to the two lower bits\r\n\r\n    // 0 == left handed\r\n    // 1 == right handed\r\n\r\n    return static_cast<Orientation>(plStatus);\r\n  }\r\n\r\n  return ORIENTATION_FLAT;\r\n}\r\n\r\nvoid MMA8652FC::getAxisReadings(int16_t &x, int16_t &y, int16_t &z) {\r\n  std::array<int16_t, 3> sensorData;\r\n\r\n  ACCEL_I2C_CLASS::Mem_Read(MMA8652FC_I2C_ADDRESS, OUT_X_MSB_REG, reinterpret_cast<uint8_t *>(sensorData.begin()), sensorData.size() * sizeof(int16_t));\r\n\r\n  x = static_cast<int16_t>(__builtin_bswap16(*reinterpret_cast<uint16_t *>(&sensorData[0])));\r\n  y = static_cast<int16_t>(__builtin_bswap16(*reinterpret_cast<uint16_t *>(&sensorData[1])));\r\n  z = static_cast<int16_t>(__builtin_bswap16(*reinterpret_cast<uint16_t *>(&sensorData[2])));\r\n}\r\n\r\nbool MMA8652FC::detect() { return ACCEL_I2C_CLASS::probe(MMA8652FC_I2C_ADDRESS); }\r\n"
  },
  {
    "path": "source/Core/Drivers/MMA8652FC.hpp",
    "content": "/*\r\n * MMA8652FC.h\r\n *\r\n *  Created on: 31Aug.,2017\r\n *      Author: Ben V. Brown\r\n */\r\n\r\n#ifndef MMA8652FC_HPP_\r\n#define MMA8652FC_HPP_\r\n#include \"BSP.h\"\r\n#include \"I2C_Wrapper.hpp\"\r\n#include \"MMA8652FC_defines.h\"\r\n\r\nclass MMA8652FC {\r\n\r\npublic:\r\n  // Returns true if this accelerometer is detected\r\n  static bool detect();\r\n  // Init any internal state\r\n  static bool        initalize();\r\n  static Orientation getOrientation(); // Reads the I2C register and returns the orientation (true == left)\r\n  static void        getAxisReadings(int16_t &x, int16_t &y, int16_t &z);\r\n\r\nprivate:\r\n};\r\n\r\n#endif /* MMA8652FC_HPP_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/MMA8652FC_defines.h",
    "content": "/*\r\n * MMA8652FC_defines.h\r\n *\r\n *  Created on: 31Aug.,2017\r\n *      Author: Ben V. Brown\r\n */\r\n\r\n#ifndef MMA8652FC_DEFINES_H_\r\n#define MMA8652FC_DEFINES_H_\r\n\r\n//--------------MMA8652 Registers-------------------------------------------//\r\n\r\n#define STATUS_REG 0x00 // STATUS Register\r\n\r\n#define OUT_X_MSB_REG 0x01 // [7:0] are 8 MSBs of the 14-bit X-axis sample\r\n#define OUT_X_LSB_REG 0x02 // [7:2] are the 6 LSB of 14-bit X-axis sample\r\n#define OUT_Y_MSB_REG 0x03 // [7:0] are 8 MSBs of the 14-bit Y-axis sample\r\n#define OUT_Y_LSB_REG 0x04 // [7:2] are the 6 LSB of 14-bit Y-axis sample\r\n#define OUT_Z_MSB_REG 0x05 // [7:0] are 8 MSBs of the 14-bit Z-axis sample\r\n#define OUT_Z_LSB_REG 0x06 // [7:2] are the 6 LSB of 14-bit Z-axis sample\r\n\r\n#define F_SETUP_REG          0x09 // F_SETUP FIFO Setup Register\r\n#define TRIG_CFG_REG         0x0A // TRIG_CFG Map of FIFO data capture events\r\n#define SYSMOD_REG           0x0B // SYSMOD System Mode Register\r\n#define INT_SOURCE_REG       0x0C // INT_SOURCE System Interrupt Status Register\r\n#define WHO_AM_I_REG         0x0D // WHO_AM_I Device ID Register\r\n#define XYZ_DATA_CFG_REG     0x0E // XYZ_DATA_CFG Sensor Data Configuration Register\r\n#define HP_FILTER_CUTOFF_REG 0x0F // HP_FILTER_CUTOFF High Pass Filter Register\r\n\r\n#define PL_STATUS_REG   0x10 // PL_STATUS Portrait/Landscape Status Register\r\n#define PL_CFG_REG      0x11 // PL_CFG Portrait/Landscape Configuration Register\r\n#define PL_COUNT_REG    0x12 // PL_COUNT Portrait/Landscape Debounce Register\r\n#define PL_BF_ZCOMP_REG 0x13 // PL_BF_ZCOMP Back/Front and Z Compensation Register\r\n#define P_L_THS_REG     0x14 // P_L_THS Portrait to Landscape Threshold Register\r\n\r\n#define FF_MT_CFG_REG   0x15 // FF_MT_CFG Freefall and Motion Configuration Register\r\n#define FF_MT_SRC_REG   0x16 // FF_MT_SRC Freefall and Motion Source Register\r\n#define FF_MT_THS_REG   0x17 // FF_MT_THS Freefall and Motion Threshold Register\r\n#define FF_MT_COUNT_REG 0x18 // FF_MT_COUNT Freefall Motion Count Register\r\n\r\n#define TRANSIENT_CFG_REG   0x1D // TRANSIENT_CFG Transient Configuration Register\r\n#define TRANSIENT_SRC_REG   0x1E // TRANSIENT_SRC Transient Source Register\r\n#define TRANSIENT_THS_REG   0x1F // TRANSIENT_THS Transient Threshold Register\r\n#define TRANSIENT_COUNT_REG 0x20 // TRANSIENT_COUNT Transient Debounce Counter Register\r\n\r\n#define PULSE_CFG_REG  0x21 // PULSE_CFG Pulse Configuration Register\r\n#define PULSE_SRC_REG  0x22 // PULSE_SRC Pulse Source Register\r\n#define PULSE_THSX_REG 0x23 // PULSE_THS XYZ Pulse Threshold Registers\r\n#define PULSE_THSY_REG 0x24\r\n#define PULSE_THSZ_REG 0x25\r\n#define PULSE_TMLT_REG 0x26 // PULSE_TMLT Pulse Time Window Register\r\n#define PULSE_LTCY_REG 0x27 // PULSE_LTCY Pulse Latency Timer Register\r\n#define PULSE_WIND_REG 0x28 // PULSE_WIND Second Pulse Time Window Register\r\n\r\n#define ASLP_COUNT_REG 0x29 // ASLP_COUNT Auto Sleep Inactivity Timer Register\r\n\r\n#define CTRL_REG1 0x2A // CTRL_REG1 System Control 1 Register\r\n#define CTRL_REG2 0x2B // CTRL_REG2 System Control 2 Register\r\n#define CTRL_REG3 0x2C // CTRL_REG3 Interrupt Control Register\r\n#define CTRL_REG4 0x2D // CTRL_REG4 Interrupt Enable Register\r\n#define CTRL_REG5 0x2E // CTRL_REG5 Interrupt Configuration Register\r\n\r\n#define OFF_X_REG 0x2F // XYZ Offset Correction Registers\r\n#define OFF_Y_REG 0x30\r\n#define OFF_Z_REG 0x31\r\n\r\n// MMA8652FC 7-bit I2C address\r\n\r\n#define MMA8652FC_I2C_ADDRESS (0x1D << 1)\r\n\r\n// MMA8652FC Sensitivity\r\n\r\n#define SENSITIVITY_2G 1024\r\n#define SENSITIVITY_4G 512\r\n#define SENSITIVITY_8G 256\r\n\r\n#define STATUS_REG 0x00\r\n#define X_MSB_REG  0X01\r\n#define X_LSB_REG  0X02\r\n#define Y_MSB_REG  0X03\r\n#define Y_LSB_REG  0X04\r\n#define Z_MSB_REG  0X05\r\n#define Z_LSB_REG  0X06\r\n\r\n#define TRIG_CFG   0X0A\r\n#define SYSMOD     0X0B\r\n#define INT_SOURCE 0X0C\r\n#define DEVICE_ID  0X0D\r\n\r\n//-----STATUS_REG(0X00)-----Bit Define----------------------------------------//\r\n#define ZYXDR_BIT 0X08\r\n//----XYZ_DATA_CFG_REG(0xE)-Bit Define----------------------------------------//\r\n#define FS_MASK       0x03\r\n#define FULL_SCALE_2G 0x00 // 2g=0x0,4g=0x1,8g=0x2\r\n#define FULL_SCALE_4G 0x01\r\n#define FULL_SCALE_8G 0x02\r\n//---------CTRL_REG1(0X2A)Bit Define------------------------------------------//\r\n#define ACTIVE_MASK 1 << 0 // bit0\r\n#define DR_MASK     0x38   // bit D5,D4,D3\r\n#define FHZ800      0x0    // 800hz\r\n#define FHZ400      0x1    // 400hz\r\n#define FHZ200      0x2    // 200hz\r\n#define FHZ100      0x3    // 100hz\r\n#define FHZ50       0x4    // 50hz\r\n#define FHZ2        0x5    // 12.5hz\r\n#define FHZ1        0x6    // 6.25hz\r\n#define FHZ0        0x7    // 1.563hz\r\n\r\n//---------CTRL_REG2(0X2B)Bit Define------------------------------------------//\r\n#define MODS_MASK   0x03 // Oversampling Mode 4\r\n#define Normal_Mode 0x0  // Normal=0,Low Noise Low Power MODS=1,\r\n// HI RESOLUTION=2,LOW POWER MODS = 11\r\n//----CTRL_REG4---Interrupt Enable BIT ---------------------------------------//\r\n// 0 interrupt is disabled (default)\r\n// 1 interrupt is enabled\r\n#define INT_EN_ASLP   1 << 7 // Auto-SLEEP/WAKE Interrupt Enable\r\n#define INT_EN_FIFO   1 << 6 // FIFO Interrupt Enable\r\n#define INT_EN_TRANS  1 << 5 // Transient Interrupt Enable\r\n#define INT_EN_LNDPRT 1 << 4 // Orientation(Landscape/Portrait)Interrupt Enable\r\n#define INT_EN_PULSE  1 << 3 // Pulse Detection Interrupt Enable\r\n#define INT_EN_FF_MT  1 << 2 // Freefall/Motion Interrupt Enable\r\n#define INT_EN_DRDY   1 << 0 // Data Ready Interrupt Enable\r\n\r\n#endif /* MMA8652FC_DEFINES_H_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/MSA301.cpp",
    "content": "/*\r\n * MSA301.cpp\r\n *\r\n *  Created on: 3 Jan 2021\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"MSA301_defines.h\"\r\n#include \"accelerometers_common.h\"\r\n#include <MSA301.h>\r\n\r\n#define MSA301_I2C_ADDRESS 0x26 << 1\r\nbool MSA301::detect() { return ACCEL_I2C_CLASS::probe(MSA301_I2C_ADDRESS); }\r\n\r\nstatic const ACCEL_I2C_CLASS::I2C_REG i2c_registers[] = {\r\n    //\r\n    //\r\n    {      MSA301_REG_ODR, 0b00001000, 1}, // X/Y/Z enabled @ 250Hz\r\n    {MSA301_REG_POWERMODE,  0b0001001, 1}, // Normal mode\r\n    { MSA301_REG_RESRANGE, 0b00000001, 0}, // 14bit resolution @ 4G range\r\n    {MSA301_REG_ORIENT_HY, 0b01000000, 0}, // 4*62.5mg hyst, no blocking, symmetrical\r\n    {  MSA301_REG_INTSET0,     1 << 6, 0}, // Turn on orientation detection (by enabling its interrupt)\r\n};\r\n\r\nbool MSA301::initalize() { return ACCEL_I2C_CLASS::writeRegistersBulk(MSA301_I2C_ADDRESS, i2c_registers, sizeof(i2c_registers) / sizeof(i2c_registers[0])); }\r\n\r\nOrientation MSA301::getOrientation() {\r\n  uint8_t temp = 0;\r\n  ACCEL_I2C_CLASS::Mem_Read(MSA301_I2C_ADDRESS, MSA301_REG_ORIENT_STATUS, &temp, 1);\r\n  switch (temp) {\r\n  case 112:\r\n    return Orientation::ORIENTATION_LEFT_HAND;\r\n  case 96:\r\n    return Orientation::ORIENTATION_RIGHT_HAND;\r\n  default:\r\n    return Orientation::ORIENTATION_FLAT;\r\n  }\r\n}\r\n\r\nvoid MSA301::getAxisReadings(int16_t &x, int16_t &y, int16_t &z) {\r\n  uint8_t temp[6];\r\n  // Bulk read all 6 regs\r\n  ACCEL_I2C_CLASS::Mem_Read(MSA301_I2C_ADDRESS, MSA301_REG_OUT_X_L, temp, 6);\r\n  x = int16_t(((int16_t)temp[1]) << 8 | temp[0]) >> 2;\r\n  y = int16_t(((int16_t)temp[3]) << 8 | temp[2]) >> 2;\r\n  z = int16_t(((int16_t)temp[5]) << 8 | temp[4]) >> 2;\r\n}\r\n"
  },
  {
    "path": "source/Core/Drivers/MSA301.h",
    "content": "/*\r\n * MSA301.h\r\n *\r\n *  Created on: 3 Jan 2021\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef DRIVERS_MSA301_H_\r\n#define DRIVERS_MSA301_H_\r\n#include \"BSP.h\"\r\n#include \"I2C_Wrapper.hpp\"\r\n\r\nclass MSA301 {\r\npublic:\r\n  // Returns true if this accelerometer is detected\r\n  static bool detect();\r\n  // Init any internal state\r\n  static bool initalize();\r\n  // Reads the I2C register and returns the orientation\r\n  static Orientation getOrientation();\r\n  // Return the x/y/z axis readings as signed int16's\r\n  static void getAxisReadings(int16_t &x, int16_t &y, int16_t &z);\r\n\r\nprivate:\r\n};\r\n\r\n#endif /* DRIVERS_MSA301_H_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/MSA301_defines.h",
    "content": "/*\r\n * MSA301_defines.h\r\n *\r\n *  Created on: 3 Jan 2021\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef DRIVERS_MSA301_DEFINES_H_\r\n#define DRIVERS_MSA301_DEFINES_H_\r\n// Definitions from Adafruit <3\r\n\r\n#define MSA301_REG_PARTID        0x01 ///< Register that contains the part ID\r\n#define MSA301_REG_OUT_X_L       0x02 ///< Register address for X axis lower byte\r\n#define MSA301_REG_OUT_X_H       0x03 ///< Register address for X axis higher byte\r\n#define MSA301_REG_OUT_Y_L       0x04 ///< Register address for Y axis lower byte\r\n#define MSA301_REG_OUT_Y_H       0x05 ///< Register address for Y axis higher byte\r\n#define MSA301_REG_OUT_Z_L       0x06 ///< Register address for Z axis lower byte\r\n#define MSA301_REG_OUT_Z_H       0x07 ///< Register address for Z axis higher byte\r\n#define MSA301_REG_MOTIONINT     0x09 ///< Register address for motion interrupt\r\n#define MSA301_REG_DATAINT       0x0A ///< Register address for data interrupt\r\n#define MSA301_REG_CLICKSTATUS   0x0B ///< Register address for click/doubleclick status\r\n#define MSA301_REG_RESRANGE      0x0F ///< Register address for resolution range\r\n#define MSA301_REG_ODR           0x10 ///< Register address for data rate setting\r\n#define MSA301_REG_POWERMODE     0x11 ///< Register address for power mode setting\r\n#define MSA301_REG_INTSET0       0x16 ///< Register address for interrupt setting #0\r\n#define MSA301_REG_INTSET1       0x17 ///< Register address for interrupt setting #1\r\n#define MSA301_REG_INTMAP0       0x19 ///< Register address for interrupt map #0\r\n#define MSA301_REG_INTMAP1       0x1A ///< Register address for interrupt map #1\r\n#define MSA301_REG_TAPDUR        0x2A ///< Register address for tap duration\r\n#define MSA301_REG_TAPTH         0x2B ///< Register address for tap threshold\r\n#define MSA301_REG_ORIENT_HY     0x2C ///< Register address for orientation Hysteresis\r\n#define MSA301_REG_ORIENT_STATUS 0x0C ///< Register address for orientation hysteresis\r\n\r\n#endif /* DRIVERS_MSA301_DEFINES_H_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/OLED.cpp",
    "content": "/*\n * OLED.cpp\n *\n *  Created on: 29Aug.,2017\n *      Author: Ben V. Brown\n */\n\n#include \"Buttons.hpp\"\n#include \"Settings.h\"\n#include \"Translation.h\"\n#include \"cmsis_os.h\"\n#include \"configuration.h\"\n#include <OLED.hpp>\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n\n// rendering to the buffer\nuint8_t *OLED::stripPointers[4]; // Pointers to the strips to allow for buffer having extra content\n\nbool OLED::inLeftHandedMode; // Whether the screen is in left or not (used for\n// offsets in GRAM)\nOLED::DisplayState OLED::displayState;\nint16_t            OLED::cursor_x, OLED::cursor_y;\nbool               OLED::initDone = false;\nuint8_t            OLED::displayOffset;\nalignas(uint32_t) uint8_t OLED::screenBuffer[16 + (OLED_WIDTH * (OLED_HEIGHT / 8)) + 10]; // The data buffer\nalignas(uint32_t) uint8_t OLED::secondFrameBuffer[16 + (OLED_WIDTH * (OLED_HEIGHT / 8)) + 10];\nuint32_t OLED::displayChecksum;\n/*\n * Setup params for the OLED screen\n * http://www.displayfuture.com/Display/datasheet/controller/SSD1307.pdf\n * All commands are prefixed with 0x80\n * Data packets are prefixed with 0x40\n */\nI2C_CLASS::I2C_REG OLED_Setup_Array[] = {\n    /**/\n    {0x80,         OLED_OFF, 0}, /* Display off */\n    {0x80,     OLED_DIVIDER, 0}, /* Set display clock divide ratio / osc freq */\n    {0x80,             0x52, 0}, /* Divide ratios */\n    {0x80,             0xA8, 0}, /* Set Multiplex Ratio */\n    {0x80,  OLED_HEIGHT - 1, 0}, /* Multiplex ratio adjusts how far down the matrix it scans */\n    {0x80,             0xC0, 0}, /* Set COM Scan direction */\n    {0x80,             0xD3, 0}, /* Set vertical Display offset */\n    {0x80,             0x00, 0}, /* 0 Offset */\n    {0x80,             0x40, 0}, /* Set Display start line to 0 */\n#ifdef OLED_SEGMENT_MAP_REVERSED\n    {0x80,             0xA1, 0}, /* Set Segment remap to normal */\n#else\n    {0x80, 0xA0, 0}, /* Set Segment remap to normal */\n#endif\n    {0x80,             0x8D, 0}, /* Charge Pump */\n    {0x80,             0x14, 0}, /* Charge Pump settings */\n    {0x80,             0xDA, 0}, /* Set VCOM Pins hardware config */\n    {0x80, OLED_VCOM_LAYOUT, 0}, /* Combination 0x2 or 0x12 depending on OLED model */\n    {0x80,             0x81, 0}, /* Brightness */\n    {0x80,             0x00, 0}, /* ^0 */\n    {0x80,             0xD9, 0}, /* Set pre-charge period */\n    {0x80,             0xF1, 0}, /* Pre charge period */\n    {0x80,             0xDB, 0}, /* Adjust VCOMH regulator ouput */\n    {0x80,             0x30, 0}, /* VCOM level */\n    {0x80,             0xA4, 0}, /* Enable the display GDDR */\n    {0x80,             0xA6, 0}, /* Normal display */\n    {0x80,             0x20, 0}, /* Memory Mode */\n    {0x80,             0x00, 0}, /* Wrap memory */\n    {0x80,          OLED_ON, 0}, /* Display on */\n};\n// Setup based on the SSD1307 and modified for the SSD1306\n\nconst uint8_t REFRESH_COMMANDS[17] = {\n    // Set display ON:\n    0x80,\n    0xAF, // cmd\n\n    // Set column address:\n    //  A[6:0] - Column start address = 0x20\n    //  B[6:0] - Column end address = 0x7F\n    0x80,\n    0x21, // cmd\n    0x80,\n    OLED_GRAM_START, // A\n    0x80,\n    OLED_GRAM_END, // B\n\n    // Set COM output scan direction (normal mode, COM0 to COM[N-1])\n    0x80,\n    0xC0,\n\n    // Set page address:\n    //  A[2:0] - Page start address = 0\n    //  B[2:0] - Page end address = 1\n    0x80,\n    0x22, // cmd\n    0x80,\n    0x00, // A\n    0x80,\n    (OLED_HEIGHT / 8) - 1, // B\n\n    // Start of data\n    0x40,\n};\n\n/*\n * Animation timing function that follows a bezier curve.\n * @param t A given percentage value [0..<100]\n * Returns a new percentage value with ease in and ease out.\n * Original floating point formula: t * t * (3.0f - 2.0f * t);\n */\nstatic uint16_t easeInOutTiming(uint16_t t) { return t * t * (300 - 2 * t) / 10000; }\n\n/*\n * Returns the value between a and b, using a percentage value t.\n * @param a The value associated with 0%\n * @param b The value associated with 100%\n * @param t The percentage [0..<100]\n */\nstatic uint16_t lerp(uint16_t a, uint16_t b, uint16_t t) { return a + t * (b - a) / 100; }\n\nvoid OLED::initialize() {\n  cursor_x = cursor_y = 0;\n  inLeftHandedMode    = false;\n\n#ifdef OLED_128x32\n  stripPointers[0] = &screenBuffer[FRAMEBUFFER_START];\n  stripPointers[1] = &screenBuffer[FRAMEBUFFER_START + OLED_WIDTH];\n  stripPointers[2] = &screenBuffer[FRAMEBUFFER_START + 2 * OLED_WIDTH];\n  stripPointers[3] = &screenBuffer[FRAMEBUFFER_START + 3 * OLED_WIDTH];\n\n#else\n  stripPointers[0] = &screenBuffer[FRAMEBUFFER_START];\n  stripPointers[1] = &screenBuffer[FRAMEBUFFER_START + OLED_WIDTH];\n\n#endif /* OLED_128x32 */\n  displayOffset = 0;\n  memcpy(&screenBuffer[0], &REFRESH_COMMANDS[0], sizeof(REFRESH_COMMANDS));\n  memcpy(&secondFrameBuffer[0], &REFRESH_COMMANDS[0], sizeof(REFRESH_COMMANDS));\n\n  // Set the display to be ON once the settings block is sent and send the\n  // initialisation data to the OLED.\n\n  for (int tries = 0; tries < 10; tries++) {\n    if (I2C_CLASS::writeRegistersBulk(DEVICEADDR_OLED, OLED_Setup_Array, sizeof(OLED_Setup_Array) / sizeof(OLED_Setup_Array[0]))) {\n      tries = 11;\n    }\n  }\n  setDisplayState(DisplayState::ON);\n  initDone = true;\n}\n\nvoid OLED::setFramebuffer(uint8_t *buffer) {\n  stripPointers[0] = &buffer[FRAMEBUFFER_START];\n  stripPointers[1] = &buffer[FRAMEBUFFER_START + OLED_WIDTH];\n\n#ifdef OLED_128x32\n  stripPointers[2] = &buffer[FRAMEBUFFER_START + (2 * OLED_WIDTH)];\n  stripPointers[3] = &buffer[FRAMEBUFFER_START + (3 * OLED_WIDTH)];\n#endif /* OLED_128x32 */\n}\n\n/*\n * Prints a char to the screen.\n * UTF font handling is done using the two input chars.\n * Precursor is the command char that is used to select the table.\n */\nvoid OLED::drawChar(const uint16_t charCode, const FontStyle fontStyle, const uint8_t soft_x_limit) {\n  const uint8_t *currentFont;\n  static uint8_t fontWidth, fontHeight;\n  uint16_t       index;\n  switch (fontStyle) {\n  case FontStyle::EXTRAS:\n    currentFont = ExtraFontChars;\n    index       = charCode;\n    fontHeight  = 16;\n    fontWidth   = 12;\n    break;\n  case FontStyle::SMALL:\n  case FontStyle::LARGE:\n  default:\n    currentFont = nullptr;\n    index       = 0;\n    switch (fontStyle) {\n    case FontStyle::SMALL:\n      fontHeight = 8;\n      fontWidth  = 6;\n      break;\n    case FontStyle::LARGE:\n    default:\n      fontHeight = 16;\n      fontWidth  = 12;\n      break;\n    }\n    if (charCode == '\\x01' && cursor_y == 0) { // 0x01 is used as new line char\n      setCursor(soft_x_limit, fontHeight);\n      return;\n    } else if (charCode <= 0x01) {\n      return;\n    }\n\n    currentFont = fontStyle == FontStyle::SMALL ? FontSectionInfo.font06_start_ptr : FontSectionInfo.font12_start_ptr;\n    index       = charCode - 2;\n    break;\n  }\n  const uint8_t *charPointer = currentFont + ((fontWidth * (fontHeight / 8)) * index);\n  drawArea(cursor_x, cursor_y, fontWidth, fontHeight, charPointer);\n  cursor_x += fontWidth;\n}\n\n/*\n * Draws a one pixel wide scrolling indicator. y is the upper vertical position\n * of the indicator in pixels (0..<16).\n */\nvoid OLED::drawScrollIndicator(uint8_t y, uint8_t height) {\n\n  const uint32_t whole = ((1 << height) - 1) << y; // preload a set of set bits of height\n                                                   // Shift down by the y value\n  const uint8_t strips[4] = {static_cast<uint8_t>(whole & 0xff), static_cast<uint8_t>((whole & 0xff00) >> 8 * 1), static_cast<uint8_t>((whole & 0xff0000) >> 8 * 2),\n                             static_cast<uint8_t>((whole & 0xff000000) >> 8 * 3)};\n  // Draw a one pixel wide bar to the left with a single pixel as\n  // the scroll indicator.\n  fillArea(OLED_WIDTH - 1, 0, 1, 8, strips[0]);\n  fillArea(OLED_WIDTH - 1, 8, 1, 8, strips[1]);\n#if OLED_HEIGHT == 32\n  fillArea(OLED_WIDTH - 1, 16, 1, 8, strips[2]);\n  fillArea(OLED_WIDTH - 1, 24, 1, 8, strips[3]);\n\n#endif\n}\n\n/**\n * Masks (removes) the scrolling indicator, i.e. clears the rightmost column\n * on the screen. This operates directly on the OLED graphics RAM, as this\n * is intended to be used before calling `OLED::transitionScrollDown()`.\n */\nvoid OLED::maskScrollIndicatorOnOLED() {\n  // The right-most column depends on the screen rotation, so just take\n  // it from the screen buffer which is updated by `OLED::setRotation`.\n  uint8_t rightmostColumn = screenBuffer[7];\n  uint8_t maskCommands[]  = {\n      // Set column address:\n      //  A[6:0] - Column start address = rightmost column\n      //  B[6:0] - Column end address = rightmost column\n      0x80,\n      0x21, // cmd\n      0x80,\n      rightmostColumn, // A\n      0x80,\n      rightmostColumn, // B\n\n      // Start of data\n      0x40,\n#ifdef OLED_128x32\n      0x00,\n      0x00,\n#endif /* OLED_128x32 */\n      // Clears two 8px strips\n      0x00,\n      0x00,\n  };\n  I2C_CLASS::Transmit(DEVICEADDR_OLED, maskCommands, sizeof(maskCommands));\n}\n\n/**\n * Plays a transition animation between two framebuffers.\n * @param forwardNavigation Direction of the navigation animation.\n *\n * If forward is true, this displays a forward navigation to the second framebuffer contents.\n * Otherwise a rewinding navigation animation is shown to the second framebuffer contents.\n */\nvoid OLED::transitionSecondaryFramebuffer(const bool forwardNavigation, const TickType_t viewEnterTime) {\n  bool     buttonsReleased = getButtonState() == BUTTON_NONE;\n  uint8_t *stripBackPointers[4];\n  stripBackPointers[0] = &secondFrameBuffer[FRAMEBUFFER_START + 0];\n  stripBackPointers[1] = &secondFrameBuffer[FRAMEBUFFER_START + OLED_WIDTH];\n\n#ifdef OLED_128x32\n  stripBackPointers[2] = &secondFrameBuffer[FRAMEBUFFER_START + (OLED_WIDTH * 2)];\n  stripBackPointers[3] = &secondFrameBuffer[FRAMEBUFFER_START + (OLED_WIDTH * 3)];\n#endif /* OLED_128x32 */\n\n  TickType_t totalDuration = TICKS_100MS * 5; // 500ms\n  TickType_t duration      = 0;\n  TickType_t start         = xTaskGetTickCount();\n  uint8_t    offset        = 0;\n  uint32_t   loopCounter   = 0;\n  TickType_t startDraw     = xTaskGetTickCount();\n  while (duration <= totalDuration) {\n    loopCounter++;\n    duration          = xTaskGetTickCount() - start;\n    uint16_t progress = ((duration * 100) / totalDuration); // Percentage of the period we are through for animation\n    progress          = easeInOutTiming(progress);\n    progress          = lerp(0, OLED_WIDTH, progress);\n    // Constrain\n    if (progress > OLED_WIDTH) {\n      progress = OLED_WIDTH;\n    }\n\n    // When forward, current contents move to the left out.\n    // Otherwise the contents move to the right out.\n    uint8_t oldStart    = forwardNavigation ? 0 : progress;\n    uint8_t oldPrevious = forwardNavigation ? progress - offset : offset;\n\n    // Content from the second framebuffer moves in from the right (forward)\n    // or from the left (not forward).\n    uint8_t newStart = forwardNavigation ? OLED_WIDTH - progress : 0;\n    uint8_t newEnd   = forwardNavigation ? 0 : OLED_WIDTH - progress;\n\n    offset = progress;\n\n    memmove(&stripPointers[0][oldStart], &stripPointers[0][oldPrevious], OLED_WIDTH - progress);\n    memmove(&stripPointers[1][oldStart], &stripPointers[1][oldPrevious], OLED_WIDTH - progress);\n\n#ifdef OLED_128x32\n    memmove(&stripPointers[2][oldStart], &stripPointers[2][oldPrevious], OLED_WIDTH - progress);\n    memmove(&stripPointers[3][oldStart], &stripPointers[3][oldPrevious], OLED_WIDTH - progress);\n#endif /* OLED_128x32 */\n\n    memmove(&stripPointers[0][newStart], &stripBackPointers[0][newEnd], progress);\n    memmove(&stripPointers[1][newStart], &stripBackPointers[1][newEnd], progress);\n\n#ifdef OLED_128x32\n    memmove(&stripPointers[2][newStart], &stripBackPointers[2][newEnd], progress);\n    memmove(&stripPointers[3][newStart], &stripBackPointers[3][newEnd], progress);\n#endif /* OLED_128x32 */\n\n#ifdef OLED_128x32\n    if (loopCounter % 2 == 0) {\n      refresh();\n    }\n#else\n    refresh(); // Now refresh to write out the contents to the new page\n#endif /* OLED_128x32 */\n\n    vTaskDelayUntil(&startDraw, TICKS_100MS / 7);\n    buttonsReleased |= getButtonState() == BUTTON_NONE;\n    if (getButtonState() != BUTTON_NONE && buttonsReleased) {\n      memcpy(screenBuffer + FRAMEBUFFER_START, secondFrameBuffer + FRAMEBUFFER_START, sizeof(screenBuffer) - FRAMEBUFFER_START);\n      refresh(); // Now refresh to write out the contents to the new page\n      return;\n    }\n  }\n  refresh(); // redraw at the end if required\n}\n\nvoid OLED::useSecondaryFramebuffer(bool useSecondary) {\n  if (useSecondary) {\n    setFramebuffer(secondFrameBuffer);\n  } else {\n    setFramebuffer(screenBuffer);\n  }\n}\n\n/**\n * This assumes that the current display output buffer has the current on screen contents\n * Then the secondary buffer has the \"new\" contents to be slid up onto the screen\n * Sadly we cant use the hardware scroll as some devices with the 128x32 screens dont have the GRAM for holding both screens at once\n *\n * **This function blocks until the transition has completed or user presses button**\n */\nvoid OLED::transitionScrollDown(const TickType_t viewEnterTime) {\n  TickType_t startDraw       = xTaskGetTickCount();\n  bool       buttonsReleased = getButtonState() == BUTTON_NONE;\n\n  for (uint8_t heightPos = 0; heightPos < OLED_HEIGHT; heightPos++) {\n    // For each line, we shuffle all bits up a row\n    for (uint8_t xPos = 0; xPos < OLED_WIDTH; xPos++) {\n      const uint16_t firstStripPos  = FRAMEBUFFER_START + xPos;\n      const uint16_t secondStripPos = firstStripPos + OLED_WIDTH;\n#ifdef OLED_128x32\n      // For 32 pixel high OLED's we have four strips to tailchain\n      const uint16_t thirdStripPos  = secondStripPos + OLED_WIDTH;\n      const uint16_t fourthStripPos = thirdStripPos + OLED_WIDTH;\n      // Move the MSB off the first strip, and pop MSB from second strip onto the first strip\n      screenBuffer[firstStripPos] = (screenBuffer[firstStripPos] >> 1) | ((screenBuffer[secondStripPos] & 0x01) << 7);\n      // Now shuffle off the second strip\n      screenBuffer[secondStripPos] = (screenBuffer[secondStripPos] >> 1) | ((screenBuffer[thirdStripPos] & 0x01) << 7);\n      // Now shuffle off the third strip\n      screenBuffer[thirdStripPos] = (screenBuffer[thirdStripPos] >> 1) | ((screenBuffer[fourthStripPos] & 0x01) << 7);\n      // Now forth strip gets the start of the new buffer\n      screenBuffer[fourthStripPos] = (screenBuffer[fourthStripPos] >> 1) | ((secondFrameBuffer[firstStripPos] & 0x01) << 7);\n      // Now cycle all the secondary buffers\n\n      secondFrameBuffer[firstStripPos]  = (secondFrameBuffer[firstStripPos] >> 1) | ((secondFrameBuffer[secondStripPos] & 0x01) << 7);\n      secondFrameBuffer[secondStripPos] = (secondFrameBuffer[secondStripPos] >> 1) | ((secondFrameBuffer[thirdStripPos] & 0x01) << 7);\n      secondFrameBuffer[thirdStripPos]  = (secondFrameBuffer[thirdStripPos] >> 1) | ((secondFrameBuffer[fourthStripPos] & 0x01) << 7);\n      // Finally on the bottom row; we shuffle it up ready\n      secondFrameBuffer[fourthStripPos] >>= 1;\n#else\n      // Move the LSB off the first strip, and pop MSB from second strip onto the first strip\n      screenBuffer[firstStripPos] = (screenBuffer[firstStripPos] >> 1) | ((screenBuffer[secondStripPos] & 0x01) << 7);\n      // Now shuffle off the second strip MSB, and replace it with the LSB of the secondary buffer\n      screenBuffer[secondStripPos] = (screenBuffer[secondStripPos] >> 1) | ((secondFrameBuffer[firstStripPos] & 0x01) << 7);\n      // Finally, do the shuffle on the second frame buffer\n      secondFrameBuffer[firstStripPos] = (secondFrameBuffer[firstStripPos] >> 1) | ((secondFrameBuffer[secondStripPos] & 0x01) << 7);\n      // Finally on the bottom row; we shuffle it up ready\n      secondFrameBuffer[secondStripPos] >>= 1;\n#endif /* OLED_128x32 */\n    }\n    buttonsReleased |= getButtonState() == BUTTON_NONE;\n    if (getButtonState() != BUTTON_NONE && buttonsReleased) {\n      // Exit early, but have to transition whole buffer\n      memcpy(screenBuffer + FRAMEBUFFER_START, secondFrameBuffer + FRAMEBUFFER_START, sizeof(screenBuffer) - FRAMEBUFFER_START);\n      refresh(); // Now refresh to write out the contents to the new page\n      return;\n    }\n#ifdef OLED_128x32\n    // To keep things faster, only redraw every second line\n    if (heightPos % 2 == 0) {\n      refresh(); // Now refresh to write out the contents to the new page\n    }\n#else\n    refresh(); // Now refresh to write out the contents to the new page\n#endif\n    vTaskDelayUntil(&startDraw, TICKS_100MS / 7);\n  }\n}\n/**\n * This assumes that the current display output buffer has the current on screen contents\n * Then the secondary buffer has the \"new\" contents to be slid down onto the screen\n * Sadly we cant use the hardware scroll as some devices with the 128x32 screens dont have the GRAM for holding both screens at once\n *\n * **This function blocks until the transition has completed or user presses button**\n */\nvoid OLED::transitionScrollUp(const TickType_t viewEnterTime) {\n  TickType_t startDraw       = xTaskGetTickCount();\n  bool       buttonsReleased = getButtonState() == BUTTON_NONE;\n\n  for (uint8_t heightPos = 0; heightPos < OLED_HEIGHT; heightPos++) {\n    // For each line, we shuffle all bits down a row\n    for (uint8_t xPos = 0; xPos < OLED_WIDTH; xPos++) {\n      const uint16_t firstStripPos  = FRAMEBUFFER_START + xPos;\n      const uint16_t secondStripPos = firstStripPos + OLED_WIDTH;\n#ifdef OLED_128x32\n      // For 32 pixel high OLED's we have four strips to tailchain\n      const uint16_t thirdStripPos  = secondStripPos + OLED_WIDTH;\n      const uint16_t fourthStripPos = thirdStripPos + OLED_WIDTH;\n      // We are shffling LSB's off the end and pushing bits down\n      screenBuffer[fourthStripPos] = (screenBuffer[fourthStripPos] << 1) | ((screenBuffer[thirdStripPos] & 0x80) >> 7);\n      screenBuffer[thirdStripPos]  = (screenBuffer[thirdStripPos] << 1) | ((screenBuffer[secondStripPos] & 0x80) >> 7);\n      screenBuffer[secondStripPos] = (screenBuffer[secondStripPos] << 1) | ((screenBuffer[firstStripPos] & 0x80) >> 7);\n      screenBuffer[firstStripPos]  = (screenBuffer[firstStripPos] << 1) | ((secondFrameBuffer[fourthStripPos] & 0x80) >> 7);\n\n      secondFrameBuffer[fourthStripPos] = (secondFrameBuffer[fourthStripPos] << 1) | ((secondFrameBuffer[thirdStripPos] & 0x80) >> 7);\n      secondFrameBuffer[thirdStripPos]  = (secondFrameBuffer[thirdStripPos] << 1) | ((secondFrameBuffer[secondStripPos] & 0x80) >> 7);\n      secondFrameBuffer[secondStripPos] = (secondFrameBuffer[secondStripPos] << 1) | ((secondFrameBuffer[firstStripPos] & 0x80) >> 7);\n      // Finally on the bottom row; we shuffle it up ready\n      secondFrameBuffer[firstStripPos] <<= 1;\n#else\n      // We pop the LSB off the bottom row, and replace the MSB in that byte with the LSB of the row above\n      screenBuffer[secondStripPos] = (screenBuffer[secondStripPos] << 1) | ((screenBuffer[firstStripPos] & 0x80) >> 7);\n      // Move the LSB off the first strip, and pop MSB from second strip onto the first strip\n      screenBuffer[firstStripPos] = (screenBuffer[firstStripPos] << 1) | ((secondFrameBuffer[secondStripPos] & 0x80) >> 7);\n\n      // Finally, do the shuffle on the second frame buffer\n      secondFrameBuffer[secondStripPos] = (secondFrameBuffer[secondStripPos] << 1) | ((secondFrameBuffer[firstStripPos] & 0x80) >> 7);\n      // Finally on the bottom row; we shuffle it up ready\n      secondFrameBuffer[firstStripPos] <<= 1;\n#endif /* OLED_128x32 */\n    }\n    buttonsReleased |= getButtonState() == BUTTON_NONE;\n    if (getButtonState() != BUTTON_NONE && buttonsReleased) {\n      // Exit early, but have to transition whole buffer\n      memcpy(screenBuffer + FRAMEBUFFER_START, secondFrameBuffer + FRAMEBUFFER_START, sizeof(screenBuffer) - FRAMEBUFFER_START);\n      refresh(); // Now refresh to write out the contents to the new page\n      return;\n    }\n\n#ifdef OLED_128x32\n    // To keep things faster, only redraw every second line\n    if (heightPos % 2 == 0) {\n      refresh(); // Now refresh to write out the contents to the new page\n    }\n#else\n    refresh(); // Now refresh to write out the contents to the new page\n#endif\n    vTaskDelayUntil(&startDraw, TICKS_100MS / 7);\n  }\n}\n\nvoid OLED::setRotation(bool leftHanded) {\n#ifdef OLED_FLIP\n  leftHanded = !leftHanded;\n#endif /* OLED_FLIP */\n  if (inLeftHandedMode == leftHanded) {\n    return;\n  }\n#ifdef OLED_SEGMENT_MAP_REVERSED\n  if (!leftHanded) {\n    OLED_Setup_Array[9].val = 0xA1;\n  } else {\n    OLED_Setup_Array[9].val = 0xA0;\n  }\n#else\n  if (leftHanded) {\n    OLED_Setup_Array[9].val = 0xA1;\n  } else {\n    OLED_Setup_Array[9].val = 0xA0;\n  }\n#endif /* OLED_SEGMENT_MAP_REVERSED */\n  // send command struct again with changes\n  if (leftHanded) {\n    OLED_Setup_Array[5].val = 0xC8; // c1?\n  } else {\n    OLED_Setup_Array[5].val = 0xC0;\n  }\n  I2C_CLASS::writeRegistersBulk(DEVICEADDR_OLED, OLED_Setup_Array, sizeof(OLED_Setup_Array) / sizeof(OLED_Setup_Array[0]));\n  osDelay(TICKS_10MS);\n  inLeftHandedMode = leftHanded;\n\n  screenBuffer[5] = inLeftHandedMode ? OLED_GRAM_START_FLIP : OLED_GRAM_START; // display is shifted by 32 in left handed\n                                                                               // mode as driver ram is 128 wide\n  screenBuffer[7] = inLeftHandedMode ? OLED_GRAM_END_FLIP : OLED_GRAM_END;     // End address of the ram segment we are writing to (96 wide)\n  screenBuffer[9] = inLeftHandedMode ? 0xC8 : 0xC0;\n  // Force a screen refresh\n  const int len = FRAMEBUFFER_START + (OLED_WIDTH * (OLED_HEIGHT / 8));\n  I2C_CLASS::Transmit(DEVICEADDR_OLED, screenBuffer, len);\n  osDelay(TICKS_10MS);\n  checkDisplayBufferChecksum();\n}\n\nvoid OLED::setBrightness(uint8_t contrast) {\n  if (OLED_Setup_Array[15].val != contrast) {\n    OLED_Setup_Array[15].val = contrast;\n    I2C_CLASS::writeRegistersBulk(DEVICEADDR_OLED, &OLED_Setup_Array[14], 2);\n  }\n}\n\nvoid OLED::setInverseDisplay(bool inverse) {\n  uint8_t normalInverseCmd = inverse ? 0xA7 : 0xA6;\n  if (OLED_Setup_Array[21].val != normalInverseCmd) {\n    OLED_Setup_Array[21].val = normalInverseCmd;\n    I2C_CLASS::I2C_RegisterWrite(DEVICEADDR_OLED, 0x80, normalInverseCmd);\n  }\n}\n\n// print a string to the current cursor location, len chars MAX\nvoid OLED::print(const char *const str, FontStyle fontStyle, uint8_t len, const uint8_t soft_x_limit) {\n  const uint8_t *next = reinterpret_cast<const uint8_t *>(str);\n  if (next[0] == 0x01) {\n    fontStyle = FontStyle::LARGE;\n    next++;\n  }\n  while (next[0] && len--) {\n    uint16_t index;\n    if (next[0] <= 0xF0) {\n      index = next[0];\n      next++;\n    } else {\n      if (!next[1]) {\n        return;\n      }\n      index = (next[0] - 0xF0) * 0xFF - 15 + next[1];\n      next += 2;\n    }\n    drawChar(index, fontStyle, soft_x_limit);\n  }\n}\n\n/**\n * Prints a static string message designed to use the whole screen, starting\n * from the top-left corner.\n *\n * If the message starts with a newline (`\\\\x01`), the string starting from\n * after the newline is printed in the large font. Otherwise, the message\n * is printed in the small font.\n *\n * @param string The string message to be printed\n */\nvoid OLED::printWholeScreen(const char *string) {\n  setCursor(0, 0);\n  if (string[0] == '\\x01') {\n    // Empty first line means that this uses large font (for CJK).\n    OLED::print(string + 1, FontStyle::LARGE);\n  } else {\n    OLED::print(string, FontStyle::SMALL);\n  }\n}\n\n// Print *F or *C - in font style of Small, Large (by default) or Extra based on input arg\nvoid OLED::printSymbolDeg(const FontStyle fontStyle) {\n  switch (fontStyle) {\n  case FontStyle::EXTRAS:\n    // Picks *F or *C in ExtraFontChars[] from Font.h\n    OLED::drawSymbol(getSettingValue(SettingsOptions::TemperatureInF) ? 0 : 1);\n    break;\n  case FontStyle::LARGE:\n    OLED::print(getSettingValue(SettingsOptions::TemperatureInF) ? LargeSymbolDegF : LargeSymbolDegC, fontStyle);\n    break;\n  case FontStyle::SMALL:\n  default:\n    OLED::print(getSettingValue(SettingsOptions::TemperatureInF) ? SmallSymbolDegF : SmallSymbolDegC, fontStyle);\n    break;\n  }\n}\n\ninline void stripLeaderZeros(char *buffer, uint8_t places) {\n  // Removing the leading zero's by swapping them to SymbolSpace\n  // Stop 1 short so that we dont blank entire number if its zero\n  for (int i = 0; i < (places - 1); i++) {\n    if (buffer[i] == 2) {\n      buffer[i] = LargeSymbolSpace[0];\n    } else {\n      return;\n    }\n  }\n}\n\nvoid OLED::drawHex(uint32_t x, FontStyle fontStyle, uint8_t digits) {\n  // print number to hex\n  for (uint_fast8_t i = 0; i < digits; i++) {\n    uint16_t value = (x >> (4 * (7 - i))) & 0b1111;\n    drawChar(value + 2, fontStyle, 0);\n  }\n}\n\n// maximum places is 5\nvoid OLED::printNumber(uint16_t number, uint8_t places, FontStyle fontStyle, bool noLeaderZeros) {\n  char buffer[7] = {0};\n\n  if (places >= 5) {\n    buffer[5] = 2 + number % 10;\n    number /= 10;\n  }\n  if (places > 4) {\n    buffer[4] = 2 + number % 10;\n    number /= 10;\n  }\n\n  if (places > 3) {\n    buffer[3] = 2 + number % 10;\n    number /= 10;\n  }\n\n  if (places > 2) {\n    buffer[2] = 2 + number % 10;\n    number /= 10;\n  }\n\n  if (places > 1) {\n    buffer[1] = 2 + number % 10;\n    number /= 10;\n  }\n\n  buffer[0] = 2 + number % 10;\n  if (noLeaderZeros) {\n    stripLeaderZeros(buffer, places);\n  }\n  print(buffer, fontStyle);\n}\n\nvoid OLED::debugNumber(int32_t val, FontStyle fontStyle) {\n  if (abs(val) > 99999) {\n    OLED::print(LargeSymbolSpace, fontStyle); // out of bounds\n    return;\n  }\n  if (val >= 0) {\n    OLED::print(LargeSymbolSpace, fontStyle);\n    OLED::printNumber(val, 5, fontStyle);\n  } else {\n    OLED::print(LargeSymbolMinus, fontStyle);\n    OLED::printNumber(-val, 5, fontStyle);\n  }\n}\n\nvoid OLED::drawSymbol(uint8_t symbolID) {\n  // draw a symbol to the current cursor location\n  drawChar(symbolID, FontStyle::EXTRAS, 0);\n}\n\n// Draw an area, but y must be aligned on 0/8 offset\nvoid OLED::drawArea(int16_t x, int8_t y, uint8_t width, uint8_t height, const uint8_t *ptr) {\n  // Splat this from x->x+width in two strides\n  if (x <= -width) {\n    return; // cutoffleft\n  }\n  if (x > OLED_WIDTH) {\n    return; // cutoff right\n  }\n\n  uint8_t visibleStart = 0;\n  uint8_t visibleEnd   = width;\n\n  // trimming to draw partials\n  if (x < 0) {\n    visibleStart -= x; // subtract negative value == add absolute value\n  }\n  if (x + width > OLED_WIDTH) {\n    visibleEnd = OLED_WIDTH - x;\n  }\n  uint8_t rowsDrawn = 0;\n  while (height > 0) {\n    for (uint8_t xx = visibleStart; xx < visibleEnd; xx++) {\n      stripPointers[(y / 8) + rowsDrawn][x + xx] = ptr[xx + (rowsDrawn * width)];\n    }\n    height -= 8;\n    rowsDrawn++;\n  }\n}\n\n// Draw an area, but y must be aligned on 0/8 offset\n// For data which has octets swapped in a 16-bit word.\nvoid OLED::drawAreaSwapped(int16_t x, int8_t y, uint8_t width, uint8_t height, const uint8_t *ptr) {\n  // Splat this from x->x+width in two strides\n  if (x <= -width) {\n    return; // cutoffleft\n  }\n  if (x > OLED_WIDTH) {\n    return; // cutoff right\n  }\n\n  uint8_t visibleStart = 0;\n  uint8_t visibleEnd   = width;\n\n  // trimming to draw partials\n  if (x < 0) {\n    visibleStart -= x; // subtract negative value == add absolute value\n  }\n  if (x + width > OLED_WIDTH) {\n    visibleEnd = OLED_WIDTH - x;\n  }\n\n  uint8_t rowsDrawn = 0;\n  while (height > 0) {\n    for (uint8_t xx = visibleStart; xx < visibleEnd; xx += 2) {\n      stripPointers[(y / 8) + rowsDrawn][x + xx]     = ptr[xx + 1 + (rowsDrawn * width)];\n      stripPointers[(y / 8) + rowsDrawn][x + xx + 1] = ptr[xx + (rowsDrawn * width)];\n    }\n    height -= 8;\n    rowsDrawn++;\n  }\n}\n\nvoid OLED::fillArea(int16_t x, int8_t y, uint8_t wide, uint8_t height, const uint8_t value) {\n  // Splat this from x->x+wide in two strides\n  if (x <= -wide) {\n    return; // cutoffleft\n  }\n  if (x > OLED_WIDTH) {\n    return; // cutoff right\n  }\n\n  uint8_t visibleStart = 0;\n  uint8_t visibleEnd   = wide;\n\n  // trimming to draw partials\n  if (x < 0) {\n    visibleStart -= x; // subtract negative value == add absolute value\n  }\n  if (x + wide > OLED_WIDTH) {\n    visibleEnd = OLED_WIDTH - x;\n  }\n\n  uint8_t rowsDrawn = 0;\n  while (height > 0) {\n    for (uint8_t xx = visibleStart; xx < visibleEnd; xx++) {\n      stripPointers[(y / 8) + rowsDrawn][x + xx] = value;\n    }\n    height -= 8;\n    rowsDrawn++;\n  }\n}\n\nvoid OLED::drawFilledRect(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, bool clear) {\n  // Ensure coordinates are within bounds\n  if (x0 >= OLED_WIDTH || y0 >= OLED_HEIGHT || x1 >= OLED_WIDTH || y1 >= OLED_HEIGHT) {\n    return;\n  }\n\n  // Calculate the height in rows\n  uint8_t startRow  = y0 / 8;\n  uint8_t endRow    = y1 / 8;\n  uint8_t startMask = 0xFF << (y0 % 8);\n  uint8_t endMask   = 0xFF >> (7 - (y1 % 8));\n\n  for (uint8_t row = startRow; row <= endRow; row++) {\n    uint8_t mask = 0xFF;\n    if (row == startRow) {\n      mask &= startMask;\n    }\n    if (row == endRow) {\n      mask &= endMask;\n    }\n\n    for (uint8_t x = x0; x <= x1; x++) {\n      if (clear) {\n        stripPointers[row][x] &= ~mask;\n      } else {\n        stripPointers[row][x] |= mask;\n      }\n    }\n  }\n}\n\nvoid OLED::drawHeatSymbol(uint8_t state) {\n  // Draw symbol 14\n  // Then draw over it, the bottom 5 pixels always stay. 8 pixels above that are\n  // the levels masks the symbol nicely\n  state /= 31; // 0-> 8 range\n  // Then we want to draw down (16-(5+state)\n  uint16_t cursor_x_temp = cursor_x;\n  drawSymbol(14);\n  /*\n       / / / / /\n      / / / / /\n      +---------+\n      |         |\n      +---------+\n\n\n      <- 14 px ->\n      What we are doing is aiming to clear a section of the screen, down to the base depending on how much PWM we are using.\n      Larger numbers mean more heat, so we clear less of the screen.\n  */\n  drawFilledRect(cursor_x_temp, 0, cursor_x_temp + 12, 2 + (8 - state), true);\n}\n\nbool OLED::isInitDone() { return initDone; }\n"
  },
  {
    "path": "source/Core/Drivers/OLED.hpp",
    "content": "/*\r\n * OLED.hpp\r\n *\r\n *  Created on: 20Jan.,2017\r\n *      Author: Ben V. Brown <Ralim>\r\n *      Designed for the SSD1307\r\n *      Cleared for release for TS100 2017/08/20\r\n */\r\n\r\n#ifndef OLED_HPP_\r\n#define OLED_HPP_\r\n#include \"Font.h\"\r\n#include \"cmsis_os.h\"\r\n#include \"configuration.h\"\r\n#include <BSP.h>\r\n#include <stdbool.h>\r\n#include <string.h>\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n#include \"FreeRTOS.h\"\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#if defined(OLED_I2CBB2)\r\n#include \"I2CBB2.hpp\"\r\n#define I2C_CLASS I2CBB2\r\n#elif defined(OLED_I2CBB1)\r\n#include \"I2CBB1.hpp\"\r\n#define I2C_CLASS I2CBB1\r\n#else\r\n#define I2C_CLASS FRToSI2C\r\n#include \"I2C_Wrapper.hpp\"\r\n#endif\r\n\r\n#define DEVICEADDR_OLED (0x3c << 1)\r\n\r\n#ifdef OLED_128x32\r\n\r\n#define OLED_WIDTH           128\r\n#define OLED_HEIGHT          32\r\n#define OLED_GRAM_START      0x00 // Should be 0x00 when we have full width\r\n#define OLED_GRAM_END        0x7F // Should be 0x7F when we have full width\r\n#define OLED_GRAM_START_FLIP 0\r\n#define OLED_GRAM_END_FLIP   0x7F\r\n\r\n#define OLED_VCOM_LAYOUT 0x12\r\n#define OLED_SEGMENT_MAP_REVERSED\r\n#define OLED_DIVIDER 0xD3\r\n\r\n#else\r\n\r\n#define OLED_WIDTH           96\r\n#define OLED_HEIGHT          16\r\n#define OLED_GRAM_START      0x20\r\n#define OLED_GRAM_END        0x7F\r\n#define OLED_GRAM_START_FLIP 0\r\n#define OLED_GRAM_END_FLIP   95\r\n\r\n#define OLED_VCOM_LAYOUT 0x02\r\n#define OLED_SEGMENT_MAP 0xA0\r\n#define OLED_DIVIDER     0xD5\r\n\r\n#endif /* OLED_128x32 */\r\n\r\n#define OLED_ON  0xAF\r\n#define OLED_OFF 0xAE\r\n\r\n#define FRAMEBUFFER_START 17\r\n\r\nenum class FontStyle {\r\n  SMALL,\r\n  LARGE,\r\n  EXTRAS,\r\n};\r\n\r\nclass OLED {\r\npublic:\r\n  enum DisplayState : bool { OFF = false, ON = true };\r\n\r\n  static void initialize(); // Startup the I2C coms (brings screen out of reset etc)\r\n  static bool isInitDone();\r\n  // Draw the buffer out to the LCD if any content has changed.\r\n  static void refresh() {\r\n\r\n    if (checkDisplayBufferChecksum()) {\r\n      const int len = FRAMEBUFFER_START + (OLED_WIDTH * (OLED_HEIGHT / 8));\r\n      I2C_CLASS::Transmit(DEVICEADDR_OLED, screenBuffer, len);\r\n      // DMA tx time is ~ 20mS Ensure after calling this you delay for at least 25ms\r\n      // or we need to goto double buffering\r\n    }\r\n  }\r\n\r\n  static void setDisplayState(DisplayState state) {\r\n    if (state != displayState) {\r\n      displayState    = state;\r\n      screenBuffer[1] = (state == ON) ? OLED_ON : OLED_OFF;\r\n      // Dump the screen state change out _now_\r\n      I2C_CLASS::Transmit(DEVICEADDR_OLED, screenBuffer, FRAMEBUFFER_START - 1);\r\n      osDelay(TICKS_10MS);\r\n    }\r\n  }\r\n\r\n  // Set the rotation for the screen\r\n  static void setRotation(bool leftHanded);\r\n  // Get the current rotation of the LCD\r\n  static bool getRotation() {\r\n#ifdef OLED_FLIP\r\n    return !inLeftHandedMode;\r\n#else\r\n    return inLeftHandedMode;\r\n#endif /* OLED_FLIP */\r\n  }\r\n  static void    setBrightness(uint8_t contrast);\r\n  static void    setInverseDisplay(bool inverted);\r\n  static int16_t getCursorX() { return cursor_x; }\r\n  // Draw a string to the current location, with selected font; optionally - with MAX length only\r\n  static void print(const char *string, FontStyle fontStyle, uint8_t length = 255, const uint8_t soft_x_limit = 0);\r\n  static void printWholeScreen(const char *string);\r\n  // Print *F or *C - in font style of Small, Large (by default) or Extra based on input arg\r\n  static void printSymbolDeg(FontStyle fontStyle = FontStyle::LARGE);\r\n  // Set the cursor location by pixels\r\n  static void setCursor(int16_t x, int16_t y) {\r\n    cursor_x = x;\r\n    cursor_y = y;\r\n  }\r\n  // Draws an image to the buffer, at x offset from top to bottom (fixed height renders)\r\n  static void drawImage(const uint8_t *buffer, uint8_t x, uint8_t width) { drawArea(x, 0, width, 16, buffer); }\r\n  // Draws a number at the current cursor location\r\n  static void printNumber(uint16_t number, uint8_t places, FontStyle fontStyle, bool noLeaderZeros = true);\r\n  // Clears the buffer\r\n  static void clearScreen() { memset(stripPointers[0], 0, OLED_WIDTH * (OLED_HEIGHT / 8)); }\r\n  // Draws the battery level symbol\r\n  static void drawBattery(uint8_t state) { drawSymbol(3 + (state > 10 ? 10 : state)); }\r\n  // Draws a checkbox\r\n  static void drawCheckbox(bool state) { drawSymbol((state) ? 16 : 17); }\r\n  inline static void drawUnavailableIcon() { drawArea(OLED_WIDTH - OLED_HEIGHT - 2, 0, OLED_HEIGHT, OLED_HEIGHT, UnavailableIcon); }\r\n  static void debugNumber(int32_t val, FontStyle fontStyle);\r\n  static void drawHex(uint32_t x, FontStyle fontStyle, uint8_t digits);\r\n  static void drawSymbol(uint8_t symbolID);                                                           // Used for drawing symbols of a predictable width\r\n  static void drawArea(int16_t x, int8_t y, uint8_t wide, uint8_t height, const uint8_t *ptr);        // Draw an area, but y must be aligned on 0/8 offset\r\n  static void drawAreaSwapped(int16_t x, int8_t y, uint8_t wide, uint8_t height, const uint8_t *ptr); // Draw an area, but y must be aligned on 0/8 offset\r\n  static void fillArea(int16_t x, int8_t y, uint8_t wide, uint8_t height, const uint8_t value);       // Fill an area, but y must be aligned on 0/8 offset\r\n  static void drawFilledRect(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, bool clear);\r\n  static void drawHeatSymbol(uint8_t state);\r\n  static void drawScrollIndicator(uint8_t p, uint8_t h); // Draws a scrolling position indicator\r\n  static void maskScrollIndicatorOnOLED();\r\n  static void transitionSecondaryFramebuffer(const bool forwardNavigation, const TickType_t viewEnterTime);\r\n  static void useSecondaryFramebuffer(bool useSecondary);\r\n  static void transitionScrollDown(const TickType_t viewEnterTime);\r\n  static void transitionScrollUp(const TickType_t viewEnterTime);\r\n\r\nprivate:\r\n  static bool checkDisplayBufferChecksum() {\r\n    uint32_t  hash = 0;\r\n    const int len  = sizeof(screenBuffer);\r\n    for (int i = 0; i < len; i++) {\r\n      hash += (i * screenBuffer[i]);\r\n    }\r\n\r\n    bool result     = hash != displayChecksum;\r\n    displayChecksum = hash;\r\n    return result;\r\n  }\r\n  static void         drawChar(uint16_t charCode, FontStyle fontStyle, const uint8_t soft_x_limit); // Draw a character to the current cursor location\r\n  static void         setFramebuffer(uint8_t *buffer);\r\n  static uint8_t     *stripPointers[4]; // Pointers to the strips to allow for buffer having extra content\r\n  static bool         inLeftHandedMode; // Whether the screen is in left or not (used for offsets in GRAM)\r\n  static bool         initDone;\r\n  static DisplayState displayState;\r\n  static int16_t      cursor_x, cursor_y;\r\n  static uint8_t      displayOffset;\r\n  static uint32_t     displayChecksum;\r\n  static uint8_t      screenBuffer[16 + (OLED_WIDTH * (OLED_HEIGHT / 8)) + 10]; // The data buffer\r\n  static uint8_t      secondFrameBuffer[16 + OLED_WIDTH * (OLED_HEIGHT / 8) + 10];\r\n};\r\n\r\n#endif /* OLED_HPP_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/README.md",
    "content": "# Drivers\r\n\r\nDrivers are the classes used to represent physical hardware on the board in a more abstract way, that are more complex than just an IO\r\n\r\n* OLED Display\r\n* Accelerometers\r\n* Button handling logic\r\n* Tip thermo response modelling\r\n\r\nAll drivers should be written with minimal hardware assumptions, and defer hardware related logic to the BSP folder where possible"
  },
  {
    "path": "source/Core/Drivers/SC7A20.cpp",
    "content": "/*\r\n * SC7A20.cpp\r\n *\r\n *  Created on: 18 Sep. 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"LIS2DH12_defines.hpp\"\r\n#include \"accelerometers_common.h\"\r\n#include <SC7A20.hpp>\r\n#include <SC7A20_defines.h>\r\n#include <array>\r\n\r\nbool SC7A20::isInImitationMode;\r\n/*\r\n- This little accelerometer seems to come in two forms, its \"normal\" setup, and then one where it imitates the LIS2DH12\r\n- This can be detected by checking the whoami registers\r\n*/\r\n\r\nbool SC7A20::detect() {\r\n  if (ACCEL_I2C_CLASS::probe(SC7A20_ADDRESS)) {\r\n    // Read chip id to ensure its not an address collision\r\n    uint8_t id = 0;\r\n    if (ACCEL_I2C_CLASS::Mem_Read(SC7A20_ADDRESS, SC7A20_WHO_AMI_I, &id, 1)) {\r\n      if (id == SC7A20_WHO_AM_I_VALUE) {\r\n        isInImitationMode = false;\r\n        return true;\r\n      }\r\n    }\r\n  }\r\n  if (ACCEL_I2C_CLASS::probe(SC7A20_ADDRESS2)) {\r\n    // Read chip id to ensure its not an address collision\r\n    uint8_t id = 0;\r\n    if (ACCEL_I2C_CLASS::Mem_Read(SC7A20_ADDRESS2, SC7A20_WHO_AMI_I, &id, 1)) {\r\n      if (id == SC7A20_WHO_AM_I_VALUE) {\r\n        isInImitationMode = true;\r\n        return true;\r\n      }\r\n    }\r\n  }\r\n  return false;\r\n}\r\n\r\nstatic const ACCEL_I2C_CLASS::I2C_REG i2c_registers[] = {\r\n    //\r\n    //\r\n    {    SC7A20_CTRL_REG1, 0b01100111, 0}, // 200Hz, XYZ enabled\r\n    {    SC7A20_CTRL_REG2, 0b00000000, 0}, // Setup filter to 0x00 ??\r\n    {    SC7A20_CTRL_REG3, 0b00000000, 0}, // int1 off\r\n    {    SC7A20_CTRL_REG4, 0b01001000, 0}, // Block mode off,little-endian,2G,High-pres,self test off\r\n    {    SC7A20_CTRL_REG5, 0b00000100, 0}, // fifo off, D4D on int1\r\n    {    SC7A20_CTRL_REG6,       0x00, 0}, // INT2 off\r\n                                       // Basically setup the unit to run, and enable 4D orientation detection\r\n    {     SC7A20_INT2_CFG, 0b01111110, 0}, // setup for movement detection\r\n    {     SC7A20_INT2_THS,       0x28, 0}, //\r\n    {SC7A20_INT2_DURATION,         64, 0}, //\r\n    {     SC7A20_INT1_CFG, 0b01111110, 0}, //\r\n    {     SC7A20_INT1_THS,       0x28, 0}, //\r\n    {SC7A20_INT1_DURATION,         64, 0}\r\n\r\n    //\r\n};\r\nstatic const ACCEL_I2C_CLASS::I2C_REG i2c_registers_alt[] = {\r\n    {    LIS_CTRL_REG1, 0b00110111, 0}, // 200Hz XYZ\r\n    {    LIS_CTRL_REG2, 0b00000000, 0}, //\r\n    {    LIS_CTRL_REG3, 0b01100000, 0}, // Setup interrupt pins\r\n    {    LIS_CTRL_REG4, 0b00001000, 0}, // Block update mode off, HR on\r\n    {    LIS_CTRL_REG5, 0b00000010, 0}, //\r\n    {    LIS_CTRL_REG6, 0b01100010, 0},\r\n    // Basically setup the unit to run, and enable 4D orientation detection\r\n    {     LIS_INT2_CFG, 0b01111110, 0}, // setup for movement detection\r\n    {     LIS_INT2_THS,       0x28, 0}, //\r\n    {LIS_INT2_DURATION,         64, 0}, //\r\n    {     LIS_INT1_CFG, 0b01111110, 0}, //\r\n    {     LIS_INT1_THS,       0x28, 0}, //\r\n    {LIS_INT1_DURATION,         64, 0}\r\n};\r\n\r\nbool SC7A20::initalize() {\r\n  // Setup acceleration readings\r\n  // 2G range\r\n  // bandwidth = 250Hz\r\n  // High pass filter on (Slow compensation)\r\n  // Turn off IRQ output pins\r\n  // Orientation recognition in symmetrical mode\r\n  // Hysteresis is set to ~ 16 counts\r\n  // Theta blocking is set to 0b10\r\n  if (isInImitationMode) {\r\n    return ACCEL_I2C_CLASS::writeRegistersBulk(SC7A20_ADDRESS2, i2c_registers_alt, sizeof(i2c_registers_alt) / sizeof(i2c_registers_alt[0]));\r\n  } else {\r\n    return ACCEL_I2C_CLASS::writeRegistersBulk(SC7A20_ADDRESS, i2c_registers, sizeof(i2c_registers) / sizeof(i2c_registers[0]));\r\n  }\r\n}\r\n\r\nvoid SC7A20::getAxisReadings(int16_t &x, int16_t &y, int16_t &z) {\r\n  // We can tell the accelerometer to output in LE mode which makes this simple\r\n  uint16_t sensorData[3] = {0, 0, 0};\r\n\r\n  if (ACCEL_I2C_CLASS::Mem_Read(isInImitationMode ? SC7A20_ADDRESS2 : SC7A20_ADDRESS, isInImitationMode ? SC7A20_OUT_X_L_ALT : SC7A20_OUT_X_L, (uint8_t *)sensorData, 6) == false) {\r\n    x = y = z = 0;\r\n    return;\r\n  }\r\n  // Shift 6 to make its range ~= the other accelerometers\r\n  x = sensorData[0];\r\n  y = sensorData[1];\r\n  z = sensorData[2];\r\n}\r\n"
  },
  {
    "path": "source/Core/Drivers/SC7A20.hpp",
    "content": "/*\r\n * BMA223.hpp\r\n *\r\n *  Created on: 18 Sep. 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef CORE_DRIVERS_SC7A20_HPP_\r\n#define CORE_DRIVERS_SC7A20_HPP_\r\n#include \"BSP.h\"\r\n#include \"I2C_Wrapper.hpp\"\r\n#include \"SC7A20_defines.h\"\r\n#include \"accelerometers_common.h\"\r\n\r\nclass SC7A20 {\r\npublic:\r\n  static bool detect();\r\n  static bool initalize();\r\n  // 1 = rh, 2,=lh, 8=flat\r\n  static Orientation getOrientation() {\r\n    uint8_t val = ((ACCEL_I2C_CLASS::I2C_RegisterRead(isInImitationMode ? SC7A20_ADDRESS2 : SC7A20_ADDRESS, SC7A20_INT2_SOURCE) >> 2) - 1);\r\n    if (val == 1) {\r\n#ifdef SC7_ORI_FLIP\r\n      return Orientation::ORIENTATION_RIGHT_HAND;\r\n#else\r\n      return Orientation::ORIENTATION_LEFT_HAND;\r\n#endif\r\n    } else if (val == 4 || val == 0) {\r\n#ifdef SC7_ORI_FLIP\r\n      return Orientation::ORIENTATION_LEFT_HAND;\r\n#else\r\n      return Orientation::ORIENTATION_RIGHT_HAND;\r\n#endif\r\n    } else\r\n      return Orientation::ORIENTATION_FLAT;\r\n  }\r\n  static void getAxisReadings(int16_t &x, int16_t &y, int16_t &z);\r\n\r\nprivate:\r\n  static bool isInImitationMode;\r\n};\r\n\r\n#endif /* CORE_DRIVERS_BMA223_HPP_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/SC7A20_defines.h",
    "content": "/*\r\n * SC7A20_defines.h\r\n *\r\n *  Created on: 18 Sep. 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef CORE_DRIVERS_SC7A20_DEFINES_H_\r\n#define CORE_DRIVERS_SC7A20_DEFINES_H_\r\n\r\n#define SC7A20_ADDRESS 0x18 << 1\r\n// Sometimes the SC7A20 turns up programmed to impersonate the LIS2DH12\r\n#define SC7A20_ADDRESS2 (25 << 1)\r\n\r\n#define SC7A20_WHO_AM_I_VALUE (0b00010001)\r\n#define SC7A20_WHO_AMI_I      0x0F\r\n#define SC7A20_CTRL_REG1      0x20\r\n#define SC7A20_CTRL_REG2      0x21\r\n#define SC7A20_CTRL_REG3      0x22\r\n#define SC7A20_CTRL_REG4      0x23\r\n#define SC7A20_CTRL_REG5      0x24\r\n#define SC7A20_CTRL_REG6      0x25\r\n#define SC7A20_REFERENCE      0x26\r\n#define SC7A20_STATUS_REG     0x27\r\n#define SC7A20_OUT_X_L        0x28\r\n#define SC7A20_OUT_X_L_ALT    0xA8\r\n#define SC7A20_OUT_X_H        0x29\r\n#define SC7A20_OUT_Y_L        0x2A\r\n#define SC7A20_OUT_Y_H        0x2B\r\n#define SC7A20_OUT_Z_L        0x2C\r\n#define SC7A20_OUT_Z_H        0x2D\r\n#define SC7A20_FIFO_CTRL      0x2E\r\n#define SC7A20_FIFO_SRC       0x2F\r\n#define SC7A20_INT1_CFG       0x30\r\n#define SC7A20_INT1_SOURCE    0x31\r\n#define SC7A20_INT1_THS       0x32\r\n#define SC7A20_INT1_DURATION  0x33\r\n#define SC7A20_INT2_CFG       0x34\r\n#define SC7A20_INT2_SOURCE    0x35\r\n#define SC7A20_INT2_THS       0x36\r\n#define SC7A20_INT2_DURATION  0x37\r\n#define SC7A20_CLICK_CFG      0x38\r\n#define SC7A20_CLICK_SRC      0x39\r\n#define SC7A20_CLICK_THS      0x3A\r\n#define SC7A20_TIME_LIMIT     0x3B\r\n#define SC7A20_TIME_LATENCY   0x3C\r\n#define SC7A20_TIME_WINDOW    0x3D\r\n#define SC7A20_ACT_THS        0x3E\r\n#define SC7A20_ACT_DURATION   0x3F\r\n\r\n#endif /* CORE_DRIVERS_BMA223_DEFINES_H_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/Si7210.cpp",
    "content": "/*\r\n * Si7210.cpp\r\n *\r\n *  Created on: 5 Oct. 2020\r\n *      Author: Ralim\r\n *\r\n *      This is based on the very nice sample code by Sean Farrelly (@FARLY7)\r\n *      Over here : https://github.com/FARLY7/si7210-driver\r\n *\r\n *      This class is licensed as MIT to match this code base\r\n */\r\n\r\n#include \"Si7210_defines.h\"\r\n#include \"accelerometers_common.h\"\r\n#include <Si7210.h>\r\n#ifdef MAG_SLEEP_SUPPORT\r\nbool Si7210::detect() { return FRToSI2C::wakePart(SI7210_ADDRESS); }\r\n\r\nbool Si7210::init() {\r\n  // Turn on auto increment and sanity check ID\r\n  // Load OTP cal\r\n\r\n  uint8_t temp;\r\n  if (ACCEL_I2C_CLASS::Mem_Read(SI7210_ADDRESS, SI7210_REG_ID, &temp, 1)) {\r\n    // We don't really care what model it is etc, just probing to check its probably this iC\r\n    if (temp != 0x00 && temp != 0xFF) {\r\n      temp = 0x00;\r\n\r\n      /* Set device and internal driver settings */\r\n      if (!write_reg(SI7210_CTRL1, (uint8_t)~SW_LOW4FIELD_MASK, 0)) {\r\n        return false;\r\n      }\r\n\r\n      /* Disable periodic auto-wakeup by device, and tamper detect. */\r\n      if ((!write_reg(SI7210_CTRL3, (uint8_t)~SL_TIMEENA_MASK, 0))) {\r\n        return false;\r\n      }\r\n\r\n      /* Disable tamper detection by setting sw_tamper to 63 */\r\n      if (!write_reg(SI7210_CTRL3, SL_FAST_MASK | SL_TIMEENA_MASK, 63 << 2)) {\r\n        return false;\r\n      }\r\n\r\n      if (!set_high_range()) {\r\n        return false;\r\n      }\r\n\r\n      /* Stop the control loop by setting stop bit */\r\n      if (!write_reg(SI7210_POWER_CTRL, MEAS_MASK | USESTORE_MASK, STOP_MASK)) { /* WARNING: Removed USE_STORE MASK */\r\n        return false;\r\n      }\r\n\r\n      /* Use a burst size of 128/4096 samples in FIR and IIR modes */\r\n      if (!write_reg(SI7210_CTRL4, 0, DF_BURSTSIZE_128 | DF_BW_4096)) {\r\n        return false;\r\n      }\r\n\r\n      /* Select field strength measurement */\r\n      if (!write_reg(SI7210_DSPSIGSEL, 0, DSP_SIGSEL_FIELD_MASK)) {\r\n        return false;\r\n      }\r\n\r\n      return true; // start_periodic_measurement();\r\n    }\r\n  }\r\n  return false;\r\n}\r\n\r\nint16_t Si7210::read() {\r\n  // Read the two regs\r\n  int16_t temp = 0;\r\n  if (!get_field_strength(&temp)) {\r\n    temp = 0;\r\n  }\r\n  return temp;\r\n}\r\n\r\nbool Si7210::write_reg(const uint8_t reg, const uint8_t mask, const uint8_t val) {\r\n  uint8_t temp = 0;\r\n  if (mask) {\r\n    if (!read_reg(reg, &temp)) {\r\n      return false;\r\n    }\r\n    temp &= mask;\r\n  }\r\n  temp |= val;\r\n  return ACCEL_I2C_CLASS::Mem_Write(SI7210_ADDRESS, reg, &temp, 1);\r\n}\r\n\r\nbool Si7210::read_reg(const uint8_t reg, uint8_t *val) { return ACCEL_I2C_CLASS::Mem_Read(SI7210_ADDRESS, reg, val, 1); }\r\n\r\nbool Si7210::start_periodic_measurement() {\r\n  /* Enable periodic wakeup */\r\n  if (!write_reg(SI7210_CTRL3, (uint8_t)~SL_TIMEENA_MASK, SL_TIMEENA_MASK)) {\r\n    return false;\r\n  }\r\n\r\n  /* Start measurement */\r\n  /* Change to ~STOP_MASK with STOP_MASK */\r\n  return write_reg(SI7210_POWER_CTRL, MEAS_MASK | USESTORE_MASK, 0);\r\n}\r\n\r\nbool Si7210::get_field_strength(int16_t *field) {\r\n  *field      = 0;\r\n  uint8_t val = 0;\r\n  ACCEL_I2C_CLASS::wakePart(SI7210_ADDRESS);\r\n\r\n  if (!write_reg(SI7210_POWER_CTRL, MEAS_MASK | USESTORE_MASK, STOP_MASK)) {\r\n    return false;\r\n  }\r\n\r\n  /* Read most-significant byte */\r\n  if (!read_reg(SI7210_DSPSIGM, &val)) {\r\n    return false;\r\n  }\r\n  *field = (val & DSP_SIGM_DATA_MASK) << 8;\r\n\r\n  /* Read least-significant byte of data */\r\n  if (!read_reg(SI7210_DSPSIGL, &val)) {\r\n    return false;\r\n  }\r\n\r\n  *field += val;\r\n  *field -= 16384U;\r\n  // field is now a +- measurement\r\n  // In units of 0.0125 mT\r\n  // Aka 12.5uT\r\n  // Clear flags\r\n  read_reg(SI7210_CTRL1, &val);\r\n  read_reg(SI7210_CTRL2, &val);\r\n  // Start next one\r\n\r\n  /* Use a burst size of 128/4096 samples in FIR and IIR modes */\r\n  write_reg(SI7210_CTRL4, 0, DF_BURSTSIZE_128 | DF_BW_4096);\r\n\r\n  /* Selet field strength measurement */\r\n  write_reg(SI7210_DSPSIGSEL, 0, DSP_SIGSEL_FIELD_MASK);\r\n\r\n  /* Start measurement */\r\n  write_reg(SI7210_POWER_CTRL, MEAS_MASK | USESTORE_MASK, ONEBURST_MASK);\r\n\r\n  return true;\r\n}\r\n\r\nbool Si7210::set_high_range() {\r\n  // To set the unit into 200mT range, no magnet temperature calibration\r\n  // We want to copy OTP 0x27->0x2C into a0->a5\r\n  uint8_t base_addr = 0x27; // You can change this to pick the temp calibration\r\n  bool    worked    = true;\r\n  uint8_t val       = 0;\r\n\r\n  /* Load A0 register */\r\n  worked &= write_reg(SI7210_OTP_ADDR, 0, base_addr);\r\n  worked &= write_reg(SI7210_OTP_CTRL, 0, OTP_READ_EN_MASK);\r\n  worked &= read_reg(SI7210_OTP_DATA, &val);\r\n  worked &= write_reg(SI7210_A0, 0, val);\r\n\r\n  /* Load A1 register */\r\n  worked &= write_reg(SI7210_OTP_ADDR, 0, base_addr + 1);\r\n  worked &= write_reg(SI7210_OTP_CTRL, 0, OTP_READ_EN_MASK);\r\n  worked &= read_reg(SI7210_OTP_DATA, &val);\r\n  worked &= write_reg(SI7210_A1, 0, val);\r\n\r\n  /* Load A2 register */\r\n  worked &= write_reg(SI7210_OTP_ADDR, 0, base_addr + 2);\r\n  worked &= write_reg(SI7210_OTP_CTRL, 0, OTP_READ_EN_MASK);\r\n  worked &= read_reg(SI7210_OTP_DATA, &val);\r\n  worked &= write_reg(SI7210_A2, 0, val);\r\n\r\n  /* Load A3 register */\r\n  worked &= write_reg(SI7210_OTP_ADDR, 0, base_addr + 3);\r\n  worked &= write_reg(SI7210_OTP_CTRL, 0, OTP_READ_EN_MASK);\r\n  worked &= read_reg(SI7210_OTP_DATA, &val);\r\n  worked &= write_reg(SI7210_A3, 0, val);\r\n\r\n  /* Load A4 register */\r\n  worked &= write_reg(SI7210_OTP_ADDR, 0, base_addr + 4);\r\n  worked &= write_reg(SI7210_OTP_CTRL, 0, OTP_READ_EN_MASK);\r\n  worked &= read_reg(SI7210_OTP_DATA, &val);\r\n  worked &= write_reg(SI7210_A4, 0, val);\r\n\r\n  /* Load A5 register */\r\n  worked &= write_reg(SI7210_OTP_ADDR, 0, base_addr + 5);\r\n  worked &= write_reg(SI7210_OTP_CTRL, 0, OTP_READ_EN_MASK);\r\n  worked &= read_reg(SI7210_OTP_DATA, &val);\r\n  worked &= write_reg(SI7210_A5, 0, val);\r\n  return worked;\r\n}\r\n#endif // MAG_SLEEP_SUPPORT"
  },
  {
    "path": "source/Core/Drivers/Si7210.h",
    "content": "/*\r\n * Si7210.h\r\n *\r\n *  Created on: 5 Oct. 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef CORE_DRIVERS_SI7210_H_\r\n#define CORE_DRIVERS_SI7210_H_\r\n#include \"configuration.h\"\r\n#include <stdint.h>\r\n\r\n#ifdef MAG_SLEEP_SUPPORT\r\nclass Si7210 {\r\npublic:\r\n  // Return true if present\r\n  static bool detect();\r\n\r\n  static bool    init();\r\n  static int16_t read();\r\n\r\nprivate:\r\n  static bool write_reg(const uint8_t reg, const uint8_t mask, const uint8_t val);\r\n  static bool read_reg(const uint8_t reg, uint8_t *val);\r\n  static bool start_periodic_measurement();\r\n  static bool get_field_strength(int16_t *field);\r\n  static bool set_high_range();\r\n};\r\n#endif // MAG_SLEEP_SUPPORT\r\n#endif /* CORE_DRIVERS_SI7210_H_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/Si7210_defines.h",
    "content": "/*\r\n * Si7210_defines.h\r\n *\r\n *  Created on: 5 Oct. 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef CORE_DRIVERS_SI7210_DEFINES_H_\r\n#define CORE_DRIVERS_SI7210_DEFINES_H_\r\n\r\n#define SI7210_ADDRESS (0x30 << 1)\r\n#define SI7210_REG_ID  0xC0\r\n\r\n/* Si7210 Register addresses */\r\n#define SI7210_HREVID     0xC0U\r\n#define SI7210_DSPSIGM    0xC1U\r\n#define SI7210_DSPSIGL    0xC2U\r\n#define SI7210_DSPSIGSEL  0xC3U\r\n#define SI7210_POWER_CTRL 0xC4U\r\n#define SI7210_ARAUTOINC  0xC5U\r\n#define SI7210_CTRL1      0xC6U\r\n#define SI7210_CTRL2      0xC7U\r\n#define SI7210_SLTIME     0xC8U\r\n#define SI7210_CTRL3      0xC9U\r\n#define SI7210_A0         0xCAU\r\n#define SI7210_A1         0xCBU\r\n#define SI7210_A2         0xCCU\r\n#define SI7210_CTRL4      0xCDU\r\n#define SI7210_A3         0xCEU\r\n#define SI7210_A4         0xCFU\r\n#define SI7210_A5         0xD0U\r\n#define SI7210_OTP_ADDR   0xE1U\r\n#define SI7210_OTP_DATA   0xE2U\r\n#define SI7210_OTP_CTRL   0xE3U\r\n#define SI7210_TM_FG      0xE4U\r\n\r\n/* Si7210 Register bit masks */\r\n#define CHIP_ID_MASK        0xF0U\r\n#define REV_ID_MASK         0x0FU\r\n#define DSP_SIGSEL_MASK     0x07U\r\n#define MEAS_MASK           0x80U\r\n#define USESTORE_MASK       0x08U\r\n#define ONEBURST_MASK       0x04U\r\n#define STOP_MASK           0x02U\r\n#define SLEEP_MASK          0x01U\r\n#define ARAUTOINC_MASK      0x01U\r\n#define SW_LOW4FIELD_MASK   0x80U\r\n#define SW_OP_MASK          0x7FU\r\n#define SW_FIELDPOLSEL_MASK 0xC0U\r\n#define SW_HYST_MASK        0x3FU\r\n#define SW_TAMPER_MASK      0xFCU\r\n#define SL_FAST_MASK        0x02U\r\n#define SL_TIMEENA_MASK     0x01U\r\n#define DF_BURSTSIZE_MASK   0xE0U\r\n#define DF_BW_MASK          0x1EU\r\n#define DF_IIR_MASK         0x01U\r\n#define OTP_READ_EN_MASK    0x02U\r\n#define OTP_BUSY_MASK       0x01U\r\n#define TM_FG_MASK          0x03U\r\n\r\n#define DSP_SIGM_DATA_FLAG    0x80U\r\n#define DSP_SIGM_DATA_MASK    0x7FU\r\n#define DSP_SIGSEL_TEMP_MASK  0x01U\r\n#define DSP_SIGSEL_FIELD_MASK 0x04U\r\n\r\n/* Burst sizes */\r\n#define DF_BW_1          0x0U << 1\r\n#define DF_BW_2          0x1U << 1\r\n#define DF_BW_4          0x2U << 1\r\n#define DF_BW_8          0x3U << 1\r\n#define DF_BW_16         0x4U << 1\r\n#define DF_BW_32         0x5U << 1\r\n#define DF_BW_64         0x6U << 1\r\n#define DF_BW_128        0x7U << 1\r\n#define DF_BW_256        0x8U << 1\r\n#define DF_BW_512        0x9U << 1\r\n#define DF_BW_1024       0xAU << 1\r\n#define DF_BW_2048       0xBU << 1\r\n#define DF_BW_4096       0xCU << 1\r\n#define DF_BURSTSIZE_1   0x0U << 5\r\n#define DF_BURSTSIZE_2   0x1U << 5\r\n#define DF_BURSTSIZE_4   0x2U << 5\r\n#define DF_BURSTSIZE_8   0x3U << 5\r\n#define DF_BURSTSIZE_16  0x4U << 5\r\n#define DF_BURSTSIZE_32  0x5U << 5\r\n#define DF_BURSTSIZE_64  0x6U << 5\r\n#define DF_BURSTSIZE_128 0x7U << 5\r\n\r\n#endif /* CORE_DRIVERS_SI7210_DEFINES_H_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/TipThermoModel.cpp",
    "content": "/*\n * TipThermoModel.cpp\n *\n *  Created on: 7 Oct 2019\n *      Author: ralim\n */\n\n#include \"TipThermoModel.h\"\n#include \"BSP.h\"\n#include \"Settings.h\"\n#include \"Types.h\"\n#include \"Utils.hpp\"\n#include \"configuration.h\"\n#include \"main.hpp\"\n#include \"power.hpp\"\n/*\n * The hardware is laid out  as a non-inverting op-amp\n * There is a pullup of 39k(TS100) from the +ve input to 3.9V (1M pulup on TS100)\n *\n * The simplest case to model this, is to ignore the pullup resistors influence, and assume that its influence is mostly constant\n * -> Tip resistance *does* change with temp, but this should be much less than the rest of the system.\n *\n * When a thermocouple is equal temperature at both sides (hot and cold junction), then the output should be 0uV\n * Therefore, by measuring the uV when both are equal, the measured reading is the offset value.\n * This is a mix of the pull-up resistor, combined with tip manufacturing differences.\n *\n * All of the thermocouple readings are based on this expired patent\n * - > https://patents.google.com/patent/US6087631A/en\n *\n * This was bought to my attention by <Kuba Sztandera>\n */\nvolatile uint32_t lastuv = 0;\nuint32_t          TipThermoModel::convertTipRawADCTouV(uint16_t rawADC, bool skipCalOffset) {\n  // This takes the raw ADC samples, converts these to uV\n  // Then divides this down by the gain to convert to the uV on the input to the op-amp (A+B terminals)\n  // Then remove the calibration value that is stored as a tip offset\n  uint32_t vddRailmVX10 = ADC_VDD_MV * 10; // The vreg is +-2%, but we have no higher accuracy available\n  // 4096 * 8 readings for full scale\n  // Convert the input ADC reading back into mV times 10 format.\n  uint32_t rawInputmVX10 = (rawADC * vddRailmVX10) / (ADC_MAX_READING);\n\n  uint32_t valueuV = rawInputmVX10 * 100; // shift into uV\n  // Now to divide this down by the gain\n  valueuV /= OP_AMP_GAIN_STAGE;\n\n  if (getSettingValue(SettingsOptions::CalibrationOffset) && skipCalOffset == false) {\n    // Remove uV tipOffset\n    if (valueuV > getSettingValue(SettingsOptions::CalibrationOffset)) {\n      valueuV -= getSettingValue(SettingsOptions::CalibrationOffset);\n    } else {\n      valueuV = 0;\n    }\n  }\n  lastuv = valueuV;\n  return valueuV;\n}\n\nTemperatureType_t TipThermoModel::convertTipRawADCToDegC(uint16_t rawADC) { return convertuVToDegC(convertTipRawADCTouV(rawADC)); }\nTemperatureType_t TipThermoModel::convertTipRawADCToDegF(uint16_t rawADC) { return convertuVToDegF(convertTipRawADCTouV(rawADC)); }\n\nTemperatureType_t TipThermoModel::convertuVToDegF(uint32_t tipuVDelta) { return convertCtoF(convertuVToDegC(tipuVDelta)); }\n\nTemperatureType_t TipThermoModel::convertCtoF(TemperatureType_t degC) {\n  //(Y °C × 9/5) + 32 =Y°F\n  return (32 + ((degC * 9) / 5));\n}\n\nTemperatureType_t TipThermoModel::convertFtoC(TemperatureType_t degF) {\n  //(Y°F − 32) × 5/9 = Y°C\n  if (degF < 32) {\n    return 0;\n  }\n  return ((degF - 32) * 5) / 9;\n}\nTemperatureType_t TipThermoModel::getTipInC(bool sampleNow) {\n  TemperatureType_t currentTipTempInC = TipThermoModel::convertTipRawADCToDegC(getTipRawTemp(sampleNow));\n  currentTipTempInC += getHandleTemperature(sampleNow) / 10; // Add handle offset\n\n  if (currentTipTempInC < 0) {\n    return 0;\n  }\n  return currentTipTempInC;\n}\n\nTemperatureType_t TipThermoModel::getTipInF(bool sampleNow) {\n  TemperatureType_t currentTipTempInF = getTipInC(sampleNow);\n  currentTipTempInF                   = convertCtoF(currentTipTempInF);\n  return currentTipTempInF;\n}\n\nTemperatureType_t TipThermoModel::getTipMaxInC() {\n#ifdef CUSTOM_MAX_TEMP_C\n  return getCustomTipMaxInC();\n#else\n  TemperatureType_t maximumTipTemp = TipThermoModel::convertTipRawADCToDegC(ADC_MAX_READING - 1);\n  maximumTipTemp += getHandleTemperature(0) / 10; // Add handle offset\n  return maximumTipTemp - 1;\n#endif\n}\n"
  },
  {
    "path": "source/Core/Drivers/TipThermoModel.h",
    "content": "/*\n * TipThermoModel.h\n *\n *  Created on: 7 Oct 2019\n *      Author: ralim\n */\n\n#include \"BSP.h\"\n#include \"Types.h\"\n#include \"stdint.h\"\n#ifndef SRC_TIPTHERMOMODEL_H_\n#define SRC_TIPTHERMOMODEL_H_\nclass TipThermoModel {\npublic:\n  // These are the main two functions\n  static TemperatureType_t getTipInC(bool sampleNow = false);\n  static TemperatureType_t getTipInF(bool sampleNow = false);\n\n  // Calculates the maximum temperature can can be read by the ADC range\n  static TemperatureType_t getTipMaxInC();\n\n  static TemperatureType_t convertTipRawADCToDegC(uint16_t rawADC);\n  static TemperatureType_t convertTipRawADCToDegF(uint16_t rawADC);\n  // Returns the uV of the tip reading before the op-amp compensating for pullups\n  static uint32_t          convertTipRawADCTouV(uint16_t rawADC, bool skipCalOffset = false);\n  static TemperatureType_t convertCtoF(TemperatureType_t degC);\n  static TemperatureType_t convertFtoC(TemperatureType_t degF);\n\nprivate:\n  static TemperatureType_t convertuVToDegC(uint32_t tipuVDelta);\n  static TemperatureType_t convertuVToDegF(uint32_t tipuVDelta);\n};\n\n#endif /* SRC_TIPTHERMOMODEL_H_ */\n"
  },
  {
    "path": "source/Core/Drivers/USBPD.cpp",
    "content": "#include \"USBPD.h\"\n#include \"configuration.h\"\n#ifdef POW_PD\n#include \"BSP_PD.h\"\n#include \"FreeRTOS.h\"\n#include \"Settings.h\"\n#include \"fusb302b.h\"\n#include \"main.hpp\"\n#include \"pd.h\"\n#include \"policy_engine.h\"\n\n#ifndef USB_PD_VMAX\n#error Max PD Voltage must be defined\n#endif\n\nvoid ms_delay(uint32_t delayms) {\n  // Convert ms -> ticks\n  TickType_t ticks = delayms / portTICK_PERIOD_MS;\n\n  vTaskDelay(ticks ? ticks : 1); /* Minimum delay = 1 tick */\n}\nuint32_t get_ms_timestamp() {\n  // Convert ticks -> ms\n  return xTaskGetTickCount() * portTICK_PERIOD_MS;\n}\nbool         pdbs_dpm_evaluate_capability(const pd_msg *capabilities, pd_msg *request);\nvoid         pdbs_dpm_get_sink_capability(pd_msg *cap, const bool isPD3);\nbool         EPREvaluateCapabilityFunc(const epr_pd_msg *capabilities, pd_msg *request);\nFUSB302      fusb((0x22 << 1), fusb_read_buf, fusb_write_buf, ms_delay); // Create FUSB driver\nPolicyEngine pe(fusb, get_ms_timestamp, ms_delay, pdbs_dpm_get_sink_capability, pdbs_dpm_evaluate_capability, EPREvaluateCapabilityFunc, USB_PD_EPR_WATTAGE);\nint          USBPowerDelivery::detectionState = 0;\nbool         haveSeenCapabilityOffer          = false;\nuint16_t     requested_voltage_mv             = 0;\n\n/* The current draw when the output is disabled */\n#define DPM_MIN_CURRENT PD_MA2PDI(100)\n\n// Start processing\nbool USBPowerDelivery::start() {\n  if (fusbPresent() && fusb.fusb_setup()) {\n    setupFUSBIRQ();\n    return true;\n  }\n  return false;\n}\nvoid    USBPowerDelivery::IRQOccured() { pe.IRQOccured(); }\nbool    USBPowerDelivery::negotiationHasWorked() { return pe.pdHasNegotiated(); }\nuint8_t USBPowerDelivery::getStateNumber() { return pe.currentStateCode(true); }\nvoid    USBPowerDelivery::step() {\n  while (pe.thread()) {\n  }\n}\n\nvoid USBPowerDelivery::PPSTimerCallback() { pe.TimersCallback(); }\nbool USBPowerDelivery::negotiationInProgress() {\n  if (USBPowerDelivery::negotiationComplete()) {\n    return false;\n  }\n  if (haveSeenCapabilityOffer) {\n    return false;\n  }\n  return true;\n}\nbool USBPowerDelivery::negotiationComplete() {\n  if (!fusbPresent()) {\n    return true;\n  }\n  return pe.setupCompleteOrTimedOut(getSettingValue(SettingsOptions::PDNegTimeout));\n}\nbool USBPowerDelivery::fusbPresent() {\n  if (detectionState == 0) {\n    if (fusb.fusb_read_id()) {\n      detectionState = 1;\n    }\n  }\n  return detectionState == 1;\n}\n\nbool USBPowerDelivery::isVBUSConnected() {\n#if NEEDS_VBUS_PROBE == 1\n  static uint8_t state = 0;\n  if (state) {\n    return state == 1;\n  }\n  // Dont run if we havent negotiated\n  if (!negotiationComplete()) {\n    return true;\n  }\n  if (fusb.isVBUSConnected()) {\n    state = 1;\n    return true;\n  } else {\n    state = 2;\n    return false;\n  }\n#else\n  return false;\n#endif\n}\nuint32_t  lastCapabilities[11];\nuint32_t *USBPowerDelivery::getLastSeenCapabilities() { return lastCapabilities; }\n\n#ifdef POW_EPR\nstatic unsigned int sqrtI(unsigned long sqrtArg) {\n  unsigned int  answer, x;\n  unsigned long temp;\n  if (sqrtArg == 0) {\n    return 0; // undefined result\n  }\n  if (sqrtArg == 1) {\n    return 1; // identity\n  }\n  answer = 0;                           // integer square root\n  for (x = 0x8000; x > 0; x = x >> 1) { // 16 bit shift\n    answer |= x;                        // possible bit in root\n    temp = answer * answer;             //\n    if (temp == sqrtArg) {\n      break; // exact, found it\n    }\n    if (temp > sqrtArg) {\n      answer ^= x; // too large, reverse bit\n    }\n  }\n  return answer; // approximate root\n}\n#endif\n\n// parseCapabilitiesArray returns true if a valid capability was found\n// caps is the array of capabilities objects\n// best* are output references\nbool parseCapabilitiesArray(const uint8_t numCaps, uint8_t *bestIndex, uint16_t *bestVoltage, uint16_t *bestCurrent, bool *bestIsPPS, bool *bestIsAVS) {\n  // Walk the given capabilities array; and select the best option\n  // Given assumption of fixed tip resistance; this can be simplified to highest voltage selection\n  *bestIndex   = 0xFF; // Mark unselected\n  *bestVoltage = 5000; // Default 5V\n\n  // Fudge of 0.5 ohms to round up a little to account for us always having off periods in PWM\n  uint8_t     tipResistance = getTipResistanceX10();\n  usbpdMode_t pd_mode       = (usbpdMode_t)getSettingValue(SettingsOptions::USBPDMode);\n  if (pd_mode == usbpdMode_t::DEFAULT) {\n    tipResistance += 5;\n  }\n#ifdef MODEL_HAS_DCDC\n  // If this device has step down DC/DC inductor to smooth out current spikes\n  // We can instead ignore resistance and go for max voltage we can accept; and rely on the DC/DC regulation to keep under current limit\n  tipResistance = 255; // (Push to 25.5 ohms to effectively disable this check)\n#endif\n\n  for (uint8_t i = 0; i < numCaps; i++) {\n    if ((lastCapabilities[i] & PD_PDO_TYPE) == PD_PDO_TYPE_FIXED) {\n      // This is a fixed PDO entry\n      // Evaluate if it can produve sufficient current based on the TIP_RESISTANCE (ohms*10)\n      // V=I*R -> V/I => minimum resistance, if our tip resistance is >= this then we can use this supply\n\n      int voltage_mv             = PD_PDV2MV(PD_PDO_SRC_FIXED_VOLTAGE_GET(lastCapabilities[i])); // voltage in mV units\n      int current_a_x100         = PD_PDO_SRC_FIXED_CURRENT_GET(lastCapabilities[i]);            // current in 10mA units\n      int min_resistance_ohmsx10 = voltage_mv / current_a_x100;\n      if (voltage_mv > 0) {\n        if (voltage_mv <= (USB_PD_VMAX * 1000)) {\n          if (voltage_mv <= 20000 || (pd_mode != usbpdMode_t::NO_DYNAMIC)) {\n            if (min_resistance_ohmsx10 <= tipResistance) {\n              // This is a valid power source we can select as\n              if (voltage_mv > *bestVoltage) {\n\n                // Higher voltage and valid, select this instead\n                *bestIndex   = i;\n                *bestVoltage = voltage_mv;\n                *bestCurrent = current_a_x100;\n                *bestIsPPS   = false;\n                *bestIsAVS   = false;\n              }\n            }\n          }\n        }\n      }\n    } else if (((lastCapabilities[i] & PD_PDO_TYPE) == PD_PDO_TYPE_AUGMENTED) && (pd_mode != usbpdMode_t::NO_DYNAMIC)) {\n      bool sourceIsEPRCapable = lastCapabilities[0] & PD_PDO_SRC_FIXED_EPR_CAPABLE;\n      bool isPPS              = false;\n      bool isAVS              = false;\n      if (sourceIsEPRCapable) {\n        isPPS = (lastCapabilities[i] & PD_APDO_TYPE) == PD_APDO_TYPE_PPS;\n        isAVS = (lastCapabilities[i] & PD_APDO_TYPE) == PD_APDO_TYPE_AVS;\n      } else {\n        isPPS = true; // Assume PPS if no EPR support\n      }\n      if (isPPS) {\n        // If this is a PPS slot, calculate the max voltage in the PPS range that can we be used and maintain\n        uint16_t max_voltage = PD_PAV2MV(PD_APDO_PPS_MAX_VOLTAGE_GET(lastCapabilities[i]));\n        // uint16_t min_voltage = PD_PAV2MV(PD_APDO_PPS_MIN_VOLTAGE_GET(lastCapabilities[i]));\n        uint16_t max_current = PD_PAI2CA(PD_APDO_PPS_CURRENT_GET(lastCapabilities[i])); // max current in 10mA units\n        // Using the current and tip resistance, calculate the ideal max voltage\n        // if this is range, then we will work with this voltage\n        // if this is not in range; then max_voltage can be safely selected\n        int ideal_voltage_mv = (tipResistance * max_current);\n        if (ideal_voltage_mv > max_voltage) {\n          ideal_voltage_mv = max_voltage; // constrain to what this PDO offers\n        }\n        if (ideal_voltage_mv > 20000) {\n          ideal_voltage_mv = 20000; // Limit to 20V as some advertise 21 but are not stable at 21\n        }\n        if (ideal_voltage_mv > (USB_PD_VMAX * 1000)) {\n          ideal_voltage_mv = (USB_PD_VMAX * 1000); // constrain to model max voltage safe to select\n        }\n        if (ideal_voltage_mv > *bestVoltage) {\n          *bestIndex   = i;\n          *bestVoltage = ideal_voltage_mv;\n          *bestCurrent = max_current;\n          *bestIsPPS   = true;\n          *bestIsAVS   = false;\n        }\n      }\n#ifdef POW_EPR\n      else if (isAVS) {\n        uint16_t max_voltage = PD_PAV2MV(PD_APDO_AVS_MAX_VOLTAGE_GET(lastCapabilities[i]));\n        uint8_t  max_wattage = PD_APDO_AVS_MAX_POWER_GET(lastCapabilities[i]);\n        tipResistance        = getTipResistanceX10(); // Dont use fudge factor for EPR\n\n        // W = v^2/tip_resistance => Wattage*tip_resistance == Max_voltage^2\n        auto ideal_max_voltage = sqrtI((max_wattage * tipResistance) / 10) * 1000;\n        if (ideal_max_voltage > (USB_PD_VMAX * 1000)) {\n          ideal_max_voltage = (USB_PD_VMAX * 1000); // constrain to model max voltage safe to select\n        }\n        if (ideal_max_voltage > (max_voltage)) {\n          ideal_max_voltage = (max_voltage); // constrain to model max voltage safe to select\n        }\n        auto operating_current = (ideal_max_voltage / tipResistance); // Current in centiamps\n\n        if (ideal_max_voltage > *bestVoltage) {\n          *bestIndex   = i;\n          *bestVoltage = ideal_max_voltage;\n          *bestCurrent = operating_current;\n          *bestIsAVS   = true;\n          *bestIsPPS   = false;\n        }\n      }\n#endif\n    }\n  }\n  // Now that the best index is known, set the current values\n  return *bestIndex != 0xFF; // have we selected one\n}\n\nbool EPREvaluateCapabilityFunc(const epr_pd_msg *capabilities, pd_msg *request) {\n#ifdef POW_EPR\n  // Select any EPR slots up to USB_PD_VMAX\n  memset(lastCapabilities, 0, sizeof(lastCapabilities));\n  memcpy(lastCapabilities, capabilities->obj, sizeof(lastCapabilities));\n  // PDO slots 1-7 shall be the standard PDO's\n  // PDO slots 8-11 shall be the >20V slots\n  uint8_t  numobj           = 11;\n  uint8_t  bestIndex        = 0xFF;\n  uint16_t bestIndexVoltage = 0;\n  uint16_t bestIndexCurrent = 0;\n  bool     bestIsPPS        = false;\n  bool     bestIsAVS        = false;\n\n  if (parseCapabilitiesArray(numobj, &bestIndex, &bestIndexVoltage, &bestIndexCurrent, &bestIsPPS, &bestIsAVS)) {\n    /* We got what we wanted, so build a request for that */\n    request->hdr    = PD_MSGTYPE_EPR_REQUEST | PD_NUMOBJ(2);\n    request->obj[1] = lastCapabilities[bestIndex]; // Copy PDO into slot 2\n\n    if (bestIsAVS) {\n      request->obj[0] = PD_RDO_PROG_CURRENT_SET(PD_CA2PAI(bestIndexCurrent)) | PD_RDO_PROG_VOLTAGE_SET(PD_MV2APS(bestIndexVoltage));\n    } else if (bestIsPPS) {\n      request->obj[0] = PD_RDO_PROG_CURRENT_SET(PD_CA2PAI(bestIndexCurrent)) | PD_RDO_PROG_VOLTAGE_SET(PD_MV2PRV(bestIndexVoltage));\n    } else {\n      request->obj[0] = PD_RDO_FV_MAX_CURRENT_SET(bestIndexCurrent) | PD_RDO_FV_CURRENT_SET(bestIndexCurrent);\n    }\n    request->obj[0] |= PD_RDO_EPR_CAPABLE;\n    request->obj[0] |= PD_RDO_NO_USB_SUSPEND;\n    request->obj[0] |= PD_RDO_OBJPOS_SET(bestIndex + 1);\n\n    // We dont do usb\n    // request->obj[0] |= PD_RDO_USB_COMMS;\n\n    /* Update requested voltage */\n    requested_voltage_mv    = bestIndexVoltage;\n    powerSupplyWattageLimit = bestIndexVoltage * bestIndexCurrent / 100 / 1000; // Set watts for limit from PSU limit\n\n  } else {\n    /* Nothing matched (or no configuration), so get 5 V at low current */\n    request->hdr    = PD_MSGTYPE_EPR_REQUEST | PD_NUMOBJ(2);\n    request->obj[1] = lastCapabilities[0];\n    request->obj[0] = PD_RDO_FV_MAX_CURRENT_SET(100) | PD_RDO_FV_CURRENT_SET(100) | PD_RDO_NO_USB_SUSPEND | PD_RDO_OBJPOS_SET(1);\n    // We dont do usb\n    // request->obj[0] |= PD_RDO_USB_COMMS;\n\n    /* Update requested voltage */\n    requested_voltage_mv = 5000;\n  }\n  return true;\n#endif\n  return false;\n}\n\nbool pdbs_dpm_evaluate_capability(const pd_msg *capabilities, pd_msg *request) {\n  memset(lastCapabilities, 0, sizeof(lastCapabilities));\n  memcpy(lastCapabilities, capabilities->obj, sizeof(uint32_t) * 7);\n  haveSeenCapabilityOffer = true;\n  /* Get the number of PDOs */\n  uint8_t numobj = PD_NUMOBJ_GET(capabilities);\n\n  /* Make sure we have configuration */\n  /* Look at the PDOs to see if one matches our desires */\n  // Look against USB_PD_Desired_Levels to select in order of preference\n  uint8_t  bestIndex        = 0xFF;\n  uint16_t bestIndexVoltage = 0;\n  uint16_t bestIndexCurrent = 0;\n  bool     bestIsPPS        = false;\n  bool     bestIsAVS        = false;\n\n  if (parseCapabilitiesArray(numobj, &bestIndex, &bestIndexVoltage, &bestIndexCurrent, &bestIsPPS, &bestIsAVS)) {\n    /* We got what we wanted, so build a request for that */\n    request->hdr = PD_MSGTYPE_REQUEST | PD_NUMOBJ(1);\n    if (bestIsPPS) {\n      request->obj[0] = PD_RDO_PROG_CURRENT_SET(PD_CA2PAI(bestIndexCurrent)) | PD_RDO_PROG_VOLTAGE_SET(PD_MV2PRV(bestIndexVoltage)) | PD_RDO_NO_USB_SUSPEND | PD_RDO_OBJPOS_SET(bestIndex + 1);\n    } else {\n      request->obj[0] = PD_RDO_FV_MAX_CURRENT_SET(bestIndexCurrent) | PD_RDO_FV_CURRENT_SET(bestIndexCurrent) | PD_RDO_NO_USB_SUSPEND | PD_RDO_OBJPOS_SET(bestIndex + 1);\n    }\n    // We dont do usb\n    // request->obj[0] |= PD_RDO_USB_COMMS;\n#ifdef POW_EPR\n    request->obj[0] |= PD_RDO_EPR_CAPABLE;\n#endif\n\n    /* Update requested voltage */\n    requested_voltage_mv    = bestIndexVoltage;\n    powerSupplyWattageLimit = bestIndexVoltage * bestIndexCurrent / 100 / 1000; // Set watts for limit from PSU limit\n\n  } else {\n    /* Nothing matched (or no configuration), so get 5 V at low current */\n    request->hdr    = PD_MSGTYPE_REQUEST | PD_NUMOBJ(1);\n    request->obj[0] = PD_RDO_FV_MAX_CURRENT_SET(100) | PD_RDO_FV_CURRENT_SET(100) | PD_RDO_NO_USB_SUSPEND | PD_RDO_OBJPOS_SET(1);\n    // We dont do usb\n    // request->obj[0] |= PD_RDO_USB_COMMS;\n\n    /* Update requested voltage */\n    requested_voltage_mv = 5000;\n  }\n  // Even if we didnt match, we return true as we would still like to handshake on 5V at the minimum\n  return true;\n}\n\nvoid add_v_record(pd_msg *cap, uint16_t voltage_mv, int numobj) {\n\n  uint16_t current = (voltage_mv) / getTipResistanceX10(); // In centi-amps\n\n  /* Add a PDO for the desired power. */\n  cap->obj[numobj] = PD_PDO_TYPE_FIXED | PD_PDO_SNK_FIXED_VOLTAGE_SET(PD_MV2PDV(voltage_mv)) | PD_PDO_SNK_FIXED_CURRENT_SET(current);\n}\nvoid pdbs_dpm_get_sink_capability(pd_msg *cap, const bool isPD3) {\n  /* Keep track of how many PDOs we've added */\n  int numobj = 0;\n\n  /* If we have no configuration or want something other than 5 V, add a PDO\n   * for vSafe5V */\n  /* Minimum current, 5 V, and higher capability. */\n  cap->obj[numobj++] = PD_PDO_TYPE_FIXED | PD_PDO_SNK_FIXED_VOLTAGE_SET(PD_MV2PDV(5000)) | PD_PDO_SNK_FIXED_CURRENT_SET(DPM_MIN_CURRENT);\n  // Voltages must be in order of lowest -> highest\n#if USB_PD_VMAX >= 20\n  add_v_record(cap, 9000, numobj);\n  numobj++;\n  add_v_record(cap, 15000, numobj);\n  numobj++;\n  add_v_record(cap, 20000, numobj);\n  numobj++;\n#elif USB_PD_VMAX >= 15\n  add_v_record(cap, 9000, numobj);\n  numobj++;\n  add_v_record(cap, 12000, numobj);\n  numobj++;\n  add_v_record(cap, 15000, numobj);\n  numobj++;\n#elif USB_PD_VMAX >= 12\n  add_v_record(cap, 9000, numobj);\n  numobj++;\n  add_v_record(cap, 12000, numobj);\n  numobj++;\n#elif USB_PD_VMAX >= 9\n  add_v_record(cap, 9000, numobj);\n  numobj++;\n#endif\n\n  /* Set the USB communications capable flag. */\n  cap->obj[0] |= PD_PDO_SNK_FIXED_USB_COMMS;\n\n  /* Set the Sink_Capabilities message header */\n  cap->hdr = PD_DATAROLE_UFP | PD_SPECREV_3_0 | PD_POWERROLE_SINK | PD_MSGTYPE_SINK_CAPABILITIES | PD_NUMOBJ(numobj);\n}\n\n#endif\n"
  },
  {
    "path": "source/Core/Drivers/USBPD.h",
    "content": "\n#ifndef DRIVERS_USBPD_H_\n#define DRIVERS_USBPD_H_\n#include \"configuration.h\"\n#include <stdbool.h>\n#include <stdint.h>\n\n#ifdef __cplusplus\n#ifdef POW_PD\nclass USBPowerDelivery {\npublic:\n  static bool      start();                   // Start the PD stack\n  static bool      negotiationComplete();     // Has negotiation completed to a voltage > 5v\n  static bool      negotiationInProgress();   // Is negotiation ongoing\n  static bool      fusbPresent();             // Is the FUSB302 present on the bus\n  static void      PPSTimerCallback();        // PPS Timer\n  static void      IRQOccured();              // Thread callback that an irq occured\n  static void      step();                    // Iterate the step machine\n  static bool      negotiationHasWorked();    // Has PD negotiation worked (are we in a PD contract)\n  static uint8_t   getStateNumber();          // Debugging - Get the internal state number\n  static bool      isVBUSConnected();         // Is the VBus pin connected on the FUSB302\n  static uint32_t *getLastSeenCapabilities(); // returns pointer to the last seen capabilities from the powersource\nprivate:\n  //\n  static int detectionState;\n};\n#endif\n\n#endif\n#endif"
  },
  {
    "path": "source/Core/Drivers/Utils.cpp",
    "content": "/*\r\n * Utils.cpp\r\n *\r\n *  Created on: 28 Apr 2021\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"BSP_Power.h\"\r\n#include \"Settings.h\"\r\n#include \"configuration.h\"\r\n#include <Utils.hpp>\r\n\r\nint32_t Utils::InterpolateLookupTable(const int32_t *lookupTable, const int noItems, const int32_t value) {\r\n  for (int i = 1; i < (noItems - 1); i++) {\r\n    // If current tip temp is less than current lookup, then this current lookup is the higher point to interpolate\r\n    if (value < lookupTable[i * 2]) {\r\n      return LinearInterpolate(lookupTable[(i - 1) * 2], lookupTable[((i - 1) * 2) + 1], lookupTable[i * 2], lookupTable[(i * 2) + 1], value);\r\n    }\r\n  }\r\n  return LinearInterpolate(lookupTable[(noItems - 2) * 2], lookupTable[((noItems - 2) * 2) + 1], lookupTable[(noItems - 1) * 2], lookupTable[((noItems - 1) * 2) + 1], value);\r\n}\r\n\r\nint32_t Utils::LinearInterpolate(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t x) { return y1 + (((((x - x1) * 1000) / (x2 - x1)) * (y2 - y1))) / 1000; }\r\n\r\nuint16_t Utils::RequiredCurrentForTipAtVoltage(uint16_t voltageX10) {\r\n  uint8_t tipResistancex10 = getTipResistanceX10();\r\n  if (getSettingValue(SettingsOptions::USBPDMode) == usbpdMode_t::DEFAULT) {\r\n    tipResistancex10 += 5;\r\n  }\r\n#ifdef MODEL_HAS_DCDC\r\n  // If this device has step down DC/DC inductor to smooth out current spikes\r\n  // We can instead ignore resistance and go for max voltage we can accept; and rely on the DC/DC regulation to keep under current limit\r\n  tipResistancex10 = 255; // (Push to 25.5 ohms to effectively disable this check)\r\n#endif\r\n  // V/R = I\r\n  uint16_t currentX10 = (voltageX10 * 10) / tipResistancex10;\r\n  return currentX10;\r\n}\r\n"
  },
  {
    "path": "source/Core/Drivers/Utils.hpp",
    "content": "/*\r\n * Utils.hpp\r\n *\r\n *  Created on: 28 Apr 2021\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef CORE_DRIVERS_UTILS_HPP_\r\n#define CORE_DRIVERS_UTILS_HPP_\r\n#include <stdint.h>\r\nclass Utils {\r\npublic:\r\n  static int32_t InterpolateLookupTable(const int32_t *lookupTable, const int noItems, const int32_t value);\r\n  static int32_t LinearInterpolate(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t x);\r\n\r\n  // Return the required current in X10 for the specified voltage\r\n  static uint16_t RequiredCurrentForTipAtVoltage(uint16_t voltageX10);\r\n\r\n};\r\n\r\n#endif /* CORE_DRIVERS_UTILS_HPP_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/WS2812.h",
    "content": "/*\r\n * WS2812.h\r\n *\r\n *  Created on: 2 May 2021\r\n *      Author: Ralim\r\n */\r\n#include \"Pins.h\"\r\n#include \"Setup.h\"\r\n#include <stddef.h>\r\n#include <stdint.h>\r\n#include <string.h>\r\n\r\n#ifndef CORE_DRIVERS_WS2812_H_\r\n#define CORE_DRIVERS_WS2812_H_\r\n\r\n#ifndef WS2812_LED_CHANNEL_COUNT\r\n#define WS2812_LED_CHANNEL_COUNT 3\r\n#endif\r\n\r\n#define WS2812_RAW_BYTES_PER_LED (WS2812_LED_CHANNEL_COUNT * 8)\r\n\r\ntemplate <uint32_t LED_GPIO, uint16_t LED_PIN, int LED_COUNT> class WS2812 {\r\nprivate:\r\n  uint8_t leds_colors[WS2812_LED_CHANNEL_COUNT * LED_COUNT];\r\n\r\npublic:\r\n  void led_update() {\r\n    __disable_irq();\r\n    // Bitbang it out as our cpu irq latency is too high\r\n    for (unsigned int i = 0; i < sizeof(leds_colors); i++) {\r\n      // Shove out MSB first\r\n      for (int x = 0; x < 8; x++) {\r\n        ((GPIO_TypeDef *)WS2812_GPIO_Port)->BSRR = WS2812_Pin;\r\n        if ((leds_colors[i] & (1 << (7 - x))) == (1 << (7 - x))) {\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n        } else {\r\n\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n          __asm__ __volatile__(\"nop\");\r\n        }\r\n        ((GPIO_TypeDef *)WS2812_GPIO_Port)->BSRR = (uint32_t)WS2812_Pin << 16u;\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n        __asm__ __volatile__(\"nop\");\r\n      }\r\n    }\r\n    __enable_irq();\r\n  }\r\n\r\n  void init(void) { memset(leds_colors, 0, sizeof(leds_colors)); }\r\n\r\n  void led_set_color(size_t index, uint8_t r, uint8_t g, uint8_t b) {\r\n    leds_colors[index * WS2812_LED_CHANNEL_COUNT + 0] = g;\r\n    leds_colors[index * WS2812_LED_CHANNEL_COUNT + 1] = r;\r\n    leds_colors[index * WS2812_LED_CHANNEL_COUNT + 2] = b;\r\n  }\r\n\r\n  void led_set_color_all(uint8_t r, uint8_t g, uint8_t b) {\r\n    for (int index = 0; index < LED_COUNT; index++) {\r\n      leds_colors[index * WS2812_LED_CHANNEL_COUNT + 0] = g;\r\n      leds_colors[index * WS2812_LED_CHANNEL_COUNT + 1] = r;\r\n      leds_colors[index * WS2812_LED_CHANNEL_COUNT + 2] = b;\r\n    }\r\n  }\r\n};\r\n\r\n#endif /* CORE_DRIVERS_WS2812_H_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/WS2812B.h",
    "content": "/*\r\n * WS2812B.h\r\n *\r\n *  Created on: 9 July 2023\r\n *      Author: Doegox\r\n *      Currently for RISC-V architecture only\r\n *      Based on WS2812.h by Ralim for STM32\r\n */\r\n#include \"Pins.h\"\r\n#include \"Setup.h\"\r\n#include <stddef.h>\r\n#include <stdint.h>\r\n#include <string.h>\r\n\r\n#ifndef CORE_DRIVERS_WS2812B_H_\r\n#define CORE_DRIVERS_WS2812B_H_\r\n\r\n#ifndef WS2812B_LED_CHANNEL_COUNT\r\n#define WS2812B_LED_CHANNEL_COUNT 3\r\n#endif\r\n\r\n#define WS2812B_RAW_BYTES_PER_LED (WS2812B_LED_CHANNEL_COUNT * 8)\r\n\r\ntemplate <uint16_t LED_PIN, int LED_COUNT> class WS2812B {\r\nprivate:\r\n  uint8_t leds_colors[WS2812B_LED_CHANNEL_COUNT * LED_COUNT];\r\n\r\npublic:\r\n  void led_update() {\r\n    __disable_irq();\r\n    // Bitbang it out as our cpu irq latency is too high\r\n    for (unsigned int i = 0; i < sizeof(leds_colors); i++) {\r\n      // Shove out MSB first\r\n      for (int x = 0; x < 8; x++) {\r\n        if ((leds_colors[i] & (1 << (7 - x))) == (1 << (7 - x))) {\r\n          gpio_write(LED_PIN, 1);\r\n          for (int k = 0; k < 27; k++) {\r\n            __ASM volatile(\"nop\");\r\n          }\r\n          gpio_write(LED_PIN, 0);\r\n          for (int k = 0; k < 10; k++) {\r\n            __ASM volatile(\"nop\");\r\n          }\r\n        } else {\r\n          gpio_write(LED_PIN, 1);\r\n          for (int k = 0; k < 10; k++) {\r\n            __ASM volatile(\"nop\");\r\n          }\r\n          gpio_write(LED_PIN, 0);\r\n          for (int k = 0; k < 27; k++) {\r\n            __ASM volatile(\"nop\");\r\n          }\r\n        }\r\n      }\r\n    }\r\n    __enable_irq();\r\n  }\r\n\r\n  void init(void) { memset(leds_colors, 0, sizeof(leds_colors));\r\n    gpio_set_mode(LED_PIN, GPIO_OUTPUT_MODE);\r\n    gpio_write(LED_PIN, 1);\r\n    led_set_color(0, 0, 0xFF, 0); // green\r\n    led_update();\r\n}\r\n\r\n  void led_set_color(size_t index, uint8_t r, uint8_t g, uint8_t b) {\r\n    leds_colors[index * WS2812B_LED_CHANNEL_COUNT + 0] = g;\r\n    leds_colors[index * WS2812B_LED_CHANNEL_COUNT + 1] = r;\r\n    leds_colors[index * WS2812B_LED_CHANNEL_COUNT + 2] = b;\r\n  }\r\n\r\n  void led_set_color_all(uint8_t r, uint8_t g, uint8_t b) {\r\n    for (int index = 0; index < LED_COUNT; index++) {\r\n      leds_colors[index * WS2812B_LED_CHANNEL_COUNT + 0] = g;\r\n      leds_colors[index * WS2812B_LED_CHANNEL_COUNT + 1] = r;\r\n      leds_colors[index * WS2812B_LED_CHANNEL_COUNT + 2] = b;\r\n    }\r\n  }\r\n};\r\n\r\n#endif /* CORE_DRIVERS_WS2812B_H_ */\r\n"
  },
  {
    "path": "source/Core/Drivers/accelerometers_common.h",
    "content": "#ifndef CORE_DRIVERS_ACCELEROMTERS_COMMON_H_\n#define CORE_DRIVERS_ACCELEROMTERS_COMMON_H_\n#include \"configuration.h\"\n#if defined(ACCEL_I2CBB2)\n#include \"I2CBB2.hpp\"\n#define ACCEL_I2C_CLASS I2CBB2\n#elif defined(ACCEL_I2CBB1)\n#include \"I2CBB1.hpp\"\n#define ACCEL_I2C_CLASS I2CBB1\n#else\n#include \"I2C_Wrapper.hpp\"\n#define ACCEL_I2C_CLASS FRToSI2C\n#endif\n\n#endif"
  },
  {
    "path": "source/Core/Inc/FreeRTOSHooks.h",
    "content": "/*\r\n * FreeRTOSHooks.h\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef INC_FREERTOSHOOKS_H_\r\n#define INC_FREERTOSHOOKS_H_\r\n\r\n#include \"FreeRTOS.h\"\r\n#include \"cmsis_os.h\"\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n// RToS\r\nvoid vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize);\r\nvoid vApplicationIdleHook(void);\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* INC_FREERTOSHOOKS_H_ */\r\n"
  },
  {
    "path": "source/Core/Inc/QC3.h",
    "content": "/*\r\n * QC3.h\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#ifndef INC_QC3_H_\r\n#define INC_QC3_H_\r\n#include \"stdint.h\"\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\nvoid seekQC(int16_t Vx10, uint16_t divisor);\r\nvoid startQC(uint16_t divisor); // Tries to negotiate QC for highest voltage, must be run after\r\nbool hasQCNegotiated();         // Returns true if a QC negotiation worked (we are using QC)\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* INC_QC3_H_ */\r\n"
  },
  {
    "path": "source/Core/Inc/ScrollMessage.hpp",
    "content": "#ifndef SCROLL_MESSAGE_HPP_\n#define SCROLL_MESSAGE_HPP_\n\n#include \"portmacro.h\"\n#include <stdint.h>\n/**\n * A helper for showing a full-screen scrolling message.\n */\n\n/**\n * Draw and update the scroll message if needed.\n *\n * This function does not call `OLED::refresh()`. If this function\n * returns `true`, the caller shall call `OLED::refresh()` to draw the\n * modified framebuffer to the OLED screen.\n *\n * @param message The null-terminated message string. This must be the\n * same string as the previous call, unless this `ScrollMessage` instance\n * is in its initial state or `reset()` has been called.\n * @param currentTick The current tick as returned by `xTaskGetTickCount()` offset to 0 at start of scrolling.\n */\nvoid drawScrollingText(const char *message, TickType_t currentTickOffset);\n\n#endif /* SCROLL_MESSAGE_HPP_ */\n"
  },
  {
    "path": "source/Core/Inc/Settings.h",
    "content": "/*\n * Settings.h\n *\n *  Created on: 29 Sep 2016\n *      Author: Ralim\n *\n *      Houses the system settings and allows saving / restoring from flash\n */\n\n#include \"configuration.h\"\n\n#ifndef CORE_SETTINGS_H_\n#define CORE_SETTINGS_H_\n#include <stdbool.h>\n#include <stdint.h>\n#ifdef MODEL_Pinecilv2\n// Required settings reset for PR #1916\n#define SETTINGSVERSION (0x55AB) // This number is frozen, do not edit\n#else\n#define SETTINGSVERSION (0x55AA) // This number is frozen, do not edit\n#endif\n\nenum SettingsOptions {\n  SolderingTemp                  = 0,  // current set point for the iron\n  SleepTemp                      = 1,  // temp to drop to in sleep\n  SleepTime                      = 2,  // minutes timeout to sleep\n  MinDCVoltageCells              = 3,  // The voltage we cut out at for under voltage when powered by DC jack\n  MinVoltageCells                = 4,  // Minimum allowed voltage per cell <3S - 3.0V (30)> <4S - 2.4V (24)> <...> (Minimum recommended 2.7V)\n  QCIdealVoltage                 = 5,  // Desired QC3.0 voltage (9,12,20V)\n  OrientationMode                = 6,  // Selects between Auto,Right and left handed layouts\n  Sensitivity                    = 7,  // Sensitivity of accelerometer (5 bits)\n  AnimationLoop                  = 8,  // Animation loop switch\n  AnimationSpeed                 = 9,  // Animation speed (in miliseconds)\n  AutoStartMode                  = 10, // Should the unit automatically jump straight into soldering mode when power is applied\n  ShutdownTime                   = 11, // Time until unit shuts down if left alone\n  CoolingTempBlink               = 12, // Should the temperature blink on the cool down screen until its <50C\n  DetailedIDLE                   = 13, // Detailed idle screen\n  DetailedSoldering              = 14, // Detailed soldering screens\n  TemperatureInF                 = 15, // Should the temp be in F or C (true is F)\n  DescriptionScrollSpeed         = 16, // Description scroll speed\n  LockingMode                    = 17, // Store the locking mode\n  KeepAwakePulse                 = 18, // Keep Awake pulse power in 0.1 watts (10 = 1Watt)\n  KeepAwakePulseWait             = 19, // Time between Keep Awake pulses in 2500 ms = 2.5 s increments\n  KeepAwakePulseDuration         = 20, // Duration of the Keep Awake pusle in 250 ms increments\n  VoltageDiv                     = 21, // Voltage divisor factor\n  BoostTemp                      = 22, // Boost mode set point for the iron\n  CalibrationOffset              = 23, // This stores the temperature offset for this tip in the iron.\n  PowerLimit                     = 24, // Maximum power iron allowed to output\n  ReverseButtonTempChangeEnabled = 25, // Change the plus and minus button assigment\n  TempChangeLongStep             = 26, // Temperature-change-increment on long button press\n  TempChangeShortStep            = 27, // Temperature-change-increment on short button press\n  HallEffectSensitivity          = 28, // Operating mode of the hall effect sensor\n  AccelMissingWarningCounter     = 29, // Counter of how many times we have warned we cannot detect the accelerometer\n  PDMissingWarningCounter        = 30, // Counter of how many times we have warned we cannot detect the pd interface\n  UILanguage                     = 31, // Selected UI Language code, null-terminated *only if* the length is less than 8 chars\n  PDNegTimeout                   = 32, // PD timeout in 100ms steps\n  OLEDInversion                  = 33, // Invert the colours on the display\n  OLEDBrightness                 = 34, // Brightness for the OLED display\n  LOGOTime                       = 35, // Duration the logo will be displayed for\n  CalibrateCJC                   = 36, // Toggle calibrate CJC at next boot\n  BluetoothLE                    = 37, // Toggle BLE if present\n  USBPDMode                      = 38, // Toggle PPS & EPR\n  ProfilePhases                  = 39, // Number of profile mode phases\n  ProfilePreheatTemp             = 40, // Temperature to preheat to before the first phase\n  ProfilePreheatSpeed            = 41, // Maximum allowed preheat speed in degrees per second\n  ProfilePhase1Temp              = 42, // Temperature to target for the end of phase 1\n  ProfilePhase1Duration          = 43, // Target duration for phase 1\n  ProfilePhase2Temp              = 44, // Temperature to target for the end of phase 2\n  ProfilePhase2Duration          = 45, // Target duration for phase 2\n  ProfilePhase3Temp              = 46, // Temperature to target for the end of phase 3\n  ProfilePhase3Duration          = 47, // Target duration for phase 3\n  ProfilePhase4Temp              = 48, // Temperature to target for the end of phase 4\n  ProfilePhase4Duration          = 49, // Target duration for phase 4\n  ProfilePhase5Temp              = 50, // Temperature to target for the end of phase 5\n  ProfilePhase5Duration          = 51, // Target duration for phase 5\n  ProfileCooldownSpeed           = 52, // Maximum allowed cooldown speed in degrees per second\n  HallEffectSleepTime            = 53, // Seconds (/5) timeout to sleep when hall effect over threshold\n  SolderingTipType               = 54, // Selecting the type of soldering tip fitted\n  ReverseButtonSettings          = 55, // Change the A and B button assigment in Settings menu\n  //\n  SettingsOptionsLength = 56, // End marker\n};\n\ntypedef enum {\n  OFF       = 0, // Off (disabled)\n  SLOW      = 1, //\n  MEDIUM    = 2, //\n  FAST      = 3, //\n  MAX_VALUE = 4  //\n} settingOffSpeed_t;\n\ntypedef enum {\n  NO     = 0, // Disabled\n  SOLDER = 1, // Gain default soldering temp (Soldering Mode)\n  SLEEP  = 2, // Gain default sleeping temp (Idle/Standby Mode)\n  ZERO   = 3, // Power on only (No heat Mode)\n} autoStartMode_t;\n\ntypedef enum {\n  RIGHT = 0, // Right-hand screen orientation\n  LEFT  = 1, // Left-hand screen orientation\n  AUTO  = 2, // Automatic screen orientation based on accel.data if presented\n} orientationMode_t;\n\ntypedef enum {\n  SKIP     = 0, // Skip boot logo\n  ONETIME  = 5, // Show boot logo once (if animated) and stall until a button toggled\n  INFINITY = 6, // Show boot logo on repeat (if animated) until a button toggled\n} logoMode_t;\n\ntypedef enum {\n  DEFAULT    = 1, // PPS + EPR + more power request through increasing resistance by 0.5 Ohm to compensate power loss over cable/PCB/etc.\n  SAFE       = 2, // PPS + EPR, without requesting more power\n  NO_DYNAMIC = 0, // PPS + EPR disabled, fixed PDO only\n} usbpdMode_t;\n\ntypedef enum {\n  DISABLED = 0, // Locking buttons is disabled\n  BOOST    = 1, // Locking buttons for Boost mode only\n  FULL     = 2, // Locking buttons for Boost mode AND for Soldering mode\n} lockingMode_t;\n\n/* Selection of the soldering tip\n * Some devices allow multiple types of tips to be fitted, this allows selecting them or overriding the logic\n * The first type will be the default (gets value of 0)\n */\n#ifdef TIP_TYPE_SUPPORT\ntypedef enum {\n#ifdef AUTO_TIP_SELECTION\n  TIP_TYPE_AUTO, // If the hardware supports automatic detection\n#endif\n\n#ifdef TIPTYPE_T12\n  T12_8_OHM,   // TS100 style tips or Hakko T12 tips with adaptors\n  T12_6_2_OHM, // Short Tips manufactured by Pine64\n  T12_4_OHM,   // Longer tip but low resistance for PTS200\n#endif\n  // #ifdef TIPTYPE_TS80\n  //   TS80_4_5_OHM, // TS80(P) default tips\n  // // We do not know of other tuning tips (?yet?)\n  // #endif\n  // #ifdef TIPTYPE_JBC\n  //   JBC_210_2_5_OHM, // Small JBC tips as used in the S60/S60P\n  // #endif\n  TIP_TYPE_MAX, // Max value marker\n} tipType_t;\n#else\ntypedef enum {\n  TIP_TYPE_AUTO = 0, // value for the default case\n  TIP_TYPE_MAX  = 0, // marker for settings when not supported\n} tipType_t;\n#endif /* TIP_TYPE_SUPPORT */\n\n// returns the resistance matching the selected tip type or 0 for auto and when not supported\nuint8_t getUserSelectedTipResistance();\n\n// Settings wide operations\nvoid saveSettings();\nbool loadSettings();\nvoid resetSettings();\n\n// Settings access\n\nuint16_t getSettingValue(const enum SettingsOptions option);\n// Returns true if setting is now on the last value (next iteration will wrap)\nvoid nextSettingValue(const enum SettingsOptions option);\nvoid prevSettingValue(const enum SettingsOptions option);\nbool isLastSettingValue(const enum SettingsOptions option);\n// For setting values to settings\nvoid setSettingValue(const enum SettingsOptions option, const uint16_t newValue);\n\n// Special access helpers, to reduce logic duplication\nuint8_t     lookupVoltageLevel();\nuint16_t    lookupHallEffectThreshold();\n#ifdef TIP_TYPE_SUPPORT\nconst char *lookupTipName(); // Get the name string for the current soldering tip\n#endif /* TIP_TYPE_SUPPORT */\n#endif                       /* SETTINGS_H_ */\n"
  },
  {
    "path": "source/Core/Inc/Translation.h",
    "content": "/*\r\n * Translation.h\r\n *\r\n *  Created on: 31Aug.,2017\r\n *      Author: Ben V. Brown\r\n */\r\n\r\n#ifndef TRANSLATION_H_\r\n#define TRANSLATION_H_\r\n\r\n#include <stdbool.h>\r\n#include <stdint.h>\r\n\r\nextern const bool HasFahrenheit;\r\n\r\nextern const char *SmallSymbolPlus;\r\nextern const char *LargeSymbolPlus;\r\nextern const char *SmallSymbolMinus;\r\nextern const char *LargeSymbolMinus;\r\nextern const char *SmallSymbolSpace;\r\nextern const char *LargeSymbolSpace;\r\nextern const char *SmallSymbolAmps;\r\nextern const char *LargeSymbolAmps;\r\nextern const char *SmallSymbolDot;\r\nextern const char *LargeSymbolDot;\r\nextern const char *SmallSymbolSlash;\r\nextern const char *SmallSymbolColon;\r\nextern const char *SmallSymbolDegC;\r\nextern const char *LargeSymbolDegC;\r\nextern const char *SmallSymbolDegF;\r\nextern const char *LargeSymbolDegF;\r\nextern const char *LargeSymbolMinutes;\r\nextern const char *SmallSymbolMinutes;\r\nextern const char *LargeSymbolSeconds;\r\nextern const char *SmallSymbolSeconds;\r\nextern const char *LargeSymbolWatts;\r\nextern const char *SmallSymbolWatts;\r\nextern const char *LargeSymbolVolts;\r\nextern const char *SmallSymbolVolts;\r\nextern const char *LargeSymbolDC;\r\nextern const char *SmallSymbolDC;\r\nextern const char *LargeSymbolCellCount;\r\nextern const char *SmallSymbolCellCount;\r\n//\r\nextern const char *SmallSymbolVersionNumber;\r\nextern const char *SmallSymbolPDDebug;\r\nextern const char *SmallSymbolState;\r\nextern const char *SmallSymbolNoVBus;\r\nextern const char *SmallSymbolVBus;\r\n\r\nextern const char *LargeSymbolSleep;\r\n\r\nextern const char *DebugMenu[];\r\nextern const char *AccelTypeNames[];\r\nextern const char *PowerSourceNames[];\r\n\r\nenum class SettingsItemIndex : uint8_t {\r\n  DCInCutoff,\r\n  MinVolCell,\r\n  QCMaxVoltage,\r\n  PDNegTimeout,\r\n  USBPDMode,\r\n  BoostTemperature,\r\n  AutoStart,\r\n  TempChangeShortStep,\r\n  TempChangeLongStep,\r\n  LockingMode,\r\n  ProfilePhases,\r\n  ProfilePreheatTemp,\r\n  ProfilePreheatSpeed,\r\n  ProfilePhase1Temp,\r\n  ProfilePhase1Duration,\r\n  ProfilePhase2Temp,\r\n  ProfilePhase2Duration,\r\n  ProfilePhase3Temp,\r\n  ProfilePhase3Duration,\r\n  ProfilePhase4Temp,\r\n  ProfilePhase4Duration,\r\n  ProfilePhase5Temp,\r\n  ProfilePhase5Duration,\r\n  ProfileCooldownSpeed,\r\n  MotionSensitivity,\r\n  SleepTemperature,\r\n  SleepTimeout,\r\n  ShutdownTimeout,\r\n  HallEffSensitivity,\r\n  HallEffSleepTimeout,\r\n  TemperatureUnit,\r\n  DisplayRotation,\r\n  CooldownBlink,\r\n  ScrollingSpeed,\r\n  ReverseButtonTempChange,\r\n  ReverseButtonSettings,\r\n  AnimSpeed,\r\n  AnimLoop,\r\n  Brightness,\r\n  ColourInversion,\r\n  LOGOTime,\r\n  AdvancedIdle,\r\n  AdvancedSoldering,\r\n  BluetoothLE,\r\n  PowerLimit,\r\n  CalibrateCJC,\r\n  VoltageCalibration,\r\n  PowerPulsePower,\r\n  PowerPulseWait,\r\n  PowerPulseDuration,\r\n  SettingsReset,\r\n  LanguageSwitch,\r\n  SolderingTipType,\r\n  NUM_ITEMS,\r\n};\r\n\r\nstruct TranslationIndexTable {\r\n  uint16_t CalibrationDone;\r\n  uint16_t ResetOKMessage;\r\n  uint16_t SettingsResetMessage;\r\n  uint16_t NoAccelerometerMessage;\r\n  uint16_t NoPowerDeliveryMessage;\r\n  uint16_t LockingKeysString;\r\n  uint16_t UnlockingKeysString;\r\n  uint16_t WarningKeysLockedString;\r\n  uint16_t WarningThermalRunaway;\r\n  uint16_t WarningTipShorted;\r\n\r\n  uint16_t SettingsCalibrationWarning;\r\n  uint16_t CJCCalibrating;\r\n  uint16_t SettingsResetWarning;\r\n  uint16_t UVLOWarningString;\r\n  uint16_t UndervoltageString;\r\n  uint16_t InputVoltageString;\r\n  uint16_t ProfilePreheatString;\r\n  uint16_t ProfileCooldownString;\r\n\r\n  uint16_t SleepingAdvancedString;\r\n  uint16_t SleepingTipAdvancedString;\r\n  uint16_t DeviceFailedValidationWarning;\r\n  uint16_t TooHotToStartProfileWarning;\r\n\r\n  uint16_t SettingRightChar;\r\n  uint16_t SettingLeftChar;\r\n  uint16_t SettingAutoChar;\r\n  uint16_t SettingSlowChar;\r\n  uint16_t SettingMediumChar;\r\n  uint16_t SettingFastChar;\r\n  uint16_t SettingStartSolderingChar;\r\n  uint16_t SettingStartSleepChar;\r\n  uint16_t SettingStartSleepOffChar;\r\n  uint16_t SettingLockBoostChar;\r\n  uint16_t SettingLockFullChar;\r\n  uint16_t USBPDModeDefault;\r\n  uint16_t USBPDModeNoDynamic;\r\n  uint16_t USBPDModeSafe;\r\n  uint16_t TipTypeAuto;\r\n  uint16_t TipTypeT12Long;\r\n  uint16_t TipTypeT12Short;\r\n  uint16_t TipTypeT12PTS;\r\n  uint16_t TipTypeTS80;\r\n  uint16_t TipTypeJBCC210;\r\n\r\n  uint16_t SettingsDescriptions[static_cast<uint32_t>(SettingsItemIndex::NUM_ITEMS)];\r\n  uint16_t SettingsShortNames[static_cast<uint32_t>(SettingsItemIndex::NUM_ITEMS)];\r\n  uint16_t SettingsMenuEntriesDescriptions[5]; // unused\r\n  uint16_t SettingsMenuEntries[5];\r\n};\r\n\r\nextern const TranslationIndexTable *Tr;\r\n\r\nextern const char *TranslationStrings;\r\n\r\nstruct TranslationData {\r\n  TranslationIndexTable indices;\r\n  // Translation strings follows the translation index table.\r\n  // C++ does not support flexible array member as in C, so we use a 1-element\r\n  // array as a placeholder.\r\n  char strings[1];\r\n};\r\n\r\nstruct FontSection {\r\n  const uint8_t *font12_start_ptr;\r\n  const uint8_t *font06_start_ptr;\r\n  uint16_t       font12_decompressed_size;\r\n  uint16_t       font06_decompressed_size;\r\n  const uint8_t *font12_compressed_source; // Pointer to compressed data or null\r\n  const uint8_t *font06_compressed_source; // Pointer to compressed data or null\r\n};\r\n\r\nextern const FontSection FontSectionInfo;\r\n\r\nconstexpr uint8_t settings_item_index(const SettingsItemIndex i) { return static_cast<uint8_t>(i); }\r\n// Use a constexpr function for type-checking.\r\n#define SETTINGS_DESC(i) (settings_item_index(i) + 1)\r\n\r\nconst char *translatedString(uint16_t index);\r\n\r\nvoid prepareTranslations();\r\nvoid settings_displayLanguageSwitch(void);\r\nbool settings_showLanguageSwitch(void);\r\nvoid settings_setLanguageSwitch(void);\r\nbool isLastLanguageOption(void);\r\n\r\n#endif /* TRANSLATION_H_ */\r\n"
  },
  {
    "path": "source/Core/Inc/Translation_multi.h",
    "content": "#ifndef TRANSLATION_MULTI_H_\n#define TRANSLATION_MULTI_H_\n\n#include \"Translation.h\"\n#include <stdbool.h>\n// The compressed translation data will be decompressed to this buffer. These\n// data may include:\n//  - TranslationData (translation index table and translation strings)\n//  - Font table(s)\n// The translation index table consists of uint16_t (half words) which has a\n// 2-byte alignment. Therefore, the declaration of this buffer must include\n// the alignment specifier `alignas(TranslationData)` to satisfy its alignment.\n// TranslationData must always be decompressed to the start of this buffer.\nextern uint8_t        translation_data_out_buffer[];\nextern const uint16_t translation_data_out_buffer_size;\n\nstruct LanguageMeta {\n  uint16_t       uniqueID;\n  const uint8_t *translation_data;\n  uint16_t       translation_size : 15;\n  bool           translation_is_compressed : 1;\n};\n\nextern const LanguageMeta LanguageMetas[];\nextern const uint8_t      LanguageCount;\n\n#endif /* TRANSLATION_MULTI_H_ */\n"
  },
  {
    "path": "source/Core/Inc/Types.h",
    "content": "#ifndef TYPES_H_\n#define TYPES_H_\n#include <stdint.h>\n\n// Used for temperature represented in C or x10C.\n//\n\ntypedef int32_t TemperatureType_t;\n\n#endif\n"
  },
  {
    "path": "source/Core/Inc/expMovingAverage.h",
    "content": "/*\n * expMovingAverage.h\n *\n *  Created on: 8 Oct 2019\n *      Author: ralim\n */\n\n#ifndef INC_EXPMOVINGAVERAGE_H_\n#define INC_EXPMOVINGAVERAGE_H_\n\ntemplate <class T, uint8_t weighting> struct expMovingAverage {\n  int32_t sum;\n  void    update(T const val) { sum = ((val * weighting) + (sum * (256 - weighting))) / 256; }\n\n  T average() const { return sum; }\n};\n\n#endif /* INC_EXPMOVINGAVERAGE_H_ */\n"
  },
  {
    "path": "source/Core/Inc/history.hpp",
    "content": "/*\n * history.hpp\n *\n *  Created on: 28 Oct, 2018\n *     Authors: Ben V. Brown, David Hilton\n */\n\n#ifndef HISTORY_HPP_\n#define HISTORY_HPP_\n\n#include <stdint.h>\n\n// max size = 127\ntemplate <class T, uint8_t SIZE> struct history {\n  static const uint8_t size = SIZE;\n  T                    buf[size];\n  uint32_t             sum;\n  uint8_t              loc;\n\n  void update(T const val) {\n    // step backwards so i+1 is the previous value.\n\n    sum -= buf[loc];\n    sum += val;\n    buf[loc] = val;\n    loc      = (loc + 1) % size;\n  }\n\n  T operator[](uint8_t i) const {\n    // 0 = newest, size-1 = oldest.\n    i = (i + loc) % size;\n    return buf[i];\n  }\n\n  T average() const { return sum / size; }\n};\n\n#endif /* HISTORY_HPP_ */\n"
  },
  {
    "path": "source/Core/Inc/main.hpp",
    "content": "#ifndef __MAIN_H\n#define __MAIN_H\n#include \"OLED.hpp\"\n#include \"Setup.h\"\n#include \"Types.h\"\n#include <stdint.h>\nextern volatile TemperatureType_t currentTempTargetDegC;\nextern bool                       settingsWereReset;\nextern bool                       usb_pd_available;\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nvoid vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName);\n\n// Threads\nvoid                startGUITask(void const *argument);\nvoid                startPIDTask(void const *argument);\nvoid                startMOVTask(void const *argument);\nvoid                startPOWTask(void const *argument);\nextern TaskHandle_t pidTaskNotification;\nextern int32_t      powerSupplyWattageLimit;\nextern uint8_t      accelInit;\nextern TickType_t   lastMovementTime;\n#ifdef __cplusplus\n}\n// Accelerometer type\nenum class AccelType {\n  Scanning  = 0,\n  None      = 1,\n  MMA       = 2,\n  LIS       = 3,\n  BMA       = 4,\n  MSA       = 5,\n  SC7       = 6,\n  GPIO      = 7,\n  LIS_CLONE = 8,\n};\nextern AccelType DetectedAccelerometerVersion;\n\n#endif\n#endif /* __MAIN_H */\n"
  },
  {
    "path": "source/Core/Inc/power.hpp",
    "content": "/*\n * Power.hpp\n *\n *  Created on: 28 Oct, 2018\n *     Authors: Ben V. Brown, David Hilton (David's Idea)\n */\n\n#include \"BSP.h\"\n#include \"configuration.h\"\n#include \"expMovingAverage.h\"\n#include \"stdint.h\"\n#include <history.hpp>\n#ifndef POWER_HPP_\n#define POWER_HPP_\n\n// thermal mass = 1690 milliJ/*C for my tip.\n//  ->  Wattsx10*Seconds to raise Temp from room temp to +100*C, divided by 100*C.\n// we divide mass by 20 to let the I term dominate near the set point.\n//  This is necessary because of the temp noise and thermal lag in the system.\n// Once we have feed-forward temp estimation we should be able to better tune this.\n\nconst uint8_t                                        wattHistoryFilter = 24; // I term look back weighting\nextern expMovingAverage<uint32_t, wattHistoryFilter> x10WattHistory;\n\nuint32_t availableW10(uint8_t sample);\nvoid     setTipX10Watts(int32_t mw);\nuint8_t  X10WattsToPWM(int32_t milliWatts, uint8_t sample = 0);\n#endif /* POWER_HPP_ */\n"
  },
  {
    "path": "source/Core/Inc/settingsGUI.hpp",
    "content": "/*\r\n * settingsGUI.h\r\n *\r\n *  Created on: 3Sep.,2017\r\n *      Author: Ben V. Brown\r\n */\r\n\r\n#ifndef GUI_HPP_\r\n#define GUI_HPP_\r\n#include \"BSP.h\"\r\n#include \"Buttons.hpp\"\r\n#include \"FreeRTOS.h\"\r\n#include \"Settings.h\"\r\n#include \"Translation.h\"\r\n\r\n#define PRESS_ACCEL_STEP         (TICKS_100MS / 3)\r\n#define PRESS_ACCEL_INTERVAL_MIN TICKS_100MS\r\n#define PRESS_ACCEL_INTERVAL_MAX (TICKS_100MS * 3)\r\n\r\n// GUI holds the menu structure and all its methods for the menu itself\r\n\r\n// Declarations for all the methods for the settings menu (at end of this file)\r\n\r\n// Struct for holding the function pointers and descriptions\r\ntypedef struct {\r\n  // The settings description index, please use the `SETTINGS_DESC` macro with\r\n  // the `SettingsItemIndex` enum. Use 0 for no description.\r\n  uint8_t description;\r\n  void (*const incrementHandler)(void);\r\n  void (*const draw)(void); // Must not be nullptr, as that marks end of menu\r\n  bool (*const isVisible)(void);\r\n  // If this is set, we will automatically use the settings increment handler instead, set >= num settings to disable\r\n  SettingsOptions   autoSettingOption;\r\n  SettingsItemIndex shortDescriptionIndex;\r\n  uint8_t           shortDescriptionSize;\r\n} menuitem;\r\n\r\nvoid                   enterSettingsMenu();\r\nextern const menuitem  rootSettingsMenu[];\r\nextern const menuitem *subSettingsMenus[];\r\n\r\n#endif /* GUI_HPP_ */\r\n"
  },
  {
    "path": "source/Core/Inc/stm32f1xx_hal_conf.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_hal_conf.h\r\n * @brief   HAL configuration file.\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_HAL_CONF_H\r\n#define __STM32F1xx_HAL_CONF_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Exported types ------------------------------------------------------------*/\r\n/* Exported constants --------------------------------------------------------*/\r\n\r\n/* ########################## Module Selection ############################## */\r\n/**\r\n * @brief This is the list of modules to be used in the HAL driver\r\n */\r\n\r\n#define HAL_MODULE_ENABLED\r\n#define HAL_ADC_MODULE_ENABLED\r\n/*#define HAL_CRYP_MODULE_ENABLED   */\r\n/*#define HAL_CAN_MODULE_ENABLED   */\r\n/*#define HAL_CEC_MODULE_ENABLED   */\r\n/*#define HAL_CORTEX_MODULE_ENABLED   */\r\n/*#define HAL_CRC_MODULE_ENABLED   */\r\n/*#define HAL_DAC_MODULE_ENABLED   */\r\n#define HAL_DMA_MODULE_ENABLED\r\n/*#define HAL_ETH_MODULE_ENABLED   */\r\n/*#define HAL_FLASH_MODULE_ENABLED   */\r\n#define HAL_GPIO_MODULE_ENABLED\r\n/* #define HAL_I2C_MODULE_ENABLED */\r\n/*#define HAL_I2S_MODULE_ENABLED   */\r\n/*#define HAL_IRDA_MODULE_ENABLED   */\r\n#define HAL_IWDG_MODULE_ENABLED\r\n/*#define HAL_NOR_MODULE_ENABLED   */\r\n/*#define HAL_NAND_MODULE_ENABLED   */\r\n/*#define HAL_PCCARD_MODULE_ENABLED   */\r\n/*#define HAL_PCD_MODULE_ENABLED   */\r\n/*#define HAL_HCD_MODULE_ENABLED   */\r\n/*#define HAL_PWR_MODULE_ENABLED   */\r\n/*#define HAL_RCC_MODULE_ENABLED   */\r\n/*#define HAL_RTC_MODULE_ENABLED   */\r\n/*#define HAL_SD_MODULE_ENABLED   */\r\n/*#define HAL_MMC_MODULE_ENABLED   */\r\n/*#define HAL_SDRAM_MODULE_ENABLED   */\r\n/*#define HAL_SMARTCARD_MODULE_ENABLED   */\r\n/*#define HAL_SPI_MODULE_ENABLED   */\r\n/*#define HAL_SRAM_MODULE_ENABLED   */\r\n#define HAL_TIM_MODULE_ENABLED\r\n/*#define HAL_UART_MODULE_ENABLED   */\r\n/*#define HAL_USART_MODULE_ENABLED   */\r\n/*#define HAL_WWDG_MODULE_ENABLED   */\r\n\r\n#define HAL_CORTEX_MODULE_ENABLED\r\n#define HAL_DMA_MODULE_ENABLED\r\n#define HAL_FLASH_MODULE_ENABLED\r\n#define HAL_GPIO_MODULE_ENABLED\r\n#define HAL_PWR_MODULE_ENABLED\r\n#define HAL_RCC_MODULE_ENABLED\r\n\r\n/* ########################## Oscillator Values adaptation ####################*/\r\n/**\r\n * @brief Adjust the value of External High Speed oscillator (HSE) used in your application.\r\n *        This value is used by the RCC HAL module to compute the system frequency\r\n *        (when HSE is used as system clock source, directly or through the PLL).\r\n */\r\n#if !defined(HSE_VALUE)\r\n#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */\r\n#endif                                /* HSE_VALUE */\r\n\r\n#if !defined(HSE_STARTUP_TIMEOUT)\r\n#define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */\r\n#endif                                      /* HSE_STARTUP_TIMEOUT */\r\n\r\n/**\r\n * @brief Internal High Speed oscillator (HSI) value.\r\n *        This value is used by the RCC HAL module to compute the system frequency\r\n *        (when HSI is used as system clock source, directly or through the PLL).\r\n */\r\n#if !defined(HSI_VALUE)\r\n#define HSI_VALUE ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/\r\n#endif                                /* HSI_VALUE */\r\n\r\n/**\r\n * @brief Internal Low Speed oscillator (LSI) value.\r\n */\r\n#if !defined(LSI_VALUE)\r\n#define LSI_VALUE 40000U /*!< LSI Typical Value in Hz */\r\n#endif /* LSI_VALUE */   /*!< Value of the Internal Low Speed oscillator in Hz    \\\r\n                              The real value may vary depending on the variations \\\r\n                              in voltage and temperature. */\r\n\r\n/**\r\n * @brief External Low Speed oscillator (LSE) value.\r\n *        This value is used by the UART, RTC HAL module to compute the system frequency\r\n */\r\n#if !defined(LSE_VALUE)\r\n#define LSE_VALUE ((uint32_t)32768) /*!< Value of the External oscillator in Hz*/\r\n#endif                              /* LSE_VALUE */\r\n\r\n#if !defined(LSE_STARTUP_TIMEOUT)\r\n#define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LSE start up, in ms */\r\n#endif                                       /* LSE_STARTUP_TIMEOUT */\r\n\r\n/* Tip: To avoid modifying this file each time you need to use different HSE,\r\n   ===  you can define the HSE value in your toolchain compiler preprocessor. */\r\n\r\n/* ########################### System Configuration ######################### */\r\n/**\r\n * @brief This is the HAL system configuration section\r\n */\r\n#define VDD_VALUE         ((uint32_t)3300) /*!< Value of VDD in mv */\r\n#define TICK_INT_PRIORITY ((uint32_t)0)    /*!< tick interrupt priority (lowest by default)  */\r\n#define USE_RTOS          0\r\n#define PREFETCH_ENABLE   1\r\n\r\n/* ########################## Assert Selection ############################## */\r\n/**\r\n * @brief Uncomment the line below to expanse the \"assert_param\" macro in the\r\n *        HAL drivers code\r\n */\r\n/* #define USE_FULL_ASSERT    1 */\r\n\r\n/* ################## Ethernet peripheral configuration ##################### */\r\n\r\n/* Section 1 : Ethernet peripheral configuration */\r\n\r\n/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */\r\n#define MAC_ADDR0 2\r\n#define MAC_ADDR1 0\r\n#define MAC_ADDR2 0\r\n#define MAC_ADDR3 0\r\n#define MAC_ADDR4 0\r\n#define MAC_ADDR5 0\r\n\r\n/* Definition of the Ethernet driver buffers size and count */\r\n#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive               */\r\n#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit              */\r\n#define ETH_RXBUFNB     ((uint32_t)8)       /* 4 Rx buffers of size ETH_RX_BUF_SIZE  */\r\n#define ETH_TXBUFNB     ((uint32_t)4)       /* 4 Tx buffers of size ETH_TX_BUF_SIZE  */\r\n\r\n/* Section 2: PHY configuration section */\r\n\r\n/* DP83848_PHY_ADDRESS Address*/\r\n#define DP83848_PHY_ADDRESS 0x01U\r\n/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/\r\n#define PHY_RESET_DELAY ((uint32_t)0x000000FF)\r\n/* PHY Configuration delay */\r\n#define PHY_CONFIG_DELAY ((uint32_t)0x00000FFF)\r\n\r\n#define PHY_READ_TO  ((uint32_t)0x0000FFFF)\r\n#define PHY_WRITE_TO ((uint32_t)0x0000FFFF)\r\n\r\n/* Section 3: Common PHY Registers */\r\n\r\n#define PHY_BCR ((uint16_t)0x00) /*!< Transceiver Basic Control Register   */\r\n#define PHY_BSR ((uint16_t)0x01) /*!< Transceiver Basic Status Register    */\r\n\r\n#define PHY_RESET                   ((uint16_t)0x8000) /*!< PHY Reset */\r\n#define PHY_LOOPBACK                ((uint16_t)0x4000) /*!< Select loop-back mode */\r\n#define PHY_FULLDUPLEX_100M         ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */\r\n#define PHY_HALFDUPLEX_100M         ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */\r\n#define PHY_FULLDUPLEX_10M          ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s  */\r\n#define PHY_HALFDUPLEX_10M          ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s  */\r\n#define PHY_AUTONEGOTIATION         ((uint16_t)0x1000) /*!< Enable auto-negotiation function     */\r\n#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function    */\r\n#define PHY_POWERDOWN               ((uint16_t)0x0800) /*!< Select the power down mode           */\r\n#define PHY_ISOLATE                 ((uint16_t)0x0400) /*!< Isolate PHY from MII                 */\r\n\r\n#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed   */\r\n#define PHY_LINKED_STATUS     ((uint16_t)0x0004) /*!< Valid link established               */\r\n#define PHY_JABBER_DETECTION  ((uint16_t)0x0002) /*!< Jabber condition detected            */\r\n\r\n/* Section 4: Extended PHY Registers */\r\n#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset                      */\r\n\r\n#define PHY_SPEED_STATUS  ((uint16_t)0x0002U) /*!< PHY Speed mask                                  */\r\n#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask                                 */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n/**\r\n * @brief Include module's header file\r\n */\r\n\r\n#ifdef HAL_RCC_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_rcc.h\"\r\n#endif /* HAL_RCC_MODULE_ENABLED */\r\n\r\n#ifdef HAL_GPIO_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_gpio.h\"\r\n#endif /* HAL_GPIO_MODULE_ENABLED */\r\n\r\n#ifdef HAL_DMA_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_dma.h\"\r\n#endif /* HAL_DMA_MODULE_ENABLED */\r\n\r\n#ifdef HAL_ETH_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_eth.h\"\r\n#endif /* HAL_ETH_MODULE_ENABLED */\r\n\r\n#ifdef HAL_CAN_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_can.h\"\r\n#endif /* HAL_CAN_MODULE_ENABLED */\r\n\r\n#ifdef HAL_CEC_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_cec.h\"\r\n#endif /* HAL_CEC_MODULE_ENABLED */\r\n\r\n#ifdef HAL_CORTEX_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_cortex.h\"\r\n#endif /* HAL_CORTEX_MODULE_ENABLED */\r\n\r\n#ifdef HAL_ADC_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_adc.h\"\r\n#endif /* HAL_ADC_MODULE_ENABLED */\r\n\r\n#ifdef HAL_CRC_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_crc.h\"\r\n#endif /* HAL_CRC_MODULE_ENABLED */\r\n\r\n#ifdef HAL_DAC_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_dac.h\"\r\n#endif /* HAL_DAC_MODULE_ENABLED */\r\n\r\n#ifdef HAL_FLASH_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_flash.h\"\r\n#endif /* HAL_FLASH_MODULE_ENABLED */\r\n\r\n#ifdef HAL_SRAM_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_sram.h\"\r\n#endif /* HAL_SRAM_MODULE_ENABLED */\r\n\r\n#ifdef HAL_NOR_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_nor.h\"\r\n#endif /* HAL_NOR_MODULE_ENABLED */\r\n\r\n#ifdef HAL_I2C_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_i2c.h\"\r\n#endif /* HAL_I2C_MODULE_ENABLED */\r\n\r\n#ifdef HAL_I2S_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_i2s.h\"\r\n#endif /* HAL_I2S_MODULE_ENABLED */\r\n\r\n#ifdef HAL_IWDG_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_iwdg.h\"\r\n#endif /* HAL_IWDG_MODULE_ENABLED */\r\n\r\n#ifdef HAL_PWR_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_pwr.h\"\r\n#endif /* HAL_PWR_MODULE_ENABLED */\r\n\r\n#ifdef HAL_RTC_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_rtc.h\"\r\n#endif /* HAL_RTC_MODULE_ENABLED */\r\n\r\n#ifdef HAL_PCCARD_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_pccard.h\"\r\n#endif /* HAL_PCCARD_MODULE_ENABLED */\r\n\r\n#ifdef HAL_SD_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_sd.h\"\r\n#endif /* HAL_SD_MODULE_ENABLED */\r\n\r\n#ifdef HAL_MMC_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_mmc.h\"\r\n#endif /* HAL_MMC_MODULE_ENABLED */\r\n\r\n#ifdef HAL_NAND_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_nand.h\"\r\n#endif /* HAL_NAND_MODULE_ENABLED */\r\n\r\n#ifdef HAL_SPI_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_spi.h\"\r\n#endif /* HAL_SPI_MODULE_ENABLED */\r\n\r\n#ifdef HAL_TIM_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_tim.h\"\r\n#endif /* HAL_TIM_MODULE_ENABLED */\r\n\r\n#ifdef HAL_UART_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_uart.h\"\r\n#endif /* HAL_UART_MODULE_ENABLED */\r\n\r\n#ifdef HAL_USART_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_usart.h\"\r\n#endif /* HAL_USART_MODULE_ENABLED */\r\n\r\n#ifdef HAL_IRDA_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_irda.h\"\r\n#endif /* HAL_IRDA_MODULE_ENABLED */\r\n\r\n#ifdef HAL_SMARTCARD_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_smartcard.h\"\r\n#endif /* HAL_SMARTCARD_MODULE_ENABLED */\r\n\r\n#ifdef HAL_WWDG_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_wwdg.h\"\r\n#endif /* HAL_WWDG_MODULE_ENABLED */\r\n\r\n#ifdef HAL_PCD_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_pcd.h\"\r\n#endif /* HAL_PCD_MODULE_ENABLED */\r\n\r\n#ifdef HAL_HCD_MODULE_ENABLED\r\n#include \"stm32f1xx_hal_hcd.h\"\r\n#endif /* HAL_HCD_MODULE_ENABLED */\r\n\r\n/* Exported macro ------------------------------------------------------------*/\r\n#ifdef USE_FULL_ASSERT\r\n/**\r\n * @brief  The assert_param macro is used for function's parameters check.\r\n * @param  expr: If expr is false, it calls assert_failed function\r\n *         which reports the name of the source file and the source\r\n *         line number of the call that failed.\r\n *         If expr is true, it returns no value.\r\n * @retval None\r\n */\r\n#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__))\r\n/* Exported functions ------------------------------------------------------- */\r\nvoid assert_failed(uint8_t *file, uint32_t line);\r\n#else\r\n#define assert_param(expr) ((void)0U)\r\n#endif /* USE_FULL_ASSERT */\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_HAL_CONF_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/Inc/stm32f1xx_it.h",
    "content": "/**\r\n ******************************************************************************\r\n * @file    stm32f1xx_it.h\r\n * @brief   This file contains the headers of the interrupt handlers.\r\n ******************************************************************************\r\n *\r\n * COPYRIGHT(c) 2017 STMicroelectronics\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *   1. Redistributions of source code must retain the above copyright notice,\r\n *      this list of conditions and the following disclaimer.\r\n *   2. Redistributions in binary form must reproduce the above copyright notice,\r\n *      this list of conditions and the following disclaimer in the documentation\r\n *      and/or other materials provided with the distribution.\r\n *   3. Neither the name of STMicroelectronics nor the names of its contributors\r\n *      may be used to endorse or promote products derived from this software\r\n *      without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Define to prevent recursive inclusion -------------------------------------*/\r\n#ifndef __STM32F1xx_IT_H\r\n#define __STM32F1xx_IT_H\r\n\r\n#ifdef __cplusplus\r\nextern \"C\" {\r\n#endif\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n/* Exported types ------------------------------------------------------------*/\r\n/* Exported constants --------------------------------------------------------*/\r\n/* Exported macro ------------------------------------------------------------*/\r\n/* Exported functions ------------------------------------------------------- */\r\n\r\nvoid NMI_Handler(void);\r\nvoid HardFault_Handler(void);\r\nvoid MemManage_Handler(void);\r\nvoid BusFault_Handler(void);\r\nvoid UsageFault_Handler(void);\r\nvoid DebugMon_Handler(void);\r\nvoid SysTick_Handler(void);\r\nvoid DMA1_Channel1_IRQHandler(void);\r\nvoid DMA1_Channel6_IRQHandler(void);\r\nvoid DMA1_Channel7_IRQHandler(void);\r\nvoid ADC1_2_IRQHandler(void);\r\nvoid TIM1_UP_IRQHandler(void);\r\n\r\n#ifdef __cplusplus\r\n}\r\n#endif\r\n\r\n#endif /* __STM32F1xx_IT_H */\r\n\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/LangSupport/lang_multi.cpp",
    "content": "#include \"OLED.hpp\"\n#include \"Translation.h\"\n#include \"Translation_multi.h\"\n#include \"brieflz.h\"\n#include \"configuration.h\"\n#include \"settingsGUI.hpp\"\n\nconst TranslationIndexTable *Tr                 = nullptr;\nconst char                  *TranslationStrings = nullptr;\n\nstatic uint8_t selectedLangIndex = 255;\n\nstatic void initSelectedLanguageIndex() {\n  if (selectedLangIndex == 255) {\n\n    const uint16_t wantedLanguageID = getSettingValue(SettingsOptions::UILanguage);\n\n    for (size_t i = 0; i < LanguageCount; i++) {\n      if (LanguageMetas[i].uniqueID == wantedLanguageID) {\n        selectedLangIndex = i;\n        return;\n      }\n    }\n    // No match, use the first language.\n    selectedLangIndex = 0;\n  }\n}\n\nstatic void writeSelectedLanguageToSettings() { setSettingValue(SettingsOptions::UILanguage, LanguageMetas[selectedLangIndex].uniqueID); }\n\nvoid prepareTranslations() {\n  initSelectedLanguageIndex();\n  if (selectedLangIndex >= LanguageCount) {\n    // This shouldn't happen.\n    return;\n  }\n  const LanguageMeta &langMeta = LanguageMetas[selectedLangIndex];\n\n  const TranslationData *translationData;\n  uint16_t               buffer_remaining_size = translation_data_out_buffer_size;\n  uint8_t               *buffer_next_ptr       = translation_data_out_buffer;\n  if (langMeta.translation_is_compressed) {\n    unsigned int outsize;\n    outsize = blz_depack_srcsize(langMeta.translation_data, buffer_next_ptr, langMeta.translation_size);\n\n    translationData = reinterpret_cast<const TranslationData *>(buffer_next_ptr);\n    buffer_remaining_size -= outsize;\n    buffer_next_ptr += outsize;\n  } else {\n    translationData = reinterpret_cast<const TranslationData *>(langMeta.translation_data);\n  }\n  Tr                 = &translationData->indices;\n  TranslationStrings = translationData->strings;\n\n  // Font 12 can be compressed; if it is then we want to decompress it to ram\n  if (FontSectionInfo.font12_compressed_source != NULL) {\n    blz_depack(FontSectionInfo.font12_compressed_source, (uint8_t *)FontSectionInfo.font12_start_ptr, FontSectionInfo.font12_decompressed_size);\n  }\n\n  // Font 06 can be compressed; if it is then we want to decompress it to ram\n  if (FontSectionInfo.font06_compressed_source != NULL) {\n    blz_depack(FontSectionInfo.font06_compressed_source, (uint8_t *)FontSectionInfo.font06_start_ptr, FontSectionInfo.font06_decompressed_size);\n  }\n}\n\nvoid settings_setLanguageSwitch(void) {\n  selectedLangIndex = (selectedLangIndex + 1) % LanguageCount;\n  writeSelectedLanguageToSettings();\n  prepareTranslations();\n}\n\nbool settings_showLanguageSwitch(void) { return true; }\nvoid settings_displayLanguageSwitch(void) { OLED::printWholeScreen(translatedString(Tr->SettingsShortNames[static_cast<uint8_t>(SettingsItemIndex::LanguageSwitch)])); }\n\nbool isLastLanguageOption(void) { return selectedLangIndex == (LanguageCount - 1); }"
  },
  {
    "path": "source/Core/LangSupport/lang_single.cpp",
    "content": "#include \"Translation.h\"\n\nvoid settings_setLanguageSwitch(void) {}\n\nvoid settings_displayLanguageSwitch(void) {}\nbool settings_showLanguageSwitch(void) { return false; }\nbool isLastLanguageOption(void) { return true; }"
  },
  {
    "path": "source/Core/Src/FreeRTOSHooks.c",
    "content": "/*\r\n * FreeRTOSHooks.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"FreeRTOSHooks.h\"\r\n#include \"BSP.h\"\r\nvoid vApplicationIdleHook(void) { resetWatchdog(); }\r\n\r\n/* USER CODE BEGIN GET_IDLE_TASK_MEMORY */\r\nstatic StaticTask_t xIdleTaskTCBBuffer;\r\nstatic StackType_t  xIdleStack[configMINIMAL_STACK_SIZE];\r\n\r\nvoid vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize) {\r\n  *ppxIdleTaskTCBBuffer   = &xIdleTaskTCBBuffer;\r\n  *ppxIdleTaskStackBuffer = &xIdleStack[0];\r\n  *pulIdleTaskStackSize   = configMINIMAL_STACK_SIZE;\r\n  /* place for user code */\r\n}\r\n\r\nvoid vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName) {\r\n  (void)xTask;\r\n  (void)pcTaskName;\r\n\r\n  // We dont have a good way to handle a stack overflow at this point in time\r\n  reboot();\r\n}\r\n"
  },
  {
    "path": "source/Core/Src/QC3.cpp",
    "content": "/*\r\n * QC3.c\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n// Quick charge 3.0 supporting functions\r\n#include \"QC3.h\"\r\n#include \"BSP.h\"\r\n#include \"cmsis_os.h\"\r\n#include \"configuration.h\"\r\n#include \"stdint.h\"\r\n\r\nenum QCState {\r\n  NOT_STARTED = 0, // Have not checked\r\n  QC_3        = 1,\r\n  QC_2        = 2,\r\n  NO_QC       = 3,\r\n};\r\n\r\nvoid QC_Seek9V() {\r\n  QC_DNegZero_Six();\r\n  QC_DPlusThree_Three();\r\n}\r\n\r\nvoid QC_Seek12V() {\r\n  QC_DNegZero_Six();\r\n  QC_DPlusZero_Six();\r\n}\r\n\r\nvoid QC_Seek20V() {\r\n  QC_DNegThree_Three();\r\n  QC_DPlusThree_Three();\r\n}\r\n\r\nvoid QC_SeekContMode() {\r\n  QC_DNegThree_Three();\r\n  QC_DPlusZero_Six();\r\n}\r\n\r\nvoid QC_SeekContPlus() {\r\n  QC_SeekContMode();\r\n  osDelay(30);\r\n  QC_Seek20V();\r\n  osDelay(10);\r\n  QC_SeekContMode();\r\n}\r\n\r\nvoid QC_SeekContNeg() {\r\n  QC_SeekContMode();\r\n  osDelay(30);\r\n  QC_Seek12V();\r\n  osDelay(10);\r\n  QC_SeekContMode();\r\n}\r\n\r\nQCState QCMode  = QCState::NOT_STARTED;\r\nuint8_t QCTries = 0;\r\nvoid    seekQC(int16_t Vx10, uint16_t divisor) {\r\n  if (QCMode == QCState::NOT_STARTED) {\r\n    startQC(divisor);\r\n  }\r\n\r\n  if (Vx10 < 40) { // Bail out if less than 4V\r\n    return;\r\n  }\r\n\r\n  if (xTaskGetTickCount() < TICKS_SECOND) {\r\n    return;\r\n  }\r\n\r\n  // Seek the QC to the Voltage given if this adapter supports continuous mode\r\n  // try and step towards the wanted value\r\n\r\n  // 1. Measure current voltage\r\n  int16_t vStart     = getInputVoltageX10(divisor, 0);\r\n  int     difference = Vx10 - vStart;\r\n\r\n  // 2. calculate ideal steps (0.2V changes)\r\n\r\n  int steps = difference / 2;\r\n  if (QCMode == QCState::QC_3) {\r\n    while (steps < 0) {\r\n      QC_SeekContNeg();\r\n      vTaskDelay(3 * TICKS_10MS);\r\n      steps++;\r\n    }\r\n    while (steps > 0) {\r\n      QC_SeekContPlus();\r\n      vTaskDelay(3 * TICKS_10MS);\r\n      steps--;\r\n    }\r\n    osDelay(100);\r\n  }\r\n#ifdef ENABLE_QC2\r\n  // Re-measure\r\n  /* Disabled due to nothing to test and code space of around 1k*/\r\n  steps = vStart - getInputVoltageX10(divisor, 0);\r\n  if (steps < 0) {\r\n    steps = -steps;\r\n  }\r\n  if (steps > 4) {\r\n    // No continuous mode, so QC2\r\n    QCMode = QCState::QC_2;\r\n    // Goto nearest\r\n    if (Vx10 > 190) {\r\n      // request 20V\r\n      QC_Seek20V();\r\n    } else if (Vx10 > 110) {\r\n      // request 12V\r\n      QC_Seek12V();\r\n    } else {\r\n      // request 9V\r\n      QC_Seek9V();\r\n    }\r\n  }\r\n#endif /* ENABLE_QC2 */\r\n}\r\n\r\n// Must be called after FreeRToS Starts\r\nvoid startQC(uint16_t divisor) {\r\n  // Pre check that the input could be >5V already, and if so, dont both\r\n  // negotiating as someone is feeding in hv\r\n  if (getInputVoltageX10(divisor, 0) > 80) {\r\n    QCTries = 11;\r\n    QCMode  = QCState::NO_QC;\r\n    return;\r\n  }\r\n  if (QCTries > 10) {\r\n    QCMode = QCState::NO_QC;\r\n    return;\r\n  }\r\n  QCMode = QCState::NOT_STARTED;\r\n  QC_Init_GPIO();\r\n\r\n  // Tries to negotiate QC for 9V\r\n  // This is a multiple step process.\r\n  // 1. Set around 0.6V on D+ for 1.25 Seconds or so\r\n  // 2. After this It should un-short D+->D- and instead add a 20k pulldown on\r\n  // D-\r\n  QC_DPlusZero_Six();\r\n\r\n  // Delay 1.25 seconds\r\n  uint8_t enteredQC = 0;\r\n  for (uint16_t i = 0; i < 200 && enteredQC == 0; i++) {\r\n    vTaskDelay(TICKS_10MS); // 10mS pause\r\n    if (i > 130) {\r\n      if (QC_DM_PulledDown()) {\r\n        enteredQC = 1;\r\n      }\r\n      if (i == 140) {\r\n        // For some marginal QC chargers, we try adding a pulldown\r\n        QC_DM_PullDown();\r\n      }\r\n    }\r\n  }\r\n\r\n  QC_DM_No_PullDown();\r\n\r\n  if (enteredQC) {\r\n    // We have a QC capable charger\r\n    QC_Seek9V();\r\n    QC_Post_Probe_En();\r\n    QC_Seek9V();\r\n    // Wait for frontend ADC to stabilise\r\n    QCMode = QCState::QC_2;\r\n    for (uint8_t i = 0; i < 10; i++) {\r\n      if (getInputVoltageX10(divisor, 0) > 80) {\r\n        // yay we have at least QC2.0 or QC3.0\r\n        QCMode = QCState::QC_3; // We have at least QC2, pray for 3\r\n        return;\r\n      }\r\n      vTaskDelay(TICKS_100MS); // 100mS\r\n    }\r\n    QCMode = QCState::NOT_STARTED;\r\n    QCTries++;\r\n  } else {\r\n    // no QC\r\n    QCTries++;\r\n    QCMode = QCState::NO_QC;\r\n  }\r\n}\r\n\r\nbool hasQCNegotiated() { return QCMode == QCState::QC_3 || QCMode == QCState::QC_2; }\r\n"
  },
  {
    "path": "source/Core/Src/ScrollMessage.cpp",
    "content": "#include \"ScrollMessage.hpp\"\n#include \"OLED.hpp\"\n#include \"Settings.h\"\n#include \"configuration.h\"\n\n/**\n * Counts the number of chars in the string excluding the null terminator.\n * This is a custom version of `strlen` which takes into account our custom\n * double-byte char encoding.\n * @param str The input string.\n * @return The length of the string.\n */\nstatic uint16_t str_display_len(const char *const str) {\n  const uint8_t *next  = reinterpret_cast<const uint8_t *>(str);\n  uint16_t       count = 0;\n  while (next[0]) {\n    if (next[0] <= 0xF0) {\n      count++;\n      next++;\n    } else {\n      if (!next[1]) {\n        break;\n      }\n      count++;\n      next += 2;\n    }\n  }\n  return count;\n}\n\n/**\n * Calculate the width in pixels of the message string, in the large\n * font and taking into account multi-byte chars.\n *\n * @param message The null-terminated message string.\n */\nuint16_t messageWidth(const char *message) { return FONT_12_WIDTH * str_display_len(message); }\n\nvoid drawScrollingText(const char *message, TickType_t currentTickOffset) {\n  OLED::clearScreen();\n  int16_t  messageOffset;\n  uint16_t msgWidth = messageWidth(message);\n  if (msgWidth > OLED_WIDTH) {\n    messageOffset = (currentTickOffset / (getSettingValue(SettingsOptions::DescriptionScrollSpeed) == 1 ? TICKS_100MS / 10 : (TICKS_100MS / 5)));\n    messageOffset %= msgWidth + OLED_WIDTH; // Roll around at the end\n    if (messageOffset < OLED_WIDTH) {\n      // Snap the message to the left edge.\n      messageOffset = OLED_WIDTH;\n    } else if (messageOffset > msgWidth) {\n      // Snap the message to the right edge.\n      messageOffset = msgWidth;\n    }\n  } else {\n    // Centre the message without scrolling.\n    messageOffset = (OLED_WIDTH - msgWidth) / 2 + msgWidth;\n  }\n\n  //^ Rolling offset based on time\n  OLED::setCursor((OLED_WIDTH - messageOffset), 0);\n  OLED::print(message, FontStyle::LARGE);\n}\n"
  },
  {
    "path": "source/Core/Src/Settings.cpp",
    "content": "/*\n * Settings.c\n *\n *  Created on: 29 Sep 2016\n *      Author: Ralim\n *\n *      This file holds the users settings and saves / restores them to the\n * devices flash\n */\n\n#include \"Settings.h\"\n#include \"BSP.h\"\n#include \"Setup.h\"\n#include \"Translation.h\"\n#include \"configuration.h\"\n#include <string.h> // for memset\nbool sanitiseSettings();\n\n/*\n * Used to constrain the QC 3.0 Voltage selection to suit hardware.\n * We allow a little overvoltage for users who want to push it\n */\n#ifdef POW_QC_20V\n#define QC_VOLTAGE_MAX 220\n#else\n#define QC_VOLTAGE_MAX 140\n#endif /* POW_QC_20V */\n\n/*\n * This struct must be a multiple of 2 bytes as it is saved / restored from\n * flash in uint16_t chunks\n */\ntypedef struct {\n  uint16_t versionMarker;\n  uint16_t length; // Length of valid bytes following\n  uint16_t settingsValues[SettingsOptionsLength];\n  // used to make this nicely \"good enough\" aligned to 32 bytes to make driver code trivial\n  uint32_t padding;\n\n} systemSettingsType;\n\n//~1024 is common programming size, setting threshold to be lower so we have warning\nstatic_assert(sizeof(systemSettingsType) < 512);\n\n// char (*__kaboom)[sizeof(systemSettingsType)] = 1; // Uncomment to print size at compile time\nvolatile systemSettingsType systemSettings;\n\n// For every setting we need to store the min/max/increment values\ntypedef struct {\n  const uint16_t min;          // Inclusive minimum value\n  const uint16_t max;          // Inclusive maximum value\n  const uint16_t increment;    // Standard increment\n  const uint16_t defaultValue; // Default vaue after reset\n} SettingConstants;\n\nstatic const SettingConstants settingsConstants[(int)SettingsOptions::SettingsOptionsLength] = {\n    //{                   min,                               max,         increment,                      default}\n    {            MIN_TEMP_C,                                                            MAX_TEMP_F,                 5,               SOLDERING_TEMP}, // SolderingTemp\n    {            MIN_TEMP_C,                                                            MAX_TEMP_F,                 5,                          150}, // SleepTemp\n    {                     0,                                                                    15,                 1,                   SLEEP_TIME}, // SleepTime\n    {                     0,                                                                     4,                 1,              CUT_OUT_SETTING}, // MinDCVoltageCells\n    {                    24,                                                                    38,                 1,               RECOM_VOL_CELL}, // MinVoltageCells\n    {                    90,                                                        QC_VOLTAGE_MAX,                 2,                           90}, // QCIdealVoltage\n    {                     0,                                                  MAX_ORIENTATION_MODE,                 1,             ORIENTATION_MODE}, // OrientationMode\n    {                     0,                                                                     9,                 1,                  SENSITIVITY}, // Sensitivity\n    {                     0,                                                                     1,                 1,               ANIMATION_LOOP}, // AnimationLoop\n    {                     0,                                      settingOffSpeed_t::MAX_VALUE - 1,                 1,              ANIMATION_SPEED}, // AnimationSpeed\n    {                     0,                                                                     3,                 1,              AUTO_START_MODE}, // AutoStartMode\n    {                     0,                                                                    60,                 1,                SHUTDOWN_TIME}, // ShutdownTime\n    {                     0,                                                                     1,                 1,           COOLING_TEMP_BLINK}, // CoolingTempBlink\n    {                     0,                                                                     1,                 1,                DETAILED_IDLE}, // DetailedIDLE\n    {                     0,                                                                     1,                 1,           DETAILED_SOLDERING}, // DetailedSoldering\n    {                     0,                                     (uint16_t)(HasFahrenheit ? 1 : 0),                 1,              TEMPERATURE_INF}, // TemperatureInF\n    {                     0,                                                                     1,                 1,     DESCRIPTION_SCROLL_SPEED}, // DescriptionScrollSpeed\n    {                     0,                                                                     2,                 1,                 LOCKING_MODE}, // LockingMode\n    {                     0,                                                                    99,                 1,          POWER_PULSE_DEFAULT}, // KeepAwakePulse\n    {                     1,                                                  POWER_PULSE_WAIT_MAX,                 1,     POWER_PULSE_WAIT_DEFAULT}, // KeepAwakePulseWait\n    {                     1,                                              POWER_PULSE_DURATION_MAX,                 1, POWER_PULSE_DURATION_DEFAULT}, // KeepAwakePulseDuration\n    {                   360,                                                                   900,                 1,                  VOLTAGE_DIV}, // VoltageDiv\n    {                     0,                                                            MAX_TEMP_F,                10,                   BOOST_TEMP}, // BoostTemp\n    {MIN_CALIBRATION_OFFSET,                                                                  2500,                 1,           CALIBRATION_OFFSET}, // CalibrationOffset\n    {                     0,                                                       MAX_POWER_LIMIT, POWER_LIMIT_STEPS,                  POWER_LIMIT}, // PowerLimit\n    {                     0,                                                                     1,                 1,   REVERSE_BUTTON_TEMP_CHANGE}, // ReverseButtonTempChangeEnabled\n    {                     5,                                             TEMP_CHANGE_LONG_STEP_MAX,                 5,        TEMP_CHANGE_LONG_STEP}, // TempChangeLongStep\n    {                     1,                                            TEMP_CHANGE_SHORT_STEP_MAX,                 1,       TEMP_CHANGE_SHORT_STEP}, // TempChangeShortStep\n    {                     0,                                                                     9,                 1,                            7}, // HallEffectSensitivity\n    {                     0,                                                                     9,                 1,                            0}, // AccelMissingWarningCounter\n    {                     0,                                                                     9,                 1,                            0}, // PDMissingWarningCounter\n    {                     0,                                                                0xFFFF,                 0,                 41431 /*EN*/}, // UILanguage\n    {                     0,                                                                    50,                 1,                           20}, // PDNegTimeout\n    {                     0,                                                                     1,                 1,                            0}, // OLEDInversion\n    {        MIN_BRIGHTNESS,                                                        MAX_BRIGHTNESS,   BRIGHTNESS_STEP,           DEFAULT_BRIGHTNESS}, // OLEDBrightness\n    {                     0,                                                                     6,                 1,                            1}, // LOGOTime\n    {                     0,                                                                     1,                 1,                            0}, // CalibrateCJC\n    {                     0,                                                                     1,                 1,                            0}, // BluetoothLE\n    {                     0,                                                                     2,                 1,                            0}, // USBPDMode\n    {                     1,                                                                     5,                 1,                            4}, // ProfilePhases\n    {            MIN_TEMP_C,                                                            MAX_TEMP_F,                 5,                           90}, // ProfilePreheatTemp\n    {                     1,                                                                    10,                 1,                            1}, // ProfilePreheatSpeed\n    {            MIN_TEMP_C,                                                            MAX_TEMP_F,                 5,                          130}, // ProfilePhase1Temp\n    {                    10,                                                                   180,                 5,                           90}, // ProfilePhase1Duration\n    {            MIN_TEMP_C,                                                            MAX_TEMP_F,                 5,                          140}, // ProfilePhase2Temp\n    {                    10,                                                                   180,                 5,                           30}, // ProfilePhase2Duration\n    {            MIN_TEMP_C,                                                            MAX_TEMP_F,                 5,                          165}, // ProfilePhase3Temp\n    {                    10,                                                                   180,                 5,                           30}, // ProfilePhase3Duration\n    {            MIN_TEMP_C,                                                            MAX_TEMP_F,                 5,                          140}, // ProfilePhase4Temp\n    {                    10,                                                                   180,                 5,                           30}, // ProfilePhase4Duration\n    {            MIN_TEMP_C,                                                            MAX_TEMP_F,                 5,                           90}, // ProfilePhase5Temp\n    {                    10,                                                                   180,                 5,                           30}, // ProfilePhase5Duration\n    {                     1,                                                                    10,                 1,                            2}, // ProfileCooldownSpeed\n    {                     0,                                                                    12,                 1,                            0}, // HallEffectSleepTime\n    {                     0, (tipType_t::TIP_TYPE_MAX - 1) > 0 ? (tipType_t::TIP_TYPE_MAX - 1) : 0,                 1,                            0}, // SolderingTipType\n    {                     0,                                                                     1,                 1,                            0}, // ReverseButtonSettings\n};\nstatic_assert((sizeof(settingsConstants) / sizeof(SettingConstants)) == ((int)SettingsOptions::SettingsOptionsLength));\n\nvoid saveSettings() {\n#ifdef CANT_DIRECT_READ_SETTINGS\n  // For these devices flash is not 1:1 mapped, so need to read into staging buffer\n  systemSettingsType settings;\n  flash_read_buffer((uint8_t *)&settings, sizeof(systemSettingsType));\n  if (memcmp((void *)&settings, (void *)&systemSettings, sizeof(systemSettingsType))) {\n    flash_save_buffer((uint8_t *)&systemSettings, sizeof(systemSettingsType));\n  }\n\n#else\n  if (memcmp((void *)SETTINGS_START_PAGE, (void *)&systemSettings, sizeof(systemSettingsType))) {\n    flash_save_buffer((uint8_t *)&systemSettings, sizeof(systemSettingsType));\n  }\n\n#endif /* CANT_DIRECT_READ_SETTINGS */\n}\n\nbool loadSettings() {\n  // We read the flash\n  flash_read_buffer((uint8_t *)&systemSettings, sizeof(systemSettingsType));\n  // Then ensure all values are valid\n  return sanitiseSettings();\n}\n\nbool sanitiseSettings() {\n  // For all settings, need to ensure settings are in a valid range\n  // First for any not know about due to array growth, reset them and update the length value\n  bool dirty = false;\n  if (systemSettings.versionMarker != SETTINGSVERSION) {\n    memset((void *)&systemSettings, 0xFF, sizeof(systemSettings));\n    systemSettings.versionMarker = SETTINGSVERSION;\n    dirty                        = true;\n  }\n  if (systemSettings.padding != 0xFFFFFFFF) {\n    systemSettings.padding = 0xFFFFFFFF; // Force padding to 0xFFFFFFFF so that rolling forwards / back should be easier\n    dirty                  = true;\n  }\n  if (systemSettings.length < (int)SettingsOptions::SettingsOptionsLength) {\n    dirty = true;\n    for (int i = systemSettings.length; i < (int)SettingsOptions::SettingsOptionsLength; i++) {\n      systemSettings.settingsValues[i] = 0xFFFF; // Ensure its as if it was erased\n    }\n    systemSettings.length = (int)SettingsOptions::SettingsOptionsLength;\n  }\n  for (int i = 0; i < (int)SettingsOptions::SettingsOptionsLength; i++) {\n    // Check min max for all settings, if outside the range, move to default\n    if (systemSettings.settingsValues[i] < settingsConstants[i].min || systemSettings.settingsValues[i] > settingsConstants[i].max) {\n      systemSettings.settingsValues[i] = settingsConstants[i].defaultValue;\n      dirty                            = true;\n    }\n  }\n  if (dirty) {\n    saveSettings();\n  }\n  return dirty;\n}\n\nvoid resetSettings() {\n  memset((void *)&systemSettings, 0xFF, sizeof(systemSettingsType));\n  sanitiseSettings();\n  saveSettings(); // Save defaults\n}\n\nvoid setSettingValue(const enum SettingsOptions option, const uint16_t newValue) {\n  const auto constants        = settingsConstants[(int)option];\n  uint16_t   constrainedValue = newValue;\n  if (constrainedValue < constants.min) {\n    // If less than min, constrain\n    constrainedValue = constants.min;\n  } else if (constrainedValue > constants.max) {\n    // If hit max, constrain\n    constrainedValue = constants.max;\n  }\n  systemSettings.settingsValues[(int)option] = constrainedValue;\n}\n\n// Lookup wrapper for ease of use (with typing)\nuint16_t getSettingValue(const enum SettingsOptions option) { return systemSettings.settingsValues[(int)option]; }\n\n// Increment by the step size to the next value. If past the end wrap to the minimum\n// Returns true if we are on the _last_ value\nvoid nextSettingValue(const enum SettingsOptions option) {\n  const auto constants = settingsConstants[(int)option];\n  if (systemSettings.settingsValues[(int)option] == (constants.max)) {\n    // Already at max, wrap to the start\n    systemSettings.settingsValues[(int)option] = constants.min;\n  } else if (systemSettings.settingsValues[(int)option] >= (constants.max - constants.increment)) {\n    // If within one increment of the end, constrain to the end\n    systemSettings.settingsValues[(int)option] = constants.max;\n  } else {\n    // Otherwise increment\n    systemSettings.settingsValues[(int)option] += constants.increment;\n  }\n}\n\nbool isLastSettingValue(const enum SettingsOptions option) {\n  const auto constants = settingsConstants[(int)option];\n  uint16_t   max       = constants.max;\n  // handle temp unit limitations\n  if (option == SettingsOptions::SolderingTemp) {\n    if (getSettingValue(SettingsOptions::TemperatureInF)) {\n      max = MAX_TEMP_F;\n    } else {\n      max = MAX_TEMP_C;\n    }\n  } else if (option == SettingsOptions::BoostTemp) {\n    if (getSettingValue(SettingsOptions::TemperatureInF)) {\n      max = MAX_TEMP_F;\n    } else {\n      max = MAX_TEMP_C;\n    }\n  } else if (option == SettingsOptions::SleepTemp) {\n    if (getSettingValue(SettingsOptions::TemperatureInF)) {\n      max = 580;\n    } else {\n      max = 300;\n    }\n  } else if (option == SettingsOptions::UILanguage) {\n    return isLastLanguageOption();\n  }\n  return systemSettings.settingsValues[(int)option] > (max - constants.increment);\n}\n// Step backwards on the settings item\n// Return true if we are at the end (min)\nvoid prevSettingValue(const enum SettingsOptions option) {\n  const auto constants = settingsConstants[(int)option];\n  if (systemSettings.settingsValues[(int)option] == (constants.min)) {\n    // Already at min, wrap to the max\n    systemSettings.settingsValues[(int)option] = constants.max;\n  } else if (systemSettings.settingsValues[(int)option] <= (constants.min + constants.increment)) {\n    // If within one increment of the start, constrain to the start\n    systemSettings.settingsValues[(int)option] = constants.min;\n  } else {\n    // Otherwise decrement\n    systemSettings.settingsValues[(int)option] -= constants.increment;\n  }\n}\n\nuint16_t lookupHallEffectThreshold() {\n  // Return the threshold above which the hall effect sensor is \"activated\"\n  // We want this to be roughly exponentially mapped from 0-1000\n  switch (getSettingValue(SettingsOptions::HallEffectSensitivity)) {\n  case 0:\n    return 0;\n  case 1:\n    return 1000;\n  case 2:\n    return 750;\n  case 3:\n    return 500;\n  case 4:\n    return 250;\n  case 5:\n    return 150;\n  case 6:\n    return 100;\n  case 7:\n    return 75;\n  case 8:\n    return 50;\n  case 9:\n    return 25;\n  default:\n    return 0; // Off\n  }\n}\n\n// Lookup function for cutoff setting -> X10 voltage\n/*\n * 0=DC\n * 1=3S\n * 2=4S\n * 3=5S\n * 4=6S\n */\nuint8_t lookupVoltageLevel() {\n  auto minVoltageOnCell    = getSettingValue(SettingsOptions::MinDCVoltageCells);\n  auto minVoltageCellCount = getSettingValue(SettingsOptions::MinVoltageCells);\n  if (minVoltageOnCell == 0) {\n    return 90; // 9V since iron does not function effectively below this\n  } else {\n    return (minVoltageOnCell * minVoltageCellCount) + (minVoltageCellCount * 2);\n  }\n}\n\n#ifdef TIP_TYPE_SUPPORT\nconst char *lookupTipName() {\n  // Get the name string for the current soldering tip\n  tipType_t value = (tipType_t)getSettingValue(SettingsOptions::SolderingTipType);\n\n  switch (value) {\n#ifdef TIPTYPE_T12\n  case tipType_t::T12_8_OHM:\n    return translatedString(Tr->TipTypeT12Long);\n    break;\n  case tipType_t::T12_6_2_OHM:\n    return translatedString(Tr->TipTypeT12Short);\n    break;\n  case tipType_t::T12_4_OHM:\n    return translatedString(Tr->TipTypeT12PTS);\n    break;\n#endif\n#ifdef TIPTYPE_TS80\n  case tipType_t::TS80_4_5_OHM:\n    return translatedString(Tr->TipTypeTS80);\n    break;\n#endif\n#ifdef TIPTYPE_JBC\n  case tipType_t::JBC_210_2_5_OHM:\n    return translatedString(Tr->TipTypeJBCC210);\n    break;\n#endif\n#ifdef AUTO_TIP_SELECTION\n  case tipType_t::TIP_TYPE_AUTO:\n#endif\n  default:\n    return translatedString(Tr->TipTypeAuto);\n    break;\n  }\n}\n#endif /* TIP_TYPE_SUPPORT */\n\n// Returns the resistance for the current tip selected by the user or 0 for auto\n#ifdef TIP_TYPE_SUPPORT\nuint8_t getUserSelectedTipResistance() {\n  tipType_t value = (tipType_t)getSettingValue(SettingsOptions::SolderingTipType);\n\n  switch (value) {\n#ifdef AUTO_TIP_SELECTION\n  case tipType_t::TIP_TYPE_AUTO:\n    return 0;\n    break;\n#endif\n#ifdef TIPTYPE_T12\n  case tipType_t::T12_8_OHM:\n    return 80;\n    break;\n  case tipType_t::T12_6_2_OHM:\n    return 62;\n    break;\n  case tipType_t::T12_4_OHM:\n    return 40;\n    break;\n#endif\n#ifdef TIPTYE_TS80\n  case tipType_t::TS80_4_5_OHM:\n    return 45;\n    break;\n#endif\n#ifdef TIPTYPE_JBC\n  case tipType_t::JBC_210_2_5_OHM:\n    return 25;\n    break;\n#endif\n  default:\n    return 0;\n    break;\n  }\n}\n#else\nuint8_t getUserSelectedTipResistance() { return tipType_t::TIP_TYPE_AUTO; }\n#endif /* TIP_TYPE_SUPPORT */\n"
  },
  {
    "path": "source/Core/Src/Translation.cpp",
    "content": "#include \"Translation.h\"\n\nconst char *translatedString(uint16_t offset) { return TranslationStrings + offset; }\n"
  },
  {
    "path": "source/Core/Src/freertos.c",
    "content": "/**\r\n ******************************************************************************\r\n * File Name          : freertos.c\r\n * Description        : Code for freertos applications\r\n ******************************************************************************\r\n * This notice applies to any and all portions of this file\r\n * that are not between comment pairs USER CODE BEGIN and\r\n * USER CODE END. Other portions of this file, whether\r\n * inserted by the user or by software development tools\r\n * are owned by their respective copyright owners.\r\n *\r\n * Copyright (c) 2017 STMicroelectronics International N.V.\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted, provided that the following conditions are met:\r\n *\r\n * 1. Redistribution of source code must retain the above copyright notice,\r\n *    this list of conditions and the following disclaimer.\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n *    this list of conditions and the following disclaimer in the documentation\r\n *    and/or other materials provided with the distribution.\r\n * 3. Neither the name of STMicroelectronics nor the names of other\r\n *    contributors to this software may be used to endorse or promote products\r\n *    derived from this software without specific written permission.\r\n * 4. This software, including modifications and/or derivative works of this\r\n *    software, must execute solely and exclusively on microcontroller or\r\n *    microprocessor devices manufactured by or for STMicroelectronics.\r\n * 5. Redistribution and use of this software other than as permitted under\r\n *    this license is void and will automatically terminate your rights under\r\n *    this license.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT\r\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\n * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY\r\n * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT\r\n * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r\n * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r\n * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n/* Includes ------------------------------------------------------------------*/\r\n#include \"FreeRTOS.h\"\r\n#include \"task.h\"\r\n/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/\r\n"
  },
  {
    "path": "source/Core/Src/main.cpp",
    "content": "// By Ben V. Brown - V2.0 of the TS100 firmware\n\n/*\n * Main.cpp bootstraps the device and then hands over to FreeRTOS and the threads\n */\n\n#include \"main.hpp\"\n#include \"BSP.h\"\n#include \"Settings.h\"\n#include \"cmsis_os.h\"\n#include \"power.hpp\"\nAccelType DetectedAccelerometerVersion = AccelType::Scanning;\nbool      settingsWereReset            = false;\n// FreeRTOS variables\n\nosThreadId          GUITaskHandle;\nstatic const size_t GUITaskStackSize = 1024 / 2;\nuint32_t            GUITaskBuffer[GUITaskStackSize];\nosStaticThreadDef_t GUITaskControlBlock;\n\nosThreadId          PIDTaskHandle;\nstatic const size_t PIDTaskStackSize = 1024 / 2;\nuint32_t            PIDTaskBuffer[PIDTaskStackSize];\nosStaticThreadDef_t PIDTaskControlBlock;\n\nosThreadId          MOVTaskHandle;\nstatic const size_t MOVTaskStackSize = 1024 / 2;\nuint32_t            MOVTaskBuffer[MOVTaskStackSize];\nosStaticThreadDef_t MOVTaskControlBlock;\n\nosThreadId          POWTaskHandle;\nstatic const size_t POWTaskStackSize = 512 / 2;\nuint32_t            POWTaskBuffer[POWTaskStackSize];\nosStaticThreadDef_t POWTaskControlBlock;\n\n// End FreeRTOS\n// Main sets up the hardware then hands over to the FreeRTOS kernel\nint main(void) {\n  preRToSInit();\n\n  resetWatchdog();\n  // Testing for which accelerometer is mounted\n  settingsWereReset = loadSettings(); // load the settings from flash\n\n  setTipX10Watts(0); // force tip off\n\n  resetWatchdog();\n  /* Create the thread(s) */\n\n  /* definition and creation of PIDTask - Heating control*/\n  osThreadStaticDef(PIDTask, startPIDTask, osPriorityRealtime, 0, PIDTaskStackSize, PIDTaskBuffer, &PIDTaskControlBlock);\n  PIDTaskHandle = osThreadCreate(osThread(PIDTask), NULL);\n\n  /* definition and creation of POWTask - Power management for QC / PD */\n  osThreadStaticDef(POWTask, startPOWTask, osPriorityAboveNormal, 0, POWTaskStackSize, POWTaskBuffer, &POWTaskControlBlock);\n  POWTaskHandle = osThreadCreate(osThread(POWTask), NULL);\n\n  /* definition and creation of MOVTask - Accelerometer management */\n  osThreadStaticDef(MOVTask, startMOVTask, osPriorityNormal, 0, MOVTaskStackSize, MOVTaskBuffer, &MOVTaskControlBlock);\n  MOVTaskHandle = osThreadCreate(osThread(MOVTask), NULL);\n\n  /* definition and creation of GUITask - The OLED control & update*/\n  osThreadStaticDef(GUITask, startGUITask, osPriorityBelowNormal, 0, GUITaskStackSize, GUITaskBuffer, &GUITaskControlBlock);\n  GUITaskHandle = osThreadCreate(osThread(GUITask), NULL);\n\n  resetWatchdog();\n\n  /* Start scheduler */\n  osKernelStart();\n  /* We should never get here as control is now taken by the scheduler */\n  for (;;) {\n  }\n}\n"
  },
  {
    "path": "source/Core/Src/power.cpp",
    "content": "/*\n * power.cpp\n *\n *  Created on: 28 Oct, 2018\n *     Authors: Ben V. Brown, David Hilton <- Mostly David\n */\n\n#include <BSP.h>\n#include <Settings.h>\n#include <power.hpp>\n\nstatic int32_t PWMToX10Watts(uint8_t pwm, uint8_t sample);\nconst int      fastPWMChangeoverPoint     = 128;\nconst int      fastPWMChangeoverTolerance = 16;\n\nexpMovingAverage<uint32_t, wattHistoryFilter> x10WattHistory = {0};\n\nbool shouldBeUsingFastPWMMode(const uint8_t pwmTicks) {\n  // Determine if we should use slow or fast PWM mode\n  // Crossover between modes set around the midpoint of the PWM control point\n  static bool lastPWMWasFast = true;\n  if (pwmTicks > (fastPWMChangeoverPoint + fastPWMChangeoverTolerance) && lastPWMWasFast) {\n    lastPWMWasFast = false;\n  } else if (pwmTicks < (fastPWMChangeoverPoint - fastPWMChangeoverTolerance) && !lastPWMWasFast) {\n    lastPWMWasFast = true;\n  }\n  return lastPWMWasFast;\n}\n\nvoid setTipX10Watts(int32_t mw) {\n  int32_t    outputPWMLevel   = X10WattsToPWM(mw, 1);\n  const bool shouldUseFastPWM = shouldBeUsingFastPWMMode(outputPWMLevel);\n  setTipPWM(outputPWMLevel, shouldUseFastPWM);\n  uint32_t actualMilliWatts = PWMToX10Watts(outputPWMLevel, 0);\n\n  x10WattHistory.update(actualMilliWatts);\n}\n\nuint32_t availableW10(uint8_t sample) {\n  // P = V^2 / R, v*v = v^2 * 100\n  //\t\t\t\tR = R*10\n  // P therefore is in V^2*100/R*10 = W*10.\n  uint32_t v             = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), sample); // 100 = 10v\n  uint32_t tipResistance = getTipResistanceX10();\n  if (tipResistance == 0) {\n    return 100; // say 100 watt to force scale down\n  }\n  uint32_t availableWattsX10 = (v * v) / tipResistance;\n  // However, 100% duty cycle is not possible as there is a dead time while the ADC takes a reading\n  // Therefore need to scale available milliwats by this\n\n  // avMw=(AvMw*powerPWM)/totalPWM.\n  availableWattsX10 = availableWattsX10 * powerPWM;\n  availableWattsX10 /= totalPWM;\n\n  // availableMilliWattsX10 is now an accurate representation\n  return availableWattsX10;\n}\nuint8_t X10WattsToPWM(int32_t x10Watts, uint8_t sample) {\n  // Scale input x10Watts to the pwm range available\n  if (x10Watts <= 0) {\n    // keep the battery voltage updating the filter\n    getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), sample);\n    return 0;\n  }\n\n  // Calculate desired x10Watts as a percentage of availableW10\n  uint32_t pwm;\n  pwm = (powerPWM * x10Watts) / availableW10(sample);\n  if (pwm > powerPWM) {\n    // constrain to max PWM counter\n    pwm = powerPWM;\n  }\n  return pwm;\n}\n\nstatic int32_t PWMToX10Watts(uint8_t pwm, uint8_t sample) {\n  uint32_t maxMW = availableW10(sample); // Get the milliwatts for the max pwm period\n  // Then convert pwm into percentage of powerPWM to get the percentage of the max mw\n  return (((uint32_t)pwm) * maxMW) / powerPWM;\n}\n"
  },
  {
    "path": "source/Core/Src/settingsGUI.cpp",
    "content": "/*\n * settingsGUI.cpp\n *\n *  Created on: 3Sep.,2017\n *      Author: Ben V. Brown\n */\n\n#include \"settingsGUI.hpp\"\n#include \"Buttons.hpp\"\n#include \"Font.h\"\n#include \"ScrollMessage.hpp\"\n#include \"TipThermoModel.h\"\n#include \"Translation.h\"\n#include \"cmsis_os.h\"\n#include \"configuration.h\"\n#include \"main.hpp\"\n#include \"ui_drawing.hpp\"\n\n#ifdef POW_DC\nstatic void displayInputVRange(void);\nstatic bool showInputVOptions(void);\nstatic void displayInputMinVRange(void);\n#endif /* POW_DC */\n\n#ifdef POW_QC\nstatic void displayQCInputV(void);\n#endif /* POW_QC */\n\n#ifdef POW_PD\nstatic void displayPDNegTimeout(void);\nstatic void displayUSBPDMode(void);\n#endif /* POW_PD */\n\nstatic void displaySensitivity(void);\nstatic void displayShutdownTime(void);\nstatic bool showSleepOptions(void);\n\n#ifndef NO_SLEEP_MODE\nstatic void setSleepTemp(void);\nstatic void displaySleepTemp(void);\nstatic void displaySleepTime(void);\n#endif /* *not* NO_SLEEP_MODE */\n\nstatic void setTempF(void);\nstatic void displayTempF(void);\nstatic void displayAdvancedSolderingScreens(void);\nstatic void displayAdvancedIDLEScreens(void);\nstatic void displayScrollSpeed(void);\nstatic void displayReverseButtonTempChangeEnabled(void);\nstatic void displayReverseButtonSettings(void);\nstatic void displayPowerLimit(void);\n\n#ifdef BLE_ENABLED\nstatic void displayBluetoothLE(void);\n#endif /* BLE_ENABLED */\n\n#ifndef NO_DISPLAY_ROTATE\nstatic void setDisplayRotation(void);\nstatic void displayDisplayRotation(void);\n#endif /* *not* NO_DISPLAY_ROTATE */\n\nstatic void setBoostTemp(void);\nstatic void displayBoostTemp(void);\n\n#ifdef PROFILE_SUPPORT\nstatic void setProfilePreheatTemp();\nstatic void setProfilePhase1Temp();\nstatic void setProfilePhase2Temp();\nstatic void setProfilePhase3Temp();\nstatic void setProfilePhase4Temp();\nstatic void setProfilePhase5Temp();\nstatic void displayProfilePhases(void);\nstatic void displayProfilePreheatTemp(void);\nstatic void displayProfilePreheatSpeed(void);\nstatic void displayProfilePhase1Temp(void);\nstatic void displayProfilePhase1Duration(void);\nstatic void displayProfilePhase2Temp(void);\nstatic void displayProfilePhase2Duration(void);\nstatic void displayProfilePhase3Temp(void);\nstatic void displayProfilePhase3Duration(void);\nstatic void displayProfilePhase4Temp(void);\nstatic void displayProfilePhase4Duration(void);\nstatic void displayProfilePhase5Temp(void);\nstatic void displayProfilePhase5Duration(void);\nstatic void displayProfileCooldownSpeed(void);\nstatic bool showProfileOptions(void);\nstatic bool showProfilePhase2Options(void);\nstatic bool showProfilePhase3Options(void);\nstatic bool showProfilePhase4Options(void);\nstatic bool showProfilePhase5Options(void);\n#endif /* PROFILE_SUPPORT */\n\nstatic void displayAutomaticStartMode(void);\nstatic void displayLockingMode(void);\nstatic void displayCoolingBlinkEnabled(void);\nstatic void setResetSettings(void);\nstatic void setCalibrate(void);\nstatic void displayCalibrate(void);\nstatic void setCalibrateVIN(void);\nstatic void displayTempChangeShortStep(void);\nstatic void displayTempChangeLongStep(void);\nstatic void displayPowerPulse(void);\nstatic bool displayAnimationOptions(void);\nstatic void displayAnimationSpeed(void);\nstatic void displayAnimationLoop(void);\nstatic void displayPowerPulseWait(void);\nstatic bool showPowerPulseOptions(void);\nstatic void displayPowerPulseDuration(void);\nstatic void displayBrightnessLevel(void);\nstatic void displayInvertColor(void);\nstatic void displayLogoTime(void);\n\n#ifdef HALL_SENSOR\nstatic void displayHallEffect(void);\nstatic void displayHallEffectSleepTime(void);\nstatic bool showHallEffect(void);\n#endif /* HALL_SENSOR */\n\n// Tip type selection\n#ifdef TIP_TYPE_SUPPORT\nstatic void displaySolderingTipType(void);\nstatic bool showSolderingTipType(void);\n#endif /* TIP_TYPE_SUPPORT */\n\n// Menu functions\n\n#if defined(POW_DC) || defined(POW_QC) || defined(POW_PD)\nstatic void displayPowerMenu(void);\n#endif /* POW_DC or POW_QC */\n\nstatic void displaySolderingMenu(void);\nstatic void displayPowerSavingMenu(void);\nstatic void displayUIMenu(void);\nstatic void displayAdvancedMenu(void);\n\n/*\n * Root Settings Menu\n *\n * Power Menu\n *  Power Source\n *  -Minimum Voltage\n *  QC Voltage\n *  PD Timeout\n *  USBPDMode\n *\n * Soldering\n *  Tip Type selection\n *  Boost Mode Temp\n *  Auto Start\n *  Temp Change Short Step\n *  Temp Change Long Step\n *  Locking Mode\n *  Profile Phases\n *  Profile Preheat Temperature\n *  Profile Preheat Max Temperature Change Per Second\n *  Profile Phase 1 Temperature\n *  Profile Phase 1 Duration (s)\n *  Profile Phase 2 Temperature\n *  Profile Phase 2 Duration (s)\n *  Profile Phase 3 Temperature\n *  Profile Phase 3 Duration (s)\n *  Profile Phase 4 Temperature\n *  Profile Phase 4 Duration (s)\n *  Profile Phase 5 Temperature\n *  Profile Phase 5 Duration (s)\n *  Profile Cooldown Max Temperature Change Per Second\n *\n * Power Saving\n *  Motion Sensitivity\n *  -Sleep Temp\n *  -Sleep Time\n *  -Shutdown Time\n *  Hall Sensor Sensitivity\n *  Hall Sensor Sleep Time\n *\n * UI\n *  Temperature Unit\n *  Display Orientation\n *  Cooldown Blink\n *  Scrolling Speed\n *  Swap Temp Change Buttons +/-\n *  Animation Speed\n *  -Animation Loop\n *  OLED Brightness\n *  Invert Screen\n *  Logo Timeout\n *  Detailed IDLE\n *  Detailed Soldering\n *\n * Advanced\n *  BluetoothLE\n *  Power Limit\n *  Calibrate CJC At Next Boot\n *  Calibrate Input V\n *  Power Pulse\n *  -Power Pulse Delay\n *  -Power Pulse Duration\n *  Factory Reset\n *\n */\n\nvoid noOpDisplay() {}\n/* vvv !!!DISABLE CLANG-FORMAT for menuitems initialization!!! vvv */\n\n/* clang-format off */\n\n/* A lot of suggestions by clang-format can be useful\n * but not when dealing with such menuitems declarations.\n */\n\nconst menuitem rootSettingsMenu[] {\n  /*\n   * Power Menu\n   * Soldering Menu\n   * Power Saving Menu\n   * UI Menu\n   * Advanced Menu\n   * // Language\n   * Exit\n   */\n#if defined(POW_DC) || defined(POW_QC) || defined(POW_PD)\n  /* Power */\n  {0, nullptr, displayPowerMenu, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0},\n#endif\n  /* Soldering */\n  {0, nullptr, displaySolderingMenu, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0},\n  /* Sleep Options Menu */\n  {0, nullptr, displayPowerSavingMenu, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0},\n  /* UI Menu */\n  {0, nullptr, displayUIMenu, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0},\n  /* Advanced Menu */\n  {0, nullptr, displayAdvancedMenu, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0},\n  /* Language Switch */\n  {0, settings_setLanguageSwitch, settings_displayLanguageSwitch, settings_showLanguageSwitch, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0},\n  /* vvvv end of menu marker. DO NOT REMOVE vvvv */\n  {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}\n  /* ^^^^ end of menu marker. DO NOT REMOVE ^^^^ */\n};\n\n#if defined(POW_DC) || defined(POW_QC) || defined(POW_PD)\nconst menuitem powerMenu[] = {\n  /*\n   * Power Source\n   * -Minimum Voltage\n   * QC Voltage\n   * PD Timeout\n   * USBPDMode\n   */\n#ifdef POW_DC\n  /* Voltage input */\n  {SETTINGS_DESC(SettingsItemIndex::DCInCutoff), nullptr, displayInputVRange, nullptr, SettingsOptions::MinDCVoltageCells, SettingsItemIndex::DCInCutoff, 6},\n  /* Minimum voltage input */\n  {SETTINGS_DESC(SettingsItemIndex::MinVolCell), nullptr, displayInputMinVRange, showInputVOptions, SettingsOptions::MinVoltageCells, SettingsItemIndex::MinVolCell, 5},\n#endif\n#ifdef POW_QC\n  /* Voltage input */\n  {SETTINGS_DESC(SettingsItemIndex::QCMaxVoltage), nullptr, displayQCInputV, nullptr, SettingsOptions::QCIdealVoltage, SettingsItemIndex::QCMaxVoltage, 4},\n#endif\n#ifdef POW_PD\n  /* PD timeout setup */\n  {SETTINGS_DESC(SettingsItemIndex::PDNegTimeout), nullptr, displayPDNegTimeout, nullptr, SettingsOptions::PDNegTimeout, SettingsItemIndex::PDNegTimeout, 6},\n  /* Toggle PPS & EPR */\n  {SETTINGS_DESC(SettingsItemIndex::USBPDMode), nullptr, displayUSBPDMode, nullptr, SettingsOptions::USBPDMode, SettingsItemIndex::USBPDMode, 4},\n#endif\n  /* vvvv end of menu marker. DO NOT REMOVE vvvv */\n  {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}\n  /* ^^^^ end of menu marker. DO NOT REMOVE ^^^^ */\n};\n#endif /* POW_DC or POW_QC or POW_PD */\n\nconst menuitem solderingMenu[] = {\n  /*\n   *  Boost Mode Temp\n   *  Auto Start\n   *  Temp Change Short Step\n   *  Temp Change Long Step\n   *  Locking Mode\n   *  Tip Type\n   *  Profile Phases\n   *  Profile Preheat Temperature\n   *  Profile Preheat Max Temperature Change Per Second\n   *  Profile Phase 1 Temperature\n   *  Profile Phase 1 Duration (s)\n   *  Profile Phase 2 Temperature\n   *  Profile Phase 2 Duration (s)\n   *  Profile Phase 3 Temperature\n   *  Profile Phase 3 Duration (s)\n   *  Profile Phase 4 Temperature\n   *  Profile Phase 4 Duration (s)\n   *  Profile Phase 5 Temperature\n   *  Profile Phase 5 Duration (s)\n   *  Profile Cooldown Max Temperature Change Per Second\n   */\n  /* Boost Temp */\n  {SETTINGS_DESC(SettingsItemIndex::BoostTemperature), setBoostTemp, displayBoostTemp, nullptr, SettingsOptions::BoostTemp, SettingsItemIndex::BoostTemperature, 5},\n  /* Auto start */\n  {SETTINGS_DESC(SettingsItemIndex::AutoStart), nullptr, displayAutomaticStartMode, nullptr, SettingsOptions::AutoStartMode, SettingsItemIndex::AutoStart, 7},\n  /* Temp change short step */\n  {SETTINGS_DESC(SettingsItemIndex::TempChangeShortStep), nullptr, displayTempChangeShortStep, nullptr, SettingsOptions::TempChangeShortStep, SettingsItemIndex::TempChangeShortStep, 6},\n  /* Temp change long step */\n  {SETTINGS_DESC(SettingsItemIndex::TempChangeLongStep), nullptr, displayTempChangeLongStep, nullptr, SettingsOptions::TempChangeLongStep, SettingsItemIndex::TempChangeLongStep, 6},\n  /* Locking Mode */\n  {SETTINGS_DESC(SettingsItemIndex::LockingMode), nullptr, displayLockingMode, nullptr, SettingsOptions::LockingMode, SettingsItemIndex::LockingMode, 7},\n#ifdef TIP_TYPE_SUPPORT\n  /* Tip Type */\n  {SETTINGS_DESC(SettingsItemIndex::SolderingTipType), nullptr, displaySolderingTipType, showSolderingTipType, SettingsOptions::SolderingTipType, SettingsItemIndex::SolderingTipType, 5},\n#endif /* TIP_TYPE_SUPPORT */\n#ifdef PROFILE_SUPPORT\n  /* Profile Phases */\n  {SETTINGS_DESC(SettingsItemIndex::ProfilePhases), nullptr, displayProfilePhases, nullptr, SettingsOptions::ProfilePhases, SettingsItemIndex::ProfilePhases, 7},\n  /* Profile Preheat Temp */\n  {SETTINGS_DESC(SettingsItemIndex::ProfilePreheatTemp), setProfilePreheatTemp, displayProfilePreheatTemp, showProfileOptions, SettingsOptions::ProfilePreheatTemp, SettingsItemIndex::ProfilePreheatTemp, 5},\n  /* Profile Preheat Speed */\n  {SETTINGS_DESC(SettingsItemIndex::ProfilePreheatSpeed), nullptr, displayProfilePreheatSpeed, showProfileOptions, SettingsOptions::ProfilePreheatSpeed, SettingsItemIndex::ProfilePreheatSpeed, 5},\n  /* Phase 1 Temp */\n  {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase1Temp, displayProfilePhase1Temp, showProfileOptions, SettingsOptions::ProfilePhase1Temp, SettingsItemIndex::ProfilePhase1Temp, 5},\n  /* Phase 1 Duration */\n  {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase1Duration, showProfileOptions, SettingsOptions::ProfilePhase1Duration, SettingsItemIndex::ProfilePhase1Duration, 5},\n  /* Phase 2 Temp */\n  {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase2Temp, displayProfilePhase2Temp, showProfilePhase2Options, SettingsOptions::ProfilePhase1Temp, SettingsItemIndex::ProfilePhase2Temp, 5},\n  /* Phase 2 Duration */\n  {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase2Duration, showProfilePhase2Options, SettingsOptions::ProfilePhase2Duration, SettingsItemIndex::ProfilePhase2Duration, 5},\n  /* Phase 3 Temp */\n  {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase3Temp, displayProfilePhase3Temp, showProfilePhase3Options, SettingsOptions::ProfilePhase1Temp, SettingsItemIndex::ProfilePhase3Temp, 5},\n  /* Phase 3 Duration */\n  {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase3Duration, showProfilePhase3Options, SettingsOptions::ProfilePhase3Duration, SettingsItemIndex::ProfilePhase3Duration, 5},\n  /* Phase 4 Temp */\n  {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase4Temp, displayProfilePhase4Temp, showProfilePhase4Options, SettingsOptions::ProfilePhase1Temp, SettingsItemIndex::ProfilePhase4Temp, 5},\n  /* Phase 4 Duration */\n  {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase4Duration, showProfilePhase4Options, SettingsOptions::ProfilePhase4Duration, SettingsItemIndex::ProfilePhase4Duration, 5},\n  /* Phase 5 Temp */\n  {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase5Temp, displayProfilePhase5Temp, showProfilePhase5Options, SettingsOptions::ProfilePhase1Temp, SettingsItemIndex::ProfilePhase5Temp, 5},\n  /* Phase 5 Duration */\n  {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase5Duration, showProfilePhase5Options, SettingsOptions::ProfilePhase5Duration, SettingsItemIndex::ProfilePhase5Duration, 5},\n  /* Profile Cooldown Speed */\n  {SETTINGS_DESC(SettingsItemIndex::ProfileCooldownSpeed), nullptr, displayProfileCooldownSpeed, showProfileOptions, SettingsOptions::ProfileCooldownSpeed, SettingsItemIndex::ProfileCooldownSpeed, 5},\n#endif /* PROFILE_SUPPORT */\n  /* vvvv end of menu marker. DO NOT REMOVE vvvv */\n  {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}\n  /* ^^^^ end of menu marker. DO NOT REMOVE ^^^^ */\n};\n\nconst menuitem PowerSavingMenu[] = {\n  /*\n   *  Motion Sensitivity\n   *  -Sleep Temp\n   *  -Sleep Time\n   *  -Shutdown Time\n   *  Hall Sensor Sensitivity\n   */\n  /* Motion Sensitivity */\n  {SETTINGS_DESC(SettingsItemIndex::MotionSensitivity), nullptr, displaySensitivity, nullptr, SettingsOptions::Sensitivity, SettingsItemIndex::MotionSensitivity, 7},\n#ifndef NO_SLEEP_MODE\n  /* Sleep Temp */\n  {SETTINGS_DESC(SettingsItemIndex::SleepTemperature), setSleepTemp, displaySleepTemp, showSleepOptions, SettingsOptions::SleepTemp, SettingsItemIndex::SleepTemperature, 5},\n  /* Sleep Time */\n  {SETTINGS_DESC(SettingsItemIndex::SleepTimeout), nullptr, displaySleepTime, showSleepOptions, SettingsOptions::SleepTime, SettingsItemIndex::SleepTimeout, 5},\n#endif /* *not* NO_SLEEP_MODE */\n  /* Shutdown Time */\n  {SETTINGS_DESC(SettingsItemIndex::ShutdownTimeout), nullptr, displayShutdownTime, showSleepOptions, SettingsOptions::ShutdownTime, SettingsItemIndex::ShutdownTimeout, 5},\n#ifdef HALL_SENSOR\n  /* Hall Effect Sensitivity */\n  {SETTINGS_DESC(SettingsItemIndex::HallEffSensitivity), nullptr, displayHallEffect, showHallEffect, SettingsOptions::HallEffectSensitivity, SettingsItemIndex::HallEffSensitivity, 7},\n  /* Hall Effect Sleep Time */\n  {SETTINGS_DESC(SettingsItemIndex::HallEffSleepTimeout), nullptr, displayHallEffectSleepTime, showHallEffect, SettingsOptions::HallEffectSleepTime, SettingsItemIndex::HallEffSleepTimeout, 5},\n#endif /* HALL_SENSOR */\n  /* vvvv end of menu marker. DO NOT REMOVE vvvv */\n  {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}\n  /* ^^^^ end of menu marker. DO NOT REMOVE ^^^^ */\n};\n\nconst menuitem UIMenu[] = {\n  /*\n   *  Temperature Unit\n   *  Display Orientation\n   *  Cooldown Blink\n   *  Scrolling Speed\n   *  Swap Temp Change Buttons +/-\n   *  Animation Speed\n   *  -Animation Loop\n   *  OLED Brightness\n   *  Invert Screen\n   *  Logo Timeout\n   *  Detailed IDLE\n   *  Detailed Soldering\n   */\n  /* Temperature units, this has to be the first element in the array to work with the logic in enterUIMenu() */\n  {SETTINGS_DESC(SettingsItemIndex::TemperatureUnit), setTempF, displayTempF, nullptr, SettingsOptions::TemperatureInF, SettingsItemIndex::TemperatureUnit, 7},\n#ifndef NO_DISPLAY_ROTATE\n  /* Display Rotation */\n  {SETTINGS_DESC(SettingsItemIndex::DisplayRotation), setDisplayRotation, displayDisplayRotation, nullptr, SettingsOptions::OrientationMode, SettingsItemIndex::DisplayRotation, 7},\n#endif /* *not* NO_DISPLAY_ROTATE */\n  /* Cooling blink warning */\n  {SETTINGS_DESC(SettingsItemIndex::CooldownBlink), nullptr, displayCoolingBlinkEnabled, nullptr, SettingsOptions::CoolingTempBlink, SettingsItemIndex::CooldownBlink, 7},\n  /* Scroll Speed for descriptions */\n  {SETTINGS_DESC(SettingsItemIndex::ScrollingSpeed), nullptr, displayScrollSpeed, nullptr, SettingsOptions::DescriptionScrollSpeed, SettingsItemIndex::ScrollingSpeed, 7},\n  /* Reverse Temp change buttons +/- */\n  {SETTINGS_DESC(SettingsItemIndex::ReverseButtonTempChange), nullptr, displayReverseButtonTempChangeEnabled, nullptr, SettingsOptions::ReverseButtonTempChangeEnabled, SettingsItemIndex::ReverseButtonTempChange, 7},\n  /* Reverse Settings menu buttons A/B */\n  {SETTINGS_DESC(SettingsItemIndex::ReverseButtonSettings), nullptr, displayReverseButtonSettings, nullptr, SettingsOptions::ReverseButtonSettings, SettingsItemIndex::ReverseButtonSettings, 7},\n  /* Animation Speed adjustment */\n  {SETTINGS_DESC(SettingsItemIndex::AnimSpeed), nullptr, displayAnimationSpeed, nullptr, SettingsOptions::AnimationSpeed, SettingsItemIndex::AnimSpeed, 7},\n  /* Animation Loop switch */\n  {SETTINGS_DESC(SettingsItemIndex::AnimLoop), nullptr, displayAnimationLoop, displayAnimationOptions, SettingsOptions::AnimationLoop, SettingsItemIndex::AnimLoop, 7},\n  /* Brightness Level */\n  {SETTINGS_DESC(SettingsItemIndex::Brightness), nullptr, displayBrightnessLevel, nullptr, SettingsOptions::OLEDBrightness, SettingsItemIndex::Brightness, 7},\n  /* Invert screen colour */\n  {SETTINGS_DESC(SettingsItemIndex::ColourInversion), nullptr, displayInvertColor, nullptr, SettingsOptions::OLEDInversion, SettingsItemIndex::ColourInversion, 7},\n  /* Set logo duration */\n  {SETTINGS_DESC(SettingsItemIndex::LOGOTime), nullptr, displayLogoTime, nullptr, SettingsOptions::LOGOTime, SettingsItemIndex::LOGOTime, 6},\n  /* Advanced idle screen */\n  {SETTINGS_DESC(SettingsItemIndex::AdvancedIdle), nullptr, displayAdvancedIDLEScreens, nullptr, SettingsOptions::DetailedIDLE, SettingsItemIndex::AdvancedIdle, 7},\n  /* Advanced soldering screen */\n  {SETTINGS_DESC(SettingsItemIndex::AdvancedSoldering), nullptr, displayAdvancedSolderingScreens, nullptr, SettingsOptions::DetailedSoldering, SettingsItemIndex::AdvancedSoldering, 7},\n  /* vvvv end of menu marker. DO NOT REMOVE vvvv */\n  {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}\n  /* ^^^^ end of menu marker. DO NOT REMOVE ^^^^ */\n};\n\nconst menuitem advancedMenu[] = {\n  /*\n   *  BluetoothLE\n   *  Power Limit\n   *  Calibrate CJC At Next Boot\n   *  Calibrate Input V\n   *  Power Pulse\n   *  -Power Pulse Delay\n   *  -Power Pulse Duration\n   *  Factory Reset\n   */\n#ifdef BLE_ENABLED\n  /* Toggle BLE */\n  {SETTINGS_DESC(SettingsItemIndex::BluetoothLE), nullptr, displayBluetoothLE, nullptr, SettingsOptions::BluetoothLE, SettingsItemIndex::BluetoothLE, 7},\n#endif /* BLE_ENABLED */\n  /* Power limit */\n  {SETTINGS_DESC(SettingsItemIndex::PowerLimit), nullptr, displayPowerLimit, nullptr, SettingsOptions::PowerLimit, SettingsItemIndex::PowerLimit, 4},\n  /* Calibrate Cold Junktion Compensation at next boot */\n  {SETTINGS_DESC(SettingsItemIndex::CalibrateCJC), setCalibrate, displayCalibrate, nullptr, SettingsOptions::CalibrateCJC, SettingsItemIndex::CalibrateCJC, 7},\n  /* Voltage input cal */\n  {SETTINGS_DESC(SettingsItemIndex::VoltageCalibration), setCalibrateVIN, noOpDisplay, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::VoltageCalibration, 5},\n  /* Power Pulse adjustment */\n  {SETTINGS_DESC(SettingsItemIndex::PowerPulsePower), nullptr, displayPowerPulse, nullptr, SettingsOptions::KeepAwakePulse, SettingsItemIndex::PowerPulsePower, 5},\n  /* Power Pulse Wait adjustment */\n  {SETTINGS_DESC(SettingsItemIndex::PowerPulseWait), nullptr, displayPowerPulseWait, showPowerPulseOptions, SettingsOptions::KeepAwakePulseWait, SettingsItemIndex::PowerPulseWait, 7},\n  /* Power Pulse Duration adjustment */\n  {SETTINGS_DESC(SettingsItemIndex::PowerPulseDuration), nullptr, displayPowerPulseDuration, showPowerPulseOptions, SettingsOptions::KeepAwakePulseDuration, SettingsItemIndex::PowerPulseDuration, 7},\n  /* Resets settings */\n  {SETTINGS_DESC(SettingsItemIndex::SettingsReset), setResetSettings, noOpDisplay, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::SettingsReset, 7},\n  /* vvvv end of menu marker. DO NOT REMOVE vvvv */\n  {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}\n  /* ^^^^ end of menu marker. DO NOT REMOVE ^^^^ */\n};\n\n/* clang-format on */\n\nconst menuitem *subSettingsMenus[]{\n#if defined(POW_DC) || defined(POW_QC) || defined(POW_PD)\n    powerMenu,\n#endif\n    solderingMenu, PowerSavingMenu, UIMenu, advancedMenu,\n};\n/* ^^^ !!!ENABLE CLANG-FORMAT back!!! ^^^ */\n\n/**\n * Prints two small lines (or one line for CJK) of short description for\n * setting items and prepares cursor after it.\n * @param settingsItemIndex Index of the setting item.\n * @param cursorCharPosition Custom cursor char position to set after printing\n * description.\n */\nstatic void printShortDescription(SettingsItemIndex settingsItemIndex, uint16_t cursorCharPosition) {\n  // print short description (default single line, explicit double line)\n  uint8_t shortDescIndex = static_cast<uint8_t>(settingsItemIndex);\n  OLED::printWholeScreen(translatedString(Tr->SettingsShortNames[shortDescIndex]));\n\n  // prepare cursor for value\n  // make room for scroll indicator\n  OLED::setCursor(cursorCharPosition * FONT_12_WIDTH - 2, 0);\n}\n\nstatic int userConfirmation(const char *message) {\n  TickType_t tickStart = xTaskGetTickCount();\n  for (;;) {\n    drawScrollingText(message, xTaskGetTickCount() - tickStart);\n\n    ButtonState buttons = getButtonState();\n    switch (buttons) {\n    case BUTTON_F_SHORT:\n      // User confirmed\n      return 1;\n\n    case BUTTON_NONE:\n      break;\n    default:\n    case BUTTON_BOTH:\n    case BUTTON_B_SHORT:\n    case BUTTON_F_LONG:\n    case BUTTON_B_LONG:\n      return 0;\n    }\n\n    OLED::refresh();\n    osDelay(40);\n  }\n  return 0;\n}\n\n#ifdef POW_DC\n\nstatic void displayInputVRange(void) {\n  if (getSettingValue(SettingsOptions::MinDCVoltageCells)) {\n    OLED::printNumber(2 + getSettingValue(SettingsOptions::MinDCVoltageCells), 1, FontStyle::LARGE);\n    OLED::print(LargeSymbolCellCount, FontStyle::LARGE);\n  } else {\n    OLED::print(LargeSymbolDC, FontStyle::LARGE);\n  }\n}\n\nstatic bool showInputVOptions(void) { return getSettingValue(SettingsOptions::MinDCVoltageCells) > 0; }\n\nstatic void displayInputMinVRange(void) {\n  OLED::printNumber(getSettingValue(SettingsOptions::MinVoltageCells) / 10, 1, FontStyle::LARGE);\n  OLED::print(LargeSymbolDot, FontStyle::LARGE);\n  OLED::printNumber(getSettingValue(SettingsOptions::MinVoltageCells) % 10, 1, FontStyle::LARGE);\n}\n\n#endif /* POW_DC */\n\n#ifdef POW_QC\n\nstatic void displayQCInputV(void) {\n  // These are only used in QC modes\n  // Allows setting the voltage negotiated for QC\n  auto voltage = getSettingValue(SettingsOptions::QCIdealVoltage);\n  OLED::printNumber(voltage / 10, 2, FontStyle::LARGE);\n  OLED::print(LargeSymbolDot, FontStyle::LARGE);\n  OLED::printNumber(voltage % 10, 1, FontStyle::LARGE);\n}\n\n#endif /* POW_QC */\n\n#ifdef POW_PD /* POW_PD */\n\nstatic void displayPDNegTimeout(void) {\n  auto value = getSettingValue(SettingsOptions::PDNegTimeout);\n  value ? OLED::printNumber(value, 2, FontStyle::LARGE) : OLED::drawUnavailableIcon();\n}\n\nstatic void displayUSBPDMode(void) {\n  /*\n   * Supported PD modes:\n   *  DEFAULT,    1 = PPS + EPR + more power request through increasing resistance by 0.5 Ohm to compensate power loss over cable/PCB/etc.\n   *  SAFE,       2 = PPS + EPR, without requesting more power\n   *  NO_DYNAMIC, 0 = PPS + EPR disabled, fixed PDO only\n   */\n\n  switch (getSettingValue(SettingsOptions::USBPDMode)) {\n  case usbpdMode_t::DEFAULT:\n    OLED::print(translatedString(Tr->USBPDModeDefault), FontStyle::SMALL, 255, OLED::getCursorX());\n    break;\n  case usbpdMode_t::SAFE:\n    OLED::print(translatedString(Tr->USBPDModeSafe), FontStyle::SMALL, 255, OLED::getCursorX());\n    break;\n  case usbpdMode_t::NO_DYNAMIC:\n  default:\n    OLED::print(translatedString(Tr->USBPDModeNoDynamic), FontStyle::SMALL, 255, OLED::getCursorX());\n    break;\n  }\n}\n\n#endif /* POW_PD */\n\nstatic void setBoostTemp(void) {\n  uint16_t value = getSettingValue(SettingsOptions::BoostTemp);\n  if (getSettingValue(SettingsOptions::TemperatureInF)) {\n    if (value == 0) {\n      value = MIN_BOOST_TEMP_F; // loop back at 480\n    } else {\n      value += 20; // Go up 20F at a time\n    }\n\n    if (value >= MAX_TEMP_F) {\n      value = 0; // jump to off\n    }\n  } else {\n    if (value == 0) {\n      value = MIN_BOOST_TEMP_C; // loop back at 250\n    } else {\n      value += 10; // Go up 10C at a time\n    }\n    if (value > MAX_TEMP_C) {\n      value = 0; // Go to off state\n    }\n  }\n  setSettingValue(SettingsOptions::BoostTemp, value);\n}\n\nstatic void displayBoostTemp(void) {\n  if (getSettingValue(SettingsOptions::BoostTemp)) {\n    OLED::printNumber(getSettingValue(SettingsOptions::BoostTemp), 3, FontStyle::LARGE);\n  } else {\n    OLED::drawUnavailableIcon();\n  }\n}\n\nstatic void displayAutomaticStartMode(void) {\n  switch (getSettingValue(SettingsOptions::AutoStartMode)) {\n  case autoStartMode_t::NO:\n    OLED::drawUnavailableIcon();\n    break;\n  case autoStartMode_t::SOLDER:\n    OLED::print(translatedString(Tr->SettingStartSolderingChar), FontStyle::LARGE);\n    break;\n  case autoStartMode_t::SLEEP:\n    OLED::print(translatedString(Tr->SettingStartSleepChar), FontStyle::LARGE);\n    break;\n  case autoStartMode_t::ZERO:\n    OLED::print(translatedString(Tr->SettingStartSleepOffChar), FontStyle::LARGE);\n    break;\n  default:\n    OLED::drawUnavailableIcon();\n    break;\n  }\n}\n\nstatic void displayTempChangeShortStep(void) { OLED::printNumber(getSettingValue(SettingsOptions::TempChangeShortStep), 2, FontStyle::LARGE); }\n\nstatic void displayTempChangeLongStep(void) { OLED::printNumber(getSettingValue(SettingsOptions::TempChangeLongStep), 2, FontStyle::LARGE); }\n\nstatic void displayLockingMode(void) {\n  switch (getSettingValue(SettingsOptions::LockingMode)) {\n  case lockingMode_t::DISABLED:\n    OLED::drawUnavailableIcon();\n    break;\n  case lockingMode_t::BOOST:\n    OLED::print(translatedString(Tr->SettingLockBoostChar), FontStyle::LARGE);\n    break;\n  case lockingMode_t::FULL:\n    OLED::print(translatedString(Tr->SettingLockFullChar), FontStyle::LARGE);\n    break;\n  default:\n    OLED::drawUnavailableIcon();\n    break;\n  }\n}\n\n#ifdef PROFILE_SUPPORT\n\nstatic void displayProfilePhases(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhases), 1, FontStyle::LARGE); }\n\nstatic void setProfileTemp(const enum SettingsOptions option) {\n  // If in C, 5 deg, if in F 10 deg\n  uint16_t temp = getSettingValue(option);\n  if (getSettingValue(SettingsOptions::TemperatureInF)) {\n    temp += 10;\n    if (temp > MAX_TEMP_F) {\n      temp = MIN_TEMP_F;\n    }\n  } else {\n    temp += 5;\n    if (temp > MAX_TEMP_C) {\n      temp = MIN_TEMP_C;\n    }\n  }\n  setSettingValue(option, temp);\n}\n\nstatic void setProfilePreheatTemp(void) { return setProfileTemp(SettingsOptions::ProfilePreheatTemp); }\nstatic void setProfilePhase1Temp(void) { return setProfileTemp(SettingsOptions::ProfilePhase1Temp); }\nstatic void setProfilePhase2Temp(void) { return setProfileTemp(SettingsOptions::ProfilePhase2Temp); }\nstatic void setProfilePhase3Temp(void) { return setProfileTemp(SettingsOptions::ProfilePhase3Temp); }\nstatic void setProfilePhase4Temp(void) { return setProfileTemp(SettingsOptions::ProfilePhase4Temp); }\nstatic void setProfilePhase5Temp(void) { return setProfileTemp(SettingsOptions::ProfilePhase5Temp); }\n\nstatic void displayProfilePreheatTemp(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePreheatTemp), 3, FontStyle::LARGE); }\nstatic void displayProfilePhase1Temp(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase1Temp), 3, FontStyle::LARGE); }\nstatic void displayProfilePhase2Temp(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase2Temp), 3, FontStyle::LARGE); }\nstatic void displayProfilePhase3Temp(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase3Temp), 3, FontStyle::LARGE); }\nstatic void displayProfilePhase4Temp(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase4Temp), 3, FontStyle::LARGE); }\nstatic void displayProfilePhase5Temp(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase5Temp), 3, FontStyle::LARGE); }\nstatic void displayProfilePreheatSpeed(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePreheatSpeed), 2, FontStyle::LARGE); }\nstatic void displayProfileCooldownSpeed(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfileCooldownSpeed), 2, FontStyle::LARGE); }\nstatic void displayProfilePhase1Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase1Duration), 3, FontStyle::LARGE); }\nstatic void displayProfilePhase2Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase2Duration), 3, FontStyle::LARGE); }\nstatic void displayProfilePhase3Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase3Duration), 3, FontStyle::LARGE); }\nstatic void displayProfilePhase4Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase4Duration), 3, FontStyle::LARGE); }\nstatic void displayProfilePhase5Duration(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhase5Duration), 3, FontStyle::LARGE); }\n\nstatic bool showProfileOptions(void) { return getSettingValue(SettingsOptions::ProfilePhases); }\nstatic bool showProfilePhase2Options(void) { return getSettingValue(SettingsOptions::ProfilePhases) >= 2; }\nstatic bool showProfilePhase3Options(void) { return getSettingValue(SettingsOptions::ProfilePhases) >= 3; }\nstatic bool showProfilePhase4Options(void) { return getSettingValue(SettingsOptions::ProfilePhases) >= 4; }\nstatic bool showProfilePhase5Options(void) { return getSettingValue(SettingsOptions::ProfilePhases) >= 5; }\n\n#endif /* PROFILE_SUPPORT */\n\nstatic void displaySensitivity(void) {\n  if (getSettingValue(SettingsOptions::Sensitivity)) {\n    OLED::printNumber(getSettingValue(SettingsOptions::Sensitivity), 1, FontStyle::LARGE, false);\n  } else {\n    OLED::drawUnavailableIcon();\n  }\n}\nstatic bool showSleepOptions(void) { return getSettingValue(SettingsOptions::Sensitivity) > 0; }\n\n#ifndef NO_SLEEP_MODE\n\nstatic void setSleepTemp(void) {\n  // If in C, 10 deg, if in F 20 deg\n  uint16_t temp = getSettingValue(SettingsOptions::SleepTemp);\n  if (getSettingValue(SettingsOptions::TemperatureInF)) {\n    temp += 20;\n    if (temp > 580) {\n      temp = 60;\n    }\n  } else {\n    temp += 10;\n    if (temp > 300) {\n      temp = 10;\n    }\n  }\n  setSettingValue(SettingsOptions::SleepTemp, temp);\n}\n\nstatic void displaySleepTemp(void) { OLED::printNumber(getSettingValue(SettingsOptions::SleepTemp), 3, FontStyle::LARGE); }\n\nstatic void displaySleepTime(void) {\n  if (getSettingValue(SettingsOptions::SleepTime) == 0) {\n    OLED::drawUnavailableIcon();\n  } else if (getSettingValue(SettingsOptions::SleepTime) < 6) {\n    OLED::printNumber(getSettingValue(SettingsOptions::SleepTime) * 10, 2, FontStyle::LARGE);\n    OLED::print(LargeSymbolSeconds, FontStyle::LARGE);\n  } else {\n    OLED::printNumber(getSettingValue(SettingsOptions::SleepTime) - 5, 2, FontStyle::LARGE);\n    OLED::print(LargeSymbolMinutes, FontStyle::LARGE);\n  }\n}\n\n#endif /* *not* NO_SLEEP_MODE */\n\nstatic void displayShutdownTime(void) {\n  if (getSettingValue(SettingsOptions::ShutdownTime) == 0) {\n    OLED::drawUnavailableIcon();\n  } else {\n    OLED::printNumber(getSettingValue(SettingsOptions::ShutdownTime), 2, FontStyle::LARGE);\n    OLED::print(LargeSymbolMinutes, FontStyle::LARGE);\n  }\n}\n\n#ifdef HALL_SENSOR\nstatic void displayHallEffect(void) {\n  if (getSettingValue(SettingsOptions::HallEffectSensitivity)) {\n    OLED::printNumber(getSettingValue(SettingsOptions::HallEffectSensitivity), 1, FontStyle::LARGE, false);\n  } else {\n    OLED::drawUnavailableIcon();\n  }\n}\nstatic bool showHallEffect(void) { return getHallSensorFitted(); }\nstatic void displayHallEffectSleepTime(void) {\n  if (getSettingValue(SettingsOptions::HallEffectSleepTime)) {\n    OLED::printNumber(getSettingValue(SettingsOptions::HallEffectSleepTime) * 5, 2, FontStyle::LARGE, false);\n  } else {\n    // When sleep time is set to zero, we sleep for 1 second anyways. This is the default.\n    OLED::printNumber(1, 2, FontStyle::LARGE, false);\n  }\n  OLED::print(LargeSymbolSeconds, FontStyle::LARGE);\n}\n#endif /* HALL_SENSOR */\n\n#ifdef TIP_TYPE_SUPPORT\nstatic void displaySolderingTipType(void) {\n  // TODO wrapping X value\n  OLED::print(lookupTipName(), FontStyle::SMALL, 255, OLED::getCursorX());\n}\n// If there is no detection, and no options, max is 0\nstatic bool showSolderingTipType(void) { return tipType_t::TIP_TYPE_MAX != 0; }\n#endif /* TIP_TYPE_SUPPORT */\n\nstatic void setTempF(const enum SettingsOptions option) {\n  uint16_t Temp = getSettingValue(option);\n  if (getSettingValue(SettingsOptions::TemperatureInF)) {\n    // Change temp to the F equiv\n    // C to F == F= ( (C*9) +160)/5\n    Temp = ((Temp * 9) + 160) / 5;\n  } else {\n    // Change temp to the C equiv\n    // F->C == C = ((F-32)*5)/9\n    Temp = ((Temp - 32) * 5) / 9;\n  }\n  // Rescale to be multiples of 10\n  Temp = Temp / 10;\n  Temp *= 10;\n  setSettingValue(option, Temp);\n}\n\nstatic void setTempF(void) {\n  nextSettingValue(SettingsOptions::TemperatureInF);\n  setTempF(SettingsOptions::BoostTemp);\n  setTempF(SettingsOptions::SolderingTemp);\n#ifndef NO_SLEEP_MODE\n  setTempF(SettingsOptions::SleepTemp);\n#endif /* *not* NO_SLEEP_MODE */\n#ifdef PROFILE_SUPPORT\n  setTempF(SettingsOptions::ProfilePreheatTemp);\n  setTempF(SettingsOptions::ProfilePhase1Temp);\n  setTempF(SettingsOptions::ProfilePhase2Temp);\n  setTempF(SettingsOptions::ProfilePhase3Temp);\n  setTempF(SettingsOptions::ProfilePhase4Temp);\n  setTempF(SettingsOptions::ProfilePhase5Temp);\n#endif /* PROFILE_SUPPORT */\n}\n\nstatic void displayTempF(void) { OLED::printSymbolDeg(FontStyle::LARGE); }\n\n#ifndef NO_DISPLAY_ROTATE\n\nstatic void setDisplayRotation(void) {\n  nextSettingValue(SettingsOptions::OrientationMode);\n  switch (getSettingValue(SettingsOptions::OrientationMode)) {\n  case orientationMode_t::RIGHT:\n    OLED::setRotation(false);\n    break;\n  case orientationMode_t::LEFT:\n    OLED::setRotation(true);\n    break;\n  case orientationMode_t::AUTO:\n    // do nothing on auto\n    break;\n  default:\n    break;\n  }\n}\n\nstatic void displayDisplayRotation(void) {\n  switch (getSettingValue(SettingsOptions::OrientationMode)) {\n  case orientationMode_t::RIGHT:\n    OLED::print(translatedString(Tr->SettingRightChar), FontStyle::LARGE);\n    break;\n  case orientationMode_t::LEFT:\n    OLED::print(translatedString(Tr->SettingLeftChar), FontStyle::LARGE);\n    break;\n  case orientationMode_t::AUTO:\n    OLED::print(translatedString(Tr->SettingAutoChar), FontStyle::LARGE);\n    break;\n  default:\n    OLED::print(translatedString(Tr->SettingRightChar), FontStyle::LARGE);\n    break;\n  }\n}\n\n#endif /* NO_DISPLAY_ROTATE */\n\nstatic void displayCoolingBlinkEnabled(void) { OLED::drawCheckbox(getSettingValue(SettingsOptions::CoolingTempBlink)); }\n\nstatic void displayScrollSpeed(void) { OLED::print(translatedString((getSettingValue(SettingsOptions::DescriptionScrollSpeed)) ? Tr->SettingFastChar : Tr->SettingSlowChar), FontStyle::LARGE); }\n\nstatic void displayReverseButtonTempChangeEnabled(void) { OLED::drawCheckbox(getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled)); }\n\nstatic void displayReverseButtonSettings(void) { OLED::drawCheckbox(getSettingValue(SettingsOptions::ReverseButtonSettings)); }\n\nstatic void displayAnimationSpeed(void) {\n  switch (getSettingValue(SettingsOptions::AnimationSpeed)) {\n  case settingOffSpeed_t::SLOW:\n    OLED::print(translatedString(Tr->SettingSlowChar), FontStyle::LARGE);\n    break;\n  case settingOffSpeed_t::MEDIUM:\n    OLED::print(translatedString(Tr->SettingMediumChar), FontStyle::LARGE);\n    break;\n  case settingOffSpeed_t::FAST:\n    OLED::print(translatedString(Tr->SettingFastChar), FontStyle::LARGE);\n    break;\n  default:\n    OLED::drawUnavailableIcon();\n    break;\n  }\n}\n\nstatic bool displayAnimationOptions(void) { return getSettingValue(SettingsOptions::AnimationSpeed) > 0; }\nstatic void displayAnimationLoop(void) { OLED::drawCheckbox(getSettingValue(SettingsOptions::AnimationLoop)); }\n\nstatic void displayBrightnessLevel(void) {\n  OLED::printNumber((getSettingValue(SettingsOptions::OLEDBrightness) / BRIGHTNESS_STEP + 1), 1, FontStyle::LARGE);\n  // While not optimal to apply this here, it is _very_ convenient\n  OLED::setBrightness(getSettingValue(SettingsOptions::OLEDBrightness));\n}\n\nstatic void displayInvertColor(void) {\n  OLED::drawCheckbox(getSettingValue(SettingsOptions::OLEDInversion));\n  // While not optimal to apply this here, it is _very_ convenient\n  OLED::setInverseDisplay(getSettingValue(SettingsOptions::OLEDInversion));\n}\n\nstatic void displayLogoTime(void) {\n  switch (getSettingValue(SettingsOptions::LOGOTime)) {\n  case logoMode_t::SKIP:\n    OLED::drawUnavailableIcon();\n    break;\n  case logoMode_t::ONETIME:\n    OLED::drawArea(OLED_WIDTH - OLED_HEIGHT - 2, 0, OLED_HEIGHT, OLED_HEIGHT, RepeatOnce);\n    break;\n  case logoMode_t::INFINITY:\n    OLED::drawArea(OLED_WIDTH - OLED_HEIGHT - 2, 0, OLED_HEIGHT, OLED_HEIGHT, RepeatInf);\n    break;\n  default:\n    OLED::printNumber(getSettingValue(SettingsOptions::LOGOTime), 1, FontStyle::LARGE);\n    OLED::print(LargeSymbolSeconds, FontStyle::LARGE);\n    break;\n  }\n}\n\nstatic void displayAdvancedIDLEScreens(void) { OLED::drawCheckbox(getSettingValue(SettingsOptions::DetailedIDLE)); }\n\nstatic void displayAdvancedSolderingScreens(void) { OLED::drawCheckbox(getSettingValue(SettingsOptions::DetailedSoldering)); }\n\n#ifdef BLE_ENABLED\nstatic void displayBluetoothLE(void) { OLED::drawCheckbox(getSettingValue(SettingsOptions::BluetoothLE)); }\n#endif /* BLE_ENABLED */\n\nstatic void displayPowerLimit(void) {\n  if (getSettingValue(SettingsOptions::PowerLimit) == 0) {\n    OLED::drawUnavailableIcon();\n  } else {\n    OLED::printNumber(getSettingValue(SettingsOptions::PowerLimit), 3, FontStyle::LARGE);\n    OLED::print(LargeSymbolWatts, FontStyle::LARGE);\n  }\n}\n\nstatic void setCalibrate(void) {\n  if (getSettingValue(SettingsOptions::CalibrateCJC) < 1) {\n    if (userConfirmation(translatedString(Tr->SettingsCalibrationWarning))) {\n      // User confirmed\n      // So we now set the tick\n      setSettingValue(SettingsOptions::CalibrateCJC, 1);\n    }\n  } else {\n    setSettingValue(SettingsOptions::CalibrateCJC, 0);\n  }\n}\n\nstatic void displayCalibrate(void) { OLED::drawCheckbox(getSettingValue(SettingsOptions::CalibrateCJC)); }\n\nstatic void setCalibrateVIN(void) {\n  // Jump to the voltage calibration subscreen\n  OLED::clearScreen();\n\n  for (;;) {\n    OLED::setCursor(25, 0);\n    uint16_t voltage = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0);\n    OLED::printNumber(voltage / 10, 2, FontStyle::LARGE);\n    OLED::print(LargeSymbolDot, FontStyle::LARGE);\n    OLED::printNumber(voltage % 10, 1, FontStyle::LARGE, false);\n    OLED::print(LargeSymbolVolts, FontStyle::LARGE);\n    OLED::setCursor(0, 8);\n    OLED::printNumber(getSettingValue(SettingsOptions::VoltageDiv), 3, FontStyle::SMALL);\n\n    switch (getButtonState()) {\n    case BUTTON_F_SHORT:\n      prevSettingValue(SettingsOptions::VoltageDiv);\n      break;\n    case BUTTON_B_SHORT:\n      nextSettingValue(SettingsOptions::VoltageDiv);\n      break;\n    case BUTTON_BOTH:\n    case BUTTON_F_LONG:\n    case BUTTON_B_LONG:\n      saveSettings();\n      OLED::clearScreen();\n      OLED::setCursor(0, 0);\n      warnUser(translatedString(Tr->CalibrationDone), getButtonState());\n      OLED::refresh();\n      waitForButtonPressOrTimeout(0.5 * TICKS_SECOND);\n      return;\n    case BUTTON_NONE:\n    default:\n      break;\n    }\n\n    OLED::refresh();\n    osDelay(40);\n  }\n}\n\nstatic void displayPowerPulse(void) {\n  if (getSettingValue(SettingsOptions::KeepAwakePulse)) {\n    OLED::printNumber(getSettingValue(SettingsOptions::KeepAwakePulse) / 10, 1, FontStyle::LARGE);\n    OLED::print(LargeSymbolDot, FontStyle::LARGE);\n    OLED::printNumber(getSettingValue(SettingsOptions::KeepAwakePulse) % 10, 1, FontStyle::LARGE);\n  } else {\n    OLED::drawUnavailableIcon();\n  }\n}\n\nstatic bool showPowerPulseOptions(void) { return getSettingValue(SettingsOptions::KeepAwakePulse) > 0; }\n\nstatic void displayPowerPulseWait(void) { OLED::printNumber(getSettingValue(SettingsOptions::KeepAwakePulseWait), 1, FontStyle::LARGE); }\n\nstatic void displayPowerPulseDuration(void) { OLED::printNumber(getSettingValue(SettingsOptions::KeepAwakePulseDuration), 1, FontStyle::LARGE); }\n\nstatic void setResetSettings(void) {\n  if (userConfirmation(translatedString(Tr->SettingsResetWarning))) {\n    resetSettings();\n    OLED::clearScreen();\n    while (!warnUser(translatedString(Tr->ResetOKMessage), getButtonState())) {\n      OLED::refresh();\n      vTaskDelay(TICKS_100MS);\n      OLED::clearScreen();\n    }\n    reboot();\n  }\n}\n\n// Indicates whether a menu transition is in progress, so that the menu icon\n// animation is paused during the transition.\nstatic bool animOpenState = false;\n\nstatic void displayMenu(size_t index) {\n  // Call into the menu\n  // Draw title\n  OLED::printWholeScreen(translatedString(Tr->SettingsMenuEntries[index]));\n  static TickType_t menuSwitchLoopTick = 0;\n  static size_t     menuCurrentIndex   = sizeof(rootSettingsMenu) + 1;\n  TickType_t        step               = TICKS_100MS * 5;\n  switch (getSettingValue(SettingsOptions::AnimationSpeed)) {\n  case settingOffSpeed_t::FAST:\n    step = TICKS_100MS * 3;\n    break;\n  case settingOffSpeed_t::MEDIUM:\n    step = TICKS_100MS * 4;\n    break;\n  default: // SLOW or off - defaulted above\n    break;\n  }\n  size_t currentFrame;\n  if (!animOpenState && (getSettingValue(SettingsOptions::AnimationSpeed) != settingOffSpeed_t::OFF)) {\n    if (menuCurrentIndex != index) {\n      menuCurrentIndex   = index;\n      menuSwitchLoopTick = xTaskGetTickCount();\n    }\n    currentFrame = ((xTaskGetTickCount() - menuSwitchLoopTick) / step);\n    if (getSettingValue(SettingsOptions::AnimationLoop)) {\n      currentFrame %= 3;\n    } else if (currentFrame > 2) {\n      currentFrame = 2;\n    }\n  } else {\n    // We want the animation to restart after completing the transition.\n    menuCurrentIndex = sizeof(rootSettingsMenu) + 1;\n    // Always draw the last frame if icon animation is disabled.\n    currentFrame = getSettingValue(SettingsOptions::AnimationSpeed) == settingOffSpeed_t::OFF ? 2 : 0;\n  }\n  // Draw symbol\n  // 16 pixel wide image\n  // less 2 pixel wide scrolling indicator\n\n  OLED::drawArea(OLED_WIDTH - SETTINGS_ICON_WIDTH - 2, 0, SETTINGS_ICON_WIDTH, SETTINGS_ICON_HEIGHT, (&SettingsMenuIcons[index][(SETTINGS_ICON_WIDTH * (SETTINGS_ICON_HEIGHT / 8)) * currentFrame]));\n}\n\n#if defined(POW_DC) || defined(POW_QC) || defined(POW_PD)\nstatic void displayPowerMenu(void) { displayMenu(0); }\n\n#endif /* POW_DC or POW_QC */\n\nstatic void displaySolderingMenu(void) { displayMenu(1); }\n\nstatic void displayPowerSavingMenu(void) { displayMenu(2); }\n\nstatic void displayUIMenu(void) { displayMenu(3); }\n\nstatic void displayAdvancedMenu(void) { displayMenu(4); }\n"
  },
  {
    "path": "source/Core/Src/syscalls.c",
    "content": "/* Includes */\r\n#include <errno.h>\r\n#include <signal.h>\r\n#include <stdio.h>\r\n#include <stdlib.h>\r\n#include <sys/stat.h>\r\n#include <sys/time.h>\r\n#include <sys/times.h>\r\n#include <time.h>\r\n\r\n/* Functions */\r\nvoid initialise_monitor_handles() {}\r\n\r\n/* Syscalls (stub implementations to avoid compile warnings and possibe future problems) */\r\nint _getpid(void) { return 1; }\r\n\r\n#if defined(MODEL_Pinecil) || defined(MODEL_Pinecilv2)\r\n// do nothing here because some stubs and real implementations added for Pinecils already\r\n#else\r\noff_t   _lseek(int fd, off_t ptr, int dir) { return -1; }\r\nssize_t _read(int fd, void *ptr, size_t len) { return -1; }\r\nssize_t _write(int fd, const void *ptr, size_t len) { return -1; }\r\nint     _close(int fd) { return -1; }\r\n#endif\r\n"
  },
  {
    "path": "source/Core/Threads/GUIRendering.md",
    "content": "# GUI Rendering\n\nThe GUI aims to be somewhat similar to immediate mode rendering, where the screen is re-rendered each sweep.\nThis is due to a few aims:\n\n1. Functions should try and contain their state to the context struct (helps keep state usage flatter)\n2. Allows external events to change the state\n3. Means state can be read/write over BLE or other external control interfaces\n\n## Transitions\n\nWhen changing the view to a new view it can be preferable to transition using an animation.\nThe tooling provides for left, right and down animations at this point.\nThe use of these gives a notion of \"direction\" when navigating the menu.\n\n```\n                          ┌───────────┐\n                          │ Debug Menu│\n                          └─────┬─────┘\n                                │\n                                │\n                                │\n┌──────────────┐           ┌────┴─────┐           ┌──────────────────┐           ┌─────────────────┐\n│Soldering Mode│           │          │           │                  │           │                 │\n│      OR      ├───────────┤Home Menu ├───────────┤Settings Main Menu├───────────┤Settings sub menu│\n│Reflow    Mode│           │          │           │                  │           │                 │\n└──────────────┘           └──────────┘           └──────────────────┘           └─────────┬───────┘\n                                                                                           │\n                                                                                 ┌─────────┴───────┐\n                                                                                 │                 │\n                                                                                 │Settings sub menu│\n                                                                                 │                 │\n                                                                                 └─────────────────┘\n```\n\nThe downside of supporting transitions is that for these to work, the code should render the screen _first_ then return the new state.\nThis ensures there is a good working copy in the buffer before the transition changes the view.\n\nThe code that handles the dispatch will run a new render pass again to get the new buffer contents and then transition between the two for you.\nAt the moment scrolling \"Up\" isn't implemented but the enumeration is there so that its implementation can follow.\n"
  },
  {
    "path": "source/Core/Threads/GUIThread.cpp",
    "content": "/*\n * GUIThread.cpp\n *\n *  Created on: 19 Aug 2019\n *      Author: ralim\n */\nextern \"C\" {\n#include \"FreeRTOSConfig.h\"\n}\n#include \"BootLogo.h\"\n#include \"Buttons.hpp\"\n#include \"I2CBB2.hpp\"\n#include \"LIS2DH12.hpp\"\n#include \"MMA8652FC.hpp\"\n#include \"OLED.hpp\"\n#include \"OperatingModeUtilities.h\"\n#include \"OperatingModes.h\"\n#include \"Settings.h\"\n#include \"TipThermoModel.h\"\n#include \"Translation.h\"\n#include \"cmsis_os.h\"\n#include \"configuration.h\"\n#include \"history.hpp\"\n#include \"main.hpp\"\n#include \"power.hpp\"\n#include \"settingsGUI.hpp\"\n#include \"stdlib.h\"\n#include \"string.h\"\n#include \"ui_drawing.hpp\"\n#ifdef POW_PD\n#include \"USBPD.h\"\n#include \"pd.h\"\n#endif\n\n// File local variables\n#define MOVEMENT_INACTIVITY_TIME (60 * configTICK_RATE_HZ)\n#define BUTTON_INACTIVITY_TIME   (60 * configTICK_RATE_HZ)\n\nButtonState   buttonsAtDeviceBoot;                                      // We record button state at startup, incase of jumping to debug modes\nOperatingMode currentOperatingMode = OperatingMode::InitialisationDone; // Current mode we are rendering\nguiContext    context;                                                  // Context passed to functions to aid in state during render passes\n\nOperatingMode handle_post_init_state();\nOperatingMode guiHandleDraw(void) {\n  OLED::clearScreen(); // Clear ready for render pass\n  // Read button state\n  ButtonState buttons = getButtonState();\n  // Enforce screen on if buttons pressed, movement, hot tip etc\n  if (buttons != BUTTON_NONE) {\n    OLED::setDisplayState(OLED::DisplayState::ON);\n  } else {\n    // Buttons are none; check if we can sleep display\n    uint32_t tipTemp = TipThermoModel::getTipInC();\n    if ((tipTemp < 50) && getSettingValue(SettingsOptions::Sensitivity) &&\n        (((xTaskGetTickCount() - lastMovementTime) > MOVEMENT_INACTIVITY_TIME) && ((xTaskGetTickCount() - lastButtonTime) > BUTTON_INACTIVITY_TIME))) {\n      OLED::setDisplayState(OLED::DisplayState::OFF);\n      setStatusLED(LED_OFF);\n    } else {\n      OLED::setDisplayState(OLED::DisplayState::ON);\n    }\n    if (currentOperatingMode != OperatingMode::Soldering && currentOperatingMode != OperatingMode::SolderingProfile) {\n      // Not in soldering mode, so set this based on temp\n      if (tipTemp > 55) {\n        setStatusLED(LED_COOLING_STILL_HOT);\n      } else {\n        setStatusLED(LED_STANDBY);\n      }\n    }\n  }\n  // Dispatch button state to gui mode\n  OperatingMode newMode = currentOperatingMode;\n  switch (currentOperatingMode) {\n  case OperatingMode::StartupWarnings:\n    newMode = showWarnings(buttons, &context);\n    break;\n  case OperatingMode::UsbPDDebug:\n#ifdef HAS_POWER_DEBUG_MENU\n    newMode = showPDDebug(buttons, &context);\n    break;\n#else\n    newMode = OperatingMode::InitialisationDone;\n#endif\n  case OperatingMode::StartupLogo:\n    showBootLogo();\n\n    if (getSettingValue(SettingsOptions::AutoStartMode) == autoStartMode_t::SLEEP) {\n      lastMovementTime = lastButtonTime = 0; // We mask the values so that sleep goes until user moves again or presses a button\n      newMode                           = OperatingMode::Sleeping;\n    } else if (getSettingValue(SettingsOptions::AutoStartMode) == autoStartMode_t::SOLDER) {\n      lastMovementTime = lastButtonTime = xTaskGetTickCount(); // Move forward so we dont go to sleep\n      newMode                           = OperatingMode::Soldering;\n    } else if (getSettingValue(SettingsOptions::AutoStartMode) == autoStartMode_t::ZERO) {\n      lastMovementTime = lastButtonTime = 0; // We mask the values so that sleep goes until user moves again or presses a button\n      newMode                           = OperatingMode::Hibernating;\n    } else {\n      newMode = OperatingMode::HomeScreen;\n    }\n\n    break;\n  default:\n    /* Fallthrough */\n  case OperatingMode::HomeScreen:\n    newMode = drawHomeScreen(buttons, &context);\n    break;\n  case OperatingMode::Soldering:\n    context.scratch_state.state4 = 0;\n    newMode                      = gui_solderingMode(buttons, &context);\n    break;\n  case OperatingMode::SolderingProfile:\n    newMode = gui_solderingProfileMode(buttons, &context);\n    break;\n  case OperatingMode::Sleeping:\n    newMode = gui_SolderingSleepingMode(buttons, &context);\n    break;\n  case OperatingMode::TemperatureAdjust:\n    newMode = gui_solderingTempAdjust(buttons, &context);\n    break;\n  case OperatingMode::DebugMenuReadout:\n    newMode = showDebugMenu(buttons, &context);\n    break;\n  case OperatingMode::CJCCalibration:\n    newMode = performCJCC(buttons, &context);\n    break;\n  case OperatingMode::SettingsMenu:\n    newMode = gui_SettingsMenu(buttons, &context);\n    break;\n  case OperatingMode::InitialisationDone:\n    newMode = handle_post_init_state();\n    break;\n  case OperatingMode::Hibernating:\n    context.scratch_state.state4 = 1;\n    gui_SolderingSleepingMode(buttons, &context);\n    if (lastButtonTime > 0 || lastMovementTime > 0) {\n      newMode = OperatingMode::Soldering;\n    }\n    break;\n  case OperatingMode::ThermalRunaway:\n    /*TODO*/\n    newMode = OperatingMode::HomeScreen;\n    break;\n  };\n  return newMode;\n}\nvoid guiRenderLoop(void) {\n  OperatingMode newMode = guiHandleDraw(); // This does the screen drawing\n\n  // Post draw we handle any state transitions\n\n  if (newMode != currentOperatingMode) {\n    context.viewEnterTime = xTaskGetTickCount();\n    context.previousMode  = currentOperatingMode;\n    // If the previous mode is the startup logo; we dont want to return to it, but instead dispatch out to either home or soldering\n    if (currentOperatingMode == OperatingMode::StartupLogo) {\n      if (getSettingValue(SettingsOptions::AutoStartMode)) {\n        context.previousMode = OperatingMode::Soldering;\n      } else {\n        newMode = OperatingMode::HomeScreen;\n      }\n    }\n    memset(&context.scratch_state, 0, sizeof(context.scratch_state));\n    currentOperatingMode = newMode;\n  }\n\n  // If the transition marker is set, we need to make the next draw occur to the secondary buffer so we have something to transition to\n  if (context.transitionMode != TransitionAnimation::None) {\n    OLED::useSecondaryFramebuffer(true);\n    // Now we need to fill the secondary buffer with the _next_ frame to transistion to\n    guiHandleDraw();\n    OLED::useSecondaryFramebuffer(false);\n    // Now dispatch the transition\n    switch (context.transitionMode) {\n    case TransitionAnimation::Down:\n      OLED::transitionScrollDown(context.viewEnterTime);\n      break;\n    case TransitionAnimation::Left:\n      OLED::transitionSecondaryFramebuffer(false, context.viewEnterTime);\n      break;\n    case TransitionAnimation::Right:\n      OLED::transitionSecondaryFramebuffer(true, context.viewEnterTime);\n      break;\n    case TransitionAnimation::Up:\n      OLED::transitionScrollUp(context.viewEnterTime);\n\n    case TransitionAnimation::None:\n    default:\n      break; // Do nothing on unknown\n    }\n\n    context.transitionMode = TransitionAnimation::None; // Clear transition flag\n  }\n  // Render done, draw it out\n  OLED::refresh();\n}\n\nOperatingMode handle_post_init_state() {\n#ifdef HAS_POWER_DEBUG_MENU\n#ifdef DEBUG_POWER_MENU_BUTTON_B\n  if (buttonsAtDeviceBoot == BUTTON_B_LONG || buttonsAtDeviceBoot == BUTTON_B_SHORT) {\n#else\n  if (buttonsAtDeviceBoot == BUTTON_F_LONG || buttonsAtDeviceBoot == BUTTON_F_SHORT) {\n#endif\n    buttonsAtDeviceBoot = BUTTON_NONE;\n    return OperatingMode::UsbPDDebug;\n  }\n#endif\n\n  if (getSettingValue(SettingsOptions::CalibrateCJC) > 0) {\n    return OperatingMode::CJCCalibration;\n  }\n\n  return OperatingMode::StartupWarnings;\n}\n\n/* StartGUITask function */\nvoid startGUITask(void const *argument) {\n  (void)argument;\n  prepareTranslations();\n\n  OLED::initialize(); // start up the LCD\n  OLED::setBrightness(getSettingValue(SettingsOptions::OLEDBrightness));\n  OLED::setInverseDisplay(getSettingValue(SettingsOptions::OLEDInversion));\n\n  bool buttonLockout = false;\n  ui_pre_render_assets();\n  getTipRawTemp(1); // reset filter\n  memset(&context, 0, sizeof(context));\n\n  OLED::setRotation(getSettingValue(SettingsOptions::OrientationMode) & 1);\n\n  // Read boot button state\n  if (getButtonA()) {\n    buttonsAtDeviceBoot = BUTTON_F_LONG;\n  }\n  if (getButtonB()) {\n    buttonsAtDeviceBoot = BUTTON_B_LONG;\n  }\n\n  TickType_t startRender = xTaskGetTickCount();\n  for (;;) {\n    guiRenderLoop();\n    resetWatchdog();\n    vTaskDelayUntil(&startRender, TICKS_100MS * 4 / 10); // Try and maintain 20-25fps ish update rate, way to fast but if we can its nice\n  }\n}\n"
  },
  {
    "path": "source/Core/Threads/MOVThread.cpp",
    "content": "/*\r\n * MOVThread.cpp\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"BMA223.hpp\"\r\n#include \"BSP.h\"\r\n#include \"FreeRTOS.h\"\r\n#include \"I2C_Wrapper.hpp\"\r\n#include \"LIS2DH12.hpp\"\r\n#include \"MMA8652FC.hpp\"\r\n#include \"MSA301.h\"\r\n#include \"Pins.h\"\r\n#include \"QC3.h\"\r\n#include \"SC7A20.hpp\"\r\n#include \"Settings.h\"\r\n#include \"TipThermoModel.h\"\r\n#include \"cmsis_os.h\"\r\n#include \"configuration.h\"\r\n#include \"history.hpp\"\r\n#include \"main.hpp\"\r\n#include \"power.hpp\"\r\n#include \"stdlib.h\"\r\n#include \"task.h\"\r\n\r\n#define MOVFilter 8\r\nuint8_t    accelInit        = 0;\r\nTickType_t lastMovementTime = 0;\r\n// Order matters for probe order, some Acceleromters do NOT like bad reads; and we have a bunch of overlap of addresses\r\nvoid detectAccelerometerVersion() {\r\n#ifdef ACCEL_MMA\r\n  if (MMA8652FC::detect()) {\r\n    if (MMA8652FC::initalize()) {\r\n      DetectedAccelerometerVersion = AccelType::MMA;\r\n      return;\r\n    }\r\n  }\r\n#endif\r\n#ifdef ACCEL_LIS\r\n  if (LIS2DH12::detect()) {\r\n    // Setup the ST Accelerometer\r\n    if (LIS2DH12::initalize()) {\r\n      if (LIS2DH12::isClone()) {\r\n        DetectedAccelerometerVersion = AccelType::LIS_CLONE;\r\n      } else {\r\n        DetectedAccelerometerVersion = AccelType::LIS;\r\n      }\r\n      return;\r\n    }\r\n  }\r\n#endif\r\n#ifdef ACCEL_BMA\r\n  if (BMA223::detect()) {\r\n    // Setup the BMA223 Accelerometer\r\n    if (BMA223::initalize()) {\r\n      DetectedAccelerometerVersion = AccelType::BMA;\r\n      return;\r\n    }\r\n  }\r\n#endif\r\n#ifdef ACCEL_SC7\r\n  if (SC7A20::detect()) {\r\n    // Setup the SC7A20 Accelerometer\r\n    if (SC7A20::initalize()) {\r\n      DetectedAccelerometerVersion = AccelType::SC7;\r\n      return;\r\n    }\r\n  }\r\n#endif\r\n#ifdef ACCEL_MSA\r\n  if (MSA301::detect()) {\r\n    // Setup the MSA301 Accelerometer\r\n    if (MSA301::initalize()) {\r\n      DetectedAccelerometerVersion = AccelType::MSA;\r\n      return;\r\n    }\r\n  }\r\n#endif\r\n#ifdef GPIO_VIBRATION\r\n  if (true) {\r\n    DetectedAccelerometerVersion = AccelType::GPIO;\r\n    return;\r\n  }\r\n#endif\r\n  {\r\n    // disable imu sensitivity\r\n    setSettingValue(SettingsOptions::Sensitivity, 0);\r\n    DetectedAccelerometerVersion = AccelType::None;\r\n  }\r\n}\r\ninline void readAccelerometer(int16_t &tx, int16_t &ty, int16_t &tz, Orientation &rotation) {\r\n#ifdef ACCEL_MMA\r\n  if (DetectedAccelerometerVersion == AccelType::MMA) {\r\n    MMA8652FC::getAxisReadings(tx, ty, tz);\r\n    rotation = MMA8652FC::getOrientation();\r\n  } else\r\n#endif\r\n#ifdef ACCEL_LIS\r\n      if (DetectedAccelerometerVersion == AccelType::LIS || DetectedAccelerometerVersion == AccelType::LIS_CLONE) {\r\n    LIS2DH12::getAxisReadings(tx, ty, tz);\r\n    rotation = LIS2DH12::getOrientation();\r\n  } else\r\n#endif\r\n#ifdef ACCEL_BMA\r\n      if (DetectedAccelerometerVersion == AccelType::BMA) {\r\n    BMA223::getAxisReadings(tx, ty, tz);\r\n    rotation = BMA223::getOrientation();\r\n  } else\r\n#endif\r\n#ifdef ACCEL_MSA\r\n      if (DetectedAccelerometerVersion == AccelType::MSA) {\r\n    MSA301::getAxisReadings(tx, ty, tz);\r\n    rotation = MSA301::getOrientation();\r\n  } else\r\n#endif\r\n#ifdef ACCEL_SC7\r\n      if (DetectedAccelerometerVersion == AccelType::SC7) {\r\n    SC7A20::getAxisReadings(tx, ty, tz);\r\n    rotation = SC7A20::getOrientation();\r\n  } else\r\n#endif\r\n#ifdef GPIO_VIBRATION\r\n      if (DetectedAccelerometerVersion == AccelType::GPIO) {\r\n    // TODO\r\n    if (HAL_GPIO_ReadPin(MOVEMENT_GPIO_Port, MOVEMENT_Pin) == GPIO_PIN_SET) {\r\n      // Movement\r\n      tx = ty = tz = 5000;\r\n    } else {\r\n      // No Movement\r\n      tx = ty = tz = 0;\r\n    }\r\n    rotation = Orientation::ORIENTATION_FLAT;\r\n  } else\r\n#endif\r\n  {\r\n    // do nothing :(\r\n  }\r\n}\r\nvoid startMOVTask(void const *argument __unused) {\r\n#ifdef NO_ACCEL\r\n  DetectedAccelerometerVersion = AccelType::None;\r\n  for (;;) {\r\n    osDelay(2 * TICKS_SECOND);\r\n  }\r\n#endif\r\n\r\n  osDelay(TICKS_100MS / 5); // This is here as the BMA doesnt start up instantly and can wedge the I2C bus if probed too fast after boot\r\n  detectAccelerometerVersion();\r\n  osDelay(TICKS_100MS / 2); // wait ~50ms for setup of accel to finalise\r\n  lastMovementTime = 0;\r\n  // Mask 2 seconds if we are in autostart so that if user is plugging in and\r\n  // then putting in stand it doesnt wake instantly\r\n  if (getSettingValue(SettingsOptions::AutoStartMode)) {\r\n    osDelay(2 * TICKS_SECOND);\r\n  }\r\n\r\n  int16_t     datax[MOVFilter] = {0};\r\n  int16_t     datay[MOVFilter] = {0};\r\n  int16_t     dataz[MOVFilter] = {0};\r\n  uint8_t     currentPointer   = 0;\r\n  int16_t     tx = 0, ty = 0, tz = 0;\r\n  int32_t     avgx, avgy, avgz;\r\n  Orientation rotation = ORIENTATION_FLAT;\r\n#ifdef ACCEL_EXITS_ON_MOVEMENT\r\n  uint16_t tripCounter = 0;\r\n#endif\r\n  for (;;) {\r\n    int32_t threshold = 1500 + (9 * 200);\r\n    threshold -= getSettingValue(SettingsOptions::Sensitivity) * 200; // 200 is the step size\r\n    readAccelerometer(tx, ty, tz, rotation);\r\n    if (getSettingValue(SettingsOptions::OrientationMode) == 2) {\r\n      if (rotation != ORIENTATION_FLAT) {\r\n        OLED::setRotation(rotation == ORIENTATION_LEFT_HAND); // link the data through\r\n      }\r\n    }\r\n    datax[currentPointer] = (int32_t)tx;\r\n    datay[currentPointer] = (int32_t)ty;\r\n    dataz[currentPointer] = (int32_t)tz;\r\n    if (!accelInit) {\r\n      for (uint8_t i = currentPointer + 1; i < MOVFilter; i++) {\r\n        datax[i] = (int32_t)tx;\r\n        datay[i] = (int32_t)ty;\r\n        dataz[i] = (int32_t)tz;\r\n      }\r\n      accelInit = 1;\r\n    }\r\n    currentPointer = (currentPointer + 1) % MOVFilter;\r\n    avgx = avgy = avgz = 0;\r\n    // calculate averages\r\n    for (uint8_t i = 0; i < MOVFilter; i++) {\r\n      avgx += datax[i];\r\n      avgy += datay[i];\r\n      avgz += dataz[i];\r\n    }\r\n    avgx /= MOVFilter;\r\n    avgy /= MOVFilter;\r\n    avgz /= MOVFilter;\r\n\r\n    // Sum the deltas\r\n    int32_t error = (abs(avgx - tx) + abs(avgy - ty) + abs(avgz - tz));\r\n    // So now we have averages, we want to look if these are different by more\r\n    // than the threshold\r\n\r\n    // If movement has occurred then we update the tick timer\r\n    bool overThreshold = error > threshold;\r\n#ifdef ACCEL_EXITS_ON_MOVEMENT\r\n    if (overThreshold) {\r\n      tripCounter++;\r\n      if (tripCounter > 2) {\r\n        lastMovementTime = xTaskGetTickCount();\r\n      }\r\n    } else if (tripCounter > 0) {\r\n      tripCounter = 0;\r\n    }\r\n#else\r\n    if (overThreshold) {\r\n      lastMovementTime = xTaskGetTickCount();\r\n    }\r\n\r\n#endif\r\n\r\n    vTaskDelay(TICKS_100MS); // Slow down update rate\r\n  }\r\n}\r\n"
  },
  {
    "path": "source/Core/Threads/PIDThread.cpp",
    "content": "/*\r\n * PIDThread.cpp\r\n *\r\n *  Created on: 29 May 2020\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"BSP.h\"\r\n#include \"FreeRTOS.h\"\r\n#include \"Settings.h\"\r\n#include \"TipThermoModel.h\"\r\n#include \"cmsis_os.h\"\r\n#include \"configuration.h\"\r\n#include \"history.hpp\"\r\n#include \"main.hpp\"\r\n#include \"power.hpp\"\r\n#include \"task.h\"\r\n\r\n#ifdef POW_PD\r\n#if POW_PD == 1\r\n#include \"USBPD.h\"\r\n#endif\r\n#endif\r\n\r\nstatic TickType_t          powerPulseWaitUnit          = 25 * TICKS_100MS;      // 2.5 s\r\nstatic TickType_t          powerPulseDurationUnit      = (5 * TICKS_100MS) / 2; // 250 ms\r\nTaskHandle_t               pidTaskNotification         = NULL;\r\nvolatile TemperatureType_t currentTempTargetDegC       = 0; // Current temperature target in C\r\nint32_t                    powerSupplyWattageLimit     = 0;\r\nuint8_t                    heaterThermalRunawayCounter = 0;\r\n\r\nstatic int32_t getPIDResultX10Watts(TemperatureType_t set_point, TemperatureType_t current_value);\r\nstatic void    detectThermalRunaway(const TemperatureType_t currentTipTempInC, const uint32_t x10WattsOut);\r\nstatic void    setOutputx10WattsViaFilters(int32_t x10Watts);\r\nstatic int32_t getX10WattageLimits();\r\n\r\n/* StartPIDTask function */\r\nvoid startPIDTask(void const *argument __unused) {\r\n  /*\r\n   * We take the current tip temperature & evaluate the next step for the tip\r\n   * control PWM.\r\n   */\r\n  setTipX10Watts(0); // disable the output at startup\r\n\r\n  currentTempTargetDegC = 0; // Force start with no output (off). If in sleep / soldering this will\r\n                             // be over-ridden rapidly\r\n\r\n  pidTaskNotification = xTaskGetCurrentTaskHandle();\r\n\r\n  TemperatureType_t PIDTempTarget = 0;\r\n  // Pre-seed the adc filters\r\n  for (int i = 0; i < 32; i++) {\r\n    ulTaskNotifyTake(pdTRUE, 5);\r\n    TipThermoModel::getTipInC(true);\r\n    getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 1);\r\n  }\r\n\r\n  while (preStartChecks() == 0) {\r\n    resetWatchdog();\r\n    ulTaskNotifyTake(pdTRUE, 2000);\r\n  }\r\n// Wait for PD if its in the middle of negotiation\r\n#ifdef POW_PD\r\n#if POW_PD == 1\r\n  // This is an FUSB based PD capable device\r\n  // Wait up to 3 seconds for USB-PD to settle\r\n  while (USBPowerDelivery::negotiationInProgress() && xTaskGetTickCount() < (TICKS_SECOND * 3)) {\r\n    resetWatchdog();\r\n    ulTaskNotifyTake(pdTRUE, TICKS_100MS);\r\n  }\r\n#endif\r\n#endif\r\n\r\n  int32_t    x10WattsOut             = 0;\r\n  TickType_t lastThermalRunawayDecay = xTaskGetTickCount();\r\n\r\n  for (;;) {\r\n    x10WattsOut = 0;\r\n    // This is a call to block this thread until the ADC does its samples\r\n    if (ulTaskNotifyTake(pdTRUE, TICKS_SECOND * 2)) {\r\n      // Do the reading here to keep the temp calculations churning along\r\n      TemperatureType_t currentTipTempInC = TipThermoModel::getTipInC(true);\r\n\r\n      PIDTempTarget = currentTempTargetDegC;\r\n      if (PIDTempTarget > 0) {\r\n        // Cap the max set point to 450C\r\n        if (PIDTempTarget > 450) {\r\n          // Maximum allowed output\r\n          PIDTempTarget = 450;\r\n        }\r\n        // Safety check that not aiming higher than current tip can measure\r\n        if (PIDTempTarget > TipThermoModel::getTipMaxInC()) {\r\n          PIDTempTarget = TipThermoModel::getTipMaxInC();\r\n        }\r\n\r\n        x10WattsOut = getPIDResultX10Watts(PIDTempTarget, currentTipTempInC);\r\n        detectThermalRunaway(currentTipTempInC, x10WattsOut);\r\n      } else {\r\n        detectThermalRunaway(currentTipTempInC, 0);\r\n      }\r\n      setOutputx10WattsViaFilters(x10WattsOut);\r\n    } else {\r\n      // ADC interrupt timeout\r\n      setTipPWM(0, false);\r\n    }\r\n#ifdef DEBUG_UART_OUTPUT\r\n    log_system_state(x10WattsOut);\r\n#endif\r\n    if (xTaskGetTickCount() - lastThermalRunawayDecay > TICKS_SECOND) {\r\n      lastThermalRunawayDecay = xTaskGetTickCount();\r\n      if (heaterThermalRunawayCounter > 0) {\r\n        heaterThermalRunawayCounter--;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n#ifdef TIP_CONTROL_PID\r\ntemplate <class T, T Kp, T Ki, T Kd, T integral_limit_scale> struct PID {\r\n  T previous_error_term;\r\n  T integration_running_sum;\r\n\r\n  T update(const T set_point, const T new_reading, const TickType_t interval_ms, const T max_output) {\r\n    const T target_delta = set_point - new_reading;\r\n\r\n    // Proportional term\r\n    const T kp_result = Kp * target_delta;\r\n\r\n    // Integral term as we use mixed sampling rates, we cant assume a constant sample interval\r\n    // Thus we multiply this out by the interval time to ~= dv/dt\r\n    // Then the shift by 1000 is ms -> Seconds\r\n\r\n    integration_running_sum += (target_delta * interval_ms * Ki) / 1000;\r\n\r\n    // We constrain integration_running_sum to limit windup\r\n    // This is not overly required for most use cases but can prevent large overshoot in constrained implementations\r\n    if (integration_running_sum > integral_limit_scale * max_output) {\r\n      integration_running_sum = integral_limit_scale * max_output;\r\n    } else if (integration_running_sum < -integral_limit_scale * max_output) {\r\n      integration_running_sum = -integral_limit_scale * max_output;\r\n    }\r\n    // Calculate the integral term, we use a shift 100 to get precision in integral as we often need small amounts\r\n    T ki_result = integration_running_sum / 100;\r\n\r\n    // Derivative term\r\n    T derivative = (target_delta - previous_error_term);\r\n    T kd_result  = ((Kd * derivative) / (T)(interval_ms));\r\n\r\n    // Summation of the outputs\r\n    T output = kp_result + ki_result + kd_result;\r\n\r\n    // Restrict to max / 0\r\n    if (output > max_output) {\r\n      output = max_output;\r\n    } else if (output < 0) {\r\n      output = 0;\r\n    }\r\n\r\n    // Save target_delta to previous target_delta\r\n    previous_error_term = target_delta;\r\n\r\n    return output;\r\n  }\r\n};\r\n#else\r\ntemplate <class T = TemperatureType_t> struct Integrator {\r\n  T sum;\r\n\r\n  T update(const T val, const int32_t inertia, const int32_t gain, const int32_t rate, const int32_t limit) {\r\n    // Decay the old value. This is a simplified formula that still works with decent results\r\n    // Ideally we would have used an exponential decay but the computational effort required\r\n    // by exp function is just not justified here in respect to the outcome\r\n    sum = (sum * (100 - (inertia / rate))) / 100;\r\n    // Add the new value x integration interval ( 1 / rate)\r\n    sum += (gain * val) / rate;\r\n\r\n    // constrain the output between +- our max power output, this limits windup when doing the inital heatup or when solding something large\r\n    if (sum > limit) {\r\n      sum = limit;\r\n    } else if (sum < -limit) {\r\n      sum = -limit;\r\n    }\r\n\r\n    return sum;\r\n  }\r\n\r\n  void set(T const val) { sum = val; }\r\n\r\n  T get(bool positiveOnly = true) const { return (positiveOnly) ? ((sum > 0) ? sum : 0) : sum; }\r\n};\r\n#endif\r\nint32_t getPIDResultX10Watts(TemperatureType_t set_point, TemperatureType_t current_reading) {\r\n  static TickType_t lastCall = 0;\r\n\r\n#ifdef TIP_CONTROL_PID\r\n  static PID<TemperatureType_t, TIP_PID_KP, TIP_PID_KI, TIP_PID_KD, 5> pid = {0, 0};\r\n\r\n  const TickType_t interval = (xTaskGetTickCount() - lastCall);\r\n\r\n#else\r\n  static Integrator<TemperatureType_t> powerStore = {0};\r\n  const TickType_t                     rate       = TICKS_SECOND / (xTaskGetTickCount() - lastCall);\r\n#endif\r\n  lastCall = xTaskGetTickCount();\r\n  // Sandman note:\r\n  // PID Challenge - we have a small thermal mass that we to want heat up as fast as possible but we don't\r\n  // want to overshot excessively (if at all) the set point temperature. In the same time we have 'imprecise'\r\n  // instant temperature measurements. The nature of temperature reading imprecision is not necessarily\r\n  // related to the sensor (thermocouple) or DAQ system, that otherwise are fairly decent. The real issue\tis\r\n  // the thermal inertia. We basically read the temperature in the window between two heating sessions when\r\n  // the output is off. However, the heater temperature does not dissipate instantly into the tip mass so\r\n  // at any moment right after heating, the thermocouple would sense a temperature significantly higher than\r\n  // moments later. We could use longer delays but that would slow the PID loop and that would lead to other\r\n  // negative side effects. As a result, we can only rely on the I term but with a twist. Instead of a simple\r\n  // integrator we are going to use a self decaying integrator that acts more like a dual I term / P term\r\n  // rather than a plain I term. Depending on the circumstances, like when the delta temperature is large,\r\n  // it acts more like a P term whereas on closing to set point it acts increasingly closer to a plain I term.\r\n  // So in a sense, we have a bit of both.\r\n  //\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t So there we go...\r\n\r\n  // P = (Thermal Mass) x (Delta Temperature ) / 1sec, where thermal mass is in X10 J / °C and\r\n  // delta temperature is in °C. The result is the power in X10 W needed to raise (or decrease!) the\r\n  // tip temperature with (Delta Temperature ) °C in 1 second.\r\n  // Note on powerStore. On update, if the value is provided in X10 (W) units then inertia shall be provided\r\n  // in X10 (J / °C) units as well.\r\n\r\n#ifdef TIP_CONTROL_PID\r\n  return pid.update(set_point, current_reading, interval, getX10WattageLimits());\r\n#else\r\n  return powerStore.update(((TemperatureType_t)getTipThermalMass()) * (set_point - current_reading), // the required power\r\n                           getTipInertia(),                                                          // Inertia, smaller numbers increase dominance of the previous value\r\n                           2,                                                                        // gain\r\n                           rate,                                                                     // PID cycle frequency\r\n                           getX10WattageLimits());\r\n#endif\r\n}\r\n\r\n/*\r\n * Detection of thermal runaway\r\n * The goal of this is to handle cases where something has gone wrong\r\n * 1. The tip MOSFET is broken, so power is being constantly applied to the tip\r\n * a. This can show as temp being stuck at max\r\n * b. Or temp rising when the heater is off\r\n * 2. Broken temperature sense\r\n * a. Temp is stuck at a value\r\n * These boil down to either a constantly rising temperature or a temperature that is stuck at a value\r\n * These are both covered; but looking at the eye/delta between min and max temp seen\r\n */\r\nvoid detectThermalRunaway(const TemperatureType_t currentTipTempInC, const uint32_t x10WattsOut) {\r\n\r\n  static TemperatureType_t tiptempMin         = 0xFFFF; // Min tip temp seen\r\n  static TemperatureType_t tipTempMax         = 0;      // Max tip temp seen while heater is on\r\n  bool                     thisCycleIsHeating = x10WattsOut > 0;\r\n  static TickType_t        heatCycleStart     = 0;\r\n\r\n  static bool haveSeenDelta = false;\r\n\r\n  // Check for readings being pegged at the top of the ADC while the heater is off\r\n  if (!thisCycleIsHeating && (getTipRawTemp(0) > (ADC_MAX_READING - 8)) && heaterThermalRunawayCounter < 255) {\r\n    heaterThermalRunawayCounter++;\r\n  }\r\n\r\n  if (haveSeenDelta) {\r\n    return;\r\n  }\r\n\r\n  if (currentTipTempInC < tiptempMin) {\r\n    tiptempMin = currentTipTempInC;\r\n  }\r\n  if (thisCycleIsHeating && currentTipTempInC > tipTempMax) {\r\n    tipTempMax = currentTipTempInC;\r\n  }\r\n  if (thisCycleIsHeating) {\r\n    if (heatCycleStart == 0) {\r\n      heatCycleStart = xTaskGetTickCount();\r\n    }\r\n  } else {\r\n    heatCycleStart = 0;\r\n  }\r\n\r\n  if ((xTaskGetTickCount() - heatCycleStart) > (THERMAL_RUNAWAY_TIME_SEC * TICKS_SECOND)) {\r\n    if (tipTempMax > tiptempMin) {\r\n      // Have been heating for min seconds, check if the delta is large enough\r\n      TemperatureType_t delta = tipTempMax - tiptempMin;\r\n      haveSeenDelta           = true;\r\n\r\n      if (delta < THERMAL_RUNAWAY_TEMP_C && heaterThermalRunawayCounter < 255) {\r\n        heaterThermalRunawayCounter++;\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nint32_t getX10WattageLimits() {\r\n  int32_t limit = availableW10(0);\r\n\r\n  if (getSettingValue(SettingsOptions::PowerLimit) && limit > (getSettingValue(SettingsOptions::PowerLimit) * 10)) {\r\n    limit = getSettingValue(SettingsOptions::PowerLimit) * 10;\r\n  }\r\n  if (powerSupplyWattageLimit && limit > powerSupplyWattageLimit * 10) {\r\n    limit = powerSupplyWattageLimit * 10;\r\n  }\r\n  return limit;\r\n}\r\n\r\nvoid setOutputx10WattsViaFilters(int32_t x10WattsOut) {\r\n  static TickType_t lastPowerPulseStart = 0;\r\n  static TickType_t lastPowerPulseEnd   = 0;\r\n#ifdef SLEW_LIMIT\r\n  static int32_t x10WattsOutLast = 0;\r\n#endif\r\n\r\n  // If the user turns on the option of using an occasional pulse to keep the power bank on\r\n  if (getSettingValue(SettingsOptions::KeepAwakePulse)) {\r\n    const TickType_t powerPulseWait = powerPulseWaitUnit * getSettingValue(SettingsOptions::KeepAwakePulseWait);\r\n    if (xTaskGetTickCount() - lastPowerPulseStart > powerPulseWait) {\r\n      const TickType_t powerPulseDuration = powerPulseDurationUnit * getSettingValue(SettingsOptions::KeepAwakePulseDuration);\r\n      lastPowerPulseStart                 = xTaskGetTickCount();\r\n      lastPowerPulseEnd                   = lastPowerPulseStart + powerPulseDuration;\r\n    }\r\n\r\n    // If current PID is less than the pulse level, check if we want to constrain to the pulse as the floor\r\n    if (x10WattsOut < getSettingValue(SettingsOptions::KeepAwakePulse) && xTaskGetTickCount() < lastPowerPulseEnd) {\r\n      x10WattsOut = getSettingValue(SettingsOptions::KeepAwakePulse);\r\n    }\r\n  }\r\n\r\n  // Secondary safety check to forcefully disable header when within ADC noise of top of ADC\r\n  if (getTipRawTemp(0) > (0x7FFF - 32)) {\r\n    x10WattsOut = 0;\r\n  }\r\n  if (heaterThermalRunawayCounter > 8) {\r\n    x10WattsOut = 0;\r\n  }\r\n#ifdef SLEW_LIMIT\r\n  if (x10WattsOut - x10WattsOutLast > SLEW_LIMIT) {\r\n    x10WattsOut = x10WattsOutLast + SLEW_LIMIT;\r\n  }\r\n  if (x10WattsOut < 0) {\r\n    x10WattsOut = 0;\r\n  }\r\n  x10WattsOutLast = x10WattsOut;\r\n#endif\r\n  setTipX10Watts(x10WattsOut);\r\n  resetWatchdog();\r\n}\r\n"
  },
  {
    "path": "source/Core/Threads/POWThread.cpp",
    "content": "/*\r\n * POWThread.cpp\r\n *\r\n *  Created on: 16 Jan 2021\r\n *      Author: Ralim\r\n */\r\n\r\n#include \"BSP.h\"\r\n#include \"FS2711.hpp\"\r\n#include \"FreeRTOS.h\"\r\n#include \"HUB238.hpp\"\r\n#include \"QC3.h\"\r\n#include \"Settings.h\"\r\n#include \"USBPD.h\"\r\n#include \"cmsis_os.h\"\r\n#include \"configuration.h\"\r\n#include \"main.hpp\"\r\n#include \"stdbool.h\"\r\n#include \"stdlib.h\"\r\n#include \"task.h\"\r\n\r\n// Small worker thread to handle power (PD + QC) related steps\r\n\r\nvoid startPOWTask(void const *argument __unused) {\r\n\r\n  // Init any other misc sensors\r\n  postRToSInit();\r\n  while (preStartChecksDone() == 0) {\r\n    osDelay(3);\r\n  }\r\n  // You have to run this once we are willing to answer PD messages\r\n  // Setting up too early can mean that we miss the ~20ms window to respond on some chargers\r\n#ifdef POW_PD\r\n  USBPowerDelivery::start();\r\n  // Crank the handle at boot until we are stable and waiting for IRQ\r\n  USBPowerDelivery::step();\r\n#endif\r\n#if POW_PD_EXT == 2\r\n  FS2711::start();\r\n  FS2711::negotiate();\r\n#endif\r\n\r\n  BaseType_t res;\r\n  for (;;) {\r\n    res = pdFALSE;\r\n    // While the interrupt is low, dont delay\r\n    /*This is due to a possible race condition, where:\r\n     * IRQ fires\r\n     * We read interrupt register but dont see the Good CRC\r\n     * Then Good CRC is set while reading it out (racing on I2C read)\r\n     * Then we would sleep as nothing to do, but 100ms> 20ms power supply typical timeout\r\n     */\r\n    if (!getFUS302IRQLow()) {\r\n      res = xTaskNotifyWait(0x0, 0xFFFFFF, NULL, TICKS_100MS / 2);\r\n    }\r\n\r\n#ifdef POW_PD\r\n    if (res != pdFALSE || getFUS302IRQLow()) {\r\n      USBPowerDelivery::IRQOccured();\r\n    }\r\n    USBPowerDelivery::PPSTimerCallback();\r\n    USBPowerDelivery::step();\r\n\r\n#else\r\n    (void)res;\r\n#endif\r\n#if POW_PD_EXT == 1\r\n    hub238_check_negotiation();\r\n#endif\r\n#if POW_PD_EXT == 2\r\n    FS2711::negotiate();\r\n#endif\r\n    power_check();\r\n  }\r\n}\r\n"
  },
  {
    "path": "source/Core/Threads/UI/README.md",
    "content": "# UI\n\nThe User interface for IronOS is split into two halves in these folders.\nThe `logic` folder contains the `.cpp` files that implement the logic of each mode, this should handle button events and any logic.\nThe `drawing` folder contains the `.cpp` files that implement just the screen drawing for each mode. These are further subdivided by the screen _types_.\n"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/draw_cjc_sampling.cpp",
    "content": "#include \"ui_drawing.hpp\"\n#ifdef OLED_128x32\nvoid ui_draw_cjc_sampling(const uint8_t num_dots) {\n  OLED::setCursor(0, 0);\n  OLED::print(translatedString(Tr->CJCCalibrating), FontStyle::SMALL);\n  OLED::setCursor(0, 8);\n  OLED::print(SmallSymbolDot, FontStyle::SMALL);\n  for (uint8_t x = 0; x < num_dots; x++) {\n    OLED::print(SmallSymbolDot, FontStyle::SMALL);\n  }\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/draw_debug_menu.cpp",
    "content": "#include \"OperatingModes.h\"\n#include \"TipThermoModel.h\"\n#include \"main.hpp\"\n#include \"ui_drawing.hpp\"\n\n#ifdef OLED_128x32\nextern osThreadId GUITaskHandle;\nextern osThreadId MOVTaskHandle;\nextern osThreadId PIDTaskHandle;\n\nvoid ui_draw_debug_menu(const uint8_t item_number) {\n  OLED::setCursor(0, 0);                                   // Position the cursor at the 0,0 (top left)\n  OLED::print(SmallSymbolVersionNumber, FontStyle::SMALL); // Print version number\n  OLED::setCursor(0, 8);                                   // second line\n  OLED::print(DebugMenu[item_number], FontStyle::SMALL);\n  switch (item_number) {\n  case 0: // Build Date\n    break;\n  case 1: // Device ID\n  {\n    uint64_t id = getDeviceID();\n#ifdef DEVICE_HAS_VALIDATION_CODE\n    // If device has validation code; then we want to take over both lines of the screen\n    OLED::clearScreen();   // Ensure the buffer starts clean\n    OLED::setCursor(0, 0); // Position the cursor at the 0,0 (top left)\n    OLED::print(DebugMenu[item_number], FontStyle::SMALL);\n    OLED::drawHex(getDeviceValidation(), FontStyle::SMALL, 8);\n    OLED::setCursor(0, 8); // second line\n#endif\n    OLED::drawHex((uint32_t)(id >> 32), FontStyle::SMALL, 8);\n    OLED::drawHex((uint32_t)(id & 0xFFFFFFFF), FontStyle::SMALL, 8);\n  } break;\n  case 2: // ACC Type\n    OLED::print(AccelTypeNames[(int)DetectedAccelerometerVersion], FontStyle::SMALL);\n    break;\n  case 3: // Power Negotiation Status\n    OLED::print(PowerSourceNames[getPowerSourceNumber()], FontStyle::SMALL);\n    break;\n  case 4: // Input Voltage\n    printVoltage();\n    break;\n  case 5: // Temp in °C\n    OLED::printNumber(TipThermoModel::getTipInC(), 6, FontStyle::SMALL);\n    break;\n  case 6: // Handle Temp in °C\n    OLED::printNumber(getHandleTemperature(0) / 10, 6, FontStyle::SMALL);\n    OLED::print(SmallSymbolDot, FontStyle::SMALL);\n    OLED::printNumber(getHandleTemperature(0) % 10, 1, FontStyle::SMALL);\n    break;\n  case 7: // Max Temp Limit in °C\n    OLED::printNumber(TipThermoModel::getTipMaxInC(), 6, FontStyle::SMALL);\n    break;\n  case 8: // System Uptime\n    OLED::printNumber(xTaskGetTickCount() / TICKS_100MS, 8, FontStyle::SMALL);\n    break;\n  case 9: // Movement Timestamp\n    OLED::printNumber(lastMovementTime / TICKS_100MS, 8, FontStyle::SMALL);\n    break;\n  case 10:                                                              // Tip Resistance in Ω\n    OLED::printNumber(getTipResistanceX10() / 10, 6, FontStyle::SMALL); // large to pad over so that we cover ID left overs\n    OLED::print(SmallSymbolDot, FontStyle::SMALL);\n    OLED::printNumber(getTipResistanceX10() % 10, 1, FontStyle::SMALL);\n    break;\n  case 11: // Raw Tip in µV\n    OLED::printNumber(TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0), true), 8, FontStyle::SMALL);\n    break;\n  case 12: // Tip Cold Junction Compensation Offset in µV\n    OLED::printNumber(getSettingValue(SettingsOptions::CalibrationOffset), 8, FontStyle::SMALL);\n    break;\n  case 13: // High Water Mark for GUI\n    OLED::printNumber(uxTaskGetStackHighWaterMark(GUITaskHandle), 8, FontStyle::SMALL);\n    break;\n  case 14: // High Water Mark for Movement Task\n    OLED::printNumber(uxTaskGetStackHighWaterMark(MOVTaskHandle), 8, FontStyle::SMALL);\n    break;\n  case 15: // High Water Mark for PID Task\n    OLED::printNumber(uxTaskGetStackHighWaterMark(PIDTaskHandle), 8, FontStyle::SMALL);\n    break;\n    break;\n#ifdef HALL_SENSOR\n  case 16: // Raw Hall Effect Value\n  {\n    int16_t hallEffectStrength = getRawHallEffect();\n    if (hallEffectStrength < 0) {\n      hallEffectStrength = -hallEffectStrength;\n    }\n    OLED::printNumber(hallEffectStrength, 6, FontStyle::SMALL);\n  } break;\n#endif\n\n  default:\n    break;\n  }\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/draw_homescreen_detailed.cpp",
    "content": "#include \"ui_drawing.hpp\"\n#ifdef OLED_128x32\n\nextern uint8_t buttonAF[sizeof(buttonA)];\nextern uint8_t buttonBF[sizeof(buttonB)];\nextern uint8_t disconnectedTipF[sizeof(disconnectedTip)];\n\nvoid ui_draw_homescreen_detailed(TemperatureType_t tipTemp) {\n  if (isTipDisconnected()) {\n    if (OLED::getRotation()) {\n      // in right handed mode we want to draw over the first part\n      OLED::drawArea(54, 0, 56, 32, disconnectedTipF);\n    } else {\n      OLED::drawArea(0, 0, 56, 32, disconnectedTip);\n    }\n    if (OLED::getRotation()) {\n      OLED::setCursor(-1, 0);\n    } else {\n      OLED::setCursor(56, 0);\n    }\n    uint32_t Vlt = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0);\n    OLED::printNumber(Vlt / 10, 2, FontStyle::LARGE);\n    OLED::print(LargeSymbolDot, FontStyle::LARGE);\n    OLED::printNumber(Vlt % 10, 1, FontStyle::LARGE);\n    if (OLED::getRotation()) {\n      OLED::setCursor(48, 8);\n    } else {\n      OLED::setCursor(91, 8);\n    }\n    OLED::print(SmallSymbolVolts, FontStyle::SMALL);\n  } else {\n    if (!(getSettingValue(SettingsOptions::CoolingTempBlink) && (tipTemp > 55) && (xTaskGetTickCount() % 1000 < 300))) {\n      // Blink temp if setting enable and temp < 55°\n      // 1000 tick/sec\n      // OFF 300ms ON 700ms\n      ui_draw_tip_temperature(true, FontStyle::LARGE); // draw in the temp\n    }\n    if (OLED::getRotation()) {\n      OLED::setCursor(6, 0);\n    } else {\n      OLED::setCursor(73, 0); // top right\n    }\n    // draw set temp\n    OLED::printNumber(getSettingValue(SettingsOptions::SolderingTemp), 3, FontStyle::SMALL);\n\n    OLED::printSymbolDeg(FontStyle::SMALL);\n\n    if (OLED::getRotation()) {\n      OLED::setCursor(0, 8);\n    } else {\n      OLED::setCursor(67, 8); // bottom right\n    }\n    printVoltage(); // draw voltage then symbol (v)\n    OLED::print(SmallSymbolVolts, FontStyle::SMALL);\n  }\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/draw_homescreen_simplified.cpp",
    "content": "#include \"ui_drawing.hpp\"\n\n#ifdef OLED_128x32\n\nextern uint8_t buttonAF[sizeof(buttonA)];\nextern uint8_t buttonBF[sizeof(buttonB)];\nextern uint8_t disconnectedTipF[sizeof(disconnectedTip)];\n\nvoid ui_draw_homescreen_simplified(TemperatureType_t tipTemp) {\n  bool tempOnDisplay          = false;\n  bool tipDisconnectedDisplay = false;\n  if (OLED::getRotation()) {\n    OLED::drawArea(68, 0, 56, 32, buttonAF);\n    OLED::drawArea(12, 0, 56, 32, buttonBF);\n    OLED::setCursor(0, 0);\n    ui_draw_power_source_icon();\n  } else {\n    OLED::drawArea(0, 0, 56, 32, buttonA);  // Needs to be flipped so button ends up\n    OLED::drawArea(58, 0, 56, 32, buttonB); // on right side of screen\n    OLED::setCursor(116, 0);\n    ui_draw_power_source_icon();\n  }\n  tipDisconnectedDisplay = false;\n  if (tipTemp > 55) {\n    tempOnDisplay = true;\n  } else if (tipTemp < 45) {\n    tempOnDisplay = false;\n  }\n  if (isTipDisconnected()) {\n    tempOnDisplay          = false;\n    tipDisconnectedDisplay = true;\n  }\n  if (tempOnDisplay || tipDisconnectedDisplay) {\n    // draw temp over the start soldering button\n    // Location changes on screen rotation\n    if (OLED::getRotation()) {\n      // in right handed mode we want to draw over the first part\n      OLED::fillArea(68, 0, 56, 32, 0); // clear the area for the temp\n      OLED::setCursor(56, 0);\n    } else {\n      OLED::fillArea(0, 0, 56, 32, 0); // clear the area\n      OLED::setCursor(0, 0);\n    }\n    // If we have a tip connected draw the temp, if not we leave it blank\n    if (!tipDisconnectedDisplay) {\n      // draw in the temp\n      if (!(getSettingValue(SettingsOptions::CoolingTempBlink) && (xTaskGetTickCount() % 1000 < 300))) {\n        ui_draw_tip_temperature(false, FontStyle::LARGE); // draw in the temp\n      }\n    } else {\n      // Draw in missing tip symbol\n      if (OLED::getRotation()) {\n        // in right handed mode we want to draw over the first part\n        OLED::drawArea(54, 0, 56, 32, disconnectedTipF);\n      } else {\n        OLED::drawArea(0, 0, 56, 32, disconnectedTip);\n      }\n    }\n  }\n}\n\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/draw_power_source_icon.cpp",
    "content": "#include \"ui_drawing.hpp\"\n#ifdef OLED_128x32\nvoid ui_draw_power_source_icon(void) {\n#if defined(POW_PD) || defined(POW_QC) || defined(POW_PD_EXT)\n  if (!getIsPoweredByDCIN()) {\n    // On non-DC inputs we replace this symbol with the voltage we are operating on\n    // If <9V then show single digit, if not show dual small ones vertically stacked\n    uint16_t V = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0);\n    if (V % 10 >= 5) {\n      V = (V / 10) + 1; // round up\n    } else {\n      V = V / 10;\n    }\n    int16_t xPos = OLED::getCursorX();\n    OLED::printNumber(V / 10, 1, FontStyle::LARGE);\n    OLED::setCursor(xPos, 16);\n    OLED::printNumber(V % 10, 1, FontStyle::LARGE);\n    return;\n  }\n#endif\n#ifdef POW_DC\n  if (getSettingValue(SettingsOptions::MinDCVoltageCells)) {\n    // User is on a lithium battery\n    // we need to calculate which of the 10 levels they are on\n    uint8_t  cellCount = getSettingValue(SettingsOptions::MinDCVoltageCells) + 2;\n    uint32_t cellV     = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0) / cellCount;\n    // Should give us approx cell voltage X10\n    // Range is 42 -> Minimum voltage setting (systemSettings.minVoltageCells) = 9 steps therefore we will use battery 0-9\n    if (cellV < getSettingValue(SettingsOptions::MinVoltageCells)) {\n      cellV = getSettingValue(SettingsOptions::MinVoltageCells);\n    }\n    cellV -= getSettingValue(SettingsOptions::MinVoltageCells); // Should leave us a number of 0-9\n    if (cellV > 9) {\n      cellV = 9;\n    }\n    OLED::drawBattery(cellV + 1);\n  } else {\n    OLED::drawSymbol(15); // Draw the DC Logo\n  }\n#endif\n}\n\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/draw_profile_advanced.cpp",
    "content": "#include \"ui_drawing.hpp\"\n\n#ifdef OLED_128x32\nvoid ui_draw_soldering_profile_advanced(TemperatureType_t tipTemp, TemperatureType_t profileCurrentTargetTemp, uint32_t phaseElapsedSeconds, uint32_t phase, const uint32_t phaseTimeGoal) {\n  // print temperature\n  if (OLED::getRotation()) {\n    OLED::setCursor(48, 0);\n  } else {\n    OLED::setCursor(0, 0);\n  }\n\n  OLED::printNumber(tipTemp, 3, FontStyle::SMALL);\n  OLED::print(SmallSymbolSlash, FontStyle::SMALL);\n  OLED::printNumber(profileCurrentTargetTemp, 3, FontStyle::SMALL);\n\n  if (getSettingValue(SettingsOptions::TemperatureInF)) {\n    OLED::print(SmallSymbolDegF, FontStyle::SMALL);\n  } else {\n    OLED::print(SmallSymbolDegC, FontStyle::SMALL);\n  }\n\n  // print phase\n  if (phase > 0 && phase <= getSettingValue(SettingsOptions::ProfilePhases)) {\n    if (OLED::getRotation()) {\n      OLED::setCursor(36, 0);\n    } else {\n      OLED::setCursor(55, 0);\n    }\n    OLED::printNumber(phase, 1, FontStyle::SMALL);\n  }\n\n  // print time progress / preheat / cooldown\n  if (OLED::getRotation()) {\n    OLED::setCursor(42, 16);\n  } else {\n    OLED::setCursor(0, 16);\n  }\n\n  if (phase == 0) {\n    OLED::print(translatedString(Tr->ProfilePreheatString), FontStyle::SMALL);\n  } else if (phase > getSettingValue(SettingsOptions::ProfilePhases)) {\n    OLED::print(translatedString(Tr->ProfileCooldownString), FontStyle::SMALL);\n  } else {\n    OLED::printNumber(phaseElapsedSeconds / 60, 1, FontStyle::SMALL);\n    OLED::print(SmallSymbolColon, FontStyle::SMALL);\n    OLED::printNumber(phaseElapsedSeconds % 60, 2, FontStyle::SMALL, false);\n\n    OLED::print(SmallSymbolSlash, FontStyle::SMALL);\n\n    // blink if we can't keep up with the time goal\n    if (phaseElapsedSeconds < phaseTimeGoal + 2 || (xTaskGetTickCount() / TICKS_SECOND) % 2 == 0) {\n      OLED::printNumber(phaseTimeGoal / 60, 1, FontStyle::SMALL);\n      OLED::print(SmallSymbolColon, FontStyle::SMALL);\n      OLED::printNumber(phaseTimeGoal % 60, 2, FontStyle::SMALL, false);\n    }\n  }\n}\n\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/draw_soldering_basic_status.cpp",
    "content": "#include \"power.hpp\"\n#include \"ui_drawing.hpp\"\n#ifdef OLED_128x32\n\nvoid ui_draw_soldering_basic_status(bool boostModeOn) {\n  OLED::setCursor(0, 0);\n  // We switch the layout direction depending on the orientation of the oled\n  if (OLED::getRotation()) {\n    // battery\n    ui_draw_power_source_icon();\n    // Space out gap between battery <-> temp\n    OLED::print(LargeSymbolSpace, FontStyle::LARGE);\n    // Draw current tip temp\n    ui_draw_tip_temperature(true, FontStyle::LARGE);\n\n    // We draw boost arrow if boosting,\n    // or else gap temp <-> heat indicator\n    if (boostModeOn) {\n      OLED::drawSymbol(2);\n    } else {\n      OLED::print(LargeSymbolSpace, FontStyle::LARGE);\n    }\n\n    // Draw heating/cooling symbols\n    OLED::drawHeatSymbol(X10WattsToPWM(x10WattHistory.average()));\n  } else {\n    // Draw heating/cooling symbols\n    OLED::drawHeatSymbol(X10WattsToPWM(x10WattHistory.average()));\n    // We draw boost arrow if boosting,\n    // or else gap temp <-> heat indicator\n    if (boostModeOn) {\n      OLED::drawSymbol(2);\n    } else {\n      OLED::print(LargeSymbolSpace, FontStyle::LARGE);\n    }\n    // Draw current tip temp\n    ui_draw_tip_temperature(true, FontStyle::LARGE);\n    // Space out gap between battery <-> temp\n    OLED::print(LargeSymbolSpace, FontStyle::LARGE);\n\n    ui_draw_power_source_icon();\n  }\n}\n\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/draw_soldering_power_status.cpp",
    "content": "#include \"power.hpp\"\n#include \"ui_drawing.hpp\"\n#include <OperatingModes.h>\n#ifdef OLED_128x32\n\nvoid ui_draw_soldering_power_status(bool boost_mode_on) {\n  if (OLED::getRotation()) {\n    OLED::setCursor(50, 0);\n  } else {\n    OLED::setCursor(-1, 0);\n  }\n\n  ui_draw_tip_temperature(true, FontStyle::LARGE);\n\n  if (boost_mode_on) { // Boost mode is on\n    if (OLED::getRotation()) {\n      OLED::setCursor(34, 0);\n    } else {\n      OLED::setCursor(50, 0);\n    }\n    OLED::print(LargeSymbolPlus, FontStyle::LARGE);\n  } else {\n#ifndef NO_SLEEP_MODE\n    if (getSettingValue(SettingsOptions::Sensitivity) && getSettingValue(SettingsOptions::SleepTime)) {\n      if (OLED::getRotation()) {\n        OLED::setCursor(32, 0);\n      } else {\n        OLED::setCursor(47, 0);\n      }\n      printCountdownUntilSleep(getSleepTimeout());\n    }\n#endif\n    if (OLED::getRotation()) {\n      OLED::setCursor(32, 8);\n    } else {\n      OLED::setCursor(47, 8);\n    }\n    OLED::print(PowerSourceNames[getPowerSourceNumber()], FontStyle::SMALL, 2);\n  }\n\n  if (OLED::getRotation()) {\n    OLED::setCursor(0, 0);\n  } else {\n    OLED::setCursor(67, 0);\n  }\n  // Print wattage\n  {\n    uint32_t x10Watt = x10WattHistory.average();\n    if (x10Watt > 999) {\n      // If we exceed 99.9W we drop the decimal place to keep it all fitting\n      OLED::print(SmallSymbolSpace, FontStyle::SMALL);\n      OLED::printNumber(x10WattHistory.average() / 10, 3, FontStyle::SMALL);\n    } else {\n      OLED::printNumber(x10WattHistory.average() / 10, 2, FontStyle::SMALL);\n      OLED::print(SmallSymbolDot, FontStyle::SMALL);\n      OLED::printNumber(x10WattHistory.average() % 10, 1, FontStyle::SMALL);\n    }\n    OLED::print(SmallSymbolWatts, FontStyle::SMALL);\n  }\n\n  if (OLED::getRotation()) {\n    OLED::setCursor(0, 8);\n  } else {\n    OLED::setCursor(67, 8);\n  }\n  printVoltage();\n  OLED::print(SmallSymbolVolts, FontStyle::SMALL);\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/draw_soldering_sleep_mode.cpp",
    "content": "#include \"ui_drawing.hpp\"\n\n#ifdef OLED_128x32\nvoid ui_draw_soldering_detailed_sleep(TemperatureType_t tipTemp) {\n\n  OLED::clearScreen();\n  OLED::setCursor(0, 0);\n  OLED::print(translatedString(Tr->SleepingAdvancedString), FontStyle::SMALL);\n  OLED::setCursor(0, 8);\n  OLED::print(translatedString(Tr->SleepingTipAdvancedString), FontStyle::SMALL);\n  OLED::printNumber(tipTemp, 3, FontStyle::SMALL);\n  if (getSettingValue(SettingsOptions::TemperatureInF)) {\n    OLED::print(SmallSymbolDegF, FontStyle::SMALL);\n  } else {\n    OLED::print(SmallSymbolDegC, FontStyle::SMALL);\n  }\n\n  OLED::print(SmallSymbolSpace, FontStyle::SMALL);\n  printVoltage();\n  OLED::print(SmallSymbolVolts, FontStyle::SMALL);\n\n  OLED::refresh();\n}\n\nvoid ui_draw_soldering_basic_sleep(TemperatureType_t tipTemp) {\n\n  OLED::clearScreen();\n  OLED::setCursor(0, 0);\n\n  OLED::print(LargeSymbolSleep, FontStyle::LARGE);\n  OLED::printNumber(tipTemp, 3, FontStyle::LARGE);\n  OLED::printSymbolDeg(FontStyle::EXTRAS);\n\n  OLED::refresh();\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/draw_temperature_change.cpp",
    "content": "#include \"ui_drawing.hpp\"\n\n#ifdef OLED_128x32\nvoid ui_draw_temperature_change(void) {\n\n  OLED::setCursor(8, 8);\n  if (OLED::getRotation()) {\n    OLED::print(getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled) ? LargeSymbolPlus : LargeSymbolMinus, FontStyle::LARGE);\n  } else {\n    OLED::print(getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled) ? LargeSymbolMinus : LargeSymbolPlus, FontStyle::LARGE);\n  }\n\n  OLED::print(LargeSymbolSpace, FontStyle::LARGE);\n  OLED::printNumber(getSettingValue(SettingsOptions::SolderingTemp), 3, FontStyle::LARGE);\n  OLED::printSymbolDeg(FontStyle::EXTRAS);\n  OLED::print(LargeSymbolSpace, FontStyle::LARGE);\n  if (OLED::getRotation()) {\n    OLED::print(getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled) ? LargeSymbolMinus : LargeSymbolPlus, FontStyle::LARGE);\n  } else {\n    OLED::print(getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled) ? LargeSymbolPlus : LargeSymbolMinus, FontStyle::LARGE);\n  }\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/draw_tip_temperature.cpp",
    "content": "#include \"OperatingModeUtilities.h\"\n#include \"OperatingModes.h\"\n#include \"SolderingCommon.h\"\n#include \"TipThermoModel.h\"\n#ifdef OLED_128x32\n\nvoid ui_draw_tip_temperature(bool symbol, const FontStyle font) {\n  // Draw tip temp handling unit conversion & tolerance near setpoint\n  TemperatureType_t Temp = getTipTemp();\n\n  OLED::printNumber(Temp, 3, font); // Draw the tip temp out\n  if (symbol) {\n    // For big font, can draw nice symbols, otherwise fall back to chars\n    OLED::printSymbolDeg(font == FontStyle::LARGE ? FontStyle::EXTRAS : font);\n  }\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/draw_usb_pd_debug.cpp",
    "content": "#include \"ui_drawing.hpp\"\n#ifdef OLED_128x32\n\nvoid ui_draw_usb_pd_debug_state(const uint16_t vbus_sense_state, const uint8_t stateNumber) {\n  OLED::setCursor(0, 0);                             // Position the cursor at the 0,0 (top left)\n  OLED::print(SmallSymbolPDDebug, FontStyle::SMALL); // Print Title\n  OLED::setCursor(0, 8);                             // second line\n  // Print the PD state machine\n  OLED::print(SmallSymbolState, FontStyle::SMALL);\n  OLED::print(SmallSymbolSpace, FontStyle::SMALL);\n  OLED::printNumber(stateNumber, 2, FontStyle::SMALL, true);\n  OLED::print(SmallSymbolSpace, FontStyle::SMALL);\n\n  if (vbus_sense_state == 2) {\n    OLED::print(SmallSymbolNoVBus, FontStyle::SMALL);\n  } else if (vbus_sense_state == 1) {\n    OLED::print(SmallSymbolVBus, FontStyle::SMALL);\n  }\n}\n\nvoid ui_draw_usb_pd_debug_pdo(const uint8_t entry_num, const uint16_t min_voltage, const uint16_t max_voltage, const uint16_t current_a_x100, const uint16_t wattage) {\n\n  OLED::setCursor(0, 0);                                   // Position the cursor at the 0,0 (top left)\n  OLED::print(SmallSymbolPDDebug, FontStyle::SMALL);       // Print Title\n  OLED::setCursor(0, 8);                                   // second line\n  OLED::printNumber(entry_num, 2, FontStyle::SMALL, true); // print the entry number\n  OLED::print(SmallSymbolSpace, FontStyle::SMALL);\n  if (min_voltage > 0) {\n    OLED::printNumber(min_voltage, 2, FontStyle::SMALL, true); // print the voltage\n    OLED::print(SmallSymbolMinus, FontStyle::SMALL);\n  }\n  OLED::printNumber(max_voltage, 2, FontStyle::SMALL, true); // print the voltage\n  OLED::print(SmallSymbolVolts, FontStyle::SMALL);\n  OLED::print(SmallSymbolSpace, FontStyle::SMALL);\n  if (wattage) {\n    OLED::printNumber(wattage, 3, FontStyle::SMALL, true); // print the current in 0.1A res\n    OLED::print(SmallSymbolWatts, FontStyle::SMALL);\n  } else {\n    OLED::printNumber(current_a_x100 / 100, 2, FontStyle::SMALL, true); // print the current in 0.1A res\n    OLED::print(SmallSymbolDot, FontStyle::SMALL);\n    OLED::printNumber(current_a_x100 % 100, 2, FontStyle::SMALL, false); // print the current in 0.1A res\n    OLED::print(SmallSymbolAmps, FontStyle::SMALL);\n  }\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/draw_warning_undervoltage.cpp",
    "content": "#include \"ui_drawing.hpp\"\n#ifdef OLED_128x32\n\nvoid ui_draw_warning_undervoltage(void) {\n  OLED::clearScreen();\n  OLED::setCursor(0, 0);\n  if (getSettingValue(SettingsOptions::DetailedSoldering)) {\n    OLED::print(translatedString(Tr->UndervoltageString), FontStyle::SMALL);\n    OLED::setCursor(0, 8);\n    OLED::print(translatedString(Tr->InputVoltageString), FontStyle::SMALL);\n    printVoltage();\n    OLED::print(SmallSymbolVolts, FontStyle::SMALL);\n  } else {\n    OLED::print(translatedString(Tr->UVLOWarningString), FontStyle::LARGE);\n  }\n\n  OLED::refresh();\n  GUIDelay();\n  waitForButtonPress();\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/pre_render_assets.cpp",
    "content": "#include \"ui_drawing.hpp\"\n#ifdef OLED_128x32\n\nuint8_t buttonAF[sizeof(buttonA)];\nuint8_t buttonBF[sizeof(buttonB)];\nuint8_t disconnectedTipF[sizeof(disconnectedTip)];\n\nvoid ui_pre_render_assets(void) {\n  // Generate the flipped screen into ram for later use\n  // flipped is generated by flipping each row\n  for (int row = 0; row < 4; row++) {\n    for (int x = 0; x < 56; x++) {\n      buttonAF[(row * 56) + x]         = buttonA[(row * 56) + (41 - x)];\n      buttonBF[(row * 56) + x]         = buttonB[(row * 56) + (41 - x)];\n      disconnectedTipF[(row * 56) + x] = disconnectedTip[(row * 56) + (41 - x)];\n    }\n  }\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/printSleepCountdown.cpp",
    "content": "#include \"Buttons.hpp\"\n#include \"OperatingModeUtilities.h\"\n#ifdef OLED_128x32\nextern TickType_t lastMovementTime;\n#ifndef NO_SLEEP_MODE\nvoid printCountdownUntilSleep(int sleepThres) {\n  /*\n   * Print seconds or minutes (if > 99 seconds) until sleep\n   * mode is triggered.\n   */\n  TickType_t lastEventTime = lastButtonTime < lastMovementTime ? lastMovementTime : lastButtonTime;\n  TickType_t downCount     = sleepThres - xTaskGetTickCount() + lastEventTime;\n  if (downCount > (99 * TICKS_SECOND)) {\n    OLED::printNumber(downCount / 60000 + 1, 2, FontStyle::SMALL);\n    OLED::print(SmallSymbolMinutes, FontStyle::SMALL);\n  } else {\n    OLED::printNumber(downCount / 1000 + 1, 2, FontStyle::SMALL);\n    OLED::print(SmallSymbolSeconds, FontStyle::SMALL);\n  }\n}\n#endif\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/print_voltage.cpp",
    "content": "#include \"ui_drawing.hpp\"\n#ifdef OLED_128x32\n\nvoid printVoltage(void) {\n  uint32_t volt = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0);\n  OLED::printNumber(volt / 10, 2, FontStyle::SMALL);\n  OLED::print(SmallSymbolDot, FontStyle::SMALL);\n  OLED::printNumber(volt % 10, 1, FontStyle::SMALL);\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_128x32/show_warning.cpp",
    "content": "#include \"Buttons.hpp\"\n#include \"OperatingModeUtilities.h\"\n#include \"OperatingModes.h\"\n#ifdef OLED_128x32\nbool warnUser(const char *warning, const ButtonState buttons) {\n  OLED::clearScreen();\n  OLED::printWholeScreen(warning);\n  // Also timeout after 5 seconds\n  if ((xTaskGetTickCount() - lastButtonTime) > TICKS_SECOND * 5) {\n    return true;\n  }\n  return buttons != BUTTON_NONE;\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/draw_cjc_sampling.cpp",
    "content": "#include \"ui_drawing.hpp\"\n\n#ifdef OLED_96x16\nvoid ui_draw_cjc_sampling(const uint8_t num_dots) {\n  OLED::setCursor(0, 0);\n  OLED::print(translatedString(Tr->CJCCalibrating), FontStyle::SMALL);\n  OLED::setCursor(0, 8);\n  OLED::print(SmallSymbolDot, FontStyle::SMALL);\n  for (uint8_t x = 0; x < num_dots; x++) {\n    OLED::print(SmallSymbolDot, FontStyle::SMALL);\n  }\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/draw_debug_menu.cpp",
    "content": "#include \"OperatingModes.h\"\n#include \"TipThermoModel.h\"\n#include \"main.hpp\"\n#include \"ui_drawing.hpp\"\n#ifdef OLED_96x16\nextern osThreadId GUITaskHandle;\nextern osThreadId MOVTaskHandle;\nextern osThreadId PIDTaskHandle;\n\nvoid ui_draw_debug_menu(const uint8_t item_number) {\n  OLED::setCursor(0, 0);                                   // Position the cursor at the 0,0 (top left)\n  OLED::print(SmallSymbolVersionNumber, FontStyle::SMALL); // Print version number\n  OLED::setCursor(0, 8);                                   // second line\n  OLED::print(DebugMenu[item_number], FontStyle::SMALL);\n  switch (item_number) {\n  case 0: // Build Date\n    break;\n  case 1: // Device ID\n  {\n    uint64_t id = getDeviceID();\n#ifdef DEVICE_HAS_VALIDATION_CODE\n    // If device has validation code; then we want to take over both lines of the screen\n    OLED::clearScreen();   // Ensure the buffer starts clean\n    OLED::setCursor(0, 0); // Position the cursor at the 0,0 (top left)\n    OLED::print(DebugMenu[item_number], FontStyle::SMALL);\n    OLED::drawHex(getDeviceValidation(), FontStyle::SMALL, 8);\n    OLED::setCursor(0, 8); // second line\n#endif\n    OLED::drawHex((uint32_t)(id >> 32), FontStyle::SMALL, 8);\n    OLED::drawHex((uint32_t)(id & 0xFFFFFFFF), FontStyle::SMALL, 8);\n  } break;\n  case 2: // ACC Type\n    OLED::print(AccelTypeNames[(int)DetectedAccelerometerVersion], FontStyle::SMALL);\n    break;\n  case 3: // Power Negotiation Status\n    OLED::print(PowerSourceNames[getPowerSourceNumber()], FontStyle::SMALL);\n    break;\n  case 4: // Input Voltage\n    printVoltage();\n    break;\n  case 5: // Temp in °C\n    OLED::printNumber(TipThermoModel::getTipInC(), 6, FontStyle::SMALL);\n    break;\n  case 6: // Handle Temp in °C\n    OLED::printNumber(getHandleTemperature(0) / 10, 6, FontStyle::SMALL);\n    OLED::print(SmallSymbolDot, FontStyle::SMALL);\n    OLED::printNumber(getHandleTemperature(0) % 10, 1, FontStyle::SMALL);\n    break;\n  case 7: // Max Temp Limit in °C\n    OLED::printNumber(TipThermoModel::getTipMaxInC(), 6, FontStyle::SMALL);\n    break;\n  case 8: // System Uptime\n    OLED::printNumber(xTaskGetTickCount() / TICKS_100MS, 8, FontStyle::SMALL);\n    break;\n  case 9: // Movement Timestamp\n    OLED::printNumber(lastMovementTime / TICKS_100MS, 8, FontStyle::SMALL);\n    break;\n  case 10:                                                              // Tip Resistance in Ω\n    OLED::printNumber(getTipResistanceX10() / 10, 6, FontStyle::SMALL); // large to pad over so that we cover ID left overs\n    OLED::print(SmallSymbolDot, FontStyle::SMALL);\n    OLED::printNumber(getTipResistanceX10() % 10, 1, FontStyle::SMALL);\n    break;\n  case 11: // Raw Tip in µV\n    OLED::printNumber(TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0), true), 8, FontStyle::SMALL);\n    break;\n  case 12: // Tip Cold Junction Compensation Offset in µV\n    OLED::printNumber(getSettingValue(SettingsOptions::CalibrationOffset), 8, FontStyle::SMALL);\n    break;\n  case 13: // High Water Mark for GUI\n    OLED::printNumber(uxTaskGetStackHighWaterMark(GUITaskHandle), 8, FontStyle::SMALL);\n    break;\n  case 14: // High Water Mark for Movement Task\n    OLED::printNumber(uxTaskGetStackHighWaterMark(MOVTaskHandle), 8, FontStyle::SMALL);\n    break;\n  case 15: // High Water Mark for PID Task\n    OLED::printNumber(uxTaskGetStackHighWaterMark(PIDTaskHandle), 8, FontStyle::SMALL);\n    break;\n    break;\n#ifdef HALL_SENSOR\n  case 16: // Raw Hall Effect Value\n  {\n    int16_t hallEffectStrength = getRawHallEffect();\n    if (hallEffectStrength < 0) {\n      hallEffectStrength = -hallEffectStrength;\n    }\n    OLED::printNumber(hallEffectStrength, 6, FontStyle::SMALL);\n  } break;\n#endif\n\n  default:\n    break;\n  }\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/draw_homescreen_detailed.cpp",
    "content": "#include \"ui_drawing.hpp\"\n#ifdef OLED_96x16\n\nextern uint8_t buttonAF[sizeof(buttonA)];\nextern uint8_t buttonBF[sizeof(buttonB)];\nextern uint8_t disconnectedTipF[sizeof(disconnectedTip)];\n\nvoid ui_draw_homescreen_detailed(TemperatureType_t tipTemp) {\n  if (isTipDisconnected()) {\n    if (OLED::getRotation()) {\n      // in right handed mode we want to draw over the first part\n      OLED::drawArea(54, 0, 42, 16, disconnectedTipF);\n    } else {\n      OLED::drawArea(0, 0, 42, 16, disconnectedTip);\n    }\n    if (OLED::getRotation()) {\n      OLED::setCursor(-1, 0);\n    } else {\n      OLED::setCursor(42, 0);\n    }\n    uint32_t Vlt = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0);\n    OLED::printNumber(Vlt / 10, 2, FontStyle::LARGE);\n    OLED::print(LargeSymbolDot, FontStyle::LARGE);\n    OLED::printNumber(Vlt % 10, 1, FontStyle::LARGE);\n    if (OLED::getRotation()) {\n      OLED::setCursor(48, 8);\n    } else {\n      OLED::setCursor(91, 8);\n    }\n    OLED::print(SmallSymbolVolts, FontStyle::SMALL);\n  } else {\n    if (!(getSettingValue(SettingsOptions::CoolingTempBlink) && (tipTemp > 55) && (xTaskGetTickCount() % 1000 < 300))) {\n      // Blink temp if setting enable and temp < 55°\n      // 1000 tick/sec\n      // OFF 300ms ON 700ms\n      ui_draw_tip_temperature(true, FontStyle::LARGE); // draw in the temp\n    }\n    if (OLED::getRotation()) {\n      OLED::setCursor(6, 0);\n    } else {\n      OLED::setCursor(73, 0); // top right\n    }\n    // draw set temp\n    OLED::printNumber(getSettingValue(SettingsOptions::SolderingTemp), 3, FontStyle::SMALL);\n\n    OLED::printSymbolDeg(FontStyle::SMALL);\n\n    if (OLED::getRotation()) {\n      OLED::setCursor(0, 8);\n    } else {\n      OLED::setCursor(67, 8); // bottom right\n    }\n    printVoltage(); // draw voltage then symbol (v)\n    OLED::print(SmallSymbolVolts, FontStyle::SMALL);\n  }\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/draw_homescreen_simplified.cpp",
    "content": "#include \"ui_drawing.hpp\"\n\n#ifdef OLED_96x16\nextern uint8_t buttonAF[sizeof(buttonA)];\nextern uint8_t buttonBF[sizeof(buttonB)];\nextern uint8_t disconnectedTipF[sizeof(disconnectedTip)];\n\nvoid ui_draw_homescreen_simplified(TemperatureType_t tipTemp) {\n  bool tempOnDisplay          = false;\n  bool tipDisconnectedDisplay = false;\n  if (OLED::getRotation()) {\n    OLED::drawArea(54, 0, 42, 16, buttonAF);\n    OLED::drawArea(12, 0, 42, 16, buttonBF);\n    OLED::setCursor(0, 0);\n    ui_draw_power_source_icon();\n  } else {\n    OLED::drawArea(0, 0, 42, 16, buttonA);  // Needs to be flipped so button ends up\n    OLED::drawArea(42, 0, 42, 16, buttonB); // on right side of screen\n    OLED::setCursor(84, 0);\n    ui_draw_power_source_icon();\n  }\n  tipDisconnectedDisplay = false;\n  if (tipTemp > 55) {\n    tempOnDisplay = true;\n  } else if (tipTemp < 45) {\n    tempOnDisplay = false;\n  }\n  if (isTipDisconnected()) {\n    tempOnDisplay          = false;\n    tipDisconnectedDisplay = true;\n  }\n  if (tempOnDisplay || tipDisconnectedDisplay) {\n    // draw temp over the start soldering button\n    // Location changes on screen rotation\n    if (OLED::getRotation()) {\n      // in right handed mode we want to draw over the first part\n      OLED::fillArea(55, 0, 41, 16, 0); // clear the area for the temp\n      OLED::setCursor(56, 0);\n    } else {\n      OLED::fillArea(0, 0, 41, 16, 0); // clear the area\n      OLED::setCursor(0, 0);\n    }\n    // If we have a tip connected draw the temp, if not we leave it blank\n    if (!tipDisconnectedDisplay) {\n      // draw in the temp\n      if (!(getSettingValue(SettingsOptions::CoolingTempBlink) && (xTaskGetTickCount() % 1000 < 300))) {\n        ui_draw_tip_temperature(false, FontStyle::LARGE); // draw in the temp\n      }\n    } else {\n      // Draw in missing tip symbol\n\n      if (OLED::getRotation()) {\n        // in right handed mode we want to draw over the first part\n        OLED::drawArea(54, 0, 42, 16, disconnectedTipF);\n      } else {\n        OLED::drawArea(0, 0, 42, 16, disconnectedTip);\n      }\n    }\n  }\n}\n\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/draw_power_source_icon.cpp",
    "content": "#include \"ui_drawing.hpp\"\n#ifdef OLED_96x16\n\nvoid ui_draw_power_source_icon(void) {\n#if defined(POW_PD) || defined(POW_QC) || defined(POW_PD_EXT)\n  if (!getIsPoweredByDCIN()) {\n    // On non-DC inputs we replace this symbol with the voltage we are operating on\n    // If <9V then show single digit, if not show dual small ones vertically stacked\n    uint16_t V = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0);\n    if (V % 10 >= 5) {\n      V = (V / 10) + 1; // round up\n    } else {\n      V = V / 10;\n    }\n    if (V > 9) {\n      int16_t xPos = OLED::getCursorX();\n      OLED::printNumber(V / 10, 1, FontStyle::SMALL);\n      OLED::setCursor(xPos, 8);\n      OLED::printNumber(V % 10, 1, FontStyle::SMALL);\n      OLED::setCursor(xPos + 12, 0); // need to reset this as if we drew a wide char\n    } else {\n      OLED::printNumber(V, 1, FontStyle::LARGE);\n    }\n    return;\n  }\n#endif\n#ifdef POW_DC\n  if (getSettingValue(SettingsOptions::MinDCVoltageCells)) {\n    // User is on a lithium battery\n    // we need to calculate which of the 10 levels they are on\n    uint8_t  cellCount = getSettingValue(SettingsOptions::MinDCVoltageCells) + 2;\n    uint32_t cellV     = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0) / cellCount;\n    // Should give us approx cell voltage X10\n    // Range is 42 -> Minimum voltage setting (systemSettings.minVoltageCells) = 9 steps therefore we will use battery 0-9\n    if (cellV < getSettingValue(SettingsOptions::MinVoltageCells)) {\n      cellV = getSettingValue(SettingsOptions::MinVoltageCells);\n    }\n    cellV -= getSettingValue(SettingsOptions::MinVoltageCells); // Should leave us a number of 0-9\n    if (cellV > 9) {\n      cellV = 9;\n    }\n    OLED::drawBattery(cellV + 1);\n  } else {\n    OLED::drawSymbol(15); // Draw the DC Logo\n  }\n#endif\n}\n\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/draw_profile_advanced.cpp",
    "content": "#include \"ui_drawing.hpp\"\n#ifdef OLED_96x16\n\nvoid ui_draw_soldering_profile_advanced(TemperatureType_t tipTemp, TemperatureType_t profileCurrentTargetTemp, uint32_t phaseElapsedSeconds, uint32_t phase, const uint32_t phaseTimeGoal) {\n  // print temperature\n  if (OLED::getRotation()) {\n    OLED::setCursor(48, 0);\n  } else {\n    OLED::setCursor(0, 0);\n  }\n\n  OLED::printNumber(tipTemp, 3, FontStyle::SMALL);\n  OLED::print(SmallSymbolSlash, FontStyle::SMALL);\n  OLED::printNumber(profileCurrentTargetTemp, 3, FontStyle::SMALL);\n\n  if (getSettingValue(SettingsOptions::TemperatureInF)) {\n    OLED::print(SmallSymbolDegF, FontStyle::SMALL);\n  } else {\n    OLED::print(SmallSymbolDegC, FontStyle::SMALL);\n  }\n\n  // print phase\n  if (phase > 0 && phase <= getSettingValue(SettingsOptions::ProfilePhases)) {\n    if (OLED::getRotation()) {\n      OLED::setCursor(36, 0);\n    } else {\n      OLED::setCursor(55, 0);\n    }\n    OLED::printNumber(phase, 1, FontStyle::SMALL);\n  }\n\n  // print time progress / preheat / cooldown\n  if (OLED::getRotation()) {\n    OLED::setCursor(42, 8);\n  } else {\n    OLED::setCursor(0, 8);\n  }\n\n  if (phase == 0) {\n    OLED::print(translatedString(Tr->ProfilePreheatString), FontStyle::SMALL);\n  } else if (phase > getSettingValue(SettingsOptions::ProfilePhases)) {\n    OLED::print(translatedString(Tr->ProfileCooldownString), FontStyle::SMALL);\n  } else {\n    OLED::printNumber(phaseElapsedSeconds / 60, 1, FontStyle::SMALL);\n    OLED::print(SmallSymbolColon, FontStyle::SMALL);\n    OLED::printNumber(phaseElapsedSeconds % 60, 2, FontStyle::SMALL, false);\n\n    OLED::print(SmallSymbolSlash, FontStyle::SMALL);\n\n    // blink if we can't keep up with the time goal\n    if (phaseElapsedSeconds < phaseTimeGoal + 2 || (xTaskGetTickCount() / TICKS_SECOND) % 2 == 0) {\n      OLED::printNumber(phaseTimeGoal / 60, 1, FontStyle::SMALL);\n      OLED::print(SmallSymbolColon, FontStyle::SMALL);\n      OLED::printNumber(phaseTimeGoal % 60, 2, FontStyle::SMALL, false);\n    }\n  }\n}\n\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/draw_soldering_basic_status.cpp",
    "content": "#include \"power.hpp\"\n#include \"ui_drawing.hpp\"\n#ifdef OLED_96x16\n\nvoid ui_draw_soldering_basic_status(bool boostModeOn) {\n  OLED::setCursor(0, 0);\n  // We switch the layout direction depending on the orientation of the oled\n  if (OLED::getRotation()) {\n    // battery\n    ui_draw_power_source_icon();\n    // Space out gap between battery <-> temp\n    OLED::print(LargeSymbolSpace, FontStyle::LARGE);\n    // Draw current tip temp\n    ui_draw_tip_temperature(true, FontStyle::LARGE);\n\n    // We draw boost arrow if boosting,\n    // or else gap temp <-> heat indicator\n    if (boostModeOn) {\n      OLED::drawSymbol(2);\n    } else {\n      OLED::print(LargeSymbolSpace, FontStyle::LARGE);\n    }\n\n    // Draw heating/cooling symbols\n    OLED::drawHeatSymbol(X10WattsToPWM(x10WattHistory.average()));\n  } else {\n    // Draw heating/cooling symbols\n    OLED::drawHeatSymbol(X10WattsToPWM(x10WattHistory.average()));\n    // We draw boost arrow if boosting,\n    // or else gap temp <-> heat indicator\n    if (boostModeOn) {\n      OLED::drawSymbol(2);\n    } else {\n      OLED::print(LargeSymbolSpace, FontStyle::LARGE);\n    }\n    // Draw current tip temp\n    ui_draw_tip_temperature(true, FontStyle::LARGE);\n    // Space out gap between battery <-> temp\n    OLED::print(LargeSymbolSpace, FontStyle::LARGE);\n\n    ui_draw_power_source_icon();\n  }\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/draw_soldering_power_status.cpp",
    "content": "#include \"power.hpp\"\n#include \"ui_drawing.hpp\"\n#include <OperatingModes.h>\n#ifdef OLED_96x16\n\nvoid ui_draw_soldering_power_status(bool boost_mode_on) {\n  if (OLED::getRotation()) {\n    OLED::setCursor(50, 0);\n  } else {\n    OLED::setCursor(-1, 0);\n  }\n\n  ui_draw_tip_temperature(true, FontStyle::LARGE);\n\n  if (boost_mode_on) { // Boost mode is on\n    if (OLED::getRotation()) {\n      OLED::setCursor(34, 0);\n    } else {\n      OLED::setCursor(50, 0);\n    }\n    OLED::print(LargeSymbolPlus, FontStyle::LARGE);\n  } else {\n#ifndef NO_SLEEP_MODE\n    if (getSettingValue(SettingsOptions::Sensitivity) && getSettingValue(SettingsOptions::SleepTime)) {\n      if (OLED::getRotation()) {\n        OLED::setCursor(32, 0);\n      } else {\n        OLED::setCursor(47, 0);\n      }\n      printCountdownUntilSleep(getSleepTimeout());\n    }\n#endif\n    if (OLED::getRotation()) {\n      OLED::setCursor(32, 8);\n    } else {\n      OLED::setCursor(47, 8);\n    }\n    OLED::print(PowerSourceNames[getPowerSourceNumber()], FontStyle::SMALL, 2);\n  }\n\n  if (OLED::getRotation()) {\n    OLED::setCursor(0, 0);\n  } else {\n    OLED::setCursor(67, 0);\n  }\n  // Print wattage\n  {\n    uint32_t x10Watt = x10WattHistory.average();\n    if (x10Watt > 999) {\n      // If we exceed 99.9W we drop the decimal place to keep it all fitting\n      OLED::print(SmallSymbolSpace, FontStyle::SMALL);\n      OLED::printNumber(x10WattHistory.average() / 10, 3, FontStyle::SMALL);\n    } else {\n      OLED::printNumber(x10WattHistory.average() / 10, 2, FontStyle::SMALL);\n      OLED::print(SmallSymbolDot, FontStyle::SMALL);\n      OLED::printNumber(x10WattHistory.average() % 10, 1, FontStyle::SMALL);\n    }\n    OLED::print(SmallSymbolWatts, FontStyle::SMALL);\n  }\n\n  if (OLED::getRotation()) {\n    OLED::setCursor(0, 8);\n  } else {\n    OLED::setCursor(67, 8);\n  }\n  printVoltage();\n  OLED::print(SmallSymbolVolts, FontStyle::SMALL);\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/draw_soldering_sleep_mode.cpp",
    "content": "#include \"ui_drawing.hpp\"\n#ifdef OLED_96x16\n\nvoid ui_draw_soldering_detailed_sleep(TemperatureType_t tipTemp) {\n\n  OLED::clearScreen();\n  OLED::setCursor(0, 0);\n  OLED::print(translatedString(Tr->SleepingAdvancedString), FontStyle::SMALL);\n  OLED::setCursor(0, 8);\n  OLED::print(translatedString(Tr->SleepingTipAdvancedString), FontStyle::SMALL);\n  OLED::printNumber(tipTemp, 3, FontStyle::SMALL);\n  if (getSettingValue(SettingsOptions::TemperatureInF)) {\n    OLED::print(SmallSymbolDegF, FontStyle::SMALL);\n  } else {\n    OLED::print(SmallSymbolDegC, FontStyle::SMALL);\n  }\n\n  OLED::print(SmallSymbolSpace, FontStyle::SMALL);\n  printVoltage();\n  OLED::print(SmallSymbolVolts, FontStyle::SMALL);\n\n  OLED::refresh();\n}\n\nvoid ui_draw_soldering_basic_sleep(TemperatureType_t tipTemp) {\n\n  OLED::clearScreen();\n  OLED::setCursor(0, 0);\n\n  OLED::print(LargeSymbolSleep, FontStyle::LARGE);\n  OLED::printNumber(tipTemp, 3, FontStyle::LARGE);\n  OLED::printSymbolDeg(FontStyle::EXTRAS);\n\n  OLED::refresh();\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/draw_temperature_change.cpp",
    "content": "#include \"ui_drawing.hpp\"\n#ifdef OLED_96x16\n\nvoid ui_draw_temperature_change(void) {\n\n  OLED::setCursor(0, 0);\n  if (OLED::getRotation()) {\n    OLED::print(getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled) ? LargeSymbolPlus : LargeSymbolMinus, FontStyle::LARGE);\n  } else {\n    OLED::print(getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled) ? LargeSymbolMinus : LargeSymbolPlus, FontStyle::LARGE);\n  }\n\n  OLED::print(LargeSymbolSpace, FontStyle::LARGE);\n  OLED::printNumber(getSettingValue(SettingsOptions::SolderingTemp), 3, FontStyle::LARGE);\n  OLED::printSymbolDeg(FontStyle::EXTRAS);\n  OLED::print(LargeSymbolSpace, FontStyle::LARGE);\n  if (OLED::getRotation()) {\n    OLED::print(getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled) ? LargeSymbolMinus : LargeSymbolPlus, FontStyle::LARGE);\n  } else {\n    OLED::print(getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled) ? LargeSymbolPlus : LargeSymbolMinus, FontStyle::LARGE);\n  }\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/draw_tip_temperature.cpp",
    "content": "#include \"OperatingModeUtilities.h\"\n#include \"OperatingModes.h\"\n#include \"SolderingCommon.h\"\n#include \"TipThermoModel.h\"\n#ifdef OLED_96x16\n\nvoid ui_draw_tip_temperature(bool symbol, const FontStyle font) {\n  // Draw tip temp handling unit conversion & tolerance near setpoint\n  TemperatureType_t Temp = getTipTemp();\n\n  OLED::printNumber(Temp, 3, font); // Draw the tip temp out\n  if (symbol) {\n    // For big font, can draw nice symbols, otherwise fall back to chars\n    OLED::printSymbolDeg(font == FontStyle::LARGE ? FontStyle::EXTRAS : font);\n  }\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/draw_usb_pd_debug.cpp",
    "content": "#include \"ui_drawing.hpp\"\n#ifdef OLED_96x16\n\nvoid ui_draw_usb_pd_debug_state(const uint16_t vbus_sense_state, const uint8_t stateNumber) {\n  OLED::setCursor(0, 0);                             // Position the cursor at the 0,0 (top left)\n  OLED::print(SmallSymbolPDDebug, FontStyle::SMALL); // Print Title\n  OLED::setCursor(0, 8);                             // second line\n  // Print the PD state machine\n  OLED::print(SmallSymbolState, FontStyle::SMALL);\n  OLED::print(SmallSymbolSpace, FontStyle::SMALL);\n  OLED::printNumber(stateNumber, 2, FontStyle::SMALL, true);\n  OLED::print(SmallSymbolSpace, FontStyle::SMALL);\n\n  if (vbus_sense_state == 2) {\n    OLED::print(SmallSymbolNoVBus, FontStyle::SMALL);\n  } else if (vbus_sense_state == 1) {\n    OLED::print(SmallSymbolVBus, FontStyle::SMALL);\n  }\n}\n\nvoid ui_draw_usb_pd_debug_pdo(const uint8_t entry_num, const uint16_t min_voltage, const uint16_t max_voltage, const uint16_t current_a_x100, const uint16_t wattage) {\n\n  OLED::setCursor(0, 0);                                   // Position the cursor at the 0,0 (top left)\n  OLED::print(SmallSymbolPDDebug, FontStyle::SMALL);       // Print Title\n  OLED::setCursor(0, 8);                                   // second line\n  OLED::printNumber(entry_num, 2, FontStyle::SMALL, true); // print the entry number\n  OLED::print(SmallSymbolSpace, FontStyle::SMALL);\n  if (min_voltage > 0) {\n    OLED::printNumber(min_voltage, 2, FontStyle::SMALL, true); // print the voltage\n    OLED::print(SmallSymbolMinus, FontStyle::SMALL);\n  }\n  OLED::printNumber(max_voltage, 2, FontStyle::SMALL, true); // print the voltage\n  OLED::print(SmallSymbolVolts, FontStyle::SMALL);\n  OLED::print(SmallSymbolSpace, FontStyle::SMALL);\n  if (wattage) {\n    OLED::printNumber(wattage, 3, FontStyle::SMALL, true); // print the current in 0.1A res\n    OLED::print(SmallSymbolWatts, FontStyle::SMALL);\n  } else {\n    OLED::printNumber(current_a_x100 / 100, 2, FontStyle::SMALL, true); // print the current in 0.1A res\n    OLED::print(SmallSymbolDot, FontStyle::SMALL);\n    OLED::printNumber(current_a_x100 % 100, 2, FontStyle::SMALL, false); // print the current in 0.1A res\n    OLED::print(SmallSymbolAmps, FontStyle::SMALL);\n  }\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/draw_warning_undervoltage.cpp",
    "content": "#include \"ui_drawing.hpp\"\n#ifdef OLED_96x16\n\nvoid ui_draw_warning_undervoltage(void) {\n  OLED::clearScreen();\n  OLED::setCursor(0, 0);\n  if (getSettingValue(SettingsOptions::DetailedSoldering)) {\n    OLED::print(translatedString(Tr->UndervoltageString), FontStyle::SMALL);\n    OLED::setCursor(0, 8);\n    OLED::print(translatedString(Tr->InputVoltageString), FontStyle::SMALL);\n    printVoltage();\n    OLED::print(SmallSymbolVolts, FontStyle::SMALL);\n  } else {\n    OLED::print(translatedString(Tr->UVLOWarningString), FontStyle::LARGE);\n  }\n\n  OLED::refresh();\n  GUIDelay();\n  waitForButtonPress();\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/pre_render_assets.cpp",
    "content": "#include \"ui_drawing.hpp\"\n\n#ifdef OLED_96x16\nuint8_t buttonAF[sizeof(buttonA)];\nuint8_t buttonBF[sizeof(buttonB)];\nuint8_t disconnectedTipF[sizeof(disconnectedTip)];\n\nvoid ui_pre_render_assets(void) {\n  // Generate the flipped screen into ram for later use\n  // flipped is generated by flipping each row\n  for (int row = 0; row < 2; row++) {\n    for (int x = 0; x < 42; x++) {\n      buttonAF[(row * 42) + x]         = buttonA[(row * 42) + (41 - x)];\n      buttonBF[(row * 42) + x]         = buttonB[(row * 42) + (41 - x)];\n      disconnectedTipF[(row * 42) + x] = disconnectedTip[(row * 42) + (41 - x)];\n    }\n  }\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/printSleepCountdown.cpp",
    "content": "#include \"Buttons.hpp\"\n#include \"OperatingModeUtilities.h\"\n#ifdef OLED_96x16\nextern TickType_t lastMovementTime;\n#ifndef NO_SLEEP_MODE\nvoid printCountdownUntilSleep(int sleepThres) {\n  /*\n   * Print seconds or minutes (if > 99 seconds) until sleep\n   * mode is triggered.\n   */\n  TickType_t lastEventTime = lastButtonTime < lastMovementTime ? lastMovementTime : lastButtonTime;\n  TickType_t downCount     = sleepThres - xTaskGetTickCount() + lastEventTime;\n  if (downCount > (99 * TICKS_SECOND)) {\n    OLED::printNumber(downCount / 60000 + 1, 2, FontStyle::SMALL);\n    OLED::print(SmallSymbolMinutes, FontStyle::SMALL);\n  } else {\n    OLED::printNumber(downCount / 1000 + 1, 2, FontStyle::SMALL);\n    OLED::print(SmallSymbolSeconds, FontStyle::SMALL);\n  }\n}\n#endif\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/print_voltage.cpp",
    "content": "#include \"ui_drawing.hpp\"\n\n#ifdef OLED_96x16\nvoid printVoltage(void) {\n  uint32_t volt = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0);\n  OLED::printNumber(volt / 10, 2, FontStyle::SMALL);\n  OLED::print(SmallSymbolDot, FontStyle::SMALL);\n  OLED::printNumber(volt % 10, 1, FontStyle::SMALL);\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/mono_96x16/show_warning.cpp",
    "content": "#include \"Buttons.hpp\"\n#include \"OperatingModeUtilities.h\"\n#include \"OperatingModes.h\"\n#ifdef OLED_96x16\nbool warnUser(const char *warning, const ButtonState buttons) {\n  OLED::clearScreen();\n  OLED::printWholeScreen(warning);\n  // Also timeout after 5 seconds\n  if ((xTaskGetTickCount() - lastButtonTime) > TICKS_SECOND * 5) {\n    return true;\n  }\n  return buttons != BUTTON_NONE;\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/drawing/ui_drawing.hpp",
    "content": "#ifndef UI_DRAWING_UI_DRAWING_HPP_\n#define UI_DRAWING_UI_DRAWING_HPP_\n#include \"Buttons.hpp\"\n#include \"OLED.hpp\"\n#include \"OperatingModeUtilities.h\"\n#include \"Settings.h\"\n#include \"configuration.h\"\n#include <stdbool.h>\n#include <stdint.h>\n#include <string.h>\nvoid ui_draw_warning_undervoltage(void);\nvoid ui_draw_power_source_icon(void);                            // Draw a single character wide power source icon\nvoid ui_draw_tip_temperature(bool symbol, const FontStyle font); // Draw tip temp, aware of conversions\nbool warnUser(const char *warning, const ButtonState buttons);   // Print a full screen warning to the user\nvoid ui_draw_cjc_sampling(const uint8_t num_dots);               // Draws the CJC info text and progress dots\nvoid ui_draw_debug_menu(const uint8_t item_number);              // Draws the debug menu state\nvoid ui_draw_homescreen_detailed(TemperatureType_t tipTemp);     // Drawing the home screen -- Detailed mode\nvoid ui_draw_homescreen_simplified(TemperatureType_t tipTemp);   // Drawing the home screen -- Simple mode\nvoid ui_pre_render_assets(void);                                 // If any assets need to be pre-rendered into ram\n// Soldering mode\nvoid ui_draw_soldering_power_status(bool boost_mode_on);\nvoid ui_draw_soldering_basic_status(bool boostModeOn);\nvoid ui_draw_soldering_detailed_sleep(TemperatureType_t tipTemp);\nvoid ui_draw_soldering_basic_sleep(TemperatureType_t tipTemp);\nvoid ui_draw_soldering_profile_advanced(TemperatureType_t tipTemp, TemperatureType_t profileCurrentTargetTemp, uint32_t phaseElapsedSeconds, uint32_t phase, const uint32_t phaseTimeGoal);\n\n// Temp change\nvoid ui_draw_temperature_change(void);\n// USB-PD debug\nvoid ui_draw_usb_pd_debug_state(const uint16_t vbus_sense_state, const uint8_t stateNumber);\nvoid ui_draw_usb_pd_debug_pdo(const uint8_t entry_num, const uint16_t min_voltage, const uint16_t max_voltage, const uint16_t current_a_x100, const uint16_t wattage);\n// Utils\nvoid printVoltage(void);\n#endif // UI_DRAWING_UI_DRAWING_HPP_\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/CJC.cpp",
    "content": "#include \"OperatingModes.h\"\n#include \"ui_drawing.hpp\"\n\nOperatingMode performCJCC(const ButtonState buttons, guiContext *cxt) {\n  // Calibrate Cold Junction Compensation directly at boot, before internal components get warm.\n\n  // While we wait for the pre-start checks to finish, we cant run CJC (as the pre-start checks control the tip)\n  if (preStartChecks() == 0) {\n    OLED::setCursor(0, 0);\n    OLED::print(translatedString(Tr->CJCCalibrating), FontStyle::SMALL);\n    return OperatingMode::CJCCalibration;\n  }\n\n  if (!isTipDisconnected() && abs(int(TipThermoModel::getTipInC() - getHandleTemperature(0) / 10)) < 10) {\n    // Take 16 samples, only sample\n    if (cxt->scratch_state.state1 < 16) {\n      if ((xTaskGetTickCount() - cxt->scratch_state.state4) > TICKS_100MS) {\n        cxt->scratch_state.state3 += getTipRawTemp(1);\n        cxt->scratch_state.state1++;\n        cxt->scratch_state.state4 = xTaskGetTickCount();\n      }\n      ui_draw_cjc_sampling(cxt->scratch_state.state1 / 4);\n      return OperatingMode::CJCCalibration;\n    }\n\n    // If the thermo-couple at the end of the tip, and the handle are at\n    // equilibrium, then the output should be zero, as there is no temperature\n    // differential.\n\n    uint16_t setOffset = TipThermoModel::convertTipRawADCTouV(cxt->scratch_state.state3 / 16, true);\n    setSettingValue(SettingsOptions::CalibrationOffset, setOffset);\n    if (warnUser(translatedString(Tr->CalibrationDone), buttons)) {\n      // Preventing to repeat calibration at boot automatically (only one shot).\n      setSettingValue(SettingsOptions::CalibrateCJC, 0);\n      saveSettings();\n      return OperatingMode::InitialisationDone;\n    }\n    return OperatingMode::CJCCalibration;\n  }\n  // Cant run calibration without the tip and for temps to be close\n  return OperatingMode::StartupWarnings;\n}\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/DebugMenu.cpp",
    "content": "#include \"OperatingModes.h\"\n#include \"ui_drawing.hpp\"\n\nOperatingMode showDebugMenu(const ButtonState buttons, guiContext *cxt) {\n\n  ui_draw_debug_menu(cxt->scratch_state.state1);\n\n  if (buttons == BUTTON_B_SHORT) {\n    cxt->transitionMode = TransitionAnimation::Up;\n    return OperatingMode::HomeScreen;\n  } else if (buttons == BUTTON_F_SHORT) {\n    cxt->scratch_state.state1++;\n#ifdef HALL_SENSOR\n    cxt->scratch_state.state1 = cxt->scratch_state.state1 % 17;\n#else\n    cxt->scratch_state.state1 = cxt->scratch_state.state1 % 16;\n#endif\n  }\n  return OperatingMode::DebugMenuReadout; // Stay in debug menu\n}\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/HomeScreen.cpp",
    "content": "\n#include \"Buttons.hpp\"\n#include \"OperatingModes.h\"\n#include \"ui_drawing.hpp\"\n\nbool showExitMenuTransition = false;\n\nOperatingMode handleHomeButtons(const ButtonState buttons, guiContext *cxt) {\n  if (buttons != BUTTON_NONE && cxt->scratch_state.state1 == 0) {\n    return OperatingMode::HomeScreen; // Ignore button press\n  } else {\n    cxt->scratch_state.state1 = 1;\n  }\n  switch (buttons) {\n  case BUTTON_NONE:\n    // Do nothing\n    break;\n  case BUTTON_BOTH:\n    break;\n\n  case BUTTON_B_LONG:\n    cxt->transitionMode = TransitionAnimation::Down;\n    return OperatingMode::DebugMenuReadout;\n    break;\n  case BUTTON_F_LONG:\n#ifdef PROFILE_SUPPORT\n    if (!isTipDisconnected()) {\n      cxt->transitionMode = TransitionAnimation::Left;\n      return OperatingMode::SolderingProfile;\n    } else {\n      return OperatingMode::HomeScreen;\n    }\n#else\n    cxt->transitionMode = TransitionAnimation::Left;\n    return OperatingMode::TemperatureAdjust;\n#endif\n    break;\n  case BUTTON_F_SHORT:\n    if (!isTipDisconnected()) {\n      bool detailedView   = getSettingValue(SettingsOptions::DetailedIDLE) && getSettingValue(SettingsOptions::DetailedSoldering);\n      cxt->transitionMode = detailedView ? TransitionAnimation::None : TransitionAnimation::Left;\n      return OperatingMode::Soldering;\n    }\n    break;\n  case BUTTON_B_SHORT:\n    cxt->transitionMode = TransitionAnimation::Right;\n    return OperatingMode::SettingsMenu;\n    break;\n  default:\n    break;\n  }\n  return OperatingMode::HomeScreen;\n}\n\nOperatingMode drawHomeScreen(const ButtonState buttons, guiContext *cxt) {\n\n  currentTempTargetDegC = 0; // ensure tip is off\n  getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0);\n  uint32_t tipTemp = TipThermoModel::getTipInC();\n\n  // Setup LCD Cursor location\n  if (OLED::getRotation()) {\n    OLED::setCursor(50, 0);\n  } else {\n    OLED::setCursor(-1, 0);\n  }\n  if (getSettingValue(SettingsOptions::DetailedIDLE)) {\n    ui_draw_homescreen_detailed(tipTemp);\n  } else {\n    ui_draw_homescreen_simplified(tipTemp);\n  }\n  return handleHomeButtons(buttons, cxt);\n}\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/OperatingModes.cpp",
    "content": "//\r\n// Created by Thomas White on 3/02/2023.\r\n//\r\n\r\n#include \"OperatingModes.h\"\r\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/OperatingModes.h",
    "content": "#ifndef OPERATING_MODES_H_\n#define OPERATING_MODES_H_\n\nextern \"C\" {\n#include \"FreeRTOSConfig.h\"\n}\n#include \"Buttons.hpp\"\n#include \"OLED.hpp\"\n#include \"OperatingModeUtilities.h\"\n#include \"Settings.h\"\n#include \"TipThermoModel.h\"\n#include \"Translation.h\"\n#include \"Types.h\"\n#include \"cmsis_os.h\"\n#include \"configuration.h\"\n#include \"history.hpp\"\n#include \"main.hpp\"\n#include \"power.hpp\"\n#include \"settingsGUI.hpp\"\n#include \"stdlib.h\"\n#include \"string.h\"\n#ifdef POW_PD\n#include \"USBPD.h\"\n#include \"pd.h\"\n#endif\n\nenum class OperatingMode {\n  StartupLogo=10,        // Showing the startup logo\n  CJCCalibration=11,     // Cold Junction Calibration\n  StartupWarnings=12,    // Startup checks and warnings\n  InitialisationDone=13, // Special state we use just before we to home screen at first startup. Allows jumping to extra startup states\n  HomeScreen=0,         // Home/Idle screen that is the main launchpad to other modes\n  Soldering=1,          // Main soldering operating mode\n  SolderingProfile=6,   // Soldering by following a profile, used for reflow for example\n  Sleeping=3,           // Sleep state holds iron at lower sleep temp\n  Hibernating=14,       // Like sleeping but keeps heater fully off until woken\n  SettingsMenu=4,       // Settings Menu\n  DebugMenuReadout=5,   // Debug metrics\n  TemperatureAdjust=7,  // Set point temperature adjustment\n  UsbPDDebug=8,         // USB PD debugging information\n  ThermalRunaway=9,     // Thermal Runaway warning state.\n};\n\nenum class TransitionAnimation {\n  None  = 0,\n  Right = 1,\n  Left  = 2,\n  Down  = 3,\n  Up    = 4,\n};\n\n// Generic context struct used for gui functions to be able to retain state\nstruct guiContext {\n  TickType_t          viewEnterTime; // Set to ticks when this view state was first entered\n  OperatingMode       previousMode;\n  TransitionAnimation transitionMode;\n  // Below is scratch state, this is retained over re-draws but blown away on state change\n  struct scratch {\n    uint16_t state1; // 16 bit state scratch\n    uint16_t state2; // 16 bit state scratch\n    uint32_t state3; // 32 bit state scratch\n    uint32_t state4; // 32 bit state scratch\n    uint16_t state5; // 16 bit state scratch\n    uint16_t state6; // 16 bit state scratch\n    uint32_t state7; // 32 bit state scratch\n\n  } scratch_state;\n};\n\n// Main functions\nOperatingMode gui_SolderingSleepingMode(const ButtonState buttons, guiContext *cxt); // Sleep mode\nOperatingMode gui_solderingMode(const ButtonState buttons, guiContext *cxt);         // Main mode for hot pointy tool\nOperatingMode gui_solderingTempAdjust(const ButtonState buttons, guiContext *cxt);   // For adjusting the setpoint temperature of the iron\nOperatingMode drawHomeScreen(const ButtonState buttons, guiContext *cxt);            // IDLE / Home screen\nOperatingMode gui_SettingsMenu(const ButtonState buttons, guiContext *cxt);          //\n\nOperatingMode gui_solderingProfileMode(const ButtonState buttons, guiContext *cxt); // Profile mode for hot likely-not-so-pointy tool\nOperatingMode performCJCC(const ButtonState buttons, guiContext *cxt);              // Used to calibrate the Cold Junction offset\nOperatingMode showDebugMenu(const ButtonState buttons, guiContext *cxt);            // Debugging values\nOperatingMode showPDDebug(const ButtonState buttons, guiContext *cxt);              // Debugging menu that shows PD adaptor info\nOperatingMode showWarnings(const ButtonState buttons, guiContext *cxt);             // Shows user warnings if required\n\n// Common helpers\nint8_t getPowerSourceNumber(void); // Returns number ID of power source\n\nextern uint8_t heaterThermalRunawayCounter;\n#endif\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/SettingsMenu.cpp",
    "content": "#include \"OperatingModes.h\"\n#include \"ScrollMessage.hpp\"\n\n#define HELP_TEXT_TIMEOUT_TICKS (TICKS_SECOND * 3)\n/*\n * The settings menu is the most complex bit of GUI code we have\n * The menu consists of a two tier menu\n * Main menu -> Categories\n * Secondary menu -> Settings\n *\n * For each entry in the menu\n */\n\n/**\n * Prints two small lines (or one line for CJK) of short description for\n * setting items and prepares cursor after it.\n * @param settingsItemIndex Index of the setting item.\n * @param cursorCharPosition Custom cursor char position to set after printing\n * description.\n */\nstatic void printShortDescription(SettingsItemIndex settingsItemIndex, uint16_t cursorCharPosition) {\n  // print short description (default single line, explicit double line)\n  uint8_t shortDescIndex = static_cast<uint8_t>(settingsItemIndex);\n  OLED::printWholeScreen(translatedString(Tr->SettingsShortNames[shortDescIndex]));\n\n  // prepare cursor for value\n  // make room for scroll indicator\n  OLED::setCursor(cursorCharPosition * FONT_12_WIDTH - 2, 0);\n}\n\n// Render a menu, based on the position given\n// This will either draw the menu item, or the help text depending on how long its been since button press\nvoid render_menu(const menuitem *item, guiContext *cxt) {\n  // If recent interaction or not help text draw the entry\n  if ((xTaskGetTickCount() - lastButtonTime < HELP_TEXT_TIMEOUT_TICKS) || item->description == 0) {\n\n    if (item->shortDescriptionSize > 0) {\n      printShortDescription(item->shortDescriptionIndex, item->shortDescriptionSize);\n    }\n    item->draw();\n  } else {\n\n    uint16_t *isRenderingHelp = &(cxt->scratch_state.state6);\n    *isRenderingHelp          = 1;\n    // Draw description\n    const char *description = translatedString(Tr->SettingsDescriptions[item->description - 1]);\n    drawScrollingText(description, (xTaskGetTickCount() - lastButtonTime) - HELP_TEXT_TIMEOUT_TICKS);\n  }\n}\n\nuint16_t getMenuLength(const menuitem *menu, const uint16_t stop) {\n  // walk this menu to find the length\n  uint16_t counter = 0;\n  for (uint16_t pos = 0; pos < stop; pos++) {\n    // End of list\n    if (menu[pos].draw == nullptr) {\n      return counter;\n    }\n    // Otherwise increment for each visible item (null == always, or if not check function)\n    if (menu[pos].isVisible == nullptr || menu[pos].isVisible()) {\n      counter++;\n    }\n  }\n  return counter;\n}\n\nOperatingMode moveToNextEntry(guiContext *cxt) {\n  uint16_t *mainEntry         = &(cxt->scratch_state.state1);\n  uint16_t *subEntry          = &(cxt->scratch_state.state2);\n  uint16_t *currentMenuLength = &(cxt->scratch_state.state5);\n  uint16_t *isRenderingHelp   = &(cxt->scratch_state.state6);\n\n  if (*isRenderingHelp) {\n    *isRenderingHelp = 0;\n  } else {\n    *currentMenuLength = 0; // Reset menu length\n    // Scroll down\n    // We can increment freely _once_\n    cxt->transitionMode = TransitionAnimation::Down;\n    if (*subEntry == 0) {\n      (*mainEntry) += 1;\n\n      if (rootSettingsMenu[*mainEntry].draw == nullptr) {\n        // We are off the end of the menu now\n        saveSettings();\n        cxt->transitionMode = TransitionAnimation::Left;\n        return OperatingMode::HomeScreen;\n      }\n      // Check if visible\n      if (rootSettingsMenu[*mainEntry].isVisible != nullptr && !rootSettingsMenu[*mainEntry].isVisible()) {\n        // We need to move on as this one isn't visible\n        return moveToNextEntry(cxt);\n      }\n    } else {\n      (*subEntry) += 1;\n\n      // If the new entry is null, we need to exit\n      if (subSettingsMenus[*mainEntry][(*subEntry) - 1].draw == nullptr) {\n        (*subEntry)         = 0; // Reset back to the main menu\n        cxt->transitionMode = TransitionAnimation::Left;\n        // Have to break early to avoid the below check underflowing\n        return OperatingMode::SettingsMenu;\n      }\n      // Check if visible\n      if (subSettingsMenus[*mainEntry][(*subEntry) - 1].isVisible != nullptr && !subSettingsMenus[*mainEntry][(*subEntry) - 1].isVisible()) {\n        // We need to move on as this one isn't visible\n        return moveToNextEntry(cxt);\n      }\n    }\n  }\n  return OperatingMode::SettingsMenu;\n}\n\nOperatingMode gui_SettingsMenu(const ButtonState buttons, guiContext *cxt) {\n  // Render out the current settings menu\n  // State 1 -> Root menu\n  // State 2 -> Sub entry\n  // Draw main entry if sub-entry is 0, otherwise draw sub-entry\n\n  uint16_t *mainEntry              = &(cxt->scratch_state.state1);\n  uint16_t *subEntry               = &(cxt->scratch_state.state2);\n  uint32_t *autoRepeatAcceleration = &(cxt->scratch_state.state3);\n  uint32_t *autoRepeatTimer        = &(cxt->scratch_state.state4);\n  uint16_t *currentMenuLength      = &(cxt->scratch_state.state5);\n  uint16_t *isRenderingHelp        = &(cxt->scratch_state.state6);\n\n  const menuitem *currentMenu;\n  // Draw the currently on screen item\n  uint16_t currentScreen;\n  if (*subEntry == 0) {\n    // Drawing main menu\n    currentMenu   = rootSettingsMenu;\n    currentScreen = *mainEntry;\n  } else {\n    // Drawing sub menu\n    currentMenu   = subSettingsMenus[*mainEntry];\n    currentScreen = (*subEntry) - 1;\n  }\n  render_menu(&(currentMenu[currentScreen]), cxt);\n\n  // Update the cached menu length if unknown\n  if (*currentMenuLength == 0) {\n    // We walk the current menu to find the length\n    *currentMenuLength = getMenuLength(currentMenu, 128 /* Max length of any menu*/);\n  }\n\n  if (*isRenderingHelp == 0) {\n    //  Draw scroll\n\n    // Get virtual pos by counting entries from start to _here_\n    uint16_t currentVirtualPosition = getMenuLength(currentMenu, currentScreen + 1);\n    if (currentVirtualPosition > 0) {\n      currentVirtualPosition--;\n    }\n\n    // The height of the indicator is screen res height / total menu entries\n    uint8_t indicatorHeight = OLED_HEIGHT / *currentMenuLength;\n    if (indicatorHeight == 0) {\n      indicatorHeight = 1; // always at least 1 pixel\n    }\n\n    uint16_t position = (OLED_HEIGHT * (uint16_t)currentVirtualPosition) / *currentMenuLength;\n\n    bool showScrollbar = true;\n\n    // Store if its the last option for this setting\n    bool isLastOptionForSetting = false;\n    if ((int)currentMenu[currentScreen].autoSettingOption < (int)SettingsOptions::SettingsOptionsLength) {\n      isLastOptionForSetting = isLastSettingValue(currentMenu[currentScreen].autoSettingOption);\n    }\n\n    // Last settings menu entry, reset scroll show back so it flashes\n    if (isLastOptionForSetting) {\n      showScrollbar = false;\n    }\n\n    // Or Flash it\n    showScrollbar |= (xTaskGetTickCount() % (TICKS_SECOND / 4) < (TICKS_SECOND / 8));\n\n    if (showScrollbar) {\n      OLED::drawScrollIndicator((uint8_t)position, indicatorHeight);\n    }\n  }\n\n  // Now handle user button input\n  auto callIncrementHandler = [&]() {\n    if (currentMenu[currentScreen].incrementHandler != nullptr) {\n      currentMenu[currentScreen].incrementHandler();\n    } else if ((int)currentMenu[currentScreen].autoSettingOption < (int)SettingsOptions::SettingsOptionsLength) {\n      nextSettingValue(currentMenu[currentScreen].autoSettingOption);\n    }\n    return false;\n  };\n\n  // Modify a button value before processing a key press if setting to swap buttons is enabled\n  bool    swapButtonSettings = getSettingValue(SettingsOptions::ReverseButtonSettings);\n  uint8_t buttonPress;\n  switch (buttons) {\n  case BUTTON_F_LONG:\n    buttonPress = swapButtonSettings ? BUTTON_B_LONG : BUTTON_F_LONG;\n    break;\n  case BUTTON_F_SHORT:\n    buttonPress = swapButtonSettings ? BUTTON_B_SHORT : BUTTON_F_SHORT;\n    break;\n  case BUTTON_B_LONG:\n    buttonPress = swapButtonSettings ? BUTTON_F_LONG : BUTTON_B_LONG;\n    break;\n  case BUTTON_B_SHORT:\n    buttonPress = swapButtonSettings ? BUTTON_F_SHORT : BUTTON_B_SHORT;\n    break;\n  default:\n    buttonPress = buttons;\n    break;\n  }\n\n  OperatingMode newMode = OperatingMode::SettingsMenu;\n  switch (buttonPress) {\n  case BUTTON_NONE:\n    (*autoRepeatAcceleration) = 0; // reset acceleration\n    (*autoRepeatTimer)        = 0; // reset acceleration\n    break;\n  case BUTTON_BOTH:\n    if (*subEntry == 0) {\n      saveSettings();\n      cxt->transitionMode = TransitionAnimation::Left;\n      return OperatingMode::HomeScreen;\n    } else {\n      cxt->transitionMode = TransitionAnimation::Left;\n      *subEntry           = 0;\n      return OperatingMode::SettingsMenu;\n    }\n    break;\n  case BUTTON_F_LONG:\n    if (xTaskGetTickCount() + (*autoRepeatAcceleration) > (*autoRepeatTimer) + PRESS_ACCEL_INTERVAL_MAX) {\n      callIncrementHandler();\n      // Update the check for if its the last version\n      bool isLastOptionForSetting = false;\n      if ((int)currentMenu[currentScreen].autoSettingOption < (int)SettingsOptions::SettingsOptionsLength) {\n        isLastOptionForSetting = isLastSettingValue(currentMenu[currentScreen].autoSettingOption);\n      }\n\n      if (isLastOptionForSetting) {\n        (*autoRepeatTimer) = TICKS_SECOND * 2;\n      } else {\n        (*autoRepeatTimer) = 0;\n      }\n      (*autoRepeatTimer) += xTaskGetTickCount();\n      (*autoRepeatAcceleration) += PRESS_ACCEL_STEP;\n      *currentMenuLength = 0; // Reset incase menu visible changes\n    }\n    break;\n  case BUTTON_F_SHORT:\n    // Increment setting\n    if (*isRenderingHelp) {\n      *isRenderingHelp = 0;\n    } else {\n      *currentMenuLength = 0; // Reset incase menu visible changes\n      if (*subEntry == 0) {\n        // In a root menu, if its null handler we enter the menu\n        if (currentMenu[currentScreen].incrementHandler != nullptr) {\n          currentMenu[currentScreen].incrementHandler();\n        } else {\n          (*subEntry) += 1;\n          cxt->transitionMode = TransitionAnimation::Right;\n        }\n      } else {\n        callIncrementHandler();\n      }\n    }\n    break;\n  case BUTTON_B_LONG:\n    if (xTaskGetTickCount() + (*autoRepeatAcceleration) > (*autoRepeatTimer) + PRESS_ACCEL_INTERVAL_MAX) {\n      (*autoRepeatTimer) = xTaskGetTickCount();\n      (*autoRepeatAcceleration) += PRESS_ACCEL_STEP;\n    } else {\n      break;\n    }\n    /* Fall through*/\n  case BUTTON_B_SHORT:\n    // Increment menu item\n    newMode = moveToNextEntry(cxt);\n    break;\n  default:\n    break;\n  }\n\n  if ((PRESS_ACCEL_INTERVAL_MAX - (*autoRepeatAcceleration)) < PRESS_ACCEL_INTERVAL_MIN) {\n    (*autoRepeatAcceleration) = PRESS_ACCEL_INTERVAL_MAX - PRESS_ACCEL_INTERVAL_MIN;\n  }\n\n  // Otherwise we stay put for next render iteration\n  return newMode;\n}\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/ShowStartupWarnings.cpp",
    "content": "#include \"FS2711.hpp\"\n#include \"HUB238.hpp\"\n#include \"OperatingModes.h\"\n#include \"ui_drawing.hpp\"\nOperatingMode showWarnings(const ButtonState buttons, guiContext *cxt) {\n  // Display alert if settings were reset\n\n  switch (cxt->scratch_state.state1) {\n  case 0: // Settings reset warning\n    if (settingsWereReset) {\n      if (warnUser(translatedString(Tr->SettingsResetMessage), buttons)) {\n        settingsWereReset         = false;\n        cxt->scratch_state.state1 = 1;\n      }\n    } else {\n      cxt->scratch_state.state1 = 1;\n    }\n    break;\n  case 1: // Device validations\n#ifdef DEVICE_HAS_VALIDATION_SUPPORT\n    if (getDeviceValidationStatus()) {\n      // Warn user this device might be counterfeit\n      if (warnUser(translatedString(Tr->DeviceFailedValidationWarning), buttons)) {\n        cxt->scratch_state.state1 = 2;\n      }\n    } else {\n      cxt->scratch_state.state1 = 2;\n    }\n#else\n    cxt->scratch_state.state1 = 2;\n#endif\n    break;\n  case 2: // Accelerometer detection\n#ifdef NO_ACCEL\n    cxt->scratch_state.state1 = 3;\n#else\n    if (DetectedAccelerometerVersion == AccelType::Scanning) {\n      break;\n    }\n    // Display alert if accelerometer is not detected\n    if (DetectedAccelerometerVersion == AccelType::None) {\n      if (getSettingValue(SettingsOptions::AccelMissingWarningCounter) < 2) {\n\n        if (warnUser(translatedString(Tr->NoAccelerometerMessage), buttons)) {\n          cxt->scratch_state.state1 = 3;\n          nextSettingValue(SettingsOptions::AccelMissingWarningCounter);\n          saveSettings();\n        }\n      } else {\n        cxt->scratch_state.state1 = 3;\n      }\n    } else {\n      cxt->scratch_state.state1 = 3;\n    }\n#endif\n\n    break;\n  case 3:\n\n#ifdef POW_PD\n    // We expect pd to be present\n    if (!USBPowerDelivery::fusbPresent()) {\n      if (getSettingValue(SettingsOptions::PDMissingWarningCounter) < 2) {\n        if (warnUser(translatedString(Tr->NoPowerDeliveryMessage), buttons)) {\n          nextSettingValue(SettingsOptions::PDMissingWarningCounter);\n          saveSettings();\n          cxt->scratch_state.state1 = 4;\n        }\n      } else {\n        cxt->scratch_state.state1 = 4;\n      }\n    } else {\n      cxt->scratch_state.state1 = 4;\n    }\n#else\n#if POW_PD_EXT == 1\n    if (!hub238_probe()) {\n      if (getSettingValue(SettingsOptions::PDMissingWarningCounter) < 2) {\n        if (warnUser(translatedString(Tr->NoPowerDeliveryMessage), buttons)) {\n          cxt->scratch_state.state1 = 4;\n          nextSettingValue(SettingsOptions::PDMissingWarningCounter);\n          saveSettings();\n        }\n      } else {\n        cxt->scratch_state.state1 = 4;\n      }\n    } else {\n      cxt->scratch_state.state1 = 4;\n    }\n#else\n#if POW_PD_EXT == 2\n    if (!FS2711::probe()) {\n      if (getSettingValue(SettingsOptions::PDMissingWarningCounter) < 2) {\n        if (warnUser(translatedString(Tr->NoPowerDeliveryMessage), buttons)) {\n          cxt->scratch_state.state1 = 4;\n          nextSettingValue(SettingsOptions::PDMissingWarningCounter);\n          saveSettings();\n        }\n      } else {\n        cxt->scratch_state.state1 = 4;\n      }\n    } else {\n      cxt->scratch_state.state1 = 4;\n    }\n#else\n    cxt->scratch_state.state1 = 4;\n#endif /*POW_PD_EXT==1*/\n#endif /*POW_PD_EXT==2*/\n#endif /*POW_PD*/\n\n    break;\n  default:\n    // We are off the end, warnings done\n    return OperatingMode::StartupLogo;\n  }\n\n  return OperatingMode::StartupWarnings; // Stay in warnings\n}\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/Sleep.cpp",
    "content": "#include \"OperatingModes.h\"\n#include \"ui_drawing.hpp\"\nOperatingMode gui_SolderingSleepingMode(const ButtonState buttons, guiContext *cxt) {\n#ifdef NO_SLEEP_MODE\n  return OperatingMode::Soldering;\n#endif\n  // Drop to sleep temperature and display until movement or button press\n\n  // user moved or pressed a button, go back to soldering\n  // If in the first two seconds we disable this to let accelerometer warm up\n\n#ifdef POW_DC\n  if (checkForUnderVoltage()) {\n    return OperatingMode::HomeScreen; // return non-zero on error\n  }\n#endif\n\n  if (cxt->scratch_state.state4) {\n    // Hibernating mode\n    currentTempTargetDegC = 0;\n  } else {\n    if (getSettingValue(SettingsOptions::TemperatureInF)) {\n      currentTempTargetDegC = TipThermoModel::convertFtoC(min(getSettingValue(SettingsOptions::SleepTemp), getSettingValue(SettingsOptions::SolderingTemp)));\n    } else {\n      currentTempTargetDegC = min(getSettingValue(SettingsOptions::SleepTemp), getSettingValue(SettingsOptions::SolderingTemp));\n    }\n  }\n  // draw the lcd\n  uint16_t tipTemp = getSettingValue(SettingsOptions::TemperatureInF) ? TipThermoModel::getTipInF() : TipThermoModel::getTipInC();\n\n  if (getSettingValue(SettingsOptions::DetailedSoldering)) {\n    ui_draw_soldering_detailed_sleep(tipTemp);\n  } else {\n    ui_draw_soldering_basic_sleep(tipTemp);\n  }\n\n  if (!shouldBeSleeping()) {\n    return cxt->previousMode;\n  }\n\n  if (shouldShutdown()) {\n    // shutdown\n    currentTempTargetDegC = 0;\n    return OperatingMode::HomeScreen;\n  }\n  if (cxt->scratch_state.state4) {\n    return OperatingMode::Hibernating;\n  } else {\n    return OperatingMode::Sleeping;\n  }\n}\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/Soldering.cpp",
    "content": "\n#include \"OperatingModes.h\"\n#include \"SolderingCommon.h\"\n#include \"ui_drawing.hpp\"\n// State 1 = button locking  (0:unlocked+released, 1:unlocked, 2:locked, 3:locked+released)\n// State 2 = boost mode\n// State 3 = buzzer timer\n\nOperatingMode handleSolderingButtons(const ButtonState buttons, guiContext *cxt) {\n  if (cxt->scratch_state.state1 >= 2) {\n    // Buttons are currently locked\n    if (buttons == BUTTON_BOTH_LONG) {\n      if (cxt->scratch_state.state1 == 3) {\n        // Unlocking\n        if (warnUser(translatedString(Tr->UnlockingKeysString), buttons)) {\n          cxt->scratch_state.state1 = 1;\n          cxt->scratch_state.state7 = 0;\n        }\n      } else {\n        warnUser(translatedString(Tr->LockingKeysString), buttons);\n      }\n      return OperatingMode::Soldering;\n    }\n    if (cxt->scratch_state.state7 != 0) {\n      // show locked until timer is up\n      if (xTaskGetTickCount() >= cxt->scratch_state.state7) {\n        cxt->scratch_state.state7 = 0;\n      } else {\n        warnUser(translatedString(Tr->WarningKeysLockedString), buttons);\n        return OperatingMode::Soldering;\n      }\n    }\n    switch (buttons) {\n    case BUTTON_NONE:\n      cxt->scratch_state.state1 = 3;\n      cxt->scratch_state.state2 = 0;\n      break;\n    case BUTTON_F_LONG:\n      if (getSettingValue(SettingsOptions::BoostTemp) && (getSettingValue(SettingsOptions::LockingMode) == lockingMode_t::BOOST)) {\n        cxt->scratch_state.state2 = 1;\n        break;\n      }\n    /*Fall through*/\n    default: // Set timer for and display a lock warning\n      cxt->scratch_state.state7 = xTaskGetTickCount() + TICKS_SECOND;\n      warnUser(translatedString(Tr->WarningKeysLockedString), buttons);\n      break;\n    }\n    return OperatingMode::Soldering;\n  }\n\n  bool detailedView = getSettingValue(SettingsOptions::DetailedIDLE) && getSettingValue(SettingsOptions::DetailedSoldering);\n  // otherwise we are unlocked\n  switch (buttons) {\n  case BUTTON_NONE:\n    cxt->scratch_state.state2 = 0;\n    cxt->scratch_state.state1 = 0;\n    break;\n  case BUTTON_BOTH:\n  /*Fall through*/\n  case BUTTON_B_LONG:\n    cxt->transitionMode = detailedView ? TransitionAnimation::None : TransitionAnimation::Right;\n    return OperatingMode::HomeScreen;\n  case BUTTON_F_LONG:\n    // if boost mode is enabled turn it on\n    if (getSettingValue(SettingsOptions::BoostTemp)) {\n      cxt->scratch_state.state2 = 1;\n    }\n    break;\n  case BUTTON_F_SHORT:\n  case BUTTON_B_SHORT:\n    cxt->transitionMode = TransitionAnimation::Left;\n    return OperatingMode::TemperatureAdjust;\n  case BUTTON_BOTH_LONG:\n    if (getSettingValue(SettingsOptions::LockingMode)) {\n      // Lock buttons\n      if (cxt->scratch_state.state1 == 0) {\n        if (warnUser(translatedString(Tr->LockingKeysString), buttons)) {\n          cxt->scratch_state.state1 = 2;\n        }\n      } else {\n        // FIXME should be WarningKeysUnlockedString\n        warnUser(translatedString(Tr->UnlockingKeysString), buttons);\n      }\n    }\n    break;\n  default:\n    break;\n  }\n  return OperatingMode::Soldering;\n}\n\nOperatingMode gui_solderingMode(const ButtonState buttons, guiContext *cxt) {\n  /*\n   * * Soldering (gui_solderingMode)\n   * -> Main loop where we draw temp, and animations\n   * --> User presses buttons and they goto the temperature adjust screen\n   * ---> Display the current setpoint temperature\n   * ---> Use buttons to change forward and back on temperature\n   * ---> Both buttons or timeout for exiting\n   * --> Long hold front button to enter boost mode\n   * ---> Just temporarily sets the system into the alternate temperature for\n   * PID control\n   * --> Long hold back button to exit\n   * --> Double button to exit\n   * --> Long hold double button to toggle key lock\n   */\n\n  // Update the setpoints for the temperature\n  if (cxt->scratch_state.state2) {\n    if (getSettingValue(SettingsOptions::TemperatureInF)) {\n      currentTempTargetDegC = TipThermoModel::convertFtoC(getSettingValue(SettingsOptions::BoostTemp));\n    } else {\n      currentTempTargetDegC = (getSettingValue(SettingsOptions::BoostTemp));\n    }\n  } else {\n    if (getSettingValue(SettingsOptions::TemperatureInF)) {\n      currentTempTargetDegC = TipThermoModel::convertFtoC(getSettingValue(SettingsOptions::SolderingTemp));\n    } else {\n      currentTempTargetDegC = (getSettingValue(SettingsOptions::SolderingTemp));\n    }\n  }\n\n  // Update status\n  int error = currentTempTargetDegC - TipThermoModel::getTipInC();\n  if (error >= -10 && error <= 10) {\n    // converged\n    if (!cxt->scratch_state.state5) {\n      setBuzzer(true);\n      cxt->scratch_state.state3 = xTaskGetTickCount() + TICKS_SECOND / 3;\n      cxt->scratch_state.state5 = true;\n    }\n    setStatusLED(LED_HOT);\n  } else {\n    setStatusLED(LED_HEATING);\n    cxt->scratch_state.state5 = false;\n  }\n  if (cxt->scratch_state.state3 != 0 && xTaskGetTickCount() >= cxt->scratch_state.state3) {\n    setBuzzer(false);\n  }\n\n  // Draw in the screen details\n  if (getSettingValue(SettingsOptions::DetailedSoldering)) {\n    ui_draw_soldering_power_status(cxt->scratch_state.state2);\n  } else {\n    ui_draw_soldering_basic_status(cxt->scratch_state.state2);\n  }\n\n  bool detailedView = getSettingValue(SettingsOptions::DetailedIDLE) && getSettingValue(SettingsOptions::DetailedSoldering);\n  // Check if we should bail due to undervoltage for example\n  if (checkExitSoldering()) {\n    setBuzzer(false);\n    cxt->transitionMode = detailedView ? TransitionAnimation::None : TransitionAnimation::Right;\n    return OperatingMode::HomeScreen;\n  }\n#ifdef NO_SLEEP_MODE\n\n  if (shouldShutdown()) {\n    // shutdown\n    currentTempTargetDegC = 0;\n    cxt->transitionMode   = detailedView ? TransitionAnimation::None : TransitionAnimation::Right;\n    return OperatingMode::HomeScreen;\n  }\n#endif\n  if (shouldBeSleeping()) {\n    return OperatingMode::Sleeping;\n  }\n\n  if (heaterThermalRunawayCounter > 8) {\n    currentTempTargetDegC       = 0; // heater control off\n    heaterThermalRunawayCounter = 0;\n    cxt->transitionMode         = TransitionAnimation::Right;\n    return OperatingMode::ThermalRunaway;\n  }\n  return handleSolderingButtons(buttons, cxt);\n}\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/SolderingProfile.cpp",
    "content": "\n#include \"OperatingModes.h\"\n#include \"SolderingCommon.h\"\n#include \"ui_drawing.hpp\"\n\nOperatingMode gui_solderingProfileMode(const ButtonState buttons, guiContext *cxt) {\n  /*\n   * * Soldering\n   * -> Main loop where we draw temp, and animations\n   * --> Long hold back button to exit\n   * --> Double button to exit\n   */\n\n  uint16_t tipTemp = 0;\n\n  // If this is during init, start at preheat\n  if (cxt->scratch_state.state1 == 0) {\n    cxt->scratch_state.state5 = getSettingValue(SettingsOptions::ProfilePreheatTemp);\n  }\n  uint16_t phaseTicksPerDegree      = TICKS_SECOND / getSettingValue(SettingsOptions::ProfilePreheatSpeed);\n  uint16_t profileCurrentTargetTemp = 0;\n\n  switch (buttons) {\n  case BUTTON_BOTH:\n  case BUTTON_B_LONG:\n    cxt->transitionMode = TransitionAnimation::Right;\n    return OperatingMode::HomeScreen; // exit on back long hold\n  case BUTTON_F_LONG:\n  case BUTTON_F_SHORT:\n  case BUTTON_B_SHORT:\n  case BUTTON_NONE:\n    // Not used yet\n    break;\n  default:\n    break;\n  }\n\n  if (getSettingValue(SettingsOptions::TemperatureInF)) {\n    tipTemp = TipThermoModel::getTipInF();\n  } else {\n    tipTemp = TipThermoModel::getTipInC();\n  }\n  // If time of entering is unknown; then we start now\n  if (cxt->scratch_state.state3 == 0) {\n    cxt->scratch_state.state3 = xTaskGetTickCount();\n  }\n\n  // if start temp is unknown (preheat), we're setting it now\n  if (cxt->scratch_state.state6 == 0) {\n    cxt->scratch_state.state6 = tipTemp;\n    // if this is hotter than the preheat temperature, we should fail\n    if (cxt->scratch_state.state6 >= cxt->scratch_state.state5) {\n      warnUser(translatedString(Tr->TooHotToStartProfileWarning), buttons);\n      return OperatingMode::HomeScreen;\n    }\n  }\n  uint16_t phaseElapsedSeconds = (xTaskGetTickCount() - cxt->scratch_state.state3) / TICKS_SECOND;\n\n  // Have we finished this phase?\n  // Check if we have hit our temperature target in either direction.\n  bool phaseTargetReached = false;\n  if (cxt->scratch_state.state6 < cxt->scratch_state.state5 && tipTemp >= cxt->scratch_state.state5) {\n    phaseTargetReached = true;\n  } else if (cxt->scratch_state.state6 > cxt->scratch_state.state5 && tipTemp <= cxt->scratch_state.state5) {\n    phaseTargetReached = true;\n  } else if (tipTemp == cxt->scratch_state.state5) {\n    phaseTargetReached = true;\n  }\n\n  // If we both hit the temperature target and enough time has passed, phase complete.\n  if (phaseElapsedSeconds >= cxt->scratch_state.state2 && phaseTargetReached) {\n    cxt->scratch_state.state1++;\n    cxt->scratch_state.state6 = cxt->scratch_state.state5;\n    cxt->scratch_state.state3 = xTaskGetTickCount();\n    phaseElapsedSeconds       = 0;\n    if (cxt->scratch_state.state1 > getSettingValue(SettingsOptions::ProfilePhases)) {\n      // done with all phases, lets go to cooldown\n      cxt->scratch_state.state2 = 0;\n      cxt->scratch_state.state5 = 0;\n      phaseTicksPerDegree       = TICKS_SECOND / getSettingValue(SettingsOptions::ProfileCooldownSpeed);\n    } else {\n      // set up next phase\n      switch (cxt->scratch_state.state1) {\n      case 1:\n        cxt->scratch_state.state2 = getSettingValue(SettingsOptions::ProfilePhase1Duration);\n        cxt->scratch_state.state5 = getSettingValue(SettingsOptions::ProfilePhase1Temp);\n        break;\n      case 2:\n        cxt->scratch_state.state2 = getSettingValue(SettingsOptions::ProfilePhase2Duration);\n        cxt->scratch_state.state5 = getSettingValue(SettingsOptions::ProfilePhase2Temp);\n        break;\n      case 3:\n        cxt->scratch_state.state2 = getSettingValue(SettingsOptions::ProfilePhase3Duration);\n        cxt->scratch_state.state5 = getSettingValue(SettingsOptions::ProfilePhase3Temp);\n        break;\n      case 4:\n        cxt->scratch_state.state2 = getSettingValue(SettingsOptions::ProfilePhase4Duration);\n        cxt->scratch_state.state5 = getSettingValue(SettingsOptions::ProfilePhase4Temp);\n        break;\n      case 5:\n        cxt->scratch_state.state2 = getSettingValue(SettingsOptions::ProfilePhase5Duration);\n        cxt->scratch_state.state5 = getSettingValue(SettingsOptions::ProfilePhase5Temp);\n        break;\n      default:\n        break;\n      }\n      if (cxt->scratch_state.state6 < cxt->scratch_state.state5) {\n        phaseTicksPerDegree = (cxt->scratch_state.state2 * TICKS_SECOND) / (cxt->scratch_state.state5 - cxt->scratch_state.state6);\n      } else {\n        phaseTicksPerDegree = (cxt->scratch_state.state2 * TICKS_SECOND) / (cxt->scratch_state.state6 - cxt->scratch_state.state5);\n      }\n    }\n  }\n\n  // cooldown phase done?\n  if (cxt->scratch_state.state1 > getSettingValue(SettingsOptions::ProfilePhases)) {\n    if (TipThermoModel::getTipInC() < 55) {\n      // we're done, let the buzzer beep too\n      setStatusLED(LED_STANDBY);\n      if (cxt->scratch_state.state4 == 0) {\n        setBuzzer(true);\n        cxt->scratch_state.state4 = xTaskGetTickCount() + TICKS_SECOND / 3;\n      }\n    }\n  }\n\n  // determine current target temp\n  if (cxt->scratch_state.state6 < cxt->scratch_state.state5) {\n    profileCurrentTargetTemp = cxt->scratch_state.state6 + ((xTaskGetTickCount() - cxt->viewEnterTime) / phaseTicksPerDegree);\n    if (profileCurrentTargetTemp > cxt->scratch_state.state5) {\n      profileCurrentTargetTemp = cxt->scratch_state.state5;\n    }\n  } else if (cxt->scratch_state.state6 > cxt->scratch_state.state5) {\n    profileCurrentTargetTemp = cxt->scratch_state.state6 - ((xTaskGetTickCount() - cxt->viewEnterTime) / phaseTicksPerDegree);\n    // Chance of an overflow when ramping up is basically zero, but chance of an underflow here is quite high. If the target underflowed, snap it back.\n    if (profileCurrentTargetTemp < cxt->scratch_state.state5 || profileCurrentTargetTemp > cxt->scratch_state.state6) {\n      profileCurrentTargetTemp = cxt->scratch_state.state5;\n    }\n  } else {\n    profileCurrentTargetTemp = cxt->scratch_state.state5;\n  }\n\n  // Draw in the screen details\n  if (getSettingValue(SettingsOptions::DetailedSoldering)) {\n    ui_draw_soldering_profile_advanced(tipTemp, profileCurrentTargetTemp, phaseElapsedSeconds, cxt->scratch_state.state1, cxt->scratch_state.state2);\n    ui_draw_soldering_power_status(false);\n  } else {\n    ui_draw_soldering_basic_status(false);\n  }\n\n  // Update the setpoints for the temperature\n  if (getSettingValue(SettingsOptions::TemperatureInF)) {\n    currentTempTargetDegC = TipThermoModel::convertFtoC(profileCurrentTargetTemp);\n  } else {\n    currentTempTargetDegC = profileCurrentTargetTemp;\n  }\n\n  if (checkExitSoldering() || (cxt->scratch_state.state4 != 0 && xTaskGetTickCount() >= cxt->scratch_state.state4)) {\n    setBuzzer(false);\n    return OperatingMode::HomeScreen;\n  }\n  if (heaterThermalRunawayCounter > 8) {\n    currentTempTargetDegC       = 0; // heater control off\n    heaterThermalRunawayCounter = 0;\n    return OperatingMode::ThermalRunaway;\n  }\n\n  // Update LED status\n  if (cxt->scratch_state.state1 == 0) {\n    setStatusLED(LED_HEATING);\n  } else if (cxt->scratch_state.state1 > getSettingValue(SettingsOptions::ProfilePhases)) {\n    setStatusLED(LED_COOLING_STILL_HOT);\n  } else {\n    setStatusLED(LED_HOT);\n  }\n  return OperatingMode::SolderingProfile;\n}\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/TemperatureAdjust.cpp",
    "content": "#include \"OperatingModes.h\"\n#include \"ui_drawing.hpp\"\n\nOperatingMode gui_solderingTempAdjust(const ButtonState buttonIn, guiContext *cxt) {\n\n  currentTempTargetDegC              = 0; // Turn off heater while adjusting temp\n  uint16_t   *waitForRelease         = &(cxt->scratch_state.state1);\n  uint32_t   *autoRepeatTimer        = &(cxt->scratch_state.state3);\n  uint16_t   *autoRepeatAcceleration = &(cxt->scratch_state.state2);\n  ButtonState buttons                = buttonIn;\n  if (*waitForRelease == 0) {\n    // When we first enter we wait for the user to release buttons before enabling changes\n    if (buttons != BUTTON_NONE) {\n      buttons = BUTTON_NONE;\n    } else {\n      (*waitForRelease)++;\n    }\n  }\n\n  int16_t delta = 0;\n  switch (buttons) {\n  case BUTTON_NONE:\n    // stay\n    (*autoRepeatAcceleration) = 0;\n    break;\n  case BUTTON_BOTH:\n    // exit\n    saveSettings();\n    cxt->transitionMode = TransitionAnimation::Right;\n    return cxt->previousMode;\n  case BUTTON_B_LONG:\n    if (xTaskGetTickCount() - (*autoRepeatTimer) + (*autoRepeatAcceleration) > PRESS_ACCEL_INTERVAL_MAX) {\n      delta              = -getSettingValue(SettingsOptions::TempChangeLongStep);\n      (*autoRepeatTimer) = xTaskGetTickCount();\n      (*autoRepeatAcceleration) += PRESS_ACCEL_STEP;\n    }\n    break;\n  case BUTTON_B_SHORT:\n    delta = -getSettingValue(SettingsOptions::TempChangeShortStep);\n    break;\n  case BUTTON_F_LONG:\n    if (xTaskGetTickCount() - (*autoRepeatTimer) + (*autoRepeatAcceleration) > PRESS_ACCEL_INTERVAL_MAX) {\n      delta              = getSettingValue(SettingsOptions::TempChangeLongStep);\n      (*autoRepeatTimer) = xTaskGetTickCount();\n      (*autoRepeatAcceleration) += PRESS_ACCEL_STEP;\n    }\n    break;\n  case BUTTON_F_SHORT:\n    delta = getSettingValue(SettingsOptions::TempChangeShortStep);\n    break;\n  default:\n    break;\n  }\n  if ((PRESS_ACCEL_INTERVAL_MAX - (*autoRepeatAcceleration)) < PRESS_ACCEL_INTERVAL_MIN) {\n    (*autoRepeatAcceleration) = PRESS_ACCEL_INTERVAL_MAX - PRESS_ACCEL_INTERVAL_MIN;\n  }\n  // If buttons are flipped; flip the delta\n  if (getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled)) {\n    delta = -delta;\n  }\n  if (delta != 0) {\n    // constrain between the set temp limits, i.e. 10-450 C\n    int16_t newTemp = getSettingValue(SettingsOptions::SolderingTemp);\n    newTemp += delta;\n    // Round to nearest increment of delta\n    delta   = abs(delta);\n    newTemp = (newTemp / delta) * delta;\n\n    if (getSettingValue(SettingsOptions::TemperatureInF)) {\n      if (newTemp > MAX_TEMP_F) {\n        newTemp = MAX_TEMP_F;\n      } else if (newTemp < MIN_TEMP_F) {\n        newTemp = MIN_TEMP_F;\n      }\n    } else {\n      if (newTemp > MAX_TEMP_C) {\n        newTemp = MAX_TEMP_C;\n      } else if (newTemp < MIN_TEMP_C) {\n        newTemp = MIN_TEMP_C;\n      }\n    }\n    setSettingValue(SettingsOptions::SolderingTemp, (uint16_t)newTemp);\n  }\n  ui_draw_temperature_change();\n\n  if (xTaskGetTickCount() - lastButtonTime > (TICKS_SECOND * 3)) {\n    saveSettings();\n    cxt->transitionMode = TransitionAnimation::Right;\n    return cxt->previousMode; // exit if user just doesn't press anything for a bit\n  }\n  return OperatingMode::TemperatureAdjust; // Stay in temp adjust\n}\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/USBPDDebug_FS2711.cpp",
    "content": "#include \"FS2711.hpp\"\n#include \"OperatingModes.h\"\n#include \"stdbool.h\"\n#include \"ui_drawing.hpp\"\n#if POW_PD_EXT == 2\n#ifdef HAS_POWER_DEBUG_MENU\n\nOperatingMode showPDDebug(const ButtonState buttons, guiContext *cxt) {\n  // Print out the USB-PD state\n  // Basically this is like the Debug menu, but instead we want to print out the PD status\n  uint16_t *screen = &(cxt->scratch_state.state1);\n\n  if (*screen > 7) {\n    *screen = 0;\n  }\n  if (*screen == 0) {\n    // Print the PD Debug state\n    fs2711_state_t state = FS2711::debug_get_state();\n\n    ui_draw_usb_pd_debug_state(0, state.pdo_num);\n  } else {\n\n    // Print out the Proposed power options one by one\n    uint16_t max_voltage = FS2711::debug_pdo_max_voltage(*screen - 1);\n    if (max_voltage == 0) {\n      *screen += 1;\n    } else {\n      uint16_t min_voltage = FS2711::debug_pdo_min_voltage(*screen - 1);\n      uint16_t current     = FS2711::debug_pdo_source_current(*screen - 1);\n      uint16_t pdo_type    = FS2711::debug_pdo_type(*screen - 1);\n      if (pdo_type != 1) {\n        min_voltage = 0;\n      }\n\n      ui_draw_usb_pd_debug_pdo(*screen, min_voltage / 1000, max_voltage / 1000, current * 1, 0);\n    }\n  }\n\n  OLED::refresh();\n\n  if (buttons == BUTTON_B_SHORT) {\n    return OperatingMode::InitialisationDone;\n  } else if (buttons == BUTTON_F_SHORT) {\n    *screen++;\n  }\n\n  return OperatingMode::UsbPDDebug;\n}\n#endif\n#endif\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/USBPDDebug_FUSB.cpp",
    "content": "#include \"OperatingModes.h\"\n#include \"ui_drawing.hpp\"\n#ifdef POW_PD\n#include \"pd.h\"\n#ifdef HAS_POWER_DEBUG_MENU\nOperatingMode showPDDebug(const ButtonState buttons, guiContext *cxt) {\n  // Print out the USB-PD state\n  // Basically this is like the Debug menu, but instead we want to print out the PD status\n  uint16_t *screen = &(cxt->scratch_state.state1);\n\n  if ((*screen) == 0) {\n    // Print the PD state machine\n    uint8_t vbusState = 0;\n    if (USBPowerDelivery::fusbPresent()) {\n      if (USBPowerDelivery::negotiationComplete() || (xTaskGetTickCount() > (TICKS_SECOND * 10))) {\n        if (!USBPowerDelivery::isVBUSConnected()) {\n          vbusState = 2;\n        } else {\n          vbusState = 1;\n        }\n      }\n    }\n    ui_draw_usb_pd_debug_state(vbusState, USBPowerDelivery::getStateNumber());\n  } else {\n    // Print out the Proposed power options one by one\n    auto lastCaps           = USBPowerDelivery::getLastSeenCapabilities();\n    bool sourceIsEPRCapable = lastCaps[0] & PD_PDO_SRC_FIXED_EPR_CAPABLE;\n    if (((*screen) - 1) < 11) {\n      int voltage_mv     = 0;\n      int min_voltage    = 0;\n      int current_a_x100 = 0;\n      int wattage        = 0;\n\n      if ((lastCaps[(*screen) - 1] & PD_PDO_TYPE) == PD_PDO_TYPE_FIXED) {\n        voltage_mv     = PD_PDV2MV(PD_PDO_SRC_FIXED_VOLTAGE_GET(lastCaps[(*screen) - 1])); // voltage in mV units\n        current_a_x100 = PD_PDO_SRC_FIXED_CURRENT_GET(lastCaps[(*screen) - 1]);            // current in 10mA units\n      } else if ((lastCaps[(*screen) - 1] & PD_PDO_TYPE) == PD_PDO_TYPE_AUGMENTED) {\n        if (sourceIsEPRCapable) {\n          if ((lastCaps[(*screen) - 1] & PD_APDO_TYPE) == PD_APDO_TYPE_AVS) {\n            voltage_mv  = PD_PAV2MV(PD_APDO_AVS_MAX_VOLTAGE_GET(lastCaps[(*screen) - 1]));\n            min_voltage = PD_PAV2MV(PD_APDO_PPS_MIN_VOLTAGE_GET(lastCaps[(*screen) - 1]));\n            // Last value is wattage\n            wattage = PD_APDO_AVS_MAX_POWER_GET(lastCaps[(*screen) - 1]);\n          } else if (((lastCaps[(*screen) - 1] & PD_APDO_TYPE) == PD_APDO_TYPE_PPS)) {\n            voltage_mv     = PD_PAV2MV(PD_APDO_PPS_MAX_VOLTAGE_GET(lastCaps[(*screen) - 1]));\n            min_voltage    = PD_PAV2MV(PD_APDO_PPS_MIN_VOLTAGE_GET(lastCaps[(*screen) - 1]));\n            current_a_x100 = PD_PAI2CA(PD_APDO_PPS_CURRENT_GET(lastCaps[(*screen) - 1])); // max current in 10mA units\n          }\n        } else {\n          // Doesn't have EPR support. So treat as PPS\n          // https://github.com/Ralim/IronOS/issues/1906\n          voltage_mv     = PD_PAV2MV(PD_APDO_PPS_MAX_VOLTAGE_GET(lastCaps[(*screen) - 1]));\n          min_voltage    = PD_PAV2MV(PD_APDO_PPS_MIN_VOLTAGE_GET(lastCaps[(*screen) - 1]));\n          current_a_x100 = PD_PAI2CA(PD_APDO_PPS_CURRENT_GET(lastCaps[(*screen) - 1])); // max current in 10mA units\n        }\n      }\n      // Skip not used entries\n      if (voltage_mv == 0) {\n        (*screen) += 1;\n      } else {\n        ui_draw_usb_pd_debug_pdo(*screen, min_voltage / 1000, voltage_mv / 1000, current_a_x100, wattage);\n      }\n    } else {\n      (*screen) = 0;\n    }\n  }\n  if (buttons == BUTTON_B_SHORT) {\n    return OperatingMode::InitialisationDone;\n  } else if (buttons == BUTTON_F_SHORT) {\n    (*screen) += 1;\n  }\n  return OperatingMode::UsbPDDebug;\n}\n#endif\n#endif\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/USBPDDebug_HUSB238.cpp",
    "content": "#include \"HUB238.hpp\"\n#include \"OperatingModes.h\"\n#include \"ui_drawing.hpp\"\n#if POW_PD_EXT == 1\n#ifdef HAS_POWER_DEBUG_MENU\nOperatingMode showPDDebug(const ButtonState buttons, guiContext *cxt) {\n  // Print out the USB-PD state\n  // Basically this is like the Debug menu, but instead we want to print out the PD status\n  uint16_t *screen = &(cxt->scratch_state.state1);\n\n  if (*screen > 6) {\n    *screen = 0;\n  }\n  if (*screen == 0) {\n    // Print the PD Debug state\n    uint16_t temp = hub238_debug_state();\n    ui_draw_usb_pd_debug_state(0, temp);\n  } else {\n\n    // Print out the Proposed power options one by one\n    const uint8_t voltages[]  = {5, 9, 12, 15, 18, 20};\n    uint16_t      voltage     = voltages[*screen - 1];\n    uint16_t      currentx100 = hub238_getVoltagePDOCurrent(voltage);\n\n    ui_draw_usb_pd_debug_pdo(*screen, 0, voltage, currentx100, 0);\n  }\n\n  if (buttons == BUTTON_B_SHORT) {\n    return OperatingMode::InitialisationDone;\n  } else if (buttons == BUTTON_F_SHORT) {\n    *screen++;\n  }\n\n  return OperatingMode::UsbPDDebug;\n}\n#endif\n#endif\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/utils/GUIDelay.cpp",
    "content": "\n#include \"OperatingModeUtilities.h\"\n\nvoid GUIDelay() {\n  // Called in all UI looping tasks,\n  // This limits the re-draw rate to the LCD and also lets the DMA run\n  // As the gui task can very easily fill this bus with transactions, which will\n  // prevent the movement detection from running\n  vTaskDelay(5 * TICKS_10MS);\n}"
  },
  {
    "path": "source/Core/Threads/UI/logic/utils/OperatingModeUtilities.h",
    "content": "#ifndef OPERATING_MODE_UTILITIES_H_\n#define OPERATING_MODE_UTILITIES_H_\n#include \"Buttons.hpp\"\n#include \"OLED.hpp\"\n#include \"Settings.h\"\n#include <stdbool.h>\n\nvoid     GUIDelay();                               //\nbool     checkForUnderVoltage(void);               //\nuint32_t getSleepTimeout(void);                    //\nuint32_t getHallEffectSleepTimeout(void);          //\nbool     shouldBeSleeping();                       //\nbool     shouldShutdown(void);                     //\nvoid     printVoltage(void);                       //\nbool     checkForUnderVoltage(void);               //\nuint16_t min(uint16_t a, uint16_t b);              //\nvoid     printCountdownUntilSleep(int sleepThres); //\n#endif\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/utils/SolderingCommon.cpp",
    "content": "//\n// Created by laura on 24.04.23.\n//\n\n#include \"SolderingCommon.h\"\n#include \"OperatingModes.h\"\n#include \"Types.h\"\n#include \"configuration.h\"\n#include \"history.hpp\"\n#include \"ui_drawing.hpp\"\n\nextern uint8_t heaterThermalRunawayCounter;\n\nbool checkExitSoldering(void) {\n#ifdef POW_DC\n  // Undervoltage test\n  if (checkForUnderVoltage()) {\n    lastButtonTime = xTaskGetTickCount();\n    return true;\n  }\n#endif\n\n#ifdef ACCEL_EXITS_ON_MOVEMENT\n  // If the accel works in reverse where movement will cause exiting the soldering mode\n  if (getSettingValue(Sensitivity)) {\n    if (lastMovementTime) {\n      if (lastMovementTime > TICKS_SECOND * 10) {\n        // If we have moved recently; in the last second\n        // Then exit soldering mode\n\n        // Movement occurred in last update\n        if (((TickType_t)(xTaskGetTickCount() - lastMovementTime)) < (TickType_t)(TICKS_SECOND / 5)) {\n          currentTempTargetDegC = 0;\n          lastMovementTime      = 0;\n          return true;\n        }\n      }\n    }\n  }\n#endif\n\n  // If we have tripped thermal runaway, turn off heater and show warning\n\n  return false;\n}\n\nint8_t getPowerSourceNumber(void) {\n  int8_t sourceNumber = 0;\n  if (getIsPoweredByDCIN()) {\n    sourceNumber = 0;\n  } else {\n    // We are not powered via DC, so want to display the appropriate state for PD or QC\n    bool poweredbyPD        = false;\n    bool pdHasVBUSConnected = false;\n#ifdef POW_PD\n    if (USBPowerDelivery::fusbPresent()) {\n      // We are PD capable\n      if (USBPowerDelivery::negotiationComplete()) {\n        // We are powered via PD\n        poweredbyPD = true;\n#ifdef VBUS_MOD_TEST\n        pdHasVBUSConnected = USBPowerDelivery::isVBUSConnected();\n#endif\n      }\n    }\n#endif\n    if (poweredbyPD) {\n      if (pdHasVBUSConnected) {\n        sourceNumber = 2;\n      } else {\n        sourceNumber = 3;\n      }\n    } else {\n      sourceNumber = 1;\n    }\n  }\n  return sourceNumber;\n}\n\n// Returns temperature of the tip in *C/*F (based on user settings)\nTemperatureType_t getTipTemp(void) {\n#ifdef FILTER_DISPLAYED_TIP_TEMP\n  static history<TemperatureType_t, FILTER_DISPLAYED_TIP_TEMP> Filter_Temp;\n  TemperatureType_t                                            reading = getSettingValue(SettingsOptions::TemperatureInF) ? TipThermoModel::getTipInF() : TipThermoModel::getTipInC();\n  Filter_Temp.update(reading);\n  return Filter_Temp.average();\n\n#else\n  return getSettingValue(SettingsOptions::TemperatureInF) ? TipThermoModel::getTipInF() : TipThermoModel::getTipInC();\n#endif\n}\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/utils/SolderingCommon.h",
    "content": "#include \"Types.h\"\n#include <stdint.h>\n#ifndef SOLDERING_COMMON_H_\n#define SOLDERING_COMMON_H_\n\nbool              checkExitSoldering();\nTemperatureType_t getTipTemp(void);\n\n#endif // SOLDERING_COMMON_H_\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/utils/checkUndervoltage.cpp",
    "content": "#include \"Buttons.hpp\"\n#include \"OperatingModeUtilities.h\"\n#include \"configuration.h\"\n#include \"ui_drawing.hpp\"\n#ifdef POW_DC\nextern volatile TemperatureType_t currentTempTargetDegC;\n// returns true if undervoltage has occured\nbool checkForUnderVoltage(void) {\n  if (!getIsPoweredByDCIN()) {\n    return false;\n  }\n  uint16_t v = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0);\n\n  // Dont check for first 2 seconds while the ADC stabilizes and the DMA fills\n  // the buffer\n  if (xTaskGetTickCount() > (TICKS_SECOND * 2)) {\n    if ((v < lookupVoltageLevel())) {\n      currentTempTargetDegC = 0;\n      ui_draw_warning_undervoltage();\n      return true;\n    }\n  }\n  return false;\n}\n#endif"
  },
  {
    "path": "source/Core/Threads/UI/logic/utils/getHallEffectSleepTimeout.cpp",
    "content": "#include \"OperatingModeUtilities.h\"\n\n#ifndef NO_SLEEP_MODE\n#ifdef HALL_SENSOR\nuint32_t getHallEffectSleepTimeout(void) {\n  if (getSettingValue(SettingsOptions::HallEffectSensitivity) && getSettingValue(SettingsOptions::HallEffectSleepTime)) {\n    uint32_t sleepThres = getSettingValue(SettingsOptions::HallEffectSleepTime) * 5 * TICKS_SECOND;\n    return sleepThres;\n  }\n  return TICKS_SECOND;\n}\n#endif\n#endif\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/utils/getSleepTimeout.cpp",
    "content": "#include \"OperatingModeUtilities.h\"\n\n#ifndef NO_SLEEP_MODE\n\nuint32_t getSleepTimeout(void) {\n\n  if (getSettingValue(SettingsOptions::Sensitivity) && getSettingValue(SettingsOptions::SleepTime)) {\n\n    uint32_t sleepThres = 0;\n    if (getSettingValue(SettingsOptions::SleepTime) < 6) {\n      sleepThres = getSettingValue(SettingsOptions::SleepTime) * 10 * 1000;\n    } else {\n      sleepThres = (getSettingValue(SettingsOptions::SleepTime) - 5) * 60 * 1000;\n    }\n    return sleepThres;\n  }\n  return 0;\n}\n#endif\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/utils/min.cpp",
    "content": "\n\n#include \"OperatingModeUtilities.h\"\n#include <stdint.h>\nuint16_t min(uint16_t a, uint16_t b) {\n  if (a > b) {\n    return b;\n  } else {\n    return a;\n  }\n}\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/utils/shouldDeviceShutdown.cpp",
    "content": "#include \"OperatingModeUtilities.h\"\n\nextern TickType_t lastMovementTime;\nextern TickType_t lastHallEffectSleepStart;\n#include \"Buttons.hpp\"\n\nbool shouldShutdown(void) {\n  if (getSettingValue(SettingsOptions::ShutdownTime)) { // only allow shutdown exit if time > 0\n    if (lastMovementTime) {\n      if (((TickType_t)(xTaskGetTickCount() - lastMovementTime)) > (TickType_t)(getSettingValue(SettingsOptions::ShutdownTime) * TICKS_MIN)) {\n        return true;\n      }\n    }\n    if (lastHallEffectSleepStart) {\n      if (((TickType_t)(xTaskGetTickCount() - lastHallEffectSleepStart)) > (TickType_t)(getSettingValue(SettingsOptions::ShutdownTime) * TICKS_MIN)) {\n        return true;\n      }\n    }\n  }\n  if (getButtonState() == BUTTON_B_LONG) { // allow also if back button is pressed long\n    return true;\n  }\n  return false;\n}\n"
  },
  {
    "path": "source/Core/Threads/UI/logic/utils/shouldDeviceSleep.cpp",
    "content": "#include \"Buttons.hpp\"\n#include \"OperatingModeUtilities.h\"\n\nTickType_t        lastHallEffectSleepStart = 0;\nextern TickType_t lastMovementTime;\n\nbool shouldBeSleeping() {\n#ifndef NO_SLEEP_MODE\n  // Return true if the iron should be in sleep mode\n  if (getSettingValue(SettingsOptions::Sensitivity) && getSettingValue(SettingsOptions::SleepTime)) {\n    // In auto start we are asleep until movement\n    if (lastMovementTime == 0 && lastButtonTime == 0) {\n      return true;\n    }\n    if (lastMovementTime > 0 || lastButtonTime > 0) {\n      if (((xTaskGetTickCount() - lastMovementTime) > getSleepTimeout()) && ((xTaskGetTickCount() - lastButtonTime) > getSleepTimeout())) {\n        return true;\n      }\n    }\n  }\n\n#ifdef HALL_SENSOR\n  // If the hall effect sensor is enabled in the build, check if its over\n  // threshold, and if so then we force sleep\n  if (getHallSensorFitted() && lookupHallEffectThreshold()) {\n    int16_t hallEffectStrength = getRawHallEffect();\n    if (hallEffectStrength < 0) {\n      hallEffectStrength = -hallEffectStrength;\n    }\n    // Have absolute value of measure of magnetic field strength\n    if (hallEffectStrength > lookupHallEffectThreshold()) {\n      if (lastHallEffectSleepStart == 0) {\n        lastHallEffectSleepStart = xTaskGetTickCount();\n      }\n      if ((xTaskGetTickCount() - lastHallEffectSleepStart) > getHallEffectSleepTimeout()) {\n        return true;\n      }\n    } else {\n      lastHallEffectSleepStart = 0;\n    }\n  }\n#endif\n#endif\n  return false;\n}\n"
  },
  {
    "path": "source/Core/brieflz/README.md",
    "content": "This directory contains file originally by other people.\n\n\n## BriefLZ\n\n- `brieflz_btparse.h`\n- `brieflz_hashbucket.h`\n- `brieflz_lazy.h`\n- `brieflz_leparse.h`\n- `brieflz.c`\n- `depack.c`\n\nThe above files are originally obtained from https://github.com/jibsen/brieflz\n(commit 0ab07a5).\n\n### License:\n\n```\nThe zlib License (Zlib)\n\nCopyright (c) 2002-2020 Joergen Ibsen\n\nThis software is provided 'as-is', without any express or implied\nwarranty. In no event will the authors be held liable for any damages\narising from the use of this software.\n\nPermission is granted to anyone to use this software for any purpose,\nincluding commercial applications, and to alter it and redistribute it\nfreely, subject to the following restrictions:\n\n  1. The origin of this software must not be misrepresented; you must\n     not claim that you wrote the original software. If you use this\n     software in a product, an acknowledgment in the product\n     documentation would be appreciated but is not required.\n\n  2. Altered source versions must be plainly marked as such, and must\n     not be misrepresented as being the original software.\n\n  3. This notice may not be removed or altered from any source\n     distribution.\n```\n"
  },
  {
    "path": "source/Core/brieflz/brieflz.c",
    "content": "//\n// BriefLZ - small fast Lempel-Ziv\n//\n// C packer\n//\n// Copyright (c) 2002-2020 Joergen Ibsen\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n//   1. The origin of this software must not be misrepresented; you must\n//      not claim that you wrote the original software. If you use this\n//      software in a product, an acknowledgment in the product\n//      documentation would be appreciated but is not required.\n//\n//   2. Altered source versions must be plainly marked as such, and must\n//      not be misrepresented as being the original software.\n//\n//   3. This notice may not be removed or altered from any source\n//      distribution.\n//\n\n#include \"brieflz.h\"\n\n#include <assert.h>\n#include <limits.h>\n#include <stdint.h>\n\n#if _MSC_VER >= 1400\n#include <intrin.h>\n#define BLZ_BUILTIN_MSVC\n#elif defined(__clang__) && defined(__has_builtin)\n#if __has_builtin(__builtin_clz)\n#define BLZ_BUILTIN_GCC\n#endif\n#elif __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)\n#define BLZ_BUILTIN_GCC\n#endif\n\n// Type used to store values in workmem.\n//\n// This is used to store positions and lengths, so src_size has to be within\n// the range of this type.\n//\ntypedef uint32_t blz_word;\n\n#define BLZ_WORD_MAX UINT32_MAX\n\n// Number of bits of hash to use for lookup.\n//\n// The size of the lookup table (and thus workmem) depends on this.\n//\n// Values between 10 and 18 work well. Lower values generally make compression\n// speed faster but ratio worse. The default value 17 (128k entries) is a\n// compromise.\n//\n#ifndef BLZ_HASH_BITS\n#define BLZ_HASH_BITS 17\n#endif\n\n#define LOOKUP_SIZE (1UL << BLZ_HASH_BITS)\n\n#define NO_MATCH_POS ((blz_word) - 1)\n\n// Internal data structure\nstruct blz_state {\n  unsigned char *next_out;\n  unsigned char *tag_out;\n  unsigned int   tag;\n  int            bits_left;\n};\n\n// clang-format off\n#if !defined(BLZ_NO_LUT)\nstatic const unsigned short blz_gamma_lookup[512][2] = {\n    {0, 0},       {0, 0},\n\n    {0x00, 2},    {0x02, 2},\n\n    {0x04, 4},    {0x06, 4},    {0x0C, 4},    {0x0E, 4},\n\n    {0x14, 6},    {0x16, 6},    {0x1C, 6},    {0x1E, 6},    {0x34, 6},    {0x36, 6},    {0x3C, 6},    {0x3E, 6},\n\n    {0x54, 8},    {0x56, 8},    {0x5C, 8},    {0x5E, 8},    {0x74, 8},    {0x76, 8},    {0x7C, 8},    {0x7E, 8},    {0xD4, 8},    {0xD6, 8},    {0xDC, 8},    {0xDE, 8},    {0xF4, 8},    {0xF6, 8},\n    {0xFC, 8},    {0xFE, 8},\n\n    {0x154, 10},  {0x156, 10},  {0x15C, 10},  {0x15E, 10},  {0x174, 10},  {0x176, 10},  {0x17C, 10},  {0x17E, 10},  {0x1D4, 10},  {0x1D6, 10},  {0x1DC, 10},  {0x1DE, 10},  {0x1F4, 10},  {0x1F6, 10},\n    {0x1FC, 10},  {0x1FE, 10},  {0x354, 10},  {0x356, 10},  {0x35C, 10},  {0x35E, 10},  {0x374, 10},  {0x376, 10},  {0x37C, 10},  {0x37E, 10},  {0x3D4, 10},  {0x3D6, 10},  {0x3DC, 10},  {0x3DE, 10},\n    {0x3F4, 10},  {0x3F6, 10},  {0x3FC, 10},  {0x3FE, 10},\n\n    {0x554, 12},  {0x556, 12},  {0x55C, 12},  {0x55E, 12},  {0x574, 12},  {0x576, 12},  {0x57C, 12},  {0x57E, 12},  {0x5D4, 12},  {0x5D6, 12},  {0x5DC, 12},  {0x5DE, 12},  {0x5F4, 12},  {0x5F6, 12},\n    {0x5FC, 12},  {0x5FE, 12},  {0x754, 12},  {0x756, 12},  {0x75C, 12},  {0x75E, 12},  {0x774, 12},  {0x776, 12},  {0x77C, 12},  {0x77E, 12},  {0x7D4, 12},  {0x7D6, 12},  {0x7DC, 12},  {0x7DE, 12},\n    {0x7F4, 12},  {0x7F6, 12},  {0x7FC, 12},  {0x7FE, 12},  {0xD54, 12},  {0xD56, 12},  {0xD5C, 12},  {0xD5E, 12},  {0xD74, 12},  {0xD76, 12},  {0xD7C, 12},  {0xD7E, 12},  {0xDD4, 12},  {0xDD6, 12},\n    {0xDDC, 12},  {0xDDE, 12},  {0xDF4, 12},  {0xDF6, 12},  {0xDFC, 12},  {0xDFE, 12},  {0xF54, 12},  {0xF56, 12},  {0xF5C, 12},  {0xF5E, 12},  {0xF74, 12},  {0xF76, 12},  {0xF7C, 12},  {0xF7E, 12},\n    {0xFD4, 12},  {0xFD6, 12},  {0xFDC, 12},  {0xFDE, 12},  {0xFF4, 12},  {0xFF6, 12},  {0xFFC, 12},  {0xFFE, 12},\n\n    {0x1554, 14}, {0x1556, 14}, {0x155C, 14}, {0x155E, 14}, {0x1574, 14}, {0x1576, 14}, {0x157C, 14}, {0x157E, 14}, {0x15D4, 14}, {0x15D6, 14}, {0x15DC, 14}, {0x15DE, 14}, {0x15F4, 14}, {0x15F6, 14},\n    {0x15FC, 14}, {0x15FE, 14}, {0x1754, 14}, {0x1756, 14}, {0x175C, 14}, {0x175E, 14}, {0x1774, 14}, {0x1776, 14}, {0x177C, 14}, {0x177E, 14}, {0x17D4, 14}, {0x17D6, 14}, {0x17DC, 14}, {0x17DE, 14},\n    {0x17F4, 14}, {0x17F6, 14}, {0x17FC, 14}, {0x17FE, 14}, {0x1D54, 14}, {0x1D56, 14}, {0x1D5C, 14}, {0x1D5E, 14}, {0x1D74, 14}, {0x1D76, 14}, {0x1D7C, 14}, {0x1D7E, 14}, {0x1DD4, 14}, {0x1DD6, 14},\n    {0x1DDC, 14}, {0x1DDE, 14}, {0x1DF4, 14}, {0x1DF6, 14}, {0x1DFC, 14}, {0x1DFE, 14}, {0x1F54, 14}, {0x1F56, 14}, {0x1F5C, 14}, {0x1F5E, 14}, {0x1F74, 14}, {0x1F76, 14}, {0x1F7C, 14}, {0x1F7E, 14},\n    {0x1FD4, 14}, {0x1FD6, 14}, {0x1FDC, 14}, {0x1FDE, 14}, {0x1FF4, 14}, {0x1FF6, 14}, {0x1FFC, 14}, {0x1FFE, 14}, {0x3554, 14}, {0x3556, 14}, {0x355C, 14}, {0x355E, 14}, {0x3574, 14}, {0x3576, 14},\n    {0x357C, 14}, {0x357E, 14}, {0x35D4, 14}, {0x35D6, 14}, {0x35DC, 14}, {0x35DE, 14}, {0x35F4, 14}, {0x35F6, 14}, {0x35FC, 14}, {0x35FE, 14}, {0x3754, 14}, {0x3756, 14}, {0x375C, 14}, {0x375E, 14},\n    {0x3774, 14}, {0x3776, 14}, {0x377C, 14}, {0x377E, 14}, {0x37D4, 14}, {0x37D6, 14}, {0x37DC, 14}, {0x37DE, 14}, {0x37F4, 14}, {0x37F6, 14}, {0x37FC, 14}, {0x37FE, 14}, {0x3D54, 14}, {0x3D56, 14},\n    {0x3D5C, 14}, {0x3D5E, 14}, {0x3D74, 14}, {0x3D76, 14}, {0x3D7C, 14}, {0x3D7E, 14}, {0x3DD4, 14}, {0x3DD6, 14}, {0x3DDC, 14}, {0x3DDE, 14}, {0x3DF4, 14}, {0x3DF6, 14}, {0x3DFC, 14}, {0x3DFE, 14},\n    {0x3F54, 14}, {0x3F56, 14}, {0x3F5C, 14}, {0x3F5E, 14}, {0x3F74, 14}, {0x3F76, 14}, {0x3F7C, 14}, {0x3F7E, 14}, {0x3FD4, 14}, {0x3FD6, 14}, {0x3FDC, 14}, {0x3FDE, 14}, {0x3FF4, 14}, {0x3FF6, 14},\n    {0x3FFC, 14}, {0x3FFE, 14},\n\n    {0x5554, 16}, {0x5556, 16}, {0x555C, 16}, {0x555E, 16}, {0x5574, 16}, {0x5576, 16}, {0x557C, 16}, {0x557E, 16}, {0x55D4, 16}, {0x55D6, 16}, {0x55DC, 16}, {0x55DE, 16}, {0x55F4, 16}, {0x55F6, 16},\n    {0x55FC, 16}, {0x55FE, 16}, {0x5754, 16}, {0x5756, 16}, {0x575C, 16}, {0x575E, 16}, {0x5774, 16}, {0x5776, 16}, {0x577C, 16}, {0x577E, 16}, {0x57D4, 16}, {0x57D6, 16}, {0x57DC, 16}, {0x57DE, 16},\n    {0x57F4, 16}, {0x57F6, 16}, {0x57FC, 16}, {0x57FE, 16}, {0x5D54, 16}, {0x5D56, 16}, {0x5D5C, 16}, {0x5D5E, 16}, {0x5D74, 16}, {0x5D76, 16}, {0x5D7C, 16}, {0x5D7E, 16}, {0x5DD4, 16}, {0x5DD6, 16},\n    {0x5DDC, 16}, {0x5DDE, 16}, {0x5DF4, 16}, {0x5DF6, 16}, {0x5DFC, 16}, {0x5DFE, 16}, {0x5F54, 16}, {0x5F56, 16}, {0x5F5C, 16}, {0x5F5E, 16}, {0x5F74, 16}, {0x5F76, 16}, {0x5F7C, 16}, {0x5F7E, 16},\n    {0x5FD4, 16}, {0x5FD6, 16}, {0x5FDC, 16}, {0x5FDE, 16}, {0x5FF4, 16}, {0x5FF6, 16}, {0x5FFC, 16}, {0x5FFE, 16}, {0x7554, 16}, {0x7556, 16}, {0x755C, 16}, {0x755E, 16}, {0x7574, 16}, {0x7576, 16},\n    {0x757C, 16}, {0x757E, 16}, {0x75D4, 16}, {0x75D6, 16}, {0x75DC, 16}, {0x75DE, 16}, {0x75F4, 16}, {0x75F6, 16}, {0x75FC, 16}, {0x75FE, 16}, {0x7754, 16}, {0x7756, 16}, {0x775C, 16}, {0x775E, 16},\n    {0x7774, 16}, {0x7776, 16}, {0x777C, 16}, {0x777E, 16}, {0x77D4, 16}, {0x77D6, 16}, {0x77DC, 16}, {0x77DE, 16}, {0x77F4, 16}, {0x77F6, 16}, {0x77FC, 16}, {0x77FE, 16}, {0x7D54, 16}, {0x7D56, 16},\n    {0x7D5C, 16}, {0x7D5E, 16}, {0x7D74, 16}, {0x7D76, 16}, {0x7D7C, 16}, {0x7D7E, 16}, {0x7DD4, 16}, {0x7DD6, 16}, {0x7DDC, 16}, {0x7DDE, 16}, {0x7DF4, 16}, {0x7DF6, 16}, {0x7DFC, 16}, {0x7DFE, 16},\n    {0x7F54, 16}, {0x7F56, 16}, {0x7F5C, 16}, {0x7F5E, 16}, {0x7F74, 16}, {0x7F76, 16}, {0x7F7C, 16}, {0x7F7E, 16}, {0x7FD4, 16}, {0x7FD6, 16}, {0x7FDC, 16}, {0x7FDE, 16}, {0x7FF4, 16}, {0x7FF6, 16},\n    {0x7FFC, 16}, {0x7FFE, 16}, {0xD554, 16}, {0xD556, 16}, {0xD55C, 16}, {0xD55E, 16}, {0xD574, 16}, {0xD576, 16}, {0xD57C, 16}, {0xD57E, 16}, {0xD5D4, 16}, {0xD5D6, 16}, {0xD5DC, 16}, {0xD5DE, 16},\n    {0xD5F4, 16}, {0xD5F6, 16}, {0xD5FC, 16}, {0xD5FE, 16}, {0xD754, 16}, {0xD756, 16}, {0xD75C, 16}, {0xD75E, 16}, {0xD774, 16}, {0xD776, 16}, {0xD77C, 16}, {0xD77E, 16}, {0xD7D4, 16}, {0xD7D6, 16},\n    {0xD7DC, 16}, {0xD7DE, 16}, {0xD7F4, 16}, {0xD7F6, 16}, {0xD7FC, 16}, {0xD7FE, 16}, {0xDD54, 16}, {0xDD56, 16}, {0xDD5C, 16}, {0xDD5E, 16}, {0xDD74, 16}, {0xDD76, 16}, {0xDD7C, 16}, {0xDD7E, 16},\n    {0xDDD4, 16}, {0xDDD6, 16}, {0xDDDC, 16}, {0xDDDE, 16}, {0xDDF4, 16}, {0xDDF6, 16}, {0xDDFC, 16}, {0xDDFE, 16}, {0xDF54, 16}, {0xDF56, 16}, {0xDF5C, 16}, {0xDF5E, 16}, {0xDF74, 16}, {0xDF76, 16},\n    {0xDF7C, 16}, {0xDF7E, 16}, {0xDFD4, 16}, {0xDFD6, 16}, {0xDFDC, 16}, {0xDFDE, 16}, {0xDFF4, 16}, {0xDFF6, 16}, {0xDFFC, 16}, {0xDFFE, 16}, {0xF554, 16}, {0xF556, 16}, {0xF55C, 16}, {0xF55E, 16},\n    {0xF574, 16}, {0xF576, 16}, {0xF57C, 16}, {0xF57E, 16}, {0xF5D4, 16}, {0xF5D6, 16}, {0xF5DC, 16}, {0xF5DE, 16}, {0xF5F4, 16}, {0xF5F6, 16}, {0xF5FC, 16}, {0xF5FE, 16}, {0xF754, 16}, {0xF756, 16},\n    {0xF75C, 16}, {0xF75E, 16}, {0xF774, 16}, {0xF776, 16}, {0xF77C, 16}, {0xF77E, 16}, {0xF7D4, 16}, {0xF7D6, 16}, {0xF7DC, 16}, {0xF7DE, 16}, {0xF7F4, 16}, {0xF7F6, 16}, {0xF7FC, 16}, {0xF7FE, 16},\n    {0xFD54, 16}, {0xFD56, 16}, {0xFD5C, 16}, {0xFD5E, 16}, {0xFD74, 16}, {0xFD76, 16}, {0xFD7C, 16}, {0xFD7E, 16}, {0xFDD4, 16}, {0xFDD6, 16}, {0xFDDC, 16}, {0xFDDE, 16}, {0xFDF4, 16}, {0xFDF6, 16},\n    {0xFDFC, 16}, {0xFDFE, 16}, {0xFF54, 16}, {0xFF56, 16}, {0xFF5C, 16}, {0xFF5E, 16}, {0xFF74, 16}, {0xFF76, 16}, {0xFF7C, 16}, {0xFF7E, 16}, {0xFFD4, 16}, {0xFFD6, 16}, {0xFFDC, 16}, {0xFFDE, 16},\n    {0xFFF4, 16}, {0xFFF6, 16}, {0xFFFC, 16}, {0xFFFE, 16}};\n#endif\n// clang-format on\n\nstatic int blz_log2(unsigned long n) {\n  assert(n > 0);\n\n#if defined(BLZ_BUILTIN_MSVC)\n  unsigned long msb_pos;\n  _BitScanReverse(&msb_pos, n);\n  return (int)msb_pos;\n#elif defined(BLZ_BUILTIN_GCC)\n  return (int)sizeof(n) * CHAR_BIT - 1 - __builtin_clzl(n);\n#else\n  int bits = 0;\n\n  while (n >>= 1) {\n    ++bits;\n  }\n\n  return bits;\n#endif\n}\n\nstatic unsigned long blz_gamma_cost(unsigned long n) {\n  assert(n >= 2);\n\n  return 2 * (unsigned long)blz_log2(n);\n}\n\nstatic unsigned long blz_match_cost(unsigned long pos, unsigned long len) { return 1 + blz_gamma_cost(len - 2) + blz_gamma_cost((pos >> 8) + 2) + 8; }\n\n// Heuristic to compare matches\nstatic int blz_match_better(unsigned long cur, unsigned long new_pos, unsigned long new_len, unsigned long pos, unsigned long len) {\n  const unsigned long offs     = cur - pos - 1;\n  const unsigned long new_offs = cur - new_pos - 1;\n\n  return (new_len > len + 1) || (new_len >= len + 1 && new_offs / 8 <= offs);\n}\n\n// Heuristic to compare match with match at next position\nstatic int blz_next_match_better(unsigned long cur, unsigned long new_pos, unsigned long new_len, unsigned long pos, unsigned long len) {\n  const unsigned long offs     = cur - pos - 1;\n  const unsigned long new_offs = cur + 1 - new_pos - 1;\n\n  return (new_len > len + 1 && new_offs / 8 < offs) || (new_len > len && new_offs < offs) || (new_len >= len && new_offs < offs / 4);\n}\n\nstatic void blz_putbit(struct blz_state *bs, unsigned int bit) {\n  // Check if tag is full\n  if (!bs->bits_left--) {\n    // Store tag\n    bs->tag_out[0] = bs->tag & 0x00FF;\n    bs->tag_out[1] = (bs->tag >> 8) & 0x00FF;\n\n    // Init next tag\n    bs->tag_out = bs->next_out;\n    bs->next_out += 2;\n    bs->bits_left = 15;\n  }\n\n  // Shift bit into tag\n  bs->tag = (bs->tag << 1) + bit;\n}\n\nstatic void blz_putbits(struct blz_state *bs, unsigned long bits, int num) {\n  assert(num >= 0 && num <= 16);\n  assert((bits & (~0UL << num)) == 0);\n\n  // Shift num bits into tag\n  unsigned long tag = ((unsigned long)bs->tag << num) | bits;\n  bs->tag           = (unsigned int)tag;\n\n  // Check if tag is full\n  if (bs->bits_left < num) {\n    const unsigned int top16 = (unsigned int)(tag >> (num - bs->bits_left));\n\n    // Store tag\n    bs->tag_out[0] = top16 & 0x00FF;\n    bs->tag_out[1] = (top16 >> 8) & 0x00FF;\n\n    // Init next tag\n    bs->tag_out = bs->next_out;\n    bs->next_out += 2;\n\n    bs->bits_left += 16;\n  }\n\n  bs->bits_left -= num;\n}\n\n// Encode val using a universal code based on Elias gamma.\n//\n// This outputs each bit of val (after the leading one bit) as a pair where\n// the first bit is the value, and the second is zero if this was the last\n// pair, and one otherwise.\n//\n//     2 =  10 ->    00\n//     3 =  11 ->    10\n//     4 = 100 -> 01 00\n//     5 = 101 -> 01 10\n//     6 = 110 -> 11 00\n//     ...\n//\n// On modern hardware this variant is slower to decode because we cannot count\n// the leading zeroes to get the number of value bits and then read them\n// directly. However on constrained hardware, it has the advantage of being\n// decodable using only one variable (register) and a tiny loop:\n//\n//     result = 1;\n//     do { result = (result << 1) + getbit(); } while (getbit());\n//\n// Strictly speaking, this is order-1 exp-Golomb, where we interleave the\n// value bits with the bits of the unary coding of the length, but I've always\n// known it as the gamma2 code. I am not sure where it originated from, but I\n// can see I used it in aPLib around 1998.\n//\nstatic void blz_putgamma(struct blz_state *bs, unsigned long val) {\n  assert(val >= 2);\n\n#if !defined(BLZ_NO_LUT)\n  // Output small values using lookup\n  if (val < 512) {\n    const unsigned int bits  = blz_gamma_lookup[val][0];\n    const unsigned int shift = blz_gamma_lookup[val][1];\n\n    blz_putbits(bs, bits, (int)shift);\n\n    return;\n  }\n#endif\n\n  // Create a mask for the second-highest bit of val\n#if defined(BLZ_BUILTIN_MSVC)\n  unsigned long msb_pos;\n  _BitScanReverse(&msb_pos, val);\n  unsigned long mask = 1UL << (msb_pos - 1);\n#elif defined(BLZ_BUILTIN_GCC)\n  unsigned long mask = 1UL << ((int)sizeof(val) * CHAR_BIT - 2 - __builtin_clzl(val));\n#else\n  unsigned long mask = val >> 1;\n\n  // Clear bits except highest\n  while (mask & (mask - 1)) {\n    mask &= mask - 1;\n  }\n#endif\n\n  // Output gamma2-encoded bits\n  blz_putbit(bs, (val & mask) ? 1 : 0);\n\n  while (mask >>= 1) {\n    blz_putbit(bs, 1);\n    blz_putbit(bs, (val & mask) ? 1 : 0);\n  }\n\n  blz_putbit(bs, 0);\n}\n\nstatic unsigned char *blz_finalize(struct blz_state *bs) {\n  // Trailing one bit to delimit any literal tags\n  blz_putbit(bs, 1);\n\n  // Shift last tag into position and store\n  bs->tag <<= bs->bits_left;\n  bs->tag_out[0] = bs->tag & 0x00FF;\n  bs->tag_out[1] = (bs->tag >> 8) & 0x00FF;\n\n  // Return pointer one past end of output\n  return bs->next_out;\n}\n\n// Hash four bytes starting a p.\n//\n// This is Fibonacci hashing, also known as Knuth's multiplicative hash. The\n// constant is a prime close to 2^32/phi.\n//\nstatic unsigned long blz_hash4_bits(const unsigned char *p, int bits) {\n  assert(bits > 0 && bits <= 32);\n\n  uint32_t val = (uint32_t)p[0] | ((uint32_t)p[1] << 8) | ((uint32_t)p[2] << 16) | ((uint32_t)p[3] << 24);\n\n  return (val * UINT32_C(2654435761)) >> (32 - bits);\n}\n\nstatic unsigned long blz_hash4(const unsigned char *p) { return blz_hash4_bits(p, BLZ_HASH_BITS); }\n\nsize_t blz_max_packed_size(size_t src_size) { return src_size + src_size / 8 + 64; }\n\nsize_t blz_workmem_size(size_t src_size) {\n  (void)src_size;\n\n  return LOOKUP_SIZE * sizeof(blz_word);\n}\n\n// Simple LZSS using hashing.\n//\n// The lookup table stores the previous position in the input that had a given\n// hash value, or NO_MATCH_POS if none.\n//\nunsigned long blz_pack(const void *src, void *dst, unsigned long src_size, void *workmem) {\n  struct blz_state           bs;\n  blz_word *const            lookup         = (blz_word *)workmem;\n  const unsigned char *const in             = (const unsigned char *)src;\n  const unsigned long        last_match_pos = src_size > 4 ? src_size - 4 : 0;\n  unsigned long              hash_pos       = 0;\n  unsigned long              cur            = 0;\n\n  assert(src_size < BLZ_WORD_MAX);\n\n  // Check for empty input\n  if (src_size == 0) {\n    return 0;\n  }\n\n  bs.next_out = (unsigned char *)dst;\n\n  // First byte verbatim\n  *bs.next_out++ = in[0];\n\n  // Check for 1 byte input\n  if (src_size == 1) {\n    return 1;\n  }\n\n  // Initialize first tag\n  bs.tag_out = bs.next_out;\n  bs.next_out += 2;\n  bs.tag       = 0;\n  bs.bits_left = 16;\n\n  // Initialize lookup\n  for (unsigned long i = 0; i < LOOKUP_SIZE; ++i) {\n    lookup[i] = NO_MATCH_POS;\n  }\n\n  // Main compression loop\n  for (cur = 1; cur <= last_match_pos;) {\n    // Update lookup up to current position\n    while (hash_pos < cur) {\n      lookup[blz_hash4(&in[hash_pos])] = hash_pos;\n      hash_pos++;\n    }\n\n    // Look up match for current position\n    const unsigned long pos = lookup[blz_hash4(&in[cur])];\n    unsigned long       len = 0;\n\n    // Check match\n    if (pos != NO_MATCH_POS) {\n      const unsigned long len_limit = src_size - cur;\n\n      while (len < len_limit && in[pos + len] == in[cur + len]) {\n        ++len;\n      }\n    }\n\n    // Output match or literal\n    //\n    // When offs >= 0x1FFE00, encoding a match of length 4\n    // (37 bits) is longer than encoding 4 literals (36 bits).\n    //\n    // The value 0x7E00 is a heuristic that sacrifices some\n    // length 4 matches in the hope that there will be a better\n    // match at the next position.\n    if (len > 4 || (len == 4 && cur - pos - 1 < 0x7E00UL)) {\n      const unsigned long offs = cur - pos - 1;\n\n      // Output match tag\n      blz_putbit(&bs, 1);\n\n      // Output match length\n      blz_putgamma(&bs, len - 2);\n\n      // Output match offset\n      blz_putgamma(&bs, (offs >> 8) + 2);\n      *bs.next_out++ = offs & 0x00FF;\n\n      cur += len;\n    } else {\n      // Output literal tag\n      blz_putbit(&bs, 0);\n\n      // Copy literal\n      *bs.next_out++ = in[cur++];\n    }\n  }\n\n  // Output any remaining literals\n  while (cur < src_size) {\n    // Output literal tag\n    blz_putbit(&bs, 0);\n\n    // Copy literal\n    *bs.next_out++ = in[cur++];\n  }\n\n  // Trailing one bit to delimit any literal tags\n  blz_putbit(&bs, 1);\n\n  // Shift last tag into position and store\n  bs.tag <<= bs.bits_left;\n  bs.tag_out[0] = bs.tag & 0x00FF;\n  bs.tag_out[1] = (bs.tag >> 8) & 0x00FF;\n\n  // Return compressed size\n  return (unsigned long)(bs.next_out - (unsigned char *)dst);\n}\n\n// Include compression algorithms used by blz_pack_level\n#include \"brieflz_btparse.h\"\n#include \"brieflz_hashbucket.h\"\n#include \"brieflz_lazy.h\"\n#include \"brieflz_leparse.h\"\n\nsize_t blz_workmem_size_level(size_t src_size, int level) {\n  switch (level) {\n  case 1:\n    return blz_workmem_size(src_size);\n  case 2:\n    return blz_lazy_workmem_size(src_size);\n  case 3:\n    return blz_hashbucket_workmem_size(src_size, 2);\n  case 4:\n    return blz_hashbucket_workmem_size(src_size, 4);\n  case 5:\n  case 6:\n  case 7:\n    return blz_leparse_workmem_size(src_size);\n  case 8:\n  case 9:\n  case 10:\n    return blz_btparse_workmem_size(src_size);\n  default:\n    return (size_t)-1;\n  }\n}\n\nunsigned long blz_pack_level(const void *src, void *dst, unsigned long src_size, void *workmem, int level) {\n  switch (level) {\n  case 1:\n    return blz_pack(src, dst, src_size, workmem);\n  case 2:\n    return blz_pack_lazy(src, dst, src_size, workmem);\n  case 3:\n    return blz_pack_hashbucket(src, dst, src_size, workmem, 2, 16);\n  case 4:\n    return blz_pack_hashbucket(src, dst, src_size, workmem, 4, 16);\n  case 5:\n    return blz_pack_leparse(src, dst, src_size, workmem, 1, 16);\n  case 6:\n    return blz_pack_leparse(src, dst, src_size, workmem, 8, 32);\n  case 7:\n    return blz_pack_leparse(src, dst, src_size, workmem, 64, 64);\n  case 8:\n    return blz_pack_btparse(src, dst, src_size, workmem, 16, 96);\n  case 9:\n    return blz_pack_btparse(src, dst, src_size, workmem, 32, 224);\n  case 10:\n    return blz_pack_btparse(src, dst, src_size, workmem, ULONG_MAX, ULONG_MAX);\n  default:\n    return BLZ_ERROR;\n  }\n}\n\n// clang -g -O1 -fsanitize=fuzzer,address -DBLZ_FUZZING brieflz.c depack.c\n#if defined(BLZ_FUZZING)\n#include <limits.h>\n#include <stddef.h>\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n\n#ifndef BLZ_FUZZ_LEVEL\n#define BLZ_FUZZ_LEVEL 1\n#endif\n\nextern int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {\n  if (size > ULONG_MAX / 2) {\n    return 0;\n  }\n  void *workmem  = malloc(blz_workmem_size_level(size, BLZ_FUZZ_LEVEL));\n  void *packed   = malloc(blz_max_packed_size(size));\n  void *depacked = malloc(size);\n  if (!workmem || !packed || !depacked) {\n    abort();\n  }\n  unsigned long packed_size = blz_pack_level(data, packed, size, workmem, BLZ_FUZZ_LEVEL);\n  blz_depack(packed, depacked, size);\n  if (memcmp(data, depacked, size)) {\n    abort();\n  }\n  free(depacked);\n  free(packed);\n  free(workmem);\n  return 0;\n}\n#endif\n"
  },
  {
    "path": "source/Core/brieflz/brieflz.h",
    "content": "/*\n * BriefLZ - small fast Lempel-Ziv\n *\n * C/C++ header file\n *\n * Copyright (c) 2002-2020 Joergen Ibsen\n *\n * This software is provided 'as-is', without any express or implied\n * warranty. In no event will the authors be held liable for any damages\n * arising from the use of this software.\n *\n * Permission is granted to anyone to use this software for any purpose,\n * including commercial applications, and to alter it and redistribute it\n * freely, subject to the following restrictions:\n *\n *   1. The origin of this software must not be misrepresented; you must\n *      not claim that you wrote the original software. If you use this\n *      software in a product, an acknowledgment in the product\n *      documentation would be appreciated but is not required.\n *\n *   2. Altered source versions must be plainly marked as such, and must\n *      not be misrepresented as being the original software.\n *\n *   3. This notice may not be removed or altered from any source\n *      distribution.\n */\n\n#ifndef BRIEFLZ_H_INCLUDED\n#define BRIEFLZ_H_INCLUDED\n\n#include <stddef.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define BLZ_VER_MAJOR 1        /**< Major version number */\n#define BLZ_VER_MINOR 3        /**< Minor version number */\n#define BLZ_VER_PATCH 0        /**< Patch version number */\n#define BLZ_VER_STRING \"1.3.0\" /**< Version number as a string */\n\n#define BLZ_NO_LUT\n\n#ifdef BLZ_DLL\n#  if defined(_WIN32) || defined(__CYGWIN__)\n#    ifdef BLZ_DLL_EXPORTS\n#      define BLZ_API __declspec(dllexport)\n#    else\n#      define BLZ_API __declspec(dllimport)\n#    endif\n#    define BLZ_LOCAL\n#  else\n#    if __GNUC__ >= 4\n#      define BLZ_API __attribute__ ((visibility (\"default\")))\n#      define BLZ_LOCAL __attribute__ ((visibility (\"hidden\")))\n#    else\n#      define BLZ_API\n#      define BLZ_LOCAL\n#    endif\n#  endif\n#else\n#  define BLZ_API\n#  define BLZ_LOCAL\n#endif\n\n/**\n * Return value on error.\n *\n * @see blz_depack_safe\n */\n#ifndef BLZ_ERROR\n#  define BLZ_ERROR ((unsigned long) (-1))\n#endif\n\n/**\n * Get bound on compressed data size.\n *\n * @see blz_pack\n *\n * @param src_size number of bytes to compress\n * @return maximum size of compressed data\n */\nBLZ_API size_t\nblz_max_packed_size(size_t src_size);\n\n/**\n * Get required size of `workmem` buffer.\n *\n * @see blz_pack\n *\n * @param src_size number of bytes to compress\n * @return required size in bytes of `workmem` buffer\n */\nBLZ_API size_t\nblz_workmem_size(size_t src_size);\n\n/**\n * Compress `src_size` bytes of data from `src` to `dst`.\n *\n * @param src pointer to data\n * @param dst pointer to where to place compressed data\n * @param src_size number of bytes to compress\n * @param workmem pointer to memory for temporary use\n * @return size of compressed data\n */\nBLZ_API unsigned long\nblz_pack(const void *src, void *dst, unsigned long src_size, void *workmem);\n\n/**\n * Get required size of `workmem` buffer.\n *\n * @see blz_pack_level\n *\n * @param src_size number of bytes to compress\n * @param level compression level\n * @return required size in bytes of `workmem` buffer\n */\nBLZ_API size_t\nblz_workmem_size_level(size_t src_size, int level);\n\n/**\n * Compress `src_size` bytes of data from `src` to `dst`.\n *\n * Compression levels between 1 and 9 offer a trade-off between\n * time/space and ratio. Level 10 is optimal but very slow.\n *\n * @param src pointer to data\n * @param dst pointer to where to place compressed data\n * @param src_size number of bytes to compress\n * @param workmem pointer to memory for temporary use\n * @param level compression level\n * @return size of compressed data\n */\nBLZ_API unsigned long\nblz_pack_level(const void *src, void *dst, unsigned long src_size,\n               void *workmem, int level);\n\n/**\n * Decompress `depacked_size` bytes of data from `src` to `dst`.\n *\n * @param src pointer to compressed data\n * @param dst pointer to where to place decompressed data\n * @param depacked_size size of decompressed data\n * @return size of decompressed data\n */\nBLZ_API unsigned long\nblz_depack(const void *src, void *dst, unsigned long depacked_size);\n\n/**\n * Decompress `src_size` bytes of data from `src` to `dst`.\n *\n * This function is unsafe. If the provided data is malformed, it may\n * read more than `src_size` from the `src` buffer.\n *\n * @param src pointer to compressed data\n * @param dst pointer to where to place decompressed data\n * @param src_size size of the compressed data\n * @return size of decompressed data\n */\nBLZ_API unsigned long\nblz_depack_srcsize(const void *src, void *dst, unsigned long src_size);\n\n/**\n * Decompress `depacked_size` bytes of data from `src` to `dst`.\n *\n * Reads at most `src_size` bytes from `src`.\n * Writes at most `depacked_size` bytes to `dst`.\n *\n * @param src pointer to compressed data\n * @param src_size size of compressed data\n * @param dst pointer to where to place decompressed data\n * @param depacked_size size of decompressed data\n * @return size of decompressed data, `BLZ_ERROR` on error\n */\nBLZ_API unsigned long\nblz_depack_safe(const void *src, unsigned long src_size,\n                void *dst, unsigned long depacked_size);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif\n\n#endif /* BRIEFLZ_H_INCLUDED */\n"
  },
  {
    "path": "source/Core/brieflz/brieflz_btparse.h",
    "content": "//\n// BriefLZ - small fast Lempel-Ziv\n//\n// Forwards dynamic programming parse using binary trees\n//\n// Copyright (c) 2016-2020 Joergen Ibsen\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n//   1. The origin of this software must not be misrepresented; you must\n//      not claim that you wrote the original software. If you use this\n//      software in a product, an acknowledgment in the product\n//      documentation would be appreciated but is not required.\n//\n//   2. Altered source versions must be plainly marked as such, and must\n//      not be misrepresented as being the original software.\n//\n//   3. This notice may not be removed or altered from any source\n//      distribution.\n//\n\n#ifndef BRIEFLZ_BTPARSE_H_INCLUDED\n#define BRIEFLZ_BTPARSE_H_INCLUDED\n\nstatic size_t\nblz_btparse_workmem_size(size_t src_size)\n{\n\treturn (5 * src_size + 3 + LOOKUP_SIZE) * sizeof(blz_word);\n}\n\n// Forwards dynamic programming parse using binary trees, checking all\n// possible matches.\n//\n// The match search uses a binary tree for each hash entry, which is updated\n// dynamically as it is searched by re-rooting the tree at the search string.\n//\n// This does not result in balanced trees on all inputs, but often works well\n// in practice, and has the advantage that we get the matches in order from\n// closest and back.\n//\n// A drawback is the memory requirement of 5 * src_size words, since we cannot\n// overlap the arrays in a forwards parse.\n//\n// This match search method is found in LZMA by Igor Pavlov, libdeflate\n// by Eric Biggers, and other libraries.\n//\nstatic unsigned long\nblz_pack_btparse(const void *src, void *dst, unsigned long src_size, void *workmem,\n                 const unsigned long max_depth, const unsigned long accept_len)\n{\n\tstruct blz_state bs;\n\tconst unsigned char *const in = (const unsigned char *) src;\n\tconst unsigned long last_match_pos = src_size > 4 ? src_size - 4 : 0;\n\n\tassert(src_size < BLZ_WORD_MAX);\n\n\t// Check for empty input\n\tif (src_size == 0) {\n\t\treturn 0;\n\t}\n\n\tbs.next_out = (unsigned char *) dst;\n\n\t// First byte verbatim\n\t*bs.next_out++ = in[0];\n\n\t// Check for 1 byte input\n\tif (src_size == 1) {\n\t\treturn 1;\n\t}\n\n\t// Initialize first tag\n\tbs.tag_out = bs.next_out;\n\tbs.next_out += 2;\n\tbs.tag = 0;\n\tbs.bits_left = 16;\n\n\tif (src_size < 4) {\n\t\tfor (unsigned long i = 1; i < src_size; ++i) {\n\t\t\t// Output literal tag\n\t\t\tblz_putbit(&bs, 0);\n\n\t\t\t// Copy literal\n\t\t\t*bs.next_out++ = in[i];\n\t\t}\n\n\t\t// Return compressed size\n\t\treturn (unsigned long) (blz_finalize(&bs) - (unsigned char *) dst);\n\t}\n\n\tblz_word *const cost = (blz_word *) workmem;\n\tblz_word *const mpos = cost + src_size + 1;\n\tblz_word *const mlen = mpos + src_size + 1;\n\tblz_word *const nodes = mlen + src_size + 1;\n\tblz_word *const lookup = nodes + 2 * src_size;\n\n\t// Initialize lookup\n\tfor (unsigned long i = 0; i < LOOKUP_SIZE; ++i) {\n\t\tlookup[i] = NO_MATCH_POS;\n\t}\n\n\t// Since we are not processing the first literal, update tree for\n\t// position 0\n\tlookup[blz_hash4(&in[0])] = 0;\n\tnodes[0] = NO_MATCH_POS;\n\tnodes[1] = NO_MATCH_POS;\n\n\t// Initialize to all literals with infinite cost\n\tfor (unsigned long i = 0; i <= src_size; ++i) {\n\t\tcost[i] = BLZ_WORD_MAX;\n\t\tmlen[i] = 1;\n\t}\n\n\tcost[0] = 0;\n\tcost[1] = 8;\n\n\t// Next position where we are going to check matches\n\t//\n\t// This is used to skip matching while still updating the trees when\n\t// we find a match that is accept_len or longer.\n\t//\n\tunsigned long next_match_cur = 1;\n\n\t// Phase 1: Find lowest cost path arriving at each position\n\tfor (unsigned long cur = 1; cur <= last_match_pos; ++cur) {\n\t\t// Adjust remaining costs to avoid overflow\n\t\tif (cost[cur] > BLZ_WORD_MAX - 128) {\n\t\t\tblz_word min_cost = BLZ_WORD_MAX;\n\n\t\t\tfor (unsigned long i = cur; i <= src_size; ++i) {\n\t\t\t\tmin_cost = cost[i] < min_cost ? cost[i] : min_cost;\n\t\t\t}\n\n\t\t\tfor (unsigned long i = cur; i <= src_size; ++i) {\n\t\t\t\tif (cost[i] != BLZ_WORD_MAX) {\n\t\t\t\t\tcost[i] -= min_cost;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check literal\n\t\tif (cost[cur + 1] > cost[cur] + 9) {\n\t\t\tcost[cur + 1] = cost[cur] + 9;\n\t\t\tmlen[cur + 1] = 1;\n\t\t}\n\n\t\tif (cur > next_match_cur) {\n\t\t\tnext_match_cur = cur;\n\t\t}\n\n\t\tunsigned long max_len = 3;\n\n\t\t// Look up first match for current position\n\t\t//\n\t\t// pos is the current root of the tree of strings with this\n\t\t// hash. We are going to re-root the tree so cur becomes the\n\t\t// new root.\n\t\t//\n\t\tconst unsigned long hash = blz_hash4(&in[cur]);\n\t\tunsigned long pos = lookup[hash];\n\t\tlookup[hash] = cur;\n\n\t\tblz_word *lt_node = &nodes[2 * cur];\n\t\tblz_word *gt_node = &nodes[2 * cur + 1];\n\t\tunsigned long lt_len = 0;\n\t\tunsigned long gt_len = 0;\n\n\t\tassert(pos == NO_MATCH_POS || pos < cur);\n\n\t\t// If we are checking matches, allow lengths up to end of\n\t\t// input, otherwise compare only up to accept_len\n\t\tconst unsigned long len_limit = cur == next_match_cur ? src_size - cur\n\t\t                              : accept_len < src_size - cur ? accept_len\n\t\t                              : src_size - cur;\n\t\tunsigned long num_chain = max_depth;\n\n\t\t// Check matches\n\t\tfor (;;) {\n\t\t\t// If at bottom of tree, mark leaf nodes\n\t\t\t//\n\t\t\t// In case we reached max_depth, this also prunes the\n\t\t\t// subtree we have not searched yet and do not know\n\t\t\t// where belongs.\n\t\t\t//\n\t\t\tif (pos == NO_MATCH_POS || num_chain-- == 0) {\n\t\t\t\t*lt_node = NO_MATCH_POS;\n\t\t\t\t*gt_node = NO_MATCH_POS;\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// The string at pos is lexicographically greater than\n\t\t\t// a string that matched in the first lt_len positions,\n\t\t\t// and less than a string that matched in the first\n\t\t\t// gt_len positions, so it must match up to at least\n\t\t\t// the minimum of these.\n\t\t\tunsigned long len = lt_len < gt_len ? lt_len : gt_len;\n\n\t\t\t// Find match len\n\t\t\twhile (len < len_limit && in[pos + len] == in[cur + len]) {\n\t\t\t\t++len;\n\t\t\t}\n\n\t\t\t// Extend current match if possible\n\t\t\t//\n\t\t\t// Note that we are checking matches in order from the\n\t\t\t// closest and back. This means for a match further\n\t\t\t// away, the encoding of all lengths up to the current\n\t\t\t// max length will always be longer or equal, so we need\n\t\t\t// only consider the extension.\n\t\t\t//\n\t\t\tif (cur == next_match_cur && len > max_len) {\n\t\t\t\tfor (unsigned long i = max_len + 1; i <= len; ++i) {\n\t\t\t\t\tunsigned long match_cost = blz_match_cost(cur - pos - 1, i);\n\n\t\t\t\t\tassert(match_cost < BLZ_WORD_MAX - cost[cur]);\n\n\t\t\t\t\tunsigned long cost_there = cost[cur] + match_cost;\n\n\t\t\t\t\tif (cost_there < cost[cur + i]) {\n\t\t\t\t\t\tcost[cur + i] = cost_there;\n\t\t\t\t\t\tmpos[cur + i] = cur - pos - 1;\n\t\t\t\t\t\tmlen[cur + i] = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tmax_len = len;\n\n\t\t\t\tif (len >= accept_len) {\n\t\t\t\t\tnext_match_cur = cur + len;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we reach maximum match length, the string at pos\n\t\t\t// is equal to cur, so we can assign the left and right\n\t\t\t// subtrees.\n\t\t\t//\n\t\t\t// This removes pos from the tree, but we added cur\n\t\t\t// which is equal and closer for future matches.\n\t\t\t//\n\t\t\tif (len >= accept_len || len == len_limit) {\n\t\t\t\t*lt_node = nodes[2 * pos];\n\t\t\t\t*gt_node = nodes[2 * pos + 1];\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Go to previous match and restructure tree\n\t\t\t//\n\t\t\t// lt_node points to a node that is going to contain\n\t\t\t// elements lexicographically less than cur (the search\n\t\t\t// string).\n\t\t\t//\n\t\t\t// If the string at pos is less than cur, we set that\n\t\t\t// lt_node to pos. We know that all elements in the\n\t\t\t// left subtree are less than pos, and thus less than\n\t\t\t// cur, so we point lt_node at the right subtree of\n\t\t\t// pos and continue our search there.\n\t\t\t//\n\t\t\t// The equivalent applies to gt_node when the string at\n\t\t\t// pos is greater than cur.\n\t\t\t//\n\t\t\tif (in[pos + len] < in[cur + len]) {\n\t\t\t\t*lt_node = pos;\n\t\t\t\tlt_node = &nodes[2 * pos + 1];\n\t\t\t\tassert(*lt_node == NO_MATCH_POS || *lt_node < pos);\n\t\t\t\tpos = *lt_node;\n\t\t\t\tlt_len = len;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t*gt_node = pos;\n\t\t\t\tgt_node = &nodes[2 * pos];\n\t\t\t\tassert(*gt_node == NO_MATCH_POS || *gt_node < pos);\n\t\t\t\tpos = *gt_node;\n\t\t\t\tgt_len = len;\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (unsigned long cur = last_match_pos + 1; cur < src_size; ++cur) {\n\t\t// Check literal\n\t\tif (cost[cur + 1] > cost[cur] + 9) {\n\t\t\tcost[cur + 1] = cost[cur] + 9;\n\t\t\tmlen[cur + 1] = 1;\n\t\t}\n\t}\n\n\t// Phase 2: Follow lowest cost path backwards gathering tokens\n\tunsigned long next_token = src_size;\n\n\tfor (unsigned long cur = src_size; cur > 1; cur -= mlen[cur], --next_token) {\n\t\tmlen[next_token] = mlen[cur];\n\t\tmpos[next_token] = mpos[cur];\n\t}\n\n\t// Phase 3: Output tokens\n\tunsigned long cur = 1;\n\n\tfor (unsigned long i = next_token + 1; i <= src_size; cur += mlen[i++]) {\n\t\tif (mlen[i] == 1) {\n\t\t\t// Output literal tag\n\t\t\tblz_putbit(&bs, 0);\n\n\t\t\t// Copy literal\n\t\t\t*bs.next_out++ = in[cur];\n\t\t}\n\t\telse {\n\t\t\tconst unsigned long offs = mpos[i];\n\n\t\t\t// Output match tag\n\t\t\tblz_putbit(&bs, 1);\n\n\t\t\t// Output match length\n\t\t\tblz_putgamma(&bs, mlen[i] - 2);\n\n\t\t\t// Output match offset\n\t\t\tblz_putgamma(&bs, (offs >> 8) + 2);\n\t\t\t*bs.next_out++ = offs & 0x00FF;\n\t\t}\n\t}\n\n\t// Return compressed size\n\treturn (unsigned long) (blz_finalize(&bs) - (unsigned char *) dst);\n}\n\n#endif /* BRIEFLZ_BTPARSE_H_INCLUDED */\n"
  },
  {
    "path": "source/Core/brieflz/brieflz_hashbucket.h",
    "content": "//\n// BriefLZ - small fast Lempel-Ziv\n//\n// Lazy parsing with multiple previous positions per hash\n//\n// Copyright (c) 2016-2020 Joergen Ibsen\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n//   1. The origin of this software must not be misrepresented; you must\n//      not claim that you wrote the original software. If you use this\n//      software in a product, an acknowledgment in the product\n//      documentation would be appreciated but is not required.\n//\n//   2. Altered source versions must be plainly marked as such, and must\n//      not be misrepresented as being the original software.\n//\n//   3. This notice may not be removed or altered from any source\n//      distribution.\n//\n\n#ifndef BRIEFLZ_HASHBUCKET_H_INCLUDED\n#define BRIEFLZ_HASHBUCKET_H_INCLUDED\n\nstatic size_t\nblz_hashbucket_workmem_size(size_t src_size, unsigned int bucket_size)\n{\n\t(void) src_size;\n\n\tassert(bucket_size > 0);\n\tassert(sizeof(bucket_size) < sizeof(size_t)\n\t    || bucket_size < SIZE_MAX / (LOOKUP_SIZE * sizeof(blz_word)));\n\n\treturn (LOOKUP_SIZE * bucket_size) * sizeof(blz_word);\n}\n\n// Lazy parsing with multiple previous positions per hash.\n//\n// Instead of storing only the previous position a given hash occured at,\n// this stores the last bucket_size such positions in lookup. This means we\n// can check each of these and choose the \"best\".\n//\n// There are multiple options for maintaining the entries of the buckets, we\n// simply insert at the front to maintain the order of matches and avoid extra\n// variables. This gives some overhead for moving elements, but as long as\n// bucket_size is small and everything fits in a cache line it is pretty fast.\n//\n// If we find a match that is accept_len or longer, we stop searching.\n//\nstatic unsigned long\nblz_pack_hashbucket(const void *src, void *dst, unsigned long src_size, void *workmem,\n                    const unsigned int bucket_size, const unsigned long accept_len)\n{\n\tstruct blz_state bs;\n\tblz_word *const lookup = (blz_word *) workmem;\n\tconst unsigned char *const in = (const unsigned char *) src;\n\tconst unsigned long last_match_pos = src_size > 4 ? src_size - 4 : 0;\n\tunsigned long hash_pos = 0;\n\tunsigned long cur = 0;\n\n\tassert(src_size < BLZ_WORD_MAX);\n\n\t// Check for empty input\n\tif (src_size == 0) {\n\t\treturn 0;\n\t}\n\n\tbs.next_out = (unsigned char *) dst;\n\n\t// First byte verbatim\n\t*bs.next_out++ = in[0];\n\n\t// Check for 1 byte input\n\tif (src_size == 1) {\n\t\treturn 1;\n\t}\n\n\t// Initialize first tag\n\tbs.tag_out = bs.next_out;\n\tbs.next_out += 2;\n\tbs.tag = 0;\n\tbs.bits_left = 16;\n\n\tassert(bucket_size > 0);\n\tassert(sizeof(bucket_size) < sizeof(unsigned long)\n\t    || bucket_size < ULONG_MAX / LOOKUP_SIZE);\n\n\t// Initialize lookup\n\tfor (unsigned long i = 0; i < LOOKUP_SIZE * bucket_size; ++i) {\n\t\tlookup[i] = NO_MATCH_POS;\n\t}\n\n\t// Main compression loop\n\tfor (cur = 1; cur <= last_match_pos; ) {\n\t\t// Update lookup up to current position\n\t\twhile (hash_pos < cur) {\n\t\t\tblz_word *const bucket = &lookup[blz_hash4(&in[hash_pos]) * bucket_size];\n\t\t\tunsigned long next = hash_pos;\n\n\t\t\t// Insert hash_pos at start of bucket\n\t\t\tfor (unsigned int i = 0; i < bucket_size; ++i) {\n\t\t\t\tunsigned long tmp = bucket[i];\n\t\t\t\tbucket[i] = next;\n\t\t\t\tnext = tmp;\n\t\t\t}\n\n\t\t\thash_pos++;\n\t\t}\n\n\t\tunsigned long best_pos = NO_MATCH_POS;\n\t\tunsigned long best_len = 0;\n\n\t\t// Look up first match for current position\n\t\tconst blz_word *const bucket = &lookup[blz_hash4(&in[cur]) * bucket_size];\n\t\tunsigned long pos = bucket[0];\n\t\tunsigned int bucket_idx = 0;\n\n\t\tconst unsigned long len_limit = src_size - cur;\n\n\t\t// Check matches\n\t\twhile (pos != NO_MATCH_POS) {\n\t\t\tunsigned long len = 0;\n\n\t\t\t// Check match\n\t\t\tif (best_len < len_limit\n\t\t\t && in[pos + best_len] == in[cur + best_len]) {\n\t\t\t\twhile (len < len_limit && in[pos + len] == in[cur + len]) {\n\t\t\t\t\t++len;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Update best match\n\t\t\tif (blz_match_better(cur, pos, len, best_pos, best_len)) {\n\t\t\t\tbest_pos = pos;\n\t\t\t\tbest_len = len;\n\t\t\t\tif (best_len >= accept_len) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Go to previous match\n\t\t\tif (++bucket_idx == bucket_size) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tpos = bucket[bucket_idx];\n\t\t}\n\n\t\t// Check if match at next position is better\n\t\tif (best_len > 3 && best_len < accept_len && cur < last_match_pos) {\n\t\t\t// Update lookup up to next position\n\t\t\t{\n\t\t\t\tblz_word *const next_bucket = &lookup[blz_hash4(&in[hash_pos]) * bucket_size];\n\t\t\t\tunsigned long next = hash_pos;\n\n\t\t\t\t// Insert hash_pos at start of bucket\n\t\t\t\tfor (unsigned int i = 0; i < bucket_size; ++i) {\n\t\t\t\t\tunsigned long tmp = next_bucket[i];\n\t\t\t\t\tnext_bucket[i] = next;\n\t\t\t\t\tnext = tmp;\n\t\t\t\t}\n\n\t\t\t\thash_pos++;\n\t\t\t}\n\n\t\t\t// Look up first match for next position\n\t\t\tconst blz_word *const next_bucket = &lookup[blz_hash4(&in[cur + 1]) * bucket_size];\n\t\t\tunsigned long next_pos = next_bucket[0];\n\t\t\tunsigned int next_bucket_idx = 0;\n\n\t\t\tconst unsigned long next_len_limit = src_size - (cur + 1);\n\n\t\t\t// Check matches\n\t\t\twhile (next_pos != NO_MATCH_POS) {\n\t\t\t\tunsigned long next_len = 0;\n\n\t\t\t\t// Check match\n\t\t\t\tif (best_len - 1 < next_len_limit\n\t\t\t\t && in[next_pos + best_len - 1] == in[cur + 1 + best_len - 1]) {\n\t\t\t\t\twhile (next_len < next_len_limit\n\t\t\t\t\t    && in[next_pos + next_len] == in[cur + 1 + next_len]) {\n\t\t\t\t\t\t++next_len;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (next_len >= best_len) {\n\t\t\t\t\t// Replace with next match if it extends backwards\n\t\t\t\t\tif (next_pos > 0 && in[next_pos - 1] == in[cur]) {\n\t\t\t\t\t\tif (blz_match_better(cur, next_pos - 1, next_len + 1, best_pos, best_len)) {\n\t\t\t\t\t\t\tbest_pos = next_pos - 1;\n\t\t\t\t\t\t\tbest_len = next_len + 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Drop current match if next match is better\n\t\t\t\t\t\tif (blz_next_match_better(cur, next_pos, next_len, best_pos, best_len)) {\n\t\t\t\t\t\t\tbest_len = 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go to previous match\n\t\t\t\tif (++next_bucket_idx == bucket_size) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tnext_pos = next_bucket[next_bucket_idx];\n\t\t\t}\n\t\t}\n\n\t\t// Output match or literal\n\t\tif (best_len > 4 || (best_len == 4 && cur - best_pos - 1 < 0x3FE00UL)) {\n\t\t\tconst unsigned long offs = cur - best_pos - 1;\n\n\t\t\t// Output match tag\n\t\t\tblz_putbit(&bs, 1);\n\n\t\t\t// Output match length\n\t\t\tblz_putgamma(&bs, best_len - 2);\n\n\t\t\t// Output match offset\n\t\t\tblz_putgamma(&bs, (offs >> 8) + 2);\n\t\t\t*bs.next_out++ = offs & 0x00FF;\n\n\t\t\tcur += best_len;\n\t\t}\n\t\telse {\n\t\t\t// Output literal tag\n\t\t\tblz_putbit(&bs, 0);\n\n\t\t\t// Copy literal\n\t\t\t*bs.next_out++ = in[cur++];\n\t\t}\n\t}\n\n\t// Output any remaining literals\n\twhile (cur < src_size) {\n\t\t// Output literal tag\n\t\tblz_putbit(&bs, 0);\n\n\t\t// Copy literal\n\t\t*bs.next_out++ = in[cur++];\n\t}\n\n\t// Trailing one bit to delimit any literal tags\n\tblz_putbit(&bs, 1);\n\n\t// Shift last tag into position and store\n\tbs.tag <<= bs.bits_left;\n\tbs.tag_out[0] = bs.tag & 0x00FF;\n\tbs.tag_out[1] = (bs.tag >> 8) & 0x00FF;\n\n\t// Return compressed size\n\treturn (unsigned long) (bs.next_out - (unsigned char *) dst);\n}\n\n#endif /* BRIEFLZ_HASHBUCKET_H_INCLUDED */\n"
  },
  {
    "path": "source/Core/brieflz/brieflz_lazy.h",
    "content": "//\n// BriefLZ - small fast Lempel-Ziv\n//\n// Lazy (non-greedy) parsing with one-byte-lookahead\n//\n// Copyright (c) 2016-2020 Joergen Ibsen\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n//   1. The origin of this software must not be misrepresented; you must\n//      not claim that you wrote the original software. If you use this\n//      software in a product, an acknowledgment in the product\n//      documentation would be appreciated but is not required.\n//\n//   2. Altered source versions must be plainly marked as such, and must\n//      not be misrepresented as being the original software.\n//\n//   3. This notice may not be removed or altered from any source\n//      distribution.\n//\n\n#ifndef BRIEFLZ_LAZY_H_INCLUDED\n#define BRIEFLZ_LAZY_H_INCLUDED\n\nstatic size_t\nblz_lazy_workmem_size(size_t src_size)\n{\n\t(void) src_size;\n\n\treturn LOOKUP_SIZE * sizeof(blz_word);\n}\n\n// Lazy (non-greedy) parsing with one-byte-lookahead.\n//\n// Each time we find a match, we check if there is a better match at the next\n// position, and if so encode a literal instead.\n//\nstatic unsigned long\nblz_pack_lazy(const void *src, void *dst, unsigned long src_size, void *workmem)\n{\n\tstruct blz_state bs;\n\tblz_word *const lookup = (blz_word *) workmem;\n\tconst unsigned char *const in = (const unsigned char *) src;\n\tconst unsigned long last_match_pos = src_size > 4 ? src_size - 4 : 0;\n\tunsigned long hash_pos = 0;\n\tunsigned long cur = 0;\n\n\tassert(src_size < BLZ_WORD_MAX);\n\n\t// Check for empty input\n\tif (src_size == 0) {\n\t\treturn 0;\n\t}\n\n\tbs.next_out = (unsigned char *) dst;\n\n\t// First byte verbatim\n\t*bs.next_out++ = in[0];\n\n\t// Check for 1 byte input\n\tif (src_size == 1) {\n\t\treturn 1;\n\t}\n\n\t// Initialize first tag\n\tbs.tag_out = bs.next_out;\n\tbs.next_out += 2;\n\tbs.tag = 0;\n\tbs.bits_left = 16;\n\n\t// Initialize lookup\n\tfor (unsigned long i = 0; i < LOOKUP_SIZE; ++i) {\n\t\tlookup[i] = NO_MATCH_POS;\n\t}\n\n\t// Main compression loop\n\tfor (cur = 1; cur <= last_match_pos; ) {\n\t\t// Update lookup up to current position\n\t\twhile (hash_pos < cur) {\n\t\t\tlookup[blz_hash4(&in[hash_pos])] = hash_pos;\n\t\t\thash_pos++;\n\t\t}\n\n\t\t// Look up match for current position\n\t\tunsigned long pos = lookup[blz_hash4(&in[cur])];\n\t\tunsigned long len = 0;\n\n\t\t// Check match\n\t\tif (pos != NO_MATCH_POS) {\n\t\t\tconst unsigned long len_limit = src_size - cur;\n\n\t\t\twhile (len < len_limit\n\t\t\t    && in[pos + len] == in[cur + len]) {\n\t\t\t\t++len;\n\t\t\t}\n\t\t}\n\n\t\t// Check if match at next position is better\n\t\tif (len > 3 && cur < last_match_pos) {\n\t\t\t// Update lookup up to next position\n\t\t\tlookup[blz_hash4(&in[hash_pos])] = hash_pos;\n\t\t\thash_pos++;\n\n\t\t\t// Look up match for next position\n\t\t\tconst unsigned long next_pos = lookup[blz_hash4(&in[cur + 1])];\n\t\t\tunsigned long next_len = 0;\n\n\t\t\t// Check match\n\t\t\tif (next_pos != NO_MATCH_POS && next_pos != pos + 1) {\n\t\t\t\tconst unsigned long next_len_limit = src_size - (cur + 1);\n\n\t\t\t\t// If last byte matches, so this has a chance to be a better match\n\t\t\t\tif (len - 1 < next_len_limit\n\t\t\t\t && in[next_pos + len - 1] == in[cur + 1 + len - 1]) {\n\t\t\t\t\twhile (next_len < next_len_limit\n\t\t\t\t\t    && in[next_pos + next_len] == in[cur + 1 + next_len]) {\n\t\t\t\t\t\t++next_len;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (next_len >= len) {\n\t\t\t\t// Replace with next match if it extends backwards\n\t\t\t\tif (next_pos > 0 && in[next_pos - 1] == in[cur]) {\n\t\t\t\t\tif (blz_match_better(cur, next_pos - 1, next_len + 1, pos, len)) {\n\t\t\t\t\t\tpos = next_pos - 1;\n\t\t\t\t\t\tlen = next_len + 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Drop current match if next match is better\n\t\t\t\t\tif (blz_next_match_better(cur, next_pos, next_len, pos, len)) {\n\t\t\t\t\t\tlen = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\t// Output match or literal\n\t\tif (len > 4 || (len == 4 && cur - pos - 1 < 0x3FE00UL)) {\n\t\t\tconst unsigned long offs = cur - pos - 1;\n\n\t\t\t// Output match tag\n\t\t\tblz_putbit(&bs, 1);\n\n\t\t\t// Output match length\n\t\t\tblz_putgamma(&bs, len - 2);\n\n\t\t\t// Output match offset\n\t\t\tblz_putgamma(&bs, (offs >> 8) + 2);\n\t\t\t*bs.next_out++ = offs & 0x00FF;\n\n\t\t\tcur += len;\n\t\t}\n\t\telse {\n\t\t\t// Output literal tag\n\t\t\tblz_putbit(&bs, 0);\n\n\t\t\t// Copy literal\n\t\t\t*bs.next_out++ = in[cur++];\n\t\t}\n\t}\n\n\t// Output any remaining literals\n\twhile (cur < src_size) {\n\t\t// Output literal tag\n\t\tblz_putbit(&bs, 0);\n\n\t\t// Copy literal\n\t\t*bs.next_out++ = in[cur++];\n\t}\n\n\t// Trailing one bit to delimit any literal tags\n\tblz_putbit(&bs, 1);\n\n\t// Shift last tag into position and store\n\tbs.tag <<= bs.bits_left;\n\tbs.tag_out[0] = bs.tag & 0x00FF;\n\tbs.tag_out[1] = (bs.tag >> 8) & 0x00FF;\n\n\t// Return compressed size\n\treturn (unsigned long) (bs.next_out - (unsigned char *) dst);\n}\n\n#endif /* BRIEFLZ_LAZY_H_INCLUDED */\n"
  },
  {
    "path": "source/Core/brieflz/brieflz_leparse.h",
    "content": "//\n// BriefLZ - small fast Lempel-Ziv\n//\n// Backwards dynamic programming parse with left-extension of matches\n//\n// Copyright (c) 2016-2020 Joergen Ibsen\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n//   1. The origin of this software must not be misrepresented; you must\n//      not claim that you wrote the original software. If you use this\n//      software in a product, an acknowledgment in the product\n//      documentation would be appreciated but is not required.\n//\n//   2. Altered source versions must be plainly marked as such, and must\n//      not be misrepresented as being the original software.\n//\n//   3. This notice may not be removed or altered from any source\n//      distribution.\n//\n\n#ifndef BRIEFLZ_LEPARSE_H_INCLUDED\n#define BRIEFLZ_LEPARSE_H_INCLUDED\n\nstatic size_t\nblz_leparse_workmem_size(size_t src_size)\n{\n\treturn (LOOKUP_SIZE < 2 * src_size ? 3 * src_size : src_size + LOOKUP_SIZE)\n\t     * sizeof(blz_word);\n}\n\n// Backwards dynamic programming parse with left-extension of matches.\n//\n// Whenever we find a match that improves the cost at the current position,\n// we try to extend this match to the left, and if possible we use that\n// left-extension for each position to the left. Since we are processing\n// the input from right to left, this matches repeated patterns without\n// searching at each position.\n//\n// Essentially, this improves the worst case for the parsing at a small cost\n// in ratio. The match finding is still O(n^2) in number of matches though,\n// so may have to limit max_depth on larger block sizes.\n//\n// This is usually within a few percent of the \"optimal\" parse with the same\n// parameters.\n//\nstatic unsigned long\nblz_pack_leparse(const void *src, void *dst, unsigned long src_size, void *workmem,\n                 const unsigned long max_depth, const unsigned long accept_len)\n{\n\tstruct blz_state bs;\n\tconst unsigned char *const in = (const unsigned char *) src;\n\tconst unsigned long last_match_pos = src_size > 4 ? src_size - 4 : 0;\n\n\tassert(src_size < BLZ_WORD_MAX);\n\n\t// Check for empty input\n\tif (src_size == 0) {\n\t\treturn 0;\n\t}\n\n\tbs.next_out = (unsigned char *) dst;\n\n\t// First byte verbatim\n\t*bs.next_out++ = in[0];\n\n\t// Check for 1 byte input\n\tif (src_size == 1) {\n\t\treturn 1;\n\t}\n\n\t// Initialize first tag\n\tbs.tag_out = bs.next_out;\n\tbs.next_out += 2;\n\tbs.tag = 0;\n\tbs.bits_left = 16;\n\n\tif (src_size < 4) {\n\t\tfor (unsigned long i = 1; i < src_size; ++i) {\n\t\t\t// Output literal tag\n\t\t\tblz_putbit(&bs, 0);\n\n\t\t\t// Copy literal\n\t\t\t*bs.next_out++ = in[i];\n\t\t}\n\n\t\t// Return compressed size\n\t\treturn (unsigned long) (blz_finalize(&bs) - (unsigned char *) dst);\n\t}\n\n\t// With a bit of careful ordering we can fit in 3 * src_size words.\n\t//\n\t// The idea is that the lookup is only used in the first phase to\n\t// build the hash chains, so we overlap it with mpos and mlen.\n\t// Also, since we are using prev from right to left in phase two,\n\t// and that is the order we fill in cost, we can overlap these.\n\t//\n\t// One detail is that we actually use src_size + 1 elements of cost,\n\t// but we put mpos after it, where we do not need the first element.\n\t//\n\tblz_word *const prev = (blz_word *) workmem;\n\tblz_word *const mpos = prev + src_size;\n\tblz_word *const mlen = mpos + src_size;\n\tblz_word *const cost = prev;\n\tblz_word *const lookup = mpos;\n\n\t// Phase 1: Build hash chains\n\tconst int bits = 2 * src_size < LOOKUP_SIZE ? BLZ_HASH_BITS : blz_log2(src_size);\n\n\t// Initialize lookup\n\tfor (unsigned long i = 0; i < (1UL << bits); ++i) {\n\t\tlookup[i] = NO_MATCH_POS;\n\t}\n\n\t// Build hash chains in prev\n\tif (last_match_pos > 0) {\n\t\tfor (unsigned long i = 0; i <= last_match_pos; ++i) {\n\t\t\tconst unsigned long hash = blz_hash4_bits(&in[i], bits);\n\t\t\tprev[i] = lookup[hash];\n\t\t\tlookup[hash] = i;\n\t\t}\n\t}\n\n\t// Initialize last three positions as literals\n\tmlen[src_size - 3] = 1;\n\tmlen[src_size - 2] = 1;\n\tmlen[src_size - 1] = 1;\n\n\tcost[src_size - 3] = 27;\n\tcost[src_size - 2] = 18;\n\tcost[src_size - 1] = 9;\n\tcost[src_size] = 0;\n\n\t// Phase 2: Find lowest cost path from each position to end\n\tfor (unsigned long cur = last_match_pos; cur > 0; --cur) {\n\t\t// Since we updated prev to the end in the first phase, we\n\t\t// do not need to hash, but can simply look up the previous\n\t\t// position directly.\n\t\tunsigned long pos = prev[cur];\n\n\t\tassert(pos == NO_MATCH_POS || pos < cur);\n\n\t\t// Start with a literal\n\t\tcost[cur] = cost[cur + 1] + 9;\n\t\tmlen[cur] = 1;\n\n\t\tunsigned long max_len = 3;\n\n\t\tconst unsigned long len_limit = src_size - cur;\n\t\tunsigned long num_chain = max_depth;\n\n\t\t// Go through the chain of prev matches\n\t\tfor (; pos != NO_MATCH_POS && num_chain--; pos = prev[pos]) {\n\t\t\tunsigned long len = 0;\n\n\t\t\t// If next byte matches, so this has a chance to be a longer match\n\t\t\tif (max_len < len_limit && in[pos + max_len] == in[cur + max_len]) {\n\t\t\t\t// Find match len\n\t\t\t\twhile (len < len_limit && in[pos + len] == in[cur + len]) {\n\t\t\t\t\t++len;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Extend current match if possible\n\t\t\t//\n\t\t\t// Note that we are checking matches in order from the\n\t\t\t// closest and back. This means for a match further\n\t\t\t// away, the encoding of all lengths up to the current\n\t\t\t// max length will always be longer or equal, so we need\n\t\t\t// only consider the extension.\n\t\t\tif (len > max_len) {\n\t\t\t\tunsigned long min_cost = ULONG_MAX;\n\t\t\t\tunsigned long min_cost_len = 3;\n\n\t\t\t\t// Find lowest cost match length\n\t\t\t\tfor (unsigned long i = max_len + 1; i <= len; ++i) {\n\t\t\t\t\tunsigned long match_cost = blz_match_cost(cur - pos - 1, i);\n\t\t\t\t\tassert(match_cost < BLZ_WORD_MAX - cost[cur + i]);\n\t\t\t\t\tunsigned long cost_here = match_cost + cost[cur + i];\n\n\t\t\t\t\tif (cost_here < min_cost) {\n\t\t\t\t\t\tmin_cost = cost_here;\n\t\t\t\t\t\tmin_cost_len = i;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tmax_len = len;\n\n\t\t\t\t// Update cost if cheaper\n\t\t\t\tif (min_cost < cost[cur]) {\n\t\t\t\t\tcost[cur] = min_cost;\n\t\t\t\t\tmpos[cur] = pos;\n\t\t\t\t\tmlen[cur] = min_cost_len;\n\n\t\t\t\t\t// Left-extend current match if possible\n\t\t\t\t\tif (pos > 0 && in[pos - 1] == in[cur - 1]) {\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t--cur;\n\t\t\t\t\t\t\t--pos;\n\t\t\t\t\t\t\t++min_cost_len;\n\t\t\t\t\t\t\tunsigned long match_cost = blz_match_cost(cur - pos - 1, min_cost_len);\n\t\t\t\t\t\t\tassert(match_cost < BLZ_WORD_MAX - cost[cur + min_cost_len]);\n\t\t\t\t\t\t\tunsigned long cost_here = match_cost + cost[cur + min_cost_len];\n\t\t\t\t\t\t\tcost[cur] = cost_here;\n\t\t\t\t\t\t\tmpos[cur] = pos;\n\t\t\t\t\t\t\tmlen[cur] = min_cost_len;\n\t\t\t\t\t\t} while (pos > 0 && in[pos - 1] == in[cur - 1]);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (len >= accept_len || len == len_limit) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tmpos[0] = 0;\n\tmlen[0] = 1;\n\n\t// Phase 3: Output compressed data, following lowest cost path\n\tfor (unsigned long i = 1; i < src_size; i += mlen[i]) {\n\t\tif (mlen[i] == 1) {\n\t\t\t// Output literal tag\n\t\t\tblz_putbit(&bs, 0);\n\n\t\t\t// Copy literal\n\t\t\t*bs.next_out++ = in[i];\n\t\t}\n\t\telse {\n\t\t\tconst unsigned long offs = i - mpos[i] - 1;\n\n\t\t\t// Output match tag\n\t\t\tblz_putbit(&bs, 1);\n\n\t\t\t// Output match length\n\t\t\tblz_putgamma(&bs, mlen[i] - 2);\n\n\t\t\t// Output match offset\n\t\t\tblz_putgamma(&bs, (offs >> 8) + 2);\n\t\t\t*bs.next_out++ = offs & 0x00FF;\n\t\t}\n\t}\n\n\t// Return compressed size\n\treturn (unsigned long) (blz_finalize(&bs) - (unsigned char *) dst);\n}\n\n#endif /* BRIEFLZ_LEPARSE_H_INCLUDED */\n"
  },
  {
    "path": "source/Core/brieflz/depack.c",
    "content": "/*\n * BriefLZ - small fast Lempel-Ziv\n *\n * C depacker\n *\n * Copyright (c) 2002-2018 Joergen Ibsen\n *\n * This software is provided 'as-is', without any express or implied\n * warranty. In no event will the authors be held liable for any damages\n * arising from the use of this software.\n *\n * Permission is granted to anyone to use this software for any purpose,\n * including commercial applications, and to alter it and redistribute it\n * freely, subject to the following restrictions:\n *\n *   1. The origin of this software must not be misrepresented; you must\n *      not claim that you wrote the original software. If you use this\n *      software in a product, an acknowledgment in the product\n *      documentation would be appreciated but is not required.\n *\n *   2. Altered source versions must be plainly marked as such, and must\n *      not be misrepresented as being the original software.\n *\n *   3. This notice may not be removed or altered from any source\n *      distribution.\n */\n\n#include \"brieflz.h\"\n\n/* Internal data structure */\nstruct blz_state {\n  const unsigned char *src;\n  unsigned char       *dst;\n  unsigned int         tag;\n  int                  bits_left;\n};\n\n#if !defined(BLZ_NO_LUT)\nstatic const unsigned char blz_gamma_lookup[256][2] = {\n    /* 00xxxxxx = 2 */\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n    { 2, 2},\n\n    /* 0100xxxx = 4 */\n    { 4, 4},\n    { 4, 4},\n    { 4, 4},\n    { 4, 4},\n    { 4, 4},\n    { 4, 4},\n    { 4, 4},\n    { 4, 4},\n    { 4, 4},\n    { 4, 4},\n    { 4, 4},\n    { 4, 4},\n    { 4, 4},\n    { 4, 4},\n    { 4, 4},\n    { 4, 4},\n\n    /* 010100xx = 8 */\n    { 8, 6},\n    { 8, 6},\n    { 8, 6},\n    { 8, 6},\n\n    /* 01010100 = 16  01010101 = 16+ 01010110 = 17  01010111 = 17+ */\n    {16, 8},\n    {16, 0},\n    {17, 8},\n    {17, 0},\n\n    /* 010110xx = 9 */\n    { 9, 6},\n    { 9, 6},\n    { 9, 6},\n    { 9, 6},\n\n    /* 01011100 = 18  01011101 = 18+ 01011110 = 19  01011111 = 19+ */\n    {18, 8},\n    {18, 0},\n    {19, 8},\n    {19, 0},\n\n    /* 0110xxxx = 5 */\n    { 5, 4},\n    { 5, 4},\n    { 5, 4},\n    { 5, 4},\n    { 5, 4},\n    { 5, 4},\n    { 5, 4},\n    { 5, 4},\n    { 5, 4},\n    { 5, 4},\n    { 5, 4},\n    { 5, 4},\n    { 5, 4},\n    { 5, 4},\n    { 5, 4},\n    { 5, 4},\n\n    /* 011100xx = 10 */\n    {10, 6},\n    {10, 6},\n    {10, 6},\n    {10, 6},\n\n    /* 01110100 = 20  01110101 = 20+ 01110110 = 21  01110111 = 21+ */\n    {20, 8},\n    {20, 0},\n    {21, 8},\n    {21, 0},\n\n    /* 011110xx = 11 */\n    {11, 6},\n    {11, 6},\n    {11, 6},\n    {11, 6},\n\n    /* 01111100 = 22  01111101 = 22+ 01111110 = 23  01111111 = 23+ */\n    {22, 8},\n    {22, 0},\n    {23, 8},\n    {23, 0},\n\n    /* 10xxxxxx = 3 */\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n    { 3, 2},\n\n    /* 1100xxxx = 6 */\n    { 6, 4},\n    { 6, 4},\n    { 6, 4},\n    { 6, 4},\n    { 6, 4},\n    { 6, 4},\n    { 6, 4},\n    { 6, 4},\n    { 6, 4},\n    { 6, 4},\n    { 6, 4},\n    { 6, 4},\n    { 6, 4},\n    { 6, 4},\n    { 6, 4},\n    { 6, 4},\n\n    /* 110100xx = 12 */\n    {12, 6},\n    {12, 6},\n    {12, 6},\n    {12, 6},\n\n    /* 11010100 = 24  11010101 = 24+ 11010110 = 25  11010111 = 25+ */\n    {24, 8},\n    {24, 0},\n    {25, 8},\n    {25, 0},\n\n    /* 110110xx = 13 */\n    {13, 6},\n    {13, 6},\n    {13, 6},\n    {13, 6},\n\n    /* 11011100 = 26  11011101 = 26+ 11011110 = 27  11011111 = 27+ */\n    {26, 8},\n    {26, 0},\n    {27, 8},\n    {27, 0},\n\n    /* 1110xxxx = 7 */\n    { 7, 4},\n    { 7, 4},\n    { 7, 4},\n    { 7, 4},\n    { 7, 4},\n    { 7, 4},\n    { 7, 4},\n    { 7, 4},\n    { 7, 4},\n    { 7, 4},\n    { 7, 4},\n    { 7, 4},\n    { 7, 4},\n    { 7, 4},\n    { 7, 4},\n    { 7, 4},\n\n    /* 111100xx = 14 */\n    {14, 6},\n    {14, 6},\n    {14, 6},\n    {14, 6},\n\n    /* 11110100 = 28  11110101 = 28+ 11110110 = 29  11110111 = 29+ */\n    {28, 8},\n    {28, 0},\n    {29, 8},\n    {29, 0},\n\n    /* 111110xx = 15 */\n    {15, 6},\n    {15, 6},\n    {15, 6},\n    {15, 6},\n\n    /* 11111100 = 30  11111101 = 30+ 11111110 = 31  11111111 = 31+ */\n    {30, 8},\n    {30, 0},\n    {31, 8},\n    {31, 0}\n};\n#endif\n\nstatic unsigned int blz_getbit(struct blz_state *bs) {\n  unsigned int bit;\n\n  /* Check if tag is empty */\n  if (!bs->bits_left--) {\n    /* Load next tag */\n    bs->tag = (unsigned int)bs->src[0] | ((unsigned int)bs->src[1] << 8);\n    bs->src += 2;\n    bs->bits_left = 15;\n  }\n\n  /* Shift bit out of tag */\n  bit = (bs->tag & 0x8000) ? 1 : 0;\n  bs->tag <<= 1;\n\n  return bit;\n}\n\nstatic unsigned long blz_getgamma(struct blz_state *bs) {\n  unsigned long result = 1;\n\n#if !defined(BLZ_NO_LUT)\n  /* Decode up to 8 bits of gamma2 code using lookup if possible */\n  if (bs->bits_left >= 8) {\n    unsigned int top8 = (bs->tag >> 8) & 0x00FF;\n    int          shift;\n\n    result = blz_gamma_lookup[top8][0];\n    shift  = (int)blz_gamma_lookup[top8][1];\n\n    if (shift) {\n      bs->tag <<= shift;\n      bs->bits_left -= shift;\n      return result;\n    }\n\n    bs->tag <<= 8;\n    bs->bits_left -= 8;\n  }\n#endif\n\n  /* Input gamma2-encoded bits */\n  do {\n    result = (result << 1) + blz_getbit(bs);\n  } while (blz_getbit(bs));\n\n  return result;\n}\n\nunsigned long blz_depack(const void *src, void *dst, unsigned long depacked_size) {\n  struct blz_state bs;\n  unsigned long    dst_size = 0;\n\n  bs.src = (const unsigned char *)src;\n  bs.dst = (unsigned char *)dst;\n\n  /* Initialise to one bit left in tag; that bit is zero (a literal) */\n  bs.bits_left = 1;\n  bs.tag       = 0x4000;\n\n  /* Main decompression loop */\n  while (dst_size < depacked_size) {\n    if (blz_getbit(&bs)) {\n      /* Input match length and offset */\n      unsigned long len = blz_getgamma(&bs) + 2;\n      unsigned long off = blz_getgamma(&bs) - 2;\n\n      off = (off << 8) + (unsigned long)*bs.src++ + 1;\n\n      /* Copy match */\n      {\n        const unsigned char *p = bs.dst - off;\n        unsigned long        i;\n\n        for (i = len; i > 0; --i) {\n          *bs.dst++ = *p++;\n        }\n      }\n\n      dst_size += len;\n    } else {\n      /* Copy literal */\n      *bs.dst++ = *bs.src++;\n\n      dst_size++;\n    }\n  }\n\n  /* Return decompressed size */\n  return dst_size;\n}\n\nunsigned long blz_depack_srcsize(const void *src, void *dst, unsigned long src_size) {\n  struct blz_state     bs;\n  unsigned long        dst_size = 0;\n  const unsigned char *src_end  = src + src_size;\n\n  bs.src = (const unsigned char *)src;\n  bs.dst = (unsigned char *)dst;\n\n  /* Initialise to one bit left in tag; that bit is zero (a literal) */\n  bs.bits_left = 1;\n  bs.tag       = 0x4000;\n\n  /* Main decompression loop */\n  while (bs.src < src_end) {\n    if (blz_getbit(&bs)) {\n      /* Input match length and offset */\n      unsigned long len = blz_getgamma(&bs) + 2;\n      unsigned long off = blz_getgamma(&bs) - 2;\n\n      off = (off << 8) + (unsigned long)*bs.src++ + 1;\n\n      /* Copy match */\n      {\n        const unsigned char *p = bs.dst - off;\n        unsigned long        i;\n\n        for (i = len; i > 0; --i) {\n          *bs.dst++ = *p++;\n        }\n      }\n\n      dst_size += len;\n    } else {\n      /* Copy literal */\n      *bs.dst++ = *bs.src++;\n\n      dst_size++;\n    }\n  }\n\n  /* Return decompressed size */\n  return dst_size;\n}\n"
  },
  {
    "path": "source/Makefile",
    "content": "ifndef model\r\nmodel:=Pinecilv2\r\nendif\r\n\r\nALL_MINIWARE_MODELS=TS100 TS80 TS80P TS101\r\nALL_PINECIL_MODELS=Pinecil\r\nALL_PINECIL_V2_MODELS=Pinecilv2\r\nALL_MHP30_MODELS=MHP30\r\nALL_SEQURE_MODELS=S60 S60P T55\r\nALL_MODELS=$(ALL_MINIWARE_MODELS) $(ALL_PINECIL_MODELS) $(ALL_MHP30_MODELS) $(ALL_PINECIL_V2_MODELS) $(ALL_SEQURE_MODELS)\r\n\r\nifneq ($(model),$(filter $(model),$(ALL_MODELS)))\r\n$(error Invalid model '$(model)', valid options are: $(ALL_MODELS))\r\nendif\r\n\r\n# Output folder\r\nHEXFILE_DIR=Hexfile\r\n\r\n# Temporary objects folder\r\nOUTPUT_DIR_BASE=Objects\r\nOUTPUT_DIR=Objects/$(model)\r\n\r\nALL_LANGUAGES=BE BG CS DA DE EL EN ES ET FI FR HR HU IT JA_JP LT NB NL_BE NL PL PT RO RU SK SL SR_CYRL SR_LATN SV TR UK UZ VI YUE_HK ZH_CN ZH_TW\r\n\r\nLANGUAGE_GROUP_CJK_LANGS=EN JA_JP YUE_HK ZH_TW ZH_CN\r\nLANGUAGE_GROUP_CJK_NAME=Chinese+Japanese\r\n\r\nifdef custom_multi_langs\r\nRUN_SHELL_CMD:=$(shell rm -Rf {Core/Gen,$(OUTPUT_DIR)/Core/Gen,$(HEXFILE_DIR)/*_Custom.*})\r\nLANGUAGE_GROUP_CUSTOM_LANGS=$(custom_multi_langs)\r\nLANGUAGE_GROUP_CUSTOM_NAME=Custom\r\nendif\r\n\r\nLANGUAGE_GROUP_CYRILLIC_LANGS=EN BE BG RU SR_CYRL SR_LATN UK\r\nLANGUAGE_GROUP_CYRILLIC_NAME=Belarusian+Bulgarian+Russian+Serbian+Ukrainian\r\n\r\nLANGUAGE_GROUP_EUR_LANGS=EN $(filter-out $(LANGUAGE_GROUP_CJK_LANGS) $(LANGUAGE_GROUP_CYRILLIC_LANGS),$(ALL_LANGUAGES))\r\nLANGUAGE_GROUP_EUR_NAME=European\r\n\r\nLANGUAGE_GROUPS=CUSTOM CJK CYRILLIC EUR\r\n\r\n# Define for host Python\r\nifndef HOST_PYTHON\r\nHOST_PYTHON:=python3\r\nendif\r\n\r\n# Defines for host tools\r\nifeq ($(HOST_CC),)\r\nHOST_CC:=gcc\r\nendif\r\n\r\nHOST_OUTPUT_DIR=Objects/host\r\n\r\n# DFU packing address to use\r\nDEVICE_DFU_ADDRESS=0x08000000\r\nDEVICE_DFU_VID_PID=0x28E9:0x0189\r\n\r\n\r\n# Enumerate all of the include directories (HAL source dirs are used for clang-format only)\r\nAPP_INC_DIR=./Core/Inc\r\nMIDDLEWARES_DIR=./Middlewares\r\nBSP_INC_DIR=./Core/BSP\r\nTHREADS_DIR=./Core/Threads\r\nSOURCE_CORE_DIR=./Core/Src\r\nBRIEFLZ_DIR=./Core/brieflz\r\nDRIVERS_DIR=./Core/Drivers\r\nPD_DRIVER_DIR=./Core/Drivers/usb-pd\r\n# Exclude USB-PD tests\r\nPD_DRIVER_TESTS_DIR=./Core/Drivers/usb-pd/tests\r\n\r\n\r\n# Excludes for clang-format\r\n\r\nALL_INCLUDES_EXCEPT:=-path $(PD_DRIVER_DIR) -o -not -name \"configuration.h\"\r\nALL_SOURCE_EXCEPT:=-path $(PD_DRIVER_DIR)\r\n# Find-all's used for formatting; have to exclude external modules\r\nALL_INCLUDES=$(shell find  ./Core -type d \\( $(ALL_INCLUDES_EXCEPT) \\) -prune -false -o \\( -type f \\( -name '*.h' -o -name '*.hpp' \\) \\) )\r\nALL_SOURCE=$(shell find    ./Core -type d \\( $(ALL_SOURCE_EXCEPT)   \\) -prune -false -o \\( -type f \\( -name '*.c' -o -name '*.cpp' \\) \\) )\r\n\r\n# Device dependent settings\r\nifeq ($(model),$(filter $(model),$(ALL_MINIWARE_MODELS)))\r\n$(info Building for Miniware )\r\nDEVICE_BSP_DIR=./Core/BSP/Miniware\r\nLDSCRIPT=./Core/BSP/Miniware/stm32f103.ld\r\n\r\nifeq ($(model),$(filter $(model),TS101))\r\n# 128K, but logo must be at 99K so their broken ass DFU can flash it\r\nflash_size=98k\r\nbootldr_size=0x8000\r\nDEVICE_DFU_ADDRESS=0x08008000\r\nelse\r\nflash_size=62k\r\nbootldr_size=0x4000\r\nDEVICE_DFU_ADDRESS=0x08004000\r\nendif\r\n\r\nDEV_GLOBAL_DEFS=-D STM32F103T8Ux       \\\r\n                -D STM32F1             \\\r\n                -D STM32               \\\r\n                -D USE_HAL_DRIVER      \\\r\n                -D STM32F103xB         \\\r\n                -D USE_RTOS_SYSTICK    \\\r\n                -D GCC_ARMCM3          \\\r\n                -D ARM_MATH_CM3        \\\r\n                -D STM32F10X_MD        \\\r\n                -finline-limit=9999999\r\n\r\nDEV_LDFLAGS=-Wl,--wrap=printf  -Wl,--no-wchar-size-warning\r\nDEV_AFLAGS=\r\nDEV_CFLAGS=-D VECT_TAB_OFFSET=$(bootldr_size)U\r\nDEV_CXXFLAGS=\r\nCPUFLAGS=-mcpu=cortex-m3  \\\r\n         -mthumb          \\\r\n         -mfloat-abi=soft\r\n\r\nDEVICE_DFU_VID_PID=0x1209:0xDB42\r\nendif # ALL_MINIWARE_MODELS\r\n\r\nifeq ($(model),$(filter $(model),$(ALL_SEQURE_MODELS)))\r\n$(info Building for Sequre )\r\n\r\nDEVICE_BSP_DIR=./Core/BSP/Sequre\r\nS_SRCS:=$(shell find $(DEVICE_BSP_DIR) -type f -name '*.S')\r\nLDSCRIPT=./Core/BSP/Sequre/stm32f103.ld\r\nDEV_GLOBAL_DEFS=-D STM32F103T8Ux       \\\r\n                -D STM32F1             \\\r\n                -D STM32               \\\r\n                -D USE_HAL_DRIVER      \\\r\n                -D STM32F103xB         \\\r\n                -D USE_RTOS_SYSTICK    \\\r\n                -D GCC_ARMCM3          \\\r\n                -D ARM_MATH_CM3        \\\r\n                -D STM32F10X_MD        \\\r\n                -finline-limit=9999999\r\n\r\nDEV_LDFLAGS=-Wl,--wrap=printf  -Wl,--no-wchar-size-warning\r\nDEV_AFLAGS=\r\nDEV_CFLAGS=-D VECT_TAB_OFFSET=$(bootldr_size)U\r\nDEV_CXXFLAGS=\r\nCPUFLAGS=-mcpu=cortex-m3  \\\r\n         -mthumb          \\\r\n         -mfloat-abi=soft\r\n\r\nflash_size=62k\r\nifeq ($(model), S60P)\r\nbootldr_size=0x5000\r\nDEVICE_DFU_ADDRESS=0x08005000\r\nelse \r\n# S60 or T55\r\nbootldr_size=0x4400\r\nDEVICE_DFU_ADDRESS=0x08004400\r\nendif\r\nDEVICE_DFU_VID_PID=0x1209:0xDB42\r\nendif # ALL_SEQURE_MODELS\r\n\r\nifeq ($(model),$(filter $(model),$(ALL_MHP30_MODELS)))\r\n$(info Building for MHP30 )\r\n\r\nDEVICE_BSP_DIR=./Core/BSP/MHP30\r\nLDSCRIPT=./Core/BSP/MHP30/stm32f103.ld\r\nDEV_GLOBAL_DEFS=-D STM32F103T8Ux    \\\r\n                -D STM32F1          \\\r\n                -D STM32            \\\r\n                -D USE_HAL_DRIVER   \\\r\n                -D STM32F103xB      \\\r\n                -D USE_RTOS_SYSTICK \\\r\n                -D GCC_ARMCM3       \\\r\n                -D ARM_MATH_CM3     \\\r\n                -D STM32F10X_MD\r\n\r\nDEV_LDFLAGS=\r\nDEV_AFLAGS=\r\nDEV_CFLAGS=-D VECT_TAB_OFFSET=$(bootldr_size)U\r\nDEV_CXXFLAGS=\r\nCPUFLAGS=-mcpu=cortex-m3 \\\r\n         -mthumb         \\\r\n         -mfloat-abi=soft\r\n\r\nflash_size=126k\r\nbootldr_size=32k\r\nDEVICE_DFU_ADDRESS=0x08008000\r\nDEVICE_DFU_VID_PID=0x1209:0xDB42\r\nendif # ALL_MHP30_MODELS\r\n\r\nifeq ($(model),$(ALL_PINECIL_MODELS))\r\n$(info Building for Pine64 Pinecilv1)\r\n\r\n\r\nDEVICE_BSP_DIR=./Core/BSP/Pinecil\r\nS_SRCS:=$(shell find $(DEVICE_BSP_DIR) -type f -name '*.S')\r\nLDSCRIPT=./Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Board/pinecil/Source/GCC/gcc_gd32vf103_flashxip.ld\r\nflash_size=128k\r\nbootldr_size=0x0\r\n\r\n# Flags\r\nCPUFLAGS=-march=rv32imaczicsr \\\r\n         -mabi=ilp32          \\\r\n         -mcmodel=medany      \\\r\n         -fsigned-char        \\\r\n         -fno-builtin         \\\r\n         -nostartfiles\r\n\r\nDEV_LDFLAGS=-nostartfiles\r\nDEV_AFLAGS=\r\nDEV_GLOBAL_DEFS=-DRTOS_FREERTOS -DDOWNLOAD_MODE=DOWNLOAD_MODE_FLASHXIP\r\nDEV_CFLAGS=-D VECT_TAB_OFFSET=$(bootldr_size)U\r\nDEV_CXXFLAGS=\r\nendif # ALL_PINECIL_MODELS\r\n\r\nifeq ($(model),$(ALL_PINECIL_V2_MODELS))\r\n$(info Building for Pine64 Pinecilv2 )\r\n\r\n\r\nDEVICE_BSP_DIR=./Core/BSP/Pinecilv2\r\nLDSCRIPT=./Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/bl702_flash.ld\r\nDEVICE_DFU_ADDRESS=0x23000000\r\n# DFU starts at the beginning of flash\r\n# Flags\r\nCPUFLAGS=-march=rv32imafczicsr                                \\\r\n         -mabi=ilp32f                                         \\\r\n         -mcmodel=medany                                      \\\r\n         -fsigned-char                                        \\\r\n         -fno-builtin                                         \\\r\n         -nostartfiles                                        \\\r\n         -DportasmHANDLE_INTERRUPT=FreeRTOS_Interrupt_Handler \\\r\n         -DARCH_RISCV                                         \\\r\n         -D__RISCV_FEATURE_MVE=0                              \\\r\n         -DBL702                                              \\\r\n         -DBFLB_USE_ROM_DRIVER=0                              \\\r\n\r\n# Binary blobs suck and they should be ashamed\r\nPINECILV2_SDK_DIR=$(DEVICE_BSP_DIR)/bl_mcu_sdk\r\nPINECILV2_COMPONENTS_DIR=$(PINECILV2_SDK_DIR)/components\r\nPINECILV2_BLE_CRAPWARE_BLOB_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/blecontroller/lib\r\nPINECILV2_RF_CRAPWARE_BLOB_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/bl702_rf/lib\r\n\r\nDEV_LDFLAGS=-nostartfiles                         \\\r\n            -L $(PINECILV2_BLE_CRAPWARE_BLOB_DIR) \\\r\n            -L $(PINECILV2_RF_CRAPWARE_BLOB_DIR)  \\\r\n            -l blecontroller_702_m0s1s            \\\r\n            -l bl702_rf                           \\\r\n            -Wl,--wrap=printf                     \\\r\n            -Wl,--defsym=__wrap_printf=bflb_platform_printf\r\n\r\nDEV_AFLAGS=\r\nDEV_GLOBAL_DEFS=-DCFG_FREERTOS                                       \\\r\n                -DARCH_RISCV                                         \\\r\n                -DBL702                                              \\\r\n                -DCFG_BLE_ENABLE                                     \\\r\n                -DBFLB_BLE                                           \\\r\n                -DCFG_BLE                                            \\\r\n                -DOPTIMIZE_DATA_EVT_FLOW_FROM_CONTROLLER             \\\r\n                -DBL_MCU_SDK                                         \\\r\n                -DCFG_CON=1                                          \\\r\n                -DCFG_BLE_TX_BUFF_DATA=2                             \\\r\n                -DCONFIG_BT_PERIPHERAL                               \\\r\n                -DCONFIG_BT_L2CAP_DYNAMIC_CHANNEL                    \\\r\n                -DCONFIG_BT_GATT_CLIENT                              \\\r\n                -DCONFIG_BT_CONN                                     \\\r\n                -DCONFIG_BT_GATT_DIS_PNP                             \\\r\n                -DCONFIG_BT_GATT_DIS_SERIAL_NUMBER                   \\\r\n                -DCONFIG_BT_GATT_DIS_FW_REV                          \\\r\n                -DCONFIG_BT_GATT_DIS_HW_REV                          \\\r\n                -DCONFIG_BT_GATT_DIS_SW_REV                          \\\r\n                -DCONFIG_BT_ECC                                      \\\r\n                -DCONFIG_BT_GATT_DYNAMIC_DB                          \\\r\n                -DCONFIG_BT_GATT_SERVICE_CHANGED                     \\\r\n                -DCONFIG_BT_KEYS_OVERWRITE_OLDEST                    \\\r\n                -DCONFIG_BT_KEYS_SAVE_AGING_COUNTER_ON_PAIRING       \\\r\n                -DCONFIG_BT_GAP_PERIPHERAL_PREF_PARAMS               \\\r\n                -DCONFIG_BT_BONDABLE                                 \\\r\n                -DCONFIG_BT_HCI_VS_EVT_USER                          \\\r\n                -DCONFIG_BT_ASSERT                                   \\\r\n                -DCONFIG_BT_SIGNING                                  \\\r\n                -DCONFIG_BT_SETTINGS_CCC_LAZY_LOADING                \\\r\n                -DCONFIG_BT_SETTINGS_USE_PRINTK                      \\\r\n                -DCFG_SLEEP                                          \\\r\n                -DCONFIG_BT_OBSERVER                                 \\\r\n                -DCONFIG_BT_BROADCASTER                              \\\r\n                -DportasmHANDLE_INTERRUPT=FreeRTOS_Interrupt_Handler \\\r\n                -DCONFIG_BT_DEVICE_NAME=\\\"Pinecil\\\"                  \\\r\n                -DCONFIG_BT_DEVICE_APPEARANCE=0x06C1\r\n                # -DCFG_BLE_STACK_DBG_PRINT                            \\\r\n                # -DCONFIG_BT_CENTRAL                                  \\\r\n                # -DCONFIG_BT_ALLROLES                                 \\\r\n# -DBFLB_USE_HAL_DRIVER \\\r\n# -DCONFIG_BT_SMP\r\n\r\n# Required to be turned off due to their drivers tripping warnings\r\nDEV_CFLAGS=-Wno-error=enum-conversion -Wno-type-limits -Wno-implicit-fallthrough -Wno-error=implicit-function-declaration -Wno-error=incompatible-pointer-types\r\nDEV_CXXFLAGS=$(DEV_CFLAGS)\r\nflash_size=128k\r\nbootldr_size=0x0\r\n\r\nendif # ALL_PINECIL_V2_MODELS\r\n\r\nDEVICE_BSP_INCLUDE_DIRS:= ${shell find ${DEVICE_BSP_DIR} -type d -print}\r\nTHREADS_INCLUDE_DIRS:= ${shell find ${THREADS_DIR} -type d -print}\r\nDRIVERS_INCLUDE_DIRS:= ${shell find ${DRIVERS_DIR} -type d -print}\r\nBRIEFLZ_INCLUDE_DIRS:= ${shell find ${BRIEFLZ_DIR} -type d -print}\r\nMIDDLEWARES_INCLUDE_DIRS:= ${shell find ${MIDDLEWARES_DIR} -type d -print}\r\n\r\n\r\nINCLUDES=-I$(APP_INC_DIR)                              \\\r\n         -I$(BSP_INC_DIR)                              \\\r\n          ${patsubst %,-I%,${DEVICE_BSP_INCLUDE_DIRS}} \\\r\n          ${patsubst %,-I%,${THREADS_INCLUDE_DIRS}}    \\\r\n          ${patsubst %,-I%,${DRIVERS_INCLUDE_DIRS}}    \\\r\n          ${patsubst %,-I%,${BRIEFLZ_INCLUDE_DIRS}}    \\\r\n          ${patsubst %,-I%,${MIDDLEWARES_INCLUDE_DIRS}}\r\n\r\nASM_INC=$(INCLUDES)\r\n\r\n\r\nSOURCE:=$(shell find ${THREADS_DIR}            -type f -name '*.c') \\\r\n        $(shell find ${SOURCE_CORE_DIR}        -type f -name '*.c') \\\r\n        $(shell find ${DRIVERS_DIR}            -type f -name '*.c') \\\r\n        $(shell find ${DEVICE_BSP_DIR}         -type f -name '*.c') \\\r\n        $(shell find ${MIDDLEWARES_DIR}        -type f -name '*.c') \\\r\n        $(BRIEFLZ_DIR)/depack.c\r\n\r\n# We exclude the USB-PD stack tests $(PD_DRIVER_TESTS_DIR)\r\nSOURCE_CPP:=$(shell find ${THREADS_DIR}      -type f -name '*.cpp') \\\r\n            $(shell find ${SOURCE_CORE_DIR}  -type f -name '*.cpp') \\\r\n            $(shell find ${DRIVERS_DIR}      -type f -name '*.cpp' -not -path \"${PD_DRIVER_TESTS_DIR}/*\" ) \\\r\n            $(shell find ${DEVICE_BSP_DIR}   -type f -name '*.cpp') \\\r\n            $(shell find ${MIDDLEWARES_DIR}  -type f -name '*.cpp')\r\n\r\n\r\nS_SRCS:=$(shell find $(DEVICE_BSP_DIR) -type f -name '*.S')\r\n\r\n\r\n# Code optimisation ------------------------------------------------------------\r\nOPTIM=-Os                             \\\r\n      -fno-jump-tables                \\\r\n      -foptimize-strlen               \\\r\n      -faggressive-loop-optimizations \\\r\n      -fdevirtualize-at-ltrans        \\\r\n      -fmerge-all-constants           \\\r\n      -fshort-wchar                   \\\r\n      -flto=auto                      \\\r\n      -finline-small-functions        \\\r\n      -finline-functions              \\\r\n      -findirect-inlining             \\\r\n      -fdiagnostics-color             \\\r\n      -ffunction-sections             \\\r\n      -fdata-sections                 \\\r\n      -fshort-enums                   \\\r\n      -fsingle-precision-constant     \\\r\n      -fno-common                     \\\r\n      -fno-math-errno                 \\\r\n      -ffast-math                     \\\r\n      -ffinite-math-only              \\\r\n      -fno-signed-zeros               \\\r\n      -fsingle-precision-constant\r\n\r\n# Global defines ---------------------------------------------------------------\r\nGLOBAL_DEFINES+=$(DEV_GLOBAL_DEFS) -D USE_RTOS_SYSTICK -D MODEL_$(model) -D VECT_TAB_OFFSET=$(bootldr_size)U -fshort-wchar\r\n\r\nifdef swd_enable\r\nGLOBAL_DEFINES+=-DSWD_ENABLE\r\nendif\r\n\r\nifeq ($(model),$(filter $(model),$(ALL_PINECIL_V2_MODELS)))\r\nifdef ws2812b_enable\r\n\tGLOBAL_DEFINES += -DWS2812B_ENABLE\r\nendif\r\nendif\r\n\r\n# Libs -------------------------------------------------------------------------\r\nLIBS=\r\n\r\n# Compilers --------------------------------------------------------------------\r\nCOMPILER=gcc\r\n\r\n# arm-none-eabi is the general ARM compiler\r\n# riscv-none-embed is the riscv compiler\r\n# riscv-nuclei-elf is the nuclei tuned one for their cores\r\nifeq ($(model),$(filter $(model),$(ALL_MINIWARE_MODELS) $(ALL_MHP30_MODELS)))\r\nCOMPILER_PREFIX=arm-none-eabi\r\nendif\r\nifeq ($(model),$(filter $(model),$(ALL_SEQURE_MODELS) ))\r\nCOMPILER_PREFIX=arm-none-eabi\r\nendif\r\nifeq ($(model),$(filter $(model),$(ALL_PINECIL_MODELS) $(ALL_PINECIL_V2_MODELS)))\r\nCOMPILER_PREFIX=riscv-none-elf\r\nendif\r\n\r\n# Programs ---------------------------------------------------------------------\r\nCC=$(COMPILER_PREFIX)-gcc\r\nCPP=$(COMPILER_PREFIX)-g++\r\nOBJCOPY=$(COMPILER_PREFIX)-objcopy\r\nSIZE=$(COMPILER_PREFIX)-size\r\nOBJDUMP=$(COMPILER_PREFIX)-objdump\r\n\r\n# Use gcc in assembler mode so we can use defines etc in assembly\r\nAS=$(COMPILER_PREFIX)-gcc -x assembler-with-cpp\r\n\r\n# Linker flags -----------------------------------------------------------------\r\nLINKER_FLAGS=-Wl,--gc-sections                             \\\r\n             -Wl,--wrap=malloc                             \\\r\n             -Wl,--wrap=free                               \\\r\n             -Wl,--undefined=vTaskSwitchContext            \\\r\n             -Wl,--undefined=pxCurrentTCB                  \\\r\n             -Wl,--defsym=__FLASH_SIZE__=$(flash_size)     \\\r\n             -Wl,--defsym=__BOOTLDR_SIZE__=$(bootldr_size) \\\r\n             -Wl,--print-memory-usage                      \\\r\n                 --specs=nosys.specs                       \\\r\n                 --specs=nano.specs                        \\\r\n             $(DEV_LDFLAGS)\r\n\r\n# Compiler flags ---------------------------------------------------------------\r\nCHECKOPTIONS=-Wtrigraphs                  \\\r\n             -Wuninitialized              \\\r\n             -Wmissing-braces             \\\r\n             -Wfloat-equal                \\\r\n             -Wunreachable-code           \\\r\n             -Wswitch-default             \\\r\n             -Wreturn-type                \\\r\n             -Wundef                      \\\r\n             -Wparentheses                \\\r\n             -Wnonnull                    \\\r\n             -Winit-self                  \\\r\n             -Wmissing-include-dirs       \\\r\n             -Wsequence-point             \\\r\n             -Wswitch                     \\\r\n             -Wformat                     \\\r\n             -Wsign-compare               \\\r\n             -Waddress                    \\\r\n             -Waggregate-return           \\\r\n             -Wmissing-field-initializers \\\r\n             -Wshadow                     \\\r\n             -Wno-unused-parameter        \\\r\n             -Wno-undef                   \\\r\n             -Wdouble-promotion\r\n\r\nCHECKOPTIONS_C=$(CHECKOPTIONS) -Wbad-function-cast\r\n\r\nCXXFLAGS=$(DEV_CXXFLAGS)        \\\r\n         $(CPUFLAGS)            \\\r\n         $(INCLUDES)            \\\r\n         $(GLOBAL_DEFINES)      \\\r\n       -D${COMPILER}            \\\r\n       -MMD                     \\\r\n         $(CHECKOPTIONS)        \\\r\n       -std=c++17               \\\r\n         $(OPTIM)               \\\r\n       -fno-rtti                \\\r\n       -fno-exceptions          \\\r\n       -fno-non-call-exceptions \\\r\n       -fno-use-cxa-atexit      \\\r\n       -fno-strict-aliasing     \\\r\n       -fno-threadsafe-statics  \\\r\n       -T$(LDSCRIPT)\r\n\r\nCFLAGS=$(DEV_CFLAGS)     \\\r\n       $(CPUFLAGS)       \\\r\n       $(INCLUDES)       \\\r\n       $(CHECKOPTIONS_C) \\\r\n       $(GLOBAL_DEFINES) \\\r\n     -D${COMPILER}       \\\r\n     -MMD                \\\r\n     -std=gnu11          \\\r\n     -g3                 \\\r\n       $(OPTIM)          \\\r\n     -T$(LDSCRIPT)       \\\r\n     -c\r\n\r\nAFLAGS=$(CPUFLAGS)       \\\r\n       $(DEV_AFLAGS)     \\\r\n       $(GLOBAL_DEFINES) \\\r\n       $(OPTIM)          \\\r\n       $(ASM_INC)        \\\r\n       $(INCLUDES)\r\n\r\nOBJS=$(SOURCE:.c=.o)\r\nOBJS_CPP=$(SOURCE_CPP:.cpp=.o)\r\nOBJS_S=$(S_SRCS:.S=.o)\r\n\r\nOUT_OBJS=$(addprefix $(OUTPUT_DIR)/,$(OBJS))\r\nOUT_OBJS_CPP=$(addprefix $(OUTPUT_DIR)/,$(OBJS_CPP))\r\nOUT_OBJS_S=$(addprefix $(OUTPUT_DIR)/,$(OBJS_S))\r\n\r\ndefault: firmware-EN\r\n\r\nfirmware-%: $(HEXFILE_DIR)/$(model)_%.hex $(HEXFILE_DIR)/$(model)_%.bin $(HEXFILE_DIR)/$(model)_%.dfu\r\n\t@true\r\n\r\n# Targets for binary files\r\n\r\n%.hex: %.elf Makefile\r\n\t$(OBJCOPY) $< -O ihex $@\r\n\r\n%.bin: %.elf Makefile\r\n\t$(OBJCOPY) $< -O binary $@\r\n\t$(SIZE) $<\r\n\r\n%.dfu: %.bin Makefile\r\n\t$(HOST_PYTHON) dfuse-pack.py -b $(DEVICE_DFU_ADDRESS)@0:$< -D $(DEVICE_DFU_VID_PID) $@\r\n\r\n$(HEXFILE_DIR)/$(model)_%.elf: \\\r\n\t\t$(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP)    \\\r\n\t\t$(OUTPUT_DIR)/Core/Gen/Translation.%.o       \\\r\n\t\t$(OUTPUT_DIR)/Core/LangSupport/lang_single.o \\\r\n\t\tMakefile $(LDSCRIPT)\r\n\t@test -d $(@D) || mkdir -p $(@D)\r\n\t@echo Linking $@\r\n\t@$(CPP) $(CXXFLAGS) $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \\\r\n\t\t$(OUTPUT_DIR)/Core/Gen/Translation.$*.o      \\\r\n\t\t$(OUTPUT_DIR)/Core/LangSupport/lang_single.o \\\r\n\t\t$(LIBS) $(LINKER_FLAGS) -o$@ -Wl,-Map=$@.map\r\n\r\n$(HEXFILE_DIR)/$(model)_string_compressed_%.elf: \\\r\n\t\t$(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP)      \\\r\n\t\t$(OUTPUT_DIR)/Core/Gen/Translation_brieflz.%.o \\\r\n\t\t$(OUTPUT_DIR)/Core/LangSupport/lang_single.o   \\\r\n\t\tMakefile $(LDSCRIPT)\r\n\t@test -d $(@D) || mkdir -p $(@D)\r\n\t@echo Linking $@\r\n\t@$(CPP) $(CXXFLAGS) $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \\\r\n\t\t$(OUTPUT_DIR)/Core/Gen/Translation_brieflz.$*.o \\\r\n\t\t$(OUTPUT_DIR)/Core/LangSupport/lang_single.o    \\\r\n\t\t$(LIBS) $(LINKER_FLAGS) -o$@ -Wl,-Map=$@.map\r\n\r\n$(HEXFILE_DIR)/$(model)_font_compressed_%.elf: \\\r\n\t\t$(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP)           \\\r\n\t\t$(OUTPUT_DIR)/Core/Gen/Translation_brieflz_font.%.o \\\r\n\t\t$(OUTPUT_DIR)/Core/LangSupport/lang_single.o        \\\r\n\t\tMakefile $(LDSCRIPT)\r\n\t@test -d $(@D) || mkdir -p $(@D)\r\n\t@echo Linking $@\r\n\t@$(CPP) $(CXXFLAGS) $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \\\r\n\t\t$(OUTPUT_DIR)/Core/Gen/Translation_brieflz_font.$*.o  \\\r\n\t\t$(OUTPUT_DIR)/Core/LangSupport/lang_single.o          \\\r\n\t\t$(LIBS) $(LINKER_FLAGS) -o$@ -Wl,-Map=$@.map\r\n\r\n$(OUT_OBJS): $(OUTPUT_DIR)/%.o: %.c Makefile\r\n\t@test -d $(@D) || mkdir -p $(@D)\r\n\t@$(CC) -c $(CFLAGS) $< -o $@\r\n\r\n$(OUTPUT_DIR)/%.o: %.cpp Makefile\r\n\t@test -d $(@D) || mkdir -p $(@D)\r\n\t@$(CPP) -c $(CXXFLAGS) $< -o $@\r\n\r\n$(OUT_OBJS_S): $(OUTPUT_DIR)/%.o: %.S Makefile\r\n\t@test -d $(@D) || mkdir -p $(@D)\r\n\t@echo 'Building file: $<'\r\n\t@$(AS) -c $(AFLAGS) $< -o $@\r\n\r\nCore/Gen/Translation.%.cpp $(OUTPUT_DIR)/Core/Gen/translation.files/%.pickle: ../Translations/translation_%.json \\\r\n\t\t../Translations/make_translation.py           \\\r\n\t\t../Translations/translations_definitions.json \\\r\n\t\t../Translations/font_tables.py                \\\r\n\t\tMakefile ../Translations/wqy-bitmapsong/wenquanyi_9pt.bdf \\\r\n\t\tCore/Gen/macros.txt\r\n\t@test -d Core/Gen || mkdir -p Core/Gen\r\n\t@test -d $(OUTPUT_DIR)/Core/Gen/translation.files || mkdir -p $(OUTPUT_DIR)/Core/Gen/translation.files\r\n\t@echo 'Generating translations for language $*'\r\n\t@$(HOST_PYTHON) ../Translations/make_translation.py \\\r\n\t\t--macros \"$(CURDIR)/Core/Gen/macros.txt\"      \\\r\n\t\t-o \"$(CURDIR)/Core/Gen/Translation.$*.cpp\"    \\\r\n\t\t--output-pickled \"$(OUTPUT_DIR)/Core/Gen/translation.files/$*.pickle\" \\\r\n\t\t$*\r\n\r\nCore/Gen/macros.txt: Makefile\r\n\t@test -d \"$(CURDIR)/Core/Gen\" || mkdir -p \"$(CURDIR)/Core/Gen\"\r\n\techo \"#include <configuration.h>\" | $(CC) -dM -E $(CFLAGS) -MF \"$(CURDIR)/Core/Gen/macros.tmp\" - > \"$(CURDIR)/Core/Gen/macros.txt\"\r\n\r\n# The recipes to produce compressed translation data\r\n\r\n$(OUTPUT_DIR)/Core/Gen/translation.files/%.o: Core/Gen/Translation.%.cpp\r\n\t@test -d $(@D) || mkdir -p $(@D)\r\n\t@echo Generating $@\r\n\t@$(CPP) -c $(filter-out -flto=auto ,$(CXXFLAGS)) $< -o $@\r\n\r\n$(OUTPUT_DIR)/Core/Gen/translation.files/multi.%.o: Core/Gen/Translation_multi.%.cpp\r\n\t@test -d $(@D) || mkdir -p $(@D)\r\n\t@echo Generating $@\r\n\t@$(CPP) -c $(filter-out -flto=auto ,$(CXXFLAGS)) $< -o $@\r\n\r\n$(HOST_OUTPUT_DIR)/brieflz/libbrieflz.so: Core/brieflz/brieflz.c Core/brieflz/depack.c\r\n\t@test -d $(@D) || mkdir -p $(@D)\r\n\t@echo Building host brieflz shared library $@\r\n\t@$(HOST_CC) -fPIC -shared -DBLZ_DLL -DBLZ_DLL_EXPORTS -O $^ -o $@\r\n\r\nCore/Gen/Translation_brieflz.%.cpp: $(OUTPUT_DIR)/Core/Gen/translation.files/%.o $(OUTPUT_DIR)/Core/Gen/translation.files/%.pickle $(HOST_OUTPUT_DIR)/brieflz/libbrieflz.so Core/Gen/macros.txt\r\n\t@test -d $(@D) || mkdir -p $(@D)\r\n\t@echo Generating BriefLZ compressed translation for $*\r\n\t@OBJCOPY=$(OBJCOPY) $(HOST_PYTHON) ../Translations/make_translation.py \\\r\n\t\t--macros \"$(CURDIR)/Core/Gen/macros.txt\"           \\\r\n\t\t-o \"$(CURDIR)/Core/Gen/Translation_brieflz.$*.cpp\" \\\r\n\t\t--input-pickled \"$(OUTPUT_DIR)/Core/Gen/translation.files/$*.pickle\" \\\r\n\t\t--strings-obj \"$(OUTPUT_DIR)/Core/Gen/translation.files/$*.o\"        \\\r\n\t\t$*\r\n\r\nCore/Gen/Translation_brieflz_font.%.cpp: $(OUTPUT_DIR)/Core/Gen/translation.files/%.pickle $(HOST_OUTPUT_DIR)/brieflz/libbrieflz.so Core/Gen/macros.txt\r\n\t@test -d $(@D) || mkdir -p $(@D)\r\n\t@echo Generating BriefLZ compressed translation font for $*\r\n\t@$(HOST_PYTHON) ../Translations/make_translation.py        \\\r\n\t\t--macros $(PWD)/Core/Gen/macros.txt                \\\r\n\t\t-o $(PWD)/Core/Gen/Translation_brieflz_font.$*.cpp \\\r\n\t\t--input-pickled $(OUTPUT_DIR)/Core/Gen/translation.files/$*.pickle \\\r\n\t\t--compress-font \\\r\n\t\t$*\r\n\r\n# The recipes to produce multi-language firmwares:\r\n\r\n# Usage: $(eval $(call multi_lang_rule,$(1)=group_code,$(2)=group_name,$(3)=lang_codes))\r\ndefine multi_lang_rule\r\n\r\n$(HEXFILE_DIR)/$(model)_multi_$(2).elf: \\\r\n\t\t$(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP)       \\\r\n\t\t$(OUTPUT_DIR)/Core/Gen/Translation_multi.$(1).o \\\r\n\t\t$(OUTPUT_DIR)/Core/LangSupport/lang_multi.o     \\\r\n\t\tMakefile $(LDSCRIPT)\r\n\t@test -d $$(@D) || mkdir -p $$(@D)\r\n\t@echo Linking $$@\r\n\t@$(CPP) $(CXXFLAGS) $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \\\r\n\t\t$(OUTPUT_DIR)/Core/Gen/Translation_multi.$(1).o       \\\r\n\t\t$(OUTPUT_DIR)/Core/LangSupport/lang_multi.o           \\\r\n\t\t$(LIBS) $(LINKER_FLAGS) -o$$@ -Wl,-Map=$$@.map\r\n\r\n$(HEXFILE_DIR)/$(model)_multi_compressed_$(2).elf: \\\r\n\t\t$(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP)               \\\r\n\t\t$(OUTPUT_DIR)/Core/Gen/Translation_brieflz_multi.$(1).o \\\r\n\t\t$(OUTPUT_DIR)/Core/LangSupport/lang_multi.o             \\\r\n\t\tMakefile $(LDSCRIPT)\r\n\t@test -d $$(@D) || mkdir -p $$(@D)\r\n\t@echo Linking $$@\r\n\t@$(CPP) $(CXXFLAGS) $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP)   \\\r\n\t\t$(OUTPUT_DIR)/Core/Gen/Translation_brieflz_multi.$(1).o \\\r\n\t\t$(OUTPUT_DIR)/Core/LangSupport/lang_multi.o             \\\r\n\t\t$(LIBS) $(LINKER_FLAGS) -o$$@ -Wl,-Map=$$@.map\r\n\r\nCore/Gen/Translation_multi.$(1).cpp: $(patsubst %,../Translations/translation_%.json,$(3)) \\\r\n\t\t../Translations/make_translation.py           \\\r\n\t\t../Translations/translations_definitions.json \\\r\n\t\t../Translations/font_tables.py                \\\r\n\t\tMakefile ../Translations/wqy-bitmapsong/wenquanyi_9pt.bdf \\\r\n\t\tCore/Gen/macros.txt\r\n\t@test -d Core/Gen || mkdir -p Core/Gen\r\n\t@test -d $(OUTPUT_DIR)/Core/Gen/translation.files || mkdir -p $(OUTPUT_DIR)/Core/Gen/translation.files\r\n\t@echo 'Generating translations for multi-language $(2)'\r\n\t@$(HOST_PYTHON) ../Translations/make_translation.py   \\\r\n\t\t--macros \"$(CURDIR)/Core/Gen/macros.txt\"           \\\r\n\t\t-o \"$(CURDIR)/Core/Gen/Translation_multi.$(1).cpp\" \\\r\n\t\t--output-pickled \"$(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).pickle\" \\\r\n\t\t$(3)\r\n\r\n$(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).pickle: Core/Gen/Translation_multi.$(1).cpp\r\n\r\nCore/Gen/Translation_brieflz_multi.$(1).cpp: $(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).o $(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).pickle $(HOST_OUTPUT_DIR)/brieflz/libbrieflz.so Core/Gen/macros.txt\r\n\t@test -d $$(@D) || mkdir -p $$(@D)\r\n\t@echo Generating BriefLZ compressed translation for multi-language $(2)\r\n\t@OBJCOPY=$(OBJCOPY) $(HOST_PYTHON) ../Translations/make_translation.py \\\r\n\t\t--macros \"$(CURDIR)/Core/Gen/macros.txt\"                   \\\r\n\t\t-o \"$(CURDIR)/Core/Gen/Translation_brieflz_multi.$(1).cpp\" \\\r\n\t\t--input-pickled \"$(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).pickle\" \\\r\n\t\t--strings-obj \"$(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).o\"        \\\r\n\t\t--compress-font \\\r\n\t\t$(3)\r\n\r\nendef # multi_lang_rule\r\n\r\n# Add multi-language firmware rules:\r\n$(foreach group_code,$(LANGUAGE_GROUPS),$(eval $(call multi_lang_rule,$(group_code),$(LANGUAGE_GROUP_$(group_code)_NAME),$(LANGUAGE_GROUP_$(group_code)_LANGS))))\r\n\r\n# Clean up targets\r\n\r\nclean:\r\n\trm -Rf Core/Gen\r\n\trm -Rf $(OUTPUT_DIR_BASE)\r\n\trm -Rf $(HEXFILE_DIR)/*\r\n\trm -Rf ../Translations/__pycache__\r\n\r\nclean-all: clean\r\n\trm -Rf $(HEXFILE_DIR)\r\n\r\n# Style formatting helper targets\r\n\r\n# Overwrite source files in your local repo copy according to IronOS code style rules (source/.clang-format) WITHOUT A WARNING!\r\n# Use `git diff` or your favorite diff tool via `git difftool` before commit to make sure there are no false-negative changes.\r\n# If so, report an issue, please.\r\nstyle:\r\n\t@for src in $(ALL_SOURCE) $(ALL_INCLUDES); do echo \"Formatting $$src\" ; clang-format -i \"$$src\" ; done;\r\n\t@echo \"Done! Please, check the changes before commit.\"\r\n\r\n# Code style checks using clang-format:\r\n# - show output in gcc-like error compatible format for IDEs/editors;\r\n# - external variables for debug purposes (can be used at the same time, i.e. STOP=1 LIST=1 ...):\r\n#   * call `make check-style STOP=1` to exit after first failed file;\r\n#   * call `make check-style LIST=1` to show failed file names only;\r\n# - here we process only list of files;\r\n# - per-file check happens in scripts/deploy.sh : check_style_file - since shell commands involved, the check logic moved to shell script for better maintainance outside of makefile syntax crossing.\r\n# - $? / error / STOP conditional logic needed to:\r\n#   * check errors in formatting from deploy.sh\r\n#   * process STOP env variable\r\ncheck-style:\r\n\t@error=0; export LIST=$$LIST; for src in $(ALL_SOURCE) $(ALL_INCLUDES) ; do \\\r\n\t\t../scripts/deploy.sh  check_style_file  \"$$src\" ; \\\r\n\t\ttest \"$${?}\" -eq 1 && export error=1 ; \\\r\n\t\ttest \"$${error}\" -eq 1 && test -n \"$${STOP}\" && break; \\\r\n\tdone; \\\r\n\tif [ $$error -eq 0 ] ; then  echo \"\" && echo \"\" && echo \"Style check: PASS\" && echo \"\" && echo \"\" && exit 0 ; \\\r\n\telse  echo \"\" && echo \"\" && echo \"Style check: FAIL! Please, check the log above for the details.\" && echo \"If there is a false-negative trigger, please, report an issue attaching the log or link to the log!\" && echo \"\" && echo \"\" && exit 1 ; \\\r\n\tfi;\r\n\r\n.PHONY: style  check-style  all  clean  default  clean-all\r\n.SECONDARY:\r\n\r\n# Pull in dependency info for *existing* .o files\r\n-include $(OUT_OBJS:.o=.d)\r\n-include $(OUT_OBJS_CPP:.o=.d)\r\n-include $(OUTPUT_DIR)/Core/Gen/Translation.*.d\r\n-include $(OUTPUT_DIR)/Core/Gen/Translation_*.d\r\n-include $(OUTPUT_DIR)/Core/Gen/translation.files/*.d\r\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.c",
    "content": "/* ----------------------------------------------------------------------\r\n * $Date:        5. February 2013\r\n * $Revision:    V1.02\r\n *\r\n * Project:      CMSIS-RTOS API\r\n * Title:        cmsis_os.c\r\n *\r\n * Version 0.02\r\n *    Initial Proposal Phase\r\n * Version 0.03\r\n *    osKernelStart added, optional feature: main started as thread\r\n *    osSemaphores have standard behavior\r\n *    osTimerCreate does not start the timer, added osTimerStart\r\n *    osThreadPass is renamed to osThreadYield\r\n * Version 1.01\r\n *    Support for C++ interface\r\n *     - const attribute removed from the osXxxxDef_t typedef's\r\n *     - const attribute added to the osXxxxDef macros\r\n *    Added: osTimerDelete, osMutexDelete, osSemaphoreDelete\r\n *    Added: osKernelInitialize\r\n * Version 1.02\r\n *    Control functions for short timeouts in microsecond resolution:\r\n *    Added: osKernelSysTick, osKernelSysTickFrequency, osKernelSysTickMicroSec\r\n *    Removed: osSignalGet\r\n *\r\n *\r\n *----------------------------------------------------------------------------\r\n *\r\n * Portions Copyright � 2016 STMicroelectronics International N.V. All rights reserved.\r\n * Portions Copyright (c) 2013 ARM LIMITED\r\n * All rights reserved.\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *  - Redistributions of source code must retain the above copyright\r\n *    notice, this list of conditions and the following disclaimer.\r\n *  - Redistributions in binary form must reproduce the above copyright\r\n *    notice, this list of conditions and the following disclaimer in the\r\n *    documentation and/or other materials provided with the distribution.\r\n *  - Neither the name of ARM  nor the names of its contributors may be used\r\n *    to endorse or promote products derived from this software without\r\n *    specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n *---------------------------------------------------------------------------*/\r\n\r\n/**\r\n ******************************************************************************\r\n * @file    cmsis_os.c\r\n * @author  MCD Application Team\r\n * @date    03-March-2017\r\n * @brief   CMSIS-RTOS API implementation for FreeRTOS V9.0.0\r\n ******************************************************************************\r\n * @attention\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted, provided that the following conditions are met:\r\n *\r\n * 1. Redistribution of source code must retain the above copyright notice,\r\n *    this list of conditions and the following disclaimer.\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n *    this list of conditions and the following disclaimer in the documentation\r\n *    and/or other materials provided with the distribution.\r\n * 3. Neither the name of STMicroelectronics nor the names of other\r\n *    contributors to this software may be used to endorse or promote products\r\n *    derived from this software without specific written permission.\r\n * 4. This software, including modifications and/or derivative works of this\r\n *    software, must execute solely and exclusively on microcontroller or\r\n *    microprocessor devices manufactured by or for STMicroelectronics.\r\n * 5. Redistribution and use of this software other than as permitted under\r\n *    this license is void and will automatically terminate your rights under\r\n *    this license.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT\r\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\r\n * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY\r\n * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT\r\n * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r\n * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r\n * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r\n * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n ******************************************************************************\r\n */\r\n\r\n#include \"cmsis_os.h\"\r\n#include \"portmacro.h\"\r\n#include <string.h>\r\n\r\n/*\r\n * ARM Compiler 4/5\r\n */\r\n#if defined(__CC_ARM)\r\n\r\n#define __ASM           __asm\r\n#define __INLINE        __inline\r\n#define __STATIC_INLINE static __inline\r\n#include \"cmsis_armcc.h\"\r\n\r\n/*\r\n * GNU Compiler\r\n */\r\n#elif defined(__GNUC__)\r\n\r\n#define __ASM           __asm  /*!< asm keyword for GNU Compiler          */\r\n#define __INLINE        inline /*!< inline keyword for GNU Compiler       */\r\n#define __STATIC_INLINE static inline\r\nuint32_t __get_IPSR(void);\r\n// #include \"cmsis_gcc.h\"\r\n\r\n/*\r\n * IAR Compiler\r\n */\r\n#elif defined(__ICCARM__)\r\n\r\n#ifndef __ASM\r\n#define __ASM __asm\r\n#endif\r\n#ifndef __INLINE\r\n#define __INLINE inline\r\n#endif\r\n#ifndef __STATIC_INLINE\r\n#define __STATIC_INLINE static inline\r\n#endif\r\n\r\n#include <cmsis_iar.h>\r\n#endif\r\n\r\nextern void xPortSysTickHandler(void);\r\n\r\n/* Convert from CMSIS type osPriority to FreeRTOS priority number */\r\nstatic unsigned portBASE_TYPE makeFreeRtosPriority(osPriority priority) {\r\n  unsigned portBASE_TYPE fpriority = tskIDLE_PRIORITY;\r\n\r\n  if (priority != osPriorityError) {\r\n    fpriority += (priority - osPriorityIdle);\r\n  }\r\n\r\n  return fpriority;\r\n}\r\n\r\n#if (INCLUDE_uxTaskPriorityGet == 1)\r\n/* Convert from FreeRTOS priority number to CMSIS type osPriority */\r\nstatic osPriority makeCmsisPriority(unsigned portBASE_TYPE fpriority) {\r\n  osPriority priority = osPriorityError;\r\n\r\n  if ((fpriority - tskIDLE_PRIORITY) <= (osPriorityRealtime - osPriorityIdle)) {\r\n    priority = (osPriority)((int)osPriorityIdle + (int)(fpriority - tskIDLE_PRIORITY));\r\n  }\r\n\r\n  return priority;\r\n}\r\n#endif\r\n\r\n/* Determine whether we are in thread mode or handler mode. */\r\nstatic int inHandlerMode(void) { return __get_IPSR() != 0; }\r\n\r\n/*********************** Kernel Control Functions *****************************/\r\n/**\r\n * @brief  Initialize the RTOS Kernel for creating objects.\r\n * @retval status code that indicates the execution status of the function.\r\n * @note   MUST REMAIN UNCHANGED: \\b osKernelInitialize shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osKernelInitialize(void);\r\n\r\n/**\r\n * @brief  Start the RTOS Kernel with executing the specified thread.\r\n * @param  thread_def    thread definition referenced with \\ref osThread.\r\n * @param  argument      pointer that is passed to the thread function as start argument.\r\n * @retval status code that indicates the execution status of the function\r\n * @note   MUST REMAIN UNCHANGED: \\b osKernelStart shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osKernelStart(void) {\r\n  vTaskStartScheduler();\r\n\r\n  return osOK;\r\n}\r\n\r\n/**\r\n * @brief  Check if the RTOS kernel is already started\r\n * @param  None\r\n * @retval (0) RTOS is not started\r\n *         (1) RTOS is started\r\n *         (-1) if this feature is disabled in FreeRTOSConfig.h\r\n * @note  MUST REMAIN UNCHANGED: \\b osKernelRunning shall be consistent in every CMSIS-RTOS.\r\n */\r\nint32_t osKernelRunning(void) {\r\n#if ((INCLUDE_xTaskGetSchedulerState == 1) || (configUSE_TIMERS == 1))\r\n  if (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED)\r\n    return 0;\r\n  else\r\n    return 1;\r\n#else\r\n  return (-1);\r\n#endif\r\n}\r\n\r\n#if (defined(osFeature_SysTick) && (osFeature_SysTick != 0)) // System Timer available\r\n/**\r\n * @brief  Get the value of the Kernel SysTick timer\r\n * @param  None\r\n * @retval None\r\n * @note   MUST REMAIN UNCHANGED: \\b osKernelSysTick shall be consistent in every CMSIS-RTOS.\r\n */\r\nuint32_t osKernelSysTick(void) {\r\n  if (inHandlerMode()) {\r\n    return xTaskGetTickCountFromISR();\r\n  } else {\r\n    return xTaskGetTickCount();\r\n  }\r\n}\r\n#endif // System Timer available\r\n/*********************** Thread Management *****************************/\r\n/**\r\n * @brief  Create a thread and add it to Active Threads and set it to state READY.\r\n * @param  thread_def    thread definition referenced with \\ref osThread.\r\n * @param  argument      pointer that is passed to the thread function as start argument.\r\n * @retval thread ID for reference by other functions or NULL in case of error.\r\n * @note   MUST REMAIN UNCHANGED: \\b osThreadCreate shall be consistent in every CMSIS-RTOS.\r\n */\r\nosThreadId osThreadCreate(const osThreadDef_t *thread_def, void *argument) {\r\n  TaskHandle_t handle;\r\n\r\n#if (configSUPPORT_STATIC_ALLOCATION == 1) && (configSUPPORT_DYNAMIC_ALLOCATION == 1)\r\n  if ((thread_def->buffer != NULL) && (thread_def->controlblock != NULL)) {\r\n    handle = xTaskCreateStatic((TaskFunction_t)thread_def->pthread, (const portCHAR *)thread_def->name, thread_def->stacksize, argument, makeFreeRtosPriority(thread_def->tpriority),\r\n                               thread_def->buffer, thread_def->controlblock);\r\n  } else {\r\n    if (xTaskCreate((TaskFunction_t)thread_def->pthread, (const portCHAR *)thread_def->name, thread_def->stacksize, argument, makeFreeRtosPriority(thread_def->tpriority), &handle) != pdPASS) {\r\n      return NULL;\r\n    }\r\n  }\r\n#elif (configSUPPORT_STATIC_ALLOCATION == 1)\r\n\r\n  handle = xTaskCreateStatic((TaskFunction_t)thread_def->pthread, (const portCHAR *)thread_def->name, thread_def->stacksize, argument, makeFreeRtosPriority(thread_def->tpriority), thread_def->buffer,\r\n                             thread_def->controlblock);\r\n#else\r\n  if (xTaskCreate((TaskFunction_t)thread_def->pthread, (const portCHAR *)thread_def->name, thread_def->stacksize, argument, makeFreeRtosPriority(thread_def->tpriority), &handle) != pdPASS) {\r\n    return NULL;\r\n  }\r\n#endif\r\n\r\n  return handle;\r\n}\r\n\r\n/**\r\n * @brief  Return the thread ID of the current running thread.\r\n * @retval thread ID for reference by other functions or NULL in case of error.\r\n * @note   MUST REMAIN UNCHANGED: \\b osThreadGetId shall be consistent in every CMSIS-RTOS.\r\n */\r\nosThreadId osThreadGetId(void) {\r\n#if ((INCLUDE_xTaskGetCurrentTaskHandle == 1) || (configUSE_MUTEXES == 1))\r\n  return xTaskGetCurrentTaskHandle();\r\n#else\r\n  return NULL;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief  Terminate execution of a thread and remove it from Active Threads.\r\n * @param   thread_id   thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId.\r\n * @retval  status code that indicates the execution status of the function.\r\n * @note   MUST REMAIN UNCHANGED: \\b osThreadTerminate shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osThreadTerminate(osThreadId thread_id) {\r\n#if (INCLUDE_vTaskDelete == 1)\r\n  vTaskDelete(thread_id);\r\n  return osOK;\r\n#else\r\n  return osErrorOS;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief  Pass control to next thread that is in state \\b READY.\r\n * @retval status code that indicates the execution status of the function.\r\n * @note   MUST REMAIN UNCHANGED: \\b osThreadYield shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osThreadYield(void) {\r\n  taskYIELD();\r\n\r\n  return osOK;\r\n}\r\n\r\n/**\r\n * @brief   Change priority of an active thread.\r\n * @param   thread_id     thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId.\r\n * @param   priority      new priority value for the thread function.\r\n * @retval  status code that indicates the execution status of the function.\r\n * @note   MUST REMAIN UNCHANGED: \\b osThreadSetPriority shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osThreadSetPriority(osThreadId thread_id, osPriority priority) {\r\n#if (INCLUDE_vTaskPrioritySet == 1)\r\n  vTaskPrioritySet(thread_id, makeFreeRtosPriority(priority));\r\n  return osOK;\r\n#else\r\n  return osErrorOS;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief   Get current priority of an active thread.\r\n * @param   thread_id     thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId.\r\n * @retval  current priority value of the thread function.\r\n * @note   MUST REMAIN UNCHANGED: \\b osThreadGetPriority shall be consistent in every CMSIS-RTOS.\r\n */\r\nosPriority osThreadGetPriority(osThreadId thread_id) {\r\n#if (INCLUDE_uxTaskPriorityGet == 1)\r\n  if (inHandlerMode()) {\r\n    return makeCmsisPriority(uxTaskPriorityGetFromISR(thread_id));\r\n  } else {\r\n    return makeCmsisPriority(uxTaskPriorityGet(thread_id));\r\n  }\r\n#else\r\n  return osPriorityError;\r\n#endif\r\n}\r\n\r\n/*********************** Generic Wait Functions *******************************/\r\n/**\r\n * @brief   Wait for Timeout (Time Delay)\r\n * @param   millisec      time delay value\r\n * @retval  status code that indicates the execution status of the function.\r\n */\r\nosStatus osDelay(uint32_t millisec) {\r\n#if INCLUDE_vTaskDelay\r\n  TickType_t ticks = millisec / portTICK_PERIOD_MS;\r\n\r\n  vTaskDelay(ticks ? ticks : 1); /* Minimum delay = 1 tick */\r\n\r\n  return osOK;\r\n#else\r\n  (void)millisec;\r\n\r\n  return osErrorResource;\r\n#endif\r\n}\r\n\r\n#if (defined(osFeature_Wait) && (osFeature_Wait != 0)) /* Generic Wait available */\r\n/**\r\n * @brief  Wait for Signal, Message, Mail, or Timeout\r\n * @param   millisec  timeout value or 0 in case of no time-out\r\n * @retval  event that contains signal, message, or mail information or error code.\r\n * @note   MUST REMAIN UNCHANGED: \\b osWait shall be consistent in every CMSIS-RTOS.\r\n */\r\nosEvent osWait(uint32_t millisec);\r\n\r\n#endif /* Generic Wait available */\r\n\r\n/***********************  Timer Management Functions ***************************/\r\n/**\r\n * @brief  Create a timer.\r\n * @param  timer_def     timer object referenced with \\ref osTimer.\r\n * @param  type          osTimerOnce for one-shot or osTimerPeriodic for periodic behavior.\r\n * @param  argument      argument to the timer call back function.\r\n * @retval  timer ID for reference by other functions or NULL in case of error.\r\n * @note   MUST REMAIN UNCHANGED: \\b osTimerCreate shall be consistent in every CMSIS-RTOS.\r\n */\r\nosTimerId osTimerCreate(const osTimerDef_t *timer_def, os_timer_type type, void *argument) {\r\n#if (configUSE_TIMERS == 1)\r\n\r\n#if ((configSUPPORT_STATIC_ALLOCATION == 1) && (configSUPPORT_DYNAMIC_ALLOCATION == 1))\r\n  if (timer_def->controlblock != NULL) {\r\n    return xTimerCreateStatic((const char *)\"\",\r\n                              1, // period should be filled when starting the Timer using osTimerStart\r\n                              (type == osTimerPeriodic) ? pdTRUE : pdFALSE, (void *)argument, (TaskFunction_t)timer_def->ptimer, (StaticTimer_t *)timer_def->controlblock);\r\n  } else {\r\n    return xTimerCreate((const char *)\"\",\r\n                        1, // period should be filled when starting the Timer using osTimerStart\r\n                        (type == osTimerPeriodic) ? pdTRUE : pdFALSE, (void *)argument, (TaskFunction_t)timer_def->ptimer);\r\n  }\r\n#elif (configSUPPORT_STATIC_ALLOCATION == 1)\r\n  return xTimerCreateStatic((const char *)\"\",\r\n                            1, // period should be filled when starting the Timer using osTimerStart\r\n                            (type == osTimerPeriodic) ? pdTRUE : pdFALSE, (void *)argument, (TaskFunction_t)timer_def->ptimer, (StaticTimer_t *)timer_def->controlblock);\r\n#else\r\n  return xTimerCreate((const char *)\"\",\r\n                      1, // period should be filled when starting the Timer using osTimerStart\r\n                      (type == osTimerPeriodic) ? pdTRUE : pdFALSE, (void *)argument, (TaskFunction_t)timer_def->ptimer);\r\n#endif\r\n\r\n#else\r\n  return NULL;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief  Start or restart a timer.\r\n * @param  timer_id      timer ID obtained by \\ref osTimerCreate.\r\n * @param  millisec      time delay value of the timer.\r\n * @retval  status code that indicates the execution status of the function\r\n * @note   MUST REMAIN UNCHANGED: \\b osTimerStart shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osTimerStart(osTimerId timer_id, uint32_t millisec) {\r\n  osStatus result = osOK;\r\n#if (configUSE_TIMERS == 1)\r\n  portBASE_TYPE taskWoken = pdFALSE;\r\n  TickType_t    ticks     = millisec / portTICK_PERIOD_MS;\r\n\r\n  if (ticks == 0)\r\n    ticks = 1;\r\n\r\n  if (inHandlerMode()) {\r\n    if (xTimerChangePeriodFromISR(timer_id, ticks, &taskWoken) != pdPASS) {\r\n      result = osErrorOS;\r\n    } else {\r\n      portEND_SWITCHING_ISR(taskWoken);\r\n    }\r\n  } else {\r\n    if (xTimerChangePeriod(timer_id, ticks, 0) != pdPASS)\r\n      result = osErrorOS;\r\n  }\r\n\r\n#else\r\n  result = osErrorOS;\r\n#endif\r\n  return result;\r\n}\r\n\r\n/**\r\n * @brief  Stop a timer.\r\n * @param  timer_id      timer ID obtained by \\ref osTimerCreate\r\n * @retval  status code that indicates the execution status of the function.\r\n * @note   MUST REMAIN UNCHANGED: \\b osTimerStop shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osTimerStop(osTimerId timer_id) {\r\n  osStatus result = osOK;\r\n#if (configUSE_TIMERS == 1)\r\n  portBASE_TYPE taskWoken = pdFALSE;\r\n\r\n  if (inHandlerMode()) {\r\n    if (xTimerStopFromISR(timer_id, &taskWoken) != pdPASS) {\r\n      return osErrorOS;\r\n    }\r\n    portEND_SWITCHING_ISR(taskWoken);\r\n  } else {\r\n    if (xTimerStop(timer_id, 0) != pdPASS) {\r\n      result = osErrorOS;\r\n    }\r\n  }\r\n#else\r\n  result = osErrorOS;\r\n#endif\r\n  return result;\r\n}\r\n\r\n/**\r\n * @brief  Delete a timer.\r\n * @param  timer_id      timer ID obtained by \\ref osTimerCreate\r\n * @retval  status code that indicates the execution status of the function.\r\n * @note   MUST REMAIN UNCHANGED: \\b osTimerDelete shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osTimerDelete(osTimerId timer_id) {\r\n  osStatus result = osOK;\r\n\r\n#if (configUSE_TIMERS == 1)\r\n\r\n  if (inHandlerMode()) {\r\n    return osErrorISR;\r\n  } else {\r\n    if ((xTimerDelete(timer_id, osWaitForever)) != pdPASS) {\r\n      result = osErrorOS;\r\n    }\r\n  }\r\n\r\n#else\r\n  result = osErrorOS;\r\n#endif\r\n\r\n  return result;\r\n}\r\n\r\n/****************************  Mutex Management ********************************/\r\n/**\r\n * @brief  Create and Initialize a Mutex object\r\n * @param  mutex_def     mutex definition referenced with \\ref osMutex.\r\n * @retval  mutex ID for reference by other functions or NULL in case of error.\r\n * @note   MUST REMAIN UNCHANGED: \\b osMutexCreate shall be consistent in every CMSIS-RTOS.\r\n */\r\nosMutexId osMutexCreate(const osMutexDef_t *mutex_def) {\r\n#if (configUSE_MUTEXES == 1)\r\n\r\n#if (configSUPPORT_STATIC_ALLOCATION == 1) && (configSUPPORT_DYNAMIC_ALLOCATION == 1)\r\n\r\n  if (mutex_def->controlblock != NULL) {\r\n    return xSemaphoreCreateMutexStatic(mutex_def->controlblock);\r\n  } else {\r\n    return xSemaphoreCreateMutex();\r\n  }\r\n#elif (configSUPPORT_STATIC_ALLOCATION == 1)\r\n  return xSemaphoreCreateMutexStatic(mutex_def->controlblock);\r\n#else\r\n  return xSemaphoreCreateMutex();\r\n#endif\r\n#else\r\n  return NULL;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief Wait until a Mutex becomes available\r\n * @param mutex_id      mutex ID obtained by \\ref osMutexCreate.\r\n * @param millisec      timeout value or 0 in case of no time-out.\r\n * @retval  status code that indicates the execution status of the function.\r\n * @note   MUST REMAIN UNCHANGED: \\b osMutexWait shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osMutexWait(osMutexId mutex_id, uint32_t millisec) {\r\n  TickType_t    ticks;\r\n  portBASE_TYPE taskWoken = pdFALSE;\r\n\r\n  if (mutex_id == NULL) {\r\n    return osErrorParameter;\r\n  }\r\n\r\n  ticks = 0;\r\n  if (millisec == osWaitForever) {\r\n    ticks = portMAX_DELAY;\r\n  } else if (millisec != 0) {\r\n    ticks = millisec / portTICK_PERIOD_MS;\r\n    if (ticks == 0) {\r\n      ticks = 1;\r\n    }\r\n  }\r\n\r\n  if (inHandlerMode()) {\r\n    if (xSemaphoreTakeFromISR(mutex_id, &taskWoken) != pdTRUE) {\r\n      return osErrorOS;\r\n    }\r\n    portEND_SWITCHING_ISR(taskWoken);\r\n  } else if (xSemaphoreTake(mutex_id, ticks) != pdTRUE) {\r\n    return osErrorOS;\r\n  }\r\n\r\n  return osOK;\r\n}\r\n\r\n/**\r\n * @brief Release a Mutex that was obtained by \\ref osMutexWait\r\n * @param mutex_id      mutex ID obtained by \\ref osMutexCreate.\r\n * @retval  status code that indicates the execution status of the function.\r\n * @note   MUST REMAIN UNCHANGED: \\b osMutexRelease shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osMutexRelease(osMutexId mutex_id) {\r\n  osStatus      result    = osOK;\r\n  portBASE_TYPE taskWoken = pdFALSE;\r\n\r\n  if (inHandlerMode()) {\r\n    if (xSemaphoreGiveFromISR(mutex_id, &taskWoken) != pdTRUE) {\r\n      return osErrorOS;\r\n    }\r\n    portEND_SWITCHING_ISR(taskWoken);\r\n  } else if (xSemaphoreGive(mutex_id) != pdTRUE) {\r\n    result = osErrorOS;\r\n  }\r\n  return result;\r\n}\r\n\r\n/**\r\n * @brief Delete a Mutex\r\n * @param mutex_id  mutex ID obtained by \\ref osMutexCreate.\r\n * @retval  status code that indicates the execution status of the function.\r\n * @note   MUST REMAIN UNCHANGED: \\b osMutexDelete shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osMutexDelete(osMutexId mutex_id) {\r\n  if (inHandlerMode()) {\r\n    return osErrorISR;\r\n  }\r\n\r\n  vQueueDelete(mutex_id);\r\n\r\n  return osOK;\r\n}\r\n\r\n/********************  Semaphore Management Functions **************************/\r\n\r\n#if (defined(osFeature_Semaphore) && (osFeature_Semaphore != 0))\r\n\r\n/**\r\n * @brief Create and Initialize a Semaphore object used for managing resources\r\n * @param semaphore_def semaphore definition referenced with \\ref osSemaphore.\r\n * @param count         number of available resources.\r\n * @retval  semaphore ID for reference by other functions or NULL in case of error.\r\n * @note   MUST REMAIN UNCHANGED: \\b osSemaphoreCreate shall be consistent in every CMSIS-RTOS.\r\n */\r\nosSemaphoreId osSemaphoreCreate(const osSemaphoreDef_t *semaphore_def, int32_t count) {\r\n#if (configSUPPORT_STATIC_ALLOCATION == 1) && (configSUPPORT_DYNAMIC_ALLOCATION == 1)\r\n\r\n  osSemaphoreId sema;\r\n\r\n  if (semaphore_def->controlblock != NULL) {\r\n    if (count == 1) {\r\n      return xSemaphoreCreateBinaryStatic(semaphore_def->controlblock);\r\n    } else {\r\n#if (configUSE_COUNTING_SEMAPHORES == 1)\r\n      return xSemaphoreCreateCountingStatic(count, count, semaphore_def->controlblock);\r\n#else\r\n      return NULL;\r\n#endif\r\n    }\r\n  } else {\r\n    if (count == 1) {\r\n      vSemaphoreCreateBinary(sema);\r\n      return sema;\r\n    } else {\r\n#if (configUSE_COUNTING_SEMAPHORES == 1)\r\n      return xSemaphoreCreateCounting(count, count);\r\n#else\r\n      return NULL;\r\n#endif\r\n    }\r\n  }\r\n#elif (configSUPPORT_STATIC_ALLOCATION == 1) // configSUPPORT_DYNAMIC_ALLOCATION == 0\r\n  if (count == 1) {\r\n    return xSemaphoreCreateBinaryStatic(semaphore_def->controlblock);\r\n  } else {\r\n#if (configUSE_COUNTING_SEMAPHORES == 1)\r\n    return xSemaphoreCreateCountingStatic(count, count, semaphore_def->controlblock);\r\n#else\r\n    return NULL;\r\n#endif\r\n  }\r\n#else // configSUPPORT_STATIC_ALLOCATION == 0  && configSUPPORT_DYNAMIC_ALLOCATION == 1\r\n  osSemaphoreId sema;\r\n\r\n  if (count == 1) {\r\n    vSemaphoreCreateBinary(sema);\r\n    return sema;\r\n  } else {\r\n#if (configUSE_COUNTING_SEMAPHORES == 1)\r\n    return xSemaphoreCreateCounting(count, count);\r\n#else\r\n    return NULL;\r\n#endif\r\n  }\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief Wait until a Semaphore token becomes available\r\n * @param  semaphore_id  semaphore object referenced with \\ref osSemaphore.\r\n * @param  millisec      timeout value or 0 in case of no time-out.\r\n * @retval  number of available tokens, or -1 in case of incorrect parameters.\r\n * @note   MUST REMAIN UNCHANGED: \\b osSemaphoreWait shall be consistent in every CMSIS-RTOS.\r\n */\r\nint32_t osSemaphoreWait(osSemaphoreId semaphore_id, uint32_t millisec) {\r\n  TickType_t    ticks;\r\n  portBASE_TYPE taskWoken = pdFALSE;\r\n\r\n  if (semaphore_id == NULL) {\r\n    return osErrorParameter;\r\n  }\r\n\r\n  ticks = 0;\r\n  if (millisec == osWaitForever) {\r\n    ticks = portMAX_DELAY;\r\n  } else if (millisec != 0) {\r\n    ticks = millisec / portTICK_PERIOD_MS;\r\n    if (ticks == 0) {\r\n      ticks = 1;\r\n    }\r\n  }\r\n\r\n  if (inHandlerMode()) {\r\n    if (xSemaphoreTakeFromISR(semaphore_id, &taskWoken) != pdTRUE) {\r\n      return osErrorOS;\r\n    }\r\n    portEND_SWITCHING_ISR(taskWoken);\r\n  } else if (xSemaphoreTake(semaphore_id, ticks) != pdTRUE) {\r\n    return osErrorOS;\r\n  }\r\n\r\n  return osOK;\r\n}\r\n\r\n/**\r\n * @brief Release a Semaphore token\r\n * @param  semaphore_id  semaphore object referenced with \\ref osSemaphore.\r\n * @retval  status code that indicates the execution status of the function.\r\n * @note   MUST REMAIN UNCHANGED: \\b osSemaphoreRelease shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osSemaphoreRelease(osSemaphoreId semaphore_id) {\r\n  osStatus      result    = osOK;\r\n  portBASE_TYPE taskWoken = pdFALSE;\r\n\r\n  if (inHandlerMode()) {\r\n    if (xSemaphoreGiveFromISR(semaphore_id, &taskWoken) != pdTRUE) {\r\n      return osErrorOS;\r\n    }\r\n    portEND_SWITCHING_ISR(taskWoken);\r\n  } else {\r\n    if (xSemaphoreGive(semaphore_id) != pdTRUE) {\r\n      result = osErrorOS;\r\n    }\r\n  }\r\n\r\n  return result;\r\n}\r\n\r\n/**\r\n * @brief Delete a Semaphore\r\n * @param  semaphore_id  semaphore object referenced with \\ref osSemaphore.\r\n * @retval  status code that indicates the execution status of the function.\r\n * @note   MUST REMAIN UNCHANGED: \\b osSemaphoreDelete shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osSemaphoreDelete(osSemaphoreId semaphore_id) {\r\n  if (inHandlerMode()) {\r\n    return osErrorISR;\r\n  }\r\n\r\n  vSemaphoreDelete(semaphore_id);\r\n\r\n  return osOK;\r\n}\r\n\r\n#endif /* Use Semaphores */\r\n\r\n/*******************   Memory Pool Management Functions  ***********************/\r\n\r\n#if (defined(osFeature_Pool) && (osFeature_Pool != 0))\r\n\r\n// TODO\r\n// This is a primitive and inefficient wrapper around the existing FreeRTOS memory management.\r\n// A better implementation will have to modify heap_x.c!\r\n\r\ntypedef struct os_pool_cb {\r\n  void    *pool;\r\n  uint8_t *markers;\r\n  uint32_t pool_sz;\r\n  uint32_t item_sz;\r\n  uint32_t currentIndex;\r\n} os_pool_cb_t;\r\n\r\n/**\r\n * @brief Create and Initialize a memory pool\r\n * @param  pool_def      memory pool definition referenced with \\ref osPool.\r\n * @retval  memory pool ID for reference by other functions or NULL in case of error.\r\n * @note   MUST REMAIN UNCHANGED: \\b osPoolCreate shall be consistent in every CMSIS-RTOS.\r\n */\r\nosPoolId osPoolCreate(const osPoolDef_t *pool_def) {\r\n#if (configSUPPORT_DYNAMIC_ALLOCATION == 1)\r\n  osPoolId thePool;\r\n  int      itemSize = 4 * ((pool_def->item_sz + 3) / 4);\r\n  uint32_t i;\r\n\r\n  /* First have to allocate memory for the pool control block. */\r\n  thePool = pvPortMalloc(sizeof(os_pool_cb_t));\r\n\r\n  if (thePool) {\r\n    thePool->pool_sz      = pool_def->pool_sz;\r\n    thePool->item_sz      = itemSize;\r\n    thePool->currentIndex = 0;\r\n\r\n    /* Memory for markers */\r\n    thePool->markers = pvPortMalloc(pool_def->pool_sz);\r\n\r\n    if (thePool->markers) {\r\n      /* Now allocate the pool itself. */\r\n      thePool->pool = pvPortMalloc(pool_def->pool_sz * itemSize);\r\n\r\n      if (thePool->pool) {\r\n        for (i = 0; i < pool_def->pool_sz; i++) {\r\n          thePool->markers[i] = 0;\r\n        }\r\n      } else {\r\n        vPortFree(thePool->markers);\r\n        vPortFree(thePool);\r\n        thePool = NULL;\r\n      }\r\n    } else {\r\n      vPortFree(thePool);\r\n      thePool = NULL;\r\n    }\r\n  }\r\n\r\n  return thePool;\r\n\r\n#else\r\n  return NULL;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief Allocate a memory block from a memory pool\r\n * @param pool_id       memory pool ID obtain referenced with \\ref osPoolCreate.\r\n * @retval  address of the allocated memory block or NULL in case of no memory available.\r\n * @note   MUST REMAIN UNCHANGED: \\b osPoolAlloc shall be consistent in every CMSIS-RTOS.\r\n */\r\nvoid *osPoolAlloc(osPoolId pool_id) {\r\n  int      dummy = 0;\r\n  void    *p     = NULL;\r\n  uint32_t i;\r\n  uint32_t index;\r\n\r\n  if (inHandlerMode()) {\r\n    dummy = portSET_INTERRUPT_MASK_FROM_ISR();\r\n  } else {\r\n    vPortEnterCritical();\r\n  }\r\n\r\n  for (i = 0; i < pool_id->pool_sz; i++) {\r\n    index = pool_id->currentIndex + i;\r\n    if (index >= pool_id->pool_sz) {\r\n      index = 0;\r\n    }\r\n\r\n    if (pool_id->markers[index] == 0) {\r\n      pool_id->markers[index] = 1;\r\n      p                       = (void *)((uint32_t)(pool_id->pool) + (index * pool_id->item_sz));\r\n      pool_id->currentIndex   = index;\r\n      break;\r\n    }\r\n  }\r\n\r\n  if (inHandlerMode()) {\r\n    portCLEAR_INTERRUPT_MASK_FROM_ISR(dummy);\r\n  } else {\r\n    vPortExitCritical();\r\n  }\r\n\r\n  return p;\r\n}\r\n\r\n/**\r\n * @brief Allocate a memory block from a memory pool and set memory block to zero\r\n * @param  pool_id       memory pool ID obtain referenced with \\ref osPoolCreate.\r\n * @retval  address of the allocated memory block or NULL in case of no memory available.\r\n * @note   MUST REMAIN UNCHANGED: \\b osPoolCAlloc shall be consistent in every CMSIS-RTOS.\r\n */\r\nvoid *osPoolCAlloc(osPoolId pool_id) {\r\n  void *p = osPoolAlloc(pool_id);\r\n\r\n  if (p != NULL) {\r\n    memset(p, 0, sizeof(pool_id->pool_sz));\r\n  }\r\n\r\n  return p;\r\n}\r\n\r\n/**\r\n * @brief Return an allocated memory block back to a specific memory pool\r\n * @param  pool_id       memory pool ID obtain referenced with \\ref osPoolCreate.\r\n * @param  block         address of the allocated memory block that is returned to the memory pool.\r\n * @retval  status code that indicates the execution status of the function.\r\n * @note   MUST REMAIN UNCHANGED: \\b osPoolFree shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osPoolFree(osPoolId pool_id, void *block) {\r\n  uint32_t index;\r\n\r\n  if (pool_id == NULL) {\r\n    return osErrorParameter;\r\n  }\r\n\r\n  if (block == NULL) {\r\n    return osErrorParameter;\r\n  }\r\n\r\n  if (block < pool_id->pool) {\r\n    return osErrorParameter;\r\n  }\r\n\r\n  index = (uint32_t)block - (uint32_t)(pool_id->pool);\r\n  if (index % pool_id->item_sz) {\r\n    return osErrorParameter;\r\n  }\r\n  index = index / pool_id->item_sz;\r\n  if (index >= pool_id->pool_sz) {\r\n    return osErrorParameter;\r\n  }\r\n\r\n  pool_id->markers[index] = 0;\r\n\r\n  return osOK;\r\n}\r\n\r\n#endif /* Use Memory Pool Management */\r\n\r\n/*******************   Message Queue Management Functions  *********************/\r\n\r\n#if (defined(osFeature_MessageQ) && (osFeature_MessageQ != 0)) /* Use Message Queues */\r\n\r\n/**\r\n * @brief Create and Initialize a Message Queue\r\n * @param queue_def     queue definition referenced with \\ref osMessageQ.\r\n * @param  thread_id     thread ID (obtained by \\ref osThreadCreate or \\ref osThreadGetId) or NULL.\r\n * @retval  message queue ID for reference by other functions or NULL in case of error.\r\n * @note   MUST REMAIN UNCHANGED: \\b osMessageCreate shall be consistent in every CMSIS-RTOS.\r\n */\r\nosMessageQId osMessageCreate(const osMessageQDef_t *queue_def, osThreadId thread_id) {\r\n  (void)thread_id;\r\n\r\n#if (configSUPPORT_STATIC_ALLOCATION == 1) && (configSUPPORT_DYNAMIC_ALLOCATION == 1)\r\n\r\n  if ((queue_def->buffer != NULL) && (queue_def->controlblock != NULL)) {\r\n    return xQueueCreateStatic(queue_def->queue_sz, queue_def->item_sz, queue_def->buffer, queue_def->controlblock);\r\n  } else {\r\n    return xQueueCreate(queue_def->queue_sz, queue_def->item_sz);\r\n  }\r\n#elif (configSUPPORT_STATIC_ALLOCATION == 1)\r\n  return xQueueCreateStatic(queue_def->queue_sz, queue_def->item_sz, queue_def->buffer, queue_def->controlblock);\r\n#else\r\n  return xQueueCreate(queue_def->queue_sz, queue_def->item_sz);\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief Put a Message to a Queue.\r\n * @param  queue_id  message queue ID obtained with \\ref osMessageCreate.\r\n * @param  info      message information.\r\n * @param  millisec  timeout value or 0 in case of no time-out.\r\n * @retval status code that indicates the execution status of the function.\r\n * @note   MUST REMAIN UNCHANGED: \\b osMessagePut shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osMessagePut(osMessageQId queue_id, uint32_t info, uint32_t millisec) {\r\n  portBASE_TYPE taskWoken = pdFALSE;\r\n  TickType_t    ticks;\r\n\r\n  ticks = millisec / portTICK_PERIOD_MS;\r\n  if (ticks == 0) {\r\n    ticks = 1;\r\n  }\r\n\r\n  if (inHandlerMode()) {\r\n    if (xQueueSendFromISR(queue_id, &info, &taskWoken) != pdTRUE) {\r\n      return osErrorOS;\r\n    }\r\n    portEND_SWITCHING_ISR(taskWoken);\r\n  } else {\r\n    if (xQueueSend(queue_id, &info, ticks) != pdTRUE) {\r\n      return osErrorOS;\r\n    }\r\n  }\r\n\r\n  return osOK;\r\n}\r\n\r\n/**\r\n * @brief Get a Message or Wait for a Message from a Queue.\r\n * @param  queue_id  message queue ID obtained with \\ref osMessageCreate.\r\n * @param  millisec  timeout value or 0 in case of no time-out.\r\n * @retval event information that includes status code.\r\n * @note   MUST REMAIN UNCHANGED: \\b osMessageGet shall be consistent in every CMSIS-RTOS.\r\n */\r\nosEvent osMessageGet(osMessageQId queue_id, uint32_t millisec) {\r\n  portBASE_TYPE taskWoken;\r\n  TickType_t    ticks;\r\n  osEvent       event;\r\n\r\n  event.def.message_id = queue_id;\r\n  event.value.v        = 0;\r\n\r\n  if (queue_id == NULL) {\r\n    event.status = osErrorParameter;\r\n    return event;\r\n  }\r\n\r\n  taskWoken = pdFALSE;\r\n\r\n  ticks = 0;\r\n  if (millisec == osWaitForever) {\r\n    ticks = portMAX_DELAY;\r\n  } else if (millisec != 0) {\r\n    ticks = millisec / portTICK_PERIOD_MS;\r\n    if (ticks == 0) {\r\n      ticks = 1;\r\n    }\r\n  }\r\n\r\n  if (inHandlerMode()) {\r\n    if (xQueueReceiveFromISR(queue_id, &event.value.v, &taskWoken) == pdTRUE) {\r\n      /* We have mail */\r\n      event.status = osEventMessage;\r\n    } else {\r\n      event.status = osOK;\r\n    }\r\n    portEND_SWITCHING_ISR(taskWoken);\r\n  } else {\r\n    if (xQueueReceive(queue_id, &event.value.v, ticks) == pdTRUE) {\r\n      /* We have mail */\r\n      event.status = osEventMessage;\r\n    } else {\r\n      event.status = (ticks == 0) ? osOK : osEventTimeout;\r\n    }\r\n  }\r\n\r\n  return event;\r\n}\r\n\r\n#endif /* Use Message Queues */\r\n\r\n/********************   Mail Queue Management Functions  ***********************/\r\n#if (defined(osFeature_MailQ) && (osFeature_MailQ != 0)) /* Use Mail Queues */\r\n\r\ntypedef struct os_mailQ_cb {\r\n  const osMailQDef_t *queue_def;\r\n  QueueHandle_t       handle;\r\n  osPoolId            pool;\r\n} os_mailQ_cb_t;\r\n\r\n/**\r\n * @brief Create and Initialize mail queue\r\n * @param  queue_def     reference to the mail queue definition obtain with \\ref osMailQ\r\n * @param   thread_id     thread ID (obtained by \\ref osThreadCreate or \\ref osThreadGetId) or NULL.\r\n * @retval mail queue ID for reference by other functions or NULL in case of error.\r\n * @note   MUST REMAIN UNCHANGED: \\b osMailCreate shall be consistent in every CMSIS-RTOS.\r\n */\r\nosMailQId osMailCreate(const osMailQDef_t *queue_def, osThreadId thread_id) {\r\n#if (configSUPPORT_DYNAMIC_ALLOCATION == 1)\r\n  (void)thread_id;\r\n\r\n  osPoolDef_t pool_def = {queue_def->queue_sz, queue_def->item_sz, NULL};\r\n\r\n  /* Create a mail queue control block */\r\n\r\n  *(queue_def->cb) = pvPortMalloc(sizeof(struct os_mailQ_cb));\r\n\r\n  if (*(queue_def->cb) == NULL) {\r\n    return NULL;\r\n  }\r\n  (*(queue_def->cb))->queue_def = queue_def;\r\n\r\n  /* Create a queue in FreeRTOS */\r\n  (*(queue_def->cb))->handle = xQueueCreate(queue_def->queue_sz, sizeof(void *));\r\n\r\n  if ((*(queue_def->cb))->handle == NULL) {\r\n    vPortFree(*(queue_def->cb));\r\n    return NULL;\r\n  }\r\n\r\n  /* Create a mail pool */\r\n  (*(queue_def->cb))->pool = osPoolCreate(&pool_def);\r\n  if ((*(queue_def->cb))->pool == NULL) {\r\n    // TODO: Delete queue. How to do it in FreeRTOS?\r\n    vPortFree(*(queue_def->cb));\r\n    return NULL;\r\n  }\r\n\r\n  return *(queue_def->cb);\r\n#else\r\n  return NULL;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief Allocate a memory block from a mail\r\n * @param  queue_id      mail queue ID obtained with \\ref osMailCreate.\r\n * @param  millisec      timeout value or 0 in case of no time-out.\r\n * @retval pointer to memory block that can be filled with mail or NULL in case error.\r\n * @note   MUST REMAIN UNCHANGED: \\b osMailAlloc shall be consistent in every CMSIS-RTOS.\r\n */\r\nvoid *osMailAlloc(osMailQId queue_id, uint32_t millisec) {\r\n  (void)millisec;\r\n  void *p;\r\n\r\n  if (queue_id == NULL) {\r\n    return NULL;\r\n  }\r\n\r\n  p = osPoolAlloc(queue_id->pool);\r\n\r\n  return p;\r\n}\r\n\r\n/**\r\n * @brief Allocate a memory block from a mail and set memory block to zero\r\n * @param  queue_id      mail queue ID obtained with \\ref osMailCreate.\r\n * @param  millisec      timeout value or 0 in case of no time-out.\r\n * @retval pointer to memory block that can be filled with mail or NULL in case error.\r\n * @note   MUST REMAIN UNCHANGED: \\b osMailCAlloc shall be consistent in every CMSIS-RTOS.\r\n */\r\nvoid *osMailCAlloc(osMailQId queue_id, uint32_t millisec) {\r\n  uint32_t i;\r\n  void    *p = osMailAlloc(queue_id, millisec);\r\n\r\n  if (p) {\r\n    for (i = 0; i < queue_id->queue_def->item_sz; i++) {\r\n      ((uint8_t *)p)[i] = 0;\r\n    }\r\n  }\r\n\r\n  return p;\r\n}\r\n\r\n/**\r\n * @brief Put a mail to a queue\r\n * @param  queue_id      mail queue ID obtained with \\ref osMailCreate.\r\n * @param  mail          memory block previously allocated with \\ref osMailAlloc or \\ref osMailCAlloc.\r\n * @retval status code that indicates the execution status of the function.\r\n * @note   MUST REMAIN UNCHANGED: \\b osMailPut shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osMailPut(osMailQId queue_id, void *mail) {\r\n  portBASE_TYPE taskWoken;\r\n\r\n  if (queue_id == NULL) {\r\n    return osErrorParameter;\r\n  }\r\n\r\n  taskWoken = pdFALSE;\r\n\r\n  if (inHandlerMode()) {\r\n    if (xQueueSendFromISR(queue_id->handle, &mail, &taskWoken) != pdTRUE) {\r\n      return osErrorOS;\r\n    }\r\n    portEND_SWITCHING_ISR(taskWoken);\r\n  } else {\r\n    if (xQueueSend(queue_id->handle, &mail, 0) != pdTRUE) {\r\n      return osErrorOS;\r\n    }\r\n  }\r\n\r\n  return osOK;\r\n}\r\n\r\n/**\r\n * @brief Get a mail from a queue\r\n * @param  queue_id   mail queue ID obtained with \\ref osMailCreate.\r\n * @param millisec    timeout value or 0 in case of no time-out\r\n * @retval event that contains mail information or error code.\r\n * @note   MUST REMAIN UNCHANGED: \\b osMailGet shall be consistent in every CMSIS-RTOS.\r\n */\r\nosEvent osMailGet(osMailQId queue_id, uint32_t millisec) {\r\n  portBASE_TYPE taskWoken;\r\n  TickType_t    ticks;\r\n  osEvent       event;\r\n\r\n  event.def.mail_id = queue_id;\r\n\r\n  if (queue_id == NULL) {\r\n    event.status = osErrorParameter;\r\n    return event;\r\n  }\r\n\r\n  taskWoken = pdFALSE;\r\n\r\n  ticks = 0;\r\n  if (millisec == osWaitForever) {\r\n    ticks = portMAX_DELAY;\r\n  } else if (millisec != 0) {\r\n    ticks = millisec / portTICK_PERIOD_MS;\r\n    if (ticks == 0) {\r\n      ticks = 1;\r\n    }\r\n  }\r\n\r\n  if (inHandlerMode()) {\r\n    if (xQueueReceiveFromISR(queue_id->handle, &event.value.p, &taskWoken) == pdTRUE) {\r\n      /* We have mail */\r\n      event.status = osEventMail;\r\n    } else {\r\n      event.status = osOK;\r\n    }\r\n    portEND_SWITCHING_ISR(taskWoken);\r\n  } else {\r\n    if (xQueueReceive(queue_id->handle, &event.value.p, ticks) == pdTRUE) {\r\n      /* We have mail */\r\n      event.status = osEventMail;\r\n    } else {\r\n      event.status = (ticks == 0) ? osOK : osEventTimeout;\r\n    }\r\n  }\r\n\r\n  return event;\r\n}\r\n\r\n/**\r\n * @brief Free a memory block from a mail\r\n * @param  queue_id mail queue ID obtained with \\ref osMailCreate.\r\n * @param  mail     pointer to the memory block that was obtained with \\ref osMailGet.\r\n * @retval status code that indicates the execution status of the function.\r\n * @note   MUST REMAIN UNCHANGED: \\b osMailFree shall be consistent in every CMSIS-RTOS.\r\n */\r\nosStatus osMailFree(osMailQId queue_id, void *mail) {\r\n  if (queue_id == NULL) {\r\n    return osErrorParameter;\r\n  }\r\n\r\n  return osPoolFree(queue_id->pool, mail);\r\n}\r\n#endif /* Use Mail Queues */\r\n\r\n/*************************** Additional specific APIs to Free RTOS ************/\r\n/**\r\n * @brief  Handles the tick increment\r\n * @param  none.\r\n * @retval none.\r\n */\r\nvoid osSystickHandler(void) {\r\n\r\n#if (INCLUDE_xTaskGetSchedulerState == 1)\r\n  if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {\r\n#endif /* INCLUDE_xTaskGetSchedulerState */\r\n    xPortSysTickHandler();\r\n#if (INCLUDE_xTaskGetSchedulerState == 1)\r\n  }\r\n#endif /* INCLUDE_xTaskGetSchedulerState */\r\n}\r\n\r\n#if (INCLUDE_eTaskGetState == 1)\r\n/**\r\n * @brief  Obtain the state of any thread.\r\n * @param   thread_id   thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId.\r\n * @retval  the stae of the thread, states are encoded by the osThreadState enumerated type.\r\n */\r\nosThreadState osThreadGetState(osThreadId thread_id) {\r\n  eTaskState    ThreadState;\r\n  osThreadState result;\r\n\r\n  ThreadState = eTaskGetState(thread_id);\r\n\r\n  switch (ThreadState) {\r\n  case eRunning:\r\n    result = osThreadRunning;\r\n    break;\r\n  case eReady:\r\n    result = osThreadReady;\r\n    break;\r\n  case eBlocked:\r\n    result = osThreadBlocked;\r\n    break;\r\n  case eSuspended:\r\n    result = osThreadSuspended;\r\n    break;\r\n  case eDeleted:\r\n    result = osThreadDeleted;\r\n    break;\r\n  default:\r\n    result = osThreadError;\r\n  }\r\n\r\n  return result;\r\n}\r\n#endif /* INCLUDE_eTaskGetState */\r\n\r\n#if (INCLUDE_eTaskGetState == 1)\r\n/**\r\n * @brief Check if a thread is already suspended or not.\r\n * @param thread_id thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId.\r\n * @retval status code that indicates the execution status of the function.\r\n */\r\nosStatus osThreadIsSuspended(osThreadId thread_id) {\r\n  if (eTaskGetState(thread_id) == eSuspended)\r\n    return osOK;\r\n  else\r\n    return osErrorOS;\r\n}\r\n#endif /* INCLUDE_eTaskGetState */\r\n/**\r\n * @brief  Suspend execution of a thread.\r\n * @param   thread_id   thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId.\r\n * @retval  status code that indicates the execution status of the function.\r\n */\r\nosStatus osThreadSuspend(osThreadId thread_id) {\r\n#if (INCLUDE_vTaskSuspend == 1)\r\n  vTaskSuspend(thread_id);\r\n\r\n  return osOK;\r\n#else\r\n  return osErrorResource;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief  Resume execution of a suspended thread.\r\n * @param   thread_id   thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId.\r\n * @retval  status code that indicates the execution status of the function.\r\n */\r\nosStatus osThreadResume(osThreadId thread_id) {\r\n#if (INCLUDE_vTaskSuspend == 1)\r\n  if (inHandlerMode()) {\r\n    if (xTaskResumeFromISR(thread_id) == pdTRUE) {\r\n      portYIELD_FROM_ISR(pdTRUE);\r\n    }\r\n  } else {\r\n    vTaskResume(thread_id);\r\n  }\r\n  return osOK;\r\n#else\r\n  return osErrorResource;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief  Suspend execution of a all active threads.\r\n * @retval  status code that indicates the execution status of the function.\r\n */\r\nosStatus osThreadSuspendAll(void) {\r\n  vTaskSuspendAll();\r\n\r\n  return osOK;\r\n}\r\n\r\n/**\r\n * @brief  Resume execution of a all suspended threads.\r\n * @retval  status code that indicates the execution status of the function.\r\n */\r\nosStatus osThreadResumeAll(void) {\r\n  if (xTaskResumeAll() == pdTRUE)\r\n    return osOK;\r\n  else\r\n    return osErrorOS;\r\n}\r\n\r\n/**\r\n * @brief  Delay a task until a specified time\r\n * @param   PreviousWakeTime   Pointer to a variable that holds the time at which the\r\n *          task was last unblocked. PreviousWakeTime must be initialised with the current time\r\n *          prior to its first use (PreviousWakeTime = osKernelSysTick() )\r\n * @param   millisec    time delay value\r\n * @retval  status code that indicates the execution status of the function.\r\n */\r\nosStatus osDelayUntil(uint32_t *PreviousWakeTime, uint32_t millisec) {\r\n#if INCLUDE_vTaskDelayUntil\r\n  TickType_t ticks = (millisec / portTICK_PERIOD_MS);\r\n  vTaskDelayUntil((TickType_t *)PreviousWakeTime, ticks ? ticks : 1);\r\n\r\n  return osOK;\r\n#else\r\n  (void)millisec;\r\n  (void)PreviousWakeTime;\r\n\r\n  return osErrorResource;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief   Abort the delay for a specific thread\r\n * @param   thread_id   thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId\r\n * @retval  status code that indicates the execution status of the function.\r\n */\r\nosStatus osAbortDelay(osThreadId thread_id) {\r\n#if INCLUDE_xTaskAbortDelay\r\n\r\n  xTaskAbortDelay(thread_id);\r\n\r\n  return osOK;\r\n#else\r\n  (void)thread_id;\r\n\r\n  return osErrorResource;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief   Lists all the current threads, along with their current state\r\n *          and stack usage high water mark.\r\n * @param   buffer   A buffer into which the above mentioned details\r\n *          will be written\r\n * @retval  status code that indicates the execution status of the function.\r\n */\r\nosStatus osThreadList(uint8_t *buffer) {\r\n#if ((configUSE_TRACE_FACILITY == 1) && (configUSE_STATS_FORMATTING_FUNCTIONS == 1))\r\n  vTaskList((char *)buffer);\r\n#endif\r\n  return osOK;\r\n}\r\n\r\n/**\r\n * @brief  Receive an item from a queue without removing the item from the queue.\r\n * @param  queue_id  message queue ID obtained with \\ref osMessageCreate.\r\n * @param  millisec  timeout value or 0 in case of no time-out.\r\n * @retval event information that includes status code.\r\n */\r\nosEvent osMessagePeek(osMessageQId queue_id, uint32_t millisec) {\r\n  TickType_t ticks;\r\n  osEvent    event;\r\n\r\n  event.def.message_id = queue_id;\r\n\r\n  if (queue_id == NULL) {\r\n    event.status = osErrorParameter;\r\n    return event;\r\n  }\r\n\r\n  ticks = 0;\r\n  if (millisec == osWaitForever) {\r\n    ticks = portMAX_DELAY;\r\n  } else if (millisec != 0) {\r\n    ticks = millisec / portTICK_PERIOD_MS;\r\n    if (ticks == 0) {\r\n      ticks = 1;\r\n    }\r\n  }\r\n\r\n  if (xQueuePeek(queue_id, &event.value.v, ticks) == pdTRUE) {\r\n    /* We have mail */\r\n    event.status = osEventMessage;\r\n  } else {\r\n    event.status = (ticks == 0) ? osOK : osEventTimeout;\r\n  }\r\n\r\n  return event;\r\n}\r\n\r\n/**\r\n * @brief  Get the number of messaged stored in a queue.\r\n * @param  queue_id  message queue ID obtained with \\ref osMessageCreate.\r\n * @retval number of messages stored in a queue.\r\n */\r\nuint32_t osMessageWaiting(osMessageQId queue_id) {\r\n  if (inHandlerMode()) {\r\n    return uxQueueMessagesWaitingFromISR(queue_id);\r\n  } else {\r\n    return uxQueueMessagesWaiting(queue_id);\r\n  }\r\n}\r\n\r\n/**\r\n * @brief  Get the available space in a message queue.\r\n * @param  queue_id  message queue ID obtained with \\ref osMessageCreate.\r\n * @retval available space in a message queue.\r\n */\r\nuint32_t osMessageAvailableSpace(osMessageQId queue_id) { return uxQueueSpacesAvailable(queue_id); }\r\n\r\n/**\r\n * @brief Delete a Message Queue\r\n * @param  queue_id  message queue ID obtained with \\ref osMessageCreate.\r\n * @retval  status code that indicates the execution status of the function.\r\n */\r\nosStatus osMessageDelete(osMessageQId queue_id) {\r\n  if (inHandlerMode()) {\r\n    return osErrorISR;\r\n  }\r\n\r\n  vQueueDelete(queue_id);\r\n\r\n  return osOK;\r\n}\r\n\r\n/**\r\n * @brief  Create and Initialize a Recursive Mutex\r\n * @param  mutex_def     mutex definition referenced with \\ref osMutex.\r\n * @retval  mutex ID for reference by other functions or NULL in case of error..\r\n */\r\nosMutexId osRecursiveMutexCreate(const osMutexDef_t *mutex_def) {\r\n#if (configUSE_RECURSIVE_MUTEXES == 1)\r\n#if (configSUPPORT_STATIC_ALLOCATION == 1) && (configSUPPORT_DYNAMIC_ALLOCATION == 1)\r\n\r\n  if (mutex_def->controlblock != NULL) {\r\n    return xSemaphoreCreateRecursiveMutexStatic(mutex_def->controlblock);\r\n  } else {\r\n    return xSemaphoreCreateRecursiveMutex();\r\n  }\r\n#elif (configSUPPORT_STATIC_ALLOCATION == 1)\r\n  return xSemaphoreCreateRecursiveMutexStatic(mutex_def->controlblock);\r\n#else\r\n  return xSemaphoreCreateRecursiveMutex();\r\n#endif\r\n#else\r\n  return NULL;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief  Release a Recursive Mutex\r\n * @param   mutex_id      mutex ID obtained by \\ref osRecursiveMutexCreate.\r\n * @retval  status code that indicates the execution status of the function.\r\n */\r\nosStatus osRecursiveMutexRelease(osMutexId mutex_id) {\r\n#if (configUSE_RECURSIVE_MUTEXES == 1)\r\n  osStatus result = osOK;\r\n\r\n  if (xSemaphoreGiveRecursive(mutex_id) != pdTRUE) {\r\n    result = osErrorOS;\r\n  }\r\n  return result;\r\n#else\r\n  return osErrorResource;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief  Release a Recursive Mutex\r\n * @param   mutex_id    mutex ID obtained by \\ref osRecursiveMutexCreate.\r\n * @param millisec      timeout value or 0 in case of no time-out.\r\n * @retval  status code that indicates the execution status of the function.\r\n */\r\nosStatus osRecursiveMutexWait(osMutexId mutex_id, uint32_t millisec) {\r\n#if (configUSE_RECURSIVE_MUTEXES == 1)\r\n  TickType_t ticks;\r\n\r\n  if (mutex_id == NULL) {\r\n    return osErrorParameter;\r\n  }\r\n\r\n  ticks = 0;\r\n  if (millisec == osWaitForever) {\r\n    ticks = portMAX_DELAY;\r\n  } else if (millisec != 0) {\r\n    ticks = millisec / portTICK_PERIOD_MS;\r\n    if (ticks == 0) {\r\n      ticks = 1;\r\n    }\r\n  }\r\n\r\n  if (xSemaphoreTakeRecursive(mutex_id, ticks) != pdTRUE) {\r\n    return osErrorOS;\r\n  }\r\n  return osOK;\r\n#else\r\n  return osErrorResource;\r\n#endif\r\n}\r\n\r\n/**\r\n * @brief  Returns the current count value of a counting semaphore\r\n * @param  semaphore_id  semaphore_id ID obtained by \\ref osSemaphoreCreate.\r\n * @retval  count value\r\n */\r\nuint32_t osSemaphoreGetCount(osSemaphoreId semaphore_id) { return uxSemaphoreGetCount(semaphore_id); }\r\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.h",
    "content": "/* ----------------------------------------------------------------------\r\n * $Date:        5. February 2013\r\n * $Revision:    V1.02\r\n *\r\n * Project:      CMSIS-RTOS API\r\n * Title:        cmsis_os.h header file\r\n *\r\n * Version 0.02\r\n *    Initial Proposal Phase\r\n * Version 0.03\r\n *    osKernelStart added, optional feature: main started as thread\r\n *    osSemaphores have standard behavior\r\n *    osTimerCreate does not start the timer, added osTimerStart\r\n *    osThreadPass is renamed to osThreadYield\r\n * Version 1.01\r\n *    Support for C++ interface\r\n *     - const attribute removed from the osXxxxDef_t typedef's\r\n *     - const attribute added to the osXxxxDef macros\r\n *    Added: osTimerDelete, osMutexDelete, osSemaphoreDelete\r\n *    Added: osKernelInitialize\r\n * Version 1.02\r\n *    Control functions for short timeouts in microsecond resolution:\r\n *    Added: osKernelSysTick, osKernelSysTickFrequency, osKernelSysTickMicroSec\r\n *    Removed: osSignalGet \r\n *    \r\n *  \r\n *----------------------------------------------------------------------------\r\n *\r\n * Portions Copyright � 2016 STMicroelectronics International N.V. All rights reserved.\r\n * Portions Copyright (c) 2013 ARM LIMITED\r\n * All rights reserved.\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *  - Redistributions of source code must retain the above copyright\r\n *    notice, this list of conditions and the following disclaimer.\r\n *  - Redistributions in binary form must reproduce the above copyright\r\n *    notice, this list of conditions and the following disclaimer in the\r\n *    documentation and/or other materials provided with the distribution.\r\n *  - Neither the name of ARM  nor the names of its contributors may be used\r\n *    to endorse or promote products derived from this software without\r\n *    specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n *---------------------------------------------------------------------------*/\r\n\r\n /**\r\n  ******************************************************************************\r\n  * @file    cmsis_os.h\r\n  * @author  MCD Application Team\r\n  * @date    03-March-2017\r\n  * @brief   Header of cmsis_os.c\r\n  *          A new set of APIs are added in addition to existing ones, these APIs \r\n  *          are specific to FreeRTOS.\r\n  ******************************************************************************\r\n  * @attention\r\n  *\r\n  * Redistribution and use in source and binary forms, with or without \r\n  * modification, are permitted, provided that the following conditions are met:\r\n  *\r\n  * 1. Redistribution of source code must retain the above copyright notice, \r\n  *    this list of conditions and the following disclaimer.\r\n  * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n  *    this list of conditions and the following disclaimer in the documentation\r\n  *    and/or other materials provided with the distribution.\r\n  * 3. Neither the name of STMicroelectronics nor the names of other \r\n  *    contributors to this software may be used to endorse or promote products \r\n  *    derived from this software without specific written permission.\r\n  * 4. This software, including modifications and/or derivative works of this \r\n  *    software, must execute solely and exclusively on microcontroller or\r\n  *    microprocessor devices manufactured by or for STMicroelectronics.\r\n  * 5. Redistribution and use of this software other than as permitted under \r\n  *    this license is void and will automatically terminate your rights under \r\n  *    this license. \r\n  *\r\n  * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS \"AS IS\" \r\n  * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT \r\n  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A \r\n  * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY\r\n  * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT \r\n  * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r\n  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r\n  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, \r\n  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF \r\n  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING \r\n  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r\n  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n  *\r\n  ******************************************************************************\r\n  */\r\n\t\r\n#include \"FreeRTOS.h\"\r\n#include \"task.h\"\r\n#include \"timers.h\"\r\n#include \"queue.h\"\r\n#include \"semphr.h\"\r\n#include \"event_groups.h\"\r\n\r\n/**\r\n\\page cmsis_os_h Header File Template: cmsis_os.h\r\n\r\nThe file \\b cmsis_os.h is a template header file for a CMSIS-RTOS compliant Real-Time Operating System (RTOS).\r\nEach RTOS that is compliant with CMSIS-RTOS shall provide a specific \\b cmsis_os.h header file that represents\r\nits implementation.\r\n\r\nThe file cmsis_os.h contains:\r\n - CMSIS-RTOS API function definitions\r\n - struct definitions for parameters and return types\r\n - status and priority values used by CMSIS-RTOS API functions\r\n - macros for defining threads and other kernel objects\r\n\r\n\r\n<b>Name conventions and header file modifications</b>\r\n\r\nAll definitions are prefixed with \\b os to give an unique name space for CMSIS-RTOS functions.\r\nDefinitions that are prefixed \\b os_ are not used in the application code but local to this header file.\r\nAll definitions and functions that belong to a module are grouped and have a common prefix, i.e. \\b osThread.\r\n\r\nDefinitions that are marked with <b>CAN BE CHANGED</b> can be adapted towards the needs of the actual CMSIS-RTOS implementation.\r\nThese definitions can be specific to the underlying RTOS kernel.\r\n\r\nDefinitions that are marked with <b>MUST REMAIN UNCHANGED</b> cannot be altered. Otherwise the CMSIS-RTOS implementation is no longer\r\ncompliant to the standard. Note that some functions are optional and need not to be provided by every CMSIS-RTOS implementation.\r\n\r\n\r\n<b>Function calls from interrupt service routines</b>\r\n\r\nThe following CMSIS-RTOS functions can be called from threads and interrupt service routines (ISR):\r\n  - \\ref osSignalSet\r\n  - \\ref osSemaphoreRelease\r\n  - \\ref osPoolAlloc, \\ref osPoolCAlloc, \\ref osPoolFree\r\n  - \\ref osMessagePut, \\ref osMessageGet\r\n  - \\ref osMailAlloc, \\ref osMailCAlloc, \\ref osMailGet, \\ref osMailPut, \\ref osMailFree\r\n\r\nFunctions that cannot be called from an ISR are verifying the interrupt status and return in case that they are called\r\nfrom an ISR context the status code \\b osErrorISR. In some implementations this condition might be caught using the HARD FAULT vector.\r\n\r\nSome CMSIS-RTOS implementations support CMSIS-RTOS function calls from multiple ISR at the same time.\r\nIf this is impossible, the CMSIS-RTOS rejects calls by nested ISR functions with the status code \\b osErrorISRRecursive.\r\n\r\n\r\n<b>Define and reference object definitions</b>\r\n\r\nWith <b>\\#define osObjectsExternal</b> objects are defined as external symbols. This allows to create a consistent header file\r\nthat is used throughout a project as shown below:\r\n\r\n<i>Header File</i>\r\n\\code\r\n#include <cmsis_os.h>                                         // CMSIS RTOS header file\r\n\r\n// Thread definition\r\nextern void thread_sample (void const *argument);             // function prototype\r\nosThreadDef (thread_sample, osPriorityBelowNormal, 1, 100);\r\n\r\n// Pool definition\r\nosPoolDef(MyPool, 10, long);\r\n\\endcode\r\n\r\n\r\nThis header file defines all objects when included in a C/C++ source file. When <b>\\#define osObjectsExternal</b> is\r\npresent before the header file, the objects are defined as external symbols. A single consistent header file can therefore be\r\nused throughout the whole project.\r\n\r\n<i>Example</i>\r\n\\code\r\n#include \"osObjects.h\"     // Definition of the CMSIS-RTOS objects\r\n\\endcode\r\n\r\n\\code\r\n#define osObjectExternal   // Objects will be defined as external symbols\r\n#include \"osObjects.h\"     // Reference to the CMSIS-RTOS objects\r\n\\endcode\r\n\r\n*/\r\n\r\n#ifndef _CMSIS_OS_H\r\n#define _CMSIS_OS_H\r\n\r\n/// \\note MUST REMAIN UNCHANGED: \\b osCMSIS identifies the CMSIS-RTOS API version.\r\n#define osCMSIS           0x10002      ///< API version (main [31:16] .sub [15:0])\r\n\r\n/// \\note CAN BE CHANGED: \\b osCMSIS_KERNEL identifies the underlying RTOS kernel and version number.\r\n#define osCMSIS_KERNEL    0x10000\t   ///< RTOS identification and version (main [31:16] .sub [15:0])\r\n\r\n/// \\note MUST REMAIN UNCHANGED: \\b osKernelSystemId shall be consistent in every CMSIS-RTOS.\r\n#define osKernelSystemId \"KERNEL V1.00\"   ///< RTOS identification string\r\n\r\n/// \\note MUST REMAIN UNCHANGED: \\b osFeature_xxx shall be consistent in every CMSIS-RTOS.\r\n#define osFeature_MainThread   1       ///< main thread      1=main can be thread, 0=not available\r\n#define osFeature_Pool         1       ///< Memory Pools:    1=available, 0=not available\r\n#define osFeature_MailQ        1       ///< Mail Queues:     1=available, 0=not available\r\n#define osFeature_MessageQ     1       ///< Message Queues:  1=available, 0=not available\r\n#define osFeature_Signals      8       ///< maximum number of Signal Flags available per thread\r\n#define osFeature_Semaphore    1      ///< osFeature_Semaphore function: 1=available, 0=not available\r\n#define osFeature_Wait         0       ///< osWait function: 1=available, 0=not available\r\n#define osFeature_SysTick      1       ///< osKernelSysTick functions: 1=available, 0=not available\r\n\r\n#ifdef  __cplusplus\r\nextern \"C\"\r\n{\r\n#endif\r\n\r\n\r\n// ==== Enumeration, structures, defines ====\r\n\r\n/// Priority used for thread control.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osPriority shall be consistent in every CMSIS-RTOS.\r\ntypedef enum  {\r\n  osPriorityIdle          = -3,          ///< priority: idle (lowest)\r\n  osPriorityLow           = -2,          ///< priority: low\r\n  osPriorityBelowNormal   = -1,          ///< priority: below normal\r\n  osPriorityNormal        =  0,          ///< priority: normal (default)\r\n  osPriorityAboveNormal   = +1,          ///< priority: above normal\r\n  osPriorityHigh          = +2,          ///< priority: high\r\n  osPriorityRealtime      = +3,          ///< priority: realtime (highest)\r\n  osPriorityError         =  0x84        ///< system cannot determine priority or thread has illegal priority\r\n} osPriority;\r\n\r\n/// Timeout value.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osWaitForever shall be consistent in every CMSIS-RTOS.\r\n#define osWaitForever     0xFFFFFFFF     ///< wait forever timeout value\r\n\r\n/// Status code values returned by CMSIS-RTOS functions.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osStatus shall be consistent in every CMSIS-RTOS.\r\ntypedef enum  {\r\n  osOK                    =     0,       ///< function completed; no error or event occurred.\r\n  osEventSignal           =  0x08,       ///< function completed; signal event occurred.\r\n  osEventMessage          =  0x10,       ///< function completed; message event occurred.\r\n  osEventMail             =  0x20,       ///< function completed; mail event occurred.\r\n  osEventTimeout          =  0x40,       ///< function completed; timeout occurred.\r\n  osErrorParameter        =  0x80,       ///< parameter error: a mandatory parameter was missing or specified an incorrect object.\r\n  osErrorResource         =  0x81,       ///< resource not available: a specified resource was not available.\r\n  osErrorTimeoutResource  =  0xC1,       ///< resource not available within given time: a specified resource was not available within the timeout period.\r\n  osErrorISR              =  0x82,       ///< not allowed in ISR context: the function cannot be called from interrupt service routines.\r\n  osErrorISRRecursive     =  0x83,       ///< function called multiple times from ISR with same object.\r\n  osErrorPriority         =  0x84,       ///< system cannot determine priority or thread has illegal priority.\r\n  osErrorNoMemory         =  0x85,       ///< system is out of memory: it was impossible to allocate or reserve memory for the operation.\r\n  osErrorValue            =  0x86,       ///< value of a parameter is out of range.\r\n  osErrorOS               =  0xFF,       ///< unspecified RTOS error: run-time error but no other error message fits.\r\n  os_status_reserved      =  0x7FFFFFFF  ///< prevent from enum down-size compiler optimization.\r\n} osStatus;\r\n\r\n#if ( INCLUDE_eTaskGetState == 1 )\r\n/* Thread state returned by osThreadGetState */\r\ntypedef enum {\r\n\tosThreadRunning   = 0x0,\t      /* A thread is querying the state of itself, so must be running. */\r\n\tosThreadReady     = 0x1 ,\t\t\t        /* The thread being queried is in a read or pending ready list. */\r\n\tosThreadBlocked   = 0x2,\t\t        /* The thread being queried is in the Blocked state. */\r\n\tosThreadSuspended = 0x3,\t      /* The thread being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */\r\n\tosThreadDeleted   = 0x4,\t\t          /* The thread being queried has been deleted, but its TCB has not yet been freed. */   \r\n  osThreadError     = 0x7FFFFFFF\r\n} osThreadState;\r\n#endif /* INCLUDE_eTaskGetState */\r\n\r\n/// Timer type value for the timer definition.\r\n/// \\note MUST REMAIN UNCHANGED: \\b os_timer_type shall be consistent in every CMSIS-RTOS.\r\ntypedef enum  {\r\n  osTimerOnce             =     0,       ///< one-shot timer\r\n  osTimerPeriodic         =     1        ///< repeating timer\r\n} os_timer_type;\r\n\r\n/// Entry point of a thread.\r\n/// \\note MUST REMAIN UNCHANGED: \\b os_pthread shall be consistent in every CMSIS-RTOS.\r\ntypedef void (*os_pthread) (void const *argument);\r\n\r\n/// Entry point of a timer call back function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b os_ptimer shall be consistent in every CMSIS-RTOS.\r\ntypedef void (*os_ptimer) (void const *argument);\r\n\r\n// >>> the following data type definitions may shall adapted towards a specific RTOS\r\n\r\n/// Thread ID identifies the thread (pointer to a thread control block).\r\n/// \\note CAN BE CHANGED: \\b os_thread_cb is implementation specific in every CMSIS-RTOS.\r\ntypedef TaskHandle_t osThreadId;\r\n\r\n/// Timer ID identifies the timer (pointer to a timer control block).\r\n/// \\note CAN BE CHANGED: \\b os_timer_cb is implementation specific in every CMSIS-RTOS.\r\ntypedef TimerHandle_t osTimerId;\r\n\r\n/// Mutex ID identifies the mutex (pointer to a mutex control block).\r\n/// \\note CAN BE CHANGED: \\b os_mutex_cb is implementation specific in every CMSIS-RTOS.\r\ntypedef SemaphoreHandle_t osMutexId;\r\n\r\n/// Semaphore ID identifies the semaphore (pointer to a semaphore control block).\r\n/// \\note CAN BE CHANGED: \\b os_semaphore_cb is implementation specific in every CMSIS-RTOS.\r\ntypedef SemaphoreHandle_t osSemaphoreId;\r\n\r\n/// Pool ID identifies the memory pool (pointer to a memory pool control block).\r\n/// \\note CAN BE CHANGED: \\b os_pool_cb is implementation specific in every CMSIS-RTOS.\r\ntypedef struct os_pool_cb *osPoolId;\r\n\r\n/// Message ID identifies the message queue (pointer to a message queue control block).\r\n/// \\note CAN BE CHANGED: \\b os_messageQ_cb is implementation specific in every CMSIS-RTOS.\r\ntypedef QueueHandle_t osMessageQId;\r\n\r\n/// Mail ID identifies the mail queue (pointer to a mail queue control block).\r\n/// \\note CAN BE CHANGED: \\b os_mailQ_cb is implementation specific in every CMSIS-RTOS.\r\ntypedef struct os_mailQ_cb *osMailQId;\r\n\r\n\r\n#if( configSUPPORT_STATIC_ALLOCATION == 1 )\r\n\r\ntypedef StaticTask_t               osStaticThreadDef_t;\r\ntypedef StaticTimer_t              osStaticTimerDef_t;\r\ntypedef StaticSemaphore_t          osStaticMutexDef_t;         \r\ntypedef StaticSemaphore_t          osStaticSemaphoreDef_t;\r\ntypedef StaticQueue_t              osStaticMessageQDef_t;\r\n\r\n#endif\r\n\r\n\r\n\r\n\r\n/// Thread Definition structure contains startup information of a thread.\r\n/// \\note CAN BE CHANGED: \\b os_thread_def is implementation specific in every CMSIS-RTOS.\r\ntypedef struct os_thread_def  {\r\n  char                   *name;        ///< Thread name \r\n  os_pthread             pthread;      ///< start address of thread function\r\n  osPriority             tpriority;    ///< initial thread priority\r\n  uint32_t               instances;    ///< maximum number of instances of that thread function\r\n  uint32_t               stacksize;    ///< stack size requirements in bytes; 0 is default stack size\r\n#if( configSUPPORT_STATIC_ALLOCATION == 1 )\r\n  uint32_t               *buffer;      ///< stack buffer for static allocation; NULL for dynamic allocation\r\n  osStaticThreadDef_t    *controlblock;     ///< control block to hold thread's data for static allocation; NULL for dynamic allocation\r\n#endif\r\n} osThreadDef_t;\r\n\r\n/// Timer Definition structure contains timer parameters.\r\n/// \\note CAN BE CHANGED: \\b os_timer_def is implementation specific in every CMSIS-RTOS.\r\ntypedef struct os_timer_def  {\r\n  os_ptimer                 ptimer;    ///< start address of a timer function\r\n#if( configSUPPORT_STATIC_ALLOCATION == 1 )\r\n  osStaticTimerDef_t        *controlblock;      ///< control block to hold timer's data for static allocation; NULL for dynamic allocation\r\n#endif\r\n} osTimerDef_t;\r\n\r\n/// Mutex Definition structure contains setup information for a mutex.\r\n/// \\note CAN BE CHANGED: \\b os_mutex_def is implementation specific in every CMSIS-RTOS.\r\ntypedef struct os_mutex_def  {\r\n  uint32_t                   dummy;    ///< dummy value.\r\n#if( configSUPPORT_STATIC_ALLOCATION == 1 )\r\n  osStaticMutexDef_t         *controlblock;      ///< control block for static allocation; NULL for dynamic allocation\r\n#endif\r\n} osMutexDef_t;\r\n\r\n/// Semaphore Definition structure contains setup information for a semaphore.\r\n/// \\note CAN BE CHANGED: \\b os_semaphore_def is implementation specific in every CMSIS-RTOS.\r\ntypedef struct os_semaphore_def  {\r\n  uint32_t                   dummy;    ///< dummy value.\r\n#if( configSUPPORT_STATIC_ALLOCATION == 1 )\r\n  osStaticSemaphoreDef_t     *controlblock;      ///< control block for static allocation; NULL for dynamic allocation\r\n#endif\r\n} osSemaphoreDef_t;\r\n\r\n/// Definition structure for memory block allocation.\r\n/// \\note CAN BE CHANGED: \\b os_pool_def is implementation specific in every CMSIS-RTOS.\r\ntypedef struct os_pool_def  {\r\n  uint32_t                 pool_sz;    ///< number of items (elements) in the pool\r\n  uint32_t                 item_sz;    ///< size of an item\r\n  void                       *pool;    ///< pointer to memory for pool\r\n} osPoolDef_t;\r\n\r\n/// Definition structure for message queue.\r\n/// \\note CAN BE CHANGED: \\b os_messageQ_def is implementation specific in every CMSIS-RTOS.\r\ntypedef struct os_messageQ_def  {\r\n  uint32_t                queue_sz;    ///< number of elements in the queue\r\n  uint32_t                item_sz;    ///< size of an item\r\n#if( configSUPPORT_STATIC_ALLOCATION == 1 )\r\n  uint8_t                 *buffer;      ///< buffer for static allocation; NULL for dynamic allocation\r\n  osStaticMessageQDef_t   *controlblock;     ///< control block to hold queue's data for static allocation; NULL for dynamic allocation\r\n#endif\r\n  //void                       *pool;    ///< memory array for messages\r\n} osMessageQDef_t;\r\n\r\n/// Definition structure for mail queue.\r\n/// \\note CAN BE CHANGED: \\b os_mailQ_def is implementation specific in every CMSIS-RTOS.\r\ntypedef struct os_mailQ_def  {\r\n  uint32_t                queue_sz;    ///< number of elements in the queue\r\n  uint32_t                 item_sz;    ///< size of an item\r\n  struct os_mailQ_cb **cb;\r\n} osMailQDef_t;\r\n\r\n/// Event structure contains detailed information about an event.\r\n/// \\note MUST REMAIN UNCHANGED: \\b os_event shall be consistent in every CMSIS-RTOS.\r\n///       However the struct may be extended at the end.\r\ntypedef struct  {\r\n  osStatus                 status;     ///< status code: event or error information\r\n  union  {\r\n    uint32_t                    v;     ///< message as 32-bit value\r\n    void                       *p;     ///< message or mail as void pointer\r\n    int32_t               signals;     ///< signal flags\r\n  } value;                             ///< event value\r\n  union  {\r\n    osMailQId             mail_id;     ///< mail id obtained by \\ref osMailCreate\r\n    osMessageQId       message_id;     ///< message id obtained by \\ref osMessageCreate\r\n  } def;                               ///< event definition\r\n} osEvent;\r\n\r\n\r\n//  ==== Kernel Control Functions ====\r\n\r\n/// Initialize the RTOS Kernel for creating objects.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osKernelInitialize shall be consistent in every CMSIS-RTOS.\r\nosStatus osKernelInitialize (void);\r\n\r\n/// Start the RTOS Kernel.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osKernelStart shall be consistent in every CMSIS-RTOS.\r\nosStatus osKernelStart (void);\r\n\r\n/// Check if the RTOS kernel is already started.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osKernelRunning shall be consistent in every CMSIS-RTOS.\r\n/// \\return 0 RTOS is not started, 1 RTOS is started.\r\nint32_t osKernelRunning(void);\r\n\r\n#if (defined (osFeature_SysTick)  &&  (osFeature_SysTick != 0))     // System Timer available\r\n\r\n/// Get the RTOS kernel system timer counter \r\n/// \\note MUST REMAIN UNCHANGED: \\b osKernelSysTick shall be consistent in every CMSIS-RTOS.\r\n/// \\return RTOS kernel system timer as 32-bit value \r\nuint32_t osKernelSysTick (void);\r\n\r\n/// The RTOS kernel system timer frequency in Hz\r\n/// \\note Reflects the system timer setting and is typically defined in a configuration file.\r\n#define osKernelSysTickFrequency      (configTICK_RATE_HZ)\r\n\r\n/// Convert a microseconds value to a RTOS kernel system timer value.\r\n/// \\param         microsec     time value in microseconds.\r\n/// \\return time value normalized to the \\ref osKernelSysTickFrequency\r\n#define osKernelSysTickMicroSec(microsec) (((uint64_t)microsec * (osKernelSysTickFrequency)) / 1000000)\r\n\r\n#endif    // System Timer available\r\n\r\n//  ==== Thread Management ====\r\n\r\n/// Create a Thread Definition with function, priority, and stack requirements.\r\n/// \\param         name         name of the thread function.\r\n/// \\param         priority     initial priority of the thread function.\r\n/// \\param         instances    number of possible thread instances.\r\n/// \\param         stacksz      stack size (in bytes) requirements for the thread function.\r\n/// \\note CAN BE CHANGED: The parameters to \\b osThreadDef shall be consistent but the\r\n///       macro body is implementation specific in every CMSIS-RTOS.\r\n#if defined (osObjectsExternal)  // object is external\r\n#define osThreadDef(name, thread, priority, instances, stacksz)  \\\r\nextern const osThreadDef_t os_thread_def_##name\r\n#else                            // define the object\r\n\r\n#if( configSUPPORT_STATIC_ALLOCATION == 1 )\r\n#define osThreadDef(name, thread, priority, instances, stacksz)  \\\r\nconst osThreadDef_t os_thread_def_##name = \\\r\n{ #name, (thread), (priority), (instances), (stacksz), NULL, NULL }\r\n\r\n#define osThreadStaticDef(name, thread, priority, instances, stacksz, buffer, control)  \\\r\nconst osThreadDef_t os_thread_def_##name = \\\r\n{(char*) #name, (thread), (priority), (instances), (stacksz), (buffer), (control) }\r\n#else //configSUPPORT_STATIC_ALLOCATION == 0\r\n\r\n#define osThreadDef(name, thread, priority, instances, stacksz)  \\\r\nconst osThreadDef_t os_thread_def_##name = \\\r\n{ #name, (thread), (priority), (instances), (stacksz)}\r\n#endif\r\n#endif\r\n\r\n/// Access a Thread definition.\r\n/// \\param         name          name of the thread definition object.\r\n/// \\note CAN BE CHANGED: The parameter to \\b osThread shall be consistent but the\r\n///       macro body is implementation specific in every CMSIS-RTOS.\r\n#define osThread(name)  \\\r\n&os_thread_def_##name\r\n\r\n/// Create a thread and add it to Active Threads and set it to state READY.\r\n/// \\param[in]     thread_def    thread definition referenced with \\ref osThread.\r\n/// \\param[in]     argument      pointer that is passed to the thread function as start argument.\r\n/// \\return thread ID for reference by other functions or NULL in case of error.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osThreadCreate shall be consistent in every CMSIS-RTOS.\r\nosThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument);\r\n\r\n/// Return the thread ID of the current running thread.\r\n/// \\return thread ID for reference by other functions or NULL in case of error.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osThreadGetId shall be consistent in every CMSIS-RTOS.\r\nosThreadId osThreadGetId (void);\r\n\r\n/// Terminate execution of a thread and remove it from Active Threads.\r\n/// \\param[in]     thread_id   thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osThreadTerminate shall be consistent in every CMSIS-RTOS.\r\nosStatus osThreadTerminate (osThreadId thread_id);\r\n\r\n/// Pass control to next thread that is in state \\b READY.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osThreadYield shall be consistent in every CMSIS-RTOS.\r\nosStatus osThreadYield (void);\r\n\r\n/// Change priority of an active thread.\r\n/// \\param[in]     thread_id     thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId.\r\n/// \\param[in]     priority      new priority value for the thread function.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osThreadSetPriority shall be consistent in every CMSIS-RTOS.\r\nosStatus osThreadSetPriority (osThreadId thread_id, osPriority priority);\r\n\r\n/// Get current priority of an active thread.\r\n/// \\param[in]     thread_id     thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId.\r\n/// \\return current priority value of the thread function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osThreadGetPriority shall be consistent in every CMSIS-RTOS.\r\nosPriority osThreadGetPriority (osThreadId thread_id);\r\n\r\n\r\n//  ==== Generic Wait Functions ====\r\n\r\n/// Wait for Timeout (Time Delay).\r\n/// \\param[in]     millisec      time delay value\r\n/// \\return status code that indicates the execution status of the function.\r\nosStatus osDelay (uint32_t millisec);\r\n\r\n#if (defined (osFeature_Wait)  &&  (osFeature_Wait != 0))     // Generic Wait available\r\n\r\n/// Wait for Signal, Message, Mail, or Timeout.\r\n/// \\param[in] millisec          timeout value or 0 in case of no time-out\r\n/// \\return event that contains signal, message, or mail information or error code.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osWait shall be consistent in every CMSIS-RTOS.\r\nosEvent osWait (uint32_t millisec);\r\n\r\n#endif  // Generic Wait available\r\n\r\n\r\n//  ==== Timer Management Functions ====\r\n/// Define a Timer object.\r\n/// \\param         name          name of the timer object.\r\n/// \\param         function      name of the timer call back function.\r\n/// \\note CAN BE CHANGED: The parameter to \\b osTimerDef shall be consistent but the\r\n///       macro body is implementation specific in every CMSIS-RTOS.\r\n#if defined (osObjectsExternal)  // object is external\r\n#define osTimerDef(name, function)  \\\r\nextern const osTimerDef_t os_timer_def_##name\r\n#else                            // define the object\r\n\r\n#if( configSUPPORT_STATIC_ALLOCATION == 1 ) \r\n#define osTimerDef(name, function)  \\\r\nconst osTimerDef_t os_timer_def_##name = \\\r\n{ (function), NULL }\r\n\r\n#define osTimerStaticDef(name, function, control)  \\\r\nconst osTimerDef_t os_timer_def_##name = \\\r\n{ (function), (control) }\r\n#else //configSUPPORT_STATIC_ALLOCATION == 0\r\n#define osTimerDef(name, function)  \\\r\nconst osTimerDef_t os_timer_def_##name = \\\r\n{ (function) }\r\n#endif\r\n#endif\r\n\r\n/// Access a Timer definition.\r\n/// \\param         name          name of the timer object.\r\n/// \\note CAN BE CHANGED: The parameter to \\b osTimer shall be consistent but the\r\n///       macro body is implementation specific in every CMSIS-RTOS.\r\n#define osTimer(name) \\\r\n&os_timer_def_##name\r\n\r\n/// Create a timer.\r\n/// \\param[in]     timer_def     timer object referenced with \\ref osTimer.\r\n/// \\param[in]     type          osTimerOnce for one-shot or osTimerPeriodic for periodic behavior.\r\n/// \\param[in]     argument      argument to the timer call back function.\r\n/// \\return timer ID for reference by other functions or NULL in case of error.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osTimerCreate shall be consistent in every CMSIS-RTOS.\r\nosTimerId osTimerCreate (const osTimerDef_t *timer_def, os_timer_type type, void *argument);\r\n\r\n/// Start or restart a timer.\r\n/// \\param[in]     timer_id      timer ID obtained by \\ref osTimerCreate.\r\n/// \\param[in]     millisec      time delay value of the timer.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osTimerStart shall be consistent in every CMSIS-RTOS.\r\nosStatus osTimerStart (osTimerId timer_id, uint32_t millisec);\r\n\r\n/// Stop the timer.\r\n/// \\param[in]     timer_id      timer ID obtained by \\ref osTimerCreate.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osTimerStop shall be consistent in every CMSIS-RTOS.\r\nosStatus osTimerStop (osTimerId timer_id);\r\n\r\n/// Delete a timer that was created by \\ref osTimerCreate.\r\n/// \\param[in]     timer_id      timer ID obtained by \\ref osTimerCreate.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osTimerDelete shall be consistent in every CMSIS-RTOS.\r\nosStatus osTimerDelete (osTimerId timer_id);\r\n\r\n\r\n//  ==== Signal Management ====\r\n\r\n/// Set the specified Signal Flags of an active thread.\r\n/// \\param[in]     thread_id     thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId.\r\n/// \\param[in]     signals       specifies the signal flags of the thread that should be set.\r\n/// \\return osOK if successful, osErrorOS if failed.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osSignalSet shall be consistent in every CMSIS-RTOS.\r\nint32_t osSignalSet (osThreadId thread_id, int32_t signals);\r\n\r\n/// Clear the specified Signal Flags of an active thread.\r\n/// \\param[in]     thread_id     thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId.\r\n/// \\param[in]     signals       specifies the signal flags of the thread that shall be cleared.\r\n/// \\return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osSignalClear shall be consistent in every CMSIS-RTOS.\r\nint32_t osSignalClear (osThreadId thread_id, int32_t signals);\r\n\r\n/// Wait for one or more Signal Flags to become signaled for the current \\b RUNNING thread.\r\n/// \\param[in]     signals       wait until all specified signal flags set or 0 for any single signal flag.\r\n/// \\param[in]     millisec      timeout value or 0 in case of no time-out.\r\n/// \\return event flag information or error code.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osSignalWait shall be consistent in every CMSIS-RTOS.\r\nosEvent osSignalWait (int32_t signals, uint32_t millisec);\r\n\r\n\r\n//  ==== Mutex Management ====\r\n\r\n/// Define a Mutex.\r\n/// \\param         name          name of the mutex object.\r\n/// \\note CAN BE CHANGED: The parameter to \\b osMutexDef shall be consistent but the\r\n///       macro body is implementation specific in every CMSIS-RTOS.\r\n#if defined (osObjectsExternal)  // object is external\r\n#define osMutexDef(name)  \\\r\nextern const osMutexDef_t os_mutex_def_##name\r\n#else                            // define the object\r\n\r\n#if( configSUPPORT_STATIC_ALLOCATION == 1 )\r\n#define osMutexDef(name)  \\\r\nconst osMutexDef_t os_mutex_def_##name = { 0, NULL }\r\n\r\n#define osMutexStaticDef(name, control)  \\\r\nconst osMutexDef_t os_mutex_def_##name = { 0, (control) }\r\n#else //configSUPPORT_STATIC_ALLOCATION == 0\r\n#define osMutexDef(name)  \\\r\nconst osMutexDef_t os_mutex_def_##name = { 0 }\r\n\r\n#endif\r\n\r\n#endif\r\n\r\n/// Access a Mutex definition.\r\n/// \\param         name          name of the mutex object.\r\n/// \\note CAN BE CHANGED: The parameter to \\b osMutex shall be consistent but the\r\n///       macro body is implementation specific in every CMSIS-RTOS.\r\n#define osMutex(name)  \\\r\n&os_mutex_def_##name\r\n\r\n/// Create and Initialize a Mutex object.\r\n/// \\param[in]     mutex_def     mutex definition referenced with \\ref osMutex.\r\n/// \\return mutex ID for reference by other functions or NULL in case of error.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osMutexCreate shall be consistent in every CMSIS-RTOS.\r\nosMutexId osMutexCreate (const osMutexDef_t *mutex_def);\r\n\r\n/// Wait until a Mutex becomes available.\r\n/// \\param[in]     mutex_id      mutex ID obtained by \\ref osMutexCreate.\r\n/// \\param[in]     millisec      timeout value or 0 in case of no time-out.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osMutexWait shall be consistent in every CMSIS-RTOS.\r\nosStatus osMutexWait (osMutexId mutex_id, uint32_t millisec);\r\n\r\n/// Release a Mutex that was obtained by \\ref osMutexWait.\r\n/// \\param[in]     mutex_id      mutex ID obtained by \\ref osMutexCreate.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osMutexRelease shall be consistent in every CMSIS-RTOS.\r\nosStatus osMutexRelease (osMutexId mutex_id);\r\n\r\n/// Delete a Mutex that was created by \\ref osMutexCreate.\r\n/// \\param[in]     mutex_id      mutex ID obtained by \\ref osMutexCreate.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osMutexDelete shall be consistent in every CMSIS-RTOS.\r\nosStatus osMutexDelete (osMutexId mutex_id);\r\n\r\n\r\n//  ==== Semaphore Management Functions ====\r\n\r\n#if (defined (osFeature_Semaphore)  &&  (osFeature_Semaphore != 0))     // Semaphore available\r\n\r\n/// Define a Semaphore object.\r\n/// \\param         name          name of the semaphore object.\r\n/// \\note CAN BE CHANGED: The parameter to \\b osSemaphoreDef shall be consistent but the\r\n///       macro body is implementation specific in every CMSIS-RTOS.\r\n#if defined (osObjectsExternal)  // object is external\r\n#define osSemaphoreDef(name)  \\\r\nextern const osSemaphoreDef_t os_semaphore_def_##name\r\n#else                            // define the object\r\n\r\n#if( configSUPPORT_STATIC_ALLOCATION == 1 )\r\n#define osSemaphoreDef(name)  \\\r\nconst osSemaphoreDef_t os_semaphore_def_##name = { 0, NULL }\r\n\r\n#define osSemaphoreStaticDef(name, control)  \\\r\nconst osSemaphoreDef_t os_semaphore_def_##name = { 0, (control) }\r\n\r\n#else //configSUPPORT_STATIC_ALLOCATION == 0\r\n#define osSemaphoreDef(name)  \\\r\nconst osSemaphoreDef_t os_semaphore_def_##name = { 0 }\r\n#endif\r\n#endif\r\n\r\n/// Access a Semaphore definition.\r\n/// \\param         name          name of the semaphore object.\r\n/// \\note CAN BE CHANGED: The parameter to \\b osSemaphore shall be consistent but the\r\n///       macro body is implementation specific in every CMSIS-RTOS.\r\n#define osSemaphore(name)  \\\r\n&os_semaphore_def_##name\r\n\r\n/// Create and Initialize a Semaphore object used for managing resources.\r\n/// \\param[in]     semaphore_def semaphore definition referenced with \\ref osSemaphore.\r\n/// \\param[in]     count         number of available resources.\r\n/// \\return semaphore ID for reference by other functions or NULL in case of error.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osSemaphoreCreate shall be consistent in every CMSIS-RTOS.\r\nosSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t count);\r\n\r\n/// Wait until a Semaphore token becomes available.\r\n/// \\param[in]     semaphore_id  semaphore object referenced with \\ref osSemaphoreCreate.\r\n/// \\param[in]     millisec      timeout value or 0 in case of no time-out.\r\n/// \\return number of available tokens, or -1 in case of incorrect parameters.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osSemaphoreWait shall be consistent in every CMSIS-RTOS.\r\nint32_t osSemaphoreWait (osSemaphoreId semaphore_id, uint32_t millisec);\r\n\r\n/// Release a Semaphore token.\r\n/// \\param[in]     semaphore_id  semaphore object referenced with \\ref osSemaphoreCreate.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osSemaphoreRelease shall be consistent in every CMSIS-RTOS.\r\nosStatus osSemaphoreRelease (osSemaphoreId semaphore_id);\r\n\r\n/// Delete a Semaphore that was created by \\ref osSemaphoreCreate.\r\n/// \\param[in]     semaphore_id  semaphore object referenced with \\ref osSemaphoreCreate.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osSemaphoreDelete shall be consistent in every CMSIS-RTOS.\r\nosStatus osSemaphoreDelete (osSemaphoreId semaphore_id);\r\n\r\n#endif     // Semaphore available\r\n\r\n\r\n//  ==== Memory Pool Management Functions ====\r\n\r\n#if (defined (osFeature_Pool)  &&  (osFeature_Pool != 0))  // Memory Pool Management available\r\n\r\n/// \\brief Define a Memory Pool.\r\n/// \\param         name          name of the memory pool.\r\n/// \\param         no            maximum number of blocks (objects) in the memory pool.\r\n/// \\param         type          data type of a single block (object).\r\n/// \\note CAN BE CHANGED: The parameter to \\b osPoolDef shall be consistent but the\r\n///       macro body is implementation specific in every CMSIS-RTOS.\r\n#if defined (osObjectsExternal)  // object is external\r\n#define osPoolDef(name, no, type)   \\\r\nextern const osPoolDef_t os_pool_def_##name\r\n#else                            // define the object\r\n#define osPoolDef(name, no, type)   \\\r\nconst osPoolDef_t os_pool_def_##name = \\\r\n{ (no), sizeof(type), NULL }\r\n#endif\r\n\r\n/// \\brief Access a Memory Pool definition.\r\n/// \\param         name          name of the memory pool\r\n/// \\note CAN BE CHANGED: The parameter to \\b osPool shall be consistent but the\r\n///       macro body is implementation specific in every CMSIS-RTOS.\r\n#define osPool(name) \\\r\n&os_pool_def_##name\r\n\r\n/// Create and Initialize a memory pool.\r\n/// \\param[in]     pool_def      memory pool definition referenced with \\ref osPool.\r\n/// \\return memory pool ID for reference by other functions or NULL in case of error.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osPoolCreate shall be consistent in every CMSIS-RTOS.\r\nosPoolId osPoolCreate (const osPoolDef_t *pool_def);\r\n\r\n/// Allocate a memory block from a memory pool.\r\n/// \\param[in]     pool_id       memory pool ID obtain referenced with \\ref osPoolCreate.\r\n/// \\return address of the allocated memory block or NULL in case of no memory available.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osPoolAlloc shall be consistent in every CMSIS-RTOS.\r\nvoid *osPoolAlloc (osPoolId pool_id);\r\n\r\n/// Allocate a memory block from a memory pool and set memory block to zero.\r\n/// \\param[in]     pool_id       memory pool ID obtain referenced with \\ref osPoolCreate.\r\n/// \\return address of the allocated memory block or NULL in case of no memory available.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osPoolCAlloc shall be consistent in every CMSIS-RTOS.\r\nvoid *osPoolCAlloc (osPoolId pool_id);\r\n\r\n/// Return an allocated memory block back to a specific memory pool.\r\n/// \\param[in]     pool_id       memory pool ID obtain referenced with \\ref osPoolCreate.\r\n/// \\param[in]     block         address of the allocated memory block that is returned to the memory pool.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osPoolFree shall be consistent in every CMSIS-RTOS.\r\nosStatus osPoolFree (osPoolId pool_id, void *block);\r\n\r\n#endif   // Memory Pool Management available\r\n\r\n\r\n//  ==== Message Queue Management Functions ====\r\n\r\n#if (defined (osFeature_MessageQ)  &&  (osFeature_MessageQ != 0))     // Message Queues available\r\n\r\n/// \\brief Create a Message Queue Definition.\r\n/// \\param         name          name of the queue.\r\n/// \\param         queue_sz      maximum number of messages in the queue.\r\n/// \\param         type          data type of a single message element (for debugger).\r\n/// \\note CAN BE CHANGED: The parameter to \\b osMessageQDef shall be consistent but the\r\n///       macro body is implementation specific in every CMSIS-RTOS.\r\n#if defined (osObjectsExternal)  // object is external\r\n#define osMessageQDef(name, queue_sz, type)   \\\r\nextern const osMessageQDef_t os_messageQ_def_##name\r\n#else                            // define the object\r\n#if( configSUPPORT_STATIC_ALLOCATION == 1 )\r\n#define osMessageQDef(name, queue_sz, type)   \\\r\nconst osMessageQDef_t os_messageQ_def_##name = \\\r\n{ (queue_sz), sizeof (type), NULL, NULL  }\r\n\r\n#define osMessageQStaticDef(name, queue_sz, type, buffer, control)   \\\r\nconst osMessageQDef_t os_messageQ_def_##name = \\\r\n{ (queue_sz), sizeof (type) , (buffer), (control)}\r\n#else //configSUPPORT_STATIC_ALLOCATION == 1\r\n#define osMessageQDef(name, queue_sz, type)   \\\r\nconst osMessageQDef_t os_messageQ_def_##name = \\\r\n{ (queue_sz), sizeof (type) }\r\n\r\n#endif\r\n#endif\r\n\r\n/// \\brief Access a Message Queue Definition.\r\n/// \\param         name          name of the queue\r\n/// \\note CAN BE CHANGED: The parameter to \\b osMessageQ shall be consistent but the\r\n///       macro body is implementation specific in every CMSIS-RTOS.\r\n#define osMessageQ(name) \\\r\n&os_messageQ_def_##name\r\n\r\n/// Create and Initialize a Message Queue.\r\n/// \\param[in]     queue_def     queue definition referenced with \\ref osMessageQ.\r\n/// \\param[in]     thread_id     thread ID (obtained by \\ref osThreadCreate or \\ref osThreadGetId) or NULL.\r\n/// \\return message queue ID for reference by other functions or NULL in case of error.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osMessageCreate shall be consistent in every CMSIS-RTOS.\r\nosMessageQId osMessageCreate (const osMessageQDef_t *queue_def, osThreadId thread_id);\r\n\r\n/// Put a Message to a Queue.\r\n/// \\param[in]     queue_id      message queue ID obtained with \\ref osMessageCreate.\r\n/// \\param[in]     info          message information.\r\n/// \\param[in]     millisec      timeout value or 0 in case of no time-out.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osMessagePut shall be consistent in every CMSIS-RTOS.\r\nosStatus osMessagePut (osMessageQId queue_id, uint32_t info, uint32_t millisec);\r\n\r\n/// Get a Message or Wait for a Message from a Queue.\r\n/// \\param[in]     queue_id      message queue ID obtained with \\ref osMessageCreate.\r\n/// \\param[in]     millisec      timeout value or 0 in case of no time-out.\r\n/// \\return event information that includes status code.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osMessageGet shall be consistent in every CMSIS-RTOS.\r\nosEvent osMessageGet (osMessageQId queue_id, uint32_t millisec);\r\n\r\n#endif     // Message Queues available\r\n\r\n\r\n//  ==== Mail Queue Management Functions ====\r\n\r\n#if (defined (osFeature_MailQ)  &&  (osFeature_MailQ != 0))     // Mail Queues available\r\n\r\n/// \\brief Create a Mail Queue Definition.\r\n/// \\param         name          name of the queue\r\n/// \\param         queue_sz      maximum number of messages in queue\r\n/// \\param         type          data type of a single message element\r\n/// \\note CAN BE CHANGED: The parameter to \\b osMailQDef shall be consistent but the\r\n///       macro body is implementation specific in every CMSIS-RTOS.\r\n#if defined (osObjectsExternal)  // object is external\r\n#define osMailQDef(name, queue_sz, type) \\\r\nextern struct os_mailQ_cb *os_mailQ_cb_##name \\\r\nextern osMailQDef_t os_mailQ_def_##name\r\n#else                            // define the object\r\n#define osMailQDef(name, queue_sz, type) \\\r\nstruct os_mailQ_cb *os_mailQ_cb_##name; \\\r\nconst osMailQDef_t os_mailQ_def_##name =  \\\r\n{ (queue_sz), sizeof (type), (&os_mailQ_cb_##name) }\r\n#endif\r\n\r\n/// \\brief Access a Mail Queue Definition.\r\n/// \\param         name          name of the queue\r\n/// \\note CAN BE CHANGED: The parameter to \\b osMailQ shall be consistent but the\r\n///       macro body is implementation specific in every CMSIS-RTOS.\r\n#define osMailQ(name)  \\\r\n&os_mailQ_def_##name\r\n\r\n/// Create and Initialize mail queue.\r\n/// \\param[in]     queue_def     reference to the mail queue definition obtain with \\ref osMailQ\r\n/// \\param[in]     thread_id     thread ID (obtained by \\ref osThreadCreate or \\ref osThreadGetId) or NULL.\r\n/// \\return mail queue ID for reference by other functions or NULL in case of error.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osMailCreate shall be consistent in every CMSIS-RTOS.\r\nosMailQId osMailCreate (const osMailQDef_t *queue_def, osThreadId thread_id);\r\n\r\n/// Allocate a memory block from a mail.\r\n/// \\param[in]     queue_id      mail queue ID obtained with \\ref osMailCreate.\r\n/// \\param[in]     millisec      timeout value or 0 in case of no time-out\r\n/// \\return pointer to memory block that can be filled with mail or NULL in case of error.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osMailAlloc shall be consistent in every CMSIS-RTOS.\r\nvoid *osMailAlloc (osMailQId queue_id, uint32_t millisec);\r\n\r\n/// Allocate a memory block from a mail and set memory block to zero.\r\n/// \\param[in]     queue_id      mail queue ID obtained with \\ref osMailCreate.\r\n/// \\param[in]     millisec      timeout value or 0 in case of no time-out\r\n/// \\return pointer to memory block that can be filled with mail or NULL in case of error.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osMailCAlloc shall be consistent in every CMSIS-RTOS.\r\nvoid *osMailCAlloc (osMailQId queue_id, uint32_t millisec);\r\n\r\n/// Put a mail to a queue.\r\n/// \\param[in]     queue_id      mail queue ID obtained with \\ref osMailCreate.\r\n/// \\param[in]     mail          memory block previously allocated with \\ref osMailAlloc or \\ref osMailCAlloc.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osMailPut shall be consistent in every CMSIS-RTOS.\r\nosStatus osMailPut (osMailQId queue_id, void *mail);\r\n\r\n/// Get a mail from a queue.\r\n/// \\param[in]     queue_id      mail queue ID obtained with \\ref osMailCreate.\r\n/// \\param[in]     millisec      timeout value or 0 in case of no time-out\r\n/// \\return event that contains mail information or error code.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osMailGet shall be consistent in every CMSIS-RTOS.\r\nosEvent osMailGet (osMailQId queue_id, uint32_t millisec);\r\n\r\n/// Free a memory block from a mail.\r\n/// \\param[in]     queue_id      mail queue ID obtained with \\ref osMailCreate.\r\n/// \\param[in]     mail          pointer to the memory block that was obtained with \\ref osMailGet.\r\n/// \\return status code that indicates the execution status of the function.\r\n/// \\note MUST REMAIN UNCHANGED: \\b osMailFree shall be consistent in every CMSIS-RTOS.\r\nosStatus osMailFree (osMailQId queue_id, void *mail);\r\n\r\n#endif  // Mail Queues available\r\n\r\n/*************************** Additional specific APIs to Free RTOS ************/\r\n/**\r\n* @brief  Handles the tick increment\r\n* @param  none.\r\n* @retval none.\r\n*/\r\nvoid osSystickHandler(void);\r\n\r\n#if ( INCLUDE_eTaskGetState == 1 )\r\n/**\r\n* @brief  Obtain the state of any thread.\r\n* @param   thread_id   thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId.\r\n* @retval  the stae of the thread, states are encoded by the osThreadState enumerated type.\r\n*/\r\nosThreadState osThreadGetState(osThreadId thread_id);\r\n#endif /* INCLUDE_eTaskGetState */\r\n\r\n#if ( INCLUDE_eTaskGetState == 1 )\r\n/**\r\n* @brief Check if a thread is already suspended or not.\r\n* @param thread_id thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId.\r\n* @retval status code that indicates the execution status of the function.\r\n*/\r\n\r\nosStatus osThreadIsSuspended(osThreadId thread_id);\r\n\r\n#endif /* INCLUDE_eTaskGetState */\r\n\r\n/**\r\n* @brief  Suspend execution of a thread.\r\n* @param   thread_id   thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId.\r\n* @retval  status code that indicates the execution status of the function.\r\n*/\r\nosStatus osThreadSuspend (osThreadId thread_id);\r\n\r\n/**\r\n* @brief  Resume execution of a suspended thread.\r\n* @param   thread_id   thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId.\r\n* @retval  status code that indicates the execution status of the function.\r\n*/\r\nosStatus osThreadResume (osThreadId thread_id);\r\n\r\n/**\r\n* @brief  Suspend execution of a all active threads.\r\n* @retval  status code that indicates the execution status of the function.\r\n*/\r\nosStatus osThreadSuspendAll (void);\r\n\r\n/**\r\n* @brief  Resume execution of a all suspended threads.\r\n* @retval  status code that indicates the execution status of the function.\r\n*/\r\nosStatus osThreadResumeAll (void);\r\n\r\n/**\r\n* @brief  Delay a task until a specified time\r\n* @param   PreviousWakeTime   Pointer to a variable that holds the time at which the \r\n*          task was last unblocked. PreviousWakeTime must be initialised with the current time\r\n*          prior to its first use (PreviousWakeTime = osKernelSysTick() )\r\n* @param   millisec    time delay value\r\n* @retval  status code that indicates the execution status of the function.\r\n*/\r\nosStatus osDelayUntil (uint32_t *PreviousWakeTime, uint32_t millisec);\r\n\r\n/**\r\n* @brief   Abort the delay for a specific thread\r\n* @param   thread_id   thread ID obtained by \\ref osThreadCreate or \\ref osThreadGetId   \r\n* @retval  status code that indicates the execution status of the function.\r\n*/\r\nosStatus osAbortDelay(osThreadId thread_id);\r\n\r\n/**\r\n* @brief   Lists all the current threads, along with their current state \r\n*          and stack usage high water mark.\r\n* @param   buffer   A buffer into which the above mentioned details\r\n*          will be written\r\n* @retval  status code that indicates the execution status of the function.\r\n*/\r\nosStatus osThreadList (uint8_t *buffer);\r\n\r\n/**\r\n* @brief  Receive an item from a queue without removing the item from the queue.\r\n* @param  queue_id  message queue ID obtained with \\ref osMessageCreate.\r\n* @param  millisec  timeout value or 0 in case of no time-out.\r\n* @retval event information that includes status code.\r\n*/\r\nosEvent osMessagePeek (osMessageQId queue_id, uint32_t millisec);\r\n\r\n/**\r\n* @brief  Get the number of messaged stored in a queue.\r\n* @param  queue_id  message queue ID obtained with \\ref osMessageCreate.\r\n* @retval number of messages stored in a queue.\r\n*/\r\nuint32_t osMessageWaiting(osMessageQId queue_id);\r\n\r\n/**\r\n* @brief  Get the available space in a message queue.\r\n* @param  queue_id  message queue ID obtained with \\ref osMessageCreate.\r\n* @retval available space in a message queue.\r\n*/\r\nuint32_t osMessageAvailableSpace(osMessageQId queue_id);\r\n\r\n/**\r\n* @brief Delete a Message Queue\r\n* @param  queue_id  message queue ID obtained with \\ref osMessageCreate.\r\n* @retval  status code that indicates the execution status of the function.\r\n*/\r\nosStatus osMessageDelete (osMessageQId queue_id);\r\n\r\n/**\r\n* @brief  Create and Initialize a Recursive Mutex\r\n* @param  mutex_def     mutex definition referenced with \\ref osMutex.\r\n* @retval  mutex ID for reference by other functions or NULL in case of error..\r\n*/\r\nosMutexId osRecursiveMutexCreate (const osMutexDef_t *mutex_def);\r\n\r\n/**\r\n* @brief  Release a Recursive Mutex\r\n* @param   mutex_id      mutex ID obtained by \\ref osRecursiveMutexCreate.\r\n* @retval  status code that indicates the execution status of the function.\r\n*/\r\nosStatus osRecursiveMutexRelease (osMutexId mutex_id);\r\n\r\n/**\r\n* @brief  Release a Recursive Mutex\r\n* @param   mutex_id    mutex ID obtained by \\ref osRecursiveMutexCreate.\r\n* @param millisec      timeout value or 0 in case of no time-out.\r\n* @retval  status code that indicates the execution status of the function.\r\n*/\r\nosStatus osRecursiveMutexWait (osMutexId mutex_id, uint32_t millisec);\r\n\r\n/**\r\n* @brief  Returns the current count value of a counting semaphore\r\n* @param   semaphore_id  semaphore_id ID obtained by \\ref osSemaphoreCreate.\r\n* @retval  count value\r\n*/\r\nuint32_t osSemaphoreGetCount(osSemaphoreId semaphore_id);\r\n\r\n#ifdef  __cplusplus\r\n}\r\n#endif\r\n\r\n#endif  // _CMSIS_OS_H\r\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/croutine.c",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n#include \"FreeRTOS.h\"\n#include \"task.h\"\n#include \"croutine.h\"\n\n/* Remove the whole file if co-routines are not being used. */\n#if ( configUSE_CO_ROUTINES != 0 )\n\n/*\n * Some kernel aware debuggers require data to be viewed to be global, rather\n * than file scope.\n */\n    #ifdef portREMOVE_STATIC_QUALIFIER\n        #define static\n    #endif\n\n\n/* Lists for ready and blocked co-routines. --------------------*/\n    static List_t pxReadyCoRoutineLists[ configMAX_CO_ROUTINE_PRIORITIES ]; /**< Prioritised ready co-routines. */\n    static List_t xDelayedCoRoutineList1;                                   /**< Delayed co-routines. */\n    static List_t xDelayedCoRoutineList2;                                   /**< Delayed co-routines (two lists are used - one for delays that have overflowed the current tick count. */\n    static List_t * pxDelayedCoRoutineList = NULL;                          /**< Points to the delayed co-routine list currently being used. */\n    static List_t * pxOverflowDelayedCoRoutineList = NULL;                  /**< Points to the delayed co-routine list currently being used to hold co-routines that have overflowed the current tick count. */\n    static List_t xPendingReadyCoRoutineList;                               /**< Holds co-routines that have been readied by an external event.  They cannot be added directly to the ready lists as the ready lists cannot be accessed by interrupts. */\n\n/* Other file private variables. --------------------------------*/\n    CRCB_t * pxCurrentCoRoutine = NULL;\n    static UBaseType_t uxTopCoRoutineReadyPriority = ( UBaseType_t ) 0U;\n    static TickType_t xCoRoutineTickCount = ( TickType_t ) 0U;\n    static TickType_t xLastTickCount = ( TickType_t ) 0U;\n    static TickType_t xPassedTicks = ( TickType_t ) 0U;\n\n/* The initial state of the co-routine when it is created. */\n    #define corINITIAL_STATE    ( 0 )\n\n/*\n * Place the co-routine represented by pxCRCB into the appropriate ready queue\n * for the priority.  It is inserted at the end of the list.\n *\n * This macro accesses the co-routine ready lists and therefore must not be\n * used from within an ISR.\n */\n    #define prvAddCoRoutineToReadyQueue( pxCRCB )                                                                               \\\n    do {                                                                                                                        \\\n        if( ( pxCRCB )->uxPriority > uxTopCoRoutineReadyPriority )                                                              \\\n        {                                                                                                                       \\\n            uxTopCoRoutineReadyPriority = ( pxCRCB )->uxPriority;                                                               \\\n        }                                                                                                                       \\\n        vListInsertEnd( ( List_t * ) &( pxReadyCoRoutineLists[ ( pxCRCB )->uxPriority ] ), &( ( pxCRCB )->xGenericListItem ) ); \\\n    } while( 0 )\n\n/*\n * Utility to ready all the lists used by the scheduler.  This is called\n * automatically upon the creation of the first co-routine.\n */\n    static void prvInitialiseCoRoutineLists( void );\n\n/*\n * Co-routines that are readied by an interrupt cannot be placed directly into\n * the ready lists (there is no mutual exclusion).  Instead they are placed in\n * in the pending ready list in order that they can later be moved to the ready\n * list by the co-routine scheduler.\n */\n    static void prvCheckPendingReadyList( void );\n\n/*\n * Macro that looks at the list of co-routines that are currently delayed to\n * see if any require waking.\n *\n * Co-routines are stored in the queue in the order of their wake time -\n * meaning once one co-routine has been found whose timer has not expired\n * we need not look any further down the list.\n */\n    static void prvCheckDelayedList( void );\n\n/*-----------------------------------------------------------*/\n\n    BaseType_t xCoRoutineCreate( crCOROUTINE_CODE pxCoRoutineCode,\n                                 UBaseType_t uxPriority,\n                                 UBaseType_t uxIndex )\n    {\n        BaseType_t xReturn;\n        CRCB_t * pxCoRoutine;\n\n        traceENTER_xCoRoutineCreate( pxCoRoutineCode, uxPriority, uxIndex );\n\n        /* Allocate the memory that will store the co-routine control block. */\n        /* MISRA Ref 11.5.1 [Malloc memory assignment] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n        /* coverity[misra_c_2012_rule_11_5_violation] */\n        pxCoRoutine = ( CRCB_t * ) pvPortMalloc( sizeof( CRCB_t ) );\n\n        if( pxCoRoutine )\n        {\n            /* If pxCurrentCoRoutine is NULL then this is the first co-routine to\n            * be created and the co-routine data structures need initialising. */\n            if( pxCurrentCoRoutine == NULL )\n            {\n                pxCurrentCoRoutine = pxCoRoutine;\n                prvInitialiseCoRoutineLists();\n            }\n\n            /* Check the priority is within limits. */\n            if( uxPriority >= configMAX_CO_ROUTINE_PRIORITIES )\n            {\n                uxPriority = configMAX_CO_ROUTINE_PRIORITIES - 1;\n            }\n\n            /* Fill out the co-routine control block from the function parameters. */\n            pxCoRoutine->uxState = corINITIAL_STATE;\n            pxCoRoutine->uxPriority = uxPriority;\n            pxCoRoutine->uxIndex = uxIndex;\n            pxCoRoutine->pxCoRoutineFunction = pxCoRoutineCode;\n\n            /* Initialise all the other co-routine control block parameters. */\n            vListInitialiseItem( &( pxCoRoutine->xGenericListItem ) );\n            vListInitialiseItem( &( pxCoRoutine->xEventListItem ) );\n\n            /* Set the co-routine control block as a link back from the ListItem_t.\n             * This is so we can get back to the containing CRCB from a generic item\n             * in a list. */\n            listSET_LIST_ITEM_OWNER( &( pxCoRoutine->xGenericListItem ), pxCoRoutine );\n            listSET_LIST_ITEM_OWNER( &( pxCoRoutine->xEventListItem ), pxCoRoutine );\n\n            /* Event lists are always in priority order. */\n            listSET_LIST_ITEM_VALUE( &( pxCoRoutine->xEventListItem ), ( ( TickType_t ) configMAX_CO_ROUTINE_PRIORITIES - ( TickType_t ) uxPriority ) );\n\n            /* Now the co-routine has been initialised it can be added to the ready\n             * list at the correct priority. */\n            prvAddCoRoutineToReadyQueue( pxCoRoutine );\n\n            xReturn = pdPASS;\n        }\n        else\n        {\n            xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;\n        }\n\n        traceRETURN_xCoRoutineCreate( xReturn );\n\n        return xReturn;\n    }\n/*-----------------------------------------------------------*/\n\n    void vCoRoutineAddToDelayedList( TickType_t xTicksToDelay,\n                                     List_t * pxEventList )\n    {\n        TickType_t xTimeToWake;\n\n        traceENTER_vCoRoutineAddToDelayedList( xTicksToDelay, pxEventList );\n\n        /* Calculate the time to wake - this may overflow but this is\n         * not a problem. */\n        xTimeToWake = xCoRoutineTickCount + xTicksToDelay;\n\n        /* We must remove ourselves from the ready list before adding\n         * ourselves to the blocked list as the same list item is used for\n         * both lists. */\n        ( void ) uxListRemove( ( ListItem_t * ) &( pxCurrentCoRoutine->xGenericListItem ) );\n\n        /* The list item will be inserted in wake time order. */\n        listSET_LIST_ITEM_VALUE( &( pxCurrentCoRoutine->xGenericListItem ), xTimeToWake );\n\n        if( xTimeToWake < xCoRoutineTickCount )\n        {\n            /* Wake time has overflowed.  Place this item in the\n             * overflow list. */\n            vListInsert( ( List_t * ) pxOverflowDelayedCoRoutineList, ( ListItem_t * ) &( pxCurrentCoRoutine->xGenericListItem ) );\n        }\n        else\n        {\n            /* The wake time has not overflowed, so we can use the\n             * current block list. */\n            vListInsert( ( List_t * ) pxDelayedCoRoutineList, ( ListItem_t * ) &( pxCurrentCoRoutine->xGenericListItem ) );\n        }\n\n        if( pxEventList )\n        {\n            /* Also add the co-routine to an event list.  If this is done then the\n             * function must be called with interrupts disabled. */\n            vListInsert( pxEventList, &( pxCurrentCoRoutine->xEventListItem ) );\n        }\n\n        traceRETURN_vCoRoutineAddToDelayedList();\n    }\n/*-----------------------------------------------------------*/\n\n    static void prvCheckPendingReadyList( void )\n    {\n        /* Are there any co-routines waiting to get moved to the ready list?  These\n         * are co-routines that have been readied by an ISR.  The ISR cannot access\n         * the ready lists itself. */\n        while( listLIST_IS_EMPTY( &xPendingReadyCoRoutineList ) == pdFALSE )\n        {\n            CRCB_t * pxUnblockedCRCB;\n\n            /* The pending ready list can be accessed by an ISR. */\n            portDISABLE_INTERRUPTS();\n            {\n                pxUnblockedCRCB = ( CRCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingReadyCoRoutineList ) );\n                ( void ) uxListRemove( &( pxUnblockedCRCB->xEventListItem ) );\n            }\n            portENABLE_INTERRUPTS();\n\n            ( void ) uxListRemove( &( pxUnblockedCRCB->xGenericListItem ) );\n            prvAddCoRoutineToReadyQueue( pxUnblockedCRCB );\n        }\n    }\n/*-----------------------------------------------------------*/\n\n    static void prvCheckDelayedList( void )\n    {\n        CRCB_t * pxCRCB;\n\n        xPassedTicks = xTaskGetTickCount() - xLastTickCount;\n\n        while( xPassedTicks )\n        {\n            xCoRoutineTickCount++;\n            xPassedTicks--;\n\n            /* If the tick count has overflowed we need to swap the ready lists. */\n            if( xCoRoutineTickCount == 0 )\n            {\n                List_t * pxTemp;\n\n                /* Tick count has overflowed so we need to swap the delay lists.  If there are\n                 * any items in pxDelayedCoRoutineList here then there is an error! */\n                pxTemp = pxDelayedCoRoutineList;\n                pxDelayedCoRoutineList = pxOverflowDelayedCoRoutineList;\n                pxOverflowDelayedCoRoutineList = pxTemp;\n            }\n\n            /* See if this tick has made a timeout expire. */\n            while( listLIST_IS_EMPTY( pxDelayedCoRoutineList ) == pdFALSE )\n            {\n                pxCRCB = ( CRCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxDelayedCoRoutineList );\n\n                if( xCoRoutineTickCount < listGET_LIST_ITEM_VALUE( &( pxCRCB->xGenericListItem ) ) )\n                {\n                    /* Timeout not yet expired. */\n                    break;\n                }\n\n                portDISABLE_INTERRUPTS();\n                {\n                    /* The event could have occurred just before this critical\n                     *  section.  If this is the case then the generic list item will\n                     *  have been moved to the pending ready list and the following\n                     *  line is still valid.  Also the pvContainer parameter will have\n                     *  been set to NULL so the following lines are also valid. */\n                    ( void ) uxListRemove( &( pxCRCB->xGenericListItem ) );\n\n                    /* Is the co-routine waiting on an event also? */\n                    if( pxCRCB->xEventListItem.pxContainer )\n                    {\n                        ( void ) uxListRemove( &( pxCRCB->xEventListItem ) );\n                    }\n                }\n                portENABLE_INTERRUPTS();\n\n                prvAddCoRoutineToReadyQueue( pxCRCB );\n            }\n        }\n\n        xLastTickCount = xCoRoutineTickCount;\n    }\n/*-----------------------------------------------------------*/\n\n    void vCoRoutineSchedule( void )\n    {\n        traceENTER_vCoRoutineSchedule();\n\n        /* Only run a co-routine after prvInitialiseCoRoutineLists() has been\n         * called.  prvInitialiseCoRoutineLists() is called automatically when a\n         * co-routine is created. */\n        if( pxDelayedCoRoutineList != NULL )\n        {\n            /* See if any co-routines readied by events need moving to the ready lists. */\n            prvCheckPendingReadyList();\n\n            /* See if any delayed co-routines have timed out. */\n            prvCheckDelayedList();\n\n            /* Find the highest priority queue that contains ready co-routines. */\n            while( listLIST_IS_EMPTY( &( pxReadyCoRoutineLists[ uxTopCoRoutineReadyPriority ] ) ) )\n            {\n                if( uxTopCoRoutineReadyPriority == 0 )\n                {\n                    /* No more co-routines to check. */\n                    return;\n                }\n\n                --uxTopCoRoutineReadyPriority;\n            }\n\n            /* listGET_OWNER_OF_NEXT_ENTRY walks through the list, so the co-routines\n             * of the same priority get an equal share of the processor time. */\n            listGET_OWNER_OF_NEXT_ENTRY( pxCurrentCoRoutine, &( pxReadyCoRoutineLists[ uxTopCoRoutineReadyPriority ] ) );\n\n            /* Call the co-routine. */\n            ( pxCurrentCoRoutine->pxCoRoutineFunction )( pxCurrentCoRoutine, pxCurrentCoRoutine->uxIndex );\n        }\n\n        traceRETURN_vCoRoutineSchedule();\n    }\n/*-----------------------------------------------------------*/\n\n    static void prvInitialiseCoRoutineLists( void )\n    {\n        UBaseType_t uxPriority;\n\n        for( uxPriority = 0; uxPriority < configMAX_CO_ROUTINE_PRIORITIES; uxPriority++ )\n        {\n            vListInitialise( ( List_t * ) &( pxReadyCoRoutineLists[ uxPriority ] ) );\n        }\n\n        vListInitialise( ( List_t * ) &xDelayedCoRoutineList1 );\n        vListInitialise( ( List_t * ) &xDelayedCoRoutineList2 );\n        vListInitialise( ( List_t * ) &xPendingReadyCoRoutineList );\n\n        /* Start with pxDelayedCoRoutineList using list1 and the\n         * pxOverflowDelayedCoRoutineList using list2. */\n        pxDelayedCoRoutineList = &xDelayedCoRoutineList1;\n        pxOverflowDelayedCoRoutineList = &xDelayedCoRoutineList2;\n    }\n/*-----------------------------------------------------------*/\n\n    BaseType_t xCoRoutineRemoveFromEventList( const List_t * pxEventList )\n    {\n        CRCB_t * pxUnblockedCRCB;\n        BaseType_t xReturn;\n\n        traceENTER_xCoRoutineRemoveFromEventList( pxEventList );\n\n        /* This function is called from within an interrupt.  It can only access\n         * event lists and the pending ready list.  This function assumes that a\n         * check has already been made to ensure pxEventList is not empty. */\n        pxUnblockedCRCB = ( CRCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxEventList );\n        ( void ) uxListRemove( &( pxUnblockedCRCB->xEventListItem ) );\n        vListInsertEnd( ( List_t * ) &( xPendingReadyCoRoutineList ), &( pxUnblockedCRCB->xEventListItem ) );\n\n        if( pxUnblockedCRCB->uxPriority >= pxCurrentCoRoutine->uxPriority )\n        {\n            xReturn = pdTRUE;\n        }\n        else\n        {\n            xReturn = pdFALSE;\n        }\n\n        traceRETURN_xCoRoutineRemoveFromEventList( xReturn );\n\n        return xReturn;\n    }\n/*-----------------------------------------------------------*/\n\n/*\n * Reset state in this file. This state is normally initialized at start up.\n * This function must be called by the application before restarting the\n * scheduler.\n */\n    void vCoRoutineResetState( void )\n    {\n        /* Lists for ready and blocked co-routines. */\n        pxDelayedCoRoutineList = NULL;\n        pxOverflowDelayedCoRoutineList = NULL;\n\n        /* Other file private variables. */\n        pxCurrentCoRoutine = NULL;\n        uxTopCoRoutineReadyPriority = ( UBaseType_t ) 0U;\n        xCoRoutineTickCount = ( TickType_t ) 0U;\n        xLastTickCount = ( TickType_t ) 0U;\n        xPassedTicks = ( TickType_t ) 0U;\n    }\n/*-----------------------------------------------------------*/\n\n#endif /* configUSE_CO_ROUTINES == 0 */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n/* Standard includes. */\n#include <stdlib.h>\n\n/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining\n * all the API functions to use the MPU wrappers. That should only be done when\n * task.h is included from an application file. */\n#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE\n\n/* FreeRTOS includes. */\n#include \"FreeRTOS.h\"\n#include \"task.h\"\n#include \"timers.h\"\n#include \"event_groups.h\"\n\n/* The MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined\n * for the header files above, but not in this file, in order to generate the\n * correct privileged Vs unprivileged linkage and placement. */\n#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE\n\n/* This entire source file will be skipped if the application is not configured\n * to include event groups functionality. This #if is closed at the very bottom\n * of this file. If you want to include event groups then ensure\n * configUSE_EVENT_GROUPS is set to 1 in FreeRTOSConfig.h. */\n#if ( configUSE_EVENT_GROUPS == 1 )\n\n    typedef struct EventGroupDef_t\n    {\n        EventBits_t uxEventBits;\n        List_t xTasksWaitingForBits; /**< List of tasks waiting for a bit to be set. */\n\n        #if ( configUSE_TRACE_FACILITY == 1 )\n            UBaseType_t uxEventGroupNumber;\n        #endif\n\n        #if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )\n            uint8_t ucStaticallyAllocated; /**< Set to pdTRUE if the event group is statically allocated to ensure no attempt is made to free the memory. */\n        #endif\n    } EventGroup_t;\n\n/*-----------------------------------------------------------*/\n\n/*\n * Test the bits set in uxCurrentEventBits to see if the wait condition is met.\n * The wait condition is defined by xWaitForAllBits.  If xWaitForAllBits is\n * pdTRUE then the wait condition is met if all the bits set in uxBitsToWaitFor\n * are also set in uxCurrentEventBits.  If xWaitForAllBits is pdFALSE then the\n * wait condition is met if any of the bits set in uxBitsToWait for are also set\n * in uxCurrentEventBits.\n */\n    static BaseType_t prvTestWaitCondition( const EventBits_t uxCurrentEventBits,\n                                            const EventBits_t uxBitsToWaitFor,\n                                            const BaseType_t xWaitForAllBits ) PRIVILEGED_FUNCTION;\n\n/*-----------------------------------------------------------*/\n\n    #if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n\n        EventGroupHandle_t xEventGroupCreateStatic( StaticEventGroup_t * pxEventGroupBuffer )\n        {\n            EventGroup_t * pxEventBits;\n\n            traceENTER_xEventGroupCreateStatic( pxEventGroupBuffer );\n\n            /* A StaticEventGroup_t object must be provided. */\n            configASSERT( pxEventGroupBuffer );\n\n            #if ( configASSERT_DEFINED == 1 )\n            {\n                /* Sanity check that the size of the structure used to declare a\n                 * variable of type StaticEventGroup_t equals the size of the real\n                 * event group structure. */\n                volatile size_t xSize = sizeof( StaticEventGroup_t );\n                configASSERT( xSize == sizeof( EventGroup_t ) );\n            }\n            #endif /* configASSERT_DEFINED */\n\n            /* The user has provided a statically allocated event group - use it. */\n            /* MISRA Ref 11.3.1 [Misaligned access] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-113 */\n            /* coverity[misra_c_2012_rule_11_3_violation] */\n            pxEventBits = ( EventGroup_t * ) pxEventGroupBuffer;\n\n            if( pxEventBits != NULL )\n            {\n                pxEventBits->uxEventBits = 0;\n                vListInitialise( &( pxEventBits->xTasksWaitingForBits ) );\n\n                #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n                {\n                    /* Both static and dynamic allocation can be used, so note that\n                     * this event group was created statically in case the event group\n                     * is later deleted. */\n                    pxEventBits->ucStaticallyAllocated = pdTRUE;\n                }\n                #endif /* configSUPPORT_DYNAMIC_ALLOCATION */\n\n                traceEVENT_GROUP_CREATE( pxEventBits );\n            }\n            else\n            {\n                /* xEventGroupCreateStatic should only ever be called with\n                 * pxEventGroupBuffer pointing to a pre-allocated (compile time\n                 * allocated) StaticEventGroup_t variable. */\n                traceEVENT_GROUP_CREATE_FAILED();\n            }\n\n            traceRETURN_xEventGroupCreateStatic( pxEventBits );\n\n            return pxEventBits;\n        }\n\n    #endif /* configSUPPORT_STATIC_ALLOCATION */\n/*-----------------------------------------------------------*/\n\n    #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n\n        EventGroupHandle_t xEventGroupCreate( void )\n        {\n            EventGroup_t * pxEventBits;\n\n            traceENTER_xEventGroupCreate();\n\n            /* MISRA Ref 11.5.1 [Malloc memory assignment] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n            /* coverity[misra_c_2012_rule_11_5_violation] */\n            pxEventBits = ( EventGroup_t * ) pvPortMalloc( sizeof( EventGroup_t ) );\n\n            if( pxEventBits != NULL )\n            {\n                pxEventBits->uxEventBits = 0;\n                vListInitialise( &( pxEventBits->xTasksWaitingForBits ) );\n\n                #if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n                {\n                    /* Both static and dynamic allocation can be used, so note this\n                     * event group was allocated statically in case the event group is\n                     * later deleted. */\n                    pxEventBits->ucStaticallyAllocated = pdFALSE;\n                }\n                #endif /* configSUPPORT_STATIC_ALLOCATION */\n\n                traceEVENT_GROUP_CREATE( pxEventBits );\n            }\n            else\n            {\n                traceEVENT_GROUP_CREATE_FAILED();\n            }\n\n            traceRETURN_xEventGroupCreate( pxEventBits );\n\n            return pxEventBits;\n        }\n\n    #endif /* configSUPPORT_DYNAMIC_ALLOCATION */\n/*-----------------------------------------------------------*/\n\n    EventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup,\n                                 const EventBits_t uxBitsToSet,\n                                 const EventBits_t uxBitsToWaitFor,\n                                 TickType_t xTicksToWait )\n    {\n        EventBits_t uxOriginalBitValue, uxReturn;\n        EventGroup_t * pxEventBits = xEventGroup;\n        BaseType_t xAlreadyYielded;\n        BaseType_t xTimeoutOccurred = pdFALSE;\n\n        traceENTER_xEventGroupSync( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTicksToWait );\n\n        configASSERT( ( uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES ) == 0 );\n        configASSERT( uxBitsToWaitFor != 0 );\n        #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )\n        {\n            configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );\n        }\n        #endif\n\n        vTaskSuspendAll();\n        {\n            uxOriginalBitValue = pxEventBits->uxEventBits;\n\n            ( void ) xEventGroupSetBits( xEventGroup, uxBitsToSet );\n\n            if( ( ( uxOriginalBitValue | uxBitsToSet ) & uxBitsToWaitFor ) == uxBitsToWaitFor )\n            {\n                /* All the rendezvous bits are now set - no need to block. */\n                uxReturn = ( uxOriginalBitValue | uxBitsToSet );\n\n                /* Rendezvous always clear the bits.  They will have been cleared\n                 * already unless this is the only task in the rendezvous. */\n                pxEventBits->uxEventBits &= ~uxBitsToWaitFor;\n\n                xTicksToWait = 0;\n            }\n            else\n            {\n                if( xTicksToWait != ( TickType_t ) 0 )\n                {\n                    traceEVENT_GROUP_SYNC_BLOCK( xEventGroup, uxBitsToSet, uxBitsToWaitFor );\n\n                    /* Store the bits that the calling task is waiting for in the\n                     * task's event list item so the kernel knows when a match is\n                     * found.  Then enter the blocked state. */\n                    vTaskPlaceOnUnorderedEventList( &( pxEventBits->xTasksWaitingForBits ), ( uxBitsToWaitFor | eventCLEAR_EVENTS_ON_EXIT_BIT | eventWAIT_FOR_ALL_BITS ), xTicksToWait );\n\n                    /* This assignment is obsolete as uxReturn will get set after\n                     * the task unblocks, but some compilers mistakenly generate a\n                     * warning about uxReturn being returned without being set if the\n                     * assignment is omitted. */\n                    uxReturn = 0;\n                }\n                else\n                {\n                    /* The rendezvous bits were not set, but no block time was\n                     * specified - just return the current event bit value. */\n                    uxReturn = pxEventBits->uxEventBits;\n                    xTimeoutOccurred = pdTRUE;\n                }\n            }\n        }\n        xAlreadyYielded = xTaskResumeAll();\n\n        if( xTicksToWait != ( TickType_t ) 0 )\n        {\n            if( xAlreadyYielded == pdFALSE )\n            {\n                taskYIELD_WITHIN_API();\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n\n            /* The task blocked to wait for its required bits to be set - at this\n             * point either the required bits were set or the block time expired.  If\n             * the required bits were set they will have been stored in the task's\n             * event list item, and they should now be retrieved then cleared. */\n            uxReturn = uxTaskResetEventItemValue();\n\n            if( ( uxReturn & eventUNBLOCKED_DUE_TO_BIT_SET ) == ( EventBits_t ) 0 )\n            {\n                /* The task timed out, just return the current event bit value. */\n                taskENTER_CRITICAL();\n                {\n                    uxReturn = pxEventBits->uxEventBits;\n\n                    /* Although the task got here because it timed out before the\n                     * bits it was waiting for were set, it is possible that since it\n                     * unblocked another task has set the bits.  If this is the case\n                     * then it needs to clear the bits before exiting. */\n                    if( ( uxReturn & uxBitsToWaitFor ) == uxBitsToWaitFor )\n                    {\n                        pxEventBits->uxEventBits &= ~uxBitsToWaitFor;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                taskEXIT_CRITICAL();\n\n                xTimeoutOccurred = pdTRUE;\n            }\n            else\n            {\n                /* The task unblocked because the bits were set. */\n            }\n\n            /* Control bits might be set as the task had blocked should not be\n             * returned. */\n            uxReturn &= ~eventEVENT_BITS_CONTROL_BYTES;\n        }\n\n        traceEVENT_GROUP_SYNC_END( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTimeoutOccurred );\n\n        /* Prevent compiler warnings when trace macros are not used. */\n        ( void ) xTimeoutOccurred;\n\n        traceRETURN_xEventGroupSync( uxReturn );\n\n        return uxReturn;\n    }\n/*-----------------------------------------------------------*/\n\n    EventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup,\n                                     const EventBits_t uxBitsToWaitFor,\n                                     const BaseType_t xClearOnExit,\n                                     const BaseType_t xWaitForAllBits,\n                                     TickType_t xTicksToWait )\n    {\n        EventGroup_t * pxEventBits = xEventGroup;\n        EventBits_t uxReturn, uxControlBits = 0;\n        BaseType_t xWaitConditionMet, xAlreadyYielded;\n        BaseType_t xTimeoutOccurred = pdFALSE;\n\n        traceENTER_xEventGroupWaitBits( xEventGroup, uxBitsToWaitFor, xClearOnExit, xWaitForAllBits, xTicksToWait );\n\n        /* Check the user is not attempting to wait on the bits used by the kernel\n         * itself, and that at least one bit is being requested. */\n        configASSERT( xEventGroup );\n        configASSERT( ( uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES ) == 0 );\n        configASSERT( uxBitsToWaitFor != 0 );\n        #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )\n        {\n            configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );\n        }\n        #endif\n\n        vTaskSuspendAll();\n        {\n            const EventBits_t uxCurrentEventBits = pxEventBits->uxEventBits;\n\n            /* Check to see if the wait condition is already met or not. */\n            xWaitConditionMet = prvTestWaitCondition( uxCurrentEventBits, uxBitsToWaitFor, xWaitForAllBits );\n\n            if( xWaitConditionMet != pdFALSE )\n            {\n                /* The wait condition has already been met so there is no need to\n                 * block. */\n                uxReturn = uxCurrentEventBits;\n                xTicksToWait = ( TickType_t ) 0;\n\n                /* Clear the wait bits if requested to do so. */\n                if( xClearOnExit != pdFALSE )\n                {\n                    pxEventBits->uxEventBits &= ~uxBitsToWaitFor;\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else if( xTicksToWait == ( TickType_t ) 0 )\n            {\n                /* The wait condition has not been met, but no block time was\n                 * specified, so just return the current value. */\n                uxReturn = uxCurrentEventBits;\n                xTimeoutOccurred = pdTRUE;\n            }\n            else\n            {\n                /* The task is going to block to wait for its required bits to be\n                 * set.  uxControlBits are used to remember the specified behaviour of\n                 * this call to xEventGroupWaitBits() - for use when the event bits\n                 * unblock the task. */\n                if( xClearOnExit != pdFALSE )\n                {\n                    uxControlBits |= eventCLEAR_EVENTS_ON_EXIT_BIT;\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n\n                if( xWaitForAllBits != pdFALSE )\n                {\n                    uxControlBits |= eventWAIT_FOR_ALL_BITS;\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n\n                /* Store the bits that the calling task is waiting for in the\n                 * task's event list item so the kernel knows when a match is\n                 * found.  Then enter the blocked state. */\n                vTaskPlaceOnUnorderedEventList( &( pxEventBits->xTasksWaitingForBits ), ( uxBitsToWaitFor | uxControlBits ), xTicksToWait );\n\n                /* This is obsolete as it will get set after the task unblocks, but\n                 * some compilers mistakenly generate a warning about the variable\n                 * being returned without being set if it is not done. */\n                uxReturn = 0;\n\n                traceEVENT_GROUP_WAIT_BITS_BLOCK( xEventGroup, uxBitsToWaitFor );\n            }\n        }\n        xAlreadyYielded = xTaskResumeAll();\n\n        if( xTicksToWait != ( TickType_t ) 0 )\n        {\n            if( xAlreadyYielded == pdFALSE )\n            {\n                taskYIELD_WITHIN_API();\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n\n            /* The task blocked to wait for its required bits to be set - at this\n             * point either the required bits were set or the block time expired.  If\n             * the required bits were set they will have been stored in the task's\n             * event list item, and they should now be retrieved then cleared. */\n            uxReturn = uxTaskResetEventItemValue();\n\n            if( ( uxReturn & eventUNBLOCKED_DUE_TO_BIT_SET ) == ( EventBits_t ) 0 )\n            {\n                taskENTER_CRITICAL();\n                {\n                    /* The task timed out, just return the current event bit value. */\n                    uxReturn = pxEventBits->uxEventBits;\n\n                    /* It is possible that the event bits were updated between this\n                     * task leaving the Blocked state and running again. */\n                    if( prvTestWaitCondition( uxReturn, uxBitsToWaitFor, xWaitForAllBits ) != pdFALSE )\n                    {\n                        if( xClearOnExit != pdFALSE )\n                        {\n                            pxEventBits->uxEventBits &= ~uxBitsToWaitFor;\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n\n                    xTimeoutOccurred = pdTRUE;\n                }\n                taskEXIT_CRITICAL();\n            }\n            else\n            {\n                /* The task unblocked because the bits were set. */\n            }\n\n            /* The task blocked so control bits may have been set. */\n            uxReturn &= ~eventEVENT_BITS_CONTROL_BYTES;\n        }\n\n        traceEVENT_GROUP_WAIT_BITS_END( xEventGroup, uxBitsToWaitFor, xTimeoutOccurred );\n\n        /* Prevent compiler warnings when trace macros are not used. */\n        ( void ) xTimeoutOccurred;\n\n        traceRETURN_xEventGroupWaitBits( uxReturn );\n\n        return uxReturn;\n    }\n/*-----------------------------------------------------------*/\n\n    EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup,\n                                      const EventBits_t uxBitsToClear )\n    {\n        EventGroup_t * pxEventBits = xEventGroup;\n        EventBits_t uxReturn;\n\n        traceENTER_xEventGroupClearBits( xEventGroup, uxBitsToClear );\n\n        /* Check the user is not attempting to clear the bits used by the kernel\n         * itself. */\n        configASSERT( xEventGroup );\n        configASSERT( ( uxBitsToClear & eventEVENT_BITS_CONTROL_BYTES ) == 0 );\n\n        taskENTER_CRITICAL();\n        {\n            traceEVENT_GROUP_CLEAR_BITS( xEventGroup, uxBitsToClear );\n\n            /* The value returned is the event group value prior to the bits being\n             * cleared. */\n            uxReturn = pxEventBits->uxEventBits;\n\n            /* Clear the bits. */\n            pxEventBits->uxEventBits &= ~uxBitsToClear;\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_xEventGroupClearBits( uxReturn );\n\n        return uxReturn;\n    }\n/*-----------------------------------------------------------*/\n\n    #if ( ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) )\n\n        BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup,\n                                                const EventBits_t uxBitsToClear )\n        {\n            BaseType_t xReturn;\n\n            traceENTER_xEventGroupClearBitsFromISR( xEventGroup, uxBitsToClear );\n\n            traceEVENT_GROUP_CLEAR_BITS_FROM_ISR( xEventGroup, uxBitsToClear );\n            xReturn = xTimerPendFunctionCallFromISR( vEventGroupClearBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToClear, NULL );\n\n            traceRETURN_xEventGroupClearBitsFromISR( xReturn );\n\n            return xReturn;\n        }\n\n    #endif /* if ( ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) ) */\n/*-----------------------------------------------------------*/\n\n    EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup )\n    {\n        UBaseType_t uxSavedInterruptStatus;\n        EventGroup_t const * const pxEventBits = xEventGroup;\n        EventBits_t uxReturn;\n\n        traceENTER_xEventGroupGetBitsFromISR( xEventGroup );\n\n        /* MISRA Ref 4.7.1 [Return value shall be checked] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */\n        /* coverity[misra_c_2012_directive_4_7_violation] */\n        uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();\n        {\n            uxReturn = pxEventBits->uxEventBits;\n        }\n        taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );\n\n        traceRETURN_xEventGroupGetBitsFromISR( uxReturn );\n\n        return uxReturn;\n    }\n/*-----------------------------------------------------------*/\n\n    EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup,\n                                    const EventBits_t uxBitsToSet )\n    {\n        ListItem_t * pxListItem;\n        ListItem_t * pxNext;\n        ListItem_t const * pxListEnd;\n        List_t const * pxList;\n        EventBits_t uxBitsToClear = 0, uxBitsWaitedFor, uxControlBits;\n        EventGroup_t * pxEventBits = xEventGroup;\n        BaseType_t xMatchFound = pdFALSE;\n\n        traceENTER_xEventGroupSetBits( xEventGroup, uxBitsToSet );\n\n        /* Check the user is not attempting to set the bits used by the kernel\n         * itself. */\n        configASSERT( xEventGroup );\n        configASSERT( ( uxBitsToSet & eventEVENT_BITS_CONTROL_BYTES ) == 0 );\n\n        pxList = &( pxEventBits->xTasksWaitingForBits );\n        pxListEnd = listGET_END_MARKER( pxList );\n        vTaskSuspendAll();\n        {\n            traceEVENT_GROUP_SET_BITS( xEventGroup, uxBitsToSet );\n\n            pxListItem = listGET_HEAD_ENTRY( pxList );\n\n            /* Set the bits. */\n            pxEventBits->uxEventBits |= uxBitsToSet;\n\n            /* See if the new bit value should unblock any tasks. */\n            while( pxListItem != pxListEnd )\n            {\n                pxNext = listGET_NEXT( pxListItem );\n                uxBitsWaitedFor = listGET_LIST_ITEM_VALUE( pxListItem );\n                xMatchFound = pdFALSE;\n\n                /* Split the bits waited for from the control bits. */\n                uxControlBits = uxBitsWaitedFor & eventEVENT_BITS_CONTROL_BYTES;\n                uxBitsWaitedFor &= ~eventEVENT_BITS_CONTROL_BYTES;\n\n                if( ( uxControlBits & eventWAIT_FOR_ALL_BITS ) == ( EventBits_t ) 0 )\n                {\n                    /* Just looking for single bit being set. */\n                    if( ( uxBitsWaitedFor & pxEventBits->uxEventBits ) != ( EventBits_t ) 0 )\n                    {\n                        xMatchFound = pdTRUE;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else if( ( uxBitsWaitedFor & pxEventBits->uxEventBits ) == uxBitsWaitedFor )\n                {\n                    /* All bits are set. */\n                    xMatchFound = pdTRUE;\n                }\n                else\n                {\n                    /* Need all bits to be set, but not all the bits were set. */\n                }\n\n                if( xMatchFound != pdFALSE )\n                {\n                    /* The bits match.  Should the bits be cleared on exit? */\n                    if( ( uxControlBits & eventCLEAR_EVENTS_ON_EXIT_BIT ) != ( EventBits_t ) 0 )\n                    {\n                        uxBitsToClear |= uxBitsWaitedFor;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n\n                    /* Store the actual event flag value in the task's event list\n                     * item before removing the task from the event list.  The\n                     * eventUNBLOCKED_DUE_TO_BIT_SET bit is set so the task knows\n                     * that is was unblocked due to its required bits matching, rather\n                     * than because it timed out. */\n                    vTaskRemoveFromUnorderedEventList( pxListItem, pxEventBits->uxEventBits | eventUNBLOCKED_DUE_TO_BIT_SET );\n                }\n\n                /* Move onto the next list item.  Note pxListItem->pxNext is not\n                 * used here as the list item may have been removed from the event list\n                 * and inserted into the ready/pending reading list. */\n                pxListItem = pxNext;\n            }\n\n            /* Clear any bits that matched when the eventCLEAR_EVENTS_ON_EXIT_BIT\n             * bit was set in the control word. */\n            pxEventBits->uxEventBits &= ~uxBitsToClear;\n        }\n        ( void ) xTaskResumeAll();\n\n        traceRETURN_xEventGroupSetBits( pxEventBits->uxEventBits );\n\n        return pxEventBits->uxEventBits;\n    }\n/*-----------------------------------------------------------*/\n\n    void vEventGroupDelete( EventGroupHandle_t xEventGroup )\n    {\n        EventGroup_t * pxEventBits = xEventGroup;\n        const List_t * pxTasksWaitingForBits;\n\n        traceENTER_vEventGroupDelete( xEventGroup );\n\n        configASSERT( pxEventBits );\n\n        pxTasksWaitingForBits = &( pxEventBits->xTasksWaitingForBits );\n\n        vTaskSuspendAll();\n        {\n            traceEVENT_GROUP_DELETE( xEventGroup );\n\n            while( listCURRENT_LIST_LENGTH( pxTasksWaitingForBits ) > ( UBaseType_t ) 0 )\n            {\n                /* Unblock the task, returning 0 as the event list is being deleted\n                 * and cannot therefore have any bits set. */\n                configASSERT( pxTasksWaitingForBits->xListEnd.pxNext != ( const ListItem_t * ) &( pxTasksWaitingForBits->xListEnd ) );\n                vTaskRemoveFromUnorderedEventList( pxTasksWaitingForBits->xListEnd.pxNext, eventUNBLOCKED_DUE_TO_BIT_SET );\n            }\n        }\n        ( void ) xTaskResumeAll();\n\n        #if ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 0 ) )\n        {\n            /* The event group can only have been allocated dynamically - free\n             * it again. */\n            vPortFree( pxEventBits );\n        }\n        #elif ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )\n        {\n            /* The event group could have been allocated statically or\n             * dynamically, so check before attempting to free the memory. */\n            if( pxEventBits->ucStaticallyAllocated == ( uint8_t ) pdFALSE )\n            {\n                vPortFree( pxEventBits );\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        #endif /* configSUPPORT_DYNAMIC_ALLOCATION */\n\n        traceRETURN_vEventGroupDelete();\n    }\n/*-----------------------------------------------------------*/\n\n    #if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n        BaseType_t xEventGroupGetStaticBuffer( EventGroupHandle_t xEventGroup,\n                                               StaticEventGroup_t ** ppxEventGroupBuffer )\n        {\n            BaseType_t xReturn;\n            EventGroup_t * pxEventBits = xEventGroup;\n\n            traceENTER_xEventGroupGetStaticBuffer( xEventGroup, ppxEventGroupBuffer );\n\n            configASSERT( pxEventBits );\n            configASSERT( ppxEventGroupBuffer );\n\n            #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n            {\n                /* Check if the event group was statically allocated. */\n                if( pxEventBits->ucStaticallyAllocated == ( uint8_t ) pdTRUE )\n                {\n                    /* MISRA Ref 11.3.1 [Misaligned access] */\n                    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-113 */\n                    /* coverity[misra_c_2012_rule_11_3_violation] */\n                    *ppxEventGroupBuffer = ( StaticEventGroup_t * ) pxEventBits;\n                    xReturn = pdTRUE;\n                }\n                else\n                {\n                    xReturn = pdFALSE;\n                }\n            }\n            #else /* configSUPPORT_DYNAMIC_ALLOCATION */\n            {\n                /* Event group must have been statically allocated. */\n                /* MISRA Ref 11.3.1 [Misaligned access] */\n                /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-113 */\n                /* coverity[misra_c_2012_rule_11_3_violation] */\n                *ppxEventGroupBuffer = ( StaticEventGroup_t * ) pxEventBits;\n                xReturn = pdTRUE;\n            }\n            #endif /* configSUPPORT_DYNAMIC_ALLOCATION */\n\n            traceRETURN_xEventGroupGetStaticBuffer( xReturn );\n\n            return xReturn;\n        }\n    #endif /* configSUPPORT_STATIC_ALLOCATION */\n/*-----------------------------------------------------------*/\n\n/* For internal use only - execute a 'set bits' command that was pended from\n * an interrupt. */\n    void vEventGroupSetBitsCallback( void * pvEventGroup,\n                                     uint32_t ulBitsToSet )\n    {\n        traceENTER_vEventGroupSetBitsCallback( pvEventGroup, ulBitsToSet );\n\n        /* MISRA Ref 11.5.4 [Callback function parameter] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n        /* coverity[misra_c_2012_rule_11_5_violation] */\n        ( void ) xEventGroupSetBits( pvEventGroup, ( EventBits_t ) ulBitsToSet );\n\n        traceRETURN_vEventGroupSetBitsCallback();\n    }\n/*-----------------------------------------------------------*/\n\n/* For internal use only - execute a 'clear bits' command that was pended from\n * an interrupt. */\n    void vEventGroupClearBitsCallback( void * pvEventGroup,\n                                       uint32_t ulBitsToClear )\n    {\n        traceENTER_vEventGroupClearBitsCallback( pvEventGroup, ulBitsToClear );\n\n        /* MISRA Ref 11.5.4 [Callback function parameter] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n        /* coverity[misra_c_2012_rule_11_5_violation] */\n        ( void ) xEventGroupClearBits( pvEventGroup, ( EventBits_t ) ulBitsToClear );\n\n        traceRETURN_vEventGroupClearBitsCallback();\n    }\n/*-----------------------------------------------------------*/\n\n    static BaseType_t prvTestWaitCondition( const EventBits_t uxCurrentEventBits,\n                                            const EventBits_t uxBitsToWaitFor,\n                                            const BaseType_t xWaitForAllBits )\n    {\n        BaseType_t xWaitConditionMet = pdFALSE;\n\n        if( xWaitForAllBits == pdFALSE )\n        {\n            /* Task only has to wait for one bit within uxBitsToWaitFor to be\n             * set.  Is one already set? */\n            if( ( uxCurrentEventBits & uxBitsToWaitFor ) != ( EventBits_t ) 0 )\n            {\n                xWaitConditionMet = pdTRUE;\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        else\n        {\n            /* Task has to wait for all the bits in uxBitsToWaitFor to be set.\n             * Are they set already? */\n            if( ( uxCurrentEventBits & uxBitsToWaitFor ) == uxBitsToWaitFor )\n            {\n                xWaitConditionMet = pdTRUE;\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n\n        return xWaitConditionMet;\n    }\n/*-----------------------------------------------------------*/\n\n    #if ( ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) )\n\n        BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup,\n                                              const EventBits_t uxBitsToSet,\n                                              BaseType_t * pxHigherPriorityTaskWoken )\n        {\n            BaseType_t xReturn;\n\n            traceENTER_xEventGroupSetBitsFromISR( xEventGroup, uxBitsToSet, pxHigherPriorityTaskWoken );\n\n            traceEVENT_GROUP_SET_BITS_FROM_ISR( xEventGroup, uxBitsToSet );\n            xReturn = xTimerPendFunctionCallFromISR( vEventGroupSetBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToSet, pxHigherPriorityTaskWoken );\n\n            traceRETURN_xEventGroupSetBitsFromISR( xReturn );\n\n            return xReturn;\n        }\n\n    #endif /* if ( ( configUSE_TRACE_FACILITY == 1 ) && ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 1 ) ) */\n/*-----------------------------------------------------------*/\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n\n        UBaseType_t uxEventGroupGetNumber( void * xEventGroup )\n        {\n            UBaseType_t xReturn;\n\n            /* MISRA Ref 11.5.2 [Opaque pointer] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n            /* coverity[misra_c_2012_rule_11_5_violation] */\n            EventGroup_t const * pxEventBits = ( EventGroup_t * ) xEventGroup;\n\n            traceENTER_uxEventGroupGetNumber( xEventGroup );\n\n            if( xEventGroup == NULL )\n            {\n                xReturn = 0;\n            }\n            else\n            {\n                xReturn = pxEventBits->uxEventGroupNumber;\n            }\n\n            traceRETURN_uxEventGroupGetNumber( xReturn );\n\n            return xReturn;\n        }\n\n    #endif /* configUSE_TRACE_FACILITY */\n/*-----------------------------------------------------------*/\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n\n        void vEventGroupSetNumber( void * xEventGroup,\n                                   UBaseType_t uxEventGroupNumber )\n        {\n            traceENTER_vEventGroupSetNumber( xEventGroup, uxEventGroupNumber );\n\n            /* MISRA Ref 11.5.2 [Opaque pointer] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n            /* coverity[misra_c_2012_rule_11_5_violation] */\n            ( ( EventGroup_t * ) xEventGroup )->uxEventGroupNumber = uxEventGroupNumber;\n\n            traceRETURN_vEventGroupSetNumber();\n        }\n\n    #endif /* configUSE_TRACE_FACILITY */\n/*-----------------------------------------------------------*/\n\n/* This entire source file will be skipped if the application is not configured\n * to include event groups functionality. If you want to include event groups\n * then ensure configUSE_EVENT_GROUPS is set to 1 in FreeRTOSConfig.h. */\n#endif /* configUSE_EVENT_GROUPS == 1 */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n#ifndef INC_FREERTOS_H\n#define INC_FREERTOS_H\n\n/*\n * Include the generic headers required for the FreeRTOS port being used.\n */\n#include <stddef.h>\n\n/*\n * If stdint.h cannot be located then:\n *   + If using GCC ensure the -nostdint options is *not* being used.\n *   + Ensure the project's include path includes the directory in which your\n *     compiler stores stdint.h.\n *   + Set any compiler options necessary for it to support C99, as technically\n *     stdint.h is only mandatory with C99 (FreeRTOS does not require C99 in any\n *     other way).\n *   + The FreeRTOS download includes a simple stdint.h definition that can be\n *     used in cases where none is provided by the compiler.  The files only\n *     contains the typedefs required to build FreeRTOS.  Read the instructions\n *     in FreeRTOS/source/stdint.readme for more information.\n */\n#include <stdint.h> /* READ COMMENT ABOVE. */\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n    extern \"C\" {\n#endif\n/* *INDENT-ON* */\n\n/* Acceptable values for configTICK_TYPE_WIDTH_IN_BITS. */\n#define TICK_TYPE_WIDTH_16_BITS    0\n#define TICK_TYPE_WIDTH_32_BITS    1\n#define TICK_TYPE_WIDTH_64_BITS    2\n\n/* Application specific configuration options. */\n#include \"FreeRTOSConfig.h\"\n\n#if !defined( configUSE_16_BIT_TICKS ) && !defined( configTICK_TYPE_WIDTH_IN_BITS )\n    #error Missing definition:  One of configUSE_16_BIT_TICKS and configTICK_TYPE_WIDTH_IN_BITS must be defined in FreeRTOSConfig.h.  See the Configuration section of the FreeRTOS API documentation for details.\n#endif\n\n#if defined( configUSE_16_BIT_TICKS ) && defined( configTICK_TYPE_WIDTH_IN_BITS )\n    #error Only one of configUSE_16_BIT_TICKS and configTICK_TYPE_WIDTH_IN_BITS must be defined in FreeRTOSConfig.h.  See the Configuration section of the FreeRTOS API documentation for details.\n#endif\n\n/* Define configTICK_TYPE_WIDTH_IN_BITS according to the\n * value of configUSE_16_BIT_TICKS for backward compatibility. */\n#ifndef configTICK_TYPE_WIDTH_IN_BITS\n    #if ( configUSE_16_BIT_TICKS == 1 )\n        #define configTICK_TYPE_WIDTH_IN_BITS    TICK_TYPE_WIDTH_16_BITS\n    #else\n        #define configTICK_TYPE_WIDTH_IN_BITS    TICK_TYPE_WIDTH_32_BITS\n    #endif\n#endif\n\n/* Set configUSE_MPU_WRAPPERS_V1 to 1 to use MPU wrappers v1. */\n#ifndef configUSE_MPU_WRAPPERS_V1\n    #define configUSE_MPU_WRAPPERS_V1    0\n#endif\n\n/* Set configENABLE_ACCESS_CONTROL_LIST to 1 to enable access control list support. */\n#ifndef configENABLE_ACCESS_CONTROL_LIST\n    #define configENABLE_ACCESS_CONTROL_LIST    0\n#endif\n\n/* Set default value of configNUMBER_OF_CORES to 1 to use single core FreeRTOS. */\n#ifndef configNUMBER_OF_CORES\n    #define configNUMBER_OF_CORES    1\n#endif\n\n#ifndef configUSE_MALLOC_FAILED_HOOK\n    #define configUSE_MALLOC_FAILED_HOOK    0\n#endif\n\n/* Basic FreeRTOS definitions. */\n#include \"projdefs.h\"\n\n/* Definitions specific to the port being used. */\n#include \"portable.h\"\n\n/* Must be defaulted before configUSE_NEWLIB_REENTRANT is used below. */\n#ifndef configUSE_NEWLIB_REENTRANT\n    #define configUSE_NEWLIB_REENTRANT    0\n#endif\n\n/* Required if struct _reent is used. */\n#if ( configUSE_NEWLIB_REENTRANT == 1 )\n\n    #include \"newlib-freertos.h\"\n\n#endif /* if ( configUSE_NEWLIB_REENTRANT == 1 ) */\n\n/* Must be defaulted before configUSE_PICOLIBC_TLS is used below. */\n#ifndef configUSE_PICOLIBC_TLS\n    #define configUSE_PICOLIBC_TLS    0\n#endif\n\n#if ( configUSE_PICOLIBC_TLS == 1 )\n\n    #include \"picolibc-freertos.h\"\n\n#endif /* if ( configUSE_PICOLIBC_TLS == 1 ) */\n\n#ifndef configUSE_C_RUNTIME_TLS_SUPPORT\n    #define configUSE_C_RUNTIME_TLS_SUPPORT    0\n#endif\n\n#if ( configUSE_C_RUNTIME_TLS_SUPPORT == 1 )\n\n    #ifndef configTLS_BLOCK_TYPE\n        #error Missing definition:  configTLS_BLOCK_TYPE must be defined in FreeRTOSConfig.h when configUSE_C_RUNTIME_TLS_SUPPORT is set to 1.\n    #endif\n\n    #ifndef configINIT_TLS_BLOCK\n        #error Missing definition:  configINIT_TLS_BLOCK must be defined in FreeRTOSConfig.h when configUSE_C_RUNTIME_TLS_SUPPORT is set to 1.\n    #endif\n\n    #ifndef configSET_TLS_BLOCK\n        #error Missing definition:  configSET_TLS_BLOCK must be defined in FreeRTOSConfig.h when configUSE_C_RUNTIME_TLS_SUPPORT is set to 1.\n    #endif\n\n    #ifndef configDEINIT_TLS_BLOCK\n        #error Missing definition:  configDEINIT_TLS_BLOCK must be defined in FreeRTOSConfig.h when configUSE_C_RUNTIME_TLS_SUPPORT is set to 1.\n    #endif\n#endif /* if ( configUSE_C_RUNTIME_TLS_SUPPORT == 1 ) */\n\n/*\n * Check all the required application specific macros have been defined.\n * These macros are application specific and (as downloaded) are defined\n * within FreeRTOSConfig.h.\n */\n\n#ifndef configMINIMAL_STACK_SIZE\n    #error Missing definition:  configMINIMAL_STACK_SIZE must be defined in FreeRTOSConfig.h.  configMINIMAL_STACK_SIZE defines the size (in words) of the stack allocated to the idle task.  Refer to the demo project provided for your port for a suitable value.\n#endif\n\n#ifndef configMAX_PRIORITIES\n    #error Missing definition:  configMAX_PRIORITIES must be defined in FreeRTOSConfig.h.  See the Configuration section of the FreeRTOS API documentation for details.\n#endif\n\n#if configMAX_PRIORITIES < 1\n    #error configMAX_PRIORITIES must be defined to be greater than or equal to 1.\n#endif\n\n#ifndef configUSE_PREEMPTION\n    #error Missing definition:  configUSE_PREEMPTION must be defined in FreeRTOSConfig.h as either 1 or 0.  See the Configuration section of the FreeRTOS API documentation for details.\n#endif\n\n#ifndef configUSE_IDLE_HOOK\n    #error Missing definition:  configUSE_IDLE_HOOK must be defined in FreeRTOSConfig.h as either 1 or 0.  See the Configuration section of the FreeRTOS API documentation for details.\n#endif\n\n#if ( configNUMBER_OF_CORES > 1 )\n    #ifndef configUSE_PASSIVE_IDLE_HOOK\n        #error Missing definition:  configUSE_PASSIVE_IDLE_HOOK must be defined in FreeRTOSConfig.h as either 1 or 0.  See the Configuration section of the FreeRTOS API documentation for details.\n    #endif\n#endif\n\n#ifndef configUSE_TICK_HOOK\n    #error Missing definition:  configUSE_TICK_HOOK must be defined in FreeRTOSConfig.h as either 1 or 0.  See the Configuration section of the FreeRTOS API documentation for details.\n#endif\n\n#if ( ( configTICK_TYPE_WIDTH_IN_BITS != TICK_TYPE_WIDTH_16_BITS ) && \\\n    ( configTICK_TYPE_WIDTH_IN_BITS != TICK_TYPE_WIDTH_32_BITS ) &&   \\\n    ( configTICK_TYPE_WIDTH_IN_BITS != TICK_TYPE_WIDTH_64_BITS ) )\n    #error Macro configTICK_TYPE_WIDTH_IN_BITS is defined to incorrect value.  See the Configuration section of the FreeRTOS API documentation for details.\n#endif\n\n#ifndef configUSE_CO_ROUTINES\n    #define configUSE_CO_ROUTINES    0\n#endif\n\n#ifndef INCLUDE_vTaskPrioritySet\n    #define INCLUDE_vTaskPrioritySet    0\n#endif\n\n#ifndef INCLUDE_uxTaskPriorityGet\n    #define INCLUDE_uxTaskPriorityGet    0\n#endif\n\n#ifndef INCLUDE_vTaskDelete\n    #define INCLUDE_vTaskDelete    0\n#endif\n\n#ifndef INCLUDE_vTaskSuspend\n    #define INCLUDE_vTaskSuspend    0\n#endif\n\n#ifdef INCLUDE_xTaskDelayUntil\n    #ifdef INCLUDE_vTaskDelayUntil\n\n/* INCLUDE_vTaskDelayUntil was replaced by INCLUDE_xTaskDelayUntil.  Backward\n * compatibility is maintained if only one or the other is defined, but\n * there is a conflict if both are defined. */\n        #error INCLUDE_vTaskDelayUntil and INCLUDE_xTaskDelayUntil are both defined.  INCLUDE_vTaskDelayUntil is no longer required and should be removed\n    #endif\n#endif\n\n#ifndef INCLUDE_xTaskDelayUntil\n    #ifdef INCLUDE_vTaskDelayUntil\n\n/* If INCLUDE_vTaskDelayUntil is set but INCLUDE_xTaskDelayUntil is not then\n * the project's FreeRTOSConfig.h probably pre-dates the introduction of\n * xTaskDelayUntil and setting INCLUDE_xTaskDelayUntil to whatever\n * INCLUDE_vTaskDelayUntil is set to will ensure backward compatibility.\n */\n        #define INCLUDE_xTaskDelayUntil    INCLUDE_vTaskDelayUntil\n    #endif\n#endif\n\n#ifndef INCLUDE_xTaskDelayUntil\n    #define INCLUDE_xTaskDelayUntil    0\n#endif\n\n#ifndef INCLUDE_vTaskDelay\n    #define INCLUDE_vTaskDelay    0\n#endif\n\n#ifndef INCLUDE_xTaskGetIdleTaskHandle\n    #define INCLUDE_xTaskGetIdleTaskHandle    0\n#endif\n\n#ifndef INCLUDE_xTaskAbortDelay\n    #define INCLUDE_xTaskAbortDelay    0\n#endif\n\n#ifndef INCLUDE_xQueueGetMutexHolder\n    #define INCLUDE_xQueueGetMutexHolder    0\n#endif\n\n#ifndef INCLUDE_xSemaphoreGetMutexHolder\n    #define INCLUDE_xSemaphoreGetMutexHolder    INCLUDE_xQueueGetMutexHolder\n#endif\n\n#ifndef INCLUDE_xTaskGetHandle\n    #define INCLUDE_xTaskGetHandle    0\n#endif\n\n#ifndef INCLUDE_uxTaskGetStackHighWaterMark\n    #define INCLUDE_uxTaskGetStackHighWaterMark    0\n#endif\n\n#ifndef INCLUDE_uxTaskGetStackHighWaterMark2\n    #define INCLUDE_uxTaskGetStackHighWaterMark2    0\n#endif\n\n#ifndef INCLUDE_eTaskGetState\n    #define INCLUDE_eTaskGetState    0\n#endif\n\n#ifndef INCLUDE_xTaskResumeFromISR\n    #define INCLUDE_xTaskResumeFromISR    1\n#endif\n\n#ifndef INCLUDE_xTimerPendFunctionCall\n    #define INCLUDE_xTimerPendFunctionCall    0\n#endif\n\n#ifndef INCLUDE_xTaskGetSchedulerState\n    #define INCLUDE_xTaskGetSchedulerState    0\n#endif\n\n#ifndef INCLUDE_xTaskGetCurrentTaskHandle\n    #define INCLUDE_xTaskGetCurrentTaskHandle    1\n#endif\n\n#if configUSE_CO_ROUTINES != 0\n    #ifndef configMAX_CO_ROUTINE_PRIORITIES\n        #error configMAX_CO_ROUTINE_PRIORITIES must be greater than or equal to 1.\n    #endif\n#endif\n\n#ifndef configUSE_APPLICATION_TASK_TAG\n    #define configUSE_APPLICATION_TASK_TAG    0\n#endif\n\n#ifndef configNUM_THREAD_LOCAL_STORAGE_POINTERS\n    #define configNUM_THREAD_LOCAL_STORAGE_POINTERS    0\n#endif\n\n#ifndef configUSE_RECURSIVE_MUTEXES\n    #define configUSE_RECURSIVE_MUTEXES    0\n#endif\n\n#ifndef configUSE_MUTEXES\n    #define configUSE_MUTEXES    0\n#endif\n\n#ifndef configUSE_TIMERS\n    #define configUSE_TIMERS    0\n#endif\n\n#ifndef configUSE_EVENT_GROUPS\n    #define configUSE_EVENT_GROUPS    1\n#endif\n\n#ifndef configUSE_STREAM_BUFFERS\n    #define configUSE_STREAM_BUFFERS    1\n#endif\n\n#ifndef configUSE_DAEMON_TASK_STARTUP_HOOK\n    #define configUSE_DAEMON_TASK_STARTUP_HOOK    0\n#endif\n\n#if ( configUSE_DAEMON_TASK_STARTUP_HOOK != 0 )\n    #if ( configUSE_TIMERS == 0 )\n        #error configUSE_DAEMON_TASK_STARTUP_HOOK is set, but the daemon task is not created because configUSE_TIMERS is 0.\n    #endif\n#endif\n\n#ifndef configUSE_COUNTING_SEMAPHORES\n    #define configUSE_COUNTING_SEMAPHORES    0\n#endif\n\n#ifndef configUSE_TASK_PREEMPTION_DISABLE\n    #define configUSE_TASK_PREEMPTION_DISABLE    0\n#endif\n\n#ifndef configUSE_ALTERNATIVE_API\n    #define configUSE_ALTERNATIVE_API    0\n#endif\n\n#ifndef portCRITICAL_NESTING_IN_TCB\n    #define portCRITICAL_NESTING_IN_TCB    0\n#endif\n\n#ifndef configMAX_TASK_NAME_LEN\n    #define configMAX_TASK_NAME_LEN    16\n#endif\n\n#ifndef configIDLE_SHOULD_YIELD\n    #define configIDLE_SHOULD_YIELD    1\n#endif\n\n#if configMAX_TASK_NAME_LEN < 1\n    #error configMAX_TASK_NAME_LEN must be set to a minimum of 1 in FreeRTOSConfig.h\n#endif\n\n#ifndef configASSERT\n    #define configASSERT( x )\n    #define configASSERT_DEFINED    0\n#else\n    #define configASSERT_DEFINED    1\n#endif\n\n/* configPRECONDITION should be defined as configASSERT.\n * The CBMC proofs need a way to track assumptions and assertions.\n * A configPRECONDITION statement should express an implicit invariant or\n * assumption made.  A configASSERT statement should express an invariant that must\n * hold explicit before calling the code. */\n#ifndef configPRECONDITION\n    #define configPRECONDITION( X )    configASSERT( X )\n    #define configPRECONDITION_DEFINED    0\n#else\n    #define configPRECONDITION_DEFINED    1\n#endif\n\n#ifndef configCHECK_HANDLER_INSTALLATION\n    #define configCHECK_HANDLER_INSTALLATION    1\n#else\n\n/* The application has explicitly defined configCHECK_HANDLER_INSTALLATION\n * to 1. The checks requires configASSERT() to be defined. */\n    #if ( ( configCHECK_HANDLER_INSTALLATION == 1 ) && ( configASSERT_DEFINED == 0 ) )\n        #error You must define configASSERT() when configCHECK_HANDLER_INSTALLATION is 1.\n    #endif\n#endif\n\n#ifndef portMEMORY_BARRIER\n    #define portMEMORY_BARRIER()\n#endif\n\n#ifndef portSOFTWARE_BARRIER\n    #define portSOFTWARE_BARRIER()\n#endif\n\n#ifndef configRUN_MULTIPLE_PRIORITIES\n    #define configRUN_MULTIPLE_PRIORITIES    0\n#endif\n\n#ifndef portGET_CORE_ID\n\n    #if ( configNUMBER_OF_CORES == 1 )\n        #define portGET_CORE_ID()    0\n    #else\n        #error configNUMBER_OF_CORES is set to more than 1 then portGET_CORE_ID must also be defined.\n    #endif /* configNUMBER_OF_CORES */\n\n#endif /* portGET_CORE_ID */\n\n#ifndef portYIELD_CORE\n\n    #if ( configNUMBER_OF_CORES == 1 )\n        #define portYIELD_CORE( x )    portYIELD()\n    #else\n        #error configNUMBER_OF_CORES is set to more than 1 then portYIELD_CORE must also be defined.\n    #endif /* configNUMBER_OF_CORES */\n\n#endif /* portYIELD_CORE */\n\n#ifndef portSET_INTERRUPT_MASK\n\n    #if ( configNUMBER_OF_CORES > 1 )\n        #error portSET_INTERRUPT_MASK is required in SMP\n    #endif\n\n#endif /* portSET_INTERRUPT_MASK */\n\n#ifndef portCLEAR_INTERRUPT_MASK\n\n    #if ( configNUMBER_OF_CORES > 1 )\n        #error portCLEAR_INTERRUPT_MASK is required in SMP\n    #endif\n\n#endif /* portCLEAR_INTERRUPT_MASK */\n\n#ifndef portRELEASE_TASK_LOCK\n\n    #if ( configNUMBER_OF_CORES == 1 )\n        #define portRELEASE_TASK_LOCK()\n    #else\n        #error portRELEASE_TASK_LOCK is required in SMP\n    #endif\n\n#endif /* portRELEASE_TASK_LOCK */\n\n#ifndef portGET_TASK_LOCK\n\n    #if ( configNUMBER_OF_CORES == 1 )\n        #define portGET_TASK_LOCK()\n    #else\n        #error portGET_TASK_LOCK is required in SMP\n    #endif\n\n#endif /* portGET_TASK_LOCK */\n\n#ifndef portRELEASE_ISR_LOCK\n\n    #if ( configNUMBER_OF_CORES == 1 )\n        #define portRELEASE_ISR_LOCK()\n    #else\n        #error portRELEASE_ISR_LOCK is required in SMP\n    #endif\n\n#endif /* portRELEASE_ISR_LOCK */\n\n#ifndef portGET_ISR_LOCK\n\n    #if ( configNUMBER_OF_CORES == 1 )\n        #define portGET_ISR_LOCK()\n    #else\n        #error portGET_ISR_LOCK is required in SMP\n    #endif\n\n#endif /* portGET_ISR_LOCK */\n\n#ifndef portENTER_CRITICAL_FROM_ISR\n\n    #if ( configNUMBER_OF_CORES > 1 )\n        #error portENTER_CRITICAL_FROM_ISR is required in SMP\n    #endif\n\n#endif\n\n#ifndef portEXIT_CRITICAL_FROM_ISR\n\n    #if ( configNUMBER_OF_CORES > 1 )\n        #error portEXIT_CRITICAL_FROM_ISR is required in SMP\n    #endif\n\n#endif\n\n#ifndef configUSE_CORE_AFFINITY\n    #define configUSE_CORE_AFFINITY    0\n#endif /* configUSE_CORE_AFFINITY */\n\n#if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n    #ifndef configTASK_DEFAULT_CORE_AFFINITY\n        #define configTASK_DEFAULT_CORE_AFFINITY    tskNO_AFFINITY\n    #endif\n#endif\n\n#ifndef configUSE_PASSIVE_IDLE_HOOK\n    #define configUSE_PASSIVE_IDLE_HOOK    0\n#endif /* configUSE_PASSIVE_IDLE_HOOK */\n\n/* The timers module relies on xTaskGetSchedulerState(). */\n#if configUSE_TIMERS == 1\n\n    #ifndef configTIMER_TASK_PRIORITY\n        #error If configUSE_TIMERS is set to 1 then configTIMER_TASK_PRIORITY must also be defined.\n    #endif /* configTIMER_TASK_PRIORITY */\n\n    #ifndef configTIMER_QUEUE_LENGTH\n        #error If configUSE_TIMERS is set to 1 then configTIMER_QUEUE_LENGTH must also be defined.\n    #endif /* configTIMER_QUEUE_LENGTH */\n\n    #ifndef configTIMER_TASK_STACK_DEPTH\n        #error If configUSE_TIMERS is set to 1 then configTIMER_TASK_STACK_DEPTH must also be defined.\n    #endif /* configTIMER_TASK_STACK_DEPTH */\n\n    #ifndef portTIMER_CALLBACK_ATTRIBUTE\n        #define portTIMER_CALLBACK_ATTRIBUTE\n    #endif /* portTIMER_CALLBACK_ATTRIBUTE */\n\n#endif /* configUSE_TIMERS */\n\n#ifndef portHAS_NESTED_INTERRUPTS\n    #if defined( portSET_INTERRUPT_MASK_FROM_ISR ) && defined( portCLEAR_INTERRUPT_MASK_FROM_ISR )\n        #define portHAS_NESTED_INTERRUPTS    1\n    #else\n        #define portHAS_NESTED_INTERRUPTS    0\n    #endif\n#endif\n\n#ifndef portSET_INTERRUPT_MASK_FROM_ISR\n    #if ( portHAS_NESTED_INTERRUPTS == 1 )\n        #error portSET_INTERRUPT_MASK_FROM_ISR must be defined for ports that support nested interrupts (i.e. portHAS_NESTED_INTERRUPTS is set to 1)\n    #else\n        #define portSET_INTERRUPT_MASK_FROM_ISR()    0\n    #endif\n#else\n    #if ( portHAS_NESTED_INTERRUPTS == 0 )\n        #error portSET_INTERRUPT_MASK_FROM_ISR must not be defined for ports that do not support nested interrupts (i.e. portHAS_NESTED_INTERRUPTS is set to 0)\n    #endif\n#endif\n\n#ifndef portCLEAR_INTERRUPT_MASK_FROM_ISR\n    #if ( portHAS_NESTED_INTERRUPTS == 1 )\n        #error portCLEAR_INTERRUPT_MASK_FROM_ISR must be defined for ports that support nested interrupts  (i.e. portHAS_NESTED_INTERRUPTS is set to 1)\n    #else\n        #define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedStatusValue )    ( void ) ( uxSavedStatusValue )\n    #endif\n#else\n    #if ( portHAS_NESTED_INTERRUPTS == 0 )\n        #error portCLEAR_INTERRUPT_MASK_FROM_ISR must not be defined for ports that do not support nested interrupts (i.e. portHAS_NESTED_INTERRUPTS is set to 0)\n    #endif\n#endif\n\n#ifndef portCLEAN_UP_TCB\n    #define portCLEAN_UP_TCB( pxTCB )    ( void ) ( pxTCB )\n#endif\n\n#ifndef portPRE_TASK_DELETE_HOOK\n    #define portPRE_TASK_DELETE_HOOK( pvTaskToDelete, pxYieldPending )\n#endif\n\n#ifndef portSETUP_TCB\n    #define portSETUP_TCB( pxTCB )    ( void ) ( pxTCB )\n#endif\n\n#ifndef portTASK_SWITCH_HOOK\n    #define portTASK_SWITCH_HOOK( pxTCB )    ( void ) ( pxTCB )\n#endif\n\n#ifndef configQUEUE_REGISTRY_SIZE\n    #define configQUEUE_REGISTRY_SIZE    0U\n#endif\n\n#if ( configQUEUE_REGISTRY_SIZE < 1 )\n    #define vQueueAddToRegistry( xQueue, pcName )\n    #define vQueueUnregisterQueue( xQueue )\n    #define pcQueueGetName( xQueue )\n#endif\n\n#ifndef configUSE_MINI_LIST_ITEM\n    #define configUSE_MINI_LIST_ITEM    1\n#endif\n\n#ifndef portPOINTER_SIZE_TYPE\n    #define portPOINTER_SIZE_TYPE    uint32_t\n#endif\n\n/* Remove any unused trace macros. */\n#ifndef traceSTART\n\n/* Used to perform any necessary initialisation - for example, open a file\n * into which trace is to be written. */\n    #define traceSTART()\n#endif\n\n#ifndef traceEND\n\n/* Use to close a trace, for example close a file into which trace has been\n * written. */\n    #define traceEND()\n#endif\n\n#ifndef traceTASK_SWITCHED_IN\n\n/* Called after a task has been selected to run.  pxCurrentTCB holds a pointer\n * to the task control block of the selected task. */\n    #define traceTASK_SWITCHED_IN()\n#endif\n\n#ifndef traceINCREASE_TICK_COUNT\n\n/* Called before stepping the tick count after waking from tickless idle\n * sleep. */\n    #define traceINCREASE_TICK_COUNT( x )\n#endif\n\n#ifndef traceLOW_POWER_IDLE_BEGIN\n    /* Called immediately before entering tickless idle. */\n    #define traceLOW_POWER_IDLE_BEGIN()\n#endif\n\n#ifndef traceLOW_POWER_IDLE_END\n    /* Called when returning to the Idle task after a tickless idle. */\n    #define traceLOW_POWER_IDLE_END()\n#endif\n\n#ifndef traceTASK_SWITCHED_OUT\n\n/* Called before a task has been selected to run.  pxCurrentTCB holds a pointer\n * to the task control block of the task being switched out. */\n    #define traceTASK_SWITCHED_OUT()\n#endif\n\n#ifndef traceTASK_PRIORITY_INHERIT\n\n/* Called when a task attempts to take a mutex that is already held by a\n * lower priority task.  pxTCBOfMutexHolder is a pointer to the TCB of the task\n * that holds the mutex.  uxInheritedPriority is the priority the mutex holder\n * will inherit (the priority of the task that is attempting to obtain the\n * muted. */\n    #define traceTASK_PRIORITY_INHERIT( pxTCBOfMutexHolder, uxInheritedPriority )\n#endif\n\n#ifndef traceTASK_PRIORITY_DISINHERIT\n\n/* Called when a task releases a mutex, the holding of which had resulted in\n * the task inheriting the priority of a higher priority task.\n * pxTCBOfMutexHolder is a pointer to the TCB of the task that is releasing the\n * mutex.  uxOriginalPriority is the task's configured (base) priority. */\n    #define traceTASK_PRIORITY_DISINHERIT( pxTCBOfMutexHolder, uxOriginalPriority )\n#endif\n\n#ifndef traceBLOCKING_ON_QUEUE_RECEIVE\n\n/* Task is about to block because it cannot read from a\n * queue/mutex/semaphore.  pxQueue is a pointer to the queue/mutex/semaphore\n * upon which the read was attempted.  pxCurrentTCB points to the TCB of the\n * task that attempted the read. */\n    #define traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue )\n#endif\n\n#ifndef traceBLOCKING_ON_QUEUE_PEEK\n\n/* Task is about to block because it cannot read from a\n * queue/mutex/semaphore.  pxQueue is a pointer to the queue/mutex/semaphore\n * upon which the read was attempted.  pxCurrentTCB points to the TCB of the\n * task that attempted the read. */\n    #define traceBLOCKING_ON_QUEUE_PEEK( pxQueue )\n#endif\n\n#ifndef traceBLOCKING_ON_QUEUE_SEND\n\n/* Task is about to block because it cannot write to a\n * queue/mutex/semaphore.  pxQueue is a pointer to the queue/mutex/semaphore\n * upon which the write was attempted.  pxCurrentTCB points to the TCB of the\n * task that attempted the write. */\n    #define traceBLOCKING_ON_QUEUE_SEND( pxQueue )\n#endif\n\n#ifndef configCHECK_FOR_STACK_OVERFLOW\n    #define configCHECK_FOR_STACK_OVERFLOW    0\n#endif\n\n#ifndef configRECORD_STACK_HIGH_ADDRESS\n    #define configRECORD_STACK_HIGH_ADDRESS    0\n#endif\n\n#ifndef configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H\n    #define configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H    0\n#endif\n\n/* The following event macros are embedded in the kernel API calls. */\n\n#ifndef traceMOVED_TASK_TO_READY_STATE\n    #define traceMOVED_TASK_TO_READY_STATE( pxTCB )\n#endif\n\n#ifndef tracePOST_MOVED_TASK_TO_READY_STATE\n    #define tracePOST_MOVED_TASK_TO_READY_STATE( pxTCB )\n#endif\n\n#ifndef traceMOVED_TASK_TO_DELAYED_LIST\n    #define traceMOVED_TASK_TO_DELAYED_LIST()\n#endif\n\n#ifndef traceMOVED_TASK_TO_OVERFLOW_DELAYED_LIST\n    #define traceMOVED_TASK_TO_OVERFLOW_DELAYED_LIST()\n#endif\n\n#ifndef traceQUEUE_CREATE\n    #define traceQUEUE_CREATE( pxNewQueue )\n#endif\n\n#ifndef traceQUEUE_CREATE_FAILED\n    #define traceQUEUE_CREATE_FAILED( ucQueueType )\n#endif\n\n#ifndef traceCREATE_MUTEX\n    #define traceCREATE_MUTEX( pxNewQueue )\n#endif\n\n#ifndef traceCREATE_MUTEX_FAILED\n    #define traceCREATE_MUTEX_FAILED()\n#endif\n\n#ifndef traceGIVE_MUTEX_RECURSIVE\n    #define traceGIVE_MUTEX_RECURSIVE( pxMutex )\n#endif\n\n#ifndef traceGIVE_MUTEX_RECURSIVE_FAILED\n    #define traceGIVE_MUTEX_RECURSIVE_FAILED( pxMutex )\n#endif\n\n#ifndef traceTAKE_MUTEX_RECURSIVE\n    #define traceTAKE_MUTEX_RECURSIVE( pxMutex )\n#endif\n\n#ifndef traceTAKE_MUTEX_RECURSIVE_FAILED\n    #define traceTAKE_MUTEX_RECURSIVE_FAILED( pxMutex )\n#endif\n\n#ifndef traceCREATE_COUNTING_SEMAPHORE\n    #define traceCREATE_COUNTING_SEMAPHORE()\n#endif\n\n#ifndef traceCREATE_COUNTING_SEMAPHORE_FAILED\n    #define traceCREATE_COUNTING_SEMAPHORE_FAILED()\n#endif\n\n#ifndef traceQUEUE_SET_SEND\n    #define traceQUEUE_SET_SEND    traceQUEUE_SEND\n#endif\n\n#ifndef traceQUEUE_SEND\n    #define traceQUEUE_SEND( pxQueue )\n#endif\n\n#ifndef traceQUEUE_SEND_FAILED\n    #define traceQUEUE_SEND_FAILED( pxQueue )\n#endif\n\n#ifndef traceQUEUE_RECEIVE\n    #define traceQUEUE_RECEIVE( pxQueue )\n#endif\n\n#ifndef traceQUEUE_PEEK\n    #define traceQUEUE_PEEK( pxQueue )\n#endif\n\n#ifndef traceQUEUE_PEEK_FAILED\n    #define traceQUEUE_PEEK_FAILED( pxQueue )\n#endif\n\n#ifndef traceQUEUE_PEEK_FROM_ISR\n    #define traceQUEUE_PEEK_FROM_ISR( pxQueue )\n#endif\n\n#ifndef traceQUEUE_RECEIVE_FAILED\n    #define traceQUEUE_RECEIVE_FAILED( pxQueue )\n#endif\n\n#ifndef traceQUEUE_SEND_FROM_ISR\n    #define traceQUEUE_SEND_FROM_ISR( pxQueue )\n#endif\n\n#ifndef traceQUEUE_SEND_FROM_ISR_FAILED\n    #define traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue )\n#endif\n\n#ifndef traceQUEUE_RECEIVE_FROM_ISR\n    #define traceQUEUE_RECEIVE_FROM_ISR( pxQueue )\n#endif\n\n#ifndef traceQUEUE_RECEIVE_FROM_ISR_FAILED\n    #define traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue )\n#endif\n\n#ifndef traceQUEUE_PEEK_FROM_ISR_FAILED\n    #define traceQUEUE_PEEK_FROM_ISR_FAILED( pxQueue )\n#endif\n\n#ifndef traceQUEUE_DELETE\n    #define traceQUEUE_DELETE( pxQueue )\n#endif\n\n#ifndef traceTASK_CREATE\n    #define traceTASK_CREATE( pxNewTCB )\n#endif\n\n#ifndef traceTASK_CREATE_FAILED\n    #define traceTASK_CREATE_FAILED()\n#endif\n\n#ifndef traceTASK_DELETE\n    #define traceTASK_DELETE( pxTaskToDelete )\n#endif\n\n#ifndef traceTASK_DELAY_UNTIL\n    #define traceTASK_DELAY_UNTIL( x )\n#endif\n\n#ifndef traceTASK_DELAY\n    #define traceTASK_DELAY()\n#endif\n\n#ifndef traceTASK_PRIORITY_SET\n    #define traceTASK_PRIORITY_SET( pxTask, uxNewPriority )\n#endif\n\n#ifndef traceTASK_SUSPEND\n    #define traceTASK_SUSPEND( pxTaskToSuspend )\n#endif\n\n#ifndef traceTASK_RESUME\n    #define traceTASK_RESUME( pxTaskToResume )\n#endif\n\n#ifndef traceTASK_RESUME_FROM_ISR\n    #define traceTASK_RESUME_FROM_ISR( pxTaskToResume )\n#endif\n\n#ifndef traceTASK_INCREMENT_TICK\n    #define traceTASK_INCREMENT_TICK( xTickCount )\n#endif\n\n#ifndef traceTIMER_CREATE\n    #define traceTIMER_CREATE( pxNewTimer )\n#endif\n\n#ifndef traceTIMER_CREATE_FAILED\n    #define traceTIMER_CREATE_FAILED()\n#endif\n\n#ifndef traceTIMER_COMMAND_SEND\n    #define traceTIMER_COMMAND_SEND( xTimer, xMessageID, xMessageValueValue, xReturn )\n#endif\n\n#ifndef traceTIMER_EXPIRED\n    #define traceTIMER_EXPIRED( pxTimer )\n#endif\n\n#ifndef traceTIMER_COMMAND_RECEIVED\n    #define traceTIMER_COMMAND_RECEIVED( pxTimer, xMessageID, xMessageValue )\n#endif\n\n#ifndef traceMALLOC\n    #define traceMALLOC( pvAddress, uiSize )\n#endif\n\n#ifndef traceFREE\n    #define traceFREE( pvAddress, uiSize )\n#endif\n\n#ifndef traceEVENT_GROUP_CREATE\n    #define traceEVENT_GROUP_CREATE( xEventGroup )\n#endif\n\n#ifndef traceEVENT_GROUP_CREATE_FAILED\n    #define traceEVENT_GROUP_CREATE_FAILED()\n#endif\n\n#ifndef traceEVENT_GROUP_SYNC_BLOCK\n    #define traceEVENT_GROUP_SYNC_BLOCK( xEventGroup, uxBitsToSet, uxBitsToWaitFor )\n#endif\n\n#ifndef traceEVENT_GROUP_SYNC_END\n    #define traceEVENT_GROUP_SYNC_END( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTimeoutOccurred )    ( void ) ( xTimeoutOccurred )\n#endif\n\n#ifndef traceEVENT_GROUP_WAIT_BITS_BLOCK\n    #define traceEVENT_GROUP_WAIT_BITS_BLOCK( xEventGroup, uxBitsToWaitFor )\n#endif\n\n#ifndef traceEVENT_GROUP_WAIT_BITS_END\n    #define traceEVENT_GROUP_WAIT_BITS_END( xEventGroup, uxBitsToWaitFor, xTimeoutOccurred )    ( void ) ( xTimeoutOccurred )\n#endif\n\n#ifndef traceEVENT_GROUP_CLEAR_BITS\n    #define traceEVENT_GROUP_CLEAR_BITS( xEventGroup, uxBitsToClear )\n#endif\n\n#ifndef traceEVENT_GROUP_CLEAR_BITS_FROM_ISR\n    #define traceEVENT_GROUP_CLEAR_BITS_FROM_ISR( xEventGroup, uxBitsToClear )\n#endif\n\n#ifndef traceEVENT_GROUP_SET_BITS\n    #define traceEVENT_GROUP_SET_BITS( xEventGroup, uxBitsToSet )\n#endif\n\n#ifndef traceEVENT_GROUP_SET_BITS_FROM_ISR\n    #define traceEVENT_GROUP_SET_BITS_FROM_ISR( xEventGroup, uxBitsToSet )\n#endif\n\n#ifndef traceEVENT_GROUP_DELETE\n    #define traceEVENT_GROUP_DELETE( xEventGroup )\n#endif\n\n#ifndef tracePEND_FUNC_CALL\n    #define tracePEND_FUNC_CALL( xFunctionToPend, pvParameter1, ulParameter2, ret )\n#endif\n\n#ifndef tracePEND_FUNC_CALL_FROM_ISR\n    #define tracePEND_FUNC_CALL_FROM_ISR( xFunctionToPend, pvParameter1, ulParameter2, ret )\n#endif\n\n#ifndef traceQUEUE_REGISTRY_ADD\n    #define traceQUEUE_REGISTRY_ADD( xQueue, pcQueueName )\n#endif\n\n#ifndef traceTASK_NOTIFY_TAKE_BLOCK\n    #define traceTASK_NOTIFY_TAKE_BLOCK( uxIndexToWait )\n#endif\n\n#ifndef traceTASK_NOTIFY_TAKE\n    #define traceTASK_NOTIFY_TAKE( uxIndexToWait )\n#endif\n\n#ifndef traceTASK_NOTIFY_WAIT_BLOCK\n    #define traceTASK_NOTIFY_WAIT_BLOCK( uxIndexToWait )\n#endif\n\n#ifndef traceTASK_NOTIFY_WAIT\n    #define traceTASK_NOTIFY_WAIT( uxIndexToWait )\n#endif\n\n#ifndef traceTASK_NOTIFY\n    #define traceTASK_NOTIFY( uxIndexToNotify )\n#endif\n\n#ifndef traceTASK_NOTIFY_FROM_ISR\n    #define traceTASK_NOTIFY_FROM_ISR( uxIndexToNotify )\n#endif\n\n#ifndef traceTASK_NOTIFY_GIVE_FROM_ISR\n    #define traceTASK_NOTIFY_GIVE_FROM_ISR( uxIndexToNotify )\n#endif\n\n#ifndef traceISR_EXIT_TO_SCHEDULER\n    #define traceISR_EXIT_TO_SCHEDULER()\n#endif\n\n#ifndef traceISR_EXIT\n    #define traceISR_EXIT()\n#endif\n\n#ifndef traceISR_ENTER\n    #define traceISR_ENTER()\n#endif\n\n#ifndef traceSTREAM_BUFFER_CREATE_FAILED\n    #define traceSTREAM_BUFFER_CREATE_FAILED( xStreamBufferType )\n#endif\n\n#ifndef traceSTREAM_BUFFER_CREATE_STATIC_FAILED\n    #define traceSTREAM_BUFFER_CREATE_STATIC_FAILED( xReturn, xStreamBufferType )\n#endif\n\n#ifndef traceSTREAM_BUFFER_CREATE\n    #define traceSTREAM_BUFFER_CREATE( pxStreamBuffer, xStreamBufferType )\n#endif\n\n#ifndef traceSTREAM_BUFFER_DELETE\n    #define traceSTREAM_BUFFER_DELETE( xStreamBuffer )\n#endif\n\n#ifndef traceSTREAM_BUFFER_RESET\n    #define traceSTREAM_BUFFER_RESET( xStreamBuffer )\n#endif\n\n#ifndef traceSTREAM_BUFFER_RESET_FROM_ISR\n    #define traceSTREAM_BUFFER_RESET_FROM_ISR( xStreamBuffer )\n#endif\n\n#ifndef traceBLOCKING_ON_STREAM_BUFFER_SEND\n    #define traceBLOCKING_ON_STREAM_BUFFER_SEND( xStreamBuffer )\n#endif\n\n#ifndef traceSTREAM_BUFFER_SEND\n    #define traceSTREAM_BUFFER_SEND( xStreamBuffer, xBytesSent )\n#endif\n\n#ifndef traceSTREAM_BUFFER_SEND_FAILED\n    #define traceSTREAM_BUFFER_SEND_FAILED( xStreamBuffer )\n#endif\n\n#ifndef traceSTREAM_BUFFER_SEND_FROM_ISR\n    #define traceSTREAM_BUFFER_SEND_FROM_ISR( xStreamBuffer, xBytesSent )\n#endif\n\n#ifndef traceBLOCKING_ON_STREAM_BUFFER_RECEIVE\n    #define traceBLOCKING_ON_STREAM_BUFFER_RECEIVE( xStreamBuffer )\n#endif\n\n#ifndef traceSTREAM_BUFFER_RECEIVE\n    #define traceSTREAM_BUFFER_RECEIVE( xStreamBuffer, xReceivedLength )\n#endif\n\n#ifndef traceSTREAM_BUFFER_RECEIVE_FAILED\n    #define traceSTREAM_BUFFER_RECEIVE_FAILED( xStreamBuffer )\n#endif\n\n#ifndef traceSTREAM_BUFFER_RECEIVE_FROM_ISR\n    #define traceSTREAM_BUFFER_RECEIVE_FROM_ISR( xStreamBuffer, xReceivedLength )\n#endif\n\n#ifndef traceENTER_xEventGroupCreateStatic\n    #define traceENTER_xEventGroupCreateStatic( pxEventGroupBuffer )\n#endif\n\n#ifndef traceRETURN_xEventGroupCreateStatic\n    #define traceRETURN_xEventGroupCreateStatic( pxEventBits )\n#endif\n\n#ifndef traceENTER_xEventGroupCreate\n    #define traceENTER_xEventGroupCreate()\n#endif\n\n#ifndef traceRETURN_xEventGroupCreate\n    #define traceRETURN_xEventGroupCreate( pxEventBits )\n#endif\n\n#ifndef traceENTER_xEventGroupSync\n    #define traceENTER_xEventGroupSync( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_xEventGroupSync\n    #define traceRETURN_xEventGroupSync( uxReturn )\n#endif\n\n#ifndef traceENTER_xEventGroupWaitBits\n    #define traceENTER_xEventGroupWaitBits( xEventGroup, uxBitsToWaitFor, xClearOnExit, xWaitForAllBits, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_xEventGroupWaitBits\n    #define traceRETURN_xEventGroupWaitBits( uxReturn )\n#endif\n\n#ifndef traceENTER_xEventGroupClearBits\n    #define traceENTER_xEventGroupClearBits( xEventGroup, uxBitsToClear )\n#endif\n\n#ifndef traceRETURN_xEventGroupClearBits\n    #define traceRETURN_xEventGroupClearBits( uxReturn )\n#endif\n\n#ifndef traceENTER_xEventGroupClearBitsFromISR\n    #define traceENTER_xEventGroupClearBitsFromISR( xEventGroup, uxBitsToClear )\n#endif\n\n#ifndef traceRETURN_xEventGroupClearBitsFromISR\n    #define traceRETURN_xEventGroupClearBitsFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_xEventGroupGetBitsFromISR\n    #define traceENTER_xEventGroupGetBitsFromISR( xEventGroup )\n#endif\n\n#ifndef traceRETURN_xEventGroupGetBitsFromISR\n    #define traceRETURN_xEventGroupGetBitsFromISR( uxReturn )\n#endif\n\n#ifndef traceENTER_xEventGroupSetBits\n    #define traceENTER_xEventGroupSetBits( xEventGroup, uxBitsToSet )\n#endif\n\n#ifndef traceRETURN_xEventGroupSetBits\n    #define traceRETURN_xEventGroupSetBits( uxEventBits )\n#endif\n\n#ifndef traceENTER_vEventGroupDelete\n    #define traceENTER_vEventGroupDelete( xEventGroup )\n#endif\n\n#ifndef traceRETURN_vEventGroupDelete\n    #define traceRETURN_vEventGroupDelete()\n#endif\n\n#ifndef traceENTER_xEventGroupGetStaticBuffer\n    #define traceENTER_xEventGroupGetStaticBuffer( xEventGroup, ppxEventGroupBuffer )\n#endif\n\n#ifndef traceRETURN_xEventGroupGetStaticBuffer\n    #define traceRETURN_xEventGroupGetStaticBuffer( xReturn )\n#endif\n\n#ifndef traceENTER_vEventGroupSetBitsCallback\n    #define traceENTER_vEventGroupSetBitsCallback( pvEventGroup, ulBitsToSet )\n#endif\n\n#ifndef traceRETURN_vEventGroupSetBitsCallback\n    #define traceRETURN_vEventGroupSetBitsCallback()\n#endif\n\n#ifndef traceENTER_vEventGroupClearBitsCallback\n    #define traceENTER_vEventGroupClearBitsCallback( pvEventGroup, ulBitsToClear )\n#endif\n\n#ifndef traceRETURN_vEventGroupClearBitsCallback\n    #define traceRETURN_vEventGroupClearBitsCallback()\n#endif\n\n#ifndef traceENTER_xEventGroupSetBitsFromISR\n    #define traceENTER_xEventGroupSetBitsFromISR( xEventGroup, uxBitsToSet, pxHigherPriorityTaskWoken )\n#endif\n\n#ifndef traceRETURN_xEventGroupSetBitsFromISR\n    #define traceRETURN_xEventGroupSetBitsFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_uxEventGroupGetNumber\n    #define traceENTER_uxEventGroupGetNumber( xEventGroup )\n#endif\n\n#ifndef traceRETURN_uxEventGroupGetNumber\n    #define traceRETURN_uxEventGroupGetNumber( xReturn )\n#endif\n\n#ifndef traceENTER_vEventGroupSetNumber\n    #define traceENTER_vEventGroupSetNumber( xEventGroup, uxEventGroupNumber )\n#endif\n\n#ifndef traceRETURN_vEventGroupSetNumber\n    #define traceRETURN_vEventGroupSetNumber()\n#endif\n\n#ifndef traceENTER_xQueueGenericReset\n    #define traceENTER_xQueueGenericReset( xQueue, xNewQueue )\n#endif\n\n#ifndef traceRETURN_xQueueGenericReset\n    #define traceRETURN_xQueueGenericReset( xReturn )\n#endif\n\n#ifndef traceENTER_xQueueGenericCreateStatic\n    #define traceENTER_xQueueGenericCreateStatic( uxQueueLength, uxItemSize, pucQueueStorage, pxStaticQueue, ucQueueType )\n#endif\n\n#ifndef traceRETURN_xQueueGenericCreateStatic\n    #define traceRETURN_xQueueGenericCreateStatic( pxNewQueue )\n#endif\n\n#ifndef traceENTER_xQueueGenericGetStaticBuffers\n    #define traceENTER_xQueueGenericGetStaticBuffers( xQueue, ppucQueueStorage, ppxStaticQueue )\n#endif\n\n#ifndef traceRETURN_xQueueGenericGetStaticBuffers\n    #define traceRETURN_xQueueGenericGetStaticBuffers( xReturn )\n#endif\n\n#ifndef traceENTER_xQueueGenericCreate\n    #define traceENTER_xQueueGenericCreate( uxQueueLength, uxItemSize, ucQueueType )\n#endif\n\n#ifndef traceRETURN_xQueueGenericCreate\n    #define traceRETURN_xQueueGenericCreate( pxNewQueue )\n#endif\n\n#ifndef traceENTER_xQueueCreateMutex\n    #define traceENTER_xQueueCreateMutex( ucQueueType )\n#endif\n\n#ifndef traceRETURN_xQueueCreateMutex\n    #define traceRETURN_xQueueCreateMutex( xNewQueue )\n#endif\n\n#ifndef traceENTER_xQueueCreateMutexStatic\n    #define traceENTER_xQueueCreateMutexStatic( ucQueueType, pxStaticQueue )\n#endif\n\n#ifndef traceRETURN_xQueueCreateMutexStatic\n    #define traceRETURN_xQueueCreateMutexStatic( xNewQueue )\n#endif\n\n#ifndef traceENTER_xQueueGetMutexHolder\n    #define traceENTER_xQueueGetMutexHolder( xSemaphore )\n#endif\n\n#ifndef traceRETURN_xQueueGetMutexHolder\n    #define traceRETURN_xQueueGetMutexHolder( pxReturn )\n#endif\n\n#ifndef traceENTER_xQueueGetMutexHolderFromISR\n    #define traceENTER_xQueueGetMutexHolderFromISR( xSemaphore )\n#endif\n\n#ifndef traceRETURN_xQueueGetMutexHolderFromISR\n    #define traceRETURN_xQueueGetMutexHolderFromISR( pxReturn )\n#endif\n\n#ifndef traceENTER_xQueueGiveMutexRecursive\n    #define traceENTER_xQueueGiveMutexRecursive( xMutex )\n#endif\n\n#ifndef traceRETURN_xQueueGiveMutexRecursive\n    #define traceRETURN_xQueueGiveMutexRecursive( xReturn )\n#endif\n\n#ifndef traceENTER_xQueueTakeMutexRecursive\n    #define traceENTER_xQueueTakeMutexRecursive( xMutex, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_xQueueTakeMutexRecursive\n    #define traceRETURN_xQueueTakeMutexRecursive( xReturn )\n#endif\n\n#ifndef traceENTER_xQueueCreateCountingSemaphoreStatic\n    #define traceENTER_xQueueCreateCountingSemaphoreStatic( uxMaxCount, uxInitialCount, pxStaticQueue )\n#endif\n\n#ifndef traceRETURN_xQueueCreateCountingSemaphoreStatic\n    #define traceRETURN_xQueueCreateCountingSemaphoreStatic( xHandle )\n#endif\n\n#ifndef traceENTER_xQueueCreateCountingSemaphore\n    #define traceENTER_xQueueCreateCountingSemaphore( uxMaxCount, uxInitialCount )\n#endif\n\n#ifndef traceRETURN_xQueueCreateCountingSemaphore\n    #define traceRETURN_xQueueCreateCountingSemaphore( xHandle )\n#endif\n\n#ifndef traceENTER_xQueueGenericSend\n    #define traceENTER_xQueueGenericSend( xQueue, pvItemToQueue, xTicksToWait, xCopyPosition )\n#endif\n\n#ifndef traceRETURN_xQueueGenericSend\n    #define traceRETURN_xQueueGenericSend( xReturn )\n#endif\n\n#ifndef traceENTER_xQueueGenericSendFromISR\n    #define traceENTER_xQueueGenericSendFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken, xCopyPosition )\n#endif\n\n#ifndef traceRETURN_xQueueGenericSendFromISR\n    #define traceRETURN_xQueueGenericSendFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_xQueueGiveFromISR\n    #define traceENTER_xQueueGiveFromISR( xQueue, pxHigherPriorityTaskWoken )\n#endif\n\n#ifndef traceRETURN_xQueueGiveFromISR\n    #define traceRETURN_xQueueGiveFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_xQueueReceive\n    #define traceENTER_xQueueReceive( xQueue, pvBuffer, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_xQueueReceive\n    #define traceRETURN_xQueueReceive( xReturn )\n#endif\n\n#ifndef traceENTER_xQueueSemaphoreTake\n    #define traceENTER_xQueueSemaphoreTake( xQueue, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_xQueueSemaphoreTake\n    #define traceRETURN_xQueueSemaphoreTake( xReturn )\n#endif\n\n#ifndef traceENTER_xQueuePeek\n    #define traceENTER_xQueuePeek( xQueue, pvBuffer, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_xQueuePeek\n    #define traceRETURN_xQueuePeek( xReturn )\n#endif\n\n#ifndef traceENTER_xQueueReceiveFromISR\n    #define traceENTER_xQueueReceiveFromISR( xQueue, pvBuffer, pxHigherPriorityTaskWoken )\n#endif\n\n#ifndef traceRETURN_xQueueReceiveFromISR\n    #define traceRETURN_xQueueReceiveFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_xQueuePeekFromISR\n    #define traceENTER_xQueuePeekFromISR( xQueue, pvBuffer )\n#endif\n\n#ifndef traceRETURN_xQueuePeekFromISR\n    #define traceRETURN_xQueuePeekFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_uxQueueMessagesWaiting\n    #define traceENTER_uxQueueMessagesWaiting( xQueue )\n#endif\n\n#ifndef traceRETURN_uxQueueMessagesWaiting\n    #define traceRETURN_uxQueueMessagesWaiting( uxReturn )\n#endif\n\n#ifndef traceENTER_uxQueueSpacesAvailable\n    #define traceENTER_uxQueueSpacesAvailable( xQueue )\n#endif\n\n#ifndef traceRETURN_uxQueueSpacesAvailable\n    #define traceRETURN_uxQueueSpacesAvailable( uxReturn )\n#endif\n\n#ifndef traceENTER_uxQueueMessagesWaitingFromISR\n    #define traceENTER_uxQueueMessagesWaitingFromISR( xQueue )\n#endif\n\n#ifndef traceRETURN_uxQueueMessagesWaitingFromISR\n    #define traceRETURN_uxQueueMessagesWaitingFromISR( uxReturn )\n#endif\n\n#ifndef traceENTER_vQueueDelete\n    #define traceENTER_vQueueDelete( xQueue )\n#endif\n\n#ifndef traceRETURN_vQueueDelete\n    #define traceRETURN_vQueueDelete()\n#endif\n\n#ifndef traceENTER_uxQueueGetQueueNumber\n    #define traceENTER_uxQueueGetQueueNumber( xQueue )\n#endif\n\n#ifndef traceRETURN_uxQueueGetQueueNumber\n    #define traceRETURN_uxQueueGetQueueNumber( uxQueueNumber )\n#endif\n\n#ifndef traceENTER_vQueueSetQueueNumber\n    #define traceENTER_vQueueSetQueueNumber( xQueue, uxQueueNumber )\n#endif\n\n#ifndef traceRETURN_vQueueSetQueueNumber\n    #define traceRETURN_vQueueSetQueueNumber()\n#endif\n\n#ifndef traceENTER_ucQueueGetQueueType\n    #define traceENTER_ucQueueGetQueueType( xQueue )\n#endif\n\n#ifndef traceRETURN_ucQueueGetQueueType\n    #define traceRETURN_ucQueueGetQueueType( ucQueueType )\n#endif\n\n#ifndef traceENTER_uxQueueGetQueueItemSize\n    #define traceENTER_uxQueueGetQueueItemSize( xQueue )\n#endif\n\n#ifndef traceRETURN_uxQueueGetQueueItemSize\n    #define traceRETURN_uxQueueGetQueueItemSize( uxItemSize )\n#endif\n\n#ifndef traceENTER_uxQueueGetQueueLength\n    #define traceENTER_uxQueueGetQueueLength( xQueue )\n#endif\n\n#ifndef traceRETURN_uxQueueGetQueueLength\n    #define traceRETURN_uxQueueGetQueueLength( uxLength )\n#endif\n\n#ifndef traceENTER_xQueueIsQueueEmptyFromISR\n    #define traceENTER_xQueueIsQueueEmptyFromISR( xQueue )\n#endif\n\n#ifndef traceRETURN_xQueueIsQueueEmptyFromISR\n    #define traceRETURN_xQueueIsQueueEmptyFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_xQueueIsQueueFullFromISR\n    #define traceENTER_xQueueIsQueueFullFromISR( xQueue )\n#endif\n\n#ifndef traceRETURN_xQueueIsQueueFullFromISR\n    #define traceRETURN_xQueueIsQueueFullFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_xQueueCRSend\n    #define traceENTER_xQueueCRSend( xQueue, pvItemToQueue, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_xQueueCRSend\n    #define traceRETURN_xQueueCRSend( xReturn )\n#endif\n\n#ifndef traceENTER_xQueueCRReceive\n    #define traceENTER_xQueueCRReceive( xQueue, pvBuffer, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_xQueueCRReceive\n    #define traceRETURN_xQueueCRReceive( xReturn )\n#endif\n\n#ifndef traceENTER_xQueueCRSendFromISR\n    #define traceENTER_xQueueCRSendFromISR( xQueue, pvItemToQueue, xCoRoutinePreviouslyWoken )\n#endif\n\n#ifndef traceRETURN_xQueueCRSendFromISR\n    #define traceRETURN_xQueueCRSendFromISR( xCoRoutinePreviouslyWoken )\n#endif\n\n#ifndef traceENTER_xQueueCRReceiveFromISR\n    #define traceENTER_xQueueCRReceiveFromISR( xQueue, pvBuffer, pxCoRoutineWoken )\n#endif\n\n#ifndef traceRETURN_xQueueCRReceiveFromISR\n    #define traceRETURN_xQueueCRReceiveFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_vQueueAddToRegistry\n    #define traceENTER_vQueueAddToRegistry( xQueue, pcQueueName )\n#endif\n\n#ifndef traceRETURN_vQueueAddToRegistry\n    #define traceRETURN_vQueueAddToRegistry()\n#endif\n\n#ifndef traceENTER_pcQueueGetName\n    #define traceENTER_pcQueueGetName( xQueue )\n#endif\n\n#ifndef traceRETURN_pcQueueGetName\n    #define traceRETURN_pcQueueGetName( pcReturn )\n#endif\n\n#ifndef traceENTER_vQueueUnregisterQueue\n    #define traceENTER_vQueueUnregisterQueue( xQueue )\n#endif\n\n#ifndef traceRETURN_vQueueUnregisterQueue\n    #define traceRETURN_vQueueUnregisterQueue()\n#endif\n\n#ifndef traceENTER_vQueueWaitForMessageRestricted\n    #define traceENTER_vQueueWaitForMessageRestricted( xQueue, xTicksToWait, xWaitIndefinitely )\n#endif\n\n#ifndef traceRETURN_vQueueWaitForMessageRestricted\n    #define traceRETURN_vQueueWaitForMessageRestricted()\n#endif\n\n#ifndef traceENTER_xQueueCreateSet\n    #define traceENTER_xQueueCreateSet( uxEventQueueLength )\n#endif\n\n#ifndef traceRETURN_xQueueCreateSet\n    #define traceRETURN_xQueueCreateSet( pxQueue )\n#endif\n\n#ifndef traceENTER_xQueueAddToSet\n    #define traceENTER_xQueueAddToSet( xQueueOrSemaphore, xQueueSet )\n#endif\n\n#ifndef traceRETURN_xQueueAddToSet\n    #define traceRETURN_xQueueAddToSet( xReturn )\n#endif\n\n#ifndef traceENTER_xQueueRemoveFromSet\n    #define traceENTER_xQueueRemoveFromSet( xQueueOrSemaphore, xQueueSet )\n#endif\n\n#ifndef traceRETURN_xQueueRemoveFromSet\n    #define traceRETURN_xQueueRemoveFromSet( xReturn )\n#endif\n\n#ifndef traceENTER_xQueueSelectFromSet\n    #define traceENTER_xQueueSelectFromSet( xQueueSet, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_xQueueSelectFromSet\n    #define traceRETURN_xQueueSelectFromSet( xReturn )\n#endif\n\n#ifndef traceENTER_xQueueSelectFromSetFromISR\n    #define traceENTER_xQueueSelectFromSetFromISR( xQueueSet )\n#endif\n\n#ifndef traceRETURN_xQueueSelectFromSetFromISR\n    #define traceRETURN_xQueueSelectFromSetFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_xTimerCreateTimerTask\n    #define traceENTER_xTimerCreateTimerTask()\n#endif\n\n#ifndef traceRETURN_xTimerCreateTimerTask\n    #define traceRETURN_xTimerCreateTimerTask( xReturn )\n#endif\n\n#ifndef traceENTER_xTimerCreate\n    #define traceENTER_xTimerCreate( pcTimerName, xTimerPeriodInTicks, xAutoReload, pvTimerID, pxCallbackFunction )\n#endif\n\n#ifndef traceRETURN_xTimerCreate\n    #define traceRETURN_xTimerCreate( pxNewTimer )\n#endif\n\n#ifndef traceENTER_xTimerCreateStatic\n    #define traceENTER_xTimerCreateStatic( pcTimerName, xTimerPeriodInTicks, xAutoReload, pvTimerID, pxCallbackFunction, pxTimerBuffer )\n#endif\n\n#ifndef traceRETURN_xTimerCreateStatic\n    #define traceRETURN_xTimerCreateStatic( pxNewTimer )\n#endif\n\n#ifndef traceENTER_xTimerGenericCommandFromTask\n    #define traceENTER_xTimerGenericCommandFromTask( xTimer, xCommandID, xOptionalValue, pxHigherPriorityTaskWoken, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_xTimerGenericCommandFromTask\n    #define traceRETURN_xTimerGenericCommandFromTask( xReturn )\n#endif\n\n#ifndef traceENTER_xTimerGenericCommandFromISR\n    #define traceENTER_xTimerGenericCommandFromISR( xTimer, xCommandID, xOptionalValue, pxHigherPriorityTaskWoken, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_xTimerGenericCommandFromISR\n    #define traceRETURN_xTimerGenericCommandFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_xTimerGetTimerDaemonTaskHandle\n    #define traceENTER_xTimerGetTimerDaemonTaskHandle()\n#endif\n\n#ifndef traceRETURN_xTimerGetTimerDaemonTaskHandle\n    #define traceRETURN_xTimerGetTimerDaemonTaskHandle( xTimerTaskHandle )\n#endif\n\n#ifndef traceENTER_xTimerGetPeriod\n    #define traceENTER_xTimerGetPeriod( xTimer )\n#endif\n\n#ifndef traceRETURN_xTimerGetPeriod\n    #define traceRETURN_xTimerGetPeriod( xTimerPeriodInTicks )\n#endif\n\n#ifndef traceENTER_vTimerSetReloadMode\n    #define traceENTER_vTimerSetReloadMode( xTimer, xAutoReload )\n#endif\n\n#ifndef traceRETURN_vTimerSetReloadMode\n    #define traceRETURN_vTimerSetReloadMode()\n#endif\n\n#ifndef traceENTER_xTimerGetReloadMode\n    #define traceENTER_xTimerGetReloadMode( xTimer )\n#endif\n\n#ifndef traceRETURN_xTimerGetReloadMode\n    #define traceRETURN_xTimerGetReloadMode( xReturn )\n#endif\n\n#ifndef traceENTER_uxTimerGetReloadMode\n    #define traceENTER_uxTimerGetReloadMode( xTimer )\n#endif\n\n#ifndef traceRETURN_uxTimerGetReloadMode\n    #define traceRETURN_uxTimerGetReloadMode( uxReturn )\n#endif\n\n#ifndef traceENTER_xTimerGetExpiryTime\n    #define traceENTER_xTimerGetExpiryTime( xTimer )\n#endif\n\n#ifndef traceRETURN_xTimerGetExpiryTime\n    #define traceRETURN_xTimerGetExpiryTime( xReturn )\n#endif\n\n#ifndef traceENTER_xTimerGetStaticBuffer\n    #define traceENTER_xTimerGetStaticBuffer( xTimer, ppxTimerBuffer )\n#endif\n\n#ifndef traceRETURN_xTimerGetStaticBuffer\n    #define traceRETURN_xTimerGetStaticBuffer( xReturn )\n#endif\n\n#ifndef traceENTER_pcTimerGetName\n    #define traceENTER_pcTimerGetName( xTimer )\n#endif\n\n#ifndef traceRETURN_pcTimerGetName\n    #define traceRETURN_pcTimerGetName( pcTimerName )\n#endif\n\n#ifndef traceENTER_xTimerIsTimerActive\n    #define traceENTER_xTimerIsTimerActive( xTimer )\n#endif\n\n#ifndef traceRETURN_xTimerIsTimerActive\n    #define traceRETURN_xTimerIsTimerActive( xReturn )\n#endif\n\n#ifndef traceENTER_pvTimerGetTimerID\n    #define traceENTER_pvTimerGetTimerID( xTimer )\n#endif\n\n#ifndef traceRETURN_pvTimerGetTimerID\n    #define traceRETURN_pvTimerGetTimerID( pvReturn )\n#endif\n\n#ifndef traceENTER_vTimerSetTimerID\n    #define traceENTER_vTimerSetTimerID( xTimer, pvNewID )\n#endif\n\n#ifndef traceRETURN_vTimerSetTimerID\n    #define traceRETURN_vTimerSetTimerID()\n#endif\n\n#ifndef traceENTER_xTimerPendFunctionCallFromISR\n    #define traceENTER_xTimerPendFunctionCallFromISR( xFunctionToPend, pvParameter1, ulParameter2, pxHigherPriorityTaskWoken )\n#endif\n\n#ifndef traceRETURN_xTimerPendFunctionCallFromISR\n    #define traceRETURN_xTimerPendFunctionCallFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_xTimerPendFunctionCall\n    #define traceENTER_xTimerPendFunctionCall( xFunctionToPend, pvParameter1, ulParameter2, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_xTimerPendFunctionCall\n    #define traceRETURN_xTimerPendFunctionCall( xReturn )\n#endif\n\n#ifndef traceENTER_uxTimerGetTimerNumber\n    #define traceENTER_uxTimerGetTimerNumber( xTimer )\n#endif\n\n#ifndef traceRETURN_uxTimerGetTimerNumber\n    #define traceRETURN_uxTimerGetTimerNumber( uxTimerNumber )\n#endif\n\n#ifndef traceENTER_vTimerSetTimerNumber\n    #define traceENTER_vTimerSetTimerNumber( xTimer, uxTimerNumber )\n#endif\n\n#ifndef traceRETURN_vTimerSetTimerNumber\n    #define traceRETURN_vTimerSetTimerNumber()\n#endif\n\n#ifndef traceENTER_xTaskCreateStatic\n    #define traceENTER_xTaskCreateStatic( pxTaskCode, pcName, uxStackDepth, pvParameters, uxPriority, puxStackBuffer, pxTaskBuffer )\n#endif\n\n#ifndef traceRETURN_xTaskCreateStatic\n    #define traceRETURN_xTaskCreateStatic( xReturn )\n#endif\n\n#ifndef traceENTER_xTaskCreateStaticAffinitySet\n    #define traceENTER_xTaskCreateStaticAffinitySet( pxTaskCode, pcName, uxStackDepth, pvParameters, uxPriority, puxStackBuffer, pxTaskBuffer, uxCoreAffinityMask )\n#endif\n\n#ifndef traceRETURN_xTaskCreateStaticAffinitySet\n    #define traceRETURN_xTaskCreateStaticAffinitySet( xReturn )\n#endif\n\n#ifndef traceENTER_xTaskCreateRestrictedStatic\n    #define traceENTER_xTaskCreateRestrictedStatic( pxTaskDefinition, pxCreatedTask )\n#endif\n\n#ifndef traceRETURN_xTaskCreateRestrictedStatic\n    #define traceRETURN_xTaskCreateRestrictedStatic( xReturn )\n#endif\n\n#ifndef traceENTER_xTaskCreateRestrictedStaticAffinitySet\n    #define traceENTER_xTaskCreateRestrictedStaticAffinitySet( pxTaskDefinition, uxCoreAffinityMask, pxCreatedTask )\n#endif\n\n#ifndef traceRETURN_xTaskCreateRestrictedStaticAffinitySet\n    #define traceRETURN_xTaskCreateRestrictedStaticAffinitySet( xReturn )\n#endif\n\n#ifndef traceENTER_xTaskCreateRestricted\n    #define traceENTER_xTaskCreateRestricted( pxTaskDefinition, pxCreatedTask )\n#endif\n\n#ifndef traceRETURN_xTaskCreateRestricted\n    #define traceRETURN_xTaskCreateRestricted( xReturn )\n#endif\n\n#ifndef traceENTER_xTaskCreateRestrictedAffinitySet\n    #define traceENTER_xTaskCreateRestrictedAffinitySet( pxTaskDefinition, uxCoreAffinityMask, pxCreatedTask )\n#endif\n\n#ifndef traceRETURN_xTaskCreateRestrictedAffinitySet\n    #define traceRETURN_xTaskCreateRestrictedAffinitySet( xReturn )\n#endif\n\n#ifndef traceENTER_xTaskCreate\n    #define traceENTER_xTaskCreate( pxTaskCode, pcName, uxStackDepth, pvParameters, uxPriority, pxCreatedTask )\n#endif\n\n#ifndef traceRETURN_xTaskCreate\n    #define traceRETURN_xTaskCreate( xReturn )\n#endif\n\n#ifndef traceENTER_xTaskCreateAffinitySet\n    #define traceENTER_xTaskCreateAffinitySet( pxTaskCode, pcName, uxStackDepth, pvParameters, uxPriority, uxCoreAffinityMask, pxCreatedTask )\n#endif\n\n#ifndef traceRETURN_xTaskCreateAffinitySet\n    #define traceRETURN_xTaskCreateAffinitySet( xReturn )\n#endif\n\n#ifndef traceENTER_vTaskDelete\n    #define traceENTER_vTaskDelete( xTaskToDelete )\n#endif\n\n#ifndef traceRETURN_vTaskDelete\n    #define traceRETURN_vTaskDelete()\n#endif\n\n#ifndef traceENTER_xTaskDelayUntil\n    #define traceENTER_xTaskDelayUntil( pxPreviousWakeTime, xTimeIncrement )\n#endif\n\n#ifndef traceRETURN_xTaskDelayUntil\n    #define traceRETURN_xTaskDelayUntil( xShouldDelay )\n#endif\n\n#ifndef traceENTER_vTaskDelay\n    #define traceENTER_vTaskDelay( xTicksToDelay )\n#endif\n\n#ifndef traceRETURN_vTaskDelay\n    #define traceRETURN_vTaskDelay()\n#endif\n\n#ifndef traceENTER_eTaskGetState\n    #define traceENTER_eTaskGetState( xTask )\n#endif\n\n#ifndef traceRETURN_eTaskGetState\n    #define traceRETURN_eTaskGetState( eReturn )\n#endif\n\n#ifndef traceENTER_uxTaskPriorityGet\n    #define traceENTER_uxTaskPriorityGet( xTask )\n#endif\n\n#ifndef traceRETURN_uxTaskPriorityGet\n    #define traceRETURN_uxTaskPriorityGet( uxReturn )\n#endif\n\n#ifndef traceENTER_uxTaskPriorityGetFromISR\n    #define traceENTER_uxTaskPriorityGetFromISR( xTask )\n#endif\n\n#ifndef traceRETURN_uxTaskPriorityGetFromISR\n    #define traceRETURN_uxTaskPriorityGetFromISR( uxReturn )\n#endif\n\n#ifndef traceENTER_uxTaskBasePriorityGet\n    #define traceENTER_uxTaskBasePriorityGet( xTask )\n#endif\n\n#ifndef traceRETURN_uxTaskBasePriorityGet\n    #define traceRETURN_uxTaskBasePriorityGet( uxReturn )\n#endif\n\n#ifndef traceENTER_uxTaskBasePriorityGetFromISR\n    #define traceENTER_uxTaskBasePriorityGetFromISR( xTask )\n#endif\n\n#ifndef traceRETURN_uxTaskBasePriorityGetFromISR\n    #define traceRETURN_uxTaskBasePriorityGetFromISR( uxReturn )\n#endif\n\n#ifndef traceENTER_vTaskPrioritySet\n    #define traceENTER_vTaskPrioritySet( xTask, uxNewPriority )\n#endif\n\n#ifndef traceRETURN_vTaskPrioritySet\n    #define traceRETURN_vTaskPrioritySet()\n#endif\n\n#ifndef traceENTER_vTaskCoreAffinitySet\n    #define traceENTER_vTaskCoreAffinitySet( xTask, uxCoreAffinityMask )\n#endif\n\n#ifndef traceRETURN_vTaskCoreAffinitySet\n    #define traceRETURN_vTaskCoreAffinitySet()\n#endif\n\n#ifndef traceENTER_vTaskCoreAffinityGet\n    #define traceENTER_vTaskCoreAffinityGet( xTask )\n#endif\n\n#ifndef traceRETURN_vTaskCoreAffinityGet\n    #define traceRETURN_vTaskCoreAffinityGet( uxCoreAffinityMask )\n#endif\n\n#ifndef traceENTER_vTaskPreemptionDisable\n    #define traceENTER_vTaskPreemptionDisable( xTask )\n#endif\n\n#ifndef traceRETURN_vTaskPreemptionDisable\n    #define traceRETURN_vTaskPreemptionDisable()\n#endif\n\n#ifndef traceENTER_vTaskPreemptionEnable\n    #define traceENTER_vTaskPreemptionEnable( xTask )\n#endif\n\n#ifndef traceRETURN_vTaskPreemptionEnable\n    #define traceRETURN_vTaskPreemptionEnable()\n#endif\n\n#ifndef traceENTER_vTaskSuspend\n    #define traceENTER_vTaskSuspend( xTaskToSuspend )\n#endif\n\n#ifndef traceRETURN_vTaskSuspend\n    #define traceRETURN_vTaskSuspend()\n#endif\n\n#ifndef traceENTER_vTaskResume\n    #define traceENTER_vTaskResume( xTaskToResume )\n#endif\n\n#ifndef traceRETURN_vTaskResume\n    #define traceRETURN_vTaskResume()\n#endif\n\n#ifndef traceENTER_xTaskResumeFromISR\n    #define traceENTER_xTaskResumeFromISR( xTaskToResume )\n#endif\n\n#ifndef traceRETURN_xTaskResumeFromISR\n    #define traceRETURN_xTaskResumeFromISR( xYieldRequired )\n#endif\n\n#ifndef traceENTER_vTaskStartScheduler\n    #define traceENTER_vTaskStartScheduler()\n#endif\n\n#ifndef traceRETURN_vTaskStartScheduler\n    #define traceRETURN_vTaskStartScheduler()\n#endif\n\n#ifndef traceENTER_vTaskEndScheduler\n    #define traceENTER_vTaskEndScheduler()\n#endif\n\n#ifndef traceRETURN_vTaskEndScheduler\n    #define traceRETURN_vTaskEndScheduler()\n#endif\n\n#ifndef traceENTER_vTaskSuspendAll\n    #define traceENTER_vTaskSuspendAll()\n#endif\n\n#ifndef traceRETURN_vTaskSuspendAll\n    #define traceRETURN_vTaskSuspendAll()\n#endif\n\n#ifndef traceENTER_xTaskResumeAll\n    #define traceENTER_xTaskResumeAll()\n#endif\n\n#ifndef traceRETURN_xTaskResumeAll\n    #define traceRETURN_xTaskResumeAll( xAlreadyYielded )\n#endif\n\n#ifndef traceENTER_xTaskGetTickCount\n    #define traceENTER_xTaskGetTickCount()\n#endif\n\n#ifndef traceRETURN_xTaskGetTickCount\n    #define traceRETURN_xTaskGetTickCount( xTicks )\n#endif\n\n#ifndef traceENTER_xTaskGetTickCountFromISR\n    #define traceENTER_xTaskGetTickCountFromISR()\n#endif\n\n#ifndef traceRETURN_xTaskGetTickCountFromISR\n    #define traceRETURN_xTaskGetTickCountFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_uxTaskGetNumberOfTasks\n    #define traceENTER_uxTaskGetNumberOfTasks()\n#endif\n\n#ifndef traceRETURN_uxTaskGetNumberOfTasks\n    #define traceRETURN_uxTaskGetNumberOfTasks( uxCurrentNumberOfTasks )\n#endif\n\n#ifndef traceENTER_pcTaskGetName\n    #define traceENTER_pcTaskGetName( xTaskToQuery )\n#endif\n\n#ifndef traceRETURN_pcTaskGetName\n    #define traceRETURN_pcTaskGetName( pcTaskName )\n#endif\n\n#ifndef traceENTER_xTaskGetHandle\n    #define traceENTER_xTaskGetHandle( pcNameToQuery )\n#endif\n\n#ifndef traceRETURN_xTaskGetHandle\n    #define traceRETURN_xTaskGetHandle( pxTCB )\n#endif\n\n#ifndef traceENTER_xTaskGetStaticBuffers\n    #define traceENTER_xTaskGetStaticBuffers( xTask, ppuxStackBuffer, ppxTaskBuffer )\n#endif\n\n#ifndef traceRETURN_xTaskGetStaticBuffers\n    #define traceRETURN_xTaskGetStaticBuffers( xReturn )\n#endif\n\n#ifndef traceENTER_uxTaskGetSystemState\n    #define traceENTER_uxTaskGetSystemState( pxTaskStatusArray, uxArraySize, pulTotalRunTime )\n#endif\n\n#ifndef traceRETURN_uxTaskGetSystemState\n    #define traceRETURN_uxTaskGetSystemState( uxTask )\n#endif\n\n#if ( configNUMBER_OF_CORES == 1 )\n    #ifndef traceENTER_xTaskGetIdleTaskHandle\n        #define traceENTER_xTaskGetIdleTaskHandle()\n    #endif\n#endif\n\n#if ( configNUMBER_OF_CORES == 1 )\n    #ifndef traceRETURN_xTaskGetIdleTaskHandle\n        #define traceRETURN_xTaskGetIdleTaskHandle( xIdleTaskHandle )\n    #endif\n#endif\n\n#ifndef traceENTER_xTaskGetIdleTaskHandleForCore\n    #define traceENTER_xTaskGetIdleTaskHandleForCore( xCoreID )\n#endif\n\n#ifndef traceRETURN_xTaskGetIdleTaskHandleForCore\n    #define traceRETURN_xTaskGetIdleTaskHandleForCore( xIdleTaskHandle )\n#endif\n\n#ifndef traceENTER_vTaskStepTick\n    #define traceENTER_vTaskStepTick( xTicksToJump )\n#endif\n\n#ifndef traceRETURN_vTaskStepTick\n    #define traceRETURN_vTaskStepTick()\n#endif\n\n#ifndef traceENTER_xTaskCatchUpTicks\n    #define traceENTER_xTaskCatchUpTicks( xTicksToCatchUp )\n#endif\n\n#ifndef traceRETURN_xTaskCatchUpTicks\n    #define traceRETURN_xTaskCatchUpTicks( xYieldOccurred )\n#endif\n\n#ifndef traceENTER_xTaskAbortDelay\n    #define traceENTER_xTaskAbortDelay( xTask )\n#endif\n\n#ifndef traceRETURN_xTaskAbortDelay\n    #define traceRETURN_xTaskAbortDelay( xReturn )\n#endif\n\n#ifndef traceENTER_xTaskIncrementTick\n    #define traceENTER_xTaskIncrementTick()\n#endif\n\n#ifndef traceRETURN_xTaskIncrementTick\n    #define traceRETURN_xTaskIncrementTick( xSwitchRequired )\n#endif\n\n#ifndef traceENTER_vTaskSetApplicationTaskTag\n    #define traceENTER_vTaskSetApplicationTaskTag( xTask, pxHookFunction )\n#endif\n\n#ifndef traceRETURN_vTaskSetApplicationTaskTag\n    #define traceRETURN_vTaskSetApplicationTaskTag()\n#endif\n\n#ifndef traceENTER_xTaskGetApplicationTaskTag\n    #define traceENTER_xTaskGetApplicationTaskTag( xTask )\n#endif\n\n#ifndef traceRETURN_xTaskGetApplicationTaskTag\n    #define traceRETURN_xTaskGetApplicationTaskTag( xReturn )\n#endif\n\n#ifndef traceENTER_xTaskGetApplicationTaskTagFromISR\n    #define traceENTER_xTaskGetApplicationTaskTagFromISR( xTask )\n#endif\n\n#ifndef traceRETURN_xTaskGetApplicationTaskTagFromISR\n    #define traceRETURN_xTaskGetApplicationTaskTagFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_xTaskCallApplicationTaskHook\n    #define traceENTER_xTaskCallApplicationTaskHook( xTask, pvParameter )\n#endif\n\n#ifndef traceRETURN_xTaskCallApplicationTaskHook\n    #define traceRETURN_xTaskCallApplicationTaskHook( xReturn )\n#endif\n\n#ifndef traceENTER_vTaskSwitchContext\n    #define traceENTER_vTaskSwitchContext()\n#endif\n\n#ifndef traceRETURN_vTaskSwitchContext\n    #define traceRETURN_vTaskSwitchContext()\n#endif\n\n#ifndef traceENTER_vTaskPlaceOnEventList\n    #define traceENTER_vTaskPlaceOnEventList( pxEventList, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_vTaskPlaceOnEventList\n    #define traceRETURN_vTaskPlaceOnEventList()\n#endif\n\n#ifndef traceENTER_vTaskPlaceOnUnorderedEventList\n    #define traceENTER_vTaskPlaceOnUnorderedEventList( pxEventList, xItemValue, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_vTaskPlaceOnUnorderedEventList\n    #define traceRETURN_vTaskPlaceOnUnorderedEventList()\n#endif\n\n#ifndef traceENTER_vTaskPlaceOnEventListRestricted\n    #define traceENTER_vTaskPlaceOnEventListRestricted( pxEventList, xTicksToWait, xWaitIndefinitely )\n#endif\n\n#ifndef traceRETURN_vTaskPlaceOnEventListRestricted\n    #define traceRETURN_vTaskPlaceOnEventListRestricted()\n#endif\n\n#ifndef traceENTER_xTaskRemoveFromEventList\n    #define traceENTER_xTaskRemoveFromEventList( pxEventList )\n#endif\n\n#ifndef traceRETURN_xTaskRemoveFromEventList\n    #define traceRETURN_xTaskRemoveFromEventList( xReturn )\n#endif\n\n#ifndef traceENTER_vTaskRemoveFromUnorderedEventList\n    #define traceENTER_vTaskRemoveFromUnorderedEventList( pxEventListItem, xItemValue )\n#endif\n\n#ifndef traceRETURN_vTaskRemoveFromUnorderedEventList\n    #define traceRETURN_vTaskRemoveFromUnorderedEventList()\n#endif\n\n#ifndef traceENTER_vTaskSetTimeOutState\n    #define traceENTER_vTaskSetTimeOutState( pxTimeOut )\n#endif\n\n#ifndef traceRETURN_vTaskSetTimeOutState\n    #define traceRETURN_vTaskSetTimeOutState()\n#endif\n\n#ifndef traceENTER_vTaskInternalSetTimeOutState\n    #define traceENTER_vTaskInternalSetTimeOutState( pxTimeOut )\n#endif\n\n#ifndef traceRETURN_vTaskInternalSetTimeOutState\n    #define traceRETURN_vTaskInternalSetTimeOutState()\n#endif\n\n#ifndef traceENTER_xTaskCheckForTimeOut\n    #define traceENTER_xTaskCheckForTimeOut( pxTimeOut, pxTicksToWait )\n#endif\n\n#ifndef traceRETURN_xTaskCheckForTimeOut\n    #define traceRETURN_xTaskCheckForTimeOut( xReturn )\n#endif\n\n#ifndef traceENTER_vTaskMissedYield\n    #define traceENTER_vTaskMissedYield()\n#endif\n\n#ifndef traceRETURN_vTaskMissedYield\n    #define traceRETURN_vTaskMissedYield()\n#endif\n\n#ifndef traceENTER_uxTaskGetTaskNumber\n    #define traceENTER_uxTaskGetTaskNumber( xTask )\n#endif\n\n#ifndef traceRETURN_uxTaskGetTaskNumber\n    #define traceRETURN_uxTaskGetTaskNumber( uxReturn )\n#endif\n\n#ifndef traceENTER_vTaskSetTaskNumber\n    #define traceENTER_vTaskSetTaskNumber( xTask, uxHandle )\n#endif\n\n#ifndef traceRETURN_vTaskSetTaskNumber\n    #define traceRETURN_vTaskSetTaskNumber()\n#endif\n\n#ifndef traceENTER_eTaskConfirmSleepModeStatus\n    #define traceENTER_eTaskConfirmSleepModeStatus()\n#endif\n\n#ifndef traceRETURN_eTaskConfirmSleepModeStatus\n    #define traceRETURN_eTaskConfirmSleepModeStatus( eReturn )\n#endif\n\n#ifndef traceENTER_vTaskSetThreadLocalStoragePointer\n    #define traceENTER_vTaskSetThreadLocalStoragePointer( xTaskToSet, xIndex, pvValue )\n#endif\n\n#ifndef traceRETURN_vTaskSetThreadLocalStoragePointer\n    #define traceRETURN_vTaskSetThreadLocalStoragePointer()\n#endif\n\n#ifndef traceENTER_pvTaskGetThreadLocalStoragePointer\n    #define traceENTER_pvTaskGetThreadLocalStoragePointer( xTaskToQuery, xIndex )\n#endif\n\n#ifndef traceRETURN_pvTaskGetThreadLocalStoragePointer\n    #define traceRETURN_pvTaskGetThreadLocalStoragePointer( pvReturn )\n#endif\n\n#ifndef traceENTER_vTaskAllocateMPURegions\n    #define traceENTER_vTaskAllocateMPURegions( xTaskToModify, pxRegions )\n#endif\n\n#ifndef traceRETURN_vTaskAllocateMPURegions\n    #define traceRETURN_vTaskAllocateMPURegions()\n#endif\n\n#ifndef traceENTER_vTaskGetInfo\n    #define traceENTER_vTaskGetInfo( xTask, pxTaskStatus, xGetFreeStackSpace, eState )\n#endif\n\n#ifndef traceRETURN_vTaskGetInfo\n    #define traceRETURN_vTaskGetInfo()\n#endif\n\n#ifndef traceENTER_uxTaskGetStackHighWaterMark2\n    #define traceENTER_uxTaskGetStackHighWaterMark2( xTask )\n#endif\n\n#ifndef traceRETURN_uxTaskGetStackHighWaterMark2\n    #define traceRETURN_uxTaskGetStackHighWaterMark2( uxReturn )\n#endif\n\n#ifndef traceENTER_uxTaskGetStackHighWaterMark\n    #define traceENTER_uxTaskGetStackHighWaterMark( xTask )\n#endif\n\n#ifndef traceRETURN_uxTaskGetStackHighWaterMark\n    #define traceRETURN_uxTaskGetStackHighWaterMark( uxReturn )\n#endif\n\n#ifndef traceENTER_xTaskGetCurrentTaskHandle\n    #define traceENTER_xTaskGetCurrentTaskHandle()\n#endif\n\n#ifndef traceRETURN_xTaskGetCurrentTaskHandle\n    #define traceRETURN_xTaskGetCurrentTaskHandle( xReturn )\n#endif\n\n#ifndef traceENTER_xTaskGetCurrentTaskHandleForCore\n    #define traceENTER_xTaskGetCurrentTaskHandleForCore( xCoreID )\n#endif\n\n#ifndef traceRETURN_xTaskGetCurrentTaskHandleForCore\n    #define traceRETURN_xTaskGetCurrentTaskHandleForCore( xReturn )\n#endif\n\n#ifndef traceENTER_xTaskGetSchedulerState\n    #define traceENTER_xTaskGetSchedulerState()\n#endif\n\n#ifndef traceRETURN_xTaskGetSchedulerState\n    #define traceRETURN_xTaskGetSchedulerState( xReturn )\n#endif\n\n#ifndef traceENTER_xTaskPriorityInherit\n    #define traceENTER_xTaskPriorityInherit( pxMutexHolder )\n#endif\n\n#ifndef traceRETURN_xTaskPriorityInherit\n    #define traceRETURN_xTaskPriorityInherit( xReturn )\n#endif\n\n#ifndef traceENTER_xTaskPriorityDisinherit\n    #define traceENTER_xTaskPriorityDisinherit( pxMutexHolder )\n#endif\n\n#ifndef traceRETURN_xTaskPriorityDisinherit\n    #define traceRETURN_xTaskPriorityDisinherit( xReturn )\n#endif\n\n#ifndef traceENTER_vTaskPriorityDisinheritAfterTimeout\n    #define traceENTER_vTaskPriorityDisinheritAfterTimeout( pxMutexHolder, uxHighestPriorityWaitingTask )\n#endif\n\n#ifndef traceRETURN_vTaskPriorityDisinheritAfterTimeout\n    #define traceRETURN_vTaskPriorityDisinheritAfterTimeout()\n#endif\n\n#ifndef traceENTER_vTaskYieldWithinAPI\n    #define traceENTER_vTaskYieldWithinAPI()\n#endif\n\n#ifndef traceRETURN_vTaskYieldWithinAPI\n    #define traceRETURN_vTaskYieldWithinAPI()\n#endif\n\n#ifndef traceENTER_vTaskEnterCritical\n    #define traceENTER_vTaskEnterCritical()\n#endif\n\n#ifndef traceRETURN_vTaskEnterCritical\n    #define traceRETURN_vTaskEnterCritical()\n#endif\n\n#ifndef traceENTER_vTaskEnterCriticalFromISR\n    #define traceENTER_vTaskEnterCriticalFromISR()\n#endif\n\n#ifndef traceRETURN_vTaskEnterCriticalFromISR\n    #define traceRETURN_vTaskEnterCriticalFromISR( uxSavedInterruptStatus )\n#endif\n\n#ifndef traceENTER_vTaskExitCritical\n    #define traceENTER_vTaskExitCritical()\n#endif\n\n#ifndef traceRETURN_vTaskExitCritical\n    #define traceRETURN_vTaskExitCritical()\n#endif\n\n#ifndef traceENTER_vTaskExitCriticalFromISR\n    #define traceENTER_vTaskExitCriticalFromISR( uxSavedInterruptStatus )\n#endif\n\n#ifndef traceRETURN_vTaskExitCriticalFromISR\n    #define traceRETURN_vTaskExitCriticalFromISR()\n#endif\n\n#ifndef traceENTER_vTaskListTasks\n    #define traceENTER_vTaskListTasks( pcWriteBuffer, uxBufferLength )\n#endif\n\n#ifndef traceRETURN_vTaskListTasks\n    #define traceRETURN_vTaskListTasks()\n#endif\n\n#ifndef traceENTER_vTaskGetRunTimeStatistics\n    #define traceENTER_vTaskGetRunTimeStatistics( pcWriteBuffer, uxBufferLength )\n#endif\n\n#ifndef traceRETURN_vTaskGetRunTimeStatistics\n    #define traceRETURN_vTaskGetRunTimeStatistics()\n#endif\n\n#ifndef traceENTER_uxTaskResetEventItemValue\n    #define traceENTER_uxTaskResetEventItemValue()\n#endif\n\n#ifndef traceRETURN_uxTaskResetEventItemValue\n    #define traceRETURN_uxTaskResetEventItemValue( uxReturn )\n#endif\n\n#ifndef traceENTER_pvTaskIncrementMutexHeldCount\n    #define traceENTER_pvTaskIncrementMutexHeldCount()\n#endif\n\n#ifndef traceRETURN_pvTaskIncrementMutexHeldCount\n    #define traceRETURN_pvTaskIncrementMutexHeldCount( pxTCB )\n#endif\n\n#ifndef traceENTER_ulTaskGenericNotifyTake\n    #define traceENTER_ulTaskGenericNotifyTake( uxIndexToWaitOn, xClearCountOnExit, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_ulTaskGenericNotifyTake\n    #define traceRETURN_ulTaskGenericNotifyTake( ulReturn )\n#endif\n\n#ifndef traceENTER_xTaskGenericNotifyWait\n    #define traceENTER_xTaskGenericNotifyWait( uxIndexToWaitOn, ulBitsToClearOnEntry, ulBitsToClearOnExit, pulNotificationValue, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_xTaskGenericNotifyWait\n    #define traceRETURN_xTaskGenericNotifyWait( xReturn )\n#endif\n\n#ifndef traceENTER_xTaskGenericNotify\n    #define traceENTER_xTaskGenericNotify( xTaskToNotify, uxIndexToNotify, ulValue, eAction, pulPreviousNotificationValue )\n#endif\n\n#ifndef traceRETURN_xTaskGenericNotify\n    #define traceRETURN_xTaskGenericNotify( xReturn )\n#endif\n\n#ifndef traceENTER_xTaskGenericNotifyFromISR\n    #define traceENTER_xTaskGenericNotifyFromISR( xTaskToNotify, uxIndexToNotify, ulValue, eAction, pulPreviousNotificationValue, pxHigherPriorityTaskWoken )\n#endif\n\n#ifndef traceRETURN_xTaskGenericNotifyFromISR\n    #define traceRETURN_xTaskGenericNotifyFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_vTaskGenericNotifyGiveFromISR\n    #define traceENTER_vTaskGenericNotifyGiveFromISR( xTaskToNotify, uxIndexToNotify, pxHigherPriorityTaskWoken )\n#endif\n\n#ifndef traceRETURN_vTaskGenericNotifyGiveFromISR\n    #define traceRETURN_vTaskGenericNotifyGiveFromISR()\n#endif\n\n#ifndef traceENTER_xTaskGenericNotifyStateClear\n    #define traceENTER_xTaskGenericNotifyStateClear( xTask, uxIndexToClear )\n#endif\n\n#ifndef traceRETURN_xTaskGenericNotifyStateClear\n    #define traceRETURN_xTaskGenericNotifyStateClear( xReturn )\n#endif\n\n#ifndef traceENTER_ulTaskGenericNotifyValueClear\n    #define traceENTER_ulTaskGenericNotifyValueClear( xTask, uxIndexToClear, ulBitsToClear )\n#endif\n\n#ifndef traceRETURN_ulTaskGenericNotifyValueClear\n    #define traceRETURN_ulTaskGenericNotifyValueClear( ulReturn )\n#endif\n\n#ifndef traceENTER_ulTaskGetRunTimeCounter\n    #define traceENTER_ulTaskGetRunTimeCounter( xTask )\n#endif\n\n#ifndef traceRETURN_ulTaskGetRunTimeCounter\n    #define traceRETURN_ulTaskGetRunTimeCounter( ulRunTimeCounter )\n#endif\n\n#ifndef traceENTER_ulTaskGetRunTimePercent\n    #define traceENTER_ulTaskGetRunTimePercent( xTask )\n#endif\n\n#ifndef traceRETURN_ulTaskGetRunTimePercent\n    #define traceRETURN_ulTaskGetRunTimePercent( ulReturn )\n#endif\n\n#ifndef traceENTER_ulTaskGetIdleRunTimeCounter\n    #define traceENTER_ulTaskGetIdleRunTimeCounter()\n#endif\n\n#ifndef traceRETURN_ulTaskGetIdleRunTimeCounter\n    #define traceRETURN_ulTaskGetIdleRunTimeCounter( ulReturn )\n#endif\n\n#ifndef traceENTER_ulTaskGetIdleRunTimePercent\n    #define traceENTER_ulTaskGetIdleRunTimePercent()\n#endif\n\n#ifndef traceRETURN_ulTaskGetIdleRunTimePercent\n    #define traceRETURN_ulTaskGetIdleRunTimePercent( ulReturn )\n#endif\n\n#ifndef traceENTER_xTaskGetMPUSettings\n    #define traceENTER_xTaskGetMPUSettings( xTask )\n#endif\n\n#ifndef traceRETURN_xTaskGetMPUSettings\n    #define traceRETURN_xTaskGetMPUSettings( xMPUSettings )\n#endif\n\n#ifndef traceENTER_xStreamBufferGenericCreate\n    #define traceENTER_xStreamBufferGenericCreate( xBufferSizeBytes, xTriggerLevelBytes, xStreamBufferType, pxSendCompletedCallback, pxReceiveCompletedCallback )\n#endif\n\n#ifndef traceRETURN_xStreamBufferGenericCreate\n    #define traceRETURN_xStreamBufferGenericCreate( pvAllocatedMemory )\n#endif\n\n#ifndef traceENTER_xStreamBufferGenericCreateStatic\n    #define traceENTER_xStreamBufferGenericCreateStatic( xBufferSizeBytes, xTriggerLevelBytes, xStreamBufferType, pucStreamBufferStorageArea, pxStaticStreamBuffer, pxSendCompletedCallback, pxReceiveCompletedCallback )\n#endif\n\n#ifndef traceRETURN_xStreamBufferGenericCreateStatic\n    #define traceRETURN_xStreamBufferGenericCreateStatic( xReturn )\n#endif\n\n#ifndef traceENTER_xStreamBufferGetStaticBuffers\n    #define traceENTER_xStreamBufferGetStaticBuffers( xStreamBuffer, ppucStreamBufferStorageArea, ppxStaticStreamBuffer )\n#endif\n\n#ifndef traceRETURN_xStreamBufferGetStaticBuffers\n    #define traceRETURN_xStreamBufferGetStaticBuffers( xReturn )\n#endif\n\n#ifndef traceENTER_vStreamBufferDelete\n    #define traceENTER_vStreamBufferDelete( xStreamBuffer )\n#endif\n\n#ifndef traceRETURN_vStreamBufferDelete\n    #define traceRETURN_vStreamBufferDelete()\n#endif\n\n#ifndef traceENTER_xStreamBufferReset\n    #define traceENTER_xStreamBufferReset( xStreamBuffer )\n#endif\n\n#ifndef traceRETURN_xStreamBufferReset\n    #define traceRETURN_xStreamBufferReset( xReturn )\n#endif\n\n#ifndef traceENTER_xStreamBufferResetFromISR\n    #define traceENTER_xStreamBufferResetFromISR( xStreamBuffer )\n#endif\n\n#ifndef traceRETURN_xStreamBufferResetFromISR\n    #define traceRETURN_xStreamBufferResetFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_xStreamBufferSetTriggerLevel\n    #define traceENTER_xStreamBufferSetTriggerLevel( xStreamBuffer, xTriggerLevel )\n#endif\n\n#ifndef traceRETURN_xStreamBufferSetTriggerLevel\n    #define traceRETURN_xStreamBufferSetTriggerLevel( xReturn )\n#endif\n\n#ifndef traceENTER_xStreamBufferSpacesAvailable\n    #define traceENTER_xStreamBufferSpacesAvailable( xStreamBuffer )\n#endif\n\n#ifndef traceRETURN_xStreamBufferSpacesAvailable\n    #define traceRETURN_xStreamBufferSpacesAvailable( xSpace )\n#endif\n\n#ifndef traceENTER_xStreamBufferBytesAvailable\n    #define traceENTER_xStreamBufferBytesAvailable( xStreamBuffer )\n#endif\n\n#ifndef traceRETURN_xStreamBufferBytesAvailable\n    #define traceRETURN_xStreamBufferBytesAvailable( xReturn )\n#endif\n\n#ifndef traceENTER_xStreamBufferSend\n    #define traceENTER_xStreamBufferSend( xStreamBuffer, pvTxData, xDataLengthBytes, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_xStreamBufferSend\n    #define traceRETURN_xStreamBufferSend( xReturn )\n#endif\n\n#ifndef traceENTER_xStreamBufferSendFromISR\n    #define traceENTER_xStreamBufferSendFromISR( xStreamBuffer, pvTxData, xDataLengthBytes, pxHigherPriorityTaskWoken )\n#endif\n\n#ifndef traceRETURN_xStreamBufferSendFromISR\n    #define traceRETURN_xStreamBufferSendFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_xStreamBufferReceive\n    #define traceENTER_xStreamBufferReceive( xStreamBuffer, pvRxData, xBufferLengthBytes, xTicksToWait )\n#endif\n\n#ifndef traceRETURN_xStreamBufferReceive\n    #define traceRETURN_xStreamBufferReceive( xReceivedLength )\n#endif\n\n#ifndef traceENTER_xStreamBufferNextMessageLengthBytes\n    #define traceENTER_xStreamBufferNextMessageLengthBytes( xStreamBuffer )\n#endif\n\n#ifndef traceRETURN_xStreamBufferNextMessageLengthBytes\n    #define traceRETURN_xStreamBufferNextMessageLengthBytes( xReturn )\n#endif\n\n#ifndef traceENTER_xStreamBufferReceiveFromISR\n    #define traceENTER_xStreamBufferReceiveFromISR( xStreamBuffer, pvRxData, xBufferLengthBytes, pxHigherPriorityTaskWoken )\n#endif\n\n#ifndef traceRETURN_xStreamBufferReceiveFromISR\n    #define traceRETURN_xStreamBufferReceiveFromISR( xReceivedLength )\n#endif\n\n#ifndef traceENTER_xStreamBufferIsEmpty\n    #define traceENTER_xStreamBufferIsEmpty( xStreamBuffer )\n#endif\n\n#ifndef traceRETURN_xStreamBufferIsEmpty\n    #define traceRETURN_xStreamBufferIsEmpty( xReturn )\n#endif\n\n#ifndef traceENTER_xStreamBufferIsFull\n    #define traceENTER_xStreamBufferIsFull( xStreamBuffer )\n#endif\n\n#ifndef traceRETURN_xStreamBufferIsFull\n    #define traceRETURN_xStreamBufferIsFull( xReturn )\n#endif\n\n#ifndef traceENTER_xStreamBufferSendCompletedFromISR\n    #define traceENTER_xStreamBufferSendCompletedFromISR( xStreamBuffer, pxHigherPriorityTaskWoken )\n#endif\n\n#ifndef traceRETURN_xStreamBufferSendCompletedFromISR\n    #define traceRETURN_xStreamBufferSendCompletedFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_xStreamBufferReceiveCompletedFromISR\n    #define traceENTER_xStreamBufferReceiveCompletedFromISR( xStreamBuffer, pxHigherPriorityTaskWoken )\n#endif\n\n#ifndef traceRETURN_xStreamBufferReceiveCompletedFromISR\n    #define traceRETURN_xStreamBufferReceiveCompletedFromISR( xReturn )\n#endif\n\n#ifndef traceENTER_uxStreamBufferGetStreamBufferNotificationIndex\n    #define traceENTER_uxStreamBufferGetStreamBufferNotificationIndex( xStreamBuffer )\n#endif\n\n#ifndef traceRETURN_uxStreamBufferGetStreamBufferNotificationIndex\n    #define traceRETURN_uxStreamBufferGetStreamBufferNotificationIndex( uxNotificationIndex )\n#endif\n\n#ifndef traceENTER_vStreamBufferSetStreamBufferNotificationIndex\n    #define traceENTER_vStreamBufferSetStreamBufferNotificationIndex( xStreamBuffer, uxNotificationIndex )\n#endif\n\n#ifndef traceRETURN_vStreamBufferSetStreamBufferNotificationIndex\n    #define traceRETURN_vStreamBufferSetStreamBufferNotificationIndex()\n#endif\n\n#ifndef traceENTER_uxStreamBufferGetStreamBufferNumber\n    #define traceENTER_uxStreamBufferGetStreamBufferNumber( xStreamBuffer )\n#endif\n\n#ifndef traceRETURN_uxStreamBufferGetStreamBufferNumber\n    #define traceRETURN_uxStreamBufferGetStreamBufferNumber( uxStreamBufferNumber )\n#endif\n\n#ifndef traceENTER_vStreamBufferSetStreamBufferNumber\n    #define traceENTER_vStreamBufferSetStreamBufferNumber( xStreamBuffer, uxStreamBufferNumber )\n#endif\n\n#ifndef traceRETURN_vStreamBufferSetStreamBufferNumber\n    #define traceRETURN_vStreamBufferSetStreamBufferNumber()\n#endif\n\n#ifndef traceENTER_ucStreamBufferGetStreamBufferType\n    #define traceENTER_ucStreamBufferGetStreamBufferType( xStreamBuffer )\n#endif\n\n#ifndef traceRETURN_ucStreamBufferGetStreamBufferType\n    #define traceRETURN_ucStreamBufferGetStreamBufferType( ucStreamBufferType )\n#endif\n\n#ifndef traceENTER_vListInitialise\n    #define traceENTER_vListInitialise( pxList )\n#endif\n\n#ifndef traceRETURN_vListInitialise\n    #define traceRETURN_vListInitialise()\n#endif\n\n#ifndef traceENTER_vListInitialiseItem\n    #define traceENTER_vListInitialiseItem( pxItem )\n#endif\n\n#ifndef traceRETURN_vListInitialiseItem\n    #define traceRETURN_vListInitialiseItem()\n#endif\n\n#ifndef traceENTER_vListInsertEnd\n    #define traceENTER_vListInsertEnd( pxList, pxNewListItem )\n#endif\n\n#ifndef traceRETURN_vListInsertEnd\n    #define traceRETURN_vListInsertEnd()\n#endif\n\n#ifndef traceENTER_vListInsert\n    #define traceENTER_vListInsert( pxList, pxNewListItem )\n#endif\n\n#ifndef traceRETURN_vListInsert\n    #define traceRETURN_vListInsert()\n#endif\n\n#ifndef traceENTER_uxListRemove\n    #define traceENTER_uxListRemove( pxItemToRemove )\n#endif\n\n#ifndef traceRETURN_uxListRemove\n    #define traceRETURN_uxListRemove( uxNumberOfItems )\n#endif\n\n#ifndef traceENTER_xCoRoutineCreate\n    #define traceENTER_xCoRoutineCreate( pxCoRoutineCode, uxPriority, uxIndex )\n#endif\n\n#ifndef traceRETURN_xCoRoutineCreate\n    #define traceRETURN_xCoRoutineCreate( xReturn )\n#endif\n\n#ifndef traceENTER_vCoRoutineAddToDelayedList\n    #define traceENTER_vCoRoutineAddToDelayedList( xTicksToDelay, pxEventList )\n#endif\n\n#ifndef traceRETURN_vCoRoutineAddToDelayedList\n    #define traceRETURN_vCoRoutineAddToDelayedList()\n#endif\n\n#ifndef traceENTER_vCoRoutineSchedule\n    #define traceENTER_vCoRoutineSchedule()\n#endif\n\n#ifndef traceRETURN_vCoRoutineSchedule\n    #define traceRETURN_vCoRoutineSchedule()\n#endif\n\n#ifndef traceENTER_xCoRoutineRemoveFromEventList\n    #define traceENTER_xCoRoutineRemoveFromEventList( pxEventList )\n#endif\n\n#ifndef traceRETURN_xCoRoutineRemoveFromEventList\n    #define traceRETURN_xCoRoutineRemoveFromEventList( xReturn )\n#endif\n\n#ifndef configGENERATE_RUN_TIME_STATS\n    #define configGENERATE_RUN_TIME_STATS    0\n#endif\n\n#if ( configGENERATE_RUN_TIME_STATS == 1 )\n\n    #ifndef portCONFIGURE_TIMER_FOR_RUN_TIME_STATS\n        #error If configGENERATE_RUN_TIME_STATS is defined then portCONFIGURE_TIMER_FOR_RUN_TIME_STATS must also be defined.  portCONFIGURE_TIMER_FOR_RUN_TIME_STATS should call a port layer function to setup a peripheral timer/counter that can then be used as the run time counter time base.\n    #endif /* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS */\n\n    #ifndef portGET_RUN_TIME_COUNTER_VALUE\n        #ifndef portALT_GET_RUN_TIME_COUNTER_VALUE\n            #error If configGENERATE_RUN_TIME_STATS is defined then either portGET_RUN_TIME_COUNTER_VALUE or portALT_GET_RUN_TIME_COUNTER_VALUE must also be defined.  See the examples provided and the FreeRTOS web site for more information.\n        #endif /* portALT_GET_RUN_TIME_COUNTER_VALUE */\n    #endif /* portGET_RUN_TIME_COUNTER_VALUE */\n\n#endif /* configGENERATE_RUN_TIME_STATS */\n\n#ifndef portCONFIGURE_TIMER_FOR_RUN_TIME_STATS\n    #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()\n#endif\n\n#ifndef portPRIVILEGE_BIT\n    #define portPRIVILEGE_BIT    ( ( UBaseType_t ) 0x00 )\n#endif\n\n#ifndef portYIELD_WITHIN_API\n    #define portYIELD_WITHIN_API    portYIELD\n#endif\n\n#ifndef portSUPPRESS_TICKS_AND_SLEEP\n    #define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime )\n#endif\n\n#ifndef configEXPECTED_IDLE_TIME_BEFORE_SLEEP\n    #define configEXPECTED_IDLE_TIME_BEFORE_SLEEP    2\n#endif\n\n#if configEXPECTED_IDLE_TIME_BEFORE_SLEEP < 2\n    #error configEXPECTED_IDLE_TIME_BEFORE_SLEEP must not be less than 2\n#endif\n\n#ifndef configUSE_TICKLESS_IDLE\n    #define configUSE_TICKLESS_IDLE    0\n#endif\n\n#ifndef configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING\n    #define configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING( x )\n#endif\n\n#ifndef configPRE_SLEEP_PROCESSING\n    #define configPRE_SLEEP_PROCESSING( x )\n#endif\n\n#ifndef configPOST_SLEEP_PROCESSING\n    #define configPOST_SLEEP_PROCESSING( x )\n#endif\n\n#ifndef configUSE_QUEUE_SETS\n    #define configUSE_QUEUE_SETS    0\n#endif\n\n#ifndef portTASK_USES_FLOATING_POINT\n    #define portTASK_USES_FLOATING_POINT()\n#endif\n\n#ifndef portALLOCATE_SECURE_CONTEXT\n    #define portALLOCATE_SECURE_CONTEXT( ulSecureStackSize )\n#endif\n\n#ifndef portDONT_DISCARD\n    #define portDONT_DISCARD\n#endif\n\n#ifndef configUSE_TIME_SLICING\n    #define configUSE_TIME_SLICING    1\n#endif\n\n#ifndef configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS\n    #define configINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS    0\n#endif\n\n#ifndef configUSE_STATS_FORMATTING_FUNCTIONS\n    #define configUSE_STATS_FORMATTING_FUNCTIONS    0\n#endif\n\n#ifndef portASSERT_IF_INTERRUPT_PRIORITY_INVALID\n    #define portASSERT_IF_INTERRUPT_PRIORITY_INVALID()\n#endif\n\n#ifndef configUSE_TRACE_FACILITY\n    #define configUSE_TRACE_FACILITY    0\n#endif\n\n#ifndef mtCOVERAGE_TEST_MARKER\n    #define mtCOVERAGE_TEST_MARKER()\n#endif\n\n#ifndef mtCOVERAGE_TEST_DELAY\n    #define mtCOVERAGE_TEST_DELAY()\n#endif\n\n#ifndef portASSERT_IF_IN_ISR\n    #define portASSERT_IF_IN_ISR()\n#endif\n\n#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION\n    #define configUSE_PORT_OPTIMISED_TASK_SELECTION    0\n#endif\n\n#ifndef configAPPLICATION_ALLOCATED_HEAP\n    #define configAPPLICATION_ALLOCATED_HEAP    0\n#endif\n\n#ifndef configENABLE_HEAP_PROTECTOR\n    #define configENABLE_HEAP_PROTECTOR    0\n#endif\n\n#ifndef configUSE_TASK_NOTIFICATIONS\n    #define configUSE_TASK_NOTIFICATIONS    1\n#endif\n\n#ifndef configTASK_NOTIFICATION_ARRAY_ENTRIES\n    #define configTASK_NOTIFICATION_ARRAY_ENTRIES    1\n#endif\n\n#if configTASK_NOTIFICATION_ARRAY_ENTRIES < 1\n    #error configTASK_NOTIFICATION_ARRAY_ENTRIES must be at least 1\n#endif\n\n#ifndef configUSE_POSIX_ERRNO\n    #define configUSE_POSIX_ERRNO    0\n#endif\n\n#ifndef configUSE_SB_COMPLETED_CALLBACK\n\n/* By default per-instance callbacks are not enabled for stream buffer or message buffer. */\n    #define configUSE_SB_COMPLETED_CALLBACK    0\n#endif\n\n#ifndef portTICK_TYPE_IS_ATOMIC\n    #define portTICK_TYPE_IS_ATOMIC    0\n#endif\n\n#ifndef configSUPPORT_STATIC_ALLOCATION\n    /* Defaults to 0 for backward compatibility. */\n    #define configSUPPORT_STATIC_ALLOCATION    0\n#endif\n\n#ifndef configKERNEL_PROVIDED_STATIC_MEMORY\n    #define configKERNEL_PROVIDED_STATIC_MEMORY    0\n#endif\n\n#ifndef configSUPPORT_DYNAMIC_ALLOCATION\n    /* Defaults to 1 for backward compatibility. */\n    #define configSUPPORT_DYNAMIC_ALLOCATION    1\n#endif\n\n#if ( ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION != 1 ) )\n    #error configUSE_STATS_FORMATTING_FUNCTIONS cannot be used without dynamic allocation, but configSUPPORT_DYNAMIC_ALLOCATION is not set to 1.\n#endif\n\n#if ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 )\n    #if ( ( configUSE_TRACE_FACILITY != 1 ) && ( configGENERATE_RUN_TIME_STATS != 1 ) )\n        #error configUSE_STATS_FORMATTING_FUNCTIONS is 1 but the functions it enables are not used because neither configUSE_TRACE_FACILITY or configGENERATE_RUN_TIME_STATS are 1.  Set configUSE_STATS_FORMATTING_FUNCTIONS to 0 in FreeRTOSConfig.h.\n    #endif\n#endif\n\n#ifndef configSTATS_BUFFER_MAX_LENGTH\n    #define configSTATS_BUFFER_MAX_LENGTH    0xFFFF\n#endif\n\n#ifndef configSTACK_DEPTH_TYPE\n\n/* Defaults to StackType_t for backward compatibility, but can be overridden\n * in FreeRTOSConfig.h if StackType_t is too restrictive. */\n    #define configSTACK_DEPTH_TYPE    StackType_t\n#endif\n\n#ifndef configRUN_TIME_COUNTER_TYPE\n\n/* Defaults to uint32_t for backward compatibility, but can be overridden in\n * FreeRTOSConfig.h if uint32_t is too restrictive. */\n\n    #define configRUN_TIME_COUNTER_TYPE    uint32_t\n#endif\n\n#ifndef configMESSAGE_BUFFER_LENGTH_TYPE\n\n/* Defaults to size_t for backward compatibility, but can be overridden\n * in FreeRTOSConfig.h if lengths will always be less than the number of bytes\n * in a size_t. */\n    #define configMESSAGE_BUFFER_LENGTH_TYPE    size_t\n#endif\n\n/* Sanity check the configuration. */\n#if ( ( configSUPPORT_STATIC_ALLOCATION == 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 0 ) )\n    #error configSUPPORT_STATIC_ALLOCATION and configSUPPORT_DYNAMIC_ALLOCATION cannot both be 0, but can both be 1.\n#endif\n\n#if ( ( configUSE_RECURSIVE_MUTEXES == 1 ) && ( configUSE_MUTEXES != 1 ) )\n    #error configUSE_MUTEXES must be set to 1 to use recursive mutexes\n#endif\n\n#if ( ( configRUN_MULTIPLE_PRIORITIES == 0 ) && ( configUSE_TASK_PREEMPTION_DISABLE != 0 ) )\n    #error configRUN_MULTIPLE_PRIORITIES must be set to 1 to use task preemption disable\n#endif\n\n#if ( ( configUSE_PREEMPTION == 0 ) && ( configUSE_TASK_PREEMPTION_DISABLE != 0 ) )\n    #error configUSE_PREEMPTION must be set to 1 to use task preemption disable\n#endif\n\n#if ( ( configNUMBER_OF_CORES == 1 ) && ( configUSE_TASK_PREEMPTION_DISABLE != 0 ) )\n    #error configUSE_TASK_PREEMPTION_DISABLE is not supported in single core FreeRTOS\n#endif\n\n#if ( ( configNUMBER_OF_CORES == 1 ) && ( configUSE_CORE_AFFINITY != 0 ) )\n    #error configUSE_CORE_AFFINITY is not supported in single core FreeRTOS\n#endif\n\n#if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_PORT_OPTIMISED_TASK_SELECTION != 0 ) )\n    #error configUSE_PORT_OPTIMISED_TASK_SELECTION is not supported in SMP FreeRTOS\n#endif\n\n#ifndef configINITIAL_TICK_COUNT\n    #define configINITIAL_TICK_COUNT    0\n#endif\n\n#if ( portTICK_TYPE_IS_ATOMIC == 0 )\n\n/* Either variables of tick type cannot be read atomically, or\n * portTICK_TYPE_IS_ATOMIC was not set - map the critical sections used when\n * the tick count is returned to the standard critical section macros. */\n    #define portTICK_TYPE_ENTER_CRITICAL()                      portENTER_CRITICAL()\n    #define portTICK_TYPE_EXIT_CRITICAL()                       portEXIT_CRITICAL()\n    #define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR()         portSET_INTERRUPT_MASK_FROM_ISR()\n    #define portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( x )    portCLEAR_INTERRUPT_MASK_FROM_ISR( ( x ) )\n#else\n\n/* The tick type can be read atomically, so critical sections used when the\n * tick count is returned can be defined away. */\n    #define portTICK_TYPE_ENTER_CRITICAL()\n    #define portTICK_TYPE_EXIT_CRITICAL()\n    #define portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR()         0\n    #define portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( x )    ( void ) ( x )\n#endif /* if ( portTICK_TYPE_IS_ATOMIC == 0 ) */\n\n/* Definitions to allow backward compatibility with FreeRTOS versions prior to\n * V8 if desired. */\n#ifndef configENABLE_BACKWARD_COMPATIBILITY\n    #define configENABLE_BACKWARD_COMPATIBILITY    1\n#endif\n\n#ifndef configPRINTF\n\n/* configPRINTF() was not defined, so define it away to nothing.  To use\n * configPRINTF() then define it as follows (where MyPrintFunction() is\n * provided by the application writer):\n *\n * void MyPrintFunction(const char *pcFormat, ... );\n #define configPRINTF( X )   MyPrintFunction X\n *\n * Then call like a standard printf() function, but placing brackets around\n * all parameters so they are passed as a single parameter.  For example:\n * configPRINTF( (\"Value = %d\", MyVariable) ); */\n    #define configPRINTF( X )\n#endif\n\n#ifndef configMAX\n\n/* The application writer has not provided their own MAX macro, so define\n * the following generic implementation. */\n    #define configMAX( a, b )    ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) )\n#endif\n\n#ifndef configMIN\n\n/* The application writer has not provided their own MIN macro, so define\n * the following generic implementation. */\n    #define configMIN( a, b )    ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) )\n#endif\n\n#if configENABLE_BACKWARD_COMPATIBILITY == 1\n    #define eTaskStateGet                 eTaskGetState\n    #define portTickType                  TickType_t\n    #define xTaskHandle                   TaskHandle_t\n    #define xQueueHandle                  QueueHandle_t\n    #define xSemaphoreHandle              SemaphoreHandle_t\n    #define xQueueSetHandle               QueueSetHandle_t\n    #define xQueueSetMemberHandle         QueueSetMemberHandle_t\n    #define xTimeOutType                  TimeOut_t\n    #define xMemoryRegion                 MemoryRegion_t\n    #define xTaskParameters               TaskParameters_t\n    #define xTaskStatusType               TaskStatus_t\n    #define xTimerHandle                  TimerHandle_t\n    #define xCoRoutineHandle              CoRoutineHandle_t\n    #define pdTASK_HOOK_CODE              TaskHookFunction_t\n    #define portTICK_RATE_MS              portTICK_PERIOD_MS\n    #define pcTaskGetTaskName             pcTaskGetName\n    #define pcTimerGetTimerName           pcTimerGetName\n    #define pcQueueGetQueueName           pcQueueGetName\n    #define vTaskGetTaskInfo              vTaskGetInfo\n    #define xTaskGetIdleRunTimeCounter    ulTaskGetIdleRunTimeCounter\n\n/* Backward compatibility within the scheduler code only - these definitions\n * are not really required but are included for completeness. */\n    #define tmrTIMER_CALLBACK             TimerCallbackFunction_t\n    #define pdTASK_CODE                   TaskFunction_t\n    #define xListItem                     ListItem_t\n    #define xList                         List_t\n\n/* For libraries that break the list data hiding, and access list structure\n * members directly (which is not supposed to be done). */\n    #define pxContainer                   pvContainer\n#endif /* configENABLE_BACKWARD_COMPATIBILITY */\n\n#if ( configUSE_ALTERNATIVE_API != 0 )\n    #error The alternative API was deprecated some time ago, and was removed in FreeRTOS V9.0 0\n#endif\n\n/* Set configUSE_TASK_FPU_SUPPORT to 0 to omit floating point support even\n * if floating point hardware is otherwise supported by the FreeRTOS port in use.\n * This constant is not supported by all FreeRTOS ports that include floating\n * point support. */\n#ifndef configUSE_TASK_FPU_SUPPORT\n    #define configUSE_TASK_FPU_SUPPORT    1\n#endif\n\n/* Set configENABLE_MPU to 1 to enable MPU support and 0 to disable it. This is\n * currently used in ARMv8M ports. */\n#ifndef configENABLE_MPU\n    #define configENABLE_MPU    0\n#endif\n\n/* Set configENABLE_FPU to 1 to enable FPU support and 0 to disable it. This is\n * currently used in ARMv8M ports. */\n#ifndef configENABLE_FPU\n    #define configENABLE_FPU    1\n#endif\n\n/* Set configENABLE_MVE to 1 to enable MVE support and 0 to disable it. This is\n * currently used in ARMv8M ports. */\n#ifndef configENABLE_MVE\n    #define configENABLE_MVE    0\n#endif\n\n/* Set configENABLE_TRUSTZONE to 1 enable TrustZone support and 0 to disable it.\n * This is currently used in ARMv8M ports. */\n#ifndef configENABLE_TRUSTZONE\n    #define configENABLE_TRUSTZONE    1\n#endif\n\n/* Set configRUN_FREERTOS_SECURE_ONLY to 1 to run the FreeRTOS ARMv8M port on\n * the Secure Side only. */\n#ifndef configRUN_FREERTOS_SECURE_ONLY\n    #define configRUN_FREERTOS_SECURE_ONLY    0\n#endif\n\n#ifndef configRUN_ADDITIONAL_TESTS\n    #define configRUN_ADDITIONAL_TESTS    0\n#endif\n\n/* The following config allows infinite loop control. For example, control the\n * infinite loop in idle task function when performing unit tests. */\n#ifndef configCONTROL_INFINITE_LOOP\n    #define configCONTROL_INFINITE_LOOP()\n#endif\n\n/* Sometimes the FreeRTOSConfig.h settings only allow a task to be created using\n * dynamically allocated RAM, in which case when any task is deleted it is known\n * that both the task's stack and TCB need to be freed.  Sometimes the\n * FreeRTOSConfig.h settings only allow a task to be created using statically\n * allocated RAM, in which case when any task is deleted it is known that neither\n * the task's stack or TCB should be freed.  Sometimes the FreeRTOSConfig.h\n * settings allow a task to be created using either statically or dynamically\n * allocated RAM, in which case a member of the TCB is used to record whether the\n * stack and/or TCB were allocated statically or dynamically, so when a task is\n * deleted the RAM that was allocated dynamically is freed again and no attempt is\n * made to free the RAM that was allocated statically.\n * tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE is only true if it is possible for a\n * task to be created using either statically or dynamically allocated RAM.  Note\n * that if portUSING_MPU_WRAPPERS is 1 then a protected task can be created with\n * a statically allocated stack and a dynamically allocated TCB.\n *\n * The following table lists various combinations of portUSING_MPU_WRAPPERS,\n * configSUPPORT_DYNAMIC_ALLOCATION and configSUPPORT_STATIC_ALLOCATION and\n * when it is possible to have both static and dynamic allocation:\n *  +-----+---------+--------+-----------------------------+-----------------------------------+------------------+-----------+\n * | MPU | Dynamic | Static |     Available Functions     |       Possible Allocations        | Both Dynamic and | Need Free |\n * |     |         |        |                             |                                   | Static Possible  |           |\n * +-----+---------+--------+-----------------------------+-----------------------------------+------------------+-----------+\n * | 0   | 0       | 1      | xTaskCreateStatic           | TCB - Static, Stack - Static      | No               | No        |\n * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------|\n * | 0   | 1       | 0      | xTaskCreate                 | TCB - Dynamic, Stack - Dynamic    | No               | Yes       |\n * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------|\n * | 0   | 1       | 1      | xTaskCreate,                | 1. TCB - Dynamic, Stack - Dynamic | Yes              | Yes       |\n * |     |         |        | xTaskCreateStatic           | 2. TCB - Static, Stack - Static   |                  |           |\n * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------|\n * | 1   | 0       | 1      | xTaskCreateStatic,          | TCB - Static, Stack - Static      | No               | No        |\n * |     |         |        | xTaskCreateRestrictedStatic |                                   |                  |           |\n * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------|\n * | 1   | 1       | 0      | xTaskCreate,                | 1. TCB - Dynamic, Stack - Dynamic | Yes              | Yes       |\n * |     |         |        | xTaskCreateRestricted       | 2. TCB - Dynamic, Stack - Static  |                  |           |\n * +-----|---------|--------|-----------------------------|-----------------------------------|------------------|-----------|\n * | 1   | 1       | 1      | xTaskCreate,                | 1. TCB - Dynamic, Stack - Dynamic | Yes              | Yes       |\n * |     |         |        | xTaskCreateStatic,          | 2. TCB - Dynamic, Stack - Static  |                  |           |\n * |     |         |        | xTaskCreateRestricted,      | 3. TCB - Static, Stack - Static   |                  |           |\n * |     |         |        | xTaskCreateRestrictedStatic |                                   |                  |           |\n * +-----+---------+--------+-----------------------------+-----------------------------------+------------------+-----------+\n */\n#define tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE                                                                                     \\\n    ( ( ( portUSING_MPU_WRAPPERS == 0 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) || \\\n      ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) )\n\n/*\n * In line with software engineering best practice, FreeRTOS implements a strict\n * data hiding policy, so the real structures used by FreeRTOS to maintain the\n * state of tasks, queues, semaphores, etc. are not accessible to the application\n * code.  However, if the application writer wants to statically allocate such\n * an object then the size of the object needs to be known.  Dummy structures\n * that are guaranteed to have the same size and alignment requirements of the\n * real objects are used for this purpose.  The dummy list and list item\n * structures below are used for inclusion in such a dummy structure.\n */\nstruct xSTATIC_LIST_ITEM\n{\n    #if ( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 )\n        TickType_t xDummy1;\n    #endif\n    TickType_t xDummy2;\n    void * pvDummy3[ 4 ];\n    #if ( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 )\n        TickType_t xDummy4;\n    #endif\n};\ntypedef struct xSTATIC_LIST_ITEM StaticListItem_t;\n\n#if ( configUSE_MINI_LIST_ITEM == 1 )\n    /* See the comments above the struct xSTATIC_LIST_ITEM definition. */\n    struct xSTATIC_MINI_LIST_ITEM\n    {\n        #if ( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 )\n            TickType_t xDummy1;\n        #endif\n        TickType_t xDummy2;\n        void * pvDummy3[ 2 ];\n    };\n    typedef struct xSTATIC_MINI_LIST_ITEM StaticMiniListItem_t;\n#else /* if ( configUSE_MINI_LIST_ITEM == 1 ) */\n    typedef struct xSTATIC_LIST_ITEM      StaticMiniListItem_t;\n#endif /* if ( configUSE_MINI_LIST_ITEM == 1 ) */\n\n/* See the comments above the struct xSTATIC_LIST_ITEM definition. */\ntypedef struct xSTATIC_LIST\n{\n    #if ( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 )\n        TickType_t xDummy1;\n    #endif\n    UBaseType_t uxDummy2;\n    void * pvDummy3;\n    StaticMiniListItem_t xDummy4;\n    #if ( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 1 )\n        TickType_t xDummy5;\n    #endif\n} StaticList_t;\n\n/*\n * In line with software engineering best practice, especially when supplying a\n * library that is likely to change in future versions, FreeRTOS implements a\n * strict data hiding policy.  This means the Task structure used internally by\n * FreeRTOS is not accessible to application code.  However, if the application\n * writer wants to statically allocate the memory required to create a task then\n * the size of the task object needs to be known.  The StaticTask_t structure\n * below is provided for this purpose.  Its sizes and alignment requirements are\n * guaranteed to match those of the genuine structure, no matter which\n * architecture is being used, and no matter how the values in FreeRTOSConfig.h\n * are set.  Its contents are somewhat obfuscated in the hope users will\n * recognise that it would be unwise to make direct use of the structure members.\n */\ntypedef struct xSTATIC_TCB\n{\n    void * pxDummy1;\n    #if ( portUSING_MPU_WRAPPERS == 1 )\n        xMPU_SETTINGS xDummy2;\n    #endif\n    #if ( configUSE_CORE_AFFINITY == 1 ) && ( configNUMBER_OF_CORES > 1 )\n        UBaseType_t uxDummy26;\n    #endif\n    StaticListItem_t xDummy3[ 2 ];\n    UBaseType_t uxDummy5;\n    void * pxDummy6;\n    #if ( configNUMBER_OF_CORES > 1 )\n        BaseType_t xDummy23;\n        UBaseType_t uxDummy24;\n    #endif\n    uint8_t ucDummy7[ configMAX_TASK_NAME_LEN ];\n    #if ( configUSE_TASK_PREEMPTION_DISABLE == 1 )\n        BaseType_t xDummy25;\n    #endif\n    #if ( ( portSTACK_GROWTH > 0 ) || ( configRECORD_STACK_HIGH_ADDRESS == 1 ) )\n        void * pxDummy8;\n    #endif\n    #if ( portCRITICAL_NESTING_IN_TCB == 1 )\n        UBaseType_t uxDummy9;\n    #endif\n    #if ( configUSE_TRACE_FACILITY == 1 )\n        UBaseType_t uxDummy10[ 2 ];\n    #endif\n    #if ( configUSE_MUTEXES == 1 )\n        UBaseType_t uxDummy12[ 2 ];\n    #endif\n    #if ( configUSE_APPLICATION_TASK_TAG == 1 )\n        void * pxDummy14;\n    #endif\n    #if ( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 )\n        void * pvDummy15[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ];\n    #endif\n    #if ( configGENERATE_RUN_TIME_STATS == 1 )\n        configRUN_TIME_COUNTER_TYPE ulDummy16;\n    #endif\n    #if ( configUSE_C_RUNTIME_TLS_SUPPORT == 1 )\n        configTLS_BLOCK_TYPE xDummy17;\n    #endif\n    #if ( configUSE_TASK_NOTIFICATIONS == 1 )\n        uint32_t ulDummy18[ configTASK_NOTIFICATION_ARRAY_ENTRIES ];\n        uint8_t ucDummy19[ configTASK_NOTIFICATION_ARRAY_ENTRIES ];\n    #endif\n    #if ( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 )\n        uint8_t uxDummy20;\n    #endif\n\n    #if ( INCLUDE_xTaskAbortDelay == 1 )\n        uint8_t ucDummy21;\n    #endif\n    #if ( configUSE_POSIX_ERRNO == 1 )\n        int iDummy22;\n    #endif\n} StaticTask_t;\n\n/*\n * In line with software engineering best practice, especially when supplying a\n * library that is likely to change in future versions, FreeRTOS implements a\n * strict data hiding policy.  This means the Queue structure used internally by\n * FreeRTOS is not accessible to application code.  However, if the application\n * writer wants to statically allocate the memory required to create a queue\n * then the size of the queue object needs to be known.  The StaticQueue_t\n * structure below is provided for this purpose.  Its sizes and alignment\n * requirements are guaranteed to match those of the genuine structure, no\n * matter which architecture is being used, and no matter how the values in\n * FreeRTOSConfig.h are set.  Its contents are somewhat obfuscated in the hope\n * users will recognise that it would be unwise to make direct use of the\n * structure members.\n */\ntypedef struct xSTATIC_QUEUE\n{\n    void * pvDummy1[ 3 ];\n\n    union\n    {\n        void * pvDummy2;\n        UBaseType_t uxDummy2;\n    } u;\n\n    StaticList_t xDummy3[ 2 ];\n    UBaseType_t uxDummy4[ 3 ];\n    uint8_t ucDummy5[ 2 ];\n\n    #if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )\n        uint8_t ucDummy6;\n    #endif\n\n    #if ( configUSE_QUEUE_SETS == 1 )\n        void * pvDummy7;\n    #endif\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n        UBaseType_t uxDummy8;\n        uint8_t ucDummy9;\n    #endif\n} StaticQueue_t;\ntypedef StaticQueue_t StaticSemaphore_t;\n\n/*\n * In line with software engineering best practice, especially when supplying a\n * library that is likely to change in future versions, FreeRTOS implements a\n * strict data hiding policy.  This means the event group structure used\n * internally by FreeRTOS is not accessible to application code.  However, if\n * the application writer wants to statically allocate the memory required to\n * create an event group then the size of the event group object needs to be\n * know.  The StaticEventGroup_t structure below is provided for this purpose.\n * Its sizes and alignment requirements are guaranteed to match those of the\n * genuine structure, no matter which architecture is being used, and no matter\n * how the values in FreeRTOSConfig.h are set.  Its contents are somewhat\n * obfuscated in the hope users will recognise that it would be unwise to make\n * direct use of the structure members.\n */\ntypedef struct xSTATIC_EVENT_GROUP\n{\n    TickType_t xDummy1;\n    StaticList_t xDummy2;\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n        UBaseType_t uxDummy3;\n    #endif\n\n    #if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )\n        uint8_t ucDummy4;\n    #endif\n} StaticEventGroup_t;\n\n/*\n * In line with software engineering best practice, especially when supplying a\n * library that is likely to change in future versions, FreeRTOS implements a\n * strict data hiding policy.  This means the software timer structure used\n * internally by FreeRTOS is not accessible to application code.  However, if\n * the application writer wants to statically allocate the memory required to\n * create a software timer then the size of the queue object needs to be known.\n * The StaticTimer_t structure below is provided for this purpose.  Its sizes\n * and alignment requirements are guaranteed to match those of the genuine\n * structure, no matter which architecture is being used, and no matter how the\n * values in FreeRTOSConfig.h are set.  Its contents are somewhat obfuscated in\n * the hope users will recognise that it would be unwise to make direct use of\n * the structure members.\n */\ntypedef struct xSTATIC_TIMER\n{\n    void * pvDummy1;\n    StaticListItem_t xDummy2;\n    TickType_t xDummy3;\n    void * pvDummy5;\n    TaskFunction_t pvDummy6;\n    #if ( configUSE_TRACE_FACILITY == 1 )\n        UBaseType_t uxDummy7;\n    #endif\n    uint8_t ucDummy8;\n} StaticTimer_t;\n\n/*\n * In line with software engineering best practice, especially when supplying a\n * library that is likely to change in future versions, FreeRTOS implements a\n * strict data hiding policy.  This means the stream buffer structure used\n * internally by FreeRTOS is not accessible to application code.  However, if\n * the application writer wants to statically allocate the memory required to\n * create a stream buffer then the size of the stream buffer object needs to be\n * known.  The StaticStreamBuffer_t structure below is provided for this\n * purpose.  Its size and alignment requirements are guaranteed to match those\n * of the genuine structure, no matter which architecture is being used, and\n * no matter how the values in FreeRTOSConfig.h are set.  Its contents are\n * somewhat obfuscated in the hope users will recognise that it would be unwise\n * to make direct use of the structure members.\n */\ntypedef struct xSTATIC_STREAM_BUFFER\n{\n    size_t uxDummy1[ 4 ];\n    void * pvDummy2[ 3 ];\n    uint8_t ucDummy3;\n    #if ( configUSE_TRACE_FACILITY == 1 )\n        UBaseType_t uxDummy4;\n    #endif\n    #if ( configUSE_SB_COMPLETED_CALLBACK == 1 )\n        void * pvDummy5[ 2 ];\n    #endif\n    UBaseType_t uxDummy6;\n} StaticStreamBuffer_t;\n\n/* Message buffers are built on stream buffers. */\ntypedef StaticStreamBuffer_t StaticMessageBuffer_t;\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n    }\n#endif\n/* *INDENT-ON* */\n\n#endif /* INC_FREERTOS_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/StackMacros.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n\n#ifndef _MSC_VER /* Visual Studio doesn't support #warning. */\n    #warning The name of this file has changed to stack_macros.h.  Please update your code accordingly.  This source file (which has the original name) will be removed in a future release.\n#endif\n\n#include \"stack_macros.h\"\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/atomic.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n/**\n * @file atomic.h\n * @brief FreeRTOS atomic operation support.\n *\n * This file implements atomic functions by disabling interrupts globally.\n * Implementations with architecture specific atomic instructions can be\n * provided under each compiler directory.\n *\n * The atomic interface can be used in FreeRTOS tasks on all FreeRTOS ports. It\n * can also be used in Interrupt Service Routines (ISRs) on FreeRTOS ports that\n * support nested interrupts (i.e. portHAS_NESTED_INTERRUPTS is set to 1). The\n * atomic interface must not be used in ISRs on FreeRTOS ports that do not\n * support nested interrupts (i.e. portHAS_NESTED_INTERRUPTS is set to 0)\n * because ISRs on these ports cannot be interrupted and therefore, do not need\n * atomics in ISRs.\n */\n\n#ifndef ATOMIC_H\n#define ATOMIC_H\n\n#ifndef INC_FREERTOS_H\n    #error \"include FreeRTOS.h must appear in source files before include atomic.h\"\n#endif\n\n/* Standard includes. */\n#include <stdint.h>\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n    extern \"C\" {\n#endif\n/* *INDENT-ON* */\n\n/*\n * Port specific definitions -- entering/exiting critical section.\n * Refer template -- ./lib/FreeRTOS/portable/Compiler/Arch/portmacro.h\n *\n * Every call to ATOMIC_EXIT_CRITICAL() must be closely paired with\n * ATOMIC_ENTER_CRITICAL().\n *\n */\n#if ( portHAS_NESTED_INTERRUPTS == 1 )\n\n/* Nested interrupt scheme is supported in this port. */\n    #define ATOMIC_ENTER_CRITICAL() \\\n    UBaseType_t uxCriticalSectionType = portSET_INTERRUPT_MASK_FROM_ISR()\n\n    #define ATOMIC_EXIT_CRITICAL() \\\n    portCLEAR_INTERRUPT_MASK_FROM_ISR( uxCriticalSectionType )\n\n#else\n\n/* Nested interrupt scheme is NOT supported in this port. */\n    #define ATOMIC_ENTER_CRITICAL()    portENTER_CRITICAL()\n    #define ATOMIC_EXIT_CRITICAL()     portEXIT_CRITICAL()\n\n#endif /* portSET_INTERRUPT_MASK_FROM_ISR() */\n\n/*\n * Port specific definition -- \"always inline\".\n * Inline is compiler specific, and may not always get inlined depending on your\n * optimization level.  Also, inline is considered as performance optimization\n * for atomic.  Thus, if portFORCE_INLINE is not provided by portmacro.h,\n * instead of resulting error, simply define it away.\n */\n#ifndef portFORCE_INLINE\n    #define portFORCE_INLINE\n#endif\n\n#define ATOMIC_COMPARE_AND_SWAP_SUCCESS    0x1U     /**< Compare and swap succeeded, swapped. */\n#define ATOMIC_COMPARE_AND_SWAP_FAILURE    0x0U     /**< Compare and swap failed, did not swap. */\n\n/*----------------------------- Swap && CAS ------------------------------*/\n\n/**\n * Atomic compare-and-swap\n *\n * @brief Performs an atomic compare-and-swap operation on the specified values.\n *\n * @param[in, out] pulDestination  Pointer to memory location from where value is\n *                               to be loaded and checked.\n * @param[in] ulExchange         If condition meets, write this value to memory.\n * @param[in] ulComparand        Swap condition.\n *\n * @return Unsigned integer of value 1 or 0. 1 for swapped, 0 for not swapped.\n *\n * @note This function only swaps *pulDestination with ulExchange, if previous\n *       *pulDestination value equals ulComparand.\n */\nstatic portFORCE_INLINE uint32_t Atomic_CompareAndSwap_u32( uint32_t volatile * pulDestination,\n                                                            uint32_t ulExchange,\n                                                            uint32_t ulComparand )\n{\n    uint32_t ulReturnValue;\n\n    ATOMIC_ENTER_CRITICAL();\n    {\n        if( *pulDestination == ulComparand )\n        {\n            *pulDestination = ulExchange;\n            ulReturnValue = ATOMIC_COMPARE_AND_SWAP_SUCCESS;\n        }\n        else\n        {\n            ulReturnValue = ATOMIC_COMPARE_AND_SWAP_FAILURE;\n        }\n    }\n    ATOMIC_EXIT_CRITICAL();\n\n    return ulReturnValue;\n}\n/*-----------------------------------------------------------*/\n\n/**\n * Atomic swap (pointers)\n *\n * @brief Atomically sets the address pointed to by *ppvDestination to the value\n *        of *pvExchange.\n *\n * @param[in, out] ppvDestination  Pointer to memory location from where a pointer\n *                                 value is to be loaded and written back to.\n * @param[in] pvExchange           Pointer value to be written to *ppvDestination.\n *\n * @return The initial value of *ppvDestination.\n */\nstatic portFORCE_INLINE void * Atomic_SwapPointers_p32( void * volatile * ppvDestination,\n                                                        void * pvExchange )\n{\n    void * pReturnValue;\n\n    ATOMIC_ENTER_CRITICAL();\n    {\n        pReturnValue = *ppvDestination;\n        *ppvDestination = pvExchange;\n    }\n    ATOMIC_EXIT_CRITICAL();\n\n    return pReturnValue;\n}\n/*-----------------------------------------------------------*/\n\n/**\n * Atomic compare-and-swap (pointers)\n *\n * @brief Performs an atomic compare-and-swap operation on the specified pointer\n *        values.\n *\n * @param[in, out] ppvDestination  Pointer to memory location from where a pointer\n *                                 value is to be loaded and checked.\n * @param[in] pvExchange           If condition meets, write this value to memory.\n * @param[in] pvComparand          Swap condition.\n *\n * @return Unsigned integer of value 1 or 0. 1 for swapped, 0 for not swapped.\n *\n * @note This function only swaps *ppvDestination with pvExchange, if previous\n *       *ppvDestination value equals pvComparand.\n */\nstatic portFORCE_INLINE uint32_t Atomic_CompareAndSwapPointers_p32( void * volatile * ppvDestination,\n                                                                    void * pvExchange,\n                                                                    void * pvComparand )\n{\n    uint32_t ulReturnValue = ATOMIC_COMPARE_AND_SWAP_FAILURE;\n\n    ATOMIC_ENTER_CRITICAL();\n    {\n        if( *ppvDestination == pvComparand )\n        {\n            *ppvDestination = pvExchange;\n            ulReturnValue = ATOMIC_COMPARE_AND_SWAP_SUCCESS;\n        }\n    }\n    ATOMIC_EXIT_CRITICAL();\n\n    return ulReturnValue;\n}\n\n\n/*----------------------------- Arithmetic ------------------------------*/\n\n/**\n * Atomic add\n *\n * @brief Atomically adds count to the value of the specified pointer points to.\n *\n * @param[in,out] pulAddend  Pointer to memory location from where value is to be\n *                         loaded and written back to.\n * @param[in] ulCount      Value to be added to *pulAddend.\n *\n * @return previous *pulAddend value.\n */\nstatic portFORCE_INLINE uint32_t Atomic_Add_u32( uint32_t volatile * pulAddend,\n                                                 uint32_t ulCount )\n{\n    uint32_t ulCurrent;\n\n    ATOMIC_ENTER_CRITICAL();\n    {\n        ulCurrent = *pulAddend;\n        *pulAddend += ulCount;\n    }\n    ATOMIC_EXIT_CRITICAL();\n\n    return ulCurrent;\n}\n/*-----------------------------------------------------------*/\n\n/**\n * Atomic subtract\n *\n * @brief Atomically subtracts count from the value of the specified pointer\n *        pointers to.\n *\n * @param[in,out] pulAddend  Pointer to memory location from where value is to be\n *                         loaded and written back to.\n * @param[in] ulCount      Value to be subtract from *pulAddend.\n *\n * @return previous *pulAddend value.\n */\nstatic portFORCE_INLINE uint32_t Atomic_Subtract_u32( uint32_t volatile * pulAddend,\n                                                      uint32_t ulCount )\n{\n    uint32_t ulCurrent;\n\n    ATOMIC_ENTER_CRITICAL();\n    {\n        ulCurrent = *pulAddend;\n        *pulAddend -= ulCount;\n    }\n    ATOMIC_EXIT_CRITICAL();\n\n    return ulCurrent;\n}\n/*-----------------------------------------------------------*/\n\n/**\n * Atomic increment\n *\n * @brief Atomically increments the value of the specified pointer points to.\n *\n * @param[in,out] pulAddend  Pointer to memory location from where value is to be\n *                         loaded and written back to.\n *\n * @return *pulAddend value before increment.\n */\nstatic portFORCE_INLINE uint32_t Atomic_Increment_u32( uint32_t volatile * pulAddend )\n{\n    uint32_t ulCurrent;\n\n    ATOMIC_ENTER_CRITICAL();\n    {\n        ulCurrent = *pulAddend;\n        *pulAddend += 1;\n    }\n    ATOMIC_EXIT_CRITICAL();\n\n    return ulCurrent;\n}\n/*-----------------------------------------------------------*/\n\n/**\n * Atomic decrement\n *\n * @brief Atomically decrements the value of the specified pointer points to\n *\n * @param[in,out] pulAddend  Pointer to memory location from where value is to be\n *                         loaded and written back to.\n *\n * @return *pulAddend value before decrement.\n */\nstatic portFORCE_INLINE uint32_t Atomic_Decrement_u32( uint32_t volatile * pulAddend )\n{\n    uint32_t ulCurrent;\n\n    ATOMIC_ENTER_CRITICAL();\n    {\n        ulCurrent = *pulAddend;\n        *pulAddend -= 1;\n    }\n    ATOMIC_EXIT_CRITICAL();\n\n    return ulCurrent;\n}\n\n/*----------------------------- Bitwise Logical ------------------------------*/\n\n/**\n * Atomic OR\n *\n * @brief Performs an atomic OR operation on the specified values.\n *\n * @param [in, out] pulDestination  Pointer to memory location from where value is\n *                                to be loaded and written back to.\n * @param [in] ulValue            Value to be ORed with *pulDestination.\n *\n * @return The original value of *pulDestination.\n */\nstatic portFORCE_INLINE uint32_t Atomic_OR_u32( uint32_t volatile * pulDestination,\n                                                uint32_t ulValue )\n{\n    uint32_t ulCurrent;\n\n    ATOMIC_ENTER_CRITICAL();\n    {\n        ulCurrent = *pulDestination;\n        *pulDestination |= ulValue;\n    }\n    ATOMIC_EXIT_CRITICAL();\n\n    return ulCurrent;\n}\n/*-----------------------------------------------------------*/\n\n/**\n * Atomic AND\n *\n * @brief Performs an atomic AND operation on the specified values.\n *\n * @param [in, out] pulDestination  Pointer to memory location from where value is\n *                                to be loaded and written back to.\n * @param [in] ulValue            Value to be ANDed with *pulDestination.\n *\n * @return The original value of *pulDestination.\n */\nstatic portFORCE_INLINE uint32_t Atomic_AND_u32( uint32_t volatile * pulDestination,\n                                                 uint32_t ulValue )\n{\n    uint32_t ulCurrent;\n\n    ATOMIC_ENTER_CRITICAL();\n    {\n        ulCurrent = *pulDestination;\n        *pulDestination &= ulValue;\n    }\n    ATOMIC_EXIT_CRITICAL();\n\n    return ulCurrent;\n}\n/*-----------------------------------------------------------*/\n\n/**\n * Atomic NAND\n *\n * @brief Performs an atomic NAND operation on the specified values.\n *\n * @param [in, out] pulDestination  Pointer to memory location from where value is\n *                                to be loaded and written back to.\n * @param [in] ulValue            Value to be NANDed with *pulDestination.\n *\n * @return The original value of *pulDestination.\n */\nstatic portFORCE_INLINE uint32_t Atomic_NAND_u32( uint32_t volatile * pulDestination,\n                                                  uint32_t ulValue )\n{\n    uint32_t ulCurrent;\n\n    ATOMIC_ENTER_CRITICAL();\n    {\n        ulCurrent = *pulDestination;\n        *pulDestination = ~( ulCurrent & ulValue );\n    }\n    ATOMIC_EXIT_CRITICAL();\n\n    return ulCurrent;\n}\n/*-----------------------------------------------------------*/\n\n/**\n * Atomic XOR\n *\n * @brief Performs an atomic XOR operation on the specified values.\n *\n * @param [in, out] pulDestination  Pointer to memory location from where value is\n *                                to be loaded and written back to.\n * @param [in] ulValue            Value to be XORed with *pulDestination.\n *\n * @return The original value of *pulDestination.\n */\nstatic portFORCE_INLINE uint32_t Atomic_XOR_u32( uint32_t volatile * pulDestination,\n                                                 uint32_t ulValue )\n{\n    uint32_t ulCurrent;\n\n    ATOMIC_ENTER_CRITICAL();\n    {\n        ulCurrent = *pulDestination;\n        *pulDestination ^= ulValue;\n    }\n    ATOMIC_EXIT_CRITICAL();\n\n    return ulCurrent;\n}\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n    }\n#endif\n/* *INDENT-ON* */\n\n#endif /* ATOMIC_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/croutine.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n#ifndef CO_ROUTINE_H\n#define CO_ROUTINE_H\n\n#ifndef INC_FREERTOS_H\n    #error \"include FreeRTOS.h must appear in source files before include croutine.h\"\n#endif\n\n#include \"list.h\"\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n    extern \"C\" {\n#endif\n/* *INDENT-ON* */\n\n/* Used to hide the implementation of the co-routine control block.  The\n * control block structure however has to be included in the header due to\n * the macro implementation of the co-routine functionality. */\ntypedef void * CoRoutineHandle_t;\n\n/* Defines the prototype to which co-routine functions must conform. */\ntypedef void (* crCOROUTINE_CODE)( CoRoutineHandle_t xHandle,\n                                   UBaseType_t uxIndex );\n\ntypedef struct corCoRoutineControlBlock\n{\n    crCOROUTINE_CODE pxCoRoutineFunction;\n    ListItem_t xGenericListItem; /**< List item used to place the CRCB in ready and blocked queues. */\n    ListItem_t xEventListItem;   /**< List item used to place the CRCB in event lists. */\n    UBaseType_t uxPriority;      /**< The priority of the co-routine in relation to other co-routines. */\n    UBaseType_t uxIndex;         /**< Used to distinguish between co-routines when multiple co-routines use the same co-routine function. */\n    uint16_t uxState;            /**< Used internally by the co-routine implementation. */\n} CRCB_t;                        /* Co-routine control block.  Note must be identical in size down to uxPriority with TCB_t. */\n\n/**\n * croutine. h\n * @code{c}\n * BaseType_t xCoRoutineCreate(\n *                               crCOROUTINE_CODE pxCoRoutineCode,\n *                               UBaseType_t uxPriority,\n *                               UBaseType_t uxIndex\n *                             );\n * @endcode\n *\n * Create a new co-routine and add it to the list of co-routines that are\n * ready to run.\n *\n * @param pxCoRoutineCode Pointer to the co-routine function.  Co-routine\n * functions require special syntax - see the co-routine section of the WEB\n * documentation for more information.\n *\n * @param uxPriority The priority with respect to other co-routines at which\n *  the co-routine will run.\n *\n * @param uxIndex Used to distinguish between different co-routines that\n * execute the same function.  See the example below and the co-routine section\n * of the WEB documentation for further information.\n *\n * @return pdPASS if the co-routine was successfully created and added to a ready\n * list, otherwise an error code defined with ProjDefs.h.\n *\n * Example usage:\n * @code{c}\n * // Co-routine to be created.\n * void vFlashCoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )\n * {\n * // Variables in co-routines must be declared static if they must maintain value across a blocking call.\n * // This may not be necessary for const variables.\n * static const char cLedToFlash[ 2 ] = { 5, 6 };\n * static const TickType_t uxFlashRates[ 2 ] = { 200, 400 };\n *\n *   // Must start every co-routine with a call to crSTART();\n *   crSTART( xHandle );\n *\n *   for( ;; )\n *   {\n *       // This co-routine just delays for a fixed period, then toggles\n *       // an LED.  Two co-routines are created using this function, so\n *       // the uxIndex parameter is used to tell the co-routine which\n *       // LED to flash and how int32_t to delay.  This assumes xQueue has\n *       // already been created.\n *       vParTestToggleLED( cLedToFlash[ uxIndex ] );\n *       crDELAY( xHandle, uxFlashRates[ uxIndex ] );\n *   }\n *\n *   // Must end every co-routine with a call to crEND();\n *   crEND();\n * }\n *\n * // Function that creates two co-routines.\n * void vOtherFunction( void )\n * {\n * uint8_t ucParameterToPass;\n * TaskHandle_t xHandle;\n *\n *   // Create two co-routines at priority 0.  The first is given index 0\n *   // so (from the code above) toggles LED 5 every 200 ticks.  The second\n *   // is given index 1 so toggles LED 6 every 400 ticks.\n *   for( uxIndex = 0; uxIndex < 2; uxIndex++ )\n *   {\n *       xCoRoutineCreate( vFlashCoRoutine, 0, uxIndex );\n *   }\n * }\n * @endcode\n * \\defgroup xCoRoutineCreate xCoRoutineCreate\n * \\ingroup Tasks\n */\nBaseType_t xCoRoutineCreate( crCOROUTINE_CODE pxCoRoutineCode,\n                             UBaseType_t uxPriority,\n                             UBaseType_t uxIndex );\n\n\n/**\n * croutine. h\n * @code{c}\n * void vCoRoutineSchedule( void );\n * @endcode\n *\n * Run a co-routine.\n *\n * vCoRoutineSchedule() executes the highest priority co-routine that is able\n * to run.  The co-routine will execute until it either blocks, yields or is\n * preempted by a task.  Co-routines execute cooperatively so one\n * co-routine cannot be preempted by another, but can be preempted by a task.\n *\n * If an application comprises of both tasks and co-routines then\n * vCoRoutineSchedule should be called from the idle task (in an idle task\n * hook).\n *\n * Example usage:\n * @code{c}\n * // This idle task hook will schedule a co-routine each time it is called.\n * // The rest of the idle task will execute between co-routine calls.\n * void vApplicationIdleHook( void )\n * {\n *  vCoRoutineSchedule();\n * }\n *\n * // Alternatively, if you do not require any other part of the idle task to\n * // execute, the idle task hook can call vCoRoutineSchedule() within an\n * // infinite loop.\n * void vApplicationIdleHook( void )\n * {\n *  for( ;; )\n *  {\n *      vCoRoutineSchedule();\n *  }\n * }\n * @endcode\n * \\defgroup vCoRoutineSchedule vCoRoutineSchedule\n * \\ingroup Tasks\n */\nvoid vCoRoutineSchedule( void );\n\n/**\n * croutine. h\n * @code{c}\n * crSTART( CoRoutineHandle_t xHandle );\n * @endcode\n *\n * This macro MUST always be called at the start of a co-routine function.\n *\n * Example usage:\n * @code{c}\n * // Co-routine to be created.\n * void vACoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )\n * {\n * // Variables in co-routines must be declared static if they must maintain value across a blocking call.\n * static int32_t ulAVariable;\n *\n *   // Must start every co-routine with a call to crSTART();\n *   crSTART( xHandle );\n *\n *   for( ;; )\n *   {\n *        // Co-routine functionality goes here.\n *   }\n *\n *   // Must end every co-routine with a call to crEND();\n *   crEND();\n * }\n * @endcode\n * \\defgroup crSTART crSTART\n * \\ingroup Tasks\n */\n#define crSTART( pxCRCB )                            \\\n    switch( ( ( CRCB_t * ) ( pxCRCB ) )->uxState ) { \\\n        case 0:\n\n/**\n * croutine. h\n * @code{c}\n * crEND();\n * @endcode\n *\n * This macro MUST always be called at the end of a co-routine function.\n *\n * Example usage:\n * @code{c}\n * // Co-routine to be created.\n * void vACoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )\n * {\n * // Variables in co-routines must be declared static if they must maintain value across a blocking call.\n * static int32_t ulAVariable;\n *\n *   // Must start every co-routine with a call to crSTART();\n *   crSTART( xHandle );\n *\n *   for( ;; )\n *   {\n *        // Co-routine functionality goes here.\n *   }\n *\n *   // Must end every co-routine with a call to crEND();\n *   crEND();\n * }\n * @endcode\n * \\defgroup crSTART crSTART\n * \\ingroup Tasks\n */\n#define crEND()    }\n\n/*\n * These macros are intended for internal use by the co-routine implementation\n * only.  The macros should not be used directly by application writers.\n */\n#define crSET_STATE0( xHandle )                                       \\\n    ( ( CRCB_t * ) ( xHandle ) )->uxState = ( __LINE__ * 2 ); return; \\\n    case ( __LINE__ * 2 ):\n#define crSET_STATE1( xHandle )                                               \\\n    ( ( CRCB_t * ) ( xHandle ) )->uxState = ( ( __LINE__ * 2 ) + 1 ); return; \\\n    case ( ( __LINE__ * 2 ) + 1 ):\n\n/**\n * croutine. h\n * @code{c}\n * crDELAY( CoRoutineHandle_t xHandle, TickType_t xTicksToDelay );\n * @endcode\n *\n * Delay a co-routine for a fixed period of time.\n *\n * crDELAY can only be called from the co-routine function itself - not\n * from within a function called by the co-routine function.  This is because\n * co-routines do not maintain their own stack.\n *\n * @param xHandle The handle of the co-routine to delay.  This is the xHandle\n * parameter of the co-routine function.\n *\n * @param xTickToDelay The number of ticks that the co-routine should delay\n * for.  The actual amount of time this equates to is defined by\n * configTICK_RATE_HZ (set in FreeRTOSConfig.h).  The constant portTICK_PERIOD_MS\n * can be used to convert ticks to milliseconds.\n *\n * Example usage:\n * @code{c}\n * // Co-routine to be created.\n * void vACoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )\n * {\n * // Variables in co-routines must be declared static if they must maintain value across a blocking call.\n * // This may not be necessary for const variables.\n * // We are to delay for 200ms.\n * static const xTickType xDelayTime = 200 / portTICK_PERIOD_MS;\n *\n *   // Must start every co-routine with a call to crSTART();\n *   crSTART( xHandle );\n *\n *   for( ;; )\n *   {\n *      // Delay for 200ms.\n *      crDELAY( xHandle, xDelayTime );\n *\n *      // Do something here.\n *   }\n *\n *   // Must end every co-routine with a call to crEND();\n *   crEND();\n * }\n * @endcode\n * \\defgroup crDELAY crDELAY\n * \\ingroup Tasks\n */\n#define crDELAY( xHandle, xTicksToDelay )                          \\\n    do {                                                           \\\n        if( ( xTicksToDelay ) > 0 )                                \\\n        {                                                          \\\n            vCoRoutineAddToDelayedList( ( xTicksToDelay ), NULL ); \\\n        }                                                          \\\n        crSET_STATE0( ( xHandle ) );                               \\\n    } while( 0 )\n\n/**\n * @code{c}\n * crQUEUE_SEND(\n *                CoRoutineHandle_t xHandle,\n *                QueueHandle_t pxQueue,\n *                void *pvItemToQueue,\n *                TickType_t xTicksToWait,\n *                BaseType_t *pxResult\n *           )\n * @endcode\n *\n * The macro's crQUEUE_SEND() and crQUEUE_RECEIVE() are the co-routine\n * equivalent to the xQueueSend() and xQueueReceive() functions used by tasks.\n *\n * crQUEUE_SEND and crQUEUE_RECEIVE can only be used from a co-routine whereas\n * xQueueSend() and xQueueReceive() can only be used from tasks.\n *\n * crQUEUE_SEND can only be called from the co-routine function itself - not\n * from within a function called by the co-routine function.  This is because\n * co-routines do not maintain their own stack.\n *\n * See the co-routine section of the WEB documentation for information on\n * passing data between tasks and co-routines and between ISR's and\n * co-routines.\n *\n * @param xHandle The handle of the calling co-routine.  This is the xHandle\n * parameter of the co-routine function.\n *\n * @param pxQueue The handle of the queue on which the data will be posted.\n * The handle is obtained as the return value when the queue is created using\n * the xQueueCreate() API function.\n *\n * @param pvItemToQueue A pointer to the data being posted onto the queue.\n * The number of bytes of each queued item is specified when the queue is\n * created.  This number of bytes is copied from pvItemToQueue into the queue\n * itself.\n *\n * @param xTickToDelay The number of ticks that the co-routine should block\n * to wait for space to become available on the queue, should space not be\n * available immediately. The actual amount of time this equates to is defined\n * by configTICK_RATE_HZ (set in FreeRTOSConfig.h).  The constant\n * portTICK_PERIOD_MS can be used to convert ticks to milliseconds (see example\n * below).\n *\n * @param pxResult The variable pointed to by pxResult will be set to pdPASS if\n * data was successfully posted onto the queue, otherwise it will be set to an\n * error defined within ProjDefs.h.\n *\n * Example usage:\n * @code{c}\n * // Co-routine function that blocks for a fixed period then posts a number onto\n * // a queue.\n * static void prvCoRoutineFlashTask( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )\n * {\n * // Variables in co-routines must be declared static if they must maintain value across a blocking call.\n * static BaseType_t xNumberToPost = 0;\n * static BaseType_t xResult;\n *\n *  // Co-routines must begin with a call to crSTART().\n *  crSTART( xHandle );\n *\n *  for( ;; )\n *  {\n *      // This assumes the queue has already been created.\n *      crQUEUE_SEND( xHandle, xCoRoutineQueue, &xNumberToPost, NO_DELAY, &xResult );\n *\n *      if( xResult != pdPASS )\n *      {\n *          // The message was not posted!\n *      }\n *\n *      // Increment the number to be posted onto the queue.\n *      xNumberToPost++;\n *\n *      // Delay for 100 ticks.\n *      crDELAY( xHandle, 100 );\n *  }\n *\n *  // Co-routines must end with a call to crEND().\n *  crEND();\n * }\n * @endcode\n * \\defgroup crQUEUE_SEND crQUEUE_SEND\n * \\ingroup Tasks\n */\n#define crQUEUE_SEND( xHandle, pxQueue, pvItemToQueue, xTicksToWait, pxResult )           \\\n    do {                                                                                  \\\n        *( pxResult ) = xQueueCRSend( ( pxQueue ), ( pvItemToQueue ), ( xTicksToWait ) ); \\\n        if( *( pxResult ) == errQUEUE_BLOCKED )                                           \\\n        {                                                                                 \\\n            crSET_STATE0( ( xHandle ) );                                                  \\\n            *pxResult = xQueueCRSend( ( pxQueue ), ( pvItemToQueue ), 0 );                \\\n        }                                                                                 \\\n        if( *pxResult == errQUEUE_YIELD )                                                 \\\n        {                                                                                 \\\n            crSET_STATE1( ( xHandle ) );                                                  \\\n            *pxResult = pdPASS;                                                           \\\n        }                                                                                 \\\n    } while( 0 )\n\n/**\n * croutine. h\n * @code{c}\n * crQUEUE_RECEIVE(\n *                   CoRoutineHandle_t xHandle,\n *                   QueueHandle_t pxQueue,\n *                   void *pvBuffer,\n *                   TickType_t xTicksToWait,\n *                   BaseType_t *pxResult\n *               )\n * @endcode\n *\n * The macro's crQUEUE_SEND() and crQUEUE_RECEIVE() are the co-routine\n * equivalent to the xQueueSend() and xQueueReceive() functions used by tasks.\n *\n * crQUEUE_SEND and crQUEUE_RECEIVE can only be used from a co-routine whereas\n * xQueueSend() and xQueueReceive() can only be used from tasks.\n *\n * crQUEUE_RECEIVE can only be called from the co-routine function itself - not\n * from within a function called by the co-routine function.  This is because\n * co-routines do not maintain their own stack.\n *\n * See the co-routine section of the WEB documentation for information on\n * passing data between tasks and co-routines and between ISR's and\n * co-routines.\n *\n * @param xHandle The handle of the calling co-routine.  This is the xHandle\n * parameter of the co-routine function.\n *\n * @param pxQueue The handle of the queue from which the data will be received.\n * The handle is obtained as the return value when the queue is created using\n * the xQueueCreate() API function.\n *\n * @param pvBuffer The buffer into which the received item is to be copied.\n * The number of bytes of each queued item is specified when the queue is\n * created.  This number of bytes is copied into pvBuffer.\n *\n * @param xTickToDelay The number of ticks that the co-routine should block\n * to wait for data to become available from the queue, should data not be\n * available immediately. The actual amount of time this equates to is defined\n * by configTICK_RATE_HZ (set in FreeRTOSConfig.h).  The constant\n * portTICK_PERIOD_MS can be used to convert ticks to milliseconds (see the\n * crQUEUE_SEND example).\n *\n * @param pxResult The variable pointed to by pxResult will be set to pdPASS if\n * data was successfully retrieved from the queue, otherwise it will be set to\n * an error code as defined within ProjDefs.h.\n *\n * Example usage:\n * @code{c}\n * // A co-routine receives the number of an LED to flash from a queue.  It\n * // blocks on the queue until the number is received.\n * static void prvCoRoutineFlashWorkTask( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )\n * {\n * // Variables in co-routines must be declared static if they must maintain value across a blocking call.\n * static BaseType_t xResult;\n * static UBaseType_t uxLEDToFlash;\n *\n *  // All co-routines must start with a call to crSTART().\n *  crSTART( xHandle );\n *\n *  for( ;; )\n *  {\n *      // Wait for data to become available on the queue.\n *      crQUEUE_RECEIVE( xHandle, xCoRoutineQueue, &uxLEDToFlash, portMAX_DELAY, &xResult );\n *\n *      if( xResult == pdPASS )\n *      {\n *          // We received the LED to flash - flash it!\n *          vParTestToggleLED( uxLEDToFlash );\n *      }\n *  }\n *\n *  crEND();\n * }\n * @endcode\n * \\defgroup crQUEUE_RECEIVE crQUEUE_RECEIVE\n * \\ingroup Tasks\n */\n#define crQUEUE_RECEIVE( xHandle, pxQueue, pvBuffer, xTicksToWait, pxResult )           \\\n    do {                                                                                \\\n        *( pxResult ) = xQueueCRReceive( ( pxQueue ), ( pvBuffer ), ( xTicksToWait ) ); \\\n        if( *( pxResult ) == errQUEUE_BLOCKED )                                         \\\n        {                                                                               \\\n            crSET_STATE0( ( xHandle ) );                                                \\\n            *( pxResult ) = xQueueCRReceive( ( pxQueue ), ( pvBuffer ), 0 );            \\\n        }                                                                               \\\n        if( *( pxResult ) == errQUEUE_YIELD )                                           \\\n        {                                                                               \\\n            crSET_STATE1( ( xHandle ) );                                                \\\n            *( pxResult ) = pdPASS;                                                     \\\n        }                                                                               \\\n    } while( 0 )\n\n/**\n * croutine. h\n * @code{c}\n * crQUEUE_SEND_FROM_ISR(\n *                          QueueHandle_t pxQueue,\n *                          void *pvItemToQueue,\n *                          BaseType_t xCoRoutinePreviouslyWoken\n *                     )\n * @endcode\n *\n * The macro's crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() are the\n * co-routine equivalent to the xQueueSendFromISR() and xQueueReceiveFromISR()\n * functions used by tasks.\n *\n * crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() can only be used to\n * pass data between a co-routine and and ISR, whereas xQueueSendFromISR() and\n * xQueueReceiveFromISR() can only be used to pass data between a task and and\n * ISR.\n *\n * crQUEUE_SEND_FROM_ISR can only be called from an ISR to send data to a queue\n * that is being used from within a co-routine.\n *\n * See the co-routine section of the WEB documentation for information on\n * passing data between tasks and co-routines and between ISR's and\n * co-routines.\n *\n * @param xQueue The handle to the queue on which the item is to be posted.\n *\n * @param pvItemToQueue A pointer to the item that is to be placed on the\n * queue.  The size of the items the queue will hold was defined when the\n * queue was created, so this many bytes will be copied from pvItemToQueue\n * into the queue storage area.\n *\n * @param xCoRoutinePreviouslyWoken This is included so an ISR can post onto\n * the same queue multiple times from a single interrupt.  The first call\n * should always pass in pdFALSE.  Subsequent calls should pass in\n * the value returned from the previous call.\n *\n * @return pdTRUE if a co-routine was woken by posting onto the queue.  This is\n * used by the ISR to determine if a context switch may be required following\n * the ISR.\n *\n * Example usage:\n * @code{c}\n * // A co-routine that blocks on a queue waiting for characters to be received.\n * static void vReceivingCoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )\n * {\n * char cRxedChar;\n * BaseType_t xResult;\n *\n *   // All co-routines must start with a call to crSTART().\n *   crSTART( xHandle );\n *\n *   for( ;; )\n *   {\n *       // Wait for data to become available on the queue.  This assumes the\n *       // queue xCommsRxQueue has already been created!\n *       crQUEUE_RECEIVE( xHandle, xCommsRxQueue, &uxLEDToFlash, portMAX_DELAY, &xResult );\n *\n *       // Was a character received?\n *       if( xResult == pdPASS )\n *       {\n *           // Process the character here.\n *       }\n *   }\n *\n *   // All co-routines must end with a call to crEND().\n *   crEND();\n * }\n *\n * // An ISR that uses a queue to send characters received on a serial port to\n * // a co-routine.\n * void vUART_ISR( void )\n * {\n * char cRxedChar;\n * BaseType_t xCRWokenByPost = pdFALSE;\n *\n *   // We loop around reading characters until there are none left in the UART.\n *   while( UART_RX_REG_NOT_EMPTY() )\n *   {\n *       // Obtain the character from the UART.\n *       cRxedChar = UART_RX_REG;\n *\n *       // Post the character onto a queue.  xCRWokenByPost will be pdFALSE\n *       // the first time around the loop.  If the post causes a co-routine\n *       // to be woken (unblocked) then xCRWokenByPost will be set to pdTRUE.\n *       // In this manner we can ensure that if more than one co-routine is\n *       // blocked on the queue only one is woken by this ISR no matter how\n *       // many characters are posted to the queue.\n *       xCRWokenByPost = crQUEUE_SEND_FROM_ISR( xCommsRxQueue, &cRxedChar, xCRWokenByPost );\n *   }\n * }\n * @endcode\n * \\defgroup crQUEUE_SEND_FROM_ISR crQUEUE_SEND_FROM_ISR\n * \\ingroup Tasks\n */\n#define crQUEUE_SEND_FROM_ISR( pxQueue, pvItemToQueue, xCoRoutinePreviouslyWoken ) \\\n    xQueueCRSendFromISR( ( pxQueue ), ( pvItemToQueue ), ( xCoRoutinePreviouslyWoken ) )\n\n\n/**\n * croutine. h\n * @code{c}\n * crQUEUE_SEND_FROM_ISR(\n *                          QueueHandle_t pxQueue,\n *                          void *pvBuffer,\n *                          BaseType_t * pxCoRoutineWoken\n *                     )\n * @endcode\n *\n * The macro's crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() are the\n * co-routine equivalent to the xQueueSendFromISR() and xQueueReceiveFromISR()\n * functions used by tasks.\n *\n * crQUEUE_SEND_FROM_ISR() and crQUEUE_RECEIVE_FROM_ISR() can only be used to\n * pass data between a co-routine and and ISR, whereas xQueueSendFromISR() and\n * xQueueReceiveFromISR() can only be used to pass data between a task and and\n * ISR.\n *\n * crQUEUE_RECEIVE_FROM_ISR can only be called from an ISR to receive data\n * from a queue that is being used from within a co-routine (a co-routine\n * posted to the queue).\n *\n * See the co-routine section of the WEB documentation for information on\n * passing data between tasks and co-routines and between ISR's and\n * co-routines.\n *\n * @param xQueue The handle to the queue on which the item is to be posted.\n *\n * @param pvBuffer A pointer to a buffer into which the received item will be\n * placed.  The size of the items the queue will hold was defined when the\n * queue was created, so this many bytes will be copied from the queue into\n * pvBuffer.\n *\n * @param pxCoRoutineWoken A co-routine may be blocked waiting for space to become\n * available on the queue.  If crQUEUE_RECEIVE_FROM_ISR causes such a\n * co-routine to unblock *pxCoRoutineWoken will get set to pdTRUE, otherwise\n * *pxCoRoutineWoken will remain unchanged.\n *\n * @return pdTRUE an item was successfully received from the queue, otherwise\n * pdFALSE.\n *\n * Example usage:\n * @code{c}\n * // A co-routine that posts a character to a queue then blocks for a fixed\n * // period.  The character is incremented each time.\n * static void vSendingCoRoutine( CoRoutineHandle_t xHandle, UBaseType_t uxIndex )\n * {\n * // cChar holds its value while this co-routine is blocked and must therefore\n * // be declared static.\n * static char cCharToTx = 'a';\n * BaseType_t xResult;\n *\n *   // All co-routines must start with a call to crSTART().\n *   crSTART( xHandle );\n *\n *   for( ;; )\n *   {\n *       // Send the next character to the queue.\n *       crQUEUE_SEND( xHandle, xCoRoutineQueue, &cCharToTx, NO_DELAY, &xResult );\n *\n *       if( xResult == pdPASS )\n *       {\n *           // The character was successfully posted to the queue.\n *       }\n *       else\n *       {\n *          // Could not post the character to the queue.\n *       }\n *\n *       // Enable the UART Tx interrupt to cause an interrupt in this\n *       // hypothetical UART.  The interrupt will obtain the character\n *       // from the queue and send it.\n *       ENABLE_RX_INTERRUPT();\n *\n *       // Increment to the next character then block for a fixed period.\n *       // cCharToTx will maintain its value across the delay as it is\n *       // declared static.\n *       cCharToTx++;\n *       if( cCharToTx > 'x' )\n *       {\n *          cCharToTx = 'a';\n *       }\n *       crDELAY( 100 );\n *   }\n *\n *   // All co-routines must end with a call to crEND().\n *   crEND();\n * }\n *\n * // An ISR that uses a queue to receive characters to send on a UART.\n * void vUART_ISR( void )\n * {\n * char cCharToTx;\n * BaseType_t xCRWokenByPost = pdFALSE;\n *\n *   while( UART_TX_REG_EMPTY() )\n *   {\n *       // Are there any characters in the queue waiting to be sent?\n *       // xCRWokenByPost will automatically be set to pdTRUE if a co-routine\n *       // is woken by the post - ensuring that only a single co-routine is\n *       // woken no matter how many times we go around this loop.\n *       if( crQUEUE_RECEIVE_FROM_ISR( pxQueue, &cCharToTx, &xCRWokenByPost ) )\n *       {\n *           SEND_CHARACTER( cCharToTx );\n *       }\n *   }\n * }\n * @endcode\n * \\defgroup crQUEUE_RECEIVE_FROM_ISR crQUEUE_RECEIVE_FROM_ISR\n * \\ingroup Tasks\n */\n#define crQUEUE_RECEIVE_FROM_ISR( pxQueue, pvBuffer, pxCoRoutineWoken ) \\\n    xQueueCRReceiveFromISR( ( pxQueue ), ( pvBuffer ), ( pxCoRoutineWoken ) )\n\n/*\n * This function is intended for internal use by the co-routine macros only.\n * The macro nature of the co-routine implementation requires that the\n * prototype appears here.  The function should not be used by application\n * writers.\n *\n * Removes the current co-routine from its ready list and places it in the\n * appropriate delayed list.\n */\nvoid vCoRoutineAddToDelayedList( TickType_t xTicksToDelay,\n                                 List_t * pxEventList );\n\n/*\n * This function is intended for internal use by the queue implementation only.\n * The function should not be used by application writers.\n *\n * Removes the highest priority co-routine from the event list and places it in\n * the pending ready list.\n */\nBaseType_t xCoRoutineRemoveFromEventList( const List_t * pxEventList );\n\n\n/*\n * This function resets the internal state of the coroutine module. It must be\n * called by the application before restarting the scheduler.\n */\nvoid vCoRoutineResetState( void ) PRIVILEGED_FUNCTION;\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n    }\n#endif\n/* *INDENT-ON* */\n\n#endif /* CO_ROUTINE_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/event_groups.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n#ifndef EVENT_GROUPS_H\n#define EVENT_GROUPS_H\n\n#ifndef INC_FREERTOS_H\n    #error \"include FreeRTOS.h\" must appear in source files before \"include event_groups.h\"\n#endif\n\n/* FreeRTOS includes. */\n#include \"timers.h\"\n\n/* The following bit fields convey control information in a task's event list\n * item value.  It is important they don't clash with the\n * taskEVENT_LIST_ITEM_VALUE_IN_USE definition. */\n#if ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )\n    #define eventCLEAR_EVENTS_ON_EXIT_BIT    ( ( uint16_t ) 0x0100U )\n    #define eventUNBLOCKED_DUE_TO_BIT_SET    ( ( uint16_t ) 0x0200U )\n    #define eventWAIT_FOR_ALL_BITS           ( ( uint16_t ) 0x0400U )\n    #define eventEVENT_BITS_CONTROL_BYTES    ( ( uint16_t ) 0xff00U )\n#elif ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_32_BITS )\n    #define eventCLEAR_EVENTS_ON_EXIT_BIT    ( ( uint32_t ) 0x01000000U )\n    #define eventUNBLOCKED_DUE_TO_BIT_SET    ( ( uint32_t ) 0x02000000U )\n    #define eventWAIT_FOR_ALL_BITS           ( ( uint32_t ) 0x04000000U )\n    #define eventEVENT_BITS_CONTROL_BYTES    ( ( uint32_t ) 0xff000000U )\n#elif ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_64_BITS )\n    #define eventCLEAR_EVENTS_ON_EXIT_BIT    ( ( uint64_t ) 0x0100000000000000U )\n    #define eventUNBLOCKED_DUE_TO_BIT_SET    ( ( uint64_t ) 0x0200000000000000U )\n    #define eventWAIT_FOR_ALL_BITS           ( ( uint64_t ) 0x0400000000000000U )\n    #define eventEVENT_BITS_CONTROL_BYTES    ( ( uint64_t ) 0xff00000000000000U )\n#endif /* if ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS ) */\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n    extern \"C\" {\n#endif\n/* *INDENT-ON* */\n\n/**\n * An event group is a collection of bits to which an application can assign a\n * meaning.  For example, an application may create an event group to convey\n * the status of various CAN bus related events in which bit 0 might mean \"A CAN\n * message has been received and is ready for processing\", bit 1 might mean \"The\n * application has queued a message that is ready for sending onto the CAN\n * network\", and bit 2 might mean \"It is time to send a SYNC message onto the\n * CAN network\" etc.  A task can then test the bit values to see which events\n * are active, and optionally enter the Blocked state to wait for a specified\n * bit or a group of specified bits to be active.  To continue the CAN bus\n * example, a CAN controlling task can enter the Blocked state (and therefore\n * not consume any processing time) until either bit 0, bit 1 or bit 2 are\n * active, at which time the bit that was actually active would inform the task\n * which action it had to take (process a received message, send a message, or\n * send a SYNC).\n *\n * The event groups implementation contains intelligence to avoid race\n * conditions that would otherwise occur were an application to use a simple\n * variable for the same purpose.  This is particularly important with respect\n * to when a bit within an event group is to be cleared, and when bits have to\n * be set and then tested atomically - as is the case where event groups are\n * used to create a synchronisation point between multiple tasks (a\n * 'rendezvous').\n */\n\n\n\n/**\n * event_groups.h\n *\n * Type by which event groups are referenced.  For example, a call to\n * xEventGroupCreate() returns an EventGroupHandle_t variable that can then\n * be used as a parameter to other event group functions.\n *\n * \\defgroup EventGroupHandle_t EventGroupHandle_t\n * \\ingroup EventGroup\n */\nstruct EventGroupDef_t;\ntypedef struct EventGroupDef_t   * EventGroupHandle_t;\n\n/*\n * The type that holds event bits always matches TickType_t - therefore the\n * number of bits it holds is set by configTICK_TYPE_WIDTH_IN_BITS (16 bits if set to 0,\n * 32 bits if set to 1, 64 bits if set to 2.\n *\n * \\defgroup EventBits_t EventBits_t\n * \\ingroup EventGroup\n */\ntypedef TickType_t               EventBits_t;\n\n/**\n * event_groups.h\n * @code{c}\n * EventGroupHandle_t xEventGroupCreate( void );\n * @endcode\n *\n * Create a new event group.\n *\n * Internally, within the FreeRTOS implementation, event groups use a [small]\n * block of memory, in which the event group's structure is stored.  If an event\n * groups is created using xEventGroupCreate() then the required memory is\n * automatically dynamically allocated inside the xEventGroupCreate() function.\n * (see https://www.FreeRTOS.org/a00111.html).  If an event group is created\n * using xEventGroupCreateStatic() then the application writer must instead\n * provide the memory that will get used by the event group.\n * xEventGroupCreateStatic() therefore allows an event group to be created\n * without using any dynamic memory allocation.\n *\n * Although event groups are not related to ticks, for internal implementation\n * reasons the number of bits available for use in an event group is dependent\n * on the configTICK_TYPE_WIDTH_IN_BITS setting in FreeRTOSConfig.h.  If\n * configTICK_TYPE_WIDTH_IN_BITS is 0 then each event group contains 8 usable bits (bit\n * 0 to bit 7).  If configTICK_TYPE_WIDTH_IN_BITS is set to 1 then each event group has\n * 24 usable bits (bit 0 to bit 23).  If configTICK_TYPE_WIDTH_IN_BITS is set to 2 then\n * each event group has 56 usable bits (bit 0 to bit 53). The EventBits_t type\n * is used to store event bits within an event group.\n *\n * The configUSE_EVENT_GROUPS configuration constant must be set to 1 for xEventGroupCreate()\n * to be available.\n *\n * @return If the event group was created then a handle to the event group is\n * returned.  If there was insufficient FreeRTOS heap available to create the\n * event group then NULL is returned.  See https://www.FreeRTOS.org/a00111.html\n *\n * Example usage:\n * @code{c}\n *  // Declare a variable to hold the created event group.\n *  EventGroupHandle_t xCreatedEventGroup;\n *\n *  // Attempt to create the event group.\n *  xCreatedEventGroup = xEventGroupCreate();\n *\n *  // Was the event group created successfully?\n *  if( xCreatedEventGroup == NULL )\n *  {\n *      // The event group was not created because there was insufficient\n *      // FreeRTOS heap available.\n *  }\n *  else\n *  {\n *      // The event group was created.\n *  }\n * @endcode\n * \\defgroup xEventGroupCreate xEventGroupCreate\n * \\ingroup EventGroup\n */\n#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n    EventGroupHandle_t xEventGroupCreate( void ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * event_groups.h\n * @code{c}\n * EventGroupHandle_t xEventGroupCreateStatic( EventGroupHandle_t * pxEventGroupBuffer );\n * @endcode\n *\n * Create a new event group.\n *\n * Internally, within the FreeRTOS implementation, event groups use a [small]\n * block of memory, in which the event group's structure is stored.  If an event\n * groups is created using xEventGroupCreate() then the required memory is\n * automatically dynamically allocated inside the xEventGroupCreate() function.\n * (see https://www.FreeRTOS.org/a00111.html).  If an event group is created\n * using xEventGroupCreateStatic() then the application writer must instead\n * provide the memory that will get used by the event group.\n * xEventGroupCreateStatic() therefore allows an event group to be created\n * without using any dynamic memory allocation.\n *\n * Although event groups are not related to ticks, for internal implementation\n * reasons the number of bits available for use in an event group is dependent\n * on the configTICK_TYPE_WIDTH_IN_BITS setting in FreeRTOSConfig.h.  If\n * configTICK_TYPE_WIDTH_IN_BITS is 0 then each event group contains 8 usable bits (bit\n * 0 to bit 7).  If configTICK_TYPE_WIDTH_IN_BITS is set to 1 then each event group has\n * 24 usable bits (bit 0 to bit 23).  If configTICK_TYPE_WIDTH_IN_BITS is set to 2 then\n * each event group has 56 usable bits (bit 0 to bit 53).  The EventBits_t type\n * is used to store event bits within an event group.\n *\n * The configUSE_EVENT_GROUPS configuration constant must be set to 1 for xEventGroupCreateStatic()\n * to be available.\n *\n * @param pxEventGroupBuffer pxEventGroupBuffer must point to a variable of type\n * StaticEventGroup_t, which will be then be used to hold the event group's data\n * structures, removing the need for the memory to be allocated dynamically.\n *\n * @return If the event group was created then a handle to the event group is\n * returned.  If pxEventGroupBuffer was NULL then NULL is returned.\n *\n * Example usage:\n * @code{c}\n *  // StaticEventGroup_t is a publicly accessible structure that has the same\n *  // size and alignment requirements as the real event group structure.  It is\n *  // provided as a mechanism for applications to know the size of the event\n *  // group (which is dependent on the architecture and configuration file\n *  // settings) without breaking the strict data hiding policy by exposing the\n *  // real event group internals.  This StaticEventGroup_t variable is passed\n *  // into the xSemaphoreCreateEventGroupStatic() function and is used to store\n *  // the event group's data structures\n *  StaticEventGroup_t xEventGroupBuffer;\n *\n *  // Create the event group without dynamically allocating any memory.\n *  xEventGroup = xEventGroupCreateStatic( &xEventGroupBuffer );\n * @endcode\n */\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    EventGroupHandle_t xEventGroupCreateStatic( StaticEventGroup_t * pxEventGroupBuffer ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * event_groups.h\n * @code{c}\n *  EventBits_t xEventGroupWaitBits(    EventGroupHandle_t xEventGroup,\n *                                      const EventBits_t uxBitsToWaitFor,\n *                                      const BaseType_t xClearOnExit,\n *                                      const BaseType_t xWaitForAllBits,\n *                                      const TickType_t xTicksToWait );\n * @endcode\n *\n * [Potentially] block to wait for one or more bits to be set within a\n * previously created event group.\n *\n * This function cannot be called from an interrupt.\n *\n * The configUSE_EVENT_GROUPS configuration constant must be set to 1 for xEventGroupWaitBits()\n * to be available.\n *\n * @param xEventGroup The event group in which the bits are being tested.  The\n * event group must have previously been created using a call to\n * xEventGroupCreate().\n *\n * @param uxBitsToWaitFor A bitwise value that indicates the bit or bits to test\n * inside the event group.  For example, to wait for bit 0 and/or bit 2 set\n * uxBitsToWaitFor to 0x05.  To wait for bits 0 and/or bit 1 and/or bit 2 set\n * uxBitsToWaitFor to 0x07.  Etc.\n *\n * @param xClearOnExit If xClearOnExit is set to pdTRUE then any bits within\n * uxBitsToWaitFor that are set within the event group will be cleared before\n * xEventGroupWaitBits() returns if the wait condition was met (if the function\n * returns for a reason other than a timeout).  If xClearOnExit is set to\n * pdFALSE then the bits set in the event group are not altered when the call to\n * xEventGroupWaitBits() returns.\n *\n * @param xWaitForAllBits If xWaitForAllBits is set to pdTRUE then\n * xEventGroupWaitBits() will return when either all the bits in uxBitsToWaitFor\n * are set or the specified block time expires.  If xWaitForAllBits is set to\n * pdFALSE then xEventGroupWaitBits() will return when any one of the bits set\n * in uxBitsToWaitFor is set or the specified block time expires.  The block\n * time is specified by the xTicksToWait parameter.\n *\n * @param xTicksToWait The maximum amount of time (specified in 'ticks') to wait\n * for one/all (depending on the xWaitForAllBits value) of the bits specified by\n * uxBitsToWaitFor to become set. A value of portMAX_DELAY can be used to block\n * indefinitely (provided INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h).\n *\n * @return The value of the event group at the time either the bits being waited\n * for became set, or the block time expired.  Test the return value to know\n * which bits were set.  If xEventGroupWaitBits() returned because its timeout\n * expired then not all the bits being waited for will be set.  If\n * xEventGroupWaitBits() returned because the bits it was waiting for were set\n * then the returned value is the event group value before any bits were\n * automatically cleared in the case that xClearOnExit parameter was set to\n * pdTRUE.\n *\n * Example usage:\n * @code{c}\n * #define BIT_0 ( 1 << 0 )\n * #define BIT_4 ( 1 << 4 )\n *\n * void aFunction( EventGroupHandle_t xEventGroup )\n * {\n * EventBits_t uxBits;\n * const TickType_t xTicksToWait = 100 / portTICK_PERIOD_MS;\n *\n *      // Wait a maximum of 100ms for either bit 0 or bit 4 to be set within\n *      // the event group.  Clear the bits before exiting.\n *      uxBits = xEventGroupWaitBits(\n *                  xEventGroup,    // The event group being tested.\n *                  BIT_0 | BIT_4,  // The bits within the event group to wait for.\n *                  pdTRUE,         // BIT_0 and BIT_4 should be cleared before returning.\n *                  pdFALSE,        // Don't wait for both bits, either bit will do.\n *                  xTicksToWait ); // Wait a maximum of 100ms for either bit to be set.\n *\n *      if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )\n *      {\n *          // xEventGroupWaitBits() returned because both bits were set.\n *      }\n *      else if( ( uxBits & BIT_0 ) != 0 )\n *      {\n *          // xEventGroupWaitBits() returned because just BIT_0 was set.\n *      }\n *      else if( ( uxBits & BIT_4 ) != 0 )\n *      {\n *          // xEventGroupWaitBits() returned because just BIT_4 was set.\n *      }\n *      else\n *      {\n *          // xEventGroupWaitBits() returned because xTicksToWait ticks passed\n *          // without either BIT_0 or BIT_4 becoming set.\n *      }\n * }\n * @endcode\n * \\defgroup xEventGroupWaitBits xEventGroupWaitBits\n * \\ingroup EventGroup\n */\nEventBits_t xEventGroupWaitBits( EventGroupHandle_t xEventGroup,\n                                 const EventBits_t uxBitsToWaitFor,\n                                 const BaseType_t xClearOnExit,\n                                 const BaseType_t xWaitForAllBits,\n                                 TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\n\n/**\n * event_groups.h\n * @code{c}\n *  EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear );\n * @endcode\n *\n * Clear bits within an event group.  This function cannot be called from an\n * interrupt.\n *\n * The configUSE_EVENT_GROUPS configuration constant must be set to 1 for xEventGroupClearBits()\n * to be available.\n *\n * @param xEventGroup The event group in which the bits are to be cleared.\n *\n * @param uxBitsToClear A bitwise value that indicates the bit or bits to clear\n * in the event group.  For example, to clear bit 3 only, set uxBitsToClear to\n * 0x08.  To clear bit 3 and bit 0 set uxBitsToClear to 0x09.\n *\n * @return The value of the event group before the specified bits were cleared.\n *\n * Example usage:\n * @code{c}\n * #define BIT_0 ( 1 << 0 )\n * #define BIT_4 ( 1 << 4 )\n *\n * void aFunction( EventGroupHandle_t xEventGroup )\n * {\n * EventBits_t uxBits;\n *\n *      // Clear bit 0 and bit 4 in xEventGroup.\n *      uxBits = xEventGroupClearBits(\n *                              xEventGroup,    // The event group being updated.\n *                              BIT_0 | BIT_4 );// The bits being cleared.\n *\n *      if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )\n *      {\n *          // Both bit 0 and bit 4 were set before xEventGroupClearBits() was\n *          // called.  Both will now be clear (not set).\n *      }\n *      else if( ( uxBits & BIT_0 ) != 0 )\n *      {\n *          // Bit 0 was set before xEventGroupClearBits() was called.  It will\n *          // now be clear.\n *      }\n *      else if( ( uxBits & BIT_4 ) != 0 )\n *      {\n *          // Bit 4 was set before xEventGroupClearBits() was called.  It will\n *          // now be clear.\n *      }\n *      else\n *      {\n *          // Neither bit 0 nor bit 4 were set in the first place.\n *      }\n * }\n * @endcode\n * \\defgroup xEventGroupClearBits xEventGroupClearBits\n * \\ingroup EventGroup\n */\nEventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup,\n                                  const EventBits_t uxBitsToClear ) PRIVILEGED_FUNCTION;\n\n/**\n * event_groups.h\n * @code{c}\n *  BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet );\n * @endcode\n *\n * A version of xEventGroupClearBits() that can be called from an interrupt.\n *\n * Setting bits in an event group is not a deterministic operation because there\n * are an unknown number of tasks that may be waiting for the bit or bits being\n * set.  FreeRTOS does not allow nondeterministic operations to be performed\n * while interrupts are disabled, so protects event groups that are accessed\n * from tasks by suspending the scheduler rather than disabling interrupts.  As\n * a result event groups cannot be accessed directly from an interrupt service\n * routine.  Therefore xEventGroupClearBitsFromISR() sends a message to the\n * timer task to have the clear operation performed in the context of the timer\n * task.\n *\n * @note If this function returns pdPASS then the timer task is ready to run\n * and a portYIELD_FROM_ISR(pdTRUE) should be executed to perform the needed\n * clear on the event group.  This behavior is different from\n * xEventGroupSetBitsFromISR because the parameter xHigherPriorityTaskWoken is\n * not present.\n *\n * @param xEventGroup The event group in which the bits are to be cleared.\n *\n * @param uxBitsToClear A bitwise value that indicates the bit or bits to clear.\n * For example, to clear bit 3 only, set uxBitsToClear to 0x08.  To clear bit 3\n * and bit 0 set uxBitsToClear to 0x09.\n *\n * @return If the request to execute the function was posted successfully then\n * pdPASS is returned, otherwise pdFALSE is returned.  pdFALSE will be returned\n * if the timer service queue was full.\n *\n * Example usage:\n * @code{c}\n * #define BIT_0 ( 1 << 0 )\n * #define BIT_4 ( 1 << 4 )\n *\n * // An event group which it is assumed has already been created by a call to\n * // xEventGroupCreate().\n * EventGroupHandle_t xEventGroup;\n *\n * void anInterruptHandler( void )\n * {\n *      // Clear bit 0 and bit 4 in xEventGroup.\n *      xResult = xEventGroupClearBitsFromISR(\n *                          xEventGroup,     // The event group being updated.\n *                          BIT_0 | BIT_4 ); // The bits being set.\n *\n *      if( xResult == pdPASS )\n *      {\n *          // The message was posted successfully.\n *          portYIELD_FROM_ISR(pdTRUE);\n *      }\n * }\n * @endcode\n * \\defgroup xEventGroupClearBitsFromISR xEventGroupClearBitsFromISR\n * \\ingroup EventGroup\n */\n#if ( configUSE_TRACE_FACILITY == 1 )\n    BaseType_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup,\n                                            const EventBits_t uxBitsToClear ) PRIVILEGED_FUNCTION;\n#else\n    #define xEventGroupClearBitsFromISR( xEventGroup, uxBitsToClear ) \\\n    xTimerPendFunctionCallFromISR( vEventGroupClearBitsCallback, ( void * ) ( xEventGroup ), ( uint32_t ) ( uxBitsToClear ), NULL )\n#endif\n\n/**\n * event_groups.h\n * @code{c}\n *  EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet );\n * @endcode\n *\n * Set bits within an event group.\n * This function cannot be called from an interrupt.  xEventGroupSetBitsFromISR()\n * is a version that can be called from an interrupt.\n *\n * Setting bits in an event group will automatically unblock tasks that are\n * blocked waiting for the bits.\n *\n * The configUSE_EVENT_GROUPS configuration constant must be set to 1 for xEventGroupSetBits()\n * to be available.\n *\n * @param xEventGroup The event group in which the bits are to be set.\n *\n * @param uxBitsToSet A bitwise value that indicates the bit or bits to set.\n * For example, to set bit 3 only, set uxBitsToSet to 0x08.  To set bit 3\n * and bit 0 set uxBitsToSet to 0x09.\n *\n * @return The value of the event group at the time the call to\n * xEventGroupSetBits() returns.  There are two reasons why the returned value\n * might have the bits specified by the uxBitsToSet parameter cleared.  First,\n * if setting a bit results in a task that was waiting for the bit leaving the\n * blocked state then it is possible the bit will be cleared automatically\n * (see the xClearBitOnExit parameter of xEventGroupWaitBits()).  Second, any\n * unblocked (or otherwise Ready state) task that has a priority above that of\n * the task that called xEventGroupSetBits() will execute and may change the\n * event group value before the call to xEventGroupSetBits() returns.\n *\n * Example usage:\n * @code{c}\n * #define BIT_0 ( 1 << 0 )\n * #define BIT_4 ( 1 << 4 )\n *\n * void aFunction( EventGroupHandle_t xEventGroup )\n * {\n * EventBits_t uxBits;\n *\n *      // Set bit 0 and bit 4 in xEventGroup.\n *      uxBits = xEventGroupSetBits(\n *                          xEventGroup,    // The event group being updated.\n *                          BIT_0 | BIT_4 );// The bits being set.\n *\n *      if( ( uxBits & ( BIT_0 | BIT_4 ) ) == ( BIT_0 | BIT_4 ) )\n *      {\n *          // Both bit 0 and bit 4 remained set when the function returned.\n *      }\n *      else if( ( uxBits & BIT_0 ) != 0 )\n *      {\n *          // Bit 0 remained set when the function returned, but bit 4 was\n *          // cleared.  It might be that bit 4 was cleared automatically as a\n *          // task that was waiting for bit 4 was removed from the Blocked\n *          // state.\n *      }\n *      else if( ( uxBits & BIT_4 ) != 0 )\n *      {\n *          // Bit 4 remained set when the function returned, but bit 0 was\n *          // cleared.  It might be that bit 0 was cleared automatically as a\n *          // task that was waiting for bit 0 was removed from the Blocked\n *          // state.\n *      }\n *      else\n *      {\n *          // Neither bit 0 nor bit 4 remained set.  It might be that a task\n *          // was waiting for both of the bits to be set, and the bits were\n *          // cleared as the task left the Blocked state.\n *      }\n * }\n * @endcode\n * \\defgroup xEventGroupSetBits xEventGroupSetBits\n * \\ingroup EventGroup\n */\nEventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup,\n                                const EventBits_t uxBitsToSet ) PRIVILEGED_FUNCTION;\n\n/**\n * event_groups.h\n * @code{c}\n *  BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken );\n * @endcode\n *\n * A version of xEventGroupSetBits() that can be called from an interrupt.\n *\n * Setting bits in an event group is not a deterministic operation because there\n * are an unknown number of tasks that may be waiting for the bit or bits being\n * set.  FreeRTOS does not allow nondeterministic operations to be performed in\n * interrupts or from critical sections.  Therefore xEventGroupSetBitsFromISR()\n * sends a message to the timer task to have the set operation performed in the\n * context of the timer task - where a scheduler lock is used in place of a\n * critical section.\n *\n * @param xEventGroup The event group in which the bits are to be set.\n *\n * @param uxBitsToSet A bitwise value that indicates the bit or bits to set.\n * For example, to set bit 3 only, set uxBitsToSet to 0x08.  To set bit 3\n * and bit 0 set uxBitsToSet to 0x09.\n *\n * @param pxHigherPriorityTaskWoken As mentioned above, calling this function\n * will result in a message being sent to the timer daemon task.  If the\n * priority of the timer daemon task is higher than the priority of the\n * currently running task (the task the interrupt interrupted) then\n * *pxHigherPriorityTaskWoken will be set to pdTRUE by\n * xEventGroupSetBitsFromISR(), indicating that a context switch should be\n * requested before the interrupt exits.  For that reason\n * *pxHigherPriorityTaskWoken must be initialised to pdFALSE.  See the\n * example code below.\n *\n * @return If the request to execute the function was posted successfully then\n * pdPASS is returned, otherwise pdFALSE is returned.  pdFALSE will be returned\n * if the timer service queue was full.\n *\n * Example usage:\n * @code{c}\n * #define BIT_0 ( 1 << 0 )\n * #define BIT_4 ( 1 << 4 )\n *\n * // An event group which it is assumed has already been created by a call to\n * // xEventGroupCreate().\n * EventGroupHandle_t xEventGroup;\n *\n * void anInterruptHandler( void )\n * {\n * BaseType_t xHigherPriorityTaskWoken, xResult;\n *\n *      // xHigherPriorityTaskWoken must be initialised to pdFALSE.\n *      xHigherPriorityTaskWoken = pdFALSE;\n *\n *      // Set bit 0 and bit 4 in xEventGroup.\n *      xResult = xEventGroupSetBitsFromISR(\n *                          xEventGroup,    // The event group being updated.\n *                          BIT_0 | BIT_4   // The bits being set.\n *                          &xHigherPriorityTaskWoken );\n *\n *      // Was the message posted successfully?\n *      if( xResult == pdPASS )\n *      {\n *          // If xHigherPriorityTaskWoken is now set to pdTRUE then a context\n *          // switch should be requested.  The macro used is port specific and\n *          // will be either portYIELD_FROM_ISR() or portEND_SWITCHING_ISR() -\n *          // refer to the documentation page for the port being used.\n *          portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\n *      }\n * }\n * @endcode\n * \\defgroup xEventGroupSetBitsFromISR xEventGroupSetBitsFromISR\n * \\ingroup EventGroup\n */\n#if ( configUSE_TRACE_FACILITY == 1 )\n    BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup,\n                                          const EventBits_t uxBitsToSet,\n                                          BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\n#else\n    #define xEventGroupSetBitsFromISR( xEventGroup, uxBitsToSet, pxHigherPriorityTaskWoken ) \\\n    xTimerPendFunctionCallFromISR( vEventGroupSetBitsCallback, ( void * ) ( xEventGroup ), ( uint32_t ) ( uxBitsToSet ), ( pxHigherPriorityTaskWoken ) )\n#endif\n\n/**\n * event_groups.h\n * @code{c}\n *  EventBits_t xEventGroupSync(    EventGroupHandle_t xEventGroup,\n *                                  const EventBits_t uxBitsToSet,\n *                                  const EventBits_t uxBitsToWaitFor,\n *                                  TickType_t xTicksToWait );\n * @endcode\n *\n * Atomically set bits within an event group, then wait for a combination of\n * bits to be set within the same event group.  This functionality is typically\n * used to synchronise multiple tasks, where each task has to wait for the other\n * tasks to reach a synchronisation point before proceeding.\n *\n * This function cannot be used from an interrupt.\n *\n * The function will return before its block time expires if the bits specified\n * by the uxBitsToWait parameter are set, or become set within that time.  In\n * this case all the bits specified by uxBitsToWait will be automatically\n * cleared before the function returns.\n *\n * The configUSE_EVENT_GROUPS configuration constant must be set to 1 for xEventGroupSync()\n * to be available.\n *\n * @param xEventGroup The event group in which the bits are being tested.  The\n * event group must have previously been created using a call to\n * xEventGroupCreate().\n *\n * @param uxBitsToSet The bits to set in the event group before determining\n * if, and possibly waiting for, all the bits specified by the uxBitsToWait\n * parameter are set.\n *\n * @param uxBitsToWaitFor A bitwise value that indicates the bit or bits to test\n * inside the event group.  For example, to wait for bit 0 and bit 2 set\n * uxBitsToWaitFor to 0x05.  To wait for bits 0 and bit 1 and bit 2 set\n * uxBitsToWaitFor to 0x07.  Etc.\n *\n * @param xTicksToWait The maximum amount of time (specified in 'ticks') to wait\n * for all of the bits specified by uxBitsToWaitFor to become set.\n *\n * @return The value of the event group at the time either the bits being waited\n * for became set, or the block time expired.  Test the return value to know\n * which bits were set.  If xEventGroupSync() returned because its timeout\n * expired then not all the bits being waited for will be set.  If\n * xEventGroupSync() returned because all the bits it was waiting for were\n * set then the returned value is the event group value before any bits were\n * automatically cleared.\n *\n * Example usage:\n * @code{c}\n * // Bits used by the three tasks.\n * #define TASK_0_BIT     ( 1 << 0 )\n * #define TASK_1_BIT     ( 1 << 1 )\n * #define TASK_2_BIT     ( 1 << 2 )\n *\n * #define ALL_SYNC_BITS ( TASK_0_BIT | TASK_1_BIT | TASK_2_BIT )\n *\n * // Use an event group to synchronise three tasks.  It is assumed this event\n * // group has already been created elsewhere.\n * EventGroupHandle_t xEventBits;\n *\n * void vTask0( void *pvParameters )\n * {\n * EventBits_t uxReturn;\n * TickType_t xTicksToWait = 100 / portTICK_PERIOD_MS;\n *\n *   for( ;; )\n *   {\n *      // Perform task functionality here.\n *\n *      // Set bit 0 in the event flag to note this task has reached the\n *      // sync point.  The other two tasks will set the other two bits defined\n *      // by ALL_SYNC_BITS.  All three tasks have reached the synchronisation\n *      // point when all the ALL_SYNC_BITS are set.  Wait a maximum of 100ms\n *      // for this to happen.\n *      uxReturn = xEventGroupSync( xEventBits, TASK_0_BIT, ALL_SYNC_BITS, xTicksToWait );\n *\n *      if( ( uxReturn & ALL_SYNC_BITS ) == ALL_SYNC_BITS )\n *      {\n *          // All three tasks reached the synchronisation point before the call\n *          // to xEventGroupSync() timed out.\n *      }\n *  }\n * }\n *\n * void vTask1( void *pvParameters )\n * {\n *   for( ;; )\n *   {\n *      // Perform task functionality here.\n *\n *      // Set bit 1 in the event flag to note this task has reached the\n *      // synchronisation point.  The other two tasks will set the other two\n *      // bits defined by ALL_SYNC_BITS.  All three tasks have reached the\n *      // synchronisation point when all the ALL_SYNC_BITS are set.  Wait\n *      // indefinitely for this to happen.\n *      xEventGroupSync( xEventBits, TASK_1_BIT, ALL_SYNC_BITS, portMAX_DELAY );\n *\n *      // xEventGroupSync() was called with an indefinite block time, so\n *      // this task will only reach here if the synchronisation was made by all\n *      // three tasks, so there is no need to test the return value.\n *   }\n * }\n *\n * void vTask2( void *pvParameters )\n * {\n *   for( ;; )\n *   {\n *      // Perform task functionality here.\n *\n *      // Set bit 2 in the event flag to note this task has reached the\n *      // synchronisation point.  The other two tasks will set the other two\n *      // bits defined by ALL_SYNC_BITS.  All three tasks have reached the\n *      // synchronisation point when all the ALL_SYNC_BITS are set.  Wait\n *      // indefinitely for this to happen.\n *      xEventGroupSync( xEventBits, TASK_2_BIT, ALL_SYNC_BITS, portMAX_DELAY );\n *\n *      // xEventGroupSync() was called with an indefinite block time, so\n *      // this task will only reach here if the synchronisation was made by all\n *      // three tasks, so there is no need to test the return value.\n *  }\n * }\n *\n * @endcode\n * \\defgroup xEventGroupSync xEventGroupSync\n * \\ingroup EventGroup\n */\nEventBits_t xEventGroupSync( EventGroupHandle_t xEventGroup,\n                             const EventBits_t uxBitsToSet,\n                             const EventBits_t uxBitsToWaitFor,\n                             TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\n\n\n/**\n * event_groups.h\n * @code{c}\n *  EventBits_t xEventGroupGetBits( EventGroupHandle_t xEventGroup );\n * @endcode\n *\n * Returns the current value of the bits in an event group.  This function\n * cannot be used from an interrupt.\n *\n * The configUSE_EVENT_GROUPS configuration constant must be set to 1 for xEventGroupGetBits()\n * to be available.\n *\n * @param xEventGroup The event group being queried.\n *\n * @return The event group bits at the time xEventGroupGetBits() was called.\n *\n * \\defgroup xEventGroupGetBits xEventGroupGetBits\n * \\ingroup EventGroup\n */\n#define xEventGroupGetBits( xEventGroup )    xEventGroupClearBits( ( xEventGroup ), 0 )\n\n/**\n * event_groups.h\n * @code{c}\n *  EventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup );\n * @endcode\n *\n * A version of xEventGroupGetBits() that can be called from an ISR.\n *\n * The configUSE_EVENT_GROUPS configuration constant must be set to 1 for xEventGroupGetBitsFromISR()\n * to be available.\n *\n * @param xEventGroup The event group being queried.\n *\n * @return The event group bits at the time xEventGroupGetBitsFromISR() was called.\n *\n * \\defgroup xEventGroupGetBitsFromISR xEventGroupGetBitsFromISR\n * \\ingroup EventGroup\n */\nEventBits_t xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup ) PRIVILEGED_FUNCTION;\n\n/**\n * event_groups.h\n * @code{c}\n *  void xEventGroupDelete( EventGroupHandle_t xEventGroup );\n * @endcode\n *\n * Delete an event group that was previously created by a call to\n * xEventGroupCreate().  Tasks that are blocked on the event group will be\n * unblocked and obtain 0 as the event group's value.\n *\n * The configUSE_EVENT_GROUPS configuration constant must be set to 1 for vEventGroupDelete()\n * to be available.\n *\n * @param xEventGroup The event group being deleted.\n */\nvoid vEventGroupDelete( EventGroupHandle_t xEventGroup ) PRIVILEGED_FUNCTION;\n\n/**\n * event_groups.h\n * @code{c}\n *  BaseType_t xEventGroupGetStaticBuffer( EventGroupHandle_t xEventGroup,\n *                                         StaticEventGroup_t ** ppxEventGroupBuffer );\n * @endcode\n *\n * Retrieve a pointer to a statically created event groups's data structure\n * buffer. It is the same buffer that is supplied at the time of creation.\n *\n * The configUSE_EVENT_GROUPS configuration constant must be set to 1 for xEventGroupGetStaticBuffer()\n * to be available.\n *\n * @param xEventGroup The event group for which to retrieve the buffer.\n *\n * @param ppxEventGroupBuffer Used to return a pointer to the event groups's\n * data structure buffer.\n *\n * @return pdTRUE if the buffer was retrieved, pdFALSE otherwise.\n */\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    BaseType_t xEventGroupGetStaticBuffer( EventGroupHandle_t xEventGroup,\n                                           StaticEventGroup_t ** ppxEventGroupBuffer ) PRIVILEGED_FUNCTION;\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n\n/* For internal use only. */\nvoid vEventGroupSetBitsCallback( void * pvEventGroup,\n                                 uint32_t ulBitsToSet ) PRIVILEGED_FUNCTION;\nvoid vEventGroupClearBitsCallback( void * pvEventGroup,\n                                   uint32_t ulBitsToClear ) PRIVILEGED_FUNCTION;\n\n\n#if ( configUSE_TRACE_FACILITY == 1 )\n    UBaseType_t uxEventGroupGetNumber( void * xEventGroup ) PRIVILEGED_FUNCTION;\n    void vEventGroupSetNumber( void * xEventGroup,\n                               UBaseType_t uxEventGroupNumber ) PRIVILEGED_FUNCTION;\n#endif\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n    }\n#endif\n/* *INDENT-ON* */\n\n#endif /* EVENT_GROUPS_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/list.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n/*\n * This is the list implementation used by the scheduler.  While it is tailored\n * heavily for the schedulers needs, it is also available for use by\n * application code.\n *\n * list_ts can only store pointers to list_item_ts.  Each ListItem_t contains a\n * numeric value (xItemValue).  Most of the time the lists are sorted in\n * ascending item value order.\n *\n * Lists are created already containing one list item.  The value of this\n * item is the maximum possible that can be stored, it is therefore always at\n * the end of the list and acts as a marker.  The list member pxHead always\n * points to this marker - even though it is at the tail of the list.  This\n * is because the tail contains a wrap back pointer to the true head of\n * the list.\n *\n * In addition to it's value, each list item contains a pointer to the next\n * item in the list (pxNext), a pointer to the list it is in (pxContainer)\n * and a pointer to back to the object that contains it.  These later two\n * pointers are included for efficiency of list manipulation.  There is\n * effectively a two way link between the object containing the list item and\n * the list item itself.\n *\n *\n * \\page ListIntroduction List Implementation\n * \\ingroup FreeRTOSIntro\n */\n\n\n#ifndef LIST_H\n#define LIST_H\n\n#ifndef INC_FREERTOS_H\n    #error \"FreeRTOS.h must be included before list.h\"\n#endif\n\n/*\n * The list structure members are modified from within interrupts, and therefore\n * by rights should be declared volatile.  However, they are only modified in a\n * functionally atomic way (within critical sections of with the scheduler\n * suspended) and are either passed by reference into a function or indexed via\n * a volatile variable.  Therefore, in all use cases tested so far, the volatile\n * qualifier can be omitted in order to provide a moderate performance\n * improvement without adversely affecting functional behaviour.  The assembly\n * instructions generated by the IAR, ARM and GCC compilers when the respective\n * compiler's options were set for maximum optimisation has been inspected and\n * deemed to be as intended.  That said, as compiler technology advances, and\n * especially if aggressive cross module optimisation is used (a use case that\n * has not been exercised to any great extend) then it is feasible that the\n * volatile qualifier will be needed for correct optimisation.  It is expected\n * that a compiler removing essential code because, without the volatile\n * qualifier on the list structure members and with aggressive cross module\n * optimisation, the compiler deemed the code unnecessary will result in\n * complete and obvious failure of the scheduler.  If this is ever experienced\n * then the volatile qualifier can be inserted in the relevant places within the\n * list structures by simply defining configLIST_VOLATILE to volatile in\n * FreeRTOSConfig.h (as per the example at the bottom of this comment block).\n * If configLIST_VOLATILE is not defined then the preprocessor directives below\n * will simply #define configLIST_VOLATILE away completely.\n *\n * To use volatile list structure members then add the following line to\n * FreeRTOSConfig.h (without the quotes):\n * \"#define configLIST_VOLATILE volatile\"\n */\n#ifndef configLIST_VOLATILE\n    #define configLIST_VOLATILE\n#endif /* configSUPPORT_CROSS_MODULE_OPTIMISATION */\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n    extern \"C\" {\n#endif\n/* *INDENT-ON* */\n\n/* Macros that can be used to place known values within the list structures,\n * then check that the known values do not get corrupted during the execution of\n * the application.   These may catch the list data structures being overwritten in\n * memory.  They will not catch data errors caused by incorrect configuration or\n * use of FreeRTOS.*/\n#if ( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 0 )\n    /* Define the macros to do nothing. */\n    #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE\n    #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE\n    #define listFIRST_LIST_INTEGRITY_CHECK_VALUE\n    #define listSECOND_LIST_INTEGRITY_CHECK_VALUE\n    #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )\n    #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )\n    #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList )\n    #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList )\n    #define listTEST_LIST_ITEM_INTEGRITY( pxItem )\n    #define listTEST_LIST_INTEGRITY( pxList )\n#else /* if ( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 0 ) */\n    /* Define macros that add new members into the list structures. */\n    #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE     TickType_t xListItemIntegrityValue1;\n    #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE    TickType_t xListItemIntegrityValue2;\n    #define listFIRST_LIST_INTEGRITY_CHECK_VALUE          TickType_t xListIntegrityValue1;\n    #define listSECOND_LIST_INTEGRITY_CHECK_VALUE         TickType_t xListIntegrityValue2;\n\n/* Define macros that set the new structure members to known values. */\n    #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )     ( pxItem )->xListItemIntegrityValue1 = pdINTEGRITY_CHECK_VALUE\n    #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )    ( pxItem )->xListItemIntegrityValue2 = pdINTEGRITY_CHECK_VALUE\n    #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList )              ( pxList )->xListIntegrityValue1 = pdINTEGRITY_CHECK_VALUE\n    #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList )              ( pxList )->xListIntegrityValue2 = pdINTEGRITY_CHECK_VALUE\n\n/* Define macros that will assert if one of the structure members does not\n * contain its expected value. */\n    #define listTEST_LIST_ITEM_INTEGRITY( pxItem )                      configASSERT( ( ( pxItem )->xListItemIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxItem )->xListItemIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) )\n    #define listTEST_LIST_INTEGRITY( pxList )                           configASSERT( ( ( pxList )->xListIntegrityValue1 == pdINTEGRITY_CHECK_VALUE ) && ( ( pxList )->xListIntegrityValue2 == pdINTEGRITY_CHECK_VALUE ) )\n#endif /* configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES */\n\n\n/*\n * Definition of the only type of object that a list can contain.\n */\nstruct xLIST;\nstruct xLIST_ITEM\n{\n    listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE           /**< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */\n    configLIST_VOLATILE TickType_t xItemValue;          /**< The value being listed.  In most cases this is used to sort the list in ascending order. */\n    struct xLIST_ITEM * configLIST_VOLATILE pxNext;     /**< Pointer to the next ListItem_t in the list. */\n    struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; /**< Pointer to the previous ListItem_t in the list. */\n    void * pvOwner;                                     /**< Pointer to the object (normally a TCB) that contains the list item.  There is therefore a two way link between the object containing the list item and the list item itself. */\n    struct xLIST * configLIST_VOLATILE pxContainer;     /**< Pointer to the list in which this list item is placed (if any). */\n    listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE          /**< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */\n};\ntypedef struct xLIST_ITEM ListItem_t;\n\n#if ( configUSE_MINI_LIST_ITEM == 1 )\n    struct xMINI_LIST_ITEM\n    {\n        listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /**< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */\n        configLIST_VOLATILE TickType_t xItemValue;\n        struct xLIST_ITEM * configLIST_VOLATILE pxNext;\n        struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;\n    };\n    typedef struct xMINI_LIST_ITEM MiniListItem_t;\n#else\n    typedef struct xLIST_ITEM      MiniListItem_t;\n#endif\n\n/*\n * Definition of the type of queue used by the scheduler.\n */\ntypedef struct xLIST\n{\n    listFIRST_LIST_INTEGRITY_CHECK_VALUE      /**< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */\n    configLIST_VOLATILE UBaseType_t uxNumberOfItems;\n    ListItem_t * configLIST_VOLATILE pxIndex; /**< Used to walk through the list.  Points to the last item returned by a call to listGET_OWNER_OF_NEXT_ENTRY (). */\n    MiniListItem_t xListEnd;                  /**< List item that contains the maximum possible item value meaning it is always at the end of the list and is therefore used as a marker. */\n    listSECOND_LIST_INTEGRITY_CHECK_VALUE     /**< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */\n} List_t;\n\n/*\n * Access macro to set the owner of a list item.  The owner of a list item\n * is the object (usually a TCB) that contains the list item.\n *\n * \\page listSET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER\n * \\ingroup LinkedList\n */\n#define listSET_LIST_ITEM_OWNER( pxListItem, pxOwner )    ( ( pxListItem )->pvOwner = ( void * ) ( pxOwner ) )\n\n/*\n * Access macro to get the owner of a list item.  The owner of a list item\n * is the object (usually a TCB) that contains the list item.\n *\n * \\page listGET_LIST_ITEM_OWNER listSET_LIST_ITEM_OWNER\n * \\ingroup LinkedList\n */\n#define listGET_LIST_ITEM_OWNER( pxListItem )             ( ( pxListItem )->pvOwner )\n\n/*\n * Access macro to set the value of the list item.  In most cases the value is\n * used to sort the list in ascending order.\n *\n * \\page listSET_LIST_ITEM_VALUE listSET_LIST_ITEM_VALUE\n * \\ingroup LinkedList\n */\n#define listSET_LIST_ITEM_VALUE( pxListItem, xValue )     ( ( pxListItem )->xItemValue = ( xValue ) )\n\n/*\n * Access macro to retrieve the value of the list item.  The value can\n * represent anything - for example the priority of a task, or the time at\n * which a task should be unblocked.\n *\n * \\page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE\n * \\ingroup LinkedList\n */\n#define listGET_LIST_ITEM_VALUE( pxListItem )             ( ( pxListItem )->xItemValue )\n\n/*\n * Access macro to retrieve the value of the list item at the head of a given\n * list.\n *\n * \\page listGET_LIST_ITEM_VALUE listGET_LIST_ITEM_VALUE\n * \\ingroup LinkedList\n */\n#define listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxList )        ( ( ( pxList )->xListEnd ).pxNext->xItemValue )\n\n/*\n * Return the list item at the head of the list.\n *\n * \\page listGET_HEAD_ENTRY listGET_HEAD_ENTRY\n * \\ingroup LinkedList\n */\n#define listGET_HEAD_ENTRY( pxList )                      ( ( ( pxList )->xListEnd ).pxNext )\n\n/*\n * Return the next list item.\n *\n * \\page listGET_NEXT listGET_NEXT\n * \\ingroup LinkedList\n */\n#define listGET_NEXT( pxListItem )                        ( ( pxListItem )->pxNext )\n\n/*\n * Return the list item that marks the end of the list\n *\n * \\page listGET_END_MARKER listGET_END_MARKER\n * \\ingroup LinkedList\n */\n#define listGET_END_MARKER( pxList )                      ( ( ListItem_t const * ) ( &( ( pxList )->xListEnd ) ) )\n\n/*\n * Access macro to determine if a list contains any items.  The macro will\n * only have the value true if the list is empty.\n *\n * \\page listLIST_IS_EMPTY listLIST_IS_EMPTY\n * \\ingroup LinkedList\n */\n#define listLIST_IS_EMPTY( pxList )                       ( ( ( pxList )->uxNumberOfItems == ( UBaseType_t ) 0 ) ? pdTRUE : pdFALSE )\n\n/*\n * Access macro to return the number of items in the list.\n */\n#define listCURRENT_LIST_LENGTH( pxList )                 ( ( pxList )->uxNumberOfItems )\n\n/*\n * Access function to obtain the owner of the next entry in a list.\n *\n * The list member pxIndex is used to walk through a list.  Calling\n * listGET_OWNER_OF_NEXT_ENTRY increments pxIndex to the next item in the list\n * and returns that entry's pxOwner parameter.  Using multiple calls to this\n * function it is therefore possible to move through every item contained in\n * a list.\n *\n * The pxOwner parameter of a list item is a pointer to the object that owns\n * the list item.  In the scheduler this is normally a task control block.\n * The pxOwner parameter effectively creates a two way link between the list\n * item and its owner.\n *\n * @param pxTCB pxTCB is set to the address of the owner of the next list item.\n * @param pxList The list from which the next item owner is to be returned.\n *\n * \\page listGET_OWNER_OF_NEXT_ENTRY listGET_OWNER_OF_NEXT_ENTRY\n * \\ingroup LinkedList\n */\n#if ( configNUMBER_OF_CORES == 1 )\n    #define listGET_OWNER_OF_NEXT_ENTRY( pxTCB, pxList )                                       \\\n    do {                                                                                       \\\n        List_t * const pxConstList = ( pxList );                                               \\\n        /* Increment the index to the next item and return the item, ensuring */               \\\n        /* we don't return the marker used at the end of the list.  */                         \\\n        ( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext;                           \\\n        if( ( void * ) ( pxConstList )->pxIndex == ( void * ) &( ( pxConstList )->xListEnd ) ) \\\n        {                                                                                      \\\n            ( pxConstList )->pxIndex = ( pxConstList )->xListEnd.pxNext;                       \\\n        }                                                                                      \\\n        ( pxTCB ) = ( pxConstList )->pxIndex->pvOwner;                                         \\\n    } while( 0 )\n#else /* #if ( configNUMBER_OF_CORES == 1 ) */\n\n/* This function is not required in SMP. FreeRTOS SMP scheduler doesn't use\n * pxIndex and it should always point to the xListEnd. Not defining this macro\n * here to prevent updating pxIndex.\n */\n#endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n\n/*\n * Version of uxListRemove() that does not return a value.  Provided as a slight\n * optimisation for xTaskIncrementTick() by being inline.\n *\n * Remove an item from a list.  The list item has a pointer to the list that\n * it is in, so only the list item need be passed into the function.\n *\n * @param uxListRemove The item to be removed.  The item will remove itself from\n * the list pointed to by it's pxContainer parameter.\n *\n * @return The number of items that remain in the list after the list item has\n * been removed.\n *\n * \\page listREMOVE_ITEM listREMOVE_ITEM\n * \\ingroup LinkedList\n */\n#define listREMOVE_ITEM( pxItemToRemove ) \\\n    do {                                  \\\n        /* The list item knows which list it is in.  Obtain the list from the list \\\n         * item. */                                                                                 \\\n        List_t * const pxList = ( pxItemToRemove )->pxContainer;                                    \\\n                                                                                                    \\\n        ( pxItemToRemove )->pxNext->pxPrevious = ( pxItemToRemove )->pxPrevious;                    \\\n        ( pxItemToRemove )->pxPrevious->pxNext = ( pxItemToRemove )->pxNext;                        \\\n        /* Make sure the index is left pointing to a valid item. */                                 \\\n        if( pxList->pxIndex == ( pxItemToRemove ) )                                                 \\\n        {                                                                                           \\\n            pxList->pxIndex = ( pxItemToRemove )->pxPrevious;                                       \\\n        }                                                                                           \\\n                                                                                                    \\\n        ( pxItemToRemove )->pxContainer = NULL;                                                     \\\n        ( ( pxList )->uxNumberOfItems ) = ( UBaseType_t ) ( ( ( pxList )->uxNumberOfItems ) - 1U ); \\\n    } while( 0 )\n\n/*\n * Inline version of vListInsertEnd() to provide slight optimisation for\n * xTaskIncrementTick().\n *\n * Insert a list item into a list.  The item will be inserted in a position\n * such that it will be the last item within the list returned by multiple\n * calls to listGET_OWNER_OF_NEXT_ENTRY.\n *\n * The list member pxIndex is used to walk through a list.  Calling\n * listGET_OWNER_OF_NEXT_ENTRY increments pxIndex to the next item in the list.\n * Placing an item in a list using vListInsertEnd effectively places the item\n * in the list position pointed to by pxIndex.  This means that every other\n * item within the list will be returned by listGET_OWNER_OF_NEXT_ENTRY before\n * the pxIndex parameter again points to the item being inserted.\n *\n * @param pxList The list into which the item is to be inserted.\n *\n * @param pxNewListItem The list item to be inserted into the list.\n *\n * \\page listINSERT_END listINSERT_END\n * \\ingroup LinkedList\n */\n#define listINSERT_END( pxList, pxNewListItem )           \\\n    do {                                                  \\\n        ListItem_t * const pxIndex = ( pxList )->pxIndex; \\\n                                                          \\\n        /* Only effective when configASSERT() is also defined, these tests may catch \\\n         * the list data structures being overwritten in memory.  They will not catch \\\n         * data errors caused by incorrect configuration or use of FreeRTOS. */ \\\n        listTEST_LIST_INTEGRITY( ( pxList ) );                                  \\\n        listTEST_LIST_ITEM_INTEGRITY( ( pxNewListItem ) );                      \\\n                                                                                \\\n        /* Insert a new list item into ( pxList ), but rather than sort the list, \\\n         * makes the new list item the last item to be removed by a call to \\\n         * listGET_OWNER_OF_NEXT_ENTRY(). */                                                        \\\n        ( pxNewListItem )->pxNext = pxIndex;                                                        \\\n        ( pxNewListItem )->pxPrevious = pxIndex->pxPrevious;                                        \\\n                                                                                                    \\\n        pxIndex->pxPrevious->pxNext = ( pxNewListItem );                                            \\\n        pxIndex->pxPrevious = ( pxNewListItem );                                                    \\\n                                                                                                    \\\n        /* Remember which list the item is in. */                                                   \\\n        ( pxNewListItem )->pxContainer = ( pxList );                                                \\\n                                                                                                    \\\n        ( ( pxList )->uxNumberOfItems ) = ( UBaseType_t ) ( ( ( pxList )->uxNumberOfItems ) + 1U ); \\\n    } while( 0 )\n\n/*\n * Access function to obtain the owner of the first entry in a list.  Lists\n * are normally sorted in ascending item value order.\n *\n * This function returns the pxOwner member of the first item in the list.\n * The pxOwner parameter of a list item is a pointer to the object that owns\n * the list item.  In the scheduler this is normally a task control block.\n * The pxOwner parameter effectively creates a two way link between the list\n * item and its owner.\n *\n * @param pxList The list from which the owner of the head item is to be\n * returned.\n *\n * \\page listGET_OWNER_OF_HEAD_ENTRY listGET_OWNER_OF_HEAD_ENTRY\n * \\ingroup LinkedList\n */\n#define listGET_OWNER_OF_HEAD_ENTRY( pxList )            ( ( &( ( pxList )->xListEnd ) )->pxNext->pvOwner )\n\n/*\n * Check to see if a list item is within a list.  The list item maintains a\n * \"container\" pointer that points to the list it is in.  All this macro does\n * is check to see if the container and the list match.\n *\n * @param pxList The list we want to know if the list item is within.\n * @param pxListItem The list item we want to know if is in the list.\n * @return pdTRUE if the list item is in the list, otherwise pdFALSE.\n */\n#define listIS_CONTAINED_WITHIN( pxList, pxListItem )    ( ( ( pxListItem )->pxContainer == ( pxList ) ) ? ( pdTRUE ) : ( pdFALSE ) )\n\n/*\n * Return the list a list item is contained within (referenced from).\n *\n * @param pxListItem The list item being queried.\n * @return A pointer to the List_t object that references the pxListItem\n */\n#define listLIST_ITEM_CONTAINER( pxListItem )            ( ( pxListItem )->pxContainer )\n\n/*\n * This provides a crude means of knowing if a list has been initialised, as\n * pxList->xListEnd.xItemValue is set to portMAX_DELAY by the vListInitialise()\n * function.\n */\n#define listLIST_IS_INITIALISED( pxList )                ( ( pxList )->xListEnd.xItemValue == portMAX_DELAY )\n\n/*\n * Must be called before a list is used!  This initialises all the members\n * of the list structure and inserts the xListEnd item into the list as a\n * marker to the back of the list.\n *\n * @param pxList Pointer to the list being initialised.\n *\n * \\page vListInitialise vListInitialise\n * \\ingroup LinkedList\n */\nvoid vListInitialise( List_t * const pxList ) PRIVILEGED_FUNCTION;\n\n/*\n * Must be called before a list item is used.  This sets the list container to\n * null so the item does not think that it is already contained in a list.\n *\n * @param pxItem Pointer to the list item being initialised.\n *\n * \\page vListInitialiseItem vListInitialiseItem\n * \\ingroup LinkedList\n */\nvoid vListInitialiseItem( ListItem_t * const pxItem ) PRIVILEGED_FUNCTION;\n\n/*\n * Insert a list item into a list.  The item will be inserted into the list in\n * a position determined by its item value (ascending item value order).\n *\n * @param pxList The list into which the item is to be inserted.\n *\n * @param pxNewListItem The item that is to be placed in the list.\n *\n * \\page vListInsert vListInsert\n * \\ingroup LinkedList\n */\nvoid vListInsert( List_t * const pxList,\n                  ListItem_t * const pxNewListItem ) PRIVILEGED_FUNCTION;\n\n/*\n * Insert a list item into a list.  The item will be inserted in a position\n * such that it will be the last item within the list returned by multiple\n * calls to listGET_OWNER_OF_NEXT_ENTRY.\n *\n * The list member pxIndex is used to walk through a list.  Calling\n * listGET_OWNER_OF_NEXT_ENTRY increments pxIndex to the next item in the list.\n * Placing an item in a list using vListInsertEnd effectively places the item\n * in the list position pointed to by pxIndex.  This means that every other\n * item within the list will be returned by listGET_OWNER_OF_NEXT_ENTRY before\n * the pxIndex parameter again points to the item being inserted.\n *\n * @param pxList The list into which the item is to be inserted.\n *\n * @param pxNewListItem The list item to be inserted into the list.\n *\n * \\page vListInsertEnd vListInsertEnd\n * \\ingroup LinkedList\n */\nvoid vListInsertEnd( List_t * const pxList,\n                     ListItem_t * const pxNewListItem ) PRIVILEGED_FUNCTION;\n\n/*\n * Remove an item from a list.  The list item has a pointer to the list that\n * it is in, so only the list item need be passed into the function.\n *\n * @param uxListRemove The item to be removed.  The item will remove itself from\n * the list pointed to by it's pxContainer parameter.\n *\n * @return The number of items that remain in the list after the list item has\n * been removed.\n *\n * \\page uxListRemove uxListRemove\n * \\ingroup LinkedList\n */\nUBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ) PRIVILEGED_FUNCTION;\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n    }\n#endif\n/* *INDENT-ON* */\n\n#endif /* ifndef LIST_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/message_buffer.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n\n/*\n * Message buffers build functionality on top of FreeRTOS stream buffers.\n * Whereas stream buffers are used to send a continuous stream of data from one\n * task or interrupt to another, message buffers are used to send variable\n * length discrete messages from one task or interrupt to another.  Their\n * implementation is light weight, making them particularly suited for interrupt\n * to task and core to core communication scenarios.\n *\n * ***NOTE***:  Uniquely among FreeRTOS objects, the stream buffer\n * implementation (so also the message buffer implementation, as message buffers\n * are built on top of stream buffers) assumes there is only one task or\n * interrupt that will write to the buffer (the writer), and only one task or\n * interrupt that will read from the buffer (the reader).  It is safe for the\n * writer and reader to be different tasks or interrupts, but, unlike other\n * FreeRTOS objects, it is not safe to have multiple different writers or\n * multiple different readers.  If there are to be multiple different writers\n * then the application writer must place each call to a writing API function\n * (such as xMessageBufferSend()) inside a critical section and set the send\n * block time to 0.  Likewise, if there are to be multiple different readers\n * then the application writer must place each call to a reading API function\n * (such as xMessageBufferRead()) inside a critical section and set the receive\n * timeout to 0.\n *\n * Message buffers hold variable length messages.  To enable that, when a\n * message is written to the message buffer an additional sizeof( size_t ) bytes\n * are also written to store the message's length (that happens internally, with\n * the API function).  sizeof( size_t ) is typically 4 bytes on a 32-bit\n * architecture, so writing a 10 byte message to a message buffer on a 32-bit\n * architecture will actually reduce the available space in the message buffer\n * by 14 bytes (10 byte are used by the message, and 4 bytes to hold the length\n * of the message).\n */\n\n#ifndef FREERTOS_MESSAGE_BUFFER_H\n#define FREERTOS_MESSAGE_BUFFER_H\n\n#ifndef INC_FREERTOS_H\n    #error \"include FreeRTOS.h must appear in source files before include message_buffer.h\"\n#endif\n\n/* Message buffers are built onto of stream buffers. */\n#include \"stream_buffer.h\"\n\n/* *INDENT-OFF* */\n#if defined( __cplusplus )\n    extern \"C\" {\n#endif\n/* *INDENT-ON* */\n\n/**\n * Type by which message buffers are referenced.  For example, a call to\n * xMessageBufferCreate() returns an MessageBufferHandle_t variable that can\n * then be used as a parameter to xMessageBufferSend(), xMessageBufferReceive(),\n * etc. Message buffer is essentially built as a stream buffer hence its handle\n * is also set to same type as a stream buffer handle.\n */\ntypedef StreamBufferHandle_t MessageBufferHandle_t;\n\n/*-----------------------------------------------------------*/\n\n/**\n * message_buffer.h\n *\n * @code{c}\n * MessageBufferHandle_t xMessageBufferCreate( size_t xBufferSizeBytes );\n * @endcode\n *\n * Creates a new message buffer using dynamically allocated memory.  See\n * xMessageBufferCreateStatic() for a version that uses statically allocated\n * memory (memory that is allocated at compile time).\n *\n * configSUPPORT_DYNAMIC_ALLOCATION must be set to 1 or left undefined in\n * FreeRTOSConfig.h for xMessageBufferCreate() to be available.\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xMessageBufferCreate() to be available.\n *\n * @param xBufferSizeBytes The total number of bytes (not messages) the message\n * buffer will be able to hold at any one time.  When a message is written to\n * the message buffer an additional sizeof( size_t ) bytes are also written to\n * store the message's length.  sizeof( size_t ) is typically 4 bytes on a\n * 32-bit architecture, so on most 32-bit architectures a 10 byte message will\n * take up 14 bytes of message buffer space.\n *\n * @param pxSendCompletedCallback Callback invoked when a send operation to the\n * message buffer is complete. If the parameter is NULL or xMessageBufferCreate()\n * is called without the parameter, then it will use the default implementation\n * provided by sbSEND_COMPLETED macro. To enable the callback,\n * configUSE_SB_COMPLETED_CALLBACK must be set to 1 in FreeRTOSConfig.h.\n *\n * @param pxReceiveCompletedCallback Callback invoked when a receive operation from\n * the message buffer is complete. If the parameter is NULL or xMessageBufferCreate()\n * is called without the parameter, it will use the default implementation provided\n * by sbRECEIVE_COMPLETED macro. To enable the callback,\n * configUSE_SB_COMPLETED_CALLBACK must be set to 1 in FreeRTOSConfig.h.\n *\n * @return If NULL is returned, then the message buffer cannot be created\n * because there is insufficient heap memory available for FreeRTOS to allocate\n * the message buffer data structures and storage area.  A non-NULL value being\n * returned indicates that the message buffer has been created successfully -\n * the returned value should be stored as the handle to the created message\n * buffer.\n *\n * Example use:\n * @code{c}\n *\n * void vAFunction( void )\n * {\n * MessageBufferHandle_t xMessageBuffer;\n * const size_t xMessageBufferSizeBytes = 100;\n *\n *  // Create a message buffer that can hold 100 bytes.  The memory used to hold\n *  // both the message buffer structure and the messages themselves is allocated\n *  // dynamically.  Each message added to the buffer consumes an additional 4\n *  // bytes which are used to hold the length of the message.\n *  xMessageBuffer = xMessageBufferCreate( xMessageBufferSizeBytes );\n *\n *  if( xMessageBuffer == NULL )\n *  {\n *      // There was not enough heap memory space available to create the\n *      // message buffer.\n *  }\n *  else\n *  {\n *      // The message buffer was created successfully and can now be used.\n *  }\n *\n * @endcode\n * \\defgroup xMessageBufferCreate xMessageBufferCreate\n * \\ingroup MessageBufferManagement\n */\n#define xMessageBufferCreate( xBufferSizeBytes ) \\\n    xStreamBufferGenericCreate( ( xBufferSizeBytes ), ( size_t ) 0, sbTYPE_MESSAGE_BUFFER, NULL, NULL )\n\n#if ( configUSE_SB_COMPLETED_CALLBACK == 1 )\n    #define xMessageBufferCreateWithCallback( xBufferSizeBytes, pxSendCompletedCallback, pxReceiveCompletedCallback ) \\\n    xStreamBufferGenericCreate( ( xBufferSizeBytes ), ( size_t ) 0, sbTYPE_MESSAGE_BUFFER, ( pxSendCompletedCallback ), ( pxReceiveCompletedCallback ) )\n#endif\n\n/**\n * message_buffer.h\n *\n * @code{c}\n * MessageBufferHandle_t xMessageBufferCreateStatic( size_t xBufferSizeBytes,\n *                                                   uint8_t *pucMessageBufferStorageArea,\n *                                                   StaticMessageBuffer_t *pxStaticMessageBuffer );\n * @endcode\n * Creates a new message buffer using statically allocated memory.  See\n * xMessageBufferCreate() for a version that uses dynamically allocated memory.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xMessageBufferCreateStatic() to be available.\n *\n * @param xBufferSizeBytes The size, in bytes, of the buffer pointed to by the\n * pucMessageBufferStorageArea parameter.  When a message is written to the\n * message buffer an additional sizeof( size_t ) bytes are also written to store\n * the message's length.  sizeof( size_t ) is typically 4 bytes on a 32-bit\n * architecture, so on most 32-bit architecture a 10 byte message will take up\n * 14 bytes of message buffer space.  The maximum number of bytes that can be\n * stored in the message buffer is actually (xBufferSizeBytes - 1).\n *\n * @param pucMessageBufferStorageArea Must point to a uint8_t array that is at\n * least xBufferSizeBytes big.  This is the array to which messages are\n * copied when they are written to the message buffer.\n *\n * @param pxStaticMessageBuffer Must point to a variable of type\n * StaticMessageBuffer_t, which will be used to hold the message buffer's data\n * structure.\n *\n * @param pxSendCompletedCallback Callback invoked when a new message is sent to the message buffer.\n * If the parameter is NULL or xMessageBufferCreate() is called without the parameter, then it will use the default\n * implementation provided by sbSEND_COMPLETED macro. To enable the callback,\n * configUSE_SB_COMPLETED_CALLBACK must be set to 1 in FreeRTOSConfig.h.\n *\n * @param pxReceiveCompletedCallback Callback invoked when a message is read from a\n * message buffer. If the parameter is NULL or xMessageBufferCreate() is called without the parameter, it will\n * use the default implementation provided by sbRECEIVE_COMPLETED macro. To enable the callback,\n * configUSE_SB_COMPLETED_CALLBACK must be set to 1 in FreeRTOSConfig.h.\n *\n * @return If the message buffer is created successfully then a handle to the\n * created message buffer is returned. If either pucMessageBufferStorageArea or\n * pxStaticmessageBuffer are NULL then NULL is returned.\n *\n * Example use:\n * @code{c}\n *\n * // Used to dimension the array used to hold the messages.  The available space\n * // will actually be one less than this, so 999.\n #define STORAGE_SIZE_BYTES 1000\n *\n * // Defines the memory that will actually hold the messages within the message\n * // buffer.\n * static uint8_t ucStorageBuffer[ STORAGE_SIZE_BYTES ];\n *\n * // The variable used to hold the message buffer structure.\n * StaticMessageBuffer_t xMessageBufferStruct;\n *\n * void MyFunction( void )\n * {\n * MessageBufferHandle_t xMessageBuffer;\n *\n *  xMessageBuffer = xMessageBufferCreateStatic( sizeof( ucStorageBuffer ),\n *                                               ucStorageBuffer,\n *                                               &xMessageBufferStruct );\n *\n *  // As neither the pucMessageBufferStorageArea or pxStaticMessageBuffer\n *  // parameters were NULL, xMessageBuffer will not be NULL, and can be used to\n *  // reference the created message buffer in other message buffer API calls.\n *\n *  // Other code that uses the message buffer can go here.\n * }\n *\n * @endcode\n * \\defgroup xMessageBufferCreateStatic xMessageBufferCreateStatic\n * \\ingroup MessageBufferManagement\n */\n#define xMessageBufferCreateStatic( xBufferSizeBytes, pucMessageBufferStorageArea, pxStaticMessageBuffer ) \\\n    xStreamBufferGenericCreateStatic( ( xBufferSizeBytes ), 0, sbTYPE_MESSAGE_BUFFER, ( pucMessageBufferStorageArea ), ( pxStaticMessageBuffer ), NULL, NULL )\n\n#if ( configUSE_SB_COMPLETED_CALLBACK == 1 )\n    #define xMessageBufferCreateStaticWithCallback( xBufferSizeBytes, pucMessageBufferStorageArea, pxStaticMessageBuffer, pxSendCompletedCallback, pxReceiveCompletedCallback ) \\\n    xStreamBufferGenericCreateStatic( ( xBufferSizeBytes ), 0, sbTYPE_MESSAGE_BUFFER, ( pucMessageBufferStorageArea ), ( pxStaticMessageBuffer ), ( pxSendCompletedCallback ), ( pxReceiveCompletedCallback ) )\n#endif\n\n/**\n * message_buffer.h\n *\n * @code{c}\n * BaseType_t xMessageBufferGetStaticBuffers( MessageBufferHandle_t xMessageBuffer,\n *                                            uint8_t ** ppucMessageBufferStorageArea,\n *                                            StaticMessageBuffer_t ** ppxStaticMessageBuffer );\n * @endcode\n *\n * Retrieve pointers to a statically created message buffer's data structure\n * buffer and storage area buffer. These are the same buffers that are supplied\n * at the time of creation.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xMessageBufferGetStaticBuffers() to be available.\n *\n * @param xMessageBuffer The message buffer for which to retrieve the buffers.\n *\n * @param ppucMessageBufferStorageArea Used to return a pointer to the\n * message buffer's storage area buffer.\n *\n * @param ppxStaticMessageBuffer Used to return a pointer to the message\n * buffer's data structure buffer.\n *\n * @return pdTRUE if buffers were retrieved, pdFALSE otherwise..\n *\n * \\defgroup xMessageBufferGetStaticBuffers xMessageBufferGetStaticBuffers\n * \\ingroup MessageBufferManagement\n */\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    #define xMessageBufferGetStaticBuffers( xMessageBuffer, ppucMessageBufferStorageArea, ppxStaticMessageBuffer ) \\\n    xStreamBufferGetStaticBuffers( ( xMessageBuffer ), ( ppucMessageBufferStorageArea ), ( ppxStaticMessageBuffer ) )\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n\n/**\n * message_buffer.h\n *\n * @code{c}\n * size_t xMessageBufferSend( MessageBufferHandle_t xMessageBuffer,\n *                            const void *pvTxData,\n *                            size_t xDataLengthBytes,\n *                            TickType_t xTicksToWait );\n * @endcode\n *\n * Sends a discrete message to the message buffer.  The message can be any\n * length that fits within the buffer's free space, and is copied into the\n * buffer.\n *\n * ***NOTE***:  Uniquely among FreeRTOS objects, the stream buffer\n * implementation (so also the message buffer implementation, as message buffers\n * are built on top of stream buffers) assumes there is only one task or\n * interrupt that will write to the buffer (the writer), and only one task or\n * interrupt that will read from the buffer (the reader).  It is safe for the\n * writer and reader to be different tasks or interrupts, but, unlike other\n * FreeRTOS objects, it is not safe to have multiple different writers or\n * multiple different readers.  If there are to be multiple different writers\n * then the application writer must place each call to a writing API function\n * (such as xMessageBufferSend()) inside a critical section and set the send\n * block time to 0.  Likewise, if there are to be multiple different readers\n * then the application writer must place each call to a reading API function\n * (such as xMessageBufferRead()) inside a critical section and set the receive\n * block time to 0.\n *\n * Use xMessageBufferSend() to write to a message buffer from a task.  Use\n * xMessageBufferSendFromISR() to write to a message buffer from an interrupt\n * service routine (ISR).\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xMessageBufferSend() to be available.\n *\n * @param xMessageBuffer The handle of the message buffer to which a message is\n * being sent.\n *\n * @param pvTxData A pointer to the message that is to be copied into the\n * message buffer.\n *\n * @param xDataLengthBytes The length of the message.  That is, the number of\n * bytes to copy from pvTxData into the message buffer.  When a message is\n * written to the message buffer an additional sizeof( size_t ) bytes are also\n * written to store the message's length.  sizeof( size_t ) is typically 4 bytes\n * on a 32-bit architecture, so on most 32-bit architecture setting\n * xDataLengthBytes to 20 will reduce the free space in the message buffer by 24\n * bytes (20 bytes of message data and 4 bytes to hold the message length).\n *\n * @param xTicksToWait The maximum amount of time the calling task should remain\n * in the Blocked state to wait for enough space to become available in the\n * message buffer, should the message buffer have insufficient space when\n * xMessageBufferSend() is called.  The calling task will never block if\n * xTicksToWait is zero.  The block time is specified in tick periods, so the\n * absolute time it represents is dependent on the tick frequency.  The macro\n * pdMS_TO_TICKS() can be used to convert a time specified in milliseconds into\n * a time specified in ticks.  Setting xTicksToWait to portMAX_DELAY will cause\n * the task to wait indefinitely (without timing out), provided\n * INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h.  Tasks do not use any\n * CPU time when they are in the Blocked state.\n *\n * @return The number of bytes written to the message buffer.  If the call to\n * xMessageBufferSend() times out before there was enough space to write the\n * message into the message buffer then zero is returned.  If the call did not\n * time out then xDataLengthBytes is returned.\n *\n * Example use:\n * @code{c}\n * void vAFunction( MessageBufferHandle_t xMessageBuffer )\n * {\n * size_t xBytesSent;\n * uint8_t ucArrayToSend[] = { 0, 1, 2, 3 };\n * char *pcStringToSend = \"String to send\";\n * const TickType_t x100ms = pdMS_TO_TICKS( 100 );\n *\n *  // Send an array to the message buffer, blocking for a maximum of 100ms to\n *  // wait for enough space to be available in the message buffer.\n *  xBytesSent = xMessageBufferSend( xMessageBuffer, ( void * ) ucArrayToSend, sizeof( ucArrayToSend ), x100ms );\n *\n *  if( xBytesSent != sizeof( ucArrayToSend ) )\n *  {\n *      // The call to xMessageBufferSend() times out before there was enough\n *      // space in the buffer for the data to be written.\n *  }\n *\n *  // Send the string to the message buffer.  Return immediately if there is\n *  // not enough space in the buffer.\n *  xBytesSent = xMessageBufferSend( xMessageBuffer, ( void * ) pcStringToSend, strlen( pcStringToSend ), 0 );\n *\n *  if( xBytesSent != strlen( pcStringToSend ) )\n *  {\n *      // The string could not be added to the message buffer because there was\n *      // not enough free space in the buffer.\n *  }\n * }\n * @endcode\n * \\defgroup xMessageBufferSend xMessageBufferSend\n * \\ingroup MessageBufferManagement\n */\n#define xMessageBufferSend( xMessageBuffer, pvTxData, xDataLengthBytes, xTicksToWait ) \\\n    xStreamBufferSend( ( xMessageBuffer ), ( pvTxData ), ( xDataLengthBytes ), ( xTicksToWait ) )\n\n/**\n * message_buffer.h\n *\n * @code{c}\n * size_t xMessageBufferSendFromISR( MessageBufferHandle_t xMessageBuffer,\n *                                   const void *pvTxData,\n *                                   size_t xDataLengthBytes,\n *                                   BaseType_t *pxHigherPriorityTaskWoken );\n * @endcode\n *\n * Interrupt safe version of the API function that sends a discrete message to\n * the message buffer.  The message can be any length that fits within the\n * buffer's free space, and is copied into the buffer.\n *\n * ***NOTE***:  Uniquely among FreeRTOS objects, the stream buffer\n * implementation (so also the message buffer implementation, as message buffers\n * are built on top of stream buffers) assumes there is only one task or\n * interrupt that will write to the buffer (the writer), and only one task or\n * interrupt that will read from the buffer (the reader).  It is safe for the\n * writer and reader to be different tasks or interrupts, but, unlike other\n * FreeRTOS objects, it is not safe to have multiple different writers or\n * multiple different readers.  If there are to be multiple different writers\n * then the application writer must place each call to a writing API function\n * (such as xMessageBufferSend()) inside a critical section and set the send\n * block time to 0.  Likewise, if there are to be multiple different readers\n * then the application writer must place each call to a reading API function\n * (such as xMessageBufferRead()) inside a critical section and set the receive\n * block time to 0.\n *\n * Use xMessageBufferSend() to write to a message buffer from a task.  Use\n * xMessageBufferSendFromISR() to write to a message buffer from an interrupt\n * service routine (ISR).\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xMessageBufferSendFromISR() to be available.\n *\n * @param xMessageBuffer The handle of the message buffer to which a message is\n * being sent.\n *\n * @param pvTxData A pointer to the message that is to be copied into the\n * message buffer.\n *\n * @param xDataLengthBytes The length of the message.  That is, the number of\n * bytes to copy from pvTxData into the message buffer.  When a message is\n * written to the message buffer an additional sizeof( size_t ) bytes are also\n * written to store the message's length.  sizeof( size_t ) is typically 4 bytes\n * on a 32-bit architecture, so on most 32-bit architecture setting\n * xDataLengthBytes to 20 will reduce the free space in the message buffer by 24\n * bytes (20 bytes of message data and 4 bytes to hold the message length).\n *\n * @param pxHigherPriorityTaskWoken  It is possible that a message buffer will\n * have a task blocked on it waiting for data.  Calling\n * xMessageBufferSendFromISR() can make data available, and so cause a task that\n * was waiting for data to leave the Blocked state.  If calling\n * xMessageBufferSendFromISR() causes a task to leave the Blocked state, and the\n * unblocked task has a priority higher than the currently executing task (the\n * task that was interrupted), then, internally, xMessageBufferSendFromISR()\n * will set *pxHigherPriorityTaskWoken to pdTRUE.  If\n * xMessageBufferSendFromISR() sets this value to pdTRUE, then normally a\n * context switch should be performed before the interrupt is exited.  This will\n * ensure that the interrupt returns directly to the highest priority Ready\n * state task.  *pxHigherPriorityTaskWoken should be set to pdFALSE before it\n * is passed into the function.  See the code example below for an example.\n *\n * @return The number of bytes actually written to the message buffer.  If the\n * message buffer didn't have enough free space for the message to be stored\n * then 0 is returned, otherwise xDataLengthBytes is returned.\n *\n * Example use:\n * @code{c}\n * // A message buffer that has already been created.\n * MessageBufferHandle_t xMessageBuffer;\n *\n * void vAnInterruptServiceRoutine( void )\n * {\n * size_t xBytesSent;\n * char *pcStringToSend = \"String to send\";\n * BaseType_t xHigherPriorityTaskWoken = pdFALSE; // Initialised to pdFALSE.\n *\n *  // Attempt to send the string to the message buffer.\n *  xBytesSent = xMessageBufferSendFromISR( xMessageBuffer,\n *                                          ( void * ) pcStringToSend,\n *                                          strlen( pcStringToSend ),\n *                                          &xHigherPriorityTaskWoken );\n *\n *  if( xBytesSent != strlen( pcStringToSend ) )\n *  {\n *      // The string could not be added to the message buffer because there was\n *      // not enough free space in the buffer.\n *  }\n *\n *  // If xHigherPriorityTaskWoken was set to pdTRUE inside\n *  // xMessageBufferSendFromISR() then a task that has a priority above the\n *  // priority of the currently executing task was unblocked and a context\n *  // switch should be performed to ensure the ISR returns to the unblocked\n *  // task.  In most FreeRTOS ports this is done by simply passing\n *  // xHigherPriorityTaskWoken into portYIELD_FROM_ISR(), which will test the\n *  // variables value, and perform the context switch if necessary.  Check the\n *  // documentation for the port in use for port specific instructions.\n *  portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\n * }\n * @endcode\n * \\defgroup xMessageBufferSendFromISR xMessageBufferSendFromISR\n * \\ingroup MessageBufferManagement\n */\n#define xMessageBufferSendFromISR( xMessageBuffer, pvTxData, xDataLengthBytes, pxHigherPriorityTaskWoken ) \\\n    xStreamBufferSendFromISR( ( xMessageBuffer ), ( pvTxData ), ( xDataLengthBytes ), ( pxHigherPriorityTaskWoken ) )\n\n/**\n * message_buffer.h\n *\n * @code{c}\n * size_t xMessageBufferReceive( MessageBufferHandle_t xMessageBuffer,\n *                               void *pvRxData,\n *                               size_t xBufferLengthBytes,\n *                               TickType_t xTicksToWait );\n * @endcode\n *\n * Receives a discrete message from a message buffer.  Messages can be of\n * variable length and are copied out of the buffer.\n *\n * ***NOTE***:  Uniquely among FreeRTOS objects, the stream buffer\n * implementation (so also the message buffer implementation, as message buffers\n * are built on top of stream buffers) assumes there is only one task or\n * interrupt that will write to the buffer (the writer), and only one task or\n * interrupt that will read from the buffer (the reader).  It is safe for the\n * writer and reader to be different tasks or interrupts, but, unlike other\n * FreeRTOS objects, it is not safe to have multiple different writers or\n * multiple different readers.  If there are to be multiple different writers\n * then the application writer must place each call to a writing API function\n * (such as xMessageBufferSend()) inside a critical section and set the send\n * block time to 0.  Likewise, if there are to be multiple different readers\n * then the application writer must place each call to a reading API function\n * (such as xMessageBufferRead()) inside a critical section and set the receive\n * block time to 0.\n *\n * Use xMessageBufferReceive() to read from a message buffer from a task.  Use\n * xMessageBufferReceiveFromISR() to read from a message buffer from an\n * interrupt service routine (ISR).\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xMessageBufferReceive() to be available.\n *\n * @param xMessageBuffer The handle of the message buffer from which a message\n * is being received.\n *\n * @param pvRxData A pointer to the buffer into which the received message is\n * to be copied.\n *\n * @param xBufferLengthBytes The length of the buffer pointed to by the pvRxData\n * parameter.  This sets the maximum length of the message that can be received.\n * If xBufferLengthBytes is too small to hold the next message then the message\n * will be left in the message buffer and 0 will be returned.\n *\n * @param xTicksToWait The maximum amount of time the task should remain in the\n * Blocked state to wait for a message, should the message buffer be empty.\n * xMessageBufferReceive() will return immediately if xTicksToWait is zero and\n * the message buffer is empty.  The block time is specified in tick periods, so\n * the absolute time it represents is dependent on the tick frequency.  The\n * macro pdMS_TO_TICKS() can be used to convert a time specified in milliseconds\n * into a time specified in ticks.  Setting xTicksToWait to portMAX_DELAY will\n * cause the task to wait indefinitely (without timing out), provided\n * INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h.  Tasks do not use any\n * CPU time when they are in the Blocked state.\n *\n * @return The length, in bytes, of the message read from the message buffer, if\n * any.  If xMessageBufferReceive() times out before a message became available\n * then zero is returned.  If the length of the message is greater than\n * xBufferLengthBytes then the message will be left in the message buffer and\n * zero is returned.\n *\n * Example use:\n * @code{c}\n * void vAFunction( MessageBuffer_t xMessageBuffer )\n * {\n * uint8_t ucRxData[ 20 ];\n * size_t xReceivedBytes;\n * const TickType_t xBlockTime = pdMS_TO_TICKS( 20 );\n *\n *  // Receive the next message from the message buffer.  Wait in the Blocked\n *  // state (so not using any CPU processing time) for a maximum of 100ms for\n *  // a message to become available.\n *  xReceivedBytes = xMessageBufferReceive( xMessageBuffer,\n *                                          ( void * ) ucRxData,\n *                                          sizeof( ucRxData ),\n *                                          xBlockTime );\n *\n *  if( xReceivedBytes > 0 )\n *  {\n *      // A ucRxData contains a message that is xReceivedBytes long.  Process\n *      // the message here....\n *  }\n * }\n * @endcode\n * \\defgroup xMessageBufferReceive xMessageBufferReceive\n * \\ingroup MessageBufferManagement\n */\n#define xMessageBufferReceive( xMessageBuffer, pvRxData, xBufferLengthBytes, xTicksToWait ) \\\n    xStreamBufferReceive( ( xMessageBuffer ), ( pvRxData ), ( xBufferLengthBytes ), ( xTicksToWait ) )\n\n\n/**\n * message_buffer.h\n *\n * @code{c}\n * size_t xMessageBufferReceiveFromISR( MessageBufferHandle_t xMessageBuffer,\n *                                      void *pvRxData,\n *                                      size_t xBufferLengthBytes,\n *                                      BaseType_t *pxHigherPriorityTaskWoken );\n * @endcode\n *\n * An interrupt safe version of the API function that receives a discrete\n * message from a message buffer.  Messages can be of variable length and are\n * copied out of the buffer.\n *\n * ***NOTE***:  Uniquely among FreeRTOS objects, the stream buffer\n * implementation (so also the message buffer implementation, as message buffers\n * are built on top of stream buffers) assumes there is only one task or\n * interrupt that will write to the buffer (the writer), and only one task or\n * interrupt that will read from the buffer (the reader).  It is safe for the\n * writer and reader to be different tasks or interrupts, but, unlike other\n * FreeRTOS objects, it is not safe to have multiple different writers or\n * multiple different readers.  If there are to be multiple different writers\n * then the application writer must place each call to a writing API function\n * (such as xMessageBufferSend()) inside a critical section and set the send\n * block time to 0.  Likewise, if there are to be multiple different readers\n * then the application writer must place each call to a reading API function\n * (such as xMessageBufferRead()) inside a critical section and set the receive\n * block time to 0.\n *\n * Use xMessageBufferReceive() to read from a message buffer from a task.  Use\n * xMessageBufferReceiveFromISR() to read from a message buffer from an\n * interrupt service routine (ISR).\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xMessageBufferReceiveFromISR() to be available.\n *\n * @param xMessageBuffer The handle of the message buffer from which a message\n * is being received.\n *\n * @param pvRxData A pointer to the buffer into which the received message is\n * to be copied.\n *\n * @param xBufferLengthBytes The length of the buffer pointed to by the pvRxData\n * parameter.  This sets the maximum length of the message that can be received.\n * If xBufferLengthBytes is too small to hold the next message then the message\n * will be left in the message buffer and 0 will be returned.\n *\n * @param pxHigherPriorityTaskWoken  It is possible that a message buffer will\n * have a task blocked on it waiting for space to become available.  Calling\n * xMessageBufferReceiveFromISR() can make space available, and so cause a task\n * that is waiting for space to leave the Blocked state.  If calling\n * xMessageBufferReceiveFromISR() causes a task to leave the Blocked state, and\n * the unblocked task has a priority higher than the currently executing task\n * (the task that was interrupted), then, internally,\n * xMessageBufferReceiveFromISR() will set *pxHigherPriorityTaskWoken to pdTRUE.\n * If xMessageBufferReceiveFromISR() sets this value to pdTRUE, then normally a\n * context switch should be performed before the interrupt is exited.  That will\n * ensure the interrupt returns directly to the highest priority Ready state\n * task.  *pxHigherPriorityTaskWoken should be set to pdFALSE before it is\n * passed into the function.  See the code example below for an example.\n *\n * @return The length, in bytes, of the message read from the message buffer, if\n * any.\n *\n * Example use:\n * @code{c}\n * // A message buffer that has already been created.\n * MessageBuffer_t xMessageBuffer;\n *\n * void vAnInterruptServiceRoutine( void )\n * {\n * uint8_t ucRxData[ 20 ];\n * size_t xReceivedBytes;\n * BaseType_t xHigherPriorityTaskWoken = pdFALSE;  // Initialised to pdFALSE.\n *\n *  // Receive the next message from the message buffer.\n *  xReceivedBytes = xMessageBufferReceiveFromISR( xMessageBuffer,\n *                                                ( void * ) ucRxData,\n *                                                sizeof( ucRxData ),\n *                                                &xHigherPriorityTaskWoken );\n *\n *  if( xReceivedBytes > 0 )\n *  {\n *      // A ucRxData contains a message that is xReceivedBytes long.  Process\n *      // the message here....\n *  }\n *\n *  // If xHigherPriorityTaskWoken was set to pdTRUE inside\n *  // xMessageBufferReceiveFromISR() then a task that has a priority above the\n *  // priority of the currently executing task was unblocked and a context\n *  // switch should be performed to ensure the ISR returns to the unblocked\n *  // task.  In most FreeRTOS ports this is done by simply passing\n *  // xHigherPriorityTaskWoken into portYIELD_FROM_ISR(), which will test the\n *  // variables value, and perform the context switch if necessary.  Check the\n *  // documentation for the port in use for port specific instructions.\n *  portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\n * }\n * @endcode\n * \\defgroup xMessageBufferReceiveFromISR xMessageBufferReceiveFromISR\n * \\ingroup MessageBufferManagement\n */\n#define xMessageBufferReceiveFromISR( xMessageBuffer, pvRxData, xBufferLengthBytes, pxHigherPriorityTaskWoken ) \\\n    xStreamBufferReceiveFromISR( ( xMessageBuffer ), ( pvRxData ), ( xBufferLengthBytes ), ( pxHigherPriorityTaskWoken ) )\n\n/**\n * message_buffer.h\n *\n * @code{c}\n * void vMessageBufferDelete( MessageBufferHandle_t xMessageBuffer );\n * @endcode\n *\n * Deletes a message buffer that was previously created using a call to\n * xMessageBufferCreate() or xMessageBufferCreateStatic().  If the message\n * buffer was created using dynamic memory (that is, by xMessageBufferCreate()),\n * then the allocated memory is freed.\n *\n * A message buffer handle must not be used after the message buffer has been\n * deleted.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * vMessageBufferDelete() to be available.\n *\n * @param xMessageBuffer The handle of the message buffer to be deleted.\n *\n */\n#define vMessageBufferDelete( xMessageBuffer ) \\\n    vStreamBufferDelete( xMessageBuffer )\n\n/**\n * message_buffer.h\n * @code{c}\n * BaseType_t xMessageBufferIsFull( MessageBufferHandle_t xMessageBuffer );\n * @endcode\n *\n * Tests to see if a message buffer is full.  A message buffer is full if it\n * cannot accept any more messages, of any size, until space is made available\n * by a message being removed from the message buffer.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xMessageBufferIsFull() to be available.\n *\n * @param xMessageBuffer The handle of the message buffer being queried.\n *\n * @return If the message buffer referenced by xMessageBuffer is full then\n * pdTRUE is returned.  Otherwise pdFALSE is returned.\n */\n#define xMessageBufferIsFull( xMessageBuffer ) \\\n    xStreamBufferIsFull( xMessageBuffer )\n\n/**\n * message_buffer.h\n * @code{c}\n * BaseType_t xMessageBufferIsEmpty( MessageBufferHandle_t xMessageBuffer );\n * @endcode\n *\n * Tests to see if a message buffer is empty (does not contain any messages).\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xMessageBufferIsEmpty() to be available.\n *\n * @param xMessageBuffer The handle of the message buffer being queried.\n *\n * @return If the message buffer referenced by xMessageBuffer is empty then\n * pdTRUE is returned.  Otherwise pdFALSE is returned.\n *\n */\n#define xMessageBufferIsEmpty( xMessageBuffer ) \\\n    xStreamBufferIsEmpty( xMessageBuffer )\n\n/**\n * message_buffer.h\n * @code{c}\n * BaseType_t xMessageBufferReset( MessageBufferHandle_t xMessageBuffer );\n * @endcode\n *\n * Resets a message buffer to its initial empty state, discarding any message it\n * contained.\n *\n * A message buffer can only be reset if there are no tasks blocked on it.\n *\n * Use xMessageBufferReset() to reset a message buffer from a task.\n * Use xMessageBufferResetFromISR() to reset a message buffer from an\n * interrupt service routine (ISR).\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xMessageBufferReset() to be available.\n *\n * @param xMessageBuffer The handle of the message buffer being reset.\n *\n * @return If the message buffer was reset then pdPASS is returned.  If the\n * message buffer could not be reset because either there was a task blocked on\n * the message queue to wait for space to become available, or to wait for a\n * a message to be available, then pdFAIL is returned.\n *\n * \\defgroup xMessageBufferReset xMessageBufferReset\n * \\ingroup MessageBufferManagement\n */\n#define xMessageBufferReset( xMessageBuffer ) \\\n    xStreamBufferReset( xMessageBuffer )\n\n\n/**\n * message_buffer.h\n * @code{c}\n * BaseType_t xMessageBufferResetFromISR( MessageBufferHandle_t xMessageBuffer );\n * @endcode\n *\n * An interrupt safe version of the API function that resets the message buffer.\n * Resets a message buffer to its initial empty state, discarding any message it\n * contained.\n *\n * A message buffer can only be reset if there are no tasks blocked on it.\n *\n * Use xMessageBufferReset() to reset a message buffer from a task.\n * Use xMessageBufferResetFromISR() to reset a message buffer from an\n * interrupt service routine (ISR).\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xMessageBufferResetFromISR() to be available.\n *\n * @param xMessageBuffer The handle of the message buffer being reset.\n *\n * @return If the message buffer was reset then pdPASS is returned.  If the\n * message buffer could not be reset because either there was a task blocked on\n * the message queue to wait for space to become available, or to wait for a\n * a message to be available, then pdFAIL is returned.\n *\n * \\defgroup xMessageBufferResetFromISR xMessageBufferResetFromISR\n * \\ingroup MessageBufferManagement\n */\n#define xMessageBufferResetFromISR( xMessageBuffer ) \\\n    xStreamBufferResetFromISR( xMessageBuffer )\n\n/**\n * message_buffer.h\n * @code{c}\n * size_t xMessageBufferSpaceAvailable( MessageBufferHandle_t xMessageBuffer );\n * @endcode\n * Returns the number of bytes of free space in the message buffer.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xMessageBufferSpaceAvailable() to be available.\n *\n * @param xMessageBuffer The handle of the message buffer being queried.\n *\n * @return The number of bytes that can be written to the message buffer before\n * the message buffer would be full.  When a message is written to the message\n * buffer an additional sizeof( size_t ) bytes are also written to store the\n * message's length.  sizeof( size_t ) is typically 4 bytes on a 32-bit\n * architecture, so if xMessageBufferSpacesAvailable() returns 10, then the size\n * of the largest message that can be written to the message buffer is 6 bytes.\n *\n * \\defgroup xMessageBufferSpaceAvailable xMessageBufferSpaceAvailable\n * \\ingroup MessageBufferManagement\n */\n#define xMessageBufferSpaceAvailable( xMessageBuffer ) \\\n    xStreamBufferSpacesAvailable( xMessageBuffer )\n#define xMessageBufferSpacesAvailable( xMessageBuffer ) \\\n    xStreamBufferSpacesAvailable( xMessageBuffer ) /* Corrects typo in original macro name. */\n\n/**\n * message_buffer.h\n * @code{c}\n * size_t xMessageBufferNextLengthBytes( MessageBufferHandle_t xMessageBuffer );\n * @endcode\n * Returns the length (in bytes) of the next message in a message buffer.\n * Useful if xMessageBufferReceive() returned 0 because the size of the buffer\n * passed into xMessageBufferReceive() was too small to hold the next message.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xMessageBufferNextLengthBytes() to be available.\n *\n * @param xMessageBuffer The handle of the message buffer being queried.\n *\n * @return The length (in bytes) of the next message in the message buffer, or 0\n * if the message buffer is empty.\n *\n * \\defgroup xMessageBufferNextLengthBytes xMessageBufferNextLengthBytes\n * \\ingroup MessageBufferManagement\n */\n#define xMessageBufferNextLengthBytes( xMessageBuffer ) \\\n    xStreamBufferNextMessageLengthBytes( xMessageBuffer )\n\n/**\n * message_buffer.h\n *\n * @code{c}\n * BaseType_t xMessageBufferSendCompletedFromISR( MessageBufferHandle_t xMessageBuffer, BaseType_t *pxHigherPriorityTaskWoken );\n * @endcode\n *\n * For advanced users only.\n *\n * The sbSEND_COMPLETED() macro is called from within the FreeRTOS APIs when\n * data is sent to a message buffer or stream buffer.  If there was a task that\n * was blocked on the message or stream buffer waiting for data to arrive then\n * the sbSEND_COMPLETED() macro sends a notification to the task to remove it\n * from the Blocked state.  xMessageBufferSendCompletedFromISR() does the same\n * thing.  It is provided to enable application writers to implement their own\n * version of sbSEND_COMPLETED(), and MUST NOT BE USED AT ANY OTHER TIME.\n *\n * See the example implemented in FreeRTOS/Demo/Minimal/MessageBufferAMP.c for\n * additional information.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xMessageBufferSendCompletedFromISR() to be available.\n *\n * @param xMessageBuffer The handle of the stream buffer to which data was\n * written.\n *\n * @param pxHigherPriorityTaskWoken *pxHigherPriorityTaskWoken should be\n * initialised to pdFALSE before it is passed into\n * xMessageBufferSendCompletedFromISR().  If calling\n * xMessageBufferSendCompletedFromISR() removes a task from the Blocked state,\n * and the task has a priority above the priority of the currently running task,\n * then *pxHigherPriorityTaskWoken will get set to pdTRUE indicating that a\n * context switch should be performed before exiting the ISR.\n *\n * @return If a task was removed from the Blocked state then pdTRUE is returned.\n * Otherwise pdFALSE is returned.\n *\n * \\defgroup xMessageBufferSendCompletedFromISR xMessageBufferSendCompletedFromISR\n * \\ingroup StreamBufferManagement\n */\n#define xMessageBufferSendCompletedFromISR( xMessageBuffer, pxHigherPriorityTaskWoken ) \\\n    xStreamBufferSendCompletedFromISR( ( xMessageBuffer ), ( pxHigherPriorityTaskWoken ) )\n\n/**\n * message_buffer.h\n *\n * @code{c}\n * BaseType_t xMessageBufferReceiveCompletedFromISR( MessageBufferHandle_t xMessageBuffer, BaseType_t *pxHigherPriorityTaskWoken );\n * @endcode\n *\n * For advanced users only.\n *\n * The sbRECEIVE_COMPLETED() macro is called from within the FreeRTOS APIs when\n * data is read out of a message buffer or stream buffer.  If there was a task\n * that was blocked on the message or stream buffer waiting for data to arrive\n * then the sbRECEIVE_COMPLETED() macro sends a notification to the task to\n * remove it from the Blocked state.  xMessageBufferReceiveCompletedFromISR()\n * does the same thing.  It is provided to enable application writers to\n * implement their own version of sbRECEIVE_COMPLETED(), and MUST NOT BE USED AT\n * ANY OTHER TIME.\n *\n * See the example implemented in FreeRTOS/Demo/Minimal/MessageBufferAMP.c for\n * additional information.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xMessageBufferReceiveCompletedFromISR() to be available.\n *\n * @param xMessageBuffer The handle of the stream buffer from which data was\n * read.\n *\n * @param pxHigherPriorityTaskWoken *pxHigherPriorityTaskWoken should be\n * initialised to pdFALSE before it is passed into\n * xMessageBufferReceiveCompletedFromISR().  If calling\n * xMessageBufferReceiveCompletedFromISR() removes a task from the Blocked state,\n * and the task has a priority above the priority of the currently running task,\n * then *pxHigherPriorityTaskWoken will get set to pdTRUE indicating that a\n * context switch should be performed before exiting the ISR.\n *\n * @return If a task was removed from the Blocked state then pdTRUE is returned.\n * Otherwise pdFALSE is returned.\n *\n * \\defgroup xMessageBufferReceiveCompletedFromISR xMessageBufferReceiveCompletedFromISR\n * \\ingroup StreamBufferManagement\n */\n#define xMessageBufferReceiveCompletedFromISR( xMessageBuffer, pxHigherPriorityTaskWoken ) \\\n    xStreamBufferReceiveCompletedFromISR( ( xMessageBuffer ), ( pxHigherPriorityTaskWoken ) )\n\n/* *INDENT-OFF* */\n#if defined( __cplusplus )\n    } /* extern \"C\" */\n#endif\n/* *INDENT-ON* */\n\n#endif /* !defined( FREERTOS_MESSAGE_BUFFER_H ) */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/mpu_prototypes.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n/*\n * When the MPU is used the standard (non MPU) API functions are mapped to\n * equivalents that start \"MPU_\", the prototypes for which are defined in this\n * header files.  This will cause the application code to call the MPU_ version\n * which wraps the non-MPU version with privilege promoting then demoting code,\n * so the kernel code always runs will full privileges.\n */\n\n\n#ifndef MPU_PROTOTYPES_H\n#define MPU_PROTOTYPES_H\n\ntypedef struct xTaskGenericNotifyParams\n{\n    TaskHandle_t xTaskToNotify;\n    UBaseType_t uxIndexToNotify;\n    uint32_t ulValue;\n    eNotifyAction eAction;\n    uint32_t * pulPreviousNotificationValue;\n} xTaskGenericNotifyParams_t;\n\ntypedef struct xTaskGenericNotifyWaitParams\n{\n    UBaseType_t uxIndexToWaitOn;\n    uint32_t ulBitsToClearOnEntry;\n    uint32_t ulBitsToClearOnExit;\n    uint32_t * pulNotificationValue;\n    TickType_t xTicksToWait;\n} xTaskGenericNotifyWaitParams_t;\n\ntypedef struct xTimerGenericCommandFromTaskParams\n{\n    TimerHandle_t xTimer;\n    BaseType_t xCommandID;\n    TickType_t xOptionalValue;\n    BaseType_t * pxHigherPriorityTaskWoken;\n    TickType_t xTicksToWait;\n} xTimerGenericCommandFromTaskParams_t;\n\ntypedef struct xEventGroupWaitBitsParams\n{\n    EventGroupHandle_t xEventGroup;\n    EventBits_t uxBitsToWaitFor;\n    BaseType_t xClearOnExit;\n    BaseType_t xWaitForAllBits;\n    TickType_t xTicksToWait;\n} xEventGroupWaitBitsParams_t;\n\n/* MPU versions of task.h API functions. */\nvoid MPU_vTaskDelay( const TickType_t xTicksToDelay ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xTaskDelayUntil( TickType_t * const pxPreviousWakeTime,\n                                const TickType_t xTimeIncrement ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xTaskAbortDelay( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\nUBaseType_t MPU_uxTaskPriorityGet( const TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\neTaskState MPU_eTaskGetState( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\nvoid MPU_vTaskGetInfo( TaskHandle_t xTask,\n                       TaskStatus_t * pxTaskStatus,\n                       BaseType_t xGetFreeStackSpace,\n                       eTaskState eState ) FREERTOS_SYSTEM_CALL;\nvoid MPU_vTaskSuspend( TaskHandle_t xTaskToSuspend ) FREERTOS_SYSTEM_CALL;\nvoid MPU_vTaskResume( TaskHandle_t xTaskToResume ) FREERTOS_SYSTEM_CALL;\nTickType_t MPU_xTaskGetTickCount( void ) FREERTOS_SYSTEM_CALL;\nUBaseType_t MPU_uxTaskGetNumberOfTasks( void ) FREERTOS_SYSTEM_CALL;\nUBaseType_t MPU_uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\nconfigSTACK_DEPTH_TYPE MPU_uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\nvoid MPU_vTaskSetApplicationTaskTag( TaskHandle_t xTask,\n                                     TaskHookFunction_t pxHookFunction ) FREERTOS_SYSTEM_CALL;\nTaskHookFunction_t MPU_xTaskGetApplicationTaskTag( TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\nvoid MPU_vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet,\n                                            BaseType_t xIndex,\n                                            void * pvValue ) FREERTOS_SYSTEM_CALL;\nvoid * MPU_pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery,\n                                               BaseType_t xIndex ) FREERTOS_SYSTEM_CALL;\nTaskHandle_t MPU_xTaskGetIdleTaskHandle( void ) FREERTOS_SYSTEM_CALL;\nUBaseType_t MPU_uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray,\n                                      const UBaseType_t uxArraySize,\n                                      configRUN_TIME_COUNTER_TYPE * const pulTotalRunTime ) FREERTOS_SYSTEM_CALL;\nconfigRUN_TIME_COUNTER_TYPE MPU_ulTaskGetRunTimeCounter( const TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\nconfigRUN_TIME_COUNTER_TYPE MPU_ulTaskGetRunTimePercent( const TaskHandle_t xTask ) FREERTOS_SYSTEM_CALL;\nconfigRUN_TIME_COUNTER_TYPE MPU_ulTaskGetIdleRunTimeCounter( void ) FREERTOS_SYSTEM_CALL;\nconfigRUN_TIME_COUNTER_TYPE MPU_ulTaskGetIdleRunTimePercent( void ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xTaskGenericNotify( TaskHandle_t xTaskToNotify,\n                                   UBaseType_t uxIndexToNotify,\n                                   uint32_t ulValue,\n                                   eNotifyAction eAction,\n                                   uint32_t * pulPreviousNotificationValue ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xTaskGenericNotifyEntry( const xTaskGenericNotifyParams_t * pxParams ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xTaskGenericNotifyWait( UBaseType_t uxIndexToWaitOn,\n                                       uint32_t ulBitsToClearOnEntry,\n                                       uint32_t ulBitsToClearOnExit,\n                                       uint32_t * pulNotificationValue,\n                                       TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xTaskGenericNotifyWaitEntry( const xTaskGenericNotifyWaitParams_t * pxParams ) FREERTOS_SYSTEM_CALL;\nuint32_t MPU_ulTaskGenericNotifyTake( UBaseType_t uxIndexToWaitOn,\n                                      BaseType_t xClearCountOnExit,\n                                      TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xTaskGenericNotifyStateClear( TaskHandle_t xTask,\n                                             UBaseType_t uxIndexToClear ) FREERTOS_SYSTEM_CALL;\nuint32_t MPU_ulTaskGenericNotifyValueClear( TaskHandle_t xTask,\n                                            UBaseType_t uxIndexToClear,\n                                            uint32_t ulBitsToClear ) FREERTOS_SYSTEM_CALL;\nvoid MPU_vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut,\n                                     TickType_t * const pxTicksToWait ) FREERTOS_SYSTEM_CALL;\nTaskHandle_t MPU_xTaskGetCurrentTaskHandle( void ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xTaskGetSchedulerState( void ) FREERTOS_SYSTEM_CALL;\n\n/* Privileged only wrappers for Task APIs. These are needed so that\n * the application can use opaque handles maintained in mpu_wrappers.c\n * with all the APIs. */\nBaseType_t MPU_xTaskCreate( TaskFunction_t pxTaskCode,\n                            const char * const pcName,\n                            const configSTACK_DEPTH_TYPE uxStackDepth,\n                            void * const pvParameters,\n                            UBaseType_t uxPriority,\n                            TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION;\nTaskHandle_t MPU_xTaskCreateStatic( TaskFunction_t pxTaskCode,\n                                    const char * const pcName,\n                                    const configSTACK_DEPTH_TYPE uxStackDepth,\n                                    void * const pvParameters,\n                                    UBaseType_t uxPriority,\n                                    StackType_t * const puxStackBuffer,\n                                    StaticTask_t * const pxTaskBuffer ) PRIVILEGED_FUNCTION;\nvoid MPU_vTaskDelete( TaskHandle_t xTaskToDelete ) PRIVILEGED_FUNCTION;\nvoid MPU_vTaskPrioritySet( TaskHandle_t xTask,\n                           UBaseType_t uxNewPriority ) PRIVILEGED_FUNCTION;\nTaskHandle_t MPU_xTaskGetHandle( const char * pcNameToQuery ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xTaskCallApplicationTaskHook( TaskHandle_t xTask,\n                                             void * pvParameter ) PRIVILEGED_FUNCTION;\nchar * MPU_pcTaskGetName( TaskHandle_t xTaskToQuery ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition,\n                                      TaskHandle_t * pxCreatedTask ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xTaskCreateRestrictedStatic( const TaskParameters_t * const pxTaskDefinition,\n                                            TaskHandle_t * pxCreatedTask ) PRIVILEGED_FUNCTION;\nvoid MPU_vTaskAllocateMPURegions( TaskHandle_t xTaskToModify,\n                                  const MemoryRegion_t * const xRegions ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xTaskGetStaticBuffers( TaskHandle_t xTask,\n                                      StackType_t ** ppuxStackBuffer,\n                                      StaticTask_t ** ppxTaskBuffer ) PRIVILEGED_FUNCTION;\nUBaseType_t MPU_uxTaskPriorityGetFromISR( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\nUBaseType_t MPU_uxTaskBasePriorityGet( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\nUBaseType_t MPU_uxTaskBasePriorityGetFromISR( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xTaskResumeFromISR( TaskHandle_t xTaskToResume ) PRIVILEGED_FUNCTION;\nTaskHookFunction_t MPU_xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify,\n                                          UBaseType_t uxIndexToNotify,\n                                          uint32_t ulValue,\n                                          eNotifyAction eAction,\n                                          uint32_t * pulPreviousNotificationValue,\n                                          BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\nvoid MPU_vTaskGenericNotifyGiveFromISR( TaskHandle_t xTaskToNotify,\n                                        UBaseType_t uxIndexToNotify,\n                                        BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\n\n/* MPU versions of queue.h API functions. */\nBaseType_t MPU_xQueueGenericSend( QueueHandle_t xQueue,\n                                  const void * const pvItemToQueue,\n                                  TickType_t xTicksToWait,\n                                  const BaseType_t xCopyPosition ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xQueueReceive( QueueHandle_t xQueue,\n                              void * const pvBuffer,\n                              TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xQueuePeek( QueueHandle_t xQueue,\n                           void * const pvBuffer,\n                           TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xQueueSemaphoreTake( QueueHandle_t xQueue,\n                                    TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\nUBaseType_t MPU_uxQueueMessagesWaiting( const QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\nUBaseType_t MPU_uxQueueSpacesAvailable( const QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\nTaskHandle_t MPU_xQueueGetMutexHolder( QueueHandle_t xSemaphore ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xQueueTakeMutexRecursive( QueueHandle_t xMutex,\n                                         TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xQueueGiveMutexRecursive( QueueHandle_t pxMutex ) FREERTOS_SYSTEM_CALL;\nvoid MPU_vQueueAddToRegistry( QueueHandle_t xQueue,\n                              const char * pcName ) FREERTOS_SYSTEM_CALL;\nvoid MPU_vQueueUnregisterQueue( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\nconst char * MPU_pcQueueGetName( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore,\n                               QueueSetHandle_t xQueueSet ) FREERTOS_SYSTEM_CALL;\nQueueSetMemberHandle_t MPU_xQueueSelectFromSet( QueueSetHandle_t xQueueSet,\n                                                const TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\nvoid MPU_vQueueSetQueueNumber( QueueHandle_t xQueue,\n                               UBaseType_t uxQueueNumber ) FREERTOS_SYSTEM_CALL;\nUBaseType_t MPU_uxQueueGetQueueNumber( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\nuint8_t MPU_ucQueueGetQueueType( QueueHandle_t xQueue ) FREERTOS_SYSTEM_CALL;\n\n/* Privileged only wrappers for Queue APIs. These are needed so that\n * the application can use opaque handles maintained in mpu_wrappers.c\n * with all the APIs. */\nvoid MPU_vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\nQueueHandle_t MPU_xQueueCreateMutex( const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;\nQueueHandle_t MPU_xQueueCreateMutexStatic( const uint8_t ucQueueType,\n                                           StaticQueue_t * pxStaticQueue ) PRIVILEGED_FUNCTION;\nQueueHandle_t MPU_xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount,\n                                                 const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION;\nQueueHandle_t MPU_xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount,\n                                                       const UBaseType_t uxInitialCount,\n                                                       StaticQueue_t * pxStaticQueue ) PRIVILEGED_FUNCTION;\nQueueHandle_t MPU_xQueueGenericCreate( const UBaseType_t uxQueueLength,\n                                       const UBaseType_t uxItemSize,\n                                       const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;\nQueueHandle_t MPU_xQueueGenericCreateStatic( const UBaseType_t uxQueueLength,\n                                             const UBaseType_t uxItemSize,\n                                             uint8_t * pucQueueStorage,\n                                             StaticQueue_t * pxStaticQueue,\n                                             const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;\nQueueSetHandle_t MPU_xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore,\n                                    QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xQueueGenericReset( QueueHandle_t xQueue,\n                                   BaseType_t xNewQueue ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xQueueGenericGetStaticBuffers( QueueHandle_t xQueue,\n                                              uint8_t ** ppucQueueStorage,\n                                              StaticQueue_t ** ppxStaticQueue ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xQueueGenericSendFromISR( QueueHandle_t xQueue,\n                                         const void * const pvItemToQueue,\n                                         BaseType_t * const pxHigherPriorityTaskWoken,\n                                         const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xQueueGiveFromISR( QueueHandle_t xQueue,\n                                  BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xQueuePeekFromISR( QueueHandle_t xQueue,\n                                  void * const pvBuffer ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xQueueReceiveFromISR( QueueHandle_t xQueue,\n                                     void * const pvBuffer,\n                                     BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xQueueIsQueueFullFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\nUBaseType_t MPU_uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\nTaskHandle_t MPU_xQueueGetMutexHolderFromISR( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;\nQueueSetMemberHandle_t MPU_xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;\n\n/* MPU versions of timers.h API functions. */\nvoid * MPU_pvTimerGetTimerID( const TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\nvoid MPU_vTimerSetTimerID( TimerHandle_t xTimer,\n                           void * pvNewID ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xTimerIsTimerActive( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\nTaskHandle_t MPU_xTimerGetTimerDaemonTaskHandle( void ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xTimerGenericCommandFromTask( TimerHandle_t xTimer,\n                                             const BaseType_t xCommandID,\n                                             const TickType_t xOptionalValue,\n                                             BaseType_t * const pxHigherPriorityTaskWoken,\n                                             const TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xTimerGenericCommandFromTaskEntry( const xTimerGenericCommandFromTaskParams_t * pxParams ) FREERTOS_SYSTEM_CALL;\nconst char * MPU_pcTimerGetName( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\nvoid MPU_vTimerSetReloadMode( TimerHandle_t xTimer,\n                              const BaseType_t uxAutoReload ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xTimerGetReloadMode( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\nUBaseType_t MPU_uxTimerGetReloadMode( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\nTickType_t MPU_xTimerGetPeriod( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\nTickType_t MPU_xTimerGetExpiryTime( TimerHandle_t xTimer ) FREERTOS_SYSTEM_CALL;\n\n/* Privileged only wrappers for Timer APIs. These are needed so that\n * the application can use opaque handles maintained in mpu_wrappers.c\n * with all the APIs. */\nTimerHandle_t MPU_xTimerCreate( const char * const pcTimerName,\n                                const TickType_t xTimerPeriodInTicks,\n                                const UBaseType_t uxAutoReload,\n                                void * const pvTimerID,\n                                TimerCallbackFunction_t pxCallbackFunction ) PRIVILEGED_FUNCTION;\nTimerHandle_t MPU_xTimerCreateStatic( const char * const pcTimerName,\n                                      const TickType_t xTimerPeriodInTicks,\n                                      const UBaseType_t uxAutoReload,\n                                      void * const pvTimerID,\n                                      TimerCallbackFunction_t pxCallbackFunction,\n                                      StaticTimer_t * pxTimerBuffer ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xTimerGetStaticBuffer( TimerHandle_t xTimer,\n                                      StaticTimer_t ** ppxTimerBuffer ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xTimerGenericCommandFromISR( TimerHandle_t xTimer,\n                                            const BaseType_t xCommandID,\n                                            const TickType_t xOptionalValue,\n                                            BaseType_t * const pxHigherPriorityTaskWoken,\n                                            const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\n\n/* MPU versions of event_group.h API functions. */\nEventBits_t MPU_xEventGroupWaitBits( EventGroupHandle_t xEventGroup,\n                                     const EventBits_t uxBitsToWaitFor,\n                                     const BaseType_t xClearOnExit,\n                                     const BaseType_t xWaitForAllBits,\n                                     TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\nEventBits_t MPU_xEventGroupWaitBitsEntry( const xEventGroupWaitBitsParams_t * pxParams ) FREERTOS_SYSTEM_CALL;\nEventBits_t MPU_xEventGroupClearBits( EventGroupHandle_t xEventGroup,\n                                      const EventBits_t uxBitsToClear ) FREERTOS_SYSTEM_CALL;\nEventBits_t MPU_xEventGroupSetBits( EventGroupHandle_t xEventGroup,\n                                    const EventBits_t uxBitsToSet ) FREERTOS_SYSTEM_CALL;\nEventBits_t MPU_xEventGroupSync( EventGroupHandle_t xEventGroup,\n                                 const EventBits_t uxBitsToSet,\n                                 const EventBits_t uxBitsToWaitFor,\n                                 TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\n#if ( configUSE_TRACE_FACILITY == 1 )\n    UBaseType_t MPU_uxEventGroupGetNumber( void * xEventGroup ) FREERTOS_SYSTEM_CALL;\n    void MPU_vEventGroupSetNumber( void * xEventGroup,\n                                   UBaseType_t uxEventGroupNumber ) FREERTOS_SYSTEM_CALL;\n#endif /* ( configUSE_TRACE_FACILITY == 1 )*/\n\n/* Privileged only wrappers for Event Group APIs. These are needed so that\n * the application can use opaque handles maintained in mpu_wrappers.c\n * with all the APIs. */\nEventGroupHandle_t MPU_xEventGroupCreate( void ) PRIVILEGED_FUNCTION;\nEventGroupHandle_t MPU_xEventGroupCreateStatic( StaticEventGroup_t * pxEventGroupBuffer ) PRIVILEGED_FUNCTION;\nvoid MPU_vEventGroupDelete( EventGroupHandle_t xEventGroup ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xEventGroupGetStaticBuffer( EventGroupHandle_t xEventGroup,\n                                           StaticEventGroup_t ** ppxEventGroupBuffer ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup,\n                                            const EventBits_t uxBitsToClear ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup,\n                                          const EventBits_t uxBitsToSet,\n                                          BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\nEventBits_t MPU_xEventGroupGetBitsFromISR( EventGroupHandle_t xEventGroup ) PRIVILEGED_FUNCTION;\n\n/* MPU versions of message/stream_buffer.h API functions. */\nsize_t MPU_xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,\n                              const void * pvTxData,\n                              size_t xDataLengthBytes,\n                              TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\nsize_t MPU_xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer,\n                                 void * pvRxData,\n                                 size_t xBufferLengthBytes,\n                                 TickType_t xTicksToWait ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\nsize_t MPU_xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\nsize_t MPU_xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\nBaseType_t MPU_xStreamBufferSetTriggerLevel( StreamBufferHandle_t xStreamBuffer,\n                                             size_t xTriggerLevel ) FREERTOS_SYSTEM_CALL;\nsize_t MPU_xStreamBufferNextMessageLengthBytes( StreamBufferHandle_t xStreamBuffer ) FREERTOS_SYSTEM_CALL;\n\n/* Privileged only wrappers for Stream Buffer APIs. These are needed so that\n * the application can use opaque handles maintained in mpu_wrappers.c\n * with all the APIs. */\nStreamBufferHandle_t MPU_xStreamBufferGenericCreate( size_t xBufferSizeBytes,\n                                                     size_t xTriggerLevelBytes,\n                                                     BaseType_t xStreamBufferType,\n                                                     StreamBufferCallbackFunction_t pxSendCompletedCallback,\n                                                     StreamBufferCallbackFunction_t pxReceiveCompletedCallback ) PRIVILEGED_FUNCTION;\nStreamBufferHandle_t MPU_xStreamBufferGenericCreateStatic( size_t xBufferSizeBytes,\n                                                           size_t xTriggerLevelBytes,\n                                                           BaseType_t xStreamBufferType,\n                                                           uint8_t * const pucStreamBufferStorageArea,\n                                                           StaticStreamBuffer_t * const pxStaticStreamBuffer,\n                                                           StreamBufferCallbackFunction_t pxSendCompletedCallback,\n                                                           StreamBufferCallbackFunction_t pxReceiveCompletedCallback ) PRIVILEGED_FUNCTION;\nvoid MPU_vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xStreamBufferReset( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xStreamBufferGetStaticBuffers( StreamBufferHandle_t xStreamBuffers,\n                                              uint8_t * ppucStreamBufferStorageArea,\n                                              StaticStreamBuffer_t * ppxStaticStreamBuffer ) PRIVILEGED_FUNCTION;\nsize_t MPU_xStreamBufferSendFromISR( StreamBufferHandle_t xStreamBuffer,\n                                     const void * pvTxData,\n                                     size_t xDataLengthBytes,\n                                     BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\nsize_t MPU_xStreamBufferReceiveFromISR( StreamBufferHandle_t xStreamBuffer,\n                                        void * pvRxData,\n                                        size_t xBufferLengthBytes,\n                                        BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xStreamBufferSendCompletedFromISR( StreamBufferHandle_t xStreamBuffer,\n                                                  BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xStreamBufferReceiveCompletedFromISR( StreamBufferHandle_t xStreamBuffer,\n                                                     BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\nBaseType_t MPU_xStreamBufferResetFromISR( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;\n\n#endif /* MPU_PROTOTYPES_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/mpu_syscall_numbers.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n#ifndef MPU_SYSCALL_NUMBERS_H\n#define MPU_SYSCALL_NUMBERS_H\n\n/* Numbers assigned to various system calls. */\n#define SYSTEM_CALL_xTaskGenericNotify                     0\n#define SYSTEM_CALL_xTaskGenericNotifyWait                 1\n#define SYSTEM_CALL_xTimerGenericCommandFromTask           2\n#define SYSTEM_CALL_xEventGroupWaitBits                    3\n#define SYSTEM_CALL_xTaskDelayUntil                        4\n#define SYSTEM_CALL_xTaskAbortDelay                        5\n#define SYSTEM_CALL_vTaskDelay                             6\n#define SYSTEM_CALL_uxTaskPriorityGet                      7\n#define SYSTEM_CALL_eTaskGetState                          8\n#define SYSTEM_CALL_vTaskGetInfo                           9\n#define SYSTEM_CALL_xTaskGetIdleTaskHandle                 10\n#define SYSTEM_CALL_vTaskSuspend                           11\n#define SYSTEM_CALL_vTaskResume                            12\n#define SYSTEM_CALL_xTaskGetTickCount                      13\n#define SYSTEM_CALL_uxTaskGetNumberOfTasks                 14\n#define SYSTEM_CALL_ulTaskGetRunTimeCounter                15\n#define SYSTEM_CALL_ulTaskGetRunTimePercent                16\n#define SYSTEM_CALL_ulTaskGetIdleRunTimePercent            17\n#define SYSTEM_CALL_ulTaskGetIdleRunTimeCounter            18\n#define SYSTEM_CALL_vTaskSetApplicationTaskTag             19\n#define SYSTEM_CALL_xTaskGetApplicationTaskTag             20\n#define SYSTEM_CALL_vTaskSetThreadLocalStoragePointer      21\n#define SYSTEM_CALL_pvTaskGetThreadLocalStoragePointer     22\n#define SYSTEM_CALL_uxTaskGetSystemState                   23\n#define SYSTEM_CALL_uxTaskGetStackHighWaterMark            24\n#define SYSTEM_CALL_uxTaskGetStackHighWaterMark2           25\n#define SYSTEM_CALL_xTaskGetCurrentTaskHandle              26\n#define SYSTEM_CALL_xTaskGetSchedulerState                 27\n#define SYSTEM_CALL_vTaskSetTimeOutState                   28\n#define SYSTEM_CALL_xTaskCheckForTimeOut                   29\n#define SYSTEM_CALL_ulTaskGenericNotifyTake                30\n#define SYSTEM_CALL_xTaskGenericNotifyStateClear           31\n#define SYSTEM_CALL_ulTaskGenericNotifyValueClear          32\n#define SYSTEM_CALL_xQueueGenericSend                      33\n#define SYSTEM_CALL_uxQueueMessagesWaiting                 34\n#define SYSTEM_CALL_uxQueueSpacesAvailable                 35\n#define SYSTEM_CALL_xQueueReceive                          36\n#define SYSTEM_CALL_xQueuePeek                             37\n#define SYSTEM_CALL_xQueueSemaphoreTake                    38\n#define SYSTEM_CALL_xQueueGetMutexHolder                   39\n#define SYSTEM_CALL_xQueueTakeMutexRecursive               40\n#define SYSTEM_CALL_xQueueGiveMutexRecursive               41\n#define SYSTEM_CALL_xQueueSelectFromSet                    42\n#define SYSTEM_CALL_xQueueAddToSet                         43\n#define SYSTEM_CALL_vQueueAddToRegistry                    44\n#define SYSTEM_CALL_vQueueUnregisterQueue                  45\n#define SYSTEM_CALL_pcQueueGetName                         46\n#define SYSTEM_CALL_pvTimerGetTimerID                      47\n#define SYSTEM_CALL_vTimerSetTimerID                       48\n#define SYSTEM_CALL_xTimerIsTimerActive                    49\n#define SYSTEM_CALL_xTimerGetTimerDaemonTaskHandle         50\n#define SYSTEM_CALL_pcTimerGetName                         51\n#define SYSTEM_CALL_vTimerSetReloadMode                    52\n#define SYSTEM_CALL_xTimerGetReloadMode                    53\n#define SYSTEM_CALL_uxTimerGetReloadMode                   54\n#define SYSTEM_CALL_xTimerGetPeriod                        55\n#define SYSTEM_CALL_xTimerGetExpiryTime                    56\n#define SYSTEM_CALL_xEventGroupClearBits                   57\n#define SYSTEM_CALL_xEventGroupSetBits                     58\n#define SYSTEM_CALL_xEventGroupSync                        59\n#define SYSTEM_CALL_uxEventGroupGetNumber                  60\n#define SYSTEM_CALL_vEventGroupSetNumber                   61\n#define SYSTEM_CALL_xStreamBufferSend                      62\n#define SYSTEM_CALL_xStreamBufferReceive                   63\n#define SYSTEM_CALL_xStreamBufferIsFull                    64\n#define SYSTEM_CALL_xStreamBufferIsEmpty                   65\n#define SYSTEM_CALL_xStreamBufferSpacesAvailable           66\n#define SYSTEM_CALL_xStreamBufferBytesAvailable            67\n#define SYSTEM_CALL_xStreamBufferSetTriggerLevel           68\n#define SYSTEM_CALL_xStreamBufferNextMessageLengthBytes    69\n#define NUM_SYSTEM_CALLS                                   70  /* Total number of system calls. */\n\n#endif /* MPU_SYSCALL_NUMBERS_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/mpu_wrappers.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n#ifndef MPU_WRAPPERS_H\n#define MPU_WRAPPERS_H\n\n/* This file redefines API functions to be called through a wrapper macro, but\n * only for ports that are using the MPU. */\n#if ( portUSING_MPU_WRAPPERS == 1 )\n\n/* MPU_WRAPPERS_INCLUDED_FROM_API_FILE will be defined when this file is\n * included from queue.c or task.c to prevent it from having an effect within\n * those files. */\n    #ifndef MPU_WRAPPERS_INCLUDED_FROM_API_FILE\n\n/*\n * Map standard (non MPU) API functions to equivalents that start\n * \"MPU_\".  This will cause the application code to call the MPU_\n * version, which wraps the non-MPU version with privilege promoting\n * then demoting code, so the kernel code always runs will full\n * privileges.\n */\n\n/* Map standard task.h API functions to the MPU equivalents. */\n        #define vTaskDelay                            MPU_vTaskDelay\n        #define xTaskDelayUntil                       MPU_xTaskDelayUntil\n        #define xTaskAbortDelay                       MPU_xTaskAbortDelay\n        #define uxTaskPriorityGet                     MPU_uxTaskPriorityGet\n        #define eTaskGetState                         MPU_eTaskGetState\n        #define vTaskGetInfo                          MPU_vTaskGetInfo\n        #define vTaskSuspend                          MPU_vTaskSuspend\n        #define vTaskResume                           MPU_vTaskResume\n        #define xTaskGetTickCount                     MPU_xTaskGetTickCount\n        #define uxTaskGetNumberOfTasks                MPU_uxTaskGetNumberOfTasks\n        #define uxTaskGetStackHighWaterMark           MPU_uxTaskGetStackHighWaterMark\n        #define uxTaskGetStackHighWaterMark2          MPU_uxTaskGetStackHighWaterMark2\n        #define vTaskSetApplicationTaskTag            MPU_vTaskSetApplicationTaskTag\n        #define xTaskGetApplicationTaskTag            MPU_xTaskGetApplicationTaskTag\n        #define vTaskSetThreadLocalStoragePointer     MPU_vTaskSetThreadLocalStoragePointer\n        #define pvTaskGetThreadLocalStoragePointer    MPU_pvTaskGetThreadLocalStoragePointer\n        #define xTaskGetIdleTaskHandle                MPU_xTaskGetIdleTaskHandle\n        #define uxTaskGetSystemState                  MPU_uxTaskGetSystemState\n        #define ulTaskGetIdleRunTimeCounter           MPU_ulTaskGetIdleRunTimeCounter\n        #define ulTaskGetIdleRunTimePercent           MPU_ulTaskGetIdleRunTimePercent\n        #define xTaskGenericNotify                    MPU_xTaskGenericNotify\n        #define xTaskGenericNotifyWait                MPU_xTaskGenericNotifyWait\n        #define ulTaskGenericNotifyTake               MPU_ulTaskGenericNotifyTake\n        #define xTaskGenericNotifyStateClear          MPU_xTaskGenericNotifyStateClear\n        #define ulTaskGenericNotifyValueClear         MPU_ulTaskGenericNotifyValueClear\n        #define vTaskSetTimeOutState                  MPU_vTaskSetTimeOutState\n        #define xTaskCheckForTimeOut                  MPU_xTaskCheckForTimeOut\n        #define xTaskGetCurrentTaskHandle             MPU_xTaskGetCurrentTaskHandle\n        #define xTaskGetSchedulerState                MPU_xTaskGetSchedulerState\n\n        #if ( configUSE_MPU_WRAPPERS_V1 == 0 )\n            #define ulTaskGetRunTimeCounter           MPU_ulTaskGetRunTimeCounter\n            #define ulTaskGetRunTimePercent           MPU_ulTaskGetRunTimePercent\n        #endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */\n\n/* Privileged only wrappers for Task APIs. These are needed so that\n * the application can use opaque handles maintained in mpu_wrappers.c\n * with all the APIs. */\n        #define xTaskCreate                              MPU_xTaskCreate\n        #define xTaskCreateStatic                        MPU_xTaskCreateStatic\n        #define vTaskDelete                              MPU_vTaskDelete\n        #define vTaskPrioritySet                         MPU_vTaskPrioritySet\n        #define xTaskGetHandle                           MPU_xTaskGetHandle\n        #define xTaskCallApplicationTaskHook             MPU_xTaskCallApplicationTaskHook\n\n        #if ( configUSE_MPU_WRAPPERS_V1 == 0 )\n            #define pcTaskGetName                        MPU_pcTaskGetName\n            #define xTaskCreateRestricted                MPU_xTaskCreateRestricted\n            #define xTaskCreateRestrictedStatic          MPU_xTaskCreateRestrictedStatic\n            #define vTaskAllocateMPURegions              MPU_vTaskAllocateMPURegions\n            #define xTaskGetStaticBuffers                MPU_xTaskGetStaticBuffers\n            #define uxTaskPriorityGetFromISR             MPU_uxTaskPriorityGetFromISR\n            #define uxTaskBasePriorityGet                MPU_uxTaskBasePriorityGet\n            #define uxTaskBasePriorityGetFromISR         MPU_uxTaskBasePriorityGetFromISR\n            #define xTaskResumeFromISR                   MPU_xTaskResumeFromISR\n            #define xTaskGetApplicationTaskTagFromISR    MPU_xTaskGetApplicationTaskTagFromISR\n            #define xTaskGenericNotifyFromISR            MPU_xTaskGenericNotifyFromISR\n            #define vTaskGenericNotifyGiveFromISR        MPU_vTaskGenericNotifyGiveFromISR\n        #endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */\n\n/* Map standard queue.h API functions to the MPU equivalents. */\n        #define xQueueGenericSend            MPU_xQueueGenericSend\n        #define xQueueReceive                MPU_xQueueReceive\n        #define xQueuePeek                   MPU_xQueuePeek\n        #define xQueueSemaphoreTake          MPU_xQueueSemaphoreTake\n        #define uxQueueMessagesWaiting       MPU_uxQueueMessagesWaiting\n        #define uxQueueSpacesAvailable       MPU_uxQueueSpacesAvailable\n        #define xQueueGetMutexHolder         MPU_xQueueGetMutexHolder\n        #define xQueueTakeMutexRecursive     MPU_xQueueTakeMutexRecursive\n        #define xQueueGiveMutexRecursive     MPU_xQueueGiveMutexRecursive\n        #define xQueueAddToSet               MPU_xQueueAddToSet\n        #define xQueueSelectFromSet          MPU_xQueueSelectFromSet\n\n        #if ( configQUEUE_REGISTRY_SIZE > 0 )\n            #define vQueueAddToRegistry      MPU_vQueueAddToRegistry\n            #define vQueueUnregisterQueue    MPU_vQueueUnregisterQueue\n            #define pcQueueGetName           MPU_pcQueueGetName\n        #endif /* #if ( configQUEUE_REGISTRY_SIZE > 0 ) */\n\n/* Privileged only wrappers for Queue APIs. These are needed so that\n * the application can use opaque handles maintained in mpu_wrappers.c\n * with all the APIs. */\n        #define vQueueDelete                           MPU_vQueueDelete\n        #define xQueueCreateMutex                      MPU_xQueueCreateMutex\n        #define xQueueCreateMutexStatic                MPU_xQueueCreateMutexStatic\n        #define xQueueCreateCountingSemaphore          MPU_xQueueCreateCountingSemaphore\n        #define xQueueCreateCountingSemaphoreStatic    MPU_xQueueCreateCountingSemaphoreStatic\n        #define xQueueGenericCreate                    MPU_xQueueGenericCreate\n        #define xQueueGenericCreateStatic              MPU_xQueueGenericCreateStatic\n        #define xQueueGenericReset                     MPU_xQueueGenericReset\n        #define xQueueCreateSet                        MPU_xQueueCreateSet\n        #define xQueueRemoveFromSet                    MPU_xQueueRemoveFromSet\n\n        #if ( configUSE_MPU_WRAPPERS_V1 == 0 )\n            #define xQueueGenericGetStaticBuffers      MPU_xQueueGenericGetStaticBuffers\n            #define xQueueGenericSendFromISR           MPU_xQueueGenericSendFromISR\n            #define xQueueGiveFromISR                  MPU_xQueueGiveFromISR\n            #define xQueuePeekFromISR                  MPU_xQueuePeekFromISR\n            #define xQueueReceiveFromISR               MPU_xQueueReceiveFromISR\n            #define xQueueIsQueueEmptyFromISR          MPU_xQueueIsQueueEmptyFromISR\n            #define xQueueIsQueueFullFromISR           MPU_xQueueIsQueueFullFromISR\n            #define uxQueueMessagesWaitingFromISR      MPU_uxQueueMessagesWaitingFromISR\n            #define xQueueGetMutexHolderFromISR        MPU_xQueueGetMutexHolderFromISR\n            #define xQueueSelectFromSetFromISR         MPU_xQueueSelectFromSetFromISR\n        #endif /* if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */\n\n/* Map standard timer.h API functions to the MPU equivalents. */\n        #define pvTimerGetTimerID                 MPU_pvTimerGetTimerID\n        #define vTimerSetTimerID                  MPU_vTimerSetTimerID\n        #define xTimerIsTimerActive               MPU_xTimerIsTimerActive\n        #define xTimerGetTimerDaemonTaskHandle    MPU_xTimerGetTimerDaemonTaskHandle\n        #define xTimerGenericCommandFromTask      MPU_xTimerGenericCommandFromTask\n        #define pcTimerGetName                    MPU_pcTimerGetName\n        #define vTimerSetReloadMode               MPU_vTimerSetReloadMode\n        #define uxTimerGetReloadMode              MPU_uxTimerGetReloadMode\n        #define xTimerGetPeriod                   MPU_xTimerGetPeriod\n        #define xTimerGetExpiryTime               MPU_xTimerGetExpiryTime\n\n/* Privileged only wrappers for Timer APIs. These are needed so that\n * the application can use opaque handles maintained in mpu_wrappers.c\n * with all the APIs. */\n        #if ( configUSE_MPU_WRAPPERS_V1 == 0 )\n            #define xTimerGetReloadMode            MPU_xTimerGetReloadMode\n            #define xTimerCreate                   MPU_xTimerCreate\n            #define xTimerCreateStatic             MPU_xTimerCreateStatic\n            #define xTimerGetStaticBuffer          MPU_xTimerGetStaticBuffer\n            #define xTimerGenericCommandFromISR    MPU_xTimerGenericCommandFromISR\n        #endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */\n\n/* Map standard event_group.h API functions to the MPU equivalents. */\n        #define xEventGroupWaitBits          MPU_xEventGroupWaitBits\n        #define xEventGroupClearBits         MPU_xEventGroupClearBits\n        #define xEventGroupSetBits           MPU_xEventGroupSetBits\n        #define xEventGroupSync              MPU_xEventGroupSync\n\n        #if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) )\n            #define uxEventGroupGetNumber    MPU_uxEventGroupGetNumber\n            #define vEventGroupSetNumber     MPU_vEventGroupSetNumber\n        #endif /* #if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) ) */\n\n/* Privileged only wrappers for Event Group APIs. These are needed so that\n * the application can use opaque handles maintained in mpu_wrappers.c\n * with all the APIs. */\n        #define xEventGroupCreate                  MPU_xEventGroupCreate\n        #define xEventGroupCreateStatic            MPU_xEventGroupCreateStatic\n        #define vEventGroupDelete                  MPU_vEventGroupDelete\n\n        #if ( configUSE_MPU_WRAPPERS_V1 == 0 )\n            #define xEventGroupGetStaticBuffer     MPU_xEventGroupGetStaticBuffer\n            #define xEventGroupClearBitsFromISR    MPU_xEventGroupClearBitsFromISR\n            #define xEventGroupSetBitsFromISR      MPU_xEventGroupSetBitsFromISR\n            #define xEventGroupGetBitsFromISR      MPU_xEventGroupGetBitsFromISR\n        #endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */\n\n/* Map standard message/stream_buffer.h API functions to the MPU\n * equivalents. */\n        #define xStreamBufferSend                      MPU_xStreamBufferSend\n        #define xStreamBufferReceive                   MPU_xStreamBufferReceive\n        #define xStreamBufferIsFull                    MPU_xStreamBufferIsFull\n        #define xStreamBufferIsEmpty                   MPU_xStreamBufferIsEmpty\n        #define xStreamBufferSpacesAvailable           MPU_xStreamBufferSpacesAvailable\n        #define xStreamBufferBytesAvailable            MPU_xStreamBufferBytesAvailable\n        #define xStreamBufferSetTriggerLevel           MPU_xStreamBufferSetTriggerLevel\n        #define xStreamBufferNextMessageLengthBytes    MPU_xStreamBufferNextMessageLengthBytes\n\n/* Privileged only wrappers for Stream Buffer APIs. These are needed so that\n * the application can use opaque handles maintained in mpu_wrappers.c\n * with all the APIs. */\n\n        #define xStreamBufferGenericCreate                  MPU_xStreamBufferGenericCreate\n        #define xStreamBufferGenericCreateStatic            MPU_xStreamBufferGenericCreateStatic\n        #define vStreamBufferDelete                         MPU_vStreamBufferDelete\n        #define xStreamBufferReset                          MPU_xStreamBufferReset\n\n        #if ( configUSE_MPU_WRAPPERS_V1 == 0 )\n            #define xStreamBufferGetStaticBuffers           MPU_xStreamBufferGetStaticBuffers\n            #define xStreamBufferSendFromISR                MPU_xStreamBufferSendFromISR\n            #define xStreamBufferReceiveFromISR             MPU_xStreamBufferReceiveFromISR\n            #define xStreamBufferSendCompletedFromISR       MPU_xStreamBufferSendCompletedFromISR\n            #define xStreamBufferReceiveCompletedFromISR    MPU_xStreamBufferReceiveCompletedFromISR\n            #define xStreamBufferResetFromISR               MPU_xStreamBufferResetFromISR\n        #endif /* #if ( configUSE_MPU_WRAPPERS_V1 == 0 ) */\n\n        #if ( ( configUSE_MPU_WRAPPERS_V1 == 0 ) && ( configENABLE_ACCESS_CONTROL_LIST == 1 ) )\n\n            #define vGrantAccessToTask( xTask, xTaskToGrantAccess )                        vGrantAccessToKernelObject( ( xTask ), ( int32_t ) ( xTaskToGrantAccess ) )\n            #define vRevokeAccessToTask( xTask, xTaskToRevokeAccess )                      vRevokeAccessToKernelObject( ( xTask ), ( int32_t ) ( xTaskToRevokeAccess ) )\n\n            #define vGrantAccessToSemaphore( xTask, xSemaphoreToGrantAccess )              vGrantAccessToKernelObject( ( xTask ), ( int32_t ) ( xSemaphoreToGrantAccess ) )\n            #define vRevokeAccessToSemaphore( xTask, xSemaphoreToRevokeAccess )            vRevokeAccessToKernelObject( ( xTask ), ( int32_t ) ( xSemaphoreToRevokeAccess ) )\n\n            #define vGrantAccessToQueue( xTask, xQueueToGrantAccess )                      vGrantAccessToKernelObject( ( xTask ), ( int32_t ) ( xQueueToGrantAccess ) )\n            #define vRevokeAccessToQueue( xTask, xQueueToRevokeAccess )                    vRevokeAccessToKernelObject( ( xTask ), ( int32_t ) ( xQueueToRevokeAccess ) )\n\n            #define vGrantAccessToQueueSet( xTask, xQueueSetToGrantAccess )                vGrantAccessToKernelObject( ( xTask ), ( int32_t ) ( xQueueSetToGrantAccess ) )\n            #define vRevokeAccessToQueueSet( xTask, xQueueSetToRevokeAccess )              vRevokeAccessToKernelObject( ( xTask ), ( int32_t ) ( xQueueSetToRevokeAccess ) )\n\n            #define vGrantAccessToEventGroup( xTask, xEventGroupToGrantAccess )            vGrantAccessToKernelObject( ( xTask ), ( int32_t ) ( xEventGroupToGrantAccess ) )\n            #define vRevokeAccessToEventGroup( xTask, xEventGroupToRevokeAccess )          vRevokeAccessToKernelObject( ( xTask ), ( int32_t ) ( xEventGroupToRevokeAccess ) )\n\n            #define vGrantAccessToStreamBuffer( xTask, xStreamBufferToGrantAccess )        vGrantAccessToKernelObject( ( xTask ), ( int32_t ) ( xStreamBufferToGrantAccess ) )\n            #define vRevokeAccessToStreamBuffer( xTask, xStreamBufferToRevokeAccess )      vRevokeAccessToKernelObject( ( xTask ), ( int32_t ) ( xStreamBufferToRevokeAccess ) )\n\n            #define vGrantAccessToMessageBuffer( xTask, xMessageBufferToGrantAccess )      vGrantAccessToKernelObject( ( xTask ), ( int32_t ) ( xMessageBufferToGrantAccess ) )\n            #define vRevokeAccessToMessageBuffer( xTask, xMessageBufferToRevokeAccess )    vRevokeAccessToKernelObject( ( xTask ), ( int32_t ) ( xMessageBufferToRevokeAccess ) )\n\n            #define vGrantAccessToTimer( xTask, xTimerToGrantAccess )                      vGrantAccessToKernelObject( ( xTask ), ( int32_t ) ( xTimerToGrantAccess ) )\n            #define vRevokeAccessToTimer( xTask, xTimerToRevokeAccess )                    vRevokeAccessToKernelObject( ( xTask ), ( int32_t ) ( xTimerToRevokeAccess ) )\n\n        #endif /* #if ( ( configUSE_MPU_WRAPPERS_V1 == 0 ) && ( configENABLE_ACCESS_CONTROL_LIST == 1 ) ) */\n\n    #endif /* MPU_WRAPPERS_INCLUDED_FROM_API_FILE */\n\n    #define PRIVILEGED_FUNCTION     __attribute__( ( section( \"privileged_functions\" ) ) )\n    #define PRIVILEGED_DATA         __attribute__( ( section( \"privileged_data\" ) ) )\n    #define FREERTOS_SYSTEM_CALL    __attribute__( ( section( \"freertos_system_calls\" ) ) )\n\n#else /* portUSING_MPU_WRAPPERS */\n\n    #define PRIVILEGED_FUNCTION\n    #define PRIVILEGED_DATA\n    #define FREERTOS_SYSTEM_CALL\n\n#endif /* portUSING_MPU_WRAPPERS */\n\n\n#endif /* MPU_WRAPPERS_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/newlib-freertos.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n#ifndef INC_NEWLIB_FREERTOS_H\n#define INC_NEWLIB_FREERTOS_H\n\n/* Note Newlib support has been included by popular demand, but is not\n * used by the FreeRTOS maintainers themselves.  FreeRTOS is not\n * responsible for resulting newlib operation.  User must be familiar with\n * newlib and must provide system-wide implementations of the necessary\n * stubs. Be warned that (at the time of writing) the current newlib design\n * implements a system-wide malloc() that must be provided with locks.\n *\n * See the third party link http://www.nadler.com/embedded/newlibAndFreeRTOS.html\n * for additional information. */\n\n#include <reent.h>\n\n#define configUSE_C_RUNTIME_TLS_SUPPORT    1\n\n#ifndef configTLS_BLOCK_TYPE\n    #define configTLS_BLOCK_TYPE           struct _reent\n#endif\n\n#ifndef configINIT_TLS_BLOCK\n    #define configINIT_TLS_BLOCK( xTLSBlock, pxTopOfStack )    _REENT_INIT_PTR( &( xTLSBlock ) )\n#endif\n\n#ifndef configSET_TLS_BLOCK\n    #define configSET_TLS_BLOCK( xTLSBlock )    ( _impure_ptr = &( xTLSBlock ) )\n#endif\n\n#ifndef configDEINIT_TLS_BLOCK\n    #define configDEINIT_TLS_BLOCK( xTLSBlock )    _reclaim_reent( &( xTLSBlock ) )\n#endif\n\n#endif /* INC_NEWLIB_FREERTOS_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/picolibc-freertos.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n#ifndef INC_PICOLIBC_FREERTOS_H\n#define INC_PICOLIBC_FREERTOS_H\n\n/* Use picolibc TLS support to allocate space for __thread variables,\n * initialize them at thread creation and set the TLS context at\n * thread switch time.\n *\n * See the picolibc TLS docs:\n * https://github.com/picolibc/picolibc/blob/main/doc/tls.md\n * for additional information. */\n\n#include <picotls.h>\n\n#define configUSE_C_RUNTIME_TLS_SUPPORT    1\n\n#define configTLS_BLOCK_TYPE               void *\n\n#define picolibcTLS_SIZE                   ( ( portPOINTER_SIZE_TYPE ) _tls_size() )\n#define picolibcSTACK_ALIGNMENT_MASK       ( ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK )\n\n#if __PICOLIBC_MAJOR__ > 1 || __PICOLIBC_MINOR__ >= 8\n\n/* Picolibc 1.8 and newer have explicit alignment values provided\n * by the _tls_align() inline */\n    #define picolibcTLS_ALIGNMENT_MASK    ( ( portPOINTER_SIZE_TYPE ) ( _tls_align() - 1 ) )\n#else\n\n/* For older Picolibc versions, use the general port alignment value */\n    #define picolibcTLS_ALIGNMENT_MASK    ( ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK )\n#endif\n\n/* Allocate thread local storage block off the end of the\n * stack. The picolibcTLS_SIZE macro returns the size (in\n * bytes) of the total TLS area used by the application.\n * Calculate the top of stack address. */\n#if ( portSTACK_GROWTH < 0 )\n\n    #define configINIT_TLS_BLOCK( xTLSBlock, pxTopOfStack )                                  \\\n    do {                                                                                     \\\n        xTLSBlock = ( void * ) ( ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack ) -              \\\n                                   picolibcTLS_SIZE ) &                                      \\\n                                 ~picolibcTLS_ALIGNMENT_MASK );                              \\\n        pxTopOfStack = ( StackType_t * ) ( ( ( ( portPOINTER_SIZE_TYPE ) xTLSBlock ) - 1 ) & \\\n                                           ~picolibcSTACK_ALIGNMENT_MASK );                  \\\n        _init_tls( xTLSBlock );                                                              \\\n    } while( 0 )\n#else /* portSTACK_GROWTH */\n    #define configINIT_TLS_BLOCK( xTLSBlock, pxTopOfStack )                                          \\\n    do {                                                                                             \\\n        xTLSBlock = ( void * ) ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack +                          \\\n                                   picolibcTLS_ALIGNMENT_MASK ) & ~picolibcTLS_ALIGNMENT_MASK );     \\\n        pxTopOfStack = ( StackType_t * ) ( ( ( ( ( portPOINTER_SIZE_TYPE ) xTLSBlock ) +             \\\n                                               picolibcTLS_SIZE ) + picolibcSTACK_ALIGNMENT_MASK ) & \\\n                                           ~picolibcSTACK_ALIGNMENT_MASK );                          \\\n        _init_tls( xTLSBlock );                                                                      \\\n    } while( 0 )\n#endif /* portSTACK_GROWTH */\n\n#define configSET_TLS_BLOCK( xTLSBlock )    _set_tls( xTLSBlock )\n\n#define configDEINIT_TLS_BLOCK( xTLSBlock )\n\n#endif /* INC_PICOLIBC_FREERTOS_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/portable.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n/*-----------------------------------------------------------\n * Portable layer API.  Each function must be defined for each port.\n *----------------------------------------------------------*/\n\n#ifndef PORTABLE_H\n#define PORTABLE_H\n\n/* Each FreeRTOS port has a unique portmacro.h header file.  Originally a\n * pre-processor definition was used to ensure the pre-processor found the correct\n * portmacro.h file for the port being used.  That scheme was deprecated in favour\n * of setting the compiler's include path such that it found the correct\n * portmacro.h file - removing the need for the constant and allowing the\n * portmacro.h file to be located anywhere in relation to the port being used.\n * Purely for reasons of backward compatibility the old method is still valid, but\n * to make it clear that new projects should not use it, support for the port\n * specific constants has been moved into the deprecated_definitions.h header\n * file. */\n\n/* If portENTER_CRITICAL is not defined then including deprecated_definitions.h\n * did not result in a portmacro.h header file being included - and it should be\n * included here.  In this case the path to the correct portmacro.h header file\n * must be set in the compiler's include path. */\n#ifndef portENTER_CRITICAL\n#include \"portmacro.h\"\n#endif\n\n#if portBYTE_ALIGNMENT == 32\n#define portBYTE_ALIGNMENT_MASK (0x001f)\n#elif portBYTE_ALIGNMENT == 16\n#define portBYTE_ALIGNMENT_MASK (0x000f)\n#elif portBYTE_ALIGNMENT == 8\n#define portBYTE_ALIGNMENT_MASK (0x0007)\n#elif portBYTE_ALIGNMENT == 4\n#define portBYTE_ALIGNMENT_MASK (0x0003)\n#elif portBYTE_ALIGNMENT == 2\n#define portBYTE_ALIGNMENT_MASK (0x0001)\n#elif portBYTE_ALIGNMENT == 1\n#define portBYTE_ALIGNMENT_MASK (0x0000)\n#else /* if portBYTE_ALIGNMENT == 32 */\n#error \"Invalid portBYTE_ALIGNMENT definition\"\n#endif /* if portBYTE_ALIGNMENT == 32 */\n\n#ifndef portUSING_MPU_WRAPPERS\n#define portUSING_MPU_WRAPPERS 0\n#endif\n\n#ifndef portNUM_CONFIGURABLE_REGIONS\n#define portNUM_CONFIGURABLE_REGIONS 1\n#endif\n\n#ifndef portHAS_STACK_OVERFLOW_CHECKING\n#define portHAS_STACK_OVERFLOW_CHECKING 0\n#endif\n\n#ifndef portARCH_NAME\n#define portARCH_NAME NULL\n#endif\n\n#ifndef configSTACK_DEPTH_TYPE\n#define configSTACK_DEPTH_TYPE StackType_t\n#endif\n\n#ifndef configSTACK_ALLOCATION_FROM_SEPARATE_HEAP\n/* Defaults to 0 for backward compatibility. */\n#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0\n#endif\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n/* *INDENT-ON* */\n\n#include \"mpu_wrappers.h\"\n\n/*\n * Setup the stack of a new task so it is ready to be placed under the\n * scheduler control.  The registers have to be placed on the stack in\n * the order that the port expects to find them.\n *\n */\n#if (portUSING_MPU_WRAPPERS == 1)\n#if (portHAS_STACK_OVERFLOW_CHECKING == 1)\nStackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, StackType_t *pxEndOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged,\n                                   xMPU_SETTINGS *xMPUSettings) PRIVILEGED_FUNCTION;\n#else\nStackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters, BaseType_t xRunPrivileged, xMPU_SETTINGS *xMPUSettings) PRIVILEGED_FUNCTION;\n#endif /* if ( portHAS_STACK_OVERFLOW_CHECKING == 1 ) */\n#else  /* if ( portUSING_MPU_WRAPPERS == 1 ) */\n#if (portHAS_STACK_OVERFLOW_CHECKING == 1)\nStackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, StackType_t *pxEndOfStack, TaskFunction_t pxCode, void *pvParameters) PRIVILEGED_FUNCTION;\n#else\nStackType_t *pxPortInitialiseStack(StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters) PRIVILEGED_FUNCTION;\n#endif\n#endif /* if ( portUSING_MPU_WRAPPERS == 1 ) */\n\n/* Used by heap_5.c to define the start address and size of each memory region\n * that together comprise the total FreeRTOS heap space. */\ntypedef struct HeapRegion {\n  uint8_t *pucStartAddress;\n  size_t   xSizeInBytes;\n} HeapRegion_t;\n\n/* Used to pass information about the heap out of vPortGetHeapStats(). */\ntypedef struct xHeapStats {\n  size_t xAvailableHeapSpaceInBytes;      /* The total heap size currently available - this is the sum of all the free blocks, not the largest block that can be allocated. */\n  size_t xSizeOfLargestFreeBlockInBytes;  /* The maximum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */\n  size_t xSizeOfSmallestFreeBlockInBytes; /* The minimum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */\n  size_t xNumberOfFreeBlocks;             /* The number of free memory blocks within the heap at the time vPortGetHeapStats() is called. */\n  size_t xMinimumEverFreeBytesRemaining;  /* The minimum amount of total free memory (sum of all free blocks) there has been in the heap since the system booted. */\n  size_t xNumberOfSuccessfulAllocations;  /* The number of calls to pvPortMalloc() that have returned a valid memory block. */\n  size_t xNumberOfSuccessfulFrees;        /* The number of calls to vPortFree() that has successfully freed a block of memory. */\n} HeapStats_t;\n\n/*\n * Used to define multiple heap regions for use by heap_5.c.  This function\n * must be called before any calls to pvPortMalloc() - not creating a task,\n * queue, semaphore, mutex, software timer, event group, etc. will result in\n * pvPortMalloc being called.\n *\n * pxHeapRegions passes in an array of HeapRegion_t structures - each of which\n * defines a region of memory that can be used as the heap.  The array is\n * terminated by a HeapRegions_t structure that has a size of 0.  The region\n * with the lowest start address must appear first in the array.\n */\nvoid vPortDefineHeapRegions(const HeapRegion_t *const pxHeapRegions) PRIVILEGED_FUNCTION;\n\n/*\n * Returns a HeapStats_t structure filled with information about the current\n * heap state.\n */\nvoid vPortGetHeapStats(HeapStats_t *pxHeapStats);\n\n/*\n * Map to the memory management routines required for the port.\n */\nvoid  *pvPortMalloc(size_t xWantedSize) PRIVILEGED_FUNCTION;\nvoid  *pvPortCalloc(size_t xNum, size_t xSize) PRIVILEGED_FUNCTION;\nvoid   vPortFree(void *pv) PRIVILEGED_FUNCTION;\nvoid   vPortInitialiseBlocks(void) PRIVILEGED_FUNCTION;\nsize_t xPortGetFreeHeapSize(void) PRIVILEGED_FUNCTION;\nsize_t xPortGetMinimumEverFreeHeapSize(void) PRIVILEGED_FUNCTION;\n\n#if (configSTACK_ALLOCATION_FROM_SEPARATE_HEAP == 1)\nvoid *pvPortMallocStack(size_t xSize) PRIVILEGED_FUNCTION;\nvoid  vPortFreeStack(void *pv) PRIVILEGED_FUNCTION;\n#else\n#define pvPortMallocStack pvPortMalloc\n#define vPortFreeStack    vPortFree\n#endif\n\n/*\n * This function resets the internal state of the heap module. It must be called\n * by the application before restarting the scheduler.\n */\nvoid vPortHeapResetState(void) PRIVILEGED_FUNCTION;\n\n#if (configUSE_MALLOC_FAILED_HOOK == 1)\n\n/**\n * task.h\n * @code{c}\n * void vApplicationMallocFailedHook( void )\n * @endcode\n *\n * This hook function is called when allocation failed.\n */\nvoid vApplicationMallocFailedHook(void);\n#endif\n\n/*\n * Setup the hardware ready for the scheduler to take control.  This generally\n * sets up a tick interrupt and sets timers for the correct tick frequency.\n */\nBaseType_t xPortStartScheduler(void) PRIVILEGED_FUNCTION;\n\n/*\n * Undo any hardware/ISR setup that was performed by xPortStartScheduler() so\n * the hardware is left in its original condition after the scheduler stops\n * executing.\n */\nvoid vPortEndScheduler(void) PRIVILEGED_FUNCTION;\n\n/*\n * The structures and methods of manipulating the MPU are contained within the\n * port layer.\n *\n * Fills the xMPUSettings structure with the memory region information\n * contained in xRegions.\n */\n#if (portUSING_MPU_WRAPPERS == 1)\nstruct xMEMORY_REGION;\nvoid vPortStoreTaskMPUSettings(xMPU_SETTINGS *xMPUSettings, const struct xMEMORY_REGION *const xRegions, StackType_t *pxBottomOfStack, configSTACK_DEPTH_TYPE uxStackDepth) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * @brief Checks if the calling task is authorized to access the given buffer.\n *\n * @param pvBuffer The buffer which the calling task wants to access.\n * @param ulBufferLength The length of the pvBuffer.\n * @param ulAccessRequested The permissions that the calling task wants.\n *\n * @return pdTRUE if the calling task is authorized to access the buffer,\n *         pdFALSE otherwise.\n */\n#if (portUSING_MPU_WRAPPERS == 1)\nBaseType_t xPortIsAuthorizedToAccessBuffer(const void *pvBuffer, uint32_t ulBufferLength, uint32_t ulAccessRequested) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * @brief Checks if the calling task is authorized to access the given kernel object.\n *\n * @param lInternalIndexOfKernelObject The index of the kernel object in the kernel\n *                                     object handle pool.\n *\n * @return pdTRUE if the calling task is authorized to access the kernel object,\n *         pdFALSE otherwise.\n */\n#if ((portUSING_MPU_WRAPPERS == 1) && (configUSE_MPU_WRAPPERS_V1 == 0))\n\nBaseType_t xPortIsAuthorizedToAccessKernelObject(int32_t lInternalIndexOfKernelObject) PRIVILEGED_FUNCTION;\n\n#endif\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n}\n#endif\n/* *INDENT-ON* */\n\n#endif /* PORTABLE_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/projdefs.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n#ifndef PROJDEFS_H\n#define PROJDEFS_H\n\n/*\n * Defines the prototype to which task functions must conform.  Defined in this\n * file to ensure the type is known before portable.h is included.\n */\ntypedef void (* TaskFunction_t)( void * arg );\n\n/* Converts a time in milliseconds to a time in ticks.  This macro can be\n * overridden by a macro of the same name defined in FreeRTOSConfig.h in case the\n * definition here is not suitable for your application. */\n#ifndef pdMS_TO_TICKS\n    #define pdMS_TO_TICKS( xTimeInMs )    ( ( TickType_t ) ( ( ( uint64_t ) ( xTimeInMs ) * ( uint64_t ) configTICK_RATE_HZ ) / ( uint64_t ) 1000U ) )\n#endif\n\n/* Converts a time in ticks to a time in milliseconds.  This macro can be\n * overridden by a macro of the same name defined in FreeRTOSConfig.h in case the\n * definition here is not suitable for your application. */\n#ifndef pdTICKS_TO_MS\n    #define pdTICKS_TO_MS( xTimeInTicks )    ( ( TickType_t ) ( ( ( uint64_t ) ( xTimeInTicks ) * ( uint64_t ) 1000U ) / ( uint64_t ) configTICK_RATE_HZ ) )\n#endif\n\n#define pdFALSE                                  ( ( BaseType_t ) 0 )\n#define pdTRUE                                   ( ( BaseType_t ) 1 )\n#define pdFALSE_SIGNED                           ( ( BaseType_t ) 0 )\n#define pdTRUE_SIGNED                            ( ( BaseType_t ) 1 )\n#define pdFALSE_UNSIGNED                         ( ( UBaseType_t ) 0 )\n#define pdTRUE_UNSIGNED                          ( ( UBaseType_t ) 1 )\n\n#define pdPASS                                   ( pdTRUE )\n#define pdFAIL                                   ( pdFALSE )\n#define errQUEUE_EMPTY                           ( ( BaseType_t ) 0 )\n#define errQUEUE_FULL                            ( ( BaseType_t ) 0 )\n\n/* FreeRTOS error definitions. */\n#define errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY    ( -1 )\n#define errQUEUE_BLOCKED                         ( -4 )\n#define errQUEUE_YIELD                           ( -5 )\n\n/* Macros used for basic data corruption checks. */\n#ifndef configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES\n    #define configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES    0\n#endif\n\n#if ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )\n    #define pdINTEGRITY_CHECK_VALUE    0x5a5a\n#elif ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_32_BITS )\n    #define pdINTEGRITY_CHECK_VALUE    0x5a5a5a5aUL\n#elif ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_64_BITS )\n    #define pdINTEGRITY_CHECK_VALUE    0x5a5a5a5a5a5a5a5aULL\n#else\n    #error configTICK_TYPE_WIDTH_IN_BITS set to unsupported tick type width.\n#endif\n\n/* The following errno values are used by FreeRTOS+ components, not FreeRTOS\n * itself. */\n#define pdFREERTOS_ERRNO_NONE             0   /* No errors */\n#define pdFREERTOS_ERRNO_ENOENT           2   /* No such file or directory */\n#define pdFREERTOS_ERRNO_EINTR            4   /* Interrupted system call */\n#define pdFREERTOS_ERRNO_EIO              5   /* I/O error */\n#define pdFREERTOS_ERRNO_ENXIO            6   /* No such device or address */\n#define pdFREERTOS_ERRNO_EBADF            9   /* Bad file number */\n#define pdFREERTOS_ERRNO_EAGAIN           11  /* No more processes */\n#define pdFREERTOS_ERRNO_EWOULDBLOCK      11  /* Operation would block */\n#define pdFREERTOS_ERRNO_ENOMEM           12  /* Not enough memory */\n#define pdFREERTOS_ERRNO_EACCES           13  /* Permission denied */\n#define pdFREERTOS_ERRNO_EFAULT           14  /* Bad address */\n#define pdFREERTOS_ERRNO_EBUSY            16  /* Mount device busy */\n#define pdFREERTOS_ERRNO_EEXIST           17  /* File exists */\n#define pdFREERTOS_ERRNO_EXDEV            18  /* Cross-device link */\n#define pdFREERTOS_ERRNO_ENODEV           19  /* No such device */\n#define pdFREERTOS_ERRNO_ENOTDIR          20  /* Not a directory */\n#define pdFREERTOS_ERRNO_EISDIR           21  /* Is a directory */\n#define pdFREERTOS_ERRNO_EINVAL           22  /* Invalid argument */\n#define pdFREERTOS_ERRNO_ENOSPC           28  /* No space left on device */\n#define pdFREERTOS_ERRNO_ESPIPE           29  /* Illegal seek */\n#define pdFREERTOS_ERRNO_EROFS            30  /* Read only file system */\n#define pdFREERTOS_ERRNO_EUNATCH          42  /* Protocol driver not attached */\n#define pdFREERTOS_ERRNO_EBADE            50  /* Invalid exchange */\n#define pdFREERTOS_ERRNO_EFTYPE           79  /* Inappropriate file type or format */\n#define pdFREERTOS_ERRNO_ENMFILE          89  /* No more files */\n#define pdFREERTOS_ERRNO_ENOTEMPTY        90  /* Directory not empty */\n#define pdFREERTOS_ERRNO_ENAMETOOLONG     91  /* File or path name too long */\n#define pdFREERTOS_ERRNO_EOPNOTSUPP       95  /* Operation not supported on transport endpoint */\n#define pdFREERTOS_ERRNO_EAFNOSUPPORT     97  /* Address family not supported by protocol */\n#define pdFREERTOS_ERRNO_ENOBUFS          105 /* No buffer space available */\n#define pdFREERTOS_ERRNO_ENOPROTOOPT      109 /* Protocol not available */\n#define pdFREERTOS_ERRNO_EADDRINUSE       112 /* Address already in use */\n#define pdFREERTOS_ERRNO_ETIMEDOUT        116 /* Connection timed out */\n#define pdFREERTOS_ERRNO_EINPROGRESS      119 /* Connection already in progress */\n#define pdFREERTOS_ERRNO_EALREADY         120 /* Socket already connected */\n#define pdFREERTOS_ERRNO_EADDRNOTAVAIL    125 /* Address not available */\n#define pdFREERTOS_ERRNO_EISCONN          127 /* Socket is already connected */\n#define pdFREERTOS_ERRNO_ENOTCONN         128 /* Socket is not connected */\n#define pdFREERTOS_ERRNO_ENOMEDIUM        135 /* No medium inserted */\n#define pdFREERTOS_ERRNO_EILSEQ           138 /* An invalid UTF-16 sequence was encountered. */\n#define pdFREERTOS_ERRNO_ECANCELED        140 /* Operation canceled. */\n\n/* The following endian values are used by FreeRTOS+ components, not FreeRTOS\n * itself. */\n#define pdFREERTOS_LITTLE_ENDIAN          0\n#define pdFREERTOS_BIG_ENDIAN             1\n\n/* Re-defining endian values for generic naming. */\n#define pdLITTLE_ENDIAN                   pdFREERTOS_LITTLE_ENDIAN\n#define pdBIG_ENDIAN                      pdFREERTOS_BIG_ENDIAN\n\n\n#endif /* PROJDEFS_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/queue.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n\n#ifndef QUEUE_H\n#define QUEUE_H\n\n#ifndef INC_FREERTOS_H\n    #error \"include FreeRTOS.h\" must appear in source files before \"include queue.h\"\n#endif\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n    extern \"C\" {\n#endif\n/* *INDENT-ON* */\n\n#include \"task.h\"\n\n/**\n * Type by which queues are referenced.  For example, a call to xQueueCreate()\n * returns an QueueHandle_t variable that can then be used as a parameter to\n * xQueueSend(), xQueueReceive(), etc.\n */\nstruct QueueDefinition; /* Using old naming convention so as not to break kernel aware debuggers. */\ntypedef struct QueueDefinition   * QueueHandle_t;\n\n/**\n * Type by which queue sets are referenced.  For example, a call to\n * xQueueCreateSet() returns an xQueueSet variable that can then be used as a\n * parameter to xQueueSelectFromSet(), xQueueAddToSet(), etc.\n */\ntypedef struct QueueDefinition   * QueueSetHandle_t;\n\n/**\n * Queue sets can contain both queues and semaphores, so the\n * QueueSetMemberHandle_t is defined as a type to be used where a parameter or\n * return value can be either an QueueHandle_t or an SemaphoreHandle_t.\n */\ntypedef struct QueueDefinition   * QueueSetMemberHandle_t;\n\n/* For internal use only. */\n#define queueSEND_TO_BACK                     ( ( BaseType_t ) 0 )\n#define queueSEND_TO_FRONT                    ( ( BaseType_t ) 1 )\n#define queueOVERWRITE                        ( ( BaseType_t ) 2 )\n\n/* For internal use only.  These definitions *must* match those in queue.c. */\n#define queueQUEUE_TYPE_BASE                  ( ( uint8_t ) 0U )\n#define queueQUEUE_TYPE_SET                   ( ( uint8_t ) 0U )\n#define queueQUEUE_TYPE_MUTEX                 ( ( uint8_t ) 1U )\n#define queueQUEUE_TYPE_COUNTING_SEMAPHORE    ( ( uint8_t ) 2U )\n#define queueQUEUE_TYPE_BINARY_SEMAPHORE      ( ( uint8_t ) 3U )\n#define queueQUEUE_TYPE_RECURSIVE_MUTEX       ( ( uint8_t ) 4U )\n\n/**\n * queue. h\n * @code{c}\n * QueueHandle_t xQueueCreate(\n *                            UBaseType_t uxQueueLength,\n *                            UBaseType_t uxItemSize\n *                        );\n * @endcode\n *\n * Creates a new queue instance, and returns a handle by which the new queue\n * can be referenced.\n *\n * Internally, within the FreeRTOS implementation, queues use two blocks of\n * memory.  The first block is used to hold the queue's data structures.  The\n * second block is used to hold items placed into the queue.  If a queue is\n * created using xQueueCreate() then both blocks of memory are automatically\n * dynamically allocated inside the xQueueCreate() function.  (see\n * https://www.FreeRTOS.org/a00111.html).  If a queue is created using\n * xQueueCreateStatic() then the application writer must provide the memory that\n * will get used by the queue.  xQueueCreateStatic() therefore allows a queue to\n * be created without using any dynamic memory allocation.\n *\n * https://www.FreeRTOS.org/Embedded-RTOS-Queues.html\n *\n * @param uxQueueLength The maximum number of items that the queue can contain.\n *\n * @param uxItemSize The number of bytes each item in the queue will require.\n * Items are queued by copy, not by reference, so this is the number of bytes\n * that will be copied for each posted item.  Each item on the queue must be\n * the same size.\n *\n * @return If the queue is successfully create then a handle to the newly\n * created queue is returned.  If the queue cannot be created then 0 is\n * returned.\n *\n * Example usage:\n * @code{c}\n * struct AMessage\n * {\n *  char ucMessageID;\n *  char ucData[ 20 ];\n * };\n *\n * void vATask( void *pvParameters )\n * {\n * QueueHandle_t xQueue1, xQueue2;\n *\n *  // Create a queue capable of containing 10 uint32_t values.\n *  xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );\n *  if( xQueue1 == 0 )\n *  {\n *      // Queue was not created and must not be used.\n *  }\n *\n *  // Create a queue capable of containing 10 pointers to AMessage structures.\n *  // These should be passed by pointer as they contain a lot of data.\n *  xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );\n *  if( xQueue2 == 0 )\n *  {\n *      // Queue was not created and must not be used.\n *  }\n *\n *  // ... Rest of task code.\n * }\n * @endcode\n * \\defgroup xQueueCreate xQueueCreate\n * \\ingroup QueueManagement\n */\n#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n    #define xQueueCreate( uxQueueLength, uxItemSize )    xQueueGenericCreate( ( uxQueueLength ), ( uxItemSize ), ( queueQUEUE_TYPE_BASE ) )\n#endif\n\n/**\n * queue. h\n * @code{c}\n * QueueHandle_t xQueueCreateStatic(\n *                            UBaseType_t uxQueueLength,\n *                            UBaseType_t uxItemSize,\n *                            uint8_t *pucQueueStorage,\n *                            StaticQueue_t *pxQueueBuffer\n *                        );\n * @endcode\n *\n * Creates a new queue instance, and returns a handle by which the new queue\n * can be referenced.\n *\n * Internally, within the FreeRTOS implementation, queues use two blocks of\n * memory.  The first block is used to hold the queue's data structures.  The\n * second block is used to hold items placed into the queue.  If a queue is\n * created using xQueueCreate() then both blocks of memory are automatically\n * dynamically allocated inside the xQueueCreate() function.  (see\n * https://www.FreeRTOS.org/a00111.html).  If a queue is created using\n * xQueueCreateStatic() then the application writer must provide the memory that\n * will get used by the queue.  xQueueCreateStatic() therefore allows a queue to\n * be created without using any dynamic memory allocation.\n *\n * https://www.FreeRTOS.org/Embedded-RTOS-Queues.html\n *\n * @param uxQueueLength The maximum number of items that the queue can contain.\n *\n * @param uxItemSize The number of bytes each item in the queue will require.\n * Items are queued by copy, not by reference, so this is the number of bytes\n * that will be copied for each posted item.  Each item on the queue must be\n * the same size.\n *\n * @param pucQueueStorage If uxItemSize is not zero then\n * pucQueueStorage must point to a uint8_t array that is at least large\n * enough to hold the maximum number of items that can be in the queue at any\n * one time - which is ( uxQueueLength * uxItemsSize ) bytes.  If uxItemSize is\n * zero then pucQueueStorage can be NULL.\n *\n * @param pxQueueBuffer Must point to a variable of type StaticQueue_t, which\n * will be used to hold the queue's data structure.\n *\n * @return If the queue is created then a handle to the created queue is\n * returned.  If pxQueueBuffer is NULL then NULL is returned.\n *\n * Example usage:\n * @code{c}\n * struct AMessage\n * {\n *  char ucMessageID;\n *  char ucData[ 20 ];\n * };\n *\n #define QUEUE_LENGTH 10\n #define ITEM_SIZE sizeof( uint32_t )\n *\n * // xQueueBuffer will hold the queue structure.\n * StaticQueue_t xQueueBuffer;\n *\n * // ucQueueStorage will hold the items posted to the queue.  Must be at least\n * // [(queue length) * ( queue item size)] bytes long.\n * uint8_t ucQueueStorage[ QUEUE_LENGTH * ITEM_SIZE ];\n *\n * void vATask( void *pvParameters )\n * {\n *  QueueHandle_t xQueue1;\n *\n *  // Create a queue capable of containing 10 uint32_t values.\n *  xQueue1 = xQueueCreate( QUEUE_LENGTH, // The number of items the queue can hold.\n *                          ITEM_SIZE     // The size of each item in the queue\n *                          &( ucQueueStorage[ 0 ] ), // The buffer that will hold the items in the queue.\n *                          &xQueueBuffer ); // The buffer that will hold the queue structure.\n *\n *  // The queue is guaranteed to be created successfully as no dynamic memory\n *  // allocation is used.  Therefore xQueue1 is now a handle to a valid queue.\n *\n *  // ... Rest of task code.\n * }\n * @endcode\n * \\defgroup xQueueCreateStatic xQueueCreateStatic\n * \\ingroup QueueManagement\n */\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    #define xQueueCreateStatic( uxQueueLength, uxItemSize, pucQueueStorage, pxQueueBuffer )    xQueueGenericCreateStatic( ( uxQueueLength ), ( uxItemSize ), ( pucQueueStorage ), ( pxQueueBuffer ), ( queueQUEUE_TYPE_BASE ) )\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n\n/**\n * queue. h\n * @code{c}\n * BaseType_t xQueueGetStaticBuffers( QueueHandle_t xQueue,\n *                                    uint8_t ** ppucQueueStorage,\n *                                    StaticQueue_t ** ppxStaticQueue );\n * @endcode\n *\n * Retrieve pointers to a statically created queue's data structure buffer\n * and storage area buffer. These are the same buffers that are supplied\n * at the time of creation.\n *\n * @param xQueue The queue for which to retrieve the buffers.\n *\n * @param ppucQueueStorage Used to return a pointer to the queue's storage\n * area buffer.\n *\n * @param ppxStaticQueue Used to return a pointer to the queue's data\n * structure buffer.\n *\n * @return pdTRUE if buffers were retrieved, pdFALSE otherwise.\n *\n * \\defgroup xQueueGetStaticBuffers xQueueGetStaticBuffers\n * \\ingroup QueueManagement\n */\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    #define xQueueGetStaticBuffers( xQueue, ppucQueueStorage, ppxStaticQueue )    xQueueGenericGetStaticBuffers( ( xQueue ), ( ppucQueueStorage ), ( ppxStaticQueue ) )\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n\n/**\n * queue. h\n * @code{c}\n * BaseType_t xQueueSendToFront(\n *                                 QueueHandle_t    xQueue,\n *                                 const void       *pvItemToQueue,\n *                                 TickType_t       xTicksToWait\n *                             );\n * @endcode\n *\n * Post an item to the front of a queue.  The item is queued by copy, not by\n * reference.  This function must not be called from an interrupt service\n * routine.  See xQueueSendFromISR () for an alternative which may be used\n * in an ISR.\n *\n * @param xQueue The handle to the queue on which the item is to be posted.\n *\n * @param pvItemToQueue A pointer to the item that is to be placed on the\n * queue.  The size of the items the queue will hold was defined when the\n * queue was created, so this many bytes will be copied from pvItemToQueue\n * into the queue storage area.\n *\n * @param xTicksToWait The maximum amount of time the task should block\n * waiting for space to become available on the queue, should it already\n * be full.  The call will return immediately if this is set to 0 and the\n * queue is full.  The time is defined in tick periods so the constant\n * portTICK_PERIOD_MS should be used to convert to real time if this is required.\n *\n * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.\n *\n * Example usage:\n * @code{c}\n * struct AMessage\n * {\n *  char ucMessageID;\n *  char ucData[ 20 ];\n * } xMessage;\n *\n * uint32_t ulVar = 10U;\n *\n * void vATask( void *pvParameters )\n * {\n * QueueHandle_t xQueue1, xQueue2;\n * struct AMessage *pxMessage;\n *\n *  // Create a queue capable of containing 10 uint32_t values.\n *  xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );\n *\n *  // Create a queue capable of containing 10 pointers to AMessage structures.\n *  // These should be passed by pointer as they contain a lot of data.\n *  xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );\n *\n *  // ...\n *\n *  if( xQueue1 != 0 )\n *  {\n *      // Send an uint32_t.  Wait for 10 ticks for space to become\n *      // available if necessary.\n *      if( xQueueSendToFront( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10 ) != pdPASS )\n *      {\n *          // Failed to post the message, even after 10 ticks.\n *      }\n *  }\n *\n *  if( xQueue2 != 0 )\n *  {\n *      // Send a pointer to a struct AMessage object.  Don't block if the\n *      // queue is already full.\n *      pxMessage = & xMessage;\n *      xQueueSendToFront( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0 );\n *  }\n *\n *  // ... Rest of task code.\n * }\n * @endcode\n * \\defgroup xQueueSend xQueueSend\n * \\ingroup QueueManagement\n */\n#define xQueueSendToFront( xQueue, pvItemToQueue, xTicksToWait ) \\\n    xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_FRONT )\n\n/**\n * queue. h\n * @code{c}\n * BaseType_t xQueueSendToBack(\n *                                 QueueHandle_t    xQueue,\n *                                 const void       *pvItemToQueue,\n *                                 TickType_t       xTicksToWait\n *                             );\n * @endcode\n *\n * This is a macro that calls xQueueGenericSend().\n *\n * Post an item to the back of a queue.  The item is queued by copy, not by\n * reference.  This function must not be called from an interrupt service\n * routine.  See xQueueSendFromISR () for an alternative which may be used\n * in an ISR.\n *\n * @param xQueue The handle to the queue on which the item is to be posted.\n *\n * @param pvItemToQueue A pointer to the item that is to be placed on the\n * queue.  The size of the items the queue will hold was defined when the\n * queue was created, so this many bytes will be copied from pvItemToQueue\n * into the queue storage area.\n *\n * @param xTicksToWait The maximum amount of time the task should block\n * waiting for space to become available on the queue, should it already\n * be full.  The call will return immediately if this is set to 0 and the queue\n * is full.  The  time is defined in tick periods so the constant\n * portTICK_PERIOD_MS should be used to convert to real time if this is required.\n *\n * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.\n *\n * Example usage:\n * @code{c}\n * struct AMessage\n * {\n *  char ucMessageID;\n *  char ucData[ 20 ];\n * } xMessage;\n *\n * uint32_t ulVar = 10U;\n *\n * void vATask( void *pvParameters )\n * {\n * QueueHandle_t xQueue1, xQueue2;\n * struct AMessage *pxMessage;\n *\n *  // Create a queue capable of containing 10 uint32_t values.\n *  xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );\n *\n *  // Create a queue capable of containing 10 pointers to AMessage structures.\n *  // These should be passed by pointer as they contain a lot of data.\n *  xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );\n *\n *  // ...\n *\n *  if( xQueue1 != 0 )\n *  {\n *      // Send an uint32_t.  Wait for 10 ticks for space to become\n *      // available if necessary.\n *      if( xQueueSendToBack( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10 ) != pdPASS )\n *      {\n *          // Failed to post the message, even after 10 ticks.\n *      }\n *  }\n *\n *  if( xQueue2 != 0 )\n *  {\n *      // Send a pointer to a struct AMessage object.  Don't block if the\n *      // queue is already full.\n *      pxMessage = & xMessage;\n *      xQueueSendToBack( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0 );\n *  }\n *\n *  // ... Rest of task code.\n * }\n * @endcode\n * \\defgroup xQueueSend xQueueSend\n * \\ingroup QueueManagement\n */\n#define xQueueSendToBack( xQueue, pvItemToQueue, xTicksToWait ) \\\n    xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK )\n\n/**\n * queue. h\n * @code{c}\n * BaseType_t xQueueSend(\n *                            QueueHandle_t xQueue,\n *                            const void * pvItemToQueue,\n *                            TickType_t xTicksToWait\n *                       );\n * @endcode\n *\n * This is a macro that calls xQueueGenericSend().  It is included for\n * backward compatibility with versions of FreeRTOS.org that did not\n * include the xQueueSendToFront() and xQueueSendToBack() macros.  It is\n * equivalent to xQueueSendToBack().\n *\n * Post an item on a queue.  The item is queued by copy, not by reference.\n * This function must not be called from an interrupt service routine.\n * See xQueueSendFromISR () for an alternative which may be used in an ISR.\n *\n * @param xQueue The handle to the queue on which the item is to be posted.\n *\n * @param pvItemToQueue A pointer to the item that is to be placed on the\n * queue.  The size of the items the queue will hold was defined when the\n * queue was created, so this many bytes will be copied from pvItemToQueue\n * into the queue storage area.\n *\n * @param xTicksToWait The maximum amount of time the task should block\n * waiting for space to become available on the queue, should it already\n * be full.  The call will return immediately if this is set to 0 and the\n * queue is full.  The time is defined in tick periods so the constant\n * portTICK_PERIOD_MS should be used to convert to real time if this is required.\n *\n * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.\n *\n * Example usage:\n * @code{c}\n * struct AMessage\n * {\n *  char ucMessageID;\n *  char ucData[ 20 ];\n * } xMessage;\n *\n * uint32_t ulVar = 10U;\n *\n * void vATask( void *pvParameters )\n * {\n * QueueHandle_t xQueue1, xQueue2;\n * struct AMessage *pxMessage;\n *\n *  // Create a queue capable of containing 10 uint32_t values.\n *  xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );\n *\n *  // Create a queue capable of containing 10 pointers to AMessage structures.\n *  // These should be passed by pointer as they contain a lot of data.\n *  xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );\n *\n *  // ...\n *\n *  if( xQueue1 != 0 )\n *  {\n *      // Send an uint32_t.  Wait for 10 ticks for space to become\n *      // available if necessary.\n *      if( xQueueSend( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10 ) != pdPASS )\n *      {\n *          // Failed to post the message, even after 10 ticks.\n *      }\n *  }\n *\n *  if( xQueue2 != 0 )\n *  {\n *      // Send a pointer to a struct AMessage object.  Don't block if the\n *      // queue is already full.\n *      pxMessage = & xMessage;\n *      xQueueSend( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0 );\n *  }\n *\n *  // ... Rest of task code.\n * }\n * @endcode\n * \\defgroup xQueueSend xQueueSend\n * \\ingroup QueueManagement\n */\n#define xQueueSend( xQueue, pvItemToQueue, xTicksToWait ) \\\n    xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), ( xTicksToWait ), queueSEND_TO_BACK )\n\n/**\n * queue. h\n * @code{c}\n * BaseType_t xQueueOverwrite(\n *                            QueueHandle_t xQueue,\n *                            const void * pvItemToQueue\n *                       );\n * @endcode\n *\n * Only for use with queues that have a length of one - so the queue is either\n * empty or full.\n *\n * Post an item on a queue.  If the queue is already full then overwrite the\n * value held in the queue.  The item is queued by copy, not by reference.\n *\n * This function must not be called from an interrupt service routine.\n * See xQueueOverwriteFromISR () for an alternative which may be used in an ISR.\n *\n * @param xQueue The handle of the queue to which the data is being sent.\n *\n * @param pvItemToQueue A pointer to the item that is to be placed on the\n * queue.  The size of the items the queue will hold was defined when the\n * queue was created, so this many bytes will be copied from pvItemToQueue\n * into the queue storage area.\n *\n * @return xQueueOverwrite() is a macro that calls xQueueGenericSend(), and\n * therefore has the same return values as xQueueSendToFront().  However, pdPASS\n * is the only value that can be returned because xQueueOverwrite() will write\n * to the queue even when the queue is already full.\n *\n * Example usage:\n * @code{c}\n *\n * void vFunction( void *pvParameters )\n * {\n * QueueHandle_t xQueue;\n * uint32_t ulVarToSend, ulValReceived;\n *\n *  // Create a queue to hold one uint32_t value.  It is strongly\n *  // recommended *not* to use xQueueOverwrite() on queues that can\n *  // contain more than one value, and doing so will trigger an assertion\n *  // if configASSERT() is defined.\n *  xQueue = xQueueCreate( 1, sizeof( uint32_t ) );\n *\n *  // Write the value 10 to the queue using xQueueOverwrite().\n *  ulVarToSend = 10;\n *  xQueueOverwrite( xQueue, &ulVarToSend );\n *\n *  // Peeking the queue should now return 10, but leave the value 10 in\n *  // the queue.  A block time of zero is used as it is known that the\n *  // queue holds a value.\n *  ulValReceived = 0;\n *  xQueuePeek( xQueue, &ulValReceived, 0 );\n *\n *  if( ulValReceived != 10 )\n *  {\n *      // Error unless the item was removed by a different task.\n *  }\n *\n *  // The queue is still full.  Use xQueueOverwrite() to overwrite the\n *  // value held in the queue with 100.\n *  ulVarToSend = 100;\n *  xQueueOverwrite( xQueue, &ulVarToSend );\n *\n *  // This time read from the queue, leaving the queue empty once more.\n *  // A block time of 0 is used again.\n *  xQueueReceive( xQueue, &ulValReceived, 0 );\n *\n *  // The value read should be the last value written, even though the\n *  // queue was already full when the value was written.\n *  if( ulValReceived != 100 )\n *  {\n *      // Error!\n *  }\n *\n *  // ...\n * }\n * @endcode\n * \\defgroup xQueueOverwrite xQueueOverwrite\n * \\ingroup QueueManagement\n */\n#define xQueueOverwrite( xQueue, pvItemToQueue ) \\\n    xQueueGenericSend( ( xQueue ), ( pvItemToQueue ), 0, queueOVERWRITE )\n\n\n/**\n * queue. h\n * @code{c}\n * BaseType_t xQueueGenericSend(\n *                                  QueueHandle_t xQueue,\n *                                  const void * pvItemToQueue,\n *                                  TickType_t xTicksToWait\n *                                  BaseType_t xCopyPosition\n *                              );\n * @endcode\n *\n * It is preferred that the macros xQueueSend(), xQueueSendToFront() and\n * xQueueSendToBack() are used in place of calling this function directly.\n *\n * Post an item on a queue.  The item is queued by copy, not by reference.\n * This function must not be called from an interrupt service routine.\n * See xQueueSendFromISR () for an alternative which may be used in an ISR.\n *\n * @param xQueue The handle to the queue on which the item is to be posted.\n *\n * @param pvItemToQueue A pointer to the item that is to be placed on the\n * queue.  The size of the items the queue will hold was defined when the\n * queue was created, so this many bytes will be copied from pvItemToQueue\n * into the queue storage area.\n *\n * @param xTicksToWait The maximum amount of time the task should block\n * waiting for space to become available on the queue, should it already\n * be full.  The call will return immediately if this is set to 0 and the\n * queue is full.  The time is defined in tick periods so the constant\n * portTICK_PERIOD_MS should be used to convert to real time if this is required.\n *\n * @param xCopyPosition Can take the value queueSEND_TO_BACK to place the\n * item at the back of the queue, or queueSEND_TO_FRONT to place the item\n * at the front of the queue (for high priority messages).\n *\n * @return pdTRUE if the item was successfully posted, otherwise errQUEUE_FULL.\n *\n * Example usage:\n * @code{c}\n * struct AMessage\n * {\n *  char ucMessageID;\n *  char ucData[ 20 ];\n * } xMessage;\n *\n * uint32_t ulVar = 10U;\n *\n * void vATask( void *pvParameters )\n * {\n * QueueHandle_t xQueue1, xQueue2;\n * struct AMessage *pxMessage;\n *\n *  // Create a queue capable of containing 10 uint32_t values.\n *  xQueue1 = xQueueCreate( 10, sizeof( uint32_t ) );\n *\n *  // Create a queue capable of containing 10 pointers to AMessage structures.\n *  // These should be passed by pointer as they contain a lot of data.\n *  xQueue2 = xQueueCreate( 10, sizeof( struct AMessage * ) );\n *\n *  // ...\n *\n *  if( xQueue1 != 0 )\n *  {\n *      // Send an uint32_t.  Wait for 10 ticks for space to become\n *      // available if necessary.\n *      if( xQueueGenericSend( xQueue1, ( void * ) &ulVar, ( TickType_t ) 10, queueSEND_TO_BACK ) != pdPASS )\n *      {\n *          // Failed to post the message, even after 10 ticks.\n *      }\n *  }\n *\n *  if( xQueue2 != 0 )\n *  {\n *      // Send a pointer to a struct AMessage object.  Don't block if the\n *      // queue is already full.\n *      pxMessage = & xMessage;\n *      xQueueGenericSend( xQueue2, ( void * ) &pxMessage, ( TickType_t ) 0, queueSEND_TO_BACK );\n *  }\n *\n *  // ... Rest of task code.\n * }\n * @endcode\n * \\defgroup xQueueSend xQueueSend\n * \\ingroup QueueManagement\n */\nBaseType_t xQueueGenericSend( QueueHandle_t xQueue,\n                              const void * const pvItemToQueue,\n                              TickType_t xTicksToWait,\n                              const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION;\n\n/**\n * queue. h\n * @code{c}\n * BaseType_t xQueuePeek(\n *                           QueueHandle_t xQueue,\n *                           void * const pvBuffer,\n *                           TickType_t xTicksToWait\n *                       );\n * @endcode\n *\n * Receive an item from a queue without removing the item from the queue.\n * The item is received by copy so a buffer of adequate size must be\n * provided.  The number of bytes copied into the buffer was defined when\n * the queue was created.\n *\n * Successfully received items remain on the queue so will be returned again\n * by the next call, or a call to xQueueReceive().\n *\n * This macro must not be used in an interrupt service routine.  See\n * xQueuePeekFromISR() for an alternative that can be called from an interrupt\n * service routine.\n *\n * @param xQueue The handle to the queue from which the item is to be\n * received.\n *\n * @param pvBuffer Pointer to the buffer into which the received item will\n * be copied.\n *\n * @param xTicksToWait The maximum amount of time the task should block\n * waiting for an item to receive should the queue be empty at the time\n * of the call. The time is defined in tick periods so the constant\n * portTICK_PERIOD_MS should be used to convert to real time if this is required.\n * xQueuePeek() will return immediately if xTicksToWait is 0 and the queue\n * is empty.\n *\n * @return pdTRUE if an item was successfully received from the queue,\n * otherwise pdFALSE.\n *\n * Example usage:\n * @code{c}\n * struct AMessage\n * {\n *  char ucMessageID;\n *  char ucData[ 20 ];\n * } xMessage;\n *\n * QueueHandle_t xQueue;\n *\n * // Task to create a queue and post a value.\n * void vATask( void *pvParameters )\n * {\n * struct AMessage *pxMessage;\n *\n *  // Create a queue capable of containing 10 pointers to AMessage structures.\n *  // These should be passed by pointer as they contain a lot of data.\n *  xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );\n *  if( xQueue == 0 )\n *  {\n *      // Failed to create the queue.\n *  }\n *\n *  // ...\n *\n *  // Send a pointer to a struct AMessage object.  Don't block if the\n *  // queue is already full.\n *  pxMessage = & xMessage;\n *  xQueueSend( xQueue, ( void * ) &pxMessage, ( TickType_t ) 0 );\n *\n *  // ... Rest of task code.\n * }\n *\n * // Task to peek the data from the queue.\n * void vADifferentTask( void *pvParameters )\n * {\n * struct AMessage *pxRxedMessage;\n *\n *  if( xQueue != 0 )\n *  {\n *      // Peek a message on the created queue.  Block for 10 ticks if a\n *      // message is not immediately available.\n *      if( xQueuePeek( xQueue, &( pxRxedMessage ), ( TickType_t ) 10 ) )\n *      {\n *          // pcRxedMessage now points to the struct AMessage variable posted\n *          // by vATask, but the item still remains on the queue.\n *      }\n *  }\n *\n *  // ... Rest of task code.\n * }\n * @endcode\n * \\defgroup xQueuePeek xQueuePeek\n * \\ingroup QueueManagement\n */\nBaseType_t xQueuePeek( QueueHandle_t xQueue,\n                       void * const pvBuffer,\n                       TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\n\n/**\n * queue. h\n * @code{c}\n * BaseType_t xQueuePeekFromISR(\n *                                  QueueHandle_t xQueue,\n *                                  void *pvBuffer,\n *                              );\n * @endcode\n *\n * A version of xQueuePeek() that can be called from an interrupt service\n * routine (ISR).\n *\n * Receive an item from a queue without removing the item from the queue.\n * The item is received by copy so a buffer of adequate size must be\n * provided.  The number of bytes copied into the buffer was defined when\n * the queue was created.\n *\n * Successfully received items remain on the queue so will be returned again\n * by the next call, or a call to xQueueReceive().\n *\n * @param xQueue The handle to the queue from which the item is to be\n * received.\n *\n * @param pvBuffer Pointer to the buffer into which the received item will\n * be copied.\n *\n * @return pdTRUE if an item was successfully received from the queue,\n * otherwise pdFALSE.\n *\n * \\defgroup xQueuePeekFromISR xQueuePeekFromISR\n * \\ingroup QueueManagement\n */\nBaseType_t xQueuePeekFromISR( QueueHandle_t xQueue,\n                              void * const pvBuffer ) PRIVILEGED_FUNCTION;\n\n/**\n * queue. h\n * @code{c}\n * BaseType_t xQueueReceive(\n *                               QueueHandle_t xQueue,\n *                               void *pvBuffer,\n *                               TickType_t xTicksToWait\n *                          );\n * @endcode\n *\n * Receive an item from a queue.  The item is received by copy so a buffer of\n * adequate size must be provided.  The number of bytes copied into the buffer\n * was defined when the queue was created.\n *\n * Successfully received items are removed from the queue.\n *\n * This function must not be used in an interrupt service routine.  See\n * xQueueReceiveFromISR for an alternative that can.\n *\n * @param xQueue The handle to the queue from which the item is to be\n * received.\n *\n * @param pvBuffer Pointer to the buffer into which the received item will\n * be copied.\n *\n * @param xTicksToWait The maximum amount of time the task should block\n * waiting for an item to receive should the queue be empty at the time\n * of the call. xQueueReceive() will return immediately if xTicksToWait\n * is zero and the queue is empty.  The time is defined in tick periods so the\n * constant portTICK_PERIOD_MS should be used to convert to real time if this is\n * required.\n *\n * @return pdTRUE if an item was successfully received from the queue,\n * otherwise pdFALSE.\n *\n * Example usage:\n * @code{c}\n * struct AMessage\n * {\n *  char ucMessageID;\n *  char ucData[ 20 ];\n * } xMessage;\n *\n * QueueHandle_t xQueue;\n *\n * // Task to create a queue and post a value.\n * void vATask( void *pvParameters )\n * {\n * struct AMessage *pxMessage;\n *\n *  // Create a queue capable of containing 10 pointers to AMessage structures.\n *  // These should be passed by pointer as they contain a lot of data.\n *  xQueue = xQueueCreate( 10, sizeof( struct AMessage * ) );\n *  if( xQueue == 0 )\n *  {\n *      // Failed to create the queue.\n *  }\n *\n *  // ...\n *\n *  // Send a pointer to a struct AMessage object.  Don't block if the\n *  // queue is already full.\n *  pxMessage = & xMessage;\n *  xQueueSend( xQueue, ( void * ) &pxMessage, ( TickType_t ) 0 );\n *\n *  // ... Rest of task code.\n * }\n *\n * // Task to receive from the queue.\n * void vADifferentTask( void *pvParameters )\n * {\n * struct AMessage *pxRxedMessage;\n *\n *  if( xQueue != 0 )\n *  {\n *      // Receive a message on the created queue.  Block for 10 ticks if a\n *      // message is not immediately available.\n *      if( xQueueReceive( xQueue, &( pxRxedMessage ), ( TickType_t ) 10 ) )\n *      {\n *          // pcRxedMessage now points to the struct AMessage variable posted\n *          // by vATask.\n *      }\n *  }\n *\n *  // ... Rest of task code.\n * }\n * @endcode\n * \\defgroup xQueueReceive xQueueReceive\n * \\ingroup QueueManagement\n */\nBaseType_t xQueueReceive( QueueHandle_t xQueue,\n                          void * const pvBuffer,\n                          TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\n\n/**\n * queue. h\n * @code{c}\n * UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue );\n * @endcode\n *\n * Return the number of messages stored in a queue.\n *\n * @param xQueue A handle to the queue being queried.\n *\n * @return The number of messages available in the queue.\n *\n * \\defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting\n * \\ingroup QueueManagement\n */\nUBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\n\n/**\n * queue. h\n * @code{c}\n * UBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue );\n * @endcode\n *\n * Return the number of free spaces available in a queue.  This is equal to the\n * number of items that can be sent to the queue before the queue becomes full\n * if no items are removed.\n *\n * @param xQueue A handle to the queue being queried.\n *\n * @return The number of spaces available in the queue.\n *\n * \\defgroup uxQueueMessagesWaiting uxQueueMessagesWaiting\n * \\ingroup QueueManagement\n */\nUBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\n\n/**\n * queue. h\n * @code{c}\n * void vQueueDelete( QueueHandle_t xQueue );\n * @endcode\n *\n * Delete a queue - freeing all the memory allocated for storing of items\n * placed on the queue.\n *\n * @param xQueue A handle to the queue to be deleted.\n *\n * \\defgroup vQueueDelete vQueueDelete\n * \\ingroup QueueManagement\n */\nvoid vQueueDelete( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\n\n/**\n * queue. h\n * @code{c}\n * BaseType_t xQueueSendToFrontFromISR(\n *                                       QueueHandle_t xQueue,\n *                                       const void *pvItemToQueue,\n *                                       BaseType_t *pxHigherPriorityTaskWoken\n *                                    );\n * @endcode\n *\n * This is a macro that calls xQueueGenericSendFromISR().\n *\n * Post an item to the front of a queue.  It is safe to use this macro from\n * within an interrupt service routine.\n *\n * Items are queued by copy not reference so it is preferable to only\n * queue small items, especially when called from an ISR.  In most cases\n * it would be preferable to store a pointer to the item being queued.\n *\n * @param xQueue The handle to the queue on which the item is to be posted.\n *\n * @param pvItemToQueue A pointer to the item that is to be placed on the\n * queue.  The size of the items the queue will hold was defined when the\n * queue was created, so this many bytes will be copied from pvItemToQueue\n * into the queue storage area.\n *\n * @param pxHigherPriorityTaskWoken xQueueSendToFrontFromISR() will set\n * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task\n * to unblock, and the unblocked task has a priority higher than the currently\n * running task.  If xQueueSendToFrontFromISR() sets this value to pdTRUE then\n * a context switch should be requested before the interrupt is exited.\n *\n * @return pdTRUE if the data was successfully sent to the queue, otherwise\n * errQUEUE_FULL.\n *\n * Example usage for buffered IO (where the ISR can obtain more than one value\n * per call):\n * @code{c}\n * void vBufferISR( void )\n * {\n * char cIn;\n * BaseType_t xHigherPriorityTaskWoken;\n *\n *  // We have not woken a task at the start of the ISR.\n *  xHigherPriorityTaskWoken = pdFALSE;\n *\n *  // Loop until the buffer is empty.\n *  do\n *  {\n *      // Obtain a byte from the buffer.\n *      cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );\n *\n *      // Post the byte.\n *      xQueueSendToFrontFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWoken );\n *\n *  } while( portINPUT_BYTE( BUFFER_COUNT ) );\n *\n *  // Now the buffer is empty we can switch context if necessary.\n *  if( xHigherPriorityTaskWoken )\n *  {\n *      taskYIELD ();\n *  }\n * }\n * @endcode\n *\n * \\defgroup xQueueSendFromISR xQueueSendFromISR\n * \\ingroup QueueManagement\n */\n#define xQueueSendToFrontFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) \\\n    xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_FRONT )\n\n\n/**\n * queue. h\n * @code{c}\n * BaseType_t xQueueSendToBackFromISR(\n *                                       QueueHandle_t xQueue,\n *                                       const void *pvItemToQueue,\n *                                       BaseType_t *pxHigherPriorityTaskWoken\n *                                    );\n * @endcode\n *\n * This is a macro that calls xQueueGenericSendFromISR().\n *\n * Post an item to the back of a queue.  It is safe to use this macro from\n * within an interrupt service routine.\n *\n * Items are queued by copy not reference so it is preferable to only\n * queue small items, especially when called from an ISR.  In most cases\n * it would be preferable to store a pointer to the item being queued.\n *\n * @param xQueue The handle to the queue on which the item is to be posted.\n *\n * @param pvItemToQueue A pointer to the item that is to be placed on the\n * queue.  The size of the items the queue will hold was defined when the\n * queue was created, so this many bytes will be copied from pvItemToQueue\n * into the queue storage area.\n *\n * @param pxHigherPriorityTaskWoken xQueueSendToBackFromISR() will set\n * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task\n * to unblock, and the unblocked task has a priority higher than the currently\n * running task.  If xQueueSendToBackFromISR() sets this value to pdTRUE then\n * a context switch should be requested before the interrupt is exited.\n *\n * @return pdTRUE if the data was successfully sent to the queue, otherwise\n * errQUEUE_FULL.\n *\n * Example usage for buffered IO (where the ISR can obtain more than one value\n * per call):\n * @code{c}\n * void vBufferISR( void )\n * {\n * char cIn;\n * BaseType_t xHigherPriorityTaskWoken;\n *\n *  // We have not woken a task at the start of the ISR.\n *  xHigherPriorityTaskWoken = pdFALSE;\n *\n *  // Loop until the buffer is empty.\n *  do\n *  {\n *      // Obtain a byte from the buffer.\n *      cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );\n *\n *      // Post the byte.\n *      xQueueSendToBackFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWoken );\n *\n *  } while( portINPUT_BYTE( BUFFER_COUNT ) );\n *\n *  // Now the buffer is empty we can switch context if necessary.\n *  if( xHigherPriorityTaskWoken )\n *  {\n *      taskYIELD ();\n *  }\n * }\n * @endcode\n *\n * \\defgroup xQueueSendFromISR xQueueSendFromISR\n * \\ingroup QueueManagement\n */\n#define xQueueSendToBackFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) \\\n    xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_BACK )\n\n/**\n * queue. h\n * @code{c}\n * BaseType_t xQueueOverwriteFromISR(\n *                            QueueHandle_t xQueue,\n *                            const void * pvItemToQueue,\n *                            BaseType_t *pxHigherPriorityTaskWoken\n *                       );\n * @endcode\n *\n * A version of xQueueOverwrite() that can be used in an interrupt service\n * routine (ISR).\n *\n * Only for use with queues that can hold a single item - so the queue is either\n * empty or full.\n *\n * Post an item on a queue.  If the queue is already full then overwrite the\n * value held in the queue.  The item is queued by copy, not by reference.\n *\n * @param xQueue The handle to the queue on which the item is to be posted.\n *\n * @param pvItemToQueue A pointer to the item that is to be placed on the\n * queue.  The size of the items the queue will hold was defined when the\n * queue was created, so this many bytes will be copied from pvItemToQueue\n * into the queue storage area.\n *\n * @param pxHigherPriorityTaskWoken xQueueOverwriteFromISR() will set\n * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task\n * to unblock, and the unblocked task has a priority higher than the currently\n * running task.  If xQueueOverwriteFromISR() sets this value to pdTRUE then\n * a context switch should be requested before the interrupt is exited.\n *\n * @return xQueueOverwriteFromISR() is a macro that calls\n * xQueueGenericSendFromISR(), and therefore has the same return values as\n * xQueueSendToFrontFromISR().  However, pdPASS is the only value that can be\n * returned because xQueueOverwriteFromISR() will write to the queue even when\n * the queue is already full.\n *\n * Example usage:\n * @code{c}\n *\n * QueueHandle_t xQueue;\n *\n * void vFunction( void *pvParameters )\n * {\n *  // Create a queue to hold one uint32_t value.  It is strongly\n *  // recommended *not* to use xQueueOverwriteFromISR() on queues that can\n *  // contain more than one value, and doing so will trigger an assertion\n *  // if configASSERT() is defined.\n *  xQueue = xQueueCreate( 1, sizeof( uint32_t ) );\n * }\n *\n * void vAnInterruptHandler( void )\n * {\n * // xHigherPriorityTaskWoken must be set to pdFALSE before it is used.\n * BaseType_t xHigherPriorityTaskWoken = pdFALSE;\n * uint32_t ulVarToSend, ulValReceived;\n *\n *  // Write the value 10 to the queue using xQueueOverwriteFromISR().\n *  ulVarToSend = 10;\n *  xQueueOverwriteFromISR( xQueue, &ulVarToSend, &xHigherPriorityTaskWoken );\n *\n *  // The queue is full, but calling xQueueOverwriteFromISR() again will still\n *  // pass because the value held in the queue will be overwritten with the\n *  // new value.\n *  ulVarToSend = 100;\n *  xQueueOverwriteFromISR( xQueue, &ulVarToSend, &xHigherPriorityTaskWoken );\n *\n *  // Reading from the queue will now return 100.\n *\n *  // ...\n *\n *  if( xHigherPrioritytaskWoken == pdTRUE )\n *  {\n *      // Writing to the queue caused a task to unblock and the unblocked task\n *      // has a priority higher than or equal to the priority of the currently\n *      // executing task (the task this interrupt interrupted). Perform a context\n *      // switch so this interrupt returns directly to the unblocked task.\n *      // The macro used is port specific and will be either\n *      // portYIELD_FROM_ISR() or portEND_SWITCHING_ISR() - refer to the documentation\n *      // page for the port being used.\n *      portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\n *  }\n * }\n * @endcode\n * \\defgroup xQueueOverwriteFromISR xQueueOverwriteFromISR\n * \\ingroup QueueManagement\n */\n#define xQueueOverwriteFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) \\\n    xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueOVERWRITE )\n\n/**\n * queue. h\n * @code{c}\n * BaseType_t xQueueSendFromISR(\n *                                   QueueHandle_t xQueue,\n *                                   const void *pvItemToQueue,\n *                                   BaseType_t *pxHigherPriorityTaskWoken\n *                              );\n * @endcode\n *\n * This is a macro that calls xQueueGenericSendFromISR().  It is included\n * for backward compatibility with versions of FreeRTOS.org that did not\n * include the xQueueSendToBackFromISR() and xQueueSendToFrontFromISR()\n * macros.\n *\n * Post an item to the back of a queue.  It is safe to use this function from\n * within an interrupt service routine.\n *\n * Items are queued by copy not reference so it is preferable to only\n * queue small items, especially when called from an ISR.  In most cases\n * it would be preferable to store a pointer to the item being queued.\n *\n * @param xQueue The handle to the queue on which the item is to be posted.\n *\n * @param pvItemToQueue A pointer to the item that is to be placed on the\n * queue.  The size of the items the queue will hold was defined when the\n * queue was created, so this many bytes will be copied from pvItemToQueue\n * into the queue storage area.\n *\n * @param pxHigherPriorityTaskWoken xQueueSendFromISR() will set\n * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task\n * to unblock, and the unblocked task has a priority higher than the currently\n * running task.  If xQueueSendFromISR() sets this value to pdTRUE then\n * a context switch should be requested before the interrupt is exited.\n *\n * @return pdTRUE if the data was successfully sent to the queue, otherwise\n * errQUEUE_FULL.\n *\n * Example usage for buffered IO (where the ISR can obtain more than one value\n * per call):\n * @code{c}\n * void vBufferISR( void )\n * {\n * char cIn;\n * BaseType_t xHigherPriorityTaskWoken;\n *\n *  // We have not woken a task at the start of the ISR.\n *  xHigherPriorityTaskWoken = pdFALSE;\n *\n *  // Loop until the buffer is empty.\n *  do\n *  {\n *      // Obtain a byte from the buffer.\n *      cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );\n *\n *      // Post the byte.\n *      xQueueSendFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWoken );\n *\n *  } while( portINPUT_BYTE( BUFFER_COUNT ) );\n *\n *  // Now the buffer is empty we can switch context if necessary.\n *  if( xHigherPriorityTaskWoken )\n *  {\n *       // As xHigherPriorityTaskWoken is now set to pdTRUE then a context\n *       // switch should be requested. The macro used is port specific and\n *       // will be either portYIELD_FROM_ISR() or portEND_SWITCHING_ISR() -\n *       // refer to the documentation page for the port being used.\n *       portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\n *  }\n * }\n * @endcode\n *\n * \\defgroup xQueueSendFromISR xQueueSendFromISR\n * \\ingroup QueueManagement\n */\n#define xQueueSendFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) \\\n    xQueueGenericSendFromISR( ( xQueue ), ( pvItemToQueue ), ( pxHigherPriorityTaskWoken ), queueSEND_TO_BACK )\n\n/**\n * queue. h\n * @code{c}\n * BaseType_t xQueueGenericSendFromISR(\n *                                         QueueHandle_t    xQueue,\n *                                         const    void    *pvItemToQueue,\n *                                         BaseType_t  *pxHigherPriorityTaskWoken,\n *                                         BaseType_t  xCopyPosition\n *                                     );\n * @endcode\n *\n * It is preferred that the macros xQueueSendFromISR(),\n * xQueueSendToFrontFromISR() and xQueueSendToBackFromISR() be used in place\n * of calling this function directly.  xQueueGiveFromISR() is an\n * equivalent for use by semaphores that don't actually copy any data.\n *\n * Post an item on a queue.  It is safe to use this function from within an\n * interrupt service routine.\n *\n * Items are queued by copy not reference so it is preferable to only\n * queue small items, especially when called from an ISR.  In most cases\n * it would be preferable to store a pointer to the item being queued.\n *\n * @param xQueue The handle to the queue on which the item is to be posted.\n *\n * @param pvItemToQueue A pointer to the item that is to be placed on the\n * queue.  The size of the items the queue will hold was defined when the\n * queue was created, so this many bytes will be copied from pvItemToQueue\n * into the queue storage area.\n *\n * @param pxHigherPriorityTaskWoken xQueueGenericSendFromISR() will set\n * *pxHigherPriorityTaskWoken to pdTRUE if sending to the queue caused a task\n * to unblock, and the unblocked task has a priority higher than the currently\n * running task.  If xQueueGenericSendFromISR() sets this value to pdTRUE then\n * a context switch should be requested before the interrupt is exited.\n *\n * @param xCopyPosition Can take the value queueSEND_TO_BACK to place the\n * item at the back of the queue, or queueSEND_TO_FRONT to place the item\n * at the front of the queue (for high priority messages).\n *\n * @return pdTRUE if the data was successfully sent to the queue, otherwise\n * errQUEUE_FULL.\n *\n * Example usage for buffered IO (where the ISR can obtain more than one value\n * per call):\n * @code{c}\n * void vBufferISR( void )\n * {\n * char cIn;\n * BaseType_t xHigherPriorityTaskWokenByPost;\n *\n *  // We have not woken a task at the start of the ISR.\n *  xHigherPriorityTaskWokenByPost = pdFALSE;\n *\n *  // Loop until the buffer is empty.\n *  do\n *  {\n *      // Obtain a byte from the buffer.\n *      cIn = portINPUT_BYTE( RX_REGISTER_ADDRESS );\n *\n *      // Post each byte.\n *      xQueueGenericSendFromISR( xRxQueue, &cIn, &xHigherPriorityTaskWokenByPost, queueSEND_TO_BACK );\n *\n *  } while( portINPUT_BYTE( BUFFER_COUNT ) );\n *\n *  // Now the buffer is empty we can switch context if necessary.\n *  if( xHigherPriorityTaskWokenByPost )\n *  {\n *       // As xHigherPriorityTaskWokenByPost is now set to pdTRUE then a context\n *       // switch should be requested. The macro used is port specific and\n *       // will be either portYIELD_FROM_ISR() or portEND_SWITCHING_ISR() -\n *       // refer to the documentation page for the port being used.\n *       portYIELD_FROM_ISR( xHigherPriorityTaskWokenByPost );\n *  }\n * }\n * @endcode\n *\n * \\defgroup xQueueSendFromISR xQueueSendFromISR\n * \\ingroup QueueManagement\n */\nBaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue,\n                                     const void * const pvItemToQueue,\n                                     BaseType_t * const pxHigherPriorityTaskWoken,\n                                     const BaseType_t xCopyPosition ) PRIVILEGED_FUNCTION;\nBaseType_t xQueueGiveFromISR( QueueHandle_t xQueue,\n                              BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\n\n/**\n * queue. h\n * @code{c}\n * BaseType_t xQueueReceiveFromISR(\n *                                     QueueHandle_t    xQueue,\n *                                     void             *pvBuffer,\n *                                     BaseType_t       *pxTaskWoken\n *                                 );\n * @endcode\n *\n * Receive an item from a queue.  It is safe to use this function from within an\n * interrupt service routine.\n *\n * @param xQueue The handle to the queue from which the item is to be\n * received.\n *\n * @param pvBuffer Pointer to the buffer into which the received item will\n * be copied.\n *\n * @param pxHigherPriorityTaskWoken A task may be blocked waiting for space to\n * become available on the queue.  If xQueueReceiveFromISR causes such a task\n * to unblock *pxTaskWoken will get set to pdTRUE, otherwise *pxTaskWoken will\n * remain unchanged.\n *\n * @return pdTRUE if an item was successfully received from the queue,\n * otherwise pdFALSE.\n *\n * Example usage:\n * @code{c}\n *\n * QueueHandle_t xQueue;\n *\n * // Function to create a queue and post some values.\n * void vAFunction( void *pvParameters )\n * {\n * char cValueToPost;\n * const TickType_t xTicksToWait = ( TickType_t )0xff;\n *\n *  // Create a queue capable of containing 10 characters.\n *  xQueue = xQueueCreate( 10, sizeof( char ) );\n *  if( xQueue == 0 )\n *  {\n *      // Failed to create the queue.\n *  }\n *\n *  // ...\n *\n *  // Post some characters that will be used within an ISR.  If the queue\n *  // is full then this task will block for xTicksToWait ticks.\n *  cValueToPost = 'a';\n *  xQueueSend( xQueue, ( void * ) &cValueToPost, xTicksToWait );\n *  cValueToPost = 'b';\n *  xQueueSend( xQueue, ( void * ) &cValueToPost, xTicksToWait );\n *\n *  // ... keep posting characters ... this task may block when the queue\n *  // becomes full.\n *\n *  cValueToPost = 'c';\n *  xQueueSend( xQueue, ( void * ) &cValueToPost, xTicksToWait );\n * }\n *\n * // ISR that outputs all the characters received on the queue.\n * void vISR_Routine( void )\n * {\n * BaseType_t xTaskWokenByReceive = pdFALSE;\n * char cRxedChar;\n *\n *  while( xQueueReceiveFromISR( xQueue, ( void * ) &cRxedChar, &xTaskWokenByReceive) )\n *  {\n *      // A character was received.  Output the character now.\n *      vOutputCharacter( cRxedChar );\n *\n *      // If removing the character from the queue woke the task that was\n *      // posting onto the queue xTaskWokenByReceive will have been set to\n *      // pdTRUE.  No matter how many times this loop iterates only one\n *      // task will be woken.\n *  }\n *\n *  if( xTaskWokenByReceive != ( char ) pdFALSE;\n *  {\n *      taskYIELD ();\n *  }\n * }\n * @endcode\n * \\defgroup xQueueReceiveFromISR xQueueReceiveFromISR\n * \\ingroup QueueManagement\n */\nBaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue,\n                                 void * const pvBuffer,\n                                 BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\n\n/*\n * Utilities to query queues that are safe to use from an ISR.  These utilities\n * should be used only from within an ISR, or within a critical section.\n */\nBaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\nBaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\nUBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\n\n#if ( configUSE_CO_ROUTINES == 1 )\n\n/*\n * The functions defined above are for passing data to and from tasks.  The\n * functions below are the equivalents for passing data to and from\n * co-routines.\n *\n * These functions are called from the co-routine macro implementation and\n * should not be called directly from application code.  Instead use the macro\n * wrappers defined within croutine.h.\n */\n    BaseType_t xQueueCRSendFromISR( QueueHandle_t xQueue,\n                                    const void * pvItemToQueue,\n                                    BaseType_t xCoRoutinePreviouslyWoken );\n    BaseType_t xQueueCRReceiveFromISR( QueueHandle_t xQueue,\n                                       void * pvBuffer,\n                                       BaseType_t * pxTaskWoken );\n    BaseType_t xQueueCRSend( QueueHandle_t xQueue,\n                             const void * pvItemToQueue,\n                             TickType_t xTicksToWait );\n    BaseType_t xQueueCRReceive( QueueHandle_t xQueue,\n                                void * pvBuffer,\n                                TickType_t xTicksToWait );\n\n#endif /* if ( configUSE_CO_ROUTINES == 1 ) */\n\n/*\n * For internal use only.  Use xSemaphoreCreateMutex(),\n * xSemaphoreCreateCounting() or xSemaphoreGetMutexHolder() instead of calling\n * these functions directly.\n */\nQueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;\n\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType,\n                                           StaticQueue_t * pxStaticQueue ) PRIVILEGED_FUNCTION;\n#endif\n\n#if ( configUSE_COUNTING_SEMAPHORES == 1 )\n    QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount,\n                                                 const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION;\n#endif\n\n#if ( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )\n    QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount,\n                                                       const UBaseType_t uxInitialCount,\n                                                       StaticQueue_t * pxStaticQueue ) PRIVILEGED_FUNCTION;\n#endif\n\nBaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue,\n                                TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\n\n#if ( ( configUSE_MUTEXES == 1 ) && ( INCLUDE_xSemaphoreGetMutexHolder == 1 ) )\n    TaskHandle_t xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;\n    TaskHandle_t xQueueGetMutexHolderFromISR( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * For internal use only.  Use xSemaphoreTakeRecursive() or\n * xSemaphoreGiveRecursive() instead of calling these functions directly.\n */\nBaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex,\n                                     TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\nBaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION;\n\n/*\n * Reset a queue back to its original empty state.  The return value is now\n * obsolete and is always set to pdPASS.\n */\n#define xQueueReset( xQueue )    xQueueGenericReset( ( xQueue ), pdFALSE )\n\n/*\n * The registry is provided as a means for kernel aware debuggers to\n * locate queues, semaphores and mutexes.  Call vQueueAddToRegistry() add\n * a queue, semaphore or mutex handle to the registry if you want the handle\n * to be available to a kernel aware debugger.  If you are not using a kernel\n * aware debugger then this function can be ignored.\n *\n * configQUEUE_REGISTRY_SIZE defines the maximum number of handles the\n * registry can hold.  configQUEUE_REGISTRY_SIZE must be greater than 0\n * within FreeRTOSConfig.h for the registry to be available.  Its value\n * does not affect the number of queues, semaphores and mutexes that can be\n * created - just the number that the registry can hold.\n *\n * If vQueueAddToRegistry is called more than once with the same xQueue\n * parameter, the registry will store the pcQueueName parameter from the\n * most recent call to vQueueAddToRegistry.\n *\n * @param xQueue The handle of the queue being added to the registry.  This\n * is the handle returned by a call to xQueueCreate().  Semaphore and mutex\n * handles can also be passed in here.\n *\n * @param pcQueueName The name to be associated with the handle.  This is the\n * name that the kernel aware debugger will display.  The queue registry only\n * stores a pointer to the string - so the string must be persistent (global or\n * preferably in ROM/Flash), not on the stack.\n */\n#if ( configQUEUE_REGISTRY_SIZE > 0 )\n    void vQueueAddToRegistry( QueueHandle_t xQueue,\n                              const char * pcQueueName ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * The registry is provided as a means for kernel aware debuggers to\n * locate queues, semaphores and mutexes.  Call vQueueAddToRegistry() add\n * a queue, semaphore or mutex handle to the registry if you want the handle\n * to be available to a kernel aware debugger, and vQueueUnregisterQueue() to\n * remove the queue, semaphore or mutex from the register.  If you are not using\n * a kernel aware debugger then this function can be ignored.\n *\n * @param xQueue The handle of the queue being removed from the registry.\n */\n#if ( configQUEUE_REGISTRY_SIZE > 0 )\n    void vQueueUnregisterQueue( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * The queue registry is provided as a means for kernel aware debuggers to\n * locate queues, semaphores and mutexes.  Call pcQueueGetName() to look\n * up and return the name of a queue in the queue registry from the queue's\n * handle.\n *\n * @param xQueue The handle of the queue the name of which will be returned.\n * @return If the queue is in the registry then a pointer to the name of the\n * queue is returned.  If the queue is not in the registry then NULL is\n * returned.\n */\n#if ( configQUEUE_REGISTRY_SIZE > 0 )\n    const char * pcQueueGetName( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * Generic version of the function used to create a queue using dynamic memory\n * allocation.  This is called by other functions and macros that create other\n * RTOS objects that use the queue structure as their base.\n */\n#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n    QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength,\n                                       const UBaseType_t uxItemSize,\n                                       const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * Generic version of the function used to create a queue using dynamic memory\n * allocation.  This is called by other functions and macros that create other\n * RTOS objects that use the queue structure as their base.\n */\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength,\n                                             const UBaseType_t uxItemSize,\n                                             uint8_t * pucQueueStorage,\n                                             StaticQueue_t * pxStaticQueue,\n                                             const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * Generic version of the function used to retrieve the buffers of statically\n * created queues. This is called by other functions and macros that retrieve\n * the buffers of other statically created RTOS objects that use the queue\n * structure as their base.\n */\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    BaseType_t xQueueGenericGetStaticBuffers( QueueHandle_t xQueue,\n                                              uint8_t ** ppucQueueStorage,\n                                              StaticQueue_t ** ppxStaticQueue ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * Queue sets provide a mechanism to allow a task to block (pend) on a read\n * operation from multiple queues or semaphores simultaneously.\n *\n * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this\n * function.\n *\n * A queue set must be explicitly created using a call to xQueueCreateSet()\n * before it can be used.  Once created, standard FreeRTOS queues and semaphores\n * can be added to the set using calls to xQueueAddToSet().\n * xQueueSelectFromSet() is then used to determine which, if any, of the queues\n * or semaphores contained in the set is in a state where a queue read or\n * semaphore take operation would be successful.\n *\n * Note 1:  See the documentation on https://www.FreeRTOS.org/RTOS-queue-sets.html\n * for reasons why queue sets are very rarely needed in practice as there are\n * simpler methods of blocking on multiple objects.\n *\n * Note 2:  Blocking on a queue set that contains a mutex will not cause the\n * mutex holder to inherit the priority of the blocked task.\n *\n * Note 3:  An additional 4 bytes of RAM is required for each space in a every\n * queue added to a queue set.  Therefore counting semaphores that have a high\n * maximum count value should not be added to a queue set.\n *\n * Note 4:  A receive (in the case of a queue) or take (in the case of a\n * semaphore) operation must not be performed on a member of a queue set unless\n * a call to xQueueSelectFromSet() has first returned a handle to that set member.\n *\n * @param uxEventQueueLength Queue sets store events that occur on\n * the queues and semaphores contained in the set.  uxEventQueueLength specifies\n * the maximum number of events that can be queued at once.  To be absolutely\n * certain that events are not lost uxEventQueueLength should be set to the\n * total sum of the length of the queues added to the set, where binary\n * semaphores and mutexes have a length of 1, and counting semaphores have a\n * length set by their maximum count value.  Examples:\n *  + If a queue set is to hold a queue of length 5, another queue of length 12,\n *    and a binary semaphore, then uxEventQueueLength should be set to\n *    (5 + 12 + 1), or 18.\n *  + If a queue set is to hold three binary semaphores then uxEventQueueLength\n *    should be set to (1 + 1 + 1 ), or 3.\n *  + If a queue set is to hold a counting semaphore that has a maximum count of\n *    5, and a counting semaphore that has a maximum count of 3, then\n *    uxEventQueueLength should be set to (5 + 3), or 8.\n *\n * @return If the queue set is created successfully then a handle to the created\n * queue set is returned.  Otherwise NULL is returned.\n */\n#if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )\n    QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * Adds a queue or semaphore to a queue set that was previously created by a\n * call to xQueueCreateSet().\n *\n * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this\n * function.\n *\n * Note 1:  A receive (in the case of a queue) or take (in the case of a\n * semaphore) operation must not be performed on a member of a queue set unless\n * a call to xQueueSelectFromSet() has first returned a handle to that set member.\n *\n * @param xQueueOrSemaphore The handle of the queue or semaphore being added to\n * the queue set (cast to an QueueSetMemberHandle_t type).\n *\n * @param xQueueSet The handle of the queue set to which the queue or semaphore\n * is being added.\n *\n * @return If the queue or semaphore was successfully added to the queue set\n * then pdPASS is returned.  If the queue could not be successfully added to the\n * queue set because it is already a member of a different queue set then pdFAIL\n * is returned.\n */\n#if ( configUSE_QUEUE_SETS == 1 )\n    BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore,\n                               QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * Removes a queue or semaphore from a queue set.  A queue or semaphore can only\n * be removed from a set if the queue or semaphore is empty.\n *\n * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this\n * function.\n *\n * @param xQueueOrSemaphore The handle of the queue or semaphore being removed\n * from the queue set (cast to an QueueSetMemberHandle_t type).\n *\n * @param xQueueSet The handle of the queue set in which the queue or semaphore\n * is included.\n *\n * @return If the queue or semaphore was successfully removed from the queue set\n * then pdPASS is returned.  If the queue was not in the queue set, or the\n * queue (or semaphore) was not empty, then pdFAIL is returned.\n */\n#if ( configUSE_QUEUE_SETS == 1 )\n    BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore,\n                                    QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * xQueueSelectFromSet() selects from the members of a queue set a queue or\n * semaphore that either contains data (in the case of a queue) or is available\n * to take (in the case of a semaphore).  xQueueSelectFromSet() effectively\n * allows a task to block (pend) on a read operation on all the queues and\n * semaphores in a queue set simultaneously.\n *\n * See FreeRTOS/Source/Demo/Common/Minimal/QueueSet.c for an example using this\n * function.\n *\n * Note 1:  See the documentation on https://www.FreeRTOS.org/RTOS-queue-sets.html\n * for reasons why queue sets are very rarely needed in practice as there are\n * simpler methods of blocking on multiple objects.\n *\n * Note 2:  Blocking on a queue set that contains a mutex will not cause the\n * mutex holder to inherit the priority of the blocked task.\n *\n * Note 3:  A receive (in the case of a queue) or take (in the case of a\n * semaphore) operation must not be performed on a member of a queue set unless\n * a call to xQueueSelectFromSet() has first returned a handle to that set member.\n *\n * @param xQueueSet The queue set on which the task will (potentially) block.\n *\n * @param xTicksToWait The maximum time, in ticks, that the calling task will\n * remain in the Blocked state (with other tasks executing) to wait for a member\n * of the queue set to be ready for a successful queue read or semaphore take\n * operation.\n *\n * @return xQueueSelectFromSet() will return the handle of a queue (cast to\n * a QueueSetMemberHandle_t type) contained in the queue set that contains data,\n * or the handle of a semaphore (cast to a QueueSetMemberHandle_t type) contained\n * in the queue set that is available, or NULL if no such queue or semaphore\n * exists before before the specified block time expires.\n */\n#if ( configUSE_QUEUE_SETS == 1 )\n    QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet,\n                                                const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * A version of xQueueSelectFromSet() that can be used from an ISR.\n */\n#if ( configUSE_QUEUE_SETS == 1 )\n    QueueSetMemberHandle_t xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;\n#endif\n\n/* Not public API functions. */\nvoid vQueueWaitForMessageRestricted( QueueHandle_t xQueue,\n                                     TickType_t xTicksToWait,\n                                     const BaseType_t xWaitIndefinitely ) PRIVILEGED_FUNCTION;\nBaseType_t xQueueGenericReset( QueueHandle_t xQueue,\n                               BaseType_t xNewQueue ) PRIVILEGED_FUNCTION;\n\n#if ( configUSE_TRACE_FACILITY == 1 )\n    void vQueueSetQueueNumber( QueueHandle_t xQueue,\n                               UBaseType_t uxQueueNumber ) PRIVILEGED_FUNCTION;\n#endif\n\n#if ( configUSE_TRACE_FACILITY == 1 )\n    UBaseType_t uxQueueGetQueueNumber( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\n#endif\n\n#if ( configUSE_TRACE_FACILITY == 1 )\n    uint8_t ucQueueGetQueueType( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\n#endif\n\nUBaseType_t uxQueueGetQueueItemSize( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\nUBaseType_t uxQueueGetQueueLength( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n    }\n#endif\n/* *INDENT-ON* */\n\n#endif /* QUEUE_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/semphr.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n#ifndef SEMAPHORE_H\n#define SEMAPHORE_H\n\n#ifndef INC_FREERTOS_H\n    #error \"include FreeRTOS.h\" must appear in source files before \"include semphr.h\"\n#endif\n\n#include \"queue.h\"\n\ntypedef QueueHandle_t SemaphoreHandle_t;\n\n#define semBINARY_SEMAPHORE_QUEUE_LENGTH    ( ( uint8_t ) 1U )\n#define semSEMAPHORE_QUEUE_ITEM_LENGTH      ( ( uint8_t ) 0U )\n#define semGIVE_BLOCK_TIME                  ( ( TickType_t ) 0U )\n\n\n/**\n * semphr. h\n * @code{c}\n * vSemaphoreCreateBinary( SemaphoreHandle_t xSemaphore );\n * @endcode\n *\n * In many usage scenarios it is faster and more memory efficient to use a\n * direct to task notification in place of a binary semaphore!\n * https://www.FreeRTOS.org/RTOS-task-notifications.html\n *\n * This old vSemaphoreCreateBinary() macro is now deprecated in favour of the\n * xSemaphoreCreateBinary() function.  Note that binary semaphores created using\n * the vSemaphoreCreateBinary() macro are created in a state such that the\n * first call to 'take' the semaphore would pass, whereas binary semaphores\n * created using xSemaphoreCreateBinary() are created in a state such that the\n * the semaphore must first be 'given' before it can be 'taken'.\n *\n * <i>Macro</i> that implements a semaphore by using the existing queue mechanism.\n * The queue length is 1 as this is a binary semaphore.  The data size is 0\n * as we don't want to actually store any data - we just want to know if the\n * queue is empty or full.\n *\n * This type of semaphore can be used for pure synchronisation between tasks or\n * between an interrupt and a task.  The semaphore need not be given back once\n * obtained, so one task/interrupt can continuously 'give' the semaphore while\n * another continuously 'takes' the semaphore.  For this reason this type of\n * semaphore does not use a priority inheritance mechanism.  For an alternative\n * that does use priority inheritance see xSemaphoreCreateMutex().\n *\n * @param xSemaphore Handle to the created semaphore.  Should be of type SemaphoreHandle_t.\n *\n * Example usage:\n * @code{c}\n * SemaphoreHandle_t xSemaphore = NULL;\n *\n * void vATask( void * pvParameters )\n * {\n *  // Semaphore cannot be used before a call to vSemaphoreCreateBinary ().\n *  // This is a macro so pass the variable in directly.\n *  vSemaphoreCreateBinary( xSemaphore );\n *\n *  if( xSemaphore != NULL )\n *  {\n *      // The semaphore was created successfully.\n *      // The semaphore can now be used.\n *  }\n * }\n * @endcode\n * \\defgroup vSemaphoreCreateBinary vSemaphoreCreateBinary\n * \\ingroup Semaphores\n */\n#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n    #define vSemaphoreCreateBinary( xSemaphore )                                                                                     \\\n    do {                                                                                                                             \\\n        ( xSemaphore ) = xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE ); \\\n        if( ( xSemaphore ) != NULL )                                                                                                 \\\n        {                                                                                                                            \\\n            ( void ) xSemaphoreGive( ( xSemaphore ) );                                                                               \\\n        }                                                                                                                            \\\n    } while( 0 )\n#endif\n\n/**\n * semphr. h\n * @code{c}\n * SemaphoreHandle_t xSemaphoreCreateBinary( void );\n * @endcode\n *\n * Creates a new binary semaphore instance, and returns a handle by which the\n * new semaphore can be referenced.\n *\n * In many usage scenarios it is faster and more memory efficient to use a\n * direct to task notification in place of a binary semaphore!\n * https://www.FreeRTOS.org/RTOS-task-notifications.html\n *\n * Internally, within the FreeRTOS implementation, binary semaphores use a block\n * of memory, in which the semaphore structure is stored.  If a binary semaphore\n * is created using xSemaphoreCreateBinary() then the required memory is\n * automatically dynamically allocated inside the xSemaphoreCreateBinary()\n * function.  (see https://www.FreeRTOS.org/a00111.html).  If a binary semaphore\n * is created using xSemaphoreCreateBinaryStatic() then the application writer\n * must provide the memory.  xSemaphoreCreateBinaryStatic() therefore allows a\n * binary semaphore to be created without using any dynamic memory allocation.\n *\n * The old vSemaphoreCreateBinary() macro is now deprecated in favour of this\n * xSemaphoreCreateBinary() function.  Note that binary semaphores created using\n * the vSemaphoreCreateBinary() macro are created in a state such that the\n * first call to 'take' the semaphore would pass, whereas binary semaphores\n * created using xSemaphoreCreateBinary() are created in a state such that the\n * the semaphore must first be 'given' before it can be 'taken'.\n *\n * This type of semaphore can be used for pure synchronisation between tasks or\n * between an interrupt and a task.  The semaphore need not be given back once\n * obtained, so one task/interrupt can continuously 'give' the semaphore while\n * another continuously 'takes' the semaphore.  For this reason this type of\n * semaphore does not use a priority inheritance mechanism.  For an alternative\n * that does use priority inheritance see xSemaphoreCreateMutex().\n *\n * @return Handle to the created semaphore, or NULL if the memory required to\n * hold the semaphore's data structures could not be allocated.\n *\n * Example usage:\n * @code{c}\n * SemaphoreHandle_t xSemaphore = NULL;\n *\n * void vATask( void * pvParameters )\n * {\n *  // Semaphore cannot be used before a call to xSemaphoreCreateBinary().\n *  // This is a macro so pass the variable in directly.\n *  xSemaphore = xSemaphoreCreateBinary();\n *\n *  if( xSemaphore != NULL )\n *  {\n *      // The semaphore was created successfully.\n *      // The semaphore can now be used.\n *  }\n * }\n * @endcode\n * \\defgroup xSemaphoreCreateBinary xSemaphoreCreateBinary\n * \\ingroup Semaphores\n */\n#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n    #define xSemaphoreCreateBinary()    xQueueGenericCreate( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_BINARY_SEMAPHORE )\n#endif\n\n/**\n * semphr. h\n * @code{c}\n * SemaphoreHandle_t xSemaphoreCreateBinaryStatic( StaticSemaphore_t *pxSemaphoreBuffer );\n * @endcode\n *\n * Creates a new binary semaphore instance, and returns a handle by which the\n * new semaphore can be referenced.\n *\n * NOTE: In many usage scenarios it is faster and more memory efficient to use a\n * direct to task notification in place of a binary semaphore!\n * https://www.FreeRTOS.org/RTOS-task-notifications.html\n *\n * Internally, within the FreeRTOS implementation, binary semaphores use a block\n * of memory, in which the semaphore structure is stored.  If a binary semaphore\n * is created using xSemaphoreCreateBinary() then the required memory is\n * automatically dynamically allocated inside the xSemaphoreCreateBinary()\n * function.  (see https://www.FreeRTOS.org/a00111.html).  If a binary semaphore\n * is created using xSemaphoreCreateBinaryStatic() then the application writer\n * must provide the memory.  xSemaphoreCreateBinaryStatic() therefore allows a\n * binary semaphore to be created without using any dynamic memory allocation.\n *\n * This type of semaphore can be used for pure synchronisation between tasks or\n * between an interrupt and a task.  The semaphore need not be given back once\n * obtained, so one task/interrupt can continuously 'give' the semaphore while\n * another continuously 'takes' the semaphore.  For this reason this type of\n * semaphore does not use a priority inheritance mechanism.  For an alternative\n * that does use priority inheritance see xSemaphoreCreateMutex().\n *\n * @param pxSemaphoreBuffer Must point to a variable of type StaticSemaphore_t,\n * which will then be used to hold the semaphore's data structure, removing the\n * need for the memory to be allocated dynamically.\n *\n * @return If the semaphore is created then a handle to the created semaphore is\n * returned.  If pxSemaphoreBuffer is NULL then NULL is returned.\n *\n * Example usage:\n * @code{c}\n * SemaphoreHandle_t xSemaphore = NULL;\n * StaticSemaphore_t xSemaphoreBuffer;\n *\n * void vATask( void * pvParameters )\n * {\n *  // Semaphore cannot be used before a call to xSemaphoreCreateBinary().\n *  // The semaphore's data structures will be placed in the xSemaphoreBuffer\n *  // variable, the address of which is passed into the function.  The\n *  // function's parameter is not NULL, so the function will not attempt any\n *  // dynamic memory allocation, and therefore the function will not return\n *  // return NULL.\n *  xSemaphore = xSemaphoreCreateBinary( &xSemaphoreBuffer );\n *\n *  // Rest of task code goes here.\n * }\n * @endcode\n * \\defgroup xSemaphoreCreateBinaryStatic xSemaphoreCreateBinaryStatic\n * \\ingroup Semaphores\n */\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    #define xSemaphoreCreateBinaryStatic( pxStaticSemaphore )    xQueueGenericCreateStatic( ( UBaseType_t ) 1, semSEMAPHORE_QUEUE_ITEM_LENGTH, NULL, ( pxStaticSemaphore ), queueQUEUE_TYPE_BINARY_SEMAPHORE )\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n\n/**\n * semphr. h\n * @code{c}\n * xSemaphoreTake(\n *                   SemaphoreHandle_t xSemaphore,\n *                   TickType_t xBlockTime\n *               );\n * @endcode\n *\n * <i>Macro</i> to obtain a semaphore.  The semaphore must have previously been\n * created with a call to xSemaphoreCreateBinary(), xSemaphoreCreateMutex() or\n * xSemaphoreCreateCounting().\n *\n * @param xSemaphore A handle to the semaphore being taken - obtained when\n * the semaphore was created.\n *\n * @param xBlockTime The time in ticks to wait for the semaphore to become\n * available.  The macro portTICK_PERIOD_MS can be used to convert this to a\n * real time.  A block time of zero can be used to poll the semaphore.  A block\n * time of portMAX_DELAY can be used to block indefinitely (provided\n * INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h).\n *\n * @return pdTRUE if the semaphore was obtained.  pdFALSE\n * if xBlockTime expired without the semaphore becoming available.\n *\n * Example usage:\n * @code{c}\n * SemaphoreHandle_t xSemaphore = NULL;\n *\n * // A task that creates a semaphore.\n * void vATask( void * pvParameters )\n * {\n *  // Create the semaphore to guard a shared resource.\n *  xSemaphore = xSemaphoreCreateBinary();\n * }\n *\n * // A task that uses the semaphore.\n * void vAnotherTask( void * pvParameters )\n * {\n *  // ... Do other things.\n *\n *  if( xSemaphore != NULL )\n *  {\n *      // See if we can obtain the semaphore.  If the semaphore is not available\n *      // wait 10 ticks to see if it becomes free.\n *      if( xSemaphoreTake( xSemaphore, ( TickType_t ) 10 ) == pdTRUE )\n *      {\n *          // We were able to obtain the semaphore and can now access the\n *          // shared resource.\n *\n *          // ...\n *\n *          // We have finished accessing the shared resource.  Release the\n *          // semaphore.\n *          xSemaphoreGive( xSemaphore );\n *      }\n *      else\n *      {\n *          // We could not obtain the semaphore and can therefore not access\n *          // the shared resource safely.\n *      }\n *  }\n * }\n * @endcode\n * \\defgroup xSemaphoreTake xSemaphoreTake\n * \\ingroup Semaphores\n */\n#define xSemaphoreTake( xSemaphore, xBlockTime )    xQueueSemaphoreTake( ( xSemaphore ), ( xBlockTime ) )\n\n/**\n * semphr. h\n * @code{c}\n * xSemaphoreTakeRecursive(\n *                          SemaphoreHandle_t xMutex,\n *                          TickType_t xBlockTime\n *                        );\n * @endcode\n *\n * <i>Macro</i> to recursively obtain, or 'take', a mutex type semaphore.\n * The mutex must have previously been created using a call to\n * xSemaphoreCreateRecursiveMutex();\n *\n * configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this\n * macro to be available.\n *\n * This macro must not be used on mutexes created using xSemaphoreCreateMutex().\n *\n * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex\n * doesn't become available again until the owner has called\n * xSemaphoreGiveRecursive() for each successful 'take' request.  For example,\n * if a task successfully 'takes' the same mutex 5 times then the mutex will\n * not be available to any other task until it has also  'given' the mutex back\n * exactly five times.\n *\n * @param xMutex A handle to the mutex being obtained.  This is the\n * handle returned by xSemaphoreCreateRecursiveMutex();\n *\n * @param xBlockTime The time in ticks to wait for the semaphore to become\n * available.  The macro portTICK_PERIOD_MS can be used to convert this to a\n * real time.  A block time of zero can be used to poll the semaphore.  If\n * the task already owns the semaphore then xSemaphoreTakeRecursive() will\n * return immediately no matter what the value of xBlockTime.\n *\n * @return pdTRUE if the semaphore was obtained.  pdFALSE if xBlockTime\n * expired without the semaphore becoming available.\n *\n * Example usage:\n * @code{c}\n * SemaphoreHandle_t xMutex = NULL;\n *\n * // A task that creates a mutex.\n * void vATask( void * pvParameters )\n * {\n *  // Create the mutex to guard a shared resource.\n *  xMutex = xSemaphoreCreateRecursiveMutex();\n * }\n *\n * // A task that uses the mutex.\n * void vAnotherTask( void * pvParameters )\n * {\n *  // ... Do other things.\n *\n *  if( xMutex != NULL )\n *  {\n *      // See if we can obtain the mutex.  If the mutex is not available\n *      // wait 10 ticks to see if it becomes free.\n *      if( xSemaphoreTakeRecursive( xSemaphore, ( TickType_t ) 10 ) == pdTRUE )\n *      {\n *          // We were able to obtain the mutex and can now access the\n *          // shared resource.\n *\n *          // ...\n *          // For some reason due to the nature of the code further calls to\n *          // xSemaphoreTakeRecursive() are made on the same mutex.  In real\n *          // code these would not be just sequential calls as this would make\n *          // no sense.  Instead the calls are likely to be buried inside\n *          // a more complex call structure.\n *          xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );\n *          xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );\n *\n *          // The mutex has now been 'taken' three times, so will not be\n *          // available to another task until it has also been given back\n *          // three times.  Again it is unlikely that real code would have\n *          // these calls sequentially, but instead buried in a more complex\n *          // call structure.  This is just for illustrative purposes.\n *          xSemaphoreGiveRecursive( xMutex );\n *          xSemaphoreGiveRecursive( xMutex );\n *          xSemaphoreGiveRecursive( xMutex );\n *\n *          // Now the mutex can be taken by other tasks.\n *      }\n *      else\n *      {\n *          // We could not obtain the mutex and can therefore not access\n *          // the shared resource safely.\n *      }\n *  }\n * }\n * @endcode\n * \\defgroup xSemaphoreTakeRecursive xSemaphoreTakeRecursive\n * \\ingroup Semaphores\n */\n#if ( configUSE_RECURSIVE_MUTEXES == 1 )\n    #define xSemaphoreTakeRecursive( xMutex, xBlockTime )    xQueueTakeMutexRecursive( ( xMutex ), ( xBlockTime ) )\n#endif\n\n/**\n * semphr. h\n * @code{c}\n * xSemaphoreGive( SemaphoreHandle_t xSemaphore );\n * @endcode\n *\n * <i>Macro</i> to release a semaphore.  The semaphore must have previously been\n * created with a call to xSemaphoreCreateBinary(), xSemaphoreCreateMutex() or\n * xSemaphoreCreateCounting(). and obtained using sSemaphoreTake().\n *\n * This macro must not be used from an ISR.  See xSemaphoreGiveFromISR () for\n * an alternative which can be used from an ISR.\n *\n * This macro must also not be used on semaphores created using\n * xSemaphoreCreateRecursiveMutex().\n *\n * @param xSemaphore A handle to the semaphore being released.  This is the\n * handle returned when the semaphore was created.\n *\n * @return pdTRUE if the semaphore was released.  pdFALSE if an error occurred.\n * Semaphores are implemented using queues.  An error can occur if there is\n * no space on the queue to post a message - indicating that the\n * semaphore was not first obtained correctly.\n *\n * Example usage:\n * @code{c}\n * SemaphoreHandle_t xSemaphore = NULL;\n *\n * void vATask( void * pvParameters )\n * {\n *  // Create the semaphore to guard a shared resource.\n *  xSemaphore = vSemaphoreCreateBinary();\n *\n *  if( xSemaphore != NULL )\n *  {\n *      if( xSemaphoreGive( xSemaphore ) != pdTRUE )\n *      {\n *          // We would expect this call to fail because we cannot give\n *          // a semaphore without first \"taking\" it!\n *      }\n *\n *      // Obtain the semaphore - don't block if the semaphore is not\n *      // immediately available.\n *      if( xSemaphoreTake( xSemaphore, ( TickType_t ) 0 ) )\n *      {\n *          // We now have the semaphore and can access the shared resource.\n *\n *          // ...\n *\n *          // We have finished accessing the shared resource so can free the\n *          // semaphore.\n *          if( xSemaphoreGive( xSemaphore ) != pdTRUE )\n *          {\n *              // We would not expect this call to fail because we must have\n *              // obtained the semaphore to get here.\n *          }\n *      }\n *  }\n * }\n * @endcode\n * \\defgroup xSemaphoreGive xSemaphoreGive\n * \\ingroup Semaphores\n */\n#define xSemaphoreGive( xSemaphore )    xQueueGenericSend( ( QueueHandle_t ) ( xSemaphore ), NULL, semGIVE_BLOCK_TIME, queueSEND_TO_BACK )\n\n/**\n * semphr. h\n * @code{c}\n * xSemaphoreGiveRecursive( SemaphoreHandle_t xMutex );\n * @endcode\n *\n * <i>Macro</i> to recursively release, or 'give', a mutex type semaphore.\n * The mutex must have previously been created using a call to\n * xSemaphoreCreateRecursiveMutex();\n *\n * configUSE_RECURSIVE_MUTEXES must be set to 1 in FreeRTOSConfig.h for this\n * macro to be available.\n *\n * This macro must not be used on mutexes created using xSemaphoreCreateMutex().\n *\n * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex\n * doesn't become available again until the owner has called\n * xSemaphoreGiveRecursive() for each successful 'take' request.  For example,\n * if a task successfully 'takes' the same mutex 5 times then the mutex will\n * not be available to any other task until it has also  'given' the mutex back\n * exactly five times.\n *\n * @param xMutex A handle to the mutex being released, or 'given'.  This is the\n * handle returned by xSemaphoreCreateMutex();\n *\n * @return pdTRUE if the semaphore was given.\n *\n * Example usage:\n * @code{c}\n * SemaphoreHandle_t xMutex = NULL;\n *\n * // A task that creates a mutex.\n * void vATask( void * pvParameters )\n * {\n *  // Create the mutex to guard a shared resource.\n *  xMutex = xSemaphoreCreateRecursiveMutex();\n * }\n *\n * // A task that uses the mutex.\n * void vAnotherTask( void * pvParameters )\n * {\n *  // ... Do other things.\n *\n *  if( xMutex != NULL )\n *  {\n *      // See if we can obtain the mutex.  If the mutex is not available\n *      // wait 10 ticks to see if it becomes free.\n *      if( xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 ) == pdTRUE )\n *      {\n *          // We were able to obtain the mutex and can now access the\n *          // shared resource.\n *\n *          // ...\n *          // For some reason due to the nature of the code further calls to\n *          // xSemaphoreTakeRecursive() are made on the same mutex.  In real\n *          // code these would not be just sequential calls as this would make\n *          // no sense.  Instead the calls are likely to be buried inside\n *          // a more complex call structure.\n *          xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );\n *          xSemaphoreTakeRecursive( xMutex, ( TickType_t ) 10 );\n *\n *          // The mutex has now been 'taken' three times, so will not be\n *          // available to another task until it has also been given back\n *          // three times.  Again it is unlikely that real code would have\n *          // these calls sequentially, it would be more likely that the calls\n *          // to xSemaphoreGiveRecursive() would be called as a call stack\n *          // unwound.  This is just for demonstrative purposes.\n *          xSemaphoreGiveRecursive( xMutex );\n *          xSemaphoreGiveRecursive( xMutex );\n *          xSemaphoreGiveRecursive( xMutex );\n *\n *          // Now the mutex can be taken by other tasks.\n *      }\n *      else\n *      {\n *          // We could not obtain the mutex and can therefore not access\n *          // the shared resource safely.\n *      }\n *  }\n * }\n * @endcode\n * \\defgroup xSemaphoreGiveRecursive xSemaphoreGiveRecursive\n * \\ingroup Semaphores\n */\n#if ( configUSE_RECURSIVE_MUTEXES == 1 )\n    #define xSemaphoreGiveRecursive( xMutex )    xQueueGiveMutexRecursive( ( xMutex ) )\n#endif\n\n/**\n * semphr. h\n * @code{c}\n * xSemaphoreGiveFromISR(\n *                        SemaphoreHandle_t xSemaphore,\n *                        BaseType_t *pxHigherPriorityTaskWoken\n *                    );\n * @endcode\n *\n * <i>Macro</i> to  release a semaphore.  The semaphore must have previously been\n * created with a call to xSemaphoreCreateBinary() or xSemaphoreCreateCounting().\n *\n * Mutex type semaphores (those created using a call to xSemaphoreCreateMutex())\n * must not be used with this macro.\n *\n * This macro can be used from an ISR.\n *\n * @param xSemaphore A handle to the semaphore being released.  This is the\n * handle returned when the semaphore was created.\n *\n * @param pxHigherPriorityTaskWoken xSemaphoreGiveFromISR() will set\n * *pxHigherPriorityTaskWoken to pdTRUE if giving the semaphore caused a task\n * to unblock, and the unblocked task has a priority higher than the currently\n * running task.  If xSemaphoreGiveFromISR() sets this value to pdTRUE then\n * a context switch should be requested before the interrupt is exited.\n *\n * @return pdTRUE if the semaphore was successfully given, otherwise errQUEUE_FULL.\n *\n * Example usage:\n * @code{c}\n \\#define LONG_TIME 0xffff\n \\#define TICKS_TO_WAIT 10\n * SemaphoreHandle_t xSemaphore = NULL;\n *\n * // Repetitive task.\n * void vATask( void * pvParameters )\n * {\n *  for( ;; )\n *  {\n *      // We want this task to run every 10 ticks of a timer.  The semaphore\n *      // was created before this task was started.\n *\n *      // Block waiting for the semaphore to become available.\n *      if( xSemaphoreTake( xSemaphore, LONG_TIME ) == pdTRUE )\n *      {\n *          // It is time to execute.\n *\n *          // ...\n *\n *          // We have finished our task.  Return to the top of the loop where\n *          // we will block on the semaphore until it is time to execute\n *          // again.  Note when using the semaphore for synchronisation with an\n *          // ISR in this manner there is no need to 'give' the semaphore back.\n *      }\n *  }\n * }\n *\n * // Timer ISR\n * void vTimerISR( void * pvParameters )\n * {\n * static uint8_t ucLocalTickCount = 0;\n * static BaseType_t xHigherPriorityTaskWoken;\n *\n *  // A timer tick has occurred.\n *\n *  // ... Do other time functions.\n *\n *  // Is it time for vATask () to run?\n *  xHigherPriorityTaskWoken = pdFALSE;\n *  ucLocalTickCount++;\n *  if( ucLocalTickCount >= TICKS_TO_WAIT )\n *  {\n *      // Unblock the task by releasing the semaphore.\n *      xSemaphoreGiveFromISR( xSemaphore, &xHigherPriorityTaskWoken );\n *\n *      // Reset the count so we release the semaphore again in 10 ticks time.\n *      ucLocalTickCount = 0;\n *  }\n *\n *  if( xHigherPriorityTaskWoken != pdFALSE )\n *  {\n *      // We can force a context switch here.  Context switching from an\n *      // ISR uses port specific syntax.  Check the demo task for your port\n *      // to find the syntax required.\n *  }\n * }\n * @endcode\n * \\defgroup xSemaphoreGiveFromISR xSemaphoreGiveFromISR\n * \\ingroup Semaphores\n */\n#define xSemaphoreGiveFromISR( xSemaphore, pxHigherPriorityTaskWoken )    xQueueGiveFromISR( ( QueueHandle_t ) ( xSemaphore ), ( pxHigherPriorityTaskWoken ) )\n\n/**\n * semphr. h\n * @code{c}\n * xSemaphoreTakeFromISR(\n *                        SemaphoreHandle_t xSemaphore,\n *                        BaseType_t *pxHigherPriorityTaskWoken\n *                    );\n * @endcode\n *\n * <i>Macro</i> to  take a semaphore from an ISR.  The semaphore must have\n * previously been created with a call to xSemaphoreCreateBinary() or\n * xSemaphoreCreateCounting().\n *\n * Mutex type semaphores (those created using a call to xSemaphoreCreateMutex())\n * must not be used with this macro.\n *\n * This macro can be used from an ISR, however taking a semaphore from an ISR\n * is not a common operation.  It is likely to only be useful when taking a\n * counting semaphore when an interrupt is obtaining an object from a resource\n * pool (when the semaphore count indicates the number of resources available).\n *\n * @param xSemaphore A handle to the semaphore being taken.  This is the\n * handle returned when the semaphore was created.\n *\n * @param pxHigherPriorityTaskWoken xSemaphoreTakeFromISR() will set\n * *pxHigherPriorityTaskWoken to pdTRUE if taking the semaphore caused a task\n * to unblock, and the unblocked task has a priority higher than the currently\n * running task.  If xSemaphoreTakeFromISR() sets this value to pdTRUE then\n * a context switch should be requested before the interrupt is exited.\n *\n * @return pdTRUE if the semaphore was successfully taken, otherwise\n * pdFALSE\n */\n#define xSemaphoreTakeFromISR( xSemaphore, pxHigherPriorityTaskWoken )    xQueueReceiveFromISR( ( QueueHandle_t ) ( xSemaphore ), NULL, ( pxHigherPriorityTaskWoken ) )\n\n/**\n * semphr. h\n * @code{c}\n * SemaphoreHandle_t xSemaphoreCreateMutex( void );\n * @endcode\n *\n * Creates a new mutex type semaphore instance, and returns a handle by which\n * the new mutex can be referenced.\n *\n * Internally, within the FreeRTOS implementation, mutex semaphores use a block\n * of memory, in which the mutex structure is stored.  If a mutex is created\n * using xSemaphoreCreateMutex() then the required memory is automatically\n * dynamically allocated inside the xSemaphoreCreateMutex() function.  (see\n * https://www.FreeRTOS.org/a00111.html).  If a mutex is created using\n * xSemaphoreCreateMutexStatic() then the application writer must provided the\n * memory.  xSemaphoreCreateMutexStatic() therefore allows a mutex to be created\n * without using any dynamic memory allocation.\n *\n * Mutexes created using this function can be accessed using the xSemaphoreTake()\n * and xSemaphoreGive() macros.  The xSemaphoreTakeRecursive() and\n * xSemaphoreGiveRecursive() macros must not be used.\n *\n * This type of semaphore uses a priority inheritance mechanism so a task\n * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the\n * semaphore it is no longer required.\n *\n * Mutex type semaphores cannot be used from within interrupt service routines.\n *\n * See xSemaphoreCreateBinary() for an alternative implementation that can be\n * used for pure synchronisation (where one task or interrupt always 'gives' the\n * semaphore and another always 'takes' the semaphore) and from within interrupt\n * service routines.\n *\n * @return If the mutex was successfully created then a handle to the created\n * semaphore is returned.  If there was not enough heap to allocate the mutex\n * data structures then NULL is returned.\n *\n * Example usage:\n * @code{c}\n * SemaphoreHandle_t xSemaphore;\n *\n * void vATask( void * pvParameters )\n * {\n *  // Semaphore cannot be used before a call to xSemaphoreCreateMutex().\n *  // This is a macro so pass the variable in directly.\n *  xSemaphore = xSemaphoreCreateMutex();\n *\n *  if( xSemaphore != NULL )\n *  {\n *      // The semaphore was created successfully.\n *      // The semaphore can now be used.\n *  }\n * }\n * @endcode\n * \\defgroup xSemaphoreCreateMutex xSemaphoreCreateMutex\n * \\ingroup Semaphores\n */\n#if ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configUSE_MUTEXES == 1 ) )\n    #define xSemaphoreCreateMutex()    xQueueCreateMutex( queueQUEUE_TYPE_MUTEX )\n#endif\n\n/**\n * semphr. h\n * @code{c}\n * SemaphoreHandle_t xSemaphoreCreateMutexStatic( StaticSemaphore_t *pxMutexBuffer );\n * @endcode\n *\n * Creates a new mutex type semaphore instance, and returns a handle by which\n * the new mutex can be referenced.\n *\n * Internally, within the FreeRTOS implementation, mutex semaphores use a block\n * of memory, in which the mutex structure is stored.  If a mutex is created\n * using xSemaphoreCreateMutex() then the required memory is automatically\n * dynamically allocated inside the xSemaphoreCreateMutex() function.  (see\n * https://www.FreeRTOS.org/a00111.html).  If a mutex is created using\n * xSemaphoreCreateMutexStatic() then the application writer must provided the\n * memory.  xSemaphoreCreateMutexStatic() therefore allows a mutex to be created\n * without using any dynamic memory allocation.\n *\n * Mutexes created using this function can be accessed using the xSemaphoreTake()\n * and xSemaphoreGive() macros.  The xSemaphoreTakeRecursive() and\n * xSemaphoreGiveRecursive() macros must not be used.\n *\n * This type of semaphore uses a priority inheritance mechanism so a task\n * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the\n * semaphore it is no longer required.\n *\n * Mutex type semaphores cannot be used from within interrupt service routines.\n *\n * See xSemaphoreCreateBinary() for an alternative implementation that can be\n * used for pure synchronisation (where one task or interrupt always 'gives' the\n * semaphore and another always 'takes' the semaphore) and from within interrupt\n * service routines.\n *\n * @param pxMutexBuffer Must point to a variable of type StaticSemaphore_t,\n * which will be used to hold the mutex's data structure, removing the need for\n * the memory to be allocated dynamically.\n *\n * @return If the mutex was successfully created then a handle to the created\n * mutex is returned.  If pxMutexBuffer was NULL then NULL is returned.\n *\n * Example usage:\n * @code{c}\n * SemaphoreHandle_t xSemaphore;\n * StaticSemaphore_t xMutexBuffer;\n *\n * void vATask( void * pvParameters )\n * {\n *  // A mutex cannot be used before it has been created.  xMutexBuffer is\n *  // into xSemaphoreCreateMutexStatic() so no dynamic memory allocation is\n *  // attempted.\n *  xSemaphore = xSemaphoreCreateMutexStatic( &xMutexBuffer );\n *\n *  // As no dynamic memory allocation was performed, xSemaphore cannot be NULL,\n *  // so there is no need to check it.\n * }\n * @endcode\n * \\defgroup xSemaphoreCreateMutexStatic xSemaphoreCreateMutexStatic\n * \\ingroup Semaphores\n */\n#if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configUSE_MUTEXES == 1 ) )\n    #define xSemaphoreCreateMutexStatic( pxMutexBuffer )    xQueueCreateMutexStatic( queueQUEUE_TYPE_MUTEX, ( pxMutexBuffer ) )\n#endif\n\n\n/**\n * semphr. h\n * @code{c}\n * SemaphoreHandle_t xSemaphoreCreateRecursiveMutex( void );\n * @endcode\n *\n * Creates a new recursive mutex type semaphore instance, and returns a handle\n * by which the new recursive mutex can be referenced.\n *\n * Internally, within the FreeRTOS implementation, recursive mutexes use a block\n * of memory, in which the mutex structure is stored.  If a recursive mutex is\n * created using xSemaphoreCreateRecursiveMutex() then the required memory is\n * automatically dynamically allocated inside the\n * xSemaphoreCreateRecursiveMutex() function.  (see\n * https://www.FreeRTOS.org/a00111.html).  If a recursive mutex is created using\n * xSemaphoreCreateRecursiveMutexStatic() then the application writer must\n * provide the memory that will get used by the mutex.\n * xSemaphoreCreateRecursiveMutexStatic() therefore allows a recursive mutex to\n * be created without using any dynamic memory allocation.\n *\n * Mutexes created using this macro can be accessed using the\n * xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() macros.  The\n * xSemaphoreTake() and xSemaphoreGive() macros must not be used.\n *\n * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex\n * doesn't become available again until the owner has called\n * xSemaphoreGiveRecursive() for each successful 'take' request.  For example,\n * if a task successfully 'takes' the same mutex 5 times then the mutex will\n * not be available to any other task until it has also  'given' the mutex back\n * exactly five times.\n *\n * This type of semaphore uses a priority inheritance mechanism so a task\n * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the\n * semaphore it is no longer required.\n *\n * Mutex type semaphores cannot be used from within interrupt service routines.\n *\n * See xSemaphoreCreateBinary() for an alternative implementation that can be\n * used for pure synchronisation (where one task or interrupt always 'gives' the\n * semaphore and another always 'takes' the semaphore) and from within interrupt\n * service routines.\n *\n * @return xSemaphore Handle to the created mutex semaphore.  Should be of type\n * SemaphoreHandle_t.\n *\n * Example usage:\n * @code{c}\n * SemaphoreHandle_t xSemaphore;\n *\n * void vATask( void * pvParameters )\n * {\n *  // Semaphore cannot be used before a call to xSemaphoreCreateMutex().\n *  // This is a macro so pass the variable in directly.\n *  xSemaphore = xSemaphoreCreateRecursiveMutex();\n *\n *  if( xSemaphore != NULL )\n *  {\n *      // The semaphore was created successfully.\n *      // The semaphore can now be used.\n *  }\n * }\n * @endcode\n * \\defgroup xSemaphoreCreateRecursiveMutex xSemaphoreCreateRecursiveMutex\n * \\ingroup Semaphores\n */\n#if ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configUSE_RECURSIVE_MUTEXES == 1 ) )\n    #define xSemaphoreCreateRecursiveMutex()    xQueueCreateMutex( queueQUEUE_TYPE_RECURSIVE_MUTEX )\n#endif\n\n/**\n * semphr. h\n * @code{c}\n * SemaphoreHandle_t xSemaphoreCreateRecursiveMutexStatic( StaticSemaphore_t *pxMutexBuffer );\n * @endcode\n *\n * Creates a new recursive mutex type semaphore instance, and returns a handle\n * by which the new recursive mutex can be referenced.\n *\n * Internally, within the FreeRTOS implementation, recursive mutexes use a block\n * of memory, in which the mutex structure is stored.  If a recursive mutex is\n * created using xSemaphoreCreateRecursiveMutex() then the required memory is\n * automatically dynamically allocated inside the\n * xSemaphoreCreateRecursiveMutex() function.  (see\n * https://www.FreeRTOS.org/a00111.html).  If a recursive mutex is created using\n * xSemaphoreCreateRecursiveMutexStatic() then the application writer must\n * provide the memory that will get used by the mutex.\n * xSemaphoreCreateRecursiveMutexStatic() therefore allows a recursive mutex to\n * be created without using any dynamic memory allocation.\n *\n * Mutexes created using this macro can be accessed using the\n * xSemaphoreTakeRecursive() and xSemaphoreGiveRecursive() macros.  The\n * xSemaphoreTake() and xSemaphoreGive() macros must not be used.\n *\n * A mutex used recursively can be 'taken' repeatedly by the owner. The mutex\n * doesn't become available again until the owner has called\n * xSemaphoreGiveRecursive() for each successful 'take' request.  For example,\n * if a task successfully 'takes' the same mutex 5 times then the mutex will\n * not be available to any other task until it has also  'given' the mutex back\n * exactly five times.\n *\n * This type of semaphore uses a priority inheritance mechanism so a task\n * 'taking' a semaphore MUST ALWAYS 'give' the semaphore back once the\n * semaphore it is no longer required.\n *\n * Mutex type semaphores cannot be used from within interrupt service routines.\n *\n * See xSemaphoreCreateBinary() for an alternative implementation that can be\n * used for pure synchronisation (where one task or interrupt always 'gives' the\n * semaphore and another always 'takes' the semaphore) and from within interrupt\n * service routines.\n *\n * @param pxMutexBuffer Must point to a variable of type StaticSemaphore_t,\n * which will then be used to hold the recursive mutex's data structure,\n * removing the need for the memory to be allocated dynamically.\n *\n * @return If the recursive mutex was successfully created then a handle to the\n * created recursive mutex is returned.  If pxMutexBuffer was NULL then NULL is\n * returned.\n *\n * Example usage:\n * @code{c}\n * SemaphoreHandle_t xSemaphore;\n * StaticSemaphore_t xMutexBuffer;\n *\n * void vATask( void * pvParameters )\n * {\n *  // A recursive semaphore cannot be used before it is created.  Here a\n *  // recursive mutex is created using xSemaphoreCreateRecursiveMutexStatic().\n *  // The address of xMutexBuffer is passed into the function, and will hold\n *  // the mutexes data structures - so no dynamic memory allocation will be\n *  // attempted.\n *  xSemaphore = xSemaphoreCreateRecursiveMutexStatic( &xMutexBuffer );\n *\n *  // As no dynamic memory allocation was performed, xSemaphore cannot be NULL,\n *  // so there is no need to check it.\n * }\n * @endcode\n * \\defgroup xSemaphoreCreateRecursiveMutexStatic xSemaphoreCreateRecursiveMutexStatic\n * \\ingroup Semaphores\n */\n#if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configUSE_RECURSIVE_MUTEXES == 1 ) )\n    #define xSemaphoreCreateRecursiveMutexStatic( pxStaticSemaphore )    xQueueCreateMutexStatic( queueQUEUE_TYPE_RECURSIVE_MUTEX, ( pxStaticSemaphore ) )\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n\n/**\n * semphr. h\n * @code{c}\n * SemaphoreHandle_t xSemaphoreCreateCounting( UBaseType_t uxMaxCount, UBaseType_t uxInitialCount );\n * @endcode\n *\n * Creates a new counting semaphore instance, and returns a handle by which the\n * new counting semaphore can be referenced.\n *\n * In many usage scenarios it is faster and more memory efficient to use a\n * direct to task notification in place of a counting semaphore!\n * https://www.FreeRTOS.org/RTOS-task-notifications.html\n *\n * Internally, within the FreeRTOS implementation, counting semaphores use a\n * block of memory, in which the counting semaphore structure is stored.  If a\n * counting semaphore is created using xSemaphoreCreateCounting() then the\n * required memory is automatically dynamically allocated inside the\n * xSemaphoreCreateCounting() function.  (see\n * https://www.FreeRTOS.org/a00111.html).  If a counting semaphore is created\n * using xSemaphoreCreateCountingStatic() then the application writer can\n * instead optionally provide the memory that will get used by the counting\n * semaphore.  xSemaphoreCreateCountingStatic() therefore allows a counting\n * semaphore to be created without using any dynamic memory allocation.\n *\n * Counting semaphores are typically used for two things:\n *\n * 1) Counting events.\n *\n *    In this usage scenario an event handler will 'give' a semaphore each time\n *    an event occurs (incrementing the semaphore count value), and a handler\n *    task will 'take' a semaphore each time it processes an event\n *    (decrementing the semaphore count value).  The count value is therefore\n *    the difference between the number of events that have occurred and the\n *    number that have been processed.  In this case it is desirable for the\n *    initial count value to be zero.\n *\n * 2) Resource management.\n *\n *    In this usage scenario the count value indicates the number of resources\n *    available.  To obtain control of a resource a task must first obtain a\n *    semaphore - decrementing the semaphore count value.  When the count value\n *    reaches zero there are no free resources.  When a task finishes with the\n *    resource it 'gives' the semaphore back - incrementing the semaphore count\n *    value.  In this case it is desirable for the initial count value to be\n *    equal to the maximum count value, indicating that all resources are free.\n *\n * @param uxMaxCount The maximum count value that can be reached.  When the\n *        semaphore reaches this value it can no longer be 'given'.\n *\n * @param uxInitialCount The count value assigned to the semaphore when it is\n *        created.\n *\n * @return Handle to the created semaphore.  Null if the semaphore could not be\n *         created.\n *\n * Example usage:\n * @code{c}\n * SemaphoreHandle_t xSemaphore;\n *\n * void vATask( void * pvParameters )\n * {\n * SemaphoreHandle_t xSemaphore = NULL;\n *\n *  // Semaphore cannot be used before a call to xSemaphoreCreateCounting().\n *  // The max value to which the semaphore can count should be 10, and the\n *  // initial value assigned to the count should be 0.\n *  xSemaphore = xSemaphoreCreateCounting( 10, 0 );\n *\n *  if( xSemaphore != NULL )\n *  {\n *      // The semaphore was created successfully.\n *      // The semaphore can now be used.\n *  }\n * }\n * @endcode\n * \\defgroup xSemaphoreCreateCounting xSemaphoreCreateCounting\n * \\ingroup Semaphores\n */\n#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n    #define xSemaphoreCreateCounting( uxMaxCount, uxInitialCount )    xQueueCreateCountingSemaphore( ( uxMaxCount ), ( uxInitialCount ) )\n#endif\n\n/**\n * semphr. h\n * @code{c}\n * SemaphoreHandle_t xSemaphoreCreateCountingStatic( UBaseType_t uxMaxCount, UBaseType_t uxInitialCount, StaticSemaphore_t *pxSemaphoreBuffer );\n * @endcode\n *\n * Creates a new counting semaphore instance, and returns a handle by which the\n * new counting semaphore can be referenced.\n *\n * In many usage scenarios it is faster and more memory efficient to use a\n * direct to task notification in place of a counting semaphore!\n * https://www.FreeRTOS.org/RTOS-task-notifications.html\n *\n * Internally, within the FreeRTOS implementation, counting semaphores use a\n * block of memory, in which the counting semaphore structure is stored.  If a\n * counting semaphore is created using xSemaphoreCreateCounting() then the\n * required memory is automatically dynamically allocated inside the\n * xSemaphoreCreateCounting() function.  (see\n * https://www.FreeRTOS.org/a00111.html).  If a counting semaphore is created\n * using xSemaphoreCreateCountingStatic() then the application writer must\n * provide the memory.  xSemaphoreCreateCountingStatic() therefore allows a\n * counting semaphore to be created without using any dynamic memory allocation.\n *\n * Counting semaphores are typically used for two things:\n *\n * 1) Counting events.\n *\n *    In this usage scenario an event handler will 'give' a semaphore each time\n *    an event occurs (incrementing the semaphore count value), and a handler\n *    task will 'take' a semaphore each time it processes an event\n *    (decrementing the semaphore count value).  The count value is therefore\n *    the difference between the number of events that have occurred and the\n *    number that have been processed.  In this case it is desirable for the\n *    initial count value to be zero.\n *\n * 2) Resource management.\n *\n *    In this usage scenario the count value indicates the number of resources\n *    available.  To obtain control of a resource a task must first obtain a\n *    semaphore - decrementing the semaphore count value.  When the count value\n *    reaches zero there are no free resources.  When a task finishes with the\n *    resource it 'gives' the semaphore back - incrementing the semaphore count\n *    value.  In this case it is desirable for the initial count value to be\n *    equal to the maximum count value, indicating that all resources are free.\n *\n * @param uxMaxCount The maximum count value that can be reached.  When the\n *        semaphore reaches this value it can no longer be 'given'.\n *\n * @param uxInitialCount The count value assigned to the semaphore when it is\n *        created.\n *\n * @param pxSemaphoreBuffer Must point to a variable of type StaticSemaphore_t,\n * which will then be used to hold the semaphore's data structure, removing the\n * need for the memory to be allocated dynamically.\n *\n * @return If the counting semaphore was successfully created then a handle to\n * the created counting semaphore is returned.  If pxSemaphoreBuffer was NULL\n * then NULL is returned.\n *\n * Example usage:\n * @code{c}\n * SemaphoreHandle_t xSemaphore;\n * StaticSemaphore_t xSemaphoreBuffer;\n *\n * void vATask( void * pvParameters )\n * {\n * SemaphoreHandle_t xSemaphore = NULL;\n *\n *  // Counting semaphore cannot be used before they have been created.  Create\n *  // a counting semaphore using xSemaphoreCreateCountingStatic().  The max\n *  // value to which the semaphore can count is 10, and the initial value\n *  // assigned to the count will be 0.  The address of xSemaphoreBuffer is\n *  // passed in and will be used to hold the semaphore structure, so no dynamic\n *  // memory allocation will be used.\n *  xSemaphore = xSemaphoreCreateCounting( 10, 0, &xSemaphoreBuffer );\n *\n *  // No memory allocation was attempted so xSemaphore cannot be NULL, so there\n *  // is no need to check its value.\n * }\n * @endcode\n * \\defgroup xSemaphoreCreateCountingStatic xSemaphoreCreateCountingStatic\n * \\ingroup Semaphores\n */\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    #define xSemaphoreCreateCountingStatic( uxMaxCount, uxInitialCount, pxSemaphoreBuffer )    xQueueCreateCountingSemaphoreStatic( ( uxMaxCount ), ( uxInitialCount ), ( pxSemaphoreBuffer ) )\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n\n/**\n * semphr. h\n * @code{c}\n * void vSemaphoreDelete( SemaphoreHandle_t xSemaphore );\n * @endcode\n *\n * Delete a semaphore.  This function must be used with care.  For example,\n * do not delete a mutex type semaphore if the mutex is held by a task.\n *\n * @param xSemaphore A handle to the semaphore to be deleted.\n *\n * \\defgroup vSemaphoreDelete vSemaphoreDelete\n * \\ingroup Semaphores\n */\n#define vSemaphoreDelete( xSemaphore )    vQueueDelete( ( QueueHandle_t ) ( xSemaphore ) )\n\n/**\n * semphr.h\n * @code{c}\n * TaskHandle_t xSemaphoreGetMutexHolder( SemaphoreHandle_t xMutex );\n * @endcode\n *\n * If xMutex is indeed a mutex type semaphore, return the current mutex holder.\n * If xMutex is not a mutex type semaphore, or the mutex is available (not held\n * by a task), return NULL.\n *\n * Note: This is a good way of determining if the calling task is the mutex\n * holder, but not a good way of determining the identity of the mutex holder as\n * the holder may change between the function exiting and the returned value\n * being tested.\n */\n#if ( ( configUSE_MUTEXES == 1 ) && ( INCLUDE_xSemaphoreGetMutexHolder == 1 ) )\n    #define xSemaphoreGetMutexHolder( xSemaphore )    xQueueGetMutexHolder( ( xSemaphore ) )\n#endif\n\n/**\n * semphr.h\n * @code{c}\n * TaskHandle_t xSemaphoreGetMutexHolderFromISR( SemaphoreHandle_t xMutex );\n * @endcode\n *\n * If xMutex is indeed a mutex type semaphore, return the current mutex holder.\n * If xMutex is not a mutex type semaphore, or the mutex is available (not held\n * by a task), return NULL.\n *\n */\n#if ( ( configUSE_MUTEXES == 1 ) && ( INCLUDE_xSemaphoreGetMutexHolder == 1 ) )\n    #define xSemaphoreGetMutexHolderFromISR( xSemaphore )    xQueueGetMutexHolderFromISR( ( xSemaphore ) )\n#endif\n\n/**\n * semphr.h\n * @code{c}\n * UBaseType_t uxSemaphoreGetCount( SemaphoreHandle_t xSemaphore );\n * @endcode\n *\n * If the semaphore is a counting semaphore then uxSemaphoreGetCount() returns\n * its current count value.  If the semaphore is a binary semaphore then\n * uxSemaphoreGetCount() returns 1 if the semaphore is available, and 0 if the\n * semaphore is not available.\n *\n */\n#define uxSemaphoreGetCount( xSemaphore )           uxQueueMessagesWaiting( ( QueueHandle_t ) ( xSemaphore ) )\n\n/**\n * semphr.h\n * @code{c}\n * UBaseType_t uxSemaphoreGetCountFromISR( SemaphoreHandle_t xSemaphore );\n * @endcode\n *\n * If the semaphore is a counting semaphore then uxSemaphoreGetCountFromISR() returns\n * its current count value.  If the semaphore is a binary semaphore then\n * uxSemaphoreGetCountFromISR() returns 1 if the semaphore is available, and 0 if the\n * semaphore is not available.\n *\n */\n#define uxSemaphoreGetCountFromISR( xSemaphore )    uxQueueMessagesWaitingFromISR( ( QueueHandle_t ) ( xSemaphore ) )\n\n/**\n * semphr.h\n * @code{c}\n * BaseType_t xSemaphoreGetStaticBuffer( SemaphoreHandle_t xSemaphore,\n *                                       StaticSemaphore_t ** ppxSemaphoreBuffer );\n * @endcode\n *\n * Retrieve pointer to a statically created binary semaphore, counting semaphore,\n * or mutex semaphore's data structure buffer. This is the same buffer that is\n * supplied at the time of creation.\n *\n * @param xSemaphore The semaphore for which to retrieve the buffer.\n *\n * @param ppxSemaphoreBuffer Used to return a pointer to the semaphore's\n * data structure buffer.\n *\n * @return pdTRUE if buffer was retrieved, pdFALSE otherwise.\n */\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    #define xSemaphoreGetStaticBuffer( xSemaphore, ppxSemaphoreBuffer )    xQueueGenericGetStaticBuffers( ( QueueHandle_t ) ( xSemaphore ), NULL, ( ppxSemaphoreBuffer ) )\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n\n#endif /* SEMAPHORE_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/stack_macros.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n#ifndef STACK_MACROS_H\n#define STACK_MACROS_H\n\n/*\n * Call the stack overflow hook function if the stack of the task being swapped\n * out is currently overflowed, or looks like it might have overflowed in the\n * past.\n *\n * Setting configCHECK_FOR_STACK_OVERFLOW to 1 will cause the macro to check\n * the current stack state only - comparing the current top of stack value to\n * the stack limit.  Setting configCHECK_FOR_STACK_OVERFLOW to greater than 1\n * will also cause the last few stack bytes to be checked to ensure the value\n * to which the bytes were set when the task was created have not been\n * overwritten.  Note this second test does not guarantee that an overflowed\n * stack will always be recognised.\n */\n\n/*-----------------------------------------------------------*/\n\n/*\n * portSTACK_LIMIT_PADDING is a number of extra words to consider to be in\n * use on the stack.\n */\n#ifndef portSTACK_LIMIT_PADDING\n    #define portSTACK_LIMIT_PADDING    0\n#endif\n\n#if ( ( configCHECK_FOR_STACK_OVERFLOW == 1 ) && ( portSTACK_GROWTH < 0 ) )\n\n/* Only the current stack state is to be checked. */\n    #define taskCHECK_FOR_STACK_OVERFLOW()                                                      \\\n    do {                                                                                        \\\n        /* Is the currently saved stack pointer within the stack limit? */                      \\\n        if( pxCurrentTCB->pxTopOfStack <= pxCurrentTCB->pxStack + portSTACK_LIMIT_PADDING )     \\\n        {                                                                                       \\\n            char * pcOverflowTaskName = pxCurrentTCB->pcTaskName;                               \\\n            vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pcOverflowTaskName ); \\\n        }                                                                                       \\\n    } while( 0 )\n\n#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */\n/*-----------------------------------------------------------*/\n\n#if ( ( configCHECK_FOR_STACK_OVERFLOW == 1 ) && ( portSTACK_GROWTH > 0 ) )\n\n/* Only the current stack state is to be checked. */\n    #define taskCHECK_FOR_STACK_OVERFLOW()                                                       \\\n    do {                                                                                         \\\n                                                                                                 \\\n        /* Is the currently saved stack pointer within the stack limit? */                       \\\n        if( pxCurrentTCB->pxTopOfStack >= pxCurrentTCB->pxEndOfStack - portSTACK_LIMIT_PADDING ) \\\n        {                                                                                        \\\n            char * pcOverflowTaskName = pxCurrentTCB->pcTaskName;                                \\\n            vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pcOverflowTaskName );  \\\n        }                                                                                        \\\n    } while( 0 )\n\n#endif /* configCHECK_FOR_STACK_OVERFLOW == 1 */\n/*-----------------------------------------------------------*/\n\n#if ( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH < 0 ) )\n\n    #define taskCHECK_FOR_STACK_OVERFLOW()                                                      \\\n    do {                                                                                        \\\n        const uint32_t * const pulStack = ( uint32_t * ) pxCurrentTCB->pxStack;                 \\\n        const uint32_t ulCheckValue = ( uint32_t ) 0xa5a5a5a5U;                                 \\\n                                                                                                \\\n        if( ( pulStack[ 0 ] != ulCheckValue ) ||                                                \\\n            ( pulStack[ 1 ] != ulCheckValue ) ||                                                \\\n            ( pulStack[ 2 ] != ulCheckValue ) ||                                                \\\n            ( pulStack[ 3 ] != ulCheckValue ) )                                                 \\\n        {                                                                                       \\\n            char * pcOverflowTaskName = pxCurrentTCB->pcTaskName;                               \\\n            vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pcOverflowTaskName ); \\\n        }                                                                                       \\\n    } while( 0 )\n\n#endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */\n/*-----------------------------------------------------------*/\n\n#if ( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) && ( portSTACK_GROWTH > 0 ) )\n\n    #define taskCHECK_FOR_STACK_OVERFLOW()                                                                                                \\\n    do {                                                                                                                                  \\\n        int8_t * pcEndOfStack = ( int8_t * ) pxCurrentTCB->pxEndOfStack;                                                                  \\\n        static const uint8_t ucExpectedStackBytes[] = { tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE,   \\\n                                                        tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE,   \\\n                                                        tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE,   \\\n                                                        tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE,   \\\n                                                        tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE, tskSTACK_FILL_BYTE }; \\\n                                                                                                                                          \\\n                                                                                                                                          \\\n        pcEndOfStack -= sizeof( ucExpectedStackBytes );                                                                                   \\\n                                                                                                                                          \\\n        /* Has the extremity of the task stack ever been written over? */                                                                 \\\n        if( memcmp( ( void * ) pcEndOfStack, ( void * ) ucExpectedStackBytes, sizeof( ucExpectedStackBytes ) ) != 0 )                     \\\n        {                                                                                                                                 \\\n            char * pcOverflowTaskName = pxCurrentTCB->pcTaskName;                                                                         \\\n            vApplicationStackOverflowHook( ( TaskHandle_t ) pxCurrentTCB, pcOverflowTaskName );                                           \\\n        }                                                                                                                                 \\\n    } while( 0 )\n\n#endif /* #if( configCHECK_FOR_STACK_OVERFLOW > 1 ) */\n/*-----------------------------------------------------------*/\n\n/* Remove stack overflow macro if not being used. */\n#ifndef taskCHECK_FOR_STACK_OVERFLOW\n    #define taskCHECK_FOR_STACK_OVERFLOW()\n#endif\n\n\n\n#endif /* STACK_MACROS_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/stream_buffer.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n/*\n * Stream buffers are used to send a continuous stream of data from one task or\n * interrupt to another.  Their implementation is light weight, making them\n * particularly suited for interrupt to task and core to core communication\n * scenarios.\n *\n * ***NOTE***:  Uniquely among FreeRTOS objects, the stream buffer\n * implementation (so also the message buffer implementation, as message buffers\n * are built on top of stream buffers) assumes there is only one task or\n * interrupt that will write to the buffer (the writer), and only one task or\n * interrupt that will read from the buffer (the reader).  It is safe for the\n * writer and reader to be different tasks or interrupts, but, unlike other\n * FreeRTOS objects, it is not safe to have multiple different writers or\n * multiple different readers.  If there are to be multiple different writers\n * then the application writer must place each call to a writing API function\n * (such as xStreamBufferSend()) inside a critical section and set the send\n * block time to 0.  Likewise, if there are to be multiple different readers\n * then the application writer must place each call to a reading API function\n * (such as xStreamBufferReceive()) inside a critical section section and set the\n * receive block time to 0.\n *\n */\n\n#ifndef STREAM_BUFFER_H\n#define STREAM_BUFFER_H\n\n#ifndef INC_FREERTOS_H\n    #error \"include FreeRTOS.h must appear in source files before include stream_buffer.h\"\n#endif\n\n/* *INDENT-OFF* */\n#if defined( __cplusplus )\n    extern \"C\" {\n#endif\n/* *INDENT-ON* */\n\n/**\n * Type of stream buffer. For internal use only.\n */\n#define sbTYPE_STREAM_BUFFER             ( ( BaseType_t ) 0 )\n#define sbTYPE_MESSAGE_BUFFER            ( ( BaseType_t ) 1 )\n#define sbTYPE_STREAM_BATCHING_BUFFER    ( ( BaseType_t ) 2 )\n\n/**\n * Type by which stream buffers are referenced.  For example, a call to\n * xStreamBufferCreate() returns an StreamBufferHandle_t variable that can\n * then be used as a parameter to xStreamBufferSend(), xStreamBufferReceive(),\n * etc.\n */\nstruct StreamBufferDef_t;\ntypedef struct StreamBufferDef_t * StreamBufferHandle_t;\n\n/**\n *  Type used as a stream buffer's optional callback.\n */\ntypedef void (* StreamBufferCallbackFunction_t)( StreamBufferHandle_t xStreamBuffer,\n                                                 BaseType_t xIsInsideISR,\n                                                 BaseType_t * const pxHigherPriorityTaskWoken );\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * StreamBufferHandle_t xStreamBufferCreate( size_t xBufferSizeBytes, size_t xTriggerLevelBytes );\n * @endcode\n *\n * Creates a new stream buffer using dynamically allocated memory.  See\n * xStreamBufferCreateStatic() for a version that uses statically allocated\n * memory (memory that is allocated at compile time).\n *\n * configSUPPORT_DYNAMIC_ALLOCATION must be set to 1 or left undefined in\n * FreeRTOSConfig.h for xStreamBufferCreate() to be available.\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xStreamBufferCreate() to be available.\n *\n * @param xBufferSizeBytes The total number of bytes the stream buffer will be\n * able to hold at any one time.\n *\n * @param xTriggerLevelBytes The number of bytes that must be in the stream\n * buffer before a task that is blocked on the stream buffer to wait for data is\n * moved out of the blocked state.  For example, if a task is blocked on a read\n * of an empty stream buffer that has a trigger level of 1 then the task will be\n * unblocked when a single byte is written to the buffer or the task's block\n * time expires.  As another example, if a task is blocked on a read of an empty\n * stream buffer that has a trigger level of 10 then the task will not be\n * unblocked until the stream buffer contains at least 10 bytes or the task's\n * block time expires.  If a reading task's block time expires before the\n * trigger level is reached then the task will still receive however many bytes\n * are actually available.  Setting a trigger level of 0 will result in a\n * trigger level of 1 being used.  It is not valid to specify a trigger level\n * that is greater than the buffer size.\n *\n * @param pxSendCompletedCallback Callback invoked when number of bytes at least equal to\n * trigger level is sent to the stream buffer. If the parameter is NULL, it will use the default\n * implementation provided by sbSEND_COMPLETED macro. To enable the callback,\n * configUSE_SB_COMPLETED_CALLBACK must be set to 1 in FreeRTOSConfig.h.\n *\n * @param pxReceiveCompletedCallback Callback invoked when more than zero bytes are read from a\n * stream buffer. If the parameter is NULL, it will use the default\n * implementation provided by sbRECEIVE_COMPLETED macro. To enable the callback,\n * configUSE_SB_COMPLETED_CALLBACK must be set to 1 in FreeRTOSConfig.h.\n *\n * @return If NULL is returned, then the stream buffer cannot be created\n * because there is insufficient heap memory available for FreeRTOS to allocate\n * the stream buffer data structures and storage area.  A non-NULL value being\n * returned indicates that the stream buffer has been created successfully -\n * the returned value should be stored as the handle to the created stream\n * buffer.\n *\n * Example use:\n * @code{c}\n *\n * void vAFunction( void )\n * {\n * StreamBufferHandle_t xStreamBuffer;\n * const size_t xStreamBufferSizeBytes = 100, xTriggerLevel = 10;\n *\n *  // Create a stream buffer that can hold 100 bytes.  The memory used to hold\n *  // both the stream buffer structure and the data in the stream buffer is\n *  // allocated dynamically.\n *  xStreamBuffer = xStreamBufferCreate( xStreamBufferSizeBytes, xTriggerLevel );\n *\n *  if( xStreamBuffer == NULL )\n *  {\n *      // There was not enough heap memory space available to create the\n *      // stream buffer.\n *  }\n *  else\n *  {\n *      // The stream buffer was created successfully and can now be used.\n *  }\n * }\n * @endcode\n * \\defgroup xStreamBufferCreate xStreamBufferCreate\n * \\ingroup StreamBufferManagement\n */\n\n#define xStreamBufferCreate( xBufferSizeBytes, xTriggerLevelBytes ) \\\n    xStreamBufferGenericCreate( ( xBufferSizeBytes ), ( xTriggerLevelBytes ), sbTYPE_STREAM_BUFFER, NULL, NULL )\n\n#if ( configUSE_SB_COMPLETED_CALLBACK == 1 )\n    #define xStreamBufferCreateWithCallback( xBufferSizeBytes, xTriggerLevelBytes, pxSendCompletedCallback, pxReceiveCompletedCallback ) \\\n    xStreamBufferGenericCreate( ( xBufferSizeBytes ), ( xTriggerLevelBytes ), sbTYPE_STREAM_BUFFER, ( pxSendCompletedCallback ), ( pxReceiveCompletedCallback ) )\n#endif\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * StreamBufferHandle_t xStreamBufferCreateStatic( size_t xBufferSizeBytes,\n *                                                 size_t xTriggerLevelBytes,\n *                                                 uint8_t *pucStreamBufferStorageArea,\n *                                                 StaticStreamBuffer_t *pxStaticStreamBuffer );\n * @endcode\n * Creates a new stream buffer using statically allocated memory.  See\n * xStreamBufferCreate() for a version that uses dynamically allocated memory.\n *\n * configSUPPORT_STATIC_ALLOCATION must be set to 1 in FreeRTOSConfig.h for\n * xStreamBufferCreateStatic() to be available. configUSE_STREAM_BUFFERS must be\n * set to 1 in for FreeRTOSConfig.h for xStreamBufferCreateStatic() to be\n * available.\n *\n * @param xBufferSizeBytes The size, in bytes, of the buffer pointed to by the\n * pucStreamBufferStorageArea parameter.\n *\n * @param xTriggerLevelBytes The number of bytes that must be in the stream\n * buffer before a task that is blocked on the stream buffer to wait for data is\n * moved out of the blocked state.  For example, if a task is blocked on a read\n * of an empty stream buffer that has a trigger level of 1 then the task will be\n * unblocked when a single byte is written to the buffer or the task's block\n * time expires.  As another example, if a task is blocked on a read of an empty\n * stream buffer that has a trigger level of 10 then the task will not be\n * unblocked until the stream buffer contains at least 10 bytes or the task's\n * block time expires.  If a reading task's block time expires before the\n * trigger level is reached then the task will still receive however many bytes\n * are actually available.  Setting a trigger level of 0 will result in a\n * trigger level of 1 being used.  It is not valid to specify a trigger level\n * that is greater than the buffer size.\n *\n * @param pucStreamBufferStorageArea Must point to a uint8_t array that is at\n * least xBufferSizeBytes big.  This is the array to which streams are\n * copied when they are written to the stream buffer.\n *\n * @param pxStaticStreamBuffer Must point to a variable of type\n * StaticStreamBuffer_t, which will be used to hold the stream buffer's data\n * structure.\n *\n * @param pxSendCompletedCallback Callback invoked when number of bytes at least equal to\n * trigger level is sent to the stream buffer. If the parameter is NULL, it will use the default\n * implementation provided by sbSEND_COMPLETED macro. To enable the callback,\n * configUSE_SB_COMPLETED_CALLBACK must be set to 1 in FreeRTOSConfig.h.\n *\n * @param pxReceiveCompletedCallback Callback invoked when more than zero bytes are read from a\n * stream buffer. If the parameter is NULL, it will use the default\n * implementation provided by sbRECEIVE_COMPLETED macro. To enable the callback,\n * configUSE_SB_COMPLETED_CALLBACK must be set to 1 in FreeRTOSConfig.h.\n *\n * @return If the stream buffer is created successfully then a handle to the\n * created stream buffer is returned. If either pucStreamBufferStorageArea or\n * pxStaticstreamBuffer are NULL then NULL is returned.\n *\n * Example use:\n * @code{c}\n *\n * // Used to dimension the array used to hold the streams.  The available space\n * // will actually be one less than this, so 999.\n #define STORAGE_SIZE_BYTES 1000\n *\n * // Defines the memory that will actually hold the streams within the stream\n * // buffer.\n * static uint8_t ucStorageBuffer[ STORAGE_SIZE_BYTES ];\n *\n * // The variable used to hold the stream buffer structure.\n * StaticStreamBuffer_t xStreamBufferStruct;\n *\n * void MyFunction( void )\n * {\n * StreamBufferHandle_t xStreamBuffer;\n * const size_t xTriggerLevel = 1;\n *\n *  xStreamBuffer = xStreamBufferCreateStatic( sizeof( ucStorageBuffer ),\n *                                             xTriggerLevel,\n *                                             ucStorageBuffer,\n *                                             &xStreamBufferStruct );\n *\n *  // As neither the pucStreamBufferStorageArea or pxStaticStreamBuffer\n *  // parameters were NULL, xStreamBuffer will not be NULL, and can be used to\n *  // reference the created stream buffer in other stream buffer API calls.\n *\n *  // Other code that uses the stream buffer can go here.\n * }\n *\n * @endcode\n * \\defgroup xStreamBufferCreateStatic xStreamBufferCreateStatic\n * \\ingroup StreamBufferManagement\n */\n\n#define xStreamBufferCreateStatic( xBufferSizeBytes, xTriggerLevelBytes, pucStreamBufferStorageArea, pxStaticStreamBuffer ) \\\n    xStreamBufferGenericCreateStatic( ( xBufferSizeBytes ), ( xTriggerLevelBytes ), sbTYPE_STREAM_BUFFER, ( pucStreamBufferStorageArea ), ( pxStaticStreamBuffer ), NULL, NULL )\n\n#if ( configUSE_SB_COMPLETED_CALLBACK == 1 )\n    #define xStreamBufferCreateStaticWithCallback( xBufferSizeBytes, xTriggerLevelBytes, pucStreamBufferStorageArea, pxStaticStreamBuffer, pxSendCompletedCallback, pxReceiveCompletedCallback ) \\\n    xStreamBufferGenericCreateStatic( ( xBufferSizeBytes ), ( xTriggerLevelBytes ), sbTYPE_STREAM_BUFFER, ( pucStreamBufferStorageArea ), ( pxStaticStreamBuffer ), ( pxSendCompletedCallback ), ( pxReceiveCompletedCallback ) )\n#endif\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * StreamBufferHandle_t xStreamBatchingBufferCreate( size_t xBufferSizeBytes, size_t xTriggerLevelBytes );\n * @endcode\n *\n * Creates a new stream batching buffer using dynamically allocated memory.  See\n * xStreamBatchingBufferCreateStatic() for a version that uses statically\n * allocated memory (memory that is allocated at compile time).\n *\n * configSUPPORT_DYNAMIC_ALLOCATION must be set to 1 or left undefined in\n * FreeRTOSConfig.h for xStreamBatchingBufferCreate() to be available.\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xStreamBatchingBufferCreate() to be available.\n *\n * The difference between a stream buffer and a stream batching buffer is when\n * a task performs read on a non-empty buffer:\n * - The task reading from a non-empty stream buffer returns immediately\n *   regardless of the amount of data in the buffer.\n * - The task reading from a non-empty steam batching buffer blocks until the\n *   amount of data in the buffer exceeds the trigger level or the block time\n *   expires.\n *\n * @param xBufferSizeBytes The total number of bytes the stream batching buffer\n * will be able to hold at any one time.\n *\n * @param xTriggerLevelBytes The number of bytes that must be in the stream\n * batching buffer to unblock a task calling xStreamBufferReceive before the\n * block time expires.\n *\n * @param pxSendCompletedCallback Callback invoked when number of bytes at least\n * equal to trigger level is sent to the stream batching buffer. If the\n * parameter is NULL, it will use the default implementation provided by\n * sbSEND_COMPLETED macro. To enable the callback, configUSE_SB_COMPLETED_CALLBACK\n * must be set to 1 in FreeRTOSConfig.h.\n *\n * @param pxReceiveCompletedCallback Callback invoked when more than zero bytes\n * are read from a stream batching buffer. If the parameter is NULL, it will use\n * the default implementation provided by sbRECEIVE_COMPLETED macro. To enable\n * the callback, configUSE_SB_COMPLETED_CALLBACK must be set to 1 in\n * FreeRTOSConfig.h.\n *\n * @return If NULL is returned, then the stream batching buffer cannot be created\n * because there is insufficient heap memory available for FreeRTOS to allocate\n * the stream batching buffer data structures and storage area.  A non-NULL value\n * being returned indicates that the stream batching buffer has been created\n * successfully - the returned value should be stored as the handle to the\n * created stream batching buffer.\n *\n * Example use:\n * @code{c}\n *\n * void vAFunction( void )\n * {\n * StreamBufferHandle_t xStreamBatchingBuffer;\n * const size_t xStreamBufferSizeBytes = 100, xTriggerLevel = 10;\n *\n *  // Create a stream batching buffer that can hold 100 bytes.  The memory used\n *  // to hold both the stream batching buffer structure and the data in the stream\n *  // batching buffer is allocated dynamically.\n *  xStreamBatchingBuffer = xStreamBatchingBufferCreate( xStreamBufferSizeBytes, xTriggerLevel );\n *\n *  if( xStreamBatchingBuffer == NULL )\n *  {\n *      // There was not enough heap memory space available to create the\n *      // stream batching buffer.\n *  }\n *  else\n *  {\n *      // The stream batching buffer was created successfully and can now be used.\n *  }\n * }\n * @endcode\n * \\defgroup xStreamBatchingBufferCreate xStreamBatchingBufferCreate\n * \\ingroup StreamBatchingBufferManagement\n */\n\n#define xStreamBatchingBufferCreate( xBufferSizeBytes, xTriggerLevelBytes ) \\\n    xStreamBufferGenericCreate( ( xBufferSizeBytes ), ( xTriggerLevelBytes ), sbTYPE_STREAM_BATCHING_BUFFER, NULL, NULL )\n\n#if ( configUSE_SB_COMPLETED_CALLBACK == 1 )\n    #define xStreamBatchingBufferCreateWithCallback( xBufferSizeBytes, xTriggerLevelBytes, pxSendCompletedCallback, pxReceiveCompletedCallback ) \\\n    xStreamBufferGenericCreate( ( xBufferSizeBytes ), ( xTriggerLevelBytes ), sbTYPE_STREAM_BATCHING_BUFFER, ( pxSendCompletedCallback ), ( pxReceiveCompletedCallback ) )\n#endif\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * StreamBufferHandle_t xStreamBatchingBufferCreateStatic( size_t xBufferSizeBytes,\n *                                                         size_t xTriggerLevelBytes,\n *                                                         uint8_t *pucStreamBufferStorageArea,\n *                                                         StaticStreamBuffer_t *pxStaticStreamBuffer );\n * @endcode\n * Creates a new stream batching buffer using statically allocated memory.  See\n * xStreamBatchingBufferCreate() for a version that uses dynamically allocated\n * memory.\n *\n * configSUPPORT_STATIC_ALLOCATION must be set to 1 in FreeRTOSConfig.h for\n * xStreamBatchingBufferCreateStatic() to be available. configUSE_STREAM_BUFFERS\n * must be set to 1 in for FreeRTOSConfig.h for xStreamBatchingBufferCreateStatic()\n * to be available.\n *\n * The difference between a stream buffer and a stream batching buffer is when\n * a task performs read on a non-empty buffer:\n * - The task reading from a non-empty stream buffer returns immediately\n *   regardless of the amount of data in the buffer.\n * - The task reading from a non-empty steam batching buffer blocks until the\n *   amount of data in the buffer exceeds the trigger level or the block time\n *   expires.\n *\n * @param xBufferSizeBytes The size, in bytes, of the buffer pointed to by the\n * pucStreamBufferStorageArea parameter.\n *\n * @param xTriggerLevelBytes The number of bytes that must be in the stream\n * batching buffer to unblock a task calling xStreamBufferReceive before the\n * block time expires.\n *\n * @param pucStreamBufferStorageArea Must point to a uint8_t array that is at\n * least xBufferSizeBytes big.  This is the array to which streams are\n * copied when they are written to the stream batching buffer.\n *\n * @param pxStaticStreamBuffer Must point to a variable of type\n * StaticStreamBuffer_t, which will be used to hold the stream batching buffer's\n * data structure.\n *\n * @param pxSendCompletedCallback Callback invoked when number of bytes at least\n * equal to trigger level is sent to the stream batching buffer. If the parameter\n * is NULL, it will use the default implementation provided by sbSEND_COMPLETED\n * macro. To enable the callback, configUSE_SB_COMPLETED_CALLBACK must be set to\n * 1 in FreeRTOSConfig.h.\n *\n * @param pxReceiveCompletedCallback Callback invoked when more than zero bytes\n * are read from a stream batching buffer. If the parameter is NULL, it will use\n * the default implementation provided by sbRECEIVE_COMPLETED macro. To enable\n * the callback, configUSE_SB_COMPLETED_CALLBACK must be set to 1 in\n * FreeRTOSConfig.h.\n *\n * @return If the stream batching buffer is created successfully then a handle\n * to the created stream batching buffer is returned. If either pucStreamBufferStorageArea\n * or pxStaticstreamBuffer are NULL then NULL is returned.\n *\n * Example use:\n * @code{c}\n *\n * // Used to dimension the array used to hold the streams.  The available space\n * // will actually be one less than this, so 999.\n * #define STORAGE_SIZE_BYTES 1000\n *\n * // Defines the memory that will actually hold the streams within the stream\n * // batching buffer.\n * static uint8_t ucStorageBuffer[ STORAGE_SIZE_BYTES ];\n *\n * // The variable used to hold the stream batching buffer structure.\n * StaticStreamBuffer_t xStreamBufferStruct;\n *\n * void MyFunction( void )\n * {\n * StreamBufferHandle_t xStreamBatchingBuffer;\n * const size_t xTriggerLevel = 1;\n *\n *  xStreamBatchingBuffer = xStreamBatchingBufferCreateStatic( sizeof( ucStorageBuffer ),\n *                                                             xTriggerLevel,\n *                                                             ucStorageBuffer,\n *                                                             &xStreamBufferStruct );\n *\n *  // As neither the pucStreamBufferStorageArea or pxStaticStreamBuffer\n *  // parameters were NULL, xStreamBatchingBuffer will not be NULL, and can be\n *  // used to reference the created stream batching buffer in other stream\n *  // buffer API calls.\n *\n *  // Other code that uses the stream batching buffer can go here.\n * }\n *\n * @endcode\n * \\defgroup xStreamBatchingBufferCreateStatic xStreamBatchingBufferCreateStatic\n * \\ingroup StreamBatchingBufferManagement\n */\n\n#define xStreamBatchingBufferCreateStatic( xBufferSizeBytes, xTriggerLevelBytes, pucStreamBufferStorageArea, pxStaticStreamBuffer ) \\\n    xStreamBufferGenericCreateStatic( ( xBufferSizeBytes ), ( xTriggerLevelBytes ), sbTYPE_STREAM_BATCHING_BUFFER, ( pucStreamBufferStorageArea ), ( pxStaticStreamBuffer ), NULL, NULL )\n\n#if ( configUSE_SB_COMPLETED_CALLBACK == 1 )\n    #define xStreamBatchingBufferCreateStaticWithCallback( xBufferSizeBytes, xTriggerLevelBytes, pucStreamBufferStorageArea, pxStaticStreamBuffer, pxSendCompletedCallback, pxReceiveCompletedCallback ) \\\n    xStreamBufferGenericCreateStatic( ( xBufferSizeBytes ), ( xTriggerLevelBytes ), sbTYPE_STREAM_BATCHING_BUFFER, ( pucStreamBufferStorageArea ), ( pxStaticStreamBuffer ), ( pxSendCompletedCallback ), ( pxReceiveCompletedCallback ) )\n#endif\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * BaseType_t xStreamBufferGetStaticBuffers( StreamBufferHandle_t xStreamBuffer,\n *                                           uint8_t ** ppucStreamBufferStorageArea,\n *                                           StaticStreamBuffer_t ** ppxStaticStreamBuffer );\n * @endcode\n *\n * Retrieve pointers to a statically created stream buffer's data structure\n * buffer and storage area buffer. These are the same buffers that are supplied\n * at the time of creation.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xStreamBufferGetStaticBuffers() to be available.\n *\n * @param xStreamBuffer The stream buffer for which to retrieve the buffers.\n *\n * @param ppucStreamBufferStorageArea Used to return a pointer to the stream\n * buffer's storage area buffer.\n *\n * @param ppxStaticStreamBuffer Used to return a pointer to the stream\n * buffer's data structure buffer.\n *\n * @return pdTRUE if buffers were retrieved, pdFALSE otherwise.\n *\n * \\defgroup xStreamBufferGetStaticBuffers xStreamBufferGetStaticBuffers\n * \\ingroup StreamBufferManagement\n */\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    BaseType_t xStreamBufferGetStaticBuffers( StreamBufferHandle_t xStreamBuffer,\n                                              uint8_t ** ppucStreamBufferStorageArea,\n                                              StaticStreamBuffer_t ** ppxStaticStreamBuffer ) PRIVILEGED_FUNCTION;\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * size_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,\n *                           const void *pvTxData,\n *                           size_t xDataLengthBytes,\n *                           TickType_t xTicksToWait );\n * @endcode\n *\n * Sends bytes to a stream buffer.  The bytes are copied into the stream buffer.\n *\n * ***NOTE***:  Uniquely among FreeRTOS objects, the stream buffer\n * implementation (so also the message buffer implementation, as message buffers\n * are built on top of stream buffers) assumes there is only one task or\n * interrupt that will write to the buffer (the writer), and only one task or\n * interrupt that will read from the buffer (the reader).  It is safe for the\n * writer and reader to be different tasks or interrupts, but, unlike other\n * FreeRTOS objects, it is not safe to have multiple different writers or\n * multiple different readers.  If there are to be multiple different writers\n * then the application writer must place each call to a writing API function\n * (such as xStreamBufferSend()) inside a critical section and set the send\n * block time to 0.  Likewise, if there are to be multiple different readers\n * then the application writer must place each call to a reading API function\n * (such as xStreamBufferReceive()) inside a critical section and set the receive\n * block time to 0.\n *\n * Use xStreamBufferSend() to write to a stream buffer from a task.  Use\n * xStreamBufferSendFromISR() to write to a stream buffer from an interrupt\n * service routine (ISR).\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xStreamBufferSend() to be available.\n *\n * @param xStreamBuffer The handle of the stream buffer to which a stream is\n * being sent.\n *\n * @param pvTxData A pointer to the buffer that holds the bytes to be copied\n * into the stream buffer.\n *\n * @param xDataLengthBytes   The maximum number of bytes to copy from pvTxData\n * into the stream buffer.\n *\n * @param xTicksToWait The maximum amount of time the task should remain in the\n * Blocked state to wait for enough space to become available in the stream\n * buffer, should the stream buffer contain too little space to hold the\n * another xDataLengthBytes bytes.  The block time is specified in tick periods,\n * so the absolute time it represents is dependent on the tick frequency.  The\n * macro pdMS_TO_TICKS() can be used to convert a time specified in milliseconds\n * into a time specified in ticks.  Setting xTicksToWait to portMAX_DELAY will\n * cause the task to wait indefinitely (without timing out), provided\n * INCLUDE_vTaskSuspend is set to 1 in FreeRTOSConfig.h.  If a task times out\n * before it can write all xDataLengthBytes into the buffer it will still write\n * as many bytes as possible.  A task does not use any CPU time when it is in\n * the blocked state.\n *\n * @return The number of bytes written to the stream buffer.  If a task times\n * out before it can write all xDataLengthBytes into the buffer it will still\n * write as many bytes as possible.\n *\n * Example use:\n * @code{c}\n * void vAFunction( StreamBufferHandle_t xStreamBuffer )\n * {\n * size_t xBytesSent;\n * uint8_t ucArrayToSend[] = { 0, 1, 2, 3 };\n * char *pcStringToSend = \"String to send\";\n * const TickType_t x100ms = pdMS_TO_TICKS( 100 );\n *\n *  // Send an array to the stream buffer, blocking for a maximum of 100ms to\n *  // wait for enough space to be available in the stream buffer.\n *  xBytesSent = xStreamBufferSend( xStreamBuffer, ( void * ) ucArrayToSend, sizeof( ucArrayToSend ), x100ms );\n *\n *  if( xBytesSent != sizeof( ucArrayToSend ) )\n *  {\n *      // The call to xStreamBufferSend() times out before there was enough\n *      // space in the buffer for the data to be written, but it did\n *      // successfully write xBytesSent bytes.\n *  }\n *\n *  // Send the string to the stream buffer.  Return immediately if there is not\n *  // enough space in the buffer.\n *  xBytesSent = xStreamBufferSend( xStreamBuffer, ( void * ) pcStringToSend, strlen( pcStringToSend ), 0 );\n *\n *  if( xBytesSent != strlen( pcStringToSend ) )\n *  {\n *      // The entire string could not be added to the stream buffer because\n *      // there was not enough free space in the buffer, but xBytesSent bytes\n *      // were sent.  Could try again to send the remaining bytes.\n *  }\n * }\n * @endcode\n * \\defgroup xStreamBufferSend xStreamBufferSend\n * \\ingroup StreamBufferManagement\n */\nsize_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,\n                          const void * pvTxData,\n                          size_t xDataLengthBytes,\n                          TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * size_t xStreamBufferSendFromISR( StreamBufferHandle_t xStreamBuffer,\n *                                  const void *pvTxData,\n *                                  size_t xDataLengthBytes,\n *                                  BaseType_t *pxHigherPriorityTaskWoken );\n * @endcode\n *\n * Interrupt safe version of the API function that sends a stream of bytes to\n * the stream buffer.\n *\n * ***NOTE***:  Uniquely among FreeRTOS objects, the stream buffer\n * implementation (so also the message buffer implementation, as message buffers\n * are built on top of stream buffers) assumes there is only one task or\n * interrupt that will write to the buffer (the writer), and only one task or\n * interrupt that will read from the buffer (the reader).  It is safe for the\n * writer and reader to be different tasks or interrupts, but, unlike other\n * FreeRTOS objects, it is not safe to have multiple different writers or\n * multiple different readers.  If there are to be multiple different writers\n * then the application writer must place each call to a writing API function\n * (such as xStreamBufferSend()) inside a critical section and set the send\n * block time to 0.  Likewise, if there are to be multiple different readers\n * then the application writer must place each call to a reading API function\n * (such as xStreamBufferReceive()) inside a critical section and set the receive\n * block time to 0.\n *\n * Use xStreamBufferSend() to write to a stream buffer from a task.  Use\n * xStreamBufferSendFromISR() to write to a stream buffer from an interrupt\n * service routine (ISR).\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xStreamBufferSendFromISR() to be available.\n *\n * @param xStreamBuffer The handle of the stream buffer to which a stream is\n * being sent.\n *\n * @param pvTxData A pointer to the data that is to be copied into the stream\n * buffer.\n *\n * @param xDataLengthBytes The maximum number of bytes to copy from pvTxData\n * into the stream buffer.\n *\n * @param pxHigherPriorityTaskWoken  It is possible that a stream buffer will\n * have a task blocked on it waiting for data.  Calling\n * xStreamBufferSendFromISR() can make data available, and so cause a task that\n * was waiting for data to leave the Blocked state.  If calling\n * xStreamBufferSendFromISR() causes a task to leave the Blocked state, and the\n * unblocked task has a priority higher than the currently executing task (the\n * task that was interrupted), then, internally, xStreamBufferSendFromISR()\n * will set *pxHigherPriorityTaskWoken to pdTRUE.  If\n * xStreamBufferSendFromISR() sets this value to pdTRUE, then normally a\n * context switch should be performed before the interrupt is exited.  This will\n * ensure that the interrupt returns directly to the highest priority Ready\n * state task.  *pxHigherPriorityTaskWoken should be set to pdFALSE before it\n * is passed into the function.  See the example code below for an example.\n *\n * @return The number of bytes actually written to the stream buffer, which will\n * be less than xDataLengthBytes if the stream buffer didn't have enough free\n * space for all the bytes to be written.\n *\n * Example use:\n * @code{c}\n * // A stream buffer that has already been created.\n * StreamBufferHandle_t xStreamBuffer;\n *\n * void vAnInterruptServiceRoutine( void )\n * {\n * size_t xBytesSent;\n * char *pcStringToSend = \"String to send\";\n * BaseType_t xHigherPriorityTaskWoken = pdFALSE; // Initialised to pdFALSE.\n *\n *  // Attempt to send the string to the stream buffer.\n *  xBytesSent = xStreamBufferSendFromISR( xStreamBuffer,\n *                                         ( void * ) pcStringToSend,\n *                                         strlen( pcStringToSend ),\n *                                         &xHigherPriorityTaskWoken );\n *\n *  if( xBytesSent != strlen( pcStringToSend ) )\n *  {\n *      // There was not enough free space in the stream buffer for the entire\n *      // string to be written, ut xBytesSent bytes were written.\n *  }\n *\n *  // If xHigherPriorityTaskWoken was set to pdTRUE inside\n *  // xStreamBufferSendFromISR() then a task that has a priority above the\n *  // priority of the currently executing task was unblocked and a context\n *  // switch should be performed to ensure the ISR returns to the unblocked\n *  // task.  In most FreeRTOS ports this is done by simply passing\n *  // xHigherPriorityTaskWoken into portYIELD_FROM_ISR(), which will test the\n *  // variables value, and perform the context switch if necessary.  Check the\n *  // documentation for the port in use for port specific instructions.\n *  portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\n * }\n * @endcode\n * \\defgroup xStreamBufferSendFromISR xStreamBufferSendFromISR\n * \\ingroup StreamBufferManagement\n */\nsize_t xStreamBufferSendFromISR( StreamBufferHandle_t xStreamBuffer,\n                                 const void * pvTxData,\n                                 size_t xDataLengthBytes,\n                                 BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * size_t xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer,\n *                              void *pvRxData,\n *                              size_t xBufferLengthBytes,\n *                              TickType_t xTicksToWait );\n * @endcode\n *\n * Receives bytes from a stream buffer.\n *\n * ***NOTE***:  Uniquely among FreeRTOS objects, the stream buffer\n * implementation (so also the message buffer implementation, as message buffers\n * are built on top of stream buffers) assumes there is only one task or\n * interrupt that will write to the buffer (the writer), and only one task or\n * interrupt that will read from the buffer (the reader).  It is safe for the\n * writer and reader to be different tasks or interrupts, but, unlike other\n * FreeRTOS objects, it is not safe to have multiple different writers or\n * multiple different readers.  If there are to be multiple different writers\n * then the application writer must place each call to a writing API function\n * (such as xStreamBufferSend()) inside a critical section and set the send\n * block time to 0.  Likewise, if there are to be multiple different readers\n * then the application writer must place each call to a reading API function\n * (such as xStreamBufferReceive()) inside a critical section and set the receive\n * block time to 0.\n *\n * Use xStreamBufferReceive() to read from a stream buffer from a task.  Use\n * xStreamBufferReceiveFromISR() to read from a stream buffer from an\n * interrupt service routine (ISR).\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xStreamBufferReceive() to be available.\n *\n * @param xStreamBuffer The handle of the stream buffer from which bytes are to\n * be received.\n *\n * @param pvRxData A pointer to the buffer into which the received bytes will be\n * copied.\n *\n * @param xBufferLengthBytes The length of the buffer pointed to by the\n * pvRxData parameter.  This sets the maximum number of bytes to receive in one\n * call.  xStreamBufferReceive will return as many bytes as possible up to a\n * maximum set by xBufferLengthBytes.\n *\n * @param xTicksToWait The maximum amount of time the task should remain in the\n * Blocked state to wait for data to become available if the stream buffer is\n * empty.  xStreamBufferReceive() will return immediately if xTicksToWait is\n * zero.  The block time is specified in tick periods, so the absolute time it\n * represents is dependent on the tick frequency.  The macro pdMS_TO_TICKS() can\n * be used to convert a time specified in milliseconds into a time specified in\n * ticks.  Setting xTicksToWait to portMAX_DELAY will cause the task to wait\n * indefinitely (without timing out), provided INCLUDE_vTaskSuspend is set to 1\n * in FreeRTOSConfig.h.  A task does not use any CPU time when it is in the\n * Blocked state.\n *\n * @return The number of bytes actually read from the stream buffer, which will\n * be less than xBufferLengthBytes if the call to xStreamBufferReceive() timed\n * out before xBufferLengthBytes were available.\n *\n * Example use:\n * @code{c}\n * void vAFunction( StreamBuffer_t xStreamBuffer )\n * {\n * uint8_t ucRxData[ 20 ];\n * size_t xReceivedBytes;\n * const TickType_t xBlockTime = pdMS_TO_TICKS( 20 );\n *\n *  // Receive up to another sizeof( ucRxData ) bytes from the stream buffer.\n *  // Wait in the Blocked state (so not using any CPU processing time) for a\n *  // maximum of 100ms for the full sizeof( ucRxData ) number of bytes to be\n *  // available.\n *  xReceivedBytes = xStreamBufferReceive( xStreamBuffer,\n *                                         ( void * ) ucRxData,\n *                                         sizeof( ucRxData ),\n *                                         xBlockTime );\n *\n *  if( xReceivedBytes > 0 )\n *  {\n *      // A ucRxData contains another xReceivedBytes bytes of data, which can\n *      // be processed here....\n *  }\n * }\n * @endcode\n * \\defgroup xStreamBufferReceive xStreamBufferReceive\n * \\ingroup StreamBufferManagement\n */\nsize_t xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer,\n                             void * pvRxData,\n                             size_t xBufferLengthBytes,\n                             TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * size_t xStreamBufferReceiveFromISR( StreamBufferHandle_t xStreamBuffer,\n *                                     void *pvRxData,\n *                                     size_t xBufferLengthBytes,\n *                                     BaseType_t *pxHigherPriorityTaskWoken );\n * @endcode\n *\n * An interrupt safe version of the API function that receives bytes from a\n * stream buffer.\n *\n * Use xStreamBufferReceive() to read bytes from a stream buffer from a task.\n * Use xStreamBufferReceiveFromISR() to read bytes from a stream buffer from an\n * interrupt service routine (ISR).\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xStreamBufferReceiveFromISR() to be available.\n *\n * @param xStreamBuffer The handle of the stream buffer from which a stream\n * is being received.\n *\n * @param pvRxData A pointer to the buffer into which the received bytes are\n * copied.\n *\n * @param xBufferLengthBytes The length of the buffer pointed to by the\n * pvRxData parameter.  This sets the maximum number of bytes to receive in one\n * call.  xStreamBufferReceive will return as many bytes as possible up to a\n * maximum set by xBufferLengthBytes.\n *\n * @param pxHigherPriorityTaskWoken  It is possible that a stream buffer will\n * have a task blocked on it waiting for space to become available.  Calling\n * xStreamBufferReceiveFromISR() can make space available, and so cause a task\n * that is waiting for space to leave the Blocked state.  If calling\n * xStreamBufferReceiveFromISR() causes a task to leave the Blocked state, and\n * the unblocked task has a priority higher than the currently executing task\n * (the task that was interrupted), then, internally,\n * xStreamBufferReceiveFromISR() will set *pxHigherPriorityTaskWoken to pdTRUE.\n * If xStreamBufferReceiveFromISR() sets this value to pdTRUE, then normally a\n * context switch should be performed before the interrupt is exited.  That will\n * ensure the interrupt returns directly to the highest priority Ready state\n * task.  *pxHigherPriorityTaskWoken should be set to pdFALSE before it is\n * passed into the function.  See the code example below for an example.\n *\n * @return The number of bytes read from the stream buffer, if any.\n *\n * Example use:\n * @code{c}\n * // A stream buffer that has already been created.\n * StreamBuffer_t xStreamBuffer;\n *\n * void vAnInterruptServiceRoutine( void )\n * {\n * uint8_t ucRxData[ 20 ];\n * size_t xReceivedBytes;\n * BaseType_t xHigherPriorityTaskWoken = pdFALSE;  // Initialised to pdFALSE.\n *\n *  // Receive the next stream from the stream buffer.\n *  xReceivedBytes = xStreamBufferReceiveFromISR( xStreamBuffer,\n *                                                ( void * ) ucRxData,\n *                                                sizeof( ucRxData ),\n *                                                &xHigherPriorityTaskWoken );\n *\n *  if( xReceivedBytes > 0 )\n *  {\n *      // ucRxData contains xReceivedBytes read from the stream buffer.\n *      // Process the stream here....\n *  }\n *\n *  // If xHigherPriorityTaskWoken was set to pdTRUE inside\n *  // xStreamBufferReceiveFromISR() then a task that has a priority above the\n *  // priority of the currently executing task was unblocked and a context\n *  // switch should be performed to ensure the ISR returns to the unblocked\n *  // task.  In most FreeRTOS ports this is done by simply passing\n *  // xHigherPriorityTaskWoken into portYIELD_FROM_ISR(), which will test the\n *  // variables value, and perform the context switch if necessary.  Check the\n *  // documentation for the port in use for port specific instructions.\n *  portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\n * }\n * @endcode\n * \\defgroup xStreamBufferReceiveFromISR xStreamBufferReceiveFromISR\n * \\ingroup StreamBufferManagement\n */\nsize_t xStreamBufferReceiveFromISR( StreamBufferHandle_t xStreamBuffer,\n                                    void * pvRxData,\n                                    size_t xBufferLengthBytes,\n                                    BaseType_t * const pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * void vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer );\n * @endcode\n *\n * Deletes a stream buffer that was previously created using a call to\n * xStreamBufferCreate() or xStreamBufferCreateStatic().  If the stream\n * buffer was created using dynamic memory (that is, by xStreamBufferCreate()),\n * then the allocated memory is freed.\n *\n * A stream buffer handle must not be used after the stream buffer has been\n * deleted.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * vStreamBufferDelete() to be available.\n *\n * @param xStreamBuffer The handle of the stream buffer to be deleted.\n *\n * \\defgroup vStreamBufferDelete vStreamBufferDelete\n * \\ingroup StreamBufferManagement\n */\nvoid vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * BaseType_t xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer );\n * @endcode\n *\n * Queries a stream buffer to see if it is full.  A stream buffer is full if it\n * does not have any free space, and therefore cannot accept any more data.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xStreamBufferIsFull() to be available.\n *\n * @param xStreamBuffer The handle of the stream buffer being queried.\n *\n * @return If the stream buffer is full then pdTRUE is returned.  Otherwise\n * pdFALSE is returned.\n *\n * \\defgroup xStreamBufferIsFull xStreamBufferIsFull\n * \\ingroup StreamBufferManagement\n */\nBaseType_t xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * BaseType_t xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer );\n * @endcode\n *\n * Queries a stream buffer to see if it is empty.  A stream buffer is empty if\n * it does not contain any data.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xStreamBufferIsEmpty() to be available.\n *\n * @param xStreamBuffer The handle of the stream buffer being queried.\n *\n * @return If the stream buffer is empty then pdTRUE is returned.  Otherwise\n * pdFALSE is returned.\n *\n * \\defgroup xStreamBufferIsEmpty xStreamBufferIsEmpty\n * \\ingroup StreamBufferManagement\n */\nBaseType_t xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * BaseType_t xStreamBufferReset( StreamBufferHandle_t xStreamBuffer );\n * @endcode\n *\n * Resets a stream buffer to its initial, empty, state.  Any data that was in\n * the stream buffer is discarded.  A stream buffer can only be reset if there\n * are no tasks blocked waiting to either send to or receive from the stream\n * buffer.\n *\n * Use xStreamBufferReset() to reset a stream buffer from a task.\n * Use xStreamBufferResetFromISR() to reset a stream buffer from an\n * interrupt service routine (ISR).\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xStreamBufferReset() to be available.\n *\n * @param xStreamBuffer The handle of the stream buffer being reset.\n *\n * @return If the stream buffer is reset then pdPASS is returned.  If there was\n * a task blocked waiting to send to or read from the stream buffer then the\n * stream buffer is not reset and pdFAIL is returned.\n *\n * \\defgroup xStreamBufferReset xStreamBufferReset\n * \\ingroup StreamBufferManagement\n */\nBaseType_t xStreamBufferReset( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * BaseType_t xStreamBufferResetFromISR( StreamBufferHandle_t xStreamBuffer );\n * @endcode\n *\n * An interrupt safe version of the API function that resets the stream buffer.\n *\n * Resets a stream buffer to its initial, empty, state.  Any data that was in\n * the stream buffer is discarded.  A stream buffer can only be reset if there\n * are no tasks blocked waiting to either send to or receive from the stream\n * buffer.\n *\n * Use xStreamBufferReset() to reset a stream buffer from a task.\n * Use xStreamBufferResetFromISR() to reset a stream buffer from an\n * interrupt service routine (ISR).\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xStreamBufferResetFromISR() to be available.\n *\n * @param xStreamBuffer The handle of the stream buffer being reset.\n *\n * @return If the stream buffer is reset then pdPASS is returned.  If there was\n * a task blocked waiting to send to or read from the stream buffer then the\n * stream buffer is not reset and pdFAIL is returned.\n *\n * \\defgroup xStreamBufferResetFromISR xStreamBufferResetFromISR\n * \\ingroup StreamBufferManagement\n */\nBaseType_t xStreamBufferResetFromISR( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * size_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer );\n * @endcode\n *\n * Queries a stream buffer to see how much free space it contains, which is\n * equal to the amount of data that can be sent to the stream buffer before it\n * is full.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xStreamBufferSpacesAvailable() to be available.\n *\n * @param xStreamBuffer The handle of the stream buffer being queried.\n *\n * @return The number of bytes that can be written to the stream buffer before\n * the stream buffer would be full.\n *\n * \\defgroup xStreamBufferSpacesAvailable xStreamBufferSpacesAvailable\n * \\ingroup StreamBufferManagement\n */\nsize_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * size_t xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer );\n * @endcode\n *\n * Queries a stream buffer to see how much data it contains, which is equal to\n * the number of bytes that can be read from the stream buffer before the stream\n * buffer would be empty.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xStreamBufferBytesAvailable() to be available.\n *\n * @param xStreamBuffer The handle of the stream buffer being queried.\n *\n * @return The number of bytes that can be read from the stream buffer before\n * the stream buffer would be empty.\n *\n * \\defgroup xStreamBufferBytesAvailable xStreamBufferBytesAvailable\n * \\ingroup StreamBufferManagement\n */\nsize_t xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * BaseType_t xStreamBufferSetTriggerLevel( StreamBufferHandle_t xStreamBuffer, size_t xTriggerLevel );\n * @endcode\n *\n * A stream buffer's trigger level is the number of bytes that must be in the\n * stream buffer before a task that is blocked on the stream buffer to\n * wait for data is moved out of the blocked state.  For example, if a task is\n * blocked on a read of an empty stream buffer that has a trigger level of 1\n * then the task will be unblocked when a single byte is written to the buffer\n * or the task's block time expires.  As another example, if a task is blocked\n * on a read of an empty stream buffer that has a trigger level of 10 then the\n * task will not be unblocked until the stream buffer contains at least 10 bytes\n * or the task's block time expires.  If a reading task's block time expires\n * before the trigger level is reached then the task will still receive however\n * many bytes are actually available.  Setting a trigger level of 0 will result\n * in a trigger level of 1 being used.  It is not valid to specify a trigger\n * level that is greater than the buffer size.\n *\n * A trigger level is set when the stream buffer is created, and can be modified\n * using xStreamBufferSetTriggerLevel().\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xStreamBufferSetTriggerLevel() to be available.\n *\n * @param xStreamBuffer The handle of the stream buffer being updated.\n *\n * @param xTriggerLevel The new trigger level for the stream buffer.\n *\n * @return If xTriggerLevel was less than or equal to the stream buffer's length\n * then the trigger level will be updated and pdTRUE is returned.  Otherwise\n * pdFALSE is returned.\n *\n * \\defgroup xStreamBufferSetTriggerLevel xStreamBufferSetTriggerLevel\n * \\ingroup StreamBufferManagement\n */\nBaseType_t xStreamBufferSetTriggerLevel( StreamBufferHandle_t xStreamBuffer,\n                                         size_t xTriggerLevel ) PRIVILEGED_FUNCTION;\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * BaseType_t xStreamBufferSendCompletedFromISR( StreamBufferHandle_t xStreamBuffer, BaseType_t *pxHigherPriorityTaskWoken );\n * @endcode\n *\n * For advanced users only.\n *\n * The sbSEND_COMPLETED() macro is called from within the FreeRTOS APIs when\n * data is sent to a message buffer or stream buffer.  If there was a task that\n * was blocked on the message or stream buffer waiting for data to arrive then\n * the sbSEND_COMPLETED() macro sends a notification to the task to remove it\n * from the Blocked state.  xStreamBufferSendCompletedFromISR() does the same\n * thing.  It is provided to enable application writers to implement their own\n * version of sbSEND_COMPLETED(), and MUST NOT BE USED AT ANY OTHER TIME.\n *\n * See the example implemented in FreeRTOS/Demo/Minimal/MessageBufferAMP.c for\n * additional information.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xStreamBufferSendCompletedFromISR() to be available.\n *\n * @param xStreamBuffer The handle of the stream buffer to which data was\n * written.\n *\n * @param pxHigherPriorityTaskWoken *pxHigherPriorityTaskWoken should be\n * initialised to pdFALSE before it is passed into\n * xStreamBufferSendCompletedFromISR().  If calling\n * xStreamBufferSendCompletedFromISR() removes a task from the Blocked state,\n * and the task has a priority above the priority of the currently running task,\n * then *pxHigherPriorityTaskWoken will get set to pdTRUE indicating that a\n * context switch should be performed before exiting the ISR.\n *\n * @return If a task was removed from the Blocked state then pdTRUE is returned.\n * Otherwise pdFALSE is returned.\n *\n * \\defgroup xStreamBufferSendCompletedFromISR xStreamBufferSendCompletedFromISR\n * \\ingroup StreamBufferManagement\n */\nBaseType_t xStreamBufferSendCompletedFromISR( StreamBufferHandle_t xStreamBuffer,\n                                              BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * BaseType_t xStreamBufferReceiveCompletedFromISR( StreamBufferHandle_t xStreamBuffer, BaseType_t *pxHigherPriorityTaskWoken );\n * @endcode\n *\n * For advanced users only.\n *\n * The sbRECEIVE_COMPLETED() macro is called from within the FreeRTOS APIs when\n * data is read out of a message buffer or stream buffer.  If there was a task\n * that was blocked on the message or stream buffer waiting for data to arrive\n * then the sbRECEIVE_COMPLETED() macro sends a notification to the task to\n * remove it from the Blocked state.  xStreamBufferReceiveCompletedFromISR()\n * does the same thing.  It is provided to enable application writers to\n * implement their own version of sbRECEIVE_COMPLETED(), and MUST NOT BE USED AT\n * ANY OTHER TIME.\n *\n * See the example implemented in FreeRTOS/Demo/Minimal/MessageBufferAMP.c for\n * additional information.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * xStreamBufferReceiveCompletedFromISR() to be available.\n *\n * @param xStreamBuffer The handle of the stream buffer from which data was\n * read.\n *\n * @param pxHigherPriorityTaskWoken *pxHigherPriorityTaskWoken should be\n * initialised to pdFALSE before it is passed into\n * xStreamBufferReceiveCompletedFromISR().  If calling\n * xStreamBufferReceiveCompletedFromISR() removes a task from the Blocked state,\n * and the task has a priority above the priority of the currently running task,\n * then *pxHigherPriorityTaskWoken will get set to pdTRUE indicating that a\n * context switch should be performed before exiting the ISR.\n *\n * @return If a task was removed from the Blocked state then pdTRUE is returned.\n * Otherwise pdFALSE is returned.\n *\n * \\defgroup xStreamBufferReceiveCompletedFromISR xStreamBufferReceiveCompletedFromISR\n * \\ingroup StreamBufferManagement\n */\nBaseType_t xStreamBufferReceiveCompletedFromISR( StreamBufferHandle_t xStreamBuffer,\n                                                 BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * UBaseType_t uxStreamBufferGetStreamBufferNotificationIndex( StreamBufferHandle_t xStreamBuffer );\n * @endcode\n *\n * Get the task notification index used for the supplied stream buffer which can\n * be set using vStreamBufferSetStreamBufferNotificationIndex. If the task\n * notification index for the stream buffer is not changed using\n * vStreamBufferSetStreamBufferNotificationIndex, this function returns the\n * default value (tskDEFAULT_INDEX_TO_NOTIFY).\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * uxStreamBufferGetStreamBufferNotificationIndex() to be available.\n *\n * @param xStreamBuffer The handle of the stream buffer for which the task\n * notification index is retrieved.\n *\n * @return The task notification index for the stream buffer.\n *\n * \\defgroup uxStreamBufferGetStreamBufferNotificationIndex uxStreamBufferGetStreamBufferNotificationIndex\n * \\ingroup StreamBufferManagement\n */\nUBaseType_t uxStreamBufferGetStreamBufferNotificationIndex( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;\n\n/**\n * stream_buffer.h\n *\n * @code{c}\n * void vStreamBufferSetStreamBufferNotificationIndex ( StreamBuffer_t xStreamBuffer, UBaseType_t uxNotificationIndex );\n * @endcode\n *\n * Set the task notification index used for the supplied stream buffer.\n * Successive calls to stream buffer APIs (like xStreamBufferSend or\n * xStreamBufferReceive) for this stream buffer will use this new index for\n * their task notifications.\n *\n * If this function is not called, the default index (tskDEFAULT_INDEX_TO_NOTIFY)\n * is used for task notifications. It is recommended to call this function\n * before attempting to send or receive data from the stream buffer to avoid\n * inconsistencies.\n *\n * configUSE_STREAM_BUFFERS must be set to 1 in for FreeRTOSConfig.h for\n * vStreamBufferSetStreamBufferNotificationIndex() to be available.\n *\n * @param xStreamBuffer The handle of the stream buffer for which the task\n * notification index is set.\n *\n * @param uxNotificationIndex The task notification index to set.\n *\n * \\defgroup vStreamBufferSetStreamBufferNotificationIndex vStreamBufferSetStreamBufferNotificationIndex\n * \\ingroup StreamBufferManagement\n */\nvoid vStreamBufferSetStreamBufferNotificationIndex( StreamBufferHandle_t xStreamBuffer,\n                                                    UBaseType_t uxNotificationIndex ) PRIVILEGED_FUNCTION;\n\n/* Functions below here are not part of the public API. */\nStreamBufferHandle_t xStreamBufferGenericCreate( size_t xBufferSizeBytes,\n                                                 size_t xTriggerLevelBytes,\n                                                 BaseType_t xStreamBufferType,\n                                                 StreamBufferCallbackFunction_t pxSendCompletedCallback,\n                                                 StreamBufferCallbackFunction_t pxReceiveCompletedCallback ) PRIVILEGED_FUNCTION;\n\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    StreamBufferHandle_t xStreamBufferGenericCreateStatic( size_t xBufferSizeBytes,\n                                                           size_t xTriggerLevelBytes,\n                                                           BaseType_t xStreamBufferType,\n                                                           uint8_t * const pucStreamBufferStorageArea,\n                                                           StaticStreamBuffer_t * const pxStaticStreamBuffer,\n                                                           StreamBufferCallbackFunction_t pxSendCompletedCallback,\n                                                           StreamBufferCallbackFunction_t pxReceiveCompletedCallback ) PRIVILEGED_FUNCTION;\n#endif\n\nsize_t xStreamBufferNextMessageLengthBytes( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;\n\n#if ( configUSE_TRACE_FACILITY == 1 )\n    void vStreamBufferSetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer,\n                                             UBaseType_t uxStreamBufferNumber ) PRIVILEGED_FUNCTION;\n    UBaseType_t uxStreamBufferGetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;\n    uint8_t ucStreamBufferGetStreamBufferType( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;\n#endif\n\n/* *INDENT-OFF* */\n#if defined( __cplusplus )\n    }\n#endif\n/* *INDENT-ON* */\n\n#endif /* !defined( STREAM_BUFFER_H ) */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/task.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n\n#ifndef INC_TASK_H\n#define INC_TASK_H\n\n#ifndef INC_FREERTOS_H\n    #error \"include FreeRTOS.h must appear in source files before include task.h\"\n#endif\n\n#include \"list.h\"\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n    extern \"C\" {\n#endif\n/* *INDENT-ON* */\n\n/*-----------------------------------------------------------\n* MACROS AND DEFINITIONS\n*----------------------------------------------------------*/\n\n/*\n * If tskKERNEL_VERSION_NUMBER ends with + it represents the version in development\n * after the numbered release.\n *\n * The tskKERNEL_VERSION_MAJOR, tskKERNEL_VERSION_MINOR, tskKERNEL_VERSION_BUILD\n * values will reflect the last released version number.\n */\n#define tskKERNEL_VERSION_NUMBER       \"V11.1.0\"\n#define tskKERNEL_VERSION_MAJOR        11\n#define tskKERNEL_VERSION_MINOR        1\n#define tskKERNEL_VERSION_BUILD        0\n\n/* MPU region parameters passed in ulParameters\n * of MemoryRegion_t struct. */\n#define tskMPU_REGION_READ_ONLY        ( 1U << 0U )\n#define tskMPU_REGION_READ_WRITE       ( 1U << 1U )\n#define tskMPU_REGION_EXECUTE_NEVER    ( 1U << 2U )\n#define tskMPU_REGION_NORMAL_MEMORY    ( 1U << 3U )\n#define tskMPU_REGION_DEVICE_MEMORY    ( 1U << 4U )\n\n/* MPU region permissions stored in MPU settings to\n * authorize access requests. */\n#define tskMPU_READ_PERMISSION         ( 1U << 0U )\n#define tskMPU_WRITE_PERMISSION        ( 1U << 1U )\n\n/* The direct to task notification feature used to have only a single notification\n * per task.  Now there is an array of notifications per task that is dimensioned by\n * configTASK_NOTIFICATION_ARRAY_ENTRIES.  For backward compatibility, any use of the\n * original direct to task notification defaults to using the first index in the\n * array. */\n#define tskDEFAULT_INDEX_TO_NOTIFY     ( 0 )\n\n/**\n * task. h\n *\n * Type by which tasks are referenced.  For example, a call to xTaskCreate\n * returns (via a pointer parameter) an TaskHandle_t variable that can then\n * be used as a parameter to vTaskDelete to delete the task.\n *\n * \\defgroup TaskHandle_t TaskHandle_t\n * \\ingroup Tasks\n */\nstruct tskTaskControlBlock; /* The old naming convention is used to prevent breaking kernel aware debuggers. */\ntypedef struct tskTaskControlBlock         * TaskHandle_t;\ntypedef const struct tskTaskControlBlock   * ConstTaskHandle_t;\n\n/*\n * Defines the prototype to which the application task hook function must\n * conform.\n */\ntypedef BaseType_t (* TaskHookFunction_t)( void * arg );\n\n/* Task states returned by eTaskGetState. */\ntypedef enum\n{\n    eRunning = 0, /* A task is querying the state of itself, so must be running. */\n    eReady,       /* The task being queried is in a ready or pending ready list. */\n    eBlocked,     /* The task being queried is in the Blocked state. */\n    eSuspended,   /* The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */\n    eDeleted,     /* The task being queried has been deleted, but its TCB has not yet been freed. */\n    eInvalid      /* Used as an 'invalid state' value. */\n} eTaskState;\n\n/* Actions that can be performed when vTaskNotify() is called. */\ntypedef enum\n{\n    eNoAction = 0,            /* Notify the task without updating its notify value. */\n    eSetBits,                 /* Set bits in the task's notification value. */\n    eIncrement,               /* Increment the task's notification value. */\n    eSetValueWithOverwrite,   /* Set the task's notification value to a specific value even if the previous value has not yet been read by the task. */\n    eSetValueWithoutOverwrite /* Set the task's notification value if the previous value has been read by the task. */\n} eNotifyAction;\n\n/*\n * Used internally only.\n */\ntypedef struct xTIME_OUT\n{\n    BaseType_t xOverflowCount;\n    TickType_t xTimeOnEntering;\n} TimeOut_t;\n\n/*\n * Defines the memory ranges allocated to the task when an MPU is used.\n */\ntypedef struct xMEMORY_REGION\n{\n    void * pvBaseAddress;\n    uint32_t ulLengthInBytes;\n    uint32_t ulParameters;\n} MemoryRegion_t;\n\n/*\n * Parameters required to create an MPU protected task.\n */\ntypedef struct xTASK_PARAMETERS\n{\n    TaskFunction_t pvTaskCode;\n    const char * pcName;\n    configSTACK_DEPTH_TYPE usStackDepth;\n    void * pvParameters;\n    UBaseType_t uxPriority;\n    StackType_t * puxStackBuffer;\n    MemoryRegion_t xRegions[ portNUM_CONFIGURABLE_REGIONS ];\n    #if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )\n        StaticTask_t * const pxTaskBuffer;\n    #endif\n} TaskParameters_t;\n\n/* Used with the uxTaskGetSystemState() function to return the state of each task\n * in the system. */\ntypedef struct xTASK_STATUS\n{\n    TaskHandle_t xHandle;                         /* The handle of the task to which the rest of the information in the structure relates. */\n    const char * pcTaskName;                      /* A pointer to the task's name.  This value will be invalid if the task was deleted since the structure was populated! */\n    UBaseType_t xTaskNumber;                      /* A number unique to the task. */\n    eTaskState eCurrentState;                     /* The state in which the task existed when the structure was populated. */\n    UBaseType_t uxCurrentPriority;                /* The priority at which the task was running (may be inherited) when the structure was populated. */\n    UBaseType_t uxBasePriority;                   /* The priority to which the task will return if the task's current priority has been inherited to avoid unbounded priority inversion when obtaining a mutex.  Only valid if configUSE_MUTEXES is defined as 1 in FreeRTOSConfig.h. */\n    configRUN_TIME_COUNTER_TYPE ulRunTimeCounter; /* The total run time allocated to the task so far, as defined by the run time stats clock.  See https://www.FreeRTOS.org/rtos-run-time-stats.html.  Only valid when configGENERATE_RUN_TIME_STATS is defined as 1 in FreeRTOSConfig.h. */\n    StackType_t * pxStackBase;                    /* Points to the lowest address of the task's stack area. */\n    #if ( ( portSTACK_GROWTH > 0 ) || ( configRECORD_STACK_HIGH_ADDRESS == 1 ) )\n        StackType_t * pxTopOfStack;               /* Points to the top address of the task's stack area. */\n        StackType_t * pxEndOfStack;               /* Points to the end address of the task's stack area. */\n    #endif\n    configSTACK_DEPTH_TYPE usStackHighWaterMark;  /* The minimum amount of stack space that has remained for the task since the task was created.  The closer this value is to zero the closer the task has come to overflowing its stack. */\n    #if ( ( configUSE_CORE_AFFINITY == 1 ) && ( configNUMBER_OF_CORES > 1 ) )\n        UBaseType_t uxCoreAffinityMask;           /* The core affinity mask for the task */\n    #endif\n} TaskStatus_t;\n\n/* Possible return values for eTaskConfirmSleepModeStatus(). */\ntypedef enum\n{\n    eAbortSleep = 0, /* A task has been made ready or a context switch pended since portSUPPRESS_TICKS_AND_SLEEP() was called - abort entering a sleep mode. */\n    eStandardSleep   /* Enter a sleep mode that will not last any longer than the expected idle time. */\n    #if ( INCLUDE_vTaskSuspend == 1 )\n        ,\n        eNoTasksWaitingTimeout /* No tasks are waiting for a timeout so it is safe to enter a sleep mode that can only be exited by an external interrupt. */\n    #endif /* INCLUDE_vTaskSuspend */\n} eSleepModeStatus;\n\n/**\n * Defines the priority used by the idle task.  This must not be modified.\n *\n * \\ingroup TaskUtils\n */\n#define tskIDLE_PRIORITY    ( ( UBaseType_t ) 0U )\n\n/**\n * Defines affinity to all available cores.\n *\n * \\ingroup TaskUtils\n */\n#define tskNO_AFFINITY      ( ( UBaseType_t ) -1 )\n\n/**\n * task. h\n *\n * Macro for forcing a context switch.\n *\n * \\defgroup taskYIELD taskYIELD\n * \\ingroup SchedulerControl\n */\n#define taskYIELD()                          portYIELD()\n\n/**\n * task. h\n *\n * Macro to mark the start of a critical code region.  Preemptive context\n * switches cannot occur when in a critical region.\n *\n * NOTE: This may alter the stack (depending on the portable implementation)\n * so must be used with care!\n *\n * \\defgroup taskENTER_CRITICAL taskENTER_CRITICAL\n * \\ingroup SchedulerControl\n */\n#define taskENTER_CRITICAL()                 portENTER_CRITICAL()\n#if ( configNUMBER_OF_CORES == 1 )\n    #define taskENTER_CRITICAL_FROM_ISR()    portSET_INTERRUPT_MASK_FROM_ISR()\n#else\n    #define taskENTER_CRITICAL_FROM_ISR()    portENTER_CRITICAL_FROM_ISR()\n#endif\n\n/**\n * task. h\n *\n * Macro to mark the end of a critical code region.  Preemptive context\n * switches cannot occur when in a critical region.\n *\n * NOTE: This may alter the stack (depending on the portable implementation)\n * so must be used with care!\n *\n * \\defgroup taskEXIT_CRITICAL taskEXIT_CRITICAL\n * \\ingroup SchedulerControl\n */\n#define taskEXIT_CRITICAL()                    portEXIT_CRITICAL()\n#if ( configNUMBER_OF_CORES == 1 )\n    #define taskEXIT_CRITICAL_FROM_ISR( x )    portCLEAR_INTERRUPT_MASK_FROM_ISR( x )\n#else\n    #define taskEXIT_CRITICAL_FROM_ISR( x )    portEXIT_CRITICAL_FROM_ISR( x )\n#endif\n\n/**\n * task. h\n *\n * Macro to disable all maskable interrupts.\n *\n * \\defgroup taskDISABLE_INTERRUPTS taskDISABLE_INTERRUPTS\n * \\ingroup SchedulerControl\n */\n#define taskDISABLE_INTERRUPTS()    portDISABLE_INTERRUPTS()\n\n/**\n * task. h\n *\n * Macro to enable microcontroller interrupts.\n *\n * \\defgroup taskENABLE_INTERRUPTS taskENABLE_INTERRUPTS\n * \\ingroup SchedulerControl\n */\n#define taskENABLE_INTERRUPTS()     portENABLE_INTERRUPTS()\n\n/* Definitions returned by xTaskGetSchedulerState().  taskSCHEDULER_SUSPENDED is\n * 0 to generate more optimal code when configASSERT() is defined as the constant\n * is used in assert() statements. */\n#define taskSCHEDULER_SUSPENDED      ( ( BaseType_t ) 0 )\n#define taskSCHEDULER_NOT_STARTED    ( ( BaseType_t ) 1 )\n#define taskSCHEDULER_RUNNING        ( ( BaseType_t ) 2 )\n\n/* Checks if core ID is valid. */\n#define taskVALID_CORE_ID( xCoreID )    ( ( ( ( ( BaseType_t ) 0 <= ( xCoreID ) ) && ( ( xCoreID ) < ( BaseType_t ) configNUMBER_OF_CORES ) ) ) ? ( pdTRUE ) : ( pdFALSE ) )\n\n/*-----------------------------------------------------------\n* TASK CREATION API\n*----------------------------------------------------------*/\n\n/**\n * task. h\n * @code{c}\n * BaseType_t xTaskCreate(\n *                            TaskFunction_t pxTaskCode,\n *                            const char * const pcName,\n *                            const configSTACK_DEPTH_TYPE uxStackDepth,\n *                            void *pvParameters,\n *                            UBaseType_t uxPriority,\n *                            TaskHandle_t *pxCreatedTask\n *                        );\n * @endcode\n *\n * Create a new task and add it to the list of tasks that are ready to run.\n *\n * Internally, within the FreeRTOS implementation, tasks use two blocks of\n * memory.  The first block is used to hold the task's data structures.  The\n * second block is used by the task as its stack.  If a task is created using\n * xTaskCreate() then both blocks of memory are automatically dynamically\n * allocated inside the xTaskCreate() function.  (see\n * https://www.FreeRTOS.org/a00111.html).  If a task is created using\n * xTaskCreateStatic() then the application writer must provide the required\n * memory.  xTaskCreateStatic() therefore allows a task to be created without\n * using any dynamic memory allocation.\n *\n * See xTaskCreateStatic() for a version that does not use any dynamic memory\n * allocation.\n *\n * xTaskCreate() can only be used to create a task that has unrestricted\n * access to the entire microcontroller memory map.  Systems that include MPU\n * support can alternatively create an MPU constrained task using\n * xTaskCreateRestricted().\n *\n * @param pxTaskCode Pointer to the task entry function.  Tasks\n * must be implemented to never return (i.e. continuous loop).\n *\n * @param pcName A descriptive name for the task.  This is mainly used to\n * facilitate debugging.  Max length defined by configMAX_TASK_NAME_LEN - default\n * is 16.\n *\n * @param uxStackDepth The size of the task stack specified as the number of\n * variables the stack can hold - not the number of bytes.  For example, if\n * the stack is 16 bits wide and uxStackDepth is defined as 100, 200 bytes\n * will be allocated for stack storage.\n *\n * @param pvParameters Pointer that will be used as the parameter for the task\n * being created.\n *\n * @param uxPriority The priority at which the task should run.  Systems that\n * include MPU support can optionally create tasks in a privileged (system)\n * mode by setting bit portPRIVILEGE_BIT of the priority parameter.  For\n * example, to create a privileged task at priority 2 the uxPriority parameter\n * should be set to ( 2 | portPRIVILEGE_BIT ).\n *\n * @param pxCreatedTask Used to pass back a handle by which the created task\n * can be referenced.\n *\n * @return pdPASS if the task was successfully created and added to a ready\n * list, otherwise an error code defined in the file projdefs.h\n *\n * Example usage:\n * @code{c}\n * // Task to be created.\n * void vTaskCode( void * pvParameters )\n * {\n *   for( ;; )\n *   {\n *       // Task code goes here.\n *   }\n * }\n *\n * // Function that creates a task.\n * void vOtherFunction( void )\n * {\n * static uint8_t ucParameterToPass;\n * TaskHandle_t xHandle = NULL;\n *\n *   // Create the task, storing the handle.  Note that the passed parameter ucParameterToPass\n *   // must exist for the lifetime of the task, so in this case is declared static.  If it was just an\n *   // an automatic stack variable it might no longer exist, or at least have been corrupted, by the time\n *   // the new task attempts to access it.\n *   xTaskCreate( vTaskCode, \"NAME\", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle );\n *   configASSERT( xHandle );\n *\n *   // Use the handle to delete the task.\n *   if( xHandle != NULL )\n *   {\n *      vTaskDelete( xHandle );\n *   }\n * }\n * @endcode\n * \\defgroup xTaskCreate xTaskCreate\n * \\ingroup Tasks\n */\n#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n    BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,\n                            const char * const pcName,\n                            const configSTACK_DEPTH_TYPE uxStackDepth,\n                            void * const pvParameters,\n                            UBaseType_t uxPriority,\n                            TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION;\n#endif\n\n#if ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n    BaseType_t xTaskCreateAffinitySet( TaskFunction_t pxTaskCode,\n                                       const char * const pcName,\n                                       const configSTACK_DEPTH_TYPE uxStackDepth,\n                                       void * const pvParameters,\n                                       UBaseType_t uxPriority,\n                                       UBaseType_t uxCoreAffinityMask,\n                                       TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * task. h\n * @code{c}\n * TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,\n *                               const char * const pcName,\n *                               const configSTACK_DEPTH_TYPE uxStackDepth,\n *                               void *pvParameters,\n *                               UBaseType_t uxPriority,\n *                               StackType_t *puxStackBuffer,\n *                               StaticTask_t *pxTaskBuffer );\n * @endcode\n *\n * Create a new task and add it to the list of tasks that are ready to run.\n *\n * Internally, within the FreeRTOS implementation, tasks use two blocks of\n * memory.  The first block is used to hold the task's data structures.  The\n * second block is used by the task as its stack.  If a task is created using\n * xTaskCreate() then both blocks of memory are automatically dynamically\n * allocated inside the xTaskCreate() function.  (see\n * https://www.FreeRTOS.org/a00111.html).  If a task is created using\n * xTaskCreateStatic() then the application writer must provide the required\n * memory.  xTaskCreateStatic() therefore allows a task to be created without\n * using any dynamic memory allocation.\n *\n * @param pxTaskCode Pointer to the task entry function.  Tasks\n * must be implemented to never return (i.e. continuous loop).\n *\n * @param pcName A descriptive name for the task.  This is mainly used to\n * facilitate debugging.  The maximum length of the string is defined by\n * configMAX_TASK_NAME_LEN in FreeRTOSConfig.h.\n *\n * @param uxStackDepth The size of the task stack specified as the number of\n * variables the stack can hold - not the number of bytes.  For example, if\n * the stack is 32-bits wide and uxStackDepth is defined as 100 then 400 bytes\n * will be allocated for stack storage.\n *\n * @param pvParameters Pointer that will be used as the parameter for the task\n * being created.\n *\n * @param uxPriority The priority at which the task will run.\n *\n * @param puxStackBuffer Must point to a StackType_t array that has at least\n * uxStackDepth indexes - the array will then be used as the task's stack,\n * removing the need for the stack to be allocated dynamically.\n *\n * @param pxTaskBuffer Must point to a variable of type StaticTask_t, which will\n * then be used to hold the task's data structures, removing the need for the\n * memory to be allocated dynamically.\n *\n * @return If neither puxStackBuffer nor pxTaskBuffer are NULL, then the task\n * will be created and a handle to the created task is returned.  If either\n * puxStackBuffer or pxTaskBuffer are NULL then the task will not be created and\n * NULL is returned.\n *\n * Example usage:\n * @code{c}\n *\n *  // Dimensions of the buffer that the task being created will use as its stack.\n *  // NOTE:  This is the number of words the stack will hold, not the number of\n *  // bytes.  For example, if each stack item is 32-bits, and this is set to 100,\n *  // then 400 bytes (100 * 32-bits) will be allocated.\n #define STACK_SIZE 200\n *\n *  // Structure that will hold the TCB of the task being created.\n *  StaticTask_t xTaskBuffer;\n *\n *  // Buffer that the task being created will use as its stack.  Note this is\n *  // an array of StackType_t variables.  The size of StackType_t is dependent on\n *  // the RTOS port.\n *  StackType_t xStack[ STACK_SIZE ];\n *\n *  // Function that implements the task being created.\n *  void vTaskCode( void * pvParameters )\n *  {\n *      // The parameter value is expected to be 1 as 1 is passed in the\n *      // pvParameters value in the call to xTaskCreateStatic().\n *      configASSERT( ( uint32_t ) pvParameters == 1U );\n *\n *      for( ;; )\n *      {\n *          // Task code goes here.\n *      }\n *  }\n *\n *  // Function that creates a task.\n *  void vOtherFunction( void )\n *  {\n *      TaskHandle_t xHandle = NULL;\n *\n *      // Create the task without using any dynamic memory allocation.\n *      xHandle = xTaskCreateStatic(\n *                    vTaskCode,       // Function that implements the task.\n *                    \"NAME\",          // Text name for the task.\n *                    STACK_SIZE,      // Stack size in words, not bytes.\n *                    ( void * ) 1,    // Parameter passed into the task.\n *                    tskIDLE_PRIORITY,// Priority at which the task is created.\n *                    xStack,          // Array to use as the task's stack.\n *                    &xTaskBuffer );  // Variable to hold the task's data structure.\n *\n *      // puxStackBuffer and pxTaskBuffer were not NULL, so the task will have\n *      // been created, and xHandle will be the task's handle.  Use the handle\n *      // to suspend the task.\n *      vTaskSuspend( xHandle );\n *  }\n * @endcode\n * \\defgroup xTaskCreateStatic xTaskCreateStatic\n * \\ingroup Tasks\n */\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,\n                                    const char * const pcName,\n                                    const configSTACK_DEPTH_TYPE uxStackDepth,\n                                    void * const pvParameters,\n                                    UBaseType_t uxPriority,\n                                    StackType_t * const puxStackBuffer,\n                                    StaticTask_t * const pxTaskBuffer ) PRIVILEGED_FUNCTION;\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n\n#if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n    TaskHandle_t xTaskCreateStaticAffinitySet( TaskFunction_t pxTaskCode,\n                                               const char * const pcName,\n                                               const configSTACK_DEPTH_TYPE uxStackDepth,\n                                               void * const pvParameters,\n                                               UBaseType_t uxPriority,\n                                               StackType_t * const puxStackBuffer,\n                                               StaticTask_t * const pxTaskBuffer,\n                                               UBaseType_t uxCoreAffinityMask ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * task. h\n * @code{c}\n * BaseType_t xTaskCreateRestricted( TaskParameters_t *pxTaskDefinition, TaskHandle_t *pxCreatedTask );\n * @endcode\n *\n * Only available when configSUPPORT_DYNAMIC_ALLOCATION is set to 1.\n *\n * xTaskCreateRestricted() should only be used in systems that include an MPU\n * implementation.\n *\n * Create a new task and add it to the list of tasks that are ready to run.\n * The function parameters define the memory regions and associated access\n * permissions allocated to the task.\n *\n * See xTaskCreateRestrictedStatic() for a version that does not use any\n * dynamic memory allocation.\n *\n * @param pxTaskDefinition Pointer to a structure that contains a member\n * for each of the normal xTaskCreate() parameters (see the xTaskCreate() API\n * documentation) plus an optional stack buffer and the memory region\n * definitions.\n *\n * @param pxCreatedTask Used to pass back a handle by which the created task\n * can be referenced.\n *\n * @return pdPASS if the task was successfully created and added to a ready\n * list, otherwise an error code defined in the file projdefs.h\n *\n * Example usage:\n * @code{c}\n * // Create an TaskParameters_t structure that defines the task to be created.\n * static const TaskParameters_t xCheckTaskParameters =\n * {\n *  vATask,     // pvTaskCode - the function that implements the task.\n *  \"ATask\",    // pcName - just a text name for the task to assist debugging.\n *  100,        // uxStackDepth - the stack size DEFINED IN WORDS.\n *  NULL,       // pvParameters - passed into the task function as the function parameters.\n *  ( 1U | portPRIVILEGE_BIT ),// uxPriority - task priority, set the portPRIVILEGE_BIT if the task should run in a privileged state.\n *  cStackBuffer,// puxStackBuffer - the buffer to be used as the task stack.\n *\n *  // xRegions - Allocate up to three separate memory regions for access by\n *  // the task, with appropriate access permissions.  Different processors have\n *  // different memory alignment requirements - refer to the FreeRTOS documentation\n *  // for full information.\n *  {\n *      // Base address                 Length  Parameters\n *      { cReadWriteArray,              32,     portMPU_REGION_READ_WRITE },\n *      { cReadOnlyArray,               32,     portMPU_REGION_READ_ONLY },\n *      { cPrivilegedOnlyAccessArray,   128,    portMPU_REGION_PRIVILEGED_READ_WRITE }\n *  }\n * };\n *\n * int main( void )\n * {\n * TaskHandle_t xHandle;\n *\n *  // Create a task from the const structure defined above.  The task handle\n *  // is requested (the second parameter is not NULL) but in this case just for\n *  // demonstration purposes as its not actually used.\n *  xTaskCreateRestricted( &xRegTest1Parameters, &xHandle );\n *\n *  // Start the scheduler.\n *  vTaskStartScheduler();\n *\n *  // Will only get here if there was insufficient memory to create the idle\n *  // and/or timer task.\n *  for( ;; );\n * }\n * @endcode\n * \\defgroup xTaskCreateRestricted xTaskCreateRestricted\n * \\ingroup Tasks\n */\n#if ( portUSING_MPU_WRAPPERS == 1 )\n    BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition,\n                                      TaskHandle_t * pxCreatedTask ) PRIVILEGED_FUNCTION;\n#endif\n\n#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n    BaseType_t xTaskCreateRestrictedAffinitySet( const TaskParameters_t * const pxTaskDefinition,\n                                                 UBaseType_t uxCoreAffinityMask,\n                                                 TaskHandle_t * pxCreatedTask ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * task. h\n * @code{c}\n * BaseType_t xTaskCreateRestrictedStatic( TaskParameters_t *pxTaskDefinition, TaskHandle_t *pxCreatedTask );\n * @endcode\n *\n * Only available when configSUPPORT_STATIC_ALLOCATION is set to 1.\n *\n * xTaskCreateRestrictedStatic() should only be used in systems that include an\n * MPU implementation.\n *\n * Internally, within the FreeRTOS implementation, tasks use two blocks of\n * memory.  The first block is used to hold the task's data structures.  The\n * second block is used by the task as its stack.  If a task is created using\n * xTaskCreateRestricted() then the stack is provided by the application writer,\n * and the memory used to hold the task's data structure is automatically\n * dynamically allocated inside the xTaskCreateRestricted() function.  If a task\n * is created using xTaskCreateRestrictedStatic() then the application writer\n * must provide the memory used to hold the task's data structures too.\n * xTaskCreateRestrictedStatic() therefore allows a memory protected task to be\n * created without using any dynamic memory allocation.\n *\n * @param pxTaskDefinition Pointer to a structure that contains a member\n * for each of the normal xTaskCreate() parameters (see the xTaskCreate() API\n * documentation) plus an optional stack buffer and the memory region\n * definitions.  If configSUPPORT_STATIC_ALLOCATION is set to 1 the structure\n * contains an additional member, which is used to point to a variable of type\n * StaticTask_t - which is then used to hold the task's data structure.\n *\n * @param pxCreatedTask Used to pass back a handle by which the created task\n * can be referenced.\n *\n * @return pdPASS if the task was successfully created and added to a ready\n * list, otherwise an error code defined in the file projdefs.h\n *\n * Example usage:\n * @code{c}\n * // Create an TaskParameters_t structure that defines the task to be created.\n * // The StaticTask_t variable is only included in the structure when\n * // configSUPPORT_STATIC_ALLOCATION is set to 1.  The PRIVILEGED_DATA macro can\n * // be used to force the variable into the RTOS kernel's privileged data area.\n * static PRIVILEGED_DATA StaticTask_t xTaskBuffer;\n * static const TaskParameters_t xCheckTaskParameters =\n * {\n *  vATask,     // pvTaskCode - the function that implements the task.\n *  \"ATask\",    // pcName - just a text name for the task to assist debugging.\n *  100,        // uxStackDepth - the stack size DEFINED IN WORDS.\n *  NULL,       // pvParameters - passed into the task function as the function parameters.\n *  ( 1U | portPRIVILEGE_BIT ),// uxPriority - task priority, set the portPRIVILEGE_BIT if the task should run in a privileged state.\n *  cStackBuffer,// puxStackBuffer - the buffer to be used as the task stack.\n *\n *  // xRegions - Allocate up to three separate memory regions for access by\n *  // the task, with appropriate access permissions.  Different processors have\n *  // different memory alignment requirements - refer to the FreeRTOS documentation\n *  // for full information.\n *  {\n *      // Base address                 Length  Parameters\n *      { cReadWriteArray,              32,     portMPU_REGION_READ_WRITE },\n *      { cReadOnlyArray,               32,     portMPU_REGION_READ_ONLY },\n *      { cPrivilegedOnlyAccessArray,   128,    portMPU_REGION_PRIVILEGED_READ_WRITE }\n *  }\n *\n *  &xTaskBuffer; // Holds the task's data structure.\n * };\n *\n * int main( void )\n * {\n * TaskHandle_t xHandle;\n *\n *  // Create a task from the const structure defined above.  The task handle\n *  // is requested (the second parameter is not NULL) but in this case just for\n *  // demonstration purposes as its not actually used.\n *  xTaskCreateRestrictedStatic( &xRegTest1Parameters, &xHandle );\n *\n *  // Start the scheduler.\n *  vTaskStartScheduler();\n *\n *  // Will only get here if there was insufficient memory to create the idle\n *  // and/or timer task.\n *  for( ;; );\n * }\n * @endcode\n * \\defgroup xTaskCreateRestrictedStatic xTaskCreateRestrictedStatic\n * \\ingroup Tasks\n */\n#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )\n    BaseType_t xTaskCreateRestrictedStatic( const TaskParameters_t * const pxTaskDefinition,\n                                            TaskHandle_t * pxCreatedTask ) PRIVILEGED_FUNCTION;\n#endif\n\n#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n    BaseType_t xTaskCreateRestrictedStaticAffinitySet( const TaskParameters_t * const pxTaskDefinition,\n                                                       UBaseType_t uxCoreAffinityMask,\n                                                       TaskHandle_t * pxCreatedTask ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * task. h\n * @code{c}\n * void vTaskAllocateMPURegions( TaskHandle_t xTask, const MemoryRegion_t * const pxRegions );\n * @endcode\n *\n * Memory regions are assigned to a restricted task when the task is created by\n * a call to xTaskCreateRestricted().  These regions can be redefined using\n * vTaskAllocateMPURegions().\n *\n * @param xTaskToModify The handle of the task being updated.\n *\n * @param[in] pxRegions A pointer to a MemoryRegion_t structure that contains the\n * new memory region definitions.\n *\n * Example usage:\n * @code{c}\n * // Define an array of MemoryRegion_t structures that configures an MPU region\n * // allowing read/write access for 1024 bytes starting at the beginning of the\n * // ucOneKByte array.  The other two of the maximum 3 definable regions are\n * // unused so set to zero.\n * static const MemoryRegion_t xAltRegions[ portNUM_CONFIGURABLE_REGIONS ] =\n * {\n *  // Base address     Length      Parameters\n *  { ucOneKByte,       1024,       portMPU_REGION_READ_WRITE },\n *  { 0,                0,          0 },\n *  { 0,                0,          0 }\n * };\n *\n * void vATask( void *pvParameters )\n * {\n *  // This task was created such that it has access to certain regions of\n *  // memory as defined by the MPU configuration.  At some point it is\n *  // desired that these MPU regions are replaced with that defined in the\n *  // xAltRegions const struct above.  Use a call to vTaskAllocateMPURegions()\n *  // for this purpose.  NULL is used as the task handle to indicate that this\n *  // function should modify the MPU regions of the calling task.\n *  vTaskAllocateMPURegions( NULL, xAltRegions );\n *\n *  // Now the task can continue its function, but from this point on can only\n *  // access its stack and the ucOneKByte array (unless any other statically\n *  // defined or shared regions have been declared elsewhere).\n * }\n * @endcode\n * \\defgroup vTaskAllocateMPURegions vTaskAllocateMPURegions\n * \\ingroup Tasks\n */\n#if ( portUSING_MPU_WRAPPERS == 1 )\n    void vTaskAllocateMPURegions( TaskHandle_t xTaskToModify,\n                                  const MemoryRegion_t * const pxRegions ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * task. h\n * @code{c}\n * void vTaskDelete( TaskHandle_t xTaskToDelete );\n * @endcode\n *\n * INCLUDE_vTaskDelete must be defined as 1 for this function to be available.\n * See the configuration section for more information.\n *\n * Remove a task from the RTOS real time kernel's management.  The task being\n * deleted will be removed from all ready, blocked, suspended and event lists.\n *\n * NOTE:  The idle task is responsible for freeing the kernel allocated\n * memory from tasks that have been deleted.  It is therefore important that\n * the idle task is not starved of microcontroller processing time if your\n * application makes any calls to vTaskDelete ().  Memory allocated by the\n * task code is not automatically freed, and should be freed before the task\n * is deleted.\n *\n * See the demo application file death.c for sample code that utilises\n * vTaskDelete ().\n *\n * @param xTaskToDelete The handle of the task to be deleted.  Passing NULL will\n * cause the calling task to be deleted.\n *\n * Example usage:\n * @code{c}\n * void vOtherFunction( void )\n * {\n * TaskHandle_t xHandle;\n *\n *   // Create the task, storing the handle.\n *   xTaskCreate( vTaskCode, \"NAME\", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );\n *\n *   // Use the handle to delete the task.\n *   vTaskDelete( xHandle );\n * }\n * @endcode\n * \\defgroup vTaskDelete vTaskDelete\n * \\ingroup Tasks\n */\nvoid vTaskDelete( TaskHandle_t xTaskToDelete ) PRIVILEGED_FUNCTION;\n\n/*-----------------------------------------------------------\n* TASK CONTROL API\n*----------------------------------------------------------*/\n\n/**\n * task. h\n * @code{c}\n * void vTaskDelay( const TickType_t xTicksToDelay );\n * @endcode\n *\n * Delay a task for a given number of ticks.  The actual time that the\n * task remains blocked depends on the tick rate.  The constant\n * portTICK_PERIOD_MS can be used to calculate real time from the tick\n * rate - with the resolution of one tick period.\n *\n * INCLUDE_vTaskDelay must be defined as 1 for this function to be available.\n * See the configuration section for more information.\n *\n *\n * vTaskDelay() specifies a time at which the task wishes to unblock relative to\n * the time at which vTaskDelay() is called.  For example, specifying a block\n * period of 100 ticks will cause the task to unblock 100 ticks after\n * vTaskDelay() is called.  vTaskDelay() does not therefore provide a good method\n * of controlling the frequency of a periodic task as the path taken through the\n * code, as well as other task and interrupt activity, will affect the frequency\n * at which vTaskDelay() gets called and therefore the time at which the task\n * next executes.  See xTaskDelayUntil() for an alternative API function designed\n * to facilitate fixed frequency execution.  It does this by specifying an\n * absolute time (rather than a relative time) at which the calling task should\n * unblock.\n *\n * @param xTicksToDelay The amount of time, in tick periods, that\n * the calling task should block.\n *\n * Example usage:\n *\n * void vTaskFunction( void * pvParameters )\n * {\n * // Block for 500ms.\n * const TickType_t xDelay = 500 / portTICK_PERIOD_MS;\n *\n *   for( ;; )\n *   {\n *       // Simply toggle the LED every 500ms, blocking between each toggle.\n *       vToggleLED();\n *       vTaskDelay( xDelay );\n *   }\n * }\n *\n * \\defgroup vTaskDelay vTaskDelay\n * \\ingroup TaskCtrl\n */\nvoid vTaskDelay( const TickType_t xTicksToDelay ) PRIVILEGED_FUNCTION;\n\n/**\n * task. h\n * @code{c}\n * BaseType_t xTaskDelayUntil( TickType_t *pxPreviousWakeTime, const TickType_t xTimeIncrement );\n * @endcode\n *\n * INCLUDE_xTaskDelayUntil must be defined as 1 for this function to be available.\n * See the configuration section for more information.\n *\n * Delay a task until a specified time.  This function can be used by periodic\n * tasks to ensure a constant execution frequency.\n *\n * This function differs from vTaskDelay () in one important aspect:  vTaskDelay () will\n * cause a task to block for the specified number of ticks from the time vTaskDelay () is\n * called.  It is therefore difficult to use vTaskDelay () by itself to generate a fixed\n * execution frequency as the time between a task starting to execute and that task\n * calling vTaskDelay () may not be fixed [the task may take a different path though the\n * code between calls, or may get interrupted or preempted a different number of times\n * each time it executes].\n *\n * Whereas vTaskDelay () specifies a wake time relative to the time at which the function\n * is called, xTaskDelayUntil () specifies the absolute (exact) time at which it wishes to\n * unblock.\n *\n * The macro pdMS_TO_TICKS() can be used to calculate the number of ticks from a\n * time specified in milliseconds with a resolution of one tick period.\n *\n * @param pxPreviousWakeTime Pointer to a variable that holds the time at which the\n * task was last unblocked.  The variable must be initialised with the current time\n * prior to its first use (see the example below).  Following this the variable is\n * automatically updated within xTaskDelayUntil ().\n *\n * @param xTimeIncrement The cycle time period.  The task will be unblocked at\n * time *pxPreviousWakeTime + xTimeIncrement.  Calling xTaskDelayUntil with the\n * same xTimeIncrement parameter value will cause the task to execute with\n * a fixed interface period.\n *\n * @return Value which can be used to check whether the task was actually delayed.\n * Will be pdTRUE if the task way delayed and pdFALSE otherwise.  A task will not\n * be delayed if the next expected wake time is in the past.\n *\n * Example usage:\n * @code{c}\n * // Perform an action every 10 ticks.\n * void vTaskFunction( void * pvParameters )\n * {\n * TickType_t xLastWakeTime;\n * const TickType_t xFrequency = 10;\n * BaseType_t xWasDelayed;\n *\n *     // Initialise the xLastWakeTime variable with the current time.\n *     xLastWakeTime = xTaskGetTickCount ();\n *     for( ;; )\n *     {\n *         // Wait for the next cycle.\n *         xWasDelayed = xTaskDelayUntil( &xLastWakeTime, xFrequency );\n *\n *         // Perform action here. xWasDelayed value can be used to determine\n *         // whether a deadline was missed if the code here took too long.\n *     }\n * }\n * @endcode\n * \\defgroup xTaskDelayUntil xTaskDelayUntil\n * \\ingroup TaskCtrl\n */\nBaseType_t xTaskDelayUntil( TickType_t * const pxPreviousWakeTime,\n                            const TickType_t xTimeIncrement ) PRIVILEGED_FUNCTION;\n\n/*\n * vTaskDelayUntil() is the older version of xTaskDelayUntil() and does not\n * return a value.\n */\n#define vTaskDelayUntil( pxPreviousWakeTime, xTimeIncrement )                   \\\n    do {                                                                        \\\n        ( void ) xTaskDelayUntil( ( pxPreviousWakeTime ), ( xTimeIncrement ) ); \\\n    } while( 0 )\n\n\n/**\n * task. h\n * @code{c}\n * BaseType_t xTaskAbortDelay( TaskHandle_t xTask );\n * @endcode\n *\n * INCLUDE_xTaskAbortDelay must be defined as 1 in FreeRTOSConfig.h for this\n * function to be available.\n *\n * A task will enter the Blocked state when it is waiting for an event.  The\n * event it is waiting for can be a temporal event (waiting for a time), such\n * as when vTaskDelay() is called, or an event on an object, such as when\n * xQueueReceive() or ulTaskNotifyTake() is called.  If the handle of a task\n * that is in the Blocked state is used in a call to xTaskAbortDelay() then the\n * task will leave the Blocked state, and return from whichever function call\n * placed the task into the Blocked state.\n *\n * There is no 'FromISR' version of this function as an interrupt would need to\n * know which object a task was blocked on in order to know which actions to\n * take.  For example, if the task was blocked on a queue the interrupt handler\n * would then need to know if the queue was locked.\n *\n * @param xTask The handle of the task to remove from the Blocked state.\n *\n * @return If the task referenced by xTask was not in the Blocked state then\n * pdFAIL is returned.  Otherwise pdPASS is returned.\n *\n * \\defgroup xTaskAbortDelay xTaskAbortDelay\n * \\ingroup TaskCtrl\n */\n#if ( INCLUDE_xTaskAbortDelay == 1 )\n    BaseType_t xTaskAbortDelay( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * task. h\n * @code{c}\n * UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask );\n * @endcode\n *\n * INCLUDE_uxTaskPriorityGet must be defined as 1 for this function to be available.\n * See the configuration section for more information.\n *\n * Obtain the priority of any task.\n *\n * @param xTask Handle of the task to be queried.  Passing a NULL\n * handle results in the priority of the calling task being returned.\n *\n * @return The priority of xTask.\n *\n * Example usage:\n * @code{c}\n * void vAFunction( void )\n * {\n * TaskHandle_t xHandle;\n *\n *   // Create a task, storing the handle.\n *   xTaskCreate( vTaskCode, \"NAME\", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );\n *\n *   // ...\n *\n *   // Use the handle to obtain the priority of the created task.\n *   // It was created with tskIDLE_PRIORITY, but may have changed\n *   // it itself.\n *   if( uxTaskPriorityGet( xHandle ) != tskIDLE_PRIORITY )\n *   {\n *       // The task has changed it's priority.\n *   }\n *\n *   // ...\n *\n *   // Is our priority higher than the created task?\n *   if( uxTaskPriorityGet( xHandle ) < uxTaskPriorityGet( NULL ) )\n *   {\n *       // Our priority (obtained using NULL handle) is higher.\n *   }\n * }\n * @endcode\n * \\defgroup uxTaskPriorityGet uxTaskPriorityGet\n * \\ingroup TaskCtrl\n */\nUBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\n\n/**\n * task. h\n * @code{c}\n * UBaseType_t uxTaskPriorityGetFromISR( const TaskHandle_t xTask );\n * @endcode\n *\n * A version of uxTaskPriorityGet() that can be used from an ISR.\n */\nUBaseType_t uxTaskPriorityGetFromISR( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\n\n/**\n * task. h\n * @code{c}\n * UBaseType_t uxTaskBasePriorityGet( const TaskHandle_t xTask );\n * @endcode\n *\n * INCLUDE_uxTaskPriorityGet and configUSE_MUTEXES must be defined as 1 for this\n * function to be available. See the configuration section for more information.\n *\n * Obtain the base priority of any task.\n *\n * @param xTask Handle of the task to be queried.  Passing a NULL\n * handle results in the base priority of the calling task being returned.\n *\n * @return The base priority of xTask.\n *\n * \\defgroup uxTaskPriorityGet uxTaskBasePriorityGet\n * \\ingroup TaskCtrl\n */\nUBaseType_t uxTaskBasePriorityGet( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\n\n/**\n * task. h\n * @code{c}\n * UBaseType_t uxTaskBasePriorityGetFromISR( const TaskHandle_t xTask );\n * @endcode\n *\n * A version of uxTaskBasePriorityGet() that can be used from an ISR.\n */\nUBaseType_t uxTaskBasePriorityGetFromISR( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\n\n/**\n * task. h\n * @code{c}\n * eTaskState eTaskGetState( TaskHandle_t xTask );\n * @endcode\n *\n * INCLUDE_eTaskGetState must be defined as 1 for this function to be available.\n * See the configuration section for more information.\n *\n * Obtain the state of any task.  States are encoded by the eTaskState\n * enumerated type.\n *\n * @param xTask Handle of the task to be queried.\n *\n * @return The state of xTask at the time the function was called.  Note the\n * state of the task might change between the function being called, and the\n * functions return value being tested by the calling task.\n */\n#if ( ( INCLUDE_eTaskGetState == 1 ) || ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_xTaskAbortDelay == 1 ) )\n    eTaskState eTaskGetState( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * task. h\n * @code{c}\n * void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState );\n * @endcode\n *\n * configUSE_TRACE_FACILITY must be defined as 1 for this function to be\n * available.  See the configuration section for more information.\n *\n * Populates a TaskStatus_t structure with information about a task.\n *\n * @param xTask Handle of the task being queried.  If xTask is NULL then\n * information will be returned about the calling task.\n *\n * @param pxTaskStatus A pointer to the TaskStatus_t structure that will be\n * filled with information about the task referenced by the handle passed using\n * the xTask parameter.\n *\n * @param xGetFreeStackSpace The TaskStatus_t structure contains a member to report\n * the stack high water mark of the task being queried.  Calculating the stack\n * high water mark takes a relatively long time, and can make the system\n * temporarily unresponsive - so the xGetFreeStackSpace parameter is provided to\n * allow the high water mark checking to be skipped.  The high watermark value\n * will only be written to the TaskStatus_t structure if xGetFreeStackSpace is\n * not set to pdFALSE;\n *\n * @param eState The TaskStatus_t structure contains a member to report the\n * state of the task being queried.  Obtaining the task state is not as fast as\n * a simple assignment - so the eState parameter is provided to allow the state\n * information to be omitted from the TaskStatus_t structure.  To obtain state\n * information then set eState to eInvalid - otherwise the value passed in\n * eState will be reported as the task state in the TaskStatus_t structure.\n *\n * Example usage:\n * @code{c}\n * void vAFunction( void )\n * {\n * TaskHandle_t xHandle;\n * TaskStatus_t xTaskDetails;\n *\n *  // Obtain the handle of a task from its name.\n *  xHandle = xTaskGetHandle( \"Task_Name\" );\n *\n *  // Check the handle is not NULL.\n *  configASSERT( xHandle );\n *\n *  // Use the handle to obtain further information about the task.\n *  vTaskGetInfo( xHandle,\n *                &xTaskDetails,\n *                pdTRUE, // Include the high water mark in xTaskDetails.\n *                eInvalid ); // Include the task state in xTaskDetails.\n * }\n * @endcode\n * \\defgroup vTaskGetInfo vTaskGetInfo\n * \\ingroup TaskCtrl\n */\n#if ( configUSE_TRACE_FACILITY == 1 )\n    void vTaskGetInfo( TaskHandle_t xTask,\n                       TaskStatus_t * pxTaskStatus,\n                       BaseType_t xGetFreeStackSpace,\n                       eTaskState eState ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * task. h\n * @code{c}\n * void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority );\n * @endcode\n *\n * INCLUDE_vTaskPrioritySet must be defined as 1 for this function to be available.\n * See the configuration section for more information.\n *\n * Set the priority of any task.\n *\n * A context switch will occur before the function returns if the priority\n * being set is higher than the currently executing task.\n *\n * @param xTask Handle to the task for which the priority is being set.\n * Passing a NULL handle results in the priority of the calling task being set.\n *\n * @param uxNewPriority The priority to which the task will be set.\n *\n * Example usage:\n * @code{c}\n * void vAFunction( void )\n * {\n * TaskHandle_t xHandle;\n *\n *   // Create a task, storing the handle.\n *   xTaskCreate( vTaskCode, \"NAME\", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );\n *\n *   // ...\n *\n *   // Use the handle to raise the priority of the created task.\n *   vTaskPrioritySet( xHandle, tskIDLE_PRIORITY + 1 );\n *\n *   // ...\n *\n *   // Use a NULL handle to raise our priority to the same value.\n *   vTaskPrioritySet( NULL, tskIDLE_PRIORITY + 1 );\n * }\n * @endcode\n * \\defgroup vTaskPrioritySet vTaskPrioritySet\n * \\ingroup TaskCtrl\n */\nvoid vTaskPrioritySet( TaskHandle_t xTask,\n                       UBaseType_t uxNewPriority ) PRIVILEGED_FUNCTION;\n\n/**\n * task. h\n * @code{c}\n * void vTaskSuspend( TaskHandle_t xTaskToSuspend );\n * @endcode\n *\n * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available.\n * See the configuration section for more information.\n *\n * Suspend any task.  When suspended a task will never get any microcontroller\n * processing time, no matter what its priority.\n *\n * Calls to vTaskSuspend are not accumulative -\n * i.e. calling vTaskSuspend () twice on the same task still only requires one\n * call to vTaskResume () to ready the suspended task.\n *\n * @param xTaskToSuspend Handle to the task being suspended.  Passing a NULL\n * handle will cause the calling task to be suspended.\n *\n * Example usage:\n * @code{c}\n * void vAFunction( void )\n * {\n * TaskHandle_t xHandle;\n *\n *   // Create a task, storing the handle.\n *   xTaskCreate( vTaskCode, \"NAME\", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );\n *\n *   // ...\n *\n *   // Use the handle to suspend the created task.\n *   vTaskSuspend( xHandle );\n *\n *   // ...\n *\n *   // The created task will not run during this period, unless\n *   // another task calls vTaskResume( xHandle ).\n *\n *   //...\n *\n *\n *   // Suspend ourselves.\n *   vTaskSuspend( NULL );\n *\n *   // We cannot get here unless another task calls vTaskResume\n *   // with our handle as the parameter.\n * }\n * @endcode\n * \\defgroup vTaskSuspend vTaskSuspend\n * \\ingroup TaskCtrl\n */\nvoid vTaskSuspend( TaskHandle_t xTaskToSuspend ) PRIVILEGED_FUNCTION;\n\n/**\n * task. h\n * @code{c}\n * void vTaskResume( TaskHandle_t xTaskToResume );\n * @endcode\n *\n * INCLUDE_vTaskSuspend must be defined as 1 for this function to be available.\n * See the configuration section for more information.\n *\n * Resumes a suspended task.\n *\n * A task that has been suspended by one or more calls to vTaskSuspend ()\n * will be made available for running again by a single call to\n * vTaskResume ().\n *\n * @param xTaskToResume Handle to the task being readied.\n *\n * Example usage:\n * @code{c}\n * void vAFunction( void )\n * {\n * TaskHandle_t xHandle;\n *\n *   // Create a task, storing the handle.\n *   xTaskCreate( vTaskCode, \"NAME\", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle );\n *\n *   // ...\n *\n *   // Use the handle to suspend the created task.\n *   vTaskSuspend( xHandle );\n *\n *   // ...\n *\n *   // The created task will not run during this period, unless\n *   // another task calls vTaskResume( xHandle ).\n *\n *   //...\n *\n *\n *   // Resume the suspended task ourselves.\n *   vTaskResume( xHandle );\n *\n *   // The created task will once again get microcontroller processing\n *   // time in accordance with its priority within the system.\n * }\n * @endcode\n * \\defgroup vTaskResume vTaskResume\n * \\ingroup TaskCtrl\n */\nvoid vTaskResume( TaskHandle_t xTaskToResume ) PRIVILEGED_FUNCTION;\n\n/**\n * task. h\n * @code{c}\n * void xTaskResumeFromISR( TaskHandle_t xTaskToResume );\n * @endcode\n *\n * INCLUDE_xTaskResumeFromISR must be defined as 1 for this function to be\n * available.  See the configuration section for more information.\n *\n * An implementation of vTaskResume() that can be called from within an ISR.\n *\n * A task that has been suspended by one or more calls to vTaskSuspend ()\n * will be made available for running again by a single call to\n * xTaskResumeFromISR ().\n *\n * xTaskResumeFromISR() should not be used to synchronise a task with an\n * interrupt if there is a chance that the interrupt could arrive prior to the\n * task being suspended - as this can lead to interrupts being missed. Use of a\n * semaphore as a synchronisation mechanism would avoid this eventuality.\n *\n * @param xTaskToResume Handle to the task being readied.\n *\n * @return pdTRUE if resuming the task should result in a context switch,\n * otherwise pdFALSE. This is used by the ISR to determine if a context switch\n * may be required following the ISR.\n *\n * \\defgroup vTaskResumeFromISR vTaskResumeFromISR\n * \\ingroup TaskCtrl\n */\nBaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume ) PRIVILEGED_FUNCTION;\n\n#if ( configUSE_CORE_AFFINITY == 1 )\n\n/**\n * @brief Sets the core affinity mask for a task.\n *\n * It sets the cores on which a task can run. configUSE_CORE_AFFINITY must\n * be defined as 1 for this function to be available.\n *\n * @param xTask The handle of the task to set the core affinity mask for.\n * Passing NULL will set the core affinity mask for the calling task.\n *\n * @param uxCoreAffinityMask A bitwise value that indicates the cores on\n * which the task can run. Cores are numbered from 0 to configNUMBER_OF_CORES - 1.\n * For example, to ensure that a task can run on core 0 and core 1, set\n * uxCoreAffinityMask to 0x03.\n *\n * Example usage:\n *\n * // The function that creates task.\n * void vAFunction( void )\n * {\n * TaskHandle_t xHandle;\n * UBaseType_t uxCoreAffinityMask;\n *\n *      // Create a task, storing the handle.\n *      xTaskCreate( vTaskCode, \"NAME\", STACK_SIZE, NULL, tskIDLE_PRIORITY, &( xHandle ) );\n *\n *      // Define the core affinity mask such that this task can only run\n *      // on core 0 and core 2.\n *      uxCoreAffinityMask = ( ( 1 << 0 ) | ( 1 << 2 ) );\n *\n *      //Set the core affinity mask for the task.\n *      vTaskCoreAffinitySet( xHandle, uxCoreAffinityMask );\n * }\n */\n    void vTaskCoreAffinitySet( const TaskHandle_t xTask,\n                               UBaseType_t uxCoreAffinityMask );\n#endif\n\n#if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n\n/**\n * @brief Gets the core affinity mask for a task.\n *\n * configUSE_CORE_AFFINITY must be defined as 1 for this function to be\n * available.\n *\n * @param xTask The handle of the task to get the core affinity mask for.\n * Passing NULL will get the core affinity mask for the calling task.\n *\n * @return The core affinity mask which is a bitwise value that indicates\n * the cores on which a task can run. Cores are numbered from 0 to\n * configNUMBER_OF_CORES - 1. For example, if a task can run on core 0 and core 1,\n * the core affinity mask is 0x03.\n *\n * Example usage:\n *\n * // Task handle of the networking task - it is populated elsewhere.\n * TaskHandle_t xNetworkingTaskHandle;\n *\n * void vAFunction( void )\n * {\n * TaskHandle_t xHandle;\n * UBaseType_t uxNetworkingCoreAffinityMask;\n *\n *     // Create a task, storing the handle.\n *     xTaskCreate( vTaskCode, \"NAME\", STACK_SIZE, NULL, tskIDLE_PRIORITY, &( xHandle ) );\n *\n *     //Get the core affinity mask for the networking task.\n *     uxNetworkingCoreAffinityMask = vTaskCoreAffinityGet( xNetworkingTaskHandle );\n *\n *     // Here is a hypothetical scenario, just for the example. Assume that we\n *     // have 2 cores - Core 0 and core 1. We want to pin the application task to\n *     // the core different than the networking task to ensure that the\n *     // application task does not interfere with networking.\n *     if( ( uxNetworkingCoreAffinityMask & ( 1 << 0 ) ) != 0 )\n *     {\n *         // The networking task can run on core 0, pin our task to core 1.\n *         vTaskCoreAffinitySet( xHandle, ( 1 << 1 ) );\n *     }\n *     else\n *     {\n *         // Otherwise, pin our task to core 0.\n *         vTaskCoreAffinitySet( xHandle, ( 1 << 0 ) );\n *     }\n * }\n */\n    UBaseType_t vTaskCoreAffinityGet( ConstTaskHandle_t xTask );\n#endif\n\n#if ( configUSE_TASK_PREEMPTION_DISABLE == 1 )\n\n/**\n * @brief Disables preemption for a task.\n *\n * @param xTask The handle of the task to disable preemption. Passing NULL\n * disables preemption for the calling task.\n *\n * Example usage:\n *\n * void vTaskCode( void *pvParameters )\n * {\n *     // Silence warnings about unused parameters.\n *     ( void ) pvParameters;\n *\n *     for( ;; )\n *     {\n *         // ... Perform some function here.\n *\n *         // Disable preemption for this task.\n *         vTaskPreemptionDisable( NULL );\n *\n *         // The task will not be preempted when it is executing in this portion ...\n *\n *         // ... until the preemption is enabled again.\n *         vTaskPreemptionEnable( NULL );\n *\n *         // The task can be preempted when it is executing in this portion.\n *     }\n * }\n */\n    void vTaskPreemptionDisable( const TaskHandle_t xTask );\n#endif\n\n#if ( configUSE_TASK_PREEMPTION_DISABLE == 1 )\n\n/**\n * @brief Enables preemption for a task.\n *\n * @param xTask The handle of the task to enable preemption. Passing NULL\n * enables preemption for the calling task.\n *\n * Example usage:\n *\n * void vTaskCode( void *pvParameters )\n * {\n *     // Silence warnings about unused parameters.\n *     ( void ) pvParameters;\n *\n *     for( ;; )\n *     {\n *         // ... Perform some function here.\n *\n *         // Disable preemption for this task.\n *         vTaskPreemptionDisable( NULL );\n *\n *         // The task will not be preempted when it is executing in this portion ...\n *\n *         // ... until the preemption is enabled again.\n *         vTaskPreemptionEnable( NULL );\n *\n *         // The task can be preempted when it is executing in this portion.\n *     }\n * }\n */\n    void vTaskPreemptionEnable( const TaskHandle_t xTask );\n#endif\n\n/*-----------------------------------------------------------\n* SCHEDULER CONTROL\n*----------------------------------------------------------*/\n\n/**\n * task. h\n * @code{c}\n * void vTaskStartScheduler( void );\n * @endcode\n *\n * Starts the real time kernel tick processing.  After calling the kernel\n * has control over which tasks are executed and when.\n *\n * See the demo application file main.c for an example of creating\n * tasks and starting the kernel.\n *\n * Example usage:\n * @code{c}\n * void vAFunction( void )\n * {\n *   // Create at least one task before starting the kernel.\n *   xTaskCreate( vTaskCode, \"NAME\", STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );\n *\n *   // Start the real time kernel with preemption.\n *   vTaskStartScheduler ();\n *\n *   // Will not get here unless a task calls vTaskEndScheduler ()\n * }\n * @endcode\n *\n * \\defgroup vTaskStartScheduler vTaskStartScheduler\n * \\ingroup SchedulerControl\n */\nvoid vTaskStartScheduler( void ) PRIVILEGED_FUNCTION;\n\n/**\n * task. h\n * @code{c}\n * void vTaskEndScheduler( void );\n * @endcode\n *\n * NOTE:  At the time of writing only the x86 real mode port, which runs on a PC\n * in place of DOS, implements this function.\n *\n * Stops the real time kernel tick.  All created tasks will be automatically\n * deleted and multitasking (either preemptive or cooperative) will\n * stop.  Execution then resumes from the point where vTaskStartScheduler ()\n * was called, as if vTaskStartScheduler () had just returned.\n *\n * See the demo application file main. c in the demo/PC directory for an\n * example that uses vTaskEndScheduler ().\n *\n * vTaskEndScheduler () requires an exit function to be defined within the\n * portable layer (see vPortEndScheduler () in port. c for the PC port).  This\n * performs hardware specific operations such as stopping the kernel tick.\n *\n * vTaskEndScheduler () will cause all of the resources allocated by the\n * kernel to be freed - but will not free resources allocated by application\n * tasks.\n *\n * Example usage:\n * @code{c}\n * void vTaskCode( void * pvParameters )\n * {\n *   for( ;; )\n *   {\n *       // Task code goes here.\n *\n *       // At some point we want to end the real time kernel processing\n *       // so call ...\n *       vTaskEndScheduler ();\n *   }\n * }\n *\n * void vAFunction( void )\n * {\n *   // Create at least one task before starting the kernel.\n *   xTaskCreate( vTaskCode, \"NAME\", STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );\n *\n *   // Start the real time kernel with preemption.\n *   vTaskStartScheduler ();\n *\n *   // Will only get here when the vTaskCode () task has called\n *   // vTaskEndScheduler ().  When we get here we are back to single task\n *   // execution.\n * }\n * @endcode\n *\n * \\defgroup vTaskEndScheduler vTaskEndScheduler\n * \\ingroup SchedulerControl\n */\nvoid vTaskEndScheduler( void ) PRIVILEGED_FUNCTION;\n\n/**\n * task. h\n * @code{c}\n * void vTaskSuspendAll( void );\n * @endcode\n *\n * Suspends the scheduler without disabling interrupts.  Context switches will\n * not occur while the scheduler is suspended.\n *\n * After calling vTaskSuspendAll () the calling task will continue to execute\n * without risk of being swapped out until a call to xTaskResumeAll () has been\n * made.\n *\n * API functions that have the potential to cause a context switch (for example,\n * xTaskDelayUntil(), xQueueSend(), etc.) must not be called while the scheduler\n * is suspended.\n *\n * Example usage:\n * @code{c}\n * void vTask1( void * pvParameters )\n * {\n *   for( ;; )\n *   {\n *       // Task code goes here.\n *\n *       // ...\n *\n *       // At some point the task wants to perform a long operation during\n *       // which it does not want to get swapped out.  It cannot use\n *       // taskENTER_CRITICAL ()/taskEXIT_CRITICAL () as the length of the\n *       // operation may cause interrupts to be missed - including the\n *       // ticks.\n *\n *       // Prevent the real time kernel swapping out the task.\n *       vTaskSuspendAll ();\n *\n *       // Perform the operation here.  There is no need to use critical\n *       // sections as we have all the microcontroller processing time.\n *       // During this time interrupts will still operate and the kernel\n *       // tick count will be maintained.\n *\n *       // ...\n *\n *       // The operation is complete.  Restart the kernel.\n *       xTaskResumeAll ();\n *   }\n * }\n * @endcode\n * \\defgroup vTaskSuspendAll vTaskSuspendAll\n * \\ingroup SchedulerControl\n */\nvoid vTaskSuspendAll( void ) PRIVILEGED_FUNCTION;\n\n/**\n * task. h\n * @code{c}\n * BaseType_t xTaskResumeAll( void );\n * @endcode\n *\n * Resumes scheduler activity after it was suspended by a call to\n * vTaskSuspendAll().\n *\n * xTaskResumeAll() only resumes the scheduler.  It does not unsuspend tasks\n * that were previously suspended by a call to vTaskSuspend().\n *\n * @return If resuming the scheduler caused a context switch then pdTRUE is\n *         returned, otherwise pdFALSE is returned.\n *\n * Example usage:\n * @code{c}\n * void vTask1( void * pvParameters )\n * {\n *   for( ;; )\n *   {\n *       // Task code goes here.\n *\n *       // ...\n *\n *       // At some point the task wants to perform a long operation during\n *       // which it does not want to get swapped out.  It cannot use\n *       // taskENTER_CRITICAL ()/taskEXIT_CRITICAL () as the length of the\n *       // operation may cause interrupts to be missed - including the\n *       // ticks.\n *\n *       // Prevent the real time kernel swapping out the task.\n *       vTaskSuspendAll ();\n *\n *       // Perform the operation here.  There is no need to use critical\n *       // sections as we have all the microcontroller processing time.\n *       // During this time interrupts will still operate and the real\n *       // time kernel tick count will be maintained.\n *\n *       // ...\n *\n *       // The operation is complete.  Restart the kernel.  We want to force\n *       // a context switch - but there is no point if resuming the scheduler\n *       // caused a context switch already.\n *       if( !xTaskResumeAll () )\n *       {\n *            taskYIELD ();\n *       }\n *   }\n * }\n * @endcode\n * \\defgroup xTaskResumeAll xTaskResumeAll\n * \\ingroup SchedulerControl\n */\nBaseType_t xTaskResumeAll( void ) PRIVILEGED_FUNCTION;\n\n/*-----------------------------------------------------------\n* TASK UTILITIES\n*----------------------------------------------------------*/\n\n/**\n * task. h\n * @code{c}\n * TickType_t xTaskGetTickCount( void );\n * @endcode\n *\n * @return The count of ticks since vTaskStartScheduler was called.\n *\n * \\defgroup xTaskGetTickCount xTaskGetTickCount\n * \\ingroup TaskUtils\n */\nTickType_t xTaskGetTickCount( void ) PRIVILEGED_FUNCTION;\n\n/**\n * task. h\n * @code{c}\n * TickType_t xTaskGetTickCountFromISR( void );\n * @endcode\n *\n * @return The count of ticks since vTaskStartScheduler was called.\n *\n * This is a version of xTaskGetTickCount() that is safe to be called from an\n * ISR - provided that TickType_t is the natural word size of the\n * microcontroller being used or interrupt nesting is either not supported or\n * not being used.\n *\n * \\defgroup xTaskGetTickCountFromISR xTaskGetTickCountFromISR\n * \\ingroup TaskUtils\n */\nTickType_t xTaskGetTickCountFromISR( void ) PRIVILEGED_FUNCTION;\n\n/**\n * task. h\n * @code{c}\n * uint16_t uxTaskGetNumberOfTasks( void );\n * @endcode\n *\n * @return The number of tasks that the real time kernel is currently managing.\n * This includes all ready, blocked and suspended tasks.  A task that\n * has been deleted but not yet freed by the idle task will also be\n * included in the count.\n *\n * \\defgroup uxTaskGetNumberOfTasks uxTaskGetNumberOfTasks\n * \\ingroup TaskUtils\n */\nUBaseType_t uxTaskGetNumberOfTasks( void ) PRIVILEGED_FUNCTION;\n\n/**\n * task. h\n * @code{c}\n * char *pcTaskGetName( TaskHandle_t xTaskToQuery );\n * @endcode\n *\n * @return The text (human readable) name of the task referenced by the handle\n * xTaskToQuery.  A task can query its own name by either passing in its own\n * handle, or by setting xTaskToQuery to NULL.\n *\n * \\defgroup pcTaskGetName pcTaskGetName\n * \\ingroup TaskUtils\n */\nchar * pcTaskGetName( TaskHandle_t xTaskToQuery ) PRIVILEGED_FUNCTION;\n\n/**\n * task. h\n * @code{c}\n * TaskHandle_t xTaskGetHandle( const char *pcNameToQuery );\n * @endcode\n *\n * NOTE:  This function takes a relatively long time to complete and should be\n * used sparingly.\n *\n * @return The handle of the task that has the human readable name pcNameToQuery.\n * NULL is returned if no matching name is found.  INCLUDE_xTaskGetHandle\n * must be set to 1 in FreeRTOSConfig.h for pcTaskGetHandle() to be available.\n *\n * \\defgroup pcTaskGetHandle pcTaskGetHandle\n * \\ingroup TaskUtils\n */\n#if ( INCLUDE_xTaskGetHandle == 1 )\n    TaskHandle_t xTaskGetHandle( const char * pcNameToQuery ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * task. h\n * @code{c}\n * BaseType_t xTaskGetStaticBuffers( TaskHandle_t xTask,\n *                                   StackType_t ** ppuxStackBuffer,\n *                                   StaticTask_t ** ppxTaskBuffer );\n * @endcode\n *\n * Retrieve pointers to a statically created task's data structure\n * buffer and stack buffer. These are the same buffers that are supplied\n * at the time of creation.\n *\n * @param xTask The task for which to retrieve the buffers.\n *\n * @param ppuxStackBuffer Used to return a pointer to the task's stack buffer.\n *\n * @param ppxTaskBuffer Used to return a pointer to the task's data structure\n * buffer.\n *\n * @return pdTRUE if buffers were retrieved, pdFALSE otherwise.\n *\n * \\defgroup xTaskGetStaticBuffers xTaskGetStaticBuffers\n * \\ingroup TaskUtils\n */\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    BaseType_t xTaskGetStaticBuffers( TaskHandle_t xTask,\n                                      StackType_t ** ppuxStackBuffer,\n                                      StaticTask_t ** ppxTaskBuffer ) PRIVILEGED_FUNCTION;\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n\n/**\n * task.h\n * @code{c}\n * UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask );\n * @endcode\n *\n * INCLUDE_uxTaskGetStackHighWaterMark must be set to 1 in FreeRTOSConfig.h for\n * this function to be available.\n *\n * Returns the high water mark of the stack associated with xTask.  That is,\n * the minimum free stack space there has been (in words, so on a 32 bit machine\n * a value of 1 means 4 bytes) since the task started.  The smaller the returned\n * number the closer the task has come to overflowing its stack.\n *\n * uxTaskGetStackHighWaterMark() and uxTaskGetStackHighWaterMark2() are the\n * same except for their return type.  Using configSTACK_DEPTH_TYPE allows the\n * user to determine the return type.  It gets around the problem of the value\n * overflowing on 8-bit types without breaking backward compatibility for\n * applications that expect an 8-bit return type.\n *\n * @param xTask Handle of the task associated with the stack to be checked.\n * Set xTask to NULL to check the stack of the calling task.\n *\n * @return The smallest amount of free stack space there has been (in words, so\n * actual spaces on the stack rather than bytes) since the task referenced by\n * xTask was created.\n */\n#if ( INCLUDE_uxTaskGetStackHighWaterMark == 1 )\n    UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * task.h\n * @code{c}\n * configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask );\n * @endcode\n *\n * INCLUDE_uxTaskGetStackHighWaterMark2 must be set to 1 in FreeRTOSConfig.h for\n * this function to be available.\n *\n * Returns the high water mark of the stack associated with xTask.  That is,\n * the minimum free stack space there has been (in words, so on a 32 bit machine\n * a value of 1 means 4 bytes) since the task started.  The smaller the returned\n * number the closer the task has come to overflowing its stack.\n *\n * uxTaskGetStackHighWaterMark() and uxTaskGetStackHighWaterMark2() are the\n * same except for their return type.  Using configSTACK_DEPTH_TYPE allows the\n * user to determine the return type.  It gets around the problem of the value\n * overflowing on 8-bit types without breaking backward compatibility for\n * applications that expect an 8-bit return type.\n *\n * @param xTask Handle of the task associated with the stack to be checked.\n * Set xTask to NULL to check the stack of the calling task.\n *\n * @return The smallest amount of free stack space there has been (in words, so\n * actual spaces on the stack rather than bytes) since the task referenced by\n * xTask was created.\n */\n#if ( INCLUDE_uxTaskGetStackHighWaterMark2 == 1 )\n    configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\n#endif\n\n/* When using trace macros it is sometimes necessary to include task.h before\n * FreeRTOS.h.  When this is done TaskHookFunction_t will not yet have been defined,\n * so the following two prototypes will cause a compilation error.  This can be\n * fixed by simply guarding against the inclusion of these two prototypes unless\n * they are explicitly required by the configUSE_APPLICATION_TASK_TAG configuration\n * constant. */\n#ifdef configUSE_APPLICATION_TASK_TAG\n    #if configUSE_APPLICATION_TASK_TAG == 1\n\n/**\n * task.h\n * @code{c}\n * void vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxHookFunction );\n * @endcode\n *\n * Sets pxHookFunction to be the task hook function used by the task xTask.\n * Passing xTask as NULL has the effect of setting the calling tasks hook\n * function.\n */\n        void vTaskSetApplicationTaskTag( TaskHandle_t xTask,\n                                         TaskHookFunction_t pxHookFunction ) PRIVILEGED_FUNCTION;\n\n/**\n * task.h\n * @code{c}\n * void xTaskGetApplicationTaskTag( TaskHandle_t xTask );\n * @endcode\n *\n * Returns the pxHookFunction value assigned to the task xTask.  Do not\n * call from an interrupt service routine - call\n * xTaskGetApplicationTaskTagFromISR() instead.\n */\n        TaskHookFunction_t xTaskGetApplicationTaskTag( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\n\n/**\n * task.h\n * @code{c}\n * void xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask );\n * @endcode\n *\n * Returns the pxHookFunction value assigned to the task xTask.  Can\n * be called from an interrupt service routine.\n */\n        TaskHookFunction_t xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\n    #endif /* configUSE_APPLICATION_TASK_TAG ==1 */\n#endif /* ifdef configUSE_APPLICATION_TASK_TAG */\n\n#if ( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 )\n\n/* Each task contains an array of pointers that is dimensioned by the\n * configNUM_THREAD_LOCAL_STORAGE_POINTERS setting in FreeRTOSConfig.h.  The\n * kernel does not use the pointers itself, so the application writer can use\n * the pointers for any purpose they wish.  The following two functions are\n * used to set and query a pointer respectively. */\n    void vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet,\n                                            BaseType_t xIndex,\n                                            void * pvValue ) PRIVILEGED_FUNCTION;\n    void * pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery,\n                                               BaseType_t xIndex ) PRIVILEGED_FUNCTION;\n\n#endif\n\n#if ( configCHECK_FOR_STACK_OVERFLOW > 0 )\n\n/**\n * task.h\n * @code{c}\n * void vApplicationStackOverflowHook( TaskHandle_t xTask, char *pcTaskName);\n * @endcode\n *\n * The application stack overflow hook is called when a stack overflow is detected for a task.\n *\n * Details on stack overflow detection can be found here: https://www.FreeRTOS.org/Stacks-and-stack-overflow-checking.html\n *\n * @param xTask the task that just exceeded its stack boundaries.\n * @param pcTaskName A character string containing the name of the offending task.\n */\n    /* MISRA Ref 8.6.1 [External linkage] */\n    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-86 */\n    /* coverity[misra_c_2012_rule_8_6_violation] */\n    void vApplicationStackOverflowHook( TaskHandle_t xTask,\n                                        char * pcTaskName );\n\n#endif\n\n#if ( configUSE_IDLE_HOOK == 1 )\n\n/**\n * task.h\n * @code{c}\n * void vApplicationIdleHook( void );\n * @endcode\n *\n * The application idle hook is called by the idle task.\n * This allows the application designer to add background functionality without\n * the overhead of a separate task.\n * NOTE: vApplicationIdleHook() MUST NOT, UNDER ANY CIRCUMSTANCES, CALL A FUNCTION THAT MIGHT BLOCK.\n */\n    /* MISRA Ref 8.6.1 [External linkage] */\n    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-86 */\n    /* coverity[misra_c_2012_rule_8_6_violation] */\n    void vApplicationIdleHook( void );\n\n#endif\n\n\n#if  ( configUSE_TICK_HOOK != 0 )\n\n/**\n *  task.h\n * @code{c}\n * void vApplicationTickHook( void );\n * @endcode\n *\n * This hook function is called in the system tick handler after any OS work is completed.\n */\n    /* MISRA Ref 8.6.1 [External linkage] */\n    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-86 */\n    /* coverity[misra_c_2012_rule_8_6_violation] */\n    void vApplicationTickHook( void );\n\n#endif\n\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n\n/**\n * task.h\n * @code{c}\n * void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer, StackType_t ** ppxIdleTaskStackBuffer, configSTACK_DEPTH_TYPE * puxIdleTaskStackSize )\n * @endcode\n *\n * This function is used to provide a statically allocated block of memory to FreeRTOS to hold the Idle Task TCB.  This function is required when\n * configSUPPORT_STATIC_ALLOCATION is set.  For more information see this URI: https://www.FreeRTOS.org/a00110.html#configSUPPORT_STATIC_ALLOCATION\n *\n * @param ppxIdleTaskTCBBuffer A handle to a statically allocated TCB buffer\n * @param ppxIdleTaskStackBuffer A handle to a statically allocated Stack buffer for the idle task\n * @param puxIdleTaskStackSize A pointer to the number of elements that will fit in the allocated stack buffer\n */\n    void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,\n                                        StackType_t ** ppxIdleTaskStackBuffer,\n                                        configSTACK_DEPTH_TYPE * puxIdleTaskStackSize );\n\n/**\n * task.h\n * @code{c}\n * void vApplicationGetPassiveIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer, StackType_t ** ppxIdleTaskStackBuffer, configSTACK_DEPTH_TYPE * puxIdleTaskStackSize, BaseType_t xCoreID )\n * @endcode\n *\n * This function is used to provide a statically allocated block of memory to FreeRTOS to hold the Idle Tasks TCB.  This function is required when\n * configSUPPORT_STATIC_ALLOCATION is set.  For more information see this URI: https://www.FreeRTOS.org/a00110.html#configSUPPORT_STATIC_ALLOCATION\n *\n * In the FreeRTOS SMP, there are a total of configNUMBER_OF_CORES idle tasks:\n *  1. 1 Active idle task which does all the housekeeping.\n *  2. ( configNUMBER_OF_CORES - 1 ) Passive idle tasks which do nothing.\n * These idle tasks are created to ensure that each core has an idle task to run when\n * no other task is available to run.\n *\n * The function vApplicationGetPassiveIdleTaskMemory is called with passive idle\n * task index 0, 1 ... ( configNUMBER_OF_CORES - 2 ) to get memory for passive idle\n * tasks.\n *\n * @param ppxIdleTaskTCBBuffer A handle to a statically allocated TCB buffer\n * @param ppxIdleTaskStackBuffer A handle to a statically allocated Stack buffer for the idle task\n * @param puxIdleTaskStackSize A pointer to the number of elements that will fit in the allocated stack buffer\n * @param xPassiveIdleTaskIndex The passive idle task index of the idle task buffer\n */\n    #if ( configNUMBER_OF_CORES > 1 )\n        void vApplicationGetPassiveIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,\n                                                   StackType_t ** ppxIdleTaskStackBuffer,\n                                                   configSTACK_DEPTH_TYPE * puxIdleTaskStackSize,\n                                                   BaseType_t xPassiveIdleTaskIndex );\n    #endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n#endif /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */\n\n/**\n * task.h\n * @code{c}\n * BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask, void *pvParameter );\n * @endcode\n *\n * Calls the hook function associated with xTask.  Passing xTask as NULL has\n * the effect of calling the Running tasks (the calling task) hook function.\n *\n * pvParameter is passed to the hook function for the task to interpret as it\n * wants.  The return value is the value returned by the task hook function\n * registered by the user.\n */\n#if ( configUSE_APPLICATION_TASK_TAG == 1 )\n    BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask,\n                                             void * pvParameter ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * xTaskGetIdleTaskHandle() is only available if\n * INCLUDE_xTaskGetIdleTaskHandle is set to 1 in FreeRTOSConfig.h.\n *\n * In single-core FreeRTOS, this function simply returns the handle of the idle\n * task. It is not valid to call xTaskGetIdleTaskHandle() before the scheduler\n * has been started.\n *\n * In the FreeRTOS SMP, there are a total of configNUMBER_OF_CORES idle tasks:\n *  1. 1 Active idle task which does all the housekeeping.\n *  2. ( configNUMBER_OF_CORES - 1 ) Passive idle tasks which do nothing.\n * These idle tasks are created to ensure that each core has an idle task to run when\n * no other task is available to run. Call xTaskGetIdleTaskHandle() or\n * xTaskGetIdleTaskHandleForCore() with xCoreID set to 0  to get the Active\n * idle task handle. Call xTaskGetIdleTaskHandleForCore() with xCoreID set to\n * 1,2 ... ( configNUMBER_OF_CORES - 1 ) to get the Passive idle task handles.\n */\n#if ( INCLUDE_xTaskGetIdleTaskHandle == 1 )\n    #if ( configNUMBER_OF_CORES == 1 )\n        TaskHandle_t xTaskGetIdleTaskHandle( void ) PRIVILEGED_FUNCTION;\n    #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n\n    TaskHandle_t xTaskGetIdleTaskHandleForCore( BaseType_t xCoreID ) PRIVILEGED_FUNCTION;\n#endif /* #if ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) */\n\n/**\n * configUSE_TRACE_FACILITY must be defined as 1 in FreeRTOSConfig.h for\n * uxTaskGetSystemState() to be available.\n *\n * uxTaskGetSystemState() populates an TaskStatus_t structure for each task in\n * the system.  TaskStatus_t structures contain, among other things, members\n * for the task handle, task name, task priority, task state, and total amount\n * of run time consumed by the task.  See the TaskStatus_t structure\n * definition in this file for the full member list.\n *\n * NOTE:  This function is intended for debugging use only as its use results in\n * the scheduler remaining suspended for an extended period.\n *\n * @param pxTaskStatusArray A pointer to an array of TaskStatus_t structures.\n * The array must contain at least one TaskStatus_t structure for each task\n * that is under the control of the RTOS.  The number of tasks under the control\n * of the RTOS can be determined using the uxTaskGetNumberOfTasks() API function.\n *\n * @param uxArraySize The size of the array pointed to by the pxTaskStatusArray\n * parameter.  The size is specified as the number of indexes in the array, or\n * the number of TaskStatus_t structures contained in the array, not by the\n * number of bytes in the array.\n *\n * @param pulTotalRunTime If configGENERATE_RUN_TIME_STATS is set to 1 in\n * FreeRTOSConfig.h then *pulTotalRunTime is set by uxTaskGetSystemState() to the\n * total run time (as defined by the run time stats clock, see\n * https://www.FreeRTOS.org/rtos-run-time-stats.html) since the target booted.\n * pulTotalRunTime can be set to NULL to omit the total run time information.\n *\n * @return The number of TaskStatus_t structures that were populated by\n * uxTaskGetSystemState().  This should equal the number returned by the\n * uxTaskGetNumberOfTasks() API function, but will be zero if the value passed\n * in the uxArraySize parameter was too small.\n *\n * Example usage:\n * @code{c}\n *  // This example demonstrates how a human readable table of run time stats\n *  // information is generated from raw data provided by uxTaskGetSystemState().\n *  // The human readable table is written to pcWriteBuffer\n *  void vTaskGetRunTimeStats( char *pcWriteBuffer )\n *  {\n *  TaskStatus_t *pxTaskStatusArray;\n *  volatile UBaseType_t uxArraySize, x;\n *  configRUN_TIME_COUNTER_TYPE ulTotalRunTime, ulStatsAsPercentage;\n *\n *      // Make sure the write buffer does not contain a string.\n * pcWriteBuffer = 0x00;\n *\n *      // Take a snapshot of the number of tasks in case it changes while this\n *      // function is executing.\n *      uxArraySize = uxTaskGetNumberOfTasks();\n *\n *      // Allocate a TaskStatus_t structure for each task.  An array could be\n *      // allocated statically at compile time.\n *      pxTaskStatusArray = pvPortMalloc( uxArraySize * sizeof( TaskStatus_t ) );\n *\n *      if( pxTaskStatusArray != NULL )\n *      {\n *          // Generate raw status information about each task.\n *          uxArraySize = uxTaskGetSystemState( pxTaskStatusArray, uxArraySize, &ulTotalRunTime );\n *\n *          // For percentage calculations.\n *          ulTotalRunTime /= 100U;\n *\n *          // Avoid divide by zero errors.\n *          if( ulTotalRunTime > 0 )\n *          {\n *              // For each populated position in the pxTaskStatusArray array,\n *              // format the raw data as human readable ASCII data\n *              for( x = 0; x < uxArraySize; x++ )\n *              {\n *                  // What percentage of the total run time has the task used?\n *                  // This will always be rounded down to the nearest integer.\n *                  // ulTotalRunTimeDiv100 has already been divided by 100.\n *                  ulStatsAsPercentage = pxTaskStatusArray[ x ].ulRunTimeCounter / ulTotalRunTime;\n *\n *                  if( ulStatsAsPercentage > 0U )\n *                  {\n *                      sprintf( pcWriteBuffer, \"%s\\t\\t%lu\\t\\t%lu%%\\r\\n\", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter, ulStatsAsPercentage );\n *                  }\n *                  else\n *                  {\n *                      // If the percentage is zero here then the task has\n *                      // consumed less than 1% of the total run time.\n *                      sprintf( pcWriteBuffer, \"%s\\t\\t%lu\\t\\t<1%%\\r\\n\", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter );\n *                  }\n *\n *                  pcWriteBuffer += strlen( ( char * ) pcWriteBuffer );\n *              }\n *          }\n *\n *          // The array is no longer needed, free the memory it consumes.\n *          vPortFree( pxTaskStatusArray );\n *      }\n *  }\n *  @endcode\n */\n#if ( configUSE_TRACE_FACILITY == 1 )\n    UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray,\n                                      const UBaseType_t uxArraySize,\n                                      configRUN_TIME_COUNTER_TYPE * const pulTotalRunTime ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * task. h\n * @code{c}\n * void vTaskListTasks( char *pcWriteBuffer, size_t uxBufferLength );\n * @endcode\n *\n * configUSE_TRACE_FACILITY and configUSE_STATS_FORMATTING_FUNCTIONS must\n * both be defined as 1 for this function to be available.  See the\n * configuration section of the FreeRTOS.org website for more information.\n *\n * NOTE 1: This function will disable interrupts for its duration.  It is\n * not intended for normal application runtime use but as a debug aid.\n *\n * Lists all the current tasks, along with their current state and stack\n * usage high water mark.\n *\n * Tasks are reported as blocked ('B'), ready ('R'), deleted ('D') or\n * suspended ('S').\n *\n * PLEASE NOTE:\n *\n * This function is provided for convenience only, and is used by many of the\n * demo applications.  Do not consider it to be part of the scheduler.\n *\n * vTaskListTasks() calls uxTaskGetSystemState(), then formats part of the\n * uxTaskGetSystemState() output into a human readable table that displays task:\n * names, states, priority, stack usage and task number.\n * Stack usage specified as the number of unused StackType_t words stack can hold\n * on top of stack - not the number of bytes.\n *\n * vTaskListTasks() has a dependency on the snprintf() C library function that might\n * bloat the code size, use a lot of stack, and provide different results on\n * different platforms.  An alternative, tiny, third party, and limited\n * functionality implementation of snprintf() is provided in many of the\n * FreeRTOS/Demo sub-directories in a file called printf-stdarg.c (note\n * printf-stdarg.c does not provide a full snprintf() implementation!).\n *\n * It is recommended that production systems call uxTaskGetSystemState()\n * directly to get access to raw stats data, rather than indirectly through a\n * call to vTaskListTasks().\n *\n * @param pcWriteBuffer A buffer into which the above mentioned details\n * will be written, in ASCII form.  This buffer is assumed to be large\n * enough to contain the generated report.  Approximately 40 bytes per\n * task should be sufficient.\n *\n * @param uxBufferLength Length of the pcWriteBuffer.\n *\n * \\defgroup vTaskListTasks vTaskListTasks\n * \\ingroup TaskUtils\n */\n#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) )\n    void vTaskListTasks( char * pcWriteBuffer,\n                         size_t uxBufferLength ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * task. h\n * @code{c}\n * void vTaskList( char *pcWriteBuffer );\n * @endcode\n *\n * configUSE_TRACE_FACILITY and configUSE_STATS_FORMATTING_FUNCTIONS must\n * both be defined as 1 for this function to be available.  See the\n * configuration section of the FreeRTOS.org website for more information.\n *\n * WARN: This function assumes that the pcWriteBuffer is of length\n * configSTATS_BUFFER_MAX_LENGTH. This function is there only for\n * backward compatibility. New applications are recommended to\n * use vTaskListTasks and supply the length of the pcWriteBuffer explicitly.\n *\n * NOTE 1: This function will disable interrupts for its duration.  It is\n * not intended for normal application runtime use but as a debug aid.\n *\n * Lists all the current tasks, along with their current state and stack\n * usage high water mark.\n *\n * Tasks are reported as blocked ('B'), ready ('R'), deleted ('D') or\n * suspended ('S').\n *\n * PLEASE NOTE:\n *\n * This function is provided for convenience only, and is used by many of the\n * demo applications.  Do not consider it to be part of the scheduler.\n *\n * vTaskList() calls uxTaskGetSystemState(), then formats part of the\n * uxTaskGetSystemState() output into a human readable table that displays task:\n * names, states, priority, stack usage and task number.\n * Stack usage specified as the number of unused StackType_t words stack can hold\n * on top of stack - not the number of bytes.\n *\n * vTaskList() has a dependency on the snprintf() C library function that might\n * bloat the code size, use a lot of stack, and provide different results on\n * different platforms.  An alternative, tiny, third party, and limited\n * functionality implementation of snprintf() is provided in many of the\n * FreeRTOS/Demo sub-directories in a file called printf-stdarg.c (note\n * printf-stdarg.c does not provide a full snprintf() implementation!).\n *\n * It is recommended that production systems call uxTaskGetSystemState()\n * directly to get access to raw stats data, rather than indirectly through a\n * call to vTaskList().\n *\n * @param pcWriteBuffer A buffer into which the above mentioned details\n * will be written, in ASCII form.  This buffer is assumed to be large\n * enough to contain the generated report.  Approximately 40 bytes per\n * task should be sufficient.\n *\n * \\defgroup vTaskList vTaskList\n * \\ingroup TaskUtils\n */\n#define vTaskList( pcWriteBuffer )    vTaskListTasks( ( pcWriteBuffer ), configSTATS_BUFFER_MAX_LENGTH )\n\n/**\n * task. h\n * @code{c}\n * void vTaskGetRunTimeStatistics( char *pcWriteBuffer, size_t uxBufferLength );\n * @endcode\n *\n * configGENERATE_RUN_TIME_STATS and configUSE_STATS_FORMATTING_FUNCTIONS\n * must both be defined as 1 for this function to be available.  The application\n * must also then provide definitions for\n * portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and portGET_RUN_TIME_COUNTER_VALUE()\n * to configure a peripheral timer/counter and return the timers current count\n * value respectively.  The counter should be at least 10 times the frequency of\n * the tick count.\n *\n * NOTE 1: This function will disable interrupts for its duration.  It is\n * not intended for normal application runtime use but as a debug aid.\n *\n * Setting configGENERATE_RUN_TIME_STATS to 1 will result in a total\n * accumulated execution time being stored for each task.  The resolution\n * of the accumulated time value depends on the frequency of the timer\n * configured by the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() macro.\n * Calling vTaskGetRunTimeStatistics() writes the total execution time of each\n * task into a buffer, both as an absolute count value and as a percentage\n * of the total system execution time.\n *\n * NOTE 2:\n *\n * This function is provided for convenience only, and is used by many of the\n * demo applications.  Do not consider it to be part of the scheduler.\n *\n * vTaskGetRunTimeStatistics() calls uxTaskGetSystemState(), then formats part of\n * the uxTaskGetSystemState() output into a human readable table that displays the\n * amount of time each task has spent in the Running state in both absolute and\n * percentage terms.\n *\n * vTaskGetRunTimeStatistics() has a dependency on the snprintf() C library function\n * that might bloat the code size, use a lot of stack, and provide different\n * results on different platforms.  An alternative, tiny, third party, and\n * limited functionality implementation of snprintf() is provided in many of the\n * FreeRTOS/Demo sub-directories in a file called printf-stdarg.c (note\n * printf-stdarg.c does not provide a full snprintf() implementation!).\n *\n * It is recommended that production systems call uxTaskGetSystemState() directly\n * to get access to raw stats data, rather than indirectly through a call to\n * vTaskGetRunTimeStatistics().\n *\n * @param pcWriteBuffer A buffer into which the execution times will be\n * written, in ASCII form.  This buffer is assumed to be large enough to\n * contain the generated report.  Approximately 40 bytes per task should\n * be sufficient.\n *\n * @param uxBufferLength Length of the pcWriteBuffer.\n *\n * \\defgroup vTaskGetRunTimeStatistics vTaskGetRunTimeStatistics\n * \\ingroup TaskUtils\n */\n#if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) && ( configUSE_TRACE_FACILITY == 1 ) )\n    void vTaskGetRunTimeStatistics( char * pcWriteBuffer,\n                                    size_t uxBufferLength ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * task. h\n * @code{c}\n * void vTaskGetRunTimeStats( char *pcWriteBuffer );\n * @endcode\n *\n * configGENERATE_RUN_TIME_STATS and configUSE_STATS_FORMATTING_FUNCTIONS\n * must both be defined as 1 for this function to be available.  The application\n * must also then provide definitions for\n * portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and portGET_RUN_TIME_COUNTER_VALUE()\n * to configure a peripheral timer/counter and return the timers current count\n * value respectively.  The counter should be at least 10 times the frequency of\n * the tick count.\n *\n * WARN: This function assumes that the pcWriteBuffer is of length\n * configSTATS_BUFFER_MAX_LENGTH. This function is there only for\n * backward compatiblity. New applications are recommended to use\n * vTaskGetRunTimeStatistics and supply the length of the pcWriteBuffer\n * explicitly.\n *\n * NOTE 1: This function will disable interrupts for its duration.  It is\n * not intended for normal application runtime use but as a debug aid.\n *\n * Setting configGENERATE_RUN_TIME_STATS to 1 will result in a total\n * accumulated execution time being stored for each task.  The resolution\n * of the accumulated time value depends on the frequency of the timer\n * configured by the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() macro.\n * Calling vTaskGetRunTimeStats() writes the total execution time of each\n * task into a buffer, both as an absolute count value and as a percentage\n * of the total system execution time.\n *\n * NOTE 2:\n *\n * This function is provided for convenience only, and is used by many of the\n * demo applications.  Do not consider it to be part of the scheduler.\n *\n * vTaskGetRunTimeStats() calls uxTaskGetSystemState(), then formats part of the\n * uxTaskGetSystemState() output into a human readable table that displays the\n * amount of time each task has spent in the Running state in both absolute and\n * percentage terms.\n *\n * vTaskGetRunTimeStats() has a dependency on the snprintf() C library function\n * that might bloat the code size, use a lot of stack, and provide different\n * results on different platforms.  An alternative, tiny, third party, and\n * limited functionality implementation of snprintf() is provided in many of the\n * FreeRTOS/Demo sub-directories in a file called printf-stdarg.c (note\n * printf-stdarg.c does not provide a full snprintf() implementation!).\n *\n * It is recommended that production systems call uxTaskGetSystemState() directly\n * to get access to raw stats data, rather than indirectly through a call to\n * vTaskGetRunTimeStats().\n *\n * @param pcWriteBuffer A buffer into which the execution times will be\n * written, in ASCII form.  This buffer is assumed to be large enough to\n * contain the generated report.  Approximately 40 bytes per task should\n * be sufficient.\n *\n * \\defgroup vTaskGetRunTimeStats vTaskGetRunTimeStats\n * \\ingroup TaskUtils\n */\n#define vTaskGetRunTimeStats( pcWriteBuffer )    vTaskGetRunTimeStatistics( ( pcWriteBuffer ), configSTATS_BUFFER_MAX_LENGTH )\n\n/**\n * task. h\n * @code{c}\n * configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimeCounter( const TaskHandle_t xTask );\n * configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimePercent( const TaskHandle_t xTask );\n * @endcode\n *\n * configGENERATE_RUN_TIME_STATS must be defined as 1 for these functions to be\n * available.  The application must also then provide definitions for\n * portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and\n * portGET_RUN_TIME_COUNTER_VALUE() to configure a peripheral timer/counter and\n * return the timers current count value respectively.  The counter should be\n * at least 10 times the frequency of the tick count.\n *\n * Setting configGENERATE_RUN_TIME_STATS to 1 will result in a total\n * accumulated execution time being stored for each task.  The resolution\n * of the accumulated time value depends on the frequency of the timer\n * configured by the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() macro.\n * While uxTaskGetSystemState() and vTaskGetRunTimeStats() writes the total\n * execution time of each task into a buffer, ulTaskGetRunTimeCounter()\n * returns the total execution time of just one task and\n * ulTaskGetRunTimePercent() returns the percentage of the CPU time used by\n * just one task.\n *\n * @return The total run time of the given task or the percentage of the total\n * run time consumed by the given task.  This is the amount of time the task\n * has actually been executing.  The unit of time is dependent on the frequency\n * configured using the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and\n * portGET_RUN_TIME_COUNTER_VALUE() macros.\n *\n * \\defgroup ulTaskGetRunTimeCounter ulTaskGetRunTimeCounter\n * \\ingroup TaskUtils\n */\n#if ( configGENERATE_RUN_TIME_STATS == 1 )\n    configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimeCounter( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\n    configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimePercent( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * task. h\n * @code{c}\n * configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimeCounter( void );\n * configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimePercent( void );\n * @endcode\n *\n * configGENERATE_RUN_TIME_STATS must be defined as 1 for these functions to be\n * available.  The application must also then provide definitions for\n * portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and\n * portGET_RUN_TIME_COUNTER_VALUE() to configure a peripheral timer/counter and\n * return the timers current count value respectively.  The counter should be\n * at least 10 times the frequency of the tick count.\n *\n * Setting configGENERATE_RUN_TIME_STATS to 1 will result in a total\n * accumulated execution time being stored for each task.  The resolution\n * of the accumulated time value depends on the frequency of the timer\n * configured by the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() macro.\n * While uxTaskGetSystemState() and vTaskGetRunTimeStats() writes the total\n * execution time of each task into a buffer, ulTaskGetIdleRunTimeCounter()\n * returns the total execution time of just the idle task and\n * ulTaskGetIdleRunTimePercent() returns the percentage of the CPU time used by\n * just the idle task.\n *\n * Note the amount of idle time is only a good measure of the slack time in a\n * system if there are no other tasks executing at the idle priority, tickless\n * idle is not used, and configIDLE_SHOULD_YIELD is set to 0.\n *\n * @return The total run time of the idle task or the percentage of the total\n * run time consumed by the idle task.  This is the amount of time the\n * idle task has actually been executing.  The unit of time is dependent on the\n * frequency configured using the portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() and\n * portGET_RUN_TIME_COUNTER_VALUE() macros.\n *\n * \\defgroup ulTaskGetIdleRunTimeCounter ulTaskGetIdleRunTimeCounter\n * \\ingroup TaskUtils\n */\n#if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) )\n    configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimeCounter( void ) PRIVILEGED_FUNCTION;\n    configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimePercent( void ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * task. h\n * @code{c}\n * BaseType_t xTaskNotifyIndexed( TaskHandle_t xTaskToNotify, UBaseType_t uxIndexToNotify, uint32_t ulValue, eNotifyAction eAction );\n * BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction );\n * @endcode\n *\n * See https://www.FreeRTOS.org/RTOS-task-notifications.html for details.\n *\n * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for these\n * functions to be available.\n *\n * Sends a direct to task notification to a task, with an optional value and\n * action.\n *\n * Each task has a private array of \"notification values\" (or 'notifications'),\n * each of which is a 32-bit unsigned integer (uint32_t).  The constant\n * configTASK_NOTIFICATION_ARRAY_ENTRIES sets the number of indexes in the\n * array, and (for backward compatibility) defaults to 1 if left undefined.\n * Prior to FreeRTOS V10.4.0 there was only one notification value per task.\n *\n * Events can be sent to a task using an intermediary object.  Examples of such\n * objects are queues, semaphores, mutexes and event groups.  Task notifications\n * are a method of sending an event directly to a task without the need for such\n * an intermediary object.\n *\n * A notification sent to a task can optionally perform an action, such as\n * update, overwrite or increment one of the task's notification values.  In\n * that way task notifications can be used to send data to a task, or be used as\n * light weight and fast binary or counting semaphores.\n *\n * A task can use xTaskNotifyWaitIndexed() or ulTaskNotifyTakeIndexed() to\n * [optionally] block to wait for a notification to be pending.  The task does\n * not consume any CPU time while it is in the Blocked state.\n *\n * A notification sent to a task will remain pending until it is cleared by the\n * task calling xTaskNotifyWaitIndexed() or ulTaskNotifyTakeIndexed() (or their\n * un-indexed equivalents).  If the task was already in the Blocked state to\n * wait for a notification when the notification arrives then the task will\n * automatically be removed from the Blocked state (unblocked) and the\n * notification cleared.\n *\n * **NOTE** Each notification within the array operates independently - a task\n * can only block on one notification within the array at a time and will not be\n * unblocked by a notification sent to any other array index.\n *\n * Backward compatibility information:\n * Prior to FreeRTOS V10.4.0 each task had a single \"notification value\", and\n * all task notification API functions operated on that value. Replacing the\n * single notification value with an array of notification values necessitated a\n * new set of API functions that could address specific notifications within the\n * array.  xTaskNotify() is the original API function, and remains backward\n * compatible by always operating on the notification value at index 0 in the\n * array. Calling xTaskNotify() is equivalent to calling xTaskNotifyIndexed()\n * with the uxIndexToNotify parameter set to 0.\n *\n * @param xTaskToNotify The handle of the task being notified.  The handle to a\n * task can be returned from the xTaskCreate() API function used to create the\n * task, and the handle of the currently running task can be obtained by calling\n * xTaskGetCurrentTaskHandle().\n *\n * @param uxIndexToNotify The index within the target task's array of\n * notification values to which the notification is to be sent.  uxIndexToNotify\n * must be less than configTASK_NOTIFICATION_ARRAY_ENTRIES.  xTaskNotify() does\n * not have this parameter and always sends notifications to index 0.\n *\n * @param ulValue Data that can be sent with the notification.  How the data is\n * used depends on the value of the eAction parameter.\n *\n * @param eAction Specifies how the notification updates the task's notification\n * value, if at all.  Valid values for eAction are as follows:\n *\n * eSetBits -\n * The target notification value is bitwise ORed with ulValue.\n * xTaskNotifyIndexed() always returns pdPASS in this case.\n *\n * eIncrement -\n * The target notification value is incremented.  ulValue is not used and\n * xTaskNotifyIndexed() always returns pdPASS in this case.\n *\n * eSetValueWithOverwrite -\n * The target notification value is set to the value of ulValue, even if the\n * task being notified had not yet processed the previous notification at the\n * same array index (the task already had a notification pending at that index).\n * xTaskNotifyIndexed() always returns pdPASS in this case.\n *\n * eSetValueWithoutOverwrite -\n * If the task being notified did not already have a notification pending at the\n * same array index then the target notification value is set to ulValue and\n * xTaskNotifyIndexed() will return pdPASS.  If the task being notified already\n * had a notification pending at the same array index then no action is\n * performed and pdFAIL is returned.\n *\n * eNoAction -\n * The task receives a notification at the specified array index without the\n * notification value at that index being updated.  ulValue is not used and\n * xTaskNotifyIndexed() always returns pdPASS in this case.\n *\n * pulPreviousNotificationValue -\n * Can be used to pass out the subject task's notification value before any\n * bits are modified by the notify function.\n *\n * @return Dependent on the value of eAction.  See the description of the\n * eAction parameter.\n *\n * \\defgroup xTaskNotifyIndexed xTaskNotifyIndexed\n * \\ingroup TaskNotifications\n */\nBaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify,\n                               UBaseType_t uxIndexToNotify,\n                               uint32_t ulValue,\n                               eNotifyAction eAction,\n                               uint32_t * pulPreviousNotificationValue ) PRIVILEGED_FUNCTION;\n#define xTaskNotify( xTaskToNotify, ulValue, eAction ) \\\n    xTaskGenericNotify( ( xTaskToNotify ), ( tskDEFAULT_INDEX_TO_NOTIFY ), ( ulValue ), ( eAction ), NULL )\n#define xTaskNotifyIndexed( xTaskToNotify, uxIndexToNotify, ulValue, eAction ) \\\n    xTaskGenericNotify( ( xTaskToNotify ), ( uxIndexToNotify ), ( ulValue ), ( eAction ), NULL )\n\n/**\n * task. h\n * @code{c}\n * BaseType_t xTaskNotifyAndQueryIndexed( TaskHandle_t xTaskToNotify, UBaseType_t uxIndexToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotifyValue );\n * BaseType_t xTaskNotifyAndQuery( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotifyValue );\n * @endcode\n *\n * See https://www.FreeRTOS.org/RTOS-task-notifications.html for details.\n *\n * xTaskNotifyAndQueryIndexed() performs the same operation as\n * xTaskNotifyIndexed() with the addition that it also returns the subject\n * task's prior notification value (the notification value at the time the\n * function is called rather than when the function returns) in the additional\n * pulPreviousNotifyValue parameter.\n *\n * xTaskNotifyAndQuery() performs the same operation as xTaskNotify() with the\n * addition that it also returns the subject task's prior notification value\n * (the notification value as it was at the time the function is called, rather\n * than when the function returns) in the additional pulPreviousNotifyValue\n * parameter.\n *\n * \\defgroup xTaskNotifyAndQueryIndexed xTaskNotifyAndQueryIndexed\n * \\ingroup TaskNotifications\n */\n#define xTaskNotifyAndQuery( xTaskToNotify, ulValue, eAction, pulPreviousNotifyValue ) \\\n    xTaskGenericNotify( ( xTaskToNotify ), ( tskDEFAULT_INDEX_TO_NOTIFY ), ( ulValue ), ( eAction ), ( pulPreviousNotifyValue ) )\n#define xTaskNotifyAndQueryIndexed( xTaskToNotify, uxIndexToNotify, ulValue, eAction, pulPreviousNotifyValue ) \\\n    xTaskGenericNotify( ( xTaskToNotify ), ( uxIndexToNotify ), ( ulValue ), ( eAction ), ( pulPreviousNotifyValue ) )\n\n/**\n * task. h\n * @code{c}\n * BaseType_t xTaskNotifyIndexedFromISR( TaskHandle_t xTaskToNotify, UBaseType_t uxIndexToNotify, uint32_t ulValue, eNotifyAction eAction, BaseType_t *pxHigherPriorityTaskWoken );\n * BaseType_t xTaskNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, BaseType_t *pxHigherPriorityTaskWoken );\n * @endcode\n *\n * See https://www.FreeRTOS.org/RTOS-task-notifications.html for details.\n *\n * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for these\n * functions to be available.\n *\n * A version of xTaskNotifyIndexed() that can be used from an interrupt service\n * routine (ISR).\n *\n * Each task has a private array of \"notification values\" (or 'notifications'),\n * each of which is a 32-bit unsigned integer (uint32_t).  The constant\n * configTASK_NOTIFICATION_ARRAY_ENTRIES sets the number of indexes in the\n * array, and (for backward compatibility) defaults to 1 if left undefined.\n * Prior to FreeRTOS V10.4.0 there was only one notification value per task.\n *\n * Events can be sent to a task using an intermediary object.  Examples of such\n * objects are queues, semaphores, mutexes and event groups.  Task notifications\n * are a method of sending an event directly to a task without the need for such\n * an intermediary object.\n *\n * A notification sent to a task can optionally perform an action, such as\n * update, overwrite or increment one of the task's notification values.  In\n * that way task notifications can be used to send data to a task, or be used as\n * light weight and fast binary or counting semaphores.\n *\n * A task can use xTaskNotifyWaitIndexed() to [optionally] block to wait for a\n * notification to be pending, or ulTaskNotifyTakeIndexed() to [optionally] block\n * to wait for a notification value to have a non-zero value.  The task does\n * not consume any CPU time while it is in the Blocked state.\n *\n * A notification sent to a task will remain pending until it is cleared by the\n * task calling xTaskNotifyWaitIndexed() or ulTaskNotifyTakeIndexed() (or their\n * un-indexed equivalents).  If the task was already in the Blocked state to\n * wait for a notification when the notification arrives then the task will\n * automatically be removed from the Blocked state (unblocked) and the\n * notification cleared.\n *\n * **NOTE** Each notification within the array operates independently - a task\n * can only block on one notification within the array at a time and will not be\n * unblocked by a notification sent to any other array index.\n *\n * Backward compatibility information:\n * Prior to FreeRTOS V10.4.0 each task had a single \"notification value\", and\n * all task notification API functions operated on that value. Replacing the\n * single notification value with an array of notification values necessitated a\n * new set of API functions that could address specific notifications within the\n * array.  xTaskNotifyFromISR() is the original API function, and remains\n * backward compatible by always operating on the notification value at index 0\n * within the array. Calling xTaskNotifyFromISR() is equivalent to calling\n * xTaskNotifyIndexedFromISR() with the uxIndexToNotify parameter set to 0.\n *\n * @param uxIndexToNotify The index within the target task's array of\n * notification values to which the notification is to be sent.  uxIndexToNotify\n * must be less than configTASK_NOTIFICATION_ARRAY_ENTRIES.  xTaskNotifyFromISR()\n * does not have this parameter and always sends notifications to index 0.\n *\n * @param xTaskToNotify The handle of the task being notified.  The handle to a\n * task can be returned from the xTaskCreate() API function used to create the\n * task, and the handle of the currently running task can be obtained by calling\n * xTaskGetCurrentTaskHandle().\n *\n * @param ulValue Data that can be sent with the notification.  How the data is\n * used depends on the value of the eAction parameter.\n *\n * @param eAction Specifies how the notification updates the task's notification\n * value, if at all.  Valid values for eAction are as follows:\n *\n * eSetBits -\n * The task's notification value is bitwise ORed with ulValue.  xTaskNotify()\n * always returns pdPASS in this case.\n *\n * eIncrement -\n * The task's notification value is incremented.  ulValue is not used and\n * xTaskNotify() always returns pdPASS in this case.\n *\n * eSetValueWithOverwrite -\n * The task's notification value is set to the value of ulValue, even if the\n * task being notified had not yet processed the previous notification (the\n * task already had a notification pending).  xTaskNotify() always returns\n * pdPASS in this case.\n *\n * eSetValueWithoutOverwrite -\n * If the task being notified did not already have a notification pending then\n * the task's notification value is set to ulValue and xTaskNotify() will\n * return pdPASS.  If the task being notified already had a notification\n * pending then no action is performed and pdFAIL is returned.\n *\n * eNoAction -\n * The task receives a notification without its notification value being\n * updated.  ulValue is not used and xTaskNotify() always returns pdPASS in\n * this case.\n *\n * @param pxHigherPriorityTaskWoken  xTaskNotifyFromISR() will set\n * *pxHigherPriorityTaskWoken to pdTRUE if sending the notification caused the\n * task to which the notification was sent to leave the Blocked state, and the\n * unblocked task has a priority higher than the currently running task.  If\n * xTaskNotifyFromISR() sets this value to pdTRUE then a context switch should\n * be requested before the interrupt is exited.  How a context switch is\n * requested from an ISR is dependent on the port - see the documentation page\n * for the port in use.\n *\n * @return Dependent on the value of eAction.  See the description of the\n * eAction parameter.\n *\n * \\defgroup xTaskNotifyIndexedFromISR xTaskNotifyIndexedFromISR\n * \\ingroup TaskNotifications\n */\nBaseType_t xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify,\n                                      UBaseType_t uxIndexToNotify,\n                                      uint32_t ulValue,\n                                      eNotifyAction eAction,\n                                      uint32_t * pulPreviousNotificationValue,\n                                      BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\n#define xTaskNotifyFromISR( xTaskToNotify, ulValue, eAction, pxHigherPriorityTaskWoken ) \\\n    xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( tskDEFAULT_INDEX_TO_NOTIFY ), ( ulValue ), ( eAction ), NULL, ( pxHigherPriorityTaskWoken ) )\n#define xTaskNotifyIndexedFromISR( xTaskToNotify, uxIndexToNotify, ulValue, eAction, pxHigherPriorityTaskWoken ) \\\n    xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( uxIndexToNotify ), ( ulValue ), ( eAction ), NULL, ( pxHigherPriorityTaskWoken ) )\n\n/**\n * task. h\n * @code{c}\n * BaseType_t xTaskNotifyAndQueryIndexedFromISR( TaskHandle_t xTaskToNotify, UBaseType_t uxIndexToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue, BaseType_t *pxHigherPriorityTaskWoken );\n * BaseType_t xTaskNotifyAndQueryFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, uint32_t *pulPreviousNotificationValue, BaseType_t *pxHigherPriorityTaskWoken );\n * @endcode\n *\n * See https://www.FreeRTOS.org/RTOS-task-notifications.html for details.\n *\n * xTaskNotifyAndQueryIndexedFromISR() performs the same operation as\n * xTaskNotifyIndexedFromISR() with the addition that it also returns the\n * subject task's prior notification value (the notification value at the time\n * the function is called rather than at the time the function returns) in the\n * additional pulPreviousNotifyValue parameter.\n *\n * xTaskNotifyAndQueryFromISR() performs the same operation as\n * xTaskNotifyFromISR() with the addition that it also returns the subject\n * task's prior notification value (the notification value at the time the\n * function is called rather than at the time the function returns) in the\n * additional pulPreviousNotifyValue parameter.\n *\n * \\defgroup xTaskNotifyAndQueryIndexedFromISR xTaskNotifyAndQueryIndexedFromISR\n * \\ingroup TaskNotifications\n */\n#define xTaskNotifyAndQueryIndexedFromISR( xTaskToNotify, uxIndexToNotify, ulValue, eAction, pulPreviousNotificationValue, pxHigherPriorityTaskWoken ) \\\n    xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( uxIndexToNotify ), ( ulValue ), ( eAction ), ( pulPreviousNotificationValue ), ( pxHigherPriorityTaskWoken ) )\n#define xTaskNotifyAndQueryFromISR( xTaskToNotify, ulValue, eAction, pulPreviousNotificationValue, pxHigherPriorityTaskWoken ) \\\n    xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( tskDEFAULT_INDEX_TO_NOTIFY ), ( ulValue ), ( eAction ), ( pulPreviousNotificationValue ), ( pxHigherPriorityTaskWoken ) )\n\n/**\n * task. h\n * @code{c}\n * BaseType_t xTaskNotifyWaitIndexed( UBaseType_t uxIndexToWaitOn, uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait );\n *\n * BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait );\n * @endcode\n *\n * Waits for a direct to task notification to be pending at a given index within\n * an array of direct to task notifications.\n *\n * See https://www.FreeRTOS.org/RTOS-task-notifications.html for details.\n *\n * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this\n * function to be available.\n *\n * Each task has a private array of \"notification values\" (or 'notifications'),\n * each of which is a 32-bit unsigned integer (uint32_t).  The constant\n * configTASK_NOTIFICATION_ARRAY_ENTRIES sets the number of indexes in the\n * array, and (for backward compatibility) defaults to 1 if left undefined.\n * Prior to FreeRTOS V10.4.0 there was only one notification value per task.\n *\n * Events can be sent to a task using an intermediary object.  Examples of such\n * objects are queues, semaphores, mutexes and event groups.  Task notifications\n * are a method of sending an event directly to a task without the need for such\n * an intermediary object.\n *\n * A notification sent to a task can optionally perform an action, such as\n * update, overwrite or increment one of the task's notification values.  In\n * that way task notifications can be used to send data to a task, or be used as\n * light weight and fast binary or counting semaphores.\n *\n * A notification sent to a task will remain pending until it is cleared by the\n * task calling xTaskNotifyWaitIndexed() or ulTaskNotifyTakeIndexed() (or their\n * un-indexed equivalents).  If the task was already in the Blocked state to\n * wait for a notification when the notification arrives then the task will\n * automatically be removed from the Blocked state (unblocked) and the\n * notification cleared.\n *\n * A task can use xTaskNotifyWaitIndexed() to [optionally] block to wait for a\n * notification to be pending, or ulTaskNotifyTakeIndexed() to [optionally] block\n * to wait for a notification value to have a non-zero value.  The task does\n * not consume any CPU time while it is in the Blocked state.\n *\n * **NOTE** Each notification within the array operates independently - a task\n * can only block on one notification within the array at a time and will not be\n * unblocked by a notification sent to any other array index.\n *\n * Backward compatibility information:\n * Prior to FreeRTOS V10.4.0 each task had a single \"notification value\", and\n * all task notification API functions operated on that value. Replacing the\n * single notification value with an array of notification values necessitated a\n * new set of API functions that could address specific notifications within the\n * array.  xTaskNotifyWait() is the original API function, and remains backward\n * compatible by always operating on the notification value at index 0 in the\n * array. Calling xTaskNotifyWait() is equivalent to calling\n * xTaskNotifyWaitIndexed() with the uxIndexToWaitOn parameter set to 0.\n *\n * @param uxIndexToWaitOn The index within the calling task's array of\n * notification values on which the calling task will wait for a notification to\n * be received.  uxIndexToWaitOn must be less than\n * configTASK_NOTIFICATION_ARRAY_ENTRIES.  xTaskNotifyWait() does\n * not have this parameter and always waits for notifications on index 0.\n *\n * @param ulBitsToClearOnEntry Bits that are set in ulBitsToClearOnEntry value\n * will be cleared in the calling task's notification value before the task\n * checks to see if any notifications are pending, and optionally blocks if no\n * notifications are pending.  Setting ulBitsToClearOnEntry to ULONG_MAX (if\n * limits.h is included) or 0xffffffffU (if limits.h is not included) will have\n * the effect of resetting the task's notification value to 0.  Setting\n * ulBitsToClearOnEntry to 0 will leave the task's notification value unchanged.\n *\n * @param ulBitsToClearOnExit If a notification is pending or received before\n * the calling task exits the xTaskNotifyWait() function then the task's\n * notification value (see the xTaskNotify() API function) is passed out using\n * the pulNotificationValue parameter.  Then any bits that are set in\n * ulBitsToClearOnExit will be cleared in the task's notification value (note\n * *pulNotificationValue is set before any bits are cleared).  Setting\n * ulBitsToClearOnExit to ULONG_MAX (if limits.h is included) or 0xffffffffUL\n * (if limits.h is not included) will have the effect of resetting the task's\n * notification value to 0 before the function exits.  Setting\n * ulBitsToClearOnExit to 0 will leave the task's notification value unchanged\n * when the function exits (in which case the value passed out in\n * pulNotificationValue will match the task's notification value).\n *\n * @param pulNotificationValue Used to pass the task's notification value out\n * of the function.  Note the value passed out will not be effected by the\n * clearing of any bits caused by ulBitsToClearOnExit being non-zero.\n *\n * @param xTicksToWait The maximum amount of time that the task should wait in\n * the Blocked state for a notification to be received, should a notification\n * not already be pending when xTaskNotifyWait() was called.  The task\n * will not consume any processing time while it is in the Blocked state.  This\n * is specified in kernel ticks, the macro pdMS_TO_TICKS( value_in_ms ) can be\n * used to convert a time specified in milliseconds to a time specified in\n * ticks.\n *\n * @return If a notification was received (including notifications that were\n * already pending when xTaskNotifyWait was called) then pdPASS is\n * returned.  Otherwise pdFAIL is returned.\n *\n * \\defgroup xTaskNotifyWaitIndexed xTaskNotifyWaitIndexed\n * \\ingroup TaskNotifications\n */\nBaseType_t xTaskGenericNotifyWait( UBaseType_t uxIndexToWaitOn,\n                                   uint32_t ulBitsToClearOnEntry,\n                                   uint32_t ulBitsToClearOnExit,\n                                   uint32_t * pulNotificationValue,\n                                   TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\n#define xTaskNotifyWait( ulBitsToClearOnEntry, ulBitsToClearOnExit, pulNotificationValue, xTicksToWait ) \\\n    xTaskGenericNotifyWait( tskDEFAULT_INDEX_TO_NOTIFY, ( ulBitsToClearOnEntry ), ( ulBitsToClearOnExit ), ( pulNotificationValue ), ( xTicksToWait ) )\n#define xTaskNotifyWaitIndexed( uxIndexToWaitOn, ulBitsToClearOnEntry, ulBitsToClearOnExit, pulNotificationValue, xTicksToWait ) \\\n    xTaskGenericNotifyWait( ( uxIndexToWaitOn ), ( ulBitsToClearOnEntry ), ( ulBitsToClearOnExit ), ( pulNotificationValue ), ( xTicksToWait ) )\n\n/**\n * task. h\n * @code{c}\n * BaseType_t xTaskNotifyGiveIndexed( TaskHandle_t xTaskToNotify, UBaseType_t uxIndexToNotify );\n * BaseType_t xTaskNotifyGive( TaskHandle_t xTaskToNotify );\n * @endcode\n *\n * Sends a direct to task notification to a particular index in the target\n * task's notification array in a manner similar to giving a counting semaphore.\n *\n * See https://www.FreeRTOS.org/RTOS-task-notifications.html for more details.\n *\n * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for these\n * macros to be available.\n *\n * Each task has a private array of \"notification values\" (or 'notifications'),\n * each of which is a 32-bit unsigned integer (uint32_t).  The constant\n * configTASK_NOTIFICATION_ARRAY_ENTRIES sets the number of indexes in the\n * array, and (for backward compatibility) defaults to 1 if left undefined.\n * Prior to FreeRTOS V10.4.0 there was only one notification value per task.\n *\n * Events can be sent to a task using an intermediary object.  Examples of such\n * objects are queues, semaphores, mutexes and event groups.  Task notifications\n * are a method of sending an event directly to a task without the need for such\n * an intermediary object.\n *\n * A notification sent to a task can optionally perform an action, such as\n * update, overwrite or increment one of the task's notification values.  In\n * that way task notifications can be used to send data to a task, or be used as\n * light weight and fast binary or counting semaphores.\n *\n * xTaskNotifyGiveIndexed() is a helper macro intended for use when task\n * notifications are used as light weight and faster binary or counting\n * semaphore equivalents.  Actual FreeRTOS semaphores are given using the\n * xSemaphoreGive() API function, the equivalent action that instead uses a task\n * notification is xTaskNotifyGiveIndexed().\n *\n * When task notifications are being used as a binary or counting semaphore\n * equivalent then the task being notified should wait for the notification\n * using the ulTaskNotifyTakeIndexed() API function rather than the\n * xTaskNotifyWaitIndexed() API function.\n *\n * **NOTE** Each notification within the array operates independently - a task\n * can only block on one notification within the array at a time and will not be\n * unblocked by a notification sent to any other array index.\n *\n * Backward compatibility information:\n * Prior to FreeRTOS V10.4.0 each task had a single \"notification value\", and\n * all task notification API functions operated on that value. Replacing the\n * single notification value with an array of notification values necessitated a\n * new set of API functions that could address specific notifications within the\n * array.  xTaskNotifyGive() is the original API function, and remains backward\n * compatible by always operating on the notification value at index 0 in the\n * array. Calling xTaskNotifyGive() is equivalent to calling\n * xTaskNotifyGiveIndexed() with the uxIndexToNotify parameter set to 0.\n *\n * @param xTaskToNotify The handle of the task being notified.  The handle to a\n * task can be returned from the xTaskCreate() API function used to create the\n * task, and the handle of the currently running task can be obtained by calling\n * xTaskGetCurrentTaskHandle().\n *\n * @param uxIndexToNotify The index within the target task's array of\n * notification values to which the notification is to be sent.  uxIndexToNotify\n * must be less than configTASK_NOTIFICATION_ARRAY_ENTRIES.  xTaskNotifyGive()\n * does not have this parameter and always sends notifications to index 0.\n *\n * @return xTaskNotifyGive() is a macro that calls xTaskNotify() with the\n * eAction parameter set to eIncrement - so pdPASS is always returned.\n *\n * \\defgroup xTaskNotifyGiveIndexed xTaskNotifyGiveIndexed\n * \\ingroup TaskNotifications\n */\n#define xTaskNotifyGive( xTaskToNotify ) \\\n    xTaskGenericNotify( ( xTaskToNotify ), ( tskDEFAULT_INDEX_TO_NOTIFY ), ( 0 ), eIncrement, NULL )\n#define xTaskNotifyGiveIndexed( xTaskToNotify, uxIndexToNotify ) \\\n    xTaskGenericNotify( ( xTaskToNotify ), ( uxIndexToNotify ), ( 0 ), eIncrement, NULL )\n\n/**\n * task. h\n * @code{c}\n * void vTaskNotifyGiveIndexedFromISR( TaskHandle_t xTaskHandle, UBaseType_t uxIndexToNotify, BaseType_t *pxHigherPriorityTaskWoken );\n * void vTaskNotifyGiveFromISR( TaskHandle_t xTaskHandle, BaseType_t *pxHigherPriorityTaskWoken );\n * @endcode\n *\n * A version of xTaskNotifyGiveIndexed() that can be called from an interrupt\n * service routine (ISR).\n *\n * See https://www.FreeRTOS.org/RTOS-task-notifications.html for more details.\n *\n * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this macro\n * to be available.\n *\n * Each task has a private array of \"notification values\" (or 'notifications'),\n * each of which is a 32-bit unsigned integer (uint32_t).  The constant\n * configTASK_NOTIFICATION_ARRAY_ENTRIES sets the number of indexes in the\n * array, and (for backward compatibility) defaults to 1 if left undefined.\n * Prior to FreeRTOS V10.4.0 there was only one notification value per task.\n *\n * Events can be sent to a task using an intermediary object.  Examples of such\n * objects are queues, semaphores, mutexes and event groups.  Task notifications\n * are a method of sending an event directly to a task without the need for such\n * an intermediary object.\n *\n * A notification sent to a task can optionally perform an action, such as\n * update, overwrite or increment one of the task's notification values.  In\n * that way task notifications can be used to send data to a task, or be used as\n * light weight and fast binary or counting semaphores.\n *\n * vTaskNotifyGiveIndexedFromISR() is intended for use when task notifications\n * are used as light weight and faster binary or counting semaphore equivalents.\n * Actual FreeRTOS semaphores are given from an ISR using the\n * xSemaphoreGiveFromISR() API function, the equivalent action that instead uses\n * a task notification is vTaskNotifyGiveIndexedFromISR().\n *\n * When task notifications are being used as a binary or counting semaphore\n * equivalent then the task being notified should wait for the notification\n * using the ulTaskNotifyTakeIndexed() API function rather than the\n * xTaskNotifyWaitIndexed() API function.\n *\n * **NOTE** Each notification within the array operates independently - a task\n * can only block on one notification within the array at a time and will not be\n * unblocked by a notification sent to any other array index.\n *\n * Backward compatibility information:\n * Prior to FreeRTOS V10.4.0 each task had a single \"notification value\", and\n * all task notification API functions operated on that value. Replacing the\n * single notification value with an array of notification values necessitated a\n * new set of API functions that could address specific notifications within the\n * array.  xTaskNotifyFromISR() is the original API function, and remains\n * backward compatible by always operating on the notification value at index 0\n * within the array. Calling xTaskNotifyGiveFromISR() is equivalent to calling\n * xTaskNotifyGiveIndexedFromISR() with the uxIndexToNotify parameter set to 0.\n *\n * @param xTaskToNotify The handle of the task being notified.  The handle to a\n * task can be returned from the xTaskCreate() API function used to create the\n * task, and the handle of the currently running task can be obtained by calling\n * xTaskGetCurrentTaskHandle().\n *\n * @param uxIndexToNotify The index within the target task's array of\n * notification values to which the notification is to be sent.  uxIndexToNotify\n * must be less than configTASK_NOTIFICATION_ARRAY_ENTRIES.\n * xTaskNotifyGiveFromISR() does not have this parameter and always sends\n * notifications to index 0.\n *\n * @param pxHigherPriorityTaskWoken  vTaskNotifyGiveFromISR() will set\n * *pxHigherPriorityTaskWoken to pdTRUE if sending the notification caused the\n * task to which the notification was sent to leave the Blocked state, and the\n * unblocked task has a priority higher than the currently running task.  If\n * vTaskNotifyGiveFromISR() sets this value to pdTRUE then a context switch\n * should be requested before the interrupt is exited.  How a context switch is\n * requested from an ISR is dependent on the port - see the documentation page\n * for the port in use.\n *\n * \\defgroup vTaskNotifyGiveIndexedFromISR vTaskNotifyGiveIndexedFromISR\n * \\ingroup TaskNotifications\n */\nvoid vTaskGenericNotifyGiveFromISR( TaskHandle_t xTaskToNotify,\n                                    UBaseType_t uxIndexToNotify,\n                                    BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\n#define vTaskNotifyGiveFromISR( xTaskToNotify, pxHigherPriorityTaskWoken ) \\\n    vTaskGenericNotifyGiveFromISR( ( xTaskToNotify ), ( tskDEFAULT_INDEX_TO_NOTIFY ), ( pxHigherPriorityTaskWoken ) )\n#define vTaskNotifyGiveIndexedFromISR( xTaskToNotify, uxIndexToNotify, pxHigherPriorityTaskWoken ) \\\n    vTaskGenericNotifyGiveFromISR( ( xTaskToNotify ), ( uxIndexToNotify ), ( pxHigherPriorityTaskWoken ) )\n\n/**\n * task. h\n * @code{c}\n * uint32_t ulTaskNotifyTakeIndexed( UBaseType_t uxIndexToWaitOn, BaseType_t xClearCountOnExit, TickType_t xTicksToWait );\n *\n * uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait );\n * @endcode\n *\n * Waits for a direct to task notification on a particular index in the calling\n * task's notification array in a manner similar to taking a counting semaphore.\n *\n * See https://www.FreeRTOS.org/RTOS-task-notifications.html for details.\n *\n * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this\n * function to be available.\n *\n * Each task has a private array of \"notification values\" (or 'notifications'),\n * each of which is a 32-bit unsigned integer (uint32_t).  The constant\n * configTASK_NOTIFICATION_ARRAY_ENTRIES sets the number of indexes in the\n * array, and (for backward compatibility) defaults to 1 if left undefined.\n * Prior to FreeRTOS V10.4.0 there was only one notification value per task.\n *\n * Events can be sent to a task using an intermediary object.  Examples of such\n * objects are queues, semaphores, mutexes and event groups.  Task notifications\n * are a method of sending an event directly to a task without the need for such\n * an intermediary object.\n *\n * A notification sent to a task can optionally perform an action, such as\n * update, overwrite or increment one of the task's notification values.  In\n * that way task notifications can be used to send data to a task, or be used as\n * light weight and fast binary or counting semaphores.\n *\n * ulTaskNotifyTakeIndexed() is intended for use when a task notification is\n * used as a faster and lighter weight binary or counting semaphore alternative.\n * Actual FreeRTOS semaphores are taken using the xSemaphoreTake() API function,\n * the equivalent action that instead uses a task notification is\n * ulTaskNotifyTakeIndexed().\n *\n * When a task is using its notification value as a binary or counting semaphore\n * other tasks should send notifications to it using the xTaskNotifyGiveIndexed()\n * macro, or xTaskNotifyIndex() function with the eAction parameter set to\n * eIncrement.\n *\n * ulTaskNotifyTakeIndexed() can either clear the task's notification value at\n * the array index specified by the uxIndexToWaitOn parameter to zero on exit,\n * in which case the notification value acts like a binary semaphore, or\n * decrement the notification value on exit, in which case the notification\n * value acts like a counting semaphore.\n *\n * A task can use ulTaskNotifyTakeIndexed() to [optionally] block to wait for\n * a notification.  The task does not consume any CPU time while it is in the\n * Blocked state.\n *\n * Where as xTaskNotifyWaitIndexed() will return when a notification is pending,\n * ulTaskNotifyTakeIndexed() will return when the task's notification value is\n * not zero.\n *\n * **NOTE** Each notification within the array operates independently - a task\n * can only block on one notification within the array at a time and will not be\n * unblocked by a notification sent to any other array index.\n *\n * Backward compatibility information:\n * Prior to FreeRTOS V10.4.0 each task had a single \"notification value\", and\n * all task notification API functions operated on that value. Replacing the\n * single notification value with an array of notification values necessitated a\n * new set of API functions that could address specific notifications within the\n * array.  ulTaskNotifyTake() is the original API function, and remains backward\n * compatible by always operating on the notification value at index 0 in the\n * array. Calling ulTaskNotifyTake() is equivalent to calling\n * ulTaskNotifyTakeIndexed() with the uxIndexToWaitOn parameter set to 0.\n *\n * @param uxIndexToWaitOn The index within the calling task's array of\n * notification values on which the calling task will wait for a notification to\n * be non-zero.  uxIndexToWaitOn must be less than\n * configTASK_NOTIFICATION_ARRAY_ENTRIES.  xTaskNotifyTake() does\n * not have this parameter and always waits for notifications on index 0.\n *\n * @param xClearCountOnExit if xClearCountOnExit is pdFALSE then the task's\n * notification value is decremented when the function exits.  In this way the\n * notification value acts like a counting semaphore.  If xClearCountOnExit is\n * not pdFALSE then the task's notification value is cleared to zero when the\n * function exits.  In this way the notification value acts like a binary\n * semaphore.\n *\n * @param xTicksToWait The maximum amount of time that the task should wait in\n * the Blocked state for the task's notification value to be greater than zero,\n * should the count not already be greater than zero when\n * ulTaskNotifyTake() was called.  The task will not consume any processing\n * time while it is in the Blocked state.  This is specified in kernel ticks,\n * the macro pdMS_TO_TICKS( value_in_ms ) can be used to convert a time\n * specified in milliseconds to a time specified in ticks.\n *\n * @return The task's notification count before it is either cleared to zero or\n * decremented (see the xClearCountOnExit parameter).\n *\n * \\defgroup ulTaskNotifyTakeIndexed ulTaskNotifyTakeIndexed\n * \\ingroup TaskNotifications\n */\nuint32_t ulTaskGenericNotifyTake( UBaseType_t uxIndexToWaitOn,\n                                  BaseType_t xClearCountOnExit,\n                                  TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\n#define ulTaskNotifyTake( xClearCountOnExit, xTicksToWait ) \\\n    ulTaskGenericNotifyTake( ( tskDEFAULT_INDEX_TO_NOTIFY ), ( xClearCountOnExit ), ( xTicksToWait ) )\n#define ulTaskNotifyTakeIndexed( uxIndexToWaitOn, xClearCountOnExit, xTicksToWait ) \\\n    ulTaskGenericNotifyTake( ( uxIndexToWaitOn ), ( xClearCountOnExit ), ( xTicksToWait ) )\n\n/**\n * task. h\n * @code{c}\n * BaseType_t xTaskNotifyStateClearIndexed( TaskHandle_t xTask, UBaseType_t uxIndexToCLear );\n *\n * BaseType_t xTaskNotifyStateClear( TaskHandle_t xTask );\n * @endcode\n *\n * See https://www.FreeRTOS.org/RTOS-task-notifications.html for details.\n *\n * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for these\n * functions to be available.\n *\n * Each task has a private array of \"notification values\" (or 'notifications'),\n * each of which is a 32-bit unsigned integer (uint32_t).  The constant\n * configTASK_NOTIFICATION_ARRAY_ENTRIES sets the number of indexes in the\n * array, and (for backward compatibility) defaults to 1 if left undefined.\n * Prior to FreeRTOS V10.4.0 there was only one notification value per task.\n *\n * If a notification is sent to an index within the array of notifications then\n * the notification at that index is said to be 'pending' until it is read or\n * explicitly cleared by the receiving task.  xTaskNotifyStateClearIndexed()\n * is the function that clears a pending notification without reading the\n * notification value.  The notification value at the same array index is not\n * altered.  Set xTask to NULL to clear the notification state of the calling\n * task.\n *\n * Backward compatibility information:\n * Prior to FreeRTOS V10.4.0 each task had a single \"notification value\", and\n * all task notification API functions operated on that value. Replacing the\n * single notification value with an array of notification values necessitated a\n * new set of API functions that could address specific notifications within the\n * array.  xTaskNotifyStateClear() is the original API function, and remains\n * backward compatible by always operating on the notification value at index 0\n * within the array. Calling xTaskNotifyStateClear() is equivalent to calling\n * xTaskNotifyStateClearIndexed() with the uxIndexToNotify parameter set to 0.\n *\n * @param xTask The handle of the RTOS task that will have a notification state\n * cleared.  Set xTask to NULL to clear a notification state in the calling\n * task.  To obtain a task's handle create the task using xTaskCreate() and\n * make use of the pxCreatedTask parameter, or create the task using\n * xTaskCreateStatic() and store the returned value, or use the task's name in\n * a call to xTaskGetHandle().\n *\n * @param uxIndexToClear The index within the target task's array of\n * notification values to act upon.  For example, setting uxIndexToClear to 1\n * will clear the state of the notification at index 1 within the array.\n * uxIndexToClear must be less than configTASK_NOTIFICATION_ARRAY_ENTRIES.\n * ulTaskNotifyStateClear() does not have this parameter and always acts on the\n * notification at index 0.\n *\n * @return pdTRUE if the task's notification state was set to\n * eNotWaitingNotification, otherwise pdFALSE.\n *\n * \\defgroup xTaskNotifyStateClearIndexed xTaskNotifyStateClearIndexed\n * \\ingroup TaskNotifications\n */\nBaseType_t xTaskGenericNotifyStateClear( TaskHandle_t xTask,\n                                         UBaseType_t uxIndexToClear ) PRIVILEGED_FUNCTION;\n#define xTaskNotifyStateClear( xTask ) \\\n    xTaskGenericNotifyStateClear( ( xTask ), ( tskDEFAULT_INDEX_TO_NOTIFY ) )\n#define xTaskNotifyStateClearIndexed( xTask, uxIndexToClear ) \\\n    xTaskGenericNotifyStateClear( ( xTask ), ( uxIndexToClear ) )\n\n/**\n * task. h\n * @code{c}\n * uint32_t ulTaskNotifyValueClearIndexed( TaskHandle_t xTask, UBaseType_t uxIndexToClear, uint32_t ulBitsToClear );\n *\n * uint32_t ulTaskNotifyValueClear( TaskHandle_t xTask, uint32_t ulBitsToClear );\n * @endcode\n *\n * See https://www.FreeRTOS.org/RTOS-task-notifications.html for details.\n *\n * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for these\n * functions to be available.\n *\n * Each task has a private array of \"notification values\" (or 'notifications'),\n * each of which is a 32-bit unsigned integer (uint32_t).  The constant\n * configTASK_NOTIFICATION_ARRAY_ENTRIES sets the number of indexes in the\n * array, and (for backward compatibility) defaults to 1 if left undefined.\n * Prior to FreeRTOS V10.4.0 there was only one notification value per task.\n *\n * ulTaskNotifyValueClearIndexed() clears the bits specified by the\n * ulBitsToClear bit mask in the notification value at array index uxIndexToClear\n * of the task referenced by xTask.\n *\n * Backward compatibility information:\n * Prior to FreeRTOS V10.4.0 each task had a single \"notification value\", and\n * all task notification API functions operated on that value. Replacing the\n * single notification value with an array of notification values necessitated a\n * new set of API functions that could address specific notifications within the\n * array.  ulTaskNotifyValueClear() is the original API function, and remains\n * backward compatible by always operating on the notification value at index 0\n * within the array. Calling ulTaskNotifyValueClear() is equivalent to calling\n * ulTaskNotifyValueClearIndexed() with the uxIndexToClear parameter set to 0.\n *\n * @param xTask The handle of the RTOS task that will have bits in one of its\n * notification values cleared. Set xTask to NULL to clear bits in a\n * notification value of the calling task.  To obtain a task's handle create the\n * task using xTaskCreate() and make use of the pxCreatedTask parameter, or\n * create the task using xTaskCreateStatic() and store the returned value, or\n * use the task's name in a call to xTaskGetHandle().\n *\n * @param uxIndexToClear The index within the target task's array of\n * notification values in which to clear the bits.  uxIndexToClear\n * must be less than configTASK_NOTIFICATION_ARRAY_ENTRIES.\n * ulTaskNotifyValueClear() does not have this parameter and always clears bits\n * in the notification value at index 0.\n *\n * @param ulBitsToClear Bit mask of the bits to clear in the notification value of\n * xTask. Set a bit to 1 to clear the corresponding bits in the task's notification\n * value. Set ulBitsToClear to 0xffffffff (UINT_MAX on 32-bit architectures) to clear\n * the notification value to 0.  Set ulBitsToClear to 0 to query the task's\n * notification value without clearing any bits.\n *\n *\n * @return The value of the target task's notification value before the bits\n * specified by ulBitsToClear were cleared.\n * \\defgroup ulTaskNotifyValueClear ulTaskNotifyValueClear\n * \\ingroup TaskNotifications\n */\nuint32_t ulTaskGenericNotifyValueClear( TaskHandle_t xTask,\n                                        UBaseType_t uxIndexToClear,\n                                        uint32_t ulBitsToClear ) PRIVILEGED_FUNCTION;\n#define ulTaskNotifyValueClear( xTask, ulBitsToClear ) \\\n    ulTaskGenericNotifyValueClear( ( xTask ), ( tskDEFAULT_INDEX_TO_NOTIFY ), ( ulBitsToClear ) )\n#define ulTaskNotifyValueClearIndexed( xTask, uxIndexToClear, ulBitsToClear ) \\\n    ulTaskGenericNotifyValueClear( ( xTask ), ( uxIndexToClear ), ( ulBitsToClear ) )\n\n/**\n * task.h\n * @code{c}\n * void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut );\n * @endcode\n *\n * Capture the current time for future use with xTaskCheckForTimeOut().\n *\n * @param pxTimeOut Pointer to a timeout object into which the current time\n * is to be captured.  The captured time includes the tick count and the number\n * of times the tick count has overflowed since the system first booted.\n * \\defgroup vTaskSetTimeOutState vTaskSetTimeOutState\n * \\ingroup TaskCtrl\n */\nvoid vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) PRIVILEGED_FUNCTION;\n\n/**\n * task.h\n * @code{c}\n * BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, TickType_t * const pxTicksToWait );\n * @endcode\n *\n * Determines if pxTicksToWait ticks has passed since a time was captured\n * using a call to vTaskSetTimeOutState().  The captured time includes the tick\n * count and the number of times the tick count has overflowed.\n *\n * @param pxTimeOut The time status as captured previously using\n * vTaskSetTimeOutState. If the timeout has not yet occurred, it is updated\n * to reflect the current time status.\n * @param pxTicksToWait The number of ticks to check for timeout i.e. if\n * pxTicksToWait ticks have passed since pxTimeOut was last updated (either by\n * vTaskSetTimeOutState() or xTaskCheckForTimeOut()), the timeout has occurred.\n * If the timeout has not occurred, pxTicksToWait is updated to reflect the\n * number of remaining ticks.\n *\n * @return If timeout has occurred, pdTRUE is returned. Otherwise pdFALSE is\n * returned and pxTicksToWait is updated to reflect the number of remaining\n * ticks.\n *\n * @see https://www.FreeRTOS.org/xTaskCheckForTimeOut.html\n *\n * Example Usage:\n * @code{c}\n *  // Driver library function used to receive uxWantedBytes from an Rx buffer\n *  // that is filled by a UART interrupt. If there are not enough bytes in the\n *  // Rx buffer then the task enters the Blocked state until it is notified that\n *  // more data has been placed into the buffer. If there is still not enough\n *  // data then the task re-enters the Blocked state, and xTaskCheckForTimeOut()\n *  // is used to re-calculate the Block time to ensure the total amount of time\n *  // spent in the Blocked state does not exceed MAX_TIME_TO_WAIT. This\n *  // continues until either the buffer contains at least uxWantedBytes bytes,\n *  // or the total amount of time spent in the Blocked state reaches\n *  // MAX_TIME_TO_WAIT - at which point the task reads however many bytes are\n *  // available up to a maximum of uxWantedBytes.\n *\n *  size_t xUART_Receive( uint8_t *pucBuffer, size_t uxWantedBytes )\n *  {\n *  size_t uxReceived = 0;\n *  TickType_t xTicksToWait = MAX_TIME_TO_WAIT;\n *  TimeOut_t xTimeOut;\n *\n *      // Initialize xTimeOut.  This records the time at which this function\n *      // was entered.\n *      vTaskSetTimeOutState( &xTimeOut );\n *\n *      // Loop until the buffer contains the wanted number of bytes, or a\n *      // timeout occurs.\n *      while( UART_bytes_in_rx_buffer( pxUARTInstance ) < uxWantedBytes )\n *      {\n *          // The buffer didn't contain enough data so this task is going to\n *          // enter the Blocked state. Adjusting xTicksToWait to account for\n *          // any time that has been spent in the Blocked state within this\n *          // function so far to ensure the total amount of time spent in the\n *          // Blocked state does not exceed MAX_TIME_TO_WAIT.\n *          if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) != pdFALSE )\n *          {\n *              //Timed out before the wanted number of bytes were available,\n *              // exit the loop.\n *              break;\n *          }\n *\n *          // Wait for a maximum of xTicksToWait ticks to be notified that the\n *          // receive interrupt has placed more data into the buffer.\n *          ulTaskNotifyTake( pdTRUE, xTicksToWait );\n *      }\n *\n *      // Attempt to read uxWantedBytes from the receive buffer into pucBuffer.\n *      // The actual number of bytes read (which might be less than\n *      // uxWantedBytes) is returned.\n *      uxReceived = UART_read_from_receive_buffer( pxUARTInstance,\n *                                                  pucBuffer,\n *                                                  uxWantedBytes );\n *\n *      return uxReceived;\n *  }\n * @endcode\n * \\defgroup xTaskCheckForTimeOut xTaskCheckForTimeOut\n * \\ingroup TaskCtrl\n */\nBaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut,\n                                 TickType_t * const pxTicksToWait ) PRIVILEGED_FUNCTION;\n\n/**\n * task.h\n * @code{c}\n * BaseType_t xTaskCatchUpTicks( TickType_t xTicksToCatchUp );\n * @endcode\n *\n * This function corrects the tick count value after the application code has held\n * interrupts disabled for an extended period resulting in tick interrupts having\n * been missed.\n *\n * This function is similar to vTaskStepTick(), however, unlike\n * vTaskStepTick(), xTaskCatchUpTicks() may move the tick count forward past a\n * time at which a task should be removed from the blocked state.  That means\n * tasks may have to be removed from the blocked state as the tick count is\n * moved.\n *\n * @param xTicksToCatchUp The number of tick interrupts that have been missed due to\n * interrupts being disabled.  Its value is not computed automatically, so must be\n * computed by the application writer.\n *\n * @return pdTRUE if moving the tick count forward resulted in a task leaving the\n * blocked state and a context switch being performed.  Otherwise pdFALSE.\n *\n * \\defgroup xTaskCatchUpTicks xTaskCatchUpTicks\n * \\ingroup TaskCtrl\n */\nBaseType_t xTaskCatchUpTicks( TickType_t xTicksToCatchUp ) PRIVILEGED_FUNCTION;\n\n/**\n * task.h\n * @code{c}\n * void vTaskResetState( void );\n * @endcode\n *\n * This function resets the internal state of the task. It must be called by the\n * application before restarting the scheduler.\n *\n * \\defgroup vTaskResetState vTaskResetState\n * \\ingroup SchedulerControl\n */\nvoid vTaskResetState( void ) PRIVILEGED_FUNCTION;\n\n\n/*-----------------------------------------------------------\n* SCHEDULER INTERNALS AVAILABLE FOR PORTING PURPOSES\n*----------------------------------------------------------*/\n\n#if ( configNUMBER_OF_CORES == 1 )\n    #define taskYIELD_WITHIN_API()    portYIELD_WITHIN_API()\n#else /* #if ( configNUMBER_OF_CORES == 1 ) */\n    #define taskYIELD_WITHIN_API()    vTaskYieldWithinAPI()\n#endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n\n/*\n * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE.  IT IS ONLY\n * INTENDED FOR USE WHEN IMPLEMENTING A PORT OF THE SCHEDULER AND IS\n * AN INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER.\n *\n * Called from the real time kernel tick (either preemptive or cooperative),\n * this increments the tick count and checks if any tasks that are blocked\n * for a finite period required removing from a blocked list and placing on\n * a ready list.  If a non-zero value is returned then a context switch is\n * required because either:\n *   + A task was removed from a blocked list because its timeout had expired,\n *     or\n *   + Time slicing is in use and there is a task of equal priority to the\n *     currently running task.\n */\nBaseType_t xTaskIncrementTick( void ) PRIVILEGED_FUNCTION;\n\n/*\n * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE.  IT IS AN\n * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER.\n *\n * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED.\n *\n * Removes the calling task from the ready list and places it both\n * on the list of tasks waiting for a particular event, and the\n * list of delayed tasks.  The task will be removed from both lists\n * and replaced on the ready list should either the event occur (and\n * there be no higher priority tasks waiting on the same event) or\n * the delay period expires.\n *\n * The 'unordered' version replaces the event list item value with the\n * xItemValue value, and inserts the list item at the end of the list.\n *\n * The 'ordered' version uses the existing event list item value (which is the\n * owning task's priority) to insert the list item into the event list in task\n * priority order.\n *\n * @param pxEventList The list containing tasks that are blocked waiting\n * for the event to occur.\n *\n * @param xItemValue The item value to use for the event list item when the\n * event list is not ordered by task priority.\n *\n * @param xTicksToWait The maximum amount of time that the task should wait\n * for the event to occur.  This is specified in kernel ticks, the constant\n * portTICK_PERIOD_MS can be used to convert kernel ticks into a real time\n * period.\n */\nvoid vTaskPlaceOnEventList( List_t * const pxEventList,\n                            const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\nvoid vTaskPlaceOnUnorderedEventList( List_t * pxEventList,\n                                     const TickType_t xItemValue,\n                                     const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\n\n/*\n * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE.  IT IS AN\n * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER.\n *\n * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED.\n *\n * This function performs nearly the same function as vTaskPlaceOnEventList().\n * The difference being that this function does not permit tasks to block\n * indefinitely, whereas vTaskPlaceOnEventList() does.\n *\n */\nvoid vTaskPlaceOnEventListRestricted( List_t * const pxEventList,\n                                      TickType_t xTicksToWait,\n                                      const BaseType_t xWaitIndefinitely ) PRIVILEGED_FUNCTION;\n\n/*\n * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE.  IT IS AN\n * INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER.\n *\n * THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED.\n *\n * Removes a task from both the specified event list and the list of blocked\n * tasks, and places it on a ready queue.\n *\n * xTaskRemoveFromEventList()/vTaskRemoveFromUnorderedEventList() will be called\n * if either an event occurs to unblock a task, or the block timeout period\n * expires.\n *\n * xTaskRemoveFromEventList() is used when the event list is in task priority\n * order.  It removes the list item from the head of the event list as that will\n * have the highest priority owning task of all the tasks on the event list.\n * vTaskRemoveFromUnorderedEventList() is used when the event list is not\n * ordered and the event list items hold something other than the owning tasks\n * priority.  In this case the event list item value is updated to the value\n * passed in the xItemValue parameter.\n *\n * @return pdTRUE if the task being removed has a higher priority than the task\n * making the call, otherwise pdFALSE.\n */\nBaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList ) PRIVILEGED_FUNCTION;\nvoid vTaskRemoveFromUnorderedEventList( ListItem_t * pxEventListItem,\n                                        const TickType_t xItemValue ) PRIVILEGED_FUNCTION;\n\n/*\n * THIS FUNCTION MUST NOT BE USED FROM APPLICATION CODE.  IT IS ONLY\n * INTENDED FOR USE WHEN IMPLEMENTING A PORT OF THE SCHEDULER AND IS\n * AN INTERFACE WHICH IS FOR THE EXCLUSIVE USE OF THE SCHEDULER.\n *\n * Sets the pointer to the current TCB to the TCB of the highest priority task\n * that is ready to run.\n */\n#if ( configNUMBER_OF_CORES == 1 )\n    portDONT_DISCARD void vTaskSwitchContext( void ) PRIVILEGED_FUNCTION;\n#else\n    portDONT_DISCARD void vTaskSwitchContext( BaseType_t xCoreID ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * THESE FUNCTIONS MUST NOT BE USED FROM APPLICATION CODE.  THEY ARE USED BY\n * THE EVENT BITS MODULE.\n */\nTickType_t uxTaskResetEventItemValue( void ) PRIVILEGED_FUNCTION;\n\n/*\n * Return the handle of the calling task.\n */\nTaskHandle_t xTaskGetCurrentTaskHandle( void ) PRIVILEGED_FUNCTION;\n\n/*\n * Return the handle of the task running on specified core.\n */\nTaskHandle_t xTaskGetCurrentTaskHandleForCore( BaseType_t xCoreID ) PRIVILEGED_FUNCTION;\n\n/*\n * Shortcut used by the queue implementation to prevent unnecessary call to\n * taskYIELD();\n */\nvoid vTaskMissedYield( void ) PRIVILEGED_FUNCTION;\n\n/*\n * Returns the scheduler state as taskSCHEDULER_RUNNING,\n * taskSCHEDULER_NOT_STARTED or taskSCHEDULER_SUSPENDED.\n */\nBaseType_t xTaskGetSchedulerState( void ) PRIVILEGED_FUNCTION;\n\n/*\n * Raises the priority of the mutex holder to that of the calling task should\n * the mutex holder have a priority less than the calling task.\n */\nBaseType_t xTaskPriorityInherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTION;\n\n/*\n * Set the priority of a task back to its proper priority in the case that it\n * inherited a higher priority while it was holding a semaphore.\n */\nBaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder ) PRIVILEGED_FUNCTION;\n\n/*\n * If a higher priority task attempting to obtain a mutex caused a lower\n * priority task to inherit the higher priority task's priority - but the higher\n * priority task then timed out without obtaining the mutex, then the lower\n * priority task will disinherit the priority again - but only down as far as\n * the highest priority task that is still waiting for the mutex (if there were\n * more than one task waiting for the mutex).\n */\nvoid vTaskPriorityDisinheritAfterTimeout( TaskHandle_t const pxMutexHolder,\n                                          UBaseType_t uxHighestPriorityWaitingTask ) PRIVILEGED_FUNCTION;\n\n/*\n * Get the uxTaskNumber assigned to the task referenced by the xTask parameter.\n */\n#if ( configUSE_TRACE_FACILITY == 1 )\n    UBaseType_t uxTaskGetTaskNumber( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * Set the uxTaskNumber of the task referenced by the xTask parameter to\n * uxHandle.\n */\n#if ( configUSE_TRACE_FACILITY == 1 )\n    void vTaskSetTaskNumber( TaskHandle_t xTask,\n                             const UBaseType_t uxHandle ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * Only available when configUSE_TICKLESS_IDLE is set to 1.\n * If tickless mode is being used, or a low power mode is implemented, then\n * the tick interrupt will not execute during idle periods.  When this is the\n * case, the tick count value maintained by the scheduler needs to be kept up\n * to date with the actual execution time by being skipped forward by a time\n * equal to the idle period.\n */\n#if ( configUSE_TICKLESS_IDLE != 0 )\n    void vTaskStepTick( TickType_t xTicksToJump ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * Only available when configUSE_TICKLESS_IDLE is set to 1.\n * Provided for use within portSUPPRESS_TICKS_AND_SLEEP() to allow the port\n * specific sleep function to determine if it is ok to proceed with the sleep,\n * and if it is ok to proceed, if it is ok to sleep indefinitely.\n *\n * This function is necessary because portSUPPRESS_TICKS_AND_SLEEP() is only\n * called with the scheduler suspended, not from within a critical section.  It\n * is therefore possible for an interrupt to request a context switch between\n * portSUPPRESS_TICKS_AND_SLEEP() and the low power mode actually being\n * entered.  eTaskConfirmSleepModeStatus() should be called from a short\n * critical section between the timer being stopped and the sleep mode being\n * entered to ensure it is ok to proceed into the sleep mode.\n */\n#if ( configUSE_TICKLESS_IDLE != 0 )\n    eSleepModeStatus eTaskConfirmSleepModeStatus( void ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * For internal use only.  Increment the mutex held count when a mutex is\n * taken and return the handle of the task that has taken the mutex.\n */\nTaskHandle_t pvTaskIncrementMutexHeldCount( void ) PRIVILEGED_FUNCTION;\n\n/*\n * For internal use only.  Same as vTaskSetTimeOutState(), but without a critical\n * section.\n */\nvoid vTaskInternalSetTimeOutState( TimeOut_t * const pxTimeOut ) PRIVILEGED_FUNCTION;\n\n/*\n * For internal use only. Same as portYIELD_WITHIN_API() in single core FreeRTOS.\n * For SMP this is not defined by the port.\n */\n#if ( configNUMBER_OF_CORES > 1 )\n    void vTaskYieldWithinAPI( void );\n#endif\n\n/*\n * This function is only intended for use when implementing a port of the scheduler\n * and is only available when portCRITICAL_NESTING_IN_TCB is set to 1 or configNUMBER_OF_CORES\n * is greater than 1. This function can be used in the implementation of portENTER_CRITICAL\n * if port wants to maintain critical nesting count in TCB in single core FreeRTOS.\n * It should be used in the implementation of portENTER_CRITICAL if port is running a\n * multiple core FreeRTOS.\n */\n#if ( ( portCRITICAL_NESTING_IN_TCB == 1 ) || ( configNUMBER_OF_CORES > 1 ) )\n    void vTaskEnterCritical( void );\n#endif\n\n/*\n * This function is only intended for use when implementing a port of the scheduler\n * and is only available when portCRITICAL_NESTING_IN_TCB is set to 1 or configNUMBER_OF_CORES\n * is greater than 1. This function can be used in the implementation of portEXIT_CRITICAL\n * if port wants to maintain critical nesting count in TCB in single core FreeRTOS.\n * It should be used in the implementation of portEXIT_CRITICAL if port is running a\n * multiple core FreeRTOS.\n */\n#if ( ( portCRITICAL_NESTING_IN_TCB == 1 ) || ( configNUMBER_OF_CORES > 1 ) )\n    void vTaskExitCritical( void );\n#endif\n\n/*\n * This function is only intended for use when implementing a port of the scheduler\n * and is only available when configNUMBER_OF_CORES is greater than 1. This function\n * should be used in the implementation of portENTER_CRITICAL_FROM_ISR if port is\n * running a multiple core FreeRTOS.\n */\n#if ( configNUMBER_OF_CORES > 1 )\n    UBaseType_t vTaskEnterCriticalFromISR( void );\n#endif\n\n/*\n * This function is only intended for use when implementing a port of the scheduler\n * and is only available when configNUMBER_OF_CORES is greater than 1. This function\n * should be used in the implementation of portEXIT_CRITICAL_FROM_ISR if port is\n * running a multiple core FreeRTOS.\n */\n#if ( configNUMBER_OF_CORES > 1 )\n    void vTaskExitCriticalFromISR( UBaseType_t uxSavedInterruptStatus );\n#endif\n\n#if ( portUSING_MPU_WRAPPERS == 1 )\n\n/*\n * For internal use only.  Get MPU settings associated with a task.\n */\n    xMPU_SETTINGS * xTaskGetMPUSettings( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\n\n#endif /* portUSING_MPU_WRAPPERS */\n\n\n#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) && ( configENABLE_ACCESS_CONTROL_LIST == 1 ) )\n\n/*\n * For internal use only.  Grant/Revoke a task's access to a kernel object.\n */\n    void vGrantAccessToKernelObject( TaskHandle_t xExternalTaskHandle,\n                                     int32_t lExternalKernelObjectHandle ) PRIVILEGED_FUNCTION;\n    void vRevokeAccessToKernelObject( TaskHandle_t xExternalTaskHandle,\n                                      int32_t lExternalKernelObjectHandle ) PRIVILEGED_FUNCTION;\n\n/*\n * For internal use only.  Grant/Revoke a task's access to a kernel object.\n */\n    void vPortGrantAccessToKernelObject( TaskHandle_t xInternalTaskHandle,\n                                         int32_t lInternalIndexOfKernelObject ) PRIVILEGED_FUNCTION;\n    void vPortRevokeAccessToKernelObject( TaskHandle_t xInternalTaskHandle,\n                                          int32_t lInternalIndexOfKernelObject ) PRIVILEGED_FUNCTION;\n\n#endif /* #if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configUSE_MPU_WRAPPERS_V1 == 0 ) && ( configENABLE_ACCESS_CONTROL_LIST == 1 ) ) */\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n    }\n#endif\n/* *INDENT-ON* */\n#endif /* INC_TASK_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/include/timers.h",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n\n#ifndef TIMERS_H\n#define TIMERS_H\n\n#ifndef INC_FREERTOS_H\n    #error \"include FreeRTOS.h must appear in source files before include timers.h\"\n#endif\n\n#include \"task.h\"\n\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n    extern \"C\" {\n#endif\n/* *INDENT-ON* */\n\n/*-----------------------------------------------------------\n* MACROS AND DEFINITIONS\n*----------------------------------------------------------*/\n\n/* IDs for commands that can be sent/received on the timer queue.  These are to\n * be used solely through the macros that make up the public software timer API,\n * as defined below.  The commands that are sent from interrupts must use the\n * highest numbers as tmrFIRST_FROM_ISR_COMMAND is used to determine if the task\n * or interrupt version of the queue send function should be used. */\n#define tmrCOMMAND_EXECUTE_CALLBACK_FROM_ISR    ( ( BaseType_t ) -2 )\n#define tmrCOMMAND_EXECUTE_CALLBACK             ( ( BaseType_t ) -1 )\n#define tmrCOMMAND_START_DONT_TRACE             ( ( BaseType_t ) 0 )\n#define tmrCOMMAND_START                        ( ( BaseType_t ) 1 )\n#define tmrCOMMAND_RESET                        ( ( BaseType_t ) 2 )\n#define tmrCOMMAND_STOP                         ( ( BaseType_t ) 3 )\n#define tmrCOMMAND_CHANGE_PERIOD                ( ( BaseType_t ) 4 )\n#define tmrCOMMAND_DELETE                       ( ( BaseType_t ) 5 )\n\n#define tmrFIRST_FROM_ISR_COMMAND               ( ( BaseType_t ) 6 )\n#define tmrCOMMAND_START_FROM_ISR               ( ( BaseType_t ) 6 )\n#define tmrCOMMAND_RESET_FROM_ISR               ( ( BaseType_t ) 7 )\n#define tmrCOMMAND_STOP_FROM_ISR                ( ( BaseType_t ) 8 )\n#define tmrCOMMAND_CHANGE_PERIOD_FROM_ISR       ( ( BaseType_t ) 9 )\n\n\n/**\n * Type by which software timers are referenced.  For example, a call to\n * xTimerCreate() returns an TimerHandle_t variable that can then be used to\n * reference the subject timer in calls to other software timer API functions\n * (for example, xTimerStart(), xTimerReset(), etc.).\n */\nstruct tmrTimerControl; /* The old naming convention is used to prevent breaking kernel aware debuggers. */\ntypedef struct tmrTimerControl * TimerHandle_t;\n\n/*\n * Defines the prototype to which timer callback functions must conform.\n */\ntypedef void (* TimerCallbackFunction_t)( TimerHandle_t xTimer );\n\n/*\n * Defines the prototype to which functions used with the\n * xTimerPendFunctionCallFromISR() function must conform.\n */\ntypedef void (* PendedFunction_t)( void * arg1,\n                                   uint32_t arg2 );\n\n/**\n * TimerHandle_t xTimerCreate(  const char * const pcTimerName,\n *                              TickType_t xTimerPeriodInTicks,\n *                              BaseType_t xAutoReload,\n *                              void * pvTimerID,\n *                              TimerCallbackFunction_t pxCallbackFunction );\n *\n * Creates a new software timer instance, and returns a handle by which the\n * created software timer can be referenced.\n *\n * Internally, within the FreeRTOS implementation, software timers use a block\n * of memory, in which the timer data structure is stored.  If a software timer\n * is created using xTimerCreate() then the required memory is automatically\n * dynamically allocated inside the xTimerCreate() function.  (see\n * https://www.FreeRTOS.org/a00111.html).  If a software timer is created using\n * xTimerCreateStatic() then the application writer must provide the memory that\n * will get used by the software timer.  xTimerCreateStatic() therefore allows a\n * software timer to be created without using any dynamic memory allocation.\n *\n * Timers are created in the dormant state.  The xTimerStart(), xTimerReset(),\n * xTimerStartFromISR(), xTimerResetFromISR(), xTimerChangePeriod() and\n * xTimerChangePeriodFromISR() API functions can all be used to transition a\n * timer into the active state.\n *\n * @param pcTimerName A text name that is assigned to the timer.  This is done\n * purely to assist debugging.  The kernel itself only ever references a timer\n * by its handle, and never by its name.\n *\n * @param xTimerPeriodInTicks The timer period.  The time is defined in tick\n * periods so the constant portTICK_PERIOD_MS can be used to convert a time that\n * has been specified in milliseconds.  For example, if the timer must expire\n * after 100 ticks, then xTimerPeriodInTicks should be set to 100.\n * Alternatively, if the timer must expire after 500ms, then xPeriod can be set\n * to ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than or\n * equal to 1000.  Time timer period must be greater than 0.\n *\n * @param xAutoReload If xAutoReload is set to pdTRUE then the timer will\n * expire repeatedly with a frequency set by the xTimerPeriodInTicks parameter.\n * If xAutoReload is set to pdFALSE then the timer will be a one-shot timer and\n * enter the dormant state after it expires.\n *\n * @param pvTimerID An identifier that is assigned to the timer being created.\n * Typically this would be used in the timer callback function to identify which\n * timer expired when the same callback function is assigned to more than one\n * timer.\n *\n * @param pxCallbackFunction The function to call when the timer expires.\n * Callback functions must have the prototype defined by TimerCallbackFunction_t,\n * which is \"void vCallbackFunction( TimerHandle_t xTimer );\".\n *\n * @return If the timer is successfully created then a handle to the newly\n * created timer is returned.  If the timer cannot be created because there is\n * insufficient FreeRTOS heap remaining to allocate the timer\n * structures then NULL is returned.\n *\n * Example usage:\n * @verbatim\n * #define NUM_TIMERS 5\n *\n * // An array to hold handles to the created timers.\n * TimerHandle_t xTimers[ NUM_TIMERS ];\n *\n * // An array to hold a count of the number of times each timer expires.\n * int32_t lExpireCounters[ NUM_TIMERS ] = { 0 };\n *\n * // Define a callback function that will be used by multiple timer instances.\n * // The callback function does nothing but count the number of times the\n * // associated timer expires, and stop the timer once the timer has expired\n * // 10 times.\n * void vTimerCallback( TimerHandle_t pxTimer )\n * {\n * int32_t lArrayIndex;\n * const int32_t xMaxExpiryCountBeforeStopping = 10;\n *\n *     // Optionally do something if the pxTimer parameter is NULL.\n *     configASSERT( pxTimer );\n *\n *     // Which timer expired?\n *     lArrayIndex = ( int32_t ) pvTimerGetTimerID( pxTimer );\n *\n *     // Increment the number of times that pxTimer has expired.\n *     lExpireCounters[ lArrayIndex ] += 1;\n *\n *     // If the timer has expired 10 times then stop it from running.\n *     if( lExpireCounters[ lArrayIndex ] == xMaxExpiryCountBeforeStopping )\n *     {\n *         // Do not use a block time if calling a timer API function from a\n *         // timer callback function, as doing so could cause a deadlock!\n *         xTimerStop( pxTimer, 0 );\n *     }\n * }\n *\n * void main( void )\n * {\n * int32_t x;\n *\n *     // Create then start some timers.  Starting the timers before the scheduler\n *     // has been started means the timers will start running immediately that\n *     // the scheduler starts.\n *     for( x = 0; x < NUM_TIMERS; x++ )\n *     {\n *         xTimers[ x ] = xTimerCreate(    \"Timer\",             // Just a text name, not used by the kernel.\n *                                         ( 100 * ( x + 1 ) ), // The timer period in ticks.\n *                                         pdTRUE,              // The timers will auto-reload themselves when they expire.\n *                                         ( void * ) x,        // Assign each timer a unique id equal to its array index.\n *                                         vTimerCallback       // Each timer calls the same callback when it expires.\n *                                     );\n *\n *         if( xTimers[ x ] == NULL )\n *         {\n *             // The timer was not created.\n *         }\n *         else\n *         {\n *             // Start the timer.  No block time is specified, and even if one was\n *             // it would be ignored because the scheduler has not yet been\n *             // started.\n *             if( xTimerStart( xTimers[ x ], 0 ) != pdPASS )\n *             {\n *                 // The timer could not be set into the Active state.\n *             }\n *         }\n *     }\n *\n *     // ...\n *     // Create tasks here.\n *     // ...\n *\n *     // Starting the scheduler will start the timers running as they have already\n *     // been set into the active state.\n *     vTaskStartScheduler();\n *\n *     // Should not reach here.\n *     for( ;; );\n * }\n * @endverbatim\n */\n#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n    TimerHandle_t xTimerCreate( const char * const pcTimerName,\n                                const TickType_t xTimerPeriodInTicks,\n                                const BaseType_t xAutoReload,\n                                void * const pvTimerID,\n                                TimerCallbackFunction_t pxCallbackFunction ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * TimerHandle_t xTimerCreateStatic(const char * const pcTimerName,\n *                                  TickType_t xTimerPeriodInTicks,\n *                                  BaseType_t xAutoReload,\n *                                  void * pvTimerID,\n *                                  TimerCallbackFunction_t pxCallbackFunction,\n *                                  StaticTimer_t *pxTimerBuffer );\n *\n * Creates a new software timer instance, and returns a handle by which the\n * created software timer can be referenced.\n *\n * Internally, within the FreeRTOS implementation, software timers use a block\n * of memory, in which the timer data structure is stored.  If a software timer\n * is created using xTimerCreate() then the required memory is automatically\n * dynamically allocated inside the xTimerCreate() function.  (see\n * https://www.FreeRTOS.org/a00111.html).  If a software timer is created using\n * xTimerCreateStatic() then the application writer must provide the memory that\n * will get used by the software timer.  xTimerCreateStatic() therefore allows a\n * software timer to be created without using any dynamic memory allocation.\n *\n * Timers are created in the dormant state.  The xTimerStart(), xTimerReset(),\n * xTimerStartFromISR(), xTimerResetFromISR(), xTimerChangePeriod() and\n * xTimerChangePeriodFromISR() API functions can all be used to transition a\n * timer into the active state.\n *\n * @param pcTimerName A text name that is assigned to the timer.  This is done\n * purely to assist debugging.  The kernel itself only ever references a timer\n * by its handle, and never by its name.\n *\n * @param xTimerPeriodInTicks The timer period.  The time is defined in tick\n * periods so the constant portTICK_PERIOD_MS can be used to convert a time that\n * has been specified in milliseconds.  For example, if the timer must expire\n * after 100 ticks, then xTimerPeriodInTicks should be set to 100.\n * Alternatively, if the timer must expire after 500ms, then xPeriod can be set\n * to ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than or\n * equal to 1000.  The timer period must be greater than 0.\n *\n * @param xAutoReload If xAutoReload is set to pdTRUE then the timer will\n * expire repeatedly with a frequency set by the xTimerPeriodInTicks parameter.\n * If xAutoReload is set to pdFALSE then the timer will be a one-shot timer and\n * enter the dormant state after it expires.\n *\n * @param pvTimerID An identifier that is assigned to the timer being created.\n * Typically this would be used in the timer callback function to identify which\n * timer expired when the same callback function is assigned to more than one\n * timer.\n *\n * @param pxCallbackFunction The function to call when the timer expires.\n * Callback functions must have the prototype defined by TimerCallbackFunction_t,\n * which is \"void vCallbackFunction( TimerHandle_t xTimer );\".\n *\n * @param pxTimerBuffer Must point to a variable of type StaticTimer_t, which\n * will be then be used to hold the software timer's data structures, removing\n * the need for the memory to be allocated dynamically.\n *\n * @return If the timer is created then a handle to the created timer is\n * returned.  If pxTimerBuffer was NULL then NULL is returned.\n *\n * Example usage:\n * @verbatim\n *\n * // The buffer used to hold the software timer's data structure.\n * static StaticTimer_t xTimerBuffer;\n *\n * // A variable that will be incremented by the software timer's callback\n * // function.\n * UBaseType_t uxVariableToIncrement = 0;\n *\n * // A software timer callback function that increments a variable passed to\n * // it when the software timer was created.  After the 5th increment the\n * // callback function stops the software timer.\n * static void prvTimerCallback( TimerHandle_t xExpiredTimer )\n * {\n * UBaseType_t *puxVariableToIncrement;\n * BaseType_t xReturned;\n *\n *     // Obtain the address of the variable to increment from the timer ID.\n *     puxVariableToIncrement = ( UBaseType_t * ) pvTimerGetTimerID( xExpiredTimer );\n *\n *     // Increment the variable to show the timer callback has executed.\n *     ( *puxVariableToIncrement )++;\n *\n *     // If this callback has executed the required number of times, stop the\n *     // timer.\n *     if( *puxVariableToIncrement == 5 )\n *     {\n *         // This is called from a timer callback so must not block.\n *         xTimerStop( xExpiredTimer, staticDONT_BLOCK );\n *     }\n * }\n *\n *\n * void main( void )\n * {\n *     // Create the software time.  xTimerCreateStatic() has an extra parameter\n *     // than the normal xTimerCreate() API function.  The parameter is a pointer\n *     // to the StaticTimer_t structure that will hold the software timer\n *     // structure.  If the parameter is passed as NULL then the structure will be\n *     // allocated dynamically, just as if xTimerCreate() had been called.\n *     xTimer = xTimerCreateStatic( \"T1\",             // Text name for the task.  Helps debugging only.  Not used by FreeRTOS.\n *                                  xTimerPeriod,     // The period of the timer in ticks.\n *                                  pdTRUE,           // This is an auto-reload timer.\n *                                  ( void * ) &uxVariableToIncrement,    // A variable incremented by the software timer's callback function\n *                                  prvTimerCallback, // The function to execute when the timer expires.\n *                                  &xTimerBuffer );  // The buffer that will hold the software timer structure.\n *\n *     // The scheduler has not started yet so a block time is not used.\n *     xReturned = xTimerStart( xTimer, 0 );\n *\n *     // ...\n *     // Create tasks here.\n *     // ...\n *\n *     // Starting the scheduler will start the timers running as they have already\n *     // been set into the active state.\n *     vTaskStartScheduler();\n *\n *     // Should not reach here.\n *     for( ;; );\n * }\n * @endverbatim\n */\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    TimerHandle_t xTimerCreateStatic( const char * const pcTimerName,\n                                      const TickType_t xTimerPeriodInTicks,\n                                      const BaseType_t xAutoReload,\n                                      void * const pvTimerID,\n                                      TimerCallbackFunction_t pxCallbackFunction,\n                                      StaticTimer_t * pxTimerBuffer ) PRIVILEGED_FUNCTION;\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n\n/**\n * void *pvTimerGetTimerID( TimerHandle_t xTimer );\n *\n * Returns the ID assigned to the timer.\n *\n * IDs are assigned to timers using the pvTimerID parameter of the call to\n * xTimerCreated() that was used to create the timer, and by calling the\n * vTimerSetTimerID() API function.\n *\n * If the same callback function is assigned to multiple timers then the timer\n * ID can be used as time specific (timer local) storage.\n *\n * @param xTimer The timer being queried.\n *\n * @return The ID assigned to the timer being queried.\n *\n * Example usage:\n *\n * See the xTimerCreate() API function example usage scenario.\n */\nvoid * pvTimerGetTimerID( const TimerHandle_t xTimer ) PRIVILEGED_FUNCTION;\n\n/**\n * void vTimerSetTimerID( TimerHandle_t xTimer, void *pvNewID );\n *\n * Sets the ID assigned to the timer.\n *\n * IDs are assigned to timers using the pvTimerID parameter of the call to\n * xTimerCreated() that was used to create the timer.\n *\n * If the same callback function is assigned to multiple timers then the timer\n * ID can be used as time specific (timer local) storage.\n *\n * @param xTimer The timer being updated.\n *\n * @param pvNewID The ID to assign to the timer.\n *\n * Example usage:\n *\n * See the xTimerCreate() API function example usage scenario.\n */\nvoid vTimerSetTimerID( TimerHandle_t xTimer,\n                       void * pvNewID ) PRIVILEGED_FUNCTION;\n\n/**\n * BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer );\n *\n * Queries a timer to see if it is active or dormant.\n *\n * A timer will be dormant if:\n *     1) It has been created but not started, or\n *     2) It is an expired one-shot timer that has not been restarted.\n *\n * Timers are created in the dormant state.  The xTimerStart(), xTimerReset(),\n * xTimerStartFromISR(), xTimerResetFromISR(), xTimerChangePeriod() and\n * xTimerChangePeriodFromISR() API functions can all be used to transition a timer into the\n * active state.\n *\n * @param xTimer The timer being queried.\n *\n * @return pdFALSE will be returned if the timer is dormant.  A value other than\n * pdFALSE will be returned if the timer is active.\n *\n * Example usage:\n * @verbatim\n * // This function assumes xTimer has already been created.\n * void vAFunction( TimerHandle_t xTimer )\n * {\n *     if( xTimerIsTimerActive( xTimer ) != pdFALSE ) // or more simply and equivalently \"if( xTimerIsTimerActive( xTimer ) )\"\n *     {\n *         // xTimer is active, do something.\n *     }\n *     else\n *     {\n *         // xTimer is not active, do something else.\n *     }\n * }\n * @endverbatim\n */\nBaseType_t xTimerIsTimerActive( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION;\n\n/**\n * TaskHandle_t xTimerGetTimerDaemonTaskHandle( void );\n *\n * Simply returns the handle of the timer service/daemon task.  It it not valid\n * to call xTimerGetTimerDaemonTaskHandle() before the scheduler has been started.\n */\nTaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION;\n\n/**\n * BaseType_t xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait );\n *\n * Timer functionality is provided by a timer service/daemon task.  Many of the\n * public FreeRTOS timer API functions send commands to the timer service task\n * through a queue called the timer command queue.  The timer command queue is\n * private to the kernel itself and is not directly accessible to application\n * code.  The length of the timer command queue is set by the\n * configTIMER_QUEUE_LENGTH configuration constant.\n *\n * xTimerStart() starts a timer that was previously created using the\n * xTimerCreate() API function.  If the timer had already been started and was\n * already in the active state, then xTimerStart() has equivalent functionality\n * to the xTimerReset() API function.\n *\n * Starting a timer ensures the timer is in the active state.  If the timer\n * is not stopped, deleted, or reset in the mean time, the callback function\n * associated with the timer will get called 'n' ticks after xTimerStart() was\n * called, where 'n' is the timers defined period.\n *\n * It is valid to call xTimerStart() before the scheduler has been started, but\n * when this is done the timer will not actually start until the scheduler is\n * started, and the timers expiry time will be relative to when the scheduler is\n * started, not relative to when xTimerStart() was called.\n *\n * The configUSE_TIMERS configuration constant must be set to 1 for xTimerStart()\n * to be available.\n *\n * @param xTimer The handle of the timer being started/restarted.\n *\n * @param xTicksToWait Specifies the time, in ticks, that the calling task should\n * be held in the Blocked state to wait for the start command to be successfully\n * sent to the timer command queue, should the queue already be full when\n * xTimerStart() was called.  xTicksToWait is ignored if xTimerStart() is called\n * before the scheduler is started.\n *\n * @return pdFAIL will be returned if the start command could not be sent to\n * the timer command queue even after xTicksToWait ticks had passed.  pdPASS will\n * be returned if the command was successfully sent to the timer command queue.\n * When the command is actually processed will depend on the priority of the\n * timer service/daemon task relative to other tasks in the system, although the\n * timers expiry time is relative to when xTimerStart() is actually called.  The\n * timer service/daemon task priority is set by the configTIMER_TASK_PRIORITY\n * configuration constant.\n *\n * Example usage:\n *\n * See the xTimerCreate() API function example usage scenario.\n *\n */\n#define xTimerStart( xTimer, xTicksToWait ) \\\n    xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START, ( xTaskGetTickCount() ), NULL, ( xTicksToWait ) )\n\n/**\n * BaseType_t xTimerStop( TimerHandle_t xTimer, TickType_t xTicksToWait );\n *\n * Timer functionality is provided by a timer service/daemon task.  Many of the\n * public FreeRTOS timer API functions send commands to the timer service task\n * through a queue called the timer command queue.  The timer command queue is\n * private to the kernel itself and is not directly accessible to application\n * code.  The length of the timer command queue is set by the\n * configTIMER_QUEUE_LENGTH configuration constant.\n *\n * xTimerStop() stops a timer that was previously started using either of the\n * The xTimerStart(), xTimerReset(), xTimerStartFromISR(), xTimerResetFromISR(),\n * xTimerChangePeriod() or xTimerChangePeriodFromISR() API functions.\n *\n * Stopping a timer ensures the timer is not in the active state.\n *\n * The configUSE_TIMERS configuration constant must be set to 1 for xTimerStop()\n * to be available.\n *\n * @param xTimer The handle of the timer being stopped.\n *\n * @param xTicksToWait Specifies the time, in ticks, that the calling task should\n * be held in the Blocked state to wait for the stop command to be successfully\n * sent to the timer command queue, should the queue already be full when\n * xTimerStop() was called.  xTicksToWait is ignored if xTimerStop() is called\n * before the scheduler is started.\n *\n * @return pdFAIL will be returned if the stop command could not be sent to\n * the timer command queue even after xTicksToWait ticks had passed.  pdPASS will\n * be returned if the command was successfully sent to the timer command queue.\n * When the command is actually processed will depend on the priority of the\n * timer service/daemon task relative to other tasks in the system.  The timer\n * service/daemon task priority is set by the configTIMER_TASK_PRIORITY\n * configuration constant.\n *\n * Example usage:\n *\n * See the xTimerCreate() API function example usage scenario.\n *\n */\n#define xTimerStop( xTimer, xTicksToWait ) \\\n    xTimerGenericCommand( ( xTimer ), tmrCOMMAND_STOP, 0U, NULL, ( xTicksToWait ) )\n\n/**\n * BaseType_t xTimerChangePeriod(   TimerHandle_t xTimer,\n *                                  TickType_t xNewPeriod,\n *                                  TickType_t xTicksToWait );\n *\n * Timer functionality is provided by a timer service/daemon task.  Many of the\n * public FreeRTOS timer API functions send commands to the timer service task\n * through a queue called the timer command queue.  The timer command queue is\n * private to the kernel itself and is not directly accessible to application\n * code.  The length of the timer command queue is set by the\n * configTIMER_QUEUE_LENGTH configuration constant.\n *\n * xTimerChangePeriod() changes the period of a timer that was previously\n * created using the xTimerCreate() API function.\n *\n * xTimerChangePeriod() can be called to change the period of an active or\n * dormant state timer.\n *\n * The configUSE_TIMERS configuration constant must be set to 1 for\n * xTimerChangePeriod() to be available.\n *\n * @param xTimer The handle of the timer that is having its period changed.\n *\n * @param xNewPeriod The new period for xTimer. Timer periods are specified in\n * tick periods, so the constant portTICK_PERIOD_MS can be used to convert a time\n * that has been specified in milliseconds.  For example, if the timer must\n * expire after 100 ticks, then xNewPeriod should be set to 100.  Alternatively,\n * if the timer must expire after 500ms, then xNewPeriod can be set to\n * ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than\n * or equal to 1000.\n *\n * @param xTicksToWait Specifies the time, in ticks, that the calling task should\n * be held in the Blocked state to wait for the change period command to be\n * successfully sent to the timer command queue, should the queue already be\n * full when xTimerChangePeriod() was called.  xTicksToWait is ignored if\n * xTimerChangePeriod() is called before the scheduler is started.\n *\n * @return pdFAIL will be returned if the change period command could not be\n * sent to the timer command queue even after xTicksToWait ticks had passed.\n * pdPASS will be returned if the command was successfully sent to the timer\n * command queue.  When the command is actually processed will depend on the\n * priority of the timer service/daemon task relative to other tasks in the\n * system.  The timer service/daemon task priority is set by the\n * configTIMER_TASK_PRIORITY configuration constant.\n *\n * Example usage:\n * @verbatim\n * // This function assumes xTimer has already been created.  If the timer\n * // referenced by xTimer is already active when it is called, then the timer\n * // is deleted.  If the timer referenced by xTimer is not active when it is\n * // called, then the period of the timer is set to 500ms and the timer is\n * // started.\n * void vAFunction( TimerHandle_t xTimer )\n * {\n *     if( xTimerIsTimerActive( xTimer ) != pdFALSE ) // or more simply and equivalently \"if( xTimerIsTimerActive( xTimer ) )\"\n *     {\n *         // xTimer is already active - delete it.\n *         xTimerDelete( xTimer );\n *     }\n *     else\n *     {\n *         // xTimer is not active, change its period to 500ms.  This will also\n *         // cause the timer to start.  Block for a maximum of 100 ticks if the\n *         // change period command cannot immediately be sent to the timer\n *         // command queue.\n *         if( xTimerChangePeriod( xTimer, 500 / portTICK_PERIOD_MS, 100 ) == pdPASS )\n *         {\n *             // The command was successfully sent.\n *         }\n *         else\n *         {\n *             // The command could not be sent, even after waiting for 100 ticks\n *             // to pass.  Take appropriate action here.\n *         }\n *     }\n * }\n * @endverbatim\n */\n#define xTimerChangePeriod( xTimer, xNewPeriod, xTicksToWait ) \\\n    xTimerGenericCommand( ( xTimer ), tmrCOMMAND_CHANGE_PERIOD, ( xNewPeriod ), NULL, ( xTicksToWait ) )\n\n/**\n * BaseType_t xTimerDelete( TimerHandle_t xTimer, TickType_t xTicksToWait );\n *\n * Timer functionality is provided by a timer service/daemon task.  Many of the\n * public FreeRTOS timer API functions send commands to the timer service task\n * through a queue called the timer command queue.  The timer command queue is\n * private to the kernel itself and is not directly accessible to application\n * code.  The length of the timer command queue is set by the\n * configTIMER_QUEUE_LENGTH configuration constant.\n *\n * xTimerDelete() deletes a timer that was previously created using the\n * xTimerCreate() API function.\n *\n * The configUSE_TIMERS configuration constant must be set to 1 for\n * xTimerDelete() to be available.\n *\n * @param xTimer The handle of the timer being deleted.\n *\n * @param xTicksToWait Specifies the time, in ticks, that the calling task should\n * be held in the Blocked state to wait for the delete command to be\n * successfully sent to the timer command queue, should the queue already be\n * full when xTimerDelete() was called.  xTicksToWait is ignored if xTimerDelete()\n * is called before the scheduler is started.\n *\n * @return pdFAIL will be returned if the delete command could not be sent to\n * the timer command queue even after xTicksToWait ticks had passed.  pdPASS will\n * be returned if the command was successfully sent to the timer command queue.\n * When the command is actually processed will depend on the priority of the\n * timer service/daemon task relative to other tasks in the system.  The timer\n * service/daemon task priority is set by the configTIMER_TASK_PRIORITY\n * configuration constant.\n *\n * Example usage:\n *\n * See the xTimerChangePeriod() API function example usage scenario.\n */\n#define xTimerDelete( xTimer, xTicksToWait ) \\\n    xTimerGenericCommand( ( xTimer ), tmrCOMMAND_DELETE, 0U, NULL, ( xTicksToWait ) )\n\n/**\n * BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait );\n *\n * Timer functionality is provided by a timer service/daemon task.  Many of the\n * public FreeRTOS timer API functions send commands to the timer service task\n * through a queue called the timer command queue.  The timer command queue is\n * private to the kernel itself and is not directly accessible to application\n * code.  The length of the timer command queue is set by the\n * configTIMER_QUEUE_LENGTH configuration constant.\n *\n * xTimerReset() re-starts a timer that was previously created using the\n * xTimerCreate() API function.  If the timer had already been started and was\n * already in the active state, then xTimerReset() will cause the timer to\n * re-evaluate its expiry time so that it is relative to when xTimerReset() was\n * called.  If the timer was in the dormant state then xTimerReset() has\n * equivalent functionality to the xTimerStart() API function.\n *\n * Resetting a timer ensures the timer is in the active state.  If the timer\n * is not stopped, deleted, or reset in the mean time, the callback function\n * associated with the timer will get called 'n' ticks after xTimerReset() was\n * called, where 'n' is the timers defined period.\n *\n * It is valid to call xTimerReset() before the scheduler has been started, but\n * when this is done the timer will not actually start until the scheduler is\n * started, and the timers expiry time will be relative to when the scheduler is\n * started, not relative to when xTimerReset() was called.\n *\n * The configUSE_TIMERS configuration constant must be set to 1 for xTimerReset()\n * to be available.\n *\n * @param xTimer The handle of the timer being reset/started/restarted.\n *\n * @param xTicksToWait Specifies the time, in ticks, that the calling task should\n * be held in the Blocked state to wait for the reset command to be successfully\n * sent to the timer command queue, should the queue already be full when\n * xTimerReset() was called.  xTicksToWait is ignored if xTimerReset() is called\n * before the scheduler is started.\n *\n * @return pdFAIL will be returned if the reset command could not be sent to\n * the timer command queue even after xTicksToWait ticks had passed.  pdPASS will\n * be returned if the command was successfully sent to the timer command queue.\n * When the command is actually processed will depend on the priority of the\n * timer service/daemon task relative to other tasks in the system, although the\n * timers expiry time is relative to when xTimerStart() is actually called.  The\n * timer service/daemon task priority is set by the configTIMER_TASK_PRIORITY\n * configuration constant.\n *\n * Example usage:\n * @verbatim\n * // When a key is pressed, an LCD back-light is switched on.  If 5 seconds pass\n * // without a key being pressed, then the LCD back-light is switched off.  In\n * // this case, the timer is a one-shot timer.\n *\n * TimerHandle_t xBacklightTimer = NULL;\n *\n * // The callback function assigned to the one-shot timer.  In this case the\n * // parameter is not used.\n * void vBacklightTimerCallback( TimerHandle_t pxTimer )\n * {\n *     // The timer expired, therefore 5 seconds must have passed since a key\n *     // was pressed.  Switch off the LCD back-light.\n *     vSetBacklightState( BACKLIGHT_OFF );\n * }\n *\n * // The key press event handler.\n * void vKeyPressEventHandler( char cKey )\n * {\n *     // Ensure the LCD back-light is on, then reset the timer that is\n *     // responsible for turning the back-light off after 5 seconds of\n *     // key inactivity.  Wait 10 ticks for the command to be successfully sent\n *     // if it cannot be sent immediately.\n *     vSetBacklightState( BACKLIGHT_ON );\n *     if( xTimerReset( xBacklightTimer, 100 ) != pdPASS )\n *     {\n *         // The reset command was not executed successfully.  Take appropriate\n *         // action here.\n *     }\n *\n *     // Perform the rest of the key processing here.\n * }\n *\n * void main( void )\n * {\n * int32_t x;\n *\n *     // Create then start the one-shot timer that is responsible for turning\n *     // the back-light off if no keys are pressed within a 5 second period.\n *     xBacklightTimer = xTimerCreate( \"BacklightTimer\",           // Just a text name, not used by the kernel.\n *                                     ( 5000 / portTICK_PERIOD_MS), // The timer period in ticks.\n *                                     pdFALSE,                    // The timer is a one-shot timer.\n *                                     0,                          // The id is not used by the callback so can take any value.\n *                                     vBacklightTimerCallback     // The callback function that switches the LCD back-light off.\n *                                   );\n *\n *     if( xBacklightTimer == NULL )\n *     {\n *         // The timer was not created.\n *     }\n *     else\n *     {\n *         // Start the timer.  No block time is specified, and even if one was\n *         // it would be ignored because the scheduler has not yet been\n *         // started.\n *         if( xTimerStart( xBacklightTimer, 0 ) != pdPASS )\n *         {\n *             // The timer could not be set into the Active state.\n *         }\n *     }\n *\n *     // ...\n *     // Create tasks here.\n *     // ...\n *\n *     // Starting the scheduler will start the timer running as it has already\n *     // been set into the active state.\n *     vTaskStartScheduler();\n *\n *     // Should not reach here.\n *     for( ;; );\n * }\n * @endverbatim\n */\n#define xTimerReset( xTimer, xTicksToWait ) \\\n    xTimerGenericCommand( ( xTimer ), tmrCOMMAND_RESET, ( xTaskGetTickCount() ), NULL, ( xTicksToWait ) )\n\n/**\n * BaseType_t xTimerStartFromISR(   TimerHandle_t xTimer,\n *                                  BaseType_t *pxHigherPriorityTaskWoken );\n *\n * A version of xTimerStart() that can be called from an interrupt service\n * routine.\n *\n * @param xTimer The handle of the timer being started/restarted.\n *\n * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most\n * of its time in the Blocked state, waiting for messages to arrive on the timer\n * command queue.  Calling xTimerStartFromISR() writes a message to the timer\n * command queue, so has the potential to transition the timer service/daemon\n * task out of the Blocked state.  If calling xTimerStartFromISR() causes the\n * timer service/daemon task to leave the Blocked state, and the timer service/\n * daemon task has a priority equal to or greater than the currently executing\n * task (the task that was interrupted), then *pxHigherPriorityTaskWoken will\n * get set to pdTRUE internally within the xTimerStartFromISR() function.  If\n * xTimerStartFromISR() sets this value to pdTRUE then a context switch should\n * be performed before the interrupt exits.\n *\n * @return pdFAIL will be returned if the start command could not be sent to\n * the timer command queue.  pdPASS will be returned if the command was\n * successfully sent to the timer command queue.  When the command is actually\n * processed will depend on the priority of the timer service/daemon task\n * relative to other tasks in the system, although the timers expiry time is\n * relative to when xTimerStartFromISR() is actually called.  The timer\n * service/daemon task priority is set by the configTIMER_TASK_PRIORITY\n * configuration constant.\n *\n * Example usage:\n * @verbatim\n * // This scenario assumes xBacklightTimer has already been created.  When a\n * // key is pressed, an LCD back-light is switched on.  If 5 seconds pass\n * // without a key being pressed, then the LCD back-light is switched off.  In\n * // this case, the timer is a one-shot timer, and unlike the example given for\n * // the xTimerReset() function, the key press event handler is an interrupt\n * // service routine.\n *\n * // The callback function assigned to the one-shot timer.  In this case the\n * // parameter is not used.\n * void vBacklightTimerCallback( TimerHandle_t pxTimer )\n * {\n *     // The timer expired, therefore 5 seconds must have passed since a key\n *     // was pressed.  Switch off the LCD back-light.\n *     vSetBacklightState( BACKLIGHT_OFF );\n * }\n *\n * // The key press interrupt service routine.\n * void vKeyPressEventInterruptHandler( void )\n * {\n * BaseType_t xHigherPriorityTaskWoken = pdFALSE;\n *\n *     // Ensure the LCD back-light is on, then restart the timer that is\n *     // responsible for turning the back-light off after 5 seconds of\n *     // key inactivity.  This is an interrupt service routine so can only\n *     // call FreeRTOS API functions that end in \"FromISR\".\n *     vSetBacklightState( BACKLIGHT_ON );\n *\n *     // xTimerStartFromISR() or xTimerResetFromISR() could be called here\n *     // as both cause the timer to re-calculate its expiry time.\n *     // xHigherPriorityTaskWoken was initialised to pdFALSE when it was\n *     // declared (in this function).\n *     if( xTimerStartFromISR( xBacklightTimer, &xHigherPriorityTaskWoken ) != pdPASS )\n *     {\n *         // The start command was not executed successfully.  Take appropriate\n *         // action here.\n *     }\n *\n *     // Perform the rest of the key processing here.\n *\n *     // If xHigherPriorityTaskWoken equals pdTRUE, then a context switch\n *     // should be performed.  The syntax required to perform a context switch\n *     // from inside an ISR varies from port to port, and from compiler to\n *     // compiler.  Inspect the demos for the port you are using to find the\n *     // actual syntax required.\n *     if( xHigherPriorityTaskWoken != pdFALSE )\n *     {\n *         // Call the interrupt safe yield function here (actual function\n *         // depends on the FreeRTOS port being used).\n *     }\n * }\n * @endverbatim\n */\n#define xTimerStartFromISR( xTimer, pxHigherPriorityTaskWoken ) \\\n    xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START_FROM_ISR, ( xTaskGetTickCountFromISR() ), ( pxHigherPriorityTaskWoken ), 0U )\n\n/**\n * BaseType_t xTimerStopFromISR(    TimerHandle_t xTimer,\n *                                  BaseType_t *pxHigherPriorityTaskWoken );\n *\n * A version of xTimerStop() that can be called from an interrupt service\n * routine.\n *\n * @param xTimer The handle of the timer being stopped.\n *\n * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most\n * of its time in the Blocked state, waiting for messages to arrive on the timer\n * command queue.  Calling xTimerStopFromISR() writes a message to the timer\n * command queue, so has the potential to transition the timer service/daemon\n * task out of the Blocked state.  If calling xTimerStopFromISR() causes the\n * timer service/daemon task to leave the Blocked state, and the timer service/\n * daemon task has a priority equal to or greater than the currently executing\n * task (the task that was interrupted), then *pxHigherPriorityTaskWoken will\n * get set to pdTRUE internally within the xTimerStopFromISR() function.  If\n * xTimerStopFromISR() sets this value to pdTRUE then a context switch should\n * be performed before the interrupt exits.\n *\n * @return pdFAIL will be returned if the stop command could not be sent to\n * the timer command queue.  pdPASS will be returned if the command was\n * successfully sent to the timer command queue.  When the command is actually\n * processed will depend on the priority of the timer service/daemon task\n * relative to other tasks in the system.  The timer service/daemon task\n * priority is set by the configTIMER_TASK_PRIORITY configuration constant.\n *\n * Example usage:\n * @verbatim\n * // This scenario assumes xTimer has already been created and started.  When\n * // an interrupt occurs, the timer should be simply stopped.\n *\n * // The interrupt service routine that stops the timer.\n * void vAnExampleInterruptServiceRoutine( void )\n * {\n * BaseType_t xHigherPriorityTaskWoken = pdFALSE;\n *\n *     // The interrupt has occurred - simply stop the timer.\n *     // xHigherPriorityTaskWoken was set to pdFALSE where it was defined\n *     // (within this function).  As this is an interrupt service routine, only\n *     // FreeRTOS API functions that end in \"FromISR\" can be used.\n *     if( xTimerStopFromISR( xTimer, &xHigherPriorityTaskWoken ) != pdPASS )\n *     {\n *         // The stop command was not executed successfully.  Take appropriate\n *         // action here.\n *     }\n *\n *     // If xHigherPriorityTaskWoken equals pdTRUE, then a context switch\n *     // should be performed.  The syntax required to perform a context switch\n *     // from inside an ISR varies from port to port, and from compiler to\n *     // compiler.  Inspect the demos for the port you are using to find the\n *     // actual syntax required.\n *     if( xHigherPriorityTaskWoken != pdFALSE )\n *     {\n *         // Call the interrupt safe yield function here (actual function\n *         // depends on the FreeRTOS port being used).\n *     }\n * }\n * @endverbatim\n */\n#define xTimerStopFromISR( xTimer, pxHigherPriorityTaskWoken ) \\\n    xTimerGenericCommand( ( xTimer ), tmrCOMMAND_STOP_FROM_ISR, 0, ( pxHigherPriorityTaskWoken ), 0U )\n\n/**\n * BaseType_t xTimerChangePeriodFromISR( TimerHandle_t xTimer,\n *                                       TickType_t xNewPeriod,\n *                                       BaseType_t *pxHigherPriorityTaskWoken );\n *\n * A version of xTimerChangePeriod() that can be called from an interrupt\n * service routine.\n *\n * @param xTimer The handle of the timer that is having its period changed.\n *\n * @param xNewPeriod The new period for xTimer. Timer periods are specified in\n * tick periods, so the constant portTICK_PERIOD_MS can be used to convert a time\n * that has been specified in milliseconds.  For example, if the timer must\n * expire after 100 ticks, then xNewPeriod should be set to 100.  Alternatively,\n * if the timer must expire after 500ms, then xNewPeriod can be set to\n * ( 500 / portTICK_PERIOD_MS ) provided configTICK_RATE_HZ is less than\n * or equal to 1000.\n *\n * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most\n * of its time in the Blocked state, waiting for messages to arrive on the timer\n * command queue.  Calling xTimerChangePeriodFromISR() writes a message to the\n * timer command queue, so has the potential to transition the timer service/\n * daemon task out of the Blocked state.  If calling xTimerChangePeriodFromISR()\n * causes the timer service/daemon task to leave the Blocked state, and the\n * timer service/daemon task has a priority equal to or greater than the\n * currently executing task (the task that was interrupted), then\n * *pxHigherPriorityTaskWoken will get set to pdTRUE internally within the\n * xTimerChangePeriodFromISR() function.  If xTimerChangePeriodFromISR() sets\n * this value to pdTRUE then a context switch should be performed before the\n * interrupt exits.\n *\n * @return pdFAIL will be returned if the command to change the timers period\n * could not be sent to the timer command queue.  pdPASS will be returned if the\n * command was successfully sent to the timer command queue.  When the command\n * is actually processed will depend on the priority of the timer service/daemon\n * task relative to other tasks in the system.  The timer service/daemon task\n * priority is set by the configTIMER_TASK_PRIORITY configuration constant.\n *\n * Example usage:\n * @verbatim\n * // This scenario assumes xTimer has already been created and started.  When\n * // an interrupt occurs, the period of xTimer should be changed to 500ms.\n *\n * // The interrupt service routine that changes the period of xTimer.\n * void vAnExampleInterruptServiceRoutine( void )\n * {\n * BaseType_t xHigherPriorityTaskWoken = pdFALSE;\n *\n *     // The interrupt has occurred - change the period of xTimer to 500ms.\n *     // xHigherPriorityTaskWoken was set to pdFALSE where it was defined\n *     // (within this function).  As this is an interrupt service routine, only\n *     // FreeRTOS API functions that end in \"FromISR\" can be used.\n *     if( xTimerChangePeriodFromISR( xTimer, &xHigherPriorityTaskWoken ) != pdPASS )\n *     {\n *         // The command to change the timers period was not executed\n *         // successfully.  Take appropriate action here.\n *     }\n *\n *     // If xHigherPriorityTaskWoken equals pdTRUE, then a context switch\n *     // should be performed.  The syntax required to perform a context switch\n *     // from inside an ISR varies from port to port, and from compiler to\n *     // compiler.  Inspect the demos for the port you are using to find the\n *     // actual syntax required.\n *     if( xHigherPriorityTaskWoken != pdFALSE )\n *     {\n *         // Call the interrupt safe yield function here (actual function\n *         // depends on the FreeRTOS port being used).\n *     }\n * }\n * @endverbatim\n */\n#define xTimerChangePeriodFromISR( xTimer, xNewPeriod, pxHigherPriorityTaskWoken ) \\\n    xTimerGenericCommand( ( xTimer ), tmrCOMMAND_CHANGE_PERIOD_FROM_ISR, ( xNewPeriod ), ( pxHigherPriorityTaskWoken ), 0U )\n\n/**\n * BaseType_t xTimerResetFromISR(   TimerHandle_t xTimer,\n *                                  BaseType_t *pxHigherPriorityTaskWoken );\n *\n * A version of xTimerReset() that can be called from an interrupt service\n * routine.\n *\n * @param xTimer The handle of the timer that is to be started, reset, or\n * restarted.\n *\n * @param pxHigherPriorityTaskWoken The timer service/daemon task spends most\n * of its time in the Blocked state, waiting for messages to arrive on the timer\n * command queue.  Calling xTimerResetFromISR() writes a message to the timer\n * command queue, so has the potential to transition the timer service/daemon\n * task out of the Blocked state.  If calling xTimerResetFromISR() causes the\n * timer service/daemon task to leave the Blocked state, and the timer service/\n * daemon task has a priority equal to or greater than the currently executing\n * task (the task that was interrupted), then *pxHigherPriorityTaskWoken will\n * get set to pdTRUE internally within the xTimerResetFromISR() function.  If\n * xTimerResetFromISR() sets this value to pdTRUE then a context switch should\n * be performed before the interrupt exits.\n *\n * @return pdFAIL will be returned if the reset command could not be sent to\n * the timer command queue.  pdPASS will be returned if the command was\n * successfully sent to the timer command queue.  When the command is actually\n * processed will depend on the priority of the timer service/daemon task\n * relative to other tasks in the system, although the timers expiry time is\n * relative to when xTimerResetFromISR() is actually called.  The timer service/daemon\n * task priority is set by the configTIMER_TASK_PRIORITY configuration constant.\n *\n * Example usage:\n * @verbatim\n * // This scenario assumes xBacklightTimer has already been created.  When a\n * // key is pressed, an LCD back-light is switched on.  If 5 seconds pass\n * // without a key being pressed, then the LCD back-light is switched off.  In\n * // this case, the timer is a one-shot timer, and unlike the example given for\n * // the xTimerReset() function, the key press event handler is an interrupt\n * // service routine.\n *\n * // The callback function assigned to the one-shot timer.  In this case the\n * // parameter is not used.\n * void vBacklightTimerCallback( TimerHandle_t pxTimer )\n * {\n *     // The timer expired, therefore 5 seconds must have passed since a key\n *     // was pressed.  Switch off the LCD back-light.\n *     vSetBacklightState( BACKLIGHT_OFF );\n * }\n *\n * // The key press interrupt service routine.\n * void vKeyPressEventInterruptHandler( void )\n * {\n * BaseType_t xHigherPriorityTaskWoken = pdFALSE;\n *\n *     // Ensure the LCD back-light is on, then reset the timer that is\n *     // responsible for turning the back-light off after 5 seconds of\n *     // key inactivity.  This is an interrupt service routine so can only\n *     // call FreeRTOS API functions that end in \"FromISR\".\n *     vSetBacklightState( BACKLIGHT_ON );\n *\n *     // xTimerStartFromISR() or xTimerResetFromISR() could be called here\n *     // as both cause the timer to re-calculate its expiry time.\n *     // xHigherPriorityTaskWoken was initialised to pdFALSE when it was\n *     // declared (in this function).\n *     if( xTimerResetFromISR( xBacklightTimer, &xHigherPriorityTaskWoken ) != pdPASS )\n *     {\n *         // The reset command was not executed successfully.  Take appropriate\n *         // action here.\n *     }\n *\n *     // Perform the rest of the key processing here.\n *\n *     // If xHigherPriorityTaskWoken equals pdTRUE, then a context switch\n *     // should be performed.  The syntax required to perform a context switch\n *     // from inside an ISR varies from port to port, and from compiler to\n *     // compiler.  Inspect the demos for the port you are using to find the\n *     // actual syntax required.\n *     if( xHigherPriorityTaskWoken != pdFALSE )\n *     {\n *         // Call the interrupt safe yield function here (actual function\n *         // depends on the FreeRTOS port being used).\n *     }\n * }\n * @endverbatim\n */\n#define xTimerResetFromISR( xTimer, pxHigherPriorityTaskWoken ) \\\n    xTimerGenericCommand( ( xTimer ), tmrCOMMAND_RESET_FROM_ISR, ( xTaskGetTickCountFromISR() ), ( pxHigherPriorityTaskWoken ), 0U )\n\n\n/**\n * BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend,\n *                                          void *pvParameter1,\n *                                          uint32_t ulParameter2,\n *                                          BaseType_t *pxHigherPriorityTaskWoken );\n *\n *\n * Used from application interrupt service routines to defer the execution of a\n * function to the RTOS daemon task (the timer service task, hence this function\n * is implemented in timers.c and is prefixed with 'Timer').\n *\n * Ideally an interrupt service routine (ISR) is kept as short as possible, but\n * sometimes an ISR either has a lot of processing to do, or needs to perform\n * processing that is not deterministic.  In these cases\n * xTimerPendFunctionCallFromISR() can be used to defer processing of a function\n * to the RTOS daemon task.\n *\n * A mechanism is provided that allows the interrupt to return directly to the\n * task that will subsequently execute the pended callback function.  This\n * allows the callback function to execute contiguously in time with the\n * interrupt - just as if the callback had executed in the interrupt itself.\n *\n * @param xFunctionToPend The function to execute from the timer service/\n * daemon task.  The function must conform to the PendedFunction_t\n * prototype.\n *\n * @param pvParameter1 The value of the callback function's first parameter.\n * The parameter has a void * type to allow it to be used to pass any type.\n * For example, unsigned longs can be cast to a void *, or the void * can be\n * used to point to a structure.\n *\n * @param ulParameter2 The value of the callback function's second parameter.\n *\n * @param pxHigherPriorityTaskWoken As mentioned above, calling this function\n * will result in a message being sent to the timer daemon task.  If the\n * priority of the timer daemon task (which is set using\n * configTIMER_TASK_PRIORITY in FreeRTOSConfig.h) is higher than the priority of\n * the currently running task (the task the interrupt interrupted) then\n * *pxHigherPriorityTaskWoken will be set to pdTRUE within\n * xTimerPendFunctionCallFromISR(), indicating that a context switch should be\n * requested before the interrupt exits.  For that reason\n * *pxHigherPriorityTaskWoken must be initialised to pdFALSE.  See the\n * example code below.\n *\n * @return pdPASS is returned if the message was successfully sent to the\n * timer daemon task, otherwise pdFALSE is returned.\n *\n * Example usage:\n * @verbatim\n *\n *  // The callback function that will execute in the context of the daemon task.\n *  // Note callback functions must all use this same prototype.\n *  void vProcessInterface( void *pvParameter1, uint32_t ulParameter2 )\n *  {\n *      BaseType_t xInterfaceToService;\n *\n *      // The interface that requires servicing is passed in the second\n *      // parameter.  The first parameter is not used in this case.\n *      xInterfaceToService = ( BaseType_t ) ulParameter2;\n *\n *      // ...Perform the processing here...\n *  }\n *\n *  // An ISR that receives data packets from multiple interfaces\n *  void vAnISR( void )\n *  {\n *      BaseType_t xInterfaceToService, xHigherPriorityTaskWoken;\n *\n *      // Query the hardware to determine which interface needs processing.\n *      xInterfaceToService = prvCheckInterfaces();\n *\n *      // The actual processing is to be deferred to a task.  Request the\n *      // vProcessInterface() callback function is executed, passing in the\n *      // number of the interface that needs processing.  The interface to\n *      // service is passed in the second parameter.  The first parameter is\n *      // not used in this case.\n *      xHigherPriorityTaskWoken = pdFALSE;\n *      xTimerPendFunctionCallFromISR( vProcessInterface, NULL, ( uint32_t ) xInterfaceToService, &xHigherPriorityTaskWoken );\n *\n *      // If xHigherPriorityTaskWoken is now set to pdTRUE then a context\n *      // switch should be requested.  The macro used is port specific and will\n *      // be either portYIELD_FROM_ISR() or portEND_SWITCHING_ISR() - refer to\n *      // the documentation page for the port being used.\n *      portYIELD_FROM_ISR( xHigherPriorityTaskWoken );\n *\n *  }\n * @endverbatim\n */\n#if ( INCLUDE_xTimerPendFunctionCall == 1 )\n    BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend,\n                                              void * pvParameter1,\n                                              uint32_t ulParameter2,\n                                              BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend,\n *                                    void *pvParameter1,\n *                                    uint32_t ulParameter2,\n *                                    TickType_t xTicksToWait );\n *\n *\n * Used to defer the execution of a function to the RTOS daemon task (the timer\n * service task, hence this function is implemented in timers.c and is prefixed\n * with 'Timer').\n *\n * @param xFunctionToPend The function to execute from the timer service/\n * daemon task.  The function must conform to the PendedFunction_t\n * prototype.\n *\n * @param pvParameter1 The value of the callback function's first parameter.\n * The parameter has a void * type to allow it to be used to pass any type.\n * For example, unsigned longs can be cast to a void *, or the void * can be\n * used to point to a structure.\n *\n * @param ulParameter2 The value of the callback function's second parameter.\n *\n * @param xTicksToWait Calling this function will result in a message being\n * sent to the timer daemon task on a queue.  xTicksToWait is the amount of\n * time the calling task should remain in the Blocked state (so not using any\n * processing time) for space to become available on the timer queue if the\n * queue is found to be full.\n *\n * @return pdPASS is returned if the message was successfully sent to the\n * timer daemon task, otherwise pdFALSE is returned.\n *\n */\n#if ( INCLUDE_xTimerPendFunctionCall == 1 )\n    BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend,\n                                       void * pvParameter1,\n                                       uint32_t ulParameter2,\n                                       TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\n#endif\n\n/**\n * const char * const pcTimerGetName( TimerHandle_t xTimer );\n *\n * Returns the name that was assigned to a timer when the timer was created.\n *\n * @param xTimer The handle of the timer being queried.\n *\n * @return The name assigned to the timer specified by the xTimer parameter.\n */\nconst char * pcTimerGetName( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION;\n\n/**\n * void vTimerSetReloadMode( TimerHandle_t xTimer, const BaseType_t xAutoReload );\n *\n * Updates a timer to be either an auto-reload timer, in which case the timer\n * automatically resets itself each time it expires, or a one-shot timer, in\n * which case the timer will only expire once unless it is manually restarted.\n *\n * @param xTimer The handle of the timer being updated.\n *\n * @param xAutoReload If xAutoReload is set to pdTRUE then the timer will\n * expire repeatedly with a frequency set by the timer's period (see the\n * xTimerPeriodInTicks parameter of the xTimerCreate() API function).  If\n * xAutoReload is set to pdFALSE then the timer will be a one-shot timer and\n * enter the dormant state after it expires.\n */\nvoid vTimerSetReloadMode( TimerHandle_t xTimer,\n                          const BaseType_t xAutoReload ) PRIVILEGED_FUNCTION;\n\n/**\n * BaseType_t xTimerGetReloadMode( TimerHandle_t xTimer );\n *\n * Queries a timer to determine if it is an auto-reload timer, in which case the timer\n * automatically resets itself each time it expires, or a one-shot timer, in\n * which case the timer will only expire once unless it is manually restarted.\n *\n * @param xTimer The handle of the timer being queried.\n *\n * @return If the timer is an auto-reload timer then pdTRUE is returned, otherwise\n * pdFALSE is returned.\n */\nBaseType_t xTimerGetReloadMode( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION;\n\n/**\n * UBaseType_t uxTimerGetReloadMode( TimerHandle_t xTimer );\n *\n * Queries a timer to determine if it is an auto-reload timer, in which case the timer\n * automatically resets itself each time it expires, or a one-shot timer, in\n * which case the timer will only expire once unless it is manually restarted.\n *\n * @param xTimer The handle of the timer being queried.\n *\n * @return If the timer is an auto-reload timer then pdTRUE is returned, otherwise\n * pdFALSE is returned.\n */\nUBaseType_t uxTimerGetReloadMode( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION;\n\n/**\n * TickType_t xTimerGetPeriod( TimerHandle_t xTimer );\n *\n * Returns the period of a timer.\n *\n * @param xTimer The handle of the timer being queried.\n *\n * @return The period of the timer in ticks.\n */\nTickType_t xTimerGetPeriod( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION;\n\n/**\n * TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer );\n *\n * Returns the time in ticks at which the timer will expire.  If this is less\n * than the current tick count then the expiry time has overflowed from the\n * current time.\n *\n * @param xTimer The handle of the timer being queried.\n *\n * @return If the timer is running then the time in ticks at which the timer\n * will next expire is returned.  If the timer is not running then the return\n * value is undefined.\n */\nTickType_t xTimerGetExpiryTime( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION;\n\n/**\n * BaseType_t xTimerGetStaticBuffer( TimerHandle_t xTimer,\n *                                   StaticTimer_t ** ppxTimerBuffer );\n *\n * Retrieve pointer to a statically created timer's data structure\n * buffer. This is the same buffer that is supplied at the time of\n * creation.\n *\n * @param xTimer The timer for which to retrieve the buffer.\n *\n * @param ppxTaskBuffer Used to return a pointer to the timers's data\n * structure buffer.\n *\n * @return pdTRUE if the buffer was retrieved, pdFALSE otherwise.\n */\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    BaseType_t xTimerGetStaticBuffer( TimerHandle_t xTimer,\n                                      StaticTimer_t ** ppxTimerBuffer ) PRIVILEGED_FUNCTION;\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n\n/*\n * Functions beyond this part are not part of the public API and are intended\n * for use by the kernel only.\n */\nBaseType_t xTimerCreateTimerTask( void ) PRIVILEGED_FUNCTION;\n\n/*\n * Splitting the xTimerGenericCommand into two sub functions and making it a macro\n * removes a recursion path when called from ISRs. This is primarily for the XCore\n * XCC port which detects the recursion path and throws an error during compilation\n * when this is not split.\n */\nBaseType_t xTimerGenericCommandFromTask( TimerHandle_t xTimer,\n                                         const BaseType_t xCommandID,\n                                         const TickType_t xOptionalValue,\n                                         BaseType_t * const pxHigherPriorityTaskWoken,\n                                         const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\n\nBaseType_t xTimerGenericCommandFromISR( TimerHandle_t xTimer,\n                                        const BaseType_t xCommandID,\n                                        const TickType_t xOptionalValue,\n                                        BaseType_t * const pxHigherPriorityTaskWoken,\n                                        const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;\n\n#define xTimerGenericCommand( xTimer, xCommandID, xOptionalValue, pxHigherPriorityTaskWoken, xTicksToWait )         \\\n    ( ( xCommandID ) < tmrFIRST_FROM_ISR_COMMAND ?                                                                  \\\n      xTimerGenericCommandFromTask( xTimer, xCommandID, xOptionalValue, pxHigherPriorityTaskWoken, xTicksToWait ) : \\\n      xTimerGenericCommandFromISR( xTimer, xCommandID, xOptionalValue, pxHigherPriorityTaskWoken, xTicksToWait ) )\n#if ( configUSE_TRACE_FACILITY == 1 )\n    void vTimerSetTimerNumber( TimerHandle_t xTimer,\n                               UBaseType_t uxTimerNumber ) PRIVILEGED_FUNCTION;\n    UBaseType_t uxTimerGetTimerNumber( TimerHandle_t xTimer ) PRIVILEGED_FUNCTION;\n#endif\n\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n\n/**\n * task.h\n * @code{c}\n * void vApplicationGetTimerTaskMemory( StaticTask_t ** ppxTimerTaskTCBBuffer, StackType_t ** ppxTimerTaskStackBuffer, configSTACK_DEPTH_TYPE * puxTimerTaskStackSize )\n * @endcode\n *\n * This function is used to provide a statically allocated block of memory to FreeRTOS to hold the Timer Task TCB.  This function is required when\n * configSUPPORT_STATIC_ALLOCATION is set.  For more information see this URI: https://www.FreeRTOS.org/a00110.html#configSUPPORT_STATIC_ALLOCATION\n *\n * @param ppxTimerTaskTCBBuffer   A handle to a statically allocated TCB buffer\n * @param ppxTimerTaskStackBuffer A handle to a statically allocated Stack buffer for the idle task\n * @param puxTimerTaskStackSize   A pointer to the number of elements that will fit in the allocated stack buffer\n */\n    void vApplicationGetTimerTaskMemory( StaticTask_t ** ppxTimerTaskTCBBuffer,\n                                         StackType_t ** ppxTimerTaskStackBuffer,\n                                         configSTACK_DEPTH_TYPE * puxTimerTaskStackSize );\n\n#endif\n\n#if ( configUSE_DAEMON_TASK_STARTUP_HOOK != 0 )\n\n/**\n *  timers.h\n * @code{c}\n * void vApplicationDaemonTaskStartupHook( void );\n * @endcode\n *\n * This hook function is called form the timer task once when the task starts running.\n */\n    /* MISRA Ref 8.6.1 [External linkage] */\n    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-86 */\n    /* coverity[misra_c_2012_rule_8_6_violation] */\n    void vApplicationDaemonTaskStartupHook( void );\n\n#endif\n\n/*\n * This function resets the internal state of the timer module. It must be called\n * by the application before restarting the scheduler.\n */\nvoid vTimerResetState( void ) PRIVILEGED_FUNCTION;\n\n/* *INDENT-OFF* */\n#ifdef __cplusplus\n    }\n#endif\n/* *INDENT-ON* */\n#endif /* TIMERS_H */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/list.c",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n\n#include <stdlib.h>\n\n/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining\n * all the API functions to use the MPU wrappers.  That should only be done when\n * task.h is included from an application file. */\n#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE\n\n#include \"FreeRTOS.h\"\n#include \"list.h\"\n\n/* The MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be\n * defined for the header files above, but not in this file, in order to\n * generate the correct privileged Vs unprivileged linkage and placement. */\n#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE\n\n/*-----------------------------------------------------------\n* PUBLIC LIST API documented in list.h\n*----------------------------------------------------------*/\n\nvoid vListInitialise( List_t * const pxList )\n{\n    traceENTER_vListInitialise( pxList );\n\n    /* The list structure contains a list item which is used to mark the\n     * end of the list.  To initialise the list the list end is inserted\n     * as the only list entry. */\n    pxList->pxIndex = ( ListItem_t * ) &( pxList->xListEnd );\n\n    listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( &( pxList->xListEnd ) );\n\n    /* The list end value is the highest possible value in the list to\n     * ensure it remains at the end of the list. */\n    pxList->xListEnd.xItemValue = portMAX_DELAY;\n\n    /* The list end next and previous pointers point to itself so we know\n     * when the list is empty. */\n    pxList->xListEnd.pxNext = ( ListItem_t * ) &( pxList->xListEnd );\n    pxList->xListEnd.pxPrevious = ( ListItem_t * ) &( pxList->xListEnd );\n\n    /* Initialize the remaining fields of xListEnd when it is a proper ListItem_t */\n    #if ( configUSE_MINI_LIST_ITEM == 0 )\n    {\n        pxList->xListEnd.pvOwner = NULL;\n        pxList->xListEnd.pxContainer = NULL;\n        listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( &( pxList->xListEnd ) );\n    }\n    #endif\n\n    pxList->uxNumberOfItems = ( UBaseType_t ) 0U;\n\n    /* Write known values into the list if\n     * configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */\n    listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList );\n    listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList );\n\n    traceRETURN_vListInitialise();\n}\n/*-----------------------------------------------------------*/\n\nvoid vListInitialiseItem( ListItem_t * const pxItem )\n{\n    traceENTER_vListInitialiseItem( pxItem );\n\n    /* Make sure the list item is not recorded as being on a list. */\n    pxItem->pxContainer = NULL;\n\n    /* Write known values into the list item if\n     * configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */\n    listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );\n    listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );\n\n    traceRETURN_vListInitialiseItem();\n}\n/*-----------------------------------------------------------*/\n\nvoid vListInsertEnd( List_t * const pxList,\n                     ListItem_t * const pxNewListItem )\n{\n    ListItem_t * const pxIndex = pxList->pxIndex;\n\n    traceENTER_vListInsertEnd( pxList, pxNewListItem );\n\n    /* Only effective when configASSERT() is also defined, these tests may catch\n     * the list data structures being overwritten in memory.  They will not catch\n     * data errors caused by incorrect configuration or use of FreeRTOS. */\n    listTEST_LIST_INTEGRITY( pxList );\n    listTEST_LIST_ITEM_INTEGRITY( pxNewListItem );\n\n    /* Insert a new list item into pxList, but rather than sort the list,\n     * makes the new list item the last item to be removed by a call to\n     * listGET_OWNER_OF_NEXT_ENTRY(). */\n    pxNewListItem->pxNext = pxIndex;\n    pxNewListItem->pxPrevious = pxIndex->pxPrevious;\n\n    /* Only used during decision coverage testing. */\n    mtCOVERAGE_TEST_DELAY();\n\n    pxIndex->pxPrevious->pxNext = pxNewListItem;\n    pxIndex->pxPrevious = pxNewListItem;\n\n    /* Remember which list the item is in. */\n    pxNewListItem->pxContainer = pxList;\n\n    ( pxList->uxNumberOfItems ) = ( UBaseType_t ) ( pxList->uxNumberOfItems + 1U );\n\n    traceRETURN_vListInsertEnd();\n}\n/*-----------------------------------------------------------*/\n\nvoid vListInsert( List_t * const pxList,\n                  ListItem_t * const pxNewListItem )\n{\n    ListItem_t * pxIterator;\n    const TickType_t xValueOfInsertion = pxNewListItem->xItemValue;\n\n    traceENTER_vListInsert( pxList, pxNewListItem );\n\n    /* Only effective when configASSERT() is also defined, these tests may catch\n     * the list data structures being overwritten in memory.  They will not catch\n     * data errors caused by incorrect configuration or use of FreeRTOS. */\n    listTEST_LIST_INTEGRITY( pxList );\n    listTEST_LIST_ITEM_INTEGRITY( pxNewListItem );\n\n    /* Insert the new list item into the list, sorted in xItemValue order.\n     *\n     * If the list already contains a list item with the same item value then the\n     * new list item should be placed after it.  This ensures that TCBs which are\n     * stored in ready lists (all of which have the same xItemValue value) get a\n     * share of the CPU.  However, if the xItemValue is the same as the back marker\n     * the iteration loop below will not end.  Therefore the value is checked\n     * first, and the algorithm slightly modified if necessary. */\n    if( xValueOfInsertion == portMAX_DELAY )\n    {\n        pxIterator = pxList->xListEnd.pxPrevious;\n    }\n    else\n    {\n        /* *** NOTE ***********************************************************\n        *  If you find your application is crashing here then likely causes are\n        *  listed below.  In addition see https://www.FreeRTOS.org/FAQHelp.html for\n        *  more tips, and ensure configASSERT() is defined!\n        *  https://www.FreeRTOS.org/a00110.html#configASSERT\n        *\n        *   1) Stack overflow -\n        *      see https://www.FreeRTOS.org/Stacks-and-stack-overflow-checking.html\n        *   2) Incorrect interrupt priority assignment, especially on Cortex-M\n        *      parts where numerically high priority values denote low actual\n        *      interrupt priorities, which can seem counter intuitive.  See\n        *      https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html and the definition\n        *      of configMAX_SYSCALL_INTERRUPT_PRIORITY on\n        *      https://www.FreeRTOS.org/a00110.html\n        *   3) Calling an API function from within a critical section or when\n        *      the scheduler is suspended, or calling an API function that does\n        *      not end in \"FromISR\" from an interrupt.\n        *   4) Using a queue or semaphore before it has been initialised or\n        *      before the scheduler has been started (are interrupts firing\n        *      before vTaskStartScheduler() has been called?).\n        *   5) If the FreeRTOS port supports interrupt nesting then ensure that\n        *      the priority of the tick interrupt is at or below\n        *      configMAX_SYSCALL_INTERRUPT_PRIORITY.\n        **********************************************************************/\n\n        for( pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext )\n        {\n            /* There is nothing to do here, just iterating to the wanted\n             * insertion position. */\n        }\n    }\n\n    pxNewListItem->pxNext = pxIterator->pxNext;\n    pxNewListItem->pxNext->pxPrevious = pxNewListItem;\n    pxNewListItem->pxPrevious = pxIterator;\n    pxIterator->pxNext = pxNewListItem;\n\n    /* Remember which list the item is in.  This allows fast removal of the\n     * item later. */\n    pxNewListItem->pxContainer = pxList;\n\n    ( pxList->uxNumberOfItems ) = ( UBaseType_t ) ( pxList->uxNumberOfItems + 1U );\n\n    traceRETURN_vListInsert();\n}\n/*-----------------------------------------------------------*/\n\n\nUBaseType_t uxListRemove( ListItem_t * const pxItemToRemove )\n{\n    /* The list item knows which list it is in.  Obtain the list from the list\n     * item. */\n    List_t * const pxList = pxItemToRemove->pxContainer;\n\n    traceENTER_uxListRemove( pxItemToRemove );\n\n    pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;\n    pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;\n\n    /* Only used during decision coverage testing. */\n    mtCOVERAGE_TEST_DELAY();\n\n    /* Make sure the index is left pointing to a valid item. */\n    if( pxList->pxIndex == pxItemToRemove )\n    {\n        pxList->pxIndex = pxItemToRemove->pxPrevious;\n    }\n    else\n    {\n        mtCOVERAGE_TEST_MARKER();\n    }\n\n    pxItemToRemove->pxContainer = NULL;\n    ( pxList->uxNumberOfItems ) = ( UBaseType_t ) ( pxList->uxNumberOfItems - 1U );\n\n    traceRETURN_uxListRemove( pxList->uxNumberOfItems );\n\n    return pxList->uxNumberOfItems;\n}\n/*-----------------------------------------------------------*/\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/queue.c",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n#include <stdlib.h>\n#include <string.h>\n\n/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining\n * all the API functions to use the MPU wrappers.  That should only be done when\n * task.h is included from an application file. */\n#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE\n\n#include \"FreeRTOS.h\"\n#include \"task.h\"\n#include \"queue.h\"\n\n#if ( configUSE_CO_ROUTINES == 1 )\n    #include \"croutine.h\"\n#endif\n\n/* The MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined\n * for the header files above, but not in this file, in order to generate the\n * correct privileged Vs unprivileged linkage and placement. */\n#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE\n\n\n/* Constants used with the cRxLock and cTxLock structure members. */\n#define queueUNLOCKED             ( ( int8_t ) -1 )\n#define queueLOCKED_UNMODIFIED    ( ( int8_t ) 0 )\n#define queueINT8_MAX             ( ( int8_t ) 127 )\n\n/* When the Queue_t structure is used to represent a base queue its pcHead and\n * pcTail members are used as pointers into the queue storage area.  When the\n * Queue_t structure is used to represent a mutex pcHead and pcTail pointers are\n * not necessary, and the pcHead pointer is set to NULL to indicate that the\n * structure instead holds a pointer to the mutex holder (if any).  Map alternative\n * names to the pcHead and structure member to ensure the readability of the code\n * is maintained.  The QueuePointers_t and SemaphoreData_t types are used to form\n * a union as their usage is mutually exclusive dependent on what the queue is\n * being used for. */\n#define uxQueueType               pcHead\n#define queueQUEUE_IS_MUTEX       NULL\n\ntypedef struct QueuePointers\n{\n    int8_t * pcTail;     /**< Points to the byte at the end of the queue storage area.  Once more byte is allocated than necessary to store the queue items, this is used as a marker. */\n    int8_t * pcReadFrom; /**< Points to the last place that a queued item was read from when the structure is used as a queue. */\n} QueuePointers_t;\n\ntypedef struct SemaphoreData\n{\n    TaskHandle_t xMutexHolder;        /**< The handle of the task that holds the mutex. */\n    UBaseType_t uxRecursiveCallCount; /**< Maintains a count of the number of times a recursive mutex has been recursively 'taken' when the structure is used as a mutex. */\n} SemaphoreData_t;\n\n/* Semaphores do not actually store or copy data, so have an item size of\n * zero. */\n#define queueSEMAPHORE_QUEUE_ITEM_LENGTH    ( ( UBaseType_t ) 0 )\n#define queueMUTEX_GIVE_BLOCK_TIME          ( ( TickType_t ) 0U )\n\n#if ( configUSE_PREEMPTION == 0 )\n\n/* If the cooperative scheduler is being used then a yield should not be\n * performed just because a higher priority task has been woken. */\n    #define queueYIELD_IF_USING_PREEMPTION()\n#else\n    #if ( configNUMBER_OF_CORES == 1 )\n        #define queueYIELD_IF_USING_PREEMPTION()    portYIELD_WITHIN_API()\n    #else /* #if ( configNUMBER_OF_CORES == 1 ) */\n        #define queueYIELD_IF_USING_PREEMPTION()    vTaskYieldWithinAPI()\n    #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n#endif\n\n/*\n * Definition of the queue used by the scheduler.\n * Items are queued by copy, not reference.  See the following link for the\n * rationale: https://www.FreeRTOS.org/Embedded-RTOS-Queues.html\n */\ntypedef struct QueueDefinition /* The old naming convention is used to prevent breaking kernel aware debuggers. */\n{\n    int8_t * pcHead;           /**< Points to the beginning of the queue storage area. */\n    int8_t * pcWriteTo;        /**< Points to the free next place in the storage area. */\n\n    union\n    {\n        QueuePointers_t xQueue;     /**< Data required exclusively when this structure is used as a queue. */\n        SemaphoreData_t xSemaphore; /**< Data required exclusively when this structure is used as a semaphore. */\n    } u;\n\n    List_t xTasksWaitingToSend;             /**< List of tasks that are blocked waiting to post onto this queue.  Stored in priority order. */\n    List_t xTasksWaitingToReceive;          /**< List of tasks that are blocked waiting to read from this queue.  Stored in priority order. */\n\n    volatile UBaseType_t uxMessagesWaiting; /**< The number of items currently in the queue. */\n    UBaseType_t uxLength;                   /**< The length of the queue defined as the number of items it will hold, not the number of bytes. */\n    UBaseType_t uxItemSize;                 /**< The size of each items that the queue will hold. */\n\n    volatile int8_t cRxLock;                /**< Stores the number of items received from the queue (removed from the queue) while the queue was locked.  Set to queueUNLOCKED when the queue is not locked. */\n    volatile int8_t cTxLock;                /**< Stores the number of items transmitted to the queue (added to the queue) while the queue was locked.  Set to queueUNLOCKED when the queue is not locked. */\n\n    #if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )\n        uint8_t ucStaticallyAllocated; /**< Set to pdTRUE if the memory used by the queue was statically allocated to ensure no attempt is made to free the memory. */\n    #endif\n\n    #if ( configUSE_QUEUE_SETS == 1 )\n        struct QueueDefinition * pxQueueSetContainer;\n    #endif\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n        UBaseType_t uxQueueNumber;\n        uint8_t ucQueueType;\n    #endif\n} xQUEUE;\n\n/* The old xQUEUE name is maintained above then typedefed to the new Queue_t\n * name below to enable the use of older kernel aware debuggers. */\ntypedef xQUEUE Queue_t;\n\n/*-----------------------------------------------------------*/\n\n/*\n * The queue registry is just a means for kernel aware debuggers to locate\n * queue structures.  It has no other purpose so is an optional component.\n */\n#if ( configQUEUE_REGISTRY_SIZE > 0 )\n\n/* The type stored within the queue registry array.  This allows a name\n * to be assigned to each queue making kernel aware debugging a little\n * more user friendly. */\n    typedef struct QUEUE_REGISTRY_ITEM\n    {\n        const char * pcQueueName;\n        QueueHandle_t xHandle;\n    } xQueueRegistryItem;\n\n/* The old xQueueRegistryItem name is maintained above then typedefed to the\n * new xQueueRegistryItem name below to enable the use of older kernel aware\n * debuggers. */\n    typedef xQueueRegistryItem QueueRegistryItem_t;\n\n/* The queue registry is simply an array of QueueRegistryItem_t structures.\n * The pcQueueName member of a structure being NULL is indicative of the\n * array position being vacant. */\n\n/* MISRA Ref 8.4.2 [Declaration shall be visible] */\n/* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-84 */\n/* coverity[misra_c_2012_rule_8_4_violation] */\n    PRIVILEGED_DATA QueueRegistryItem_t xQueueRegistry[ configQUEUE_REGISTRY_SIZE ];\n\n#endif /* configQUEUE_REGISTRY_SIZE */\n\n/*\n * Unlocks a queue locked by a call to prvLockQueue.  Locking a queue does not\n * prevent an ISR from adding or removing items to the queue, but does prevent\n * an ISR from removing tasks from the queue event lists.  If an ISR finds a\n * queue is locked it will instead increment the appropriate queue lock count\n * to indicate that a task may require unblocking.  When the queue in unlocked\n * these lock counts are inspected, and the appropriate action taken.\n */\nstatic void prvUnlockQueue( Queue_t * const pxQueue ) PRIVILEGED_FUNCTION;\n\n/*\n * Uses a critical section to determine if there is any data in a queue.\n *\n * @return pdTRUE if the queue contains no items, otherwise pdFALSE.\n */\nstatic BaseType_t prvIsQueueEmpty( const Queue_t * pxQueue ) PRIVILEGED_FUNCTION;\n\n/*\n * Uses a critical section to determine if there is any space in a queue.\n *\n * @return pdTRUE if there is no space, otherwise pdFALSE;\n */\nstatic BaseType_t prvIsQueueFull( const Queue_t * pxQueue ) PRIVILEGED_FUNCTION;\n\n/*\n * Copies an item into the queue, either at the front of the queue or the\n * back of the queue.\n */\nstatic BaseType_t prvCopyDataToQueue( Queue_t * const pxQueue,\n                                      const void * pvItemToQueue,\n                                      const BaseType_t xPosition ) PRIVILEGED_FUNCTION;\n\n/*\n * Copies an item out of a queue.\n */\nstatic void prvCopyDataFromQueue( Queue_t * const pxQueue,\n                                  void * const pvBuffer ) PRIVILEGED_FUNCTION;\n\n#if ( configUSE_QUEUE_SETS == 1 )\n\n/*\n * Checks to see if a queue is a member of a queue set, and if so, notifies\n * the queue set that the queue contains data.\n */\n    static BaseType_t prvNotifyQueueSetContainer( const Queue_t * const pxQueue ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * Called after a Queue_t structure has been allocated either statically or\n * dynamically to fill in the structure's members.\n */\nstatic void prvInitialiseNewQueue( const UBaseType_t uxQueueLength,\n                                   const UBaseType_t uxItemSize,\n                                   uint8_t * pucQueueStorage,\n                                   const uint8_t ucQueueType,\n                                   Queue_t * pxNewQueue ) PRIVILEGED_FUNCTION;\n\n/*\n * Mutexes are a special type of queue.  When a mutex is created, first the\n * queue is created, then prvInitialiseMutex() is called to configure the queue\n * as a mutex.\n */\n#if ( configUSE_MUTEXES == 1 )\n    static void prvInitialiseMutex( Queue_t * pxNewQueue ) PRIVILEGED_FUNCTION;\n#endif\n\n#if ( configUSE_MUTEXES == 1 )\n\n/*\n * If a task waiting for a mutex causes the mutex holder to inherit a\n * priority, but the waiting task times out, then the holder should\n * disinherit the priority - but only down to the highest priority of any\n * other tasks that are waiting for the same mutex.  This function returns\n * that priority.\n */\n    static UBaseType_t prvGetDisinheritPriorityAfterTimeout( const Queue_t * const pxQueue ) PRIVILEGED_FUNCTION;\n#endif\n/*-----------------------------------------------------------*/\n\n/*\n * Macro to mark a queue as locked.  Locking a queue prevents an ISR from\n * accessing the queue event lists.\n */\n#define prvLockQueue( pxQueue )                            \\\n    taskENTER_CRITICAL();                                  \\\n    {                                                      \\\n        if( ( pxQueue )->cRxLock == queueUNLOCKED )        \\\n        {                                                  \\\n            ( pxQueue )->cRxLock = queueLOCKED_UNMODIFIED; \\\n        }                                                  \\\n        if( ( pxQueue )->cTxLock == queueUNLOCKED )        \\\n        {                                                  \\\n            ( pxQueue )->cTxLock = queueLOCKED_UNMODIFIED; \\\n        }                                                  \\\n    }                                                      \\\n    taskEXIT_CRITICAL()\n\n/*\n * Macro to increment cTxLock member of the queue data structure. It is\n * capped at the number of tasks in the system as we cannot unblock more\n * tasks than the number of tasks in the system.\n */\n#define prvIncrementQueueTxLock( pxQueue, cTxLock )                           \\\n    do {                                                                      \\\n        const UBaseType_t uxNumberOfTasks = uxTaskGetNumberOfTasks();         \\\n        if( ( UBaseType_t ) ( cTxLock ) < uxNumberOfTasks )                   \\\n        {                                                                     \\\n            configASSERT( ( cTxLock ) != queueINT8_MAX );                     \\\n            ( pxQueue )->cTxLock = ( int8_t ) ( ( cTxLock ) + ( int8_t ) 1 ); \\\n        }                                                                     \\\n    } while( 0 )\n\n/*\n * Macro to increment cRxLock member of the queue data structure. It is\n * capped at the number of tasks in the system as we cannot unblock more\n * tasks than the number of tasks in the system.\n */\n#define prvIncrementQueueRxLock( pxQueue, cRxLock )                           \\\n    do {                                                                      \\\n        const UBaseType_t uxNumberOfTasks = uxTaskGetNumberOfTasks();         \\\n        if( ( UBaseType_t ) ( cRxLock ) < uxNumberOfTasks )                   \\\n        {                                                                     \\\n            configASSERT( ( cRxLock ) != queueINT8_MAX );                     \\\n            ( pxQueue )->cRxLock = ( int8_t ) ( ( cRxLock ) + ( int8_t ) 1 ); \\\n        }                                                                     \\\n    } while( 0 )\n/*-----------------------------------------------------------*/\n\nBaseType_t xQueueGenericReset( QueueHandle_t xQueue,\n                               BaseType_t xNewQueue )\n{\n    BaseType_t xReturn = pdPASS;\n    Queue_t * const pxQueue = xQueue;\n\n    traceENTER_xQueueGenericReset( xQueue, xNewQueue );\n\n    configASSERT( pxQueue );\n\n    if( ( pxQueue != NULL ) &&\n        ( pxQueue->uxLength >= 1U ) &&\n        /* Check for multiplication overflow. */\n        ( ( SIZE_MAX / pxQueue->uxLength ) >= pxQueue->uxItemSize ) )\n    {\n        taskENTER_CRITICAL();\n        {\n            pxQueue->u.xQueue.pcTail = pxQueue->pcHead + ( pxQueue->uxLength * pxQueue->uxItemSize );\n            pxQueue->uxMessagesWaiting = ( UBaseType_t ) 0U;\n            pxQueue->pcWriteTo = pxQueue->pcHead;\n            pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead + ( ( pxQueue->uxLength - 1U ) * pxQueue->uxItemSize );\n            pxQueue->cRxLock = queueUNLOCKED;\n            pxQueue->cTxLock = queueUNLOCKED;\n\n            if( xNewQueue == pdFALSE )\n            {\n                /* If there are tasks blocked waiting to read from the queue, then\n                 * the tasks will remain blocked as after this function exits the queue\n                 * will still be empty.  If there are tasks blocked waiting to write to\n                 * the queue, then one should be unblocked as after this function exits\n                 * it will be possible to write to it. */\n                if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )\n                {\n                    if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )\n                    {\n                        queueYIELD_IF_USING_PREEMPTION();\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                /* Ensure the event queues start in the correct state. */\n                vListInitialise( &( pxQueue->xTasksWaitingToSend ) );\n                vListInitialise( &( pxQueue->xTasksWaitingToReceive ) );\n            }\n        }\n        taskEXIT_CRITICAL();\n    }\n    else\n    {\n        xReturn = pdFAIL;\n    }\n\n    configASSERT( xReturn != pdFAIL );\n\n    /* A value is returned for calling semantic consistency with previous\n     * versions. */\n    traceRETURN_xQueueGenericReset( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n\n    QueueHandle_t xQueueGenericCreateStatic( const UBaseType_t uxQueueLength,\n                                             const UBaseType_t uxItemSize,\n                                             uint8_t * pucQueueStorage,\n                                             StaticQueue_t * pxStaticQueue,\n                                             const uint8_t ucQueueType )\n    {\n        Queue_t * pxNewQueue = NULL;\n\n        traceENTER_xQueueGenericCreateStatic( uxQueueLength, uxItemSize, pucQueueStorage, pxStaticQueue, ucQueueType );\n\n        /* The StaticQueue_t structure and the queue storage area must be\n         * supplied. */\n        configASSERT( pxStaticQueue );\n\n        if( ( uxQueueLength > ( UBaseType_t ) 0 ) &&\n            ( pxStaticQueue != NULL ) &&\n\n            /* A queue storage area should be provided if the item size is not 0, and\n             * should not be provided if the item size is 0. */\n            ( !( ( pucQueueStorage != NULL ) && ( uxItemSize == 0U ) ) ) &&\n            ( !( ( pucQueueStorage == NULL ) && ( uxItemSize != 0U ) ) ) )\n        {\n            #if ( configASSERT_DEFINED == 1 )\n            {\n                /* Sanity check that the size of the structure used to declare a\n                 * variable of type StaticQueue_t or StaticSemaphore_t equals the size of\n                 * the real queue and semaphore structures. */\n                volatile size_t xSize = sizeof( StaticQueue_t );\n\n                /* This assertion cannot be branch covered in unit tests */\n                configASSERT( xSize == sizeof( Queue_t ) ); /* LCOV_EXCL_BR_LINE */\n                ( void ) xSize;                             /* Prevent unused variable warning when configASSERT() is not defined. */\n            }\n            #endif /* configASSERT_DEFINED */\n\n            /* The address of a statically allocated queue was passed in, use it.\n             * The address of a statically allocated storage area was also passed in\n             * but is already set. */\n            /* MISRA Ref 11.3.1 [Misaligned access] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-113 */\n            /* coverity[misra_c_2012_rule_11_3_violation] */\n            pxNewQueue = ( Queue_t * ) pxStaticQueue;\n\n            #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n            {\n                /* Queues can be allocated wither statically or dynamically, so\n                 * note this queue was allocated statically in case the queue is\n                 * later deleted. */\n                pxNewQueue->ucStaticallyAllocated = pdTRUE;\n            }\n            #endif /* configSUPPORT_DYNAMIC_ALLOCATION */\n\n            prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue );\n        }\n        else\n        {\n            configASSERT( pxNewQueue );\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_xQueueGenericCreateStatic( pxNewQueue );\n\n        return pxNewQueue;\n    }\n\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n/*-----------------------------------------------------------*/\n\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n\n    BaseType_t xQueueGenericGetStaticBuffers( QueueHandle_t xQueue,\n                                              uint8_t ** ppucQueueStorage,\n                                              StaticQueue_t ** ppxStaticQueue )\n    {\n        BaseType_t xReturn;\n        Queue_t * const pxQueue = xQueue;\n\n        traceENTER_xQueueGenericGetStaticBuffers( xQueue, ppucQueueStorage, ppxStaticQueue );\n\n        configASSERT( pxQueue );\n        configASSERT( ppxStaticQueue );\n\n        #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n        {\n            /* Check if the queue was statically allocated. */\n            if( pxQueue->ucStaticallyAllocated == ( uint8_t ) pdTRUE )\n            {\n                if( ppucQueueStorage != NULL )\n                {\n                    *ppucQueueStorage = ( uint8_t * ) pxQueue->pcHead;\n                }\n\n                /* MISRA Ref 11.3.1 [Misaligned access] */\n                /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-113 */\n                /* coverity[misra_c_2012_rule_11_3_violation] */\n                *ppxStaticQueue = ( StaticQueue_t * ) pxQueue;\n                xReturn = pdTRUE;\n            }\n            else\n            {\n                xReturn = pdFALSE;\n            }\n        }\n        #else /* configSUPPORT_DYNAMIC_ALLOCATION */\n        {\n            /* Queue must have been statically allocated. */\n            if( ppucQueueStorage != NULL )\n            {\n                *ppucQueueStorage = ( uint8_t * ) pxQueue->pcHead;\n            }\n\n            *ppxStaticQueue = ( StaticQueue_t * ) pxQueue;\n            xReturn = pdTRUE;\n        }\n        #endif /* configSUPPORT_DYNAMIC_ALLOCATION */\n\n        traceRETURN_xQueueGenericGetStaticBuffers( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n/*-----------------------------------------------------------*/\n\n#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n\n    QueueHandle_t xQueueGenericCreate( const UBaseType_t uxQueueLength,\n                                       const UBaseType_t uxItemSize,\n                                       const uint8_t ucQueueType )\n    {\n        Queue_t * pxNewQueue = NULL;\n        size_t xQueueSizeInBytes;\n        uint8_t * pucQueueStorage;\n\n        traceENTER_xQueueGenericCreate( uxQueueLength, uxItemSize, ucQueueType );\n\n        if( ( uxQueueLength > ( UBaseType_t ) 0 ) &&\n            /* Check for multiplication overflow. */\n            ( ( SIZE_MAX / uxQueueLength ) >= uxItemSize ) &&\n            /* Check for addition overflow. */\n            ( ( UBaseType_t ) ( SIZE_MAX - sizeof( Queue_t ) ) >= ( uxQueueLength * uxItemSize ) ) )\n        {\n            /* Allocate enough space to hold the maximum number of items that\n             * can be in the queue at any time.  It is valid for uxItemSize to be\n             * zero in the case the queue is used as a semaphore. */\n            xQueueSizeInBytes = ( size_t ) ( ( size_t ) uxQueueLength * ( size_t ) uxItemSize );\n\n            /* MISRA Ref 11.5.1 [Malloc memory assignment] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n            /* coverity[misra_c_2012_rule_11_5_violation] */\n            pxNewQueue = ( Queue_t * ) pvPortMalloc( sizeof( Queue_t ) + xQueueSizeInBytes );\n\n            if( pxNewQueue != NULL )\n            {\n                /* Jump past the queue structure to find the location of the queue\n                 * storage area. */\n                pucQueueStorage = ( uint8_t * ) pxNewQueue;\n                pucQueueStorage += sizeof( Queue_t );\n\n                #if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n                {\n                    /* Queues can be created either statically or dynamically, so\n                     * note this task was created dynamically in case it is later\n                     * deleted. */\n                    pxNewQueue->ucStaticallyAllocated = pdFALSE;\n                }\n                #endif /* configSUPPORT_STATIC_ALLOCATION */\n\n                prvInitialiseNewQueue( uxQueueLength, uxItemSize, pucQueueStorage, ucQueueType, pxNewQueue );\n            }\n            else\n            {\n                traceQUEUE_CREATE_FAILED( ucQueueType );\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        else\n        {\n            configASSERT( pxNewQueue );\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_xQueueGenericCreate( pxNewQueue );\n\n        return pxNewQueue;\n    }\n\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n/*-----------------------------------------------------------*/\n\nstatic void prvInitialiseNewQueue( const UBaseType_t uxQueueLength,\n                                   const UBaseType_t uxItemSize,\n                                   uint8_t * pucQueueStorage,\n                                   const uint8_t ucQueueType,\n                                   Queue_t * pxNewQueue )\n{\n    /* Remove compiler warnings about unused parameters should\n     * configUSE_TRACE_FACILITY not be set to 1. */\n    ( void ) ucQueueType;\n\n    if( uxItemSize == ( UBaseType_t ) 0 )\n    {\n        /* No RAM was allocated for the queue storage area, but PC head cannot\n         * be set to NULL because NULL is used as a key to say the queue is used as\n         * a mutex.  Therefore just set pcHead to point to the queue as a benign\n         * value that is known to be within the memory map. */\n        pxNewQueue->pcHead = ( int8_t * ) pxNewQueue;\n    }\n    else\n    {\n        /* Set the head to the start of the queue storage area. */\n        pxNewQueue->pcHead = ( int8_t * ) pucQueueStorage;\n    }\n\n    /* Initialise the queue members as described where the queue type is\n     * defined. */\n    pxNewQueue->uxLength = uxQueueLength;\n    pxNewQueue->uxItemSize = uxItemSize;\n    ( void ) xQueueGenericReset( pxNewQueue, pdTRUE );\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n    {\n        pxNewQueue->ucQueueType = ucQueueType;\n    }\n    #endif /* configUSE_TRACE_FACILITY */\n\n    #if ( configUSE_QUEUE_SETS == 1 )\n    {\n        pxNewQueue->pxQueueSetContainer = NULL;\n    }\n    #endif /* configUSE_QUEUE_SETS */\n\n    traceQUEUE_CREATE( pxNewQueue );\n}\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_MUTEXES == 1 )\n\n    static void prvInitialiseMutex( Queue_t * pxNewQueue )\n    {\n        if( pxNewQueue != NULL )\n        {\n            /* The queue create function will set all the queue structure members\n            * correctly for a generic queue, but this function is creating a\n            * mutex.  Overwrite those members that need to be set differently -\n            * in particular the information required for priority inheritance. */\n            pxNewQueue->u.xSemaphore.xMutexHolder = NULL;\n            pxNewQueue->uxQueueType = queueQUEUE_IS_MUTEX;\n\n            /* In case this is a recursive mutex. */\n            pxNewQueue->u.xSemaphore.uxRecursiveCallCount = 0;\n\n            traceCREATE_MUTEX( pxNewQueue );\n\n            /* Start with the semaphore in the expected state. */\n            ( void ) xQueueGenericSend( pxNewQueue, NULL, ( TickType_t ) 0U, queueSEND_TO_BACK );\n        }\n        else\n        {\n            traceCREATE_MUTEX_FAILED();\n        }\n    }\n\n#endif /* configUSE_MUTEXES */\n/*-----------------------------------------------------------*/\n\n#if ( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )\n\n    QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType )\n    {\n        QueueHandle_t xNewQueue;\n        const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0;\n\n        traceENTER_xQueueCreateMutex( ucQueueType );\n\n        xNewQueue = xQueueGenericCreate( uxMutexLength, uxMutexSize, ucQueueType );\n        prvInitialiseMutex( ( Queue_t * ) xNewQueue );\n\n        traceRETURN_xQueueCreateMutex( xNewQueue );\n\n        return xNewQueue;\n    }\n\n#endif /* configUSE_MUTEXES */\n/*-----------------------------------------------------------*/\n\n#if ( ( configUSE_MUTEXES == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )\n\n    QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType,\n                                           StaticQueue_t * pxStaticQueue )\n    {\n        QueueHandle_t xNewQueue;\n        const UBaseType_t uxMutexLength = ( UBaseType_t ) 1, uxMutexSize = ( UBaseType_t ) 0;\n\n        traceENTER_xQueueCreateMutexStatic( ucQueueType, pxStaticQueue );\n\n        /* Prevent compiler warnings about unused parameters if\n         * configUSE_TRACE_FACILITY does not equal 1. */\n        ( void ) ucQueueType;\n\n        xNewQueue = xQueueGenericCreateStatic( uxMutexLength, uxMutexSize, NULL, pxStaticQueue, ucQueueType );\n        prvInitialiseMutex( ( Queue_t * ) xNewQueue );\n\n        traceRETURN_xQueueCreateMutexStatic( xNewQueue );\n\n        return xNewQueue;\n    }\n\n#endif /* configUSE_MUTEXES */\n/*-----------------------------------------------------------*/\n\n#if ( ( configUSE_MUTEXES == 1 ) && ( INCLUDE_xSemaphoreGetMutexHolder == 1 ) )\n\n    TaskHandle_t xQueueGetMutexHolder( QueueHandle_t xSemaphore )\n    {\n        TaskHandle_t pxReturn;\n        Queue_t * const pxSemaphore = ( Queue_t * ) xSemaphore;\n\n        traceENTER_xQueueGetMutexHolder( xSemaphore );\n\n        configASSERT( xSemaphore );\n\n        /* This function is called by xSemaphoreGetMutexHolder(), and should not\n         * be called directly.  Note:  This is a good way of determining if the\n         * calling task is the mutex holder, but not a good way of determining the\n         * identity of the mutex holder, as the holder may change between the\n         * following critical section exiting and the function returning. */\n        taskENTER_CRITICAL();\n        {\n            if( pxSemaphore->uxQueueType == queueQUEUE_IS_MUTEX )\n            {\n                pxReturn = pxSemaphore->u.xSemaphore.xMutexHolder;\n            }\n            else\n            {\n                pxReturn = NULL;\n            }\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_xQueueGetMutexHolder( pxReturn );\n\n        return pxReturn;\n    }\n\n#endif /* if ( ( configUSE_MUTEXES == 1 ) && ( INCLUDE_xSemaphoreGetMutexHolder == 1 ) ) */\n/*-----------------------------------------------------------*/\n\n#if ( ( configUSE_MUTEXES == 1 ) && ( INCLUDE_xSemaphoreGetMutexHolder == 1 ) )\n\n    TaskHandle_t xQueueGetMutexHolderFromISR( QueueHandle_t xSemaphore )\n    {\n        TaskHandle_t pxReturn;\n\n        traceENTER_xQueueGetMutexHolderFromISR( xSemaphore );\n\n        configASSERT( xSemaphore );\n\n        /* Mutexes cannot be used in interrupt service routines, so the mutex\n         * holder should not change in an ISR, and therefore a critical section is\n         * not required here. */\n        if( ( ( Queue_t * ) xSemaphore )->uxQueueType == queueQUEUE_IS_MUTEX )\n        {\n            pxReturn = ( ( Queue_t * ) xSemaphore )->u.xSemaphore.xMutexHolder;\n        }\n        else\n        {\n            pxReturn = NULL;\n        }\n\n        traceRETURN_xQueueGetMutexHolderFromISR( pxReturn );\n\n        return pxReturn;\n    }\n\n#endif /* if ( ( configUSE_MUTEXES == 1 ) && ( INCLUDE_xSemaphoreGetMutexHolder == 1 ) ) */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_RECURSIVE_MUTEXES == 1 )\n\n    BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex )\n    {\n        BaseType_t xReturn;\n        Queue_t * const pxMutex = ( Queue_t * ) xMutex;\n\n        traceENTER_xQueueGiveMutexRecursive( xMutex );\n\n        configASSERT( pxMutex );\n\n        /* If this is the task that holds the mutex then xMutexHolder will not\n         * change outside of this task.  If this task does not hold the mutex then\n         * pxMutexHolder can never coincidentally equal the tasks handle, and as\n         * this is the only condition we are interested in it does not matter if\n         * pxMutexHolder is accessed simultaneously by another task.  Therefore no\n         * mutual exclusion is required to test the pxMutexHolder variable. */\n        if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() )\n        {\n            traceGIVE_MUTEX_RECURSIVE( pxMutex );\n\n            /* uxRecursiveCallCount cannot be zero if xMutexHolder is equal to\n             * the task handle, therefore no underflow check is required.  Also,\n             * uxRecursiveCallCount is only modified by the mutex holder, and as\n             * there can only be one, no mutual exclusion is required to modify the\n             * uxRecursiveCallCount member. */\n            ( pxMutex->u.xSemaphore.uxRecursiveCallCount )--;\n\n            /* Has the recursive call count unwound to 0? */\n            if( pxMutex->u.xSemaphore.uxRecursiveCallCount == ( UBaseType_t ) 0 )\n            {\n                /* Return the mutex.  This will automatically unblock any other\n                 * task that might be waiting to access the mutex. */\n                ( void ) xQueueGenericSend( pxMutex, NULL, queueMUTEX_GIVE_BLOCK_TIME, queueSEND_TO_BACK );\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n\n            xReturn = pdPASS;\n        }\n        else\n        {\n            /* The mutex cannot be given because the calling task is not the\n             * holder. */\n            xReturn = pdFAIL;\n\n            traceGIVE_MUTEX_RECURSIVE_FAILED( pxMutex );\n        }\n\n        traceRETURN_xQueueGiveMutexRecursive( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_RECURSIVE_MUTEXES */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_RECURSIVE_MUTEXES == 1 )\n\n    BaseType_t xQueueTakeMutexRecursive( QueueHandle_t xMutex,\n                                         TickType_t xTicksToWait )\n    {\n        BaseType_t xReturn;\n        Queue_t * const pxMutex = ( Queue_t * ) xMutex;\n\n        traceENTER_xQueueTakeMutexRecursive( xMutex, xTicksToWait );\n\n        configASSERT( pxMutex );\n\n        /* Comments regarding mutual exclusion as per those within\n         * xQueueGiveMutexRecursive(). */\n\n        traceTAKE_MUTEX_RECURSIVE( pxMutex );\n\n        if( pxMutex->u.xSemaphore.xMutexHolder == xTaskGetCurrentTaskHandle() )\n        {\n            ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++;\n            xReturn = pdPASS;\n        }\n        else\n        {\n            xReturn = xQueueSemaphoreTake( pxMutex, xTicksToWait );\n\n            /* pdPASS will only be returned if the mutex was successfully\n             * obtained.  The calling task may have entered the Blocked state\n             * before reaching here. */\n            if( xReturn != pdFAIL )\n            {\n                ( pxMutex->u.xSemaphore.uxRecursiveCallCount )++;\n            }\n            else\n            {\n                traceTAKE_MUTEX_RECURSIVE_FAILED( pxMutex );\n            }\n        }\n\n        traceRETURN_xQueueTakeMutexRecursive( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_RECURSIVE_MUTEXES */\n/*-----------------------------------------------------------*/\n\n#if ( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )\n\n    QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount,\n                                                       const UBaseType_t uxInitialCount,\n                                                       StaticQueue_t * pxStaticQueue )\n    {\n        QueueHandle_t xHandle = NULL;\n\n        traceENTER_xQueueCreateCountingSemaphoreStatic( uxMaxCount, uxInitialCount, pxStaticQueue );\n\n        if( ( uxMaxCount != 0U ) &&\n            ( uxInitialCount <= uxMaxCount ) )\n        {\n            xHandle = xQueueGenericCreateStatic( uxMaxCount, queueSEMAPHORE_QUEUE_ITEM_LENGTH, NULL, pxStaticQueue, queueQUEUE_TYPE_COUNTING_SEMAPHORE );\n\n            if( xHandle != NULL )\n            {\n                ( ( Queue_t * ) xHandle )->uxMessagesWaiting = uxInitialCount;\n\n                traceCREATE_COUNTING_SEMAPHORE();\n            }\n            else\n            {\n                traceCREATE_COUNTING_SEMAPHORE_FAILED();\n            }\n        }\n        else\n        {\n            configASSERT( xHandle );\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_xQueueCreateCountingSemaphoreStatic( xHandle );\n\n        return xHandle;\n    }\n\n#endif /* ( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */\n/*-----------------------------------------------------------*/\n\n#if ( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )\n\n    QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount,\n                                                 const UBaseType_t uxInitialCount )\n    {\n        QueueHandle_t xHandle = NULL;\n\n        traceENTER_xQueueCreateCountingSemaphore( uxMaxCount, uxInitialCount );\n\n        if( ( uxMaxCount != 0U ) &&\n            ( uxInitialCount <= uxMaxCount ) )\n        {\n            xHandle = xQueueGenericCreate( uxMaxCount, queueSEMAPHORE_QUEUE_ITEM_LENGTH, queueQUEUE_TYPE_COUNTING_SEMAPHORE );\n\n            if( xHandle != NULL )\n            {\n                ( ( Queue_t * ) xHandle )->uxMessagesWaiting = uxInitialCount;\n\n                traceCREATE_COUNTING_SEMAPHORE();\n            }\n            else\n            {\n                traceCREATE_COUNTING_SEMAPHORE_FAILED();\n            }\n        }\n        else\n        {\n            configASSERT( xHandle );\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_xQueueCreateCountingSemaphore( xHandle );\n\n        return xHandle;\n    }\n\n#endif /* ( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */\n/*-----------------------------------------------------------*/\n\nBaseType_t xQueueGenericSend( QueueHandle_t xQueue,\n                              const void * const pvItemToQueue,\n                              TickType_t xTicksToWait,\n                              const BaseType_t xCopyPosition )\n{\n    BaseType_t xEntryTimeSet = pdFALSE, xYieldRequired;\n    TimeOut_t xTimeOut;\n    Queue_t * const pxQueue = xQueue;\n\n    traceENTER_xQueueGenericSend( xQueue, pvItemToQueue, xTicksToWait, xCopyPosition );\n\n    configASSERT( pxQueue );\n    configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );\n    configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );\n    #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )\n    {\n        configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );\n    }\n    #endif\n\n    for( ; ; )\n    {\n        taskENTER_CRITICAL();\n        {\n            /* Is there room on the queue now?  The running task must be the\n             * highest priority task wanting to access the queue.  If the head item\n             * in the queue is to be overwritten then it does not matter if the\n             * queue is full. */\n            if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )\n            {\n                traceQUEUE_SEND( pxQueue );\n\n                #if ( configUSE_QUEUE_SETS == 1 )\n                {\n                    const UBaseType_t uxPreviousMessagesWaiting = pxQueue->uxMessagesWaiting;\n\n                    xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );\n\n                    if( pxQueue->pxQueueSetContainer != NULL )\n                    {\n                        if( ( xCopyPosition == queueOVERWRITE ) && ( uxPreviousMessagesWaiting != ( UBaseType_t ) 0 ) )\n                        {\n                            /* Do not notify the queue set as an existing item\n                             * was overwritten in the queue so the number of items\n                             * in the queue has not changed. */\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                        else if( prvNotifyQueueSetContainer( pxQueue ) != pdFALSE )\n                        {\n                            /* The queue is a member of a queue set, and posting\n                             * to the queue set caused a higher priority task to\n                             * unblock. A context switch is required. */\n                            queueYIELD_IF_USING_PREEMPTION();\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n                    else\n                    {\n                        /* If there was a task waiting for data to arrive on the\n                         * queue then unblock it now. */\n                        if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )\n                        {\n                            if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )\n                            {\n                                /* The unblocked task has a priority higher than\n                                 * our own so yield immediately.  Yes it is ok to\n                                 * do this from within the critical section - the\n                                 * kernel takes care of that. */\n                                queueYIELD_IF_USING_PREEMPTION();\n                            }\n                            else\n                            {\n                                mtCOVERAGE_TEST_MARKER();\n                            }\n                        }\n                        else if( xYieldRequired != pdFALSE )\n                        {\n                            /* This path is a special case that will only get\n                             * executed if the task was holding multiple mutexes\n                             * and the mutexes were given back in an order that is\n                             * different to that in which they were taken. */\n                            queueYIELD_IF_USING_PREEMPTION();\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n                }\n                #else /* configUSE_QUEUE_SETS */\n                {\n                    xYieldRequired = prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );\n\n                    /* If there was a task waiting for data to arrive on the\n                     * queue then unblock it now. */\n                    if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )\n                    {\n                        if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )\n                        {\n                            /* The unblocked task has a priority higher than\n                             * our own so yield immediately.  Yes it is ok to do\n                             * this from within the critical section - the kernel\n                             * takes care of that. */\n                            queueYIELD_IF_USING_PREEMPTION();\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n                    else if( xYieldRequired != pdFALSE )\n                    {\n                        /* This path is a special case that will only get\n                         * executed if the task was holding multiple mutexes and\n                         * the mutexes were given back in an order that is\n                         * different to that in which they were taken. */\n                        queueYIELD_IF_USING_PREEMPTION();\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                #endif /* configUSE_QUEUE_SETS */\n\n                taskEXIT_CRITICAL();\n\n                traceRETURN_xQueueGenericSend( pdPASS );\n\n                return pdPASS;\n            }\n            else\n            {\n                if( xTicksToWait == ( TickType_t ) 0 )\n                {\n                    /* The queue was full and no block time is specified (or\n                     * the block time has expired) so leave now. */\n                    taskEXIT_CRITICAL();\n\n                    /* Return to the original privilege level before exiting\n                     * the function. */\n                    traceQUEUE_SEND_FAILED( pxQueue );\n                    traceRETURN_xQueueGenericSend( errQUEUE_FULL );\n\n                    return errQUEUE_FULL;\n                }\n                else if( xEntryTimeSet == pdFALSE )\n                {\n                    /* The queue was full and a block time was specified so\n                     * configure the timeout structure. */\n                    vTaskInternalSetTimeOutState( &xTimeOut );\n                    xEntryTimeSet = pdTRUE;\n                }\n                else\n                {\n                    /* Entry time was already set. */\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n        }\n        taskEXIT_CRITICAL();\n\n        /* Interrupts and other tasks can send to and receive from the queue\n         * now the critical section has been exited. */\n\n        vTaskSuspendAll();\n        prvLockQueue( pxQueue );\n\n        /* Update the timeout state to see if it has expired yet. */\n        if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )\n        {\n            if( prvIsQueueFull( pxQueue ) != pdFALSE )\n            {\n                traceBLOCKING_ON_QUEUE_SEND( pxQueue );\n                vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToSend ), xTicksToWait );\n\n                /* Unlocking the queue means queue events can effect the\n                 * event list. It is possible that interrupts occurring now\n                 * remove this task from the event list again - but as the\n                 * scheduler is suspended the task will go onto the pending\n                 * ready list instead of the actual ready list. */\n                prvUnlockQueue( pxQueue );\n\n                /* Resuming the scheduler will move tasks from the pending\n                 * ready list into the ready list - so it is feasible that this\n                 * task is already in the ready list before it yields - in which\n                 * case the yield will not cause a context switch unless there\n                 * is also a higher priority task in the pending ready list. */\n                if( xTaskResumeAll() == pdFALSE )\n                {\n                    taskYIELD_WITHIN_API();\n                }\n            }\n            else\n            {\n                /* Try again. */\n                prvUnlockQueue( pxQueue );\n                ( void ) xTaskResumeAll();\n            }\n        }\n        else\n        {\n            /* The timeout has expired. */\n            prvUnlockQueue( pxQueue );\n            ( void ) xTaskResumeAll();\n\n            traceQUEUE_SEND_FAILED( pxQueue );\n            traceRETURN_xQueueGenericSend( errQUEUE_FULL );\n\n            return errQUEUE_FULL;\n        }\n    }\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue,\n                                     const void * const pvItemToQueue,\n                                     BaseType_t * const pxHigherPriorityTaskWoken,\n                                     const BaseType_t xCopyPosition )\n{\n    BaseType_t xReturn;\n    UBaseType_t uxSavedInterruptStatus;\n    Queue_t * const pxQueue = xQueue;\n\n    traceENTER_xQueueGenericSendFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken, xCopyPosition );\n\n    configASSERT( pxQueue );\n    configASSERT( !( ( pvItemToQueue == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );\n    configASSERT( !( ( xCopyPosition == queueOVERWRITE ) && ( pxQueue->uxLength != 1 ) ) );\n\n    /* RTOS ports that support interrupt nesting have the concept of a maximum\n     * system call (or maximum API call) interrupt priority.  Interrupts that are\n     * above the maximum system call priority are kept permanently enabled, even\n     * when the RTOS kernel is in a critical section, but cannot make any calls to\n     * FreeRTOS API functions.  If configASSERT() is defined in FreeRTOSConfig.h\n     * then portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion\n     * failure if a FreeRTOS API function is called from an interrupt that has been\n     * assigned a priority above the configured maximum system call priority.\n     * Only FreeRTOS functions that end in FromISR can be called from interrupts\n     * that have been assigned a priority at or (logically) below the maximum\n     * system call interrupt priority.  FreeRTOS maintains a separate interrupt\n     * safe API to ensure interrupt entry is as fast and as simple as possible.\n     * More information (albeit Cortex-M specific) is provided on the following\n     * link: https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */\n    portASSERT_IF_INTERRUPT_PRIORITY_INVALID();\n\n    /* Similar to xQueueGenericSend, except without blocking if there is no room\n     * in the queue.  Also don't directly wake a task that was blocked on a queue\n     * read, instead return a flag to say whether a context switch is required or\n     * not (i.e. has a task with a higher priority than us been woken by this\n     * post). */\n    /* MISRA Ref 4.7.1 [Return value shall be checked] */\n    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */\n    /* coverity[misra_c_2012_directive_4_7_violation] */\n    uxSavedInterruptStatus = ( UBaseType_t ) taskENTER_CRITICAL_FROM_ISR();\n    {\n        if( ( pxQueue->uxMessagesWaiting < pxQueue->uxLength ) || ( xCopyPosition == queueOVERWRITE ) )\n        {\n            const int8_t cTxLock = pxQueue->cTxLock;\n            const UBaseType_t uxPreviousMessagesWaiting = pxQueue->uxMessagesWaiting;\n\n            traceQUEUE_SEND_FROM_ISR( pxQueue );\n\n            /* Semaphores use xQueueGiveFromISR(), so pxQueue will not be a\n             *  semaphore or mutex.  That means prvCopyDataToQueue() cannot result\n             *  in a task disinheriting a priority and prvCopyDataToQueue() can be\n             *  called here even though the disinherit function does not check if\n             *  the scheduler is suspended before accessing the ready lists. */\n            ( void ) prvCopyDataToQueue( pxQueue, pvItemToQueue, xCopyPosition );\n\n            /* The event list is not altered if the queue is locked.  This will\n             * be done when the queue is unlocked later. */\n            if( cTxLock == queueUNLOCKED )\n            {\n                #if ( configUSE_QUEUE_SETS == 1 )\n                {\n                    if( pxQueue->pxQueueSetContainer != NULL )\n                    {\n                        if( ( xCopyPosition == queueOVERWRITE ) && ( uxPreviousMessagesWaiting != ( UBaseType_t ) 0 ) )\n                        {\n                            /* Do not notify the queue set as an existing item\n                             * was overwritten in the queue so the number of items\n                             * in the queue has not changed. */\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                        else if( prvNotifyQueueSetContainer( pxQueue ) != pdFALSE )\n                        {\n                            /* The queue is a member of a queue set, and posting\n                             * to the queue set caused a higher priority task to\n                             * unblock.  A context switch is required. */\n                            if( pxHigherPriorityTaskWoken != NULL )\n                            {\n                                *pxHigherPriorityTaskWoken = pdTRUE;\n                            }\n                            else\n                            {\n                                mtCOVERAGE_TEST_MARKER();\n                            }\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n                    else\n                    {\n                        if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )\n                        {\n                            if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )\n                            {\n                                /* The task waiting has a higher priority so\n                                 *  record that a context switch is required. */\n                                if( pxHigherPriorityTaskWoken != NULL )\n                                {\n                                    *pxHigherPriorityTaskWoken = pdTRUE;\n                                }\n                                else\n                                {\n                                    mtCOVERAGE_TEST_MARKER();\n                                }\n                            }\n                            else\n                            {\n                                mtCOVERAGE_TEST_MARKER();\n                            }\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n                }\n                #else /* configUSE_QUEUE_SETS */\n                {\n                    if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )\n                    {\n                        if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )\n                        {\n                            /* The task waiting has a higher priority so record that a\n                             * context switch is required. */\n                            if( pxHigherPriorityTaskWoken != NULL )\n                            {\n                                *pxHigherPriorityTaskWoken = pdTRUE;\n                            }\n                            else\n                            {\n                                mtCOVERAGE_TEST_MARKER();\n                            }\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n\n                    /* Not used in this path. */\n                    ( void ) uxPreviousMessagesWaiting;\n                }\n                #endif /* configUSE_QUEUE_SETS */\n            }\n            else\n            {\n                /* Increment the lock count so the task that unlocks the queue\n                 * knows that data was posted while it was locked. */\n                prvIncrementQueueTxLock( pxQueue, cTxLock );\n            }\n\n            xReturn = pdPASS;\n        }\n        else\n        {\n            traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue );\n            xReturn = errQUEUE_FULL;\n        }\n    }\n    taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );\n\n    traceRETURN_xQueueGenericSendFromISR( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xQueueGiveFromISR( QueueHandle_t xQueue,\n                              BaseType_t * const pxHigherPriorityTaskWoken )\n{\n    BaseType_t xReturn;\n    UBaseType_t uxSavedInterruptStatus;\n    Queue_t * const pxQueue = xQueue;\n\n    traceENTER_xQueueGiveFromISR( xQueue, pxHigherPriorityTaskWoken );\n\n    /* Similar to xQueueGenericSendFromISR() but used with semaphores where the\n     * item size is 0.  Don't directly wake a task that was blocked on a queue\n     * read, instead return a flag to say whether a context switch is required or\n     * not (i.e. has a task with a higher priority than us been woken by this\n     * post). */\n\n    configASSERT( pxQueue );\n\n    /* xQueueGenericSendFromISR() should be used instead of xQueueGiveFromISR()\n     * if the item size is not 0. */\n    configASSERT( pxQueue->uxItemSize == 0 );\n\n    /* Normally a mutex would not be given from an interrupt, especially if\n     * there is a mutex holder, as priority inheritance makes no sense for an\n     * interrupts, only tasks. */\n    configASSERT( !( ( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX ) && ( pxQueue->u.xSemaphore.xMutexHolder != NULL ) ) );\n\n    /* RTOS ports that support interrupt nesting have the concept of a maximum\n     * system call (or maximum API call) interrupt priority.  Interrupts that are\n     * above the maximum system call priority are kept permanently enabled, even\n     * when the RTOS kernel is in a critical section, but cannot make any calls to\n     * FreeRTOS API functions.  If configASSERT() is defined in FreeRTOSConfig.h\n     * then portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion\n     * failure if a FreeRTOS API function is called from an interrupt that has been\n     * assigned a priority above the configured maximum system call priority.\n     * Only FreeRTOS functions that end in FromISR can be called from interrupts\n     * that have been assigned a priority at or (logically) below the maximum\n     * system call interrupt priority.  FreeRTOS maintains a separate interrupt\n     * safe API to ensure interrupt entry is as fast and as simple as possible.\n     * More information (albeit Cortex-M specific) is provided on the following\n     * link: https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */\n    portASSERT_IF_INTERRUPT_PRIORITY_INVALID();\n\n    /* MISRA Ref 4.7.1 [Return value shall be checked] */\n    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */\n    /* coverity[misra_c_2012_directive_4_7_violation] */\n    uxSavedInterruptStatus = ( UBaseType_t ) taskENTER_CRITICAL_FROM_ISR();\n    {\n        const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting;\n\n        /* When the queue is used to implement a semaphore no data is ever\n         * moved through the queue but it is still valid to see if the queue 'has\n         * space'. */\n        if( uxMessagesWaiting < pxQueue->uxLength )\n        {\n            const int8_t cTxLock = pxQueue->cTxLock;\n\n            traceQUEUE_SEND_FROM_ISR( pxQueue );\n\n            /* A task can only have an inherited priority if it is a mutex\n             * holder - and if there is a mutex holder then the mutex cannot be\n             * given from an ISR.  As this is the ISR version of the function it\n             * can be assumed there is no mutex holder and no need to determine if\n             * priority disinheritance is needed.  Simply increase the count of\n             * messages (semaphores) available. */\n            pxQueue->uxMessagesWaiting = ( UBaseType_t ) ( uxMessagesWaiting + ( UBaseType_t ) 1 );\n\n            /* The event list is not altered if the queue is locked.  This will\n             * be done when the queue is unlocked later. */\n            if( cTxLock == queueUNLOCKED )\n            {\n                #if ( configUSE_QUEUE_SETS == 1 )\n                {\n                    if( pxQueue->pxQueueSetContainer != NULL )\n                    {\n                        if( prvNotifyQueueSetContainer( pxQueue ) != pdFALSE )\n                        {\n                            /* The semaphore is a member of a queue set, and\n                             * posting to the queue set caused a higher priority\n                             * task to unblock.  A context switch is required. */\n                            if( pxHigherPriorityTaskWoken != NULL )\n                            {\n                                *pxHigherPriorityTaskWoken = pdTRUE;\n                            }\n                            else\n                            {\n                                mtCOVERAGE_TEST_MARKER();\n                            }\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n                    else\n                    {\n                        if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )\n                        {\n                            if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )\n                            {\n                                /* The task waiting has a higher priority so\n                                 *  record that a context switch is required. */\n                                if( pxHigherPriorityTaskWoken != NULL )\n                                {\n                                    *pxHigherPriorityTaskWoken = pdTRUE;\n                                }\n                                else\n                                {\n                                    mtCOVERAGE_TEST_MARKER();\n                                }\n                            }\n                            else\n                            {\n                                mtCOVERAGE_TEST_MARKER();\n                            }\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n                }\n                #else /* configUSE_QUEUE_SETS */\n                {\n                    if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )\n                    {\n                        if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )\n                        {\n                            /* The task waiting has a higher priority so record that a\n                             * context switch is required. */\n                            if( pxHigherPriorityTaskWoken != NULL )\n                            {\n                                *pxHigherPriorityTaskWoken = pdTRUE;\n                            }\n                            else\n                            {\n                                mtCOVERAGE_TEST_MARKER();\n                            }\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                #endif /* configUSE_QUEUE_SETS */\n            }\n            else\n            {\n                /* Increment the lock count so the task that unlocks the queue\n                 * knows that data was posted while it was locked. */\n                prvIncrementQueueTxLock( pxQueue, cTxLock );\n            }\n\n            xReturn = pdPASS;\n        }\n        else\n        {\n            traceQUEUE_SEND_FROM_ISR_FAILED( pxQueue );\n            xReturn = errQUEUE_FULL;\n        }\n    }\n    taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );\n\n    traceRETURN_xQueueGiveFromISR( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xQueueReceive( QueueHandle_t xQueue,\n                          void * const pvBuffer,\n                          TickType_t xTicksToWait )\n{\n    BaseType_t xEntryTimeSet = pdFALSE;\n    TimeOut_t xTimeOut;\n    Queue_t * const pxQueue = xQueue;\n\n    traceENTER_xQueueReceive( xQueue, pvBuffer, xTicksToWait );\n\n    /* Check the pointer is not NULL. */\n    configASSERT( ( pxQueue ) );\n\n    /* The buffer into which data is received can only be NULL if the data size\n     * is zero (so no data is copied into the buffer). */\n    configASSERT( !( ( ( pvBuffer ) == NULL ) && ( ( pxQueue )->uxItemSize != ( UBaseType_t ) 0U ) ) );\n\n    /* Cannot block if the scheduler is suspended. */\n    #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )\n    {\n        configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );\n    }\n    #endif\n\n    for( ; ; )\n    {\n        taskENTER_CRITICAL();\n        {\n            const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting;\n\n            /* Is there data in the queue now?  To be running the calling task\n             * must be the highest priority task wanting to access the queue. */\n            if( uxMessagesWaiting > ( UBaseType_t ) 0 )\n            {\n                /* Data available, remove one item. */\n                prvCopyDataFromQueue( pxQueue, pvBuffer );\n                traceQUEUE_RECEIVE( pxQueue );\n                pxQueue->uxMessagesWaiting = ( UBaseType_t ) ( uxMessagesWaiting - ( UBaseType_t ) 1 );\n\n                /* There is now space in the queue, were any tasks waiting to\n                 * post to the queue?  If so, unblock the highest priority waiting\n                 * task. */\n                if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )\n                {\n                    if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )\n                    {\n                        queueYIELD_IF_USING_PREEMPTION();\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n\n                taskEXIT_CRITICAL();\n\n                traceRETURN_xQueueReceive( pdPASS );\n\n                return pdPASS;\n            }\n            else\n            {\n                if( xTicksToWait == ( TickType_t ) 0 )\n                {\n                    /* The queue was empty and no block time is specified (or\n                     * the block time has expired) so leave now. */\n                    taskEXIT_CRITICAL();\n\n                    traceQUEUE_RECEIVE_FAILED( pxQueue );\n                    traceRETURN_xQueueReceive( errQUEUE_EMPTY );\n\n                    return errQUEUE_EMPTY;\n                }\n                else if( xEntryTimeSet == pdFALSE )\n                {\n                    /* The queue was empty and a block time was specified so\n                     * configure the timeout structure. */\n                    vTaskInternalSetTimeOutState( &xTimeOut );\n                    xEntryTimeSet = pdTRUE;\n                }\n                else\n                {\n                    /* Entry time was already set. */\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n        }\n        taskEXIT_CRITICAL();\n\n        /* Interrupts and other tasks can send to and receive from the queue\n         * now the critical section has been exited. */\n\n        vTaskSuspendAll();\n        prvLockQueue( pxQueue );\n\n        /* Update the timeout state to see if it has expired yet. */\n        if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )\n        {\n            /* The timeout has not expired.  If the queue is still empty place\n             * the task on the list of tasks waiting to receive from the queue. */\n            if( prvIsQueueEmpty( pxQueue ) != pdFALSE )\n            {\n                traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue );\n                vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );\n                prvUnlockQueue( pxQueue );\n\n                if( xTaskResumeAll() == pdFALSE )\n                {\n                    taskYIELD_WITHIN_API();\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                /* The queue contains data again.  Loop back to try and read the\n                 * data. */\n                prvUnlockQueue( pxQueue );\n                ( void ) xTaskResumeAll();\n            }\n        }\n        else\n        {\n            /* Timed out.  If there is no data in the queue exit, otherwise loop\n             * back and attempt to read the data. */\n            prvUnlockQueue( pxQueue );\n            ( void ) xTaskResumeAll();\n\n            if( prvIsQueueEmpty( pxQueue ) != pdFALSE )\n            {\n                traceQUEUE_RECEIVE_FAILED( pxQueue );\n                traceRETURN_xQueueReceive( errQUEUE_EMPTY );\n\n                return errQUEUE_EMPTY;\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n    }\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue,\n                                TickType_t xTicksToWait )\n{\n    BaseType_t xEntryTimeSet = pdFALSE;\n    TimeOut_t xTimeOut;\n    Queue_t * const pxQueue = xQueue;\n\n    #if ( configUSE_MUTEXES == 1 )\n        BaseType_t xInheritanceOccurred = pdFALSE;\n    #endif\n\n    traceENTER_xQueueSemaphoreTake( xQueue, xTicksToWait );\n\n    /* Check the queue pointer is not NULL. */\n    configASSERT( ( pxQueue ) );\n\n    /* Check this really is a semaphore, in which case the item size will be\n     * 0. */\n    configASSERT( pxQueue->uxItemSize == 0 );\n\n    /* Cannot block if the scheduler is suspended. */\n    #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )\n    {\n        configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );\n    }\n    #endif\n\n    for( ; ; )\n    {\n        taskENTER_CRITICAL();\n        {\n            /* Semaphores are queues with an item size of 0, and where the\n             * number of messages in the queue is the semaphore's count value. */\n            const UBaseType_t uxSemaphoreCount = pxQueue->uxMessagesWaiting;\n\n            /* Is there data in the queue now?  To be running the calling task\n             * must be the highest priority task wanting to access the queue. */\n            if( uxSemaphoreCount > ( UBaseType_t ) 0 )\n            {\n                traceQUEUE_RECEIVE( pxQueue );\n\n                /* Semaphores are queues with a data size of zero and where the\n                 * messages waiting is the semaphore's count.  Reduce the count. */\n                pxQueue->uxMessagesWaiting = ( UBaseType_t ) ( uxSemaphoreCount - ( UBaseType_t ) 1 );\n\n                #if ( configUSE_MUTEXES == 1 )\n                {\n                    if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )\n                    {\n                        /* Record the information required to implement\n                         * priority inheritance should it become necessary. */\n                        pxQueue->u.xSemaphore.xMutexHolder = pvTaskIncrementMutexHeldCount();\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                #endif /* configUSE_MUTEXES */\n\n                /* Check to see if other tasks are blocked waiting to give the\n                 * semaphore, and if so, unblock the highest priority such task. */\n                if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )\n                {\n                    if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )\n                    {\n                        queueYIELD_IF_USING_PREEMPTION();\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n\n                taskEXIT_CRITICAL();\n\n                traceRETURN_xQueueSemaphoreTake( pdPASS );\n\n                return pdPASS;\n            }\n            else\n            {\n                if( xTicksToWait == ( TickType_t ) 0 )\n                {\n                    /* The semaphore count was 0 and no block time is specified\n                     * (or the block time has expired) so exit now. */\n                    taskEXIT_CRITICAL();\n\n                    traceQUEUE_RECEIVE_FAILED( pxQueue );\n                    traceRETURN_xQueueSemaphoreTake( errQUEUE_EMPTY );\n\n                    return errQUEUE_EMPTY;\n                }\n                else if( xEntryTimeSet == pdFALSE )\n                {\n                    /* The semaphore count was 0 and a block time was specified\n                     * so configure the timeout structure ready to block. */\n                    vTaskInternalSetTimeOutState( &xTimeOut );\n                    xEntryTimeSet = pdTRUE;\n                }\n                else\n                {\n                    /* Entry time was already set. */\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n        }\n        taskEXIT_CRITICAL();\n\n        /* Interrupts and other tasks can give to and take from the semaphore\n         * now the critical section has been exited. */\n\n        vTaskSuspendAll();\n        prvLockQueue( pxQueue );\n\n        /* Update the timeout state to see if it has expired yet. */\n        if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )\n        {\n            /* A block time is specified and not expired.  If the semaphore\n             * count is 0 then enter the Blocked state to wait for a semaphore to\n             * become available.  As semaphores are implemented with queues the\n             * queue being empty is equivalent to the semaphore count being 0. */\n            if( prvIsQueueEmpty( pxQueue ) != pdFALSE )\n            {\n                traceBLOCKING_ON_QUEUE_RECEIVE( pxQueue );\n\n                #if ( configUSE_MUTEXES == 1 )\n                {\n                    if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )\n                    {\n                        taskENTER_CRITICAL();\n                        {\n                            xInheritanceOccurred = xTaskPriorityInherit( pxQueue->u.xSemaphore.xMutexHolder );\n                        }\n                        taskEXIT_CRITICAL();\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                #endif /* if ( configUSE_MUTEXES == 1 ) */\n\n                vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );\n                prvUnlockQueue( pxQueue );\n\n                if( xTaskResumeAll() == pdFALSE )\n                {\n                    taskYIELD_WITHIN_API();\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                /* There was no timeout and the semaphore count was not 0, so\n                 * attempt to take the semaphore again. */\n                prvUnlockQueue( pxQueue );\n                ( void ) xTaskResumeAll();\n            }\n        }\n        else\n        {\n            /* Timed out. */\n            prvUnlockQueue( pxQueue );\n            ( void ) xTaskResumeAll();\n\n            /* If the semaphore count is 0 exit now as the timeout has\n             * expired.  Otherwise return to attempt to take the semaphore that is\n             * known to be available.  As semaphores are implemented by queues the\n             * queue being empty is equivalent to the semaphore count being 0. */\n            if( prvIsQueueEmpty( pxQueue ) != pdFALSE )\n            {\n                #if ( configUSE_MUTEXES == 1 )\n                {\n                    /* xInheritanceOccurred could only have be set if\n                     * pxQueue->uxQueueType == queueQUEUE_IS_MUTEX so no need to\n                     * test the mutex type again to check it is actually a mutex. */\n                    if( xInheritanceOccurred != pdFALSE )\n                    {\n                        taskENTER_CRITICAL();\n                        {\n                            UBaseType_t uxHighestWaitingPriority;\n\n                            /* This task blocking on the mutex caused another\n                             * task to inherit this task's priority.  Now this task\n                             * has timed out the priority should be disinherited\n                             * again, but only as low as the next highest priority\n                             * task that is waiting for the same mutex. */\n                            uxHighestWaitingPriority = prvGetDisinheritPriorityAfterTimeout( pxQueue );\n\n                            /* vTaskPriorityDisinheritAfterTimeout uses the uxHighestWaitingPriority\n                             * parameter to index pxReadyTasksLists when adding the task holding\n                             * mutex to the ready list for its new priority. Coverity thinks that\n                             * it can result in out-of-bounds access which is not true because\n                             * uxHighestWaitingPriority, as returned by prvGetDisinheritPriorityAfterTimeout,\n                             * is capped at ( configMAX_PRIORITIES - 1 ). */\n                            /* coverity[overrun] */\n                            vTaskPriorityDisinheritAfterTimeout( pxQueue->u.xSemaphore.xMutexHolder, uxHighestWaitingPriority );\n                        }\n                        taskEXIT_CRITICAL();\n                    }\n                }\n                #endif /* configUSE_MUTEXES */\n\n                traceQUEUE_RECEIVE_FAILED( pxQueue );\n                traceRETURN_xQueueSemaphoreTake( errQUEUE_EMPTY );\n\n                return errQUEUE_EMPTY;\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n    }\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xQueuePeek( QueueHandle_t xQueue,\n                       void * const pvBuffer,\n                       TickType_t xTicksToWait )\n{\n    BaseType_t xEntryTimeSet = pdFALSE;\n    TimeOut_t xTimeOut;\n    int8_t * pcOriginalReadPosition;\n    Queue_t * const pxQueue = xQueue;\n\n    traceENTER_xQueuePeek( xQueue, pvBuffer, xTicksToWait );\n\n    /* Check the pointer is not NULL. */\n    configASSERT( ( pxQueue ) );\n\n    /* The buffer into which data is received can only be NULL if the data size\n     * is zero (so no data is copied into the buffer. */\n    configASSERT( !( ( ( pvBuffer ) == NULL ) && ( ( pxQueue )->uxItemSize != ( UBaseType_t ) 0U ) ) );\n\n    /* Cannot block if the scheduler is suspended. */\n    #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )\n    {\n        configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );\n    }\n    #endif\n\n    for( ; ; )\n    {\n        taskENTER_CRITICAL();\n        {\n            const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting;\n\n            /* Is there data in the queue now?  To be running the calling task\n             * must be the highest priority task wanting to access the queue. */\n            if( uxMessagesWaiting > ( UBaseType_t ) 0 )\n            {\n                /* Remember the read position so it can be reset after the data\n                 * is read from the queue as this function is only peeking the\n                 * data, not removing it. */\n                pcOriginalReadPosition = pxQueue->u.xQueue.pcReadFrom;\n\n                prvCopyDataFromQueue( pxQueue, pvBuffer );\n                traceQUEUE_PEEK( pxQueue );\n\n                /* The data is not being removed, so reset the read pointer. */\n                pxQueue->u.xQueue.pcReadFrom = pcOriginalReadPosition;\n\n                /* The data is being left in the queue, so see if there are\n                 * any other tasks waiting for the data. */\n                if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )\n                {\n                    if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )\n                    {\n                        /* The task waiting has a higher priority than this task. */\n                        queueYIELD_IF_USING_PREEMPTION();\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n\n                taskEXIT_CRITICAL();\n\n                traceRETURN_xQueuePeek( pdPASS );\n\n                return pdPASS;\n            }\n            else\n            {\n                if( xTicksToWait == ( TickType_t ) 0 )\n                {\n                    /* The queue was empty and no block time is specified (or\n                     * the block time has expired) so leave now. */\n                    taskEXIT_CRITICAL();\n\n                    traceQUEUE_PEEK_FAILED( pxQueue );\n                    traceRETURN_xQueuePeek( errQUEUE_EMPTY );\n\n                    return errQUEUE_EMPTY;\n                }\n                else if( xEntryTimeSet == pdFALSE )\n                {\n                    /* The queue was empty and a block time was specified so\n                     * configure the timeout structure ready to enter the blocked\n                     * state. */\n                    vTaskInternalSetTimeOutState( &xTimeOut );\n                    xEntryTimeSet = pdTRUE;\n                }\n                else\n                {\n                    /* Entry time was already set. */\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n        }\n        taskEXIT_CRITICAL();\n\n        /* Interrupts and other tasks can send to and receive from the queue\n         * now that the critical section has been exited. */\n\n        vTaskSuspendAll();\n        prvLockQueue( pxQueue );\n\n        /* Update the timeout state to see if it has expired yet. */\n        if( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE )\n        {\n            /* Timeout has not expired yet, check to see if there is data in the\n            * queue now, and if not enter the Blocked state to wait for data. */\n            if( prvIsQueueEmpty( pxQueue ) != pdFALSE )\n            {\n                traceBLOCKING_ON_QUEUE_PEEK( pxQueue );\n                vTaskPlaceOnEventList( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait );\n                prvUnlockQueue( pxQueue );\n\n                if( xTaskResumeAll() == pdFALSE )\n                {\n                    taskYIELD_WITHIN_API();\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                /* There is data in the queue now, so don't enter the blocked\n                 * state, instead return to try and obtain the data. */\n                prvUnlockQueue( pxQueue );\n                ( void ) xTaskResumeAll();\n            }\n        }\n        else\n        {\n            /* The timeout has expired.  If there is still no data in the queue\n             * exit, otherwise go back and try to read the data again. */\n            prvUnlockQueue( pxQueue );\n            ( void ) xTaskResumeAll();\n\n            if( prvIsQueueEmpty( pxQueue ) != pdFALSE )\n            {\n                traceQUEUE_PEEK_FAILED( pxQueue );\n                traceRETURN_xQueuePeek( errQUEUE_EMPTY );\n\n                return errQUEUE_EMPTY;\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n    }\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xQueueReceiveFromISR( QueueHandle_t xQueue,\n                                 void * const pvBuffer,\n                                 BaseType_t * const pxHigherPriorityTaskWoken )\n{\n    BaseType_t xReturn;\n    UBaseType_t uxSavedInterruptStatus;\n    Queue_t * const pxQueue = xQueue;\n\n    traceENTER_xQueueReceiveFromISR( xQueue, pvBuffer, pxHigherPriorityTaskWoken );\n\n    configASSERT( pxQueue );\n    configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );\n\n    /* RTOS ports that support interrupt nesting have the concept of a maximum\n     * system call (or maximum API call) interrupt priority.  Interrupts that are\n     * above the maximum system call priority are kept permanently enabled, even\n     * when the RTOS kernel is in a critical section, but cannot make any calls to\n     * FreeRTOS API functions.  If configASSERT() is defined in FreeRTOSConfig.h\n     * then portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion\n     * failure if a FreeRTOS API function is called from an interrupt that has been\n     * assigned a priority above the configured maximum system call priority.\n     * Only FreeRTOS functions that end in FromISR can be called from interrupts\n     * that have been assigned a priority at or (logically) below the maximum\n     * system call interrupt priority.  FreeRTOS maintains a separate interrupt\n     * safe API to ensure interrupt entry is as fast and as simple as possible.\n     * More information (albeit Cortex-M specific) is provided on the following\n     * link: https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */\n    portASSERT_IF_INTERRUPT_PRIORITY_INVALID();\n\n    /* MISRA Ref 4.7.1 [Return value shall be checked] */\n    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */\n    /* coverity[misra_c_2012_directive_4_7_violation] */\n    uxSavedInterruptStatus = ( UBaseType_t ) taskENTER_CRITICAL_FROM_ISR();\n    {\n        const UBaseType_t uxMessagesWaiting = pxQueue->uxMessagesWaiting;\n\n        /* Cannot block in an ISR, so check there is data available. */\n        if( uxMessagesWaiting > ( UBaseType_t ) 0 )\n        {\n            const int8_t cRxLock = pxQueue->cRxLock;\n\n            traceQUEUE_RECEIVE_FROM_ISR( pxQueue );\n\n            prvCopyDataFromQueue( pxQueue, pvBuffer );\n            pxQueue->uxMessagesWaiting = ( UBaseType_t ) ( uxMessagesWaiting - ( UBaseType_t ) 1 );\n\n            /* If the queue is locked the event list will not be modified.\n             * Instead update the lock count so the task that unlocks the queue\n             * will know that an ISR has removed data while the queue was\n             * locked. */\n            if( cRxLock == queueUNLOCKED )\n            {\n                if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )\n                {\n                    if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )\n                    {\n                        /* The task waiting has a higher priority than us so\n                         * force a context switch. */\n                        if( pxHigherPriorityTaskWoken != NULL )\n                        {\n                            *pxHigherPriorityTaskWoken = pdTRUE;\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                /* Increment the lock count so the task that unlocks the queue\n                 * knows that data was removed while it was locked. */\n                prvIncrementQueueRxLock( pxQueue, cRxLock );\n            }\n\n            xReturn = pdPASS;\n        }\n        else\n        {\n            xReturn = pdFAIL;\n            traceQUEUE_RECEIVE_FROM_ISR_FAILED( pxQueue );\n        }\n    }\n    taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );\n\n    traceRETURN_xQueueReceiveFromISR( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xQueuePeekFromISR( QueueHandle_t xQueue,\n                              void * const pvBuffer )\n{\n    BaseType_t xReturn;\n    UBaseType_t uxSavedInterruptStatus;\n    int8_t * pcOriginalReadPosition;\n    Queue_t * const pxQueue = xQueue;\n\n    traceENTER_xQueuePeekFromISR( xQueue, pvBuffer );\n\n    configASSERT( pxQueue );\n    configASSERT( !( ( pvBuffer == NULL ) && ( pxQueue->uxItemSize != ( UBaseType_t ) 0U ) ) );\n    configASSERT( pxQueue->uxItemSize != 0 ); /* Can't peek a semaphore. */\n\n    /* RTOS ports that support interrupt nesting have the concept of a maximum\n     * system call (or maximum API call) interrupt priority.  Interrupts that are\n     * above the maximum system call priority are kept permanently enabled, even\n     * when the RTOS kernel is in a critical section, but cannot make any calls to\n     * FreeRTOS API functions.  If configASSERT() is defined in FreeRTOSConfig.h\n     * then portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion\n     * failure if a FreeRTOS API function is called from an interrupt that has been\n     * assigned a priority above the configured maximum system call priority.\n     * Only FreeRTOS functions that end in FromISR can be called from interrupts\n     * that have been assigned a priority at or (logically) below the maximum\n     * system call interrupt priority.  FreeRTOS maintains a separate interrupt\n     * safe API to ensure interrupt entry is as fast and as simple as possible.\n     * More information (albeit Cortex-M specific) is provided on the following\n     * link: https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */\n    portASSERT_IF_INTERRUPT_PRIORITY_INVALID();\n\n    /* MISRA Ref 4.7.1 [Return value shall be checked] */\n    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */\n    /* coverity[misra_c_2012_directive_4_7_violation] */\n    uxSavedInterruptStatus = ( UBaseType_t ) taskENTER_CRITICAL_FROM_ISR();\n    {\n        /* Cannot block in an ISR, so check there is data available. */\n        if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 )\n        {\n            traceQUEUE_PEEK_FROM_ISR( pxQueue );\n\n            /* Remember the read position so it can be reset as nothing is\n             * actually being removed from the queue. */\n            pcOriginalReadPosition = pxQueue->u.xQueue.pcReadFrom;\n            prvCopyDataFromQueue( pxQueue, pvBuffer );\n            pxQueue->u.xQueue.pcReadFrom = pcOriginalReadPosition;\n\n            xReturn = pdPASS;\n        }\n        else\n        {\n            xReturn = pdFAIL;\n            traceQUEUE_PEEK_FROM_ISR_FAILED( pxQueue );\n        }\n    }\n    taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );\n\n    traceRETURN_xQueuePeekFromISR( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nUBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue )\n{\n    UBaseType_t uxReturn;\n\n    traceENTER_uxQueueMessagesWaiting( xQueue );\n\n    configASSERT( xQueue );\n\n    taskENTER_CRITICAL();\n    {\n        uxReturn = ( ( Queue_t * ) xQueue )->uxMessagesWaiting;\n    }\n    taskEXIT_CRITICAL();\n\n    traceRETURN_uxQueueMessagesWaiting( uxReturn );\n\n    return uxReturn;\n}\n/*-----------------------------------------------------------*/\n\nUBaseType_t uxQueueSpacesAvailable( const QueueHandle_t xQueue )\n{\n    UBaseType_t uxReturn;\n    Queue_t * const pxQueue = xQueue;\n\n    traceENTER_uxQueueSpacesAvailable( xQueue );\n\n    configASSERT( pxQueue );\n\n    taskENTER_CRITICAL();\n    {\n        uxReturn = ( UBaseType_t ) ( pxQueue->uxLength - pxQueue->uxMessagesWaiting );\n    }\n    taskEXIT_CRITICAL();\n\n    traceRETURN_uxQueueSpacesAvailable( uxReturn );\n\n    return uxReturn;\n}\n/*-----------------------------------------------------------*/\n\nUBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue )\n{\n    UBaseType_t uxReturn;\n    Queue_t * const pxQueue = xQueue;\n\n    traceENTER_uxQueueMessagesWaitingFromISR( xQueue );\n\n    configASSERT( pxQueue );\n    uxReturn = pxQueue->uxMessagesWaiting;\n\n    traceRETURN_uxQueueMessagesWaitingFromISR( uxReturn );\n\n    return uxReturn;\n}\n/*-----------------------------------------------------------*/\n\nvoid vQueueDelete( QueueHandle_t xQueue )\n{\n    Queue_t * const pxQueue = xQueue;\n\n    traceENTER_vQueueDelete( xQueue );\n\n    configASSERT( pxQueue );\n    traceQUEUE_DELETE( pxQueue );\n\n    #if ( configQUEUE_REGISTRY_SIZE > 0 )\n    {\n        vQueueUnregisterQueue( pxQueue );\n    }\n    #endif\n\n    #if ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 0 ) )\n    {\n        /* The queue can only have been allocated dynamically - free it\n         * again. */\n        vPortFree( pxQueue );\n    }\n    #elif ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )\n    {\n        /* The queue could have been allocated statically or dynamically, so\n         * check before attempting to free the memory. */\n        if( pxQueue->ucStaticallyAllocated == ( uint8_t ) pdFALSE )\n        {\n            vPortFree( pxQueue );\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n    }\n    #else /* if ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 0 ) ) */\n    {\n        /* The queue must have been statically allocated, so is not going to be\n         * deleted.  Avoid compiler warnings about the unused parameter. */\n        ( void ) pxQueue;\n    }\n    #endif /* configSUPPORT_DYNAMIC_ALLOCATION */\n\n    traceRETURN_vQueueDelete();\n}\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TRACE_FACILITY == 1 )\n\n    UBaseType_t uxQueueGetQueueNumber( QueueHandle_t xQueue )\n    {\n        traceENTER_uxQueueGetQueueNumber( xQueue );\n\n        traceRETURN_uxQueueGetQueueNumber( ( ( Queue_t * ) xQueue )->uxQueueNumber );\n\n        return ( ( Queue_t * ) xQueue )->uxQueueNumber;\n    }\n\n#endif /* configUSE_TRACE_FACILITY */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TRACE_FACILITY == 1 )\n\n    void vQueueSetQueueNumber( QueueHandle_t xQueue,\n                               UBaseType_t uxQueueNumber )\n    {\n        traceENTER_vQueueSetQueueNumber( xQueue, uxQueueNumber );\n\n        ( ( Queue_t * ) xQueue )->uxQueueNumber = uxQueueNumber;\n\n        traceRETURN_vQueueSetQueueNumber();\n    }\n\n#endif /* configUSE_TRACE_FACILITY */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TRACE_FACILITY == 1 )\n\n    uint8_t ucQueueGetQueueType( QueueHandle_t xQueue )\n    {\n        traceENTER_ucQueueGetQueueType( xQueue );\n\n        traceRETURN_ucQueueGetQueueType( ( ( Queue_t * ) xQueue )->ucQueueType );\n\n        return ( ( Queue_t * ) xQueue )->ucQueueType;\n    }\n\n#endif /* configUSE_TRACE_FACILITY */\n/*-----------------------------------------------------------*/\n\nUBaseType_t uxQueueGetQueueItemSize( QueueHandle_t xQueue ) /* PRIVILEGED_FUNCTION */\n{\n    traceENTER_uxQueueGetQueueItemSize( xQueue );\n\n    traceRETURN_uxQueueGetQueueItemSize( ( ( Queue_t * ) xQueue )->uxItemSize );\n\n    return ( ( Queue_t * ) xQueue )->uxItemSize;\n}\n/*-----------------------------------------------------------*/\n\nUBaseType_t uxQueueGetQueueLength( QueueHandle_t xQueue ) /* PRIVILEGED_FUNCTION */\n{\n    traceENTER_uxQueueGetQueueLength( xQueue );\n\n    traceRETURN_uxQueueGetQueueLength( ( ( Queue_t * ) xQueue )->uxLength );\n\n    return ( ( Queue_t * ) xQueue )->uxLength;\n}\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_MUTEXES == 1 )\n\n    static UBaseType_t prvGetDisinheritPriorityAfterTimeout( const Queue_t * const pxQueue )\n    {\n        UBaseType_t uxHighestPriorityOfWaitingTasks;\n\n        /* If a task waiting for a mutex causes the mutex holder to inherit a\n         * priority, but the waiting task times out, then the holder should\n         * disinherit the priority - but only down to the highest priority of any\n         * other tasks that are waiting for the same mutex.  For this purpose,\n         * return the priority of the highest priority task that is waiting for the\n         * mutex. */\n        if( listCURRENT_LIST_LENGTH( &( pxQueue->xTasksWaitingToReceive ) ) > 0U )\n        {\n            uxHighestPriorityOfWaitingTasks = ( UBaseType_t ) ( ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) listGET_ITEM_VALUE_OF_HEAD_ENTRY( &( pxQueue->xTasksWaitingToReceive ) ) );\n        }\n        else\n        {\n            uxHighestPriorityOfWaitingTasks = tskIDLE_PRIORITY;\n        }\n\n        return uxHighestPriorityOfWaitingTasks;\n    }\n\n#endif /* configUSE_MUTEXES */\n/*-----------------------------------------------------------*/\n\nstatic BaseType_t prvCopyDataToQueue( Queue_t * const pxQueue,\n                                      const void * pvItemToQueue,\n                                      const BaseType_t xPosition )\n{\n    BaseType_t xReturn = pdFALSE;\n    UBaseType_t uxMessagesWaiting;\n\n    /* This function is called from a critical section. */\n\n    uxMessagesWaiting = pxQueue->uxMessagesWaiting;\n\n    if( pxQueue->uxItemSize == ( UBaseType_t ) 0 )\n    {\n        #if ( configUSE_MUTEXES == 1 )\n        {\n            if( pxQueue->uxQueueType == queueQUEUE_IS_MUTEX )\n            {\n                /* The mutex is no longer being held. */\n                xReturn = xTaskPriorityDisinherit( pxQueue->u.xSemaphore.xMutexHolder );\n                pxQueue->u.xSemaphore.xMutexHolder = NULL;\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        #endif /* configUSE_MUTEXES */\n    }\n    else if( xPosition == queueSEND_TO_BACK )\n    {\n        ( void ) memcpy( ( void * ) pxQueue->pcWriteTo, pvItemToQueue, ( size_t ) pxQueue->uxItemSize );\n        pxQueue->pcWriteTo += pxQueue->uxItemSize;\n\n        if( pxQueue->pcWriteTo >= pxQueue->u.xQueue.pcTail )\n        {\n            pxQueue->pcWriteTo = pxQueue->pcHead;\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n    }\n    else\n    {\n        ( void ) memcpy( ( void * ) pxQueue->u.xQueue.pcReadFrom, pvItemToQueue, ( size_t ) pxQueue->uxItemSize );\n        pxQueue->u.xQueue.pcReadFrom -= pxQueue->uxItemSize;\n\n        if( pxQueue->u.xQueue.pcReadFrom < pxQueue->pcHead )\n        {\n            pxQueue->u.xQueue.pcReadFrom = ( pxQueue->u.xQueue.pcTail - pxQueue->uxItemSize );\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        if( xPosition == queueOVERWRITE )\n        {\n            if( uxMessagesWaiting > ( UBaseType_t ) 0 )\n            {\n                /* An item is not being added but overwritten, so subtract\n                 * one from the recorded number of items in the queue so when\n                 * one is added again below the number of recorded items remains\n                 * correct. */\n                --uxMessagesWaiting;\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n    }\n\n    pxQueue->uxMessagesWaiting = ( UBaseType_t ) ( uxMessagesWaiting + ( UBaseType_t ) 1 );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nstatic void prvCopyDataFromQueue( Queue_t * const pxQueue,\n                                  void * const pvBuffer )\n{\n    if( pxQueue->uxItemSize != ( UBaseType_t ) 0 )\n    {\n        pxQueue->u.xQueue.pcReadFrom += pxQueue->uxItemSize;\n\n        if( pxQueue->u.xQueue.pcReadFrom >= pxQueue->u.xQueue.pcTail )\n        {\n            pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead;\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.xQueue.pcReadFrom, ( size_t ) pxQueue->uxItemSize );\n    }\n}\n/*-----------------------------------------------------------*/\n\nstatic void prvUnlockQueue( Queue_t * const pxQueue )\n{\n    /* THIS FUNCTION MUST BE CALLED WITH THE SCHEDULER SUSPENDED. */\n\n    /* The lock counts contains the number of extra data items placed or\n     * removed from the queue while the queue was locked.  When a queue is\n     * locked items can be added or removed, but the event lists cannot be\n     * updated. */\n    taskENTER_CRITICAL();\n    {\n        int8_t cTxLock = pxQueue->cTxLock;\n\n        /* See if data was added to the queue while it was locked. */\n        while( cTxLock > queueLOCKED_UNMODIFIED )\n        {\n            /* Data was posted while the queue was locked.  Are any tasks\n             * blocked waiting for data to become available? */\n            #if ( configUSE_QUEUE_SETS == 1 )\n            {\n                if( pxQueue->pxQueueSetContainer != NULL )\n                {\n                    if( prvNotifyQueueSetContainer( pxQueue ) != pdFALSE )\n                    {\n                        /* The queue is a member of a queue set, and posting to\n                         * the queue set caused a higher priority task to unblock.\n                         * A context switch is required. */\n                        vTaskMissedYield();\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    /* Tasks that are removed from the event list will get\n                     * added to the pending ready list as the scheduler is still\n                     * suspended. */\n                    if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )\n                    {\n                        if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )\n                        {\n                            /* The task waiting has a higher priority so record that a\n                             * context switch is required. */\n                            vTaskMissedYield();\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n                    else\n                    {\n                        break;\n                    }\n                }\n            }\n            #else /* configUSE_QUEUE_SETS */\n            {\n                /* Tasks that are removed from the event list will get added to\n                 * the pending ready list as the scheduler is still suspended. */\n                if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )\n                {\n                    if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )\n                    {\n                        /* The task waiting has a higher priority so record that\n                         * a context switch is required. */\n                        vTaskMissedYield();\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    break;\n                }\n            }\n            #endif /* configUSE_QUEUE_SETS */\n\n            --cTxLock;\n        }\n\n        pxQueue->cTxLock = queueUNLOCKED;\n    }\n    taskEXIT_CRITICAL();\n\n    /* Do the same for the Rx lock. */\n    taskENTER_CRITICAL();\n    {\n        int8_t cRxLock = pxQueue->cRxLock;\n\n        while( cRxLock > queueLOCKED_UNMODIFIED )\n        {\n            if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )\n            {\n                if( xTaskRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )\n                {\n                    vTaskMissedYield();\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n\n                --cRxLock;\n            }\n            else\n            {\n                break;\n            }\n        }\n\n        pxQueue->cRxLock = queueUNLOCKED;\n    }\n    taskEXIT_CRITICAL();\n}\n/*-----------------------------------------------------------*/\n\nstatic BaseType_t prvIsQueueEmpty( const Queue_t * pxQueue )\n{\n    BaseType_t xReturn;\n\n    taskENTER_CRITICAL();\n    {\n        if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0 )\n        {\n            xReturn = pdTRUE;\n        }\n        else\n        {\n            xReturn = pdFALSE;\n        }\n    }\n    taskEXIT_CRITICAL();\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue )\n{\n    BaseType_t xReturn;\n    Queue_t * const pxQueue = xQueue;\n\n    traceENTER_xQueueIsQueueEmptyFromISR( xQueue );\n\n    configASSERT( pxQueue );\n\n    if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0 )\n    {\n        xReturn = pdTRUE;\n    }\n    else\n    {\n        xReturn = pdFALSE;\n    }\n\n    traceRETURN_xQueueIsQueueEmptyFromISR( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nstatic BaseType_t prvIsQueueFull( const Queue_t * pxQueue )\n{\n    BaseType_t xReturn;\n\n    taskENTER_CRITICAL();\n    {\n        if( pxQueue->uxMessagesWaiting == pxQueue->uxLength )\n        {\n            xReturn = pdTRUE;\n        }\n        else\n        {\n            xReturn = pdFALSE;\n        }\n    }\n    taskEXIT_CRITICAL();\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue )\n{\n    BaseType_t xReturn;\n    Queue_t * const pxQueue = xQueue;\n\n    traceENTER_xQueueIsQueueFullFromISR( xQueue );\n\n    configASSERT( pxQueue );\n\n    if( pxQueue->uxMessagesWaiting == pxQueue->uxLength )\n    {\n        xReturn = pdTRUE;\n    }\n    else\n    {\n        xReturn = pdFALSE;\n    }\n\n    traceRETURN_xQueueIsQueueFullFromISR( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_CO_ROUTINES == 1 )\n\n    BaseType_t xQueueCRSend( QueueHandle_t xQueue,\n                             const void * pvItemToQueue,\n                             TickType_t xTicksToWait )\n    {\n        BaseType_t xReturn;\n        Queue_t * const pxQueue = xQueue;\n\n        traceENTER_xQueueCRSend( xQueue, pvItemToQueue, xTicksToWait );\n\n        /* If the queue is already full we may have to block.  A critical section\n         * is required to prevent an interrupt removing something from the queue\n         * between the check to see if the queue is full and blocking on the queue. */\n        portDISABLE_INTERRUPTS();\n        {\n            if( prvIsQueueFull( pxQueue ) != pdFALSE )\n            {\n                /* The queue is full - do we want to block or just leave without\n                 * posting? */\n                if( xTicksToWait > ( TickType_t ) 0 )\n                {\n                    /* As this is called from a coroutine we cannot block directly, but\n                     * return indicating that we need to block. */\n                    vCoRoutineAddToDelayedList( xTicksToWait, &( pxQueue->xTasksWaitingToSend ) );\n                    portENABLE_INTERRUPTS();\n                    return errQUEUE_BLOCKED;\n                }\n                else\n                {\n                    portENABLE_INTERRUPTS();\n                    return errQUEUE_FULL;\n                }\n            }\n        }\n        portENABLE_INTERRUPTS();\n\n        portDISABLE_INTERRUPTS();\n        {\n            if( pxQueue->uxMessagesWaiting < pxQueue->uxLength )\n            {\n                /* There is room in the queue, copy the data into the queue. */\n                prvCopyDataToQueue( pxQueue, pvItemToQueue, queueSEND_TO_BACK );\n                xReturn = pdPASS;\n\n                /* Were any co-routines waiting for data to become available? */\n                if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )\n                {\n                    /* In this instance the co-routine could be placed directly\n                     * into the ready list as we are within a critical section.\n                     * Instead the same pending ready list mechanism is used as if\n                     * the event were caused from within an interrupt. */\n                    if( xCoRoutineRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )\n                    {\n                        /* The co-routine waiting has a higher priority so record\n                         * that a yield might be appropriate. */\n                        xReturn = errQUEUE_YIELD;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                xReturn = errQUEUE_FULL;\n            }\n        }\n        portENABLE_INTERRUPTS();\n\n        traceRETURN_xQueueCRSend( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_CO_ROUTINES */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_CO_ROUTINES == 1 )\n\n    BaseType_t xQueueCRReceive( QueueHandle_t xQueue,\n                                void * pvBuffer,\n                                TickType_t xTicksToWait )\n    {\n        BaseType_t xReturn;\n        Queue_t * const pxQueue = xQueue;\n\n        traceENTER_xQueueCRReceive( xQueue, pvBuffer, xTicksToWait );\n\n        /* If the queue is already empty we may have to block.  A critical section\n         * is required to prevent an interrupt adding something to the queue\n         * between the check to see if the queue is empty and blocking on the queue. */\n        portDISABLE_INTERRUPTS();\n        {\n            if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0 )\n            {\n                /* There are no messages in the queue, do we want to block or just\n                 * leave with nothing? */\n                if( xTicksToWait > ( TickType_t ) 0 )\n                {\n                    /* As this is a co-routine we cannot block directly, but return\n                     * indicating that we need to block. */\n                    vCoRoutineAddToDelayedList( xTicksToWait, &( pxQueue->xTasksWaitingToReceive ) );\n                    portENABLE_INTERRUPTS();\n                    return errQUEUE_BLOCKED;\n                }\n                else\n                {\n                    portENABLE_INTERRUPTS();\n                    return errQUEUE_FULL;\n                }\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        portENABLE_INTERRUPTS();\n\n        portDISABLE_INTERRUPTS();\n        {\n            if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 )\n            {\n                /* Data is available from the queue. */\n                pxQueue->u.xQueue.pcReadFrom += pxQueue->uxItemSize;\n\n                if( pxQueue->u.xQueue.pcReadFrom >= pxQueue->u.xQueue.pcTail )\n                {\n                    pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead;\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n\n                --( pxQueue->uxMessagesWaiting );\n                ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.xQueue.pcReadFrom, ( unsigned ) pxQueue->uxItemSize );\n\n                xReturn = pdPASS;\n\n                /* Were any co-routines waiting for space to become available? */\n                if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )\n                {\n                    /* In this instance the co-routine could be placed directly\n                     * into the ready list as we are within a critical section.\n                     * Instead the same pending ready list mechanism is used as if\n                     * the event were caused from within an interrupt. */\n                    if( xCoRoutineRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )\n                    {\n                        xReturn = errQUEUE_YIELD;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                xReturn = pdFAIL;\n            }\n        }\n        portENABLE_INTERRUPTS();\n\n        traceRETURN_xQueueCRReceive( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_CO_ROUTINES */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_CO_ROUTINES == 1 )\n\n    BaseType_t xQueueCRSendFromISR( QueueHandle_t xQueue,\n                                    const void * pvItemToQueue,\n                                    BaseType_t xCoRoutinePreviouslyWoken )\n    {\n        Queue_t * const pxQueue = xQueue;\n\n        traceENTER_xQueueCRSendFromISR( xQueue, pvItemToQueue, xCoRoutinePreviouslyWoken );\n\n        /* Cannot block within an ISR so if there is no space on the queue then\n         * exit without doing anything. */\n        if( pxQueue->uxMessagesWaiting < pxQueue->uxLength )\n        {\n            prvCopyDataToQueue( pxQueue, pvItemToQueue, queueSEND_TO_BACK );\n\n            /* We only want to wake one co-routine per ISR, so check that a\n             * co-routine has not already been woken. */\n            if( xCoRoutinePreviouslyWoken == pdFALSE )\n            {\n                if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToReceive ) ) == pdFALSE )\n                {\n                    if( xCoRoutineRemoveFromEventList( &( pxQueue->xTasksWaitingToReceive ) ) != pdFALSE )\n                    {\n                        return pdTRUE;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_xQueueCRSendFromISR( xCoRoutinePreviouslyWoken );\n\n        return xCoRoutinePreviouslyWoken;\n    }\n\n#endif /* configUSE_CO_ROUTINES */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_CO_ROUTINES == 1 )\n\n    BaseType_t xQueueCRReceiveFromISR( QueueHandle_t xQueue,\n                                       void * pvBuffer,\n                                       BaseType_t * pxCoRoutineWoken )\n    {\n        BaseType_t xReturn;\n        Queue_t * const pxQueue = xQueue;\n\n        traceENTER_xQueueCRReceiveFromISR( xQueue, pvBuffer, pxCoRoutineWoken );\n\n        /* We cannot block from an ISR, so check there is data available. If\n         * not then just leave without doing anything. */\n        if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 )\n        {\n            /* Copy the data from the queue. */\n            pxQueue->u.xQueue.pcReadFrom += pxQueue->uxItemSize;\n\n            if( pxQueue->u.xQueue.pcReadFrom >= pxQueue->u.xQueue.pcTail )\n            {\n                pxQueue->u.xQueue.pcReadFrom = pxQueue->pcHead;\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n\n            --( pxQueue->uxMessagesWaiting );\n            ( void ) memcpy( ( void * ) pvBuffer, ( void * ) pxQueue->u.xQueue.pcReadFrom, ( unsigned ) pxQueue->uxItemSize );\n\n            if( ( *pxCoRoutineWoken ) == pdFALSE )\n            {\n                if( listLIST_IS_EMPTY( &( pxQueue->xTasksWaitingToSend ) ) == pdFALSE )\n                {\n                    if( xCoRoutineRemoveFromEventList( &( pxQueue->xTasksWaitingToSend ) ) != pdFALSE )\n                    {\n                        *pxCoRoutineWoken = pdTRUE;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n\n            xReturn = pdPASS;\n        }\n        else\n        {\n            xReturn = pdFAIL;\n        }\n\n        traceRETURN_xQueueCRReceiveFromISR( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_CO_ROUTINES */\n/*-----------------------------------------------------------*/\n\n#if ( configQUEUE_REGISTRY_SIZE > 0 )\n\n    void vQueueAddToRegistry( QueueHandle_t xQueue,\n                              const char * pcQueueName )\n    {\n        UBaseType_t ux;\n        QueueRegistryItem_t * pxEntryToWrite = NULL;\n\n        traceENTER_vQueueAddToRegistry( xQueue, pcQueueName );\n\n        configASSERT( xQueue );\n\n        if( pcQueueName != NULL )\n        {\n            /* See if there is an empty space in the registry.  A NULL name denotes\n             * a free slot. */\n            for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )\n            {\n                /* Replace an existing entry if the queue is already in the registry. */\n                if( xQueue == xQueueRegistry[ ux ].xHandle )\n                {\n                    pxEntryToWrite = &( xQueueRegistry[ ux ] );\n                    break;\n                }\n                /* Otherwise, store in the next empty location */\n                else if( ( pxEntryToWrite == NULL ) && ( xQueueRegistry[ ux ].pcQueueName == NULL ) )\n                {\n                    pxEntryToWrite = &( xQueueRegistry[ ux ] );\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n        }\n\n        if( pxEntryToWrite != NULL )\n        {\n            /* Store the information on this queue. */\n            pxEntryToWrite->pcQueueName = pcQueueName;\n            pxEntryToWrite->xHandle = xQueue;\n\n            traceQUEUE_REGISTRY_ADD( xQueue, pcQueueName );\n        }\n\n        traceRETURN_vQueueAddToRegistry();\n    }\n\n#endif /* configQUEUE_REGISTRY_SIZE */\n/*-----------------------------------------------------------*/\n\n#if ( configQUEUE_REGISTRY_SIZE > 0 )\n\n    const char * pcQueueGetName( QueueHandle_t xQueue )\n    {\n        UBaseType_t ux;\n        const char * pcReturn = NULL;\n\n        traceENTER_pcQueueGetName( xQueue );\n\n        configASSERT( xQueue );\n\n        /* Note there is nothing here to protect against another task adding or\n         * removing entries from the registry while it is being searched. */\n\n        for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )\n        {\n            if( xQueueRegistry[ ux ].xHandle == xQueue )\n            {\n                pcReturn = xQueueRegistry[ ux ].pcQueueName;\n                break;\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n\n        traceRETURN_pcQueueGetName( pcReturn );\n\n        return pcReturn;\n    }\n\n#endif /* configQUEUE_REGISTRY_SIZE */\n/*-----------------------------------------------------------*/\n\n#if ( configQUEUE_REGISTRY_SIZE > 0 )\n\n    void vQueueUnregisterQueue( QueueHandle_t xQueue )\n    {\n        UBaseType_t ux;\n\n        traceENTER_vQueueUnregisterQueue( xQueue );\n\n        configASSERT( xQueue );\n\n        /* See if the handle of the queue being unregistered in actually in the\n         * registry. */\n        for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )\n        {\n            if( xQueueRegistry[ ux ].xHandle == xQueue )\n            {\n                /* Set the name to NULL to show that this slot if free again. */\n                xQueueRegistry[ ux ].pcQueueName = NULL;\n\n                /* Set the handle to NULL to ensure the same queue handle cannot\n                 * appear in the registry twice if it is added, removed, then\n                 * added again. */\n                xQueueRegistry[ ux ].xHandle = ( QueueHandle_t ) 0;\n                break;\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n\n        traceRETURN_vQueueUnregisterQueue();\n    }\n\n#endif /* configQUEUE_REGISTRY_SIZE */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TIMERS == 1 )\n\n    void vQueueWaitForMessageRestricted( QueueHandle_t xQueue,\n                                         TickType_t xTicksToWait,\n                                         const BaseType_t xWaitIndefinitely )\n    {\n        Queue_t * const pxQueue = xQueue;\n\n        traceENTER_vQueueWaitForMessageRestricted( xQueue, xTicksToWait, xWaitIndefinitely );\n\n        /* This function should not be called by application code hence the\n         * 'Restricted' in its name.  It is not part of the public API.  It is\n         * designed for use by kernel code, and has special calling requirements.\n         * It can result in vListInsert() being called on a list that can only\n         * possibly ever have one item in it, so the list will be fast, but even\n         * so it should be called with the scheduler locked and not from a critical\n         * section. */\n\n        /* Only do anything if there are no messages in the queue.  This function\n         *  will not actually cause the task to block, just place it on a blocked\n         *  list.  It will not block until the scheduler is unlocked - at which\n         *  time a yield will be performed.  If an item is added to the queue while\n         *  the queue is locked, and the calling task blocks on the queue, then the\n         *  calling task will be immediately unblocked when the queue is unlocked. */\n        prvLockQueue( pxQueue );\n\n        if( pxQueue->uxMessagesWaiting == ( UBaseType_t ) 0U )\n        {\n            /* There is nothing in the queue, block for the specified period. */\n            vTaskPlaceOnEventListRestricted( &( pxQueue->xTasksWaitingToReceive ), xTicksToWait, xWaitIndefinitely );\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        prvUnlockQueue( pxQueue );\n\n        traceRETURN_vQueueWaitForMessageRestricted();\n    }\n\n#endif /* configUSE_TIMERS */\n/*-----------------------------------------------------------*/\n\n#if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )\n\n    QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength )\n    {\n        QueueSetHandle_t pxQueue;\n\n        traceENTER_xQueueCreateSet( uxEventQueueLength );\n\n        pxQueue = xQueueGenericCreate( uxEventQueueLength, ( UBaseType_t ) sizeof( Queue_t * ), queueQUEUE_TYPE_SET );\n\n        traceRETURN_xQueueCreateSet( pxQueue );\n\n        return pxQueue;\n    }\n\n#endif /* configUSE_QUEUE_SETS */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_QUEUE_SETS == 1 )\n\n    BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore,\n                               QueueSetHandle_t xQueueSet )\n    {\n        BaseType_t xReturn;\n\n        traceENTER_xQueueAddToSet( xQueueOrSemaphore, xQueueSet );\n\n        taskENTER_CRITICAL();\n        {\n            if( ( ( Queue_t * ) xQueueOrSemaphore )->pxQueueSetContainer != NULL )\n            {\n                /* Cannot add a queue/semaphore to more than one queue set. */\n                xReturn = pdFAIL;\n            }\n            else if( ( ( Queue_t * ) xQueueOrSemaphore )->uxMessagesWaiting != ( UBaseType_t ) 0 )\n            {\n                /* Cannot add a queue/semaphore to a queue set if there are already\n                 * items in the queue/semaphore. */\n                xReturn = pdFAIL;\n            }\n            else\n            {\n                ( ( Queue_t * ) xQueueOrSemaphore )->pxQueueSetContainer = xQueueSet;\n                xReturn = pdPASS;\n            }\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_xQueueAddToSet( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_QUEUE_SETS */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_QUEUE_SETS == 1 )\n\n    BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore,\n                                    QueueSetHandle_t xQueueSet )\n    {\n        BaseType_t xReturn;\n        Queue_t * const pxQueueOrSemaphore = ( Queue_t * ) xQueueOrSemaphore;\n\n        traceENTER_xQueueRemoveFromSet( xQueueOrSemaphore, xQueueSet );\n\n        if( pxQueueOrSemaphore->pxQueueSetContainer != xQueueSet )\n        {\n            /* The queue was not a member of the set. */\n            xReturn = pdFAIL;\n        }\n        else if( pxQueueOrSemaphore->uxMessagesWaiting != ( UBaseType_t ) 0 )\n        {\n            /* It is dangerous to remove a queue from a set when the queue is\n             * not empty because the queue set will still hold pending events for\n             * the queue. */\n            xReturn = pdFAIL;\n        }\n        else\n        {\n            taskENTER_CRITICAL();\n            {\n                /* The queue is no longer contained in the set. */\n                pxQueueOrSemaphore->pxQueueSetContainer = NULL;\n            }\n            taskEXIT_CRITICAL();\n            xReturn = pdPASS;\n        }\n\n        traceRETURN_xQueueRemoveFromSet( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_QUEUE_SETS */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_QUEUE_SETS == 1 )\n\n    QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet,\n                                                TickType_t const xTicksToWait )\n    {\n        QueueSetMemberHandle_t xReturn = NULL;\n\n        traceENTER_xQueueSelectFromSet( xQueueSet, xTicksToWait );\n\n        ( void ) xQueueReceive( ( QueueHandle_t ) xQueueSet, &xReturn, xTicksToWait );\n\n        traceRETURN_xQueueSelectFromSet( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_QUEUE_SETS */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_QUEUE_SETS == 1 )\n\n    QueueSetMemberHandle_t xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet )\n    {\n        QueueSetMemberHandle_t xReturn = NULL;\n\n        traceENTER_xQueueSelectFromSetFromISR( xQueueSet );\n\n        ( void ) xQueueReceiveFromISR( ( QueueHandle_t ) xQueueSet, &xReturn, NULL );\n\n        traceRETURN_xQueueSelectFromSetFromISR( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_QUEUE_SETS */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_QUEUE_SETS == 1 )\n\n    static BaseType_t prvNotifyQueueSetContainer( const Queue_t * const pxQueue )\n    {\n        Queue_t * pxQueueSetContainer = pxQueue->pxQueueSetContainer;\n        BaseType_t xReturn = pdFALSE;\n\n        /* This function must be called form a critical section. */\n\n        /* The following line is not reachable in unit tests because every call\n         * to prvNotifyQueueSetContainer is preceded by a check that\n         * pxQueueSetContainer != NULL */\n        configASSERT( pxQueueSetContainer ); /* LCOV_EXCL_BR_LINE */\n        configASSERT( pxQueueSetContainer->uxMessagesWaiting < pxQueueSetContainer->uxLength );\n\n        if( pxQueueSetContainer->uxMessagesWaiting < pxQueueSetContainer->uxLength )\n        {\n            const int8_t cTxLock = pxQueueSetContainer->cTxLock;\n\n            traceQUEUE_SET_SEND( pxQueueSetContainer );\n\n            /* The data copied is the handle of the queue that contains data. */\n            xReturn = prvCopyDataToQueue( pxQueueSetContainer, &pxQueue, queueSEND_TO_BACK );\n\n            if( cTxLock == queueUNLOCKED )\n            {\n                if( listLIST_IS_EMPTY( &( pxQueueSetContainer->xTasksWaitingToReceive ) ) == pdFALSE )\n                {\n                    if( xTaskRemoveFromEventList( &( pxQueueSetContainer->xTasksWaitingToReceive ) ) != pdFALSE )\n                    {\n                        /* The task waiting has a higher priority. */\n                        xReturn = pdTRUE;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                prvIncrementQueueTxLock( pxQueueSetContainer, cTxLock );\n            }\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        return xReturn;\n    }\n\n#endif /* configUSE_QUEUE_SETS */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/stream_buffer.c",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n/* Standard includes. */\n#include <string.h>\n\n/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining\n * all the API functions to use the MPU wrappers.  That should only be done when\n * task.h is included from an application file. */\n#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE\n\n/* FreeRTOS includes. */\n#include \"FreeRTOS.h\"\n#include \"task.h\"\n#include \"stream_buffer.h\"\n\n#if ( configUSE_TASK_NOTIFICATIONS != 1 )\n    #error configUSE_TASK_NOTIFICATIONS must be set to 1 to build stream_buffer.c\n#endif\n\n#if ( INCLUDE_xTaskGetCurrentTaskHandle != 1 )\n    #error INCLUDE_xTaskGetCurrentTaskHandle must be set to 1 to build stream_buffer.c\n#endif\n\n/* The MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined\n * for the header files above, but not in this file, in order to generate the\n * correct privileged Vs unprivileged linkage and placement. */\n#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE\n\n/* This entire source file will be skipped if the application is not configured\n * to include stream buffer functionality. This #if is closed at the very bottom\n * of this file. If you want to include stream buffers then ensure\n * configUSE_STREAM_BUFFERS is set to 1 in FreeRTOSConfig.h. */\n#if ( configUSE_STREAM_BUFFERS == 1 )\n\n/* If the user has not provided application specific Rx notification macros,\n * or #defined the notification macros away, then provide default implementations\n * that uses task notifications. */\n    #ifndef sbRECEIVE_COMPLETED\n        #define sbRECEIVE_COMPLETED( pxStreamBuffer )                                 \\\n    do                                                                                \\\n    {                                                                                 \\\n        vTaskSuspendAll();                                                            \\\n        {                                                                             \\\n            if( ( pxStreamBuffer )->xTaskWaitingToSend != NULL )                      \\\n            {                                                                         \\\n                ( void ) xTaskNotifyIndexed( ( pxStreamBuffer )->xTaskWaitingToSend,  \\\n                                             ( pxStreamBuffer )->uxNotificationIndex, \\\n                                             ( uint32_t ) 0,                          \\\n                                             eNoAction );                             \\\n                ( pxStreamBuffer )->xTaskWaitingToSend = NULL;                        \\\n            }                                                                         \\\n        }                                                                             \\\n        ( void ) xTaskResumeAll();                                                    \\\n    } while( 0 )\n    #endif /* sbRECEIVE_COMPLETED */\n\n/* If user has provided a per-instance receive complete callback, then\n * invoke the callback else use the receive complete macro which is provided by default for all instances.\n */\n    #if ( configUSE_SB_COMPLETED_CALLBACK == 1 )\n        #define prvRECEIVE_COMPLETED( pxStreamBuffer )                                           \\\n    do {                                                                                         \\\n        if( ( pxStreamBuffer )->pxReceiveCompletedCallback != NULL )                             \\\n        {                                                                                        \\\n            ( pxStreamBuffer )->pxReceiveCompletedCallback( ( pxStreamBuffer ), pdFALSE, NULL ); \\\n        }                                                                                        \\\n        else                                                                                     \\\n        {                                                                                        \\\n            sbRECEIVE_COMPLETED( ( pxStreamBuffer ) );                                           \\\n        }                                                                                        \\\n    } while( 0 )\n    #else /* if ( configUSE_SB_COMPLETED_CALLBACK == 1 ) */\n        #define prvRECEIVE_COMPLETED( pxStreamBuffer )    sbRECEIVE_COMPLETED( ( pxStreamBuffer ) )\n    #endif /* if ( configUSE_SB_COMPLETED_CALLBACK == 1 ) */\n\n    #ifndef sbRECEIVE_COMPLETED_FROM_ISR\n        #define sbRECEIVE_COMPLETED_FROM_ISR( pxStreamBuffer,                                \\\n                                              pxHigherPriorityTaskWoken )                    \\\n    do {                                                                                     \\\n        UBaseType_t uxSavedInterruptStatus;                                                  \\\n                                                                                             \\\n        uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();                              \\\n        {                                                                                    \\\n            if( ( pxStreamBuffer )->xTaskWaitingToSend != NULL )                             \\\n            {                                                                                \\\n                ( void ) xTaskNotifyIndexedFromISR( ( pxStreamBuffer )->xTaskWaitingToSend,  \\\n                                                    ( pxStreamBuffer )->uxNotificationIndex, \\\n                                                    ( uint32_t ) 0,                          \\\n                                                    eNoAction,                               \\\n                                                    ( pxHigherPriorityTaskWoken ) );         \\\n                ( pxStreamBuffer )->xTaskWaitingToSend = NULL;                               \\\n            }                                                                                \\\n        }                                                                                    \\\n        taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );                                \\\n    } while( 0 )\n    #endif /* sbRECEIVE_COMPLETED_FROM_ISR */\n\n    #if ( configUSE_SB_COMPLETED_CALLBACK == 1 )\n        #define prvRECEIVE_COMPLETED_FROM_ISR( pxStreamBuffer,                                                           \\\n                                               pxHigherPriorityTaskWoken )                                               \\\n    do {                                                                                                                 \\\n        if( ( pxStreamBuffer )->pxReceiveCompletedCallback != NULL )                                                     \\\n        {                                                                                                                \\\n            ( pxStreamBuffer )->pxReceiveCompletedCallback( ( pxStreamBuffer ), pdTRUE, ( pxHigherPriorityTaskWoken ) ); \\\n        }                                                                                                                \\\n        else                                                                                                             \\\n        {                                                                                                                \\\n            sbRECEIVE_COMPLETED_FROM_ISR( ( pxStreamBuffer ), ( pxHigherPriorityTaskWoken ) );                           \\\n        }                                                                                                                \\\n    } while( 0 )\n    #else /* if ( configUSE_SB_COMPLETED_CALLBACK == 1 ) */\n        #define prvRECEIVE_COMPLETED_FROM_ISR( pxStreamBuffer, pxHigherPriorityTaskWoken ) \\\n    sbRECEIVE_COMPLETED_FROM_ISR( ( pxStreamBuffer ), ( pxHigherPriorityTaskWoken ) )\n    #endif /* if ( configUSE_SB_COMPLETED_CALLBACK == 1 ) */\n\n/* If the user has not provided an application specific Tx notification macro,\n * or #defined the notification macro away, then provide a default\n * implementation that uses task notifications.\n */\n    #ifndef sbSEND_COMPLETED\n        #define sbSEND_COMPLETED( pxStreamBuffer )                                  \\\n    vTaskSuspendAll();                                                              \\\n    {                                                                               \\\n        if( ( pxStreamBuffer )->xTaskWaitingToReceive != NULL )                     \\\n        {                                                                           \\\n            ( void ) xTaskNotifyIndexed( ( pxStreamBuffer )->xTaskWaitingToReceive, \\\n                                         ( pxStreamBuffer )->uxNotificationIndex,   \\\n                                         ( uint32_t ) 0,                            \\\n                                         eNoAction );                               \\\n            ( pxStreamBuffer )->xTaskWaitingToReceive = NULL;                       \\\n        }                                                                           \\\n    }                                                                               \\\n    ( void ) xTaskResumeAll()\n    #endif /* sbSEND_COMPLETED */\n\n/* If user has provided a per-instance send completed callback, then\n * invoke the callback else use the send complete macro which is provided by default for all instances.\n */\n    #if ( configUSE_SB_COMPLETED_CALLBACK == 1 )\n        #define prvSEND_COMPLETED( pxStreamBuffer )                                           \\\n    do {                                                                                      \\\n        if( ( pxStreamBuffer )->pxSendCompletedCallback != NULL )                             \\\n        {                                                                                     \\\n            ( pxStreamBuffer )->pxSendCompletedCallback( ( pxStreamBuffer ), pdFALSE, NULL ); \\\n        }                                                                                     \\\n        else                                                                                  \\\n        {                                                                                     \\\n            sbSEND_COMPLETED( ( pxStreamBuffer ) );                                           \\\n        }                                                                                     \\\n    } while( 0 )\n    #else /* if ( configUSE_SB_COMPLETED_CALLBACK == 1 ) */\n        #define prvSEND_COMPLETED( pxStreamBuffer )    sbSEND_COMPLETED( ( pxStreamBuffer ) )\n    #endif /* if ( configUSE_SB_COMPLETED_CALLBACK == 1 ) */\n\n\n    #ifndef sbSEND_COMPLETE_FROM_ISR\n        #define sbSEND_COMPLETE_FROM_ISR( pxStreamBuffer, pxHigherPriorityTaskWoken )          \\\n    do {                                                                                       \\\n        UBaseType_t uxSavedInterruptStatus;                                                    \\\n                                                                                               \\\n        uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();                                \\\n        {                                                                                      \\\n            if( ( pxStreamBuffer )->xTaskWaitingToReceive != NULL )                            \\\n            {                                                                                  \\\n                ( void ) xTaskNotifyIndexedFromISR( ( pxStreamBuffer )->xTaskWaitingToReceive, \\\n                                                    ( pxStreamBuffer )->uxNotificationIndex,   \\\n                                                    ( uint32_t ) 0,                            \\\n                                                    eNoAction,                                 \\\n                                                    ( pxHigherPriorityTaskWoken ) );           \\\n                ( pxStreamBuffer )->xTaskWaitingToReceive = NULL;                              \\\n            }                                                                                  \\\n        }                                                                                      \\\n        taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );                                  \\\n    } while( 0 )\n    #endif /* sbSEND_COMPLETE_FROM_ISR */\n\n\n    #if ( configUSE_SB_COMPLETED_CALLBACK == 1 )\n        #define prvSEND_COMPLETE_FROM_ISR( pxStreamBuffer, pxHigherPriorityTaskWoken )                                \\\n    do {                                                                                                              \\\n        if( ( pxStreamBuffer )->pxSendCompletedCallback != NULL )                                                     \\\n        {                                                                                                             \\\n            ( pxStreamBuffer )->pxSendCompletedCallback( ( pxStreamBuffer ), pdTRUE, ( pxHigherPriorityTaskWoken ) ); \\\n        }                                                                                                             \\\n        else                                                                                                          \\\n        {                                                                                                             \\\n            sbSEND_COMPLETE_FROM_ISR( ( pxStreamBuffer ), ( pxHigherPriorityTaskWoken ) );                            \\\n        }                                                                                                             \\\n    } while( 0 )\n    #else /* if ( configUSE_SB_COMPLETED_CALLBACK == 1 ) */\n        #define prvSEND_COMPLETE_FROM_ISR( pxStreamBuffer, pxHigherPriorityTaskWoken ) \\\n    sbSEND_COMPLETE_FROM_ISR( ( pxStreamBuffer ), ( pxHigherPriorityTaskWoken ) )\n    #endif /* if ( configUSE_SB_COMPLETED_CALLBACK == 1 ) */\n\n/* The number of bytes used to hold the length of a message in the buffer. */\n    #define sbBYTES_TO_STORE_MESSAGE_LENGTH    ( sizeof( configMESSAGE_BUFFER_LENGTH_TYPE ) )\n\n/* Bits stored in the ucFlags field of the stream buffer. */\n    #define sbFLAGS_IS_MESSAGE_BUFFER          ( ( uint8_t ) 1 ) /* Set if the stream buffer was created as a message buffer, in which case it holds discrete messages rather than a stream. */\n    #define sbFLAGS_IS_STATICALLY_ALLOCATED    ( ( uint8_t ) 2 ) /* Set if the stream buffer was created using statically allocated memory. */\n    #define sbFLAGS_IS_BATCHING_BUFFER         ( ( uint8_t ) 4 ) /* Set if the stream buffer was created as a batching buffer, meaning the receiver task will only unblock when the trigger level exceededs. */\n\n/*-----------------------------------------------------------*/\n\n/* Structure that hold state information on the buffer. */\ntypedef struct StreamBufferDef_t\n{\n    volatile size_t xTail;                       /* Index to the next item to read within the buffer. */\n    volatile size_t xHead;                       /* Index to the next item to write within the buffer. */\n    size_t xLength;                              /* The length of the buffer pointed to by pucBuffer. */\n    size_t xTriggerLevelBytes;                   /* The number of bytes that must be in the stream buffer before a task that is waiting for data is unblocked. */\n    volatile TaskHandle_t xTaskWaitingToReceive; /* Holds the handle of a task waiting for data, or NULL if no tasks are waiting. */\n    volatile TaskHandle_t xTaskWaitingToSend;    /* Holds the handle of a task waiting to send data to a message buffer that is full. */\n    uint8_t * pucBuffer;                         /* Points to the buffer itself - that is - the RAM that stores the data passed through the buffer. */\n    uint8_t ucFlags;\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n        UBaseType_t uxStreamBufferNumber; /* Used for tracing purposes. */\n    #endif\n\n    #if ( configUSE_SB_COMPLETED_CALLBACK == 1 )\n        StreamBufferCallbackFunction_t pxSendCompletedCallback;    /* Optional callback called on send complete. sbSEND_COMPLETED is called if this is NULL. */\n        StreamBufferCallbackFunction_t pxReceiveCompletedCallback; /* Optional callback called on receive complete.  sbRECEIVE_COMPLETED is called if this is NULL. */\n    #endif\n    UBaseType_t uxNotificationIndex;                               /* The index we are using for notification, by default tskDEFAULT_INDEX_TO_NOTIFY. */\n} StreamBuffer_t;\n\n/*\n * The number of bytes available to be read from the buffer.\n */\nstatic size_t prvBytesInBuffer( const StreamBuffer_t * const pxStreamBuffer ) PRIVILEGED_FUNCTION;\n\n/*\n * Add xCount bytes from pucData into the pxStreamBuffer's data storage area.\n * This function does not update the buffer's xHead pointer, so multiple writes\n * may be chained together \"atomically\". This is useful for Message Buffers where\n * the length and data bytes are written in two separate chunks, and we don't want\n * the reader to see the buffer as having grown until after all data is copied over.\n * This function takes a custom xHead value to indicate where to write to (necessary\n * for chaining) and returns the the resulting xHead position.\n * To mark the write as complete, manually set the buffer's xHead field with the\n * returned xHead from this function.\n */\nstatic size_t prvWriteBytesToBuffer( StreamBuffer_t * const pxStreamBuffer,\n                                     const uint8_t * pucData,\n                                     size_t xCount,\n                                     size_t xHead ) PRIVILEGED_FUNCTION;\n\n/*\n * If the stream buffer is being used as a message buffer, then reads an entire\n * message out of the buffer.  If the stream buffer is being used as a stream\n * buffer then read as many bytes as possible from the buffer.\n * prvReadBytesFromBuffer() is called to actually extract the bytes from the\n * buffer's data storage area.\n */\nstatic size_t prvReadMessageFromBuffer( StreamBuffer_t * pxStreamBuffer,\n                                        void * pvRxData,\n                                        size_t xBufferLengthBytes,\n                                        size_t xBytesAvailable ) PRIVILEGED_FUNCTION;\n\n/*\n * If the stream buffer is being used as a message buffer, then writes an entire\n * message to the buffer.  If the stream buffer is being used as a stream\n * buffer then write as many bytes as possible to the buffer.\n * prvWriteBytestoBuffer() is called to actually send the bytes to the buffer's\n * data storage area.\n */\nstatic size_t prvWriteMessageToBuffer( StreamBuffer_t * const pxStreamBuffer,\n                                       const void * pvTxData,\n                                       size_t xDataLengthBytes,\n                                       size_t xSpace,\n                                       size_t xRequiredSpace ) PRIVILEGED_FUNCTION;\n\n/*\n * Copies xCount bytes from the pxStreamBuffer's data storage area to pucData.\n * This function does not update the buffer's xTail pointer, so multiple reads\n * may be chained together \"atomically\". This is useful for Message Buffers where\n * the length and data bytes are read in two separate chunks, and we don't want\n * the writer to see the buffer as having more free space until after all data is\n * copied over, especially if we have to abort the read due to insufficient receiving space.\n * This function takes a custom xTail value to indicate where to read from (necessary\n * for chaining) and returns the the resulting xTail position.\n * To mark the read as complete, manually set the buffer's xTail field with the\n * returned xTail from this function.\n */\nstatic size_t prvReadBytesFromBuffer( StreamBuffer_t * pxStreamBuffer,\n                                      uint8_t * pucData,\n                                      size_t xCount,\n                                      size_t xTail ) PRIVILEGED_FUNCTION;\n\n/*\n * Called by both pxStreamBufferCreate() and pxStreamBufferCreateStatic() to\n * initialise the members of the newly created stream buffer structure.\n */\nstatic void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,\n                                          uint8_t * const pucBuffer,\n                                          size_t xBufferSizeBytes,\n                                          size_t xTriggerLevelBytes,\n                                          uint8_t ucFlags,\n                                          StreamBufferCallbackFunction_t pxSendCompletedCallback,\n                                          StreamBufferCallbackFunction_t pxReceiveCompletedCallback ) PRIVILEGED_FUNCTION;\n\n/*-----------------------------------------------------------*/\n    #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n    StreamBufferHandle_t xStreamBufferGenericCreate( size_t xBufferSizeBytes,\n                                                     size_t xTriggerLevelBytes,\n                                                     BaseType_t xStreamBufferType,\n                                                     StreamBufferCallbackFunction_t pxSendCompletedCallback,\n                                                     StreamBufferCallbackFunction_t pxReceiveCompletedCallback )\n    {\n        void * pvAllocatedMemory;\n        uint8_t ucFlags;\n\n        traceENTER_xStreamBufferGenericCreate( xBufferSizeBytes, xTriggerLevelBytes, xStreamBufferType, pxSendCompletedCallback, pxReceiveCompletedCallback );\n\n        /* In case the stream buffer is going to be used as a message buffer\n         * (that is, it will hold discrete messages with a little meta data that\n         * says how big the next message is) check the buffer will be large enough\n         * to hold at least one message. */\n        if( xStreamBufferType == sbTYPE_MESSAGE_BUFFER )\n        {\n            /* Is a message buffer but not statically allocated. */\n            ucFlags = sbFLAGS_IS_MESSAGE_BUFFER;\n            configASSERT( xBufferSizeBytes > sbBYTES_TO_STORE_MESSAGE_LENGTH );\n        }\n        else if( xStreamBufferType == sbTYPE_STREAM_BATCHING_BUFFER )\n        {\n            /* Is a batching buffer but not statically allocated. */\n            ucFlags = sbFLAGS_IS_BATCHING_BUFFER;\n            configASSERT( xBufferSizeBytes > 0 );\n        }\n        else\n        {\n            /* Not a message buffer and not statically allocated. */\n            ucFlags = 0;\n            configASSERT( xBufferSizeBytes > 0 );\n        }\n\n        configASSERT( xTriggerLevelBytes <= xBufferSizeBytes );\n\n        /* A trigger level of 0 would cause a waiting task to unblock even when\n         * the buffer was empty. */\n        if( xTriggerLevelBytes == ( size_t ) 0 )\n        {\n            xTriggerLevelBytes = ( size_t ) 1;\n        }\n\n        /* A stream buffer requires a StreamBuffer_t structure and a buffer.\n         * Both are allocated in a single call to pvPortMalloc().  The\n         * StreamBuffer_t structure is placed at the start of the allocated memory\n         * and the buffer follows immediately after.  The requested size is\n         * incremented so the free space is returned as the user would expect -\n         * this is a quirk of the implementation that means otherwise the free\n         * space would be reported as one byte smaller than would be logically\n         * expected. */\n        if( xBufferSizeBytes < ( xBufferSizeBytes + 1U + sizeof( StreamBuffer_t ) ) )\n        {\n            xBufferSizeBytes++;\n            pvAllocatedMemory = pvPortMalloc( xBufferSizeBytes + sizeof( StreamBuffer_t ) );\n        }\n        else\n        {\n            pvAllocatedMemory = NULL;\n        }\n\n        if( pvAllocatedMemory != NULL )\n        {\n            /* MISRA Ref 11.5.1 [Malloc memory assignment] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n            /* coverity[misra_c_2012_rule_11_5_violation] */\n            prvInitialiseNewStreamBuffer( ( StreamBuffer_t * ) pvAllocatedMemory,                         /* Structure at the start of the allocated memory. */\n                                                                                                          /* MISRA Ref 11.5.1 [Malloc memory assignment] */\n                                                                                                          /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n                                                                                                          /* coverity[misra_c_2012_rule_11_5_violation] */\n                                          ( ( uint8_t * ) pvAllocatedMemory ) + sizeof( StreamBuffer_t ), /* Storage area follows. */\n                                          xBufferSizeBytes,\n                                          xTriggerLevelBytes,\n                                          ucFlags,\n                                          pxSendCompletedCallback,\n                                          pxReceiveCompletedCallback );\n\n            traceSTREAM_BUFFER_CREATE( ( ( StreamBuffer_t * ) pvAllocatedMemory ), xStreamBufferType );\n        }\n        else\n        {\n            traceSTREAM_BUFFER_CREATE_FAILED( xStreamBufferType );\n        }\n\n        traceRETURN_xStreamBufferGenericCreate( pvAllocatedMemory );\n\n        /* MISRA Ref 11.5.1 [Malloc memory assignment] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n        /* coverity[misra_c_2012_rule_11_5_violation] */\n        return ( StreamBufferHandle_t ) pvAllocatedMemory;\n    }\n    #endif /* configSUPPORT_DYNAMIC_ALLOCATION */\n/*-----------------------------------------------------------*/\n\n    #if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n\n    StreamBufferHandle_t xStreamBufferGenericCreateStatic( size_t xBufferSizeBytes,\n                                                           size_t xTriggerLevelBytes,\n                                                           BaseType_t xStreamBufferType,\n                                                           uint8_t * const pucStreamBufferStorageArea,\n                                                           StaticStreamBuffer_t * const pxStaticStreamBuffer,\n                                                           StreamBufferCallbackFunction_t pxSendCompletedCallback,\n                                                           StreamBufferCallbackFunction_t pxReceiveCompletedCallback )\n    {\n        /* MISRA Ref 11.3.1 [Misaligned access] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-113 */\n        /* coverity[misra_c_2012_rule_11_3_violation] */\n        StreamBuffer_t * const pxStreamBuffer = ( StreamBuffer_t * ) pxStaticStreamBuffer;\n        StreamBufferHandle_t xReturn;\n        uint8_t ucFlags;\n\n        traceENTER_xStreamBufferGenericCreateStatic( xBufferSizeBytes, xTriggerLevelBytes, xStreamBufferType, pucStreamBufferStorageArea, pxStaticStreamBuffer, pxSendCompletedCallback, pxReceiveCompletedCallback );\n\n        configASSERT( pucStreamBufferStorageArea );\n        configASSERT( pxStaticStreamBuffer );\n        configASSERT( xTriggerLevelBytes <= xBufferSizeBytes );\n\n        /* A trigger level of 0 would cause a waiting task to unblock even when\n         * the buffer was empty. */\n        if( xTriggerLevelBytes == ( size_t ) 0 )\n        {\n            xTriggerLevelBytes = ( size_t ) 1;\n        }\n\n        /* In case the stream buffer is going to be used as a message buffer\n         * (that is, it will hold discrete messages with a little meta data that\n         * says how big the next message is) check the buffer will be large enough\n         * to hold at least one message. */\n\n        if( xStreamBufferType == sbTYPE_MESSAGE_BUFFER )\n        {\n            /* Statically allocated message buffer. */\n            ucFlags = sbFLAGS_IS_MESSAGE_BUFFER | sbFLAGS_IS_STATICALLY_ALLOCATED;\n            configASSERT( xBufferSizeBytes > sbBYTES_TO_STORE_MESSAGE_LENGTH );\n        }\n        else if( xStreamBufferType == sbTYPE_STREAM_BATCHING_BUFFER )\n        {\n            /* Statically allocated batching buffer. */\n            ucFlags = sbFLAGS_IS_BATCHING_BUFFER | sbFLAGS_IS_STATICALLY_ALLOCATED;\n            configASSERT( xBufferSizeBytes > 0 );\n        }\n        else\n        {\n            /* Statically allocated stream buffer. */\n            ucFlags = sbFLAGS_IS_STATICALLY_ALLOCATED;\n        }\n\n        #if ( configASSERT_DEFINED == 1 )\n        {\n            /* Sanity check that the size of the structure used to declare a\n             * variable of type StaticStreamBuffer_t equals the size of the real\n             * message buffer structure. */\n            volatile size_t xSize = sizeof( StaticStreamBuffer_t );\n            configASSERT( xSize == sizeof( StreamBuffer_t ) );\n        }\n        #endif /* configASSERT_DEFINED */\n\n        if( ( pucStreamBufferStorageArea != NULL ) && ( pxStaticStreamBuffer != NULL ) )\n        {\n            prvInitialiseNewStreamBuffer( pxStreamBuffer,\n                                          pucStreamBufferStorageArea,\n                                          xBufferSizeBytes,\n                                          xTriggerLevelBytes,\n                                          ucFlags,\n                                          pxSendCompletedCallback,\n                                          pxReceiveCompletedCallback );\n\n            /* Remember this was statically allocated in case it is ever deleted\n             * again. */\n            pxStreamBuffer->ucFlags |= sbFLAGS_IS_STATICALLY_ALLOCATED;\n\n            traceSTREAM_BUFFER_CREATE( pxStreamBuffer, xStreamBufferType );\n\n            /* MISRA Ref 11.3.1 [Misaligned access] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-113 */\n            /* coverity[misra_c_2012_rule_11_3_violation] */\n            xReturn = ( StreamBufferHandle_t ) pxStaticStreamBuffer;\n        }\n        else\n        {\n            xReturn = NULL;\n            traceSTREAM_BUFFER_CREATE_STATIC_FAILED( xReturn, xStreamBufferType );\n        }\n\n        traceRETURN_xStreamBufferGenericCreateStatic( xReturn );\n\n        return xReturn;\n    }\n    #endif /* ( configSUPPORT_STATIC_ALLOCATION == 1 ) */\n/*-----------------------------------------------------------*/\n\n    #if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    BaseType_t xStreamBufferGetStaticBuffers( StreamBufferHandle_t xStreamBuffer,\n                                              uint8_t ** ppucStreamBufferStorageArea,\n                                              StaticStreamBuffer_t ** ppxStaticStreamBuffer )\n    {\n        BaseType_t xReturn;\n        StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n\n        traceENTER_xStreamBufferGetStaticBuffers( xStreamBuffer, ppucStreamBufferStorageArea, ppxStaticStreamBuffer );\n\n        configASSERT( pxStreamBuffer );\n        configASSERT( ppucStreamBufferStorageArea );\n        configASSERT( ppxStaticStreamBuffer );\n\n        if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_STATICALLY_ALLOCATED ) != ( uint8_t ) 0 )\n        {\n            *ppucStreamBufferStorageArea = pxStreamBuffer->pucBuffer;\n            /* MISRA Ref 11.3.1 [Misaligned access] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-113 */\n            /* coverity[misra_c_2012_rule_11_3_violation] */\n            *ppxStaticStreamBuffer = ( StaticStreamBuffer_t * ) pxStreamBuffer;\n            xReturn = pdTRUE;\n        }\n        else\n        {\n            xReturn = pdFALSE;\n        }\n\n        traceRETURN_xStreamBufferGetStaticBuffers( xReturn );\n\n        return xReturn;\n    }\n    #endif /* configSUPPORT_STATIC_ALLOCATION */\n/*-----------------------------------------------------------*/\n\nvoid vStreamBufferDelete( StreamBufferHandle_t xStreamBuffer )\n{\n    StreamBuffer_t * pxStreamBuffer = xStreamBuffer;\n\n    traceENTER_vStreamBufferDelete( xStreamBuffer );\n\n    configASSERT( pxStreamBuffer );\n\n    traceSTREAM_BUFFER_DELETE( xStreamBuffer );\n\n    if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_STATICALLY_ALLOCATED ) == ( uint8_t ) pdFALSE )\n    {\n        #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n        {\n            /* Both the structure and the buffer were allocated using a single call\n            * to pvPortMalloc(), hence only one call to vPortFree() is required. */\n            vPortFree( ( void * ) pxStreamBuffer );\n        }\n        #else\n        {\n            /* Should not be possible to get here, ucFlags must be corrupt.\n             * Force an assert. */\n            configASSERT( xStreamBuffer == ( StreamBufferHandle_t ) ~0 );\n        }\n        #endif\n    }\n    else\n    {\n        /* The structure and buffer were not allocated dynamically and cannot be\n         * freed - just scrub the structure so future use will assert. */\n        ( void ) memset( pxStreamBuffer, 0x00, sizeof( StreamBuffer_t ) );\n    }\n\n    traceRETURN_vStreamBufferDelete();\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xStreamBufferReset( StreamBufferHandle_t xStreamBuffer )\n{\n    StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n    BaseType_t xReturn = pdFAIL;\n    StreamBufferCallbackFunction_t pxSendCallback = NULL, pxReceiveCallback = NULL;\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n        UBaseType_t uxStreamBufferNumber;\n    #endif\n\n    traceENTER_xStreamBufferReset( xStreamBuffer );\n\n    configASSERT( pxStreamBuffer );\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n    {\n        /* Store the stream buffer number so it can be restored after the\n         * reset. */\n        uxStreamBufferNumber = pxStreamBuffer->uxStreamBufferNumber;\n    }\n    #endif\n\n    /* Can only reset a message buffer if there are no tasks blocked on it. */\n    taskENTER_CRITICAL();\n    {\n        if( ( pxStreamBuffer->xTaskWaitingToReceive == NULL ) && ( pxStreamBuffer->xTaskWaitingToSend == NULL ) )\n        {\n            #if ( configUSE_SB_COMPLETED_CALLBACK == 1 )\n            {\n                pxSendCallback = pxStreamBuffer->pxSendCompletedCallback;\n                pxReceiveCallback = pxStreamBuffer->pxReceiveCompletedCallback;\n            }\n            #endif\n\n            prvInitialiseNewStreamBuffer( pxStreamBuffer,\n                                          pxStreamBuffer->pucBuffer,\n                                          pxStreamBuffer->xLength,\n                                          pxStreamBuffer->xTriggerLevelBytes,\n                                          pxStreamBuffer->ucFlags,\n                                          pxSendCallback,\n                                          pxReceiveCallback );\n\n            #if ( configUSE_TRACE_FACILITY == 1 )\n            {\n                pxStreamBuffer->uxStreamBufferNumber = uxStreamBufferNumber;\n            }\n            #endif\n\n            traceSTREAM_BUFFER_RESET( xStreamBuffer );\n\n            xReturn = pdPASS;\n        }\n    }\n    taskEXIT_CRITICAL();\n\n    traceRETURN_xStreamBufferReset( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xStreamBufferResetFromISR( StreamBufferHandle_t xStreamBuffer )\n{\n    StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n    BaseType_t xReturn = pdFAIL;\n    StreamBufferCallbackFunction_t pxSendCallback = NULL, pxReceiveCallback = NULL;\n    UBaseType_t uxSavedInterruptStatus;\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n        UBaseType_t uxStreamBufferNumber;\n    #endif\n\n    traceENTER_xStreamBufferResetFromISR( xStreamBuffer );\n\n    configASSERT( pxStreamBuffer );\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n    {\n        /* Store the stream buffer number so it can be restored after the\n         * reset. */\n        uxStreamBufferNumber = pxStreamBuffer->uxStreamBufferNumber;\n    }\n    #endif\n\n    /* Can only reset a message buffer if there are no tasks blocked on it. */\n    /* MISRA Ref 4.7.1 [Return value shall be checked] */\n    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */\n    /* coverity[misra_c_2012_directive_4_7_violation] */\n    uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();\n    {\n        if( ( pxStreamBuffer->xTaskWaitingToReceive == NULL ) && ( pxStreamBuffer->xTaskWaitingToSend == NULL ) )\n        {\n            #if ( configUSE_SB_COMPLETED_CALLBACK == 1 )\n            {\n                pxSendCallback = pxStreamBuffer->pxSendCompletedCallback;\n                pxReceiveCallback = pxStreamBuffer->pxReceiveCompletedCallback;\n            }\n            #endif\n\n            prvInitialiseNewStreamBuffer( pxStreamBuffer,\n                                          pxStreamBuffer->pucBuffer,\n                                          pxStreamBuffer->xLength,\n                                          pxStreamBuffer->xTriggerLevelBytes,\n                                          pxStreamBuffer->ucFlags,\n                                          pxSendCallback,\n                                          pxReceiveCallback );\n\n            #if ( configUSE_TRACE_FACILITY == 1 )\n            {\n                pxStreamBuffer->uxStreamBufferNumber = uxStreamBufferNumber;\n            }\n            #endif\n\n            traceSTREAM_BUFFER_RESET_FROM_ISR( xStreamBuffer );\n\n            xReturn = pdPASS;\n        }\n    }\n    taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );\n\n    traceRETURN_xStreamBufferResetFromISR( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xStreamBufferSetTriggerLevel( StreamBufferHandle_t xStreamBuffer,\n                                         size_t xTriggerLevel )\n{\n    StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n    BaseType_t xReturn;\n\n    traceENTER_xStreamBufferSetTriggerLevel( xStreamBuffer, xTriggerLevel );\n\n    configASSERT( pxStreamBuffer );\n\n    /* It is not valid for the trigger level to be 0. */\n    if( xTriggerLevel == ( size_t ) 0 )\n    {\n        xTriggerLevel = ( size_t ) 1;\n    }\n\n    /* The trigger level is the number of bytes that must be in the stream\n     * buffer before a task that is waiting for data is unblocked. */\n    if( xTriggerLevel < pxStreamBuffer->xLength )\n    {\n        pxStreamBuffer->xTriggerLevelBytes = xTriggerLevel;\n        xReturn = pdPASS;\n    }\n    else\n    {\n        xReturn = pdFALSE;\n    }\n\n    traceRETURN_xStreamBufferSetTriggerLevel( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nsize_t xStreamBufferSpacesAvailable( StreamBufferHandle_t xStreamBuffer )\n{\n    const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n    size_t xSpace;\n    size_t xOriginalTail;\n\n    traceENTER_xStreamBufferSpacesAvailable( xStreamBuffer );\n\n    configASSERT( pxStreamBuffer );\n\n    /* The code below reads xTail and then xHead.  This is safe if the stream\n     * buffer is updated once between the two reads - but not if the stream buffer\n     * is updated more than once between the two reads - hence the loop. */\n    do\n    {\n        xOriginalTail = pxStreamBuffer->xTail;\n        xSpace = pxStreamBuffer->xLength + pxStreamBuffer->xTail;\n        xSpace -= pxStreamBuffer->xHead;\n    } while( xOriginalTail != pxStreamBuffer->xTail );\n\n    xSpace -= ( size_t ) 1;\n\n    if( xSpace >= pxStreamBuffer->xLength )\n    {\n        xSpace -= pxStreamBuffer->xLength;\n    }\n    else\n    {\n        mtCOVERAGE_TEST_MARKER();\n    }\n\n    traceRETURN_xStreamBufferSpacesAvailable( xSpace );\n\n    return xSpace;\n}\n/*-----------------------------------------------------------*/\n\nsize_t xStreamBufferBytesAvailable( StreamBufferHandle_t xStreamBuffer )\n{\n    const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n    size_t xReturn;\n\n    traceENTER_xStreamBufferBytesAvailable( xStreamBuffer );\n\n    configASSERT( pxStreamBuffer );\n\n    xReturn = prvBytesInBuffer( pxStreamBuffer );\n\n    traceRETURN_xStreamBufferBytesAvailable( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nsize_t xStreamBufferSend( StreamBufferHandle_t xStreamBuffer,\n                          const void * pvTxData,\n                          size_t xDataLengthBytes,\n                          TickType_t xTicksToWait )\n{\n    StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n    size_t xReturn, xSpace = 0;\n    size_t xRequiredSpace = xDataLengthBytes;\n    TimeOut_t xTimeOut;\n    size_t xMaxReportedSpace = 0;\n\n    traceENTER_xStreamBufferSend( xStreamBuffer, pvTxData, xDataLengthBytes, xTicksToWait );\n\n    configASSERT( pvTxData );\n    configASSERT( pxStreamBuffer );\n\n    /* The maximum amount of space a stream buffer will ever report is its length\n     * minus 1. */\n    xMaxReportedSpace = pxStreamBuffer->xLength - ( size_t ) 1;\n\n    /* This send function is used to write to both message buffers and stream\n     * buffers.  If this is a message buffer then the space needed must be\n     * increased by the amount of bytes needed to store the length of the\n     * message. */\n    if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 )\n    {\n        xRequiredSpace += sbBYTES_TO_STORE_MESSAGE_LENGTH;\n\n        /* Overflow? */\n        configASSERT( xRequiredSpace > xDataLengthBytes );\n\n        /* If this is a message buffer then it must be possible to write the\n         * whole message. */\n        if( xRequiredSpace > xMaxReportedSpace )\n        {\n            /* The message would not fit even if the entire buffer was empty,\n             * so don't wait for space. */\n            xTicksToWait = ( TickType_t ) 0;\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n    }\n    else\n    {\n        /* If this is a stream buffer then it is acceptable to write only part\n         * of the message to the buffer.  Cap the length to the total length of\n         * the buffer. */\n        if( xRequiredSpace > xMaxReportedSpace )\n        {\n            xRequiredSpace = xMaxReportedSpace;\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n    }\n\n    if( xTicksToWait != ( TickType_t ) 0 )\n    {\n        vTaskSetTimeOutState( &xTimeOut );\n\n        do\n        {\n            /* Wait until the required number of bytes are free in the message\n             * buffer. */\n            taskENTER_CRITICAL();\n            {\n                xSpace = xStreamBufferSpacesAvailable( pxStreamBuffer );\n\n                if( xSpace < xRequiredSpace )\n                {\n                    /* Clear notification state as going to wait for space. */\n                    ( void ) xTaskNotifyStateClearIndexed( NULL, pxStreamBuffer->uxNotificationIndex );\n\n                    /* Should only be one writer. */\n                    configASSERT( pxStreamBuffer->xTaskWaitingToSend == NULL );\n                    pxStreamBuffer->xTaskWaitingToSend = xTaskGetCurrentTaskHandle();\n                }\n                else\n                {\n                    taskEXIT_CRITICAL();\n                    break;\n                }\n            }\n            taskEXIT_CRITICAL();\n\n            traceBLOCKING_ON_STREAM_BUFFER_SEND( xStreamBuffer );\n            ( void ) xTaskNotifyWaitIndexed( pxStreamBuffer->uxNotificationIndex, ( uint32_t ) 0, ( uint32_t ) 0, NULL, xTicksToWait );\n            pxStreamBuffer->xTaskWaitingToSend = NULL;\n        } while( xTaskCheckForTimeOut( &xTimeOut, &xTicksToWait ) == pdFALSE );\n    }\n    else\n    {\n        mtCOVERAGE_TEST_MARKER();\n    }\n\n    if( xSpace == ( size_t ) 0 )\n    {\n        xSpace = xStreamBufferSpacesAvailable( pxStreamBuffer );\n    }\n    else\n    {\n        mtCOVERAGE_TEST_MARKER();\n    }\n\n    xReturn = prvWriteMessageToBuffer( pxStreamBuffer, pvTxData, xDataLengthBytes, xSpace, xRequiredSpace );\n\n    if( xReturn > ( size_t ) 0 )\n    {\n        traceSTREAM_BUFFER_SEND( xStreamBuffer, xReturn );\n\n        /* Was a task waiting for the data? */\n        if( prvBytesInBuffer( pxStreamBuffer ) >= pxStreamBuffer->xTriggerLevelBytes )\n        {\n            prvSEND_COMPLETED( pxStreamBuffer );\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n    }\n    else\n    {\n        mtCOVERAGE_TEST_MARKER();\n        traceSTREAM_BUFFER_SEND_FAILED( xStreamBuffer );\n    }\n\n    traceRETURN_xStreamBufferSend( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nsize_t xStreamBufferSendFromISR( StreamBufferHandle_t xStreamBuffer,\n                                 const void * pvTxData,\n                                 size_t xDataLengthBytes,\n                                 BaseType_t * const pxHigherPriorityTaskWoken )\n{\n    StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n    size_t xReturn, xSpace;\n    size_t xRequiredSpace = xDataLengthBytes;\n\n    traceENTER_xStreamBufferSendFromISR( xStreamBuffer, pvTxData, xDataLengthBytes, pxHigherPriorityTaskWoken );\n\n    configASSERT( pvTxData );\n    configASSERT( pxStreamBuffer );\n\n    /* This send function is used to write to both message buffers and stream\n     * buffers.  If this is a message buffer then the space needed must be\n     * increased by the amount of bytes needed to store the length of the\n     * message. */\n    if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 )\n    {\n        xRequiredSpace += sbBYTES_TO_STORE_MESSAGE_LENGTH;\n    }\n    else\n    {\n        mtCOVERAGE_TEST_MARKER();\n    }\n\n    xSpace = xStreamBufferSpacesAvailable( pxStreamBuffer );\n    xReturn = prvWriteMessageToBuffer( pxStreamBuffer, pvTxData, xDataLengthBytes, xSpace, xRequiredSpace );\n\n    if( xReturn > ( size_t ) 0 )\n    {\n        /* Was a task waiting for the data? */\n        if( prvBytesInBuffer( pxStreamBuffer ) >= pxStreamBuffer->xTriggerLevelBytes )\n        {\n            /* MISRA Ref 4.7.1 [Return value shall be checked] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */\n            /* coverity[misra_c_2012_directive_4_7_violation] */\n            prvSEND_COMPLETE_FROM_ISR( pxStreamBuffer, pxHigherPriorityTaskWoken );\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n    }\n    else\n    {\n        mtCOVERAGE_TEST_MARKER();\n    }\n\n    traceSTREAM_BUFFER_SEND_FROM_ISR( xStreamBuffer, xReturn );\n    traceRETURN_xStreamBufferSendFromISR( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nstatic size_t prvWriteMessageToBuffer( StreamBuffer_t * const pxStreamBuffer,\n                                       const void * pvTxData,\n                                       size_t xDataLengthBytes,\n                                       size_t xSpace,\n                                       size_t xRequiredSpace )\n{\n    size_t xNextHead = pxStreamBuffer->xHead;\n    configMESSAGE_BUFFER_LENGTH_TYPE xMessageLength;\n\n    if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 )\n    {\n        /* This is a message buffer, as opposed to a stream buffer. */\n\n        /* Convert xDataLengthBytes to the message length type. */\n        xMessageLength = ( configMESSAGE_BUFFER_LENGTH_TYPE ) xDataLengthBytes;\n\n        /* Ensure the data length given fits within configMESSAGE_BUFFER_LENGTH_TYPE. */\n        configASSERT( ( size_t ) xMessageLength == xDataLengthBytes );\n\n        if( xSpace >= xRequiredSpace )\n        {\n            /* There is enough space to write both the message length and the message\n             * itself into the buffer.  Start by writing the length of the data, the data\n             * itself will be written later in this function. */\n            xNextHead = prvWriteBytesToBuffer( pxStreamBuffer, ( const uint8_t * ) &( xMessageLength ), sbBYTES_TO_STORE_MESSAGE_LENGTH, xNextHead );\n        }\n        else\n        {\n            /* Not enough space, so do not write data to the buffer. */\n            xDataLengthBytes = 0;\n        }\n    }\n    else\n    {\n        /* This is a stream buffer, as opposed to a message buffer, so writing a\n         * stream of bytes rather than discrete messages.  Plan to write as many\n         * bytes as possible. */\n        xDataLengthBytes = configMIN( xDataLengthBytes, xSpace );\n    }\n\n    if( xDataLengthBytes != ( size_t ) 0 )\n    {\n        /* Write the data to the buffer. */\n        /* MISRA Ref 11.5.5 [Void pointer assignment] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n        /* coverity[misra_c_2012_rule_11_5_violation] */\n        pxStreamBuffer->xHead = prvWriteBytesToBuffer( pxStreamBuffer, ( const uint8_t * ) pvTxData, xDataLengthBytes, xNextHead );\n    }\n\n    return xDataLengthBytes;\n}\n/*-----------------------------------------------------------*/\n\nsize_t xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer,\n                             void * pvRxData,\n                             size_t xBufferLengthBytes,\n                             TickType_t xTicksToWait )\n{\n    StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n    size_t xReceivedLength = 0, xBytesAvailable, xBytesToStoreMessageLength;\n\n    traceENTER_xStreamBufferReceive( xStreamBuffer, pvRxData, xBufferLengthBytes, xTicksToWait );\n\n    configASSERT( pvRxData );\n    configASSERT( pxStreamBuffer );\n\n    /* This receive function is used by both message buffers, which store\n     * discrete messages, and stream buffers, which store a continuous stream of\n     * bytes.  Discrete messages include an additional\n     * sbBYTES_TO_STORE_MESSAGE_LENGTH bytes that hold the length of the\n     * message. */\n    if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 )\n    {\n        xBytesToStoreMessageLength = sbBYTES_TO_STORE_MESSAGE_LENGTH;\n    }\n    else if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_BATCHING_BUFFER ) != ( uint8_t ) 0 )\n    {\n        /* Force task to block if the batching buffer contains less bytes than\n         * the trigger level. */\n        xBytesToStoreMessageLength = pxStreamBuffer->xTriggerLevelBytes;\n    }\n    else\n    {\n        xBytesToStoreMessageLength = 0;\n    }\n\n    if( xTicksToWait != ( TickType_t ) 0 )\n    {\n        /* Checking if there is data and clearing the notification state must be\n         * performed atomically. */\n        taskENTER_CRITICAL();\n        {\n            xBytesAvailable = prvBytesInBuffer( pxStreamBuffer );\n\n            /* If this function was invoked by a message buffer read then\n             * xBytesToStoreMessageLength holds the number of bytes used to hold\n             * the length of the next discrete message.  If this function was\n             * invoked by a stream buffer read then xBytesToStoreMessageLength will\n             * be 0. If this function was invoked by a stream batch buffer read\n             * then xBytesToStoreMessageLength will be xTriggerLevelBytes value\n             * for the buffer.*/\n            if( xBytesAvailable <= xBytesToStoreMessageLength )\n            {\n                /* Clear notification state as going to wait for data. */\n                ( void ) xTaskNotifyStateClearIndexed( NULL, pxStreamBuffer->uxNotificationIndex );\n\n                /* Should only be one reader. */\n                configASSERT( pxStreamBuffer->xTaskWaitingToReceive == NULL );\n                pxStreamBuffer->xTaskWaitingToReceive = xTaskGetCurrentTaskHandle();\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        taskEXIT_CRITICAL();\n\n        if( xBytesAvailable <= xBytesToStoreMessageLength )\n        {\n            /* Wait for data to be available. */\n            traceBLOCKING_ON_STREAM_BUFFER_RECEIVE( xStreamBuffer );\n            ( void ) xTaskNotifyWaitIndexed( pxStreamBuffer->uxNotificationIndex, ( uint32_t ) 0, ( uint32_t ) 0, NULL, xTicksToWait );\n            pxStreamBuffer->xTaskWaitingToReceive = NULL;\n\n            /* Recheck the data available after blocking. */\n            xBytesAvailable = prvBytesInBuffer( pxStreamBuffer );\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n    }\n    else\n    {\n        xBytesAvailable = prvBytesInBuffer( pxStreamBuffer );\n    }\n\n    /* Whether receiving a discrete message (where xBytesToStoreMessageLength\n     * holds the number of bytes used to store the message length) or a stream of\n     * bytes (where xBytesToStoreMessageLength is zero), the number of bytes\n     * available must be greater than xBytesToStoreMessageLength to be able to\n     * read bytes from the buffer. */\n    if( xBytesAvailable > xBytesToStoreMessageLength )\n    {\n        xReceivedLength = prvReadMessageFromBuffer( pxStreamBuffer, pvRxData, xBufferLengthBytes, xBytesAvailable );\n\n        /* Was a task waiting for space in the buffer? */\n        if( xReceivedLength != ( size_t ) 0 )\n        {\n            traceSTREAM_BUFFER_RECEIVE( xStreamBuffer, xReceivedLength );\n            prvRECEIVE_COMPLETED( xStreamBuffer );\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n    }\n    else\n    {\n        traceSTREAM_BUFFER_RECEIVE_FAILED( xStreamBuffer );\n        mtCOVERAGE_TEST_MARKER();\n    }\n\n    traceRETURN_xStreamBufferReceive( xReceivedLength );\n\n    return xReceivedLength;\n}\n/*-----------------------------------------------------------*/\n\nsize_t xStreamBufferNextMessageLengthBytes( StreamBufferHandle_t xStreamBuffer )\n{\n    StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n    size_t xReturn, xBytesAvailable;\n    configMESSAGE_BUFFER_LENGTH_TYPE xTempReturn;\n\n    traceENTER_xStreamBufferNextMessageLengthBytes( xStreamBuffer );\n\n    configASSERT( pxStreamBuffer );\n\n    /* Ensure the stream buffer is being used as a message buffer. */\n    if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 )\n    {\n        xBytesAvailable = prvBytesInBuffer( pxStreamBuffer );\n\n        if( xBytesAvailable > sbBYTES_TO_STORE_MESSAGE_LENGTH )\n        {\n            /* The number of bytes available is greater than the number of bytes\n             * required to hold the length of the next message, so another message\n             * is available. */\n            ( void ) prvReadBytesFromBuffer( pxStreamBuffer, ( uint8_t * ) &xTempReturn, sbBYTES_TO_STORE_MESSAGE_LENGTH, pxStreamBuffer->xTail );\n            xReturn = ( size_t ) xTempReturn;\n        }\n        else\n        {\n            /* The minimum amount of bytes in a message buffer is\n             * ( sbBYTES_TO_STORE_MESSAGE_LENGTH + 1 ), so if xBytesAvailable is\n             * less than sbBYTES_TO_STORE_MESSAGE_LENGTH the only other valid\n             * value is 0. */\n            configASSERT( xBytesAvailable == 0 );\n            xReturn = 0;\n        }\n    }\n    else\n    {\n        xReturn = 0;\n    }\n\n    traceRETURN_xStreamBufferNextMessageLengthBytes( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nsize_t xStreamBufferReceiveFromISR( StreamBufferHandle_t xStreamBuffer,\n                                    void * pvRxData,\n                                    size_t xBufferLengthBytes,\n                                    BaseType_t * const pxHigherPriorityTaskWoken )\n{\n    StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n    size_t xReceivedLength = 0, xBytesAvailable, xBytesToStoreMessageLength;\n\n    traceENTER_xStreamBufferReceiveFromISR( xStreamBuffer, pvRxData, xBufferLengthBytes, pxHigherPriorityTaskWoken );\n\n    configASSERT( pvRxData );\n    configASSERT( pxStreamBuffer );\n\n    /* This receive function is used by both message buffers, which store\n     * discrete messages, and stream buffers, which store a continuous stream of\n     * bytes.  Discrete messages include an additional\n     * sbBYTES_TO_STORE_MESSAGE_LENGTH bytes that hold the length of the\n     * message. */\n    if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 )\n    {\n        xBytesToStoreMessageLength = sbBYTES_TO_STORE_MESSAGE_LENGTH;\n    }\n    else\n    {\n        xBytesToStoreMessageLength = 0;\n    }\n\n    xBytesAvailable = prvBytesInBuffer( pxStreamBuffer );\n\n    /* Whether receiving a discrete message (where xBytesToStoreMessageLength\n     * holds the number of bytes used to store the message length) or a stream of\n     * bytes (where xBytesToStoreMessageLength is zero), the number of bytes\n     * available must be greater than xBytesToStoreMessageLength to be able to\n     * read bytes from the buffer. */\n    if( xBytesAvailable > xBytesToStoreMessageLength )\n    {\n        xReceivedLength = prvReadMessageFromBuffer( pxStreamBuffer, pvRxData, xBufferLengthBytes, xBytesAvailable );\n\n        /* Was a task waiting for space in the buffer? */\n        if( xReceivedLength != ( size_t ) 0 )\n        {\n            /* MISRA Ref 4.7.1 [Return value shall be checked] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */\n            /* coverity[misra_c_2012_directive_4_7_violation] */\n            prvRECEIVE_COMPLETED_FROM_ISR( pxStreamBuffer, pxHigherPriorityTaskWoken );\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n    }\n    else\n    {\n        mtCOVERAGE_TEST_MARKER();\n    }\n\n    traceSTREAM_BUFFER_RECEIVE_FROM_ISR( xStreamBuffer, xReceivedLength );\n    traceRETURN_xStreamBufferReceiveFromISR( xReceivedLength );\n\n    return xReceivedLength;\n}\n/*-----------------------------------------------------------*/\n\nstatic size_t prvReadMessageFromBuffer( StreamBuffer_t * pxStreamBuffer,\n                                        void * pvRxData,\n                                        size_t xBufferLengthBytes,\n                                        size_t xBytesAvailable )\n{\n    size_t xCount, xNextMessageLength;\n    configMESSAGE_BUFFER_LENGTH_TYPE xTempNextMessageLength;\n    size_t xNextTail = pxStreamBuffer->xTail;\n\n    if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 )\n    {\n        /* A discrete message is being received.  First receive the length\n         * of the message. */\n        xNextTail = prvReadBytesFromBuffer( pxStreamBuffer, ( uint8_t * ) &xTempNextMessageLength, sbBYTES_TO_STORE_MESSAGE_LENGTH, xNextTail );\n        xNextMessageLength = ( size_t ) xTempNextMessageLength;\n\n        /* Reduce the number of bytes available by the number of bytes just\n         * read out. */\n        xBytesAvailable -= sbBYTES_TO_STORE_MESSAGE_LENGTH;\n\n        /* Check there is enough space in the buffer provided by the\n         * user. */\n        if( xNextMessageLength > xBufferLengthBytes )\n        {\n            /* The user has provided insufficient space to read the message. */\n            xNextMessageLength = 0;\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n    }\n    else\n    {\n        /* A stream of bytes is being received (as opposed to a discrete\n         * message), so read as many bytes as possible. */\n        xNextMessageLength = xBufferLengthBytes;\n    }\n\n    /* Use the minimum of the wanted bytes and the available bytes. */\n    xCount = configMIN( xNextMessageLength, xBytesAvailable );\n\n    if( xCount != ( size_t ) 0 )\n    {\n        /* Read the actual data and update the tail to mark the data as officially consumed. */\n        /* MISRA Ref 11.5.5 [Void pointer assignment] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n        /* coverity[misra_c_2012_rule_11_5_violation] */\n        pxStreamBuffer->xTail = prvReadBytesFromBuffer( pxStreamBuffer, ( uint8_t * ) pvRxData, xCount, xNextTail );\n    }\n\n    return xCount;\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xStreamBufferIsEmpty( StreamBufferHandle_t xStreamBuffer )\n{\n    const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n    BaseType_t xReturn;\n    size_t xTail;\n\n    traceENTER_xStreamBufferIsEmpty( xStreamBuffer );\n\n    configASSERT( pxStreamBuffer );\n\n    /* True if no bytes are available. */\n    xTail = pxStreamBuffer->xTail;\n\n    if( pxStreamBuffer->xHead == xTail )\n    {\n        xReturn = pdTRUE;\n    }\n    else\n    {\n        xReturn = pdFALSE;\n    }\n\n    traceRETURN_xStreamBufferIsEmpty( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xStreamBufferIsFull( StreamBufferHandle_t xStreamBuffer )\n{\n    BaseType_t xReturn;\n    size_t xBytesToStoreMessageLength;\n    const StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n\n    traceENTER_xStreamBufferIsFull( xStreamBuffer );\n\n    configASSERT( pxStreamBuffer );\n\n    /* This generic version of the receive function is used by both message\n     * buffers, which store discrete messages, and stream buffers, which store a\n     * continuous stream of bytes.  Discrete messages include an additional\n     * sbBYTES_TO_STORE_MESSAGE_LENGTH bytes that hold the length of the message. */\n    if( ( pxStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) != ( uint8_t ) 0 )\n    {\n        xBytesToStoreMessageLength = sbBYTES_TO_STORE_MESSAGE_LENGTH;\n    }\n    else\n    {\n        xBytesToStoreMessageLength = 0;\n    }\n\n    /* True if the available space equals zero. */\n    if( xStreamBufferSpacesAvailable( xStreamBuffer ) <= xBytesToStoreMessageLength )\n    {\n        xReturn = pdTRUE;\n    }\n    else\n    {\n        xReturn = pdFALSE;\n    }\n\n    traceRETURN_xStreamBufferIsFull( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xStreamBufferSendCompletedFromISR( StreamBufferHandle_t xStreamBuffer,\n                                              BaseType_t * pxHigherPriorityTaskWoken )\n{\n    StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n    BaseType_t xReturn;\n    UBaseType_t uxSavedInterruptStatus;\n\n    traceENTER_xStreamBufferSendCompletedFromISR( xStreamBuffer, pxHigherPriorityTaskWoken );\n\n    configASSERT( pxStreamBuffer );\n\n    /* MISRA Ref 4.7.1 [Return value shall be checked] */\n    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */\n    /* coverity[misra_c_2012_directive_4_7_violation] */\n    uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();\n    {\n        if( ( pxStreamBuffer )->xTaskWaitingToReceive != NULL )\n        {\n            ( void ) xTaskNotifyIndexedFromISR( ( pxStreamBuffer )->xTaskWaitingToReceive,\n                                                ( pxStreamBuffer )->uxNotificationIndex,\n                                                ( uint32_t ) 0,\n                                                eNoAction,\n                                                pxHigherPriorityTaskWoken );\n            ( pxStreamBuffer )->xTaskWaitingToReceive = NULL;\n            xReturn = pdTRUE;\n        }\n        else\n        {\n            xReturn = pdFALSE;\n        }\n    }\n    taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );\n\n    traceRETURN_xStreamBufferSendCompletedFromISR( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xStreamBufferReceiveCompletedFromISR( StreamBufferHandle_t xStreamBuffer,\n                                                 BaseType_t * pxHigherPriorityTaskWoken )\n{\n    StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n    BaseType_t xReturn;\n    UBaseType_t uxSavedInterruptStatus;\n\n    traceENTER_xStreamBufferReceiveCompletedFromISR( xStreamBuffer, pxHigherPriorityTaskWoken );\n\n    configASSERT( pxStreamBuffer );\n\n    /* MISRA Ref 4.7.1 [Return value shall be checked] */\n    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */\n    /* coverity[misra_c_2012_directive_4_7_violation] */\n    uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();\n    {\n        if( ( pxStreamBuffer )->xTaskWaitingToSend != NULL )\n        {\n            ( void ) xTaskNotifyIndexedFromISR( ( pxStreamBuffer )->xTaskWaitingToSend,\n                                                ( pxStreamBuffer )->uxNotificationIndex,\n                                                ( uint32_t ) 0,\n                                                eNoAction,\n                                                pxHigherPriorityTaskWoken );\n            ( pxStreamBuffer )->xTaskWaitingToSend = NULL;\n            xReturn = pdTRUE;\n        }\n        else\n        {\n            xReturn = pdFALSE;\n        }\n    }\n    taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );\n\n    traceRETURN_xStreamBufferReceiveCompletedFromISR( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nstatic size_t prvWriteBytesToBuffer( StreamBuffer_t * const pxStreamBuffer,\n                                     const uint8_t * pucData,\n                                     size_t xCount,\n                                     size_t xHead )\n{\n    size_t xFirstLength;\n\n    configASSERT( xCount > ( size_t ) 0 );\n\n    /* Calculate the number of bytes that can be added in the first write -\n     * which may be less than the total number of bytes that need to be added if\n     * the buffer will wrap back to the beginning. */\n    xFirstLength = configMIN( pxStreamBuffer->xLength - xHead, xCount );\n\n    /* Write as many bytes as can be written in the first write. */\n    configASSERT( ( xHead + xFirstLength ) <= pxStreamBuffer->xLength );\n    ( void ) memcpy( ( void * ) ( &( pxStreamBuffer->pucBuffer[ xHead ] ) ), ( const void * ) pucData, xFirstLength );\n\n    /* If the number of bytes written was less than the number that could be\n     * written in the first write... */\n    if( xCount > xFirstLength )\n    {\n        /* ...then write the remaining bytes to the start of the buffer. */\n        configASSERT( ( xCount - xFirstLength ) <= pxStreamBuffer->xLength );\n        ( void ) memcpy( ( void * ) pxStreamBuffer->pucBuffer, ( const void * ) &( pucData[ xFirstLength ] ), xCount - xFirstLength );\n    }\n    else\n    {\n        mtCOVERAGE_TEST_MARKER();\n    }\n\n    xHead += xCount;\n\n    if( xHead >= pxStreamBuffer->xLength )\n    {\n        xHead -= pxStreamBuffer->xLength;\n    }\n    else\n    {\n        mtCOVERAGE_TEST_MARKER();\n    }\n\n    return xHead;\n}\n/*-----------------------------------------------------------*/\n\nstatic size_t prvReadBytesFromBuffer( StreamBuffer_t * pxStreamBuffer,\n                                      uint8_t * pucData,\n                                      size_t xCount,\n                                      size_t xTail )\n{\n    size_t xFirstLength;\n\n    configASSERT( xCount != ( size_t ) 0 );\n\n    /* Calculate the number of bytes that can be read - which may be\n     * less than the number wanted if the data wraps around to the start of\n     * the buffer. */\n    xFirstLength = configMIN( pxStreamBuffer->xLength - xTail, xCount );\n\n    /* Obtain the number of bytes it is possible to obtain in the first\n     * read.  Asserts check bounds of read and write. */\n    configASSERT( xFirstLength <= xCount );\n    configASSERT( ( xTail + xFirstLength ) <= pxStreamBuffer->xLength );\n    ( void ) memcpy( ( void * ) pucData, ( const void * ) &( pxStreamBuffer->pucBuffer[ xTail ] ), xFirstLength );\n\n    /* If the total number of wanted bytes is greater than the number\n     * that could be read in the first read... */\n    if( xCount > xFirstLength )\n    {\n        /* ...then read the remaining bytes from the start of the buffer. */\n        ( void ) memcpy( ( void * ) &( pucData[ xFirstLength ] ), ( void * ) ( pxStreamBuffer->pucBuffer ), xCount - xFirstLength );\n    }\n    else\n    {\n        mtCOVERAGE_TEST_MARKER();\n    }\n\n    /* Move the tail pointer to effectively remove the data read from the buffer. */\n    xTail += xCount;\n\n    if( xTail >= pxStreamBuffer->xLength )\n    {\n        xTail -= pxStreamBuffer->xLength;\n    }\n\n    return xTail;\n}\n/*-----------------------------------------------------------*/\n\nstatic size_t prvBytesInBuffer( const StreamBuffer_t * const pxStreamBuffer )\n{\n    /* Returns the distance between xTail and xHead. */\n    size_t xCount;\n\n    xCount = pxStreamBuffer->xLength + pxStreamBuffer->xHead;\n    xCount -= pxStreamBuffer->xTail;\n\n    if( xCount >= pxStreamBuffer->xLength )\n    {\n        xCount -= pxStreamBuffer->xLength;\n    }\n    else\n    {\n        mtCOVERAGE_TEST_MARKER();\n    }\n\n    return xCount;\n}\n/*-----------------------------------------------------------*/\n\nstatic void prvInitialiseNewStreamBuffer( StreamBuffer_t * const pxStreamBuffer,\n                                          uint8_t * const pucBuffer,\n                                          size_t xBufferSizeBytes,\n                                          size_t xTriggerLevelBytes,\n                                          uint8_t ucFlags,\n                                          StreamBufferCallbackFunction_t pxSendCompletedCallback,\n                                          StreamBufferCallbackFunction_t pxReceiveCompletedCallback )\n{\n    /* Assert here is deliberately writing to the entire buffer to ensure it can\n     * be written to without generating exceptions, and is setting the buffer to a\n     * known value to assist in development/debugging. */\n    #if ( configASSERT_DEFINED == 1 )\n    {\n        /* The value written just has to be identifiable when looking at the\n         * memory.  Don't use 0xA5 as that is the stack fill value and could\n         * result in confusion as to what is actually being observed. */\n        #define STREAM_BUFFER_BUFFER_WRITE_VALUE    ( 0x55 )\n        configASSERT( memset( pucBuffer, ( int ) STREAM_BUFFER_BUFFER_WRITE_VALUE, xBufferSizeBytes ) == pucBuffer );\n    }\n    #endif\n\n    ( void ) memset( ( void * ) pxStreamBuffer, 0x00, sizeof( StreamBuffer_t ) );\n    pxStreamBuffer->pucBuffer = pucBuffer;\n    pxStreamBuffer->xLength = xBufferSizeBytes;\n    pxStreamBuffer->xTriggerLevelBytes = xTriggerLevelBytes;\n    pxStreamBuffer->ucFlags = ucFlags;\n    pxStreamBuffer->uxNotificationIndex = tskDEFAULT_INDEX_TO_NOTIFY;\n    #if ( configUSE_SB_COMPLETED_CALLBACK == 1 )\n    {\n        pxStreamBuffer->pxSendCompletedCallback = pxSendCompletedCallback;\n        pxStreamBuffer->pxReceiveCompletedCallback = pxReceiveCompletedCallback;\n    }\n    #else\n    {\n        /* MISRA Ref 11.1.1 [Object type casting] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-111 */\n        /* coverity[misra_c_2012_rule_11_1_violation] */\n        ( void ) pxSendCompletedCallback;\n\n        /* MISRA Ref 11.1.1 [Object type casting] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-111 */\n        /* coverity[misra_c_2012_rule_11_1_violation] */\n        ( void ) pxReceiveCompletedCallback;\n    }\n    #endif /* if ( configUSE_SB_COMPLETED_CALLBACK == 1 ) */\n}\n/*-----------------------------------------------------------*/\n\nUBaseType_t uxStreamBufferGetStreamBufferNotificationIndex( StreamBufferHandle_t xStreamBuffer )\n{\n    StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n\n    traceENTER_uxStreamBufferGetStreamBufferNotificationIndex( xStreamBuffer );\n\n    configASSERT( pxStreamBuffer );\n\n    traceRETURN_uxStreamBufferGetStreamBufferNotificationIndex( pxStreamBuffer->uxNotificationIndex );\n\n    return pxStreamBuffer->uxNotificationIndex;\n}\n/*-----------------------------------------------------------*/\n\nvoid vStreamBufferSetStreamBufferNotificationIndex( StreamBufferHandle_t xStreamBuffer,\n                                                    UBaseType_t uxNotificationIndex )\n{\n    StreamBuffer_t * const pxStreamBuffer = xStreamBuffer;\n\n    traceENTER_vStreamBufferSetStreamBufferNotificationIndex( xStreamBuffer, uxNotificationIndex );\n\n    configASSERT( pxStreamBuffer );\n\n    /* There should be no task waiting otherwise we'd never resume them. */\n    configASSERT( pxStreamBuffer->xTaskWaitingToReceive == NULL );\n    configASSERT( pxStreamBuffer->xTaskWaitingToSend == NULL );\n\n    /* Check that the task notification index is valid. */\n    configASSERT( uxNotificationIndex < configTASK_NOTIFICATION_ARRAY_ENTRIES );\n\n    pxStreamBuffer->uxNotificationIndex = uxNotificationIndex;\n\n    traceRETURN_vStreamBufferSetStreamBufferNotificationIndex();\n}\n/*-----------------------------------------------------------*/\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n\n    UBaseType_t uxStreamBufferGetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer )\n    {\n        traceENTER_uxStreamBufferGetStreamBufferNumber( xStreamBuffer );\n\n        traceRETURN_uxStreamBufferGetStreamBufferNumber( xStreamBuffer->uxStreamBufferNumber );\n\n        return xStreamBuffer->uxStreamBufferNumber;\n    }\n\n    #endif /* configUSE_TRACE_FACILITY */\n/*-----------------------------------------------------------*/\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n\n    void vStreamBufferSetStreamBufferNumber( StreamBufferHandle_t xStreamBuffer,\n                                             UBaseType_t uxStreamBufferNumber )\n    {\n        traceENTER_vStreamBufferSetStreamBufferNumber( xStreamBuffer, uxStreamBufferNumber );\n\n        xStreamBuffer->uxStreamBufferNumber = uxStreamBufferNumber;\n\n        traceRETURN_vStreamBufferSetStreamBufferNumber();\n    }\n\n    #endif /* configUSE_TRACE_FACILITY */\n/*-----------------------------------------------------------*/\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n\n    uint8_t ucStreamBufferGetStreamBufferType( StreamBufferHandle_t xStreamBuffer )\n    {\n        traceENTER_ucStreamBufferGetStreamBufferType( xStreamBuffer );\n\n        traceRETURN_ucStreamBufferGetStreamBufferType( ( uint8_t ) ( xStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) );\n\n        return( ( uint8_t ) ( xStreamBuffer->ucFlags & sbFLAGS_IS_MESSAGE_BUFFER ) );\n    }\n\n    #endif /* configUSE_TRACE_FACILITY */\n/*-----------------------------------------------------------*/\n\n/* This entire source file will be skipped if the application is not configured\n * to include stream buffer functionality. This #if is closed at the very bottom\n * of this file. If you want to include stream buffers then ensure\n * configUSE_STREAM_BUFFERS is set to 1 in FreeRTOSConfig.h. */\n#endif /* configUSE_STREAM_BUFFERS == 1 */\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/tasks.c",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n/* Standard includes. */\n#include <stdlib.h>\n#include <string.h>\n\n/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining\n * all the API functions to use the MPU wrappers.  That should only be done when\n * task.h is included from an application file. */\n#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE\n\n/* FreeRTOS includes. */\n#include \"FreeRTOS.h\"\n#include \"task.h\"\n#include \"timers.h\"\n#include \"stack_macros.h\"\n\n/* The default definitions are only available for non-MPU ports. The\n * reason is that the stack alignment requirements vary for different\n * architectures.*/\n#if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configKERNEL_PROVIDED_STATIC_MEMORY == 1 ) && ( portUSING_MPU_WRAPPERS != 0 ) )\n    #error configKERNEL_PROVIDED_STATIC_MEMORY cannot be set to 1 when using an MPU port. The vApplicationGet*TaskMemory() functions must be provided manually.\n#endif\n\n/* The MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined\n * for the header files above, but not in this file, in order to generate the\n * correct privileged Vs unprivileged linkage and placement. */\n#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE\n\n/* Set configUSE_STATS_FORMATTING_FUNCTIONS to 2 to include the stats formatting\n * functions but without including stdio.h here. */\n#if ( configUSE_STATS_FORMATTING_FUNCTIONS == 1 )\n\n/* At the bottom of this file are two optional functions that can be used\n * to generate human readable text from the raw data generated by the\n * uxTaskGetSystemState() function.  Note the formatting functions are provided\n * for convenience only, and are NOT considered part of the kernel. */\n    #include <stdio.h>\n#endif /* configUSE_STATS_FORMATTING_FUNCTIONS == 1 ) */\n\n#if ( configUSE_PREEMPTION == 0 )\n\n/* If the cooperative scheduler is being used then a yield should not be\n * performed just because a higher priority task has been woken. */\n    #define taskYIELD_TASK_CORE_IF_USING_PREEMPTION( pxTCB )\n    #define taskYIELD_ANY_CORE_IF_USING_PREEMPTION( pxTCB )\n#else\n\n    #if ( configNUMBER_OF_CORES == 1 )\n\n/* This macro requests the running task pxTCB to yield. In single core\n * scheduler, a running task always runs on core 0 and portYIELD_WITHIN_API()\n * can be used to request the task running on core 0 to yield. Therefore, pxTCB\n * is not used in this macro. */\n        #define taskYIELD_TASK_CORE_IF_USING_PREEMPTION( pxTCB ) \\\n    do {                                                         \\\n        ( void ) ( pxTCB );                                      \\\n        portYIELD_WITHIN_API();                                  \\\n    } while( 0 )\n\n        #define taskYIELD_ANY_CORE_IF_USING_PREEMPTION( pxTCB ) \\\n    do {                                                        \\\n        if( pxCurrentTCB->uxPriority < ( pxTCB )->uxPriority )  \\\n        {                                                       \\\n            portYIELD_WITHIN_API();                             \\\n        }                                                       \\\n        else                                                    \\\n        {                                                       \\\n            mtCOVERAGE_TEST_MARKER();                           \\\n        }                                                       \\\n    } while( 0 )\n\n    #else /* if ( configNUMBER_OF_CORES == 1 ) */\n\n/* Yield the core on which this task is running. */\n        #define taskYIELD_TASK_CORE_IF_USING_PREEMPTION( pxTCB )    prvYieldCore( ( pxTCB )->xTaskRunState )\n\n/* Yield for the task if a running task has priority lower than this task. */\n        #define taskYIELD_ANY_CORE_IF_USING_PREEMPTION( pxTCB )     prvYieldForTask( pxTCB )\n\n    #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n\n#endif /* if ( configUSE_PREEMPTION == 0 ) */\n\n/* Values that can be assigned to the ucNotifyState member of the TCB. */\n#define taskNOT_WAITING_NOTIFICATION              ( ( uint8_t ) 0 ) /* Must be zero as it is the initialised value. */\n#define taskWAITING_NOTIFICATION                  ( ( uint8_t ) 1 )\n#define taskNOTIFICATION_RECEIVED                 ( ( uint8_t ) 2 )\n\n/*\n * The value used to fill the stack of a task when the task is created.  This\n * is used purely for checking the high water mark for tasks.\n */\n#define tskSTACK_FILL_BYTE                        ( 0xa5U )\n\n/* Bits used to record how a task's stack and TCB were allocated. */\n#define tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB    ( ( uint8_t ) 0 )\n#define tskSTATICALLY_ALLOCATED_STACK_ONLY        ( ( uint8_t ) 1 )\n#define tskSTATICALLY_ALLOCATED_STACK_AND_TCB     ( ( uint8_t ) 2 )\n\n/* If any of the following are set then task stacks are filled with a known\n * value so the high water mark can be determined.  If none of the following are\n * set then don't fill the stack so there is no unnecessary dependency on memset. */\n#if ( ( configCHECK_FOR_STACK_OVERFLOW > 1 ) || ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark2 == 1 ) )\n    #define tskSET_NEW_STACKS_TO_KNOWN_VALUE    1\n#else\n    #define tskSET_NEW_STACKS_TO_KNOWN_VALUE    0\n#endif\n\n/*\n * Macros used by vListTask to indicate which state a task is in.\n */\n#define tskRUNNING_CHAR      ( 'X' )\n#define tskBLOCKED_CHAR      ( 'B' )\n#define tskREADY_CHAR        ( 'R' )\n#define tskDELETED_CHAR      ( 'D' )\n#define tskSUSPENDED_CHAR    ( 'S' )\n\n/*\n * Some kernel aware debuggers require the data the debugger needs access to be\n * global, rather than file scope.\n */\n#ifdef portREMOVE_STATIC_QUALIFIER\n    #define static\n#endif\n\n/* The name allocated to the Idle task.  This can be overridden by defining\n * configIDLE_TASK_NAME in FreeRTOSConfig.h. */\n#ifndef configIDLE_TASK_NAME\n    #define configIDLE_TASK_NAME    \"IDLE\"\n#endif\n\n#if ( configUSE_PORT_OPTIMISED_TASK_SELECTION == 0 )\n\n/* If configUSE_PORT_OPTIMISED_TASK_SELECTION is 0 then task selection is\n * performed in a generic way that is not optimised to any particular\n * microcontroller architecture. */\n\n/* uxTopReadyPriority holds the priority of the highest priority ready\n * state task. */\n    #define taskRECORD_READY_PRIORITY( uxPriority ) \\\n    do {                                            \\\n        if( ( uxPriority ) > uxTopReadyPriority )   \\\n        {                                           \\\n            uxTopReadyPriority = ( uxPriority );    \\\n        }                                           \\\n    } while( 0 ) /* taskRECORD_READY_PRIORITY */\n\n/*-----------------------------------------------------------*/\n\n    #if ( configNUMBER_OF_CORES == 1 )\n        #define taskSELECT_HIGHEST_PRIORITY_TASK()                                       \\\n    do {                                                                                 \\\n        UBaseType_t uxTopPriority = uxTopReadyPriority;                                  \\\n                                                                                         \\\n        /* Find the highest priority queue that contains ready tasks. */                 \\\n        while( listLIST_IS_EMPTY( &( pxReadyTasksLists[ uxTopPriority ] ) ) != pdFALSE ) \\\n        {                                                                                \\\n            configASSERT( uxTopPriority );                                               \\\n            --uxTopPriority;                                                             \\\n        }                                                                                \\\n                                                                                         \\\n        /* listGET_OWNER_OF_NEXT_ENTRY indexes through the list, so the tasks of \\\n         * the  same priority get an equal share of the processor time. */                    \\\n        listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB, &( pxReadyTasksLists[ uxTopPriority ] ) ); \\\n        uxTopReadyPriority = uxTopPriority;                                                   \\\n    } while( 0 ) /* taskSELECT_HIGHEST_PRIORITY_TASK */\n    #else /* if ( configNUMBER_OF_CORES == 1 ) */\n\n        #define taskSELECT_HIGHEST_PRIORITY_TASK( xCoreID )    prvSelectHighestPriorityTask( xCoreID )\n\n    #endif /* if ( configNUMBER_OF_CORES == 1 ) */\n\n/*-----------------------------------------------------------*/\n\n/* Define away taskRESET_READY_PRIORITY() and portRESET_READY_PRIORITY() as\n * they are only required when a port optimised method of task selection is\n * being used. */\n    #define taskRESET_READY_PRIORITY( uxPriority )\n    #define portRESET_READY_PRIORITY( uxPriority, uxTopReadyPriority )\n\n#else /* configUSE_PORT_OPTIMISED_TASK_SELECTION */\n\n/* If configUSE_PORT_OPTIMISED_TASK_SELECTION is 1 then task selection is\n * performed in a way that is tailored to the particular microcontroller\n * architecture being used. */\n\n/* A port optimised version is provided.  Call the port defined macros. */\n    #define taskRECORD_READY_PRIORITY( uxPriority )    portRECORD_READY_PRIORITY( ( uxPriority ), uxTopReadyPriority )\n\n/*-----------------------------------------------------------*/\n\n    #define taskSELECT_HIGHEST_PRIORITY_TASK()                                                  \\\n    do {                                                                                        \\\n        UBaseType_t uxTopPriority;                                                              \\\n                                                                                                \\\n        /* Find the highest priority list that contains ready tasks. */                         \\\n        portGET_HIGHEST_PRIORITY( uxTopPriority, uxTopReadyPriority );                          \\\n        configASSERT( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ uxTopPriority ] ) ) > 0 ); \\\n        listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB, &( pxReadyTasksLists[ uxTopPriority ] ) );   \\\n    } while( 0 )\n\n/*-----------------------------------------------------------*/\n\n/* A port optimised version is provided, call it only if the TCB being reset\n * is being referenced from a ready list.  If it is referenced from a delayed\n * or suspended list then it won't be in a ready list. */\n    #define taskRESET_READY_PRIORITY( uxPriority )                                                     \\\n    do {                                                                                               \\\n        if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ ( uxPriority ) ] ) ) == ( UBaseType_t ) 0 ) \\\n        {                                                                                              \\\n            portRESET_READY_PRIORITY( ( uxPriority ), ( uxTopReadyPriority ) );                        \\\n        }                                                                                              \\\n    } while( 0 )\n\n#endif /* configUSE_PORT_OPTIMISED_TASK_SELECTION */\n\n/*-----------------------------------------------------------*/\n\n/* pxDelayedTaskList and pxOverflowDelayedTaskList are switched when the tick\n * count overflows. */\n#define taskSWITCH_DELAYED_LISTS()                                                \\\n    do {                                                                          \\\n        List_t * pxTemp;                                                          \\\n                                                                                  \\\n        /* The delayed tasks list should be empty when the lists are switched. */ \\\n        configASSERT( ( listLIST_IS_EMPTY( pxDelayedTaskList ) ) );               \\\n                                                                                  \\\n        pxTemp = pxDelayedTaskList;                                               \\\n        pxDelayedTaskList = pxOverflowDelayedTaskList;                            \\\n        pxOverflowDelayedTaskList = pxTemp;                                       \\\n        xNumOfOverflows = ( BaseType_t ) ( xNumOfOverflows + 1 );                 \\\n        prvResetNextTaskUnblockTime();                                            \\\n    } while( 0 )\n\n/*-----------------------------------------------------------*/\n\n/*\n * Place the task represented by pxTCB into the appropriate ready list for\n * the task.  It is inserted at the end of the list.\n */\n#define prvAddTaskToReadyList( pxTCB )                                                                     \\\n    do {                                                                                                   \\\n        traceMOVED_TASK_TO_READY_STATE( pxTCB );                                                           \\\n        taskRECORD_READY_PRIORITY( ( pxTCB )->uxPriority );                                                \\\n        listINSERT_END( &( pxReadyTasksLists[ ( pxTCB )->uxPriority ] ), &( ( pxTCB )->xStateListItem ) ); \\\n        tracePOST_MOVED_TASK_TO_READY_STATE( pxTCB );                                                      \\\n    } while( 0 )\n/*-----------------------------------------------------------*/\n\n/*\n * Several functions take a TaskHandle_t parameter that can optionally be NULL,\n * where NULL is used to indicate that the handle of the currently executing\n * task should be used in place of the parameter.  This macro simply checks to\n * see if the parameter is NULL and returns a pointer to the appropriate TCB.\n */\n#define prvGetTCBFromHandle( pxHandle )    ( ( ( pxHandle ) == NULL ) ? pxCurrentTCB : ( pxHandle ) )\n\n/* The item value of the event list item is normally used to hold the priority\n * of the task to which it belongs (coded to allow it to be held in reverse\n * priority order).  However, it is occasionally borrowed for other purposes.  It\n * is important its value is not updated due to a task priority change while it is\n * being used for another purpose.  The following bit definition is used to inform\n * the scheduler that the value should not be changed - in which case it is the\n * responsibility of whichever module is using the value to ensure it gets set back\n * to its original value when it is released. */\n#if ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_16_BITS )\n    #define taskEVENT_LIST_ITEM_VALUE_IN_USE    ( ( uint16_t ) 0x8000U )\n#elif ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_32_BITS )\n    #define taskEVENT_LIST_ITEM_VALUE_IN_USE    ( ( uint32_t ) 0x80000000U )\n#elif ( configTICK_TYPE_WIDTH_IN_BITS == TICK_TYPE_WIDTH_64_BITS )\n    #define taskEVENT_LIST_ITEM_VALUE_IN_USE    ( ( uint64_t ) 0x8000000000000000U )\n#endif\n\n/* Indicates that the task is not actively running on any core. */\n#define taskTASK_NOT_RUNNING           ( ( BaseType_t ) ( -1 ) )\n\n/* Indicates that the task is actively running but scheduled to yield. */\n#define taskTASK_SCHEDULED_TO_YIELD    ( ( BaseType_t ) ( -2 ) )\n\n/* Returns pdTRUE if the task is actively running and not scheduled to yield. */\n#if ( configNUMBER_OF_CORES == 1 )\n    #define taskTASK_IS_RUNNING( pxTCB )                          ( ( ( pxTCB ) == pxCurrentTCB ) ? ( pdTRUE ) : ( pdFALSE ) )\n    #define taskTASK_IS_RUNNING_OR_SCHEDULED_TO_YIELD( pxTCB )    ( ( ( pxTCB ) == pxCurrentTCB ) ? ( pdTRUE ) : ( pdFALSE ) )\n#else\n    #define taskTASK_IS_RUNNING( pxTCB )                          ( ( ( ( pxTCB )->xTaskRunState >= ( BaseType_t ) 0 ) && ( ( pxTCB )->xTaskRunState < ( BaseType_t ) configNUMBER_OF_CORES ) ) ? ( pdTRUE ) : ( pdFALSE ) )\n    #define taskTASK_IS_RUNNING_OR_SCHEDULED_TO_YIELD( pxTCB )    ( ( ( pxTCB )->xTaskRunState != taskTASK_NOT_RUNNING ) ? ( pdTRUE ) : ( pdFALSE ) )\n#endif\n\n/* Indicates that the task is an Idle task. */\n#define taskATTRIBUTE_IS_IDLE    ( UBaseType_t ) ( 1U << 0U )\n\n#if ( ( configNUMBER_OF_CORES > 1 ) && ( portCRITICAL_NESTING_IN_TCB == 1 ) )\n    #define portGET_CRITICAL_NESTING_COUNT()          ( pxCurrentTCBs[ portGET_CORE_ID() ]->uxCriticalNesting )\n    #define portSET_CRITICAL_NESTING_COUNT( x )       ( pxCurrentTCBs[ portGET_CORE_ID() ]->uxCriticalNesting = ( x ) )\n    #define portINCREMENT_CRITICAL_NESTING_COUNT()    ( pxCurrentTCBs[ portGET_CORE_ID() ]->uxCriticalNesting++ )\n    #define portDECREMENT_CRITICAL_NESTING_COUNT()    ( pxCurrentTCBs[ portGET_CORE_ID() ]->uxCriticalNesting-- )\n#endif /* #if ( ( configNUMBER_OF_CORES > 1 ) && ( portCRITICAL_NESTING_IN_TCB == 1 ) ) */\n\n#define taskBITS_PER_BYTE    ( ( size_t ) 8 )\n\n#if ( configNUMBER_OF_CORES > 1 )\n\n/* Yields the given core. This must be called from a critical section and xCoreID\n * must be valid. This macro is not required in single core since there is only\n * one core to yield. */\n    #define prvYieldCore( xCoreID )                                                          \\\n    do {                                                                                     \\\n        if( ( xCoreID ) == ( BaseType_t ) portGET_CORE_ID() )                                \\\n        {                                                                                    \\\n            /* Pending a yield for this core since it is in the critical section. */         \\\n            xYieldPendings[ ( xCoreID ) ] = pdTRUE;                                          \\\n        }                                                                                    \\\n        else                                                                                 \\\n        {                                                                                    \\\n            /* Request other core to yield if it is not requested before. */                 \\\n            if( pxCurrentTCBs[ ( xCoreID ) ]->xTaskRunState != taskTASK_SCHEDULED_TO_YIELD ) \\\n            {                                                                                \\\n                portYIELD_CORE( xCoreID );                                                   \\\n                pxCurrentTCBs[ ( xCoreID ) ]->xTaskRunState = taskTASK_SCHEDULED_TO_YIELD;   \\\n            }                                                                                \\\n        }                                                                                    \\\n    } while( 0 )\n#endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n/*-----------------------------------------------------------*/\n\n/*\n * Task control block.  A task control block (TCB) is allocated for each task,\n * and stores task state information, including a pointer to the task's context\n * (the task's run time environment, including register values)\n */\ntypedef struct tskTaskControlBlock       /* The old naming convention is used to prevent breaking kernel aware debuggers. */\n{\n    volatile StackType_t * pxTopOfStack; /**< Points to the location of the last item placed on the tasks stack.  THIS MUST BE THE FIRST MEMBER OF THE TCB STRUCT. */\n\n    #if ( portUSING_MPU_WRAPPERS == 1 )\n        xMPU_SETTINGS xMPUSettings; /**< The MPU settings are defined as part of the port layer.  THIS MUST BE THE SECOND MEMBER OF THE TCB STRUCT. */\n    #endif\n\n    #if ( configUSE_CORE_AFFINITY == 1 ) && ( configNUMBER_OF_CORES > 1 )\n        UBaseType_t uxCoreAffinityMask; /**< Used to link the task to certain cores.  UBaseType_t must have greater than or equal to the number of bits as configNUMBER_OF_CORES. */\n    #endif\n\n    ListItem_t xStateListItem;                  /**< The list that the state list item of a task is reference from denotes the state of that task (Ready, Blocked, Suspended ). */\n    ListItem_t xEventListItem;                  /**< Used to reference a task from an event list. */\n    UBaseType_t uxPriority;                     /**< The priority of the task.  0 is the lowest priority. */\n    StackType_t * pxStack;                      /**< Points to the start of the stack. */\n    #if ( configNUMBER_OF_CORES > 1 )\n        volatile BaseType_t xTaskRunState;      /**< Used to identify the core the task is running on, if the task is running. Otherwise, identifies the task's state - not running or yielding. */\n        UBaseType_t uxTaskAttributes;           /**< Task's attributes - currently used to identify the idle tasks. */\n    #endif\n    char pcTaskName[ configMAX_TASK_NAME_LEN ]; /**< Descriptive name given to the task when created.  Facilitates debugging only. */\n\n    #if ( configUSE_TASK_PREEMPTION_DISABLE == 1 )\n        BaseType_t xPreemptionDisable; /**< Used to prevent the task from being preempted. */\n    #endif\n\n    #if ( ( portSTACK_GROWTH > 0 ) || ( configRECORD_STACK_HIGH_ADDRESS == 1 ) )\n        StackType_t * pxEndOfStack; /**< Points to the highest valid address for the stack. */\n    #endif\n\n    #if ( portCRITICAL_NESTING_IN_TCB == 1 )\n        UBaseType_t uxCriticalNesting; /**< Holds the critical section nesting depth for ports that do not maintain their own count in the port layer. */\n    #endif\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n        UBaseType_t uxTCBNumber;  /**< Stores a number that increments each time a TCB is created.  It allows debuggers to determine when a task has been deleted and then recreated. */\n        UBaseType_t uxTaskNumber; /**< Stores a number specifically for use by third party trace code. */\n    #endif\n\n    #if ( configUSE_MUTEXES == 1 )\n        UBaseType_t uxBasePriority; /**< The priority last assigned to the task - used by the priority inheritance mechanism. */\n        UBaseType_t uxMutexesHeld;\n    #endif\n\n    #if ( configUSE_APPLICATION_TASK_TAG == 1 )\n        TaskHookFunction_t pxTaskTag;\n    #endif\n\n    #if ( configNUM_THREAD_LOCAL_STORAGE_POINTERS > 0 )\n        void * pvThreadLocalStoragePointers[ configNUM_THREAD_LOCAL_STORAGE_POINTERS ];\n    #endif\n\n    #if ( configGENERATE_RUN_TIME_STATS == 1 )\n        configRUN_TIME_COUNTER_TYPE ulRunTimeCounter; /**< Stores the amount of time the task has spent in the Running state. */\n    #endif\n\n    #if ( configUSE_C_RUNTIME_TLS_SUPPORT == 1 )\n        configTLS_BLOCK_TYPE xTLSBlock; /**< Memory block used as Thread Local Storage (TLS) Block for the task. */\n    #endif\n\n    #if ( configUSE_TASK_NOTIFICATIONS == 1 )\n        volatile uint32_t ulNotifiedValue[ configTASK_NOTIFICATION_ARRAY_ENTRIES ];\n        volatile uint8_t ucNotifyState[ configTASK_NOTIFICATION_ARRAY_ENTRIES ];\n    #endif\n\n    /* See the comments in FreeRTOS.h with the definition of\n     * tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE. */\n    #if ( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 )\n        uint8_t ucStaticallyAllocated; /**< Set to pdTRUE if the task is a statically allocated to ensure no attempt is made to free the memory. */\n    #endif\n\n    #if ( INCLUDE_xTaskAbortDelay == 1 )\n        uint8_t ucDelayAborted;\n    #endif\n\n    #if ( configUSE_POSIX_ERRNO == 1 )\n        int iTaskErrno;\n    #endif\n} tskTCB;\n\n/* The old tskTCB name is maintained above then typedefed to the new TCB_t name\n * below to enable the use of older kernel aware debuggers. */\ntypedef tskTCB TCB_t;\n\n#if ( configNUMBER_OF_CORES == 1 )\n    /* MISRA Ref 8.4.1 [Declaration shall be visible] */\n    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-84 */\n    /* coverity[misra_c_2012_rule_8_4_violation] */\n    portDONT_DISCARD PRIVILEGED_DATA TCB_t * volatile pxCurrentTCB = NULL;\n#else\n    /* MISRA Ref 8.4.1 [Declaration shall be visible] */\n    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-84 */\n    /* coverity[misra_c_2012_rule_8_4_violation] */\n    portDONT_DISCARD PRIVILEGED_DATA TCB_t * volatile pxCurrentTCBs[ configNUMBER_OF_CORES ];\n    #define pxCurrentTCB    xTaskGetCurrentTaskHandle()\n#endif\n\n/* Lists for ready and blocked tasks. --------------------\n * xDelayedTaskList1 and xDelayedTaskList2 could be moved to function scope but\n * doing so breaks some kernel aware debuggers and debuggers that rely on removing\n * the static qualifier. */\nPRIVILEGED_DATA static List_t pxReadyTasksLists[ configMAX_PRIORITIES ]; /**< Prioritised ready tasks. */\nPRIVILEGED_DATA static List_t xDelayedTaskList1;                         /**< Delayed tasks. */\nPRIVILEGED_DATA static List_t xDelayedTaskList2;                         /**< Delayed tasks (two lists are used - one for delays that have overflowed the current tick count. */\nPRIVILEGED_DATA static List_t * volatile pxDelayedTaskList;              /**< Points to the delayed task list currently being used. */\nPRIVILEGED_DATA static List_t * volatile pxOverflowDelayedTaskList;      /**< Points to the delayed task list currently being used to hold tasks that have overflowed the current tick count. */\nPRIVILEGED_DATA static List_t xPendingReadyList;                         /**< Tasks that have been readied while the scheduler was suspended.  They will be moved to the ready list when the scheduler is resumed. */\n\n#if ( INCLUDE_vTaskDelete == 1 )\n\n    PRIVILEGED_DATA static List_t xTasksWaitingTermination; /**< Tasks that have been deleted - but their memory not yet freed. */\n    PRIVILEGED_DATA static volatile UBaseType_t uxDeletedTasksWaitingCleanUp = ( UBaseType_t ) 0U;\n\n#endif\n\n#if ( INCLUDE_vTaskSuspend == 1 )\n\n    PRIVILEGED_DATA static List_t xSuspendedTaskList; /**< Tasks that are currently suspended. */\n\n#endif\n\n/* Global POSIX errno. Its value is changed upon context switching to match\n * the errno of the currently running task. */\n#if ( configUSE_POSIX_ERRNO == 1 )\n    int FreeRTOS_errno = 0;\n#endif\n\n/* Other file private variables. --------------------------------*/\nPRIVILEGED_DATA static volatile UBaseType_t uxCurrentNumberOfTasks = ( UBaseType_t ) 0U;\nPRIVILEGED_DATA static volatile TickType_t xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT;\nPRIVILEGED_DATA static volatile UBaseType_t uxTopReadyPriority = tskIDLE_PRIORITY;\nPRIVILEGED_DATA static volatile BaseType_t xSchedulerRunning = pdFALSE;\nPRIVILEGED_DATA static volatile TickType_t xPendedTicks = ( TickType_t ) 0U;\nPRIVILEGED_DATA static volatile BaseType_t xYieldPendings[ configNUMBER_OF_CORES ] = { pdFALSE };\nPRIVILEGED_DATA static volatile BaseType_t xNumOfOverflows = ( BaseType_t ) 0;\nPRIVILEGED_DATA static UBaseType_t uxTaskNumber = ( UBaseType_t ) 0U;\nPRIVILEGED_DATA static volatile TickType_t xNextTaskUnblockTime = ( TickType_t ) 0U; /* Initialised to portMAX_DELAY before the scheduler starts. */\nPRIVILEGED_DATA static TaskHandle_t xIdleTaskHandles[ configNUMBER_OF_CORES ];       /**< Holds the handles of the idle tasks.  The idle tasks are created automatically when the scheduler is started. */\n\n/* Improve support for OpenOCD. The kernel tracks Ready tasks via priority lists.\n * For tracking the state of remote threads, OpenOCD uses uxTopUsedPriority\n * to determine the number of priority lists to read back from the remote target. */\nstatic const volatile UBaseType_t uxTopUsedPriority = configMAX_PRIORITIES - 1U;\n\n/* Context switches are held pending while the scheduler is suspended.  Also,\n * interrupts must not manipulate the xStateListItem of a TCB, or any of the\n * lists the xStateListItem can be referenced from, if the scheduler is suspended.\n * If an interrupt needs to unblock a task while the scheduler is suspended then it\n * moves the task's event list item into the xPendingReadyList, ready for the\n * kernel to move the task from the pending ready list into the real ready list\n * when the scheduler is unsuspended.  The pending ready list itself can only be\n * accessed from a critical section.\n *\n * Updates to uxSchedulerSuspended must be protected by both the task lock and the ISR lock\n * and must not be done from an ISR. Reads must be protected by either lock and may be done\n * from either an ISR or a task. */\nPRIVILEGED_DATA static volatile UBaseType_t uxSchedulerSuspended = ( UBaseType_t ) 0U;\n\n#if ( configGENERATE_RUN_TIME_STATS == 1 )\n\n/* Do not move these variables to function scope as doing so prevents the\n * code working with debuggers that need to remove the static qualifier. */\nPRIVILEGED_DATA static configRUN_TIME_COUNTER_TYPE ulTaskSwitchedInTime[ configNUMBER_OF_CORES ] = { 0U };    /**< Holds the value of a timer/counter the last time a task was switched in. */\nPRIVILEGED_DATA static volatile configRUN_TIME_COUNTER_TYPE ulTotalRunTime[ configNUMBER_OF_CORES ] = { 0U }; /**< Holds the total amount of execution time as defined by the run time counter clock. */\n\n#endif\n\n/*-----------------------------------------------------------*/\n\n/* File private functions. --------------------------------*/\n\n/*\n * Creates the idle tasks during scheduler start.\n */\nstatic BaseType_t prvCreateIdleTasks( void );\n\n#if ( configNUMBER_OF_CORES > 1 )\n\n/*\n * Checks to see if another task moved the current task out of the ready\n * list while it was waiting to enter a critical section and yields, if so.\n */\n    static void prvCheckForRunStateChange( void );\n#endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n\n#if ( configNUMBER_OF_CORES > 1 )\n\n/*\n * Yields a core, or cores if multiple priorities are not allowed to run\n * simultaneously, to allow the task pxTCB to run.\n */\n    static void prvYieldForTask( const TCB_t * pxTCB );\n#endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n\n#if ( configNUMBER_OF_CORES > 1 )\n\n/*\n * Selects the highest priority available task for the given core.\n */\n    static void prvSelectHighestPriorityTask( BaseType_t xCoreID );\n#endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n\n/**\n * Utility task that simply returns pdTRUE if the task referenced by xTask is\n * currently in the Suspended state, or pdFALSE if the task referenced by xTask\n * is in any other state.\n */\n#if ( INCLUDE_vTaskSuspend == 1 )\n\n    static BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;\n\n#endif /* INCLUDE_vTaskSuspend */\n\n/*\n * Utility to ready all the lists used by the scheduler.  This is called\n * automatically upon the creation of the first task.\n */\nstatic void prvInitialiseTaskLists( void ) PRIVILEGED_FUNCTION;\n\n/*\n * The idle task, which as all tasks is implemented as a never ending loop.\n * The idle task is automatically created and added to the ready lists upon\n * creation of the first user task.\n *\n * In the FreeRTOS SMP, configNUMBER_OF_CORES - 1 passive idle tasks are also\n * created to ensure that each core has an idle task to run when no other\n * task is available to run.\n *\n * The portTASK_FUNCTION_PROTO() macro is used to allow port/compiler specific\n * language extensions.  The equivalent prototype for these functions are:\n *\n * void prvIdleTask( void *pvParameters );\n * void prvPassiveIdleTask( void *pvParameters );\n *\n */\nstatic portTASK_FUNCTION_PROTO( prvIdleTask, pvParameters ) PRIVILEGED_FUNCTION;\n#if ( configNUMBER_OF_CORES > 1 )\n    static portTASK_FUNCTION_PROTO( prvPassiveIdleTask, pvParameters ) PRIVILEGED_FUNCTION;\n#endif\n\n/*\n * Utility to free all memory allocated by the scheduler to hold a TCB,\n * including the stack pointed to by the TCB.\n *\n * This does not free memory allocated by the task itself (i.e. memory\n * allocated by calls to pvPortMalloc from within the tasks application code).\n */\n#if ( INCLUDE_vTaskDelete == 1 )\n\n    static void prvDeleteTCB( TCB_t * pxTCB ) PRIVILEGED_FUNCTION;\n\n#endif\n\n/*\n * Used only by the idle task.  This checks to see if anything has been placed\n * in the list of tasks waiting to be deleted.  If so the task is cleaned up\n * and its TCB deleted.\n */\nstatic void prvCheckTasksWaitingTermination( void ) PRIVILEGED_FUNCTION;\n\n/*\n * The currently executing task is entering the Blocked state.  Add the task to\n * either the current or the overflow delayed task list.\n */\nstatic void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,\n                                            const BaseType_t xCanBlockIndefinitely ) PRIVILEGED_FUNCTION;\n\n/*\n * Fills an TaskStatus_t structure with information on each task that is\n * referenced from the pxList list (which may be a ready list, a delayed list,\n * a suspended list, etc.).\n *\n * THIS FUNCTION IS INTENDED FOR DEBUGGING ONLY, AND SHOULD NOT BE CALLED FROM\n * NORMAL APPLICATION CODE.\n */\n#if ( configUSE_TRACE_FACILITY == 1 )\n\n    static UBaseType_t prvListTasksWithinSingleList( TaskStatus_t * pxTaskStatusArray,\n                                                     List_t * pxList,\n                                                     eTaskState eState ) PRIVILEGED_FUNCTION;\n\n#endif\n\n/*\n * Searches pxList for a task with name pcNameToQuery - returning a handle to\n * the task if it is found, or NULL if the task is not found.\n */\n#if ( INCLUDE_xTaskGetHandle == 1 )\n\n    static TCB_t * prvSearchForNameWithinSingleList( List_t * pxList,\n                                                     const char pcNameToQuery[] ) PRIVILEGED_FUNCTION;\n\n#endif\n\n/*\n * When a task is created, the stack of the task is filled with a known value.\n * This function determines the 'high water mark' of the task stack by\n * determining how much of the stack remains at the original preset value.\n */\n#if ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark2 == 1 ) )\n\n    static configSTACK_DEPTH_TYPE prvTaskCheckFreeStackSpace( const uint8_t * pucStackByte ) PRIVILEGED_FUNCTION;\n\n#endif\n\n/*\n * Return the amount of time, in ticks, that will pass before the kernel will\n * next move a task from the Blocked state to the Running state.\n *\n * This conditional compilation should use inequality to 0, not equality to 1.\n * This is to ensure portSUPPRESS_TICKS_AND_SLEEP() can be called when user\n * defined low power mode implementations require configUSE_TICKLESS_IDLE to be\n * set to a value other than 1.\n */\n#if ( configUSE_TICKLESS_IDLE != 0 )\n\n    static TickType_t prvGetExpectedIdleTime( void ) PRIVILEGED_FUNCTION;\n\n#endif\n\n/*\n * Set xNextTaskUnblockTime to the time at which the next Blocked state task\n * will exit the Blocked state.\n */\nstatic void prvResetNextTaskUnblockTime( void ) PRIVILEGED_FUNCTION;\n\n#if ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 )\n\n/*\n * Helper function used to pad task names with spaces when printing out\n * human readable tables of task information.\n */\n    static char * prvWriteNameToBuffer( char * pcBuffer,\n                                        const char * pcTaskName ) PRIVILEGED_FUNCTION;\n\n#endif\n\n/*\n * Called after a Task_t structure has been allocated either statically or\n * dynamically to fill in the structure's members.\n */\nstatic void prvInitialiseNewTask( TaskFunction_t pxTaskCode,\n                                  const char * const pcName,\n                                  const configSTACK_DEPTH_TYPE uxStackDepth,\n                                  void * const pvParameters,\n                                  UBaseType_t uxPriority,\n                                  TaskHandle_t * const pxCreatedTask,\n                                  TCB_t * pxNewTCB,\n                                  const MemoryRegion_t * const xRegions ) PRIVILEGED_FUNCTION;\n\n/*\n * Called after a new task has been created and initialised to place the task\n * under the control of the scheduler.\n */\nstatic void prvAddNewTaskToReadyList( TCB_t * pxNewTCB ) PRIVILEGED_FUNCTION;\n\n/*\n * Create a task with static buffer for both TCB and stack. Returns a handle to\n * the task if it is created successfully. Otherwise, returns NULL.\n */\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n    static TCB_t * prvCreateStaticTask( TaskFunction_t pxTaskCode,\n                                        const char * const pcName,\n                                        const configSTACK_DEPTH_TYPE uxStackDepth,\n                                        void * const pvParameters,\n                                        UBaseType_t uxPriority,\n                                        StackType_t * const puxStackBuffer,\n                                        StaticTask_t * const pxTaskBuffer,\n                                        TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION;\n#endif /* #if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */\n\n/*\n * Create a restricted task with static buffer for both TCB and stack. Returns\n * a handle to the task if it is created successfully. Otherwise, returns NULL.\n */\n#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )\n    static TCB_t * prvCreateRestrictedStaticTask( const TaskParameters_t * const pxTaskDefinition,\n                                                  TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION;\n#endif /* #if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) ) */\n\n/*\n * Create a restricted task with static buffer for task stack and allocated buffer\n * for TCB. Returns a handle to the task if it is created successfully. Otherwise,\n * returns NULL.\n */\n#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )\n    static TCB_t * prvCreateRestrictedTask( const TaskParameters_t * const pxTaskDefinition,\n                                            TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION;\n#endif /* #if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) ) */\n\n/*\n * Create a task with allocated buffer for both TCB and stack. Returns a handle to\n * the task if it is created successfully. Otherwise, returns NULL.\n */\n#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n    static TCB_t * prvCreateTask( TaskFunction_t pxTaskCode,\n                                  const char * const pcName,\n                                  const configSTACK_DEPTH_TYPE uxStackDepth,\n                                  void * const pvParameters,\n                                  UBaseType_t uxPriority,\n                                  TaskHandle_t * const pxCreatedTask ) PRIVILEGED_FUNCTION;\n#endif /* #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) */\n\n/*\n * freertos_tasks_c_additions_init() should only be called if the user definable\n * macro FREERTOS_TASKS_C_ADDITIONS_INIT() is defined, as that is the only macro\n * called by the function.\n */\n#ifdef FREERTOS_TASKS_C_ADDITIONS_INIT\n\n    static void freertos_tasks_c_additions_init( void ) PRIVILEGED_FUNCTION;\n\n#endif\n\n#if ( configUSE_PASSIVE_IDLE_HOOK == 1 )\n    extern void vApplicationPassiveIdleHook( void );\n#endif /* #if ( configUSE_PASSIVE_IDLE_HOOK == 1 ) */\n\n#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) )\n\n/*\n * Convert the snprintf return value to the number of characters\n * written. The following are the possible cases:\n *\n * 1. The buffer supplied to snprintf is large enough to hold the\n *    generated string. The return value in this case is the number\n *    of characters actually written, not counting the terminating\n *    null character.\n * 2. The buffer supplied to snprintf is NOT large enough to hold\n *    the generated string. The return value in this case is the\n *    number of characters that would have been written if the\n *    buffer had been sufficiently large, not counting the\n *    terminating null character.\n * 3. Encoding error. The return value in this case is a negative\n *    number.\n *\n * From 1 and 2 above ==> Only when the return value is non-negative\n * and less than the supplied buffer length, the string has been\n * completely written.\n */\n    static size_t prvSnprintfReturnValueToCharsWritten( int iSnprintfReturnValue,\n                                                        size_t n );\n\n#endif /* #if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) ) */\n/*-----------------------------------------------------------*/\n\n#if ( configNUMBER_OF_CORES > 1 )\n    static void prvCheckForRunStateChange( void )\n    {\n        UBaseType_t uxPrevCriticalNesting;\n        const TCB_t * pxThisTCB;\n\n        /* This must only be called from within a task. */\n        portASSERT_IF_IN_ISR();\n\n        /* This function is always called with interrupts disabled\n         * so this is safe. */\n        pxThisTCB = pxCurrentTCBs[ portGET_CORE_ID() ];\n\n        while( pxThisTCB->xTaskRunState == taskTASK_SCHEDULED_TO_YIELD )\n        {\n            /* We are only here if we just entered a critical section\n            * or if we just suspended the scheduler, and another task\n            * has requested that we yield.\n            *\n            * This is slightly complicated since we need to save and restore\n            * the suspension and critical nesting counts, as well as release\n            * and reacquire the correct locks. And then, do it all over again\n            * if our state changed again during the reacquisition. */\n            uxPrevCriticalNesting = portGET_CRITICAL_NESTING_COUNT();\n\n            if( uxPrevCriticalNesting > 0U )\n            {\n                portSET_CRITICAL_NESTING_COUNT( 0U );\n                portRELEASE_ISR_LOCK();\n            }\n            else\n            {\n                /* The scheduler is suspended. uxSchedulerSuspended is updated\n                 * only when the task is not requested to yield. */\n                mtCOVERAGE_TEST_MARKER();\n            }\n\n            portRELEASE_TASK_LOCK();\n            portMEMORY_BARRIER();\n            configASSERT( pxThisTCB->xTaskRunState == taskTASK_SCHEDULED_TO_YIELD );\n\n            portENABLE_INTERRUPTS();\n\n            /* Enabling interrupts should cause this core to immediately\n             * service the pending interrupt and yield. If the run state is still\n             * yielding here then that is a problem. */\n            configASSERT( pxThisTCB->xTaskRunState != taskTASK_SCHEDULED_TO_YIELD );\n\n            portDISABLE_INTERRUPTS();\n            portGET_TASK_LOCK();\n            portGET_ISR_LOCK();\n\n            portSET_CRITICAL_NESTING_COUNT( uxPrevCriticalNesting );\n\n            if( uxPrevCriticalNesting == 0U )\n            {\n                portRELEASE_ISR_LOCK();\n            }\n        }\n    }\n#endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n\n/*-----------------------------------------------------------*/\n\n#if ( configNUMBER_OF_CORES > 1 )\n    static void prvYieldForTask( const TCB_t * pxTCB )\n    {\n        BaseType_t xLowestPriorityToPreempt;\n        BaseType_t xCurrentCoreTaskPriority;\n        BaseType_t xLowestPriorityCore = ( BaseType_t ) -1;\n        BaseType_t xCoreID;\n\n        #if ( configRUN_MULTIPLE_PRIORITIES == 0 )\n            BaseType_t xYieldCount = 0;\n        #endif /* #if ( configRUN_MULTIPLE_PRIORITIES == 0 ) */\n\n        /* This must be called from a critical section. */\n        configASSERT( portGET_CRITICAL_NESTING_COUNT() > 0U );\n\n        #if ( configRUN_MULTIPLE_PRIORITIES == 0 )\n\n            /* No task should yield for this one if it is a lower priority\n             * than priority level of currently ready tasks. */\n            if( pxTCB->uxPriority >= uxTopReadyPriority )\n        #else\n            /* Yield is not required for a task which is already running. */\n            if( taskTASK_IS_RUNNING( pxTCB ) == pdFALSE )\n        #endif\n        {\n            xLowestPriorityToPreempt = ( BaseType_t ) pxTCB->uxPriority;\n\n            /* xLowestPriorityToPreempt will be decremented to -1 if the priority of pxTCB\n             * is 0. This is ok as we will give system idle tasks a priority of -1 below. */\n            --xLowestPriorityToPreempt;\n\n            for( xCoreID = ( BaseType_t ) 0; xCoreID < ( BaseType_t ) configNUMBER_OF_CORES; xCoreID++ )\n            {\n                xCurrentCoreTaskPriority = ( BaseType_t ) pxCurrentTCBs[ xCoreID ]->uxPriority;\n\n                /* System idle tasks are being assigned a priority of tskIDLE_PRIORITY - 1 here. */\n                if( ( pxCurrentTCBs[ xCoreID ]->uxTaskAttributes & taskATTRIBUTE_IS_IDLE ) != 0U )\n                {\n                    xCurrentCoreTaskPriority = ( BaseType_t ) ( xCurrentCoreTaskPriority - 1 );\n                }\n\n                if( ( taskTASK_IS_RUNNING( pxCurrentTCBs[ xCoreID ] ) != pdFALSE ) && ( xYieldPendings[ xCoreID ] == pdFALSE ) )\n                {\n                    #if ( configRUN_MULTIPLE_PRIORITIES == 0 )\n                        if( taskTASK_IS_RUNNING( pxTCB ) == pdFALSE )\n                    #endif\n                    {\n                        if( xCurrentCoreTaskPriority <= xLowestPriorityToPreempt )\n                        {\n                            #if ( configUSE_CORE_AFFINITY == 1 )\n                                if( ( pxTCB->uxCoreAffinityMask & ( ( UBaseType_t ) 1U << ( UBaseType_t ) xCoreID ) ) != 0U )\n                            #endif\n                            {\n                                #if ( configUSE_TASK_PREEMPTION_DISABLE == 1 )\n                                    if( pxCurrentTCBs[ xCoreID ]->xPreemptionDisable == pdFALSE )\n                                #endif\n                                {\n                                    xLowestPriorityToPreempt = xCurrentCoreTaskPriority;\n                                    xLowestPriorityCore = xCoreID;\n                                }\n                            }\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n\n                    #if ( configRUN_MULTIPLE_PRIORITIES == 0 )\n                    {\n                        /* Yield all currently running non-idle tasks with a priority lower than\n                         * the task that needs to run. */\n                        if( ( xCurrentCoreTaskPriority > ( ( BaseType_t ) tskIDLE_PRIORITY - 1 ) ) &&\n                            ( xCurrentCoreTaskPriority < ( BaseType_t ) pxTCB->uxPriority ) )\n                        {\n                            prvYieldCore( xCoreID );\n                            xYieldCount++;\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n                    #endif /* #if ( configRUN_MULTIPLE_PRIORITIES == 0 ) */\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n\n            #if ( configRUN_MULTIPLE_PRIORITIES == 0 )\n                if( ( xYieldCount == 0 ) && ( xLowestPriorityCore >= 0 ) )\n            #else /* #if ( configRUN_MULTIPLE_PRIORITIES == 0 ) */\n                if( xLowestPriorityCore >= 0 )\n            #endif /* #if ( configRUN_MULTIPLE_PRIORITIES == 0 ) */\n            {\n                prvYieldCore( xLowestPriorityCore );\n            }\n\n            #if ( configRUN_MULTIPLE_PRIORITIES == 0 )\n                /* Verify that the calling core always yields to higher priority tasks. */\n                if( ( ( pxCurrentTCBs[ portGET_CORE_ID() ]->uxTaskAttributes & taskATTRIBUTE_IS_IDLE ) == 0U ) &&\n                    ( pxTCB->uxPriority > pxCurrentTCBs[ portGET_CORE_ID() ]->uxPriority ) )\n                {\n                    configASSERT( ( xYieldPendings[ portGET_CORE_ID() ] == pdTRUE ) ||\n                                  ( taskTASK_IS_RUNNING( pxCurrentTCBs[ portGET_CORE_ID() ] ) == pdFALSE ) );\n                }\n            #endif\n        }\n    }\n#endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n/*-----------------------------------------------------------*/\n\n#if ( configNUMBER_OF_CORES > 1 )\n    static void prvSelectHighestPriorityTask( BaseType_t xCoreID )\n    {\n        UBaseType_t uxCurrentPriority = uxTopReadyPriority;\n        BaseType_t xTaskScheduled = pdFALSE;\n        BaseType_t xDecrementTopPriority = pdTRUE;\n        TCB_t * pxTCB = NULL;\n\n        #if ( configUSE_CORE_AFFINITY == 1 )\n            const TCB_t * pxPreviousTCB = NULL;\n        #endif\n        #if ( configRUN_MULTIPLE_PRIORITIES == 0 )\n            BaseType_t xPriorityDropped = pdFALSE;\n        #endif\n\n        /* This function should be called when scheduler is running. */\n        configASSERT( xSchedulerRunning == pdTRUE );\n\n        /* A new task is created and a running task with the same priority yields\n         * itself to run the new task. When a running task yields itself, it is still\n         * in the ready list. This running task will be selected before the new task\n         * since the new task is always added to the end of the ready list.\n         * The other problem is that the running task still in the same position of\n         * the ready list when it yields itself. It is possible that it will be selected\n         * earlier then other tasks which waits longer than this task.\n         *\n         * To fix these problems, the running task should be put to the end of the\n         * ready list before searching for the ready task in the ready list. */\n        if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ pxCurrentTCBs[ xCoreID ]->uxPriority ] ),\n                                     &pxCurrentTCBs[ xCoreID ]->xStateListItem ) == pdTRUE )\n        {\n            ( void ) uxListRemove( &pxCurrentTCBs[ xCoreID ]->xStateListItem );\n            vListInsertEnd( &( pxReadyTasksLists[ pxCurrentTCBs[ xCoreID ]->uxPriority ] ),\n                            &pxCurrentTCBs[ xCoreID ]->xStateListItem );\n        }\n\n        while( xTaskScheduled == pdFALSE )\n        {\n            #if ( configRUN_MULTIPLE_PRIORITIES == 0 )\n            {\n                if( uxCurrentPriority < uxTopReadyPriority )\n                {\n                    /* We can't schedule any tasks, other than idle, that have a\n                     * priority lower than the priority of a task currently running\n                     * on another core. */\n                    uxCurrentPriority = tskIDLE_PRIORITY;\n                }\n            }\n            #endif\n\n            if( listLIST_IS_EMPTY( &( pxReadyTasksLists[ uxCurrentPriority ] ) ) == pdFALSE )\n            {\n                const List_t * const pxReadyList = &( pxReadyTasksLists[ uxCurrentPriority ] );\n                const ListItem_t * pxEndMarker = listGET_END_MARKER( pxReadyList );\n                ListItem_t * pxIterator;\n\n                /* The ready task list for uxCurrentPriority is not empty, so uxTopReadyPriority\n                 * must not be decremented any further. */\n                xDecrementTopPriority = pdFALSE;\n\n                for( pxIterator = listGET_HEAD_ENTRY( pxReadyList ); pxIterator != pxEndMarker; pxIterator = listGET_NEXT( pxIterator ) )\n                {\n                    /* MISRA Ref 11.5.3 [Void pointer assignment] */\n                    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n                    /* coverity[misra_c_2012_rule_11_5_violation] */\n                    pxTCB = ( TCB_t * ) listGET_LIST_ITEM_OWNER( pxIterator );\n\n                    #if ( configRUN_MULTIPLE_PRIORITIES == 0 )\n                    {\n                        /* When falling back to the idle priority because only one priority\n                         * level is allowed to run at a time, we should ONLY schedule the true\n                         * idle tasks, not user tasks at the idle priority. */\n                        if( uxCurrentPriority < uxTopReadyPriority )\n                        {\n                            if( ( pxTCB->uxTaskAttributes & taskATTRIBUTE_IS_IDLE ) == 0U )\n                            {\n                                continue;\n                            }\n                        }\n                    }\n                    #endif /* #if ( configRUN_MULTIPLE_PRIORITIES == 0 ) */\n\n                    if( pxTCB->xTaskRunState == taskTASK_NOT_RUNNING )\n                    {\n                        #if ( configUSE_CORE_AFFINITY == 1 )\n                            if( ( pxTCB->uxCoreAffinityMask & ( ( UBaseType_t ) 1U << ( UBaseType_t ) xCoreID ) ) != 0U )\n                        #endif\n                        {\n                            /* If the task is not being executed by any core swap it in. */\n                            pxCurrentTCBs[ xCoreID ]->xTaskRunState = taskTASK_NOT_RUNNING;\n                            #if ( configUSE_CORE_AFFINITY == 1 )\n                                pxPreviousTCB = pxCurrentTCBs[ xCoreID ];\n                            #endif\n                            pxTCB->xTaskRunState = xCoreID;\n                            pxCurrentTCBs[ xCoreID ] = pxTCB;\n                            xTaskScheduled = pdTRUE;\n                        }\n                    }\n                    else if( pxTCB == pxCurrentTCBs[ xCoreID ] )\n                    {\n                        configASSERT( ( pxTCB->xTaskRunState == xCoreID ) || ( pxTCB->xTaskRunState == taskTASK_SCHEDULED_TO_YIELD ) );\n\n                        #if ( configUSE_CORE_AFFINITY == 1 )\n                            if( ( pxTCB->uxCoreAffinityMask & ( ( UBaseType_t ) 1U << ( UBaseType_t ) xCoreID ) ) != 0U )\n                        #endif\n                        {\n                            /* The task is already running on this core, mark it as scheduled. */\n                            pxTCB->xTaskRunState = xCoreID;\n                            xTaskScheduled = pdTRUE;\n                        }\n                    }\n                    else\n                    {\n                        /* This task is running on the core other than xCoreID. */\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n\n                    if( xTaskScheduled != pdFALSE )\n                    {\n                        /* A task has been selected to run on this core. */\n                        break;\n                    }\n                }\n            }\n            else\n            {\n                if( xDecrementTopPriority != pdFALSE )\n                {\n                    uxTopReadyPriority--;\n                    #if ( configRUN_MULTIPLE_PRIORITIES == 0 )\n                    {\n                        xPriorityDropped = pdTRUE;\n                    }\n                    #endif\n                }\n            }\n\n            /* There are configNUMBER_OF_CORES Idle tasks created when scheduler started.\n             * The scheduler should be able to select a task to run when uxCurrentPriority\n             * is tskIDLE_PRIORITY. uxCurrentPriority is never decreased to value blow\n             * tskIDLE_PRIORITY. */\n            if( uxCurrentPriority > tskIDLE_PRIORITY )\n            {\n                uxCurrentPriority--;\n            }\n            else\n            {\n                /* This function is called when idle task is not created. Break the\n                 * loop to prevent uxCurrentPriority overrun. */\n                break;\n            }\n        }\n\n        #if ( configRUN_MULTIPLE_PRIORITIES == 0 )\n        {\n            if( xTaskScheduled == pdTRUE )\n            {\n                if( xPriorityDropped != pdFALSE )\n                {\n                    /* There may be several ready tasks that were being prevented from running because there was\n                     * a higher priority task running. Now that the last of the higher priority tasks is no longer\n                     * running, make sure all the other idle tasks yield. */\n                    BaseType_t x;\n\n                    for( x = ( BaseType_t ) 0; x < ( BaseType_t ) configNUMBER_OF_CORES; x++ )\n                    {\n                        if( ( pxCurrentTCBs[ x ]->uxTaskAttributes & taskATTRIBUTE_IS_IDLE ) != 0U )\n                        {\n                            prvYieldCore( x );\n                        }\n                    }\n                }\n            }\n        }\n        #endif /* #if ( configRUN_MULTIPLE_PRIORITIES == 0 ) */\n\n        #if ( configUSE_CORE_AFFINITY == 1 )\n        {\n            if( xTaskScheduled == pdTRUE )\n            {\n                if( ( pxPreviousTCB != NULL ) && ( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ pxPreviousTCB->uxPriority ] ), &( pxPreviousTCB->xStateListItem ) ) != pdFALSE ) )\n                {\n                    /* A ready task was just evicted from this core. See if it can be\n                     * scheduled on any other core. */\n                    UBaseType_t uxCoreMap = pxPreviousTCB->uxCoreAffinityMask;\n                    BaseType_t xLowestPriority = ( BaseType_t ) pxPreviousTCB->uxPriority;\n                    BaseType_t xLowestPriorityCore = -1;\n                    BaseType_t x;\n\n                    if( ( pxPreviousTCB->uxTaskAttributes & taskATTRIBUTE_IS_IDLE ) != 0U )\n                    {\n                        xLowestPriority = xLowestPriority - 1;\n                    }\n\n                    if( ( uxCoreMap & ( ( UBaseType_t ) 1U << ( UBaseType_t ) xCoreID ) ) != 0U )\n                    {\n                        /* pxPreviousTCB was removed from this core and this core is not excluded\n                         * from it's core affinity mask.\n                         *\n                         * pxPreviousTCB is preempted by the new higher priority task\n                         * pxCurrentTCBs[ xCoreID ]. When searching a new core for pxPreviousTCB,\n                         * we do not need to look at the cores on which pxCurrentTCBs[ xCoreID ]\n                         * is allowed to run. The reason is - when more than one cores are\n                         * eligible for an incoming task, we preempt the core with the minimum\n                         * priority task. Because this core (i.e. xCoreID) was preempted for\n                         * pxCurrentTCBs[ xCoreID ], this means that all the others cores\n                         * where pxCurrentTCBs[ xCoreID ] can run, are running tasks with priority\n                         * no lower than pxPreviousTCB's priority. Therefore, the only cores where\n                         * which can be preempted for pxPreviousTCB are the ones where\n                         * pxCurrentTCBs[ xCoreID ] is not allowed to run (and obviously,\n                         * pxPreviousTCB is allowed to run).\n                         *\n                         * This is an optimization which reduces the number of cores needed to be\n                         * searched for pxPreviousTCB to run. */\n                        uxCoreMap &= ~( pxCurrentTCBs[ xCoreID ]->uxCoreAffinityMask );\n                    }\n                    else\n                    {\n                        /* pxPreviousTCB's core affinity mask is changed and it is no longer\n                         * allowed to run on this core. Searching all the cores in pxPreviousTCB's\n                         * new core affinity mask to find a core on which it can run. */\n                    }\n\n                    uxCoreMap &= ( ( 1U << configNUMBER_OF_CORES ) - 1U );\n\n                    for( x = ( ( BaseType_t ) configNUMBER_OF_CORES - 1 ); x >= ( BaseType_t ) 0; x-- )\n                    {\n                        UBaseType_t uxCore = ( UBaseType_t ) x;\n                        BaseType_t xTaskPriority;\n\n                        if( ( uxCoreMap & ( ( UBaseType_t ) 1U << uxCore ) ) != 0U )\n                        {\n                            xTaskPriority = ( BaseType_t ) pxCurrentTCBs[ uxCore ]->uxPriority;\n\n                            if( ( pxCurrentTCBs[ uxCore ]->uxTaskAttributes & taskATTRIBUTE_IS_IDLE ) != 0U )\n                            {\n                                xTaskPriority = xTaskPriority - ( BaseType_t ) 1;\n                            }\n\n                            uxCoreMap &= ~( ( UBaseType_t ) 1U << uxCore );\n\n                            if( ( xTaskPriority < xLowestPriority ) &&\n                                ( taskTASK_IS_RUNNING( pxCurrentTCBs[ uxCore ] ) != pdFALSE ) &&\n                                ( xYieldPendings[ uxCore ] == pdFALSE ) )\n                            {\n                                #if ( configUSE_TASK_PREEMPTION_DISABLE == 1 )\n                                    if( pxCurrentTCBs[ uxCore ]->xPreemptionDisable == pdFALSE )\n                                #endif\n                                {\n                                    xLowestPriority = xTaskPriority;\n                                    xLowestPriorityCore = ( BaseType_t ) uxCore;\n                                }\n                            }\n                        }\n                    }\n\n                    if( xLowestPriorityCore >= 0 )\n                    {\n                        prvYieldCore( xLowestPriorityCore );\n                    }\n                }\n            }\n        }\n        #endif /* #if ( configUSE_CORE_AFFINITY == 1 ) */\n    }\n\n#endif /* ( configNUMBER_OF_CORES > 1 ) */\n\n/*-----------------------------------------------------------*/\n\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n\n    static TCB_t * prvCreateStaticTask( TaskFunction_t pxTaskCode,\n                                        const char * const pcName,\n                                        const configSTACK_DEPTH_TYPE uxStackDepth,\n                                        void * const pvParameters,\n                                        UBaseType_t uxPriority,\n                                        StackType_t * const puxStackBuffer,\n                                        StaticTask_t * const pxTaskBuffer,\n                                        TaskHandle_t * const pxCreatedTask )\n    {\n        TCB_t * pxNewTCB;\n\n        configASSERT( puxStackBuffer != NULL );\n        configASSERT( pxTaskBuffer != NULL );\n\n        #if ( configASSERT_DEFINED == 1 )\n        {\n            /* Sanity check that the size of the structure used to declare a\n             * variable of type StaticTask_t equals the size of the real task\n             * structure. */\n            volatile size_t xSize = sizeof( StaticTask_t );\n            configASSERT( xSize == sizeof( TCB_t ) );\n            ( void ) xSize; /* Prevent unused variable warning when configASSERT() is not used. */\n        }\n        #endif /* configASSERT_DEFINED */\n\n        if( ( pxTaskBuffer != NULL ) && ( puxStackBuffer != NULL ) )\n        {\n            /* The memory used for the task's TCB and stack are passed into this\n             * function - use them. */\n            /* MISRA Ref 11.3.1 [Misaligned access] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-113 */\n            /* coverity[misra_c_2012_rule_11_3_violation] */\n            pxNewTCB = ( TCB_t * ) pxTaskBuffer;\n            ( void ) memset( ( void * ) pxNewTCB, 0x00, sizeof( TCB_t ) );\n            pxNewTCB->pxStack = ( StackType_t * ) puxStackBuffer;\n\n            #if ( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 )\n            {\n                /* Tasks can be created statically or dynamically, so note this\n                 * task was created statically in case the task is later deleted. */\n                pxNewTCB->ucStaticallyAllocated = tskSTATICALLY_ALLOCATED_STACK_AND_TCB;\n            }\n            #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */\n\n            prvInitialiseNewTask( pxTaskCode, pcName, uxStackDepth, pvParameters, uxPriority, pxCreatedTask, pxNewTCB, NULL );\n        }\n        else\n        {\n            pxNewTCB = NULL;\n        }\n\n        return pxNewTCB;\n    }\n/*-----------------------------------------------------------*/\n\n    TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,\n                                    const char * const pcName,\n                                    const configSTACK_DEPTH_TYPE uxStackDepth,\n                                    void * const pvParameters,\n                                    UBaseType_t uxPriority,\n                                    StackType_t * const puxStackBuffer,\n                                    StaticTask_t * const pxTaskBuffer )\n    {\n        TaskHandle_t xReturn = NULL;\n        TCB_t * pxNewTCB;\n\n        traceENTER_xTaskCreateStatic( pxTaskCode, pcName, uxStackDepth, pvParameters, uxPriority, puxStackBuffer, pxTaskBuffer );\n\n        pxNewTCB = prvCreateStaticTask( pxTaskCode, pcName, uxStackDepth, pvParameters, uxPriority, puxStackBuffer, pxTaskBuffer, &xReturn );\n\n        if( pxNewTCB != NULL )\n        {\n            #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n            {\n                /* Set the task's affinity before scheduling it. */\n                pxNewTCB->uxCoreAffinityMask = configTASK_DEFAULT_CORE_AFFINITY;\n            }\n            #endif\n\n            prvAddNewTaskToReadyList( pxNewTCB );\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_xTaskCreateStatic( xReturn );\n\n        return xReturn;\n    }\n/*-----------------------------------------------------------*/\n\n    #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n        TaskHandle_t xTaskCreateStaticAffinitySet( TaskFunction_t pxTaskCode,\n                                                   const char * const pcName,\n                                                   const configSTACK_DEPTH_TYPE uxStackDepth,\n                                                   void * const pvParameters,\n                                                   UBaseType_t uxPriority,\n                                                   StackType_t * const puxStackBuffer,\n                                                   StaticTask_t * const pxTaskBuffer,\n                                                   UBaseType_t uxCoreAffinityMask )\n        {\n            TaskHandle_t xReturn = NULL;\n            TCB_t * pxNewTCB;\n\n            traceENTER_xTaskCreateStaticAffinitySet( pxTaskCode, pcName, uxStackDepth, pvParameters, uxPriority, puxStackBuffer, pxTaskBuffer, uxCoreAffinityMask );\n\n            pxNewTCB = prvCreateStaticTask( pxTaskCode, pcName, uxStackDepth, pvParameters, uxPriority, puxStackBuffer, pxTaskBuffer, &xReturn );\n\n            if( pxNewTCB != NULL )\n            {\n                /* Set the task's affinity before scheduling it. */\n                pxNewTCB->uxCoreAffinityMask = uxCoreAffinityMask;\n\n                prvAddNewTaskToReadyList( pxNewTCB );\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n\n            traceRETURN_xTaskCreateStaticAffinitySet( xReturn );\n\n            return xReturn;\n        }\n    #endif /* #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) ) */\n\n#endif /* SUPPORT_STATIC_ALLOCATION */\n/*-----------------------------------------------------------*/\n\n#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )\n    static TCB_t * prvCreateRestrictedStaticTask( const TaskParameters_t * const pxTaskDefinition,\n                                                  TaskHandle_t * const pxCreatedTask )\n    {\n        TCB_t * pxNewTCB;\n\n        configASSERT( pxTaskDefinition->puxStackBuffer != NULL );\n        configASSERT( pxTaskDefinition->pxTaskBuffer != NULL );\n\n        if( ( pxTaskDefinition->puxStackBuffer != NULL ) && ( pxTaskDefinition->pxTaskBuffer != NULL ) )\n        {\n            /* Allocate space for the TCB.  Where the memory comes from depends\n             * on the implementation of the port malloc function and whether or\n             * not static allocation is being used. */\n            pxNewTCB = ( TCB_t * ) pxTaskDefinition->pxTaskBuffer;\n            ( void ) memset( ( void * ) pxNewTCB, 0x00, sizeof( TCB_t ) );\n\n            /* Store the stack location in the TCB. */\n            pxNewTCB->pxStack = pxTaskDefinition->puxStackBuffer;\n\n            #if ( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 )\n            {\n                /* Tasks can be created statically or dynamically, so note this\n                 * task was created statically in case the task is later deleted. */\n                pxNewTCB->ucStaticallyAllocated = tskSTATICALLY_ALLOCATED_STACK_AND_TCB;\n            }\n            #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */\n\n            prvInitialiseNewTask( pxTaskDefinition->pvTaskCode,\n                                  pxTaskDefinition->pcName,\n                                  pxTaskDefinition->usStackDepth,\n                                  pxTaskDefinition->pvParameters,\n                                  pxTaskDefinition->uxPriority,\n                                  pxCreatedTask, pxNewTCB,\n                                  pxTaskDefinition->xRegions );\n        }\n        else\n        {\n            pxNewTCB = NULL;\n        }\n\n        return pxNewTCB;\n    }\n/*-----------------------------------------------------------*/\n\n    BaseType_t xTaskCreateRestrictedStatic( const TaskParameters_t * const pxTaskDefinition,\n                                            TaskHandle_t * pxCreatedTask )\n    {\n        TCB_t * pxNewTCB;\n        BaseType_t xReturn;\n\n        traceENTER_xTaskCreateRestrictedStatic( pxTaskDefinition, pxCreatedTask );\n\n        configASSERT( pxTaskDefinition != NULL );\n\n        pxNewTCB = prvCreateRestrictedStaticTask( pxTaskDefinition, pxCreatedTask );\n\n        if( pxNewTCB != NULL )\n        {\n            #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n            {\n                /* Set the task's affinity before scheduling it. */\n                pxNewTCB->uxCoreAffinityMask = configTASK_DEFAULT_CORE_AFFINITY;\n            }\n            #endif\n\n            prvAddNewTaskToReadyList( pxNewTCB );\n            xReturn = pdPASS;\n        }\n        else\n        {\n            xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;\n        }\n\n        traceRETURN_xTaskCreateRestrictedStatic( xReturn );\n\n        return xReturn;\n    }\n/*-----------------------------------------------------------*/\n\n    #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n        BaseType_t xTaskCreateRestrictedStaticAffinitySet( const TaskParameters_t * const pxTaskDefinition,\n                                                           UBaseType_t uxCoreAffinityMask,\n                                                           TaskHandle_t * pxCreatedTask )\n        {\n            TCB_t * pxNewTCB;\n            BaseType_t xReturn;\n\n            traceENTER_xTaskCreateRestrictedStaticAffinitySet( pxTaskDefinition, uxCoreAffinityMask, pxCreatedTask );\n\n            configASSERT( pxTaskDefinition != NULL );\n\n            pxNewTCB = prvCreateRestrictedStaticTask( pxTaskDefinition, pxCreatedTask );\n\n            if( pxNewTCB != NULL )\n            {\n                /* Set the task's affinity before scheduling it. */\n                pxNewTCB->uxCoreAffinityMask = uxCoreAffinityMask;\n\n                prvAddNewTaskToReadyList( pxNewTCB );\n                xReturn = pdPASS;\n            }\n            else\n            {\n                xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;\n            }\n\n            traceRETURN_xTaskCreateRestrictedStaticAffinitySet( xReturn );\n\n            return xReturn;\n        }\n    #endif /* #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) ) */\n\n#endif /* ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) */\n/*-----------------------------------------------------------*/\n\n#if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )\n    static TCB_t * prvCreateRestrictedTask( const TaskParameters_t * const pxTaskDefinition,\n                                            TaskHandle_t * const pxCreatedTask )\n    {\n        TCB_t * pxNewTCB;\n\n        configASSERT( pxTaskDefinition->puxStackBuffer );\n\n        if( pxTaskDefinition->puxStackBuffer != NULL )\n        {\n            /* MISRA Ref 11.5.1 [Malloc memory assignment] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n            /* coverity[misra_c_2012_rule_11_5_violation] */\n            pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) );\n\n            if( pxNewTCB != NULL )\n            {\n                ( void ) memset( ( void * ) pxNewTCB, 0x00, sizeof( TCB_t ) );\n\n                /* Store the stack location in the TCB. */\n                pxNewTCB->pxStack = pxTaskDefinition->puxStackBuffer;\n\n                #if ( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 )\n                {\n                    /* Tasks can be created statically or dynamically, so note\n                     * this task had a statically allocated stack in case it is\n                     * later deleted.  The TCB was allocated dynamically. */\n                    pxNewTCB->ucStaticallyAllocated = tskSTATICALLY_ALLOCATED_STACK_ONLY;\n                }\n                #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */\n\n                prvInitialiseNewTask( pxTaskDefinition->pvTaskCode,\n                                      pxTaskDefinition->pcName,\n                                      pxTaskDefinition->usStackDepth,\n                                      pxTaskDefinition->pvParameters,\n                                      pxTaskDefinition->uxPriority,\n                                      pxCreatedTask, pxNewTCB,\n                                      pxTaskDefinition->xRegions );\n            }\n        }\n        else\n        {\n            pxNewTCB = NULL;\n        }\n\n        return pxNewTCB;\n    }\n/*-----------------------------------------------------------*/\n\n    BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition,\n                                      TaskHandle_t * pxCreatedTask )\n    {\n        TCB_t * pxNewTCB;\n        BaseType_t xReturn;\n\n        traceENTER_xTaskCreateRestricted( pxTaskDefinition, pxCreatedTask );\n\n        pxNewTCB = prvCreateRestrictedTask( pxTaskDefinition, pxCreatedTask );\n\n        if( pxNewTCB != NULL )\n        {\n            #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n            {\n                /* Set the task's affinity before scheduling it. */\n                pxNewTCB->uxCoreAffinityMask = configTASK_DEFAULT_CORE_AFFINITY;\n            }\n            #endif /* #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) ) */\n\n            prvAddNewTaskToReadyList( pxNewTCB );\n\n            xReturn = pdPASS;\n        }\n        else\n        {\n            xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;\n        }\n\n        traceRETURN_xTaskCreateRestricted( xReturn );\n\n        return xReturn;\n    }\n/*-----------------------------------------------------------*/\n\n    #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n        BaseType_t xTaskCreateRestrictedAffinitySet( const TaskParameters_t * const pxTaskDefinition,\n                                                     UBaseType_t uxCoreAffinityMask,\n                                                     TaskHandle_t * pxCreatedTask )\n        {\n            TCB_t * pxNewTCB;\n            BaseType_t xReturn;\n\n            traceENTER_xTaskCreateRestrictedAffinitySet( pxTaskDefinition, uxCoreAffinityMask, pxCreatedTask );\n\n            pxNewTCB = prvCreateRestrictedTask( pxTaskDefinition, pxCreatedTask );\n\n            if( pxNewTCB != NULL )\n            {\n                /* Set the task's affinity before scheduling it. */\n                pxNewTCB->uxCoreAffinityMask = uxCoreAffinityMask;\n\n                prvAddNewTaskToReadyList( pxNewTCB );\n\n                xReturn = pdPASS;\n            }\n            else\n            {\n                xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;\n            }\n\n            traceRETURN_xTaskCreateRestrictedAffinitySet( xReturn );\n\n            return xReturn;\n        }\n    #endif /* #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) ) */\n\n\n#endif /* portUSING_MPU_WRAPPERS */\n/*-----------------------------------------------------------*/\n\n#if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n    static TCB_t * prvCreateTask( TaskFunction_t pxTaskCode,\n                                  const char * const pcName,\n                                  const configSTACK_DEPTH_TYPE uxStackDepth,\n                                  void * const pvParameters,\n                                  UBaseType_t uxPriority,\n                                  TaskHandle_t * const pxCreatedTask )\n    {\n        TCB_t * pxNewTCB;\n\n        /* If the stack grows down then allocate the stack then the TCB so the stack\n         * does not grow into the TCB.  Likewise if the stack grows up then allocate\n         * the TCB then the stack. */\n        #if ( portSTACK_GROWTH > 0 )\n        {\n            /* Allocate space for the TCB.  Where the memory comes from depends on\n             * the implementation of the port malloc function and whether or not static\n             * allocation is being used. */\n            /* MISRA Ref 11.5.1 [Malloc memory assignment] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n            /* coverity[misra_c_2012_rule_11_5_violation] */\n            pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) );\n\n            if( pxNewTCB != NULL )\n            {\n                ( void ) memset( ( void * ) pxNewTCB, 0x00, sizeof( TCB_t ) );\n\n                /* Allocate space for the stack used by the task being created.\n                 * The base of the stack memory stored in the TCB so the task can\n                 * be deleted later if required. */\n                /* MISRA Ref 11.5.1 [Malloc memory assignment] */\n                /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n                /* coverity[misra_c_2012_rule_11_5_violation] */\n                pxNewTCB->pxStack = ( StackType_t * ) pvPortMallocStack( ( ( ( size_t ) uxStackDepth ) * sizeof( StackType_t ) ) );\n\n                if( pxNewTCB->pxStack == NULL )\n                {\n                    /* Could not allocate the stack.  Delete the allocated TCB. */\n                    vPortFree( pxNewTCB );\n                    pxNewTCB = NULL;\n                }\n            }\n        }\n        #else /* portSTACK_GROWTH */\n        {\n            StackType_t * pxStack;\n\n            /* Allocate space for the stack used by the task being created. */\n            /* MISRA Ref 11.5.1 [Malloc memory assignment] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n            /* coverity[misra_c_2012_rule_11_5_violation] */\n            pxStack = pvPortMallocStack( ( ( ( size_t ) uxStackDepth ) * sizeof( StackType_t ) ) );\n\n            if( pxStack != NULL )\n            {\n                /* Allocate space for the TCB. */\n                /* MISRA Ref 11.5.1 [Malloc memory assignment] */\n                /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n                /* coverity[misra_c_2012_rule_11_5_violation] */\n                pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t ) );\n\n                if( pxNewTCB != NULL )\n                {\n                    ( void ) memset( ( void * ) pxNewTCB, 0x00, sizeof( TCB_t ) );\n\n                    /* Store the stack location in the TCB. */\n                    pxNewTCB->pxStack = pxStack;\n                }\n                else\n                {\n                    /* The stack cannot be used as the TCB was not created.  Free\n                     * it again. */\n                    vPortFreeStack( pxStack );\n                }\n            }\n            else\n            {\n                pxNewTCB = NULL;\n            }\n        }\n        #endif /* portSTACK_GROWTH */\n\n        if( pxNewTCB != NULL )\n        {\n            #if ( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 )\n            {\n                /* Tasks can be created statically or dynamically, so note this\n                 * task was created dynamically in case it is later deleted. */\n                pxNewTCB->ucStaticallyAllocated = tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB;\n            }\n            #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE */\n\n            prvInitialiseNewTask( pxTaskCode, pcName, uxStackDepth, pvParameters, uxPriority, pxCreatedTask, pxNewTCB, NULL );\n        }\n\n        return pxNewTCB;\n    }\n/*-----------------------------------------------------------*/\n\n    BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,\n                            const char * const pcName,\n                            const configSTACK_DEPTH_TYPE uxStackDepth,\n                            void * const pvParameters,\n                            UBaseType_t uxPriority,\n                            TaskHandle_t * const pxCreatedTask )\n    {\n        TCB_t * pxNewTCB;\n        BaseType_t xReturn;\n\n        traceENTER_xTaskCreate( pxTaskCode, pcName, uxStackDepth, pvParameters, uxPriority, pxCreatedTask );\n\n        pxNewTCB = prvCreateTask( pxTaskCode, pcName, uxStackDepth, pvParameters, uxPriority, pxCreatedTask );\n\n        if( pxNewTCB != NULL )\n        {\n            #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n            {\n                /* Set the task's affinity before scheduling it. */\n                pxNewTCB->uxCoreAffinityMask = configTASK_DEFAULT_CORE_AFFINITY;\n            }\n            #endif\n\n            prvAddNewTaskToReadyList( pxNewTCB );\n            xReturn = pdPASS;\n        }\n        else\n        {\n            xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;\n        }\n\n        traceRETURN_xTaskCreate( xReturn );\n\n        return xReturn;\n    }\n/*-----------------------------------------------------------*/\n\n    #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n        BaseType_t xTaskCreateAffinitySet( TaskFunction_t pxTaskCode,\n                                           const char * const pcName,\n                                           const configSTACK_DEPTH_TYPE uxStackDepth,\n                                           void * const pvParameters,\n                                           UBaseType_t uxPriority,\n                                           UBaseType_t uxCoreAffinityMask,\n                                           TaskHandle_t * const pxCreatedTask )\n        {\n            TCB_t * pxNewTCB;\n            BaseType_t xReturn;\n\n            traceENTER_xTaskCreateAffinitySet( pxTaskCode, pcName, uxStackDepth, pvParameters, uxPriority, uxCoreAffinityMask, pxCreatedTask );\n\n            pxNewTCB = prvCreateTask( pxTaskCode, pcName, uxStackDepth, pvParameters, uxPriority, pxCreatedTask );\n\n            if( pxNewTCB != NULL )\n            {\n                /* Set the task's affinity before scheduling it. */\n                pxNewTCB->uxCoreAffinityMask = uxCoreAffinityMask;\n\n                prvAddNewTaskToReadyList( pxNewTCB );\n                xReturn = pdPASS;\n            }\n            else\n            {\n                xReturn = errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY;\n            }\n\n            traceRETURN_xTaskCreateAffinitySet( xReturn );\n\n            return xReturn;\n        }\n    #endif /* #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) ) */\n\n#endif /* configSUPPORT_DYNAMIC_ALLOCATION */\n/*-----------------------------------------------------------*/\n\nstatic void prvInitialiseNewTask( TaskFunction_t pxTaskCode,\n                                  const char * const pcName,\n                                  const configSTACK_DEPTH_TYPE uxStackDepth,\n                                  void * const pvParameters,\n                                  UBaseType_t uxPriority,\n                                  TaskHandle_t * const pxCreatedTask,\n                                  TCB_t * pxNewTCB,\n                                  const MemoryRegion_t * const xRegions )\n{\n    StackType_t * pxTopOfStack;\n    UBaseType_t x;\n\n    #if ( portUSING_MPU_WRAPPERS == 1 )\n        /* Should the task be created in privileged mode? */\n        BaseType_t xRunPrivileged;\n\n        if( ( uxPriority & portPRIVILEGE_BIT ) != 0U )\n        {\n            xRunPrivileged = pdTRUE;\n        }\n        else\n        {\n            xRunPrivileged = pdFALSE;\n        }\n        uxPriority &= ~portPRIVILEGE_BIT;\n    #endif /* portUSING_MPU_WRAPPERS == 1 */\n\n    /* Avoid dependency on memset() if it is not required. */\n    #if ( tskSET_NEW_STACKS_TO_KNOWN_VALUE == 1 )\n    {\n        /* Fill the stack with a known value to assist debugging. */\n        ( void ) memset( pxNewTCB->pxStack, ( int ) tskSTACK_FILL_BYTE, ( size_t ) uxStackDepth * sizeof( StackType_t ) );\n    }\n    #endif /* tskSET_NEW_STACKS_TO_KNOWN_VALUE */\n\n    /* Calculate the top of stack address.  This depends on whether the stack\n     * grows from high memory to low (as per the 80x86) or vice versa.\n     * portSTACK_GROWTH is used to make the result positive or negative as required\n     * by the port. */\n    #if ( portSTACK_GROWTH < 0 )\n    {\n        pxTopOfStack = &( pxNewTCB->pxStack[ uxStackDepth - ( configSTACK_DEPTH_TYPE ) 1 ] );\n        pxTopOfStack = ( StackType_t * ) ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack ) & ( ~( ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) ) );\n\n        /* Check the alignment of the calculated top of stack is correct. */\n        configASSERT( ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack & ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) == 0U ) );\n\n        #if ( configRECORD_STACK_HIGH_ADDRESS == 1 )\n        {\n            /* Also record the stack's high address, which may assist\n             * debugging. */\n            pxNewTCB->pxEndOfStack = pxTopOfStack;\n        }\n        #endif /* configRECORD_STACK_HIGH_ADDRESS */\n    }\n    #else /* portSTACK_GROWTH */\n    {\n        pxTopOfStack = pxNewTCB->pxStack;\n        pxTopOfStack = ( StackType_t * ) ( ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack ) + portBYTE_ALIGNMENT_MASK ) & ( ~( ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) ) );\n\n        /* Check the alignment of the calculated top of stack is correct. */\n        configASSERT( ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack & ( portPOINTER_SIZE_TYPE ) portBYTE_ALIGNMENT_MASK ) == 0U ) );\n\n        /* The other extreme of the stack space is required if stack checking is\n         * performed. */\n        pxNewTCB->pxEndOfStack = pxNewTCB->pxStack + ( uxStackDepth - ( configSTACK_DEPTH_TYPE ) 1 );\n    }\n    #endif /* portSTACK_GROWTH */\n\n    /* Store the task name in the TCB. */\n    if( pcName != NULL )\n    {\n        for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ )\n        {\n            pxNewTCB->pcTaskName[ x ] = pcName[ x ];\n\n            /* Don't copy all configMAX_TASK_NAME_LEN if the string is shorter than\n             * configMAX_TASK_NAME_LEN characters just in case the memory after the\n             * string is not accessible (extremely unlikely). */\n            if( pcName[ x ] == ( char ) 0x00 )\n            {\n                break;\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n\n        /* Ensure the name string is terminated in the case that the string length\n         * was greater or equal to configMAX_TASK_NAME_LEN. */\n        pxNewTCB->pcTaskName[ configMAX_TASK_NAME_LEN - 1U ] = '\\0';\n    }\n    else\n    {\n        mtCOVERAGE_TEST_MARKER();\n    }\n\n    /* This is used as an array index so must ensure it's not too large. */\n    configASSERT( uxPriority < configMAX_PRIORITIES );\n\n    if( uxPriority >= ( UBaseType_t ) configMAX_PRIORITIES )\n    {\n        uxPriority = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) 1U;\n    }\n    else\n    {\n        mtCOVERAGE_TEST_MARKER();\n    }\n\n    pxNewTCB->uxPriority = uxPriority;\n    #if ( configUSE_MUTEXES == 1 )\n    {\n        pxNewTCB->uxBasePriority = uxPriority;\n    }\n    #endif /* configUSE_MUTEXES */\n\n    vListInitialiseItem( &( pxNewTCB->xStateListItem ) );\n    vListInitialiseItem( &( pxNewTCB->xEventListItem ) );\n\n    /* Set the pxNewTCB as a link back from the ListItem_t.  This is so we can get\n     * back to  the containing TCB from a generic item in a list. */\n    listSET_LIST_ITEM_OWNER( &( pxNewTCB->xStateListItem ), pxNewTCB );\n\n    /* Event lists are always in priority order. */\n    listSET_LIST_ITEM_VALUE( &( pxNewTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) uxPriority );\n    listSET_LIST_ITEM_OWNER( &( pxNewTCB->xEventListItem ), pxNewTCB );\n\n    #if ( portUSING_MPU_WRAPPERS == 1 )\n    {\n        vPortStoreTaskMPUSettings( &( pxNewTCB->xMPUSettings ), xRegions, pxNewTCB->pxStack, uxStackDepth );\n    }\n    #else\n    {\n        /* Avoid compiler warning about unreferenced parameter. */\n        ( void ) xRegions;\n    }\n    #endif\n\n    #if ( configUSE_C_RUNTIME_TLS_SUPPORT == 1 )\n    {\n        /* Allocate and initialize memory for the task's TLS Block. */\n        configINIT_TLS_BLOCK( pxNewTCB->xTLSBlock, pxTopOfStack );\n    }\n    #endif\n\n    /* Initialize the TCB stack to look as if the task was already running,\n     * but had been interrupted by the scheduler.  The return address is set\n     * to the start of the task function. Once the stack has been initialised\n     * the top of stack variable is updated. */\n    #if ( portUSING_MPU_WRAPPERS == 1 )\n    {\n        /* If the port has capability to detect stack overflow,\n         * pass the stack end address to the stack initialization\n         * function as well. */\n        #if ( portHAS_STACK_OVERFLOW_CHECKING == 1 )\n        {\n            #if ( portSTACK_GROWTH < 0 )\n            {\n                pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxNewTCB->pxStack, pxTaskCode, pvParameters, xRunPrivileged, &( pxNewTCB->xMPUSettings ) );\n            }\n            #else /* portSTACK_GROWTH */\n            {\n                pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxNewTCB->pxEndOfStack, pxTaskCode, pvParameters, xRunPrivileged, &( pxNewTCB->xMPUSettings ) );\n            }\n            #endif /* portSTACK_GROWTH */\n        }\n        #else /* portHAS_STACK_OVERFLOW_CHECKING */\n        {\n            pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters, xRunPrivileged, &( pxNewTCB->xMPUSettings ) );\n        }\n        #endif /* portHAS_STACK_OVERFLOW_CHECKING */\n    }\n    #else /* portUSING_MPU_WRAPPERS */\n    {\n        /* If the port has capability to detect stack overflow,\n         * pass the stack end address to the stack initialization\n         * function as well. */\n        #if ( portHAS_STACK_OVERFLOW_CHECKING == 1 )\n        {\n            #if ( portSTACK_GROWTH < 0 )\n            {\n                pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxNewTCB->pxStack, pxTaskCode, pvParameters );\n            }\n            #else /* portSTACK_GROWTH */\n            {\n                pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxNewTCB->pxEndOfStack, pxTaskCode, pvParameters );\n            }\n            #endif /* portSTACK_GROWTH */\n        }\n        #else /* portHAS_STACK_OVERFLOW_CHECKING */\n        {\n            pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters );\n        }\n        #endif /* portHAS_STACK_OVERFLOW_CHECKING */\n    }\n    #endif /* portUSING_MPU_WRAPPERS */\n\n    /* Initialize task state and task attributes. */\n    #if ( configNUMBER_OF_CORES > 1 )\n    {\n        pxNewTCB->xTaskRunState = taskTASK_NOT_RUNNING;\n\n        /* Is this an idle task? */\n        if( ( ( TaskFunction_t ) pxTaskCode == ( TaskFunction_t ) prvIdleTask ) || ( ( TaskFunction_t ) pxTaskCode == ( TaskFunction_t ) prvPassiveIdleTask ) )\n        {\n            pxNewTCB->uxTaskAttributes |= taskATTRIBUTE_IS_IDLE;\n        }\n    }\n    #endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n\n    if( pxCreatedTask != NULL )\n    {\n        /* Pass the handle out in an anonymous way.  The handle can be used to\n         * change the created task's priority, delete the created task, etc.*/\n        *pxCreatedTask = ( TaskHandle_t ) pxNewTCB;\n    }\n    else\n    {\n        mtCOVERAGE_TEST_MARKER();\n    }\n}\n/*-----------------------------------------------------------*/\n\n#if ( configNUMBER_OF_CORES == 1 )\n\n    static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )\n    {\n        /* Ensure interrupts don't access the task lists while the lists are being\n         * updated. */\n        taskENTER_CRITICAL();\n        {\n            uxCurrentNumberOfTasks = ( UBaseType_t ) ( uxCurrentNumberOfTasks + 1U );\n\n            if( pxCurrentTCB == NULL )\n            {\n                /* There are no other tasks, or all the other tasks are in\n                 * the suspended state - make this the current task. */\n                pxCurrentTCB = pxNewTCB;\n\n                if( uxCurrentNumberOfTasks == ( UBaseType_t ) 1 )\n                {\n                    /* This is the first task to be created so do the preliminary\n                     * initialisation required.  We will not recover if this call\n                     * fails, but we will report the failure. */\n                    prvInitialiseTaskLists();\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                /* If the scheduler is not already running, make this task the\n                 * current task if it is the highest priority task to be created\n                 * so far. */\n                if( xSchedulerRunning == pdFALSE )\n                {\n                    if( pxCurrentTCB->uxPriority <= pxNewTCB->uxPriority )\n                    {\n                        pxCurrentTCB = pxNewTCB;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n\n            uxTaskNumber++;\n\n            #if ( configUSE_TRACE_FACILITY == 1 )\n            {\n                /* Add a counter into the TCB for tracing only. */\n                pxNewTCB->uxTCBNumber = uxTaskNumber;\n            }\n            #endif /* configUSE_TRACE_FACILITY */\n            traceTASK_CREATE( pxNewTCB );\n\n            prvAddTaskToReadyList( pxNewTCB );\n\n            portSETUP_TCB( pxNewTCB );\n        }\n        taskEXIT_CRITICAL();\n\n        if( xSchedulerRunning != pdFALSE )\n        {\n            /* If the created task is of a higher priority than the current task\n             * then it should run now. */\n            taskYIELD_ANY_CORE_IF_USING_PREEMPTION( pxNewTCB );\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n    }\n\n#else /* #if ( configNUMBER_OF_CORES == 1 ) */\n\n    static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB )\n    {\n        /* Ensure interrupts don't access the task lists while the lists are being\n         * updated. */\n        taskENTER_CRITICAL();\n        {\n            uxCurrentNumberOfTasks++;\n\n            if( xSchedulerRunning == pdFALSE )\n            {\n                if( uxCurrentNumberOfTasks == ( UBaseType_t ) 1 )\n                {\n                    /* This is the first task to be created so do the preliminary\n                     * initialisation required.  We will not recover if this call\n                     * fails, but we will report the failure. */\n                    prvInitialiseTaskLists();\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n\n                /* All the cores start with idle tasks before the SMP scheduler\n                 * is running. Idle tasks are assigned to cores when they are\n                 * created in prvCreateIdleTasks(). */\n            }\n\n            uxTaskNumber++;\n\n            #if ( configUSE_TRACE_FACILITY == 1 )\n            {\n                /* Add a counter into the TCB for tracing only. */\n                pxNewTCB->uxTCBNumber = uxTaskNumber;\n            }\n            #endif /* configUSE_TRACE_FACILITY */\n            traceTASK_CREATE( pxNewTCB );\n\n            prvAddTaskToReadyList( pxNewTCB );\n\n            portSETUP_TCB( pxNewTCB );\n\n            if( xSchedulerRunning != pdFALSE )\n            {\n                /* If the created task is of a higher priority than another\n                 * currently running task and preemption is on then it should\n                 * run now. */\n                taskYIELD_ANY_CORE_IF_USING_PREEMPTION( pxNewTCB );\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        taskEXIT_CRITICAL();\n    }\n\n#endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n/*-----------------------------------------------------------*/\n\n#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) )\n\n    static size_t prvSnprintfReturnValueToCharsWritten( int iSnprintfReturnValue,\n                                                        size_t n )\n    {\n        size_t uxCharsWritten;\n\n        if( iSnprintfReturnValue < 0 )\n        {\n            /* Encoding error - Return 0 to indicate that nothing\n             * was written to the buffer. */\n            uxCharsWritten = 0;\n        }\n        else if( iSnprintfReturnValue >= ( int ) n )\n        {\n            /* This is the case when the supplied buffer is not\n             * large to hold the generated string. Return the\n             * number of characters actually written without\n             * counting the terminating NULL character. */\n            uxCharsWritten = n - 1U;\n        }\n        else\n        {\n            /* Complete string was written to the buffer. */\n            uxCharsWritten = ( size_t ) iSnprintfReturnValue;\n        }\n\n        return uxCharsWritten;\n    }\n\n#endif /* #if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) ) */\n/*-----------------------------------------------------------*/\n\n#if ( INCLUDE_vTaskDelete == 1 )\n\n    void vTaskDelete( TaskHandle_t xTaskToDelete )\n    {\n        TCB_t * pxTCB;\n        BaseType_t xDeleteTCBInIdleTask = pdFALSE;\n        BaseType_t xTaskIsRunningOrYielding;\n\n        traceENTER_vTaskDelete( xTaskToDelete );\n\n        taskENTER_CRITICAL();\n        {\n            /* If null is passed in here then it is the calling task that is\n             * being deleted. */\n            pxTCB = prvGetTCBFromHandle( xTaskToDelete );\n\n            /* Remove task from the ready/delayed list. */\n            if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )\n            {\n                taskRESET_READY_PRIORITY( pxTCB->uxPriority );\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n\n            /* Is the task waiting on an event also? */\n            if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )\n            {\n                ( void ) uxListRemove( &( pxTCB->xEventListItem ) );\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n\n            /* Increment the uxTaskNumber also so kernel aware debuggers can\n             * detect that the task lists need re-generating.  This is done before\n             * portPRE_TASK_DELETE_HOOK() as in the Windows port that macro will\n             * not return. */\n            uxTaskNumber++;\n\n            /* Use temp variable as distinct sequence points for reading volatile\n             * variables prior to a logical operator to ensure compliance with\n             * MISRA C 2012 Rule 13.5. */\n            xTaskIsRunningOrYielding = taskTASK_IS_RUNNING_OR_SCHEDULED_TO_YIELD( pxTCB );\n\n            /* If the task is running (or yielding), we must add it to the\n             * termination list so that an idle task can delete it when it is\n             * no longer running. */\n            if( ( xSchedulerRunning != pdFALSE ) && ( xTaskIsRunningOrYielding != pdFALSE ) )\n            {\n                /* A running task or a task which is scheduled to yield is being\n                 * deleted. This cannot complete when the task is still running\n                 * on a core, as a context switch to another task is required.\n                 * Place the task in the termination list. The idle task will check\n                 * the termination list and free up any memory allocated by the\n                 * scheduler for the TCB and stack of the deleted task. */\n                vListInsertEnd( &xTasksWaitingTermination, &( pxTCB->xStateListItem ) );\n\n                /* Increment the ucTasksDeleted variable so the idle task knows\n                 * there is a task that has been deleted and that it should therefore\n                 * check the xTasksWaitingTermination list. */\n                ++uxDeletedTasksWaitingCleanUp;\n\n                /* Call the delete hook before portPRE_TASK_DELETE_HOOK() as\n                 * portPRE_TASK_DELETE_HOOK() does not return in the Win32 port. */\n                traceTASK_DELETE( pxTCB );\n\n                /* Delete the task TCB in idle task. */\n                xDeleteTCBInIdleTask = pdTRUE;\n\n                /* The pre-delete hook is primarily for the Windows simulator,\n                 * in which Windows specific clean up operations are performed,\n                 * after which it is not possible to yield away from this task -\n                 * hence xYieldPending is used to latch that a context switch is\n                 * required. */\n                #if ( configNUMBER_OF_CORES == 1 )\n                    portPRE_TASK_DELETE_HOOK( pxTCB, &( xYieldPendings[ 0 ] ) );\n                #else\n                    portPRE_TASK_DELETE_HOOK( pxTCB, &( xYieldPendings[ pxTCB->xTaskRunState ] ) );\n                #endif\n\n                /* In the case of SMP, it is possible that the task being deleted\n                 * is running on another core. We must evict the task before\n                 * exiting the critical section to ensure that the task cannot\n                 * take an action which puts it back on ready/state/event list,\n                 * thereby nullifying the delete operation. Once evicted, the\n                 * task won't be scheduled ever as it will no longer be on the\n                 * ready list. */\n                #if ( configNUMBER_OF_CORES > 1 )\n                {\n                    if( taskTASK_IS_RUNNING( pxTCB ) == pdTRUE )\n                    {\n                        if( pxTCB->xTaskRunState == ( BaseType_t ) portGET_CORE_ID() )\n                        {\n                            configASSERT( uxSchedulerSuspended == 0 );\n                            taskYIELD_WITHIN_API();\n                        }\n                        else\n                        {\n                            prvYieldCore( pxTCB->xTaskRunState );\n                        }\n                    }\n                }\n                #endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n            }\n            else\n            {\n                --uxCurrentNumberOfTasks;\n                traceTASK_DELETE( pxTCB );\n\n                /* Reset the next expected unblock time in case it referred to\n                 * the task that has just been deleted. */\n                prvResetNextTaskUnblockTime();\n            }\n        }\n        taskEXIT_CRITICAL();\n\n        /* If the task is not deleting itself, call prvDeleteTCB from outside of\n         * critical section. If a task deletes itself, prvDeleteTCB is called\n         * from prvCheckTasksWaitingTermination which is called from Idle task. */\n        if( xDeleteTCBInIdleTask != pdTRUE )\n        {\n            prvDeleteTCB( pxTCB );\n        }\n\n        /* Force a reschedule if it is the currently running task that has just\n         * been deleted. */\n        #if ( configNUMBER_OF_CORES == 1 )\n        {\n            if( xSchedulerRunning != pdFALSE )\n            {\n                if( pxTCB == pxCurrentTCB )\n                {\n                    configASSERT( uxSchedulerSuspended == 0 );\n                    taskYIELD_WITHIN_API();\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n        }\n        #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n\n        traceRETURN_vTaskDelete();\n    }\n\n#endif /* INCLUDE_vTaskDelete */\n/*-----------------------------------------------------------*/\n\n#if ( INCLUDE_xTaskDelayUntil == 1 )\n\n    BaseType_t xTaskDelayUntil( TickType_t * const pxPreviousWakeTime,\n                                const TickType_t xTimeIncrement )\n    {\n        TickType_t xTimeToWake;\n        BaseType_t xAlreadyYielded, xShouldDelay = pdFALSE;\n\n        traceENTER_xTaskDelayUntil( pxPreviousWakeTime, xTimeIncrement );\n\n        configASSERT( pxPreviousWakeTime );\n        configASSERT( ( xTimeIncrement > 0U ) );\n\n        vTaskSuspendAll();\n        {\n            /* Minor optimisation.  The tick count cannot change in this\n             * block. */\n            const TickType_t xConstTickCount = xTickCount;\n\n            configASSERT( uxSchedulerSuspended == 1U );\n\n            /* Generate the tick time at which the task wants to wake. */\n            xTimeToWake = *pxPreviousWakeTime + xTimeIncrement;\n\n            if( xConstTickCount < *pxPreviousWakeTime )\n            {\n                /* The tick count has overflowed since this function was\n                 * lasted called.  In this case the only time we should ever\n                 * actually delay is if the wake time has also  overflowed,\n                 * and the wake time is greater than the tick time.  When this\n                 * is the case it is as if neither time had overflowed. */\n                if( ( xTimeToWake < *pxPreviousWakeTime ) && ( xTimeToWake > xConstTickCount ) )\n                {\n                    xShouldDelay = pdTRUE;\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                /* The tick time has not overflowed.  In this case we will\n                 * delay if either the wake time has overflowed, and/or the\n                 * tick time is less than the wake time. */\n                if( ( xTimeToWake < *pxPreviousWakeTime ) || ( xTimeToWake > xConstTickCount ) )\n                {\n                    xShouldDelay = pdTRUE;\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n\n            /* Update the wake time ready for the next call. */\n            *pxPreviousWakeTime = xTimeToWake;\n\n            if( xShouldDelay != pdFALSE )\n            {\n                traceTASK_DELAY_UNTIL( xTimeToWake );\n\n                /* prvAddCurrentTaskToDelayedList() needs the block time, not\n                 * the time to wake, so subtract the current tick count. */\n                prvAddCurrentTaskToDelayedList( xTimeToWake - xConstTickCount, pdFALSE );\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        xAlreadyYielded = xTaskResumeAll();\n\n        /* Force a reschedule if xTaskResumeAll has not already done so, we may\n         * have put ourselves to sleep. */\n        if( xAlreadyYielded == pdFALSE )\n        {\n            taskYIELD_WITHIN_API();\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_xTaskDelayUntil( xShouldDelay );\n\n        return xShouldDelay;\n    }\n\n#endif /* INCLUDE_xTaskDelayUntil */\n/*-----------------------------------------------------------*/\n\n#if ( INCLUDE_vTaskDelay == 1 )\n\n    void vTaskDelay( const TickType_t xTicksToDelay )\n    {\n        BaseType_t xAlreadyYielded = pdFALSE;\n\n        traceENTER_vTaskDelay( xTicksToDelay );\n\n        /* A delay time of zero just forces a reschedule. */\n        if( xTicksToDelay > ( TickType_t ) 0U )\n        {\n            vTaskSuspendAll();\n            {\n                configASSERT( uxSchedulerSuspended == 1U );\n\n                traceTASK_DELAY();\n\n                /* A task that is removed from the event list while the\n                 * scheduler is suspended will not get placed in the ready\n                 * list or removed from the blocked list until the scheduler\n                 * is resumed.\n                 *\n                 * This task cannot be in an event list as it is the currently\n                 * executing task. */\n                prvAddCurrentTaskToDelayedList( xTicksToDelay, pdFALSE );\n            }\n            xAlreadyYielded = xTaskResumeAll();\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        /* Force a reschedule if xTaskResumeAll has not already done so, we may\n         * have put ourselves to sleep. */\n        if( xAlreadyYielded == pdFALSE )\n        {\n            taskYIELD_WITHIN_API();\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_vTaskDelay();\n    }\n\n#endif /* INCLUDE_vTaskDelay */\n/*-----------------------------------------------------------*/\n\n#if ( ( INCLUDE_eTaskGetState == 1 ) || ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_xTaskAbortDelay == 1 ) )\n\n    eTaskState eTaskGetState( TaskHandle_t xTask )\n    {\n        eTaskState eReturn;\n        List_t const * pxStateList;\n        List_t const * pxEventList;\n        List_t const * pxDelayedList;\n        List_t const * pxOverflowedDelayedList;\n        const TCB_t * const pxTCB = xTask;\n\n        traceENTER_eTaskGetState( xTask );\n\n        configASSERT( pxTCB );\n\n        #if ( configNUMBER_OF_CORES == 1 )\n            if( pxTCB == pxCurrentTCB )\n            {\n                /* The task calling this function is querying its own state. */\n                eReturn = eRunning;\n            }\n            else\n        #endif\n        {\n            taskENTER_CRITICAL();\n            {\n                pxStateList = listLIST_ITEM_CONTAINER( &( pxTCB->xStateListItem ) );\n                pxEventList = listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) );\n                pxDelayedList = pxDelayedTaskList;\n                pxOverflowedDelayedList = pxOverflowDelayedTaskList;\n            }\n            taskEXIT_CRITICAL();\n\n            if( pxEventList == &xPendingReadyList )\n            {\n                /* The task has been placed on the pending ready list, so its\n                 * state is eReady regardless of what list the task's state list\n                 * item is currently placed on. */\n                eReturn = eReady;\n            }\n            else if( ( pxStateList == pxDelayedList ) || ( pxStateList == pxOverflowedDelayedList ) )\n            {\n                /* The task being queried is referenced from one of the Blocked\n                 * lists. */\n                eReturn = eBlocked;\n            }\n\n            #if ( INCLUDE_vTaskSuspend == 1 )\n                else if( pxStateList == &xSuspendedTaskList )\n                {\n                    /* The task being queried is referenced from the suspended\n                     * list.  Is it genuinely suspended or is it blocked\n                     * indefinitely? */\n                    if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL )\n                    {\n                        #if ( configUSE_TASK_NOTIFICATIONS == 1 )\n                        {\n                            BaseType_t x;\n\n                            /* The task does not appear on the event list item of\n                             * and of the RTOS objects, but could still be in the\n                             * blocked state if it is waiting on its notification\n                             * rather than waiting on an object.  If not, is\n                             * suspended. */\n                            eReturn = eSuspended;\n\n                            for( x = ( BaseType_t ) 0; x < ( BaseType_t ) configTASK_NOTIFICATION_ARRAY_ENTRIES; x++ )\n                            {\n                                if( pxTCB->ucNotifyState[ x ] == taskWAITING_NOTIFICATION )\n                                {\n                                    eReturn = eBlocked;\n                                    break;\n                                }\n                            }\n                        }\n                        #else /* if ( configUSE_TASK_NOTIFICATIONS == 1 ) */\n                        {\n                            eReturn = eSuspended;\n                        }\n                        #endif /* if ( configUSE_TASK_NOTIFICATIONS == 1 ) */\n                    }\n                    else\n                    {\n                        eReturn = eBlocked;\n                    }\n                }\n            #endif /* if ( INCLUDE_vTaskSuspend == 1 ) */\n\n            #if ( INCLUDE_vTaskDelete == 1 )\n                else if( ( pxStateList == &xTasksWaitingTermination ) || ( pxStateList == NULL ) )\n                {\n                    /* The task being queried is referenced from the deleted\n                     * tasks list, or it is not referenced from any lists at\n                     * all. */\n                    eReturn = eDeleted;\n                }\n            #endif\n\n            else\n            {\n                #if ( configNUMBER_OF_CORES == 1 )\n                {\n                    /* If the task is not in any other state, it must be in the\n                     * Ready (including pending ready) state. */\n                    eReturn = eReady;\n                }\n                #else /* #if ( configNUMBER_OF_CORES == 1 ) */\n                {\n                    if( taskTASK_IS_RUNNING( pxTCB ) == pdTRUE )\n                    {\n                        /* Is it actively running on a core? */\n                        eReturn = eRunning;\n                    }\n                    else\n                    {\n                        /* If the task is not in any other state, it must be in the\n                         * Ready (including pending ready) state. */\n                        eReturn = eReady;\n                    }\n                }\n                #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n            }\n        }\n\n        traceRETURN_eTaskGetState( eReturn );\n\n        return eReturn;\n    }\n\n#endif /* INCLUDE_eTaskGetState */\n/*-----------------------------------------------------------*/\n\n#if ( INCLUDE_uxTaskPriorityGet == 1 )\n\n    UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask )\n    {\n        TCB_t const * pxTCB;\n        UBaseType_t uxReturn;\n\n        traceENTER_uxTaskPriorityGet( xTask );\n\n        taskENTER_CRITICAL();\n        {\n            /* If null is passed in here then it is the priority of the task\n             * that called uxTaskPriorityGet() that is being queried. */\n            pxTCB = prvGetTCBFromHandle( xTask );\n            uxReturn = pxTCB->uxPriority;\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_uxTaskPriorityGet( uxReturn );\n\n        return uxReturn;\n    }\n\n#endif /* INCLUDE_uxTaskPriorityGet */\n/*-----------------------------------------------------------*/\n\n#if ( INCLUDE_uxTaskPriorityGet == 1 )\n\n    UBaseType_t uxTaskPriorityGetFromISR( const TaskHandle_t xTask )\n    {\n        TCB_t const * pxTCB;\n        UBaseType_t uxReturn;\n        UBaseType_t uxSavedInterruptStatus;\n\n        traceENTER_uxTaskPriorityGetFromISR( xTask );\n\n        /* RTOS ports that support interrupt nesting have the concept of a\n         * maximum  system call (or maximum API call) interrupt priority.\n         * Interrupts that are  above the maximum system call priority are keep\n         * permanently enabled, even when the RTOS kernel is in a critical section,\n         * but cannot make any calls to FreeRTOS API functions.  If configASSERT()\n         * is defined in FreeRTOSConfig.h then\n         * portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion\n         * failure if a FreeRTOS API function is called from an interrupt that has\n         * been assigned a priority above the configured maximum system call\n         * priority.  Only FreeRTOS functions that end in FromISR can be called\n         * from interrupts  that have been assigned a priority at or (logically)\n         * below the maximum system call interrupt priority.  FreeRTOS maintains a\n         * separate interrupt safe API to ensure interrupt entry is as fast and as\n         * simple as possible.  More information (albeit Cortex-M specific) is\n         * provided on the following link:\n         * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */\n        portASSERT_IF_INTERRUPT_PRIORITY_INVALID();\n\n        /* MISRA Ref 4.7.1 [Return value shall be checked] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */\n        /* coverity[misra_c_2012_directive_4_7_violation] */\n        uxSavedInterruptStatus = ( UBaseType_t ) taskENTER_CRITICAL_FROM_ISR();\n        {\n            /* If null is passed in here then it is the priority of the calling\n             * task that is being queried. */\n            pxTCB = prvGetTCBFromHandle( xTask );\n            uxReturn = pxTCB->uxPriority;\n        }\n        taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );\n\n        traceRETURN_uxTaskPriorityGetFromISR( uxReturn );\n\n        return uxReturn;\n    }\n\n#endif /* INCLUDE_uxTaskPriorityGet */\n/*-----------------------------------------------------------*/\n\n#if ( ( INCLUDE_uxTaskPriorityGet == 1 ) && ( configUSE_MUTEXES == 1 ) )\n\n    UBaseType_t uxTaskBasePriorityGet( const TaskHandle_t xTask )\n    {\n        TCB_t const * pxTCB;\n        UBaseType_t uxReturn;\n\n        traceENTER_uxTaskBasePriorityGet( xTask );\n\n        taskENTER_CRITICAL();\n        {\n            /* If null is passed in here then it is the base priority of the task\n             * that called uxTaskBasePriorityGet() that is being queried. */\n            pxTCB = prvGetTCBFromHandle( xTask );\n            uxReturn = pxTCB->uxBasePriority;\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_uxTaskBasePriorityGet( uxReturn );\n\n        return uxReturn;\n    }\n\n#endif /* #if ( ( INCLUDE_uxTaskPriorityGet == 1 ) && ( configUSE_MUTEXES == 1 ) ) */\n/*-----------------------------------------------------------*/\n\n#if ( ( INCLUDE_uxTaskPriorityGet == 1 ) && ( configUSE_MUTEXES == 1 ) )\n\n    UBaseType_t uxTaskBasePriorityGetFromISR( const TaskHandle_t xTask )\n    {\n        TCB_t const * pxTCB;\n        UBaseType_t uxReturn;\n        UBaseType_t uxSavedInterruptStatus;\n\n        traceENTER_uxTaskBasePriorityGetFromISR( xTask );\n\n        /* RTOS ports that support interrupt nesting have the concept of a\n         * maximum  system call (or maximum API call) interrupt priority.\n         * Interrupts that are  above the maximum system call priority are keep\n         * permanently enabled, even when the RTOS kernel is in a critical section,\n         * but cannot make any calls to FreeRTOS API functions.  If configASSERT()\n         * is defined in FreeRTOSConfig.h then\n         * portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion\n         * failure if a FreeRTOS API function is called from an interrupt that has\n         * been assigned a priority above the configured maximum system call\n         * priority.  Only FreeRTOS functions that end in FromISR can be called\n         * from interrupts  that have been assigned a priority at or (logically)\n         * below the maximum system call interrupt priority.  FreeRTOS maintains a\n         * separate interrupt safe API to ensure interrupt entry is as fast and as\n         * simple as possible.  More information (albeit Cortex-M specific) is\n         * provided on the following link:\n         * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */\n        portASSERT_IF_INTERRUPT_PRIORITY_INVALID();\n\n        /* MISRA Ref 4.7.1 [Return value shall be checked] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */\n        /* coverity[misra_c_2012_directive_4_7_violation] */\n        uxSavedInterruptStatus = ( UBaseType_t ) taskENTER_CRITICAL_FROM_ISR();\n        {\n            /* If null is passed in here then it is the base priority of the calling\n             * task that is being queried. */\n            pxTCB = prvGetTCBFromHandle( xTask );\n            uxReturn = pxTCB->uxBasePriority;\n        }\n        taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );\n\n        traceRETURN_uxTaskBasePriorityGetFromISR( uxReturn );\n\n        return uxReturn;\n    }\n\n#endif /* #if ( ( INCLUDE_uxTaskPriorityGet == 1 ) && ( configUSE_MUTEXES == 1 ) ) */\n/*-----------------------------------------------------------*/\n\n#if ( INCLUDE_vTaskPrioritySet == 1 )\n\n    void vTaskPrioritySet( TaskHandle_t xTask,\n                           UBaseType_t uxNewPriority )\n    {\n        TCB_t * pxTCB;\n        UBaseType_t uxCurrentBasePriority, uxPriorityUsedOnEntry;\n        BaseType_t xYieldRequired = pdFALSE;\n\n        #if ( configNUMBER_OF_CORES > 1 )\n            BaseType_t xYieldForTask = pdFALSE;\n        #endif\n\n        traceENTER_vTaskPrioritySet( xTask, uxNewPriority );\n\n        configASSERT( uxNewPriority < configMAX_PRIORITIES );\n\n        /* Ensure the new priority is valid. */\n        if( uxNewPriority >= ( UBaseType_t ) configMAX_PRIORITIES )\n        {\n            uxNewPriority = ( UBaseType_t ) configMAX_PRIORITIES - ( UBaseType_t ) 1U;\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        taskENTER_CRITICAL();\n        {\n            /* If null is passed in here then it is the priority of the calling\n             * task that is being changed. */\n            pxTCB = prvGetTCBFromHandle( xTask );\n\n            traceTASK_PRIORITY_SET( pxTCB, uxNewPriority );\n\n            #if ( configUSE_MUTEXES == 1 )\n            {\n                uxCurrentBasePriority = pxTCB->uxBasePriority;\n            }\n            #else\n            {\n                uxCurrentBasePriority = pxTCB->uxPriority;\n            }\n            #endif\n\n            if( uxCurrentBasePriority != uxNewPriority )\n            {\n                /* The priority change may have readied a task of higher\n                 * priority than a running task. */\n                if( uxNewPriority > uxCurrentBasePriority )\n                {\n                    #if ( configNUMBER_OF_CORES == 1 )\n                    {\n                        if( pxTCB != pxCurrentTCB )\n                        {\n                            /* The priority of a task other than the currently\n                             * running task is being raised.  Is the priority being\n                             * raised above that of the running task? */\n                            if( uxNewPriority > pxCurrentTCB->uxPriority )\n                            {\n                                xYieldRequired = pdTRUE;\n                            }\n                            else\n                            {\n                                mtCOVERAGE_TEST_MARKER();\n                            }\n                        }\n                        else\n                        {\n                            /* The priority of the running task is being raised,\n                             * but the running task must already be the highest\n                             * priority task able to run so no yield is required. */\n                        }\n                    }\n                    #else /* #if ( configNUMBER_OF_CORES == 1 ) */\n                    {\n                        /* The priority of a task is being raised so\n                         * perform a yield for this task later. */\n                        xYieldForTask = pdTRUE;\n                    }\n                    #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n                }\n                else if( taskTASK_IS_RUNNING( pxTCB ) == pdTRUE )\n                {\n                    /* Setting the priority of a running task down means\n                     * there may now be another task of higher priority that\n                     * is ready to execute. */\n                    #if ( configUSE_TASK_PREEMPTION_DISABLE == 1 )\n                        if( pxTCB->xPreemptionDisable == pdFALSE )\n                    #endif\n                    {\n                        xYieldRequired = pdTRUE;\n                    }\n                }\n                else\n                {\n                    /* Setting the priority of any other task down does not\n                     * require a yield as the running task must be above the\n                     * new priority of the task being modified. */\n                }\n\n                /* Remember the ready list the task might be referenced from\n                 * before its uxPriority member is changed so the\n                 * taskRESET_READY_PRIORITY() macro can function correctly. */\n                uxPriorityUsedOnEntry = pxTCB->uxPriority;\n\n                #if ( configUSE_MUTEXES == 1 )\n                {\n                    /* Only change the priority being used if the task is not\n                     * currently using an inherited priority or the new priority\n                     * is bigger than the inherited priority. */\n                    if( ( pxTCB->uxBasePriority == pxTCB->uxPriority ) || ( uxNewPriority > pxTCB->uxPriority ) )\n                    {\n                        pxTCB->uxPriority = uxNewPriority;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n\n                    /* The base priority gets set whatever. */\n                    pxTCB->uxBasePriority = uxNewPriority;\n                }\n                #else /* if ( configUSE_MUTEXES == 1 ) */\n                {\n                    pxTCB->uxPriority = uxNewPriority;\n                }\n                #endif /* if ( configUSE_MUTEXES == 1 ) */\n\n                /* Only reset the event list item value if the value is not\n                 * being used for anything else. */\n                if( ( listGET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == ( ( TickType_t ) 0U ) )\n                {\n                    listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) uxNewPriority ) );\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n\n                /* If the task is in the blocked or suspended list we need do\n                 * nothing more than change its priority variable. However, if\n                 * the task is in a ready list it needs to be removed and placed\n                 * in the list appropriate to its new priority. */\n                if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xStateListItem ) ) != pdFALSE )\n                {\n                    /* The task is currently in its ready list - remove before\n                     * adding it to its new ready list.  As we are in a critical\n                     * section we can do this even if the scheduler is suspended. */\n                    if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )\n                    {\n                        /* It is known that the task is in its ready list so\n                         * there is no need to check again and the port level\n                         * reset macro can be called directly. */\n                        portRESET_READY_PRIORITY( uxPriorityUsedOnEntry, uxTopReadyPriority );\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n\n                    prvAddTaskToReadyList( pxTCB );\n                }\n                else\n                {\n                    #if ( configNUMBER_OF_CORES == 1 )\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                    #else\n                    {\n                        /* It's possible that xYieldForTask was already set to pdTRUE because\n                         * its priority is being raised. However, since it is not in a ready list\n                         * we don't actually need to yield for it. */\n                        xYieldForTask = pdFALSE;\n                    }\n                    #endif\n                }\n\n                if( xYieldRequired != pdFALSE )\n                {\n                    /* The running task priority is set down. Request the task to yield. */\n                    taskYIELD_TASK_CORE_IF_USING_PREEMPTION( pxTCB );\n                }\n                else\n                {\n                    #if ( configNUMBER_OF_CORES > 1 )\n                        if( xYieldForTask != pdFALSE )\n                        {\n                            /* The priority of the task is being raised. If a running\n                             * task has priority lower than this task, it should yield\n                             * for this task. */\n                            taskYIELD_ANY_CORE_IF_USING_PREEMPTION( pxTCB );\n                        }\n                        else\n                    #endif /* if ( configNUMBER_OF_CORES > 1 ) */\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n\n                /* Remove compiler warning about unused variables when the port\n                 * optimised task selection is not being used. */\n                ( void ) uxPriorityUsedOnEntry;\n            }\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_vTaskPrioritySet();\n    }\n\n#endif /* INCLUDE_vTaskPrioritySet */\n/*-----------------------------------------------------------*/\n\n#if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n    void vTaskCoreAffinitySet( const TaskHandle_t xTask,\n                               UBaseType_t uxCoreAffinityMask )\n    {\n        TCB_t * pxTCB;\n        BaseType_t xCoreID;\n        UBaseType_t uxPrevCoreAffinityMask;\n\n        #if ( configUSE_PREEMPTION == 1 )\n            UBaseType_t uxPrevNotAllowedCores;\n        #endif\n\n        traceENTER_vTaskCoreAffinitySet( xTask, uxCoreAffinityMask );\n\n        taskENTER_CRITICAL();\n        {\n            pxTCB = prvGetTCBFromHandle( xTask );\n\n            uxPrevCoreAffinityMask = pxTCB->uxCoreAffinityMask;\n            pxTCB->uxCoreAffinityMask = uxCoreAffinityMask;\n\n            if( xSchedulerRunning != pdFALSE )\n            {\n                if( taskTASK_IS_RUNNING( pxTCB ) == pdTRUE )\n                {\n                    xCoreID = ( BaseType_t ) pxTCB->xTaskRunState;\n\n                    /* If the task can no longer run on the core it was running,\n                     * request the core to yield. */\n                    if( ( uxCoreAffinityMask & ( ( UBaseType_t ) 1U << ( UBaseType_t ) xCoreID ) ) == 0U )\n                    {\n                        prvYieldCore( xCoreID );\n                    }\n                }\n                else\n                {\n                    #if ( configUSE_PREEMPTION == 1 )\n                    {\n                        /* Calculate the cores on which this task was not allowed to\n                         * run previously. */\n                        uxPrevNotAllowedCores = ( ~uxPrevCoreAffinityMask ) & ( ( 1U << configNUMBER_OF_CORES ) - 1U );\n\n                        /* Does the new core mask enables this task to run on any of the\n                         * previously not allowed cores? If yes, check if this task can be\n                         * scheduled on any of those cores. */\n                        if( ( uxPrevNotAllowedCores & uxCoreAffinityMask ) != 0U )\n                        {\n                            prvYieldForTask( pxTCB );\n                        }\n                    }\n                    #else /* #if( configUSE_PREEMPTION == 1 ) */\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                    #endif /* #if( configUSE_PREEMPTION == 1 ) */\n                }\n            }\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_vTaskCoreAffinitySet();\n    }\n#endif /* #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) ) */\n/*-----------------------------------------------------------*/\n\n#if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n    UBaseType_t vTaskCoreAffinityGet( ConstTaskHandle_t xTask )\n    {\n        const TCB_t * pxTCB;\n        UBaseType_t uxCoreAffinityMask;\n\n        traceENTER_vTaskCoreAffinityGet( xTask );\n\n        taskENTER_CRITICAL();\n        {\n            pxTCB = prvGetTCBFromHandle( xTask );\n            uxCoreAffinityMask = pxTCB->uxCoreAffinityMask;\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_vTaskCoreAffinityGet( uxCoreAffinityMask );\n\n        return uxCoreAffinityMask;\n    }\n#endif /* #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) ) */\n\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TASK_PREEMPTION_DISABLE == 1 )\n\n    void vTaskPreemptionDisable( const TaskHandle_t xTask )\n    {\n        TCB_t * pxTCB;\n\n        traceENTER_vTaskPreemptionDisable( xTask );\n\n        taskENTER_CRITICAL();\n        {\n            pxTCB = prvGetTCBFromHandle( xTask );\n\n            pxTCB->xPreemptionDisable = pdTRUE;\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_vTaskPreemptionDisable();\n    }\n\n#endif /* #if ( configUSE_TASK_PREEMPTION_DISABLE == 1 ) */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TASK_PREEMPTION_DISABLE == 1 )\n\n    void vTaskPreemptionEnable( const TaskHandle_t xTask )\n    {\n        TCB_t * pxTCB;\n        BaseType_t xCoreID;\n\n        traceENTER_vTaskPreemptionEnable( xTask );\n\n        taskENTER_CRITICAL();\n        {\n            pxTCB = prvGetTCBFromHandle( xTask );\n\n            pxTCB->xPreemptionDisable = pdFALSE;\n\n            if( xSchedulerRunning != pdFALSE )\n            {\n                if( taskTASK_IS_RUNNING( pxTCB ) == pdTRUE )\n                {\n                    xCoreID = ( BaseType_t ) pxTCB->xTaskRunState;\n                    prvYieldCore( xCoreID );\n                }\n            }\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_vTaskPreemptionEnable();\n    }\n\n#endif /* #if ( configUSE_TASK_PREEMPTION_DISABLE == 1 ) */\n/*-----------------------------------------------------------*/\n\n#if ( INCLUDE_vTaskSuspend == 1 )\n\n    void vTaskSuspend( TaskHandle_t xTaskToSuspend )\n    {\n        TCB_t * pxTCB;\n\n        traceENTER_vTaskSuspend( xTaskToSuspend );\n\n        taskENTER_CRITICAL();\n        {\n            /* If null is passed in here then it is the running task that is\n             * being suspended. */\n            pxTCB = prvGetTCBFromHandle( xTaskToSuspend );\n\n            traceTASK_SUSPEND( pxTCB );\n\n            /* Remove task from the ready/delayed list and place in the\n             * suspended list. */\n            if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )\n            {\n                taskRESET_READY_PRIORITY( pxTCB->uxPriority );\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n\n            /* Is the task waiting on an event also? */\n            if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )\n            {\n                ( void ) uxListRemove( &( pxTCB->xEventListItem ) );\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n\n            vListInsertEnd( &xSuspendedTaskList, &( pxTCB->xStateListItem ) );\n\n            #if ( configUSE_TASK_NOTIFICATIONS == 1 )\n            {\n                BaseType_t x;\n\n                for( x = ( BaseType_t ) 0; x < ( BaseType_t ) configTASK_NOTIFICATION_ARRAY_ENTRIES; x++ )\n                {\n                    if( pxTCB->ucNotifyState[ x ] == taskWAITING_NOTIFICATION )\n                    {\n                        /* The task was blocked to wait for a notification, but is\n                         * now suspended, so no notification was received. */\n                        pxTCB->ucNotifyState[ x ] = taskNOT_WAITING_NOTIFICATION;\n                    }\n                }\n            }\n            #endif /* if ( configUSE_TASK_NOTIFICATIONS == 1 ) */\n\n            /* In the case of SMP, it is possible that the task being suspended\n             * is running on another core. We must evict the task before\n             * exiting the critical section to ensure that the task cannot\n             * take an action which puts it back on ready/state/event list,\n             * thereby nullifying the suspend operation. Once evicted, the\n             * task won't be scheduled before it is resumed as it will no longer\n             * be on the ready list. */\n            #if ( configNUMBER_OF_CORES > 1 )\n            {\n                if( xSchedulerRunning != pdFALSE )\n                {\n                    /* Reset the next expected unblock time in case it referred to the\n                     * task that is now in the Suspended state. */\n                    prvResetNextTaskUnblockTime();\n\n                    if( taskTASK_IS_RUNNING( pxTCB ) == pdTRUE )\n                    {\n                        if( pxTCB->xTaskRunState == ( BaseType_t ) portGET_CORE_ID() )\n                        {\n                            /* The current task has just been suspended. */\n                            configASSERT( uxSchedulerSuspended == 0 );\n                            vTaskYieldWithinAPI();\n                        }\n                        else\n                        {\n                            prvYieldCore( pxTCB->xTaskRunState );\n                        }\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            #endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n        }\n        taskEXIT_CRITICAL();\n\n        #if ( configNUMBER_OF_CORES == 1 )\n        {\n            UBaseType_t uxCurrentListLength;\n\n            if( xSchedulerRunning != pdFALSE )\n            {\n                /* Reset the next expected unblock time in case it referred to the\n                 * task that is now in the Suspended state. */\n                taskENTER_CRITICAL();\n                {\n                    prvResetNextTaskUnblockTime();\n                }\n                taskEXIT_CRITICAL();\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n\n            if( pxTCB == pxCurrentTCB )\n            {\n                if( xSchedulerRunning != pdFALSE )\n                {\n                    /* The current task has just been suspended. */\n                    configASSERT( uxSchedulerSuspended == 0 );\n                    portYIELD_WITHIN_API();\n                }\n                else\n                {\n                    /* The scheduler is not running, but the task that was pointed\n                     * to by pxCurrentTCB has just been suspended and pxCurrentTCB\n                     * must be adjusted to point to a different task. */\n\n                    /* Use a temp variable as a distinct sequence point for reading\n                     * volatile variables prior to a comparison to ensure compliance\n                     * with MISRA C 2012 Rule 13.2. */\n                    uxCurrentListLength = listCURRENT_LIST_LENGTH( &xSuspendedTaskList );\n\n                    if( uxCurrentListLength == uxCurrentNumberOfTasks )\n                    {\n                        /* No other tasks are ready, so set pxCurrentTCB back to\n                         * NULL so when the next task is created pxCurrentTCB will\n                         * be set to point to it no matter what its relative priority\n                         * is. */\n                        pxCurrentTCB = NULL;\n                    }\n                    else\n                    {\n                        vTaskSwitchContext();\n                    }\n                }\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n\n        traceRETURN_vTaskSuspend();\n    }\n\n#endif /* INCLUDE_vTaskSuspend */\n/*-----------------------------------------------------------*/\n\n#if ( INCLUDE_vTaskSuspend == 1 )\n\n    static BaseType_t prvTaskIsTaskSuspended( const TaskHandle_t xTask )\n    {\n        BaseType_t xReturn = pdFALSE;\n        const TCB_t * const pxTCB = xTask;\n\n        /* Accesses xPendingReadyList so must be called from a critical\n         * section. */\n\n        /* It does not make sense to check if the calling task is suspended. */\n        configASSERT( xTask );\n\n        /* Is the task being resumed actually in the suspended list? */\n        if( listIS_CONTAINED_WITHIN( &xSuspendedTaskList, &( pxTCB->xStateListItem ) ) != pdFALSE )\n        {\n            /* Has the task already been resumed from within an ISR? */\n            if( listIS_CONTAINED_WITHIN( &xPendingReadyList, &( pxTCB->xEventListItem ) ) == pdFALSE )\n            {\n                /* Is it in the suspended list because it is in the Suspended\n                 * state, or because it is blocked with no timeout? */\n                if( listIS_CONTAINED_WITHIN( NULL, &( pxTCB->xEventListItem ) ) != pdFALSE )\n                {\n                    #if ( configUSE_TASK_NOTIFICATIONS == 1 )\n                    {\n                        BaseType_t x;\n\n                        /* The task does not appear on the event list item of\n                         * and of the RTOS objects, but could still be in the\n                         * blocked state if it is waiting on its notification\n                         * rather than waiting on an object.  If not, is\n                         * suspended. */\n                        xReturn = pdTRUE;\n\n                        for( x = ( BaseType_t ) 0; x < ( BaseType_t ) configTASK_NOTIFICATION_ARRAY_ENTRIES; x++ )\n                        {\n                            if( pxTCB->ucNotifyState[ x ] == taskWAITING_NOTIFICATION )\n                            {\n                                xReturn = pdFALSE;\n                                break;\n                            }\n                        }\n                    }\n                    #else /* if ( configUSE_TASK_NOTIFICATIONS == 1 ) */\n                    {\n                        xReturn = pdTRUE;\n                    }\n                    #endif /* if ( configUSE_TASK_NOTIFICATIONS == 1 ) */\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        return xReturn;\n    }\n\n#endif /* INCLUDE_vTaskSuspend */\n/*-----------------------------------------------------------*/\n\n#if ( INCLUDE_vTaskSuspend == 1 )\n\n    void vTaskResume( TaskHandle_t xTaskToResume )\n    {\n        TCB_t * const pxTCB = xTaskToResume;\n\n        traceENTER_vTaskResume( xTaskToResume );\n\n        /* It does not make sense to resume the calling task. */\n        configASSERT( xTaskToResume );\n\n        #if ( configNUMBER_OF_CORES == 1 )\n\n            /* The parameter cannot be NULL as it is impossible to resume the\n             * currently executing task. */\n            if( ( pxTCB != pxCurrentTCB ) && ( pxTCB != NULL ) )\n        #else\n\n            /* The parameter cannot be NULL as it is impossible to resume the\n             * currently executing task. It is also impossible to resume a task\n             * that is actively running on another core but it is not safe\n             * to check their run state here. Therefore, we get into a critical\n             * section and check if the task is actually suspended or not. */\n            if( pxTCB != NULL )\n        #endif\n        {\n            taskENTER_CRITICAL();\n            {\n                if( prvTaskIsTaskSuspended( pxTCB ) != pdFALSE )\n                {\n                    traceTASK_RESUME( pxTCB );\n\n                    /* The ready list can be accessed even if the scheduler is\n                     * suspended because this is inside a critical section. */\n                    ( void ) uxListRemove( &( pxTCB->xStateListItem ) );\n                    prvAddTaskToReadyList( pxTCB );\n\n                    /* This yield may not cause the task just resumed to run,\n                     * but will leave the lists in the correct state for the\n                     * next yield. */\n                    taskYIELD_ANY_CORE_IF_USING_PREEMPTION( pxTCB );\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            taskEXIT_CRITICAL();\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_vTaskResume();\n    }\n\n#endif /* INCLUDE_vTaskSuspend */\n\n/*-----------------------------------------------------------*/\n\n#if ( ( INCLUDE_xTaskResumeFromISR == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) )\n\n    BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume )\n    {\n        BaseType_t xYieldRequired = pdFALSE;\n        TCB_t * const pxTCB = xTaskToResume;\n        UBaseType_t uxSavedInterruptStatus;\n\n        traceENTER_xTaskResumeFromISR( xTaskToResume );\n\n        configASSERT( xTaskToResume );\n\n        /* RTOS ports that support interrupt nesting have the concept of a\n         * maximum  system call (or maximum API call) interrupt priority.\n         * Interrupts that are  above the maximum system call priority are keep\n         * permanently enabled, even when the RTOS kernel is in a critical section,\n         * but cannot make any calls to FreeRTOS API functions.  If configASSERT()\n         * is defined in FreeRTOSConfig.h then\n         * portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion\n         * failure if a FreeRTOS API function is called from an interrupt that has\n         * been assigned a priority above the configured maximum system call\n         * priority.  Only FreeRTOS functions that end in FromISR can be called\n         * from interrupts  that have been assigned a priority at or (logically)\n         * below the maximum system call interrupt priority.  FreeRTOS maintains a\n         * separate interrupt safe API to ensure interrupt entry is as fast and as\n         * simple as possible.  More information (albeit Cortex-M specific) is\n         * provided on the following link:\n         * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */\n        portASSERT_IF_INTERRUPT_PRIORITY_INVALID();\n\n        /* MISRA Ref 4.7.1 [Return value shall be checked] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */\n        /* coverity[misra_c_2012_directive_4_7_violation] */\n        uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();\n        {\n            if( prvTaskIsTaskSuspended( pxTCB ) != pdFALSE )\n            {\n                traceTASK_RESUME_FROM_ISR( pxTCB );\n\n                /* Check the ready lists can be accessed. */\n                if( uxSchedulerSuspended == ( UBaseType_t ) 0U )\n                {\n                    #if ( configNUMBER_OF_CORES == 1 )\n                    {\n                        /* Ready lists can be accessed so move the task from the\n                         * suspended list to the ready list directly. */\n                        if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )\n                        {\n                            xYieldRequired = pdTRUE;\n\n                            /* Mark that a yield is pending in case the user is not\n                             * using the return value to initiate a context switch\n                             * from the ISR using the port specific portYIELD_FROM_ISR(). */\n                            xYieldPendings[ 0 ] = pdTRUE;\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n                    #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n\n                    ( void ) uxListRemove( &( pxTCB->xStateListItem ) );\n                    prvAddTaskToReadyList( pxTCB );\n                }\n                else\n                {\n                    /* The delayed or ready lists cannot be accessed so the task\n                     * is held in the pending ready list until the scheduler is\n                     * unsuspended. */\n                    vListInsertEnd( &( xPendingReadyList ), &( pxTCB->xEventListItem ) );\n                }\n\n                #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_PREEMPTION == 1 ) )\n                {\n                    prvYieldForTask( pxTCB );\n\n                    if( xYieldPendings[ portGET_CORE_ID() ] != pdFALSE )\n                    {\n                        xYieldRequired = pdTRUE;\n                    }\n                }\n                #endif /* #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_PREEMPTION == 1 ) ) */\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );\n\n        traceRETURN_xTaskResumeFromISR( xYieldRequired );\n\n        return xYieldRequired;\n    }\n\n#endif /* ( ( INCLUDE_xTaskResumeFromISR == 1 ) && ( INCLUDE_vTaskSuspend == 1 ) ) */\n/*-----------------------------------------------------------*/\n\nstatic BaseType_t prvCreateIdleTasks( void )\n{\n    BaseType_t xReturn = pdPASS;\n    BaseType_t xCoreID;\n    char cIdleName[ configMAX_TASK_NAME_LEN ];\n    TaskFunction_t pxIdleTaskFunction = NULL;\n    BaseType_t xIdleTaskNameIndex;\n\n    for( xIdleTaskNameIndex = ( BaseType_t ) 0; xIdleTaskNameIndex < ( BaseType_t ) configMAX_TASK_NAME_LEN; xIdleTaskNameIndex++ )\n    {\n        cIdleName[ xIdleTaskNameIndex ] = configIDLE_TASK_NAME[ xIdleTaskNameIndex ];\n\n        /* Don't copy all configMAX_TASK_NAME_LEN if the string is shorter than\n         * configMAX_TASK_NAME_LEN characters just in case the memory after the\n         * string is not accessible (extremely unlikely). */\n        if( cIdleName[ xIdleTaskNameIndex ] == ( char ) 0x00 )\n        {\n            break;\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n    }\n\n    /* Add each idle task at the lowest priority. */\n    for( xCoreID = ( BaseType_t ) 0; xCoreID < ( BaseType_t ) configNUMBER_OF_CORES; xCoreID++ )\n    {\n        #if ( configNUMBER_OF_CORES == 1 )\n        {\n            pxIdleTaskFunction = prvIdleTask;\n        }\n        #else /* #if (  configNUMBER_OF_CORES == 1 ) */\n        {\n            /* In the FreeRTOS SMP, configNUMBER_OF_CORES - 1 passive idle tasks\n             * are also created to ensure that each core has an idle task to\n             * run when no other task is available to run. */\n            if( xCoreID == 0 )\n            {\n                pxIdleTaskFunction = prvIdleTask;\n            }\n            else\n            {\n                pxIdleTaskFunction = prvPassiveIdleTask;\n            }\n        }\n        #endif /* #if (  configNUMBER_OF_CORES == 1 ) */\n\n        /* Update the idle task name with suffix to differentiate the idle tasks.\n         * This function is not required in single core FreeRTOS since there is\n         * only one idle task. */\n        #if ( configNUMBER_OF_CORES > 1 )\n        {\n            /* Append the idle task number to the end of the name if there is space. */\n            if( xIdleTaskNameIndex < ( BaseType_t ) configMAX_TASK_NAME_LEN )\n            {\n                cIdleName[ xIdleTaskNameIndex ] = ( char ) ( xCoreID + '0' );\n\n                /* And append a null character if there is space. */\n                if( ( xIdleTaskNameIndex + 1 ) < ( BaseType_t ) configMAX_TASK_NAME_LEN )\n                {\n                    cIdleName[ xIdleTaskNameIndex + 1 ] = '\\0';\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        #endif /* if ( configNUMBER_OF_CORES > 1 ) */\n\n        #if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n        {\n            StaticTask_t * pxIdleTaskTCBBuffer = NULL;\n            StackType_t * pxIdleTaskStackBuffer = NULL;\n            configSTACK_DEPTH_TYPE uxIdleTaskStackSize;\n\n            /* The Idle task is created using user provided RAM - obtain the\n             * address of the RAM then create the idle task. */\n            #if ( configNUMBER_OF_CORES == 1 )\n            {\n                vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &uxIdleTaskStackSize );\n            }\n            #else\n            {\n                if( xCoreID == 0 )\n                {\n                    vApplicationGetIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &uxIdleTaskStackSize );\n                }\n                else\n                {\n                    vApplicationGetPassiveIdleTaskMemory( &pxIdleTaskTCBBuffer, &pxIdleTaskStackBuffer, &uxIdleTaskStackSize, ( BaseType_t ) ( xCoreID - 1 ) );\n                }\n            }\n            #endif /* if ( configNUMBER_OF_CORES == 1 ) */\n            xIdleTaskHandles[ xCoreID ] = xTaskCreateStatic( pxIdleTaskFunction,\n                                                             cIdleName,\n                                                             uxIdleTaskStackSize,\n                                                             ( void * ) NULL,\n                                                             portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */\n                                                             pxIdleTaskStackBuffer,\n                                                             pxIdleTaskTCBBuffer );\n\n            if( xIdleTaskHandles[ xCoreID ] != NULL )\n            {\n                xReturn = pdPASS;\n            }\n            else\n            {\n                xReturn = pdFAIL;\n            }\n        }\n        #else /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */\n        {\n            /* The Idle task is being created using dynamically allocated RAM. */\n            xReturn = xTaskCreate( pxIdleTaskFunction,\n                                   cIdleName,\n                                   configMINIMAL_STACK_SIZE,\n                                   ( void * ) NULL,\n                                   portPRIVILEGE_BIT, /* In effect ( tskIDLE_PRIORITY | portPRIVILEGE_BIT ), but tskIDLE_PRIORITY is zero. */\n                                   &xIdleTaskHandles[ xCoreID ] );\n        }\n        #endif /* configSUPPORT_STATIC_ALLOCATION */\n\n        /* Break the loop if any of the idle task is failed to be created. */\n        if( xReturn == pdFAIL )\n        {\n            break;\n        }\n        else\n        {\n            #if ( configNUMBER_OF_CORES == 1 )\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n            #else\n            {\n                /* Assign idle task to each core before SMP scheduler is running. */\n                xIdleTaskHandles[ xCoreID ]->xTaskRunState = xCoreID;\n                pxCurrentTCBs[ xCoreID ] = xIdleTaskHandles[ xCoreID ];\n            }\n            #endif\n        }\n    }\n\n    return xReturn;\n}\n\n/*-----------------------------------------------------------*/\n\nvoid vTaskStartScheduler( void )\n{\n    BaseType_t xReturn;\n\n    traceENTER_vTaskStartScheduler();\n\n    #if ( configUSE_CORE_AFFINITY == 1 ) && ( configNUMBER_OF_CORES > 1 )\n    {\n        /* Sanity check that the UBaseType_t must have greater than or equal to\n         * the number of bits as confNUMBER_OF_CORES. */\n        configASSERT( ( sizeof( UBaseType_t ) * taskBITS_PER_BYTE ) >= configNUMBER_OF_CORES );\n    }\n    #endif /* #if ( configUSE_CORE_AFFINITY == 1 ) && ( configNUMBER_OF_CORES > 1 ) */\n\n    xReturn = prvCreateIdleTasks();\n\n    #if ( configUSE_TIMERS == 1 )\n    {\n        if( xReturn == pdPASS )\n        {\n            xReturn = xTimerCreateTimerTask();\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n    }\n    #endif /* configUSE_TIMERS */\n\n    if( xReturn == pdPASS )\n    {\n        /* freertos_tasks_c_additions_init() should only be called if the user\n         * definable macro FREERTOS_TASKS_C_ADDITIONS_INIT() is defined, as that is\n         * the only macro called by the function. */\n        #ifdef FREERTOS_TASKS_C_ADDITIONS_INIT\n        {\n            freertos_tasks_c_additions_init();\n        }\n        #endif\n\n        /* Interrupts are turned off here, to ensure a tick does not occur\n         * before or during the call to xPortStartScheduler().  The stacks of\n         * the created tasks contain a status word with interrupts switched on\n         * so interrupts will automatically get re-enabled when the first task\n         * starts to run. */\n        portDISABLE_INTERRUPTS();\n\n        #if ( configUSE_C_RUNTIME_TLS_SUPPORT == 1 )\n        {\n            /* Switch C-Runtime's TLS Block to point to the TLS\n             * block specific to the task that will run first. */\n            configSET_TLS_BLOCK( pxCurrentTCB->xTLSBlock );\n        }\n        #endif\n\n        xNextTaskUnblockTime = portMAX_DELAY;\n        xSchedulerRunning = pdTRUE;\n        xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT;\n\n        /* If configGENERATE_RUN_TIME_STATS is defined then the following\n         * macro must be defined to configure the timer/counter used to generate\n         * the run time counter time base.   NOTE:  If configGENERATE_RUN_TIME_STATS\n         * is set to 0 and the following line fails to build then ensure you do not\n         * have portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() defined in your\n         * FreeRTOSConfig.h file. */\n        portCONFIGURE_TIMER_FOR_RUN_TIME_STATS();\n\n        traceTASK_SWITCHED_IN();\n\n        /* Setting up the timer tick is hardware specific and thus in the\n         * portable interface. */\n\n        /* The return value for xPortStartScheduler is not required\n         * hence using a void datatype. */\n        ( void ) xPortStartScheduler();\n\n        /* In most cases, xPortStartScheduler() will not return. If it\n         * returns pdTRUE then there was not enough heap memory available\n         * to create either the Idle or the Timer task. If it returned\n         * pdFALSE, then the application called xTaskEndScheduler().\n         * Most ports don't implement xTaskEndScheduler() as there is\n         * nothing to return to. */\n    }\n    else\n    {\n        /* This line will only be reached if the kernel could not be started,\n         * because there was not enough FreeRTOS heap to create the idle task\n         * or the timer task. */\n        configASSERT( xReturn != errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY );\n    }\n\n    /* Prevent compiler warnings if INCLUDE_xTaskGetIdleTaskHandle is set to 0,\n     * meaning xIdleTaskHandles are not used anywhere else. */\n    ( void ) xIdleTaskHandles;\n\n    /* OpenOCD makes use of uxTopUsedPriority for thread debugging. Prevent uxTopUsedPriority\n     * from getting optimized out as it is no longer used by the kernel. */\n    ( void ) uxTopUsedPriority;\n\n    traceRETURN_vTaskStartScheduler();\n}\n/*-----------------------------------------------------------*/\n\nvoid vTaskEndScheduler( void )\n{\n    traceENTER_vTaskEndScheduler();\n\n    #if ( INCLUDE_vTaskDelete == 1 )\n    {\n        BaseType_t xCoreID;\n\n        #if ( configUSE_TIMERS == 1 )\n        {\n            /* Delete the timer task created by the kernel. */\n            vTaskDelete( xTimerGetTimerDaemonTaskHandle() );\n        }\n        #endif /* #if ( configUSE_TIMERS == 1 ) */\n\n        /* Delete Idle tasks created by the kernel.*/\n        for( xCoreID = 0; xCoreID < ( BaseType_t ) configNUMBER_OF_CORES; xCoreID++ )\n        {\n            vTaskDelete( xIdleTaskHandles[ xCoreID ] );\n        }\n\n        /* Idle task is responsible for reclaiming the resources of the tasks in\n         * xTasksWaitingTermination list. Since the idle task is now deleted and\n         * no longer going to run, we need to reclaim resources of all the tasks\n         * in the xTasksWaitingTermination list. */\n        prvCheckTasksWaitingTermination();\n    }\n    #endif /* #if ( INCLUDE_vTaskDelete == 1 ) */\n\n    /* Stop the scheduler interrupts and call the portable scheduler end\n     * routine so the original ISRs can be restored if necessary.  The port\n     * layer must ensure interrupts enable  bit is left in the correct state. */\n    portDISABLE_INTERRUPTS();\n    xSchedulerRunning = pdFALSE;\n\n    /* This function must be called from a task and the application is\n     * responsible for deleting that task after the scheduler is stopped. */\n    vPortEndScheduler();\n\n    traceRETURN_vTaskEndScheduler();\n}\n/*----------------------------------------------------------*/\n\nvoid vTaskSuspendAll( void )\n{\n    traceENTER_vTaskSuspendAll();\n\n    #if ( configNUMBER_OF_CORES == 1 )\n    {\n        /* A critical section is not required as the variable is of type\n         * BaseType_t.  Please read Richard Barry's reply in the following link to a\n         * post in the FreeRTOS support forum before reporting this as a bug! -\n         * https://goo.gl/wu4acr */\n\n        /* portSOFTWARE_BARRIER() is only implemented for emulated/simulated ports that\n         * do not otherwise exhibit real time behaviour. */\n        portSOFTWARE_BARRIER();\n\n        /* The scheduler is suspended if uxSchedulerSuspended is non-zero.  An increment\n         * is used to allow calls to vTaskSuspendAll() to nest. */\n        uxSchedulerSuspended = ( UBaseType_t ) ( uxSchedulerSuspended + 1U );\n\n        /* Enforces ordering for ports and optimised compilers that may otherwise place\n         * the above increment elsewhere. */\n        portMEMORY_BARRIER();\n    }\n    #else /* #if ( configNUMBER_OF_CORES == 1 ) */\n    {\n        UBaseType_t ulState;\n\n        /* This must only be called from within a task. */\n        portASSERT_IF_IN_ISR();\n\n        if( xSchedulerRunning != pdFALSE )\n        {\n            /* Writes to uxSchedulerSuspended must be protected by both the task AND ISR locks.\n             * We must disable interrupts before we grab the locks in the event that this task is\n             * interrupted and switches context before incrementing uxSchedulerSuspended.\n             * It is safe to re-enable interrupts after releasing the ISR lock and incrementing\n             * uxSchedulerSuspended since that will prevent context switches. */\n            ulState = portSET_INTERRUPT_MASK();\n\n            /* This must never be called from inside a critical section. */\n            configASSERT( portGET_CRITICAL_NESTING_COUNT() == 0 );\n\n            /* portSOFRWARE_BARRIER() is only implemented for emulated/simulated ports that\n             * do not otherwise exhibit real time behaviour. */\n            portSOFTWARE_BARRIER();\n\n            portGET_TASK_LOCK();\n\n            /* uxSchedulerSuspended is increased after prvCheckForRunStateChange. The\n             * purpose is to prevent altering the variable when fromISR APIs are readying\n             * it. */\n            if( uxSchedulerSuspended == 0U )\n            {\n                prvCheckForRunStateChange();\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n\n            portGET_ISR_LOCK();\n\n            /* The scheduler is suspended if uxSchedulerSuspended is non-zero. An increment\n             * is used to allow calls to vTaskSuspendAll() to nest. */\n            ++uxSchedulerSuspended;\n            portRELEASE_ISR_LOCK();\n\n            portCLEAR_INTERRUPT_MASK( ulState );\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n    }\n    #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n\n    traceRETURN_vTaskSuspendAll();\n}\n\n/*----------------------------------------------------------*/\n\n#if ( configUSE_TICKLESS_IDLE != 0 )\n\n    static TickType_t prvGetExpectedIdleTime( void )\n    {\n        TickType_t xReturn;\n        UBaseType_t uxHigherPriorityReadyTasks = pdFALSE;\n\n        /* uxHigherPriorityReadyTasks takes care of the case where\n         * configUSE_PREEMPTION is 0, so there may be tasks above the idle priority\n         * task that are in the Ready state, even though the idle task is\n         * running. */\n        #if ( configUSE_PORT_OPTIMISED_TASK_SELECTION == 0 )\n        {\n            if( uxTopReadyPriority > tskIDLE_PRIORITY )\n            {\n                uxHigherPriorityReadyTasks = pdTRUE;\n            }\n        }\n        #else\n        {\n            const UBaseType_t uxLeastSignificantBit = ( UBaseType_t ) 0x01;\n\n            /* When port optimised task selection is used the uxTopReadyPriority\n             * variable is used as a bit map.  If bits other than the least\n             * significant bit are set then there are tasks that have a priority\n             * above the idle priority that are in the Ready state.  This takes\n             * care of the case where the co-operative scheduler is in use. */\n            if( uxTopReadyPriority > uxLeastSignificantBit )\n            {\n                uxHigherPriorityReadyTasks = pdTRUE;\n            }\n        }\n        #endif /* if ( configUSE_PORT_OPTIMISED_TASK_SELECTION == 0 ) */\n\n        if( pxCurrentTCB->uxPriority > tskIDLE_PRIORITY )\n        {\n            xReturn = 0;\n        }\n        else if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > 1U )\n        {\n            /* There are other idle priority tasks in the ready state.  If\n             * time slicing is used then the very next tick interrupt must be\n             * processed. */\n            xReturn = 0;\n        }\n        else if( uxHigherPriorityReadyTasks != pdFALSE )\n        {\n            /* There are tasks in the Ready state that have a priority above the\n             * idle priority.  This path can only be reached if\n             * configUSE_PREEMPTION is 0. */\n            xReturn = 0;\n        }\n        else\n        {\n            xReturn = xNextTaskUnblockTime;\n            xReturn -= xTickCount;\n        }\n\n        return xReturn;\n    }\n\n#endif /* configUSE_TICKLESS_IDLE */\n/*----------------------------------------------------------*/\n\nBaseType_t xTaskResumeAll( void )\n{\n    TCB_t * pxTCB = NULL;\n    BaseType_t xAlreadyYielded = pdFALSE;\n\n    traceENTER_xTaskResumeAll();\n\n    #if ( configNUMBER_OF_CORES > 1 )\n        if( xSchedulerRunning != pdFALSE )\n    #endif\n    {\n        /* It is possible that an ISR caused a task to be removed from an event\n         * list while the scheduler was suspended.  If this was the case then the\n         * removed task will have been added to the xPendingReadyList.  Once the\n         * scheduler has been resumed it is safe to move all the pending ready\n         * tasks from this list into their appropriate ready list. */\n        taskENTER_CRITICAL();\n        {\n            BaseType_t xCoreID;\n            xCoreID = ( BaseType_t ) portGET_CORE_ID();\n\n            /* If uxSchedulerSuspended is zero then this function does not match a\n             * previous call to vTaskSuspendAll(). */\n            configASSERT( uxSchedulerSuspended != 0U );\n\n            uxSchedulerSuspended = ( UBaseType_t ) ( uxSchedulerSuspended - 1U );\n            portRELEASE_TASK_LOCK();\n\n            if( uxSchedulerSuspended == ( UBaseType_t ) 0U )\n            {\n                if( uxCurrentNumberOfTasks > ( UBaseType_t ) 0U )\n                {\n                    /* Move any readied tasks from the pending list into the\n                     * appropriate ready list. */\n                    while( listLIST_IS_EMPTY( &xPendingReadyList ) == pdFALSE )\n                    {\n                        /* MISRA Ref 11.5.3 [Void pointer assignment] */\n                        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n                        /* coverity[misra_c_2012_rule_11_5_violation] */\n                        pxTCB = listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingReadyList ) );\n                        listREMOVE_ITEM( &( pxTCB->xEventListItem ) );\n                        portMEMORY_BARRIER();\n                        listREMOVE_ITEM( &( pxTCB->xStateListItem ) );\n                        prvAddTaskToReadyList( pxTCB );\n\n                        #if ( configNUMBER_OF_CORES == 1 )\n                        {\n                            /* If the moved task has a priority higher than the current\n                             * task then a yield must be performed. */\n                            if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )\n                            {\n                                xYieldPendings[ xCoreID ] = pdTRUE;\n                            }\n                            else\n                            {\n                                mtCOVERAGE_TEST_MARKER();\n                            }\n                        }\n                        #else /* #if ( configNUMBER_OF_CORES == 1 ) */\n                        {\n                            /* All appropriate tasks yield at the moment a task is added to xPendingReadyList.\n                             * If the current core yielded then vTaskSwitchContext() has already been called\n                             * which sets xYieldPendings for the current core to pdTRUE. */\n                        }\n                        #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n                    }\n\n                    if( pxTCB != NULL )\n                    {\n                        /* A task was unblocked while the scheduler was suspended,\n                         * which may have prevented the next unblock time from being\n                         * re-calculated, in which case re-calculate it now.  Mainly\n                         * important for low power tickless implementations, where\n                         * this can prevent an unnecessary exit from low power\n                         * state. */\n                        prvResetNextTaskUnblockTime();\n                    }\n\n                    /* If any ticks occurred while the scheduler was suspended then\n                     * they should be processed now.  This ensures the tick count does\n                     * not  slip, and that any delayed tasks are resumed at the correct\n                     * time.\n                     *\n                     * It should be safe to call xTaskIncrementTick here from any core\n                     * since we are in a critical section and xTaskIncrementTick itself\n                     * protects itself within a critical section. Suspending the scheduler\n                     * from any core causes xTaskIncrementTick to increment uxPendedCounts. */\n                    {\n                        TickType_t xPendedCounts = xPendedTicks; /* Non-volatile copy. */\n\n                        if( xPendedCounts > ( TickType_t ) 0U )\n                        {\n                            do\n                            {\n                                if( xTaskIncrementTick() != pdFALSE )\n                                {\n                                    /* Other cores are interrupted from\n                                     * within xTaskIncrementTick(). */\n                                    xYieldPendings[ xCoreID ] = pdTRUE;\n                                }\n                                else\n                                {\n                                    mtCOVERAGE_TEST_MARKER();\n                                }\n\n                                --xPendedCounts;\n                            } while( xPendedCounts > ( TickType_t ) 0U );\n\n                            xPendedTicks = 0;\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n\n                    if( xYieldPendings[ xCoreID ] != pdFALSE )\n                    {\n                        #if ( configUSE_PREEMPTION != 0 )\n                        {\n                            xAlreadyYielded = pdTRUE;\n                        }\n                        #endif /* #if ( configUSE_PREEMPTION != 0 ) */\n\n                        #if ( configNUMBER_OF_CORES == 1 )\n                        {\n                            taskYIELD_TASK_CORE_IF_USING_PREEMPTION( pxCurrentTCB );\n                        }\n                        #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        taskEXIT_CRITICAL();\n    }\n\n    traceRETURN_xTaskResumeAll( xAlreadyYielded );\n\n    return xAlreadyYielded;\n}\n/*-----------------------------------------------------------*/\n\nTickType_t xTaskGetTickCount( void )\n{\n    TickType_t xTicks;\n\n    traceENTER_xTaskGetTickCount();\n\n    /* Critical section required if running on a 16 bit processor. */\n    portTICK_TYPE_ENTER_CRITICAL();\n    {\n        xTicks = xTickCount;\n    }\n    portTICK_TYPE_EXIT_CRITICAL();\n\n    traceRETURN_xTaskGetTickCount( xTicks );\n\n    return xTicks;\n}\n/*-----------------------------------------------------------*/\n\nTickType_t xTaskGetTickCountFromISR( void )\n{\n    TickType_t xReturn;\n    UBaseType_t uxSavedInterruptStatus;\n\n    traceENTER_xTaskGetTickCountFromISR();\n\n    /* RTOS ports that support interrupt nesting have the concept of a maximum\n     * system call (or maximum API call) interrupt priority.  Interrupts that are\n     * above the maximum system call priority are kept permanently enabled, even\n     * when the RTOS kernel is in a critical section, but cannot make any calls to\n     * FreeRTOS API functions.  If configASSERT() is defined in FreeRTOSConfig.h\n     * then portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion\n     * failure if a FreeRTOS API function is called from an interrupt that has been\n     * assigned a priority above the configured maximum system call priority.\n     * Only FreeRTOS functions that end in FromISR can be called from interrupts\n     * that have been assigned a priority at or (logically) below the maximum\n     * system call  interrupt priority.  FreeRTOS maintains a separate interrupt\n     * safe API to ensure interrupt entry is as fast and as simple as possible.\n     * More information (albeit Cortex-M specific) is provided on the following\n     * link: https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */\n    portASSERT_IF_INTERRUPT_PRIORITY_INVALID();\n\n    uxSavedInterruptStatus = portTICK_TYPE_SET_INTERRUPT_MASK_FROM_ISR();\n    {\n        xReturn = xTickCount;\n    }\n    portTICK_TYPE_CLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );\n\n    traceRETURN_xTaskGetTickCountFromISR( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nUBaseType_t uxTaskGetNumberOfTasks( void )\n{\n    traceENTER_uxTaskGetNumberOfTasks();\n\n    /* A critical section is not required because the variables are of type\n     * BaseType_t. */\n    traceRETURN_uxTaskGetNumberOfTasks( uxCurrentNumberOfTasks );\n\n    return uxCurrentNumberOfTasks;\n}\n/*-----------------------------------------------------------*/\n\nchar * pcTaskGetName( TaskHandle_t xTaskToQuery )\n{\n    TCB_t * pxTCB;\n\n    traceENTER_pcTaskGetName( xTaskToQuery );\n\n    /* If null is passed in here then the name of the calling task is being\n     * queried. */\n    pxTCB = prvGetTCBFromHandle( xTaskToQuery );\n    configASSERT( pxTCB );\n\n    traceRETURN_pcTaskGetName( &( pxTCB->pcTaskName[ 0 ] ) );\n\n    return &( pxTCB->pcTaskName[ 0 ] );\n}\n/*-----------------------------------------------------------*/\n\n#if ( INCLUDE_xTaskGetHandle == 1 )\n    static TCB_t * prvSearchForNameWithinSingleList( List_t * pxList,\n                                                     const char pcNameToQuery[] )\n    {\n        TCB_t * pxReturn = NULL;\n        TCB_t * pxTCB = NULL;\n        UBaseType_t x;\n        char cNextChar;\n        BaseType_t xBreakLoop;\n        const ListItem_t * pxEndMarker = listGET_END_MARKER( pxList );\n        ListItem_t * pxIterator;\n\n        /* This function is called with the scheduler suspended. */\n\n        if( listCURRENT_LIST_LENGTH( pxList ) > ( UBaseType_t ) 0 )\n        {\n            for( pxIterator = listGET_HEAD_ENTRY( pxList ); pxIterator != pxEndMarker; pxIterator = listGET_NEXT( pxIterator ) )\n            {\n                /* MISRA Ref 11.5.3 [Void pointer assignment] */\n                /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n                /* coverity[misra_c_2012_rule_11_5_violation] */\n                pxTCB = listGET_LIST_ITEM_OWNER( pxIterator );\n\n                /* Check each character in the name looking for a match or\n                 * mismatch. */\n                xBreakLoop = pdFALSE;\n\n                for( x = ( UBaseType_t ) 0; x < ( UBaseType_t ) configMAX_TASK_NAME_LEN; x++ )\n                {\n                    cNextChar = pxTCB->pcTaskName[ x ];\n\n                    if( cNextChar != pcNameToQuery[ x ] )\n                    {\n                        /* Characters didn't match. */\n                        xBreakLoop = pdTRUE;\n                    }\n                    else if( cNextChar == ( char ) 0x00 )\n                    {\n                        /* Both strings terminated, a match must have been\n                         * found. */\n                        pxReturn = pxTCB;\n                        xBreakLoop = pdTRUE;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n\n                    if( xBreakLoop != pdFALSE )\n                    {\n                        break;\n                    }\n                }\n\n                if( pxReturn != NULL )\n                {\n                    /* The handle has been found. */\n                    break;\n                }\n            }\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        return pxReturn;\n    }\n\n#endif /* INCLUDE_xTaskGetHandle */\n/*-----------------------------------------------------------*/\n\n#if ( INCLUDE_xTaskGetHandle == 1 )\n\n    TaskHandle_t xTaskGetHandle( const char * pcNameToQuery )\n    {\n        UBaseType_t uxQueue = configMAX_PRIORITIES;\n        TCB_t * pxTCB;\n\n        traceENTER_xTaskGetHandle( pcNameToQuery );\n\n        /* Task names will be truncated to configMAX_TASK_NAME_LEN - 1 bytes. */\n        configASSERT( strlen( pcNameToQuery ) < configMAX_TASK_NAME_LEN );\n\n        vTaskSuspendAll();\n        {\n            /* Search the ready lists. */\n            do\n            {\n                uxQueue--;\n                pxTCB = prvSearchForNameWithinSingleList( ( List_t * ) &( pxReadyTasksLists[ uxQueue ] ), pcNameToQuery );\n\n                if( pxTCB != NULL )\n                {\n                    /* Found the handle. */\n                    break;\n                }\n            } while( uxQueue > ( UBaseType_t ) tskIDLE_PRIORITY );\n\n            /* Search the delayed lists. */\n            if( pxTCB == NULL )\n            {\n                pxTCB = prvSearchForNameWithinSingleList( ( List_t * ) pxDelayedTaskList, pcNameToQuery );\n            }\n\n            if( pxTCB == NULL )\n            {\n                pxTCB = prvSearchForNameWithinSingleList( ( List_t * ) pxOverflowDelayedTaskList, pcNameToQuery );\n            }\n\n            #if ( INCLUDE_vTaskSuspend == 1 )\n            {\n                if( pxTCB == NULL )\n                {\n                    /* Search the suspended list. */\n                    pxTCB = prvSearchForNameWithinSingleList( &xSuspendedTaskList, pcNameToQuery );\n                }\n            }\n            #endif\n\n            #if ( INCLUDE_vTaskDelete == 1 )\n            {\n                if( pxTCB == NULL )\n                {\n                    /* Search the deleted list. */\n                    pxTCB = prvSearchForNameWithinSingleList( &xTasksWaitingTermination, pcNameToQuery );\n                }\n            }\n            #endif\n        }\n        ( void ) xTaskResumeAll();\n\n        traceRETURN_xTaskGetHandle( pxTCB );\n\n        return pxTCB;\n    }\n\n#endif /* INCLUDE_xTaskGetHandle */\n/*-----------------------------------------------------------*/\n\n#if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n\n    BaseType_t xTaskGetStaticBuffers( TaskHandle_t xTask,\n                                      StackType_t ** ppuxStackBuffer,\n                                      StaticTask_t ** ppxTaskBuffer )\n    {\n        BaseType_t xReturn;\n        TCB_t * pxTCB;\n\n        traceENTER_xTaskGetStaticBuffers( xTask, ppuxStackBuffer, ppxTaskBuffer );\n\n        configASSERT( ppuxStackBuffer != NULL );\n        configASSERT( ppxTaskBuffer != NULL );\n\n        pxTCB = prvGetTCBFromHandle( xTask );\n\n        #if ( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE == 1 )\n        {\n            if( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_AND_TCB )\n            {\n                *ppuxStackBuffer = pxTCB->pxStack;\n                /* MISRA Ref 11.3.1 [Misaligned access] */\n                /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-113 */\n                /* coverity[misra_c_2012_rule_11_3_violation] */\n                *ppxTaskBuffer = ( StaticTask_t * ) pxTCB;\n                xReturn = pdTRUE;\n            }\n            else if( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_ONLY )\n            {\n                *ppuxStackBuffer = pxTCB->pxStack;\n                *ppxTaskBuffer = NULL;\n                xReturn = pdTRUE;\n            }\n            else\n            {\n                xReturn = pdFALSE;\n            }\n        }\n        #else /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE == 1 */\n        {\n            *ppuxStackBuffer = pxTCB->pxStack;\n            *ppxTaskBuffer = ( StaticTask_t * ) pxTCB;\n            xReturn = pdTRUE;\n        }\n        #endif /* tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE == 1 */\n\n        traceRETURN_xTaskGetStaticBuffers( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configSUPPORT_STATIC_ALLOCATION */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TRACE_FACILITY == 1 )\n\n    UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray,\n                                      const UBaseType_t uxArraySize,\n                                      configRUN_TIME_COUNTER_TYPE * const pulTotalRunTime )\n    {\n        UBaseType_t uxTask = 0, uxQueue = configMAX_PRIORITIES;\n\n        traceENTER_uxTaskGetSystemState( pxTaskStatusArray, uxArraySize, pulTotalRunTime );\n\n        vTaskSuspendAll();\n        {\n            /* Is there a space in the array for each task in the system? */\n            if( uxArraySize >= uxCurrentNumberOfTasks )\n            {\n                /* Fill in an TaskStatus_t structure with information on each\n                 * task in the Ready state. */\n                do\n                {\n                    uxQueue--;\n                    uxTask = ( UBaseType_t ) ( uxTask + prvListTasksWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), &( pxReadyTasksLists[ uxQueue ] ), eReady ) );\n                } while( uxQueue > ( UBaseType_t ) tskIDLE_PRIORITY );\n\n                /* Fill in an TaskStatus_t structure with information on each\n                 * task in the Blocked state. */\n                uxTask = ( UBaseType_t ) ( uxTask + prvListTasksWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), ( List_t * ) pxDelayedTaskList, eBlocked ) );\n                uxTask = ( UBaseType_t ) ( uxTask + prvListTasksWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), ( List_t * ) pxOverflowDelayedTaskList, eBlocked ) );\n\n                #if ( INCLUDE_vTaskDelete == 1 )\n                {\n                    /* Fill in an TaskStatus_t structure with information on\n                     * each task that has been deleted but not yet cleaned up. */\n                    uxTask = ( UBaseType_t ) ( uxTask + prvListTasksWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), &xTasksWaitingTermination, eDeleted ) );\n                }\n                #endif\n\n                #if ( INCLUDE_vTaskSuspend == 1 )\n                {\n                    /* Fill in an TaskStatus_t structure with information on\n                     * each task in the Suspended state. */\n                    uxTask = ( UBaseType_t ) ( uxTask + prvListTasksWithinSingleList( &( pxTaskStatusArray[ uxTask ] ), &xSuspendedTaskList, eSuspended ) );\n                }\n                #endif\n\n                #if ( configGENERATE_RUN_TIME_STATS == 1 )\n                {\n                    if( pulTotalRunTime != NULL )\n                    {\n                        #ifdef portALT_GET_RUN_TIME_COUNTER_VALUE\n                            portALT_GET_RUN_TIME_COUNTER_VALUE( ( *pulTotalRunTime ) );\n                        #else\n                            *pulTotalRunTime = ( configRUN_TIME_COUNTER_TYPE ) portGET_RUN_TIME_COUNTER_VALUE();\n                        #endif\n                    }\n                }\n                #else /* if ( configGENERATE_RUN_TIME_STATS == 1 ) */\n                {\n                    if( pulTotalRunTime != NULL )\n                    {\n                        *pulTotalRunTime = 0;\n                    }\n                }\n                #endif /* if ( configGENERATE_RUN_TIME_STATS == 1 ) */\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        ( void ) xTaskResumeAll();\n\n        traceRETURN_uxTaskGetSystemState( uxTask );\n\n        return uxTask;\n    }\n\n#endif /* configUSE_TRACE_FACILITY */\n/*----------------------------------------------------------*/\n\n#if ( INCLUDE_xTaskGetIdleTaskHandle == 1 )\n\n    #if ( configNUMBER_OF_CORES == 1 )\n        TaskHandle_t xTaskGetIdleTaskHandle( void )\n        {\n            traceENTER_xTaskGetIdleTaskHandle();\n\n            /* If xTaskGetIdleTaskHandle() is called before the scheduler has been\n             * started, then xIdleTaskHandles will be NULL. */\n            configASSERT( ( xIdleTaskHandles[ 0 ] != NULL ) );\n\n            traceRETURN_xTaskGetIdleTaskHandle( xIdleTaskHandles[ 0 ] );\n\n            return xIdleTaskHandles[ 0 ];\n        }\n    #endif /* if ( configNUMBER_OF_CORES == 1 ) */\n\n    TaskHandle_t xTaskGetIdleTaskHandleForCore( BaseType_t xCoreID )\n    {\n        traceENTER_xTaskGetIdleTaskHandleForCore( xCoreID );\n\n        /* Ensure the core ID is valid. */\n        configASSERT( taskVALID_CORE_ID( xCoreID ) == pdTRUE );\n\n        /* If xTaskGetIdleTaskHandle() is called before the scheduler has been\n         * started, then xIdleTaskHandles will be NULL. */\n        configASSERT( ( xIdleTaskHandles[ xCoreID ] != NULL ) );\n\n        traceRETURN_xTaskGetIdleTaskHandleForCore( xIdleTaskHandles[ xCoreID ] );\n\n        return xIdleTaskHandles[ xCoreID ];\n    }\n\n#endif /* INCLUDE_xTaskGetIdleTaskHandle */\n/*----------------------------------------------------------*/\n\n/* This conditional compilation should use inequality to 0, not equality to 1.\n * This is to ensure vTaskStepTick() is available when user defined low power mode\n * implementations require configUSE_TICKLESS_IDLE to be set to a value other than\n * 1. */\n#if ( configUSE_TICKLESS_IDLE != 0 )\n\n    void vTaskStepTick( TickType_t xTicksToJump )\n    {\n        TickType_t xUpdatedTickCount;\n\n        traceENTER_vTaskStepTick( xTicksToJump );\n\n        /* Correct the tick count value after a period during which the tick\n         * was suppressed.  Note this does *not* call the tick hook function for\n         * each stepped tick. */\n        xUpdatedTickCount = xTickCount + xTicksToJump;\n        configASSERT( xUpdatedTickCount <= xNextTaskUnblockTime );\n\n        if( xUpdatedTickCount == xNextTaskUnblockTime )\n        {\n            /* Arrange for xTickCount to reach xNextTaskUnblockTime in\n             * xTaskIncrementTick() when the scheduler resumes.  This ensures\n             * that any delayed tasks are resumed at the correct time. */\n            configASSERT( uxSchedulerSuspended != ( UBaseType_t ) 0U );\n            configASSERT( xTicksToJump != ( TickType_t ) 0 );\n\n            /* Prevent the tick interrupt modifying xPendedTicks simultaneously. */\n            taskENTER_CRITICAL();\n            {\n                xPendedTicks++;\n            }\n            taskEXIT_CRITICAL();\n            xTicksToJump--;\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        xTickCount += xTicksToJump;\n\n        traceINCREASE_TICK_COUNT( xTicksToJump );\n        traceRETURN_vTaskStepTick();\n    }\n\n#endif /* configUSE_TICKLESS_IDLE */\n/*----------------------------------------------------------*/\n\nBaseType_t xTaskCatchUpTicks( TickType_t xTicksToCatchUp )\n{\n    BaseType_t xYieldOccurred;\n\n    traceENTER_xTaskCatchUpTicks( xTicksToCatchUp );\n\n    /* Must not be called with the scheduler suspended as the implementation\n     * relies on xPendedTicks being wound down to 0 in xTaskResumeAll(). */\n    configASSERT( uxSchedulerSuspended == ( UBaseType_t ) 0U );\n\n    /* Use xPendedTicks to mimic xTicksToCatchUp number of ticks occurring when\n     * the scheduler is suspended so the ticks are executed in xTaskResumeAll(). */\n    vTaskSuspendAll();\n\n    /* Prevent the tick interrupt modifying xPendedTicks simultaneously. */\n    taskENTER_CRITICAL();\n    {\n        xPendedTicks += xTicksToCatchUp;\n    }\n    taskEXIT_CRITICAL();\n    xYieldOccurred = xTaskResumeAll();\n\n    traceRETURN_xTaskCatchUpTicks( xYieldOccurred );\n\n    return xYieldOccurred;\n}\n/*----------------------------------------------------------*/\n\n#if ( INCLUDE_xTaskAbortDelay == 1 )\n\n    BaseType_t xTaskAbortDelay( TaskHandle_t xTask )\n    {\n        TCB_t * pxTCB = xTask;\n        BaseType_t xReturn;\n\n        traceENTER_xTaskAbortDelay( xTask );\n\n        configASSERT( pxTCB );\n\n        vTaskSuspendAll();\n        {\n            /* A task can only be prematurely removed from the Blocked state if\n             * it is actually in the Blocked state. */\n            if( eTaskGetState( xTask ) == eBlocked )\n            {\n                xReturn = pdPASS;\n\n                /* Remove the reference to the task from the blocked list.  An\n                 * interrupt won't touch the xStateListItem because the\n                 * scheduler is suspended. */\n                ( void ) uxListRemove( &( pxTCB->xStateListItem ) );\n\n                /* Is the task waiting on an event also?  If so remove it from\n                 * the event list too.  Interrupts can touch the event list item,\n                 * even though the scheduler is suspended, so a critical section\n                 * is used. */\n                taskENTER_CRITICAL();\n                {\n                    if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )\n                    {\n                        ( void ) uxListRemove( &( pxTCB->xEventListItem ) );\n\n                        /* This lets the task know it was forcibly removed from the\n                         * blocked state so it should not re-evaluate its block time and\n                         * then block again. */\n                        pxTCB->ucDelayAborted = ( uint8_t ) pdTRUE;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                taskEXIT_CRITICAL();\n\n                /* Place the unblocked task into the appropriate ready list. */\n                prvAddTaskToReadyList( pxTCB );\n\n                /* A task being unblocked cannot cause an immediate context\n                 * switch if preemption is turned off. */\n                #if ( configUSE_PREEMPTION == 1 )\n                {\n                    #if ( configNUMBER_OF_CORES == 1 )\n                    {\n                        /* Preemption is on, but a context switch should only be\n                         * performed if the unblocked task has a priority that is\n                         * higher than the currently executing task. */\n                        if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )\n                        {\n                            /* Pend the yield to be performed when the scheduler\n                             * is unsuspended. */\n                            xYieldPendings[ 0 ] = pdTRUE;\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n                    #else /* #if ( configNUMBER_OF_CORES == 1 ) */\n                    {\n                        taskENTER_CRITICAL();\n                        {\n                            prvYieldForTask( pxTCB );\n                        }\n                        taskEXIT_CRITICAL();\n                    }\n                    #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n                }\n                #endif /* #if ( configUSE_PREEMPTION == 1 ) */\n            }\n            else\n            {\n                xReturn = pdFAIL;\n            }\n        }\n        ( void ) xTaskResumeAll();\n\n        traceRETURN_xTaskAbortDelay( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* INCLUDE_xTaskAbortDelay */\n/*----------------------------------------------------------*/\n\nBaseType_t xTaskIncrementTick( void )\n{\n    TCB_t * pxTCB;\n    TickType_t xItemValue;\n    BaseType_t xSwitchRequired = pdFALSE;\n\n    #if ( configUSE_PREEMPTION == 1 ) && ( configNUMBER_OF_CORES > 1 )\n    BaseType_t xYieldRequiredForCore[ configNUMBER_OF_CORES ] = { pdFALSE };\n    #endif /* #if ( configUSE_PREEMPTION == 1 ) && ( configNUMBER_OF_CORES > 1 ) */\n\n    traceENTER_xTaskIncrementTick();\n\n    /* Called by the portable layer each time a tick interrupt occurs.\n     * Increments the tick then checks to see if the new tick value will cause any\n     * tasks to be unblocked. */\n    traceTASK_INCREMENT_TICK( xTickCount );\n\n    /* Tick increment should occur on every kernel timer event. Core 0 has the\n     * responsibility to increment the tick, or increment the pended ticks if the\n     * scheduler is suspended.  If pended ticks is greater than zero, the core that\n     * calls xTaskResumeAll has the responsibility to increment the tick. */\n    if( uxSchedulerSuspended == ( UBaseType_t ) 0U )\n    {\n        /* Minor optimisation.  The tick count cannot change in this\n         * block. */\n        const TickType_t xConstTickCount = xTickCount + ( TickType_t ) 1;\n\n        /* Increment the RTOS tick, switching the delayed and overflowed\n         * delayed lists if it wraps to 0. */\n        xTickCount = xConstTickCount;\n\n        if( xConstTickCount == ( TickType_t ) 0U )\n        {\n            taskSWITCH_DELAYED_LISTS();\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        /* See if this tick has made a timeout expire.  Tasks are stored in\n         * the  queue in the order of their wake time - meaning once one task\n         * has been found whose block time has not expired there is no need to\n         * look any further down the list. */\n        if( xConstTickCount >= xNextTaskUnblockTime )\n        {\n            for( ; ; )\n            {\n                if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )\n                {\n                    /* The delayed list is empty.  Set xNextTaskUnblockTime\n                     * to the maximum possible value so it is extremely\n                     * unlikely that the\n                     * if( xTickCount >= xNextTaskUnblockTime ) test will pass\n                     * next time through. */\n                    xNextTaskUnblockTime = portMAX_DELAY;\n                    break;\n                }\n                else\n                {\n                    /* The delayed list is not empty, get the value of the\n                     * item at the head of the delayed list.  This is the time\n                     * at which the task at the head of the delayed list must\n                     * be removed from the Blocked state. */\n                    /* MISRA Ref 11.5.3 [Void pointer assignment] */\n                    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n                    /* coverity[misra_c_2012_rule_11_5_violation] */\n                    pxTCB = listGET_OWNER_OF_HEAD_ENTRY( pxDelayedTaskList );\n                    xItemValue = listGET_LIST_ITEM_VALUE( &( pxTCB->xStateListItem ) );\n\n                    if( xConstTickCount < xItemValue )\n                    {\n                        /* It is not time to unblock this item yet, but the\n                         * item value is the time at which the task at the head\n                         * of the blocked list must be removed from the Blocked\n                         * state -  so record the item value in\n                         * xNextTaskUnblockTime. */\n                        xNextTaskUnblockTime = xItemValue;\n                        break;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n\n                    /* It is time to remove the item from the Blocked state. */\n                    listREMOVE_ITEM( &( pxTCB->xStateListItem ) );\n\n                    /* Is the task waiting on an event also?  If so remove\n                     * it from the event list. */\n                    if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )\n                    {\n                        listREMOVE_ITEM( &( pxTCB->xEventListItem ) );\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n\n                    /* Place the unblocked task into the appropriate ready\n                     * list. */\n                    prvAddTaskToReadyList( pxTCB );\n\n                    /* A task being unblocked cannot cause an immediate\n                     * context switch if preemption is turned off. */\n                    #if ( configUSE_PREEMPTION == 1 )\n                    {\n                        #if ( configNUMBER_OF_CORES == 1 )\n                        {\n                            /* Preemption is on, but a context switch should\n                             * only be performed if the unblocked task's\n                             * priority is higher than the currently executing\n                             * task.\n                             * The case of equal priority tasks sharing\n                             * processing time (which happens when both\n                             * preemption and time slicing are on) is\n                             * handled below.*/\n                            if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )\n                            {\n                                xSwitchRequired = pdTRUE;\n                            }\n                            else\n                            {\n                                mtCOVERAGE_TEST_MARKER();\n                            }\n                        }\n                        #else /* #if( configNUMBER_OF_CORES == 1 ) */\n                        {\n                            prvYieldForTask( pxTCB );\n                        }\n                        #endif /* #if( configNUMBER_OF_CORES == 1 ) */\n                    }\n                    #endif /* #if ( configUSE_PREEMPTION == 1 ) */\n                }\n            }\n        }\n\n        /* Tasks of equal priority to the currently running task will share\n         * processing time (time slice) if preemption is on, and the application\n         * writer has not explicitly turned time slicing off. */\n        #if ( ( configUSE_PREEMPTION == 1 ) && ( configUSE_TIME_SLICING == 1 ) )\n        {\n            #if ( configNUMBER_OF_CORES == 1 )\n            {\n                if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ pxCurrentTCB->uxPriority ] ) ) > 1U )\n                {\n                    xSwitchRequired = pdTRUE;\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            #else /* #if ( configNUMBER_OF_CORES == 1 ) */\n            {\n                BaseType_t xCoreID;\n\n                for( xCoreID = 0; xCoreID < ( ( BaseType_t ) configNUMBER_OF_CORES ); xCoreID++ )\n                {\n                    if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ pxCurrentTCBs[ xCoreID ]->uxPriority ] ) ) > 1U )\n                    {\n                        xYieldRequiredForCore[ xCoreID ] = pdTRUE;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n            }\n            #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n        }\n        #endif /* #if ( ( configUSE_PREEMPTION == 1 ) && ( configUSE_TIME_SLICING == 1 ) ) */\n\n        #if ( configUSE_TICK_HOOK == 1 )\n        {\n            /* Guard against the tick hook being called when the pended tick\n             * count is being unwound (when the scheduler is being unlocked). */\n            if( xPendedTicks == ( TickType_t ) 0 )\n            {\n                vApplicationTickHook();\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        #endif /* configUSE_TICK_HOOK */\n\n        #if ( configUSE_PREEMPTION == 1 )\n        {\n            #if ( configNUMBER_OF_CORES == 1 )\n            {\n                /* For single core the core ID is always 0. */\n                if( xYieldPendings[ 0 ] != pdFALSE )\n                {\n                    xSwitchRequired = pdTRUE;\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            #else /* #if ( configNUMBER_OF_CORES == 1 ) */\n            {\n                BaseType_t xCoreID, xCurrentCoreID;\n                xCurrentCoreID = ( BaseType_t ) portGET_CORE_ID();\n\n                for( xCoreID = 0; xCoreID < ( BaseType_t ) configNUMBER_OF_CORES; xCoreID++ )\n                {\n                    #if ( configUSE_TASK_PREEMPTION_DISABLE == 1 )\n                        if( pxCurrentTCBs[ xCoreID ]->xPreemptionDisable == pdFALSE )\n                    #endif\n                    {\n                        if( ( xYieldRequiredForCore[ xCoreID ] != pdFALSE ) || ( xYieldPendings[ xCoreID ] != pdFALSE ) )\n                        {\n                            if( xCoreID == xCurrentCoreID )\n                            {\n                                xSwitchRequired = pdTRUE;\n                            }\n                            else\n                            {\n                                prvYieldCore( xCoreID );\n                            }\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n                    }\n                }\n            }\n            #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n        }\n        #endif /* #if ( configUSE_PREEMPTION == 1 ) */\n    }\n    else\n    {\n        xPendedTicks += 1U;\n\n        /* The tick hook gets called at regular intervals, even if the\n         * scheduler is locked. */\n        #if ( configUSE_TICK_HOOK == 1 )\n        {\n            vApplicationTickHook();\n        }\n        #endif\n    }\n\n    traceRETURN_xTaskIncrementTick( xSwitchRequired );\n\n    return xSwitchRequired;\n}\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_APPLICATION_TASK_TAG == 1 )\n\n    void vTaskSetApplicationTaskTag( TaskHandle_t xTask,\n                                     TaskHookFunction_t pxHookFunction )\n    {\n        TCB_t * xTCB;\n\n        traceENTER_vTaskSetApplicationTaskTag( xTask, pxHookFunction );\n\n        /* If xTask is NULL then it is the task hook of the calling task that is\n         * getting set. */\n        if( xTask == NULL )\n        {\n            xTCB = ( TCB_t * ) pxCurrentTCB;\n        }\n        else\n        {\n            xTCB = xTask;\n        }\n\n        /* Save the hook function in the TCB.  A critical section is required as\n         * the value can be accessed from an interrupt. */\n        taskENTER_CRITICAL();\n        {\n            xTCB->pxTaskTag = pxHookFunction;\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_vTaskSetApplicationTaskTag();\n    }\n\n#endif /* configUSE_APPLICATION_TASK_TAG */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_APPLICATION_TASK_TAG == 1 )\n\n    TaskHookFunction_t xTaskGetApplicationTaskTag( TaskHandle_t xTask )\n    {\n        TCB_t * pxTCB;\n        TaskHookFunction_t xReturn;\n\n        traceENTER_xTaskGetApplicationTaskTag( xTask );\n\n        /* If xTask is NULL then set the calling task's hook. */\n        pxTCB = prvGetTCBFromHandle( xTask );\n\n        /* Save the hook function in the TCB.  A critical section is required as\n         * the value can be accessed from an interrupt. */\n        taskENTER_CRITICAL();\n        {\n            xReturn = pxTCB->pxTaskTag;\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_xTaskGetApplicationTaskTag( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_APPLICATION_TASK_TAG */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_APPLICATION_TASK_TAG == 1 )\n\n    TaskHookFunction_t xTaskGetApplicationTaskTagFromISR( TaskHandle_t xTask )\n    {\n        TCB_t * pxTCB;\n        TaskHookFunction_t xReturn;\n        UBaseType_t uxSavedInterruptStatus;\n\n        traceENTER_xTaskGetApplicationTaskTagFromISR( xTask );\n\n        /* If xTask is NULL then set the calling task's hook. */\n        pxTCB = prvGetTCBFromHandle( xTask );\n\n        /* Save the hook function in the TCB.  A critical section is required as\n         * the value can be accessed from an interrupt. */\n        /* MISRA Ref 4.7.1 [Return value shall be checked] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */\n        /* coverity[misra_c_2012_directive_4_7_violation] */\n        uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();\n        {\n            xReturn = pxTCB->pxTaskTag;\n        }\n        taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );\n\n        traceRETURN_xTaskGetApplicationTaskTagFromISR( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_APPLICATION_TASK_TAG */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_APPLICATION_TASK_TAG == 1 )\n\n    BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask,\n                                             void * pvParameter )\n    {\n        TCB_t * xTCB;\n        BaseType_t xReturn;\n\n        traceENTER_xTaskCallApplicationTaskHook( xTask, pvParameter );\n\n        /* If xTask is NULL then we are calling our own task hook. */\n        if( xTask == NULL )\n        {\n            xTCB = pxCurrentTCB;\n        }\n        else\n        {\n            xTCB = xTask;\n        }\n\n        if( xTCB->pxTaskTag != NULL )\n        {\n            xReturn = xTCB->pxTaskTag( pvParameter );\n        }\n        else\n        {\n            xReturn = pdFAIL;\n        }\n\n        traceRETURN_xTaskCallApplicationTaskHook( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_APPLICATION_TASK_TAG */\n/*-----------------------------------------------------------*/\n\n#if ( configNUMBER_OF_CORES == 1 )\n    void vTaskSwitchContext( void )\n    {\n        traceENTER_vTaskSwitchContext();\n\n        if( uxSchedulerSuspended != ( UBaseType_t ) 0U )\n        {\n            /* The scheduler is currently suspended - do not allow a context\n             * switch. */\n            xYieldPendings[ 0 ] = pdTRUE;\n        }\n        else\n        {\n            xYieldPendings[ 0 ] = pdFALSE;\n            traceTASK_SWITCHED_OUT();\n\n            #if ( configGENERATE_RUN_TIME_STATS == 1 )\n            {\n                #ifdef portALT_GET_RUN_TIME_COUNTER_VALUE\n                    portALT_GET_RUN_TIME_COUNTER_VALUE( ulTotalRunTime[ 0 ] );\n                #else\n                    ulTotalRunTime[ 0 ] = portGET_RUN_TIME_COUNTER_VALUE();\n                #endif\n\n                /* Add the amount of time the task has been running to the\n                 * accumulated time so far.  The time the task started running was\n                 * stored in ulTaskSwitchedInTime.  Note that there is no overflow\n                 * protection here so count values are only valid until the timer\n                 * overflows.  The guard against negative values is to protect\n                 * against suspect run time stat counter implementations - which\n                 * are provided by the application, not the kernel. */\n                if( ulTotalRunTime[ 0 ] > ulTaskSwitchedInTime[ 0 ] )\n                {\n                    pxCurrentTCB->ulRunTimeCounter += ( ulTotalRunTime[ 0 ] - ulTaskSwitchedInTime[ 0 ] );\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n\n                ulTaskSwitchedInTime[ 0 ] = ulTotalRunTime[ 0 ];\n            }\n            #endif /* configGENERATE_RUN_TIME_STATS */\n\n            /* Check for stack overflow, if configured. */\n            taskCHECK_FOR_STACK_OVERFLOW();\n\n            /* Before the currently running task is switched out, save its errno. */\n            #if ( configUSE_POSIX_ERRNO == 1 )\n            {\n                pxCurrentTCB->iTaskErrno = FreeRTOS_errno;\n            }\n            #endif\n\n            /* Select a new task to run using either the generic C or port\n             * optimised asm code. */\n            /* MISRA Ref 11.5.3 [Void pointer assignment] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n            /* coverity[misra_c_2012_rule_11_5_violation] */\n            taskSELECT_HIGHEST_PRIORITY_TASK();\n            traceTASK_SWITCHED_IN();\n\n            /* Macro to inject port specific behaviour immediately after\n             * switching tasks, such as setting an end of stack watchpoint\n             * or reconfiguring the MPU. */\n            portTASK_SWITCH_HOOK( pxCurrentTCB );\n\n            /* After the new task is switched in, update the global errno. */\n            #if ( configUSE_POSIX_ERRNO == 1 )\n            {\n                FreeRTOS_errno = pxCurrentTCB->iTaskErrno;\n            }\n            #endif\n\n            #if ( configUSE_C_RUNTIME_TLS_SUPPORT == 1 )\n            {\n                /* Switch C-Runtime's TLS Block to point to the TLS\n                 * Block specific to this task. */\n                configSET_TLS_BLOCK( pxCurrentTCB->xTLSBlock );\n            }\n            #endif\n        }\n\n        traceRETURN_vTaskSwitchContext();\n    }\n#else /* if ( configNUMBER_OF_CORES == 1 ) */\n    void vTaskSwitchContext( BaseType_t xCoreID )\n    {\n        traceENTER_vTaskSwitchContext();\n\n        /* Acquire both locks:\n         * - The ISR lock protects the ready list from simultaneous access by\n         *   both other ISRs and tasks.\n         * - We also take the task lock to pause here in case another core has\n         *   suspended the scheduler. We don't want to simply set xYieldPending\n         *   and move on if another core suspended the scheduler. We should only\n         *   do that if the current core has suspended the scheduler. */\n\n        portGET_TASK_LOCK(); /* Must always acquire the task lock first. */\n        portGET_ISR_LOCK();\n        {\n            /* vTaskSwitchContext() must never be called from within a critical section.\n             * This is not necessarily true for single core FreeRTOS, but it is for this\n             * SMP port. */\n            configASSERT( portGET_CRITICAL_NESTING_COUNT() == 0 );\n\n            if( uxSchedulerSuspended != ( UBaseType_t ) 0U )\n            {\n                /* The scheduler is currently suspended - do not allow a context\n                 * switch. */\n                xYieldPendings[ xCoreID ] = pdTRUE;\n            }\n            else\n            {\n                xYieldPendings[ xCoreID ] = pdFALSE;\n                traceTASK_SWITCHED_OUT();\n\n                #if ( configGENERATE_RUN_TIME_STATS == 1 )\n                {\n                    #ifdef portALT_GET_RUN_TIME_COUNTER_VALUE\n                        portALT_GET_RUN_TIME_COUNTER_VALUE( ulTotalRunTime[ xCoreID ] );\n                    #else\n                        ulTotalRunTime[ xCoreID ] = portGET_RUN_TIME_COUNTER_VALUE();\n                    #endif\n\n                    /* Add the amount of time the task has been running to the\n                     * accumulated time so far.  The time the task started running was\n                     * stored in ulTaskSwitchedInTime.  Note that there is no overflow\n                     * protection here so count values are only valid until the timer\n                     * overflows.  The guard against negative values is to protect\n                     * against suspect run time stat counter implementations - which\n                     * are provided by the application, not the kernel. */\n                    if( ulTotalRunTime[ xCoreID ] > ulTaskSwitchedInTime[ xCoreID ] )\n                    {\n                        pxCurrentTCBs[ xCoreID ]->ulRunTimeCounter += ( ulTotalRunTime[ xCoreID ] - ulTaskSwitchedInTime[ xCoreID ] );\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n\n                    ulTaskSwitchedInTime[ xCoreID ] = ulTotalRunTime[ xCoreID ];\n                }\n                #endif /* configGENERATE_RUN_TIME_STATS */\n\n                /* Check for stack overflow, if configured. */\n                taskCHECK_FOR_STACK_OVERFLOW();\n\n                /* Before the currently running task is switched out, save its errno. */\n                #if ( configUSE_POSIX_ERRNO == 1 )\n                {\n                    pxCurrentTCBs[ xCoreID ]->iTaskErrno = FreeRTOS_errno;\n                }\n                #endif\n\n                /* Select a new task to run. */\n                taskSELECT_HIGHEST_PRIORITY_TASK( xCoreID );\n                traceTASK_SWITCHED_IN();\n\n                /* Macro to inject port specific behaviour immediately after\n                 * switching tasks, such as setting an end of stack watchpoint\n                 * or reconfiguring the MPU. */\n                portTASK_SWITCH_HOOK( pxCurrentTCBs[ portGET_CORE_ID() ] );\n\n                /* After the new task is switched in, update the global errno. */\n                #if ( configUSE_POSIX_ERRNO == 1 )\n                {\n                    FreeRTOS_errno = pxCurrentTCBs[ xCoreID ]->iTaskErrno;\n                }\n                #endif\n\n                #if ( configUSE_C_RUNTIME_TLS_SUPPORT == 1 )\n                {\n                    /* Switch C-Runtime's TLS Block to point to the TLS\n                     * Block specific to this task. */\n                    configSET_TLS_BLOCK( pxCurrentTCBs[ xCoreID ]->xTLSBlock );\n                }\n                #endif\n            }\n        }\n        portRELEASE_ISR_LOCK();\n        portRELEASE_TASK_LOCK();\n\n        traceRETURN_vTaskSwitchContext();\n    }\n#endif /* if ( configNUMBER_OF_CORES > 1 ) */\n/*-----------------------------------------------------------*/\n\nvoid vTaskPlaceOnEventList( List_t * const pxEventList,\n                            const TickType_t xTicksToWait )\n{\n    traceENTER_vTaskPlaceOnEventList( pxEventList, xTicksToWait );\n\n    configASSERT( pxEventList );\n\n    /* THIS FUNCTION MUST BE CALLED WITH THE\n     * SCHEDULER SUSPENDED AND THE QUEUE BEING ACCESSED LOCKED. */\n\n    /* Place the event list item of the TCB in the appropriate event list.\n     * This is placed in the list in priority order so the highest priority task\n     * is the first to be woken by the event.\n     *\n     * Note: Lists are sorted in ascending order by ListItem_t.xItemValue.\n     * Normally, the xItemValue of a TCB's ListItem_t members is:\n     *      xItemValue = ( configMAX_PRIORITIES - uxPriority )\n     * Therefore, the event list is sorted in descending priority order.\n     *\n     * The queue that contains the event list is locked, preventing\n     * simultaneous access from interrupts. */\n    vListInsert( pxEventList, &( pxCurrentTCB->xEventListItem ) );\n\n    prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE );\n\n    traceRETURN_vTaskPlaceOnEventList();\n}\n/*-----------------------------------------------------------*/\n\nvoid vTaskPlaceOnUnorderedEventList( List_t * pxEventList,\n                                     const TickType_t xItemValue,\n                                     const TickType_t xTicksToWait )\n{\n    traceENTER_vTaskPlaceOnUnorderedEventList( pxEventList, xItemValue, xTicksToWait );\n\n    configASSERT( pxEventList );\n\n    /* THIS FUNCTION MUST BE CALLED WITH THE SCHEDULER SUSPENDED.  It is used by\n     * the event groups implementation. */\n    configASSERT( uxSchedulerSuspended != ( UBaseType_t ) 0U );\n\n    /* Store the item value in the event list item.  It is safe to access the\n     * event list item here as interrupts won't access the event list item of a\n     * task that is not in the Blocked state. */\n    listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xEventListItem ), xItemValue | taskEVENT_LIST_ITEM_VALUE_IN_USE );\n\n    /* Place the event list item of the TCB at the end of the appropriate event\n     * list.  It is safe to access the event list here because it is part of an\n     * event group implementation - and interrupts don't access event groups\n     * directly (instead they access them indirectly by pending function calls to\n     * the task level). */\n    listINSERT_END( pxEventList, &( pxCurrentTCB->xEventListItem ) );\n\n    prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE );\n\n    traceRETURN_vTaskPlaceOnUnorderedEventList();\n}\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TIMERS == 1 )\n\n    void vTaskPlaceOnEventListRestricted( List_t * const pxEventList,\n                                          TickType_t xTicksToWait,\n                                          const BaseType_t xWaitIndefinitely )\n    {\n        traceENTER_vTaskPlaceOnEventListRestricted( pxEventList, xTicksToWait, xWaitIndefinitely );\n\n        configASSERT( pxEventList );\n\n        /* This function should not be called by application code hence the\n         * 'Restricted' in its name.  It is not part of the public API.  It is\n         * designed for use by kernel code, and has special calling requirements -\n         * it should be called with the scheduler suspended. */\n\n\n        /* Place the event list item of the TCB in the appropriate event list.\n         * In this case it is assume that this is the only task that is going to\n         * be waiting on this event list, so the faster vListInsertEnd() function\n         * can be used in place of vListInsert. */\n        listINSERT_END( pxEventList, &( pxCurrentTCB->xEventListItem ) );\n\n        /* If the task should block indefinitely then set the block time to a\n         * value that will be recognised as an indefinite delay inside the\n         * prvAddCurrentTaskToDelayedList() function. */\n        if( xWaitIndefinitely != pdFALSE )\n        {\n            xTicksToWait = portMAX_DELAY;\n        }\n\n        traceTASK_DELAY_UNTIL( ( xTickCount + xTicksToWait ) );\n        prvAddCurrentTaskToDelayedList( xTicksToWait, xWaitIndefinitely );\n\n        traceRETURN_vTaskPlaceOnEventListRestricted();\n    }\n\n#endif /* configUSE_TIMERS */\n/*-----------------------------------------------------------*/\n\nBaseType_t xTaskRemoveFromEventList( const List_t * const pxEventList )\n{\n    TCB_t * pxUnblockedTCB;\n    BaseType_t xReturn;\n\n    traceENTER_xTaskRemoveFromEventList( pxEventList );\n\n    /* THIS FUNCTION MUST BE CALLED FROM A CRITICAL SECTION.  It can also be\n     * called from a critical section within an ISR. */\n\n    /* The event list is sorted in priority order, so the first in the list can\n     * be removed as it is known to be the highest priority.  Remove the TCB from\n     * the delayed list, and add it to the ready list.\n     *\n     * If an event is for a queue that is locked then this function will never\n     * get called - the lock count on the queue will get modified instead.  This\n     * means exclusive access to the event list is guaranteed here.\n     *\n     * This function assumes that a check has already been made to ensure that\n     * pxEventList is not empty. */\n    /* MISRA Ref 11.5.3 [Void pointer assignment] */\n    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n    /* coverity[misra_c_2012_rule_11_5_violation] */\n    pxUnblockedTCB = listGET_OWNER_OF_HEAD_ENTRY( pxEventList );\n    configASSERT( pxUnblockedTCB );\n    listREMOVE_ITEM( &( pxUnblockedTCB->xEventListItem ) );\n\n    if( uxSchedulerSuspended == ( UBaseType_t ) 0U )\n    {\n        listREMOVE_ITEM( &( pxUnblockedTCB->xStateListItem ) );\n        prvAddTaskToReadyList( pxUnblockedTCB );\n\n        #if ( configUSE_TICKLESS_IDLE != 0 )\n        {\n            /* If a task is blocked on a kernel object then xNextTaskUnblockTime\n             * might be set to the blocked task's time out time.  If the task is\n             * unblocked for a reason other than a timeout xNextTaskUnblockTime is\n             * normally left unchanged, because it is automatically reset to a new\n             * value when the tick count equals xNextTaskUnblockTime.  However if\n             * tickless idling is used it might be more important to enter sleep mode\n             * at the earliest possible time - so reset xNextTaskUnblockTime here to\n             * ensure it is updated at the earliest possible time. */\n            prvResetNextTaskUnblockTime();\n        }\n        #endif\n    }\n    else\n    {\n        /* The delayed and ready lists cannot be accessed, so hold this task\n         * pending until the scheduler is resumed. */\n        listINSERT_END( &( xPendingReadyList ), &( pxUnblockedTCB->xEventListItem ) );\n    }\n\n    #if ( configNUMBER_OF_CORES == 1 )\n    {\n        if( pxUnblockedTCB->uxPriority > pxCurrentTCB->uxPriority )\n        {\n            /* Return true if the task removed from the event list has a higher\n             * priority than the calling task.  This allows the calling task to know if\n             * it should force a context switch now. */\n            xReturn = pdTRUE;\n\n            /* Mark that a yield is pending in case the user is not using the\n             * \"xHigherPriorityTaskWoken\" parameter to an ISR safe FreeRTOS function. */\n            xYieldPendings[ 0 ] = pdTRUE;\n        }\n        else\n        {\n            xReturn = pdFALSE;\n        }\n    }\n    #else /* #if ( configNUMBER_OF_CORES == 1 ) */\n    {\n        xReturn = pdFALSE;\n\n        #if ( configUSE_PREEMPTION == 1 )\n        {\n            prvYieldForTask( pxUnblockedTCB );\n\n            if( xYieldPendings[ portGET_CORE_ID() ] != pdFALSE )\n            {\n                xReturn = pdTRUE;\n            }\n        }\n        #endif /* #if ( configUSE_PREEMPTION == 1 ) */\n    }\n    #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n\n    traceRETURN_xTaskRemoveFromEventList( xReturn );\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nvoid vTaskRemoveFromUnorderedEventList( ListItem_t * pxEventListItem,\n                                        const TickType_t xItemValue )\n{\n    TCB_t * pxUnblockedTCB;\n\n    traceENTER_vTaskRemoveFromUnorderedEventList( pxEventListItem, xItemValue );\n\n    /* THIS FUNCTION MUST BE CALLED WITH THE SCHEDULER SUSPENDED.  It is used by\n     * the event flags implementation. */\n    configASSERT( uxSchedulerSuspended != ( UBaseType_t ) 0U );\n\n    /* Store the new item value in the event list. */\n    listSET_LIST_ITEM_VALUE( pxEventListItem, xItemValue | taskEVENT_LIST_ITEM_VALUE_IN_USE );\n\n    /* Remove the event list form the event flag.  Interrupts do not access\n     * event flags. */\n    /* MISRA Ref 11.5.3 [Void pointer assignment] */\n    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n    /* coverity[misra_c_2012_rule_11_5_violation] */\n    pxUnblockedTCB = listGET_LIST_ITEM_OWNER( pxEventListItem );\n    configASSERT( pxUnblockedTCB );\n    listREMOVE_ITEM( pxEventListItem );\n\n    #if ( configUSE_TICKLESS_IDLE != 0 )\n    {\n        /* If a task is blocked on a kernel object then xNextTaskUnblockTime\n         * might be set to the blocked task's time out time.  If the task is\n         * unblocked for a reason other than a timeout xNextTaskUnblockTime is\n         * normally left unchanged, because it is automatically reset to a new\n         * value when the tick count equals xNextTaskUnblockTime.  However if\n         * tickless idling is used it might be more important to enter sleep mode\n         * at the earliest possible time - so reset xNextTaskUnblockTime here to\n         * ensure it is updated at the earliest possible time. */\n        prvResetNextTaskUnblockTime();\n    }\n    #endif\n\n    /* Remove the task from the delayed list and add it to the ready list.  The\n     * scheduler is suspended so interrupts will not be accessing the ready\n     * lists. */\n    listREMOVE_ITEM( &( pxUnblockedTCB->xStateListItem ) );\n    prvAddTaskToReadyList( pxUnblockedTCB );\n\n    #if ( configNUMBER_OF_CORES == 1 )\n    {\n        if( pxUnblockedTCB->uxPriority > pxCurrentTCB->uxPriority )\n        {\n            /* The unblocked task has a priority above that of the calling task, so\n             * a context switch is required.  This function is called with the\n             * scheduler suspended so xYieldPending is set so the context switch\n             * occurs immediately that the scheduler is resumed (unsuspended). */\n            xYieldPendings[ 0 ] = pdTRUE;\n        }\n    }\n    #else /* #if ( configNUMBER_OF_CORES == 1 ) */\n    {\n        #if ( configUSE_PREEMPTION == 1 )\n        {\n            taskENTER_CRITICAL();\n            {\n                prvYieldForTask( pxUnblockedTCB );\n            }\n            taskEXIT_CRITICAL();\n        }\n        #endif\n    }\n    #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n\n    traceRETURN_vTaskRemoveFromUnorderedEventList();\n}\n/*-----------------------------------------------------------*/\n\nvoid vTaskSetTimeOutState( TimeOut_t * const pxTimeOut )\n{\n    traceENTER_vTaskSetTimeOutState( pxTimeOut );\n\n    configASSERT( pxTimeOut );\n    taskENTER_CRITICAL();\n    {\n        pxTimeOut->xOverflowCount = xNumOfOverflows;\n        pxTimeOut->xTimeOnEntering = xTickCount;\n    }\n    taskEXIT_CRITICAL();\n\n    traceRETURN_vTaskSetTimeOutState();\n}\n/*-----------------------------------------------------------*/\n\nvoid vTaskInternalSetTimeOutState( TimeOut_t * const pxTimeOut )\n{\n    traceENTER_vTaskInternalSetTimeOutState( pxTimeOut );\n\n    /* For internal use only as it does not use a critical section. */\n    pxTimeOut->xOverflowCount = xNumOfOverflows;\n    pxTimeOut->xTimeOnEntering = xTickCount;\n\n    traceRETURN_vTaskInternalSetTimeOutState();\n}\n/*-----------------------------------------------------------*/\n\nBaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut,\n                                 TickType_t * const pxTicksToWait )\n{\n    BaseType_t xReturn;\n\n    traceENTER_xTaskCheckForTimeOut( pxTimeOut, pxTicksToWait );\n\n    configASSERT( pxTimeOut );\n    configASSERT( pxTicksToWait );\n\n    taskENTER_CRITICAL();\n    {\n        /* Minor optimisation.  The tick count cannot change in this block. */\n        const TickType_t xConstTickCount = xTickCount;\n        const TickType_t xElapsedTime = xConstTickCount - pxTimeOut->xTimeOnEntering;\n\n        #if ( INCLUDE_xTaskAbortDelay == 1 )\n            if( pxCurrentTCB->ucDelayAborted != ( uint8_t ) pdFALSE )\n            {\n                /* The delay was aborted, which is not the same as a time out,\n                 * but has the same result. */\n                pxCurrentTCB->ucDelayAborted = ( uint8_t ) pdFALSE;\n                xReturn = pdTRUE;\n            }\n            else\n        #endif\n\n        #if ( INCLUDE_vTaskSuspend == 1 )\n            if( *pxTicksToWait == portMAX_DELAY )\n            {\n                /* If INCLUDE_vTaskSuspend is set to 1 and the block time\n                 * specified is the maximum block time then the task should block\n                 * indefinitely, and therefore never time out. */\n                xReturn = pdFALSE;\n            }\n            else\n        #endif\n\n        if( ( xNumOfOverflows != pxTimeOut->xOverflowCount ) && ( xConstTickCount >= pxTimeOut->xTimeOnEntering ) )\n        {\n            /* The tick count is greater than the time at which\n             * vTaskSetTimeout() was called, but has also overflowed since\n             * vTaskSetTimeOut() was called.  It must have wrapped all the way\n             * around and gone past again. This passed since vTaskSetTimeout()\n             * was called. */\n            xReturn = pdTRUE;\n            *pxTicksToWait = ( TickType_t ) 0;\n        }\n        else if( xElapsedTime < *pxTicksToWait )\n        {\n            /* Not a genuine timeout. Adjust parameters for time remaining. */\n            *pxTicksToWait -= xElapsedTime;\n            vTaskInternalSetTimeOutState( pxTimeOut );\n            xReturn = pdFALSE;\n        }\n        else\n        {\n            *pxTicksToWait = ( TickType_t ) 0;\n            xReturn = pdTRUE;\n        }\n    }\n    taskEXIT_CRITICAL();\n\n    traceRETURN_xTaskCheckForTimeOut( xReturn );\n\n    return xReturn;\n}\n/*-----------------------------------------------------------*/\n\nvoid vTaskMissedYield( void )\n{\n    traceENTER_vTaskMissedYield();\n\n    /* Must be called from within a critical section. */\n    xYieldPendings[ portGET_CORE_ID() ] = pdTRUE;\n\n    traceRETURN_vTaskMissedYield();\n}\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TRACE_FACILITY == 1 )\n\n    UBaseType_t uxTaskGetTaskNumber( TaskHandle_t xTask )\n    {\n        UBaseType_t uxReturn;\n        TCB_t const * pxTCB;\n\n        traceENTER_uxTaskGetTaskNumber( xTask );\n\n        if( xTask != NULL )\n        {\n            pxTCB = xTask;\n            uxReturn = pxTCB->uxTaskNumber;\n        }\n        else\n        {\n            uxReturn = 0U;\n        }\n\n        traceRETURN_uxTaskGetTaskNumber( uxReturn );\n\n        return uxReturn;\n    }\n\n#endif /* configUSE_TRACE_FACILITY */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TRACE_FACILITY == 1 )\n\n    void vTaskSetTaskNumber( TaskHandle_t xTask,\n                             const UBaseType_t uxHandle )\n    {\n        TCB_t * pxTCB;\n\n        traceENTER_vTaskSetTaskNumber( xTask, uxHandle );\n\n        if( xTask != NULL )\n        {\n            pxTCB = xTask;\n            pxTCB->uxTaskNumber = uxHandle;\n        }\n\n        traceRETURN_vTaskSetTaskNumber();\n    }\n\n#endif /* configUSE_TRACE_FACILITY */\n/*-----------------------------------------------------------*/\n\n/*\n * -----------------------------------------------------------\n * The passive idle task.\n * ----------------------------------------------------------\n *\n * The passive idle task is used for all the additional cores in a SMP\n * system. There must be only 1 active idle task and the rest are passive\n * idle tasks.\n *\n * The portTASK_FUNCTION() macro is used to allow port/compiler specific\n * language extensions.  The equivalent prototype for this function is:\n *\n * void prvPassiveIdleTask( void *pvParameters );\n */\n\n#if ( configNUMBER_OF_CORES > 1 )\n    static portTASK_FUNCTION( prvPassiveIdleTask, pvParameters )\n    {\n        ( void ) pvParameters;\n\n        taskYIELD();\n\n        for( ; configCONTROL_INFINITE_LOOP(); )\n        {\n            #if ( configUSE_PREEMPTION == 0 )\n            {\n                /* If we are not using preemption we keep forcing a task switch to\n                 * see if any other task has become available.  If we are using\n                 * preemption we don't need to do this as any task becoming available\n                 * will automatically get the processor anyway. */\n                taskYIELD();\n            }\n            #endif /* configUSE_PREEMPTION */\n\n            #if ( ( configUSE_PREEMPTION == 1 ) && ( configIDLE_SHOULD_YIELD == 1 ) )\n            {\n                /* When using preemption tasks of equal priority will be\n                 * timesliced.  If a task that is sharing the idle priority is ready\n                 * to run then the idle task should yield before the end of the\n                 * timeslice.\n                 *\n                 * A critical region is not required here as we are just reading from\n                 * the list, and an occasional incorrect value will not matter.  If\n                 * the ready list at the idle priority contains one more task than the\n                 * number of idle tasks, which is equal to the configured numbers of cores\n                 * then a task other than the idle task is ready to execute. */\n                if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) configNUMBER_OF_CORES )\n                {\n                    taskYIELD();\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            #endif /* ( ( configUSE_PREEMPTION == 1 ) && ( configIDLE_SHOULD_YIELD == 1 ) ) */\n\n            #if ( configUSE_PASSIVE_IDLE_HOOK == 1 )\n            {\n                /* Call the user defined function from within the idle task.  This\n                 * allows the application designer to add background functionality\n                 * without the overhead of a separate task.\n                 *\n                 * This hook is intended to manage core activity such as disabling cores that go idle.\n                 *\n                 * NOTE: vApplicationPassiveIdleHook() MUST NOT, UNDER ANY CIRCUMSTANCES,\n                 * CALL A FUNCTION THAT MIGHT BLOCK. */\n                vApplicationPassiveIdleHook();\n            }\n            #endif /* configUSE_PASSIVE_IDLE_HOOK */\n        }\n    }\n#endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n\n/*\n * -----------------------------------------------------------\n * The idle task.\n * ----------------------------------------------------------\n *\n * The portTASK_FUNCTION() macro is used to allow port/compiler specific\n * language extensions.  The equivalent prototype for this function is:\n *\n * void prvIdleTask( void *pvParameters );\n *\n */\n\nstatic portTASK_FUNCTION( prvIdleTask, pvParameters )\n{\n    /* Stop warnings. */\n    ( void ) pvParameters;\n\n    /** THIS IS THE RTOS IDLE TASK - WHICH IS CREATED AUTOMATICALLY WHEN THE\n     * SCHEDULER IS STARTED. **/\n\n    /* In case a task that has a secure context deletes itself, in which case\n     * the idle task is responsible for deleting the task's secure context, if\n     * any. */\n    portALLOCATE_SECURE_CONTEXT( configMINIMAL_SECURE_STACK_SIZE );\n\n    #if ( configNUMBER_OF_CORES > 1 )\n    {\n        /* SMP all cores start up in the idle task. This initial yield gets the application\n         * tasks started. */\n        taskYIELD();\n    }\n    #endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n\n    for( ; configCONTROL_INFINITE_LOOP(); )\n    {\n        /* See if any tasks have deleted themselves - if so then the idle task\n         * is responsible for freeing the deleted task's TCB and stack. */\n        prvCheckTasksWaitingTermination();\n\n        #if ( configUSE_PREEMPTION == 0 )\n        {\n            /* If we are not using preemption we keep forcing a task switch to\n             * see if any other task has become available.  If we are using\n             * preemption we don't need to do this as any task becoming available\n             * will automatically get the processor anyway. */\n            taskYIELD();\n        }\n        #endif /* configUSE_PREEMPTION */\n\n        #if ( ( configUSE_PREEMPTION == 1 ) && ( configIDLE_SHOULD_YIELD == 1 ) )\n        {\n            /* When using preemption tasks of equal priority will be\n             * timesliced.  If a task that is sharing the idle priority is ready\n             * to run then the idle task should yield before the end of the\n             * timeslice.\n             *\n             * A critical region is not required here as we are just reading from\n             * the list, and an occasional incorrect value will not matter.  If\n             * the ready list at the idle priority contains one more task than the\n             * number of idle tasks, which is equal to the configured numbers of cores\n             * then a task other than the idle task is ready to execute. */\n            if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) configNUMBER_OF_CORES )\n            {\n                taskYIELD();\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        #endif /* ( ( configUSE_PREEMPTION == 1 ) && ( configIDLE_SHOULD_YIELD == 1 ) ) */\n\n        #if ( configUSE_IDLE_HOOK == 1 )\n        {\n            /* Call the user defined function from within the idle task. */\n            vApplicationIdleHook();\n        }\n        #endif /* configUSE_IDLE_HOOK */\n\n        /* This conditional compilation should use inequality to 0, not equality\n         * to 1.  This is to ensure portSUPPRESS_TICKS_AND_SLEEP() is called when\n         * user defined low power mode  implementations require\n         * configUSE_TICKLESS_IDLE to be set to a value other than 1. */\n        #if ( configUSE_TICKLESS_IDLE != 0 )\n        {\n            TickType_t xExpectedIdleTime;\n\n            /* It is not desirable to suspend then resume the scheduler on\n             * each iteration of the idle task.  Therefore, a preliminary\n             * test of the expected idle time is performed without the\n             * scheduler suspended.  The result here is not necessarily\n             * valid. */\n            xExpectedIdleTime = prvGetExpectedIdleTime();\n\n            if( xExpectedIdleTime >= ( TickType_t ) configEXPECTED_IDLE_TIME_BEFORE_SLEEP )\n            {\n                vTaskSuspendAll();\n                {\n                    /* Now the scheduler is suspended, the expected idle\n                     * time can be sampled again, and this time its value can\n                     * be used. */\n                    configASSERT( xNextTaskUnblockTime >= xTickCount );\n                    xExpectedIdleTime = prvGetExpectedIdleTime();\n\n                    /* Define the following macro to set xExpectedIdleTime to 0\n                     * if the application does not want\n                     * portSUPPRESS_TICKS_AND_SLEEP() to be called. */\n                    configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING( xExpectedIdleTime );\n\n                    if( xExpectedIdleTime >= ( TickType_t ) configEXPECTED_IDLE_TIME_BEFORE_SLEEP )\n                    {\n                        traceLOW_POWER_IDLE_BEGIN();\n                        portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime );\n                        traceLOW_POWER_IDLE_END();\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                ( void ) xTaskResumeAll();\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        #endif /* configUSE_TICKLESS_IDLE */\n\n        #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_PASSIVE_IDLE_HOOK == 1 ) )\n        {\n            /* Call the user defined function from within the idle task.  This\n             * allows the application designer to add background functionality\n             * without the overhead of a separate task.\n             *\n             * This hook is intended to manage core activity such as disabling cores that go idle.\n             *\n             * NOTE: vApplicationPassiveIdleHook() MUST NOT, UNDER ANY CIRCUMSTANCES,\n             * CALL A FUNCTION THAT MIGHT BLOCK. */\n            vApplicationPassiveIdleHook();\n        }\n        #endif /* #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_PASSIVE_IDLE_HOOK == 1 ) ) */\n    }\n}\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TICKLESS_IDLE != 0 )\n\n    eSleepModeStatus eTaskConfirmSleepModeStatus( void )\n    {\n        #if ( INCLUDE_vTaskSuspend == 1 )\n            /* The idle task exists in addition to the application tasks. */\n            const UBaseType_t uxNonApplicationTasks = configNUMBER_OF_CORES;\n        #endif /* INCLUDE_vTaskSuspend */\n\n        eSleepModeStatus eReturn = eStandardSleep;\n\n        traceENTER_eTaskConfirmSleepModeStatus();\n\n        /* This function must be called from a critical section. */\n\n        if( listCURRENT_LIST_LENGTH( &xPendingReadyList ) != 0U )\n        {\n            /* A task was made ready while the scheduler was suspended. */\n            eReturn = eAbortSleep;\n        }\n        else if( xYieldPendings[ portGET_CORE_ID() ] != pdFALSE )\n        {\n            /* A yield was pended while the scheduler was suspended. */\n            eReturn = eAbortSleep;\n        }\n        else if( xPendedTicks != 0U )\n        {\n            /* A tick interrupt has already occurred but was held pending\n             * because the scheduler is suspended. */\n            eReturn = eAbortSleep;\n        }\n\n        #if ( INCLUDE_vTaskSuspend == 1 )\n            else if( listCURRENT_LIST_LENGTH( &xSuspendedTaskList ) == ( uxCurrentNumberOfTasks - uxNonApplicationTasks ) )\n            {\n                /* If all the tasks are in the suspended list (which might mean they\n                 * have an infinite block time rather than actually being suspended)\n                 * then it is safe to turn all clocks off and just wait for external\n                 * interrupts. */\n                eReturn = eNoTasksWaitingTimeout;\n            }\n        #endif /* INCLUDE_vTaskSuspend */\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_eTaskConfirmSleepModeStatus( eReturn );\n\n        return eReturn;\n    }\n\n#endif /* configUSE_TICKLESS_IDLE */\n/*-----------------------------------------------------------*/\n\n#if ( configNUM_THREAD_LOCAL_STORAGE_POINTERS != 0 )\n\n    void vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet,\n                                            BaseType_t xIndex,\n                                            void * pvValue )\n    {\n        TCB_t * pxTCB;\n\n        traceENTER_vTaskSetThreadLocalStoragePointer( xTaskToSet, xIndex, pvValue );\n\n        if( ( xIndex >= 0 ) &&\n            ( xIndex < ( BaseType_t ) configNUM_THREAD_LOCAL_STORAGE_POINTERS ) )\n        {\n            pxTCB = prvGetTCBFromHandle( xTaskToSet );\n            configASSERT( pxTCB != NULL );\n            pxTCB->pvThreadLocalStoragePointers[ xIndex ] = pvValue;\n        }\n\n        traceRETURN_vTaskSetThreadLocalStoragePointer();\n    }\n\n#endif /* configNUM_THREAD_LOCAL_STORAGE_POINTERS */\n/*-----------------------------------------------------------*/\n\n#if ( configNUM_THREAD_LOCAL_STORAGE_POINTERS != 0 )\n\n    void * pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery,\n                                               BaseType_t xIndex )\n    {\n        void * pvReturn = NULL;\n        TCB_t * pxTCB;\n\n        traceENTER_pvTaskGetThreadLocalStoragePointer( xTaskToQuery, xIndex );\n\n        if( ( xIndex >= 0 ) &&\n            ( xIndex < ( BaseType_t ) configNUM_THREAD_LOCAL_STORAGE_POINTERS ) )\n        {\n            pxTCB = prvGetTCBFromHandle( xTaskToQuery );\n            pvReturn = pxTCB->pvThreadLocalStoragePointers[ xIndex ];\n        }\n        else\n        {\n            pvReturn = NULL;\n        }\n\n        traceRETURN_pvTaskGetThreadLocalStoragePointer( pvReturn );\n\n        return pvReturn;\n    }\n\n#endif /* configNUM_THREAD_LOCAL_STORAGE_POINTERS */\n/*-----------------------------------------------------------*/\n\n#if ( portUSING_MPU_WRAPPERS == 1 )\n\n    void vTaskAllocateMPURegions( TaskHandle_t xTaskToModify,\n                                  const MemoryRegion_t * const pxRegions )\n    {\n        TCB_t * pxTCB;\n\n        traceENTER_vTaskAllocateMPURegions( xTaskToModify, pxRegions );\n\n        /* If null is passed in here then we are modifying the MPU settings of\n         * the calling task. */\n        pxTCB = prvGetTCBFromHandle( xTaskToModify );\n\n        vPortStoreTaskMPUSettings( &( pxTCB->xMPUSettings ), pxRegions, NULL, 0 );\n\n        traceRETURN_vTaskAllocateMPURegions();\n    }\n\n#endif /* portUSING_MPU_WRAPPERS */\n/*-----------------------------------------------------------*/\n\nstatic void prvInitialiseTaskLists( void )\n{\n    UBaseType_t uxPriority;\n\n    for( uxPriority = ( UBaseType_t ) 0U; uxPriority < ( UBaseType_t ) configMAX_PRIORITIES; uxPriority++ )\n    {\n        vListInitialise( &( pxReadyTasksLists[ uxPriority ] ) );\n    }\n\n    vListInitialise( &xDelayedTaskList1 );\n    vListInitialise( &xDelayedTaskList2 );\n    vListInitialise( &xPendingReadyList );\n\n    #if ( INCLUDE_vTaskDelete == 1 )\n    {\n        vListInitialise( &xTasksWaitingTermination );\n    }\n    #endif /* INCLUDE_vTaskDelete */\n\n    #if ( INCLUDE_vTaskSuspend == 1 )\n    {\n        vListInitialise( &xSuspendedTaskList );\n    }\n    #endif /* INCLUDE_vTaskSuspend */\n\n    /* Start with pxDelayedTaskList using list1 and the pxOverflowDelayedTaskList\n     * using list2. */\n    pxDelayedTaskList = &xDelayedTaskList1;\n    pxOverflowDelayedTaskList = &xDelayedTaskList2;\n}\n/*-----------------------------------------------------------*/\n\nstatic void prvCheckTasksWaitingTermination( void )\n{\n    /** THIS FUNCTION IS CALLED FROM THE RTOS IDLE TASK **/\n\n    #if ( INCLUDE_vTaskDelete == 1 )\n    {\n        TCB_t * pxTCB;\n\n        /* uxDeletedTasksWaitingCleanUp is used to prevent taskENTER_CRITICAL()\n         * being called too often in the idle task. */\n        while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )\n        {\n            #if ( configNUMBER_OF_CORES == 1 )\n            {\n                taskENTER_CRITICAL();\n                {\n                    {\n                        /* MISRA Ref 11.5.3 [Void pointer assignment] */\n                        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n                        /* coverity[misra_c_2012_rule_11_5_violation] */\n                        pxTCB = listGET_OWNER_OF_HEAD_ENTRY( ( &xTasksWaitingTermination ) );\n                        ( void ) uxListRemove( &( pxTCB->xStateListItem ) );\n                        --uxCurrentNumberOfTasks;\n                        --uxDeletedTasksWaitingCleanUp;\n                    }\n                }\n                taskEXIT_CRITICAL();\n\n                prvDeleteTCB( pxTCB );\n            }\n            #else /* #if( configNUMBER_OF_CORES == 1 ) */\n            {\n                pxTCB = NULL;\n\n                taskENTER_CRITICAL();\n                {\n                    /* For SMP, multiple idles can be running simultaneously\n                     * and we need to check that other idles did not cleanup while we were\n                     * waiting to enter the critical section. */\n                    if( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )\n                    {\n                        /* MISRA Ref 11.5.3 [Void pointer assignment] */\n                        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n                        /* coverity[misra_c_2012_rule_11_5_violation] */\n                        pxTCB = listGET_OWNER_OF_HEAD_ENTRY( ( &xTasksWaitingTermination ) );\n\n                        if( pxTCB->xTaskRunState == taskTASK_NOT_RUNNING )\n                        {\n                            ( void ) uxListRemove( &( pxTCB->xStateListItem ) );\n                            --uxCurrentNumberOfTasks;\n                            --uxDeletedTasksWaitingCleanUp;\n                        }\n                        else\n                        {\n                            /* The TCB to be deleted still has not yet been switched out\n                             * by the scheduler, so we will just exit this loop early and\n                             * try again next time. */\n                            taskEXIT_CRITICAL();\n                            break;\n                        }\n                    }\n                }\n                taskEXIT_CRITICAL();\n\n                if( pxTCB != NULL )\n                {\n                    prvDeleteTCB( pxTCB );\n                }\n            }\n            #endif /* #if( configNUMBER_OF_CORES == 1 ) */\n        }\n    }\n    #endif /* INCLUDE_vTaskDelete */\n}\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TRACE_FACILITY == 1 )\n\n    void vTaskGetInfo( TaskHandle_t xTask,\n                       TaskStatus_t * pxTaskStatus,\n                       BaseType_t xGetFreeStackSpace,\n                       eTaskState eState )\n    {\n        TCB_t * pxTCB;\n\n        traceENTER_vTaskGetInfo( xTask, pxTaskStatus, xGetFreeStackSpace, eState );\n\n        /* xTask is NULL then get the state of the calling task. */\n        pxTCB = prvGetTCBFromHandle( xTask );\n\n        pxTaskStatus->xHandle = pxTCB;\n        pxTaskStatus->pcTaskName = ( const char * ) &( pxTCB->pcTaskName[ 0 ] );\n        pxTaskStatus->uxCurrentPriority = pxTCB->uxPriority;\n        pxTaskStatus->pxStackBase = pxTCB->pxStack;\n        #if ( ( portSTACK_GROWTH > 0 ) || ( configRECORD_STACK_HIGH_ADDRESS == 1 ) )\n            pxTaskStatus->pxTopOfStack = ( StackType_t * ) pxTCB->pxTopOfStack;\n            pxTaskStatus->pxEndOfStack = pxTCB->pxEndOfStack;\n        #endif\n        pxTaskStatus->xTaskNumber = pxTCB->uxTCBNumber;\n\n        #if ( ( configUSE_CORE_AFFINITY == 1 ) && ( configNUMBER_OF_CORES > 1 ) )\n        {\n            pxTaskStatus->uxCoreAffinityMask = pxTCB->uxCoreAffinityMask;\n        }\n        #endif\n\n        #if ( configUSE_MUTEXES == 1 )\n        {\n            pxTaskStatus->uxBasePriority = pxTCB->uxBasePriority;\n        }\n        #else\n        {\n            pxTaskStatus->uxBasePriority = 0;\n        }\n        #endif\n\n        #if ( configGENERATE_RUN_TIME_STATS == 1 )\n        {\n            pxTaskStatus->ulRunTimeCounter = pxTCB->ulRunTimeCounter;\n        }\n        #else\n        {\n            pxTaskStatus->ulRunTimeCounter = ( configRUN_TIME_COUNTER_TYPE ) 0;\n        }\n        #endif\n\n        /* Obtaining the task state is a little fiddly, so is only done if the\n         * value of eState passed into this function is eInvalid - otherwise the\n         * state is just set to whatever is passed in. */\n        if( eState != eInvalid )\n        {\n            if( taskTASK_IS_RUNNING( pxTCB ) == pdTRUE )\n            {\n                pxTaskStatus->eCurrentState = eRunning;\n            }\n            else\n            {\n                pxTaskStatus->eCurrentState = eState;\n\n                #if ( INCLUDE_vTaskSuspend == 1 )\n                {\n                    /* If the task is in the suspended list then there is a\n                     *  chance it is actually just blocked indefinitely - so really\n                     *  it should be reported as being in the Blocked state. */\n                    if( eState == eSuspended )\n                    {\n                        vTaskSuspendAll();\n                        {\n                            if( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) != NULL )\n                            {\n                                pxTaskStatus->eCurrentState = eBlocked;\n                            }\n                            else\n                            {\n                                #if ( configUSE_TASK_NOTIFICATIONS == 1 )\n                                {\n                                    BaseType_t x;\n\n                                    /* The task does not appear on the event list item of\n                                     * and of the RTOS objects, but could still be in the\n                                     * blocked state if it is waiting on its notification\n                                     * rather than waiting on an object.  If not, is\n                                     * suspended. */\n                                    for( x = ( BaseType_t ) 0; x < ( BaseType_t ) configTASK_NOTIFICATION_ARRAY_ENTRIES; x++ )\n                                    {\n                                        if( pxTCB->ucNotifyState[ x ] == taskWAITING_NOTIFICATION )\n                                        {\n                                            pxTaskStatus->eCurrentState = eBlocked;\n                                            break;\n                                        }\n                                    }\n                                }\n                                #endif /* if ( configUSE_TASK_NOTIFICATIONS == 1 ) */\n                            }\n                        }\n                        ( void ) xTaskResumeAll();\n                    }\n                }\n                #endif /* INCLUDE_vTaskSuspend */\n\n                /* Tasks can be in pending ready list and other state list at the\n                 * same time. These tasks are in ready state no matter what state\n                 * list the task is in. */\n                taskENTER_CRITICAL();\n                {\n                    if( listIS_CONTAINED_WITHIN( &xPendingReadyList, &( pxTCB->xEventListItem ) ) != pdFALSE )\n                    {\n                        pxTaskStatus->eCurrentState = eReady;\n                    }\n                }\n                taskEXIT_CRITICAL();\n            }\n        }\n        else\n        {\n            pxTaskStatus->eCurrentState = eTaskGetState( pxTCB );\n        }\n\n        /* Obtaining the stack space takes some time, so the xGetFreeStackSpace\n         * parameter is provided to allow it to be skipped. */\n        if( xGetFreeStackSpace != pdFALSE )\n        {\n            #if ( portSTACK_GROWTH > 0 )\n            {\n                pxTaskStatus->usStackHighWaterMark = prvTaskCheckFreeStackSpace( ( uint8_t * ) pxTCB->pxEndOfStack );\n            }\n            #else\n            {\n                pxTaskStatus->usStackHighWaterMark = prvTaskCheckFreeStackSpace( ( uint8_t * ) pxTCB->pxStack );\n            }\n            #endif\n        }\n        else\n        {\n            pxTaskStatus->usStackHighWaterMark = 0;\n        }\n\n        traceRETURN_vTaskGetInfo();\n    }\n\n#endif /* configUSE_TRACE_FACILITY */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TRACE_FACILITY == 1 )\n\n    static UBaseType_t prvListTasksWithinSingleList( TaskStatus_t * pxTaskStatusArray,\n                                                     List_t * pxList,\n                                                     eTaskState eState )\n    {\n        UBaseType_t uxTask = 0;\n        const ListItem_t * pxEndMarker = listGET_END_MARKER( pxList );\n        ListItem_t * pxIterator;\n        TCB_t * pxTCB = NULL;\n\n        if( listCURRENT_LIST_LENGTH( pxList ) > ( UBaseType_t ) 0 )\n        {\n            /* Populate an TaskStatus_t structure within the\n             * pxTaskStatusArray array for each task that is referenced from\n             * pxList.  See the definition of TaskStatus_t in task.h for the\n             * meaning of each TaskStatus_t structure member. */\n            for( pxIterator = listGET_HEAD_ENTRY( pxList ); pxIterator != pxEndMarker; pxIterator = listGET_NEXT( pxIterator ) )\n            {\n                /* MISRA Ref 11.5.3 [Void pointer assignment] */\n                /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n                /* coverity[misra_c_2012_rule_11_5_violation] */\n                pxTCB = listGET_LIST_ITEM_OWNER( pxIterator );\n\n                vTaskGetInfo( ( TaskHandle_t ) pxTCB, &( pxTaskStatusArray[ uxTask ] ), pdTRUE, eState );\n                uxTask++;\n            }\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        return uxTask;\n    }\n\n#endif /* configUSE_TRACE_FACILITY */\n/*-----------------------------------------------------------*/\n\n#if ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark2 == 1 ) )\n\n    static configSTACK_DEPTH_TYPE prvTaskCheckFreeStackSpace( const uint8_t * pucStackByte )\n    {\n        configSTACK_DEPTH_TYPE uxCount = 0U;\n\n        while( *pucStackByte == ( uint8_t ) tskSTACK_FILL_BYTE )\n        {\n            pucStackByte -= portSTACK_GROWTH;\n            uxCount++;\n        }\n\n        uxCount /= ( configSTACK_DEPTH_TYPE ) sizeof( StackType_t );\n\n        return uxCount;\n    }\n\n#endif /* ( ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark == 1 ) || ( INCLUDE_uxTaskGetStackHighWaterMark2 == 1 ) ) */\n/*-----------------------------------------------------------*/\n\n#if ( INCLUDE_uxTaskGetStackHighWaterMark2 == 1 )\n\n/* uxTaskGetStackHighWaterMark() and uxTaskGetStackHighWaterMark2() are the\n * same except for their return type.  Using configSTACK_DEPTH_TYPE allows the\n * user to determine the return type.  It gets around the problem of the value\n * overflowing on 8-bit types without breaking backward compatibility for\n * applications that expect an 8-bit return type. */\n    configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask )\n    {\n        TCB_t * pxTCB;\n        uint8_t * pucEndOfStack;\n        configSTACK_DEPTH_TYPE uxReturn;\n\n        traceENTER_uxTaskGetStackHighWaterMark2( xTask );\n\n        /* uxTaskGetStackHighWaterMark() and uxTaskGetStackHighWaterMark2() are\n         * the same except for their return type.  Using configSTACK_DEPTH_TYPE\n         * allows the user to determine the return type.  It gets around the\n         * problem of the value overflowing on 8-bit types without breaking\n         * backward compatibility for applications that expect an 8-bit return\n         * type. */\n\n        pxTCB = prvGetTCBFromHandle( xTask );\n\n        #if portSTACK_GROWTH < 0\n        {\n            pucEndOfStack = ( uint8_t * ) pxTCB->pxStack;\n        }\n        #else\n        {\n            pucEndOfStack = ( uint8_t * ) pxTCB->pxEndOfStack;\n        }\n        #endif\n\n        uxReturn = prvTaskCheckFreeStackSpace( pucEndOfStack );\n\n        traceRETURN_uxTaskGetStackHighWaterMark2( uxReturn );\n\n        return uxReturn;\n    }\n\n#endif /* INCLUDE_uxTaskGetStackHighWaterMark2 */\n/*-----------------------------------------------------------*/\n\n#if ( INCLUDE_uxTaskGetStackHighWaterMark == 1 )\n\n    UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask )\n    {\n        TCB_t * pxTCB;\n        uint8_t * pucEndOfStack;\n        UBaseType_t uxReturn;\n\n        traceENTER_uxTaskGetStackHighWaterMark( xTask );\n\n        pxTCB = prvGetTCBFromHandle( xTask );\n\n        #if portSTACK_GROWTH < 0\n        {\n            pucEndOfStack = ( uint8_t * ) pxTCB->pxStack;\n        }\n        #else\n        {\n            pucEndOfStack = ( uint8_t * ) pxTCB->pxEndOfStack;\n        }\n        #endif\n\n        uxReturn = ( UBaseType_t ) prvTaskCheckFreeStackSpace( pucEndOfStack );\n\n        traceRETURN_uxTaskGetStackHighWaterMark( uxReturn );\n\n        return uxReturn;\n    }\n\n#endif /* INCLUDE_uxTaskGetStackHighWaterMark */\n/*-----------------------------------------------------------*/\n\n#if ( INCLUDE_vTaskDelete == 1 )\n\n    static void prvDeleteTCB( TCB_t * pxTCB )\n    {\n        /* This call is required specifically for the TriCore port.  It must be\n         * above the vPortFree() calls.  The call is also used by ports/demos that\n         * want to allocate and clean RAM statically. */\n        portCLEAN_UP_TCB( pxTCB );\n\n        #if ( configUSE_C_RUNTIME_TLS_SUPPORT == 1 )\n        {\n            /* Free up the memory allocated for the task's TLS Block. */\n            configDEINIT_TLS_BLOCK( pxTCB->xTLSBlock );\n        }\n        #endif\n\n        #if ( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 0 ) && ( portUSING_MPU_WRAPPERS == 0 ) )\n        {\n            /* The task can only have been allocated dynamically - free both\n             * the stack and TCB. */\n            vPortFreeStack( pxTCB->pxStack );\n            vPortFree( pxTCB );\n        }\n        #elif ( tskSTATIC_AND_DYNAMIC_ALLOCATION_POSSIBLE != 0 )\n        {\n            /* The task could have been allocated statically or dynamically, so\n             * check what was statically allocated before trying to free the\n             * memory. */\n            if( pxTCB->ucStaticallyAllocated == tskDYNAMICALLY_ALLOCATED_STACK_AND_TCB )\n            {\n                /* Both the stack and TCB were allocated dynamically, so both\n                 * must be freed. */\n                vPortFreeStack( pxTCB->pxStack );\n                vPortFree( pxTCB );\n            }\n            else if( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_ONLY )\n            {\n                /* Only the stack was statically allocated, so the TCB is the\n                 * only memory that must be freed. */\n                vPortFree( pxTCB );\n            }\n            else\n            {\n                /* Neither the stack nor the TCB were allocated dynamically, so\n                 * nothing needs to be freed. */\n                configASSERT( pxTCB->ucStaticallyAllocated == tskSTATICALLY_ALLOCATED_STACK_AND_TCB );\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        #endif /* configSUPPORT_DYNAMIC_ALLOCATION */\n    }\n\n#endif /* INCLUDE_vTaskDelete */\n/*-----------------------------------------------------------*/\n\nstatic void prvResetNextTaskUnblockTime( void )\n{\n    if( listLIST_IS_EMPTY( pxDelayedTaskList ) != pdFALSE )\n    {\n        /* The new current delayed list is empty.  Set xNextTaskUnblockTime to\n         * the maximum possible value so it is  extremely unlikely that the\n         * if( xTickCount >= xNextTaskUnblockTime ) test will pass until\n         * there is an item in the delayed list. */\n        xNextTaskUnblockTime = portMAX_DELAY;\n    }\n    else\n    {\n        /* The new current delayed list is not empty, get the value of\n         * the item at the head of the delayed list.  This is the time at\n         * which the task at the head of the delayed list should be removed\n         * from the Blocked state. */\n        xNextTaskUnblockTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxDelayedTaskList );\n    }\n}\n/*-----------------------------------------------------------*/\n\n#if ( ( INCLUDE_xTaskGetCurrentTaskHandle == 1 ) || ( configUSE_MUTEXES == 1 ) ) || ( configNUMBER_OF_CORES > 1 )\n\n    #if ( configNUMBER_OF_CORES == 1 )\n        TaskHandle_t xTaskGetCurrentTaskHandle( void )\n        {\n            TaskHandle_t xReturn;\n\n            traceENTER_xTaskGetCurrentTaskHandle();\n\n            /* A critical section is not required as this is not called from\n             * an interrupt and the current TCB will always be the same for any\n             * individual execution thread. */\n            xReturn = pxCurrentTCB;\n\n            traceRETURN_xTaskGetCurrentTaskHandle( xReturn );\n\n            return xReturn;\n        }\n    #else /* #if ( configNUMBER_OF_CORES == 1 ) */\n        TaskHandle_t xTaskGetCurrentTaskHandle( void )\n        {\n            TaskHandle_t xReturn;\n            UBaseType_t uxSavedInterruptStatus;\n\n            traceENTER_xTaskGetCurrentTaskHandle();\n\n            uxSavedInterruptStatus = portSET_INTERRUPT_MASK();\n            {\n                xReturn = pxCurrentTCBs[ portGET_CORE_ID() ];\n            }\n            portCLEAR_INTERRUPT_MASK( uxSavedInterruptStatus );\n\n            traceRETURN_xTaskGetCurrentTaskHandle( xReturn );\n\n            return xReturn;\n        }\n    #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n\n    TaskHandle_t xTaskGetCurrentTaskHandleForCore( BaseType_t xCoreID )\n    {\n        TaskHandle_t xReturn = NULL;\n\n        traceENTER_xTaskGetCurrentTaskHandleForCore( xCoreID );\n\n        if( taskVALID_CORE_ID( xCoreID ) != pdFALSE )\n        {\n            #if ( configNUMBER_OF_CORES == 1 )\n                xReturn = pxCurrentTCB;\n            #else /* #if ( configNUMBER_OF_CORES == 1 ) */\n                xReturn = pxCurrentTCBs[ xCoreID ];\n            #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n        }\n\n        traceRETURN_xTaskGetCurrentTaskHandleForCore( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* ( ( INCLUDE_xTaskGetCurrentTaskHandle == 1 ) || ( configUSE_MUTEXES == 1 ) ) */\n/*-----------------------------------------------------------*/\n\n#if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )\n\n    BaseType_t xTaskGetSchedulerState( void )\n    {\n        BaseType_t xReturn;\n\n        traceENTER_xTaskGetSchedulerState();\n\n        if( xSchedulerRunning == pdFALSE )\n        {\n            xReturn = taskSCHEDULER_NOT_STARTED;\n        }\n        else\n        {\n            #if ( configNUMBER_OF_CORES > 1 )\n                taskENTER_CRITICAL();\n            #endif\n            {\n                if( uxSchedulerSuspended == ( UBaseType_t ) 0U )\n                {\n                    xReturn = taskSCHEDULER_RUNNING;\n                }\n                else\n                {\n                    xReturn = taskSCHEDULER_SUSPENDED;\n                }\n            }\n            #if ( configNUMBER_OF_CORES > 1 )\n                taskEXIT_CRITICAL();\n            #endif\n        }\n\n        traceRETURN_xTaskGetSchedulerState( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) ) */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_MUTEXES == 1 )\n\n    BaseType_t xTaskPriorityInherit( TaskHandle_t const pxMutexHolder )\n    {\n        TCB_t * const pxMutexHolderTCB = pxMutexHolder;\n        BaseType_t xReturn = pdFALSE;\n\n        traceENTER_xTaskPriorityInherit( pxMutexHolder );\n\n        /* If the mutex is taken by an interrupt, the mutex holder is NULL. Priority\n         * inheritance is not applied in this scenario. */\n        if( pxMutexHolder != NULL )\n        {\n            /* If the holder of the mutex has a priority below the priority of\n             * the task attempting to obtain the mutex then it will temporarily\n             * inherit the priority of the task attempting to obtain the mutex. */\n            if( pxMutexHolderTCB->uxPriority < pxCurrentTCB->uxPriority )\n            {\n                /* Adjust the mutex holder state to account for its new\n                 * priority.  Only reset the event list item value if the value is\n                 * not being used for anything else. */\n                if( ( listGET_LIST_ITEM_VALUE( &( pxMutexHolderTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == ( ( TickType_t ) 0U ) )\n                {\n                    listSET_LIST_ITEM_VALUE( &( pxMutexHolderTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxCurrentTCB->uxPriority );\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n\n                /* If the task being modified is in the ready state it will need\n                 * to be moved into a new list. */\n                if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ pxMutexHolderTCB->uxPriority ] ), &( pxMutexHolderTCB->xStateListItem ) ) != pdFALSE )\n                {\n                    if( uxListRemove( &( pxMutexHolderTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )\n                    {\n                        /* It is known that the task is in its ready list so\n                         * there is no need to check again and the port level\n                         * reset macro can be called directly. */\n                        portRESET_READY_PRIORITY( pxMutexHolderTCB->uxPriority, uxTopReadyPriority );\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n\n                    /* Inherit the priority before being moved into the new list. */\n                    pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority;\n                    prvAddTaskToReadyList( pxMutexHolderTCB );\n                    #if ( configNUMBER_OF_CORES > 1 )\n                    {\n                        /* The priority of the task is raised. Yield for this task\n                         * if it is not running. */\n                        if( taskTASK_IS_RUNNING( pxMutexHolderTCB ) != pdTRUE )\n                        {\n                            prvYieldForTask( pxMutexHolderTCB );\n                        }\n                    }\n                    #endif /* if ( configNUMBER_OF_CORES > 1 ) */\n                }\n                else\n                {\n                    /* Just inherit the priority. */\n                    pxMutexHolderTCB->uxPriority = pxCurrentTCB->uxPriority;\n                }\n\n                traceTASK_PRIORITY_INHERIT( pxMutexHolderTCB, pxCurrentTCB->uxPriority );\n\n                /* Inheritance occurred. */\n                xReturn = pdTRUE;\n            }\n            else\n            {\n                if( pxMutexHolderTCB->uxBasePriority < pxCurrentTCB->uxPriority )\n                {\n                    /* The base priority of the mutex holder is lower than the\n                     * priority of the task attempting to take the mutex, but the\n                     * current priority of the mutex holder is not lower than the\n                     * priority of the task attempting to take the mutex.\n                     * Therefore the mutex holder must have already inherited a\n                     * priority, but inheritance would have occurred if that had\n                     * not been the case. */\n                    xReturn = pdTRUE;\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_xTaskPriorityInherit( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_MUTEXES */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_MUTEXES == 1 )\n\n    BaseType_t xTaskPriorityDisinherit( TaskHandle_t const pxMutexHolder )\n    {\n        TCB_t * const pxTCB = pxMutexHolder;\n        BaseType_t xReturn = pdFALSE;\n\n        traceENTER_xTaskPriorityDisinherit( pxMutexHolder );\n\n        if( pxMutexHolder != NULL )\n        {\n            /* A task can only have an inherited priority if it holds the mutex.\n             * If the mutex is held by a task then it cannot be given from an\n             * interrupt, and if a mutex is given by the holding task then it must\n             * be the running state task. */\n            configASSERT( pxTCB == pxCurrentTCB );\n            configASSERT( pxTCB->uxMutexesHeld );\n            ( pxTCB->uxMutexesHeld )--;\n\n            /* Has the holder of the mutex inherited the priority of another\n             * task? */\n            if( pxTCB->uxPriority != pxTCB->uxBasePriority )\n            {\n                /* Only disinherit if no other mutexes are held. */\n                if( pxTCB->uxMutexesHeld == ( UBaseType_t ) 0 )\n                {\n                    /* A task can only have an inherited priority if it holds\n                     * the mutex.  If the mutex is held by a task then it cannot be\n                     * given from an interrupt, and if a mutex is given by the\n                     * holding task then it must be the running state task.  Remove\n                     * the holding task from the ready list. */\n                    if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )\n                    {\n                        portRESET_READY_PRIORITY( pxTCB->uxPriority, uxTopReadyPriority );\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n\n                    /* Disinherit the priority before adding the task into the\n                     * new  ready list. */\n                    traceTASK_PRIORITY_DISINHERIT( pxTCB, pxTCB->uxBasePriority );\n                    pxTCB->uxPriority = pxTCB->uxBasePriority;\n\n                    /* Reset the event list item value.  It cannot be in use for\n                     * any other purpose if this task is running, and it must be\n                     * running to give back the mutex. */\n                    listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxTCB->uxPriority );\n                    prvAddTaskToReadyList( pxTCB );\n                    #if ( configNUMBER_OF_CORES > 1 )\n                    {\n                        /* The priority of the task is dropped. Yield the core on\n                         * which the task is running. */\n                        if( taskTASK_IS_RUNNING( pxTCB ) == pdTRUE )\n                        {\n                            prvYieldCore( pxTCB->xTaskRunState );\n                        }\n                    }\n                    #endif /* if ( configNUMBER_OF_CORES > 1 ) */\n\n                    /* Return true to indicate that a context switch is required.\n                     * This is only actually required in the corner case whereby\n                     * multiple mutexes were held and the mutexes were given back\n                     * in an order different to that in which they were taken.\n                     * If a context switch did not occur when the first mutex was\n                     * returned, even if a task was waiting on it, then a context\n                     * switch should occur when the last mutex is returned whether\n                     * a task is waiting on it or not. */\n                    xReturn = pdTRUE;\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_xTaskPriorityDisinherit( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_MUTEXES */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_MUTEXES == 1 )\n\n    void vTaskPriorityDisinheritAfterTimeout( TaskHandle_t const pxMutexHolder,\n                                              UBaseType_t uxHighestPriorityWaitingTask )\n    {\n        TCB_t * const pxTCB = pxMutexHolder;\n        UBaseType_t uxPriorityUsedOnEntry, uxPriorityToUse;\n        const UBaseType_t uxOnlyOneMutexHeld = ( UBaseType_t ) 1;\n\n        traceENTER_vTaskPriorityDisinheritAfterTimeout( pxMutexHolder, uxHighestPriorityWaitingTask );\n\n        if( pxMutexHolder != NULL )\n        {\n            /* If pxMutexHolder is not NULL then the holder must hold at least\n             * one mutex. */\n            configASSERT( pxTCB->uxMutexesHeld );\n\n            /* Determine the priority to which the priority of the task that\n             * holds the mutex should be set.  This will be the greater of the\n             * holding task's base priority and the priority of the highest\n             * priority task that is waiting to obtain the mutex. */\n            if( pxTCB->uxBasePriority < uxHighestPriorityWaitingTask )\n            {\n                uxPriorityToUse = uxHighestPriorityWaitingTask;\n            }\n            else\n            {\n                uxPriorityToUse = pxTCB->uxBasePriority;\n            }\n\n            /* Does the priority need to change? */\n            if( pxTCB->uxPriority != uxPriorityToUse )\n            {\n                /* Only disinherit if no other mutexes are held.  This is a\n                 * simplification in the priority inheritance implementation.  If\n                 * the task that holds the mutex is also holding other mutexes then\n                 * the other mutexes may have caused the priority inheritance. */\n                if( pxTCB->uxMutexesHeld == uxOnlyOneMutexHeld )\n                {\n                    /* If a task has timed out because it already holds the\n                     * mutex it was trying to obtain then it cannot of inherited\n                     * its own priority. */\n                    configASSERT( pxTCB != pxCurrentTCB );\n\n                    /* Disinherit the priority, remembering the previous\n                     * priority to facilitate determining the subject task's\n                     * state. */\n                    traceTASK_PRIORITY_DISINHERIT( pxTCB, uxPriorityToUse );\n                    uxPriorityUsedOnEntry = pxTCB->uxPriority;\n                    pxTCB->uxPriority = uxPriorityToUse;\n\n                    /* Only reset the event list item value if the value is not\n                     * being used for anything else. */\n                    if( ( listGET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ) ) & taskEVENT_LIST_ITEM_VALUE_IN_USE ) == ( ( TickType_t ) 0U ) )\n                    {\n                        listSET_LIST_ITEM_VALUE( &( pxTCB->xEventListItem ), ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) uxPriorityToUse );\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n\n                    /* If the running task is not the task that holds the mutex\n                     * then the task that holds the mutex could be in either the\n                     * Ready, Blocked or Suspended states.  Only remove the task\n                     * from its current state list if it is in the Ready state as\n                     * the task's priority is going to change and there is one\n                     * Ready list per priority. */\n                    if( listIS_CONTAINED_WITHIN( &( pxReadyTasksLists[ uxPriorityUsedOnEntry ] ), &( pxTCB->xStateListItem ) ) != pdFALSE )\n                    {\n                        if( uxListRemove( &( pxTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )\n                        {\n                            /* It is known that the task is in its ready list so\n                             * there is no need to check again and the port level\n                             * reset macro can be called directly. */\n                            portRESET_READY_PRIORITY( pxTCB->uxPriority, uxTopReadyPriority );\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n\n                        prvAddTaskToReadyList( pxTCB );\n                        #if ( configNUMBER_OF_CORES > 1 )\n                        {\n                            /* The priority of the task is dropped. Yield the core on\n                             * which the task is running. */\n                            if( taskTASK_IS_RUNNING( pxTCB ) == pdTRUE )\n                            {\n                                prvYieldCore( pxTCB->xTaskRunState );\n                            }\n                        }\n                        #endif /* if ( configNUMBER_OF_CORES > 1 ) */\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_vTaskPriorityDisinheritAfterTimeout();\n    }\n\n#endif /* configUSE_MUTEXES */\n/*-----------------------------------------------------------*/\n\n#if ( configNUMBER_OF_CORES > 1 )\n\n/* If not in a critical section then yield immediately.\n * Otherwise set xYieldPendings to true to wait to\n * yield until exiting the critical section.\n */\n    void vTaskYieldWithinAPI( void )\n    {\n        traceENTER_vTaskYieldWithinAPI();\n\n        if( portGET_CRITICAL_NESTING_COUNT() == 0U )\n        {\n            portYIELD();\n        }\n        else\n        {\n            xYieldPendings[ portGET_CORE_ID() ] = pdTRUE;\n        }\n\n        traceRETURN_vTaskYieldWithinAPI();\n    }\n#endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n\n/*-----------------------------------------------------------*/\n\n#if ( ( portCRITICAL_NESTING_IN_TCB == 1 ) && ( configNUMBER_OF_CORES == 1 ) )\n\n    void vTaskEnterCritical( void )\n    {\n        traceENTER_vTaskEnterCritical();\n\n        portDISABLE_INTERRUPTS();\n\n        if( xSchedulerRunning != pdFALSE )\n        {\n            ( pxCurrentTCB->uxCriticalNesting )++;\n\n            /* This is not the interrupt safe version of the enter critical\n             * function so  assert() if it is being called from an interrupt\n             * context.  Only API functions that end in \"FromISR\" can be used in an\n             * interrupt.  Only assert if the critical nesting count is 1 to\n             * protect against recursive calls if the assert function also uses a\n             * critical section. */\n            if( pxCurrentTCB->uxCriticalNesting == 1U )\n            {\n                portASSERT_IF_IN_ISR();\n            }\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_vTaskEnterCritical();\n    }\n\n#endif /* #if ( ( portCRITICAL_NESTING_IN_TCB == 1 ) && ( configNUMBER_OF_CORES == 1 ) ) */\n/*-----------------------------------------------------------*/\n\n#if ( configNUMBER_OF_CORES > 1 )\n\n    void vTaskEnterCritical( void )\n    {\n        traceENTER_vTaskEnterCritical();\n\n        portDISABLE_INTERRUPTS();\n\n        if( xSchedulerRunning != pdFALSE )\n        {\n            if( portGET_CRITICAL_NESTING_COUNT() == 0U )\n            {\n                portGET_TASK_LOCK();\n                portGET_ISR_LOCK();\n            }\n\n            portINCREMENT_CRITICAL_NESTING_COUNT();\n\n            /* This is not the interrupt safe version of the enter critical\n             * function so  assert() if it is being called from an interrupt\n             * context.  Only API functions that end in \"FromISR\" can be used in an\n             * interrupt.  Only assert if the critical nesting count is 1 to\n             * protect against recursive calls if the assert function also uses a\n             * critical section. */\n            if( portGET_CRITICAL_NESTING_COUNT() == 1U )\n            {\n                portASSERT_IF_IN_ISR();\n\n                if( uxSchedulerSuspended == 0U )\n                {\n                    /* The only time there would be a problem is if this is called\n                     * before a context switch and vTaskExitCritical() is called\n                     * after pxCurrentTCB changes. Therefore this should not be\n                     * used within vTaskSwitchContext(). */\n                    prvCheckForRunStateChange();\n                }\n            }\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_vTaskEnterCritical();\n    }\n\n#endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n\n/*-----------------------------------------------------------*/\n\n#if ( configNUMBER_OF_CORES > 1 )\n\n    UBaseType_t vTaskEnterCriticalFromISR( void )\n    {\n        UBaseType_t uxSavedInterruptStatus = 0;\n\n        traceENTER_vTaskEnterCriticalFromISR();\n\n        if( xSchedulerRunning != pdFALSE )\n        {\n            uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();\n\n            if( portGET_CRITICAL_NESTING_COUNT() == 0U )\n            {\n                portGET_ISR_LOCK();\n            }\n\n            portINCREMENT_CRITICAL_NESTING_COUNT();\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_vTaskEnterCriticalFromISR( uxSavedInterruptStatus );\n\n        return uxSavedInterruptStatus;\n    }\n\n#endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n/*-----------------------------------------------------------*/\n\n#if ( ( portCRITICAL_NESTING_IN_TCB == 1 ) && ( configNUMBER_OF_CORES == 1 ) )\n\n    void vTaskExitCritical( void )\n    {\n        traceENTER_vTaskExitCritical();\n\n        if( xSchedulerRunning != pdFALSE )\n        {\n            /* If pxCurrentTCB->uxCriticalNesting is zero then this function\n             * does not match a previous call to vTaskEnterCritical(). */\n            configASSERT( pxCurrentTCB->uxCriticalNesting > 0U );\n\n            /* This function should not be called in ISR. Use vTaskExitCriticalFromISR\n             * to exit critical section from ISR. */\n            portASSERT_IF_IN_ISR();\n\n            if( pxCurrentTCB->uxCriticalNesting > 0U )\n            {\n                ( pxCurrentTCB->uxCriticalNesting )--;\n\n                if( pxCurrentTCB->uxCriticalNesting == 0U )\n                {\n                    portENABLE_INTERRUPTS();\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_vTaskExitCritical();\n    }\n\n#endif /* #if ( ( portCRITICAL_NESTING_IN_TCB == 1 ) && ( configNUMBER_OF_CORES == 1 ) ) */\n/*-----------------------------------------------------------*/\n\n#if ( configNUMBER_OF_CORES > 1 )\n\n    void vTaskExitCritical( void )\n    {\n        traceENTER_vTaskExitCritical();\n\n        if( xSchedulerRunning != pdFALSE )\n        {\n            /* If critical nesting count is zero then this function\n             * does not match a previous call to vTaskEnterCritical(). */\n            configASSERT( portGET_CRITICAL_NESTING_COUNT() > 0U );\n\n            /* This function should not be called in ISR. Use vTaskExitCriticalFromISR\n             * to exit critical section from ISR. */\n            portASSERT_IF_IN_ISR();\n\n            if( portGET_CRITICAL_NESTING_COUNT() > 0U )\n            {\n                portDECREMENT_CRITICAL_NESTING_COUNT();\n\n                if( portGET_CRITICAL_NESTING_COUNT() == 0U )\n                {\n                    BaseType_t xYieldCurrentTask;\n\n                    /* Get the xYieldPending stats inside the critical section. */\n                    xYieldCurrentTask = xYieldPendings[ portGET_CORE_ID() ];\n\n                    portRELEASE_ISR_LOCK();\n                    portRELEASE_TASK_LOCK();\n                    portENABLE_INTERRUPTS();\n\n                    /* When a task yields in a critical section it just sets\n                     * xYieldPending to true. So now that we have exited the\n                     * critical section check if xYieldPending is true, and\n                     * if so yield. */\n                    if( xYieldCurrentTask != pdFALSE )\n                    {\n                        portYIELD();\n                    }\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_vTaskExitCritical();\n    }\n\n#endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n/*-----------------------------------------------------------*/\n\n#if ( configNUMBER_OF_CORES > 1 )\n\n    void vTaskExitCriticalFromISR( UBaseType_t uxSavedInterruptStatus )\n    {\n        traceENTER_vTaskExitCriticalFromISR( uxSavedInterruptStatus );\n\n        if( xSchedulerRunning != pdFALSE )\n        {\n            /* If critical nesting count is zero then this function\n             * does not match a previous call to vTaskEnterCritical(). */\n            configASSERT( portGET_CRITICAL_NESTING_COUNT() > 0U );\n\n            if( portGET_CRITICAL_NESTING_COUNT() > 0U )\n            {\n                portDECREMENT_CRITICAL_NESTING_COUNT();\n\n                if( portGET_CRITICAL_NESTING_COUNT() == 0U )\n                {\n                    portRELEASE_ISR_LOCK();\n                    portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_vTaskExitCriticalFromISR();\n    }\n\n#endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 )\n\n    static char * prvWriteNameToBuffer( char * pcBuffer,\n                                        const char * pcTaskName )\n    {\n        size_t x;\n\n        /* Start by copying the entire string. */\n        ( void ) strcpy( pcBuffer, pcTaskName );\n\n        /* Pad the end of the string with spaces to ensure columns line up when\n         * printed out. */\n        for( x = strlen( pcBuffer ); x < ( size_t ) ( ( size_t ) configMAX_TASK_NAME_LEN - 1U ); x++ )\n        {\n            pcBuffer[ x ] = ' ';\n        }\n\n        /* Terminate. */\n        pcBuffer[ x ] = ( char ) 0x00;\n\n        /* Return the new end of string. */\n        return &( pcBuffer[ x ] );\n    }\n\n#endif /* ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) */\n/*-----------------------------------------------------------*/\n\n#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) )\n\n    void vTaskListTasks( char * pcWriteBuffer,\n                         size_t uxBufferLength )\n    {\n        TaskStatus_t * pxTaskStatusArray;\n        size_t uxConsumedBufferLength = 0;\n        size_t uxCharsWrittenBySnprintf;\n        int iSnprintfReturnValue;\n        BaseType_t xOutputBufferFull = pdFALSE;\n        UBaseType_t uxArraySize, x;\n        char cStatus;\n\n        traceENTER_vTaskListTasks( pcWriteBuffer, uxBufferLength );\n\n        /*\n         * PLEASE NOTE:\n         *\n         * This function is provided for convenience only, and is used by many\n         * of the demo applications.  Do not consider it to be part of the\n         * scheduler.\n         *\n         * vTaskListTasks() calls uxTaskGetSystemState(), then formats part of the\n         * uxTaskGetSystemState() output into a human readable table that\n         * displays task: names, states, priority, stack usage and task number.\n         * Stack usage specified as the number of unused StackType_t words stack can hold\n         * on top of stack - not the number of bytes.\n         *\n         * vTaskListTasks() has a dependency on the snprintf() C library function that\n         * might bloat the code size, use a lot of stack, and provide different\n         * results on different platforms.  An alternative, tiny, third party,\n         * and limited functionality implementation of snprintf() is provided in\n         * many of the FreeRTOS/Demo sub-directories in a file called\n         * printf-stdarg.c (note printf-stdarg.c does not provide a full\n         * snprintf() implementation!).\n         *\n         * It is recommended that production systems call uxTaskGetSystemState()\n         * directly to get access to raw stats data, rather than indirectly\n         * through a call to vTaskListTasks().\n         */\n\n\n        /* Make sure the write buffer does not contain a string. */\n        *pcWriteBuffer = ( char ) 0x00;\n\n        /* Take a snapshot of the number of tasks in case it changes while this\n         * function is executing. */\n        uxArraySize = uxCurrentNumberOfTasks;\n\n        /* Allocate an array index for each task.  NOTE!  if\n         * configSUPPORT_DYNAMIC_ALLOCATION is set to 0 then pvPortMalloc() will\n         * equate to NULL. */\n        /* MISRA Ref 11.5.1 [Malloc memory assignment] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n        /* coverity[misra_c_2012_rule_11_5_violation] */\n        pxTaskStatusArray = pvPortMalloc( uxCurrentNumberOfTasks * sizeof( TaskStatus_t ) );\n\n        if( pxTaskStatusArray != NULL )\n        {\n            /* Generate the (binary) data. */\n            uxArraySize = uxTaskGetSystemState( pxTaskStatusArray, uxArraySize, NULL );\n\n            /* Create a human readable table from the binary data. */\n            for( x = 0; x < uxArraySize; x++ )\n            {\n                switch( pxTaskStatusArray[ x ].eCurrentState )\n                {\n                    case eRunning:\n                        cStatus = tskRUNNING_CHAR;\n                        break;\n\n                    case eReady:\n                        cStatus = tskREADY_CHAR;\n                        break;\n\n                    case eBlocked:\n                        cStatus = tskBLOCKED_CHAR;\n                        break;\n\n                    case eSuspended:\n                        cStatus = tskSUSPENDED_CHAR;\n                        break;\n\n                    case eDeleted:\n                        cStatus = tskDELETED_CHAR;\n                        break;\n\n                    case eInvalid: /* Fall through. */\n                    default:       /* Should not get here, but it is included\n                                    * to prevent static checking errors. */\n                        cStatus = ( char ) 0x00;\n                        break;\n                }\n\n                /* Is there enough space in the buffer to hold task name? */\n                if( ( uxConsumedBufferLength + configMAX_TASK_NAME_LEN ) <= uxBufferLength )\n                {\n                    /* Write the task name to the string, padding with spaces so it\n                     * can be printed in tabular form more easily. */\n                    pcWriteBuffer = prvWriteNameToBuffer( pcWriteBuffer, pxTaskStatusArray[ x ].pcTaskName );\n                    /* Do not count the terminating null character. */\n                    uxConsumedBufferLength = uxConsumedBufferLength + ( configMAX_TASK_NAME_LEN - 1U );\n\n                    /* Is there space left in the buffer? -1 is done because snprintf\n                     * writes a terminating null character. So we are essentially\n                     * checking if the buffer has space to write at least one non-null\n                     * character. */\n                    if( uxConsumedBufferLength < ( uxBufferLength - 1U ) )\n                    {\n                        /* Write the rest of the string. */\n                        #if ( ( configUSE_CORE_AFFINITY == 1 ) && ( configNUMBER_OF_CORES > 1 ) )\n                            /* MISRA Ref 21.6.1 [snprintf for utility] */\n                            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-216 */\n                            /* coverity[misra_c_2012_rule_21_6_violation] */\n                            iSnprintfReturnValue = snprintf( pcWriteBuffer,\n                                                             uxBufferLength - uxConsumedBufferLength,\n                                                             \"\\t%c\\t%u\\t%u\\t%u\\t0x%x\\r\\n\",\n                                                             cStatus,\n                                                             ( unsigned int ) pxTaskStatusArray[ x ].uxCurrentPriority,\n                                                             ( unsigned int ) pxTaskStatusArray[ x ].usStackHighWaterMark,\n                                                             ( unsigned int ) pxTaskStatusArray[ x ].xTaskNumber,\n                                                             ( unsigned int ) pxTaskStatusArray[ x ].uxCoreAffinityMask );\n                        #else /* ( ( configUSE_CORE_AFFINITY == 1 ) && ( configNUMBER_OF_CORES > 1 ) ) */\n                            /* MISRA Ref 21.6.1 [snprintf for utility] */\n                            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-216 */\n                            /* coverity[misra_c_2012_rule_21_6_violation] */\n                            iSnprintfReturnValue = snprintf( pcWriteBuffer,\n                                                             uxBufferLength - uxConsumedBufferLength,\n                                                             \"\\t%c\\t%u\\t%u\\t%u\\r\\n\",\n                                                             cStatus,\n                                                             ( unsigned int ) pxTaskStatusArray[ x ].uxCurrentPriority,\n                                                             ( unsigned int ) pxTaskStatusArray[ x ].usStackHighWaterMark,\n                                                             ( unsigned int ) pxTaskStatusArray[ x ].xTaskNumber );\n                        #endif /* ( ( configUSE_CORE_AFFINITY == 1 ) && ( configNUMBER_OF_CORES > 1 ) ) */\n                        uxCharsWrittenBySnprintf = prvSnprintfReturnValueToCharsWritten( iSnprintfReturnValue, uxBufferLength - uxConsumedBufferLength );\n\n                        uxConsumedBufferLength += uxCharsWrittenBySnprintf;\n                        pcWriteBuffer += uxCharsWrittenBySnprintf;\n                    }\n                    else\n                    {\n                        xOutputBufferFull = pdTRUE;\n                    }\n                }\n                else\n                {\n                    xOutputBufferFull = pdTRUE;\n                }\n\n                if( xOutputBufferFull == pdTRUE )\n                {\n                    break;\n                }\n            }\n\n            /* Free the array again.  NOTE!  If configSUPPORT_DYNAMIC_ALLOCATION\n             * is 0 then vPortFree() will be #defined to nothing. */\n            vPortFree( pxTaskStatusArray );\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_vTaskListTasks();\n    }\n\n#endif /* ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) ) */\n/*----------------------------------------------------------*/\n\n#if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) && ( configUSE_TRACE_FACILITY == 1 ) )\n\n    void vTaskGetRunTimeStatistics( char * pcWriteBuffer,\n                                    size_t uxBufferLength )\n    {\n        TaskStatus_t * pxTaskStatusArray;\n        size_t uxConsumedBufferLength = 0;\n        size_t uxCharsWrittenBySnprintf;\n        int iSnprintfReturnValue;\n        BaseType_t xOutputBufferFull = pdFALSE;\n        UBaseType_t uxArraySize, x;\n        configRUN_TIME_COUNTER_TYPE ulTotalTime = 0;\n        configRUN_TIME_COUNTER_TYPE ulStatsAsPercentage;\n\n        traceENTER_vTaskGetRunTimeStatistics( pcWriteBuffer, uxBufferLength );\n\n        /*\n         * PLEASE NOTE:\n         *\n         * This function is provided for convenience only, and is used by many\n         * of the demo applications.  Do not consider it to be part of the\n         * scheduler.\n         *\n         * vTaskGetRunTimeStatistics() calls uxTaskGetSystemState(), then formats part\n         * of the uxTaskGetSystemState() output into a human readable table that\n         * displays the amount of time each task has spent in the Running state\n         * in both absolute and percentage terms.\n         *\n         * vTaskGetRunTimeStatistics() has a dependency on the snprintf() C library\n         * function that might bloat the code size, use a lot of stack, and\n         * provide different results on different platforms.  An alternative,\n         * tiny, third party, and limited functionality implementation of\n         * snprintf() is provided in many of the FreeRTOS/Demo sub-directories in\n         * a file called printf-stdarg.c (note printf-stdarg.c does not provide\n         * a full snprintf() implementation!).\n         *\n         * It is recommended that production systems call uxTaskGetSystemState()\n         * directly to get access to raw stats data, rather than indirectly\n         * through a call to vTaskGetRunTimeStatistics().\n         */\n\n        /* Make sure the write buffer does not contain a string. */\n        *pcWriteBuffer = ( char ) 0x00;\n\n        /* Take a snapshot of the number of tasks in case it changes while this\n         * function is executing. */\n        uxArraySize = uxCurrentNumberOfTasks;\n\n        /* Allocate an array index for each task.  NOTE!  If\n         * configSUPPORT_DYNAMIC_ALLOCATION is set to 0 then pvPortMalloc() will\n         * equate to NULL. */\n        /* MISRA Ref 11.5.1 [Malloc memory assignment] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n        /* coverity[misra_c_2012_rule_11_5_violation] */\n        pxTaskStatusArray = pvPortMalloc( uxCurrentNumberOfTasks * sizeof( TaskStatus_t ) );\n\n        if( pxTaskStatusArray != NULL )\n        {\n            /* Generate the (binary) data. */\n            uxArraySize = uxTaskGetSystemState( pxTaskStatusArray, uxArraySize, &ulTotalTime );\n\n            /* For percentage calculations. */\n            ulTotalTime /= ( ( configRUN_TIME_COUNTER_TYPE ) 100U );\n\n            /* Avoid divide by zero errors. */\n            if( ulTotalTime > 0U )\n            {\n                /* Create a human readable table from the binary data. */\n                for( x = 0; x < uxArraySize; x++ )\n                {\n                    /* What percentage of the total run time has the task used?\n                     * This will always be rounded down to the nearest integer.\n                     * ulTotalRunTime has already been divided by 100. */\n                    ulStatsAsPercentage = pxTaskStatusArray[ x ].ulRunTimeCounter / ulTotalTime;\n\n                    /* Is there enough space in the buffer to hold task name? */\n                    if( ( uxConsumedBufferLength + configMAX_TASK_NAME_LEN ) <= uxBufferLength )\n                    {\n                        /* Write the task name to the string, padding with\n                         * spaces so it can be printed in tabular form more\n                         * easily. */\n                        pcWriteBuffer = prvWriteNameToBuffer( pcWriteBuffer, pxTaskStatusArray[ x ].pcTaskName );\n                        /* Do not count the terminating null character. */\n                        uxConsumedBufferLength = uxConsumedBufferLength + ( configMAX_TASK_NAME_LEN - 1U );\n\n                        /* Is there space left in the buffer? -1 is done because snprintf\n                         * writes a terminating null character. So we are essentially\n                         * checking if the buffer has space to write at least one non-null\n                         * character. */\n                        if( uxConsumedBufferLength < ( uxBufferLength - 1U ) )\n                        {\n                            if( ulStatsAsPercentage > 0U )\n                            {\n                                #ifdef portLU_PRINTF_SPECIFIER_REQUIRED\n                                {\n                                    /* MISRA Ref 21.6.1 [snprintf for utility] */\n                                    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-216 */\n                                    /* coverity[misra_c_2012_rule_21_6_violation] */\n                                    iSnprintfReturnValue = snprintf( pcWriteBuffer,\n                                                                     uxBufferLength - uxConsumedBufferLength,\n                                                                     \"\\t%lu\\t\\t%lu%%\\r\\n\",\n                                                                     pxTaskStatusArray[ x ].ulRunTimeCounter,\n                                                                     ulStatsAsPercentage );\n                                }\n                                #else /* ifdef portLU_PRINTF_SPECIFIER_REQUIRED */\n                                {\n                                    /* sizeof( int ) == sizeof( long ) so a smaller\n                                     * printf() library can be used. */\n                                    /* MISRA Ref 21.6.1 [snprintf for utility] */\n                                    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-216 */\n                                    /* coverity[misra_c_2012_rule_21_6_violation] */\n                                    iSnprintfReturnValue = snprintf( pcWriteBuffer,\n                                                                     uxBufferLength - uxConsumedBufferLength,\n                                                                     \"\\t%u\\t\\t%u%%\\r\\n\",\n                                                                     ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter,\n                                                                     ( unsigned int ) ulStatsAsPercentage );\n                                }\n                                #endif /* ifdef portLU_PRINTF_SPECIFIER_REQUIRED */\n                            }\n                            else\n                            {\n                                /* If the percentage is zero here then the task has\n                                 * consumed less than 1% of the total run time. */\n                                #ifdef portLU_PRINTF_SPECIFIER_REQUIRED\n                                {\n                                    /* MISRA Ref 21.6.1 [snprintf for utility] */\n                                    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-216 */\n                                    /* coverity[misra_c_2012_rule_21_6_violation] */\n                                    iSnprintfReturnValue = snprintf( pcWriteBuffer,\n                                                                     uxBufferLength - uxConsumedBufferLength,\n                                                                     \"\\t%lu\\t\\t<1%%\\r\\n\",\n                                                                     pxTaskStatusArray[ x ].ulRunTimeCounter );\n                                }\n                                #else\n                                {\n                                    /* sizeof( int ) == sizeof( long ) so a smaller\n                                     * printf() library can be used. */\n                                    /* MISRA Ref 21.6.1 [snprintf for utility] */\n                                    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-216 */\n                                    /* coverity[misra_c_2012_rule_21_6_violation] */\n                                    iSnprintfReturnValue = snprintf( pcWriteBuffer,\n                                                                     uxBufferLength - uxConsumedBufferLength,\n                                                                     \"\\t%u\\t\\t<1%%\\r\\n\",\n                                                                     ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter );\n                                }\n                                #endif /* ifdef portLU_PRINTF_SPECIFIER_REQUIRED */\n                            }\n\n                            uxCharsWrittenBySnprintf = prvSnprintfReturnValueToCharsWritten( iSnprintfReturnValue, uxBufferLength - uxConsumedBufferLength );\n                            uxConsumedBufferLength += uxCharsWrittenBySnprintf;\n                            pcWriteBuffer += uxCharsWrittenBySnprintf;\n                        }\n                        else\n                        {\n                            xOutputBufferFull = pdTRUE;\n                        }\n                    }\n                    else\n                    {\n                        xOutputBufferFull = pdTRUE;\n                    }\n\n                    if( xOutputBufferFull == pdTRUE )\n                    {\n                        break;\n                    }\n                }\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n\n            /* Free the array again.  NOTE!  If configSUPPORT_DYNAMIC_ALLOCATION\n             * is 0 then vPortFree() will be #defined to nothing. */\n            vPortFree( pxTaskStatusArray );\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_vTaskGetRunTimeStatistics();\n    }\n\n#endif /* ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) ) */\n/*-----------------------------------------------------------*/\n\nTickType_t uxTaskResetEventItemValue( void )\n{\n    TickType_t uxReturn;\n\n    traceENTER_uxTaskResetEventItemValue();\n\n    uxReturn = listGET_LIST_ITEM_VALUE( &( pxCurrentTCB->xEventListItem ) );\n\n    /* Reset the event list item to its normal value - so it can be used with\n     * queues and semaphores. */\n    listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xEventListItem ), ( ( TickType_t ) configMAX_PRIORITIES - ( TickType_t ) pxCurrentTCB->uxPriority ) );\n\n    traceRETURN_uxTaskResetEventItemValue( uxReturn );\n\n    return uxReturn;\n}\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_MUTEXES == 1 )\n\n    TaskHandle_t pvTaskIncrementMutexHeldCount( void )\n    {\n        TCB_t * pxTCB;\n\n        traceENTER_pvTaskIncrementMutexHeldCount();\n\n        pxTCB = pxCurrentTCB;\n\n        /* If xSemaphoreCreateMutex() is called before any tasks have been created\n         * then pxCurrentTCB will be NULL. */\n        if( pxTCB != NULL )\n        {\n            ( pxTCB->uxMutexesHeld )++;\n        }\n\n        traceRETURN_pvTaskIncrementMutexHeldCount( pxTCB );\n\n        return pxTCB;\n    }\n\n#endif /* configUSE_MUTEXES */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TASK_NOTIFICATIONS == 1 )\n\n    uint32_t ulTaskGenericNotifyTake( UBaseType_t uxIndexToWaitOn,\n                                      BaseType_t xClearCountOnExit,\n                                      TickType_t xTicksToWait )\n    {\n        uint32_t ulReturn;\n        BaseType_t xAlreadyYielded, xShouldBlock = pdFALSE;\n\n        traceENTER_ulTaskGenericNotifyTake( uxIndexToWaitOn, xClearCountOnExit, xTicksToWait );\n\n        configASSERT( uxIndexToWaitOn < configTASK_NOTIFICATION_ARRAY_ENTRIES );\n\n        /* We suspend the scheduler here as prvAddCurrentTaskToDelayedList is a\n         * non-deterministic operation. */\n        vTaskSuspendAll();\n        {\n            /* We MUST enter a critical section to atomically check if a notification\n             * has occurred and set the flag to indicate that we are waiting for\n             * a notification. If we do not do so, a notification sent from an ISR\n             * will get lost. */\n            taskENTER_CRITICAL();\n            {\n                /* Only block if the notification count is not already non-zero. */\n                if( pxCurrentTCB->ulNotifiedValue[ uxIndexToWaitOn ] == 0U )\n                {\n                    /* Mark this task as waiting for a notification. */\n                    pxCurrentTCB->ucNotifyState[ uxIndexToWaitOn ] = taskWAITING_NOTIFICATION;\n\n                    if( xTicksToWait > ( TickType_t ) 0 )\n                    {\n                        xShouldBlock = pdTRUE;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            taskEXIT_CRITICAL();\n\n            /* We are now out of the critical section but the scheduler is still\n             * suspended, so we are safe to do non-deterministic operations such\n             * as prvAddCurrentTaskToDelayedList. */\n            if( xShouldBlock == pdTRUE )\n            {\n                traceTASK_NOTIFY_TAKE_BLOCK( uxIndexToWaitOn );\n                prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE );\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        xAlreadyYielded = xTaskResumeAll();\n\n        /* Force a reschedule if xTaskResumeAll has not already done so. */\n        if( ( xShouldBlock == pdTRUE ) && ( xAlreadyYielded == pdFALSE ) )\n        {\n            taskYIELD_WITHIN_API();\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        taskENTER_CRITICAL();\n        {\n            traceTASK_NOTIFY_TAKE( uxIndexToWaitOn );\n            ulReturn = pxCurrentTCB->ulNotifiedValue[ uxIndexToWaitOn ];\n\n            if( ulReturn != 0U )\n            {\n                if( xClearCountOnExit != pdFALSE )\n                {\n                    pxCurrentTCB->ulNotifiedValue[ uxIndexToWaitOn ] = ( uint32_t ) 0U;\n                }\n                else\n                {\n                    pxCurrentTCB->ulNotifiedValue[ uxIndexToWaitOn ] = ulReturn - ( uint32_t ) 1;\n                }\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n\n            pxCurrentTCB->ucNotifyState[ uxIndexToWaitOn ] = taskNOT_WAITING_NOTIFICATION;\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_ulTaskGenericNotifyTake( ulReturn );\n\n        return ulReturn;\n    }\n\n#endif /* configUSE_TASK_NOTIFICATIONS */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TASK_NOTIFICATIONS == 1 )\n\n    BaseType_t xTaskGenericNotifyWait( UBaseType_t uxIndexToWaitOn,\n                                       uint32_t ulBitsToClearOnEntry,\n                                       uint32_t ulBitsToClearOnExit,\n                                       uint32_t * pulNotificationValue,\n                                       TickType_t xTicksToWait )\n    {\n        BaseType_t xReturn, xAlreadyYielded, xShouldBlock = pdFALSE;\n\n        traceENTER_xTaskGenericNotifyWait( uxIndexToWaitOn, ulBitsToClearOnEntry, ulBitsToClearOnExit, pulNotificationValue, xTicksToWait );\n\n        configASSERT( uxIndexToWaitOn < configTASK_NOTIFICATION_ARRAY_ENTRIES );\n\n        /* We suspend the scheduler here as prvAddCurrentTaskToDelayedList is a\n         * non-deterministic operation. */\n        vTaskSuspendAll();\n        {\n            /* We MUST enter a critical section to atomically check and update the\n             * task notification value. If we do not do so, a notification from\n             * an ISR will get lost. */\n            taskENTER_CRITICAL();\n            {\n                /* Only block if a notification is not already pending. */\n                if( pxCurrentTCB->ucNotifyState[ uxIndexToWaitOn ] != taskNOTIFICATION_RECEIVED )\n                {\n                    /* Clear bits in the task's notification value as bits may get\n                     * set by the notifying task or interrupt. This can be used\n                     * to clear the value to zero. */\n                    pxCurrentTCB->ulNotifiedValue[ uxIndexToWaitOn ] &= ~ulBitsToClearOnEntry;\n\n                    /* Mark this task as waiting for a notification. */\n                    pxCurrentTCB->ucNotifyState[ uxIndexToWaitOn ] = taskWAITING_NOTIFICATION;\n\n                    if( xTicksToWait > ( TickType_t ) 0 )\n                    {\n                        xShouldBlock = pdTRUE;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            taskEXIT_CRITICAL();\n\n            /* We are now out of the critical section but the scheduler is still\n             * suspended, so we are safe to do non-deterministic operations such\n             * as prvAddCurrentTaskToDelayedList. */\n            if( xShouldBlock == pdTRUE )\n            {\n                traceTASK_NOTIFY_WAIT_BLOCK( uxIndexToWaitOn );\n                prvAddCurrentTaskToDelayedList( xTicksToWait, pdTRUE );\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        xAlreadyYielded = xTaskResumeAll();\n\n        /* Force a reschedule if xTaskResumeAll has not already done so. */\n        if( ( xShouldBlock == pdTRUE ) && ( xAlreadyYielded == pdFALSE ) )\n        {\n            taskYIELD_WITHIN_API();\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        taskENTER_CRITICAL();\n        {\n            traceTASK_NOTIFY_WAIT( uxIndexToWaitOn );\n\n            if( pulNotificationValue != NULL )\n            {\n                /* Output the current notification value, which may or may not\n                 * have changed. */\n                *pulNotificationValue = pxCurrentTCB->ulNotifiedValue[ uxIndexToWaitOn ];\n            }\n\n            /* If ucNotifyValue is set then either the task never entered the\n             * blocked state (because a notification was already pending) or the\n             * task unblocked because of a notification.  Otherwise the task\n             * unblocked because of a timeout. */\n            if( pxCurrentTCB->ucNotifyState[ uxIndexToWaitOn ] != taskNOTIFICATION_RECEIVED )\n            {\n                /* A notification was not received. */\n                xReturn = pdFALSE;\n            }\n            else\n            {\n                /* A notification was already pending or a notification was\n                 * received while the task was waiting. */\n                pxCurrentTCB->ulNotifiedValue[ uxIndexToWaitOn ] &= ~ulBitsToClearOnExit;\n                xReturn = pdTRUE;\n            }\n\n            pxCurrentTCB->ucNotifyState[ uxIndexToWaitOn ] = taskNOT_WAITING_NOTIFICATION;\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_xTaskGenericNotifyWait( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_TASK_NOTIFICATIONS */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TASK_NOTIFICATIONS == 1 )\n\n    BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify,\n                                   UBaseType_t uxIndexToNotify,\n                                   uint32_t ulValue,\n                                   eNotifyAction eAction,\n                                   uint32_t * pulPreviousNotificationValue )\n    {\n        TCB_t * pxTCB;\n        BaseType_t xReturn = pdPASS;\n        uint8_t ucOriginalNotifyState;\n\n        traceENTER_xTaskGenericNotify( xTaskToNotify, uxIndexToNotify, ulValue, eAction, pulPreviousNotificationValue );\n\n        configASSERT( uxIndexToNotify < configTASK_NOTIFICATION_ARRAY_ENTRIES );\n        configASSERT( xTaskToNotify );\n        pxTCB = xTaskToNotify;\n\n        taskENTER_CRITICAL();\n        {\n            if( pulPreviousNotificationValue != NULL )\n            {\n                *pulPreviousNotificationValue = pxTCB->ulNotifiedValue[ uxIndexToNotify ];\n            }\n\n            ucOriginalNotifyState = pxTCB->ucNotifyState[ uxIndexToNotify ];\n\n            pxTCB->ucNotifyState[ uxIndexToNotify ] = taskNOTIFICATION_RECEIVED;\n\n            switch( eAction )\n            {\n                case eSetBits:\n                    pxTCB->ulNotifiedValue[ uxIndexToNotify ] |= ulValue;\n                    break;\n\n                case eIncrement:\n                    ( pxTCB->ulNotifiedValue[ uxIndexToNotify ] )++;\n                    break;\n\n                case eSetValueWithOverwrite:\n                    pxTCB->ulNotifiedValue[ uxIndexToNotify ] = ulValue;\n                    break;\n\n                case eSetValueWithoutOverwrite:\n\n                    if( ucOriginalNotifyState != taskNOTIFICATION_RECEIVED )\n                    {\n                        pxTCB->ulNotifiedValue[ uxIndexToNotify ] = ulValue;\n                    }\n                    else\n                    {\n                        /* The value could not be written to the task. */\n                        xReturn = pdFAIL;\n                    }\n\n                    break;\n\n                case eNoAction:\n\n                    /* The task is being notified without its notify value being\n                     * updated. */\n                    break;\n\n                default:\n\n                    /* Should not get here if all enums are handled.\n                     * Artificially force an assert by testing a value the\n                     * compiler can't assume is const. */\n                    configASSERT( xTickCount == ( TickType_t ) 0 );\n\n                    break;\n            }\n\n            traceTASK_NOTIFY( uxIndexToNotify );\n\n            /* If the task is in the blocked state specifically to wait for a\n             * notification then unblock it now. */\n            if( ucOriginalNotifyState == taskWAITING_NOTIFICATION )\n            {\n                listREMOVE_ITEM( &( pxTCB->xStateListItem ) );\n                prvAddTaskToReadyList( pxTCB );\n\n                /* The task should not have been on an event list. */\n                configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL );\n\n                #if ( configUSE_TICKLESS_IDLE != 0 )\n                {\n                    /* If a task is blocked waiting for a notification then\n                     * xNextTaskUnblockTime might be set to the blocked task's time\n                     * out time.  If the task is unblocked for a reason other than\n                     * a timeout xNextTaskUnblockTime is normally left unchanged,\n                     * because it will automatically get reset to a new value when\n                     * the tick count equals xNextTaskUnblockTime.  However if\n                     * tickless idling is used it might be more important to enter\n                     * sleep mode at the earliest possible time - so reset\n                     * xNextTaskUnblockTime here to ensure it is updated at the\n                     * earliest possible time. */\n                    prvResetNextTaskUnblockTime();\n                }\n                #endif\n\n                /* Check if the notified task has a priority above the currently\n                 * executing task. */\n                taskYIELD_ANY_CORE_IF_USING_PREEMPTION( pxTCB );\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_xTaskGenericNotify( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_TASK_NOTIFICATIONS */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TASK_NOTIFICATIONS == 1 )\n\n    BaseType_t xTaskGenericNotifyFromISR( TaskHandle_t xTaskToNotify,\n                                          UBaseType_t uxIndexToNotify,\n                                          uint32_t ulValue,\n                                          eNotifyAction eAction,\n                                          uint32_t * pulPreviousNotificationValue,\n                                          BaseType_t * pxHigherPriorityTaskWoken )\n    {\n        TCB_t * pxTCB;\n        uint8_t ucOriginalNotifyState;\n        BaseType_t xReturn = pdPASS;\n        UBaseType_t uxSavedInterruptStatus;\n\n        traceENTER_xTaskGenericNotifyFromISR( xTaskToNotify, uxIndexToNotify, ulValue, eAction, pulPreviousNotificationValue, pxHigherPriorityTaskWoken );\n\n        configASSERT( xTaskToNotify );\n        configASSERT( uxIndexToNotify < configTASK_NOTIFICATION_ARRAY_ENTRIES );\n\n        /* RTOS ports that support interrupt nesting have the concept of a\n         * maximum  system call (or maximum API call) interrupt priority.\n         * Interrupts that are  above the maximum system call priority are keep\n         * permanently enabled, even when the RTOS kernel is in a critical section,\n         * but cannot make any calls to FreeRTOS API functions.  If configASSERT()\n         * is defined in FreeRTOSConfig.h then\n         * portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion\n         * failure if a FreeRTOS API function is called from an interrupt that has\n         * been assigned a priority above the configured maximum system call\n         * priority.  Only FreeRTOS functions that end in FromISR can be called\n         * from interrupts  that have been assigned a priority at or (logically)\n         * below the maximum system call interrupt priority.  FreeRTOS maintains a\n         * separate interrupt safe API to ensure interrupt entry is as fast and as\n         * simple as possible.  More information (albeit Cortex-M specific) is\n         * provided on the following link:\n         * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */\n        portASSERT_IF_INTERRUPT_PRIORITY_INVALID();\n\n        pxTCB = xTaskToNotify;\n\n        /* MISRA Ref 4.7.1 [Return value shall be checked] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */\n        /* coverity[misra_c_2012_directive_4_7_violation] */\n        uxSavedInterruptStatus = ( UBaseType_t ) taskENTER_CRITICAL_FROM_ISR();\n        {\n            if( pulPreviousNotificationValue != NULL )\n            {\n                *pulPreviousNotificationValue = pxTCB->ulNotifiedValue[ uxIndexToNotify ];\n            }\n\n            ucOriginalNotifyState = pxTCB->ucNotifyState[ uxIndexToNotify ];\n            pxTCB->ucNotifyState[ uxIndexToNotify ] = taskNOTIFICATION_RECEIVED;\n\n            switch( eAction )\n            {\n                case eSetBits:\n                    pxTCB->ulNotifiedValue[ uxIndexToNotify ] |= ulValue;\n                    break;\n\n                case eIncrement:\n                    ( pxTCB->ulNotifiedValue[ uxIndexToNotify ] )++;\n                    break;\n\n                case eSetValueWithOverwrite:\n                    pxTCB->ulNotifiedValue[ uxIndexToNotify ] = ulValue;\n                    break;\n\n                case eSetValueWithoutOverwrite:\n\n                    if( ucOriginalNotifyState != taskNOTIFICATION_RECEIVED )\n                    {\n                        pxTCB->ulNotifiedValue[ uxIndexToNotify ] = ulValue;\n                    }\n                    else\n                    {\n                        /* The value could not be written to the task. */\n                        xReturn = pdFAIL;\n                    }\n\n                    break;\n\n                case eNoAction:\n\n                    /* The task is being notified without its notify value being\n                     * updated. */\n                    break;\n\n                default:\n\n                    /* Should not get here if all enums are handled.\n                     * Artificially force an assert by testing a value the\n                     * compiler can't assume is const. */\n                    configASSERT( xTickCount == ( TickType_t ) 0 );\n                    break;\n            }\n\n            traceTASK_NOTIFY_FROM_ISR( uxIndexToNotify );\n\n            /* If the task is in the blocked state specifically to wait for a\n             * notification then unblock it now. */\n            if( ucOriginalNotifyState == taskWAITING_NOTIFICATION )\n            {\n                /* The task should not have been on an event list. */\n                configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL );\n\n                if( uxSchedulerSuspended == ( UBaseType_t ) 0U )\n                {\n                    listREMOVE_ITEM( &( pxTCB->xStateListItem ) );\n                    prvAddTaskToReadyList( pxTCB );\n                }\n                else\n                {\n                    /* The delayed and ready lists cannot be accessed, so hold\n                     * this task pending until the scheduler is resumed. */\n                    listINSERT_END( &( xPendingReadyList ), &( pxTCB->xEventListItem ) );\n                }\n\n                #if ( configNUMBER_OF_CORES == 1 )\n                {\n                    if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )\n                    {\n                        /* The notified task has a priority above the currently\n                         * executing task so a yield is required. */\n                        if( pxHigherPriorityTaskWoken != NULL )\n                        {\n                            *pxHigherPriorityTaskWoken = pdTRUE;\n                        }\n\n                        /* Mark that a yield is pending in case the user is not\n                         * using the \"xHigherPriorityTaskWoken\" parameter to an ISR\n                         * safe FreeRTOS function. */\n                        xYieldPendings[ 0 ] = pdTRUE;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                #else /* #if ( configNUMBER_OF_CORES == 1 ) */\n                {\n                    #if ( configUSE_PREEMPTION == 1 )\n                    {\n                        prvYieldForTask( pxTCB );\n\n                        if( xYieldPendings[ portGET_CORE_ID() ] == pdTRUE )\n                        {\n                            if( pxHigherPriorityTaskWoken != NULL )\n                            {\n                                *pxHigherPriorityTaskWoken = pdTRUE;\n                            }\n                        }\n                    }\n                    #endif /* if ( configUSE_PREEMPTION == 1 ) */\n                }\n                #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n            }\n        }\n        taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );\n\n        traceRETURN_xTaskGenericNotifyFromISR( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_TASK_NOTIFICATIONS */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TASK_NOTIFICATIONS == 1 )\n\n    void vTaskGenericNotifyGiveFromISR( TaskHandle_t xTaskToNotify,\n                                        UBaseType_t uxIndexToNotify,\n                                        BaseType_t * pxHigherPriorityTaskWoken )\n    {\n        TCB_t * pxTCB;\n        uint8_t ucOriginalNotifyState;\n        UBaseType_t uxSavedInterruptStatus;\n\n        traceENTER_vTaskGenericNotifyGiveFromISR( xTaskToNotify, uxIndexToNotify, pxHigherPriorityTaskWoken );\n\n        configASSERT( xTaskToNotify );\n        configASSERT( uxIndexToNotify < configTASK_NOTIFICATION_ARRAY_ENTRIES );\n\n        /* RTOS ports that support interrupt nesting have the concept of a\n         * maximum  system call (or maximum API call) interrupt priority.\n         * Interrupts that are  above the maximum system call priority are keep\n         * permanently enabled, even when the RTOS kernel is in a critical section,\n         * but cannot make any calls to FreeRTOS API functions.  If configASSERT()\n         * is defined in FreeRTOSConfig.h then\n         * portASSERT_IF_INTERRUPT_PRIORITY_INVALID() will result in an assertion\n         * failure if a FreeRTOS API function is called from an interrupt that has\n         * been assigned a priority above the configured maximum system call\n         * priority.  Only FreeRTOS functions that end in FromISR can be called\n         * from interrupts  that have been assigned a priority at or (logically)\n         * below the maximum system call interrupt priority.  FreeRTOS maintains a\n         * separate interrupt safe API to ensure interrupt entry is as fast and as\n         * simple as possible.  More information (albeit Cortex-M specific) is\n         * provided on the following link:\n         * https://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html */\n        portASSERT_IF_INTERRUPT_PRIORITY_INVALID();\n\n        pxTCB = xTaskToNotify;\n\n        /* MISRA Ref 4.7.1 [Return value shall be checked] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#dir-47 */\n        /* coverity[misra_c_2012_directive_4_7_violation] */\n        uxSavedInterruptStatus = ( UBaseType_t ) taskENTER_CRITICAL_FROM_ISR();\n        {\n            ucOriginalNotifyState = pxTCB->ucNotifyState[ uxIndexToNotify ];\n            pxTCB->ucNotifyState[ uxIndexToNotify ] = taskNOTIFICATION_RECEIVED;\n\n            /* 'Giving' is equivalent to incrementing a count in a counting\n             * semaphore. */\n            ( pxTCB->ulNotifiedValue[ uxIndexToNotify ] )++;\n\n            traceTASK_NOTIFY_GIVE_FROM_ISR( uxIndexToNotify );\n\n            /* If the task is in the blocked state specifically to wait for a\n             * notification then unblock it now. */\n            if( ucOriginalNotifyState == taskWAITING_NOTIFICATION )\n            {\n                /* The task should not have been on an event list. */\n                configASSERT( listLIST_ITEM_CONTAINER( &( pxTCB->xEventListItem ) ) == NULL );\n\n                if( uxSchedulerSuspended == ( UBaseType_t ) 0U )\n                {\n                    listREMOVE_ITEM( &( pxTCB->xStateListItem ) );\n                    prvAddTaskToReadyList( pxTCB );\n                }\n                else\n                {\n                    /* The delayed and ready lists cannot be accessed, so hold\n                     * this task pending until the scheduler is resumed. */\n                    listINSERT_END( &( xPendingReadyList ), &( pxTCB->xEventListItem ) );\n                }\n\n                #if ( configNUMBER_OF_CORES == 1 )\n                {\n                    if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )\n                    {\n                        /* The notified task has a priority above the currently\n                         * executing task so a yield is required. */\n                        if( pxHigherPriorityTaskWoken != NULL )\n                        {\n                            *pxHigherPriorityTaskWoken = pdTRUE;\n                        }\n\n                        /* Mark that a yield is pending in case the user is not\n                         * using the \"xHigherPriorityTaskWoken\" parameter in an ISR\n                         * safe FreeRTOS function. */\n                        xYieldPendings[ 0 ] = pdTRUE;\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                #else /* #if ( configNUMBER_OF_CORES == 1 ) */\n                {\n                    #if ( configUSE_PREEMPTION == 1 )\n                    {\n                        prvYieldForTask( pxTCB );\n\n                        if( xYieldPendings[ portGET_CORE_ID() ] == pdTRUE )\n                        {\n                            if( pxHigherPriorityTaskWoken != NULL )\n                            {\n                                *pxHigherPriorityTaskWoken = pdTRUE;\n                            }\n                        }\n                    }\n                    #endif /* #if ( configUSE_PREEMPTION == 1 ) */\n                }\n                #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n            }\n        }\n        taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );\n\n        traceRETURN_vTaskGenericNotifyGiveFromISR();\n    }\n\n#endif /* configUSE_TASK_NOTIFICATIONS */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TASK_NOTIFICATIONS == 1 )\n\n    BaseType_t xTaskGenericNotifyStateClear( TaskHandle_t xTask,\n                                             UBaseType_t uxIndexToClear )\n    {\n        TCB_t * pxTCB;\n        BaseType_t xReturn;\n\n        traceENTER_xTaskGenericNotifyStateClear( xTask, uxIndexToClear );\n\n        configASSERT( uxIndexToClear < configTASK_NOTIFICATION_ARRAY_ENTRIES );\n\n        /* If null is passed in here then it is the calling task that is having\n         * its notification state cleared. */\n        pxTCB = prvGetTCBFromHandle( xTask );\n\n        taskENTER_CRITICAL();\n        {\n            if( pxTCB->ucNotifyState[ uxIndexToClear ] == taskNOTIFICATION_RECEIVED )\n            {\n                pxTCB->ucNotifyState[ uxIndexToClear ] = taskNOT_WAITING_NOTIFICATION;\n                xReturn = pdPASS;\n            }\n            else\n            {\n                xReturn = pdFAIL;\n            }\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_xTaskGenericNotifyStateClear( xReturn );\n\n        return xReturn;\n    }\n\n#endif /* configUSE_TASK_NOTIFICATIONS */\n/*-----------------------------------------------------------*/\n\n#if ( configUSE_TASK_NOTIFICATIONS == 1 )\n\n    uint32_t ulTaskGenericNotifyValueClear( TaskHandle_t xTask,\n                                            UBaseType_t uxIndexToClear,\n                                            uint32_t ulBitsToClear )\n    {\n        TCB_t * pxTCB;\n        uint32_t ulReturn;\n\n        traceENTER_ulTaskGenericNotifyValueClear( xTask, uxIndexToClear, ulBitsToClear );\n\n        configASSERT( uxIndexToClear < configTASK_NOTIFICATION_ARRAY_ENTRIES );\n\n        /* If null is passed in here then it is the calling task that is having\n         * its notification state cleared. */\n        pxTCB = prvGetTCBFromHandle( xTask );\n\n        taskENTER_CRITICAL();\n        {\n            /* Return the notification as it was before the bits were cleared,\n             * then clear the bit mask. */\n            ulReturn = pxTCB->ulNotifiedValue[ uxIndexToClear ];\n            pxTCB->ulNotifiedValue[ uxIndexToClear ] &= ~ulBitsToClear;\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_ulTaskGenericNotifyValueClear( ulReturn );\n\n        return ulReturn;\n    }\n\n#endif /* configUSE_TASK_NOTIFICATIONS */\n/*-----------------------------------------------------------*/\n\n#if ( configGENERATE_RUN_TIME_STATS == 1 )\n\n    configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimeCounter( const TaskHandle_t xTask )\n    {\n        TCB_t * pxTCB;\n\n        traceENTER_ulTaskGetRunTimeCounter( xTask );\n\n        pxTCB = prvGetTCBFromHandle( xTask );\n\n        traceRETURN_ulTaskGetRunTimeCounter( pxTCB->ulRunTimeCounter );\n\n        return pxTCB->ulRunTimeCounter;\n    }\n\n#endif /* if ( configGENERATE_RUN_TIME_STATS == 1 ) */\n/*-----------------------------------------------------------*/\n\n#if ( configGENERATE_RUN_TIME_STATS == 1 )\n\n    configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimePercent( const TaskHandle_t xTask )\n    {\n        TCB_t * pxTCB;\n        configRUN_TIME_COUNTER_TYPE ulTotalTime, ulReturn;\n\n        traceENTER_ulTaskGetRunTimePercent( xTask );\n\n        ulTotalTime = ( configRUN_TIME_COUNTER_TYPE ) portGET_RUN_TIME_COUNTER_VALUE();\n\n        /* For percentage calculations. */\n        ulTotalTime /= ( configRUN_TIME_COUNTER_TYPE ) 100;\n\n        /* Avoid divide by zero errors. */\n        if( ulTotalTime > ( configRUN_TIME_COUNTER_TYPE ) 0 )\n        {\n            pxTCB = prvGetTCBFromHandle( xTask );\n            ulReturn = pxTCB->ulRunTimeCounter / ulTotalTime;\n        }\n        else\n        {\n            ulReturn = 0;\n        }\n\n        traceRETURN_ulTaskGetRunTimePercent( ulReturn );\n\n        return ulReturn;\n    }\n\n#endif /* if ( configGENERATE_RUN_TIME_STATS == 1 ) */\n/*-----------------------------------------------------------*/\n\n#if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) )\n\n    configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimeCounter( void )\n    {\n        configRUN_TIME_COUNTER_TYPE ulReturn = 0;\n        BaseType_t i;\n\n        traceENTER_ulTaskGetIdleRunTimeCounter();\n\n        for( i = 0; i < ( BaseType_t ) configNUMBER_OF_CORES; i++ )\n        {\n            ulReturn += xIdleTaskHandles[ i ]->ulRunTimeCounter;\n        }\n\n        traceRETURN_ulTaskGetIdleRunTimeCounter( ulReturn );\n\n        return ulReturn;\n    }\n\n#endif /* if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) ) */\n/*-----------------------------------------------------------*/\n\n#if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) )\n\n    configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimePercent( void )\n    {\n        configRUN_TIME_COUNTER_TYPE ulTotalTime, ulReturn;\n        configRUN_TIME_COUNTER_TYPE ulRunTimeCounter = 0;\n        BaseType_t i;\n\n        traceENTER_ulTaskGetIdleRunTimePercent();\n\n        ulTotalTime = portGET_RUN_TIME_COUNTER_VALUE() * configNUMBER_OF_CORES;\n\n        /* For percentage calculations. */\n        ulTotalTime /= ( configRUN_TIME_COUNTER_TYPE ) 100;\n\n        /* Avoid divide by zero errors. */\n        if( ulTotalTime > ( configRUN_TIME_COUNTER_TYPE ) 0 )\n        {\n            for( i = 0; i < ( BaseType_t ) configNUMBER_OF_CORES; i++ )\n            {\n                ulRunTimeCounter += xIdleTaskHandles[ i ]->ulRunTimeCounter;\n            }\n\n            ulReturn = ulRunTimeCounter / ulTotalTime;\n        }\n        else\n        {\n            ulReturn = 0;\n        }\n\n        traceRETURN_ulTaskGetIdleRunTimePercent( ulReturn );\n\n        return ulReturn;\n    }\n\n#endif /* if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) ) */\n/*-----------------------------------------------------------*/\n\nstatic void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait,\n                                            const BaseType_t xCanBlockIndefinitely )\n{\n    TickType_t xTimeToWake;\n    const TickType_t xConstTickCount = xTickCount;\n    List_t * const pxDelayedList = pxDelayedTaskList;\n    List_t * const pxOverflowDelayedList = pxOverflowDelayedTaskList;\n\n    #if ( INCLUDE_xTaskAbortDelay == 1 )\n    {\n        /* About to enter a delayed list, so ensure the ucDelayAborted flag is\n         * reset to pdFALSE so it can be detected as having been set to pdTRUE\n         * when the task leaves the Blocked state. */\n        pxCurrentTCB->ucDelayAborted = ( uint8_t ) pdFALSE;\n    }\n    #endif\n\n    /* Remove the task from the ready list before adding it to the blocked list\n     * as the same list item is used for both lists. */\n    if( uxListRemove( &( pxCurrentTCB->xStateListItem ) ) == ( UBaseType_t ) 0 )\n    {\n        /* The current task must be in a ready list, so there is no need to\n         * check, and the port reset macro can be called directly. */\n        portRESET_READY_PRIORITY( pxCurrentTCB->uxPriority, uxTopReadyPriority );\n    }\n    else\n    {\n        mtCOVERAGE_TEST_MARKER();\n    }\n\n    #if ( INCLUDE_vTaskSuspend == 1 )\n    {\n        if( ( xTicksToWait == portMAX_DELAY ) && ( xCanBlockIndefinitely != pdFALSE ) )\n        {\n            /* Add the task to the suspended task list instead of a delayed task\n             * list to ensure it is not woken by a timing event.  It will block\n             * indefinitely. */\n            listINSERT_END( &xSuspendedTaskList, &( pxCurrentTCB->xStateListItem ) );\n        }\n        else\n        {\n            /* Calculate the time at which the task should be woken if the event\n             * does not occur.  This may overflow but this doesn't matter, the\n             * kernel will manage it correctly. */\n            xTimeToWake = xConstTickCount + xTicksToWait;\n\n            /* The list item will be inserted in wake time order. */\n            listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xStateListItem ), xTimeToWake );\n\n            if( xTimeToWake < xConstTickCount )\n            {\n                /* Wake time has overflowed.  Place this item in the overflow\n                 * list. */\n                traceMOVED_TASK_TO_OVERFLOW_DELAYED_LIST();\n                vListInsert( pxOverflowDelayedList, &( pxCurrentTCB->xStateListItem ) );\n            }\n            else\n            {\n                /* The wake time has not overflowed, so the current block list\n                 * is used. */\n                traceMOVED_TASK_TO_DELAYED_LIST();\n                vListInsert( pxDelayedList, &( pxCurrentTCB->xStateListItem ) );\n\n                /* If the task entering the blocked state was placed at the\n                 * head of the list of blocked tasks then xNextTaskUnblockTime\n                 * needs to be updated too. */\n                if( xTimeToWake < xNextTaskUnblockTime )\n                {\n                    xNextTaskUnblockTime = xTimeToWake;\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n        }\n    }\n    #else /* INCLUDE_vTaskSuspend */\n    {\n        /* Calculate the time at which the task should be woken if the event\n         * does not occur.  This may overflow but this doesn't matter, the kernel\n         * will manage it correctly. */\n        xTimeToWake = xConstTickCount + xTicksToWait;\n\n        /* The list item will be inserted in wake time order. */\n        listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xStateListItem ), xTimeToWake );\n\n        if( xTimeToWake < xConstTickCount )\n        {\n            traceMOVED_TASK_TO_OVERFLOW_DELAYED_LIST();\n            /* Wake time has overflowed.  Place this item in the overflow list. */\n            vListInsert( pxOverflowDelayedList, &( pxCurrentTCB->xStateListItem ) );\n        }\n        else\n        {\n            traceMOVED_TASK_TO_DELAYED_LIST();\n            /* The wake time has not overflowed, so the current block list is used. */\n            vListInsert( pxDelayedList, &( pxCurrentTCB->xStateListItem ) );\n\n            /* If the task entering the blocked state was placed at the head of the\n             * list of blocked tasks then xNextTaskUnblockTime needs to be updated\n             * too. */\n            if( xTimeToWake < xNextTaskUnblockTime )\n            {\n                xNextTaskUnblockTime = xTimeToWake;\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n\n        /* Avoid compiler warning when INCLUDE_vTaskSuspend is not 1. */\n        ( void ) xCanBlockIndefinitely;\n    }\n    #endif /* INCLUDE_vTaskSuspend */\n}\n/*-----------------------------------------------------------*/\n\n#if ( portUSING_MPU_WRAPPERS == 1 )\n\n    xMPU_SETTINGS * xTaskGetMPUSettings( TaskHandle_t xTask )\n    {\n        TCB_t * pxTCB;\n\n        traceENTER_xTaskGetMPUSettings( xTask );\n\n        pxTCB = prvGetTCBFromHandle( xTask );\n\n        traceRETURN_xTaskGetMPUSettings( &( pxTCB->xMPUSettings ) );\n\n        return &( pxTCB->xMPUSettings );\n    }\n\n#endif /* portUSING_MPU_WRAPPERS */\n/*-----------------------------------------------------------*/\n\n/* Code below here allows additional code to be inserted into this source file,\n * especially where access to file scope functions and data is needed (for example\n * when performing module tests). */\n\n#ifdef FREERTOS_MODULE_TEST\n    #include \"tasks_test_access_functions.h\"\n#endif\n\n\n#if ( configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H == 1 )\n\n    #include \"freertos_tasks_c_additions.h\"\n\n    #ifdef FREERTOS_TASKS_C_ADDITIONS_INIT\n        static void freertos_tasks_c_additions_init( void )\n        {\n            FREERTOS_TASKS_C_ADDITIONS_INIT();\n        }\n    #endif\n\n#endif /* if ( configINCLUDE_FREERTOS_TASK_C_ADDITIONS_H == 1 ) */\n/*-----------------------------------------------------------*/\n\n#if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configKERNEL_PROVIDED_STATIC_MEMORY == 1 ) && ( portUSING_MPU_WRAPPERS == 0 ) )\n\n/*\n * This is the kernel provided implementation of vApplicationGetIdleTaskMemory()\n * to provide the memory that is used by the Idle task. It is used when\n * configKERNEL_PROVIDED_STATIC_MEMORY is set to 1. The application can provide\n * it's own implementation of vApplicationGetIdleTaskMemory by setting\n * configKERNEL_PROVIDED_STATIC_MEMORY to 0 or leaving it undefined.\n */\n    void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,\n                                        StackType_t ** ppxIdleTaskStackBuffer,\n                                        configSTACK_DEPTH_TYPE * puxIdleTaskStackSize )\n    {\n        static StaticTask_t xIdleTaskTCB;\n        static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ];\n\n        *ppxIdleTaskTCBBuffer = &( xIdleTaskTCB );\n        *ppxIdleTaskStackBuffer = &( uxIdleTaskStack[ 0 ] );\n        *puxIdleTaskStackSize = configMINIMAL_STACK_SIZE;\n    }\n\n    #if ( configNUMBER_OF_CORES > 1 )\n\n        void vApplicationGetPassiveIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,\n                                                   StackType_t ** ppxIdleTaskStackBuffer,\n                                                   configSTACK_DEPTH_TYPE * puxIdleTaskStackSize,\n                                                   BaseType_t xPassiveIdleTaskIndex )\n        {\n            static StaticTask_t xIdleTaskTCBs[ configNUMBER_OF_CORES - 1 ];\n            static StackType_t uxIdleTaskStacks[ configNUMBER_OF_CORES - 1 ][ configMINIMAL_STACK_SIZE ];\n\n            *ppxIdleTaskTCBBuffer = &( xIdleTaskTCBs[ xPassiveIdleTaskIndex ] );\n            *ppxIdleTaskStackBuffer = &( uxIdleTaskStacks[ xPassiveIdleTaskIndex ][ 0 ] );\n            *puxIdleTaskStackSize = configMINIMAL_STACK_SIZE;\n        }\n\n    #endif /* #if ( configNUMBER_OF_CORES > 1 ) */\n\n#endif /* #if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configKERNEL_PROVIDED_STATIC_MEMORY == 1 ) && ( portUSING_MPU_WRAPPERS == 0 ) ) */\n/*-----------------------------------------------------------*/\n\n#if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configKERNEL_PROVIDED_STATIC_MEMORY == 1 ) && ( portUSING_MPU_WRAPPERS == 0 ) )\n\n/*\n * This is the kernel provided implementation of vApplicationGetTimerTaskMemory()\n * to provide the memory that is used by the Timer service task. It is used when\n * configKERNEL_PROVIDED_STATIC_MEMORY is set to 1. The application can provide\n * it's own implementation of vApplicationGetTimerTaskMemory by setting\n * configKERNEL_PROVIDED_STATIC_MEMORY to 0 or leaving it undefined.\n */\n    void vApplicationGetTimerTaskMemory( StaticTask_t ** ppxTimerTaskTCBBuffer,\n                                         StackType_t ** ppxTimerTaskStackBuffer,\n                                         configSTACK_DEPTH_TYPE * puxTimerTaskStackSize )\n    {\n        static StaticTask_t xTimerTaskTCB;\n        static StackType_t uxTimerTaskStack[ configTIMER_TASK_STACK_DEPTH ];\n\n        *ppxTimerTaskTCBBuffer = &( xTimerTaskTCB );\n        *ppxTimerTaskStackBuffer = &( uxTimerTaskStack[ 0 ] );\n        *puxTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;\n    }\n\n#endif /* #if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configKERNEL_PROVIDED_STATIC_MEMORY == 1 ) && ( portUSING_MPU_WRAPPERS == 0 ) ) */\n/*-----------------------------------------------------------*/\n\n/*\n * Reset the state in this file. This state is normally initialized at start up.\n * This function must be called by the application before restarting the\n * scheduler.\n */\nvoid vTaskResetState( void )\n{\n    BaseType_t xCoreID;\n\n    /* Task control block. */\n    #if ( configNUMBER_OF_CORES == 1 )\n    {\n        pxCurrentTCB = NULL;\n    }\n    #endif /* #if ( configNUMBER_OF_CORES == 1 ) */\n\n    #if ( INCLUDE_vTaskDelete == 1 )\n    {\n        uxDeletedTasksWaitingCleanUp = ( UBaseType_t ) 0U;\n    }\n    #endif /* #if ( INCLUDE_vTaskDelete == 1 ) */\n\n    #if ( configUSE_POSIX_ERRNO == 1 )\n    {\n        FreeRTOS_errno = 0;\n    }\n    #endif /* #if ( configUSE_POSIX_ERRNO == 1 ) */\n\n    /* Other file private variables. */\n    uxCurrentNumberOfTasks = ( UBaseType_t ) 0U;\n    xTickCount = ( TickType_t ) configINITIAL_TICK_COUNT;\n    uxTopReadyPriority = tskIDLE_PRIORITY;\n    xSchedulerRunning = pdFALSE;\n    xPendedTicks = ( TickType_t ) 0U;\n\n    for( xCoreID = 0; xCoreID < configNUMBER_OF_CORES; xCoreID++ )\n    {\n        xYieldPendings[ xCoreID ] = pdFALSE;\n    }\n\n    xNumOfOverflows = ( BaseType_t ) 0;\n    uxTaskNumber = ( UBaseType_t ) 0U;\n    xNextTaskUnblockTime = ( TickType_t ) 0U;\n\n    uxSchedulerSuspended = ( UBaseType_t ) 0U;\n\n    #if ( configGENERATE_RUN_TIME_STATS == 1 )\n    {\n        for( xCoreID = 0; xCoreID < configNUMBER_OF_CORES; xCoreID++ )\n        {\n            ulTaskSwitchedInTime[ xCoreID ] = 0U;\n            ulTotalRunTime[ xCoreID ] = 0U;\n        }\n    }\n    #endif /* #if ( configGENERATE_RUN_TIME_STATS == 1 ) */\n}\n/*-----------------------------------------------------------*/\n"
  },
  {
    "path": "source/Middlewares/Third_Party/FreeRTOS/Source/timers.c",
    "content": "/*\n * FreeRTOS Kernel V11.1.0\n * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * SPDX-License-Identifier: MIT\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * https://www.FreeRTOS.org\n * https://github.com/FreeRTOS\n *\n */\n\n/* Standard includes. */\n#include <stdlib.h>\n\n/* Defining MPU_WRAPPERS_INCLUDED_FROM_API_FILE prevents task.h from redefining\n * all the API functions to use the MPU wrappers.  That should only be done when\n * task.h is included from an application file. */\n#define MPU_WRAPPERS_INCLUDED_FROM_API_FILE\n\n#include \"FreeRTOS.h\"\n#include \"task.h\"\n#include \"queue.h\"\n#include \"timers.h\"\n\n#if ( INCLUDE_xTimerPendFunctionCall == 1 ) && ( configUSE_TIMERS == 0 )\n    #error configUSE_TIMERS must be set to 1 to make the xTimerPendFunctionCall() function available.\n#endif\n\n/* The MPU ports require MPU_WRAPPERS_INCLUDED_FROM_API_FILE to be defined\n * for the header files above, but not in this file, in order to generate the\n * correct privileged Vs unprivileged linkage and placement. */\n#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE\n\n\n/* This entire source file will be skipped if the application is not configured\n * to include software timer functionality.  This #if is closed at the very bottom\n * of this file.  If you want to include software timer functionality then ensure\n * configUSE_TIMERS is set to 1 in FreeRTOSConfig.h. */\n#if ( configUSE_TIMERS == 1 )\n\n/* Misc definitions. */\n    #define tmrNO_DELAY                    ( ( TickType_t ) 0U )\n    #define tmrMAX_TIME_BEFORE_OVERFLOW    ( ( TickType_t ) -1 )\n\n/* The name assigned to the timer service task. This can be overridden by\n * defining configTIMER_SERVICE_TASK_NAME in FreeRTOSConfig.h. */\n    #ifndef configTIMER_SERVICE_TASK_NAME\n        #define configTIMER_SERVICE_TASK_NAME    \"Tmr Svc\"\n    #endif\n\n    #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n\n/* The core affinity assigned to the timer service task on SMP systems.\n * This can be overridden by defining configTIMER_SERVICE_TASK_CORE_AFFINITY in FreeRTOSConfig.h. */\n        #ifndef configTIMER_SERVICE_TASK_CORE_AFFINITY\n            #define configTIMER_SERVICE_TASK_CORE_AFFINITY    tskNO_AFFINITY\n        #endif\n    #endif /* #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) ) */\n\n/* Bit definitions used in the ucStatus member of a timer structure. */\n    #define tmrSTATUS_IS_ACTIVE                  ( 0x01U )\n    #define tmrSTATUS_IS_STATICALLY_ALLOCATED    ( 0x02U )\n    #define tmrSTATUS_IS_AUTORELOAD              ( 0x04U )\n\n/* The definition of the timers themselves. */\n    typedef struct tmrTimerControl                                               /* The old naming convention is used to prevent breaking kernel aware debuggers. */\n    {\n        const char * pcTimerName;                                                /**< Text name.  This is not used by the kernel, it is included simply to make debugging easier. */\n        ListItem_t xTimerListItem;                                               /**< Standard linked list item as used by all kernel features for event management. */\n        TickType_t xTimerPeriodInTicks;                                          /**< How quickly and often the timer expires. */\n        void * pvTimerID;                                                        /**< An ID to identify the timer.  This allows the timer to be identified when the same callback is used for multiple timers. */\n        portTIMER_CALLBACK_ATTRIBUTE TimerCallbackFunction_t pxCallbackFunction; /**< The function that will be called when the timer expires. */\n        #if ( configUSE_TRACE_FACILITY == 1 )\n            UBaseType_t uxTimerNumber;                                           /**< An ID assigned by trace tools such as FreeRTOS+Trace */\n        #endif\n        uint8_t ucStatus;                                                        /**< Holds bits to say if the timer was statically allocated or not, and if it is active or not. */\n    } xTIMER;\n\n/* The old xTIMER name is maintained above then typedefed to the new Timer_t\n * name below to enable the use of older kernel aware debuggers. */\n    typedef xTIMER Timer_t;\n\n/* The definition of messages that can be sent and received on the timer queue.\n * Two types of message can be queued - messages that manipulate a software timer,\n * and messages that request the execution of a non-timer related callback.  The\n * two message types are defined in two separate structures, xTimerParametersType\n * and xCallbackParametersType respectively. */\n    typedef struct tmrTimerParameters\n    {\n        TickType_t xMessageValue; /**< An optional value used by a subset of commands, for example, when changing the period of a timer. */\n        Timer_t * pxTimer;        /**< The timer to which the command will be applied. */\n    } TimerParameter_t;\n\n\n    typedef struct tmrCallbackParameters\n    {\n        portTIMER_CALLBACK_ATTRIBUTE\n        PendedFunction_t pxCallbackFunction; /* << The callback function to execute. */\n        void * pvParameter1;                 /* << The value that will be used as the callback functions first parameter. */\n        uint32_t ulParameter2;               /* << The value that will be used as the callback functions second parameter. */\n    } CallbackParameters_t;\n\n/* The structure that contains the two message types, along with an identifier\n * that is used to determine which message type is valid. */\n    typedef struct tmrTimerQueueMessage\n    {\n        BaseType_t xMessageID; /**< The command being sent to the timer service task. */\n        union\n        {\n            TimerParameter_t xTimerParameters;\n\n            /* Don't include xCallbackParameters if it is not going to be used as\n             * it makes the structure (and therefore the timer queue) larger. */\n            #if ( INCLUDE_xTimerPendFunctionCall == 1 )\n                CallbackParameters_t xCallbackParameters;\n            #endif /* INCLUDE_xTimerPendFunctionCall */\n        } u;\n    } DaemonTaskMessage_t;\n\n/* The list in which active timers are stored.  Timers are referenced in expire\n * time order, with the nearest expiry time at the front of the list.  Only the\n * timer service task is allowed to access these lists.\n * xActiveTimerList1 and xActiveTimerList2 could be at function scope but that\n * breaks some kernel aware debuggers, and debuggers that reply on removing the\n * static qualifier. */\n    PRIVILEGED_DATA static List_t xActiveTimerList1;\n    PRIVILEGED_DATA static List_t xActiveTimerList2;\n    PRIVILEGED_DATA static List_t * pxCurrentTimerList;\n    PRIVILEGED_DATA static List_t * pxOverflowTimerList;\n\n/* A queue that is used to send commands to the timer service task. */\n    PRIVILEGED_DATA static QueueHandle_t xTimerQueue = NULL;\n    PRIVILEGED_DATA static TaskHandle_t xTimerTaskHandle = NULL;\n\n/*-----------------------------------------------------------*/\n\n/*\n * Initialise the infrastructure used by the timer service task if it has not\n * been initialised already.\n */\n    static void prvCheckForValidListAndQueue( void ) PRIVILEGED_FUNCTION;\n\n/*\n * The timer service task (daemon).  Timer functionality is controlled by this\n * task.  Other tasks communicate with the timer service task using the\n * xTimerQueue queue.\n */\n    static portTASK_FUNCTION_PROTO( prvTimerTask, pvParameters ) PRIVILEGED_FUNCTION;\n\n/*\n * Called by the timer service task to interpret and process a command it\n * received on the timer queue.\n */\n    static void prvProcessReceivedCommands( void ) PRIVILEGED_FUNCTION;\n\n/*\n * Insert the timer into either xActiveTimerList1, or xActiveTimerList2,\n * depending on if the expire time causes a timer counter overflow.\n */\n    static BaseType_t prvInsertTimerInActiveList( Timer_t * const pxTimer,\n                                                  const TickType_t xNextExpiryTime,\n                                                  const TickType_t xTimeNow,\n                                                  const TickType_t xCommandTime ) PRIVILEGED_FUNCTION;\n\n/*\n * Reload the specified auto-reload timer.  If the reloading is backlogged,\n * clear the backlog, calling the callback for each additional reload.  When\n * this function returns, the next expiry time is after xTimeNow.\n */\n    static void prvReloadTimer( Timer_t * const pxTimer,\n                                TickType_t xExpiredTime,\n                                const TickType_t xTimeNow ) PRIVILEGED_FUNCTION;\n\n/*\n * An active timer has reached its expire time.  Reload the timer if it is an\n * auto-reload timer, then call its callback.\n */\n    static void prvProcessExpiredTimer( const TickType_t xNextExpireTime,\n                                        const TickType_t xTimeNow ) PRIVILEGED_FUNCTION;\n\n/*\n * The tick count has overflowed.  Switch the timer lists after ensuring the\n * current timer list does not still reference some timers.\n */\n    static void prvSwitchTimerLists( void ) PRIVILEGED_FUNCTION;\n\n/*\n * Obtain the current tick count, setting *pxTimerListsWereSwitched to pdTRUE\n * if a tick count overflow occurred since prvSampleTimeNow() was last called.\n */\n    static TickType_t prvSampleTimeNow( BaseType_t * const pxTimerListsWereSwitched ) PRIVILEGED_FUNCTION;\n\n/*\n * If the timer list contains any active timers then return the expire time of\n * the timer that will expire first and set *pxListWasEmpty to false.  If the\n * timer list does not contain any timers then return 0 and set *pxListWasEmpty\n * to pdTRUE.\n */\n    static TickType_t prvGetNextExpireTime( BaseType_t * const pxListWasEmpty ) PRIVILEGED_FUNCTION;\n\n/*\n * If a timer has expired, process it.  Otherwise, block the timer service task\n * until either a timer does expire or a command is received.\n */\n    static void prvProcessTimerOrBlockTask( const TickType_t xNextExpireTime,\n                                            BaseType_t xListWasEmpty ) PRIVILEGED_FUNCTION;\n\n/*\n * Called after a Timer_t structure has been allocated either statically or\n * dynamically to fill in the structure's members.\n */\n    static void prvInitialiseNewTimer( const char * const pcTimerName,\n                                       const TickType_t xTimerPeriodInTicks,\n                                       const BaseType_t xAutoReload,\n                                       void * const pvTimerID,\n                                       TimerCallbackFunction_t pxCallbackFunction,\n                                       Timer_t * pxNewTimer ) PRIVILEGED_FUNCTION;\n/*-----------------------------------------------------------*/\n\n    BaseType_t xTimerCreateTimerTask( void )\n    {\n        BaseType_t xReturn = pdFAIL;\n\n        traceENTER_xTimerCreateTimerTask();\n\n        /* This function is called when the scheduler is started if\n         * configUSE_TIMERS is set to 1.  Check that the infrastructure used by the\n         * timer service task has been created/initialised.  If timers have already\n         * been created then the initialisation will already have been performed. */\n        prvCheckForValidListAndQueue();\n\n        if( xTimerQueue != NULL )\n        {\n            #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) )\n            {\n                #if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n                {\n                    StaticTask_t * pxTimerTaskTCBBuffer = NULL;\n                    StackType_t * pxTimerTaskStackBuffer = NULL;\n                    configSTACK_DEPTH_TYPE uxTimerTaskStackSize;\n\n                    vApplicationGetTimerTaskMemory( &pxTimerTaskTCBBuffer, &pxTimerTaskStackBuffer, &uxTimerTaskStackSize );\n                    xTimerTaskHandle = xTaskCreateStaticAffinitySet( prvTimerTask,\n                                                                     configTIMER_SERVICE_TASK_NAME,\n                                                                     uxTimerTaskStackSize,\n                                                                     NULL,\n                                                                     ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT,\n                                                                     pxTimerTaskStackBuffer,\n                                                                     pxTimerTaskTCBBuffer,\n                                                                     configTIMER_SERVICE_TASK_CORE_AFFINITY );\n\n                    if( xTimerTaskHandle != NULL )\n                    {\n                        xReturn = pdPASS;\n                    }\n                }\n                #else /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */\n                {\n                    xReturn = xTaskCreateAffinitySet( prvTimerTask,\n                                                      configTIMER_SERVICE_TASK_NAME,\n                                                      configTIMER_TASK_STACK_DEPTH,\n                                                      NULL,\n                                                      ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT,\n                                                      configTIMER_SERVICE_TASK_CORE_AFFINITY,\n                                                      &xTimerTaskHandle );\n                }\n                #endif /* configSUPPORT_STATIC_ALLOCATION */\n            }\n            #else /* #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) ) */\n            {\n                #if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n                {\n                    StaticTask_t * pxTimerTaskTCBBuffer = NULL;\n                    StackType_t * pxTimerTaskStackBuffer = NULL;\n                    configSTACK_DEPTH_TYPE uxTimerTaskStackSize;\n\n                    vApplicationGetTimerTaskMemory( &pxTimerTaskTCBBuffer, &pxTimerTaskStackBuffer, &uxTimerTaskStackSize );\n                    xTimerTaskHandle = xTaskCreateStatic( prvTimerTask,\n                                                          configTIMER_SERVICE_TASK_NAME,\n                                                          uxTimerTaskStackSize,\n                                                          NULL,\n                                                          ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT,\n                                                          pxTimerTaskStackBuffer,\n                                                          pxTimerTaskTCBBuffer );\n\n                    if( xTimerTaskHandle != NULL )\n                    {\n                        xReturn = pdPASS;\n                    }\n                }\n                #else /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */\n                {\n                    xReturn = xTaskCreate( prvTimerTask,\n                                           configTIMER_SERVICE_TASK_NAME,\n                                           configTIMER_TASK_STACK_DEPTH,\n                                           NULL,\n                                           ( ( UBaseType_t ) configTIMER_TASK_PRIORITY ) | portPRIVILEGE_BIT,\n                                           &xTimerTaskHandle );\n                }\n                #endif /* configSUPPORT_STATIC_ALLOCATION */\n            }\n            #endif /* #if ( ( configNUMBER_OF_CORES > 1 ) && ( configUSE_CORE_AFFINITY == 1 ) ) */\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        configASSERT( xReturn );\n\n        traceRETURN_xTimerCreateTimerTask( xReturn );\n\n        return xReturn;\n    }\n/*-----------------------------------------------------------*/\n\n    #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n\n        TimerHandle_t xTimerCreate( const char * const pcTimerName,\n                                    const TickType_t xTimerPeriodInTicks,\n                                    const BaseType_t xAutoReload,\n                                    void * const pvTimerID,\n                                    TimerCallbackFunction_t pxCallbackFunction )\n        {\n            Timer_t * pxNewTimer;\n\n            traceENTER_xTimerCreate( pcTimerName, xTimerPeriodInTicks, xAutoReload, pvTimerID, pxCallbackFunction );\n\n            /* MISRA Ref 11.5.1 [Malloc memory assignment] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n            /* coverity[misra_c_2012_rule_11_5_violation] */\n            pxNewTimer = ( Timer_t * ) pvPortMalloc( sizeof( Timer_t ) );\n\n            if( pxNewTimer != NULL )\n            {\n                /* Status is thus far zero as the timer is not created statically\n                 * and has not been started.  The auto-reload bit may get set in\n                 * prvInitialiseNewTimer. */\n                pxNewTimer->ucStatus = 0x00;\n                prvInitialiseNewTimer( pcTimerName, xTimerPeriodInTicks, xAutoReload, pvTimerID, pxCallbackFunction, pxNewTimer );\n            }\n\n            traceRETURN_xTimerCreate( pxNewTimer );\n\n            return pxNewTimer;\n        }\n\n    #endif /* configSUPPORT_DYNAMIC_ALLOCATION */\n/*-----------------------------------------------------------*/\n\n    #if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n\n        TimerHandle_t xTimerCreateStatic( const char * const pcTimerName,\n                                          const TickType_t xTimerPeriodInTicks,\n                                          const BaseType_t xAutoReload,\n                                          void * const pvTimerID,\n                                          TimerCallbackFunction_t pxCallbackFunction,\n                                          StaticTimer_t * pxTimerBuffer )\n        {\n            Timer_t * pxNewTimer;\n\n            traceENTER_xTimerCreateStatic( pcTimerName, xTimerPeriodInTicks, xAutoReload, pvTimerID, pxCallbackFunction, pxTimerBuffer );\n\n            #if ( configASSERT_DEFINED == 1 )\n            {\n                /* Sanity check that the size of the structure used to declare a\n                 * variable of type StaticTimer_t equals the size of the real timer\n                 * structure. */\n                volatile size_t xSize = sizeof( StaticTimer_t );\n                configASSERT( xSize == sizeof( Timer_t ) );\n                ( void ) xSize; /* Prevent unused variable warning when configASSERT() is not defined. */\n            }\n            #endif /* configASSERT_DEFINED */\n\n            /* A pointer to a StaticTimer_t structure MUST be provided, use it. */\n            configASSERT( pxTimerBuffer );\n            /* MISRA Ref 11.3.1 [Misaligned access] */\n            /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-113 */\n            /* coverity[misra_c_2012_rule_11_3_violation] */\n            pxNewTimer = ( Timer_t * ) pxTimerBuffer;\n\n            if( pxNewTimer != NULL )\n            {\n                /* Timers can be created statically or dynamically so note this\n                 * timer was created statically in case it is later deleted.  The\n                 * auto-reload bit may get set in prvInitialiseNewTimer(). */\n                pxNewTimer->ucStatus = ( uint8_t ) tmrSTATUS_IS_STATICALLY_ALLOCATED;\n\n                prvInitialiseNewTimer( pcTimerName, xTimerPeriodInTicks, xAutoReload, pvTimerID, pxCallbackFunction, pxNewTimer );\n            }\n\n            traceRETURN_xTimerCreateStatic( pxNewTimer );\n\n            return pxNewTimer;\n        }\n\n    #endif /* configSUPPORT_STATIC_ALLOCATION */\n/*-----------------------------------------------------------*/\n\n    static void prvInitialiseNewTimer( const char * const pcTimerName,\n                                       const TickType_t xTimerPeriodInTicks,\n                                       const BaseType_t xAutoReload,\n                                       void * const pvTimerID,\n                                       TimerCallbackFunction_t pxCallbackFunction,\n                                       Timer_t * pxNewTimer )\n    {\n        /* 0 is not a valid value for xTimerPeriodInTicks. */\n        configASSERT( ( xTimerPeriodInTicks > 0 ) );\n\n        /* Ensure the infrastructure used by the timer service task has been\n         * created/initialised. */\n        prvCheckForValidListAndQueue();\n\n        /* Initialise the timer structure members using the function\n         * parameters. */\n        pxNewTimer->pcTimerName = pcTimerName;\n        pxNewTimer->xTimerPeriodInTicks = xTimerPeriodInTicks;\n        pxNewTimer->pvTimerID = pvTimerID;\n        pxNewTimer->pxCallbackFunction = pxCallbackFunction;\n        vListInitialiseItem( &( pxNewTimer->xTimerListItem ) );\n\n        if( xAutoReload != pdFALSE )\n        {\n            pxNewTimer->ucStatus |= ( uint8_t ) tmrSTATUS_IS_AUTORELOAD;\n        }\n\n        traceTIMER_CREATE( pxNewTimer );\n    }\n/*-----------------------------------------------------------*/\n\n    BaseType_t xTimerGenericCommandFromTask( TimerHandle_t xTimer,\n                                             const BaseType_t xCommandID,\n                                             const TickType_t xOptionalValue,\n                                             BaseType_t * const pxHigherPriorityTaskWoken,\n                                             const TickType_t xTicksToWait )\n    {\n        BaseType_t xReturn = pdFAIL;\n        DaemonTaskMessage_t xMessage;\n\n        ( void ) pxHigherPriorityTaskWoken;\n\n        traceENTER_xTimerGenericCommandFromTask( xTimer, xCommandID, xOptionalValue, pxHigherPriorityTaskWoken, xTicksToWait );\n\n        configASSERT( xTimer );\n\n        /* Send a message to the timer service task to perform a particular action\n         * on a particular timer definition. */\n        if( xTimerQueue != NULL )\n        {\n            /* Send a command to the timer service task to start the xTimer timer. */\n            xMessage.xMessageID = xCommandID;\n            xMessage.u.xTimerParameters.xMessageValue = xOptionalValue;\n            xMessage.u.xTimerParameters.pxTimer = xTimer;\n\n            configASSERT( xCommandID < tmrFIRST_FROM_ISR_COMMAND );\n\n            if( xCommandID < tmrFIRST_FROM_ISR_COMMAND )\n            {\n                if( xTaskGetSchedulerState() == taskSCHEDULER_RUNNING )\n                {\n                    xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xTicksToWait );\n                }\n                else\n                {\n                    xReturn = xQueueSendToBack( xTimerQueue, &xMessage, tmrNO_DELAY );\n                }\n            }\n\n            traceTIMER_COMMAND_SEND( xTimer, xCommandID, xOptionalValue, xReturn );\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_xTimerGenericCommandFromTask( xReturn );\n\n        return xReturn;\n    }\n/*-----------------------------------------------------------*/\n\n    BaseType_t xTimerGenericCommandFromISR( TimerHandle_t xTimer,\n                                            const BaseType_t xCommandID,\n                                            const TickType_t xOptionalValue,\n                                            BaseType_t * const pxHigherPriorityTaskWoken,\n                                            const TickType_t xTicksToWait )\n    {\n        BaseType_t xReturn = pdFAIL;\n        DaemonTaskMessage_t xMessage;\n\n        ( void ) xTicksToWait;\n\n        traceENTER_xTimerGenericCommandFromISR( xTimer, xCommandID, xOptionalValue, pxHigherPriorityTaskWoken, xTicksToWait );\n\n        configASSERT( xTimer );\n\n        /* Send a message to the timer service task to perform a particular action\n         * on a particular timer definition. */\n        if( xTimerQueue != NULL )\n        {\n            /* Send a command to the timer service task to start the xTimer timer. */\n            xMessage.xMessageID = xCommandID;\n            xMessage.u.xTimerParameters.xMessageValue = xOptionalValue;\n            xMessage.u.xTimerParameters.pxTimer = xTimer;\n\n            configASSERT( xCommandID >= tmrFIRST_FROM_ISR_COMMAND );\n\n            if( xCommandID >= tmrFIRST_FROM_ISR_COMMAND )\n            {\n                xReturn = xQueueSendToBackFromISR( xTimerQueue, &xMessage, pxHigherPriorityTaskWoken );\n            }\n\n            traceTIMER_COMMAND_SEND( xTimer, xCommandID, xOptionalValue, xReturn );\n        }\n        else\n        {\n            mtCOVERAGE_TEST_MARKER();\n        }\n\n        traceRETURN_xTimerGenericCommandFromISR( xReturn );\n\n        return xReturn;\n    }\n/*-----------------------------------------------------------*/\n\n    TaskHandle_t xTimerGetTimerDaemonTaskHandle( void )\n    {\n        traceENTER_xTimerGetTimerDaemonTaskHandle();\n\n        /* If xTimerGetTimerDaemonTaskHandle() is called before the scheduler has been\n         * started, then xTimerTaskHandle will be NULL. */\n        configASSERT( ( xTimerTaskHandle != NULL ) );\n\n        traceRETURN_xTimerGetTimerDaemonTaskHandle( xTimerTaskHandle );\n\n        return xTimerTaskHandle;\n    }\n/*-----------------------------------------------------------*/\n\n    TickType_t xTimerGetPeriod( TimerHandle_t xTimer )\n    {\n        Timer_t * pxTimer = xTimer;\n\n        traceENTER_xTimerGetPeriod( xTimer );\n\n        configASSERT( xTimer );\n\n        traceRETURN_xTimerGetPeriod( pxTimer->xTimerPeriodInTicks );\n\n        return pxTimer->xTimerPeriodInTicks;\n    }\n/*-----------------------------------------------------------*/\n\n    void vTimerSetReloadMode( TimerHandle_t xTimer,\n                              const BaseType_t xAutoReload )\n    {\n        Timer_t * pxTimer = xTimer;\n\n        traceENTER_vTimerSetReloadMode( xTimer, xAutoReload );\n\n        configASSERT( xTimer );\n        taskENTER_CRITICAL();\n        {\n            if( xAutoReload != pdFALSE )\n            {\n                pxTimer->ucStatus |= ( uint8_t ) tmrSTATUS_IS_AUTORELOAD;\n            }\n            else\n            {\n                pxTimer->ucStatus &= ( ( uint8_t ) ~tmrSTATUS_IS_AUTORELOAD );\n            }\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_vTimerSetReloadMode();\n    }\n/*-----------------------------------------------------------*/\n\n    BaseType_t xTimerGetReloadMode( TimerHandle_t xTimer )\n    {\n        Timer_t * pxTimer = xTimer;\n        BaseType_t xReturn;\n\n        traceENTER_xTimerGetReloadMode( xTimer );\n\n        configASSERT( xTimer );\n        taskENTER_CRITICAL();\n        {\n            if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) == 0U )\n            {\n                /* Not an auto-reload timer. */\n                xReturn = pdFALSE;\n            }\n            else\n            {\n                /* Is an auto-reload timer. */\n                xReturn = pdTRUE;\n            }\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_xTimerGetReloadMode( xReturn );\n\n        return xReturn;\n    }\n\n    UBaseType_t uxTimerGetReloadMode( TimerHandle_t xTimer )\n    {\n        UBaseType_t uxReturn;\n\n        traceENTER_uxTimerGetReloadMode( xTimer );\n\n        uxReturn = ( UBaseType_t ) xTimerGetReloadMode( xTimer );\n\n        traceRETURN_uxTimerGetReloadMode( uxReturn );\n\n        return uxReturn;\n    }\n/*-----------------------------------------------------------*/\n\n    TickType_t xTimerGetExpiryTime( TimerHandle_t xTimer )\n    {\n        Timer_t * pxTimer = xTimer;\n        TickType_t xReturn;\n\n        traceENTER_xTimerGetExpiryTime( xTimer );\n\n        configASSERT( xTimer );\n        xReturn = listGET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ) );\n\n        traceRETURN_xTimerGetExpiryTime( xReturn );\n\n        return xReturn;\n    }\n/*-----------------------------------------------------------*/\n\n    #if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n        BaseType_t xTimerGetStaticBuffer( TimerHandle_t xTimer,\n                                          StaticTimer_t ** ppxTimerBuffer )\n        {\n            BaseType_t xReturn;\n            Timer_t * pxTimer = xTimer;\n\n            traceENTER_xTimerGetStaticBuffer( xTimer, ppxTimerBuffer );\n\n            configASSERT( ppxTimerBuffer != NULL );\n\n            if( ( pxTimer->ucStatus & tmrSTATUS_IS_STATICALLY_ALLOCATED ) != 0U )\n            {\n                /* MISRA Ref 11.3.1 [Misaligned access] */\n                /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-113 */\n                /* coverity[misra_c_2012_rule_11_3_violation] */\n                *ppxTimerBuffer = ( StaticTimer_t * ) pxTimer;\n                xReturn = pdTRUE;\n            }\n            else\n            {\n                xReturn = pdFALSE;\n            }\n\n            traceRETURN_xTimerGetStaticBuffer( xReturn );\n\n            return xReturn;\n        }\n    #endif /* configSUPPORT_STATIC_ALLOCATION */\n/*-----------------------------------------------------------*/\n\n    const char * pcTimerGetName( TimerHandle_t xTimer )\n    {\n        Timer_t * pxTimer = xTimer;\n\n        traceENTER_pcTimerGetName( xTimer );\n\n        configASSERT( xTimer );\n\n        traceRETURN_pcTimerGetName( pxTimer->pcTimerName );\n\n        return pxTimer->pcTimerName;\n    }\n/*-----------------------------------------------------------*/\n\n    static void prvReloadTimer( Timer_t * const pxTimer,\n                                TickType_t xExpiredTime,\n                                const TickType_t xTimeNow )\n    {\n        /* Insert the timer into the appropriate list for the next expiry time.\n         * If the next expiry time has already passed, advance the expiry time,\n         * call the callback function, and try again. */\n        while( prvInsertTimerInActiveList( pxTimer, ( xExpiredTime + pxTimer->xTimerPeriodInTicks ), xTimeNow, xExpiredTime ) != pdFALSE )\n        {\n            /* Advance the expiry time. */\n            xExpiredTime += pxTimer->xTimerPeriodInTicks;\n\n            /* Call the timer callback. */\n            traceTIMER_EXPIRED( pxTimer );\n            pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );\n        }\n    }\n/*-----------------------------------------------------------*/\n\n    static void prvProcessExpiredTimer( const TickType_t xNextExpireTime,\n                                        const TickType_t xTimeNow )\n    {\n        /* MISRA Ref 11.5.3 [Void pointer assignment] */\n        /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-115 */\n        /* coverity[misra_c_2012_rule_11_5_violation] */\n        Timer_t * const pxTimer = ( Timer_t * ) listGET_OWNER_OF_HEAD_ENTRY( pxCurrentTimerList );\n\n        /* Remove the timer from the list of active timers.  A check has already\n         * been performed to ensure the list is not empty. */\n\n        ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );\n\n        /* If the timer is an auto-reload timer then calculate the next\n         * expiry time and re-insert the timer in the list of active timers. */\n        if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0U )\n        {\n            prvReloadTimer( pxTimer, xNextExpireTime, xTimeNow );\n        }\n        else\n        {\n            pxTimer->ucStatus &= ( ( uint8_t ) ~tmrSTATUS_IS_ACTIVE );\n        }\n\n        /* Call the timer callback. */\n        traceTIMER_EXPIRED( pxTimer );\n        pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );\n    }\n/*-----------------------------------------------------------*/\n\n    static portTASK_FUNCTION( prvTimerTask, pvParameters )\n    {\n        TickType_t xNextExpireTime;\n        BaseType_t xListWasEmpty;\n\n        /* Just to avoid compiler warnings. */\n        ( void ) pvParameters;\n\n        #if ( configUSE_DAEMON_TASK_STARTUP_HOOK == 1 )\n        {\n            /* Allow the application writer to execute some code in the context of\n             * this task at the point the task starts executing.  This is useful if the\n             * application includes initialisation code that would benefit from\n             * executing after the scheduler has been started. */\n            vApplicationDaemonTaskStartupHook();\n        }\n        #endif /* configUSE_DAEMON_TASK_STARTUP_HOOK */\n\n        for( ; configCONTROL_INFINITE_LOOP(); )\n        {\n            /* Query the timers list to see if it contains any timers, and if so,\n             * obtain the time at which the next timer will expire. */\n            xNextExpireTime = prvGetNextExpireTime( &xListWasEmpty );\n\n            /* If a timer has expired, process it.  Otherwise, block this task\n             * until either a timer does expire, or a command is received. */\n            prvProcessTimerOrBlockTask( xNextExpireTime, xListWasEmpty );\n\n            /* Empty the command queue. */\n            prvProcessReceivedCommands();\n        }\n    }\n/*-----------------------------------------------------------*/\n\n    static void prvProcessTimerOrBlockTask( const TickType_t xNextExpireTime,\n                                            BaseType_t xListWasEmpty )\n    {\n        TickType_t xTimeNow;\n        BaseType_t xTimerListsWereSwitched;\n\n        vTaskSuspendAll();\n        {\n            /* Obtain the time now to make an assessment as to whether the timer\n             * has expired or not.  If obtaining the time causes the lists to switch\n             * then don't process this timer as any timers that remained in the list\n             * when the lists were switched will have been processed within the\n             * prvSampleTimeNow() function. */\n            xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );\n\n            if( xTimerListsWereSwitched == pdFALSE )\n            {\n                /* The tick count has not overflowed, has the timer expired? */\n                if( ( xListWasEmpty == pdFALSE ) && ( xNextExpireTime <= xTimeNow ) )\n                {\n                    ( void ) xTaskResumeAll();\n                    prvProcessExpiredTimer( xNextExpireTime, xTimeNow );\n                }\n                else\n                {\n                    /* The tick count has not overflowed, and the next expire\n                     * time has not been reached yet.  This task should therefore\n                     * block to wait for the next expire time or a command to be\n                     * received - whichever comes first.  The following line cannot\n                     * be reached unless xNextExpireTime > xTimeNow, except in the\n                     * case when the current timer list is empty. */\n                    if( xListWasEmpty != pdFALSE )\n                    {\n                        /* The current timer list is empty - is the overflow list\n                         * also empty? */\n                        xListWasEmpty = listLIST_IS_EMPTY( pxOverflowTimerList );\n                    }\n\n                    vQueueWaitForMessageRestricted( xTimerQueue, ( xNextExpireTime - xTimeNow ), xListWasEmpty );\n\n                    if( xTaskResumeAll() == pdFALSE )\n                    {\n                        /* Yield to wait for either a command to arrive, or the\n                         * block time to expire.  If a command arrived between the\n                         * critical section being exited and this yield then the yield\n                         * will not cause the task to block. */\n                        taskYIELD_WITHIN_API();\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n            }\n            else\n            {\n                ( void ) xTaskResumeAll();\n            }\n        }\n    }\n/*-----------------------------------------------------------*/\n\n    static TickType_t prvGetNextExpireTime( BaseType_t * const pxListWasEmpty )\n    {\n        TickType_t xNextExpireTime;\n\n        /* Timers are listed in expiry time order, with the head of the list\n         * referencing the task that will expire first.  Obtain the time at which\n         * the timer with the nearest expiry time will expire.  If there are no\n         * active timers then just set the next expire time to 0.  That will cause\n         * this task to unblock when the tick count overflows, at which point the\n         * timer lists will be switched and the next expiry time can be\n         * re-assessed.  */\n        *pxListWasEmpty = listLIST_IS_EMPTY( pxCurrentTimerList );\n\n        if( *pxListWasEmpty == pdFALSE )\n        {\n            xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList );\n        }\n        else\n        {\n            /* Ensure the task unblocks when the tick count rolls over. */\n            xNextExpireTime = ( TickType_t ) 0U;\n        }\n\n        return xNextExpireTime;\n    }\n/*-----------------------------------------------------------*/\n\n    static TickType_t prvSampleTimeNow( BaseType_t * const pxTimerListsWereSwitched )\n    {\n        TickType_t xTimeNow;\n        PRIVILEGED_DATA static TickType_t xLastTime = ( TickType_t ) 0U;\n\n        xTimeNow = xTaskGetTickCount();\n\n        if( xTimeNow < xLastTime )\n        {\n            prvSwitchTimerLists();\n            *pxTimerListsWereSwitched = pdTRUE;\n        }\n        else\n        {\n            *pxTimerListsWereSwitched = pdFALSE;\n        }\n\n        xLastTime = xTimeNow;\n\n        return xTimeNow;\n    }\n/*-----------------------------------------------------------*/\n\n    static BaseType_t prvInsertTimerInActiveList( Timer_t * const pxTimer,\n                                                  const TickType_t xNextExpiryTime,\n                                                  const TickType_t xTimeNow,\n                                                  const TickType_t xCommandTime )\n    {\n        BaseType_t xProcessTimerNow = pdFALSE;\n\n        listSET_LIST_ITEM_VALUE( &( pxTimer->xTimerListItem ), xNextExpiryTime );\n        listSET_LIST_ITEM_OWNER( &( pxTimer->xTimerListItem ), pxTimer );\n\n        if( xNextExpiryTime <= xTimeNow )\n        {\n            /* Has the expiry time elapsed between the command to start/reset a\n             * timer was issued, and the time the command was processed? */\n            if( ( ( TickType_t ) ( xTimeNow - xCommandTime ) ) >= pxTimer->xTimerPeriodInTicks )\n            {\n                /* The time between a command being issued and the command being\n                 * processed actually exceeds the timers period.  */\n                xProcessTimerNow = pdTRUE;\n            }\n            else\n            {\n                vListInsert( pxOverflowTimerList, &( pxTimer->xTimerListItem ) );\n            }\n        }\n        else\n        {\n            if( ( xTimeNow < xCommandTime ) && ( xNextExpiryTime >= xCommandTime ) )\n            {\n                /* If, since the command was issued, the tick count has overflowed\n                 * but the expiry time has not, then the timer must have already passed\n                 * its expiry time and should be processed immediately. */\n                xProcessTimerNow = pdTRUE;\n            }\n            else\n            {\n                vListInsert( pxCurrentTimerList, &( pxTimer->xTimerListItem ) );\n            }\n        }\n\n        return xProcessTimerNow;\n    }\n/*-----------------------------------------------------------*/\n\n    static void prvProcessReceivedCommands( void )\n    {\n        DaemonTaskMessage_t xMessage = { 0 };\n        Timer_t * pxTimer;\n        BaseType_t xTimerListsWereSwitched;\n        TickType_t xTimeNow;\n\n        while( xQueueReceive( xTimerQueue, &xMessage, tmrNO_DELAY ) != pdFAIL )\n        {\n            #if ( INCLUDE_xTimerPendFunctionCall == 1 )\n            {\n                /* Negative commands are pended function calls rather than timer\n                 * commands. */\n                if( xMessage.xMessageID < ( BaseType_t ) 0 )\n                {\n                    const CallbackParameters_t * const pxCallback = &( xMessage.u.xCallbackParameters );\n\n                    /* The timer uses the xCallbackParameters member to request a\n                     * callback be executed.  Check the callback is not NULL. */\n                    configASSERT( pxCallback );\n\n                    /* Call the function. */\n                    pxCallback->pxCallbackFunction( pxCallback->pvParameter1, pxCallback->ulParameter2 );\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n            }\n            #endif /* INCLUDE_xTimerPendFunctionCall */\n\n            /* Commands that are positive are timer commands rather than pended\n             * function calls. */\n            if( xMessage.xMessageID >= ( BaseType_t ) 0 )\n            {\n                /* The messages uses the xTimerParameters member to work on a\n                 * software timer. */\n                pxTimer = xMessage.u.xTimerParameters.pxTimer;\n\n                if( listIS_CONTAINED_WITHIN( NULL, &( pxTimer->xTimerListItem ) ) == pdFALSE )\n                {\n                    /* The timer is in a list, remove it. */\n                    ( void ) uxListRemove( &( pxTimer->xTimerListItem ) );\n                }\n                else\n                {\n                    mtCOVERAGE_TEST_MARKER();\n                }\n\n                traceTIMER_COMMAND_RECEIVED( pxTimer, xMessage.xMessageID, xMessage.u.xTimerParameters.xMessageValue );\n\n                /* In this case the xTimerListsWereSwitched parameter is not used, but\n                 *  it must be present in the function call.  prvSampleTimeNow() must be\n                 *  called after the message is received from xTimerQueue so there is no\n                 *  possibility of a higher priority task adding a message to the message\n                 *  queue with a time that is ahead of the timer daemon task (because it\n                 *  pre-empted the timer daemon task after the xTimeNow value was set). */\n                xTimeNow = prvSampleTimeNow( &xTimerListsWereSwitched );\n\n                switch( xMessage.xMessageID )\n                {\n                    case tmrCOMMAND_START:\n                    case tmrCOMMAND_START_FROM_ISR:\n                    case tmrCOMMAND_RESET:\n                    case tmrCOMMAND_RESET_FROM_ISR:\n                        /* Start or restart a timer. */\n                        pxTimer->ucStatus |= ( uint8_t ) tmrSTATUS_IS_ACTIVE;\n\n                        if( prvInsertTimerInActiveList( pxTimer, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, xTimeNow, xMessage.u.xTimerParameters.xMessageValue ) != pdFALSE )\n                        {\n                            /* The timer expired before it was added to the active\n                             * timer list.  Process it now. */\n                            if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0U )\n                            {\n                                prvReloadTimer( pxTimer, xMessage.u.xTimerParameters.xMessageValue + pxTimer->xTimerPeriodInTicks, xTimeNow );\n                            }\n                            else\n                            {\n                                pxTimer->ucStatus &= ( ( uint8_t ) ~tmrSTATUS_IS_ACTIVE );\n                            }\n\n                            /* Call the timer callback. */\n                            traceTIMER_EXPIRED( pxTimer );\n                            pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer );\n                        }\n                        else\n                        {\n                            mtCOVERAGE_TEST_MARKER();\n                        }\n\n                        break;\n\n                    case tmrCOMMAND_STOP:\n                    case tmrCOMMAND_STOP_FROM_ISR:\n                        /* The timer has already been removed from the active list. */\n                        pxTimer->ucStatus &= ( ( uint8_t ) ~tmrSTATUS_IS_ACTIVE );\n                        break;\n\n                    case tmrCOMMAND_CHANGE_PERIOD:\n                    case tmrCOMMAND_CHANGE_PERIOD_FROM_ISR:\n                        pxTimer->ucStatus |= ( uint8_t ) tmrSTATUS_IS_ACTIVE;\n                        pxTimer->xTimerPeriodInTicks = xMessage.u.xTimerParameters.xMessageValue;\n                        configASSERT( ( pxTimer->xTimerPeriodInTicks > 0 ) );\n\n                        /* The new period does not really have a reference, and can\n                         * be longer or shorter than the old one.  The command time is\n                         * therefore set to the current time, and as the period cannot\n                         * be zero the next expiry time can only be in the future,\n                         * meaning (unlike for the xTimerStart() case above) there is\n                         * no fail case that needs to be handled here. */\n                        ( void ) prvInsertTimerInActiveList( pxTimer, ( xTimeNow + pxTimer->xTimerPeriodInTicks ), xTimeNow, xTimeNow );\n                        break;\n\n                    case tmrCOMMAND_DELETE:\n                        #if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 )\n                        {\n                            /* The timer has already been removed from the active list,\n                             * just free up the memory if the memory was dynamically\n                             * allocated. */\n                            if( ( pxTimer->ucStatus & tmrSTATUS_IS_STATICALLY_ALLOCATED ) == ( uint8_t ) 0 )\n                            {\n                                vPortFree( pxTimer );\n                            }\n                            else\n                            {\n                                pxTimer->ucStatus &= ( ( uint8_t ) ~tmrSTATUS_IS_ACTIVE );\n                            }\n                        }\n                        #else /* if ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) */\n                        {\n                            /* If dynamic allocation is not enabled, the memory\n                             * could not have been dynamically allocated. So there is\n                             * no need to free the memory - just mark the timer as\n                             * \"not active\". */\n                            pxTimer->ucStatus &= ( ( uint8_t ) ~tmrSTATUS_IS_ACTIVE );\n                        }\n                        #endif /* configSUPPORT_DYNAMIC_ALLOCATION */\n                        break;\n\n                    default:\n                        /* Don't expect to get here. */\n                        break;\n                }\n            }\n        }\n    }\n/*-----------------------------------------------------------*/\n\n    static void prvSwitchTimerLists( void )\n    {\n        TickType_t xNextExpireTime;\n        List_t * pxTemp;\n\n        /* The tick count has overflowed.  The timer lists must be switched.\n         * If there are any timers still referenced from the current timer list\n         * then they must have expired and should be processed before the lists\n         * are switched. */\n        while( listLIST_IS_EMPTY( pxCurrentTimerList ) == pdFALSE )\n        {\n            xNextExpireTime = listGET_ITEM_VALUE_OF_HEAD_ENTRY( pxCurrentTimerList );\n\n            /* Process the expired timer.  For auto-reload timers, be careful to\n             * process only expirations that occur on the current list.  Further\n             * expirations must wait until after the lists are switched. */\n            prvProcessExpiredTimer( xNextExpireTime, tmrMAX_TIME_BEFORE_OVERFLOW );\n        }\n\n        pxTemp = pxCurrentTimerList;\n        pxCurrentTimerList = pxOverflowTimerList;\n        pxOverflowTimerList = pxTemp;\n    }\n/*-----------------------------------------------------------*/\n\n    static void prvCheckForValidListAndQueue( void )\n    {\n        /* Check that the list from which active timers are referenced, and the\n         * queue used to communicate with the timer service, have been\n         * initialised. */\n        taskENTER_CRITICAL();\n        {\n            if( xTimerQueue == NULL )\n            {\n                vListInitialise( &xActiveTimerList1 );\n                vListInitialise( &xActiveTimerList2 );\n                pxCurrentTimerList = &xActiveTimerList1;\n                pxOverflowTimerList = &xActiveTimerList2;\n\n                #if ( configSUPPORT_STATIC_ALLOCATION == 1 )\n                {\n                    /* The timer queue is allocated statically in case\n                     * configSUPPORT_DYNAMIC_ALLOCATION is 0. */\n                    PRIVILEGED_DATA static StaticQueue_t xStaticTimerQueue;\n                    PRIVILEGED_DATA static uint8_t ucStaticTimerQueueStorage[ ( size_t ) configTIMER_QUEUE_LENGTH * sizeof( DaemonTaskMessage_t ) ];\n\n                    xTimerQueue = xQueueCreateStatic( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, ( UBaseType_t ) sizeof( DaemonTaskMessage_t ), &( ucStaticTimerQueueStorage[ 0 ] ), &xStaticTimerQueue );\n                }\n                #else\n                {\n                    xTimerQueue = xQueueCreate( ( UBaseType_t ) configTIMER_QUEUE_LENGTH, ( UBaseType_t ) sizeof( DaemonTaskMessage_t ) );\n                }\n                #endif /* if ( configSUPPORT_STATIC_ALLOCATION == 1 ) */\n\n                #if ( configQUEUE_REGISTRY_SIZE > 0 )\n                {\n                    if( xTimerQueue != NULL )\n                    {\n                        vQueueAddToRegistry( xTimerQueue, \"TmrQ\" );\n                    }\n                    else\n                    {\n                        mtCOVERAGE_TEST_MARKER();\n                    }\n                }\n                #endif /* configQUEUE_REGISTRY_SIZE */\n            }\n            else\n            {\n                mtCOVERAGE_TEST_MARKER();\n            }\n        }\n        taskEXIT_CRITICAL();\n    }\n/*-----------------------------------------------------------*/\n\n    BaseType_t xTimerIsTimerActive( TimerHandle_t xTimer )\n    {\n        BaseType_t xReturn;\n        Timer_t * pxTimer = xTimer;\n\n        traceENTER_xTimerIsTimerActive( xTimer );\n\n        configASSERT( xTimer );\n\n        /* Is the timer in the list of active timers? */\n        taskENTER_CRITICAL();\n        {\n            if( ( pxTimer->ucStatus & tmrSTATUS_IS_ACTIVE ) == 0U )\n            {\n                xReturn = pdFALSE;\n            }\n            else\n            {\n                xReturn = pdTRUE;\n            }\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_xTimerIsTimerActive( xReturn );\n\n        return xReturn;\n    }\n/*-----------------------------------------------------------*/\n\n    void * pvTimerGetTimerID( const TimerHandle_t xTimer )\n    {\n        Timer_t * const pxTimer = xTimer;\n        void * pvReturn;\n\n        traceENTER_pvTimerGetTimerID( xTimer );\n\n        configASSERT( xTimer );\n\n        taskENTER_CRITICAL();\n        {\n            pvReturn = pxTimer->pvTimerID;\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_pvTimerGetTimerID( pvReturn );\n\n        return pvReturn;\n    }\n/*-----------------------------------------------------------*/\n\n    void vTimerSetTimerID( TimerHandle_t xTimer,\n                           void * pvNewID )\n    {\n        Timer_t * const pxTimer = xTimer;\n\n        traceENTER_vTimerSetTimerID( xTimer, pvNewID );\n\n        configASSERT( xTimer );\n\n        taskENTER_CRITICAL();\n        {\n            pxTimer->pvTimerID = pvNewID;\n        }\n        taskEXIT_CRITICAL();\n\n        traceRETURN_vTimerSetTimerID();\n    }\n/*-----------------------------------------------------------*/\n\n    #if ( INCLUDE_xTimerPendFunctionCall == 1 )\n\n        BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend,\n                                                  void * pvParameter1,\n                                                  uint32_t ulParameter2,\n                                                  BaseType_t * pxHigherPriorityTaskWoken )\n        {\n            DaemonTaskMessage_t xMessage;\n            BaseType_t xReturn;\n\n            traceENTER_xTimerPendFunctionCallFromISR( xFunctionToPend, pvParameter1, ulParameter2, pxHigherPriorityTaskWoken );\n\n            /* Complete the message with the function parameters and post it to the\n             * daemon task. */\n            xMessage.xMessageID = tmrCOMMAND_EXECUTE_CALLBACK_FROM_ISR;\n            xMessage.u.xCallbackParameters.pxCallbackFunction = xFunctionToPend;\n            xMessage.u.xCallbackParameters.pvParameter1 = pvParameter1;\n            xMessage.u.xCallbackParameters.ulParameter2 = ulParameter2;\n\n            xReturn = xQueueSendFromISR( xTimerQueue, &xMessage, pxHigherPriorityTaskWoken );\n\n            tracePEND_FUNC_CALL_FROM_ISR( xFunctionToPend, pvParameter1, ulParameter2, xReturn );\n            traceRETURN_xTimerPendFunctionCallFromISR( xReturn );\n\n            return xReturn;\n        }\n\n    #endif /* INCLUDE_xTimerPendFunctionCall */\n/*-----------------------------------------------------------*/\n\n    #if ( INCLUDE_xTimerPendFunctionCall == 1 )\n\n        BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend,\n                                           void * pvParameter1,\n                                           uint32_t ulParameter2,\n                                           TickType_t xTicksToWait )\n        {\n            DaemonTaskMessage_t xMessage;\n            BaseType_t xReturn;\n\n            traceENTER_xTimerPendFunctionCall( xFunctionToPend, pvParameter1, ulParameter2, xTicksToWait );\n\n            /* This function can only be called after a timer has been created or\n             * after the scheduler has been started because, until then, the timer\n             * queue does not exist. */\n            configASSERT( xTimerQueue );\n\n            /* Complete the message with the function parameters and post it to the\n             * daemon task. */\n            xMessage.xMessageID = tmrCOMMAND_EXECUTE_CALLBACK;\n            xMessage.u.xCallbackParameters.pxCallbackFunction = xFunctionToPend;\n            xMessage.u.xCallbackParameters.pvParameter1 = pvParameter1;\n            xMessage.u.xCallbackParameters.ulParameter2 = ulParameter2;\n\n            xReturn = xQueueSendToBack( xTimerQueue, &xMessage, xTicksToWait );\n\n            tracePEND_FUNC_CALL( xFunctionToPend, pvParameter1, ulParameter2, xReturn );\n            traceRETURN_xTimerPendFunctionCall( xReturn );\n\n            return xReturn;\n        }\n\n    #endif /* INCLUDE_xTimerPendFunctionCall */\n/*-----------------------------------------------------------*/\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n\n        UBaseType_t uxTimerGetTimerNumber( TimerHandle_t xTimer )\n        {\n            traceENTER_uxTimerGetTimerNumber( xTimer );\n\n            traceRETURN_uxTimerGetTimerNumber( ( ( Timer_t * ) xTimer )->uxTimerNumber );\n\n            return ( ( Timer_t * ) xTimer )->uxTimerNumber;\n        }\n\n    #endif /* configUSE_TRACE_FACILITY */\n/*-----------------------------------------------------------*/\n\n    #if ( configUSE_TRACE_FACILITY == 1 )\n\n        void vTimerSetTimerNumber( TimerHandle_t xTimer,\n                                   UBaseType_t uxTimerNumber )\n        {\n            traceENTER_vTimerSetTimerNumber( xTimer, uxTimerNumber );\n\n            ( ( Timer_t * ) xTimer )->uxTimerNumber = uxTimerNumber;\n\n            traceRETURN_vTimerSetTimerNumber();\n        }\n\n    #endif /* configUSE_TRACE_FACILITY */\n/*-----------------------------------------------------------*/\n\n/*\n * Reset the state in this file. This state is normally initialized at start up.\n * This function must be called by the application before restarting the\n * scheduler.\n */\n    void vTimerResetState( void )\n    {\n        xTimerQueue = NULL;\n        xTimerTaskHandle = NULL;\n    }\n/*-----------------------------------------------------------*/\n\n/* This entire source file will be skipped if the application is not configured\n * to include software timer functionality.  If you want to include software timer\n * functionality then ensure configUSE_TIMERS is set to 1 in FreeRTOSConfig.h. */\n#endif /* configUSE_TIMERS == 1 */\n"
  },
  {
    "path": "source/build.sh",
    "content": "#!/usr/bin/env bash\nset -e\nTRANSLATION_DIR=\"../Translations\"\n#TRANSLATION_SCRIPT=\"make_translation.py\"\n\n# AVAILABLE_LANGUAGES will be calculating according to json files in $TRANSLATION_DIR\nAVAILABLE_LANGUAGES=()\nBUILD_LANGUAGES=()\nAVAILABLE_MODELS=(\"TS100\" \"TS80\" \"TS80P\" \"Pinecil\" \"MHP30\" \"Pinecilv2\" \"S60\" \"S60P\" \"T55\" \"TS101\")\nBUILD_MODELS=()\nOPTIONS=()\n\nbuilder_info() {\n    echo -e \"\n********************************************\n               IronOS Firmware\n        builder for Miniware + Pine64\n\n                                    by Ralim\n********************************************\"\n}\n\n# Calculate available languages\nfor f in \"$TRANSLATION_DIR\"/translation_*.json; do\n    AVAILABLE_LANGUAGES+=(\"$(echo \"$f\" | tr \"[:lower:]\" \"[:upper:]\" | sed \"s/[^_]*_//\" | sed \"s/\\.JSON//g\")\")\ndone\n\nusage() {\n    builder_info\n    echo -e \"\nUsage : \n    $(basename \"$0\") [-l <LANG_CODES>] [-m <MODELS>] [-o <OPTIONS>] [-h]\n\nParameters :\n    -l LANG_CODE : Force a specific language (${AVAILABLE_LANGUAGES[*]})\n    -m MODEL     : Force a specific model (${AVAILABLE_MODELS[*]})\n    -o key=val   : Pass options to make\n    -h           : Show this help message\n\nExample : \n    $(basename \"$0\") -l EN -m TS100                     (Build one language and model)\n    $(basename \"$0\") -l EN -m \\\"TS100 MHP30\\\"             (Build one language and multi models)\n    $(basename \"$0\") -l \\\"DE EN\\\" -m \\\"TS100 MHP30\\\"        (Build multi languages and models)\n    $(basename \"$0\") -l EN -m Pinecilv2 -o ws2812b_enable=1\n\nINFO : \n    By default, without parameters, the build is for all platforms and all languages\n\n\" 1>&2\n    exit 1\n}\n\nStartBuild() {\n    read -n 1 -r -s -p $'Press Enter to start the building process...\\n'\n}\n\ncheckLastCommand() {\n    if [ $? -eq 0 ]; then\n        echo \"    [Success]\"\n        echo \"********************************************\"\n    else\n        forceExit \"checkLastCommand\"\n    fi\n}\n\nforceExit() {\n    if [ -n \"$*\" ]; then\n        echo -e \"\\n\\n    [Error]: $*\"\n    else\n        echo \"    [Error]\"\n    fi\n    echo \"********************************************\"\n    echo \" -- Stop on error --\"\n    exit 1\n}\n\nisInArray() {\n    local value=\"$1\"   # Save first argument in a variable\n    shift              # Shift all arguments to the left (original $1 gets lost)\n    local array=(\"$@\") # Rebuild the array with rest of arguments\n\n    for item in \"${array[@]}\"; do\n        [[ $value == \"$item\" ]] && return 0\n    done\n    return 1\n}\n\ndeclare -a margs=()\ndeclare -a largs=()\ndeclare -a oargs=()\n\nwhile getopts \"h:l:m:o:\" option; do\n    case \"${option}\" in\n    h)\n        usage\n        ;;\n    l)\n        IFS=' ' read -r -a largs <<<\"${OPTARG}\"\n        ;;\n    m)\n        IFS=' ' read -r -a margs <<<\"${OPTARG}\"\n        ;;\n    o)\n        IFS=' ' read -r -a oargs <<< \"${OPTARG}\"\n        ;;\n    *)\n        usage\n        ;;\n    esac\ndone\nshift $((OPTIND - 1))\nbuilder_info\n\n# Checking requested language\necho -n \"Available languages :\"\necho \" ${AVAILABLE_LANGUAGES[*]}\"\necho -n \"Requested languages : \"\nif ((${#largs[@]})); then\n    for i in \"${largs[@]}\"; do\n        i=$(echo \"${i}\" | tr '[:lower:]' '[:upper:]')\n        if isInArray \"$i\" \"${AVAILABLE_LANGUAGES[@]}\"; then\n            echo -n \"$i \"\n            BUILD_LANGUAGES+=(\"$i\")\n        else\n            forceExit \"Language '$i' is unknown. Check and use only from the available languages.\"\n        fi\n    done\n    echo \"\"\nfi\nif [ -z \"${BUILD_LANGUAGES[*]}\" ]; then\n    echo \"    No custom languages selected.\"\n    echo \"    Building: [ALL LANGUAGES]\"\n    BUILD_LANGUAGES+=(\"${AVAILABLE_LANGUAGES[@]}\")\nfi\necho \"********************************************\"\n\n# Checking requested model\necho -n \"Available models :\"\necho \" ${AVAILABLE_MODELS[*]}\"\necho -n \"Requested models : \"\nif ((${#margs[@]})); then\n    for i in \"${margs[@]}\"; do\n\n        if [[ \"$i\" != \"Pinecil\" ]] && [[ \"$i\" != \"Pinecilv2\" ]]; then # Dirty. Need to adapt the Build process to use upper cases only\n            i=$(echo \"${i}\" | tr '[:lower:]' '[:upper:]')\n        fi\n\n        if isInArray \"$i\" \"${AVAILABLE_MODELS[@]}\"; then\n            echo -n \"$i \"\n            BUILD_MODELS+=(\"$i\")\n        else\n            forceExit \"Model '$i' is unknown. Check and use only from the available models.\"\n        fi\n    done\n    echo \"\"\nfi\n\nif [ -z \"${BUILD_MODELS[*]}\" ]; then\n    echo \"    No custom models selected.\"\n    echo \"    Building: [ALL MODELS]\"\n    BUILD_MODELS+=(\"${AVAILABLE_MODELS[@]}\")\nfi\n\necho \"********************************************\"\n\necho -n \"Requested options : \"\nif ((${#oargs[@]})); then\n    for i in \"${oargs[@]}\"; do\n        echo -n \"$i \"\n        OPTIONS+=(\"$i\")\n    done\n    echo \"\"\nfi\n\necho \"********************************************\"\n##\n#StartBuild\n\nif [ ${#BUILD_LANGUAGES[@]} -gt 0 ] && [ ${#BUILD_MODELS[@]} -gt 0 ]; then\n    echo \"Cleaning previous builds\"\n    rm -rf Hexfile/ >/dev/null\n    rm -rf Objects/ >/dev/null\n    make clean >/dev/null\n    checkLastCommand\n\n    for model in \"${BUILD_MODELS[@]}\"; do\n        echo \"Building firmware for $model in ${BUILD_LANGUAGES[*]}\"\n        make -j\"$(nproc)\" model=\"$model\" \"${BUILD_LANGUAGES[@]/#/firmware-}\" \"${OPTIONS[@]}\" >/dev/null\n        checkLastCommand\n    done\nelse\n    forceExit \"Nothing to build. (no model or language specified)\"\nfi\necho \" -- Firmwares successfully generated --\"\necho \"End...\"\n"
  },
  {
    "path": "source/dfuse-pack.py",
    "content": "#!/usr/bin/env python3\n\n# Written by Antonio Galea - 2010/11/18\n# Distributed under Gnu LGPL 3.0\n# see http://www.gnu.org/licenses/lgpl-3.0.txt\n\nimport sys, struct, zlib, os\nimport binascii\nfrom optparse import OptionParser\n\ntry:\n    from intelhex import IntelHex\nexcept ImportError:\n    IntelHex = None\n\nDEFAULT_DEVICE = \"0x0483:0xdf11\"\nDEFAULT_NAME = b\"ST...\"\n\n# Prefix and Suffix sizes are derived from ST's DfuSe File Format Specification (UM0391), DFU revision 1.1a\nPREFIX_SIZE = 11\nSUFFIX_SIZE = 16\n\n\ndef named(tuple, names):\n    return dict(list(zip(names.split(), tuple)))\n\n\ndef consume(fmt, data, names):\n    n = struct.calcsize(fmt)\n    return named(struct.unpack(fmt, data[:n]), names), data[n:]\n\n\ndef cstring(bytestring):\n    return bytestring.partition(b\"\\0\")[0]\n\n\ndef compute_crc(data):\n    return 0xFFFFFFFF & -zlib.crc32(data) - 1\n\n\ndef parse(file, dump_images=False):\n    print('File: \"%s\"' % file)\n    data = open(file, \"rb\").read()\n    crc = compute_crc(data[:-4])\n    prefix, data = consume(\"<5sBIB\", data, \"signature version size targets\")\n    print(\n        \"%(signature)s v%(version)d, image size: %(size)d, targets: %(targets)d\"\n        % prefix\n    )\n    for t in range(prefix[\"targets\"]):\n        tprefix, data = consume(\n            \"<6sBI255s2I\", data, \"signature altsetting named name size elements\"\n        )\n        tprefix[\"num\"] = t\n        if tprefix[\"named\"]:\n            tprefix[\"name\"] = cstring(tprefix[\"name\"])\n        else:\n            tprefix[\"name\"] = \"\"\n        print(\n            '%(signature)s %(num)d, alt setting: %(altsetting)s, name: \"%(name)s\", size: %(size)d, elements: %(elements)d'\n            % tprefix\n        )\n        tsize = tprefix[\"size\"]\n        target, data = data[:tsize], data[tsize:]\n        for e in range(tprefix[\"elements\"]):\n            eprefix, target = consume(\"<2I\", target, \"address size\")\n            eprefix[\"num\"] = e\n            print(\"  %(num)d, address: 0x%(address)08x, size: %(size)d\" % eprefix)\n            esize = eprefix[\"size\"]\n            image, target = target[:esize], target[esize:]\n            if dump_images:\n                out = \"%s.target%d.image%d.bin\" % (file, t, e)\n                open(out, \"wb\").write(image)\n                print('    DUMPED IMAGE TO \"%s\"' % out)\n        if len(target):\n            print(\"target %d: PARSE ERROR\" % t)\n    suffix = named(\n        struct.unpack(\"<4H3sBI\", data[:SUFFIX_SIZE]),\n        \"device product vendor dfu ufd len crc\",\n    )\n    print(\n        \"usb: %(vendor)04x:%(product)04x, device: 0x%(device)04x, dfu: 0x%(dfu)04x, %(ufd)s, %(len)d, 0x%(crc)08x\"\n        % suffix\n    )\n    if crc != suffix[\"crc\"]:\n        print(\"CRC ERROR: computed crc32 is 0x%08x\" % crc)\n    data = data[SUFFIX_SIZE:]\n    if data:\n        print(\"PARSE ERROR\")\n\n\ndef checkbin(binfile):\n    data = open(binfile, \"rb\").read()\n    if len(data) < SUFFIX_SIZE:\n        return\n    crc = compute_crc(data[:-4])\n    suffix = named(\n        struct.unpack(\"<4H3sBI\", data[-SUFFIX_SIZE:]),\n        \"device product vendor dfu ufd len crc\",\n    )\n    if crc == suffix[\"crc\"] and suffix[\"ufd\"] == b\"UFD\":\n        print(\n            \"usb: %(vendor)04x:%(product)04x, device: 0x%(device)04x, dfu: 0x%(dfu)04x, %(ufd)s, %(len)d, 0x%(crc)08x\"\n            % suffix\n        )\n        print(\"It looks like the file %s has a DFU suffix!\" % binfile)\n        print(\"Please remove any DFU suffix and retry.\")\n        sys.exit(1)\n\n\ndef build(file, targets, name=DEFAULT_NAME, device=DEFAULT_DEVICE):\n    data = b\"\"\n    for t, target in enumerate(targets):\n        tdata = b\"\"\n        for image in target:\n            tdata += (\n                struct.pack(\"<2I\", image[\"address\"], len(image[\"data\"])) + image[\"data\"]\n            )\n            ealt = image[\"alt\"]\n        tdata = (\n            struct.pack(\n                \"<6sBI255s2I\", b\"Target\", ealt, 1, name, len(tdata), len(target)\n            )\n            + tdata\n        )\n        data += tdata\n    data = (\n        struct.pack(\n            \"<5sBIB\", b\"DfuSe\", 1, PREFIX_SIZE + len(data) + SUFFIX_SIZE, len(targets)\n        )\n        + data\n    )\n    v, d = [int(x, 0) & 0xFFFF for x in device.split(\":\", 1)]\n    data += struct.pack(\"<4H3sB\", 0, d, v, 0x011A, b\"UFD\", SUFFIX_SIZE)\n    crc = compute_crc(data)\n    data += struct.pack(\"<I\", crc)\n    open(file, \"wb\").write(data)\n\n\nif __name__ == \"__main__\":\n    usage = \"\"\"\n%prog [-d|--dump] infile.dfu\n%prog {-b|--build} address:file.bin [-b address:file.bin ...] [{-D|--device}=vendor:device] outfile.dfu\n%prog {-s|--build-s19} file.s19 [{-D|--device}=vendor:device] outfile.dfu\n%prog {-i|--build-ihex} file.hex [-i file.hex ...] [{-D|--device}=vendor:device] outfile.dfu\"\"\"\n    parser = OptionParser(usage=usage)\n    parser.add_option(\n        \"-b\",\n        \"--build\",\n        action=\"append\",\n        dest=\"binfiles\",\n        help=\"Include a raw binary file, to be loaded at the specified address. The BINFILES argument is of the form address:path-to-file. The address can have @X appended where X is the alternate interface number for this binary file. Note that the binary files must not have any DFU suffix!\",\n        metavar=\"BINFILES\",\n    )\n    parser.add_option(\n        \"-i\",\n        \"--build-ihex\",\n        action=\"append\",\n        dest=\"hexfiles\",\n        help=\"build a DFU file from given Intel HEX HEXFILES\",\n        metavar=\"HEXFILES\",\n    )\n    parser.add_option(\n        \"-s\",\n        \"--build-s19\",\n        type=\"string\",\n        dest=\"s19files\",\n        help=\"build a DFU file from given S19 S-record S19FILE\",\n        metavar=\"S19FILE\",\n    )\n    parser.add_option(\n        \"-D\",\n        \"--device\",\n        action=\"store\",\n        dest=\"device\",\n        help=\"build for DEVICE, defaults to %s\" % DEFAULT_DEVICE,\n        metavar=\"DEVICE\",\n    )\n    parser.add_option(\n        \"-a\",\n        \"--alt-intf\",\n        action=\"store\",\n        dest=\"alt\",\n        help=\"build for alternate interface number ALTINTF, defaults to 0\",\n        metavar=\"ALTINTF\",\n    )\n    parser.add_option(\n        \"-d\",\n        \"--dump\",\n        action=\"store_true\",\n        dest=\"dump_images\",\n        default=False,\n        help=\"dump contained images to current directory\",\n    )\n    (options, args) = parser.parse_args()\n\n    targets = []\n\n    if options.alt:\n        try:\n            default_alt = int(options.alt)\n        except ValueError:\n            print(\"Alternate interface option argument %s invalid.\" % options.alt)\n            sys.exit(1)\n    else:\n        default_alt = 0\n\n    if (options.binfiles or options.hexfiles) and len(args) == 1:\n        target = []\n        old_ealt = None\n\n        if options.binfiles:\n            for arg in options.binfiles:\n                try:\n                    address, binfile = arg.split(\":\", 1)\n                except ValueError:\n                    print(\"Address:file couple '%s' invalid.\" % arg)\n                    sys.exit(1)\n                try:\n                    address, alts = address.split(\"@\", 1)\n                    if alts:\n                        try:\n                            ealt = int(alts)\n                        except ValueError:\n                            print(\"Alternate interface number %s invalid.\" % alts)\n                            sys.exit(1)\n                    else:\n                        ealt = default_alt\n                except ValueError:\n                    ealt = default_alt\n                try:\n                    address = int(address, 0) & 0xFFFFFFFF\n                except ValueError:\n                    print(\"Address %s invalid.\" % address)\n                    sys.exit(1)\n                if not os.path.isfile(binfile):\n                    print(\"Unreadable file '%s'.\" % binfile)\n                    sys.exit(1)\n                checkbin(binfile)\n                if old_ealt is not None and ealt != old_ealt:\n                    targets.append(target)\n                    target = []\n                target.append(\n                    {\n                        \"address\": address,\n                        \"alt\": ealt,\n                        \"data\": open(binfile, \"rb\").read(),\n                    }\n                )\n                old_ealt = ealt\n            targets.append(target)\n\n        if options.hexfiles:\n            if not IntelHex:\n                print(\"Error: IntelHex python module could not be found\")\n                sys.exit(1)\n            for hexf in options.hexfiles:\n                ih = IntelHex(hexf)\n                for address, end in ih.segments():\n                    try:\n                        address = address & 0xFFFFFFFF\n                    except ValueError:\n                        print(\"Address %s invalid.\" % address)\n                        sys.exit(1)\n                    target.append(\n                        {\n                            \"address\": address,\n                            \"alt\": default_alt,\n                            \"data\": ih.tobinstr(start=address, end=end - 1),\n                        }\n                    )\n            targets.append(target)\n\n        outfile = args[0]\n        device = DEFAULT_DEVICE\n        if options.device:\n            device = options.device\n        try:\n            v, d = [int(x, 0) & 0xFFFF for x in device.split(\":\", 1)]\n        except:\n            print(\"Invalid device '%s'.\" % device)\n            sys.exit(1)\n        build(outfile, targets, DEFAULT_NAME, device)\n    elif options.s19files and len(args) == 1:\n        address = 0\n        data = \"\"\n        target = []\n        name = DEFAULT_NAME\n        with open(options.s19files) as f:\n            lines = f.readlines()\n            for line in lines:\n                curaddress = 0\n                curdata = \"\"\n                line = line.rstrip()\n                if line.startswith(\"S0\"):\n                    name = binascii.a2b_hex(line[8 : len(line) - 2])\n                elif line.startswith(\"S3\"):\n                    try:\n                        curaddress = int(line[4:12], 16) & 0xFFFFFFFF\n                    except ValueError:\n                        print(\"Address %s invalid.\" % address)\n                        sys.exit(1)\n                    curdata = binascii.unhexlify(line[12:-2])\n                elif line.startswith(\"S2\"):\n                    try:\n                        curaddress = int(line[4:10], 16) & 0xFFFFFFFF\n                    except ValueError:\n                        print(\"Address %s invalid.\" % address)\n                        sys.exit(1)\n                    curdata = binascii.unhexlify(line[10:-2])\n                elif line.startswith(\"S1\"):\n                    try:\n                        curaddress = int(line[4:8], 16) & 0xFFFFFFFF\n                    except ValueError:\n                        print(\"Address %s invalid.\" % address)\n                        sys.exit(1)\n                    curdata = binascii.unhexlify(line[8:-2])\n                if address == 0:\n                    address = curaddress\n                    data = curdata\n                elif address + len(data) != curaddress:\n                    target.append(\n                        {\"address\": address, \"alt\": default_alt, \"data\": data}\n                    )\n                    address = curaddress\n                    data = curdata\n                else:\n                    data += curdata\n        outfile = args[0]\n        device = DEFAULT_DEVICE\n        if options.device:\n            device = options.device\n        try:\n            v, d = [int(x, 0) & 0xFFFF for x in device.split(\":\", 1)]\n        except:\n            print(\"Invalid device '%s'.\" % device)\n            sys.exit(1)\n        build(outfile, [target], name, device)\n    elif len(args) == 1:\n        infile = args[0]\n        if not os.path.isfile(infile):\n            print(\"Unreadable file '%s'.\" % infile)\n            sys.exit(1)\n        parse(infile, dump_images=options.dump_images)\n    else:\n        parser.print_help()\n        if not IntelHex:\n            print(\"Note: Intel hex files support requires the IntelHex python module\")\n        sys.exit(1)\n"
  },
  {
    "path": "source/metadata.py",
    "content": "#!/usr/bin/env python3\n\nimport json\nfrom pathlib import Path\nimport os\nimport re\nimport subprocess\nimport sys\n\n# Creates an index metadata json file of the hexfiles folder\n# This is used by automation like the Pinecil updater\n\nif len(sys.argv) < 2 or len(sys.argv) > 3:\n    print(\"Usage: metadata.py OUTPUT_FILE [model]\")\n    print(\n        \"  OUTPUT_FILE      - the name of output file in json format with meta info about binary files\"\n    )\n    print(\n        \"  model [optional] - name of the model (as for `make model=NAME`) to scan files for explicitly (all files in source/Hexfile by default otherwise)\"\n    )\n    exit(1)\n\n# If model is provided explicitly to scan related files only for json output, then process the argument\nModelName = None\nif len(sys.argv) == 3:\n    ModelName = sys.argv[2]\n    if ModelName.endswith(\"_multi-lang\"):\n        # rename on-the-fly for direct compatibility with make targets like PINECILMODEL_multi-lang\n        ModelName = ModelName.rstrip(\"-lang\")\n\nHERE = Path(__file__).resolve().parent\n\nHexFileFolder = os.path.join(HERE, \"Hexfile\")\nOutputJSONPath = os.path.join(HexFileFolder, sys.argv[1])\nTranslationsFilesPath = os.path.join(HERE.parent, \"Translations\")\n\n\ndef load_json(filename: str):\n    with open(filename) as f:\n        return json.loads(f.read())\n\n\ndef read_git_tag():\n    if os.environ.get(\"GITHUB_CI_PR_SHA\", \"\") != \"\":\n        return os.environ[\"GITHUB_CI_PR_SHA\"][:7].upper()\n    else:\n        return f\"{subprocess.check_output(['git', 'rev-parse', '--short=7', 'HEAD']).strip().decode('ascii').upper()}\"\n\n\ndef read_version():\n    with open(HERE / \"version.h\") as version_file:\n        for line in version_file:\n            if re.findall(r\"^.*(?<=(#define)).*(?<=(BUILD_VERSION))\", line):\n                matches = re.findall(r\"\\\"(.+?)\\\"\", line)\n                if matches:\n                    return matches[0]\n    raise Exception(\"Could not parse version\")\n\n\n# Fetch our file listings\ntranslation_files = [\n    os.path.join(TranslationsFilesPath, f)\n    for f in os.listdir(TranslationsFilesPath)\n    if os.path.isfile(os.path.join(TranslationsFilesPath, f)) and f.endswith(\".json\")\n]\noutput_files = [\n    os.path.join(HexFileFolder, f)\n    for f in sorted(os.listdir(HexFileFolder))\n    if os.path.isfile(os.path.join(HexFileFolder, f))\n]\n\nparsed_languages = {}\nfor path in translation_files:\n    lang: dict = load_json(path)\n    code = lang.get(\"languageCode\", None)\n    if code is not None:\n        parsed_languages[code] = lang\n\n# Now that we have the languages, we can generate our index of info on each file\n\noutput_json = {\"git_tag\": read_git_tag(), \"release\": read_version(), \"contents\": {}}\n\ndevice_model_name = None\nfor file_path in output_files:\n    if file_path.endswith(\".hex\") or file_path.endswith(\".dfu\"):\n        # Find out what language this file is\n        name: str = os.path.basename(file_path)\n        if ModelName is not None:\n            # If ModelName is provided as the second argument (compatible with make model=NAME fully) but current file name doesn't match the model name, then skip it\n            if not name.startswith(ModelName + \"_\"):\n                continue\n            # If build of interest is not multi-lang one but scanning one is not MODEL_LANG-ID here, then skip it to avoid mess in json between MODEL_LANG-ID & MODEL_multi'\n            if not ModelName.endswith(\"_multi\") and not re.match(\n                r\"^\" + ModelName + \"_\" + \"([A-Z]+).*$\", name\n            ):\n                continue\n        matches = re.findall(r\"^([a-zA-Z0-9]+)_(.+)\\.(.+)$\", name)\n        if matches:\n            matches = matches[0]\n            if len(matches) == 3:\n                if device_model_name is None:\n                    device_model_name = matches[0]\n                lang_code: str = matches[1]\n                lang_file = parsed_languages.get(lang_code, None)\n                if lang_file is None and lang_code.startswith(\"multi_\"):\n                    # Multi files wont match, but we fake this by just taking the filename to it\n                    lang_file = {\n                        \"languageLocalName\": lang_code.replace(\"multi_\", \"\").replace(\n                            \"compressed_\", \"\"\n                        )\n                    }\n                if lang_file is None:\n                    raise Exception(f\"Could not match language code {lang_code}\")\n                file_record = {\n                    \"language_code\": lang_code,\n                    \"language_name\": lang_file.get(\"languageLocalName\", None),\n                }\n                output_json[\"contents\"][name] = file_record\n            else:\n                print(f\"failed to parse {matches}\")\n\nif device_model_name is None:\n    raise Exception(\"No files parsed\")\n\noutput_json[\"model\"] = device_model_name\nwith open(OutputJSONPath, \"w\", encoding=\"utf8\") as json_file:\n    json.dump(output_json, json_file, ensure_ascii=False)\n"
  },
  {
    "path": "source/version.h",
    "content": "/**\n * Firmware build version - format: xx.yy+[.zzzzzzzz]\n *\n * x: major version\n * y: minor version\n * +: build type:\n * * R - git-related release tag vXX.YY\n * * T - git-related release tag but version is not vXX.YY !\n * * D - git-related dev branch\n * * B - git-related custom branch\n * * G - neither above but git-related\n * * H - build outside of a git tree (i.e. release tarball)\n * * S - something special (should not happen?)\n * * V - something very special (should not happen!)\n * z: short commit ID hash generated automaticaly from git\n * * (for git-related build types only)\n *\n * i.e.:\n * * BUILD_VERSION = 'v2.22' -> from tarball:            'v2.22H'\n * * BUILD_VERSION = 'v2.22' -> from git dev branch:     'v2.22D.1A2B3C4D'\n * * BUILD_VERSION = 'v2.22' -> from stable git release: 'v2.22R.5E6F7G8H'\n */\n\n#define BUILD_VERSION \"v2.23\"\n"
  }
]